From minios-devel-bounces@lists.xenproject.org Mon Sep 02 02:35:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 02:35:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4cBa-0000YR-Uw; Mon, 02 Sep 2019 02:35:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=u+3w=W5=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i4cBZ-0000YM-Hu
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 02:35:17 +0000
X-Inumbo-ID: 496999bc-cd2a-11e9-b95f-bc764e2007e4
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.2.77]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 496999bc-cd2a-11e9-b95f-bc764e2007e4;
 Mon, 02 Sep 2019 02:35:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ffkwTyZ7nAvgxkdKHcKk0J9rqBPa0EHMGUzn7MsC8Ew=;
 b=7sFiUqMs1sF6v0rTk7ME++CSzgsPHWw1/6zUmVcBWpISQaBnUVUqzQxVtgUDOH/xqPlyrk6omZUFhJwH0838CBZD2pDy0TBCOUr6+3yEAMKpCXwYgepRklEl5zEC4HnoJCj4k5tT1kloLgZZ+XBxm/UfA81ltmnKCocrNf2j0Vg=
Received: from DB6PR0801CA0064.eurprd08.prod.outlook.com (2603:10a6:4:2b::32)
 by DB6PR0802MB2598.eurprd08.prod.outlook.com (2603:10a6:4:97::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Mon, 2 Sep
 2019 02:35:08 +0000
Received: from VE1EUR03FT040.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::206) by DB6PR0801CA0064.outlook.office365.com
 (2603:10a6:4:2b::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2220.19 via Frontend
 Transport; Mon, 2 Sep 2019 02:35:08 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=temperror action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT040.mail.protection.outlook.com (10.152.18.210) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2220.16 via Frontend Transport; Mon, 2 Sep 2019 02:35:06 +0000
Received: ("Tessian outbound ea3fc1501f20:v27");
 Mon, 02 Sep 2019 02:35:06 +0000
X-CR-MTA-TID: 64aa7808
Received: from e1fb1f4cffba.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.1.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 A98C7834-2A05-4E31-BAB1-A894647251BA.1; 
 Mon, 02 Sep 2019 02:35:01 +0000
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2058.outbound.protection.outlook.com [104.47.1.58])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e1fb1f4cffba.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Mon, 02 Sep 2019 02:35:01 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=DmnDxsJPTpFeBGgR7EHpbiiEHQTCTCutuFOveHFtw7S2VbYQWUmod1R3McRejdoGdpWG+2P3ZIbvbfwcS1qYzVKfMUP3/UKhesF8nOakW5sI4qYHNRLkVYnceRaGpyNON2c+0U2VZyuXncnSHne5CxmOIO94prN5tnz584joEGQoRak5ppkfw1cAN8s5oxQpIp3M2Age551SizyrlbODh2XmZBrAe1v8/B08Kjrf2UdxTQ4dc1EQ8G9SyzpZEH1nlbsapvLm4aSrToST/YY0/oV/9QD5/2yMruhcfDWAJfjq7S8folRcyqmATdwUpyfl3V9eHlH5dVTTl8/bHV/iLw==
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=MF2aJuXtS+NMQuQbTQ36J0/hXv0IF1bTtN4MuFElWyQ=;
 b=HVbiyNafwYQQSy31wNqqLOAO5IeLTg0YpLfcpNWABtzHWoCKQ5Oodj00ZTsYijJqA33izyF1mqt64bKSBke6HIow+HhFRxMFDjHl3UOUlCjLi2LQoUL4dDoQ4XyrtqeeOnU5oxhJvtxoFr8rGxHKPz7bjJMLydOM5wvSw1hscUvnvoHVXiN3lpjFRlwDL6X8KQQBSzn7nvXlnxehpb8DQCMGf87DyJOMUtd+ThuIlqDTELQcrTNfA5uI4J1OylavM62AkPMOv7XZVDO4XmV6P+XGnXdpGzpuwcvru/Eha02M0M83s4Bn8Z3S+oI3MxC9IvGsmdd5yNBxXSFuofyFsQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MF2aJuXtS+NMQuQbTQ36J0/hXv0IF1bTtN4MuFElWyQ=;
 b=Gej+yc6Omc6qSCd6R71jeiHLa2xMMSfcf4LE6/PmQkeagtk6oYxyk9wtW6APQNmQKQZo91ZiZYMUTdFG0YPROxMMPHkRKin8oX86AaEH/iFavn/plCcT6aUNNW354vSENsB9UbYxDcXEbK0ChR3Xi8QA1oyl62QXEym9KcN0dJk=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3594.eurprd08.prod.outlook.com (20.177.120.96) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2157.23; Mon, 2 Sep 2019 02:34:59 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2220.022; Mon, 2 Sep 2019
 02:34:59 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 2/3] Add Makefile.uk and
 main loop glue code
Thread-Index: AQHVXbV0/Z2mWMXmzUu/TFB/1UnYwqcXrYxg
Date: Mon, 2 Sep 2019 02:34:59 +0000
Message-ID: <DB7PR08MB3082EEB097B8F40B2E2FA2BDF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-3-felipe.huici@neclab.eu>
In-Reply-To: <20190828152923.23734-3-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 7e763c6d-5030-4f6a-b036-3faa70b944c7.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 8e6942c4-c50a-4bb9-5869-08d72f4e2ac3
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB7PR08MB3594; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3594:|DB6PR0802MB2598:
X-MS-Exchange-PUrlCount: 2
X-Microsoft-Antispam-PRVS: <DB6PR0802MB2598B25571A4540EFD44F34DF7BE0@DB6PR0802MB2598.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:3513;OLM:3513;
x-forefront-prvs: 01480965DA
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(366004)(376002)(136003)(39850400004)(396003)(346002)(13464003)(189003)(199004)(7736002)(305945005)(2501003)(5660300002)(2906002)(25786009)(33656002)(8676002)(66946007)(66476007)(66556008)(64756008)(66446008)(74316002)(102836004)(186003)(26005)(76176011)(7696005)(3846002)(486006)(11346002)(446003)(86362001)(8936002)(99286004)(476003)(81156014)(81166006)(110136005)(316002)(66066001)(9686003)(6306002)(55016002)(71190400001)(71200400001)(256004)(14444005)(966005)(52536014)(53546011)(6506007)(4326008)(478600001)(6436002)(53946003)(30864003)(53936002)(14454004)(6246003)(6116002)(229853002)(55236004)(76116006)(579004)(559001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3594;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: y61ggKQz+5swTAD7A2istOAKna/XeGwJMOT6s79JhvBVfC82/44+l9W8wDYi+IjmJng/0EDZ0Q4NaHWb67JkBaVwrj/5QgYJ5c/lrtqVOrr5IB+UeTAYDIDJDinRwWpMBEdicHYuAEiG3G9XMK+fD0T9H+Yz3zdVz5VfHNXBOYtIfM3Z/i6uaEN6DhwIAtvlqBk7AQfI1aqfbRjKSDUkhMn8rUUNM3It/uA0OBQiPdr/3j4UqGqoiLwBtg6Tl1VlRGTDwZj7zh22qbjvEkD3EZQo8Cdx+7vT1sUV79RwEQa/MPkhgF99U+pSd70YkLtGAr557sPO6vY9eCALsfqpf0tbozYuOBJ1hqp+vB1JboLIVBBaicFX30jxyrGgzoL92+6UvSSDOpZx1n8+KOWATBY4QGK444TBj/97k3xhb7I=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3594
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT040.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39850400004)(346002)(396003)(136003)(376002)(2980300002)(199004)(189003)(13464003)(40434004)(478600001)(26826003)(86362001)(966005)(2501003)(14454004)(22756006)(11346002)(126002)(356004)(486006)(33656002)(436003)(446003)(63350400001)(63370400001)(74316002)(229853002)(47776003)(102836004)(305945005)(476003)(7696005)(7736002)(76176011)(336012)(2906002)(9686003)(55016002)(53546011)(6506007)(6306002)(5024004)(14444005)(66066001)(316002)(8676002)(36906005)(6246003)(81156014)(81166006)(4326008)(26005)(8936002)(70586007)(70206006)(110136005)(99286004)(107886003)(3846002)(23676004)(2486003)(25786009)(30864003)(186003)(5660300002)(52536014)(6116002)(50466002)(76130400001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0802MB2598;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 11cd765f-b790-4794-27fb-08d72f4e2684
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB6PR0802MB2598; 
X-Forefront-PRVS: 01480965DA
X-Microsoft-Antispam-Message-Info: MWXHgRE5bsOUfCdOAsH2sezN5CT2Gz0JkDE5X7+MfyB92SJ5qmldf1HQwqm95MM0s6MT5CPmHnfrXj/lKT+m+TaciwbvUn7hh1+WDKDHvHBaEzdgnvlrOQztWz/5zw75i/iKNE/AsWia89wt9pz/1C1UKVSZ/QRzzUbs0BXm4mc5vsEv9CkCPKLxszAJn1ZCL7RIBO0V9BIgU+QV4nAJIVgrQFYO+VllZYhVlwTMYuWE/gaZpMh/o28ffLR4fVuzk/g9r5k6mn9bEwiVC1cDJ3VRPlRnXgmI2EPfllgwMnAI3BmBhVHB76keZhyoBaMtqFjd14sW/lmoGDccWRK398VceC+8FiYFGapgVE84VP2WgOHk96nvfeM1Bpmk0ZPz9hu9INq0cS6LVR6gSbuYYkcqVH2uw/ufL4UdBNNGYSY=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2019 02:35:06.6003 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 8e6942c4-c50a-4bb9-5869-08d72f4e2ac3
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2598
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 2/3] Add Makefile.uk and
 main loop glue code
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWluaW9z
LWRldmVsIDxtaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZz4gT24gQmVo
YWxmDQo+IE9mIEZlbGlwZSBIdWljaQ0KPiBTZW50OiAyMDE55bm0OOaciDI45pelIDIzOjI5DQo+
IFRvOiBtaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZw0KPiBDYzogRmVsaXBlIEh1aWNpIDxmZWxp
cGUuaHVpY2lAbmVjbGFiLmV1PjsgU2ltb24gS3Vlbnplcg0KPiA8c2ltb24ua3VlbnplckBuZWNs
YWIuZXU+DQo+IFN1YmplY3Q6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVC9MSUJMVUEgUEFUQ0gg
Mi8zXSBBZGQgTWFrZWZpbGUudWsgYW5kDQo+IG1haW4gbG9vcCBnbHVlIGNvZGUNCj4NCj4gVGhp
cyBpcyBhIHBvcnQgb2YgbHVhIHRvIFVuaWtyYWZ0IGFzIGFuIGV4dGVybmFsIGxpYnJhcnkuIEl0
IHJlcXVpcmVzDQo+IGxpYmMsIHNvIGluIHlvdXIgYXBwbGljYXRpb24gTWFrZWZpbGUgdGhlIGxp
YnJhcnkgZGVwZW5kZW5jeSBsaXN0DQo+IHNob3VsZCByZWFkOg0KPg0KPiAgICAgICAgICAgIExJ
QlMgOj0gLi4uOiQoVUtfTElCUykvbmV3bGliOiQoVUtfTElCUykvbHVhOi4uLg0KPg0KPiBQbGVh
c2UgcmVmZXIgdG8gUkVBRE1FLm1kIGZvciBpbmZvcm1hdGlvbiBvbiBydW5uaW5nIGl0Lg0KPg0K
PiBTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQo+
IFNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0K
PiAtLS0NCj4gIE1ha2VmaWxlLnVrIHwgMTAwICsrKysrKysrKysNCj4gIGx1YS5jICAgICAgIHwg
NjIwDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysNCj4gKysNCj4gIDIgZmlsZXMgY2hhbmdlZCwgNzIwIGluc2VydGlvbnMoKykNCj4g
IGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51aw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGx1
YS5jDQo+DQo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrDQo+IG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLmJkYjMwOTMNCj4gLS0tIC9kZXYvbnVs
bA0KPiArKysgYi9NYWtlZmlsZS51aw0KPiBAQCAtMCwwICsxLDEwMCBAQA0KPiArIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQo+ICsjIExpYnJhcnkgcmVnaXN0cmF0aW9uDQo+ICsjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlibHVhLCQo
Q09ORklHX0xJQkxVQSkpKQ0KPiArDQo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4g
KyMgU291cmNlcw0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICtMSUJMVUFfVkVS
U0lPTj01LjMuNQ0KPiArTElCTFVBX1RBUkJBTEw9bHVhLSQoTElCTFVBX1ZFUlNJT04pDQo+ICtM
SUJMVUFfVVJMPWh0dHBzOi8vd3d3Lmx1YS5vcmcvZnRwLyQoTElCTFVBX1RBUkJBTEwpLnRhci5n
eg0KPiArDQo+ICskKGV2YWwgJChjYWxsIGZldGNoLGxpYmx1YSwkKExJQkxVQV9VUkwpKSkNCj4g
Kw0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICsjIEhlbHBlcnMNCj4gKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArTElCTFVBX1NSQ1NfQkFTRT0kKExJQkxVQV9PUklH
SU4pLyQoTElCTFVBX1RBUkJBTEwpL3NyYw0KPiArDQo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMNCj4gKyMgTGlicmFyeSBpbmNsdWRlcw0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjDQo+ICsjIFB1dCBwdWJsaWMgaGVhZGVycyBvZiB0aGUgbGlicmFyeSB0byBhIHB1YmxpYyBm
b2xkZXIgYW5kIGV4cG9ydCB0aGVtDQo+IGdsb2JhbGx5Lg0KPiArIyBUaGUgcHJlcGFyZSBzdGVw
IGJlbG93IHRha2VzIGNhcmUgb2YgcG9wdWxhdGluZyB0aGUgZm9sZGVyLg0KPiArJChjYWxsIG1r
X3N1Yl9idWlsZF9kaXIsbGlibHVhL2luY2x1ZGUpDQo+ICtDSU5DTFVERVMtJChDT05GSUdfTElC
TFVBKSAgICs9IC1JJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUNCj4gK0NQUElOQ0xVREVTLSQoQ09O
RklHX0xJQkxVQSkgKz0gLUkkKExJQkxVQV9CVUlMRCkvaW5jbHVkZQ0KPiArDQo+ICsjIFByaXZh
dGUgaGVhZGVycw0KPiArTElCTFVBX0NJTkNMVURFUy15ICs9IC1JJChMSUJMVUFfU1JDU19CQVNF
KQ0KPiArDQo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMNCj4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gKyMgQ29tcGlsYXRpb24g
dW5pdA0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICtMSUJMVUFfQ0ZMQUdTLXkg
Kz0gLURMVUFfQ09NUEFUXzVfMg0KPiArDQo+ICsjIE1haW4gbG9vcA0KPiArTElCTFVBX1NSQ1Mt
eSArPSAkKExJQkxVQV9CQVNFKS9sdWEuYw0KPiArDQo+ICsjIENPUkVfTw0KPiArTElCTFVBX1NS
Q1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xhcGkuYw0KPiArTElCTFVBX1NSQ1MteSArPSAk
KExJQkxVQV9TUkNTX0JBU0UpL2xjb2RlLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFf
U1JDU19CQVNFKS9sY3R5cGUuYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JB
U0UpL2xkZWJ1Zy5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGRv
LmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sZHVtcC5jDQo+ICtM
SUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGZ1bmMuYw0KPiArTElCTFVBX1NS
Q1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xnYy5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQo
TElCTFVBX1NSQ1NfQkFTRSkvbGxleC5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NS
Q1NfQkFTRSkvbG1lbS5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkv
bG9iamVjdC5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG9wY29k
ZXMuYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xwYXJzZXIuYw0K
PiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xzdGF0ZS5jDQo+ICtMSUJM
VUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHN0cmluZy5jDQo+ICtMSUJMVUFfU1JD
Uy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRhYmxlLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0g
JChMSUJMVUFfU1JDU19CQVNFKS9sdG0uYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9T
UkNTX0JBU0UpL2x1bmR1bXAuYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JB
U0UpL2x2bS5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHppby5j
DQo+ICsNCj4gKyMgTElCX08NCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNF
KS9sYXV4bGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sYmFz
ZWxpYi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGJpdGxpYi5j
DQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGNvcm9saWIuYw0KPiAr
TElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkYmxpYi5jDQo+ICtMSUJMVUFf
U1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGlvbGliLmMNCj4gK0xJQkxVQV9TUkNTLXkg
Kz0gJChMSUJMVUFfU1JDU19CQVNFKS9sbWF0aGxpYi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQo
TElCTFVBX1NSQ1NfQkFTRSkvbG9zbGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFf
U1JDU19CQVNFKS9sc3RybGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19C
QVNFKS9sdGFibGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9s
dXRmOGxpYi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG9hZGxp
Yi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGluaXQuYw0KPiAr
DQo+ICsNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArIyBsaWJyYXkgQVBJIGhl
YWRlcnMNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArJChMSUJMVUFfU1JDU19C
QVNFKS8lLmg6ICQoTElCTFVBX0JVSUxEKS8ub3JpZ2luDQo+ICsgICAgIEAjIGVtcHR5IHJlY2lw
ZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBleHRyYWN0aW9uDQo+ICsNCj4gKyQo
TElCTFVBX0JVSUxEKS9pbmNsdWRlLyUuaDogJChMSUJMVUFfU1JDU19CQVNFKS8lLmgNCj4gKyAg
ICAgJChjYWxsIGJ1aWxkX2NtZCxMTixsaWJsdWEsJEAsXA0KPiArICAgICBsbiAtc2YgJDwgJEAp
DQo+ICsNCj4gKyQoTElCTFVBX1NSQ1NfQkFTRSkvJS5ocHA6ICQoTElCTFVBX0JVSUxEKS8ub3Jp
Z2luDQo+ICsgICAgIEAjIGVtcHR5IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJj
aGl2ZSBleHRyYWN0aW9uDQo+ICsNCj4gKyQoTElCTFVBX0JVSUxEKS9pbmNsdWRlLyUuaHBwOiAk
KExJQkxVQV9TUkNTX0JBU0UpLyUuaHBwDQo+ICsgICAgICQoY2FsbCBidWlsZF9jbWQsTE4sbGli
bHVhLCRALFwNCj4gKyAgICAgbG4gLXNmICQ8ICRAKQ0KPiArDQo+ICsjIFRPX0lOQw0KPiArVUtf
UFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWEuaA0KPiArVUtfUFJFUEFSRSAr
PSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWFjb25mLmgNCj4gK1VLX1BSRVBBUkUgKz0gJChM
SUJMVUFfQlVJTEQpL2luY2x1ZGUvbHVhbGliLmgNCj4gK1VLX1BSRVBBUkUgKz0gJChMSUJMVUFf
QlVJTEQpL2luY2x1ZGUvbGF1eGxpYi5oDQo+ICtVS19QUkVQQVJFICs9ICQoTElCTFVBX0JVSUxE
KS9pbmNsdWRlL2x1YS5ocHANCj4gZGlmZiAtLWdpdCBhL2x1YS5jIGIvbHVhLmMNCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uOGYyZjg2MA0KPiAtLS0gL2Rldi9udWxs
DQo+ICsrKyBiL2x1YS5jDQoNCkxvb2tzIGxpa2UgdGhlIHN0YW5kYWxvbmUgbHVhIGludGVycHJl
dGVyIG9yaWdpbmF0ZXMgZnJvbQ0KaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2x1
YS9sdWEvdjUuMy41L2x1YS5jDQpCdXQgSSBzYXcgc29tZSB0YWJzIHdlcmUgY2hhbmdlZCBpbnRv
IHNwYWNlcywgaXMgdGhhdCBpbnRlbnRpb25hbD8NCklNTywgaXQgd291bGQgYmUgYmV0dGVyIGlm
IHdlIGNoYW5nZXMgbGVzcw0KDQotLQ0KQ2hlZXJzLA0KSnVzdGluIChKaWEgSGUpDQoNCg0KDQo+
IEBAIC0wLDAgKzEsNjIwIEBADQo+ICsvKg0KPiArKiogJElkOiBsdWEuYyx2IDEuMjMwLjEuMSAy
MDE3LzA0LzE5IDE3OjI5OjU3IHJvYmVydG8gRXhwICQNCj4gKyoqIEx1YSBzdGFuZC1hbG9uZSBp
bnRlcnByZXRlcg0KPiArKiogU2VlIENvcHlyaWdodCBOb3RpY2UgaW4gbHVhLmgNCj4gKyovDQo+
ICsNCj4gKyNkZWZpbmUgbHVhX2MNCj4gKw0KPiArI2luY2x1ZGUgImxwcmVmaXguaCINCj4gKw0K
PiArDQo+ICsjaW5jbHVkZSA8c2lnbmFsLmg+DQo+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gKyNp
bmNsdWRlIDxzdGRsaWIuaD4NCj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gKw0KPiArI2luY2x1
ZGUgImx1YS5oIg0KPiArDQo+ICsjaW5jbHVkZSAibGF1eGxpYi5oIg0KPiArI2luY2x1ZGUgImx1
YWxpYi5oIg0KPiArDQo+ICsjaW5jbHVkZSA8dWsvcGxhdC9tZW1vcnkuaD4NCj4gKw0KPiArI2lm
ICFkZWZpbmVkKExVQV9QUk9NUFQpDQo+ICsjZGVmaW5lIExVQV9QUk9NUFQgICAgICAgICAgICI+
ICINCj4gKyNkZWZpbmUgTFVBX1BST01QVDIgICAgICAgICAgIj4+ICINCj4gKyNlbmRpZg0KPiAr
DQo+ICsjaWYgIWRlZmluZWQoTFVBX1BST0dOQU1FKQ0KPiArI2RlZmluZSBMVUFfUFJPR05BTUUg
ICAgICAgICAibHVhIg0KPiArI2VuZGlmDQo+ICsNCj4gKyNpZiAhZGVmaW5lZChMVUFfTUFYSU5Q
VVQpDQo+ICsjZGVmaW5lIExVQV9NQVhJTlBVVCAgICAgICAgIDUxMg0KPiArI2VuZGlmDQo+ICsN
Cj4gKyNpZiAhZGVmaW5lZChMVUFfSU5JVF9WQVIpDQo+ICsjZGVmaW5lIExVQV9JTklUX1ZBUiAg
ICAgICAgICJMVUFfSU5JVCINCj4gKyNlbmRpZg0KPiArDQo+ICsjZGVmaW5lIExVQV9JTklUVkFS
VkVSU0lPTiAgIExVQV9JTklUX1ZBUiBMVUFfVkVSU1VGRklYDQo+ICsNCj4gKw0KPiArLyoNCj4g
KyoqIGx1YV9zdGRpbl9pc190dHkgZGV0ZWN0cyB3aGV0aGVyIHRoZSBzdGFuZGFyZCBpbnB1dCBp
cyBhICd0dHknICh0aGF0DQo+ICsqKiBpcywgd2hldGhlciB3ZSdyZSBydW5uaW5nIGx1YSBpbnRl
cmFjdGl2ZWx5KS4NCj4gKyovDQo+ICsjaWYgIWRlZmluZWQobHVhX3N0ZGluX2lzX3R0eSkgICAg
ICAgLyogeyAqLw0KPiArDQo+ICsjaWYgZGVmaW5lZChMVUFfVVNFX1BPU0lYKSAgIC8qIHsgKi8N
Cj4gKw0KPiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KPiArI2RlZmluZSBsdWFfc3RkaW5faXNfdHR5
KCkgICBpc2F0dHkoMCkNCj4gKw0KPiArI2VsaWYgZGVmaW5lZChMVUFfVVNFX1dJTkRPV1MpICAg
ICAgIC8qIH17ICovDQo+ICsNCj4gKyNpbmNsdWRlIDxpby5oPg0KPiArI2luY2x1ZGUgPHdpbmRv
d3MuaD4NCj4gKw0KPiArI2RlZmluZSBsdWFfc3RkaW5faXNfdHR5KCkgICBfaXNhdHR5KF9maWxl
bm8oc3RkaW4pKQ0KPiArDQo+ICsjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LyogfXsgKi8NCj4gKw0KPiArLyogSVNPIEMgZGVmaW5pdGlvbiAqLw0KPiArI2RlZmluZSBsdWFf
c3RkaW5faXNfdHR5KCkgICAxICAvKiBhc3N1bWUgc3RkaW4gaXMgYSB0dHkgKi8NCj4gKw0KPiAr
I2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH0gKi8NCj4gKw0KPiArI2Vu
ZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH0gKi8NCj4gKw0KPiArDQo+ICsv
Kg0KPiArKiogbHVhX3JlYWRsaW5lIGRlZmluZXMgaG93IHRvIHNob3cgYSBwcm9tcHQgYW5kIHRo
ZW4gcmVhZCBhIGxpbmUgZnJvbQ0KPiArKiogdGhlIHN0YW5kYXJkIGlucHV0Lg0KPiArKiogbHVh
X3NhdmVsaW5lIGRlZmluZXMgaG93IHRvICJzYXZlIiBhIHJlYWQgbGluZSBpbiBhICJoaXN0b3J5
Ii4NCj4gKyoqIGx1YV9mcmVlbGluZSBkZWZpbmVzIGhvdyB0byBmcmVlIGEgbGluZSByZWFkIGJ5
IGx1YV9yZWFkbGluZS4NCj4gKyovDQo+ICsjaWYgIWRlZmluZWQobHVhX3JlYWRsaW5lKSAgIC8q
IHsgKi8NCj4gKw0KPiArI2lmIGRlZmluZWQoTFVBX1VTRV9SRUFETElORSkgICAgICAgIC8qIHsg
Ki8NCj4gKw0KPiArI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+DQo+ICsjaW5jbHVkZSA8
cmVhZGxpbmUvaGlzdG9yeS5oPg0KPiArI2RlZmluZSBsdWFfcmVhZGxpbmUoTCxiLHApICAoKHZv
aWQpTCwgKChiKT1yZWFkbGluZShwKSkgIT0gTlVMTCkNCj4gKyNkZWZpbmUgbHVhX3NhdmVsaW5l
KEwsbGluZSkgKCh2b2lkKUwsIGFkZF9oaXN0b3J5KGxpbmUpKQ0KPiArI2RlZmluZSBsdWFfZnJl
ZWxpbmUoTCxiKSAgICAoKHZvaWQpTCwgZnJlZShiKSkNCj4gKw0KPiArI2Vsc2UgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8qIH17ICovDQo+ICsNCj4gKyNkZWZpbmUgbHVhX3JlYWRs
aW5lKEwsYixwKSBcDQo+ICsgICAgICAgICgodm9pZClMLCBmcHV0cyhwLCBzdGRvdXQpLCBmZmx1
c2goc3Rkb3V0KSwgIC8qIHNob3cgcHJvbXB0ICovIFwNCj4gKyAgICAgICAgZmdldHMoYiwgTFVB
X01BWElOUFVULCBzdGRpbikgIT0gTlVMTCkgIC8qIGdldCBsaW5lICovDQo+ICsjZGVmaW5lIGx1
YV9zYXZlbGluZShMLGxpbmUpIHsgKHZvaWQpTDsgKHZvaWQpbGluZTsgfQ0KPiArI2RlZmluZSBs
dWFfZnJlZWxpbmUoTCxiKSAgICB7ICh2b2lkKUw7ICh2b2lkKWI7IH0NCj4gKw0KPiArI2VuZGlm
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH0gKi8NCj4gKw0KPiArI2VuZGlmICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH0gKi8NCj4gKw0KPiArDQo+ICsNCj4gKw0K
PiArc3RhdGljIGx1YV9TdGF0ZSAqZ2xvYmFsTCA9IE5VTEw7DQo+ICsNCj4gK3N0YXRpYyBjb25z
dCBjaGFyICpwcm9nbmFtZSA9IExVQV9QUk9HTkFNRTsNCj4gKw0KPiArDQo+ICsvKg0KPiArKiog
SG9vayBzZXQgYnkgc2lnbmFsIGZ1bmN0aW9uIHRvIHN0b3AgdGhlIGludGVycHJldGVyLg0KPiAr
Ki8NCj4gK3N0YXRpYyB2b2lkIGxzdG9wIChsdWFfU3RhdGUgKkwsIGx1YV9EZWJ1ZyAqYXIpIHsN
Cj4gKyAgKHZvaWQpYXI7ICAvKiB1bnVzZWQgYXJnLiAqLw0KPiArICBsdWFfc2V0aG9vayhMLCBO
VUxMLCAwLCAwKTsgIC8qIHJlc2V0IGhvb2sgKi8NCj4gKyAgbHVhTF9lcnJvcihMLCAiaW50ZXJy
dXB0ZWQhIik7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoNCj4gKyoqIEZ1bmN0aW9uIHRvIGJlIGNh
bGxlZCBhdCBhIEMgc2lnbmFsLiBCZWNhdXNlIGEgQyBzaWduYWwgY2Fubm90DQo+ICsqKiBqdXN0
IGNoYW5nZSBhIEx1YSBzdGF0ZSAoYXMgdGhlcmUgaXMgbm8gcHJvcGVyIHN5bmNocm9uaXphdGlv
biksDQo+ICsqKiB0aGlzIGZ1bmN0aW9uIG9ubHkgc2V0cyBhIGhvb2sgdGhhdCwgd2hlbiBjYWxs
ZWQsIHdpbGwgc3RvcCB0aGUNCj4gKyoqIGludGVycHJldGVyLg0KPiArKi8NCj4gK3N0YXRpYyB2
b2lkIGxhY3Rpb24gKGludCBpKSB7DQo+ICsgIHNpZ25hbChpLCBTSUdfREZMKTsgLyogaWYgYW5v
dGhlciBTSUdJTlQgaGFwcGVucywgdGVybWluYXRlIHByb2Nlc3MgKi8NCj4gKyAgbHVhX3NldGhv
b2soZ2xvYmFsTCwgbHN0b3AsIExVQV9NQVNLQ0FMTCB8IExVQV9NQVNLUkVUIHwNCj4gTFVBX01B
U0tDT1VOVCwgMSk7DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2Ug
KGNvbnN0IGNoYXIgKmJhZG9wdGlvbikgew0KPiArICBsdWFfd3JpdGVzdHJpbmdlcnJvcigiJXM6
ICIsIHByb2duYW1lKTsNCj4gKyAgaWYgKGJhZG9wdGlvblsxXSA9PSAnZScgfHwgYmFkb3B0aW9u
WzFdID09ICdsJykNCj4gKyAgICBsdWFfd3JpdGVzdHJpbmdlcnJvcigiJyVzJyBuZWVkcyBhcmd1
bWVudFxuIiwgYmFkb3B0aW9uKTsNCj4gKyAgZWxzZQ0KPiArICAgIGx1YV93cml0ZXN0cmluZ2Vy
cm9yKCJ1bnJlY29nbml6ZWQgb3B0aW9uICclcydcbiIsIGJhZG9wdGlvbik7DQo+ICsgIGx1YV93
cml0ZXN0cmluZ2Vycm9yKA0KPiArICAidXNhZ2U6ICVzIFtvcHRpb25zXSBbc2NyaXB0IFthcmdz
XV1cbiINCj4gKyAgIkF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiINCj4gKyAgIiAgLWUgc3RhdCAg
ZXhlY3V0ZSBzdHJpbmcgJ3N0YXQnXG4iDQo+ICsgICIgIC1pICAgICAgIGVudGVyIGludGVyYWN0
aXZlIG1vZGUgYWZ0ZXIgZXhlY3V0aW5nICdzY3JpcHQnXG4iDQo+ICsgICIgIC1sIG5hbWUgIHJl
cXVpcmUgbGlicmFyeSAnbmFtZScgaW50byBnbG9iYWwgJ25hbWUnXG4iDQo+ICsgICIgIC12ICAg
ICAgIHNob3cgdmVyc2lvbiBpbmZvcm1hdGlvblxuIg0KPiArICAiICAtRSAgICAgICBpZ25vcmUg
ZW52aXJvbm1lbnQgdmFyaWFibGVzXG4iDQo+ICsgICIgIC0tICAgICAgIHN0b3AgaGFuZGxpbmcg
b3B0aW9uc1xuIg0KPiArICAiICAtICAgICAgICBzdG9wIGhhbmRsaW5nIG9wdGlvbnMgYW5kIGV4
ZWN1dGUgc3RkaW5cbiINCj4gKyAgLA0KPiArICBwcm9nbmFtZSk7DQo+ICt9DQo+ICsNCj4gKw0K
PiArLyoNCj4gKyoqIFByaW50cyBhbiBlcnJvciBtZXNzYWdlLCBhZGRpbmcgdGhlIHByb2dyYW0g
bmFtZSBpbiBmcm9udCBvZiBpdA0KPiArKiogKGlmIHByZXNlbnQpDQo+ICsqLw0KPiArc3RhdGlj
IHZvaWQgbF9tZXNzYWdlIChjb25zdCBjaGFyICpwbmFtZSwgY29uc3QgY2hhciAqbXNnKSB7DQo+
ICsgIGlmIChwbmFtZSkgbHVhX3dyaXRlc3RyaW5nZXJyb3IoIiVzOiAiLCBwbmFtZSk7DQo+ICsg
IGx1YV93cml0ZXN0cmluZ2Vycm9yKCIlc1xuIiwgbXNnKTsNCj4gK30NCj4gKw0KPiArDQo+ICsv
Kg0KPiArKiogQ2hlY2sgd2hldGhlciAnc3RhdHVzJyBpcyBub3QgT0sgYW5kLCBpZiBzbywgcHJp
bnRzIHRoZSBlcnJvcg0KPiArKiogbWVzc2FnZSBvbiB0aGUgdG9wIG9mIHRoZSBzdGFjay4gSXQg
YXNzdW1lcyB0aGF0IHRoZSBlcnJvciBvYmplY3QNCj4gKyoqIGlzIGEgc3RyaW5nLCBhcyBpdCB3
YXMgZWl0aGVyIGdlbmVyYXRlZCBieSBMdWEgb3IgYnkgJ21zZ2hhbmRsZXInLg0KPiArKi8NCj4g
K3N0YXRpYyBpbnQgcmVwb3J0IChsdWFfU3RhdGUgKkwsIGludCBzdGF0dXMpIHsNCj4gKyAgaWYg
KHN0YXR1cyAhPSBMVUFfT0spIHsNCj4gKyAgICBjb25zdCBjaGFyICptc2cgPSBsdWFfdG9zdHJp
bmcoTCwgLTEpOw0KPiArICAgIGxfbWVzc2FnZShwcm9nbmFtZSwgbXNnKTsNCj4gKyAgICBsdWFf
cG9wKEwsIDEpOyAgLyogcmVtb3ZlIG1lc3NhZ2UgKi8NCj4gKyAgfQ0KPiArICByZXR1cm4gc3Rh
dHVzOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsqKiBNZXNzYWdlIGhhbmRsZXIgdXNlZCB0
byBydW4gYWxsIGNodW5rcw0KPiArKi8NCj4gK3N0YXRpYyBpbnQgbXNnaGFuZGxlciAobHVhX1N0
YXRlICpMKSB7DQo+ICsgIGNvbnN0IGNoYXIgKm1zZyA9IGx1YV90b3N0cmluZyhMLCAxKTsNCj4g
KyAgaWYgKG1zZyA9PSBOVUxMKSB7ICAvKiBpcyBlcnJvciBvYmplY3Qgbm90IGEgc3RyaW5nPyAq
Lw0KPiArICAgIGlmIChsdWFMX2NhbGxtZXRhKEwsIDEsICJfX3Rvc3RyaW5nIikgJiYgIC8qIGRv
ZXMgaXQgaGF2ZSBhIG1ldGFtZXRob2QNCj4gKi8NCj4gKyAgICAgICAgbHVhX3R5cGUoTCwgLTEp
ID09IExVQV9UU1RSSU5HKSAgLyogdGhhdCBwcm9kdWNlcyBhIHN0cmluZz8gKi8NCj4gKyAgICAg
IHJldHVybiAxOyAgLyogdGhhdCBpcyB0aGUgbWVzc2FnZSAqLw0KPiArICAgIGVsc2UNCj4gKyAg
ICAgIG1zZyA9IGx1YV9wdXNoZnN0cmluZyhMLCAiKGVycm9yIG9iamVjdCBpcyBhICVzIHZhbHVl
KSIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHVhTF90eXBlbmFtZShMLCAx
KSk7DQo+ICsgIH0NCj4gKyAgbHVhTF90cmFjZWJhY2soTCwgTCwgbXNnLCAxKTsgIC8qIGFwcGVu
ZCBhIHN0YW5kYXJkIHRyYWNlYmFjayAqLw0KPiArICByZXR1cm4gMTsgIC8qIHJldHVybiB0aGUg
dHJhY2ViYWNrICovDQo+ICt9DQo+ICsNCj4gKw0KPiArLyoNCj4gKyoqIEludGVyZmFjZSB0byAn
bHVhX3BjYWxsJywgd2hpY2ggc2V0cyBhcHByb3ByaWF0ZSBtZXNzYWdlIGZ1bmN0aW9uDQo+ICsq
KiBhbmQgQy1zaWduYWwgaGFuZGxlci4gVXNlZCB0byBydW4gYWxsIGNodW5rcy4NCj4gKyovDQo+
ICtzdGF0aWMgaW50IGRvY2FsbCAobHVhX1N0YXRlICpMLCBpbnQgbmFyZywgaW50IG5yZXMpIHsN
Cj4gKyAgaW50IHN0YXR1czsNCj4gKyAgaW50IGJhc2UgPSBsdWFfZ2V0dG9wKEwpIC0gbmFyZzsg
IC8qIGZ1bmN0aW9uIGluZGV4ICovDQo+ICsgIGx1YV9wdXNoY2Z1bmN0aW9uKEwsIG1zZ2hhbmRs
ZXIpOyAgLyogcHVzaCBtZXNzYWdlIGhhbmRsZXIgKi8NCj4gKyAgbHVhX2luc2VydChMLCBiYXNl
KTsgIC8qIHB1dCBpdCB1bmRlciBmdW5jdGlvbiBhbmQgYXJncyAqLw0KPiArICBnbG9iYWxMID0g
TDsgIC8qIHRvIGJlIGF2YWlsYWJsZSB0byAnbGFjdGlvbicgKi8NCj4gKyAgc2lnbmFsKFNJR0lO
VCwgbGFjdGlvbik7ICAvKiBzZXQgQy1zaWduYWwgaGFuZGxlciAqLw0KPiArICBzdGF0dXMgPSBs
dWFfcGNhbGwoTCwgbmFyZywgbnJlcywgYmFzZSk7DQo+ICsgIHNpZ25hbChTSUdJTlQsIFNJR19E
RkwpOyAvKiByZXNldCBDLXNpZ25hbCBoYW5kbGVyICovDQo+ICsgIGx1YV9yZW1vdmUoTCwgYmFz
ZSk7ICAvKiByZW1vdmUgbWVzc2FnZSBoYW5kbGVyIGZyb20gdGhlIHN0YWNrICovDQo+ICsgIHJl
dHVybiBzdGF0dXM7DQo+ICt9DQo+ICsNCj4gKw0KPiArc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lv
biAodm9pZCkgew0KPiArICBsdWFfd3JpdGVzdHJpbmcoTFVBX0NPUFlSSUdIVCwgc3RybGVuKExV
QV9DT1BZUklHSFQpKTsNCj4gKyAgbHVhX3dyaXRlbGluZSgpOw0KPiArfQ0KPiArDQo+ICsNCj4g
Ky8qDQo+ICsqKiBDcmVhdGUgdGhlICdhcmcnIHRhYmxlLCB3aGljaCBzdG9yZXMgYWxsIGFyZ3Vt
ZW50cyBmcm9tIHRoZQ0KPiArKiogY29tbWFuZCBsaW5lICgnYXJndicpLiBJdCBzaG91bGQgYmUg
YWxpZ25lZCBzbyB0aGF0LCBhdCBpbmRleCAwLA0KPiArKiogaXQgaGFzICdhcmd2W3NjcmlwdF0n
LCB3aGljaCBpcyB0aGUgc2NyaXB0IG5hbWUuIFRoZSBhcmd1bWVudHMNCj4gKyoqIHRvIHRoZSBz
Y3JpcHQgKGV2ZXJ5dGhpbmcgYWZ0ZXIgJ3NjcmlwdCcpIGdvIHRvIHBvc2l0aXZlIGluZGljZXM7
DQo+ICsqKiBvdGhlciBhcmd1bWVudHMgKGJlZm9yZSB0aGUgc2NyaXB0IG5hbWUpIGdvIHRvIG5l
Z2F0aXZlIGluZGljZXMuDQo+ICsqKiBJZiB0aGVyZSBpcyBubyBzY3JpcHQgbmFtZSwgYXNzdW1l
IGludGVycHJldGVyJ3MgbmFtZSBhcyBiYXNlLg0KPiArKi8NCj4gK3N0YXRpYyB2b2lkIGNyZWF0
ZWFyZ3RhYmxlIChsdWFfU3RhdGUgKkwsIGNoYXIgKiphcmd2LCBpbnQgYXJnYywgaW50IHNjcmlw
dCkgew0KPiArICBpbnQgaSwgbmFyZzsNCj4gKyAgaWYgKHNjcmlwdCA9PSBhcmdjKSBzY3JpcHQg
PSAwOyAgLyogbm8gc2NyaXB0IG5hbWU/ICovDQo+ICsgIG5hcmcgPSBhcmdjIC0gKHNjcmlwdCAr
IDEpOyAgLyogbnVtYmVyIG9mIHBvc2l0aXZlIGluZGljZXMgKi8NCj4gKyAgbHVhX2NyZWF0ZXRh
YmxlKEwsIG5hcmcsIHNjcmlwdCArIDEpOw0KPiArICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsr
KSB7DQo+ICsgICAgbHVhX3B1c2hzdHJpbmcoTCwgYXJndltpXSk7DQo+ICsgICAgbHVhX3Jhd3Nl
dGkoTCwgLTIsIGkgLSBzY3JpcHQpOw0KPiArICB9DQo+ICsgIGx1YV9zZXRnbG9iYWwoTCwgImFy
ZyIpOw0KPiArfQ0KPiArDQo+ICsNCj4gK3N0YXRpYyBpbnQgZG9jaHVuayAobHVhX1N0YXRlICpM
LCBpbnQgc3RhdHVzKSB7DQo+ICsgIGlmIChzdGF0dXMgPT0gTFVBX09LKSBzdGF0dXMgPSBkb2Nh
bGwoTCwgMCwgMCk7DQo+ICsgIHJldHVybiByZXBvcnQoTCwgc3RhdHVzKTsNCj4gK30NCj4gKw0K
PiArDQo+ICtzdGF0aWMgaW50IGRvZmlsZSAobHVhX1N0YXRlICpMLCBjb25zdCBjaGFyICpuYW1l
KSB7DQo+ICsgIHJldHVybiBkb2NodW5rKEwsIGx1YUxfbG9hZGZpbGUoTCwgbmFtZSkpOw0KPiAr
fQ0KPiArDQo+ICsNCj4gK3N0YXRpYyBpbnQgZG9zdHJpbmcgKGx1YV9TdGF0ZSAqTCwgY29uc3Qg
Y2hhciAqcywgY29uc3QgY2hhciAqbmFtZSkgew0KPiArICByZXR1cm4gZG9jaHVuayhMLCBsdWFM
X2xvYWRidWZmZXIoTCwgcywgc3RybGVuKHMpLCBuYW1lKSk7DQo+ICt9DQo+ICsNCj4gKw0KPiAr
LyoNCj4gKyoqIENhbGxzICdyZXF1aXJlKG5hbWUpJyBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4g
YSBnbG9iYWwgdmFyaWFibGUNCj4gKyoqIHdpdGggdGhlIGdpdmVuIG5hbWUuDQo+ICsqLw0KPiAr
c3RhdGljIGludCBkb2xpYnJhcnkgKGx1YV9TdGF0ZSAqTCwgY29uc3QgY2hhciAqbmFtZSkgew0K
PiArICBpbnQgc3RhdHVzOw0KPiArICBsdWFfZ2V0Z2xvYmFsKEwsICJyZXF1aXJlIik7DQo+ICsg
IGx1YV9wdXNoc3RyaW5nKEwsIG5hbWUpOw0KPiArICBzdGF0dXMgPSBkb2NhbGwoTCwgMSwgMSk7
ICAvKiBjYWxsICdyZXF1aXJlKG5hbWUpJyAqLw0KPiArICBpZiAoc3RhdHVzID09IExVQV9PSykN
Cj4gKyAgICBsdWFfc2V0Z2xvYmFsKEwsIG5hbWUpOyAgLyogZ2xvYmFsW25hbWVdID0gcmVxdWly
ZSByZXR1cm4gKi8NCj4gKyAgcmV0dXJuIHJlcG9ydChMLCBzdGF0dXMpOw0KPiArfQ0KPiArDQo+
ICsNCj4gKy8qDQo+ICsqKiBSZXR1cm5zIHRoZSBzdHJpbmcgdG8gYmUgdXNlZCBhcyBhIHByb21w
dCBieSB0aGUgaW50ZXJwcmV0ZXIuDQo+ICsqLw0KPiArc3RhdGljIGNvbnN0IGNoYXIgKmdldF9w
cm9tcHQgKGx1YV9TdGF0ZSAqTCwgaW50IGZpcnN0bGluZSkgew0KPiArICBjb25zdCBjaGFyICpw
Ow0KPiArICBsdWFfZ2V0Z2xvYmFsKEwsIGZpcnN0bGluZSA/ICJfUFJPTVBUIiA6ICJfUFJPTVBU
MiIpOw0KPiArICBwID0gbHVhX3Rvc3RyaW5nKEwsIC0xKTsNCj4gKyAgaWYgKHAgPT0gTlVMTCkg
cCA9IChmaXJzdGxpbmUgPyBMVUFfUFJPTVBUIDogTFVBX1BST01QVDIpOw0KPiArICByZXR1cm4g
cDsNCj4gK30NCj4gKw0KPiArLyogbWFyayBpbiBlcnJvciBtZXNzYWdlcyBmb3IgaW5jb21wbGV0
ZSBzdGF0ZW1lbnRzICovDQo+ICsjZGVmaW5lIEVPRk1BUksgICAgICAgICAgICAgICI8ZW9mPiIN
Cj4gKyNkZWZpbmUgbWFya2xlbiAgICAgICAgICAgICAgKHNpemVvZihFT0ZNQVJLKS9zaXplb2Yo
Y2hhcikgLSAxKQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsqKiBDaGVjayB3aGV0aGVyICdzdGF0dXMn
IHNpZ25hbHMgYSBzeW50YXggZXJyb3IgYW5kIHRoZSBlcnJvcg0KPiArKiogbWVzc2FnZSBhdCB0
aGUgdG9wIG9mIHRoZSBzdGFjayBlbmRzIHdpdGggdGhlIGFib3ZlIG1hcmsgZm9yDQo+ICsqKiBp
bmNvbXBsZXRlIHN0YXRlbWVudHMuDQo+ICsqLw0KPiArc3RhdGljIGludCBpbmNvbXBsZXRlIChs
dWFfU3RhdGUgKkwsIGludCBzdGF0dXMpIHsNCj4gKyAgaWYgKHN0YXR1cyA9PSBMVUFfRVJSU1lO
VEFYKSB7DQo+ICsgICAgc2l6ZV90IGxtc2c7DQo+ICsgICAgY29uc3QgY2hhciAqbXNnID0gbHVh
X3RvbHN0cmluZyhMLCAtMSwgJmxtc2cpOw0KPiArICAgIGlmIChsbXNnID49IG1hcmtsZW4gJiYg
c3RyY21wKG1zZyArIGxtc2cgLSBtYXJrbGVuLCBFT0ZNQVJLKSA9PSAwKSB7DQo+ICsgICAgICBs
dWFfcG9wKEwsIDEpOw0KPiArICAgICAgcmV0dXJuIDE7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsg
IHJldHVybiAwOyAgLyogZWxzZS4uLiAqLw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsqKiBQ
cm9tcHQgdGhlIHVzZXIsIHJlYWQgYSBsaW5lLCBhbmQgcHVzaCBpdCBpbnRvIHRoZSBMdWEgc3Rh
Y2suDQo+ICsqLw0KPiArc3RhdGljIGludCBwdXNobGluZSAobHVhX1N0YXRlICpMLCBpbnQgZmly
c3RsaW5lKSB7DQo+ICsgIGNoYXIgYnVmZmVyW0xVQV9NQVhJTlBVVF07DQo+ICsgIGNoYXIgKmIg
PSBidWZmZXI7DQo+ICsgIHNpemVfdCBsOw0KPiArICBjb25zdCBjaGFyICpwcm10ID0gZ2V0X3By
b21wdChMLCBmaXJzdGxpbmUpOw0KPiArICBpbnQgcmVhZHN0YXR1cyA9IGx1YV9yZWFkbGluZShM
LCBiLCBwcm10KTsNCj4gKyAgaWYgKHJlYWRzdGF0dXMgPT0gMCkNCj4gKyAgICByZXR1cm4gMDsg
IC8qIG5vIGlucHV0IChwcm9tcHQgd2lsbCBiZSBwb3BwZWQgYnkgY2FsbGVyKSAqLw0KPiArICBs
dWFfcG9wKEwsIDEpOyAgLyogcmVtb3ZlIHByb21wdCAqLw0KPiArICBsID0gc3RybGVuKGIpOw0K
PiArICBpZiAobCA+IDAgJiYgYltsLTFdID09ICdcbicpICAvKiBsaW5lIGVuZHMgd2l0aCBuZXds
aW5lPyAqLw0KPiArICAgIGJbLS1sXSA9ICdcMCc7ICAvKiByZW1vdmUgaXQgKi8NCj4gKyAgaWYg
KGZpcnN0bGluZSAmJiBiWzBdID09ICc9JykgIC8qIGZvciBjb21wYXRpYmlsaXR5IHdpdGggNS4y
LCAuLi4gKi8NCj4gKyAgICBsdWFfcHVzaGZzdHJpbmcoTCwgInJldHVybiAlcyIsIGIgKyAxKTsg
IC8qIGNoYW5nZSAnPScgdG8gJ3JldHVybicgKi8NCj4gKyAgZWxzZQ0KPiArICAgIGx1YV9wdXNo
bHN0cmluZyhMLCBiLCBsKTsNCj4gKyAgbHVhX2ZyZWVsaW5lKEwsIGIpOw0KPiArICByZXR1cm4g
MTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKg0KPiArKiogVHJ5IHRvIGNvbXBpbGUgbGluZSBvbiB0
aGUgc3RhY2sgYXMgJ3JldHVybiA8bGluZT47Jzsgb24gcmV0dXJuLCBzdGFjaw0KPiArKiogaGFz
IGVpdGhlciBjb21waWxlZCBjaHVuayBvciBvcmlnaW5hbCBsaW5lIChpZiBjb21waWxhdGlvbiBm
YWlsZWQpLg0KPiArKi8NCj4gK3N0YXRpYyBpbnQgYWRkcmV0dXJuIChsdWFfU3RhdGUgKkwpIHsN
Cj4gKyAgY29uc3QgY2hhciAqbGluZSA9IGx1YV90b3N0cmluZyhMLCAtMSk7ICAvKiBvcmlnaW5h
bCBsaW5lICovDQo+ICsgIGNvbnN0IGNoYXIgKnJldGxpbmUgPSBsdWFfcHVzaGZzdHJpbmcoTCwg
InJldHVybiAlczsiLCBsaW5lKTsNCj4gKyAgaW50IHN0YXR1cyA9IGx1YUxfbG9hZGJ1ZmZlcihM
LCByZXRsaW5lLCBzdHJsZW4ocmV0bGluZSksICI9c3RkaW4iKTsNCj4gKyAgaWYgKHN0YXR1cyA9
PSBMVUFfT0spIHsNCj4gKyAgICBsdWFfcmVtb3ZlKEwsIC0yKTsgIC8qIHJlbW92ZSBtb2RpZmll
ZCBsaW5lICovDQo+ICsgICAgaWYgKGxpbmVbMF0gIT0gJ1wwJykgIC8qIG5vbiBlbXB0eT8gKi8N
Cj4gKyAgICAgIGx1YV9zYXZlbGluZShMLCBsaW5lKTsgIC8qIGtlZXAgaGlzdG9yeSAqLw0KPiAr
ICB9DQo+ICsgIGVsc2UNCj4gKyAgICBsdWFfcG9wKEwsIDIpOyAgLyogcG9wIHJlc3VsdCBmcm9t
ICdsdWFMX2xvYWRidWZmZXInIGFuZCBtb2RpZmllZCBsaW5lICovDQo+ICsgIHJldHVybiBzdGF0
dXM7DQo+ICt9DQo+ICsNCj4gKw0KPiArLyoNCj4gKyoqIFJlYWQgbXVsdGlwbGUgbGluZXMgdW50
aWwgYSBjb21wbGV0ZSBMdWEgc3RhdGVtZW50DQo+ICsqLw0KPiArc3RhdGljIGludCBtdWx0aWxp
bmUgKGx1YV9TdGF0ZSAqTCkgew0KPiArICBmb3IgKDs7KSB7ICAvKiByZXBlYXQgdW50aWwgZ2V0
cyBhIGNvbXBsZXRlIHN0YXRlbWVudCAqLw0KPiArICAgIHNpemVfdCBsZW47DQo+ICsgICAgY29u
c3QgY2hhciAqbGluZSA9IGx1YV90b2xzdHJpbmcoTCwgMSwgJmxlbik7ICAvKiBnZXQgd2hhdCBp
dCBoYXMgKi8NCj4gKyAgICBpbnQgc3RhdHVzID0gbHVhTF9sb2FkYnVmZmVyKEwsIGxpbmUsIGxl
biwgIj1zdGRpbiIpOyAgLyogdHJ5IGl0ICovDQo+ICsgICAgaWYgKCFpbmNvbXBsZXRlKEwsIHN0
YXR1cykgfHwgIXB1c2hsaW5lKEwsIDApKSB7DQo+ICsgICAgICBsdWFfc2F2ZWxpbmUoTCwgbGlu
ZSk7ICAvKiBrZWVwIGhpc3RvcnkgKi8NCj4gKyAgICAgIHJldHVybiBzdGF0dXM7ICAvKiBjYW5u
b3Qgb3Igc2hvdWxkIG5vdCB0cnkgdG8gYWRkIGNvbnRpbnVhdGlvbiBsaW5lICovDQo+ICsgICAg
fQ0KPiArICAgIGx1YV9wdXNobGl0ZXJhbChMLCAiXG4iKTsgIC8qIGFkZCBuZXdsaW5lLi4uICov
DQo+ICsgICAgbHVhX2luc2VydChMLCAtMik7ICAvKiAuLi5iZXR3ZWVuIHRoZSB0d28gbGluZXMg
Ki8NCj4gKyAgICBsdWFfY29uY2F0KEwsIDMpOyAgLyogam9pbiB0aGVtICovDQo+ICsgIH0NCj4g
K30NCj4gKw0KPiArDQo+ICsvKg0KPiArKiogUmVhZCBhIGxpbmUgYW5kIHRyeSB0byBsb2FkIChj
b21waWxlKSBpdCBmaXJzdCBhcyBhbiBleHByZXNzaW9uIChieQ0KPiArKiogYWRkaW5nICJyZXR1
cm4gIiBpbiBmcm9udCBvZiBpdCkgYW5kIHNlY29uZCBhcyBhIHN0YXRlbWVudC4gUmV0dXJuDQo+
ICsqKiB0aGUgZmluYWwgc3RhdHVzIG9mIGxvYWQvY2FsbCB3aXRoIHRoZSByZXN1bHRpbmcgZnVu
Y3Rpb24gKGlmIGFueSkNCj4gKyoqIGluIHRoZSB0b3Agb2YgdGhlIHN0YWNrLg0KPiArKi8NCj4g
K3N0YXRpYyBpbnQgbG9hZGxpbmUgKGx1YV9TdGF0ZSAqTCkgew0KPiArICBpbnQgc3RhdHVzOw0K
PiArICBsdWFfc2V0dG9wKEwsIDApOw0KPiArICBpZiAoIXB1c2hsaW5lKEwsIDEpKQ0KPiArICAg
IHJldHVybiAtMTsgIC8qIG5vIGlucHV0ICovDQo+ICsgIGlmICgoc3RhdHVzID0gYWRkcmV0dXJu
KEwpKSAhPSBMVUFfT0spICAvKiAncmV0dXJuIC4uLicgZGlkIG5vdCB3b3JrPyAqLw0KPiArICAg
IHN0YXR1cyA9IG11bHRpbGluZShMKTsgIC8qIHRyeSBhcyBjb21tYW5kLCBtYXliZSB3aXRoIGNv
bnRpbnVhdGlvbiBsaW5lcw0KPiAqLw0KPiArICBsdWFfcmVtb3ZlKEwsIDEpOyAgLyogcmVtb3Zl
IGxpbmUgZnJvbSB0aGUgc3RhY2sgKi8NCj4gKyAgbHVhX2Fzc2VydChsdWFfZ2V0dG9wKEwpID09
IDEpOw0KPiArICByZXR1cm4gc3RhdHVzOw0KPiArfQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsqKiBQ
cmludHMgKGNhbGxpbmcgdGhlIEx1YSAncHJpbnQnIGZ1bmN0aW9uKSBhbnkgdmFsdWVzIG9uIHRo
ZSBzdGFjaw0KPiArKi8NCj4gK3N0YXRpYyB2b2lkIGxfcHJpbnQgKGx1YV9TdGF0ZSAqTCkgew0K
PiArICBpbnQgbiA9IGx1YV9nZXR0b3AoTCk7DQo+ICsgIGlmIChuID4gMCkgeyAgLyogYW55IHJl
c3VsdCB0byBiZSBwcmludGVkPyAqLw0KPiArICAgIGx1YUxfY2hlY2tzdGFjayhMLCBMVUFfTUlO
U1RBQ0ssICJ0b28gbWFueSByZXN1bHRzIHRvIHByaW50Iik7DQo+ICsgICAgbHVhX2dldGdsb2Jh
bChMLCAicHJpbnQiKTsNCj4gKyAgICBsdWFfaW5zZXJ0KEwsIDEpOw0KPiArICAgIGlmIChsdWFf
cGNhbGwoTCwgbiwgMCwgMCkgIT0gTFVBX09LKQ0KPiArICAgICAgbF9tZXNzYWdlKHByb2duYW1l
LCBsdWFfcHVzaGZzdHJpbmcoTCwgImVycm9yIGNhbGxpbmcgJ3ByaW50JyAoJXMpIiwNCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1YV90b3N0cmluZyhM
LCAtMSkpKTsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsqKiBEbyB0aGUgUkVQ
TDogcmVwZWF0ZWRseSByZWFkIChsb2FkKSBhIGxpbmUsIGV2YWx1YXRlIChjYWxsKSBpdCwgYW5k
DQo+ICsqKiBwcmludCBhbnkgcmVzdWx0cy4NCj4gKyovDQo+ICtzdGF0aWMgdm9pZCBkb1JFUEwg
KGx1YV9TdGF0ZSAqTCkgew0KPiArICBpbnQgc3RhdHVzOw0KPiArICBjb25zdCBjaGFyICpvbGRw
cm9nbmFtZSA9IHByb2duYW1lOw0KPiArICBwcm9nbmFtZSA9IE5VTEw7ICAvKiBubyAncHJvZ25h
bWUnIG9uIGVycm9ycyBpbiBpbnRlcmFjdGl2ZSBtb2RlICovDQo+ICsgIHdoaWxlICgoc3RhdHVz
ID0gbG9hZGxpbmUoTCkpICE9IC0xKSB7DQo+ICsgICAgaWYgKHN0YXR1cyA9PSBMVUFfT0spDQo+
ICsgICAgICBzdGF0dXMgPSBkb2NhbGwoTCwgMCwgTFVBX01VTFRSRVQpOw0KPiArICAgIGlmIChz
dGF0dXMgPT0gTFVBX09LKSBsX3ByaW50KEwpOw0KPiArICAgIGVsc2UgcmVwb3J0KEwsIHN0YXR1
cyk7DQo+ICsgIH0NCj4gKyAgbHVhX3NldHRvcChMLCAwKTsgIC8qIGNsZWFyIHN0YWNrICovDQo+
ICsgIGx1YV93cml0ZWxpbmUoKTsNCj4gKyAgcHJvZ25hbWUgPSBvbGRwcm9nbmFtZTsNCj4gK30N
Cj4gKw0KPiArDQo+ICsvKg0KPiArKiogUHVzaCBvbiB0aGUgc3RhY2sgdGhlIGNvbnRlbnRzIG9m
IHRhYmxlICdhcmcnIGZyb20gMSB0byAjYXJnDQo+ICsqLw0KPiArc3RhdGljIGludCBwdXNoYXJn
cyAobHVhX1N0YXRlICpMKSB7DQo+ICsgIGludCBpLCBuOw0KPiArICBpZiAobHVhX2dldGdsb2Jh
bChMLCAiYXJnIikgIT0gTFVBX1RUQUJMRSkNCj4gKyAgICBsdWFMX2Vycm9yKEwsICInYXJnJyBp
cyBub3QgYSB0YWJsZSIpOw0KPiArICBuID0gKGludClsdWFMX2xlbihMLCAtMSk7DQo+ICsgIGx1
YUxfY2hlY2tzdGFjayhMLCBuICsgMywgInRvbyBtYW55IGFyZ3VtZW50cyB0byBzY3JpcHQiKTsN
Cj4gKyAgZm9yIChpID0gMTsgaSA8PSBuOyBpKyspDQo+ICsgICAgbHVhX3Jhd2dldGkoTCwgLWks
IGkpOw0KPiArICBsdWFfcmVtb3ZlKEwsIC1pKTsgIC8qIHJlbW92ZSB0YWJsZSBmcm9tIHRoZSBz
dGFjayAqLw0KPiArICByZXR1cm4gbjsNCj4gK30NCj4gKw0KPiArDQo+ICtzdGF0aWMgaW50IGhh
bmRsZV9zY3JpcHQgKGx1YV9TdGF0ZSAqTCwgY2hhciAqKmFyZ3YpIHsNCj4gKyAgaW50IHN0YXR1
czsNCj4gKyAgY29uc3QgY2hhciAqZm5hbWUgPSBhcmd2WzBdOw0KPiArICBpZiAoc3RyY21wKGZu
YW1lLCAiLSIpID09IDAgJiYgc3RyY21wKGFyZ3ZbLTFdLCAiLS0iKSAhPSAwKQ0KPiArICAgIGZu
YW1lID0gTlVMTDsgIC8qIHN0ZGluICovDQo+ICsgIHN0YXR1cyA9IGx1YUxfbG9hZGZpbGUoTCwg
Zm5hbWUpOw0KPiArICBpZiAoc3RhdHVzID09IExVQV9PSykgew0KPiArICAgIGludCBuID0gcHVz
aGFyZ3MoTCk7ICAvKiBwdXNoIGFyZ3VtZW50cyB0byBzY3JpcHQgKi8NCj4gKyAgICBzdGF0dXMg
PSBkb2NhbGwoTCwgbiwgTFVBX01VTFRSRVQpOw0KPiArICB9DQo+ICsgIHJldHVybiByZXBvcnQo
TCwgc3RhdHVzKTsNCj4gK30NCj4gKw0KPiArDQo+ICsNCj4gKy8qIGJpdHMgb2YgdmFyaW91cyBh
cmd1bWVudCBpbmRpY2F0b3JzIGluICdhcmdzJyAqLw0KPiArI2RlZmluZSBoYXNfZXJyb3IgICAg
MSAgICAgICAvKiBiYWQgb3B0aW9uICovDQo+ICsjZGVmaW5lIGhhc19pICAgICAgICAgICAgICAg
IDIgICAgICAgLyogLWkgKi8NCj4gKyNkZWZpbmUgaGFzX3YgICAgICAgICAgICAgICAgNCAgICAg
ICAvKiAtdiAqLw0KPiArI2RlZmluZSBoYXNfZSAgICAgICAgICAgICAgICA4ICAgICAgIC8qIC1l
ICovDQo+ICsjZGVmaW5lIGhhc19FICAgICAgICAgICAgICAgIDE2ICAgICAgLyogLUUgKi8NCj4g
Kw0KPiArLyoNCj4gKyoqIFRyYXZlcnNlcyBhbGwgYXJndW1lbnRzIGZyb20gJ2FyZ3YnLCByZXR1
cm5pbmcgYSBtYXNrIHdpdGggdGhvc2UNCj4gKyoqIG5lZWRlZCBiZWZvcmUgcnVubmluZyBhbnkg
THVhIGNvZGUgKG9yIGFuIGVycm9yIGNvZGUgaWYgaXQgZmluZHMNCj4gKyoqIGFueSBpbnZhbGlk
IGFyZ3VtZW50KS4gJ2ZpcnN0JyByZXR1cm5zIHRoZSBmaXJzdCBub3QtaGFuZGxlZCBhcmd1bWVu
dA0KPiArKiogKGVpdGhlciB0aGUgc2NyaXB0IG5hbWUgb3IgYSBiYWQgYXJndW1lbnQgaW4gY2Fz
ZSBvZiBlcnJvcikuDQo+ICsqLw0KPiArc3RhdGljIGludCBjb2xsZWN0YXJncyAoY2hhciAqKmFy
Z3YsIGludCAqZmlyc3QpIHsNCj4gKyAgaW50IGFyZ3MgPSAwOw0KPiArICBpbnQgaTsNCj4gKyAg
Zm9yIChpID0gMTsgYXJndltpXSAhPSBOVUxMOyBpKyspIHsNCj4gKyAgICAqZmlyc3QgPSBpOw0K
PiArICAgIGlmIChhcmd2W2ldWzBdICE9ICctJykgIC8qIG5vdCBhbiBvcHRpb24/ICovDQo+ICsg
ICAgICAgIHJldHVybiBhcmdzOyAgLyogc3RvcCBoYW5kbGluZyBvcHRpb25zICovDQo+ICsgICAg
c3dpdGNoIChhcmd2W2ldWzFdKSB7ICAvKiBlbHNlIGNoZWNrIG9wdGlvbiAqLw0KPiArICAgICAg
Y2FzZSAnLSc6ICAvKiAnLS0nICovDQo+ICsgICAgICAgIGlmIChhcmd2W2ldWzJdICE9ICdcMCcp
ICAvKiBleHRyYSBjaGFyYWN0ZXJzIGFmdGVyICctLSc/ICovDQo+ICsgICAgICAgICAgcmV0dXJu
IGhhc19lcnJvcjsgIC8qIGludmFsaWQgb3B0aW9uICovDQo+ICsgICAgICAgICpmaXJzdCA9IGkg
KyAxOw0KPiArICAgICAgICByZXR1cm4gYXJnczsNCj4gKyAgICAgIGNhc2UgJ1wwJzogIC8qICct
JyAqLw0KPiArICAgICAgICByZXR1cm4gYXJnczsgIC8qIHNjcmlwdCAibmFtZSIgaXMgJy0nICov
DQo+ICsgICAgICBjYXNlICdFJzoNCj4gKyAgICAgICAgaWYgKGFyZ3ZbaV1bMl0gIT0gJ1wwJykg
IC8qIGV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgMXN0PyAqLw0KPiArICAgICAgICAgIHJldHVybiBo
YXNfZXJyb3I7ICAvKiBpbnZhbGlkIG9wdGlvbiAqLw0KPiArICAgICAgICBhcmdzIHw9IGhhc19F
Ow0KPiArICAgICAgICBicmVhazsNCj4gKyAgICAgIGNhc2UgJ2knOg0KPiArICAgICAgICBhcmdz
IHw9IGhhc19pOyAgLyogKC1pIGltcGxpZXMgLXYpICovLyogRkFMTFRIUk9VR0ggKi8NCj4gKyAg
ICAgIGNhc2UgJ3YnOg0KPiArICAgICAgICBpZiAoYXJndltpXVsyXSAhPSAnXDAnKSAgLyogZXh0
cmEgY2hhcmFjdGVycyBhZnRlciAxc3Q/ICovDQo+ICsgICAgICAgICAgcmV0dXJuIGhhc19lcnJv
cjsgIC8qIGludmFsaWQgb3B0aW9uICovDQo+ICsgICAgICAgIGFyZ3MgfD0gaGFzX3Y7DQo+ICsg
ICAgICAgIGJyZWFrOw0KPiArICAgICAgY2FzZSAnZSc6DQo+ICsgICAgICAgIGFyZ3MgfD0gaGFz
X2U7ICAvKiBGQUxMVEhST1VHSCAqLw0KPiArICAgICAgY2FzZSAnbCc6ICAvKiBib3RoIG9wdGlv
bnMgbmVlZCBhbiBhcmd1bWVudCAqLw0KPiArICAgICAgICBpZiAoYXJndltpXVsyXSA9PSAnXDAn
KSB7ICAvKiBubyBjb25jYXRlbmF0ZWQgYXJndW1lbnQ/ICovDQo+ICsgICAgICAgICAgaSsrOyAg
LyogdHJ5IG5leHQgJ2FyZ3YnICovDQo+ICsgICAgICAgICAgaWYgKGFyZ3ZbaV0gPT0gTlVMTCB8
fCBhcmd2W2ldWzBdID09ICctJykNCj4gKyAgICAgICAgICAgIHJldHVybiBoYXNfZXJyb3I7ICAv
KiBubyBuZXh0IGFyZ3VtZW50IG9yIGl0IGlzIGFub3RoZXIgb3B0aW9uICovDQo+ICsgICAgICAg
IH0NCj4gKyAgICAgICAgYnJlYWs7DQo+ICsgICAgICBkZWZhdWx0OiAgLyogaW52YWxpZCBvcHRp
b24gKi8NCj4gKyAgICAgICAgcmV0dXJuIGhhc19lcnJvcjsNCj4gKyAgICB9DQo+ICsgIH0NCj4g
KyAgKmZpcnN0ID0gaTsgIC8qIG5vIHNjcmlwdCBuYW1lICovDQo+ICsgIHJldHVybiBhcmdzOw0K
PiArfQ0KPiArDQo+ICsNCj4gKy8qDQo+ICsqKiBQcm9jZXNzZXMgb3B0aW9ucyAnZScgYW5kICds
Jywgd2hpY2ggaW52b2x2ZSBydW5uaW5nIEx1YSBjb2RlLg0KPiArKiogUmV0dXJucyAwIGlmIHNv
bWUgY29kZSByYWlzZXMgYW4gZXJyb3IuDQo+ICsqLw0KPiArc3RhdGljIGludCBydW5hcmdzIChs
dWFfU3RhdGUgKkwsIGNoYXIgKiphcmd2LCBpbnQgbikgew0KPiArICBpbnQgaTsNCj4gKyAgZm9y
IChpID0gMTsgaSA8IG47IGkrKykgew0KPiArICAgIGludCBvcHRpb24gPSBhcmd2W2ldWzFdOw0K
PiArICAgIGx1YV9hc3NlcnQoYXJndltpXVswXSA9PSAnLScpOyAgLyogYWxyZWFkeSBjaGVja2Vk
ICovDQo+ICsgICAgaWYgKG9wdGlvbiA9PSAnZScgfHwgb3B0aW9uID09ICdsJykgew0KPiArICAg
ICAgaW50IHN0YXR1czsNCj4gKyAgICAgIGNvbnN0IGNoYXIgKmV4dHJhID0gYXJndltpXSArIDI7
ICAvKiBib3RoIG9wdGlvbnMgbmVlZCBhbiBhcmd1bWVudCAqLw0KPiArICAgICAgaWYgKCpleHRy
YSA9PSAnXDAnKSBleHRyYSA9IGFyZ3ZbKytpXTsNCj4gKyAgICAgIGx1YV9hc3NlcnQoZXh0cmEg
IT0gTlVMTCk7DQo+ICsgICAgICBzdGF0dXMgPSAob3B0aW9uID09ICdlJykNCj4gKyAgICAgICAg
ICAgICAgID8gZG9zdHJpbmcoTCwgZXh0cmEsICI9KGNvbW1hbmQgbGluZSkiKQ0KPiArICAgICAg
ICAgICAgICAgOiBkb2xpYnJhcnkoTCwgZXh0cmEpOw0KPiArICAgICAgaWYgKHN0YXR1cyAhPSBM
VUFfT0spIHJldHVybiAwOw0KPiArICAgIH0NCj4gKyAgfQ0KPiArICByZXR1cm4gMTsNCj4gK30N
Cj4gKw0KPiArDQo+ICsNCj4gK3N0YXRpYyBpbnQgaGFuZGxlX2x1YWluaXQgKGx1YV9TdGF0ZSAq
TCkgew0KPiArICBjb25zdCBjaGFyICpuYW1lID0gIj0iIExVQV9JTklUVkFSVkVSU0lPTjsNCj4g
KyAgY29uc3QgY2hhciAqaW5pdCA9IGdldGVudihuYW1lICsgMSk7DQo+ICsgIGlmIChpbml0ID09
IE5VTEwpIHsNCj4gKyAgICBuYW1lID0gIj0iIExVQV9JTklUX1ZBUjsNCj4gKyAgICBpbml0ID0g
Z2V0ZW52KG5hbWUgKyAxKTsgIC8qIHRyeSBhbHRlcm5hdGl2ZSBuYW1lICovDQo+ICsgIH0NCj4g
KyAgaWYgKGluaXQgPT0gTlVMTCkgcmV0dXJuIExVQV9PSzsNCj4gKyAgZWxzZSBpZiAoaW5pdFsw
XSA9PSAnQCcpDQo+ICsgICAgcmV0dXJuIGRvZmlsZShMLCBpbml0KzEpOw0KPiArICBlbHNlDQo+
ICsgICAgcmV0dXJuIGRvc3RyaW5nKEwsIGluaXQsIG5hbWUpOw0KPiArfQ0KPiArDQo+ICsNCj4g
Ky8qDQo+ICsqKiBNYWluIGJvZHkgb2Ygc3RhbmQtYWxvbmUgaW50ZXJwcmV0ZXIgKHRvIGJlIGNh
bGxlZCBpbiBwcm90ZWN0ZWQgbW9kZSkuDQo+ICsqKiBSZWFkcyB0aGUgb3B0aW9ucyBhbmQgaGFu
ZGxlcyB0aGVtIGFsbC4NCj4gKyovDQo+ICtzdGF0aWMgaW50IHBtYWluIChsdWFfU3RhdGUgKkwp
IHsNCj4gKyAgaW50IGFyZ2MgPSAoaW50KWx1YV90b2ludGVnZXIoTCwgMSk7DQo+ICsgIGNoYXIg
Kiphcmd2ID0gKGNoYXIgKiopbHVhX3RvdXNlcmRhdGEoTCwgMik7DQo+ICsgIGludCBzY3JpcHQ7
DQo+ICsgIHN0cnVjdCB1a3BsYXRfbWVtcmVnaW9uX2Rlc2MgaW1nOw0KPiArICBjaGFyICpjc3Ry
Ow0KPiArDQo+ICsgIGludCBhcmdzID0gY29sbGVjdGFyZ3MoYXJndiwgJnNjcmlwdCk7DQo+ICsg
IGx1YUxfY2hlY2t2ZXJzaW9uKEwpOyAgLyogY2hlY2sgdGhhdCBpbnRlcnByZXRlciBoYXMgY29y
cmVjdCB2ZXJzaW9uICovDQo+ICsgIGlmIChhcmd2WzBdICYmIGFyZ3ZbMF1bMF0pIHByb2duYW1l
ID0gYXJndlswXTsNCj4gKyAgaWYgKGFyZ3MgPT0gaGFzX2Vycm9yKSB7ICAvKiBiYWQgYXJnPyAq
Lw0KPiArICAgIHByaW50X3VzYWdlKGFyZ3Zbc2NyaXB0XSk7ICAvKiAnc2NyaXB0JyBoYXMgaW5k
ZXggb2YgYmFkIGFyZy4gKi8NCj4gKyAgICByZXR1cm4gMDsNCj4gKyAgfQ0KPiArICBpZiAoYXJn
cyAmIGhhc192KSAgLyogb3B0aW9uICctdic/ICovDQo+ICsgICAgcHJpbnRfdmVyc2lvbigpOw0K
PiArICBpZiAoYXJncyAmIGhhc19FKSB7ICAvKiBvcHRpb24gJy1FJz8gKi8NCj4gKyAgICBsdWFf
cHVzaGJvb2xlYW4oTCwgMSk7ICAvKiBzaWduYWwgZm9yIGxpYnJhcmllcyB0byBpZ25vcmUgZW52
LiB2YXJzLiAqLw0KPiArICAgIGx1YV9zZXRmaWVsZChMLCBMVUFfUkVHSVNUUllJTkRFWCwgIkxV
QV9OT0VOViIpOw0KPiArICB9DQo+ICsgIGx1YUxfb3BlbmxpYnMoTCk7ICAvKiBvcGVuIHN0YW5k
YXJkIGxpYnJhcmllcyAqLw0KPiArICBjcmVhdGVhcmd0YWJsZShMLCBhcmd2LCBhcmdjLCBzY3Jp
cHQpOyAgLyogY3JlYXRlIHRhYmxlICdhcmcnICovDQo+ICsgIGlmICghKGFyZ3MgJiBoYXNfRSkp
IHsgIC8qIG5vIG9wdGlvbiAnLUUnPyAqLw0KPiArICAgIGlmIChoYW5kbGVfbHVhaW5pdChMKSAh
PSBMVUFfT0spICAvKiBydW4gTFVBX0lOSVQgKi8NCj4gKyAgICAgIHJldHVybiAwOyAgLyogZXJy
b3IgcnVubmluZyBMVUFfSU5JVCAqLw0KPiArICB9DQo+ICsgIGlmICghcnVuYXJncyhMLCBhcmd2
LCBzY3JpcHQpKSAgLyogZXhlY3V0ZSBhcmd1bWVudHMgLWUgYW5kIC1sICovDQo+ICsgICAgcmV0
dXJuIDA7ICAvKiBzb21ldGhpbmcgZmFpbGVkICovDQo+ICsgIGlmIChzY3JpcHQgPCBhcmdjICYm
ICAvKiBleGVjdXRlIG1haW4gc2NyaXB0IChpZiB0aGVyZSBpcyBvbmUpICovDQo+ICsgICAgICBo
YW5kbGVfc2NyaXB0KEwsIGFyZ3YgKyBzY3JpcHQpICE9IExVQV9PSykNCj4gKyAgICByZXR1cm4g
MDsNCj4gKyAgaWYgKGFyZ3MgJiBoYXNfaSkgIC8qIC1pIG9wdGlvbj8gKi8NCj4gKyAgICBkb1JF
UEwoTCk7ICAvKiBkbyByZWFkLWV2YWwtcHJpbnQgbG9vcCAqLw0KPiArICAvKiBzZWUgaWYgc2Ny
aXB0IGlzIGF2YWlsYWJsZSBmcm9tIGluaXRyZCAqLw0KPiArICBlbHNlIGlmICh1a3BsYXRfbWVt
cmVnaW9uX2ZpbmRfaW5pdHJkMCgmaW1nKSA+PSAwKSB7DQo+ICsgICAgY3N0ciA9IChjaGFyICop
aW1nLmJhc2U7DQo+ICsgICAgZG9zdHJpbmcoTCwgY3N0ciwgImluaXRyZCIpOw0KPiArICB9DQo+
ICsgIGVsc2UgaWYgKHNjcmlwdCA9PSBhcmdjICYmICEoYXJncyAmIChoYXNfZSB8IGhhc192KSkp
IHsgIC8qIG5vIGFyZ3VtZW50cz8NCj4gKi8NCj4gKyAgICBpZiAobHVhX3N0ZGluX2lzX3R0eSgp
KSB7ICAvKiBydW5uaW5nIGluIGludGVyYWN0aXZlIG1vZGU/ICovDQo+ICsgICAgICBwcmludF92
ZXJzaW9uKCk7DQo+ICsgICAgICBkb1JFUEwoTCk7ICAvKiBkbyByZWFkLWV2YWwtcHJpbnQgbG9v
cCAqLw0KPiArICAgIH0NCj4gKyAgICBlbHNlIGRvZmlsZShMLCBOVUxMKTsgIC8qIGV4ZWN1dGVz
IHN0ZGluIGFzIGEgZmlsZSAqLw0KPiArICB9DQo+ICsgIGx1YV9wdXNoYm9vbGVhbihMLCAxKTsg
IC8qIHNpZ25hbCBubyBlcnJvcnMgKi8NCj4gKyAgcmV0dXJuIDE7DQo+ICt9DQo+ICsNCj4gKw0K
PiAraW50IGx1YV9tYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsNCj4gKyAgaW50IHN0YXR1
cywgcmVzdWx0Ow0KPiArICBsdWFfU3RhdGUgKkwgPSBsdWFMX25ld3N0YXRlKCk7ICAvKiBjcmVh
dGUgc3RhdGUgKi8NCj4gKyAgaWYgKEwgPT0gTlVMTCkgew0KPiArICAgIGxfbWVzc2FnZShhcmd2
WzBdLCAiY2Fubm90IGNyZWF0ZSBzdGF0ZTogbm90IGVub3VnaCBtZW1vcnkiKTsNCj4gKyAgICBy
ZXR1cm4gRVhJVF9GQUlMVVJFOw0KPiArICB9DQo+ICsgIGx1YV9wdXNoY2Z1bmN0aW9uKEwsICZw
bWFpbik7ICAvKiB0byBjYWxsICdwbWFpbicgaW4gcHJvdGVjdGVkIG1vZGUgKi8NCj4gKyAgbHVh
X3B1c2hpbnRlZ2VyKEwsIGFyZ2MpOyAgLyogMXN0IGFyZ3VtZW50ICovDQo+ICsgIGx1YV9wdXNo
bGlnaHR1c2VyZGF0YShMLCBhcmd2KTsgLyogMm5kIGFyZ3VtZW50ICovDQo+ICsgIHN0YXR1cyA9
IGx1YV9wY2FsbChMLCAyLCAxLCAwKTsgIC8qIGRvIHRoZSBjYWxsICovDQo+ICsgIHJlc3VsdCA9
IGx1YV90b2Jvb2xlYW4oTCwgLTEpOyAgLyogZ2V0IHJlc3VsdCAqLw0KPiArICByZXBvcnQoTCwg
c3RhdHVzKTsNCj4gKyAgbHVhX2Nsb3NlKEwpOw0KPiArICByZXR1cm4gKHJlc3VsdCAmJiBzdGF0
dXMgPT0gTFVBX09LKSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsNCj4gK30NCj4gKw0K
PiAtLQ0KPiAyLjExLjANCj4NCj4NCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18NCj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KPiBNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRl
bnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFu
ZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVj
aXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBk
aXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkg
cHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4g
VGhhbmsgeW91Lg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 04:58:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 04:58:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4eQF-0003cX-1D; Mon, 02 Sep 2019 04:58:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=u+3w=W5=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i4eQD-0003cS-R7
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 04:58:33 +0000
X-Inumbo-ID: 4dddd238-cd3e-11e9-8980-bc764e2007e4
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.83]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4dddd238-cd3e-11e9-8980-bc764e2007e4;
 Mon, 02 Sep 2019 04:58:29 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=d0wE36KvbaRlkD/altKApjhqg/3PNVKyQlaWkSTWhJw=;
 b=hBJHdtoxRdPrwBNIlmWT1Pbg8fvZP+QAJl8XV0U3OjGnDBT7NEV8vqPWLyFT0GLkRQK/Gi2ZBkdQPIVNRFVBaI60hd4lT7mZC2H2mJFWgC0CI0qkbb0Frbz8m60Vjm6k0cMSwHhD87mlkPThyaygLIlsXNpj10wuIKb0rR2re2A=
Received: from VI1PR0802CA0043.eurprd08.prod.outlook.com
 (2603:10a6:800:a9::29) by HE1PR0802MB2602.eurprd08.prod.outlook.com
 (2603:10a6:3:e2::14) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.19; Mon, 2 Sep
 2019 04:58:24 +0000
Received: from AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::202) by VI1PR0802CA0043.outlook.office365.com
 (2603:10a6:800:a9::29) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.19 via Frontend
 Transport; Mon, 2 Sep 2019 04:58:24 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=temperror action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT023.mail.protection.outlook.com (10.152.16.169) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2220.16 via Frontend Transport; Mon, 2 Sep 2019 04:58:22 +0000
Received: ("Tessian outbound ea3fc1501f20:v27");
 Mon, 02 Sep 2019 04:58:22 +0000
X-CR-MTA-TID: 64aa7808
Received: from e434e3601607.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.4.59]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 23577521-3A88-4D88-A133-39DD9DFC119A.1; 
 Mon, 02 Sep 2019 04:58:17 +0000
Received: from EUR02-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur02lp2059.outbound.protection.outlook.com [104.47.4.59])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e434e3601607.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 02 Sep 2019 04:58:17 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NBV4haLCW3ZlfBa5k/prC34jTTpXqYv/eqe4WLVM4WPZZd7O7pzAALRM4Q6KTySGq28cios16PvPIF411584o10DGpDGotd8AfYiWRXYmXBtJ2hdxYyHICsMWG4W+lfGrL+zmf24mBOzv1rDSDILcTEJahBhTZUW/s7TTS5Y3wCM//X1cjm9f99EyZjIOx3frHBOFyV7KN+5rqfDQXvCpZaxurgiYJuK5y7rD8xHOw4juNewIy9KXK1ofY/7Y+Es6BpQxnHESslMaNZhvVCbohDetEzyBd17/9WjVZ8kff+ejB+SP3L0Uug4I5AG7gmSypEcPsJt6N8cvyeAOHhDyg==
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=HZmvMjuWATeiQ6KmsOr7DG9ldaKB3lVlnRNPslgjRaA=;
 b=cjx8keboEjpcg4LZwr2V0KAOtjIBiOrNUX0sYQ8NpSUkwnjYviuZGgwgzw+zAIEb9owEygCzieZ3looW4WQ8n8Ch1E3mLef7nTQKOzyA9bw51MXv2ITYKPNCecuJ7QzDFregCvpA3kGBTv33IUAFqSF5kX9xcT7r7+tY3dNit1NS3aV77TymLIFNOKv4lVubzqSH9IG6TGB5qqHDQwZbRnYAy523ffxD8Kf3si+k48jKcRLymycW8wggxwaDSrRN2jFmnbfG4eiRQbvvAXBPUwfjFjfA5f6Vf9a9Ejx7JH+Aqtp7UMn1sG19HtFMQKLy8BdIln1R4LhEMVHbjOqIBg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HZmvMjuWATeiQ6KmsOr7DG9ldaKB3lVlnRNPslgjRaA=;
 b=0P60sJihlwjh2hd0DmKJxtu/iGf1UJK+6aYR2No0kPdy9QK+BsiIdHgjR8n4RqGVPhzDCJRGjQ5MtLWicG86waQO0tDPVIkpMjWBl3lBLpIgRuAHfRFJ01y3cJcaGPq8ag2uvrqETyrLCN8i7xaXAyVIpZiw/rWcZ8og5OfG+AE=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB4620.eurprd08.prod.outlook.com (20.178.85.33) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2220.19; Mon, 2 Sep 2019 04:58:16 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2220.022; Mon, 2 Sep 2019
 04:58:16 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 0/3] support for the lua
 language
Thread-Index: AQHVXbVti8EU9IU+nEKBzejcsKQFJacX19MQ
Date: Mon, 2 Sep 2019 04:58:16 +0000
Message-ID: <DB7PR08MB3082099B9CE6B8C8BE95F80AF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
In-Reply-To: <20190828152923.23734-1-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 5a2b28cf-1e48-45ba-9bfa-fc4069b417f7.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: bd8b390e-9df9-4cce-5591-08d72f622e70
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB7PR08MB4620; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB4620:|HE1PR0802MB2602:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <HE1PR0802MB2602925744088A40D27CE798F7BE0@HE1PR0802MB2602.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:4714;OLM:4714;
x-forefront-prvs: 01480965DA
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(396003)(366004)(39850400004)(376002)(346002)(13464003)(199004)(189003)(71190400001)(966005)(66556008)(66066001)(6246003)(2501003)(8676002)(229853002)(81166006)(81156014)(9686003)(55016002)(6306002)(8936002)(5660300002)(52536014)(305945005)(14454004)(6436002)(74316002)(25786009)(478600001)(110136005)(53936002)(316002)(66946007)(7696005)(446003)(86362001)(14444005)(486006)(2906002)(33656002)(26005)(76116006)(99286004)(53546011)(102836004)(55236004)(6506007)(7736002)(3846002)(186003)(6116002)(76176011)(64756008)(11346002)(256004)(476003)(66446008)(71200400001)(66476007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB4620;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: d7w4olYwzVF3tREHiRdjPyI5rZjFYNq+WIaCsV5Tn/5wDqXQZy+MrQ+g5viXoSkJaTudTmTH37xSMSzKgHjpnVELPxwqbTPGMV5Qg8Gi69hAmGdPky908dJ7KzvoObJ1XTSppWCanG9mgz7v8jWRJy3Xl2zN30FHsKDeaEX5sWAEYGlkvLsgzkjyIrXI1CCphKIbaiu+jXU8Vg5aY5Vi0v/hL0e5K1wJlk2cq05Mh2uNVtzMt2WNbimaWKAzSfsatDij6Al6MTU+1S6MGu8qI41TfYzIGHtiRzcZtL3isHihnTcCrvbfUSc8bfhwRKSB/A32fSlO9bS9FqJfc4TaduzfmrtPw8gaNHHLKtpfHkImNqPnX6F1uzkvn7DRJNinscxSccp/PXRiYtyrXenQnq02fkZH8QQm2EPNC3CjKBI=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB4620
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39850400004)(396003)(136003)(346002)(376002)(2980300002)(189003)(199004)(40434004)(13464003)(99286004)(70206006)(50466002)(6246003)(55016002)(70586007)(25786009)(9686003)(6306002)(33656002)(86362001)(2501003)(22756006)(2906002)(3846002)(6116002)(478600001)(186003)(305945005)(26005)(966005)(7736002)(110136005)(26826003)(356004)(81166006)(81156014)(8676002)(102836004)(53546011)(6506007)(11346002)(52536014)(446003)(486006)(476003)(76130400001)(5024004)(5660300002)(336012)(14444005)(74316002)(63370400001)(63350400001)(436003)(66066001)(14454004)(47776003)(7696005)(126002)(229853002)(8936002)(76176011)(36906005)(23676004)(316002)(2486003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0802MB2602;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 437f1137-ecbd-466d-4ae3-08d72f622a92
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:HE1PR0802MB2602; 
X-Forefront-PRVS: 01480965DA
X-Microsoft-Antispam-Message-Info: GAw0QGgYdsHLMPi9kXOKLOFpwcSU1ve+29mHWu2FFH20cd/1vjKoizT+ROfTKqn0YnG9tPp+f8U+zZ4cEVY8qy6brcYktl0PX855uIHYtH9EecGiVCEkVkLkYuAa3sTaQN+ZXqdxiBuGlna3kv0w92OrCfUNfh8w+yLNE6da5gTBtS8nZrlgVNX1l58tc60nMbiX0AHiqa2yF4lCuHWcwWrtmlwtKAUBojHmLbS5UzZpTbQQtP1kHK8RX49kMQ00ZGnDsRHJp5lTNdgp29YL0gZAOB0ZLtcp81TPXYP1FbJfNpc44fMR0OiDTIal6Oohpt3byK3Tqo0sqnap/xPI+B+drHlT/ubtril8Lj6uWfNREZ2+xiGezIxYH2m3Z/xCa2KF/pNa/HpHtBr3HjxUlddxPHgBYkvLgDyUKgF80Uc=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2019 04:58:22.7588 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: bd8b390e-9df9-4cce-5591-08d72f622e70
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0802MB2602
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 0/3] support for the lua
 language
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQpCZXNpZGVzLCBJIGZvdW5kIGFub3RoZXIgMiBpc3N1ZXM6DQoxLiBzb21lIGhl
YWQgZmlsZXMgYXJlIG1pc3NpbmcgYWZ0ZXIgZmV0Y2hpbmcgdGhlIGxpYmx1YSBzcmMgY29kZXMN
CnJvb3RAam9uZzp+L2hqL1VLL2FwcHMvaGVsbG93b3JsZCMgbGwgIC9yb290L2hqL1VLL2FwcHMv
aGVsbG93b3JsZC9idWlsZC9saWJsdWEvaW5jbHVkZS8NCnRvdGFsIDI4DQpkcnd4ci14ci14IDIg
cm9vdCByb290IDQwOTYgOeaciCAgIDIgMTI6NTIgLi8NCmRyd3hyLXhyLXggNCByb290IHJvb3Qg
NDA5NiA55pyIICAgMiAxMjo1MyAuLi8NCmxyd3hyd3hyd3ggMSByb290IHJvb3QgICA3MSA55pyI
ICAgMiAxMjo1MiBsYXV4bGliLmggLT4gL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxk
L2xpYmx1YS9vcmlnaW4vbHVhLTUuMy41L3NyYy9sYXV4bGliLmgNCmxyd3hyd3hyd3ggMSByb290
IHJvb3QgICA3MSA55pyIICAgMiAxMjo1MiBsdWFjb25mLmggLT4gL3Jvb3QvaGovVUsvYXBwcy9o
ZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmlnaW4vbHVhLTUuMy41L3NyYy9sdWFjb25mLmgNCmxy
d3hyd3hyd3ggMSByb290IHJvb3QgICA2NyA55pyIICAgMiAxMjo1MiBsdWEuaCAtPiAvcm9vdC9o
ai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVhL29yaWdpbi9sdWEtNS4zLjUvc3JjL2x1
YS5oDQpscnd4cnd4cnd4IDEgcm9vdCByb290ICAgNjkgOeaciCAgIDIgMTI6NTIgbHVhLmhwcCAt
PiAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVhL29yaWdpbi9sdWEtNS4z
LjUvc3JjL2x1YS5ocHANCmxyd3hyd3hyd3ggMSByb290IHJvb3QgICA3MCA55pyIICAgMiAxMjo1
MiBsdWFsaWIuaCAtPiAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVhL29y
aWdpbi9sdWEtNS4zLjUvc3JjL2x1YWxpYi5oDQpyb290QGpvbmc6fi9oai9VSy9hcHBzL2hlbGxv
d29ybGQjIGxsIC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJsdWEvb3JpZ2lu
L2x1YS01LjMuNS9zcmMvbGF1eGxpYi5oDQpsczogY2Fubm90IGFjY2VzcyAnL3Jvb3QvaGovVUsv
YXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmlnaW4vbHVhLTUuMy41L3NyYy9sYXV4bGli
LmgnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5DQpyb290QGpvbmc6fi9oai9VSy9hcHBzL2hl
bGxvd29ybGQjDQoNCkkgZ3Vlc3Mgc29tZXRoaW5nIHdyb25nIGluIE1ha2VmaWxlLnVrDQojIFRP
X0lOQw0KVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWEuaA0KVUtfUFJF
UEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWFjb25mLmgNClVLX1BSRVBBUkUgKz0g
JChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbHVhbGliLmgNClVLX1BSRVBBUkUgKz0gJChMSUJMVUFf
QlVJTEQpL2luY2x1ZGUvbGF1eGxpYi5oDQpVS19QUkVQQVJFICs9ICQoTElCTFVBX0JVSUxEKS9p
bmNsdWRlL2x1YS5ocHANCg0KMi4gc2VlbXMgbGlibHVhIGNhbid0IGJlIGJ1aWx0IHdpdGggbm9s
aWJjIGVuYWJsZWQsIG5vIHNpZ25hbC5oIGlzIGZvdW5kDQoNCjMsIHdpdGggbmV3bGliIGVuYWJs
ZWQsIHRoZSBoZWxsb3dvcmxkIGFwcCAoYWxtb3N0IGR1bW15IG1haW4oKSkgY2FuJ3QNCmJlIGxp
bmtlZDoNCi9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14
ODZfNjQubzogSW4gZnVuY3Rpb24gYF9fY29sbGF0ZV9lcnInOg0Kc2dsaXN0LmM6KC50ZXh0KzB4
Nzg4ZCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0Kc2dsaXN0LmM6KC50ZXh0KzB4
NzhhNSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0Kc2dsaXN0LmM6KC50ZXh0KzB4
NzhiYik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0Kc2dsaXN0LmM6KC50ZXh0KzB4
NzhlZSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0Kc2dsaXN0LmM6KC50ZXh0KzB4
NzkwNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KL3Jvb3QvaGovVUsvYXBwcy9o
ZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX2Ns
b3NlX3InOg0Kc2dsaXN0LmM6KC50ZXh0KzB4ZjIxOSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8g
YGNsb3NlJw0KL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3Zt
LXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX2ZzdGF0X3InOg0Kc2dsaXN0LmM6KC50ZXh0KzB4ZjNi
Yyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGZzdGF0Jw0KL3Jvb3QvaGovVUsvYXBwcy9oZWxs
b3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX21rZGly
X3InOg0Kc2dsaXN0LmM6KC50ZXh0KzB4ZjUwYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG1r
ZGlyJw0KL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4
Nl82NC5vOiBJbiBmdW5jdGlvbiBgX29wZW5fcic6DQpzZ2xpc3QuYzooLnRleHQrMHhmNTUwKTog
dW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgb3BlbicNCi9yb290L2hqL1VLL2FwcHMvaGVsbG93b3Js
ZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYF9yZWFkX3InOg0K
c2dsaXN0LmM6KC50ZXh0KzB4ZjU4Zik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHJlYWQnDQov
cm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86
IEluIGZ1bmN0aW9uIGBfc3RhdF9yJzoNCnNnbGlzdC5jOigudGV4dCsweGY2N2QpOiB1bmRlZmlu
ZWQgcmVmZXJlbmNlIHRvIGBzdGF0Jw0KL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxk
L2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX3VubGlua19yJzoNCnNnbGlz
dC5jOigudGV4dCsweGY2Y2EpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB1bmxpbmsnDQovcm9v
dC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IElu
IGZ1bmN0aW9uIGBfd3JpdGVfcic6DQpzZ2xpc3QuYzooLnRleHQrMHhmNzBmKTogdW5kZWZpbmVk
IHJlZmVyZW5jZSB0byBgd3JpdGUnDQovcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQv
aGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBmbHVzaF9tZXRhJzoNCmhhc2gu
YzooLnRleHQrMHgxMDQwYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KL3Jvb3Qv
aGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBm
dW5jdGlvbiBgaGRlc3Ryb3knOg0KaGFzaC5jOigudGV4dCsweDEwNWFkKTogdW5kZWZpbmVkIHJl
ZmVyZW5jZSB0byBgY2xvc2UnDQovcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVs
bG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfX2hhc2hfb3Blbic6DQpzZ2xpc3Qu
YzooLnRleHQrMHgxMGYyOCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHN0YXQnDQpzZ2xpc3Qu
YzooLnRleHQrMHgxMGY2Mik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG9wZW4nDQpzZ2xpc3Qu
YzooLnRleHQrMHgxMGY5YSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGZzdGF0Jw0Kc2dsaXN0
LmM6KC50ZXh0KzB4MTEwNGIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzdGF0Jw0Kc2dsaXN0
LmM6KC50ZXh0KzB4MTEyMDYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGByZWFkJw0Kc2dsaXN0
LmM6KC50ZXh0KzB4MTE2OWQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjbG9zZScNCi9yb290
L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4g
ZnVuY3Rpb24gYF9fZ2V0X3BhZ2UnOg0Kc2dsaXN0LmM6KC50ZXh0KzB4MTMwNGUpOiB1bmRlZmlu
ZWQgcmVmZXJlbmNlIHRvIGByZWFkJw0KL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxk
L2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19wdXRfcGFnZSc6DQpzZ2xp
c3QuYzooLnRleHQrMHgxMzJhZSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHVubGluaycNCnNn
bGlzdC5jOigudGV4dCsweDEzM2ZhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnDQov
cm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86
IEluIGZ1bmN0aW9uIGBfX2FkZF9vdmZscGFnZSc6DQpzZ2xpc3QuYzooLnRleHQrMHgxMzZhYik6
IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dv
cmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgcG1haW4nOg0K
bHVhLmM6KC50ZXh0KzB4NjdhOTcpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB1a3BsYXRfbWVt
cmVnaW9uX2ZpbmRfaW5pdHJkMCcNCi9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9o
ZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYGx1YURfdGhyb3cnOg0KbGluaXQu
YzooLnRleHQrMHg2Y2JkMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxvbmdqbXAnDQovcm9v
dC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IElu
IGZ1bmN0aW9uIGBsdWFEX3Jhd3J1bnByb3RlY3RlZCc6DQpsaW5pdC5jOigudGV4dCsweDZjZGNl
KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgc2V0am1wJw0KL3Jvb3QvaGovVUsvYXBwcy9oZWxs
b3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgb3NfZXhl
Y3V0ZSc6DQpsb3NsaWIuYzooLnRleHQrMHg4MmYwZik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8g
YHN5c3RlbScNCi9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2
bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYG1haW4nOg0Kc2dsaXN0LmM6KC50ZXh0LnN0YXJ0dXAr
MHg3Nyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGx1YUxfb3BlbmxpYnMnDQpzZ2xpc3QuYzoo
LnRleHQuc3RhcnR1cCsweGM4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbHVhTF9sb2FkYnVm
ZmVyeCcNCg0KDQotLQ0KQ2hlZXJzLA0KSnVzdGluIChKaWEgSGUpDQoNCg0KDQo+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1pbmlvcy1kZXZlbCA8bWluaW9zLWRldmVsLWJv
dW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc+IE9uIEJlaGFsZg0KPiBPZiBGZWxpcGUgSHVpY2kN
Cj4gU2VudDogMjAxOeW5tDjmnIgyOOaXpSAyMzoyOQ0KPiBUbzogbWluaW9zLWRldmVsQGxpc3Rz
Lnhlbi5vcmcNCj4gQ2M6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCj4g
U3ViamVjdDogW01pbmlvcy1kZXZlbF0gW1VOSUtSQUZUL0xJQkxVQSBQQVRDSCAwLzNdIHN1cHBv
cnQgZm9yIHRoZSBsdWENCj4gbGFuZ3VhZ2UNCj4NCj4gVGhpcyBpcyBvdXIgaW50aWFsIHBvcnQg
b2YgdGhlIGx1YSBsYW5ndWFnZSB0byBVbmlrcmFmdC4gRm9yIG5vdyBpdCBzdXBwb3J0cw0KPiBp
bnRlcmFjdGl2ZSBtb2RlLCBydW5uaW5nIGEgc3RyaW5nIChpLmUuLCBhIHNjcmlwdCkgIGFuZCBy
dW5uaW5nIGEgc2NyaXB0DQo+IGZyb20gYSBmaWxlIHByb3ZpZGVkIHZpYSBpbml0cmQuDQo+DQo+
IEZlbGlwZSBIdWljaSAoMyk6DQo+ICAgSW50cm9kdWNlIGxpYnJhcnkgc2tlbGV0b24NCj4gICBB
ZGQgTWFrZWZpbGUudWsgYW5kIG1haW4gbG9vcCBnbHVlIGNvZGUNCj4gICBFeHBvcnQgc3ltYm9s
cw0KPg0KPiAgLmdpdGlnbm9yZSAgICAgIHwgIDI3ICsrKw0KPiAgQ09ESU5HX1NUWUxFLm1kIHwg
ICA0ICsNCj4gIENPTlRSSUJVVElORy5tZCB8ICAgNCArDQo+ICBDT1BZSU5HLm1kICAgICAgfCAg
MzkgKysrKw0KPiAgQ29uZmlnLnVrICAgICAgIHwgICA0ICsNCj4gIE1BSU5UQUlORVJTLm1kICB8
ICAxMSArDQo+ICBNYWtlZmlsZS51ayAgICAgfCAxMDAgKysrKysrKysrDQo+ICBSRUFETUUubWQg
ICAgICAgfCAgIDkgKw0KPiAgZXhwb3J0c3ltcy51ayAgIHwgIDkzICsrKysrKysrKw0KPiAgbHVh
LmMgICAgICAgICAgIHwgNjIwDQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrDQo+ICAxMCBmaWxlcyBjaGFuZ2VkLCA5MTEgaW5zZXJ0aW9u
cygrKQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUNCj4gIGNyZWF0ZSBtb2RlIDEw
MDY0NCBDT0RJTkdfU1RZTEUubWQNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcu
bWQNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kDQo+ICBjcmVhdGUgbW9kZSAxMDA2
NDQgQ29uZmlnLnVrDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQNCj4gIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51aw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURN
RS5tZA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsNCj4gIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBsdWEuYw0KPg0KPiAtLQ0KPiAyLjExLjANCj4NCj4NCj4gX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdA0KPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KSU1QT1JUQU5U
IE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBh
cmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5v
dCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRp
YXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNv
biwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRp
b24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 08:51:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 08:51:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4i3i-00075G-B1; Mon, 02 Sep 2019 08:51:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XuqC=W5=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i4i3g-000759-JM
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 08:51:32 +0000
X-Inumbo-ID: da8345cc-cd5e-11e9-8980-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id da8345cc-cd5e-11e9-8980-bc764e2007e4;
 Mon, 02 Sep 2019 08:51:29 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 6A734F2021;
 Mon,  2 Sep 2019 10:51:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id VIort7lNsn3r; Mon,  2 Sep 2019 10:51:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 43216F2006
 for <minios-devel@lists.xen.org>; Mon,  2 Sep 2019 10:51:26 +0200 (CEST)
Received: from [10.1.2.246] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 2 Sep 2019
 10:51:25 +0200
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, Felipe Huici
 <felipe.huici@neclab.eu>, <minios-devel@lists.xen.org>
References: <20190724135924.23991-1-felipe.huici@neclab.eu>
 <20190724135924.23991-3-felipe.huici@neclab.eu>
 <97b988e5-fc68-d3d4-2afc-a28252f30577@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <4ad2857d-7de9-4018-b9bf-a6b8c64f070f@neclab.eu>
Date: Mon, 2 Sep 2019 10:51:24 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <97b988e5-fc68-d3d4-2afc-a28252f30577@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v3 2/2] Initial port of
 the libuuid library (version 1.0.3).
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDgvMzAvMTkgNTo0MSBQTSwgU2ltb24gS3VlbnplciB3cm90ZToKPiBPbiAyNC4wNy4xOSAx
NTo1OSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+PiBOb3RlIG5ld2xpYiBpcyByZXF1aXJlZC4KPj4K
Pj4gU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pgo+
PiAtLS0KPj4gwqAgQ29uZmlnLnVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNSArCj4+IMKgIE1h
a2VmaWxlLnVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDEyNiAKPj4gKysrKysrKysrKysrKysrKysrKysrKysr
Kwo+PiDCoCBleHBvcnRzeW1zLnVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxNyArKysrCj4+IMKgIGluY2x1ZGUv
Y29uZmlnLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqAgfMKgIDc3ICsrKysrKysrKysrKysrKwo+PiDCoCBwYXRjaGVzLzAwMDEtYWRk
LXN5c2NhbGwtaC1jb21waWxlLWd1YXJkLnBhdGNoIHzCoCAxMiArKysKPj4gwqAgNSBmaWxlcyBj
aGFuZ2VkLCAyMzcgaW5zZXJ0aW9ucygrKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmln
LnVrCj4+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awo+PiDCoCBjcmVhdGUgbW9k
ZSAxMDA2NDQgZXhwb3J0c3ltcy51awo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9j
b25maWcuaAo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLWFkZC1zeXNjYWxs
LWgtY29tcGlsZS1ndWFyZC5wYXRjaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29u
ZmlnLnVrCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLmU1Mjg3MGEK
Pj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9Db25maWcudWsKPj4gQEAgLTAsMCArMSw1IEBACj4+
ICttZW51Y29uZmlnIExJQlVVSUQKPj4gK8KgwqDCoMKgwqDCoCBib29sICJsaWJ1dWlkIC0gbGli
cmFyeSBmb3IgdW5pcXVlIGlkIGdlbmVyYXRpb24iCj4+ICvCoMKgwqDCoMKgwqAgZGVmYXVsdCBu
Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXBlbmRzIG9uIEhBVkVfTElCQwo+PiArwqDCoMKg
wqDCoMKgwqDCoMKgwqAgc2VsZWN0IFVLVU5JU1RECj4+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51
ayBiL01ha2VmaWxlLnVrCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAu
LjRmNjY4NTcKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9NYWtlZmlsZS51awo+PiBAQCAtMCww
ICsxLDEyNiBAQAo+PiArI8KgIGxpYnV1aWQgTWFrZWZpbGUudWMKPj4gKyMKPj4gKyPCoCBBdXRo
b3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4+ICsjCj4+ICsjCj4+
ICsjwqAgQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlv
bi4gQWxsIHJpZ2h0cyAKPj4gcmVzZXJ2ZWQuCj4+ICsjCj4+ICsjwqAgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4+ICsj
wqAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCj4+ICsjwqAgYXJlIG1ldDoKPj4gKyMKPj4gKyPCoCAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+PiAr
I8KgwqDCoMKgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KPj4gKyPCoCAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+PiArI8KgwqDCoMKgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciAKPj4g
aW4gdGhlCj4+ICsjwqDCoMKgwqAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIAo+PiBkaXN0cmlidXRpb24uCj4+ICsjwqAgMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+PiAr
I8KgwqDCoMKgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgCj4+IGRlcml2ZWQgZnJvbQo+PiArI8KgwqDCoMKgIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4+ICsjCj4+ICsjwqAgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIAo+PiBD
T05UUklCVVRPUlMgIkFTIElTIgo+PiArI8KgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIAo+PiBUTywgVEhFCj4+ICsjwqAg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSAK
Pj4gUEFSVElDVUxBUiBQVVJQT1NFCj4+ICsjwqAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIAo+PiBDT05UUklCVVRPUlMgQkUKPj4gKyPC
oCBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCj4+ICsjwqAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPj4gKyPCoCBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgCj4+IEJVU0lO
RVNTCj4+ICsjwqAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIAo+PiBXSEVUSEVSIElOCj4+ICsjwqAgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIAo+PiBPVEhFUldJU0Up
Cj4+ICsjwqAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgCj4+IEFEVklTRUQgT0YgVEhFCj4+ICsjwqAgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCj4+ICsjCj4+ICsjwqAgVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQg
T1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPj4gKyMKPj4gKwo+PiArIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMgCj4+Cj4+ICsjIExpYnJhcnkgcmVnaXN0cmF0aW9uCj4+ICsjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyAKPj4KPj4gKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidXVpZCwkKENPTkZJR19M
SUJVVUlEKSkpCj4+ICsKPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArIyBTb3Vy
Y2VzCj4+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAKPj4KPj4gK0xJQlVVSURfVkVSU0lPTj0x
LjAuMwo+PiArTElCVVVJRF9VUkw9aHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGli
dXVpZC9maWxlcy9saWJ1dWlkLSQoTElCVVVJRF9WRVJTSU9OKS50YXIuZ3ovZG93bmxvYWQgCj4+
Cj4+ICtMSUJVVUlEX1BBVENIRElSPSQoTElCVVVJRF9CQVNFKS9wYXRjaGVzCj4+ICskKGV2YWwg
JChjYWxsIGZldGNoYXMsbGlidXVpZCwkKExJQlVVSURfVVJMKSwkKExJQlVVSURfVkVSU0lPTiku
dGd6KSkKPj4gKyQoZXZhbCAkKGNhbGwgCj4+IHBhdGNoLGxpYnV1aWQsJChMSUJVVUlEX1BBVENI
RElSKSxsaWJ1dWlkLSQoTElCVVVJRF9WRVJTSU9OKSkpCj4+ICsKPj4gKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIAo+Pgo+PiArIyBIZWxwZXJzCj4+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAK
Pj4KPj4gK0xJQlVVSURfU1VCRElSPWxpYnV1aWQtJChMSUJVVUlEX1ZFUlNJT04pCj4+ICtMSUJV
VUlEX1NSQz0kKExJQlVVSURfT1JJR0lOKS8kKExJQlVVSURfU1VCRElSKQo+PiArCj4+ICsjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyAKPj4KPj4gKyMgTGlicmFyeSBpbmNsdWRlcwo+PiArIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMgCj4+Cj4+ICsjIFB1dCBwdWJsaWMgaGVhZGVycyAodXVpZC5oKSBp
biBhIHB1YmxpYyBmb2xkZXIgYW5kIGV4cG9ydCB0aGVtIAo+PiBnbG9iYWxseS4gVGhlCj4+ICsj
IHByZXBhcmUgc3RlcCBiZWxvdyB0YWtlcyBjYXJlIG9mIHBvcHVsYXRpbmcgdGhlIGZvbGRlci4K
Pj4gKyQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGxpYnV1aWQvaW5jbHVkZS9wdWJsaWMpCj4+ICtD
SU5DTFVERVMtJChDT05GSUdfTElCVVVJRCkgKz0gLUkkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUv
cHVibGljCj4+ICsKPj4gKyMgUHV0IHByaXZhdGUgaGVhZGVycyAodGhlIGdsdWUncyBjb25maWcu
aCwgYW5kIHV1aWQncyBub24tdXVpZC5oIAo+PiBoZWFkZXJzKQo+PiArIyBpbiBhIHByaXZhdGUg
Zm9sZGVyIGFuZCBleHBvcnQgdGhhdCBvbmx5IGxvY2FsbHkgdG8gbGlidXVpZC4gVGhlIAo+PiBw
cmVwYXJlCj4+ICsjIHN0ZXAgYmVsb3cgdGFrZXMgY2FyZSBvZiBwb3B1bGF0aW5nIHRoZSBmb2xk
ZXIKPj4gKyQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGxpYnV1aWQvaW5jbHVkZS9wcml2YXRlKQo+
PiArTElCVVVJRF9DSU5DTFVERVMteSArPSAtSSQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2
YXRlCj4+ICsKPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArIyBHbG9iYWwgZmxh
Z3MKPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArTElCVVVJRF9DRkxBR1MteSAr
PSAtREhBVkVfQ09ORklHX0gKPj4gKwo+PiArIyBTdXBwcmVzcyBzb21lIHdhcm5pbmdzIHRvIG1h
a2UgdGhlIGJ1aWxkIHByb2Nlc3MgbG9vayBuZWF0ZXIKPj4gK0xJQlVVSURfU1VQUFJFU1NfRkxB
R1MgKz0gLVduby11bnVzZWQtcGFyYW1ldGVyIAo+PiAtV25vLXVudXNlZC12YXJpYWJsZcKgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArLVduby1ub25udWxsIC1Xbm8tdW51c2VkLWJ1dC1zZXQt
dmFyaWFibGUgLVduby11bnVzZWQtbGFiZWwgCj4+IC1Xbm8tY2hhci1zdWJzY3JpcHRzXAo+PiAr
LVduby11bnVzZWQtZnVuY3Rpb24gLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAKPj4g
LVduby11bmluaXRpYWxpemVkwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICstV25vLW1heWJlLXVuaW5p
dGlhbGl6ZWQgLVduby1wb2ludGVyLXNpZ24gCj4+IC1Xbm8tdW51c2VkLXZhbHVlwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArLVduby11bnVzZWQtbWFjcm9zIC1X
bm8tcGFyZW50aGVzZXMgCj4+IC1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb27CoMKg
wqDCoMKgwqDCoMKgwqAgXAo+PiArLVduby1taXNzaW5nLWJyYWNlcyAtV25vLWVuZGlmLWxhYmVs
cyAKPj4gLVduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgIFwKPj4gKy1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24KPj4gKwo+PiArTElC
VVVJRF9DRkxBR1MtecKgwqAgKz0gJChMSUJVVUlEX1NVUFBSRVNTX0ZMQUdTKQo+PiArTElCVVVJ
RF9DWFhGTEFHUy15ICs9ICQoTElCVVVJRF9TVVBQUkVTU19GTEFHUykKPj4gKwo+PiArIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMgCj4+Cj4+ICsjIFNvdXJjZXMKPj4gKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIAo+Pgo+PiArTElCVVVJRF9TUkNTLXkgKz0gJChMSUJVVUlEX1NSQykvY2xlYXIuYwo+
PiArTElCVVVJRF9TUkNTLXkgKz0gJChMSUJVVUlEX1NSQykvY29weS5jCj4+ICtMSUJVVUlEX1NS
Q1MteSArPSAkKExJQlVVSURfU1JDKS9pc251bGwuYwo+PiArTElCVVVJRF9TUkNTLXkgKz0gJChM
SUJVVUlEX1NSQykvcGFyc2UuYwo+PiArTElCVVVJRF9TUkNTLXkgKz0gJChMSUJVVUlEX1NSQykv
dW5wYXJzZS5jCj4+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS9jb21wYXJlLmMK
Pj4gK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL2dlbl91dWlkLmMKPj4gK0xJQlVV
SURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL3BhY2suYwo+PiArTElCVVVJRF9TUkNTLXkgKz0g
JChMSUJVVUlEX1NSQykvcmFuZHV0aWxzLmMKPj4gK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJ
RF9TUkMpL3VucGFjay5jCj4+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS91dWlk
X3RpbWUuYwo+PiArCj4+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAKPj4KPj4gKyMgTGliLXNw
ZWNpZmljIFRhcmdldHMKPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArJChMSUJV
VUlEX0JVSUxEKS9pbmNsdWRlL3B1YmxpYy8lLmg6ICQoTElCVVVJRF9TUkMpLyUuaAo+PiArwqDC
oMKgICQoY2FsbCBidWlsZF9jbWQsTE4sbGlidXVpZCwkQCxcCj4+ICvCoMKgwqAgbG4gLXNmICQ8
ICRAKQo+PiArCj4+ICskKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHJpdmF0ZS8lLmg6ICQoTElC
VVVJRF9TUkMpLyUuaAo+PiArwqDCoMKgICQoY2FsbCBidWlsZF9jbWQsTE4sbGlidXVpZCwkQCxc
Cj4+ICvCoMKgwqAgbG4gLXNmICQ8ICRAKQo+Cj4gSWYgeW91IGp1c3QgdHlwZSAibWFrZSIsIEkg
bm90aWNlZCB0aGF0IHRoaXMgd2lsZGNhcmQgcnVsZXMgZ2V0IAo+IGV4ZWN1dGVkIGJlZm9yZSB0
aGUgYXJjaGl2ZSBpcyBleHRyYWN0ZWQuIEkgZ290IGl0IHNvbHZlZCBieSBhZGRpbmcgCj4gdGhl
IGZvbGxvd2luZyBydWxlIHRvIHN0YXRlIHRoZSBkZXBlbmRlbmN5Ogo+Cj4gJChMSUJVVUlEX1NS
QykvJS5oOiAkKExJQlVVSURfQlVJTEQpLy5vcmlnaW4KPiDCoMKgwqDCoEAjIGVtcHR5IHJlY2lw
ZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBleHRyYWN0aW9uCldvdWxkIHJlY29t
bWVuZCB1c2luZyBAOiBpbnN0ZWFkIG9mIEAjLiBUaGlzIHJlcHJlc2VudCBhIG5vb3AKPgo+IEF0
IHRoaXMgcG9pbnQgSSBoYXZlIG5vIGNsdWUgd2h5IHRoaXMgb25seSB3b3JrcyB3aXRoIGEgZmls
bGVkLW91dCAKPiByZWNpcGUsIGV2ZW4gaWYgaXQgaXMgbm9uLXNlbnNlLiBJdCBsb29rcyBsaWtl
IHRoYXQgTWFrZSBpcyBkb2luZyBzb21lIAo+IG1hZ2ljIGludGVybmFsIHNpbXBsaWZpY2F0aW9u
IGlmIHlvdSBzdGF0ZSB0aGUgZGVwZW5kZW5jeSB3aXRob3V0IHJlY2lwZS4KPgo+PiArCj4+ICsk
KExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHJpdmF0ZS9jb25maWcuaDogCj4+ICQoTElCVVVJRF9C
QVNFKS9pbmNsdWRlL2NvbmZpZy5oCj4+ICvCoMKgwqAgJChjYWxsIGJ1aWxkX2NtZCxMTixsaWJ1
dWlkLCRALFwKPj4gK8KgwqDCoCBsbiAtc2YgJDwgJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3By
aXZhdGUvY29uZmlnLmgpCj4+ICsKPj4gKyMgcHVibGljIGhlYWRlcnMKPj4gK1VLX1BSRVBBUkUg
Kz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3B1YmxpYy91dWlkLmgKPj4gKwo+PiArIyBwcml2
YXRlIGhlYWRlcnMKPj4gK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3By
aXZhdGUvYWxsLWlvLmgKPj4gK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRl
L3ByaXZhdGUvYy5oCj4+ICtVS19QUkVQQVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9w
cml2YXRlL3JhbmR1dGlscy5oCj4+ICtVS19QUkVQQVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5j
bHVkZS9wcml2YXRlL3V1aWRkLmgKPj4gK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9p
bmNsdWRlL3ByaXZhdGUvdXVpZFAuaAo+PiArVUtfUFJFUEFSRSArPSAkKExJQlVVSURfQlVJTEQp
L2luY2x1ZGUvcHJpdmF0ZS9jb25maWcuaAo+PiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
Pj4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCj4+IG5ldyBmaWxl
IG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjBjNjIyNzEKPj4gLS0tIC9kZXYvbnVsbAo+
PiArKysgYi9leHBvcnRzeW1zLnVrCj4+IEBAIC0wLDAgKzEsMTcgQEAKPj4gK3V1aWRfY2xlYXIK
Pj4gK3V1aWRfY29tcGFyZQo+PiArdXVpZF9jb3B5Cj4+ICt1dWlkX2dlbmVyYXRlCj4+ICt1dWlk
X2dlbmVyYXRlX3JhbmRvbQo+PiArdXVpZF9nZW5lcmF0ZV90aW1lCj4+ICt1dWlkX2dlbmVyYXRl
X3RpbWVfc2FmZQo+PiArdXVpZF9pc19udWxsCj4+ICt1dWlkX3BhY2sKPj4gK3V1aWRfcGFyc2UK
Pj4gK3V1aWRfdGltZQo+PiArdXVpZF90eXBlCj4+ICt1dWlkX3VucGFjawo+PiArdXVpZF91bnBh
cnNlCj4+ICt1dWlkX3VucGFyc2VfbG93ZXIKPj4gK3V1aWRfdW5wYXJzZV91cHBlcgo+PiArdXVp
ZF92YXJpYW50Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy5oIGIvaW5jbHVkZS9jb25m
aWcuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi4xOTg0MGFkCj4+
IC0tLSAvZGV2L251bGwKPj4gKysrIGIvaW5jbHVkZS9jb25maWcuaAo+PiBAQCAtMCwwICsxLDc3
IEBACj4+ICsvKiBjb25maWcuaC7CoCBHZW5lcmF0ZWQgZnJvbSBjb25maWcuaC5pbiBieSBsaWJ1
dWlkJ3MgY29uZmlndXJlLsKgICovCj4+ICsvKiBjb25maWcuaC5pbi7CoCBHZW5lcmF0ZWQgZnJv
bSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci7CoCAqLwo+PiArCj4+ICsvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwo+PiArI2RlZmluZSBI
QVZFX0ZDTlRMX0ggMQo+PiArCj4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ0
cnVuY2F0ZScgZnVuY3Rpb24uICovCj4+ICsjZGVmaW5lIEhBVkVfRlRSVU5DQVRFIDEKPj4gKwo+
PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9u
LiAqLwo+PiArI2RlZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCj4+ICsKPj4gKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCj4+ICsjZGVm
aW5lIEhBVkVfSU5UVFlQRVNfSCAxCj4+ICsKPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLwo+PiArI2RlZmluZSBIQVZFX0xJTUlUU19I
IDEKPj4gKwo+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVh
ZGVyIGZpbGUuICovCj4+ICsjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQo+PiArCj4+ICsvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbXNldCcgZnVuY3Rpb24uICovCj4+ICsjZGVmaW5l
IEhBVkVfTUVNU0VUIDEKPj4gKwo+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxu
ZXRpbmV0L2luLmg+IGhlYWRlciBmaWxlLiAqLwo+PiArI2lmZGVmICQoSEFWRV9OV19TVEFDSykK
Pj4gKyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0ggMQo+PiArI2VuZGlmCj4+ICsKPj4gKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KPj4gKyNpZmRl
ZiAkKEhBVkVfTldfU1RBQ0spCj4+ICsjZGVmaW5lIEhBVkVfU09DS0VUIDEKPj4gKyNlbmRpZgo+
PiArCj4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNyYW5kb20nIGZ1bmN0aW9u
LiAqLwo+PiArI2RlZmluZSBIQVZFX1NSQU5ET00gMQo+PiArCj4+ICsvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KPj4gKyNkZWZpbmUgSEFW
RV9TVERJTlRfSCAxCj4+ICsKPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Rk
bGliLmg+IGhlYWRlciBmaWxlLiAqLwo+PiArI2RlZmluZSBIQVZFX1NURExJQl9IIDEKPj4gKwo+
PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxl
LiAqLwo+PiArI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCj4+ICsKPj4gKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLwo+PiArI2RlZmluZSBI
QVZFX1NUUklOR19IIDEKPj4gKwo+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBz
dHJ0b3VsJyBmdW5jdGlvbi4gKi8KPj4gKyNkZWZpbmUgSEFWRV9TVFJUT1VMIDEKPj4gKwo+PiAr
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmlsZS5oPiBoZWFkZXIgZmlsZS4g
Ki8KPj4gKyNkZWZpbmUgSEFWRV9TWVNfRklMRV9IIDEKPj4gKwo+PiArLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4gaGVhZGVyIGZpbGUuICovCj4+ICsjZGVmaW5l
IEhBVkVfU1lTX0lPQ1RMX0ggMQo+PiArCj4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPHN5cy9zb2NrZXQuaD4gaGVhZGVyIGZpbGUuICovCj4+ICsjaWZkZWYgJChIQVZFX05XX1NU
QUNLKQo+PiArI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCj4+ICsjZW5kaWYKPj4gKwo+PiAr
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4g
Ki8KPj4gKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKPj4gKwo+PiArLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KPj4gKyNkZWZpbmUg
SEFWRV9TWVNfVElNRV9IIDEKPj4gKwo+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCj4+ICsjZGVmaW5lIEhBVkVfU1lTX1RZUEVT
X0ggMQo+PiArCj4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBo
ZWFkZXIgZmlsZS4gKi8KPj4gKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCj4+ICsKPj4gKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXNsZWVwJyBmdW5jdGlvbi4gKi8KPj4gKyNkZWZp
bmUgSEFWRV9VU0xFRVAgMQo+PiBkaWZmIC0tZ2l0IGEvcGF0Y2hlcy8wMDAxLWFkZC1zeXNjYWxs
LWgtY29tcGlsZS1ndWFyZC5wYXRjaCAKPj4gYi9wYXRjaGVzLzAwMDEtYWRkLXN5c2NhbGwtaC1j
b21waWxlLWd1YXJkLnBhdGNoCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAw
MDAuLmFkZWE2NmEKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9wYXRjaGVzLzAwMDEtYWRkLXN5
c2NhbGwtaC1jb21waWxlLWd1YXJkLnBhdGNoCj4+IEBAIC0wLDAgKzEsMTIgQEAKPj4gKy0tLSBh
L3JhbmR1dGlscy5jwqDCoMKgIDIwMTktMDQtMDMgMTQ6NDY6MTQuODI3NjgyNDg1ICswMjAwCj4+
ICsrKysgYi9yYW5kdXRpbHMuY8KgwqDCoCAyMDE5LTA0LTAzIDE0OjQ2OjQ4LjM3NTI4Njk1MCAr
MDIwMAo+PiArQEAgLTEzLDcgKzEzLDkgQEAKPj4gKyAjaW5jbHVkZSA8c3RyaW5nLmg+Cj4+ICsg
I2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4+ICsKPj4gKysjaWZkZWYgRE9fSlJBTkRfTUlYCj4+ICsg
I2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+Cj4+ICsrI2VuZGlmCj4+ICsKPj4gKyAjaW5jbHVkZSAi
cmFuZHV0aWxzLmgiCj4+ICsKPj4KPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdAo+IE1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 09:14:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 09:14:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4iPZ-0000VV-57; Mon, 02 Sep 2019 09:14:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XuqC=W5=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i4iPY-0000VP-2S
 for minios-devel@lists.xenproject.org; Mon, 02 Sep 2019 09:14:08 +0000
X-Inumbo-ID: 0355c7ec-cd62-11e9-b95f-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0355c7ec-cd62-11e9-b95f-bc764e2007e4;
 Mon, 02 Sep 2019 09:14:06 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 90358105485;
 Mon,  2 Sep 2019 11:14:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id lHGNK4iteqXL; Mon,  2 Sep 2019 11:14:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 66739105330;
 Mon,  2 Sep 2019 11:14:05 +0200 (CEST)
Received: from [10.1.2.246] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 2 Sep 2019
 11:14:05 +0200
To: Jia He <justin.he@arm.com>, <minios-devel@lists.xenproject.org>, Simon
 Kuenzer <simon.kuenzer@neclab.eu>
References: <20190828135550.142546-1-justin.he@arm.com>
 <20190828135550.142546-2-justin.he@arm.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <4f9475fe-76ad-b433-aa9f-db0f681e322d@neclab.eu>
Date: Mon, 2 Sep 2019 11:14:04 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190828135550.142546-2-justin.he@arm.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 1/3] build: Split gic-v2 from
 kvm plat to independent library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gSnVzdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwoKU2hhcmFuCgpPbiA4LzI4LzE5IDM6NTUgUE0sIEppYSBIZSB3cm90ZToKPiBUaGlzIHBhdGNo
IHNwbGl0cyB0aGUgYXJtIGdpYy12MiBpbnRlcnJ1cHQgY29udHJvbGxlciBhcyBhIHNlcGFyYXRl
IGxpYnJhcnkKPiBmcm9tIHRoZSBrdm0gcGxhdGZvcm0gbGlicmFyeS4gVGhpcyBpcyBzaW1pbGFy
IHRvIHdoYXQgd2UgZG8gZm9yIHZpcnRpbyBvcgo+IHBjaSBkcml2ZXJzLgo+Cj4gU2lnbmVkLW9m
Zi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KPiBTdWdnZXN0ZWQtYnk6IFNoYXJhbiBT
YW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pgo+IC0tLQo+ICAgcGxhdC9rdm0v
Q29uZmlnLnVrICAgfCAgNiArKysrKysKPiAgIHBsYXQva3ZtL01ha2VmaWxlLnVrIHwgMTEgKysr
KysrKysrKy0KPiAgIDIgZmlsZXMgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv
bigtKQo+Cj4gZGlmZiAtLWdpdCBhL3BsYXQva3ZtL0NvbmZpZy51ayBiL3BsYXQva3ZtL0NvbmZp
Zy51awo+IGluZGV4IDVhNmRmYzEuLjc4NjVhYzYgMTAwNjQ0Cj4gLS0tIGEvcGxhdC9rdm0vQ29u
ZmlnLnVrCj4gKysrIGIvcGxhdC9rdm0vQ29uZmlnLnVrCj4gQEAgLTgwLDQgKzgwLDEwIEBAIGNv
bmZpZyBWSVJUSU9fTkVUCj4gICAgICAgICAgaGVscAo+ICAgICAgICAgICAgICAgICBWaXJ0dWFs
IG5ldHdvcmsgZHJpdmVyLgo+ICAgZW5kbWVudQo+ICsKPiArY29uZmlnIExJQkdJQ1YyCj4gKyAg
ICAgICBib29sICJBcm0gR0lDIChnZW5lcmljIGludGVycnVwdCBjb250cm9sbGVyKSB2MiBsaWJy
YXJ5IHN1cHBvcnQiCj4gKyAgICAgICBkZWZhdWx0IHkgaWYgQVJDSF9BUk1fNjQKPiArICAgICAg
IGRlcGVuZHMgb24gQVJDSF9BUk1fNjQKPiArCj4gICBlbmRpZgo+IGRpZmYgLS1naXQgYS9wbGF0
L2t2bS9NYWtlZmlsZS51ayBiL3BsYXQva3ZtL01ha2VmaWxlLnVrCj4gaW5kZXggN2QwYzY5Ni4u
NTU2MzI4MyAxMDA2NDQKPiAtLS0gYS9wbGF0L2t2bS9NYWtlZmlsZS51awo+ICsrKyBiL3BsYXQv
a3ZtL01ha2VmaWxlLnVrCj4gQEAgLTEwLDYgKzEwLDcgQEAgJChldmFsICQoY2FsbCBhZGRwbGF0
bGliLGt2bSxsaWJrdm1wbGF0KSkKPiAgICQoZXZhbCAkKGNhbGwgYWRkcGxhdGxpYl9zLGt2bSxs
aWJrdm1wY2ksJChDT05GSUdfS1ZNX1BDSSkpKQo+ICAgJChldmFsICQoY2FsbCBhZGRwbGF0bGli
X3Msa3ZtLGxpYmt2bXZpcnRpbywkKENPTkZJR19WSVJUSU9fQlVTKSkpCj4gICAkKGV2YWwgJChj
YWxsIGFkZHBsYXRsaWJfcyxrdm0sbGlia3ZtdmlydGlvbmV0LCQoQ09ORklHX1ZJUlRJT19ORVQp
KSkKPiArJChldmFsICQoY2FsbCBhZGRwbGF0bGliX3Msa3ZtLGxpYmt2bWdpY3YyLCQoQ09ORklH
X0xJQkdJQ1YyKSkpCj4gICAKPiAgICMjCj4gICAjIyBQbGF0Zm9ybSBsaWJyYXJ5IGRlZmluaXRp
b25zCj4gQEAgLTY3LDcgKzY4LDYgQEAgTElCS1ZNUExBVF9TUkNTLSQoQ09ORklHX0FSQ0hfQVJN
XzY0KSArPSAkKFVLX1BMQVRfQ09NTU9OX0JBU0UpL2FybS9wc2NpX2FybTY0LlMKPiAgIExJQktW
TVBMQVRfU1JDUy0kKENPTkZJR19BUkNIX0FSTV82NCkgKz0gJChVS19QTEFUX0NPTU1PTl9CQVNF
KS9hcm0vdGltZS5jfGNvbW1vbgo+ICAgTElCS1ZNUExBVF9TUkNTLSQoQ09ORklHX0FSQ0hfQVJN
XzY0KSArPSAkKFVLX1BMQVRfQ09NTU9OX0JBU0UpL2FybS90cmFwcy5jfGNvbW1vbgo+ICAgTElC
S1ZNUExBVF9TUkNTLSQoQ09ORklHX0FSQ0hfQVJNXzY0KSArPSAkKFVLX1BMQVRfRFJJVkVSU19C
QVNFKS9vZncvZmR0LmN8Y29tbW9uCj4gLUxJQktWTVBMQVRfU1JDUy0kKENPTkZJR19BUkNIX0FS
TV82NCkgKz0gJChVS19QTEFUX0RSSVZFUlNfQkFTRSkvZ2ljL2dpYy12Mi5jfGNvbW1vbgo+ICAg
TElCS1ZNUExBVF9TUkNTLSQoQ09ORklHX0FSQ0hfQVJNXzY0KSArPSAkKExJQktWTVBMQVRfQkFT
RSkvYXJtL2VudHJ5NjQuUwo+ICAgTElCS1ZNUExBVF9TUkNTLSQoQ09ORklHX0FSQ0hfQVJNXzY0
KSArPSAkKExJQktWTVBMQVRfQkFTRSkvYXJtL2V4Y2VwdGlvbnMuUwo+ICAgTElCS1ZNUExBVF9T
UkNTLSQoQ09ORklHX0FSQ0hfQVJNXzY0KSArPSAkKExJQktWTVBMQVRfQkFTRSkvYXJtL3BhZ2V0
YWJsZTY0LlMKPiBAQCAtMTE4LDMgKzExOCwxMiBAQCBMSUJLVk1WSVJUSU9ORVRfQVNJTkNMVURF
Uy15ICAgKz0gLUkkKFVLX1BMQVRfRFJJVkVSU19CQVNFKS9pbmNsdWRlCj4gICBMSUJLVk1WSVJU
SU9ORVRfQ0lOQ0xVREVTLXkgICAgKz0gLUkkKFVLX1BMQVRfRFJJVkVSU19CQVNFKS9pbmNsdWRl
Cj4gICBMSUJLVk1WSVJUSU9ORVRfU1JDUy15ICs9XAo+ICAgCQkJJChVS19QTEFUX0RSSVZFUlNf
QkFTRSkvdmlydGlvL3ZpcnRpb19uZXQuYwo+ICsKPiArIyMKPiArIyMgR0lDdjIgbGlicmFyeSBk
ZWZpbml0aW9ucwo+ICsjIwo+ICtMSUJLVk1HSUNWMl9DSU5DTFVERVMteSAgICAgICAgICs9IC1J
JChMSUJLVk1QTEFUX0JBU0UpL2luY2x1ZGUKPiArTElCS1ZNR0lDVjJfQ0lOQ0xVREVTLXkgICAg
ICAgICArPSAtSSQoVUtfUExBVF9DT01NT05fQkFTRSkvaW5jbHVkZQo+ICtMSUJLVk1HSUNWMl9D
SU5DTFVERVMteSAgICAgICAgICs9IC1JJChVS19QTEFUX0RSSVZFUlNfQkFTRSkvaW5jbHVkZQo+
ICsKPiArTElCS1ZNR0lDVjJfU1JDUy15ICs9ICQoVUtfUExBVF9EUklWRVJTX0JBU0UpL2dpYy9n
aWMtdjIuYwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 09:22:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 09:22:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4iXO-0001FE-NM; Mon, 02 Sep 2019 09:22:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XuqC=W5=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i4iXN-0001F9-Mz
 for minios-devel@lists.xenproject.org; Mon, 02 Sep 2019 09:22:13 +0000
X-Inumbo-ID: 235403f0-cd63-11e9-aea0-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 235403f0-cd63-11e9-aea0-12813bfff9fa;
 Mon, 02 Sep 2019 09:22:09 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id ACF95105485;
 Mon,  2 Sep 2019 11:22:08 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id OgBDJ4_X40L1; Mon,  2 Sep 2019 11:22:08 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 87E64105330;
 Mon,  2 Sep 2019 11:22:08 +0200 (CEST)
Received: from [10.1.2.246] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 2 Sep 2019
 11:22:08 +0200
To: Jia He <justin.he@arm.com>, <minios-devel@lists.xenproject.org>, Simon
 Kuenzer <simon.kuenzer@neclab.eu>
References: <20190828135550.142546-1-justin.he@arm.com>
 <20190828135550.142546-4-justin.he@arm.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <9b5e009c-0836-d894-aabb-9d314405d309@neclab.eu>
Date: Mon, 2 Sep 2019 11:22:07 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190828135550.142546-4-justin.he@arm.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 3/3] plat/drivers/ofw: Move
 gic_get_irq_from_dtb to gic_fdt.c
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gSnVzdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwoKU2hhcmFuCgpPbiA4LzI4LzE5IDM6NTUgUE0sIEppYSBIZSB3cm90ZToKPiBBcyBkaXNjdXNz
ZWQgYXQgWzFdLCB3ZSdkIGJldHRlciBtb3ZlIGdpY19nZXRfaXJxX2Zyb21fZHRiIHRvIG9mdyBy
ZWxhdGVkCj4gZmlsZSBnaWNfZmR0LmMKPgo+IFsxXSBodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL2FyY2hpdmVzL2h0bWwvbWluaW9zLWRldmVsLzIwMTktMDcvbXNnMDAxOTIuaHRtbAo+Cj4g
U2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KPiBTdWdnZXN0ZWQtYnk6
IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pgo+IC0tLQo+ICAg
cGxhdC9kcml2ZXJzL29mdy9mZHQuYyAgICAgfCAyMSAtLS0tLS0tLS0tLS0tLQo+ICAgcGxhdC9k
cml2ZXJzL29mdy9naWNfZmR0LmMgfCA1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwo+ICAgcGxhdC9rdm0vTWFrZWZpbGUudWsgICAgICAgfCAgMSArCj4gICAzIGZpbGVz
IGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQo+ICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHBsYXQvZHJpdmVycy9vZncvZ2ljX2ZkdC5jCj4KPiBkaWZmIC0tZ2l0IGEvcGxh
dC9kcml2ZXJzL29mdy9mZHQuYyBiL3BsYXQvZHJpdmVycy9vZncvZmR0LmMKPiBpbmRleCBhZmUz
ZjkxLi43NmY4ZmYzIDEwMDY0NAo+IC0tLSBhL3BsYXQvZHJpdmVycy9vZncvZmR0LmMKPiArKysg
Yi9wbGF0L2RyaXZlcnMvb2Z3L2ZkdC5jCj4gQEAgLTM5LDcgKzM5LDYgQEAKPiAgICNpbmNsdWRl
IDxvZncvZmR0Lmg+Cj4gICAjaW5jbHVkZSA8dWsvcHJpbnQuaD4KPiAgICNpbmNsdWRlIDx1ay9h
c3NlcnQuaD4KPiAtI2luY2x1ZGUgPHVrL3ByaW50Lmg+Cj4gICAKPiAgICNkZWZpbmUgRkRUX01B
WF9BRERSX0NFTExTIEZEVF9NQVhfTkNFTExTCj4gICAjZGVmaW5lIEZEVF9DSEVDS19DT1VOVFMo
bmEsIG5zKSAgKChuYSkgPiAwICYmIChuYSkgPD0gRkRUX01BWF9BRERSX0NFTExTICYmIFwKPiBA
QCAtMjg5LDIzICsyODgsMyBAQCBpbnQgZmR0X2dldF9pbnRlcnJ1cHQoY29uc3Qgdm9pZCAqZmR0
LCBpbnQgbm9kZW9mZnNldCwKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IC0KPiAtaW50IGdp
Y19nZXRfaXJxX2Zyb21fZHRiKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGludCBp
bmRleCwKPiAtCQkJdWludDMyX3QgKmlycV90eXBlLCB1aW50MzJfdCAqaHdpcnEsCj4gLQkJCXVp
bnQzMl90ICp0cmlnZ2VyX3R5cGUpCj4gLXsKPiAtCWZkdDMyX3QgKnByb3A7Cj4gLQlpbnQgcmV0
LCBzaXplOwo+IC0KPiAtCVVLX0FTU0VSVChpcnFfdHlwZSAhPSBOVUxMICYmIGh3aXJxICE9IE5V
TEwgJiYgdHJpZ2dlcl90eXBlICE9IE5VTEwpOwo+IC0KPiAtCXJldCA9IGZkdF9nZXRfaW50ZXJy
dXB0KGZkdCwgbm9kZW9mZnNldCwgaW5kZXgsICZzaXplLCAmcHJvcCk7Cj4gLQlpZiAocmV0IDwg
MCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAtCSppcnFfdHlwZSA9IGZkdDMyX3RvX2NwdShwcm9w
WzBdKTsKPiAtCSpod2lycSA9IGZkdDMyX3RvX2NwdShwcm9wWzFdKTsKPiAtCSp0cmlnZ2VyX3R5
cGUgPSBmZHQzMl90b19jcHUocHJvcFsyXSk7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gLX0KPiBkaWZm
IC0tZ2l0IGEvcGxhdC9kcml2ZXJzL29mdy9naWNfZmR0LmMgYi9wbGF0L2RyaXZlcnMvb2Z3L2dp
Y19mZHQuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNGY4OGZkZAo+
IC0tLSAvZGV2L251bGwKPiArKysgYi9wbGF0L2RyaXZlcnMvb2Z3L2dpY19mZHQuYwo+IEBAIC0w
LDAgKzEsNTYgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAq
Lwo+ICsvKgo+ICsgKiBBdXRob3JzOiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgo+ICsgKgo+
ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFybSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4g
KyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1ldDoKPiArICoK
PiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KPiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9S
UyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwo+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRQo+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiAr
ICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdB
WS4KPiArICovCj4gKyNpbmNsdWRlIDxsaWJmZHRfZW52Lmg+Cj4gKyNpbmNsdWRlIDxvZncvZmR0
Lmg+Cj4gKyNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KPiArCj4gK2ludCBnaWNfZ2V0X2lycV9mcm9t
X2R0Yihjb25zdCB2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBpbnQgaW5kZXgsCj4gKwkJCXVp
bnQzMl90ICppcnFfdHlwZSwgdWludDMyX3QgKmh3aXJxLAo+ICsJCQl1aW50MzJfdCAqdHJpZ2dl
cl90eXBlKQo+ICt7Cj4gKwlmZHQzMl90ICpwcm9wOwo+ICsJaW50IHJldCwgc2l6ZTsKPiArCj4g
KwlVS19BU1NFUlQoaXJxX3R5cGUgIT0gTlVMTCAmJiBod2lycSAhPSBOVUxMICYmIHRyaWdnZXJf
dHlwZSAhPSBOVUxMKTsKPiArCj4gKwlyZXQgPSBmZHRfZ2V0X2ludGVycnVwdChmZHQsIG5vZGVv
ZmZzZXQsIGluZGV4LCAmc2l6ZSwgJnByb3ApOwo+ICsJaWYgKHJldCA8IDApCj4gKwkJcmV0dXJu
IHJldDsKPiArCj4gKwkqaXJxX3R5cGUgPSBmZHQzMl90b19jcHUocHJvcFswXSk7Cj4gKwkqaHdp
cnEgPSBmZHQzMl90b19jcHUocHJvcFsxXSk7Cj4gKwkqdHJpZ2dlcl90eXBlID0gZmR0MzJfdG9f
Y3B1KHByb3BbMl0pOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL3BsYXQv
a3ZtL01ha2VmaWxlLnVrIGIvcGxhdC9rdm0vTWFrZWZpbGUudWsKPiBpbmRleCA1MjA4MzU3Li42
MTllMzJhIDEwMDY0NAo+IC0tLSBhL3BsYXQva3ZtL01ha2VmaWxlLnVrCj4gKysrIGIvcGxhdC9r
dm0vTWFrZWZpbGUudWsKPiBAQCAtMTI3LDYgKzEyNyw3IEBAIExJQktWTU9GV19DSU5DTFVERVMt
eSAgICAgICAgICs9IC1JJChVS19QTEFUX0NPTU1PTl9CQVNFKS9pbmNsdWRlCj4gICBMSUJLVk1P
RldfQ0lOQ0xVREVTLXkgICAgICAgICArPSAtSSQoVUtfUExBVF9EUklWRVJTX0JBU0UpL2luY2x1
ZGUKPiAgIAo+ICAgTElCS1ZNT0ZXX1NSQ1MteSAgICAgICAgICAgICAgICAgICs9ICQoVUtfUExB
VF9EUklWRVJTX0JBU0UpL29mdy9mZHQuYwo+ICtMSUJLVk1PRldfU1JDUy0kKENPTkZJR19MSUJH
SUNWMikgKz0gJChVS19QTEFUX0RSSVZFUlNfQkFTRSkvb2Z3L2dpY19mZHQuYwo+ICAgCj4gICAj
Iwo+ICAgIyMgR0lDdjIgbGlicmFyeSBkZWZpbml0aW9ucwoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 09:23:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 09:23:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4iYW-0001H8-VT; Mon, 02 Sep 2019 09:23:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XuqC=W5=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i4iYV-0001H3-Nm
 for minios-devel@lists.xenproject.org; Mon, 02 Sep 2019 09:23:23 +0000
X-Inumbo-ID: 4e6d1edc-cd63-11e9-aea0-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4e6d1edc-cd63-11e9-aea0-12813bfff9fa;
 Mon, 02 Sep 2019 09:23:21 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id EE335F2021;
 Mon,  2 Sep 2019 11:23:20 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id g-GDnSE0oLbV; Mon,  2 Sep 2019 11:23:20 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id BC573F2006;
 Mon,  2 Sep 2019 11:23:14 +0200 (CEST)
Received: from [10.1.2.246] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 2 Sep 2019
 11:23:14 +0200
To: Jia He <justin.he@arm.com>, <minios-devel@lists.xenproject.org>, Simon
 Kuenzer <simon.kuenzer@neclab.eu>
References: <20190828135550.142546-1-justin.he@arm.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <34342a3e-9b14-720d-540a-6daca651f305@neclab.eu>
Date: Mon, 2 Sep 2019 11:23:14 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190828135550.142546-1-justin.he@arm.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 0/3] Spit ofw,
 gic-v2 to independent library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gSnVzdGluLAoKVGhhbmsgeW91IGZvciB0aGlzIHBhdGNoIHNlcmllcy4gSSBoYXZlIHJl
dmlld2VkIGl0IGFuZCBJIHdpbGwgdXBzdHJlYW0gCml0IGJ5IHRoZSB0b2RheS4KClRoYW5rcyAm
IFJlZ2FyZHMKU2hhcmFuCgpPbiA4LzI4LzE5IDM6NTUgUE0sIEppYSBIZSB3cm90ZToKPiBUaGlz
IHBhdGNoIHNldCB0cnkgdG8gU3BpdCBvZncsZ2ljLXYyIHRvIGluZGVwZW5kZW50IGxpYnJhcnks
IGp1c3QgbGlrZQo+IHdoYXQgd2UgZGlkIGZvciB2aXJ0aW8gYW5kIHBjaS4KPgo+IC0tLQo+IENo
YW5nZXM6Cj4gdjQ6IGNhbiBidWlsZCBhcm02NCBrdm0gaW1hZ2Ugd2l0aG91dCBnaWMgc3VwcG9y
dAo+IHYzOiBhZGRyZXNzIGNvbW1lbnRzIGZyb20gU2hhcmFuCj4gdjI6IGFkZHJlc3MgbW9zdCBv
ZiB0aGUgY29tbWVudHMgZnJvbSBTaGFyYW4KPgo+IEppYSBIZSAoMyk6Cj4gICAgYnVpbGQ6IFNw
bGl0IGdpYy12MiBmcm9tIGt2bSBwbGF0IHRvIGluZGVwZW5kZW50IGxpYnJhcnkKPiAgICBidWls
ZDogU3BsaXQgb2Z3IGZyb20ga3ZtIHBsYXQgdG8gaW5kZXBlbmRlbnQgbGlicmFyeQo+ICAgIHBs
YXQvZHJpdmVycy9vZnc6IE1vdmUgZ2ljX2dldF9pcnFfZnJvbV9kdGIgdG8gZ2ljX2ZkdC5jCj4K
PiAgIHBsYXQvZHJpdmVycy9vZncvZmR0LmMgICAgIHwgMjEgLS0tLS0tLS0tLS0tLS0KPiAgIHBs
YXQvZHJpdmVycy9vZncvZ2ljX2ZkdC5jIHwgNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysKPiAgIHBsYXQva3ZtL0NvbmZpZy51ayAgICAgICAgIHwgMTIgKysrKysrKysK
PiAgIHBsYXQva3ZtL01ha2VmaWxlLnVrICAgICAgIHwgMjMgKysrKysrKysrKysrKystLQo+ICAg
NCBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKPiAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2RyaXZlcnMvb2Z3L2dpY19mZHQuYwo+CgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 09:45:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 09:45:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4ita-0002mX-KD; Mon, 02 Sep 2019 09:45:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=u+3w=W5=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i4itZ-0002mS-8m
 for minios-devel@lists.xenproject.org; Mon, 02 Sep 2019 09:45:09 +0000
X-Inumbo-ID: 58e99824-cd66-11e9-aea0-12813bfff9fa
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.77]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 58e99824-cd66-11e9-aea0-12813bfff9fa;
 Mon, 02 Sep 2019 09:45:07 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=q+MWeR6l3fyx0bX83iNQkjpa6RGSMmCfsakgKIIgBFM=;
 b=nJyjotTCNTRwQrjDea6t1KVvngaXsFfv4Q+sHmctB2e1W/d3/VeY5eCfALMI31DlMT/h1Ehj/FAVKCu0TMfE2EFWImGCChpKaOZMbGFgb1ggqhJqZ5UtcQ7ql7jVg7vvDNHrXU3xUc8UI1L6lawMXKwN4vJIz6fyQw0hYP8svyg=
Received: from VI1PR08CA0217.eurprd08.prod.outlook.com (2603:10a6:802:15::26)
 by DB8PR08MB4956.eurprd08.prod.outlook.com (2603:10a6:10:e0::25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.22; Mon, 2 Sep
 2019 09:45:05 +0000
Received: from VE1EUR03FT019.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::207) by VI1PR08CA0217.outlook.office365.com
 (2603:10a6:802:15::26) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.16 via Frontend
 Transport; Mon, 2 Sep 2019 09:45:05 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com; lists.xenproject.org; dmarc=temperror
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT019.mail.protection.outlook.com (10.152.18.153) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2220.16 via Frontend Transport; Mon, 2 Sep 2019 09:45:03 +0000
Received: ("Tessian outbound d33df262a6a7:v27");
 Mon, 02 Sep 2019 09:45:01 +0000
X-CR-MTA-TID: 64aa7808
Received: from fd6bc8821396.2 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.9.59]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 2361D867-B666-46D7-94D9-3ED504AB5023.1; 
 Mon, 02 Sep 2019 09:44:56 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur03lp2059.outbound.protection.outlook.com [104.47.9.59])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id fd6bc8821396.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 02 Sep 2019 09:44:56 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=H8eY8zY9QWaTCOhvLqPF2HH4/iQkJ7UqNQFhBCJGse6BU8IQo3ORJHhWjRcSg5XG3dSwVxNnF3X1QvtdHS1/1FBVysOILL3mHP0bQTjF7xCHPL1v6e6D2UUbRrfwFYIZ9fn3hGsF4wjXOIdTTh8GsaRZRBau6de15LfNxJLvRVz0Q7CVQqz9hLcEyJaYA8bxsy8mRkmMHabOvKxFDh0qf+uYajxybPdBCPXf97n1c4bU2WfbW/u1ZjTBJmQUufr0yQ9CZAqZleA87k13nwohL5V7Do6zrIJeuMt43TymRFrhuUZjiIEB/rhBtgHuzjkB1tHYBHVodat1vSr1/OO86Q==
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=Uu0x5EAUx0AWJM6F+RQDPY6QsEFVc5XXS2R9tR416Ic=;
 b=CVzHtVeFBD0zr5VFTLdSR/wtGMjIsOhRoyNaHPt8erXhL2juSpz4nQ5ZP8r2DDpyAH/fFCqtTCtMwpoG0hr49bByb6F+JRn2i/6M5dPjZU1SmV11C72JYCCtSs8ywynWsr9/AxVJ5Lpj3fY6ipJBhbTyebTkD8P+mdpzj662WV1y4Hei7767YfF8/9282cQ8nCVoUHedQ/4Kmh7itSNkKN+k89Ih9nrvKMYP1+rf4DwRT3SOtsndrCio89QpWHjNw9ZsCSRVx87bivX1QcG4/v/nxA1P/qnGwgMHKhx1bhWX1SwVtsaphLoXyhHcNChWFg0OI0Y/7aavrB4EkLQCcQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Uu0x5EAUx0AWJM6F+RQDPY6QsEFVc5XXS2R9tR416Ic=;
 b=y6/Cyc5eYuQv6e5EIeHSjX5X4XFNbe383rfcMAsTkWjyrE4hOfoXwQ+xKXMGz0kQqU2ft41ziuXXM2r1SVFm/TA4DdTO8mpIb9lYGSOTrNbwoIxL7TZaDGGRrtz08cghiMKfthfbcyOscZXk7ccjjllsRfzXXYOrx3oigI/uCM4=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3580.eurprd08.prod.outlook.com (20.177.120.94) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2220.19; Mon, 2 Sep 2019 09:44:54 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2220.022; Mon, 2 Sep 2019
 09:44:54 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv4 0/3] Spit ofw, gic-v2 to independent library
Thread-Index: AQHVXahbh5ZmIuKlMUOrLaoS05kQfqcYJMYAgAAF8cA=
Date: Mon, 2 Sep 2019 09:44:54 +0000
Message-ID: <DB7PR08MB3082A5512C6A5F69FEF2A71EF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190828135550.142546-1-justin.he@arm.com>
 <34342a3e-9b14-720d-540a-6daca651f305@neclab.eu>
In-Reply-To: <34342a3e-9b14-720d-540a-6daca651f305@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 7f5cd12c-0fc8-4d42-81b6-04656f488023.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: f7f283fd-4ba7-488d-c830-08d72f8a3ad9
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB7PR08MB3580; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3580:|DB7PR08MB3580:|DB8PR08MB4956:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <DB8PR08MB49566CF54733133AD34E8550F7BE0@DB8PR08MB4956.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
x-forefront-prvs: 01480965DA
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(136003)(396003)(376002)(346002)(366004)(199004)(13464003)(189003)(316002)(25786009)(478600001)(486006)(66946007)(4326008)(66476007)(66446008)(66556008)(64756008)(71190400001)(71200400001)(256004)(9686003)(5660300002)(102836004)(55016002)(2501003)(55236004)(186003)(76116006)(53936002)(99286004)(26005)(14454004)(2906002)(74316002)(476003)(54906003)(11346002)(305945005)(7696005)(86362001)(3846002)(6246003)(6116002)(53546011)(110136005)(8936002)(229853002)(76176011)(81156014)(8676002)(6506007)(81166006)(6436002)(52536014)(66066001)(7736002)(446003)(33656002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3580;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: cB7LOl7WP/imsk2PFLE2KVvK2nitcoI+rCqX0SJmcpA9qM/7NWRgA7wJRFWWU2d+uq/1OVX9EndSf70aieB0GEa1SRd4Gttu8XwWVHGXHE9r0+qm7deZlQx1xHEdLEcxRUeUszGWjIrr9Ips5GMtW7G+4tsYyI+VZcLypHJUWj39jfWou2GzHOcOiVurpqRBP8e+ZJyo3+zz1459aPdLBDokFu6qBc1Yx1Komkq/rHpT9XXter3EoLHd+wMd6ymO2X0G/UnkwN6Ku4CMySUzofKpoWDzjeUjSKMKy72nrU/lnM8g/Zq72SPwjoGrvMkojjGIUbzn1XHrRRFzpB45FzTizatPFF4fV/KTYjeiVXLzaXMaYWiBL3r+1K8LqfHrTFdBkb8/f5QM6SdWq+iARPH4kLMsP6FOypOBaJh8UDY=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3580
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT019.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(136003)(346002)(39860400002)(396003)(2980300002)(40434004)(13464003)(199004)(189003)(6506007)(53546011)(6246003)(102836004)(186003)(11346002)(356004)(4326008)(74316002)(26005)(305945005)(55016002)(14444005)(476003)(5024004)(336012)(9686003)(63350400001)(63370400001)(126002)(33656002)(446003)(7736002)(436003)(70586007)(70206006)(478600001)(76176011)(14454004)(25786009)(26826003)(36906005)(486006)(316002)(99286004)(66066001)(47776003)(229853002)(54906003)(110136005)(2501003)(3846002)(76130400001)(7696005)(6116002)(2906002)(5660300002)(52536014)(86362001)(8936002)(81166006)(81156014)(8676002)(23676004)(2486003)(22756006)(50466002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB8PR08MB4956;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 01dc50bf-7219-4318-6cfe-08d72f8a359b
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB8PR08MB4956; 
X-Forefront-PRVS: 01480965DA
X-Microsoft-Antispam-Message-Info: p5kTjFtWtq0fGx/NK+ghVzPlr40JI/5UHGcpeRU6acoY/9eNgrLkA/UMOvcJLF6N/w6iMN+bKg2pdXA08BY7eo/eaSNrB7/ZaP7puIC+vXMBLHeGCLLRiw9hyWKlruXTtlYb9koAWdC1gFE3Y9aLxPmdGE1ctQ1uro6fAo4ooHwBB8Nv0wKzH2g/3Xo8+FTG+Qy0PfqcLEYuEGt8+gXwSKjMLHNHvei/Vr34iUV7TwuNEis+eXEV9OgKqU0jWu1Jck0Skw9nMcBsvBYnKf69N51FNabnFGiVMpPvpuYNjJh5qu1bkxFbZv9ouMTZMUWhN/+HAok27yBTUsJr+lMFB2afMavWPj1/wxR9fLF0E/r03Q+HuhuVcGaEa1TRsQH5hih6zVVeUL6SpYppeSe767W8XOt2sQW7yhoXSnd/Ql0=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Sep 2019 09:45:03.4306 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: f7f283fd-4ba7-488d-c830-08d72f8a3ad9
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB4956
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv4 0/3] Spit ofw,
 gic-v2 to independent library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBTaGFyYW4NCg0KLS0NCkNoZWVycywNCkp1c3RpbiAoSmlhIEhlKQ0KDQoNCg0KPiAt
LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBTaGFyYW4gU2FudGhhbmFtIDxzaGFy
YW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCj4gU2VudDogMjAxOeW5tDnmnIgy5pelIDE3OjIzDQo+
IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+
OyBtaW5pb3MtDQo+IGRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOyBTaW1vbiBLdWVuemVyIDxz
aW1vbi5rdWVuemVyQG5lY2xhYi5ldT4NCj4gQ2M6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT47IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gPEthbHkuWGlu
QGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFUQ0h2NCAwLzNdIFNwaXQgb2Z3
LCBnaWMtdjIgdG8gaW5kZXBlbmRlbnQNCj4gbGlicmFyeQ0KPg0KPiBIZWxsbyBKdXN0aW4sDQo+
DQo+IFRoYW5rIHlvdSBmb3IgdGhpcyBwYXRjaCBzZXJpZXMuIEkgaGF2ZSByZXZpZXdlZCBpdCBh
bmQgSSB3aWxsIHVwc3RyZWFtDQo+IGl0IGJ5IHRoZSB0b2RheS4NCj4NCj4gVGhhbmtzICYgUmVn
YXJkcw0KPiBTaGFyYW4NCj4NCj4gT24gOC8yOC8xOSAzOjU1IFBNLCBKaWEgSGUgd3JvdGU6DQo+
ID4gVGhpcyBwYXRjaCBzZXQgdHJ5IHRvIFNwaXQgb2Z3LGdpYy12MiB0byBpbmRlcGVuZGVudCBs
aWJyYXJ5LCBqdXN0IGxpa2UNCj4gPiB3aGF0IHdlIGRpZCBmb3IgdmlydGlvIGFuZCBwY2kuDQo+
ID4NCj4gPiAtLS0NCj4gPiBDaGFuZ2VzOg0KPiA+IHY0OiBjYW4gYnVpbGQgYXJtNjQga3ZtIGlt
YWdlIHdpdGhvdXQgZ2ljIHN1cHBvcnQNCj4gPiB2MzogYWRkcmVzcyBjb21tZW50cyBmcm9tIFNo
YXJhbg0KPiA+IHYyOiBhZGRyZXNzIG1vc3Qgb2YgdGhlIGNvbW1lbnRzIGZyb20gU2hhcmFuDQo+
ID4NCj4gPiBKaWEgSGUgKDMpOg0KPiA+ICAgIGJ1aWxkOiBTcGxpdCBnaWMtdjIgZnJvbSBrdm0g
cGxhdCB0byBpbmRlcGVuZGVudCBsaWJyYXJ5DQo+ID4gICAgYnVpbGQ6IFNwbGl0IG9mdyBmcm9t
IGt2bSBwbGF0IHRvIGluZGVwZW5kZW50IGxpYnJhcnkNCj4gPiAgICBwbGF0L2RyaXZlcnMvb2Z3
OiBNb3ZlIGdpY19nZXRfaXJxX2Zyb21fZHRiIHRvIGdpY19mZHQuYw0KPiA+DQo+ID4gICBwbGF0
L2RyaXZlcnMvb2Z3L2ZkdC5jICAgICB8IDIxIC0tLS0tLS0tLS0tLS0tDQo+ID4gICBwbGF0L2Ry
aXZlcnMvb2Z3L2dpY19mZHQuYyB8IDU2DQo+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrDQo+ID4gICBwbGF0L2t2bS9Db25maWcudWsgICAgICAgICB8IDEyICsrKysrKysr
DQo+ID4gICBwbGF0L2t2bS9NYWtlZmlsZS51ayAgICAgICB8IDIzICsrKysrKysrKysrKysrLS0N
Cj4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgODkgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0p
DQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC9kcml2ZXJzL29mdy9naWNfZmR0LmMNCj4g
Pg0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBh
dHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJ
ZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBz
ZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55
IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0
aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 13:22:42 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 13:22:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4mI5-0006UN-FJ; Mon, 02 Sep 2019 13:22:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4mI4-0006UI-7f
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 13:22:40 +0000
X-Inumbo-ID: b8d819fe-cd84-11e9-8980-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id b8d819fe-cd84-11e9-8980-bc764e2007e4;
 Mon, 02 Sep 2019 13:22:33 +0000 (UTC)
IronPort-SDR: 8MKANCoGcgayRWQ8jNTpe5/b5MASw3KHXwalko2QkQSx6mDjffLIo3fKXdaR89yUeGq2DX5EFY
 wq8tkk5Vldmw==
IronPort-PHdr: =?us-ascii?q?9a23=3AdrU+DhMh5F5F02eSj6Al6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0I/j5rarrMEGX3/hxlliBBdydt6sezbOJ6+u+AyQp2tWoiDg6aptCVh?=
 =?us-ascii?q?sI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFR?=
 =?us-ascii?q?rhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTagf79+Ngi6oAfNusUZgIZuNLs6xw?=
 =?us-ascii?q?fUrHdPZ+lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2?=
 =?us-ascii?q?465MvwtRneVgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVz?=
 =?us-ascii?q?mu87tnRRn1gyoBKjU38nzYitZogaxbvhyvuhJxzY3TboyOKPZyYrnQcc8ASG?=
 =?us-ascii?q?ZdQspcUTFKDIOmb4sICuoMJfhVr47mp1sSrBu+AxSnCuXyyj9Qm3/9wKo33P?=
 =?us-ascii?q?gmEQHdwAwgHtQOvG7QrNXoLKcSTPu4w7XTzTnZd/NWxCzy5JLSchAmuPyBW6?=
 =?us-ascii?q?97f8nJyUQ3Cg/IgUicpZbmMj6VzOgBrXaX4uh6We+hk2Irtg58riW1ysovio?=
 =?us-ascii?q?TFnJwZx17K+Clj3Yo4KsO0RUhmatC+CpRQrTuVN45uT8MnRGFnpTg1x6UduZ?=
 =?us-ascii?q?6+YCgK0JMnxwPDa/Cfc4iH/BbjVOGJLDdmgXJqYrO/hxKo/Ue80e3wTNG00E?=
 =?us-ascii?q?tRoSZfiNnMsWgB1x3V6seZVvtw5lqt1DmS2wzJ6exJIVo4mbTFJ5Mj2LI9mI?=
 =?us-ascii?q?IfsUHZES/3nEX2grWWdkIh+uWw9+vnZa7mpoOdN49ykA3+NrkumtSiAekjLg?=
 =?us-ascii?q?cORHKX+fyh1LL450H5WrJKguUskqbFqJDaOdgbpqmhDg9Q04Yj7Re/DzC90N?=
 =?us-ascii?q?gBgHYIMkxFdwyDj4XyP1HOIev4Deukg1i2nzZk2fbGMqfmApXXIXjJiK3hcq?=
 =?us-ascii?q?pl605A1AozyshS55xKBbEFIfLzQlH+uMbYDh8kMgy73+fnBc571owARW2PBr?=
 =?us-ascii?q?WWP7jIvVCW++IlO/OMa5MNuDbhN/gl4ObjjWQ5mVAHZ6mmx50XZGqjHvt8JU?=
 =?us-ascii?q?WZfXrsjc0HEWgQuwozV+rqh0OeXj5XfXm9RLgw6S8mCIi+F4fMWpitgKCd3C?=
 =?us-ascii?q?e8BpBWfWFGClWLEXfubYmEWOoMZzyUIs5gjDMET6OsS4k/2h6ysA/10aFoIv?=
 =?us-ascii?q?DK9S0F5trf041w5uvSkgp3+TFqAsC112CWU3oyjm4OATgs0/NRu0t4n3yEyr?=
 =?us-ascii?q?R5hbR8CMROr6dCVRwmNJiay/FiFvj5QUTZY93PUlHwEYbuOi04Ut9km4xGWE?=
 =?us-ascii?q?16Adj31h0=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DQBQAtF21d/wPjVY1lHgEGBwaBZ4M?=
 =?us-ascii?q?FUyASKo0dl1KLYgkBAQEpEQECAQGEP4MROBMCAwgBAQUBAQEBAQYEAWyFLgy?=
 =?us-ascii?q?COiKDbk+EJAGCDqp7hUqDNIFJgTSHH4YxP4h/c4UWBIxMiTyWEQeCImIEhg2?=
 =?us-ascii?q?NXCeDIoE+j26EGKJthSk4IYFYMxqDXwmCDgGMFoJcPQEBMYEGAQGMMIJTAQE?=
X-IPAS-Result: =?us-ascii?q?A2DQBQAtF21d/wPjVY1lHgEGBwaBZ4MFUyASKo0dl1KLY?=
 =?us-ascii?q?gkBAQEpEQECAQGEP4MROBMCAwgBAQUBAQEBAQYEAWyFLgyCOiKDbk+EJAGCD?=
 =?us-ascii?q?qp7hUqDNIFJgTSHH4YxP4h/c4UWBIxMiTyWEQeCImIEhg2NXCeDIoE+j26EG?=
 =?us-ascii?q?KJthSk4IYFYMxqDXwmCDgGMFoJcPQEBMYEGAQGMMIJTAQE?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694299"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 16:22:32 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 1D1BD1A6022E;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id jAedi5oZJIhf; Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id F3B131A6023F;
 Mon,  2 Sep 2019 16:22:31 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id ms2l1gu3f5ga; Mon,  2 Sep 2019 16:22:31 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id DCBEB1A60228;
 Mon,  2 Sep 2019 16:22:31 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 16:22:18 +0300
Message-Id: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH 0/3] Changes for supporting Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu, sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgY2hhbmdlcyBhcmUgbmVlZGVkIGZvciBzb21lIG9mIHRoZSBQeXRob24gMiB1bml0IHRl
c3RzLiBTb21lIHRlc3RzIG1heQp1c2UgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMsIHRoZXJlZm9y
ZSB3ZSBoYWQgdG8gaW5jcmVhc2Ugb3VyIGxpbWl0LiBPdGhlcgpmaWxlcyB0cnkgdG8gY2xvc2Ug
dGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMgKDAtMiksIHRoZXJlZm9yZSB0aGUgVk0Kc2hv
dWxkbid0IGNyYXNoIGlmIHN1Y2ggYmVoYXZpb3IgaXMgd2FudGVkLiBBbHNvLCBzb21lIHVuaXQg
dGVzdHMgbmVlZApyZWN1cnNpdmUgbXV0ZXhlcy4KCkNvc3RpbiBMdXB1ICgzKToKICBsaWIvdmZz
Y29yZTogVXNlIGEgc2NhbGFibGUgYml0bWFwIGZvciBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKICBs
aWIvdmZzY29yZTogUmV0dXJuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNsb3NlIHN0YW5kYXJkIGZp
bGUKICAgIGRlc2NyaXB0b3JzCiAgbGliL3VrbG9jazogTWFrZSBtdXRleCByZWN1cnNpdmUKCiBs
aWIvdWtsb2NrL2luY2x1ZGUvdWsvbXV0ZXguaCAgICAgIHwgMjkgKysrKysrKysrKysrKysrKysr
KysrKystLS0tLS0KIGxpYi91a2xvY2svbXV0ZXguYyAgICAgICAgICAgICAgICAgfCAgMiArKwog
bGliL3Zmc2NvcmUvQ29uZmlnLnVrICAgICAgICAgICAgICB8ICA4ICsrKysrKystCiBsaWIvdmZz
Y29yZS9mZC5jICAgICAgICAgICAgICAgICAgIHwgMjMgKysrKysrKysrKysrKy0tLS0tLS0tLS0K
IGxpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmggfCAgMiArLQogbGliL3Zmc2NvcmUv
bWFpbi5jICAgICAgICAgICAgICAgICB8ICA4ICsrKysrLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDUx
IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 13:22:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 13:22:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4mI9-0006Ur-Go; Mon, 02 Sep 2019 13:22:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4mI8-0006Ue-8p
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 13:22:44 +0000
X-Inumbo-ID: bcfc1c56-cd84-11e9-aea3-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id bcfc1c56-cd84-11e9-aea3-12813bfff9fa;
 Mon, 02 Sep 2019 13:22:40 +0000 (UTC)
IronPort-SDR: LbgHNY9xa/Dgxr4VUSSwT95cxLoLvKeeof1SPv2DbrS4wlbJgX+kW9wKWCLnmIRu21hjl/Hjhf
 uc3VgM0I8EaA==
IronPort-PHdr: =?us-ascii?q?9a23=3ArDvYMB+4xbkxsv9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B21+wcTK2v8tzYMVDF4r011RmVBN+dsq0cwLSM+4nbGkU4qa6bt34DdJEeHz?=
 =?us-ascii?q?Qksu4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPER?=
 =?us-ascii?q?vjKwV1Ov71GonPhMiryuy+4ZLebxhWiDanfL9/Lgm6oQrQu8UInIBvNrs/xh?=
 =?us-ascii?q?zVr3VSZu9Y33loJVWdnxb94se/4ptu+DlOtvwi6sBNT7z0c7w3QrJEAjsmNX?=
 =?us-ascii?q?s15NDwuhnYUQSP/HocXX4InRdOHgPI8Qv1Xpb1siv9q+p9xCyXNtD4QLwoRT?=
 =?us-ascii?q?iv6bpgRRn1gykFKjE56nnahMxugqxGrhyvpBtxzIzaYIyOKPZyYrnQcc8ASG?=
 =?us-ascii?q?ZdQspcUTFKDIOmb4sICuoMJfhVr47mp1sSrBu+AxSnCuXyyj9Qm3/9wKo33P?=
 =?us-ascii?q?gmEQHdwAwgHtQOvG7QrNXoLKcSTPu4w7XTzTnZd/NWxCzy5JLSchAmuPyBW6?=
 =?us-ascii?q?97f8nJyUQ3Cg/IgUicpZbmMj6VzOgBrXaX4uh6We+hk2Irtg58riW1ysovio?=
 =?us-ascii?q?TFnJwZx17K+Clj3Yo4KsO0RUhmatC+CpRQrTuVN45uT8MnRGFnpTg1x6UduZ?=
 =?us-ascii?q?6+YCgK0JMnxwPDa/Cfc4iH/BbjVOGJLDdmgXJqYrO/hxKo/Ue80e3wTNG00E?=
 =?us-ascii?q?tRoSZfiNnMsWgB1x3V6seZVvtw5lqt1DmS2wzJ6exJIVo4mbTFJ5Mj2LI9mI?=
 =?us-ascii?q?IfsUHZES/3nEX2grWWdkIh+uWw9+vnZa7mpoOdN49ykA3+NrkumtSiAekjLg?=
 =?us-ascii?q?cORHKX+fyh1LL450H5WrJKguUskqbFqJDaOdgbpqmhDg9Q04Yj7Re/DzC90N?=
 =?us-ascii?q?gBgHYIMkxFdwyDj4XyP1HOIev4Deukg1i2nzZk2fbGMqfmApXXIXjJiK3hcq?=
 =?us-ascii?q?pl605A1AozyshS55xKBbEFIfLzQlH+uMbYDh8kMgy73+fnBc571owARW2PBr?=
 =?us-ascii?q?WWP7jIvVCW++IlO/OMa5MNuDbhN/gl4ObjjWQ5mVAHZ6mmx50XZGqjHvt8JU?=
 =?us-ascii?q?WZfXrsjc0HEWgQuwozV+rqh0OeXj5XfXm9RLgw6S8mCIi+F4fMWpitgKCd3C?=
 =?us-ascii?q?e8BpBWfWFGClWLEXfubYmEWOoMZzyUIs5gjDMET6OsS4k/2h6ysA/10aFoIv?=
 =?us-ascii?q?DK9S0F5trf041w5uvSkgp3+TFqAsC112CWU3oyjm4OATgs0/NRu0t4n3yEyr?=
 =?us-ascii?q?R5hbR8CMROr6dCVRwmNJiay/FiFvj5QUTZY93PUlHwEYbuOi04Ut9km4xGWE?=
 =?us-ascii?q?16Adj31h0=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DZBAAtF21d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYIBIqjR2jNAkBAQE6AQIBAYQ/AoMPOBMCAwgBAQUBAQEBAQYEAWyFOoI?=
 =?us-ascii?q?6IoJvBnkQPxJXGYMigg+qe4h+gUmBNIcfhjE/g3VshRGEdCIElgiWEQeCImI?=
 =?us-ascii?q?Ek2knmGaibYUpOCGBWDMag1+CThcVjhA9AQExgQYBAY8DAQE?=
X-IPAS-Result: =?us-ascii?q?A2DZBAAtF21d/wPjVY1lHQEBBQEHBQGBZ4NYIBIqjR2jN?=
 =?us-ascii?q?AkBAQE6AQIBAYQ/AoMPOBMCAwgBAQUBAQEBAQYEAWyFOoI6IoJvBnkQPxJXG?=
 =?us-ascii?q?YMigg+qe4h+gUmBNIcfhjE/g3VshRGEdCIElgiWEQeCImIEk2knmGaibYUpO?=
 =?us-ascii?q?CGBWDMag1+CThcVjhA9AQExgQYBAY8DAQE?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694301"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 16:22:32 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3095F1A60241;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id pEJnvJMCKgyN; Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 12CF31A60228;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id jivP0dd168Du; Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id E6FB91A6023C;
 Mon,  2 Sep 2019 16:22:31 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 16:22:20 +0300
Message-Id: <20190902132221.1917-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
References: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 2/3] lib/vfscore: Return error when
 trying to close standard file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu, sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29tZSBhcHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8gY2xvc2UgdGhlIHN0YW5kYXJkIGZpbGUgZGVz
Y3JpcHRvcnMgKHN0ZGluLApzdGRvdXQsIHN0ZGVyciksIHRoYXQgaXMgcGVyZmVjdGx5IG5vcm1h
bC4gVGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gc2hvdWxkIHJldHVybgphbiBlcnJvciBpZiBzdWNo
IHJlcXVlc3QgaXMgbm90IGFsbG93ZWQsIGluc3RlYWQgb2YgY3Jhc2hpbmcuCgpTaWduZWQtb2Zm
LWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGxpYi92ZnNjb3Jl
L2ZkLmMgICAgICAgICAgICAgICAgICAgfCA3ICsrKysrLS0KIGxpYi92ZnNjb3JlL2luY2x1ZGUv
dmZzY29yZS9maWxlLmggfCAyICstCiBsaWIvdmZzY29yZS9tYWluLmMgICAgICAgICAgICAgICAg
IHwgOCArKysrKy0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2ZkLmMgYi9saWIvdmZzY29yZS9mZC5j
CmluZGV4IGUwOWRkNTRjLi5mMWEyNjhjNCAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvZmQuYwor
KysgYi9saWIvdmZzY29yZS9mZC5jCkBAIC03MywxNCArNzMsMTUgQEAgZXhpdDoKIAlyZXR1cm4g
cmV0OwogfQogCi12b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCkKK2ludCB2ZnNjb3JlX3B1dF9m
ZChpbnQgZmQpCiB7CiAJc3RydWN0IHZmc2NvcmVfZmlsZSAqZnA7CiAJdW5zaWduZWQgbG9uZyBm
bGFnczsKIAogCVVLX0FTU0VSVChmZCA8IChpbnQpIEZEVEFCTEVfTUFYX0ZJTEVTKTsKIAkvKiBD
dXJyZW50bHkgaXQgaXMgbm90IGFsbG93ZWQgdG8gZnJlZSBzdGQoaW58b3V0fGVycikgKi8KLQlV
S19BU1NFUlQoZmQgPiAyKTsKKwlpZiAoZmQgPD0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlm
bGFncyA9IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwogCXVrX2JpdG1hcF9jbGVhcihmZHRhYmxl
LmJpdG1hcCwgZmQsIDEpOwpAQCAtOTQsNiArOTUsOCBAQCB2b2lkIHZmc2NvcmVfcHV0X2ZkKGlu
dCBmZCkKIAkgKi8KIAlpZiAoZnApCiAJCWZkcm9wKGZwKTsKKworCXJldHVybiAwOwogfQogCiBp
bnQgdmZzY29yZV9pbnN0YWxsX2ZkKGludCBmZCwgc3RydWN0IHZmc2NvcmVfZmlsZSAqZmlsZSkK
ZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmggYi9saWIvdmZz
Y29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCmluZGV4IDUxZjA3OTFhLi4wNTQzNGRmZSAxMDA2
NDQKLS0tIGEvbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaAorKysgYi9saWIvdmZz
Y29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCkBAIC02Miw3ICs2Miw3IEBAIHN0cnVjdCB2ZnNj
b3JlX2ZpbGUgewogfTsKIAogaW50IHZmc2NvcmVfYWxsb2NfZmQodm9pZCk7Ci12b2lkIHZmc2Nv
cmVfcHV0X2ZkKGludCBmZCk7CitpbnQgdmZzY29yZV9wdXRfZmQoaW50IGZkKTsKIGludCB2ZnNj
b3JlX2luc3RhbGxfZmQoaW50IGZkLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmaWxlKTsKIHN0cnVj
dCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZ2V0X2ZpbGUoaW50IGZkKTsKIHZvaWQgdmZzY29yZV9w
dXRfZmlsZShzdHJ1Y3QgdmZzY29yZV9maWxlICpmaWxlKTsKZGlmZiAtLWdpdCBhL2xpYi92ZnNj
b3JlL21haW4uYyBiL2xpYi92ZnNjb3JlL21haW4uYwppbmRleCBiZTA1NWI3OC4uNDQ5ODgxMWQg
MTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL21haW4uYworKysgYi9saWIvdmZzY29yZS9tYWluLmMK
QEAgLTIwNSwxNSArMjA1LDE3IEBAIFVLX1RSQUNFUE9JTlQodHJhY2VfdmZzX2Nsb3NlX2Vyciwg
IiVkIiwgaW50KTsKIGludCBmZGNsb3NlKGludCBmZCkKIHsKIAlzdHJ1Y3QgdmZzY29yZV9maWxl
ICpmcDsKKwlpbnQgZXJyb3I7CiAKIAlmcCA9IHZmc2NvcmVfZ2V0X2ZpbGUoZmQpOwogCWlmICgh
ZnApCiAJCXJldHVybiBFQkFERjsKIAotCXZmc2NvcmVfcHV0X2ZkKGZkKTsKLQlmZHJvcChmcCk7
CisJZXJyb3IgPSB2ZnNjb3JlX3B1dF9mZChmZCk7CisJaWYgKCFlcnJvcikKKwkJZmRyb3AoZnAp
OwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycm9yOwogfQogCiBpbnQgY2xvc2UoaW50IGZkKQot
LSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 13:22:46 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 13:22:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4mIA-0006VE-J3; Mon, 02 Sep 2019 13:22:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4mI9-0006Uj-5T
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 13:22:45 +0000
X-Inumbo-ID: bce99964-cd84-11e9-8980-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id bce99964-cd84-11e9-8980-bc764e2007e4;
 Mon, 02 Sep 2019 13:22:40 +0000 (UTC)
IronPort-SDR: ILOqie0c2WyRxl5C+aGJfFmcw/mJJCPmrqNannqEU2YM5AjHl8LG+fBxt1Kdnm9NumnFqYdZWu
 TwMZTuiip0Sw==
IronPort-PHdr: =?us-ascii?q?9a23=3AQIUflxM9OhOfw26Z6bcl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0I/j9rarrMEGX3/hxlliBBdydt6sezbOJ6+u+AyQp2tWoiDg6aptCVh?=
 =?us-ascii?q?sI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFR?=
 =?us-ascii?q?rhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTagf79+Ngi6oAfNusUZgIZuNLs6xw?=
 =?us-ascii?q?fUrHdPZ+lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2?=
 =?us-ascii?q?465MvwtRneVgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVz?=
 =?us-ascii?q?mu87tnRRn1gyoBKjU38nzYitZogaxbvhyvuhJxzY3Tbo6XOvpzZb/Rcc8ASG?=
 =?us-ascii?q?ZdRMtdSzBND4WhZIUPFeoBOuNYopHjqlsJthu+GQisBOXywTFOm3/2xbA62P?=
 =?us-ascii?q?kmHA7a2wwgBM4OsHXSrNnvMKcSTPi1zLTTwDrfdPNawy/96JXTfRw7u/GMWq?=
 =?us-ascii?q?t9fMzMwkcsDwPIlkicpIP4Mz+P1ekAs3KX4/R+We+tkWIqpRl9riWgy8sxkI?=
 =?us-ascii?q?XEhYIYxkra+Sh3zos5P8C0RUFlbdOiDZBerTuVN5FsTcMnW2xovSE6xaAYtp?=
 =?us-ascii?q?OjZygKzYgnxwbYa/yab4iE+hLjW/iVITd/nH9lZre/iAyz8Uik0OHzStK03E?=
 =?us-ascii?q?xSripYidbArGoN1xvL5siGTPty4Fuh1C6S2w3c9+1IO0M5mKrBJ5I/3LI9lI?=
 =?us-ascii?q?AfvErbEi/zgkr2jauWdks++uiv7uTqeqnpppiHN49oiwH+NL4imsiiAeQgLw?=
 =?us-ascii?q?gDRHSU+f+m2L374E32W69GjucxkqXBqpDVOdwbprKlAw9Syosj7he/DzGn0N?=
 =?us-ascii?q?QfhnkLNU9KdwyZj4f3P1HDO/T4Dfakg1Swizdn3f/HMaPnApnXKXjDirjhd6?=
 =?us-ascii?q?5n60FA0Aoz0cxf55VMB7EPPv3zXk7xtMTGARMjMwy03ufnB8l81o4FX2KAHL?=
 =?us-ascii?q?OWMKfIvlCT/O4gPfSMbpcPuDnhM/gl++LujXghlF8Gfammx4EXZ2q+Hvh8OE?=
 =?us-ascii?q?WWe3zsgssBEWgQuAoxVunqhUaEUTFNe3myW7gz6SohBI24EIfJXpqtj6CZ3C?=
 =?us-ascii?q?enAp1WYXhLCkuNEXftcIWEXe0AaCGPIsB/lDwFVKauS5U62BGoqgD1175nIf?=
 =?us-ascii?q?DP9SECq53jyYs92+qGkBA09DtvSsiQzWyJZ2V1hX8TAS872uZ4u0Mu5E2E1P?=
 =?us-ascii?q?1ThOdEFNobw+5RT09uPpnH0+18TdTvQh/pdczPUEusBM+hV2JiBuktysMDNh?=
 =?us-ascii?q?4uU+6piQrOinKn?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BbAwAtF21d/wPjVY1dCBwBAQEEAQE?=
 =?us-ascii?q?HBAEBgWeDWCASKo0dozQJAQEBOgECAQGEPwKDDzgTAgMIAQEFAQEBAQEGBAF?=
 =?us-ascii?q?shTqCOiKCbwYnUhA/ElcZgyKCD6pIM4VKgzSBSYE0hx+GMT+BEYNQhB9yhRY?=
 =?us-ascii?q?ElGqBHpYRB4IiYgSTaSeYZqgWOCGBWDMag1+CTheOJT0BATGBBgEBjwMBAQ?=
X-IPAS-Result: =?us-ascii?q?A2BbAwAtF21d/wPjVY1dCBwBAQEEAQEHBAEBgWeDWCASK?=
 =?us-ascii?q?o0dozQJAQEBOgECAQGEPwKDDzgTAgMIAQEFAQEBAQEGBAFshTqCOiKCbwYnU?=
 =?us-ascii?q?hA/ElcZgyKCD6pIM4VKgzSBSYE0hx+GMT+BEYNQhB9yhRYElGqBHpYRB4IiY?=
 =?us-ascii?q?gSTaSeYZqgWOCGBWDMag1+CTheOJT0BATGBBgEBjwMBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694302"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 16:22:32 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3BECC1A60228;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id mEzWH5gfqs28; Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 235971A6023C;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 4hOzL3lTwApS; Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 007AB1A60240;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 16:22:21 +0300
Message-Id: <20190902132221.1917-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
References: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 3/3] lib/uklock: Make mutex recursive
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu, sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBleGlzdGluZyBtdXRleCBpbXBsZW1lbnRhdGlvbiB0byBz
dXBwb3J0IG11bHRpcGxlIGxvY2tpbmcKYnkgdGhlIHNhbWUgdGhyZWFkLgoKU2lnbmVkLW9mZi1i
eTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvdWtsb2NrL2lu
Y2x1ZGUvdWsvbXV0ZXguaCB8IDI5ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tCiBsaWIv
dWtsb2NrL211dGV4LmMgICAgICAgICAgICB8ICAyICsrCiAyIGZpbGVzIGNoYW5nZWQsIDI1IGlu
c2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL3VrbG9jay9pbmNs
dWRlL3VrL211dGV4LmggYi9saWIvdWtsb2NrL2luY2x1ZGUvdWsvbXV0ZXguaAppbmRleCBmZjg1
MmI0NS4uZjlhNDFhOTMgMTAwNjQ0Ci0tLSBhL2xpYi91a2xvY2svaW5jbHVkZS91ay9tdXRleC5o
CisrKyBiL2xpYi91a2xvY2svaW5jbHVkZS91ay9tdXRleC5oCkBAIC01NSw0MSArNTUsNTUgQEAg
ZXh0ZXJuICJDIiB7CiAgKi8KIHN0cnVjdCB1a19tdXRleCB7CiAJaW50IGxvY2tlZDsKKwlpbnQg
ZGVwdGg7CisJc3RydWN0IHVrX3RocmVhZCAqb3duZXI7CiAJc3RydWN0IHVrX3dhaXRxIHdhaXQ7
CiB9OwogCiAjZGVmaW5lCVVLX01VVEVYX0lOSVRJQUxJWkVSKG5hbWUpCQkJCVwKLQl7IDAsIF9f
V0FJVF9RVUVVRV9JTklUSUFMSVpFUigobmFtZSkud2FpdCkgfQorCXsgMCwgMCwgTlVMTCwgX19X
QUlUX1FVRVVFX0lOSVRJQUxJWkVSKChuYW1lKS53YWl0KSB9CiAKIHZvaWQgdWtfbXV0ZXhfaW5p
dChzdHJ1Y3QgdWtfbXV0ZXggKm0pOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdWtfbXV0ZXhfbG9j
ayhzdHJ1Y3QgdWtfbXV0ZXggKm0pCiB7CisJc3RydWN0IHVrX3RocmVhZCAqY3VycmVudDsKIAl1
bnNpZ25lZCBsb25nIGlycWY7CiAKIAlVS19BU1NFUlQobSk7CiAKKwljdXJyZW50ID0gdWtfdGhy
ZWFkX2N1cnJlbnQoKTsKKwogCWZvciAoOzspIHsKLQkJdWtfd2FpdHFfd2FpdF9ldmVudCgmbS0+
d2FpdCwgbS0+bG9ja2VkID09IDApOworCQl1a193YWl0cV93YWl0X2V2ZW50KCZtLT53YWl0LAor
CQkJbS0+bG9ja2VkID09IDAgfHwgbS0+b3duZXIgPT0gY3VycmVudCk7CiAJCWlycWYgPSB1a3Bs
YXRfbGNwdV9zYXZlX2lycWYoKTsKLQkJaWYgKCFtLT5sb2NrZWQpCisJCWlmIChtLT5sb2NrZWQg
PT0gMCB8fCBtLT5vd25lciA9PSBjdXJyZW50KQogCQkJYnJlYWs7CiAJCXVrcGxhdF9sY3B1X3Jl
c3RvcmVfaXJxZihpcnFmKTsKIAl9CiAJbS0+bG9ja2VkID0gMTsKKwltLT5kZXB0aCsrOworCW0t
Pm93bmVyID0gY3VycmVudDsKIAl1a3BsYXRfbGNwdV9yZXN0b3JlX2lycWYoaXJxZik7CiB9CiAK
IHN0YXRpYyBpbmxpbmUgaW50IHVrX211dGV4X3RyeWxvY2soc3RydWN0IHVrX211dGV4ICptKQog
eworCXN0cnVjdCB1a190aHJlYWQgKmN1cnJlbnQ7CiAJdW5zaWduZWQgbG9uZyBpcnFmOwogCWlu
dCByZXQgPSAwOwogCiAJVUtfQVNTRVJUKG0pOwogCisJY3VycmVudCA9IHVrX3RocmVhZF9jdXJy
ZW50KCk7CisKIAlpcnFmID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7Ci0JaWYgKCFtLT5sb2Nr
ZWQpCisJaWYgKG0tPmxvY2tlZCA9PSAwIHx8IG0tPm93bmVyID09IGN1cnJlbnQpIHsKIAkJcmV0
ID0gbS0+bG9ja2VkID0gMTsKKwkJbS0+ZGVwdGgrKzsKKwkJbS0+b3duZXIgPSBjdXJyZW50Owor
CX0KIAl1a3BsYXRfbGNwdV9yZXN0b3JlX2lycWYoaXJxZik7CiAJcmV0dXJuIHJldDsKIH0KQEAg
LTEwNyw4ICsxMjEsMTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHVrX211dGV4X3VubG9jayhzdHJ1
Y3QgdWtfbXV0ZXggKm0pCiAKIAlpcnFmID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7CiAJVUtf
QVNTRVJUKG0tPmxvY2tlZCk7Ci0JbS0+bG9ja2VkID0gMDsKLQl1a193YWl0cV93YWtlX3VwKCZt
LT53YWl0KTsKKwlpZiAoLS1tLT5kZXB0aCA9PSAwKSB7CisJCW0tPmxvY2tlZCA9IDA7CisJCW0t
Pm93bmVyID0gTlVMTDsKKwkJdWtfd2FpdHFfd2FrZV91cCgmbS0+d2FpdCk7CisJfQogCXVrcGxh
dF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsKIH0KIApkaWZmIC0tZ2l0IGEvbGliL3VrbG9jay9t
dXRleC5jIGIvbGliL3VrbG9jay9tdXRleC5jCmluZGV4IDE4M2EwMWRiLi4wN2ZhZjFlNyAxMDA2
NDQKLS0tIGEvbGliL3VrbG9jay9tdXRleC5jCisrKyBiL2xpYi91a2xvY2svbXV0ZXguYwpAQCAt
Myw1ICszLDcgQEAKIHZvaWQgdWtfbXV0ZXhfaW5pdChzdHJ1Y3QgdWtfbXV0ZXggKm0pCiB7CiAJ
bS0+bG9ja2VkID0gMDsKKwltLT5kZXB0aCA9IDA7CisJbS0+b3duZXIgPSBOVUxMOwogCXVrX3dh
aXRxX2luaXQoJm0tPndhaXQpOwogfQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 13:22:51 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 13:22:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4mIF-0006Wh-KY; Mon, 02 Sep 2019 13:22:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4mIE-0006Vp-5S
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 13:22:50 +0000
X-Inumbo-ID: be64331c-cd84-11e9-8980-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id be64331c-cd84-11e9-8980-bc764e2007e4;
 Mon, 02 Sep 2019 13:22:42 +0000 (UTC)
IronPort-SDR: YlV/W4fLh82uSuGIGvkKLd/UvmEQZg4tkSvVGL+n+cO4jCpmGuRObTNiip6k75LdYiofZ7Oa3T
 kcknrPyJTAaA==
IronPort-PHdr: =?us-ascii?q?9a23=3A+3AzbRM0om4vWoaQ7CAl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0I/j9rarrMEGX3/hxlliBBdydt6sezbOJ6+u+AyQp2tWoiDg6aptCVh?=
 =?us-ascii?q?sI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFR?=
 =?us-ascii?q?rhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTagf79+Ngi6oAfNusUZgIZuNLs6xw?=
 =?us-ascii?q?fUrHdPZ+lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2?=
 =?us-ascii?q?465MvwtRneVgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVz?=
 =?us-ascii?q?mu87tnRRn1gyoBKjU38nzYitZogaxbvhyvuhJxzY3Tbo6XOvpzZb/Rcc8ASG?=
 =?us-ascii?q?ZdRMtdSzBND4WhZIUPFeoBOuNYopHjqlsJthu+GQisBOXywTFOm3/2xbA62P?=
 =?us-ascii?q?kmHA7a2wwgBM4OsHXSrNnvMKcSTPi1zLTTwDrfdPNawy/96JXTfRw7u/GMWq?=
 =?us-ascii?q?t9fMzMwkcsDwPIlkicpIP4Mz+P1ekAs3KX4/R+We+tkWIqpRl9riWgy8sxkI?=
 =?us-ascii?q?XEhYIYxkra+Sh3zos5P8C0RUFlbdOiDZBerTuVN5FsTcMnW2xovSE6xaAYtp?=
 =?us-ascii?q?OjZygKzYgnxwbYa/yab4iE+hLjW/iVITd/nH9lZre/iAyz8Uik0OHzStK03E?=
 =?us-ascii?q?xSripYidbArGoN1xvL5siGTPty4Fuh1C6S2w3c9+1IO0M5mKrBJ5I/3LI9lI?=
 =?us-ascii?q?AfvErbEi/zgkr2jauWdks++uiv7uTqeqnpppiHN49oiwH+NL4imsiiAeQgLw?=
 =?us-ascii?q?gDRHSU+f+m2L374E32W69GjucxkqXBqpDVOdwbprKlAw9Syosj7he/DzGn0N?=
 =?us-ascii?q?QfhnkLNU9KdwyZj4f3P1HDO/T4Dfakg1Swizdn3f/HMaPnApnXKXjDirjhd6?=
 =?us-ascii?q?5n60FA0Aoz0cxf55VMB7EPPv3zXk7xtMTGARMjMwy03ufnB8l81o4FX2KAHL?=
 =?us-ascii?q?OWMKfIvlCT/O4gPfSMbpcPuDnhM/gl++LujXghlF8Gfammx4EXZ2q+Hvh8OE?=
 =?us-ascii?q?WWe3zsgssBEWgQuAoxVunqhUaEUTFNe3myW7gz6SohBI24EIfJXpqtj6CZ3C?=
 =?us-ascii?q?enAp1WYXhLCkuNEXftcIWEXe0AaCGPIsB/lDwFVKauS5U62BGoqgD1175nIf?=
 =?us-ascii?q?DP9SECq53jyYs92+qGkBA09DtvSsiQzWyJZ2V1hX8TAS872uZ4u0Mu5E2E1P?=
 =?us-ascii?q?1ThOdEFNobw+5RT09uPpnH0+18TdTvQh/pdczPUEusBM+hV2JiBuktysMDNh?=
 =?us-ascii?q?4uU+6piQrOinKn?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DcBAAtF21d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUyASKo0dozQJAQEBKREBAgEBhD8Cgw84EwIDCAEBBQEBAQEBBgQBbIU?=
 =?us-ascii?q?uDII6IoJvBnkQPxJXGYMiAYIOqnuFSoM0gUmBNIcfhjE/gRGCZGyEHXSEdCI?=
 =?us-ascii?q?ElgiWEQeCImIEhg2NXCeDIoE+j26EGKJthSk4IYFYMxqDXwmCRRcVizSCXD0?=
 =?us-ascii?q?BATGBBgEBjC+CVAEB?=
X-IPAS-Result: =?us-ascii?q?A2DcBAAtF21d/wPjVY1lHQEBBQEHBQGBZ4MFUyASKo0do?=
 =?us-ascii?q?zQJAQEBKREBAgEBhD8Cgw84EwIDCAEBBQEBAQEBBgQBbIUuDII6IoJvBnkQP?=
 =?us-ascii?q?xJXGYMiAYIOqnuFSoM0gUmBNIcfhjE/gRGCZGyEHXSEdCIElgiWEQeCImIEh?=
 =?us-ascii?q?g2NXCeDIoE+j26EGKJthSk4IYFYMxqDXwmCRRcVizSCXD0BATGBBgEBjC+CV?=
 =?us-ascii?q?AEB?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694300"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 16:22:32 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 263B11A6023F;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id IsYZwqymFjoO; Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 089781A60241;
 Mon,  2 Sep 2019 16:22:32 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id ZmMpdwe4YOZY; Mon,  2 Sep 2019 16:22:31 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id E28FC1A6022E;
 Mon,  2 Sep 2019 16:22:31 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 16:22:19 +0300
Message-Id: <20190902132221.1917-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
References: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 1/3] lib/vfscore: Use a scalable
 bitmap for open file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu, sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VW50aWwgbm93LCB0aGUgbnVtYmVyIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyB3YXMgbGltaXRl
ZCB0byA2NCwgd2hpY2ggd2FzIHRoZQpudW1iZXIgb2YgYml0cyBvZiB0aGUgdW5kZXJseWluZyBi
aXRtYXAuIFdlIGZpeCB0aGF0IGJ5IHJlcGxhY2luZyB3aXRoIGEKY29uZmlndXJhYmxlIGJpdG1h
cC4gV2Ugc2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIG1heGltdW0gb3BlbiBmaWxlcyB0byAxMDI0
LgoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0t
CiBsaWIvdmZzY29yZS9Db25maWcudWsgfCAgOCArKysrKysrLQogbGliL3Zmc2NvcmUvZmQuYyAg
ICAgIHwgMTYgKysrKysrKystLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25z
KCspLCA5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL0NvbmZpZy51ayBi
L2xpYi92ZnNjb3JlL0NvbmZpZy51awppbmRleCA2Y2Y2YzYzYS4uMDczMTkwOTkgMTAwNjQ0Ci0t
LSBhL2xpYi92ZnNjb3JlL0NvbmZpZy51aworKysgYi9saWIvdmZzY29yZS9Db25maWcudWsKQEAg
LTEsNiArMSwxMiBAQAotY29uZmlnIExJQlZGU0NPUkUKK21lbnVjb25maWcgTElCVkZTQ09SRQog
CWJvb2wgInZmc2NvcmU6IFZGUyBDb3JlIEludGVyZmFjZSIKIAlkZWZhdWx0IG4KIAlzZWxlY3Qg
TElCTk9MSUJDIGlmICFIQVZFX0xJQkMKIAlzZWxlY3QgTElCVUtERUJVRwogCXNlbGVjdCBMSUJV
S0xPQ0sKKworaWYgTElCVkZTQ09SRQorY29uZmlnIExJQlZGU0NPUkVfTUFYX0ZJTEVTCisJaW50
ICJNYXhpbXVtIG51bWJlciBvZiBvcGVuIGZpbGVzIgorCWRlZmF1bHQgMTAyNAorZW5kaWYKZGlm
ZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2ZkLmMgYi9saWIvdmZzY29yZS9mZC5jCmluZGV4IDAxMDI1
YTQ2Li5lMDlkZDU0YyAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvZmQuYworKysgYi9saWIvdmZz
Y29yZS9mZC5jCkBAIC0zNSwxOSArMzUsMTkgQEAKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2lu
Y2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KLSNpbmNsdWRlIDx1ay9iaXRvcHMuaD4KKyNpbmNsdWRl
IDx1ay9iaXRtYXAuaD4KICNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KICNpbmNsdWRlIDx2ZnNjb3Jl
L2ZpbGUuaD4KICNpbmNsdWRlIDx1ay9wbGF0L2xjcHUuaD4KICNpbmNsdWRlIDxlcnJuby5oPgog
I2luY2x1ZGUgPHVrL2N0b3JzLmg+CiAKLSNkZWZpbmUgRkRUQUJMRV9NQVhfRklMRVMgKHNpemVv
Zih1aW50NjRfdCkgKiA4KQorI2RlZmluZSBGRFRBQkxFX01BWF9GSUxFUyAxMDI0CiAKIHZvaWQg
aW5pdF9zdGRpbyh2b2lkKTsKIAogc3RydWN0IGZkdGFibGUgewotCXVpbnQ2NF90IGJpdG1hcDsK
Kwl1bnNpZ25lZCBsb25nIGJpdG1hcFtVS19CSVRTX1RPX0xPTkdTKEZEVEFCTEVfTUFYX0ZJTEVT
KV07CiAJdWludDMyX3QgZmRfc3RhcnQ7CiAJc3RydWN0IHZmc2NvcmVfZmlsZSAqZmlsZXNbRkRU
QUJMRV9NQVhfRklMRVNdOwogfTsKQEAgLTU5LDE0ICs1OSwxNCBAQCBpbnQgdmZzY29yZV9hbGxv
Y19mZCh2b2lkKQogCWludCByZXQ7CiAKIAlmbGFncyA9IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigp
OwotCXJldCA9IHVrYXJjaF9mZnNsKH5mZHRhYmxlLmJpdG1hcCk7CisJcmV0ID0gdWtfZmluZF9u
ZXh0X3plcm9fYml0KGZkdGFibGUuYml0bWFwLCBGRFRBQkxFX01BWF9GSUxFUywgMCk7CiAKIAlp
ZiAoIXJldCkgewogCQlyZXQgPSAtRU5GSUxFOwogCQlnb3RvIGV4aXQ7CiAJfQogCi0JZmR0YWJs
ZS5iaXRtYXAgfD0gKHVpbnQ2NF90KSAxIDw8IHJldDsKKwl1a19iaXRtYXBfc2V0KGZkdGFibGUu
Yml0bWFwLCByZXQsIDEpOwogCiBleGl0OgogCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihmbGFn
cyk7CkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgdmZzY29yZV9wdXRfZmQoaW50IGZkKQogCVVLX0FT
U0VSVChmZCA+IDIpOwogCiAJZmxhZ3MgPSB1a3BsYXRfbGNwdV9zYXZlX2lycWYoKTsKLQlfX3Vr
X2NsZWFyX2JpdChmZCwgJmZkdGFibGUuYml0bWFwKTtcCisJdWtfYml0bWFwX2NsZWFyKGZkdGFi
bGUuYml0bWFwLCBmZCwgMSk7CiAJZnAgPSBmZHRhYmxlLmZpbGVzW2ZkXTsKIAlmZHRhYmxlLmZp
bGVzW2ZkXSA9IE5VTEw7CiAJdWtwbGF0X2xjcHVfcmVzdG9yZV9pcnFmKGZsYWdzKTsKQEAgLTEy
OSw3ICsxMjksNyBAQCBzdHJ1Y3QgdmZzY29yZV9maWxlICp2ZnNjb3JlX2dldF9maWxlKGludCBm
ZCkKIAlVS19BU1NFUlQoZmQgPCAoaW50KSBGRFRBQkxFX01BWF9GSUxFUyk7CiAKIAlmbGFncyA9
IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwotCWlmICghKGZkdGFibGUuYml0bWFwICYgKCh1aW50
NjRfdCkgMSA8PCBmZCkpKQorCWlmICghdWtfdGVzdF9iaXQoZmQsIGZkdGFibGUuYml0bWFwKSkK
IAkJZ290byBleGl0OwogCXJldCA9IGZkdGFibGUuZmlsZXNbZmRdOwogCWZob2xkKHJldCk7CkBA
IC0xODYsNyArMTg2LDcgQEAgc3RhdGljIHZvaWQgZmR0YWJsZV9pbml0KHZvaWQpCiAJbWVtc2V0
KCZmZHRhYmxlLCAwLCBzaXplb2YoZmR0YWJsZSkpOwogCiAJLyogcmVzZXJ2ZSBzdGRpbiwgc3Rk
b3V0IGFuZCBzdGRlcnIgKi8KLQlmZHRhYmxlLmJpdG1hcCA9IDc7CisJdWtfYml0bWFwX3NldChm
ZHRhYmxlLmJpdG1hcCwgMCwgMyk7CiAJaW5pdF9zdGRpbygpOwogfQogCi0tIAoyLjIwLjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 13:31:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 13:31:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4mQK-0007I5-AP; Mon, 02 Sep 2019 13:31:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4mQI-0007I0-LK
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 13:31:10 +0000
X-Inumbo-ID: eb3cdcc6-cd85-11e9-951b-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id eb3cdcc6-cd85-11e9-951b-bc764e2007e4;
 Mon, 02 Sep 2019 13:31:07 +0000 (UTC)
IronPort-SDR: DQio8virnLvsCQuv6FsrQIVWyRCIOAD4xVrHHzeim8gOur7q0rVXsyOj0aW/z9qCTJga22zFDw
 wA66MjUQh5Cw==
IronPort-PHdr: =?us-ascii?q?9a23=3Agzoy6xLI72asvi05iNmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfLv7xwZ3uMQTl6Ol3ixeRBMOHsqgC0rWO+P67EUU7or+5+EgYd5JNUx?=
 =?us-ascii?q?JXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQ?=
 =?us-ascii?q?viPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCejbb9oMRm7rxndusYXjIZsN6081g?=
 =?us-ascii?q?bHrnxUdupM2GhmP0iTnxHy5sex+J5s7SFdsO8/+sBDTKv3Yb02QaRXAzo6PW?=
 =?us-ascii?q?814tbrtQTYQguU+nQcSGQWnQFWDAXD8Rr3Q43+sir+tup6xSmaIcj7Rq06VD?=
 =?us-ascii?q?i+86tmTgLjhSEaPDA77W7XkNR9gqJFrhy8qRJxwInabZqJOPZiZK7RYckXSX?=
 =?us-ascii?q?ZdUstXSidPApm8b4wKD+cZI+tYqJL9p0cPrRu4GAKiAv7vyidVhnTr2qA1z+?=
 =?us-ascii?q?MhERra3AwhGdICqnDUrMjtNKcPSu260LLIwS/bb/NLwjjx8pLIchc4rPyKQL?=
 =?us-ascii?q?l+ctLRxFEyGw7Kk1mcs4/oMjOP2ugTrWSW7fBsWOy3h2I6pAx9vyKjy8Qsh4?=
 =?us-ascii?q?XTmI4YxF7J+T9kzIs6O9G1TlNwb8S+H5tKrS6aMpN7QsYlQ251pik30qYGuZ?=
 =?us-ascii?q?unfCgSz5Qn2gLfZ+SHc4eW5hLjU/6cISl9hH1/ebK/gwy+/lS7yuHmTsm0zU?=
 =?us-ascii?q?1FojBfktnLrnwN1hrT5dabSvZl40us1iuD2xrQ5+xEO0w4i7TXJpw7zrM+jp?=
 =?us-ascii?q?YTtF7MHi7ymEX4lq+WcUAk9/C05OTgebXmup6cN4luhgH6L6QugtG/DP8kPQ?=
 =?us-ascii?q?gVRWSb4fm826b58U3jR7VGluc2nbXBsJDGOcQboba0AwpU0oYl6ha/CCym3M?=
 =?us-ascii?q?0FknYZMlJKZhaHgpPtO1HPO/D4Eey/j06jkTh1wfDKJLrhAo/CLnLbirfuYa?=
 =?us-ascii?q?5961JAyAo01d1f6YxbCrUAIPLrRED9rtzYDgI4MwOowubqE9N92Z0CVmKLGK?=
 =?us-ascii?q?CWK7nevkGV5ug3OemDeJcVuCrhK/gi//Puln85lkUHfaaz25sbcmu4Ee5gI0?=
 =?us-ascii?q?WFYXrjmNEBHn0PvgclSuzllkGNUTpJaHmpRa4z+Cw7Apq8DYjfXoCtnKCB3C?=
 =?us-ascii?q?CjE51NZ2BGD1eMEXHye4WHRvcDdiSSI85/nTweTrWhTZEu2g2qtADg0LVrNP?=
 =?us-ascii?q?Tb+jBL/a7kgd104ezUjlQ++CJ5C+yZ0nqRVCdkk2VOQCU5j45lpkko4VCYza?=
 =?us-ascii?q?l+y9hFDcEbs/hOSRs7M9jY0vRnI9vpHBrcdJGTTwD1EZ2dHTgtQ4dpkJc1aE?=
 =?us-ascii?q?FnFoD6gw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DLBQBdGG1d/wPjVY1lHgEGBwaBZ4N?=
 =?us-ascii?q?YIBKNR6M0CQEBAToBAgEBhD+DETgTAgMIAQEFAQEBAQEGBAFshTqCOiKDbk+?=
 =?us-ascii?q?EJIIPqmGFSoM0gUmBNIcfhjE/iXKFFgSMTIk8lhEHgiJiBJNpJ4IjlkOoFjg?=
 =?us-ascii?q?hgVgzGoNgghYBAQGOcD0BAYE3AQGPAwEB?=
X-IPAS-Result: =?us-ascii?q?A2DLBQBdGG1d/wPjVY1lHgEGBwaBZ4NYIBKNR6M0CQEBA?=
 =?us-ascii?q?ToBAgEBhD+DETgTAgMIAQEFAQEBAQEGBAFshTqCOiKDbk+EJIIPqmGFSoM0g?=
 =?us-ascii?q?UmBNIcfhjE/iXKFFgSMTIk8lhEHgiJiBJNpJ4IjlkOoFjghgVgzGoNgghYBA?=
 =?us-ascii?q?QGOcD0BAYE3AQGPAwEB?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694324"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 16:31:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 882A61A60241;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id CCG-LaG1nMTC; Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6AE1D1A6023F;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id RJpOU1Hn5TQm; Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 464401A60228;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 16:31:01 +0300
Message-Id: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 0/2] Changes for supporting
 Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu, sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2Ugb2JzZXJ2ZWQgdGhhdCBhIGJlc3QgcHJhY3RpY2UgZm9yIHN0dWJzIGlzIHRvIHJldHVybiBl
cnJvcnMsIG90aGVyd2lzZSwgd2hlbgp0aGV5IGhhdmUgc2lkZSBlZmZlY3RzIHRoZW4gdGhlIGNh
bGxlZXMgZGVwZW5kIG9uIHRob3NlIGVmZmVjdHMuIEZvbGxvd2luZyB0aGlzCmxvZ2ljLCB3ZSBy
ZXZpc2l0ZWQgc29tZSBvZiBvdXIgbmV3bGliIGdsdWUgc3R1YnMgd2hpY2ggZ2VuZXJhdGVkIGNy
YXNoZXMKZHVyaW5nIHRoZSBQeXRob24gMiB1bml0IHRlc3RzLgoKQ29zdGluIEx1cHUgKDIpOgog
IFJldmlzaXQgcHJvY2Vzcy5jIGZ1bmN0aW9ucwogIFJldmlzaXQgcHR5LmMgZnVuY3Rpb25zCgog
aW5jbHVkZS91ay9wcm9jZXNzLmggfCAgNDMgKysrKysrKysrKysKIHByb2Nlc3MuYyAgICAgICAg
ICAgIHwgMTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIHB0
eS5jICAgICAgICAgICAgICAgIHwgIDExICstLQogc2lnbmFsLmMgICAgICAgICAgICAgfCAgMTgg
KysrKysKIHRpbWUuYyAgICAgICAgICAgICAgIHwgICA1ICsrCiA1IGZpbGVzIGNoYW5nZWQsIDE4
OCBpbnNlcnRpb25zKCspLCA1NCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs
dWRlL3VrL3Byb2Nlc3MuaAoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 13:31:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 13:31:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4mQN-0007IZ-CZ; Mon, 02 Sep 2019 13:31:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4mQL-0007IF-DG
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 13:31:13 +0000
X-Inumbo-ID: ed4cbd24-cd85-11e9-aea3-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id ed4cbd24-cd85-11e9-aea3-12813bfff9fa;
 Mon, 02 Sep 2019 13:31:11 +0000 (UTC)
IronPort-SDR: z2mgCWAienFHZr29b9F8uCAYFfo2ec7uEwY4YgNYnkGd8LIJhh6VtWk4IxX2XlbgE+agibxe/C
 UsAiekyNURSA==
IronPort-PHdr: =?us-ascii?q?9a23=3AIIJjDRWseI6TWGNgxSLoRzguN+fV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbRCBt8tkgFKBZ4jH8fUM07OQ7/m6HzVfud3f6zgrS99lb1?=
 =?us-ascii?q?c9k8IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUh?=
 =?us-ascii?q?rwOhBoKevrB4Xck9q41/yo+53Ufg5EmCexbal9IRmrswndrNQajIl+Jqo+yx?=
 =?us-ascii?q?bErGZDdvhLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PW?=
 =?us-ascii?q?wt68LlqRfMTQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WS?=
 =?us-ascii?q?in4qx2RhLklDsLOjgk+2zRl8d+jr9UoAi5qhJ/3YDafY+bOvl5cKzfc9MXXn?=
 =?us-ascii?q?ZNUtpLWiBdGI6wc5cDAuwcNuhYtYn9oF4OoAOgCAmrH+Pv1j5Ihnnr1qM8zu?=
 =?us-ascii?q?QhCRzG1xEnEt0St3TUt8n1NKYUUeyvyKnI0C3Db+5N1Djh84jEaAghoeyXUr?=
 =?us-ascii?q?5qa8rRzlAiGgXYhVuTsYzoJy6Z2+sQv2SB7OdtVfijh3A5pwxzuDSiyN8ghp?=
 =?us-ascii?q?TGi44I0FzJ9iV0zJwrKdC2RkN3e8OoHZROuyycKoB4WNktQ3tytyY/0rAGvJ?=
 =?us-ascii?q?m7czUUx5k/3B7fbuCHc5CP4hL+SOadOTd4i2xheLK4nxuy702gxff9Vsmwyl?=
 =?us-ascii?q?pFsjFFnsPUtnAQzBPf8NKHSvxl8keg3zaAyRzT5/lZLU07iKbXMZ0sz74qmp?=
 =?us-ascii?q?YNr0jOHDX6lUvugK+TbEok++yo6+r9YrXho5+RL5N7igblMqQym8y/B/40Mg?=
 =?us-ascii?q?wTX2iD5OSxz6Hs/VbjTLVSk/05ibPVsIrdJcgDvK62HxdV0po/6xa4Fzqm1d?=
 =?us-ascii?q?UYnX8GLFJCYxKLlpXmNE/QIP/mCfeymFCskDZwx/DaJb3tGJrMIWbFkLv7er?=
 =?us-ascii?q?Z98UFcwhIpzd9D/5JUFq0BIPXrV0//qtPYCh45MxSqzOr9CNV9y4IeVn6OAq?=
 =?us-ascii?q?KCNqPdr0OH5uY1LOaXfoMapiv9IeA/5/HylX85hUMdfa6x0JsMaHC3BO5mLF?=
 =?us-ascii?q?+fYXb2mdcOC2EKvhY+TOPwjl2NSztTam20X60i+j47DJipApzZSo+znbyLxD?=
 =?us-ascii?q?27EYFOZmBaFlCMFm/ld56FW/cJbyKSJNVtkj8ZVbe/TY8g1A+htBXhxrphMO?=
 =?us-ascii?q?Xb5ikYuoj429Rv+eLTiEJ6yTshCsWb0maWCm15gG4Mbzs3x7xk51xwzBGEy6?=
 =?us-ascii?q?crreZfEIl44OhVUwFyEYPE0qQuANfpRgPHONOUUEuOSc7gGSw7CMg2lYxdK3?=
 =?us-ascii?q?1hEsmv20iQlxGhBKUYwuSG?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DeBABdGG1d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4FugWogEiqNHYkdmDCBZwkBAQE6AQIBAYFLgnQCgw84EwIDCAEBBQEBAQE?=
 =?us-ascii?q?BBgQBbIU6gjoigm8GJ1IQPxJXGYJXS4IPqi4zhUqDNIFJgTSHH4M7gnY/gRG?=
 =?us-ascii?q?CXYR8FIYKBIxMIId+G4EDlhEHgiJiBI8mhEMngmKWBKgWOCGBWDMac4Jsgk4?=
 =?us-ascii?q?XjiU9AQExgQYBAYwvglQBAQ?=
X-IPAS-Result: =?us-ascii?q?A2DeBABdGG1d/wPjVY1lHQEBBQEHBQGBZ4FugWogEiqNH?=
 =?us-ascii?q?YkdmDCBZwkBAQE6AQIBAYFLgnQCgw84EwIDCAEBBQEBAQEBBgQBbIU6gjoig?=
 =?us-ascii?q?m8GJ1IQPxJXGYJXS4IPqi4zhUqDNIFJgTSHH4M7gnY/gRGCXYR8FIYKBIxMI?=
 =?us-ascii?q?Id+G4EDlhEHgiJiBI8mhEMngmKWBKgWOCGBWDMac4Jsgk4XjiU9AQExgQYBA?=
 =?us-ascii?q?YwvglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694325"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 16:31:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id AAFCD1A6023C;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id GAXj9QP4e-QW; Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7841C1A60240;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id maJpthgO4Kuo; Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 5614E1A6022E;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 16:31:02 +0300
Message-Id: <20190902133103.1990-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
References: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/2] Revisit process.c
 functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu, sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCByZXZpc2l0cyB0aGUgZnVuY3Rpb25zIGluIHByb2Nlc3MuYywgcmVkaXN0cmli
dXRlcyBzb21lIG9mIHRoZW0gYW5kCmltcGxlbWVudCB0aGUgb3RoZXJzLiBUaGUgcmVtYWluaW5n
IGZ1bmN0aW9ucyBtYXkgdmVyeSB3ZWxsIGJlIG1vdmVkIGludG8gYW4KaW50ZXJuYWwgInByb2Nl
c3MiIHJlbGF0ZWQgbGlicmFyeSwgYnV0IHdlIHdpbGwgZG8gdGhpcyBhdCBhbm90aGVyIHRpbWUu
IEl0J3MKd29ydGggc2F5aW5nIHRoYXQgd2Ugc2V0IHRoZSBQSUQgb2YgdGhlIHVuaWtlcm5lbCB0
byAxLCBzYXZpbmcgdGhlIFBJRCAwIGZvciBpdHMKInBhcmVudCIsIGFuIGludmlzaWJpbGUgcHJv
Y2VzcyB0aGF0IGlzIGFsc28gbm90IHNob3duIG9uIExpbnV4LgoKUmVkaXN0cmlidXRlZCBmdW5j
dGlvbnM6Ci0ga2lsbCgpIGFuZCBraWxscGcoKSBhcmUgbW92ZWQgdG8gc2lnbmFsLmMKLSB0aW1l
cygpIGlzIG1vdmVkIHRvIHRpbWUuYwoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rp
bi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyArKysrKysr
KysrKwogcHJvY2Vzcy5jICAgICAgICAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrLS0tLS0tLS0tLS0tLQogc2lnbmFsLmMgICAgICAgICAgICAgfCAgMTggKysrKysKIHRp
bWUuYyAgICAgICAgICAgICAgIHwgICA1ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDE4MSBpbnNlcnRp
b25zKCspLCA1MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VrL3By
b2Nlc3MuaAoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWsvcHJvY2Vzcy5oIGIvaW5jbHVkZS91ay9w
cm9jZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyMDhlMwotLS0g
L2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWsvcHJvY2Vzcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8q
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBBdXRob3Jz
OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgorICoKKyAqIENvcHlyaWdodCAo
YykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
ICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9E
SUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworCisjaWZuZGVmIF9fVUtfUFJPQ0VTU19IX18KKyNkZWZp
bmUgX19VS19QUk9DRVNTX0hfXworCisjZGVmaW5lIFVOSUtSQUZUX1BJRCAgICAgIDEKKyNkZWZp
bmUgVU5JS1JBRlRfUFBJRCAgICAgMAorI2RlZmluZSBVTklLUkFGVF9TSUQgICAgICAwCisjZGVm
aW5lIFVOSUtSQUZUX1BHSUQgICAgIDAKKworI2VuZGlmIC8qIF9fVUtfUFJPQ0VTU19IX18gKi8K
ZGlmZiAtLWdpdCBhL3Byb2Nlc3MuYyBiL3Byb2Nlc3MuYwppbmRleCBjNGUzNjY0Li5lMjYxMTBk
IDEwMDY0NAotLS0gYS9wcm9jZXNzLmMKKysrIGIvcHJvY2Vzcy5jCkBAIC0zLDcgKzMsNyBAQAog
ICogbGlibmV3bGliIGdsdWUgY29kZQogICoKICAqIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVs
aXBlLmh1aWNpQG5lY2xhYi5ldT4KLSAqCisgKiAgICAgICAgICBDb3N0aW4gTHVwdSA8Y29zdGlu
Lmx1cHVAY3MucHViLnJvPgogICoKICAqIENvcHlyaWdodCAoYykgMjAxNywgTkVDIEV1cm9wZSBM
dGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzUsMTM0
ICszNSwxOTkgQEAKICAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElG
SUVEIElOIEFOWSBXQVkuCiAgKi8KIAotI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxlcnJu
by5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8dWsvcHJvY2Vzcy5oPgorI2luY2x1ZGUgPHVrL3By
aW50Lmg+CiAjdW5kZWYgZXJybm8KIGV4dGVybiBpbnQgZXJybm87CiAKLWludCBleGVjdmUoY2hh
ciAqbmFtZSBfX3VudXNlZCwgY2hhciAqKmFyZ3YgX191bnVzZWQsIGNoYXIgKiplbnYgX191bnVz
ZWQpCisKK2ludCBmb3JrKHZvaWQpCiB7Ci0JZXJybm8gPSBFTk9NRU07CisJLyogZm9yaygpIGlz
IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSAqLworCWVycm5vID0gRU5PU1lTOwogCXJl
dHVybiAtMTsKIH0KIAotaW50IGV4ZWN2KGNvbnN0IGNoYXIgKnBhdGggX191bnVzZWQsIGNoYXIg
KmNvbnN0IGFyZ3ZbXSBfX3VudXNlZCkKK3N0YXRpYwordm9pZCBleGVjX3dhcm4oY29uc3QgY2hh
ciAqZnVuYywKKwkJY29uc3QgY2hhciAqcGF0aCwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpj
b25zdCBlbnZwW10pCiB7Ci0JcmV0dXJuIDA7Ci19CisJaW50IGk7CiAKLWludCBzeXN0ZW0oY29u
c3QgY2hhciAqY29tbWFuZCBfX3VudXNlZCkKLXsKLQlyZXR1cm4gMDsKLX0KKwl1a19wcl93YXJu
KCIlcygpOiBwYXRoPSVzIiwgZnVuYywgcGF0aCk7CiAKLUZJTEUgKnBvcGVuKGNvbnN0IGNoYXIg
KmNvbW1hbmQgX191bnVzZWQsIGNvbnN0IGNoYXIgKnR5cGUgX191bnVzZWQpCi17Ci0JcmV0dXJu
IE5VTEw7Ci19CisJLyogcHJpbnQgYXJndW1lbnRzICovCisJaSA9IDA7CisJdWtfcHJfd2Fybigi
IGFyZ3Y9WyIpOworCXdoaWxlIChhcmd2W2ldKSB7CisJCXVrX3ByX3dhcm4oIiVzJXMiLCAoaSA+
IDAgPyAiLCAiIDogIiIpLCBhcmd2W2ldKTsKKwkJaSsrOworCX0KKwl1a19wcl93YXJuKCJdIik7
CiAKLWludCBwY2xvc2UoRklMRSAqc3RyZWFtIF9fdW51c2VkKQotewotCXJldHVybiAwOworCS8q
IHByaW50IGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworCWlmIChlbnZwKSB7CisJCWkgPSAwOwor
CQl1a19wcl93YXJuKCIgZW52cD1bIik7CisJCXdoaWxlIChlbnZwW2ldKSB7CisJCQl1a19wcl93
YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwgZW52cFtpXSk7CisJCQlpKys7CisJCX0K
KwkJdWtfcHJfd2FybigiXSIpOworCX0KKworCXVrX3ByX3dhcm4oIlxuIik7CiB9CiAKLWludCBm
b3JrKHZvaWQpCitpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmNvbnN0IGFyZ3Zb
XSwgY2hhciAqY29uc3QgZW52cFtdKQogewotCWVycm5vID0gRUFHQUlOOworCWV4ZWNfd2Fybihf
X2Z1bmNfXywgcGF0aCwgYXJndiwgZW52cCk7CisJZXJybm8gPSBFTk9TWVM7CiAJcmV0dXJuIC0x
OwogfQogCi1pbnQgZ2V0cGlkKHZvaWQpCitpbnQgZXhlY3YoY29uc3QgY2hhciAqcGF0aCwgY2hh
ciAqY29uc3QgYXJndltdKQogewotCXJldHVybiAxOworCWV4ZWNfd2FybihfX2Z1bmNfXywgcGF0
aCwgYXJndiwgTlVMTCk7CisJZXJybm8gPSBFTk9TWVM7CisJcmV0dXJuIC0xOwogfQogCi1waWRf
dCBnZXRwcGlkKHZvaWQpCitpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCiB7Ci0JcmV0
dXJuIDA7CisJdWtfcHJfd2FybigiJXM6ICVzXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CisJZXJy
bm8gPSBFTk9TWVM7CisJcmV0dXJuIC0xOwogfQogCi1pbnQga2lsbChpbnQgcGlkIF9fdW51c2Vk
LCBpbnQgc2lnIF9fdW51c2VkKQorRklMRSAqcG9wZW4oY29uc3QgY2hhciAqY29tbWFuZCwgY29u
c3QgY2hhciAqdHlwZSBfX3VudXNlZCkKIHsKLQllcnJubyA9IEVJTlZBTDsKLQlyZXR1cm4gLTE7
CisJdWtfcHJfd2FybigiJXM6ICVzXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CisJZXJybm8gPSBF
Tk9TWVM7CisJcmV0dXJuIE5VTEw7CiB9CiAKLWludCB0aW1lcyhzdHJ1Y3QgdG0gKmJ1ZiBfX3Vu
dXNlZCkKK2ludCBwY2xvc2UoRklMRSAqc3RyZWFtIF9fdW51c2VkKQogeworCWVycm5vID0gRUlO
VkFMOwogCXJldHVybiAtMTsKIH0KIAogaW50IHdhaXQoaW50ICpzdGF0dXMgX191bnVzZWQpCiB7
CisJLyogTm8gY2hpbGRyZW4gKi8KIAllcnJubyA9IEVDSElMRDsKIAlyZXR1cm4gLTE7CiB9CiAK
LWludCBzZXRwZ3JwKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGtpbGxwZyhpbnQg
cGdycCBfX3VudXNlZCwgaW50IHNpZyBfX3VudXNlZCkKK3BpZF90IHdhaXRwaWQocGlkX3QgcGlk
IF9fdW51c2VkLCBpbnQgKndzdGF0dXMgX191bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkKQog
ewotCXJldHVybiAwOworCS8qIE5vIGNoaWxkcmVuICovCisJZXJybm8gPSBFQ0hJTEQ7CisJcmV0
dXJuIC0xOwogfQogCi0KIHBpZF90IHdhaXQzKGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9w
dGlvbnMgX191bnVzZWQsCiAJCXN0cnVjdCBydXNhZ2UgKnJ1c2FnZSBfX3VudXNlZCkKIHsKLQly
ZXR1cm4gMDsKKwkvKiBObyBjaGlsZHJlbiAqLworCWVycm5vID0gRUNISUxEOworCXJldHVybiAt
MTsKIH0KIAogcGlkX3Qgd2FpdDQocGlkX3QgcGlkIF9fdW51c2VkLCBpbnQgKndzdGF0dXMgX191
bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkLAogCQlzdHJ1Y3QgcnVzYWdlICpydXNhZ2UgX191
bnVzZWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogTm8gY2hpbGRyZW4gKi8KKwllcnJubyA9IEVDSElM
RDsKKwlyZXR1cm4gLTE7CiB9CiAKLXBpZF90IHdhaXRwaWQocGlkX3QgcGlkIF9fdW51c2VkLCBp
bnQgKndzdGF0dXMgX191bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkKQoraW50IGdldHBpZCh2
b2lkKQogewotCXJldHVybiAwOworCXJldHVybiBVTklLUkFGVF9QSUQ7Cit9CisKK3BpZF90IGdl
dHBwaWQodm9pZCkKK3sKKwlyZXR1cm4gVU5JS1JBRlRfUFBJRDsKIH0KIAogcGlkX3Qgc2V0c2lk
KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogV2UgaGF2ZSBhIHNpbmdsZSAic2Vzc2lvbiIgd2l0
aCBhIHNpbmdsZSAicHJvY2VzcyIgKi8KKwllcnJubyA9IEVQRVJNOworCXJldHVybiAocGlkX3Qp
IC0xOwogfQogCi1waWRfdCBnZXRzaWQocGlkX3QgcGlkIF9fdW51c2VkKQorcGlkX3QgZ2V0c2lk
KHBpZF90IHBpZCkKIHsKLQlyZXR1cm4gMDsKKwlpZiAocGlkICE9IDApIHsKKwkJLyogV2Ugc3Vw
cG9ydCBvbmx5IGNhbGxzIGZvciB0aGUgb25seSBjYWxsaW5nICJwcm9jZXNzIiAqLworCQllcnJu
byA9IEVTUkNIOworCQlyZXR1cm4gKHBpZF90KSAtMTsKKwl9CisJcmV0dXJuIFVOSUtSQUZUX1NJ
RDsKIH0KIAotaW50IHNldHBnaWQocGlkX3QgcGlkIF9fdW51c2VkLCBwaWRfdCBwZ2lkIF9fdW51
c2VkKQoraW50IHNldHBnaWQocGlkX3QgcGlkLCBwaWRfdCBwZ2lkKQogeworCWlmIChwaWQgIT0g
MCkgeworCQkvKiBXZSBzdXBwb3J0IG9ubHkgY2FsbHMgZm9yIHRoZSBvbmx5IGNhbGxpbmcgInBy
b2Nlc3MiICovCisJCWVycm5vID0gRVNSQ0g7CisJCXJldHVybiAocGlkX3QpIC0xOworCX0KKwlp
ZiAocGdpZCAhPSAwKSB7CisJCS8qIFdlIGhhdmUgYSBzaW5nbGUgImdyb3VwIiB3aXRoIGEgc2lu
Z2xlICJwcm9jZXNzIiAqLworCQllcnJubyA9IEVQRVJNOworCQlyZXR1cm4gKHBpZF90KSAtMTsK
Kwl9CiAJcmV0dXJuIDA7CiB9CiAKIHBpZF90IGdldHBnaWQocGlkX3QgcGlkKQogewotCXJldHVy
biAwOworCWlmIChwaWQgIT0gMCkgeworCQkvKiBXZSBzdXBwb3J0IG9ubHkgY2FsbHMgZm9yIHRo
ZSBvbmx5IGNhbGxpbmcgInByb2Nlc3MiICovCisJCWVycm5vID0gRVNSQ0g7CisJCXJldHVybiAo
cGlkX3QpIC0xOworCX0KKwlyZXR1cm4gVU5JS1JBRlRfUEdJRDsKIH0KIAorcGlkX3QgZ2V0cGdy
cCh2b2lkKQoreworCXJldHVybiBVTklLUkFGVF9QR0lEOworfQogCi1pbnQgdGNzZXRwZ3JwKGlu
dCBmZCBfX3VudXNlZCwgcGlkX3QgcGdycCBfX3VudXNlZCkKK2ludCBzZXRwZ3JwKHZvaWQpCiB7
Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNldHBnaWQoMCwgMCk7CiB9CiAKLXBpZF90IHRjZ2V0cGdy
cChpbnQgZmQgX191bnVzZWQpCitpbnQgdGNzZXRwZ3JwKGludCBmZCBfX3VudXNlZCwgcGlkX3Qg
cGdycCkKIHsKKwkvKiBUT0RPIGNoZWNrIGlmIGZkIGlzIEJBREYgKi8KKwlpZiAocGdycCAhPSBV
TklLUkFGVF9QR0lEKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQogCXJl
dHVybiAwOwogfQogCitwaWRfdCB0Y2dldHBncnAoaW50IGZkKQoreworCS8qIFdlIGhhdmUgYSBz
aW5nbGUgInByb2Nlc3MgZ3JvdXAiICovCisJcmV0dXJuIFVOSUtSQUZUX1BHSUQ7Cit9CisKIGlu
dCBuaWNlKGludCBpbmMgX191bnVzZWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogV2UgZG9uJ3Qgc3Vw
cG9ydCBwcmlvcml0eSB1cGRhdGVzIGZvciB1bmlrZXJuZWxzICovCisJZXJybm8gPSBFUEVSTTsK
KwlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jCmluZGV4IDY4
MGJjYWYuLjNhZmMxNjggMTAwNjQ0Ci0tLSBhL3NpZ25hbC5jCisrKyBiL3NpZ25hbC5jCkBAIC0z
Miw2ICszMiw4IEBACiAgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJ
RklFRCBJTiBBTlkgV0FZLgogICovCiAKKyNpbmNsdWRlIDx1ay9wcm9jZXNzLmg+CisjaW5jbHVk
ZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KIAogaW50IHNpZ2FjdGlvbihpbnQgc2ln
IF9fdW51c2VkLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBhY3QgX191bnVzZWQs
CkBAIC01NCwzICs1NiwxOSBAQCBpbnQgc2lnaW50ZXJydXB0KGludCBzaWcgX191bnVzZWQsIGlu
dCBmbGFnIF9fdW51c2VkKQogewogCXJldHVybiAwOwogfQorCitpbnQga2lsbChpbnQgcGlkLCBp
bnQgc2lnIF9fdW51c2VkKQoreworCS8qIFRPRE8gY2hlY2sgc2lnICovCisJaWYgKHBpZCAhPSBV
TklLUkFGVF9QSUQpCisJCWVycm5vID0gRVNSQ0g7CisJcmV0dXJuIC0xOworfQorCitpbnQga2ls
bHBnKGludCBwZ3JwLCBpbnQgc2lnIF9fdW51c2VkKQoreworCS8qIFRPRE8gY2hlY2sgc2lnICov
CisJaWYgKHBncnAgIT0gVU5JS1JBRlRfUEdJRCkKKwkJZXJybm8gPSBFU1JDSDsKKwlyZXR1cm4g
LTE7Cit9CmRpZmYgLS1naXQgYS90aW1lLmMgYi90aW1lLmMKaW5kZXggOTRlODA5Ny4uNzZjNDU1
ZiAxMDA2NDQKLS0tIGEvdGltZS5jCisrKyBiL3RpbWUuYwpAQCAtMTYyLDMgKzE2Miw4IEBAIGlu
dCBjbG9ja19nZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQgX191bnVzZWQsIHN0cnVjdCB0aW1lc3Bl
YyAqdHAgX191bnVzZWQpCiAJdHAtPnR2X25zZWMgPSB1a2FyY2hfdGltZV9zdWJzZWMobm93KTsK
IAlyZXR1cm4gMDsKIH0KKworaW50IHRpbWVzKHN0cnVjdCB0bSAqYnVmIF9fdW51c2VkKQorewor
CXJldHVybiAtMTsKK30KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 13:31:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 13:31:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4mQP-0007J2-E5; Mon, 02 Sep 2019 13:31:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4mQN-0007Io-Ks
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 13:31:15 +0000
X-Inumbo-ID: ed3a661a-cd85-11e9-951b-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id ed3a661a-cd85-11e9-951b-bc764e2007e4;
 Mon, 02 Sep 2019 13:31:10 +0000 (UTC)
IronPort-SDR: tCSmcLUtkJujdpOhjdfL4a7wdhfFw+HPbvMG1VLHGu9IIVVEFim42kzfHF3PvSl826O1zFvD4k
 z/mpezJkapxw==
IronPort-PHdr: =?us-ascii?q?9a23=3Awh0DDBKeyJzee1xlhdmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfLvrxwZ3uMQTl6Ol3ixeRBMOHsqgC0rWO+P67EUU7or+5+EgYd5JNUx?=
 =?us-ascii?q?JXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQ?=
 =?us-ascii?q?viPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCejbb9oMRm7rxndusYXjIZsN6081g?=
 =?us-ascii?q?bHrnxUdupM2GhmP0iTnxHy5sex+J5s7SFdsO8/+sBDTKv3Yb02QaRXAzo6PW?=
 =?us-ascii?q?814tbrtQTYQguU+nQcSGQWnQFWDAXD8Rr3Q43+sir+tup6xSmaIcj7Rq06VD?=
 =?us-ascii?q?i+86tmTgLjhSEaPDA77W7XkNR9gqJFrhy8qRJxwInab4ObNPdlYq/RYckXSX?=
 =?us-ascii?q?ZbU8pNSyBMBJ63YYsVD+oGOOZVt5fwp1wVrRuiBAmsAv7kxDlVhn/uwK0xzu?=
 =?us-ascii?q?MsHh3B3Aw7A9IOsXLUoM/xNKcPSeC10bLFwinYb/9MwTf99ZPHfgo7ofGLRL?=
 =?us-ascii?q?99d9fax0o3Fw7dk1mdppHpMymW2+kNqWSX8fRsWOC1h2Mpsw19vzeiyto2ho?=
 =?us-ascii?q?TKho8Z0E7I+Ct3zYovONG1R1B3bNi5G5VKrS6aLZF5QsY6TmFtvyY116MJtI?=
 =?us-ascii?q?agfCgP1JQn3xnfa+Gbc4SQ4hLsSuKRITBgiXJ7fbKwnRey8Uy6xuLgTcm4yk?=
 =?us-ascii?q?5KrjdendXWrHAN0ATf6smBSvRj4keswSuD2g/O5u1eIk05lbDXJ4A/zrMyjJ?=
 =?us-ascii?q?Yev1zPHirsl0X3iK+WeF8k+u+t6+n/frrmoYScN5N1igH4KKguntG/AfwlMg?=
 =?us-ascii?q?UVQ2eb4v6w1KX+/ULiWrlKlPo2nrHDsJ/GPcQburK5AwhN34Ym6ha/CTam0N?=
 =?us-ascii?q?MDnXUeMV1KZgyHgJbtO1zVJPD4DOy/g0i3kDtxyPHJILvhDo/KLnjZn7frZa?=
 =?us-ascii?q?x95FJEyAov0dBf4IpZCr8fL/L3W0/xrMLXAgU5MwypwuboFNR925gYWW2RHq?=
 =?us-ascii?q?CZNLndvkSS6u0xPumGfJUVtyrlK/g5+/7uimc0mUQdfaazx5sYcna4Eu59I0?=
 =?us-ascii?q?qDZ3rsntcBHn0MvgUkSeznk1uCXiBPaHa2Ra0z/Ss3B5y7DY3bXICinKSB3D?=
 =?us-ascii?q?unHp1Rfm1GEVGMEXLvd4WCQfsMaz+SLdFnkj0FS7ehUZQs1RewuwDmz7poNP?=
 =?us-ascii?q?Hb9jcGupL+h5BJ4LjWlBcz8icxA8mD3mWlS2BvgnhOVzIwmqdlrh9T0FCGhI?=
 =?us-ascii?q?N/mOBZE5R3+utUGlMxMoXAzuo8D83qRyrKZZGRVVzgWNLwUmJ5dc4439JbOx?=
 =?us-ascii?q?U1IN6llB2Whyc=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DZBABdGG1d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYIBIqjR2jNAkBAQE6AQIBAYQ/AoMPOBMCAwgBAQUBAQEBAQYEAWyFOoI?=
 =?us-ascii?q?6IoJvBnkQPxJXGYMigg+qYYVKgzSBSYE0hx+GMT+JcoUWBJRqgR6WEQeCImI?=
 =?us-ascii?q?Ek2knmGaoFjghgVgzGoNfkQo9AQExgQYBAY8DAQE?=
X-IPAS-Result: =?us-ascii?q?A2DZBABdGG1d/wPjVY1lHQEBBQEHBQGBZ4NYIBIqjR2jN?=
 =?us-ascii?q?AkBAQE6AQIBAYQ/AoMPOBMCAwgBAQUBAQEBAQYEAWyFOoI6IoJvBnkQPxJXG?=
 =?us-ascii?q?YMigg+qYYVKgzSBSYE0hx+GMT+JcoUWBJRqgR6WEQeCImIEk2knmGaoFjghg?=
 =?us-ascii?q?VgzGoNfkQo9AQExgQYBAY8DAQE?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694326"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 16:31:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id ACE5E1A6022E;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id QmZ41Iv2uu-L; Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 85C671A60228;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 1WPAMdZmZRKB; Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 666951A6023C;
 Mon,  2 Sep 2019 16:31:06 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 16:31:03 +0300
Message-Id: <20190902133103.1990-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
References: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 2/2] Revisit pty.c functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu, sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWN0dWFsbHkgdGhlIG9wZW5wdHkoKSBhbmQgZm9ya3B0eSgpIHN0dWJzIHNob3VsZCByZXR1cm4g
ZXJyb3JzLCBiZWNhdXNlCm90aGVyd2lzZSB0aGUgY2FsbGVlIHdpbGwgdHJ5IHRvIHVzZSB0aGUg
YW1hc3RlciBhbmQgYXNsYXZlIGZpbGUgZGVzY3JpcHRvcnMKcmV0dXJuZWQgYnkgdGhlIGZ1bmN0
aW9ucy4KClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+
Ci0tLQogcHR5LmMgfCAxMSArKysrKysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9u
cygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9wdHkuYyBiL3B0eS5jCmluZGV4IDAw
OTY4OGQuLjA3MzQ2ZGUgMTAwNjQ0Ci0tLSBhL3B0eS5jCisrKyBiL3B0eS5jCkBAIC0zNSwyMCAr
MzUsMjMgQEAKICAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVE
IElOIEFOWSBXQVkuCiAgKi8KIAotI2luY2x1ZGUgPHB0eS5oPgotI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgogI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHB0eS5oPgogCiBpbnQgb3BlbnB0eShpbnQg
KmFtYXN0ZXIgX191bnVzZWQsIGludCAqYXNsYXZlIF9fdW51c2VkLCBjaGFyICpuYW1lIF9fdW51
c2VkLAogCQljb25zdCBzdHJ1Y3QgdGVybWlvcyAqdGVybXAgX191bnVzZWQsCiAJCWNvbnN0IHN0
cnVjdCB3aW5zaXplICp3aW5wIF9fdW51c2VkKQogewotCXJldHVybiAwOworCWVycm5vID0gRU5P
RU5UOworCXJldHVybiAtMTsKIH0KIAogcGlkX3QgZm9ya3B0eShpbnQgKmFtYXN0ZXIgX191bnVz
ZWQsIGNoYXIgKm5hbWUgX191bnVzZWQsCiAJCWNvbnN0IHN0cnVjdCB0ZXJtaW9zICp0ZXJtcCBf
X3VudXNlZCwKIAkJY29uc3Qgc3RydWN0IHdpbnNpemUgKndpbnAgX191bnVzZWQpCiB7Ci0JcmV0
dXJuIDA7CisJZXJybm8gPSBFTk9FTlQ7CisJcmV0dXJuIC0xOwogfQotLSAKMi4yMC4xCgoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 14:25:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 14:25:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4nGN-00040z-19; Mon, 02 Sep 2019 14:24:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=CEpj=W5=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i4nGM-00040s-I8
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 14:24:58 +0000
X-Inumbo-ID: 6ec93e70-cd8d-11e9-aea3-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6ec93e70-cd8d-11e9-aea3-12813bfff9fa;
 Mon, 02 Sep 2019 14:24:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2F119F2021;
 Mon,  2 Sep 2019 16:24:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id WyW2qQ4uiDnC; Mon,  2 Sep 2019 16:24:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EFB6DF2006
 for <minios-devel@lists.xen.org>; Mon,  2 Sep 2019 16:24:51 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 2 Sep 2019
 16:24:51 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Mon, 2 Sep 2019 16:24:51
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>, Simon Kuenzer
 <simon.kuenzer@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v3 2/2] Initial port of
 the libuuid library (version 1.0.3).
Thread-Index: AQHVQigJDSiDPhmifkGluA0jIkr9VKcT7NuAgAREgACAAH6xgA==
Date: Mon, 2 Sep 2019 14:24:51 +0000
Message-ID: <744BFBE7-7A64-4927-9938-576FFD904CE7@neclab.eu>
References: <20190724135924.23991-1-felipe.huici@neclab.eu>
 <20190724135924.23991-3-felipe.huici@neclab.eu>
 <97b988e5-fc68-d3d4-2afc-a28252f30577@neclab.eu>
 <4ad2857d-7de9-4018-b9bf-a6b8c64f070f@neclab.eu>
In-Reply-To: <4ad2857d-7de9-4018-b9bf-a6b8c64f070f@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <F75D67AA9A5FD34A842975A5D2EF62E4@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v3 2/2] Initial port of
 the libuuid library (version 1.0.3).
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sIFNoYXJhbiwNCg0K77u/T24gMDIuMDkuMTksIDEwOjUxLCAiU2hhcmFuIFNhbnRo
YW5hbSIgPFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIA0KICAgIE9u
IDgvMzAvMTkgNTo0MSBQTSwgU2ltb24gS3VlbnplciB3cm90ZToNCiAgICA+IE9uIDI0LjA3LjE5
IDE1OjU5LCBGZWxpcGUgSHVpY2kgd3JvdGU6DQogICAgPj4gTm90ZSBuZXdsaWIgaXMgcmVxdWly
ZWQuDQogICAgPj4NCiAgICA+PiBTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5o
dWljaUBuZWNsYWIuZXU+DQogICAgPj4gLS0tDQogICAgPj4gICBDb25maWcudWsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICsNCiAgICA+PiAgIE1ha2VmaWxlLnVr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMjYgDQogICAgPj4gKysrKysr
KysrKysrKysrKysrKysrKysrKw0KICAgID4+ICAgZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAxNyArKysrDQogICAgPj4gICBpbmNsdWRlL2NvbmZpZy5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDc3ICsrKysrKysrKysrKysrKw0KICAg
ID4+ICAgcGF0Y2hlcy8wMDAxLWFkZC1zeXNjYWxsLWgtY29tcGlsZS1ndWFyZC5wYXRjaCB8ICAx
MiArKysNCiAgICA+PiAgIDUgZmlsZXMgY2hhbmdlZCwgMjM3IGluc2VydGlvbnMoKykNCiAgICA+
PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsNCiAgICA+PiAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBNYWtlZmlsZS51aw0KICAgID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMu
dWsNCiAgICA+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2NvbmZpZy5oDQogICAgPj4g
ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLWFkZC1zeXNjYWxsLWgtY29tcGlsZS1n
dWFyZC5wYXRjaA0KICAgID4+DQogICAgPj4gZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZp
Zy51aw0KICAgID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPj4gaW5kZXggMDAwMDAwMC4u
ZTUyODcwYQ0KICAgID4+IC0tLSAvZGV2L251bGwNCiAgICA+PiArKysgYi9Db25maWcudWsNCiAg
ICA+PiBAQCAtMCwwICsxLDUgQEANCiAgICA+PiArbWVudWNvbmZpZyBMSUJVVUlEDQogICAgPj4g
KyAgICAgICBib29sICJsaWJ1dWlkIC0gbGlicmFyeSBmb3IgdW5pcXVlIGlkIGdlbmVyYXRpb24i
DQogICAgPj4gKyAgICAgICBkZWZhdWx0IG4NCiAgICA+PiArICAgICAgICAgICBkZXBlbmRzIG9u
IEhBVkVfTElCQw0KICAgID4+ICsgICAgICAgICAgIHNlbGVjdCBVS1VOSVNURA0KICAgID4+IGRp
ZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrDQogICAgPj4gbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICA+PiBpbmRleCAwMDAwMDAwLi40ZjY2ODU3DQogICAgPj4gLS0tIC9kZXYv
bnVsbA0KICAgID4+ICsrKyBiL01ha2VmaWxlLnVrDQogICAgPj4gQEAgLTAsMCArMSwxMjYgQEAN
CiAgICA+PiArIyAgbGlidXVpZCBNYWtlZmlsZS51Yw0KICAgID4+ICsjDQogICAgPj4gKyMgIEF1
dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCiAgICA+PiArIw0K
ICAgID4+ICsjDQogICAgPj4gKyMgIENvcHlyaWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQu
LCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgDQogICAgPj4gcmVzZXJ2ZWQuDQogICAgPj4g
KyMNCiAgICA+PiArIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogICAgPj4gKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KICAgID4+ICsj
ICBhcmUgbWV0Og0KICAgID4+ICsjDQogICAgPj4gKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgPj4gKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4NCiAgICA+PiArIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICA+PiArIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIA0KICAgID4+
IGluIHRoZQ0KICAgID4+ICsjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgDQogICAgPj4gZGlzdHJpYnV0aW9uLg0KICAgID4+ICsjICAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzDQogICAgPj4gKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgDQogICAgPj4gZGVyaXZlZCBmcm9tDQogICAgPj4gKyMgICAg
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
DQogICAgPj4gKyMNCiAgICA+PiArIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIA0KICAgID4+IENPTlRSSUJVVE9SUyAiQVMgSVMiDQogICAg
Pj4gKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIA0KICAgID4+IFRPLCBUSEUNCiAgICA+PiArIyAgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSANCiAgICA+PiBQQVJU
SUNVTEFSIFBVUlBPU0UNCiAgICA+PiArIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIA0KICAgID4+IENPTlRSSUJVVE9SUyBCRQ0KICAg
ID4+ICsjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SDQogICAgPj4gKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQogICAgPj4gKyMgIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiANCiAgICA+PiBCVVNJTkVTUw0KICAgID4+ICsjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgDQogICAgPj4gV0hFVEhFUiBJ
Tg0KICAgID4+ICsjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgDQogICAgPj4gT1RIRVJXSVNFKQ0KICAgID4+ICsjICBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiANCiAg
ICA+PiBBRFZJU0VEIE9GIFRIRQ0KICAgID4+ICsjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4NCiAgICA+PiArIw0KICAgID4+ICsjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RF
RCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLg0KICAgID4+ICsjDQogICAgPj4gKw0KICAgID4+ICsj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyANCiAgICA+Pg0KICAgID4+ICsjIExpYnJhcnkgcmVnaXN0
cmF0aW9uDQogICAgPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4g
KyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidXVpZCwkKENPTkZJR19MSUJVVUlEKSkpDQogICAg
Pj4gKw0KICAgID4+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyANCiAgICA+Pg0KICAgID4+ICsj
IFNvdXJjZXMNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgDQogICAgPj4NCiAgICA+
PiArTElCVVVJRF9WRVJTSU9OPTEuMC4zDQogICAgPj4gK0xJQlVVSURfVVJMPWh0dHBzOi8vc291
cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnV1aWQvZmlsZXMvbGlidXVpZC0kKExJQlVVSURfVkVS
U0lPTikudGFyLmd6L2Rvd25sb2FkIA0KICAgID4+DQogICAgPj4gK0xJQlVVSURfUEFUQ0hESVI9
JChMSUJVVUlEX0JBU0UpL3BhdGNoZXMNCiAgICA+PiArJChldmFsICQoY2FsbCBmZXRjaGFzLGxp
YnV1aWQsJChMSUJVVUlEX1VSTCksJChMSUJVVUlEX1ZFUlNJT04pLnRneikpDQogICAgPj4gKyQo
ZXZhbCAkKGNhbGwgDQogICAgPj4gcGF0Y2gsbGlidXVpZCwkKExJQlVVSURfUEFUQ0hESVIpLGxp
YnV1aWQtJChMSUJVVUlEX1ZFUlNJT04pKSkNCiAgICA+PiArDQogICAgPj4gKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4gKyMgSGVscGVycw0KICAgID4+ICsjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyANCiAgICA+Pg0KICAgID4+ICtMSUJVVUlEX1NVQkRJUj1saWJ1dWlk
LSQoTElCVVVJRF9WRVJTSU9OKQ0KICAgID4+ICtMSUJVVUlEX1NSQz0kKExJQlVVSURfT1JJR0lO
KS8kKExJQlVVSURfU1VCRElSKQ0KICAgID4+ICsNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMgDQogICAgPj4NCiAgICA+PiArIyBMaWJyYXJ5IGluY2x1ZGVzDQogICAgPj4gKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4gKyMgUHV0IHB1YmxpYyBoZWFkZXJz
ICh1dWlkLmgpIGluIGEgcHVibGljIGZvbGRlciBhbmQgZXhwb3J0IHRoZW0gDQogICAgPj4gZ2xv
YmFsbHkuIFRoZQ0KICAgID4+ICsjIHByZXBhcmUgc3RlcCBiZWxvdyB0YWtlcyBjYXJlIG9mIHBv
cHVsYXRpbmcgdGhlIGZvbGRlci4NCiAgICA+PiArJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsbGli
dXVpZC9pbmNsdWRlL3B1YmxpYykNCiAgICA+PiArQ0lOQ0xVREVTLSQoQ09ORklHX0xJQlVVSUQp
ICs9IC1JJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3B1YmxpYw0KICAgID4+ICsNCiAgICA+PiAr
IyBQdXQgcHJpdmF0ZSBoZWFkZXJzICh0aGUgZ2x1ZSdzIGNvbmZpZy5oLCBhbmQgdXVpZCdzIG5v
bi11dWlkLmggDQogICAgPj4gaGVhZGVycykNCiAgICA+PiArIyBpbiBhIHByaXZhdGUgZm9sZGVy
IGFuZCBleHBvcnQgdGhhdCBvbmx5IGxvY2FsbHkgdG8gbGlidXVpZC4gVGhlIA0KICAgID4+IHBy
ZXBhcmUNCiAgICA+PiArIyBzdGVwIGJlbG93IHRha2VzIGNhcmUgb2YgcG9wdWxhdGluZyB0aGUg
Zm9sZGVyDQogICAgPj4gKyQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGxpYnV1aWQvaW5jbHVkZS9w
cml2YXRlKQ0KICAgID4+ICtMSUJVVUlEX0NJTkNMVURFUy15ICs9IC1JJChMSUJVVUlEX0JVSUxE
KS9pbmNsdWRlL3ByaXZhdGUNCiAgICA+PiArDQogICAgPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIA0KICAgID4+DQogICAgPj4gKyMgR2xvYmFsIGZsYWdzDQogICAgPj4gKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4gK0xJQlVVSURfQ0ZMQUdTLXkgKz0gLURIQVZF
X0NPTkZJR19IDQogICAgPj4gKw0KICAgID4+ICsjIFN1cHByZXNzIHNvbWUgd2FybmluZ3MgdG8g
bWFrZSB0aGUgYnVpbGQgcHJvY2VzcyBsb29rIG5lYXRlcg0KICAgID4+ICtMSUJVVUlEX1NVUFBS
RVNTX0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlciANCiAgICA+PiAtV25vLXVudXNlZC12
YXJpYWJsZSAgICAgICAgICAgIFwNCiAgICA+PiArLVduby1ub25udWxsIC1Xbm8tdW51c2VkLWJ1
dC1zZXQtdmFyaWFibGUgLVduby11bnVzZWQtbGFiZWwgDQogICAgPj4gLVduby1jaGFyLXN1YnNj
cmlwdHNcDQogICAgPj4gKy1Xbm8tdW51c2VkLWZ1bmN0aW9uIC1Xbm8tbWlzc2luZy1maWVsZC1p
bml0aWFsaXplcnMgDQogICAgPj4gLVduby11bmluaXRpYWxpemVkICAgICAgICAgXA0KICAgID4+
ICstV25vLW1heWJlLXVuaW5pdGlhbGl6ZWQgLVduby1wb2ludGVyLXNpZ24gDQogICAgPj4gLVdu
by11bnVzZWQtdmFsdWUgICAgICAgICAgICAgICAgICAgIFwNCiAgICA+PiArLVduby11bnVzZWQt
bWFjcm9zIC1Xbm8tcGFyZW50aGVzZXMgDQogICAgPj4gLVduby1pbXBsaWNpdC1mdW5jdGlvbi1k
ZWNsYXJhdGlvbiAgICAgICAgICBcDQogICAgPj4gKy1Xbm8tbWlzc2luZy1icmFjZXMgLVduby1l
bmRpZi1sYWJlbHMgDQogICAgPj4gLVduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZSAgICAgICAg
ICAgICAgXA0KICAgID4+ICstV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uDQogICAg
Pj4gKw0KICAgID4+ICtMSUJVVUlEX0NGTEFHUy15ICAgKz0gJChMSUJVVUlEX1NVUFBSRVNTX0ZM
QUdTKQ0KICAgID4+ICtMSUJVVUlEX0NYWEZMQUdTLXkgKz0gJChMSUJVVUlEX1NVUFBSRVNTX0ZM
QUdTKQ0KICAgID4+ICsNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgDQogICAgPj4N
CiAgICA+PiArIyBTb3VyY2VzDQogICAgPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KICAg
ID4+DQogICAgPj4gK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL2NsZWFyLmMNCiAg
ICA+PiArTElCVVVJRF9TUkNTLXkgKz0gJChMSUJVVUlEX1NSQykvY29weS5jDQogICAgPj4gK0xJ
QlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL2lzbnVsbC5jDQogICAgPj4gK0xJQlVVSURf
U1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL3BhcnNlLmMNCiAgICA+PiArTElCVVVJRF9TUkNTLXkg
Kz0gJChMSUJVVUlEX1NSQykvdW5wYXJzZS5jDQogICAgPj4gK0xJQlVVSURfU1JDUy15ICs9ICQo
TElCVVVJRF9TUkMpL2NvbXBhcmUuYw0KICAgID4+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVV
SURfU1JDKS9nZW5fdXVpZC5jDQogICAgPj4gK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9T
UkMpL3BhY2suYw0KICAgID4+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS9yYW5k
dXRpbHMuYw0KICAgID4+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS91bnBhY2su
Yw0KICAgID4+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS91dWlkX3RpbWUuYw0K
ICAgID4+ICsNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgDQogICAgPj4NCiAgICA+
PiArIyBMaWItc3BlY2lmaWMgVGFyZ2V0cw0KICAgID4+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyANCiAgICA+Pg0KICAgID4+ICskKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHVibGljLyUuaDog
JChMSUJVVUlEX1NSQykvJS5oDQogICAgPj4gKyAgICAkKGNhbGwgYnVpbGRfY21kLExOLGxpYnV1
aWQsJEAsXA0KICAgID4+ICsgICAgbG4gLXNmICQ8ICRAKQ0KICAgID4+ICsNCiAgICA+PiArJChM
SUJVVUlEX0JVSUxEKS9pbmNsdWRlL3ByaXZhdGUvJS5oOiAkKExJQlVVSURfU1JDKS8lLmgNCiAg
ICA+PiArICAgICQoY2FsbCBidWlsZF9jbWQsTE4sbGlidXVpZCwkQCxcDQogICAgPj4gKyAgICBs
biAtc2YgJDwgJEApDQogICAgPg0KICAgID4gSWYgeW91IGp1c3QgdHlwZSAibWFrZSIsIEkgbm90
aWNlZCB0aGF0IHRoaXMgd2lsZGNhcmQgcnVsZXMgZ2V0IA0KICAgID4gZXhlY3V0ZWQgYmVmb3Jl
IHRoZSBhcmNoaXZlIGlzIGV4dHJhY3RlZC4gSSBnb3QgaXQgc29sdmVkIGJ5IGFkZGluZyANCiAg
ICA+IHRoZSBmb2xsb3dpbmcgcnVsZSB0byBzdGF0ZSB0aGUgZGVwZW5kZW5jeToNCiAgICA+DQog
ICAgPiAkKExJQlVVSURfU1JDKS8lLmg6ICQoTElCVVVJRF9CVUlMRCkvLm9yaWdpbg0KICAgID4g
ICAgIEAjIGVtcHR5IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBleHRy
YWN0aW9uDQogICAgV291bGQgcmVjb21tZW5kIHVzaW5nIEA6IGluc3RlYWQgb2YgQCMuIFRoaXMg
cmVwcmVzZW50IGEgbm9vcA0KICAgID4NCiAgICA+IEF0IHRoaXMgcG9pbnQgSSBoYXZlIG5vIGNs
dWUgd2h5IHRoaXMgb25seSB3b3JrcyB3aXRoIGEgZmlsbGVkLW91dCANCiAgICA+IHJlY2lwZSwg
ZXZlbiBpZiBpdCBpcyBub24tc2Vuc2UuIEl0IGxvb2tzIGxpa2UgdGhhdCBNYWtlIGlzIGRvaW5n
IHNvbWUgDQogICAgPiBtYWdpYyBpbnRlcm5hbCBzaW1wbGlmaWNhdGlvbiBpZiB5b3Ugc3RhdGUg
dGhlIGRlcGVuZGVuY3kgd2l0aG91dCByZWNpcGUuDQoNCk9rLCB0aGFua3MsIHdpbGwgYWRkIHRo
ZSBydWxlIHdpdGgganVzdCBAIC4NCg0KICAgID4NCiAgICA+PiArDQogICAgPj4gKyQoTElCVVVJ
RF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlL2NvbmZpZy5oOiANCiAgICA+PiAkKExJQlVVSURfQkFT
RSkvaW5jbHVkZS9jb25maWcuaA0KICAgID4+ICsgICAgJChjYWxsIGJ1aWxkX2NtZCxMTixsaWJ1
dWlkLCRALFwNCiAgICA+PiArICAgIGxuIC1zZiAkPCAkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUv
cHJpdmF0ZS9jb25maWcuaCkNCiAgICA+PiArDQogICAgPj4gKyMgcHVibGljIGhlYWRlcnMNCiAg
ICA+PiArVUtfUFJFUEFSRSArPSAkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHVibGljL3V1aWQu
aA0KICAgID4+ICsNCiAgICA+PiArIyBwcml2YXRlIGhlYWRlcnMNCiAgICA+PiArVUtfUFJFUEFS
RSArPSAkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHJpdmF0ZS9hbGwtaW8uaA0KICAgID4+ICtV
S19QUkVQQVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlL2MuaA0KICAgID4+
ICtVS19QUkVQQVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlL3JhbmR1dGls
cy5oDQogICAgPj4gK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3ByaXZh
dGUvdXVpZGQuaA0KICAgID4+ICtVS19QUkVQQVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVk
ZS9wcml2YXRlL3V1aWRQLmgNCiAgICA+PiArVUtfUFJFUEFSRSArPSAkKExJQlVVSURfQlVJTEQp
L2luY2x1ZGUvcHJpdmF0ZS9jb25maWcuaA0KICAgID4+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQ0KICAgID4+IGRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51aw0K
ICAgID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPj4gaW5kZXggMDAwMDAwMC4uMGM2MjI3
MQ0KICAgID4+IC0tLSAvZGV2L251bGwNCiAgICA+PiArKysgYi9leHBvcnRzeW1zLnVrDQogICAg
Pj4gQEAgLTAsMCArMSwxNyBAQA0KICAgID4+ICt1dWlkX2NsZWFyDQogICAgPj4gK3V1aWRfY29t
cGFyZQ0KICAgID4+ICt1dWlkX2NvcHkNCiAgICA+PiArdXVpZF9nZW5lcmF0ZQ0KICAgID4+ICt1
dWlkX2dlbmVyYXRlX3JhbmRvbQ0KICAgID4+ICt1dWlkX2dlbmVyYXRlX3RpbWUNCiAgICA+PiAr
dXVpZF9nZW5lcmF0ZV90aW1lX3NhZmUNCiAgICA+PiArdXVpZF9pc19udWxsDQogICAgPj4gK3V1
aWRfcGFjaw0KICAgID4+ICt1dWlkX3BhcnNlDQogICAgPj4gK3V1aWRfdGltZQ0KICAgID4+ICt1
dWlkX3R5cGUNCiAgICA+PiArdXVpZF91bnBhY2sNCiAgICA+PiArdXVpZF91bnBhcnNlDQogICAg
Pj4gK3V1aWRfdW5wYXJzZV9sb3dlcg0KICAgID4+ICt1dWlkX3VucGFyc2VfdXBwZXINCiAgICA+
PiArdXVpZF92YXJpYW50DQogICAgPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlnLmggYi9p
bmNsdWRlL2NvbmZpZy5oDQogICAgPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+PiBpbmRl
eCAwMDAwMDAwLi4xOTg0MGFkDQogICAgPj4gLS0tIC9kZXYvbnVsbA0KICAgID4+ICsrKyBiL2lu
Y2x1ZGUvY29uZmlnLmgNCiAgICA+PiBAQCAtMCwwICsxLDc3IEBADQogICAgPj4gKy8qIGNvbmZp
Zy5oLiAgR2VuZXJhdGVkIGZyb20gY29uZmlnLmguaW4gYnkgbGlidXVpZCdzIGNvbmZpZ3VyZS4g
ICovDQogICAgPj4gKy8qIGNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFj
IGJ5IGF1dG9oZWFkZXIuICAqLw0KICAgID4+ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICA+PiArI2RlZmluZSBI
QVZFX0ZDTlRMX0ggMQ0KICAgID4+ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBmdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfRlRS
VU5DQVRFIDENCiAgICA+PiArDQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0dGltZW9mZGF5JyBmdW5jdGlvbi4gKi8NCiAgICA+PiArI2RlZmluZSBIQVZFX0dFVFRJ
TUVPRkRBWSAxDQogICAgPj4gKw0KICAgID4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfSU5U
VFlQRVNfSCAxDQogICAgPj4gKw0KICAgID4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICA+PiArI2RlZmluZSBIQVZFX0xJTUlU
U19IIDENCiAgICA+PiArDQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfTUVNT1JZX0gg
MQ0KICAgID4+ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1z
ZXQnIGZ1bmN0aW9uLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfTUVNU0VUIDENCiAgICA+PiAr
DQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBo
ZWFkZXIgZmlsZS4gKi8NCiAgICA+PiArI2lmZGVmICQoSEFWRV9OV19TVEFDSykNCiAgICA+PiAr
I2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAxDQogICAgPj4gKyNlbmRpZg0KICAgID4+ICsNCiAg
ICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0aW9uLiAq
Lw0KICAgID4+ICsjaWZkZWYgJChIQVZFX05XX1NUQUNLKQ0KICAgID4+ICsjZGVmaW5lIEhBVkVf
U09DS0VUIDENCiAgICA+PiArI2VuZGlmDQogICAgPj4gKw0KICAgID4+ICsvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHNyYW5kb20nIGZ1bmN0aW9uLiAqLw0KICAgID4+ICsjZGVmaW5l
IEhBVkVfU1JBTkRPTSAxDQogICAgPj4gKw0KICAgID4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICA+PiArI2RlZmluZSBIQVZF
X1NURElOVF9IIDENCiAgICA+PiArDQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfU1RE
TElCX0ggMQ0KICAgID4+ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfU1RSSU5H
U19IIDENCiAgICA+PiArDQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfU1RSSU5HX0gg
MQ0KICAgID4+ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0
b3VsJyBmdW5jdGlvbi4gKi8NCiAgICA+PiArI2RlZmluZSBIQVZFX1NUUlRPVUwgMQ0KICAgID4+
ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmlsZS5oPiBo
ZWFkZXIgZmlsZS4gKi8NCiAgICA+PiArI2RlZmluZSBIQVZFX1NZU19GSUxFX0ggMQ0KICAgID4+
ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvaW9jdGwuaD4g
aGVhZGVyIGZpbGUuICovDQogICAgPj4gKyNkZWZpbmUgSEFWRV9TWVNfSU9DVExfSCAxDQogICAg
Pj4gKw0KICAgID4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zb2NrZXQu
aD4gaGVhZGVyIGZpbGUuICovDQogICAgPj4gKyNpZmRlZiAkKEhBVkVfTldfU1RBQ0spDQogICAg
Pj4gKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMQ0KICAgID4+ICsjZW5kaWYNCiAgICA+PiAr
DQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVh
ZGVyIGZpbGUuICovDQogICAgPj4gKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDENCiAgICA+PiAr
DQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVh
ZGVyIGZpbGUuICovDQogICAgPj4gKyNkZWZpbmUgSEFWRV9TWVNfVElNRV9IIDENCiAgICA+PiAr
DQogICAgPj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhl
YWRlciBmaWxlLiAqLw0KICAgID4+ICsjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQ0KICAgID4+
ICsNCiAgICA+PiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVh
ZGVyIGZpbGUuICovDQogICAgPj4gKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxDQogICAgPj4gKw0K
ICAgID4+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVzbGVlcCcgZnVuY3Rpb24u
ICovDQogICAgPj4gKyNkZWZpbmUgSEFWRV9VU0xFRVAgMQ0KICAgID4+IGRpZmYgLS1naXQgYS9w
YXRjaGVzLzAwMDEtYWRkLXN5c2NhbGwtaC1jb21waWxlLWd1YXJkLnBhdGNoIA0KICAgID4+IGIv
cGF0Y2hlcy8wMDAxLWFkZC1zeXNjYWxsLWgtY29tcGlsZS1ndWFyZC5wYXRjaA0KICAgID4+IG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPj4gaW5kZXggMDAwMDAwMC4uYWRlYTY2YQ0KICAgID4+
IC0tLSAvZGV2L251bGwNCiAgICA+PiArKysgYi9wYXRjaGVzLzAwMDEtYWRkLXN5c2NhbGwtaC1j
b21waWxlLWd1YXJkLnBhdGNoDQogICAgPj4gQEAgLTAsMCArMSwxMiBAQA0KICAgID4+ICstLS0g
YS9yYW5kdXRpbHMuYyAgICAyMDE5LTA0LTAzIDE0OjQ2OjE0LjgyNzY4MjQ4NSArMDIwMA0KICAg
ID4+ICsrKysgYi9yYW5kdXRpbHMuYyAgICAyMDE5LTA0LTAzIDE0OjQ2OjQ4LjM3NTI4Njk1MCAr
MDIwMA0KICAgID4+ICtAQCAtMTMsNyArMTMsOSBAQA0KICAgID4+ICsgI2luY2x1ZGUgPHN0cmlu
Zy5oPg0KICAgID4+ICsgI2luY2x1ZGUgPHN5cy90aW1lLmg+DQogICAgPj4gKw0KICAgID4+ICsr
I2lmZGVmIERPX0pSQU5EX01JWA0KICAgID4+ICsgI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+DQog
ICAgPj4gKysjZW5kaWYNCiAgICA+PiArDQogICAgPj4gKyAjaW5jbHVkZSAicmFuZHV0aWxzLmgi
DQogICAgPj4gKw0KICAgID4+DQogICAgPg0KICAgID4gX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18NCiAgICA+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QN
CiAgICA+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgID4gaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KICAgIA0K
DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 15:06:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 15:06:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4nuy-0008WL-JD; Mon, 02 Sep 2019 15:06:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4nuy-0008WG-0N
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 15:06:56 +0000
X-Inumbo-ID: 4b4e1dd4-cd93-11e9-b95f-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 4b4e1dd4-cd93-11e9-b95f-bc764e2007e4;
 Mon, 02 Sep 2019 15:06:52 +0000 (UTC)
IronPort-SDR: awrvrZi4MwkoTCJCKdmetWjYTkgyHuIrHpAKuux508bHp6pv7mtz5oq0xxRaFksCyuJ3UAigfQ
 W40UXwO4M7GA==
IronPort-PHdr: =?us-ascii?q?9a23=3A81VBFBR5q5NrClelL2JrQ0ZJwdpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6yZxKN2/xhgRfzUJnB7Loc0qyK6vqmADNYqsbY+Fk5M7V0Hy?=
 =?us-ascii?q?cfjssXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFR?=
 =?us-ascii?q?rwLxd6KfroEYDOkcu3y/qy+5rOaAlUmTaxe7x/IAiooQnLq8Ubg5duJqkyxx?=
 =?us-ascii?q?fUv3BFZ/lYyWR0KFyJgh3y/N2w/Jlt8yRRv/Iu6ctNWrjkcqo7ULJVEi0oP3?=
 =?us-ascii?q?g668P3uxbDSxCP5mYHXWUNjhVIGQnF4wrkUZr3ryD3q/By2CiePc3xULA0RT?=
 =?us-ascii?q?Gv5LplRRP0lCsKMSMy/WfKgcJyka1bugqsqRxhzYDJbo+bN/1wc7jBcd8GX2?=
 =?us-ascii?q?dNQtxcWzBdDo66coABD/ABPeFdr4TluVYOqgC+BRWtBOPp1zRGgGL23bUn0+?=
 =?us-ascii?q?88FgzJwAsgH8kSsHTVqtX5LqMSUf2tzKnV1jjMc+hW1S3l6IjVaR8tu+uMXb?=
 =?us-ascii?q?VpfMfX1EIhFBvFg02NpYHqIj+ZzOcAvmiB4+Z+S+6iiXQrpg9prjSyycogl5?=
 =?us-ascii?q?PFi4EVx1ze6yl0zog4KcelREN0f9KpFoZbuTuAOItsWMwiRnlluCM9yrIbp5?=
 =?us-ascii?q?G2ZDMKyJE7xx7HbPyHbpSI7grjVOmPJTd4g2poeKy6hxmo8EigzvfwWdWv0F?=
 =?us-ascii?q?pQtipFj8LDumoX1xzU8sSHS/198Vm92TuXygze5fxILVo3mKfbMZIt3KA8m5?=
 =?us-ascii?q?gJvUnNBiP2nV/5jK6SdkUq4Oio7OHnb636qZ+bLI90lgD+MqI0lsy7HOQ4Kh?=
 =?us-ascii?q?UOUnOH9uSnzrHj5VD5T65Qgv0slanVqIraKtgDpq6lHw9V1Z4u6xO+Dzeg0d?=
 =?us-ascii?q?QYmmIHIEtYdx2ZkYjmJVXOLev8Dfe+mFSsjCxry+rJP7L/BJXBNH/DkK3ufb?=
 =?us-ascii?q?xl8U5T1BIzzcxD55JTErwBPvbzVVXsu9PAFBA5NRG7w/z5B9V8zI8RQniADb?=
 =?us-ascii?q?KeMKPTrF+F/fkvI/WRZIAIojryMeQq5+X0gX8kgV8SZrOl3YEQaCPwIvMzJk?=
 =?us-ascii?q?SfYH33x9sMD2oOlg4/V/Dxzk2PV3hUfXnhcbg742QQD5m6DIGLYp21nfTV1y?=
 =?us-ascii?q?CgApxQIGRbEk2kGmyub5iOHe0LPnHBavR9myAJAODyA7Qq0guj4Vf3?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DWFQCkLm1d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZwKDA1MgEiqMP16hOoF6CQEBASkRAQIBAYQ/gxE8Ag0CAwgBAQUBAQEBAQY?=
 =?us-ascii?q?EAWyFLgyCOiKDbk+EJAGCDqsIhUqDPoFJgTQBhx6GMT+IboEEhRYElgiWEQe?=
 =?us-ascii?q?CImIEhg2NXCeCIwF+lUSoFk8KgVgzGoNfCYIOAYwWglw9AQExgQYBAYwvglQ?=
 =?us-ascii?q?BAQ?=
X-IPAS-Result: =?us-ascii?q?A2DWFQCkLm1d/wPjVY1lHQEBBQEHBQGBZwKDA1MgEiqMP?=
 =?us-ascii?q?16hOoF6CQEBASkRAQIBAYQ/gxE8Ag0CAwgBAQUBAQEBAQYEAWyFLgyCOiKDb?=
 =?us-ascii?q?k+EJAGCDqsIhUqDPoFJgTQBhx6GMT+IboEEhRYElgiWEQeCImIEhg2NXCeCI?=
 =?us-ascii?q?wF+lUSoFk8KgVgzGoNfCYIOAYwWglw9AQExgQYBAYwvglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694509"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 18:06:50 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 8A6951A6022E;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id y44tbGHYiFu7; Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6E9F61A6023F;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id bKu9Aek_ms41; Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 4B61D1A60228;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 18:06:44 +0300
Message-Id: <20190902150646.2118-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 0/2] Changes for supporting
 Python 3
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBzZXJpZXMgbWFrZSBvbmx5IHNvbWUgc21hbGwgaW1wcm92ZW1lbnRzIG9uIHN5c2xvZy5j
CgpDb3N0aW4gTHVwdSAoMik6CiAgc3lzbG9nLmM6IEJyaW5nIGJhY2sgc2V0bG9nbWFzaygpIGZy
b20gbXVzbAogIHN5c2xvZy5jOiBGaXggZmlsZSBsb2NhdGlvbgoKIE1ha2VmaWxlLnVrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQogbXVzbC1pbXBvcnRlZC9zcmMveyA9PiBtaXNj
fS9zeXNsb2cuYyB8IDE2ICsrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5z
ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogcmVuYW1lIG11c2wtaW1wb3J0ZWQvc3JjL3sgPT4g
bWlzY30vc3lzbG9nLmMgKDk0JSkKCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 15:06:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 15:06:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4nv0-000055-Kb; Mon, 02 Sep 2019 15:06:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4nv0-0008WT-4o
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 15:06:58 +0000
X-Inumbo-ID: 4d9f1e6c-cd93-11e9-aea3-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 4d9f1e6c-cd93-11e9-aea3-12813bfff9fa;
 Mon, 02 Sep 2019 15:06:56 +0000 (UTC)
IronPort-SDR: M+JtYXOFGhHbsTiQQ2BjkuCa08OE0B9BaFjJLzEEwoVfpr+Zup7261AKdjRTawMyPQ7CyZjn/S
 FHUbQL8ygONA==
IronPort-PHdr: =?us-ascii?q?9a23=3A4JmqNRYIyHFbLuCe2GFa5Ev/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZr8i6bnLW6fgltlLVR4KTs6sC17OM9fm/ASdQuN6oizMrSNR0TR?=
 =?us-ascii?q?gLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ?=
 =?us-ascii?q?/iOgVrO+/7BpDdj9it1+C15pbffxhEiCCybL9vMhm6txjdu8sKjYdtKas91w?=
 =?us-ascii?q?bCr2dVdehR2W5mP0+YkQzm5se38p5j8iBQtOwk+sVdT6j0fLk2QKJBAjg+PG?=
 =?us-ascii?q?87+MPktR/YTQuS/XQcSXkZkgBJAwfe8h73WIr6vzbguep83CmaOtD2TawxVD?=
 =?us-ascii?q?+/4apnVAPkhSEaPDM/7WrZiNF/jLhDrRyhuRJx3oDaboKSOvV8cKPQZs8WSX?=
 =?us-ascii?q?ZbU8pNTSFNHp+wYo0SBOQBJ+ZYqIz9qkMQoBu5HgmsGOLvyjlVjXHwwK06y/?=
 =?us-ascii?q?khGhzB0QM8GNIOq2jUrNTzNKsIVeC10bHIzSjYYvxKwjfx8pDIcg06rv2WR7?=
 =?us-ascii?q?JwdtPcxE8yHA3GllWdsZHpMjyI2ugXsGWW7/BsWfyxh2MlsQ18rCCjytojh4?=
 =?us-ascii?q?XUnI4YyVDJ+T9nzIs7K9C0UlN3bNG6HJZWqiqULZF5Qtk4TGFtoCs6z7oGto?=
 =?us-ascii?q?OlcyUS05QnwgLfa+SAc4iV/hLvTOaRLil8hHJiYL+/mROy/lKhyu34TMW7zE?=
 =?us-ascii?q?1KojBdktnRrX8BzQbT6s+fRvt8+EeuxyqP2hjO5uxLPEw4j6nWJp47zrIuiJ?=
 =?us-ascii?q?Yes17PEyHulEXzlqCWd0Ek+uay6+TgZ7XrvoOTN4hvigHiM6QunNazAeAlMg?=
 =?us-ascii?q?gWQmiW4viz1Kb58U3hXbVFlec6krPesJzCP8QUura5AxNJ0oYk8xu/Cjam0N?=
 =?us-ascii?q?IZnXkAN1JJYQ+IgJb3O17QJPD1FvO/g1W3kDd33PDKJLLgDYvLLnTZl7fhZ7?=
 =?us-ascii?q?l94VZGyAUv1dBf+45UCrYZLfLtXk/+rsHXAQcjPAyy3unnEsty1oIEVW2UGK?=
 =?us-ascii?q?CWLaTSsV6V5u80OOmMeJIVtyvnJ/c/+/HulmU1mUIFfaayx5cXcne4TbxaJB?=
 =?us-ascii?q?CcYHzthcxEHWoUsw4WSO3xlEbEQTNVIXGoUPES/DY+XamhFpvCQMiJnaSclH?=
 =?us-ascii?q?OwGYZKZ2YADk2UDF/jbMOcRv1KciXEcZwpqSANSbX0E9xp7hqprgKvk7c=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DcBACkLm1d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUyASKo0dozQJAQEBKREBAgEBhD8Cgw84EwIDCAEBBQEBAQEBBgQBbIU?=
 =?us-ascii?q?uDII6IoJvBnkQPxJXGYMiAYIOqwiFSoM+gUmBNIcfhjE/hGGEDYEEhHQiBJY?=
 =?us-ascii?q?IlhEHgiJiBIYNjVwngyKVRKgWOCGBWDMag18JjiWCXD0BATGBBgEBjC+CVAE?=
 =?us-ascii?q?B?=
X-IPAS-Result: =?us-ascii?q?A2DcBACkLm1d/wPjVY1lHQEBBQEHBQGBZ4MFUyASKo0do?=
 =?us-ascii?q?zQJAQEBKREBAgEBhD8Cgw84EwIDCAEBBQEBAQEBBgQBbIUuDII6IoJvBnkQP?=
 =?us-ascii?q?xJXGYMiAYIOqwiFSoM+gUmBNIcfhjE/hGGEDYEEhHQiBJYIlhEHgiJiBIYNj?=
 =?us-ascii?q?VwngyKVRKgWOCGBWDMag18JjiWCXD0BATGBBgEBjC+CVAEB?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694511"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 18:06:50 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9B0981A6023F;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id GIbQln6P5yeT; Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7E3A01A60228;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 3oBX9UelZZXv; Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 65A7C1A6023C;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 18:06:46 +0300
Message-Id: <20190902150646.2118-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190902150646.2118-1-costin.lupu@cs.pub.ro>
References: <20190902150646.2118-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 2/2] syslog.c: Fix file
 location
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RmlsZXMgaW1wb3J0ZWQgZnJvbSBtdXNsIHNob3VsZCBoYXZlIHRoZSBzYW1lIGxvY2F0aW9uLCBy
ZWxhdGl2ZSB0bwptdXNsLWltcG9ydGVkLyBzdWJkaXJlY3RvcnkuIEhvd2V2ZXIsIHRoaXMgd2Fz
IG5vdCBhcHBsaWVkIHdoZW4gc3lzbG9nLmMgd2FzCmltcG9ydGVkLgoKU2lnbmVkLW9mZi1ieTog
Q29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBNYWtlZmlsZS51ayAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgMiArLQogbXVzbC1pbXBvcnRlZC9zcmMveyA9PiBtaXNj
fS9zeXNsb2cuYyB8IDAKIDIgZmlsZXMgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRp
b24oLSkKIHJlbmFtZSBtdXNsLWltcG9ydGVkL3NyYy97ID0+IG1pc2N9L3N5c2xvZy5jICgxMDAl
KQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggN2U3MmRhNC4u
MzMzMDk2MCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTEy
NCw3ICsxMjQsNyBAQCBMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkv
ZGV2LmMKIExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9zaWduYWwu
YwogTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL2xpbmsuYwogTElC
TkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL21udGVudC5jCi1MSUJORVdM
SUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvbXVzbC1pbXBvcnRlZC9zcmMvc3lz
bG9nLmMKK0xJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWlt
cG9ydGVkL3NyYy8vbWlzYy9zeXNsb2cuYwogTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJO
RVdMSUJDX0JBU0UpL211c2wtaW1wb3J0ZWQvc3JjL3Rlcm1pb3MvdGNzZXRhdHRyLmMKIExJQk5F
V0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy90
ZXJtaW9zL3RjZ2V0YXR0ci5jCiAKZGlmZiAtLWdpdCBhL211c2wtaW1wb3J0ZWQvc3JjL3N5c2xv
Zy5jIGIvbXVzbC1pbXBvcnRlZC9zcmMvbWlzYy9zeXNsb2cuYwpzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gbXVzbC1pbXBvcnRlZC9zcmMvc3lzbG9nLmMKcmVuYW1lIHRvIG11c2wt
aW1wb3J0ZWQvc3JjL21pc2Mvc3lzbG9nLmMKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 15:07:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 15:07:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4nv3-00005i-Lx; Mon, 02 Sep 2019 15:07:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jHgy=W5=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i4nv2-00005W-SC
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 15:07:00 +0000
X-Inumbo-ID: 4d8be28e-cd93-11e9-b95f-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 4d8be28e-cd93-11e9-b95f-bc764e2007e4;
 Mon, 02 Sep 2019 15:06:55 +0000 (UTC)
IronPort-SDR: TnrJqegWpQEnnyLqeaJBl16T+b1UCenbSRg6QFJ5HWWkQSzuPY86UO/JwoTbd/WICmPy/qordw
 uYOtonOiHp8g==
IronPort-PHdr: =?us-ascii?q?9a23=3AHLESCR8hDd8ifv9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B31+ocTK2v8tzYMVDF4r011RmVBN+dsq0cwLqP+4nbGkU4qa6bt34DdJEeHz?=
 =?us-ascii?q?Qksu4x2zIaPcieFEfgJ+TrZSFpVO5LVVti4m3peRMNQJW2aFLduGC94iAPER?=
 =?us-ascii?q?vjKwV1Ov71GonPhMiryuy+4ZLebxhWiDanfL9/Lgm6oQrSu8ULnIBvNrs/xh?=
 =?us-ascii?q?zVr3VSZu9Y33loJVWdnxb94se/4ptu+DlOtvwi6sBNT7z0c7w3QrJEAjsmNX?=
 =?us-ascii?q?s15NDwuhnYUQSP/HocXX4InRdOHgPI8Qv1Xpb1siv9q+p9xCyXNtD4QLwoRT?=
 =?us-ascii?q?iv6bpgRRn1gykFKjE56nnahMxugqxGrhyvpBtxzIzaYIyOKPZyYrnQcc8ASG?=
 =?us-ascii?q?ZdQspcUTFKDIOmb4sICuoMJfhVr47mp1sSrBu+AxSnCuXyyj9Qm3/9wKo33P?=
 =?us-ascii?q?gmEQHdwAwgHtQOvG7QrNXoLKcSTPu4w7XTzTnZd/NWxCzy5JLSchAmuPyBW6?=
 =?us-ascii?q?97f8nJyUQ3Cg/IgUicpZbmMj6VzOgBrXaX4uh6We+hk2Irtg58riW1ysovio?=
 =?us-ascii?q?TFnJwZx17K+Clj3Yo4KsO0RUhmatC+CpRQrTuVN45uT8MnRGFnpTg1x6UduZ?=
 =?us-ascii?q?6+YCgK0JMnxwPDa/Cfc4iH/BbjVOGJLDdmgXJqYrO/hxKo/Ue80e3wTNG00E?=
 =?us-ascii?q?tRoSZfiNnMsWgB1x3V6seZVvtw5lqt1DmS2wzJ6exJIVo4mbTFJ5Mj2LI9mI?=
 =?us-ascii?q?IfsUHZES/3nEX2grWWdkIh+uWw9+vnZa7mpoOdN49ykA3+NrkumtSiAekjLg?=
 =?us-ascii?q?cORHKX+fyh1LL450H5WrJKguUskqbFqJDaOdgbpqmhDg9Q04Yj7Re/DzC90N?=
 =?us-ascii?q?gBgHYIMkxFdwyDj4XyP1HOIev4Deukg1i2nzZk2fbGMqfmApXXIXjJiK3hcq?=
 =?us-ascii?q?pl605A1AozyshS54xQCr4bPf38QlX+tNrFAR8jLQO0wvzrB85n2YwDXmKPA7?=
 =?us-ascii?q?KZPbjJsV+U++IgPvOAa5UJtzbmMfQl+ubugmQjlV8Heqn6lacQPXW5GPVhOA?=
 =?us-ascii?q?CVbGThhv8FEHwWpUwuQeqsj0eNAhBJYHPndKUn+jA9QKa7FZqLEouqm6CA2m?=
 =?us-ascii?q?G/A4VLTmtdTEiRGzHycNPXCL83dCuOL5o5wXQ/Xr+7Rtp52A=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DaBACkLm1d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4FugWogEiqNHaM0CQEBAToBAgEBhD8Cgw84EwIDCAEBBQEBAQEBBgQBbIU?=
 =?us-ascii?q?6gjoigm8GeRA/ElcZgyKCD6sIhUqDPoFJgTSHH4YxP4ERg1CFEYUWBJYIlhE?=
 =?us-ascii?q?HgiJiBJNpJ5hmqBY4IYFYMxqDX4JOF4EEAQeNGT0BATGBBgEBjwMBAQ?=
X-IPAS-Result: =?us-ascii?q?A2DaBACkLm1d/wPjVY1lHQEBBQEHBQGBZ4FugWogEiqNH?=
 =?us-ascii?q?aM0CQEBAToBAgEBhD8Cgw84EwIDCAEBBQEBAQEBBgQBbIU6gjoigm8GeRA/E?=
 =?us-ascii?q?lcZgyKCD6sIhUqDPoFJgTSHH4YxP4ERg1CFEYUWBJYIlhEHgiJiBJNpJ5hmq?=
 =?us-ascii?q?BY4IYFYMxqDX4JOF4EEAQeNGT0BATGBBgEBjwMBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,459,1559509200"; 
   d="scan'208";a="4694510"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 02 Sep 2019 18:06:50 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 94D681A6023C;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id IKubAiJylpL6; Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7AFF61A60240;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id j2d5lQ3DW7vG; Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 593751A6022E;
 Mon,  2 Sep 2019 18:06:50 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  2 Sep 2019 18:06:45 +0300
Message-Id: <20190902150646.2118-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190902150646.2118-1-costin.lupu@cs.pub.ro>
References: <20190902150646.2118-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/2] syslog.c: Bring back
 setlogmask() from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIE9TdiBpbXBsZW1lbnRhdGlvbiwgd2hlcmUgd2UgdG9vayB0aGlzIGZyb20sIGRyb3BwZWQg
dGhlIHNldGxvZ21hc2soKQpmdW5jdGlvbi4gV2UgYnJpbmcgaXQgYmFjayBmcm9tIHRoZSBtdXNs
IGltcGxlbWVudGF0aW9uIGJlY2F1c2UgaXQgaXMgbmVlZGVkIGJ5ClB5dGhvbiAzLgoKU2lnbmVk
LW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBtdXNsLWlt
cG9ydGVkL3NyYy9zeXNsb2cuYyB8IDE2ICsrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk
LCAxNiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbXVzbC1pbXBvcnRlZC9zcmMvc3lzbG9n
LmMgYi9tdXNsLWltcG9ydGVkL3NyYy9zeXNsb2cuYwppbmRleCAxNzkyMjQxLi5lZTEwOWY1IDEw
MDY0NAotLS0gYS9tdXNsLWltcG9ydGVkL3NyYy9zeXNsb2cuYworKysgYi9tdXNsLWltcG9ydGVk
L3NyYy9zeXNsb2cuYwpAQCAtNzAsNiArNzAsNyBAQAogc3RhdGljIHN0cnVjdCB1a19tdXRleCBs
b2NrID0gVUtfTVVURVhfSU5JVElBTElaRVIobG9jayk7CiBzdGF0aWMgY2hhciBsb2dfaWRlbnRb
MzJdOwogc3RhdGljIGludCBsb2dfb3B0Oworc3RhdGljIGludCBsb2dfbWFzayA9IDB4ZmY7CiBz
dGF0aWMgaW50IGxvZ19mYWNpbGl0eSA9IExPR19VU0VSOwogCiB2b2lkIG9wZW5sb2coY29uc3Qg
Y2hhciAqaWRlbnQsIGludCBvcHQsIGludCBmYWNpbGl0eSkKQEAgLTk1LDYgKzk2LDE4IEBAIHZv
aWQgY2xvc2Vsb2codm9pZCkKIHsKIH0KIAoraW50IHNldGxvZ21hc2soaW50IG1hc2twcmkpCit7
CisJaW50IHJldDsKKworCUxPQ0sobG9jayk7CisJcmV0ID0gbG9nX21hc2s7CisJaWYgKG1hc2tw
cmkpCisJCWxvZ19tYXNrID0gbWFza3ByaTsKKwlVTkxPQ0sobG9jayk7CisJcmV0dXJuIHJldDsK
K30KKwogdm9pZCBzeXNsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4p
CiB7CiAJdmFfbGlzdCBhcDsKQEAgLTEwNSw2ICsxMTgsOSBAQCB2b2lkIHN5c2xvZyhpbnQgcHJp
b3JpdHksIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKIAlpbnQgcGlkOwogCWludCBsLCBsMjsK
IAorCWlmICghKGxvZ19tYXNrICYgTE9HX01BU0socHJpb3JpdHkgJiA3KSkgfHwgKHByaW9yaXR5
ICYgfjB4M2ZmKSkKKwkJcmV0dXJuOworCiAJTE9DSyhsb2NrKTsKIAogCXZhX3N0YXJ0KGFwLCBt
ZXNzYWdlKTsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 15:49:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 15:49:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4oa3-0003pq-GR; Mon, 02 Sep 2019 15:49:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1c4v=W5=citrix.com=ian.jackson@srs-us1.protection.inumbo.net>)
 id 1i4oa2-0003pX-Ab
 for minios-devel@lists.xenproject.org; Mon, 02 Sep 2019 15:49:22 +0000
X-Inumbo-ID: 365e68ce-cd99-11e9-aea4-12813bfff9fa
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 365e68ce-cd99-11e9-aea4-12813bfff9fa;
 Mon, 02 Sep 2019 15:49:14 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567439354;
 h=from:mime-version:content-transfer-encoding:message-id:
 date:to:cc:subject:in-reply-to:references;
 bh=rmWZsTJ0Yg7/DOiL/8rjZRXY8KLjw3wVcRTKXZVbA4g=;
 b=h+i+KqXNTtDqiyUzLk6kqMv0/ynG9y78Bif28izqy78I1/2YCze9k3oK
 lBj7ISutzcoy3h/mcNQ+v+ZWSdoUC91HfBj1Ewxb3ufSMaTIJOiflOxt0
 FeDLN+XV50gX3kgw0JoJwhHZEYOVshBuDfFi6/aPczOPMYDh831UHzrVo Q=;
Authentication-Results: esa6.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=ian.jackson@citrix.com;
 spf=Pass smtp.mailfrom=Ian.Jackson@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 ian.jackson@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="Ian.Jackson@citrix.com";
 x-sender="ian.jackson@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of
 Ian.Jackson@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="Ian.Jackson@citrix.com";
 x-sender="Ian.Jackson@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="Ian.Jackson@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: 2JHCnBicUDun/Tv9jSXamKWvdiFlrK7i2hpxocINNRWR4jeZUr/jNTfOAHZlkhM65QdUh5R2+w
 FzljGAfNvoUYRWHuVuTqvWNbY+wvYD63eJwxP9/6uXsvXeohzkfXRJ8GwxzFkqFH2T3KERi9IG
 WfC9V0vBxgRz9yypfbqj6opZKmvpwAIdBqkHGfsoB3jjfKcV6Rb5cmtpclK3VRnKekWjy8QIbg
 luVQlsW+hQQRCqUL3hXFGJ+Ez0X2l1ZpeThuh00Oq8W3urVxqWJ1h1pTJq7vLw3dMI1H8pi+eY
 sH0=
X-SBRS: 2.7
X-MesageID: 5244735
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,459,1559534400"; 
   d="scan'208";a="5244735"
From: Ian Jackson <ian.jackson@citrix.com>
MIME-Version: 1.0
Message-ID: <23917.14808.737779.119459@mariner.uk.xensource.com>
Date: Mon, 2 Sep 2019 16:48:40 +0100
To: Lars Kurth <lars.kurth@citrix.com>
In-Reply-To: <D8EFC0B6-0FFC-4288-86EC-FD0A0BB8C3BF@citrix.com-0>
References: <AB34D39A-A120-440E-9309-3950E7A465A5@citrix.com>
 <6785899F-48FE-4977-81D1-3AA700241857@gmail.com>
 <38ac71b4-53c0-9402-2c6f-118f29818f85@citrix.com>
 <FCA290D6-2ECA-4B95-B327-7D263E0E4687@gmail.com>
 <818DA1AE-CE46-4806-B806-0943B79DF725@citrix.com>
 <F76AAD6E-198A-4455-A1DE-EED974DEACA3@citrix.com>
 <23909.26956.404750.684802@mariner.uk.xensource.com>
 <D8EFC0B6-0FFC-4288-86EC-FD0A0BB8C3BF@citrix.com-0>
X-Mailer: VM 8.2.0b under 24.5.1 (i686-pc-linux-gnu)
Subject: Re: [Minios-devel] [Xen-devel] [RFC] Code of Conduct
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: George Dunlap <George.Dunlap@citrix.com>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Rich Persaud <persaur@gmail.com>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>,
 xen-devel <xen-devel@lists.xenproject.org>,
 Ian Jackson <Ian.Jackson@citrix.com>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TGFycyBLdXJ0aCB3cml0ZXMgKCJSZTogW1hlbi1kZXZlbF0gW1JGQ10gQ29kZSBvZiBDb25kdWN0
Iik6Cj4gSSBhdHRhY2hlZCBhIHJlZGxpbmUgdmVyc2lvbiBvZiBib3RoIHRoZSBvcmlnaW5hbCAo
YmFzZWQgb24gdGhlIExGIGV2ZW50cyBDb0MpIGFuZCBhIHJlZGxpbmUgdmVyc2lvbiBiYXNlZCBv
biB0aGUgY292ZW5hbnQgZ2l2ZW4gdGhlIGNvbnN0cmFpbnRzIHdlIGFncmVlZC4gQWthCj4gWzFd
IFhlbiBDb0MgQ29udHJpYnV0b3IgQ292ZW5hbnQgYmFzZWxpbmUgKHJlZGxpbmUpLnBkZiAKPiBb
Ml0gWGVuIENvQyBMRiBldmVudHMgYmFzZWxpbmUgKHJlZGxpbmUpLnBkZgo+IAo+IEkgbWluaW1p
emVkIGNoYW5nZXMgdG8gWzJdLiAKCkkgbGlrZSBib3RoIG9mIHRoZXNlLiAgSSB3b3VsZCBiZSBo
YXBweSB0byBhZG9wdCBlaXRoZXIuICBJIHByZWZlciB0aGUKQ29udHJpYnV0b3IgQ292ZW5hbnQg
YmFzZWQgdmVyc2lvbi4KCgpJIGhhdmUgdHdvIGNvbW1lbnRzLiAgVGhlIGZpcnN0IGlzIHZlcnkg
bWlub3I6CgpUaGUgTEYgRXZlbnRzIG9uZSBoYXMgb25lIGRpZmZlcmVudCBzZWN0aW9uIHRpdGxl
LiAgSW5zdGVhZCBvZgogICAgICAgIEVuZm9yY2VtZW50Cml0IGhhcwogICAgICAgIFdoYXQgVG8g
RG8gSWYgWW91IFdpdG5lc3MgT3IgQXJlIFN1YmplY3QgVG8gVW5hY2NlcHRhYmxlCiAgICAgICAg
QmVoYXZpb3IgCndoaWNoIGlzIHVud2llbGR5IGJ1dCBiZXR0ZXIgaW4gb3RoZXIgd2F5cyAtIG1v
cmUgcG9zaXRpdmUgYW5kCmNvbnN0cnVjdGl2ZS4gIEknbSBub3Qgc3VyZSBpZiB0aGVyZSBpcyBh
IGhhcHB5IG1pZGRsZSBncm91bmQuCkkgYW0gaGFwcHkgdG8gYWRvcHQgZWl0aGVyIHZlcnNpb24g
d2l0aCBlaXRoZXIgdGl0bGUuICBJIG1lbnRpb24gaXQgaW4KY2FzZSBhbnlvbmUgaGFzIGJldHRl
ciBpZGVhcyBldGMuCgoKTXkgc2Vjb25kIGNvbW1lbnQgaXMgbW9yZSBzdWJzdGFudGlhbC4gIEl0
IHNob3VsZCBub3QgYmUgcmVnYXJkZWQgYXMgYQpibG9ja2VyLCBidXQgSSB3b3VsZCBsaWtlIHRv
IHNlZSBpdCBhZGRyZXNzZWQgZWl0aGVyIG5vdyBvciBhZnRlciBDb0MKYWRvcHRpb24uCgpUaGUg
cm9vdCBpc3N1ZSBpcyB0aGUgZGlmZmljdWx0IG9uZSBvZiB3aGF0IHRvIGRvIGFib3V0IHBvc3Np
YmxlCmludm9sdmVtZW50IGluIGFidXNlIGJ5IG1lbWJlcnMgb2YgdGhlIGNvbmR1Y3RAIGFkZHJl
c3MuCgpJIHdvdWxkIGxpa2UgdG8gc2VlIHR3byBjaGFuZ2VzOiBmaXJzdGx5LCB3ZSBzaG91bGQg
cHVibGlzaCB0aGUgbGlzdApvZiBwZW9wbGUgdGhhdCB0aGUgY29uZHVjdCBhbGlhcyBnb2VzIHRv
LiAgVGhlIENvQyBzaG91bGQgY29udGFpbiBhCnJlZmVyZW5jZSB0byB0aGUgcGxhY2Ugd2hlcmUg
dGhpcyBjYW4gYmUgZm91bmQuICAiVGhlIG1lbWJlcnNoaXAgb2YKdGhlIGNvbmR1Y3RAIGFsaWFz
IGlzIHB1YmxpY2x5IGRvY3VtZW50ZWQgaW4gW2xvY2F0aW9uXSIuCgpTZWNvbmRseSwgd2Ugc2hv
dWxkIGV4cGxpY2l0bHkgcHJvdmlkZSBhIHJvdXRlIGZvciBzb21lb25lIHdobwpkaXN0cnVzdHMg
bWVtYmVyKHMpIG9mIGNvbmR1Y3RALiAgSG93IGFib3V0OgoKICBJZiB5b3UgaGF2ZSBjb25jZXJu
cyBhYm91dCBhbnkgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGNvbmR1Y3RAIGFsaWFzLAogIHlvdSBh
cmUgd2VsY29tZSB0byBjb250YWN0IHByZWNpc2VseSB0aGUgQ29uZHVjdCBUZWFtIG1lbWJlcihz
KSBvZgogIHlvdXIgY2hvaWNlLgoKVGhlIHRlYW0gc2hvdWxkIGJlIGxhcmdlIGFuZCBkaXZlcnNl
IGVub3VnaCB0aGF0IHRoaXMgaXMgYSBwcmFjdGljYWxseQp1c2VmdWwgcmVjb21tZW5kYXRpb24s
IGJ1dCBpdCBzaG91bGQgbm90IGJlIHVud2llbGR5LgoKClRoYW5rcyBmb3IgZHJpdmluZyB0aGlz
LgoKUmVnYXJkcywKSWFuLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 18:10:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 18:10:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4qms-0008Lk-Cq; Mon, 02 Sep 2019 18:10:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v281=W5=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i4qmr-0008La-2n
 for minios-devel@lists.xenproject.org; Mon, 02 Sep 2019 18:10:45 +0000
X-Inumbo-ID: f3eeba48-cdac-11e9-aea6-12813bfff9fa
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f3eeba48-cdac-11e9-aea6-12813bfff9fa;
 Mon, 02 Sep 2019 18:10:32 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567447832;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-id:content-transfer-encoding: mime-version;
 bh=fCPmwnGO501cQ5qDK9EKjch24aan0A9x1cDBI/2N3ZU=;
 b=IHfVXIN0Gn3H1NPiHewyz4Vq/e7j3URGlwtZ6Kflpag9SM8MVKf7ajak
 gw4FEiIDIXBDRECOdNmiRJWuQD2cVcZgrHabUPsdMQkjoEqCC88PL3Zoc
 sN++hHqqPimA41jng9VCaj/PePAJe9waPK79aDNV2i9krhDMVBBkMGocz A=;
Authentication-Results: esa5.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa5.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa5.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: 2KFP1eCS+zzgX08ZthY8/Mf/atVGtpg3MWk/Teq7VIiDqUPBSjAjjDoFxtEvHDH3hkQcIdIcjt
 4yHFc2P3eVaAuyK7hFtgcgov50MF5a4vEuyJ5S225pqKArqUv/hhYjta7XtfgpgUbWGfiPm0mq
 RWKhhYVK2HO0QdsznNWOkRnj4Ltm/FQ8OMlhrSpCG/vjvg61xXZQbDZOmMXRnuxPq2sv+JOkrf
 V/ScZb1VMluA9oicIbGj29PLE2pl7RrSg/NtbvaBwkSNtOI79Vra1zmXhcXw0TZhZohBsq3htC
 dpk=
X-SBRS: 2.7
X-MesageID: 5211855
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,460,1559534400"; 
   d="scan'208";a="5211855"
From: Lars Kurth <lars.kurth@citrix.com>
To: Ian Jackson <Ian.Jackson@citrix.com>
Thread-Topic: [Xen-devel] [RFC] Code of Conduct
Thread-Index: AQHVYaX4OlNK7ty/1ECq/iU5x7WQe6cYn1YA
Date: Mon, 2 Sep 2019 18:10:28 +0000
Message-ID: <E5235465-C2CC-4D9E-ABD4-39D1056B5352@citrix.com>
References: <AB34D39A-A120-440E-9309-3950E7A465A5@citrix.com>
 <6785899F-48FE-4977-81D1-3AA700241857@gmail.com>
 <38ac71b4-53c0-9402-2c6f-118f29818f85@citrix.com>
 <FCA290D6-2ECA-4B95-B327-7D263E0E4687@gmail.com>
 <818DA1AE-CE46-4806-B806-0943B79DF725@citrix.com>
 <F76AAD6E-198A-4455-A1DE-EED974DEACA3@citrix.com>
 <23909.26956.404750.684802@mariner.uk.xensource.com>
 <D8EFC0B6-0FFC-4288-86EC-FD0A0BB8C3BF@citrix.com-0>
 <23917.14808.737779.119459@mariner.uk.xensource.com>
In-Reply-To: <23917.14808.737779.119459@mariner.uk.xensource.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <66238FBAE03F0A44B87DBC632A219CD8@citrix.com>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [Xen-devel] [RFC] Code of Conduct
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: George Dunlap <George.Dunlap@citrix.com>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Rich Persaud <persaur@gmail.com>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>,
 xen-devel <xen-devel@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
 Stefano Stabellini <stefano.stabellini@xilinx.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQoNCu+7v09uIDAyLzA5LzIwMTksIDE2OjQ5LCAiSWFuIEphY2tzb24iIDxpYW4uamFja3NvbkBj
aXRyaXguY29tPiB3cm90ZToNCg0KICAgIExhcnMgS3VydGggd3JpdGVzICgiUmU6IFtYZW4tZGV2
ZWxdIFtSRkNdIENvZGUgb2YgQ29uZHVjdCIpOg0KICAgID4gSSBhdHRhY2hlZCBhIHJlZGxpbmUg
dmVyc2lvbiBvZiBib3RoIHRoZSBvcmlnaW5hbCAoYmFzZWQgb24gdGhlIExGIGV2ZW50cyBDb0Mp
IGFuZCBhIHJlZGxpbmUgdmVyc2lvbiBiYXNlZCBvbiB0aGUgY292ZW5hbnQgZ2l2ZW4gdGhlIGNv
bnN0cmFpbnRzIHdlIGFncmVlZC4gQWthDQogICAgPiBbMV0gWGVuIENvQyBDb250cmlidXRvciBD
b3ZlbmFudCBiYXNlbGluZSAocmVkbGluZSkucGRmIA0KICAgID4gWzJdIFhlbiBDb0MgTEYgZXZl
bnRzIGJhc2VsaW5lIChyZWRsaW5lKS5wZGYNCiAgICA+IA0KICAgID4gSSBtaW5pbWl6ZWQgY2hh
bmdlcyB0byBbMl0uIA0KICAgIA0KICAgIEkgbGlrZSBib3RoIG9mIHRoZXNlLiAgSSB3b3VsZCBi
ZSBoYXBweSB0byBhZG9wdCBlaXRoZXIuICBJIHByZWZlciB0aGUNCiAgICBDb250cmlidXRvciBD
b3ZlbmFudCBiYXNlZCB2ZXJzaW9uLg0KICAgIA0KICAgIA0KICAgIEkgaGF2ZSB0d28gY29tbWVu
dHMuICBUaGUgZmlyc3QgaXMgdmVyeSBtaW5vcjoNCiAgICANCiAgICBUaGUgTEYgRXZlbnRzIG9u
ZSBoYXMgb25lIGRpZmZlcmVudCBzZWN0aW9uIHRpdGxlLiAgSW5zdGVhZCBvZg0KICAgICAgICAg
ICAgRW5mb3JjZW1lbnQNCiAgICBpdCBoYXMNCiAgICAgICAgICAgIFdoYXQgVG8gRG8gSWYgWW91
IFdpdG5lc3MgT3IgQXJlIFN1YmplY3QgVG8gVW5hY2NlcHRhYmxlDQogICAgICAgICAgICBCZWhh
dmlvciANCiAgICB3aGljaCBpcyB1bndpZWxkeSBidXQgYmV0dGVyIGluIG90aGVyIHdheXMgLSBt
b3JlIHBvc2l0aXZlIGFuZA0KICAgIGNvbnN0cnVjdGl2ZS4gIEknbSBub3Qgc3VyZSBpZiB0aGVy
ZSBpcyBhIGhhcHB5IG1pZGRsZSBncm91bmQuDQogICAgSSBhbSBoYXBweSB0byBhZG9wdCBlaXRo
ZXIgdmVyc2lvbiB3aXRoIGVpdGhlciB0aXRsZS4gIEkgbWVudGlvbiBpdCBpbg0KICAgIGNhc2Ug
YW55b25lIGhhcyBiZXR0ZXIgaWRlYXMgZXRjLg0KDQpJIGFtIGFsc28gYWx0b2dldGhlciBoYXBw
aWVyIHdpdGggdGhlIENvbnRyaWJ1dG9yIENvdmVuYW50LCBidXQgbWF5YmUgDQp3aXRoIGEgZmV3
IGFkZGl0aW9uYWwgY2hhbmdlcyBzdWNoIGFzIGNoYW5naW5nIHNvbWUgdGl0bGVzIGFuZCBzb21l
DQpvZiB0aGUgbW9kaWZpY2F0aW9ucyBvdXRsaW5lZCBlYXJsaWVyLg0KICAgIA0KICAgIE15IHNl
Y29uZCBjb21tZW50IGlzIG1vcmUgc3Vic3RhbnRpYWwuICBJdCBzaG91bGQgbm90IGJlIHJlZ2Fy
ZGVkIGFzIGENCiAgICBibG9ja2VyLCBidXQgSSB3b3VsZCBsaWtlIHRvIHNlZSBpdCBhZGRyZXNz
ZWQgZWl0aGVyIG5vdyBvciBhZnRlciBDb0MNCiAgICBhZG9wdGlvbi4NCiAgICANCiAgICBUaGUg
cm9vdCBpc3N1ZSBpcyB0aGUgZGlmZmljdWx0IG9uZSBvZiB3aGF0IHRvIGRvIGFib3V0IHBvc3Np
YmxlDQogICAgaW52b2x2ZW1lbnQgaW4gYWJ1c2UgYnkgbWVtYmVycyBvZiB0aGUgY29uZHVjdEAg
YWRkcmVzcy4NCiAgICANCiAgICBJIHdvdWxkIGxpa2UgdG8gc2VlIHR3byBjaGFuZ2VzOiBmaXJz
dGx5LCB3ZSBzaG91bGQgcHVibGlzaCB0aGUgbGlzdA0KICAgIG9mIHBlb3BsZSB0aGF0IHRoZSBj
b25kdWN0IGFsaWFzIGdvZXMgdG8uICBUaGUgQ29DIHNob3VsZCBjb250YWluIGENCiAgICByZWZl
cmVuY2UgdG8gdGhlIHBsYWNlIHdoZXJlIHRoaXMgY2FuIGJlIGZvdW5kLiAgIlRoZSBtZW1iZXJz
aGlwIG9mDQogICAgdGhlIGNvbmR1Y3RAIGFsaWFzIGlzIHB1YmxpY2x5IGRvY3VtZW50ZWQgaW4g
W2xvY2F0aW9uXSIuDQoNClRoYXQgaXMgZW50aXJlbHkgc2Vuc2libGUuIEkgdGhpbmsgdGhlIGJl
c3QgcGxhY2Ugd291bGQgYmUgdG8gcmVjb3JkIHRoaXMNCmluIHRoZSBkb2N1bWVudC4gV2Ugc2hv
dWxkIHByb2JhYmx5IHN0YXJ0IHdpdGggYSBzaG9ydGxpc3Qgb2YgcGVvcGxlIA0KYW5kIGluY2x1
ZGUgaXQgaW4gdGhlIG5leHQgdmVyc2lvbiBhbmQgZ2V0IGl0IGFsbCBhcHByb3ZlZCBpbiBvbmUg
Z28NCiAgICANCiAgICBTZWNvbmRseSwgd2Ugc2hvdWxkIGV4cGxpY2l0bHkgcHJvdmlkZSBhIHJv
dXRlIGZvciBzb21lb25lIHdobw0KICAgIGRpc3RydXN0cyBtZW1iZXIocykgb2YgY29uZHVjdEAu
ICBIb3cgYWJvdXQ6DQogICAgDQogICAgICBJZiB5b3UgaGF2ZSBjb25jZXJucyBhYm91dCBhbnkg
b2YgdGhlIG1lbWJlcnMgb2YgdGhlIGNvbmR1Y3RAIGFsaWFzLA0KICAgICAgeW91IGFyZSB3ZWxj
b21lIHRvIGNvbnRhY3QgcHJlY2lzZWx5IHRoZSBDb25kdWN0IFRlYW0gbWVtYmVyKHMpIG9mDQog
ICAgICB5b3VyIGNob2ljZS4NCg0KVGhhdCBpcyBlbnRpcmVseSBmaW5lIHdpdGggbWUuDQogICAg
DQogICAgVGhlIHRlYW0gc2hvdWxkIGJlIGxhcmdlIGFuZCBkaXZlcnNlIGVub3VnaCB0aGF0IHRo
aXMgaXMgYSBwcmFjdGljYWxseQ0KICAgIHVzZWZ1bCByZWNvbW1lbmRhdGlvbiwgYnV0IGl0IHNo
b3VsZCBub3QgYmUgdW53aWVsZHkuDQogICAgDQpJIHdhcyB0aGlua2luZyBvZiAyLTMgbWF5YmUg
NCBwZW9wbGUuIENhbiB0aG9zZSBsZWFkZXJzaGlwIHRlYW0gbWVtYmVycw0Kd2hvIGFyZSB3aWxs
aW5nIHRvIHN0ZXAgdXAgcmVwbHkgdG8gbWUgcHJpdmF0ZWx5IG9yIGluIHRoaXMgdGhyZWFkLiBJ
IGFtIGFzc3VtaW5nIA0KdGhhdCBJIHdpbGwgYmUgYSBtZW1iZXIgb2YgY29uZHVjdEAsIGJ1dCBJ
IGFtIGFsc28gd2lsbGluZyB0byBzdGVwIGFzaWRlDQppZiBpdCBoZWxwcy4NCg0KUmVnYXJkbGVz
cyBvZiB0aGlzLCBJIHRoaW5rIEkgaGF2ZSBlbm91Z2ggdG8gc2VuZCBvdXQgYSBjb25jcmV0ZSBw
cm9wb3NhbA0KZm9yIGZ1cnRoZXIgcmV2aWV3DQoNCkJlc3QgUmVnYXJkcw0KTGFycw0KDQoNCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 20:24:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 20:24:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4ssP-0002R0-O4; Mon, 02 Sep 2019 20:24:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OxwP=W5=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i4ssO-0002Qv-K1
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 20:24:36 +0000
X-Inumbo-ID: ac68096e-cdbf-11e9-8980-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.82]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ac68096e-cdbf-11e9-8980-bc764e2007e4;
 Mon, 02 Sep 2019 20:24:33 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=b79J4wQHZ5ZrREoImEdTT+IaSrt0tcYoKRsxKl8vcoBVgt9syuYCvTYsMPP6ZwLVOKIAS5T6hog83q9gJV5rHtxxpdpQrVdPMZmPvmWrVqM4z/l1bpUXPKAI+JXTHDc2eenvEbLboVYeo6QOdUVvRtoU8ontYh2dP/JFNSEJfmG0ZFTwnwniAWdSm4qcS+QDwcZGRszs+MAmLdW6uZSVXlUihtWlefKZf8Lr+nwTi2xErZFkGrUZnL1Ek716LLcbO+yCZ8DIuiPBkeRKicnjiz1IVeu16kvyeu5gzg3bnt5thk0MwdPYwzdqDK0phFFEORZHPjdkWnMm1LoBUxGX+g==
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=+fsFz2939rRMdFNiyWKVtI3fiLNCobEqt/s3uwQF3OU=;
 b=mTm8nrYzLgS4K+/gb+d3cAk2wGrbPmVUemNcYrJE+BqG21nFozMw+rCq61SEoIKGgvoFciYJgA6o5/DHyYvXX5IVR3Fs8bVl940aYx9nDDv3NBBYbpUFekZab/zLw8nnUJHsvl5KGr/UHQ/z20HNnN/xdbGNUuIPjky++HpWMTulpGGEK1V/om2YzCYXzjgGOFRvAJKD1T/Q9F1+5E6FiOLUTZXEOG5XyGEBmM2TDqz0JjHHj2shsra36mp5/N2mh3PgsbQTFb2/MLZSVHbBWG7o0BEyhafTlxfhxFAV3VZzEK/sdWOz1IqN4OQjFv1WCp1Hndz4A9cInbP3M0CGEw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4796.eurprd01.prod.exchangelabs.com (20.177.212.12) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.21; Mon, 2 Sep
 2019 20:24:31 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 2 Sep 2019
 20:24:31 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH 1/2] syslog.c: Bring back setlogmask()
 from musl
Thread-Index: AQHVYaAQMzr77Lcr90emGFBacIqv8KcY1ZeA
Date: Mon, 2 Sep 2019 20:24:31 +0000
Message-ID: <efec1008-7291-7ad6-b3a9-575c868730f5@stud.acs.upb.ro>
References: <20190902150646.2118-1-costin.lupu@cs.pub.ro>
 <20190902150646.2118-2-costin.lupu@cs.pub.ro>
In-Reply-To: <20190902150646.2118-2-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0093.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::19) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 9ea74dbe-3ad6-48b6-4aec-08d72fe38fb1
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4796; 
x-ms-traffictypediagnostic: PR1PR01MB4796:
x-microsoft-antispam-prvs: <PR1PR01MB4796EA2698D6CEC43298941DA6BE0@PR1PR01MB4796.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:3383;
x-forefront-prvs: 01480965DA
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(979002)(376002)(39860400002)(366004)(396003)(346002)(136003)(199004)(189003)(76176011)(2616005)(476003)(11346002)(786003)(31686004)(316002)(102836004)(6506007)(386003)(25786009)(53546011)(446003)(14454004)(5660300002)(486006)(6486002)(66946007)(66446008)(66476007)(66556008)(64756008)(478600001)(46003)(6116002)(7736002)(8936002)(31696002)(86362001)(53936002)(186003)(14444005)(6512007)(256004)(305945005)(6246003)(2501003)(71200400001)(71190400001)(85182001)(6436002)(99286004)(8676002)(81156014)(81166006)(52116002)(110136005)(85202003)(2906002)(229853002)(969003)(989001)(999001)(1009001)(1019001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4796;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: an9whvQQqYXo6mU5RcSZKaJW1371X2mYd5cE3Uyo2ROCcUQ3bO9TSw7osfUVzvVNUWrCouev+HX3sZZ5YM63Imd+ljnCDWhWJoAhMqfn3H6H+c0eQlbQYLLpey1cW5688WgtG96LwspFTIGUULAX2ydA6d8qXXTvNOtfrXAGTqqIMHLYQQ6/kRcXz3NfDRL9SnVzXaeyi0sQiU+KIUqE3Ciq/etKMo95DGE41U27RN/LyNkjqGVJR2LsWxEgmpAa3Eph49MP9c42Q9nPtGDer/gHBeg7uA8Ou5FmpjxwOiVD8lA6iv66k3uu48p9tJW22zE2CI6lVDyXoCLuEpZ0QE0fci8NaR5JNZ034XZocAxD2yTWpi6GEJmpLsPg6FnDfW0DSERjTGEVFqmpr0vY+AHZBRTRaKBOrDRy+67deGc=
x-ms-exchange-transport-forked: True
Content-ID: <B6BE948473924B48A63B17C876DDB529@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 9ea74dbe-3ad6-48b6-4aec-08d72fe38fb1
X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Sep 2019 20:24:31.3185 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: CoICInPdVgUtHXm6w4bTfAqItbmFkUJD+7ElBN2KmkYyqt5ZTSbAyQwJvz0yE7ahxyiUVpJbQkSBOf4zisKNPcgRmv38+FiYAITwUVMZS71dXjajE0CtXMoh/38qz8aL
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4796
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/2] syslog.c: Bring back
 setlogmask() from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpJIGhhdmUgdGVzdGVkIHRoaXMgcGF0Y2ggYW5kIGl0IHdvcmtzIGdyZWF0
LiBUaGFua3MhDQoNClZsYWQNCg0KUmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdTx2bGFk
X2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPg0KDQpPbiAwMi4wOS4yMDE5IDE4OjA2LCBD
b3N0aW4gTHVwdSB3cm90ZToNCj4gVGhlIE9TdiBpbXBsZW1lbnRhdGlvbiwgd2hlcmUgd2UgdG9v
ayB0aGlzIGZyb20sIGRyb3BwZWQgdGhlIHNldGxvZ21hc2soKQ0KPiBmdW5jdGlvbi4gV2UgYnJp
bmcgaXQgYmFjayBmcm9tIHRoZSBtdXNsIGltcGxlbWVudGF0aW9uIGJlY2F1c2UgaXQgaXMgbmVl
ZGVkIGJ5DQo+IFB5dGhvbiAzLg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29z
dGluLmx1cHVAY3MucHViLnJvPg0KPiAtLS0NCj4gICBtdXNsLWltcG9ydGVkL3NyYy9zeXNsb2cu
YyB8IDE2ICsrKysrKysrKysrKysrKysNCj4gICAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9u
cygrKQ0KPg0KPiBkaWZmIC0tZ2l0IGEvbXVzbC1pbXBvcnRlZC9zcmMvc3lzbG9nLmMgYi9tdXNs
LWltcG9ydGVkL3NyYy9zeXNsb2cuYw0KPiBpbmRleCAxNzkyMjQxLi5lZTEwOWY1IDEwMDY0NA0K
PiAtLS0gYS9tdXNsLWltcG9ydGVkL3NyYy9zeXNsb2cuYw0KPiArKysgYi9tdXNsLWltcG9ydGVk
L3NyYy9zeXNsb2cuYw0KPiBAQCAtNzAsNiArNzAsNyBAQA0KPiAgIHN0YXRpYyBzdHJ1Y3QgdWtf
bXV0ZXggbG9jayA9IFVLX01VVEVYX0lOSVRJQUxJWkVSKGxvY2spOw0KPiAgIHN0YXRpYyBjaGFy
IGxvZ19pZGVudFszMl07DQo+ICAgc3RhdGljIGludCBsb2dfb3B0Ow0KPiArc3RhdGljIGludCBs
b2dfbWFzayA9IDB4ZmY7DQo+ICAgc3RhdGljIGludCBsb2dfZmFjaWxpdHkgPSBMT0dfVVNFUjsN
Cj4gICANCj4gICB2b2lkIG9wZW5sb2coY29uc3QgY2hhciAqaWRlbnQsIGludCBvcHQsIGludCBm
YWNpbGl0eSkNCj4gQEAgLTk1LDYgKzk2LDE4IEBAIHZvaWQgY2xvc2Vsb2codm9pZCkNCj4gICB7
DQo+ICAgfQ0KPiAgIA0KPiAraW50IHNldGxvZ21hc2soaW50IG1hc2twcmkpDQo+ICt7DQo+ICsJ
aW50IHJldDsNCj4gKw0KPiArCUxPQ0sobG9jayk7DQo+ICsJcmV0ID0gbG9nX21hc2s7DQo+ICsJ
aWYgKG1hc2twcmkpDQo+ICsJCWxvZ19tYXNrID0gbWFza3ByaTsNCj4gKwlVTkxPQ0sobG9jayk7
DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0KPiAgIHZvaWQgc3lzbG9nKGludCBwcmlvcml0
eSwgY29uc3QgY2hhciAqbWVzc2FnZSwgLi4uKQ0KPiAgIHsNCj4gICAJdmFfbGlzdCBhcDsNCj4g
QEAgLTEwNSw2ICsxMTgsOSBAQCB2b2lkIHN5c2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIg
Km1lc3NhZ2UsIC4uLikNCj4gICAJaW50IHBpZDsNCj4gICAJaW50IGwsIGwyOw0KPiAgIA0KPiAr
CWlmICghKGxvZ19tYXNrICYgTE9HX01BU0socHJpb3JpdHkgJiA3KSkgfHwgKHByaW9yaXR5ICYg
fjB4M2ZmKSkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICAgCUxPQ0sobG9jayk7DQo+ICAgDQo+ICAg
CXZhX3N0YXJ0KGFwLCBtZXNzYWdlKTsNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 02 20:25:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 02 Sep 2019 20:25:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i4stB-0002Up-Rl; Mon, 02 Sep 2019 20:25:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OxwP=W5=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i4stA-0002Ui-6L
 for minios-devel@lists.xen.org; Mon, 02 Sep 2019 20:25:24 +0000
X-Inumbo-ID: c69503fa-cdbf-11e9-aea7-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.84]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c69503fa-cdbf-11e9-aea7-12813bfff9fa;
 Mon, 02 Sep 2019 20:25:17 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JGtoK1hxsYO4RFgUlNagFYJPcnNH5C8Lj4ZDxWSb4hMsy7BKWAKrAHUPrAuCn2Bo9+ACyjVdEUdy2nAQlMckN5AR9BAdlRPlot63K/YtxxrHIS2rRPk3Xvo9FaoJdfneWIVcxG2rlbKmHMtYyrWupF2gqGc5Isf3GegQGgOxkYeMoqohekCDBC/eDDunmE1FQ6g5wg5VH1aXT7YXYSRnKNHCZA1OZbG98TOhC30Ms9jE8wziRLWHfPKDGhkrWXYrISy+p8QoaE3p1e6Z+q1i9jhOF27Tg+HlGOeZlMr8yi9oqyCsdKkmnEjdaI4NqzRfes6mVu1Pn+x0K1E2nKTVEg==
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=4/igvK7D5mXANDHuNt8ncKNrHsDbiD8PtB+zoWjkCpU=;
 b=WdTDmY+anNT1WGGQZ58B+VyZ/OnPhVurhih5JIrQKFK5Sg88cwR84WbdUP5YgaBB4dFGY/5wg71+EN5Xgl+xdFDbTcRMRomQo+qasBRec+PCoLvZ7mw9yKAjiAbnE6nVHzPNIDznHMW0txXCX27Cstwjpp5Sl5pIfS6rMsrjJ9NQLbGADYW4WKnyqWvHTa+fTOUbfjE+inUcwUwDE/mPzwgwndAAQLHWGoWcv0VK2sxaoTdQaTBaPtlqECyuJdw54ClExQN0p0n+zGwrRbyck52nYnpDpZ7ShYbZgn5I/5weho/lpoJo6Da4SBU0h8K6zjdmsB4Ob4utpfPuQubVdQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4796.eurprd01.prod.exchangelabs.com (20.177.212.12) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.21; Mon, 2 Sep
 2019 20:25:15 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 2 Sep 2019
 20:25:15 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH 2/2] syslog.c: Fix file location
Thread-Index: AQHVYaAQs9PaRqAfB06WAx4EGdL4k6cY1c0A
Date: Mon, 2 Sep 2019 20:25:15 +0000
Message-ID: <83d84d3d-fb92-b9cf-dd72-f92d104a93de@stud.acs.upb.ro>
References: <20190902150646.2118-1-costin.lupu@cs.pub.ro>
 <20190902150646.2118-3-costin.lupu@cs.pub.ro>
In-Reply-To: <20190902150646.2118-3-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0092.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::18) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 09161c5c-e84a-4fe1-e5ab-08d72fe3aa1b
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4796; 
x-ms-traffictypediagnostic: PR1PR01MB4796:
x-microsoft-antispam-prvs: <PR1PR01MB47967134A2C8112CDCC76015A6BE0@PR1PR01MB4796.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2201;
x-forefront-prvs: 01480965DA
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(39860400002)(366004)(396003)(346002)(136003)(199004)(189003)(76176011)(2616005)(476003)(11346002)(786003)(31686004)(316002)(102836004)(6506007)(386003)(25786009)(53546011)(446003)(14454004)(5660300002)(486006)(6486002)(66946007)(66446008)(66476007)(66556008)(64756008)(478600001)(46003)(6116002)(7736002)(8936002)(31696002)(86362001)(53936002)(186003)(14444005)(6512007)(256004)(305945005)(6246003)(2501003)(71200400001)(71190400001)(85182001)(6436002)(99286004)(8676002)(81156014)(81166006)(52116002)(110136005)(85202003)(2906002)(229853002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4796;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: Vpo/TqvoatUUrZw6WYArLPTjSJEdfLuQLgynfTM16BvIH95J118bEDQ/Tq7+3ETZn+VtBc91BjCxASYA3ZhuNV2fqLy63iApChL6Daws8EolJVzoxrCsPZx2eWJjYOwsAetwdEpYCmvRSl+iaHN673t/tNVOAdqfbeJR0YWG9hVh85o/Ds3VqblFBrVd/NIbjSO6xP+j8r+fcv/gt3r1MwZV9QxRJs3DCjnYFrOyiMFQo1xafL4EW4XKe6jPggcOThovXzE5f5tTj5L8IVn42glybpDtf2Zk2zOUgXfP9Zqm4URd+nB8Iuz3a8UbHi3Y92rkWOXruI7exPQOE+Rut1IJth6zn+d+h75/isbVRV+FlBfxETsx2JU8SYGkU+wzYG1Esf29Ff7gr5QHH+lUMicbQpjt3zrYVRFFSalzlgw=
x-ms-exchange-transport-forked: True
Content-ID: <47F40C44EEEE6F4AA4C9A07AB02E4249@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 09161c5c-e84a-4fe1-e5ab-08d72fe3aa1b
X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Sep 2019 20:25:15.5240 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 5OB7oc+c9U0A35owgRCo+zS28BMRXAn9AeIbAWRgaKT9mWP4fHsbzgfc4JQbwLRZzOzmeBy54x8H7qQTel3TjyhJc+fdlfRuV6uogn0n+/ebJuzhJsLimuJReS8m/x9Z
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4796
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 2/2] syslog.c: Fix file
 location
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdTx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KDQoNCk9uIDAyLjA5LjIwMTkgMTg6MDYsIENvc3RpbiBMdXB1IHdyb3RlOg0K
PiBGaWxlcyBpbXBvcnRlZCBmcm9tIG11c2wgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbG9jYXRpb24s
IHJlbGF0aXZlIHRvDQo+IG11c2wtaW1wb3J0ZWQvIHN1YmRpcmVjdG9yeS4gSG93ZXZlciwgdGhp
cyB3YXMgbm90IGFwcGxpZWQgd2hlbiBzeXNsb2cuYyB3YXMNCj4gaW1wb3J0ZWQuDQo+DQo+IFNp
Z25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQo+IC0tLQ0K
PiAgIE1ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyICstDQo+ICAgbXVz
bC1pbXBvcnRlZC9zcmMveyA9PiBtaXNjfS9zeXNsb2cuYyB8IDANCj4gICAyIGZpbGVzIGNoYW5n
ZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pDQo+ICAgcmVuYW1lIG11c2wtaW1wb3J0
ZWQvc3JjL3sgPT4gbWlzY30vc3lzbG9nLmMgKDEwMCUpDQo+DQo+IGRpZmYgLS1naXQgYS9NYWtl
ZmlsZS51ayBiL01ha2VmaWxlLnVrDQo+IGluZGV4IDdlNzJkYTQuLjMzMzA5NjAgMTAwNjQ0DQo+
IC0tLSBhL01ha2VmaWxlLnVrDQo+ICsrKyBiL01ha2VmaWxlLnVrDQo+IEBAIC0xMjQsNyArMTI0
LDcgQEAgTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL2Rldi5jDQo+
ICAgTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL3NpZ25hbC5jDQo+
ICAgTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL2xpbmsuYw0KPiAg
IExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tbnRlbnQuYw0KPiAt
TElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL211c2wtaW1wb3J0ZWQv
c3JjL3N5c2xvZy5jDQo+ICtMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFT
RSkvbXVzbC1pbXBvcnRlZC9zcmMvL21pc2Mvc3lzbG9nLmMNCj4gICBMSUJORVdMSUJHTFVFX1NS
Q1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvbXVzbC1pbXBvcnRlZC9zcmMvdGVybWlvcy90Y3Nl
dGF0dHIuYw0KPiAgIExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9t
dXNsLWltcG9ydGVkL3NyYy90ZXJtaW9zL3RjZ2V0YXR0ci5jDQo+ICAgDQo+IGRpZmYgLS1naXQg
YS9tdXNsLWltcG9ydGVkL3NyYy9zeXNsb2cuYyBiL211c2wtaW1wb3J0ZWQvc3JjL21pc2Mvc3lz
bG9nLmMNCj4gc2ltaWxhcml0eSBpbmRleCAxMDAlDQo+IHJlbmFtZSBmcm9tIG11c2wtaW1wb3J0
ZWQvc3JjL3N5c2xvZy5jDQo+IHJlbmFtZSB0byBtdXNsLWltcG9ydGVkL3NyYy9taXNjL3N5c2xv
Zy5jDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 07:12:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 07:12:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i52z7-00026h-IH; Tue, 03 Sep 2019 07:12:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i52z5-00026c-FC
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 07:12:11 +0000
X-Inumbo-ID: 2486063a-ce1a-11e9-aeaa-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 2486063a-ce1a-11e9-aeaa-12813bfff9fa;
 Tue, 03 Sep 2019 07:12:09 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 79CA7404DE;
 Tue,  3 Sep 2019 09:12:08 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 09:12:05 +0200
Message-Id: <20190903071207.25331-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH 0/2] Changes in support of
 Micropython
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VG93YXJkcyBzdXBwb3J0aW5nIE1pY3JvcHl0aG9uIHdlIGNvbXBpbGUgZ3VhcmQgc29ja2V0LXJl
bGF0ZWQgc291cmNlCmZpbGVzIGFuZCBleHBvc2UgYWRkaXRpb25hbCBzeW1ib2xzIHZpYSBleHBv
cnRzeW1zLnVrLgoKRmVsaXBlIEh1aWNpICgyKToKICBNYWtlZmlsZS51azogR3VhcmQgc29ja2V0
LXJlbGF0ZWQgc291cmNlIGZpbGVzLgogIGV4cG9ydHN5bXMudWs6IGV4cG9zZSBzeW1ib2xzIG5l
ZWRlZCBieSBNaWNyb3B5dGhvbiBwb3J0LgoKIE1ha2VmaWxlLnVrICAgfCAgNCArKystCiBleHBv
cnRzeW1zLnVrIHwgNDQgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIDIgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgMjMgZGVsZXRpb25zKC0pCgot
LSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 07:12:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 07:12:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i52z9-00026s-Jh; Tue, 03 Sep 2019 07:12:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i52z8-00026n-Qe
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 07:12:14 +0000
X-Inumbo-ID: 264b9962-ce1a-11e9-951b-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 264b9962-ce1a-11e9-951b-bc764e2007e4;
 Tue, 03 Sep 2019 07:12:12 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id A8E2A404DE;
 Tue,  3 Sep 2019 09:12:11 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 09:12:07 +0200
Message-Id: <20190903071207.25331-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903071207.25331-1-felipe.huici@neclab.eu>
References: <20190903071207.25331-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH 2/2] exportsyms.uk: expose
 symbols needed by Micropython port.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN5bWJvbHMgKGUuZy4sIGRuc19nZXRob3N0YnluYW1lLCBnZXRuYW1laW5mbykgbmVlZGVk
IGJ5Ck1pY3JvcHl0aG9uLiBBbHNvIGFscGhhYmV0aXplIGxpc3QuCi0tLQogZXhwb3J0c3ltcy51
ayB8IDQ0ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZp
bGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsKaW5kZXggODU2Y2E4Zi4uMzJkZjdmZiAx
MDA2NDQKLS0tIGEvZXhwb3J0c3ltcy51aworKysgYi9leHBvcnRzeW1zLnVrCkBAIC0xLDE1ICsx
LDMzIEBACiBhY2NlcHQKIGJpbmQKIGNvbm5lY3QKK2Ruc19nZXRob3N0YnluYW1lCitlbmRwcm90
b2VudAorZnJlZWFkZHJpbmZvCitnYWlfc3RyZXJyb3IKK2dldGFkZHJpbmZvCitnZXRob3N0Ynlh
ZGRyCitnZXRuYW1laW5mbwogZ2V0cGVlcm5hbWUKK2dldHByb3RvYnluYW1lCitnZXRwcm90b2J5
bnVtYmVyCitnZXRwcm90b2VudAorZ2V0c2VydmJ5bmFtZQorZ2V0c2VydmJ5cG9ydAogZ2V0c29j
a25hbWUKIGdldHNvY2tvcHQKK2hfZXJybm8KK2luZXRfbnRvcAoraW5ldF9wdG9uCitpcDRhZGRy
X2F0b24KK2lwNGFkZHJfbnRvYQoraXBhZGRyX2FkZHIKIGxpYmx3aXBfaW5pdAogbGlzdGVuCi1s
d2lwX2h0b25sCi1sd2lwX2h0b25zCiBsd2lwX2dldGhvc3RieW5hbWUKIGx3aXBfZ2V0aG9zdGJ5
bmFtZV9yCitsd2lwX2h0b25sCitsd2lwX2h0b25zCiBwb2xsCiByZWN2CiByZWN2ZnJvbQpAQCAt
MTcsMjUgKzM1LDcgQEAgc2VsZWN0CiBzZW5kCiBzZW5kbXNnCiBzZW5kdG8KK3NldHByb3RvZW50
CiBzZXRzb2Nrb3B0CiBzaHV0ZG93bgotc29ja2V0Ci1pcDRhZGRyX2F0b24KLWlwNGFkZHJfbnRv
YQotaXBhZGRyX2FkZHIKLWlwNGFkZHJfbnRvYQotaF9lcnJubwotZW5kcHJvdG9lbnQKLXNldHBy
b3RvZW50Ci1nZXRwcm90b2VudAotZ2V0cHJvdG9ieW5hbWUKLWdldHByb3RvYnludW1iZXIKLWdl
dGhvc3RieWFkZHIKLWdldHNlcnZieW5hbWUKLWdldHNlcnZieXBvcnQKLWluZXRfbnRvcAotaW5l
dF9wdG9uCi1nZXRhZGRyaW5mbwotZnJlZWFkZHJpbmZvCi1nYWlfc3RyZXJyb3IKLWdldG5hbWVp
bmZvCitzb2NrZXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjExLjAKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 07:12:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 07:12:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i52zA-00027L-L0; Tue, 03 Sep 2019 07:12:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i52zA-00027C-9a
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 07:12:16 +0000
X-Inumbo-ID: 258db050-ce1a-11e9-aeaa-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 258db050-ce1a-11e9-aeaa-12813bfff9fa;
 Tue, 03 Sep 2019 07:12:10 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 68B8F41688;
 Tue,  3 Sep 2019 09:12:10 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 09:12:06 +0200
Message-Id: <20190903071207.25331-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903071207.25331-1-felipe.huici@neclab.eu>
References: <20190903071207.25331-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH 1/2] Makefile.uk: Guard
 socket-related source files.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UHV0IGNvbXBpbGUgZ3VhcmRzIGFyb3VuZCBzb2NrZXQtcmVsYXRlZCBzb3VyY2UgZmlsZXMgc3Vj
aCB0aGF0IHRoZXkKZG8gbm90IGdldCBjb21waWxlZCBpZiBzb2NrZXRzIGFyZSBkaXNhYmxlZC4K
LS0tCiBNYWtlZmlsZS51ayB8IDQgKysrLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygr
KSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsK
aW5kZXggYzI2NTFkNy4uOTlmYzA2MiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFr
ZWZpbGUudWsKQEAgLTcyLDE2ICs3MiwxOCBAQCBMSUJMV0lQX0NYWEZMQUdTLXkgKz0gLURfX0lO
X0xJQkxXSVBfXwogIyBDb3JlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogTElCTFdJUF9TUkNT
LXkgKz0gJChMSUJMV0lQX0JBU0UpL2FsbG9jLmN8dW5pa3JhZnQKK2lmZXEgKCQoQ09ORklHX0xX
SVBfU09DS0VUKSx5KQogTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQX0JBU0UpL3Byb3RvLmMK
IExJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9CQVNFKS9ob3N0LmMKIExJQkxXSVBfU1JDUy15
ICs9ICQoTElCTFdJUF9CQVNFKS9zZXJ2LmMKK0xJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9C
QVNFKS9pbmV0LmN8dW5pa3JhZnQKK2VuZGlmCiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9U
SFJFQURTKSArPSAkKExJQkxXSVBfQkFTRSkvbXV0ZXguY3x1bmlrcmFmdAogTElCTFdJUF9TUkNT
LSQoQ09ORklHX0xXSVBfVEhSRUFEUykgKz0gJChMSUJMV0lQX0JBU0UpL3NlbWFwaG9yZS5jfHVu
aWtyYWZ0CiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJFQURTKSArPSAkKExJQkxXSVBf
QkFTRSkvbWFpbGJveC5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJF
QURTKSArPSAkKExJQkxXSVBfQkFTRSkvdGhyZWFkcy5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1Mt
eSArPSAkKExJQkxXSVBfQkFTRSkvaW5pdC5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MteSArPSAk
KExJQkxXSVBfQkFTRSkvdGltZS5jfHVuaWtyYWZ0Ci1MSUJMV0lQX1NSQ1MteSArPSAkKExJQkxX
SVBfQkFTRSkvaW5ldC5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9TT0NL
RVQpICs9ICQoTElCTFdJUF9CQVNFKS9zb2NrZXRzLmN8dW5pa3JhZnQKIExJQkxXSVBfU1JDUy0k
KENPTkZJR19MV0lQX1NPQ0tFVCkgKz0gJChMSUJMV0lQX0JBU0UpL2dldG5hbWVpbmZvLmN8dW5p
a3JhZnQKIExJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9FWFRSQUNURUQpL2NvcmUvaW5pdC5j
Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 07:20:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 07:20:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i537P-0002qw-P4; Tue, 03 Sep 2019 07:20:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i537O-0002qp-Ng
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 07:20:46 +0000
X-Inumbo-ID: 58759054-ce1b-11e9-ac23-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 58759054-ce1b-11e9-ac23-bc764e2007e4;
 Tue, 03 Sep 2019 07:20:45 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id D9292404DE;
 Tue,  3 Sep 2019 09:20:44 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 09:20:41 +0200
Message-Id: <20190903072043.26166-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 0/2] Changes in support of
 Micropython
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW50cm9kdWNlIG1pbm9yIGNoYW5nZXMgbmVlZGVkIGJ5IHRoZSB1cGNvbWluZyBNaWNyb3B5dGhv
biBwb3J0LgoKRmVsaXBlIEh1aWNpICgyKToKICBwYXRjaGVzOiBjb21waWxlIGd1YXJkIE1JTi9N
QVgKICBzdGRsaWIuYzogYWRkIHJlYWxwYXRoKCkgc3R1YgoKIE1ha2VmaWxlLnVrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEgKwogcGF0Y2hlcy8wMDA5LWd1YXJkLW1pbi1t
YXgtZGVmaW5pdGlvbnMucGF0Y2ggfCAxNSArKysrKysrKysrKysrKysKIHN0ZGxpYi5jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUgKysrKysKIDMgZmlsZXMgY2hhbmdl
ZCwgMjEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwOS1ndWFy
ZC1taW4tbWF4LWRlZmluaXRpb25zLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3RkbGliLmMK
Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 07:20:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 07:20:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i537U-0002rt-Qg; Tue, 03 Sep 2019 07:20:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i537T-0002re-Od
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 07:20:51 +0000
X-Inumbo-ID: 5940b36a-ce1b-11e9-8980-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 5940b36a-ce1b-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 07:20:47 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 9E4C3404DE;
 Tue,  3 Sep 2019 09:20:46 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 09:20:42 +0200
Message-Id: <20190903072043.26166-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903072043.26166-1-felipe.huici@neclab.eu>
References: <20190903072043.26166-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 1/2] patches: compile
 guard MIN/MAX
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UHV0IGd1YXJkcyBhcm91bmQgZGVmaW5pdGlvbnMgb2YgTUlOL01BWCBtYWNyb3MgdG8gcHJldmVu
dCBkb3VibGUKZGVmaW5pdGlvbiB3YXJuaW5ncy4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWlj
aSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KLS0tCiBwYXRjaGVzLzAwMDktZ3VhcmQtbWluLW1h
eC1kZWZpbml0aW9ucy5wYXRjaCB8IDE1ICsrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs
IDE1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDktZ3VhcmQt
bWluLW1heC1kZWZpbml0aW9ucy5wYXRjaAoKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwOS1ndWFy
ZC1taW4tbWF4LWRlZmluaXRpb25zLnBhdGNoIGIvcGF0Y2hlcy8wMDA5LWd1YXJkLW1pbi1tYXgt
ZGVmaW5pdGlvbnMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4
NmU3MQotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwOS1ndWFyZC1taW4tbWF4LWRlZmlu
aXRpb25zLnBhdGNoCkBAIC0wLDAgKzEsMTUgQEAKKy0tLSBhL25ld2xpYi9saWJjL2luY2x1ZGUv
c3lzL3BhcmFtLmgJMjAxOS0wOC0zMCAxNjoxNTo0OS41OTE3NzU0MjEgKzAyMDAKKysrKyBiL25l
d2xpYi9saWJjL2luY2x1ZGUvc3lzL3BhcmFtLmgJMjAxOS0wOC0zMCAxNjoxNTozOC42NTk4ODg3
NjcgKzAyMDAKK0BAIC0yNSw4ICsyNSwxMiBAQAorIAorICNkZWZpbmUgTUFYUEFUSExFTiBQQVRI
X01BWAorIAorKyNpZm5kZWYgTUFYCisgI2RlZmluZSBNQVgoYSxiKSAoKGEpID4gKGIpID8gKGEp
IDogKGIpKQorKyNlbmRpZgorKyNpZm5kZWYgTUlOCisgI2RlZmluZSBNSU4oYSxiKSAoKGEpIDwg
KGIpID8gKGEpIDogKGIpKQorKyNlbmRpZgorIAorICNpZm5kZWYgaG93bWFueQorICNkZWZpbmUg
ICAgaG93bWFueSh4LCB5KSAgICgoKHgpKygoeSktMSkpLyh5KSkKLS0gCjIuMTEuMAoKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 07:20:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 07:20:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i537Z-0002tJ-TL; Tue, 03 Sep 2019 07:20:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i537Y-0002t4-OW
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 07:20:56 +0000
X-Inumbo-ID: 59b42642-ce1b-11e9-b95f-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 59b42642-ce1b-11e9-b95f-bc764e2007e4;
 Tue, 03 Sep 2019 07:20:47 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 61CEC41688;
 Tue,  3 Sep 2019 09:20:47 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 09:20:43 +0200
Message-Id: <20190903072043.26166-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903072043.26166-1-felipe.huici@neclab.eu>
References: <20190903072043.26166-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 2/2] stdlib.c: add
 realpath() stub
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW50cm9kdWNlIHN0ZGxpYi5jIGFuZCBhZGQgcmVhbHBhdGgoKSBzdHViLgoKU2lnbmVkLW9mZi1i
eTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlLnVr
IHwgMSArCiBzdGRsaWIuYyAgICB8IDUgKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRp
b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3RkbGliLmMKCmRpZmYgLS1naXQgYS9NYWtlZmls
ZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDdlNzJkYTQuLjAyMDEyNGEgMTAwNjQ0Ci0tLSBhL01h
a2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC0xMjEsNiArMTIxLDcgQEAgTElCTkVXTElC
R0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL3B0eS5jCiBMSUJORVdMSUJHTFVFX1NS
Q1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvdGltZS5jfGdsdWUKIExJQk5FV0xJQkdMVUVfU1JD
Uy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9sb2NhbGUuYwogTElCTkVXTElCR0xVRV9TUkNTLXkg
Kz0gJChMSUJORVdMSUJDX0JBU0UpL2Rldi5jCitMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAkKExJ
Qk5FV0xJQkNfQkFTRSkvc3RkbGliLmMKIExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVX
TElCQ19CQVNFKS9zaWduYWwuYwogTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJD
X0JBU0UpL2xpbmsuYwogTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0Up
L21udGVudC5jCmRpZmYgLS1naXQgYS9zdGRsaWIuYyBiL3N0ZGxpYi5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmNThkMGQKLS0tIC9kZXYvbnVsbAorKysgYi9zdGRsaWIu
YwpAQCAtMCwwICsxLDUgQEAKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworY2hhciAqcmVhbHBhdGgo
Y29uc3QgY2hhciAqcmVzdHJpY3QgZmlsZV9uYW1lLCBjaGFyICpyZXN0cmljdCByZXNvbHZlZF9u
YW1lKSB7CisgIHJldHVybiAwOworfQotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 08:02:50 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 08:02:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i53m5-0006oP-8W; Tue, 03 Sep 2019 08:02:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i53m4-0006oK-BE
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 08:02:48 +0000
X-Inumbo-ID: 36abe828-ce21-11e9-aeab-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 36abe828-ce21-11e9-aeab-12813bfff9fa;
 Tue, 03 Sep 2019 08:02:46 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 7BDADF2029;
 Tue,  3 Sep 2019 10:02:45 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UksAiZ6WJALz; Tue,  3 Sep 2019 10:02:45 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 482A4F2027
 for <minios-devel@lists.xen.org>; Tue,  3 Sep 2019 10:02:43 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 10:02:42 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 10:02:42
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBLWIP PATCH 0/2] Changes in support of Micropython
Thread-Index: AQHVYibm5bFwXHwW5EKU79YaDK6/fqcZl54A
Date: Tue, 3 Sep 2019 08:02:42 +0000
Message-ID: <33A857EB-3E92-43F6-B48B-8DA610A3CE82@neclab.eu>
References: <20190903071207.25331-1-felipe.huici@neclab.eu>
In-Reply-To: <20190903071207.25331-1-felipe.huici@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <8A3B6A2A9A085849A04180F8AFE9B095@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH 0/2] Changes in support
 of Micropython
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksDQoNClBsZWFzZSBpZ25vcmUgdGhpcyB2ZXJzaW9uLCBpdCdzIG1pc3NpbmcgYWRkaXRpb25h
bCBzeW1ib2xzIGZvciBleHBvcnRzeW1zLnVrLiBJJ2xsIHNlbmQgYSB2MiBzaG9ydGx5Lg0KDQpU
aGFua3MsDQoNCi0tIEZlbGlwZQ0KDQrvu79PbiAwMy4wOS4xOSwgMDk6MTIsICJGZWxpcGUgSHVp
Y2kiIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFRvd2FyZHMgc3VwcG9y
dGluZyBNaWNyb3B5dGhvbiB3ZSBjb21waWxlIGd1YXJkIHNvY2tldC1yZWxhdGVkIHNvdXJjZQ0K
ICAgIGZpbGVzIGFuZCBleHBvc2UgYWRkaXRpb25hbCBzeW1ib2xzIHZpYSBleHBvcnRzeW1zLnVr
Lg0KICAgIA0KICAgIEZlbGlwZSBIdWljaSAoMik6DQogICAgICBNYWtlZmlsZS51azogR3VhcmQg
c29ja2V0LXJlbGF0ZWQgc291cmNlIGZpbGVzLg0KICAgICAgZXhwb3J0c3ltcy51azogZXhwb3Nl
IHN5bWJvbHMgbmVlZGVkIGJ5IE1pY3JvcHl0aG9uIHBvcnQuDQogICAgDQogICAgIE1ha2VmaWxl
LnVrICAgfCAgNCArKystDQogICAgIGV4cG9ydHN5bXMudWsgfCA0NCArKysrKysrKysrKysrKysr
KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICAyIGZpbGVzIGNoYW5nZWQsIDI1IGlu
c2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQ0KICAgIA0KICAgIC0tIA0KICAgIDIuMTEuMA0K
ICAgIA0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 08:03:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 08:03:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i53n1-0006q4-CD; Tue, 03 Sep 2019 08:03:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i53mz-0006pu-Pr
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 08:03:45 +0000
X-Inumbo-ID: 59f4f054-ce21-11e9-aeab-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 59f4f054-ce21-11e9-aeab-12813bfff9fa;
 Tue, 03 Sep 2019 08:03:45 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id CB78B41688;
 Tue,  3 Sep 2019 10:03:44 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 10:03:41 +0200
Message-Id: <20190903080343.15931-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903080343.15931-1-felipe.huici@neclab.eu>
References: <20190903080343.15931-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 1/3] Makefile.uk: Guard
 socket-related source files.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UHV0IGNvbXBpbGUgZ3VhcmRzIGFyb3VuZCBzb2NrZXQtcmVsYXRlZCBzb3VyY2UgZmlsZXMgc3Vj
aCB0aGF0IHRoZXkKZG8gbm90IGdldCBjb21waWxlZCBpZiBzb2NrZXRzIGFyZSBkaXNhYmxlZC4K
ClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KLS0t
CiBNYWtlZmlsZS51ayB8IDQgKysrLQogMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKSwg
MSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5k
ZXggYzI2NTFkNy4uOTlmYzA2MiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZp
bGUudWsKQEAgLTcyLDE2ICs3MiwxOCBAQCBMSUJMV0lQX0NYWEZMQUdTLXkgKz0gLURfX0lOX0xJ
QkxXSVBfXwogIyBDb3JlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogTElCTFdJUF9TUkNTLXkg
Kz0gJChMSUJMV0lQX0JBU0UpL2FsbG9jLmN8dW5pa3JhZnQKK2lmZXEgKCQoQ09ORklHX0xXSVBf
U09DS0VUKSx5KQogTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQX0JBU0UpL3Byb3RvLmMKIExJ
QkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9CQVNFKS9ob3N0LmMKIExJQkxXSVBfU1JDUy15ICs9
ICQoTElCTFdJUF9CQVNFKS9zZXJ2LmMKK0xJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9CQVNF
KS9pbmV0LmN8dW5pa3JhZnQKK2VuZGlmCiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJF
QURTKSArPSAkKExJQkxXSVBfQkFTRSkvbXV0ZXguY3x1bmlrcmFmdAogTElCTFdJUF9TUkNTLSQo
Q09ORklHX0xXSVBfVEhSRUFEUykgKz0gJChMSUJMV0lQX0JBU0UpL3NlbWFwaG9yZS5jfHVuaWty
YWZ0CiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJFQURTKSArPSAkKExJQkxXSVBfQkFT
RSkvbWFpbGJveC5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJFQURT
KSArPSAkKExJQkxXSVBfQkFTRSkvdGhyZWFkcy5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MteSAr
PSAkKExJQkxXSVBfQkFTRSkvaW5pdC5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MteSArPSAkKExJ
QkxXSVBfQkFTRSkvdGltZS5jfHVuaWtyYWZ0Ci1MSUJMV0lQX1NSQ1MteSArPSAkKExJQkxXSVBf
QkFTRSkvaW5ldC5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9TT0NLRVQp
ICs9ICQoTElCTFdJUF9CQVNFKS9zb2NrZXRzLmN8dW5pa3JhZnQKIExJQkxXSVBfU1JDUy0kKENP
TkZJR19MV0lQX1NPQ0tFVCkgKz0gJChMSUJMV0lQX0JBU0UpL2dldG5hbWVpbmZvLmN8dW5pa3Jh
ZnQKIExJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9FWFRSQUNURUQpL2NvcmUvaW5pdC5jCi0t
IAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 08:03:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 08:03:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i53n1-0006q9-Db; Tue, 03 Sep 2019 08:03:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i53n0-0006pz-5o
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 08:03:46 +0000
X-Inumbo-ID: 59ad3cfa-ce21-11e9-8980-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 59ad3cfa-ce21-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 08:03:44 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 1C894404DE;
 Tue,  3 Sep 2019 10:03:44 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 10:03:40 +0200
Message-Id: <20190903080343.15931-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 0/3] Changes in support
 of Micropython
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VG93YXJkcyBzdXBwb3J0aW5nIE1pY3JvcHl0aG9uIHdlIGNvbXBpbGUgZ3VhcmQgc29ja2V0LXJl
bGF0ZWQgc291cmNlCmZpbGVzIGFuZCBleHBvc2UgYWRkaXRpb25hbCBzeW1ib2xzIHZpYSBleHBv
cnRzeW1zLnVrLgoKRmVsaXBlIEh1aWNpICgzKToKICBNYWtlZmlsZS51azogR3VhcmQgc29ja2V0
LXJlbGF0ZWQgc291cmNlIGZpbGVzLgogIGV4cG9ydHN5bXMudWs6IGV4cG9zZSBzeW1ib2xzIG5l
ZWRlZCBieSBNaWNyb3B5dGhvbiBwb3J0LgogIGV4cG9ydHN5bXMudWs6IEFscGhhYmV0aXplIHN5
bWJvbCBsaXN0LgoKIE1ha2VmaWxlLnVrICAgfCAgNCArKystCiBleHBvcnRzeW1zLnVrIHwgNzAg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0t
LS0KIDIgZmlsZXMgY2hhbmdlZCwgNTIgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgot
LSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 08:03:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 08:03:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i53n6-0006rH-H2; Tue, 03 Sep 2019 08:03:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i53n5-0006r0-1r
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 08:03:51 +0000
X-Inumbo-ID: 5ab7b454-ce21-11e9-b95f-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 5ab7b454-ce21-11e9-b95f-bc764e2007e4;
 Tue, 03 Sep 2019 08:03:46 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 1D74E404DE;
 Tue,  3 Sep 2019 10:03:46 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 10:03:43 +0200
Message-Id: <20190903080343.15931-4-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903080343.15931-1-felipe.huici@neclab.eu>
References: <20190903080343.15931-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 3/3] exportsyms.uk:
 Alphabetize symbol list.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VG8gZW5oYW5jZSByZWFkYWJpbHR5IHdlIGFscGhhYmV0aXplIHRoZSBsaXN0IG9mIGV4cG9ydGVk
IHN5bWJvbHMuIEFsbApVbmlrcmFmdCBsaWJzIHNob3VsZCBmb2xsb3cgdGhpcyBpbiB0aGUgZnV0
dXJlLgoKU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1
PgotLS0KIGV4cG9ydHN5bXMudWsgfCA1MyArKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyks
IDI3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1z
LnVrCmluZGV4IDFmMTFmNmQuLjY3NjMyNDUgMTAwNjQ0Ci0tLSBhL2V4cG9ydHN5bXMudWsKKysr
IGIvZXhwb3J0c3ltcy51awpAQCAtMSwxNSArMSwzOCBAQAogYWNjZXB0CiBiaW5kCiBjb25uZWN0
CitlbmRwcm90b2VudAorZnJlZWFkZHJpbmZvCitnYWlfc3RyZXJyb3IKK2dldGFkZHJpbmZvCitn
ZXRob3N0YnlhZGRyCitnZXRuYW1laW5mbwogZ2V0cGVlcm5hbWUKK2dldHByb3RvYnluYW1lCitn
ZXRwcm90b2J5bnVtYmVyCitnZXRwcm90b2VudAorZ2V0c2VydmJ5bmFtZQorZ2V0c2VydmJ5cG9y
dAogZ2V0c29ja25hbWUKIGdldHNvY2tvcHQKK2hfZXJybm8KK2lnbXBfam9pbmdyb3VwCitpbmV0
X250b3AKK2luZXRfcHRvbgoraXA0YWRkcl9hdG9uCitpcDRhZGRyX250b2EKK2lwYWRkcl9hZGRy
CiBsaWJsd2lwX2luaXQKIGxpc3RlbgotbHdpcF9odG9ubAotbHdpcF9odG9ucwogbHdpcF9nZXRo
b3N0YnluYW1lCiBsd2lwX2dldGhvc3RieW5hbWVfcgorbHdpcF9odG9ubAorbHdpcF9odG9ucwor
cGJ1Zl9hbGxvYworcGJ1Zl9jYXQKK3BidWZfY29weV9wYXJ0aWFsCitwYnVmX2ZyZWUKK3BidWZf
cmVmCiBwb2xsCiByZWN2CiByZWN2ZnJvbQpAQCAtMTcsMzQgKzQwLDEwIEBAIHNlbGVjdAogc2Vu
ZAogc2VuZG1zZwogc2VuZHRvCitzZXRwcm90b2VudAogc2V0c29ja29wdAogc2h1dGRvd24KIHNv
Y2tldAotaXA0YWRkcl9hdG9uCi1pcDRhZGRyX250b2EKLWlwYWRkcl9hZGRyCi1pcDRhZGRyX250
b2EKLWhfZXJybm8KLWVuZHByb3RvZW50Ci1zZXRwcm90b2VudAotZ2V0cHJvdG9lbnQKLWdldHBy
b3RvYnluYW1lCi1nZXRwcm90b2J5bnVtYmVyCi1nZXRob3N0YnlhZGRyCi1nZXRzZXJ2YnluYW1l
Ci1nZXRzZXJ2Ynlwb3J0Ci1pbmV0X250b3AKLWluZXRfcHRvbgotZ2V0YWRkcmluZm8KLWZyZWVh
ZGRyaW5mbwotZ2FpX3N0cmVycm9yCi1nZXRuYW1laW5mbwotaWdtcF9qb2luZ3JvdXAKLXBidWZf
YWxsb2MKLXBidWZfY2F0Ci1wYnVmX2NvcHlfcGFydGlhbAotcGJ1Zl9mcmVlCi1wYnVmX3JlZgog
c3lzX2NoZWNrX3RpbWVvdXRzCiB0Y3BfYWJvcnQKIHRjcF9hY2NlcHQKLS0gCjIuMTEuMAoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 08:03:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 08:03:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i53n6-0006rC-Ex; Tue, 03 Sep 2019 08:03:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i53n4-0006qs-Ps
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 08:03:50 +0000
X-Inumbo-ID: 59f4f055-ce21-11e9-aeab-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 59f4f055-ce21-11e9-aeab-12813bfff9fa;
 Tue, 03 Sep 2019 08:03:45 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 8EBF7418A3;
 Tue,  3 Sep 2019 10:03:45 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 10:03:42 +0200
Message-Id: <20190903080343.15931-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903080343.15931-1-felipe.huici@neclab.eu>
References: <20190903080343.15931-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 2/3] exportsyms.uk:
 expose symbols needed by Micropython port.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN5bWJvbHMgKGUuZy4sIGRuc19nZXRob3N0YnluYW1lLCBnZXRuYW1laW5mbykgbmVlZGVk
IGJ5Ck1pY3JvcHl0aG9uLgoKU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVp
Y2lAbmVjbGFiLmV1PgotLS0KIGV4cG9ydHN5bXMudWsgfCAyOSArKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg
YS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51awppbmRleCA4NTZjYThmLi4xZjExZjZkIDEw
MDY0NAotLS0gYS9leHBvcnRzeW1zLnVrCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTM5LDMgKzM5
LDMyIEBAIGdldGFkZHJpbmZvCiBmcmVlYWRkcmluZm8KIGdhaV9zdHJlcnJvcgogZ2V0bmFtZWlu
Zm8KK2lnbXBfam9pbmdyb3VwCitwYnVmX2FsbG9jCitwYnVmX2NhdAorcGJ1Zl9jb3B5X3BhcnRp
YWwKK3BidWZfZnJlZQorcGJ1Zl9yZWYKK3N5c19jaGVja190aW1lb3V0cwordGNwX2Fib3J0Cit0
Y3BfYWNjZXB0Cit0Y3BfYXJnCit0Y3BfYmluZAordGNwX2Nsb3NlCit0Y3BfY29ubmVjdAordGNw
X2VycgordGNwX2xpc3Rlbl93aXRoX2JhY2tsb2cKK3RjcF9uZXcKK3RjcF9vdXRwdXQKK3RjcF9w
b2xsCit0Y3BfcmVjdgordGNwX3JlY3ZlZAordGNwX3dyaXRlCit1ZHBfYmluZAordWRwX2Nvbm5l
Y3QKK3VkcF9uZXcKK3VkcF9yZWN2Cit1ZHBfcmVtb3ZlCit1ZHBfc2VuZAordWRwX3NlbmR0bwor
dWtuZXRkZXZfcG9sbF9hbGwKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 08:13:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 08:13:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i53w3-0007ax-8O; Tue, 03 Sep 2019 08:13:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=cx96=W6=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i53w2-0007as-56
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 08:13:06 +0000
X-Inumbo-ID: a1fc5a94-ce22-11e9-8980-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id a1fc5a94-ce22-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 08:12:55 +0000 (UTC)
IronPort-SDR: hO95MKCPPmtrPLlHumEv4818k9gnqLR5pav82QXqH7C+LTu1yX1u6PbgfYn/nyo5axdK6VpfH8
 lFiOA4BKV/Vw==
IronPort-PHdr: =?us-ascii?q?9a23=3ApYlDuxcMLy5me54TmjsPE4cJlGMj4u6mDksu8p?=
 =?us-ascii?q?Mizoh2WeGdxcSzYR7h7PlgxGXEQZ/co6odzbaP6ea5BjVLuMzf+Fk5M7V0Hy?=
 =?us-ascii?q?cfjssXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFR?=
 =?us-ascii?q?rwLxd6KfroEYDOkcu3y/qy+5rOaAlUmTaxe7x/IAiooQnLq8Ubg5ZuJqksxh?=
 =?us-ascii?q?fXo3ZDZvhby35vKV+PhRj3+92+/IRk8yReuvIh89BPXKDndKkmTrJWESorPX?=
 =?us-ascii?q?kt6MLkqRfMQw2P5mABUmoNiRpHHxLF7BDhUZjvtCbxq/dw1zObPc3ySrA0RC?=
 =?us-ascii?q?ii4qJ2QxLmlCsLKzg0+3zRh8dtjqxUvQihqgR/zYDKfY+bOvlwcKTGcN8GWW?=
 =?us-ascii?q?ZMRNpdWjZdDo+gaYYEEuoPPfxfr4n4v1YDsxy+BRKwBOPuzD9Dm3n43bAi0+?=
 =?us-ascii?q?Q8DArL2xAvH9UVsHTIrdX1Mr0eUeSozKnQ0DXOdO9Z2Szn5IjQbxAuuuuAXa?=
 =?us-ascii?q?h3ccfIz0QkCgDLjk2IpID4MD6Zy/4Bvmub4uZ6S+6jlWwqpxt/rzS328shhZ?=
 =?us-ascii?q?TFipgWx13E7yl13og4KNOiREJmbtOoDp1dvDyAOYRsWMMtWWRotT4/yr0BpJ?=
 =?us-ascii?q?G0YjAHyI8ixx7Dc/yHdJWI4g77WOaRPzh4gHVldaqhhxa360egy+n8WtOo31?=
 =?us-ascii?q?ZRtCZFisTMuWsX2xzJ7ciLUvp9/kG/1jaTzw3f9+5JLV0umafYK5Mt2KA8mo?=
 =?us-ascii?q?QRvEjZECL6gED2g7WXdkUg9Oio8ePnYrD+q5CAMI90kR3+MqUomsClBeQ4Lx?=
 =?us-ascii?q?AOX3WA9Ougz73v51X5QKhRgfEsiKnZt4jWJd4Hqa6hHw9VzoEj5g6jADehy9?=
 =?us-ascii?q?QYgXgHLFRfdBKDkojpI0rDIP/9DfilglSslC1nyOzBPr3kGp/NNGTMkK/9fb?=
 =?us-ascii?q?Zh7E5R0A8zzdFZ55JVDbEBO+v/VVLvu9zGEBA5Nxe5w+LmCNVmyoMeQniDA6?=
 =?us-ascii?q?CHP6PUq1OI4fgvI+aUbo8PpDn9M+Ql5+LpjXIhh18debOm0oYPZ3+iGPRpPl?=
 =?us-ascii?q?+ZbmTtgtsbCmgFpBcxTOvriF2fSjNTfGqyX78h6T0hEo2pEZzDSpqwgLyZxy?=
 =?us-ascii?q?i3BIdWZmcVQmyLRHLpcYSDQLIAZTyfJudlkycYTv6xRoln0guh5yHgzL8yBe?=
 =?us-ascii?q?3P5iwe/bb+zMU9s+bUjg0z83pwEtyA+2qWCXlplCUSQGllj+hEvUVhxwLbgu?=
 =?us-ascii?q?BDiPtCGIkL6g=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CKBQAPIG5d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYIBIqjR2SAJE0CQEBAToBAgEBhD+DEzgTAgMIAQEFAQEBAQEGBAFshTq?=
 =?us-ascii?q?COiKDbjAfM0+DIoFrAyGrYIVKgkgNYYFJgTSHH4YxP4RhghqBc4EEhRYElgi?=
 =?us-ascii?q?VUUAHgiJiBI95g3AngiOWQgGXbpAoOCGBWDMag1+CFwEzGo4lPQEBMYEGAQG?=
 =?us-ascii?q?MDIJUAQE?=
X-IPAS-Result: =?us-ascii?q?A2CKBQAPIG5d/wPjVY1lHQEBBQEHBQGBZ4NYIBIqjR2SA?=
 =?us-ascii?q?JE0CQEBAToBAgEBhD+DEzgTAgMIAQEFAQEBAQEGBAFshTqCOiKDbjAfM0+DI?=
 =?us-ascii?q?oFrAyGrYIVKgkgNYYFJgTSHH4YxP4RhghqBc4EEhRYElgiVUUAHgiJiBI95g?=
 =?us-ascii?q?3AngiOWQgGXbpAoOCGBWDMag1+CFwEzGo4lPQEBMYEGAQGMDIJUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,462,1559509200"; 
   d="scan'208";a="4695651"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 03 Sep 2019 11:12:54 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2B3F21A600FD;
 Tue,  3 Sep 2019 11:12:54 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id OCdPA9cKf-Cg; Tue,  3 Sep 2019 11:12:54 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 115751A6018A;
 Tue,  3 Sep 2019 11:12:54 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 6_dePUigjaEM; Tue,  3 Sep 2019 11:12:54 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id E73671A600FD;
 Tue,  3 Sep 2019 11:12:53 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 11:12:50 +0300
Message-Id: <20190903081250.3812-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH] lib/ukswrand: Fix reading from
 devices
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Costin Lupu <costin.lup@gmail.com>, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXBAZ21haWwuY29tPgoKU2lnbmVkLW9mZi1ieTog
Q29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvdWtzd3JhbmQvbXdj
X2Rldi5jIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9u
KC0pCgpkaWZmIC0tZ2l0IGEvbGliL3Vrc3dyYW5kL213Y19kZXYuYyBiL2xpYi91a3N3cmFuZC9t
d2NfZGV2LmMKaW5kZXggNWE5YzBkNDkuLjVhNGNiMTAwIDEwMDY0NAotLS0gYS9saWIvdWtzd3Jh
bmQvbXdjX2Rldi5jCisrKyBiL2xpYi91a3N3cmFuZC9td2NfZGV2LmMKQEAgLTYwLDcgKzYwLDcg
QEAgaW50IGRldl9yYW5kb21fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYgX191bnVzZWQsIHN0cnVj
dCB1aW8gKnVpbywKIAljaHVua19zaXplID0gY291bnQgJSBzdGVwOwogCiAJZm9yIChpID0gMDsg
aSA8IGNvdW50IC0gY2h1bmtfc2l6ZTsgaSArPSBzdGVwKQotCQkqKChfX3UzMiAqKWJ1ZiArIGkp
ID0gdWtfc3dyYW5kX3JhbmRyKCk7CisJCSooYnVmICsgaSkgPSB1a19zd3JhbmRfcmFuZHIoKTsK
IAogCS8qIGZpbGwgdGhlIHJlbWFpbmluZyBieXRlcyBvZiB0aGUgYnVmZmVyICovCiAJaWYgKGNo
dW5rX3NpemUgPiAwKSB7Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 08:27:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 08:27:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i54A4-0008P4-DM; Tue, 03 Sep 2019 08:27:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i54A3-0008Oz-FW
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 08:27:35 +0000
X-Inumbo-ID: addf91da-ce24-11e9-8980-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id addf91da-ce24-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 08:27:34 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id c10so5154068wmc.0
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 01:27:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=DI3LLmq7G7eoyznX3wYWURNwMZJcqnpJTyUHylUSM0A=;
 b=oYI9N1FtpiXk4ShZOfYj9VY+izribxeGUBaM+1MpfcQVhOGlJQhdrEjMHtRIKPkLHt
 ciaiiNrSSwUaUgc6Hu1U3BkZpl02GrgEwHyj326EJLOQZukgrqvav6I/COUa+DcwaP+I
 Fd2umbwqHGFEoBpIaDMHLqd3hIplrTbka7QkhpJML0XDwBYtPNOEmZMbFMHBjWP00s41
 62tuO74pBABPKHta4a6wrhsRoHRgRPM2/GT6UgSouLM4DwIQmYstZ+hXoCWqImLF6GvI
 H6BYlnIr20und0m1BKgGevWKQzWCT+dsLHffbnoXMbnboV98Hc0dRGNqEqtVniezC+yx
 4CEQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=DI3LLmq7G7eoyznX3wYWURNwMZJcqnpJTyUHylUSM0A=;
 b=hgYPjd+FBrwuDdk393zPIWYEKiWAcd4TNZaG+BhhTt6+G7ygcBuxDjTuW2VkRdwdsU
 YIEjIU8zJdP4rjUEqNlT54jHcjGxqXBe6MTQkcYO4RgOWGbWwdab/NpA97eiSmfJhIJt
 wwjzYBWV8ZFEJMF96QdtEQuYkYNPJYQPrsvbAwj+Nta05bnfERJfvVT9juHe/Q4vsyLr
 nQErCZzPjs/KIDlxgOikCZkXqPAfu7bMHXobF2b/spBEhPYDmkzQzR51xIQoywT8mpas
 r0BF5HEsLoQeBqdUKWpMLkJOBXXrril3zp1L4vkw5aUCghFb65AdbQHCt9Slalt1uyi8
 UcbQ==
X-Gm-Message-State: APjAAAVof5CJ8tdi3CGEy/fPz3oysNQ1tQ2SeA9OUS1ZrmVJAZ/37t3M
 xTzUTm2TyckVNnS8L+v4B4x0XnH5
X-Google-Smtp-Source: APXvYqz5zvgzzgyQ8CxFMtwBJxrL8oQccQ3Ui97STC16zaCs2Kqi3EWdSb0YVmJ9/ZR9cwEJOw7alg==
X-Received: by 2002:a05:600c:29a:: with SMTP id
 26mr20878625wmk.8.1567499253641; 
 Tue, 03 Sep 2019 01:27:33 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id j26sm10319797wrd.2.2019.09.03.01.27.32
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 01:27:32 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190903072043.26166-1-felipe.huici@neclab.eu>
 <20190903072043.26166-3-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <495223d0-d5df-87c7-5c43-806acf9b3da3@gmail.com>
Date: Tue, 3 Sep 2019 11:27:32 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903072043.26166-3-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 2/2] stdlib.c: add
 realpath() stub
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKSSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBnbyBhdCB0aGUgZW5kIG9m
IGZpbGUuYy4gQWxzbywgcGxlYXNlIGZpeAp0aGUgY2hlY2twYXRjaCBpc3N1ZXMuCgpDaGVlcnMs
CkNvc3RpbgoKT24gOS8zLzE5IDEwOjIwIEFNLCBGZWxpcGUgSHVpY2kgd3JvdGU6Cj4gSW50cm9k
dWNlIHN0ZGxpYi5jIGFuZCBhZGQgcmVhbHBhdGgoKSBzdHViLgo+IAo+IFNpZ25lZC1vZmYtYnk6
IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiAtLS0KPiAgTWFrZWZpbGUu
dWsgfCAxICsKPiAgc3RkbGliLmMgICAgfCA1ICsrKysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgNiBp
bnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdGRsaWIuYwo+IAo+IGRpZmYgLS1n
aXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCj4gaW5kZXggN2U3MmRhNC4uMDIwMTI0YSAx
MDA2NDQKPiAtLS0gYS9NYWtlZmlsZS51awo+ICsrKyBiL01ha2VmaWxlLnVrCj4gQEAgLTEyMSw2
ICsxMjEsNyBAQCBMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvcHR5
LmMKPiAgTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL3RpbWUuY3xn
bHVlCj4gIExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9sb2NhbGUu
Ywo+ICBMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvZGV2LmMKPiAr
TElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL3N0ZGxpYi5jCj4gIExJ
Qk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9zaWduYWwuYwo+ICBMSUJO
RVdMSUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvbGluay5jCj4gIExJQk5FV0xJ
QkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tbnRlbnQuYwo+IGRpZmYgLS1naXQg
YS9zdGRsaWIuYyBiL3N0ZGxpYi5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw
MDAwLi43ZjU4ZDBkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3N0ZGxpYi5jCj4gQEAgLTAsMCAr
MSw1IEBACj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArCj4gK2NoYXIgKnJlYWxwYXRoKGNvbnN0
IGNoYXIgKnJlc3RyaWN0IGZpbGVfbmFtZSwgY2hhciAqcmVzdHJpY3QgcmVzb2x2ZWRfbmFtZSkg
ewo+ICsgIHJldHVybiAwOwo+ICt9Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 09:10:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 09:10:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i54pS-0003bV-5U; Tue, 03 Sep 2019 09:10:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i54pR-0003ay-0y
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 09:10:21 +0000
X-Inumbo-ID: a715f2ee-ce2a-11e9-b95f-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a715f2ee-ce2a-11e9-b95f-bc764e2007e4;
 Tue, 03 Sep 2019 09:10:20 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id n10so6606090wmj.0
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 02:10:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=EhbB9Fv7e6FuJgr2DPO7Lie84Jed2DlPwXBsvwZPeGU=;
 b=XlC43I27qTj7XuV0K6AnH6dr0rywO6xMmqNNllEw4ZqPeytboe2vR8IF9HmnCHrrsH
 YOYhEbPvUCXIJbbzBoFUVelGuDh+gYlYZQRe5zeZa+IxUrjfYTcwFsFyUeN8oPp9PelV
 7x3pFp56VE/dnsnGadnXKjnrVVy6f8fymk3PmRHN5zPW1w7v47/rxZ9ONQy/t5KNnLl/
 RUUmdiRsQF3sjzMfzG94fBhld0jb389wF5TnBGPt5SVVD6kWvOTpJPxX3uFA28VceBzI
 jbqxkpGCXep8VikgPOnCy6oY2QjKwX6xXuYOae7goJm+zd2+fU+U+Z2dkcWwRlotyzaK
 kOzA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=EhbB9Fv7e6FuJgr2DPO7Lie84Jed2DlPwXBsvwZPeGU=;
 b=j+anDjNZLY+qqr8RTBRhprZzCA/UZOnPSBupVUJiZuRF2XD9n4g4PXlXp5BRo3Ql5Z
 XvqzsGdU7EKijs/fjYfgw5Hw3EIwDSG6AQEndZ+fdk1WDAOZIEdprBSR7JxkXiwSQKtq
 cttrkD1Ar0Z2BigmGb4YSDu7BnrEnETBloUjqSJaZqg3G6BwplECVsn0h7eqRKgcUC6z
 mRtJEMgQzlxL8GTukPxfl4bTgHGgeEdkHuArrddxFz8A/SujL2rx1xbjgVnOdFSU+wql
 Q4VPExY91yFd0ENVRTgmDGLjOqH0J1NIN2HSWUSGmjlTvSszKVzxcI7SC5NQo7nRy1w4
 PxEQ==
X-Gm-Message-State: APjAAAUNp5P4gPtXFRVnMQ3Nu2j2Ie0sSFbJaKTl5H36KiAR816DIYB7
 OFZI5EbwhRWttkRg6GBROopivHoy
X-Google-Smtp-Source: APXvYqwLTUgrvIS0+jeYX6Ic7eTYjwcmMsO/CWfwz7z+Ob8gOWU9h3bmFgCdDxEWY/67N9AX4cSvLQ==
X-Received: by 2002:a7b:ca50:: with SMTP id m16mr14510048wml.158.1567501819070; 
 Tue, 03 Sep 2019 02:10:19 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id v6sm36453060wma.24.2019.09.03.02.10.17
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 02:10:18 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190903080343.15931-1-felipe.huici@neclab.eu>
 <20190903080343.15931-2-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <5deeb86c-82ed-ddb3-2921-835981698cd5@gmail.com>
Date: Tue, 3 Sep 2019 12:10:17 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903080343.15931-2-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 1/3] Makefile.uk:
 Guard socket-related source files.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBGZWxpcGUhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNz
LnB1Yi5ybz4KCk9uIDkvMy8xOSAxMTowMyBBTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IFB1dCBj
b21waWxlIGd1YXJkcyBhcm91bmQgc29ja2V0LXJlbGF0ZWQgc291cmNlIGZpbGVzIHN1Y2ggdGhh
dCB0aGV5Cj4gZG8gbm90IGdldCBjb21waWxlZCBpZiBzb2NrZXRzIGFyZSBkaXNhYmxlZC4KPiAK
PiBTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4g
LS0tCj4gIE1ha2VmaWxlLnVrIHwgNCArKystCj4gIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlv
bnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtl
ZmlsZS51awo+IGluZGV4IGMyNjUxZDcuLjk5ZmMwNjIgMTAwNjQ0Cj4gLS0tIGEvTWFrZWZpbGUu
dWsKPiArKysgYi9NYWtlZmlsZS51awo+IEBAIC03MiwxNiArNzIsMTggQEAgTElCTFdJUF9DWFhG
TEFHUy15ICs9IC1EX19JTl9MSUJMV0lQX18KPiAgIyBDb3JlCj4gICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCj4gIExJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9CQVNFKS9hbGxvYy5jfHVuaWty
YWZ0Cj4gK2lmZXEgKCQoQ09ORklHX0xXSVBfU09DS0VUKSx5KQo+ICBMSUJMV0lQX1NSQ1MteSAr
PSAkKExJQkxXSVBfQkFTRSkvcHJvdG8uYwo+ICBMSUJMV0lQX1NSQ1MteSArPSAkKExJQkxXSVBf
QkFTRSkvaG9zdC5jCj4gIExJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9CQVNFKS9zZXJ2LmMK
PiArTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQX0JBU0UpL2luZXQuY3x1bmlrcmFmdAo+ICtl
bmRpZgo+ICBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJFQURTKSArPSAkKExJQkxXSVBf
QkFTRSkvbXV0ZXguY3x1bmlrcmFmdAo+ICBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJF
QURTKSArPSAkKExJQkxXSVBfQkFTRSkvc2VtYXBob3JlLmN8dW5pa3JhZnQKPiAgTElCTFdJUF9T
UkNTLSQoQ09ORklHX0xXSVBfVEhSRUFEUykgKz0gJChMSUJMV0lQX0JBU0UpL21haWxib3guY3x1
bmlrcmFmdAo+ICBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9USFJFQURTKSArPSAkKExJQkxX
SVBfQkFTRSkvdGhyZWFkcy5jfHVuaWtyYWZ0Cj4gIExJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJ
UF9CQVNFKS9pbml0LmN8dW5pa3JhZnQKPiAgTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQX0JB
U0UpL3RpbWUuY3x1bmlrcmFmdAo+IC1MSUJMV0lQX1NSQ1MteSArPSAkKExJQkxXSVBfQkFTRSkv
aW5ldC5jfHVuaWtyYWZ0Cj4gIExJQkxXSVBfU1JDUy0kKENPTkZJR19MV0lQX1NPQ0tFVCkgKz0g
JChMSUJMV0lQX0JBU0UpL3NvY2tldHMuY3x1bmlrcmFmdAo+ICBMSUJMV0lQX1NSQ1MtJChDT05G
SUdfTFdJUF9TT0NLRVQpICs9ICQoTElCTFdJUF9CQVNFKS9nZXRuYW1laW5mby5jfHVuaWtyYWZ0
Cj4gIExJQkxXSVBfU1JDUy15ICs9ICQoTElCTFdJUF9FWFRSQUNURUQpL2NvcmUvaW5pdC5jCj4g
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 09:10:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 09:10:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i54ph-0003cb-8J; Tue, 03 Sep 2019 09:10:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i54pf-0003cU-Sa
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 09:10:35 +0000
X-Inumbo-ID: afffc0ce-ce2a-11e9-b95f-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id afffc0ce-ce2a-11e9-b95f-bc764e2007e4;
 Tue, 03 Sep 2019 09:10:35 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id u16so16614902wrr.0
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 02:10:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=fboa4SkKpV0tB4MjTvzH60cFqT5HP1Q+qLPqWMxlDOs=;
 b=n7Qw9cB4cRAGOaeLhqRoXVei9qRFJ4+ZRmVTW3QpL6kRFXvOJWs1pK6bp9sHYDYGoj
 iPtdfqs8iELLUAoiu2W1y14P53w65iOFtLj0/45PMp7NGMVxEmHpCFqoabU1V9RAgh40
 HNC8AnmnHwCsgetDFSZumAXP0fFJf0XjDgD2OGQtltFiyxgYGJZ8mUp7k/DYTHREMpPL
 nW1NEIFMWyUKWQXfX+w8OZjQK8Ty/EAWhBM4a7Pare6NDZSqOuaf/21AwKW+lTsYCec2
 egzHLtw+ZFGFEmPisEGaoMj5WSF8xTcjlLWscs68MCRAmwXhcfLqN7lsEFcyo4KHUiI2
 ueSA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=fboa4SkKpV0tB4MjTvzH60cFqT5HP1Q+qLPqWMxlDOs=;
 b=r1aw7Lx5gBGAfVmCtDKBjvTeDFsqwANDEakSc/5ug9fPUeDsr054Oa22hC2nPRiUy3
 iFqQ9dEfsQ4235lU00JSEz5yd2lZgxS9/N3dkee9nZSNx5lszf6YfxRCpe5TMig0PUvD
 0T/HVY66ATO6ZcKKK+NTELYqUBd3F3Wtv5S7X2Kfd3TdJp5k4DE+GJw8W0IrbdLRyvNM
 lGGrHKzZv4A/19b+sG+ymLDKbxJypZQkwzSDB90EvAHltrFkCh9W8bmXLH1lDyFP/VkO
 fUFW1J5VjcZULtiBl5yPWAFLCgRT1WMZu7PkbUWVg6dGR8FDYr5SUG1nxdfnBgA5hZFH
 3xSg==
X-Gm-Message-State: APjAAAXyL9KzTiD0qwduu0m4OLeszDlKvWlBABgUTFQGRnBHUdU+FNh/
 H2chycGC7MPSfMvpQoLhuimkHozx
X-Google-Smtp-Source: APXvYqxhYzK3qF/ctJJy1IhOP/i0uztc6I9V879uVpXTHct1+ZhLTz4yLicgdTZg3M87JwByRsFvPA==
X-Received: by 2002:adf:dc0f:: with SMTP id t15mr3837109wri.258.1567501834381; 
 Tue, 03 Sep 2019 02:10:34 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id d193sm2491106wmd.0.2019.09.03.02.10.33
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 02:10:33 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190903080343.15931-1-felipe.huici@neclab.eu>
 <20190903080343.15931-3-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <6eca4380-b49d-1b1c-6dd3-11284dc3bbd3@gmail.com>
Date: Tue, 3 Sep 2019 12:10:33 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903080343.15931-3-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 2/3] exportsyms.uk:
 expose symbols needed by Micropython port.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBGZWxpcGUhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNz
LnB1Yi5ybz4KCk9uIDkvMy8xOSAxMTowMyBBTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IEFkZCBz
eW1ib2xzIChlLmcuLCBkbnNfZ2V0aG9zdGJ5bmFtZSwgZ2V0bmFtZWluZm8pIG5lZWRlZCBieQo+
IE1pY3JvcHl0aG9uLgo+IAo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1
aWNpQG5lY2xhYi5ldT4KPiAtLS0KPiAgZXhwb3J0c3ltcy51ayB8IDI5ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCj4gCj4g
ZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCj4gaW5kZXggODU2Y2E4
Zi4uMWYxMWY2ZCAxMDA2NDQKPiAtLS0gYS9leHBvcnRzeW1zLnVrCj4gKysrIGIvZXhwb3J0c3lt
cy51awo+IEBAIC0zOSwzICszOSwzMiBAQCBnZXRhZGRyaW5mbwo+ICBmcmVlYWRkcmluZm8KPiAg
Z2FpX3N0cmVycm9yCj4gIGdldG5hbWVpbmZvCj4gK2lnbXBfam9pbmdyb3VwCj4gK3BidWZfYWxs
b2MKPiArcGJ1Zl9jYXQKPiArcGJ1Zl9jb3B5X3BhcnRpYWwKPiArcGJ1Zl9mcmVlCj4gK3BidWZf
cmVmCj4gK3N5c19jaGVja190aW1lb3V0cwo+ICt0Y3BfYWJvcnQKPiArdGNwX2FjY2VwdAo+ICt0
Y3BfYXJnCj4gK3RjcF9iaW5kCj4gK3RjcF9jbG9zZQo+ICt0Y3BfY29ubmVjdAo+ICt0Y3BfZXJy
Cj4gK3RjcF9saXN0ZW5fd2l0aF9iYWNrbG9nCj4gK3RjcF9uZXcKPiArdGNwX291dHB1dAo+ICt0
Y3BfcG9sbAo+ICt0Y3BfcmVjdgo+ICt0Y3BfcmVjdmVkCj4gK3RjcF93cml0ZQo+ICt1ZHBfYmlu
ZAo+ICt1ZHBfY29ubmVjdAo+ICt1ZHBfbmV3Cj4gK3VkcF9yZWN2Cj4gK3VkcF9yZW1vdmUKPiAr
dWRwX3NlbmQKPiArdWRwX3NlbmR0bwo+ICt1a25ldGRldl9wb2xsX2FsbAo+IAoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 09:10:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 09:10:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i54pt-0003de-AH; Tue, 03 Sep 2019 09:10:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i54pr-0003dU-Gn
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 09:10:47 +0000
X-Inumbo-ID: b6e184f4-ce2a-11e9-8980-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b6e184f4-ce2a-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 09:10:46 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id g7so16630611wrx.2
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 02:10:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=S4QUFr7bKnIj+ofMw8lxgO8R9LB1lMvJCk/ilvAd7Zw=;
 b=QZTlcrn4mtEzFEIG3FdWBgx99HKmldM/4RfrLTVkFR5+oLERBzQ5jOOkx65JaRmKud
 5ToQ1JjiT9Cq9BivKR9YuFcEN+2cB5ZVWrMZ24OU8IY8RIlVuTe32kaIOpx51wU+lQFn
 fmG2ObIqnFvvk20T8E5KkXEDrfTDDn4cG9yLJflNhX3+dYE7lZH8mQyxfO/5pb6Ufyu/
 GLIopaClHD/XgOFBVNVUDzadxXdABhXv/Xtshawma+YqANq1EsZfvXil1c3YjinsYSMi
 YyfnlSFEwUNQr9BcTAEkqPTrxezdHNxX1Xz8RCkJhZiJi/WvDoQ65SPfGlDDwycCMU9A
 Iybw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=S4QUFr7bKnIj+ofMw8lxgO8R9LB1lMvJCk/ilvAd7Zw=;
 b=AAFP/Mzp/ovKgNRlYHuhsO2mvpAhzw0j1OcyJdXUr+6JxkA7Y7oEANB/uZcNqqu6SE
 pO/r08QwCGWyI67/ZrhsRH7Xviz/qmaMZ3rpKSTJegwfwYUStiVEMXGM8zCcYRl9zTs+
 JG3qA1bRlPm8HYyW9ei0bYyjYJdZjQ+/6YuC1UIl0fHxvQimia5zneLwnlQjYOa26sAu
 seVQBLl9ucyW4LDj9zyHjLLZFDHTeiTx7z7UhweX55CioSiua7XlF6et7h7twUOU8TGD
 W6AP/zH2zqto1hWgnqNyTr1wWLdbaUbELetyHFslF1g5OLGV6gr1fwKMDlhpaqd4LXAp
 HfIg==
X-Gm-Message-State: APjAAAXMXa+OO/ET0qCT+FfmNrH8Y7YfQ/cmF7pQy5mKtJMk3TyYi9ue
 ViMrhaMikbgP7FKGCZoqVB4o6uN9
X-Google-Smtp-Source: APXvYqwqePTt8eSrg7hJ6VsyDfStMRYnIS6e+cMY5rIsdjeWgtOcTSZwAEZ8kmpLSdVd+vnjpBlthw==
X-Received: by 2002:adf:db03:: with SMTP id s3mr43959257wri.214.1567501845942; 
 Tue, 03 Sep 2019 02:10:45 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id v4sm17644567wrg.56.2019.09.03.02.10.45
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 02:10:45 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190903080343.15931-1-felipe.huici@neclab.eu>
 <20190903080343.15931-4-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <a891b622-3649-84f2-44ee-3dfc773d6a7f@gmail.com>
Date: Tue, 3 Sep 2019 12:10:44 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903080343.15931-4-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH v2 3/3] exportsyms.uk:
 Alphabetize symbol list.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBGZWxpcGUhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNz
LnB1Yi5ybz4KCk9uIDkvMy8xOSAxMTowMyBBTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IFRvIGVu
aGFuY2UgcmVhZGFiaWx0eSB3ZSBhbHBoYWJldGl6ZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1i
b2xzLiBBbGwKPiBVbmlrcmFmdCBsaWJzIHNob3VsZCBmb2xsb3cgdGhpcyBpbiB0aGUgZnV0dXJl
Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4KPiAtLS0KPiAgZXhwb3J0c3ltcy51ayB8IDUzICsrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCAyNiBpbnNlcnRp
b25zKCspLCAyNyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBi
L2V4cG9ydHN5bXMudWsKPiBpbmRleCAxZjExZjZkLi42NzYzMjQ1IDEwMDY0NAo+IC0tLSBhL2V4
cG9ydHN5bXMudWsKPiArKysgYi9leHBvcnRzeW1zLnVrCj4gQEAgLTEsMTUgKzEsMzggQEAKPiAg
YWNjZXB0Cj4gIGJpbmQKPiAgY29ubmVjdAo+ICtlbmRwcm90b2VudAo+ICtmcmVlYWRkcmluZm8K
PiArZ2FpX3N0cmVycm9yCj4gK2dldGFkZHJpbmZvCj4gK2dldGhvc3RieWFkZHIKPiArZ2V0bmFt
ZWluZm8KPiAgZ2V0cGVlcm5hbWUKPiArZ2V0cHJvdG9ieW5hbWUKPiArZ2V0cHJvdG9ieW51bWJl
cgo+ICtnZXRwcm90b2VudAo+ICtnZXRzZXJ2YnluYW1lCj4gK2dldHNlcnZieXBvcnQKPiAgZ2V0
c29ja25hbWUKPiAgZ2V0c29ja29wdAo+ICtoX2Vycm5vCj4gK2lnbXBfam9pbmdyb3VwCj4gK2lu
ZXRfbnRvcAo+ICtpbmV0X3B0b24KPiAraXA0YWRkcl9hdG9uCj4gK2lwNGFkZHJfbnRvYQo+ICtp
cGFkZHJfYWRkcgo+ICBsaWJsd2lwX2luaXQKPiAgbGlzdGVuCj4gLWx3aXBfaHRvbmwKPiAtbHdp
cF9odG9ucwo+ICBsd2lwX2dldGhvc3RieW5hbWUKPiAgbHdpcF9nZXRob3N0YnluYW1lX3IKPiAr
bHdpcF9odG9ubAo+ICtsd2lwX2h0b25zCj4gK3BidWZfYWxsb2MKPiArcGJ1Zl9jYXQKPiArcGJ1
Zl9jb3B5X3BhcnRpYWwKPiArcGJ1Zl9mcmVlCj4gK3BidWZfcmVmCj4gIHBvbGwKPiAgcmVjdgo+
ICByZWN2ZnJvbQo+IEBAIC0xNywzNCArNDAsMTAgQEAgc2VsZWN0Cj4gIHNlbmQKPiAgc2VuZG1z
Zwo+ICBzZW5kdG8KPiArc2V0cHJvdG9lbnQKPiAgc2V0c29ja29wdAo+ICBzaHV0ZG93bgo+ICBz
b2NrZXQKPiAtaXA0YWRkcl9hdG9uCj4gLWlwNGFkZHJfbnRvYQo+IC1pcGFkZHJfYWRkcgo+IC1p
cDRhZGRyX250b2EKPiAtaF9lcnJubwo+IC1lbmRwcm90b2VudAo+IC1zZXRwcm90b2VudAo+IC1n
ZXRwcm90b2VudAo+IC1nZXRwcm90b2J5bmFtZQo+IC1nZXRwcm90b2J5bnVtYmVyCj4gLWdldGhv
c3RieWFkZHIKPiAtZ2V0c2VydmJ5bmFtZQo+IC1nZXRzZXJ2Ynlwb3J0Cj4gLWluZXRfbnRvcAo+
IC1pbmV0X3B0b24KPiAtZ2V0YWRkcmluZm8KPiAtZnJlZWFkZHJpbmZvCj4gLWdhaV9zdHJlcnJv
cgo+IC1nZXRuYW1laW5mbwo+IC1pZ21wX2pvaW5ncm91cAo+IC1wYnVmX2FsbG9jCj4gLXBidWZf
Y2F0Cj4gLXBidWZfY29weV9wYXJ0aWFsCj4gLXBidWZfZnJlZQo+IC1wYnVmX3JlZgo+ICBzeXNf
Y2hlY2tfdGltZW91dHMKPiAgdGNwX2Fib3J0Cj4gIHRjcF9hY2NlcHQKPiAKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 09:22:09 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 09:22:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i550q-0004Rv-78; Tue, 03 Sep 2019 09:22:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i550o-0004Rq-A3
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 09:22:06 +0000
X-Inumbo-ID: 4b38ba0e-ce2c-11e9-8980-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4b38ba0e-ce2c-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 09:22:05 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id p13so17365978wmh.1
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 02:22:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=aC+B2bxzd/HLG7B/qDrwFzw/IB+3vzMqzx626DySau0=;
 b=tMHBxVPVTOwJ1EqFCW3XJhk2C5UASx2Lhfcx7tmqUlxBkKAEaFeGuEMaO1R2LPcy4M
 EeezPUeIDRV3CYcQzkEYmtjAhKVTBO0sudGzvIw+PcgyJHJqzlj5RORZbcdDWwMcDyWm
 vGVHraloY4uR/5Y/Zf1nQbjC0HbKtijpY6GxHOHr8m+QkvPebPxwF0t1TuGZEiEz4+8S
 Sht4qkGg3V3EFR3JdskHz6PtLphCFmcqJ4G8YFtAY2Iy2Ds5RAVnjuy1zKDY4LEHOKb5
 OwnFKPiHQCyrGVRC0xfNVyigsUIk8nXkNhJuFYEnTHmh0Lr6Qrl46bXz6CCVu7/d8+f4
 amyg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=aC+B2bxzd/HLG7B/qDrwFzw/IB+3vzMqzx626DySau0=;
 b=QDJEvrIVZ3DLJ1jLwykgq32Fh/qL/zbYNznU+nhfmfyAvGhSMBbMkkjBFLmmHTnGqT
 3Ommen3cw+rbJAn/zB+bifm1r4SsfUAgeWVtycUZY9SyJUwGTytnzJxo7+3LxUXYeUCR
 4k/7DJPltgnQ3i4ztbPJAuKs1rSioRcc+83GHOkxaPegJyzSTv+cGk/fFwdcZBxx24Dz
 7mp+bNeaZTNkEEZENOGKyNYwcU6P+QP4ziw+j82Zl0tlmhtellRUaSfjLX0USzPg1KtE
 atdSF2KRCqvjcf4Ixs3K5oCWGG5xSut63I8j029ua5HZhvgnukrdQJeOMhcbxwJJI6XK
 7wIw==
X-Gm-Message-State: APjAAAUaXwEBecZpxchDYHDAeYJ62fK666csee7DJFH/rBQycAqUc1M0
 RN1FJ3I9/id3YQPz0ymAr7grinM9
X-Google-Smtp-Source: APXvYqykGVWUj2UIl0/YweDvU3vuc/xE7C4zKlrAQXmEifxJ8d45QPCxHBnwb2lquvYzrhbcwECrhg==
X-Received: by 2002:a7b:cd05:: with SMTP id f5mr9209689wmj.12.1567502524248;
 Tue, 03 Sep 2019 02:22:04 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id l20sm17376179wrb.61.2019.09.03.02.22.03
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 02:22:03 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190903072043.26166-1-felipe.huici@neclab.eu>
 <20190903072043.26166-2-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <a3da78a7-dcc4-9e2f-a5ca-dbdbcd76901f@gmail.com>
Date: Tue, 3 Sep 2019 12:22:03 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903072043.26166-2-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 1/2] patches: compile
 guard MIN/MAX
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKVGhlIGZhY3QgdGhhdCB3ZSBkaWRuJ3QgbmVlZCB0aGlzIGJlZm9yZSBtYWRl
IG1lIHRoaW5rIGlmIHRoaXMgaXMgcmVhbGx5Cm5lY2Vzc2FyeS4gTm93LCBhbGwgb3RoZXIgbGli
cmFyaWVzIHNob3VsZCBkZXBlbmQgb24gbGliYyAoaW4gdGhpcyBjYXNlCm5ld2xpYikgZGVjbGFy
YXRpb25zIGFuZCBkZWZpbml0aW9ucyBhbmQgbm90IHRoZSBvdGhlciB3YXkgYXJvdW5kLgoKQXMg
d2UgZGlzY3Vzc2VkIG9mZmxpbmUsIHRoZSBwcm9ibGVtIGNvbWVzIGZyb20gdGhlIHdheSB0aGlz
IGZpbGUgZ2V0cwppbmRpcmVjdGx5IGluY2x1ZGVkIGluIG9uZSBvZiBtaWNyb3B5dGhvbidzIGds
dWUgZmlsZXMuIEEgZ2VuZXJhbCBiZXN0CnByYWN0aWNlIHRoYXQgZG9lcyB0aGUgdHJpY2sgbW9z
dCBvZiB0aGUgdGltZSBpcyBpbmNsdWRpbmcgaGVhZGVycwpzdGFydGluZyB3aXRoIHRoZSBtb3N0
IGdlbmVyYWwgb25lcyAoZS5nLiBsaWJjJ3MgaGVhZGVycykgdG8gdGhlIG1vc3QKcGFydGljdWxh
ciBvbmVzIChlLmcuIG1pY3JvcHl0aG9uJ3MgaGVhZGVycykuCgpTbywgd2UnbGwgZHJvcCB0aGlz
IHBhdGNoLgoKQ2hlZXJzLApDb3N0aW4KCk9uIDkvMy8xOSAxMDoyMCBBTSwgRmVsaXBlIEh1aWNp
IHdyb3RlOgo+IFB1dCBndWFyZHMgYXJvdW5kIGRlZmluaXRpb25zIG9mIE1JTi9NQVggbWFjcm9z
IHRvIHByZXZlbnQgZG91YmxlCj4gZGVmaW5pdGlvbiB3YXJuaW5ncy4KPiAKPiBTaWduZWQtb2Zm
LWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gLS0tCj4gIHBhdGNo
ZXMvMDAwOS1ndWFyZC1taW4tbWF4LWRlZmluaXRpb25zLnBhdGNoIHwgMTUgKysrKysrKysrKysr
KysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEw
MDY0NCBwYXRjaGVzLzAwMDktZ3VhcmQtbWluLW1heC1kZWZpbml0aW9ucy5wYXRjaAo+IAo+IGRp
ZmYgLS1naXQgYS9wYXRjaGVzLzAwMDktZ3VhcmQtbWluLW1heC1kZWZpbml0aW9ucy5wYXRjaCBi
L3BhdGNoZXMvMDAwOS1ndWFyZC1taW4tbWF4LWRlZmluaXRpb25zLnBhdGNoCj4gbmV3IGZpbGUg
bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi42Yzg2ZTcxCj4gLS0tIC9kZXYvbnVsbAo+ICsr
KyBiL3BhdGNoZXMvMDAwOS1ndWFyZC1taW4tbWF4LWRlZmluaXRpb25zLnBhdGNoCj4gQEAgLTAs
MCArMSwxNSBAQAo+ICstLS0gYS9uZXdsaWIvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oCTIwMTkt
MDgtMzAgMTY6MTU6NDkuNTkxNzc1NDIxICswMjAwCj4gKysrKyBiL25ld2xpYi9saWJjL2luY2x1
ZGUvc3lzL3BhcmFtLmgJMjAxOS0wOC0zMCAxNjoxNTozOC42NTk4ODg3NjcgKzAyMDAKPiArQEAg
LTI1LDggKzI1LDEyIEBACj4gKyAKPiArICNkZWZpbmUgTUFYUEFUSExFTiBQQVRIX01BWAo+ICsg
Cj4gKysjaWZuZGVmIE1BWAo+ICsgI2RlZmluZSBNQVgoYSxiKSAoKGEpID4gKGIpID8gKGEpIDog
KGIpKQo+ICsrI2VuZGlmCj4gKysjaWZuZGVmIE1JTgo+ICsgI2RlZmluZSBNSU4oYSxiKSAoKGEp
IDwgKGIpID8gKGEpIDogKGIpKQo+ICsrI2VuZGlmCj4gKyAKPiArICNpZm5kZWYgaG93bWFueQo+
ICsgI2RlZmluZSAgICBob3dtYW55KHgsIHkpICAgKCgoeCkrKCh5KS0xKSkvKHkpKQo+IAoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 09:33:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 09:33:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i55Bg-0005V5-1k; Tue, 03 Sep 2019 09:33:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i55Be-0005V0-AC
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 09:33:18 +0000
X-Inumbo-ID: dbcca3fe-ce2d-11e9-951b-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id dbcca3fe-ce2d-11e9-951b-bc764e2007e4;
 Tue, 03 Sep 2019 09:33:16 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 74912404DE;
 Tue,  3 Sep 2019 11:33:16 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 11:33:15 +0200
Message-Id: <20190903093315.14837-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH] exportsyms.uk: Add
 dns_gethostbyname
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGRuc19nZXRob3N0YnluYW1lIG5lZWRlZCBieSB0aGUgTWljcm9weXRob24gcG9ydAoKU2ln
bmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgotLS0KIGV4
cG9ydHN5bXMudWsgfCAxICsKIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQoKZGlmZiAt
LWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCmluZGV4IDY3NjMyNDUuLjZmZTk1
ZWMgMTAwNjQ0Ci0tLSBhL2V4cG9ydHN5bXMudWsKKysrIGIvZXhwb3J0c3ltcy51awpAQCAtMSw2
ICsxLDcgQEAKIGFjY2VwdAogYmluZAogY29ubmVjdAorZG5zX2dldGhvc3RieW5hbWUKIGVuZHBy
b3RvZW50CiBmcmVlYWRkcmluZm8KIGdhaV9zdHJlcnJvcgotLSAKMi4xMS4wCgoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 09:48:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 09:48:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i55Pr-0007Kc-9c; Tue, 03 Sep 2019 09:47:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i55Pq-0007KX-E7
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 09:47:58 +0000
X-Inumbo-ID: e89e1e9e-ce2f-11e9-8980-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id e89e1e9e-ce2f-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 09:47:57 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 0A7EE404DE;
 Tue,  3 Sep 2019 11:47:57 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 11:47:55 +0200
Message-Id: <20190903094756.24858-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH v2 0/1] Changes in support
 of Micropython
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q2hhbmdlcyBzaW5jZSB2MToKCiAqIERyb3AgcGF0Y2ggYWJvdXQgY29tcGlsZS1ndWFyZGluZyBN
SU4vTUFYCiAqIE1vdmUgcmVhbHBhdGgoKSBzdHViIGZyb20gc3RkbGliLmMgdG8gZmlsZS5jCiAq
IEZpeCBjaGVja3BhdGggd2FybmluZwoKRmVsaXBlIEh1aWNpICgxKToKICBmaWxlLmM6IEFkZCBy
ZWFscGF0aCgpIHN0dWIuCgogZmlsZS5jIHwgNiArKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2IGlu
c2VydGlvbnMoKykKCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 09:48:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 09:48:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i55Pw-0007L8-B4; Tue, 03 Sep 2019 09:48:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i55Pv-0007L0-9z
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 09:48:03 +0000
X-Inumbo-ID: e905bc5c-ce2f-11e9-8980-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id e905bc5c-ce2f-11e9-8980-bc764e2007e4;
 Tue, 03 Sep 2019 09:47:58 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id BFAB641688;
 Tue,  3 Sep 2019 11:47:57 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue,  3 Sep 2019 11:47:56 +0200
Message-Id: <20190903094756.24858-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190903094756.24858-1-felipe.huici@neclab.eu>
References: <20190903094756.24858-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH v2 1/1] file.c: Add
 realpath() stub.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN0dWIgZm9yIHJlYWxwYXRoKCkgbmVlZGVkIGJ5IHRoZSB1cGNvbWluZyBNaWNyb3B5dGhv
biBwb3J0LgoKU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFi
LmV1PgotLS0KIGZpbGUuYyB8IDYgKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25z
KCspCgpkaWZmIC0tZ2l0IGEvZmlsZS5jIGIvZmlsZS5jCmluZGV4IDNmZGY5OWEuLjE1NjY2Nzkg
MTAwNjQ0Ci0tLSBhL2ZpbGUuYworKysgYi9maWxlLmMKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNs
dWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjdW5kZWYgZXJybm8KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KIGV4dGVybiBpbnQgZXJybm87CiAKICNkZWZpbmUgU1RESU5fRklMRU5P
ICAgIDAgICAgICAgLyogc3RhbmRhcmQgaW5wdXQgZmlsZSBkZXNjcmlwdG9yICovCkBAIC0xMTcs
MyArMTE4LDggQEAgaW50IHBpcGUoaW50IHBpcGVmZFsyXSBfX3VudXNlZCkKIHsKIAlyZXR1cm4g
MDsKIH0KKworY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqcmVzdHJpY3QgZmlsZV9uYW1lLCBj
aGFyICpyZXN0cmljdCByZXNvbHZlZF9uYW1lKQoreworCXJldHVybiAwOworfQotLSAKMi4xMS4w
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 11:49:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 11:49:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i57JL-0000r1-Qc; Tue, 03 Sep 2019 11:49:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=7X6I=W6=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i57JK-0000qY-2W
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 11:49:22 +0000
X-Inumbo-ID: dcd35bcc-ce40-11e9-ab91-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.89]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dcd35bcc-ce40-11e9-ab91-12813bfff9fa;
 Tue, 03 Sep 2019 11:49:19 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=c8mXzejFRaOCCuPNh8QVd6+7MBsw23qvmdYUL74+WiGAuI4HN8jR3gqC4/q6Ymyut+Qbx30XnkRiSPuG7AC0qN/Xa9aIp+YYD4KuLWD8bhC/WFQEj2Vn37/WnbVrRrf2PKG2LU1UzkNEstVjniUCAAEEybkPJ3/CAqX0l0R3LTFiup92hbBl+81F7Gc90UhVc6czabSv4E4oqSRN6FpRC7AqhLyjxGfp4uvXtobsDHkYfsp0PjGpjXlcRLe7TapAVFGX2C1bRdOYP9RfWVka0P0ji9uO+hYwCE05MZC3YbwsJegwGFPQJ2d/91GO+T0Y5N/skgxrCbPyRrFjB8PjuA==
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=sm3IZk6HB2u3aafRAdaPz5OAsKGBKYSlyOcfeknEeeo=;
 b=KiGPDPpatY1iHXk23A3pc+TN+Xhu2BB3AptBExmIqaDc5GND3SCSaxvMq1ygJXkxfD1/NdvcQiTUeOtITaMcfe4E7g7leOH5mZVjuwfYwM5UOsMHGKJp4ymquijiOMkquDjRiaMMXdEhX43QeM274M1aXOW4hnXxcUNuIDOVMGqU+uHlootu5i8CNnoWSqgQYHtkC2A6gMBXLAkO/yRxuZ5ss/M6e2NswKJ2f9/e5hSb5mZVVeToduae0rbY4vqv3p/PEWuT0RUxXTTuzzVEZ6Acfo2BTApKTdlhA0YR4yDNyY9MB1S8wsTyGjloSFcw4PMKyUsKi5fZXQs/HOUVaw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4988.eurprd01.prod.exchangelabs.com (20.177.210.80) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Tue, 3 Sep
 2019 11:49:16 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Tue, 3 Sep 2019
 11:49:16 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 1/1] lib/vfscore: Add missing vnop operations to
 stdio
Thread-Index: AQHVYk2da28vK+o8PEWZYBGtQguiIg==
Date: Tue, 3 Sep 2019 11:49:16 +0000
Message-ID: <20190903114908.26072-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0074.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::18) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 843ef99e-9478-47b0-3bb6-08d73064bfab
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4988; 
x-ms-traffictypediagnostic: PR1PR01MB4988:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB498879C5E14A9DA235D83A26A6B90@PR1PR01MB4988.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2657;
x-forefront-prvs: 01494FA7F7
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(39850400004)(346002)(396003)(366004)(376002)(199004)(189003)(86362001)(2351001)(7736002)(186003)(64756008)(66556008)(66476007)(386003)(476003)(102836004)(81156014)(81166006)(53936002)(486006)(786003)(316002)(54906003)(478600001)(2906002)(66446008)(50226002)(6506007)(8676002)(71200400001)(71190400001)(6486002)(66946007)(1076003)(45776006)(8936002)(4326008)(5640700003)(6512007)(14454004)(305945005)(46003)(2501003)(6116002)(99286004)(14444005)(256004)(6916009)(2616005)(6436002)(5660300002)(25786009)(52116002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4988;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: MHNhzPJRZBbQenqifzU7kCaSYSbsh9D4ZWNcUyRriljiUcPLPvOnRA/0vreTHkHqQnS3YzNSdmtUF0zVV+lL0xlwIrLggUg2JwF4gZz03uYZ4SZf7PDSK87D2yqoxUQ+JecYUc/nhaj80PNKidNqKDb4dpXiusN2+Xn5RySAs0v7wb9u+uSxLOXx3iNzzx/h93OAvn4+fIAqxaPzadL/edIdKU8DRxPgZqhfcXREago1tifihV6BgEWxZhjuP5JQrr82Xn1G1E7Q8ABID+zkcWTM/S7oJn/eWGXPzk1tHOPlSw1uzSN84ztDViOMI8bYYY/82/W/KKUaRWDhh9zAFPnF37ByXTI5GAYmQm9tMIvCxKICaw173McBNEYookxwRfnxnkNDaCDj5actBbNgKqt0Q9xsycN3FENE1sHusD4=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 843ef99e-9478-47b0-3bb6-08d73064bfab
X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2019 11:49:16.8686 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: GBj3Lgs3Wh0m94N8riAf4Fy+uW6N7FbpSD4J3KTfEXfsBG3pLwzn20o7Wm74glxtdmjwVrwq71VM4ajXaAnMKFVQWUqJOqO+2bKbdoC8MOKxwSZXLoh5UqL86qQeUr0o
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4988
Subject: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/vfscore: Add missing vnop
 operations to stdio
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TW9zdCBvZiB0aGUgdm5vcCBvcGVyYXRpb25zIGFyZSBtaXNzaW5nIGZyb20gdGhlIHN0ZGlvLiBU
aGlzIGNhdXNlcyBhIHBhZ2UgZmF1bHQKd2hlbiBjYWxsaW5nIGZ1bmN0aW9uIHN1Y2ggYXMgbHNl
ZWsgb24gc3RkaW8uIFRvIHNvbHZlIHRoaXMgd2UgcmVnaXN0ZXIgdGhlCm1pc3Npbmcgb3BlcmF0
aW9uLgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgotLS0KIGxpYi92ZnNjb3JlL3N0ZGlvLmMgfCA0OCArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCA0
NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3Jl
L3N0ZGlvLmMgYi9saWIvdmZzY29yZS9zdGRpby5jCmluZGV4IDA4MzM1MzY3Li45NTM2OTk4YyAx
MDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvc3RkaW8uYworKysgYi9saWIvdmZzY29yZS9zdGRpby5j
CkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSA8dmZzY29yZS92bm9kZS5oPgogI2luY2x1ZGUg
PHVuaXN0ZC5oPgogI2luY2x1ZGUgPHZmc2NvcmUvdWlvLmg+CisjaW5jbHVkZSA8dmZzY29yZS92
bm9kZS5oPgorI2luY2x1ZGUgPHZmc2NvcmUvbW91bnQuaD4KIAogc3RhdGljIGludCBfX3dyaXRl
X2ZuKHZvaWQgKmRzdCBfX3VudXNlZCwgdm9pZCAqc3JjLCBzaXplX3QgKmNudCkKIHsKQEAgLTEy
NywxMCArMTI5LDUwIEBAIHN0ZGlvX2dldGF0dHIoc3RydWN0IHZub2RlICp2bm9kZSBfX3VudXNl
ZCwgc3RydWN0IHZhdHRyICphdHRyIF9fdW51c2VkKQogCXJldHVybiAwOwogfQogCisjZGVmaW5l
IHN0ZGlvX29wZW4JKCh2bm9wX29wZW5fdCl2ZnNjb3JlX251bGxvcCkKKyNkZWZpbmUgc3RkaW9f
Y2xvc2UJKCh2bm9wX2Nsb3NlX3QpdmZzY29yZV9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX3NlZWsJ
KCh2bm9wX3NlZWtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX2lvY3RsCSgo
dm5vcF9pb2N0bF90KXZmc2NvcmVfbnVsbG9wKQorI2RlZmluZSBzdGRpb19mc3luYwkoKHZub3Bf
ZnN5bmNfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX3JlYWRkaXIJKCh2bm9w
X3JlYWRkaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHN0ZGlvX2xvb2t1cAkoKHZu
b3BfbG9va3VwX3QpdmZzY29yZV9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX2NyZWF0ZQkoKHZub3Bf
Y3JlYXRlX3QpdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSBzdGRpb19yZW1vdmUJKCh2bm9w
X3JlbW92ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgc3RkaW9fcmVuYW1lCSgodm5v
cF9yZW5hbWVfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHN0ZGlvX21rZGlyCSgodm5v
cF9ta2Rpcl90KXZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgc3RkaW9fcm1kaXIJKCh2bm9w
X3JtZGlyX3QpdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSBzdGRpb19zZXRhdHRyCSgodm5v
cF9zZXRhdHRyX3QpdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHN0ZGlvX2luYWN0aXZlCSgo
dm5vcF9pbmFjdGl2ZV90KXZmc2NvcmVfdm9wX251bGxvcCkKKyNkZWZpbmUgc3RkaW9fdHJ1bmNh
dGUJKCh2bm9wX3RydW5jYXRlX3QpdmZzY29yZV92b3BfbnVsbG9wKQorI2RlZmluZSBzdGRpb19s
aW5rCSgodm5vcF9saW5rX3QpdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHN0ZGlvX2ZhbGxv
Y2F0ZQkoKHZub3BfZmFsbG9jYXRlX3QpdmZzY29yZV92b3BfbnVsbG9wKQorI2RlZmluZSBzdGRp
b19yZWFkbGluawkoKHZub3BfcmVhZGxpbmtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5l
IHN0ZGlvX3N5bWxpbmsJKCh2bm9wX3N5bWxpbmtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisKIHN0
YXRpYyBzdHJ1Y3Qgdm5vcHMgc3RkaW9fdm5vcHMgPSB7Ci0JLnZvcF93cml0ZSA9IHN0ZGlvX3dy
aXRlLAotCS52b3BfcmVhZCA9IHN0ZGlvX3JlYWQsCi0JLnZvcF9nZXRhdHRyID0gc3RkaW9fZ2V0
YXR0ciwKKwlzdGRpb19vcGVuLAkJLyogb3BlbiAqLworCXN0ZGlvX2Nsb3NlLAkJLyogY2xvc2Ug
Ki8KKwlzdGRpb19yZWFkLAkJLyogcmVhZCAqLworCXN0ZGlvX3dyaXRlLAkJLyogd3JpdGUgKi8K
KwlzdGRpb19zZWVrLAkJLyogc2VlayAqLworCXN0ZGlvX2lvY3RsLAkJLyogaW9jdGwgKi8KKwlz
dGRpb19mc3luYywJCS8qIGZzeW5jICovCisJc3RkaW9fcmVhZGRpciwJCS8qIHJlYWRkaXIgKi8K
KwlzdGRpb19sb29rdXAsCQkvKiBsb29rdXAgKi8KKwlzdGRpb19jcmVhdGUsCQkvKiBjcmVhdGUg
Ki8KKwlzdGRpb19yZW1vdmUsCQkvKiByZW1vdmUgKi8KKwlzdGRpb19yZW5hbWUsCQkvKiByZW1h
bWUgKi8KKwlzdGRpb19ta2RpciwJCS8qIG1rZGlyICovCisJc3RkaW9fcm1kaXIsCQkvKiBybWRp
ciAqLworCXN0ZGlvX2dldGF0dHIsCQkvKiBnZXRhdHRyICovCisJc3RkaW9fc2V0YXR0ciwJCS8q
IHNldGF0dHIgKi8KKwlzdGRpb19pbmFjdGl2ZSwJCS8qIGluYWN0aXZlICovCisJc3RkaW9fdHJ1
bmNhdGUsCQkvKiB0cnVuY2F0ZSAqLworCXN0ZGlvX2xpbmssCQkvKiBsaW5rICovCisJKHZub3Bf
Y2FjaGVfdCkgTlVMTCwgLyogYXJjICovCisJc3RkaW9fZmFsbG9jYXRlLAkvKiBmYWxsb2NhdGUg
Ki8KKwlzdGRpb19yZWFkbGluaywJCS8qIHJlYWQgbGluayAqLworCXN0ZGlvX3N5bWxpbmssCQkv
KiBzeW1ib2xpYyBsaW5rICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHZub2RlIHN0ZGlvX3Zub2Rl
ID0gewotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 11:49:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 11:49:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i57JL-0000qv-Oq; Tue, 03 Sep 2019 11:49:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=7X6I=W6=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i57JK-0000qX-2K
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 11:49:22 +0000
X-Inumbo-ID: dcd35bcc-ce40-11e9-ab91-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.89]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dcd35bcc-ce40-11e9-ab91-12813bfff9fa;
 Tue, 03 Sep 2019 11:49:19 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=c8mXzejFRaOCCuPNh8QVd6+7MBsw23qvmdYUL74+WiGAuI4HN8jR3gqC4/q6Ymyut+Qbx30XnkRiSPuG7AC0qN/Xa9aIp+YYD4KuLWD8bhC/WFQEj2Vn37/WnbVrRrf2PKG2LU1UzkNEstVjniUCAAEEybkPJ3/CAqX0l0R3LTFiup92hbBl+81F7Gc90UhVc6czabSv4E4oqSRN6FpRC7AqhLyjxGfp4uvXtobsDHkYfsp0PjGpjXlcRLe7TapAVFGX2C1bRdOYP9RfWVka0P0ji9uO+hYwCE05MZC3YbwsJegwGFPQJ2d/91GO+T0Y5N/skgxrCbPyRrFjB8PjuA==
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=sm3IZk6HB2u3aafRAdaPz5OAsKGBKYSlyOcfeknEeeo=;
 b=KiGPDPpatY1iHXk23A3pc+TN+Xhu2BB3AptBExmIqaDc5GND3SCSaxvMq1ygJXkxfD1/NdvcQiTUeOtITaMcfe4E7g7leOH5mZVjuwfYwM5UOsMHGKJp4ymquijiOMkquDjRiaMMXdEhX43QeM274M1aXOW4hnXxcUNuIDOVMGqU+uHlootu5i8CNnoWSqgQYHtkC2A6gMBXLAkO/yRxuZ5ss/M6e2NswKJ2f9/e5hSb5mZVVeToduae0rbY4vqv3p/PEWuT0RUxXTTuzzVEZ6Acfo2BTApKTdlhA0YR4yDNyY9MB1S8wsTyGjloSFcw4PMKyUsKi5fZXQs/HOUVaw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4988.eurprd01.prod.exchangelabs.com (20.177.210.80) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Tue, 3 Sep
 2019 11:49:16 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Tue, 3 Sep 2019
 11:49:16 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 1/1] lib/vfscore: Add missing vnop operations to
 stdio
Thread-Index: AQHVYk2da28vK+o8PEWZYBGtQguiIg==
Date: Tue, 3 Sep 2019 11:49:16 +0000
Message-ID: <20190903114908.26072-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0074.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::18) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 843ef99e-9478-47b0-3bb6-08d73064bfab
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4988; 
x-ms-traffictypediagnostic: PR1PR01MB4988:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB498879C5E14A9DA235D83A26A6B90@PR1PR01MB4988.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2657;
x-forefront-prvs: 01494FA7F7
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(39850400004)(346002)(396003)(366004)(376002)(199004)(189003)(86362001)(2351001)(7736002)(186003)(64756008)(66556008)(66476007)(386003)(476003)(102836004)(81156014)(81166006)(53936002)(486006)(786003)(316002)(54906003)(478600001)(2906002)(66446008)(50226002)(6506007)(8676002)(71200400001)(71190400001)(6486002)(66946007)(1076003)(45776006)(8936002)(4326008)(5640700003)(6512007)(14454004)(305945005)(46003)(2501003)(6116002)(99286004)(14444005)(256004)(6916009)(2616005)(6436002)(5660300002)(25786009)(52116002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4988;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: MHNhzPJRZBbQenqifzU7kCaSYSbsh9D4ZWNcUyRriljiUcPLPvOnRA/0vreTHkHqQnS3YzNSdmtUF0zVV+lL0xlwIrLggUg2JwF4gZz03uYZ4SZf7PDSK87D2yqoxUQ+JecYUc/nhaj80PNKidNqKDb4dpXiusN2+Xn5RySAs0v7wb9u+uSxLOXx3iNzzx/h93OAvn4+fIAqxaPzadL/edIdKU8DRxPgZqhfcXREago1tifihV6BgEWxZhjuP5JQrr82Xn1G1E7Q8ABID+zkcWTM/S7oJn/eWGXPzk1tHOPlSw1uzSN84ztDViOMI8bYYY/82/W/KKUaRWDhh9zAFPnF37ByXTI5GAYmQm9tMIvCxKICaw173McBNEYookxwRfnxnkNDaCDj5actBbNgKqt0Q9xsycN3FENE1sHusD4=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 843ef99e-9478-47b0-3bb6-08d73064bfab
X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2019 11:49:16.8686 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: GBj3Lgs3Wh0m94N8riAf4Fy+uW6N7FbpSD4J3KTfEXfsBG3pLwzn20o7Wm74glxtdmjwVrwq71VM4ajXaAnMKFVQWUqJOqO+2bKbdoC8MOKxwSZXLoh5UqL86qQeUr0o
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4988
Subject: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/vfscore: Add missing vnop
 operations to stdio
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TW9zdCBvZiB0aGUgdm5vcCBvcGVyYXRpb25zIGFyZSBtaXNzaW5nIGZyb20gdGhlIHN0ZGlvLiBU
aGlzIGNhdXNlcyBhIHBhZ2UgZmF1bHQKd2hlbiBjYWxsaW5nIGZ1bmN0aW9uIHN1Y2ggYXMgbHNl
ZWsgb24gc3RkaW8uIFRvIHNvbHZlIHRoaXMgd2UgcmVnaXN0ZXIgdGhlCm1pc3Npbmcgb3BlcmF0
aW9uLgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgotLS0KIGxpYi92ZnNjb3JlL3N0ZGlvLmMgfCA0OCArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCA0
NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3Jl
L3N0ZGlvLmMgYi9saWIvdmZzY29yZS9zdGRpby5jCmluZGV4IDA4MzM1MzY3Li45NTM2OTk4YyAx
MDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvc3RkaW8uYworKysgYi9saWIvdmZzY29yZS9zdGRpby5j
CkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSA8dmZzY29yZS92bm9kZS5oPgogI2luY2x1ZGUg
PHVuaXN0ZC5oPgogI2luY2x1ZGUgPHZmc2NvcmUvdWlvLmg+CisjaW5jbHVkZSA8dmZzY29yZS92
bm9kZS5oPgorI2luY2x1ZGUgPHZmc2NvcmUvbW91bnQuaD4KIAogc3RhdGljIGludCBfX3dyaXRl
X2ZuKHZvaWQgKmRzdCBfX3VudXNlZCwgdm9pZCAqc3JjLCBzaXplX3QgKmNudCkKIHsKQEAgLTEy
NywxMCArMTI5LDUwIEBAIHN0ZGlvX2dldGF0dHIoc3RydWN0IHZub2RlICp2bm9kZSBfX3VudXNl
ZCwgc3RydWN0IHZhdHRyICphdHRyIF9fdW51c2VkKQogCXJldHVybiAwOwogfQogCisjZGVmaW5l
IHN0ZGlvX29wZW4JKCh2bm9wX29wZW5fdCl2ZnNjb3JlX251bGxvcCkKKyNkZWZpbmUgc3RkaW9f
Y2xvc2UJKCh2bm9wX2Nsb3NlX3QpdmZzY29yZV9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX3NlZWsJ
KCh2bm9wX3NlZWtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX2lvY3RsCSgo
dm5vcF9pb2N0bF90KXZmc2NvcmVfbnVsbG9wKQorI2RlZmluZSBzdGRpb19mc3luYwkoKHZub3Bf
ZnN5bmNfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX3JlYWRkaXIJKCh2bm9w
X3JlYWRkaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHN0ZGlvX2xvb2t1cAkoKHZu
b3BfbG9va3VwX3QpdmZzY29yZV9udWxsb3ApCisjZGVmaW5lIHN0ZGlvX2NyZWF0ZQkoKHZub3Bf
Y3JlYXRlX3QpdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSBzdGRpb19yZW1vdmUJKCh2bm9w
X3JlbW92ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgc3RkaW9fcmVuYW1lCSgodm5v
cF9yZW5hbWVfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHN0ZGlvX21rZGlyCSgodm5v
cF9ta2Rpcl90KXZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgc3RkaW9fcm1kaXIJKCh2bm9w
X3JtZGlyX3QpdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSBzdGRpb19zZXRhdHRyCSgodm5v
cF9zZXRhdHRyX3QpdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHN0ZGlvX2luYWN0aXZlCSgo
dm5vcF9pbmFjdGl2ZV90KXZmc2NvcmVfdm9wX251bGxvcCkKKyNkZWZpbmUgc3RkaW9fdHJ1bmNh
dGUJKCh2bm9wX3RydW5jYXRlX3QpdmZzY29yZV92b3BfbnVsbG9wKQorI2RlZmluZSBzdGRpb19s
aW5rCSgodm5vcF9saW5rX3QpdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHN0ZGlvX2ZhbGxv
Y2F0ZQkoKHZub3BfZmFsbG9jYXRlX3QpdmZzY29yZV92b3BfbnVsbG9wKQorI2RlZmluZSBzdGRp
b19yZWFkbGluawkoKHZub3BfcmVhZGxpbmtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5l
IHN0ZGlvX3N5bWxpbmsJKCh2bm9wX3N5bWxpbmtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisKIHN0
YXRpYyBzdHJ1Y3Qgdm5vcHMgc3RkaW9fdm5vcHMgPSB7Ci0JLnZvcF93cml0ZSA9IHN0ZGlvX3dy
aXRlLAotCS52b3BfcmVhZCA9IHN0ZGlvX3JlYWQsCi0JLnZvcF9nZXRhdHRyID0gc3RkaW9fZ2V0
YXR0ciwKKwlzdGRpb19vcGVuLAkJLyogb3BlbiAqLworCXN0ZGlvX2Nsb3NlLAkJLyogY2xvc2Ug
Ki8KKwlzdGRpb19yZWFkLAkJLyogcmVhZCAqLworCXN0ZGlvX3dyaXRlLAkJLyogd3JpdGUgKi8K
KwlzdGRpb19zZWVrLAkJLyogc2VlayAqLworCXN0ZGlvX2lvY3RsLAkJLyogaW9jdGwgKi8KKwlz
dGRpb19mc3luYywJCS8qIGZzeW5jICovCisJc3RkaW9fcmVhZGRpciwJCS8qIHJlYWRkaXIgKi8K
KwlzdGRpb19sb29rdXAsCQkvKiBsb29rdXAgKi8KKwlzdGRpb19jcmVhdGUsCQkvKiBjcmVhdGUg
Ki8KKwlzdGRpb19yZW1vdmUsCQkvKiByZW1vdmUgKi8KKwlzdGRpb19yZW5hbWUsCQkvKiByZW1h
bWUgKi8KKwlzdGRpb19ta2RpciwJCS8qIG1rZGlyICovCisJc3RkaW9fcm1kaXIsCQkvKiBybWRp
ciAqLworCXN0ZGlvX2dldGF0dHIsCQkvKiBnZXRhdHRyICovCisJc3RkaW9fc2V0YXR0ciwJCS8q
IHNldGF0dHIgKi8KKwlzdGRpb19pbmFjdGl2ZSwJCS8qIGluYWN0aXZlICovCisJc3RkaW9fdHJ1
bmNhdGUsCQkvKiB0cnVuY2F0ZSAqLworCXN0ZGlvX2xpbmssCQkvKiBsaW5rICovCisJKHZub3Bf
Y2FjaGVfdCkgTlVMTCwgLyogYXJjICovCisJc3RkaW9fZmFsbG9jYXRlLAkvKiBmYWxsb2NhdGUg
Ki8KKwlzdGRpb19yZWFkbGluaywJCS8qIHJlYWQgbGluayAqLworCXN0ZGlvX3N5bWxpbmssCQkv
KiBzeW1ib2xpYyBsaW5rICovCiB9OwogCiBzdGF0aWMgc3RydWN0IHZub2RlIHN0ZGlvX3Zub2Rl
ID0gewotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 11:55:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 11:55:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i57PD-0001oe-LB; Tue, 03 Sep 2019 11:55:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=7X6I=W6=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i57PB-0001np-VU
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 11:55:25 +0000
X-Inumbo-ID: b65f86cc-ce41-11e9-ab91-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.81]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b65f86cc-ce41-11e9-ab91-12813bfff9fa;
 Tue, 03 Sep 2019 11:55:24 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EmSyVtXC3u4sdk28EpHqMqbic2hc2kOwuL5YwRMODF6H1Lv8oiIILbIV73CiDFLm6l/zKm7RAkM+AKvUSjJWo11/kW9cqIkvSikMfhvkURsF3VyPZrQoPR+Z10KJ0pS4RDQC+E4pRUz350yUzHgCoWCBaYOfJl9T4eBSJaGZggRfPOzYLy37FR/4tWFKqSTfNUwR0lRiqnRg2tmJXPKAgkHd7Xd1faPrVqEhBGfWyqw3DLBxCi/PKpgsMGXygrZYAl0LymYX7Fq0pbafg2fx3lltEBNh8k+KSkfwJXsDO+1UZr/fEkZ/lN2pYaIOm6ht2X1fTi7aykZSm0RO+PTmxA==
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=OhKUPAm6GYjsSUZ2c4RFOuyOR9E12jk7EKHZK2jNBvg=;
 b=mDpYX9FURH4CpwLswbVazwlQ+C0tNLLTmJM8R56R758cys9xO0O4NAH/H3hRLGT+/Ut7kAdAIDjc7kDZDx4w9LAfDsgwFMDrtyOmzOWgWfujKu29q+3uPnq/n9N8+6ThTlg5eLPiKvmwb0t4jSdJpSAk2c4KQ7VRL8ZL0kIALc+xV8M/wEM2W66DfQ63/yOB2vasZvBQbYgFHRn1Kzu31cSM/onmchRT7VP3TL/O6yunHB+QtA1Ighygv9oM+qNoHpChpFKBJsMLbMfd8gOoWMJe1OX0/pGcePKJ/8Y8FV7aM+9RK9XqRzoiUiFq3ky6H1son/lqOR5PYDe/rujfvA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4988.eurprd01.prod.exchangelabs.com (20.177.210.80) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Tue, 3 Sep
 2019 11:55:22 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Tue, 3 Sep 2019
 11:55:22 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH] lib/ukswrand: Fix reading from devices
Thread-Index: AQHVYi9ll5ppum+aJU6gdJ4Rc9RX7KcZ2IuA
Date: Tue, 3 Sep 2019 11:55:22 +0000
Message-ID: <86edea63-98cc-3510-4e45-71d2ab7aa9a9@stud.acs.upb.ro>
References: <20190903081250.3812-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190903081250.3812-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR04CA0050.eurprd04.prod.outlook.com
 (2603:10a6:802:2::21) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 905d24d9-53f1-4e22-b54e-08d7306599bd
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4988; 
x-ms-traffictypediagnostic: PR1PR01MB4988:
x-microsoft-antispam-prvs: <PR1PR01MB4988045A9F4C8EF11C7F09A7A6B90@PR1PR01MB4988.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:4714;
x-forefront-prvs: 01494FA7F7
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(366004)(396003)(346002)(39850400004)(136003)(189003)(199004)(6512007)(14454004)(11346002)(2501003)(46003)(305945005)(8936002)(4326008)(76176011)(6436002)(25786009)(446003)(5660300002)(2616005)(6246003)(31696002)(52116002)(6116002)(256004)(14444005)(31686004)(85182001)(99286004)(53936002)(81166006)(81156014)(102836004)(476003)(386003)(2906002)(478600001)(316002)(786003)(66556008)(110136005)(7736002)(85202003)(86362001)(186003)(66476007)(64756008)(486006)(71200400001)(66946007)(71190400001)(6486002)(4744005)(66446008)(8676002)(53546011)(6506007)(229853002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4988;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: e+13gTuSnPd2vtNdbwataCIQH0OWbI4hNiRFDhHBWBwoRBLqrCvUlE5ev0Fjzmg2TwYUN9hTkDKkXYi/LOA3JcdPJhqbPs2gYs1CNLN0iVW+nrTZCM9Tr5IgNH6T+SXNk/JUjVyRJsIyDArrD7YRET6DMLVvfd7fnm9KGbihw7+DBbUyHRLw+1UEq8CMfqcMlzWVe7dhFpSxI8ZFxk2HDUfon7/Pers37E7MH9x3pcl148lOGRiCz4jp3Pgbint1LxAH7ODM6H3HidAAiozZBKJRZGPIDSKyWYdgwuoBVGdHquFUwudkXyE2Z4wFt4go84UrLHvhT9nAIOHOCJaUFqOshaGr8sdgV1YmYioROBc63a1s+TpENFkBHbXlR1vQsXTY63ooKxDW6SlZ5CPUj903tcutVhOjzNdTRGtspDo=
x-ms-exchange-transport-forked: True
Content-ID: <9EA69E5617D57645A8E2DFF072A3F9FD@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 905d24d9-53f1-4e22-b54e-08d7306599bd
X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2019 11:55:22.7420 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ddszo98gHwKr/S900sVhx1tqVuV2dlsQUp4nZW9GZlkIESfZDPfYFcKqmbzehOr5rHhXYzjt3Hh2F6cxkBvSIYRK9x4hc6OtJrg2SPy06EUIW6UoDOhxIoHyU1FZb1mG
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4988
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/ukswrand: Fix reading from
 devices
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Costin Lupu <costin.lup@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpS
ZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1PHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFj
cy51cGIucm8+DQoNCk9uIDAzLjA5LjIwMTkgMTE6MTIsIENvc3RpbiBMdXB1IHdyb3RlOg0KPiBG
cm9tOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cEBnbWFpbC5jb20+DQo+DQo+IFNpZ25lZC1vZmYt
Ynk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQo+IC0tLQ0KPiAgIGxpYi91
a3N3cmFuZC9td2NfZGV2LmMgfCAyICstDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9u
KCspLCAxIGRlbGV0aW9uKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9saWIvdWtzd3JhbmQvbXdjX2Rl
di5jIGIvbGliL3Vrc3dyYW5kL213Y19kZXYuYw0KPiBpbmRleCA1YTljMGQ0OS4uNWE0Y2IxMDAg
MTAwNjQ0DQo+IC0tLSBhL2xpYi91a3N3cmFuZC9td2NfZGV2LmMNCj4gKysrIGIvbGliL3Vrc3dy
YW5kL213Y19kZXYuYw0KPiBAQCAtNjAsNyArNjAsNyBAQCBpbnQgZGV2X3JhbmRvbV9yZWFkKHN0
cnVjdCBkZXZpY2UgKmRldiBfX3VudXNlZCwgc3RydWN0IHVpbyAqdWlvLA0KPiAgIAljaHVua19z
aXplID0gY291bnQgJSBzdGVwOw0KPiAgIA0KPiAgIAlmb3IgKGkgPSAwOyBpIDwgY291bnQgLSBj
aHVua19zaXplOyBpICs9IHN0ZXApDQo+IC0JCSooKF9fdTMyICopYnVmICsgaSkgPSB1a19zd3Jh
bmRfcmFuZHIoKTsNCj4gKwkJKihidWYgKyBpKSA9IHVrX3N3cmFuZF9yYW5kcigpOw0KPiAgIA0K
PiAgIAkvKiBmaWxsIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgdGhlIGJ1ZmZlciAqLw0KPiAgIAlp
ZiAoY2h1bmtfc2l6ZSA+IDApIHsNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 11:55:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 11:55:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i57PD-0001oj-N3; Tue, 03 Sep 2019 11:55:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=7X6I=W6=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i57PB-0001nq-Va
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 11:55:26 +0000
X-Inumbo-ID: b65f86cc-ce41-11e9-ab91-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.81]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b65f86cc-ce41-11e9-ab91-12813bfff9fa;
 Tue, 03 Sep 2019 11:55:24 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EmSyVtXC3u4sdk28EpHqMqbic2hc2kOwuL5YwRMODF6H1Lv8oiIILbIV73CiDFLm6l/zKm7RAkM+AKvUSjJWo11/kW9cqIkvSikMfhvkURsF3VyPZrQoPR+Z10KJ0pS4RDQC+E4pRUz350yUzHgCoWCBaYOfJl9T4eBSJaGZggRfPOzYLy37FR/4tWFKqSTfNUwR0lRiqnRg2tmJXPKAgkHd7Xd1faPrVqEhBGfWyqw3DLBxCi/PKpgsMGXygrZYAl0LymYX7Fq0pbafg2fx3lltEBNh8k+KSkfwJXsDO+1UZr/fEkZ/lN2pYaIOm6ht2X1fTi7aykZSm0RO+PTmxA==
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=OhKUPAm6GYjsSUZ2c4RFOuyOR9E12jk7EKHZK2jNBvg=;
 b=mDpYX9FURH4CpwLswbVazwlQ+C0tNLLTmJM8R56R758cys9xO0O4NAH/H3hRLGT+/Ut7kAdAIDjc7kDZDx4w9LAfDsgwFMDrtyOmzOWgWfujKu29q+3uPnq/n9N8+6ThTlg5eLPiKvmwb0t4jSdJpSAk2c4KQ7VRL8ZL0kIALc+xV8M/wEM2W66DfQ63/yOB2vasZvBQbYgFHRn1Kzu31cSM/onmchRT7VP3TL/O6yunHB+QtA1Ighygv9oM+qNoHpChpFKBJsMLbMfd8gOoWMJe1OX0/pGcePKJ/8Y8FV7aM+9RK9XqRzoiUiFq3ky6H1son/lqOR5PYDe/rujfvA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4988.eurprd01.prod.exchangelabs.com (20.177.210.80) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Tue, 3 Sep
 2019 11:55:22 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Tue, 3 Sep 2019
 11:55:22 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH] lib/ukswrand: Fix reading from devices
Thread-Index: AQHVYi9ll5ppum+aJU6gdJ4Rc9RX7KcZ2IuA
Date: Tue, 3 Sep 2019 11:55:22 +0000
Message-ID: <86edea63-98cc-3510-4e45-71d2ab7aa9a9@stud.acs.upb.ro>
References: <20190903081250.3812-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190903081250.3812-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR04CA0050.eurprd04.prod.outlook.com
 (2603:10a6:802:2::21) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 905d24d9-53f1-4e22-b54e-08d7306599bd
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4988; 
x-ms-traffictypediagnostic: PR1PR01MB4988:
x-microsoft-antispam-prvs: <PR1PR01MB4988045A9F4C8EF11C7F09A7A6B90@PR1PR01MB4988.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:4714;
x-forefront-prvs: 01494FA7F7
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(366004)(396003)(346002)(39850400004)(136003)(189003)(199004)(6512007)(14454004)(11346002)(2501003)(46003)(305945005)(8936002)(4326008)(76176011)(6436002)(25786009)(446003)(5660300002)(2616005)(6246003)(31696002)(52116002)(6116002)(256004)(14444005)(31686004)(85182001)(99286004)(53936002)(81166006)(81156014)(102836004)(476003)(386003)(2906002)(478600001)(316002)(786003)(66556008)(110136005)(7736002)(85202003)(86362001)(186003)(66476007)(64756008)(486006)(71200400001)(66946007)(71190400001)(6486002)(4744005)(66446008)(8676002)(53546011)(6506007)(229853002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4988;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: e+13gTuSnPd2vtNdbwataCIQH0OWbI4hNiRFDhHBWBwoRBLqrCvUlE5ev0Fjzmg2TwYUN9hTkDKkXYi/LOA3JcdPJhqbPs2gYs1CNLN0iVW+nrTZCM9Tr5IgNH6T+SXNk/JUjVyRJsIyDArrD7YRET6DMLVvfd7fnm9KGbihw7+DBbUyHRLw+1UEq8CMfqcMlzWVe7dhFpSxI8ZFxk2HDUfon7/Pers37E7MH9x3pcl148lOGRiCz4jp3Pgbint1LxAH7ODM6H3HidAAiozZBKJRZGPIDSKyWYdgwuoBVGdHquFUwudkXyE2Z4wFt4go84UrLHvhT9nAIOHOCJaUFqOshaGr8sdgV1YmYioROBc63a1s+TpENFkBHbXlR1vQsXTY63ooKxDW6SlZ5CPUj903tcutVhOjzNdTRGtspDo=
x-ms-exchange-transport-forked: True
Content-ID: <9EA69E5617D57645A8E2DFF072A3F9FD@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 905d24d9-53f1-4e22-b54e-08d7306599bd
X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2019 11:55:22.7420 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ddszo98gHwKr/S900sVhx1tqVuV2dlsQUp4nZW9GZlkIESfZDPfYFcKqmbzehOr5rHhXYzjt3Hh2F6cxkBvSIYRK9x4hc6OtJrg2SPy06EUIW6UoDOhxIoHyU1FZb1mG
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4988
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/ukswrand: Fix reading from
 devices
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Costin Lupu <costin.lup@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpS
ZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1PHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFj
cy51cGIucm8+DQoNCk9uIDAzLjA5LjIwMTkgMTE6MTIsIENvc3RpbiBMdXB1IHdyb3RlOg0KPiBG
cm9tOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cEBnbWFpbC5jb20+DQo+DQo+IFNpZ25lZC1vZmYt
Ynk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQo+IC0tLQ0KPiAgIGxpYi91
a3N3cmFuZC9td2NfZGV2LmMgfCAyICstDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9u
KCspLCAxIGRlbGV0aW9uKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9saWIvdWtzd3JhbmQvbXdjX2Rl
di5jIGIvbGliL3Vrc3dyYW5kL213Y19kZXYuYw0KPiBpbmRleCA1YTljMGQ0OS4uNWE0Y2IxMDAg
MTAwNjQ0DQo+IC0tLSBhL2xpYi91a3N3cmFuZC9td2NfZGV2LmMNCj4gKysrIGIvbGliL3Vrc3dy
YW5kL213Y19kZXYuYw0KPiBAQCAtNjAsNyArNjAsNyBAQCBpbnQgZGV2X3JhbmRvbV9yZWFkKHN0
cnVjdCBkZXZpY2UgKmRldiBfX3VudXNlZCwgc3RydWN0IHVpbyAqdWlvLA0KPiAgIAljaHVua19z
aXplID0gY291bnQgJSBzdGVwOw0KPiAgIA0KPiAgIAlmb3IgKGkgPSAwOyBpIDwgY291bnQgLSBj
aHVua19zaXplOyBpICs9IHN0ZXApDQo+IC0JCSooKF9fdTMyICopYnVmICsgaSkgPSB1a19zd3Jh
bmRfcmFuZHIoKTsNCj4gKwkJKihidWYgKyBpKSA9IHVrX3N3cmFuZF9yYW5kcigpOw0KPiAgIA0K
PiAgIAkvKiBmaWxsIHRoZSByZW1haW5pbmcgYnl0ZXMgb2YgdGhlIGJ1ZmZlciAqLw0KPiAgIAlp
ZiAoY2h1bmtfc2l6ZSA+IDApIHsNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 12:21:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 12:21:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i57oq-0004qR-MH; Tue, 03 Sep 2019 12:21:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=7X6I=W6=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i57op-0004qB-D4
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 12:21:55 +0000
X-Inumbo-ID: 69d943a2-ce45-11e9-ab92-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 69d943a2-ce45-11e9-ab92-12813bfff9fa;
 Tue, 03 Sep 2019 12:21:54 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=e4MbpEx9wsz/sx1iPsx7YLK5r+ACBjdl5mFUv0fhOM/cPf0g7gJTYHUVMri5wufNXBEVBe4zhRvOycDFM6jXfWEomruFWsDbuitVTZTJLqYiagMewFqfqUKiZ4e29PxSTeQsR+yQiXBCJTOGgEgxRSVeybZ7/bQg0+B/j+lhPCkTUp25is7czw1TJuY+kbGeuffY3guu8HDIuVl00jeNYjLTXCwsTyGK538Teh2dC1aoSqVCkhjXSTgQ9wmnptOhWdJtVykislgTDLU13G3BvqM72hUyjrW1Y1+akDcAnmHqw/QKHIunog8Onqdxd+LXMZk3+tbcaAODiYGWBzLIQg==
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=hQrvLSHE/9CMficQCSv+tRiWfuRw+cIPS+EkXcd1qAA=;
 b=OV65me6yx+TjR0NSWNDbLJ4PUsX47rd0Db0erqrE6FgPw6gH1sDhiHdLZqRgwiAL2mFqFbow9usDAsKGZX0CYUe7UsQaBow+vy7ZdLF8o5B09JoPQQHBDL/LF93MJnaCgi23fsMHiuaoMxPZQ2tUO+4v36w6VFBOXMxbntZQ8JOL2ElPP40uchF6Rt+P/6MHTHPTEVIT6ZtoJfSJFVwVeCG/fjDGzv2AXZAHcwDSZR9sNWu4MSxxFUxK1QUM4nOsEai6OuligNP4WdvoqaVqAXuGmGJVJ/Ar7Xs95C/eJH7N72nUZrpvC0UyfO7NHtpqKV5tyN2y41OOax84p2ytvQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4970.eurprd01.prod.exchangelabs.com (20.177.209.202) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Tue, 3 Sep
 2019 12:21:50 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Tue, 3 Sep 2019
 12:21:50 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBNEWLIB PATCH 1/1] Add clock_getres and
 clock_settime stubs
Thread-Index: AQHVYlIprnV+zE6Fx0afiaVXAk3Smg==
Date: Tue, 3 Sep 2019 12:21:50 +0000
Message-ID: <20190903122141.29625-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0501CA0043.eurprd05.prod.outlook.com
 (2603:10a6:800:60::29) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 4b8ea2da-cf40-4207-ab42-08d730694c14
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4970; 
x-ms-traffictypediagnostic: PR1PR01MB4970:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB49700DC123D93F421D9463E6A6B90@PR1PR01MB4970.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:296;
x-forefront-prvs: 01494FA7F7
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(39850400004)(346002)(366004)(396003)(136003)(199004)(189003)(386003)(6506007)(6916009)(71190400001)(6512007)(52116002)(66556008)(6116002)(66476007)(64756008)(5640700003)(66446008)(4744005)(2351001)(71200400001)(53936002)(2501003)(6436002)(5660300002)(186003)(25786009)(8676002)(99286004)(316002)(6486002)(1076003)(81156014)(2616005)(86362001)(102836004)(81166006)(476003)(66946007)(486006)(4326008)(7736002)(478600001)(2906002)(14454004)(305945005)(50226002)(46003)(256004)(786003)(45776006)(8936002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4970;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: uk8RmSvxmRm/f9g1RTyJKCtOHc3Qlc9FEziIyc51/eEwHcis5vOTsCvqMhBiDv2TmRgV8IWJVO1VBvBtJEYyzyYK+ynvDXdllRQ0EojLdsSVk+4zigDXRxo41vqCH+IyfSLf1peB5zrKzE7u965bfKW2WpUHyzVVDmCKA+5TATxEZh3nzvXoqFNvyRIcIrphE30tGB9MweIBWw9k7atBL8WgWfW7J/2Ngld4KCH2YrcCIcSoaGgci8I7fAK0sLM5Bh8ymkdNZYMH7T8+Jq2SfJO+T4FE7W0O8hcYGOpZxyXc2j6C445VX5K9h9t5/G3a/gUe/stht7PrFJuudS1O0SOkpWgQWVRtNL/5SfNAWNOgitXJmCp73iep90HE4jQzCUUn0KxQlIEoGxw97eJFUzZGcnEuHiQZ2P9EjSck0mc=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 4b8ea2da-cf40-4207-ab42-08d730694c14
X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2019 12:21:50.4555 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: jEl1Nx+hDa+djvnjfhrCFVfy2axUfOsSEJg/7yRrSNhvchEVA/iWDggRVgIia4/+ksv6EXwYhtteMT6rVtv0jm9xuoIKZtpyzpvImiHJ0dfW1WL+NraozVEPGBIIs6z1
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4970
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 1/1] Add clock_getres and
 clock_settime stubs
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgotLS0KIHRpbWUuYyB8IDEwICsrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk
LCAxMCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvdGltZS5jIGIvdGltZS5jCmluZGV4IDk0
ZTgwOTcuLmE3OTY5MWMgMTAwNjQ0Ci0tLSBhL3RpbWUuYworKysgYi90aW1lLmMKQEAgLTEzNyw2
ICsxMzcsMTEgQEAgdW5zaWduZWQgaW50IHNsZWVwKHVuc2lnbmVkIGludCBzZWNvbmRzKQogCXJl
dHVybiAwOwogfQogCitpbnQgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCBjbGtfaWQgX191bnVzZWQs
IHN0cnVjdCB0aW1lc3BlYyAqcmVzIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCiBpbnQg
Y2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xrX2lkIF9fdW51c2VkLCBzdHJ1Y3QgdGltZXNwZWMg
KnRwIF9fdW51c2VkKQogewogCV9fbnNlYyBub3c7CkBAIC0xNjIsMyArMTY3LDggQEAgaW50IGNs
b2NrX2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCBfX3VudXNlZCwgc3RydWN0IHRpbWVzcGVjICp0
cCBfX3VudXNlZCkKIAl0cC0+dHZfbnNlYyA9IHVrYXJjaF90aW1lX3N1YnNlYyhub3cpOwogCXJl
dHVybiAwOwogfQorCitpbnQgY2xvY2tfc2V0dGltZShjbG9ja2lkX3QgY2xrX2lkIF9fdW51c2Vk
LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRwIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQot
LSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 12:21:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 12:21:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i57oq-0004qX-OK; Tue, 03 Sep 2019 12:21:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=7X6I=W6=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i57op-0004qC-Ef
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 12:21:55 +0000
X-Inumbo-ID: 69d943a2-ce45-11e9-ab92-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 69d943a2-ce45-11e9-ab92-12813bfff9fa;
 Tue, 03 Sep 2019 12:21:54 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=e4MbpEx9wsz/sx1iPsx7YLK5r+ACBjdl5mFUv0fhOM/cPf0g7gJTYHUVMri5wufNXBEVBe4zhRvOycDFM6jXfWEomruFWsDbuitVTZTJLqYiagMewFqfqUKiZ4e29PxSTeQsR+yQiXBCJTOGgEgxRSVeybZ7/bQg0+B/j+lhPCkTUp25is7czw1TJuY+kbGeuffY3guu8HDIuVl00jeNYjLTXCwsTyGK538Teh2dC1aoSqVCkhjXSTgQ9wmnptOhWdJtVykislgTDLU13G3BvqM72hUyjrW1Y1+akDcAnmHqw/QKHIunog8Onqdxd+LXMZk3+tbcaAODiYGWBzLIQg==
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=hQrvLSHE/9CMficQCSv+tRiWfuRw+cIPS+EkXcd1qAA=;
 b=OV65me6yx+TjR0NSWNDbLJ4PUsX47rd0Db0erqrE6FgPw6gH1sDhiHdLZqRgwiAL2mFqFbow9usDAsKGZX0CYUe7UsQaBow+vy7ZdLF8o5B09JoPQQHBDL/LF93MJnaCgi23fsMHiuaoMxPZQ2tUO+4v36w6VFBOXMxbntZQ8JOL2ElPP40uchF6Rt+P/6MHTHPTEVIT6ZtoJfSJFVwVeCG/fjDGzv2AXZAHcwDSZR9sNWu4MSxxFUxK1QUM4nOsEai6OuligNP4WdvoqaVqAXuGmGJVJ/Ar7Xs95C/eJH7N72nUZrpvC0UyfO7NHtpqKV5tyN2y41OOax84p2ytvQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4970.eurprd01.prod.exchangelabs.com (20.177.209.202) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Tue, 3 Sep
 2019 12:21:50 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Tue, 3 Sep 2019
 12:21:50 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBNEWLIB PATCH 1/1] Add clock_getres and
 clock_settime stubs
Thread-Index: AQHVYlIprnV+zE6Fx0afiaVXAk3Smg==
Date: Tue, 3 Sep 2019 12:21:50 +0000
Message-ID: <20190903122141.29625-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0501CA0043.eurprd05.prod.outlook.com
 (2603:10a6:800:60::29) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 4b8ea2da-cf40-4207-ab42-08d730694c14
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4970; 
x-ms-traffictypediagnostic: PR1PR01MB4970:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB49700DC123D93F421D9463E6A6B90@PR1PR01MB4970.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:296;
x-forefront-prvs: 01494FA7F7
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(39850400004)(346002)(366004)(396003)(136003)(199004)(189003)(386003)(6506007)(6916009)(71190400001)(6512007)(52116002)(66556008)(6116002)(66476007)(64756008)(5640700003)(66446008)(4744005)(2351001)(71200400001)(53936002)(2501003)(6436002)(5660300002)(186003)(25786009)(8676002)(99286004)(316002)(6486002)(1076003)(81156014)(2616005)(86362001)(102836004)(81166006)(476003)(66946007)(486006)(4326008)(7736002)(478600001)(2906002)(14454004)(305945005)(50226002)(46003)(256004)(786003)(45776006)(8936002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4970;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: uk8RmSvxmRm/f9g1RTyJKCtOHc3Qlc9FEziIyc51/eEwHcis5vOTsCvqMhBiDv2TmRgV8IWJVO1VBvBtJEYyzyYK+ynvDXdllRQ0EojLdsSVk+4zigDXRxo41vqCH+IyfSLf1peB5zrKzE7u965bfKW2WpUHyzVVDmCKA+5TATxEZh3nzvXoqFNvyRIcIrphE30tGB9MweIBWw9k7atBL8WgWfW7J/2Ngld4KCH2YrcCIcSoaGgci8I7fAK0sLM5Bh8ymkdNZYMH7T8+Jq2SfJO+T4FE7W0O8hcYGOpZxyXc2j6C445VX5K9h9t5/G3a/gUe/stht7PrFJuudS1O0SOkpWgQWVRtNL/5SfNAWNOgitXJmCp73iep90HE4jQzCUUn0KxQlIEoGxw97eJFUzZGcnEuHiQZ2P9EjSck0mc=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 4b8ea2da-cf40-4207-ab42-08d730694c14
X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Sep 2019 12:21:50.4555 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: jEl1Nx+hDa+djvnjfhrCFVfy2axUfOsSEJg/7yRrSNhvchEVA/iWDggRVgIia4/+ksv6EXwYhtteMT6rVtv0jm9xuoIKZtpyzpvImiHJ0dfW1WL+NraozVEPGBIIs6z1
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4970
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 1/1] Add clock_getres and
 clock_settime stubs
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgotLS0KIHRpbWUuYyB8IDEwICsrKysrKysrKysKIDEgZmlsZSBjaGFuZ2Vk
LCAxMCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvdGltZS5jIGIvdGltZS5jCmluZGV4IDk0
ZTgwOTcuLmE3OTY5MWMgMTAwNjQ0Ci0tLSBhL3RpbWUuYworKysgYi90aW1lLmMKQEAgLTEzNyw2
ICsxMzcsMTEgQEAgdW5zaWduZWQgaW50IHNsZWVwKHVuc2lnbmVkIGludCBzZWNvbmRzKQogCXJl
dHVybiAwOwogfQogCitpbnQgY2xvY2tfZ2V0cmVzKGNsb2NraWRfdCBjbGtfaWQgX191bnVzZWQs
IHN0cnVjdCB0aW1lc3BlYyAqcmVzIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCiBpbnQg
Y2xvY2tfZ2V0dGltZShjbG9ja2lkX3QgY2xrX2lkIF9fdW51c2VkLCBzdHJ1Y3QgdGltZXNwZWMg
KnRwIF9fdW51c2VkKQogewogCV9fbnNlYyBub3c7CkBAIC0xNjIsMyArMTY3LDggQEAgaW50IGNs
b2NrX2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCBfX3VudXNlZCwgc3RydWN0IHRpbWVzcGVjICp0
cCBfX3VudXNlZCkKIAl0cC0+dHZfbnNlYyA9IHVrYXJjaF90aW1lX3N1YnNlYyhub3cpOwogCXJl
dHVybiAwOwogfQorCitpbnQgY2xvY2tfc2V0dGltZShjbG9ja2lkX3QgY2xrX2lkIF9fdW51c2Vk
LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnRwIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQot
LSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 13:01:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 13:01:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i58Qo-0000sr-7M; Tue, 03 Sep 2019 13:01:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i58Qn-0000sh-E6
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 13:01:09 +0000
X-Inumbo-ID: e3d0df3a-ce4a-11e9-ab94-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e3d0df3a-ce4a-11e9-ab94-12813bfff9fa;
 Tue, 03 Sep 2019 13:01:06 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 4A88A10563C;
 Tue,  3 Sep 2019 15:01:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 9V34vwelIAp8; Tue,  3 Sep 2019 15:01:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 16AB110535A;
 Tue,  3 Sep 2019 15:01:05 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 15:01:04 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 15:01:04
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 2/3] Add Makefile.uk and
 main loop glue code
Thread-Index: AQHVXbVl08eiyNs1rEqc1Zv6Z7Vsr6cXkRWAgAJiyIA=
Date: Tue, 3 Sep 2019 13:01:04 +0000
Message-ID: <85213428-3556-441E-A4AF-77D47CE3AE33@neclab.eu>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-3-felipe.huici@neclab.eu>
 <DB7PR08MB3082EEB097B8F40B2E2FA2BDF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
In-Reply-To: <DB7PR08MB3082EEB097B8F40B2E2FA2BDF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <11F6F51F8D832249A15164C3E4C1F509@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 2/3] Add Makefile.uk and
 main loop glue code
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLCBwbGVhc2Ugc2VlIGlubGluZS4NCg0K77u/T24gMDIuMDkuMTksIDA0OjM1LCAi
SnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkiIDxKdXN0aW4uSGVAYXJtLmNvbT4gd3Jv
dGU6DQoNCiAgICBIaSBGZWxpcGUNCiAgICANCiAgICA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tDQogICAgPiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3Rz
LnhlbnByb2plY3Qub3JnPiBPbiBCZWhhbGYNCiAgICA+IE9mIEZlbGlwZSBIdWljaQ0KICAgID4g
U2VudDogMjAxOeW5tDjmnIgyOOaXpSAyMzoyOQ0KICAgID4gVG86IG1pbmlvcy1kZXZlbEBsaXN0
cy54ZW4ub3JnDQogICAgPiBDYzogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1
PjsgU2ltb24gS3Vlbnplcg0KICAgID4gPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0KICAgID4g
U3ViamVjdDogW01pbmlvcy1kZXZlbF0gW1VOSUtSQUZUL0xJQkxVQSBQQVRDSCAyLzNdIEFkZCBN
YWtlZmlsZS51ayBhbmQNCiAgICA+IG1haW4gbG9vcCBnbHVlIGNvZGUNCiAgICA+DQogICAgPiBU
aGlzIGlzIGEgcG9ydCBvZiBsdWEgdG8gVW5pa3JhZnQgYXMgYW4gZXh0ZXJuYWwgbGlicmFyeS4g
SXQgcmVxdWlyZXMNCiAgICA+IGxpYmMsIHNvIGluIHlvdXIgYXBwbGljYXRpb24gTWFrZWZpbGUg
dGhlIGxpYnJhcnkgZGVwZW5kZW5jeSBsaXN0DQogICAgPiBzaG91bGQgcmVhZDoNCiAgICA+DQog
ICAgPiAgICAgICAgICAgIExJQlMgOj0gLi4uOiQoVUtfTElCUykvbmV3bGliOiQoVUtfTElCUykv
bHVhOi4uLg0KICAgID4NCiAgICA+IFBsZWFzZSByZWZlciB0byBSRUFETUUubWQgZm9yIGluZm9y
bWF0aW9uIG9uIHJ1bm5pbmcgaXQuDQogICAgPg0KICAgID4gU2lnbmVkLW9mZi1ieTogRmVsaXBl
IEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KICAgID4gU2lnbmVkLW9mZi1ieTogU2lt
b24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQogICAgPiAtLS0NCiAgICA+ICBN
YWtlZmlsZS51ayB8IDEwMCArKysrKysrKysrDQogICAgPiAgbHVhLmMgICAgICAgfCA2MjANCiAg
ICA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysNCiAgICA+ICsrDQogICAgPiAgMiBmaWxlcyBjaGFuZ2VkLCA3MjAgaW5zZXJ0aW9ucygr
KQ0KICAgID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51aw0KICAgID4gIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsdWEuYw0KICAgID4NCiAgICA+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBi
L01ha2VmaWxlLnVrDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAw
MDAwMC4uYmRiMzA5Mw0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrIGIvTWFrZWZpbGUu
dWsNCiAgICA+IEBAIC0wLDAgKzEsMTAwIEBADQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiAjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KICAgID4gKyMgTGlicmFyeSByZWdpc3RyYXRpb24NCiAgICA+ICsjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArJChldmFsICQoY2FsbCBhZGRsaWJfcyxs
aWJsdWEsJChDT05GSUdfTElCTFVBKSkpDQogICAgPiArDQogICAgPiArIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgU291cmNlcw0KICAgID4gKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJMVUFfVkVSU0lPTj01LjMuNQ0KICAgID4gK0xJ
QkxVQV9UQVJCQUxMPWx1YS0kKExJQkxVQV9WRVJTSU9OKQ0KICAgID4gK0xJQkxVQV9VUkw9aHR0
cHM6Ly93d3cubHVhLm9yZy9mdHAvJChMSUJMVUFfVEFSQkFMTCkudGFyLmd6DQogICAgPiArDQog
ICAgPiArJChldmFsICQoY2FsbCBmZXRjaCxsaWJsdWEsJChMSUJMVUFfVVJMKSkpDQogICAgPiAr
DQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQogICAgPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgSGVscGVy
cw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KICAgID4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJMVUFf
U1JDU19CQVNFPSQoTElCTFVBX09SSUdJTikvJChMSUJMVUFfVEFSQkFMTCkvc3JjDQogICAgPiAr
DQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQogICAgPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgTGlicmFy
eSBpbmNsdWRlcw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+
ICsjIFB1dCBwdWJsaWMgaGVhZGVycyBvZiB0aGUgbGlicmFyeSB0byBhIHB1YmxpYyBmb2xkZXIg
YW5kIGV4cG9ydCB0aGVtDQogICAgPiBnbG9iYWxseS4NCiAgICA+ICsjIFRoZSBwcmVwYXJlIHN0
ZXAgYmVsb3cgdGFrZXMgY2FyZSBvZiBwb3B1bGF0aW5nIHRoZSBmb2xkZXIuDQogICAgPiArJChj
YWxsIG1rX3N1Yl9idWlsZF9kaXIsbGlibHVhL2luY2x1ZGUpDQogICAgPiArQ0lOQ0xVREVTLSQo
Q09ORklHX0xJQkxVQSkgICArPSAtSSQoTElCTFVBX0JVSUxEKS9pbmNsdWRlDQogICAgPiArQ1BQ
SU5DTFVERVMtJChDT05GSUdfTElCTFVBKSArPSAtSSQoTElCTFVBX0JVSUxEKS9pbmNsdWRlDQog
ICAgPiArDQogICAgPiArIyBQcml2YXRlIGhlYWRlcnMNCiAgICA+ICtMSUJMVUFfQ0lOQ0xVREVT
LXkgKz0gLUkkKExJQkxVQV9TUkNTX0JBU0UpDQogICAgPiArDQogICAgPiArIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiAjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgQ29tcGlsYXRpb24gdW5pdA0KICAgID4gKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0K
ICAgID4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJMVUFfQ0ZMQUdTLXkgKz0g
LURMVUFfQ09NUEFUXzVfMg0KICAgID4gKw0KICAgID4gKyMgTWFpbiBsb29wDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9CQVNFKS9sdWEuYw0KICAgID4gKw0KICAgID4gKyMgQ09S
RV9PDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xhcGkuYw0K
ICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sY29kZS5jDQogICAg
PiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xjdHlwZS5jDQogICAgPiAr
TElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkZWJ1Zy5jDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkby5jDQogICAgPiArTElCTFVBX1NS
Q1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkdW1wLmMNCiAgICA+ICtMSUJMVUFfU1JDUy15
ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGZ1bmMuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0g
JChMSUJMVUFfU1JDU19CQVNFKS9sZ2MuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJM
VUFfU1JDU19CQVNFKS9sbGV4LmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NS
Q1NfQkFTRSkvbG1lbS5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JB
U0UpL2xvYmplY3QuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNF
KS9sb3Bjb2Rlcy5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0Up
L2xwYXJzZXIuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9s
c3RhdGUuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sc3Ry
aW5nLmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRhYmxl
LmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRtLmMNCiAg
ICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHVuZHVtcC5jDQogICAg
PiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2x2bS5jDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2x6aW8uYw0KICAgID4gKw0KICAgID4g
KyMgTElCX08NCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGF1
eGxpYi5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xiYXNl
bGliLmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGJpdGxp
Yi5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xjb3JvbGli
LmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGRibGliLmMN
CiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGlvbGliLmMNCiAg
ICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG1hdGhsaWIuYw0KICAg
ID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sb3NsaWIuYw0KICAgID4g
K0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sc3RybGliLmMNCiAgICA+ICtM
SUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRhYmxpYi5jDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2x1dGY4bGliLmMNCiAgICA+ICtMSUJM
VUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG9hZGxpYi5jDQogICAgPiArTElCTFVB
X1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xpbml0LmMNCiAgICA+ICsNCiAgICA+ICsN
CiAgICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMNCiAgICA+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBsaWJyYXkg
QVBJIGhlYWRlcnMNCiAgICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAg
PiArJChMSUJMVUFfU1JDU19CQVNFKS8lLmg6ICQoTElCTFVBX0JVSUxEKS8ub3JpZ2luDQogICAg
PiArICAgICBAIyBlbXB0eSByZWNpcGUgdG8gZW5mb3JjZSBkZXBlbmRlbmN5IHRvIGFyY2hpdmUg
ZXh0cmFjdGlvbg0KICAgID4gKw0KICAgID4gKyQoTElCTFVBX0JVSUxEKS9pbmNsdWRlLyUuaDog
JChMSUJMVUFfU1JDU19CQVNFKS8lLmgNCiAgICA+ICsgICAgICQoY2FsbCBidWlsZF9jbWQsTE4s
bGlibHVhLCRALFwNCiAgICA+ICsgICAgIGxuIC1zZiAkPCAkQCkNCiAgICA+ICsNCiAgICA+ICsk
KExJQkxVQV9TUkNTX0JBU0UpLyUuaHBwOiAkKExJQkxVQV9CVUlMRCkvLm9yaWdpbg0KICAgID4g
KyAgICAgQCMgZW1wdHkgcmVjaXBlIHRvIGVuZm9yY2UgZGVwZW5kZW5jeSB0byBhcmNoaXZlIGV4
dHJhY3Rpb24NCiAgICA+ICsNCiAgICA+ICskKExJQkxVQV9CVUlMRCkvaW5jbHVkZS8lLmhwcDog
JChMSUJMVUFfU1JDU19CQVNFKS8lLmhwcA0KICAgID4gKyAgICAgJChjYWxsIGJ1aWxkX2NtZCxM
TixsaWJsdWEsJEAsXA0KICAgID4gKyAgICAgbG4gLXNmICQ8ICRAKQ0KICAgID4gKw0KICAgID4g
KyMgVE9fSU5DDQogICAgPiArVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9s
dWEuaA0KICAgID4gK1VLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbHVhY29u
Zi5oDQogICAgPiArVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWFsaWIu
aA0KICAgID4gK1VLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbGF1eGxpYi5o
DQogICAgPiArVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWEuaHBwDQog
ICAgPiBkaWZmIC0tZ2l0IGEvbHVhLmMgYi9sdWEuYw0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjhmMmY4NjANCiAgICA+IC0tLSAvZGV2L251bGwNCiAg
ICA+ICsrKyBiL2x1YS5jDQogICAgDQogICAgTG9va3MgbGlrZSB0aGUgc3RhbmRhbG9uZSBsdWEg
aW50ZXJwcmV0ZXIgb3JpZ2luYXRlcyBmcm9tDQogICAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNv
bnRlbnQuY29tL2x1YS9sdWEvdjUuMy41L2x1YS5jDQogICAgQnV0IEkgc2F3IHNvbWUgdGFicyB3
ZXJlIGNoYW5nZWQgaW50byBzcGFjZXMsIGlzIHRoYXQgaW50ZW50aW9uYWw/DQogICAgSU1PLCBp
dCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY2hhbmdlcyBsZXNzDQogICAgDQoNCj4gWWVzLCBJIHVz
ZWQgbHVhLmMgYXMgYmFzaXMsIGFuZCBubywgdGhhdCB3YXNuJ3QgaW50ZW50aW9uYWwuIEZvciBh
IHYyLCBJIHRoaW5rIGEgY2xlYW5lciBhcHByb2FjaCB3b3VsZCBiZSBmb3IgbWUgdG8gcHJvdmlk
ZSB0aGUgc21hbGwgbW9kaWZjYXRpb25zIHRvIGx1YS5jIGFzIGEgcGF0Y2ggZmlsZSB1bmRlciB0
aGUgbGlicmFyeSdzIHBhdGNoZXMgZGlyZWN0b3J5LiBUaGlzIHNob3VsZCBub3Qgb25seSBtYWtl
IHRoZSByZXZpZXcgZWFzaWVyIHNpbmNlIHlvdSdsbCBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IHNl
ZSBqdXN0IHRoZSBjaGFuZ2VzLCBidXQgaXQgd291bGQgYWxzbyBzaW1wbGlmeSB0aGUgcHJvY2Vz
cyBvZiB1cGdyYWRpbmcgdG8gbmV3ZXIgdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4NCg0KLS0gRmVs
aXBlDQoNCg0KICAgIC0tDQogICAgQ2hlZXJzLA0KICAgIEp1c3RpbiAoSmlhIEhlKQ0KICAgIA0K
ICAgIA0KICAgIA0KICAgID4gQEAgLTAsMCArMSw2MjAgQEANCiAgICA+ICsvKg0KICAgID4gKyoq
ICRJZDogbHVhLmMsdiAxLjIzMC4xLjEgMjAxNy8wNC8xOSAxNzoyOTo1NyByb2JlcnRvIEV4cCAk
DQogICAgPiArKiogTHVhIHN0YW5kLWFsb25lIGludGVycHJldGVyDQogICAgPiArKiogU2VlIENv
cHlyaWdodCBOb3RpY2UgaW4gbHVhLmgNCiAgICA+ICsqLw0KICAgID4gKw0KICAgID4gKyNkZWZp
bmUgbHVhX2MNCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSAibHByZWZpeC5oIg0KICAgID4gKw0K
ICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxzaWduYWwuaD4NCiAgICA+ICsjaW5jbHVkZSA8c3Rk
aW8uaD4NCiAgICA+ICsjaW5jbHVkZSA8c3RkbGliLmg+DQogICAgPiArI2luY2x1ZGUgPHN0cmlu
Zy5oPg0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlICJsdWEuaCINCiAgICA+ICsNCiAgICA+ICsj
aW5jbHVkZSAibGF1eGxpYi5oIg0KICAgID4gKyNpbmNsdWRlICJsdWFsaWIuaCINCiAgICA+ICsN
CiAgICA+ICsjaW5jbHVkZSA8dWsvcGxhdC9tZW1vcnkuaD4NCiAgICA+ICsNCiAgICA+ICsjaWYg
IWRlZmluZWQoTFVBX1BST01QVCkNCiAgICA+ICsjZGVmaW5lIExVQV9QUk9NUFQgICAgICAgICAg
ICI+ICINCiAgICA+ICsjZGVmaW5lIExVQV9QUk9NUFQyICAgICAgICAgICI+PiAiDQogICAgPiAr
I2VuZGlmDQogICAgPiArDQogICAgPiArI2lmICFkZWZpbmVkKExVQV9QUk9HTkFNRSkNCiAgICA+
ICsjZGVmaW5lIExVQV9QUk9HTkFNRSAgICAgICAgICJsdWEiDQogICAgPiArI2VuZGlmDQogICAg
PiArDQogICAgPiArI2lmICFkZWZpbmVkKExVQV9NQVhJTlBVVCkNCiAgICA+ICsjZGVmaW5lIExV
QV9NQVhJTlBVVCAgICAgICAgIDUxMg0KICAgID4gKyNlbmRpZg0KICAgID4gKw0KICAgID4gKyNp
ZiAhZGVmaW5lZChMVUFfSU5JVF9WQVIpDQogICAgPiArI2RlZmluZSBMVUFfSU5JVF9WQVIgICAg
ICAgICAiTFVBX0lOSVQiDQogICAgPiArI2VuZGlmDQogICAgPiArDQogICAgPiArI2RlZmluZSBM
VUFfSU5JVFZBUlZFUlNJT04gICBMVUFfSU5JVF9WQVIgTFVBX1ZFUlNVRkZJWA0KICAgID4gKw0K
ICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogbHVhX3N0ZGluX2lzX3R0eSBkZXRlY3RzIHdo
ZXRoZXIgdGhlIHN0YW5kYXJkIGlucHV0IGlzIGEgJ3R0eScgKHRoYXQNCiAgICA+ICsqKiBpcywg
d2hldGhlciB3ZSdyZSBydW5uaW5nIGx1YSBpbnRlcmFjdGl2ZWx5KS4NCiAgICA+ICsqLw0KICAg
ID4gKyNpZiAhZGVmaW5lZChsdWFfc3RkaW5faXNfdHR5KSAgICAgICAvKiB7ICovDQogICAgPiAr
DQogICAgPiArI2lmIGRlZmluZWQoTFVBX1VTRV9QT1NJWCkgICAvKiB7ICovDQogICAgPiArDQog
ICAgPiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgID4gKyNkZWZpbmUgbHVhX3N0ZGluX2lzX3R0
eSgpICAgaXNhdHR5KDApDQogICAgPiArDQogICAgPiArI2VsaWYgZGVmaW5lZChMVUFfVVNFX1dJ
TkRPV1MpICAgICAgIC8qIH17ICovDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPGlvLmg+DQog
ICAgPiArI2luY2x1ZGUgPHdpbmRvd3MuaD4NCiAgICA+ICsNCiAgICA+ICsjZGVmaW5lIGx1YV9z
dGRpbl9pc190dHkoKSAgIF9pc2F0dHkoX2ZpbGVubyhzdGRpbikpDQogICAgPiArDQogICAgPiAr
I2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH17ICovDQogICAgPiArDQog
ICAgPiArLyogSVNPIEMgZGVmaW5pdGlvbiAqLw0KICAgID4gKyNkZWZpbmUgbHVhX3N0ZGluX2lz
X3R0eSgpICAgMSAgLyogYXNzdW1lIHN0ZGluIGlzIGEgdHR5ICovDQogICAgPiArDQogICAgPiAr
I2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH0gKi8NCiAgICA+ICsNCiAg
ICA+ICsjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogfSAqLw0KICAgID4g
Kw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogbHVhX3JlYWRsaW5lIGRlZmluZXMgaG93
IHRvIHNob3cgYSBwcm9tcHQgYW5kIHRoZW4gcmVhZCBhIGxpbmUgZnJvbQ0KICAgID4gKyoqIHRo
ZSBzdGFuZGFyZCBpbnB1dC4NCiAgICA+ICsqKiBsdWFfc2F2ZWxpbmUgZGVmaW5lcyBob3cgdG8g
InNhdmUiIGEgcmVhZCBsaW5lIGluIGEgImhpc3RvcnkiLg0KICAgID4gKyoqIGx1YV9mcmVlbGlu
ZSBkZWZpbmVzIGhvdyB0byBmcmVlIGEgbGluZSByZWFkIGJ5IGx1YV9yZWFkbGluZS4NCiAgICA+
ICsqLw0KICAgID4gKyNpZiAhZGVmaW5lZChsdWFfcmVhZGxpbmUpICAgLyogeyAqLw0KICAgID4g
Kw0KICAgID4gKyNpZiBkZWZpbmVkKExVQV9VU0VfUkVBRExJTkUpICAgICAgICAvKiB7ICovDQog
ICAgPiArDQogICAgPiArI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+DQogICAgPiArI2lu
Y2x1ZGUgPHJlYWRsaW5lL2hpc3RvcnkuaD4NCiAgICA+ICsjZGVmaW5lIGx1YV9yZWFkbGluZShM
LGIscCkgICgodm9pZClMLCAoKGIpPXJlYWRsaW5lKHApKSAhPSBOVUxMKQ0KICAgID4gKyNkZWZp
bmUgbHVhX3NhdmVsaW5lKEwsbGluZSkgKCh2b2lkKUwsIGFkZF9oaXN0b3J5KGxpbmUpKQ0KICAg
ID4gKyNkZWZpbmUgbHVhX2ZyZWVsaW5lKEwsYikgICAgKCh2b2lkKUwsIGZyZWUoYikpDQogICAg
PiArDQogICAgPiArI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH17ICov
DQogICAgPiArDQogICAgPiArI2RlZmluZSBsdWFfcmVhZGxpbmUoTCxiLHApIFwNCiAgICA+ICsg
ICAgICAgICgodm9pZClMLCBmcHV0cyhwLCBzdGRvdXQpLCBmZmx1c2goc3Rkb3V0KSwgIC8qIHNo
b3cgcHJvbXB0ICovIFwNCiAgICA+ICsgICAgICAgIGZnZXRzKGIsIExVQV9NQVhJTlBVVCwgc3Rk
aW4pICE9IE5VTEwpICAvKiBnZXQgbGluZSAqLw0KICAgID4gKyNkZWZpbmUgbHVhX3NhdmVsaW5l
KEwsbGluZSkgeyAodm9pZClMOyAodm9pZClsaW5lOyB9DQogICAgPiArI2RlZmluZSBsdWFfZnJl
ZWxpbmUoTCxiKSAgICB7ICh2b2lkKUw7ICh2b2lkKWI7IH0NCiAgICA+ICsNCiAgICA+ICsjZW5k
aWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogfSAqLw0KICAgID4gKw0KICAgID4g
KyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB9ICovDQogICAgPiArDQog
ICAgPiArDQogICAgPiArDQogICAgPiArDQogICAgPiArc3RhdGljIGx1YV9TdGF0ZSAqZ2xvYmFs
TCA9IE5VTEw7DQogICAgPiArDQogICAgPiArc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lID0g
TFVBX1BST0dOQU1FOw0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogSG9v
ayBzZXQgYnkgc2lnbmFsIGZ1bmN0aW9uIHRvIHN0b3AgdGhlIGludGVycHJldGVyLg0KICAgID4g
KyovDQogICAgPiArc3RhdGljIHZvaWQgbHN0b3AgKGx1YV9TdGF0ZSAqTCwgbHVhX0RlYnVnICph
cikgew0KICAgID4gKyAgKHZvaWQpYXI7ICAvKiB1bnVzZWQgYXJnLiAqLw0KICAgID4gKyAgbHVh
X3NldGhvb2soTCwgTlVMTCwgMCwgMCk7ICAvKiByZXNldCBob29rICovDQogICAgPiArICBsdWFM
X2Vycm9yKEwsICJpbnRlcnJ1cHRlZCEiKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQog
ICAgPiArLyoNCiAgICA+ICsqKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgYSBDIHNpZ25hbC4g
QmVjYXVzZSBhIEMgc2lnbmFsIGNhbm5vdA0KICAgID4gKyoqIGp1c3QgY2hhbmdlIGEgTHVhIHN0
YXRlIChhcyB0aGVyZSBpcyBubyBwcm9wZXIgc3luY2hyb25pemF0aW9uKSwNCiAgICA+ICsqKiB0
aGlzIGZ1bmN0aW9uIG9ubHkgc2V0cyBhIGhvb2sgdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgc3Rv
cCB0aGUNCiAgICA+ICsqKiBpbnRlcnByZXRlci4NCiAgICA+ICsqLw0KICAgID4gK3N0YXRpYyB2
b2lkIGxhY3Rpb24gKGludCBpKSB7DQogICAgPiArICBzaWduYWwoaSwgU0lHX0RGTCk7IC8qIGlm
IGFub3RoZXIgU0lHSU5UIGhhcHBlbnMsIHRlcm1pbmF0ZSBwcm9jZXNzICovDQogICAgPiArICBs
dWFfc2V0aG9vayhnbG9iYWxMLCBsc3RvcCwgTFVBX01BU0tDQUxMIHwgTFVBX01BU0tSRVQgfA0K
ICAgID4gTFVBX01BU0tDT1VOVCwgMSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAg
ID4gK3N0YXRpYyB2b2lkIHByaW50X3VzYWdlIChjb25zdCBjaGFyICpiYWRvcHRpb24pIHsNCiAg
ICA+ICsgIGx1YV93cml0ZXN0cmluZ2Vycm9yKCIlczogIiwgcHJvZ25hbWUpOw0KICAgID4gKyAg
aWYgKGJhZG9wdGlvblsxXSA9PSAnZScgfHwgYmFkb3B0aW9uWzFdID09ICdsJykNCiAgICA+ICsg
ICAgbHVhX3dyaXRlc3RyaW5nZXJyb3IoIiclcycgbmVlZHMgYXJndW1lbnRcbiIsIGJhZG9wdGlv
bik7DQogICAgPiArICBlbHNlDQogICAgPiArICAgIGx1YV93cml0ZXN0cmluZ2Vycm9yKCJ1bnJl
Y29nbml6ZWQgb3B0aW9uICclcydcbiIsIGJhZG9wdGlvbik7DQogICAgPiArICBsdWFfd3JpdGVz
dHJpbmdlcnJvcigNCiAgICA+ICsgICJ1c2FnZTogJXMgW29wdGlvbnNdIFtzY3JpcHQgW2FyZ3Nd
XVxuIg0KICAgID4gKyAgIkF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiINCiAgICA+ICsgICIgIC1l
IHN0YXQgIGV4ZWN1dGUgc3RyaW5nICdzdGF0J1xuIg0KICAgID4gKyAgIiAgLWkgICAgICAgZW50
ZXIgaW50ZXJhY3RpdmUgbW9kZSBhZnRlciBleGVjdXRpbmcgJ3NjcmlwdCdcbiINCiAgICA+ICsg
ICIgIC1sIG5hbWUgIHJlcXVpcmUgbGlicmFyeSAnbmFtZScgaW50byBnbG9iYWwgJ25hbWUnXG4i
DQogICAgPiArICAiICAtdiAgICAgICBzaG93IHZlcnNpb24gaW5mb3JtYXRpb25cbiINCiAgICA+
ICsgICIgIC1FICAgICAgIGlnbm9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiINCiAgICA+ICsg
ICIgIC0tICAgICAgIHN0b3AgaGFuZGxpbmcgb3B0aW9uc1xuIg0KICAgID4gKyAgIiAgLSAgICAg
ICAgc3RvcCBoYW5kbGluZyBvcHRpb25zIGFuZCBleGVjdXRlIHN0ZGluXG4iDQogICAgPiArICAs
DQogICAgPiArICBwcm9nbmFtZSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4g
Ky8qDQogICAgPiArKiogUHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UsIGFkZGluZyB0aGUgcHJvZ3Jh
bSBuYW1lIGluIGZyb250IG9mIGl0DQogICAgPiArKiogKGlmIHByZXNlbnQpDQogICAgPiArKi8N
CiAgICA+ICtzdGF0aWMgdm9pZCBsX21lc3NhZ2UgKGNvbnN0IGNoYXIgKnBuYW1lLCBjb25zdCBj
aGFyICptc2cpIHsNCiAgICA+ICsgIGlmIChwbmFtZSkgbHVhX3dyaXRlc3RyaW5nZXJyb3IoIiVz
OiAiLCBwbmFtZSk7DQogICAgPiArICBsdWFfd3JpdGVzdHJpbmdlcnJvcigiJXNcbiIsIG1zZyk7
DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogQ2hlY2sg
d2hldGhlciAnc3RhdHVzJyBpcyBub3QgT0sgYW5kLCBpZiBzbywgcHJpbnRzIHRoZSBlcnJvcg0K
ICAgID4gKyoqIG1lc3NhZ2Ugb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suIEl0IGFzc3VtZXMgdGhh
dCB0aGUgZXJyb3Igb2JqZWN0DQogICAgPiArKiogaXMgYSBzdHJpbmcsIGFzIGl0IHdhcyBlaXRo
ZXIgZ2VuZXJhdGVkIGJ5IEx1YSBvciBieSAnbXNnaGFuZGxlcicuDQogICAgPiArKi8NCiAgICA+
ICtzdGF0aWMgaW50IHJlcG9ydCAobHVhX1N0YXRlICpMLCBpbnQgc3RhdHVzKSB7DQogICAgPiAr
ICBpZiAoc3RhdHVzICE9IExVQV9PSykgew0KICAgID4gKyAgICBjb25zdCBjaGFyICptc2cgPSBs
dWFfdG9zdHJpbmcoTCwgLTEpOw0KICAgID4gKyAgICBsX21lc3NhZ2UocHJvZ25hbWUsIG1zZyk7
DQogICAgPiArICAgIGx1YV9wb3AoTCwgMSk7ICAvKiByZW1vdmUgbWVzc2FnZSAqLw0KICAgID4g
KyAgfQ0KICAgID4gKyAgcmV0dXJuIHN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiAr
DQogICAgPiArLyoNCiAgICA+ICsqKiBNZXNzYWdlIGhhbmRsZXIgdXNlZCB0byBydW4gYWxsIGNo
dW5rcw0KICAgID4gKyovDQogICAgPiArc3RhdGljIGludCBtc2doYW5kbGVyIChsdWFfU3RhdGUg
KkwpIHsNCiAgICA+ICsgIGNvbnN0IGNoYXIgKm1zZyA9IGx1YV90b3N0cmluZyhMLCAxKTsNCiAg
ICA+ICsgIGlmIChtc2cgPT0gTlVMTCkgeyAgLyogaXMgZXJyb3Igb2JqZWN0IG5vdCBhIHN0cmlu
Zz8gKi8NCiAgICA+ICsgICAgaWYgKGx1YUxfY2FsbG1ldGEoTCwgMSwgIl9fdG9zdHJpbmciKSAm
JiAgLyogZG9lcyBpdCBoYXZlIGEgbWV0YW1ldGhvZA0KICAgID4gKi8NCiAgICA+ICsgICAgICAg
IGx1YV90eXBlKEwsIC0xKSA9PSBMVUFfVFNUUklORykgIC8qIHRoYXQgcHJvZHVjZXMgYSBzdHJp
bmc/ICovDQogICAgPiArICAgICAgcmV0dXJuIDE7ICAvKiB0aGF0IGlzIHRoZSBtZXNzYWdlICov
DQogICAgPiArICAgIGVsc2UNCiAgICA+ICsgICAgICBtc2cgPSBsdWFfcHVzaGZzdHJpbmcoTCwg
IihlcnJvciBvYmplY3QgaXMgYSAlcyB2YWx1ZSkiLA0KICAgID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsdWFMX3R5cGVuYW1lKEwsIDEpKTsNCiAgICA+ICsgIH0NCiAgICA+ICsg
IGx1YUxfdHJhY2ViYWNrKEwsIEwsIG1zZywgMSk7ICAvKiBhcHBlbmQgYSBzdGFuZGFyZCB0cmFj
ZWJhY2sgKi8NCiAgICA+ICsgIHJldHVybiAxOyAgLyogcmV0dXJuIHRoZSB0cmFjZWJhY2sgKi8N
CiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBJbnRlcmZh
Y2UgdG8gJ2x1YV9wY2FsbCcsIHdoaWNoIHNldHMgYXBwcm9wcmlhdGUgbWVzc2FnZSBmdW5jdGlv
bg0KICAgID4gKyoqIGFuZCBDLXNpZ25hbCBoYW5kbGVyLiBVc2VkIHRvIHJ1biBhbGwgY2h1bmtz
Lg0KICAgID4gKyovDQogICAgPiArc3RhdGljIGludCBkb2NhbGwgKGx1YV9TdGF0ZSAqTCwgaW50
IG5hcmcsIGludCBucmVzKSB7DQogICAgPiArICBpbnQgc3RhdHVzOw0KICAgID4gKyAgaW50IGJh
c2UgPSBsdWFfZ2V0dG9wKEwpIC0gbmFyZzsgIC8qIGZ1bmN0aW9uIGluZGV4ICovDQogICAgPiAr
ICBsdWFfcHVzaGNmdW5jdGlvbihMLCBtc2doYW5kbGVyKTsgIC8qIHB1c2ggbWVzc2FnZSBoYW5k
bGVyICovDQogICAgPiArICBsdWFfaW5zZXJ0KEwsIGJhc2UpOyAgLyogcHV0IGl0IHVuZGVyIGZ1
bmN0aW9uIGFuZCBhcmdzICovDQogICAgPiArICBnbG9iYWxMID0gTDsgIC8qIHRvIGJlIGF2YWls
YWJsZSB0byAnbGFjdGlvbicgKi8NCiAgICA+ICsgIHNpZ25hbChTSUdJTlQsIGxhY3Rpb24pOyAg
Lyogc2V0IEMtc2lnbmFsIGhhbmRsZXIgKi8NCiAgICA+ICsgIHN0YXR1cyA9IGx1YV9wY2FsbChM
LCBuYXJnLCBucmVzLCBiYXNlKTsNCiAgICA+ICsgIHNpZ25hbChTSUdJTlQsIFNJR19ERkwpOyAv
KiByZXNldCBDLXNpZ25hbCBoYW5kbGVyICovDQogICAgPiArICBsdWFfcmVtb3ZlKEwsIGJhc2Up
OyAgLyogcmVtb3ZlIG1lc3NhZ2UgaGFuZGxlciBmcm9tIHRoZSBzdGFjayAqLw0KICAgID4gKyAg
cmV0dXJuIHN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArc3RhdGlj
IHZvaWQgcHJpbnRfdmVyc2lvbiAodm9pZCkgew0KICAgID4gKyAgbHVhX3dyaXRlc3RyaW5nKExV
QV9DT1BZUklHSFQsIHN0cmxlbihMVUFfQ09QWVJJR0hUKSk7DQogICAgPiArICBsdWFfd3JpdGVs
aW5lKCk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiog
Q3JlYXRlIHRoZSAnYXJnJyB0YWJsZSwgd2hpY2ggc3RvcmVzIGFsbCBhcmd1bWVudHMgZnJvbSB0
aGUNCiAgICA+ICsqKiBjb21tYW5kIGxpbmUgKCdhcmd2JykuIEl0IHNob3VsZCBiZSBhbGlnbmVk
IHNvIHRoYXQsIGF0IGluZGV4IDAsDQogICAgPiArKiogaXQgaGFzICdhcmd2W3NjcmlwdF0nLCB3
aGljaCBpcyB0aGUgc2NyaXB0IG5hbWUuIFRoZSBhcmd1bWVudHMNCiAgICA+ICsqKiB0byB0aGUg
c2NyaXB0IChldmVyeXRoaW5nIGFmdGVyICdzY3JpcHQnKSBnbyB0byBwb3NpdGl2ZSBpbmRpY2Vz
Ow0KICAgID4gKyoqIG90aGVyIGFyZ3VtZW50cyAoYmVmb3JlIHRoZSBzY3JpcHQgbmFtZSkgZ28g
dG8gbmVnYXRpdmUgaW5kaWNlcy4NCiAgICA+ICsqKiBJZiB0aGVyZSBpcyBubyBzY3JpcHQgbmFt
ZSwgYXNzdW1lIGludGVycHJldGVyJ3MgbmFtZSBhcyBiYXNlLg0KICAgID4gKyovDQogICAgPiAr
c3RhdGljIHZvaWQgY3JlYXRlYXJndGFibGUgKGx1YV9TdGF0ZSAqTCwgY2hhciAqKmFyZ3YsIGlu
dCBhcmdjLCBpbnQgc2NyaXB0KSB7DQogICAgPiArICBpbnQgaSwgbmFyZzsNCiAgICA+ICsgIGlm
IChzY3JpcHQgPT0gYXJnYykgc2NyaXB0ID0gMDsgIC8qIG5vIHNjcmlwdCBuYW1lPyAqLw0KICAg
ID4gKyAgbmFyZyA9IGFyZ2MgLSAoc2NyaXB0ICsgMSk7ICAvKiBudW1iZXIgb2YgcG9zaXRpdmUg
aW5kaWNlcyAqLw0KICAgID4gKyAgbHVhX2NyZWF0ZXRhYmxlKEwsIG5hcmcsIHNjcmlwdCArIDEp
Ow0KICAgID4gKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgew0KICAgID4gKyAgICBsdWFf
cHVzaHN0cmluZyhMLCBhcmd2W2ldKTsNCiAgICA+ICsgICAgbHVhX3Jhd3NldGkoTCwgLTIsIGkg
LSBzY3JpcHQpOw0KICAgID4gKyAgfQ0KICAgID4gKyAgbHVhX3NldGdsb2JhbChMLCAiYXJnIik7
DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gK3N0YXRpYyBpbnQgZG9jaHVuayAo
bHVhX1N0YXRlICpMLCBpbnQgc3RhdHVzKSB7DQogICAgPiArICBpZiAoc3RhdHVzID09IExVQV9P
Sykgc3RhdHVzID0gZG9jYWxsKEwsIDAsIDApOw0KICAgID4gKyAgcmV0dXJuIHJlcG9ydChMLCBz
dGF0dXMpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICtzdGF0aWMgaW50IGRv
ZmlsZSAobHVhX1N0YXRlICpMLCBjb25zdCBjaGFyICpuYW1lKSB7DQogICAgPiArICByZXR1cm4g
ZG9jaHVuayhMLCBsdWFMX2xvYWRmaWxlKEwsIG5hbWUpKTsNCiAgICA+ICt9DQogICAgPiArDQog
ICAgPiArDQogICAgPiArc3RhdGljIGludCBkb3N0cmluZyAobHVhX1N0YXRlICpMLCBjb25zdCBj
aGFyICpzLCBjb25zdCBjaGFyICpuYW1lKSB7DQogICAgPiArICByZXR1cm4gZG9jaHVuayhMLCBs
dWFMX2xvYWRidWZmZXIoTCwgcywgc3RybGVuKHMpLCBuYW1lKSk7DQogICAgPiArfQ0KICAgID4g
Kw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogQ2FsbHMgJ3JlcXVpcmUobmFtZSknIGFu
ZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIGdsb2JhbCB2YXJpYWJsZQ0KICAgID4gKyoqIHdpdGgg
dGhlIGdpdmVuIG5hbWUuDQogICAgPiArKi8NCiAgICA+ICtzdGF0aWMgaW50IGRvbGlicmFyeSAo
bHVhX1N0YXRlICpMLCBjb25zdCBjaGFyICpuYW1lKSB7DQogICAgPiArICBpbnQgc3RhdHVzOw0K
ICAgID4gKyAgbHVhX2dldGdsb2JhbChMLCAicmVxdWlyZSIpOw0KICAgID4gKyAgbHVhX3B1c2hz
dHJpbmcoTCwgbmFtZSk7DQogICAgPiArICBzdGF0dXMgPSBkb2NhbGwoTCwgMSwgMSk7ICAvKiBj
YWxsICdyZXF1aXJlKG5hbWUpJyAqLw0KICAgID4gKyAgaWYgKHN0YXR1cyA9PSBMVUFfT0spDQog
ICAgPiArICAgIGx1YV9zZXRnbG9iYWwoTCwgbmFtZSk7ICAvKiBnbG9iYWxbbmFtZV0gPSByZXF1
aXJlIHJldHVybiAqLw0KICAgID4gKyAgcmV0dXJuIHJlcG9ydChMLCBzdGF0dXMpOw0KICAgID4g
K30NCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4gKyoqIFJldHVybnMgdGhlIHN0
cmluZyB0byBiZSB1c2VkIGFzIGEgcHJvbXB0IGJ5IHRoZSBpbnRlcnByZXRlci4NCiAgICA+ICsq
Lw0KICAgID4gK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcHJvbXB0IChsdWFfU3RhdGUgKkwsIGlu
dCBmaXJzdGxpbmUpIHsNCiAgICA+ICsgIGNvbnN0IGNoYXIgKnA7DQogICAgPiArICBsdWFfZ2V0
Z2xvYmFsKEwsIGZpcnN0bGluZSA/ICJfUFJPTVBUIiA6ICJfUFJPTVBUMiIpOw0KICAgID4gKyAg
cCA9IGx1YV90b3N0cmluZyhMLCAtMSk7DQogICAgPiArICBpZiAocCA9PSBOVUxMKSBwID0gKGZp
cnN0bGluZSA/IExVQV9QUk9NUFQgOiBMVUFfUFJPTVBUMik7DQogICAgPiArICByZXR1cm4gcDsN
CiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyogbWFyayBpbiBlcnJvciBtZXNzYWdlcyBmb3Ig
aW5jb21wbGV0ZSBzdGF0ZW1lbnRzICovDQogICAgPiArI2RlZmluZSBFT0ZNQVJLICAgICAgICAg
ICAgICAiPGVvZj4iDQogICAgPiArI2RlZmluZSBtYXJrbGVuICAgICAgICAgICAgICAoc2l6ZW9m
KEVPRk1BUkspL3NpemVvZihjaGFyKSAtIDEpDQogICAgPiArDQogICAgPiArDQogICAgPiArLyoN
CiAgICA+ICsqKiBDaGVjayB3aGV0aGVyICdzdGF0dXMnIHNpZ25hbHMgYSBzeW50YXggZXJyb3Ig
YW5kIHRoZSBlcnJvcg0KICAgID4gKyoqIG1lc3NhZ2UgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sg
ZW5kcyB3aXRoIHRoZSBhYm92ZSBtYXJrIGZvcg0KICAgID4gKyoqIGluY29tcGxldGUgc3RhdGVt
ZW50cy4NCiAgICA+ICsqLw0KICAgID4gK3N0YXRpYyBpbnQgaW5jb21wbGV0ZSAobHVhX1N0YXRl
ICpMLCBpbnQgc3RhdHVzKSB7DQogICAgPiArICBpZiAoc3RhdHVzID09IExVQV9FUlJTWU5UQVgp
IHsNCiAgICA+ICsgICAgc2l6ZV90IGxtc2c7DQogICAgPiArICAgIGNvbnN0IGNoYXIgKm1zZyA9
IGx1YV90b2xzdHJpbmcoTCwgLTEsICZsbXNnKTsNCiAgICA+ICsgICAgaWYgKGxtc2cgPj0gbWFy
a2xlbiAmJiBzdHJjbXAobXNnICsgbG1zZyAtIG1hcmtsZW4sIEVPRk1BUkspID09IDApIHsNCiAg
ICA+ICsgICAgICBsdWFfcG9wKEwsIDEpOw0KICAgID4gKyAgICAgIHJldHVybiAxOw0KICAgID4g
KyAgICB9DQogICAgPiArICB9DQogICAgPiArICByZXR1cm4gMDsgIC8qIGVsc2UuLi4gKi8NCiAg
ICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBQcm9tcHQgdGhl
IHVzZXIsIHJlYWQgYSBsaW5lLCBhbmQgcHVzaCBpdCBpbnRvIHRoZSBMdWEgc3RhY2suDQogICAg
PiArKi8NCiAgICA+ICtzdGF0aWMgaW50IHB1c2hsaW5lIChsdWFfU3RhdGUgKkwsIGludCBmaXJz
dGxpbmUpIHsNCiAgICA+ICsgIGNoYXIgYnVmZmVyW0xVQV9NQVhJTlBVVF07DQogICAgPiArICBj
aGFyICpiID0gYnVmZmVyOw0KICAgID4gKyAgc2l6ZV90IGw7DQogICAgPiArICBjb25zdCBjaGFy
ICpwcm10ID0gZ2V0X3Byb21wdChMLCBmaXJzdGxpbmUpOw0KICAgID4gKyAgaW50IHJlYWRzdGF0
dXMgPSBsdWFfcmVhZGxpbmUoTCwgYiwgcHJtdCk7DQogICAgPiArICBpZiAocmVhZHN0YXR1cyA9
PSAwKQ0KICAgID4gKyAgICByZXR1cm4gMDsgIC8qIG5vIGlucHV0IChwcm9tcHQgd2lsbCBiZSBw
b3BwZWQgYnkgY2FsbGVyKSAqLw0KICAgID4gKyAgbHVhX3BvcChMLCAxKTsgIC8qIHJlbW92ZSBw
cm9tcHQgKi8NCiAgICA+ICsgIGwgPSBzdHJsZW4oYik7DQogICAgPiArICBpZiAobCA+IDAgJiYg
YltsLTFdID09ICdcbicpICAvKiBsaW5lIGVuZHMgd2l0aCBuZXdsaW5lPyAqLw0KICAgID4gKyAg
ICBiWy0tbF0gPSAnXDAnOyAgLyogcmVtb3ZlIGl0ICovDQogICAgPiArICBpZiAoZmlyc3RsaW5l
ICYmIGJbMF0gPT0gJz0nKSAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCA1LjIsIC4uLiAqLw0K
ICAgID4gKyAgICBsdWFfcHVzaGZzdHJpbmcoTCwgInJldHVybiAlcyIsIGIgKyAxKTsgIC8qIGNo
YW5nZSAnPScgdG8gJ3JldHVybicgKi8NCiAgICA+ICsgIGVsc2UNCiAgICA+ICsgICAgbHVhX3B1
c2hsc3RyaW5nKEwsIGIsIGwpOw0KICAgID4gKyAgbHVhX2ZyZWVsaW5lKEwsIGIpOw0KICAgID4g
KyAgcmV0dXJuIDE7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAg
PiArKiogVHJ5IHRvIGNvbXBpbGUgbGluZSBvbiB0aGUgc3RhY2sgYXMgJ3JldHVybiA8bGluZT47
Jzsgb24gcmV0dXJuLCBzdGFjaw0KICAgID4gKyoqIGhhcyBlaXRoZXIgY29tcGlsZWQgY2h1bmsg
b3Igb3JpZ2luYWwgbGluZSAoaWYgY29tcGlsYXRpb24gZmFpbGVkKS4NCiAgICA+ICsqLw0KICAg
ID4gK3N0YXRpYyBpbnQgYWRkcmV0dXJuIChsdWFfU3RhdGUgKkwpIHsNCiAgICA+ICsgIGNvbnN0
IGNoYXIgKmxpbmUgPSBsdWFfdG9zdHJpbmcoTCwgLTEpOyAgLyogb3JpZ2luYWwgbGluZSAqLw0K
ICAgID4gKyAgY29uc3QgY2hhciAqcmV0bGluZSA9IGx1YV9wdXNoZnN0cmluZyhMLCAicmV0dXJu
ICVzOyIsIGxpbmUpOw0KICAgID4gKyAgaW50IHN0YXR1cyA9IGx1YUxfbG9hZGJ1ZmZlcihMLCBy
ZXRsaW5lLCBzdHJsZW4ocmV0bGluZSksICI9c3RkaW4iKTsNCiAgICA+ICsgIGlmIChzdGF0dXMg
PT0gTFVBX09LKSB7DQogICAgPiArICAgIGx1YV9yZW1vdmUoTCwgLTIpOyAgLyogcmVtb3ZlIG1v
ZGlmaWVkIGxpbmUgKi8NCiAgICA+ICsgICAgaWYgKGxpbmVbMF0gIT0gJ1wwJykgIC8qIG5vbiBl
bXB0eT8gKi8NCiAgICA+ICsgICAgICBsdWFfc2F2ZWxpbmUoTCwgbGluZSk7ICAvKiBrZWVwIGhp
c3RvcnkgKi8NCiAgICA+ICsgIH0NCiAgICA+ICsgIGVsc2UNCiAgICA+ICsgICAgbHVhX3BvcChM
LCAyKTsgIC8qIHBvcCByZXN1bHQgZnJvbSAnbHVhTF9sb2FkYnVmZmVyJyBhbmQgbW9kaWZpZWQg
bGluZSAqLw0KICAgID4gKyAgcmV0dXJuIHN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAg
PiArDQogICAgPiArLyoNCiAgICA+ICsqKiBSZWFkIG11bHRpcGxlIGxpbmVzIHVudGlsIGEgY29t
cGxldGUgTHVhIHN0YXRlbWVudA0KICAgID4gKyovDQogICAgPiArc3RhdGljIGludCBtdWx0aWxp
bmUgKGx1YV9TdGF0ZSAqTCkgew0KICAgID4gKyAgZm9yICg7OykgeyAgLyogcmVwZWF0IHVudGls
IGdldHMgYSBjb21wbGV0ZSBzdGF0ZW1lbnQgKi8NCiAgICA+ICsgICAgc2l6ZV90IGxlbjsNCiAg
ICA+ICsgICAgY29uc3QgY2hhciAqbGluZSA9IGx1YV90b2xzdHJpbmcoTCwgMSwgJmxlbik7ICAv
KiBnZXQgd2hhdCBpdCBoYXMgKi8NCiAgICA+ICsgICAgaW50IHN0YXR1cyA9IGx1YUxfbG9hZGJ1
ZmZlcihMLCBsaW5lLCBsZW4sICI9c3RkaW4iKTsgIC8qIHRyeSBpdCAqLw0KICAgID4gKyAgICBp
ZiAoIWluY29tcGxldGUoTCwgc3RhdHVzKSB8fCAhcHVzaGxpbmUoTCwgMCkpIHsNCiAgICA+ICsg
ICAgICBsdWFfc2F2ZWxpbmUoTCwgbGluZSk7ICAvKiBrZWVwIGhpc3RvcnkgKi8NCiAgICA+ICsg
ICAgICByZXR1cm4gc3RhdHVzOyAgLyogY2Fubm90IG9yIHNob3VsZCBub3QgdHJ5IHRvIGFkZCBj
b250aW51YXRpb24gbGluZSAqLw0KICAgID4gKyAgICB9DQogICAgPiArICAgIGx1YV9wdXNobGl0
ZXJhbChMLCAiXG4iKTsgIC8qIGFkZCBuZXdsaW5lLi4uICovDQogICAgPiArICAgIGx1YV9pbnNl
cnQoTCwgLTIpOyAgLyogLi4uYmV0d2VlbiB0aGUgdHdvIGxpbmVzICovDQogICAgPiArICAgIGx1
YV9jb25jYXQoTCwgMyk7ICAvKiBqb2luIHRoZW0gKi8NCiAgICA+ICsgIH0NCiAgICA+ICt9DQog
ICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBSZWFkIGEgbGluZSBhbmQgdHJ5
IHRvIGxvYWQgKGNvbXBpbGUpIGl0IGZpcnN0IGFzIGFuIGV4cHJlc3Npb24gKGJ5DQogICAgPiAr
KiogYWRkaW5nICJyZXR1cm4gIiBpbiBmcm9udCBvZiBpdCkgYW5kIHNlY29uZCBhcyBhIHN0YXRl
bWVudC4gUmV0dXJuDQogICAgPiArKiogdGhlIGZpbmFsIHN0YXR1cyBvZiBsb2FkL2NhbGwgd2l0
aCB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uIChpZiBhbnkpDQogICAgPiArKiogaW4gdGhlIHRvcCBv
ZiB0aGUgc3RhY2suDQogICAgPiArKi8NCiAgICA+ICtzdGF0aWMgaW50IGxvYWRsaW5lIChsdWFf
U3RhdGUgKkwpIHsNCiAgICA+ICsgIGludCBzdGF0dXM7DQogICAgPiArICBsdWFfc2V0dG9wKEws
IDApOw0KICAgID4gKyAgaWYgKCFwdXNobGluZShMLCAxKSkNCiAgICA+ICsgICAgcmV0dXJuIC0x
OyAgLyogbm8gaW5wdXQgKi8NCiAgICA+ICsgIGlmICgoc3RhdHVzID0gYWRkcmV0dXJuKEwpKSAh
PSBMVUFfT0spICAvKiAncmV0dXJuIC4uLicgZGlkIG5vdCB3b3JrPyAqLw0KICAgID4gKyAgICBz
dGF0dXMgPSBtdWx0aWxpbmUoTCk7ICAvKiB0cnkgYXMgY29tbWFuZCwgbWF5YmUgd2l0aCBjb250
aW51YXRpb24gbGluZXMNCiAgICA+ICovDQogICAgPiArICBsdWFfcmVtb3ZlKEwsIDEpOyAgLyog
cmVtb3ZlIGxpbmUgZnJvbSB0aGUgc3RhY2sgKi8NCiAgICA+ICsgIGx1YV9hc3NlcnQobHVhX2dl
dHRvcChMKSA9PSAxKTsNCiAgICA+ICsgIHJldHVybiBzdGF0dXM7DQogICAgPiArfQ0KICAgID4g
Kw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogUHJpbnRzIChjYWxsaW5nIHRoZSBMdWEg
J3ByaW50JyBmdW5jdGlvbikgYW55IHZhbHVlcyBvbiB0aGUgc3RhY2sNCiAgICA+ICsqLw0KICAg
ID4gK3N0YXRpYyB2b2lkIGxfcHJpbnQgKGx1YV9TdGF0ZSAqTCkgew0KICAgID4gKyAgaW50IG4g
PSBsdWFfZ2V0dG9wKEwpOw0KICAgID4gKyAgaWYgKG4gPiAwKSB7ICAvKiBhbnkgcmVzdWx0IHRv
IGJlIHByaW50ZWQ/ICovDQogICAgPiArICAgIGx1YUxfY2hlY2tzdGFjayhMLCBMVUFfTUlOU1RB
Q0ssICJ0b28gbWFueSByZXN1bHRzIHRvIHByaW50Iik7DQogICAgPiArICAgIGx1YV9nZXRnbG9i
YWwoTCwgInByaW50Iik7DQogICAgPiArICAgIGx1YV9pbnNlcnQoTCwgMSk7DQogICAgPiArICAg
IGlmIChsdWFfcGNhbGwoTCwgbiwgMCwgMCkgIT0gTFVBX09LKQ0KICAgID4gKyAgICAgIGxfbWVz
c2FnZShwcm9nbmFtZSwgbHVhX3B1c2hmc3RyaW5nKEwsICJlcnJvciBjYWxsaW5nICdwcmludCcg
KCVzKSIsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbHVhX3Rvc3RyaW5nKEwsIC0xKSkpOw0KICAgID4gKyAgfQ0KICAgID4gK30NCiAgICA+ICsN
CiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4gKyoqIERvIHRoZSBSRVBMOiByZXBlYXRlZGx5IHJl
YWQgKGxvYWQpIGEgbGluZSwgZXZhbHVhdGUgKGNhbGwpIGl0LCBhbmQNCiAgICA+ICsqKiBwcmlu
dCBhbnkgcmVzdWx0cy4NCiAgICA+ICsqLw0KICAgID4gK3N0YXRpYyB2b2lkIGRvUkVQTCAobHVh
X1N0YXRlICpMKSB7DQogICAgPiArICBpbnQgc3RhdHVzOw0KICAgID4gKyAgY29uc3QgY2hhciAq
b2xkcHJvZ25hbWUgPSBwcm9nbmFtZTsNCiAgICA+ICsgIHByb2duYW1lID0gTlVMTDsgIC8qIG5v
ICdwcm9nbmFtZScgb24gZXJyb3JzIGluIGludGVyYWN0aXZlIG1vZGUgKi8NCiAgICA+ICsgIHdo
aWxlICgoc3RhdHVzID0gbG9hZGxpbmUoTCkpICE9IC0xKSB7DQogICAgPiArICAgIGlmIChzdGF0
dXMgPT0gTFVBX09LKQ0KICAgID4gKyAgICAgIHN0YXR1cyA9IGRvY2FsbChMLCAwLCBMVUFfTVVM
VFJFVCk7DQogICAgPiArICAgIGlmIChzdGF0dXMgPT0gTFVBX09LKSBsX3ByaW50KEwpOw0KICAg
ID4gKyAgICBlbHNlIHJlcG9ydChMLCBzdGF0dXMpOw0KICAgID4gKyAgfQ0KICAgID4gKyAgbHVh
X3NldHRvcChMLCAwKTsgIC8qIGNsZWFyIHN0YWNrICovDQogICAgPiArICBsdWFfd3JpdGVsaW5l
KCk7DQogICAgPiArICBwcm9nbmFtZSA9IG9sZHByb2duYW1lOw0KICAgID4gK30NCiAgICA+ICsN
CiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4gKyoqIFB1c2ggb24gdGhlIHN0YWNrIHRoZSBjb250
ZW50cyBvZiB0YWJsZSAnYXJnJyBmcm9tIDEgdG8gI2FyZw0KICAgID4gKyovDQogICAgPiArc3Rh
dGljIGludCBwdXNoYXJncyAobHVhX1N0YXRlICpMKSB7DQogICAgPiArICBpbnQgaSwgbjsNCiAg
ICA+ICsgIGlmIChsdWFfZ2V0Z2xvYmFsKEwsICJhcmciKSAhPSBMVUFfVFRBQkxFKQ0KICAgID4g
KyAgICBsdWFMX2Vycm9yKEwsICInYXJnJyBpcyBub3QgYSB0YWJsZSIpOw0KICAgID4gKyAgbiA9
IChpbnQpbHVhTF9sZW4oTCwgLTEpOw0KICAgID4gKyAgbHVhTF9jaGVja3N0YWNrKEwsIG4gKyAz
LCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNjcmlwdCIpOw0KICAgID4gKyAgZm9yIChpID0gMTsg
aSA8PSBuOyBpKyspDQogICAgPiArICAgIGx1YV9yYXdnZXRpKEwsIC1pLCBpKTsNCiAgICA+ICsg
IGx1YV9yZW1vdmUoTCwgLWkpOyAgLyogcmVtb3ZlIHRhYmxlIGZyb20gdGhlIHN0YWNrICovDQog
ICAgPiArICByZXR1cm4gbjsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArc3Rh
dGljIGludCBoYW5kbGVfc2NyaXB0IChsdWFfU3RhdGUgKkwsIGNoYXIgKiphcmd2KSB7DQogICAg
PiArICBpbnQgc3RhdHVzOw0KICAgID4gKyAgY29uc3QgY2hhciAqZm5hbWUgPSBhcmd2WzBdOw0K
ICAgID4gKyAgaWYgKHN0cmNtcChmbmFtZSwgIi0iKSA9PSAwICYmIHN0cmNtcChhcmd2Wy0xXSwg
Ii0tIikgIT0gMCkNCiAgICA+ICsgICAgZm5hbWUgPSBOVUxMOyAgLyogc3RkaW4gKi8NCiAgICA+
ICsgIHN0YXR1cyA9IGx1YUxfbG9hZGZpbGUoTCwgZm5hbWUpOw0KICAgID4gKyAgaWYgKHN0YXR1
cyA9PSBMVUFfT0spIHsNCiAgICA+ICsgICAgaW50IG4gPSBwdXNoYXJncyhMKTsgIC8qIHB1c2gg
YXJndW1lbnRzIHRvIHNjcmlwdCAqLw0KICAgID4gKyAgICBzdGF0dXMgPSBkb2NhbGwoTCwgbiwg
TFVBX01VTFRSRVQpOw0KICAgID4gKyAgfQ0KICAgID4gKyAgcmV0dXJuIHJlcG9ydChMLCBzdGF0
dXMpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICsvKiBiaXRz
IG9mIHZhcmlvdXMgYXJndW1lbnQgaW5kaWNhdG9ycyBpbiAnYXJncycgKi8NCiAgICA+ICsjZGVm
aW5lIGhhc19lcnJvciAgICAxICAgICAgIC8qIGJhZCBvcHRpb24gKi8NCiAgICA+ICsjZGVmaW5l
IGhhc19pICAgICAgICAgICAgICAgIDIgICAgICAgLyogLWkgKi8NCiAgICA+ICsjZGVmaW5lIGhh
c192ICAgICAgICAgICAgICAgIDQgICAgICAgLyogLXYgKi8NCiAgICA+ICsjZGVmaW5lIGhhc19l
ICAgICAgICAgICAgICAgIDggICAgICAgLyogLWUgKi8NCiAgICA+ICsjZGVmaW5lIGhhc19FICAg
ICAgICAgICAgICAgIDE2ICAgICAgLyogLUUgKi8NCiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4g
KyoqIFRyYXZlcnNlcyBhbGwgYXJndW1lbnRzIGZyb20gJ2FyZ3YnLCByZXR1cm5pbmcgYSBtYXNr
IHdpdGggdGhvc2UNCiAgICA+ICsqKiBuZWVkZWQgYmVmb3JlIHJ1bm5pbmcgYW55IEx1YSBjb2Rl
IChvciBhbiBlcnJvciBjb2RlIGlmIGl0IGZpbmRzDQogICAgPiArKiogYW55IGludmFsaWQgYXJn
dW1lbnQpLiAnZmlyc3QnIHJldHVybnMgdGhlIGZpcnN0IG5vdC1oYW5kbGVkIGFyZ3VtZW50DQog
ICAgPiArKiogKGVpdGhlciB0aGUgc2NyaXB0IG5hbWUgb3IgYSBiYWQgYXJndW1lbnQgaW4gY2Fz
ZSBvZiBlcnJvcikuDQogICAgPiArKi8NCiAgICA+ICtzdGF0aWMgaW50IGNvbGxlY3RhcmdzIChj
aGFyICoqYXJndiwgaW50ICpmaXJzdCkgew0KICAgID4gKyAgaW50IGFyZ3MgPSAwOw0KICAgID4g
KyAgaW50IGk7DQogICAgPiArICBmb3IgKGkgPSAxOyBhcmd2W2ldICE9IE5VTEw7IGkrKykgew0K
ICAgID4gKyAgICAqZmlyc3QgPSBpOw0KICAgID4gKyAgICBpZiAoYXJndltpXVswXSAhPSAnLScp
ICAvKiBub3QgYW4gb3B0aW9uPyAqLw0KICAgID4gKyAgICAgICAgcmV0dXJuIGFyZ3M7ICAvKiBz
dG9wIGhhbmRsaW5nIG9wdGlvbnMgKi8NCiAgICA+ICsgICAgc3dpdGNoIChhcmd2W2ldWzFdKSB7
ICAvKiBlbHNlIGNoZWNrIG9wdGlvbiAqLw0KICAgID4gKyAgICAgIGNhc2UgJy0nOiAgLyogJy0t
JyAqLw0KICAgID4gKyAgICAgICAgaWYgKGFyZ3ZbaV1bMl0gIT0gJ1wwJykgIC8qIGV4dHJhIGNo
YXJhY3RlcnMgYWZ0ZXIgJy0tJz8gKi8NCiAgICA+ICsgICAgICAgICAgcmV0dXJuIGhhc19lcnJv
cjsgIC8qIGludmFsaWQgb3B0aW9uICovDQogICAgPiArICAgICAgICAqZmlyc3QgPSBpICsgMTsN
CiAgICA+ICsgICAgICAgIHJldHVybiBhcmdzOw0KICAgID4gKyAgICAgIGNhc2UgJ1wwJzogIC8q
ICctJyAqLw0KICAgID4gKyAgICAgICAgcmV0dXJuIGFyZ3M7ICAvKiBzY3JpcHQgIm5hbWUiIGlz
ICctJyAqLw0KICAgID4gKyAgICAgIGNhc2UgJ0UnOg0KICAgID4gKyAgICAgICAgaWYgKGFyZ3Zb
aV1bMl0gIT0gJ1wwJykgIC8qIGV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgMXN0PyAqLw0KICAgID4g
KyAgICAgICAgICByZXR1cm4gaGFzX2Vycm9yOyAgLyogaW52YWxpZCBvcHRpb24gKi8NCiAgICA+
ICsgICAgICAgIGFyZ3MgfD0gaGFzX0U7DQogICAgPiArICAgICAgICBicmVhazsNCiAgICA+ICsg
ICAgICBjYXNlICdpJzoNCiAgICA+ICsgICAgICAgIGFyZ3MgfD0gaGFzX2k7ICAvKiAoLWkgaW1w
bGllcyAtdikgKi8vKiBGQUxMVEhST1VHSCAqLw0KICAgID4gKyAgICAgIGNhc2UgJ3YnOg0KICAg
ID4gKyAgICAgICAgaWYgKGFyZ3ZbaV1bMl0gIT0gJ1wwJykgIC8qIGV4dHJhIGNoYXJhY3RlcnMg
YWZ0ZXIgMXN0PyAqLw0KICAgID4gKyAgICAgICAgICByZXR1cm4gaGFzX2Vycm9yOyAgLyogaW52
YWxpZCBvcHRpb24gKi8NCiAgICA+ICsgICAgICAgIGFyZ3MgfD0gaGFzX3Y7DQogICAgPiArICAg
ICAgICBicmVhazsNCiAgICA+ICsgICAgICBjYXNlICdlJzoNCiAgICA+ICsgICAgICAgIGFyZ3Mg
fD0gaGFzX2U7ICAvKiBGQUxMVEhST1VHSCAqLw0KICAgID4gKyAgICAgIGNhc2UgJ2wnOiAgLyog
Ym90aCBvcHRpb25zIG5lZWQgYW4gYXJndW1lbnQgKi8NCiAgICA+ICsgICAgICAgIGlmIChhcmd2
W2ldWzJdID09ICdcMCcpIHsgIC8qIG5vIGNvbmNhdGVuYXRlZCBhcmd1bWVudD8gKi8NCiAgICA+
ICsgICAgICAgICAgaSsrOyAgLyogdHJ5IG5leHQgJ2FyZ3YnICovDQogICAgPiArICAgICAgICAg
IGlmIChhcmd2W2ldID09IE5VTEwgfHwgYXJndltpXVswXSA9PSAnLScpDQogICAgPiArICAgICAg
ICAgICAgcmV0dXJuIGhhc19lcnJvcjsgIC8qIG5vIG5leHQgYXJndW1lbnQgb3IgaXQgaXMgYW5v
dGhlciBvcHRpb24gKi8NCiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsgICAgICAgIGJyZWFrOw0K
ICAgID4gKyAgICAgIGRlZmF1bHQ6ICAvKiBpbnZhbGlkIG9wdGlvbiAqLw0KICAgID4gKyAgICAg
ICAgcmV0dXJuIGhhc19lcnJvcjsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKyAg
KmZpcnN0ID0gaTsgIC8qIG5vIHNjcmlwdCBuYW1lICovDQogICAgPiArICByZXR1cm4gYXJnczsN
CiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBQcm9jZXNz
ZXMgb3B0aW9ucyAnZScgYW5kICdsJywgd2hpY2ggaW52b2x2ZSBydW5uaW5nIEx1YSBjb2RlLg0K
ICAgID4gKyoqIFJldHVybnMgMCBpZiBzb21lIGNvZGUgcmFpc2VzIGFuIGVycm9yLg0KICAgID4g
KyovDQogICAgPiArc3RhdGljIGludCBydW5hcmdzIChsdWFfU3RhdGUgKkwsIGNoYXIgKiphcmd2
LCBpbnQgbikgew0KICAgID4gKyAgaW50IGk7DQogICAgPiArICBmb3IgKGkgPSAxOyBpIDwgbjsg
aSsrKSB7DQogICAgPiArICAgIGludCBvcHRpb24gPSBhcmd2W2ldWzFdOw0KICAgID4gKyAgICBs
dWFfYXNzZXJ0KGFyZ3ZbaV1bMF0gPT0gJy0nKTsgIC8qIGFscmVhZHkgY2hlY2tlZCAqLw0KICAg
ID4gKyAgICBpZiAob3B0aW9uID09ICdlJyB8fCBvcHRpb24gPT0gJ2wnKSB7DQogICAgPiArICAg
ICAgaW50IHN0YXR1czsNCiAgICA+ICsgICAgICBjb25zdCBjaGFyICpleHRyYSA9IGFyZ3ZbaV0g
KyAyOyAgLyogYm90aCBvcHRpb25zIG5lZWQgYW4gYXJndW1lbnQgKi8NCiAgICA+ICsgICAgICBp
ZiAoKmV4dHJhID09ICdcMCcpIGV4dHJhID0gYXJndlsrK2ldOw0KICAgID4gKyAgICAgIGx1YV9h
c3NlcnQoZXh0cmEgIT0gTlVMTCk7DQogICAgPiArICAgICAgc3RhdHVzID0gKG9wdGlvbiA9PSAn
ZScpDQogICAgPiArICAgICAgICAgICAgICAgPyBkb3N0cmluZyhMLCBleHRyYSwgIj0oY29tbWFu
ZCBsaW5lKSIpDQogICAgPiArICAgICAgICAgICAgICAgOiBkb2xpYnJhcnkoTCwgZXh0cmEpOw0K
ICAgID4gKyAgICAgIGlmIChzdGF0dXMgIT0gTFVBX09LKSByZXR1cm4gMDsNCiAgICA+ICsgICAg
fQ0KICAgID4gKyAgfQ0KICAgID4gKyAgcmV0dXJuIDE7DQogICAgPiArfQ0KICAgID4gKw0KICAg
ID4gKw0KICAgID4gKw0KICAgID4gK3N0YXRpYyBpbnQgaGFuZGxlX2x1YWluaXQgKGx1YV9TdGF0
ZSAqTCkgew0KICAgID4gKyAgY29uc3QgY2hhciAqbmFtZSA9ICI9IiBMVUFfSU5JVFZBUlZFUlNJ
T047DQogICAgPiArICBjb25zdCBjaGFyICppbml0ID0gZ2V0ZW52KG5hbWUgKyAxKTsNCiAgICA+
ICsgIGlmIChpbml0ID09IE5VTEwpIHsNCiAgICA+ICsgICAgbmFtZSA9ICI9IiBMVUFfSU5JVF9W
QVI7DQogICAgPiArICAgIGluaXQgPSBnZXRlbnYobmFtZSArIDEpOyAgLyogdHJ5IGFsdGVybmF0
aXZlIG5hbWUgKi8NCiAgICA+ICsgIH0NCiAgICA+ICsgIGlmIChpbml0ID09IE5VTEwpIHJldHVy
biBMVUFfT0s7DQogICAgPiArICBlbHNlIGlmIChpbml0WzBdID09ICdAJykNCiAgICA+ICsgICAg
cmV0dXJuIGRvZmlsZShMLCBpbml0KzEpOw0KICAgID4gKyAgZWxzZQ0KICAgID4gKyAgICByZXR1
cm4gZG9zdHJpbmcoTCwgaW5pdCwgbmFtZSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0K
ICAgID4gKy8qDQogICAgPiArKiogTWFpbiBib2R5IG9mIHN0YW5kLWFsb25lIGludGVycHJldGVy
ICh0byBiZSBjYWxsZWQgaW4gcHJvdGVjdGVkIG1vZGUpLg0KICAgID4gKyoqIFJlYWRzIHRoZSBv
cHRpb25zIGFuZCBoYW5kbGVzIHRoZW0gYWxsLg0KICAgID4gKyovDQogICAgPiArc3RhdGljIGlu
dCBwbWFpbiAobHVhX1N0YXRlICpMKSB7DQogICAgPiArICBpbnQgYXJnYyA9IChpbnQpbHVhX3Rv
aW50ZWdlcihMLCAxKTsNCiAgICA+ICsgIGNoYXIgKiphcmd2ID0gKGNoYXIgKiopbHVhX3RvdXNl
cmRhdGEoTCwgMik7DQogICAgPiArICBpbnQgc2NyaXB0Ow0KICAgID4gKyAgc3RydWN0IHVrcGxh
dF9tZW1yZWdpb25fZGVzYyBpbWc7DQogICAgPiArICBjaGFyICpjc3RyOw0KICAgID4gKw0KICAg
ID4gKyAgaW50IGFyZ3MgPSBjb2xsZWN0YXJncyhhcmd2LCAmc2NyaXB0KTsNCiAgICA+ICsgIGx1
YUxfY2hlY2t2ZXJzaW9uKEwpOyAgLyogY2hlY2sgdGhhdCBpbnRlcnByZXRlciBoYXMgY29ycmVj
dCB2ZXJzaW9uICovDQogICAgPiArICBpZiAoYXJndlswXSAmJiBhcmd2WzBdWzBdKSBwcm9nbmFt
ZSA9IGFyZ3ZbMF07DQogICAgPiArICBpZiAoYXJncyA9PSBoYXNfZXJyb3IpIHsgIC8qIGJhZCBh
cmc/ICovDQogICAgPiArICAgIHByaW50X3VzYWdlKGFyZ3Zbc2NyaXB0XSk7ICAvKiAnc2NyaXB0
JyBoYXMgaW5kZXggb2YgYmFkIGFyZy4gKi8NCiAgICA+ICsgICAgcmV0dXJuIDA7DQogICAgPiAr
ICB9DQogICAgPiArICBpZiAoYXJncyAmIGhhc192KSAgLyogb3B0aW9uICctdic/ICovDQogICAg
PiArICAgIHByaW50X3ZlcnNpb24oKTsNCiAgICA+ICsgIGlmIChhcmdzICYgaGFzX0UpIHsgIC8q
IG9wdGlvbiAnLUUnPyAqLw0KICAgID4gKyAgICBsdWFfcHVzaGJvb2xlYW4oTCwgMSk7ICAvKiBz
aWduYWwgZm9yIGxpYnJhcmllcyB0byBpZ25vcmUgZW52LiB2YXJzLiAqLw0KICAgID4gKyAgICBs
dWFfc2V0ZmllbGQoTCwgTFVBX1JFR0lTVFJZSU5ERVgsICJMVUFfTk9FTlYiKTsNCiAgICA+ICsg
IH0NCiAgICA+ICsgIGx1YUxfb3BlbmxpYnMoTCk7ICAvKiBvcGVuIHN0YW5kYXJkIGxpYnJhcmll
cyAqLw0KICAgID4gKyAgY3JlYXRlYXJndGFibGUoTCwgYXJndiwgYXJnYywgc2NyaXB0KTsgIC8q
IGNyZWF0ZSB0YWJsZSAnYXJnJyAqLw0KICAgID4gKyAgaWYgKCEoYXJncyAmIGhhc19FKSkgeyAg
Lyogbm8gb3B0aW9uICctRSc/ICovDQogICAgPiArICAgIGlmIChoYW5kbGVfbHVhaW5pdChMKSAh
PSBMVUFfT0spICAvKiBydW4gTFVBX0lOSVQgKi8NCiAgICA+ICsgICAgICByZXR1cm4gMDsgIC8q
IGVycm9yIHJ1bm5pbmcgTFVBX0lOSVQgKi8NCiAgICA+ICsgIH0NCiAgICA+ICsgIGlmICghcnVu
YXJncyhMLCBhcmd2LCBzY3JpcHQpKSAgLyogZXhlY3V0ZSBhcmd1bWVudHMgLWUgYW5kIC1sICov
DQogICAgPiArICAgIHJldHVybiAwOyAgLyogc29tZXRoaW5nIGZhaWxlZCAqLw0KICAgID4gKyAg
aWYgKHNjcmlwdCA8IGFyZ2MgJiYgIC8qIGV4ZWN1dGUgbWFpbiBzY3JpcHQgKGlmIHRoZXJlIGlz
IG9uZSkgKi8NCiAgICA+ICsgICAgICBoYW5kbGVfc2NyaXB0KEwsIGFyZ3YgKyBzY3JpcHQpICE9
IExVQV9PSykNCiAgICA+ICsgICAgcmV0dXJuIDA7DQogICAgPiArICBpZiAoYXJncyAmIGhhc19p
KSAgLyogLWkgb3B0aW9uPyAqLw0KICAgID4gKyAgICBkb1JFUEwoTCk7ICAvKiBkbyByZWFkLWV2
YWwtcHJpbnQgbG9vcCAqLw0KICAgID4gKyAgLyogc2VlIGlmIHNjcmlwdCBpcyBhdmFpbGFibGUg
ZnJvbSBpbml0cmQgKi8NCiAgICA+ICsgIGVsc2UgaWYgKHVrcGxhdF9tZW1yZWdpb25fZmluZF9p
bml0cmQwKCZpbWcpID49IDApIHsNCiAgICA+ICsgICAgY3N0ciA9IChjaGFyICopaW1nLmJhc2U7
DQogICAgPiArICAgIGRvc3RyaW5nKEwsIGNzdHIsICJpbml0cmQiKTsNCiAgICA+ICsgIH0NCiAg
ICA+ICsgIGVsc2UgaWYgKHNjcmlwdCA9PSBhcmdjICYmICEoYXJncyAmIChoYXNfZSB8IGhhc192
KSkpIHsgIC8qIG5vIGFyZ3VtZW50cz8NCiAgICA+ICovDQogICAgPiArICAgIGlmIChsdWFfc3Rk
aW5faXNfdHR5KCkpIHsgIC8qIHJ1bm5pbmcgaW4gaW50ZXJhY3RpdmUgbW9kZT8gKi8NCiAgICA+
ICsgICAgICBwcmludF92ZXJzaW9uKCk7DQogICAgPiArICAgICAgZG9SRVBMKEwpOyAgLyogZG8g
cmVhZC1ldmFsLXByaW50IGxvb3AgKi8NCiAgICA+ICsgICAgfQ0KICAgID4gKyAgICBlbHNlIGRv
ZmlsZShMLCBOVUxMKTsgIC8qIGV4ZWN1dGVzIHN0ZGluIGFzIGEgZmlsZSAqLw0KICAgID4gKyAg
fQ0KICAgID4gKyAgbHVhX3B1c2hib29sZWFuKEwsIDEpOyAgLyogc2lnbmFsIG5vIGVycm9ycyAq
Lw0KICAgID4gKyAgcmV0dXJuIDE7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4g
K2ludCBsdWFfbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7DQogICAgPiArICBpbnQgc3Rh
dHVzLCByZXN1bHQ7DQogICAgPiArICBsdWFfU3RhdGUgKkwgPSBsdWFMX25ld3N0YXRlKCk7ICAv
KiBjcmVhdGUgc3RhdGUgKi8NCiAgICA+ICsgIGlmIChMID09IE5VTEwpIHsNCiAgICA+ICsgICAg
bF9tZXNzYWdlKGFyZ3ZbMF0sICJjYW5ub3QgY3JlYXRlIHN0YXRlOiBub3QgZW5vdWdoIG1lbW9y
eSIpOw0KICAgID4gKyAgICByZXR1cm4gRVhJVF9GQUlMVVJFOw0KICAgID4gKyAgfQ0KICAgID4g
KyAgbHVhX3B1c2hjZnVuY3Rpb24oTCwgJnBtYWluKTsgIC8qIHRvIGNhbGwgJ3BtYWluJyBpbiBw
cm90ZWN0ZWQgbW9kZSAqLw0KICAgID4gKyAgbHVhX3B1c2hpbnRlZ2VyKEwsIGFyZ2MpOyAgLyog
MXN0IGFyZ3VtZW50ICovDQogICAgPiArICBsdWFfcHVzaGxpZ2h0dXNlcmRhdGEoTCwgYXJndik7
IC8qIDJuZCBhcmd1bWVudCAqLw0KICAgID4gKyAgc3RhdHVzID0gbHVhX3BjYWxsKEwsIDIsIDEs
IDApOyAgLyogZG8gdGhlIGNhbGwgKi8NCiAgICA+ICsgIHJlc3VsdCA9IGx1YV90b2Jvb2xlYW4o
TCwgLTEpOyAgLyogZ2V0IHJlc3VsdCAqLw0KICAgID4gKyAgcmVwb3J0KEwsIHN0YXR1cyk7DQog
ICAgPiArICBsdWFfY2xvc2UoTCk7DQogICAgPiArICByZXR1cm4gKHJlc3VsdCAmJiBzdGF0dXMg
PT0gTFVBX09LKSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsNCiAgICA+ICt9DQogICAg
PiArDQogICAgPiAtLQ0KICAgID4gMi4xMS4wDQogICAgPg0KICAgID4NCiAgICA+IF9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAgPiBNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0DQogICAgPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcN
CiAgICA+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWwNCiAgICBJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMgb2YgdGhpcyBlbWFp
bCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwgYW5kIG1heSBhbHNvIGJlIHBy
aXZpbGVnZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHBsZWFzZSBu
b3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZSBjb250
ZW50cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLCBvciBzdG9y
ZSBvciBjb3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFuayB5b3UuDQogICAg
DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 13:01:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 13:01:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i58Qo-0000sw-9t; Tue, 03 Sep 2019 13:01:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i58Qn-0000si-Fj
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 13:01:09 +0000
X-Inumbo-ID: e3d0df3a-ce4a-11e9-ab94-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e3d0df3a-ce4a-11e9-ab94-12813bfff9fa;
 Tue, 03 Sep 2019 13:01:06 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 4A88A10563C;
 Tue,  3 Sep 2019 15:01:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 9V34vwelIAp8; Tue,  3 Sep 2019 15:01:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 16AB110535A;
 Tue,  3 Sep 2019 15:01:05 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 15:01:04 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 15:01:04
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 2/3] Add Makefile.uk and
 main loop glue code
Thread-Index: AQHVXbVl08eiyNs1rEqc1Zv6Z7Vsr6cXkRWAgAJiyIA=
Date: Tue, 3 Sep 2019 13:01:04 +0000
Message-ID: <85213428-3556-441E-A4AF-77D47CE3AE33@neclab.eu>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-3-felipe.huici@neclab.eu>
 <DB7PR08MB3082EEB097B8F40B2E2FA2BDF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
In-Reply-To: <DB7PR08MB3082EEB097B8F40B2E2FA2BDF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <11F6F51F8D832249A15164C3E4C1F509@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 2/3] Add Makefile.uk and
 main loop glue code
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLCBwbGVhc2Ugc2VlIGlubGluZS4NCg0K77u/T24gMDIuMDkuMTksIDA0OjM1LCAi
SnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkiIDxKdXN0aW4uSGVAYXJtLmNvbT4gd3Jv
dGU6DQoNCiAgICBIaSBGZWxpcGUNCiAgICANCiAgICA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tDQogICAgPiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3Rz
LnhlbnByb2plY3Qub3JnPiBPbiBCZWhhbGYNCiAgICA+IE9mIEZlbGlwZSBIdWljaQ0KICAgID4g
U2VudDogMjAxOeW5tDjmnIgyOOaXpSAyMzoyOQ0KICAgID4gVG86IG1pbmlvcy1kZXZlbEBsaXN0
cy54ZW4ub3JnDQogICAgPiBDYzogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1
PjsgU2ltb24gS3Vlbnplcg0KICAgID4gPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0KICAgID4g
U3ViamVjdDogW01pbmlvcy1kZXZlbF0gW1VOSUtSQUZUL0xJQkxVQSBQQVRDSCAyLzNdIEFkZCBN
YWtlZmlsZS51ayBhbmQNCiAgICA+IG1haW4gbG9vcCBnbHVlIGNvZGUNCiAgICA+DQogICAgPiBU
aGlzIGlzIGEgcG9ydCBvZiBsdWEgdG8gVW5pa3JhZnQgYXMgYW4gZXh0ZXJuYWwgbGlicmFyeS4g
SXQgcmVxdWlyZXMNCiAgICA+IGxpYmMsIHNvIGluIHlvdXIgYXBwbGljYXRpb24gTWFrZWZpbGUg
dGhlIGxpYnJhcnkgZGVwZW5kZW5jeSBsaXN0DQogICAgPiBzaG91bGQgcmVhZDoNCiAgICA+DQog
ICAgPiAgICAgICAgICAgIExJQlMgOj0gLi4uOiQoVUtfTElCUykvbmV3bGliOiQoVUtfTElCUykv
bHVhOi4uLg0KICAgID4NCiAgICA+IFBsZWFzZSByZWZlciB0byBSRUFETUUubWQgZm9yIGluZm9y
bWF0aW9uIG9uIHJ1bm5pbmcgaXQuDQogICAgPg0KICAgID4gU2lnbmVkLW9mZi1ieTogRmVsaXBl
IEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KICAgID4gU2lnbmVkLW9mZi1ieTogU2lt
b24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQogICAgPiAtLS0NCiAgICA+ICBN
YWtlZmlsZS51ayB8IDEwMCArKysrKysrKysrDQogICAgPiAgbHVhLmMgICAgICAgfCA2MjANCiAg
ICA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysNCiAgICA+ICsrDQogICAgPiAgMiBmaWxlcyBjaGFuZ2VkLCA3MjAgaW5zZXJ0aW9ucygr
KQ0KICAgID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51aw0KICAgID4gIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsdWEuYw0KICAgID4NCiAgICA+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBi
L01ha2VmaWxlLnVrDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAw
MDAwMC4uYmRiMzA5Mw0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrIGIvTWFrZWZpbGUu
dWsNCiAgICA+IEBAIC0wLDAgKzEsMTAwIEBADQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiAjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KICAgID4gKyMgTGlicmFyeSByZWdpc3RyYXRpb24NCiAgICA+ICsjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArJChldmFsICQoY2FsbCBhZGRsaWJfcyxs
aWJsdWEsJChDT05GSUdfTElCTFVBKSkpDQogICAgPiArDQogICAgPiArIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgU291cmNlcw0KICAgID4gKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJMVUFfVkVSU0lPTj01LjMuNQ0KICAgID4gK0xJ
QkxVQV9UQVJCQUxMPWx1YS0kKExJQkxVQV9WRVJTSU9OKQ0KICAgID4gK0xJQkxVQV9VUkw9aHR0
cHM6Ly93d3cubHVhLm9yZy9mdHAvJChMSUJMVUFfVEFSQkFMTCkudGFyLmd6DQogICAgPiArDQog
ICAgPiArJChldmFsICQoY2FsbCBmZXRjaCxsaWJsdWEsJChMSUJMVUFfVVJMKSkpDQogICAgPiAr
DQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQogICAgPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgSGVscGVy
cw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KICAgID4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJMVUFf
U1JDU19CQVNFPSQoTElCTFVBX09SSUdJTikvJChMSUJMVUFfVEFSQkFMTCkvc3JjDQogICAgPiAr
DQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQogICAgPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgTGlicmFy
eSBpbmNsdWRlcw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+
ICsjIFB1dCBwdWJsaWMgaGVhZGVycyBvZiB0aGUgbGlicmFyeSB0byBhIHB1YmxpYyBmb2xkZXIg
YW5kIGV4cG9ydCB0aGVtDQogICAgPiBnbG9iYWxseS4NCiAgICA+ICsjIFRoZSBwcmVwYXJlIHN0
ZXAgYmVsb3cgdGFrZXMgY2FyZSBvZiBwb3B1bGF0aW5nIHRoZSBmb2xkZXIuDQogICAgPiArJChj
YWxsIG1rX3N1Yl9idWlsZF9kaXIsbGlibHVhL2luY2x1ZGUpDQogICAgPiArQ0lOQ0xVREVTLSQo
Q09ORklHX0xJQkxVQSkgICArPSAtSSQoTElCTFVBX0JVSUxEKS9pbmNsdWRlDQogICAgPiArQ1BQ
SU5DTFVERVMtJChDT05GSUdfTElCTFVBKSArPSAtSSQoTElCTFVBX0JVSUxEKS9pbmNsdWRlDQog
ICAgPiArDQogICAgPiArIyBQcml2YXRlIGhlYWRlcnMNCiAgICA+ICtMSUJMVUFfQ0lOQ0xVREVT
LXkgKz0gLUkkKExJQkxVQV9TUkNTX0JBU0UpDQogICAgPiArDQogICAgPiArIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiAjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgQ29tcGlsYXRpb24gdW5pdA0KICAgID4gKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0K
ICAgID4gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJMVUFfQ0ZMQUdTLXkgKz0g
LURMVUFfQ09NUEFUXzVfMg0KICAgID4gKw0KICAgID4gKyMgTWFpbiBsb29wDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9CQVNFKS9sdWEuYw0KICAgID4gKw0KICAgID4gKyMgQ09S
RV9PDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xhcGkuYw0K
ICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sY29kZS5jDQogICAg
PiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xjdHlwZS5jDQogICAgPiAr
TElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkZWJ1Zy5jDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkby5jDQogICAgPiArTElCTFVBX1NS
Q1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkdW1wLmMNCiAgICA+ICtMSUJMVUFfU1JDUy15
ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGZ1bmMuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0g
JChMSUJMVUFfU1JDU19CQVNFKS9sZ2MuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJM
VUFfU1JDU19CQVNFKS9sbGV4LmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NS
Q1NfQkFTRSkvbG1lbS5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JB
U0UpL2xvYmplY3QuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNF
KS9sb3Bjb2Rlcy5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0Up
L2xwYXJzZXIuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9s
c3RhdGUuYw0KICAgID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sc3Ry
aW5nLmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRhYmxl
LmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRtLmMNCiAg
ICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHVuZHVtcC5jDQogICAg
PiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2x2bS5jDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2x6aW8uYw0KICAgID4gKw0KICAgID4g
KyMgTElCX08NCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGF1
eGxpYi5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xiYXNl
bGliLmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGJpdGxp
Yi5jDQogICAgPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xjb3JvbGli
LmMNCiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGRibGliLmMN
CiAgICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGlvbGliLmMNCiAg
ICA+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG1hdGhsaWIuYw0KICAg
ID4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sb3NsaWIuYw0KICAgID4g
K0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sc3RybGliLmMNCiAgICA+ICtM
SUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRhYmxpYi5jDQogICAgPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2x1dGY4bGliLmMNCiAgICA+ICtMSUJM
VUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG9hZGxpYi5jDQogICAgPiArTElCTFVB
X1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xpbml0LmMNCiAgICA+ICsNCiAgICA+ICsN
CiAgICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMNCiAgICA+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBsaWJyYXkg
QVBJIGhlYWRlcnMNCiAgICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAg
PiArJChMSUJMVUFfU1JDU19CQVNFKS8lLmg6ICQoTElCTFVBX0JVSUxEKS8ub3JpZ2luDQogICAg
PiArICAgICBAIyBlbXB0eSByZWNpcGUgdG8gZW5mb3JjZSBkZXBlbmRlbmN5IHRvIGFyY2hpdmUg
ZXh0cmFjdGlvbg0KICAgID4gKw0KICAgID4gKyQoTElCTFVBX0JVSUxEKS9pbmNsdWRlLyUuaDog
JChMSUJMVUFfU1JDU19CQVNFKS8lLmgNCiAgICA+ICsgICAgICQoY2FsbCBidWlsZF9jbWQsTE4s
bGlibHVhLCRALFwNCiAgICA+ICsgICAgIGxuIC1zZiAkPCAkQCkNCiAgICA+ICsNCiAgICA+ICsk
KExJQkxVQV9TUkNTX0JBU0UpLyUuaHBwOiAkKExJQkxVQV9CVUlMRCkvLm9yaWdpbg0KICAgID4g
KyAgICAgQCMgZW1wdHkgcmVjaXBlIHRvIGVuZm9yY2UgZGVwZW5kZW5jeSB0byBhcmNoaXZlIGV4
dHJhY3Rpb24NCiAgICA+ICsNCiAgICA+ICskKExJQkxVQV9CVUlMRCkvaW5jbHVkZS8lLmhwcDog
JChMSUJMVUFfU1JDU19CQVNFKS8lLmhwcA0KICAgID4gKyAgICAgJChjYWxsIGJ1aWxkX2NtZCxM
TixsaWJsdWEsJEAsXA0KICAgID4gKyAgICAgbG4gLXNmICQ8ICRAKQ0KICAgID4gKw0KICAgID4g
KyMgVE9fSU5DDQogICAgPiArVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9s
dWEuaA0KICAgID4gK1VLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbHVhY29u
Zi5oDQogICAgPiArVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWFsaWIu
aA0KICAgID4gK1VLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbGF1eGxpYi5o
DQogICAgPiArVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWEuaHBwDQog
ICAgPiBkaWZmIC0tZ2l0IGEvbHVhLmMgYi9sdWEuYw0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjhmMmY4NjANCiAgICA+IC0tLSAvZGV2L251bGwNCiAg
ICA+ICsrKyBiL2x1YS5jDQogICAgDQogICAgTG9va3MgbGlrZSB0aGUgc3RhbmRhbG9uZSBsdWEg
aW50ZXJwcmV0ZXIgb3JpZ2luYXRlcyBmcm9tDQogICAgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNv
bnRlbnQuY29tL2x1YS9sdWEvdjUuMy41L2x1YS5jDQogICAgQnV0IEkgc2F3IHNvbWUgdGFicyB3
ZXJlIGNoYW5nZWQgaW50byBzcGFjZXMsIGlzIHRoYXQgaW50ZW50aW9uYWw/DQogICAgSU1PLCBp
dCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY2hhbmdlcyBsZXNzDQogICAgDQoNCj4gWWVzLCBJIHVz
ZWQgbHVhLmMgYXMgYmFzaXMsIGFuZCBubywgdGhhdCB3YXNuJ3QgaW50ZW50aW9uYWwuIEZvciBh
IHYyLCBJIHRoaW5rIGEgY2xlYW5lciBhcHByb2FjaCB3b3VsZCBiZSBmb3IgbWUgdG8gcHJvdmlk
ZSB0aGUgc21hbGwgbW9kaWZjYXRpb25zIHRvIGx1YS5jIGFzIGEgcGF0Y2ggZmlsZSB1bmRlciB0
aGUgbGlicmFyeSdzIHBhdGNoZXMgZGlyZWN0b3J5LiBUaGlzIHNob3VsZCBub3Qgb25seSBtYWtl
IHRoZSByZXZpZXcgZWFzaWVyIHNpbmNlIHlvdSdsbCBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IHNl
ZSBqdXN0IHRoZSBjaGFuZ2VzLCBidXQgaXQgd291bGQgYWxzbyBzaW1wbGlmeSB0aGUgcHJvY2Vz
cyBvZiB1cGdyYWRpbmcgdG8gbmV3ZXIgdmVyc2lvbnMgaW4gdGhlIGZ1dHVyZS4NCg0KLS0gRmVs
aXBlDQoNCg0KICAgIC0tDQogICAgQ2hlZXJzLA0KICAgIEp1c3RpbiAoSmlhIEhlKQ0KICAgIA0K
ICAgIA0KICAgIA0KICAgID4gQEAgLTAsMCArMSw2MjAgQEANCiAgICA+ICsvKg0KICAgID4gKyoq
ICRJZDogbHVhLmMsdiAxLjIzMC4xLjEgMjAxNy8wNC8xOSAxNzoyOTo1NyByb2JlcnRvIEV4cCAk
DQogICAgPiArKiogTHVhIHN0YW5kLWFsb25lIGludGVycHJldGVyDQogICAgPiArKiogU2VlIENv
cHlyaWdodCBOb3RpY2UgaW4gbHVhLmgNCiAgICA+ICsqLw0KICAgID4gKw0KICAgID4gKyNkZWZp
bmUgbHVhX2MNCiAgICA+ICsNCiAgICA+ICsjaW5jbHVkZSAibHByZWZpeC5oIg0KICAgID4gKw0K
ICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxzaWduYWwuaD4NCiAgICA+ICsjaW5jbHVkZSA8c3Rk
aW8uaD4NCiAgICA+ICsjaW5jbHVkZSA8c3RkbGliLmg+DQogICAgPiArI2luY2x1ZGUgPHN0cmlu
Zy5oPg0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlICJsdWEuaCINCiAgICA+ICsNCiAgICA+ICsj
aW5jbHVkZSAibGF1eGxpYi5oIg0KICAgID4gKyNpbmNsdWRlICJsdWFsaWIuaCINCiAgICA+ICsN
CiAgICA+ICsjaW5jbHVkZSA8dWsvcGxhdC9tZW1vcnkuaD4NCiAgICA+ICsNCiAgICA+ICsjaWYg
IWRlZmluZWQoTFVBX1BST01QVCkNCiAgICA+ICsjZGVmaW5lIExVQV9QUk9NUFQgICAgICAgICAg
ICI+ICINCiAgICA+ICsjZGVmaW5lIExVQV9QUk9NUFQyICAgICAgICAgICI+PiAiDQogICAgPiAr
I2VuZGlmDQogICAgPiArDQogICAgPiArI2lmICFkZWZpbmVkKExVQV9QUk9HTkFNRSkNCiAgICA+
ICsjZGVmaW5lIExVQV9QUk9HTkFNRSAgICAgICAgICJsdWEiDQogICAgPiArI2VuZGlmDQogICAg
PiArDQogICAgPiArI2lmICFkZWZpbmVkKExVQV9NQVhJTlBVVCkNCiAgICA+ICsjZGVmaW5lIExV
QV9NQVhJTlBVVCAgICAgICAgIDUxMg0KICAgID4gKyNlbmRpZg0KICAgID4gKw0KICAgID4gKyNp
ZiAhZGVmaW5lZChMVUFfSU5JVF9WQVIpDQogICAgPiArI2RlZmluZSBMVUFfSU5JVF9WQVIgICAg
ICAgICAiTFVBX0lOSVQiDQogICAgPiArI2VuZGlmDQogICAgPiArDQogICAgPiArI2RlZmluZSBM
VUFfSU5JVFZBUlZFUlNJT04gICBMVUFfSU5JVF9WQVIgTFVBX1ZFUlNVRkZJWA0KICAgID4gKw0K
ICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogbHVhX3N0ZGluX2lzX3R0eSBkZXRlY3RzIHdo
ZXRoZXIgdGhlIHN0YW5kYXJkIGlucHV0IGlzIGEgJ3R0eScgKHRoYXQNCiAgICA+ICsqKiBpcywg
d2hldGhlciB3ZSdyZSBydW5uaW5nIGx1YSBpbnRlcmFjdGl2ZWx5KS4NCiAgICA+ICsqLw0KICAg
ID4gKyNpZiAhZGVmaW5lZChsdWFfc3RkaW5faXNfdHR5KSAgICAgICAvKiB7ICovDQogICAgPiAr
DQogICAgPiArI2lmIGRlZmluZWQoTFVBX1VTRV9QT1NJWCkgICAvKiB7ICovDQogICAgPiArDQog
ICAgPiArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgID4gKyNkZWZpbmUgbHVhX3N0ZGluX2lzX3R0
eSgpICAgaXNhdHR5KDApDQogICAgPiArDQogICAgPiArI2VsaWYgZGVmaW5lZChMVUFfVVNFX1dJ
TkRPV1MpICAgICAgIC8qIH17ICovDQogICAgPiArDQogICAgPiArI2luY2x1ZGUgPGlvLmg+DQog
ICAgPiArI2luY2x1ZGUgPHdpbmRvd3MuaD4NCiAgICA+ICsNCiAgICA+ICsjZGVmaW5lIGx1YV9z
dGRpbl9pc190dHkoKSAgIF9pc2F0dHkoX2ZpbGVubyhzdGRpbikpDQogICAgPiArDQogICAgPiAr
I2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH17ICovDQogICAgPiArDQog
ICAgPiArLyogSVNPIEMgZGVmaW5pdGlvbiAqLw0KICAgID4gKyNkZWZpbmUgbHVhX3N0ZGluX2lz
X3R0eSgpICAgMSAgLyogYXNzdW1lIHN0ZGluIGlzIGEgdHR5ICovDQogICAgPiArDQogICAgPiAr
I2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH0gKi8NCiAgICA+ICsNCiAg
ICA+ICsjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogfSAqLw0KICAgID4g
Kw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogbHVhX3JlYWRsaW5lIGRlZmluZXMgaG93
IHRvIHNob3cgYSBwcm9tcHQgYW5kIHRoZW4gcmVhZCBhIGxpbmUgZnJvbQ0KICAgID4gKyoqIHRo
ZSBzdGFuZGFyZCBpbnB1dC4NCiAgICA+ICsqKiBsdWFfc2F2ZWxpbmUgZGVmaW5lcyBob3cgdG8g
InNhdmUiIGEgcmVhZCBsaW5lIGluIGEgImhpc3RvcnkiLg0KICAgID4gKyoqIGx1YV9mcmVlbGlu
ZSBkZWZpbmVzIGhvdyB0byBmcmVlIGEgbGluZSByZWFkIGJ5IGx1YV9yZWFkbGluZS4NCiAgICA+
ICsqLw0KICAgID4gKyNpZiAhZGVmaW5lZChsdWFfcmVhZGxpbmUpICAgLyogeyAqLw0KICAgID4g
Kw0KICAgID4gKyNpZiBkZWZpbmVkKExVQV9VU0VfUkVBRExJTkUpICAgICAgICAvKiB7ICovDQog
ICAgPiArDQogICAgPiArI2luY2x1ZGUgPHJlYWRsaW5lL3JlYWRsaW5lLmg+DQogICAgPiArI2lu
Y2x1ZGUgPHJlYWRsaW5lL2hpc3RvcnkuaD4NCiAgICA+ICsjZGVmaW5lIGx1YV9yZWFkbGluZShM
LGIscCkgICgodm9pZClMLCAoKGIpPXJlYWRsaW5lKHApKSAhPSBOVUxMKQ0KICAgID4gKyNkZWZp
bmUgbHVhX3NhdmVsaW5lKEwsbGluZSkgKCh2b2lkKUwsIGFkZF9oaXN0b3J5KGxpbmUpKQ0KICAg
ID4gKyNkZWZpbmUgbHVhX2ZyZWVsaW5lKEwsYikgICAgKCh2b2lkKUwsIGZyZWUoYikpDQogICAg
PiArDQogICAgPiArI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIH17ICov
DQogICAgPiArDQogICAgPiArI2RlZmluZSBsdWFfcmVhZGxpbmUoTCxiLHApIFwNCiAgICA+ICsg
ICAgICAgICgodm9pZClMLCBmcHV0cyhwLCBzdGRvdXQpLCBmZmx1c2goc3Rkb3V0KSwgIC8qIHNo
b3cgcHJvbXB0ICovIFwNCiAgICA+ICsgICAgICAgIGZnZXRzKGIsIExVQV9NQVhJTlBVVCwgc3Rk
aW4pICE9IE5VTEwpICAvKiBnZXQgbGluZSAqLw0KICAgID4gKyNkZWZpbmUgbHVhX3NhdmVsaW5l
KEwsbGluZSkgeyAodm9pZClMOyAodm9pZClsaW5lOyB9DQogICAgPiArI2RlZmluZSBsdWFfZnJl
ZWxpbmUoTCxiKSAgICB7ICh2b2lkKUw7ICh2b2lkKWI7IH0NCiAgICA+ICsNCiAgICA+ICsjZW5k
aWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogfSAqLw0KICAgID4gKw0KICAgID4g
KyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB9ICovDQogICAgPiArDQog
ICAgPiArDQogICAgPiArDQogICAgPiArDQogICAgPiArc3RhdGljIGx1YV9TdGF0ZSAqZ2xvYmFs
TCA9IE5VTEw7DQogICAgPiArDQogICAgPiArc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lID0g
TFVBX1BST0dOQU1FOw0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogSG9v
ayBzZXQgYnkgc2lnbmFsIGZ1bmN0aW9uIHRvIHN0b3AgdGhlIGludGVycHJldGVyLg0KICAgID4g
KyovDQogICAgPiArc3RhdGljIHZvaWQgbHN0b3AgKGx1YV9TdGF0ZSAqTCwgbHVhX0RlYnVnICph
cikgew0KICAgID4gKyAgKHZvaWQpYXI7ICAvKiB1bnVzZWQgYXJnLiAqLw0KICAgID4gKyAgbHVh
X3NldGhvb2soTCwgTlVMTCwgMCwgMCk7ICAvKiByZXNldCBob29rICovDQogICAgPiArICBsdWFM
X2Vycm9yKEwsICJpbnRlcnJ1cHRlZCEiKTsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQog
ICAgPiArLyoNCiAgICA+ICsqKiBGdW5jdGlvbiB0byBiZSBjYWxsZWQgYXQgYSBDIHNpZ25hbC4g
QmVjYXVzZSBhIEMgc2lnbmFsIGNhbm5vdA0KICAgID4gKyoqIGp1c3QgY2hhbmdlIGEgTHVhIHN0
YXRlIChhcyB0aGVyZSBpcyBubyBwcm9wZXIgc3luY2hyb25pemF0aW9uKSwNCiAgICA+ICsqKiB0
aGlzIGZ1bmN0aW9uIG9ubHkgc2V0cyBhIGhvb2sgdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgc3Rv
cCB0aGUNCiAgICA+ICsqKiBpbnRlcnByZXRlci4NCiAgICA+ICsqLw0KICAgID4gK3N0YXRpYyB2
b2lkIGxhY3Rpb24gKGludCBpKSB7DQogICAgPiArICBzaWduYWwoaSwgU0lHX0RGTCk7IC8qIGlm
IGFub3RoZXIgU0lHSU5UIGhhcHBlbnMsIHRlcm1pbmF0ZSBwcm9jZXNzICovDQogICAgPiArICBs
dWFfc2V0aG9vayhnbG9iYWxMLCBsc3RvcCwgTFVBX01BU0tDQUxMIHwgTFVBX01BU0tSRVQgfA0K
ICAgID4gTFVBX01BU0tDT1VOVCwgMSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAg
ID4gK3N0YXRpYyB2b2lkIHByaW50X3VzYWdlIChjb25zdCBjaGFyICpiYWRvcHRpb24pIHsNCiAg
ICA+ICsgIGx1YV93cml0ZXN0cmluZ2Vycm9yKCIlczogIiwgcHJvZ25hbWUpOw0KICAgID4gKyAg
aWYgKGJhZG9wdGlvblsxXSA9PSAnZScgfHwgYmFkb3B0aW9uWzFdID09ICdsJykNCiAgICA+ICsg
ICAgbHVhX3dyaXRlc3RyaW5nZXJyb3IoIiclcycgbmVlZHMgYXJndW1lbnRcbiIsIGJhZG9wdGlv
bik7DQogICAgPiArICBlbHNlDQogICAgPiArICAgIGx1YV93cml0ZXN0cmluZ2Vycm9yKCJ1bnJl
Y29nbml6ZWQgb3B0aW9uICclcydcbiIsIGJhZG9wdGlvbik7DQogICAgPiArICBsdWFfd3JpdGVz
dHJpbmdlcnJvcigNCiAgICA+ICsgICJ1c2FnZTogJXMgW29wdGlvbnNdIFtzY3JpcHQgW2FyZ3Nd
XVxuIg0KICAgID4gKyAgIkF2YWlsYWJsZSBvcHRpb25zIGFyZTpcbiINCiAgICA+ICsgICIgIC1l
IHN0YXQgIGV4ZWN1dGUgc3RyaW5nICdzdGF0J1xuIg0KICAgID4gKyAgIiAgLWkgICAgICAgZW50
ZXIgaW50ZXJhY3RpdmUgbW9kZSBhZnRlciBleGVjdXRpbmcgJ3NjcmlwdCdcbiINCiAgICA+ICsg
ICIgIC1sIG5hbWUgIHJlcXVpcmUgbGlicmFyeSAnbmFtZScgaW50byBnbG9iYWwgJ25hbWUnXG4i
DQogICAgPiArICAiICAtdiAgICAgICBzaG93IHZlcnNpb24gaW5mb3JtYXRpb25cbiINCiAgICA+
ICsgICIgIC1FICAgICAgIGlnbm9yZSBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiINCiAgICA+ICsg
ICIgIC0tICAgICAgIHN0b3AgaGFuZGxpbmcgb3B0aW9uc1xuIg0KICAgID4gKyAgIiAgLSAgICAg
ICAgc3RvcCBoYW5kbGluZyBvcHRpb25zIGFuZCBleGVjdXRlIHN0ZGluXG4iDQogICAgPiArICAs
DQogICAgPiArICBwcm9nbmFtZSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4g
Ky8qDQogICAgPiArKiogUHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UsIGFkZGluZyB0aGUgcHJvZ3Jh
bSBuYW1lIGluIGZyb250IG9mIGl0DQogICAgPiArKiogKGlmIHByZXNlbnQpDQogICAgPiArKi8N
CiAgICA+ICtzdGF0aWMgdm9pZCBsX21lc3NhZ2UgKGNvbnN0IGNoYXIgKnBuYW1lLCBjb25zdCBj
aGFyICptc2cpIHsNCiAgICA+ICsgIGlmIChwbmFtZSkgbHVhX3dyaXRlc3RyaW5nZXJyb3IoIiVz
OiAiLCBwbmFtZSk7DQogICAgPiArICBsdWFfd3JpdGVzdHJpbmdlcnJvcigiJXNcbiIsIG1zZyk7
DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogQ2hlY2sg
d2hldGhlciAnc3RhdHVzJyBpcyBub3QgT0sgYW5kLCBpZiBzbywgcHJpbnRzIHRoZSBlcnJvcg0K
ICAgID4gKyoqIG1lc3NhZ2Ugb24gdGhlIHRvcCBvZiB0aGUgc3RhY2suIEl0IGFzc3VtZXMgdGhh
dCB0aGUgZXJyb3Igb2JqZWN0DQogICAgPiArKiogaXMgYSBzdHJpbmcsIGFzIGl0IHdhcyBlaXRo
ZXIgZ2VuZXJhdGVkIGJ5IEx1YSBvciBieSAnbXNnaGFuZGxlcicuDQogICAgPiArKi8NCiAgICA+
ICtzdGF0aWMgaW50IHJlcG9ydCAobHVhX1N0YXRlICpMLCBpbnQgc3RhdHVzKSB7DQogICAgPiAr
ICBpZiAoc3RhdHVzICE9IExVQV9PSykgew0KICAgID4gKyAgICBjb25zdCBjaGFyICptc2cgPSBs
dWFfdG9zdHJpbmcoTCwgLTEpOw0KICAgID4gKyAgICBsX21lc3NhZ2UocHJvZ25hbWUsIG1zZyk7
DQogICAgPiArICAgIGx1YV9wb3AoTCwgMSk7ICAvKiByZW1vdmUgbWVzc2FnZSAqLw0KICAgID4g
KyAgfQ0KICAgID4gKyAgcmV0dXJuIHN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiAr
DQogICAgPiArLyoNCiAgICA+ICsqKiBNZXNzYWdlIGhhbmRsZXIgdXNlZCB0byBydW4gYWxsIGNo
dW5rcw0KICAgID4gKyovDQogICAgPiArc3RhdGljIGludCBtc2doYW5kbGVyIChsdWFfU3RhdGUg
KkwpIHsNCiAgICA+ICsgIGNvbnN0IGNoYXIgKm1zZyA9IGx1YV90b3N0cmluZyhMLCAxKTsNCiAg
ICA+ICsgIGlmIChtc2cgPT0gTlVMTCkgeyAgLyogaXMgZXJyb3Igb2JqZWN0IG5vdCBhIHN0cmlu
Zz8gKi8NCiAgICA+ICsgICAgaWYgKGx1YUxfY2FsbG1ldGEoTCwgMSwgIl9fdG9zdHJpbmciKSAm
JiAgLyogZG9lcyBpdCBoYXZlIGEgbWV0YW1ldGhvZA0KICAgID4gKi8NCiAgICA+ICsgICAgICAg
IGx1YV90eXBlKEwsIC0xKSA9PSBMVUFfVFNUUklORykgIC8qIHRoYXQgcHJvZHVjZXMgYSBzdHJp
bmc/ICovDQogICAgPiArICAgICAgcmV0dXJuIDE7ICAvKiB0aGF0IGlzIHRoZSBtZXNzYWdlICov
DQogICAgPiArICAgIGVsc2UNCiAgICA+ICsgICAgICBtc2cgPSBsdWFfcHVzaGZzdHJpbmcoTCwg
IihlcnJvciBvYmplY3QgaXMgYSAlcyB2YWx1ZSkiLA0KICAgID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBsdWFMX3R5cGVuYW1lKEwsIDEpKTsNCiAgICA+ICsgIH0NCiAgICA+ICsg
IGx1YUxfdHJhY2ViYWNrKEwsIEwsIG1zZywgMSk7ICAvKiBhcHBlbmQgYSBzdGFuZGFyZCB0cmFj
ZWJhY2sgKi8NCiAgICA+ICsgIHJldHVybiAxOyAgLyogcmV0dXJuIHRoZSB0cmFjZWJhY2sgKi8N
CiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBJbnRlcmZh
Y2UgdG8gJ2x1YV9wY2FsbCcsIHdoaWNoIHNldHMgYXBwcm9wcmlhdGUgbWVzc2FnZSBmdW5jdGlv
bg0KICAgID4gKyoqIGFuZCBDLXNpZ25hbCBoYW5kbGVyLiBVc2VkIHRvIHJ1biBhbGwgY2h1bmtz
Lg0KICAgID4gKyovDQogICAgPiArc3RhdGljIGludCBkb2NhbGwgKGx1YV9TdGF0ZSAqTCwgaW50
IG5hcmcsIGludCBucmVzKSB7DQogICAgPiArICBpbnQgc3RhdHVzOw0KICAgID4gKyAgaW50IGJh
c2UgPSBsdWFfZ2V0dG9wKEwpIC0gbmFyZzsgIC8qIGZ1bmN0aW9uIGluZGV4ICovDQogICAgPiAr
ICBsdWFfcHVzaGNmdW5jdGlvbihMLCBtc2doYW5kbGVyKTsgIC8qIHB1c2ggbWVzc2FnZSBoYW5k
bGVyICovDQogICAgPiArICBsdWFfaW5zZXJ0KEwsIGJhc2UpOyAgLyogcHV0IGl0IHVuZGVyIGZ1
bmN0aW9uIGFuZCBhcmdzICovDQogICAgPiArICBnbG9iYWxMID0gTDsgIC8qIHRvIGJlIGF2YWls
YWJsZSB0byAnbGFjdGlvbicgKi8NCiAgICA+ICsgIHNpZ25hbChTSUdJTlQsIGxhY3Rpb24pOyAg
Lyogc2V0IEMtc2lnbmFsIGhhbmRsZXIgKi8NCiAgICA+ICsgIHN0YXR1cyA9IGx1YV9wY2FsbChM
LCBuYXJnLCBucmVzLCBiYXNlKTsNCiAgICA+ICsgIHNpZ25hbChTSUdJTlQsIFNJR19ERkwpOyAv
KiByZXNldCBDLXNpZ25hbCBoYW5kbGVyICovDQogICAgPiArICBsdWFfcmVtb3ZlKEwsIGJhc2Up
OyAgLyogcmVtb3ZlIG1lc3NhZ2UgaGFuZGxlciBmcm9tIHRoZSBzdGFjayAqLw0KICAgID4gKyAg
cmV0dXJuIHN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArc3RhdGlj
IHZvaWQgcHJpbnRfdmVyc2lvbiAodm9pZCkgew0KICAgID4gKyAgbHVhX3dyaXRlc3RyaW5nKExV
QV9DT1BZUklHSFQsIHN0cmxlbihMVUFfQ09QWVJJR0hUKSk7DQogICAgPiArICBsdWFfd3JpdGVs
aW5lKCk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiog
Q3JlYXRlIHRoZSAnYXJnJyB0YWJsZSwgd2hpY2ggc3RvcmVzIGFsbCBhcmd1bWVudHMgZnJvbSB0
aGUNCiAgICA+ICsqKiBjb21tYW5kIGxpbmUgKCdhcmd2JykuIEl0IHNob3VsZCBiZSBhbGlnbmVk
IHNvIHRoYXQsIGF0IGluZGV4IDAsDQogICAgPiArKiogaXQgaGFzICdhcmd2W3NjcmlwdF0nLCB3
aGljaCBpcyB0aGUgc2NyaXB0IG5hbWUuIFRoZSBhcmd1bWVudHMNCiAgICA+ICsqKiB0byB0aGUg
c2NyaXB0IChldmVyeXRoaW5nIGFmdGVyICdzY3JpcHQnKSBnbyB0byBwb3NpdGl2ZSBpbmRpY2Vz
Ow0KICAgID4gKyoqIG90aGVyIGFyZ3VtZW50cyAoYmVmb3JlIHRoZSBzY3JpcHQgbmFtZSkgZ28g
dG8gbmVnYXRpdmUgaW5kaWNlcy4NCiAgICA+ICsqKiBJZiB0aGVyZSBpcyBubyBzY3JpcHQgbmFt
ZSwgYXNzdW1lIGludGVycHJldGVyJ3MgbmFtZSBhcyBiYXNlLg0KICAgID4gKyovDQogICAgPiAr
c3RhdGljIHZvaWQgY3JlYXRlYXJndGFibGUgKGx1YV9TdGF0ZSAqTCwgY2hhciAqKmFyZ3YsIGlu
dCBhcmdjLCBpbnQgc2NyaXB0KSB7DQogICAgPiArICBpbnQgaSwgbmFyZzsNCiAgICA+ICsgIGlm
IChzY3JpcHQgPT0gYXJnYykgc2NyaXB0ID0gMDsgIC8qIG5vIHNjcmlwdCBuYW1lPyAqLw0KICAg
ID4gKyAgbmFyZyA9IGFyZ2MgLSAoc2NyaXB0ICsgMSk7ICAvKiBudW1iZXIgb2YgcG9zaXRpdmUg
aW5kaWNlcyAqLw0KICAgID4gKyAgbHVhX2NyZWF0ZXRhYmxlKEwsIG5hcmcsIHNjcmlwdCArIDEp
Ow0KICAgID4gKyAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgew0KICAgID4gKyAgICBsdWFf
cHVzaHN0cmluZyhMLCBhcmd2W2ldKTsNCiAgICA+ICsgICAgbHVhX3Jhd3NldGkoTCwgLTIsIGkg
LSBzY3JpcHQpOw0KICAgID4gKyAgfQ0KICAgID4gKyAgbHVhX3NldGdsb2JhbChMLCAiYXJnIik7
DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gK3N0YXRpYyBpbnQgZG9jaHVuayAo
bHVhX1N0YXRlICpMLCBpbnQgc3RhdHVzKSB7DQogICAgPiArICBpZiAoc3RhdHVzID09IExVQV9P
Sykgc3RhdHVzID0gZG9jYWxsKEwsIDAsIDApOw0KICAgID4gKyAgcmV0dXJuIHJlcG9ydChMLCBz
dGF0dXMpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICtzdGF0aWMgaW50IGRv
ZmlsZSAobHVhX1N0YXRlICpMLCBjb25zdCBjaGFyICpuYW1lKSB7DQogICAgPiArICByZXR1cm4g
ZG9jaHVuayhMLCBsdWFMX2xvYWRmaWxlKEwsIG5hbWUpKTsNCiAgICA+ICt9DQogICAgPiArDQog
ICAgPiArDQogICAgPiArc3RhdGljIGludCBkb3N0cmluZyAobHVhX1N0YXRlICpMLCBjb25zdCBj
aGFyICpzLCBjb25zdCBjaGFyICpuYW1lKSB7DQogICAgPiArICByZXR1cm4gZG9jaHVuayhMLCBs
dWFMX2xvYWRidWZmZXIoTCwgcywgc3RybGVuKHMpLCBuYW1lKSk7DQogICAgPiArfQ0KICAgID4g
Kw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogQ2FsbHMgJ3JlcXVpcmUobmFtZSknIGFu
ZCBzdG9yZXMgdGhlIHJlc3VsdCBpbiBhIGdsb2JhbCB2YXJpYWJsZQ0KICAgID4gKyoqIHdpdGgg
dGhlIGdpdmVuIG5hbWUuDQogICAgPiArKi8NCiAgICA+ICtzdGF0aWMgaW50IGRvbGlicmFyeSAo
bHVhX1N0YXRlICpMLCBjb25zdCBjaGFyICpuYW1lKSB7DQogICAgPiArICBpbnQgc3RhdHVzOw0K
ICAgID4gKyAgbHVhX2dldGdsb2JhbChMLCAicmVxdWlyZSIpOw0KICAgID4gKyAgbHVhX3B1c2hz
dHJpbmcoTCwgbmFtZSk7DQogICAgPiArICBzdGF0dXMgPSBkb2NhbGwoTCwgMSwgMSk7ICAvKiBj
YWxsICdyZXF1aXJlKG5hbWUpJyAqLw0KICAgID4gKyAgaWYgKHN0YXR1cyA9PSBMVUFfT0spDQog
ICAgPiArICAgIGx1YV9zZXRnbG9iYWwoTCwgbmFtZSk7ICAvKiBnbG9iYWxbbmFtZV0gPSByZXF1
aXJlIHJldHVybiAqLw0KICAgID4gKyAgcmV0dXJuIHJlcG9ydChMLCBzdGF0dXMpOw0KICAgID4g
K30NCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4gKyoqIFJldHVybnMgdGhlIHN0
cmluZyB0byBiZSB1c2VkIGFzIGEgcHJvbXB0IGJ5IHRoZSBpbnRlcnByZXRlci4NCiAgICA+ICsq
Lw0KICAgID4gK3N0YXRpYyBjb25zdCBjaGFyICpnZXRfcHJvbXB0IChsdWFfU3RhdGUgKkwsIGlu
dCBmaXJzdGxpbmUpIHsNCiAgICA+ICsgIGNvbnN0IGNoYXIgKnA7DQogICAgPiArICBsdWFfZ2V0
Z2xvYmFsKEwsIGZpcnN0bGluZSA/ICJfUFJPTVBUIiA6ICJfUFJPTVBUMiIpOw0KICAgID4gKyAg
cCA9IGx1YV90b3N0cmluZyhMLCAtMSk7DQogICAgPiArICBpZiAocCA9PSBOVUxMKSBwID0gKGZp
cnN0bGluZSA/IExVQV9QUk9NUFQgOiBMVUFfUFJPTVBUMik7DQogICAgPiArICByZXR1cm4gcDsN
CiAgICA+ICt9DQogICAgPiArDQogICAgPiArLyogbWFyayBpbiBlcnJvciBtZXNzYWdlcyBmb3Ig
aW5jb21wbGV0ZSBzdGF0ZW1lbnRzICovDQogICAgPiArI2RlZmluZSBFT0ZNQVJLICAgICAgICAg
ICAgICAiPGVvZj4iDQogICAgPiArI2RlZmluZSBtYXJrbGVuICAgICAgICAgICAgICAoc2l6ZW9m
KEVPRk1BUkspL3NpemVvZihjaGFyKSAtIDEpDQogICAgPiArDQogICAgPiArDQogICAgPiArLyoN
CiAgICA+ICsqKiBDaGVjayB3aGV0aGVyICdzdGF0dXMnIHNpZ25hbHMgYSBzeW50YXggZXJyb3Ig
YW5kIHRoZSBlcnJvcg0KICAgID4gKyoqIG1lc3NhZ2UgYXQgdGhlIHRvcCBvZiB0aGUgc3RhY2sg
ZW5kcyB3aXRoIHRoZSBhYm92ZSBtYXJrIGZvcg0KICAgID4gKyoqIGluY29tcGxldGUgc3RhdGVt
ZW50cy4NCiAgICA+ICsqLw0KICAgID4gK3N0YXRpYyBpbnQgaW5jb21wbGV0ZSAobHVhX1N0YXRl
ICpMLCBpbnQgc3RhdHVzKSB7DQogICAgPiArICBpZiAoc3RhdHVzID09IExVQV9FUlJTWU5UQVgp
IHsNCiAgICA+ICsgICAgc2l6ZV90IGxtc2c7DQogICAgPiArICAgIGNvbnN0IGNoYXIgKm1zZyA9
IGx1YV90b2xzdHJpbmcoTCwgLTEsICZsbXNnKTsNCiAgICA+ICsgICAgaWYgKGxtc2cgPj0gbWFy
a2xlbiAmJiBzdHJjbXAobXNnICsgbG1zZyAtIG1hcmtsZW4sIEVPRk1BUkspID09IDApIHsNCiAg
ICA+ICsgICAgICBsdWFfcG9wKEwsIDEpOw0KICAgID4gKyAgICAgIHJldHVybiAxOw0KICAgID4g
KyAgICB9DQogICAgPiArICB9DQogICAgPiArICByZXR1cm4gMDsgIC8qIGVsc2UuLi4gKi8NCiAg
ICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBQcm9tcHQgdGhl
IHVzZXIsIHJlYWQgYSBsaW5lLCBhbmQgcHVzaCBpdCBpbnRvIHRoZSBMdWEgc3RhY2suDQogICAg
PiArKi8NCiAgICA+ICtzdGF0aWMgaW50IHB1c2hsaW5lIChsdWFfU3RhdGUgKkwsIGludCBmaXJz
dGxpbmUpIHsNCiAgICA+ICsgIGNoYXIgYnVmZmVyW0xVQV9NQVhJTlBVVF07DQogICAgPiArICBj
aGFyICpiID0gYnVmZmVyOw0KICAgID4gKyAgc2l6ZV90IGw7DQogICAgPiArICBjb25zdCBjaGFy
ICpwcm10ID0gZ2V0X3Byb21wdChMLCBmaXJzdGxpbmUpOw0KICAgID4gKyAgaW50IHJlYWRzdGF0
dXMgPSBsdWFfcmVhZGxpbmUoTCwgYiwgcHJtdCk7DQogICAgPiArICBpZiAocmVhZHN0YXR1cyA9
PSAwKQ0KICAgID4gKyAgICByZXR1cm4gMDsgIC8qIG5vIGlucHV0IChwcm9tcHQgd2lsbCBiZSBw
b3BwZWQgYnkgY2FsbGVyKSAqLw0KICAgID4gKyAgbHVhX3BvcChMLCAxKTsgIC8qIHJlbW92ZSBw
cm9tcHQgKi8NCiAgICA+ICsgIGwgPSBzdHJsZW4oYik7DQogICAgPiArICBpZiAobCA+IDAgJiYg
YltsLTFdID09ICdcbicpICAvKiBsaW5lIGVuZHMgd2l0aCBuZXdsaW5lPyAqLw0KICAgID4gKyAg
ICBiWy0tbF0gPSAnXDAnOyAgLyogcmVtb3ZlIGl0ICovDQogICAgPiArICBpZiAoZmlyc3RsaW5l
ICYmIGJbMF0gPT0gJz0nKSAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCA1LjIsIC4uLiAqLw0K
ICAgID4gKyAgICBsdWFfcHVzaGZzdHJpbmcoTCwgInJldHVybiAlcyIsIGIgKyAxKTsgIC8qIGNo
YW5nZSAnPScgdG8gJ3JldHVybicgKi8NCiAgICA+ICsgIGVsc2UNCiAgICA+ICsgICAgbHVhX3B1
c2hsc3RyaW5nKEwsIGIsIGwpOw0KICAgID4gKyAgbHVhX2ZyZWVsaW5lKEwsIGIpOw0KICAgID4g
KyAgcmV0dXJuIDE7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4gKy8qDQogICAg
PiArKiogVHJ5IHRvIGNvbXBpbGUgbGluZSBvbiB0aGUgc3RhY2sgYXMgJ3JldHVybiA8bGluZT47
Jzsgb24gcmV0dXJuLCBzdGFjaw0KICAgID4gKyoqIGhhcyBlaXRoZXIgY29tcGlsZWQgY2h1bmsg
b3Igb3JpZ2luYWwgbGluZSAoaWYgY29tcGlsYXRpb24gZmFpbGVkKS4NCiAgICA+ICsqLw0KICAg
ID4gK3N0YXRpYyBpbnQgYWRkcmV0dXJuIChsdWFfU3RhdGUgKkwpIHsNCiAgICA+ICsgIGNvbnN0
IGNoYXIgKmxpbmUgPSBsdWFfdG9zdHJpbmcoTCwgLTEpOyAgLyogb3JpZ2luYWwgbGluZSAqLw0K
ICAgID4gKyAgY29uc3QgY2hhciAqcmV0bGluZSA9IGx1YV9wdXNoZnN0cmluZyhMLCAicmV0dXJu
ICVzOyIsIGxpbmUpOw0KICAgID4gKyAgaW50IHN0YXR1cyA9IGx1YUxfbG9hZGJ1ZmZlcihMLCBy
ZXRsaW5lLCBzdHJsZW4ocmV0bGluZSksICI9c3RkaW4iKTsNCiAgICA+ICsgIGlmIChzdGF0dXMg
PT0gTFVBX09LKSB7DQogICAgPiArICAgIGx1YV9yZW1vdmUoTCwgLTIpOyAgLyogcmVtb3ZlIG1v
ZGlmaWVkIGxpbmUgKi8NCiAgICA+ICsgICAgaWYgKGxpbmVbMF0gIT0gJ1wwJykgIC8qIG5vbiBl
bXB0eT8gKi8NCiAgICA+ICsgICAgICBsdWFfc2F2ZWxpbmUoTCwgbGluZSk7ICAvKiBrZWVwIGhp
c3RvcnkgKi8NCiAgICA+ICsgIH0NCiAgICA+ICsgIGVsc2UNCiAgICA+ICsgICAgbHVhX3BvcChM
LCAyKTsgIC8qIHBvcCByZXN1bHQgZnJvbSAnbHVhTF9sb2FkYnVmZmVyJyBhbmQgbW9kaWZpZWQg
bGluZSAqLw0KICAgID4gKyAgcmV0dXJuIHN0YXR1czsNCiAgICA+ICt9DQogICAgPiArDQogICAg
PiArDQogICAgPiArLyoNCiAgICA+ICsqKiBSZWFkIG11bHRpcGxlIGxpbmVzIHVudGlsIGEgY29t
cGxldGUgTHVhIHN0YXRlbWVudA0KICAgID4gKyovDQogICAgPiArc3RhdGljIGludCBtdWx0aWxp
bmUgKGx1YV9TdGF0ZSAqTCkgew0KICAgID4gKyAgZm9yICg7OykgeyAgLyogcmVwZWF0IHVudGls
IGdldHMgYSBjb21wbGV0ZSBzdGF0ZW1lbnQgKi8NCiAgICA+ICsgICAgc2l6ZV90IGxlbjsNCiAg
ICA+ICsgICAgY29uc3QgY2hhciAqbGluZSA9IGx1YV90b2xzdHJpbmcoTCwgMSwgJmxlbik7ICAv
KiBnZXQgd2hhdCBpdCBoYXMgKi8NCiAgICA+ICsgICAgaW50IHN0YXR1cyA9IGx1YUxfbG9hZGJ1
ZmZlcihMLCBsaW5lLCBsZW4sICI9c3RkaW4iKTsgIC8qIHRyeSBpdCAqLw0KICAgID4gKyAgICBp
ZiAoIWluY29tcGxldGUoTCwgc3RhdHVzKSB8fCAhcHVzaGxpbmUoTCwgMCkpIHsNCiAgICA+ICsg
ICAgICBsdWFfc2F2ZWxpbmUoTCwgbGluZSk7ICAvKiBrZWVwIGhpc3RvcnkgKi8NCiAgICA+ICsg
ICAgICByZXR1cm4gc3RhdHVzOyAgLyogY2Fubm90IG9yIHNob3VsZCBub3QgdHJ5IHRvIGFkZCBj
b250aW51YXRpb24gbGluZSAqLw0KICAgID4gKyAgICB9DQogICAgPiArICAgIGx1YV9wdXNobGl0
ZXJhbChMLCAiXG4iKTsgIC8qIGFkZCBuZXdsaW5lLi4uICovDQogICAgPiArICAgIGx1YV9pbnNl
cnQoTCwgLTIpOyAgLyogLi4uYmV0d2VlbiB0aGUgdHdvIGxpbmVzICovDQogICAgPiArICAgIGx1
YV9jb25jYXQoTCwgMyk7ICAvKiBqb2luIHRoZW0gKi8NCiAgICA+ICsgIH0NCiAgICA+ICt9DQog
ICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBSZWFkIGEgbGluZSBhbmQgdHJ5
IHRvIGxvYWQgKGNvbXBpbGUpIGl0IGZpcnN0IGFzIGFuIGV4cHJlc3Npb24gKGJ5DQogICAgPiAr
KiogYWRkaW5nICJyZXR1cm4gIiBpbiBmcm9udCBvZiBpdCkgYW5kIHNlY29uZCBhcyBhIHN0YXRl
bWVudC4gUmV0dXJuDQogICAgPiArKiogdGhlIGZpbmFsIHN0YXR1cyBvZiBsb2FkL2NhbGwgd2l0
aCB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uIChpZiBhbnkpDQogICAgPiArKiogaW4gdGhlIHRvcCBv
ZiB0aGUgc3RhY2suDQogICAgPiArKi8NCiAgICA+ICtzdGF0aWMgaW50IGxvYWRsaW5lIChsdWFf
U3RhdGUgKkwpIHsNCiAgICA+ICsgIGludCBzdGF0dXM7DQogICAgPiArICBsdWFfc2V0dG9wKEws
IDApOw0KICAgID4gKyAgaWYgKCFwdXNobGluZShMLCAxKSkNCiAgICA+ICsgICAgcmV0dXJuIC0x
OyAgLyogbm8gaW5wdXQgKi8NCiAgICA+ICsgIGlmICgoc3RhdHVzID0gYWRkcmV0dXJuKEwpKSAh
PSBMVUFfT0spICAvKiAncmV0dXJuIC4uLicgZGlkIG5vdCB3b3JrPyAqLw0KICAgID4gKyAgICBz
dGF0dXMgPSBtdWx0aWxpbmUoTCk7ICAvKiB0cnkgYXMgY29tbWFuZCwgbWF5YmUgd2l0aCBjb250
aW51YXRpb24gbGluZXMNCiAgICA+ICovDQogICAgPiArICBsdWFfcmVtb3ZlKEwsIDEpOyAgLyog
cmVtb3ZlIGxpbmUgZnJvbSB0aGUgc3RhY2sgKi8NCiAgICA+ICsgIGx1YV9hc3NlcnQobHVhX2dl
dHRvcChMKSA9PSAxKTsNCiAgICA+ICsgIHJldHVybiBzdGF0dXM7DQogICAgPiArfQ0KICAgID4g
Kw0KICAgID4gKw0KICAgID4gKy8qDQogICAgPiArKiogUHJpbnRzIChjYWxsaW5nIHRoZSBMdWEg
J3ByaW50JyBmdW5jdGlvbikgYW55IHZhbHVlcyBvbiB0aGUgc3RhY2sNCiAgICA+ICsqLw0KICAg
ID4gK3N0YXRpYyB2b2lkIGxfcHJpbnQgKGx1YV9TdGF0ZSAqTCkgew0KICAgID4gKyAgaW50IG4g
PSBsdWFfZ2V0dG9wKEwpOw0KICAgID4gKyAgaWYgKG4gPiAwKSB7ICAvKiBhbnkgcmVzdWx0IHRv
IGJlIHByaW50ZWQ/ICovDQogICAgPiArICAgIGx1YUxfY2hlY2tzdGFjayhMLCBMVUFfTUlOU1RB
Q0ssICJ0b28gbWFueSByZXN1bHRzIHRvIHByaW50Iik7DQogICAgPiArICAgIGx1YV9nZXRnbG9i
YWwoTCwgInByaW50Iik7DQogICAgPiArICAgIGx1YV9pbnNlcnQoTCwgMSk7DQogICAgPiArICAg
IGlmIChsdWFfcGNhbGwoTCwgbiwgMCwgMCkgIT0gTFVBX09LKQ0KICAgID4gKyAgICAgIGxfbWVz
c2FnZShwcm9nbmFtZSwgbHVhX3B1c2hmc3RyaW5nKEwsICJlcnJvciBjYWxsaW5nICdwcmludCcg
KCVzKSIsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbHVhX3Rvc3RyaW5nKEwsIC0xKSkpOw0KICAgID4gKyAgfQ0KICAgID4gK30NCiAgICA+ICsN
CiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4gKyoqIERvIHRoZSBSRVBMOiByZXBlYXRlZGx5IHJl
YWQgKGxvYWQpIGEgbGluZSwgZXZhbHVhdGUgKGNhbGwpIGl0LCBhbmQNCiAgICA+ICsqKiBwcmlu
dCBhbnkgcmVzdWx0cy4NCiAgICA+ICsqLw0KICAgID4gK3N0YXRpYyB2b2lkIGRvUkVQTCAobHVh
X1N0YXRlICpMKSB7DQogICAgPiArICBpbnQgc3RhdHVzOw0KICAgID4gKyAgY29uc3QgY2hhciAq
b2xkcHJvZ25hbWUgPSBwcm9nbmFtZTsNCiAgICA+ICsgIHByb2duYW1lID0gTlVMTDsgIC8qIG5v
ICdwcm9nbmFtZScgb24gZXJyb3JzIGluIGludGVyYWN0aXZlIG1vZGUgKi8NCiAgICA+ICsgIHdo
aWxlICgoc3RhdHVzID0gbG9hZGxpbmUoTCkpICE9IC0xKSB7DQogICAgPiArICAgIGlmIChzdGF0
dXMgPT0gTFVBX09LKQ0KICAgID4gKyAgICAgIHN0YXR1cyA9IGRvY2FsbChMLCAwLCBMVUFfTVVM
VFJFVCk7DQogICAgPiArICAgIGlmIChzdGF0dXMgPT0gTFVBX09LKSBsX3ByaW50KEwpOw0KICAg
ID4gKyAgICBlbHNlIHJlcG9ydChMLCBzdGF0dXMpOw0KICAgID4gKyAgfQ0KICAgID4gKyAgbHVh
X3NldHRvcChMLCAwKTsgIC8qIGNsZWFyIHN0YWNrICovDQogICAgPiArICBsdWFfd3JpdGVsaW5l
KCk7DQogICAgPiArICBwcm9nbmFtZSA9IG9sZHByb2duYW1lOw0KICAgID4gK30NCiAgICA+ICsN
CiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4gKyoqIFB1c2ggb24gdGhlIHN0YWNrIHRoZSBjb250
ZW50cyBvZiB0YWJsZSAnYXJnJyBmcm9tIDEgdG8gI2FyZw0KICAgID4gKyovDQogICAgPiArc3Rh
dGljIGludCBwdXNoYXJncyAobHVhX1N0YXRlICpMKSB7DQogICAgPiArICBpbnQgaSwgbjsNCiAg
ICA+ICsgIGlmIChsdWFfZ2V0Z2xvYmFsKEwsICJhcmciKSAhPSBMVUFfVFRBQkxFKQ0KICAgID4g
KyAgICBsdWFMX2Vycm9yKEwsICInYXJnJyBpcyBub3QgYSB0YWJsZSIpOw0KICAgID4gKyAgbiA9
IChpbnQpbHVhTF9sZW4oTCwgLTEpOw0KICAgID4gKyAgbHVhTF9jaGVja3N0YWNrKEwsIG4gKyAz
LCAidG9vIG1hbnkgYXJndW1lbnRzIHRvIHNjcmlwdCIpOw0KICAgID4gKyAgZm9yIChpID0gMTsg
aSA8PSBuOyBpKyspDQogICAgPiArICAgIGx1YV9yYXdnZXRpKEwsIC1pLCBpKTsNCiAgICA+ICsg
IGx1YV9yZW1vdmUoTCwgLWkpOyAgLyogcmVtb3ZlIHRhYmxlIGZyb20gdGhlIHN0YWNrICovDQog
ICAgPiArICByZXR1cm4gbjsNCiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArc3Rh
dGljIGludCBoYW5kbGVfc2NyaXB0IChsdWFfU3RhdGUgKkwsIGNoYXIgKiphcmd2KSB7DQogICAg
PiArICBpbnQgc3RhdHVzOw0KICAgID4gKyAgY29uc3QgY2hhciAqZm5hbWUgPSBhcmd2WzBdOw0K
ICAgID4gKyAgaWYgKHN0cmNtcChmbmFtZSwgIi0iKSA9PSAwICYmIHN0cmNtcChhcmd2Wy0xXSwg
Ii0tIikgIT0gMCkNCiAgICA+ICsgICAgZm5hbWUgPSBOVUxMOyAgLyogc3RkaW4gKi8NCiAgICA+
ICsgIHN0YXR1cyA9IGx1YUxfbG9hZGZpbGUoTCwgZm5hbWUpOw0KICAgID4gKyAgaWYgKHN0YXR1
cyA9PSBMVUFfT0spIHsNCiAgICA+ICsgICAgaW50IG4gPSBwdXNoYXJncyhMKTsgIC8qIHB1c2gg
YXJndW1lbnRzIHRvIHNjcmlwdCAqLw0KICAgID4gKyAgICBzdGF0dXMgPSBkb2NhbGwoTCwgbiwg
TFVBX01VTFRSRVQpOw0KICAgID4gKyAgfQ0KICAgID4gKyAgcmV0dXJuIHJlcG9ydChMLCBzdGF0
dXMpOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICsNCiAgICA+ICsvKiBiaXRz
IG9mIHZhcmlvdXMgYXJndW1lbnQgaW5kaWNhdG9ycyBpbiAnYXJncycgKi8NCiAgICA+ICsjZGVm
aW5lIGhhc19lcnJvciAgICAxICAgICAgIC8qIGJhZCBvcHRpb24gKi8NCiAgICA+ICsjZGVmaW5l
IGhhc19pICAgICAgICAgICAgICAgIDIgICAgICAgLyogLWkgKi8NCiAgICA+ICsjZGVmaW5lIGhh
c192ICAgICAgICAgICAgICAgIDQgICAgICAgLyogLXYgKi8NCiAgICA+ICsjZGVmaW5lIGhhc19l
ICAgICAgICAgICAgICAgIDggICAgICAgLyogLWUgKi8NCiAgICA+ICsjZGVmaW5lIGhhc19FICAg
ICAgICAgICAgICAgIDE2ICAgICAgLyogLUUgKi8NCiAgICA+ICsNCiAgICA+ICsvKg0KICAgID4g
KyoqIFRyYXZlcnNlcyBhbGwgYXJndW1lbnRzIGZyb20gJ2FyZ3YnLCByZXR1cm5pbmcgYSBtYXNr
IHdpdGggdGhvc2UNCiAgICA+ICsqKiBuZWVkZWQgYmVmb3JlIHJ1bm5pbmcgYW55IEx1YSBjb2Rl
IChvciBhbiBlcnJvciBjb2RlIGlmIGl0IGZpbmRzDQogICAgPiArKiogYW55IGludmFsaWQgYXJn
dW1lbnQpLiAnZmlyc3QnIHJldHVybnMgdGhlIGZpcnN0IG5vdC1oYW5kbGVkIGFyZ3VtZW50DQog
ICAgPiArKiogKGVpdGhlciB0aGUgc2NyaXB0IG5hbWUgb3IgYSBiYWQgYXJndW1lbnQgaW4gY2Fz
ZSBvZiBlcnJvcikuDQogICAgPiArKi8NCiAgICA+ICtzdGF0aWMgaW50IGNvbGxlY3RhcmdzIChj
aGFyICoqYXJndiwgaW50ICpmaXJzdCkgew0KICAgID4gKyAgaW50IGFyZ3MgPSAwOw0KICAgID4g
KyAgaW50IGk7DQogICAgPiArICBmb3IgKGkgPSAxOyBhcmd2W2ldICE9IE5VTEw7IGkrKykgew0K
ICAgID4gKyAgICAqZmlyc3QgPSBpOw0KICAgID4gKyAgICBpZiAoYXJndltpXVswXSAhPSAnLScp
ICAvKiBub3QgYW4gb3B0aW9uPyAqLw0KICAgID4gKyAgICAgICAgcmV0dXJuIGFyZ3M7ICAvKiBz
dG9wIGhhbmRsaW5nIG9wdGlvbnMgKi8NCiAgICA+ICsgICAgc3dpdGNoIChhcmd2W2ldWzFdKSB7
ICAvKiBlbHNlIGNoZWNrIG9wdGlvbiAqLw0KICAgID4gKyAgICAgIGNhc2UgJy0nOiAgLyogJy0t
JyAqLw0KICAgID4gKyAgICAgICAgaWYgKGFyZ3ZbaV1bMl0gIT0gJ1wwJykgIC8qIGV4dHJhIGNo
YXJhY3RlcnMgYWZ0ZXIgJy0tJz8gKi8NCiAgICA+ICsgICAgICAgICAgcmV0dXJuIGhhc19lcnJv
cjsgIC8qIGludmFsaWQgb3B0aW9uICovDQogICAgPiArICAgICAgICAqZmlyc3QgPSBpICsgMTsN
CiAgICA+ICsgICAgICAgIHJldHVybiBhcmdzOw0KICAgID4gKyAgICAgIGNhc2UgJ1wwJzogIC8q
ICctJyAqLw0KICAgID4gKyAgICAgICAgcmV0dXJuIGFyZ3M7ICAvKiBzY3JpcHQgIm5hbWUiIGlz
ICctJyAqLw0KICAgID4gKyAgICAgIGNhc2UgJ0UnOg0KICAgID4gKyAgICAgICAgaWYgKGFyZ3Zb
aV1bMl0gIT0gJ1wwJykgIC8qIGV4dHJhIGNoYXJhY3RlcnMgYWZ0ZXIgMXN0PyAqLw0KICAgID4g
KyAgICAgICAgICByZXR1cm4gaGFzX2Vycm9yOyAgLyogaW52YWxpZCBvcHRpb24gKi8NCiAgICA+
ICsgICAgICAgIGFyZ3MgfD0gaGFzX0U7DQogICAgPiArICAgICAgICBicmVhazsNCiAgICA+ICsg
ICAgICBjYXNlICdpJzoNCiAgICA+ICsgICAgICAgIGFyZ3MgfD0gaGFzX2k7ICAvKiAoLWkgaW1w
bGllcyAtdikgKi8vKiBGQUxMVEhST1VHSCAqLw0KICAgID4gKyAgICAgIGNhc2UgJ3YnOg0KICAg
ID4gKyAgICAgICAgaWYgKGFyZ3ZbaV1bMl0gIT0gJ1wwJykgIC8qIGV4dHJhIGNoYXJhY3RlcnMg
YWZ0ZXIgMXN0PyAqLw0KICAgID4gKyAgICAgICAgICByZXR1cm4gaGFzX2Vycm9yOyAgLyogaW52
YWxpZCBvcHRpb24gKi8NCiAgICA+ICsgICAgICAgIGFyZ3MgfD0gaGFzX3Y7DQogICAgPiArICAg
ICAgICBicmVhazsNCiAgICA+ICsgICAgICBjYXNlICdlJzoNCiAgICA+ICsgICAgICAgIGFyZ3Mg
fD0gaGFzX2U7ICAvKiBGQUxMVEhST1VHSCAqLw0KICAgID4gKyAgICAgIGNhc2UgJ2wnOiAgLyog
Ym90aCBvcHRpb25zIG5lZWQgYW4gYXJndW1lbnQgKi8NCiAgICA+ICsgICAgICAgIGlmIChhcmd2
W2ldWzJdID09ICdcMCcpIHsgIC8qIG5vIGNvbmNhdGVuYXRlZCBhcmd1bWVudD8gKi8NCiAgICA+
ICsgICAgICAgICAgaSsrOyAgLyogdHJ5IG5leHQgJ2FyZ3YnICovDQogICAgPiArICAgICAgICAg
IGlmIChhcmd2W2ldID09IE5VTEwgfHwgYXJndltpXVswXSA9PSAnLScpDQogICAgPiArICAgICAg
ICAgICAgcmV0dXJuIGhhc19lcnJvcjsgIC8qIG5vIG5leHQgYXJndW1lbnQgb3IgaXQgaXMgYW5v
dGhlciBvcHRpb24gKi8NCiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsgICAgICAgIGJyZWFrOw0K
ICAgID4gKyAgICAgIGRlZmF1bHQ6ICAvKiBpbnZhbGlkIG9wdGlvbiAqLw0KICAgID4gKyAgICAg
ICAgcmV0dXJuIGhhc19lcnJvcjsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgfQ0KICAgID4gKyAg
KmZpcnN0ID0gaTsgIC8qIG5vIHNjcmlwdCBuYW1lICovDQogICAgPiArICByZXR1cm4gYXJnczsN
CiAgICA+ICt9DQogICAgPiArDQogICAgPiArDQogICAgPiArLyoNCiAgICA+ICsqKiBQcm9jZXNz
ZXMgb3B0aW9ucyAnZScgYW5kICdsJywgd2hpY2ggaW52b2x2ZSBydW5uaW5nIEx1YSBjb2RlLg0K
ICAgID4gKyoqIFJldHVybnMgMCBpZiBzb21lIGNvZGUgcmFpc2VzIGFuIGVycm9yLg0KICAgID4g
KyovDQogICAgPiArc3RhdGljIGludCBydW5hcmdzIChsdWFfU3RhdGUgKkwsIGNoYXIgKiphcmd2
LCBpbnQgbikgew0KICAgID4gKyAgaW50IGk7DQogICAgPiArICBmb3IgKGkgPSAxOyBpIDwgbjsg
aSsrKSB7DQogICAgPiArICAgIGludCBvcHRpb24gPSBhcmd2W2ldWzFdOw0KICAgID4gKyAgICBs
dWFfYXNzZXJ0KGFyZ3ZbaV1bMF0gPT0gJy0nKTsgIC8qIGFscmVhZHkgY2hlY2tlZCAqLw0KICAg
ID4gKyAgICBpZiAob3B0aW9uID09ICdlJyB8fCBvcHRpb24gPT0gJ2wnKSB7DQogICAgPiArICAg
ICAgaW50IHN0YXR1czsNCiAgICA+ICsgICAgICBjb25zdCBjaGFyICpleHRyYSA9IGFyZ3ZbaV0g
KyAyOyAgLyogYm90aCBvcHRpb25zIG5lZWQgYW4gYXJndW1lbnQgKi8NCiAgICA+ICsgICAgICBp
ZiAoKmV4dHJhID09ICdcMCcpIGV4dHJhID0gYXJndlsrK2ldOw0KICAgID4gKyAgICAgIGx1YV9h
c3NlcnQoZXh0cmEgIT0gTlVMTCk7DQogICAgPiArICAgICAgc3RhdHVzID0gKG9wdGlvbiA9PSAn
ZScpDQogICAgPiArICAgICAgICAgICAgICAgPyBkb3N0cmluZyhMLCBleHRyYSwgIj0oY29tbWFu
ZCBsaW5lKSIpDQogICAgPiArICAgICAgICAgICAgICAgOiBkb2xpYnJhcnkoTCwgZXh0cmEpOw0K
ICAgID4gKyAgICAgIGlmIChzdGF0dXMgIT0gTFVBX09LKSByZXR1cm4gMDsNCiAgICA+ICsgICAg
fQ0KICAgID4gKyAgfQ0KICAgID4gKyAgcmV0dXJuIDE7DQogICAgPiArfQ0KICAgID4gKw0KICAg
ID4gKw0KICAgID4gKw0KICAgID4gK3N0YXRpYyBpbnQgaGFuZGxlX2x1YWluaXQgKGx1YV9TdGF0
ZSAqTCkgew0KICAgID4gKyAgY29uc3QgY2hhciAqbmFtZSA9ICI9IiBMVUFfSU5JVFZBUlZFUlNJ
T047DQogICAgPiArICBjb25zdCBjaGFyICppbml0ID0gZ2V0ZW52KG5hbWUgKyAxKTsNCiAgICA+
ICsgIGlmIChpbml0ID09IE5VTEwpIHsNCiAgICA+ICsgICAgbmFtZSA9ICI9IiBMVUFfSU5JVF9W
QVI7DQogICAgPiArICAgIGluaXQgPSBnZXRlbnYobmFtZSArIDEpOyAgLyogdHJ5IGFsdGVybmF0
aXZlIG5hbWUgKi8NCiAgICA+ICsgIH0NCiAgICA+ICsgIGlmIChpbml0ID09IE5VTEwpIHJldHVy
biBMVUFfT0s7DQogICAgPiArICBlbHNlIGlmIChpbml0WzBdID09ICdAJykNCiAgICA+ICsgICAg
cmV0dXJuIGRvZmlsZShMLCBpbml0KzEpOw0KICAgID4gKyAgZWxzZQ0KICAgID4gKyAgICByZXR1
cm4gZG9zdHJpbmcoTCwgaW5pdCwgbmFtZSk7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0K
ICAgID4gKy8qDQogICAgPiArKiogTWFpbiBib2R5IG9mIHN0YW5kLWFsb25lIGludGVycHJldGVy
ICh0byBiZSBjYWxsZWQgaW4gcHJvdGVjdGVkIG1vZGUpLg0KICAgID4gKyoqIFJlYWRzIHRoZSBv
cHRpb25zIGFuZCBoYW5kbGVzIHRoZW0gYWxsLg0KICAgID4gKyovDQogICAgPiArc3RhdGljIGlu
dCBwbWFpbiAobHVhX1N0YXRlICpMKSB7DQogICAgPiArICBpbnQgYXJnYyA9IChpbnQpbHVhX3Rv
aW50ZWdlcihMLCAxKTsNCiAgICA+ICsgIGNoYXIgKiphcmd2ID0gKGNoYXIgKiopbHVhX3RvdXNl
cmRhdGEoTCwgMik7DQogICAgPiArICBpbnQgc2NyaXB0Ow0KICAgID4gKyAgc3RydWN0IHVrcGxh
dF9tZW1yZWdpb25fZGVzYyBpbWc7DQogICAgPiArICBjaGFyICpjc3RyOw0KICAgID4gKw0KICAg
ID4gKyAgaW50IGFyZ3MgPSBjb2xsZWN0YXJncyhhcmd2LCAmc2NyaXB0KTsNCiAgICA+ICsgIGx1
YUxfY2hlY2t2ZXJzaW9uKEwpOyAgLyogY2hlY2sgdGhhdCBpbnRlcnByZXRlciBoYXMgY29ycmVj
dCB2ZXJzaW9uICovDQogICAgPiArICBpZiAoYXJndlswXSAmJiBhcmd2WzBdWzBdKSBwcm9nbmFt
ZSA9IGFyZ3ZbMF07DQogICAgPiArICBpZiAoYXJncyA9PSBoYXNfZXJyb3IpIHsgIC8qIGJhZCBh
cmc/ICovDQogICAgPiArICAgIHByaW50X3VzYWdlKGFyZ3Zbc2NyaXB0XSk7ICAvKiAnc2NyaXB0
JyBoYXMgaW5kZXggb2YgYmFkIGFyZy4gKi8NCiAgICA+ICsgICAgcmV0dXJuIDA7DQogICAgPiAr
ICB9DQogICAgPiArICBpZiAoYXJncyAmIGhhc192KSAgLyogb3B0aW9uICctdic/ICovDQogICAg
PiArICAgIHByaW50X3ZlcnNpb24oKTsNCiAgICA+ICsgIGlmIChhcmdzICYgaGFzX0UpIHsgIC8q
IG9wdGlvbiAnLUUnPyAqLw0KICAgID4gKyAgICBsdWFfcHVzaGJvb2xlYW4oTCwgMSk7ICAvKiBz
aWduYWwgZm9yIGxpYnJhcmllcyB0byBpZ25vcmUgZW52LiB2YXJzLiAqLw0KICAgID4gKyAgICBs
dWFfc2V0ZmllbGQoTCwgTFVBX1JFR0lTVFJZSU5ERVgsICJMVUFfTk9FTlYiKTsNCiAgICA+ICsg
IH0NCiAgICA+ICsgIGx1YUxfb3BlbmxpYnMoTCk7ICAvKiBvcGVuIHN0YW5kYXJkIGxpYnJhcmll
cyAqLw0KICAgID4gKyAgY3JlYXRlYXJndGFibGUoTCwgYXJndiwgYXJnYywgc2NyaXB0KTsgIC8q
IGNyZWF0ZSB0YWJsZSAnYXJnJyAqLw0KICAgID4gKyAgaWYgKCEoYXJncyAmIGhhc19FKSkgeyAg
Lyogbm8gb3B0aW9uICctRSc/ICovDQogICAgPiArICAgIGlmIChoYW5kbGVfbHVhaW5pdChMKSAh
PSBMVUFfT0spICAvKiBydW4gTFVBX0lOSVQgKi8NCiAgICA+ICsgICAgICByZXR1cm4gMDsgIC8q
IGVycm9yIHJ1bm5pbmcgTFVBX0lOSVQgKi8NCiAgICA+ICsgIH0NCiAgICA+ICsgIGlmICghcnVu
YXJncyhMLCBhcmd2LCBzY3JpcHQpKSAgLyogZXhlY3V0ZSBhcmd1bWVudHMgLWUgYW5kIC1sICov
DQogICAgPiArICAgIHJldHVybiAwOyAgLyogc29tZXRoaW5nIGZhaWxlZCAqLw0KICAgID4gKyAg
aWYgKHNjcmlwdCA8IGFyZ2MgJiYgIC8qIGV4ZWN1dGUgbWFpbiBzY3JpcHQgKGlmIHRoZXJlIGlz
IG9uZSkgKi8NCiAgICA+ICsgICAgICBoYW5kbGVfc2NyaXB0KEwsIGFyZ3YgKyBzY3JpcHQpICE9
IExVQV9PSykNCiAgICA+ICsgICAgcmV0dXJuIDA7DQogICAgPiArICBpZiAoYXJncyAmIGhhc19p
KSAgLyogLWkgb3B0aW9uPyAqLw0KICAgID4gKyAgICBkb1JFUEwoTCk7ICAvKiBkbyByZWFkLWV2
YWwtcHJpbnQgbG9vcCAqLw0KICAgID4gKyAgLyogc2VlIGlmIHNjcmlwdCBpcyBhdmFpbGFibGUg
ZnJvbSBpbml0cmQgKi8NCiAgICA+ICsgIGVsc2UgaWYgKHVrcGxhdF9tZW1yZWdpb25fZmluZF9p
bml0cmQwKCZpbWcpID49IDApIHsNCiAgICA+ICsgICAgY3N0ciA9IChjaGFyICopaW1nLmJhc2U7
DQogICAgPiArICAgIGRvc3RyaW5nKEwsIGNzdHIsICJpbml0cmQiKTsNCiAgICA+ICsgIH0NCiAg
ICA+ICsgIGVsc2UgaWYgKHNjcmlwdCA9PSBhcmdjICYmICEoYXJncyAmIChoYXNfZSB8IGhhc192
KSkpIHsgIC8qIG5vIGFyZ3VtZW50cz8NCiAgICA+ICovDQogICAgPiArICAgIGlmIChsdWFfc3Rk
aW5faXNfdHR5KCkpIHsgIC8qIHJ1bm5pbmcgaW4gaW50ZXJhY3RpdmUgbW9kZT8gKi8NCiAgICA+
ICsgICAgICBwcmludF92ZXJzaW9uKCk7DQogICAgPiArICAgICAgZG9SRVBMKEwpOyAgLyogZG8g
cmVhZC1ldmFsLXByaW50IGxvb3AgKi8NCiAgICA+ICsgICAgfQ0KICAgID4gKyAgICBlbHNlIGRv
ZmlsZShMLCBOVUxMKTsgIC8qIGV4ZWN1dGVzIHN0ZGluIGFzIGEgZmlsZSAqLw0KICAgID4gKyAg
fQ0KICAgID4gKyAgbHVhX3B1c2hib29sZWFuKEwsIDEpOyAgLyogc2lnbmFsIG5vIGVycm9ycyAq
Lw0KICAgID4gKyAgcmV0dXJuIDE7DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKw0KICAgID4g
K2ludCBsdWFfbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7DQogICAgPiArICBpbnQgc3Rh
dHVzLCByZXN1bHQ7DQogICAgPiArICBsdWFfU3RhdGUgKkwgPSBsdWFMX25ld3N0YXRlKCk7ICAv
KiBjcmVhdGUgc3RhdGUgKi8NCiAgICA+ICsgIGlmIChMID09IE5VTEwpIHsNCiAgICA+ICsgICAg
bF9tZXNzYWdlKGFyZ3ZbMF0sICJjYW5ub3QgY3JlYXRlIHN0YXRlOiBub3QgZW5vdWdoIG1lbW9y
eSIpOw0KICAgID4gKyAgICByZXR1cm4gRVhJVF9GQUlMVVJFOw0KICAgID4gKyAgfQ0KICAgID4g
KyAgbHVhX3B1c2hjZnVuY3Rpb24oTCwgJnBtYWluKTsgIC8qIHRvIGNhbGwgJ3BtYWluJyBpbiBw
cm90ZWN0ZWQgbW9kZSAqLw0KICAgID4gKyAgbHVhX3B1c2hpbnRlZ2VyKEwsIGFyZ2MpOyAgLyog
MXN0IGFyZ3VtZW50ICovDQogICAgPiArICBsdWFfcHVzaGxpZ2h0dXNlcmRhdGEoTCwgYXJndik7
IC8qIDJuZCBhcmd1bWVudCAqLw0KICAgID4gKyAgc3RhdHVzID0gbHVhX3BjYWxsKEwsIDIsIDEs
IDApOyAgLyogZG8gdGhlIGNhbGwgKi8NCiAgICA+ICsgIHJlc3VsdCA9IGx1YV90b2Jvb2xlYW4o
TCwgLTEpOyAgLyogZ2V0IHJlc3VsdCAqLw0KICAgID4gKyAgcmVwb3J0KEwsIHN0YXR1cyk7DQog
ICAgPiArICBsdWFfY2xvc2UoTCk7DQogICAgPiArICByZXR1cm4gKHJlc3VsdCAmJiBzdGF0dXMg
PT0gTFVBX09LKSA/IEVYSVRfU1VDQ0VTUyA6IEVYSVRfRkFJTFVSRTsNCiAgICA+ICt9DQogICAg
PiArDQogICAgPiAtLQ0KICAgID4gMi4xMS4wDQogICAgPg0KICAgID4NCiAgICA+IF9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAgPiBNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0DQogICAgPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcN
CiAgICA+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWwNCiAgICBJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMgb2YgdGhpcyBlbWFp
bCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwgYW5kIG1heSBhbHNvIGJlIHBy
aXZpbGVnZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHBsZWFzZSBu
b3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZSBjb250
ZW50cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLCBvciBzdG9y
ZSBvciBjb3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFuayB5b3UuDQogICAg
DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 13:15:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 13:15:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i58ey-000219-SN; Tue, 03 Sep 2019 13:15:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i58ex-00020z-Br
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 13:15:47 +0000
X-Inumbo-ID: ef3792e0-ce4c-11e9-9b57-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ef3792e0-ce4c-11e9-9b57-bc764e2007e4;
 Tue, 03 Sep 2019 13:15:44 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 74BB3F2029;
 Tue,  3 Sep 2019 15:15:43 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ImCQeMpUxppN; Tue,  3 Sep 2019 15:15:43 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 48012F2027;
 Tue,  3 Sep 2019 15:15:39 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 15:15:38 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 15:15:38
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 0/3] support for the lua
 language
Thread-Index: AQHVXbVi/nxZbwkWDEiSXh7wsDBUgKcXuR0AgAI+0wA=
Date: Tue, 3 Sep 2019 13:15:38 +0000
Message-ID: <C9668CE5-082C-43F0-A920-03D76DDD7BE4@neclab.eu>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <DB7PR08MB3082099B9CE6B8C8BE95F80AF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
In-Reply-To: <DB7PR08MB3082099B9CE6B8C8BE95F80AF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <CEA2098FEBCB334885580872E684F0B9@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 0/3] support for the lua
 language
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLCBwbGVhc2Ugc2VlIGlubGluZS4NCg0K77u/T24gMDIuMDkuMTksIDA2OjU4LCAi
SnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkiIDxKdXN0aW4uSGVAYXJtLmNvbT4gd3Jv
dGU6DQoNCiAgICBIaSBGZWxpcGUNCiAgICBCZXNpZGVzLCBJIGZvdW5kIGFub3RoZXIgMiBpc3N1
ZXM6DQogICAgMS4gc29tZSBoZWFkIGZpbGVzIGFyZSBtaXNzaW5nIGFmdGVyIGZldGNoaW5nIHRo
ZSBsaWJsdWEgc3JjIGNvZGVzDQogICAgcm9vdEBqb25nOn4vaGovVUsvYXBwcy9oZWxsb3dvcmxk
IyBsbCAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9pbmNsdWRlLw0K
ICAgIHRvdGFsIDI4DQogICAgZHJ3eHIteHIteCAyIHJvb3Qgcm9vdCA0MDk2IDnmnIggICAyIDEy
OjUyIC4vDQogICAgZHJ3eHIteHIteCA0IHJvb3Qgcm9vdCA0MDk2IDnmnIggICAyIDEyOjUzIC4u
Lw0KICAgIGxyd3hyd3hyd3ggMSByb290IHJvb3QgICA3MSA55pyIICAgMiAxMjo1MiBsYXV4bGli
LmggLT4gL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmlnaW4vbHVh
LTUuMy41L3NyYy9sYXV4bGliLmgNCiAgICBscnd4cnd4cnd4IDEgcm9vdCByb290ICAgNzEgOeac
iCAgIDIgMTI6NTIgbHVhY29uZi5oIC0+IC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWls
ZC9saWJsdWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbHVhY29uZi5oDQogICAgbHJ3eHJ3eHJ3eCAx
IHJvb3Qgcm9vdCAgIDY3IDnmnIggICAyIDEyOjUyIGx1YS5oIC0+IC9yb290L2hqL1VLL2FwcHMv
aGVsbG93b3JsZC9idWlsZC9saWJsdWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbHVhLmgNCiAgICBs
cnd4cnd4cnd4IDEgcm9vdCByb290ICAgNjkgOeaciCAgIDIgMTI6NTIgbHVhLmhwcCAtPiAvcm9v
dC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVhL29yaWdpbi9sdWEtNS4zLjUvc3Jj
L2x1YS5ocHANCiAgICBscnd4cnd4cnd4IDEgcm9vdCByb290ICAgNzAgOeaciCAgIDIgMTI6NTIg
bHVhbGliLmggLT4gL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmln
aW4vbHVhLTUuMy41L3NyYy9sdWFsaWIuaA0KICAgIHJvb3RAam9uZzp+L2hqL1VLL2FwcHMvaGVs
bG93b3JsZCMgbGwgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmln
aW4vbHVhLTUuMy41L3NyYy9sYXV4bGliLmgNCiAgICBsczogY2Fubm90IGFjY2VzcyAnL3Jvb3Qv
aGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmlnaW4vbHVhLTUuMy41L3NyYy9s
YXV4bGliLmgnOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5DQogICAgcm9vdEBqb25nOn4vaGov
VUsvYXBwcy9oZWxsb3dvcmxkIw0KICAgIA0KICAgIEkgZ3Vlc3Mgc29tZXRoaW5nIHdyb25nIGlu
IE1ha2VmaWxlLnVrDQogICAgIyBUT19JTkMNCiAgICBVS19QUkVQQVJFICs9ICQoTElCTFVBX0JV
SUxEKS9pbmNsdWRlL2x1YS5oDQogICAgVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5j
bHVkZS9sdWFjb25mLmgNCiAgICBVS19QUkVQQVJFICs9ICQoTElCTFVBX0JVSUxEKS9pbmNsdWRl
L2x1YWxpYi5oDQogICAgVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sYXV4
bGliLmgNCiAgICBVS19QUkVQQVJFICs9ICQoTElCTFVBX0JVSUxEKS9pbmNsdWRlL2x1YS5ocHAN
CiAgICANClRoaXMgaXMgYWN0dWFsbHkgYSBwcm9ibGVtIG9mIHRoZSBidWlsZCBzeXN0ZW0sIHdl
J3JlIGN1cnJlbnRseSB3b3JraW5nIG9uIGl0LiBBcyBhIHdvcmthcm91bmQsIGluIHlvdXIgYXBw
J3MgTWFrZWZpbGUgcGxlYXNlIHB1dDoNCg0KYWxsOg0KCUBtYWtlIC1DICQoVUtfUk9PVCkgQT0k
KFBXRCkgTD0kKExJQlMpIGZldGNoDQoJQG1ha2UgLUMgJChVS19ST09UKSBBPSQoUFdEKSBMPSQo
TElCUykgcHJlcGFyZQ0KCUBtYWtlIC1DICQoVUtfUk9PVCkgQT0kKFBXRCkgTD0kKExJQlMpDQoN
ClRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIHByZXBhcmUgc3RlcCBydW5zIGJlZm9yZSB0aGUgYWN0
dWFsIG1ha2UsIHdoaWNoIGlzIHdoYXQncyBjYXVzaW5nIHRoZSBlcnJvci4NCg0KDQogICAgMi4g
c2VlbXMgbGlibHVhIGNhbid0IGJlIGJ1aWx0IHdpdGggbm9saWJjIGVuYWJsZWQsIG5vIHNpZ25h
bC5oIGlzIGZvdW5kDQoNClllcywgb25lIG9mIHRoZSBjb21taXRzIHNheXMgaXQsIHRoaXMgbGli
cmFyeSBjYW4ndCBidWlsZCBhZ2FpbnN0IG5vYmxpYyAoYXQgbGVhc3QgZm9yIG5vdyksIGl0IHJl
cXVpcmVzIG5ld2xpYi4NCg0KICAgIA0KICAgIDMsIHdpdGggbmV3bGliIGVuYWJsZWQsIHRoZSBo
ZWxsb3dvcmxkIGFwcCAoYWxtb3N0IGR1bW15IG1haW4oKSkgY2FuJ3QNCiAgICBiZSBsaW5rZWQ6
DQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4
Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19jb2xsYXRlX2Vycic6DQogICAgc2dsaXN0LmM6KC50ZXh0
KzB4Nzg4ZCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KICAgIHNnbGlzdC5jOigu
dGV4dCsweDc4YTUpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0ZScNCiAgICBzZ2xpc3Qu
YzooLnRleHQrMHg3OGJiKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnDQogICAgc2ds
aXN0LmM6KC50ZXh0KzB4NzhlZSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KICAg
IHNnbGlzdC5jOigudGV4dCsweDc5MDQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0ZScN
CiAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2
XzY0Lm86IEluIGZ1bmN0aW9uIGBfY2xvc2Vfcic6DQogICAgc2dsaXN0LmM6KC50ZXh0KzB4ZjIx
OSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGNsb3NlJw0KICAgIC9yb290L2hqL1VLL2FwcHMv
aGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYF9m
c3RhdF9yJzoNCiAgICBzZ2xpc3QuYzooLnRleHQrMHhmM2JjKTogdW5kZWZpbmVkIHJlZmVyZW5j
ZSB0byBgZnN0YXQnDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxv
d29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX21rZGlyX3InOg0KICAgIHNnbGlzdC5j
OigudGV4dCsweGY1MGMpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBta2RpcicNCiAgICAvcm9v
dC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IElu
IGZ1bmN0aW9uIGBfb3Blbl9yJzoNCiAgICBzZ2xpc3QuYzooLnRleHQrMHhmNTUwKTogdW5kZWZp
bmVkIHJlZmVyZW5jZSB0byBgb3BlbicNCiAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQv
YnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfcmVhZF9yJzoNCiAg
ICBzZ2xpc3QuYzooLnRleHQrMHhmNThmKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcmVhZCcN
CiAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2
XzY0Lm86IEluIGZ1bmN0aW9uIGBfc3RhdF9yJzoNCiAgICBzZ2xpc3QuYzooLnRleHQrMHhmNjdk
KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgc3RhdCcNCiAgICAvcm9vdC9oai9VSy9hcHBzL2hl
bGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfdW5s
aW5rX3InOg0KICAgIHNnbGlzdC5jOigudGV4dCsweGY2Y2EpOiB1bmRlZmluZWQgcmVmZXJlbmNl
IHRvIGB1bmxpbmsnDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxv
d29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX3dyaXRlX3InOg0KICAgIHNnbGlzdC5j
OigudGV4dCsweGY3MGYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0ZScNCiAgICAvcm9v
dC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IElu
IGZ1bmN0aW9uIGBmbHVzaF9tZXRhJzoNCiAgICBoYXNoLmM6KC50ZXh0KzB4MTA0MGMpOiB1bmRl
ZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0ZScNCiAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29y
bGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBoZGVzdHJveSc6
DQogICAgaGFzaC5jOigudGV4dCsweDEwNWFkKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY2xv
c2UnDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3Zt
LXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19oYXNoX29wZW4nOg0KICAgIHNnbGlzdC5jOigudGV4
dCsweDEwZjI4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgc3RhdCcNCiAgICBzZ2xpc3QuYzoo
LnRleHQrMHgxMGY2Mik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG9wZW4nDQogICAgc2dsaXN0
LmM6KC50ZXh0KzB4MTBmOWEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBmc3RhdCcNCiAgICBz
Z2xpc3QuYzooLnRleHQrMHgxMTA0Yik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHN0YXQnDQog
ICAgc2dsaXN0LmM6KC50ZXh0KzB4MTEyMDYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGByZWFk
Jw0KICAgIHNnbGlzdC5jOigudGV4dCsweDExNjlkKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBg
Y2xvc2UnDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRf
a3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19nZXRfcGFnZSc6DQogICAgc2dsaXN0LmM6KC50
ZXh0KzB4MTMwNGUpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGByZWFkJw0KICAgIC9yb290L2hq
L1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVu
Y3Rpb24gYF9fcHV0X3BhZ2UnOg0KICAgIHNnbGlzdC5jOigudGV4dCsweDEzMmFlKTogdW5kZWZp
bmVkIHJlZmVyZW5jZSB0byBgdW5saW5rJw0KICAgIHNnbGlzdC5jOigudGV4dCsweDEzM2ZhKTog
dW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxs
b3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19hZGRf
b3ZmbHBhZ2UnOg0KICAgIHNnbGlzdC5jOigudGV4dCsweDEzNmFiKTogdW5kZWZpbmVkIHJlZmVy
ZW5jZSB0byBgd3JpdGUnDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hl
bGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgcG1haW4nOg0KICAgIGx1YS5jOigu
dGV4dCsweDY3YTk3KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgdWtwbGF0X21lbXJlZ2lvbl9m
aW5kX2luaXRyZDAnDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxv
d29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgbHVhRF90aHJvdyc6DQogICAgbGluaXQu
YzooLnRleHQrMHg2Y2JkMCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGxvbmdqbXAnDQogICAg
L3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5v
OiBJbiBmdW5jdGlvbiBgbHVhRF9yYXdydW5wcm90ZWN0ZWQnOg0KICAgIGxpbml0LmM6KC50ZXh0
KzB4NmNkY2UpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzZXRqbXAnDQogICAgL3Jvb3QvaGov
VUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5j
dGlvbiBgb3NfZXhlY3V0ZSc6DQogICAgbG9zbGliLmM6KC50ZXh0KzB4ODJmMGYpOiB1bmRlZmlu
ZWQgcmVmZXJlbmNlIHRvIGBzeXN0ZW0nDQogICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxk
L2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgbWFpbic6DQogICAg
c2dsaXN0LmM6KC50ZXh0LnN0YXJ0dXArMHg3Nyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGx1
YUxfb3BlbmxpYnMnDQogICAgc2dsaXN0LmM6KC50ZXh0LnN0YXJ0dXArMHhjOCk6IHVuZGVmaW5l
ZCByZWZlcmVuY2UgdG8gYGx1YUxfbG9hZGJ1ZmZlcngnDQogICAgDQpUaGlzIGlzIHN0cmFuZ2Uu
IE1vc3Qgb2YgdGhlIHN5bWJvbHMgYXJlIG5ld2xpYiBvbmVzLCBkaWQgeW91IGRvIGEgcHJvcGVy
Y2xlYW47IG1ha2UgYW5kIHlvdSBzdGlsbCBnZXQgdGhlc2UgZXJyb3JzPyBJIGFzayBiZWNhc2Ug
SSBoYXZlIGFsbCBvZiB0aG9zZSBzeW1ib2xzIGluIG15IGZpbmFsIGltYWdlLi4uDQoNCg0KICAg
IC0tDQogICAgQ2hlZXJzLA0KICAgIEp1c3RpbiAoSmlhIEhlKQ0KICAgIA0KICAgIA0KICAgIA0K
ICAgID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCiAgICA+IEZyb206IE1pbmlvcy1kZXZl
bCA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc+IE9uIEJlaGFsZg0K
ICAgID4gT2YgRmVsaXBlIEh1aWNpDQogICAgPiBTZW50OiAyMDE55bm0OOaciDI45pelIDIzOjI5
DQogICAgPiBUbzogbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcNCiAgICA+IENjOiBGZWxpcGUg
SHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQogICAgPiBTdWJqZWN0OiBbTWluaW9zLWRl
dmVsXSBbVU5JS1JBRlQvTElCTFVBIFBBVENIIDAvM10gc3VwcG9ydCBmb3IgdGhlIGx1YQ0KICAg
ID4gbGFuZ3VhZ2UNCiAgICA+DQogICAgPiBUaGlzIGlzIG91ciBpbnRpYWwgcG9ydCBvZiB0aGUg
bHVhIGxhbmd1YWdlIHRvIFVuaWtyYWZ0LiBGb3Igbm93IGl0IHN1cHBvcnRzDQogICAgPiBpbnRl
cmFjdGl2ZSBtb2RlLCBydW5uaW5nIGEgc3RyaW5nIChpLmUuLCBhIHNjcmlwdCkgIGFuZCBydW5u
aW5nIGEgc2NyaXB0DQogICAgPiBmcm9tIGEgZmlsZSBwcm92aWRlZCB2aWEgaW5pdHJkLg0KICAg
ID4NCiAgICA+IEZlbGlwZSBIdWljaSAoMyk6DQogICAgPiAgIEludHJvZHVjZSBsaWJyYXJ5IHNr
ZWxldG9uDQogICAgPiAgIEFkZCBNYWtlZmlsZS51ayBhbmQgbWFpbiBsb29wIGdsdWUgY29kZQ0K
ICAgID4gICBFeHBvcnQgc3ltYm9scw0KICAgID4NCiAgICA+ICAuZ2l0aWdub3JlICAgICAgfCAg
MjcgKysrDQogICAgPiAgQ09ESU5HX1NUWUxFLm1kIHwgICA0ICsNCiAgICA+ICBDT05UUklCVVRJ
TkcubWQgfCAgIDQgKw0KICAgID4gIENPUFlJTkcubWQgICAgICB8ICAzOSArKysrDQogICAgPiAg
Q29uZmlnLnVrICAgICAgIHwgICA0ICsNCiAgICA+ICBNQUlOVEFJTkVSUy5tZCAgfCAgMTEgKw0K
ICAgID4gIE1ha2VmaWxlLnVrICAgICB8IDEwMCArKysrKysrKysNCiAgICA+ICBSRUFETUUubWQg
ICAgICAgfCAgIDkgKw0KICAgID4gIGV4cG9ydHN5bXMudWsgICB8ICA5MyArKysrKysrKysNCiAg
ICA+ICBsdWEuYyAgICAgICAgICAgfCA2MjANCiAgICA+ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogICAgPiAgMTAgZmlsZXMgY2hhbmdl
ZCwgOTExIGluc2VydGlvbnMoKykNCiAgICA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgLmdpdGlnbm9y
ZQ0KICAgID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQNCiAgICA+ICBjcmVh
dGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kDQogICAgPiAgY3JlYXRlIG1vZGUgMTAwNjQ0
IENPUFlJTkcubWQNCiAgICA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrDQogICAgPiAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kDQogICAgPiAgY3JlYXRlIG1vZGUgMTAw
NjQ0IE1ha2VmaWxlLnVrDQogICAgPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5tZA0KICAg
ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrDQogICAgPiAgY3JlYXRlIG1vZGUg
MTAwNjQ0IGx1YS5jDQogICAgPg0KICAgID4gLS0NCiAgICA+IDIuMTEuMA0KICAgID4NCiAgICA+
DQogICAgPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K
ICAgID4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgID4gTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnDQogICAgPiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQogICAgSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRl
bnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFu
ZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVj
aXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBk
aXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkg
cHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4g
VGhhbmsgeW91Lg0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 13:25:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 13:25:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i58oB-0002uB-Gt; Tue, 03 Sep 2019 13:25:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i58o9-0002u6-Lr
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 13:25:17 +0000
X-Inumbo-ID: 43dc3278-ce4e-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 43dc3278-ce4e-11e9-b299-bc764e2007e4;
 Tue, 03 Sep 2019 13:25:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id F3E04105643;
 Tue,  3 Sep 2019 15:25:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id SqAaom_pUgpI; Tue,  3 Sep 2019 15:25:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id C6D9210563C;
 Tue,  3 Sep 2019 15:25:14 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 15:25:14 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 15:25:14
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH] lib/devfs: device_create(): Return NULL on
 errors
Thread-Index: AQHVXmxHi/AcFQsCtECI6N0hCf7+I6cZ+S+A
Date: Tue, 3 Sep 2019 13:25:14 +0000
Message-ID: <E774BFAC-7F17-45DC-B108-BBA1722B69FE@neclab.eu>
References: <20190829131838.2790-1-simon.kuenzer@neclab.eu>
In-Reply-To: <20190829131838.2790-1-simon.kuenzer@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <0158BF559DCE404C8C95CAFAC4FDD857@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/devfs: device_create():
 Return NULL on errors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sIHRoaXMgbG9va3MgZ29vZCB0aGFua3MuDQoNClJldmlld2VkLWJ5OiBGZWxpcGUg
SHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQoNCu+7v09uIDI5LjA4LjE5LCAxNToxOCwg
IlNpbW9uIEt1ZW56ZXIiIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBJ
bnN0ZWFkIG9mIGNyYXNoaW5nIHRoZSBzeXN0ZW0sIHJldHVybiBOVUxMIG9uIGRldmljZV9jcmVh
dGUoKS4NCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVu
emVyQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAgICAgbGliL2RldmZzL2RldmljZS5jIHwgNyArKysr
Ky0tDQogICAgIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p
DQogICAgDQogICAgZGlmZiAtLWdpdCBhL2xpYi9kZXZmcy9kZXZpY2UuYyBiL2xpYi9kZXZmcy9k
ZXZpY2UuYw0KICAgIGluZGV4IDA0NDA3M2E0Li5kNjdhZWU0YSAxMDA2NDQNCiAgICAtLS0gYS9s
aWIvZGV2ZnMvZGV2aWNlLmMNCiAgICArKysgYi9saWIvZGV2ZnMvZGV2aWNlLmMNCiAgICBAQCAt
MTU1LDggKzE1NSwxMSBAQCBkZXZpY2VfY3JlYXRlKHN0cnVjdCBkcml2ZXIgKmRydiwgY29uc3Qg
Y2hhciAqbmFtZSwgaW50IGZsYWdzKQ0KICAgICAJLyoNCiAgICAgCSAqIEFsbG9jYXRlIGEgZGV2
aWNlIHN0cnVjdHVyZS4NCiAgICAgCSAqLw0KICAgIC0JaWYgKChkZXYgPSBtYWxsb2Moc2l6ZW9m
KHN0cnVjdCBkZXZpY2UpKSkgPT0gTlVMTCkNCiAgICAtCQlVS19DUkFTSCgiZGV2aWNlX2NyZWF0
ZSIpOw0KICAgICsJZGV2ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2aWNlKSk7DQogICAgKwlp
ZiAoIWRldikgew0KICAgICsJCXVrX3ByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIGRldmljZSBt
ZW1vcnksIGNyZWF0aW9uIGZhaWxlZFxuIik7DQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwl9
DQogICAgIA0KICAgICAJZGV2LT5kcml2ZXIgPSBkcnY7DQogICAgIAlkZXZpY2VfcmVnaXN0ZXIo
ZGV2LCBuYW1lLCBmbGFncyk7DQogICAgLS0gDQogICAgMi4yMC4xDQogICAgDQogICAgDQoNCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 14:01:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 14:01:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i59Ms-0006Kj-EA; Tue, 03 Sep 2019 14:01:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i59Mr-0006Kc-CK
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 14:01:09 +0000
X-Inumbo-ID: 465f8234-ce53-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 465f8234-ce53-11e9-b76c-bc764e2007e4;
 Tue, 03 Sep 2019 14:01:07 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id A6832F202A;
 Tue,  3 Sep 2019 16:01:06 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id NkzL_S9sjY8b; Tue,  3 Sep 2019 16:01:06 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 7F23FF2027;
 Tue,  3 Sep 2019 16:01:02 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 16:01:02 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 16:01:02
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH 2/2] Revisit pty.c functions
Thread-Index: AQHVYZKuJXq3xh63cECJnosOIbevQqcZ/OOA
Date: Tue, 3 Sep 2019 14:01:02 +0000
Message-ID: <1577D159-D135-4B15-BBCC-E92D1D5AFCE7@neclab.eu>
References: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
 <20190902133103.1990-3-costin.lupu@cs.pub.ro>
In-Reply-To: <20190902133103.1990-3-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <5B29ECE90635E140858AECD9F695D0EF@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 2/2] Revisit pty.c
 functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLCB0aGlzIHBhdGNoIGxvb2tzIGdvb2QuDQoNClJldmlld2VkLWJ5OiBGZWxpcGUg
SHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQoNCu+7v09uIDAyLjA5LjE5LCAxNTozMSwg
IkNvc3RpbiBMdXB1IiA8Y29zdGluLmx1cHVAY3MucHViLnJvPiB3cm90ZToNCg0KICAgIEFjdHVh
bGx5IHRoZSBvcGVucHR5KCkgYW5kIGZvcmtwdHkoKSBzdHVicyBzaG91bGQgcmV0dXJuIGVycm9y
cywgYmVjYXVzZQ0KICAgIG90aGVyd2lzZSB0aGUgY2FsbGVlIHdpbGwgdHJ5IHRvIHVzZSB0aGUg
YW1hc3RlciBhbmQgYXNsYXZlIGZpbGUgZGVzY3JpcHRvcnMNCiAgICByZXR1cm5lZCBieSB0aGUg
ZnVuY3Rpb25zLg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4u
bHVwdUBjcy5wdWIucm8+DQogICAgLS0tDQogICAgIHB0eS5jIHwgMTEgKysrKysrKy0tLS0NCiAg
ICAgMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkNCiAgICAN
CiAgICBkaWZmIC0tZ2l0IGEvcHR5LmMgYi9wdHkuYw0KICAgIGluZGV4IDAwOTY4OGQuLjA3MzQ2
ZGUgMTAwNjQ0DQogICAgLS0tIGEvcHR5LmMNCiAgICArKysgYi9wdHkuYw0KICAgIEBAIC0zNSwy
MCArMzUsMjMgQEANCiAgICAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1Ig
TU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICAgICovDQogICAgIA0KICAgIC0jaW5jbHVkZSA8cHR5
Lmg+DQogICAgLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAgICAgI2luY2x1ZGUgPHVrL2Vzc2Vu
dGlhbHMuaD4NCiAgICArI2luY2x1ZGUgPGVycm5vLmg+DQogICAgKyNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4NCiAgICArI2luY2x1ZGUgPHB0eS5oPg0KICAgICANCiAgICAgaW50IG9wZW5wdHkoaW50
ICphbWFzdGVyIF9fdW51c2VkLCBpbnQgKmFzbGF2ZSBfX3VudXNlZCwgY2hhciAqbmFtZSBfX3Vu
dXNlZCwNCiAgICAgCQljb25zdCBzdHJ1Y3QgdGVybWlvcyAqdGVybXAgX191bnVzZWQsDQogICAg
IAkJY29uc3Qgc3RydWN0IHdpbnNpemUgKndpbnAgX191bnVzZWQpDQogICAgIHsNCiAgICAtCXJl
dHVybiAwOw0KICAgICsJZXJybm8gPSBFTk9FTlQ7DQogICAgKwlyZXR1cm4gLTE7DQogICAgIH0N
CiAgICAgDQogICAgIHBpZF90IGZvcmtwdHkoaW50ICphbWFzdGVyIF9fdW51c2VkLCBjaGFyICpu
YW1lIF9fdW51c2VkLA0KICAgICAJCWNvbnN0IHN0cnVjdCB0ZXJtaW9zICp0ZXJtcCBfX3VudXNl
ZCwNCiAgICAgCQljb25zdCBzdHJ1Y3Qgd2luc2l6ZSAqd2lucCBfX3VudXNlZCkNCiAgICAgew0K
ICAgIC0JcmV0dXJuIDA7DQogICAgKwllcnJubyA9IEVOT0VOVDsNCiAgICArCXJldHVybiAtMTsN
CiAgICAgfQ0KICAgIC0tIA0KICAgIDIuMjAuMQ0KICAgIA0KICAgIA0KDQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 14:02:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 14:02:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i59O5-0006R3-0y; Tue, 03 Sep 2019 14:02:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i59O3-0006Qq-Sa
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 14:02:23 +0000
X-Inumbo-ID: 728348d2-ce53-11e9-ab94-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 728348d2-ce53-11e9-ab94-12813bfff9fa;
 Tue, 03 Sep 2019 14:02:21 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CD0DBF202A;
 Tue,  3 Sep 2019 16:02:20 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 5OUPQGX6bpth; Tue,  3 Sep 2019 16:02:20 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 95069F2027;
 Tue,  3 Sep 2019 16:02:16 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 16:02:16 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 16:02:16
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH 1/2] Revisit process.c functions
Thread-Index: AQHVYZKuGAx1iPh90EmOdwT7aKSqy6cZ/TuA
Date: Tue, 3 Sep 2019 14:02:16 +0000
Message-ID: <AA31BA62-2EF6-46E4-9C9B-0C81693111EE@neclab.eu>
References: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
 <20190902133103.1990-2-costin.lupu@cs.pub.ro>
In-Reply-To: <20190902133103.1990-2-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <7C79AE36A79A5F4A84C72479E37533E0@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/2] Revisit process.c
 functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLCBwbGVhc2Ugc2VlIGEgc2luZ2xlIGNvbW1lbnQgaW5saW5lLCBhdCB0aGUgYm90
dG9tLg0KDQotLSBGZWxpcGUNCg0K77u/T24gMDIuMDkuMTksIDE1OjMxLCAiQ29zdGluIEx1cHUi
IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+IHdyb3RlOg0KDQogICAgVGhpcyBwYXRjaCByZXZpc2l0
cyB0aGUgZnVuY3Rpb25zIGluIHByb2Nlc3MuYywgcmVkaXN0cmlidXRlcyBzb21lIG9mIHRoZW0g
YW5kDQogICAgaW1wbGVtZW50IHRoZSBvdGhlcnMuIFRoZSByZW1haW5pbmcgZnVuY3Rpb25zIG1h
eSB2ZXJ5IHdlbGwgYmUgbW92ZWQgaW50byBhbg0KICAgIGludGVybmFsICJwcm9jZXNzIiByZWxh
dGVkIGxpYnJhcnksIGJ1dCB3ZSB3aWxsIGRvIHRoaXMgYXQgYW5vdGhlciB0aW1lLiBJdCdzDQog
ICAgd29ydGggc2F5aW5nIHRoYXQgd2Ugc2V0IHRoZSBQSUQgb2YgdGhlIHVuaWtlcm5lbCB0byAx
LCBzYXZpbmcgdGhlIFBJRCAwIGZvciBpdHMNCiAgICAicGFyZW50IiwgYW4gaW52aXNpYmlsZSBw
cm9jZXNzIHRoYXQgaXMgYWxzbyBub3Qgc2hvd24gb24gTGludXguDQogICAgDQogICAgUmVkaXN0
cmlidXRlZCBmdW5jdGlvbnM6DQogICAgLSBraWxsKCkgYW5kIGtpbGxwZygpIGFyZSBtb3ZlZCB0
byBzaWduYWwuYw0KICAgIC0gdGltZXMoKSBpcyBtb3ZlZCB0byB0aW1lLmMNCiAgICANCiAgICBT
aWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgIC0t
LQ0KICAgICBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyArKysrKysrKysrKw0KICAgICBwcm9j
ZXNzLmMgICAgICAgICAgICB8IDE2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t
LS0tLS0tLS0tDQogICAgIHNpZ25hbC5jICAgICAgICAgICAgIHwgIDE4ICsrKysrDQogICAgIHRp
bWUuYyAgICAgICAgICAgICAgIHwgICA1ICsrDQogICAgIDQgZmlsZXMgY2hhbmdlZCwgMTgxIGlu
c2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j
bHVkZS91ay9wcm9jZXNzLmgNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9wcm9j
ZXNzLmggYi9pbmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uNjcyMDhlMw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9p
bmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIEBAIC0wLDAgKzEsNDMgQEANCiAgICArLyogU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLw0KICAgICsvKg0KICAgICsgKiBBdXRo
b3JzOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgICsgKg0KICAgICsg
KiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0
LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAgICsgKg0KICAgICsgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAgICAr
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zDQogICAgKyAqIGFyZSBtZXQ6DQogICAgKyAqDQogICAgKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
DQogICAgKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4NCiAgICArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICArICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQ0KICAgICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzDQogICAgKyAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tDQogICAgKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgKyAqDQogICAgKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIg0KICAgICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICAgKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
DQogICAgKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUNCiAgICArICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KICAgICsgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRg0KICAgICsgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCiAgICArICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4NCiAgICArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCiAgICArICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCiAg
ICArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgKyAqDQogICAgKyAqIFRISVMg
SEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuDQogICAg
KyAqLw0KICAgICsNCiAgICArI2lmbmRlZiBfX1VLX1BST0NFU1NfSF9fDQogICAgKyNkZWZpbmUg
X19VS19QUk9DRVNTX0hfXw0KICAgICsNCiAgICArI2RlZmluZSBVTklLUkFGVF9QSUQgICAgICAx
DQogICAgKyNkZWZpbmUgVU5JS1JBRlRfUFBJRCAgICAgMA0KICAgICsjZGVmaW5lIFVOSUtSQUZU
X1NJRCAgICAgIDANCiAgICArI2RlZmluZSBVTklLUkFGVF9QR0lEICAgICAwDQogICAgKw0KICAg
ICsjZW5kaWYgLyogX19VS19QUk9DRVNTX0hfXyAqLw0KICAgIGRpZmYgLS1naXQgYS9wcm9jZXNz
LmMgYi9wcm9jZXNzLmMNCiAgICBpbmRleCBjNGUzNjY0Li5lMjYxMTBkIDEwMDY0NA0KICAgIC0t
LSBhL3Byb2Nlc3MuYw0KICAgICsrKyBiL3Byb2Nlc3MuYw0KICAgIEBAIC0zLDcgKzMsNyBAQA0K
ICAgICAgKiBsaWJuZXdsaWIgZ2x1ZSBjb2RlDQogICAgICAqDQogICAgICAqIEF1dGhvcnM6IEZl
bGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCiAgICAtICoNCiAgICArICogICAg
ICAgICAgQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAgICAgICoNCiAgICAg
ICogQ29weXJpZ2h0IChjKSAyMDE3LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgICAgICoNCiAgICBAQCAtMzUsMTM0ICszNSwxOTkgQEAN
CiAgICAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4g
QU5ZIFdBWS4NCiAgICAgICovDQogICAgIA0KICAgIC0jaW5jbHVkZSA8dGltZS5oPg0KICAgICAj
aW5jbHVkZSA8ZXJybm8uaD4NCiAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICAjaW5jbHVk
ZSA8c3RkaW8uaD4NCiAgICAgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPg0KICAgICsjaW5jbHVk
ZSA8dWsvcHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8dWsvcHJpbnQuaD4NCiAgICAgI3VuZGVm
IGVycm5vDQogICAgIGV4dGVybiBpbnQgZXJybm87DQogICAgIA0KICAgIC1pbnQgZXhlY3ZlKGNo
YXIgKm5hbWUgX191bnVzZWQsIGNoYXIgKiphcmd2IF9fdW51c2VkLCBjaGFyICoqZW52IF9fdW51
c2VkKQ0KICAgICsNCiAgICAraW50IGZvcmsodm9pZCkNCiAgICAgew0KICAgIC0JZXJybm8gPSBF
Tk9NRU07DQogICAgKwkvKiBmb3JrKCkgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3Jt
ICovDQogICAgKwllcnJubyA9IEVOT1NZUzsNCiAgICAgCXJldHVybiAtMTsNCiAgICAgfQ0KICAg
ICANCiAgICAtaW50IGV4ZWN2KGNvbnN0IGNoYXIgKnBhdGggX191bnVzZWQsIGNoYXIgKmNvbnN0
IGFyZ3ZbXSBfX3VudXNlZCkNCiAgICArc3RhdGljDQogICAgK3ZvaWQgZXhlY193YXJuKGNvbnN0
IGNoYXIgKmZ1bmMsDQogICAgKwkJY29uc3QgY2hhciAqcGF0aCwgY2hhciAqY29uc3QgYXJndltd
LCBjaGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQog
ICAgKwlpbnQgaTsNCiAgICAgDQogICAgLWludCBzeXN0ZW0oY29uc3QgY2hhciAqY29tbWFuZCBf
X3VudXNlZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICArCXVrX3ByX3dh
cm4oIiVzKCk6IHBhdGg9JXMiLCBmdW5jLCBwYXRoKTsNCiAgICAgDQogICAgLUZJTEUgKnBvcGVu
KGNvbnN0IGNoYXIgKmNvbW1hbmQgX191bnVzZWQsIGNvbnN0IGNoYXIgKnR5cGUgX191bnVzZWQp
DQogICAgLXsNCiAgICAtCXJldHVybiBOVUxMOw0KICAgIC19DQogICAgKwkvKiBwcmludCBhcmd1
bWVudHMgKi8NCiAgICArCWkgPSAwOw0KICAgICsJdWtfcHJfd2FybigiIGFyZ3Y9WyIpOw0KICAg
ICsJd2hpbGUgKGFyZ3ZbaV0pIHsNCiAgICArCQl1a19wcl93YXJuKCIlcyVzIiwgKGkgPiAwID8g
IiwgIiA6ICIiKSwgYXJndltpXSk7DQogICAgKwkJaSsrOw0KICAgICsJfQ0KICAgICsJdWtfcHJf
d2FybigiXSIpOw0KICAgICANCiAgICAtaW50IHBjbG9zZShGSUxFICpzdHJlYW0gX191bnVzZWQp
DQogICAgLXsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogcHJpbnQgZW52aXJvbm1lbnQgdmFy
aWFibGVzICovDQogICAgKwlpZiAoZW52cCkgew0KICAgICsJCWkgPSAwOw0KICAgICsJCXVrX3By
X3dhcm4oIiBlbnZwPVsiKTsNCiAgICArCQl3aGlsZSAoZW52cFtpXSkgew0KICAgICsJCQl1a19w
cl93YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwgZW52cFtpXSk7DQogICAgKwkJCWkr
KzsNCiAgICArCQl9DQogICAgKwkJdWtfcHJfd2FybigiXSIpOw0KICAgICsJfQ0KICAgICsNCiAg
ICArCXVrX3ByX3dhcm4oIlxuIik7DQogICAgIH0NCiAgICAgDQogICAgLWludCBmb3JrKHZvaWQp
DQogICAgK2ludCBleGVjdmUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqY29uc3QgYXJndltdLCBj
aGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAtCWVycm5vID0gRUFHQUlOOw0KICAgICsJ
ZXhlY193YXJuKF9fZnVuY19fLCBwYXRoLCBhcmd2LCBlbnZwKTsNCiAgICArCWVycm5vID0gRU5P
U1lTOw0KICAgICAJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1pbnQgZ2V0cGlkKHZv
aWQpDQogICAgK2ludCBleGVjdihjb25zdCBjaGFyICpwYXRoLCBjaGFyICpjb25zdCBhcmd2W10p
DQogICAgIHsNCiAgICAtCXJldHVybiAxOw0KICAgICsJZXhlY193YXJuKF9fZnVuY19fLCBwYXRo
LCBhcmd2LCBOVUxMKTsNCiAgICArCWVycm5vID0gRU5PU1lTOw0KICAgICsJcmV0dXJuIC0xOw0K
ICAgICB9DQogICAgIA0KICAgIC1waWRfdCBnZXRwcGlkKHZvaWQpDQogICAgK2ludCBzeXN0ZW0o
Y29uc3QgY2hhciAqY29tbWFuZCkNCiAgICAgew0KICAgIC0JcmV0dXJuIDA7DQogICAgKwl1a19w
cl93YXJuKCIlczogJXNcbiIsIF9fZnVuY19fLCBjb21tYW5kKTsNCiAgICArCWVycm5vID0gRU5P
U1lTOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1pbnQga2lsbChpbnQg
cGlkIF9fdW51c2VkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAgICtGSUxFICpwb3Blbihjb25zdCBj
aGFyICpjb21tYW5kLCBjb25zdCBjaGFyICp0eXBlIF9fdW51c2VkKQ0KICAgICB7DQogICAgLQll
cnJubyA9IEVJTlZBTDsNCiAgICAtCXJldHVybiAtMTsNCiAgICArCXVrX3ByX3dhcm4oIiVzOiAl
c1xuIiwgX19mdW5jX18sIGNvbW1hbmQpOw0KICAgICsJZXJybm8gPSBFTk9TWVM7DQogICAgKwly
ZXR1cm4gTlVMTDsNCiAgICAgfQ0KICAgICANCiAgICAtaW50IHRpbWVzKHN0cnVjdCB0bSAqYnVm
IF9fdW51c2VkKQ0KICAgICtpbnQgcGNsb3NlKEZJTEUgKnN0cmVhbSBfX3VudXNlZCkNCiAgICAg
ew0KICAgICsJZXJybm8gPSBFSU5WQUw7DQogICAgIAlyZXR1cm4gLTE7DQogICAgIH0NCiAgICAg
DQogICAgIGludCB3YWl0KGludCAqc3RhdHVzIF9fdW51c2VkKQ0KICAgICB7DQogICAgKwkvKiBO
byBjaGlsZHJlbiAqLw0KICAgICAJZXJybm8gPSBFQ0hJTEQ7DQogICAgIAlyZXR1cm4gLTE7DQog
ICAgIH0NCiAgICAgDQogICAgLWludCBzZXRwZ3JwKHZvaWQpDQogICAgLXsNCiAgICAtCXJldHVy
biAwOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtaW50IGtpbGxwZyhpbnQgcGdycCBfX3Vu
dXNlZCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQgX191
bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9wdGlvbnMgX191bnVzZWQpDQogICAg
IHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogTm8gY2hpbGRyZW4gKi8NCiAgICArCWVycm5v
ID0gRUNISUxEOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC0NCiAgICAg
cGlkX3Qgd2FpdDMoaW50ICp3c3RhdHVzIF9fdW51c2VkLCBpbnQgb3B0aW9ucyBfX3VudXNlZCwN
CiAgICAgCQlzdHJ1Y3QgcnVzYWdlICpydXNhZ2UgX191bnVzZWQpDQogICAgIHsNCiAgICAtCXJl
dHVybiAwOw0KICAgICsJLyogTm8gY2hpbGRyZW4gKi8NCiAgICArCWVycm5vID0gRUNISUxEOw0K
ICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgICBwaWRfdCB3YWl0NChwaWRfdCBw
aWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9wdGlvbnMgX191bnVzZWQs
DQogICAgIAkJc3RydWN0IHJ1c2FnZSAqcnVzYWdlIF9fdW51c2VkKQ0KICAgICB7DQogICAgLQly
ZXR1cm4gMDsNCiAgICArCS8qIE5vIGNoaWxkcmVuICovDQogICAgKwllcnJubyA9IEVDSElMRDsN
CiAgICArCXJldHVybiAtMTsNCiAgICAgfQ0KICAgICANCiAgICAtcGlkX3Qgd2FpdHBpZChwaWRf
dCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9wdGlvbnMgX191bnVz
ZWQpDQogICAgK2ludCBnZXRwaWQodm9pZCkNCiAgICAgew0KICAgIC0JcmV0dXJuIDA7DQogICAg
KwlyZXR1cm4gVU5JS1JBRlRfUElEOw0KICAgICt9DQogICAgKw0KICAgICtwaWRfdCBnZXRwcGlk
KHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiBVTklLUkFGVF9QUElEOw0KICAgICB9DQogICAg
IA0KICAgICBwaWRfdCBzZXRzaWQodm9pZCkNCiAgICAgew0KICAgIC0JcmV0dXJuIDA7DQogICAg
KwkvKiBXZSBoYXZlIGEgc2luZ2xlICJzZXNzaW9uIiB3aXRoIGEgc2luZ2xlICJwcm9jZXNzIiAq
Lw0KICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVybiAocGlkX3QpIC0xOw0KICAgICB9
DQogICAgIA0KICAgIC1waWRfdCBnZXRzaWQocGlkX3QgcGlkIF9fdW51c2VkKQ0KICAgICtwaWRf
dCBnZXRzaWQocGlkX3QgcGlkKQ0KICAgICB7DQogICAgLQlyZXR1cm4gMDsNCiAgICArCWlmIChw
aWQgIT0gMCkgew0KICAgICsJCS8qIFdlIHN1cHBvcnQgb25seSBjYWxscyBmb3IgdGhlIG9ubHkg
Y2FsbGluZyAicHJvY2VzcyIgKi8NCiAgICArCQllcnJubyA9IEVTUkNIOw0KICAgICsJCXJldHVy
biAocGlkX3QpIC0xOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIFVOSUtSQUZUX1NJRDsNCiAgICAg
fQ0KICAgICANCiAgICAtaW50IHNldHBnaWQocGlkX3QgcGlkIF9fdW51c2VkLCBwaWRfdCBwZ2lk
IF9fdW51c2VkKQ0KICAgICtpbnQgc2V0cGdpZChwaWRfdCBwaWQsIHBpZF90IHBnaWQpDQogICAg
IHsNCiAgICArCWlmIChwaWQgIT0gMCkgew0KICAgICsJCS8qIFdlIHN1cHBvcnQgb25seSBjYWxs
cyBmb3IgdGhlIG9ubHkgY2FsbGluZyAicHJvY2VzcyIgKi8NCiAgICArCQllcnJubyA9IEVTUkNI
Ow0KICAgICsJCXJldHVybiAocGlkX3QpIC0xOw0KICAgICsJfQ0KICAgICsJaWYgKHBnaWQgIT0g
MCkgew0KICAgICsJCS8qIFdlIGhhdmUgYSBzaW5nbGUgImdyb3VwIiB3aXRoIGEgc2luZ2xlICJw
cm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0gRVBFUk07DQogICAgKwkJcmV0dXJuIChwaWRfdCkg
LTE7DQogICAgKwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICANCiAgICAgcGlkX3Qg
Z2V0cGdpZChwaWRfdCBwaWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJaWYgKHBp
ZCAhPSAwKSB7DQogICAgKwkJLyogV2Ugc3VwcG9ydCBvbmx5IGNhbGxzIGZvciB0aGUgb25seSBj
YWxsaW5nICJwcm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0gRVNSQ0g7DQogICAgKwkJcmV0dXJu
IChwaWRfdCkgLTE7DQogICAgKwl9DQogICAgKwlyZXR1cm4gVU5JS1JBRlRfUEdJRDsNCiAgICAg
fQ0KICAgICANCiAgICArcGlkX3QgZ2V0cGdycCh2b2lkKQ0KICAgICt7DQogICAgKwlyZXR1cm4g
VU5JS1JBRlRfUEdJRDsNCiAgICArfQ0KICAgICANCiAgICAtaW50IHRjc2V0cGdycChpbnQgZmQg
X191bnVzZWQsIHBpZF90IHBncnAgX191bnVzZWQpDQogICAgK2ludCBzZXRwZ3JwKHZvaWQpDQog
ICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJcmV0dXJuIHNldHBnaWQoMCwgMCk7DQogICAg
IH0NCiAgICAgDQogICAgLXBpZF90IHRjZ2V0cGdycChpbnQgZmQgX191bnVzZWQpDQogICAgK2lu
dCB0Y3NldHBncnAoaW50IGZkIF9fdW51c2VkLCBwaWRfdCBwZ3JwKQ0KICAgICB7DQogICAgKwkv
KiBUT0RPIGNoZWNrIGlmIGZkIGlzIEJBREYgKi8NCiAgICArCWlmIChwZ3JwICE9IFVOSUtSQUZU
X1BHSUQpIHsNCiAgICArCQllcnJubyA9IEVJTlZBTDsNCiAgICArCQlyZXR1cm4gLTE7DQogICAg
Kwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICANCiAgICArcGlkX3QgdGNnZXRwZ3Jw
KGludCBmZCkNCiAgICArew0KICAgICsJLyogV2UgaGF2ZSBhIHNpbmdsZSAicHJvY2VzcyBncm91
cCIgKi8NCiAgICArCXJldHVybiBVTklLUkFGVF9QR0lEOw0KICAgICt9DQogICAgKw0KICAgICBp
bnQgbmljZShpbnQgaW5jIF9fdW51c2VkKQ0KICAgICB7DQogICAgLQlyZXR1cm4gMDsNCiAgICAr
CS8qIFdlIGRvbid0IHN1cHBvcnQgcHJpb3JpdHkgdXBkYXRlcyBmb3IgdW5pa2VybmVscyAqLw0K
ICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVybiAtMTsNCiAgICAgfQ0KICAgIGRpZmYg
LS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jDQogICAgaW5kZXggNjgwYmNhZi4uM2FmYzE2OCAx
MDA2NDQNCiAgICAtLS0gYS9zaWduYWwuYw0KICAgICsrKyBiL3NpZ25hbC5jDQogICAgQEAgLTMy
LDYgKzMyLDggQEANCiAgICAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1Ig
TU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICAgICovDQogICAgIA0KICAgICsjaW5jbHVkZSA8dWsv
cHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8ZXJybm8uaD4NCiAgICAgI2luY2x1ZGUgPHNpZ25h
bC5oPg0KICAgICANCiAgICAgaW50IHNpZ2FjdGlvbihpbnQgc2lnIF9fdW51c2VkLCBjb25zdCBz
dHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBhY3QgX191bnVzZWQsDQogICAgQEAgLTU0LDMgKzU2
LDE5IEBAIGludCBzaWdpbnRlcnJ1cHQoaW50IHNpZyBfX3VudXNlZCwgaW50IGZsYWcgX191bnVz
ZWQpDQogICAgIHsNCiAgICAgCXJldHVybiAwOw0KICAgICB9DQogICAgKw0KICAgICtpbnQga2ls
bChpbnQgcGlkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAgICt7DQogICAgKwkvKiBUT0RPIGNoZWNr
IHNpZyAqLw0KICAgICsJaWYgKHBpZCAhPSBVTklLUkFGVF9QSUQpDQogICAgKwkJZXJybm8gPSBF
U1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGtpbGxwZyhp
bnQgcGdycCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArew0KICAgICsJLyogVE9ETyBjaGVjayBz
aWcgKi8NCiAgICArCWlmIChwZ3JwICE9IFVOSUtSQUZUX1BHSUQpDQogICAgKwkJZXJybm8gPSBF
U1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS90aW1lLmMg
Yi90aW1lLmMNCiAgICBpbmRleCA5NGU4MDk3Li43NmM0NTVmIDEwMDY0NA0KICAgIC0tLSBhL3Rp
bWUuYw0KICAgICsrKyBiL3RpbWUuYw0KICAgIEBAIC0xNjIsMyArMTYyLDggQEAgaW50IGNsb2Nr
X2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCBfX3VudXNlZCwgc3RydWN0IHRpbWVzcGVjICp0cCBf
X3VudXNlZCkNCiAgICAgCXRwLT50dl9uc2VjID0gdWthcmNoX3RpbWVfc3Vic2VjKG5vdyk7DQog
ICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICsNCiAgICAraW50IHRpbWVzKHN0cnVjdCB0bSAq
YnVmIF9fdW51c2VkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gLTE7DQogICAgK30NCg0KUGxlYXNl
IHNldCBlcnJubyBhcyB5b3UgZGlkIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgcGF0
Y2guDQoNCiAgICAtLSANCiAgICAyLjIwLjENCiAgICANCiAgICANCg0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 14:02:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 14:02:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i59O5-0006R9-2O; Tue, 03 Sep 2019 14:02:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yZoj=W6=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i59O3-0006Qr-Sy
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 14:02:23 +0000
X-Inumbo-ID: 728348d2-ce53-11e9-ab94-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 728348d2-ce53-11e9-ab94-12813bfff9fa;
 Tue, 03 Sep 2019 14:02:21 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CD0DBF202A;
 Tue,  3 Sep 2019 16:02:20 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 5OUPQGX6bpth; Tue,  3 Sep 2019 16:02:20 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 95069F2027;
 Tue,  3 Sep 2019 16:02:16 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 3 Sep 2019
 16:02:16 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 3 Sep 2019 16:02:16
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH 1/2] Revisit process.c functions
Thread-Index: AQHVYZKuGAx1iPh90EmOdwT7aKSqy6cZ/TuA
Date: Tue, 3 Sep 2019 14:02:16 +0000
Message-ID: <AA31BA62-2EF6-46E4-9C9B-0C81693111EE@neclab.eu>
References: <20190902133103.1990-1-costin.lupu@cs.pub.ro>
 <20190902133103.1990-2-costin.lupu@cs.pub.ro>
In-Reply-To: <20190902133103.1990-2-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <7C79AE36A79A5F4A84C72479E37533E0@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/2] Revisit process.c
 functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLCBwbGVhc2Ugc2VlIGEgc2luZ2xlIGNvbW1lbnQgaW5saW5lLCBhdCB0aGUgYm90
dG9tLg0KDQotLSBGZWxpcGUNCg0K77u/T24gMDIuMDkuMTksIDE1OjMxLCAiQ29zdGluIEx1cHUi
IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+IHdyb3RlOg0KDQogICAgVGhpcyBwYXRjaCByZXZpc2l0
cyB0aGUgZnVuY3Rpb25zIGluIHByb2Nlc3MuYywgcmVkaXN0cmlidXRlcyBzb21lIG9mIHRoZW0g
YW5kDQogICAgaW1wbGVtZW50IHRoZSBvdGhlcnMuIFRoZSByZW1haW5pbmcgZnVuY3Rpb25zIG1h
eSB2ZXJ5IHdlbGwgYmUgbW92ZWQgaW50byBhbg0KICAgIGludGVybmFsICJwcm9jZXNzIiByZWxh
dGVkIGxpYnJhcnksIGJ1dCB3ZSB3aWxsIGRvIHRoaXMgYXQgYW5vdGhlciB0aW1lLiBJdCdzDQog
ICAgd29ydGggc2F5aW5nIHRoYXQgd2Ugc2V0IHRoZSBQSUQgb2YgdGhlIHVuaWtlcm5lbCB0byAx
LCBzYXZpbmcgdGhlIFBJRCAwIGZvciBpdHMNCiAgICAicGFyZW50IiwgYW4gaW52aXNpYmlsZSBw
cm9jZXNzIHRoYXQgaXMgYWxzbyBub3Qgc2hvd24gb24gTGludXguDQogICAgDQogICAgUmVkaXN0
cmlidXRlZCBmdW5jdGlvbnM6DQogICAgLSBraWxsKCkgYW5kIGtpbGxwZygpIGFyZSBtb3ZlZCB0
byBzaWduYWwuYw0KICAgIC0gdGltZXMoKSBpcyBtb3ZlZCB0byB0aW1lLmMNCiAgICANCiAgICBT
aWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgIC0t
LQ0KICAgICBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyArKysrKysrKysrKw0KICAgICBwcm9j
ZXNzLmMgICAgICAgICAgICB8IDE2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0t
LS0tLS0tLS0tDQogICAgIHNpZ25hbC5jICAgICAgICAgICAgIHwgIDE4ICsrKysrDQogICAgIHRp
bWUuYyAgICAgICAgICAgICAgIHwgICA1ICsrDQogICAgIDQgZmlsZXMgY2hhbmdlZCwgMTgxIGlu
c2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5j
bHVkZS91ay9wcm9jZXNzLmgNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9wcm9j
ZXNzLmggYi9pbmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uNjcyMDhlMw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9p
bmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIEBAIC0wLDAgKzEsNDMgQEANCiAgICArLyogU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLw0KICAgICsvKg0KICAgICsgKiBBdXRo
b3JzOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgICsgKg0KICAgICsg
KiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0
LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAgICsgKg0KICAgICsgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAgICAr
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zDQogICAgKyAqIGFyZSBtZXQ6DQogICAgKyAqDQogICAgKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
DQogICAgKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4NCiAgICArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICArICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQ0KICAgICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzDQogICAgKyAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tDQogICAgKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgKyAqDQogICAgKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIg0KICAgICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICAgKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
DQogICAgKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUNCiAgICArICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KICAgICsgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRg0KICAgICsgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCiAgICArICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4NCiAgICArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCiAgICArICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCiAg
ICArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgKyAqDQogICAgKyAqIFRISVMg
SEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuDQogICAg
KyAqLw0KICAgICsNCiAgICArI2lmbmRlZiBfX1VLX1BST0NFU1NfSF9fDQogICAgKyNkZWZpbmUg
X19VS19QUk9DRVNTX0hfXw0KICAgICsNCiAgICArI2RlZmluZSBVTklLUkFGVF9QSUQgICAgICAx
DQogICAgKyNkZWZpbmUgVU5JS1JBRlRfUFBJRCAgICAgMA0KICAgICsjZGVmaW5lIFVOSUtSQUZU
X1NJRCAgICAgIDANCiAgICArI2RlZmluZSBVTklLUkFGVF9QR0lEICAgICAwDQogICAgKw0KICAg
ICsjZW5kaWYgLyogX19VS19QUk9DRVNTX0hfXyAqLw0KICAgIGRpZmYgLS1naXQgYS9wcm9jZXNz
LmMgYi9wcm9jZXNzLmMNCiAgICBpbmRleCBjNGUzNjY0Li5lMjYxMTBkIDEwMDY0NA0KICAgIC0t
LSBhL3Byb2Nlc3MuYw0KICAgICsrKyBiL3Byb2Nlc3MuYw0KICAgIEBAIC0zLDcgKzMsNyBAQA0K
ICAgICAgKiBsaWJuZXdsaWIgZ2x1ZSBjb2RlDQogICAgICAqDQogICAgICAqIEF1dGhvcnM6IEZl
bGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCiAgICAtICoNCiAgICArICogICAg
ICAgICAgQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAgICAgICoNCiAgICAg
ICogQ29weXJpZ2h0IChjKSAyMDE3LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgICAgICoNCiAgICBAQCAtMzUsMTM0ICszNSwxOTkgQEAN
CiAgICAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4g
QU5ZIFdBWS4NCiAgICAgICovDQogICAgIA0KICAgIC0jaW5jbHVkZSA8dGltZS5oPg0KICAgICAj
aW5jbHVkZSA8ZXJybm8uaD4NCiAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICAjaW5jbHVk
ZSA8c3RkaW8uaD4NCiAgICAgI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPg0KICAgICsjaW5jbHVk
ZSA8dWsvcHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8dWsvcHJpbnQuaD4NCiAgICAgI3VuZGVm
IGVycm5vDQogICAgIGV4dGVybiBpbnQgZXJybm87DQogICAgIA0KICAgIC1pbnQgZXhlY3ZlKGNo
YXIgKm5hbWUgX191bnVzZWQsIGNoYXIgKiphcmd2IF9fdW51c2VkLCBjaGFyICoqZW52IF9fdW51
c2VkKQ0KICAgICsNCiAgICAraW50IGZvcmsodm9pZCkNCiAgICAgew0KICAgIC0JZXJybm8gPSBF
Tk9NRU07DQogICAgKwkvKiBmb3JrKCkgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3Jt
ICovDQogICAgKwllcnJubyA9IEVOT1NZUzsNCiAgICAgCXJldHVybiAtMTsNCiAgICAgfQ0KICAg
ICANCiAgICAtaW50IGV4ZWN2KGNvbnN0IGNoYXIgKnBhdGggX191bnVzZWQsIGNoYXIgKmNvbnN0
IGFyZ3ZbXSBfX3VudXNlZCkNCiAgICArc3RhdGljDQogICAgK3ZvaWQgZXhlY193YXJuKGNvbnN0
IGNoYXIgKmZ1bmMsDQogICAgKwkJY29uc3QgY2hhciAqcGF0aCwgY2hhciAqY29uc3QgYXJndltd
LCBjaGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQog
ICAgKwlpbnQgaTsNCiAgICAgDQogICAgLWludCBzeXN0ZW0oY29uc3QgY2hhciAqY29tbWFuZCBf
X3VudXNlZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICArCXVrX3ByX3dh
cm4oIiVzKCk6IHBhdGg9JXMiLCBmdW5jLCBwYXRoKTsNCiAgICAgDQogICAgLUZJTEUgKnBvcGVu
KGNvbnN0IGNoYXIgKmNvbW1hbmQgX191bnVzZWQsIGNvbnN0IGNoYXIgKnR5cGUgX191bnVzZWQp
DQogICAgLXsNCiAgICAtCXJldHVybiBOVUxMOw0KICAgIC19DQogICAgKwkvKiBwcmludCBhcmd1
bWVudHMgKi8NCiAgICArCWkgPSAwOw0KICAgICsJdWtfcHJfd2FybigiIGFyZ3Y9WyIpOw0KICAg
ICsJd2hpbGUgKGFyZ3ZbaV0pIHsNCiAgICArCQl1a19wcl93YXJuKCIlcyVzIiwgKGkgPiAwID8g
IiwgIiA6ICIiKSwgYXJndltpXSk7DQogICAgKwkJaSsrOw0KICAgICsJfQ0KICAgICsJdWtfcHJf
d2FybigiXSIpOw0KICAgICANCiAgICAtaW50IHBjbG9zZShGSUxFICpzdHJlYW0gX191bnVzZWQp
DQogICAgLXsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogcHJpbnQgZW52aXJvbm1lbnQgdmFy
aWFibGVzICovDQogICAgKwlpZiAoZW52cCkgew0KICAgICsJCWkgPSAwOw0KICAgICsJCXVrX3By
X3dhcm4oIiBlbnZwPVsiKTsNCiAgICArCQl3aGlsZSAoZW52cFtpXSkgew0KICAgICsJCQl1a19w
cl93YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwgZW52cFtpXSk7DQogICAgKwkJCWkr
KzsNCiAgICArCQl9DQogICAgKwkJdWtfcHJfd2FybigiXSIpOw0KICAgICsJfQ0KICAgICsNCiAg
ICArCXVrX3ByX3dhcm4oIlxuIik7DQogICAgIH0NCiAgICAgDQogICAgLWludCBmb3JrKHZvaWQp
DQogICAgK2ludCBleGVjdmUoY29uc3QgY2hhciAqcGF0aCwgY2hhciAqY29uc3QgYXJndltdLCBj
aGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAtCWVycm5vID0gRUFHQUlOOw0KICAgICsJ
ZXhlY193YXJuKF9fZnVuY19fLCBwYXRoLCBhcmd2LCBlbnZwKTsNCiAgICArCWVycm5vID0gRU5P
U1lTOw0KICAgICAJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1pbnQgZ2V0cGlkKHZv
aWQpDQogICAgK2ludCBleGVjdihjb25zdCBjaGFyICpwYXRoLCBjaGFyICpjb25zdCBhcmd2W10p
DQogICAgIHsNCiAgICAtCXJldHVybiAxOw0KICAgICsJZXhlY193YXJuKF9fZnVuY19fLCBwYXRo
LCBhcmd2LCBOVUxMKTsNCiAgICArCWVycm5vID0gRU5PU1lTOw0KICAgICsJcmV0dXJuIC0xOw0K
ICAgICB9DQogICAgIA0KICAgIC1waWRfdCBnZXRwcGlkKHZvaWQpDQogICAgK2ludCBzeXN0ZW0o
Y29uc3QgY2hhciAqY29tbWFuZCkNCiAgICAgew0KICAgIC0JcmV0dXJuIDA7DQogICAgKwl1a19w
cl93YXJuKCIlczogJXNcbiIsIF9fZnVuY19fLCBjb21tYW5kKTsNCiAgICArCWVycm5vID0gRU5P
U1lTOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1pbnQga2lsbChpbnQg
cGlkIF9fdW51c2VkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAgICtGSUxFICpwb3Blbihjb25zdCBj
aGFyICpjb21tYW5kLCBjb25zdCBjaGFyICp0eXBlIF9fdW51c2VkKQ0KICAgICB7DQogICAgLQll
cnJubyA9IEVJTlZBTDsNCiAgICAtCXJldHVybiAtMTsNCiAgICArCXVrX3ByX3dhcm4oIiVzOiAl
c1xuIiwgX19mdW5jX18sIGNvbW1hbmQpOw0KICAgICsJZXJybm8gPSBFTk9TWVM7DQogICAgKwly
ZXR1cm4gTlVMTDsNCiAgICAgfQ0KICAgICANCiAgICAtaW50IHRpbWVzKHN0cnVjdCB0bSAqYnVm
IF9fdW51c2VkKQ0KICAgICtpbnQgcGNsb3NlKEZJTEUgKnN0cmVhbSBfX3VudXNlZCkNCiAgICAg
ew0KICAgICsJZXJybm8gPSBFSU5WQUw7DQogICAgIAlyZXR1cm4gLTE7DQogICAgIH0NCiAgICAg
DQogICAgIGludCB3YWl0KGludCAqc3RhdHVzIF9fdW51c2VkKQ0KICAgICB7DQogICAgKwkvKiBO
byBjaGlsZHJlbiAqLw0KICAgICAJZXJybm8gPSBFQ0hJTEQ7DQogICAgIAlyZXR1cm4gLTE7DQog
ICAgIH0NCiAgICAgDQogICAgLWludCBzZXRwZ3JwKHZvaWQpDQogICAgLXsNCiAgICAtCXJldHVy
biAwOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtaW50IGtpbGxwZyhpbnQgcGdycCBfX3Vu
dXNlZCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQgX191
bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9wdGlvbnMgX191bnVzZWQpDQogICAg
IHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogTm8gY2hpbGRyZW4gKi8NCiAgICArCWVycm5v
ID0gRUNISUxEOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC0NCiAgICAg
cGlkX3Qgd2FpdDMoaW50ICp3c3RhdHVzIF9fdW51c2VkLCBpbnQgb3B0aW9ucyBfX3VudXNlZCwN
CiAgICAgCQlzdHJ1Y3QgcnVzYWdlICpydXNhZ2UgX191bnVzZWQpDQogICAgIHsNCiAgICAtCXJl
dHVybiAwOw0KICAgICsJLyogTm8gY2hpbGRyZW4gKi8NCiAgICArCWVycm5vID0gRUNISUxEOw0K
ICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgICBwaWRfdCB3YWl0NChwaWRfdCBw
aWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9wdGlvbnMgX191bnVzZWQs
DQogICAgIAkJc3RydWN0IHJ1c2FnZSAqcnVzYWdlIF9fdW51c2VkKQ0KICAgICB7DQogICAgLQly
ZXR1cm4gMDsNCiAgICArCS8qIE5vIGNoaWxkcmVuICovDQogICAgKwllcnJubyA9IEVDSElMRDsN
CiAgICArCXJldHVybiAtMTsNCiAgICAgfQ0KICAgICANCiAgICAtcGlkX3Qgd2FpdHBpZChwaWRf
dCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9wdGlvbnMgX191bnVz
ZWQpDQogICAgK2ludCBnZXRwaWQodm9pZCkNCiAgICAgew0KICAgIC0JcmV0dXJuIDA7DQogICAg
KwlyZXR1cm4gVU5JS1JBRlRfUElEOw0KICAgICt9DQogICAgKw0KICAgICtwaWRfdCBnZXRwcGlk
KHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiBVTklLUkFGVF9QUElEOw0KICAgICB9DQogICAg
IA0KICAgICBwaWRfdCBzZXRzaWQodm9pZCkNCiAgICAgew0KICAgIC0JcmV0dXJuIDA7DQogICAg
KwkvKiBXZSBoYXZlIGEgc2luZ2xlICJzZXNzaW9uIiB3aXRoIGEgc2luZ2xlICJwcm9jZXNzIiAq
Lw0KICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVybiAocGlkX3QpIC0xOw0KICAgICB9
DQogICAgIA0KICAgIC1waWRfdCBnZXRzaWQocGlkX3QgcGlkIF9fdW51c2VkKQ0KICAgICtwaWRf
dCBnZXRzaWQocGlkX3QgcGlkKQ0KICAgICB7DQogICAgLQlyZXR1cm4gMDsNCiAgICArCWlmIChw
aWQgIT0gMCkgew0KICAgICsJCS8qIFdlIHN1cHBvcnQgb25seSBjYWxscyBmb3IgdGhlIG9ubHkg
Y2FsbGluZyAicHJvY2VzcyIgKi8NCiAgICArCQllcnJubyA9IEVTUkNIOw0KICAgICsJCXJldHVy
biAocGlkX3QpIC0xOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIFVOSUtSQUZUX1NJRDsNCiAgICAg
fQ0KICAgICANCiAgICAtaW50IHNldHBnaWQocGlkX3QgcGlkIF9fdW51c2VkLCBwaWRfdCBwZ2lk
IF9fdW51c2VkKQ0KICAgICtpbnQgc2V0cGdpZChwaWRfdCBwaWQsIHBpZF90IHBnaWQpDQogICAg
IHsNCiAgICArCWlmIChwaWQgIT0gMCkgew0KICAgICsJCS8qIFdlIHN1cHBvcnQgb25seSBjYWxs
cyBmb3IgdGhlIG9ubHkgY2FsbGluZyAicHJvY2VzcyIgKi8NCiAgICArCQllcnJubyA9IEVTUkNI
Ow0KICAgICsJCXJldHVybiAocGlkX3QpIC0xOw0KICAgICsJfQ0KICAgICsJaWYgKHBnaWQgIT0g
MCkgew0KICAgICsJCS8qIFdlIGhhdmUgYSBzaW5nbGUgImdyb3VwIiB3aXRoIGEgc2luZ2xlICJw
cm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0gRVBFUk07DQogICAgKwkJcmV0dXJuIChwaWRfdCkg
LTE7DQogICAgKwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICANCiAgICAgcGlkX3Qg
Z2V0cGdpZChwaWRfdCBwaWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJaWYgKHBp
ZCAhPSAwKSB7DQogICAgKwkJLyogV2Ugc3VwcG9ydCBvbmx5IGNhbGxzIGZvciB0aGUgb25seSBj
YWxsaW5nICJwcm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0gRVNSQ0g7DQogICAgKwkJcmV0dXJu
IChwaWRfdCkgLTE7DQogICAgKwl9DQogICAgKwlyZXR1cm4gVU5JS1JBRlRfUEdJRDsNCiAgICAg
fQ0KICAgICANCiAgICArcGlkX3QgZ2V0cGdycCh2b2lkKQ0KICAgICt7DQogICAgKwlyZXR1cm4g
VU5JS1JBRlRfUEdJRDsNCiAgICArfQ0KICAgICANCiAgICAtaW50IHRjc2V0cGdycChpbnQgZmQg
X191bnVzZWQsIHBpZF90IHBncnAgX191bnVzZWQpDQogICAgK2ludCBzZXRwZ3JwKHZvaWQpDQog
ICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJcmV0dXJuIHNldHBnaWQoMCwgMCk7DQogICAg
IH0NCiAgICAgDQogICAgLXBpZF90IHRjZ2V0cGdycChpbnQgZmQgX191bnVzZWQpDQogICAgK2lu
dCB0Y3NldHBncnAoaW50IGZkIF9fdW51c2VkLCBwaWRfdCBwZ3JwKQ0KICAgICB7DQogICAgKwkv
KiBUT0RPIGNoZWNrIGlmIGZkIGlzIEJBREYgKi8NCiAgICArCWlmIChwZ3JwICE9IFVOSUtSQUZU
X1BHSUQpIHsNCiAgICArCQllcnJubyA9IEVJTlZBTDsNCiAgICArCQlyZXR1cm4gLTE7DQogICAg
Kwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICANCiAgICArcGlkX3QgdGNnZXRwZ3Jw
KGludCBmZCkNCiAgICArew0KICAgICsJLyogV2UgaGF2ZSBhIHNpbmdsZSAicHJvY2VzcyBncm91
cCIgKi8NCiAgICArCXJldHVybiBVTklLUkFGVF9QR0lEOw0KICAgICt9DQogICAgKw0KICAgICBp
bnQgbmljZShpbnQgaW5jIF9fdW51c2VkKQ0KICAgICB7DQogICAgLQlyZXR1cm4gMDsNCiAgICAr
CS8qIFdlIGRvbid0IHN1cHBvcnQgcHJpb3JpdHkgdXBkYXRlcyBmb3IgdW5pa2VybmVscyAqLw0K
ICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVybiAtMTsNCiAgICAgfQ0KICAgIGRpZmYg
LS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jDQogICAgaW5kZXggNjgwYmNhZi4uM2FmYzE2OCAx
MDA2NDQNCiAgICAtLS0gYS9zaWduYWwuYw0KICAgICsrKyBiL3NpZ25hbC5jDQogICAgQEAgLTMy
LDYgKzMyLDggQEANCiAgICAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1Ig
TU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICAgICovDQogICAgIA0KICAgICsjaW5jbHVkZSA8dWsv
cHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8ZXJybm8uaD4NCiAgICAgI2luY2x1ZGUgPHNpZ25h
bC5oPg0KICAgICANCiAgICAgaW50IHNpZ2FjdGlvbihpbnQgc2lnIF9fdW51c2VkLCBjb25zdCBz
dHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBhY3QgX191bnVzZWQsDQogICAgQEAgLTU0LDMgKzU2
LDE5IEBAIGludCBzaWdpbnRlcnJ1cHQoaW50IHNpZyBfX3VudXNlZCwgaW50IGZsYWcgX191bnVz
ZWQpDQogICAgIHsNCiAgICAgCXJldHVybiAwOw0KICAgICB9DQogICAgKw0KICAgICtpbnQga2ls
bChpbnQgcGlkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAgICt7DQogICAgKwkvKiBUT0RPIGNoZWNr
IHNpZyAqLw0KICAgICsJaWYgKHBpZCAhPSBVTklLUkFGVF9QSUQpDQogICAgKwkJZXJybm8gPSBF
U1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGtpbGxwZyhp
bnQgcGdycCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArew0KICAgICsJLyogVE9ETyBjaGVjayBz
aWcgKi8NCiAgICArCWlmIChwZ3JwICE9IFVOSUtSQUZUX1BHSUQpDQogICAgKwkJZXJybm8gPSBF
U1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS90aW1lLmMg
Yi90aW1lLmMNCiAgICBpbmRleCA5NGU4MDk3Li43NmM0NTVmIDEwMDY0NA0KICAgIC0tLSBhL3Rp
bWUuYw0KICAgICsrKyBiL3RpbWUuYw0KICAgIEBAIC0xNjIsMyArMTYyLDggQEAgaW50IGNsb2Nr
X2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCBfX3VudXNlZCwgc3RydWN0IHRpbWVzcGVjICp0cCBf
X3VudXNlZCkNCiAgICAgCXRwLT50dl9uc2VjID0gdWthcmNoX3RpbWVfc3Vic2VjKG5vdyk7DQog
ICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICsNCiAgICAraW50IHRpbWVzKHN0cnVjdCB0bSAq
YnVmIF9fdW51c2VkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gLTE7DQogICAgK30NCg0KUGxlYXNl
IHNldCBlcnJubyBhcyB5b3UgZGlkIHdpdGggdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgcGF0
Y2guDQoNCiAgICAtLSANCiAgICAyLjIwLjENCiAgICANCiAgICANCg0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 14:47:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 14:47:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5A5Q-00025r-Qt; Tue, 03 Sep 2019 14:47:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i5A5P-00025d-DV
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 14:47:11 +0000
X-Inumbo-ID: b53959cc-ce59-11e9-b299-bc764e2007e4
Received: from mail-wm1-x344.google.com (unknown [2a00:1450:4864:20::344])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b53959cc-ce59-11e9-b299-bc764e2007e4;
 Tue, 03 Sep 2019 14:47:10 +0000 (UTC)
Received: by mail-wm1-x344.google.com with SMTP id n10so7930220wmj.0
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 07:47:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=bkzANaL227i9R2ifhnt3bUfksEw1HtznHM3g5lhBvLU=;
 b=Dr/HKWIPwEoGHUDENKpL3fox1gWNVjGlwR2Gc3ybVjgBZGoq8mKgaJxg3zwIifK3nc
 Kda9aPvq92IEZ9ihJY0rRcAj8sCKsmghCgUaczbXqovSyikNFZJG3ZebIYv9V9eH1Fpd
 z8RD+je0WROW4MeWUTYd4RFEgn8qBL1MeZ9ja0xtaz8jDXV7MEsKbLnqSs2qB8rWgj7t
 7nTGMk7kU5uX6zbMDJxBWx/AN3tdbAyNrrkebOTEFnvppvnq4ZamKR3XLBb2BC1Rxrw3
 zEfgW0izWSGgLDkV225lxBmC0q0VffZ+/rYbImlVZcrM3v2W3k1C37GmlstuDjydMpK7
 1HkA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=bkzANaL227i9R2ifhnt3bUfksEw1HtznHM3g5lhBvLU=;
 b=NRpKi9KN4gWdjK8dqa2RJhjhpPsFVroIE6VsOXcWCLxz8rlLcwfB7Ws6srK79XI2uG
 SOu3tuxShal7QZWMHct+yjiopODuRsjq4ARB5d/OeZWjqAfVwQl4OpbzbAmKEj2cK18d
 n8gfawOPaJFPDsfTHgS6+1X38TyvWht3pmT30rRg06MaZe1FltCKCGTHwVL4pQyVAo68
 Y6jvjCVxzCkTrJzds/gJCfTY1OJFARyOvZ1sY2iWd0HMwzRNedvrUgnmc9wLUFD38jhE
 9mxUjn0I7GcOI5Yj/DEiInBpibqdPo/hk5b6i+vZT40RhdOaQaJURHCyAtd2ZacuLYGo
 Vpbw==
X-Gm-Message-State: APjAAAVyTFmQw9EWMA3Yyi/W3Lr6mKqfqxaqV32HRXUo5i/CDt3V5vtp
 I7n1im9pyk/2F3eyfjXaXrzM99+z
X-Google-Smtp-Source: APXvYqw97NKI9m5MfHZ++7UYeVY3XsduAiGvzYUHrFAyqLa/R8j90VYrPYTjBUl5t4v2ogTNm2LnHA==
X-Received: by 2002:a7b:c651:: with SMTP id q17mr493614wmk.13.1567522029408;
 Tue, 03 Sep 2019 07:47:09 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id t7sm13359162wrr.37.2019.09.03.07.47.08
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 07:47:08 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190903093315.14837-1-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <6052e18d-8899-2f9f-61fc-ce0ab094d90c@gmail.com>
Date: Tue, 3 Sep 2019 17:47:07 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903093315.14837-1-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH] exportsyms.uk: Add
 dns_gethostbyname
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBGZWxpcGUhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNz
LnB1Yi5ybz4KCk9uIDkvMy8xOSAxMjozMyBQTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IEFkZCBk
bnNfZ2V0aG9zdGJ5bmFtZSBuZWVkZWQgYnkgdGhlIE1pY3JvcHl0aG9uIHBvcnQKPiAKPiBTaWdu
ZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gLS0tCj4g
IGV4cG9ydHN5bXMudWsgfCAxICsKPiAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCj4g
Cj4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCj4gaW5kZXggNjc2
MzI0NS4uNmZlOTVlYyAxMDA2NDQKPiAtLS0gYS9leHBvcnRzeW1zLnVrCj4gKysrIGIvZXhwb3J0
c3ltcy51awo+IEBAIC0xLDYgKzEsNyBAQAo+ICBhY2NlcHQKPiAgYmluZAo+ICBjb25uZWN0Cj4g
K2Ruc19nZXRob3N0YnluYW1lCj4gIGVuZHByb3RvZW50Cj4gIGZyZWVhZGRyaW5mbwo+ICBnYWlf
c3RyZXJyb3IKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 17:06:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 17:06:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5CGN-00089N-VN; Tue, 03 Sep 2019 17:06:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=cx96=W6=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5CGN-00089E-4v
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 17:06:39 +0000
X-Inumbo-ID: 2f7021ea-ce6d-11e9-ab9b-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 2f7021ea-ce6d-11e9-ab9b-12813bfff9fa;
 Tue, 03 Sep 2019 17:06:36 +0000 (UTC)
IronPort-SDR: I+fHX3bLUuWRAxA/4j3zEnZ15WQGM7IGNzt6uRB1iroj42AvYW/2odOSKGyc57qnSNQRBS7Qg1
 C9VWUOcPP2wA==
IronPort-PHdr: =?us-ascii?q?9a23=3ACDX4Ih0lSuOT+mg7smDT+DRfVm0co7zxezQtwd?=
 =?us-ascii?q?8ZseMeK/ad9pjvdHbS+e9qxAeQG9mCsbQd1LGd7PGocFdDyK7JiGoFfp1IWk?=
 =?us-ascii?q?1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBA?=
 =?us-ascii?q?j0OxZrKeTpAI7SiNm82/yv95HJbAhEmSSxbalvIBi0owjducsbjI9/Iast1x?=
 =?us-ascii?q?XFpWdFdf5Lzm1yP1KTmBj85sa0/JF99ilbpuws+c1dX6jkZqo0VbNXAigoPG?=
 =?us-ascii?q?Az/83rqALMTRCT6XsGU2UZiQRHDg7Y5xznRJjxsy/6tu1g2CmGOMD9UL45VS?=
 =?us-ascii?q?i+46ptVRTlkzkMOSIn/27Li8xwlKNbrwynpxxj2I7ffYWZOONjcq/BYd8WQG?=
 =?us-ascii?q?xMVdtTWSNcGIOxd5YBAfQPPehYrIfzqVUBohS8CgawC+3i0SNIhmbs0KEmz+?=
 =?us-ascii?q?gsHwPL0Qo9FNwOqnTUq9D1Ob8MXOCy16nI0TTDb/VL0jn79YjIag0hquyLUL?=
 =?us-ascii?q?1sdsrR0lUvFwLDjlmKrYzlIiuV1vkWvmeH9OpsT/qvi3M8pA1ruDivwd4hh4?=
 =?us-ascii?q?/UjYwW0lDJ7Th1zYkoKdGiS0N2YcSoHIVOuyyYLYd7TNsuT3xrtSs50LEKp5?=
 =?us-ascii?q?+2cDIUxJkowxPTceGLfoqO7xn+TuieOy14i2hgeL+nghay9lWvxfPkW8mv1V?=
 =?us-ascii?q?ZKsjJFkt7RtnARzxDT6taISv96/kq5xzaP0hrc6uBAIUwuiaXbMIQtwqYtlp?=
 =?us-ascii?q?UIq0jDBCj2lF33jK+QaEok5vCl5/nob7n7vJORNI95hhvgPqgwmMGzG+o1Ph?=
 =?us-ascii?q?ALX2eB+OS80LPj/Vf+QLVPlvA5jq7ZsIvGJcQaoK61GQtV0ps76xaiFDqpzM?=
 =?us-ascii?q?8YkWMfLFJYYx2LlZLpO1bWLPDiEfi/m0iskCtsx/3eO73hA5PNLnnEkLf6ZL?=
 =?us-ascii?q?py9lBTyBQtwtBb/J9UDrABIOnvWk/qrtDZAQE2Mwquz+bgEtV92ZsUWXiTDa?=
 =?us-ascii?q?+BLKPSrViI6/oxI+mIfoAapS7yJOIj5/Hzl382h14dcbOy0pQNdX+4GfVmI1?=
 =?us-ascii?q?iCbHr3ntcBDHoFshAkQ+P2k12OSyNTZ26pUK4m/DE7D9HuMYCWeISkjPmo2i?=
 =?us-ascii?q?uhE5xhTMtqLXGxJje3J9vVAbZEPDyWK8NWmzoIT7WgDYUo2RavqSfh16draO?=
 =?us-ascii?q?Pf4WsFrZilzt8jo6WZkBA09DtvSsiQzWyJZ2V1hX8TAS872uZ4u0M3ggOG0K?=
 =?us-ascii?q?55hOcdGdFN6vdhVgYhKYWa3+F8TdfoVVSSUM2OTQONRc66ADd5as8p3pdaaE?=
 =?us-ascii?q?FmB9SkyBTexzeCCKRTj6GBQoYzpPGPl0PtLtpwni6VnJIqiEMrF44WbTWr?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CACwCmnG5d/wPjVY1lHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MIUCASKoQhiHyHfiWbFQkBAQE6AQIBAYQ/AoMZOBMCAwgBAQUBAQE?=
 =?us-ascii?q?BAQYEAWyFOoI6KQGCZwEFI2YLGAICJgICVwYBDAYCAQGDHoIPqmSBMoVKgzK?=
 =?us-ascii?q?BSYEMKI1QP4ERJwyCXz6ERIMLglgElgiWEQeCImIEk28hgjOLLCeKYI12miA?=
 =?us-ascii?q?4IYFYMxqDX4JOFxWOED0BATEBgQUBAY8+AQE?=
X-IPAS-Result: =?us-ascii?q?A2CACwCmnG5d/wPjVY1lHAEBAQQBAQcEAQGBZ4MIUCASK?=
 =?us-ascii?q?oQhiHyHfiWbFQkBAQE6AQIBAYQ/AoMZOBMCAwgBAQUBAQEBAQYEAWyFOoI6K?=
 =?us-ascii?q?QGCZwEFI2YLGAICJgICVwYBDAYCAQGDHoIPqmSBMoVKgzKBSYEMKI1QP4ERJ?=
 =?us-ascii?q?wyCXz6ERIMLglgElgiWEQeCImIEk28hgjOLLCeKYI12miA4IYFYMxqDX4JOF?=
 =?us-ascii?q?xWOED0BATEBgQUBAY8+AQE?=
X-IronPort-AV: E=Sophos;i="5.64,463,1559509200"; 
   d="scan'208";a="4696883"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 03 Sep 2019 20:06:31 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6BA6F1A6018A;
 Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id pXcYAnUon4_a; Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 5054C1A601E4;
 Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id bBTxZbqJwhim; Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.26.249.17])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 372271A6018A;
 Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190903114908.26072-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <c6c081d3-06d4-318a-0063-33a7b03174a7@cs.pub.ro>
Date: Tue, 3 Sep 2019 20:06:30 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903114908.26072-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/vfscore: Add missing
 vnop operations to stdio
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBWbGFkIQoKUmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5w
dWIucm8+CgpPbiA5LzMvMTkgMjo0OSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdy
b3RlOgo+IE1vc3Qgb2YgdGhlIHZub3Agb3BlcmF0aW9ucyBhcmUgbWlzc2luZyBmcm9tIHRoZSBz
dGRpby4gVGhpcyBjYXVzZXMgYSBwYWdlIGZhdWx0Cj4gd2hlbiBjYWxsaW5nIGZ1bmN0aW9uIHN1
Y2ggYXMgbHNlZWsgb24gc3RkaW8uIFRvIHNvbHZlIHRoaXMgd2UgcmVnaXN0ZXIgdGhlCj4gbWlz
c2luZyBvcGVyYXRpb24uCj4gCj4gU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgo+IC0tLQo+ICBsaWIvdmZzY29yZS9z
dGRpby5jIHwgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t
Cj4gIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+IAo+
IGRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9zdGRpby5jIGIvbGliL3Zmc2NvcmUvc3RkaW8uYwo+
IGluZGV4IDA4MzM1MzY3Li45NTM2OTk4YyAxMDA2NDQKPiAtLS0gYS9saWIvdmZzY29yZS9zdGRp
by5jCj4gKysrIGIvbGliL3Zmc2NvcmUvc3RkaW8uYwo+IEBAIC00MSw2ICs0MSw4IEBACj4gICNp
bmNsdWRlIDx2ZnNjb3JlL3Zub2RlLmg+Cj4gICNpbmNsdWRlIDx1bmlzdGQuaD4KPiAgI2luY2x1
ZGUgPHZmc2NvcmUvdWlvLmg+Cj4gKyNpbmNsdWRlIDx2ZnNjb3JlL3Zub2RlLmg+Cj4gKyNpbmNs
dWRlIDx2ZnNjb3JlL21vdW50Lmg+Cj4gIAo+ICBzdGF0aWMgaW50IF9fd3JpdGVfZm4odm9pZCAq
ZHN0IF9fdW51c2VkLCB2b2lkICpzcmMsIHNpemVfdCAqY250KQo+ICB7Cj4gQEAgLTEyNywxMCAr
MTI5LDUwIEBAIHN0ZGlvX2dldGF0dHIoc3RydWN0IHZub2RlICp2bm9kZSBfX3VudXNlZCwgc3Ry
dWN0IHZhdHRyICphdHRyIF9fdW51c2VkKQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gKyNkZWZp
bmUgc3RkaW9fb3BlbgkoKHZub3Bfb3Blbl90KXZmc2NvcmVfbnVsbG9wKQo+ICsjZGVmaW5lIHN0
ZGlvX2Nsb3NlCSgodm5vcF9jbG9zZV90KXZmc2NvcmVfbnVsbG9wKQo+ICsjZGVmaW5lIHN0ZGlv
X3NlZWsJKCh2bm9wX3NlZWtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9f
aW9jdGwJKCh2bm9wX2lvY3RsX3QpdmZzY29yZV9udWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9fZnN5
bmMJKCh2bm9wX2ZzeW5jX3QpdmZzY29yZV92b3BfbnVsbG9wKQo+ICsjZGVmaW5lIHN0ZGlvX3Jl
YWRkaXIJKCh2bm9wX3JlYWRkaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gKyNkZWZpbmUgc3Rk
aW9fbG9va3VwCSgodm5vcF9sb29rdXBfdCl2ZnNjb3JlX251bGxvcCkKPiArI2RlZmluZSBzdGRp
b19jcmVhdGUJKCh2bm9wX2NyZWF0ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2RlZmluZSBz
dGRpb19yZW1vdmUJKCh2bm9wX3JlbW92ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2RlZmlu
ZSBzdGRpb19yZW5hbWUJKCh2bm9wX3JlbmFtZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2Rl
ZmluZSBzdGRpb19ta2RpcgkoKHZub3BfbWtkaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gKyNk
ZWZpbmUgc3RkaW9fcm1kaXIJKCh2bm9wX3JtZGlyX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICsj
ZGVmaW5lIHN0ZGlvX3NldGF0dHIJKCh2bm9wX3NldGF0dHJfdCl2ZnNjb3JlX3ZvcF9lcGVybSkK
PiArI2RlZmluZSBzdGRpb19pbmFjdGl2ZQkoKHZub3BfaW5hY3RpdmVfdCl2ZnNjb3JlX3ZvcF9u
dWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9fdHJ1bmNhdGUJKCh2bm9wX3RydW5jYXRlX3QpdmZzY29y
ZV92b3BfbnVsbG9wKQo+ICsjZGVmaW5lIHN0ZGlvX2xpbmsJKCh2bm9wX2xpbmtfdCl2ZnNjb3Jl
X3ZvcF9lcGVybSkKPiArI2RlZmluZSBzdGRpb19mYWxsb2NhdGUJKCh2bm9wX2ZhbGxvY2F0ZV90
KXZmc2NvcmVfdm9wX251bGxvcCkKPiArI2RlZmluZSBzdGRpb19yZWFkbGluawkoKHZub3BfcmVh
ZGxpbmtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9fc3ltbGluawkoKHZu
b3Bfc3ltbGlua190KXZmc2NvcmVfdm9wX251bGxvcCkKPiArCj4gIHN0YXRpYyBzdHJ1Y3Qgdm5v
cHMgc3RkaW9fdm5vcHMgPSB7Cj4gLQkudm9wX3dyaXRlID0gc3RkaW9fd3JpdGUsCj4gLQkudm9w
X3JlYWQgPSBzdGRpb19yZWFkLAo+IC0JLnZvcF9nZXRhdHRyID0gc3RkaW9fZ2V0YXR0ciwKPiAr
CXN0ZGlvX29wZW4sCQkvKiBvcGVuICovCj4gKwlzdGRpb19jbG9zZSwJCS8qIGNsb3NlICovCj4g
KwlzdGRpb19yZWFkLAkJLyogcmVhZCAqLwo+ICsJc3RkaW9fd3JpdGUsCQkvKiB3cml0ZSAqLwo+
ICsJc3RkaW9fc2VlaywJCS8qIHNlZWsgKi8KPiArCXN0ZGlvX2lvY3RsLAkJLyogaW9jdGwgKi8K
PiArCXN0ZGlvX2ZzeW5jLAkJLyogZnN5bmMgKi8KPiArCXN0ZGlvX3JlYWRkaXIsCQkvKiByZWFk
ZGlyICovCj4gKwlzdGRpb19sb29rdXAsCQkvKiBsb29rdXAgKi8KPiArCXN0ZGlvX2NyZWF0ZSwJ
CS8qIGNyZWF0ZSAqLwo+ICsJc3RkaW9fcmVtb3ZlLAkJLyogcmVtb3ZlICovCj4gKwlzdGRpb19y
ZW5hbWUsCQkvKiByZW1hbWUgKi8KPiArCXN0ZGlvX21rZGlyLAkJLyogbWtkaXIgKi8KPiArCXN0
ZGlvX3JtZGlyLAkJLyogcm1kaXIgKi8KPiArCXN0ZGlvX2dldGF0dHIsCQkvKiBnZXRhdHRyICov
Cj4gKwlzdGRpb19zZXRhdHRyLAkJLyogc2V0YXR0ciAqLwo+ICsJc3RkaW9faW5hY3RpdmUsCQkv
KiBpbmFjdGl2ZSAqLwo+ICsJc3RkaW9fdHJ1bmNhdGUsCQkvKiB0cnVuY2F0ZSAqLwo+ICsJc3Rk
aW9fbGluaywJCS8qIGxpbmsgKi8KPiArCSh2bm9wX2NhY2hlX3QpIE5VTEwsIC8qIGFyYyAqLwo+
ICsJc3RkaW9fZmFsbG9jYXRlLAkvKiBmYWxsb2NhdGUgKi8KPiArCXN0ZGlvX3JlYWRsaW5rLAkJ
LyogcmVhZCBsaW5rICovCj4gKwlzdGRpb19zeW1saW5rLAkJLyogc3ltYm9saWMgbGluayAqLwo+
ICB9Owo+ICAKPiAgc3RhdGljIHN0cnVjdCB2bm9kZSBzdGRpb192bm9kZSA9IHsKPiAKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 17:06:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 17:06:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5CGO-00089S-1d; Tue, 03 Sep 2019 17:06:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=cx96=W6=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5CGN-00089D-6n
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 17:06:39 +0000
X-Inumbo-ID: 2f7021ea-ce6d-11e9-ab9b-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 2f7021ea-ce6d-11e9-ab9b-12813bfff9fa;
 Tue, 03 Sep 2019 17:06:36 +0000 (UTC)
IronPort-SDR: I+fHX3bLUuWRAxA/4j3zEnZ15WQGM7IGNzt6uRB1iroj42AvYW/2odOSKGyc57qnSNQRBS7Qg1
 C9VWUOcPP2wA==
IronPort-PHdr: =?us-ascii?q?9a23=3ACDX4Ih0lSuOT+mg7smDT+DRfVm0co7zxezQtwd?=
 =?us-ascii?q?8ZseMeK/ad9pjvdHbS+e9qxAeQG9mCsbQd1LGd7PGocFdDyK7JiGoFfp1IWk?=
 =?us-ascii?q?1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBA?=
 =?us-ascii?q?j0OxZrKeTpAI7SiNm82/yv95HJbAhEmSSxbalvIBi0owjducsbjI9/Iast1x?=
 =?us-ascii?q?XFpWdFdf5Lzm1yP1KTmBj85sa0/JF99ilbpuws+c1dX6jkZqo0VbNXAigoPG?=
 =?us-ascii?q?Az/83rqALMTRCT6XsGU2UZiQRHDg7Y5xznRJjxsy/6tu1g2CmGOMD9UL45VS?=
 =?us-ascii?q?i+46ptVRTlkzkMOSIn/27Li8xwlKNbrwynpxxj2I7ffYWZOONjcq/BYd8WQG?=
 =?us-ascii?q?xMVdtTWSNcGIOxd5YBAfQPPehYrIfzqVUBohS8CgawC+3i0SNIhmbs0KEmz+?=
 =?us-ascii?q?gsHwPL0Qo9FNwOqnTUq9D1Ob8MXOCy16nI0TTDb/VL0jn79YjIag0hquyLUL?=
 =?us-ascii?q?1sdsrR0lUvFwLDjlmKrYzlIiuV1vkWvmeH9OpsT/qvi3M8pA1ruDivwd4hh4?=
 =?us-ascii?q?/UjYwW0lDJ7Th1zYkoKdGiS0N2YcSoHIVOuyyYLYd7TNsuT3xrtSs50LEKp5?=
 =?us-ascii?q?+2cDIUxJkowxPTceGLfoqO7xn+TuieOy14i2hgeL+nghay9lWvxfPkW8mv1V?=
 =?us-ascii?q?ZKsjJFkt7RtnARzxDT6taISv96/kq5xzaP0hrc6uBAIUwuiaXbMIQtwqYtlp?=
 =?us-ascii?q?UIq0jDBCj2lF33jK+QaEok5vCl5/nob7n7vJORNI95hhvgPqgwmMGzG+o1Ph?=
 =?us-ascii?q?ALX2eB+OS80LPj/Vf+QLVPlvA5jq7ZsIvGJcQaoK61GQtV0ps76xaiFDqpzM?=
 =?us-ascii?q?8YkWMfLFJYYx2LlZLpO1bWLPDiEfi/m0iskCtsx/3eO73hA5PNLnnEkLf6ZL?=
 =?us-ascii?q?py9lBTyBQtwtBb/J9UDrABIOnvWk/qrtDZAQE2Mwquz+bgEtV92ZsUWXiTDa?=
 =?us-ascii?q?+BLKPSrViI6/oxI+mIfoAapS7yJOIj5/Hzl382h14dcbOy0pQNdX+4GfVmI1?=
 =?us-ascii?q?iCbHr3ntcBDHoFshAkQ+P2k12OSyNTZ26pUK4m/DE7D9HuMYCWeISkjPmo2i?=
 =?us-ascii?q?uhE5xhTMtqLXGxJje3J9vVAbZEPDyWK8NWmzoIT7WgDYUo2RavqSfh16draO?=
 =?us-ascii?q?Pf4WsFrZilzt8jo6WZkBA09DtvSsiQzWyJZ2V1hX8TAS872uZ4u0M3ggOG0K?=
 =?us-ascii?q?55hOcdGdFN6vdhVgYhKYWa3+F8TdfoVVSSUM2OTQONRc66ADd5as8p3pdaaE?=
 =?us-ascii?q?FmB9SkyBTexzeCCKRTj6GBQoYzpPGPl0PtLtpwni6VnJIqiEMrF44WbTWr?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CACwCmnG5d/wPjVY1lHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MIUCASKoQhiHyHfiWbFQkBAQE6AQIBAYQ/AoMZOBMCAwgBAQUBAQE?=
 =?us-ascii?q?BAQYEAWyFOoI6KQGCZwEFI2YLGAICJgICVwYBDAYCAQGDHoIPqmSBMoVKgzK?=
 =?us-ascii?q?BSYEMKI1QP4ERJwyCXz6ERIMLglgElgiWEQeCImIEk28hgjOLLCeKYI12miA?=
 =?us-ascii?q?4IYFYMxqDX4JOFxWOED0BATEBgQUBAY8+AQE?=
X-IPAS-Result: =?us-ascii?q?A2CACwCmnG5d/wPjVY1lHAEBAQQBAQcEAQGBZ4MIUCASK?=
 =?us-ascii?q?oQhiHyHfiWbFQkBAQE6AQIBAYQ/AoMZOBMCAwgBAQUBAQEBAQYEAWyFOoI6K?=
 =?us-ascii?q?QGCZwEFI2YLGAICJgICVwYBDAYCAQGDHoIPqmSBMoVKgzKBSYEMKI1QP4ERJ?=
 =?us-ascii?q?wyCXz6ERIMLglgElgiWEQeCImIEk28hgjOLLCeKYI12miA4IYFYMxqDX4JOF?=
 =?us-ascii?q?xWOED0BATEBgQUBAY8+AQE?=
X-IronPort-AV: E=Sophos;i="5.64,463,1559509200"; 
   d="scan'208";a="4696883"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 03 Sep 2019 20:06:31 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6BA6F1A6018A;
 Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id pXcYAnUon4_a; Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 5054C1A601E4;
 Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id bBTxZbqJwhim; Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.26.249.17])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 372271A6018A;
 Tue,  3 Sep 2019 20:06:31 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190903114908.26072-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <c6c081d3-06d4-318a-0063-33a7b03174a7@cs.pub.ro>
Date: Tue, 3 Sep 2019 20:06:30 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903114908.26072-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/vfscore: Add missing
 vnop operations to stdio
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBWbGFkIQoKUmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5w
dWIucm8+CgpPbiA5LzMvMTkgMjo0OSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdy
b3RlOgo+IE1vc3Qgb2YgdGhlIHZub3Agb3BlcmF0aW9ucyBhcmUgbWlzc2luZyBmcm9tIHRoZSBz
dGRpby4gVGhpcyBjYXVzZXMgYSBwYWdlIGZhdWx0Cj4gd2hlbiBjYWxsaW5nIGZ1bmN0aW9uIHN1
Y2ggYXMgbHNlZWsgb24gc3RkaW8uIFRvIHNvbHZlIHRoaXMgd2UgcmVnaXN0ZXIgdGhlCj4gbWlz
c2luZyBvcGVyYXRpb24uCj4gCj4gU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgo+IC0tLQo+ICBsaWIvdmZzY29yZS9z
dGRpby5jIHwgNDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t
Cj4gIDEgZmlsZSBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+IAo+
IGRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9zdGRpby5jIGIvbGliL3Zmc2NvcmUvc3RkaW8uYwo+
IGluZGV4IDA4MzM1MzY3Li45NTM2OTk4YyAxMDA2NDQKPiAtLS0gYS9saWIvdmZzY29yZS9zdGRp
by5jCj4gKysrIGIvbGliL3Zmc2NvcmUvc3RkaW8uYwo+IEBAIC00MSw2ICs0MSw4IEBACj4gICNp
bmNsdWRlIDx2ZnNjb3JlL3Zub2RlLmg+Cj4gICNpbmNsdWRlIDx1bmlzdGQuaD4KPiAgI2luY2x1
ZGUgPHZmc2NvcmUvdWlvLmg+Cj4gKyNpbmNsdWRlIDx2ZnNjb3JlL3Zub2RlLmg+Cj4gKyNpbmNs
dWRlIDx2ZnNjb3JlL21vdW50Lmg+Cj4gIAo+ICBzdGF0aWMgaW50IF9fd3JpdGVfZm4odm9pZCAq
ZHN0IF9fdW51c2VkLCB2b2lkICpzcmMsIHNpemVfdCAqY250KQo+ICB7Cj4gQEAgLTEyNywxMCAr
MTI5LDUwIEBAIHN0ZGlvX2dldGF0dHIoc3RydWN0IHZub2RlICp2bm9kZSBfX3VudXNlZCwgc3Ry
dWN0IHZhdHRyICphdHRyIF9fdW51c2VkKQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gKyNkZWZp
bmUgc3RkaW9fb3BlbgkoKHZub3Bfb3Blbl90KXZmc2NvcmVfbnVsbG9wKQo+ICsjZGVmaW5lIHN0
ZGlvX2Nsb3NlCSgodm5vcF9jbG9zZV90KXZmc2NvcmVfbnVsbG9wKQo+ICsjZGVmaW5lIHN0ZGlv
X3NlZWsJKCh2bm9wX3NlZWtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9f
aW9jdGwJKCh2bm9wX2lvY3RsX3QpdmZzY29yZV9udWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9fZnN5
bmMJKCh2bm9wX2ZzeW5jX3QpdmZzY29yZV92b3BfbnVsbG9wKQo+ICsjZGVmaW5lIHN0ZGlvX3Jl
YWRkaXIJKCh2bm9wX3JlYWRkaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gKyNkZWZpbmUgc3Rk
aW9fbG9va3VwCSgodm5vcF9sb29rdXBfdCl2ZnNjb3JlX251bGxvcCkKPiArI2RlZmluZSBzdGRp
b19jcmVhdGUJKCh2bm9wX2NyZWF0ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2RlZmluZSBz
dGRpb19yZW1vdmUJKCh2bm9wX3JlbW92ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2RlZmlu
ZSBzdGRpb19yZW5hbWUJKCh2bm9wX3JlbmFtZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2Rl
ZmluZSBzdGRpb19ta2RpcgkoKHZub3BfbWtkaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gKyNk
ZWZpbmUgc3RkaW9fcm1kaXIJKCh2bm9wX3JtZGlyX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICsj
ZGVmaW5lIHN0ZGlvX3NldGF0dHIJKCh2bm9wX3NldGF0dHJfdCl2ZnNjb3JlX3ZvcF9lcGVybSkK
PiArI2RlZmluZSBzdGRpb19pbmFjdGl2ZQkoKHZub3BfaW5hY3RpdmVfdCl2ZnNjb3JlX3ZvcF9u
dWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9fdHJ1bmNhdGUJKCh2bm9wX3RydW5jYXRlX3QpdmZzY29y
ZV92b3BfbnVsbG9wKQo+ICsjZGVmaW5lIHN0ZGlvX2xpbmsJKCh2bm9wX2xpbmtfdCl2ZnNjb3Jl
X3ZvcF9lcGVybSkKPiArI2RlZmluZSBzdGRpb19mYWxsb2NhdGUJKCh2bm9wX2ZhbGxvY2F0ZV90
KXZmc2NvcmVfdm9wX251bGxvcCkKPiArI2RlZmluZSBzdGRpb19yZWFkbGluawkoKHZub3BfcmVh
ZGxpbmtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCj4gKyNkZWZpbmUgc3RkaW9fc3ltbGluawkoKHZu
b3Bfc3ltbGlua190KXZmc2NvcmVfdm9wX251bGxvcCkKPiArCj4gIHN0YXRpYyBzdHJ1Y3Qgdm5v
cHMgc3RkaW9fdm5vcHMgPSB7Cj4gLQkudm9wX3dyaXRlID0gc3RkaW9fd3JpdGUsCj4gLQkudm9w
X3JlYWQgPSBzdGRpb19yZWFkLAo+IC0JLnZvcF9nZXRhdHRyID0gc3RkaW9fZ2V0YXR0ciwKPiAr
CXN0ZGlvX29wZW4sCQkvKiBvcGVuICovCj4gKwlzdGRpb19jbG9zZSwJCS8qIGNsb3NlICovCj4g
KwlzdGRpb19yZWFkLAkJLyogcmVhZCAqLwo+ICsJc3RkaW9fd3JpdGUsCQkvKiB3cml0ZSAqLwo+
ICsJc3RkaW9fc2VlaywJCS8qIHNlZWsgKi8KPiArCXN0ZGlvX2lvY3RsLAkJLyogaW9jdGwgKi8K
PiArCXN0ZGlvX2ZzeW5jLAkJLyogZnN5bmMgKi8KPiArCXN0ZGlvX3JlYWRkaXIsCQkvKiByZWFk
ZGlyICovCj4gKwlzdGRpb19sb29rdXAsCQkvKiBsb29rdXAgKi8KPiArCXN0ZGlvX2NyZWF0ZSwJ
CS8qIGNyZWF0ZSAqLwo+ICsJc3RkaW9fcmVtb3ZlLAkJLyogcmVtb3ZlICovCj4gKwlzdGRpb19y
ZW5hbWUsCQkvKiByZW1hbWUgKi8KPiArCXN0ZGlvX21rZGlyLAkJLyogbWtkaXIgKi8KPiArCXN0
ZGlvX3JtZGlyLAkJLyogcm1kaXIgKi8KPiArCXN0ZGlvX2dldGF0dHIsCQkvKiBnZXRhdHRyICov
Cj4gKwlzdGRpb19zZXRhdHRyLAkJLyogc2V0YXR0ciAqLwo+ICsJc3RkaW9faW5hY3RpdmUsCQkv
KiBpbmFjdGl2ZSAqLwo+ICsJc3RkaW9fdHJ1bmNhdGUsCQkvKiB0cnVuY2F0ZSAqLwo+ICsJc3Rk
aW9fbGluaywJCS8qIGxpbmsgKi8KPiArCSh2bm9wX2NhY2hlX3QpIE5VTEwsIC8qIGFyYyAqLwo+
ICsJc3RkaW9fZmFsbG9jYXRlLAkvKiBmYWxsb2NhdGUgKi8KPiArCXN0ZGlvX3JlYWRsaW5rLAkJ
LyogcmVhZCBsaW5rICovCj4gKwlzdGRpb19zeW1saW5rLAkJLyogc3ltYm9saWMgbGluayAqLwo+
ICB9Owo+ICAKPiAgc3RhdGljIHN0cnVjdCB2bm9kZSBzdGRpb192bm9kZSA9IHsKPiAKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 17:29:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 17:29:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Ccg-0001T1-JL; Tue, 03 Sep 2019 17:29:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i5Ccf-0001Sw-0R
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 17:29:41 +0000
X-Inumbo-ID: 6858f2cc-ce70-11e9-b299-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6858f2cc-ce70-11e9-b299-bc764e2007e4;
 Tue, 03 Sep 2019 17:29:39 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id r17so547101wme.0
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 10:29:39 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=op5GCmxPe1QJ7yrngcgUkBZwkCxWgjGBn04gELYgK/g=;
 b=Kije3oMiUUeCsNrN/D0HevBgGo0mfYVuK0wHfXZpiQ9ZcS4pjsgwIx6HBR3tJc/hv1
 UXWxFA53rcykiFjwfFFyfCzIX8t4FUSJWO7ohhB2YP9tJS8j0nTEi43E7qtJP2q3C10A
 Ms7CKQ7+JxjS8NwH9QvmRIOJEcJS5QsSOVR2/kBLQLfwWz8WX5Eqs/5NYHXyp6/J6Om0
 2B8gyEMDWEH8bBoi2RZb57a5MEWyoecruVcQHp5zDKxSmpyjdJsAmeuHlSL5t5rNG2Y/
 68CH+sWz/zqR5MmqVZ2QXKvDkBynZ89VA0C3EUSrj5FQOHMqwAkZcN+rGFBX7XrBw+t5
 DaUw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=op5GCmxPe1QJ7yrngcgUkBZwkCxWgjGBn04gELYgK/g=;
 b=cYwpMfjiqRhvXVxFD+pqOtfNbY9iN9anXvDptLMSeyu6bmhrOgwgymw4PHAs3O5/hi
 apJGMSwX8QiamB38PbBznc94NAGSy3RJgkQdfCJf1RSsavOQCvLakMwgYO6bgcaafhVH
 yJ6hIf7ssGq1BeZVYtwinlAqAigEhMSVbrhGtX/CLVoMQeiMBmu0i3Q4aX4EKNxy/UBt
 t5kBt+68u30BTKiPPc1xoSRco4rJ+0qBTsKmK211IsOKgHSOvEuRa0Jtvnvt5xk/gQuS
 AhIiS0EPrkefmQ9jiqdL5gSa9OKygD4u8JicL7wnfpuS1/60kau6KLX2EiRv1fFyv3uT
 Fj6A==
X-Gm-Message-State: APjAAAWhbPte76IJepnXY8t04HVJJyIGe7Rd1zMUQvP1HnYPtHCcu9Ql
 RuOfGm0Qe7F9joseowCj2MY=
X-Google-Smtp-Source: APXvYqxq+zYz7kDlB0s4+mv+akeS6Vn7xKZzuzBWMMUtBvkjjL9IreDHdT4pETktL3W9U+GSvjCBlg==
X-Received: by 2002:a1c:be04:: with SMTP id o4mr541906wmf.60.1567531778913;
 Tue, 03 Sep 2019 10:29:38 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id t7sm13759359wrr.37.2019.09.03.10.29.37
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 10:29:38 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190903122141.29625-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <8aee7823-aa68-4013-2491-3b127fbfadda@gmail.com>
Date: Tue, 3 Sep 2019 20:29:37 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903122141.29625-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH 1/1] Add clock_getres
 and clock_settime stubs
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBWbGFkIQoKUmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5w
dWIucm8+CgpPbiA5LzMvMTkgMzoyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdy
b3RlOgo+IFNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFk
b2l1QHN0dWQuYWNzLnVwYi5ybz4KPiAtLS0KPiAgdGltZS5jIHwgMTAgKysrKysrKysrKwo+ICAx
IGZpbGUgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS90aW1lLmMg
Yi90aW1lLmMKPiBpbmRleCA5NGU4MDk3Li5hNzk2OTFjIDEwMDY0NAo+IC0tLSBhL3RpbWUuYwo+
ICsrKyBiL3RpbWUuYwo+IEBAIC0xMzcsNiArMTM3LDExIEBAIHVuc2lnbmVkIGludCBzbGVlcCh1
bnNpZ25lZCBpbnQgc2Vjb25kcykKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtpbnQgY2xvY2tf
Z2V0cmVzKGNsb2NraWRfdCBjbGtfaWQgX191bnVzZWQsIHN0cnVjdCB0aW1lc3BlYyAqcmVzIF9f
dW51c2VkKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgaW50IGNsb2NrX2dldHRpbWUo
Y2xvY2tpZF90IGNsa19pZCBfX3VudXNlZCwgc3RydWN0IHRpbWVzcGVjICp0cCBfX3VudXNlZCkK
PiAgewo+ICAJX19uc2VjIG5vdzsKPiBAQCAtMTYyLDMgKzE2Nyw4IEBAIGludCBjbG9ja19nZXR0
aW1lKGNsb2NraWRfdCBjbGtfaWQgX191bnVzZWQsIHN0cnVjdCB0aW1lc3BlYyAqdHAgX191bnVz
ZWQpCj4gIAl0cC0+dHZfbnNlYyA9IHVrYXJjaF90aW1lX3N1YnNlYyhub3cpOwo+ICAJcmV0dXJu
IDA7Cj4gIH0KPiArCj4gK2ludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQgX191bnVz
ZWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHAgX191bnVzZWQpCj4gK3sKPiArCXJldHVybiAw
Owo+ICt9Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 03 17:50:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 03 Sep 2019 17:50:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Cwg-0003Xe-BO; Tue, 03 Sep 2019 17:50:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1Prv=W6=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i5Cwf-0003XZ-8A
 for minios-devel@lists.xen.org; Tue, 03 Sep 2019 17:50:21 +0000
X-Inumbo-ID: 4bdf55ac-ce73-11e9-b299-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4bdf55ac-ce73-11e9-b299-bc764e2007e4;
 Tue, 03 Sep 2019 17:50:20 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id j16so18433600wrr.8
 for <minios-devel@lists.xen.org>; Tue, 03 Sep 2019 10:50:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=CpLv1z+ISwlEuSjU/OItxLMmd0i5Q66prk/oPZyfoJ0=;
 b=JcOD78o7+npFKMkDVxz8ZpPcwpO8igMzTSzIcWHuTPO7c3u5quLHBHLfRIdnqt97dl
 QDw4am0+IYgNW3gUBNrnYGMXkFVaedqyLM3gUxMASYEQjkzVajWUGuscUWrgPT/7M5L3
 7i3hhW5I0dVyKDsfEcUHCf/aBk9KoV68HzRD3nsGjMBuyRYcPlFZeZNqpy/UYBCILCXi
 3l+fNVZX/xRfQzvBYO9by4Ko/zjeXHwnNAI0+BOgpZmvJ6CF6XJrQiFo2YwmZTVF/0Re
 kCjRPOF8Rw+eTs4OUSJOUfx+34WT+kRyRqiZKivPu7Z+Lr4yzFVD+yEiuM457vCjVkAl
 4rQQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=CpLv1z+ISwlEuSjU/OItxLMmd0i5Q66prk/oPZyfoJ0=;
 b=SSg87nWFPYOLBkteXIZj3nr9LNGeNw3gSAcQm0KoA/HCJ7mxFgY64S2uKsIZtJtX+p
 fFf+h+SOkH+ycMA39o0P/ZI+Env7FUtFk6EgMCC/eHnOGOX6+k9froZlN0tXF05O/Ada
 9Ikp7Po3CgwwegNAUMR65zOBjKlMto/XpCnm/vKiECkUd4w8q2zTaW4e0INxf8IOIm6F
 2VIR9M3syij5aPVLGbD9uMIR4t30QUC9XoP/H9hSJoxYhMN4vpN03skbcHYPDUOWd5Md
 e1XXpGede7aMvZboLrxBKcE/ujVUQMKPQGV86PRUefLoWgWIIYMaMzir9ylegkkv4zWy
 ZrOw==
X-Gm-Message-State: APjAAAXrWSdXNPqMRFWro0j1MXHZe07z8kkmMOMLbBcdGnD39HJjI6sN
 6J0sgfDRESFXshXY4ZcdihRAwjXE
X-Google-Smtp-Source: APXvYqw/57A2Yzc9iaGmh2LSNyoOFABWhaWyX4JrABj3quPxW3YYpvxB6+GPKpryTnc6frah/WrtCg==
X-Received: by 2002:a5d:434f:: with SMTP id u15mr40647896wrr.16.1567533019596; 
 Tue, 03 Sep 2019 10:50:19 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id i73sm469182wmg.33.2019.09.03.10.50.18
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Tue, 03 Sep 2019 10:50:18 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190903094756.24858-1-felipe.huici@neclab.eu>
 <20190903094756.24858-2-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <ae25cd66-4ee6-9e63-26f1-e8bef548201e@gmail.com>
Date: Tue, 3 Sep 2019 20:50:17 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190903094756.24858-2-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBNEWLIB PATCH v2 1/1] file.c: Add
 realpath() stub.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBGZWxpcGUhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNz
LnB1Yi5ybz4KCgpPbiA5LzMvMTkgMTI6NDcgUE0sIEZlbGlwZSBIdWljaSB3cm90ZToKPiBBZGQg
c3R1YiBmb3IgcmVhbHBhdGgoKSBuZWVkZWQgYnkgdGhlIHVwY29taW5nIE1pY3JvcHl0aG9uIHBv
cnQuCj4gCj4gU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFi
LmV1Pgo+IC0tLQo+ICBmaWxlLmMgfCA2ICsrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwgNiBpbnNl
cnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL2ZpbGUuYyBiL2ZpbGUuYwo+IGluZGV4IDNmZGY5
OWEuLjE1NjY2NzkgMTAwNjQ0Cj4gLS0tIGEvZmlsZS5jCj4gKysrIGIvZmlsZS5jCj4gQEAgLTQ3
LDYgKzQ3LDcgQEAKPiAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gICNpbmNsdWRlIDxlcnJuby5o
Pgo+ICAjdW5kZWYgZXJybm8KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICBleHRlcm4gaW50IGVy
cm5vOwo+ICAKPiAgI2RlZmluZSBTVERJTl9GSUxFTk8gICAgMCAgICAgICAvKiBzdGFuZGFyZCBp
bnB1dCBmaWxlIGRlc2NyaXB0b3IgKi8KPiBAQCAtMTE3LDMgKzExOCw4IEBAIGludCBwaXBlKGlu
dCBwaXBlZmRbMl0gX191bnVzZWQpCj4gIHsKPiAgCXJldHVybiAwOwo+ICB9Cj4gKwo+ICtjaGFy
ICpyZWFscGF0aChjb25zdCBjaGFyICpyZXN0cmljdCBmaWxlX25hbWUsIGNoYXIgKnJlc3RyaWN0
IHJlc29sdmVkX25hbWUpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 06:59:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 06:59:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5PG2-0005M1-17; Wed, 04 Sep 2019 06:59:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5PG0-0005Lm-97
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 06:59:08 +0000
X-Inumbo-ID: 7aa2d4d6-cee1-11e9-abab-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 7aa2d4d6-cee1-11e9-abab-12813bfff9fa;
 Wed, 04 Sep 2019 06:59:03 +0000 (UTC)
IronPort-SDR: NV/3bz26cpVlaivESMYhuO5Xnt7JguAqItOAqtcjMfc+ypMVhb1kADTIuxNZl1QQxkZ+Q/pU45
 yY9Ml0MePMDQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AUHWVAh/igmq4PP9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B30u8cTK2v8tzYMVDF4r011RmVBN+dsq0YwLOO4ujJYi8p2d65qncMcZhBBV?=
 =?us-ascii?q?cuqP49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx?=
 =?us-ascii?q?7xKRR6JvjvGo7Vks+7y/2+94fcbglVmjaxe65+IRe5oAneq8UanY9vIbstxx?=
 =?us-ascii?q?XUpXdFZ/5Yzn5yK1KJmBb86Maw/Jp9/ClVpvks6c1OX7jkcqohVbBXAygoPG?=
 =?us-ascii?q?4z5M3wqBnMVhCP6WcGUmUXiRVHHQ7I5wznU5jrsyv6su192DSGPcDzULs5Vy?=
 =?us-ascii?q?iu47ttRRT1jioMKjw3/3zNisFojKxVvg+vqRJ8zYDTe4yZKOZyc7nBcd4AWW?=
 =?us-ascii?q?ZNQsBcXDFBDIOmaIsPCvIMMPhfr4nmu1sOrB2+DhSqCuPy0j9Im2L90Kom3O?=
 =?us-ascii?q?QmCgHGwA0gH9QUvHTQsdX1LLoSXPupw6nT1znDd+5W1izn5IjSdRAsuPeBVq?=
 =?us-ascii?q?9zf8rJ0UQjCgzIgkiKpYHmPz6ZzPoBv3aZ4uZ6W++jk3Mrpg5srjS1xcohip?=
 =?us-ascii?q?PFipwbx13K7yl13Yk4KcO+RUVme9CrCoFQuDufN4ZuR8MiRHxntzgix70dvJ?=
 =?us-ascii?q?67YDAKyJM6xx7Dc/CHc5aH4hbkVOuJPzd4gWhqeLO7hxqo7Ueg0ffwVtGp0F?=
 =?us-ascii?q?lRtCZFiN7MumgM1xzV9MeHVuNw8lqu1DqSzQze6eFJLVoqmabFKZMt2LA9mo?=
 =?us-ascii?q?IWsUvZHy/2nEv2jLWRdkUh4uWn9+PnYq76pp+dMY94kAX+Mrk2msyiGuk3Lh?=
 =?us-ascii?q?MOU3KD+eShz7Lv51f5QLJSgv0sjqbZqIzaJdgcpqOhBg9V04Aj6xe4Dze9yd?=
 =?us-ascii?q?gXgGcILExbdxKDlIXpP1DOIOvkDfekmVitnylkx/bcMr3mGJXNIWDJkK39cr?=
 =?us-ascii?q?Zl905c1A0zwMhR551KDrEBIerzVVHruNzYEx85MhC7w+f8BdV7yIwRRWaPDb?=
 =?us-ascii?q?WCP6/Ir1CI+7FnH+7ZYY4TuTHmbvQo+fPqpXs4gkMGO7mk290Qcn/rMO5hJh?=
 =?us-ascii?q?CyZmHwg9FJNXoSo0JqR+vxlFyEFzpOf2uaVLl6/iwxTpihW9SQDruxiaCMiX?=
 =?us-ascii?q?/oVqZdYXpLXwiB?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CWBQA7YG9d/wPjVY1lHgEGBwaBZ4N?=
 =?us-ascii?q?YIBKNR6M6CQEBAToBAgEBhD+DHTgTAgMIAQEFAQEBAQEGBAFshTqCOiKDbk+?=
 =?us-ascii?q?EJIIPqwSFSoMsgUmBNIcfhjE/iXKFFgSMTok+lhUHgiJiBJNqJ5hqqBo4IYF?=
 =?us-ascii?q?YMxqDYIIWAQEBjnA9AQGBNwEBjn8BAQ?=
X-IPAS-Result: =?us-ascii?q?A2CWBQA7YG9d/wPjVY1lHgEGBwaBZ4NYIBKNR6M6CQEBA?=
 =?us-ascii?q?ToBAgEBhD+DHTgTAgMIAQEFAQEBAQEGBAFshTqCOiKDbk+EJIIPqwSFSoMsg?=
 =?us-ascii?q?UmBNIcfhjE/iXKFFgSMTok+lhUHgiJiBJNqJ5hqqBo4IYFYMxqDYIIWAQEBj?=
 =?us-ascii?q?nA9AQGBNwEBjn8BAQ?=
X-IronPort-AV: E=Sophos;i="5.64,465,1559509200"; 
   d="scan'208";a="4697866"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 09:58:59 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3D5AD1A600E4;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 2zptpzlSBVLZ; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 222EF1A60197;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id V9qat4lgccWI; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id F388F1A600E4;
 Wed,  4 Sep 2019 09:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 09:58:55 +0300
Message-Id: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/1] Changes for supporting
 Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2Ugb2JzZXJ2ZWQgdGhhdCBhIGJlc3QgcHJhY3RpY2UgZm9yIHN0dWJzIGlzIHRvIHJldHVybiBl
cnJvcnMsIG90aGVyd2lzZSwgd2hlbgp0aGV5IGhhdmUgc2lkZSBlZmZlY3RzIHRoZW4gdGhlIGNh
bGxlZXMgZGVwZW5kIG9uIHRob3NlIGVmZmVjdHMuIEZvbGxvd2luZyB0aGlzCmxvZ2ljLCB3ZSBy
ZXZpc2l0ZWQgc29tZSBvZiBvdXIgbmV3bGliIGdsdWUgc3R1YnMgd2hpY2ggZ2VuZXJhdGVkIGNy
YXNoZXMKZHVyaW5nIHRoZSBQeXRob24gMiB1bml0IHRlc3RzLgoKQ2hhbmdlcyBzaW5jZSB2MToK
LSBLZWVwIG9ubHkgcGF0Y2ggMSBzaW5jZSBwYXRjaCAyIHdhcyBhY2NlcHRlZAotIFNldCBlcnJu
byBmb3IgdGltZXMoKSB3aGVuIGZhaWxpbmcKCkNvc3RpbiBMdXB1ICgxKToKICBSZXZpc2l0IHBy
b2Nlc3MuYyBmdW5jdGlvbnMKCiBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyArKysrKysrKysr
KwogcHJvY2Vzcy5jICAgICAgICAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrLS0tLS0tLS0tLS0tLQogc2lnbmFsLmMgICAgICAgICAgICAgfCAgMTggKysrKysKIHRpbWUu
YyAgICAgICAgICAgICAgIHwgICA2ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDE4MiBpbnNlcnRpb25z
KCspLCA1MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VrL3Byb2Nl
c3MuaAoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 06:59:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 06:59:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5PG1-0005Lw-VZ; Wed, 04 Sep 2019 06:59:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5PG0-0005Ln-9U
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 06:59:08 +0000
X-Inumbo-ID: 7aa2d4d6-cee1-11e9-abab-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 7aa2d4d6-cee1-11e9-abab-12813bfff9fa;
 Wed, 04 Sep 2019 06:59:03 +0000 (UTC)
IronPort-SDR: NV/3bz26cpVlaivESMYhuO5Xnt7JguAqItOAqtcjMfc+ypMVhb1kADTIuxNZl1QQxkZ+Q/pU45
 yY9Ml0MePMDQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AUHWVAh/igmq4PP9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B30u8cTK2v8tzYMVDF4r011RmVBN+dsq0YwLOO4ujJYi8p2d65qncMcZhBBV?=
 =?us-ascii?q?cuqP49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx?=
 =?us-ascii?q?7xKRR6JvjvGo7Vks+7y/2+94fcbglVmjaxe65+IRe5oAneq8UanY9vIbstxx?=
 =?us-ascii?q?XUpXdFZ/5Yzn5yK1KJmBb86Maw/Jp9/ClVpvks6c1OX7jkcqohVbBXAygoPG?=
 =?us-ascii?q?4z5M3wqBnMVhCP6WcGUmUXiRVHHQ7I5wznU5jrsyv6su192DSGPcDzULs5Vy?=
 =?us-ascii?q?iu47ttRRT1jioMKjw3/3zNisFojKxVvg+vqRJ8zYDTe4yZKOZyc7nBcd4AWW?=
 =?us-ascii?q?ZNQsBcXDFBDIOmaIsPCvIMMPhfr4nmu1sOrB2+DhSqCuPy0j9Im2L90Kom3O?=
 =?us-ascii?q?QmCgHGwA0gH9QUvHTQsdX1LLoSXPupw6nT1znDd+5W1izn5IjSdRAsuPeBVq?=
 =?us-ascii?q?9zf8rJ0UQjCgzIgkiKpYHmPz6ZzPoBv3aZ4uZ6W++jk3Mrpg5srjS1xcohip?=
 =?us-ascii?q?PFipwbx13K7yl13Yk4KcO+RUVme9CrCoFQuDufN4ZuR8MiRHxntzgix70dvJ?=
 =?us-ascii?q?67YDAKyJM6xx7Dc/CHc5aH4hbkVOuJPzd4gWhqeLO7hxqo7Ueg0ffwVtGp0F?=
 =?us-ascii?q?lRtCZFiN7MumgM1xzV9MeHVuNw8lqu1DqSzQze6eFJLVoqmabFKZMt2LA9mo?=
 =?us-ascii?q?IWsUvZHy/2nEv2jLWRdkUh4uWn9+PnYq76pp+dMY94kAX+Mrk2msyiGuk3Lh?=
 =?us-ascii?q?MOU3KD+eShz7Lv51f5QLJSgv0sjqbZqIzaJdgcpqOhBg9V04Aj6xe4Dze9yd?=
 =?us-ascii?q?gXgGcILExbdxKDlIXpP1DOIOvkDfekmVitnylkx/bcMr3mGJXNIWDJkK39cr?=
 =?us-ascii?q?Zl905c1A0zwMhR551KDrEBIerzVVHruNzYEx85MhC7w+f8BdV7yIwRRWaPDb?=
 =?us-ascii?q?WCP6/Ir1CI+7FnH+7ZYY4TuTHmbvQo+fPqpXs4gkMGO7mk290Qcn/rMO5hJh?=
 =?us-ascii?q?CyZmHwg9FJNXoSo0JqR+vxlFyEFzpOf2uaVLl6/iwxTpihW9SQDruxiaCMiX?=
 =?us-ascii?q?/oVqZdYXpLXwiB?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CWBQA7YG9d/wPjVY1lHgEGBwaBZ4N?=
 =?us-ascii?q?YIBKNR6M6CQEBAToBAgEBhD+DHTgTAgMIAQEFAQEBAQEGBAFshTqCOiKDbk+?=
 =?us-ascii?q?EJIIPqwSFSoMsgUmBNIcfhjE/iXKFFgSMTok+lhUHgiJiBJNqJ5hqqBo4IYF?=
 =?us-ascii?q?YMxqDYIIWAQEBjnA9AQGBNwEBjn8BAQ?=
X-IPAS-Result: =?us-ascii?q?A2CWBQA7YG9d/wPjVY1lHgEGBwaBZ4NYIBKNR6M6CQEBA?=
 =?us-ascii?q?ToBAgEBhD+DHTgTAgMIAQEFAQEBAQEGBAFshTqCOiKDbk+EJIIPqwSFSoMsg?=
 =?us-ascii?q?UmBNIcfhjE/iXKFFgSMTok+lhUHgiJiBJNqJ5hqqBo4IYFYMxqDYIIWAQEBj?=
 =?us-ascii?q?nA9AQGBNwEBjn8BAQ?=
X-IronPort-AV: E=Sophos;i="5.64,465,1559509200"; 
   d="scan'208";a="4697866"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 09:58:59 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3D5AD1A600E4;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 2zptpzlSBVLZ; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 222EF1A60197;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id V9qat4lgccWI; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id F388F1A600E4;
 Wed,  4 Sep 2019 09:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 09:58:55 +0300
Message-Id: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/1] Changes for supporting
 Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2Ugb2JzZXJ2ZWQgdGhhdCBhIGJlc3QgcHJhY3RpY2UgZm9yIHN0dWJzIGlzIHRvIHJldHVybiBl
cnJvcnMsIG90aGVyd2lzZSwgd2hlbgp0aGV5IGhhdmUgc2lkZSBlZmZlY3RzIHRoZW4gdGhlIGNh
bGxlZXMgZGVwZW5kIG9uIHRob3NlIGVmZmVjdHMuIEZvbGxvd2luZyB0aGlzCmxvZ2ljLCB3ZSBy
ZXZpc2l0ZWQgc29tZSBvZiBvdXIgbmV3bGliIGdsdWUgc3R1YnMgd2hpY2ggZ2VuZXJhdGVkIGNy
YXNoZXMKZHVyaW5nIHRoZSBQeXRob24gMiB1bml0IHRlc3RzLgoKQ2hhbmdlcyBzaW5jZSB2MToK
LSBLZWVwIG9ubHkgcGF0Y2ggMSBzaW5jZSBwYXRjaCAyIHdhcyBhY2NlcHRlZAotIFNldCBlcnJu
byBmb3IgdGltZXMoKSB3aGVuIGZhaWxpbmcKCkNvc3RpbiBMdXB1ICgxKToKICBSZXZpc2l0IHBy
b2Nlc3MuYyBmdW5jdGlvbnMKCiBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyArKysrKysrKysr
KwogcHJvY2Vzcy5jICAgICAgICAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrLS0tLS0tLS0tLS0tLQogc2lnbmFsLmMgICAgICAgICAgICAgfCAgMTggKysrKysKIHRpbWUu
YyAgICAgICAgICAgICAgIHwgICA2ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDE4MiBpbnNlcnRpb25z
KCspLCA1MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VrL3Byb2Nl
c3MuaAoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 06:59:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 06:59:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5PG7-0005Mv-33; Wed, 04 Sep 2019 06:59:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5PG5-0005Mc-9W
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 06:59:13 +0000
X-Inumbo-ID: 7d8c8034-cee1-11e9-abab-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 7d8c8034-cee1-11e9-abab-12813bfff9fa;
 Wed, 04 Sep 2019 06:59:08 +0000 (UTC)
IronPort-SDR: vA94M91q0lD5pMnGCnwvylQqRYN2RVvwUvI6xDgNUzelqxy3LvzBMOCDDnIYpA/AhuRP1/tWGv
 q7SVpXalHn1g==
IronPort-PHdr: =?us-ascii?q?9a23=3AlCm2WhPa44JvNpPagTEl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0Iv3yrarrMEGX3/hxlliBBdydt6sezbOJ7+u5AT1IyK3CmUhKSIZLWR?=
 =?us-ascii?q?4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBx?=
 =?us-ascii?q?rwKxd+KPjrFY7OlcS30P2594HObwlSizexfK1+IA+roQjTucQajpZuJro1xx?=
 =?us-ascii?q?DUvnZGZuNayH9yK1mOhRj8/MCw/JBi8yRUpf0s8tNLXLv5caolU7FWFSwqPG?=
 =?us-ascii?q?8p6sLlsxnDVhaP6WAHUmoKiBpIAhPK4w/8U5zsryb1rOt92C2dPc3rUbA5XC?=
 =?us-ascii?q?mp4ql3RBP0jioMKjg0+3zVhMNtlqJWuBKvqQJizYDaY4+bM/hxfq3GcN8GWW?=
 =?us-ascii?q?ZMRNpdWjZdDo+gaYYEEuoPPfxfr4n4v1YDsxy+BRKwBOPuzD9Dm3n43bAi0+?=
 =?us-ascii?q?Q8DArL2xAvH9UVsHTIrdX1Mr0eUeSozKnQ0DXOdO9Z2Szn5IjQbxAuuuuAXa?=
 =?us-ascii?q?h3ccfIz0QkCgDLjk2IpID4MD6Zy/4Bvmub4uZ6S+6jlWwqpxt/rzS328shhZ?=
 =?us-ascii?q?TFipgWx13E7yl13og4KNOiREJmbtOoDp1dvDyAOYRsWMMtWWRotT4/yr0BpJ?=
 =?us-ascii?q?G0YjAHyI8ixx7Dc/yHdJWI4g77WOaRPzh4gHVldaqhhxa360egy+n8WtOo31?=
 =?us-ascii?q?ZRtCZFisTMuWsX2xzJ7ciLUvp9/kG/1jaTzw3f9+5JLV0umafYK5Mt2KA8mo?=
 =?us-ascii?q?QRvEjZECL6gED2g7WXdkUg9Oio8ePnYrD+q5CAMI90kR3+MqUomsClBeQ4Lx?=
 =?us-ascii?q?AOX3WA9Ougz73v51X5QKhRgfEsiKnZt4jWJd4Hqa6hHw9VzoEj5g66Dzen1t?=
 =?us-ascii?q?QYnH4HLElcdB2akYfpJU/BIPTjAPe7glSsiytrx+vcMrzuHJrNKGLPkLD7fb?=
 =?us-ascii?q?Zy80Rc0hY8zchD55JIDbEMOPzzVVH1tNzZFh82LRa4w+b6CNV8yoweWHmCAq?=
 =?us-ascii?q?mHP6zOtV+H/PkgL/OSa48I637BLK0g5vjvimR8lVIDcK2B2ZoMdGv+DvlgZU?=
 =?us-ascii?q?KDbinCmNAEREwNpRY/SqTOlUWfGWpYYG2uXqR64iwjFaqtFsHbW4rrmrvXj3?=
 =?us-ascii?q?TzJYFfem0TUgPEKnzvbYjRA/o=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CxBAA7YG9d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4FugWogEiqNHYkjmDCBZwkBAQE6AQIBAYFLgnQCgxs4EwIDCAEBBQEBAQE?=
 =?us-ascii?q?BBgQBbIU6gjoigm8GeRA/ElcZgldLgg+rBIVKgyyBSYE0hx+DO4J2P4ERgl2?=
 =?us-ascii?q?EfBSGCgSMTiCIABuBA5YVB4IiYgSPJ4RDJ4JjlgeoGjghgVgzGnOCbIJOF44?=
 =?us-ascii?q?lPQEBMYEGAQGMK4JUAQE?=
X-IPAS-Result: =?us-ascii?q?A2CxBAA7YG9d/wPjVY1lHQEBBQEHBQGBZ4FugWogEiqNH?=
 =?us-ascii?q?YkjmDCBZwkBAQE6AQIBAYFLgnQCgxs4EwIDCAEBBQEBAQEBBgQBbIU6gjoig?=
 =?us-ascii?q?m8GeRA/ElcZgldLgg+rBIVKgyyBSYE0hx+DO4J2P4ERgl2EfBSGCgSMTiCIA?=
 =?us-ascii?q?BuBA5YVB4IiYgSPJ4RDJ4JjlgeoGjghgVgzGnOCbIJOF44lPQEBMYEGAQGMK?=
 =?us-ascii?q?4JUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,465,1559509200"; 
   d="scan'208";a="4697867"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 09:58:59 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 47EA01A60185;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id sQ1e3GpuD-a0; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2EFFB1A601A6;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id OBLF7Ultdva0; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 0BF501A60185;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 09:58:56 +0300
Message-Id: <20190904065856.5465-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
References: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/1] Revisit process.c functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCByZXZpc2l0cyB0aGUgZnVuY3Rpb25zIGluIHByb2Nlc3MuYywgcmVkaXN0cmli
dXRlcyBzb21lIG9mIHRoZW0gYW5kCmltcGxlbWVudCB0aGUgb3RoZXJzLiBUaGUgcmVtYWluaW5n
IGZ1bmN0aW9ucyBtYXkgdmVyeSB3ZWxsIGJlIG1vdmVkIGludG8gYW4KaW50ZXJuYWwgInByb2Nl
c3MiIHJlbGF0ZWQgbGlicmFyeSwgYnV0IHdlIHdpbGwgZG8gdGhpcyBhdCBhbm90aGVyIHRpbWUu
IEl0J3MKd29ydGggc2F5aW5nIHRoYXQgd2Ugc2V0IHRoZSBQSUQgb2YgdGhlIHVuaWtlcm5lbCB0
byAxLCBzYXZpbmcgdGhlIFBJRCAwIGZvciBpdHMKInBhcmVudCIsIGFuIGludmlzaWJpbGUgcHJv
Y2VzcyB0aGF0IGlzIGFsc28gbm90IHNob3duIG9uIExpbnV4LgoKUmVkaXN0cmlidXRlZCBmdW5j
dGlvbnM6Ci0ga2lsbCgpIGFuZCBraWxscGcoKSBhcmUgbW92ZWQgdG8gc2lnbmFsLmMKLSB0aW1l
cygpIGlzIG1vdmVkIHRvIHRpbWUuYwoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rp
bi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyArKysrKysr
KysrKwogcHJvY2Vzcy5jICAgICAgICAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrLS0tLS0tLS0tLS0tLQogc2lnbmFsLmMgICAgICAgICAgICAgfCAgMTggKysrKysKIHRp
bWUuYyAgICAgICAgICAgICAgIHwgICA2ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDE4MiBpbnNlcnRp
b25zKCspLCA1MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VrL3By
b2Nlc3MuaAoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWsvcHJvY2Vzcy5oIGIvaW5jbHVkZS91ay9w
cm9jZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyMDhlMwotLS0g
L2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWsvcHJvY2Vzcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8q
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBBdXRob3Jz
OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgorICoKKyAqIENvcHlyaWdodCAo
YykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
ICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9E
SUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworCisjaWZuZGVmIF9fVUtfUFJPQ0VTU19IX18KKyNkZWZp
bmUgX19VS19QUk9DRVNTX0hfXworCisjZGVmaW5lIFVOSUtSQUZUX1BJRCAgICAgIDEKKyNkZWZp
bmUgVU5JS1JBRlRfUFBJRCAgICAgMAorI2RlZmluZSBVTklLUkFGVF9TSUQgICAgICAwCisjZGVm
aW5lIFVOSUtSQUZUX1BHSUQgICAgIDAKKworI2VuZGlmIC8qIF9fVUtfUFJPQ0VTU19IX18gKi8K
ZGlmZiAtLWdpdCBhL3Byb2Nlc3MuYyBiL3Byb2Nlc3MuYwppbmRleCBjNGUzNjY0Li5lMjYxMTBk
IDEwMDY0NAotLS0gYS9wcm9jZXNzLmMKKysrIGIvcHJvY2Vzcy5jCkBAIC0zLDcgKzMsNyBAQAog
ICogbGlibmV3bGliIGdsdWUgY29kZQogICoKICAqIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVs
aXBlLmh1aWNpQG5lY2xhYi5ldT4KLSAqCisgKiAgICAgICAgICBDb3N0aW4gTHVwdSA8Y29zdGlu
Lmx1cHVAY3MucHViLnJvPgogICoKICAqIENvcHlyaWdodCAoYykgMjAxNywgTkVDIEV1cm9wZSBM
dGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzUsMTM0
ICszNSwxOTkgQEAKICAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElG
SUVEIElOIEFOWSBXQVkuCiAgKi8KIAotI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxlcnJu
by5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8dWsvcHJvY2Vzcy5oPgorI2luY2x1ZGUgPHVrL3By
aW50Lmg+CiAjdW5kZWYgZXJybm8KIGV4dGVybiBpbnQgZXJybm87CiAKLWludCBleGVjdmUoY2hh
ciAqbmFtZSBfX3VudXNlZCwgY2hhciAqKmFyZ3YgX191bnVzZWQsIGNoYXIgKiplbnYgX191bnVz
ZWQpCisKK2ludCBmb3JrKHZvaWQpCiB7Ci0JZXJybm8gPSBFTk9NRU07CisJLyogZm9yaygpIGlz
IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSAqLworCWVycm5vID0gRU5PU1lTOwogCXJl
dHVybiAtMTsKIH0KIAotaW50IGV4ZWN2KGNvbnN0IGNoYXIgKnBhdGggX191bnVzZWQsIGNoYXIg
KmNvbnN0IGFyZ3ZbXSBfX3VudXNlZCkKK3N0YXRpYwordm9pZCBleGVjX3dhcm4oY29uc3QgY2hh
ciAqZnVuYywKKwkJY29uc3QgY2hhciAqcGF0aCwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpj
b25zdCBlbnZwW10pCiB7Ci0JcmV0dXJuIDA7Ci19CisJaW50IGk7CiAKLWludCBzeXN0ZW0oY29u
c3QgY2hhciAqY29tbWFuZCBfX3VudXNlZCkKLXsKLQlyZXR1cm4gMDsKLX0KKwl1a19wcl93YXJu
KCIlcygpOiBwYXRoPSVzIiwgZnVuYywgcGF0aCk7CiAKLUZJTEUgKnBvcGVuKGNvbnN0IGNoYXIg
KmNvbW1hbmQgX191bnVzZWQsIGNvbnN0IGNoYXIgKnR5cGUgX191bnVzZWQpCi17Ci0JcmV0dXJu
IE5VTEw7Ci19CisJLyogcHJpbnQgYXJndW1lbnRzICovCisJaSA9IDA7CisJdWtfcHJfd2Fybigi
IGFyZ3Y9WyIpOworCXdoaWxlIChhcmd2W2ldKSB7CisJCXVrX3ByX3dhcm4oIiVzJXMiLCAoaSA+
IDAgPyAiLCAiIDogIiIpLCBhcmd2W2ldKTsKKwkJaSsrOworCX0KKwl1a19wcl93YXJuKCJdIik7
CiAKLWludCBwY2xvc2UoRklMRSAqc3RyZWFtIF9fdW51c2VkKQotewotCXJldHVybiAwOworCS8q
IHByaW50IGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworCWlmIChlbnZwKSB7CisJCWkgPSAwOwor
CQl1a19wcl93YXJuKCIgZW52cD1bIik7CisJCXdoaWxlIChlbnZwW2ldKSB7CisJCQl1a19wcl93
YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwgZW52cFtpXSk7CisJCQlpKys7CisJCX0K
KwkJdWtfcHJfd2FybigiXSIpOworCX0KKworCXVrX3ByX3dhcm4oIlxuIik7CiB9CiAKLWludCBm
b3JrKHZvaWQpCitpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmNvbnN0IGFyZ3Zb
XSwgY2hhciAqY29uc3QgZW52cFtdKQogewotCWVycm5vID0gRUFHQUlOOworCWV4ZWNfd2Fybihf
X2Z1bmNfXywgcGF0aCwgYXJndiwgZW52cCk7CisJZXJybm8gPSBFTk9TWVM7CiAJcmV0dXJuIC0x
OwogfQogCi1pbnQgZ2V0cGlkKHZvaWQpCitpbnQgZXhlY3YoY29uc3QgY2hhciAqcGF0aCwgY2hh
ciAqY29uc3QgYXJndltdKQogewotCXJldHVybiAxOworCWV4ZWNfd2FybihfX2Z1bmNfXywgcGF0
aCwgYXJndiwgTlVMTCk7CisJZXJybm8gPSBFTk9TWVM7CisJcmV0dXJuIC0xOwogfQogCi1waWRf
dCBnZXRwcGlkKHZvaWQpCitpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCiB7Ci0JcmV0
dXJuIDA7CisJdWtfcHJfd2FybigiJXM6ICVzXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CisJZXJy
bm8gPSBFTk9TWVM7CisJcmV0dXJuIC0xOwogfQogCi1pbnQga2lsbChpbnQgcGlkIF9fdW51c2Vk
LCBpbnQgc2lnIF9fdW51c2VkKQorRklMRSAqcG9wZW4oY29uc3QgY2hhciAqY29tbWFuZCwgY29u
c3QgY2hhciAqdHlwZSBfX3VudXNlZCkKIHsKLQllcnJubyA9IEVJTlZBTDsKLQlyZXR1cm4gLTE7
CisJdWtfcHJfd2FybigiJXM6ICVzXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CisJZXJybm8gPSBF
Tk9TWVM7CisJcmV0dXJuIE5VTEw7CiB9CiAKLWludCB0aW1lcyhzdHJ1Y3QgdG0gKmJ1ZiBfX3Vu
dXNlZCkKK2ludCBwY2xvc2UoRklMRSAqc3RyZWFtIF9fdW51c2VkKQogeworCWVycm5vID0gRUlO
VkFMOwogCXJldHVybiAtMTsKIH0KIAogaW50IHdhaXQoaW50ICpzdGF0dXMgX191bnVzZWQpCiB7
CisJLyogTm8gY2hpbGRyZW4gKi8KIAllcnJubyA9IEVDSElMRDsKIAlyZXR1cm4gLTE7CiB9CiAK
LWludCBzZXRwZ3JwKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGtpbGxwZyhpbnQg
cGdycCBfX3VudXNlZCwgaW50IHNpZyBfX3VudXNlZCkKK3BpZF90IHdhaXRwaWQocGlkX3QgcGlk
IF9fdW51c2VkLCBpbnQgKndzdGF0dXMgX191bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkKQog
ewotCXJldHVybiAwOworCS8qIE5vIGNoaWxkcmVuICovCisJZXJybm8gPSBFQ0hJTEQ7CisJcmV0
dXJuIC0xOwogfQogCi0KIHBpZF90IHdhaXQzKGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9w
dGlvbnMgX191bnVzZWQsCiAJCXN0cnVjdCBydXNhZ2UgKnJ1c2FnZSBfX3VudXNlZCkKIHsKLQly
ZXR1cm4gMDsKKwkvKiBObyBjaGlsZHJlbiAqLworCWVycm5vID0gRUNISUxEOworCXJldHVybiAt
MTsKIH0KIAogcGlkX3Qgd2FpdDQocGlkX3QgcGlkIF9fdW51c2VkLCBpbnQgKndzdGF0dXMgX191
bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkLAogCQlzdHJ1Y3QgcnVzYWdlICpydXNhZ2UgX191
bnVzZWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogTm8gY2hpbGRyZW4gKi8KKwllcnJubyA9IEVDSElM
RDsKKwlyZXR1cm4gLTE7CiB9CiAKLXBpZF90IHdhaXRwaWQocGlkX3QgcGlkIF9fdW51c2VkLCBp
bnQgKndzdGF0dXMgX191bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkKQoraW50IGdldHBpZCh2
b2lkKQogewotCXJldHVybiAwOworCXJldHVybiBVTklLUkFGVF9QSUQ7Cit9CisKK3BpZF90IGdl
dHBwaWQodm9pZCkKK3sKKwlyZXR1cm4gVU5JS1JBRlRfUFBJRDsKIH0KIAogcGlkX3Qgc2V0c2lk
KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogV2UgaGF2ZSBhIHNpbmdsZSAic2Vzc2lvbiIgd2l0
aCBhIHNpbmdsZSAicHJvY2VzcyIgKi8KKwllcnJubyA9IEVQRVJNOworCXJldHVybiAocGlkX3Qp
IC0xOwogfQogCi1waWRfdCBnZXRzaWQocGlkX3QgcGlkIF9fdW51c2VkKQorcGlkX3QgZ2V0c2lk
KHBpZF90IHBpZCkKIHsKLQlyZXR1cm4gMDsKKwlpZiAocGlkICE9IDApIHsKKwkJLyogV2Ugc3Vw
cG9ydCBvbmx5IGNhbGxzIGZvciB0aGUgb25seSBjYWxsaW5nICJwcm9jZXNzIiAqLworCQllcnJu
byA9IEVTUkNIOworCQlyZXR1cm4gKHBpZF90KSAtMTsKKwl9CisJcmV0dXJuIFVOSUtSQUZUX1NJ
RDsKIH0KIAotaW50IHNldHBnaWQocGlkX3QgcGlkIF9fdW51c2VkLCBwaWRfdCBwZ2lkIF9fdW51
c2VkKQoraW50IHNldHBnaWQocGlkX3QgcGlkLCBwaWRfdCBwZ2lkKQogeworCWlmIChwaWQgIT0g
MCkgeworCQkvKiBXZSBzdXBwb3J0IG9ubHkgY2FsbHMgZm9yIHRoZSBvbmx5IGNhbGxpbmcgInBy
b2Nlc3MiICovCisJCWVycm5vID0gRVNSQ0g7CisJCXJldHVybiAocGlkX3QpIC0xOworCX0KKwlp
ZiAocGdpZCAhPSAwKSB7CisJCS8qIFdlIGhhdmUgYSBzaW5nbGUgImdyb3VwIiB3aXRoIGEgc2lu
Z2xlICJwcm9jZXNzIiAqLworCQllcnJubyA9IEVQRVJNOworCQlyZXR1cm4gKHBpZF90KSAtMTsK
Kwl9CiAJcmV0dXJuIDA7CiB9CiAKIHBpZF90IGdldHBnaWQocGlkX3QgcGlkKQogewotCXJldHVy
biAwOworCWlmIChwaWQgIT0gMCkgeworCQkvKiBXZSBzdXBwb3J0IG9ubHkgY2FsbHMgZm9yIHRo
ZSBvbmx5IGNhbGxpbmcgInByb2Nlc3MiICovCisJCWVycm5vID0gRVNSQ0g7CisJCXJldHVybiAo
cGlkX3QpIC0xOworCX0KKwlyZXR1cm4gVU5JS1JBRlRfUEdJRDsKIH0KIAorcGlkX3QgZ2V0cGdy
cCh2b2lkKQoreworCXJldHVybiBVTklLUkFGVF9QR0lEOworfQogCi1pbnQgdGNzZXRwZ3JwKGlu
dCBmZCBfX3VudXNlZCwgcGlkX3QgcGdycCBfX3VudXNlZCkKK2ludCBzZXRwZ3JwKHZvaWQpCiB7
Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNldHBnaWQoMCwgMCk7CiB9CiAKLXBpZF90IHRjZ2V0cGdy
cChpbnQgZmQgX191bnVzZWQpCitpbnQgdGNzZXRwZ3JwKGludCBmZCBfX3VudXNlZCwgcGlkX3Qg
cGdycCkKIHsKKwkvKiBUT0RPIGNoZWNrIGlmIGZkIGlzIEJBREYgKi8KKwlpZiAocGdycCAhPSBV
TklLUkFGVF9QR0lEKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQogCXJl
dHVybiAwOwogfQogCitwaWRfdCB0Y2dldHBncnAoaW50IGZkKQoreworCS8qIFdlIGhhdmUgYSBz
aW5nbGUgInByb2Nlc3MgZ3JvdXAiICovCisJcmV0dXJuIFVOSUtSQUZUX1BHSUQ7Cit9CisKIGlu
dCBuaWNlKGludCBpbmMgX191bnVzZWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogV2UgZG9uJ3Qgc3Vw
cG9ydCBwcmlvcml0eSB1cGRhdGVzIGZvciB1bmlrZXJuZWxzICovCisJZXJybm8gPSBFUEVSTTsK
KwlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jCmluZGV4IDY4
MGJjYWYuLjNhZmMxNjggMTAwNjQ0Ci0tLSBhL3NpZ25hbC5jCisrKyBiL3NpZ25hbC5jCkBAIC0z
Miw2ICszMiw4IEBACiAgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJ
RklFRCBJTiBBTlkgV0FZLgogICovCiAKKyNpbmNsdWRlIDx1ay9wcm9jZXNzLmg+CisjaW5jbHVk
ZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KIAogaW50IHNpZ2FjdGlvbihpbnQgc2ln
IF9fdW51c2VkLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBhY3QgX191bnVzZWQs
CkBAIC01NCwzICs1NiwxOSBAQCBpbnQgc2lnaW50ZXJydXB0KGludCBzaWcgX191bnVzZWQsIGlu
dCBmbGFnIF9fdW51c2VkKQogewogCXJldHVybiAwOwogfQorCitpbnQga2lsbChpbnQgcGlkLCBp
bnQgc2lnIF9fdW51c2VkKQoreworCS8qIFRPRE8gY2hlY2sgc2lnICovCisJaWYgKHBpZCAhPSBV
TklLUkFGVF9QSUQpCisJCWVycm5vID0gRVNSQ0g7CisJcmV0dXJuIC0xOworfQorCitpbnQga2ls
bHBnKGludCBwZ3JwLCBpbnQgc2lnIF9fdW51c2VkKQoreworCS8qIFRPRE8gY2hlY2sgc2lnICov
CisJaWYgKHBncnAgIT0gVU5JS1JBRlRfUEdJRCkKKwkJZXJybm8gPSBFU1JDSDsKKwlyZXR1cm4g
LTE7Cit9CmRpZmYgLS1naXQgYS90aW1lLmMgYi90aW1lLmMKaW5kZXggYTc5NjkxYy4uMzQ3MDU5
MSAxMDA2NDQKLS0tIGEvdGltZS5jCisrKyBiL3RpbWUuYwpAQCAtMTcyLDMgKzE3Miw5IEBAIGlu
dCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQgX191bnVzZWQsIGNvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqdHAgX191bnVzZWQpCiB7CiAJcmV0dXJuIDA7CiB9CisKK2ludCB0aW1lcyhzdHJ1
Y3QgdG0gKmJ1ZiBfX3VudXNlZCkKK3sKKwllcnJubyA9IEVOT0RBVEE7CisJcmV0dXJuIC0xOwor
fQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 06:59:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 06:59:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5PG7-0005N1-4Z; Wed, 04 Sep 2019 06:59:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5PG5-0005Mb-9e
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 06:59:13 +0000
X-Inumbo-ID: 7d8c8034-cee1-11e9-abab-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 7d8c8034-cee1-11e9-abab-12813bfff9fa;
 Wed, 04 Sep 2019 06:59:08 +0000 (UTC)
IronPort-SDR: vA94M91q0lD5pMnGCnwvylQqRYN2RVvwUvI6xDgNUzelqxy3LvzBMOCDDnIYpA/AhuRP1/tWGv
 q7SVpXalHn1g==
IronPort-PHdr: =?us-ascii?q?9a23=3AlCm2WhPa44JvNpPagTEl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0Iv3yrarrMEGX3/hxlliBBdydt6sezbOJ7+u5AT1IyK3CmUhKSIZLWR?=
 =?us-ascii?q?4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBx?=
 =?us-ascii?q?rwKxd+KPjrFY7OlcS30P2594HObwlSizexfK1+IA+roQjTucQajpZuJro1xx?=
 =?us-ascii?q?DUvnZGZuNayH9yK1mOhRj8/MCw/JBi8yRUpf0s8tNLXLv5caolU7FWFSwqPG?=
 =?us-ascii?q?8p6sLlsxnDVhaP6WAHUmoKiBpIAhPK4w/8U5zsryb1rOt92C2dPc3rUbA5XC?=
 =?us-ascii?q?mp4ql3RBP0jioMKjg0+3zVhMNtlqJWuBKvqQJizYDaY4+bM/hxfq3GcN8GWW?=
 =?us-ascii?q?ZMRNpdWjZdDo+gaYYEEuoPPfxfr4n4v1YDsxy+BRKwBOPuzD9Dm3n43bAi0+?=
 =?us-ascii?q?Q8DArL2xAvH9UVsHTIrdX1Mr0eUeSozKnQ0DXOdO9Z2Szn5IjQbxAuuuuAXa?=
 =?us-ascii?q?h3ccfIz0QkCgDLjk2IpID4MD6Zy/4Bvmub4uZ6S+6jlWwqpxt/rzS328shhZ?=
 =?us-ascii?q?TFipgWx13E7yl13og4KNOiREJmbtOoDp1dvDyAOYRsWMMtWWRotT4/yr0BpJ?=
 =?us-ascii?q?G0YjAHyI8ixx7Dc/yHdJWI4g77WOaRPzh4gHVldaqhhxa360egy+n8WtOo31?=
 =?us-ascii?q?ZRtCZFisTMuWsX2xzJ7ciLUvp9/kG/1jaTzw3f9+5JLV0umafYK5Mt2KA8mo?=
 =?us-ascii?q?QRvEjZECL6gED2g7WXdkUg9Oio8ePnYrD+q5CAMI90kR3+MqUomsClBeQ4Lx?=
 =?us-ascii?q?AOX3WA9Ougz73v51X5QKhRgfEsiKnZt4jWJd4Hqa6hHw9VzoEj5g66Dzen1t?=
 =?us-ascii?q?QYnH4HLElcdB2akYfpJU/BIPTjAPe7glSsiytrx+vcMrzuHJrNKGLPkLD7fb?=
 =?us-ascii?q?Zy80Rc0hY8zchD55JIDbEMOPzzVVH1tNzZFh82LRa4w+b6CNV8yoweWHmCAq?=
 =?us-ascii?q?mHP6zOtV+H/PkgL/OSa48I637BLK0g5vjvimR8lVIDcK2B2ZoMdGv+DvlgZU?=
 =?us-ascii?q?KDbinCmNAEREwNpRY/SqTOlUWfGWpYYG2uXqR64iwjFaqtFsHbW4rrmrvXj3?=
 =?us-ascii?q?TzJYFfem0TUgPEKnzvbYjRA/o=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CxBAA7YG9d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4FugWogEiqNHYkjmDCBZwkBAQE6AQIBAYFLgnQCgxs4EwIDCAEBBQEBAQE?=
 =?us-ascii?q?BBgQBbIU6gjoigm8GeRA/ElcZgldLgg+rBIVKgyyBSYE0hx+DO4J2P4ERgl2?=
 =?us-ascii?q?EfBSGCgSMTiCIABuBA5YVB4IiYgSPJ4RDJ4JjlgeoGjghgVgzGnOCbIJOF44?=
 =?us-ascii?q?lPQEBMYEGAQGMK4JUAQE?=
X-IPAS-Result: =?us-ascii?q?A2CxBAA7YG9d/wPjVY1lHQEBBQEHBQGBZ4FugWogEiqNH?=
 =?us-ascii?q?YkjmDCBZwkBAQE6AQIBAYFLgnQCgxs4EwIDCAEBBQEBAQEBBgQBbIU6gjoig?=
 =?us-ascii?q?m8GeRA/ElcZgldLgg+rBIVKgyyBSYE0hx+DO4J2P4ERgl2EfBSGCgSMTiCIA?=
 =?us-ascii?q?BuBA5YVB4IiYgSPJ4RDJ4JjlgeoGjghgVgzGnOCbIJOF44lPQEBMYEGAQGMK?=
 =?us-ascii?q?4JUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,465,1559509200"; 
   d="scan'208";a="4697867"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 09:58:59 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 47EA01A60185;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id sQ1e3GpuD-a0; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2EFFB1A601A6;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id OBLF7Ultdva0; Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 0BF501A60185;
 Wed,  4 Sep 2019 09:58:59 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 09:58:56 +0300
Message-Id: <20190904065856.5465-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
References: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/1] Revisit process.c functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCByZXZpc2l0cyB0aGUgZnVuY3Rpb25zIGluIHByb2Nlc3MuYywgcmVkaXN0cmli
dXRlcyBzb21lIG9mIHRoZW0gYW5kCmltcGxlbWVudCB0aGUgb3RoZXJzLiBUaGUgcmVtYWluaW5n
IGZ1bmN0aW9ucyBtYXkgdmVyeSB3ZWxsIGJlIG1vdmVkIGludG8gYW4KaW50ZXJuYWwgInByb2Nl
c3MiIHJlbGF0ZWQgbGlicmFyeSwgYnV0IHdlIHdpbGwgZG8gdGhpcyBhdCBhbm90aGVyIHRpbWUu
IEl0J3MKd29ydGggc2F5aW5nIHRoYXQgd2Ugc2V0IHRoZSBQSUQgb2YgdGhlIHVuaWtlcm5lbCB0
byAxLCBzYXZpbmcgdGhlIFBJRCAwIGZvciBpdHMKInBhcmVudCIsIGFuIGludmlzaWJpbGUgcHJv
Y2VzcyB0aGF0IGlzIGFsc28gbm90IHNob3duIG9uIExpbnV4LgoKUmVkaXN0cmlidXRlZCBmdW5j
dGlvbnM6Ci0ga2lsbCgpIGFuZCBraWxscGcoKSBhcmUgbW92ZWQgdG8gc2lnbmFsLmMKLSB0aW1l
cygpIGlzIG1vdmVkIHRvIHRpbWUuYwoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rp
bi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyArKysrKysr
KysrKwogcHJvY2Vzcy5jICAgICAgICAgICAgfCAxNjUgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrLS0tLS0tLS0tLS0tLQogc2lnbmFsLmMgICAgICAgICAgICAgfCAgMTggKysrKysKIHRp
bWUuYyAgICAgICAgICAgICAgIHwgICA2ICsrCiA0IGZpbGVzIGNoYW5nZWQsIDE4MiBpbnNlcnRp
b25zKCspLCA1MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VrL3By
b2Nlc3MuaAoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWsvcHJvY2Vzcy5oIGIvaW5jbHVkZS91ay9w
cm9jZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyMDhlMwotLS0g
L2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWsvcHJvY2Vzcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8q
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBBdXRob3Jz
OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgorICoKKyAqIENvcHlyaWdodCAo
YykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
ICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9E
SUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworCisjaWZuZGVmIF9fVUtfUFJPQ0VTU19IX18KKyNkZWZp
bmUgX19VS19QUk9DRVNTX0hfXworCisjZGVmaW5lIFVOSUtSQUZUX1BJRCAgICAgIDEKKyNkZWZp
bmUgVU5JS1JBRlRfUFBJRCAgICAgMAorI2RlZmluZSBVTklLUkFGVF9TSUQgICAgICAwCisjZGVm
aW5lIFVOSUtSQUZUX1BHSUQgICAgIDAKKworI2VuZGlmIC8qIF9fVUtfUFJPQ0VTU19IX18gKi8K
ZGlmZiAtLWdpdCBhL3Byb2Nlc3MuYyBiL3Byb2Nlc3MuYwppbmRleCBjNGUzNjY0Li5lMjYxMTBk
IDEwMDY0NAotLS0gYS9wcm9jZXNzLmMKKysrIGIvcHJvY2Vzcy5jCkBAIC0zLDcgKzMsNyBAQAog
ICogbGlibmV3bGliIGdsdWUgY29kZQogICoKICAqIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVs
aXBlLmh1aWNpQG5lY2xhYi5ldT4KLSAqCisgKiAgICAgICAgICBDb3N0aW4gTHVwdSA8Y29zdGlu
Lmx1cHVAY3MucHViLnJvPgogICoKICAqIENvcHlyaWdodCAoYykgMjAxNywgTkVDIEV1cm9wZSBM
dGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzUsMTM0
ICszNSwxOTkgQEAKICAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElG
SUVEIElOIEFOWSBXQVkuCiAgKi8KIAotI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxlcnJu
by5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8
c3lzL3Jlc291cmNlLmg+CisjaW5jbHVkZSA8dWsvcHJvY2Vzcy5oPgorI2luY2x1ZGUgPHVrL3By
aW50Lmg+CiAjdW5kZWYgZXJybm8KIGV4dGVybiBpbnQgZXJybm87CiAKLWludCBleGVjdmUoY2hh
ciAqbmFtZSBfX3VudXNlZCwgY2hhciAqKmFyZ3YgX191bnVzZWQsIGNoYXIgKiplbnYgX191bnVz
ZWQpCisKK2ludCBmb3JrKHZvaWQpCiB7Ci0JZXJybm8gPSBFTk9NRU07CisJLyogZm9yaygpIGlz
IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSAqLworCWVycm5vID0gRU5PU1lTOwogCXJl
dHVybiAtMTsKIH0KIAotaW50IGV4ZWN2KGNvbnN0IGNoYXIgKnBhdGggX191bnVzZWQsIGNoYXIg
KmNvbnN0IGFyZ3ZbXSBfX3VudXNlZCkKK3N0YXRpYwordm9pZCBleGVjX3dhcm4oY29uc3QgY2hh
ciAqZnVuYywKKwkJY29uc3QgY2hhciAqcGF0aCwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpj
b25zdCBlbnZwW10pCiB7Ci0JcmV0dXJuIDA7Ci19CisJaW50IGk7CiAKLWludCBzeXN0ZW0oY29u
c3QgY2hhciAqY29tbWFuZCBfX3VudXNlZCkKLXsKLQlyZXR1cm4gMDsKLX0KKwl1a19wcl93YXJu
KCIlcygpOiBwYXRoPSVzIiwgZnVuYywgcGF0aCk7CiAKLUZJTEUgKnBvcGVuKGNvbnN0IGNoYXIg
KmNvbW1hbmQgX191bnVzZWQsIGNvbnN0IGNoYXIgKnR5cGUgX191bnVzZWQpCi17Ci0JcmV0dXJu
IE5VTEw7Ci19CisJLyogcHJpbnQgYXJndW1lbnRzICovCisJaSA9IDA7CisJdWtfcHJfd2Fybigi
IGFyZ3Y9WyIpOworCXdoaWxlIChhcmd2W2ldKSB7CisJCXVrX3ByX3dhcm4oIiVzJXMiLCAoaSA+
IDAgPyAiLCAiIDogIiIpLCBhcmd2W2ldKTsKKwkJaSsrOworCX0KKwl1a19wcl93YXJuKCJdIik7
CiAKLWludCBwY2xvc2UoRklMRSAqc3RyZWFtIF9fdW51c2VkKQotewotCXJldHVybiAwOworCS8q
IHByaW50IGVudmlyb25tZW50IHZhcmlhYmxlcyAqLworCWlmIChlbnZwKSB7CisJCWkgPSAwOwor
CQl1a19wcl93YXJuKCIgZW52cD1bIik7CisJCXdoaWxlIChlbnZwW2ldKSB7CisJCQl1a19wcl93
YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwgZW52cFtpXSk7CisJCQlpKys7CisJCX0K
KwkJdWtfcHJfd2FybigiXSIpOworCX0KKworCXVrX3ByX3dhcm4oIlxuIik7CiB9CiAKLWludCBm
b3JrKHZvaWQpCitpbnQgZXhlY3ZlKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKmNvbnN0IGFyZ3Zb
XSwgY2hhciAqY29uc3QgZW52cFtdKQogewotCWVycm5vID0gRUFHQUlOOworCWV4ZWNfd2Fybihf
X2Z1bmNfXywgcGF0aCwgYXJndiwgZW52cCk7CisJZXJybm8gPSBFTk9TWVM7CiAJcmV0dXJuIC0x
OwogfQogCi1pbnQgZ2V0cGlkKHZvaWQpCitpbnQgZXhlY3YoY29uc3QgY2hhciAqcGF0aCwgY2hh
ciAqY29uc3QgYXJndltdKQogewotCXJldHVybiAxOworCWV4ZWNfd2FybihfX2Z1bmNfXywgcGF0
aCwgYXJndiwgTlVMTCk7CisJZXJybm8gPSBFTk9TWVM7CisJcmV0dXJuIC0xOwogfQogCi1waWRf
dCBnZXRwcGlkKHZvaWQpCitpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCiB7Ci0JcmV0
dXJuIDA7CisJdWtfcHJfd2FybigiJXM6ICVzXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CisJZXJy
bm8gPSBFTk9TWVM7CisJcmV0dXJuIC0xOwogfQogCi1pbnQga2lsbChpbnQgcGlkIF9fdW51c2Vk
LCBpbnQgc2lnIF9fdW51c2VkKQorRklMRSAqcG9wZW4oY29uc3QgY2hhciAqY29tbWFuZCwgY29u
c3QgY2hhciAqdHlwZSBfX3VudXNlZCkKIHsKLQllcnJubyA9IEVJTlZBTDsKLQlyZXR1cm4gLTE7
CisJdWtfcHJfd2FybigiJXM6ICVzXG4iLCBfX2Z1bmNfXywgY29tbWFuZCk7CisJZXJybm8gPSBF
Tk9TWVM7CisJcmV0dXJuIE5VTEw7CiB9CiAKLWludCB0aW1lcyhzdHJ1Y3QgdG0gKmJ1ZiBfX3Vu
dXNlZCkKK2ludCBwY2xvc2UoRklMRSAqc3RyZWFtIF9fdW51c2VkKQogeworCWVycm5vID0gRUlO
VkFMOwogCXJldHVybiAtMTsKIH0KIAogaW50IHdhaXQoaW50ICpzdGF0dXMgX191bnVzZWQpCiB7
CisJLyogTm8gY2hpbGRyZW4gKi8KIAllcnJubyA9IEVDSElMRDsKIAlyZXR1cm4gLTE7CiB9CiAK
LWludCBzZXRwZ3JwKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLQotaW50IGtpbGxwZyhpbnQg
cGdycCBfX3VudXNlZCwgaW50IHNpZyBfX3VudXNlZCkKK3BpZF90IHdhaXRwaWQocGlkX3QgcGlk
IF9fdW51c2VkLCBpbnQgKndzdGF0dXMgX191bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkKQog
ewotCXJldHVybiAwOworCS8qIE5vIGNoaWxkcmVuICovCisJZXJybm8gPSBFQ0hJTEQ7CisJcmV0
dXJuIC0xOwogfQogCi0KIHBpZF90IHdhaXQzKGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9w
dGlvbnMgX191bnVzZWQsCiAJCXN0cnVjdCBydXNhZ2UgKnJ1c2FnZSBfX3VudXNlZCkKIHsKLQly
ZXR1cm4gMDsKKwkvKiBObyBjaGlsZHJlbiAqLworCWVycm5vID0gRUNISUxEOworCXJldHVybiAt
MTsKIH0KIAogcGlkX3Qgd2FpdDQocGlkX3QgcGlkIF9fdW51c2VkLCBpbnQgKndzdGF0dXMgX191
bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkLAogCQlzdHJ1Y3QgcnVzYWdlICpydXNhZ2UgX191
bnVzZWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogTm8gY2hpbGRyZW4gKi8KKwllcnJubyA9IEVDSElM
RDsKKwlyZXR1cm4gLTE7CiB9CiAKLXBpZF90IHdhaXRwaWQocGlkX3QgcGlkIF9fdW51c2VkLCBp
bnQgKndzdGF0dXMgX191bnVzZWQsIGludCBvcHRpb25zIF9fdW51c2VkKQoraW50IGdldHBpZCh2
b2lkKQogewotCXJldHVybiAwOworCXJldHVybiBVTklLUkFGVF9QSUQ7Cit9CisKK3BpZF90IGdl
dHBwaWQodm9pZCkKK3sKKwlyZXR1cm4gVU5JS1JBRlRfUFBJRDsKIH0KIAogcGlkX3Qgc2V0c2lk
KHZvaWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogV2UgaGF2ZSBhIHNpbmdsZSAic2Vzc2lvbiIgd2l0
aCBhIHNpbmdsZSAicHJvY2VzcyIgKi8KKwllcnJubyA9IEVQRVJNOworCXJldHVybiAocGlkX3Qp
IC0xOwogfQogCi1waWRfdCBnZXRzaWQocGlkX3QgcGlkIF9fdW51c2VkKQorcGlkX3QgZ2V0c2lk
KHBpZF90IHBpZCkKIHsKLQlyZXR1cm4gMDsKKwlpZiAocGlkICE9IDApIHsKKwkJLyogV2Ugc3Vw
cG9ydCBvbmx5IGNhbGxzIGZvciB0aGUgb25seSBjYWxsaW5nICJwcm9jZXNzIiAqLworCQllcnJu
byA9IEVTUkNIOworCQlyZXR1cm4gKHBpZF90KSAtMTsKKwl9CisJcmV0dXJuIFVOSUtSQUZUX1NJ
RDsKIH0KIAotaW50IHNldHBnaWQocGlkX3QgcGlkIF9fdW51c2VkLCBwaWRfdCBwZ2lkIF9fdW51
c2VkKQoraW50IHNldHBnaWQocGlkX3QgcGlkLCBwaWRfdCBwZ2lkKQogeworCWlmIChwaWQgIT0g
MCkgeworCQkvKiBXZSBzdXBwb3J0IG9ubHkgY2FsbHMgZm9yIHRoZSBvbmx5IGNhbGxpbmcgInBy
b2Nlc3MiICovCisJCWVycm5vID0gRVNSQ0g7CisJCXJldHVybiAocGlkX3QpIC0xOworCX0KKwlp
ZiAocGdpZCAhPSAwKSB7CisJCS8qIFdlIGhhdmUgYSBzaW5nbGUgImdyb3VwIiB3aXRoIGEgc2lu
Z2xlICJwcm9jZXNzIiAqLworCQllcnJubyA9IEVQRVJNOworCQlyZXR1cm4gKHBpZF90KSAtMTsK
Kwl9CiAJcmV0dXJuIDA7CiB9CiAKIHBpZF90IGdldHBnaWQocGlkX3QgcGlkKQogewotCXJldHVy
biAwOworCWlmIChwaWQgIT0gMCkgeworCQkvKiBXZSBzdXBwb3J0IG9ubHkgY2FsbHMgZm9yIHRo
ZSBvbmx5IGNhbGxpbmcgInByb2Nlc3MiICovCisJCWVycm5vID0gRVNSQ0g7CisJCXJldHVybiAo
cGlkX3QpIC0xOworCX0KKwlyZXR1cm4gVU5JS1JBRlRfUEdJRDsKIH0KIAorcGlkX3QgZ2V0cGdy
cCh2b2lkKQoreworCXJldHVybiBVTklLUkFGVF9QR0lEOworfQogCi1pbnQgdGNzZXRwZ3JwKGlu
dCBmZCBfX3VudXNlZCwgcGlkX3QgcGdycCBfX3VudXNlZCkKK2ludCBzZXRwZ3JwKHZvaWQpCiB7
Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHNldHBnaWQoMCwgMCk7CiB9CiAKLXBpZF90IHRjZ2V0cGdy
cChpbnQgZmQgX191bnVzZWQpCitpbnQgdGNzZXRwZ3JwKGludCBmZCBfX3VudXNlZCwgcGlkX3Qg
cGdycCkKIHsKKwkvKiBUT0RPIGNoZWNrIGlmIGZkIGlzIEJBREYgKi8KKwlpZiAocGdycCAhPSBV
TklLUkFGVF9QR0lEKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQogCXJl
dHVybiAwOwogfQogCitwaWRfdCB0Y2dldHBncnAoaW50IGZkKQoreworCS8qIFdlIGhhdmUgYSBz
aW5nbGUgInByb2Nlc3MgZ3JvdXAiICovCisJcmV0dXJuIFVOSUtSQUZUX1BHSUQ7Cit9CisKIGlu
dCBuaWNlKGludCBpbmMgX191bnVzZWQpCiB7Ci0JcmV0dXJuIDA7CisJLyogV2UgZG9uJ3Qgc3Vw
cG9ydCBwcmlvcml0eSB1cGRhdGVzIGZvciB1bmlrZXJuZWxzICovCisJZXJybm8gPSBFUEVSTTsK
KwlyZXR1cm4gLTE7CiB9CmRpZmYgLS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jCmluZGV4IDY4
MGJjYWYuLjNhZmMxNjggMTAwNjQ0Ci0tLSBhL3NpZ25hbC5jCisrKyBiL3NpZ25hbC5jCkBAIC0z
Miw2ICszMiw4IEBACiAgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJ
RklFRCBJTiBBTlkgV0FZLgogICovCiAKKyNpbmNsdWRlIDx1ay9wcm9jZXNzLmg+CisjaW5jbHVk
ZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KIAogaW50IHNpZ2FjdGlvbihpbnQgc2ln
IF9fdW51c2VkLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBhY3QgX191bnVzZWQs
CkBAIC01NCwzICs1NiwxOSBAQCBpbnQgc2lnaW50ZXJydXB0KGludCBzaWcgX191bnVzZWQsIGlu
dCBmbGFnIF9fdW51c2VkKQogewogCXJldHVybiAwOwogfQorCitpbnQga2lsbChpbnQgcGlkLCBp
bnQgc2lnIF9fdW51c2VkKQoreworCS8qIFRPRE8gY2hlY2sgc2lnICovCisJaWYgKHBpZCAhPSBV
TklLUkFGVF9QSUQpCisJCWVycm5vID0gRVNSQ0g7CisJcmV0dXJuIC0xOworfQorCitpbnQga2ls
bHBnKGludCBwZ3JwLCBpbnQgc2lnIF9fdW51c2VkKQoreworCS8qIFRPRE8gY2hlY2sgc2lnICov
CisJaWYgKHBncnAgIT0gVU5JS1JBRlRfUEdJRCkKKwkJZXJybm8gPSBFU1JDSDsKKwlyZXR1cm4g
LTE7Cit9CmRpZmYgLS1naXQgYS90aW1lLmMgYi90aW1lLmMKaW5kZXggYTc5NjkxYy4uMzQ3MDU5
MSAxMDA2NDQKLS0tIGEvdGltZS5jCisrKyBiL3RpbWUuYwpAQCAtMTcyLDMgKzE3Miw5IEBAIGlu
dCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQgX191bnVzZWQsIGNvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqdHAgX191bnVzZWQpCiB7CiAJcmV0dXJuIDA7CiB9CisKK2ludCB0aW1lcyhzdHJ1
Y3QgdG0gKmJ1ZiBfX3VudXNlZCkKK3sKKwllcnJubyA9IEVOT0RBVEE7CisJcmV0dXJuIC0xOwor
fQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 07:15:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 07:15:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5PVu-00074Z-VH; Wed, 04 Sep 2019 07:15:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=TTWc=W7=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i5PVu-00074U-JM
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 07:15:34 +0000
X-Inumbo-ID: c880a4ce-cee3-11e9-978d-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c880a4ce-cee3-11e9-978d-bc764e2007e4;
 Wed, 04 Sep 2019 07:15:33 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id 30so9026814wrk.11
 for <minios-devel@lists.xen.org>; Wed, 04 Sep 2019 00:15:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=ZkYRJ11Fwx4ctCpYeScWoNZ3POjxt7ilGI9sHoT5bUM=;
 b=K2mLFCczKUsFNnVC7YpSiaAv8h5LAyEtBzFwjauX1TYi93rOD23azj4Tii8wVEqc0D
 yq7biJMXJDd2D8zTrxX5vzoK+pTWAG58jRuNXMJhCP8vfUGQApV9+EffzJQqbvDIyTHg
 6CmYs3igN1trwMEDAsJj0xiFTjmbziD1MQXcvOOIV134uO4tB2XI35dSN7Eng06j1t66
 y5ujGgeKOfjOnaMDjooHDxyRSyNyqoB/jpFR1FC7SdH6RrUDrnoMPD738lM/jqkMYBLG
 6Z+ks1xvGUv8IqlWFvOrio6Ap2BN2HYbtEE8GzgHPXP8WtDH8zZwyGGDx89guqAqbboA
 EGtQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=ZkYRJ11Fwx4ctCpYeScWoNZ3POjxt7ilGI9sHoT5bUM=;
 b=pcYIc793ELxeV7BB/4SEIhMUmZKQ/kN4UGJUTMDkOP9Ksq+h7Vb9nc4HkpNyGO1P9x
 Z2BPCE4NXBizGYR/xtI1ZKqd28Fm3KFSyth7ZCCVndygJqjag1GQBzdKdaVT3DJLjBqJ
 2dmdZWqzTd0pChIUidND7QQQoHilIxjrB6QeqSnRnyd2e0/xawdLw6z9f0xyZsE7kG6W
 t7d1NqHcJW/y0IFKUh08IpP+c7BS8/2KHwDKmB66M9qrllFFYttR47GVLG0je4z5d9Y4
 wgzJPRVFTIsmPvAPDtKzj0rPw0Ggwl92mZPvWxAslnRycVKMJDkX2u2DOWd8S48pE2S/
 6T0A==
X-Gm-Message-State: APjAAAUWCcOFmBJh2eFyi5HfC5BHKbchmlb+uECsPESdxVJmT4xNbYdy
 LrjobHwNX99VlyEgvo4pzJs=
X-Google-Smtp-Source: APXvYqz/qpCKNTZQogOpIgoUUkE28c/r6JNsak4cIJxrVSLTYnZTWHe6B01xmR3QC+o+dst2o0vdnA==
X-Received: by 2002:adf:cd02:: with SMTP id w2mr28607351wrm.327.1567581332414; 
 Wed, 04 Sep 2019 00:15:32 -0700 (PDT)
Received: from [192.168.1.103] ([188.26.249.17])
 by smtp.gmail.com with ESMTPSA id c1sm1557997wmk.20.2019.09.04.00.15.31
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 04 Sep 2019 00:15:31 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190827075640.21814-1-costin.lupu@cs.pub.ro>
 <95afbf5b-103c-99c0-c6e2-de04ef131e0b@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <ddf3cf2c-c0e7-f9f6-8b75-2fd109ed7bd7@gmail.com>
Date: Wed, 4 Sep 2019 10:15:31 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <95afbf5b-103c-99c0-c6e2-de04ef131e0b@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] plat: Configure stack size page
 order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpQbGVhc2Ugc2VlIGlubGluZS4KCk9uIDgvMzAvMTkgNDo1MSBQTSwgU2ltb24g
S3VlbnplciB3cm90ZToKPiBIZXkgQ29zdGluLAo+IAo+IFRoYW5rcyBhIGxvdCBmb3IgdGhpcyBw
YXRjaC4gSSBhbSBjdXJyZW50bHkgaGF2aW5nIGEgbG9vayBidXQgbmVlZCBzb21lCj4gY2xhcmlm
aWNhdGlvbnMuCj4gCj4gMSkgV2h5IGRpZCB5b3UgZXhwb3NlIHRoZSBvcHRpb24gaW50IHRoZSBw
bGF0Zm9ybSBzdWJtZW51PyBJdCBpcwo+IG9idmlvdXNseSBjaGFuZ2luZyBzb21ldGhpbmcgaW4g
YXJjaGl0ZWN0dXJlIGhlYWRlcnM/CgpXZWxsLCBhY3R1YWxseSBpdCBpcyBuZWl0aGVyLiBJIHRo
aW5rIGl0J3MgYWN0dWFsbHkgYSBzY2hlZHVsaW5nCmFic3RyYWN0aW9uLCBidXQgb25lIHRoYXQg
aXMgY3VycmVudGx5IHVzZWQgZm9yIG90aGVyIHN0YWNrcyBhcyB3ZWxsCihpbnRlcnJ1cHRzLCB0
cmFwcykuIFNvIGl0J3MgdHJ1ZSB0aGF0IGl0J3Mgd2VpcmQgdG8gcHV0IGl0IGhlcmUsIGJ1dApp
dCdzIG5vdCBhbiBhcmNoIHNwZWNpZmljIGNvbmZpZyBlaXRoZXIuIFRoaXMgc3RhY2sgc2l6ZSB2
YWx1ZSBzaG91bGQgYmUKdGhlIHNhbWUgcmVnYXJkbGVzcyBhbnkgYXJjaCBvciBwbGF0Zm9ybS4K
Cj4gCj4gMikgRGlkIHlvdSBjaGVjayB0aGUgaW50ZXJydXB0IHN0YWNrIGZvciBYZW4gb24geDg2
PyBJdCBzZWVtcyB0aGF0IHRoaXMKPiBvbmUgaXMganVzdCBzaXplZCB0byBQQUdFX1NJWkUuIEkg
dGhpbmsgdGhpcyBjYW4gZ2V0IGNyaXRpY2FsIGZvciB0aHJlYWQKPiBjdXJyZW50IHJldHJpZXZh
bCwgcmlnaHQ/IFNlZTogcGxhdC94ZW4veDg2L2FyY2hfZXZlbnRzLmMgYW5kCj4gcGxhdC94ZW4v
eDg2L3RyYXBzLmMgLgoKV2VsbCBhY3R1YWxseSBJIHNlZSB0aGF0IHRoZSBpbnRlcnJ1cHQgc3Rh
Y2sgaW4KcGxhdC94ZW4veDg2L2FyY2hfZXZlbnRzLmMgaGFzIHRoZSByaWdodCBzaXplLCBTVEFD
S19TSVpFLgoKSW4gZGVlZCwgdGhlIHRyYXAgc3RhY2sgaW4gcGxhdC94ZW4veDg2L3RyYXBzLmMg
aXMgUEFHRV9TSVpFIGFuZCBpdApzaG91bGQgYmUgZml4ZWQuCgo+IERvIHlvdSBieSBjaGFuY2Ug
cmVtZW1iZXIgd2h5IHdlIGhhdmUgdGhlIGJvb3Qgc3RhY2sgdHdpY2UgYXMgYmlnPwo+IFNlZTog
eGVuL3g4Ni9zZXR1cC5jCgpJIGRvbid0IHJlbWVtYmVyLCBidXQgaXQgd2FzIHRoZSBzYW1lIHdp
dGggdGhlIGludGVycnVwdCBzdGFjayBpbgpwbGF0L3hlbi94ODYvYXJjaF9ldmVudHMuYyBiZWNh
dXNlIHRoZSBhbGlnbm1lbnQgd2FzIGRvbmUgYXQgcnVudGltZS4gSXQKbWlnaHQgYmUgdGhlIHNh
bWUgcmVhc29uLgoKPiAKPiAzKSBNb3JlIGFzIGEgbm90ZTogWGVuIG9uIEFybTMyIHNlZW1zIG5v
dCB0byBmb2xsb3cgYW55IFNUQUNLX1NJWkUKPiBkZWZpbml0aW9uIGF0IGFsbC4gV2Ugc2hvdWxk
IHByb2JhYmx5IHB1dCBhIG5vdGUgb24gdGhpcyBzb21ld2hlcmUuIEkgYW0KPiBub3Qgc3VyZSBp
ZiBpdCBpcyB3b3J0aCBmaXhpbmcgaXQgLSB3aG8ga25vd3Mgd2hhdCB3ZSBhcmUgZ29pbmcgdG8g
ZG8KPiB3aXRoIHRoaXMgYXJjaGl0ZWN0dXJlLXBsYXRmb3JtLWNvbWJpbmF0aW9uLiBJIHJhdGhl
ciBleHBlY3QgdGhhdCB3ZSBhcmUKPiBnb2luZyB0b3dhcmRzIEFybTY0IGZvciBYZW4gaW4gdGhl
IGZ1dHVyZS4KCkknbSBub3Qgc3VyZSBJIGZvbGxvdy4gVGhpcyBwYXRjaCBmaXhlcyB0aGF0IGFu
ZCBzZXRzIHRoZSBzYW1lIHN0YWNrCnNpemUgZm9yIEFSTS4KCj4gCj4gVGhhbmtzLAo+IAo+IFNp
bW9uCj4gCj4gT24gMjcuMDguMTkgMDk6NTYsIENvc3RpbiBMdXB1IHdyb3RlOgo+PiBUaGlzIHBh
dGNoIGFkZHMgYSBjb25maWcgb3B0aW9uIGZvciBjb25maWd1cmluZyB0aGUgc3RhY2sgc2l6ZSBw
YWdlCj4+IG9yZGVyLiBXZQo+PiBuZWVkIHRoaXMgZm9yIHN1cHBvcnRpbmcgbGFyZ2Ugc3RhY2tz
Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJv
Pgo+PiAtLS0KPj4gwqAgYXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5owqDCoMKg
IHwgMiArLQo+PiDCoCBhcmNoL2FybS9hcm02NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaMKgIHwg
MiArLQo+PiDCoCBhcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmggfCAyICst
Cj4+IMKgIHBsYXQvQ29uZmlnLnVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqAgfCA5ICsrKysrKysrKwo+PiDCoCA0IGZpbGVzIGNoYW5nZWQsIDEyIGlu
c2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9h
cm0vaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gYi9hcmNoL2FybS9hcm0vaW5jbHVkZS91ay9h
c20vbGltaXRzLmgKPj4gaW5kZXggMDg1NzYxYzMuLmUyMjk4ZDZiIDEwMDY0NAo+PiAtLS0gYS9h
cmNoL2FybS9hcm0vaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gKysrIGIvYXJjaC9hcm0vYXJt
L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+IEBAIC0zOSw3ICszOSw3IEBACj4+IMKgICNkZWZp
bmUgX19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUpIC0gMSkpCj4+IMKg
ICNlbmRpZgo+PiDCoCAtI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDCoCAyCj4+
ICsjZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIENPTkZJR19TVEFDS19TSVpF
X1BBR0VfT1JERVIKPj4gwqAgI2RlZmluZSBfX1NUQUNLX1NJWkXCoMKgwqDCoMKgwqDCoCAoX19Q
QUdFX1NJWkUgKiAoMSA8PAo+PiBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUikpCj4+IMKgIMKgICNk
ZWZpbmUgX19XT1JEU0laRcKgwqDCoMKgwqDCoMKgIDMyCj4+IGRpZmYgLS1naXQgYS9hcmNoL2Fy
bS9hcm02NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+PiBiL2FyY2gvYXJtL2FybTY0L2luY2x1
ZGUvdWsvYXNtL2xpbWl0cy5oCj4+IGluZGV4IGNlYzA1NjQxLi5mYjcwZjJiYSAxMDA2NDQKPj4g
LS0tIGEvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gKysrIGIvYXJj
aC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gQEAgLTQwLDcgKzQwLDcgQEAK
Pj4gwqAgI2RlZmluZSBfX1BBR0VfTUFTS8KgwqDCoMKgwqDCoMKgICh+KChfX1BBR0VfU0laRSkg
LSAxKSkKPj4gwqAgI2VuZGlmCj4+IMKgIC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVS
wqDCoMKgIDQKPj4gKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLCoMKgwqAgQ09ORklH
X1NUQUNLX1NJWkVfUEFHRV9PUkRFUgo+PiDCoCAjZGVmaW5lIF9fU1RBQ0tfU0laRcKgwqDCoCAo
X19QQUdFX1NJWkUgKiAoMSA8PCBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUikpCj4+IMKgICNkZWZp
bmUgX19TVEFDS19BTElHTl9TSVpFwqDCoMKgIDE2Cj4+IMKgIGRpZmYgLS1naXQgYS9hcmNoL3g4
Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gYi9hcmNoL3g4Ni94ODZfNjQvaW5j
bHVkZS91ay9hc20vbGltaXRzLmgKPj4gaW5kZXggYTk2OWJkMTcuLjIxODE0MDQ0IDEwMDY0NAo+
PiAtLS0gYS9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gKysrIGIv
YXJjaC94ODYveDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+IEBAIC0zOSw3ICszOSw3
IEBACj4+IMKgICNkZWZpbmUgX19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJ
WkUpIC0gMSkpCj4+IMKgICNlbmRpZgo+PiDCoCAtI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9P
UkRFUsKgwqDCoCA0Cj4+ICsjZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIENP
TkZJR19TVEFDS19TSVpFX1BBR0VfT1JERVIKPj4gwqAgI2RlZmluZSBfX1NUQUNLX1NJWkXCoMKg
wqDCoMKgwqDCoCAoX19QQUdFX1NJWkUgKiAoMSA8PAo+PiBfX1NUQUNLX1NJWkVfUEFHRV9PUkRF
UikpCj4+IMKgIMKgICNkZWZpbmUgX19XT1JEU0laRcKgwqDCoMKgwqDCoMKgIDY0Cj4+IGRpZmYg
LS1naXQgYS9wbGF0L0NvbmZpZy51ayBiL3BsYXQvQ29uZmlnLnVrCj4+IGluZGV4IDhhODc4ZWIw
Li5kMGI5OWJkNSAxMDA2NDQKPj4gLS0tIGEvcGxhdC9Db25maWcudWsKPj4gKysrIGIvcGxhdC9D
b25maWcudWsKPj4gQEAgLTI1LDMgKzI1LDEyIEBAIGNvbmZpZyBIWgo+PiDCoMKgwqDCoMKgIGhl
bHAKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIENvbmZpZ3VyZSB0aGUgdGltZXIgaW50ZXJydXB0IGZy
ZXF1ZW5jeS4KPj4gwqDCoMKgwqDCoMKgwqDCoMKgIE9ubHkgY2hhbmdlIHRoaXMgaWYgeW91IGtu
b3cgd2hhdCB5b3UncmUgZG9pbmcuCj4+ICsKPj4gK2NvbmZpZyBTVEFDS19TSVpFX1BBR0VfT1JE
RVIKPj4gK8KgwqDCoCBpbnQKPj4gK8KgwqDCoCBwcm9tcHQgIlN0YWNrIHNpemUgcGFnZSBvcmRl
ciIKPj4gK8KgwqDCoCBkZWZhdWx0IDQKPj4gK8KgwqDCoCBoZWxwCj4+ICvCoMKgwqDCoMKgwqDC
oCBJbmRpcmVjdGx5IGNvbmZpZ3VyZXMgdGhlIHN0YWNrIHNpemUgYnkgY2hhbmdpbmcgdGhlIHN0
YWNrCj4+IHNpemUgcGFnZQo+PiArwqDCoMKgwqDCoMKgwqAgb3JkZXIuIFN0YWNrIHNpemUgaXMg
ZXF1YWwgd2l0aCAyXm9yZGVyICogcGFnZSBzaXplIChlLmcuIDRLQikuCj4+ICvCoMKgwqDCoMKg
wqDCoCBPbmx5IGNoYW5nZSB0aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLgo+Pgo+
IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdAo+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
Zwo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:25:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:25:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SU5-0000st-Ja; Wed, 04 Sep 2019 10:25:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SU3-0000se-QH
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:25:51 +0000
X-Inumbo-ID: 5d558885-cefe-11e9-abae-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5d558885-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:25:50 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 7BF801053DF;
 Wed,  4 Sep 2019 12:25:49 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 1sbRMhMzM8j8; Wed,  4 Sep 2019 12:25:49 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 5B535104DDA
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:25:49 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:25:49 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:25:34 +0200
Message-ID: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 0/4] Add ucontext.h and
 bits/signal.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgY2hhbmdlcyB3ZXJlIG5lZWRlZCBmb3Igc3VwcG9ydGluZyBsaWJ1Y29udGV4dCBhcyBh
biBleHRlcm5hbApsaWJyYXJ5LiBUaGlzIGxpYnJhcnkgaXMgdXNlZCBmcm9tIGxpYmdvLiAKCkNo
YXJhbGFtcG9zIE1haW5hcyAoNCk6CiAgYml0cy9zaWduYWwuaDogSW1wb3J0IGZyb20gbXVzbAog
IGJpdHMvc2lnbmFsLmg6IEFkYXB0IHRvIHVuaWtyYWZ0CiAgdWNvbnRleHQuaDogSW1wb3J0IGZy
b20gbXVzbAogIHVjb250ZXh0Lmg6IEFkYXB0IHRvIHVuaWtyYWZ0CgogbXVzbC1pbXBvcnRlZC9h
cmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oIHwgMTI0ICsrKysrKysrKysrKysrKysrKysrKysrKwog
bXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmggICAgICAgIHwgIDI2ICsrKysrCiAyIGZp
bGVzIGNoYW5nZWQsIDE1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbXVzbC1p
bXBvcnRlZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbXVz
bC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmgKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:25:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:25:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SU5-0000so-IN; Wed, 04 Sep 2019 10:25:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SU3-0000sf-QQ
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:25:51 +0000
X-Inumbo-ID: 5d558885-cefe-11e9-abae-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5d558885-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:25:50 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 7BF801053DF;
 Wed,  4 Sep 2019 12:25:49 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 1sbRMhMzM8j8; Wed,  4 Sep 2019 12:25:49 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 5B535104DDA
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:25:49 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:25:49 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:25:34 +0200
Message-ID: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 0/4] Add ucontext.h and
 bits/signal.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgY2hhbmdlcyB3ZXJlIG5lZWRlZCBmb3Igc3VwcG9ydGluZyBsaWJ1Y29udGV4dCBhcyBh
biBleHRlcm5hbApsaWJyYXJ5LiBUaGlzIGxpYnJhcnkgaXMgdXNlZCBmcm9tIGxpYmdvLiAKCkNo
YXJhbGFtcG9zIE1haW5hcyAoNCk6CiAgYml0cy9zaWduYWwuaDogSW1wb3J0IGZyb20gbXVzbAog
IGJpdHMvc2lnbmFsLmg6IEFkYXB0IHRvIHVuaWtyYWZ0CiAgdWNvbnRleHQuaDogSW1wb3J0IGZy
b20gbXVzbAogIHVjb250ZXh0Lmg6IEFkYXB0IHRvIHVuaWtyYWZ0CgogbXVzbC1pbXBvcnRlZC9h
cmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oIHwgMTI0ICsrKysrKysrKysrKysrKysrKysrKysrKwog
bXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmggICAgICAgIHwgIDI2ICsrKysrCiAyIGZp
bGVzIGNoYW5nZWQsIDE1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbXVzbC1p
bXBvcnRlZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbXVz
bC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmgKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:25:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:25:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SU9-0000te-L3; Wed, 04 Sep 2019 10:25:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SU7-0000tM-V1
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:25:55 +0000
X-Inumbo-ID: 5fa5a664-cefe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5fa5a664-cefe-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 10:25:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0C61FF2030;
 Wed,  4 Sep 2019 12:25:53 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id AtdiiRxCRoFU; Wed,  4 Sep 2019 12:25:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DD8B4F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:25:50 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:25:50 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:25:35 +0200
Message-ID: <20190904102538.16320-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/4] bits/signal.h: Import
 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29waWVkIGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgpnaXQ6Ly9naXQu
bXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQuCgpTaWduZWQtb2ZmLWJ5OiBDaGFy
YWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogbXVzbC1p
bXBvcnRlZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oIHwgMTI0ICsrKysrKysrKysrKysrKysr
KysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEyNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbXVzbC1pbXBvcnRlZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oCgpkaWZmIC0tZ2l0
IGEvbXVzbC1pbXBvcnRlZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oIGIvbXVzbC1pbXBvcnRl
ZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjIwY2JmNGEKLS0tIC9kZXYvbnVsbAorKysgYi9tdXNsLWltcG9ydGVkL2FyY2gveDg2
XzY0L2JpdHMvc2lnbmFsLmgKQEAgLTAsMCArMSwxMjQgQEAKKyNpZiBkZWZpbmVkKF9QT1NJWF9T
T1VSQ0UpIHx8IGRlZmluZWQoX1BPU0lYX0NfU09VUkNFKSBcCisgfHwgZGVmaW5lZChfWE9QRU5f
U09VUkNFKSB8fCBkZWZpbmVkKF9HTlVfU09VUkNFKSB8fCBkZWZpbmVkKF9CU0RfU09VUkNFKQor
CisjaWZkZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgUkVHX1I4ICAgICAgICAgIDAKKyNkZWZpbmUg
UkVHX1I5ICAgICAgICAgIDEKKyNkZWZpbmUgUkVHX1IxMCAgICAgICAgIDIKKyNkZWZpbmUgUkVH
X1IxMSAgICAgICAgIDMKKyNkZWZpbmUgUkVHX1IxMiAgICAgICAgIDQKKyNkZWZpbmUgUkVHX1Ix
MyAgICAgICAgIDUKKyNkZWZpbmUgUkVHX1IxNCAgICAgICAgIDYKKyNkZWZpbmUgUkVHX1IxNSAg
ICAgICAgIDcKKyNkZWZpbmUgUkVHX1JESSAgICAgICAgIDgKKyNkZWZpbmUgUkVHX1JTSSAgICAg
ICAgIDkKKyNkZWZpbmUgUkVHX1JCUCAgICAgICAgIDEwCisjZGVmaW5lIFJFR19SQlggICAgICAg
ICAxMQorI2RlZmluZSBSRUdfUkRYICAgICAgICAgMTIKKyNkZWZpbmUgUkVHX1JBWCAgICAgICAg
IDEzCisjZGVmaW5lIFJFR19SQ1ggICAgICAgICAxNAorI2RlZmluZSBSRUdfUlNQICAgICAgICAg
MTUKKyNkZWZpbmUgUkVHX1JJUCAgICAgICAgIDE2CisjZGVmaW5lIFJFR19FRkwgICAgICAgICAx
NworI2RlZmluZSBSRUdfQ1NHU0ZTICAgICAgMTgKKyNkZWZpbmUgUkVHX0VSUiAgICAgICAgIDE5
CisjZGVmaW5lIFJFR19UUkFQTk8gICAgICAyMAorI2RlZmluZSBSRUdfT0xETUFTSyAgICAgMjEK
KyNkZWZpbmUgUkVHX0NSMiAgICAgICAgIDIyCisjZW5kaWYKKworI2lmIGRlZmluZWQoX0dOVV9T
T1VSQ0UpIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCit0eXBlZGVmIGxvbmcgbG9uZyBncmVnX3Qs
IGdyZWdzZXRfdFsyM107Cit0eXBlZGVmIHN0cnVjdCBfZnBzdGF0ZSB7CisJdW5zaWduZWQgc2hv
cnQgY3dkLCBzd2QsIGZ0dywgZm9wOworCXVuc2lnbmVkIGxvbmcgbG9uZyByaXAsIHJkcDsKKwl1
bnNpZ25lZCBteGNzciwgbXhjcl9tYXNrOworCXN0cnVjdCB7CisJCXVuc2lnbmVkIHNob3J0IHNp
Z25pZmljYW5kWzRdLCBleHBvbmVudCwgcGFkZGluZ1szXTsKKwl9IF9zdFs4XTsKKwlzdHJ1Y3Qg
eworCQl1bnNpZ25lZCBlbGVtZW50WzRdOworCX0gX3htbVsxNl07CisJdW5zaWduZWQgcGFkZGlu
Z1syNF07Cit9ICpmcHJlZ3NldF90Oworc3RydWN0IHNpZ2NvbnRleHQgeworCXVuc2lnbmVkIGxv
bmcgcjgsIHI5LCByMTAsIHIxMSwgcjEyLCByMTMsIHIxNCwgcjE1OworCXVuc2lnbmVkIGxvbmcg
cmRpLCByc2ksIHJicCwgcmJ4LCByZHgsIHJheCwgcmN4LCByc3AsIHJpcCwgZWZsYWdzOworCXVu
c2lnbmVkIHNob3J0IGNzLCBncywgZnMsIF9fcGFkMDsKKwl1bnNpZ25lZCBsb25nIGVyciwgdHJh
cG5vLCBvbGRtYXNrLCBjcjI7CisJc3RydWN0IF9mcHN0YXRlICpmcHN0YXRlOworCXVuc2lnbmVk
IGxvbmcgX19yZXNlcnZlZDFbOF07Cit9OwordHlwZWRlZiBzdHJ1Y3QgeworCWdyZWdzZXRfdCBn
cmVnczsKKwlmcHJlZ3NldF90IGZwcmVnczsKKwl1bnNpZ25lZCBsb25nIGxvbmcgX19yZXNlcnZl
ZDFbOF07Cit9IG1jb250ZXh0X3Q7CisjZWxzZQordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVk
IGxvbmcgX19zcGFjZVszMl07Cit9IG1jb250ZXh0X3Q7CisjZW5kaWYKKworc3RydWN0IHNpZ2Fs
dHN0YWNrIHsKKwl2b2lkICpzc19zcDsKKwlpbnQgc3NfZmxhZ3M7CisJc2l6ZV90IHNzX3NpemU7
Cit9OworCit0eXBlZGVmIHN0cnVjdCBfX3Vjb250ZXh0IHsKKwl1bnNpZ25lZCBsb25nIHVjX2Zs
YWdzOworCXN0cnVjdCBfX3Vjb250ZXh0ICp1Y19saW5rOworCXN0YWNrX3QgdWNfc3RhY2s7CisJ
bWNvbnRleHRfdCB1Y19tY29udGV4dDsKKwlzaWdzZXRfdCB1Y19zaWdtYXNrOworCXVuc2lnbmVk
IGxvbmcgX19mcHJlZ3NfbWVtWzY0XTsKK30gdWNvbnRleHRfdDsKKworI2RlZmluZSBTQV9OT0NM
RFNUT1AgIDEKKyNkZWZpbmUgU0FfTk9DTERXQUlUICAyCisjZGVmaW5lIFNBX1NJR0lORk8gICAg
NAorI2RlZmluZSBTQV9PTlNUQUNLICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVEFSVCAg
ICAweDEwMDAwMDAwCisjZGVmaW5lIFNBX05PREVGRVIgICAgMHg0MDAwMDAwMAorI2RlZmluZSBT
QV9SRVNFVEhBTkQgIDB4ODAwMDAwMDAKKyNkZWZpbmUgU0FfUkVTVE9SRVIgICAweDA0MDAwMDAw
CisKKyNlbmRpZgorCisjZGVmaW5lIFNJR0hVUCAgICAxCisjZGVmaW5lIFNJR0lOVCAgICAyCisj
ZGVmaW5lIFNJR1FVSVQgICAzCisjZGVmaW5lIFNJR0lMTCAgICA0CisjZGVmaW5lIFNJR1RSQVAg
ICA1CisjZGVmaW5lIFNJR0FCUlQgICA2CisjZGVmaW5lIFNJR0lPVCAgICBTSUdBQlJUCisjZGVm
aW5lIFNJR0JVUyAgICA3CisjZGVmaW5lIFNJR0ZQRSAgICA4CisjZGVmaW5lIFNJR0tJTEwgICA5
CisjZGVmaW5lIFNJR1VTUjEgICAxMAorI2RlZmluZSBTSUdTRUdWICAgMTEKKyNkZWZpbmUgU0lH
VVNSMiAgIDEyCisjZGVmaW5lIFNJR1BJUEUgICAxMworI2RlZmluZSBTSUdBTFJNICAgMTQKKyNk
ZWZpbmUgU0lHVEVSTSAgIDE1CisjZGVmaW5lIFNJR1NUS0ZMVCAxNgorI2RlZmluZSBTSUdDSExE
ICAgMTcKKyNkZWZpbmUgU0lHQ09OVCAgIDE4CisjZGVmaW5lIFNJR1NUT1AgICAxOQorI2RlZmlu
ZSBTSUdUU1RQICAgMjAKKyNkZWZpbmUgU0lHVFRJTiAgIDIxCisjZGVmaW5lIFNJR1RUT1UgICAy
MgorI2RlZmluZSBTSUdVUkcgICAgMjMKKyNkZWZpbmUgU0lHWENQVSAgIDI0CisjZGVmaW5lIFNJ
R1hGU1ogICAyNQorI2RlZmluZSBTSUdWVEFMUk0gMjYKKyNkZWZpbmUgU0lHUFJPRiAgIDI3Cisj
ZGVmaW5lIFNJR1dJTkNIICAyOAorI2RlZmluZSBTSUdJTyAgICAgMjkKKyNkZWZpbmUgU0lHUE9M
TCAgIDI5CisjZGVmaW5lIFNJR1BXUiAgICAzMAorI2RlZmluZSBTSUdTWVMgICAgMzEKKyNkZWZp
bmUgU0lHVU5VU0VEIFNJR1NZUworCisjZGVmaW5lIF9OU0lHIDY1Ci0tIAoyLjE3LjEKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:26:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:26:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SUE-0000wB-O2; Wed, 04 Sep 2019 10:26:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SUC-0000vH-SR
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:26:00 +0000
X-Inumbo-ID: 60d5b902-cefe-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 60d5b902-cefe-11e9-b76c-bc764e2007e4;
 Wed, 04 Sep 2019 10:25:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 13A13F2031;
 Wed,  4 Sep 2019 12:25:55 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Fheci-_2tg6b; Wed,  4 Sep 2019 12:25:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E622AF2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:25:52 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:25:52 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:25:36 +0200
Message-ID: <20190904102538.16320-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 2/4] bits/signal.h: Adapt to
 unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

c3RydWN0IHNpZ2FsdHN0YWNrIGlzIGFscmVhZHkgZGVmaW5lZCBmcm9tIG5ld2xpYidzIHN5cy9z
aWduYWwuaCB3aGljaAppcyBpbmNsdWRlZCBmcm9tIHVjb250ZXh0LmguIFRvIGF2b2lkIHJlZGlu
aXRpb24gZXJyb3Igd2hpbGUgY29tcGlsaW5nLCAKc3RydWN0IHNpZ2FsdHN0YWNrIGlzIGNvbW1l
bnRlZCBvdXQuCgpTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9z
Lk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogbXVzbC1pbXBvcnRlZC9hcmNoL3g4Nl82NC9iaXRzL3Np
Z25hbC5oIHwgMTAgKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwg
NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9tdXNsLWltcG9ydGVkL2FyY2gveDg2XzY0L2Jp
dHMvc2lnbmFsLmggYi9tdXNsLWltcG9ydGVkL2FyY2gveDg2XzY0L2JpdHMvc2lnbmFsLmgKaW5k
ZXggMjBjYmY0YS4uZjNiOWVmZCAxMDA2NDQKLS0tIGEvbXVzbC1pbXBvcnRlZC9hcmNoL3g4Nl82
NC9iaXRzL3NpZ25hbC5oCisrKyBiL211c2wtaW1wb3J0ZWQvYXJjaC94ODZfNjQvYml0cy9zaWdu
YWwuaApAQCAtNjAsMTEgKzYwLDExIEBAIHR5cGVkZWYgc3RydWN0IHsKIH0gbWNvbnRleHRfdDsK
ICNlbmRpZgogCi1zdHJ1Y3Qgc2lnYWx0c3RhY2sgewotCXZvaWQgKnNzX3NwOwotCWludCBzc19m
bGFnczsKLQlzaXplX3Qgc3Nfc2l6ZTsKLX07CisvL3N0cnVjdCBzaWdhbHRzdGFjayB7CisvLwl2
b2lkICpzc19zcDsKKy8vCWludCBzc19mbGFnczsKKy8vCXNpemVfdCBzc19zaXplOworLy99Owog
CiB0eXBlZGVmIHN0cnVjdCBfX3Vjb250ZXh0IHsKIAl1bnNpZ25lZCBsb25nIHVjX2ZsYWdzOwot
LSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:26:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:26:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SUJ-0000xE-QA; Wed, 04 Sep 2019 10:26:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SUH-0000wt-S7
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:26:05 +0000
X-Inumbo-ID: 6209d3e4-cefe-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6209d3e4-cefe-11e9-b76c-bc764e2007e4;
 Wed, 04 Sep 2019 10:25:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 242A4F2030;
 Wed,  4 Sep 2019 12:25:57 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id KWEMlIq4fyyu; Wed,  4 Sep 2019 12:25:57 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EE5F1F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:25:54 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:25:52 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:25:37 +0200
Message-ID: <20190904102538.16320-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 3/4] ucontext.h: Import from
 musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29waWVkIGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgpnaXQ6Ly9naXQu
bXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQuCgpTaWduZWQtb2ZmLWJ5OiBDaGFy
YWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogbXVzbC1p
bXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmggfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysr
CiAxIGZpbGUgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG11
c2wtaW1wb3J0ZWQvaW5jbHVkZS91Y29udGV4dC5oCgpkaWZmIC0tZ2l0IGEvbXVzbC1pbXBvcnRl
ZC9pbmNsdWRlL3Vjb250ZXh0LmggYi9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWNvbnRleHQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmI3NzZlCi0tLSAvZGV2L251bGwK
KysrIGIvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmgKQEAgLTAsMCArMSwyNSBAQAor
I2lmbmRlZiBfVUNPTlRFWFRfSAorI2RlZmluZSBfVUNPTlRFWFRfSAorI2lmZGVmIF9fY3BsdXNw
bHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2lu
Y2x1ZGUgPHNpZ25hbC5oPgorCisjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChf
QlNEX1NPVVJDRSkKKyNkZWZpbmUgTkdSRUcgKHNpemVvZihncmVnc2V0X3QpL3NpemVvZihncmVn
X3QpKQorI2VuZGlmCisKK3N0cnVjdCBfX3Vjb250ZXh0OworCitpbnQgIGdldGNvbnRleHQoc3Ry
dWN0IF9fdWNvbnRleHQgKik7Cit2b2lkIG1ha2Vjb250ZXh0KHN0cnVjdCBfX3Vjb250ZXh0ICos
IHZvaWQgKCopKHZvaWQpLCBpbnQsIC4uLik7CitpbnQgIHNldGNvbnRleHQoY29uc3Qgc3RydWN0
IF9fdWNvbnRleHQgKik7CitpbnQgIHN3YXBjb250ZXh0KHN0cnVjdCBfX3Vjb250ZXh0ICosIGNv
bnN0IHN0cnVjdCBfX3Vjb250ZXh0ICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZgorI2VuZGlmCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:26:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:26:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SUO-0000xy-Rd; Wed, 04 Sep 2019 10:26:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SUM-0000xn-SW
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:26:10 +0000
X-Inumbo-ID: 634d99fc-cefe-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 634d99fc-cefe-11e9-a337-bc764e2007e4;
 Wed, 04 Sep 2019 10:25:59 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4117EF2030;
 Wed,  4 Sep 2019 12:25:59 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id noZaaiAjSVPm; Wed,  4 Sep 2019 12:25:59 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0A2D0F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:25:57 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:25:54 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:25:38 +0200
Message-ID: <20190904102538.16320-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 4/4] ucontext.h: Adapt to
 unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29tbWVudCBvdXQgZmVhdHVyZXMuaCBhbmQgaW5jbHVkZSBiaXRzL3NpZ25hbC5oIHdoaWNoIGRl
ZmluZXMgc3RydWN0CnVjb250ZXh0X3QuICAKClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1h
aW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KLS0tCiBtdXNsLWltcG9ydGVkL2lu
Y2x1ZGUvdWNvbnRleHQuaCB8IDMgKystCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCsp
LCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250
ZXh0LmggYi9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWNvbnRleHQuaAppbmRleCAzYmI3NzZlLi43
NjBjNjgwIDEwMDY0NAotLS0gYS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWNvbnRleHQuaAorKysg
Yi9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWNvbnRleHQuaApAQCAtNCw5ICs0LDEwIEBACiBleHRl
cm4gIkMiIHsKICNlbmRpZgogCi0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKy8qIFRPRE8gI2luY2x1
ZGUgPGZlYXR1cmVzLmg+Ki8KIAogI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPGJpdHMv
c2lnbmFsLmg+CiAKICNpZiBkZWZpbmVkKF9HTlVfU09VUkNFKSB8fCBkZWZpbmVkKF9CU0RfU09V
UkNFKQogI2RlZmluZSBOR1JFRyAoc2l6ZW9mKGdyZWdzZXRfdCkvc2l6ZW9mKGdyZWdfdCkpCi0t
IAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:28:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:28:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SX0-00010a-4v; Wed, 04 Sep 2019 10:28:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SWy-00010M-J4
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:28:52 +0000
X-Inumbo-ID: c9af4d58-cefe-11e9-abae-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c9af4d58-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:28:51 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id F38391053DF;
 Wed,  4 Sep 2019 12:28:50 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 9F2Iz6OS3WuV; Wed,  4 Sep 2019 12:28:50 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id D2A7E104DDA
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:50 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:50 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:36 +0200
Message-ID: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 0/4] Introduce
 libucontext library to unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBzZXJpZXMgaW50cm9kdWNlcyB0aGUgbGlidWNvbnRleHQgbGlicmFyeSB0byBVbmlrcmFm
dC4KbGlidWNvbnRleHQgcHJvdmlkZXMgdGhlIDx1Y29udGV4dC5oPiBBQkkgd2hlbiBwZXJmb3Jt
aW5nIGNvbnRleHQgc3dhcHMuClRoZSA8dWNvbnRleHQuaD4gZnVuY3Rpb25zIGFyZSBkZXByZWNh
dGVkIGluIFBPU0lYLiBIb3dldmVyIHRoZXkgYXJlCm5vdGFibHkgdXNlZCBieSBHQ0MncyBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgR28gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuClRoZXJlZm9yZSwgdG8g
c3VwcG9ydCBHbywgc29mdHdhcmUgdGhhdCB1dGlsaXNlcyB0aGlzIGRlcHJlY2F0ZWQgQVBJIGlz
Cm5lZWRlZC4KCkNoYXJhbGFtcG9zIE1haW5hcyAoNCk6CiAgQWRkIGRvY3VtZW50YXRpb24KICBB
ZGQgLmdpdGlnbm9yZQogIEFkZCBwYXRjaCB0byBidWlsZCBsaWJ1Y29udGV4dAogIEluaXRpYWwg
cG9ydCBvZiBsaWJ1Y29udGV4dCBvbiB1bmlrcmFmdAoKIC5naXRpZ25vcmUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAyNyArKysrKysrCiBDT0RJTkdfU1RZTEUubWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICA0ICsKIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgNSArKwogTUFJTlRBSU5FUlMubWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IDEwICsrKwogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IDg0ICsrKysrKysrKysrKysrKysrKysrKwogUkVBRE1FLm1kICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICA1ICsrCiBwYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhl
YWRlci1maWxlLnBhdGNoIHwgMzAgKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMTY5IGluc2Vy
dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2
NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBj
cmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5F
UlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0
IFJFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQt
aGVhZGVyLWZpbGUucGF0Y2gKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:28:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:28:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SX0-00010V-3B; Wed, 04 Sep 2019 10:28:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SWy-00010L-Ht
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:28:52 +0000
X-Inumbo-ID: c9af4d58-cefe-11e9-abae-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c9af4d58-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:28:51 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id F38391053DF;
 Wed,  4 Sep 2019 12:28:50 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 9F2Iz6OS3WuV; Wed,  4 Sep 2019 12:28:50 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id D2A7E104DDA
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:50 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:50 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:36 +0200
Message-ID: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 0/4] Introduce
 libucontext library to unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBzZXJpZXMgaW50cm9kdWNlcyB0aGUgbGlidWNvbnRleHQgbGlicmFyeSB0byBVbmlrcmFm
dC4KbGlidWNvbnRleHQgcHJvdmlkZXMgdGhlIDx1Y29udGV4dC5oPiBBQkkgd2hlbiBwZXJmb3Jt
aW5nIGNvbnRleHQgc3dhcHMuClRoZSA8dWNvbnRleHQuaD4gZnVuY3Rpb25zIGFyZSBkZXByZWNh
dGVkIGluIFBPU0lYLiBIb3dldmVyIHRoZXkgYXJlCm5vdGFibHkgdXNlZCBieSBHQ0MncyBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGUgR28gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuClRoZXJlZm9yZSwgdG8g
c3VwcG9ydCBHbywgc29mdHdhcmUgdGhhdCB1dGlsaXNlcyB0aGlzIGRlcHJlY2F0ZWQgQVBJIGlz
Cm5lZWRlZC4KCkNoYXJhbGFtcG9zIE1haW5hcyAoNCk6CiAgQWRkIGRvY3VtZW50YXRpb24KICBB
ZGQgLmdpdGlnbm9yZQogIEFkZCBwYXRjaCB0byBidWlsZCBsaWJ1Y29udGV4dAogIEluaXRpYWwg
cG9ydCBvZiBsaWJ1Y29udGV4dCBvbiB1bmlrcmFmdAoKIC5naXRpZ25vcmUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAyNyArKysrKysrCiBDT0RJTkdfU1RZTEUubWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDQgKwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICA0ICsKIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgNSArKwogTUFJTlRBSU5FUlMubWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IDEwICsrKwogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IDg0ICsrKysrKysrKysrKysrKysrKysrKwogUkVBRE1FLm1kICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICA1ICsrCiBwYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhl
YWRlci1maWxlLnBhdGNoIHwgMzAgKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMTY5IGluc2Vy
dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2
NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBj
cmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5F
UlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0
IFJFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQt
aGVhZGVyLWZpbGUucGF0Y2gKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:28:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:28:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SX3-00011M-6G; Wed, 04 Sep 2019 10:28:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SX1-00011B-TN
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:28:55 +0000
X-Inumbo-ID: cbbb29be-cefe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id cbbb29be-cefe-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 10:28:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 65C2FF2030;
 Wed,  4 Sep 2019 12:28:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 8yuUDkF9pYp6; Wed,  4 Sep 2019 12:28:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3D880F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:52 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:51 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:37 +0200
Message-ID: <20190904102840.18577-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
References: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 1/4] Add documentation
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8
ICA0ICsrKysKIE1BSU5UQUlORVJTLm1kICB8IDEwICsrKysrKysrKysKIFJFQURNRS5tZCAgICAg
ICB8ICA1ICsrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJ
TkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZAogY3JlYXRlIG1vZGUgMTAw
NjQ0IFJFQURNRS5tZAoKZGlmZiAtLWdpdCBhL0NPRElOR19TVFlMRS5tZCBiL0NPRElOR19TVFlM
RS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMwMDQxCi0tLSAvZGV2
L251bGwKKysrIGIvQ09ESU5HX1NUWUxFLm1kCkBAIC0wLDAgKzEsNCBAQAorQ29kaW5nIFN0eWxl
Cis9PT09PT09PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09ESU5HX1NUWUxFLm1kYCBm
aWxlIGluIHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9DT05UUklC
VVRJTkcubWQgYi9DT05UUklCVVRJTkcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNWY1NWVjYQotLS0gL2Rldi9udWxsCisrKyBiL0NPTlRSSUJVVElORy5tZApAQCAtMCww
ICsxLDQgQEAKK0NvbnRyaWJ1dGluZyB0byBVbmlrcmFmdAorPT09PT09PT09PT09PT09PT09PT09
PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09OVFJJQlVUSU5HLm1kYCBmaWxlIGluIHRoZSBt
YWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUy5tZCBiL01B
SU5UQUlORVJTLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZTc5MjEK
LS0tIC9kZXYvbnVsbAorKysgYi9NQUlOVEFJTkVSUy5tZApAQCAtMCwwICsxLDEwIEBACitNYWlu
dGFpbmVycyBMaXN0Cis9PT09PT09PT09PT09PT09CisKK0ZvciBub3RlcyBvbiBob3cgdG8gcmVh
ZCB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gYE1BSU5UQUlORVJTLm1kYCBpbgor
dGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KKworCUxJQlVDT05URVhULVVOSUtSQUZUCisJ
TToJRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgorCUw6CW1pbmlvcy1kZXZl
bEBsaXN0cy54ZW4ub3JnCisJRjogKgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1k
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5OGUwMWYKLS0tIC9kZXYvbnVs
bAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw1IEBACitsaWJ1Y29udGV4dCBmb3IgdW5pa3Jh
ZnQKKz09PT09PT09PT09PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBh
cyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2AKK3N1YmRpcmVjdG9yeSBv
ZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5LgotLSAKMi4xNy4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:29:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:29:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SX6-000127-7i; Wed, 04 Sep 2019 10:29:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SX4-00011p-S1
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:28:58 +0000
X-Inumbo-ID: cced7daa-cefe-11e9-abae-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cced7daa-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:28:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 6F57CF2030;
 Wed,  4 Sep 2019 12:28:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id lSmiTq_YFiwU; Wed,  4 Sep 2019 12:28:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 4487DF2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:54 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:52 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:38 +0200
Message-ID: <20190904102840.18577-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
References: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 2/4] Add .gitignore
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIC5naXRpZ25vcmUgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysK
IDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgLmdp
dGlnbm9yZQoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJmZDMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0
aWdub3JlCkBAIC0wLDAgKzEsMjcgQEAKKyouZGVwZW5kCisqLm8KKyouYQorKi5kCisqLnNvCisq
Lm9yaWcKKyoucmVqCisqLmJhaworKi5zd3AKKyp+CissKgorXCMqXCMKKy5cIyoKK1wjXypcIwor
LlwjXyoKKyEuZ2l0aWdub3JlCisuKgorCisjIGdudSBnbG9iYWwgZmlsZXMKK0dQQVRICitHUlRB
R1MKK0dTWU1TCitHVEFHUworCisjIGNzY29wZSBmaWxlcworY3Njb3BlLioKK25jc2NvcGUuKgot
LSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:29:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:29:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SX6-00012E-9b; Wed, 04 Sep 2019 10:29:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SX4-00011o-SJ
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:28:58 +0000
X-Inumbo-ID: cced7daa-cefe-11e9-abae-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cced7daa-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:28:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 6F57CF2030;
 Wed,  4 Sep 2019 12:28:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id lSmiTq_YFiwU; Wed,  4 Sep 2019 12:28:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 4487DF2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:54 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:52 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:38 +0200
Message-ID: <20190904102840.18577-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
References: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 2/4] Add .gitignore
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIC5naXRpZ25vcmUgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysK
IDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgLmdp
dGlnbm9yZQoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJmZDMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0
aWdub3JlCkBAIC0wLDAgKzEsMjcgQEAKKyouZGVwZW5kCisqLm8KKyouYQorKi5kCisqLnNvCisq
Lm9yaWcKKyoucmVqCisqLmJhaworKi5zd3AKKyp+CissKgorXCMqXCMKKy5cIyoKK1wjXypcIwor
LlwjXyoKKyEuZ2l0aWdub3JlCisuKgorCisjIGdudSBnbG9iYWwgZmlsZXMKK0dQQVRICitHUlRB
R1MKK0dTWU1TCitHVEFHUworCisjIGNzY29wZSBmaWxlcworY3Njb3BlLioKK25jc2NvcGUuKgot
LSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:29:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:29:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SX9-00013o-BZ; Wed, 04 Sep 2019 10:29:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SX8-00013Y-HT
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:29:02 +0000
X-Inumbo-ID: ce2d7134-cefe-11e9-abae-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ce2d7134-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:28:59 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 7FDDEF2031;
 Wed,  4 Sep 2019 12:28:58 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id V1HAP22IDR4Y; Wed,  4 Sep 2019 12:28:58 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 55CF8F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:56 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:53 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:39 +0200
Message-ID: <20190904102840.18577-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
References: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 3/4] Add patch to build
 libucontext
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q3VycmVudCBwYXRjaCBjaGFuZ2VzIG9uZSBoZWFkZXIgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGZy
b20KbWFrZWNvbnRleHQuYwoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFy
YWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIHBhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQt
aGVhZGVyLWZpbGUucGF0Y2ggfCAzMCArKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFu
Z2VkLCAzMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLUFk
ZC11Y29udGV4dC1oZWFkZXItZmlsZS5wYXRjaAoKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1B
ZGQtdWNvbnRleHQtaGVhZGVyLWZpbGUucGF0Y2ggYi9wYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0
LWhlYWRlci1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIw
OTY4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhlYWRl
ci1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYmJjYWFlOTkyZjUzZDg2NDhhYmFi
NTI1NGU4MWJkZjMwNjQwOTExYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoYXJh
bGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KK0RhdGU6IFdlZCwg
MjkgTWF5IDIwMTkgMTE6MzQ6MDMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHVjb250ZXh0
IGhlYWRlciBmaWxlCisKK09uIG11c2wgdWNvbnRleHQuaCBoZWFkZXIgZmlsZSBpcyBpbmNsdWRl
ZCBieSBzaWduYWwuaCBoZWFkZXIgZmlsZSwgYnV0CituZXdsaWIncyBzaWduYWwuaCBkb2VzIG5v
dCBpbmNsdWRlIHVjb250ZXh0LmguCisKK1NpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5h
cyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KKworLS0tCisgYXJjaC94ODZfNjQvbWFr
ZWNvbnRleHQuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVs
ZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21ha2Vjb250ZXh0LmMgYi9hcmNo
L3g4Nl82NC9tYWtlY29udGV4dC5jCitpbmRleCBiYTZjYTU5Li5lMjcyMDA4IDEwMDY0NAorLS0t
IGEvYXJjaC94ODZfNjQvbWFrZWNvbnRleHQuYworKysrIGIvYXJjaC94ODZfNjQvbWFrZWNvbnRl
eHQuYworQEAgLTEzLDcgKzEzLDcgQEAKKyAjZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUg
PHN0ZGRlZi5oPgorICNpbmNsdWRlIDxzdGRhcmcuaD4KKy0jaW5jbHVkZSA8c2lnbmFsLmg+Cisr
I2luY2x1ZGUgPHVjb250ZXh0Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxz
dGRpbnQuaD4KKyAKKy0tIAorMi4xNy4xCisKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:29:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:29:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SX9-00013t-Cm; Wed, 04 Sep 2019 10:29:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SX8-00013Z-I9
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:29:02 +0000
X-Inumbo-ID: ce2d7134-cefe-11e9-abae-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ce2d7134-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:28:59 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 7FDDEF2031;
 Wed,  4 Sep 2019 12:28:58 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id V1HAP22IDR4Y; Wed,  4 Sep 2019 12:28:58 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 55CF8F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:56 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:53 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:39 +0200
Message-ID: <20190904102840.18577-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
References: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 3/4] Add patch to build
 libucontext
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q3VycmVudCBwYXRjaCBjaGFuZ2VzIG9uZSBoZWFkZXIgZmlsZSB0aGF0IGlzIGluY2x1ZGVkIGZy
b20KbWFrZWNvbnRleHQuYwoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFy
YWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIHBhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQt
aGVhZGVyLWZpbGUucGF0Y2ggfCAzMCArKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFu
Z2VkLCAzMCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLUFk
ZC11Y29udGV4dC1oZWFkZXItZmlsZS5wYXRjaAoKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1B
ZGQtdWNvbnRleHQtaGVhZGVyLWZpbGUucGF0Y2ggYi9wYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0
LWhlYWRlci1maWxlLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIw
OTY4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhlYWRl
ci1maWxlLnBhdGNoCkBAIC0wLDAgKzEsMzAgQEAKK0Zyb20gYmJjYWFlOTkyZjUzZDg2NDhhYmFi
NTI1NGU4MWJkZjMwNjQwOTExYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoYXJh
bGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KK0RhdGU6IFdlZCwg
MjkgTWF5IDIwMTkgMTE6MzQ6MDMgKzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHVjb250ZXh0
IGhlYWRlciBmaWxlCisKK09uIG11c2wgdWNvbnRleHQuaCBoZWFkZXIgZmlsZSBpcyBpbmNsdWRl
ZCBieSBzaWduYWwuaCBoZWFkZXIgZmlsZSwgYnV0CituZXdsaWIncyBzaWduYWwuaCBkb2VzIG5v
dCBpbmNsdWRlIHVjb250ZXh0LmguCisKK1NpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5h
cyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KKworLS0tCisgYXJjaC94ODZfNjQvbWFr
ZWNvbnRleHQuYyB8IDIgKy0KKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVs
ZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21ha2Vjb250ZXh0LmMgYi9hcmNo
L3g4Nl82NC9tYWtlY29udGV4dC5jCitpbmRleCBiYTZjYTU5Li5lMjcyMDA4IDEwMDY0NAorLS0t
IGEvYXJjaC94ODZfNjQvbWFrZWNvbnRleHQuYworKysrIGIvYXJjaC94ODZfNjQvbWFrZWNvbnRl
eHQuYworQEAgLTEzLDcgKzEzLDcgQEAKKyAjZGVmaW5lIF9HTlVfU09VUkNFCisgI2luY2x1ZGUg
PHN0ZGRlZi5oPgorICNpbmNsdWRlIDxzdGRhcmcuaD4KKy0jaW5jbHVkZSA8c2lnbmFsLmg+Cisr
I2luY2x1ZGUgPHVjb250ZXh0Lmg+CisgI2luY2x1ZGUgPHN0cmluZy5oPgorICNpbmNsdWRlIDxz
dGRpbnQuaD4KKyAKKy0tIAorMi4xNy4xCisKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:29:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:29:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SXE-00015Y-F2; Wed, 04 Sep 2019 10:29:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SXD-00015F-Hw
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:29:07 +0000
X-Inumbo-ID: cf63e042-cefe-11e9-abae-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cf63e042-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:29:01 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 92626F2030;
 Wed,  4 Sep 2019 12:29:00 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id KiFVTRM-srdB; Wed,  4 Sep 2019 12:29:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 65A84F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:58 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:53 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:40 +0200
Message-ID: <20190904102840.18577-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
References: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 4/4] Initial port of
 libucontext on unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyB0aGUgaW5pdGlhbCBwb3J0IG9mIGxpYnVjb250ZXh0IHRvIFVuaWtyYWZ0IGFzIGFu
IGV4dGVybmFsCmxpYnJhcnkuIGxpYnVjb250ZXh0IGRlcGVuZHMgb24gbmV3bGliIGZvciBzb21l
IGhlYWRlcnMuIAoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBv
cy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIENvbmZpZy51ayAgIHwgIDUgKysrKwogTWFrZWZpbGUu
dWsgfCA4NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogMiBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2
NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKCmRpZmYgLS1naXQg
YS9Db25maWcudWsgYi9Db25maWcudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZDA2NzVhYQotLS0gL2Rldi9udWxsCisrKyBiL0NvbmZpZy51awpAQCAtMCwwICsxLDUgQEAK
K21lbnVjb25maWcgTElCVUNPTlRFWFQKKyAgICAgICAgICAgYm9vbCAidWNvbnRleHQuaCBBUEki
CisgICAgICAgICAgIGRlZmF1bHQgbgorCSAgIHNlbGVjdCBMSUJORVdMSUJDCisKZGlmZiAtLWdp
dCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGYyY2ZmNAotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlLnVrCkBAIC0wLDAg
KzEsODQgQEAKKyMgIGxpYnVjb250ZXh0IE1ha2VmaWxlLnVrCisjCisjICBBdXRob3JzOiBDaGFy
YWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+CisjCisjICAgQ29w
eXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0
OgorIworIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
Y29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMg
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
ICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyMKKyMgIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1P
RElGSUVEIElOIEFOWSBXQVkuCisjCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGli
cmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChjYWxs
IGFkZGxpYl9zLGxpYnVjb250ZXh0LCQoQ09ORklHX0xJQlVDT05URVhUKSkpCisKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJV
Q09OVEVYVF9WRVJTSU9OPWxpYnVjb250ZXh0LW1hc3RlcgorTElCVUNPTlRFWFRfVVJMPWh0dHBz
Oi8vZ2l0aHViLmNvbS9BZGVsaWVMaW51eC9saWJ1Y29udGV4dC9hcmNoaXZlL21hc3Rlci56aXAK
K0xJQlVDT05URVhUX0RJUj0kKExJQlVDT05URVhUX1ZFUlNJT04pCisKK0xJQlVDT05URVhUX1BB
VENIRElSPSQoTElCVUNPTlRFWFRfQkFTRSkvcGF0Y2hlcworJChldmFsICQoY2FsbCBmZXRjaCxs
aWJ1Y29udGV4dCwkKExJQlVDT05URVhUX1VSTCksbWFzdGVyLnppcCkpCiskKGV2YWwgJChjYWxs
IHBhdGNoLGxpYnVjb250ZXh0LCQoTElCVUNPTlRFWFRfUEFUQ0hESVIpLCQoTElCVUNPTlRFWFRf
RElSKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCitMSUJVQ09OVEVYVF9TUkM9JChMSUJVQ09OVEVYVF9PUklHSU4pLyQoTElC
VUNPTlRFWFRfRElSKS9hcmNoL3g4Nl82NC8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg
TGlicmFyeSBpbmNsdWRlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NJTkNMVURFUy0kKENP
TkZJR19MSUJVQ09OVEVYVCkgKz0gLUkkKExJQlVDT05URVhUX0JBU0UpL2luY2x1ZGUKKworIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2xvYmFsIGZsYWdzCisjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIworIyBTdXBwcmVzcyBzb21lIHdhcm5pbmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nlc3Mg
bG9vayBuZWF0ZXIKK1NVUFBSRVNTX0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25v
LXVudXNlZC12YXJpYWJsZSAtV25vLW5vbm51bGwgICAgICAgXAorLVduby11bnVzZWQtYnV0LXNl
dC12YXJpYWJsZSAtV25vLXVudXNlZC1sYWJlbCAtV25vLWNoYXItc3Vic2NyaXB0cyAgICAgICAg
ICAgICBcCistV25vLXVudXNlZC1mdW5jdGlvbiAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6
ZXJzIC1Xbm8tdW5pbml0aWFsaXplZCAgICAgICAgIFwKKy1Xbm8tYXJyYXktYm91bmRzIC1Xbm8t
bWF5YmUtdW5pbml0aWFsaXplZCAtV25vLXBvaW50ZXItc2lnbiAtV25vLXVudXNlZC12YWx1ZSAg
XAorLVduby11bnVzZWQtbWFjcm9zIC1Xbm8tcGFyZW50aGVzZXMgLVduby1pbXBsaWNpdC1mdW5j
dGlvbi1kZWNsYXJhdGlvbiAgICAgICAgICBcCistV25vLW1pc3NpbmctYnJhY2VzIC1Xbm8tZW5k
aWYtbGFiZWxzIC1Xbm8tdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUgICAgICAgICAgICAgIFwKKy1X
bm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gLVduby10eXBlLWxpbWl0cyAtV25vLXNp
Z24tY29tcGFyZQorCitMSUJVQ09OVEVYVF9DRkxBR1MteSAgICs9ICQoU1VQUFJFU1NfRkxBR1Mp
CitMSUJVQ09OVEVYVF9DWFhGTEFHUy15ICs9ICQoU1VQUFJFU1NfRkxBR1MpCisKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJV
Q09OVEVYVF9TUkNTLXkgKz0gJChMSUJVQ09OVEVYVF9TUkMpL2dldGNvbnRleHQuUworTElCVUNP
TlRFWFRfU1JDUy15ICs9ICQoTElCVUNPTlRFWFRfU1JDKS9tYWtlY29udGV4dC5jCitMSUJVQ09O
VEVYVF9TUkNTLXkgKz0gJChMSUJVQ09OVEVYVF9TUkMpL3NldGNvbnRleHQuUworTElCVUNPTlRF
WFRfU1JDUy15ICs9ICQoTElCVUNPTlRFWFRfU1JDKS9zdGFydGNvbnRleHQuUworTElCVUNPTlRF
WFRfU1JDUy15ICs9ICQoTElCVUNPTlRFWFRfU1JDKS9zd2FwY29udGV4dC5TCi0tIAoyLjE3LjEK
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 10:29:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 10:29:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5SXE-00015d-Ge; Wed, 04 Sep 2019 10:29:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=6cV9=W7=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i5SXD-00015G-LZ
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 10:29:07 +0000
X-Inumbo-ID: cf63e042-cefe-11e9-abae-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cf63e042-cefe-11e9-abae-12813bfff9fa;
 Wed, 04 Sep 2019 10:29:01 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 92626F2030;
 Wed,  4 Sep 2019 12:29:00 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id KiFVTRM-srdB; Wed,  4 Sep 2019 12:29:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 65A84F2017
 for <minios-devel@lists.xen.org>; Wed,  4 Sep 2019 12:28:58 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 12:28:53 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 4 Sep 2019 12:28:40 +0200
Message-ID: <20190904102840.18577-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
References: <20190904102840.18577-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH 4/4] Initial port of
 libucontext on unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyB0aGUgaW5pdGlhbCBwb3J0IG9mIGxpYnVjb250ZXh0IHRvIFVuaWtyYWZ0IGFzIGFu
IGV4dGVybmFsCmxpYnJhcnkuIGxpYnVjb250ZXh0IGRlcGVuZHMgb24gbmV3bGliIGZvciBzb21l
IGhlYWRlcnMuIAoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBv
cy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIENvbmZpZy51ayAgIHwgIDUgKysrKwogTWFrZWZpbGUu
dWsgfCA4NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogMiBmaWxlcyBjaGFuZ2VkLCA4OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2
NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKCmRpZmYgLS1naXQg
YS9Db25maWcudWsgYi9Db25maWcudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZDA2NzVhYQotLS0gL2Rldi9udWxsCisrKyBiL0NvbmZpZy51awpAQCAtMCwwICsxLDUgQEAK
K21lbnVjb25maWcgTElCVUNPTlRFWFQKKyAgICAgICAgICAgYm9vbCAidWNvbnRleHQuaCBBUEki
CisgICAgICAgICAgIGRlZmF1bHQgbgorCSAgIHNlbGVjdCBMSUJORVdMSUJDCisKZGlmZiAtLWdp
dCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGYyY2ZmNAotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlLnVrCkBAIC0wLDAg
KzEsODQgQEAKKyMgIGxpYnVjb250ZXh0IE1ha2VmaWxlLnVrCisjCisjICBBdXRob3JzOiBDaGFy
YWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+CisjCisjICAgQ29w
eXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0
OgorIworIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
Y29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyMgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMg
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
ICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyMKKyMgIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1P
RElGSUVEIElOIEFOWSBXQVkuCisjCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGli
cmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChjYWxs
IGFkZGxpYl9zLGxpYnVjb250ZXh0LCQoQ09ORklHX0xJQlVDT05URVhUKSkpCisKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJV
Q09OVEVYVF9WRVJTSU9OPWxpYnVjb250ZXh0LW1hc3RlcgorTElCVUNPTlRFWFRfVVJMPWh0dHBz
Oi8vZ2l0aHViLmNvbS9BZGVsaWVMaW51eC9saWJ1Y29udGV4dC9hcmNoaXZlL21hc3Rlci56aXAK
K0xJQlVDT05URVhUX0RJUj0kKExJQlVDT05URVhUX1ZFUlNJT04pCisKK0xJQlVDT05URVhUX1BB
VENIRElSPSQoTElCVUNPTlRFWFRfQkFTRSkvcGF0Y2hlcworJChldmFsICQoY2FsbCBmZXRjaCxs
aWJ1Y29udGV4dCwkKExJQlVDT05URVhUX1VSTCksbWFzdGVyLnppcCkpCiskKGV2YWwgJChjYWxs
IHBhdGNoLGxpYnVjb250ZXh0LCQoTElCVUNPTlRFWFRfUEFUQ0hESVIpLCQoTElCVUNPTlRFWFRf
RElSKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCitMSUJVQ09OVEVYVF9TUkM9JChMSUJVQ09OVEVYVF9PUklHSU4pLyQoTElC
VUNPTlRFWFRfRElSKS9hcmNoL3g4Nl82NC8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg
TGlicmFyeSBpbmNsdWRlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NJTkNMVURFUy0kKENP
TkZJR19MSUJVQ09OVEVYVCkgKz0gLUkkKExJQlVDT05URVhUX0JBU0UpL2luY2x1ZGUKKworIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2xvYmFsIGZsYWdzCisjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIworIyBTdXBwcmVzcyBzb21lIHdhcm5pbmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nlc3Mg
bG9vayBuZWF0ZXIKK1NVUFBSRVNTX0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25v
LXVudXNlZC12YXJpYWJsZSAtV25vLW5vbm51bGwgICAgICAgXAorLVduby11bnVzZWQtYnV0LXNl
dC12YXJpYWJsZSAtV25vLXVudXNlZC1sYWJlbCAtV25vLWNoYXItc3Vic2NyaXB0cyAgICAgICAg
ICAgICBcCistV25vLXVudXNlZC1mdW5jdGlvbiAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6
ZXJzIC1Xbm8tdW5pbml0aWFsaXplZCAgICAgICAgIFwKKy1Xbm8tYXJyYXktYm91bmRzIC1Xbm8t
bWF5YmUtdW5pbml0aWFsaXplZCAtV25vLXBvaW50ZXItc2lnbiAtV25vLXVudXNlZC12YWx1ZSAg
XAorLVduby11bnVzZWQtbWFjcm9zIC1Xbm8tcGFyZW50aGVzZXMgLVduby1pbXBsaWNpdC1mdW5j
dGlvbi1kZWNsYXJhdGlvbiAgICAgICAgICBcCistV25vLW1pc3NpbmctYnJhY2VzIC1Xbm8tZW5k
aWYtbGFiZWxzIC1Xbm8tdW51c2VkLWJ1dC1zZXQtdmFyaWFibGUgICAgICAgICAgICAgIFwKKy1X
bm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gLVduby10eXBlLWxpbWl0cyAtV25vLXNp
Z24tY29tcGFyZQorCitMSUJVQ09OVEVYVF9DRkxBR1MteSAgICs9ICQoU1VQUFJFU1NfRkxBR1Mp
CitMSUJVQ09OVEVYVF9DWFhGTEFHUy15ICs9ICQoU1VQUFJFU1NfRkxBR1MpCisKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJV
Q09OVEVYVF9TUkNTLXkgKz0gJChMSUJVQ09OVEVYVF9TUkMpL2dldGNvbnRleHQuUworTElCVUNP
TlRFWFRfU1JDUy15ICs9ICQoTElCVUNPTlRFWFRfU1JDKS9tYWtlY29udGV4dC5jCitMSUJVQ09O
VEVYVF9TUkNTLXkgKz0gJChMSUJVQ09OVEVYVF9TUkMpL3NldGNvbnRleHQuUworTElCVUNPTlRF
WFRfU1JDUy15ICs9ICQoTElCVUNPTlRFWFRfU1JDKS9zdGFydGNvbnRleHQuUworTElCVUNPTlRF
WFRfU1JDUy15ICs9ICQoTElCVUNPTlRFWFRfU1JDKS9zd2FwY29udGV4dC5TCi0tIAoyLjE3LjEK
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 12:07:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 12:07:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5U4d-0002BO-6x; Wed, 04 Sep 2019 12:07:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6WR=W7=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i5U4b-0002B7-9C
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 12:07:41 +0000
X-Inumbo-ID: 96be0bc4-cf0c-11e9-abb0-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 96be0bc4-cf0c-11e9-abb0-12813bfff9fa;
 Wed, 04 Sep 2019 12:07:39 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4C31AF2030;
 Wed,  4 Sep 2019 14:07:38 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id wHhB0_M-pRwB; Wed,  4 Sep 2019 14:07:38 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1D4A2F2017;
 Wed,  4 Sep 2019 14:07:34 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 14:07:33 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Wed, 4 Sep 2019 14:07:33
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 1/1] Revisit process.c functions
Thread-Index: AQHVYu49H+EgIt/o0UONyatoIuHQ3qcbbM2A
Date: Wed, 4 Sep 2019 12:07:33 +0000
Message-ID: <F668BF43-AA40-41ED-85CB-6030C4D5E2E7@neclab.eu>
References: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
 <20190904065856.5465-2-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904065856.5465-2-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <01FFCA5BF8077745AAE3AAD8C5339CA8@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/1] Revisit process.c
 functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLCB0aGlzIHBhdGNoIGxvb2tzIGdvb2QsIHRoYW5rcy4NCg0KUmV2aWV3ZWQtYnk6
IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMDQuMDkuMTks
IDA4OjU5LCAiQ29zdGluIEx1cHUiIDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+IHdyb3RlOg0KDQog
ICAgVGhpcyBwYXRjaCByZXZpc2l0cyB0aGUgZnVuY3Rpb25zIGluIHByb2Nlc3MuYywgcmVkaXN0
cmlidXRlcyBzb21lIG9mIHRoZW0gYW5kDQogICAgaW1wbGVtZW50IHRoZSBvdGhlcnMuIFRoZSBy
ZW1haW5pbmcgZnVuY3Rpb25zIG1heSB2ZXJ5IHdlbGwgYmUgbW92ZWQgaW50byBhbg0KICAgIGlu
dGVybmFsICJwcm9jZXNzIiByZWxhdGVkIGxpYnJhcnksIGJ1dCB3ZSB3aWxsIGRvIHRoaXMgYXQg
YW5vdGhlciB0aW1lLiBJdCdzDQogICAgd29ydGggc2F5aW5nIHRoYXQgd2Ugc2V0IHRoZSBQSUQg
b2YgdGhlIHVuaWtlcm5lbCB0byAxLCBzYXZpbmcgdGhlIFBJRCAwIGZvciBpdHMNCiAgICAicGFy
ZW50IiwgYW4gaW52aXNpYmlsZSBwcm9jZXNzIHRoYXQgaXMgYWxzbyBub3Qgc2hvd24gb24gTGlu
dXguDQogICAgDQogICAgUmVkaXN0cmlidXRlZCBmdW5jdGlvbnM6DQogICAgLSBraWxsKCkgYW5k
IGtpbGxwZygpIGFyZSBtb3ZlZCB0byBzaWduYWwuYw0KICAgIC0gdGltZXMoKSBpcyBtb3ZlZCB0
byB0aW1lLmMNCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPg0KICAgIC0tLQ0KICAgICBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyAr
KysrKysrKysrKw0KICAgICBwcm9jZXNzLmMgICAgICAgICAgICB8IDE2NSArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tDQogICAgIHNpZ25hbC5jICAgICAgICAgICAg
IHwgIDE4ICsrKysrDQogICAgIHRpbWUuYyAgICAgICAgICAgICAgIHwgICA2ICsrDQogICAgIDQg
ZmlsZXMgY2hhbmdlZCwgMTgyIGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQ0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91ay9wcm9jZXNzLmgNCiAgICANCiAgICBkaWZmIC0t
Z2l0IGEvaW5jbHVkZS91ay9wcm9jZXNzLmggYi9pbmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNjcyMDhlMw0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9pbmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIEBAIC0wLDAgKzEs
NDMgQEANCiAgICArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLw0K
ICAgICsvKg0KICAgICsgKiBBdXRob3JzOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPg0KICAgICsgKg0KICAgICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9s
aXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAgICsgKg0KICAg
ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCiAgICArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogICAgKyAqIGFyZSBtZXQ6DQogICAg
KyAqDQogICAgKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICArICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQNCiAgICArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICAgICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICsg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzDQogICAgKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogICAgKyAqICAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgKyAqDQog
ICAgKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KICAgICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICAg
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFDQogICAgKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUNCiAgICArICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUg0KICAgICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KICAgICsgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MN
CiAgICArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCiAgICArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCiAgICArICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUNCiAgICArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQog
ICAgKyAqDQogICAgKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElG
SUVEIElOIEFOWSBXQVkuDQogICAgKyAqLw0KICAgICsNCiAgICArI2lmbmRlZiBfX1VLX1BST0NF
U1NfSF9fDQogICAgKyNkZWZpbmUgX19VS19QUk9DRVNTX0hfXw0KICAgICsNCiAgICArI2RlZmlu
ZSBVTklLUkFGVF9QSUQgICAgICAxDQogICAgKyNkZWZpbmUgVU5JS1JBRlRfUFBJRCAgICAgMA0K
ICAgICsjZGVmaW5lIFVOSUtSQUZUX1NJRCAgICAgIDANCiAgICArI2RlZmluZSBVTklLUkFGVF9Q
R0lEICAgICAwDQogICAgKw0KICAgICsjZW5kaWYgLyogX19VS19QUk9DRVNTX0hfXyAqLw0KICAg
IGRpZmYgLS1naXQgYS9wcm9jZXNzLmMgYi9wcm9jZXNzLmMNCiAgICBpbmRleCBjNGUzNjY0Li5l
MjYxMTBkIDEwMDY0NA0KICAgIC0tLSBhL3Byb2Nlc3MuYw0KICAgICsrKyBiL3Byb2Nlc3MuYw0K
ICAgIEBAIC0zLDcgKzMsNyBAQA0KICAgICAgKiBsaWJuZXdsaWIgZ2x1ZSBjb2RlDQogICAgICAq
DQogICAgICAqIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4N
CiAgICAtICoNCiAgICArICogICAgICAgICAgQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4NCiAgICAgICoNCiAgICAgICogQ29weXJpZ2h0IChjKSAyMDE3LCBORUMgRXVyb3BlIEx0
ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgICAgICoNCiAgICBA
QCAtMzUsMTM0ICszNSwxOTkgQEANCiAgICAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRS
QUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICAgICovDQogICAgIA0KICAgIC0jaW5j
bHVkZSA8dGltZS5oPg0KICAgICAjaW5jbHVkZSA8ZXJybm8uaD4NCiAgICAgI2luY2x1ZGUgPHN0
ZGxpYi5oPg0KICAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAgI2luY2x1ZGUgPHN5cy9yZXNv
dXJjZS5oPg0KICAgICsjaW5jbHVkZSA8dWsvcHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8dWsv
cHJpbnQuaD4NCiAgICAgI3VuZGVmIGVycm5vDQogICAgIGV4dGVybiBpbnQgZXJybm87DQogICAg
IA0KICAgIC1pbnQgZXhlY3ZlKGNoYXIgKm5hbWUgX191bnVzZWQsIGNoYXIgKiphcmd2IF9fdW51
c2VkLCBjaGFyICoqZW52IF9fdW51c2VkKQ0KICAgICsNCiAgICAraW50IGZvcmsodm9pZCkNCiAg
ICAgew0KICAgIC0JZXJybm8gPSBFTk9NRU07DQogICAgKwkvKiBmb3JrKCkgaXMgbm90IHN1cHBv
cnRlZCBvbiB0aGlzIHBsYXRmb3JtICovDQogICAgKwllcnJubyA9IEVOT1NZUzsNCiAgICAgCXJl
dHVybiAtMTsNCiAgICAgfQ0KICAgICANCiAgICAtaW50IGV4ZWN2KGNvbnN0IGNoYXIgKnBhdGgg
X191bnVzZWQsIGNoYXIgKmNvbnN0IGFyZ3ZbXSBfX3VudXNlZCkNCiAgICArc3RhdGljDQogICAg
K3ZvaWQgZXhlY193YXJuKGNvbnN0IGNoYXIgKmZ1bmMsDQogICAgKwkJY29uc3QgY2hhciAqcGF0
aCwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAt
CXJldHVybiAwOw0KICAgIC19DQogICAgKwlpbnQgaTsNCiAgICAgDQogICAgLWludCBzeXN0ZW0o
Y29uc3QgY2hhciAqY29tbWFuZCBfX3VudXNlZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIDA7DQog
ICAgLX0NCiAgICArCXVrX3ByX3dhcm4oIiVzKCk6IHBhdGg9JXMiLCBmdW5jLCBwYXRoKTsNCiAg
ICAgDQogICAgLUZJTEUgKnBvcGVuKGNvbnN0IGNoYXIgKmNvbW1hbmQgX191bnVzZWQsIGNvbnN0
IGNoYXIgKnR5cGUgX191bnVzZWQpDQogICAgLXsNCiAgICAtCXJldHVybiBOVUxMOw0KICAgIC19
DQogICAgKwkvKiBwcmludCBhcmd1bWVudHMgKi8NCiAgICArCWkgPSAwOw0KICAgICsJdWtfcHJf
d2FybigiIGFyZ3Y9WyIpOw0KICAgICsJd2hpbGUgKGFyZ3ZbaV0pIHsNCiAgICArCQl1a19wcl93
YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwgYXJndltpXSk7DQogICAgKwkJaSsrOw0K
ICAgICsJfQ0KICAgICsJdWtfcHJfd2FybigiXSIpOw0KICAgICANCiAgICAtaW50IHBjbG9zZShG
SUxFICpzdHJlYW0gX191bnVzZWQpDQogICAgLXsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyog
cHJpbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzICovDQogICAgKwlpZiAoZW52cCkgew0KICAgICsJ
CWkgPSAwOw0KICAgICsJCXVrX3ByX3dhcm4oIiBlbnZwPVsiKTsNCiAgICArCQl3aGlsZSAoZW52
cFtpXSkgew0KICAgICsJCQl1a19wcl93YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwg
ZW52cFtpXSk7DQogICAgKwkJCWkrKzsNCiAgICArCQl9DQogICAgKwkJdWtfcHJfd2FybigiXSIp
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXVrX3ByX3dhcm4oIlxuIik7DQogICAgIH0NCiAgICAg
DQogICAgLWludCBmb3JrKHZvaWQpDQogICAgK2ludCBleGVjdmUoY29uc3QgY2hhciAqcGF0aCwg
Y2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAtCWVy
cm5vID0gRUFHQUlOOw0KICAgICsJZXhlY193YXJuKF9fZnVuY19fLCBwYXRoLCBhcmd2LCBlbnZw
KTsNCiAgICArCWVycm5vID0gRU5PU1lTOw0KICAgICAJcmV0dXJuIC0xOw0KICAgICB9DQogICAg
IA0KICAgIC1pbnQgZ2V0cGlkKHZvaWQpDQogICAgK2ludCBleGVjdihjb25zdCBjaGFyICpwYXRo
LCBjaGFyICpjb25zdCBhcmd2W10pDQogICAgIHsNCiAgICAtCXJldHVybiAxOw0KICAgICsJZXhl
Y193YXJuKF9fZnVuY19fLCBwYXRoLCBhcmd2LCBOVUxMKTsNCiAgICArCWVycm5vID0gRU5PU1lT
Ow0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1waWRfdCBnZXRwcGlkKHZv
aWQpDQogICAgK2ludCBzeXN0ZW0oY29uc3QgY2hhciAqY29tbWFuZCkNCiAgICAgew0KICAgIC0J
cmV0dXJuIDA7DQogICAgKwl1a19wcl93YXJuKCIlczogJXNcbiIsIF9fZnVuY19fLCBjb21tYW5k
KTsNCiAgICArCWVycm5vID0gRU5PU1lTOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAg
IA0KICAgIC1pbnQga2lsbChpbnQgcGlkIF9fdW51c2VkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAg
ICtGSUxFICpwb3Blbihjb25zdCBjaGFyICpjb21tYW5kLCBjb25zdCBjaGFyICp0eXBlIF9fdW51
c2VkKQ0KICAgICB7DQogICAgLQllcnJubyA9IEVJTlZBTDsNCiAgICAtCXJldHVybiAtMTsNCiAg
ICArCXVrX3ByX3dhcm4oIiVzOiAlc1xuIiwgX19mdW5jX18sIGNvbW1hbmQpOw0KICAgICsJZXJy
bm8gPSBFTk9TWVM7DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICAgfQ0KICAgICANCiAgICAtaW50
IHRpbWVzKHN0cnVjdCB0bSAqYnVmIF9fdW51c2VkKQ0KICAgICtpbnQgcGNsb3NlKEZJTEUgKnN0
cmVhbSBfX3VudXNlZCkNCiAgICAgew0KICAgICsJZXJybm8gPSBFSU5WQUw7DQogICAgIAlyZXR1
cm4gLTE7DQogICAgIH0NCiAgICAgDQogICAgIGludCB3YWl0KGludCAqc3RhdHVzIF9fdW51c2Vk
KQ0KICAgICB7DQogICAgKwkvKiBObyBjaGlsZHJlbiAqLw0KICAgICAJZXJybm8gPSBFQ0hJTEQ7
DQogICAgIAlyZXR1cm4gLTE7DQogICAgIH0NCiAgICAgDQogICAgLWludCBzZXRwZ3JwKHZvaWQp
DQogICAgLXsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtaW50
IGtpbGxwZyhpbnQgcGdycCBfX3VudXNlZCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArcGlkX3Qg
d2FpdHBpZChwaWRfdCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9w
dGlvbnMgX191bnVzZWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogTm8gY2hp
bGRyZW4gKi8NCiAgICArCWVycm5vID0gRUNISUxEOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9
DQogICAgIA0KICAgIC0NCiAgICAgcGlkX3Qgd2FpdDMoaW50ICp3c3RhdHVzIF9fdW51c2VkLCBp
bnQgb3B0aW9ucyBfX3VudXNlZCwNCiAgICAgCQlzdHJ1Y3QgcnVzYWdlICpydXNhZ2UgX191bnVz
ZWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogTm8gY2hpbGRyZW4gKi8NCiAg
ICArCWVycm5vID0gRUNISUxEOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAg
ICBwaWRfdCB3YWl0NChwaWRfdCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwg
aW50IG9wdGlvbnMgX191bnVzZWQsDQogICAgIAkJc3RydWN0IHJ1c2FnZSAqcnVzYWdlIF9fdW51
c2VkKQ0KICAgICB7DQogICAgLQlyZXR1cm4gMDsNCiAgICArCS8qIE5vIGNoaWxkcmVuICovDQog
ICAgKwllcnJubyA9IEVDSElMRDsNCiAgICArCXJldHVybiAtMTsNCiAgICAgfQ0KICAgICANCiAg
ICAtcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNl
ZCwgaW50IG9wdGlvbnMgX191bnVzZWQpDQogICAgK2ludCBnZXRwaWQodm9pZCkNCiAgICAgew0K
ICAgIC0JcmV0dXJuIDA7DQogICAgKwlyZXR1cm4gVU5JS1JBRlRfUElEOw0KICAgICt9DQogICAg
Kw0KICAgICtwaWRfdCBnZXRwcGlkKHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiBVTklLUkFG
VF9QUElEOw0KICAgICB9DQogICAgIA0KICAgICBwaWRfdCBzZXRzaWQodm9pZCkNCiAgICAgew0K
ICAgIC0JcmV0dXJuIDA7DQogICAgKwkvKiBXZSBoYXZlIGEgc2luZ2xlICJzZXNzaW9uIiB3aXRo
IGEgc2luZ2xlICJwcm9jZXNzIiAqLw0KICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVy
biAocGlkX3QpIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1waWRfdCBnZXRzaWQocGlkX3QgcGlk
IF9fdW51c2VkKQ0KICAgICtwaWRfdCBnZXRzaWQocGlkX3QgcGlkKQ0KICAgICB7DQogICAgLQly
ZXR1cm4gMDsNCiAgICArCWlmIChwaWQgIT0gMCkgew0KICAgICsJCS8qIFdlIHN1cHBvcnQgb25s
eSBjYWxscyBmb3IgdGhlIG9ubHkgY2FsbGluZyAicHJvY2VzcyIgKi8NCiAgICArCQllcnJubyA9
IEVTUkNIOw0KICAgICsJCXJldHVybiAocGlkX3QpIC0xOw0KICAgICsJfQ0KICAgICsJcmV0dXJu
IFVOSUtSQUZUX1NJRDsNCiAgICAgfQ0KICAgICANCiAgICAtaW50IHNldHBnaWQocGlkX3QgcGlk
IF9fdW51c2VkLCBwaWRfdCBwZ2lkIF9fdW51c2VkKQ0KICAgICtpbnQgc2V0cGdpZChwaWRfdCBw
aWQsIHBpZF90IHBnaWQpDQogICAgIHsNCiAgICArCWlmIChwaWQgIT0gMCkgew0KICAgICsJCS8q
IFdlIHN1cHBvcnQgb25seSBjYWxscyBmb3IgdGhlIG9ubHkgY2FsbGluZyAicHJvY2VzcyIgKi8N
CiAgICArCQllcnJubyA9IEVTUkNIOw0KICAgICsJCXJldHVybiAocGlkX3QpIC0xOw0KICAgICsJ
fQ0KICAgICsJaWYgKHBnaWQgIT0gMCkgew0KICAgICsJCS8qIFdlIGhhdmUgYSBzaW5nbGUgImdy
b3VwIiB3aXRoIGEgc2luZ2xlICJwcm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0gRVBFUk07DQog
ICAgKwkJcmV0dXJuIChwaWRfdCkgLTE7DQogICAgKwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAg
fQ0KICAgICANCiAgICAgcGlkX3QgZ2V0cGdpZChwaWRfdCBwaWQpDQogICAgIHsNCiAgICAtCXJl
dHVybiAwOw0KICAgICsJaWYgKHBpZCAhPSAwKSB7DQogICAgKwkJLyogV2Ugc3VwcG9ydCBvbmx5
IGNhbGxzIGZvciB0aGUgb25seSBjYWxsaW5nICJwcm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0g
RVNSQ0g7DQogICAgKwkJcmV0dXJuIChwaWRfdCkgLTE7DQogICAgKwl9DQogICAgKwlyZXR1cm4g
VU5JS1JBRlRfUEdJRDsNCiAgICAgfQ0KICAgICANCiAgICArcGlkX3QgZ2V0cGdycCh2b2lkKQ0K
ICAgICt7DQogICAgKwlyZXR1cm4gVU5JS1JBRlRfUEdJRDsNCiAgICArfQ0KICAgICANCiAgICAt
aW50IHRjc2V0cGdycChpbnQgZmQgX191bnVzZWQsIHBpZF90IHBncnAgX191bnVzZWQpDQogICAg
K2ludCBzZXRwZ3JwKHZvaWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJcmV0dXJu
IHNldHBnaWQoMCwgMCk7DQogICAgIH0NCiAgICAgDQogICAgLXBpZF90IHRjZ2V0cGdycChpbnQg
ZmQgX191bnVzZWQpDQogICAgK2ludCB0Y3NldHBncnAoaW50IGZkIF9fdW51c2VkLCBwaWRfdCBw
Z3JwKQ0KICAgICB7DQogICAgKwkvKiBUT0RPIGNoZWNrIGlmIGZkIGlzIEJBREYgKi8NCiAgICAr
CWlmIChwZ3JwICE9IFVOSUtSQUZUX1BHSUQpIHsNCiAgICArCQllcnJubyA9IEVJTlZBTDsNCiAg
ICArCQlyZXR1cm4gLTE7DQogICAgKwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICAN
CiAgICArcGlkX3QgdGNnZXRwZ3JwKGludCBmZCkNCiAgICArew0KICAgICsJLyogV2UgaGF2ZSBh
IHNpbmdsZSAicHJvY2VzcyBncm91cCIgKi8NCiAgICArCXJldHVybiBVTklLUkFGVF9QR0lEOw0K
ICAgICt9DQogICAgKw0KICAgICBpbnQgbmljZShpbnQgaW5jIF9fdW51c2VkKQ0KICAgICB7DQog
ICAgLQlyZXR1cm4gMDsNCiAgICArCS8qIFdlIGRvbid0IHN1cHBvcnQgcHJpb3JpdHkgdXBkYXRl
cyBmb3IgdW5pa2VybmVscyAqLw0KICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVybiAt
MTsNCiAgICAgfQ0KICAgIGRpZmYgLS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jDQogICAgaW5k
ZXggNjgwYmNhZi4uM2FmYzE2OCAxMDA2NDQNCiAgICAtLS0gYS9zaWduYWwuYw0KICAgICsrKyBi
L3NpZ25hbC5jDQogICAgQEAgLTMyLDYgKzMyLDggQEANCiAgICAgICogVEhJUyBIRUFERVIgTUFZ
IE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICAgICovDQogICAg
IA0KICAgICsjaW5jbHVkZSA8dWsvcHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8ZXJybm8uaD4N
CiAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPg0KICAgICANCiAgICAgaW50IHNpZ2FjdGlvbihpbnQg
c2lnIF9fdW51c2VkLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBhY3QgX191bnVz
ZWQsDQogICAgQEAgLTU0LDMgKzU2LDE5IEBAIGludCBzaWdpbnRlcnJ1cHQoaW50IHNpZyBfX3Vu
dXNlZCwgaW50IGZsYWcgX191bnVzZWQpDQogICAgIHsNCiAgICAgCXJldHVybiAwOw0KICAgICB9
DQogICAgKw0KICAgICtpbnQga2lsbChpbnQgcGlkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAgICt7
DQogICAgKwkvKiBUT0RPIGNoZWNrIHNpZyAqLw0KICAgICsJaWYgKHBpZCAhPSBVTklLUkFGVF9Q
SUQpDQogICAgKwkJZXJybm8gPSBFU1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAg
ICsNCiAgICAraW50IGtpbGxwZyhpbnQgcGdycCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArew0K
ICAgICsJLyogVE9ETyBjaGVjayBzaWcgKi8NCiAgICArCWlmIChwZ3JwICE9IFVOSUtSQUZUX1BH
SUQpDQogICAgKwkJZXJybm8gPSBFU1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAg
IGRpZmYgLS1naXQgYS90aW1lLmMgYi90aW1lLmMNCiAgICBpbmRleCBhNzk2OTFjLi4zNDcwNTkx
IDEwMDY0NA0KICAgIC0tLSBhL3RpbWUuYw0KICAgICsrKyBiL3RpbWUuYw0KICAgIEBAIC0xNzIs
MyArMTcyLDkgQEAgaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90IGNsa19pZCBfX3VudXNlZCwg
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cCBfX3VudXNlZCkNCiAgICAgew0KICAgICAJcmV0dXJu
IDA7DQogICAgIH0NCiAgICArDQogICAgK2ludCB0aW1lcyhzdHJ1Y3QgdG0gKmJ1ZiBfX3VudXNl
ZCkNCiAgICArew0KICAgICsJZXJybm8gPSBFTk9EQVRBOw0KICAgICsJcmV0dXJuIC0xOw0KICAg
ICt9DQogICAgLS0gDQogICAgMi4yMC4xDQogICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 12:07:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 12:07:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5U4c-0002BI-4w; Wed, 04 Sep 2019 12:07:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6WR=W7=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i5U4b-0002B8-9I
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 12:07:41 +0000
X-Inumbo-ID: 96be0bc4-cf0c-11e9-abb0-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 96be0bc4-cf0c-11e9-abb0-12813bfff9fa;
 Wed, 04 Sep 2019 12:07:39 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4C31AF2030;
 Wed,  4 Sep 2019 14:07:38 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id wHhB0_M-pRwB; Wed,  4 Sep 2019 14:07:38 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1D4A2F2017;
 Wed,  4 Sep 2019 14:07:34 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 14:07:33 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Wed, 4 Sep 2019 14:07:33
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 1/1] Revisit process.c functions
Thread-Index: AQHVYu49H+EgIt/o0UONyatoIuHQ3qcbbM2A
Date: Wed, 4 Sep 2019 12:07:33 +0000
Message-ID: <F668BF43-AA40-41ED-85CB-6030C4D5E2E7@neclab.eu>
References: <20190904065856.5465-1-costin.lupu@cs.pub.ro>
 <20190904065856.5465-2-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904065856.5465-2-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <01FFCA5BF8077745AAE3AAD8C5339CA8@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/1] Revisit process.c
 functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLCB0aGlzIHBhdGNoIGxvb2tzIGdvb2QsIHRoYW5rcy4NCg0KUmV2aWV3ZWQtYnk6
IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMDQuMDkuMTks
IDA4OjU5LCAiQ29zdGluIEx1cHUiIDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+IHdyb3RlOg0KDQog
ICAgVGhpcyBwYXRjaCByZXZpc2l0cyB0aGUgZnVuY3Rpb25zIGluIHByb2Nlc3MuYywgcmVkaXN0
cmlidXRlcyBzb21lIG9mIHRoZW0gYW5kDQogICAgaW1wbGVtZW50IHRoZSBvdGhlcnMuIFRoZSBy
ZW1haW5pbmcgZnVuY3Rpb25zIG1heSB2ZXJ5IHdlbGwgYmUgbW92ZWQgaW50byBhbg0KICAgIGlu
dGVybmFsICJwcm9jZXNzIiByZWxhdGVkIGxpYnJhcnksIGJ1dCB3ZSB3aWxsIGRvIHRoaXMgYXQg
YW5vdGhlciB0aW1lLiBJdCdzDQogICAgd29ydGggc2F5aW5nIHRoYXQgd2Ugc2V0IHRoZSBQSUQg
b2YgdGhlIHVuaWtlcm5lbCB0byAxLCBzYXZpbmcgdGhlIFBJRCAwIGZvciBpdHMNCiAgICAicGFy
ZW50IiwgYW4gaW52aXNpYmlsZSBwcm9jZXNzIHRoYXQgaXMgYWxzbyBub3Qgc2hvd24gb24gTGlu
dXguDQogICAgDQogICAgUmVkaXN0cmlidXRlZCBmdW5jdGlvbnM6DQogICAgLSBraWxsKCkgYW5k
IGtpbGxwZygpIGFyZSBtb3ZlZCB0byBzaWduYWwuYw0KICAgIC0gdGltZXMoKSBpcyBtb3ZlZCB0
byB0aW1lLmMNCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPg0KICAgIC0tLQ0KICAgICBpbmNsdWRlL3VrL3Byb2Nlc3MuaCB8ICA0MyAr
KysrKysrKysrKw0KICAgICBwcm9jZXNzLmMgICAgICAgICAgICB8IDE2NSArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tDQogICAgIHNpZ25hbC5jICAgICAgICAgICAg
IHwgIDE4ICsrKysrDQogICAgIHRpbWUuYyAgICAgICAgICAgICAgIHwgICA2ICsrDQogICAgIDQg
ZmlsZXMgY2hhbmdlZCwgMTgyIGluc2VydGlvbnMoKyksIDUwIGRlbGV0aW9ucygtKQ0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91ay9wcm9jZXNzLmgNCiAgICANCiAgICBkaWZmIC0t
Z2l0IGEvaW5jbHVkZS91ay9wcm9jZXNzLmggYi9pbmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNjcyMDhlMw0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9pbmNsdWRlL3VrL3Byb2Nlc3MuaA0KICAgIEBAIC0wLDAgKzEs
NDMgQEANCiAgICArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLw0K
ICAgICsvKg0KICAgICsgKiBBdXRob3JzOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPg0KICAgICsgKg0KICAgICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9s
aXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAgICsgKg0KICAg
ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCiAgICArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogICAgKyAqIGFyZSBtZXQ6DQogICAg
KyAqDQogICAgKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICArICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQNCiAgICArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICAgICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICsg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzDQogICAgKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogICAgKyAqICAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgKyAqDQog
ICAgKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KICAgICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICAg
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFDQogICAgKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUNCiAgICArICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUg0KICAgICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KICAgICsgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MN
CiAgICArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCiAgICArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCiAgICArICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUNCiAgICArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQog
ICAgKyAqDQogICAgKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElG
SUVEIElOIEFOWSBXQVkuDQogICAgKyAqLw0KICAgICsNCiAgICArI2lmbmRlZiBfX1VLX1BST0NF
U1NfSF9fDQogICAgKyNkZWZpbmUgX19VS19QUk9DRVNTX0hfXw0KICAgICsNCiAgICArI2RlZmlu
ZSBVTklLUkFGVF9QSUQgICAgICAxDQogICAgKyNkZWZpbmUgVU5JS1JBRlRfUFBJRCAgICAgMA0K
ICAgICsjZGVmaW5lIFVOSUtSQUZUX1NJRCAgICAgIDANCiAgICArI2RlZmluZSBVTklLUkFGVF9Q
R0lEICAgICAwDQogICAgKw0KICAgICsjZW5kaWYgLyogX19VS19QUk9DRVNTX0hfXyAqLw0KICAg
IGRpZmYgLS1naXQgYS9wcm9jZXNzLmMgYi9wcm9jZXNzLmMNCiAgICBpbmRleCBjNGUzNjY0Li5l
MjYxMTBkIDEwMDY0NA0KICAgIC0tLSBhL3Byb2Nlc3MuYw0KICAgICsrKyBiL3Byb2Nlc3MuYw0K
ICAgIEBAIC0zLDcgKzMsNyBAQA0KICAgICAgKiBsaWJuZXdsaWIgZ2x1ZSBjb2RlDQogICAgICAq
DQogICAgICAqIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4N
CiAgICAtICoNCiAgICArICogICAgICAgICAgQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4NCiAgICAgICoNCiAgICAgICogQ29weXJpZ2h0IChjKSAyMDE3LCBORUMgRXVyb3BlIEx0
ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgICAgICoNCiAgICBA
QCAtMzUsMTM0ICszNSwxOTkgQEANCiAgICAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRS
QUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICAgICovDQogICAgIA0KICAgIC0jaW5j
bHVkZSA8dGltZS5oPg0KICAgICAjaW5jbHVkZSA8ZXJybm8uaD4NCiAgICAgI2luY2x1ZGUgPHN0
ZGxpYi5oPg0KICAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAgI2luY2x1ZGUgPHN5cy9yZXNv
dXJjZS5oPg0KICAgICsjaW5jbHVkZSA8dWsvcHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8dWsv
cHJpbnQuaD4NCiAgICAgI3VuZGVmIGVycm5vDQogICAgIGV4dGVybiBpbnQgZXJybm87DQogICAg
IA0KICAgIC1pbnQgZXhlY3ZlKGNoYXIgKm5hbWUgX191bnVzZWQsIGNoYXIgKiphcmd2IF9fdW51
c2VkLCBjaGFyICoqZW52IF9fdW51c2VkKQ0KICAgICsNCiAgICAraW50IGZvcmsodm9pZCkNCiAg
ICAgew0KICAgIC0JZXJybm8gPSBFTk9NRU07DQogICAgKwkvKiBmb3JrKCkgaXMgbm90IHN1cHBv
cnRlZCBvbiB0aGlzIHBsYXRmb3JtICovDQogICAgKwllcnJubyA9IEVOT1NZUzsNCiAgICAgCXJl
dHVybiAtMTsNCiAgICAgfQ0KICAgICANCiAgICAtaW50IGV4ZWN2KGNvbnN0IGNoYXIgKnBhdGgg
X191bnVzZWQsIGNoYXIgKmNvbnN0IGFyZ3ZbXSBfX3VudXNlZCkNCiAgICArc3RhdGljDQogICAg
K3ZvaWQgZXhlY193YXJuKGNvbnN0IGNoYXIgKmZ1bmMsDQogICAgKwkJY29uc3QgY2hhciAqcGF0
aCwgY2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAt
CXJldHVybiAwOw0KICAgIC19DQogICAgKwlpbnQgaTsNCiAgICAgDQogICAgLWludCBzeXN0ZW0o
Y29uc3QgY2hhciAqY29tbWFuZCBfX3VudXNlZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIDA7DQog
ICAgLX0NCiAgICArCXVrX3ByX3dhcm4oIiVzKCk6IHBhdGg9JXMiLCBmdW5jLCBwYXRoKTsNCiAg
ICAgDQogICAgLUZJTEUgKnBvcGVuKGNvbnN0IGNoYXIgKmNvbW1hbmQgX191bnVzZWQsIGNvbnN0
IGNoYXIgKnR5cGUgX191bnVzZWQpDQogICAgLXsNCiAgICAtCXJldHVybiBOVUxMOw0KICAgIC19
DQogICAgKwkvKiBwcmludCBhcmd1bWVudHMgKi8NCiAgICArCWkgPSAwOw0KICAgICsJdWtfcHJf
d2FybigiIGFyZ3Y9WyIpOw0KICAgICsJd2hpbGUgKGFyZ3ZbaV0pIHsNCiAgICArCQl1a19wcl93
YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwgYXJndltpXSk7DQogICAgKwkJaSsrOw0K
ICAgICsJfQ0KICAgICsJdWtfcHJfd2FybigiXSIpOw0KICAgICANCiAgICAtaW50IHBjbG9zZShG
SUxFICpzdHJlYW0gX191bnVzZWQpDQogICAgLXsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyog
cHJpbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzICovDQogICAgKwlpZiAoZW52cCkgew0KICAgICsJ
CWkgPSAwOw0KICAgICsJCXVrX3ByX3dhcm4oIiBlbnZwPVsiKTsNCiAgICArCQl3aGlsZSAoZW52
cFtpXSkgew0KICAgICsJCQl1a19wcl93YXJuKCIlcyVzIiwgKGkgPiAwID8gIiwgIiA6ICIiKSwg
ZW52cFtpXSk7DQogICAgKwkJCWkrKzsNCiAgICArCQl9DQogICAgKwkJdWtfcHJfd2FybigiXSIp
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXVrX3ByX3dhcm4oIlxuIik7DQogICAgIH0NCiAgICAg
DQogICAgLWludCBmb3JrKHZvaWQpDQogICAgK2ludCBleGVjdmUoY29uc3QgY2hhciAqcGF0aCwg
Y2hhciAqY29uc3QgYXJndltdLCBjaGFyICpjb25zdCBlbnZwW10pDQogICAgIHsNCiAgICAtCWVy
cm5vID0gRUFHQUlOOw0KICAgICsJZXhlY193YXJuKF9fZnVuY19fLCBwYXRoLCBhcmd2LCBlbnZw
KTsNCiAgICArCWVycm5vID0gRU5PU1lTOw0KICAgICAJcmV0dXJuIC0xOw0KICAgICB9DQogICAg
IA0KICAgIC1pbnQgZ2V0cGlkKHZvaWQpDQogICAgK2ludCBleGVjdihjb25zdCBjaGFyICpwYXRo
LCBjaGFyICpjb25zdCBhcmd2W10pDQogICAgIHsNCiAgICAtCXJldHVybiAxOw0KICAgICsJZXhl
Y193YXJuKF9fZnVuY19fLCBwYXRoLCBhcmd2LCBOVUxMKTsNCiAgICArCWVycm5vID0gRU5PU1lT
Ow0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1waWRfdCBnZXRwcGlkKHZv
aWQpDQogICAgK2ludCBzeXN0ZW0oY29uc3QgY2hhciAqY29tbWFuZCkNCiAgICAgew0KICAgIC0J
cmV0dXJuIDA7DQogICAgKwl1a19wcl93YXJuKCIlczogJXNcbiIsIF9fZnVuY19fLCBjb21tYW5k
KTsNCiAgICArCWVycm5vID0gRU5PU1lTOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAg
IA0KICAgIC1pbnQga2lsbChpbnQgcGlkIF9fdW51c2VkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAg
ICtGSUxFICpwb3Blbihjb25zdCBjaGFyICpjb21tYW5kLCBjb25zdCBjaGFyICp0eXBlIF9fdW51
c2VkKQ0KICAgICB7DQogICAgLQllcnJubyA9IEVJTlZBTDsNCiAgICAtCXJldHVybiAtMTsNCiAg
ICArCXVrX3ByX3dhcm4oIiVzOiAlc1xuIiwgX19mdW5jX18sIGNvbW1hbmQpOw0KICAgICsJZXJy
bm8gPSBFTk9TWVM7DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICAgfQ0KICAgICANCiAgICAtaW50
IHRpbWVzKHN0cnVjdCB0bSAqYnVmIF9fdW51c2VkKQ0KICAgICtpbnQgcGNsb3NlKEZJTEUgKnN0
cmVhbSBfX3VudXNlZCkNCiAgICAgew0KICAgICsJZXJybm8gPSBFSU5WQUw7DQogICAgIAlyZXR1
cm4gLTE7DQogICAgIH0NCiAgICAgDQogICAgIGludCB3YWl0KGludCAqc3RhdHVzIF9fdW51c2Vk
KQ0KICAgICB7DQogICAgKwkvKiBObyBjaGlsZHJlbiAqLw0KICAgICAJZXJybm8gPSBFQ0hJTEQ7
DQogICAgIAlyZXR1cm4gLTE7DQogICAgIH0NCiAgICAgDQogICAgLWludCBzZXRwZ3JwKHZvaWQp
DQogICAgLXsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtaW50
IGtpbGxwZyhpbnQgcGdycCBfX3VudXNlZCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArcGlkX3Qg
d2FpdHBpZChwaWRfdCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwgaW50IG9w
dGlvbnMgX191bnVzZWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogTm8gY2hp
bGRyZW4gKi8NCiAgICArCWVycm5vID0gRUNISUxEOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9
DQogICAgIA0KICAgIC0NCiAgICAgcGlkX3Qgd2FpdDMoaW50ICp3c3RhdHVzIF9fdW51c2VkLCBp
bnQgb3B0aW9ucyBfX3VudXNlZCwNCiAgICAgCQlzdHJ1Y3QgcnVzYWdlICpydXNhZ2UgX191bnVz
ZWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJLyogTm8gY2hpbGRyZW4gKi8NCiAg
ICArCWVycm5vID0gRUNISUxEOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICB9DQogICAgIA0KICAg
ICBwaWRfdCB3YWl0NChwaWRfdCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNlZCwg
aW50IG9wdGlvbnMgX191bnVzZWQsDQogICAgIAkJc3RydWN0IHJ1c2FnZSAqcnVzYWdlIF9fdW51
c2VkKQ0KICAgICB7DQogICAgLQlyZXR1cm4gMDsNCiAgICArCS8qIE5vIGNoaWxkcmVuICovDQog
ICAgKwllcnJubyA9IEVDSElMRDsNCiAgICArCXJldHVybiAtMTsNCiAgICAgfQ0KICAgICANCiAg
ICAtcGlkX3Qgd2FpdHBpZChwaWRfdCBwaWQgX191bnVzZWQsIGludCAqd3N0YXR1cyBfX3VudXNl
ZCwgaW50IG9wdGlvbnMgX191bnVzZWQpDQogICAgK2ludCBnZXRwaWQodm9pZCkNCiAgICAgew0K
ICAgIC0JcmV0dXJuIDA7DQogICAgKwlyZXR1cm4gVU5JS1JBRlRfUElEOw0KICAgICt9DQogICAg
Kw0KICAgICtwaWRfdCBnZXRwcGlkKHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiBVTklLUkFG
VF9QUElEOw0KICAgICB9DQogICAgIA0KICAgICBwaWRfdCBzZXRzaWQodm9pZCkNCiAgICAgew0K
ICAgIC0JcmV0dXJuIDA7DQogICAgKwkvKiBXZSBoYXZlIGEgc2luZ2xlICJzZXNzaW9uIiB3aXRo
IGEgc2luZ2xlICJwcm9jZXNzIiAqLw0KICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVy
biAocGlkX3QpIC0xOw0KICAgICB9DQogICAgIA0KICAgIC1waWRfdCBnZXRzaWQocGlkX3QgcGlk
IF9fdW51c2VkKQ0KICAgICtwaWRfdCBnZXRzaWQocGlkX3QgcGlkKQ0KICAgICB7DQogICAgLQly
ZXR1cm4gMDsNCiAgICArCWlmIChwaWQgIT0gMCkgew0KICAgICsJCS8qIFdlIHN1cHBvcnQgb25s
eSBjYWxscyBmb3IgdGhlIG9ubHkgY2FsbGluZyAicHJvY2VzcyIgKi8NCiAgICArCQllcnJubyA9
IEVTUkNIOw0KICAgICsJCXJldHVybiAocGlkX3QpIC0xOw0KICAgICsJfQ0KICAgICsJcmV0dXJu
IFVOSUtSQUZUX1NJRDsNCiAgICAgfQ0KICAgICANCiAgICAtaW50IHNldHBnaWQocGlkX3QgcGlk
IF9fdW51c2VkLCBwaWRfdCBwZ2lkIF9fdW51c2VkKQ0KICAgICtpbnQgc2V0cGdpZChwaWRfdCBw
aWQsIHBpZF90IHBnaWQpDQogICAgIHsNCiAgICArCWlmIChwaWQgIT0gMCkgew0KICAgICsJCS8q
IFdlIHN1cHBvcnQgb25seSBjYWxscyBmb3IgdGhlIG9ubHkgY2FsbGluZyAicHJvY2VzcyIgKi8N
CiAgICArCQllcnJubyA9IEVTUkNIOw0KICAgICsJCXJldHVybiAocGlkX3QpIC0xOw0KICAgICsJ
fQ0KICAgICsJaWYgKHBnaWQgIT0gMCkgew0KICAgICsJCS8qIFdlIGhhdmUgYSBzaW5nbGUgImdy
b3VwIiB3aXRoIGEgc2luZ2xlICJwcm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0gRVBFUk07DQog
ICAgKwkJcmV0dXJuIChwaWRfdCkgLTE7DQogICAgKwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAg
fQ0KICAgICANCiAgICAgcGlkX3QgZ2V0cGdpZChwaWRfdCBwaWQpDQogICAgIHsNCiAgICAtCXJl
dHVybiAwOw0KICAgICsJaWYgKHBpZCAhPSAwKSB7DQogICAgKwkJLyogV2Ugc3VwcG9ydCBvbmx5
IGNhbGxzIGZvciB0aGUgb25seSBjYWxsaW5nICJwcm9jZXNzIiAqLw0KICAgICsJCWVycm5vID0g
RVNSQ0g7DQogICAgKwkJcmV0dXJuIChwaWRfdCkgLTE7DQogICAgKwl9DQogICAgKwlyZXR1cm4g
VU5JS1JBRlRfUEdJRDsNCiAgICAgfQ0KICAgICANCiAgICArcGlkX3QgZ2V0cGdycCh2b2lkKQ0K
ICAgICt7DQogICAgKwlyZXR1cm4gVU5JS1JBRlRfUEdJRDsNCiAgICArfQ0KICAgICANCiAgICAt
aW50IHRjc2V0cGdycChpbnQgZmQgX191bnVzZWQsIHBpZF90IHBncnAgX191bnVzZWQpDQogICAg
K2ludCBzZXRwZ3JwKHZvaWQpDQogICAgIHsNCiAgICAtCXJldHVybiAwOw0KICAgICsJcmV0dXJu
IHNldHBnaWQoMCwgMCk7DQogICAgIH0NCiAgICAgDQogICAgLXBpZF90IHRjZ2V0cGdycChpbnQg
ZmQgX191bnVzZWQpDQogICAgK2ludCB0Y3NldHBncnAoaW50IGZkIF9fdW51c2VkLCBwaWRfdCBw
Z3JwKQ0KICAgICB7DQogICAgKwkvKiBUT0RPIGNoZWNrIGlmIGZkIGlzIEJBREYgKi8NCiAgICAr
CWlmIChwZ3JwICE9IFVOSUtSQUZUX1BHSUQpIHsNCiAgICArCQllcnJubyA9IEVJTlZBTDsNCiAg
ICArCQlyZXR1cm4gLTE7DQogICAgKwl9DQogICAgIAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICAN
CiAgICArcGlkX3QgdGNnZXRwZ3JwKGludCBmZCkNCiAgICArew0KICAgICsJLyogV2UgaGF2ZSBh
IHNpbmdsZSAicHJvY2VzcyBncm91cCIgKi8NCiAgICArCXJldHVybiBVTklLUkFGVF9QR0lEOw0K
ICAgICt9DQogICAgKw0KICAgICBpbnQgbmljZShpbnQgaW5jIF9fdW51c2VkKQ0KICAgICB7DQog
ICAgLQlyZXR1cm4gMDsNCiAgICArCS8qIFdlIGRvbid0IHN1cHBvcnQgcHJpb3JpdHkgdXBkYXRl
cyBmb3IgdW5pa2VybmVscyAqLw0KICAgICsJZXJybm8gPSBFUEVSTTsNCiAgICArCXJldHVybiAt
MTsNCiAgICAgfQ0KICAgIGRpZmYgLS1naXQgYS9zaWduYWwuYyBiL3NpZ25hbC5jDQogICAgaW5k
ZXggNjgwYmNhZi4uM2FmYzE2OCAxMDA2NDQNCiAgICAtLS0gYS9zaWduYWwuYw0KICAgICsrKyBi
L3NpZ25hbC5jDQogICAgQEAgLTMyLDYgKzMyLDggQEANCiAgICAgICogVEhJUyBIRUFERVIgTUFZ
IE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICAgICovDQogICAg
IA0KICAgICsjaW5jbHVkZSA8dWsvcHJvY2Vzcy5oPg0KICAgICsjaW5jbHVkZSA8ZXJybm8uaD4N
CiAgICAgI2luY2x1ZGUgPHNpZ25hbC5oPg0KICAgICANCiAgICAgaW50IHNpZ2FjdGlvbihpbnQg
c2lnIF9fdW51c2VkLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICpyZXN0cmljdCBhY3QgX191bnVz
ZWQsDQogICAgQEAgLTU0LDMgKzU2LDE5IEBAIGludCBzaWdpbnRlcnJ1cHQoaW50IHNpZyBfX3Vu
dXNlZCwgaW50IGZsYWcgX191bnVzZWQpDQogICAgIHsNCiAgICAgCXJldHVybiAwOw0KICAgICB9
DQogICAgKw0KICAgICtpbnQga2lsbChpbnQgcGlkLCBpbnQgc2lnIF9fdW51c2VkKQ0KICAgICt7
DQogICAgKwkvKiBUT0RPIGNoZWNrIHNpZyAqLw0KICAgICsJaWYgKHBpZCAhPSBVTklLUkFGVF9Q
SUQpDQogICAgKwkJZXJybm8gPSBFU1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAg
ICsNCiAgICAraW50IGtpbGxwZyhpbnQgcGdycCwgaW50IHNpZyBfX3VudXNlZCkNCiAgICArew0K
ICAgICsJLyogVE9ETyBjaGVjayBzaWcgKi8NCiAgICArCWlmIChwZ3JwICE9IFVOSUtSQUZUX1BH
SUQpDQogICAgKwkJZXJybm8gPSBFU1JDSDsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAg
IGRpZmYgLS1naXQgYS90aW1lLmMgYi90aW1lLmMNCiAgICBpbmRleCBhNzk2OTFjLi4zNDcwNTkx
IDEwMDY0NA0KICAgIC0tLSBhL3RpbWUuYw0KICAgICsrKyBiL3RpbWUuYw0KICAgIEBAIC0xNzIs
MyArMTcyLDkgQEAgaW50IGNsb2NrX3NldHRpbWUoY2xvY2tpZF90IGNsa19pZCBfX3VudXNlZCwg
Y29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cCBfX3VudXNlZCkNCiAgICAgew0KICAgICAJcmV0dXJu
IDA7DQogICAgIH0NCiAgICArDQogICAgK2ludCB0aW1lcyhzdHJ1Y3QgdG0gKmJ1ZiBfX3VudXNl
ZCkNCiAgICArew0KICAgICsJZXJybm8gPSBFTk9EQVRBOw0KICAgICsJcmV0dXJuIC0xOw0KICAg
ICt9DQogICAgLS0gDQogICAgMi4yMC4xDQogICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 12:44:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 12:44:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Ue3-0006Bv-O3; Wed, 04 Sep 2019 12:44:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=YtnC=W7=gmail.com=jiakernel2@srs-us1.protection.inumbo.net>)
 id 1i5Ue2-0006Bq-74
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 12:44:18 +0000
X-Inumbo-ID: b4be31ee-cf11-11e9-b299-bc764e2007e4
Received: from mail-pf1-x443.google.com (unknown [2607:f8b0:4864:20::443])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b4be31ee-cf11-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 12:44:17 +0000 (UTC)
Received: by mail-pf1-x443.google.com with SMTP id s12so6179611pfe.6
 for <minios-devel@lists.xenproject.org>; Wed, 04 Sep 2019 05:44:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-transfer-encoding;
 bh=8rF+fYWHQMewEJRbs0yktngrjh+tNEUbVMhKDKtlir4=;
 b=p9kksp0aoG+F6VC2Rf/R0OI5yMB9g6gIqDTSz9xvVvKih5LaZgCmEeBV3LL9gMz4Bq
 XYK6kY5QMlbiGqvt2nPvfwoh21k6LoWJdM1wyACH5PZNiexP9K3qqmQgj/6sxRXzwO1r
 t5lv0+mLVnK1oM93snIgPr1EhpYiy/96dLBLRs0/iuxjF1wCour5HviNlZULonT51Vl2
 iFvM6pSlZ54kQzBcHr8gz3HihdWvgGPwhYi4q0QIFWwSVuOl2/ZAYnyO687sAIerVRvR
 Fwp5j9JK5sTKobpksWwafLCPg6AnmMIf4U8ZuuchxiAI2TLyd7QUrk3ERA/YvJFawnfF
 0Mfg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-transfer-encoding;
 bh=8rF+fYWHQMewEJRbs0yktngrjh+tNEUbVMhKDKtlir4=;
 b=pDjR2N4OPoa3GLy7AsJ5zdLEqsh0dz5bqCn+Cu19NrkpBoLkyTp9WhcIEQW33rz76m
 8erq9OHizHa9Ddvy6mdN9zu2Fy2+T+1wDTBWiNqf3b/52FsiGqTzf5LqIf2cComuwpNI
 ApDkJdan/DJ6dZNyd94t+4258OYMsmBcN4t7Yw/rLmheua1moF6KdSR8aJ7Gcx1ikzcU
 DYQvPBJAhT4o3yKmSFWryMdvwlGvpIXaeMcI+8wK2/coFbqyfYuEl5X3Cx8VuuqiTLr+
 6z1fT/xYxWQ8sc8fvHS71vWMgFnrR7KUkqN8OFk93ob6pGI62l/zmo3bmEBa6fcEogf6
 YsAw==
X-Gm-Message-State: APjAAAV636cpkSDb2RRGfXbzmGU0n4Jg5/TEOu5sRmekWKz7GArv4zk6
 lB6Jin2GYFhCqyakMjXdZU1xkao9
X-Google-Smtp-Source: APXvYqyRKUOCy7qg7FDHUvtf9pZiMj2GVMFdzmetpNZFo3WIwxJxZQ4qAJgdnbLo5C+nunih+9f/zg==
X-Received: by 2002:aa7:8ac5:: with SMTP id b5mr44348443pfd.56.1567601055977; 
 Wed, 04 Sep 2019 05:44:15 -0700 (PDT)
Received: from [0.0.0.0] ([104.129.187.94])
 by smtp.gmail.com with ESMTPSA id k25sm26484793pgt.53.2019.09.04.05.44.13
 for <minios-devel@lists.xenproject.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 04 Sep 2019 05:44:15 -0700 (PDT)
To: minios-devel@lists.xenproject.org
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <DB7PR08MB3082099B9CE6B8C8BE95F80AF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <C9668CE5-082C-43F0-A920-03D76DDD7BE4@neclab.eu>
From: Jia He <jiakernel2@gmail.com>
Message-ID: <4b9ccde4-e924-b290-c427-78710040cc38@gmail.com>
Date: Wed, 4 Sep 2019 20:44:04 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <C9668CE5-082C-43F0-A920-03D76DDD7BE4@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 0/3] support for the lua
 language
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKU29ycnkgZm9yIHVzaW5nIGdtYWlsIGJveCwgb3VyIG91dGxvb2sgZmlsdGVy
ZWQgeW91ciByZXBsaWVzLgoKUGxlYXNlIHNlZSBpbmxpbmUKCk9uIDIwMTkvOS8zIDIxOjE1LCBG
ZWxpcGUgSHVpY2kgd3JvdGU6Cj4gSGkgSnVzdGluLCBwbGVhc2Ugc2VlIGlubGluZS4KPgo+IO+7
v09uIDAyLjA5LjE5LCAwNjo1OCwgIkp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIiA8
SnVzdGluLkhlQGFybS5jb20+IHdyb3RlOgo+Cj4gICAgICBIaSBGZWxpcGUKPiAgICAgIEJlc2lk
ZXMsIEkgZm91bmQgYW5vdGhlciAyIGlzc3VlczoKPiAgICAgIDEuIHNvbWUgaGVhZCBmaWxlcyBh
cmUgbWlzc2luZyBhZnRlciBmZXRjaGluZyB0aGUgbGlibHVhIHNyYyBjb2Rlcwo+ICAgICAgcm9v
dEBqb25nOn4vaGovVUsvYXBwcy9oZWxsb3dvcmxkIyBsbCAgL3Jvb3QvaGovVUsvYXBwcy9oZWxs
b3dvcmxkL2J1aWxkL2xpYmx1YS9pbmNsdWRlLwo+ICAgICAgdG90YWwgMjgKPiAgICAgIGRyd3hy
LXhyLXggMiByb290IHJvb3QgNDA5NiA55pyIICAgMiAxMjo1MiAuLwo+ICAgICAgZHJ3eHIteHIt
eCA0IHJvb3Qgcm9vdCA0MDk2IDnmnIggICAyIDEyOjUzIC4uLwo+ICAgICAgbHJ3eHJ3eHJ3eCAx
IHJvb3Qgcm9vdCAgIDcxIDnmnIggICAyIDEyOjUyIGxhdXhsaWIuaCAtPiAvcm9vdC9oai9VSy9h
cHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVhL29yaWdpbi9sdWEtNS4zLjUvc3JjL2xhdXhsaWIu
aAo+ICAgICAgbHJ3eHJ3eHJ3eCAxIHJvb3Qgcm9vdCAgIDcxIDnmnIggICAyIDEyOjUyIGx1YWNv
bmYuaCAtPiAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVhL29yaWdpbi9s
dWEtNS4zLjUvc3JjL2x1YWNvbmYuaAo+ICAgICAgbHJ3eHJ3eHJ3eCAxIHJvb3Qgcm9vdCAgIDY3
IDnmnIggICAyIDEyOjUyIGx1YS5oIC0+IC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWls
ZC9saWJsdWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbHVhLmgKPiAgICAgIGxyd3hyd3hyd3ggMSBy
b290IHJvb3QgICA2OSA55pyIICAgMiAxMjo1MiBsdWEuaHBwIC0+IC9yb290L2hqL1VLL2FwcHMv
aGVsbG93b3JsZC9idWlsZC9saWJsdWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbHVhLmhwcAo+ICAg
ICAgbHJ3eHJ3eHJ3eCAxIHJvb3Qgcm9vdCAgIDcwIDnmnIggICAyIDEyOjUyIGx1YWxpYi5oIC0+
IC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJsdWEvb3JpZ2luL2x1YS01LjMu
NS9zcmMvbHVhbGliLmgKPiAgICAgIHJvb3RAam9uZzp+L2hqL1VLL2FwcHMvaGVsbG93b3JsZCMg
bGwgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmlnaW4vbHVhLTUu
My41L3NyYy9sYXV4bGliLmgKPiAgICAgIGxzOiBjYW5ub3QgYWNjZXNzICcvcm9vdC9oai9VSy9h
cHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVhL29yaWdpbi9sdWEtNS4zLjUvc3JjL2xhdXhsaWIu
aCc6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKPiAgICAgIHJvb3RAam9uZzp+L2hqL1VLL2Fw
cHMvaGVsbG93b3JsZCMKPiAgICAgIAo+ICAgICAgSSBndWVzcyBzb21ldGhpbmcgd3JvbmcgaW4g
TWFrZWZpbGUudWsKPiAgICAgICMgVE9fSU5DCj4gICAgICBVS19QUkVQQVJFICs9ICQoTElCTFVB
X0JVSUxEKS9pbmNsdWRlL2x1YS5oCj4gICAgICBVS19QUkVQQVJFICs9ICQoTElCTFVBX0JVSUxE
KS9pbmNsdWRlL2x1YWNvbmYuaAo+ICAgICAgVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkv
aW5jbHVkZS9sdWFsaWIuaAo+ICAgICAgVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5j
bHVkZS9sYXV4bGliLmgKPiAgICAgIFVLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJTEQpL2luY2x1
ZGUvbHVhLmhwcAo+ICAgICAgCj4gVGhpcyBpcyBhY3R1YWxseSBhIHByb2JsZW0gb2YgdGhlIGJ1
aWxkIHN5c3RlbSwgd2UncmUgY3VycmVudGx5IHdvcmtpbmcgb24gaXQuIEFzIGEgd29ya2Fyb3Vu
ZCwgaW4geW91ciBhcHAncyBNYWtlZmlsZSBwbGVhc2UgcHV0Ogo+Cj4gYWxsOgo+IAlAbWFrZSAt
QyAkKFVLX1JPT1QpIEE9JChQV0QpIEw9JChMSUJTKSBmZXRjaAo+IAlAbWFrZSAtQyAkKFVLX1JP
T1QpIEE9JChQV0QpIEw9JChMSUJTKSBwcmVwYXJlCj4gCUBtYWtlIC1DICQoVUtfUk9PVCkgQT0k
KFBXRCkgTD0kKExJQlMpCj4KPiBUaGlzIHdpbGwgbWFrZSBzdXJlIHRoZSBwcmVwYXJlIHN0ZXAg
cnVucyBiZWZvcmUgdGhlIGFjdHVhbCBtYWtlLCB3aGljaCBpcyB3aGF0J3MgY2F1c2luZyB0aGUg
ZXJyb3IuCj4KPgo+ICAgICAgMi4gc2VlbXMgbGlibHVhIGNhbid0IGJlIGJ1aWx0IHdpdGggbm9s
aWJjIGVuYWJsZWQsIG5vIHNpZ25hbC5oIGlzIGZvdW5kCj4KPiBZZXMsIG9uZSBvZiB0aGUgY29t
bWl0cyBzYXlzIGl0LCB0aGlzIGxpYnJhcnkgY2FuJ3QgYnVpbGQgYWdhaW5zdCBub2JsaWMgKGF0
IGxlYXN0IGZvciBub3cpLCBpdCByZXF1aXJlcyBuZXdsaWIuCgoKSG93IGFib3V0IG1ha2UgaXQg
ZXhwbGljdGx5IGRlcGVuZHMgb24gbmV3bGliPyBpbnN0ZWFkIG9mICJzZWxlY3QgTElCTk9MSUJD
IGlmIAohSEFWRV9MSUJD4oCcCgoKPiAgICAgIAo+ICAgICAgMywgd2l0aCBuZXdsaWIgZW5hYmxl
ZCwgdGhlIGhlbGxvd29ybGQgYXBwIChhbG1vc3QgZHVtbXkgbWFpbigpKSBjYW4ndAo+ICAgICAg
YmUgbGlua2VkOgo+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxv
d29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19jb2xsYXRlX2Vycic6Cj4gICAgICBz
Z2xpc3QuYzooLnRleHQrMHg3ODhkKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnCj4g
ICAgICBzZ2xpc3QuYzooLnRleHQrMHg3OGE1KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd3Jp
dGUnCj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHg3OGJiKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0
byBgd3JpdGUnCj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHg3OGVlKTogdW5kZWZpbmVkIHJlZmVy
ZW5jZSB0byBgd3JpdGUnCj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHg3OTA0KTogdW5kZWZpbmVk
IHJlZmVyZW5jZSB0byBgd3JpdGUnCj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQv
YnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfY2xvc2Vfcic6Cj4g
ICAgICBzZ2xpc3QuYzooLnRleHQrMHhmMjE5KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgY2xv
c2UnCj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9r
dm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfZnN0YXRfcic6Cj4gICAgICBzZ2xpc3QuYzooLnRl
eHQrMHhmM2JjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZnN0YXQnCj4gICAgICAvcm9vdC9o
ai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1
bmN0aW9uIGBfbWtkaXJfcic6Cj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHhmNTBjKTogdW5kZWZp
bmVkIHJlZmVyZW5jZSB0byBgbWtkaXInCj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29y
bGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfb3Blbl9yJzoK
PiAgICAgIHNnbGlzdC5jOigudGV4dCsweGY1NTApOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBv
cGVuJwo+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRf
a3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX3JlYWRfcic6Cj4gICAgICBzZ2xpc3QuYzooLnRl
eHQrMHhmNThmKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgcmVhZCcKPiAgICAgIC9yb290L2hq
L1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVu
Y3Rpb24gYF9zdGF0X3InOgo+ICAgICAgc2dsaXN0LmM6KC50ZXh0KzB4ZjY3ZCk6IHVuZGVmaW5l
ZCByZWZlcmVuY2UgdG8gYHN0YXQnCj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQv
YnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfdW5saW5rX3InOgo+
ICAgICAgc2dsaXN0LmM6KC50ZXh0KzB4ZjZjYSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHVu
bGluaycKPiAgICAgIC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxk
X2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYF93cml0ZV9yJzoKPiAgICAgIHNnbGlzdC5jOigu
dGV4dCsweGY3MGYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0ZScKPiAgICAgIC9yb290
L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4g
ZnVuY3Rpb24gYGZsdXNoX21ldGEnOgo+ICAgICAgaGFzaC5jOigudGV4dCsweDEwNDBjKTogdW5k
ZWZpbmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnCj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxv
d29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBoZGVzdHJv
eSc6Cj4gICAgICBoYXNoLmM6KC50ZXh0KzB4MTA1YWQpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRv
IGBjbG9zZScKPiAgICAgIC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dv
cmxkX2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYF9faGFzaF9vcGVuJzoKPiAgICAgIHNnbGlz
dC5jOigudGV4dCsweDEwZjI4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgc3RhdCcKPiAgICAg
IHNnbGlzdC5jOigudGV4dCsweDEwZjYyKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgb3BlbicK
PiAgICAgIHNnbGlzdC5jOigudGV4dCsweDEwZjlhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBg
ZnN0YXQnCj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHgxMTA0Yik6IHVuZGVmaW5lZCByZWZlcmVu
Y2UgdG8gYHN0YXQnCj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHgxMTIwNik6IHVuZGVmaW5lZCBy
ZWZlcmVuY2UgdG8gYHJlYWQnCj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHgxMTY5ZCk6IHVuZGVm
aW5lZCByZWZlcmVuY2UgdG8gYGNsb3NlJwo+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dv
cmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19nZXRfcGFn
ZSc6Cj4gICAgICBzZ2xpc3QuYzooLnRleHQrMHgxMzA0ZSk6IHVuZGVmaW5lZCByZWZlcmVuY2Ug
dG8gYHJlYWQnCj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93
b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfX3B1dF9wYWdlJzoKPiAgICAgIHNnbGlz
dC5jOigudGV4dCsweDEzMmFlKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgdW5saW5rJwo+ICAg
ICAgc2dsaXN0LmM6KC50ZXh0KzB4MTMzZmEpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0
ZScKPiAgICAgIC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2
bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYF9fYWRkX292ZmxwYWdlJzoKPiAgICAgIHNnbGlzdC5j
OigudGV4dCsweDEzNmFiKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnCj4gICAgICAv
cm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86
IEluIGZ1bmN0aW9uIGBwbWFpbic6Cj4gICAgICBsdWEuYzooLnRleHQrMHg2N2E5Nyk6IHVuZGVm
aW5lZCByZWZlcmVuY2UgdG8gYHVrcGxhdF9tZW1yZWdpb25fZmluZF9pbml0cmQwJwo+ICAgICAg
L3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5v
OiBJbiBmdW5jdGlvbiBgbHVhRF90aHJvdyc6Cj4gICAgICBsaW5pdC5jOigudGV4dCsweDZjYmQw
KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbG9uZ2ptcCcKPiAgICAgIC9yb290L2hqL1VLL2Fw
cHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24g
YGx1YURfcmF3cnVucHJvdGVjdGVkJzoKPiAgICAgIGxpbml0LmM6KC50ZXh0KzB4NmNkY2UpOiB1
bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzZXRqbXAnCj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hl
bGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBvc19l
eGVjdXRlJzoKPiAgICAgIGxvc2xpYi5jOigudGV4dCsweDgyZjBmKTogdW5kZWZpbmVkIHJlZmVy
ZW5jZSB0byBgc3lzdGVtJwo+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxk
L2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgbWFpbic6Cj4gICAgICBzZ2xp
c3QuYzooLnRleHQuc3RhcnR1cCsweDc3KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbHVhTF9v
cGVubGlicycKPiAgICAgIHNnbGlzdC5jOigudGV4dC5zdGFydHVwKzB4YzgpOiB1bmRlZmluZWQg
cmVmZXJlbmNlIHRvIGBsdWFMX2xvYWRidWZmZXJ4Jwo+ICAgICAgCj4gVGhpcyBpcyBzdHJhbmdl
LiBNb3N0IG9mIHRoZSBzeW1ib2xzIGFyZSBuZXdsaWIgb25lcywgZGlkIHlvdSBkbyBhIHByb3Bl
cmNsZWFuOyBtYWtlIGFuZCB5b3Ugc3RpbGwgZ2V0IHRoZXNlIGVycm9ycz8gSSBhc2sgYmVjYXNl
IEkgaGF2ZSBhbGwgb2YgdGhvc2Ugc3ltYm9scyBpbiBteSBmaW5hbCBpbWFnZS4uLgoKSSB3aWxs
IGRvdWJsZSBjaGVjayBpdAoKLS0tCkNoZWVycywKSnVzdGluIChKaWEgSGUpCgoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 12:50:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 12:50:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Ujq-0006rt-7U; Wed, 04 Sep 2019 12:50:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6WR=W7=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i5Ujp-0006ro-41
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 12:50:17 +0000
X-Inumbo-ID: 8a154684-cf12-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8a154684-cf12-11e9-978d-bc764e2007e4;
 Wed, 04 Sep 2019 12:50:14 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 08061F2030;
 Wed,  4 Sep 2019 14:50:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ma8crXws1URr; Wed,  4 Sep 2019 14:50:13 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C9188F2017;
 Wed,  4 Sep 2019 14:50:09 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 4 Sep 2019
 14:50:09 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Wed, 4 Sep 2019 14:50:09
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Jia He <jiakernel2@gmail.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 0/3] support for the lua
 language
Thread-Index: AQHVXbVi/nxZbwkWDEiSXh7wsDBUgKcXuR0AgAI+0wCAAWf8AIAAIzqA
Date: Wed, 4 Sep 2019 12:50:09 +0000
Message-ID: <0F3CD816-2B5A-4E65-A9FC-15D400BFF00B@neclab.eu>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <DB7PR08MB3082099B9CE6B8C8BE95F80AF7BE0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <C9668CE5-082C-43F0-A920-03D76DDD7BE4@neclab.eu>
 <4b9ccde4-e924-b290-c427-78710040cc38@gmail.com>
In-Reply-To: <4b9ccde4-e924-b290-c427-78710040cc38@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <28C6E05FD802DE48954249A3106EF453@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 0/3] support for the lua
 language
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLA0KDQrvu79PbiAwNC4wOS4xOSwgMTQ6NDQsICJKaWEgSGUiIDxqaWFrZXJuZWwy
QGdtYWlsLmNvbT4gd3JvdGU6DQoNCiAgICBIaSBGZWxpcGUsDQogICAgDQogICAgU29ycnkgZm9y
IHVzaW5nIGdtYWlsIGJveCwgb3VyIG91dGxvb2sgZmlsdGVyZWQgeW91ciByZXBsaWVzLg0KICAg
IA0KICAgIFBsZWFzZSBzZWUgaW5saW5lDQogICAgDQogICAgT24gMjAxOS85LzMgMjE6MTUsIEZl
bGlwZSBIdWljaSB3cm90ZToNCiAgICA+IEhpIEp1c3RpbiwgcGxlYXNlIHNlZSBpbmxpbmUuDQog
ICAgPg0KICAgID4gT24gMDIuMDkuMTksIDA2OjU4LCAiSnVzdGluIEhlIChBcm0gVGVjaG5vbG9n
eSBDaGluYSkiIDxKdXN0aW4uSGVAYXJtLmNvbT4gd3JvdGU6DQogICAgPg0KICAgID4gICAgICBI
aSBGZWxpcGUNCiAgICA+ICAgICAgQmVzaWRlcywgSSBmb3VuZCBhbm90aGVyIDIgaXNzdWVzOg0K
ICAgID4gICAgICAxLiBzb21lIGhlYWQgZmlsZXMgYXJlIG1pc3NpbmcgYWZ0ZXIgZmV0Y2hpbmcg
dGhlIGxpYmx1YSBzcmMgY29kZXMNCiAgICA+ICAgICAgcm9vdEBqb25nOn4vaGovVUsvYXBwcy9o
ZWxsb3dvcmxkIyBsbCAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9p
bmNsdWRlLw0KICAgID4gICAgICB0b3RhbCAyOA0KICAgID4gICAgICBkcnd4ci14ci14IDIgcm9v
dCByb290IDQwOTYgOeaciCAgIDIgMTI6NTIgLi8NCiAgICA+ICAgICAgZHJ3eHIteHIteCA0IHJv
b3Qgcm9vdCA0MDk2IDnmnIggICAyIDEyOjUzIC4uLw0KICAgID4gICAgICBscnd4cnd4cnd4IDEg
cm9vdCByb290ICAgNzEgOeaciCAgIDIgMTI6NTIgbGF1eGxpYi5oIC0+IC9yb290L2hqL1VLL2Fw
cHMvaGVsbG93b3JsZC9idWlsZC9saWJsdWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbGF1eGxpYi5o
DQogICAgPiAgICAgIGxyd3hyd3hyd3ggMSByb290IHJvb3QgICA3MSA55pyIICAgMiAxMjo1MiBs
dWFjb25mLmggLT4gL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmln
aW4vbHVhLTUuMy41L3NyYy9sdWFjb25mLmgNCiAgICA+ICAgICAgbHJ3eHJ3eHJ3eCAxIHJvb3Qg
cm9vdCAgIDY3IDnmnIggICAyIDEyOjUyIGx1YS5oIC0+IC9yb290L2hqL1VLL2FwcHMvaGVsbG93
b3JsZC9idWlsZC9saWJsdWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbHVhLmgNCiAgICA+ICAgICAg
bHJ3eHJ3eHJ3eCAxIHJvb3Qgcm9vdCAgIDY5IDnmnIggICAyIDEyOjUyIGx1YS5ocHAgLT4gL3Jv
b3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmlnaW4vbHVhLTUuMy41L3Ny
Yy9sdWEuaHBwDQogICAgPiAgICAgIGxyd3hyd3hyd3ggMSByb290IHJvb3QgICA3MCA55pyIICAg
MiAxMjo1MiBsdWFsaWIuaCAtPiAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGli
bHVhL29yaWdpbi9sdWEtNS4zLjUvc3JjL2x1YWxpYi5oDQogICAgPiAgICAgIHJvb3RAam9uZzp+
L2hqL1VLL2FwcHMvaGVsbG93b3JsZCMgbGwgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1
aWxkL2xpYmx1YS9vcmlnaW4vbHVhLTUuMy41L3NyYy9sYXV4bGliLmgNCiAgICA+ICAgICAgbHM6
IGNhbm5vdCBhY2Nlc3MgJy9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJsdWEv
b3JpZ2luL2x1YS01LjMuNS9zcmMvbGF1eGxpYi5oJzogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9y
eQ0KICAgID4gICAgICByb290QGpvbmc6fi9oai9VSy9hcHBzL2hlbGxvd29ybGQjDQogICAgPiAg
ICAgIA0KICAgID4gICAgICBJIGd1ZXNzIHNvbWV0aGluZyB3cm9uZyBpbiBNYWtlZmlsZS51aw0K
ICAgID4gICAgICAjIFRPX0lOQw0KICAgID4gICAgICBVS19QUkVQQVJFICs9ICQoTElCTFVBX0JV
SUxEKS9pbmNsdWRlL2x1YS5oDQogICAgPiAgICAgIFVLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJ
TEQpL2luY2x1ZGUvbHVhY29uZi5oDQogICAgPiAgICAgIFVLX1BSRVBBUkUgKz0gJChMSUJMVUFf
QlVJTEQpL2luY2x1ZGUvbHVhbGliLmgNCiAgICA+ICAgICAgVUtfUFJFUEFSRSArPSAkKExJQkxV
QV9CVUlMRCkvaW5jbHVkZS9sYXV4bGliLmgNCiAgICA+ICAgICAgVUtfUFJFUEFSRSArPSAkKExJ
QkxVQV9CVUlMRCkvaW5jbHVkZS9sdWEuaHBwDQogICAgPiAgICAgIA0KICAgID4gVGhpcyBpcyBh
Y3R1YWxseSBhIHByb2JsZW0gb2YgdGhlIGJ1aWxkIHN5c3RlbSwgd2UncmUgY3VycmVudGx5IHdv
cmtpbmcgb24gaXQuIEFzIGEgd29ya2Fyb3VuZCwgaW4geW91ciBhcHAncyBNYWtlZmlsZSBwbGVh
c2UgcHV0Og0KICAgID4NCiAgICA+IGFsbDoNCiAgICA+IAlAbWFrZSAtQyAkKFVLX1JPT1QpIEE9
JChQV0QpIEw9JChMSUJTKSBmZXRjaA0KICAgID4gCUBtYWtlIC1DICQoVUtfUk9PVCkgQT0kKFBX
RCkgTD0kKExJQlMpIHByZXBhcmUNCiAgICA+IAlAbWFrZSAtQyAkKFVLX1JPT1QpIEE9JChQV0Qp
IEw9JChMSUJTKQ0KICAgID4NCiAgICA+IFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhlIHByZXBhcmUg
c3RlcCBydW5zIGJlZm9yZSB0aGUgYWN0dWFsIG1ha2UsIHdoaWNoIGlzIHdoYXQncyBjYXVzaW5n
IHRoZSBlcnJvci4NCiAgICA+DQogICAgPg0KICAgID4gICAgICAyLiBzZWVtcyBsaWJsdWEgY2Fu
J3QgYmUgYnVpbHQgd2l0aCBub2xpYmMgZW5hYmxlZCwgbm8gc2lnbmFsLmggaXMgZm91bmQNCiAg
ICA+DQogICAgPiBZZXMsIG9uZSBvZiB0aGUgY29tbWl0cyBzYXlzIGl0LCB0aGlzIGxpYnJhcnkg
Y2FuJ3QgYnVpbGQgYWdhaW5zdCBub2JsaWMgKGF0IGxlYXN0IGZvciBub3cpLCBpdCByZXF1aXJl
cyBuZXdsaWIuDQogICAgDQogICAgDQogICAgSG93IGFib3V0IG1ha2UgaXQgZXhwbGljdGx5IGRl
cGVuZHMgb24gbmV3bGliPyBpbnN0ZWFkIG9mICJzZWxlY3QgTElCTk9MSUJDIGlmIA0KICAgICFI
QVZFX0xJQkPigJwNCg0KWWVzLCBtYWtlcyBzZW5zZSwgd2lsbCBkby4NCg0KLS0gRmVsaXBlDQog
ICAgDQogICAgDQogICAgPiAgICAgIA0KICAgID4gICAgICAzLCB3aXRoIG5ld2xpYiBlbmFibGVk
LCB0aGUgaGVsbG93b3JsZCBhcHAgKGFsbW9zdCBkdW1teSBtYWluKCkpIGNhbid0DQogICAgPiAg
ICAgIGJlIGxpbmtlZDoNCiAgICA+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1
aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19jb2xsYXRlX2Vycic6
DQogICAgPiAgICAgIHNnbGlzdC5jOigudGV4dCsweDc4OGQpOiB1bmRlZmluZWQgcmVmZXJlbmNl
IHRvIGB3cml0ZScNCiAgICA+ICAgICAgc2dsaXN0LmM6KC50ZXh0KzB4NzhhNSk6IHVuZGVmaW5l
ZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KICAgID4gICAgICBzZ2xpc3QuYzooLnRleHQrMHg3OGJi
KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnDQogICAgPiAgICAgIHNnbGlzdC5jOigu
dGV4dCsweDc4ZWUpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0ZScNCiAgICA+ICAgICAg
c2dsaXN0LmM6KC50ZXh0KzB4NzkwNCk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0K
ICAgID4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9r
dm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfY2xvc2Vfcic6DQogICAgPiAgICAgIHNnbGlzdC5j
OigudGV4dCsweGYyMTkpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBjbG9zZScNCiAgICA+ICAg
ICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82
NC5vOiBJbiBmdW5jdGlvbiBgX2ZzdGF0X3InOg0KICAgID4gICAgICBzZ2xpc3QuYzooLnRleHQr
MHhmM2JjKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgZnN0YXQnDQogICAgPiAgICAgIC9yb290
L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4g
ZnVuY3Rpb24gYF9ta2Rpcl9yJzoNCiAgICA+ICAgICAgc2dsaXN0LmM6KC50ZXh0KzB4ZjUwYyk6
IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYG1rZGlyJw0KICAgID4gICAgICAvcm9vdC9oai9VSy9h
cHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9u
IGBfb3Blbl9yJzoNCiAgICA+ICAgICAgc2dsaXN0LmM6KC50ZXh0KzB4ZjU1MCk6IHVuZGVmaW5l
ZCByZWZlcmVuY2UgdG8gYG9wZW4nDQogICAgPiAgICAgIC9yb290L2hqL1VLL2FwcHMvaGVsbG93
b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYF9yZWFkX3In
Og0KICAgID4gICAgICBzZ2xpc3QuYzooLnRleHQrMHhmNThmKTogdW5kZWZpbmVkIHJlZmVyZW5j
ZSB0byBgcmVhZCcNCiAgICA+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxk
L2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX3N0YXRfcic6DQogICAgPiAg
ICAgIHNnbGlzdC5jOigudGV4dCsweGY2N2QpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzdGF0
Jw0KICAgID4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3Js
ZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfdW5saW5rX3InOg0KICAgID4gICAgICBzZ2xp
c3QuYzooLnRleHQrMHhmNmNhKTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgdW5saW5rJw0KICAg
ID4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0t
eDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfd3JpdGVfcic6DQogICAgPiAgICAgIHNnbGlzdC5jOigu
dGV4dCsweGY3MGYpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGB3cml0ZScNCiAgICA+ICAgICAg
L3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5v
OiBJbiBmdW5jdGlvbiBgZmx1c2hfbWV0YSc6DQogICAgPiAgICAgIGhhc2guYzooLnRleHQrMHgx
MDQwYyk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KICAgID4gICAgICAvcm9vdC9o
ai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1
bmN0aW9uIGBoZGVzdHJveSc6DQogICAgPiAgICAgIGhhc2guYzooLnRleHQrMHgxMDVhZCk6IHVu
ZGVmaW5lZCByZWZlcmVuY2UgdG8gYGNsb3NlJw0KICAgID4gICAgICAvcm9vdC9oai9VSy9hcHBz
L2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBf
X2hhc2hfb3Blbic6DQogICAgPiAgICAgIHNnbGlzdC5jOigudGV4dCsweDEwZjI4KTogdW5kZWZp
bmVkIHJlZmVyZW5jZSB0byBgc3RhdCcNCiAgICA+ICAgICAgc2dsaXN0LmM6KC50ZXh0KzB4MTBm
NjIpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBvcGVuJw0KICAgID4gICAgICBzZ2xpc3QuYzoo
LnRleHQrMHgxMGY5YSk6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYGZzdGF0Jw0KICAgID4gICAg
ICBzZ2xpc3QuYzooLnRleHQrMHgxMTA0Yik6IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHN0YXQn
DQogICAgPiAgICAgIHNnbGlzdC5jOigudGV4dCsweDExMjA2KTogdW5kZWZpbmVkIHJlZmVyZW5j
ZSB0byBgcmVhZCcNCiAgICA+ICAgICAgc2dsaXN0LmM6KC50ZXh0KzB4MTE2OWQpOiB1bmRlZmlu
ZWQgcmVmZXJlbmNlIHRvIGBjbG9zZScNCiAgICA+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxs
b3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19nZXRf
cGFnZSc6DQogICAgPiAgICAgIHNnbGlzdC5jOigudGV4dCsweDEzMDRlKTogdW5kZWZpbmVkIHJl
ZmVyZW5jZSB0byBgcmVhZCcNCiAgICA+ICAgICAgL3Jvb3QvaGovVUsvYXBwcy9oZWxsb3dvcmxk
L2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlvbiBgX19wdXRfcGFnZSc6
DQogICAgPiAgICAgIHNnbGlzdC5jOigudGV4dCsweDEzMmFlKTogdW5kZWZpbmVkIHJlZmVyZW5j
ZSB0byBgdW5saW5rJw0KICAgID4gICAgICBzZ2xpc3QuYzooLnRleHQrMHgxMzNmYSk6IHVuZGVm
aW5lZCByZWZlcmVuY2UgdG8gYHdyaXRlJw0KICAgID4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hl
bGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9uIGBfX2Fk
ZF9vdmZscGFnZSc6DQogICAgPiAgICAgIHNnbGlzdC5jOigudGV4dCsweDEzNmFiKTogdW5kZWZp
bmVkIHJlZmVyZW5jZSB0byBgd3JpdGUnDQogICAgPiAgICAgIC9yb290L2hqL1VLL2FwcHMvaGVs
bG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVuY3Rpb24gYHBtYWlu
JzoNCiAgICA+ICAgICAgbHVhLmM6KC50ZXh0KzB4NjdhOTcpOiB1bmRlZmluZWQgcmVmZXJlbmNl
IHRvIGB1a3BsYXRfbWVtcmVnaW9uX2ZpbmRfaW5pdHJkMCcNCiAgICA+ICAgICAgL3Jvb3QvaGov
VUsvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5j
dGlvbiBgbHVhRF90aHJvdyc6DQogICAgPiAgICAgIGxpbml0LmM6KC50ZXh0KzB4NmNiZDApOiB1
bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBsb25nam1wJw0KICAgID4gICAgICAvcm9vdC9oai9VSy9h
cHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0Lm86IEluIGZ1bmN0aW9u
IGBsdWFEX3Jhd3J1bnByb3RlY3RlZCc6DQogICAgPiAgICAgIGxpbml0LmM6KC50ZXh0KzB4NmNk
Y2UpOiB1bmRlZmluZWQgcmVmZXJlbmNlIHRvIGBzZXRqbXAnDQogICAgPiAgICAgIC9yb290L2hq
L1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxkX2t2bS14ODZfNjQubzogSW4gZnVu
Y3Rpb24gYG9zX2V4ZWN1dGUnOg0KICAgID4gICAgICBsb3NsaWIuYzooLnRleHQrMHg4MmYwZik6
IHVuZGVmaW5lZCByZWZlcmVuY2UgdG8gYHN5c3RlbScNCiAgICA+ICAgICAgL3Jvb3QvaGovVUsv
YXBwcy9oZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5vOiBJbiBmdW5jdGlv
biBgbWFpbic6DQogICAgPiAgICAgIHNnbGlzdC5jOigudGV4dC5zdGFydHVwKzB4NzcpOiB1bmRl
ZmluZWQgcmVmZXJlbmNlIHRvIGBsdWFMX29wZW5saWJzJw0KICAgID4gICAgICBzZ2xpc3QuYzoo
LnRleHQuc3RhcnR1cCsweGM4KTogdW5kZWZpbmVkIHJlZmVyZW5jZSB0byBgbHVhTF9sb2FkYnVm
ZmVyeCcNCiAgICA+ICAgICAgDQogICAgPiBUaGlzIGlzIHN0cmFuZ2UuIE1vc3Qgb2YgdGhlIHN5
bWJvbHMgYXJlIG5ld2xpYiBvbmVzLCBkaWQgeW91IGRvIGEgcHJvcGVyY2xlYW47IG1ha2UgYW5k
IHlvdSBzdGlsbCBnZXQgdGhlc2UgZXJyb3JzPyBJIGFzayBiZWNhc2UgSSBoYXZlIGFsbCBvZiB0
aG9zZSBzeW1ib2xzIGluIG15IGZpbmFsIGltYWdlLi4uDQogICAgDQogICAgSSB3aWxsIGRvdWJs
ZSBjaGVjayBpdA0KICAgIA0KICAgIC0tLQ0KICAgIENoZWVycywNCiAgICBKdXN0aW4gKEppYSBI
ZSkNCiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 14:23:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 14:23:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5WCT-0000jT-Ga; Wed, 04 Sep 2019 14:23:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=WgxQ=W7=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i5WCS-0000jH-KK
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 14:23:56 +0000
X-Inumbo-ID: 9a063276-cf1f-11e9-b76c-bc764e2007e4
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9a063276-cf1f-11e9-b76c-bc764e2007e4;
 Wed, 04 Sep 2019 14:23:45 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567607025;
 h=from:to:subject:date:message-id:content-id:
 content-transfer-encoding:mime-version;
 bh=k1IzR1xNGsKgQAZH+9qreqIxv93/BMcoILeDj961+rU=;
 b=XJflpXzszKpAEDdThjzQCZuPO8sq1pr+Cf6qTC5aewbmaQX7tOjiRuZx
 gJJ5P/n7JAKCuQfq9baxb0zPBnyXBaRF9J5Y6ISbNiloYbvyZvYoUI0xy
 sP4zwBv8FwAxZQufTF/h27S6MnnDlpW5BhV/oy+VDWQ6RxbXPI5bP78Py 0=;
Authentication-Results: esa6.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: 3Oza53F8tLT6IdBzhhNKIUXlux2DNKVoUCwHnQUdZp0K7SF15imgWR5donhyhyjRZ/SEepkgrf
 vpiZDI1dBWwdu+uGfSiX6Cp8xi5T/D9FapPNnaOdbTP0GeyZb+UkZ2DKC6EY3DxnsL1lW31UKK
 k3R17mXKeLWeuDqYcVufu98qCVwcBIcGm4sGrQSnDUZtDYJxYwOdACR4h/JjP2UmPfJ8m/gZho
 lhrBIlaID2i/NFD1HlvmfmtDEekO5HIHa9+v2BIu6Sj58qKSGHTC5lO4HJhxv31WompJ56uZ7C
 N1c=
X-SBRS: 2.7
X-MesageID: 5342952
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,467,1559534400"; 
   d="scan'208";a="5342952"
From: Lars Kurth <lars.kurth@citrix.com>
To: xen-devel <xen-devel@lists.xenproject.org>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>
Thread-Topic: [Poll] Please vote on date options for next year's Developer
 Summit (closes Wednesday, September 11)
Thread-Index: AQHVYyxR8dMvjKx5ZUmpULPWAlXMyg==
Date: Wed, 4 Sep 2019 14:23:27 +0000
Message-ID: <56100B8A-BD4B-4C65-9FBE-594EBE6D1AAF@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <C46511291F6743439935D5910BF226FC@citrix.com>
MIME-Version: 1.0
Subject: [Minios-devel] [Poll] Please vote on date options for next year's
 Developer Summit (closes Wednesday, September 11)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgYWxsLA0KDQp3ZSBzdGFydGVkIHBsYW5uaW5nIG5leHQgeWVhcuKAmXMgRGV2ZWxvcGVyIFN1
bW1pdCwgd2hpY2ggaXMgZHVlIHRvIGJlIGluIEV1cm9wZS4gV2UgaGF2ZSBhIHZlbnVlIGluIEJ1
Y2hhcmVzdCwgUm9tYW5pYSBzZWN1cmVkIGJ1dCBhcmUgc3RpbGwgd29ya2luZyB0aHJvdWdoIHRo
ZSBkZXRhaWxzLiBBcyB3ZSBhcmUgZWFybHksIHdlIGRvIGhhdmUgc2V2ZXJhbCBkYXRlIG9wdGlv
bnM6IHNvIEkgd2FudGVkIHRvIGdpdmUgeW91IGEgY2hvaWNlIHRvIHZvdGUsIHN1Y2ggdGhhdCB3
ZSBlbmQgdXAgd2l0aCBhIGRhdGUgdGhhdCB3b3JrcyBiZXN0IGZvciB5b3UNCg0KTm90ZSB0aGF0
IHRoZSBMaW51eCBGb3VuZGF0aW9uIGV2ZW50IHNjaGVkdWxlIGZvciBuZXh0IHllYXIgaXMgVkVS
WSBkaWZmZXJlbnQgZnJvbSB0aGF0IG9mIHBhc3QgeWVhcnMuIE9wZW4gU291cmNlIFN1bW1pdCBO
QSB3aWxsIGJlIGluIHRoZSB3ZWVrIG9mIEp1bmUgMjJuZCBhbmQgdGh1cyB3ZSBhcmUgbm90IGNv
bnNpZGVyaW5nIGFuIGV2ZW50IDEgd2VlayBiZWZvcmUgYW5kIDEgd2VlayBhZnRlci4NCg0KSSBk
aWQgYWRkIHRoZSB3ZWVrIHBvc3QgNHRoIG9mIEp1bHk6IHRoaXMgY291bGQgYmUgYSBwcm9ibGVt
IGZvciBzb21lIHBlb3BsZSBpbiB0aGUgVVMsIGJ1dCBJIGxlZnQgdGhlIHNsb3QgaW4gcmVnYXJk
bGVzcy4gDQoNClRoZSBwb2xsIGlzIGF0IGh0dHBzOi8vZG9jcy5nb29nbGUuY29tL2Zvcm1zL2Qv
ZS8xRkFJcFFMU2Rfa0IydzVYZ1c2YU5xa25WXzdCaDk2aEdIRGFzM0pXZFl1WFFXcFRFV0ZuNThh
Zy92aWV3Zm9ybSBhbmQgY2xvc2VzIFdlZG5lc2RheSwgU2VwdGVtYmVyIDExDQoNCkJlc3QgUmVn
YXJkcw0KTGFycw0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 14:50:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 14:50:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5WcM-0003dz-EL; Wed, 04 Sep 2019 14:50:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5WcL-0003dt-MF
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 14:50:41 +0000
X-Inumbo-ID: 5b52b7f8-cf23-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 5b52b7f8-cf23-11e9-b76c-bc764e2007e4;
 Wed, 04 Sep 2019 14:50:38 +0000 (UTC)
IronPort-SDR: DRsc1pe2jiT8RgtH0L+vxsDhtBv9ZhMOI/xpz+6uCfAkF+bjiHDXLRjA4YK1xiSV9wC++Ng0lE
 DMgHFK0tiq8g==
IronPort-PHdr: =?us-ascii?q?9a23=3AuDOUsRIHXD5nlrMKvNmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgeKfrxwZ3uMQTl6Ol3ixeRBMOHsqgC0rWL+P+wEUU7or+5+EgYd5JNUx?=
 =?us-ascii?q?JXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQ?=
 =?us-ascii?q?viPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCejbb9oMRm7rwXcusYUjIZhN6081g?=
 =?us-ascii?q?bHrnxUdupM2GhmP0iTnxHy5sex+J5s7SFdsO8/+sBDTKv3Yb02QaRXAzo6PW?=
 =?us-ascii?q?814tbrtQTYQguU+nQcSGQWnQFWDAXD8Rr3Q43+sir+tup6xSmaIcj7Rq06VD?=
 =?us-ascii?q?i+86tmTgLjhSEaPDA77W7XkNR9gqJFrhy8qRJxwInabZqJOPZiZK7RYckXSX?=
 =?us-ascii?q?ZdUstXSidPApm8b4wKD+cZI+tYqJL9p0cPrRu4GAKiAv7vyidVhnTr2qA1z+?=
 =?us-ascii?q?MhERra3AwhGdICqnDUrMjtNKcPSu260LLIwS/bb/NLwjjx8pLIchc4rPyKQL?=
 =?us-ascii?q?l+ctLRxFEyGw7Kk1mcs4/oMjOP2ugTrWSW7fBsWOy3h2I6pAx9vyKjy8Qsh4?=
 =?us-ascii?q?XTmI4YxF7J+T9kzIs6O9G1TlNwb8S+H5tKrS6aMpN7QsYlQ251pik30qYGuZ?=
 =?us-ascii?q?unfCgSz5Qn2gLfZ+SHc4eW5hLjU/6cISl9hH1/ebK/gwy+/lS7yuHmTsm0zU?=
 =?us-ascii?q?1FojBfktnLrnwN1hrT5dabSvZl40us1iuD2xrQ5+xEO0w4i7TXJpw7zrM+jp?=
 =?us-ascii?q?YTtF7MHi7ymEX4lq+WcUAk9/C05OTgebXmup6cN4luhgH6L6QugtG/DP8kPQ?=
 =?us-ascii?q?gVRWSb4fm826b58U3jR7VGluc2nbXBsJDGOcQboba0AwpU0oYl6ha/CCym3M?=
 =?us-ascii?q?0FknYZMlJKZhaHgpPtO1HPO/D4Eey/j06jkTh1wfDKJLrhAo/CLnLbirfuYa?=
 =?us-ascii?q?5961JAyAo01d1f+ZZUBascL/3rQEDxssHXDgUnPAy12eroE89y2Z4ZWWKOH6?=
 =?us-ascii?q?+UK7jSsUOV5u0yOeWDfpMauC3nJ/g4//7hlmU1mUUaffrh4ZxCbXG+H/N9Zk?=
 =?us-ascii?q?mUf3foqtMACnsR+BozSqrtklLRfyRUYiOZWLkg5zdzLJ++EM+XTYe2nL2Hmi?=
 =?us-ascii?q?OmBoB+bXsAEk2GV23vIdbXE8wQYT6fd5cy2gcPUqKsHtcs?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BbBQDdzm9d/wPjVY1lHgEGBwaBZ4M?=
 =?us-ascii?q?FUzIqjR2JHY41i2IJAQEBKREBAgEBhD+CVzgTAgMIAQEFAQEBAQEGBAFshS4?=
 =?us-ascii?q?MgjoigxxST4ECgyIBgg6rGjOFSoM5gUmBNIcfhjE/gRGCXXOKJwSMT4k+lhc?=
 =?us-ascii?q?HgiJiBIYQjV8ngyOVRwGidIUpOCGBWDMag18Jgg4BNheLSYJcPQEBMYEGAQG?=
 =?us-ascii?q?OcwEB?=
X-IPAS-Result: =?us-ascii?q?A2BbBQDdzm9d/wPjVY1lHgEGBwaBZ4MFUzIqjR2JHY41i?=
 =?us-ascii?q?2IJAQEBKREBAgEBhD+CVzgTAgMIAQEFAQEBAQEGBAFshS4MgjoigxxST4ECg?=
 =?us-ascii?q?yIBgg6rGjOFSoM5gUmBNIcfhjE/gRGCXXOKJwSMT4k+lhcHgiJiBIYQjV8ng?=
 =?us-ascii?q?yOVRwGidIUpOCGBWDMag18Jgg4BNheLSYJcPQEBMYEGAQGOcwEB?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4698951"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 17:50:36 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id A9E851A60197;
 Wed,  4 Sep 2019 17:50:35 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id OeoQWRuH4Ib7; Wed,  4 Sep 2019 17:50:35 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 8EEB41A601AD;
 Wed,  4 Sep 2019 17:50:35 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id AwDEM5jQuZU3; Wed,  4 Sep 2019 17:50:35 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 6D23D1A60197;
 Wed,  4 Sep 2019 17:50:35 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 17:50:32 +0300
Message-Id: <20190904145032.6283-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Enable fcntl() function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBlbmFibGVzIGFuZCBhZGFwdCB0aGUgZXhpc3RpbmcgZmNudGwoKSBpbXBsZW1l
bnRhdGlvbiB3aGljaCB3YXMKcHJldmlvdXNseSBpbXBvcnRlZCBmcm9tIE9Tdi4gQmVzaWRlIHRo
YXQsIGl0IGFsc28gaGFuZGxlcyBGX0RVUEZEX0NMT0VYRUMKY2FzZSwgd2hpY2ggaXMgaGVhdmls
eSB1c2VkIGJ5IFB5dGhvbiAzIGludGVycHJldGVyLgoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1
cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvdmZzY29yZS9leHBvcnRzeW1zLnVr
ICAgICAgICAgIHwgIDEgKwogbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaCB8ICA0
ICsrKwogbGliL3Zmc2NvcmUvbWFpbi5jICAgICAgICAgICAgICAgICB8IDQxICsrKysrKysrKysr
KysrKysrKystLS0tLS0tLS0tLQogbGliL3Zmc2NvcmUvc3lzY2FsbHMuYyAgICAgICAgICAgICB8
ICAyICsrCiA0IGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgYi9saWIvdmZzY29yZS9l
eHBvcnRzeW1zLnVrCmluZGV4IDgyMmU2ZWNjLi5lM2Q2NzIzYSAxMDA2NDQKLS0tIGEvbGliL3Zm
c2NvcmUvZXhwb3J0c3ltcy51aworKysgYi9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrCkBAIC03
OCwzICs3OCw0IEBAIHVrX3N5c2NhbGxfd3JpdGV2CiBkZW50cnlfYWxsb2MKIGRyZWxlCiB2cmVs
ZQorZmNudGwKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgg
Yi9saWIvdmZzY29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCmluZGV4IDA1NDM0ZGZlLi5jNjk4
MjAxZCAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaAorKysg
Yi9saWIvdmZzY29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCkBAIC01OSw4ICs1OSwxMiBAQCBz
dHJ1Y3QgdmZzY29yZV9maWxlIHsKIAl2b2lkCQkqZl9kYXRhOyAgICAgICAgLyogZmlsZSBkZXNj
cmlwdG9yIHNwZWNpZmljIGRhdGEgKi8KIAlpbnQJCWZfdmZzX2ZsYWdzOyAgICAvKiBpbnRlcm5h
bCBpbXBsZW1lbnRhdGlvbiBmbGFncyAqLwogCXN0cnVjdCBkZW50cnkgICAqZl9kZW50cnk7CisJ
c3RydWN0IHVrX211dGV4IGZfbG9jazsKIH07CiAKKyNkZWZpbmUgRkRfTE9DSyhmcCkgICAgICAg
dWtfbXV0ZXhfbG9jaygmKGZwLT5mX2xvY2spKQorI2RlZmluZSBGRF9VTkxPQ0soZnApICAgICB1
a19tdXRleF91bmxvY2soJihmcC0+Zl9sb2NrKSkKKwogaW50IHZmc2NvcmVfYWxsb2NfZmQodm9p
ZCk7CiBpbnQgdmZzY29yZV9wdXRfZmQoaW50IGZkKTsKIGludCB2ZnNjb3JlX2luc3RhbGxfZmQo
aW50IGZkLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmaWxlKTsKZGlmZiAtLWdpdCBhL2xpYi92ZnNj
b3JlL21haW4uYyBiL2xpYi92ZnNjb3JlL21haW4uYwppbmRleCA0NDk4ODExZC4uOTI1Y2U3NjIg
MTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL21haW4uYworKysgYi9saWIvdmZzY29yZS9tYWluLmMK
QEAgLTE0MjcsMTcgKzE0MjcsMjIgQEAgaW50IGR1cDIoaW50IG9sZGZkLCBpbnQgbmV3ZmQpCiAg
Ki8KICNkZWZpbmUgU0VURkwgKE9fQVBQRU5EIHwgT19BU1lOQyB8IE9fRElSRUNUIHwgT19OT0FU
SU1FIHwgT19OT05CTE9DSykKIAotI2lmIDAKIFVLX1RSQUNFUE9JTlQodHJhY2VfdmZzX2ZjbnRs
LCAiJWQgJWQgMHgleCIsIGludCwgaW50LCBpbnQpOwogVUtfVFJBQ0VQT0lOVCh0cmFjZV92ZnNf
ZmNudGxfcmV0LCAiXCIlc1wiIiwgaW50KTsKIFVLX1RSQUNFUE9JTlQodHJhY2VfdmZzX2ZjbnRs
X2VyciwgIiVkIiwgaW50KTsKIAotaW50IGZjbnRsKGludCBmZCwgaW50IGNtZCwgaW50IGFyZykK
K2ludCBmY250bChpbnQgZmQsIGludCBjbWQsIC4uLikKIHsKKwlpbnQgYXJnOworCXZhX2xpc3Qg
YXA7CiAJc3RydWN0IHZmc2NvcmVfZmlsZSAqZnA7CiAJaW50IHJldCA9IDAsIGVycm9yOwogCWlu
dCB0bXA7CiAKKwl2YV9zdGFydChhcCwgY21kKTsKKwlhcmcgPSB2YV9hcmcoYXAsIGludCk7CisJ
dmFfZW5kKGFwKTsKKwogCXRyYWNlX3Zmc19mY250bChmZCwgY21kLCBhcmcpOwogCWVycm9yID0g
ZmdldChmZCwgJmZwKTsKIAlpZiAoZXJyb3IpCkBAIC0xNDUyLDcgKzE0NTcsNyBAQCBpbnQgZmNu
dGwoaW50IGZkLCBpbnQgY21kLCBpbnQgYXJnKQogCS8vIGlnbm9yZWQgaW4gT1N2IGFueXdheSwg
YXMgaXQgZG9lc24ndCBzdXBwb3J0IGV4ZWMoKS4KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRl9E
VVBGRDoKLQkJZXJyb3IgPSBfZmRhbGxvYyhmcCwgJnJldCwgYXJnKTsKKwkJZXJyb3IgPSBmZGFs
bG9jKGZwLCAmcmV0KTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBvdXRfZXJybm87CiAJCWJyZWFr
OwpAQCAtMTQ2OSwzNSArMTQ3NCw0MiBAQCBpbnQgZmNudGwoaW50IGZkLCBpbnQgY21kLCBpbnQg
YXJnKQogCQkvLyBBcyBleHBsYWluZWQgYWJvdmUsIHRoZSBPX0NMT0VYRUMgc2hvdWxkIGhhdmUg
YmVlbiBpbiBmX2ZsYWdzLAogCQkvLyBhbmQgc2hvdWxkbid0IGJlIHJldHVybmVkLiBMaW51eCBh
bHdheXMgcmV0dXJucyAwMTAwMDAwICgidGhlCiAJCS8vIGZsYWcgZm9ybWVybHkga25vd24gYXMg
T19MQVJHRUZJTEUpIHNvIGxldCdzIGRvIGl0IHRvby4KLQkJcmV0ID0gKG9mbGFncyhmcC0+Zl9m
bGFncykgJiB+T19DTE9FWEVDKSB8IDAxMDAwMDA7CisJCXJldCA9ICh2ZnNjb3JlX29mbGFncyhm
cC0+Zl9mbGFncykgJiB+T19DTE9FWEVDKSB8IDAxMDAwMDA7CiAJCWJyZWFrOwogCWNhc2UgRl9T
RVRGTDoKIAkJRkRfTE9DSyhmcCk7Ci0JCWZwLT5mX2ZsYWdzID0gZmZsYWdzKChvZmxhZ3MoZnAt
PmZfZmxhZ3MpICYgflNFVEZMKSB8CisJCWZwLT5mX2ZsYWdzID0gdmZzY29yZV9mZmxhZ3MoKHZm
c2NvcmVfb2ZsYWdzKGZwLT5mX2ZsYWdzKSAmIH5TRVRGTCkgfAogCQkJCShhcmcgJiBTRVRGTCkp
OwogCQlGRF9VTkxPQ0soZnApOwogCisjaWYgZGVmaW5lZChGSU9OQklPKSAmJiBkZWZpbmVkKEZJ
T0FTWU5DKQogCQkvKiBTeW5jIG5vbmJsb2NraW5nL2FzeW5jIHN0YXRlIHdpdGggZmlsZSBmbGFn
cyAqLwogCQl0bXAgPSBmcC0+Zl9mbGFncyAmIEZOT05CTE9DSzsKLQkJZnAtPmlvY3RsKEZJT05C
SU8sICZ0bXApOworCQl2ZnNfaW9jdGwoZnAsIEZJT05CSU8sICZ0bXApOwogCQl0bXAgPSBmcC0+
Zl9mbGFncyAmIEZBU1lOQzsKLQkJZnAtPmlvY3RsKEZJT0FTWU5DLCAmdG1wKTsKLQorCQl2ZnNf
aW9jdGwoZnAsIEZJT0FTWU5DLCAmdG1wKTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIEZfRFVQ
RkRfQ0xPRVhFQzoKKwkJZXJyb3IgPSBmZGFsbG9jKGZwLCAmcmV0KTsKKwkJaWYgKGVycm9yKQor
CQkJZ290byBvdXRfZXJybm87CisJCWZwLT5mX2ZsYWdzIHw9IE9fQ0xPRVhFQzsKIAkJYnJlYWs7
CiAJY2FzZSBGX1NFVExLOgotCQlXQVJOX09OQ0UoImZjbnRsKEZfU0VUTEspIHN0dWJiZWRcbiIp
OworCQl1a19wcl93YXJuKCJmY250bChGX1NFVExLKSBzdHViYmVkXG4iKTsKIAkJYnJlYWs7CiAJ
Y2FzZSBGX0dFVExLOgotCQlXQVJOX09OQ0UoImZjbnRsKEZfR0VUTEspIHN0dWJiZWRcbiIpOwor
CQl1a19wcl93YXJuKCJmY250bChGX0dFVExLKSBzdHViYmVkXG4iKTsKIAkJYnJlYWs7CiAJY2Fz
ZSBGX1NFVExLVzoKLQkJV0FSTl9PTkNFKCJmY250bChGX1NFVExLVykgc3R1YmJlZFxuIik7CisJ
CXVrX3ByX3dhcm4oImZjbnRsKEZfU0VUTEtXKSBzdHViYmVkXG4iKTsKIAkJYnJlYWs7CiAJY2Fz
ZSBGX1NFVE9XTjoKLQkJV0FSTl9PTkNFKCJmY250bChGX1NFVE9XTikgc3R1YmJlZFxuIik7CisJ
CXVrX3ByX3dhcm4oImZjbnRsKEZfU0VUT1dOKSBzdHViYmVkXG4iKTsKIAkJYnJlYWs7CiAJZGVm
YXVsdDoKLQkJa3ByaW50ZigidW5zdXBwb3J0ZWQgZmNudGwgY21kIDB4JXhcbiIsIGNtZCk7CisJ
CXVrX3ByX2VycigidW5zdXBwb3J0ZWQgZmNudGwgY21kIDB4JXhcbiIsIGNtZCk7CiAJCWVycm9y
ID0gRUlOVkFMOwogCX0KIApAQCAtMTUwNywxMiArMTUxOSwxMSBAQCBpbnQgZmNudGwoaW50IGZk
LCBpbnQgY21kLCBpbnQgYXJnKQogCXRyYWNlX3Zmc19mY250bF9yZXQocmV0KTsKIAlyZXR1cm4g
cmV0OwogCi0Jb3V0X2Vycm5vOgorb3V0X2Vycm5vOgogCXRyYWNlX3Zmc19mY250bF9lcnIoZXJy
b3IpOwogCWVycm5vID0gZXJyb3I7CiAJcmV0dXJuIC0xOwogfQotI2VuZGlmCiAKIFVLX1RSQUNF
UE9JTlQodHJhY2VfdmZzX2FjY2VzcywgIlwiJXNcIiAwJTBvIiwgY29uc3QgY2hhciosIGludCk7
CiBVS19UUkFDRVBPSU5UKHRyYWNlX3Zmc19hY2Nlc3NfcmV0LCAiIik7CmRpZmYgLS1naXQgYS9s
aWIvdmZzY29yZS9zeXNjYWxscy5jIGIvbGliL3Zmc2NvcmUvc3lzY2FsbHMuYwppbmRleCBmOTY2
NmM0Yy4uNTRhZGMyZDIgMTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMKKysrIGIv
bGliL3Zmc2NvcmUvc3lzY2FsbHMuYwpAQCAtMjEwLDYgKzIxMCw4IEBAIHN5c19vcGVuKGNoYXIg
KnBhdGgsIGludCBmbGFncywgbW9kZV90IG1vZGUsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKipmcHAp
CiAJZnAtPmZfZGVudHJ5ID0gZHA7CiAJZHAgPSBOVUxMOwogCisJdWtfbXV0ZXhfaW5pdCgmZnAt
PmZfbG9jayk7CisKIAllcnJvciA9IFZPUF9PUEVOKHZwLCBmcCk7CiAJaWYgKGVycm9yKSB7CiAJ
CXZuX3VubG9jayh2cCk7Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 14:59:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 14:59:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Wl5-0003vE-FJ; Wed, 04 Sep 2019 14:59:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5Wl4-0003v8-1U
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 14:59:42 +0000
X-Inumbo-ID: 9eb2c938-cf24-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 9eb2c938-cf24-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 14:59:40 +0000 (UTC)
IronPort-SDR: eaq0TVlUAFt7tkuoDhJWkdQ6LGrG+uFGpbfGb/nmNG+dKbhHgF0a158/oZbzbiOhzKq6m28cPi
 QW18SzC5GWhg==
IronPort-PHdr: =?us-ascii?q?9a23=3AvCjSYhC2vHdUrfLnrTjEUyQJP3N1i/DPJgcQr6?=
 =?us-ascii?q?AfoPdwSPT4ocbcNUDSrc9gkEXOFd2Cra4d0ayP7P2rBj1IyK3CmUhKSIZLWR?=
 =?us-ascii?q?4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBx?=
 =?us-ascii?q?rwKxd+KPjrFY7OlcS30P2594HObwlSizexfK1+IA+roQjTtsQajolvJ6IswR?=
 =?us-ascii?q?bVv3VEfPhby3l1LlyJhRb84cmw/J9n8ytOvv8q6tBNX6bncakmVLJUFDspPX?=
 =?us-ascii?q?w7683trhnDUBCA5mAAXWUMkxpHGBbK4RfnVZrsqCT6t+592C6HPc3qSL0/RD?=
 =?us-ascii?q?qv47t3RBLulSwKMSMy/mPKhcxqlK9VoAyvqQFxzYDXZ4+YL+Zycr/HcN8GX2?=
 =?us-ascii?q?dNQtpdWipcCY28dYsPCO8BMP5Goon6vFsOsRq+BQ+xD+3p1z9InmL21rA93u?=
 =?us-ascii?q?s9FgHGxxAgH9MIsHjOqNX1Kb8SUf2uwabU1jXPdetW2Srm54TSaBAhpuiBUL?=
 =?us-ascii?q?RtesTS0UkiDx7Jg1qNpYD/PD6Y1v4Bv3aF4+diT+6ihXYrpxx+rzSy3MshiY?=
 =?us-ascii?q?nEipgLxl3K+yh12ps5KNKmREN9fNWqCoFftzuAOItzWs4iRmZotzskxbAeop?=
 =?us-ascii?q?67eTQKyIwgxx7Cd/yLa4iI7QznVOaWOTp4mndld6i+hxa260Sv1vb8WtOs0F?=
 =?us-ascii?q?ZXtSVJiMPMtncV2xzS7MiIVOd981+81TuAygzf8OJJLEAumabFNZIswKQ8m5?=
 =?us-ascii?q?QLvUTGBCD2mUH2jKGMdkUj/+il8/joYrL9pp+ANo90jBvyMqAzmsynHOQ1KR?=
 =?us-ascii?q?QBX3OB9eSkyb3s5lf1QK9NjvEuiKnWrIjaJdgHpq6+GwJV14cj6xC+Dzehy9?=
 =?us-ascii?q?QUhGQII0xbeB2Zi4jkIFXOIPHjDfejmFSgijhqyO7APrH7BZXNNHfDmq/7fb?=
 =?us-ascii?q?lh805c1BYzzddH6pJKDrEOOu/8VVfru9zeExA5KRK7w+f9BNpmzIwRRGWPAq?=
 =?us-ascii?q?6EMK7Jql+I+v8vLPSWaIAPpDn9MOIp5+P2jXAig1MdZ66pjtMrbyW9H/JnJF?=
 =?us-ascii?q?7cbXfyj9MpFWYRohF4XOHszlqYXm19fXG3Cok7/S06DsqCEJ/eDtSmh6ed3S?=
 =?us-ascii?q?H9GoBOe0hNERaUDH2ubYLSCKREUz6bPsI0ym9MbrOmUYJ0jRw=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BxBADLz29d/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUzIqjR2jMwkBAQEpEQECAQGEP4JXOBMCAwgBAQUBAQEBAQYEAWyFLgy?=
 =?us-ascii?q?COiKDbk+BAoMiAYIOq1WFSoM5gUmBNIcfhjE/iXKFFgSWDZYXB4IiYgSGEI1?=
 =?us-ascii?q?fJ4I0b5VIjy+YbjghgVgzGoNfCYIOAYwWglw9AQExgQYBAY5zAQE?=
X-IPAS-Result: =?us-ascii?q?A2BxBADLz29d/wPjVY1lHQEBBQEHBQGBZ4MFUzIqjR2jM?=
 =?us-ascii?q?wkBAQEpEQECAQGEP4JXOBMCAwgBAQUBAQEBAQYEAWyFLgyCOiKDbk+BAoMiA?=
 =?us-ascii?q?YIOq1WFSoM5gUmBNIcfhjE/iXKFFgSWDZYXB4IiYgSGEI1fJ4I0b5VIjy+Yb?=
 =?us-ascii?q?jghgVgzGoNfCYIOAYwWglw9AQExgQYBAY5zAQE?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4698963"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 17:59:39 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2DF331A60197;
 Wed,  4 Sep 2019 17:59:39 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id mc8Jdqq48DuK; Wed,  4 Sep 2019 17:59:39 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 12F591A601B0;
 Wed,  4 Sep 2019 17:59:39 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 336XRo_0vDfX; Wed,  4 Sep 2019 17:59:39 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id F11B81A60197;
 Wed,  4 Sep 2019 17:59:38 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 17:59:36 +0300
Message-Id: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Update fcntl() related
 definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2luY2Ugd2UgYXJlIHVzaW5nIHRoZSBmY250bCgpIGltcGxlbWVudGF0aW9uIGluIHZmc2NvcmUs
IHdlIGRvbid0IHVzZSBuZXdsaWIncwphbnkgbW9yZS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgc29t
ZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQgYnkgZmNudGwoKSBhbmQgdGhhdAp3ZXJlIGNvcGllZCBm
cm9tIG11c2wsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgb25lcyBmcm9tIGZjbnRsLmguCgpTaWdu
ZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIE1ha2Vm
aWxlLnVrICAgICB8ICAyICstCiBpbmNsdWRlL2ZjbnRsLmggfCAxMyArKysrKysrKysrLS0tCiAy
IGZpbGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awppbmRleCBjMDJjMmYwLi4wMWRhNzI0IDEw
MDY0NAotLS0gYS9NYWtlZmlsZS51aworKysgYi9NYWtlZmlsZS51awpAQCAtNzkyLDcgKzc5Miw3
IEBAIExJQk5FV0xJQkNfU1JDUy15ICs9ICQoTElCTkVXTElCX0xJQkMpL3N0cmluZy93Y3NkdXAu
YwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgTmV3bGliL2xpYmMgY29kZSAtLSBzeXNjYWxs
cwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLUxJQk5FV0xJQkNfU1JDUy15ICs9ICQoTElCTkVX
TElCX0xJQkMpL3N5c2NhbGxzL3N5c2ZjbnRsLmMKKyNMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJ
Qk5FV0xJQl9MSUJDKS9zeXNjYWxscy9zeXNmY250bC5jCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCiAjIE5ld2xpYi9saWJjIGNvZGUgLS0gdGltZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9mY250
bC5oIGIvaW5jbHVkZS9mY250bC5oCmluZGV4IDI1YTQ4MDguLjdhMzUwNTIgMTAwNjQ0Ci0tLSBh
L2luY2x1ZGUvZmNudGwuaAorKysgYi9pbmNsdWRlL2ZjbnRsLmgKQEAgLTExLDE1ICsxMSwyMiBA
QAogI2RlZmluZSBPX0RJUkVDVE9SWSAwMjAwMDAwCiAjZGVmaW5lIE9fQ0xPRVhFQyAgMDIwMDAw
MDAKICNkZWZpbmUgT19EU1lOQyAgICAgIDAxMDAwMAotI2VuZGlmCi0KLSNpZiAoKGRlZmluZWQg
Q09ORklHX0FSQ0hfQVJNXzY0KSB8fCAoZGVmaW5lZCBDT05GSUdfQVJDSF9BUk1fMzIpKQorI2Rl
ZmluZSBPX0FTWU5DICAgICAgMDIwMDAwCisjZGVmaW5lIE9fRElSRUNUICAgICAwNDAwMDAKKyNk
ZWZpbmUgT19OT0FUSU1FICAwMTAwMDAwMAorI2VsaWYgKChkZWZpbmVkIENPTkZJR19BUkNIX0FS
TV82NCkgfHwgKGRlZmluZWQgQ09ORklHX0FSQ0hfQVJNXzMyKSkKICNkZWZpbmUgT19OT0ZPTExP
VyAgMDEwMDAwMAogI2RlZmluZSBPX0RJUkVDVE9SWSAgMDQwMDAwCiAjZGVmaW5lIE9fQ0xPRVhF
QyAgMDIwMDAwMDAKICNkZWZpbmUgT19EU1lOQyAgICAgIDAxMDAwMAorI2RlZmluZSBPX0FTWU5D
ICAgICAgMDIwMDAwCisjZGVmaW5lIE9fRElSRUNUICAgIDAyMDAwMDAKKyNkZWZpbmUgT19OT0FU
SU1FICAwMTAwMDAwMAogI2VuZGlmCiAKKyNkZWZpbmUgRklPTkJJTyAgICAgIDB4NTQyMQorI2Rl
ZmluZSBGSU9BU1lOQyAgICAgMHg1NDUyCisKIAogLyogR2xpYmMgZG9lcyBub3QgcHJvdmlkZSBL
RUVQX1NJWkUgYW5kIFBVTkNIX0hPTEUgYW55bW9yZS4gSW5zdGVhZCBpdAogICogaW5jbHVkZXMg
bGludXgvZmFsbG9jLmguCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 15:39:42 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 15:39:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5XNk-0007PP-27; Wed, 04 Sep 2019 15:39:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5XNj-0007PK-03
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 15:39:39 +0000
X-Inumbo-ID: 32bcc8c2-cf2a-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 32bcc8c2-cf2a-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 15:39:36 +0000 (UTC)
IronPort-SDR: wVUzVkDZHgUpeOSR/XY0vJQFX/yNaXDQhafQQedv//4AXfBkA0qvGqpiY5Z8hOwNCqIptqpoZw
 q/Wk8TGCItLw==
IronPort-PHdr: =?us-ascii?q?9a23=3AzCovzxwyBRP74SnXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2+kQIJqq85mqBkHD//Il1AaPAdyBrasb1qGG7OjJYi8p2d65qncMcZhBBV?=
 =?us-ascii?q?cuqP49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx?=
 =?us-ascii?q?7xKRR6JvjvGo7Vks+7y/2+94fcbglVmjaxe65+IRe2oAnetcQbg5ZpJ7osxB?=
 =?us-ascii?q?fOvnZGYfldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2?=
 =?us-ascii?q?Yu5M32rhbDVheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RS?=
 =?us-ascii?q?iu4qF2QxLulSwJNSM28HvPh8JwkqxVvRyvqR94zYPPfI2ZKOBzcr/HcN8GWW?=
 =?us-ascii?q?ZMWNtaWSxbAoO7aosCF/QMPeFDr4nhplsOqwa1Cw+xBOP31z9Dm3j70rE90+?=
 =?us-ascii?q?Q6DQHG3QogE8gKsHTJtNX1KbwfXvyuzKXS1TXDcuhZ1S3n6IjPax0sp+yHU7?=
 =?us-ascii?q?FoccfJ1EUiGB7Jgk+TpIHlJT+ZyPoBvmqB4+duTe6jlmEqpxxrrjWsxsogkJ?=
 =?us-ascii?q?fFi4wbx1ze6Cl0z5g5KNulQ0Bhe9GkCoFftySCOotzRcMtXn9ntT4hyr0DpZ?=
 =?us-ascii?q?67ZC8KyIk7xxLHa/yIbYyI4hX7WeaPJDd3nnNleLalixmu6kis0PX8VtSv31?=
 =?us-ascii?q?pQtCpFlcHAtnEL1xPN9siKUuZx80i81TqV1A3e6vtILV4qmafZMZIszKY8lp?=
 =?us-ascii?q?8JvkTCGi/2ll/2jKiTdkg85ueo7P/nYqnnpp+aLYN0jhz+MrwzmsGkHes4KR?=
 =?us-ascii?q?ICX3CG+eunzrHj50r5TK1QjvIqiqnZrIzaJcMDq668Ag9V1Icj6xGkDzu/zd?=
 =?us-ascii?q?sXg2cHI0xBeB+ci4jpOkrOIOzjDfuljFWjjjFry+rBPr37DZXHNmLDn6v5fb?=
 =?us-ascii?q?Zh905czxI+zc5b551OF74OOOj8Wknsu9zCEBA5Mha4zP39B9pg0YMeWH+PD7?=
 =?us-ascii?q?SCMKPOrF+H+/gjLPOQa48Oojr9NuAl6OX0gX8jnl9ONZWuiJ4WbnG/BbFqLl?=
 =?us-ascii?q?uUZVLog8wdCiEaswx4S/bl23OYVjsGTHGpQ6M6rhUmEJ/uWYzEXZyshvqFwT?=
 =?us-ascii?q?+mNpZNIHhbABaWFiG7JM2/R/4QZXfKcYdamTseWO35Rg=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BbBQCI2W9d/wPjVY1mHgEGBwaBZ4M?=
 =?us-ascii?q?FUzIqjR2JHI41i2IJAQEBKREBAgEBhD+CVzgTAgMIAQEFAQEBAQEGBAFshS4?=
 =?us-ascii?q?MgjoigxxST4ECgyIBgg6rVjOFSoMtgUmBNIcfhjE/gRGCXXOKJwSMT4k+lhc?=
 =?us-ascii?q?HgiJiBIYQjV8ngyOVSKJ0hSk4IYFYMxqDXwmCDgE2F4tJglw9AQExgQYBAY5?=
 =?us-ascii?q?zAQE?=
X-IPAS-Result: =?us-ascii?q?A2BbBQCI2W9d/wPjVY1mHgEGBwaBZ4MFUzIqjR2JHI41i?=
 =?us-ascii?q?2IJAQEBKREBAgEBhD+CVzgTAgMIAQEFAQEBAQEGBAFshS4MgjoigxxST4ECg?=
 =?us-ascii?q?yIBgg6rVjOFSoMtgUmBNIcfhjE/gRGCXXOKJwSMT4k+lhcHgiJiBIYQjV8ng?=
 =?us-ascii?q?yOVSKJ0hSk4IYFYMxqDXwmCDgE2F4tJglw9AQExgQYBAY5zAQE?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4699057"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 18:39:35 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id D0CDD1A60197;
 Wed,  4 Sep 2019 18:39:34 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id GdOXbS7J-G1b; Wed,  4 Sep 2019 18:39:34 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B75461A601AD;
 Wed,  4 Sep 2019 18:39:34 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id P5uJJn9P5w2D; Wed,  4 Sep 2019 18:39:34 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 97FE11A60197;
 Wed,  4 Sep 2019 18:39:34 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 18:39:32 +0300
Message-Id: <20190904153932.6541-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v2] lib/vfscore: Enable fcntl()
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBlbmFibGVzIGFuZCBhZGFwdCB0aGUgZXhpc3RpbmcgZmNudGwoKSBpbXBsZW1l
bnRhdGlvbiB3aGljaCB3YXMKcHJldmlvdXNseSBpbXBvcnRlZCBmcm9tIE9Tdi4gQmVzaWRlIHRo
YXQsIGl0IGFsc28gaGFuZGxlcyBGX0RVUEZEX0NMT0VYRUMKY2FzZSwgd2hpY2ggaXMgaGVhdmls
eSB1c2VkIGJ5IFB5dGhvbiAzIGludGVycHJldGVyLgoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1
cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvdmZzY29yZS9leHBvcnRzeW1zLnVr
ICAgICAgICAgIHwgIDEgKwogbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaCB8ICA0
ICsrKwogbGliL3Zmc2NvcmUvbWFpbi5jICAgICAgICAgICAgICAgICB8IDQxICsrKysrKysrKysr
KysrKysrKystLS0tLS0tLS0tLQogbGliL3Zmc2NvcmUvc3lzY2FsbHMuYyAgICAgICAgICAgICB8
ICAyICsrCiA0IGZpbGVzIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgYi9saWIvdmZzY29yZS9l
eHBvcnRzeW1zLnVrCmluZGV4IDgyMmU2ZWNjLi5lM2Q2NzIzYSAxMDA2NDQKLS0tIGEvbGliL3Zm
c2NvcmUvZXhwb3J0c3ltcy51aworKysgYi9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrCkBAIC03
OCwzICs3OCw0IEBAIHVrX3N5c2NhbGxfd3JpdGV2CiBkZW50cnlfYWxsb2MKIGRyZWxlCiB2cmVs
ZQorZmNudGwKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgg
Yi9saWIvdmZzY29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCmluZGV4IDUxZjA3OTFhLi4zNTRh
NDE0ZSAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaAorKysg
Yi9saWIvdmZzY29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCkBAIC01OSw4ICs1OSwxMiBAQCBz
dHJ1Y3QgdmZzY29yZV9maWxlIHsKIAl2b2lkCQkqZl9kYXRhOyAgICAgICAgLyogZmlsZSBkZXNj
cmlwdG9yIHNwZWNpZmljIGRhdGEgKi8KIAlpbnQJCWZfdmZzX2ZsYWdzOyAgICAvKiBpbnRlcm5h
bCBpbXBsZW1lbnRhdGlvbiBmbGFncyAqLwogCXN0cnVjdCBkZW50cnkgICAqZl9kZW50cnk7CisJ
c3RydWN0IHVrX211dGV4IGZfbG9jazsKIH07CiAKKyNkZWZpbmUgRkRfTE9DSyhmcCkgICAgICAg
dWtfbXV0ZXhfbG9jaygmKGZwLT5mX2xvY2spKQorI2RlZmluZSBGRF9VTkxPQ0soZnApICAgICB1
a19tdXRleF91bmxvY2soJihmcC0+Zl9sb2NrKSkKKwogaW50IHZmc2NvcmVfYWxsb2NfZmQodm9p
ZCk7CiB2b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCk7CiBpbnQgdmZzY29yZV9pbnN0YWxsX2Zk
KGludCBmZCwgc3RydWN0IHZmc2NvcmVfZmlsZSAqZmlsZSk7CmRpZmYgLS1naXQgYS9saWIvdmZz
Y29yZS9tYWluLmMgYi9saWIvdmZzY29yZS9tYWluLmMKaW5kZXggYmUwNTViNzguLjhkMGU0YjJj
IDEwMDY0NAotLS0gYS9saWIvdmZzY29yZS9tYWluLmMKKysrIGIvbGliL3Zmc2NvcmUvbWFpbi5j
CkBAIC0xNDI1LDE3ICsxNDI1LDIyIEBAIGludCBkdXAyKGludCBvbGRmZCwgaW50IG5ld2ZkKQog
ICovCiAjZGVmaW5lIFNFVEZMIChPX0FQUEVORCB8IE9fQVNZTkMgfCBPX0RJUkVDVCB8IE9fTk9B
VElNRSB8IE9fTk9OQkxPQ0spCiAKLSNpZiAwCiBVS19UUkFDRVBPSU5UKHRyYWNlX3Zmc19mY250
bCwgIiVkICVkIDB4JXgiLCBpbnQsIGludCwgaW50KTsKIFVLX1RSQUNFUE9JTlQodHJhY2VfdmZz
X2ZjbnRsX3JldCwgIlwiJXNcIiIsIGludCk7CiBVS19UUkFDRVBPSU5UKHRyYWNlX3Zmc19mY250
bF9lcnIsICIlZCIsIGludCk7CiAKLWludCBmY250bChpbnQgZmQsIGludCBjbWQsIGludCBhcmcp
CitpbnQgZmNudGwoaW50IGZkLCBpbnQgY21kLCAuLi4pCiB7CisJaW50IGFyZzsKKwl2YV9saXN0
IGFwOwogCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZwOwogCWludCByZXQgPSAwLCBlcnJvcjsKIAlp
bnQgdG1wOwogCisJdmFfc3RhcnQoYXAsIGNtZCk7CisJYXJnID0gdmFfYXJnKGFwLCBpbnQpOwor
CXZhX2VuZChhcCk7CisKIAl0cmFjZV92ZnNfZmNudGwoZmQsIGNtZCwgYXJnKTsKIAllcnJvciA9
IGZnZXQoZmQsICZmcCk7CiAJaWYgKGVycm9yKQpAQCAtMTQ1MCw3ICsxNDU1LDcgQEAgaW50IGZj
bnRsKGludCBmZCwgaW50IGNtZCwgaW50IGFyZykKIAkvLyBpZ25vcmVkIGluIE9TdiBhbnl3YXks
IGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCBleGVjKCkuCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEZf
RFVQRkQ6Ci0JCWVycm9yID0gX2ZkYWxsb2MoZnAsICZyZXQsIGFyZyk7CisJCWVycm9yID0gZmRh
bGxvYyhmcCwgJnJldCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0X2Vycm5vOwogCQlicmVh
azsKQEAgLTE0NjcsMzUgKzE0NzIsNDIgQEAgaW50IGZjbnRsKGludCBmZCwgaW50IGNtZCwgaW50
IGFyZykKIAkJLy8gQXMgZXhwbGFpbmVkIGFib3ZlLCB0aGUgT19DTE9FWEVDIHNob3VsZCBoYXZl
IGJlZW4gaW4gZl9mbGFncywKIAkJLy8gYW5kIHNob3VsZG4ndCBiZSByZXR1cm5lZC4gTGludXgg
YWx3YXlzIHJldHVybnMgMDEwMDAwMCAoInRoZQogCQkvLyBmbGFnIGZvcm1lcmx5IGtub3duIGFz
IE9fTEFSR0VGSUxFKSBzbyBsZXQncyBkbyBpdCB0b28uCi0JCXJldCA9IChvZmxhZ3MoZnAtPmZf
ZmxhZ3MpICYgfk9fQ0xPRVhFQykgfCAwMTAwMDAwOworCQlyZXQgPSAodmZzY29yZV9vZmxhZ3Mo
ZnAtPmZfZmxhZ3MpICYgfk9fQ0xPRVhFQykgfCAwMTAwMDAwOwogCQlicmVhazsKIAljYXNlIEZf
U0VURkw6CiAJCUZEX0xPQ0soZnApOwotCQlmcC0+Zl9mbGFncyA9IGZmbGFncygob2ZsYWdzKGZw
LT5mX2ZsYWdzKSAmIH5TRVRGTCkgfAorCQlmcC0+Zl9mbGFncyA9IHZmc2NvcmVfZmZsYWdzKCh2
ZnNjb3JlX29mbGFncyhmcC0+Zl9mbGFncykgJiB+U0VURkwpIHwKIAkJCQkoYXJnICYgU0VURkwp
KTsKIAkJRkRfVU5MT0NLKGZwKTsKIAorI2lmIGRlZmluZWQoRklPTkJJTykgJiYgZGVmaW5lZChG
SU9BU1lOQykKIAkJLyogU3luYyBub25ibG9ja2luZy9hc3luYyBzdGF0ZSB3aXRoIGZpbGUgZmxh
Z3MgKi8KIAkJdG1wID0gZnAtPmZfZmxhZ3MgJiBGTk9OQkxPQ0s7Ci0JCWZwLT5pb2N0bChGSU9O
QklPLCAmdG1wKTsKKwkJdmZzX2lvY3RsKGZwLCBGSU9OQklPLCAmdG1wKTsKIAkJdG1wID0gZnAt
PmZfZmxhZ3MgJiBGQVNZTkM7Ci0JCWZwLT5pb2N0bChGSU9BU1lOQywgJnRtcCk7Ci0KKwkJdmZz
X2lvY3RsKGZwLCBGSU9BU1lOQywgJnRtcCk7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBGX0RV
UEZEX0NMT0VYRUM6CisJCWVycm9yID0gZmRhbGxvYyhmcCwgJnJldCk7CisJCWlmIChlcnJvcikK
KwkJCWdvdG8gb3V0X2Vycm5vOworCQlmcC0+Zl9mbGFncyB8PSBPX0NMT0VYRUM7CiAJCWJyZWFr
OwogCWNhc2UgRl9TRVRMSzoKLQkJV0FSTl9PTkNFKCJmY250bChGX1NFVExLKSBzdHViYmVkXG4i
KTsKKwkJdWtfcHJfd2FybigiZmNudGwoRl9TRVRMSykgc3R1YmJlZFxuIik7CiAJCWJyZWFrOwog
CWNhc2UgRl9HRVRMSzoKLQkJV0FSTl9PTkNFKCJmY250bChGX0dFVExLKSBzdHViYmVkXG4iKTsK
KwkJdWtfcHJfd2FybigiZmNudGwoRl9HRVRMSykgc3R1YmJlZFxuIik7CiAJCWJyZWFrOwogCWNh
c2UgRl9TRVRMS1c6Ci0JCVdBUk5fT05DRSgiZmNudGwoRl9TRVRMS1cpIHN0dWJiZWRcbiIpOwor
CQl1a19wcl93YXJuKCJmY250bChGX1NFVExLVykgc3R1YmJlZFxuIik7CiAJCWJyZWFrOwogCWNh
c2UgRl9TRVRPV046Ci0JCVdBUk5fT05DRSgiZmNudGwoRl9TRVRPV04pIHN0dWJiZWRcbiIpOwor
CQl1a19wcl93YXJuKCJmY250bChGX1NFVE9XTikgc3R1YmJlZFxuIik7CiAJCWJyZWFrOwogCWRl
ZmF1bHQ6Ci0JCWtwcmludGYoInVuc3VwcG9ydGVkIGZjbnRsIGNtZCAweCV4XG4iLCBjbWQpOwor
CQl1a19wcl9lcnIoInVuc3VwcG9ydGVkIGZjbnRsIGNtZCAweCV4XG4iLCBjbWQpOwogCQllcnJv
ciA9IEVJTlZBTDsKIAl9CiAKQEAgLTE1MDUsMTIgKzE1MTcsMTEgQEAgaW50IGZjbnRsKGludCBm
ZCwgaW50IGNtZCwgaW50IGFyZykKIAl0cmFjZV92ZnNfZmNudGxfcmV0KHJldCk7CiAJcmV0dXJu
IHJldDsKIAotCW91dF9lcnJubzoKK291dF9lcnJubzoKIAl0cmFjZV92ZnNfZmNudGxfZXJyKGVy
cm9yKTsKIAllcnJubyA9IGVycm9yOwogCXJldHVybiAtMTsKIH0KLSNlbmRpZgogCiBVS19UUkFD
RVBPSU5UKHRyYWNlX3Zmc19hY2Nlc3MsICJcIiVzXCIgMCUwbyIsIGNvbnN0IGNoYXIqLCBpbnQp
OwogVUtfVFJBQ0VQT0lOVCh0cmFjZV92ZnNfYWNjZXNzX3JldCwgIiIpOwpkaWZmIC0tZ2l0IGEv
bGliL3Zmc2NvcmUvc3lzY2FsbHMuYyBiL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMKaW5kZXggZjk2
NjZjNGMuLjU0YWRjMmQyIDEwMDY0NAotLS0gYS9saWIvdmZzY29yZS9zeXNjYWxscy5jCisrKyBi
L2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMKQEAgLTIxMCw2ICsyMTAsOCBAQCBzeXNfb3BlbihjaGFy
ICpwYXRoLCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgdmZzY29yZV9maWxlICoqZnBw
KQogCWZwLT5mX2RlbnRyeSA9IGRwOwogCWRwID0gTlVMTDsKIAorCXVrX211dGV4X2luaXQoJmZw
LT5mX2xvY2spOworCiAJZXJyb3IgPSBWT1BfT1BFTih2cCwgZnApOwogCWlmIChlcnJvcikgewog
CQl2bl91bmxvY2sodnApOwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 15:47:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 15:47:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5XVK-0008Q0-PR; Wed, 04 Sep 2019 15:47:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Tevb=W7=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5XVJ-0008Pk-Df
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 15:47:29 +0000
X-Inumbo-ID: 4b2b9ce8-cf2b-11e9-abba-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.40]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4b2b9ce8-cf2b-11e9-abba-12813bfff9fa;
 Wed, 04 Sep 2019 15:47:27 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GTmHh5yQOJePqUI0a/8YIp6947uxw07C77k9FMg+4Daz91zWQm6k9fZHgjtPQ5NSUXSvm6R7ez80PBww6x7V7EbdqUu13Tose0DpBdtL/QqB2dkFcmE1GVpGtyBxgRCJFqqzahgXRerIdBN8f7Mt9r2Xi8UPuf/SwjS0hUSPGXuBRiZqkVsMkrmINidunM+SRISHUvThebkjamdJ3+jIkbJGlMXRSHDP+Moo87LPJNUQpDx6dY4XSRf9J4APuJfDjsKrkWs7aCI7IzFv9pZ2BPMyxL0Uyb9AZz+HpYuyZG9D70X7j7tOgQ8kUbTyBkUY1LnmijIIkPmNt+4SwSYs3w==
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=L79/UUoKAKAPYZpIL8RD5WcaEWVDzz67dkVwWrqi1Ac=;
 b=feLdu0N3F5zuSRYkUv0inpXVIo/+2DCIM1kzeGuZFkaQ20CI3z6lhecyn4lZwuTU11oBRtJ8wdahyZz10xH+boDZVBtLavcYmy1K22ZagSPUgrgdO1s0vwxEWDYK8O8uWOVMwFyAvMBS0yTOJcrZB+7qWsC9wU5hy6rVewfVP/LSOv4pkE77a4Ig//yowxLj8moiYI68/ddrEhHr0QL3H6cM/kpgO4c4GJ9RYuS/CeRIN8s/DAQI2eRGAE6jNjcP7GahRWqMfdC46JiPmTkEIGglnwQqCLJmX+3C9KnwxPYPYR20gMjAfhFTLRj/fuet3McUC1/EuDeHYHv0VXzTrQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR0SPR01MB4.eurprd01.prod.exchangelabs.com (52.133.73.13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.14; Wed, 4 Sep 2019 15:47:25 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 4 Sep 2019
 15:47:25 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Revisit the pipe function
Thread-Index: AQHVYzgMPEQAr7/rM0qbLoa0Mqm1Xg==
Date: Wed, 4 Sep 2019 15:47:25 +0000
Message-ID: <20190904154716.11492-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0059.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1d::23) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [141.85.233.103]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 60a6cdc0-b5a9-4c34-f04e-08d7314f2e83
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR0SPR01MB4; 
x-ms-traffictypediagnostic: PR0SPR01MB4:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR0SPR01MB4B81E36634F10BB6AD06DA6B80@PR0SPR01MB4.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1850;
x-forefront-prvs: 0150F3F97D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(366004)(346002)(39850400004)(136003)(376002)(189003)(199004)(6506007)(386003)(26005)(2616005)(305945005)(486006)(7736002)(45776006)(8676002)(476003)(2501003)(86362001)(50226002)(81166006)(81156014)(8936002)(102836004)(186003)(6116002)(52116002)(14444005)(66946007)(99286004)(66476007)(66556008)(256004)(54906003)(6512007)(786003)(66066001)(71200400001)(71190400001)(316002)(2351001)(53936002)(66446008)(64756008)(3846002)(6436002)(25786009)(2906002)(5660300002)(6486002)(4326008)(478600001)(1076003)(14454004)(5640700003)(6916009)(4744005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR0SPR01MB4;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: oeLtz1kt7xR4sxsE7yIXz2Iyu8/eHFsLRz2iAaaymCnZh53kzUpUvW6rwAC0RG8cpsUmYl6DpdF3swXbKR6bufPnlDV1958B8snkviftdEoPS5ZRKCAnlWWRhphUaEeR3pDn5AjaNm01u8DP87Wf9m8KfQRutMSmIdwXoLJsPIwM14Es9GM71N1aUz6UpIA0aDjpZ8HRegMCmeksonxQHnZmc7HGXEetQVKc9ZU9CDprGKhTJ4YdKZj28YAh/CBK8ZP7sQcei/sgXBULqKpork4H9S737NO+s8+rOxVOaTbB2O+sgb6P7fewQ0etFcQDNtd9XuljMJdXGO2zbC2fEFNWyLOcNlz34tprn8LeF9JYizaZgOTP5JQgzdlZ18eYLhXZyHPzQ4Hj2jwGFx0ZkfQDMqeA6hXpmx/Axc0XlY8=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 60a6cdc0-b5a9-4c34-f04e-08d7314f2e83
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2019 15:47:25.1159 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ICT7f6puxoUDmR+Denzg+znGjN+88UwAgGIm9fq4ydHyyGU+rZ2ySL2mc7Hy/26pbKga2lQ0XV/KR8FnIpGivWq1zz7AuHiES0XjabhlckS5SEwoNmNbNU9/QI0VxrzD
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR0SPR01MB4
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Revisit the pipe
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBpcGUoLi4uKSBzdHViIHNob3VsZCByZXR1cm4gYW4gZXJyb3IuIFRoaXMgaXMgYmVjdWFz
ZSB0aGUgY2FsbGVlCndpbGwgdHJ5IHRvIHVzZSB0aGUgZmlsZSBkZXNjcmlwdG9ycyByZXR1cm5l
ZCBieSB0aGlzIGZ1bmN0aW9uLgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgotLS0KIGZpbGUuYyB8IDMgKystCiAx
IGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0
IGEvZmlsZS5jIGIvZmlsZS5jCmluZGV4IDE1NjY2NzkuLjdkNzhmNzkgMTAwNjQ0Ci0tLSBhL2Zp
bGUuYworKysgYi9maWxlLmMKQEAgLTExNiw3ICsxMTYsOCBAQCBpbnQgdXRpbWVzKGNvbnN0IGNo
YXIgKmZpbGVuYW1lIF9fdW51c2VkLAogCiBpbnQgcGlwZShpbnQgcGlwZWZkWzJdIF9fdW51c2Vk
KQogewotCXJldHVybiAwOworCWVycm5vID0gRUZBVUxUOworCXJldHVybiAtMTsKIH0KIAogY2hh
ciAqcmVhbHBhdGgoY29uc3QgY2hhciAqcmVzdHJpY3QgZmlsZV9uYW1lLCBjaGFyICpyZXN0cmlj
dCByZXNvbHZlZF9uYW1lKQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 15:47:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 15:47:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5XVK-0008Q5-RX; Wed, 04 Sep 2019 15:47:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Tevb=W7=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5XVJ-0008Pl-Dw
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 15:47:29 +0000
X-Inumbo-ID: 4b2b9ce8-cf2b-11e9-abba-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.40]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4b2b9ce8-cf2b-11e9-abba-12813bfff9fa;
 Wed, 04 Sep 2019 15:47:27 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GTmHh5yQOJePqUI0a/8YIp6947uxw07C77k9FMg+4Daz91zWQm6k9fZHgjtPQ5NSUXSvm6R7ez80PBww6x7V7EbdqUu13Tose0DpBdtL/QqB2dkFcmE1GVpGtyBxgRCJFqqzahgXRerIdBN8f7Mt9r2Xi8UPuf/SwjS0hUSPGXuBRiZqkVsMkrmINidunM+SRISHUvThebkjamdJ3+jIkbJGlMXRSHDP+Moo87LPJNUQpDx6dY4XSRf9J4APuJfDjsKrkWs7aCI7IzFv9pZ2BPMyxL0Uyb9AZz+HpYuyZG9D70X7j7tOgQ8kUbTyBkUY1LnmijIIkPmNt+4SwSYs3w==
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=L79/UUoKAKAPYZpIL8RD5WcaEWVDzz67dkVwWrqi1Ac=;
 b=feLdu0N3F5zuSRYkUv0inpXVIo/+2DCIM1kzeGuZFkaQ20CI3z6lhecyn4lZwuTU11oBRtJ8wdahyZz10xH+boDZVBtLavcYmy1K22ZagSPUgrgdO1s0vwxEWDYK8O8uWOVMwFyAvMBS0yTOJcrZB+7qWsC9wU5hy6rVewfVP/LSOv4pkE77a4Ig//yowxLj8moiYI68/ddrEhHr0QL3H6cM/kpgO4c4GJ9RYuS/CeRIN8s/DAQI2eRGAE6jNjcP7GahRWqMfdC46JiPmTkEIGglnwQqCLJmX+3C9KnwxPYPYR20gMjAfhFTLRj/fuet3McUC1/EuDeHYHv0VXzTrQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR0SPR01MB4.eurprd01.prod.exchangelabs.com (52.133.73.13) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.14; Wed, 4 Sep 2019 15:47:25 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 4 Sep 2019
 15:47:25 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Revisit the pipe function
Thread-Index: AQHVYzgMPEQAr7/rM0qbLoa0Mqm1Xg==
Date: Wed, 4 Sep 2019 15:47:25 +0000
Message-ID: <20190904154716.11492-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0059.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1d::23) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [141.85.233.103]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 60a6cdc0-b5a9-4c34-f04e-08d7314f2e83
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR0SPR01MB4; 
x-ms-traffictypediagnostic: PR0SPR01MB4:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR0SPR01MB4B81E36634F10BB6AD06DA6B80@PR0SPR01MB4.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1850;
x-forefront-prvs: 0150F3F97D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(366004)(346002)(39850400004)(136003)(376002)(189003)(199004)(6506007)(386003)(26005)(2616005)(305945005)(486006)(7736002)(45776006)(8676002)(476003)(2501003)(86362001)(50226002)(81166006)(81156014)(8936002)(102836004)(186003)(6116002)(52116002)(14444005)(66946007)(99286004)(66476007)(66556008)(256004)(54906003)(6512007)(786003)(66066001)(71200400001)(71190400001)(316002)(2351001)(53936002)(66446008)(64756008)(3846002)(6436002)(25786009)(2906002)(5660300002)(6486002)(4326008)(478600001)(1076003)(14454004)(5640700003)(6916009)(4744005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR0SPR01MB4;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: oeLtz1kt7xR4sxsE7yIXz2Iyu8/eHFsLRz2iAaaymCnZh53kzUpUvW6rwAC0RG8cpsUmYl6DpdF3swXbKR6bufPnlDV1958B8snkviftdEoPS5ZRKCAnlWWRhphUaEeR3pDn5AjaNm01u8DP87Wf9m8KfQRutMSmIdwXoLJsPIwM14Es9GM71N1aUz6UpIA0aDjpZ8HRegMCmeksonxQHnZmc7HGXEetQVKc9ZU9CDprGKhTJ4YdKZj28YAh/CBK8ZP7sQcei/sgXBULqKpork4H9S737NO+s8+rOxVOaTbB2O+sgb6P7fewQ0etFcQDNtd9XuljMJdXGO2zbC2fEFNWyLOcNlz34tprn8LeF9JYizaZgOTP5JQgzdlZ18eYLhXZyHPzQ4Hj2jwGFx0ZkfQDMqeA6hXpmx/Axc0XlY8=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 60a6cdc0-b5a9-4c34-f04e-08d7314f2e83
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2019 15:47:25.1159 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ICT7f6puxoUDmR+Denzg+znGjN+88UwAgGIm9fq4ydHyyGU+rZ2ySL2mc7Hy/26pbKga2lQ0XV/KR8FnIpGivWq1zz7AuHiES0XjabhlckS5SEwoNmNbNU9/QI0VxrzD
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR0SPR01MB4
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Revisit the pipe
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBpcGUoLi4uKSBzdHViIHNob3VsZCByZXR1cm4gYW4gZXJyb3IuIFRoaXMgaXMgYmVjdWFz
ZSB0aGUgY2FsbGVlCndpbGwgdHJ5IHRvIHVzZSB0aGUgZmlsZSBkZXNjcmlwdG9ycyByZXR1cm5l
ZCBieSB0aGlzIGZ1bmN0aW9uLgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgotLS0KIGZpbGUuYyB8IDMgKystCiAx
IGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0
IGEvZmlsZS5jIGIvZmlsZS5jCmluZGV4IDE1NjY2NzkuLjdkNzhmNzkgMTAwNjQ0Ci0tLSBhL2Zp
bGUuYworKysgYi9maWxlLmMKQEAgLTExNiw3ICsxMTYsOCBAQCBpbnQgdXRpbWVzKGNvbnN0IGNo
YXIgKmZpbGVuYW1lIF9fdW51c2VkLAogCiBpbnQgcGlwZShpbnQgcGlwZWZkWzJdIF9fdW51c2Vk
KQogewotCXJldHVybiAwOworCWVycm5vID0gRUZBVUxUOworCXJldHVybiAtMTsKIH0KIAogY2hh
ciAqcmVhbHBhdGgoY29uc3QgY2hhciAqcmVzdHJpY3QgZmlsZV9uYW1lLCBjaGFyICpyZXN0cmlj
dCByZXNvbHZlZF9uYW1lKQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 16:17:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 16:17:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5XyH-000357-Tl; Wed, 04 Sep 2019 16:17:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Tevb=W7=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5XyH-000350-21
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 16:17:25 +0000
X-Inumbo-ID: 7965ea1a-cf2f-11e9-b76c-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.88]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7965ea1a-cf2f-11e9-b76c-bc764e2007e4;
 Wed, 04 Sep 2019 16:17:22 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=CzCoM6P6V1hxW6cJyWCWBvV9JSJ9WbeWaeEC22eTdDDDNujSvKdUNDsK4vOpkBZWSpvSSSsFDA8dXuoFs07DIw59iq3ig5rHrDVSB6Lf3BqfrOwSnpLLreuLef8o7RtI8ug2/u/KnRXpkxgRdzEeup/+KfOume79QIfgstOyfo89wPDuy6CKz/2ihctPa8Lr08tYzlXIR0ebi9+RvNkGiJjtTgISpSJndvFjmzjdgMukPpeqjfHQKvsAqhWMyw55p2vJulyQVeyAtfUSQFdXHxLAAsvFF+WHGMmRwDsERZ+JGK2u3nA72YOSAWSLuxKmABq9QGe/0ceSjgYYVPHbDw==
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=8mNBgRUqvtsjbA9qV9eG67t9dWRwn8eAVZJMHRAxMWU=;
 b=nAZSgILh5vOSF4pQ0VNDIt7TUD+vRx+ypkQ0fG/sZHpp+5E0wpze/kIfDu81fYlXum+fBzlVdCxCO7EjNAM+lzAPaswckYkEjSxEvySW54nuLFF4mCm22p4rXDEqztVp5TewkqEmZqOiP7UZqTrYysw44cM7iW6xYwpioyO3kSIKNSCQHM6baT+QzmdlHBbGJUVaCEBKDWsKhgHkS/iK2b7zd3tqfRheJeL5GUlU22y+qtMnNaalKRlInFeT4UcvV6RPeyV3Nn/v3AP6FH+2gkEc0imNgVF0BOQyXZJDeCgFQjseMB7PXOo4xeP4EQbn8NGvlpySuwQiT+XkndLaEg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4810.eurprd01.prod.exchangelabs.com (20.177.209.29) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.20; Wed, 4 Sep
 2019 16:17:20 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 4 Sep 2019
 16:17:20 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2] lib/vfscore: Enable fcntl() function
Thread-Index: AQHVYzb2Zt8JZilBSkW31LGUCkk5jKcbsgMA
Date: Wed, 4 Sep 2019 16:17:20 +0000
Message-ID: <3d1d7cbb-6529-557c-36b3-837f6456c950@stud.acs.upb.ro>
References: <20190904153932.6541-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904153932.6541-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0217.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1e::13) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.103]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: cf00dad9-27fb-46d6-3293-08d731535c9f
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4810; 
x-ms-traffictypediagnostic: PR1PR01MB4810:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-prvs: <PR1PR01MB481069DB338D9EF101B5DE4DA6B80@PR1PR01MB4810.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1728;
x-forefront-prvs: 0150F3F97D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(376002)(346002)(366004)(396003)(39850400004)(199004)(189003)(52314003)(66066001)(5660300002)(66946007)(66446008)(66476007)(66556008)(64756008)(71200400001)(71190400001)(25786009)(81156014)(76176011)(386003)(6246003)(229853002)(53936002)(6486002)(6306002)(6512007)(102836004)(6506007)(53546011)(8936002)(31696002)(86362001)(2616005)(2501003)(3846002)(6116002)(31686004)(486006)(446003)(11346002)(14444005)(186003)(8676002)(26005)(81166006)(478600001)(14454004)(476003)(256004)(6436002)(786003)(52116002)(99286004)(110136005)(85182001)(2906002)(7736002)(966005)(85202003)(305945005)(316002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4810;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: pNVjPLXX/3bq0dNuNi8b0ZVaEHIN46n3HUAnBBAs33XFMK32zuArKoyqT5FoGimVxn/xD5gnYOVg2Y5NeQqHtqxtHFMUdCRMeQ6Ami9RVx89prpasbw636MKV44xW0/Eer6N5Gctrf78oeuWKZHYbsD3OlhSjx8oG3Ds7A4PWLEHttMZB/U8kFAj/5z4Qlx3PNxklCd9pBusERkWIzOByvl87ppm4vt22LCrVENTalHJA4yl0omllVmSTFOXf9wh1eflHb0M/xk9tt/f5nZv7PouQ/qjlHkNwmH6WAjcZIMApQOYlUGbeq77lz7+1l7gNBVLBaEx7Ta3mMgqd81jo9mDkeUc1FV/OCuih+LIAIWq/Df1l5KwUA8Zn3R737KHj20jKiFJK+804hGF3Z68ByuF3P6qP04rKXHxtmt8lns=
x-ms-exchange-transport-forked: True
Content-ID: <D16BF19580DB4F4F9E07D7031AC486AC@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: cf00dad9-27fb-46d6-3293-08d731535c9f
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2019 16:17:20.3587 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: nms9ojxNTyOsVERNtNSJ3KtdaLdUrPiBAaBq/ct9Z0Jahe7Vab0f8XXSrfs9AA5R+togDCJ9Uc+vujnz5ywsnJ+LplPMFzv4I7ao7xJqYAgU3eXqgSkyws5g+kF0c710
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4810
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2] lib/vfscore: Enable fcntl()
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIEkgaGF2ZSB0ZXN0ZWQgaXQgd2l0
aCB0aGUgdGVzdHMgZnJvbSBPU3ZbMV0uIFRoYW5rcyENCg0KVmxhZA0KDQpbMV0gaHR0cHM6Ly9n
aXRodWIuY29tL2Nsb3VkaXVzLXN5c3RlbXMvb3N2L2Jsb2IvbWFzdGVyL3Rlc3RzL3RzdC1mY250
bC5jYw0KDQpSZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1PHZsYWRfYW5kcmVpLmJhZG9p
dUBzdHVkLmFjcy51cGIucm8+DQoNCk9uIDA0LjA5LjIwMTkgMTg6MzksIENvc3RpbiBMdXB1IHdy
b3RlOg0KPiBUaGlzIHBhdGNoIGVuYWJsZXMgYW5kIGFkYXB0IHRoZSBleGlzdGluZyBmY250bCgp
IGltcGxlbWVudGF0aW9uIHdoaWNoIHdhcw0KPiBwcmV2aW91c2x5IGltcG9ydGVkIGZyb20gT1N2
LiBCZXNpZGUgdGhhdCwgaXQgYWxzbyBoYW5kbGVzIEZfRFVQRkRfQ0xPRVhFQw0KPiBjYXNlLCB3
aGljaCBpcyBoZWF2aWx5IHVzZWQgYnkgUHl0aG9uIDMgaW50ZXJwcmV0ZXIuDQo+DQo+IFNpZ25l
ZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQo+IC0tLQ0KPiAg
IGxpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgICAgICAgICAgfCAgMSArDQo+ICAgbGliL3Zmc2Nv
cmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaCB8ICA0ICsrKw0KPiAgIGxpYi92ZnNjb3JlL21haW4u
YyAgICAgICAgICAgICAgICAgfCA0MSArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0NCj4g
ICBsaWIvdmZzY29yZS9zeXNjYWxscy5jICAgICAgICAgICAgIHwgIDIgKysNCj4gICA0IGZpbGVz
IGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQ0KPg0KPiBkaWZmIC0t
Z2l0IGEvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51ayBiL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMu
dWsNCj4gaW5kZXggODIyZTZlY2MuLmUzZDY3MjNhIDEwMDY0NA0KPiAtLS0gYS9saWIvdmZzY29y
ZS9leHBvcnRzeW1zLnVrDQo+ICsrKyBiL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsNCj4gQEAg
LTc4LDMgKzc4LDQgQEAgdWtfc3lzY2FsbF93cml0ZXYNCj4gICBkZW50cnlfYWxsb2MNCj4gICBk
cmVsZQ0KPiAgIHZyZWxlDQo+ICtmY250bA0KPiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvaW5j
bHVkZS92ZnNjb3JlL2ZpbGUuaCBiL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgN
Cj4gaW5kZXggNTFmMDc5MWEuLjM1NGE0MTRlIDEwMDY0NA0KPiAtLS0gYS9saWIvdmZzY29yZS9p
bmNsdWRlL3Zmc2NvcmUvZmlsZS5oDQo+ICsrKyBiL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29y
ZS9maWxlLmgNCj4gQEAgLTU5LDggKzU5LDEyIEBAIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgew0KPiAg
IAl2b2lkCQkqZl9kYXRhOyAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yIHNwZWNpZmljIGRhdGEg
Ki8NCj4gICAJaW50CQlmX3Zmc19mbGFnczsgICAgLyogaW50ZXJuYWwgaW1wbGVtZW50YXRpb24g
ZmxhZ3MgKi8NCj4gICAJc3RydWN0IGRlbnRyeSAgICpmX2RlbnRyeTsNCj4gKwlzdHJ1Y3QgdWtf
bXV0ZXggZl9sb2NrOw0KPiAgIH07DQo+ICAgDQo+ICsjZGVmaW5lIEZEX0xPQ0soZnApICAgICAg
IHVrX211dGV4X2xvY2soJihmcC0+Zl9sb2NrKSkNCj4gKyNkZWZpbmUgRkRfVU5MT0NLKGZwKSAg
ICAgdWtfbXV0ZXhfdW5sb2NrKCYoZnAtPmZfbG9jaykpDQo+ICsNCj4gICBpbnQgdmZzY29yZV9h
bGxvY19mZCh2b2lkKTsNCj4gICB2b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCk7DQo+ICAgaW50
IHZmc2NvcmVfaW5zdGFsbF9mZChpbnQgZmQsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOw0K
PiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvbWFpbi5jIGIvbGliL3Zmc2NvcmUvbWFpbi5jDQo+
IGluZGV4IGJlMDU1Yjc4Li44ZDBlNGIyYyAxMDA2NDQNCj4gLS0tIGEvbGliL3Zmc2NvcmUvbWFp
bi5jDQo+ICsrKyBiL2xpYi92ZnNjb3JlL21haW4uYw0KPiBAQCAtMTQyNSwxNyArMTQyNSwyMiBA
QCBpbnQgZHVwMihpbnQgb2xkZmQsIGludCBuZXdmZCkNCj4gICAgKi8NCj4gICAjZGVmaW5lIFNF
VEZMIChPX0FQUEVORCB8IE9fQVNZTkMgfCBPX0RJUkVDVCB8IE9fTk9BVElNRSB8IE9fTk9OQkxP
Q0spDQo+ICAgDQo+IC0jaWYgMA0KPiAgIFVLX1RSQUNFUE9JTlQodHJhY2VfdmZzX2ZjbnRsLCAi
JWQgJWQgMHgleCIsIGludCwgaW50LCBpbnQpOw0KPiAgIFVLX1RSQUNFUE9JTlQodHJhY2VfdmZz
X2ZjbnRsX3JldCwgIlwiJXNcIiIsIGludCk7DQo+ICAgVUtfVFJBQ0VQT0lOVCh0cmFjZV92ZnNf
ZmNudGxfZXJyLCAiJWQiLCBpbnQpOw0KPiAgIA0KPiAtaW50IGZjbnRsKGludCBmZCwgaW50IGNt
ZCwgaW50IGFyZykNCj4gK2ludCBmY250bChpbnQgZmQsIGludCBjbWQsIC4uLikNCj4gICB7DQo+
ICsJaW50IGFyZzsNCj4gKwl2YV9saXN0IGFwOw0KPiAgIAlzdHJ1Y3QgdmZzY29yZV9maWxlICpm
cDsNCj4gICAJaW50IHJldCA9IDAsIGVycm9yOw0KPiAgIAlpbnQgdG1wOw0KPiAgIA0KPiArCXZh
X3N0YXJ0KGFwLCBjbWQpOw0KPiArCWFyZyA9IHZhX2FyZyhhcCwgaW50KTsNCj4gKwl2YV9lbmQo
YXApOw0KPiArDQo+ICAgCXRyYWNlX3Zmc19mY250bChmZCwgY21kLCBhcmcpOw0KPiAgIAllcnJv
ciA9IGZnZXQoZmQsICZmcCk7DQo+ICAgCWlmIChlcnJvcikNCj4gQEAgLTE0NTAsNyArMTQ1NSw3
IEBAIGludCBmY250bChpbnQgZmQsIGludCBjbWQsIGludCBhcmcpDQo+ICAgCS8vIGlnbm9yZWQg
aW4gT1N2IGFueXdheSwgYXMgaXQgZG9lc24ndCBzdXBwb3J0IGV4ZWMoKS4NCj4gICAJc3dpdGNo
IChjbWQpIHsNCj4gICAJY2FzZSBGX0RVUEZEOg0KPiAtCQllcnJvciA9IF9mZGFsbG9jKGZwLCAm
cmV0LCBhcmcpOw0KPiArCQllcnJvciA9IGZkYWxsb2MoZnAsICZyZXQpOw0KPiAgIAkJaWYgKGVy
cm9yKQ0KPiAgIAkJCWdvdG8gb3V0X2Vycm5vOw0KPiAgIAkJYnJlYWs7DQo+IEBAIC0xNDY3LDM1
ICsxNDcyLDQyIEBAIGludCBmY250bChpbnQgZmQsIGludCBjbWQsIGludCBhcmcpDQo+ICAgCQkv
LyBBcyBleHBsYWluZWQgYWJvdmUsIHRoZSBPX0NMT0VYRUMgc2hvdWxkIGhhdmUgYmVlbiBpbiBm
X2ZsYWdzLA0KPiAgIAkJLy8gYW5kIHNob3VsZG4ndCBiZSByZXR1cm5lZC4gTGludXggYWx3YXlz
IHJldHVybnMgMDEwMDAwMCAoInRoZQ0KPiAgIAkJLy8gZmxhZyBmb3JtZXJseSBrbm93biBhcyBP
X0xBUkdFRklMRSkgc28gbGV0J3MgZG8gaXQgdG9vLg0KPiAtCQlyZXQgPSAob2ZsYWdzKGZwLT5m
X2ZsYWdzKSAmIH5PX0NMT0VYRUMpIHwgMDEwMDAwMDsNCj4gKwkJcmV0ID0gKHZmc2NvcmVfb2Zs
YWdzKGZwLT5mX2ZsYWdzKSAmIH5PX0NMT0VYRUMpIHwgMDEwMDAwMDsNCj4gICAJCWJyZWFrOw0K
PiAgIAljYXNlIEZfU0VURkw6DQo+ICAgCQlGRF9MT0NLKGZwKTsNCj4gLQkJZnAtPmZfZmxhZ3Mg
PSBmZmxhZ3MoKG9mbGFncyhmcC0+Zl9mbGFncykgJiB+U0VURkwpIHwNCj4gKwkJZnAtPmZfZmxh
Z3MgPSB2ZnNjb3JlX2ZmbGFncygodmZzY29yZV9vZmxhZ3MoZnAtPmZfZmxhZ3MpICYgflNFVEZM
KSB8DQo+ICAgCQkJCShhcmcgJiBTRVRGTCkpOw0KPiAgIAkJRkRfVU5MT0NLKGZwKTsNCj4gICAN
Cj4gKyNpZiBkZWZpbmVkKEZJT05CSU8pICYmIGRlZmluZWQoRklPQVNZTkMpDQo+ICAgCQkvKiBT
eW5jIG5vbmJsb2NraW5nL2FzeW5jIHN0YXRlIHdpdGggZmlsZSBmbGFncyAqLw0KPiAgIAkJdG1w
ID0gZnAtPmZfZmxhZ3MgJiBGTk9OQkxPQ0s7DQo+IC0JCWZwLT5pb2N0bChGSU9OQklPLCAmdG1w
KTsNCj4gKwkJdmZzX2lvY3RsKGZwLCBGSU9OQklPLCAmdG1wKTsNCj4gICAJCXRtcCA9IGZwLT5m
X2ZsYWdzICYgRkFTWU5DOw0KPiAtCQlmcC0+aW9jdGwoRklPQVNZTkMsICZ0bXApOw0KPiAtDQo+
ICsJCXZmc19pb2N0bChmcCwgRklPQVNZTkMsICZ0bXApOw0KPiArI2VuZGlmDQo+ICsJCWJyZWFr
Ow0KPiArCWNhc2UgRl9EVVBGRF9DTE9FWEVDOg0KPiArCQllcnJvciA9IGZkYWxsb2MoZnAsICZy
ZXQpOw0KPiArCQlpZiAoZXJyb3IpDQo+ICsJCQlnb3RvIG91dF9lcnJubzsNCj4gKwkJZnAtPmZf
ZmxhZ3MgfD0gT19DTE9FWEVDOw0KPiAgIAkJYnJlYWs7DQo+ICAgCWNhc2UgRl9TRVRMSzoNCj4g
LQkJV0FSTl9PTkNFKCJmY250bChGX1NFVExLKSBzdHViYmVkXG4iKTsNCj4gKwkJdWtfcHJfd2Fy
bigiZmNudGwoRl9TRVRMSykgc3R1YmJlZFxuIik7DQo+ICAgCQlicmVhazsNCj4gICAJY2FzZSBG
X0dFVExLOg0KPiAtCQlXQVJOX09OQ0UoImZjbnRsKEZfR0VUTEspIHN0dWJiZWRcbiIpOw0KPiAr
CQl1a19wcl93YXJuKCJmY250bChGX0dFVExLKSBzdHViYmVkXG4iKTsNCj4gICAJCWJyZWFrOw0K
PiAgIAljYXNlIEZfU0VUTEtXOg0KPiAtCQlXQVJOX09OQ0UoImZjbnRsKEZfU0VUTEtXKSBzdHVi
YmVkXG4iKTsNCj4gKwkJdWtfcHJfd2FybigiZmNudGwoRl9TRVRMS1cpIHN0dWJiZWRcbiIpOw0K
PiAgIAkJYnJlYWs7DQo+ICAgCWNhc2UgRl9TRVRPV046DQo+IC0JCVdBUk5fT05DRSgiZmNudGwo
Rl9TRVRPV04pIHN0dWJiZWRcbiIpOw0KPiArCQl1a19wcl93YXJuKCJmY250bChGX1NFVE9XTikg
c3R1YmJlZFxuIik7DQo+ICAgCQlicmVhazsNCj4gICAJZGVmYXVsdDoNCj4gLQkJa3ByaW50Zigi
dW5zdXBwb3J0ZWQgZmNudGwgY21kIDB4JXhcbiIsIGNtZCk7DQo+ICsJCXVrX3ByX2VycigidW5z
dXBwb3J0ZWQgZmNudGwgY21kIDB4JXhcbiIsIGNtZCk7DQo+ICAgCQllcnJvciA9IEVJTlZBTDsN
Cj4gICAJfQ0KPiAgIA0KPiBAQCAtMTUwNSwxMiArMTUxNywxMSBAQCBpbnQgZmNudGwoaW50IGZk
LCBpbnQgY21kLCBpbnQgYXJnKQ0KPiAgIAl0cmFjZV92ZnNfZmNudGxfcmV0KHJldCk7DQo+ICAg
CXJldHVybiByZXQ7DQo+ICAgDQo+IC0Jb3V0X2Vycm5vOg0KPiArb3V0X2Vycm5vOg0KPiAgIAl0
cmFjZV92ZnNfZmNudGxfZXJyKGVycm9yKTsNCj4gICAJZXJybm8gPSBlcnJvcjsNCj4gICAJcmV0
dXJuIC0xOw0KPiAgIH0NCj4gLSNlbmRpZg0KPiAgIA0KPiAgIFVLX1RSQUNFUE9JTlQodHJhY2Vf
dmZzX2FjY2VzcywgIlwiJXNcIiAwJTBvIiwgY29uc3QgY2hhciosIGludCk7DQo+ICAgVUtfVFJB
Q0VQT0lOVCh0cmFjZV92ZnNfYWNjZXNzX3JldCwgIiIpOw0KPiBkaWZmIC0tZ2l0IGEvbGliL3Zm
c2NvcmUvc3lzY2FsbHMuYyBiL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMNCj4gaW5kZXggZjk2NjZj
NGMuLjU0YWRjMmQyIDEwMDY0NA0KPiAtLS0gYS9saWIvdmZzY29yZS9zeXNjYWxscy5jDQo+ICsr
KyBiL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMNCj4gQEAgLTIxMCw2ICsyMTAsOCBAQCBzeXNfb3Bl
bihjaGFyICpwYXRoLCBpbnQgZmxhZ3MsIG1vZGVfdCBtb2RlLCBzdHJ1Y3QgdmZzY29yZV9maWxl
ICoqZnBwKQ0KPiAgIAlmcC0+Zl9kZW50cnkgPSBkcDsNCj4gICAJZHAgPSBOVUxMOw0KPiAgIA0K
PiArCXVrX211dGV4X2luaXQoJmZwLT5mX2xvY2spOw0KPiArDQo+ICAgCWVycm9yID0gVk9QX09Q
RU4odnAsIGZwKTsNCj4gICAJaWYgKGVycm9yKSB7DQo+ICAgCQl2bl91bmxvY2sodnApOw0KX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 16:23:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 16:23:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Y48-0003oG-46; Wed, 04 Sep 2019 16:23:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Tevb=W7=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5Y46-0003o6-Lt
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 16:23:26 +0000
X-Inumbo-ID: 51a2cc54-cf30-11e9-abbb-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.88]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 51a2cc54-cf30-11e9-abbb-12813bfff9fa;
 Wed, 04 Sep 2019 16:23:25 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=nYbchdjQW3M0D/2ohFTitER/rhfJmkDHJugWx35LCmy/YTANjYkbmfo06N02nff2B1e3OeQ2oAN47fLDkvYgY9PMP7yB25YrdFuPMnazX7FC8ou8f33Ji75+Ko+ruwd8K22sJOJk/O9N8rFYpwdtgFkY4L2RgD/QHC8wK9uELg8g9kVcKhzo0wufGeOeEfrU/xDPdjHvl4tNGBoyjg51+oyTxsxI7hML6kuRTrCiBV9QxQweGovfMciuYS2prubGDpd94CCpZFaES3yvs2f6DSAtoGmmZL7vyREaXypPcgHIkR4nNhemGEsuHCYT2TdO5NVBx/Zm1pTBVLQxVhBbrQ==
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=5ZmZM03uyvC5HnbZayqASeSwXKHx2kLmu6fSV3zUuME=;
 b=lSNV14X8c5zsb9MyPkt8EG/5GcxnD8K36DMKh1jaoTjICAwRMn6xhYikONBHn41zekugjguUAhV/ddm387rfD4XuzN7gAVxrDVoYmNWpEJCv05m19UMj9pkLL31hco0iaXM+GinMDf4xLFRotvIF795sAr0wmqLY9rmQdOHRgWeEx9nOCku4VCayDj2fr0wIVaUt05KsbZRdazz/Yd8m7tqEy4dUQd+H+KPW4u/keG7LkSO5GgUsR7V/b3bDWisyuxYHfmSaLlOBlgQpyZEEsyVvsbrO8B52zl6s7KhRek0UYjLX6/yWcyAd4wAL98sUORmZWnx0qGsMZDbTUZVY9A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5082.eurprd01.prod.exchangelabs.com (20.177.208.213) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.19; Wed, 4 Sep
 2019 16:23:23 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 4 Sep 2019
 16:23:23 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH] Update fcntl() related definitions
Thread-Index: AQHVYzFhCCxSBeU0yUGeFLifO0bTQqcbs7+A
Date: Wed, 4 Sep 2019 16:23:23 +0000
Message-ID: <97a36ace-384c-1bd2-0f57-a3871d20749e@stud.acs.upb.ro>
References: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0210.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::30) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 92a21483-cc4f-469d-deab-08d7315434e0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5082; 
x-ms-traffictypediagnostic: PR1PR01MB5082:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-prvs: <PR1PR01MB50820CB98DF5A3AC80E1D0C5A6B80@PR1PR01MB5082.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:7219;
x-forefront-prvs: 0150F3F97D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(39850400004)(136003)(396003)(366004)(346002)(189003)(199004)(446003)(486006)(2906002)(86362001)(476003)(31686004)(2616005)(786003)(316002)(256004)(52116002)(66946007)(85202003)(76176011)(71200400001)(66446008)(64756008)(11346002)(102836004)(53546011)(26005)(99286004)(6116002)(186003)(3846002)(386003)(6506007)(7736002)(66476007)(81166006)(305945005)(8936002)(2501003)(6246003)(8676002)(31696002)(6512007)(229853002)(6306002)(5660300002)(71190400001)(6486002)(66066001)(25786009)(110136005)(85182001)(81156014)(14454004)(478600001)(66556008)(6436002)(53936002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5082;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 4Xb4fwPI376Wtb/MCuL772TXB9gGXNfU+SPLxmWyBVMBpVb0OPsyVOgR1RCEug9OqmmUTA8fOq29Sg8MZ7Ogpp7r5xmo9YV5ULuw2RzP9Vzy22o/Cl/v8PbWxqy/oZPkXcMkZ8C6uySHZk0d/Wv5xwCkxA/YHpQ5iG1eylJ4brzwr0M12eRU9WbJaZGyr3FPLMuU8/i/Xcv0jgGn/ya+f364kQbZdh8KsUuC8qqoEPmJUS61d0BKmhkpUzJiHIvSDpUZ2zVxDuQbJNj8w9c79PVv5SIt3GGdpWkE7vM/SS+QmunYoeMR7GUB+RQWViGm73mm/AoQ5PpPxVQJBUwI10X0dSoZs2MqA8iPxpSL5P0bcV5wtHqDdf713tXczAAby/RW89BYWUMCfGEVX/PyaduHWpM4lSQ90akVLGmx25s=
x-ms-exchange-transport-forked: True
Content-ID: <873A859C945495418AE8EC25BBE62221@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 92a21483-cc4f-469d-deab-08d7315434e0
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2019 16:23:23.1580 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: q9dNRB7SulEaWl03tBEiNMRWsFLvUB5T1B7JgKbPFRow+4H6svRkLeqAzSHCN0F1xHkqMla1Xhf3/SaHeAkW0k8ld7/tT7NoG+l5NKAOo1AoOdh997c9VI4OUd5piQOv
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5082
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Update fcntl() related
 definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpb
MV1odHRwczovL2dpdGh1Yi5jb20vY2xvdWRpdXMtc3lzdGVtcy9vc3YvYmxvYi9tYXN0ZXIvdGVz
dHMvdHN0LWZjbnRsLmNjDQoNCk9uIDA0LjA5LjIwMTkgMTc6NTksIENvc3RpbiBMdXB1IHdyb3Rl
Og0KPiBTaW5jZSB3ZSBhcmUgdXNpbmcgdGhlIGZjbnRsKCkgaW1wbGVtZW50YXRpb24gaW4gdmZz
Y29yZSwgd2UgZG9uJ3QgdXNlIG5ld2xpYidzDQo+IGFueSBtb3JlLiBUaGlzIHBhdGNoIGFsc28g
YWRkcyBzb21lIGZsYWdzIHRoYXQgYXJlIG5lZWRlZCBieSBmY250bCgpIGFuZCB0aGF0DQo+IHdl
cmUgY29waWVkIGZyb20gbXVzbCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBvbmVzIGZyb20gZmNu
dGwuaC4NCj4NCj4gU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4NCj4gLS0tDQo+ICAgTWFrZWZpbGUudWsgICAgIHwgIDIgKy0NCj4gICBpbmNsdWRlL2Zj
bnRsLmggfCAxMyArKysrKysrKysrLS0tDQo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRp
b25zKCspLCA0IGRlbGV0aW9ucygtKQ0KPg0KPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9N
YWtlZmlsZS51aw0KPiBpbmRleCBjMDJjMmYwLi4wMWRhNzI0IDEwMDY0NA0KPiAtLS0gYS9NYWtl
ZmlsZS51aw0KPiArKysgYi9NYWtlZmlsZS51aw0KPiBAQCAtNzkyLDcgKzc5Miw3IEBAIExJQk5F
V0xJQkNfU1JDUy15ICs9ICQoTElCTkVXTElCX0xJQkMpL3N0cmluZy93Y3NkdXAuYw0KPiAgICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICAgIyBOZXdsaWIvbGliYyBjb2RlIC0tIHN5c2NhbGxz
DQo+ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gLUxJQk5FV0xJQkNfU1JDUy15ICs9ICQo
TElCTkVXTElCX0xJQkMpL3N5c2NhbGxzL3N5c2ZjbnRsLmMNCj4gKyNMSUJORVdMSUJDX1NSQ1Mt
eSArPSAkKExJQk5FV0xJQl9MSUJDKS9zeXNjYWxscy9zeXNmY250bC5jDQo+ICAgDQo+ICAgIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gICAjIE5ld2xpYi9saWJjIGNvZGUgLS0gdGltZQ0KPiBk
aWZmIC0tZ2l0IGEvaW5jbHVkZS9mY250bC5oIGIvaW5jbHVkZS9mY250bC5oDQo+IGluZGV4IDI1
YTQ4MDguLjdhMzUwNTIgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZmNudGwuaA0KPiArKysgYi9p
bmNsdWRlL2ZjbnRsLmgNCj4gQEAgLTExLDE1ICsxMSwyMiBAQA0KPiAgICNkZWZpbmUgT19ESVJF
Q1RPUlkgMDIwMDAwMA0KPiAgICNkZWZpbmUgT19DTE9FWEVDICAwMjAwMDAwMA0KPiAgICNkZWZp
bmUgT19EU1lOQyAgICAgIDAxMDAwMA0KPiAtI2VuZGlmDQo+IC0NCj4gLSNpZiAoKGRlZmluZWQg
Q09ORklHX0FSQ0hfQVJNXzY0KSB8fCAoZGVmaW5lZCBDT05GSUdfQVJDSF9BUk1fMzIpKQ0KPiAr
I2RlZmluZSBPX0FTWU5DICAgICAgMDIwMDAwDQo+ICsjZGVmaW5lIE9fRElSRUNUICAgICAwNDAw
MDANCj4gKyNkZWZpbmUgT19OT0FUSU1FICAwMTAwMDAwMA0KPiArI2VsaWYgKChkZWZpbmVkIENP
TkZJR19BUkNIX0FSTV82NCkgfHwgKGRlZmluZWQgQ09ORklHX0FSQ0hfQVJNXzMyKSkNCj4gICAj
ZGVmaW5lIE9fTk9GT0xMT1cgIDAxMDAwMDANCj4gICAjZGVmaW5lIE9fRElSRUNUT1JZICAwNDAw
MDANCj4gICAjZGVmaW5lIE9fQ0xPRVhFQyAgMDIwMDAwMDANCj4gICAjZGVmaW5lIE9fRFNZTkMg
ICAgICAwMTAwMDANCj4gKyNkZWZpbmUgT19BU1lOQyAgICAgIDAyMDAwMA0KPiArI2RlZmluZSBP
X0RJUkVDVCAgICAwMjAwMDAwDQo+ICsjZGVmaW5lIE9fTk9BVElNRSAgMDEwMDAwMDANCj4gICAj
ZW5kaWYNCj4gICANCj4gKyNkZWZpbmUgRklPTkJJTyAgICAgIDB4NTQyMQ0KPiArI2RlZmluZSBG
SU9BU1lOQyAgICAgMHg1NDUyDQo+ICsNCj4gICANCj4gICAvKiBHbGliYyBkb2VzIG5vdCBwcm92
aWRlIEtFRVBfU0laRSBhbmQgUFVOQ0hfSE9MRSBhbnltb3JlLiBJbnN0ZWFkIGl0DQo+ICAgICog
aW5jbHVkZXMgbGludXgvZmFsbG9jLmguDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 16:23:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 16:23:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Y48-0003oL-5X; Wed, 04 Sep 2019 16:23:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Tevb=W7=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5Y46-0003o7-MJ
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 16:23:26 +0000
X-Inumbo-ID: 51a2cc54-cf30-11e9-abbb-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.88]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 51a2cc54-cf30-11e9-abbb-12813bfff9fa;
 Wed, 04 Sep 2019 16:23:25 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=nYbchdjQW3M0D/2ohFTitER/rhfJmkDHJugWx35LCmy/YTANjYkbmfo06N02nff2B1e3OeQ2oAN47fLDkvYgY9PMP7yB25YrdFuPMnazX7FC8ou8f33Ji75+Ko+ruwd8K22sJOJk/O9N8rFYpwdtgFkY4L2RgD/QHC8wK9uELg8g9kVcKhzo0wufGeOeEfrU/xDPdjHvl4tNGBoyjg51+oyTxsxI7hML6kuRTrCiBV9QxQweGovfMciuYS2prubGDpd94CCpZFaES3yvs2f6DSAtoGmmZL7vyREaXypPcgHIkR4nNhemGEsuHCYT2TdO5NVBx/Zm1pTBVLQxVhBbrQ==
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=5ZmZM03uyvC5HnbZayqASeSwXKHx2kLmu6fSV3zUuME=;
 b=lSNV14X8c5zsb9MyPkt8EG/5GcxnD8K36DMKh1jaoTjICAwRMn6xhYikONBHn41zekugjguUAhV/ddm387rfD4XuzN7gAVxrDVoYmNWpEJCv05m19UMj9pkLL31hco0iaXM+GinMDf4xLFRotvIF795sAr0wmqLY9rmQdOHRgWeEx9nOCku4VCayDj2fr0wIVaUt05KsbZRdazz/Yd8m7tqEy4dUQd+H+KPW4u/keG7LkSO5GgUsR7V/b3bDWisyuxYHfmSaLlOBlgQpyZEEsyVvsbrO8B52zl6s7KhRek0UYjLX6/yWcyAd4wAL98sUORmZWnx0qGsMZDbTUZVY9A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5082.eurprd01.prod.exchangelabs.com (20.177.208.213) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.19; Wed, 4 Sep
 2019 16:23:23 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 4 Sep 2019
 16:23:23 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH] Update fcntl() related definitions
Thread-Index: AQHVYzFhCCxSBeU0yUGeFLifO0bTQqcbs7+A
Date: Wed, 4 Sep 2019 16:23:23 +0000
Message-ID: <97a36ace-384c-1bd2-0f57-a3871d20749e@stud.acs.upb.ro>
References: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0210.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::30) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 92a21483-cc4f-469d-deab-08d7315434e0
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5082; 
x-ms-traffictypediagnostic: PR1PR01MB5082:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-prvs: <PR1PR01MB50820CB98DF5A3AC80E1D0C5A6B80@PR1PR01MB5082.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:7219;
x-forefront-prvs: 0150F3F97D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(39850400004)(136003)(396003)(366004)(346002)(189003)(199004)(446003)(486006)(2906002)(86362001)(476003)(31686004)(2616005)(786003)(316002)(256004)(52116002)(66946007)(85202003)(76176011)(71200400001)(66446008)(64756008)(11346002)(102836004)(53546011)(26005)(99286004)(6116002)(186003)(3846002)(386003)(6506007)(7736002)(66476007)(81166006)(305945005)(8936002)(2501003)(6246003)(8676002)(31696002)(6512007)(229853002)(6306002)(5660300002)(71190400001)(6486002)(66066001)(25786009)(110136005)(85182001)(81156014)(14454004)(478600001)(66556008)(6436002)(53936002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5082;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 4Xb4fwPI376Wtb/MCuL772TXB9gGXNfU+SPLxmWyBVMBpVb0OPsyVOgR1RCEug9OqmmUTA8fOq29Sg8MZ7Ogpp7r5xmo9YV5ULuw2RzP9Vzy22o/Cl/v8PbWxqy/oZPkXcMkZ8C6uySHZk0d/Wv5xwCkxA/YHpQ5iG1eylJ4brzwr0M12eRU9WbJaZGyr3FPLMuU8/i/Xcv0jgGn/ya+f364kQbZdh8KsUuC8qqoEPmJUS61d0BKmhkpUzJiHIvSDpUZ2zVxDuQbJNj8w9c79PVv5SIt3GGdpWkE7vM/SS+QmunYoeMR7GUB+RQWViGm73mm/AoQ5PpPxVQJBUwI10X0dSoZs2MqA8iPxpSL5P0bcV5wtHqDdf713tXczAAby/RW89BYWUMCfGEVX/PyaduHWpM4lSQ90akVLGmx25s=
x-ms-exchange-transport-forked: True
Content-ID: <873A859C945495418AE8EC25BBE62221@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 92a21483-cc4f-469d-deab-08d7315434e0
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2019 16:23:23.1580 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: q9dNRB7SulEaWl03tBEiNMRWsFLvUB5T1B7JgKbPFRow+4H6svRkLeqAzSHCN0F1xHkqMla1Xhf3/SaHeAkW0k8ld7/tT7NoG+l5NKAOo1AoOdh997c9VI4OUd5piQOv
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5082
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Update fcntl() related
 definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpb
MV1odHRwczovL2dpdGh1Yi5jb20vY2xvdWRpdXMtc3lzdGVtcy9vc3YvYmxvYi9tYXN0ZXIvdGVz
dHMvdHN0LWZjbnRsLmNjDQoNCk9uIDA0LjA5LjIwMTkgMTc6NTksIENvc3RpbiBMdXB1IHdyb3Rl
Og0KPiBTaW5jZSB3ZSBhcmUgdXNpbmcgdGhlIGZjbnRsKCkgaW1wbGVtZW50YXRpb24gaW4gdmZz
Y29yZSwgd2UgZG9uJ3QgdXNlIG5ld2xpYidzDQo+IGFueSBtb3JlLiBUaGlzIHBhdGNoIGFsc28g
YWRkcyBzb21lIGZsYWdzIHRoYXQgYXJlIG5lZWRlZCBieSBmY250bCgpIGFuZCB0aGF0DQo+IHdl
cmUgY29waWVkIGZyb20gbXVzbCwganVzdCBsaWtlIHRoZSBwcmV2aW91cyBvbmVzIGZyb20gZmNu
dGwuaC4NCj4NCj4gU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4NCj4gLS0tDQo+ICAgTWFrZWZpbGUudWsgICAgIHwgIDIgKy0NCj4gICBpbmNsdWRlL2Zj
bnRsLmggfCAxMyArKysrKysrKysrLS0tDQo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRp
b25zKCspLCA0IGRlbGV0aW9ucygtKQ0KPg0KPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9N
YWtlZmlsZS51aw0KPiBpbmRleCBjMDJjMmYwLi4wMWRhNzI0IDEwMDY0NA0KPiAtLS0gYS9NYWtl
ZmlsZS51aw0KPiArKysgYi9NYWtlZmlsZS51aw0KPiBAQCAtNzkyLDcgKzc5Miw3IEBAIExJQk5F
V0xJQkNfU1JDUy15ICs9ICQoTElCTkVXTElCX0xJQkMpL3N0cmluZy93Y3NkdXAuYw0KPiAgICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICAgIyBOZXdsaWIvbGliYyBjb2RlIC0tIHN5c2NhbGxz
DQo+ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gLUxJQk5FV0xJQkNfU1JDUy15ICs9ICQo
TElCTkVXTElCX0xJQkMpL3N5c2NhbGxzL3N5c2ZjbnRsLmMNCj4gKyNMSUJORVdMSUJDX1NSQ1Mt
eSArPSAkKExJQk5FV0xJQl9MSUJDKS9zeXNjYWxscy9zeXNmY250bC5jDQo+ICAgDQo+ICAgIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gICAjIE5ld2xpYi9saWJjIGNvZGUgLS0gdGltZQ0KPiBk
aWZmIC0tZ2l0IGEvaW5jbHVkZS9mY250bC5oIGIvaW5jbHVkZS9mY250bC5oDQo+IGluZGV4IDI1
YTQ4MDguLjdhMzUwNTIgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvZmNudGwuaA0KPiArKysgYi9p
bmNsdWRlL2ZjbnRsLmgNCj4gQEAgLTExLDE1ICsxMSwyMiBAQA0KPiAgICNkZWZpbmUgT19ESVJF
Q1RPUlkgMDIwMDAwMA0KPiAgICNkZWZpbmUgT19DTE9FWEVDICAwMjAwMDAwMA0KPiAgICNkZWZp
bmUgT19EU1lOQyAgICAgIDAxMDAwMA0KPiAtI2VuZGlmDQo+IC0NCj4gLSNpZiAoKGRlZmluZWQg
Q09ORklHX0FSQ0hfQVJNXzY0KSB8fCAoZGVmaW5lZCBDT05GSUdfQVJDSF9BUk1fMzIpKQ0KPiAr
I2RlZmluZSBPX0FTWU5DICAgICAgMDIwMDAwDQo+ICsjZGVmaW5lIE9fRElSRUNUICAgICAwNDAw
MDANCj4gKyNkZWZpbmUgT19OT0FUSU1FICAwMTAwMDAwMA0KPiArI2VsaWYgKChkZWZpbmVkIENP
TkZJR19BUkNIX0FSTV82NCkgfHwgKGRlZmluZWQgQ09ORklHX0FSQ0hfQVJNXzMyKSkNCj4gICAj
ZGVmaW5lIE9fTk9GT0xMT1cgIDAxMDAwMDANCj4gICAjZGVmaW5lIE9fRElSRUNUT1JZICAwNDAw
MDANCj4gICAjZGVmaW5lIE9fQ0xPRVhFQyAgMDIwMDAwMDANCj4gICAjZGVmaW5lIE9fRFNZTkMg
ICAgICAwMTAwMDANCj4gKyNkZWZpbmUgT19BU1lOQyAgICAgIDAyMDAwMA0KPiArI2RlZmluZSBP
X0RJUkVDVCAgICAwMjAwMDAwDQo+ICsjZGVmaW5lIE9fTk9BVElNRSAgMDEwMDAwMDANCj4gICAj
ZW5kaWYNCj4gICANCj4gKyNkZWZpbmUgRklPTkJJTyAgICAgIDB4NTQyMQ0KPiArI2RlZmluZSBG
SU9BU1lOQyAgICAgMHg1NDUyDQo+ICsNCj4gICANCj4gICAvKiBHbGliYyBkb2VzIG5vdCBwcm92
aWRlIEtFRVBfU0laRSBhbmQgUFVOQ0hfSE9MRSBhbnltb3JlLiBJbnN0ZWFkIGl0DQo+ICAgICog
aW5jbHVkZXMgbGludXgvZmFsbG9jLmguDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 16:24:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 16:24:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Y5J-0003qf-Ap; Wed, 04 Sep 2019 16:24:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Tevb=W7=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5Y5H-0003qV-VB
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 16:24:39 +0000
X-Inumbo-ID: 7d84ad38-cf30-11e9-abbb-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.78]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7d84ad38-cf30-11e9-abbb-12813bfff9fa;
 Wed, 04 Sep 2019 16:24:39 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AMcB/6OsbaJCiiS2xDQrOoPaPtDlqyHJFneqNme1MOg5l4dPhNmj1VMZ4xHt2XlzCElUll4VC3703WyjLh0O5mcVGv1FhWkGSjyhuV3wqX1rhZ7t2pu9L6G9spEr0C556D0kk/bxFrhxoCLklJY4ix/TM2zHKWnUs/zq2//RjqlQfS0Ew/dcvgmcG742eRwJysZihVSGrY0QrXtUJFeNkiE3urVm6xoCjkdymLF7hmg6ocmou7rPuLTVU3G8QMYAZpQWbaf/jJX237J4fwqUM8wys6jFalRx5ClDcUog+IF9SN5YJDV9u8mP1t5w3FN0QDD7cpoG6wO5M0CYHyWh8g==
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=/vbKjuzAnoHR5+VmH+UjKxxDeZ8oEUsnjHfonvUweNg=;
 b=jtW6+RYjPCyZEvTIU/kSDII7NmJVeyHJV6BYlANv6joCfrRk2lKiFes9YA+RCDkonVlyGHCfIYScyLoVPipKTRUHsg3k00X/zjUujZrjoqjSjUQfpdFUFkynN4CRfDPfl1kY56qXqjTiHAyXXjBFTOMyFJKbWmCzdzk1I9O7cUhJKsdhf279gGyPnOEXPdPsU+UbOGA7wbaIA2QyjYOJOqIPhNZ14RPTXY/avAIp+ZKKFKCr7JO8WT84Hi5nnTNefy6wSnDnlN1kDqEWs4q04uj7uRfqDOSp/+NgxI9ZagteSrN/W8RW4n4EYGFxUKCeIwBNjKUSMcxeEHT3sAW4zw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5082.eurprd01.prod.exchangelabs.com (20.177.208.213) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.19; Wed, 4 Sep
 2019 16:24:37 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 4 Sep 2019
 16:24:37 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH] Update fcntl() related definitions
Thread-Index: AQHVYzFhCCxSBeU0yUGeFLifO0bTQqcbtBeA
Date: Wed, 4 Sep 2019 16:24:37 +0000
Message-ID: <2243bf87-23c9-4352-6887-b8db6c6bce69@stud.acs.upb.ro>
References: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0117.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::33) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.105]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 4d71881e-81bd-4b47-f28c-08d7315460f3
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5082; 
x-ms-traffictypediagnostic: PR1PR01MB5082:
x-microsoft-antispam-prvs: <PR1PR01MB5082C1531558B4EC986E5362A6B80@PR1PR01MB5082.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6430;
x-forefront-prvs: 0150F3F97D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(39850400004)(136003)(396003)(366004)(346002)(189003)(199004)(446003)(486006)(2906002)(86362001)(476003)(31686004)(2616005)(786003)(316002)(256004)(52116002)(66946007)(85202003)(76176011)(71200400001)(66446008)(64756008)(11346002)(102836004)(53546011)(26005)(99286004)(6116002)(186003)(3846002)(386003)(6506007)(7736002)(66476007)(81166006)(305945005)(8936002)(2501003)(6246003)(8676002)(31696002)(6512007)(229853002)(5660300002)(71190400001)(6486002)(66066001)(25786009)(110136005)(85182001)(81156014)(14454004)(478600001)(66556008)(6436002)(53936002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5082;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: WL2HkSqRPRDb+/sYwAE2wo8FbMqNRwawhgkm52RR1BopzSQKAPbzVWv0JCWEnv7xDlBvbtxgXNLom07UUf0fLOzn8jzP+VCtY+1U+u/Qf2JqplD+RvRVlOeKkJWJr7ZyvrJGKfNc+GtXrMRKQn/6F+3VrDVahsGK0flGnWfbmV07PAgCdH7BhMz6L4fEi9CDPcmWikVret25SgE5/kql/TqaSb2NHGIP11VUQXgwB9GdqF3UOA8iWrDjX34SSGWqU9jmkXDUrdjeMLDhMfqL8i65unughx+Jts7CrLqNsBSc6d3/d8ckG+fWgz4AFrwdJYAiO99y4tBOZbNE97E7XiPcILtZ1itM0o+lZ0dXwKf2bHhYWL/qoaPe20NoQYo4+16NJIBRvJlMFINw0pf0z+PNpG4BsYwG6sGsl2TooTU=
x-ms-exchange-transport-forked: True
Content-ID: <EC2A3B8DD7C53942B85F50B0E94F146C@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 4d71881e-81bd-4b47-f28c-08d7315460f3
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2019 16:24:37.1037 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: uMDHTIXdtdnFQMxjzT7/dAk16M5OccolWXXFzxBcm0qz1p07Ew5mapjX7AJkDtbPy5gxyyUWjMxBIP3U+T2BoYy4gsryuavE5S1PVM8Gu6pddP2iRXfLNTaoCaE713sW
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5082
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Update fcntl() related
 definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdTx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KDQpPbiAwNC4wOS4yMDE5IDE3OjU5LCBDb3N0aW4gTHVwdSB3cm90ZToNCj4g
U2luY2Ugd2UgYXJlIHVzaW5nIHRoZSBmY250bCgpIGltcGxlbWVudGF0aW9uIGluIHZmc2NvcmUs
IHdlIGRvbid0IHVzZSBuZXdsaWIncw0KPiBhbnkgbW9yZS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMg
c29tZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQgYnkgZmNudGwoKSBhbmQgdGhhdA0KPiB3ZXJlIGNv
cGllZCBmcm9tIG11c2wsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgb25lcyBmcm9tIGZjbnRsLmgu
DQo+DQo+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+
DQo+IC0tLQ0KPiAgIE1ha2VmaWxlLnVrICAgICB8ICAyICstDQo+ICAgaW5jbHVkZS9mY250bC5o
IHwgMTMgKysrKysrKysrKy0tLQ0KPiAgIDIgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygr
KSwgNCBkZWxldGlvbnMoLSkNCj4NCj4gZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZp
bGUudWsNCj4gaW5kZXggYzAyYzJmMC4uMDFkYTcyNCAxMDA2NDQNCj4gLS0tIGEvTWFrZWZpbGUu
dWsNCj4gKysrIGIvTWFrZWZpbGUudWsNCj4gQEAgLTc5Miw3ICs3OTIsNyBAQCBMSUJORVdMSUJD
X1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9zdHJpbmcvd2NzZHVwLmMNCj4gICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KPiAgICMgTmV3bGliL2xpYmMgY29kZSAtLSBzeXNjYWxscw0KPiAg
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+IC1MSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5F
V0xJQl9MSUJDKS9zeXNjYWxscy9zeXNmY250bC5jDQo+ICsjTElCTkVXTElCQ19TUkNTLXkgKz0g
JChMSUJORVdMSUJfTElCQykvc3lzY2FsbHMvc3lzZmNudGwuYw0KPiAgIA0KPiAgICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjDQo+ICAgIyBOZXdsaWIvbGliYyBjb2RlIC0tIHRpbWUNCj4gZGlmZiAt
LWdpdCBhL2luY2x1ZGUvZmNudGwuaCBiL2luY2x1ZGUvZmNudGwuaA0KPiBpbmRleCAyNWE0ODA4
Li43YTM1MDUyIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2ZjbnRsLmgNCj4gKysrIGIvaW5jbHVk
ZS9mY250bC5oDQo+IEBAIC0xMSwxNSArMTEsMjIgQEANCj4gICAjZGVmaW5lIE9fRElSRUNUT1JZ
IDAyMDAwMDANCj4gICAjZGVmaW5lIE9fQ0xPRVhFQyAgMDIwMDAwMDANCj4gICAjZGVmaW5lIE9f
RFNZTkMgICAgICAwMTAwMDANCj4gLSNlbmRpZg0KPiAtDQo+IC0jaWYgKChkZWZpbmVkIENPTkZJ
R19BUkNIX0FSTV82NCkgfHwgKGRlZmluZWQgQ09ORklHX0FSQ0hfQVJNXzMyKSkNCj4gKyNkZWZp
bmUgT19BU1lOQyAgICAgIDAyMDAwMA0KPiArI2RlZmluZSBPX0RJUkVDVCAgICAgMDQwMDAwDQo+
ICsjZGVmaW5lIE9fTk9BVElNRSAgMDEwMDAwMDANCj4gKyNlbGlmICgoZGVmaW5lZCBDT05GSUdf
QVJDSF9BUk1fNjQpIHx8IChkZWZpbmVkIENPTkZJR19BUkNIX0FSTV8zMikpDQo+ICAgI2RlZmlu
ZSBPX05PRk9MTE9XICAwMTAwMDAwDQo+ICAgI2RlZmluZSBPX0RJUkVDVE9SWSAgMDQwMDAwDQo+
ICAgI2RlZmluZSBPX0NMT0VYRUMgIDAyMDAwMDAwDQo+ICAgI2RlZmluZSBPX0RTWU5DICAgICAg
MDEwMDAwDQo+ICsjZGVmaW5lIE9fQVNZTkMgICAgICAwMjAwMDANCj4gKyNkZWZpbmUgT19ESVJF
Q1QgICAgMDIwMDAwMA0KPiArI2RlZmluZSBPX05PQVRJTUUgIDAxMDAwMDAwDQo+ICAgI2VuZGlm
DQo+ICAgDQo+ICsjZGVmaW5lIEZJT05CSU8gICAgICAweDU0MjENCj4gKyNkZWZpbmUgRklPQVNZ
TkMgICAgIDB4NTQ1Mg0KPiArDQo+ICAgDQo+ICAgLyogR2xpYmMgZG9lcyBub3QgcHJvdmlkZSBL
RUVQX1NJWkUgYW5kIFBVTkNIX0hPTEUgYW55bW9yZS4gSW5zdGVhZCBpdA0KPiAgICAqIGluY2x1
ZGVzIGxpbnV4L2ZhbGxvYy5oLg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 16:24:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 16:24:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Y5J-0003qk-Ch; Wed, 04 Sep 2019 16:24:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Tevb=W7=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5Y5I-0003qW-0a
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 16:24:40 +0000
X-Inumbo-ID: 7d84ad38-cf30-11e9-abbb-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.78]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7d84ad38-cf30-11e9-abbb-12813bfff9fa;
 Wed, 04 Sep 2019 16:24:39 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AMcB/6OsbaJCiiS2xDQrOoPaPtDlqyHJFneqNme1MOg5l4dPhNmj1VMZ4xHt2XlzCElUll4VC3703WyjLh0O5mcVGv1FhWkGSjyhuV3wqX1rhZ7t2pu9L6G9spEr0C556D0kk/bxFrhxoCLklJY4ix/TM2zHKWnUs/zq2//RjqlQfS0Ew/dcvgmcG742eRwJysZihVSGrY0QrXtUJFeNkiE3urVm6xoCjkdymLF7hmg6ocmou7rPuLTVU3G8QMYAZpQWbaf/jJX237J4fwqUM8wys6jFalRx5ClDcUog+IF9SN5YJDV9u8mP1t5w3FN0QDD7cpoG6wO5M0CYHyWh8g==
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=/vbKjuzAnoHR5+VmH+UjKxxDeZ8oEUsnjHfonvUweNg=;
 b=jtW6+RYjPCyZEvTIU/kSDII7NmJVeyHJV6BYlANv6joCfrRk2lKiFes9YA+RCDkonVlyGHCfIYScyLoVPipKTRUHsg3k00X/zjUujZrjoqjSjUQfpdFUFkynN4CRfDPfl1kY56qXqjTiHAyXXjBFTOMyFJKbWmCzdzk1I9O7cUhJKsdhf279gGyPnOEXPdPsU+UbOGA7wbaIA2QyjYOJOqIPhNZ14RPTXY/avAIp+ZKKFKCr7JO8WT84Hi5nnTNefy6wSnDnlN1kDqEWs4q04uj7uRfqDOSp/+NgxI9ZagteSrN/W8RW4n4EYGFxUKCeIwBNjKUSMcxeEHT3sAW4zw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5082.eurprd01.prod.exchangelabs.com (20.177.208.213) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.19; Wed, 4 Sep
 2019 16:24:37 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 4 Sep 2019
 16:24:37 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH] Update fcntl() related definitions
Thread-Index: AQHVYzFhCCxSBeU0yUGeFLifO0bTQqcbtBeA
Date: Wed, 4 Sep 2019 16:24:37 +0000
Message-ID: <2243bf87-23c9-4352-6887-b8db6c6bce69@stud.acs.upb.ro>
References: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904145936.6398-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0117.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::33) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.105]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 4d71881e-81bd-4b47-f28c-08d7315460f3
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5082; 
x-ms-traffictypediagnostic: PR1PR01MB5082:
x-microsoft-antispam-prvs: <PR1PR01MB5082C1531558B4EC986E5362A6B80@PR1PR01MB5082.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6430;
x-forefront-prvs: 0150F3F97D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(39850400004)(136003)(396003)(366004)(346002)(189003)(199004)(446003)(486006)(2906002)(86362001)(476003)(31686004)(2616005)(786003)(316002)(256004)(52116002)(66946007)(85202003)(76176011)(71200400001)(66446008)(64756008)(11346002)(102836004)(53546011)(26005)(99286004)(6116002)(186003)(3846002)(386003)(6506007)(7736002)(66476007)(81166006)(305945005)(8936002)(2501003)(6246003)(8676002)(31696002)(6512007)(229853002)(5660300002)(71190400001)(6486002)(66066001)(25786009)(110136005)(85182001)(81156014)(14454004)(478600001)(66556008)(6436002)(53936002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5082;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: WL2HkSqRPRDb+/sYwAE2wo8FbMqNRwawhgkm52RR1BopzSQKAPbzVWv0JCWEnv7xDlBvbtxgXNLom07UUf0fLOzn8jzP+VCtY+1U+u/Qf2JqplD+RvRVlOeKkJWJr7ZyvrJGKfNc+GtXrMRKQn/6F+3VrDVahsGK0flGnWfbmV07PAgCdH7BhMz6L4fEi9CDPcmWikVret25SgE5/kql/TqaSb2NHGIP11VUQXgwB9GdqF3UOA8iWrDjX34SSGWqU9jmkXDUrdjeMLDhMfqL8i65unughx+Jts7CrLqNsBSc6d3/d8ckG+fWgz4AFrwdJYAiO99y4tBOZbNE97E7XiPcILtZ1itM0o+lZ0dXwKf2bHhYWL/qoaPe20NoQYo4+16NJIBRvJlMFINw0pf0z+PNpG4BsYwG6sGsl2TooTU=
x-ms-exchange-transport-forked: True
Content-ID: <EC2A3B8DD7C53942B85F50B0E94F146C@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 4d71881e-81bd-4b47-f28c-08d7315460f3
X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Sep 2019 16:24:37.1037 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: uMDHTIXdtdnFQMxjzT7/dAk16M5OccolWXXFzxBcm0qz1p07Ew5mapjX7AJkDtbPy5gxyyUWjMxBIP3U+T2BoYy4gsryuavE5S1PVM8Gu6pddP2iRXfLNTaoCaE713sW
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5082
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Update fcntl() related
 definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdTx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KDQpPbiAwNC4wOS4yMDE5IDE3OjU5LCBDb3N0aW4gTHVwdSB3cm90ZToNCj4g
U2luY2Ugd2UgYXJlIHVzaW5nIHRoZSBmY250bCgpIGltcGxlbWVudGF0aW9uIGluIHZmc2NvcmUs
IHdlIGRvbid0IHVzZSBuZXdsaWIncw0KPiBhbnkgbW9yZS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMg
c29tZSBmbGFncyB0aGF0IGFyZSBuZWVkZWQgYnkgZmNudGwoKSBhbmQgdGhhdA0KPiB3ZXJlIGNv
cGllZCBmcm9tIG11c2wsIGp1c3QgbGlrZSB0aGUgcHJldmlvdXMgb25lcyBmcm9tIGZjbnRsLmgu
DQo+DQo+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+
DQo+IC0tLQ0KPiAgIE1ha2VmaWxlLnVrICAgICB8ICAyICstDQo+ICAgaW5jbHVkZS9mY250bC5o
IHwgMTMgKysrKysrKysrKy0tLQ0KPiAgIDIgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0aW9ucygr
KSwgNCBkZWxldGlvbnMoLSkNCj4NCj4gZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZp
bGUudWsNCj4gaW5kZXggYzAyYzJmMC4uMDFkYTcyNCAxMDA2NDQNCj4gLS0tIGEvTWFrZWZpbGUu
dWsNCj4gKysrIGIvTWFrZWZpbGUudWsNCj4gQEAgLTc5Miw3ICs3OTIsNyBAQCBMSUJORVdMSUJD
X1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9zdHJpbmcvd2NzZHVwLmMNCj4gICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KPiAgICMgTmV3bGliL2xpYmMgY29kZSAtLSBzeXNjYWxscw0KPiAg
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+IC1MSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5F
V0xJQl9MSUJDKS9zeXNjYWxscy9zeXNmY250bC5jDQo+ICsjTElCTkVXTElCQ19TUkNTLXkgKz0g
JChMSUJORVdMSUJfTElCQykvc3lzY2FsbHMvc3lzZmNudGwuYw0KPiAgIA0KPiAgICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjDQo+ICAgIyBOZXdsaWIvbGliYyBjb2RlIC0tIHRpbWUNCj4gZGlmZiAt
LWdpdCBhL2luY2x1ZGUvZmNudGwuaCBiL2luY2x1ZGUvZmNudGwuaA0KPiBpbmRleCAyNWE0ODA4
Li43YTM1MDUyIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2ZjbnRsLmgNCj4gKysrIGIvaW5jbHVk
ZS9mY250bC5oDQo+IEBAIC0xMSwxNSArMTEsMjIgQEANCj4gICAjZGVmaW5lIE9fRElSRUNUT1JZ
IDAyMDAwMDANCj4gICAjZGVmaW5lIE9fQ0xPRVhFQyAgMDIwMDAwMDANCj4gICAjZGVmaW5lIE9f
RFNZTkMgICAgICAwMTAwMDANCj4gLSNlbmRpZg0KPiAtDQo+IC0jaWYgKChkZWZpbmVkIENPTkZJ
R19BUkNIX0FSTV82NCkgfHwgKGRlZmluZWQgQ09ORklHX0FSQ0hfQVJNXzMyKSkNCj4gKyNkZWZp
bmUgT19BU1lOQyAgICAgIDAyMDAwMA0KPiArI2RlZmluZSBPX0RJUkVDVCAgICAgMDQwMDAwDQo+
ICsjZGVmaW5lIE9fTk9BVElNRSAgMDEwMDAwMDANCj4gKyNlbGlmICgoZGVmaW5lZCBDT05GSUdf
QVJDSF9BUk1fNjQpIHx8IChkZWZpbmVkIENPTkZJR19BUkNIX0FSTV8zMikpDQo+ICAgI2RlZmlu
ZSBPX05PRk9MTE9XICAwMTAwMDAwDQo+ICAgI2RlZmluZSBPX0RJUkVDVE9SWSAgMDQwMDAwDQo+
ICAgI2RlZmluZSBPX0NMT0VYRUMgIDAyMDAwMDAwDQo+ICAgI2RlZmluZSBPX0RTWU5DICAgICAg
MDEwMDAwDQo+ICsjZGVmaW5lIE9fQVNZTkMgICAgICAwMjAwMDANCj4gKyNkZWZpbmUgT19ESVJF
Q1QgICAgMDIwMDAwMA0KPiArI2RlZmluZSBPX05PQVRJTUUgIDAxMDAwMDAwDQo+ICAgI2VuZGlm
DQo+ICAgDQo+ICsjZGVmaW5lIEZJT05CSU8gICAgICAweDU0MjENCj4gKyNkZWZpbmUgRklPQVNZ
TkMgICAgIDB4NTQ1Mg0KPiArDQo+ICAgDQo+ICAgLyogR2xpYmMgZG9lcyBub3QgcHJvdmlkZSBL
RUVQX1NJWkUgYW5kIFBVTkNIX0hPTEUgYW55bW9yZS4gSW5zdGVhZCBpdA0KPiAgICAqIGluY2x1
ZGVzIGxpbnV4L2ZhbGxvYy5oLg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 16:47:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 16:47:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5YRD-0005YN-GZ; Wed, 04 Sep 2019 16:47:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=TTWc=W7=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i5YRC-0005YI-G8
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 16:47:18 +0000
X-Inumbo-ID: a7121732-cf33-11e9-978d-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a7121732-cf33-11e9-978d-bc764e2007e4;
 Wed, 04 Sep 2019 16:47:17 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id t16so22050237wra.6
 for <minios-devel@lists.xen.org>; Wed, 04 Sep 2019 09:47:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=Sp8rUflx3VUDmrphtOu+hPdxHo2L+RmRZxE3NjVeNXM=;
 b=dtauZMbWinvef1F7+t7BS2H08+wpILUHB/b2tdj2nS/pCssd5Y+lDGPgdieItMfB7I
 S7U8C7n1wOUNTFNy+pcoOy+jlgfvuKKGe+P62L1S33XELq2ATvVZ3FrmdYin94W++FxQ
 EBTQBj+wwYTMewSaYNjR8Wtm8y1Ugz8XNFI0UxgFe7RRqRwr4Mozv1vWFiLzXkEpYCeT
 5geaOA7qSabj8C0rHi2KRR0hwzRrln8z55UUCzNi2SgDCXIZiVoK8vAqyf6Cqwi5DDOj
 pK8gNRHVEmw7ys2QsnwutAF70BqKaTe38t812MN2DgB0wCjsST56fuystLZL/prlm4rK
 7eJg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=Sp8rUflx3VUDmrphtOu+hPdxHo2L+RmRZxE3NjVeNXM=;
 b=ByVTsPcT3QHZ7hULYg3iGiSx35XTavw1S6Yk48S4XaF61i1KxoEsgrYvjizGGjZUki
 i/1Ei3ZKvgrVrPSCTrTMRaV00dXF/ZCIVJO2bkA2SGWThcrEdBywF2U8fWsmFU7TZJkj
 5gEnnsoF5V3vziayB+gMoBofRsjZbLrX0EGTM184d72+pMMjlHWQRrKy67UJAwlRRBjT
 i9mmuwHCs7qn3YpJ9xhye+6SSuu6cdVnE03lDW+sQ5XuidiSxrbu3MDNbLerm9NymrXR
 3QTxY9XBMkaCuQ/fAEg3oBXnRiK3BMl5EpicI90jkRK7UkToVSSvOb4S+J2B1VGXrIS7
 eZxQ==
X-Gm-Message-State: APjAAAXlYzWnZdeB8cBpl/I8skCAEFTOMxq6UQxT9S7U1VOyGQYjGc2R
 3NWDaC8qTHy/nOst0iKxw40Mlr8V
X-Google-Smtp-Source: APXvYqyR/q0LtqWz0CIEzUiXRWKUtPDda5Yb2XHTG6SYOGy0LqvxIbsUaYlPAfUB2z2QvSUCGtvQTQ==
X-Received: by 2002:a5d:480d:: with SMTP id l13mr48273490wrq.321.1567615635970; 
 Wed, 04 Sep 2019 09:47:15 -0700 (PDT)
Received: from [192.168.1.103] ([82.76.238.150])
 by smtp.gmail.com with ESMTPSA id f186sm6884555wmg.21.2019.09.04.09.47.15
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 04 Sep 2019 09:47:15 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190904154716.11492-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <30f94656-74a0-a2a3-f298-d55bf708c532@gmail.com>
Date: Wed, 4 Sep 2019 19:47:14 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190904154716.11492-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Revisit the pipe
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBWbGFkIQoKUmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5w
dWIucm8+CgpPbiA5LzQvMTkgNjo0NyBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdy
b3RlOgo+IFRoZSBwaXBlKC4uLikgc3R1YiBzaG91bGQgcmV0dXJuIGFuIGVycm9yLiBUaGlzIGlz
IGJlY3Vhc2UgdGhlIGNhbGxlZQo+IHdpbGwgdHJ5IHRvIHVzZSB0aGUgZmlsZSBkZXNjcmlwdG9y
cyByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFZsYWQtQW5k
cmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KPiAtLS0KPiAg
ZmlsZS5jIHwgMyArKy0KPiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxl
dGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9maWxlLmMgYi9maWxlLmMKPiBpbmRleCAxNTY2Njc5
Li43ZDc4Zjc5IDEwMDY0NAo+IC0tLSBhL2ZpbGUuYwo+ICsrKyBiL2ZpbGUuYwo+IEBAIC0xMTYs
NyArMTE2LDggQEAgaW50IHV0aW1lcyhjb25zdCBjaGFyICpmaWxlbmFtZSBfX3VudXNlZCwKPiAg
Cj4gIGludCBwaXBlKGludCBwaXBlZmRbMl0gX191bnVzZWQpCj4gIHsKPiAtCXJldHVybiAwOwo+
ICsJZXJybm8gPSBFRkFVTFQ7Cj4gKwlyZXR1cm4gLTE7Cj4gIH0KPiAgCj4gIGNoYXIgKnJlYWxw
YXRoKGNvbnN0IGNoYXIgKnJlc3RyaWN0IGZpbGVfbmFtZSwgY2hhciAqcmVzdHJpY3QgcmVzb2x2
ZWRfbmFtZSkKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 18:12:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 18:12:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Zlw-0004oH-HO; Wed, 04 Sep 2019 18:12:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=WgxQ=W7=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i5Zlw-0004nr-5g
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 18:12:48 +0000
X-Inumbo-ID: 8f3ae5a6-cf3f-11e9-abbd-12813bfff9fa
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8f3ae5a6-cf3f-11e9-abbd-12813bfff9fa;
 Wed, 04 Sep 2019 18:12:31 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlY-0005xK-9n; Wed, 04 Sep 2019 18:12:24 +0000
Received: from localhost ([127.0.0.1] helo=localhost.localdomain)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlY-0000JA-38; Wed, 04 Sep 2019 18:12:24 +0000
From: Lars Kurth <lars.kurth@citrix.com>
To: xen-devel@lists.xenproject.org
Date: Wed,  4 Sep 2019 19:12:17 +0100
Message-Id: <00c6c80b12b1d201d7140626c7efe9d75645dee9.1567620587.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
Subject: [Minios-devel] [PATCH] Import v1.4 of Contributor Covenant CoC
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgotLS0KQ2M6
IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogeGVuLWFwaUBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpDYzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBtaXJh
Z2Vvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogY29tbWl0dGVyc0B4ZW5wcm9qZWN0
Lm9yZwotLS0KIGNvZGUtb2YtY29uZHVjdC5tZCB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDc2IGluc2Vy
dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb2RlLW9mLWNvbmR1Y3QubWQKCmRpZmYgLS1n
aXQgYS9jb2RlLW9mLWNvbmR1Y3QubWQgYi9jb2RlLW9mLWNvbmR1Y3QubWQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiMjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvZGUt
b2YtY29uZHVjdC5tZApAQCAtMCwwICsxLDc2IEBACisjIENvbnRyaWJ1dG9yIENvdmVuYW50IENv
ZGUgb2YgQ29uZHVjdAorCisjIyBPdXIgUGxlZGdlCisKK0luIHRoZSBpbnRlcmVzdCBvZiBmb3N0
ZXJpbmcgYW4gb3BlbiBhbmQgd2VsY29taW5nIGVudmlyb25tZW50LCB3ZSBhcworY29udHJpYnV0
b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFrZSBwYXJ0aWNpcGF0aW9uIGluIG91ciBw
cm9qZWN0IGFuZAorb3VyIGNvbW11bml0eSBhIGhhcmFzc21lbnQtZnJlZSBleHBlcmllbmNlIGZv
ciBldmVyeW9uZSwgcmVnYXJkbGVzcyBvZiBhZ2UsIGJvZHkKK3NpemUsIGRpc2FiaWxpdHksIGV0
aG5pY2l0eSwgc2V4IGNoYXJhY3RlcmlzdGljcywgZ2VuZGVyIGlkZW50aXR5IGFuZCBleHByZXNz
aW9uLAorbGV2ZWwgb2YgZXhwZXJpZW5jZSwgZWR1Y2F0aW9uLCBzb2Npby1lY29ub21pYyBzdGF0
dXMsIG5hdGlvbmFsaXR5LCBwZXJzb25hbAorYXBwZWFyYW5jZSwgcmFjZSwgcmVsaWdpb24sIG9y
IHNleHVhbCBpZGVudGl0eSBhbmQgb3JpZW50YXRpb24uCisKKyMjIE91ciBTdGFuZGFyZHMKKwor
RXhhbXBsZXMgb2YgYmVoYXZpb3IgdGhhdCBjb250cmlidXRlcyB0byBjcmVhdGluZyBhIHBvc2l0
aXZlIGVudmlyb25tZW50CitpbmNsdWRlOgorCisqIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVz
aXZlIGxhbmd1YWdlCisqIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMg
YW5kIGV4cGVyaWVuY2VzCisqIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0
aWNpc20KKyogRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5CisqIFNo
b3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCisKK0V4YW1wbGVz
IG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvciBieSBwYXJ0aWNpcGFudHMgaW5jbHVkZToKKworKiBU
aGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNl
eHVhbCBhdHRlbnRpb24gb3IKKyAgYWR2YW5jZXMKKyogVHJvbGxpbmcsIGluc3VsdGluZy9kZXJv
Z2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsIGF0dGFja3MKKyogUHVi
bGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAorKiBQdWJsaXNoaW5nIG90aGVycycgcHJpdmF0ZSBp
bmZvcm1hdGlvbiwgc3VjaCBhcyBhIHBoeXNpY2FsIG9yIGVsZWN0cm9uaWMKKyAgYWRkcmVzcywg
d2l0aG91dCBleHBsaWNpdCBwZXJtaXNzaW9uCisqIE90aGVyIGNvbmR1Y3Qgd2hpY2ggY291bGQg
cmVhc29uYWJseSBiZSBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUgaW4gYQorICBwcm9mZXNzaW9u
YWwgc2V0dGluZworCisjIyBPdXIgUmVzcG9uc2liaWxpdGllcworCitQcm9qZWN0IG1haW50YWlu
ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgY2xhcmlmeWluZyB0aGUgc3RhbmRhcmRzIG9mIGFjY2Vw
dGFibGUKK2JlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQg
ZmFpciBjb3JyZWN0aXZlIGFjdGlvbiBpbgorcmVzcG9uc2UgdG8gYW55IGluc3RhbmNlcyBvZiB1
bmFjY2VwdGFibGUgYmVoYXZpb3IuCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmln
aHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwgb3IKK3JlamVjdCBjb21tZW50
cywgY29tbWl0cywgY29kZSwgd2lraSBlZGl0cywgaXNzdWVzLCBhbmQgb3RoZXIgY29udHJpYnV0
aW9ucwordGhhdCBhcmUgbm90IGFsaWduZWQgdG8gdGhpcyBDb2RlIG9mIENvbmR1Y3QsIG9yIHRv
IGJhbiB0ZW1wb3JhcmlseSBvcgorcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhl
ciBiZWhhdmlvcnMgdGhhdCB0aGV5IGRlZW0gaW5hcHByb3ByaWF0ZSwKK3RocmVhdGVuaW5nLCBv
ZmZlbnNpdmUsIG9yIGhhcm1mdWwuCisKKyMjIFNjb3BlCisKK1RoaXMgQ29kZSBvZiBDb25kdWN0
IGFwcGxpZXMgd2l0aGluIGFsbCBwcm9qZWN0IHNwYWNlcywgYW5kIGl0IGFsc28gYXBwbGllcyB3
aGVuCithbiBpbmRpdmlkdWFsIGlzIHJlcHJlc2VudGluZyB0aGUgcHJvamVjdCBvciBpdHMgY29t
bXVuaXR5IGluIHB1YmxpYyBzcGFjZXMuCitFeGFtcGxlcyBvZiByZXByZXNlbnRpbmcgYSBwcm9q
ZWN0IG9yIGNvbW11bml0eSBpbmNsdWRlIHVzaW5nIGFuIG9mZmljaWFsCitwcm9qZWN0IGUtbWFp
bCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEgYWNjb3VudCwg
b3IgYWN0aW5nCithcyBhbiBhcHBvaW50ZWQgcmVwcmVzZW50YXRpdmUgYXQgYW4gb25saW5lIG9y
IG9mZmxpbmUgZXZlbnQuIFJlcHJlc2VudGF0aW9uIG9mCithIHByb2plY3QgbWF5IGJlIGZ1cnRo
ZXIgZGVmaW5lZCBhbmQgY2xhcmlmaWVkIGJ5IHByb2plY3QgbWFpbnRhaW5lcnMuCisKKyMjIEVu
Zm9yY2VtZW50CisKK0luc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lz
ZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5IGJlCityZXBvcnRlZCBieSBjb250YWN0aW5nIHRo
ZSBwcm9qZWN0IHRlYW0gYXQgW0lOU0VSVCBFTUFJTCBBRERSRVNTXS4gQWxsCitjb21wbGFpbnRz
IHdpbGwgYmUgcmV2aWV3ZWQgYW5kIGludmVzdGlnYXRlZCBhbmQgd2lsbCByZXN1bHQgaW4gYSBy
ZXNwb25zZSB0aGF0CitpcyBkZWVtZWQgbmVjZXNzYXJ5IGFuZCBhcHByb3ByaWF0ZSB0byB0aGUg
Y2lyY3Vtc3RhbmNlcy4gVGhlIHByb2plY3QgdGVhbSBpcworb2JsaWdhdGVkIHRvIG1haW50YWlu
IGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0byB0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRl
bnQuCitGdXJ0aGVyIGRldGFpbHMgb2Ygc3BlY2lmaWMgZW5mb3JjZW1lbnQgcG9saWNpZXMgbWF5
IGJlIHBvc3RlZCBzZXBhcmF0ZWx5LgorCitQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3Qg
Zm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbiBnb29kCitmYWl0aCBtYXkg
ZmFjZSB0ZW1wb3Jhcnkgb3IgcGVybWFuZW50IHJlcGVyY3Vzc2lvbnMgYXMgZGV0ZXJtaW5lZCBi
eSBvdGhlcgorbWVtYmVycyBvZiB0aGUgcHJvamVjdCdzIGxlYWRlcnNoaXAuCisKKyMjIEF0dHJp
YnV0aW9uCisKK1RoaXMgQ29kZSBvZiBDb25kdWN0IGlzIGFkYXB0ZWQgZnJvbSB0aGUgW0NvbnRy
aWJ1dG9yIENvdmVuYW50XVtob21lcGFnZV0sIHZlcnNpb24gMS40LAorYXZhaWxhYmxlIGF0IGh0
dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy92ZXJzaW9uLzEvNC9jb2RlLW9mLWNv
bmR1Y3QuaHRtbAorCitbaG9tZXBhZ2VdOiBodHRwczovL3d3dy5jb250cmlidXRvci1jb3ZlbmFu
dC5vcmcKKworRm9yIGFuc3dlcnMgdG8gY29tbW9uIHF1ZXN0aW9ucyBhYm91dCB0aGlzIGNvZGUg
b2YgY29uZHVjdCwgc2VlCitodHRwczovL3d3dy5jb250cmlidXRvci1jb3ZlbmFudC5vcmcvZmFx
Ci0tIAoyLjEzLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 18:12:50 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 18:12:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Zly-0004q5-NP; Wed, 04 Sep 2019 18:12:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=WgxQ=W7=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i5Zlx-0004pF-J4
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 18:12:49 +0000
X-Inumbo-ID: 8d7b386a-cf3f-11e9-a337-bc764e2007e4
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8d7b386a-cf3f-11e9-a337-bc764e2007e4;
 Wed, 04 Sep 2019 18:12:27 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlX-0005xF-4H; Wed, 04 Sep 2019 18:12:23 +0000
Received: from localhost ([127.0.0.1] helo=localhost.localdomain)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlW-0000JA-U7; Wed, 04 Sep 2019 18:12:23 +0000
From: Lars Kurth <lars.kurth@citrix.com>
To: xen-devel@lists.xenproject.org
Date: Wed,  4 Sep 2019 19:12:16 +0100
Message-Id: <cover.1567620587.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
MIME-Version: 1.0
Subject: [Minios-devel] [PATCH 0/2] Code of Conduct (based on Contributor
 Covenant v1.4)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
Content-Type: multipart/mixed; boundary="===============0295286236817137053=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============0295286236817137053==
Content-Type: text/plain; charset=N
Content-Transfer-Encoding: 8bit

This series proposes a concrete version of the Xen Project
CoC based on v1.4 of the Contributor Covenant. See [1]

It also reflects the discussion in [2] and some private
discussions on IRC to identify initial members of the Xen
Project’s CoC team.

For convenence of review and in line with other policy documents
I created a git repository at [3]. This series can be found at [5].

The series is incomplete in that it does not yet contain the document
on positive behavior: this will be based on [4]. My intention is to
use a lightwight process based on
* Documentation to set expectations, share tips and best practices - with the
hope that people in the community reflect occasionally on how they are doing
against these (or are maybe prompted by peers to do so)
* A safe back-channel to ask for advice when a conversation becomes inefficient,
unactionable, is unfriendly, ... with a view to recover it
* Arbitration in cases where there is some friction amongst participants in a
discussion, which was not resolvable by any of the before. After all, when this
happens there is a risk that a working relationship gets negatively impacted. It
is actually in the interest of each participant to improve to avoid friction,
stress, etc.

I hope that we can approve the series without the first part, but I do not mind
if people feel this needs to be done in one go.

[1] https://www.contributor-covenant.org/version/1/4/code-of-conduct.md
[2] https://xen.markmail.org/thread/56ao2gyhpltqmrew
[3] http://xenbits.xen.org/gitweb/?p=people/larsk/code-of-conduct.git;a=summary
[4] https://www.slideshare.net/xen_com_mgr/xpdds19-keynote-patch-review-for-nonmaintainers-george-dunlap-citrix-systems-uk-ltd
[5] http://xenbits.xen.org/gitweb/?p=people/larsk/code-of-conduct.git;a=shortlog;h=refs/heads/CoC-v1

Cc: minios-devel@lists.xenproject.org
Cc: xen-api@lists.xenproject.org
Cc: win-pv-devel@lists.xenproject.org
Cc: mirageos-devel@lists.xenproject.org
Cc: committers@xenproject.org


Lars Kurth (2):
  Import v1.4 of Contributor Covenant CoC
  Xen Project Code of Conduct

-- 
2.13.0



--===============0295286236817137053==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============0295286236817137053==--

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 18:12:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 18:12:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Zm2-0004sZ-4z; Wed, 04 Sep 2019 18:12:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=WgxQ=W7=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i5Zm1-0004rj-8S
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 18:12:53 +0000
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8f3ae5a6-cf3f-11e9-abbd-12813bfff9fa;
 Wed, 04 Sep 2019 18:12:31 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlY-0005xK-9n; Wed, 04 Sep 2019 18:12:24 +0000
Received: from localhost ([127.0.0.1] helo=localhost.localdomain)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlY-0000JA-38; Wed, 04 Sep 2019 18:12:24 +0000
From: Lars Kurth <lars.kurth@citrix.com>
To: xen-devel@lists.xenproject.org
Date: Wed,  4 Sep 2019 19:12:17 +0100
Message-Id: <00c6c80b12b1d201d7140626c7efe9d75645dee9.1567620587.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
Subject: [Minios-devel] [PATCH] Import v1.4 of Contributor Covenant CoC
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgotLS0KQ2M6
IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogeGVuLWFwaUBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpDYzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBtaXJh
Z2Vvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogY29tbWl0dGVyc0B4ZW5wcm9qZWN0
Lm9yZwotLS0KIGNvZGUtb2YtY29uZHVjdC5tZCB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDc2IGluc2Vy
dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb2RlLW9mLWNvbmR1Y3QubWQKCmRpZmYgLS1n
aXQgYS9jb2RlLW9mLWNvbmR1Y3QubWQgYi9jb2RlLW9mLWNvbmR1Y3QubWQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiMjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvZGUt
b2YtY29uZHVjdC5tZApAQCAtMCwwICsxLDc2IEBACisjIENvbnRyaWJ1dG9yIENvdmVuYW50IENv
ZGUgb2YgQ29uZHVjdAorCisjIyBPdXIgUGxlZGdlCisKK0luIHRoZSBpbnRlcmVzdCBvZiBmb3N0
ZXJpbmcgYW4gb3BlbiBhbmQgd2VsY29taW5nIGVudmlyb25tZW50LCB3ZSBhcworY29udHJpYnV0
b3JzIGFuZCBtYWludGFpbmVycyBwbGVkZ2UgdG8gbWFrZSBwYXJ0aWNpcGF0aW9uIGluIG91ciBw
cm9qZWN0IGFuZAorb3VyIGNvbW11bml0eSBhIGhhcmFzc21lbnQtZnJlZSBleHBlcmllbmNlIGZv
ciBldmVyeW9uZSwgcmVnYXJkbGVzcyBvZiBhZ2UsIGJvZHkKK3NpemUsIGRpc2FiaWxpdHksIGV0
aG5pY2l0eSwgc2V4IGNoYXJhY3RlcmlzdGljcywgZ2VuZGVyIGlkZW50aXR5IGFuZCBleHByZXNz
aW9uLAorbGV2ZWwgb2YgZXhwZXJpZW5jZSwgZWR1Y2F0aW9uLCBzb2Npby1lY29ub21pYyBzdGF0
dXMsIG5hdGlvbmFsaXR5LCBwZXJzb25hbAorYXBwZWFyYW5jZSwgcmFjZSwgcmVsaWdpb24sIG9y
IHNleHVhbCBpZGVudGl0eSBhbmQgb3JpZW50YXRpb24uCisKKyMjIE91ciBTdGFuZGFyZHMKKwor
RXhhbXBsZXMgb2YgYmVoYXZpb3IgdGhhdCBjb250cmlidXRlcyB0byBjcmVhdGluZyBhIHBvc2l0
aXZlIGVudmlyb25tZW50CitpbmNsdWRlOgorCisqIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVz
aXZlIGxhbmd1YWdlCisqIEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMg
YW5kIGV4cGVyaWVuY2VzCisqIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0
aWNpc20KKyogRm9jdXNpbmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5CisqIFNo
b3dpbmcgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCisKK0V4YW1wbGVz
IG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvciBieSBwYXJ0aWNpcGFudHMgaW5jbHVkZToKKworKiBU
aGUgdXNlIG9mIHNleHVhbGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNl
eHVhbCBhdHRlbnRpb24gb3IKKyAgYWR2YW5jZXMKKyogVHJvbGxpbmcsIGluc3VsdGluZy9kZXJv
Z2F0b3J5IGNvbW1lbnRzLCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsIGF0dGFja3MKKyogUHVi
bGljIG9yIHByaXZhdGUgaGFyYXNzbWVudAorKiBQdWJsaXNoaW5nIG90aGVycycgcHJpdmF0ZSBp
bmZvcm1hdGlvbiwgc3VjaCBhcyBhIHBoeXNpY2FsIG9yIGVsZWN0cm9uaWMKKyAgYWRkcmVzcywg
d2l0aG91dCBleHBsaWNpdCBwZXJtaXNzaW9uCisqIE90aGVyIGNvbmR1Y3Qgd2hpY2ggY291bGQg
cmVhc29uYWJseSBiZSBjb25zaWRlcmVkIGluYXBwcm9wcmlhdGUgaW4gYQorICBwcm9mZXNzaW9u
YWwgc2V0dGluZworCisjIyBPdXIgUmVzcG9uc2liaWxpdGllcworCitQcm9qZWN0IG1haW50YWlu
ZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgY2xhcmlmeWluZyB0aGUgc3RhbmRhcmRzIG9mIGFjY2Vw
dGFibGUKK2JlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQg
ZmFpciBjb3JyZWN0aXZlIGFjdGlvbiBpbgorcmVzcG9uc2UgdG8gYW55IGluc3RhbmNlcyBvZiB1
bmFjY2VwdGFibGUgYmVoYXZpb3IuCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmln
aHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwgb3IKK3JlamVjdCBjb21tZW50
cywgY29tbWl0cywgY29kZSwgd2lraSBlZGl0cywgaXNzdWVzLCBhbmQgb3RoZXIgY29udHJpYnV0
aW9ucwordGhhdCBhcmUgbm90IGFsaWduZWQgdG8gdGhpcyBDb2RlIG9mIENvbmR1Y3QsIG9yIHRv
IGJhbiB0ZW1wb3JhcmlseSBvcgorcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhl
ciBiZWhhdmlvcnMgdGhhdCB0aGV5IGRlZW0gaW5hcHByb3ByaWF0ZSwKK3RocmVhdGVuaW5nLCBv
ZmZlbnNpdmUsIG9yIGhhcm1mdWwuCisKKyMjIFNjb3BlCisKK1RoaXMgQ29kZSBvZiBDb25kdWN0
IGFwcGxpZXMgd2l0aGluIGFsbCBwcm9qZWN0IHNwYWNlcywgYW5kIGl0IGFsc28gYXBwbGllcyB3
aGVuCithbiBpbmRpdmlkdWFsIGlzIHJlcHJlc2VudGluZyB0aGUgcHJvamVjdCBvciBpdHMgY29t
bXVuaXR5IGluIHB1YmxpYyBzcGFjZXMuCitFeGFtcGxlcyBvZiByZXByZXNlbnRpbmcgYSBwcm9q
ZWN0IG9yIGNvbW11bml0eSBpbmNsdWRlIHVzaW5nIGFuIG9mZmljaWFsCitwcm9qZWN0IGUtbWFp
bCBhZGRyZXNzLCBwb3N0aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEgYWNjb3VudCwg
b3IgYWN0aW5nCithcyBhbiBhcHBvaW50ZWQgcmVwcmVzZW50YXRpdmUgYXQgYW4gb25saW5lIG9y
IG9mZmxpbmUgZXZlbnQuIFJlcHJlc2VudGF0aW9uIG9mCithIHByb2plY3QgbWF5IGJlIGZ1cnRo
ZXIgZGVmaW5lZCBhbmQgY2xhcmlmaWVkIGJ5IHByb2plY3QgbWFpbnRhaW5lcnMuCisKKyMjIEVu
Zm9yY2VtZW50CisKK0luc3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lz
ZSB1bmFjY2VwdGFibGUgYmVoYXZpb3IgbWF5IGJlCityZXBvcnRlZCBieSBjb250YWN0aW5nIHRo
ZSBwcm9qZWN0IHRlYW0gYXQgW0lOU0VSVCBFTUFJTCBBRERSRVNTXS4gQWxsCitjb21wbGFpbnRz
IHdpbGwgYmUgcmV2aWV3ZWQgYW5kIGludmVzdGlnYXRlZCBhbmQgd2lsbCByZXN1bHQgaW4gYSBy
ZXNwb25zZSB0aGF0CitpcyBkZWVtZWQgbmVjZXNzYXJ5IGFuZCBhcHByb3ByaWF0ZSB0byB0aGUg
Y2lyY3Vtc3RhbmNlcy4gVGhlIHByb2plY3QgdGVhbSBpcworb2JsaWdhdGVkIHRvIG1haW50YWlu
IGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0byB0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRl
bnQuCitGdXJ0aGVyIGRldGFpbHMgb2Ygc3BlY2lmaWMgZW5mb3JjZW1lbnQgcG9saWNpZXMgbWF5
IGJlIHBvc3RlZCBzZXBhcmF0ZWx5LgorCitQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3Qg
Zm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbiBnb29kCitmYWl0aCBtYXkg
ZmFjZSB0ZW1wb3Jhcnkgb3IgcGVybWFuZW50IHJlcGVyY3Vzc2lvbnMgYXMgZGV0ZXJtaW5lZCBi
eSBvdGhlcgorbWVtYmVycyBvZiB0aGUgcHJvamVjdCdzIGxlYWRlcnNoaXAuCisKKyMjIEF0dHJp
YnV0aW9uCisKK1RoaXMgQ29kZSBvZiBDb25kdWN0IGlzIGFkYXB0ZWQgZnJvbSB0aGUgW0NvbnRy
aWJ1dG9yIENvdmVuYW50XVtob21lcGFnZV0sIHZlcnNpb24gMS40LAorYXZhaWxhYmxlIGF0IGh0
dHBzOi8vd3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy92ZXJzaW9uLzEvNC9jb2RlLW9mLWNv
bmR1Y3QuaHRtbAorCitbaG9tZXBhZ2VdOiBodHRwczovL3d3dy5jb250cmlidXRvci1jb3ZlbmFu
dC5vcmcKKworRm9yIGFuc3dlcnMgdG8gY29tbW9uIHF1ZXN0aW9ucyBhYm91dCB0aGlzIGNvZGUg
b2YgY29uZHVjdCwgc2VlCitodHRwczovL3d3dy5jb250cmlidXRvci1jb3ZlbmFudC5vcmcvZmFx
Ci0tIAoyLjEzLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 18:13:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 18:13:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Zm9-0004wx-BR; Wed, 04 Sep 2019 18:13:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=WgxQ=W7=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i5Zm7-0004wA-Jr
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 18:12:59 +0000
X-Inumbo-ID: 8e8600d2-cf3f-11e9-a337-bc764e2007e4
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8e8600d2-cf3f-11e9-a337-bc764e2007e4;
 Wed, 04 Sep 2019 18:12:29 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlZ-0005xP-AY; Wed, 04 Sep 2019 18:12:25 +0000
Received: from localhost ([127.0.0.1] helo=localhost.localdomain)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@citrix.com>)
 id 1i5ZlZ-0000JA-3T; Wed, 04 Sep 2019 18:12:25 +0000
From: Lars Kurth <lars.kurth@citrix.com>
To: xen-devel@lists.xenproject.org
Date: Wed,  4 Sep 2019 19:12:18 +0100
Message-Id: <bce250afe71018f1a62f1b34866833588670a1f9.1567620587.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
Subject: [Minios-devel] [PATCH] Xen Project Code of Conduct
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U3BlY2lmaWMgY2hhbmdlcyB0byB0aGUgYmFzZWxpbmU6CiogUmVwbGFjZSBsaXN0IG9mIHBvc2l0
aXZlIGJlaGF2aW9ycyB3aXRoIGxpbmsgdG8gc2VwYXJhdGUgcHJvY2VzcwoqIFJlcGxhY2UgbWFp
bnRhaW5lcnMgd2l0aCBwcm9qZWN0IGxlYWRlcnNoaXAKICAoZXhjZXB0IGluIG91ciBwbGVkZ2Ug
d2hlcmUgbWFpbnRhaW5lcnMgaXMgbW9yZSBhcHByb3ByaWF0ZSkKKiBBZGQgJ29mIGFsbCBzdWIt
cHJvamVjdHMnIHRvIGNsYXJpZnkgc2NvcGUgb2YgQ29DCiogUmVuYW1lIEVuZm9yY2VtZW50Ciog
UmVwbGFjZSAicHJvamVjdCB0ZWFtIiB3aXRoICJDb25kdWN0IFRlYW0gbWVtYmVycyIKKiBBZGQg
ZS1tYWlsIGFsaWFzCiogQWRkIHNlY3Rpb24gb24gY29udGFjdGluZyBpbmRpdmlkdWFsIENvbmR1
Y3QgVGVhbSBtZW1iZXJzCiogQWRkIHNlY3Rpb24gb24gQ29uZHVjdCBUZWFtIG1lbWJlcnMKClNp
Z25lZC1vZmYtYnk6IExhcnMgS3VydGggPGxhcnMua3VydGhAY2l0cml4LmNvbT4KLS0tCkNjOiBt
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IHhlbi1hcGlAbGlzdHMueGVucHJv
amVjdC5vcmcKQ2M6IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogbWlyYWdl
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IGNvbW1pdHRlcnNAeGVucHJvamVjdC5v
cmcKLS0tCiBjb2RlLW9mLWNvbmR1Y3QubWQgfCA0NSArKysrKysrKysrKysrKysrKysrKysrKysr
KysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAx
NyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb2RlLW9mLWNvbmR1Y3QubWQgYi9jb2RlLW9m
LWNvbmR1Y3QubWQKaW5kZXggODFiMjE3Yy4uZWU3NTFhNyAxMDA2NDQKLS0tIGEvY29kZS1vZi1j
b25kdWN0Lm1kCisrKyBiL2NvZGUtb2YtY29uZHVjdC5tZApAQCAtMSw0ICsxLDQgQEAKLSMgQ29u
dHJpYnV0b3IgQ292ZW5hbnQgQ29kZSBvZiBDb25kdWN0CisjIFhlbiBQcm9qZWN0IENvZGUgb2Yg
Q29uZHVjdAogCiAjIyBPdXIgUGxlZGdlCiAKQEAgLTExLDE0ICsxMSwxMCBAQCBhcHBlYXJhbmNl
LCByYWNlLCByZWxpZ2lvbiwgb3Igc2V4dWFsIGlkZW50aXR5IGFuZCBvcmllbnRhdGlvbi4KIAog
IyMgT3VyIFN0YW5kYXJkcwogCi1FeGFtcGxlcyBvZiBiZWhhdmlvciB0aGF0IGNvbnRyaWJ1dGVz
IHRvIGNyZWF0aW5nIGEgcG9zaXRpdmUgZW52aXJvbm1lbnQKLWluY2x1ZGU6Ci0KLSogVXNpbmcg
d2VsY29taW5nIGFuZCBpbmNsdXNpdmUgbGFuZ3VhZ2UKLSogQmVpbmcgcmVzcGVjdGZ1bCBvZiBk
aWZmZXJpbmcgdmlld3BvaW50cyBhbmQgZXhwZXJpZW5jZXMKLSogR3JhY2VmdWxseSBhY2NlcHRp
bmcgY29uc3RydWN0aXZlIGNyaXRpY2lzbQotKiBGb2N1c2luZyBvbiB3aGF0IGlzIGJlc3QgZm9y
IHRoZSBjb21tdW5pdHkKLSogU2hvd2luZyBlbXBhdGh5IHRvd2FyZHMgb3RoZXIgY29tbXVuaXR5
IG1lbWJlcnMKK1dlIGJlbGlldmUgdGhhdCBhIENvZGUgb2YgQ29uZHVjdCBjYW4gaGVscCBjcmVh
dGUgYSBoYXJhc3NtZW50LWZyZWUgZW52aXJvbm1lbnQsCitidXQgaXMgbm90IHN1ZmZpY2llbnQg
dG8gY3JlYXRlIGEgd2VsY29taW5nIGVudmlyb25tZW50IG9uIGl0cyBvd246IGd1aWRhbmNlIG9u
CitjcmVhdGluZyBhIHdlbGNvbWluZyBlbnZpcm9ubWVudCwgaG93IHRvIGNvbW11bmljYXRlIGlu
IGFuIGVmZmVjdGl2ZSBhbmQgZnJpZW5kbHkKK3dheSwgZXRjLiBjYW4gYmUgZm91bmQgW2hlcmVd
OiBUT0RPLUlOU0VSVC1VUkwuCiAKIEV4YW1wbGVzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvciBi
eSBwYXJ0aWNpcGFudHMgaW5jbHVkZToKIApAQCAtMzMsMTEgKzI5LDExIEBAIEV4YW1wbGVzIG9m
IHVuYWNjZXB0YWJsZSBiZWhhdmlvciBieSBwYXJ0aWNpcGFudHMgaW5jbHVkZToKIAogIyMgT3Vy
IFJlc3BvbnNpYmlsaXRpZXMKIAotUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUg
Zm9yIGNsYXJpZnlpbmcgdGhlIHN0YW5kYXJkcyBvZiBhY2NlcHRhYmxlCitQcm9qZWN0IGxlYWRl
cnNoaXAgdGVhbSBtZW1iZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgY2xhcmlmeWluZyB0aGUgc3Rh
bmRhcmRzIG9mIGFjY2VwdGFibGUKIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBh
cHByb3ByaWF0ZSBhbmQgZmFpciBjb3JyZWN0aXZlIGFjdGlvbiBpbgogcmVzcG9uc2UgdG8gYW55
IGluc3RhbmNlcyBvZiB1bmFjY2VwdGFibGUgYmVoYXZpb3IuCiAKLVByb2plY3QgbWFpbnRhaW5l
cnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwgb3IK
K1Byb2plY3QgbGVhZGVyc2hpcCB0ZWFtIG1lbWJlcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3Bv
bnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwgb3IKIHJlamVjdCBjb21tZW50cywgY29tbWl0cywg
Y29kZSwgd2lraSBlZGl0cywgaXNzdWVzLCBhbmQgb3RoZXIgY29udHJpYnV0aW9ucwogdGhhdCBh
cmUgbm90IGFsaWduZWQgdG8gdGhpcyBDb2RlIG9mIENvbmR1Y3QsIG9yIHRvIGJhbiB0ZW1wb3Jh
cmlseSBvcgogcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMg
dGhhdCB0aGV5IGRlZW0gaW5hcHByb3ByaWF0ZSwKQEAgLTQ1LDI2ICs0MSw0MCBAQCB0aHJlYXRl
bmluZywgb2ZmZW5zaXZlLCBvciBoYXJtZnVsLgogCiAjIyBTY29wZQogCi1UaGlzIENvZGUgb2Yg
Q29uZHVjdCBhcHBsaWVzIHdpdGhpbiBhbGwgcHJvamVjdCBzcGFjZXMsIGFuZCBpdCBhbHNvIGFw
cGxpZXMgd2hlbgorVGhpcyBDb2RlIG9mIENvbmR1Y3QgYXBwbGllcyB3aXRoaW4gYWxsIHByb2pl
Y3Qgc3BhY2VzIG9mIGFsbCBzdWItcHJvamVjdHMsIGFuZCBpdCBhbHNvIGFwcGxpZXMgd2hlbgog
YW4gaW5kaXZpZHVhbCBpcyByZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0
eSBpbiBwdWJsaWMgc3BhY2VzLgogRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBv
ciBjb21tdW5pdHkgaW5jbHVkZSB1c2luZyBhbiBvZmZpY2lhbAogcHJvamVjdCBlLW1haWwgYWRk
cmVzcywgcG9zdGluZyB2aWEgYW4gb2ZmaWNpYWwgc29jaWFsIG1lZGlhIGFjY291bnQsIG9yIGFj
dGluZwogYXMgYW4gYXBwb2ludGVkIHJlcHJlc2VudGF0aXZlIGF0IGFuIG9ubGluZSBvciBvZmZs
aW5lIGV2ZW50LiBSZXByZXNlbnRhdGlvbiBvZgotYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRl
ZmluZWQgYW5kIGNsYXJpZmllZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgorYSBwcm9qZWN0IG1h
eSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kIGNsYXJpZmllZCBieSB0aGUgcHJvamVjdCBsZWFkZXJz
aGlwLgogCi0jIyBFbmZvcmNlbWVudAorIyMgV2hhdCB0byBkbyBpZiB5b3Ugd2l0bmVzcyBvciBh
cmUgc3ViamVjdCB0byB1bmFjY2VwdGFibGUgYmVoYXZpb3IKIAogSW5zdGFuY2VzIG9mIGFidXNp
dmUsIGhhcmFzc2luZywgb3Igb3RoZXJ3aXNlIHVuYWNjZXB0YWJsZSBiZWhhdmlvciBtYXkgYmUK
LXJlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBbSU5TRVJUIEVNQUlM
IEFERFJFU1NdLiBBbGwKK3JlcG9ydGVkIGJ5IGNvbnRhY3RpbmcgQ29uZHVjdCBUZWFtIG1lbWJl
cnMgYXQgY29uZHVjdEB4ZW5wcm9qZWN0Lm9yZy4gQWxsCiBjb21wbGFpbnRzIHdpbGwgYmUgcmV2
aWV3ZWQgYW5kIGludmVzdGlnYXRlZCBhbmQgd2lsbCByZXN1bHQgaW4gYSByZXNwb25zZSB0aGF0
Ci1pcyBkZWVtZWQgbmVjZXNzYXJ5IGFuZCBhcHByb3ByaWF0ZSB0byB0aGUgY2lyY3Vtc3RhbmNl
cy4gVGhlIHByb2plY3QgdGVhbSBpcworaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlh
dGUgdG8gdGhlIGNpcmN1bXN0YW5jZXMuIENvbmR1Y3QgVGVhbSBtZW1iZXJzIGFyZQogb2JsaWdh
dGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0byB0aGUgcmVwb3J0
ZXIgb2YgYW4gaW5jaWRlbnQuCiBGdXJ0aGVyIGRldGFpbHMgb2Ygc3BlY2lmaWMgZW5mb3JjZW1l
bnQgcG9saWNpZXMgbWF5IGJlIHBvc3RlZCBzZXBhcmF0ZWx5LgogCi1Qcm9qZWN0IG1haW50YWlu
ZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbiBn
b29kCitJZiB5b3UgaGF2ZSBjb25jZXJucyBhYm91dCBhbnkgb2YgdGhlIG1lbWJlcnMgb2YgdGhl
IGNvbmR1Y3RAIGFsaWFzLAoreW91IGFyZSB3ZWxjb21lIHRvIGNvbnRhY3QgcHJlY2lzZWx5IHRo
ZSBDb25kdWN0IFRlYW0gbWVtYmVyKHMpIG9mCit5b3VyIGNob2ljZS4KKworUHJvamVjdCBsZWFk
ZXJzaGlwIHRlYW0gbWVtYmVycyB3aG8gZG8gbm90IGZvbGxvdyBvciBlbmZvcmNlIHRoZSBDb2Rl
IG9mIENvbmR1Y3QgaW4gZ29vZAogZmFpdGggbWF5IGZhY2UgdGVtcG9yYXJ5IG9yIHBlcm1hbmVu
dCByZXBlcmN1c3Npb25zIGFzIGRldGVybWluZWQgYnkgb3RoZXIKIG1lbWJlcnMgb2YgdGhlIHBy
b2plY3QncyBsZWFkZXJzaGlwLgogCisjIyBDb25kdWN0IFRlYW0gbWVtYmVycworQ29uZHVjdCBU
ZWFtIG1lbWJlcnMgYXJlIHByb2plY3QgbGVhZGVyc2hpcCB0ZWFtIG1lbWJlcnMgZnJvbSBhbnkK
K3N1Yi1wcm9qZWN0LiBUaGUgY3VycmVudCBsaXN0IG9mIENvbmR1Y3QgVGVhbSBtZW1iZXJzIGlz
OgorKiBMYXJzIEt1cnRoIDxsYXJzIGRvdCBrdXJ0aCBhdCB4ZW5wcm9qZWN0IGRvdCBvcmc+Cisq
IEdlb3JnZSBEdW5sYXAgPGdlb3JnZSBkb3QgZHVubGFwIGF0IGNpdHJpeCBkb3QgY29tPgorKiBJ
YW4gSmFja3NvbiA8aWFuIGRvdCBqYWNrc29uIGF0IGNpdHJpeCBkb3QgY29tPgorCitDb25kdWN0
IFRlYW0gbWVtYmVycyBhcmUgY2hhbmdlZCBieSBwcm9wb3NpbmcgYSBjaGFuZ2UgdG8gdGhpcyBk
b2N1bWVudCwKK3Bvc3RlZCBvbiBhbGwgc3ViLXByb2plY3QgbGlzdHMsIGZvbGxvd2VkIGJ5IGEg
Zm9ybWFsIGdsb2JhbCB2b3RlIGFzIG91dGxpbmVkIFtoZXJlXTogaHR0cHM6Ly94ZW5wcm9qZWN0
Lm9yZy9kZXZlbG9wZXJzL2dvdmVybmFuY2UvI3Byb2plY3QtZGVjaXNpb25zCisKICMjIEF0dHJp
YnV0aW9uCiAKIFRoaXMgQ29kZSBvZiBDb25kdWN0IGlzIGFkYXB0ZWQgZnJvbSB0aGUgW0NvbnRy
aWJ1dG9yIENvdmVuYW50XVtob21lcGFnZV0sIHZlcnNpb24gMS40LApAQCAtNzQsMyArODQsNCBA
QCBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cuY29udHJpYnV0b3ItY292ZW5hbnQub3JnL3ZlcnNp
b24vMS80L2NvZGUtb2YtY29uZHVjdC5odAogCiBGb3IgYW5zd2VycyB0byBjb21tb24gcXVlc3Rp
b25zIGFib3V0IHRoaXMgY29kZSBvZiBjb25kdWN0LCBzZWUKIGh0dHBzOi8vd3d3LmNvbnRyaWJ1
dG9yLWNvdmVuYW50Lm9yZy9mYXEKKwotLSAKMi4xMy4wCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 18:20:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 18:20:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Ztm-0006bh-Ft; Wed, 04 Sep 2019 18:20:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=WgxQ=W7=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i5Ztl-0006bM-Tn
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 18:20:53 +0000
X-Inumbo-ID: b37565b2-cf40-11e9-abbd-12813bfff9fa
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b37565b2-cf40-11e9-abbd-12813bfff9fa;
 Wed, 04 Sep 2019 18:20:41 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567621242;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-id:content-transfer-encoding: mime-version;
 bh=lGtLMc94JJQzOeMRmR1dldQs4pfkziYrTZsy4UbDZP4=;
 b=FQzR6xamjaVCKfoceq1Lyea4I5g+vP9qILrzGYuxkJN0o77229+khq02
 r9ynqhQykCA7X93dGUP7GsRzEOS6/ShIrMaXBWhL25HlgumenNAUkLdaj
 4RLzZoWf5ke1ZUJF9h0FwTGBvjKr9kP3skeSsu4mu30YBSC8NKCxarwNv Y=;
Authentication-Results: esa3.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa3.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa3.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: o8a5/Yv3u7UQuNJwC/0OYrQTXHZjpqsfiIPrjqnnf9qOuzDYewk5vMJxjOS67vl7mM9GYVp/eM
 TU7HEZDESzwhmadcGB8TT+Jb8GAdA9hpHxNMirY3pmlLbTv1kmrUTQVKucUtcephvGo6/JWVzl
 S0Yuv/Ks3l5crfv+iMB5UJ2VOjurjeynbS9r7K3Chf9M9NfdwEjPLw6EL9WkydkVb/J/jZ4OGH
 aeZbTwgWx51iDBqknoSBr5z2FKk9v2qNmGu5N2vZrCzF/VpJQ33EDMb2vApeTjmIc1bjroZSXG
 uek=
X-SBRS: 2.7
X-MesageID: 5144046
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,467,1559534400"; 
   d="scan'208";a="5144046"
From: Lars Kurth <lars.kurth@citrix.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Thread-Topic: [PATCH 0/2] Code of Conduct (based on Contributor Covenant v1.4)
Thread-Index: AQHVY0xSCXYAyOA5+kuSSJHc2RChdKcbw4mA
Date: Wed, 4 Sep 2019 18:20:37 +0000
Message-ID: <5BA52AD9-FAC0-43BB-8C5C-DD52699A40A8@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <9253AA50A698894DA257A08FFE91E8CD@citrix.com>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [PATCH 0/2] Code of Conduct (based on
 Contributor Covenant v1.4)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQrvu79PbiAwNC8wOS8yMDE5LCAxOToxMiwgIkxhcnMgS3VydGgiIDxsYXJzLmt1cnRoQGNpdHJp
eC5jb20+IHdyb3RlOg0KDQogICAgVGhpcyBzZXJpZXMgcHJvcG9zZXMgYSBjb25jcmV0ZSB2ZXJz
aW9uIG9mIHRoZSBYZW4gUHJvamVjdA0KICAgIENvQyBiYXNlZCBvbiB2MS40IG9mIHRoZSBDb250
cmlidXRvciBDb3ZlbmFudC4gU2VlIFsxXQ0KICAgIA0KQXBvbG9naWVzIGZvciB0aGUgYmFkbHkg
Zm9ybWF0dGVkIHBhdGNoLiBJdCBzZWVtcyB0aGUgbm9ybWFsIGluc3RydWN0aW9ucyBkbyBub3Qg
d29yayB3aGVuIHVzaW5nIGl0IG9uIHZpcmdpbiBnaXQgcmVwb3NpdG9yeSBhbmQgSSBkaWRuJ3Qg
cmVhbGl6ZSB0aGF0IC1OMiBzdHJpcHMgdGhlIDEvMiwgMi8yDQoNClRoZSBkaXN0cmlidXRpb24g
bGlzdCBpcyBzbyB3aWRlLCBhcyB0aGlzIGFmZmVjdHMgYWxsIHN1Yi1wcm9qZWN0cw0KDQpMYXJz
IA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 18:21:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 18:21:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5Ztx-0006hK-E8; Wed, 04 Sep 2019 18:21:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=WgxQ=W7=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i5Ztw-0006gU-27
 for minios-devel@lists.xenproject.org; Wed, 04 Sep 2019 18:21:04 +0000
Received: from esa3.hc3370-68.iphmx.com (unknown [216.71.145.155])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b37565b2-cf40-11e9-abbd-12813bfff9fa;
 Wed, 04 Sep 2019 18:20:41 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567621242;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-id:content-transfer-encoding: mime-version;
 bh=lGtLMc94JJQzOeMRmR1dldQs4pfkziYrTZsy4UbDZP4=;
 b=FQzR6xamjaVCKfoceq1Lyea4I5g+vP9qILrzGYuxkJN0o77229+khq02
 r9ynqhQykCA7X93dGUP7GsRzEOS6/ShIrMaXBWhL25HlgumenNAUkLdaj
 4RLzZoWf5ke1ZUJF9h0FwTGBvjKr9kP3skeSsu4mu30YBSC8NKCxarwNv Y=;
Authentication-Results: esa3.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa3.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa3.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa3.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa3.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: o8a5/Yv3u7UQuNJwC/0OYrQTXHZjpqsfiIPrjqnnf9qOuzDYewk5vMJxjOS67vl7mM9GYVp/eM
 TU7HEZDESzwhmadcGB8TT+Jb8GAdA9hpHxNMirY3pmlLbTv1kmrUTQVKucUtcephvGo6/JWVzl
 S0Yuv/Ks3l5crfv+iMB5UJ2VOjurjeynbS9r7K3Chf9M9NfdwEjPLw6EL9WkydkVb/J/jZ4OGH
 aeZbTwgWx51iDBqknoSBr5z2FKk9v2qNmGu5N2vZrCzF/VpJQ33EDMb2vApeTjmIc1bjroZSXG
 uek=
X-SBRS: 2.7
X-MesageID: 5144046
X-Ironport-Server: esa3.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,467,1559534400"; 
   d="scan'208";a="5144046"
From: Lars Kurth <lars.kurth@citrix.com>
To: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>
Thread-Topic: [PATCH 0/2] Code of Conduct (based on Contributor Covenant v1.4)
Thread-Index: AQHVY0xSCXYAyOA5+kuSSJHc2RChdKcbw4mA
Date: Wed, 4 Sep 2019 18:20:37 +0000
Message-ID: <5BA52AD9-FAC0-43BB-8C5C-DD52699A40A8@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <9253AA50A698894DA257A08FFE91E8CD@citrix.com>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [PATCH 0/2] Code of Conduct (based on
 Contributor Covenant v1.4)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQrvu79PbiAwNC8wOS8yMDE5LCAxOToxMiwgIkxhcnMgS3VydGgiIDxsYXJzLmt1cnRoQGNpdHJp
eC5jb20+IHdyb3RlOg0KDQogICAgVGhpcyBzZXJpZXMgcHJvcG9zZXMgYSBjb25jcmV0ZSB2ZXJz
aW9uIG9mIHRoZSBYZW4gUHJvamVjdA0KICAgIENvQyBiYXNlZCBvbiB2MS40IG9mIHRoZSBDb250
cmlidXRvciBDb3ZlbmFudC4gU2VlIFsxXQ0KICAgIA0KQXBvbG9naWVzIGZvciB0aGUgYmFkbHkg
Zm9ybWF0dGVkIHBhdGNoLiBJdCBzZWVtcyB0aGUgbm9ybWFsIGluc3RydWN0aW9ucyBkbyBub3Qg
d29yayB3aGVuIHVzaW5nIGl0IG9uIHZpcmdpbiBnaXQgcmVwb3NpdG9yeSBhbmQgSSBkaWRuJ3Qg
cmVhbGl6ZSB0aGF0IC1OMiBzdHJpcHMgdGhlIDEvMiwgMi8yDQoNClRoZSBkaXN0cmlidXRpb24g
bGlzdCBpcyBzbyB3aWRlLCBhcyB0aGlzIGFmZmVjdHMgYWxsIHN1Yi1wcm9qZWN0cw0KDQpMYXJz
IA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 19:09:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 19:09:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5aeg-0002FM-Je; Wed, 04 Sep 2019 19:09:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5aeg-0002FH-1n
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 19:09:22 +0000
X-Inumbo-ID: 7e2b2c8c-cf47-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 7e2b2c8c-cf47-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 19:09:18 +0000 (UTC)
IronPort-SDR: Pb8xnRUpH2sq6PlpQTfWLL8MMfZ+r2X/ou2FOCfD8BA2IpwL32/WfV1EJqGwqhVPLDA3UWD5aC
 LNE/ab5BazbQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AOW38BByIbda4V+nXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2uwTIJqq85mqBkHD//Il1AaPAdyBrasb1qGP6fGocFdDyK7JiGoFfp1IWk?=
 =?us-ascii?q?1NouQttCtkPvS4D1bmJuXhdS0wEZcKflZk+3amLRodQ56mNBXdrXKo8DEdBA?=
 =?us-ascii?q?j0OxZrKeTpAI7SiNm82/yv95HJbAhEmSSxbalvIBi0rQjdudQajZVmJ60s1h?=
 =?us-ascii?q?bHv3xEdvhMy2h1P1yThRH85smx/J5n7Stdvu8q+tBDX6vnYak2VKRUAzs6PW?=
 =?us-ascii?q?874s3rrgTDQhCU5nQASGUWkwFHDBbD4RrnQ5r+qCr6tu562CmHIc37SK0/VD?=
 =?us-ascii?q?q+46t3ThLjlSEKPCM7/m7KkMx9lKJVrgy8qRJxwIDaZ4OaNPRlc6/BYd8XX3?=
 =?us-ascii?q?ZNU9xNWyBdBI63cosBD/AGPeZdt4TwuVwOrQCiBQmtAuPk1zlGhmLu3a0nzu?=
 =?us-ascii?q?8sFh3J3As7H9ISsXTUqs/5NKMPUeCt0anF1inMb+hM1Tfl9YjHaQotoeuLXb?=
 =?us-ascii?q?9pd8fa1EohFxvdg1mNpoHpIimZ2+cNvmSB8eZsS+Cih3Qppg1pvzSiydoghp?=
 =?us-ascii?q?PKi48V0FzI6yt0zYgvKdGlR0N3f9ipG4ZKuS6ALYt5WMYiTnltuCY917IJp4?=
 =?us-ascii?q?a2fDMPyJQ73x7fbOGHc5SQ7hLjSumRJTB4iWp7eLK6nRmy8EygxvfgWcmvyl?=
 =?us-ascii?q?pKtjdFncLWunAX0Bzf8smHSv1j8Ue9wTuDyg/e5vxeLU03lafXMYAtzqAym5?=
 =?us-ascii?q?YJv0nPBir2l1/3jK+SeEUk4O+o6+H/b7r6oZ+cLJN0igD4Mqg0nsy/HPw4Mh?=
 =?us-ascii?q?UVUmeH4uSwzqXj/VDiT7lQlP02lbHVsIrGKsQDuq65HwhV354m6xa+CTem0d?=
 =?us-ascii?q?MYnWIeIF1YZh2HkZbmO1XVLfD8DPe/mEiskCxxy/HJILLhBI/BLn/ZkLfuZb?=
 =?us-ascii?q?x98VJTyBIvzdBD4JJZEr8BL+z3Wk/wrNzXEAU1Mwypw+bmFNp915gTWWSRDa?=
 =?us-ascii?q?CFNKPdq0SH6vgxLOmRfIUVoiryK+A55/7yin80gUQdfais3ZsQbnC0BPdmI1?=
 =?us-ascii?q?iHbnrqg9YOD30KsxE4TOP0lFKCVSRcaG2oU60i+zExEJimApvbRoCxnLyB2z?=
 =?us-ascii?q?+2HoNSZm9cF1+DCW3nd4OZVPcWdi2SI9VtnSceWre8TI8h1AyuuRThy7p7M+?=
 =?us-ascii?q?rb5zcUuoj/29hu/eHTiAky+iduA8SH1GHeB11zy2YJQT4xx+VzrFJwzn+H0L?=
 =?us-ascii?q?NkmLpIGNoV4OlGASkgMpuJ5OthF9H0EibcZsrBHF2hWcmnB3c1U8os69QVJV?=
 =?us-ascii?q?5gEZO4iUaQjGKRH7YJmunTV9QP+aXG0i2pKg=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CsBwDHCnBd/wPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYMiqNHaM0CQEBAToBAgEBhD8CglU4EwIDCAEBBQEBAQEBBgQBbIU6gjo?=
 =?us-ascii?q?igm8GeRA/ElcZgyKCD64RhUqDN4FJgTSHH4YxP4RhhRGFFgSUb4EelhcHgiJ?=
 =?us-ascii?q?iBJNvJ4IklkeKO51iOCGBWDMag1+RCj0BATGBBgEBjlkBAQ?=
X-IPAS-Result: =?us-ascii?q?A2CsBwDHCnBd/wPjVY1mHQEBBQEHBQGBZ4NYMiqNHaM0C?=
 =?us-ascii?q?QEBAToBAgEBhD8CglU4EwIDCAEBBQEBAQEBBgQBbIU6gjoigm8GeRA/ElcZg?=
 =?us-ascii?q?yKCD64RhUqDN4FJgTSHH4YxP4RhhRGFFgSUb4EelhcHgiJiBJNvJ4IklkeKO?=
 =?us-ascii?q?51iOCGBWDMag1+RCj0BATGBBgEBjlkBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4699469"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 22:09:16 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 5E2681A60229;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id i0KeFnx0u68f; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 42F1B1A601C5;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id WpzMA0x1cz9X; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 1F31A1A601DB;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 22:09:09 +0300
Message-Id: <20190904190912.6801-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 2/5] sys/socket.h: Add
 SOMAXCONN macro
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu,
 vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgdGhlIGJhY2tsb2cgcGFyYW1ldGVyIG9mIGxp
c3RlbigpIGZ1bmN0aW9uLgoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1
QGNzLnB1Yi5ybz4KLS0tCiBpbmNsdWRlL3N5cy9zb2NrZXQuaCB8IDQgKysrKwogMSBmaWxlIGNo
YW5nZWQsIDQgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3lzL3NvY2tldC5o
IGIvaW5jbHVkZS9zeXMvc29ja2V0LmgKaW5kZXggN2E4YWNhMC4uYWZmMDY0ZSAxMDA2NDQKLS0t
IGEvaW5jbHVkZS9zeXMvc29ja2V0LmgKKysrIGIvaW5jbHVkZS9zeXMvc29ja2V0LmgKQEAgLTUy
LDYgKzUyLDEwIEBACiAjZGVmaW5lIFNPQ0tfU0VRUEFDS0VUIDUKICNlbmRpZgogCisjaWZuZGVm
IFNPTUFYQ09OTgorI2RlZmluZSBTT01BWENPTk4gMTI4CisjZW5kaWYKKwogaW50IHNvY2tldChp
bnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKIGludCBhY2NlcHQoaW50IHMsIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90ICphZGRybGVuKTsKIGludCBiaW5kKGludCBz
LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIHNvY2tsZW5fdCBuYW1lbGVuKTsKLS0gCjIu
MjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 19:09:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 19:09:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5ael-0002Fv-M8; Wed, 04 Sep 2019 19:09:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5aek-0002Fq-U0
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 19:09:26 +0000
X-Inumbo-ID: 7f5659ba-cf47-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 7f5659ba-cf47-11e9-b76c-bc764e2007e4;
 Wed, 04 Sep 2019 19:09:20 +0000 (UTC)
IronPort-SDR: BMaBm2WyyBzZLCySNUaE/zHQFYQpxSC7GDjIeOq+We3h2wFOM6dV0LxrG+cFJ1PgUixpUsNl5/
 ksBmX0iMCfAA==
IronPort-PHdr: =?us-ascii?q?9a23=3AHDV1YR0P8U3BBuPwsmDT+DRfVm0co7zxezQtwd?=
 =?us-ascii?q?8ZseMQL/ad9pjvdHbS+e9qxAeQG9mCsbQd1Led6vqxEUU7or+5+EgYd5JNUx?=
 =?us-ascii?q?JXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQ?=
 =?us-ascii?q?viPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCejbb9oMRm7rwXcusYLjYd8Lqs61w?=
 =?us-ascii?q?fErGZPd+lK321jOEidnwz75se+/Z5j9zpftvc8/MNeUqv0Yro1Q6VAADspL2?=
 =?us-ascii?q?466svrtQLeTQSU/XsTTn8WkhtTDAfb6hzxQ4r8vTH7tup53ymaINH2QLUpUj?=
 =?us-ascii?q?ms86tnVBnlgzoBOjUk8m/Yl9Zwgbpbrhy/uhJxzY3aboaXO/pwZa7RYc8WSH?=
 =?us-ascii?q?BdUstLSyBNHoWxZJYPAeobOuZYqpHwqkUJrRulGQmsBeXvwSJOiH/rxa06zv?=
 =?us-ascii?q?kqHAba0wwnBNIOrHXUrNPvOKcWTOC11LTIwC7fYPNNwzv98JXIfQs7rfGWWr?=
 =?us-ascii?q?J9aMzcwlQsGQPdllictIPoMy6P2ukOs2WX9fRsWfythmI9pQx9uiWjy8gxho?=
 =?us-ascii?q?XThY8YykrI+Tt3zYs7P9G0VUF2bcCiHZBNrS+VLZF2TdknQ2xwvSY6zaAJto?=
 =?us-ascii?q?CjcSgRzZQn2wbfa/uac4iU+h7jVPieITN/hH99ZrK/ggy98UmkyuHmSsa0y0?=
 =?us-ascii?q?xGrjJYktbXrHwNzRvT5tCGSvt74EihxS6C2x3c5+1ZO0w5lqrWJ4Q/zrIulJ?=
 =?us-ascii?q?cfq0rOEjfzmErsja+Wcksk+vKv6+TierjpupicN5RoigH/NKQigMi/AfkgMg?=
 =?us-ascii?q?gTRGWU5f+82Kf7/U3kW7pGlOc2kq7BvJDAOcsbvrK5AxNS0os77ha/DjGm0N?=
 =?us-ascii?q?UfnXkcNV5KZQyIj5b3NFHKO/34Cfa/g0+wkDdw3fzHMaPuApPXInjEirfhcq?=
 =?us-ascii?q?5361RAxwor0dBf+5VUB6kPIP3tXk/xtcTYAQEjPwy03ubnCcly1oIFVGKJHK?=
 =?us-ascii?q?CWLKfSvkWT6e41PeaMeZcfuCzhJPg9+/7ukXg5lEcGfamo2JsXb3a4Eu5lI0?=
 =?us-ascii?q?WEf3XshNYAHnkQvgclSuzllkGNUTpJaHmpRa4z+Cw7Apq8DYjfXoCtnKCB3C?=
 =?us-ascii?q?CjE51IYmBJEE2DHm/yeIWCRvgMcjydIs57njMfT7euVogh1RCztALh0LpnMv?=
 =?us-ascii?q?fU9TACuZ35yNd1/PfflQwq9TNvFcidyWaNHClImTYNRjk327s6rUFjx1Or1a?=
 =?us-ascii?q?ljn+ceBdFVofRTXVQUL5nZmsd9EMzzXErlY8+UAAKtRc66ADd3Ss8p3vcFeA?=
 =?us-ascii?q?BlBt/klBeVjHniOKMci7HeXM98yanbxXWkf8s=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CxBwDHCnBd/wPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUzIqjR2jNAkBAQEpEQECAQGEPwKCVTgTAgMIAQEFAQEBAQEGBAFshS4?=
 =?us-ascii?q?Mgjoigm8GeRA/ElcZgyIBgg6uEYVKgzeBSYE0hx+GMT+EYYQNgQSEdCIElg2?=
 =?us-ascii?q?WFweCImIEhhCNXyeDI5VIGagEOCGBWDMag18JgwmLHIJcPQEBMYEGAQGMBYJ?=
 =?us-ascii?q?UAQE?=
X-IPAS-Result: =?us-ascii?q?A2CxBwDHCnBd/wPjVY1mHQEBBQEHBQGBZ4MFUzIqjR2jN?=
 =?us-ascii?q?AkBAQEpEQECAQGEPwKCVTgTAgMIAQEFAQEBAQEGBAFshS4Mgjoigm8GeRA/E?=
 =?us-ascii?q?lcZgyIBgg6uEYVKgzeBSYE0hx+GMT+EYYQNgQSEdCIElg2WFweCImIEhhCNX?=
 =?us-ascii?q?yeDI5VIGagEOCGBWDMag18JgwmLHIJcPQEBMYEGAQGMBYJUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4699473"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 22:09:16 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 73D011A601C5;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id EbIz61g9uF4U; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 576D41A60250;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id He3RU0dxU6GW; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 404AA1A60240;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 22:09:12 +0300
Message-Id: <20190904190912.6801-6-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 5/5] Makefile.uk: Suppress
 'unused parameters' warnings
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu,
 vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SXQncyBzaW1wbGVyIHRvIHN1cHByZXNzIHRoZSB3YXJuaW5nIHJhdGhlciB0aGFuIGFkZCAnX191
bnVzZWQnIHF1YWxpZmllciBlYWNoCnRpbWUuIFRoaXMgYWxzbyBzZWVtcyBpdCB3YXMgdGhlIGlu
aXRpYWwgaW50ZW50aW9uIGJlaGluZCB1c2luZwonLVd1bnVzZWQtcGFyYW1ldGVyJywgZ2l2ZW4g
dGhhdCBhbGwgd2FybmluZ3MgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4KClNpZ25lZC1vZmYtYnk6
IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0tLQogTWFrZWZpbGUudWsgfCAy
ICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKCmRpZmYg
LS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDk5ZmMwNjIuLjIyOTJjYjQg
MTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC02Myw3ICs2Myw3
IEBAIENYWElOQ0xVREVTLSQoQ09ORklHX0xJQkxXSVApICs9IC1JJChMSUJMV0lQX0JBU0UpL2lu
Y2x1ZGUgLUkkKExJQkxXSVBfRVhUUkFDVEVECiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBM
aWJyYXJ5IGZsYWdzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotTElCTFdJUF9DRkxBR1MteSAr
PSAtV25vLXR5cGUtbGltaXRzIC1XdW51c2VkLXBhcmFtZXRlcgorTElCTFdJUF9DRkxBR1MteSAr
PSAtV25vLXR5cGUtbGltaXRzIC1Xbm8tdW51c2VkLXBhcmFtZXRlcgogTElCTFdJUF9DRkxBR1Mt
JChDT05GSUdfTFdJUF9ERUJVRykgKz0gLURVS19ERUJVRwogTElCTFdJUF9DRkxBR1MteSAgICs9
IC1EX19JTl9MSUJMV0lQX18KIExJQkxXSVBfQ1hYRkxBR1MteSArPSAtRF9fSU5fTElCTFdJUF9f
Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 19:09:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 19:09:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5aeq-0002GZ-OL; Wed, 04 Sep 2019 19:09:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5aep-0002GU-Th
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 19:09:31 +0000
X-Inumbo-ID: 80894c8e-cf47-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 80894c8e-cf47-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 19:09:22 +0000 (UTC)
IronPort-SDR: guNcfrnLeQUYcHtPYotq4EAvdMjGdT10J4haOU5u/qjS7Faw66VHEQNqiDznSxid9Bz6EEZpTR
 BlVG3TaFizyg==
IronPort-PHdr: =?us-ascii?q?9a23=3AEyDNdhSIk8ZaNXqn91PbG4TImtpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6zYhGN2/xhgRfzUJnB7Loc0qyK6vqmADNdqs/b4TgrS99lb1?=
 =?us-ascii?q?c9k8IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUh?=
 =?us-ascii?q?rwOhBoKevrB4Xck9q41/yo+53Ufg5EmCexbal9IRmrswndrNQajIliJ6o+1x?=
 =?us-ascii?q?fFvH9FcPlKyG11Il6egwzy7dqq8p559CRQtfMh98peXqj/Yq81U79WAik4Pm?=
 =?us-ascii?q?4s/MHkugXNQgWJ5nsHT2UZiQFIDBTf7BH7RZj+rC33vfdg1SaAPM32Sbc0WS?=
 =?us-ascii?q?m+76puVRTlhjsLOyI//WrKjMF7kaBVrw+7pxFnw4DafpybOvR9cK3af9waS3?=
 =?us-ascii?q?FMUtpNWyFbHo+xdZcDA/YHMO1Fr4f9vVwOrR6mCASyA+Pv0SNIhn7w3aYn1e?=
 =?us-ascii?q?ohDBnG3BE9FN8JrHvUq871NLsTUeCz1qXIySjDb+tL2Trm9IfIaQotoemRXb?=
 =?us-ascii?q?1ra8bR004vGhrDg16NqoLlJyuY2vkCvmSG9eZtVuKih3Q5pw1voDWj3Mkhhp?=
 =?us-ascii?q?HUio8a11zI7yZ0zYYvKdGmRkN2b8SoHIZfui2EMYZ9X9ksTHtyuCkgz70LoZ?=
 =?us-ascii?q?u7fC8Xx5s53xPfcPmHc5SQ4hLkSeaRPS90hHJ7d7K7gBa/6VagyujmWcm11F?=
 =?us-ascii?q?ZGtDZKksLWunAVyhzc8dKLSuF6/ku52DaP0R7c6v1cLEwpmqfXNoQtz70wm5?=
 =?us-ascii?q?YJr0jPAC37lF/4gaOOc0Ur4Omo6+DpYrX8oZ+cMpd5hR35MqQ1hsy/AOI4Ph?=
 =?us-ascii?q?IKX2iG4eS8yabu8lHiQLlQlv02j7LWvIrAJcQcvqK5GRNa0p4/6xajCDeryN?=
 =?us-ascii?q?EYnXgBLFJEfxKHlJHlNEzQL/DmE/i/h0+hkDNqx/DdIr3hGY/BL3fdn7fnZ7?=
 =?us-ascii?q?p97FRcyAUrx9BF+51UEq0BIO70WkLputzXEBs5Mw2sw+n5Etl91p4eWWOTDa?=
 =?us-ascii?q?+YK67St0GH6f4rI+aWf4AZoijyK+U97f70kXA5gUMdfbWu3ZYPc3C4H/FmI0?=
 =?us-ascii?q?KfYXb2gdcBDHkFvgw/TeP0kl2PSjhTaGiuUKI4/D40E5iqApneRoq1mryOwD?=
 =?us-ascii?q?+7HoFKZmBBEl2MD3PoeJ+ZVPgUci2SJNJukiYaWrigUYMuzguhuxL9y7pmM+?=
 =?us-ascii?q?rZ4TYYtY7+1Ndo/eHcjw099SduA8SAy2GCVHt4nnkPR2x+4KcqpE17y1CYlK?=
 =?us-ascii?q?R1nfFcPdhS/O9SFBc3M9jb1eMpJcr1X1fqecyVSVDuZsi+HHllRdUq394IJU?=
 =?us-ascii?q?JgA8iKhQuFxzegRaUSwe/YTKco+77RiiCib/12zGzLgfEs?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CxBwDHCnBd/wPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUzIqjR2jNAkBAQEpEQECAQGEPwKCVTgTAgMIAQEFAQEBAQEGBAFshS4?=
 =?us-ascii?q?Mgjoigm8GeRA/ElcZgyIBgg6uEYVKgzeBSYE0hx+GMT+BEYNQhRGFFgSWDZY?=
 =?us-ascii?q?XB4IiYgSGEI1fJ4MjlUioHTghgVgzGoNfCYJFF4tJglw9AQExgQYBAY5ZAQE?=
X-IPAS-Result: =?us-ascii?q?A2CxBwDHCnBd/wPjVY1mHQEBBQEHBQGBZ4MFUzIqjR2jN?=
 =?us-ascii?q?AkBAQEpEQECAQGEPwKCVTgTAgMIAQEFAQEBAQEGBAFshS4Mgjoigm8GeRA/E?=
 =?us-ascii?q?lcZgyIBgg6uEYVKgzeBSYE0hx+GMT+BEYNQhRGFFgSWDZYXB4IiYgSGEI1fJ?=
 =?us-ascii?q?4MjlUioHTghgVgzGoNfCYJFF4tJglw9AQExgQYBAY5ZAQE?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4699472"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 22:09:16 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 73D161A601D2;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id assCOrwLiQNI; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 550711A601E2;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id eB7gfHJg521z; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 332C21A6023C;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 22:09:11 +0300
Message-Id: <20190904190912.6801-5-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 4/5] sockets: Add socketpair()
 stub
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu,
 vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBl
eHBvcnRzeW1zLnVrICAgICAgICB8IDEgKwogaW5jbHVkZS9zeXMvc29ja2V0LmggfCAxICsKIHNv
Y2tldHMuYyAgICAgICAgICAgIHwgNiArKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRp
b25zKCspCgpkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsKaW5kZXgg
MmY5ZjRmNi4uMGQ2YzdlOSAxMDA2NDQKLS0tIGEvZXhwb3J0c3ltcy51aworKysgYi9leHBvcnRz
eW1zLnVrCkBAIC00Nyw2ICs0Nyw3IEBAIHNldHByb3RvZW50CiBzZXRzb2Nrb3B0CiBzaHV0ZG93
bgogc29ja2V0Citzb2NrZXRwYWlyCiBzeXNfY2hlY2tfdGltZW91dHMKIHRjcF9hYm9ydAogdGNw
X2FjY2VwdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zeXMvc29ja2V0LmggYi9pbmNsdWRlL3N5cy9z
b2NrZXQuaAppbmRleCA3ZTAyN2I5Li45OTFhZTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3N5cy9z
b2NrZXQuaAorKysgYi9pbmNsdWRlL3N5cy9zb2NrZXQuaApAQCAtNzUsNSArNzUsNiBAQCBpbnQg
c2VuZChpbnQgcywgY29uc3Qgdm9pZCAqZGF0YXB0ciwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7
CiBpbnQgc2VuZG1zZyhpbnQgcywgY29uc3Qgc3RydWN0IG1zZ2hkciAqbWVzc2FnZSwgaW50IGZs
YWdzKTsKIGludCBzZW5kdG8oaW50IHMsIGNvbnN0IHZvaWQgKmRhdGFwdHIsIHNpemVfdCBzaXpl
LCBpbnQgZmxhZ3MsCiAJICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICp0bywgc29ja2xlbl90IHRv
bGVuKTsKK2ludCBzb2NrZXRwYWlyKGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2ws
IGludCBzdlsyXSk7CiAKICNlbmRpZiAvKiBfVUtfTFdJUF9TT0NLRVRfSF8gKi8KZGlmZiAtLWdp
dCBhL3NvY2tldHMuYyBiL3NvY2tldHMuYwppbmRleCAxODA2ODQ2Li5mNGY3ZDQwIDEwMDY0NAot
LS0gYS9zb2NrZXRzLmMKKysrIGIvc29ja2V0cy5jCkBAIC04MzEsMyArODMxLDkgQEAgaW50IHNl
bmR0byhpbnQgcywgY29uc3Qgdm9pZCAqZGF0YXB0ciwgc2l6ZV90IHNpemUsIGludCBmbGFncywK
IEVYSVQ6CiAJcmV0dXJuIHJldDsKIH0KKworaW50IHNvY2tldHBhaXIoaW50IGRvbWFpbiwgaW50
IHR5cGUsIGludCBwcm90b2NvbCwgaW50IHN2WzJdKQoreworCWVycm5vID0gRU5PVFNVUDsKKwly
ZXR1cm4gLTE7Cit9Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 19:09:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 19:09:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5aev-0002HL-QD; Wed, 04 Sep 2019 19:09:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5aeu-0002HE-UE
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 19:09:36 +0000
X-Inumbo-ID: 809b79ae-cf47-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 809b79ae-cf47-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 19:09:22 +0000 (UTC)
IronPort-SDR: FUSIBxy9AfKhY2XLmi9d4d6AvqhS1WLa8XRo9/iZv3RrfjWNPEzWMUP7A/ggKKqagarkkXe2/i
 XHNeqc0ouO4A==
IronPort-PHdr: =?us-ascii?q?9a23=3A/Gw4nx1DXduo4TlvsmDT+DRfVm0co7zxezQtwd?=
 =?us-ascii?q?8ZseMQL/ad9pjvdHbS+e9qxAeQG9mCsbQd1Led6vqxEUU7or+5+EgYd5JNUx?=
 =?us-ascii?q?JXwe43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQ?=
 =?us-ascii?q?viPgRpOOv1BpTSj8Oq3Oyu5pHfeQpFiCejbb9oMRm7rwXcusYLjYd8Lqs61w?=
 =?us-ascii?q?fErGZPd+lK321jOEidnwz75se+/Z5j9zpftvc8/MNeUqv0Yro1Q6VAADspL2?=
 =?us-ascii?q?466svrtQLeTQSU/XsTTn8WkhtTDAfb6hzxQ4r8vTH7tup53ymaINH2QLUpUj?=
 =?us-ascii?q?ms86tnVBnlgzoBOjUk8m/Yl9Zwgbpbrhy/uhJxzY3aboaXO/pwZa7RYc8WSH?=
 =?us-ascii?q?BdUstLSyBNHoWxZJYPAeobOuZYqpHwqkUJrRulGQmsBeXvwSJOiH/rxa06zv?=
 =?us-ascii?q?kqHAba0wwnBNIOrHXUrNPvOKcWTOC11LTIwC7fYPNNwzv98JXIfQs7rfGWWr?=
 =?us-ascii?q?J9aMzcwlQsGQPdllictIPoMy6P2ukOs2WX9fRsWfythmI9pQx9uiWjy8gxho?=
 =?us-ascii?q?XThY8YykrI+Tt3zYs7P9G0VUF2bcCiHZBNrS+VLZF2TdknQ2xwvSY6zaAJto?=
 =?us-ascii?q?CjcSgRzZQn2wbfa/uac4iU+h7jVPieITN/hH99ZrK/ggy98UmkyuHmSsa0y0?=
 =?us-ascii?q?xGrjJYktbXrHwNzRvT5tCGSvt74EihxS6C2x3c5+1ZO0w5lqrWJ4Q/zrIulJ?=
 =?us-ascii?q?cfq0rOEjfzmErsja+Wcksk+vKv6+TierjpupicN5RoigH/NKQigMi/AfkgMg?=
 =?us-ascii?q?gTRGWU5f+82Kf7/U3kW7pGlOc2kq7BvJDAOcsbvrK5AxNS0os77ha/DjGm0N?=
 =?us-ascii?q?UfnXkcNV5KZQyIj5b3NFHKO/34Cfa/g0+wkDdw3fzHMaPuApPXInjEirfhcq?=
 =?us-ascii?q?5361RAxwor0dBf+5VUB6kPIP3tXk/xtcTYAQEjPwy03ubnCcly1oIFVGKJHK?=
 =?us-ascii?q?CWLKfSvkWT6e41PeaMeZcfuCzhJPg9+/7ukXg5lEcGfamo2JsXb3a4Eu5lI0?=
 =?us-ascii?q?WEf3XshNYAHnkQvgclSuzllkGNUTpJaHmpRa4z+Cw7Apq8DYjfXoCtnKCB3C?=
 =?us-ascii?q?CjE51IYmBJEE2DHm/yeIWCRvgMcjydIs57njMfT7euVogh1RCztALh0LpnMv?=
 =?us-ascii?q?fU9TACuZ35yNd1/PfflQwq9TNvFcidyWaNHClImTYNRjk327s6rUFjx1Or1a?=
 =?us-ascii?q?ljn+ceBdFVofRTXVQUL5nZmsd9EMzzXErlY8+UAAKtRc66ADd3Ss8p3vcFeA?=
 =?us-ascii?q?BlBt/klBeVjHniOKMci7HeXM98yanbxXWkf8s=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CxBwDHCnBd/wPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUzIqjR2jNAkBAQEpEQECAQGEPwKCVTgTAgMIAQEFAQEBAQEGBAFshS4?=
 =?us-ascii?q?Mgjoigm8GeRA/ElcZgyIBgg6uEYVKgzeBSYE0hx+GMT+BEYhhhRYElG+BHpY?=
 =?us-ascii?q?XB4IiYgSGEI1fJ4MjlUioHTghgVgzGnOCbAmCRReLSYJcPQEBMYEGAQGOWQE?=
 =?us-ascii?q?B?=
X-IPAS-Result: =?us-ascii?q?A2CxBwDHCnBd/wPjVY1mHQEBBQEHBQGBZ4MFUzIqjR2jN?=
 =?us-ascii?q?AkBAQEpEQECAQGEPwKCVTgTAgMIAQEFAQEBAQEGBAFshS4Mgjoigm8GeRA/E?=
 =?us-ascii?q?lcZgyIBgg6uEYVKgzeBSYE0hx+GMT+BEYhhhRYElG+BHpYXB4IiYgSGEI1fJ?=
 =?us-ascii?q?4MjlUioHTghgVgzGnOCbAmCRReLSYJcPQEBMYEGAQGOWQEB?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4699470"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 22:09:16 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 559DF1A60241;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id t4tzZzwBpZNU; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 36E721A6023F;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id oqkES3JX_K_w; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 190B91A601D2;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 22:09:08 +0300
Message-Id: <20190904190912.6801-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h
 declarations
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu,
 vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

KiBBcyB3ZSBkaWQgaW4gY29tbWl0IGIwZGM1OTNkLCB3ZSB1c2UgZnVuY3Rpb24gd3JhcHBlcnMg
aW5zdGVhZCBvZiBtYWNyb3MgZm9yCmdldGhvc3RieW5hbWUoKSBhbmQgZ2V0aG9zdGJ5bmFtZV9y
KCkKKiBBZGQgbWlzc2luZyBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIGltcGxlbWVudGVkIG9y
IHN0dWJiZWQgaW4gZ2x1ZSBjb2RlCgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGlu
Lmx1cHVAY3MucHViLnJvPgotLS0KIGV4cG9ydHN5bXMudWsgICB8ICAxICsKIGhvc3QuYyAgICAg
ICAgICB8IDE5ICsrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbmV0ZGIuaCB8IDIzICsrKysr
KysrKysrKysrKysrKy0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoKyksIDUg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsK
aW5kZXggNmZlOTVlYy4uMWNhNDNmOCAxMDA2NDQKLS0tIGEvZXhwb3J0c3ltcy51aworKysgYi9l
eHBvcnRzeW1zLnVrCkBAIC03LDYgKzcsNyBAQCBmcmVlYWRkcmluZm8KIGdhaV9zdHJlcnJvcgog
Z2V0YWRkcmluZm8KIGdldGhvc3RieWFkZHIKK2dldGhvc3RieW5hbWUKIGdldG5hbWVpbmZvCiBn
ZXRwZWVybmFtZQogZ2V0cHJvdG9ieW5hbWUKZGlmZiAtLWdpdCBhL2hvc3QuYyBiL2hvc3QuYwpp
bmRleCA1NTlkMTg2Li45YzRjOGVhIDEwMDY0NAotLS0gYS9ob3N0LmMKKysrIGIvaG9zdC5jCkBA
IC0zMywxMCArMzMsMjkgQEAKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9z
b2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCisKKyNpZiBMV0lQX0ROUyAmJiBMV0lQX1NP
Q0tFVAorCisjaWYgIShMV0lQX0NPTVBBVF9TT0NLRVRTKQorc3RydWN0IGhvc3RlbnQgKmdldGhv
c3RieW5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlyZXR1cm4gbHdpcF9nZXRob3N0YnluYW1l
KG5hbWUpOworfQorCitpbnQgZ2V0aG9zdGJ5bmFtZV9yKGNvbnN0IGNoYXIgKm5hbWUsCisJCXN0
cnVjdCBob3N0ZW50ICpyZXQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKwkJc3RydWN0IGhv
c3RlbnQgKipyZXN1bHQsIGludCAqaF9lcnJub3ApCit7CisJcmV0dXJuIGx3aXBfZ2V0aG9zdGJ5
bmFtZV9yKG5hbWUsIHJldCwgYnVmLCBidWZsZW4sIHJlc3VsdCwgaF9lcnJub3ApOworfQorI2Vu
ZGlmCiAKIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyKGNvbnN0IHZvaWQgKmFkZHIgX191
bnVzZWQsCiAJc29ja2xlbl90IGxlbiBfX3VudXNlZCwgaW50IHR5cGUgX191bnVzZWQpCiB7CiAJ
cmV0dXJuIE5VTEw7CiB9CisjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXRkYi5oIGIv
aW5jbHVkZS9uZXRkYi5oCmluZGV4IDA4NTZhNDkuLmIxMDAxMzYgMTAwNjQ0Ci0tLSBhL2luY2x1
ZGUvbmV0ZGIuaAorKysgYi9pbmNsdWRlL25ldGRiLmgKQEAgLTEsMTAgKzEsMTYgQEAKICNpbmNs
dWRlIDxjb21wYXQvcG9zaXgvbmV0ZGIuaD4KIAotI2lmIExXSVBfRE5TICYmIExXSVBfU09DS0VU
ICYmICEoTFdJUF9DT01QQVRfU09DS0VUUykKKyNpZiBMV0lQX0ROUyAmJiBMV0lQX1NPQ0tFVAog
Ci0jZGVmaW5lIGdldGhvc3RieW5hbWUobmFtZSkgbHdpcF9nZXRob3N0YnluYW1lKG5hbWUpCi0j
ZGVmaW5lIGdldGhvc3RieW5hbWVfcihuYW1lLCByZXQsIGJ1ZiwgYnVmbGVuLCByZXN1bHQsIGhf
ZXJybm9wKSBcCi0JCWx3aXBfZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIHJldCwgYnVmLCBidWZsZW4s
IHJlc3VsdCwgaF9lcnJub3ApCisjaWYgIShMV0lQX0NPTVBBVF9TT0NLRVRTKQorc3RydWN0IGhv
c3RlbnQgKmdldGhvc3RieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgZ2V0aG9zdGJ5bmFt
ZV9yKGNvbnN0IGNoYXIgKm5hbWUsCisJCXN0cnVjdCBob3N0ZW50ICpyZXQsIGNoYXIgKmJ1Ziwg
c2l6ZV90IGJ1ZmxlbiwKKwkJc3RydWN0IGhvc3RlbnQgKipyZXN1bHQsIGludCAqaF9lcnJub3Ap
OworI2VuZGlmCisKK3N0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyKGNvbnN0IHZvaWQgKmFk
ZHIgX191bnVzZWQsCisJCXNvY2tsZW5fdCBsZW4gX191bnVzZWQsIGludCB0eXBlIF9fdW51c2Vk
KTsKIAogaW50IGdldGFkZHJpbmZvKGNvbnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKnNlcnZp
Y2UsCiAJCWNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsCkBAIC0xMyw2ICsxOSw5IEBAIHZv
aWQgZnJlZWFkZHJpbmZvKHN0cnVjdCBhZGRyaW5mbyAqcmVzKTsKIAogI2VuZGlmIC8qIExXSVBf
RE5TICYmIExXSVBfU09DS0VUICYmICEoTFdJUF9DT01QQVRfU09DS0VUUykgKi8KIAorY29uc3Qg
Y2hhciAqZ2FpX3N0cmVycm9yKGludCBlcnJjb2RlKTsKKworCiBzdHJ1Y3Qgc2VydmVudCB7CiAJ
Y2hhciAgICAqc19uYW1lOyAgICAgICAgLyogb2ZmaWNpYWwgc2VydmljZSBuYW1lICovCiAJY2hh
ciAgICAqKnNfYWxpYXNlczsgICAgLyogYWxpYXMgbGlzdCAqLwpAQCAtMjYsNyArMzUsMTEgQEAg
c3RydWN0IHByb3RvZW50IHsKIAlpbnQgICAgIHBfcHJvdG87ICAgICAgICAvKiBwcm90b2NvbCAj
ICovCiB9OwogCi1jb25zdCBjaGFyICpnYWlfc3RyZXJyb3IoaW50IGVycmNvZGUpOworc3RydWN0
IHByb3RvZW50ICpnZXRwcm90b2VudCh2b2lkKTsKK3N0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9i
eW5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1i
ZXIoaW50IG51bSk7Cit2b2lkIGVuZHByb3RvZW50KHZvaWQpOwordm9pZCBzZXRwcm90b2VudChp
bnQgc3RheW9wZW4pOwogCiAvKgogICogQ29uc3RhbnRzIGZvciBnZXRuYW1laW5mbygpCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 19:09:42 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 19:09:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5af0-0002IA-Rp; Wed, 04 Sep 2019 19:09:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5aez-0002I2-TV
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 19:09:41 +0000
X-Inumbo-ID: 80bfb972-cf47-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 80bfb972-cf47-11e9-b76c-bc764e2007e4;
 Wed, 04 Sep 2019 19:09:22 +0000 (UTC)
IronPort-SDR: 28S/9qW1ZqlWuwlXgivqcuSXG7W1mRlCQ4b6wtUWiaoiO6lazAs0Byy3FknYjzVV/LQNrtI50e
 zOUKXHMoxCCQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AOV8PJhfGHtpi668HFP0JduWClGMj4u6mDksu8p?=
 =?us-ascii?q?Mizoh2WeGdxcW8YR7h7PlgxGXEQZ/co6odzbaP6ea5BjFLuMzQ+Fk5M7V0Hy?=
 =?us-ascii?q?cfjssXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFR?=
 =?us-ascii?q?rwLxd6KfroEYDOkcu3y/qy+5rOaAlUmTaxe7x/IAiooQnLq8Ubg4tvJqksxh?=
 =?us-ascii?q?fXpnZDZvhby35vKV+PhRj3+92+/IRk8yReuvIh89BPXKDndKkmTrJWESorPX?=
 =?us-ascii?q?kt6MLkqRfMQw2P5mABUmoNiRpHHxLF7BDhUZjvtCbxq/dw1zObPc3ySrA0RC?=
 =?us-ascii?q?ii4qJ2QxLmlCsLKzg0+3zRh8dtjqxUvQihqgR/zYDKfY+bOvlwcKTfctMUXm?=
 =?us-ascii?q?dNQtpdWjZdDo6mc4cDE+wMNvtYoYnnoFsOqAOzCBerBOP01j9Ih3n21rA83e?=
 =?us-ascii?q?Q8CQHGwRErEtUSv3TTt9X1KKYSUeavwKnM0DXDd+5W1Czh54jTaBwhueyMUq?=
 =?us-ascii?q?lqfcrLzkkiDgXIhUiTp4z9Jz6Zy+sAv3WB4+djVe+jkXArpx9zrzS1yMogkp?=
 =?us-ascii?q?TFi40Ixlze9ih0wJw5KcO2RUN1e9KoDZRduz+cOoBrWM0tWXtotzw/yrAevJ?=
 =?us-ascii?q?67ezUFx4o/yh7EbvyHb5CI4hX+VOaNOTt4hGxqeLa4hxuq70igz/fzVsiw0F?=
 =?us-ascii?q?pQsiVFicPAtmgQ1xPI8MSHUPx98l+g2TaJyQ/T9vlJLV07mKbGMZIswb49mo?=
 =?us-ascii?q?ANvUjdHCL6gkv7gLeTdko+++io7+rnYq/hpp+ZL4J7lgb+Mr8ymsy+B+Q0KA?=
 =?us-ascii?q?wOX3WD+eShz7Ds4Vb5TK9Sjv0riabVqoraJcMDqq6jHwBVypoj6wq4Dzq+1d?=
 =?us-ascii?q?QYnH8HLFNCeBKcloTmJk/BIO7mAve7mFmslDZrx+vaPr36GJnMIWbMkLH7cb?=
 =?us-ascii?q?Z68U5cxxI5zcpD6JJMFrEBPPXzV1f/tNPGCh85MhS0zPj9BNV9y4MeWH6AAq?=
 =?us-ascii?q?6CPaPUr1CH+uYvLPOXa4MPpjn9NuAv5+Tygn8hhV8dYa6p0IMMaHC5G/RmJE?=
 =?us-ascii?q?OZbWDvgtccD2gKuAs/Q/LwiFCZVz5ceWq9X6Ym6T4gEo6pE5rDTJi3gLOdxC?=
 =?us-ascii?q?e7AoFWZmdeB1CSFXfnbZiLVO8WZyKUP8BhiCILVbm7R4A6zx6hqQj6y7t6Lu?=
 =?us-ascii?q?fP4S0YqY/j28Vv6+LJiR4y7iZ4D9mF026WVW10hGQIFHcK2/V6oEp8zUzG3a?=
 =?us-ascii?q?VmjvhwEd1I++gPQgo8c5nGwL9UEdf3DynGZcuITh6CX827SWU6ScktwtlIZ1?=
 =?us-ascii?q?tlBv2plVbbwiDsGbhDxO/DP4A97q+Jhyu5HM160XuTjKQ=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2C0BwDHCnBd/wPjVY1cCh0BAQUBBwU?=
 =?us-ascii?q?BgWeDBVMyKo0dozQJAQEBKREBAgEBhD8CglU4EwIDCAEBBQEBAQEBBgQBbIU?=
 =?us-ascii?q?uDII6IoJvBidSED8SVxmDIgGCDq1eM4VKgzeBSYE0hx+GMT+BEYNQhBl4hRY?=
 =?us-ascii?q?EjEWJSHCVJweCImIEhhCNXyeDI5VIqB04IYFYMxqDXwmCRReLSYJcPQEBMYE?=
 =?us-ascii?q?GAQGOWQEB?=
X-IPAS-Result: =?us-ascii?q?A2C0BwDHCnBd/wPjVY1cCh0BAQUBBwUBgWeDBVMyKo0do?=
 =?us-ascii?q?zQJAQEBKREBAgEBhD8CglU4EwIDCAEBBQEBAQEBBgQBbIUuDII6IoJvBidSE?=
 =?us-ascii?q?D8SVxmDIgGCDq1eM4VKgzeBSYE0hx+GMT+BEYNQhBl4hRYEjEWJSHCVJweCI?=
 =?us-ascii?q?mIEhhCNXyeDI5VIqB04IYFYMxqDXwmCRReLSYJcPQEBMYEGAQGOWQEB?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4699471"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 22:09:16 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 604D21A6023F;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 8fqEX9GXn4jR; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 455241A601D2;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 2jXcPCP3ADve; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 2D65E1A601E2;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 22:09:10 +0300
Message-Id: <20190904190912.6801-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 3/5] sockets: Add recvmsg()
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu,
 vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBl
eHBvcnRzeW1zLnVrICAgICAgICB8ICAxICsKIGluY2x1ZGUvc3lzL3NvY2tldC5oIHwgIDEgKwog
c29ja2V0cy5jICAgICAgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNo
YW5nZWQsIDIxIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIvZXhw
b3J0c3ltcy51awppbmRleCAxY2E0M2Y4Li4yZjlmNGY2IDEwMDY0NAotLS0gYS9leHBvcnRzeW1z
LnVrCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTM4LDYgKzM4LDcgQEAgcGJ1Zl9yZWYKIHBvbGwK
IHJlY3YKIHJlY3Zmcm9tCityZWN2bXNnCiBzZWxlY3QKIHNlbmQKIHNlbmRtc2cKZGlmZiAtLWdp
dCBhL2luY2x1ZGUvc3lzL3NvY2tldC5oIGIvaW5jbHVkZS9zeXMvc29ja2V0LmgKaW5kZXggYWZm
MDY0ZS4uN2UwMjdiOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zeXMvc29ja2V0LmgKKysrIGIvaW5j
bHVkZS9zeXMvc29ja2V0LmgKQEAgLTcwLDYgKzcwLDcgQEAgaW50IGxpc3RlbihpbnQgcywgaW50
IGJhY2tsb2cpOwogaW50IHJlY3YoaW50IHMsIHZvaWQgKm1lbSwgc2l6ZV90IGxlbiwgaW50IGZs
YWdzKTsKIGludCByZWN2ZnJvbShpbnQgcywgdm9pZCAqbWVtLCBzaXplX3QgbGVuLCBpbnQgZmxh
Z3MsCiAJICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIHNvY2tsZW5fdCAqZnJvbWxlbik7Citp
bnQgcmVjdm1zZyhpbnQgcywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpOwogaW50IHNl
bmQoaW50IHMsIGNvbnN0IHZvaWQgKmRhdGFwdHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwog
aW50IHNlbmRtc2coaW50IHMsIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1lc3NhZ2UsIGludCBmbGFn
cyk7CiBpbnQgc2VuZHRvKGludCBzLCBjb25zdCB2b2lkICpkYXRhcHRyLCBzaXplX3Qgc2l6ZSwg
aW50IGZsYWdzLApkaWZmIC0tZ2l0IGEvc29ja2V0cy5jIGIvc29ja2V0cy5jCmluZGV4IGFhNzcy
ZGEuLjE4MDY4NDYgMTAwNjQ0Ci0tLSBhL3NvY2tldHMuYworKysgYi9zb2NrZXRzLmMKQEAgLTc1
NSw2ICs3NTUsMjUgQEAgRVhJVDoKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgcmVjdm1zZyhpbnQg
cywgc3RydWN0IG1zZ2hkciAqbXNnLCBpbnQgZmxhZ3MpCit7CisJaW50IHJldCA9IDA7CisJc3Ry
dWN0IHNvY2tfbmV0X2ZpbGUgKmZpbGUgPSBOVUxMOworCisJZmlsZSA9IHNvY2tfbmV0X2ZpbGVf
Z2V0KHMpOworCWlmIChQVFJJU0VSUihmaWxlKSkgeworCQlMV0lQX0RFQlVHRihTT0NLRVRTX0RF
QlVHLAorCQkJICAgICgiZmFpbGVkIHRvIGlkZW50aWZ5IHNvY2tldCBkZXNjcmlwdG9yXG4iKSk7
CisJCXJldCA9IC0xOworCQlTT0NLX05FVF9TRVRfRVJSTk8oUFRSMkVSUihmaWxlKSk7CisJCWdv
dG8gRVhJVDsKKwl9CisJcmV0ID0gbHdpcF9yZWN2bXNnKGZpbGUtPnNvY2tfZmQsIG1zZywgZmxh
Z3MpOworCXZmc2NvcmVfcHV0X2ZpbGUoZmlsZS0+dmZzY29yZV9maWxlKTsgLyogcmVsZWFzZSBy
ZWZjb3VudCAqLworRVhJVDoKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgc2VuZChpbnQgcywgY29u
c3Qgdm9pZCAqZGF0YXB0ciwgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKIAlpbnQgcmV0ID0g
MDsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 04 19:09:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 04 Sep 2019 19:09:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5af5-0002J1-TN; Wed, 04 Sep 2019 19:09:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=bnsd=W7=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i5af4-0002Iu-UF
 for minios-devel@lists.xen.org; Wed, 04 Sep 2019 19:09:46 +0000
X-Inumbo-ID: 818fe764-cf47-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 818fe764-cf47-11e9-b299-bc764e2007e4;
 Wed, 04 Sep 2019 19:09:23 +0000 (UTC)
IronPort-SDR: ALAnmbOnsQWO+lIPpQdlFQK+h05A2JOw6kzGKsQwQgu8ReoFUxD+1IbCfC/neapydHrU5uzdfD
 RfuMsuZzDXxw==
IronPort-PHdr: =?us-ascii?q?9a23=3AiA3Z6BVlIHiKdTrXiwb29M2j+M/V8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbRKGt8tkgFKBZ4jH8fUM07OQ7/m6HzVfvN3Y6iFKWacPfi?=
 =?us-ascii?q?dNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV?=
 =?us-ascii?q?3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sBvdutMLjYZgKqs9xQ?=
 =?us-ascii?q?bFrmVMdu9L2W5mOFWfkgrm6Myt5pBj6SNQu/wg985ET6r3erkzQKJbAjo7LW?=
 =?us-ascii?q?07/dXnuhbfQwSB4HscSXgWnQFTAwfZ9hH6X4z+vTX8u+FgxSSVJ8z2TbQzWT?=
 =?us-ascii?q?S/86dmTQLjhSkbOzIl9mzcl8p9h79Zrh28vRxy247abp+IOvRwfa3TesgXSX?=
 =?us-ascii?q?ZdUstLSyBMGJ+wY5cJAuEcPehYtY79p14WoBagAgmsH//vyj5OhnTr26M6zv?=
 =?us-ascii?q?whERzb1wEnA90Ot2/UrMn0NKcUS+y1yLTIzS3eb/5NxTj985LEcgg8of6XR7?=
 =?us-ascii?q?5wa83RxFApGgjYjVuQsZToMy6a2+gQqWSW7OptWfixh2I5qQx9uDaiyt8xho?=
 =?us-ascii?q?TGm44Z0FPJ+CVjzIorK9C1RlR3bcOrHZdOsSyRKpF4Tdk4Q25yvSY30rgGuZ?=
 =?us-ascii?q?mmcycU0Jkn3Bvfa+Cfc4iP/xLjSP6dITdmi3Jhf7Kynwiy8U26xe39Usm4yk?=
 =?us-ascii?q?pFrjFfntnUq3ACzAbf6tKASvdl/0eh3yiA1xzL5+1ZLk04iLDXJp0hz7IqiJ?=
 =?us-ascii?q?Yfr0bOEjX4lUnuia+ZbEQk+uym6+T9ZbXmo4eROJNzigHlLqQum8q/Df48Mg?=
 =?us-ascii?q?gTR2ib5P+x26H4/UHjWLVKk+Y5nrPDsJDdPcgbvLK2AxdJ0oY/7BayFzKm0N?=
 =?us-ascii?q?UenXkGK1JFYwuLgJX3NFHQPv/4Ceyyg1CtkDdw2/DGJaftA5rTIXjFirvheq?=
 =?us-ascii?q?x960FEwgop0d9f/45UCq0GIP/rVE/+qtjYDh4hMwOq2ernCMh91oICVmKOGa?=
 =?us-ascii?q?KZNr3dvkOM5u01OOaAfpEauCvlIfg/+/HulWM5mUMafaSxxpsXaXW4HvNgI0?=
 =?us-ascii?q?mDYnrsn8kOEWELvwUgVuznk1uCXiBPaHa2Ra0z/Ss3B5y7DY3bXICinKSB3D?=
 =?us-ascii?q?unHp1Rfm1GFFSMHm31eIqcQfgMbj+dItV/nTwFT7SuUJUu2gyptA/71rpqNf?=
 =?us-ascii?q?HU+jEFtZ3+ztR6/fHclQoo+TxpF8SSyHuBT3tznjBAezhj2aF5oEtmj1uOz6?=
 =?us-ascii?q?V8q/hZDsBIoeNEVEE9L5GP4fZ9DoXZXRndf9HBbEu+X53yCjYqUtM3hdsTe1?=
 =?us-ascii?q?tVEM7klg3JmTCtVexG34eXDYA5p/qPl0P6INxwni7L?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BlDQDHCnBd/wPjVY1mHgEGBwaBZwK?=
 =?us-ascii?q?DA1MyKo0dozQJAQEBKREBAgEBhD+CVzkFDQIDCAEBBQEBAQEBBgQBbIUuDII?=
 =?us-ascii?q?6IoNuT4QkAYIOrhGFSoM3gUmBNYcehjE/iXKFFgSWDZYXB4IiYgSGEI1fJ4I?=
 =?us-ascii?q?kf5VIqB05IIFYMxqDXwmCDgGMFoJcPQEBMYEGAQGOWQEB?=
X-IPAS-Result: =?us-ascii?q?A2BlDQDHCnBd/wPjVY1mHgEGBwaBZwKDA1MyKo0dozQJA?=
 =?us-ascii?q?QEBKREBAgEBhD+CVzkFDQIDCAEBBQEBAQEBBgQBbIUuDII6IoNuT4QkAYIOr?=
 =?us-ascii?q?hGFSoM3gUmBNYcehjE/iXKFFgSWDZYXB4IiYgSGEI1fJ4Ikf5VIqB05IIFYM?=
 =?us-ascii?q?xqDXwmCDgGMFoJcPQEBMYEGAQGOWQEB?=
X-IronPort-AV: E=Sophos;i="5.64,467,1559509200"; 
   d="scan'208";a="4699468"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 04 Sep 2019 22:09:16 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 545CE1A601DB;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id kMt-HviUI3No; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 327911A60229;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id vWuRQ4mp0EkU; Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 07E791A601C5;
 Wed,  4 Sep 2019 22:09:16 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed,  4 Sep 2019 22:09:07 +0300
Message-Id: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 0/5] Changes for supporting
 Python 3
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu,
 vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgY2hhbmdlcyBhcmUgbmVlZGVkIHdoZW4gc29ja2V0cyBtb2R1bGUgaXMgZW5hYmxlZCBm
b3IgUHl0aG9uIDMKaW50ZXJwcmV0ZXIuCgpDb3N0aW4gTHVwdSAoNSk6CiAgUmV2aXNpdCBuZXRk
Yi5oIGRlY2xhcmF0aW9ucwogIHN5cy9zb2NrZXQuaDogQWRkIFNPTUFYQ09OTiBtYWNybwogIHNv
Y2tldHM6IEFkZCByZWN2bXNnKCkgZnVuY3Rpb24KICBzb2NrZXRzOiBBZGQgc29ja2V0cGFpcigp
IHN0dWIKICBNYWtlZmlsZS51azogU3VwcHJlc3MgJ3VudXNlZCBwYXJhbWV0ZXJzJyB3YXJuaW5n
cwoKIE1ha2VmaWxlLnVrICAgICAgICAgIHwgIDIgKy0KIGV4cG9ydHN5bXMudWsgICAgICAgIHwg
IDMgKysrCiBob3N0LmMgICAgICAgICAgICAgICB8IDE5ICsrKysrKysrKysrKysrKysrKysKIGlu
Y2x1ZGUvbmV0ZGIuaCAgICAgIHwgMjMgKysrKysrKysrKysrKysrKysrLS0tLS0KIGluY2x1ZGUv
c3lzL3NvY2tldC5oIHwgIDYgKysrKysrCiBzb2NrZXRzLmMgICAgICAgICAgICB8IDI1ICsrKysr
KysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNzIgaW5zZXJ0aW9ucygrKSwg
NiBkZWxldGlvbnMoLSkKCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 00:20:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 00:20:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5fVV-0001vX-Bi; Thu, 05 Sep 2019 00:20:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=L3Pg=XA=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i5fVT-0001vO-Rz
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 00:20:11 +0000
X-Inumbo-ID: eaec84f8-cf72-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.49]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id eaec84f8-cf72-11e9-a337-bc764e2007e4;
 Thu, 05 Sep 2019 00:20:09 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Ql+7JRqoCMh25OeBPu+bzHQUIgC+nKGRl3x6U5FmVKECsKpVW+Hw3x27PYgctw5yF841+aRwl6VwpZTw6Erp3eAS5kBj0qMhr9HJPPk3rRV3tijWorMypyeuuZabC3FtyeMGnw3CH0OYAriLiwah5z2OJ3sZGmh1A70K9Xf3atx7ujyQZa4yCRU31VcTkyTAcD5mr32XnHh9sIaejWAgJGLeN/WxKY3Q4cBTKuNvoF+ClrBMvIhNLPkRUHidW2RRYUm8wB8dZIHo1UxZMg/IyhJf2OgIvlaraJC0vxZVEZeXKQnMCzIqkBIRCKdBQX9bn8e9W+qgywLd8Sx1+xQ2Ng==
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=Fyrl+sXqpnLyaHI8/MKTWfb4SqR7Jc/AOFDFVyHX+9I=;
 b=QfApeeRtKV1vr9CKBuuVhaF9eY4CxjhbhnYbYrX0F9csJ35XVLC1im/HI2hEUj9jIwmzur6961mObfvdDh+6KMD+YIa8A60fkVfixpL6iwsR00+qn2nTnfEMKjVwdRYsnVygHlFmZWEvlIgObw5gsHeo6KUBY5fyr1ad9qSDBP+Zfa+4LaLABLRlFLZgrPuLgj5E7xUem0TmGRpuxmoW691xPuSEmuWsl1gedzCvGggCYGaFVpYzYVBCVDummOHUEnhrXJFP2i5JGv5GZfvYAKFwx+NoflwKTZLjX+ogo2dsOycCwQDmjqefMk1OAnkHmfNuHceCBjjXy4QoqWrWAA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4954.eurprd01.prod.exchangelabs.com (20.177.209.204) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.18; Thu, 5 Sep
 2019 00:20:07 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Thu, 5 Sep 2019
 00:20:07 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Import the timegm function from
 musl
Thread-Index: AQHVY3+reRAqTVTZFU+MmnrLKqM+qQ==
Date: Thu, 5 Sep 2019 00:20:07 +0000
Message-ID: <20190905001935.29223-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1P190CA0012.EURP190.PROD.OUTLOOK.COM
 (2603:10a6:802:2b::25) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 0433f6c9-571a-4df0-1a2f-08d73196ce1d
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4954; 
x-ms-traffictypediagnostic: PR1PR01MB4954:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB495452D9CAC3359792B91BD2A6BB0@PR1PR01MB4954.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:8273;
x-forefront-prvs: 015114592F
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(376002)(136003)(396003)(39860400002)(346002)(199004)(189003)(64756008)(66446008)(476003)(66556008)(53936002)(2616005)(66946007)(14454004)(486006)(5640700003)(186003)(6486002)(99286004)(66476007)(6436002)(25786009)(7736002)(6512007)(45776006)(102836004)(2501003)(478600001)(4326008)(6916009)(6506007)(386003)(5660300002)(305945005)(54906003)(52116002)(46003)(256004)(2351001)(86362001)(71190400001)(1076003)(71200400001)(316002)(81156014)(81166006)(2906002)(6116002)(50226002)(786003)(8676002)(8936002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4954;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: u0tfli5+kIj8z9uY3MDmVWze7mdjnv9gYobKSDZ5kSdCMm7jxZqpo8fl1O/TSvnUtD6t29aXbu/TtLcb/u3VwnTLynzZozo9wm3YdZVNnWrv3H794mbyCCq1nMhWGh1e+BAvzUIIewCXcGJTvF+y5dlct1OZm5+R9GnQSJOUszWZkdeVjzQqvkDbD1Dm/JziU2CrpAxh/ag6hdalofqMO3CJZAanB3CzzJ4JA5nz5WA7EdXOEaPxDWUMr9xTv6mvYxYQJDaGj7RcpsKmE2MXIPHCFgW+j02MV9tR7Cx2GfJuc/r1QB7EeT2jJiIGLZL/ZChqn7ydm373Bhbjge3hzJ5PyNpv5Zxlo24KPgpUdQaQMM/Sk67uKYlw8pwlpNsBA+SA3vFZHR2ARxaiivYr5JvlvgImNOuqECN4w2LSwKg=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 0433f6c9-571a-4df0-1a2f-08d73196ce1d
X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Sep 2019 00:20:07.2021 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 9xJZ7qY72NjqBuXZ1s39X+GtXunNM966s2ibhX+fDJS3hfX74fdV44PG6FUdQ8HhfaVxYvJwzdxk42DLXsr8ye7TK0UnhNNPX3g6jUvrdfuymXbMZzFP9n9puyMyS0rK
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4954
Subject: [Minios-devel] [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Import the timegm
 function from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29waWVkIGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgpnaXQ6Ly9naXQu
bXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQuClRoZSBvbmx5IGNoYW5nZSBtYWRl
IHRvIHRoZSBmaWxlcyB3YXMgdG8gcmVtb3ZlCnRoZSBkZXBlbmRlbmN5IHVwb24gdGhlIHRpbWVf
aW1wbC5oIGhlYWRlci4KClNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9h
bmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KLS0tCiBNYWtlZmlsZS51ayAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIDUgKysKIG11c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX19tb250
aF90b19zZWNzLmMgfCAxMCArKysKIG11c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX19zZWNzX3RvX3Rt
LmMgICAgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysKIG11c2wtaW1wb3J0ZWQvc3JjL3Rp
bWUvX190bV90b19zZWNzLmMgICAgfCAyNiArKysrKysrKwogbXVzbC1pbXBvcnRlZC9zcmMvdGlt
ZS9fX3llYXJfdG9fc2Vjcy5jICB8IDQ3ICsrKysrKysrKysrKysrCiBtdXNsLWltcG9ydGVkL3Ny
Yy90aW1lL3RpbWVnbS5jICAgICAgICAgIHwgMTcgKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMTg2
IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtdXNsLWltcG9ydGVkL3NyYy90aW1l
L19fbW9udGhfdG9fc2Vjcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbXVzbC1pbXBvcnRlZC9zcmMv
dGltZS9fX3NlY3NfdG9fdG0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG11c2wtaW1wb3J0ZWQvc3Jj
L3RpbWUvX190bV90b19zZWNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtdXNsLWltcG9ydGVkL3Ny
Yy90aW1lL19feWVhcl90b19zZWNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtdXNsLWltcG9ydGVk
L3NyYy90aW1lL3RpbWVnbS5jCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51
awppbmRleCAwMWRhNzI0Li4xYzllNmJiIDEwMDY0NAotLS0gYS9NYWtlZmlsZS51aworKysgYi9N
YWtlZmlsZS51awpAQCAtMTI3LDYgKzEyNywxMSBAQCBMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAk
KExJQk5FV0xJQkNfQkFTRSkvbW50ZW50LmMKIExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElC
TkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy9taXNjL3N5c2xvZy5jCiBMSUJORVdMSUJH
TFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvbXVzbC1pbXBvcnRlZC9zcmMvdGVybWlv
cy90Y3NldGF0dHIuYwogTElCTkVXTElCR0xVRV9TUkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0Up
L211c2wtaW1wb3J0ZWQvc3JjL3Rlcm1pb3MvdGNnZXRhdHRyLmMKK0xJQk5FV0xJQkdMVUVfU1JD
Uy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy90aW1lL19fbW9udGhf
dG9fc2Vjcy5jCitMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJQkNfQkFTRSkvbXVz
bC1pbXBvcnRlZC9zcmMvdGltZS9fX3NlY3NfdG9fdG0uYworTElCTkVXTElCR0xVRV9TUkNTLXkg
Kz0gJChMSUJORVdMSUJDX0JBU0UpL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvdGltZWdtLmMKK0xJ
Qk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3Ny
Yy90aW1lL19fdG1fdG9fc2Vjcy5jCitMSUJORVdMSUJHTFVFX1NSQ1MteSArPSAkKExJQk5FV0xJ
QkNfQkFTRSkvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX3llYXJfdG9fc2Vjcy5jCiAKICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCiAjIE5ld2xpYi9saWJjIGNvZGUgLS0gYXJnegpkaWZmIC0tZ2l0
IGEvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX21vbnRoX3RvX3NlY3MuYyBiL211c2wtaW1wb3J0
ZWQvc3JjL3RpbWUvX19tb250aF90b19zZWNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDMyNDhmYgotLS0gL2Rldi9udWxsCisrKyBiL211c2wtaW1wb3J0ZWQvc3JjL3Rp
bWUvX19tb250aF90b19zZWNzLmMKQEAgLTAsMCArMSwxMCBAQAoraW50IF9fbW9udGhfdG9fc2Vj
cyhpbnQgbW9udGgsIGludCBpc19sZWFwKQoreworCXN0YXRpYyBjb25zdCBpbnQgc2Vjc190aHJv
dWdoX21vbnRoW10gPSB7CisJCTAsIDMxKjg2NDAwLCA1OSo4NjQwMCwgOTAqODY0MDAsCisJCTEy
MCo4NjQwMCwgMTUxKjg2NDAwLCAxODEqODY0MDAsIDIxMio4NjQwMCwKKwkJMjQzKjg2NDAwLCAy
NzMqODY0MDAsIDMwNCo4NjQwMCwgMzM0Kjg2NDAwIH07CisJaW50IHQgPSBzZWNzX3Rocm91Z2hf
bW9udGhbbW9udGhdOworCWlmIChpc19sZWFwICYmIG1vbnRoID49IDIpIHQrPTg2NDAwOworCXJl
dHVybiB0OworfQpkaWZmIC0tZ2l0IGEvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX3NlY3NfdG9f
dG0uYyBiL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX19zZWNzX3RvX3RtLmMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3YmY3MAotLS0gL2Rldi9udWxsCisrKyBiL211c2wt
aW1wb3J0ZWQvc3JjL3RpbWUvX19zZWNzX3RvX3RtLmMKQEAgLTAsMCArMSw4MSBAQAorI2luY2x1
ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworLyogMjAwMC0wMy0wMSAobW9kIDQw
MCB5ZWFyLCBpbW1lZGlhdGVseSBhZnRlciBmZWIyOSAqLworI2RlZmluZSBMRUFQT0NIICg5NDY2
ODQ4MDBMTCArIDg2NDAwKigzMSsyOSkpCisKKyNkZWZpbmUgREFZU19QRVJfNDAwWSAoMzY1KjQw
MCArIDk3KQorI2RlZmluZSBEQVlTX1BFUl8xMDBZICgzNjUqMTAwICsgMjQpCisjZGVmaW5lIERB
WVNfUEVSXzRZICAgKDM2NSo0ICAgKyAxKQorCitpbnQgX19zZWNzX3RvX3RtKGxvbmcgbG9uZyB0
LCBzdHJ1Y3QgdG0gKnRtKQoreworCWxvbmcgbG9uZyBkYXlzLCBzZWNzOworCWludCByZW1kYXlz
LCByZW1zZWNzLCByZW15ZWFyczsKKwlpbnQgcWNfY3ljbGVzLCBjX2N5Y2xlcywgcV9jeWNsZXM7
CisJaW50IHllYXJzLCBtb250aHM7CisJaW50IHdkYXksIHlkYXksIGxlYXA7CisJc3RhdGljIGNv
bnN0IGNoYXIgZGF5c19pbl9tb250aFtdID0gezMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMx
LDMxLDI5fTsKKworCS8qIFJlamVjdCB0aW1lX3QgdmFsdWVzIHdob3NlIHllYXIgd291bGQgb3Zl
cmZsb3cgaW50ICovCisJaWYgKHQgPCBJTlRfTUlOICogMzE2MjI0MDBMTCB8fCB0ID4gSU5UX01B
WCAqIDMxNjIyNDAwTEwpCisJCXJldHVybiAtMTsKKworCXNlY3MgPSB0IC0gTEVBUE9DSDsKKwlk
YXlzID0gc2VjcyAvIDg2NDAwOworCXJlbXNlY3MgPSBzZWNzICUgODY0MDA7CisJaWYgKHJlbXNl
Y3MgPCAwKSB7CisJCXJlbXNlY3MgKz0gODY0MDA7CisJCWRheXMtLTsKKwl9CisKKwl3ZGF5ID0g
KDMrZGF5cyklNzsKKwlpZiAod2RheSA8IDApIHdkYXkgKz0gNzsKKworCXFjX2N5Y2xlcyA9IGRh
eXMgLyBEQVlTX1BFUl80MDBZOworCXJlbWRheXMgPSBkYXlzICUgREFZU19QRVJfNDAwWTsKKwlp
ZiAocmVtZGF5cyA8IDApIHsKKwkJcmVtZGF5cyArPSBEQVlTX1BFUl80MDBZOworCQlxY19jeWNs
ZXMtLTsKKwl9CisKKwljX2N5Y2xlcyA9IHJlbWRheXMgLyBEQVlTX1BFUl8xMDBZOworCWlmIChj
X2N5Y2xlcyA9PSA0KSBjX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gY19jeWNsZXMgKiBEQVlTX1BF
Ul8xMDBZOworCisJcV9jeWNsZXMgPSByZW1kYXlzIC8gREFZU19QRVJfNFk7CisJaWYgKHFfY3lj
bGVzID09IDI1KSBxX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gcV9jeWNsZXMgKiBEQVlTX1BFUl80
WTsKKworCXJlbXllYXJzID0gcmVtZGF5cyAvIDM2NTsKKwlpZiAocmVteWVhcnMgPT0gNCkgcmVt
eWVhcnMtLTsKKwlyZW1kYXlzIC09IHJlbXllYXJzICogMzY1OworCisJbGVhcCA9ICFyZW15ZWFy
cyAmJiAocV9jeWNsZXMgfHwgIWNfY3ljbGVzKTsKKwl5ZGF5ID0gcmVtZGF5cyArIDMxICsgMjgg
KyBsZWFwOworCWlmICh5ZGF5ID49IDM2NStsZWFwKSB5ZGF5IC09IDM2NStsZWFwOworCisJeWVh
cnMgPSByZW15ZWFycyArIDQqcV9jeWNsZXMgKyAxMDAqY19jeWNsZXMgKyA0MDAqcWNfY3ljbGVz
OworCisJZm9yIChtb250aHM9MDsgZGF5c19pbl9tb250aFttb250aHNdIDw9IHJlbWRheXM7IG1v
bnRocysrKQorCQlyZW1kYXlzIC09IGRheXNfaW5fbW9udGhbbW9udGhzXTsKKworCWlmICh5ZWFy
cysxMDAgPiBJTlRfTUFYIHx8IHllYXJzKzEwMCA8IElOVF9NSU4pCisJCXJldHVybiAtMTsKKwor
CXRtLT50bV95ZWFyID0geWVhcnMgKyAxMDA7CisJdG0tPnRtX21vbiA9IG1vbnRocyArIDI7CisJ
aWYgKHRtLT50bV9tb24gPj0gMTIpIHsKKwkJdG0tPnRtX21vbiAtPTEyOworCQl0bS0+dG1feWVh
cisrOworCX0KKwl0bS0+dG1fbWRheSA9IHJlbWRheXMgKyAxOworCXRtLT50bV93ZGF5ID0gd2Rh
eTsKKwl0bS0+dG1feWRheSA9IHlkYXk7CisKKwl0bS0+dG1faG91ciA9IHJlbXNlY3MgLyAzNjAw
OworCXRtLT50bV9taW4gPSByZW1zZWNzIC8gNjAgJSA2MDsKKwl0bS0+dG1fc2VjID0gcmVtc2Vj
cyAlIDYwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9tdXNsLWltcG9ydGVkL3NyYy90
aW1lL19fdG1fdG9fc2Vjcy5jIGIvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX3RtX3RvX3NlY3Mu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDQ4ZDY3Ci0tLSAvZGV2L251
bGwKKysrIGIvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX3RtX3RvX3NlY3MuYwpAQCAtMCwwICsx
LDI2IEBACisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIExFQVBPQ0ggKDk0NjY4NDgwMExM
ICsgODY0MDAqKDMxKzI5KSkKKworbG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3Qg
dG0gKnRtKQoreworCWludCBpc19sZWFwOworCWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRtX3llYXI7
CisJaW50IG1vbnRoID0gdG0tPnRtX21vbjsKKwlpZiAobW9udGggPj0gMTIgfHwgbW9udGggPCAw
KSB7CisJCWludCBhZGogPSBtb250aCAvIDEyOworCQltb250aCAlPSAxMjsKKwkJaWYgKG1vbnRo
IDwgMCkgeworCQkJYWRqLS07CisJCQltb250aCArPSAxMjsKKwkJfQorCQl5ZWFyICs9IGFkajsK
Kwl9CisJbG9uZyBsb25nIHQgPSBfX3llYXJfdG9fc2Vjcyh5ZWFyLCAmaXNfbGVhcCk7CisJdCAr
PSBfX21vbnRoX3RvX3NlY3MobW9udGgsIGlzX2xlYXApOworCXQgKz0gODY0MDBMTCAqICh0bS0+
dG1fbWRheS0xKTsKKwl0ICs9IDM2MDBMTCAqIHRtLT50bV9ob3VyOworCXQgKz0gNjBMTCAqIHRt
LT50bV9taW47CisJdCArPSB0bS0+dG1fc2VjOworCXJldHVybiB0OworfQpkaWZmIC0tZ2l0IGEv
bXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX3llYXJfdG9fc2Vjcy5jIGIvbXVzbC1pbXBvcnRlZC9z
cmMvdGltZS9fX3llYXJfdG9fc2Vjcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjI4MjRlYzYKLS0tIC9kZXYvbnVsbAorKysgYi9tdXNsLWltcG9ydGVkL3NyYy90aW1lL19f
eWVhcl90b19zZWNzLmMKQEAgLTAsMCArMSw0NyBAQAorbG9uZyBsb25nIF9feWVhcl90b19zZWNz
KGxvbmcgbG9uZyB5ZWFyLCBpbnQgKmlzX2xlYXApCit7CisJaWYgKHllYXItMlVMTCA8PSAxMzYp
IHsKKwkJaW50IHkgPSB5ZWFyOworCQlpbnQgbGVhcHMgPSAoeS02OCk+PjI7CisJCWlmICghKCh5
LTY4KSYzKSkgeworCQkJbGVhcHMtLTsKKwkJCWlmIChpc19sZWFwKSAqaXNfbGVhcCA9IDE7CisJ
CX0gZWxzZSBpZiAoaXNfbGVhcCkgKmlzX2xlYXAgPSAwOworCQlyZXR1cm4gMzE1MzYwMDAqKHkt
NzApICsgODY0MDAqbGVhcHM7CisJfQorCisJaW50IGN5Y2xlcywgY2VudHVyaWVzLCBsZWFwcywg
cmVtOworCisJaWYgKCFpc19sZWFwKSBpc19sZWFwID0gJihpbnQpezB9OworCWN5Y2xlcyA9ICh5
ZWFyLTEwMCkgLyA0MDA7CisJcmVtID0gKHllYXItMTAwKSAlIDQwMDsKKwlpZiAocmVtIDwgMCkg
eworCQljeWNsZXMtLTsKKwkJcmVtICs9IDQwMDsKKwl9CisJaWYgKCFyZW0pIHsKKwkJKmlzX2xl
YXAgPSAxOworCQljZW50dXJpZXMgPSAwOworCQlsZWFwcyA9IDA7CisJfSBlbHNlIHsKKwkJaWYg
KHJlbSA+PSAyMDApIHsKKwkJCWlmIChyZW0gPj0gMzAwKSBjZW50dXJpZXMgPSAzLCByZW0gLT0g
MzAwOworCQkJZWxzZSBjZW50dXJpZXMgPSAyLCByZW0gLT0gMjAwOworCQl9IGVsc2UgeworCQkJ
aWYgKHJlbSA+PSAxMDApIGNlbnR1cmllcyA9IDEsIHJlbSAtPSAxMDA7CisJCQllbHNlIGNlbnR1
cmllcyA9IDA7CisJCX0KKwkJaWYgKCFyZW0pIHsKKwkJCSppc19sZWFwID0gMDsKKwkJCWxlYXBz
ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWxlYXBzID0gcmVtIC8gNFU7CisJCQlyZW0gJT0gNFU7CisJ
CQkqaXNfbGVhcCA9ICFyZW07CisJCX0KKwl9CisKKwlsZWFwcyArPSA5NypjeWNsZXMgKyAyNCpj
ZW50dXJpZXMgLSAqaXNfbGVhcDsKKworCXJldHVybiAoeWVhci0xMDApICogMzE1MzYwMDBMTCAr
IGxlYXBzICogODY0MDBMTCArIDk0NjY4NDgwMCArIDg2NDAwOworfQpkaWZmIC0tZ2l0IGEvbXVz
bC1pbXBvcnRlZC9zcmMvdGltZS90aW1lZ20uYyBiL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvdGlt
ZWdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA5ZGNjMQotLS0gL2Rl
di9udWxsCisrKyBiL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvdGltZWdtLmMKQEAgLTAsMCArMSwx
NyBAQAorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCitleHRlcm4gY29u
c3QgY2hhciBfX2dtdFtdOworCit0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSAqdG0pCit7CisJc3Ry
dWN0IHRtIG5ldzsKKwlsb25nIGxvbmcgdCA9IF9fdG1fdG9fc2Vjcyh0bSk7CisJaWYgKF9fc2Vj
c190b190bSh0LCAmbmV3KSA8IDApIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJCXJldHVybiAt
MTsKKwl9CisJKnRtID0gbmV3OworCXRtLT50bV9pc2RzdCA9IDA7CisJcmV0dXJuIHQ7Cit9Ci0t
IAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 03:26:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 03:26:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5iPd-0007AB-PW; Thu, 05 Sep 2019 03:26:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Gd27=XA=gmail.com=jiakernel2@srs-us1.protection.inumbo.net>)
 id 1i5iPc-0007A6-Mc
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 03:26:20 +0000
X-Inumbo-ID: ecec96ca-cf8c-11e9-978d-bc764e2007e4
Received: from mail-pg1-x542.google.com (unknown [2607:f8b0:4864:20::542])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ecec96ca-cf8c-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 03:26:19 +0000 (UTC)
Received: by mail-pg1-x542.google.com with SMTP id n9so592534pgc.1
 for <minios-devel@lists.xen.org>; Wed, 04 Sep 2019 20:26:19 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-transfer-encoding;
 bh=0Auo7d9dsGKsuUb/e+eD+mXOdwlcn+NqaLjF2gz1HjY=;
 b=Xpf/VvWsrdFyHtgistRgQbtTSJlIWXwiMKBHVwKQTd5mxp/N1xqFBamvhr+L4AIy8L
 8WJVvhO3fRXDq4KownJihDrsVLvNbs9PIFyE/XErXsS5c8kLIRP7C+fatzAI4qufWPQX
 e2AtYora9aBqbE/54w/xFzA5CitNyUA8gfFekZaVQmTpOM8iU2Dzl/kr5V7mPR3VRWfv
 0xxBGYZ7R3PD7yCc+Fk6KGHbCQzy9IDoo0R+AzUT7A/J0ro282P6pZ42yGQ3XLekSvUM
 lDAjrLIBERjWqZV3phgZjYpk2K+EE8crZzcmkYML02Ihg9nn/4GvDudFzC/6a+cG3FD9
 7qOg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-transfer-encoding;
 bh=0Auo7d9dsGKsuUb/e+eD+mXOdwlcn+NqaLjF2gz1HjY=;
 b=eZC5d2XMlotaLJ9x+HgLQAts8l2B8U8EDprq21S9bV4MdOq83VldWUwuiSemsbVHVV
 xLCUPraCrLomjMtcAMxRAboAfLlkj4k+ev1HhUTwfVlJcaEdznmK1jjmCi3/PwAmXBMw
 Kah5QskPqqMTkwxjieUfaoa4YYA7nxKlSF+uW5ncJuvfKlL4bc2t+SQtCqlpJ4WfWhiX
 uVEpUuDLKRvfBO4A75ySXBKjuTR8liO1QLU6F0eqT7AIKa/7s/y2G1URIrzhv85ekITk
 imkQWkiujF96HmYfEcudZ8htmF0DgFSU2+GnrVamlsCFncUhlyspcPvvJg+LNdpv0OIv
 1k9w==
X-Gm-Message-State: APjAAAXHCzb3WbGX00YfBsVMP5lYXitAjAr+1qaIJByM1bB882SdG+kV
 fziyXSCxCFSyy1pN4dcgAdOtxoSg
X-Google-Smtp-Source: APXvYqwCC8SAzhj2NxC93Twwph9DCbMKK9ZmZXP3Q9+5+68G5ipoGsx9o1cKdQNRhRLF8BbsATbR2Q==
X-Received: by 2002:a17:90a:9a1:: with SMTP id 30mr1522961pjo.71.1567653978438; 
 Wed, 04 Sep 2019 20:26:18 -0700 (PDT)
Received: from [0.0.0.0] (104.129.187.94.16clouds.com. [104.129.187.94])
 by smtp.gmail.com with ESMTPSA id a13sm584107pfg.10.2019.09.04.20.26.14
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Wed, 04 Sep 2019 20:26:17 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-4-felipe.huici@neclab.eu>
From: Jia He <jiakernel2@gmail.com>
Message-ID: <29749456-0137-6107-27bf-d9ffddf586b4@gmail.com>
Date: Thu, 5 Sep 2019 11:26:10 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190828152923.23734-4-felipe.huici@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLCBwbGVhc2Ugc2VlIGlubGluZSBiZWxvdwoKT24gMjAxOS84LzI4IDIzOjI5LCBG
ZWxpcGUgSHVpY2kgd3JvdGU6Cj4gRm9yIG5vdyB3ZSBleHBvcnQgYWxsIGx1YV8qIHN5bWJvbHMs
IGluY2x1ZGUgbHVhX21haW4gZm9yIHRoZSBtYWluCj4gbG9vcAo+Cj4gU2lnbmVkLW9mZi1ieTog
RmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pgo+IFNpZ25lZC1vZmYtYnk6IFNp
bW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgZXhwb3J0c3lt
cy51ayB8IDkzICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrCj4gICAxIGZpbGUgY2hhbmdlZCwgOTMgaW5zZXJ0aW9ucygrKQo+ICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKPgo+IGRpZmYgLS1naXQgYS9leHBvcnRzeW1z
LnVrIGIvZXhwb3J0c3ltcy51awo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw
MC4uNDlkNzEyZQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9leHBvcnRzeW1zLnVrCj4gQEAgLTAs
MCArMSw5MyBAQAo+ICtsdWFfYWJzaW5kZXgKPiArbHVhX2FyaXRoCj4gK2x1YV9hdHBhbmljCj4g
K2x1YV9jYWxsawo+ICtsdWFfY2hlY2tzdGFjawo+ICtsdWFfY2xvc2UKPiArbHVhX2NvbXBhcmUK
PiArbHVhX2NvbmNhdAo+ICtsdWFfY29weQo+ICtsdWFfY3JlYXRldGFibGUKPiArbHVhX2R1bXAK
PiArbHVhX2Vycm9yCj4gK2x1YV9nYwo+ICtsdWFfZ2V0YWxsb2NmCj4gK2x1YV9nZXRmaWVsZAo+
ICtsdWFfZ2V0Z2xvYmFsCj4gK2x1YV9nZXRob29rCj4gK2x1YV9nZXRob29rY291bnQKPiArbHVh
X2dldGhvb2ttYXNrCj4gK2x1YV9nZXRpCj4gK2x1YV9nZXRpbmZvCj4gK2x1YV9nZXRsb2NhbAo+
ICtsdWFfZ2V0bWV0YXRhYmxlCj4gK2x1YV9nZXRzdGFjawo+ICtsdWFfZ2V0dGFibGUKPiArbHVh
X2dldHRvcAo+ICtsdWFfZ2V0dXB2YWx1ZQo+ICtsdWFfZ2V0dXNlcnZhbHVlCj4gK2x1YV9pZGVu
dAo+ICtsdWFfaXNjZnVuY3Rpb24KPiArbHVhX2lzaW50ZWdlcgo+ICtsdWFfaXNudW1iZXIKPiAr
bHVhX2lzc3RyaW5nCj4gK2x1YV9pc3VzZXJkYXRhCj4gK2x1YV9pc3lpZWxkYWJsZQo+ICtsdWFf
bGVuCj4gK2x1YV9sb2FkCj4gK2x1YV9tYWluCj4gK2x1YV9uZXdzdGF0ZQo+ICtsdWFfbmV3dGhy
ZWFkCj4gK2x1YV9uZXd1c2VyZGF0YQo+ICtsdWFfbmV4dAo+ICtsdWFfcGNhbGxrCj4gK2x1YV9w
dXNoYm9vbGVhbgo+ICtsdWFfcHVzaGNjbG9zdXJlCj4gK2x1YV9wdXNoZnN0cmluZwo+ICtsdWFf
cHVzaGludGVnZXIKPiArbHVhX3B1c2hsaWdodHVzZXJkYXRhCj4gK2x1YV9wdXNobHN0cmluZwo+
ICtsdWFfcHVzaG5pbAo+ICtsdWFfcHVzaG51bWJlcgo+ICtsdWFfcHVzaHN0cmluZwo+ICtsdWFf
cHVzaHRocmVhZAo+ICtsdWFfcHVzaHZhbHVlCj4gK2x1YV9wdXNodmZzdHJpbmcKPiArbHVhX3Jh
d2VxdWFsCj4gK2x1YV9yYXdnZXQKPiArbHVhX3Jhd2dldGkKPiArbHVhX3Jhd2dldHAKPiArbHVh
X3Jhd2xlbgo+ICtsdWFfcmF3c2V0Cj4gK2x1YV9yYXdzZXRpCj4gK2x1YV9yYXdzZXRwCj4gK2x1
YV9yZXN1bWUKPiArbHVhX3JvdGF0ZQo+ICtsdWFfc2V0YWxsb2NmCj4gK2x1YV9zZXRmaWVsZAo+
ICtsdWFfc2V0Z2xvYmFsCj4gK2x1YV9zZXRob29rCj4gK2x1YV9zZXRpCj4gK2x1YV9zZXRsb2Nh
bAo+ICtsdWFfc2V0bWV0YXRhYmxlCj4gK2x1YV9zZXR0YWJsZQo+ICtsdWFfc2V0dG9wCj4gK2x1
YV9zZXR1cHZhbHVlCj4gK2x1YV9zZXR1c2VydmFsdWUKPiArbHVhX3N0YXR1cwo+ICtsdWFfc3Ry
aW5ndG9udW1iZXIKPiArbHVhX3RvYm9vbGVhbgo+ICtsdWFfdG9jZnVuY3Rpb24KPiArbHVhX3Rv
aW50ZWdlcngKPiArbHVhX3RvbHN0cmluZwo+ICtsdWFfdG9udW1iZXJ4Cj4gK2x1YV90b3BvaW50
ZXIKPiArbHVhX3RvdGhyZWFkCj4gK2x1YV90b3VzZXJkYXRhCj4gK2x1YV90eXBlCj4gK2x1YV90
eXBlbmFtZQo+ICtsdWFfdXB2YWx1ZWlkCj4gK2x1YV91cHZhbHVlam9pbgo+ICtsdWFfdmVyc2lv
bgo+ICtsdWFfeG1vdmUKPiArbHVhX3lpZWxkawoKSSByYW4gYSBzaW1wbGUgdGVzdCBmaWxlIGZv
ciBsdWEKI2luY2x1ZGUgPHN0cmluZy5oPgoKI2luY2x1ZGUgImx1YS5oIgojaW5jbHVkZSA8bGF1
eGxpYi5oPgojaW5jbHVkZSA8bHVhbGliLmg+CgppbnQgbWFpbigpCnsKICAgICBjaGFyIGJ1ZmZb
MjU2XSA9IHswfTsKICAgICBpbnQgZXJyb3I7CiAgICAgbHVhX1N0YXRlICpMID0gbHVhTF9uZXdz
dGF0ZSgpOwogICAgIGx1YUxfb3BlbmxpYnMoTCk7CiAgICAgd2hpbGUgKGZnZXRzKGJ1ZmYsIHNp
emVvZihidWZmKSwgc3RkaW4pICE9IE5VTEwpCiAgICAgewogICAgICAgICBlcnJvciA9IGx1YUxf
bG9hZGJ1ZmZlcihMLCBidWZmLCBzdHJsZW4oYnVmZiksICJsaW5lIikKICAgICAgICAgICAgIHx8
IGx1YV9wY2FsbChMLCAwLCAwLCAwKTsKICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICB7CiAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIiwgbHVhX3Rvc3RyaW5nKEwsIC0xKSk7CiAg
ICAgICAgICAgICBsdWFfcG9wKEwsIDEpOwogICAgICAgICB9CiAgICAgfQoKICAgICBsdWFfY2xv
c2UoTCk7CiAgICAgcmV0dXJuIDA7Cn0KICAgICAKU2VlbXMgeW91IGhhdmUgdG8gZXhwb3J0IG1v
cmUobm90IHRoZSBmdWxsIGxpc3QpIHN5bWJvbHMKbHVhTF9uZXdzdGF0ZQpsdWFMX29wZW5saWJz
Cmx1YUxfbG9hZGJ1ZmZlcngKCk90aGVyd2lzZSwgaXQgcmVwb3J0cyBlcnJvciB3aGVuIGxpbmtp
bmcgbGlibHVhLgoKLS0tCkNoZWVycywKSnVzdGluIChKaWEgSGUpCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 06:49:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 06:49:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5lZi-0006AS-QQ; Thu, 05 Sep 2019 06:48:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mmEX=XA=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i5lZh-0006AN-8S
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 06:48:57 +0000
X-Inumbo-ID: 39fcda4e-cfa9-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 39fcda4e-cfa9-11e9-a337-bc764e2007e4;
 Thu, 05 Sep 2019 06:48:54 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id BE10AF2004;
 Thu,  5 Sep 2019 08:48:53 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id XO2ob2vL9w5d; Thu,  5 Sep 2019 08:48:53 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 9455EF2002;
 Thu,  5 Sep 2019 08:48:49 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 5 Sep 2019
 08:48:49 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Thu, 5 Sep 2019 08:48:49
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Jia He <jiakernel2@gmail.com>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 3/3] Export symbols
Thread-Index: AQHVXbVkAswssCDSAkuGuDft8tAqAaccVmAAgABaJQA=
Date: Thu, 5 Sep 2019 06:48:49 +0000
Message-ID: <D8E3DF14-D5F8-4D6D-8F91-827D02351E5C@neclab.eu>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-4-felipe.huici@neclab.eu>
 <29749456-0137-6107-27bf-d9ffddf586b4@gmail.com>
In-Reply-To: <29749456-0137-6107-27bf-d9ffddf586b4@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <FF3130B179F60C44B2A8A581C6F00807@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLA0KDQpPaywgSSdsbCBzZW5kIGEgdjIgdGhhdCBhZGRzIHRob3NlIGFuZCBvdGhl
ciBzeW1ib2xzIGFuZCByZXF1aXJlcyBuZXdsaWIgaW4gQ29uZmlnLnVrLg0KDQpUaGFua3MsDQoN
Ci0tIEZlbGlwZQ0KDQrvu79PbiAwNS4wOS4xOSwgMDU6MjYsICJKaWEgSGUiIDxqaWFrZXJuZWwy
QGdtYWlsLmNvbT4gd3JvdGU6DQoNCiAgICBIaSBGZWxpcGUsIHBsZWFzZSBzZWUgaW5saW5lIGJl
bG93DQogICAgDQogICAgT24gMjAxOS84LzI4IDIzOjI5LCBGZWxpcGUgSHVpY2kgd3JvdGU6DQog
ICAgPiBGb3Igbm93IHdlIGV4cG9ydCBhbGwgbHVhXyogc3ltYm9scywgaW5jbHVkZSBsdWFfbWFp
biBmb3IgdGhlIG1haW4NCiAgICA+IGxvb3ANCiAgICA+DQogICAgPiBTaWduZWQtb2ZmLWJ5OiBG
ZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQogICAgPiBTaWduZWQtb2ZmLWJ5
OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4NCiAgICA+IC0tLQ0KICAg
ID4gICBleHBvcnRzeW1zLnVrIHwgOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysNCiAgICA+ICAgMSBmaWxlIGNoYW5nZWQsIDkzIGlu
c2VydGlvbnMoKykNCiAgICA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsNCiAg
ICA+DQogICAgPiBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsNCiAg
ICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwLi40OWQ3MTJlDQog
ICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiArKysgYi9leHBvcnRzeW1zLnVrDQogICAgPiBAQCAt
MCwwICsxLDkzIEBADQogICAgPiArbHVhX2Fic2luZGV4DQogICAgPiArbHVhX2FyaXRoDQogICAg
PiArbHVhX2F0cGFuaWMNCiAgICA+ICtsdWFfY2FsbGsNCiAgICA+ICtsdWFfY2hlY2tzdGFjaw0K
ICAgID4gK2x1YV9jbG9zZQ0KICAgID4gK2x1YV9jb21wYXJlDQogICAgPiArbHVhX2NvbmNhdA0K
ICAgID4gK2x1YV9jb3B5DQogICAgPiArbHVhX2NyZWF0ZXRhYmxlDQogICAgPiArbHVhX2R1bXAN
CiAgICA+ICtsdWFfZXJyb3INCiAgICA+ICtsdWFfZ2MNCiAgICA+ICtsdWFfZ2V0YWxsb2NmDQog
ICAgPiArbHVhX2dldGZpZWxkDQogICAgPiArbHVhX2dldGdsb2JhbA0KICAgID4gK2x1YV9nZXRo
b29rDQogICAgPiArbHVhX2dldGhvb2tjb3VudA0KICAgID4gK2x1YV9nZXRob29rbWFzaw0KICAg
ID4gK2x1YV9nZXRpDQogICAgPiArbHVhX2dldGluZm8NCiAgICA+ICtsdWFfZ2V0bG9jYWwNCiAg
ICA+ICtsdWFfZ2V0bWV0YXRhYmxlDQogICAgPiArbHVhX2dldHN0YWNrDQogICAgPiArbHVhX2dl
dHRhYmxlDQogICAgPiArbHVhX2dldHRvcA0KICAgID4gK2x1YV9nZXR1cHZhbHVlDQogICAgPiAr
bHVhX2dldHVzZXJ2YWx1ZQ0KICAgID4gK2x1YV9pZGVudA0KICAgID4gK2x1YV9pc2NmdW5jdGlv
bg0KICAgID4gK2x1YV9pc2ludGVnZXINCiAgICA+ICtsdWFfaXNudW1iZXINCiAgICA+ICtsdWFf
aXNzdHJpbmcNCiAgICA+ICtsdWFfaXN1c2VyZGF0YQ0KICAgID4gK2x1YV9pc3lpZWxkYWJsZQ0K
ICAgID4gK2x1YV9sZW4NCiAgICA+ICtsdWFfbG9hZA0KICAgID4gK2x1YV9tYWluDQogICAgPiAr
bHVhX25ld3N0YXRlDQogICAgPiArbHVhX25ld3RocmVhZA0KICAgID4gK2x1YV9uZXd1c2VyZGF0
YQ0KICAgID4gK2x1YV9uZXh0DQogICAgPiArbHVhX3BjYWxsaw0KICAgID4gK2x1YV9wdXNoYm9v
bGVhbg0KICAgID4gK2x1YV9wdXNoY2Nsb3N1cmUNCiAgICA+ICtsdWFfcHVzaGZzdHJpbmcNCiAg
ICA+ICtsdWFfcHVzaGludGVnZXINCiAgICA+ICtsdWFfcHVzaGxpZ2h0dXNlcmRhdGENCiAgICA+
ICtsdWFfcHVzaGxzdHJpbmcNCiAgICA+ICtsdWFfcHVzaG5pbA0KICAgID4gK2x1YV9wdXNobnVt
YmVyDQogICAgPiArbHVhX3B1c2hzdHJpbmcNCiAgICA+ICtsdWFfcHVzaHRocmVhZA0KICAgID4g
K2x1YV9wdXNodmFsdWUNCiAgICA+ICtsdWFfcHVzaHZmc3RyaW5nDQogICAgPiArbHVhX3Jhd2Vx
dWFsDQogICAgPiArbHVhX3Jhd2dldA0KICAgID4gK2x1YV9yYXdnZXRpDQogICAgPiArbHVhX3Jh
d2dldHANCiAgICA+ICtsdWFfcmF3bGVuDQogICAgPiArbHVhX3Jhd3NldA0KICAgID4gK2x1YV9y
YXdzZXRpDQogICAgPiArbHVhX3Jhd3NldHANCiAgICA+ICtsdWFfcmVzdW1lDQogICAgPiArbHVh
X3JvdGF0ZQ0KICAgID4gK2x1YV9zZXRhbGxvY2YNCiAgICA+ICtsdWFfc2V0ZmllbGQNCiAgICA+
ICtsdWFfc2V0Z2xvYmFsDQogICAgPiArbHVhX3NldGhvb2sNCiAgICA+ICtsdWFfc2V0aQ0KICAg
ID4gK2x1YV9zZXRsb2NhbA0KICAgID4gK2x1YV9zZXRtZXRhdGFibGUNCiAgICA+ICtsdWFfc2V0
dGFibGUNCiAgICA+ICtsdWFfc2V0dG9wDQogICAgPiArbHVhX3NldHVwdmFsdWUNCiAgICA+ICts
dWFfc2V0dXNlcnZhbHVlDQogICAgPiArbHVhX3N0YXR1cw0KICAgID4gK2x1YV9zdHJpbmd0b251
bWJlcg0KICAgID4gK2x1YV90b2Jvb2xlYW4NCiAgICA+ICtsdWFfdG9jZnVuY3Rpb24NCiAgICA+
ICtsdWFfdG9pbnRlZ2VyeA0KICAgID4gK2x1YV90b2xzdHJpbmcNCiAgICA+ICtsdWFfdG9udW1i
ZXJ4DQogICAgPiArbHVhX3RvcG9pbnRlcg0KICAgID4gK2x1YV90b3RocmVhZA0KICAgID4gK2x1
YV90b3VzZXJkYXRhDQogICAgPiArbHVhX3R5cGUNCiAgICA+ICtsdWFfdHlwZW5hbWUNCiAgICA+
ICtsdWFfdXB2YWx1ZWlkDQogICAgPiArbHVhX3VwdmFsdWVqb2luDQogICAgPiArbHVhX3ZlcnNp
b24NCiAgICA+ICtsdWFfeG1vdmUNCiAgICA+ICtsdWFfeWllbGRrDQogICAgDQogICAgSSByYW4g
YSBzaW1wbGUgdGVzdCBmaWxlIGZvciBsdWENCiAgICAjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAg
DQogICAgI2luY2x1ZGUgImx1YS5oIg0KICAgICNpbmNsdWRlIDxsYXV4bGliLmg+DQogICAgI2lu
Y2x1ZGUgPGx1YWxpYi5oPg0KICAgIA0KICAgIGludCBtYWluKCkNCiAgICB7DQogICAgICAgICBj
aGFyIGJ1ZmZbMjU2XSA9IHswfTsNCiAgICAgICAgIGludCBlcnJvcjsNCiAgICAgICAgIGx1YV9T
dGF0ZSAqTCA9IGx1YUxfbmV3c3RhdGUoKTsNCiAgICAgICAgIGx1YUxfb3BlbmxpYnMoTCk7DQog
ICAgICAgICB3aGlsZSAoZmdldHMoYnVmZiwgc2l6ZW9mKGJ1ZmYpLCBzdGRpbikgIT0gTlVMTCkN
CiAgICAgICAgIHsNCiAgICAgICAgICAgICBlcnJvciA9IGx1YUxfbG9hZGJ1ZmZlcihMLCBidWZm
LCBzdHJsZW4oYnVmZiksICJsaW5lIikNCiAgICAgICAgICAgICAgICAgfHwgbHVhX3BjYWxsKEws
IDAsIDAsIDApOw0KICAgICAgICAgICAgIGlmIChlcnJvcikNCiAgICAgICAgICAgICB7DQogICAg
ICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBsdWFfdG9zdHJpbmcoTCwgLTEpKTsN
CiAgICAgICAgICAgICAgICAgbHVhX3BvcChMLCAxKTsNCiAgICAgICAgICAgICB9DQogICAgICAg
ICB9DQogICAgDQogICAgICAgICBsdWFfY2xvc2UoTCk7DQogICAgICAgICByZXR1cm4gMDsNCiAg
ICB9DQogICAgICAgICANCiAgICBTZWVtcyB5b3UgaGF2ZSB0byBleHBvcnQgbW9yZShub3QgdGhl
IGZ1bGwgbGlzdCkgc3ltYm9scw0KICAgIGx1YUxfbmV3c3RhdGUNCiAgICBsdWFMX29wZW5saWJz
DQogICAgbHVhTF9sb2FkYnVmZmVyeA0KICAgIA0KICAgIE90aGVyd2lzZSwgaXQgcmVwb3J0cyBl
cnJvciB3aGVuIGxpbmtpbmcgbGlibHVhLg0KICAgIA0KICAgIC0tLQ0KICAgIENoZWVycywNCiAg
ICBKdXN0aW4gKEppYSBIZSkNCiAgICANCiAgICANCg0KX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 08:56:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 08:56:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5nYd-0002db-Ns; Thu, 05 Sep 2019 08:55:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fS0Z=XA=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i5nYc-0002ca-OD
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 08:55:58 +0000
X-Inumbo-ID: f8d72616-cfba-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f8d72616-cfba-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 08:55:56 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 621F2F2004;
 Thu,  5 Sep 2019 10:55:55 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id MW6s981O-B-v; Thu,  5 Sep 2019 10:55:55 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 33A03F2002;
 Thu,  5 Sep 2019 10:55:49 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 5 Sep 2019
 10:55:48 +0200
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190827075640.21814-1-costin.lupu@cs.pub.ro>
 <95afbf5b-103c-99c0-c6e2-de04ef131e0b@neclab.eu>
 <ddf3cf2c-c0e7-f9f6-8b75-2fd109ed7bd7@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <fac0083a-1989-1ec4-a1d7-32f04467c437@neclab.eu>
Date: Thu, 5 Sep 2019 10:55:48 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <ddf3cf2c-c0e7-f9f6-8b75-2fd109ed7bd7@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] plat: Configure stack size page
 order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMDQuMDkuMTkgMDk6MTUsIENvc3RpbiBMdXB1IHdyb3RlOgo+IEhpIFNpbW9uLAo+IAo+IFBs
ZWFzZSBzZWUgaW5saW5lLgo+IAo+IE9uIDgvMzAvMTkgNDo1MSBQTSwgU2ltb24gS3VlbnplciB3
cm90ZToKPj4gSGV5IENvc3RpbiwKPj4KPj4gVGhhbmtzIGEgbG90IGZvciB0aGlzIHBhdGNoLiBJ
IGFtIGN1cnJlbnRseSBoYXZpbmcgYSBsb29rIGJ1dCBuZWVkIHNvbWUKPj4gY2xhcmlmaWNhdGlv
bnMuCj4+Cj4+IDEpIFdoeSBkaWQgeW91IGV4cG9zZSB0aGUgb3B0aW9uIGludCB0aGUgcGxhdGZv
cm0gc3VibWVudT8gSXQgaXMKPj4gb2J2aW91c2x5IGNoYW5naW5nIHNvbWV0aGluZyBpbiBhcmNo
aXRlY3R1cmUgaGVhZGVycz8KPiAKPiBXZWxsLCBhY3R1YWxseSBpdCBpcyBuZWl0aGVyLiBJIHRo
aW5rIGl0J3MgYWN0dWFsbHkgYSBzY2hlZHVsaW5nCj4gYWJzdHJhY3Rpb24sIGJ1dCBvbmUgdGhh
dCBpcyBjdXJyZW50bHkgdXNlZCBmb3Igb3RoZXIgc3RhY2tzIGFzIHdlbGwKPiAoaW50ZXJydXB0
cywgdHJhcHMpLiBTbyBpdCdzIHRydWUgdGhhdCBpdCdzIHdlaXJkIHRvIHB1dCBpdCBoZXJlLCBi
dXQKPiBpdCdzIG5vdCBhbiBhcmNoIHNwZWNpZmljIGNvbmZpZyBlaXRoZXIuIFRoaXMgc3RhY2sg
c2l6ZSB2YWx1ZSBzaG91bGQgYmUKPiB0aGUgc2FtZSByZWdhcmRsZXNzIGFueSBhcmNoIG9yIHBs
YXRmb3JtLgo+IAoKSSBjb21wbGV0ZWx5IGFncmVlIHdpdGggdGhpcyBhbmQgSSB0aGluayB3ZSBh
cmUgZ29pbmcgdG8gaW50cm9kdWNlIApzdXBwb3J0aW5nIGRpZmZlcmVudCBzdGFjayBzaXplcyBs
YXRlci4gVGhlIHdob2xlIGRpc2N1c3Npb24gaXMgcmVsYXRlZCAKd2hhdCB3ZSBoYWQgd2l0aCBw
YXRjaCBJRCA3MzU3NTIgKHNlZSBwYXRjaHdvcmsudW5pa3JhZnQub3JnKS4gQWx0aG91Z2ggCnRo
aXMgcGF0Y2ggaXMgYWxzbyBhbiBpbnRlcm1lZGlhdGUgZml4LCBJIHRlbmQgdG8gcHV0IHRoaXMg
b3B0aW9uIApkaXJlY3RseSB1bmRlciAnQXJjaGl0ZWN0dXJlIFNlbGVjdGlvbicgYmVjYXVzZSBp
dCBzaG91bGQgYmUgaW5kZXBlbmRlbnQgCnRvIGFueSBwbGF0Zm9ybS4gVGhlIG90aGVyIHJlYXNv
biBpcyB0aGF0IHdlIGhhdmUgdGhlIHN0YWNrIHNpemUgCmN1cnJlbnRseSBkZWZpbmVkIHdpdGhp
biB0aGUgYXJjaCBoZWFkZXJzLgoKPj4KPj4gMikgRGlkIHlvdSBjaGVjayB0aGUgaW50ZXJydXB0
IHN0YWNrIGZvciBYZW4gb24geDg2PyBJdCBzZWVtcyB0aGF0IHRoaXMKPj4gb25lIGlzIGp1c3Qg
c2l6ZWQgdG8gUEFHRV9TSVpFLiBJIHRoaW5rIHRoaXMgY2FuIGdldCBjcml0aWNhbCBmb3IgdGhy
ZWFkCj4+IGN1cnJlbnQgcmV0cmlldmFsLCByaWdodD8gU2VlOiBwbGF0L3hlbi94ODYvYXJjaF9l
dmVudHMuYyBhbmQKPj4gcGxhdC94ZW4veDg2L3RyYXBzLmMgLgo+IAo+IFdlbGwgYWN0dWFsbHkg
SSBzZWUgdGhhdCB0aGUgaW50ZXJydXB0IHN0YWNrIGluCj4gcGxhdC94ZW4veDg2L2FyY2hfZXZl
bnRzLmMgaGFzIHRoZSByaWdodCBzaXplLCBTVEFDS19TSVpFLgo+IAo+IEluIGRlZWQsIHRoZSB0
cmFwIHN0YWNrIGluIHBsYXQveGVuL3g4Ni90cmFwcy5jIGlzIFBBR0VfU0laRSBhbmQgaXQKPiBz
aG91bGQgYmUgZml4ZWQuCj4gCj4+IERvIHlvdSBieSBjaGFuY2UgcmVtZW1iZXIgd2h5IHdlIGhh
dmUgdGhlIGJvb3Qgc3RhY2sgdHdpY2UgYXMgYmlnPwo+PiBTZWU6IHhlbi94ODYvc2V0dXAuYwo+
IAo+IEkgZG9uJ3QgcmVtZW1iZXIsIGJ1dCBpdCB3YXMgdGhlIHNhbWUgd2l0aCB0aGUgaW50ZXJy
dXB0IHN0YWNrIGluCj4gcGxhdC94ZW4veDg2L2FyY2hfZXZlbnRzLmMgYmVjYXVzZSB0aGUgYWxp
Z25tZW50IHdhcyBkb25lIGF0IHJ1bnRpbWUuIEl0Cj4gbWlnaHQgYmUgdGhlIHNhbWUgcmVhc29u
Lgo+IAoKSSB1bmRlcnN0YW5kLiBQcm9iYWJseSBhbHNvIHNvbWV0aGluZyB0byByZS12aXNpdCBs
YXRlciBidXQgbm90IHdpdGggCnRoaXMgcGF0Y2guLi4KCj4+Cj4+IDMpIE1vcmUgYXMgYSBub3Rl
OiBYZW4gb24gQXJtMzIgc2VlbXMgbm90IHRvIGZvbGxvdyBhbnkgU1RBQ0tfU0laRQo+PiBkZWZp
bml0aW9uIGF0IGFsbC4gV2Ugc2hvdWxkIHByb2JhYmx5IHB1dCBhIG5vdGUgb24gdGhpcyBzb21l
d2hlcmUuIEkgYW0KPj4gbm90IHN1cmUgaWYgaXQgaXMgd29ydGggZml4aW5nIGl0IC0gd2hvIGtu
b3dzIHdoYXQgd2UgYXJlIGdvaW5nIHRvIGRvCj4+IHdpdGggdGhpcyBhcmNoaXRlY3R1cmUtcGxh
dGZvcm0tY29tYmluYXRpb24uIEkgcmF0aGVyIGV4cGVjdCB0aGF0IHdlIGFyZQo+PiBnb2luZyB0
b3dhcmRzIEFybTY0IGZvciBYZW4gaW4gdGhlIGZ1dHVyZS4KPiAKPiBJJ20gbm90IHN1cmUgSSBm
b2xsb3cuIFRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBhbmQgc2V0cyB0aGUgc2FtZSBzdGFjawo+IHNp
emUgZm9yIEFSTS4KPiAKCkFybTMyIHVzZXMgc29tZSBpbnRlcm5hbCBoYXJkLWNvZGVkIHZhbHVl
cyBhbmQgZG9lcyBub3QgdXNlIHRoZSAKU1RBQ0tfU0laRSBkZWZpbml0aW9uLiBJIHRoaW5rIHdl
IHNob3VsZCBhZG9wdCB0aGlzIHdpdGggdGhpcyBwYXRjaCwgdG9vLgoKSW4gZ2VuZXJhbCwgSSBh
bSBmaW5lIHdpdGggaW50cm9kdWNpbmcgdGhpcyBzdGFjayBzaXplIGNvbmZpZ3VyYXRpb24gYXMg
Cm9wdGlvbi4KClRoYW5rcywKClNpbW9uCgo+Pgo+PiBUaGFua3MsCj4+Cj4+IFNpbW9uCj4+Cj4+
IE9uIDI3LjA4LjE5IDA5OjU2LCBDb3N0aW4gTHVwdSB3cm90ZToKPj4+IFRoaXMgcGF0Y2ggYWRk
cyBhIGNvbmZpZyBvcHRpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBzdGFjayBzaXplIHBhZ2UKPj4+
IG9yZGVyLiBXZQo+Pj4gbmVlZCB0aGlzIGZvciBzdXBwb3J0aW5nIGxhcmdlIHN0YWNrcy4KPj4+
Cj4+PiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgo+
Pj4gLS0tCj4+PiAgwqAgYXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5owqDCoMKg
IHwgMiArLQo+Pj4gIMKgIGFyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5owqAg
fCAyICstCj4+PiAgwqAgYXJjaC94ODYveDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oIHwg
MiArLQo+Pj4gIMKgIHBsYXQvQ29uZmlnLnVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqAgfCA5ICsrKysrKysrKwo+Pj4gIMKgIDQgZmlsZXMgY2hhbmdl
ZCwgMTIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4+Cj4+PiBkaWZmIC0tZ2l0IGEv
YXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiBiL2FyY2gvYXJtL2FybS9p
bmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4gaW5kZXggMDg1NzYxYzMuLmUyMjk4ZDZiIDEwMDY0
NAo+Pj4gLS0tIGEvYXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiArKysg
Yi9hcmNoL2FybS9hcm0vaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4+IEBAIC0zOSw3ICszOSw3
IEBACj4+PiAgwqAgI2RlZmluZSBfX1BBR0VfTUFTS8KgwqDCoMKgwqDCoMKgICh+KChfX1BBR0Vf
U0laRSkgLSAxKSkKPj4+ICDCoCAjZW5kaWYKPj4+ICDCoCAtI2RlZmluZSBfX1NUQUNLX1NJWkVf
UEFHRV9PUkRFUsKgwqDCoCAyCj4+PiArI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKg
wqDCoCBDT05GSUdfU1RBQ0tfU0laRV9QQUdFX09SREVSCj4+PiAgwqAgI2RlZmluZSBfX1NUQUNL
X1NJWkXCoMKgwqDCoMKgwqDCoCAoX19QQUdFX1NJWkUgKiAoMSA8PAo+Pj4gX19TVEFDS19TSVpF
X1BBR0VfT1JERVIpKQo+Pj4gIMKgIMKgICNkZWZpbmUgX19XT1JEU0laRcKgwqDCoMKgwqDCoMKg
IDMyCj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRz
LmgKPj4+IGIvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4+IGluZGV4
IGNlYzA1NjQxLi5mYjcwZjJiYSAxMDA2NDQKPj4+IC0tLSBhL2FyY2gvYXJtL2FybTY0L2luY2x1
ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiArKysgYi9hcmNoL2FybS9hcm02NC9pbmNsdWRlL3VrL2Fz
bS9saW1pdHMuaAo+Pj4gQEAgLTQwLDcgKzQwLDcgQEAKPj4+ICDCoCAjZGVmaW5lIF9fUEFHRV9N
QVNLwqDCoMKgwqDCoMKgwqAgKH4oKF9fUEFHRV9TSVpFKSAtIDEpKQo+Pj4gIMKgICNlbmRpZgo+
Pj4gIMKgIC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIDQKPj4+ICsjZGVm
aW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIENPTkZJR19TVEFDS19TSVpFX1BBR0Vf
T1JERVIKPj4+ICDCoCAjZGVmaW5lIF9fU1RBQ0tfU0laRcKgwqDCoCAoX19QQUdFX1NJWkUgKiAo
MSA8PCBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUikpCj4+PiAgwqAgI2RlZmluZSBfX1NUQUNLX0FM
SUdOX1NJWkXCoMKgwqAgMTYKPj4+ICDCoCBkaWZmIC0tZ2l0IGEvYXJjaC94ODYveDg2XzY0L2lu
Y2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiBiL2FyY2gveDg2L3g4Nl82NC9pbmNsdWRlL3VrL2Fz
bS9saW1pdHMuaAo+Pj4gaW5kZXggYTk2OWJkMTcuLjIxODE0MDQ0IDEwMDY0NAo+Pj4gLS0tIGEv
YXJjaC94ODYveDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiArKysgYi9hcmNoL3g4
Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4+IEBAIC0zOSw3ICszOSw3IEBACj4+
PiAgwqAgI2RlZmluZSBfX1BBR0VfTUFTS8KgwqDCoMKgwqDCoMKgICh+KChfX1BBR0VfU0laRSkg
LSAxKSkKPj4+ICDCoCAjZW5kaWYKPj4+ICDCoCAtI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9P
UkRFUsKgwqDCoCA0Cj4+PiArI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDCoCBD
T05GSUdfU1RBQ0tfU0laRV9QQUdFX09SREVSCj4+PiAgwqAgI2RlZmluZSBfX1NUQUNLX1NJWkXC
oMKgwqDCoMKgwqDCoCAoX19QQUdFX1NJWkUgKiAoMSA8PAo+Pj4gX19TVEFDS19TSVpFX1BBR0Vf
T1JERVIpKQo+Pj4gIMKgIMKgICNkZWZpbmUgX19XT1JEU0laRcKgwqDCoMKgwqDCoMKgIDY0Cj4+
PiBkaWZmIC0tZ2l0IGEvcGxhdC9Db25maWcudWsgYi9wbGF0L0NvbmZpZy51awo+Pj4gaW5kZXgg
OGE4NzhlYjAuLmQwYjk5YmQ1IDEwMDY0NAo+Pj4gLS0tIGEvcGxhdC9Db25maWcudWsKPj4+ICsr
KyBiL3BsYXQvQ29uZmlnLnVrCj4+PiBAQCAtMjUsMyArMjUsMTIgQEAgY29uZmlnIEhaCj4+PiAg
wqDCoMKgwqDCoCBoZWxwCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIENvbmZpZ3VyZSB0aGUgdGlt
ZXIgaW50ZXJydXB0IGZyZXF1ZW5jeS4KPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgT25seSBjaGFu
Z2UgdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4KPj4+ICsKPj4+ICtjb25maWcg
U1RBQ0tfU0laRV9QQUdFX09SREVSCj4+PiArwqDCoMKgIGludAo+Pj4gK8KgwqDCoCBwcm9tcHQg
IlN0YWNrIHNpemUgcGFnZSBvcmRlciIKPj4+ICvCoMKgwqAgZGVmYXVsdCA0Cj4+PiArwqDCoMKg
IGhlbHAKPj4+ICvCoMKgwqDCoMKgwqDCoCBJbmRpcmVjdGx5IGNvbmZpZ3VyZXMgdGhlIHN0YWNr
IHNpemUgYnkgY2hhbmdpbmcgdGhlIHN0YWNrCj4+PiBzaXplIHBhZ2UKPj4+ICvCoMKgwqDCoMKg
wqDCoCBvcmRlci4gU3RhY2sgc2l6ZSBpcyBlcXVhbCB3aXRoIDJeb3JkZXIgKiBwYWdlIHNpemUg
KGUuZy4gNEtCKS4KPj4+ICvCoMKgwqDCoMKgwqDCoCBPbmx5IGNoYW5nZSB0aGlzIGlmIHlvdSBr
bm93IHdoYXQgeW91J3JlIGRvaW5nLgo+Pj4KPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KPj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdAo+PiBN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:17:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:17:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qhz-0006N3-SD; Thu, 05 Sep 2019 12:17:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qhy-0006Mv-Sh
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:17:50 +0000
X-Inumbo-ID: 2cdcf4d8-cfd7-11e9-978d-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2cdcf4d8-cfd7-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:49 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id t9so2722498wmi.5
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id;
 bh=2tbAXt4jfM+lsfM5LQpDoFagJvlewiC/++y5+i8vWWk=;
 b=mLO+B1sqiJnZr1MYGpDwEQ+CPwIIinUikadc/nrz90SSyJrXvmOoK0ApM5/IShFQ1s
 yIlwV+c0GKhzaQdyebqgzvnQlpT8fS2iItSAszz6EqK7WTtpFWEK14rR1OpAsC7gKdQa
 utPx5WjGryHEageE6Wa2m8e75OMu9PI/r9Ko7oW+Nwa080Nn0COA+sarzDTBW6uhjHvj
 ufGKJTVTsj4bnLdC0TOpv/KxgQA+Zrs2uD3aqoZDnxp/zjfi+08nVzx9AXedh4D1SSiN
 fGAmG+I3Y5a1YRlylShVlCIKqwjWPvyLZxmbcr88AANxsuB/jzY7/xe1I1IfBxJ0QSj0
 z4rA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id;
 bh=2tbAXt4jfM+lsfM5LQpDoFagJvlewiC/++y5+i8vWWk=;
 b=n4+d/UuIysjdZfI1tNVXI5Om/Gk3omN4KVAOXecqqq/zWYtkcYur95TEq7U+Klot4F
 8ctMLUQk3HZpGZre4wZhACll5Sa+N5IjUDsGY/zEGY0t90VRFhEcFw4zBI4kNpx29q82
 BTjpKH8QjrkSqpaLLPYog2/rRGNid62gTIV9AJR2cPA/e0wA9IMz9insIpmgOnwYcahg
 s8vqJQRLBYYHJq4zAkAriRyNf15hbA/mRFwCLfD4HJbZoCWrYWae/YmyozIqLRmPdlHO
 htGabUcFL0gNw9AT2p1ngs8X/pD0wHdyzE9MB6ct0+AAlgGpk/4PdqtG6EzJaYm7GaDg
 +p8Q==
X-Gm-Message-State: APjAAAVSfJpWGV8LwiBbKZkmN4uTKmpEu/FvYxYMkp/cYQ9fYT+GWHxf
 bxOWSWtMat/Vfzl5AV5Ivyy4UIt+MvmLXQ==
X-Google-Smtp-Source: APXvYqzJrIGYEPxxqiT+yFTGlUKxgLqd4tIRmF2wppVtxGWHufbLPCPivGJyShe1Mpj5yR/8y7SELQ==
X-Received: by 2002:a1c:9889:: with SMTP id a131mr2790579wme.38.1567685868307; 
 Thu, 05 Sep 2019 05:17:48 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.46
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:46 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:25 +0300
Message-Id: <20190905121433.19834-1-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v3 0/8] Unikraft 9P API
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyB0aGUgOVAgQVBJLCB3aGljaCBhY3RzIGFzIGEg
Z2VuZXJpYwppbnRlcmZhY2UgYmV0d2VlbiB0aGUgOVAgdHJhbnNwb3J0IGRyaXZlcnMgKHhlbiwg
dmlydGlvKSBhbmQKdGhlIDlwZnMgaW1wbGVtZW50YXRpb24uIFRoZSBBUEkgbWF5IGFsc28gYmUg
dXNlZCBkaXJlY3RseSBieQp1c2Vycy4KClRoZSB0cmFuc3BvcnQgZHJpdmVycyByZWdpc3RlciB0
aGVtc2VsdmVzIHdpdGggdGhlIEFQSSB1c2luZyB0aGUKZGVmaW5pdGlvbnMgZnJvbSA5cGRldl90
cmFucy5oIGFuZCA5cGRldl9jb3JlLmgsIGFuZCBpbXBsZW1lbnQKdGhlIGNvbm5lY3QsIGRpc2Nv
bm5lY3QgYW5kIHJlcXVlc3QgY2FsbGJhY2tzLgoKVGhlIHByb3RvY29sIGNvcmUgdHlwZXMgYW5k
IGNvbnN0YW50cyBjYW4gYmUgZm91bmQgaW4gOXBfY29yZS5oLAphbmQgYSBoZWxwZXIgaW50ZXJm
YWNlIHRvIHRoZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSB0aGUgOVAKcHJvdG9jb2wgY2FuIGJl
IGZvdW5kIGluIDlwLmguCgpUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIG9iamVjdHMgd2hpY2ggbXVz
dCBiZSBtYW5hZ2VkIGNhcmVmdWxseQpieSB0aGUgQVBJOiB0aGUgcmVxdWVzdCBhbmQgdGhlIGZp
ZCAoaGFuZGxlIHRvIGEgZmlsZXN5c3RlbQplbnRpdHkgc3VjaCBhcyBhIGZpbGUgb3IgZGlyZWN0
b3J5LCBzaW1pbGFyIHRvIGEgZmlsZQpkZXNjcmlwdG9yKS4gVGhlIG1hbmFnZW1lbnQgb2YgYm90
aCBvZiB0aG9zZSBpcyBhYnN0cmFjdGVkIGludG8KOXByZXEuaCBhbmQgOXBmaWQuaCByZXNwZWN0
aXZlbHkuCgpDaGFuZ2VzIHNpbmNlIHYyOgotIFByb3ZpZGUgYSBzZXR0ZXIgZnVuY3Rpb24gZm9y
IHRoZSBkZWZhdWx0IHRyYW5zcG9ydC4KLSBVc2UgdWtfcHJfZGVidWcoKSB3aGVuIHJlcG9ydGlu
ZyBlcnJvcnMsIHN1Y2ggdGhhdCB0aGUgY2FsbAogIGdldHMgZWxpbWluYXRlZCBpZiBubyBkZWJ1
Z2dpbmcgb3B0aW9ucyBhcmUgc2V0LgotIFN0b3JlIHRoZSBtYXhpbXVtIHBvc3NpYmxlIG1lc3Nh
Z2Ugc2l6ZSBmb3IgYSB0cmFuc3BvcnQgaW4gYSBzZXBhcmF0ZQogIGZpZWxkLCBwcm92aWRlIGdl
dHRlciBhbmQgc2V0dGVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugc2l6ZS4KLSBSZW5hbWUg
dWtfOXBkZXZfeG1pdF9yZWFkeSB0byB1a185cGRldl94bWl0X25vdGlmeS4KLSBSZW1vdmUgJ2Rv
XycgZnJvbSB1a185cF9kb18qIGZhbWlseSBvZiBmdW5jdGlvbnMuCi0gUmVjdGlmeSB3cm9uZyBv
ciBpbnN1ZmZpY2llbnQgZG9jdW1lbnRhdGlvbi4KQ2hhbmdlcyBzaW5jZSB2MToKLSBNYWtlIHVz
ZSBvZiB3YWl0LXF1ZXVlcyBpZiBhdmFpbGFibGUsIGluc3RlYWQgb2YgYnVzeSB3YWl0aW5nLgot
IE1vZGlmeSB0cmFuc3BvcnQgbG9va3VwIHRvIHJldHVybiB0aGUgdHJhbnNwb3J0IGluc3RlYWQg
b2YKICBwYXNzaW5nIGl0IHRocm91Z2ggYW4gYXJndW1lbnQuCi0gQ2hhbmdlIGxpYnJhcnkgZGVz
Y3JpcHRpb24gaW4gbWVudWNvbmZpZyB0byAiOXAgY2xpZW50Ii4KLSBVcGRhdGUgYml0d2lzZS1P
UidlZCBmbGFncyB0byBiZSBtYWNyb3MgaW5zdGVhZCBvZiBmaWVsZHMgaW4KICBlbnVtcyBpbiA5
cF9jb3JlLmguCi0gQWRkIHN1cHBvcnQgZm9yIHplcm8tY29weWluZy4KCkNyaXN0aWFuIEJhbnUg
KDgpOgogIGxpYi91azlwOiBBZGQgOVAgbGlicmFyeSBza2VsZXRvbgogIGxpYi91azlwOiBBZGQg
OVAgdHJhbnNwb3J0IHJlZ2lzdHJhdGlvbgogIGxpYi91azlwOiBBZGQgOVAgcHJvdG9jb2wgY29y
ZSBkZWZpbml0aW9ucwogIGxpYi91azlwOiBBZGQgOVAgcmVxdWVzdHMgYWJzdHJhY3Rpb24KICBs
aWIvdWs5cDogQWRkIDlQIGRldmljZSBpbXBsZW1lbnRhdGlvbgogIGxpYi91azlwOiBBZGQgOVAg
ZmlkIGFic3RyYWN0aW9uCiAgbGliL3VrOXA6IEFkZCA5UCBoZWxwZXIgQVBJCiAgbGliL3VrOXA6
IENsdW5rIGZpZHMgb24gZmlkIHJlbGVhc2UKCiBsaWIvQ29uZmlnLnVrICAgICAgICAgICAgICAg
ICAgICAgfCAgIDEgKwogbGliL01ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgIHwgICAxICsK
IGxpYi91azlwLzlwLmMgICAgICAgICAgICAgICAgICAgICB8IDQzMCArKysrKysrKysrKysrKysr
KysrKysrKysrKysrCiBsaWIvdWs5cC85cGRldi5jICAgICAgICAgICAgICAgICAgfCA0NTUgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvdWs5cC85cGRldl90cmFucy5jICAgICAg
ICAgICAgfCAgODYgKysrKysrCiBsaWIvdWs5cC85cGZpZC5jICAgICAgICAgICAgICAgICAgfCAg
NzEgKysrKysKIGxpYi91azlwLzlwcmVxLmMgICAgICAgICAgICAgICAgICB8IDU2OSArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliL3VrOXAvQ29uZmlnLnVrICAgICAg
ICAgICAgICAgIHwgICA2ICsKIGxpYi91azlwL01ha2VmaWxlLnVrICAgICAgICAgICAgICB8ICAx
MCArCiBsaWIvdWs5cC9leHBvcnRzeW1zLnVrICAgICAgICAgICAgfCAgNDggKysrKwogbGliL3Vr
OXAvaW5jbHVkZS91ay85cC5oICAgICAgICAgIHwgMjY1ICsrKysrKysrKysrKysrKysrKwogbGli
L3VrOXAvaW5jbHVkZS91ay85cF9jb3JlLmggICAgIHwgMjcxICsrKysrKysrKysrKysrKysrKwog
bGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oICAgICAgIHwgMjI5ICsrKysrKysrKysrKysrKwog
bGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmggIHwgMTkxICsrKysrKysrKysrKysKIGxp
Yi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaCB8IDEwNSArKysrKysrCiBsaWIvdWs5cC9p
bmNsdWRlL3VrLzlwZmlkLmggICAgICAgfCAxMTUgKysrKysrKysKIGxpYi91azlwL2luY2x1ZGUv
dWsvOXByZXEuaCAgICAgICB8IDMwMCArKysrKysrKysrKysrKysrKysrKwogMTcgZmlsZXMgY2hh
bmdlZCwgMzE1MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvOXAu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwLzlwZGV2LmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvdWs5cC85cGRldl90cmFucy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvOXBm
aWQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwLzlwcmVxLmMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBsaWIvdWs5cC9Db25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9NYWtl
ZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2V4cG9ydHN5bXMudWsKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwX2NvcmUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91
azlwL2luY2x1ZGUvdWsvOXBkZXYuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1
ZGUvdWsvOXBkZXZfY29yZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91
ay85cGRldl90cmFucy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91ay85
cGZpZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91ay85cHJlcS5oCgot
LSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:17:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:17:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qi4-0006O7-UP; Thu, 05 Sep 2019 12:17:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qi3-0006Ns-Pi
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:17:55 +0000
X-Inumbo-ID: 2d93750a-cfd7-11e9-b299-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2d93750a-cfd7-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:50 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id i1so1937240wro.4
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=OajLqvblkIkMeelidVotl1r0WKFqCFYS2ZOwxAPfTy4=;
 b=pkUqdfyvPkNrLnTZn7rk814bh3oTFIlTMLfFq7dsERzvf3YN5wUSDgxoBN3TECQkPe
 W9q79PBtJNnYODXdzE5AIUeHYvgnH4g2jXn+YCJmP177MK6ijI4rb+KNUQe8HnSA56iX
 8FvgfIETeIrWPgMh1qxQFIrDQfHc27ba1pe2nuwE8lqNZDSj1aBzVsqRuxVHcCer45Nw
 AzjWI6JMK7MGE9WSAgGdg/wA6CTBEXc5JEEgtUtSVS+nlJaU3brhzkOXowVVDS+UmjX1
 +27iXBkIsCnCASlv0Mf7OKv4kdNXq76WVXAfffZKFfuBP8//0XNkmQ4sC1VW9NiabPrO
 osOw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=OajLqvblkIkMeelidVotl1r0WKFqCFYS2ZOwxAPfTy4=;
 b=BtZ+79eD5tk+81RAxVxzqsVR7WIqEinbBhKwyVrj0SZm3rKMkgLE8g1gfWo8EiXwZa
 bEvgyAjH5hOS9T339/QwsJvRWlyj7qbax/O1NioU33GO449NiW5BUQ7zx9VTIMQlusQT
 aaMZ6pFshJcNOos8X3p5Q1/l93LChtIBNXDK/felw7wsOpahcI5xtCKtsxEYbUCCtO3/
 BM0HZxFy5C4K5h4JPJMObGjtv3FF9KuCMZgl0qoNqYmMrgCQ2kyE88guiTYSOZZhqiF9
 G6+xJjBy7/IfqgaQShhmoJFZ+xsGGKvfq4iVAzKWQJigBid1yp4vlTJZgnAXwFoULLap
 MoCg==
X-Gm-Message-State: APjAAAXg0/B3hJTSmthH2jnyr7aWbAnMD+4zncKOhECD8AzTIar/iuYo
 AZESpfgxZRmrMWUZHer3cphzUiSEIZU=
X-Google-Smtp-Source: APXvYqzGC1mhPnfL8DlPbGtF8hQkvZStXqxz2dQe23H1oOy125SQTsrSh88Pr4wZkc/GeqfwoO7BEg==
X-Received: by 2002:a5d:4ac7:: with SMTP id y7mr2503966wrs.271.1567685869384; 
 Thu, 05 Sep 2019 05:17:49 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.48
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:48 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:26 +0300
Message-Id: <20190905121433.19834-2-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 1/8] lib/uk9p: Add 9P library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGxpYnVrOXAgc2tlbGV0b24gYW5kIHJlZ2lzdGVyIGl0IHdpdGhpbiB0aGUgYnVpbGQgc3lz
dGVtLgoKU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KLS0t
CiBsaWIvQ29uZmlnLnVrICAgICAgICB8IDEgKwogbGliL01ha2VmaWxlLnVrICAgICAgfCAxICsK
IGxpYi91azlwL0NvbmZpZy51ayAgIHwgNiArKysrKysKIGxpYi91azlwL01ha2VmaWxlLnVrIHwg
NCArKysrCiA0IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBsaWIvdWs5cC9Db25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9NYWtl
ZmlsZS51awoKZGlmZiAtLWdpdCBhL2xpYi9Db25maWcudWsgYi9saWIvQ29uZmlnLnVrCmluZGV4
IDIwNGY1MjE2MDMwNy4uZjM1ODhhYWY4MDAyIDEwMDY0NAotLS0gYS9saWIvQ29uZmlnLnVrCisr
KyBiL2xpYi9Db25maWcudWsKQEAgLTQ5LDUgKzQ5LDYgQEAgc291cmNlICJsaWIvdWtzd3JhbmQv
Q29uZmlnLnVrIgogc291cmNlICJsaWIvdWtidXMvQ29uZmlnLnVrIgogc291cmNlICJsaWIvdWtz
Z2xpc3QvQ29uZmlnLnVrIgogc291cmNlICJsaWIvdWtuZXRkZXYvQ29uZmlnLnVrIgorc291cmNl
ICJsaWIvdWs5cC9Db25maWcudWsiCiBzb3VyY2UgImxpYi9wb3NpeC1saWJkbC9Db25maWcudWsi
CiBzb3VyY2UgImxpYi91a2xpYnBhcmFtL0NvbmZpZy51ayIKZGlmZiAtLWdpdCBhL2xpYi9NYWtl
ZmlsZS51ayBiL2xpYi9NYWtlZmlsZS51awppbmRleCBhYzFlMzhiYzdmYzIuLmU2MmU2MGFmYzk1
YSAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlLnVrCisrKyBiL2xpYi9NYWtlZmlsZS51awpAQCAt
MjYsNSArMjYsNiBAQCAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0Up
L2xpYi91a21waSkpCiAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0Up
L2xpYi91a2J1cykpCiAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0Up
L2xpYi91a3NnbGlzdCkpCiAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JB
U0UpL2xpYi91a25ldGRldikpCiskKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VL
X0JBU0UpL2xpYi91azlwKSkKICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtf
QkFTRSkvbGliL3Bvc2l4LWxpYmRsKSkKICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05G
SUdfVUtfQkFTRSkvbGliL3VrbGlicGFyYW0pKQpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvQ29uZmln
LnVrIGIvbGliL3VrOXAvQ29uZmlnLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMC4uZWE0MTE0NDgzMDRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrOXAvQ29uZmln
LnVrCkBAIC0wLDAgKzEsNiBAQAorY29uZmlnIExJQlVLOVAKKwlib29sICJ1azlwOiA5cCBjbGll
bnQiCisJZGVmYXVsdCBuCisJc2VsZWN0IExJQlVLQUxMT0MKKwlzZWxlY3QgTElCTk9MSUJDIGlm
ICFIQVZFX0xJQkMKKwlzZWxlY3QgTElCVUtERUJVRwpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvTWFr
ZWZpbGUudWsgYi9saWIvdWs5cC9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAuLmZhNzU0NDQwNTk4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91azlw
L01ha2VmaWxlLnVrCkBAIC0wLDAgKzEsNCBAQAorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ1
azlwLCQoQ09ORklHX0xJQlVLOVApKSkKKworQ0lOQ0xVREVTLSQoQ09ORklHX0xJQlVLOVApCQkr
PSAtSSQoTElCVUs5UF9CQVNFKS9pbmNsdWRlCitDWFhJTkNMVURFUy0kKENPTkZJR19MSUJVSzlQ
KQkJKz0gLUkkKExJQlVLOVBfQkFTRSkvaW5jbHVkZQotLSAKMi4xMS4wCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:18:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:18:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qi9-0006PE-WD; Thu, 05 Sep 2019 12:18:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qi8-0006Ox-Q7
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:18:00 +0000
X-Inumbo-ID: 2e6525dc-cfd7-11e9-a337-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2e6525dc-cfd7-11e9-a337-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:51 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id h7so2489097wrt.13
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=FxuTaMcfxIG3zpV0GQAkzABU/QnQ+1806AC12rJ1PJE=;
 b=lcHSRmf14O6Pcu9VbK5k4aKZZ3iKz80dWszxXp+kGt6Dl1QN4TGtEReVNrLXCrE4LL
 IgLe9XoobJD7jSgIkSPhspOMnBElUUkyF/XL8i8+rsAj7fvwacYgZPh2kVLSHm1s1qCr
 YpZCXLAl3o4R6pf2ZxnzTmMiU0U9em2QNg+Jr0YdQZi94fJzmrLlAyhK9izCkHtzHQCi
 w8AQy3jX4NyEZRDzdm12S2kOgJfKxGzGjgOGc1d2HiSJifVhXr9xczAkS4J9RXvAzu50
 T2zOGwzJGkhYBxNwW49gHgnH2Cp9JFscn4xqpWUAlcTYTY4aCSRlw+RCP4BLE49+Uwqs
 bemQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=FxuTaMcfxIG3zpV0GQAkzABU/QnQ+1806AC12rJ1PJE=;
 b=LdDDEz7bNy2JzJjW6ldsVIYS8OcdirFHkXcM4Qaivlw130P/o+XHJux2qT5mU8O4Zl
 odx5x4IcvJHOoBNUMTaRXHZjaRolpEYMYd/4W4POQBo6xJLN7Vg19mDLEjhUY1qxDHlQ
 ssEb6se7aPq3rdiC7V3USJTmTDEcnHYlSAivnayU37Dz3MNCEVCvw4kjIVkBj45Kv2Mm
 K/XfYK5Cu/iQl6p3oOAT4UkalhwvhcjUOZnPyVU02/PH/+cFgohd7y3nIZpqZ/rjbDIE
 927Wwkqvr0jFrmaNOiqkdHglEPiWFf0qvLXGWTzI9ft49E7HXnZUFHNJ8KhDZrBMt/jY
 dnHA==
X-Gm-Message-State: APjAAAWVvZBR5c1Uc+42u6T7vNTHT87nl/23JOkQlLdXlXjWCsCaa3Av
 ggnlNDujDVnp0GHw3F/R2vgkR5Vzt3E=
X-Google-Smtp-Source: APXvYqzRlDV07VedqMeglaCi6FDJRLCf8TKR/fy5/IH+/w2y+CTdmn1+O5rU8cVEcqq1ZlVXLs9FjQ==
X-Received: by 2002:adf:ead2:: with SMTP id o18mr2340230wrn.107.1567685870741; 
 Thu, 05 Sep 2019 05:17:50 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.49
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:50 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:27 +0300
Message-Id: <20190905121433.19834-3-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 2/8] lib/uk9p: Add 9P transport
 registration
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRoZSA5UCB0cmFuc3BvcnQgcmVnaXN0cmF0aW9uIGFuZCBs
b29rdXAgQVBJLgoKVHJhbnNwb3J0cyBhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVscyBzdWNoIGFz
IHZpcnRpbyBieSB1c2luZyB0aGUKdmlydGlvLTlwIGRldmljZSwgb3IgeGVuIHJpbmdzLiBUaG9z
ZSBhcmUgdGhlIGRlZmF1bHQgdHJhbnNwb3J0cwpmb3IgdGhlIEtWTSBhbmQgWGVuIHBsYXRmb3Jt
cyByZXNwZWN0aXZlbHkuIEhvd2V2ZXIsIGluIHRoZSBmdXR1cmUKb25lIG1pZ2h0IGhhdmUgbXVs
dGlwbGUgYXZhaWxhYmxlIHRyYW5zcG9ydHMgZm9yIHRoZSBzYW1lIHBsYXRmb3JtCmJ5IHN1cHBv
cnRpbmcgVENQIG9yIFJETUEuCgpTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJA
Z21haWwuY29tPgotLS0KIGxpYi91azlwLzlwZGV2X3RyYW5zLmMgICAgICAgICAgICB8ICA4MiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi91azlwL01ha2VmaWxlLnVrICAgICAg
ICAgICAgICB8ICAgMiArCiBsaWIvdWs5cC9leHBvcnRzeW1zLnVrICAgICAgICAgICAgfCAgIDQg
KysKIGxpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaCB8IDEwMiArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAxOTAgaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwLzlwZGV2X3RyYW5zLmMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWIvdWs5cC9leHBvcnRzeW1zLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3VrOXAvaW5jbHVkZS91ay85cGRldl90cmFucy5oCgpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvOXBk
ZXZfdHJhbnMuYyBiL2xpYi91azlwLzlwZGV2X3RyYW5zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwLi4wODFkYWM4NWRmMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv
dWs5cC85cGRldl90cmFucy5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBBdXRob3JzOiBDcmlzdGlhbiBCYW51IDxj
cmlzdGJAZ21haWwuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQ
b2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhJ
UyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAq
LworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1
ay9jb25maWcuaD4KKyNpbmNsdWRlIDx1ay9saXN0Lmg+CisjaW5jbHVkZSA8dWsvYXNzZXJ0Lmg+
CisjaW5jbHVkZSA8dWsvOXBkZXZfdHJhbnMuaD4KKworc3RhdGljIFVLX0xJU1RfSEVBRCh1a185
cGRldl90cmFuc19saXN0KTsKKworc3RhdGljIHN0cnVjdCB1a185cGRldl90cmFucyAqdWtfOXBk
ZXZfdHJhbnNfc2F2ZWRfZGVmYXVsdDsKKworaW50IHVrXzlwZGV2X3RyYW5zX3JlZ2lzdGVyKHN0
cnVjdCB1a185cGRldl90cmFucyAqdHJhbnMpCit7CisJVUtfQVNTRVJUKHRyYW5zKTsKKwlVS19B
U1NFUlQodHJhbnMtPm5hbWUpOworCVVLX0FTU0VSVCh0cmFucy0+YSk7CisKKwl1a19saXN0X2Fk
ZF90YWlsKCZ0cmFucy0+X2xpc3QsICZ1a185cGRldl90cmFuc19saXN0KTsKKworCWlmICghdWtf
OXBkZXZfdHJhbnNfc2F2ZWRfZGVmYXVsdCkKKwkJdWtfOXBkZXZfdHJhbnNfc2F2ZWRfZGVmYXVs
dCA9IHRyYW5zOworCisJdWtfcHJfaW5mbygiUmVnaXN0ZXJlZCB0cmFuc3BvcnQgJXNcbiIsIHRy
YW5zLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnVr
XzlwZGV2X3RyYW5zX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdWtfOXBk
ZXZfdHJhbnMgKnQ7CisKKwl1a19saXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ1a185cGRldl90cmFu
c19saXN0LCBfbGlzdCkgeworCQlpZiAoIXN0cmNtcCh0LT5uYW1lLCBuYW1lKSkKKwkJCXJldHVy
biB0OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnVr
XzlwZGV2X3RyYW5zX2dldF9kZWZhdWx0KHZvaWQpCit7CisJcmV0dXJuIHVrXzlwZGV2X3RyYW5z
X3NhdmVkX2RlZmF1bHQ7Cit9CisKK3ZvaWQgdWtfOXBkZXZfdHJhbnNfc2V0X2RlZmF1bHQoc3Ry
dWN0IHVrXzlwZGV2X3RyYW5zICp0cmFucykKK3sKKwl1a185cGRldl90cmFuc19zYXZlZF9kZWZh
dWx0ID0gdHJhbnM7Cit9CmRpZmYgLS1naXQgYS9saWIvdWs5cC9NYWtlZmlsZS51ayBiL2xpYi91
azlwL01ha2VmaWxlLnVrCmluZGV4IGZhNzU0NDQwNTk4Yy4uYjEwNzFhMGU3ZDNjIDEwMDY0NAot
LS0gYS9saWIvdWs5cC9NYWtlZmlsZS51aworKysgYi9saWIvdWs5cC9NYWtlZmlsZS51awpAQCAt
MiwzICsyLDUgQEAgJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ1azlwLCQoQ09ORklHX0xJQlVL
OVApKSkKIAogQ0lOQ0xVREVTLSQoQ09ORklHX0xJQlVLOVApCQkrPSAtSSQoTElCVUs5UF9CQVNF
KS9pbmNsdWRlCiBDWFhJTkNMVURFUy0kKENPTkZJR19MSUJVSzlQKQkJKz0gLUkkKExJQlVLOVBf
QkFTRSkvaW5jbHVkZQorCitMSUJVSzlQX1NSQ1MteSArPSAkKExJQlVLOVBfQkFTRSkvOXBkZXZf
dHJhbnMuYwpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhwb3J0c3ltcy51ayBiL2xpYi91azlwL2V4
cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40NmY0
MDA4MjVhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWs5cC9leHBvcnRzeW1zLnVrCkBAIC0w
LDAgKzEsNCBAQAordWtfOXBkZXZfdHJhbnNfcmVnaXN0ZXIKK3VrXzlwZGV2X3RyYW5zX2J5X25h
bWUKK3VrXzlwZGV2X3RyYW5zX2dldF9kZWZhdWx0Cit1a185cGRldl90cmFuc19zZXRfZGVmYXVs
dApkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl90cmFucy5oIGIvbGliL3Vr
OXAvaW5jbHVkZS91ay85cGRldl90cmFucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMC4uYTY0OGRiZmJhOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrOXAvaW5j
bHVkZS91ay85cGRldl90cmFucy5oCkBAIC0wLDAgKzEsMTAyIEBACisvKiBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgorICogQXV0aG9yczogQ3Jpc3RpYW4gQmFu
dSA8Y3Jpc3RiQGdtYWlsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNp
dHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAq
IFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVku
CisgKi8KKworI2lmbmRlZiBfX1VLXzlQREVWX1RSQU5TX18KKyNkZWZpbmUgX19VS185UERFVl9U
UkFOU19fCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8dWsvY29uZmlnLmg+CisK
KyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqIEEgc3RydWN0
dXJlIHVzZWQgdG8gZGVzY3JpYmUgYSB0cmFuc3BvcnQuICovCitzdHJ1Y3QgdWtfOXBkZXZfdHJh
bnMgeworCS8qCisJICogVHJhbnNwb3J0IG5hbWUgKGUuZy4gInZpcnRpbyIsICJ4ZW4iKS4gVGhp
cyBmaWVsZCBpcyByZXNlcnZlZCBmb3IKKwkgKiBmdXR1cmUgdXNlLCB3aGVuIG11bHRpcGxlIHRy
YW5zcG9ydCBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gdGhlCisJICogc2FtZSBwbGF0Zm9ybSwg
c3VjaCBhcyBSRE1BIG9yIFRDUCwgaW4gYWRkaXRpb24gdG8gdGhlIHBsYXRmb3JtCisJICogc3Bl
Y2lmaWMgdHJhbnNwb3J0LgorCSAqLworCWNvbnN0IGNoYXIgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqbmFtZTsKKwkvKiBBbGxvY2F0b3IgdXNlZCBmb3IgZGV2aWNlcyB3aGljaCB1c2Ug
dGhpcyB0cmFuc3BvcnQgbGF5ZXIuICovCisJc3RydWN0IHVrX2FsbG9jICAgICAgICAgICAgICAg
ICAgICAgICAgICphOworCS8qIEBpbnRlcm5hbCBFbnRyeSBpbiB0aGUgbGlzdCBvZiBhdmFpbGFi
bGUgdHJhbnNwb3J0cy4gKi8KKwlzdHJ1Y3QgdWtfbGlzdF9oZWFkICAgICAgICAgICAgICAgICAg
ICAgX2xpc3Q7Cit9OworCisvKioKKyAqIEFkZHMgYSB0cmFuc3BvcnQgdG8gdGhlIGF2YWlsYWJs
ZSB0cmFuc3BvcnRzIGxpc3QgZm9yIFVuaWtyYWZ0IDlQIERldmljZXMuCisgKiBUaGlzIHNob3Vs
ZCBiZSBjYWxsZWQgb25jZSBwZXIgZHJpdmVyIChvbmNlIGZvciB2aXJ0aW8sIG9uY2UgZm9yIHhl
biwgZXRjLikuCisgKgorICogQHBhcmFtIHRyYW5zCisgKiAgIFBvaW50ZXIgdG8gdGhlIHRyYW5z
cG9ydCBzdHJ1Y3R1cmUuCisgKiBAcmV0dXJuCisgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgorICog
ICAtICg8IDApOiBGYWlsZWQgdG8gcmVnaXN0ZXIgdGhlIHRyYW5zcG9ydCBsYXllci4KKyAqLwor
aW50IHVrXzlwZGV2X3RyYW5zX3JlZ2lzdGVyKHN0cnVjdCB1a185cGRldl90cmFucyAqdHJhbnMp
OworCisvKioKKyAqIExvb2tzIHVwIGEgdHJhbnNwb3J0IGxheWVyIGJ5IGl0cyBuYW1lLgorICoK
KyAqIEBwYXJhbSBuYW1lCisgKiAgIFRoZSB0cmFuc3BvcnQgbGF5ZXIgbmFtZS4KKyAqIEByZXR1
cm4KKyAqICAgVGhlIDlQIHRyYW5zcG9ydCB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBOVUxMIGlm
IG1pc3NpbmcuCisgKi8KK3N0cnVjdCB1a185cGRldl90cmFucyAqdWtfOXBkZXZfdHJhbnNfYnlf
bmFtZShjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBHZXRzIHRoZSBkZWZhdWx0IHRyYW5z
cG9ydCBsYXllci4KKyAqCisgKiBAcmV0dXJuCisgKiAgIFRoZSBkZWZhdWx0IDlQIHRyYW5zcG9y
dCwgb3IgTlVMTCBpZiBtaXNzaW5nLgorICovCitzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnVrXzlw
ZGV2X3RyYW5zX2dldF9kZWZhdWx0KHZvaWQpOworCisvKioKKyAqIFNldHMgdGhlIGRlZmF1bHQg
dHJhbnNwb3J0IGxheWVyLgorICoKKyAqIEBwYXJhbSB0cmFucworICogICBUaGUgZGVmYXVsdCA5
UCB0cmFuc3BvcnQuCisgKi8KK3ZvaWQgdWtfOXBkZXZfdHJhbnNfc2V0X2RlZmF1bHQoc3RydWN0
IHVrXzlwZGV2X3RyYW5zICp0cmFucyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlm
CisKKyNlbmRpZiAvKiBfX1VLXzlQREVWX1RSQU5TX18gKi8KLS0gCjIuMTEuMAoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:18:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:18:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qiF-0006Q9-1y; Thu, 05 Sep 2019 12:18:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qiD-0006Py-Qp
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:18:05 +0000
X-Inumbo-ID: 2f078c64-cfd7-11e9-a337-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2f078c64-cfd7-11e9-a337-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:53 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id q12so2739608wmj.4
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=0Np12KWSfTJel5Bj+vTmnsWR/A1/YHVZ1ZgRsEM/Zag=;
 b=BnJSajSN2cuc2JR6kgdY1myjUbMiLl0MAEYCsxGfGcWxjiwuVr9P0RZaiG8n1N28jp
 jgpV98VYy2o1JEM1BFtcRV6EfGFJDHry3NoYvlqr7+PAOBBtp++9cW7CYJzfktUkkAvI
 NxvQhcFkVlnuHkTekjHnLF1f4QiJTxJt7tZJzd+nBQUdiucLOuLW+aracb4JODr1+djy
 t3D+72HiSrPl0LtBnB0zbKJOr7+iiNk85qwrFgJgXmrLO3im5vzcDeojKt6RtNqp/LbZ
 ll/W8O8UR3gRDeCJupm6nYMMeUdqDv2M9fMATPk7sBX4LZi88FRCZPDqS48CEbeF9ImH
 qk4A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=0Np12KWSfTJel5Bj+vTmnsWR/A1/YHVZ1ZgRsEM/Zag=;
 b=N7F2FLfLZwtsuqrPgqBNyrk9ViGMwZI5/EYvG1J9cAnL/UEH65/FH7aiJWfZzE999p
 7mCFTuL8a60T/8idrqs3KJC9h6xG/+zXAQsr7raOkKwK5cpFiU2FFRuvBp0SFqbRBjIz
 Yn+VDrCSBRfNCm1QPyzLTXKyy8S9VAXRvH8bMtW4DyVYVK/3yBE1PYXCrv71UF7HCxC6
 vigMEQ9KR8fgwkGuWhsaTLL4o/HLsA7ccE+CG6v98CJ7zXSKWwfReGniP++RqjRG/zZp
 AxeB6YUrNMZPUfsJoR7lzi+y2ZseFAhWDJ/nS9egY8xXXV13a8rn4pkdZYaiGd7REnfp
 ZckA==
X-Gm-Message-State: APjAAAXF5opjyxVCh0SZjAk2Vticw1O/MY6tvB3fXVUmxvQHfrrB8S0b
 OEkR/Fq3HZngrw6yKRPO+4zW0tnFR30=
X-Google-Smtp-Source: APXvYqxjVtr5cMMdtRMMltQKvMK5myTMKNyFN1NGI4O1GTDU8QBqBPw/bJwf1Gv5m50RfrPnxiqiVQ==
X-Received: by 2002:a1c:f101:: with SMTP id p1mr2682327wmh.62.1567685871959;
 Thu, 05 Sep 2019 05:17:51 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.50
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:51 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:28 +0300
Message-Id: <20190905121433.19834-4-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 3/8] lib/uk9p: Add 9P protocol
 core definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBhZGRzIHRoZSA5UCBwcm90b2NvbCBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUg
c3RydWN0dXJlcyBpdAp1c2VzIGFuZCB0aGUgd2lyZSBmb3JtYXQgcmVxdWlyZWQuCgpTaWduZWQt
b2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgotLS0KIGxpYi91azlwL2lu
Y2x1ZGUvdWsvOXBfY29yZS5oIHwgMjcxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDI3MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91ay85cF9jb3JlLmgKCmRpZmYgLS1naXQgYS9saWIv
dWs5cC9pbmNsdWRlL3VrLzlwX2NvcmUuaCBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBfY29yZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMTk3ZjdhOTVkMTY4Ci0t
LSAvZGV2L251bGwKKysrIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cF9jb3JlLmgKQEAgLTAsMCAr
MSwyNzEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8q
CisgKiBBdXRob3JzOiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgorICoKKyAqIENv
cHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNU
RUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworCisjaWZuZGVmIF9fVUtfOVBfQ09SRV9f
CisjZGVmaW5lIF9fVUtfOVBfQ09SRV9fCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx1ay9hc3NlcnQuaD4K
KworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKioKKyAqIERv
Y3VtZW50YXRpb24gb2YgdGhlIHByb3RvY29sIG1heSBiZSBmb3VuZCBoZXJlOgorICogaHR0cHM6
Ly85ZmFucy5naXRodWIuaW8vcGxhbjlwb3J0LworICovCisKKy8qKgorICogOVAgcmVxdWVzdCB0
eXBlcy4KKyAqCisgKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS85ZmFucy9wbGFuOXBvcnQv
YmxvYi9tYXN0ZXIvaW5jbHVkZS9mY2FsbC5oCisgKi8KK2VudW0gdWtfOXBfdHlwZSB7CisJVUtf
OVBfVFZFUlNJT04gICAgICAgICAgPSAxMDAsCisJVUtfOVBfUlZFUlNJT04sCisJVUtfOVBfVEFV
VEggICAgICAgICAgICAgPSAxMDIsCisJVUtfOVBfUkFVVEgsCisJVUtfOVBfVEFUVEFDSCAgICAg
ICAgICAgPSAxMDQsCisJVUtfOVBfUkFUVEFDSCwKKwlVS185UF9URVJST1IgICAgICAgICAgICA9
IDEwNiwKKwlVS185UF9SRVJST1IsCisJVUtfOVBfVEZMVVNIICAgICAgICAgICAgPSAxMDgsCisJ
VUtfOVBfUkZMVVNILAorCVVLXzlQX1RXQUxLICAgICAgICAgICAgID0gMTEwLAorCVVLXzlQX1JX
QUxLLAorCVVLXzlQX1RPUEVOICAgICAgICAgICAgID0gMTEyLAorCVVLXzlQX1JPUEVOLAorCVVL
XzlQX1RDUkVBVEUgICAgICAgICAgID0gMTE0LAorCVVLXzlQX1JDUkVBVEUsCisJVUtfOVBfVFJF
QUQgICAgICAgICAgICAgPSAxMTYsCisJVUtfOVBfUlJFQUQsCisJVUtfOVBfVFdSSVRFICAgICAg
ICAgICAgPSAxMTgsCisJVUtfOVBfUldSSVRFLAorCVVLXzlQX1RDTFVOSyAgICAgICAgICAgID0g
MTIwLAorCVVLXzlQX1JDTFVOSywKKwlVS185UF9UUkVNT1ZFICAgICAgICAgICA9IDEyMiwKKwlV
S185UF9SUkVNT1ZFLAorCVVLXzlQX1RTVEFUICAgICAgICAgICAgID0gMTI0LAorCVVLXzlQX1JT
VEFULAorCVVLXzlQX1RXU1RBVCAgICAgICAgICAgID0gMTI2LAorCVVLXzlQX1JXU1RBVCwKK307
CisKKy8qKgorICogOVAgdmFsdWVzIG9mIGEgcWlkLnR5cGUuCisgKgorICogU291cmNlczogaHR0
cHM6Ly85ZmFucy5naXRodWIuaW8vcGxhbjlwb3J0L21hbi9tYW45L2ludHJvLmh0bWwsCisgKiBo
dHRwOi8vZXJpY3ZoLmdpdGh1Yi5pby85cC1yZmMvcmZjOXAyMDAwLnUuaHRtbC4KKyAqLworI2Rl
ZmluZSBVS185UF9RVERJUiAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgVUtfOVBfUVRBUFBF
TkQgICAgICAgICAgICAweDQwCisjZGVmaW5lIFVLXzlQX1FURVhDTCAgICAgICAgICAgICAgMHgy
MAorI2RlZmluZSBVS185UF9RVE1PVU5UICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVUtfOVBf
UVRBVVRIICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFVLXzlQX1FUVE1QICAgICAgICAgICAg
ICAgMHgwNAorI2RlZmluZSBVS185UF9RVFNZTUxJTksgICAgICAgICAgIDB4MDIKKyNkZWZpbmUg
VUtfOVBfUVRMSU5LICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIFVLXzlQX1FURklMRSAgICAg
ICAgICAgICAgMHgwMAorCisvKioKKyAqIDlQIHBlcm1pc3Npb24gYml0cy4KKyAqCisgKiBTb3Vy
Y2VzOiBodHRwczovLzlmYW5zLmdpdGh1Yi5pby9wbGFuOXBvcnQvbWFuL21hbjkvaW50cm8uaHRt
bCwKKyAqIGh0dHA6Ly9lcmljdmguZ2l0aHViLmlvLzlwLXJmYy9yZmM5cDIwMDAudS5odG1sLgor
ICovCisjZGVmaW5lIFVLXzlQX0RNRElSICAgICAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmlu
ZSBVS185UF9ETUFQUEVORCAgICAgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgVUtfOVBfRE1F
WENMICAgICAgICAgICAgICAweDIwMDAwMDAwCisjZGVmaW5lIFVLXzlQX0RNTU9VTlQgICAgICAg
ICAgICAgMHgxMDAwMDAwMAorI2RlZmluZSBVS185UF9ETUFVVEggICAgICAgICAgICAgIDB4MDgw
MDAwMDAKKyNkZWZpbmUgVUtfOVBfRE1UTVAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVm
aW5lIFVLXzlQX0RNU1lNTElOSyAgICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBVS185UF9E
TUxJTksgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgVUtfOVBfRE1ERVZJQ0UgICAg
ICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFVLXzlQX0RNTkFNRURQSVBFICAgICAgICAgMHgw
MDIwMDAwMAorI2RlZmluZSBVS185UF9ETVNPQ0tFVCAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNk
ZWZpbmUgVUtfOVBfRE1TRVRVSUQgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFVLXzlQ
X0RNU0VUR0lEICAgICAgICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBVS185UF9ETVNFVFZUWCAg
ICAgICAgICAgIDB4MDAwMTAwMDAKKworLyoqCisgKiA5UCBvcGVuIG1vZGUgYml0cy4KKyAqCisg
KiBTb3VyY2U6IGh0dHBzOi8vOWZhbnMuZ2l0aHViLmlvL3BsYW45cG9ydC9tYW4vbWFuOS9vcGVu
Lmh0bWwuCisgKi8KKyNkZWZpbmUgVUtfOVBfT1JFQUQgICAgICAgICAgICAgICAweDAwCisjZGVm
aW5lIFVLXzlQX09XUklURSAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBVS185UF9PUkRXUiAg
ICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgVUtfOVBfT0VYRUMgICAgICAgICAgICAgICAweDAz
CisjZGVmaW5lIFVLXzlQX09UUlVOQyAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBVS185UF9P
UkVYRUMgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgVUtfOVBfT1JDTE9TRSAgICAgICAgICAg
ICAweDQwCisjZGVmaW5lIFVLXzlQX09BUFBFTkQgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBV
S185UF9PRVhDTCAgICAgICAgICAgICAgIDB4MTAwMAorCisvKioKKyAqIDlQIHFpZC4KKyAqCisg
KiBTb3VyY2U6IGh0dHBzOi8vOWZhbnMuZ2l0aHViLmlvL3BsYW45cG9ydC9tYW4vbWFuOS9pbnRy
by5odG1sLgorICovCitzdHJ1Y3QgdWtfOXBfcWlkIHsKKwl1aW50OF90ICAgICAgICAgICAgICAg
ICB0eXBlOworCXVpbnQzMl90ICAgICAgICAgICAgICAgIHZlcnNpb247CisJdWludDY0X3QgICAg
ICAgICAgICAgICAgcGF0aDsKK307CisKKy8qKgorICogOVAgc3RyaW5nLgorICoKKyAqIFNvdXJj
ZTogaHR0cHM6Ly85ZmFucy5naXRodWIuaW8vcGxhbjlwb3J0L21hbi9tYW45L2ludHJvLmh0bWwu
CisgKi8KK3N0cnVjdCB1a185cF9zdHIgeworCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNpemU7
CisJY2hhciAgICAgICAgICAgICAgICAgICAgKmRhdGE7Cit9OworCisvKioKKyAqIENoZWNrIGlm
IGEgOVAgc3RyaW5nIGlzIGVxdWFsIHRvIGEgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZy4K
KyAqCisgKiBAcGFyYW0gcworICogICA5UCBzdHJpbmcuCisgKiBAcGFyYW0gcAorICogICBOdWxs
LXRlcm1pbmF0ZWQgc3RyaW5nLgorICogQHJldHVybgorICogICAxIGlmIGVxdWFsLCAwIG90aGVy
d2lzZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgdWtfOXBfc3RyX2VxdWFsKGNvbnN0IHN0cnVj
dCB1a185cF9zdHIgKnMsIGNvbnN0IGNoYXIgKnApCit7CisJcmV0dXJuIHN0cmxlbihwKSA9PSBz
LT5zaXplICYmICFzdHJuY21wKHMtPmRhdGEsIHAsIHMtPnNpemUpOworfQorCisvKioKKyAqIElu
aXRpYWxpemUgYSA5UCBzdHJpbmcgZnJvbSBhIGdpdmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcu
CisgKgorICogQHBhcmFtIHMKKyAqICAgOVAgc3RyaW5nLgorICogQHBhcmFtIHAKKyAqICAgTnVs
bC10ZXJtaW5hdGVkIHN0cmluZy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHVrXzlwX3N0cl9p
bml0KHN0cnVjdCB1a185cF9zdHIgKnMsIGNvbnN0IGNoYXIgKnApCit7CisJaWYgKCFwKSB7CisJ
CXMtPnNpemUgPSAwOworCQlyZXR1cm47CisJfQorCisJcy0+c2l6ZSA9IHN0cmxlbihwKTsKKwlz
LT5kYXRhID0gKGNoYXIgKilwOworfQorCisvKioKKyAqIDlQIHN0YXQgc3RydWN0dXJlLgorICov
CitzdHJ1Y3QgdWtfOXBfc3RhdCB7CisJdWludDE2X3QgICAgICAgICAgICAgICAgc2l6ZTsKKwl1
aW50MTZfdCAgICAgICAgICAgICAgICB0eXBlOworCXVpbnQzMl90ICAgICAgICAgICAgICAgIGRl
djsKKwlzdHJ1Y3QgdWtfOXBfcWlkICAgICAgICBxaWQ7CisJdWludDMyX3QgICAgICAgICAgICAg
ICAgbW9kZTsKKwl1aW50MzJfdCAgICAgICAgICAgICAgICBhdGltZTsKKwl1aW50MzJfdCAgICAg
ICAgICAgICAgICBtdGltZTsKKwl1aW50NjRfdCAgICAgICAgICAgICAgICBsZW5ndGg7CisJc3Ry
dWN0IHVrXzlwX3N0ciAgICAgICAgbmFtZTsKKwlzdHJ1Y3QgdWtfOXBfc3RyICAgICAgICB1aWQ7
CisJc3RydWN0IHVrXzlwX3N0ciAgICAgICAgZ2lkOworCXN0cnVjdCB1a185cF9zdHIgICAgICAg
IG11aWQ7CisJc3RydWN0IHVrXzlwX3N0ciAgICAgICAgZXh0ZW5zaW9uOworCXVpbnQzMl90ICAg
ICAgICAgICAgICAgIG5fdWlkOworCXVpbnQzMl90ICAgICAgICAgICAgICAgIG5fZ2lkOworCXVp
bnQzMl90ICAgICAgICAgICAgICAgIG5fbXVpZDsKK307CisKKy8qCisgKiBUT0RPOiBUaGUgd2ly
ZSBmb3JtYXQgaXMgYWx3YXlzIGxpdHRsZS1lbmRpYW4uIEFkZCBsaXR0bGUtZW5kaWFuIHR5cGVz
IGFuZAorICogY3B1X3RvX2xlKigpIGRhdGEgdG8gdGhlIHJlcXVpcmVkIGZvcm1hdC4KKyAqLwor
CisvKioKKyAqIEluaXRpYWxpemUgYSA5UCBzdGF0IHN0cnVjdHVyZSB0aGF0IHdvbid0IG1vZGlm
eSBhbnkgZmllbGRzIGlmIHNlbnQgd2l0aCBhCisgKiBXU1RBVCBtZXNzYWdlLCBieSBzZXR0aW5n
IGFsbCBpbnRlZ2VyIGZpZWxkcyB0byB+MCBhbmQgYWxsIHN0cmluZyBmaWVsZHMgdG8KKyAqIGVt
cHR5IHN0cmluZ3MuCisgKgorICogQHBhcmFtIHN0YXQKKyAqICAgVGhlIDlQIHN0YXQgc3RydWN0
dXJlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgdWtfOXBfc3RhdF9pbml0KHN0cnVjdCB1a185
cF9zdGF0ICpzdGF0KQoreworCVVLX0FTU0VSVChzdGF0KTsKKwltZW1zZXQoc3RhdCwgfjAsIHNp
emVvZihzdHJ1Y3QgdWtfOXBfc3RhdCkpOworCXN0YXQtPm5hbWUuc2l6ZSA9IDA7CisJc3RhdC0+
dWlkLnNpemUgPSAwOworCXN0YXQtPmdpZC5zaXplID0gMDsKKwlzdGF0LT5tdWlkLnNpemUgPSAw
OworCXN0YXQtPmV4dGVuc2lvbi5zaXplID0gMDsKK30KKworLyoqCisgKiBObyB0YWcsIHVzZWQg
YnkgdGhlIFR2ZXJzaW9uL1J2ZXJzaW9uIHBhaXIgb2YgcmVxdWVzdC9yZXBseSBtZXNzYWdlcy4K
KyAqLworI2RlZmluZSBVS185UF9OT1RBRyAgICAgICAgICAgICAgICAgICAgVUlOVDE2X01BWAor
CisvKioKKyAqIE1heGltdW0gYXZhaWxhYmxlIHRhZyBmb3IgdXNlLgorICogVUtfOVBfTk9UQUcg
KH4wKSBpcyByZXNlcnZlZCBieSB0aGUgOVAgUkZDIGZvciByZXByZXNlbnRpbmcgbm8gdGFnLgor
ICovCisjZGVmaW5lIFVLXzlQX01BWFRBRyAgICAgICAgICAgICAgICAgICAoVUlOVDE2X01BWCAt
IDEpCisKKy8qKgorICogTnVtYmVyIG9mIHBvc3NpYmxlIHRhZ3MsIGluY2x1ZGluZyBOT1RBRy4K
KyAqLworI2RlZmluZSBVS185UF9OVU1UQUdTICAgICAgICAgICAgICAgICAgKCh1aW50MzJfdCko
VUlOVDE2X01BWCkgKyAxKQorCisvKioKKyAqIE5vIGZpZCwgdXNlZCB0byBtYXJrIGEgZmlkIGZp
ZWxkIGFzIHVudXNlZC4KKyAqLworI2RlZmluZSBVS185UF9OT0ZJRCAgICAgICAgICAgICAgICAg
ICAgVUlOVDMyX01BWAorCisvKioKKyAqIE5vIG5fdW5hbWUgaW4gVEFUVEFDSCByZXF1ZXN0cywg
dXNlZCB0byBtYXJrIHRoZSBmaWVsZCBhcyB1bnVzZWQuCisgKi8KKyNkZWZpbmUgVUtfOVBfTk9O
VU5BTUUgICAgICAgICAgICAgICAgIFVJTlQzMl9NQVgKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKworI2VuZGlmIC8qIF9fVUtfOVBfQ09SRV9fICovCi0tIAoyLjExLjAKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:18:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:18:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qiK-0006Rb-4k; Thu, 05 Sep 2019 12:18:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qiI-0006RL-Qq
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:18:10 +0000
X-Inumbo-ID: 300a455c-cfd7-11e9-b299-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 300a455c-cfd7-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:54 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id o184so2733337wme.3
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=XUiDK7+9fiqSVXcGjxSYktxDCdfC3Wg/9KE+j2T6aZE=;
 b=nmmLYKymP2GNrHklxzwTWYtnIWiTopaOlGcR/Qvbzdk8LiPx0h876JKakRtGesfdCH
 96++UdijH8QVB0RM3Z24A68sgIQYhhyKCoUvzkdASoE1kYHwYNhSe1A6/dAT8JWGW79Z
 PowNwx8VJXqOotGIDkCa7gaa86sqY9aWJq9pHsFFsWA6v0gdqlRq1j9c6L5n2APU6uL4
 1IgRbRgLVv9mF6iQJDyeftWX4/W4Dvp/uP1AA+ANLJYiLyxkpsLTDYSvoQ2RFJtSa4Cq
 taPrK++gLi6UQXWuHkQNWIBKPqZAZIFk5sYKZN4AVZtIzah+8DyKRefcPv2daYeW2Uuh
 Yjog==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=XUiDK7+9fiqSVXcGjxSYktxDCdfC3Wg/9KE+j2T6aZE=;
 b=VX7P8V5Z7GJ3Mun2KkoLan58H5Q18nCo+KovgG+8hd2ygvXSaZk50EkEBTUWNFGV+3
 HxOGWrIxTFsNefIcjPHsMZsUgZeTnmjUjzk0Lh6TRVXB6toT6kWNhHp3wKU8NOkE12oo
 a51by75Bj+1vtQXwJ85qSFh7UOJoG8WpQE/ly3EKo/M0DMGaYUvXw9fUrphXwvFeSyv9
 MLEqQ32ufUvlzt4Qa9dMOeOWJsVIczaePNmF3sKps7YGcgwPlMqv+c66n7dDleyxbHrl
 skCERExQCOUTFYTUHJzM88RIvDuX/1fVVRFeUhSZ0EB5qPR2pKtGIJ2UsPX0NI4MM7i9
 Maug==
X-Gm-Message-State: APjAAAVqsRAgdr/SfnY6B0VX5KKEOxtU2fd9qL7ETygAt+oNa9DLr4MQ
 dZoiQ7ArUdgoLyDvtfZLcMceNUpcdGI=
X-Google-Smtp-Source: APXvYqxpZhXm31TVPwpyhMUAeoX81yLqXCsUguRhxsY/S1S8isrNlfOYxYjQS1G0cyU60c/pFCGxTg==
X-Received: by 2002:a1c:a383:: with SMTP id m125mr2778135wme.57.1567685873140; 
 Thu, 05 Sep 2019 05:17:53 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.52
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:52 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:29 +0300
Message-Id: <20190905121433.19834-5-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 4/8] lib/uk9p: Add 9P requests
 abstraction
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgc3RydWN0IHVrXzlwcmVxIHdoaWNoIGFic3RyYWN0cyB0
aGUgbGlmZWN5Y2xlIG9mCmFsbG9jYXRpbmcgbWVtb3J5LCBzZXJpYWxpemluZyBkYXRhLCBzZW5k
aW5nIGl0IG92ZXIgYSB0cmFuc3BvcnQgbGF5ZXIsCnJlY2VpdmluZyB0aGUgcmVzcG9uc2UsIGRl
dGVjdGluZyBlcnJvcnMsIGRlc2VyaWFsaXppbmcgdGhlIHJlY2VpdmVkCm1lc3NhZ2UgYW5kIGZy
ZWVpbmcgdGhlIG1lbW9yeS4KClNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBn
bWFpbC5jb20+Ci0tLQogbGliL3VrOXAvOXByZXEuYyAgICAgICAgICAgIHwgNTY5ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaWIvdWs5cC9NYWtlZmlsZS51
ayAgICAgICAgfCAgIDEgKwogbGliL3VrOXAvZXhwb3J0c3ltcy51ayAgICAgIHwgIDExICsKIGxp
Yi91azlwL2luY2x1ZGUvdWsvOXByZXEuaCB8IDMwMCArKysrKysrKysrKysrKysrKysrKysrKwog
NCBmaWxlcyBjaGFuZ2VkLCA4ODEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp
Yi91azlwLzlwcmVxLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9pbmNsdWRlL3VrLzlw
cmVxLmgKCmRpZmYgLS1naXQgYS9saWIvdWs5cC85cHJlcS5jIGIvbGliL3VrOXAvOXByZXEuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjBmYzRiMWU5ZjEwMAotLS0g
L2Rldi9udWxsCisrKyBiL2xpYi91azlwLzlwcmVxLmMKQEAgLTAsMCArMSw1NjkgQEAKKy8qIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBBdXRob3JzOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAx
OSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0
IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQg
SU4gQU5ZIFdBWS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dWsvY29u
ZmlnLmg+CisjaW5jbHVkZSA8dWsvOXByZXEuaD4KKyNpbmNsdWRlIDx1ay85cF9jb3JlLmg+Cisj
aW5jbHVkZSA8dWsvbGlzdC5oPgorI2luY2x1ZGUgPHVrL3JlZmNvdW50Lmg+CisjaW5jbHVkZSA8
dWsvZXNzZW50aWFscy5oPgorI2luY2x1ZGUgPHVrL2FsbG9jLmg+CisjaWYgQ09ORklHX0xJQlVL
U0NIRUQKKyNpbmNsdWRlIDx1ay9zY2hlZC5oPgorI2luY2x1ZGUgPHVrL3dhaXQuaD4KKyNlbmRp
ZgorCitzdGF0aWMgaW50IF9mY2FsbF9hbGxvYyhzdHJ1Y3QgdWtfYWxsb2MgKmEsIHN0cnVjdCB1
a185cHJlcV9mY2FsbCAqZiwKKwkJCXVpbnQzMl90IHNpemUpCit7CisJVUtfQVNTRVJUKGEpOwor
CVVLX0FTU0VSVChmKTsKKwlVS19BU1NFUlQoc2l6ZSA+IDApOworCisJZi0+YnVmID0gdWtfY2Fs
bG9jKGEsIHNpemUsIHNpemVvZihjaGFyKSk7CisJaWYgKGYtPmJ1ZiA9PSBOVUxMKQorCQlyZXR1
cm4gLUVOT01FTTsKKworCWYtPnNpemUgPSBzaXplOworCWYtPm9mZnNldCA9IDA7CisJZi0+emNf
YnVmID0gTlVMTDsKKwlmLT56Y19zaXplID0gMDsKKwlmLT56Y19vZmZzZXQgPSAwOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9mY2FsbF9mcmVlKHN0cnVjdCB1a19hbGxvYyAqYSwg
c3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmKQoreworCVVLX0FTU0VSVChhKTsKKwlVS19BU1NFUlQo
Zik7CisKKwlpZiAoZi0+YnVmKQorCQl1a19mcmVlKGEsIGYtPmJ1Zik7Cit9CisKK3N0cnVjdCB1
a185cHJlcSAqdWtfOXByZXFfYWxsb2Moc3RydWN0IHVrX2FsbG9jICphLCB1aW50MzJfdCBzaXpl
KQoreworCXN0cnVjdCB1a185cHJlcSAqcmVxOworCWludCByYzsKKworCXJlcSA9IHVrX2NhbGxv
YyhhLCAxLCBzaXplb2YoKnJlcSkpOworCWlmIChyZXEgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisK
KwlyYyA9IF9mY2FsbF9hbGxvYyhhLCAmcmVxLT54bWl0LCBzaXplKTsKKwlpZiAocmMgPCAwKQor
CQlnb3RvIG91dF9mcmVlOworCisJcmMgPSBfZmNhbGxfYWxsb2MoYSwgJnJlcS0+cmVjdiwgTUFY
KHNpemUsIFVLXzlQX1JFUlJPUl9NQVhTSVpFKSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXRf
ZnJlZTsKKworCVVLX0lOSVRfTElTVF9IRUFEKCZyZXEtPl9saXN0KTsKKwlyZXEtPl9hID0gYTsK
Kwl1a19yZWZjb3VudF9pbml0KCZyZXEtPnJlZmNvdW50LCAxKTsKKyNpZiBDT05GSUdfTElCVUtT
Q0hFRAorCXVrX3dhaXRxX2luaXQoJnJlcS0+d3EpOworI2VuZGlmCisKKwkvKgorCSAqIEFzc3Vt
ZSB0aGUgaGVhZGVyIGhhcyBhbHJlYWR5IGJlZW4gd3JpdHRlbi4KKwkgKiBUaGUgaGVhZGVyIGl0
c2VsZiB3aWxsIGJlIHdyaXR0ZW4gb24gdWtfOXByZXFfcmVhZHkoKSwgd2hlbiB0aGUKKwkgKiBh
Y3R1YWwgbWVzc2FnZSBzaXplIGlzIGtub3duLgorCSAqLworCXJlcS0+eG1pdC5vZmZzZXQgPSBV
S185UF9IRUFERVJfU0laRTsKKworCXJldHVybiByZXE7CisKK291dF9mcmVlOgorCV9mY2FsbF9m
cmVlKGEsICZyZXEtPnJlY3YpOworCV9mY2FsbF9mcmVlKGEsICZyZXEtPnhtaXQpOworCXVrX2Zy
ZWUoYSwgcmVxKTsKK291dDoKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX3JlcV9m
cmVlKHN0cnVjdCB1a185cHJlcSAqcmVxKQoreworCV9mY2FsbF9mcmVlKHJlcS0+X2EsICZyZXEt
PnJlY3YpOworCV9mY2FsbF9mcmVlKHJlcS0+X2EsICZyZXEtPnhtaXQpOworCXVrX2ZyZWUocmVx
LT5fYSwgcmVxKTsKK30KKwordm9pZCB1a185cHJlcV9nZXQoc3RydWN0IHVrXzlwcmVxICpyZXEp
Cit7CisJdWtfcmVmY291bnRfYWNxdWlyZSgmcmVxLT5yZWZjb3VudCk7Cit9CisKK2ludCB1a185
cHJlcV9wdXQoc3RydWN0IHVrXzlwcmVxICpyZXEpCit7CisJaW50IGxhc3Q7CisKKwlsYXN0ID0g
dWtfcmVmY291bnRfcmVsZWFzZSgmcmVxLT5yZWZjb3VudCk7CisJaWYgKGxhc3QpCisJCV9yZXFf
ZnJlZShyZXEpOworCisJcmV0dXJuIGxhc3Q7Cit9CisKK3N0YXRpYyBpbnQgX2ZjYWxsX3dyaXRl
KHN0cnVjdCB1a185cHJlcV9mY2FsbCAqZmNhbGwsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJdWludDMy
X3Qgc2l6ZSkKK3sKKwlpZiAoZmNhbGwtPm9mZnNldCArIHNpemUgPiBmY2FsbC0+c2l6ZSkKKwkJ
cmV0dXJuIC1FTk9CVUZTOworCisJbWVtY3B5KChjaGFyICopZmNhbGwtPmJ1ZiArIGZjYWxsLT5v
ZmZzZXQsIGJ1Ziwgc2l6ZSk7CisJZmNhbGwtPm9mZnNldCArPSBzaXplOworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50IF9mY2FsbF9zZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxX2ZjYWxsICpm
LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CisKK3N0YXRpYyBpbnQgX2ZjYWxsX3ZzZXJpYWxpemUo
c3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmY2FsbCwgY29uc3QgY2hhciAqZm10LAorCQkJdmFfbGlz
dCB2bCkKK3sKKwlpbnQgcmMgPSAwOworCisJd2hpbGUgKCpmbXQpIHsKKwkJc3dpdGNoICgqZm10
KSB7CisJCWNhc2UgJ2InOiB7CisJCQl1aW50OF90IHg7CisKKwkJCXggPSB2YV9hcmcodmwsIHVu
c2lnbmVkIGludCk7CisJCQlyYyA9IF9mY2FsbF93cml0ZShmY2FsbCwgJngsIHNpemVvZih4KSk7
CisJCQlpZiAocmMgPCAwKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAn
dyc6IHsKKwkJCXVpbnQxNl90IHg7CisKKwkJCXggPSB2YV9hcmcodmwsIHVuc2lnbmVkIGludCk7
CisJCQlyYyA9IF9mY2FsbF93cml0ZShmY2FsbCwgJngsIHNpemVvZih4KSk7CisJCQlpZiAocmMg
PCAwKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAnZCc6IHsKKwkJCXVp
bnQzMl90IHg7CisKKwkJCXggPSB2YV9hcmcodmwsIHVpbnQzMl90KTsKKwkJCXJjID0gX2ZjYWxs
X3dyaXRlKGZjYWxsLCAmeCwgc2l6ZW9mKHgpKTsKKwkJCWlmIChyYyA8IDApCisJCQkJZ290byBv
dXQ7CisJCQlicmVhazsKKwkJfQorCQljYXNlICdxJzogeworCQkJdWludDY0X3QgeDsKKworCQkJ
eCA9IHZhX2FyZyh2bCwgdWludDY0X3QpOworCQkJcmMgPSBfZmNhbGxfd3JpdGUoZmNhbGwsICZ4
LCBzaXplb2YoeCkpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJCWJyZWFrOwor
CQl9CisJCWNhc2UgJ3MnOiB7CisJCQlzdHJ1Y3QgdWtfOXBfc3RyICpwOworCisJCQlwID0gdmFf
YXJnKHZsLCBzdHJ1Y3QgdWtfOXBfc3RyICopOworCQkJcmMgPSBfZmNhbGxfd3JpdGUoZmNhbGws
ICZwLT5zaXplLCBzaXplb2YocC0+c2l6ZSkpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlnb3RvIG91
dDsKKwkJCXJjID0gX2ZjYWxsX3dyaXRlKGZjYWxsLCBwLT5kYXRhLCBwLT5zaXplKTsKKwkJCWlm
IChyYyA8IDApCisJCQkJZ290byBvdXQ7CisJCQlicmVhazsKKwkJfQorCQljYXNlICdRJzogewor
CQkJc3RydWN0IHVrXzlwX3FpZCAqcDsKKworCQkJcCA9IHZhX2FyZyh2bCwgc3RydWN0IHVrXzlw
X3FpZCAqKTsKKwkJCXJjID0gX2ZjYWxsX3NlcmlhbGl6ZShmY2FsbCwgImJkcSIsIHAtPnR5cGUs
CisJCQkJCXAtPnZlcnNpb24sIHAtPnBhdGgpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlnb3RvIG91
dDsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgJ1MnOiB7CisJCQlzdHJ1Y3QgdWtfOXBfc3RhdCAq
cDsKKworCQkJcCA9IHZhX2FyZyh2bCwgc3RydWN0IHVrXzlwX3N0YXQgKik7CisJCQlyYyA9IF9m
Y2FsbF9zZXJpYWxpemUoZmNhbGwsICJ3d2RRZGRkcXNzc3NzZGRkIiwKKwkJCQkJcC0+c2l6ZSwg
cC0+dHlwZSwgcC0+ZGV2LCAmcC0+cWlkLAorCQkJCQlwLT5tb2RlLCBwLT5hdGltZSwgcC0+bXRp
bWUsIHAtPmxlbmd0aCwKKwkJCQkJJnAtPm5hbWUsICZwLT51aWQsICZwLT5naWQsICZwLT5tdWlk
LAorCQkJCQkmcC0+ZXh0ZW5zaW9uLCBwLT5uX3VpZCwgcC0+bl9naWQsCisJCQkJCXAtPm5fbXVp
ZCk7CisJCQlpZiAocmMgPCAwKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKwkJZGVm
YXVsdDoKKwkJCXJjID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJZm10Kys7CisJ
fQorCitvdXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9mY2FsbF9zZXJpYWxpemUo
c3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9s
aXN0IHZsOworCWludCByYzsKKworCXZhX3N0YXJ0KHZsLCBmbXQpOworCXJjID0gX2ZjYWxsX3Zz
ZXJpYWxpemUoZiwgZm10LCB2bCk7CisJdmFfZW5kKHZsKTsKKworCXJldHVybiByYzsKK30KKwor
aW50IHVrXzlwcmVxX3ZzZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IGNoYXIg
KmZtdCwgdmFfbGlzdCB2bCkKK3sKKwlpbnQgcmM7CisKKwlVS19BU1NFUlQocmVxKTsKKwlVS19B
U1NFUlQoVUtfUkVBRF9PTkNFKHJlcS0+c3RhdGUpID09IFVLXzlQUkVRX0lOSVRJQUxJWkVEKTsK
KwlyYyA9IF9mY2FsbF92c2VyaWFsaXplKCZyZXEtPnhtaXQsIGZtdCwgdmwpOworCisJcmV0dXJu
IHJjOworfQorCitpbnQgdWtfOXByZXFfc2VyaWFsaXplKHN0cnVjdCB1a185cHJlcSAqcmVxLCBj
b25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IHZsOworCWludCByYzsKKworCXZhX3N0
YXJ0KHZsLCBmbXQpOworCXJjID0gdWtfOXByZXFfdnNlcmlhbGl6ZShyZXEsIGZtdCwgdmwpOwor
CXZhX2VuZCh2bCk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX2ZjYWxsX3JlYWQo
c3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmY2FsbCwgdm9pZCAqYnVmLCB1aW50MzJfdCBzaXplKQor
eworCWlmIChmY2FsbC0+b2Zmc2V0ICsgc2l6ZSA+IGZjYWxsLT5zaXplKQorCQlyZXR1cm4gLUVO
T0JVRlM7CisKKwltZW1jcHkoYnVmLCAoY2hhciAqKWZjYWxsLT5idWYgKyBmY2FsbC0+b2Zmc2V0
LCBzaXplKTsKKwlmY2FsbC0+b2Zmc2V0ICs9IHNpemU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp
YyBpbnQgX2ZjYWxsX2Rlc2VyaWFsaXplKHN0cnVjdCB1a185cHJlcV9mY2FsbCAqZiwgY29uc3Qg
Y2hhciAqZm10LCAuLi4pOworCitzdGF0aWMgaW50IF9mY2FsbF92ZGVzZXJpYWxpemUoc3RydWN0
IHVrXzlwcmVxX2ZjYWxsICpmY2FsbCwKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwKKwkJCSAg
ICAgIHZhX2xpc3QgdmwpCit7CisJaW50IHJjID0gMDsKKworCXdoaWxlICgqZm10KSB7CisJCXN3
aXRjaCAoKmZtdCkgeworCQljYXNlICdiJzogeworCQkJdWludDhfdCAqeDsKKworCQkJeCA9IHZh
X2FyZyh2bCwgdWludDhfdCAqKTsKKwkJCXJjID0gX2ZjYWxsX3JlYWQoZmNhbGwsIHgsIHNpemVv
ZigqeCkpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJCWJyZWFrOworCQl9CisJ
CWNhc2UgJ3cnOiB7CisJCQl1aW50MTZfdCAqeDsKKworCQkJeCA9IHZhX2FyZyh2bCwgdWludDE2
X3QgKik7CisJCQlyYyA9IF9mY2FsbF9yZWFkKGZjYWxsLCB4LCBzaXplb2YoKngpKTsKKwkJCWlm
IChyYyA8IDApCisJCQkJZ290byBvdXQ7CisJCQlicmVhazsKKwkJfQorCQljYXNlICdkJzogewor
CQkJdWludDMyX3QgKng7CisKKwkJCXggPSB2YV9hcmcodmwsIHVpbnQzMl90ICopOworCQkJcmMg
PSBfZmNhbGxfcmVhZChmY2FsbCwgeCwgc2l6ZW9mKCp4KSk7CisJCQlpZiAocmMgPCAwKQorCQkJ
CWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAncSc6IHsKKwkJCXVpbnQ2NF90ICp4
OworCisJCQl4ID0gdmFfYXJnKHZsLCB1aW50NjRfdCAqKTsKKwkJCXJjID0gX2ZjYWxsX3JlYWQo
ZmNhbGwsIHgsIHNpemVvZigqeCkpOworCQkJaWYgKHJjIDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJ
CWJyZWFrOworCQl9CisJCWNhc2UgJ3MnOiB7CisJCQlzdHJ1Y3QgdWtfOXBfc3RyICpwOworCisJ
CQlwID0gdmFfYXJnKHZsLCBzdHJ1Y3QgdWtfOXBfc3RyICopOworCQkJcmMgPSBfZmNhbGxfcmVh
ZChmY2FsbCwgJnAtPnNpemUsIHNpemVvZihwLT5zaXplKSk7CisJCQlpZiAocmMgPCAwKQorCQkJ
CWdvdG8gb3V0OworCQkJcC0+ZGF0YSA9IChjaGFyICopZmNhbGwtPmJ1ZiArIGZjYWxsLT5vZmZz
ZXQ7CisJCQlmY2FsbC0+b2Zmc2V0ICs9IHAtPnNpemU7CisJCQlicmVhazsKKwkJfQorCQljYXNl
ICdRJzogeworCQkJc3RydWN0IHVrXzlwX3FpZCAqcDsKKworCQkJcCA9IHZhX2FyZyh2bCwgc3Ry
dWN0IHVrXzlwX3FpZCAqKTsKKwkJCXJjID0gX2ZjYWxsX2Rlc2VyaWFsaXplKGZjYWxsLCAiYmRx
IiwgJnAtPnR5cGUsCisJCQkJCSZwLT52ZXJzaW9uLCAmcC0+cGF0aCk7CisJCQlpZiAocmMgPCAw
KQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSAnUyc6IHsKKwkJCXN0cnVj
dCB1a185cF9zdGF0ICpwOworCisJCQlwID0gdmFfYXJnKHZsLCBzdHJ1Y3QgdWtfOXBfc3RhdCAq
KTsKKwkJCXJjID0gX2ZjYWxsX2Rlc2VyaWFsaXplKGZjYWxsLCAid3dkUWRkZHFzc3Nzc2RkZCIs
CisJCQkJCSZwLT5zaXplLCAmcC0+dHlwZSwgJnAtPmRldiwgJnAtPnFpZCwKKwkJCQkJJnAtPm1v
ZGUsICZwLT5hdGltZSwgJnAtPm10aW1lLAorCQkJCQkmcC0+bGVuZ3RoLCAmcC0+bmFtZSwgJnAt
PnVpZCwgJnAtPmdpZCwKKwkJCQkJJnAtPm11aWQsICZwLT5leHRlbnNpb24sICZwLT5uX3VpZCwK
KwkJCQkJJnAtPm5fZ2lkLCAmcC0+bl9tdWlkKTsKKwkJCWlmIChyYyA8IDApCisJCQkJZ290byBv
dXQ7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0OgorCQkJcmMgPSAtRUlOVkFMOworCQkJZ290
byBvdXQ7CisJCX0KKworCQlmbXQrKzsKKwl9CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0
YXRpYyBpbnQgX2ZjYWxsX2Rlc2VyaWFsaXplKHN0cnVjdCB1a185cHJlcV9mY2FsbCAqZiwgY29u
c3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCB2bDsKKwlpbnQgcmM7CisKKwl2YV9zdGFy
dCh2bCwgZm10KTsKKwlyYyA9IF9mY2FsbF92ZGVzZXJpYWxpemUoZiwgZm10LCB2bCk7CisJdmFf
ZW5kKHZsKTsKKworCXJldHVybiByYzsKK30KKworaW50IHVrXzlwcmVxX3ZkZXNlcmlhbGl6ZShz
dHJ1Y3QgdWtfOXByZXEgKnJlcSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IHZsKQoreworCWlu
dCByYzsKKworCVVLX0FTU0VSVChyZXEpOworCVVLX0FTU0VSVChVS19SRUFEX09OQ0UocmVxLT5z
dGF0ZSkgPT0gVUtfOVBSRVFfUkVDRUlWRUQpOworCXJjID0gX2ZjYWxsX3ZkZXNlcmlhbGl6ZSgm
cmVxLT5yZWN2LCBmbXQsIHZsKTsKKworCXJldHVybiByYzsKK30KKworaW50IHVrXzlwcmVxX2Rl
c2VyaWFsaXplKHN0cnVjdCB1a185cHJlcSAqcmVxLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sK
Kwl2YV9saXN0IHZsOworCWludCByYzsKKworCXZhX3N0YXJ0KHZsLCBmbXQpOworCXJjID0gdWtf
OXByZXFfdmRlc2VyaWFsaXplKHJlcSwgZm10LCB2bCk7CisJdmFfZW5kKHZsKTsKKworCXJldHVy
biByYzsKK30KKworaW50IHVrXzlwcmVxX2NvcHlfdG8oc3RydWN0IHVrXzlwcmVxICpyZXEsIHZv
aWQgKmJ1ZiwgdWludDMyX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gX2ZjYWxsX3JlYWQoJnJlcS0+cmVj
diwgYnVmLCBzaXplKTsKK30KKworaW50IHVrXzlwcmVxX2NvcHlfZnJvbShzdHJ1Y3QgdWtfOXBy
ZXEgKnJlcSwgY29uc3Qgdm9pZCAqYnVmLCB1aW50MzJfdCBzaXplKQoreworCXJldHVybiBfZmNh
bGxfd3JpdGUoJnJlcS0+eG1pdCwgYnVmLCBzaXplKTsKK30KKworaW50IHVrXzlwcmVxX3JlYWR5
KHN0cnVjdCB1a185cHJlcSAqcmVxLCBlbnVtIHVrXzlwcmVxX3pjZGlyIHpjX2RpciwKKwkJdm9p
ZCAqemNfYnVmLCB1aW50MzJfdCB6Y19zaXplLCB1aW50MzJfdCB6Y19vZmZzZXQpCit7CisJaW50
IHJjOworCXVpbnQzMl90IHRvdGFsX3NpemU7CisJdWludDMyX3QgdG90YWxfc2l6ZV93aXRoX3pj
OworCisJVUtfQVNTRVJUKHJlcSk7CisKKwlpZiAoVUtfUkVBRF9PTkNFKHJlcS0+c3RhdGUpICE9
IFVLXzlQUkVRX0lOSVRJQUxJWkVEKSB7CisJCXJjID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQor
CisJLyogU2F2ZSBjdXJyZW50IG9mZnNldCBhcyB0aGUgc2l6ZSBvZiB0aGUgbWVzc2FnZS4gKi8K
Kwl0b3RhbF9zaXplID0gcmVxLT54bWl0Lm9mZnNldDsKKworCXRvdGFsX3NpemVfd2l0aF96YyA9
IHRvdGFsX3NpemU7CisJaWYgKHpjX2RpciA9PSBVS185UFJFUV9aQ0RJUl9XUklURSkKKwkJdG90
YWxfc2l6ZV93aXRoX3pjICs9IHpjX3NpemU7CisKKwkvKiBTZXJpYWxpemUgdGhlIGhlYWRlci4g
Ki8KKwlyZXEtPnhtaXQub2Zmc2V0ID0gMDsKKwlyYyA9IHVrXzlwcmVxX3NlcmlhbGl6ZShyZXEs
ICJkYnciLCB0b3RhbF9zaXplX3dpdGhfemMsIHJlcS0+eG1pdC50eXBlLAorCQkJcmVxLT50YWcp
OworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJLyogUmVzZXQgb2Zmc2V0IGFuZCBzaXpl
IHRvIHNhbmUgdmFsdWVzLiAqLworCXJlcS0+eG1pdC5vZmZzZXQgPSAwOworCXJlcS0+eG1pdC5z
aXplID0gdG90YWxfc2l6ZTsKKworCS8qIFVwZGF0ZSB6ZXJvIGNvcHkgYnVmZmVycy4gKi8KKwlp
ZiAoemNfZGlyID09IFVLXzlQUkVRX1pDRElSX1dSSVRFKSB7CisJCXJlcS0+eG1pdC56Y19idWYg
PSB6Y19idWY7CisJCXJlcS0+eG1pdC56Y19zaXplID0gemNfc2l6ZTsKKwkJLyogWmVyby1jb3B5
IG9mZnNldCBmb3Igd3JpdGVzIG11c3Qgc3RhcnQgYXQgdGhlIGVuZCBvZiBidWYuICovCisJCXJl
cS0+eG1pdC56Y19vZmZzZXQgPSByZXEtPnhtaXQuc2l6ZTsKKwl9IGVsc2UgaWYgKHpjX2RpciA9
PSBVS185UFJFUV9aQ0RJUl9SRUFEKSB7CisJCXJlcS0+cmVjdi56Y19idWYgPSB6Y19idWY7CisJ
CXJlcS0+cmVjdi56Y19zaXplID0gemNfc2l6ZTsKKwkJcmVxLT5yZWN2LnpjX29mZnNldCA9IHpj
X29mZnNldDsKKwkJLyogVGhlIHJlY2VpdmUgYnVmZmVyIG11c3QgZW5kIGJlZm9yZSB0aGUgemMg
YnVmLiAqLworCQlyZXEtPnJlY3Yuc2l6ZSA9IHpjX29mZnNldDsKKwl9CisKKwkvKiBVcGRhdGUg
dGhlIHN0YXRlLiAqLworCVVLX1dSSVRFX09OQ0UocmVxLT5zdGF0ZSwgVUtfOVBSRVFfUkVBRFkp
OworCitvdXQ6CisJcmV0dXJuIHJjOworfQorCitpbnQgdWtfOXByZXFfcmVjZWl2ZV9jYihzdHJ1
Y3QgdWtfOXByZXEgKnJlcSwgdWludDMyX3QgcmVjdl9zaXplKQoreworCXVpbnQzMl90IHNpemU7
CisJdWludDE2X3QgdGFnOworCWludCByYzsKKworCVVLX0FTU0VSVChyZXEpOworCisJLyogQ2hl
Y2sgc3RhdGUgYW5kIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGhlYWRlci4gKi8KKwlpZiAoVUtfUkVB
RF9PTkNFKHJlcS0+c3RhdGUpICE9IFVLXzlQUkVRX1NFTlQpCisJCXJldHVybiAtRUlPOworCWlm
IChyZWN2X3NpemUgPCBVS185UF9IRUFERVJfU0laRSkKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBE
ZXNlcmlhbGl6ZSB0aGUgaGVhZGVyIGludG8gcmVxdWVzdCBmaWVsZHMuICovCisJcmVxLT5yZWN2
Lm9mZnNldCA9IDA7CisJcmVxLT5yZWN2LnNpemUgPSByZWN2X3NpemU7CisJcmMgPSBfZmNhbGxf
ZGVzZXJpYWxpemUoJnJlcS0+cmVjdiwgImRidyIsICZzaXplLAorCQkJJnJlcS0+cmVjdi50eXBl
LCAmdGFnKTsKKworCS8qIENoZWNrIHNhbml0eSBvZiBkZXNlcmlhbGl6ZWQgdmFsdWVzLiAqLwor
CWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwlpZiAoc2l6ZSA+IHJlY3Zfc2l6ZSkKKwkJcmV0
dXJuIC1FSU87CisJaWYgKHJlcS0+dGFnICE9IHRhZykKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBG
aXggdGhlIHJlY2VpdmUgc2l6ZSBmb3IgemVyby1jb3B5IHJlcXVlc3RzLiAqLworCWlmIChyZXEt
PnJlY3YuemNfYnVmICYmIHJlcS0+cmVjdi50eXBlICE9IFVLXzlQX1JFUlJPUikKKwkJcmVxLT5y
ZWN2LnNpemUgPSByZXEtPnJlY3YuemNfb2Zmc2V0OworCWVsc2UKKwkJcmVxLT5yZWN2LnNpemUg
PSBzaXplOworCisJLyogVXBkYXRlIHRoZSBzdGF0ZS4gKi8KKwlVS19XUklURV9PTkNFKHJlcS0+
c3RhdGUsIFVLXzlQUkVRX1JFQ0VJVkVEKTsKKworI2lmIENPTkZJR19MSUJVS1NDSEVECisJLyog
Tm90aWZ5IGFueSB3YWl0aW5nIHRocmVhZHMuICovCisJdWtfd2FpdHFfd2FrZV91cCgmcmVxLT53
cSk7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCitpbnQgdWtfOXByZXFfd2FpdHJlcGx5KHN0
cnVjdCB1a185cHJlcSAqcmVxKQoreworCWludCByYzsKKworI2lmIENPTkZJR19MSUJVS1NDSEVE
CisJdWtfd2FpdHFfd2FpdF9ldmVudCgmcmVxLT53cSwgcmVxLT5zdGF0ZSA9PSBVS185UFJFUV9S
RUNFSVZFRCk7CisjZWxzZQorCXdoaWxlIChVS19SRUFEX09OQ0UocmVxLT5zdGF0ZSkgIT0gVUtf
OVBSRVFfUkVDRUlWRUQpCisJCTsKKyNlbmRpZgorCisJLyogQ2hlY2sgZm9yIDlQIHNlcnZlci1z
aWRlIGVycm9ycy4gKi8KKwlyYyA9IHVrXzlwcmVxX2Vycm9yKHJlcSk7CisKKwlyZXR1cm4gcmM7
Cit9CisKK2ludCB1a185cHJlcV9lcnJvcihzdHJ1Y3QgdWtfOXByZXEgKnJlcSkKK3sKKwl1aW50
MzJfdCBlcnJjb2RlOworCXN0cnVjdCB1a185cF9zdHIgZXJyb3I7CisJaW50IHJjID0gMDsKKwor
CWlmIChVS19SRUFEX09OQ0UocmVxLT5zdGF0ZSkgIT0gVUtfOVBSRVFfUkVDRUlWRUQpCisJCXJl
dHVybiAtRUlPOworCWlmIChyZXEtPnJlY3YudHlwZSAhPSBVS185UF9SRVJST1IpCisJCXJldHVy
biAwOworCisJLyoKKwkgKiBUaGUgcmVxdWVzdCBzaG91bGQgbm90IGhhdmUgaGFkIGFueSBkYXRh
IGRlc2VyaWFsaXplZCBmcm9tIGl0IHByaW9yCisJICogdG8gdGhpcyBjYWxsLgorCSAqLworCVVL
X0JVR09OKHJlcS0+cmVjdi5vZmZzZXQgIT0gVUtfOVBfSEVBREVSX1NJWkUpOworCisJcmMgPSB1
a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJzZCIsICZlcnJvciwgJmVycmNvZGUpOworCWlmIChy
YyA8IDApCisJCXJldHVybiByYzsKKworCXVrX3ByX2RlYnVnKCJSRVJST1IgJS4qcyAlZFxuIiwg
ZXJyb3Iuc2l6ZSwgZXJyb3IuZGF0YSwgZXJyY29kZSk7CisJaWYgKGVycmNvZGUgPT0gMCB8fCBl
cnJjb2RlID49IDUxMikKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gLWVycmNvZGU7Cit9CmRp
ZmYgLS1naXQgYS9saWIvdWs5cC9NYWtlZmlsZS51ayBiL2xpYi91azlwL01ha2VmaWxlLnVrCmlu
ZGV4IGIxMDcxYTBlN2QzYy4uYWVhNzIyYTU4NWI5IDEwMDY0NAotLS0gYS9saWIvdWs5cC9NYWtl
ZmlsZS51aworKysgYi9saWIvdWs5cC9NYWtlZmlsZS51awpAQCAtNCwzICs0LDQgQEAgQ0lOQ0xV
REVTLSQoQ09ORklHX0xJQlVLOVApCQkrPSAtSSQoTElCVUs5UF9CQVNFKS9pbmNsdWRlCiBDWFhJ
TkNMVURFUy0kKENPTkZJR19MSUJVSzlQKQkJKz0gLUkkKExJQlVLOVBfQkFTRSkvaW5jbHVkZQog
CiBMSUJVSzlQX1NSQ1MteSArPSAkKExJQlVLOVBfQkFTRSkvOXBkZXZfdHJhbnMuYworTElCVUs5
UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwcmVxLmMKZGlmZiAtLWdpdCBhL2xpYi91azlw
L2V4cG9ydHN5bXMudWsgYi9saWIvdWs5cC9leHBvcnRzeW1zLnVrCmluZGV4IDQ2ZjQwMDgyNWFm
OC4uNDI2Nzc2NzNjZDM0IDEwMDY0NAotLS0gYS9saWIvdWs5cC9leHBvcnRzeW1zLnVrCisrKyBi
L2xpYi91azlwL2V4cG9ydHN5bXMudWsKQEAgLTIsMyArMiwxNCBAQCB1a185cGRldl90cmFuc19y
ZWdpc3RlcgogdWtfOXBkZXZfdHJhbnNfYnlfbmFtZQogdWtfOXBkZXZfdHJhbnNfZ2V0X2RlZmF1
bHQKIHVrXzlwZGV2X3RyYW5zX3NldF9kZWZhdWx0Cit1a185cHJlcV9nZXQKK3VrXzlwcmVxX3B1
dAordWtfOXByZXFfdnNlcmlhbGl6ZQordWtfOXByZXFfc2VyaWFsaXplCit1a185cHJlcV92ZGVz
ZXJpYWxpemUKK3VrXzlwcmVxX2Rlc2VyaWFsaXplCit1a185cHJlcV9jb3B5X3RvCit1a185cHJl
cV9jb3B5X2Zyb20KK3VrXzlwcmVxX3JlY2VpdmVfY2IKK3VrXzlwcmVxX3dhaXRyZXBseQordWtf
OXByZXFfZXJyb3IKZGlmZiAtLWdpdCBhL2xpYi91azlwL2luY2x1ZGUvdWsvOXByZXEuaCBiL2xp
Yi91azlwL2luY2x1ZGUvdWsvOXByZXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAuLmVlNGQyYWY4NjM1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91azlwL2luY2x1
ZGUvdWsvOXByZXEuaApAQCAtMCwwICsxLDMwMCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0
YkBnbWFpbC5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0
ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisK
KyNpZm5kZWYgX19VS185UFJFUV9fCisjZGVmaW5lIF9fVUtfOVBSRVFfXworCisjaW5jbHVkZSA8
aW50dHlwZXMuaD4KKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlIDx1ay9hbGxvYy5o
PgorI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDx1ay9saXN0Lmg+CisjaW5j
bHVkZSA8dWsvcmVmY291bnQuaD4KKyNpZiBDT05GSUdfTElCVUtTQ0hFRAorI2luY2x1ZGUgPHVr
L3dhaXRfdHlwZXMuaD4KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg
eworI2VuZGlmCisKKy8qCisgKiBUaGUgaGVhZGVyIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcg
ZmllbGRzOiBzaXplICg0IGJ5dGVzKSwgdHlwZSAoMSkgYW5kCisgKiB0YWcgKDIpLgorICovCisj
ZGVmaW5lIFVLXzlQX0hFQURFUl9TSVpFICAgICAgICAgICAgICAgN1UKKworLyoKKyAqIFRoZSBt
YXhpbXVtIGJ1ZmZlciBzaXplIGZvciBhbiBlcnJvciByZXBseSBpcyBnaXZlbiBieSB0aGUgaGVh
ZGVyICg3KSwgdGhlCisgKiBzdHJpbmcgc2l6ZSAoMiksIHRoZSBlcnJvciBzdHJpbmcgKDEyOCkg
YW5kIHRoZSBlcnJvciBjb2RlICg0KTogaW4gdG90YWwsCisgKiAxNDEuCisgKi8KKyNkZWZpbmUg
VUtfOVBfUkVSUk9SX01BWFNJWkUgICAgICAgICAgICAxNDFVCisKKy8qKgorICogQGludGVybmFs
CisgKgorICogRGVzY3JpYmVzIHRoZSA5cCB6ZXJvLWNvcHkgZGlyZWN0aW9uLgorICovCitlbnVt
IHVrXzlwcmVxX3pjZGlyIHsKKwlVS185UFJFUV9aQ0RJUl9OT05FLAorCVVLXzlQUkVRX1pDRElS
X1JFQUQsCisJVUtfOVBSRVFfWkNESVJfV1JJVEUsCit9OworCisvKioKKyAqIEBpbnRlcm5hbAor
ICoKKyAqIERlc2NyaWJlcyBhIDlwIGZjYWxsIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHVrXzlw
cmVxX2ZjYWxsIHsKKwkvKgorCSAqIFRvdGFsIHNpemUgb2YgdGhlIGZjYWxsLiBJbml0aWFsbHks
IHRoaXMgaXMgdGhlIGJ1ZmZlciBzaXplLgorCSAqIEFmdGVyIHJlYWR5IChvbiB4bWl0KSBvciBy
ZXBseSAob24gcmVjdiksIHRoaXMgd2lsbCBiZSB0aGUgc2l6ZSBvZgorCSAqIHRoZSBzZW50L3Jl
Y2VpdmVkIGRhdGEuCisJICovCisJdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
OworCS8qIFR5cGUgb2YgdGhlIGZjYWxsLiBTaG91bGQgYmUgVCogZm9yIHRyYW5zbWl0LCBSKiBm
b3IgcmVjZWl2ZS4gKi8KKwl1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7CisJ
LyogT2Zmc2V0IHdoaWxlIHNlcmlhbGl6aW5nIG9yIGRlc2VyaWFsaXppbmcuICovCisJdWludDMy
X3QgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7CisJLyogQnVmZmVyIHBvaW50ZXIuICov
CisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYnVmOworCisJLyogWmVyby1jb3B5
IGJ1ZmZlciBwb2ludGVyLiAqLworCXZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnpj
X2J1ZjsKKwkvKiBaZXJvLWNvcHkgYnVmZmVyIHNpemUuICovCisJdWludDMyX3QgICAgICAgICAg
ICAgICAgICAgICAgICB6Y19zaXplOworCS8qIFplcm8tY29weSBidWZmZXIgb2Zmc2V0IGluIHRo
ZSA5UCBtZXNzYWdlLiAqLworCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgemNfb2Zm
c2V0OworfTsKKworLyoqCisgKiBEZXNjcmliZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBpbiB3aGlj
aCBhIHJlcXVlc3QgbWF5IGJlLgorICoKKyAqIC0gTk9ORTogUmlnaHQgYWZ0ZXIgYWxsb2NhdGlu
Zy4KKyAqIC0gSU5JVElBTElaRUQ6IFJlcXVlc3QgaXMgcmVhZHkgdG8gcmVjZWl2ZSBzZXJpYWxp
emF0aW9uIGRhdGEuCisgKiAtIFJFQURZOiBSZXF1ZXN0IGlzIHJlYWR5IHRvIGJlIHNlbnQuCisg
KiAtIFJFQ0VJVkVEOiBUcmFuc3BvcnQgbGF5ZXIgaGFzIHJlY2VpdmVkIHRoZSByZXBseSBhbmQg
aW1wb3J0YW50IGRhdGEgc3VjaAorICogICBhcyB0aGUgdGFnLCB0eXBlIGFuZCBzaXplIGhhdmUg
YmVlbiB2YWxpZGF0ZWQuCisgKi8KK2VudW0gdWtfOXByZXFfc3RhdGUgeworCVVLXzlQUkVRX05P
TkUgPSAwLAorCVVLXzlQUkVRX0lOSVRJQUxJWkVELAorCVVLXzlQUkVRX1JFQURZLAorCVVLXzlQ
UkVRX1NFTlQsCisJVUtfOVBSRVFfUkVDRUlWRUQKK307CisKKy8qKgorICogIERlc2NyaWJlcyBh
IDlQIHJlcXVlc3QuCisgKgorICogIFRoaXMgZ2V0cyBhbGxvY2F0ZWQgdmlhIHVrXzlwZGV2X3Jl
cV9jcmVhdGUoKSwgYW5kIGZyZWVkIHdoZW4gaXQgaXMgbm90CisgKiAgcmVmZXJlbmNlZCBhbnlt
b3JlLiBBIGNhbGwgdG8gdWtfOXBkZXZfcmVxX3JlbW92ZSgpIGlzIG1hbmRhdG9yeSB0bworICog
IGNvcnJlY3RseSBmcmVlIHRoaXMgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IG9mIHJlcXVl
c3RzIG1hbmFnZWQKKyAqICBieSB0aGUgOXAgZGV2aWNlLgorICovCitzdHJ1Y3QgdWtfOXByZXEg
eworCS8qIFRyYW5zbWl0IGZjYWxsLiAqLworCXN0cnVjdCB1a185cHJlcV9mY2FsbCAgICAgICAg
ICAgeG1pdDsKKwkvKiBSZWNlaXZlIGZjYWxsLiAqLworCXN0cnVjdCB1a185cHJlcV9mY2FsbCAg
ICAgICAgICAgcmVjdjsKKwkvKiBTdGF0ZSBvZiB0aGUgcmVxdWVzdC4gU2VlIHRoZSBzdGF0ZSBl
bnVtIGZvciBkZXRhaWxzLiAqLworCWVudW0gdWtfOXByZXFfc3RhdGUgICAgICAgICAgICAgc3Rh
dGU7CisJLyogVGFnIGFsbG9jYXRlZCB0byB0aGlzIHJlcXVlc3QuICovCisJdWludDE2X3QgICAg
ICAgICAgICAgICAgICAgICAgICB0YWc7CisJLyogRW50cnkgaW50byB0aGUgbGlzdCBvZiByZXF1
ZXN0cyAoQVBJLWludGVybmFsKS4gKi8KKwlzdHJ1Y3QgdWtfbGlzdF9oZWFkICAgICAgICAgICAg
IF9saXN0OworCS8qIEBpbnRlcm5hbCBBbGxvY2F0b3IgdXNlZCB0byBhbGxvY2F0ZSB0aGlzIHJl
cXVlc3QuICovCisJc3RydWN0IHVrX2FsbG9jICAgICAgICAgICAgICAgICAqX2E7CisJLyogVHJh
Y2tzIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byB0aGlzIHN0cnVjdHVyZS4gKi8KKwlfX2F0
b21pYyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmNvdW50OworI2lmIENPTkZJR19MSUJVS1ND
SEVECisJLyogV2FpdC1xdWV1ZSBmb3Igc3RhdGUgY2hhbmdlcy4gKi8KKwlzdHJ1Y3QgdWtfd2Fp
dHEgICAgICAgICAgICAgICAgIHdxOworI2VuZGlmCit9OworCisvKioKKyAqIEBpbnRlcm5hbAor
ICogQWxsb2NhdGVzIGEgOXAgcmVxdWVzdC4KKyAqIFNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3Rs
eSwgdXNlIHVrXzlwZGV2X3JlcV9jcmVhdGUoKSBpbnN0ZWFkLgorICoKKyAqIEBwYXJhbSBhCisg
KiAgIEFsbG9jYXRvciB0byB1c2UuCisgKiBAcGFyYW0gc2l6ZQorICogICBNaW5pbXVtIHNpemUg
b2YgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGJ1ZmZlcnMuCisgKiBAcmV0dXJuCisgKiAgIC0g
KD09TlVMTCk6IE91dCBvZiBtZW1vcnkuCisgKiAgIC0gKCE9TlVMTCk6IFN1Y2Nlc3NmdWwuCisg
Ki8KK3N0cnVjdCB1a185cHJlcSAqdWtfOXByZXFfYWxsb2Moc3RydWN0IHVrX2FsbG9jICphLCB1
aW50MzJfdCBzaXplKTsKKworLyoqCisgKiBHZXRzIHRoZSA5cCByZXF1ZXN0LCBpbmNyZW1lbnRp
bmcgdGhlIHJlZmVyZW5jZSBjb3VudC4KKyAqCisgKiBAcGFyYW0gcmVxCisgKiAgIFJlZmVyZW5j
ZSB0byB0aGUgOXAgcmVxdWVzdC4KKyAqLwordm9pZCB1a185cHJlcV9nZXQoc3RydWN0IHVrXzlw
cmVxICpyZXEpOworCisvKioKKyAqIFB1dHMgdGhlIDlwIHJlcXVlc3QsIGRlY3JlbWVudGluZyB0
aGUgcmVmZXJlbmNlIGNvdW50LgorICogSWYgdGhpcyB3YXMgdGhlIGxhc3QgbGl2ZSByZWZlcmVu
Y2UsIHRoZSBtZW1vcnkgd2lsbCBiZSBmcmVlZC4KKyAqCisgKiBAcGFyYW0gcmVxCisgKiAgIFJl
ZmVyZW5jZSB0byB0aGUgOXAgcmVxdWVzdC4KKyAqIEByZXR1cm4KKyAqICAgLSAwOiBUaGlzIHdh
cyBub3QgdGhlIGxhc3QgbGl2ZSByZWZlcmVuY2UuCisgKiAgIC0gMTogVGhpcyB3YXMgdGhlIGxh
c3QgbGl2ZSByZWZlcmVuY2UuCisgKi8KK2ludCB1a185cHJlcV9wdXQoc3RydWN0IHVrXzlwcmVx
ICpyZXEpOworCisvKgorICogVGhlIGZvbGxvd2luZyBmYW1pbHkgb2Ygc2VyaWFsaXphdGlvbiBh
bmQgZGVzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucyB3b3JrCisgKiBieSBlbXBsb3lpbmcgYSBwcmlu
dGYtbGlrZSBmb3JtYXR0aW5nIG1lY2hhbmlzbSBmb3IgZGF0YSB0eXBlcyBzdXBwb3J0ZWQgYnkK
KyAqIHRoZSA5cCBwcm90b2NvbDoKKyAqIC0gJ2InOiBieXRlICh1aW50OF90KQorICogLSAndyc6
IHdvcmQgKHVpbnQxNl90KQorICogLSAnZCc6IGRvdWJsZS13b3JkICh1aW50MzJfdCkKKyAqIC0g
J3EnOiBxdWFkLXdvcmQgKHVpbnQ2NF90KQorICogLSAncyc6IHVrXzlwX3N0ciAqCisgKiAtICdT
JzogdWtfOXBfc3RhdCAqCisgKgorICogU2ltaWxhcmx5IHRvIHZwcmludGYoKSwgdGhlIHZzZXJp
YWxpemUoKSBhbmQgdmRlc2VyaWFsaXplKCkgZnVuY3Rpb25zIHRha2UKKyAqIGEgdmFfbGlzdCBp
bnN0ZWFkIG9mIGEgdmFyaWFibGUgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAqCisgKiBQb3NzaWJs
ZSByZXR1cm4gdmFsdWVzOgorICogLSAwOiBPcGVyYXRpb24gc3VjY2Vzc2Z1bC4KKyAqIC0gKC1F
SU5WQUwpOiBJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZXIuCisgKiAtICgtRU5PQlVGUyk6IEVuZCBv
ZiBidWZmZXIgcmVhY2hlZC4KKyAqLworCitpbnQgdWtfOXByZXFfdnNlcmlhbGl6ZShzdHJ1Y3Qg
dWtfOXByZXEgKnJlcSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IHZsKTsKK2ludCB1a185cHJl
cV9zZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsK
K2ludCB1a185cHJlcV92ZGVzZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IGNo
YXIgKmZtdCwgdmFfbGlzdCB2bCk7CitpbnQgdWtfOXByZXFfZGVzZXJpYWxpemUoc3RydWN0IHVr
XzlwcmVxICpyZXEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqCisgKiBDb3BpZXMgcmF3
IGRhdGEgZnJvbSB0aGUgcmVxdWVzdCByZWNlaXZlIGJ1ZmZlciB0byB0aGUgcHJvdmlkZWQgYnVm
ZmVyLgorICoKKyAqIEBwYXJhbSByZXEKKyAqICAgUmVmZXJlbmNlIHRvIHRoZSA5cCByZXF1ZXN0
LgorICogQHBhcmFtIGJ1ZgorICogICBEZXN0aW5hdGlvbiBidWZmZXIuCisgKiBAcGFyYW0gc2l6
ZQorICogICBBbW91bnQgdG8gY29weS4KKyAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZXM6CisgKiAt
IDA6IE9wZXJhdGlvbiBzdWNjZXNzZnVsLgorICogLSAoLUVOT0JVRlMpOiBFbmQgb2YgYnVmZmVy
IHJlYWNoZWQuCisgKi8KK2ludCB1a185cHJlcV9jb3B5X3RvKHN0cnVjdCB1a185cHJlcSAqcmVx
LCB2b2lkICpidWYsIHVpbnQzMl90IHNpemUpOworCisvKioKKyAqIENvcGllcyByYXcgZGF0YSBm
cm9tIHRoZSBwcm92aWRlZCBidWZmZXIgdG8gdGhlIHJlcXVlc3QgdHJhbnNtaXNzaW9uIGJ1ZmZl
ci4KKyAqCisgKiBAcGFyYW0gcmVxCisgKiAgIFJlZmVyZW5jZSB0byB0aGUgOXAgcmVxdWVzdC4K
KyAqIEBwYXJhbSBidWYKKyAqICAgU291cmNlIGJ1ZmZlci4KKyAqIEBwYXJhbSBzaXplCisgKiAg
IEFtb3VudCB0byBjb3B5LgorICogUG9zc2libGUgcmV0dXJuIHZhbHVlczoKKyAqIC0gMDogT3Bl
cmF0aW9uIHN1Y2Nlc3NmdWwuCisgKiAtICgtRU5PQlVGUyk6IEVuZCBvZiBidWZmZXIgcmVhY2hl
ZC4KKyAqLworaW50IHVrXzlwcmVxX2NvcHlfZnJvbShzdHJ1Y3QgdWtfOXByZXEgKnJlcSwgY29u
c3Qgdm9pZCAqYnVmLCB1aW50MzJfdCBzaXplKTsKKworLyoqCisgKiBNYXJrcyB0aGUgZ2l2ZW4g
cmVxdWVzdCBhcyBiZWluZyByZWFkeSwgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIHN0YXRlcworICog
SU5JVElBTElaRUQgYW5kIFJFQURZLgorICoKKyAqIEBwYXJhbSByZXEKKyAqICAgUmVmZXJlbmNl
IHRvIHRoZSA5cCByZXF1ZXN0LgorICogQHBhcmFtIHpjX2RpcgorICogICBaZXJvLWNvcHkgZGly
ZWN0aW9uLgorICogQHBhcmFtIHpjX2J1ZgorICogICBaZXJvLWNvcHkgYnVmZmVyLCBpZiB6Y19k
aXIgaXMgbm90IE5PTkUuCisgKiBAcGFyYW0gemNfc2l6ZQorICogICBaZXJvLWNvcHkgYnVmZmVy
IHNpemUsIGlmIHpjX2RpciBpcyBub3QgTk9ORS4KKyAqIEBwYXJhbSB6Y19vZmZzZXQKKyAqICAg
WmVyby1jb3B5IG9mZnNldCB3aXRoaW4gdGhlIHJlY2VpdmVkIG1lc3NhZ2UsIGlmIHpjX2RpciBp
cyBSRUFELgorICogQHJldHVybgorICogICAtIDA6IFN1Y2Nlc3NmdWwuCisgKiAgIC0gKDwgMCk6
IEludmFsaWQgc3RhdGUgb3IgcmVxdWVzdCBzaXplIHNlcmlhbGl6YXRpb24gZmFpbGVkLgorICov
CitpbnQgdWtfOXByZXFfcmVhZHkoc3RydWN0IHVrXzlwcmVxICpyZXEsIGVudW0gdWtfOXByZXFf
emNkaXIgemNfZGlyLAorCQl2b2lkICp6Y19idWYsIHVpbnQzMl90IHpjX3NpemUsIHVpbnQzMl90
IHpjX29mZnNldCk7CisKKy8qKgorICogRnVuY3Rpb24gY2FsbGVkIGZyb20gdGhlIHRyYW5zcG9y
dCBsYXllciB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiByZWNlaXZlZC4KKyAqIEltcGxlbWVudHMg
dGhlIHRyYW5zaXRpb24gZnJvbSB0aGUgU0VOVCB0byB0aGUgUkVDRUlWRUQgc3RhdGUuCisgKgor
ICogQHBhcmFtIHJlcQorICogICBUaGUgOVAgcmVxdWVzdC4KKyAqIEBwYXJhbSByZWN2X3NpemUK
KyAqICAgU2l6ZSBvZiB0aGUgcGFja2V0IHJlY2VpdmVkIGZyb20gdGhlIHRyYW5zcG9ydCBsYXll
ci4KKyAqIEByZXR1cm4KKyAqICAgLSAoMCk6IFN1Y2Nlc3NmdWxseSByZWNlaXZlZC4KKyAqICAg
LSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQuCisgKi8KK2ludCB1a185cHJlcV9yZWNlaXZlX2Ni
KHN0cnVjdCB1a185cHJlcSAqcmVxLCB1aW50MzJfdCByZWN2X3NpemUpOworCisvKioKKyAqIFdh
aXRzIGZvciB0aGUgcmVwbHkgdG8gYmUgcmVjZWl2ZWQuCisgKgorICogQHBhcmFtIHJlcQorICog
ICBUaGUgOVAgcmVxdWVzdC4KKyAqIEByZXR1cm4KKyAqICAgLSAoMCk6IFN1Y2Nlc3NmdWwuCisg
KiAgIC0gKDwgMCk6IEZhaWxlZC4gUmV0dXJucyB0aGUgZXJyb3IgY29kZSByZWNlaXZlZCBmcm9t
IHRoZSA5UCBzZXJ2ZXIuCisgKi8KK2ludCB1a185cHJlcV93YWl0cmVwbHkoc3RydWN0IHVrXzlw
cmVxICpyZXEpOworCisvKioKKyAqIEV4dHJhY3RzIHRoZSBlcnJvciBmcm9tIHRoZSByZWNlaXZl
ZCByZXBseS4KKyAqCisgKiBAcGFyYW0gcmVxCisgKiAgIFRoZSA5UCByZXF1ZXN0LgorICogQHJl
dHVybgorICogICAtICgwKTogTm8gZXJyb3Igb2NjdXJyZWQuCisgKiAgIC0gKDwgMCk6IEFuIFJl
cnJvciB3YXMgcmVjZWl2ZWQsIHRoZSBlcnJvciBjb2RlIGlzIDlwZnMtc3BlY2lmaWMuCisgKi8K
K2ludCB1a185cHJlcV9lcnJvcihzdHJ1Y3QgdWtfOXByZXEgKnJlcSk7CisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX1VLXzlQUkVRX18gKi8KLS0gCjIuMTEu
MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:18:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:18:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qiP-0006SX-6h; Thu, 05 Sep 2019 12:18:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qiN-0006SP-Pz
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:18:15 +0000
X-Inumbo-ID: 30935e28-cfd7-11e9-978d-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 30935e28-cfd7-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:55 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id k1so2552909wmi.1
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=KovNxvf5FTeJOqULcfVAPkb98/VVPoaj3/OmwuFEFgw=;
 b=DXYyON8xrr6EKE8EbDEzEB0ixqElbb0IYPcgwsWjAiIkWiAG9UQ4z0y9y2OSL3D0Zz
 9vGTy56CrK7RZIa7JKuOKrCDCJ3Mx6oCmpJxN1cNyRhOZvb0qg6VeipBZuSb7DnTmv+M
 oNRl0nvRpr7Fkr84ZkTx1iF/ddbU0E9uB4OqTiqa1uSlrbvaDSSDC5pN/rmP+CwmiDux
 PwT0uA2mz41J6wFIij7W0HviDClx0pOrjePufbxQiws5mJ/QQ/wbsvO4Ac7c/9SUuznP
 p7+KmrfaLZxZD07Xf7GaLmNYHNjpz63afBZDm/MDLs0zGtmq7PgTC3jwCTgKtqu4juhp
 /Xhg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=KovNxvf5FTeJOqULcfVAPkb98/VVPoaj3/OmwuFEFgw=;
 b=d38JMS2sQUYZriEFmHje3ppwVQ0pm0iJTHIKrp6vhwivRrVQr3mlbJXyYDly5DmQ1X
 ZROQGHK9MvY4Z8G+VZj2F7SiQvBS9uMnasjjOEbwQjMr/yaJWKDsEURkn3lmODvUSrQB
 pj34izQLv9x2sgt2/1G6es8EfTjEiQWbcwC6ngX6NrPw1vRlICqrI51tBceHDW7oZ9H/
 MOFE1gRd8hYqmXGujwOQbfLTu8Mkhw83xxaVr1P6tlDm0N2X8yib5KSZliiBKE7UZ9cW
 FIDOtct9IMxgaUgjyIyHY1N1i8r1IeMDg8tT7/x/LFqxe4GXBV00gRIY8lvb0f0KbDJm
 Gi6A==
X-Gm-Message-State: APjAAAUF/xpNbMeAmLdwacG8D2Iy864CmvklzLim8xIWzWOHhsUQ90cU
 DY0FgVfOdkLIYqUwCHJJELnU3YzFqPU=
X-Google-Smtp-Source: APXvYqxIVj6+Awm8aHU9CRT099i4Xs+tQbxxwsIlHIX+ksnjexgLTkC7va9oJCPVN1+IU+fzzKgV4A==
X-Received: by 2002:a1c:cf05:: with SMTP id f5mr958754wmg.131.1567685874245;
 Thu, 05 Sep 2019 05:17:54 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.53
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:53 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:30 +0300
Message-Id: <20190905121433.19834-6-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 5/8] lib/uk9p: Add 9P device
 implementation
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBhZGRzIHRoZSBvcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHN1cHBvcnRlZCBi
eSB0cmFuc3BvcnQKbGF5ZXJzLCB0aGUgQVBJIHRvIGludGVyYWN0IHdpdGggdGhlbSBhbmQgdG8g
bWFuYWdlIHJlcXVlc3RzLgoKU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdt
YWlsLmNvbT4KLS0tCiBsaWIvdWs5cC85cGRldi5jICAgICAgICAgICAgICAgICAgfCAzMzEgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi91azlwLzlwZGV2X3RyYW5z
LmMgICAgICAgICAgICB8ICAgNCArCiBsaWIvdWs5cC9NYWtlZmlsZS51ayAgICAgICAgICAgICAg
fCAgIDEgKwogbGliL3VrOXAvZXhwb3J0c3ltcy51ayAgICAgICAgICAgIHwgIDEwICsrCiBsaWIv
dWs5cC9pbmNsdWRlL3VrLzlwZGV2LmggICAgICAgfCAyMDYgKysrKysrKysrKysrKysrKysrKysr
KysrCiBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X2NvcmUuaCAgfCAxNzEgKysrKysrKysrKysr
KysrKysrKysKIGxpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaCB8ICAgMyArCiA3IGZp
bGVzIGNoYW5nZWQsIDcyNiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3Vr
OXAvOXBkZXYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsvOXBkZXYu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfY29yZS5oCgpk
aWZmIC0tZ2l0IGEvbGliL3VrOXAvOXBkZXYuYyBiL2xpYi91azlwLzlwZGV2LmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5iNzMzMTU3YWE3ZjUKLS0tIC9kZXYvbnVs
bAorKysgYi9saWIvdWs5cC85cGRldi5jCkBAIC0wLDAgKzEsMzMxIEBACisvKiBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgorICogQXV0aG9yczogQ3Jpc3RpYW4g
QmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZl
cnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoK
KyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBX
QVkuCisgKi8KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlIDx1ay9wbGF0L3NwaW5sb2NrLmg+CisjaW5j
bHVkZSA8dWsvYWxsb2MuaD4KKyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+CisjaW5jbHVkZSA8
dWsvZXJycHRyLmg+CisjaW5jbHVkZSA8dWsvYml0bWFwLmg+CisjaW5jbHVkZSA8dWsvcmVmY291
bnQuaD4KKyNpbmNsdWRlIDx1ay93YWl0Lmg+CisjaW5jbHVkZSA8dWsvOXBkZXYuaD4KKyNpbmNs
dWRlIDx1ay85cGRldl90cmFucy5oPgorI2luY2x1ZGUgPHVrLzlwcmVxLmg+CisjaWYgQ09ORklH
X0xJQlVLU0NIRUQKKyNpbmNsdWRlIDx1ay9zY2hlZC5oPgorI2luY2x1ZGUgPHVrL3dhaXQuaD4K
KyNlbmRpZgorCitzdGF0aWMgdm9pZCBfcmVxX21nbXRfaW5pdChzdHJ1Y3QgdWtfOXBkZXZfcmVx
X21nbXQgKnJlcV9tZ210KQoreworCXVrYXJjaF9zcGluX2xvY2tfaW5pdCgmcmVxX21nbXQtPnNw
aW5sb2NrKTsKKwl1a19iaXRtYXBfemVybyhyZXFfbWdtdC0+dGFnX2JtLCBVS185UF9OVU1UQUdT
KTsKKwlVS19JTklUX0xJU1RfSEVBRCgmcmVxX21nbXQtPnJlcV9saXN0KTsKK30KKworc3RhdGlj
IHZvaWQgX3JlcV9tZ210X2FkZF9yZXFfbG9ja2VkKHN0cnVjdCB1a185cGRldl9yZXFfbWdtdCAq
cmVxX21nbXQsCisJCQkJc3RydWN0IHVrXzlwcmVxICpyZXEpCit7CisJdWtfYml0bWFwX3NldChy
ZXFfbWdtdC0+dGFnX2JtLCByZXEtPnRhZywgMSk7CisJdWtfbGlzdF9hZGQoJnJlcS0+X2xpc3Qs
ICZyZXFfbWdtdC0+cmVxX2xpc3QpOworfQorCitzdGF0aWMgdm9pZCBfcmVxX21nbXRfZGVsX3Jl
cV9sb2NrZWQoc3RydWN0IHVrXzlwZGV2X3JlcV9tZ210ICpyZXFfbWdtdCwKKwkJCQlzdHJ1Y3Qg
dWtfOXByZXEgKnJlcSkKK3sKKwl1a19iaXRtYXBfY2xlYXIocmVxX21nbXQtPnRhZ19ibSwgcmVx
LT50YWcsIDEpOworCXVrX2xpc3RfZGVsKCZyZXEtPl9saXN0KTsKK30KKworc3RhdGljIHVpbnQx
Nl90IF9yZXFfbWdtdF9uZXh0X3RhZ19sb2NrZWQoc3RydWN0IHVrXzlwZGV2X3JlcV9tZ210ICpy
ZXFfbWdtdCkKK3sKKwlyZXR1cm4gdWtfZmluZF9uZXh0X3plcm9fYml0KHJlcV9tZ210LT50YWdf
Ym0sIFVLXzlQX05VTVRBR1MsIDApOworfQorCitzdGF0aWMgdm9pZCBfcmVxX21nbXRfY2xlYW51
cChzdHJ1Y3QgdWtfOXBkZXZfcmVxX21nbXQgKnJlcV9tZ210IF9fdW51c2VkKQoreworCXVuc2ln
bmVkIGxvbmcgZmxhZ3M7CisJdWludDE2X3QgdGFnOworCXN0cnVjdCB1a185cHJlcSAqcmVxLCAq
cmVxbjsKKworCXVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmcmVxX21nbXQtPnNwaW5sb2NrLCBm
bGFncyk7CisJdWtfbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcSwgcmVxbiwgJnJlcV9tZ210
LT5yZXFfbGlzdCwgX2xpc3QpIHsKKwkJdGFnID0gcmVxLT50YWc7CisJCV9yZXFfbWdtdF9kZWxf
cmVxX2xvY2tlZChyZXFfbWdtdCwgcmVxKTsKKwkJaWYgKCF1a185cHJlcV9wdXQocmVxKSkgewor
CQkJdWtfcHJfd2FybigiVGFnICVkIHN0aWxsIGhhcyByZWZlcmVuY2VzIG9uIGNsZWFudXAuXG4i
LAorCQkJCXRhZyk7CisJCX0KKwl9CisJdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJl
cV9tZ210LT5zcGlubG9jaywgZmxhZ3MpOworfQorCitzdHJ1Y3QgdWtfOXBkZXYgKnVrXzlwZGV2
X2Nvbm5lY3QoY29uc3Qgc3RydWN0IHVrXzlwZGV2X3RyYW5zICp0cmFucywKKwkJCQljb25zdCBj
aGFyICpkZXZpY2VfaWRlbnRpZmllciwKKwkJCQljb25zdCBjaGFyICptb3VudF9hcmdzLAorCQkJ
CXN0cnVjdCB1a19hbGxvYyAqYSkKK3sKKwlzdHJ1Y3QgdWtfOXBkZXYgKmRldjsKKwlpbnQgcmMg
PSAwOworCisJVUtfQVNTRVJUKHRyYW5zKTsKKwlVS19BU1NFUlQoZGV2aWNlX2lkZW50aWZpZXIp
OworCisJaWYgKGEgPT0gTlVMTCkKKwkJYSA9IHRyYW5zLT5hOworCisJZGV2ID0gdWtfY2FsbG9j
KGEsIDEsIHNpemVvZigqZGV2KSk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXJjID0gLUVOT01F
TTsKKwkJZ290byBvdXQ7CisJfQorCisJZGV2LT5vcHMgPSB0cmFucy0+b3BzOworCWRldi0+YSA9
IGE7CisKKyNpZiBDT05GSUdfTElCVUtTQ0hFRAorCXVrX3dhaXRxX2luaXQoJmRldi0+eG1pdF93
cSk7CisjZW5kaWYKKworCV9yZXFfbWdtdF9pbml0KCZkZXYtPl9yZXFfbWdtdCk7CisKKwlyYyA9
IGRldi0+b3BzLT5jb25uZWN0KGRldiwgZGV2aWNlX2lkZW50aWZpZXIsIG1vdW50X2FyZ3MpOwor
CWlmIChyYyA8IDApCisJCWdvdG8gZnJlZV9kZXY7CisKKwkvKgorCSAqIEJ5IGRlZmF1bHQsIHRo
ZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBhbGxvd2VkCisJ
ICogbWVzc2FnZSBzaXplLiBUaGlzIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlIF9zZXRfbXNpemUo
KSBhbmQKKwkgKiBfZ2V0X21zaXplKCkgZnVuY3Rpb25zLgorCSAqLworCVVLX0FTU0VSVChkZXYt
Pm1heF9tc2l6ZSAhPSAwKTsKKwlkZXYtPm1zaXplID0gZGV2LT5tYXhfbXNpemU7CisJZGV2LT5z
dGF0ZSA9IFVLXzlQREVWX0NPTk5FQ1RFRDsKKworCXJldHVybiBkZXY7CisKK2ZyZWVfZGV2Ogor
CV9yZXFfbWdtdF9jbGVhbnVwKCZkZXYtPl9yZXFfbWdtdCk7CisJdWtfZnJlZShhLCBkZXYpOwor
b3V0OgorCXJldHVybiBFUlIyUFRSKHJjKTsKK30KKworaW50IHVrXzlwZGV2X2Rpc2Nvbm5lY3Qo
c3RydWN0IHVrXzlwZGV2ICpkZXYpCit7CisJaW50IHJjID0gMDsKKworCVVLX0FTU0VSVChkZXYp
OworCVVLX0FTU0VSVChkZXYtPnN0YXRlID09IFVLXzlQREVWX0NPTk5FQ1RFRCk7CisKKwlkZXYt
PnN0YXRlID0gVUtfOVBERVZfRElTQ09OTkVDVElORzsKKworCS8qIENsZWFuIHVwIHRoZSByZXF1
ZXN0cyBiZWZvcmUgY2xvc2luZyB0aGUgY2hhbm5lbC4gKi8KKwlfcmVxX21nbXRfY2xlYW51cCgm
ZGV2LT5fcmVxX21nbXQpOworCisJLyoKKwkgKiBFdmVuIGlmIHRoZSBkaXNjb25uZWN0IGZyb20g
dGhlIHRyYW5zcG9ydCBsYXllciBmYWlscywgdGhlIG1lbW9yeQorCSAqIGFsbG9jYXRlZCBmb3Ig
dGhlIDlwIGRldmljZSBpcyBmcmVlZC4KKwkgKi8KKwlyYyA9IGRldi0+b3BzLT5kaXNjb25uZWN0
KGRldik7CisKKwl1a19mcmVlKGRldi0+YSwgZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKK2ludCB1
a185cGRldl9yZXF1ZXN0KHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXByZXEgKnJl
cSkKK3sKKwlpbnQgcmM7CisKKwlVS19BU1NFUlQoZGV2KTsKKwlVS19BU1NFUlQocmVxKTsKKwor
CWlmIChVS19SRUFEX09OQ0UocmVxLT5zdGF0ZSkgIT0gVUtfOVBSRVFfUkVBRFkpIHsKKwkJcmMg
PSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoZGV2LT5zdGF0ZSAhPSBVS185UERF
Vl9DT05ORUNURUQpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKyNpZiBDT05G
SUdfTElCVUtTQ0hFRAorCXVrX3dhaXRxX3dhaXRfZXZlbnQoJmRldi0+eG1pdF93cSwKKwkJKHJj
ID0gZGV2LT5vcHMtPnJlcXVlc3QoZGV2LCByZXEpKSAhPSAtRU5PU1BDKTsKKyNlbHNlCisJZG8g
eworCQkvKgorCQkgKiBSZXRyeSB0aGUgcmVxdWVzdCB3aGlsZSBpdCBoYXMgbm8gc3BhY2UgYXZh
aWxhYmxlIG9uIHRoZQorCQkgKiB0cmFuc3BvcnQgbGF5ZXIuCisJCSAqLworCQlyYyA9IGRldi0+
b3BzLT5yZXF1ZXN0KGRldiwgcmVxKTsKKwl9IHdoaWxlIChyYyA9PSAtRU5PU1BDKTsKKyNlbmRp
ZgorCitvdXQ6CisJcmV0dXJuIHJjOworfQorCit2b2lkIHVrXzlwZGV2X3htaXRfbm90aWZ5KHN0
cnVjdCB1a185cGRldiAqZGV2KQoreworI2lmIENPTkZJR19MSUJVS1NDSEVECisJdWtfd2FpdHFf
d2FrZV91cCgmZGV2LT54bWl0X3dxKTsKKyNlbmRpZgorfQorCitzdHJ1Y3QgdWtfOXByZXEgKnVr
XzlwZGV2X2NhbGwoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQ4X3QgdHlwZSwKKwkJCXVpbnQz
Ml90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXN0cnVjdCB1a185cHJlcSAqcmVx
OworCXZhX2xpc3Qgdmw7CisJaW50IHJjOworCisJcmVxID0gdWtfOXBkZXZfcmVxX2NyZWF0ZShk
ZXYsIHR5cGUsIHNpemUpOworCWlmIChQVFJJU0VSUihyZXEpKQorCQlyZXR1cm4gcmVxOworCisJ
dmFfc3RhcnQodmwsIGZtdCk7CisJcmMgPSB1a185cHJlcV92c2VyaWFsaXplKHJlcSwgZm10LCB2
bCk7CisJdmFfZW5kKHZsKTsKKworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJcmMgPSB1
a185cHJlcV9yZWFkeShyZXEsIFVLXzlQUkVRX1pDRElSX05PTkUsIE5VTEwsIDAsIDApOworCWlm
IChyYyA8IDApCisJCWdvdG8gb3V0OworCisJcmMgPSB1a185cGRldl9yZXF1ZXN0KGRldiwgcmVx
KTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCXJjID0gdWtfOXByZXFfd2FpdHJlcGx5
KHJlcSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXR1cm4gcmVxOworb3V0Ogor
CXVrXzlwZGV2X3JlcV9yZW1vdmUoZGV2LCByZXEpOworCXJldHVybiBFUlIyUFRSKHJjKTsKK30K
Kworc3RydWN0IHVrXzlwcmVxICp1a185cGRldl9yZXFfY3JlYXRlKHN0cnVjdCB1a185cGRldiAq
ZGV2LCB1aW50OF90IHR5cGUsCisJCQkJdWludDMyX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgdWtfOXBy
ZXEgKnJlcTsKKwlpbnQgcmMgPSAwOworCXVpbnQxNl90IHRhZzsKKwl1bnNpZ25lZCBsb25nIGZs
YWdzOworCisJVUtfQVNTRVJUKGRldik7CisKKwlzaXplID0gTUlOKHNpemUsIGRldi0+bXNpemUp
OworCisJcmVxID0gdWtfOXByZXFfYWxsb2MoZGV2LT5hLCBzaXplKTsKKwlpZiAocmVxID09IE5V
TEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwl1a3BsYXRfc3Bpbl9s
b2NrX2lycXNhdmUoJmRldi0+X3JlcV9tZ210LnNwaW5sb2NrLCBmbGFncyk7CisJaWYgKHR5cGUg
PT0gVUtfOVBfVFZFUlNJT04pCisJCXRhZyA9IFVLXzlQX05PVEFHOworCWVsc2UKKwkJdGFnID0g
X3JlcV9tZ210X25leHRfdGFnX2xvY2tlZCgmZGV2LT5fcmVxX21nbXQpOworCisJcmVxLT50YWcg
PSB0YWc7CisJcmVxLT54bWl0LnR5cGUgPSB0eXBlOworCisJX3JlcV9tZ210X2FkZF9yZXFfbG9j
a2VkKCZkZXYtPl9yZXFfbWdtdCwgcmVxKTsKKwl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9y
ZSgmZGV2LT5fcmVxX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKKworCXJlcS0+c3RhdGUgPSBVS185
UFJFUV9JTklUSUFMSVpFRDsKKworCXJldHVybiByZXE7CisKK291dDoKKwlyZXR1cm4gRVJSMlBU
UihyYyk7Cit9CisKK3N0cnVjdCB1a185cHJlcSAqdWtfOXBkZXZfcmVxX2xvb2t1cChzdHJ1Y3Qg
dWtfOXBkZXYgKmRldiwgdWludDE2X3QgdGFnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJ
c3RydWN0IHVrXzlwcmVxICpyZXE7CisJaW50IHJjID0gLUVJTlZBTDsKKworCXVrcGxhdF9zcGlu
X2xvY2tfaXJxc2F2ZSgmZGV2LT5fcmVxX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKKwl1a19saXN0
X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmRldi0+X3JlcV9tZ210LnJlcV9saXN0LCBfbGlzdCkgewor
CQlpZiAodGFnICE9IHJlcS0+dGFnKQorCQkJY29udGludWU7CisJCXJjID0gMDsKKwkJdWtfOXBy
ZXFfZ2V0KHJlcSk7CisJCWJyZWFrOworCX0KKwl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9y
ZSgmZGV2LT5fcmVxX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChyYyA9PSAwKQorCQly
ZXR1cm4gcmVxOworCisJcmV0dXJuIEVSUjJQVFIocmMpOworfQorCitpbnQgdWtfOXBkZXZfcmVx
X3JlbW92ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwcmVxICpyZXEpCit7CisJ
dW5zaWduZWQgbG9uZyBmbGFnczsKKworCXVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5f
cmVxX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKKwlfcmVxX21nbXRfZGVsX3JlcV9sb2NrZWQoJmRl
di0+X3JlcV9tZ210LCByZXEpOworCXVrcGxhdF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYt
Pl9yZXFfbWdtdC5zcGlubG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHVrXzlwcmVxX3B1dChyZXEp
OworfQorCitib29sIHVrXzlwZGV2X3NldF9tc2l6ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWlu
dDMyX3QgbXNpemUpCit7CisJaWYgKG1zaXplID4gZGV2LT5tYXhfbXNpemUpCisJCXJldHVybiBm
YWxzZTsKKworCWRldi0+bXNpemUgPSBtc2l6ZTsKKworCXJldHVybiB0cnVlOworfQorCit1aW50
MzJfdCB1a185cGRldl9nZXRfbXNpemUoc3RydWN0IHVrXzlwZGV2ICpkZXYpCit7CisJcmV0dXJu
IGRldi0+bXNpemU7Cit9CmRpZmYgLS1naXQgYS9saWIvdWs5cC85cGRldl90cmFucy5jIGIvbGli
L3VrOXAvOXBkZXZfdHJhbnMuYwppbmRleCAwODFkYWM4NWRmMzMuLjUxYzRmNzhiNTljZCAxMDA2
NDQKLS0tIGEvbGliL3VrOXAvOXBkZXZfdHJhbnMuYworKysgYi9saWIvdWs5cC85cGRldl90cmFu
cy5jCkBAIC00Nyw2ICs0NywxMCBAQCBpbnQgdWtfOXBkZXZfdHJhbnNfcmVnaXN0ZXIoc3RydWN0
IHVrXzlwZGV2X3RyYW5zICp0cmFucykKIHsKIAlVS19BU1NFUlQodHJhbnMpOwogCVVLX0FTU0VS
VCh0cmFucy0+bmFtZSk7CisJVUtfQVNTRVJUKHRyYW5zLT5vcHMpOworCVVLX0FTU0VSVCh0cmFu
cy0+b3BzLT5jb25uZWN0KTsKKwlVS19BU1NFUlQodHJhbnMtPm9wcy0+ZGlzY29ubmVjdCk7CisJ
VUtfQVNTRVJUKHRyYW5zLT5vcHMtPnJlcXVlc3QpOwogCVVLX0FTU0VSVCh0cmFucy0+YSk7CiAK
IAl1a19saXN0X2FkZF90YWlsKCZ0cmFucy0+X2xpc3QsICZ1a185cGRldl90cmFuc19saXN0KTsK
ZGlmZiAtLWdpdCBhL2xpYi91azlwL01ha2VmaWxlLnVrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsK
aW5kZXggYWVhNzIyYTU4NWI5Li4zNGNjOTg3YTJmOWMgMTAwNjQ0Ci0tLSBhL2xpYi91azlwL01h
a2VmaWxlLnVrCisrKyBiL2xpYi91azlwL01ha2VmaWxlLnVrCkBAIC01LDMgKzUsNCBAQCBDWFhJ
TkNMVURFUy0kKENPTkZJR19MSUJVSzlQKQkJKz0gLUkkKExJQlVLOVBfQkFTRSkvaW5jbHVkZQog
CiBMSUJVSzlQX1NSQ1MteSArPSAkKExJQlVLOVBfQkFTRSkvOXBkZXZfdHJhbnMuYwogTElCVUs5
UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwcmVxLmMKK0xJQlVLOVBfU1JDUy15ICs9ICQo
TElCVUs5UF9CQVNFKS85cGRldi5jCmRpZmYgLS1naXQgYS9saWIvdWs5cC9leHBvcnRzeW1zLnVr
IGIvbGliL3VrOXAvZXhwb3J0c3ltcy51awppbmRleCA0MjY3NzY3M2NkMzQuLjA0NTZiOTA5NGQ4
NyAxMDA2NDQKLS0tIGEvbGliL3VrOXAvZXhwb3J0c3ltcy51aworKysgYi9saWIvdWs5cC9leHBv
cnRzeW1zLnVrCkBAIC0xMywzICsxMywxMyBAQCB1a185cHJlcV9jb3B5X2Zyb20KIHVrXzlwcmVx
X3JlY2VpdmVfY2IKIHVrXzlwcmVxX3dhaXRyZXBseQogdWtfOXByZXFfZXJyb3IKK3VrXzlwZGV2
X2Nvbm5lY3QKK3VrXzlwZGV2X2Rpc2Nvbm5lY3QKK3VrXzlwZGV2X3JlcXVlc3QKK3VrXzlwZGV2
X3htaXRfbm90aWZ5Cit1a185cGRldl9jYWxsCit1a185cGRldl9yZXFfY3JlYXRlCit1a185cGRl
dl9yZXFfbG9va3VwCit1a185cGRldl9yZXFfcmVtb3ZlCit1a185cGRldl9zZXRfbXNpemUKK3Vr
XzlwZGV2X2dldF9tc2l6ZQpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5o
IGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMC4uYWVkNzIzZGNlZTdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrOXAv
aW5jbHVkZS91ay85cGRldi5oCkBAIC0wLDAgKzEsMjA2IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgorICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8
Y3Jpc3RiQGdtYWlsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkg
UG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRI
SVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisg
Ki8KKworI2lmbmRlZiBfX1VLXzlQREVWX18KKyNkZWZpbmUgX19VS185UERFVl9fCisKKyNpbmNs
dWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDx1ay9jb25m
aWcuaD4KKyNpbmNsdWRlIDx1ay9hbGxvYy5oPgorI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgorI2lu
Y2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDx1ay85cGRldl9jb3JlLmg+CisjaW5j
bHVkZSA8dWsvcGxhdC9pcnEuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsK
KyNlbmRpZgorCitzdHJ1Y3QgdWtfOXBkZXZfdHJhbnM7CisKKy8qKgorICogQ29ubmVjdCB0byBh
biB1bmRlcmx5aW5nIGRldmljZSwgb2J0YWluaW5nIGEgOXBkZXYgaGFuZGxlIHRvIHRoZSBjb25u
ZWN0aW9uLgorICoKKyAqIEBwYXJhbSB0cmFucworICogICBUaGUgdW5kZXJseWluZyB0cmFuc3Bv
cnQuCisgKiBAcGFyYW0gZGV2aWNlX2lkZW50aWZpZXIKKyAqICAgVGhlIGlkZW50aWZpZXIgb2Yg
dGhlIGRldmljZSAoZm9yIHZpcnRpbyBhbmQgeGVuLCB0aGUgbW91bnQgdGFnKS4KKyAqIEBwYXJh
bSBtb3VudF9hcmdzCisgKiAgIEFyZ3VtZW50cyBwYXNzZWQgZG93biBmcm9tIHRoZSBtb3VudCgp
IGNhbGwuCisgKiBAcGFyYW0gYQorICogICAoT3B0aW9uYWwpIEFsbG9jYXRvciB1c2VkIGZvciBh
bnkgYWxsb2NhdGlvbnMgZG9uZSBieSB0aGlzIDlwZGV2LgorICogICBJZiBOVUxMLCB0aGUgdHJh
bnNwb3J0LXNwZWNpZmljIGFsbG9jYXRvciB3aWxsIGJlIHVzZWQuCisgKiBAcmV0dXJuCisgKiAg
IC0gQ29ubmVjdGlvbiBoYW5kbGUsIGlmIHN1Y2Nlc3NmdWwuCisgKiAgIC0gRXJyb3IgcG9pbnRl
ciwgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdWtfOXBkZXYgKnVrXzlwZGV2X2Nvbm5lY3QoY29u
c3Qgc3RydWN0IHVrXzlwZGV2X3RyYW5zICp0cmFucywKKwkJCQljb25zdCBjaGFyICpkZXZpY2Vf
aWRlbnRpZmllciwKKwkJCQljb25zdCBjaGFyICptb3VudF9hcmdzLAorCQkJCXN0cnVjdCB1a19h
bGxvYyAqYSk7CisKKy8qKgorICogRGlzY29ubmVjdCBmcm9tIHRoZSB1bmRlcmx5aW5nIGRldmlj
ZS4KKyAqCisgKiBJbXBvcnRhbnQ6IEV2ZW4gaW4gY2FzZSBvZiBmYWlsdXJlLCB0aGUgZGV2aWNl
IGlzIGNsb3NlZCBhbmQgc2hvdWxkIG5vdCBiZQorICogdXNlZCBhZnRlciBjYWxsaW5nIHVrXzlw
ZGV2X2Rpc2Nvbm5lY3QoKS4KKyAqCisgKiBAcGFyYW0gZGV2CisgKiAgIFRoZSBVbmlrcmFmdCA5
UCBEZXZpY2UuCisgKiBAcmV0dXJuCisgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgorICogICAtICg8
IDApOiBGYWlsdXJlIHRvIGRpc2Nvbm5lY3QuCisgKi8KK2ludCB1a185cGRldl9kaXNjb25uZWN0
KHN0cnVjdCB1a185cGRldiAqZGV2KTsKKworLyoqCisgKiBTZW5kIGEgOVAgcmVxdWVzdCB0byB0
aGUgZ2l2ZW4gOVAgZGV2aWNlLgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0
IDlQIERldmljZS4KKyAqIEBwYXJhbSByZXEKKyAqICAgVGhlIDlQIHJlcXVlc3QuCisgKiBAcmV0
dXJuCisgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgorICogICAtICg8IDApOiBGYWlsZWQuCisgKi8K
K2ludCB1a185cGRldl9yZXF1ZXN0KHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBy
ZXEgKnJlcSk7CisKKy8qKgorICogTm90aWZ5IHRoZSA5UCBkZXZpY2UgdGhhdCB0aGUgZGV2aWNl
J3MgdHJhbnNtaXQgcXVldWUgaXMgbm90IGZ1bGwgYW5kCisgKiBpdCBtYXkgYXR0ZW1wdCB0byBz
ZW5kIHJlcXVlc3RzIGFnYWluLgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0
IDlQIERldmljZS4KKyAqLwordm9pZCB1a185cGRldl94bWl0X25vdGlmeShzdHJ1Y3QgdWtfOXBk
ZXYgKmRldik7CisKKy8qKgorICogQ3JlYXRlcyBhbmQgc2VuZHMgOVAgcmVxdWVzdCB0byB0aGUg
Z2l2ZW4gOVAgZGV2aWNlLCBzZXJpYWxpemluZyBpdCB3aXRoCisgKiB0aGUgZ2l2ZW4gYXJndW1l
bnRzLiBUaGlzIGZ1bmN0aW9uIGFjdHMgYXMgYSBzaG9ydGhhbmQgZm9yIHRoZSBleHBsaWNpdAor
ICogY2FsbHMgdG8gcmVxX2NyZWF0ZSgpLCBzZXJpYWxpemUoKSwgcmVhZHkoKSwgcmVxdWVzdCgp
LCB3YWl0cmVwbHkoKS4KKyAqCisgKiBAcGFyYW0gZGV2CisgKiAgIFRoZSBVbmlrcmFmdCA5UCBE
ZXZpY2UuCisgKiBAcGFyYW0gdHlwZQorICogICBUcmFuc21pdCB0eXBlIG9mIHRoZSByZXF1ZXN0
LCBlLmcuIFR2ZXJzaW9uLCBUcmVhZCwgYW5kIHNvIG9uLgorICogQHBhcmFtIHNpemUKKyAqICAg
VGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHJlY2VpdmUgYW5kIHNlbmQgYnVmZmVycy4KKyAqIEBw
YXJhbSBmbXQKKyAqICAgVGhlIGZvcm1hdCBvZiB0aGUgZGF0YSB0byBiZSBzZXJpYWxpemVkLCBp
biB0aGUgd2F5IHVrXzlwcmVxX3NlcmlhbGl6ZSgpCisgKiAgIGV4cGVjdHMgaXQuCisgKiBAcGFy
YW0gLi4uCisgKiAgIFRoZSBhcmd1bWVudHMgdG8gYmUgc2VyaWFsaXplZC4KKyAqIEByZXR1cm4K
KyAqICAgLSAoIVBUUklTRVJSKTogVGhlIDlwIHJlcXVlc3QgaW4gdGhlIFVLXzlQUkVRX1JFQ0VJ
VkVEIHN0YXRlLgorICogICAtIFBUUklTRVJSOiBUaGUgZXJyb3IgY29kZSB3aXRoIHdoaWNoIGFu
eSBvZiB0aGUgc3RlcHMgZmFpbGVkLgorICovCitzdHJ1Y3QgdWtfOXByZXEgKnVrXzlwZGV2X2Nh
bGwoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQ4X3QgdHlwZSwKKwkJCXVpbnQzMl90IHNpemUs
IGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyoqCisgKiBDcmVhdGUgYSBuZXcgcmVxdWVzdCwg
YXV0b21hdGljYWxseSBhbGxvY2F0aW5nIGl0cyB0YWcsIGJhc2VkIG9uIGl0cyB0eXBlLgorICoK
KyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KKyAqIEBwYXJhbSB0
eXBlCisgKiAgIFRyYW5zbWl0IHR5cGUgb2YgdGhlIHJlcXVlc3QsIGUuZy4gVHZlcnNpb24sIFRy
ZWFkLCBhbmQgc28gb24uCisgKiBAcGFyYW0gc2l6ZQorICogICBUaGUgbWF4aW11bSBzaXplIGZv
ciB0aGUgcmVjZWl2ZSBhbmQgc2VuZCBidWZmZXJzLgorICogQHJldHVybgorICogICBJZiBub3Qg
YW4gZXJyb3IgcG9pbnRlciwgdGhlIGNyZWF0ZWQgcmVxdWVzdC4KKyAqICAgT3RoZXJ3aXNlLCB0
aGUgZXJyb3IgaW4gY3JlYXRpbmcgdGhlIHJlcXVlc3Q6CisgKiAgIC0gRU5PTUVNOiBObyBtZW1v
cnkgZm9yIHRoZSByZXF1ZXN0IG9yIG5vIGF2YWlsYWJsZSB0YWdzLgorICovCitzdHJ1Y3QgdWtf
OXByZXEgKnVrXzlwZGV2X3JlcV9jcmVhdGUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQ4X3Qg
dHlwZSwKKwkJCQl1aW50MzJfdCBzaXplKTsKKworLyoqCisgKiBMb29rcyB1cCBhIHJlcXVlc3Qg
YmFzZWQgb24gdGhlIGdpdmVuIHRhZy4gVGhpcyBpcyBnZW5lcmFsbHkgdXNlZCBieQorICogdHJh
bnNwb3J0IGxheWVycyBvbiByZWNlaXZpbmcgYSA5UCBtZXNzYWdlLgorICoKKyAqIEBwYXJhbSBk
ZXYKKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KKyAqIEBwYXJhbSB0YWcKKyAqICAgVGhl
IHRhZyB0byBsb29rIHVwLgorICogQHJldHVybgorICogICAtIE5VTEw6IE5vIHJlcXVlc3Qgd2l0
aCB0aGUgZ2l2ZW4gdGFnIHdhcyBmb3VuZC4KKyAqICAgLSAoIT1OVUxMKTogVGhlIHJlcXVlc3Qu
CisgKi8KK3N0cnVjdCB1a185cHJlcSAqdWtfOXBkZXZfcmVxX2xvb2t1cChzdHJ1Y3QgdWtfOXBk
ZXYgKmRldiwgdWludDE2X3QgdGFnKTsKKworLyoqCisgKiBSZW1vdmUgYSByZXF1ZXN0IGZyb20g
dGhlIGdpdmVuIDlwIGRldmljZS4gSWYgdGhlIHJlcXVlc3QgaXMgaW4tZmxpZ2h0LAorICogaXQg
d2lsbCBiZSBmcmVlZCB3aGVuIGFsbCB0aGUgcmVmZXJlbmNlcyB0byBpdCBhcmUgZ29uZS4KKyAq
CisgKiBAcGFyYW0gZGV2CisgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCisgKiBAcGFyYW0g
cmVxCisgKiAgIFRoZSByZXF1ZXN0IHRvIGJlIHJlbW92ZWQuCisgKiBAcmV0dXJuCisgKiAgIC0g
MDogVGhlcmUgYXJlIG1vcmUgYWN0aXZlIHJlZmVyZW5jZXMuCisgKiAgIC0gMTogVGhpcyB3YXMg
dGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0LgorICovCitpbnQgdWtfOXBkZXZfcmVx
X3JlbW92ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwcmVxICpyZXEpOworCisv
KioKKyAqIFNldHMgdGhlIG1heGltdW0gYWxsb3dlZCBtZXNzYWdlIHNpemUuCisgKgorICogQHBh
cmFtIGRldgorICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgorICogQHBhcmFtIG1zaXplCisg
KiAgIEFsbG93ZWQgbWF4aW11bSBtZXNzYWdlIHNpemUuCisgKiBAcmV0dXJuCisgKiAgIC0gdHJ1
ZTogU2V0dGluZyB0aGUgbXNpemUgc3VjY2VlZGVkLgorICogICAtIGZhbHNlOiBTZXR0aW5nIHRo
ZSBtc2l6ZSBmYWlsZWQsIGFzIHRoZSBnaXZlbiBtc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlCisg
KiAgICAgbWF4aW11bSBhbGxvd2VkIG1lc3NhZ2Ugc2l6ZS4KKyAqLworYm9vbCB1a185cGRldl9z
ZXRfbXNpemUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQzMl90IG1zaXplKTsKKworLyoqCisg
KiBHZXRzIHRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZS4KKyAqCisgKiBAcGFyYW0gZGV2CisgKiAg
IFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCisgKiBAcmV0dXJuCisgKiAgIE1heGltdW0gbWVzc2Fn
ZSBzaXplLgorICovCit1aW50MzJfdCB1a185cGRldl9nZXRfbXNpemUoc3RydWN0IHVrXzlwZGV2
ICpkZXYpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19V
S185UERFVl9fICovCmRpZmYgLS1naXQgYS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X2NvcmUu
aCBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMC4uOGM1N2Q4NjgyZDBlCi0tLSAvZGV2L251bGwKKysrIGIvbGli
L3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBBdXRob3JzOiBDcmlz
dGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxOSwg
VW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhv
bGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4g
QU5ZIFdBWS4KKyAqLworCisjaWZuZGVmIF9fVUtfOVBERVZfQ09SRV9fCisjZGVmaW5lIF9fVUtf
OVBERVZfQ09SRV9fCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5o
PgorI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVrL2FyY2gvc3BpbmxvY2suaD4K
KyNpbmNsdWRlIDx1ay9iaXRtYXAuaD4KKyNpbmNsdWRlIDx1ay9saXN0Lmg+CisjaW5jbHVkZSA8
dWsvOXBfY29yZS5oPgorI2lmIENPTkZJR19MSUJVS1NDSEVECisjaW5jbHVkZSA8dWsvd2FpdF90
eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5k
aWYKKworc3RydWN0IHVrXzlwZGV2Oworc3RydWN0IHVrXzlwcmVxOworCisvKioKKyAqIEZ1bmN0
aW9uIHR5cGUgdXNlZCBmb3IgY29ubmVjdGluZyB0byBhIGRldmljZSBvbiBhIGNlcnRhaW4gdHJh
bnNwb3J0LgorICogVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHNvIHNldCB0aGUgbXNpemUg
ZmllbGQgaW4gdGhlIDlQIGRldmljZQorICogc3RydWN0IHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQg
bWVzc2FnZSBzaXplLgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERl
dmljZS4KKyAqIEBwYXJhbSBkZXZpY2VfaWRlbnRpZmllcgorICogICBUaGUgaWRlbnRpZmllciBv
ZiB0aGUgdW5kZXJseWluZyBkZXZpY2UgKG1vdW50X3RhZyBmb3IgdmlydGlvLCBldGMuKQorICog
QHBhcmFtIG1vdW50X2FyZ3MKKyAqICAgQXJndW1lbnRzIHJlY2VpdmVkIGJ5IHRoZSBtb3VudCgp
IGNhbGwsIGZvciB0cmFuc3BvcnQtc3BlY2lmaWMgb3B0aW9ucy4KKyAqIEByZXR1cm4KKyAqICAg
LSAoLUVCVVNZKTogRGV2aWNlIGlzIGFscmVhZHkgaW4tdXNlLgorICogICAtICgtRU5PRU5UKTog
RGV2aWNlIGRvZXMgbm90IGV4aXN0LgorICogICAtICgwKTogU3VjY2Vzc2Z1bC4KKyAqICAgLSAo
PCAwKTogRmFpbGVkIHdpdGggYSB0cmFuc3BvcnQgbGF5ZXIgZGVwZW5kZW50IGVycm9yLgorICov
Cit0eXBlZGVmIGludCAoKnVrXzlwZGV2X2Nvbm5lY3RfdCkoc3RydWN0IHVrXzlwZGV2ICpkZXYs
CisJCQkJY29uc3QgY2hhciAqZGV2aWNlX2lkZW50aWZpZXIsCisJCQkJY29uc3QgY2hhciAqbW91
bnRfYXJncyk7CisKKy8qKgorICogRnVuY3Rpb24gdHlwZSB1c2VkIGZvciBkaXNjb25uZWN0aW5n
IGZyb20gdGhlIGRldmljZS4KKyAqCisgKiBAcGFyYW0gZGV2CisgKiAgIFRoZSBVbmlrcmFmdCA5
UCBEZXZpY2UuCisgKiBAcmV0dXJuCisgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgorICogICAtICg8
IDApOiBGYWlsZWQgd2l0aCBhIHRyYW5zcG9ydCBsYXllciBkZXBlbmRlbnQgZXJyb3IuCisgKi8K
K3R5cGVkZWYgaW50ICgqdWtfOXBkZXZfZGlzY29ubmVjdF90KShzdHJ1Y3QgdWtfOXBkZXYgKmRl
dik7CisKKy8qKgorICogRnVuY3Rpb24gdHlwZSB1c2VkIGZvciBzZW5kaW5nIGEgcmVxdWVzdCB0
byB0aGUgOVAgZGV2aWNlLgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0IDlQ
IGRldmljZS4KKyAqIEBwYXJhbSByZXEKKyAqICAgUmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IHRv
IGJlIHNlbnQuCisgKiBAcmV0dXJuCisgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgorICogICAtICg8
IDApOiBGYWlsZWQuIElmIC1FTk9TUEMsIHRoZW4gdGhlIHRyYW5zcG9ydCBsYXllciBkb2VzIG5v
dCBoYXZlIGVub3VnaAorICogICBzcGFjZSB0byBzZW5kIHRoaXMgcmVxdWVzdCBhbmQgcmV0cmll
cyBhcmUgcmVxdWlyZWQuCisgKi8KK3R5cGVkZWYgaW50ICgqdWtfOXBkZXZfcmVxdWVzdF90KShz
dHJ1Y3QgdWtfOXBkZXYgKmRldiwKKwkJCQlzdHJ1Y3QgdWtfOXByZXEgKnJlcSk7CisKKy8qKgor
ICogQSBzdHJ1Y3R1cmUgdXNlZCB0byBzdG9yZSB0aGUgb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkg
YSBjZXJ0YWluIHRyYW5zcG9ydC4KKyAqLworc3RydWN0IHVrXzlwZGV2X3RyYW5zX29wcyB7CisJ
dWtfOXBkZXZfY29ubmVjdF90ICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Q7CisJdWtfOXBk
ZXZfZGlzY29ubmVjdF90ICAgICAgICAgICAgICAgICAgIGRpc2Nvbm5lY3Q7CisJdWtfOXBkZXZf
cmVxdWVzdF90ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q7Cit9OworCisvKioKKyAqIEBp
bnRlcm5hbAorICogQSBzdHJ1Y3R1cmUgdXNlZCBmb3IgOXAgcmVxdWVzdHMnIG1hbmFnZW1lbnQu
CisgKi8KK3N0cnVjdCB1a185cGRldl9yZXFfbWdtdCB7CisJLyogU3BpbmxvY2sgcHJvdGVjdGlu
ZyB0aGlzIGRhdGEuICovCisJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgICAgICBzcGlubG9j
azsKKwkvKiBCaXRtYXAgb2YgYXZhaWxhYmxlIHRhZ3MuICovCisJdW5zaWduZWQgbG9uZyAgICAg
ICAgICAgICAgICAgICB0YWdfYm1bVUtfQklUU19UT19MT05HUyhVS185UF9OVU1UQUdTKV07CisJ
LyogTGlzdCBvZiByZXF1ZXN0cyBhbGxvY2F0ZWQgYW5kIG5vdCB5ZXQgcmVtb3ZlZC4gKi8KKwlz
dHJ1Y3QgdWtfbGlzdF9oZWFkICAgICAgICAgICAgIHJlcV9saXN0OworfTsKKworLyoqCisgKiBA
aW50ZXJuYWwKKyAqIDlQREVWIHRyYW5zcG9ydCBzdGF0ZQorICoKKyAqIC0gQ09OTkVDVEVEOiBE
ZWZhdWx0IHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGFuZCBkdXJpbmcgbm9ybWFsIG9wZXJh
dGlvbi4KKyAqIC0gRElTQ09OTkVDVElORzogQWZ0ZXIgYSB1a185cGRldl9kaXNjb25uZWN0KCkg
Y2FsbC4KKyAqICAgTm8gcmVxdWVzdHMgYXJlIGFsbG93ZWQgYW55bW9yZS4gV2hlbiBhbGwgbGl2
ZSByZXNvdXJjZXMgaGF2ZSBiZWVuCisgKiAgIGRlc3Ryb3llZCwgdGhlIDlwZGV2IHdpbGwgZnJl
ZSBpdHNlbGYuCisgKi8KK2VudW0gdWtfOXBkZXZfdHJhbnNfc3RhdGUgeworCVVLXzlQREVWX0NP
Tk5FQ1RFRCwKKwlVS185UERFVl9ESVNDT05ORUNUSU5HCit9OworCisvKioKKyAqIDlQREVWCisg
KiBBIHN0cnVjdHVyZSB1c2VkIHRvIGludGVyYWN0IHdpdGggYSA5UCBkZXZpY2UuCisgKi8KK3N0
cnVjdCB1a185cGRldiB7CisJLyogVW5kZXJseWluZyB0cmFuc3BvcnQgb3BlcmF0aW9ucy4gKi8K
Kwljb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNfb3BzICpvcHM7CisJLyogQWxsb2NhdG9yIHVz
ZWQgYnkgdGhpcyBkZXZpY2UuICovCisJc3RydWN0IHVrX2FsbG9jICAgICAgICAgICAgICAgICAq
YTsgLyogU2VlIHVrXzlwZGV2X2Nvbm5lY3QoKS4gKi8KKwkvKiBUcmFuc3BvcnQgc3RhdGUuICov
CisJZW51bSB1a185cGRldl90cmFuc19zdGF0ZSAgICAgICBzdGF0ZTsKKwkvKiBNYXhpbXVtIHNp
emUgb2YgYSBtZXNzYWdlLiAqLworCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgbXNp
emU7CisJLyogTWF4aW11bSBzaXplIG9mIGEgbWVzc2FnZSBmb3IgdGhlIHRyYW5zcG9ydC4gKi8K
Kwl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIG1heF9tc2l6ZTsKKwkvKiBUcmFuc3Bv
cnQtYWxsb2NhdGVkIGRhdGEuICovCisJdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
cHJpdjsKKwkvKiBAaW50ZXJuYWwgUmVxdWVzdCBtYW5hZ2VtZW50LiAqLworCXN0cnVjdCB1a185
cGRldl9yZXFfbWdtdCAgICAgICAgX3JlcV9tZ210OworI2lmIENPTkZJR19MSUJVS1NDSEVECisJ
LyoKKwkgKiBTbGVwdCBvbiBieSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZWlyIHR1cm4gZm9yIGVu
b3VnaCBzcGFjZSB0byBzZW5kCisJICogdGhlIHJlcXVlc3QuCisJICovCisJc3RydWN0IHVrX3dh
aXRxICAgICAgICAgICAgICAgICB4bWl0X3dxOworI2VuZGlmCit9OworCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19VS185UERFVl9DT1JFX18gKi8KZGlmZiAt
LWdpdCBhL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaCBiL2xpYi91azlwL2luY2x1
ZGUvdWsvOXBkZXZfdHJhbnMuaAppbmRleCBhNjQ4ZGJmYmE5MjcuLjZlOTgxYWU4OGFjNiAxMDA2
NDQKLS0tIGEvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl90cmFucy5oCisrKyBiL2xpYi91azlw
L2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaApAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSA8
c3RkYm9vbC5oPgogI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVrLzlwZGV2X2Nv
cmUuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTUxLDYgKzUyLDgg
QEAgc3RydWN0IHVrXzlwZGV2X3RyYW5zIHsKIAkgKiBzcGVjaWZpYyB0cmFuc3BvcnQuCiAJICov
CiAJY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lOworCS8qIFN1
cHBvcnRlZCBvcGVyYXRpb25zLiAqLworCWNvbnN0IHN0cnVjdCB1a185cGRldl90cmFuc19vcHMg
ICAgICAgICAqb3BzOwogCS8qIEFsbG9jYXRvciB1c2VkIGZvciBkZXZpY2VzIHdoaWNoIHVzZSB0
aGlzIHRyYW5zcG9ydCBsYXllci4gKi8KIAlzdHJ1Y3QgdWtfYWxsb2MgICAgICAgICAgICAgICAg
ICAgICAgICAgKmE7CiAJLyogQGludGVybmFsIEVudHJ5IGluIHRoZSBsaXN0IG9mIGF2YWlsYWJs
ZSB0cmFuc3BvcnRzLiAqLwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:18:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:18:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qiU-0006TW-9V; Thu, 05 Sep 2019 12:18:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qiS-0006TI-RZ
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:18:20 +0000
X-Inumbo-ID: 3120a8a0-cfd7-11e9-b299-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3120a8a0-cfd7-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:56 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id h7so2489412wrt.13
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=kGsDPWclo76xlG3Ok7Gvoosr91jBQnXcJlevmc7yIt8=;
 b=q9NJ9vM5FH2otrC0xfahyTGxJMexXcm44OtB54zHQ/N185d/OHW1AxqQGSiyI98dD4
 WjR0shDOvqLRQXXhBe8qDRWuz8V4foqfGgrkkN+sF0ebReU5+XcpV68nUnqDpwhx0nBp
 /0LpqqRlikfipOYZZ4ywFmTv8B5mioDeXIaUqt87gbLovuD+b9LGPSFGVza5/Vn+kkgx
 aDHbBy8X6eEzShvuVHFsKVj3hS2rlk+vvpu2TMA0KkzInQNmv3ghptByIu72XmUwdSt4
 bi4glrUuYXeVBQt+yHOU5qeBUbK4wohgGI2fZzIxRNn3NcQWEdHY5+93jefGk/n21lHE
 zhBw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=kGsDPWclo76xlG3Ok7Gvoosr91jBQnXcJlevmc7yIt8=;
 b=plXMENbAfac4PhCkmlJD2fZYLkWXB51RsM/5iTLRhxHkuM8DCKJKWo5VkcxOzP+MYM
 4EInXr4srTCaoW2vi1JKW4OopuJinUnQJZ5AD6L//VYAtD6fN7zuefgBa+cV1yh/RJg0
 Vat3NVZvJPHbRUqj0/L7I3ZRWp3McvwRccu+noSCy8ZnJ7C4OyCxoVlO+NTjf0aUlZF8
 8cZ5+jE7SF6djoffSH/KBF/icBI9U16YD1SsAhn8aUPxJiyHfHz3dku1S3Ruxe4jKlC9
 hdCc1IRhzEgdU78jzkXReR3k5JbytcteNgmzTktThtw8H361U4ZS3uxj88CWTDGHw1m9
 Gvnw==
X-Gm-Message-State: APjAAAUb2JTfG3f+I6nWHnuvniFdn4xqPb0DWghY1+ksh0vXod1Y8bvp
 TgOi51vx4NFVD53qIs9bdxk+VpX6nYw=
X-Google-Smtp-Source: APXvYqy0/9PTLahaNGW7YArjDhsyoPcVQge8J/ayvz1YINCZGE8aKNYqFCKGA7RlNMk3eKSnLt6nBw==
X-Received: by 2002:adf:ef12:: with SMTP id e18mr2360233wro.65.1567685875448; 
 Thu, 05 Sep 2019 05:17:55 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.54
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:54 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:31 +0300
Message-Id: <20190905121433.19834-7-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 6/8] lib/uk9p: Add 9P fid
 abstraction
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBhZGRzIHRoZSB1a185cGZpZCBzdHJ1Y3QsIHdoaWNoIGFic3RyYWN0cyB0aGUg
NC1ieXRlIGZpZApudW1iZXIgdXNlZCBieSB0aGUgOXAgcHJvdG9jb2wgdG8gYXNzb2NpYXRlIG51
bWJlcnMgd2l0aCBmaWxlc3lzdGVtCmVudHJpZXMgKGZpbGVzLCBkaXJlY3RvcmllcywgZXRjLikK
ClRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEgZmlkIGNhY2hlIGZvciBlYWNoIDlwIGRldmljZSwgZW5h
YmxpbmcgcmV1c2Ugb2YKdGhlIGZpZHMgYW5kIHJlZHVjaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5
IGFsbG9jYXRpb25zIGRvbmUuCgpTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJA
Z21haWwuY29tPgotLS0KIGxpYi91azlwLzlwZGV2LmMgICAgICAgICAgICAgICAgIHwgMTA5ICsr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi91azlwLzlwZmlkLmMgICAg
ICAgICAgICAgICAgIHwgIDcxICsrKysrKysrKysrKysrKysrKysrKysrKwogbGliL3VrOXAvTWFr
ZWZpbGUudWsgICAgICAgICAgICAgfCAgIDEgKwogbGliL3VrOXAvZXhwb3J0c3ltcy51ayAgICAg
ICAgICAgfCAgIDggKysrCiBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2LmggICAgICB8ICAyMyAr
KysrKysrKwogbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmggfCAgMjAgKysrKysrKwog
bGliL3VrOXAvaW5jbHVkZS91ay85cGZpZC5oICAgICAgfCAxMTUgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDM0NyBpbnNlcnRpb25zKCsp
CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvOXBmaWQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGxpYi91azlwL2luY2x1ZGUvdWsvOXBmaWQuaAoKZGlmZiAtLWdpdCBhL2xpYi91azlwLzlwZGV2
LmMgYi9saWIvdWs5cC85cGRldi5jCmluZGV4IGI3MzMxNTdhYTdmNS4uNDczNTI1M2UyYTFlIDEw
MDY0NAotLS0gYS9saWIvdWs5cC85cGRldi5jCisrKyBiL2xpYi91azlwLzlwZGV2LmMKQEAgLTQ1
LDExICs0NSw4NyBAQAogI2luY2x1ZGUgPHVrLzlwZGV2Lmg+CiAjaW5jbHVkZSA8dWsvOXBkZXZf
dHJhbnMuaD4KICNpbmNsdWRlIDx1ay85cHJlcS5oPgorI2luY2x1ZGUgPHVrLzlwZmlkLmg+CiAj
aWYgQ09ORklHX0xJQlVLU0NIRUQKICNpbmNsdWRlIDx1ay9zY2hlZC5oPgogI2luY2x1ZGUgPHVr
L3dhaXQuaD4KICNlbmRpZgogCitzdGF0aWMgdm9pZCBfZmlkX21nbXRfaW5pdChzdHJ1Y3QgdWtf
OXBkZXZfZmlkX21nbXQgKmZpZF9tZ210KQoreworCXVrYXJjaF9zcGluX2xvY2tfaW5pdCgmZmlk
X21nbXQtPnNwaW5sb2NrKTsKKwlmaWRfbWdtdC0+bmV4dF9maWQgPSAwOworCVVLX0lOSVRfTElT
VF9IRUFEKCZmaWRfbWdtdC0+ZmlkX2ZyZWVfbGlzdCk7CisJVUtfSU5JVF9MSVNUX0hFQUQoJmZp
ZF9tZ210LT5maWRfYWN0aXZlX2xpc3QpOworfQorCitzdGF0aWMgaW50IF9maWRfbWdtdF9uZXh0
X2ZpZF9sb2NrZWQoc3RydWN0IHVrXzlwZGV2X2ZpZF9tZ210ICpmaWRfbWdtdCwKKwkJCQlzdHJ1
Y3QgdWtfOXBkZXYgKmRldiwKKwkJCQlzdHJ1Y3QgdWtfOXBmaWQgKipmaWQpCit7CisJc3RydWN0
IHVrXzlwZmlkICpyZXN1bHQgPSBOVUxMOworCisJaWYgKCF1a19saXN0X2VtcHR5KCZmaWRfbWdt
dC0+ZmlkX2ZyZWVfbGlzdCkpIHsKKwkJcmVzdWx0ID0gdWtfbGlzdF9maXJzdF9lbnRyeSgmZmlk
X21nbXQtPmZpZF9mcmVlX2xpc3QsCisJCQkJc3RydWN0IHVrXzlwZmlkLCBfbGlzdCk7CisJCXVr
X2xpc3RfZGVsKCZyZXN1bHQtPl9saXN0KTsKKwl9IGVsc2UgeworCQlyZXN1bHQgPSB1a185cGZp
ZF9hbGxvYyhkZXYpOworCQlpZiAoIXJlc3VsdCkKKwkJCXJldHVybiAtRU5PTUVNOworCQlyZXN1
bHQtPmZpZCA9IGZpZF9tZ210LT5uZXh0X2ZpZCsrOworCX0KKworCXVrX3JlZmNvdW50X2luaXQo
JnJlc3VsdC0+cmVmY291bnQsIDEpOworCXJlc3VsdC0+d2FzX3JlbW92ZWQgPSAwOworCSpmaWQg
PSByZXN1bHQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2ZpZF9tZ210X2FkZF9m
aWRfbG9ja2VkKHN0cnVjdCB1a185cGRldl9maWRfbWdtdCAqZmlkX21nbXQsCisJCQkJc3RydWN0
IHVrXzlwZmlkICpmaWQpCit7CisJdWtfbGlzdF9hZGQoJmZpZC0+X2xpc3QsICZmaWRfbWdtdC0+
ZmlkX2FjdGl2ZV9saXN0KTsKK30KKworc3RhdGljIHZvaWQgX2ZpZF9tZ210X2RlbF9maWRfbG9j
a2VkKHN0cnVjdCB1a185cGRldl9maWRfbWdtdCAqZmlkX21nbXQsCisJCQkJc3RydWN0IHVrXzlw
ZmlkICpmaWQsCisJCQkJYm9vbCBtb3ZlX3RvX2ZyZWVsaXN0KQoreworCXVrX2xpc3RfZGVsKCZm
aWQtPl9saXN0KTsKKworCWlmIChtb3ZlX3RvX2ZyZWVsaXN0KQorCQl1a19saXN0X2FkZCgmZmlk
LT5fbGlzdCwgJmZpZF9tZ210LT5maWRfZnJlZV9saXN0KTsKKwllbHNlIHsKKwkJLyoKKwkJICog
RnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQuIFRoaXMgZmlkIHdpbGwgbmV2ZXIgYmUgdXNlZAor
CQkgKiBhZ2Fpbi4KKwkJICovCisJCXVrX3ByX3dhcm4oIkNvdWxkIG5vdCBtb3ZlIGZpZCB0byBm
cmVlbGlzdCwgZnJlZWluZyBtZW1vcnkuXG4iKTsKKwkJdWtfZnJlZShmaWQtPl9kZXYtPmEsIGZp
ZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfZmlkX21nbXRfY2xlYW51cChzdHJ1Y3QgdWtfOXBk
ZXZfZmlkX21nbXQgKmZpZF9tZ210KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0
IHVrXzlwZmlkICpmaWQsICpmaWRuOworCisJdWtwbGF0X3NwaW5fbG9ja19pcnFzYXZlKCZmaWRf
bWdtdC0+c3BpbmxvY2ssIGZsYWdzKTsKKwkvKgorCSAqIEV2ZXJ5IGZpZCBzaG91bGQgaGF2ZSBi
ZWVuIGNsdW5rZWQgKmJlZm9yZSogZGVzdHJveWluZyB0aGUKKwkgKiBjb25uZWN0aW9uLgorCSAq
LworCVVLX0FTU0VSVCh1a19saXN0X2VtcHR5KCZmaWRfbWdtdC0+ZmlkX2FjdGl2ZV9saXN0KSk7
CisJdWtfbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZpZCwgZmlkbiwgJmZpZF9tZ210LT5maWRf
ZnJlZV9saXN0LAorCQkJX2xpc3QpIHsKKwkJdWtfbGlzdF9kZWwoJmZpZC0+X2xpc3QpOworCQl1
a19mcmVlKGZpZC0+X2Rldi0+YSwgZmlkKTsKKwl9CisJdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJl
c3RvcmUoJmZpZF9tZ210LT5zcGlubG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBfcmVx
X21nbXRfaW5pdChzdHJ1Y3QgdWtfOXBkZXZfcmVxX21nbXQgKnJlcV9tZ210KQogewogCXVrYXJj
aF9zcGluX2xvY2tfaW5pdCgmcmVxX21nbXQtPnNwaW5sb2NrKTsKQEAgLTEyMiw2ICsxOTgsNyBA
QCBzdHJ1Y3QgdWtfOXBkZXYgKnVrXzlwZGV2X2Nvbm5lY3QoY29uc3Qgc3RydWN0IHVrXzlwZGV2
X3RyYW5zICp0cmFucywKICNlbmRpZgogCiAJX3JlcV9tZ210X2luaXQoJmRldi0+X3JlcV9tZ210
KTsKKwlfZmlkX21nbXRfaW5pdCgmZGV2LT5fZmlkX21nbXQpOwogCiAJcmMgPSBkZXYtPm9wcy0+
Y29ubmVjdChkZXYsIGRldmljZV9pZGVudGlmaWVyLCBtb3VudF9hcmdzKTsKIAlpZiAocmMgPCAw
KQpAQCAtMTM5LDYgKzIxNiw3IEBAIHN0cnVjdCB1a185cGRldiAqdWtfOXBkZXZfY29ubmVjdChj
b25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnRyYW5zLAogCXJldHVybiBkZXY7CiAKIGZyZWVf
ZGV2OgorCV9maWRfbWdtdF9jbGVhbnVwKCZkZXYtPl9maWRfbWdtdCk7CiAJX3JlcV9tZ210X2Ns
ZWFudXAoJmRldi0+X3JlcV9tZ210KTsKIAl1a19mcmVlKGEsIGRldik7CiBvdXQ6CkBAIC0xNTUs
NiArMjMzLDcgQEAgaW50IHVrXzlwZGV2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVrXzlwZGV2ICpkZXYp
CiAJZGV2LT5zdGF0ZSA9IFVLXzlQREVWX0RJU0NPTk5FQ1RJTkc7CiAKIAkvKiBDbGVhbiB1cCB0
aGUgcmVxdWVzdHMgYmVmb3JlIGNsb3NpbmcgdGhlIGNoYW5uZWwuICovCisJX2ZpZF9tZ210X2Ns
ZWFudXAoJmRldi0+X2ZpZF9tZ210KTsKIAlfcmVxX21nbXRfY2xlYW51cCgmZGV2LT5fcmVxX21n
bXQpOwogCiAJLyoKQEAgLTMxNSw2ICszOTQsMzYgQEAgaW50IHVrXzlwZGV2X3JlcV9yZW1vdmUo
c3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cHJlcSAqcmVxKQogCXJldHVybiB1a185
cHJlcV9wdXQocmVxKTsKIH0KIAorc3RydWN0IHVrXzlwZmlkICp1a185cGRldl9maWRfY3JlYXRl
KHN0cnVjdCB1a185cGRldiAqZGV2KQoreworCXN0cnVjdCB1a185cGZpZCAqZmlkID0gTlVMTDsK
KwlpbnQgcmMgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl1a3BsYXRfc3Bpbl9sb2Nr
X2lycXNhdmUoJmRldi0+X2ZpZF9tZ210LnNwaW5sb2NrLCBmbGFncyk7CisJcmMgPSBfZmlkX21n
bXRfbmV4dF9maWRfbG9ja2VkKCZkZXYtPl9maWRfbWdtdCwgZGV2LCAmZmlkKTsKKwlpZiAocmMg
PCAwKQorCQlnb3RvIG91dDsKKworCV9maWRfbWdtdF9hZGRfZmlkX2xvY2tlZCgmZGV2LT5fZmlk
X21nbXQsIGZpZCk7CisKK291dDoKKwl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2
LT5fZmlkX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKKwlpZiAocmMgPT0gMCkKKwkJcmV0dXJuIGZp
ZDsKKwlyZXR1cm4gRVJSMlBUUihyYyk7Cit9CisKK3ZvaWQgdWtfOXBkZXZfZmlkX3JlbGVhc2Uo
c3RydWN0IHVrXzlwZmlkICpmaWQpCit7CisJc3RydWN0IHVrXzlwZGV2ICpkZXYgPSBmaWQtPl9k
ZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgm
ZGV2LT5fZmlkX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKKwlfZmlkX21nbXRfZGVsX2ZpZF9sb2Nr
ZWQoJmRldi0+X2ZpZF9tZ210LCBmaWQsIDEpOworCXVrcGxhdF9zcGluX3VubG9ja19pcnFyZXN0
b3JlKCZkZXYtPl9maWRfbWdtdC5zcGlubG9jaywgZmxhZ3MpOworfQorCiBib29sIHVrXzlwZGV2
X3NldF9tc2l6ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDMyX3QgbXNpemUpCiB7CiAJaWYg
KG1zaXplID4gZGV2LT5tYXhfbXNpemUpCmRpZmYgLS1naXQgYS9saWIvdWs5cC85cGZpZC5jIGIv
bGliL3VrOXAvOXBmaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAu
Ljg1ZDE0YzY2MDc4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91azlwLzlwZmlkLmMKQEAgLTAs
MCArMSw3MSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLwor
LyoKKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+CisgKgorICog
Q29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJB
Q1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKyNpbmNsdWRlIDx1ay9jb25maWcu
aD4KKyNpbmNsdWRlIDx1ay9yZWZjb3VudC5oPgorI2luY2x1ZGUgPHVrL2FsbG9jLmg+CisjaW5j
bHVkZSA8dWsvOXBkZXYuaD4KKyNpbmNsdWRlIDx1ay85cGZpZC5oPgorCitzdHJ1Y3QgdWtfOXBm
aWQgKnVrXzlwZmlkX2FsbG9jKHN0cnVjdCB1a185cGRldiAqZGV2KQoreworCXN0cnVjdCB1a185
cGZpZCAqZmlkOworCisJZmlkID0gdWtfY2FsbG9jKGRldi0+YSwgMSwgc2l6ZW9mKCpmaWQpKTsK
KwlpZiAoZmlkID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJZmlkLT5fZGV2ID0gZGV2OworCisJ
cmV0dXJuIGZpZDsKKworb3V0OgorCXJldHVybiBOVUxMOworfQorCit2b2lkIHVrXzlwZmlkX2dl
dChzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKK3sKKwl1a19yZWZjb3VudF9hY3F1aXJlKCZmaWQtPnJl
ZmNvdW50KTsKK30KKworaW50IHVrXzlwZmlkX3B1dChzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKK3sK
KwlpbnQgbGFzdDsKKworCWxhc3QgPSB1a19yZWZjb3VudF9yZWxlYXNlKCZmaWQtPnJlZmNvdW50
KTsKKwlpZiAobGFzdCkKKwkJdWtfOXBkZXZfZmlkX3JlbGVhc2UoZmlkKTsKKworCXJldHVybiBs
YXN0OworfQpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvTWFrZWZpbGUudWsgYi9saWIvdWs5cC9NYWtl
ZmlsZS51awppbmRleCAzNGNjOTg3YTJmOWMuLmNkNGJmNGI4YTAzMyAxMDA2NDQKLS0tIGEvbGli
L3VrOXAvTWFrZWZpbGUudWsKKysrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsKQEAgLTYsMyArNiw0
IEBAIENYWElOQ0xVREVTLSQoQ09ORklHX0xJQlVLOVApCQkrPSAtSSQoTElCVUs5UF9CQVNFKS9p
bmNsdWRlCiBMSUJVSzlQX1NSQ1MteSArPSAkKExJQlVLOVBfQkFTRSkvOXBkZXZfdHJhbnMuYwog
TElCVUs5UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwcmVxLmMKIExJQlVLOVBfU1JDUy15
ICs9ICQoTElCVUs5UF9CQVNFKS85cGRldi5jCitMSUJVSzlQX1NSQ1MteSArPSAkKExJQlVLOVBf
QkFTRSkvOXBmaWQuYwpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhwb3J0c3ltcy51ayBiL2xpYi91
azlwL2V4cG9ydHN5bXMudWsKaW5kZXggMDQ1NmI5MDk0ZDg3Li5lYzQ2OWEyYmZmMDMgMTAwNjQ0
Ci0tLSBhL2xpYi91azlwL2V4cG9ydHN5bXMudWsKKysrIGIvbGliL3VrOXAvZXhwb3J0c3ltcy51
awpAQCAtMiw2ICsyLDcgQEAgdWtfOXBkZXZfdHJhbnNfcmVnaXN0ZXIKIHVrXzlwZGV2X3RyYW5z
X2J5X25hbWUKIHVrXzlwZGV2X3RyYW5zX2dldF9kZWZhdWx0CiB1a185cGRldl90cmFuc19zZXRf
ZGVmYXVsdAorCiB1a185cHJlcV9nZXQKIHVrXzlwcmVxX3B1dAogdWtfOXByZXFfdnNlcmlhbGl6
ZQpAQCAtMTMsMTMgKzE0LDIwIEBAIHVrXzlwcmVxX2NvcHlfZnJvbQogdWtfOXByZXFfcmVjZWl2
ZV9jYgogdWtfOXByZXFfd2FpdHJlcGx5CiB1a185cHJlcV9lcnJvcgorCiB1a185cGRldl9jb25u
ZWN0CiB1a185cGRldl9kaXNjb25uZWN0CiB1a185cGRldl9yZXF1ZXN0CiB1a185cGRldl94bWl0
X25vdGlmeQogdWtfOXBkZXZfY2FsbAorCiB1a185cGRldl9yZXFfY3JlYXRlCiB1a185cGRldl9y
ZXFfbG9va3VwCiB1a185cGRldl9yZXFfcmVtb3ZlCisKIHVrXzlwZGV2X3NldF9tc2l6ZQogdWtf
OXBkZXZfZ2V0X21zaXplCisKK3VrXzlwZGV2X2ZpZF9jcmVhdGUKK3VrXzlwZmlkX2dldAordWtf
OXBmaWRfcHV0CmRpZmYgLS1naXQgYS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2LmggYi9saWIv
dWs5cC9pbmNsdWRlL3VrLzlwZGV2LmgKaW5kZXggYWVkNzIzZGNlZTdmLi4xMzk0OThmNzc3N2Yg
MTAwNjQ0Ci0tLSBhL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXYuaAorKysgYi9saWIvdWs5cC9p
bmNsdWRlL3VrLzlwZGV2LmgKQEAgLTE3Niw2ICsxNzYsMjkgQEAgc3RydWN0IHVrXzlwcmVxICp1
a185cGRldl9yZXFfbG9va3VwKHN0cnVjdCB1a185cGRldiAqZGV2LCB1aW50MTZfdCB0YWcpOwog
aW50IHVrXzlwZGV2X3JlcV9yZW1vdmUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185
cHJlcSAqcmVxKTsKIAogLyoqCisgKiBDcmVhdGVzIGEgRklEIGFzc29jaWF0ZWQgd2l0aCB0aGUg
Z2l2ZW4gOVAgZGV2aWNlLgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0IDlQ
IERldmljZS4KKyAqIEByZXR1cm4KKyAqICAgSWYgbm90IGFuIGVycm9yIHBvaW50ZXIsIHRoZSBj
cmVhdGVkIGZpZC4KKyAqICAgT3RoZXJ3aXNlLCB0aGUgZXJyb3IgaW4gY3JlYXRpbmcgdGhlIGZp
ZDoKKyAqICAgLSBFTk9NRU06IE5vIG1lbW9yeSBmb3IgdGhlIHJlcXVlc3Qgb3Igbm8gYXZhaWxh
YmxlIHRhZ3MuCisgKi8KK3N0cnVjdCB1a185cGZpZCAqdWtfOXBkZXZfZmlkX2NyZWF0ZShzdHJ1
Y3QgdWtfOXBkZXYgKmRldik7CisKKy8qKgorICogQGludGVybmFsCisgKiBSZWxlYXNlcyBhIEZJ
RCB3aGVuIGl0cyByZWZlcmVuY2UgY291bnQgZ29lcyB0byAwLgorICoKKyAqIFNob3VsZCBub3Qg
YmUgY2FsbGVkIGRpcmVjdGx5LCBidXQgcmF0aGVyIHZpYSB1a185cGZpZF9wdXQoKS4KKyAqCisg
KiBAcGFyYW0gZmlkCisgKiAgIFRoZSBGSUQgdG8gYmUgcmVsZWFzZWQuCisgKi8KK3ZvaWQgdWtf
OXBkZXZfZmlkX3JlbGVhc2Uoc3RydWN0IHVrXzlwZmlkICpmaWQpOworCisvKioKICAqIFNldHMg
dGhlIG1heGltdW0gYWxsb3dlZCBtZXNzYWdlIHNpemUuCiAgKgogICogQHBhcmFtIGRldgpkaWZm
IC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmggYi9saWIvdWs5cC9pbmNs
dWRlL3VrLzlwZGV2X2NvcmUuaAppbmRleCA4YzU3ZDg2ODJkMGUuLjM4ODY0YWNlMTM4ZCAxMDA2
NDQKLS0tIGEvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmgKKysrIGIvbGliL3VrOXAv
aW5jbHVkZS91ay85cGRldl9jb3JlLmgKQEAgLTEyNCw2ICsxMjQsMjQgQEAgc3RydWN0IHVrXzlw
ZGV2X3JlcV9tZ210IHsKIAogLyoqCiAgKiBAaW50ZXJuYWwKKyAqIEEgc3RydWN0dXJlIHVzZWQg
dG8gZGVzY3JpYmUgdGhlIGF2YWlsYWJpbGl0eSBvZiA5UCBmaWRzLgorICovCitzdHJ1Y3QgdWtf
OXBkZXZfZmlkX21nbXQgeworCS8qIFNwaW5sb2NrIHByb3RlY3RpbmcgZmlkcy4gKi8KKwlzcGlu
bG9ja190CQkJc3BpbmxvY2s7CisJLyogTmV4dCBhdmFpbGFibGUgZmlkLiAqLworCXVpbnQzMl90
CQkJbmV4dF9maWQ7CisJLyogRnJlZS1saXN0IG9mIGZpZHMgdGhhdCBjYW4gYmUgcmV1c2VkLiAq
LworCXN0cnVjdCB1a19saXN0X2hlYWQJCWZpZF9mcmVlX2xpc3Q7CisJLyoKKwkgKiBMaXN0IG9m
IGZpZHMgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSwgdG8gYmUgY2x1bmtlZCBhdCB0aGUgZW5k
IG9mCisJICogYSA5cGZzIHNlc3Npb24uCisJICovCisJc3RydWN0IHVrX2xpc3RfaGVhZAkJZmlk
X2FjdGl2ZV9saXN0OworfTsKKworLyoqCisgKiBAaW50ZXJuYWwKICAqIDlQREVWIHRyYW5zcG9y
dCBzdGF0ZQogICoKICAqIC0gQ09OTkVDVEVEOiBEZWZhdWx0IHN0YXRlIGFmdGVyIGluaXRpYWxp
emF0aW9uIGFuZCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4KQEAgLTE1Myw2ICsxNzEsOCBAQCBz
dHJ1Y3QgdWtfOXBkZXYgewogCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgbWF4X21z
aXplOwogCS8qIFRyYW5zcG9ydC1hbGxvY2F0ZWQgZGF0YS4gKi8KIAl2b2lkICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICpwcml2OworCS8qIEBpbnRlcm5hbCBGaWQgbWFuYWdlbWVudC4gKi8K
KwlzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQJX2ZpZF9tZ210OwogCS8qIEBpbnRlcm5hbCBSZXF1
ZXN0IG1hbmFnZW1lbnQuICovCiAJc3RydWN0IHVrXzlwZGV2X3JlcV9tZ210ICAgICAgICBfcmVx
X21nbXQ7CiAjaWYgQ09ORklHX0xJQlVLU0NIRUQKZGlmZiAtLWdpdCBhL2xpYi91azlwL2luY2x1
ZGUvdWsvOXBmaWQuaCBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBmaWQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdlYzc1YmI0YTUwOAotLS0gL2Rldi9udWxsCisr
KyBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBmaWQuaApAQCAtMCwwICsxLDExNSBAQAorLyogU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5
LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQg
aG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJ
TiBBTlkgV0FZLgorICovCisKKyNpZm5kZWYgX19VS185UEZJRF9fCisjZGVmaW5lIF9fVUtfOVBG
SURfXworCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5j
bHVkZSA8dWsvY29uZmlnLmg+CisjaW5jbHVkZSA8dWsvOXBfY29yZS5oPgorI2luY2x1ZGUgPHVr
L2FsbG9jLmg+CisjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgorI2luY2x1ZGUgPHVrL2xpc3Qu
aD4KKyNpbmNsdWRlIDx1ay9yZWZjb3VudC5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKy8qKgorICogU3RydWN0dXJlIGRlc2NyaWJpbmcgYSBtYW5hZ2Vk
IGZpZCB2aWEgcmVmZXJlbmNlIGNvdW50aW5nLgorICovCitzdHJ1Y3QgdWtfOXBmaWQgeworCS8q
IEZpZCBudW1iZXIuICovCisJdWludDMyX3QgICAgICAgICAgICAgICAgZmlkOworCS8qIEFzc29j
aWF0ZWQgc2VydmVyIHFpZC4gKi8KKwlzdHJ1Y3QgdWtfOXBfcWlkICAgICAgICBxaWQ7CisJLyog
SS9PIHVuaXQuICovCisJdWludDMyX3QgICAgICAgICAgICAgICAgaW91bml0OworCS8qCisJICog
SWYgcmVtb3ZlZCwgbm8gY2x1bmsgaXMgbmVjZXNzYXJ5LCBhcyB0aGUgcmVtb3ZlIG9wZXJhdGlv
bgorCSAqIGltcGxpY2l0bHkgY2x1bmtzIHRoZSBmaWQuCisJICovCisJYm9vbCB3YXNfcmVtb3Zl
ZDsKKwkvKiBUcmFja3MgdGhlIG51bWJlciBvZiBsaXZlIHJlZmVyZW5jZXMuICovCisJX19hdG9t
aWMgICAgICAgICAgICAgICAgcmVmY291bnQ7CisJLyogQGludGVybmFsIEFzc29jaWF0ZWQgOVAg
ZGV2aWNlLiAqLworCXN0cnVjdCB1a185cGRldiAgICAgICAgICpfZGV2OworCS8qCisJICogQGlu
dGVybmFsCisJICogTGlzdCBvbiB3aGljaCB0aGlzIGZpZCBjdXJyZW50bHkgaXMuIFNlZSB1a185
cGRldl9maWRfbWdtdCBmb3IKKwkgKiBkZXRhaWxzLgorCSAqLworCXN0cnVjdCB1a19saXN0X2hl
YWQgICAgIF9saXN0OworfTsKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEFsbG9jYXRlcyBhIDlw
IGZpZC4KKyAqIFNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSwgdXNlIHVrXzlwZGV2X2ZpZF9j
cmVhdGUoKSBpbnN0ZWFkLgorICoKKyAqIEBwYXJhbSBhCisgKiAgIEFsbG9jYXRvciB0byB1c2Uu
CisgKiBAcmV0dXJuCisgKiAgIC0gTlVMTDogT3V0IG9mIG1lbW9yeS4KKyAqICAgLSAoIT1OVUxM
KTogU3VjY2Vzc2Z1bC4KKyAqLworc3RydWN0IHVrXzlwZmlkICp1a185cGZpZF9hbGxvYyhzdHJ1
Y3QgdWtfOXBkZXYgKmRldik7CisKKy8qKgorICogR2V0cyB0aGUgOXAgZmlkLCBpbmNyZW1lbnRp
bmcgdGhlIHJlZmVyZW5jZSBjb3VudC4KKyAqCisgKiBAcGFyYW0gZmlkCisgKiAgIFJlZmVyZW5j
ZSB0byB0aGUgOXAgZmlkLgorICovCit2b2lkIHVrXzlwZmlkX2dldChzdHJ1Y3QgdWtfOXBmaWQg
KmZpZCk7CisKKy8qKgorICogUHV0cyB0aGUgOXAgZmlkLCBkZWNyZW1lbnRpbmcgdGhlIHJlZmVy
ZW5jZSBjb3VudC4KKyAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGxpdmUgcmVmZXJlbmNlLCB0aGUg
bWVtb3J5IHdpbGwgYmUgZnJlZWQuCisgKgorICogQHBhcmFtIGZpZAorICogICBSZWZlcmVuY2Ug
dG8gdGhlIDlwIGZpZC4KKyAqIEByZXR1cm4KKyAqICAgLSAwOiBUaGlzIHdhcyBub3QgdGhlIGxh
c3QgbGl2ZSByZWZlcmVuY2UuCisgKiAgIC0gMTogVGhpcyB3YXMgdGhlIGxhc3QgbGl2ZSByZWZl
cmVuY2UuCisgKi8KK2ludCB1a185cGZpZF9wdXQoc3RydWN0IHVrXzlwZmlkICpmaWQpOworCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogX19VS185UEZJRF9fICov
Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:18:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:18:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qiY-0006Ua-BT; Thu, 05 Sep 2019 12:18:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qiX-0006UN-RL
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:18:25 +0000
X-Inumbo-ID: 327d4500-cfd7-11e9-b76c-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 327d4500-cfd7-11e9-b76c-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:58 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id t17so2540908wmi.2
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=0mb3AOKzeEAOPtJt7DQVlmYk7c1sWJA4rVTV3ifFfdA=;
 b=BNsNZp1ip4T6jj+XV9sFmuEU3599cZWeK5s9s2cDe08TJEosQhyORkqg3OVl600uEd
 dn3PKBcMAWgtGe2k0J8gPDbvvvth86U2XISmPNJ12RuTek+3e8+Nshi87udEJI2VIyDR
 Vw4Y3CT06gLquj7AXGl9PzS1x4145Pmnb2+V8M3zF7YY1lADq6HjdrvIBXa6LhluF+V8
 4vSw2jCt/ihW7vpfG4kB6+cpDPtGTdaUU1pFYQgGcJaxNjBmHSmv4/NJZr7Fd6B8M1Hr
 j6n+IxQHtucQZ+l4JPcsl95hCBUYOyPjEam+opU1oiM1ls9J6D+u+O9IImCaBwgNQs1r
 UoLw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=0mb3AOKzeEAOPtJt7DQVlmYk7c1sWJA4rVTV3ifFfdA=;
 b=g3DA2nJNoh2gInGlJvGMjcpDP8DiKzRwDe+ViyDK+JS9FS+XkfaCQV9WhBNY9ARQ0s
 DP5mxX2a2Qr7oO9a6m910cuYAeyZ/MY6VdftxlGnpkI3U2ttnWmIMUWl3ysQq1P2k8T2
 +GO4UrZqsDCnWJy5bd9OGw05ULBqRM6VbgzWnK3XcCCeoDjaS4v5KZYhefvVTxq1Q1Tb
 E9VIo/Jt1MM4x4cmxRwzRlFKxvizDDBalZ0wVn6sRNQvqj5VsbBxLfoECdCH7Zn3toUt
 7V2SCbhoulXrtcSpoIu2plTwplXikeP1uAMhMCln3MhzYW5ebvYI8+fVxrBXWPHAe68y
 cW7Q==
X-Gm-Message-State: APjAAAWhVWFJ/9aJC/c8x6QHLXm23Otw4cIIR9JPIs8oX35BAHeF7Ly3
 vieSpFKMncV+whPrpgG7b4jKmqU8FyM=
X-Google-Smtp-Source: APXvYqyqfS2Xc1TrlPdKQsKVPka2R0QCvup+1qSPAezyEzv7SOPhAphimIpEkLMjgjBoM+aCRlv3Nw==
X-Received: by 2002:a1c:7215:: with SMTP id n21mr2722170wmc.152.1567685877861; 
 Thu, 05 Sep 2019 05:17:57 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.56
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:57 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:33 +0300
Message-Id: <20190905121433.19834-9-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 8/8] lib/uk9p: Clunk fids on fid
 release
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gZmlkIHJlbGVhc2UsIHRoZSA5cCBzZXJ2ZXIgaXMgc2VudCBhIGNsdW5rIG1lc3NhZ2UgdG8g
ZGlzYXNzb2NpYXRlCnRoZSBmaWQgZnJvbSBpdHMgcHJldmlvdXMgYXNzb2NpYXRpb24sIHN1Y2gg
dGhhdCBpdCBoYXMgYSBjbGVhbiBzbGF0ZQpvbiBib3RoIHRoZSBzZXJ2ZXIgYW5kIHRoZSBjbGll
bnQgd2hlbiBpdCB3aWxsIGV2ZW50dWFsbHkgYmUgcmV1c2VkLgoKU2lnbmVkLW9mZi1ieTogQ3Jp
c3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KLS0tCiBsaWIvdWs5cC85cGRldi5jIHwgMTcg
KysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspLCAxIGRl
bGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvOXBkZXYuYyBiL2xpYi91azlwLzlwZGV2
LmMKaW5kZXggNDczNTI1M2UyYTFlLi4xNGVhN2NhZDM1OGEgMTAwNjQ0Ci0tLSBhL2xpYi91azlw
LzlwZGV2LmMKKysrIGIvbGliL3VrOXAvOXBkZXYuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgPHVrL2JpdG1hcC5oPgogI2luY2x1ZGUgPHVrL3JlZmNvdW50Lmg+CiAjaW5jbHVkZSA8dWsv
d2FpdC5oPgorI2luY2x1ZGUgPHVrLzlwLmg+CiAjaW5jbHVkZSA8dWsvOXBkZXYuaD4KICNpbmNs
dWRlIDx1ay85cGRldl90cmFucy5oPgogI2luY2x1ZGUgPHVrLzlwcmVxLmg+CkBAIC00MTgsOSAr
NDE5LDIzIEBAIHZvaWQgdWtfOXBkZXZfZmlkX3JlbGVhc2Uoc3RydWN0IHVrXzlwZmlkICpmaWQp
CiB7CiAJc3RydWN0IHVrXzlwZGV2ICpkZXYgPSBmaWQtPl9kZXY7CiAJdW5zaWduZWQgbG9uZyBm
bGFnczsKKwlib29sIG1vdmVfdG9fZnJlZWxpc3QgPSBmYWxzZTsKKwlpbnQgcmM7CisKKwkvKiBG
aXJzdCBjbHVuayB0aGUgZmlkLiAqLworCXJjID0gdWtfOXBfY2x1bmsoZmlkLT5fZGV2LCBmaWQp
OworCWlmIChyYyA8IDApIHsKKwkJdWtfcHJfd2FybigiQ291bGQgbm90IGNsdW5rIGZpZCAlZDog
JWRcbiIsIGZpZC0+ZmlkLCByYyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIElmIHN1Y2Nlc3Nm
dWxseSBjbHVua2VkLCBtb3ZlIGl0IHRvIGEgZnJlZWxpc3QuICovCisJbW92ZV90b19mcmVlbGlz
dCA9IHRydWU7CiAKK291dDoKKwkvKiBUaGVuIHJlbW92ZSBpdCBmcm9tIGFueSBpbnRlcm5hbCBk
YXRhIHN0cnVjdHVyZXMuICovCiAJdWtwbGF0X3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPl9maWRf
bWdtdC5zcGlubG9jaywgZmxhZ3MpOwotCV9maWRfbWdtdF9kZWxfZmlkX2xvY2tlZCgmZGV2LT5f
ZmlkX21nbXQsIGZpZCwgMSk7CisJX2ZpZF9tZ210X2RlbF9maWRfbG9ja2VkKCZkZXYtPl9maWRf
bWdtdCwgZmlkLCBtb3ZlX3RvX2ZyZWVsaXN0KTsKIAl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVz
dG9yZSgmZGV2LT5fZmlkX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKIH0KIAotLSAKMi4xMS4wCgoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:18:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:18:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qid-0006Vm-D7; Thu, 05 Sep 2019 12:18:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qic-0006Vf-R3
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:18:30 +0000
X-Inumbo-ID: 320c1c68-cfd7-11e9-978d-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 320c1c68-cfd7-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 12:17:58 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id g7so2546959wrx.2
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:17:58 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=from:to:cc:subject:date:message-id:in-reply-to:references;
 bh=ggk3WY6/QclEJBm+fsj6ZBjTw43H73q7/jUjUc2r9TE=;
 b=AnEGx+QRBW8D8EHjFevgFJ1OKh+H/4k/bRrP38wNeROr54W4sqtg4lrMTwDdAgducu
 crvSrLEEy+0mn1z9AFyqDqmtakUrmheUFS2sLSu9P7Cbf/dMAiQ8fjSCj6tZDSHB4PgL
 PCCXkcaOTnD42kiKV3b7ZnutXxdTVtcRMcn3ITFumUfPuGziuEo/1y3MTANsQ587wh6A
 bCcl520ZTUc7M5Guo//0GYd95Z+jyEMQ6zwB6hu+TUuQwgE4TWbrkP9RNZ6mDTEE2UAn
 6wwvp+m3VryKNmJB9ZvQSVJMg4tU5bHvRRI2IgVDbbk7VHCzhYOAqwtYCUi7J/993xmu
 eOKA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to
 :references;
 bh=ggk3WY6/QclEJBm+fsj6ZBjTw43H73q7/jUjUc2r9TE=;
 b=AbFe8uKH5pfBzpLNgRg40VuZBphf//OwmMADZA+otBFJfvsKLRAvb+ZQmuQr/ADf91
 FZpmNP/AlMhCjXeFC/IxBVGDqxbQ4RDO5TBpwqAFWDQUJa464etjt818lnjhnHl0cQ7k
 eoq5mqQjcLiA2nWHqdcv7qLeH5rxdMo4+LagIDZQpmElXoguYaEUOj0rEnHKpllk0SuN
 gmW3H4ejnwRE9qBThB39XX6eEDYJGxURErwTzwVrcUhXEcLJuqmGoab+cBSeIDCIZwrs
 6ttnPeO2K3dls+1rcCa6JW6CttCymYFDSWoCC+RHha9E6kUY2EQ+hPutwUWYGqHs5/67
 JpEA==
X-Gm-Message-State: APjAAAXQSmHKJS3zci3cHPGJ0vn3w/XWlmMcYGtef+1RYKK1sQKguBjt
 nSidSPktN7+WyGEzLjPBN5O/tyMco1E=
X-Google-Smtp-Source: APXvYqzbTBR2nVxMckbKV3S2xZmTKTZMZmlyS0199JnrzyoFc8m3Y1NfnHAsQMQ8auo3J30QE2OH0Q==
X-Received: by 2002:adf:ed8f:: with SMTP id c15mr2300112wro.83.1567685876818; 
 Thu, 05 Sep 2019 05:17:56 -0700 (PDT)
Received: from localhost.localdomain ([84.117.206.147])
 by smtp.gmail.com with ESMTPSA id h12sm2305373wrp.51.2019.09.05.05.17.55
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 05 Sep 2019 05:17:56 -0700 (PDT)
From: Cristian Banu <cristb@gmail.com>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:14:32 +0300
Message-Id: <20190905121433.19834-8-cristb@gmail.com>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
References: <20190905121433.19834-1-cristb@gmail.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 7/8] lib/uk9p: Add 9P helper API
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, costin.lupu@cs.pub.ro,
 Cristian Banu <cristb@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBpbXBsZW1lbnRzIGFuIEFQSSBmb3IgdGhlIG9wZXJhdGlvbnMgc3VwcG9ydGVk
IGJ5IHRoZSA5UApwcm90b2NvbC4gRWFjaCBzdXBwb3J0ZWQgbWVzc2FnZSB0eXBlIGhhcyBhbiBh
c3NvY2lhdGVkIGZ1bmN0aW9uIHdpdGgKd2hpY2ggdG8gbWFrZSByZXF1ZXN0cy4KClNpZ25lZC1v
ZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Ci0tLQogbGliL3VrOXAvOXAu
YyAgICAgICAgICAgIHwgNDMwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiBsaWIvdWs5cC9NYWtlZmlsZS51ayAgICAgfCAgIDEgKwogbGliL3VrOXAvZXhw
b3J0c3ltcy51ayAgIHwgIDE1ICsrCiBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwLmggfCAyNjUgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNzExIGluc2VydGlv
bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC85cC5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgbGliL3VrOXAvaW5jbHVkZS91ay85cC5oCgpkaWZmIC0tZ2l0IGEvbGliL3VrOXAvOXAuYyBi
L2xpYi91azlwLzlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5l
YjRjMmRjODZjZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWs5cC85cC5jCkBAIC0wLDAgKzEs
NDMwIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgor
ICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KKyAqCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVE
IE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgor
I2luY2x1ZGUgPHVrL2Fzc2VydC5oPgorI2luY2x1ZGUgPHVrL2VycnB0ci5oPgorI2luY2x1ZGUg
PHVrLzlwLmg+CisjaW5jbHVkZSA8dWsvOXBkZXYuaD4KKyNpbmNsdWRlIDx1ay85cHJlcS5oPgor
I2luY2x1ZGUgPHVrLzlwZmlkLmg+CisKK3N0cnVjdCB1a185cHJlcSAqdWtfOXBfdmVyc2lvbihz
dHJ1Y3QgdWtfOXBkZXYgKmRldiwKKwkJY29uc3QgY2hhciAqcmVxdWVzdGVkLCBzdHJ1Y3QgdWtf
OXBfc3RyICpyZWNlaXZlZCkKK3sKKwlzdHJ1Y3QgdWtfOXBfc3RyIHJlcXVlc3RlZF9zdHI7CisJ
c3RydWN0IHVrXzlwcmVxICpyZXE7CisJaW50IHJjOworCXVpbnQzMl90IG5ld19tc2l6ZTsKKwor
CXVrXzlwX3N0cl9pbml0KCZyZXF1ZXN0ZWRfc3RyLCByZXF1ZXN0ZWQpOworCisJdWtfcHJfZGVi
dWcoIlRWRVJTSU9OIG1zaXplICV1IHZlcnNpb24gJXNcbiIsCisJCQlkZXYtPm1zaXplLCByZXF1
ZXN0ZWQpOworCisJcmVxID0gdWtfOXBkZXZfY2FsbChkZXYsIFVLXzlQX1RWRVJTSU9OLCBfX1BB
R0VfU0laRSwgImRzIiwKKwkJCWRldi0+bXNpemUsICZyZXF1ZXN0ZWRfc3RyKTsKKwlpZiAoUFRS
SVNFUlIocmVxKSkKKwkJcmV0dXJuIHJlcTsKKworCXJjID0gdWtfOXByZXFfZGVzZXJpYWxpemUo
cmVxLCAiZHMiLCAmbmV3X21zaXplLCByZWNlaXZlZCk7CisKKwlpZiAocmMpCisJCXJldHVybiBF
UlIyUFRSKHJjKTsKKworCXVrX3ByX2RlYnVnKCJSVkVSU0lPTiBtc2l6ZSAldSB2ZXJzaW9uICUu
KnNcbiIsIG5ld19tc2l6ZSwKKwkJCXJlY2VpdmVkLT5zaXplLCByZWNlaXZlZC0+ZGF0YSk7CisK
KwkvKgorCSAqIE5vdGU6IHRoZSA5UCBzcGVjaWZpY2F0aW9uIG1lbnRpb25zIHRoYXQgbmV3X21z
aXplIDw9IGRldi0+bXNpemUuCisJICogSG93ZXZ2ZXIsIGV4ZWN1dGlvbiBjYW4gY29udGludWUg
ZXZlbiBpZiB0aGUgaW52YXJpYW50IGlzIHZpb2xhdGVkCisJICogYW5kIHNldF9tc2l6ZSgpIGZh
aWxzLCBhcyB0aGUgb2xkIG1lc3NhZ2Ugc2l6ZSBpcyBhbHdheXMgd2l0aGluIHRoZQorCSAqIGFj
Y2VwdGVkIGxpbWl0LgorCSAqLworCWlmICghdWtfOXBkZXZfc2V0X21zaXplKGRldiwgbmV3X21z
aXplKSkKKwkJdWtfcHJfZGVidWcoIkludmFsaWQgbmV3IG1lc3NhZ2Ugc2l6ZS5cbiIpOworCisJ
cmV0dXJuIHJlcTsKK30KKworc3RydWN0IHVrXzlwZmlkICp1a185cF9hdHRhY2goc3RydWN0IHVr
XzlwZGV2ICpkZXYsIHVpbnQzMl90IGFmaWQsCisJCWNvbnN0IGNoYXIgKnVuYW1lLCBjb25zdCBj
aGFyICphbmFtZSwgdWludDMyX3Qgbl91bmFtZSkKK3sKKwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsK
KwlzdHJ1Y3QgdWtfOXBmaWQgKmZpZDsKKwlzdHJ1Y3QgdWtfOXBfc3RyIHVuYW1lX3N0cjsKKwlz
dHJ1Y3QgdWtfOXBfc3RyIGFuYW1lX3N0cjsKKwlpbnQgcmM7CisKKwl1a185cF9zdHJfaW5pdCgm
dW5hbWVfc3RyLCB1bmFtZSk7CisJdWtfOXBfc3RyX2luaXQoJmFuYW1lX3N0ciwgYW5hbWUpOwor
CisJZmlkID0gdWtfOXBkZXZfZmlkX2NyZWF0ZShkZXYpOworCWlmIChQVFJJU0VSUihmaWQpKQor
CQlyZXR1cm4gZmlkOworCisJdWtfcHJfZGVidWcoIlRBVFRBQ0ggZmlkICV1IGFmaWQgJXUgdW5h
bWUgJXMgYW5hbWUgJXMgbl91bmFtZSAldVxuIiwKKwkJCWZpZC0+ZmlkLCBhZmlkLCB1bmFtZSwg
YW5hbWUsIG5fdW5hbWUpOworCisJcmVxID0gdWtfOXBkZXZfY2FsbChkZXYsIFVLXzlQX1RBVFRB
Q0gsIF9fUEFHRV9TSVpFLCAiZGRzc2QiLAorCQkJZmlkLT5maWQsIGFmaWQsICZ1bmFtZV9zdHIs
ICZhbmFtZV9zdHIsIG5fdW5hbWUpOworCWlmIChQVFJJU0VSUihyZXEpKSB7CisJCXVrXzlwZGV2
X2ZpZF9yZWxlYXNlKGZpZCk7CisJCXJldHVybiAodm9pZCAqKXJlcTsKKwl9CisKKwlyYyA9IHVr
XzlwcmVxX2Rlc2VyaWFsaXplKHJlcSwgIlEiLCAmZmlkLT5xaWQpOworCXVrXzlwZGV2X3JlcV9y
ZW1vdmUoZGV2LCByZXEpOworCisJdWtfcHJfZGVidWcoIlJBVFRBQ0ggcWlkIHR5cGUgJXUgdmVy
c2lvbiAldSBwYXRoICVsdVxuIiwKKwkJCWZpZC0+cWlkLnR5cGUsIGZpZC0+cWlkLnZlcnNpb24s
IGZpZC0+cWlkLnBhdGgpOworCisJaWYgKHJjIDwgMCkgeworCQl1a185cGRldl9maWRfcmVsZWFz
ZShmaWQpOworCQlyZXR1cm4gRVJSMlBUUihyYyk7CisJfQorCisJcmV0dXJuIGZpZDsKK30KKwor
aW50IHVrXzlwX2ZsdXNoKHN0cnVjdCB1a185cGRldiAqZGV2LCB1aW50MTZfdCBvbGR0YWcpCit7
CisJc3RydWN0IHVrXzlwcmVxICpyZXE7CisKKwl1a19wcl9kZWJ1ZygiVEZMVVNIIG9sZHRhZyAl
dVxuIiwgb2xkdGFnKTsKKwlyZXEgPSB1a185cGRldl9jYWxsKGRldiwgVUtfOVBfVEZMVVNILCBf
X1BBR0VfU0laRSwgInciLCBvbGR0YWcpOworCWlmIChQVFJJU0VSUihyZXEpKQorCQlyZXR1cm4g
UFRSMkVSUihyZXEpOworCisJdWtfcHJfZGVidWcoIlJGTFVTSFxuIik7CisJdWtfOXBkZXZfcmVx
X3JlbW92ZShkZXYsIHJlcSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHVrXzlwZmlkICp1
a185cF93YWxrKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKKwkJ
Y29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKKwlzdHJ1Y3QgdWtf
OXBmaWQgKm5ld2ZpZDsKKwlzdHJ1Y3QgdWtfOXBfc3RyIG5hbWVfc3RyOworCXVpbnQxNl90IG53
cWlkOworCXVpbnQxNl90IG53bmFtZTsKKwlpbnQgcmM7CisKKwl1a185cF9zdHJfaW5pdCgmbmFt
ZV9zdHIsIG5hbWUpOworCisJbmV3ZmlkID0gdWtfOXBkZXZfZmlkX2NyZWF0ZShkZXYpOworCWlm
IChQVFJJU0VSUihuZXdmaWQpKQorCQlyZXR1cm4gbmV3ZmlkOworCisJbnduYW1lID0gbmFtZSA/
IDEgOiAwOworCisJaWYgKG5hbWUpIHsKKwkJdWtfcHJfZGVidWcoIlRXQUxLIGZpZCAldSBuZXdm
aWQgJXUgbnduYW1lICVkIG5hbWUgJXNcbiIsCisJCQkJZmlkLT5maWQsIG5ld2ZpZC0+ZmlkLCBu
d25hbWUsIG5hbWUpOworCQlyZXEgPSB1a185cGRldl9jYWxsKGRldiwgVUtfOVBfVFdBTEssIF9f
UEFHRV9TSVpFLCAiZGR3cyIsCisJCQkJZmlkLT5maWQsIG5ld2ZpZC0+ZmlkLCBud25hbWUsICZu
YW1lX3N0cik7CisJfSBlbHNlIHsKKwkJdWtfcHJfZGVidWcoIlRXQUxLIGZpZCAldSBuZXdmaWQg
JXUgbnduYW1lICVkXG4iLAorCQkJCWZpZC0+ZmlkLCBuZXdmaWQtPmZpZCwgbnduYW1lKTsKKwkJ
cmVxID0gdWtfOXBkZXZfY2FsbChkZXYsIFVLXzlQX1RXQUxLLCBfX1BBR0VfU0laRSwgImRkdyIs
CisJCQkJZmlkLT5maWQsIG5ld2ZpZC0+ZmlkLCBud25hbWUpOworCX0KKworCWlmIChQVFJJU0VS
UihyZXEpKSB7CisJCS8qCisJCSAqIERvbid0IGNsdW5rIGlmIHJlcXVlc3QgaGFzIGZpbmlzaGVk
IHdpdGggZXJyb3IsIGFzIHRoZSBmaWQKKwkJICogaXMgaW52YWxpZC4KKwkJICovCisJCW5ld2Zp
ZC0+d2FzX3JlbW92ZWQgPSAxOworCQlyYyA9IFBUUjJFUlIocmVxKTsKKwkJZ290byBvdXQ7CisJ
fQorCisJcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJ3IiwgJm53cWlkKTsKKwlpZiAo
cmMgPCAwKQorCQlnb3RvIG91dF9yZXE7CisKKwl1a19wcl9kZWJ1ZygiUldBTEsgbndxaWQgJXVc
biIsIG53cWlkKTsKKworCWlmIChud3FpZCAhPSBud25hbWUpIHsKKwkJcmMgPSAtRU5PRU5UOwor
CQlnb3RvIG91dF9yZXE7CisJfQorCisKKwlpZiAobnduYW1lKSB7CisJCXJjID0gdWtfOXByZXFf
ZGVzZXJpYWxpemUocmVxLCAiUSIsICZuZXdmaWQtPnFpZCk7CisJCWlmIChyYyA8IDApCisJCQln
b3RvIG91dF9yZXE7CisJfSBlbHNlCisJCW5ld2ZpZC0+cWlkID0gZmlkLT5xaWQ7CisKKwlyYyA9
IDA7CitvdXRfcmVxOgorCXVrXzlwZGV2X3JlcV9yZW1vdmUoZGV2LCByZXEpOworb3V0OgorCWlm
IChyYykgeworCQl1a185cGRldl9maWRfcmVsZWFzZShuZXdmaWQpOworCQlyZXR1cm4gRVJSMlBU
UihyYyk7CisJfQorCisJcmV0dXJuIG5ld2ZpZDsKK30KKworaW50IHVrXzlwX29wZW4oc3RydWN0
IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLCB1aW50OF90IG1vZGUpCit7CisJ
c3RydWN0IHVrXzlwcmVxICpyZXE7CisJaW50IHJjOworCisJdWtfcHJfZGVidWcoIlRPUEVOIGZp
ZCAldSBtb2RlICV1XG4iLCBmaWQtPmZpZCwgbW9kZSk7CisKKwlyZXEgPSB1a185cGRldl9jYWxs
KGRldiwgVUtfOVBfVE9QRU4sIF9fUEFHRV9TSVpFLCAiZGIiLAorCQkJZmlkLT5maWQsIG1vZGUp
OworCWlmIChQVFJJU0VSUihyZXEpKQorCQlyZXR1cm4gUFRSMkVSUihyZXEpOworCisJcmMgPSB1
a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJRZCIsICZmaWQtPnFpZCwgJmZpZC0+aW91bml0KTsK
Kwl1a185cGRldl9yZXFfcmVtb3ZlKGRldiwgcmVxKTsKKworCXVrX3ByX2RlYnVnKCJST1BFTiBx
aWQgdHlwZSAldSB2ZXJzaW9uICV1IHBhdGggJWx1IGlvdW5pdCAldVxuIiwKKwkJCWZpZC0+cWlk
LnR5cGUsIGZpZC0+cWlkLnZlcnNpb24sIGZpZC0+cWlkLnBhdGgsCisJCQlmaWQtPmlvdW5pdCk7
CisKKwlyZXR1cm4gcmM7Cit9CisKK2ludCB1a185cF9jcmVhdGUoc3RydWN0IHVrXzlwZGV2ICpk
ZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAorCQljb25zdCBjaGFyICpuYW1lLCB1aW50MzJfdCBw
ZXJtLCB1aW50OF90IG1vZGUsCisJCWNvbnN0IGNoYXIgKmV4dGVuc2lvbikKK3sKKwlzdHJ1Y3Qg
dWtfOXByZXEgKnJlcTsKKwlzdHJ1Y3QgdWtfOXBfc3RyIG5hbWVfc3RyOworCXN0cnVjdCB1a185
cF9zdHIgZXh0ZW5zaW9uX3N0cjsKKwlpbnQgcmM7CisKKwl1a185cF9zdHJfaW5pdCgmbmFtZV9z
dHIsIG5hbWUpOworCXVrXzlwX3N0cl9pbml0KCZleHRlbnNpb25fc3RyLCBleHRlbnNpb24pOwor
CisJdWtfcHJfZGVidWcoIlRDUkVBVEUgZmlkICV1IG5hbWUgJXMgcGVybSAldSBtb2RlICV1IGV4
dCAlc1xuIiwKKwkJCWZpZC0+ZmlkLCBuYW1lLCBwZXJtLCBtb2RlLCBleHRlbnNpb24pOworCisJ
cmVxID0gdWtfOXBkZXZfY2FsbChkZXYsIFVLXzlQX1RDUkVBVEUsIF9fUEFHRV9TSVpFLCAiZHNk
YnMiLAorCQkJZmlkLT5maWQsICZuYW1lX3N0ciwgcGVybSwgbW9kZSwgJmV4dGVuc2lvbl9zdHIp
OworCWlmIChQVFJJU0VSUihyZXEpKQorCQlyZXR1cm4gUFRSMkVSUihyZXEpOworCisJcmMgPSB1
a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJRZCIsICZmaWQtPnFpZCwgJmZpZC0+aW91bml0KTsK
Kwl1a185cGRldl9yZXFfcmVtb3ZlKGRldiwgcmVxKTsKKworCXVrX3ByX2RlYnVnKCJSQ1JFQVRF
IHFpZCB0eXBlICV1IHZlcnNpb24gJXUgcGF0aCAlbHUgaW91bml0ICV1XG4iLAorCQkJZmlkLT5x
aWQudHlwZSwgZmlkLT5xaWQudmVyc2lvbiwgZmlkLT5xaWQucGF0aCwKKwkJCWZpZC0+aW91bml0
KTsKKworCXJldHVybiByYzsKK30KKworaW50IHVrXzlwX3JlbW92ZShzdHJ1Y3QgdWtfOXBkZXYg
KmRldiwgc3RydWN0IHVrXzlwZmlkICpmaWQpCit7CisJc3RydWN0IHVrXzlwcmVxICpyZXE7CisK
KwkvKiBUaGUgZmlkIGlzIGNvbnNpZGVyZWQgaW52YWxpZCBldmVuIGlmIHRoZSByZW1vdmUgZmFp
bHMuICovCisJZmlkLT53YXNfcmVtb3ZlZCA9IDE7CisKKwl1a19wcl9kZWJ1ZygiVFJFTU9WRSBm
aWQgJXVcbiIsIGZpZC0+ZmlkKTsKKwlyZXEgPSB1a185cGRldl9jYWxsKGRldiwgVUtfOVBfVFJF
TU9WRSwgX19QQUdFX1NJWkUsICJkIiwgZmlkLT5maWQpOworCWlmIChQVFJJU0VSUihyZXEpKQor
CQlyZXR1cm4gUFRSMkVSUihyZXEpOworCisJdWtfOXBkZXZfcmVxX3JlbW92ZShkZXYsIHJlcSk7
CisJdWtfcHJfZGVidWcoIlJSRU1PVkVcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB1a185
cF9jbHVuayhzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwZmlkICpmaWQpCit7CisJ
c3RydWN0IHVrXzlwcmVxICpyZXE7CisKKwlpZiAoZmlkLT53YXNfcmVtb3ZlZCkKKwkJcmV0dXJu
IDA7CisKKwl1a19wcl9kZWJ1ZygiVENMVU5LIGZpZCAldVxuIiwgZmlkLT5maWQpOworCXJlcSA9
IHVrXzlwZGV2X2NhbGwoZGV2LCBVS185UF9UQ0xVTkssIF9fUEFHRV9TSVpFLCAiZCIsIGZpZC0+
ZmlkKTsKKwlpZiAoUFRSSVNFUlIocmVxKSkKKwkJcmV0dXJuIFBUUjJFUlIocmVxKTsKKworCXVr
XzlwZGV2X3JlcV9yZW1vdmUoZGV2LCByZXEpOworCXVrX3ByX2RlYnVnKCJSQ0xVTktcbiIpOwor
CisJcmV0dXJuIDA7Cit9CisKK2ludDY0X3QgdWtfOXBfcmVhZChzdHJ1Y3QgdWtfOXBkZXYgKmRl
diwgc3RydWN0IHVrXzlwZmlkICpmaWQsCisJCXVpbnQ2NF90IG9mZnNldCwgdWludDMyX3QgY291
bnQsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKKwlpbnQ2NF90IHJjOwor
CisJaWYgKGZpZC0+aW91bml0ICE9IDApCisJCWNvdW50ID0gTUlOKGNvdW50LCBmaWQtPmlvdW5p
dCk7CisJY291bnQgPSBNSU4oY291bnQsIGRldi0+bXNpemUgLSAxMSk7CisKKwl1a19wcl9kZWJ1
ZygiVFJFQUQgZmlkICV1IG9mZnNldCAlbHUgY291bnQgJXVcbiIsIGZpZC0+ZmlkLAorCQkJb2Zm
c2V0LCBjb3VudCk7CisKKwlyZXEgPSB1a185cGRldl9yZXFfY3JlYXRlKGRldiwgVUtfOVBfVFJF
QUQsIF9fUEFHRV9TSVpFKTsKKwlpZiAoUFRSSVNFUlIocmVxKSkKKwkJcmV0dXJuIFBUUjJFUlIo
cmVxKTsKKworCXJjID0gdWtfOXByZXFfc2VyaWFsaXplKHJlcSwgImRxZCIsIGZpZC0+ZmlkLCBv
ZmZzZXQsIGNvdW50KTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCXJjID0gdWtfOXBy
ZXFfcmVhZHkocmVxLCBVS185UFJFUV9aQ0RJUl9SRUFELCBidWYsIGNvdW50LCAxMSk7CisJaWYg
KHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlyYyA9IHVrXzlwZGV2X3JlcXVlc3QoZGV2LCByZXEp
OworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0OworCisJcmMgPSB1a185cHJlcV93YWl0cmVwbHko
cmVxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCXJjID0gdWtfOXByZXFfZGVzZXJp
YWxpemUocmVxLCAiZCIsICZjb3VudCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwl1
a19wcl9kZWJ1ZygiUlJFQUQgY291bnQgJXVcbiIsIGNvdW50KTsKKworCXJjID0gY291bnQ7CisK
K291dDoKKwl1a185cGRldl9yZXFfcmVtb3ZlKGRldiwgcmVxKTsKKwlyZXR1cm4gcmM7Cit9CisK
K2ludDY0X3QgdWtfOXBfd3JpdGUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZp
ZCAqZmlkLAorCQl1aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90IGNvdW50LCBjb25zdCBjaGFyICpi
dWYpCit7CisJc3RydWN0IHVrXzlwcmVxICpyZXE7CisJaW50NjRfdCByYzsKKworCWNvdW50ID0g
TUlOKGNvdW50LCBmaWQtPmlvdW5pdCk7CisJY291bnQgPSBNSU4oY291bnQsIGRldi0+bXNpemUg
LSAyMyk7CisKKwl1a19wcl9kZWJ1ZygiVFdSSVRFIGZpZCAldSBvZmZzZXQgJWx1IGNvdW50ICV1
XG4iLCBmaWQtPmZpZCwKKwkJCW9mZnNldCwgY291bnQpOworCXJlcSA9IHVrXzlwZGV2X3JlcV9j
cmVhdGUoZGV2LCBVS185UF9UV1JJVEUsIF9fUEFHRV9TSVpFKTsKKwlpZiAoUFRSSVNFUlIocmVx
KSkKKwkJcmV0dXJuIFBUUjJFUlIocmVxKTsKKworCXJjID0gdWtfOXByZXFfc2VyaWFsaXplKHJl
cSwgImRxZCIsIGZpZC0+ZmlkLCBvZmZzZXQsIGNvdW50KTsKKwlpZiAocmMgPCAwKQorCQlnb3Rv
IG91dDsKKworCXJjID0gdWtfOXByZXFfcmVhZHkocmVxLCBVS185UFJFUV9aQ0RJUl9XUklURSwg
KHZvaWQgKilidWYsIGNvdW50LCAyMyk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwly
YyA9IHVrXzlwZGV2X3JlcXVlc3QoZGV2LCByZXEpOworCWlmIChyYyA8IDApCisJCWdvdG8gb3V0
OworCisJcmMgPSB1a185cHJlcV93YWl0cmVwbHkocmVxKTsKKwlpZiAocmMgPCAwKQorCQlnb3Rv
IG91dDsKKworCXJjID0gdWtfOXByZXFfZGVzZXJpYWxpemUocmVxLCAiZCIsICZjb3VudCk7CisJ
aWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwl1a19wcl9kZWJ1ZygiUldSSVRFIGNvdW50ICV1
XG4iLCBjb3VudCk7CisKKwlyYyA9IGNvdW50OworCitvdXQ6CisJdWtfOXBkZXZfcmVxX3JlbW92
ZShkZXYsIHJlcSk7CisJcmV0dXJuIHJjOworfQorCitzdHJ1Y3QgdWtfOXByZXEgKnVrXzlwX3N0
YXQoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAorCQlzdHJ1Y3Qg
dWtfOXBfc3RhdCAqc3RhdCkKK3sKKwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKKwlpbnQgcmM7CisJ
dWludDE2X3QgZHVtbXk7CisKKwl1a19wcl9kZWJ1ZygiVFNUQVQgZmlkICV1XG4iLCBmaWQtPmZp
ZCk7CisJcmVxID0gdWtfOXBkZXZfY2FsbChkZXYsIFVLXzlQX1RTVEFULCBfX1BBR0VfU0laRSwg
ImQiLCBmaWQtPmZpZCk7CisJaWYgKFBUUklTRVJSKHJlcSkpCisJCXJldHVybiByZXE7CisKKwly
YyA9IHVrXzlwcmVxX2Rlc2VyaWFsaXplKHJlcSwgIndTIiwgJmR1bW15LCBzdGF0KTsKKwlpZiAo
cmMpCisJCXJldHVybiBFUlIyUFRSKHJjKTsKKwl1a19wcl9kZWJ1ZygiUlNUQVRcbiIpOworCisJ
cmV0dXJuIHJlcTsKK30KKworaW50IHVrXzlwX3dzdGF0KHN0cnVjdCB1a185cGRldiAqZGV2LCBz
dHJ1Y3QgdWtfOXBmaWQgKmZpZCwKKwkJc3RydWN0IHVrXzlwX3N0YXQgKnN0YXQpCit7CisJc3Ry
dWN0IHVrXzlwcmVxICpyZXE7CisKKwkvKgorCSAqIFRoZSBwYWNrZWQgc2l6ZSBvZiBzdGF0IGlz
IDYxIGJ5dGVzICsgdGhlIHNpemUgb2NjdXBpZWQgYnkgdGhlCisJICogc3RyaW5ncy4KKwkgKi8K
KwlzdGF0LT5zaXplID0gNjE7CisJc3RhdC0+c2l6ZSArPSBzdGF0LT5uYW1lLnNpemU7CisJc3Rh
dC0+c2l6ZSArPSBzdGF0LT51aWQuc2l6ZTsKKwlzdGF0LT5zaXplICs9IHN0YXQtPmdpZC5zaXpl
OworCXN0YXQtPnNpemUgKz0gc3RhdC0+bXVpZC5zaXplOworCXN0YXQtPnNpemUgKz0gc3RhdC0+
ZXh0ZW5zaW9uLnNpemU7CisKKwl1a19wcl9kZWJ1ZygiVFdTVEFUIGZpZCAldVxuIiwgZmlkLT5m
aWQpOworCXJlcSA9IHVrXzlwZGV2X2NhbGwoZGV2LCBVS185UF9UV1NUQVQsIF9fUEFHRV9TSVpF
LCAiZHdTIiwgZmlkLT5maWQsCisJCQlzdGF0LT5zaXplICsgMiwgc3RhdCk7CisJaWYgKFBUUklT
RVJSKHJlcSkpCisJCXJldHVybiBQVFIyRVJSKHJlcSk7CisJdWtfOXBkZXZfcmVxX3JlbW92ZShk
ZXYsIHJlcSk7CisJdWtfcHJfZGVidWcoIlJXU1RBVCIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYg
LS1naXQgYS9saWIvdWs5cC9NYWtlZmlsZS51ayBiL2xpYi91azlwL01ha2VmaWxlLnVrCmluZGV4
IGNkNGJmNGI4YTAzMy4uZWZjMGVlNzQ4YWQ0IDEwMDY0NAotLS0gYS9saWIvdWs5cC9NYWtlZmls
ZS51aworKysgYi9saWIvdWs5cC9NYWtlZmlsZS51awpAQCAtNywzICs3LDQgQEAgTElCVUs5UF9T
UkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwZGV2X3RyYW5zLmMKIExJQlVLOVBfU1JDUy15ICs9
ICQoTElCVUs5UF9CQVNFKS85cHJlcS5jCiBMSUJVSzlQX1NSQ1MteSArPSAkKExJQlVLOVBfQkFT
RSkvOXBkZXYuYwogTElCVUs5UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwZmlkLmMKK0xJ
QlVLOVBfU1JDUy15ICs9ICQoTElCVUs5UF9CQVNFKS85cC5jCmRpZmYgLS1naXQgYS9saWIvdWs5
cC9leHBvcnRzeW1zLnVrIGIvbGliL3VrOXAvZXhwb3J0c3ltcy51awppbmRleCBlYzQ2OWEyYmZm
MDMuLmFhZTllOGExMjdiNSAxMDA2NDQKLS0tIGEvbGliL3VrOXAvZXhwb3J0c3ltcy51aworKysg
Yi9saWIvdWs5cC9leHBvcnRzeW1zLnVrCkBAIC0yMCw2ICsyMCw4IEBAIHVrXzlwZGV2X2Rpc2Nv
bm5lY3QKIHVrXzlwZGV2X3JlcXVlc3QKIHVrXzlwZGV2X3htaXRfbm90aWZ5CiB1a185cGRldl9j
YWxsCit1a185cGRldl9zZXRfbXNpemUKK3VrXzlwZGV2X2dldF9tc2l6ZQogCiB1a185cGRldl9y
ZXFfY3JlYXRlCiB1a185cGRldl9yZXFfbG9va3VwCkBAIC0zMSwzICszMywxNiBAQCB1a185cGRl
dl9nZXRfbXNpemUKIHVrXzlwZGV2X2ZpZF9jcmVhdGUKIHVrXzlwZmlkX2dldAogdWtfOXBmaWRf
cHV0CisKK3VrXzlwX3ZlcnNpb24KK3VrXzlwX2F0dGFjaAordWtfOXBfZmx1c2gKK3VrXzlwX3dh
bGsKK3VrXzlwX29wZW4KK3VrXzlwX2NyZWF0ZQordWtfOXBfcmVtb3ZlCit1a185cF9jbHVuawor
dWtfOXBfcmVhZAordWtfOXBfd3JpdGUKK3VrXzlwX3N0YXQKK3VrXzlwX3dzdGF0CmRpZmYgLS1n
aXQgYS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwLmggYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41OWQxOGQ5ZDAzYzkKLS0t
IC9kZXYvbnVsbAorKysgYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwLmgKQEAgLTAsMCArMSwyNjUg
QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBB
dXRob3JzOiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgorICoKKyAqIENvcHlyaWdo
dCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
Y29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1Ig
TU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworI2lmbmRlZiBfX1VLXzlQX18KKyNkZWZpbmUgX19V
S185UF9fCisKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlIDx1ay85cF9j
b3JlLmg+CisjaW5jbHVkZSA8dWsvOXBkZXYuaD4KKyNpbmNsdWRlIDx1ay85cHJlcS5oPgorI2lu
Y2x1ZGUgPHVrLzlwZmlkLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7Cisj
ZW5kaWYKKworLyoqCisgKiBOZWdvdGlhdGVzIHRoZSB2ZXJzaW9uIGFuZCBpcyB0aGUgZmlyc3Qg
bWVzc2FnZSBpbiBhIDlQIHNlc3Npb24uCisgKgorICogQHBhcmFtIGRldgorICogICBUaGUgVW5p
a3JhZnQgOVAgRGV2aWNlLgorICogQHBhcmFtIHJlcXVlc3RlZAorICogICBSZXF1ZXN0ZWQgdmVy
c2lvbiBzdHJpbmcuCisgKiBAcGFyYW0gcmVjZWl2ZWQKKyAqICAgUmVjZWl2ZWQgdmVyc2lvbiBz
dHJpbmcuCisgKiBAcmV0dXJuCisgKiAgIC0gKCFFUlJQVFIpOiBUaGUgcmVxdWVzdC4gSXQgbXVz
dCBiZSByZW1vdmVkIG9ubHkgYWZ0ZXIgYWxsIGFjY2Vzc2VzIHRvCisgKiAgIHRoZSByZWNlaXZl
ZCB2ZXJzaW9uIHN0cmluZyBhcmUgZG9uZS4KKyAqICAgLSBFUlJQVFI6IFRoZSBlcnJvciByZXR1
cm5lZCBlaXRoZXIgYnkgdGhlIEFQSSBvciBieSB0aGUgcmVtb3RlIHNlcnZlci4KKyAqLworc3Ry
dWN0IHVrXzlwcmVxICp1a185cF92ZXJzaW9uKHN0cnVjdCB1a185cGRldiAqZGV2LAorCQljb25z
dCBjaGFyICpyZXF1ZXN0ZWQsIHN0cnVjdCB1a185cF9zdHIgKnJlY2VpdmVkKTsKKworLyoqCisg
KiBBdHRhY2hlcyB0byBhIGZpbGVzeXN0ZW0gdHJlZSBleHBvcnRlZCBieSB0aGUgOVAgc2VydmVy
LCByZXR1cm5pbmcgdGhlCisgKiBmaWQgb2YgdGhlIHJvb3QgZGlyZWN0b3J5LgorICoKKyAqIEBw
YXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KKyAqIEBwYXJhbSBhZmlkCisg
KiAgIEF1dGhlbnRpY2F0aW9uIGZpZCwgdXN1YWxseSBVS185UF9OT0ZJRC4KKyAqIEBwYXJhbSB1
bmFtZQorICogICBVc2VyIG5hbWUsIGNhbiBiZSBlbXB0eSBzdHJpbmcgZm9yIHZpcnRpby94ZW4u
CisgKiBAcGFyYW0gYW5hbWUKKyAqICAgVGhlIGZpbGUgdHJlZSB0byBhY2Nlc3MsIGNhbiBiZSBs
ZWZ0IGVtcHR5IGZvciB2aXJ0aW8veGVuLgorICogQHBhcmFtIG5fdW5hbWUKKyAqICAgTnVtZXJp
YyB1bmFtZSwgcGFydCBvZiB0aGUgOVAyMDAwLnUgdW5peCBleHRlbnNpb24gdG8gdGhlIHByb3Rv
Y29sLgorICogQHJldHVybgorICogICAtICghRVJSUFRSKTogVGhlIGZpZCBvZiB0aGUgcm9vdCBk
aXJlY3RvcnkgaW4gdGhlIGFjY2Vzc2VkIGZpbGUgdHJlZS4KKyAqICAgLSBFUlJQVFI6IFRoZSBl
cnJvciByZXR1cm5lZCBlaXRoZXIgYnkgdGhlIEFQSSBvciBieSB0aGUgcmVtb3RlIHNlcnZlci4K
KyAqLworc3RydWN0IHVrXzlwZmlkICp1a185cF9hdHRhY2goc3RydWN0IHVrXzlwZGV2ICpkZXYs
IHVpbnQzMl90IGFmaWQsCisJCWNvbnN0IGNoYXIgKnVuYW1lLCBjb25zdCBjaGFyICphbmFtZSwg
dWludDMyX3Qgbl91bmFtZSk7CisKKy8qKgorICogRmx1c2hlcyB0aGUgZ2l2ZW4gcmVxdWVzdCB0
YWcsIGNhbmNlbGluZyB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0IGlmCisgKiB0aGUgc2VydmVy
IGhhcyBub3QgeWV0IHJlcGxpZWQgdG8gaXQuCisgKgorICogQHBhcmFtIGRldgorICogICBUaGUg
VW5pa3JhZnQgOVAgRGV2aWNlLgorICogQHBhcmFtIG9sZHRhZworICogICBSZXF1ZXN0IHRhZy4K
KyAqIEByZXR1cm4KKyAqICAgLSAwOiBTdWNjZXNzZnVsLgorICogICAtICg8IDApOiBBbiBlcnJv
ciBvY2N1cnJlZC4KKyAqLworaW50IHVrXzlwX2ZsdXNoKHN0cnVjdCB1a185cGRldiAqZGV2LCB1
aW50MTZfdCBvbGR0YWcpOworCisvKioKKyAqIFdhbGtzIHRoZSBmaWxlc3lzdGVtIHRyZWUgZnJv
bSB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGZpZCwgYXR0ZW1wdGluZyB0byBvYnRhaW4KKyAqIHRoZSBm
aWQgZm9yIHRoZSBjaGlsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLgorICoKKyAqIEBwYXJhbSBkZXYK
KyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KKyAqIEBwYXJhbSBmaWQKKyAqICAgRGlyZWN0
b3J5IGZpZC4KKyAqIEBwYXJhbSBuYW1lCisgKiAgIEZpbGUgbmFtZS4KKyAqIEByZXR1cm4KKyAq
ICAgLSAoIUVSUlBUUik6IFRoZSBmaWQgb2YgdGhlIGNoaWxkIGVudHJ5LgorICogICAtIEVSUlBU
UjogVGhlIGVycm9yIHJldHVybmVkIGVpdGhlciBieSB0aGUgQVBJIG9yIGJ5IHRoZSByZW1vdGUg
c2VydmVyLgorICovCitzdHJ1Y3QgdWtfOXBmaWQgKnVrXzlwX3dhbGsoc3RydWN0IHVrXzlwZGV2
ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAorCQljb25zdCBjaGFyICpuYW1lKTsKKworLyoq
CisgKiBPcGVucyB0aGUgZmlkIHdpdGggdGhlIGdpdmVuIG1vZGUuCisgKgorICogQHBhcmFtIGRl
dgorICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgorICogQHBhcmFtIGZpZAorICogICA5UCBm
aWQuCisgKiBAcGFyYW0gbW9kZQorICogICA5UCBvcGVuIG1vZGUuCisgKiBAcmV0dXJuCisgKiAg
IC0gMDogU3VjY2Vzc2Z1bC4KKyAqICAgLSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQuCisgKi8K
K2ludCB1a185cF9vcGVuKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZp
ZCwgdWludDhfdCBtb2RlKTsKKworLyoqCisgKiBDcmVhdGVzIGEgbmV3IGZpbGUgd2l0aCB0aGUg
Z2l2ZW4gbmFtZSBpbiB0aGUgZGlyZWN0b3J5IGFzc29jaWF0ZWQgd2l0aCBmaWQsCisgKiBhbmQg
YXNzb2NpYXRlcyBmaWQgd2l0aCB0aGUgbmV3bHkgY3JlYXRlZCBmaWxlLCBvcGVuaW5nIGl0IHdp
dGggdGhlIGdpdmVuCisgKiBtb2RlLgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWty
YWZ0IDlQIERldmljZS4KKyAqIEBwYXJhbSBmaWQKKyAqICAgOVAgZGlyZWN0b3J5IGZpZC4KKyAq
IEBwYXJhbSBuYW1lCisgKiAgIE5hbWUgb2YgdGhlIGNyZWF0ZWQgZmlsZS4KKyAqIEBwYXJhbSBw
ZXJtCisgKiAgIDlQIHBlcm1pc3Npb24gYml0cy4KKyAqIEBwYXJhbSBtb2RlCisgKiAgIDlQIG9w
ZW4gbW9kZS4KKyAqIEBwYXJhbSBleHRlbnNpb24KKyAqICAgU3RyaW5nIGRlc2NyaWJpbmcgc3Bl
Y2lhbCBmaWxlcywgZGVwZW5kaW5nIG9uIHRoZSBtb2RlIGJpdC4KKyAqIEByZXR1cm4KKyAqICAg
LSAwOiBTdWNjZXNzZnVsLgorICogICAtICg8IDApOiBBbiBlcnJvciBvY2N1cnJlZC4KKyAqLwor
aW50IHVrXzlwX2NyZWF0ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwZmlkICpm
aWQsCisJCWNvbnN0IGNoYXIgKm5hbWUsIHVpbnQzMl90IHBlcm0sIHVpbnQ4X3QgbW9kZSwKKwkJ
Y29uc3QgY2hhciAqZXh0ZW5zaW9uKTsKKworLyoqCisgKiBSZW1vdmVzIHRoZSBmaWxlIGFzc29j
aWF0ZWQgd2l0aCBmaWQuCisgKgorICogQHBhcmFtIGRldgorICogICBUaGUgVW5pa3JhZnQgOVAg
RGV2aWNlLgorICogQHBhcmFtIGZpZAorICogICA5UCBmaWQgdG8gcmVtb3ZlLgorICogQHJldHVy
bgorICogICAtIDA6IFN1Y2Nlc3NmdWwuCisgKiAgIC0gKDwgMCk6IEFuIGVycm9yIG9jY3VycmVk
LgorICovCitpbnQgdWtfOXBfcmVtb3ZlKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtf
OXBmaWQgKmZpZCk7CisKKy8qKgorICogQ2x1bmtzIHRoZSBmaWQsIHRlbGxpbmcgdGhlIHNlcnZl
ciB0byBmb3JnZXQgaXRzIHByZXZpb3VzIGFzc29jaWF0aW9uLgorICoKKyAqIEBwYXJhbSBkZXYK
KyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KKyAqIEBwYXJhbSBmaWQKKyAqICAgOVAgZmlk
IHRvIGNsdW5rLgorICogQHJldHVybgorICogICAtIDA6IFN1Y2Nlc3NmdWwuCisgKiAgIC0gKDwg
MCk6IEFuIGVycm9yIG9jY3VycmVkLgorICovCitpbnQgdWtfOXBfY2x1bmsoc3RydWN0IHVrXzlw
ZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkKTsKKworLyoqCisgKiBSZWFkcyBjb3VudCBi
eXRlcyBmcm9tIHRoZSBmaWQsIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIG9mZnNldCwgcGxhY2lu
ZworICogdGhlbSBpbnRvIHRoZSBidWZmZXIuIEFzIGluIHRoZSBjYXNlIG9mIFBPU0lYIHJlYWQo
KSwgdGhlIG51bWJlciBvZgorICogYnl0ZXMgcmVhZCBtYXkgYmUgbGVzcyB0aGFuIGNvdW50LCB3
aGljaCBpcyBub3QgYW4gZXJyb3IsIGJ1dCByYXRoZXIKKyAqIHNpZ25hbHMgdGhhdCB0aGUgb2Zm
c2V0IGlzIGNsb3NlIHRvIEVPRiBvciBjb3VudCBpcyB0b28gYmlnIGZvciB0aGUKKyAqIHRyYW5z
cG9ydCBvZiB0aGlzIDlQIGRldmljZS4gQSByZXR1cm4gdmFsdWUgb2YgMCBpbmRpY2F0ZXMgZW5k
IG9mCisgKiBmaWxlLgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERl
dmljZS4KKyAqIEBwYXJhbSBmaWQKKyAqICAgOVAgZmlkIHRvIHJlYWQgZnJvbS4KKyAqIEBwYXJh
bSBvZmZzZXQKKyAqICAgT2Zmc2V0IGF0IHdoaWNoIHRvIHN0YXJ0IHJlYWRpbmcuCisgKiBAcGFy
YW0gY291bnQKKyAqICAgTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqIEBwYXJh
bSBidWYKKyAqICAgQnVmZmVyIHRvIHJlYWQgaW50by4KKyAqIEByZXR1cm4KKyAqICAgLSAoPj0g
MCk6IEFtb3VudCBvZiBieXRlcyByZWFkLgorICogICAtICg8IDApOiBBbiBlcnJvciBvY2N1cnJl
ZC4KKyAqLworaW50NjRfdCB1a185cF9yZWFkKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3Qg
dWtfOXBmaWQgKmZpZCwKKwkJdWludDY0X3Qgb2Zmc2V0LCB1aW50MzJfdCBjb3VudCwgY2hhciAq
YnVmKTsKKworLyoqCisgKiBXcml0ZXMgY291bnQgYnl0ZXMgZnJvbSBidWYgdG8gdGhlIGZpZCwg
c3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4gb2Zmc2V0LgorICoKKyAqIEBwYXJhbSBkZXYKKyAqICAg
VGhlIFVuaWtyYWZ0IDlQIERldmljZS4KKyAqIEBwYXJhbSBmaWQKKyAqICAgOVAgZmlkIHRvIHdy
aXRlIHRvLgorICogQHBhcmFtIG9mZnNldAorICogICBPZmZzZXQgYXQgd2hpY2ggdG8gc3RhcnQg
d3JpdGluZy4KKyAqIEBwYXJhbSBjb3VudAorICogICBNYXhpbXVtIG51bWJlciBvZiBieXRlcyB0
byB3cml0ZS4KKyAqIEBwYXJhbSBidWYKKyAqICAgRGF0YSB0byBiZSB3cml0dGVuLgorICogQHJl
dHVybgorICogICAtICg+PSAwKTogQW1vdW50IG9mIGJ5dGVzIHdyaXR0ZW4uCisgKiAgIC0gKDwg
MCk6IEFuIGVycm9yIG9jY3VycmVkLgorICovCitpbnQ2NF90IHVrXzlwX3dyaXRlKHN0cnVjdCB1
a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKKwkJdWludDY0X3Qgb2Zmc2V0LCB1
aW50MzJfdCBjb3VudCwgY29uc3QgY2hhciAqYnVmKTsKKworLyoqCisgKiBTdGF0cyB0aGUgZ2l2
ZW4gZmlkIGFuZCBwbGFjZXMgdGhlIGRhdGEgaW50byB0aGUgZ2l2ZW4gc3RhdCBzdHJ1Y3R1cmUu
CisgKgorICogQHBhcmFtIGRldgorICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgorICogQHBh
cmFtIGZpZAorICogICA5UCBmaWQgdG8gc3RhdC4KKyAqIEBwYXJhbSBzdGF0CisgKiAgIFdoZXJl
IHRvIHN0b3JlIHRoZSBzdGF0IHJlc3VsdHMuCisgKiBAcmV0dXJuCisgKiAgIC0gKCFFUlJQVFIp
OiBUaGUgcmVxdWVzdC4gSXQgbXVzdCBiZSByZW1vdmVkIG9ubHkgYWZ0ZXIgYWxsIGFjY2Vzc2Vz
IHRvCisgKiAgIHRoZSBzdHJpbmdzIGluIHRoZSBzdGF0IHN0cnVjdHVyZSBhcmUgb3Zlci4KKyAq
ICAgLSBFUlJQVFI6IFRoZSBlcnJvciByZXR1cm5lZCBlaXRoZXIgYnkgdGhlIEFQSSBvciBieSB0
aGUgcmVtb3RlIHNlcnZlci4KKyAqLworc3RydWN0IHVrXzlwcmVxICp1a185cF9zdGF0KHN0cnVj
dCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKKwkJc3RydWN0IHVrXzlwX3N0
YXQgKnN0YXQpOworCisvKioKKyAqIENoYW5nZXMgdGhlIGZpbGUgYXR0cmlidXRlcyBvZiBhIGdp
dmVuIGZpZC4KKyAqCisgKiBAcGFyYW0gZGV2CisgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2Uu
CisgKiBAcGFyYW0gZmlkCisgKiAgIDlQIGZpZCB0byBjbHVuay4KKyAqIEByZXR1cm4KKyAqICAg
LSAwOiBTdWNjZXNzZnVsLgorICogICAtICg8IDApOiBBbiBlcnJvciBvY2N1cnJlZC4KKyAqLwor
aW50IHVrXzlwX3dzdGF0KHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZp
ZCwKKwkJc3RydWN0IHVrXzlwX3N0YXQgKnN0YXQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30K
KyNlbmRpZgorCisjZW5kaWYgLyogX19VS185UF9fICovCi0tIAoyLjExLjAKCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:23:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:23:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qnk-0007ZD-4Z; Thu, 05 Sep 2019 12:23:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qni-0007Z6-PA
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:23:46 +0000
X-Inumbo-ID: 00f377d8-cfd8-11e9-b299-bc764e2007e4
Received: from mail-lf1-x141.google.com (unknown [2a00:1450:4864:20::141])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 00f377d8-cfd8-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 12:23:45 +0000 (UTC)
Received: by mail-lf1-x141.google.com with SMTP id z21so1872156lfe.1
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:23:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=mS520Yfm406RPJPXI0DsEx/mouMGwOQFYGGhGp4zUks=;
 b=pYpZQ3Te4suwXWIJLVfvw6nYWPtB5njqNSkz0rOqo7lCEpy6QYDy5VBbCKkJ1vMqvQ
 em04Jvej8DJR9EcVQ3UGZjllWVXyWxF5HdaKR6niaXQnz4hY22EnqLmV29R/X1Tcso7W
 lsUopoDUfMuSfk8cfysNEskZSV6CQeBJ9yQUQ3p1x/0zo97aLsHA7B4s49AT8zlrbVzJ
 q7VtpNxjMC1QbIiC9wy13TaBiu357MVscYBCQQm0/PtGC9JKPpwUnKA/dk8ZBH560v1u
 z1ekXu8ZMzPGvTfE+pbcNpaPha54fPbFWow1ToiF9Y9OmwGuqLa7fzhyMTsGvm7cE7D2
 dg4g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=mS520Yfm406RPJPXI0DsEx/mouMGwOQFYGGhGp4zUks=;
 b=KWKQ5ZCZyR2aNKiU8bmAf7qEq5OmkgBQg3wA4VR6UWGesekkvM+qo1bt325XsfHWg0
 MuaiR6T+JJrpDFxjAjCdQn0yqqCcnzKzVhCYeUmRxFUBE+imnPJN5F3c+aIAZrJXjdcq
 fuaBOelI7OHq9mghyuVpUY4lZf+7TCgSgIukblRNBMEQd3YOWdRerKTLf0TQ+TVSVELq
 EPCVCWoAev3wxokD5wILcQ7xf2tKEK3CvVwVXjmbm9gYkbIkocKgJrAAEmoMcQxab26r
 0JflMD4EcsdKe1Zshj6Pq/Bi1YdVM1TbXDuX4O1/2AhzDn+hiR9VJoCoTi+shSj5D8nj
 u/EQ==
X-Gm-Message-State: APjAAAViCxccV0fHJzuuRTyqga4FgOt32xOyoSrp8h+6YwdfbTEXJ4Gs
 DBHcJEG1l4tzitOY5/GqlSgwuorhTdqQXYWcGvE=
X-Google-Smtp-Source: APXvYqxL/M7IYDS8VkBrsFd3u67WMPAUKHqScHMlCy/cVF54bkf9a03C6agIomLUXz1R7XsYVROunHZph+z/vVdrGRw=
X-Received: by 2002:a19:5215:: with SMTP id m21mr2212001lfb.89.1567686224222; 
 Thu, 05 Sep 2019 05:23:44 -0700 (PDT)
MIME-Version: 1.0
References: <20190629085608.15680-1-cristb@gmail.com>
 <20190629085608.15680-3-cristb@gmail.com>
 <5b4b52e7-3497-4e58-f3ed-2420f31b50a1@neclab.eu>
In-Reply-To: <5b4b52e7-3497-4e58-f3ed-2420f31b50a1@neclab.eu>
From: Cristian Banu <cristb@gmail.com>
Date: Thu, 5 Sep 2019 15:23:32 +0300
Message-ID: <CAFJttSWk+ND3XRGEU7a8xS2F2Gpj10ystRbrBGgH3=FR1_HcAA@mail.gmail.com>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 2/8] lib/uk9p: Add 9P
 transport registration
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpJIGFwcGxpZWQgeW91ciBzdWdnZXN0aW9ucyByZWdhcmRpbmcgdGhlIGRlZmF1
bHQgdHJhbnNwb3J0IGluIHYzLgoKVGhhbmtzIQpDcmlzdGlhbgoKT24gU2F0LCBKdW4gMjksIDIw
MTkgYXQgMToyOSBQTSBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4gd3Jv
dGU6Cj4KPiBIZXksCj4KPiB0aGFua3MgYSBsb3QgZm9yIHRoaXMgcGF0Y2guIEkgc3RpbGwgaGF2
ZSBzb21lIGNvbW1lbnRzIHRvIHRoZSBkZWZhdWx0Cj4gdHJhbnNwb3J0IHNldHRpbmcuIEkgY29t
bWVudGVkIGl0IGlubGluZS4KPgo+IFRoYW5rcywKPgo+IFNpbW9uCj4KPiBPbiAyOS4wNi4xOSAx
MDo1NiwgQ3Jpc3RpYW4gQmFudSB3cm90ZToKPiA+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUg
OVAgdHJhbnNwb3J0IHJlZ2lzdHJhdGlvbiBhbmQgbG9va3VwIEFQSS4KPiA+Cj4gPiBUcmFuc3Bv
cnRzIGFyZSBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIHN1Y2ggYXMgdmlydGlvIGJ5IHVzaW5nIHRo
ZQo+ID4gdmlydGlvLTlwIGRldmljZSwgb3IgeGVuIHJpbmdzLiBUaG9zZSBhcmUgdGhlIGRlZmF1
bHQgdHJhbnNwb3J0cwo+ID4gZm9yIHRoZSBLVk0gYW5kIFhlbiBwbGF0Zm9ybXMgcmVzcGVjdGl2
ZWx5LiBIb3dldmVyLCBpbiB0aGUgZnV0dXJlCj4gPiBvbmUgbWlnaHQgaGF2ZSBtdWx0aXBsZSBh
dmFpbGFibGUgdHJhbnNwb3J0cyBmb3IgdGhlIHNhbWUgcGxhdGZvcm0KPiA+IGJ5IHN1cHBvcnRp
bmcgVENQIG9yIFJETUEuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jp
c3RiQGdtYWlsLmNvbT4KPiA+IC0tLQo+ID4gICBsaWIvdWs5cC85cGRldl90cmFucy5jICAgICAg
ICAgICAgfCA3NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgIGxpYi91azlw
L01ha2VmaWxlLnVrICAgICAgICAgICAgICB8ICAyICsKPiA+ICAgbGliL3VrOXAvZXhwb3J0c3lt
cy51ayAgICAgICAgICAgIHwgIDMgKysKPiA+ICAgbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl90
cmFucy5oIHwgOTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gPiAg
IDQgZmlsZXMgY2hhbmdlZCwgMTc3IGluc2VydGlvbnMoKykKPiA+ICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IGxpYi91azlwLzlwZGV2X3RyYW5zLmMKPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91
azlwL2V4cG9ydHN5bXMudWsKPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1
ZGUvdWsvOXBkZXZfdHJhbnMuaAo+ID4KPiA+IGRpZmYgLS1naXQgYS9saWIvdWs5cC85cGRldl90
cmFucy5jIGIvbGliL3VrOXAvOXBkZXZfdHJhbnMuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK
PiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjM3Mjg3Njc2NWIyCj4gPiAtLS0gL2Rldi9udWxsCj4g
PiArKysgYi9saWIvdWs5cC85cGRldl90cmFucy5jCj4gPiBAQCAtMCwwICsxLDc2IEBACj4gPiAr
LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLwo+ID4gKy8qCj4gPiAr
ICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiA+ICsgKgo+ID4g
KyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJl
c3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gPiArICoKPiA+ICsgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPiA+ICsg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKPiA+ICsgKiBhcmUgbWV0Ogo+ID4gKyAqCj4gPiArICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiA+
ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCj4gPiArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiA+ICsgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4g
PiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KPiA+ICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBj
b3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCj4gPiArICogICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KPiA+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgo+ID4gKyAqCj4gPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gPiArICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQo+ID4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCj4gPiArICogQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRS
SUJVVE9SUyBCRQo+ID4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiA+ICsgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+ID4gKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwo+ID4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gPiArICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKPiA+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ID4gKyAqIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgo+ID4gKyAqCj4gPiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNU
RUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaW5jbHVkZSA8
ZXJybm8uaD4KPiA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gPiArI2luY2x1ZGUgPHVrL2NvbmZp
Zy5oPgo+ID4gKyNpbmNsdWRlIDx1ay9saXN0Lmg+Cj4gPiArI2luY2x1ZGUgPHVrL2Fzc2VydC5o
Pgo+ID4gKyNpbmNsdWRlIDx1ay85cGRldl90cmFucy5oPgo+ID4gKwo+ID4gK3N0YXRpYyBVS19M
SVNUX0hFQUQodWtfOXBkZXZfdHJhbnNfbGlzdCk7Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCB1
a185cGRldl90cmFucyAqdWtfOXBkZXZfdHJhbnNfc2F2ZWRfZGVmYXVsdDsKPiA+ICsKPiA+ICtp
bnQgdWtfOXBkZXZfdHJhbnNfcmVnaXN0ZXIoc3RydWN0IHVrXzlwZGV2X3RyYW5zICp0cmFucykK
PiA+ICt7Cj4gPiArICAgICBVS19BU1NFUlQodHJhbnMpOwo+ID4gKyAgICAgVUtfQVNTRVJUKHRy
YW5zLT5uYW1lKTsKPiA+ICsgICAgIFVLX0FTU0VSVCh0cmFucy0+YSk7Cj4gPiArCj4gPiArICAg
ICB1a19saXN0X2FkZF90YWlsKCZ0cmFucy0+X2xpc3QsICZ1a185cGRldl90cmFuc19saXN0KTsK
PiA+ICsgICAgIGlmICh0cmFucy0+aXNfZGVmYXVsdCkKPiA+ICsgICAgICAgICAgICAgdWtfOXBk
ZXZfdHJhbnNfc2F2ZWRfZGVmYXVsdCA9IHRyYW5zOwo+Cj4gSHVtLiBJIHdvdWxkIHByZWZlciBw
cm92aWRpbmcgYSBzZXR0ZXIgZnVuY3Rpb24gZm9yIHRoZSBkZWZhdWx0Cj4gdHJhbnNwb3J0IGlu
c3RlYWQgb2YgaGF2aW5nIHRoZSAnaXNfZGVmYXVsdCcgYm9vbGVhbiBpbiB0aGUgc3RydWN0LiBJ
dAo+IG1heSBnZXQgbGVzcyBjbGVhciBieSBqdXN0IHNlZWluZyB0aGUgQVBJIHdoYXQgaXMgZ29p
bmcgb24gaWYgbXVsdGlwbGUKPiB0cmFuc3BvcnRzIGFyZSBzZXR0aW5nIHRoZW1zZWx2ZXMgYXMg
ZGVmYXVsdCBkdXJpbmcgcmVnaXN0cmF0aW9uLgo+Cj4gSSB3b3VsZCB0YWtlIGp1c3QgdGhlIGZp
cnN0IHJlZ2lzdHJhdGlvbiBhbmQgdGhlbiB1cGRhdGUgdGhlCj4gc2F2ZWRfZGVmYXVsdCB3aXRo
IG9uIGFuIGRlZmF1bHQgc2V0dGVyIGZ1bmN0aW9uLiBXaGF0IGRvIHlvdSB0aGluaz8KPgo+ID4g
Kwo+ID4gKyAgICAgdWtfcHJfaW5mbygiUmVnaXN0ZXJlZCB0cmFuc3BvcnQgJXNcbiIsIHRyYW5z
LT5uYW1lKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdHJ1
Y3QgdWtfOXBkZXZfdHJhbnMgKnVrXzlwZGV2X3RyYW5zX2J5X25hbWUoY29uc3QgY2hhciAqbmFt
ZSkKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnQ7Cj4gPiArCj4gPiAr
ICAgICB1a19saXN0X2Zvcl9lYWNoX2VudHJ5KHQsICZ1a185cGRldl90cmFuc19saXN0LCBfbGlz
dCkgewo+ID4gKyAgICAgICAgICAgICBpZiAoIXN0cmNtcCh0LT5uYW1lLCBuYW1lKSkKPiA+ICsg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAg
IHJldHVybiBOVUxMOwo+ID4gK30KPiA+ICsKPiA+ICtzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnVr
XzlwZGV2X3RyYW5zX2RlZmF1bHQodm9pZCkKPiA+ICt7Cj4gPiArICAgICByZXR1cm4gdWtfOXBk
ZXZfdHJhbnNfc2F2ZWRfZGVmYXVsdDsKPiA+ICt9Cj4KPiBJZiB5b3UgYWRkIGEgdWtfOXBkZXZf
dHJhbnNfc2V0X2RlZmF1bHQoKSwgSSB3b3VsZCBwcmVmZXIgY2FsbGluZyB0aGlzCj4gb25lIHRo
ZW4gdWtfOXBkZXZfdHJhbnNfZ2V0X2RlZmF1bHQoKS4KPgo+ID4gZGlmZiAtLWdpdCBhL2xpYi91
azlwL01ha2VmaWxlLnVrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsKPiA+IGluZGV4IGZhNzU0NDQw
NTk4Yy4uYjEwNzFhMGU3ZDNjIDEwMDY0NAo+ID4gLS0tIGEvbGliL3VrOXAvTWFrZWZpbGUudWsK
PiA+ICsrKyBiL2xpYi91azlwL01ha2VmaWxlLnVrCj4gPiBAQCAtMiwzICsyLDUgQEAgJChldmFs
ICQoY2FsbCBhZGRsaWJfcyxsaWJ1azlwLCQoQ09ORklHX0xJQlVLOVApKSkKPiA+Cj4gPiAgIENJ
TkNMVURFUy0kKENPTkZJR19MSUJVSzlQKSAgICAgICAgICs9IC1JJChMSUJVSzlQX0JBU0UpL2lu
Y2x1ZGUKPiA+ICAgQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUs5UCkgICAgICAgICAgICAgICAr
PSAtSSQoTElCVUs5UF9CQVNFKS9pbmNsdWRlCj4gPiArCj4gPiArTElCVUs5UF9TUkNTLXkgKz0g
JChMSUJVSzlQX0JBU0UpLzlwZGV2X3RyYW5zLmMKPiA+IGRpZmYgLS1naXQgYS9saWIvdWs5cC9l
eHBvcnRzeW1zLnVrIGIvbGliL3VrOXAvZXhwb3J0c3ltcy51awo+ID4gbmV3IGZpbGUgbW9kZSAx
MDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNDVmNDg3ZGEyZmZmCj4gPiAtLS0gL2Rldi9u
dWxsCj4gPiArKysgYi9saWIvdWs5cC9leHBvcnRzeW1zLnVrCj4gPiBAQCAtMCwwICsxLDMgQEAK
PiA+ICt1a185cGRldl90cmFuc19yZWdpc3Rlcgo+ID4gK3VrXzlwZGV2X3RyYW5zX2J5X25hbWUK
PiA+ICt1a185cGRldl90cmFuc19kZWZhdWx0Cj4gPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5j
bHVkZS91ay85cGRldl90cmFucy5oIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl90cmFucy5o
Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi43YjY2NDVm
YjVlODQKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBk
ZXZfdHJhbnMuaAo+ID4gQEAgLTAsMCArMSw5NiBAQAo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiA+ICsvKgo+ID4gKyAqIEF1dGhvcnM6IENyaXN0aWFu
IEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gPiArICoKPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIw
MTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgo+ID4gKyAqCj4gPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gPiArICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gPiArICog
YXJlIG1ldDoKPiA+ICsgKgo+ID4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gPiArICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ID4gKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Cj4gPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQo+ID4gKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Cj4gPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3Ig
dGhlIG5hbWVzIG9mIGl0cwo+ID4gKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCj4gPiArICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiA+ICsg
Kgo+ID4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ID4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiA+
ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ID4gKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiA+ICsgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCj4gPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiA+ICsgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiA+
ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgo+ID4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gPiArICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUKPiA+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiA+ICsgKgo+
ID4gKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFO
WSBXQVkuCj4gPiArICovCj4gPiArCj4gPiArI2lmbmRlZiBfX1VLXzlQREVWX1RSQU5TX18KPiA+
ICsjZGVmaW5lIF9fVUtfOVBERVZfVFJBTlNfXwo+ID4gKwo+ID4gKyNpbmNsdWRlIDxzdGRib29s
Lmg+Cj4gPiArI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgo+ID4gKwo+ID4gKyNpZmRlZiBfX2NwbHVz
cGx1cwo+ID4gK2V4dGVybiAiQyIgewo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKy8qKiBBIHN0cnVj
dHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgdHJhbnNwb3J0LiAqLwo+ID4gK3N0cnVjdCB1a185cGRl
dl90cmFucyB7Cj4gPiArICAgICAvKgo+ID4gKyAgICAgICogVHJhbnNwb3J0IG5hbWUgKGUuZy4g
InZpcnRpbyIsICJ4ZW4iKS4gVGhpcyBmaWVsZCBpcyByZXNlcnZlZCBmb3IKPiA+ICsgICAgICAq
IGZ1dHVyZSB1c2UsIHdoZW4gbXVsdGlwbGUgdHJhbnNwb3J0IG9wdGlvbnMgYXJlIGF2YWlsYWJs
ZSBvbiB0aGUKPiA+ICsgICAgICAqIHNhbWUgcGxhdGZvcm0sIHN1Y2ggYXMgUkRNQSBvciBUQ1As
IGluIGFkZGl0aW9uIHRvIHRoZSBwbGF0Zm9ybQo+ID4gKyAgICAgICogc3BlY2lmaWMgdHJhbnNw
b3J0Lgo+ID4gKyAgICAgICovCj4gPiArICAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKm5hbWU7Cj4gPiArICAgICAvKiBDYW4gdGhlIHRyYW5zcG9ydCBiZSB1c2Vk
IGFzIGEgZGVmYXVsdCBvbmU/ICovCj4gPiArICAgICBib29sICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaXNfZGVmYXVsdAo+Cj4gU2VlIG15IGNvbW1lbnRzIGFoZWFkIHJlZ2Fy
ZGluZyB0aGlzIGJvb2xlYW4uIEkgd291bGQgbGlrZSB0byBoYXZlIGEKPiBtb3JlIGV4cGxpY2l0
IGNvbnRyb2wgb3ZlciBzZXR0aW5nIGEgZGVmYXVsdCB0cmFuc3BvcnQgcmF0aGVyIHRoZW4gdGhl
Cj4gbGlicmFyeSBkZWNpZGluZyB3aGF0IHRvIGRvLgo+Cj4gPiArICAgICAvKiBBbGxvY2F0b3Ig
dXNlZCBmb3IgZGV2aWNlcyB3aGljaCB1c2UgdGhpcyB0cmFuc3BvcnQgbGF5ZXIuICovCj4gPiAr
ICAgICBzdHJ1Y3QgdWtfYWxsb2MgICAgICAgICAgICAgICAgICAgICAgICAgKmE7Cj4gPiArICAg
ICAvKiBAaW50ZXJuYWwgRW50cnkgaW4gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRyYW5zcG9ydHMu
ICovCj4gPiArICAgICBzdHJ1Y3QgdWtfbGlzdF9oZWFkICAgICAgICAgICAgICAgICAgICAgX2xp
c3Q7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBBZGRzIGEgdHJhbnNwb3J0IHRvIHRo
ZSBhdmFpbGFibGUgdHJhbnNwb3J0cyBsaXN0IGZvciBVbmlrcmFmdCA5UCBEZXZpY2VzLgo+ID4g
KyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHBlciBkcml2ZXIgKG9uY2UgZm9yIHZpcnRp
bywgb25jZSBmb3IgeGVuLCBldGMuKS4KPiA+ICsgKgo+ID4gKyAqIEBwYXJhbSB0cmFucwo+ID4g
KyAqICAgUG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IHN0cnVjdHVyZS4KPiA+ICsgKiBAcmV0dXJu
Cj4gPiArICogICAtICgwKTogU3VjY2Vzc2Z1bC4KPiA+ICsgKiAgIC0gKDwgMCk6IEZhaWxlZCB0
byByZWdpc3RlciB0aGUgdHJhbnNwb3J0IGxheWVyLgo+ID4gKyAqLwo+ID4gK2ludCB1a185cGRl
dl90cmFuc19yZWdpc3RlcihzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnRyYW5zKTsKPiA+ICsKPiA+
ICsvKioKPiA+ICsgKiBMb29rcyB1cCBhIHRyYW5zcG9ydCBsYXllciBieSBpdHMgbmFtZS4KPiA+
ICsgKgo+ID4gKyAqIEBwYXJhbSBuYW1lCj4gPiArICogICBUaGUgdHJhbnNwb3J0IGxheWVyIG5h
bWUuCj4gPiArICogQHJldHVybgo+ID4gKyAqICAgVGhlIDlQIHRyYW5zcG9ydCB3aXRoIHRoZSBn
aXZlbiBuYW1lLCBvciBOVUxMIGlmIG1pc3NpbmcuCj4gPiArICovCj4gPiArc3RydWN0IHVrXzlw
ZGV2X3RyYW5zICp1a185cGRldl90cmFuc19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwo+ID4g
Kwo+ID4gKy8qKgo+ID4gKyAqIEdldHMgdGhlIGRlZmF1bHQgdHJhbnNwb3J0IGxheWVyLgo+ID4g
KyAqCj4gPiArICogQHJldHVybgo+ID4gKyAqICAgVGhlIGRlZmF1bHQgOVAgdHJhbnNwb3J0LCBv
ciBOVUxMIGlmIG1pc3NpbmcuCj4gPiArICovCj4gPiArc3RydWN0IHVrXzlwZGV2X3RyYW5zICp1
a185cGRldl90cmFuc19kZWZhdWx0KHZvaWQpOwo+ID4gKwo+ID4gKyNpZmRlZiBfX2NwbHVzcGx1
cwo+ID4gK30KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsjZW5kaWYgLyogX19VS185UERFVl9UUkFO
U19fICovCj4gPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:25:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:25:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5qpd-0007tE-1H; Thu, 05 Sep 2019 12:25:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5qpb-0007sT-4I
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:25:43 +0000
X-Inumbo-ID: 45b4f6c6-cfd8-11e9-b299-bc764e2007e4
Received: from mail-lf1-x144.google.com (unknown [2a00:1450:4864:20::144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 45b4f6c6-cfd8-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 12:25:40 +0000 (UTC)
Received: by mail-lf1-x144.google.com with SMTP id x80so1864371lff.3
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:25:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=7YyecSMQFs8RQAwlwxvNKLTK/wGvgz76SnT9kYmH368=;
 b=MzOcFpFko0wngzbN39LG7bgqCBK/XVh4L81ufiQIOhBpley2ypUkwLnKIJewfcRv56
 m2egfl+F2lRjgqertZwlQxdMcXbgFWUQMRmadt6ej8j7TmU6brWxbLpK7Fsil4KLkaHP
 Cu1/XEVgWocJrrZv1urm0BZS0SZbDl1uwVWBov1JxrXk440DfFVd2Jz5IHkaJYaSIsU/
 niO28jclf7nWbi5ysMmZUrXo60CV8fOHInAEC/IsubOC78WDLEjQnWZPXTbXuR/Dk3Ve
 o7xOhw5UI2VkoFqEOD8tJmDw/oVGgpgKDR0L7m68yhD6dibrIDn6bYF91veoCft4Ktal
 R/rg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=7YyecSMQFs8RQAwlwxvNKLTK/wGvgz76SnT9kYmH368=;
 b=uf0wTqxc+z+IfUgeTZMIhBWRrgpq6Oq2tN6GUsTfWVpwOqTOSIsIfgLfZHT0z28riw
 0XZqibCqsuB6XKJKo7RES/Nv6y33Ib5+Ywk8Omremhn2zSYtCZqgHJr3Ms7KXE5gsjFf
 n2VGlwf++0PuJMN2HAnyuAgu9DmJZHd7xLGsRYsgmwKxbwJa9OzfBljdUhsVldprB7y2
 LOU+KyXoxYbzLZgx4FL8qOvw08xZx8XuoFb7q1yAmi8e6lPKAma2MIG2tukRPEVgqsy1
 3TtwiSsjH2FKBTHMxgYG7U2tjP559wiLhe+LxWzFvEXdl76oDK29mqhZ35Pn0sxnwLfJ
 N8Ng==
X-Gm-Message-State: APjAAAU9URMBP3iK1Ysnt1vOi78QbyGI1OgId3IeETq7wo/uXZgQCSym
 w5kgz0I2iIf3/QcPGCOHojZVLR7MReCFGfQf+Xg=
X-Google-Smtp-Source: APXvYqx4aOPQt5yGPnAepa+t1pkPS3zTRL5Cuw2MVOlelAf4Yy2McGkHH2XgUIZJfvqGH7mBc97O2DZxcYFKcsH0cqQ=
X-Received: by 2002:a19:a407:: with SMTP id q7mr2013697lfc.166.1567686339596; 
 Thu, 05 Sep 2019 05:25:39 -0700 (PDT)
MIME-Version: 1.0
References: <20190629085608.15680-1-cristb@gmail.com>
 <20190629085608.15680-5-cristb@gmail.com>
 <7aac635b-e19c-28c5-47e6-7536f90cc6d4@gmail.com>
In-Reply-To: <7aac635b-e19c-28c5-47e6-7536f90cc6d4@gmail.com>
From: Cristian Banu <cristb@gmail.com>
Date: Thu, 5 Sep 2019 15:25:28 +0300
Message-ID: <CAFJttSUtj2pSYsLMDByHFc+GkWEAXwQYKLE0rbhF4Rw0-DzrCQ@mail.gmail.com>
To: Costin Lupu <costin.lup@gmail.com>
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 4/8] lib/uk9p: Add 9P
 requests abstraction
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLAoKSSB1cGRhdGVkIHRoaXMgaW4gdjMuCgpUaGFua3MhCkNyaXN0aQoKT24gU2F0
LCBBdWcgMjQsIDIwMTkgYXQgMzowNyBQTSBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cEBnbWFpbC5j
b20+IHdyb3RlOgo+Cj4gSGkgQ3Jpc3RpLAo+Cj4gU2luY2Ugd2UncmUgZ29pbmcgdG8gaGF2ZSBh
bm90aGVyIHZlcnNpb24gb2YgOXAsIEkgaGF2ZSBvbmUgc21hbGwKPiBjb21tZW50IGlubGluZS4K
Pgo+IE9uIDYvMjkvMTkgMTE6NTYgQU0sIENyaXN0aWFuIEJhbnUgd3JvdGU6Cj4gPiBUaGlzIHBh
dGNoIGludHJvZHVjZXMgYSBzdHJ1Y3QgdWtfOXByZXEgd2hpY2ggYWJzdHJhY3RzIHRoZSBsaWZl
Y3ljbGUgb2YKPiA+IGFsbG9jYXRpbmcgbWVtb3J5LCBzZXJpYWxpemluZyBkYXRhLCBzZW5kaW5n
IGl0IG92ZXIgYSB0cmFuc3BvcnQgbGF5ZXIsCj4gPiByZWNlaXZpbmcgdGhlIHJlc3BvbnNlLCBk
ZXRlY3RpbmcgZXJyb3JzLCBkZXNlcmlhbGl6aW5nIHRoZSByZWNlaXZlZAo+ID4gbWVzc2FnZSBh
bmQgZnJlZWluZyB0aGUgbWVtb3J5Lgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJh
bnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gPiAtLS0KPiA+ICBsaWIvdWs5cC85cHJlcS5jICAgICAg
ICAgICAgfCA1NjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK
PiA+ICBsaWIvdWs5cC9NYWtlZmlsZS51ayAgICAgICAgfCAgIDEgKwo+ID4gIGxpYi91azlwL2V4
cG9ydHN5bXMudWsgICAgICB8ICAxMSArCj4gPiAgbGliL3VrOXAvaW5jbHVkZS91ay85cHJlcS5o
IHwgMzAwICsrKysrKysrKysrKysrKysrKysrKysrCj4gPiAgNCBmaWxlcyBjaGFuZ2VkLCA4ODEg
aW5zZXJ0aW9ucygrKQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC85cHJlcS5jCj4g
PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsvOXByZXEuaAo+ID4KPiA+
IGRpZmYgLS1naXQgYS9saWIvdWs5cC85cHJlcS5jIGIvbGliL3VrOXAvOXByZXEuYwo+ID4gbmV3
IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uZTQ4YWFlMTdkNTBmCj4g
PiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9saWIvdWs5cC85cHJlcS5jCj4gPiBAQCAtMCwwICsx
LDU2OSBAQAo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8K
PiA+ICsvKgo+ID4gKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+
Cj4gPiArICoKPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5p
Y2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ID4gKyAqCj4gPiArICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Cj4gPiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gPiArICogYXJlIG1ldDoKPiA+ICsgKgo+ID4gKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Cj4gPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ID4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gPiArICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQo+ID4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gPiArICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ID4gKyAq
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCj4gPiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiA+ICsgKgo+ID4gKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIgo+ID4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiA+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+
ID4gKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiA+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4gPiArICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKPiA+ICsgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiA+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ID4g
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCj4gPiArICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKPiA+ICsgKiBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiA+ICsgKgo+ID4gKyAqIFRISVMgSEVBREVSIE1BWSBO
T1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCj4gPiArICovCj4gPiArCj4g
PiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ID4gKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KPiA+ICsj
aW5jbHVkZSA8dWsvOXByZXEuaD4KPiA+ICsjaW5jbHVkZSA8dWsvOXBfY29yZS5oPgo+ID4gKyNp
bmNsdWRlIDx1ay9saXN0Lmg+Cj4gPiArI2luY2x1ZGUgPHVrL3JlZmNvdW50Lmg+Cj4gPiArI2lu
Y2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiA+ICsjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiA+ICsj
aWYgQ09ORklHX0xJQlVLU0NIRUQKPiA+ICsjaW5jbHVkZSA8dWsvc2NoZWQuaD4KPiA+ICsjaW5j
bHVkZSA8dWsvd2FpdC5oPgo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgX2ZjYWxs
X2FsbG9jKHN0cnVjdCB1a19hbGxvYyAqYSwgc3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmLAo+ID4g
KyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUpCj4gPiArewo+ID4gKyAgICAgVUtf
QVNTRVJUKGEpOwo+ID4gKyAgICAgVUtfQVNTRVJUKGYpOwo+ID4gKyAgICAgVUtfQVNTRVJUKHNp
emUgPiAwKTsKPiA+ICsKPiA+ICsgICAgIGYtPmJ1ZiA9IHVrX2NhbGxvYyhhLCBzaXplLCBzaXpl
b2YoY2hhcikpOwo+ID4gKyAgICAgaWYgKGYtPmJ1ZiA9PSBOVUxMKQo+ID4gKyAgICAgICAgICAg
ICByZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICsgICAgIGYtPnNpemUgPSBzaXplOwo+ID4gKyAg
ICAgZi0+b2Zmc2V0ID0gMDsKPiA+ICsgICAgIGYtPnpjX2J1ZiA9IE5VTEw7Cj4gPiArICAgICBm
LT56Y19zaXplID0gMDsKPiA+ICsgICAgIGYtPnpjX29mZnNldCA9IDA7Cj4gPiArCj4gPiArICAg
ICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgX2ZjYWxsX2ZyZWUoc3Ry
dWN0IHVrX2FsbG9jICphLCBzdHJ1Y3QgdWtfOXByZXFfZmNhbGwgKmYpCj4gPiArewo+ID4gKyAg
ICAgVUtfQVNTRVJUKGEpOwo+ID4gKyAgICAgVUtfQVNTRVJUKGYpOwo+ID4gKwo+ID4gKyAgICAg
aWYgKGYtPmJ1ZikKPiA+ICsgICAgICAgICAgICAgdWtfZnJlZShhLCBmLT5idWYpOwo+ID4gK30K
PiA+ICsKPiA+ICtzdHJ1Y3QgdWtfOXByZXEgKnVrXzlwcmVxX2FsbG9jKHN0cnVjdCB1a19hbGxv
YyAqYSwgdWludDMyX3Qgc2l6ZSkKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgdWtfOXByZXEgKnJl
cTsKPiA+ICsgICAgIGludCByYzsKPiA+ICsKPiA+ICsgICAgIHJlcSA9IHVrX2NhbGxvYyhhLCAx
LCBzaXplb2YoKnJlcSkpOwo+ID4gKyAgICAgaWYgKHJlcSA9PSBOVUxMKQo+ID4gKyAgICAgICAg
ICAgICBnb3RvIG91dDsKPiA+ICsKPiA+ICsgICAgIHJjID0gX2ZjYWxsX2FsbG9jKGEsICZyZXEt
PnhtaXQsIHNpemUpOwo+ID4gKyAgICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAgZ290
byBvdXRfZnJlZTsKPiA+ICsKPiA+ICsgICAgIHJjID0gX2ZjYWxsX2FsbG9jKGEsICZyZXEtPnJl
Y3YsIE1BWChzaXplLCBVS185UF9SRVJST1JfTUFYU0laRSkpOwo+ID4gKyAgICAgaWYgKHJjIDwg
MCkKPiA+ICsgICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKPiA+ICsKPiA+ICsgICAgIFVLX0lO
SVRfTElTVF9IRUFEKCZyZXEtPl9saXN0KTsKPiA+ICsgICAgIHJlcS0+X2EgPSBhOwo+ID4gKyAg
ICAgdWtfcmVmY291bnRfaW5pdCgmcmVxLT5yZWZjb3VudCwgMSk7Cj4gPiArI2lmIENPTkZJR19M
SUJVS1NDSEVECj4gPiArICAgICB1a193YWl0cV9pbml0KCZyZXEtPndxKTsKPiA+ICsjZW5kaWYK
PiA+ICsKPiA+ICsgICAgIC8qCj4gPiArICAgICAgKiBBc3N1bWUgdGhlIGhlYWRlciBoYXMgYWxy
ZWFkeSBiZWVuIHdyaXR0ZW4uCj4gPiArICAgICAgKiBUaGUgaGVhZGVyIGl0c2VsZiB3aWxsIGJl
IHdyaXR0ZW4gb24gdWtfOXByZXFfcmVhZHkoKSwgd2hlbiB0aGUKPiA+ICsgICAgICAqIGFjdHVh
bCBtZXNzYWdlIHNpemUgaXMga25vd24uCj4gPiArICAgICAgKi8KPiA+ICsgICAgIHJlcS0+eG1p
dC5vZmZzZXQgPSBVS185UF9IRUFERVJfU0laRTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiByZXE7
Cj4gPiArCj4gPiArb3V0X2ZyZWU6Cj4gPiArICAgICBfZmNhbGxfZnJlZShhLCAmcmVxLT5yZWN2
KTsKPiA+ICsgICAgIF9mY2FsbF9mcmVlKGEsICZyZXEtPnhtaXQpOwo+ID4gKyAgICAgdWtfZnJl
ZShhLCByZXEpOwo+ID4gK291dDoKPiA+ICsgICAgIHJldHVybiBOVUxMOwo+ID4gK30KPiA+ICsK
PiA+ICtzdGF0aWMgdm9pZCBfcmVxX2ZyZWUoc3RydWN0IHVrXzlwcmVxICpyZXEpCj4gPiArewo+
ID4gKyAgICAgX2ZjYWxsX2ZyZWUocmVxLT5fYSwgJnJlcS0+cmVjdik7Cj4gPiArICAgICBfZmNh
bGxfZnJlZShyZXEtPl9hLCAmcmVxLT54bWl0KTsKPiA+ICsgICAgIHVrX2ZyZWUocmVxLT5fYSwg
cmVxKTsKPiA+ICt9Cj4gPiArCj4gPiArdm9pZCB1a185cHJlcV9nZXQoc3RydWN0IHVrXzlwcmVx
ICpyZXEpCj4gPiArewo+ID4gKyAgICAgdWtfcmVmY291bnRfYWNxdWlyZSgmcmVxLT5yZWZjb3Vu
dCk7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCB1a185cHJlcV9wdXQoc3RydWN0IHVrXzlwcmVxICpy
ZXEpCj4gPiArewo+ID4gKyAgICAgaW50IGxhc3Q7Cj4gPiArCj4gPiArICAgICBsYXN0ID0gdWtf
cmVmY291bnRfcmVsZWFzZSgmcmVxLT5yZWZjb3VudCk7Cj4gPiArICAgICBpZiAobGFzdCkKPiA+
ICsgICAgICAgICAgICAgX3JlcV9mcmVlKHJlcSk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gbGFz
dDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBfZmNhbGxfd3JpdGUoc3RydWN0IHVrXzlw
cmVxX2ZjYWxsICpmY2FsbCwgY29uc3Qgdm9pZCAqYnVmLAo+ID4gKyAgICAgICAgICAgICB1aW50
MzJfdCBzaXplKQo+ID4gK3sKPiA+ICsgICAgIGlmIChmY2FsbC0+b2Zmc2V0ICsgc2l6ZSA+IGZj
YWxsLT5zaXplKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT0JVRlM7Cj4gPiArCj4gPiAr
ICAgICBtZW1jcHkoKGNoYXIgKilmY2FsbC0+YnVmICsgZmNhbGwtPm9mZnNldCwgYnVmLCBzaXpl
KTsKPiA+ICsgICAgIGZjYWxsLT5vZmZzZXQgKz0gc2l6ZTsKPiA+ICsgICAgIHJldHVybiAwOwo+
ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9mY2FsbF9zZXJpYWxpemUoc3RydWN0IHVrXzlw
cmVxX2ZjYWxsICpmLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cj4gPiArCj4gPiArc3RhdGljIGlu
dCBfZmNhbGxfdnNlcmlhbGl6ZShzdHJ1Y3QgdWtfOXByZXFfZmNhbGwgKmZjYWxsLCBjb25zdCBj
aGFyICpmbXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCB2bCkKPiA+ICt7Cj4g
PiArICAgICBpbnQgcmMgPSAwOwo+ID4gKwo+ID4gKyAgICAgd2hpbGUgKCpmbXQpIHsKPiA+ICsg
ICAgICAgICAgICAgc3dpdGNoICgqZm10KSB7Cj4gPiArICAgICAgICAgICAgIGNhc2UgJ2InOiB7
Cj4gPiArICAgICAgICAgICAgICAgICAgICAgdWludDhfdCB4Owo+ID4gKwo+ID4gKyAgICAgICAg
ICAgICAgICAgICAgIHggPSB2YV9hcmcodmwsIHVuc2lnbmVkIGludCk7Cj4gPiArICAgICAgICAg
ICAgICAgICAgICAgcmMgPSBfZmNhbGxfd3JpdGUoZmNhbGwsICZ4LCBzaXplb2YoeCkpOwo+ID4g
KyAgICAgICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCj4gPiArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+
ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICBjYXNlICd3Jzogewo+ID4gKyAgICAg
ICAgICAgICAgICAgICAgIHVpbnQxNl90IHg7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAg
ICAgeCA9IHZhX2FyZyh2bCwgdW5zaWduZWQgaW50KTsKPiA+ICsgICAgICAgICAgICAgICAgICAg
ICByYyA9IF9mY2FsbF93cml0ZShmY2FsbCwgJngsIHNpemVvZih4KSk7Cj4gPiArICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdvdG8gb3V0Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAg
ICAgICB9Cj4gPiArICAgICAgICAgICAgIGNhc2UgJ2QnOiB7Cj4gPiArICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgeDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICB4ID0gdmFf
YXJnKHZsLCB1aW50MzJfdCk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmMgPSBfZmNhbGxf
d3JpdGUoZmNhbGwsICZ4LCBzaXplb2YoeCkpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlm
IChyYyA8IDApCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKPiA+
ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAg
ICAgICAgICAgICBjYXNlICdxJzogewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90
IHg7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAgICAgeCA9IHZhX2FyZyh2bCwgdWludDY0
X3QpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJjID0gX2ZjYWxsX3dyaXRlKGZjYWxsLCAm
eCwgc2l6ZW9mKHgpKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQo+ID4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgY2Fz
ZSAncyc6IHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWtfOXBfc3RyICpwOwo+
ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHAgPSB2YV9hcmcodmwsIHN0cnVjdCB1a185
cF9zdHIgKik7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmMgPSBfZmNhbGxfd3JpdGUoZmNh
bGwsICZwLT5zaXplLCBzaXplb2YocC0+c2l6ZSkpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg
IGlmIChyYyA8IDApCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsK
PiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9IF9mY2FsbF93cml0ZShmY2FsbCwgcC0+ZGF0
YSwgcC0+c2l6ZSk7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkKPiA+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKyAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArICAgICAgICAgICAgIGNhc2Ug
J1EnOiB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVrXzlwX3FpZCAqcDsKPiA+
ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBwID0gdmFfYXJnKHZsLCBzdHJ1Y3QgdWtfOXBf
cWlkICopOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJjID0gX2ZjYWxsX3NlcmlhbGl6ZShm
Y2FsbCwgImJkcSIsIHAtPnR5cGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHAtPnZlcnNpb24sIHAtPnBhdGgpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlm
IChyYyA8IDApCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKPiA+
ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAg
ICAgICAgICAgICBjYXNlICdTJzogewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1
a185cF9zdGF0ICpwOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHAgPSB2YV9hcmco
dmwsIHN0cnVjdCB1a185cF9zdGF0ICopOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJjID0g
X2ZjYWxsX3NlcmlhbGl6ZShmY2FsbCwgInd3ZFFkZGRxc3Nzc3NkZGQiLAo+ID4gKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5zaXplLCBwLT50eXBlLCBwLT5kZXYsICZw
LT5xaWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPm1vZGUs
IHAtPmF0aW1lLCBwLT5tdGltZSwgcC0+bGVuZ3RoLAo+ID4gKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmcC0+bmFtZSwgJnAtPnVpZCwgJnAtPmdpZCwgJnAtPm11aWQsCj4g
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT5leHRlbnNpb24sIHAt
Pm5fdWlkLCBwLT5uX2dpZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcC0+bl9tdWlkKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQo+ID4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgZGVm
YXVsdDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Cj4gPiArICAgICAg
ICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsg
ICAgICAgICAgICAgZm10Kys7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArb3V0Ogo+ID4gKyAgICAg
cmV0dXJuIHJjOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9mY2FsbF9zZXJpYWxpemUo
c3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKPiA+ICt7Cj4g
PiArICAgICB2YV9saXN0IHZsOwo+ID4gKyAgICAgaW50IHJjOwo+ID4gKwo+ID4gKyAgICAgdmFf
c3RhcnQodmwsIGZtdCk7Cj4gPiArICAgICByYyA9IF9mY2FsbF92c2VyaWFsaXplKGYsIGZtdCwg
dmwpOwo+ID4gKyAgICAgdmFfZW5kKHZsKTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiByYzsKPiA+
ICt9Cj4gPiArCj4gPiAraW50IHVrXzlwcmVxX3ZzZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxICpy
ZXEsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmM7
Cj4gPiArCj4gPiArICAgICBVS19BU1NFUlQocmVxKTsKPiA+ICsgICAgIFVLX0FTU0VSVChVS19S
RUFEX09OQ0UocmVxLT5zdGF0ZSkgPT0gVUtfOVBSRVFfSU5JVElBTElaRUQpOwo+ID4gKyAgICAg
cmMgPSBfZmNhbGxfdnNlcmlhbGl6ZSgmcmVxLT54bWl0LCBmbXQsIHZsKTsKPiA+ICsKPiA+ICsg
ICAgIHJldHVybiByYzsKPiA+ICt9Cj4gPiArCj4gPiAraW50IHVrXzlwcmVxX3NlcmlhbGl6ZShz
dHJ1Y3QgdWtfOXByZXEgKnJlcSwgY29uc3QgY2hhciAqZm10LCAuLi4pCj4gPiArewo+ID4gKyAg
ICAgdmFfbGlzdCB2bDsKPiA+ICsgICAgIGludCByYzsKPiA+ICsKPiA+ICsgICAgIHZhX3N0YXJ0
KHZsLCBmbXQpOwo+ID4gKyAgICAgcmMgPSB1a185cHJlcV92c2VyaWFsaXplKHJlcSwgZm10LCB2
bCk7Cj4gPiArICAgICB2YV9lbmQodmwpOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHJjOwo+ID4g
K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9mY2FsbF9yZWFkKHN0cnVjdCB1a185cHJlcV9mY2Fs
bCAqZmNhbGwsIHZvaWQgKmJ1ZiwgdWludDMyX3Qgc2l6ZSkKPiA+ICt7Cj4gPiArICAgICBpZiAo
ZmNhbGwtPm9mZnNldCArIHNpemUgPiBmY2FsbC0+c2l6ZSkKPiA+ICsgICAgICAgICAgICAgcmV0
dXJuIC1FTk9CVUZTOwo+ID4gKwo+ID4gKyAgICAgbWVtY3B5KGJ1ZiwgKGNoYXIgKilmY2FsbC0+
YnVmICsgZmNhbGwtPm9mZnNldCwgc2l6ZSk7Cj4gPiArICAgICBmY2FsbC0+b2Zmc2V0ICs9IHNp
emU7Cj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBfZmNh
bGxfZGVzZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmLCBjb25zdCBjaGFyICpmbXQs
IC4uLik7Cj4gPiArCj4gPiArc3RhdGljIGludCBfZmNhbGxfdmRlc2VyaWFsaXplKHN0cnVjdCB1
a185cHJlcV9mY2FsbCAqZmNhbGwsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqZm10LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3Qgdmwp
Cj4gPiArewo+ID4gKyAgICAgaW50IHJjID0gMDsKPiA+ICsKPiA+ICsgICAgIHdoaWxlICgqZm10
KSB7Cj4gPiArICAgICAgICAgICAgIHN3aXRjaCAoKmZtdCkgewo+ID4gKyAgICAgICAgICAgICBj
YXNlICdiJzogewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKng7Cj4gPiArCj4g
PiArICAgICAgICAgICAgICAgICAgICAgeCA9IHZhX2FyZyh2bCwgdWludDhfdCAqKTsKPiA+ICsg
ICAgICAgICAgICAgICAgICAgICByYyA9IF9mY2FsbF9yZWFkKGZjYWxsLCB4LCBzaXplb2YoKngp
KTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQo+ID4gKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgY2FzZSAndyc6IHsKPiA+
ICsgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqeDsKPiA+ICsKPiA+ICsgICAgICAgICAg
ICAgICAgICAgICB4ID0gdmFfYXJnKHZsLCB1aW50MTZfdCAqKTsKPiA+ICsgICAgICAgICAgICAg
ICAgICAgICByYyA9IF9mY2FsbF9yZWFkKGZjYWxsLCB4LCBzaXplb2YoKngpKTsKPiA+ICsgICAg
ICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAg
ICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgY2FzZSAnZCc6IHsKPiA+ICsgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCAqeDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICB4
ID0gdmFfYXJnKHZsLCB1aW50MzJfdCAqKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9
IF9mY2FsbF9yZWFkKGZjYWxsLCB4LCBzaXplb2YoKngpKTsKPiA+ICsgICAgICAgICAgICAgICAg
ICAgICBpZiAocmMgPCAwKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBv
dXQ7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgIH0K
PiA+ICsgICAgICAgICAgICAgY2FzZSAncSc6IHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICB1
aW50NjRfdCAqeDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICB4ID0gdmFfYXJnKHZs
LCB1aW50NjRfdCAqKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9IF9mY2FsbF9yZWFk
KGZjYWxsLCB4LCBzaXplb2YoKngpKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmMg
PCAwKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgICAg
ICAgICAgY2FzZSAncyc6IHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWtfOXBf
c3RyICpwOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHAgPSB2YV9hcmcodmwsIHN0
cnVjdCB1a185cF9zdHIgKik7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmMgPSBfZmNhbGxf
cmVhZChmY2FsbCwgJnAtPnNpemUsIHNpemVvZihwLT5zaXplKSk7Cj4gPiArICAgICAgICAgICAg
ICAgICAgICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gb3V0Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHAtPmRhdGEgPSAoY2hhciAqKWZjYWxs
LT5idWYgKyBmY2FsbC0+b2Zmc2V0Owo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGZjYWxsLT5v
ZmZzZXQgKz0gcC0+c2l6ZTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsKPiA+ICsg
ICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICBjYXNlICdRJzogewo+ID4gKyAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCB1a185cF9xaWQgKnA7Cj4gPiArCj4gPiArICAgICAgICAgICAg
ICAgICAgICAgcCA9IHZhX2FyZyh2bCwgc3RydWN0IHVrXzlwX3FpZCAqKTsKPiA+ICsgICAgICAg
ICAgICAgICAgICAgICByYyA9IF9mY2FsbF9kZXNlcmlhbGl6ZShmY2FsbCwgImJkcSIsICZwLT50
eXBlLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcC0+dmVyc2lv
biwgJnAtPnBhdGgpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCj4gPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgICAgICAgICBjYXNl
ICdTJzogewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1a185cF9zdGF0ICpwOwo+
ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHAgPSB2YV9hcmcodmwsIHN0cnVjdCB1a185
cF9zdGF0ICopOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJjID0gX2ZjYWxsX2Rlc2VyaWFs
aXplKGZjYWxsLCAid3dkUWRkZHFzc3Nzc2RkZCIsCj4gPiArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZwLT5zaXplLCAmcC0+dHlwZSwgJnAtPmRldiwgJnAtPnFpZCwKPiA+
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPm1vZGUsICZwLT5hdGlt
ZSwgJnAtPm10aW1lLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
cC0+bGVuZ3RoLCAmcC0+bmFtZSwgJnAtPnVpZCwgJnAtPmdpZCwKPiA+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJnAtPm11aWQsICZwLT5leHRlbnNpb24sICZwLT5uX3Vp
ZCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnAtPm5fZ2lkLCAm
cC0+bl9tdWlkKTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQo+ID4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgICAgICAgICAgZGVmYXVs
dDoKPiA+ICsgICAgICAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Cj4gPiArICAgICAgICAg
ICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAg
ICAgICAgICAgZm10Kys7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArb3V0Ogo+ID4gKyAgICAgcmV0
dXJuIHJjOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IF9mY2FsbF9kZXNlcmlhbGl6ZShz
dHJ1Y3QgdWtfOXByZXFfZmNhbGwgKmYsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQo+ID4gK3sKPiA+
ICsgICAgIHZhX2xpc3Qgdmw7Cj4gPiArICAgICBpbnQgcmM7Cj4gPiArCj4gPiArICAgICB2YV9z
dGFydCh2bCwgZm10KTsKPiA+ICsgICAgIHJjID0gX2ZjYWxsX3ZkZXNlcmlhbGl6ZShmLCBmbXQs
IHZsKTsKPiA+ICsgICAgIHZhX2VuZCh2bCk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gcmM7Cj4g
PiArfQo+ID4gKwo+ID4gK2ludCB1a185cHJlcV92ZGVzZXJpYWxpemUoc3RydWN0IHVrXzlwcmVx
ICpyZXEsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCkKPiA+ICt7Cj4gPiArICAgICBpbnQg
cmM7Cj4gPiArCj4gPiArICAgICBVS19BU1NFUlQocmVxKTsKPiA+ICsgICAgIFVLX0FTU0VSVChV
S19SRUFEX09OQ0UocmVxLT5zdGF0ZSkgPT0gVUtfOVBSRVFfUkVDRUlWRUQpOwo+ID4gKyAgICAg
cmMgPSBfZmNhbGxfdmRlc2VyaWFsaXplKCZyZXEtPnJlY3YsIGZtdCwgdmwpOwo+ID4gKwo+ID4g
KyAgICAgcmV0dXJuIHJjOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXByZXFfZGVzZXJpYWxp
emUoc3RydWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQo+ID4gK3sKPiA+
ICsgICAgIHZhX2xpc3Qgdmw7Cj4gPiArICAgICBpbnQgcmM7Cj4gPiArCj4gPiArICAgICB2YV9z
dGFydCh2bCwgZm10KTsKPiA+ICsgICAgIHJjID0gdWtfOXByZXFfdmRlc2VyaWFsaXplKHJlcSwg
Zm10LCB2bCk7Cj4gPiArICAgICB2YV9lbmQodmwpOwo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHJj
Owo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXByZXFfY29weV90byhzdHJ1Y3QgdWtfOXByZXEg
KnJlcSwgdm9pZCAqYnVmLCB1aW50MzJfdCBzaXplKQo+ID4gK3sKPiA+ICsgICAgIHJldHVybiBf
ZmNhbGxfcmVhZCgmcmVxLT5yZWN2LCBidWYsIHNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQg
dWtfOXByZXFfY29weV9mcm9tKHN0cnVjdCB1a185cHJlcSAqcmVxLCBjb25zdCB2b2lkICpidWYs
IHVpbnQzMl90IHNpemUpCj4gPiArewo+ID4gKyAgICAgcmV0dXJuIF9mY2FsbF93cml0ZSgmcmVx
LT54bWl0LCBidWYsIHNpemUpOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXByZXFfcmVhZHko
c3RydWN0IHVrXzlwcmVxICpyZXEsIGVudW0gdWtfOXByZXFfemNkaXIgemNfZGlyLAo+ID4gKyAg
ICAgICAgICAgICB2b2lkICp6Y19idWYsIHVpbnQzMl90IHpjX3NpemUsIHVpbnQzMl90IHpjX29m
ZnNldCkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmM7Cj4gPiArICAgICB1aW50MzJfdCB0b3RhbF9z
aXplOwo+ID4gKyAgICAgdWludDMyX3QgdG90YWxfc2l6ZV93aXRoX3pjOwo+ID4gKwo+ID4gKyAg
ICAgVUtfQVNTRVJUKHJlcSk7Cj4gPiArCj4gPiArICAgICBpZiAoVUtfUkVBRF9PTkNFKHJlcS0+
c3RhdGUpICE9IFVLXzlQUkVRX0lOSVRJQUxJWkVEKSB7Cj4gPiArICAgICAgICAgICAgIHJjID0g
LUVJTzsKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiAr
ICAgICAvKiBTYXZlIGN1cnJlbnQgb2Zmc2V0IGFzIHRoZSBzaXplIG9mIHRoZSBtZXNzYWdlLiAq
Lwo+ID4gKyAgICAgdG90YWxfc2l6ZSA9IHJlcS0+eG1pdC5vZmZzZXQ7Cj4gPiArCj4gPiArICAg
ICB0b3RhbF9zaXplX3dpdGhfemMgPSB0b3RhbF9zaXplOwo+ID4gKyAgICAgaWYgKHpjX2RpciA9
PSBVS185UFJFUV9aQ0RJUl9XUklURSkKPiA+ICsgICAgICAgICAgICAgdG90YWxfc2l6ZV93aXRo
X3pjICs9IHpjX3NpemU7Cj4gPiArCj4gPiArICAgICAvKiBTZXJpYWxpemUgdGhlIGhlYWRlci4g
Ki8KPiA+ICsgICAgIHJlcS0+eG1pdC5vZmZzZXQgPSAwOwo+ID4gKyAgICAgcmMgPSB1a185cHJl
cV9zZXJpYWxpemUocmVxLCAiZGJ3IiwgdG90YWxfc2l6ZV93aXRoX3pjLCByZXEtPnhtaXQudHlw
ZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXEtPnRhZyk7Cj4gPiArICAgICBpZiAocmMg
PCAwKQo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsKPiA+ICsgICAgIC8qIFJlc2V0
IG9mZnNldCBhbmQgc2l6ZSB0byBzYW5lIHZhbHVlcy4gKi8KPiA+ICsgICAgIHJlcS0+eG1pdC5v
ZmZzZXQgPSAwOwo+ID4gKyAgICAgcmVxLT54bWl0LnNpemUgPSB0b3RhbF9zaXplOwo+ID4gKwo+
ID4gKyAgICAgLyogVXBkYXRlIHplcm8gY29weSBidWZmZXJzLiAqLwo+ID4gKyAgICAgaWYgKHpj
X2RpciA9PSBVS185UFJFUV9aQ0RJUl9XUklURSkgewo+ID4gKyAgICAgICAgICAgICByZXEtPnht
aXQuemNfYnVmID0gemNfYnVmOwo+ID4gKyAgICAgICAgICAgICByZXEtPnhtaXQuemNfc2l6ZSA9
IHpjX3NpemU7Cj4gPiArICAgICAgICAgICAgIC8qIFplcm8tY29weSBvZmZzZXQgZm9yIHdyaXRl
cyBtdXN0IHN0YXJ0IGF0IHRoZSBlbmQgb2YgYnVmLiAqLwo+ID4gKyAgICAgICAgICAgICByZXEt
PnhtaXQuemNfb2Zmc2V0ID0gcmVxLT54bWl0LnNpemU7Cj4gPiArICAgICB9IGVsc2UgaWYgKHpj
X2RpciA9PSBVS185UFJFUV9aQ0RJUl9SRUFEKSB7Cj4gPiArICAgICAgICAgICAgIHJlcS0+cmVj
di56Y19idWYgPSB6Y19idWY7Cj4gPiArICAgICAgICAgICAgIHJlcS0+cmVjdi56Y19zaXplID0g
emNfc2l6ZTsKPiA+ICsgICAgICAgICAgICAgcmVxLT5yZWN2LnpjX29mZnNldCA9IHpjX29mZnNl
dDsKPiA+ICsgICAgICAgICAgICAgLyogVGhlIHJlY2VpdmUgYnVmZmVyIG11c3QgZW5kIGJlZm9y
ZSB0aGUgemMgYnVmLiAqLwo+ID4gKyAgICAgICAgICAgICByZXEtPnJlY3Yuc2l6ZSA9IHpjX29m
ZnNldDsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIC8qIFVwZGF0ZSB0aGUgc3RhdGUuICov
Cj4gPiArICAgICBVS19XUklURV9PTkNFKHJlcS0+c3RhdGUsIFVLXzlQUkVRX1JFQURZKTsKPiA+
ICsKPiA+ICtvdXQ6Cj4gPiArICAgICByZXR1cm4gcmM7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCB1
a185cHJlcV9yZWNlaXZlX2NiKHN0cnVjdCB1a185cHJlcSAqcmVxLCB1aW50MzJfdCByZWN2X3Np
emUpCj4gPiArewo+ID4gKyAgICAgdWludDMyX3Qgc2l6ZTsKPiA+ICsgICAgIHVpbnQxNl90IHRh
ZzsKPiA+ICsgICAgIGludCByYzsKPiA+ICsKPiA+ICsgICAgIFVLX0FTU0VSVChyZXEpOwo+ID4g
Kwo+ID4gKyAgICAgLyogQ2hlY2sgc3RhdGUgYW5kIHRoZSBleGlzdGVuY2Ugb2YgdGhlIGhlYWRl
ci4gKi8KPiA+ICsgICAgIGlmIChVS19SRUFEX09OQ0UocmVxLT5zdGF0ZSkgIT0gVUtfOVBSRVFf
U0VOVCkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU87Cj4gPiArICAgICBpZiAocmVjdl9z
aXplIDwgVUtfOVBfSEVBREVSX1NJWkUpCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlPOwo+
ID4gKwo+ID4gKyAgICAgLyogRGVzZXJpYWxpemUgdGhlIGhlYWRlciBpbnRvIHJlcXVlc3QgZmll
bGRzLiAqLwo+ID4gKyAgICAgcmVxLT5yZWN2Lm9mZnNldCA9IDA7Cj4gPiArICAgICByZXEtPnJl
Y3Yuc2l6ZSA9IHJlY3Zfc2l6ZTsKPiA+ICsgICAgIHJjID0gX2ZjYWxsX2Rlc2VyaWFsaXplKCZy
ZXEtPnJlY3YsICJkYnciLCAmc2l6ZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAmcmVxLT5y
ZWN2LnR5cGUsICZ0YWcpOwo+ID4gKwo+ID4gKyAgICAgLyogQ2hlY2sgc2FuaXR5IG9mIGRlc2Vy
aWFsaXplZCB2YWx1ZXMuICovCj4gPiArICAgICBpZiAocmMgPCAwKQo+ID4gKyAgICAgICAgICAg
ICByZXR1cm4gcmM7Cj4gPiArICAgICBpZiAoc2l6ZSA+IHJlY3Zfc2l6ZSkKPiA+ICsgICAgICAg
ICAgICAgcmV0dXJuIC1FSU87Cj4gPiArICAgICBpZiAocmVxLT50YWcgIT0gdGFnKQo+ID4gKyAg
ICAgICAgICAgICByZXR1cm4gLUVJTzsKPiA+ICsKPiA+ICsgICAgIC8qIEZpeCB0aGUgcmVjZWl2
ZSBzaXplIGZvciB6ZXJvLWNvcHkgcmVxdWVzdHMuICovCj4gPiArICAgICBpZiAocmVxLT5yZWN2
LnpjX2J1ZiAmJiByZXEtPnJlY3YudHlwZSAhPSBVS185UF9SRVJST1IpCj4gPiArICAgICAgICAg
ICAgIHJlcS0+cmVjdi5zaXplID0gcmVxLT5yZWN2LnpjX29mZnNldDsKPiA+ICsgICAgIGVsc2UK
PiA+ICsgICAgICAgICAgICAgcmVxLT5yZWN2LnNpemUgPSBzaXplOwo+ID4gKwo+ID4gKyAgICAg
LyogVXBkYXRlIHRoZSBzdGF0ZS4gKi8KPiA+ICsgICAgIFVLX1dSSVRFX09OQ0UocmVxLT5zdGF0
ZSwgVUtfOVBSRVFfUkVDRUlWRUQpOwo+ID4gKwo+ID4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+
ID4gKyAgICAgLyogTm90aWZ5IGFueSB3YWl0aW5nIHRocmVhZHMuICovCj4gPiArICAgICB1a193
YWl0cV93YWtlX3VwKCZyZXEtPndxKTsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsgICAgIHJldHVy
biAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXByZXFfd2FpdHJlcGx5KHN0cnVjdCB1a185
cHJlcSAqcmVxKQo+ID4gK3sKPiA+ICsgICAgIGludCByYzsKPiA+ICsKPiA+ICsjaWYgQ09ORklH
X0xJQlVLU0NIRUQKPiA+ICsgICAgIHVrX3dhaXRxX3dhaXRfZXZlbnQoJnJlcS0+d3EsIHJlcS0+
c3RhdGUgPT0gVUtfOVBSRVFfUkVDRUlWRUQpOwo+ID4gKyNlbHNlCj4gPiArICAgICB3aGlsZSAo
VUtfUkVBRF9PTkNFKHJlcS0+c3RhdGUpICE9IFVLXzlQUkVRX1JFQ0VJVkVEKQo+ID4gKyAgICAg
ICAgICAgICA7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArICAgICAvKiBDaGVjayBmb3IgOVAgc2Vy
dmVyLXNpZGUgZXJyb3JzLiAqLwo+ID4gKyAgICAgcmMgPSB1a185cHJlcV9lcnJvcihyZXEpOwo+
ID4gKwo+ID4gKyAgICAgcmV0dXJuIHJjOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXByZXFf
ZXJyb3Ioc3RydWN0IHVrXzlwcmVxICpyZXEpCj4gPiArewo+ID4gKyAgICAgdWludDMyX3QgZXJy
Y29kZTsKPiA+ICsgICAgIHN0cnVjdCB1a185cF9zdHIgZXJyb3I7Cj4gPiArICAgICBpbnQgcmMg
PSAwOwo+ID4gKwo+ID4gKyAgICAgaWYgKFVLX1JFQURfT05DRShyZXEtPnN0YXRlKSAhPSBVS185
UFJFUV9SRUNFSVZFRCkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU87Cj4gPiArICAgICBp
ZiAocmVxLT5yZWN2LnR5cGUgIT0gVUtfOVBfUkVSUk9SKQo+ID4gKyAgICAgICAgICAgICByZXR1
cm4gMDsKPiA+ICsKPiA+ICsgICAgIC8qCj4gPiArICAgICAgKiBUaGUgcmVxdWVzdCBzaG91bGQg
bm90IGhhdmUgaGFkIGFueSBkYXRhIGRlc2VyaWFsaXplZCBmcm9tIGl0IHByaW9yCj4gPiArICAg
ICAgKiB0byB0aGlzIGNhbGwuCj4gPiArICAgICAgKi8KPiA+ICsgICAgIFVLX0JVR09OKHJlcS0+
cmVjdi5vZmZzZXQgIT0gVUtfOVBfSEVBREVSX1NJWkUpOwo+ID4gKwo+ID4gKyAgICAgcmMgPSB1
a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJzZCIsICZlcnJvciwgJmVycmNvZGUpOwo+ID4gKyAg
ICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJjOwo+ID4gKwo+ID4gKyAg
ICAgdWtfcHJfaW5mbygidWs5cDogUkVSUk9SICUuKnMgJWRcbiIsIGVycm9yLnNpemUsIGVycm9y
LmRhdGEsIGVycmNvZGUpOwo+Cj4gSSB0aGluayB3ZSBzaG91bGQgdXNlIHVrX3ByX2RlYnVnKCkg
aW5zdGVhZC4gVGhlIGVycm9ycyBzaG91bGQgYmUKPiBwcmludGVkIG9uIGEgaGlnaGVyIGxldmVs
LCBpZiBuZWVkZWQsIGhlcmUgd2UgbmVlZCB0aGVtIG9ubHkgYXMgZGVidWcKPiBtZXNzYWdlcy4g
T3RoZXJ3aXNlIHdlIHdpbGwgaGF2ZSBsb3RzIG9mIG1lc3NhZ2UgcHJpbnRlZCB3aGVuIHRlc3Rp
bmcgaWYKPiBmaWxlcy9kaXJlY3RvcmllcyBleGlzdC4KPgo+ID4gKyAgICAgaWYgKGVycmNvZGUg
PT0gMCB8fCBlcnJjb2RlID49IDUxMikKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU87Cj4g
PiArCj4gPiArICAgICByZXR1cm4gLWVycmNvZGU7Cj4gPiArfQo+ID4gZGlmZiAtLWdpdCBhL2xp
Yi91azlwL01ha2VmaWxlLnVrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsKPiA+IGluZGV4IGIxMDcx
YTBlN2QzYy4uYWVhNzIyYTU4NWI5IDEwMDY0NAo+ID4gLS0tIGEvbGliL3VrOXAvTWFrZWZpbGUu
dWsKPiA+ICsrKyBiL2xpYi91azlwL01ha2VmaWxlLnVrCj4gPiBAQCAtNCwzICs0LDQgQEAgQ0lO
Q0xVREVTLSQoQ09ORklHX0xJQlVLOVApICAgICAgICAgICArPSAtSSQoTElCVUs5UF9CQVNFKS9p
bmNsdWRlCj4gPiAgQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUs5UCkgICAgICAgICAgICAgICAg
Kz0gLUkkKExJQlVLOVBfQkFTRSkvaW5jbHVkZQo+ID4KPiA+ICBMSUJVSzlQX1NSQ1MteSArPSAk
KExJQlVLOVBfQkFTRSkvOXBkZXZfdHJhbnMuYwo+ID4gK0xJQlVLOVBfU1JDUy15ICs9ICQoTElC
VUs5UF9CQVNFKS85cHJlcS5jCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhwb3J0c3ltcy51
ayBiL2xpYi91azlwL2V4cG9ydHN5bXMudWsKPiA+IGluZGV4IDQ1ZjQ4N2RhMmZmZi4uODUwZmZh
MmRiMjMzIDEwMDY0NAo+ID4gLS0tIGEvbGliL3VrOXAvZXhwb3J0c3ltcy51awo+ID4gKysrIGIv
bGliL3VrOXAvZXhwb3J0c3ltcy51awo+ID4gQEAgLTEsMyArMSwxNCBAQAo+ID4gIHVrXzlwZGV2
X3RyYW5zX3JlZ2lzdGVyCj4gPiAgdWtfOXBkZXZfdHJhbnNfYnlfbmFtZQo+ID4gIHVrXzlwZGV2
X3RyYW5zX2RlZmF1bHQKPiA+ICt1a185cHJlcV9nZXQKPiA+ICt1a185cHJlcV9wdXQKPiA+ICt1
a185cHJlcV92c2VyaWFsaXplCj4gPiArdWtfOXByZXFfc2VyaWFsaXplCj4gPiArdWtfOXByZXFf
dmRlc2VyaWFsaXplCj4gPiArdWtfOXByZXFfZGVzZXJpYWxpemUKPiA+ICt1a185cHJlcV9jb3B5
X3RvCj4gPiArdWtfOXByZXFfY29weV9mcm9tCj4gPiArdWtfOXByZXFfcmVjZWl2ZV9jYgo+ID4g
K3VrXzlwcmVxX3dhaXRyZXBseQo+ID4gK3VrXzlwcmVxX2Vycm9yCj4gPiBkaWZmIC0tZ2l0IGEv
bGliL3VrOXAvaW5jbHVkZS91ay85cHJlcS5oIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cHJlcS5o
Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZTRkMmFm
ODYzNWQKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBy
ZXEuaAo+ID4gQEAgLTAsMCArMSwzMDAgQEAKPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogQlNELTMtQ2xhdXNlICovCj4gPiArLyoKPiA+ICsgKiBBdXRob3JzOiBDcmlzdGlhbiBCYW51
IDxjcmlzdGJAZ21haWwuY29tPgo+ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE5LCBV
bml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
PiA+ICsgKgo+ID4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ID4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ID4gKyAqIGFyZSBt
ZXQ6Cj4gPiArICoKPiA+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiA+ICsgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAo+ID4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiA+ICsgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ID4g
KyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBu
YW1lcyBvZiBpdHMKPiA+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ID4gKyAqICAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4gPiArICoKPiA+
ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiA+ICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gPiArICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKPiA+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gPiArICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgo+ID4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gPiArICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KPiA+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ID4gKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFCj4gPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gPiArICoKPiA+ICsg
KiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZ
Lgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19VS185UFJFUV9fCj4gPiArI2RlZmluZSBf
X1VLXzlQUkVRX18KPiA+ICsKPiA+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiA+ICsjaW5jbHVk
ZSA8dWsvY29uZmlnLmg+Cj4gPiArI2luY2x1ZGUgPHVrL2FsbG9jLmg+Cj4gPiArI2luY2x1ZGUg
PHVrL2Vzc2VudGlhbHMuaD4KPiA+ICsjaW5jbHVkZSA8dWsvbGlzdC5oPgo+ID4gKyNpbmNsdWRl
IDx1ay9yZWZjb3VudC5oPgo+ID4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ID4gKyNpbmNsdWRl
IDx1ay93YWl0X3R5cGVzLmg+Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArI2lmZGVmIF9fY3BsdXNw
bHVzCj4gPiArZXh0ZXJuICJDIiB7Cj4gPiArI2VuZGlmCj4gPiArCj4gPiArLyoKPiA+ICsgKiBU
aGUgaGVhZGVyIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOiBzaXplICg0IGJ5dGVz
KSwgdHlwZSAoMSkgYW5kCj4gPiArICogdGFnICgyKS4KPiA+ICsgKi8KPiA+ICsjZGVmaW5lIFVL
XzlQX0hFQURFUl9TSVpFICAgICAgICAgICAgICAgN1UKPiA+ICsKPiA+ICsvKgo+ID4gKyAqIFRo
ZSBtYXhpbXVtIGJ1ZmZlciBzaXplIGZvciBhbiBlcnJvciByZXBseSBpcyBnaXZlbiBieSB0aGUg
aGVhZGVyICg3KSwgdGhlCj4gPiArICogc3RyaW5nIHNpemUgKDIpLCB0aGUgZXJyb3Igc3RyaW5n
ICgxMjgpIGFuZCB0aGUgZXJyb3IgY29kZSAoNCk6IGluIHRvdGFsLAo+ID4gKyAqIDE0MS4KPiA+
ICsgKi8KPiA+ICsjZGVmaW5lIFVLXzlQX1JFUlJPUl9NQVhTSVpFICAgICAgICAgICAgMTQxVQo+
ID4gKwo+ID4gKy8qKgo+ID4gKyAqIEBpbnRlcm5hbAo+ID4gKyAqCj4gPiArICogRGVzY3JpYmVz
IHRoZSA5cCB6ZXJvLWNvcHkgZGlyZWN0aW9uLgo+ID4gKyAqLwo+ID4gK2VudW0gdWtfOXByZXFf
emNkaXIgewo+ID4gKyAgICAgVUtfOVBSRVFfWkNESVJfTk9ORSwKPiA+ICsgICAgIFVLXzlQUkVR
X1pDRElSX1JFQUQsCj4gPiArICAgICBVS185UFJFUV9aQ0RJUl9XUklURSwKPiA+ICt9Owo+ID4g
Kwo+ID4gKy8qKgo+ID4gKyAqIEBpbnRlcm5hbAo+ID4gKyAqCj4gPiArICogRGVzY3JpYmVzIGEg
OXAgZmNhbGwgc3RydWN0dXJlLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCB1a185cHJlcV9mY2FsbCB7
Cj4gPiArICAgICAvKgo+ID4gKyAgICAgICogVG90YWwgc2l6ZSBvZiB0aGUgZmNhbGwuIEluaXRp
YWxseSwgdGhpcyBpcyB0aGUgYnVmZmVyIHNpemUuCj4gPiArICAgICAgKiBBZnRlciByZWFkeSAo
b24geG1pdCkgb3IgcmVwbHkgKG9uIHJlY3YpLCB0aGlzIHdpbGwgYmUgdGhlIHNpemUgb2YKPiA+
ICsgICAgICAqIHRoZSBzZW50L3JlY2VpdmVkIGRhdGEuCj4gPiArICAgICAgKi8KPiA+ICsgICAg
IHVpbnQzMl90ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTsKPiA+ICsgICAgIC8qIFR5cGUg
b2YgdGhlIGZjYWxsLiBTaG91bGQgYmUgVCogZm9yIHRyYW5zbWl0LCBSKiBmb3IgcmVjZWl2ZS4g
Ki8KPiA+ICsgICAgIHVpbnQ4X3QgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTsKPiA+ICsg
ICAgIC8qIE9mZnNldCB3aGlsZSBzZXJpYWxpemluZyBvciBkZXNlcmlhbGl6aW5nLiAqLwo+ID4g
KyAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ7Cj4gPiArICAgICAv
KiBCdWZmZXIgcG9pbnRlci4gKi8KPiA+ICsgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKmJ1ZjsKPiA+ICsKPiA+ICsgICAgIC8qIFplcm8tY29weSBidWZmZXIgcG9pbnRlci4g
Ki8KPiA+ICsgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnpjX2J1ZjsKPiA+
ICsgICAgIC8qIFplcm8tY29weSBidWZmZXIgc2l6ZS4gKi8KPiA+ICsgICAgIHVpbnQzMl90ICAg
ICAgICAgICAgICAgICAgICAgICAgemNfc2l6ZTsKPiA+ICsgICAgIC8qIFplcm8tY29weSBidWZm
ZXIgb2Zmc2V0IGluIHRoZSA5UCBtZXNzYWdlLiAqLwo+ID4gKyAgICAgdWludDMyX3QgICAgICAg
ICAgICAgICAgICAgICAgICB6Y19vZmZzZXQ7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsg
KiBEZXNjcmliZXMgdGhlIHBvc3NpYmxlIHN0YXRlcyBpbiB3aGljaCBhIHJlcXVlc3QgbWF5IGJl
Lgo+ID4gKyAqCj4gPiArICogLSBOT05FOiBSaWdodCBhZnRlciBhbGxvY2F0aW5nLgo+ID4gKyAq
IC0gSU5JVElBTElaRUQ6IFJlcXVlc3QgaXMgcmVhZHkgdG8gcmVjZWl2ZSBzZXJpYWxpemF0aW9u
IGRhdGEuCj4gPiArICogLSBSRUFEWTogUmVxdWVzdCBpcyByZWFkeSB0byBiZSBzZW50Lgo+ID4g
KyAqIC0gUkVDRUlWRUQ6IFRyYW5zcG9ydCBsYXllciBoYXMgcmVjZWl2ZWQgdGhlIHJlcGx5IGFu
ZCBpbXBvcnRhbnQgZGF0YSBzdWNoCj4gPiArICogICBhcyB0aGUgdGFnLCB0eXBlIGFuZCBzaXpl
IGhhdmUgYmVlbiB2YWxpZGF0ZWQuCj4gPiArICovCj4gPiArZW51bSB1a185cHJlcV9zdGF0ZSB7
Cj4gPiArICAgICBVS185UFJFUV9OT05FID0gMCwKPiA+ICsgICAgIFVLXzlQUkVRX0lOSVRJQUxJ
WkVELAo+ID4gKyAgICAgVUtfOVBSRVFfUkVBRFksCj4gPiArICAgICBVS185UFJFUV9TRU5ULAo+
ID4gKyAgICAgVUtfOVBSRVFfUkVDRUlWRUQKPiA+ICt9Owo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq
ICBEZXNjcmliZXMgYSA5UCByZXF1ZXN0Lgo+ID4gKyAqCj4gPiArICogIFRoaXMgZ2V0cyBhbGxv
Y2F0ZWQgdmlhIHVrXzlwZGV2X3JlcV9jcmVhdGUoKSwgYW5kIGZyZWVkIHdoZW4gaXQgaXMgbm90
Cj4gPiArICogIHJlZmVyZW5jZWQgYW55bW9yZS4gQSBjYWxsIHRvIHVrXzlwZGV2X3JlcV9yZW1v
dmUoKSBpcyBtYW5kYXRvcnkgdG8KPiA+ICsgKiAgY29ycmVjdGx5IGZyZWUgdGhpcyBhbmQgcmVt
b3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgcmVxdWVzdHMgbWFuYWdlZAo+ID4gKyAqICBieSB0aGUg
OXAgZGV2aWNlLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCB1a185cHJlcSB7Cj4gPiArICAgICAvKiBU
cmFuc21pdCBmY2FsbC4gKi8KPiA+ICsgICAgIHN0cnVjdCB1a185cHJlcV9mY2FsbCAgICAgICAg
ICAgeG1pdDsKPiA+ICsgICAgIC8qIFJlY2VpdmUgZmNhbGwuICovCj4gPiArICAgICBzdHJ1Y3Qg
dWtfOXByZXFfZmNhbGwgICAgICAgICAgIHJlY3Y7Cj4gPiArICAgICAvKiBTdGF0ZSBvZiB0aGUg
cmVxdWVzdC4gU2VlIHRoZSBzdGF0ZSBlbnVtIGZvciBkZXRhaWxzLiAqLwo+ID4gKyAgICAgZW51
bSB1a185cHJlcV9zdGF0ZSAgICAgICAgICAgICBzdGF0ZTsKPiA+ICsgICAgIC8qIFRhZyBhbGxv
Y2F0ZWQgdG8gdGhpcyByZXF1ZXN0LiAqLwo+ID4gKyAgICAgdWludDE2X3QgICAgICAgICAgICAg
ICAgICAgICAgICB0YWc7Cj4gPiArICAgICAvKiBFbnRyeSBpbnRvIHRoZSBsaXN0IG9mIHJlcXVl
c3RzIChBUEktaW50ZXJuYWwpLiAqLwo+ID4gKyAgICAgc3RydWN0IHVrX2xpc3RfaGVhZCAgICAg
ICAgICAgICBfbGlzdDsKPiA+ICsgICAgIC8qIEBpbnRlcm5hbCBBbGxvY2F0b3IgdXNlZCB0byBh
bGxvY2F0ZSB0aGlzIHJlcXVlc3QuICovCj4gPiArICAgICBzdHJ1Y3QgdWtfYWxsb2MgICAgICAg
ICAgICAgICAgICpfYTsKPiA+ICsgICAgIC8qIFRyYWNrcyB0aGUgbnVtYmVyIG9mIHJlZmVyZW5j
ZXMgdG8gdGhpcyBzdHJ1Y3R1cmUuICovCj4gPiArICAgICBfX2F0b21pYyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlZmNvdW50Owo+ID4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ID4gKyAgICAg
LyogV2FpdC1xdWV1ZSBmb3Igc3RhdGUgY2hhbmdlcy4gKi8KPiA+ICsgICAgIHN0cnVjdCB1a193
YWl0cSAgICAgICAgICAgICAgICAgd3E7Cj4gPiArI2VuZGlmCj4gPiArfTsKPiA+ICsKPiA+ICsv
KioKPiA+ICsgKiBAaW50ZXJuYWwKPiA+ICsgKiBBbGxvY2F0ZXMgYSA5cCByZXF1ZXN0Lgo+ID4g
KyAqIFNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseSwgdXNlIHVrXzlwZGV2X3JlcV9jcmVhdGUo
KSBpbnN0ZWFkLgo+ID4gKyAqCj4gPiArICogQHBhcmFtIGEKPiA+ICsgKiAgIEFsbG9jYXRvciB0
byB1c2UuCj4gPiArICogQHBhcmFtIHNpemUKPiA+ICsgKiAgIE1pbmltdW0gc2l6ZSBvZiB0aGUg
cmVjZWl2ZSBhbmQgdHJhbnNtaXQgYnVmZmVycy4KPiA+ICsgKiBAcmV0dXJuCj4gPiArICogICAt
ICg9PU5VTEwpOiBPdXQgb2YgbWVtb3J5Lgo+ID4gKyAqICAgLSAoIT1OVUxMKTogU3VjY2Vzc2Z1
bC4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgdWtfOXByZXEgKnVrXzlwcmVxX2FsbG9jKHN0cnVjdCB1
a19hbGxvYyAqYSwgdWludDMyX3Qgc2l6ZSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogR2V0cyB0
aGUgOXAgcmVxdWVzdCwgaW5jcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291bnQuCj4gPiArICoK
PiA+ICsgKiBAcGFyYW0gcmVxCj4gPiArICogICBSZWZlcmVuY2UgdG8gdGhlIDlwIHJlcXVlc3Qu
Cj4gPiArICovCj4gPiArdm9pZCB1a185cHJlcV9nZXQoc3RydWN0IHVrXzlwcmVxICpyZXEpOwo+
ID4gKwo+ID4gKy8qKgo+ID4gKyAqIFB1dHMgdGhlIDlwIHJlcXVlc3QsIGRlY3JlbWVudGluZyB0
aGUgcmVmZXJlbmNlIGNvdW50Lgo+ID4gKyAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGxpdmUgcmVm
ZXJlbmNlLCB0aGUgbWVtb3J5IHdpbGwgYmUgZnJlZWQuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0g
cmVxCj4gPiArICogICBSZWZlcmVuY2UgdG8gdGhlIDlwIHJlcXVlc3QuCj4gPiArICogQHJldHVy
bgo+ID4gKyAqICAgLSAwOiBUaGlzIHdhcyBub3QgdGhlIGxhc3QgbGl2ZSByZWZlcmVuY2UuCj4g
PiArICogICAtIDE6IFRoaXMgd2FzIHRoZSBsYXN0IGxpdmUgcmVmZXJlbmNlLgo+ID4gKyAqLwo+
ID4gK2ludCB1a185cHJlcV9wdXQoc3RydWN0IHVrXzlwcmVxICpyZXEpOwo+ID4gKwo+ID4gKy8q
Cj4gPiArICogVGhlIGZvbGxvd2luZyBmYW1pbHkgb2Ygc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJp
YWxpemF0aW9uIGZ1bmN0aW9ucyB3b3JrCj4gPiArICogYnkgZW1wbG95aW5nIGEgcHJpbnRmLWxp
a2UgZm9ybWF0dGluZyBtZWNoYW5pc20gZm9yIGRhdGEgdHlwZXMgc3VwcG9ydGVkIGJ5Cj4gPiAr
ICogdGhlIDlwIHByb3RvY29sOgo+ID4gKyAqIC0gJ2InOiBieXRlICh1aW50OF90KQo+ID4gKyAq
IC0gJ3cnOiB3b3JkICh1aW50MTZfdCkKPiA+ICsgKiAtICdkJzogZG91YmxlLXdvcmQgKHVpbnQz
Ml90KQo+ID4gKyAqIC0gJ3EnOiBxdWFkLXdvcmQgKHVpbnQ2NF90KQo+ID4gKyAqIC0gJ3MnOiB1
a185cF9zdHIgKgo+ID4gKyAqIC0gJ1MnOiB1a185cF9zdGF0ICoKPiA+ICsgKgo+ID4gKyAqIFNp
bWlsYXJseSB0byB2cHJpbnRmKCksIHRoZSB2c2VyaWFsaXplKCkgYW5kIHZkZXNlcmlhbGl6ZSgp
IGZ1bmN0aW9ucyB0YWtlCj4gPiArICogYSB2YV9saXN0IGluc3RlYWQgb2YgYSB2YXJpYWJsZSBu
dW1iZXIgb2YgYXJndW1lbnRzLgo+ID4gKyAqCj4gPiArICogUG9zc2libGUgcmV0dXJuIHZhbHVl
czoKPiA+ICsgKiAtIDA6IE9wZXJhdGlvbiBzdWNjZXNzZnVsLgo+ID4gKyAqIC0gKC1FSU5WQUwp
OiBJbnZhbGlkIGZvcm1hdCBzcGVjaWZpZXIuCj4gPiArICogLSAoLUVOT0JVRlMpOiBFbmQgb2Yg
YnVmZmVyIHJlYWNoZWQuCj4gPiArICovCj4gPiArCj4gPiAraW50IHVrXzlwcmVxX3ZzZXJpYWxp
emUoc3RydWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCk7Cj4g
PiAraW50IHVrXzlwcmVxX3NlcmlhbGl6ZShzdHJ1Y3QgdWtfOXByZXEgKnJlcSwgY29uc3QgY2hh
ciAqZm10LCAuLi4pOwo+ID4gK2ludCB1a185cHJlcV92ZGVzZXJpYWxpemUoc3RydWN0IHVrXzlw
cmVxICpyZXEsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCk7Cj4gPiAraW50IHVrXzlwcmVx
X2Rlc2VyaWFsaXplKHN0cnVjdCB1a185cHJlcSAqcmVxLCBjb25zdCBjaGFyICpmbXQsIC4uLik7
Cj4gPiArCj4gPiArLyoqCj4gPiArICogQ29waWVzIHJhdyBkYXRhIGZyb20gdGhlIHJlcXVlc3Qg
cmVjZWl2ZSBidWZmZXIgdG8gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KPiA+ICsgKgo+ID4gKyAqIEBw
YXJhbSByZXEKPiA+ICsgKiAgIFJlZmVyZW5jZSB0byB0aGUgOXAgcmVxdWVzdC4KPiA+ICsgKiBA
cGFyYW0gYnVmCj4gPiArICogICBEZXN0aW5hdGlvbiBidWZmZXIuCj4gPiArICogQHBhcmFtIHNp
emUKPiA+ICsgKiAgIEFtb3VudCB0byBjb3B5Lgo+ID4gKyAqIFBvc3NpYmxlIHJldHVybiB2YWx1
ZXM6Cj4gPiArICogLSAwOiBPcGVyYXRpb24gc3VjY2Vzc2Z1bC4KPiA+ICsgKiAtICgtRU5PQlVG
Uyk6IEVuZCBvZiBidWZmZXIgcmVhY2hlZC4KPiA+ICsgKi8KPiA+ICtpbnQgdWtfOXByZXFfY29w
eV90byhzdHJ1Y3QgdWtfOXByZXEgKnJlcSwgdm9pZCAqYnVmLCB1aW50MzJfdCBzaXplKTsKPiA+
ICsKPiA+ICsvKioKPiA+ICsgKiBDb3BpZXMgcmF3IGRhdGEgZnJvbSB0aGUgcHJvdmlkZWQgYnVm
ZmVyIHRvIHRoZSByZXF1ZXN0IHRyYW5zbWlzc2lvbiBidWZmZXIuCj4gPiArICoKPiA+ICsgKiBA
cGFyYW0gcmVxCj4gPiArICogICBSZWZlcmVuY2UgdG8gdGhlIDlwIHJlcXVlc3QuCj4gPiArICog
QHBhcmFtIGJ1Zgo+ID4gKyAqICAgU291cmNlIGJ1ZmZlci4KPiA+ICsgKiBAcGFyYW0gc2l6ZQo+
ID4gKyAqICAgQW1vdW50IHRvIGNvcHkuCj4gPiArICogUG9zc2libGUgcmV0dXJuIHZhbHVlczoK
PiA+ICsgKiAtIDA6IE9wZXJhdGlvbiBzdWNjZXNzZnVsLgo+ID4gKyAqIC0gKC1FTk9CVUZTKTog
RW5kIG9mIGJ1ZmZlciByZWFjaGVkLgo+ID4gKyAqLwo+ID4gK2ludCB1a185cHJlcV9jb3B5X2Zy
b20oc3RydWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IHZvaWQgKmJ1ZiwgdWludDMyX3Qgc2l6ZSk7
Cj4gPiArCj4gPiArLyoqCj4gPiArICogTWFya3MgdGhlIGdpdmVuIHJlcXVlc3QgYXMgYmVpbmcg
cmVhZHksIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBzdGF0ZXMKPiA+ICsgKiBJTklUSUFMSVpFRCBh
bmQgUkVBRFkuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gcmVxCj4gPiArICogICBSZWZlcmVuY2Ug
dG8gdGhlIDlwIHJlcXVlc3QuCj4gPiArICogQHBhcmFtIHpjX2Rpcgo+ID4gKyAqICAgWmVyby1j
b3B5IGRpcmVjdGlvbi4KPiA+ICsgKiBAcGFyYW0gemNfYnVmCj4gPiArICogICBaZXJvLWNvcHkg
YnVmZmVyLCBpZiB6Y19kaXIgaXMgbm90IE5PTkUuCj4gPiArICogQHBhcmFtIHpjX3NpemUKPiA+
ICsgKiAgIFplcm8tY29weSBidWZmZXIgc2l6ZSwgaWYgemNfZGlyIGlzIG5vdCBOT05FLgo+ID4g
KyAqIEBwYXJhbSB6Y19vZmZzZXQKPiA+ICsgKiAgIFplcm8tY29weSBvZmZzZXQgd2l0aGluIHRo
ZSByZWNlaXZlZCBtZXNzYWdlLCBpZiB6Y19kaXIgaXMgUkVBRC4KPiA+ICsgKiBAcmV0dXJuCj4g
PiArICogICAtIDA6IFN1Y2Nlc3NmdWwuCj4gPiArICogICAtICg8IDApOiBJbnZhbGlkIHN0YXRl
IG9yIHJlcXVlc3Qgc2l6ZSBzZXJpYWxpemF0aW9uIGZhaWxlZC4KPiA+ICsgKi8KPiA+ICtpbnQg
dWtfOXByZXFfcmVhZHkoc3RydWN0IHVrXzlwcmVxICpyZXEsIGVudW0gdWtfOXByZXFfemNkaXIg
emNfZGlyLAo+ID4gKyAgICAgICAgICAgICB2b2lkICp6Y19idWYsIHVpbnQzMl90IHpjX3NpemUs
IHVpbnQzMl90IHpjX29mZnNldCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogRnVuY3Rpb24gY2Fs
bGVkIGZyb20gdGhlIHRyYW5zcG9ydCBsYXllciB3aGVuIGEgcmVxdWVzdCBoYXMgYmVlbiByZWNl
aXZlZC4KPiA+ICsgKiBJbXBsZW1lbnRzIHRoZSB0cmFuc2l0aW9uIGZyb20gdGhlIFNFTlQgdG8g
dGhlIFJFQ0VJVkVEIHN0YXRlLgo+ID4gKyAqCj4gPiArICogQHBhcmFtIHJlcQo+ID4gKyAqICAg
VGhlIDlQIHJlcXVlc3QuCj4gPiArICogQHBhcmFtIHJlY3Zfc2l6ZQo+ID4gKyAqICAgU2l6ZSBv
ZiB0aGUgcGFja2V0IHJlY2VpdmVkIGZyb20gdGhlIHRyYW5zcG9ydCBsYXllci4KPiA+ICsgKiBA
cmV0dXJuCj4gPiArICogICAtICgwKTogU3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLgo+ID4gKyAqICAg
LSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQuCj4gPiArICovCj4gPiAraW50IHVrXzlwcmVxX3Jl
Y2VpdmVfY2Ioc3RydWN0IHVrXzlwcmVxICpyZXEsIHVpbnQzMl90IHJlY3Zfc2l6ZSk7Cj4gPiAr
Cj4gPiArLyoqCj4gPiArICogV2FpdHMgZm9yIHRoZSByZXBseSB0byBiZSByZWNlaXZlZC4KPiA+
ICsgKgo+ID4gKyAqIEBwYXJhbSByZXEKPiA+ICsgKiAgIFRoZSA5UCByZXF1ZXN0Lgo+ID4gKyAq
IEByZXR1cm4KPiA+ICsgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgo+ID4gKyAqICAgLSAoPCAwKTog
RmFpbGVkLiBSZXR1cm5zIHRoZSBlcnJvciBjb2RlIHJlY2VpdmVkIGZyb20gdGhlIDlQIHNlcnZl
ci4KPiA+ICsgKi8KPiA+ICtpbnQgdWtfOXByZXFfd2FpdHJlcGx5KHN0cnVjdCB1a185cHJlcSAq
cmVxKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBFeHRyYWN0cyB0aGUgZXJyb3IgZnJvbSB0aGUg
cmVjZWl2ZWQgcmVwbHkuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gcmVxCj4gPiArICogICBUaGUg
OVAgcmVxdWVzdC4KPiA+ICsgKiBAcmV0dXJuCj4gPiArICogICAtICgwKTogTm8gZXJyb3Igb2Nj
dXJyZWQuCj4gPiArICogICAtICg8IDApOiBBbiBSZXJyb3Igd2FzIHJlY2VpdmVkLCB0aGUgZXJy
b3IgY29kZSBpcyA5cGZzLXNwZWNpZmljLgo+ID4gKyAqLwo+ID4gK2ludCB1a185cHJlcV9lcnJv
cihzdHJ1Y3QgdWtfOXByZXEgKnJlcSk7Cj4gPiArCj4gPiArI2lmZGVmIF9fY3BsdXNwbHVzCj4g
PiArfQo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKyNlbmRpZiAvKiBfX1VLXzlQUkVRX18gKi8KPiA+
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:40:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:40:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5r4A-0001RQ-50; Thu, 05 Sep 2019 12:40:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5r48-0001RL-EC
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:40:44 +0000
X-Inumbo-ID: 5ec67b6a-cfda-11e9-b299-bc764e2007e4
Received: from mail-lj1-x242.google.com (unknown [2a00:1450:4864:20::242])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5ec67b6a-cfda-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 12:40:41 +0000 (UTC)
Received: by mail-lj1-x242.google.com with SMTP id y23so2297326lje.9
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:40:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=Mq3hhjXeUdyKrDQE75mYn20lBh/0o1It8wFgElCGQvQ=;
 b=CwXVoBc8RtmaCg0+hV1/pM53WYckjdxWxWkTrll5UVnUDSK4t1NqdQhnvT0FQmSwU7
 uVHRcerekeI+hcEqdcHdPIlAPcC32ond1PJ2GbyxecP52IKrCT8GNORqu38C0KrW7Auw
 OcM5gGKyNC+FVsVbMy2DrNPvzdENLqW/9CJGV6PLUFLOTH/EyVOFdjoiIT6F8PGl0JrV
 RYtnYa8wpPdqSxde+9ZW3qlAdPDt60R13eI2zJUcH12IqzS6Pa8OD6/i7M1B2b3o3DSS
 ReCYnZ4IRsETRztVXWZUpCR+XXs+XNsMrzmUTju7kzChnj/aUVWEB4ZudyKdMkEvGZ7/
 XwcA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=Mq3hhjXeUdyKrDQE75mYn20lBh/0o1It8wFgElCGQvQ=;
 b=Hov48/gefsryEPrFJedGeplz1XXk0GtmMxloX8FkmJw9dgTuHBf6RxYLttIdyVY2Y/
 JlQvu4YfY72Tjv+Yi+CGhDwrXJjcON/XjJz/Nudw73fTyW3Qjf2jHnZpAJzRPu1RLtiJ
 FfoouHxt4e0GXUGbZOvA2+MuWuybewvghM1bQgAHgAaA/91Eo8NRMnnUGqjrYjTUrvu2
 Rw6lol0BZJn8xd3+6ONGL5JXUanXspA9Q7lAfHXAVDdwUtqMRWL3u0guGWH5U5OtbzkC
 kIf/0BlRbGbUdNXj3SNAwGl9E7fXQTYsfs+NKfEEMm/PCAqMzWwAudrTy1Vgu+QWr1NH
 xvYQ==
X-Gm-Message-State: APjAAAXcy/N+rRBH9iWWiI6yhAAOJUn/l1pKNgoXBXbrzInXCOPDfdi7
 wOeLLQ018FV3Xtyd39iOAl8xq7RC53wTDBGmW5I=
X-Google-Smtp-Source: APXvYqxbcdmJcEE83N3/XoeJsTCKWfhE6QMjhjYkwkWKLNAdnqIqnNwZnFECtgJWrbSXZgRIQ3KPbEbKB3URVIgYGnA=
X-Received: by 2002:a2e:9c99:: with SMTP id x25mr1945714lji.9.1567687240558;
 Thu, 05 Sep 2019 05:40:40 -0700 (PDT)
MIME-Version: 1.0
References: <20190629085608.15680-1-cristb@gmail.com>
 <20190629085608.15680-6-cristb@gmail.com>
 <ae35576f-2df1-28f4-4325-5756d3810e56@neclab.eu>
In-Reply-To: <ae35576f-2df1-28f4-4325-5756d3810e56@neclab.eu>
From: Cristian Banu <cristb@gmail.com>
Date: Thu, 5 Sep 2019 15:40:29 +0300
Message-ID: <CAFJttSVvZD_sAs=j1DwS83FBH-3e1Fw_94cACnFsLo1d_fr4EA@mail.gmail.com>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 5/8] lib/uk9p: Add 9P device
 implementation
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpQbGVhc2Ugc2VlIG15IGNvbW1lbnRzIGlubGluZSByZWdhcmRpbmcgY2hhbmdl
cyBpbiB2My4KClRoYW5rcyEKQ3Jpc3RpCgpPbiBTYXQsIEp1biAyOSwgMjAxOSBhdCA0OjM2IFBN
IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PiB3cm90ZToKPgo+IE9uIDI5
LjA2LjE5IDEwOjU2LCBDcmlzdGlhbiBCYW51IHdyb3RlOgo+ID4gVGhpcyBwYXRjaCBhZGRzIHRo
ZSBvcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHN1cHBvcnRlZCBieSB0cmFuc3BvcnQKPiA+IGxh
eWVycywgdGhlIEFQSSB0byBpbnRlcmFjdCB3aXRoIHRoZW0gYW5kIHRvIG1hbmFnZSByZXF1ZXN0
cy4KPiA+Cj4gPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29t
Pgo+ID4gLS0tCj4gPiAgIGxpYi91azlwLzlwZGV2LmMgICAgICAgICAgICAgICAgICB8IDMyNiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gICBsaWIvdWs5cC85cGRl
dl90cmFucy5jICAgICAgICAgICAgfCAgIDQgKwo+ID4gICBsaWIvdWs5cC9NYWtlZmlsZS51ayAg
ICAgICAgICAgICAgfCAgIDEgKwo+ID4gICBsaWIvdWs5cC9leHBvcnRzeW1zLnVrICAgICAgICAg
ICAgfCAgIDkgKysKPiA+ICAgbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oICAgICAgIHwgMTg4
ICsrKysrKysrKysrKysrKysrKysrKysKPiA+ICAgbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9j
b3JlLmggIHwgMTY5ICsrKysrKysrKysrKysrKysrKysrCj4gPiAgIGxpYi91azlwL2luY2x1ZGUv
dWsvOXBkZXZfdHJhbnMuaCB8ICAgMyArCj4gPiAgIDcgZmlsZXMgY2hhbmdlZCwgNzAwIGluc2Vy
dGlvbnMoKykKPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwLzlwZGV2LmMKPiA+ICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsvOXBkZXYuaAo+ID4gICBjcmVh
dGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmgKPiA+Cj4gPiBk
aWZmIC0tZ2l0IGEvbGliL3VrOXAvOXBkZXYuYyBiL2xpYi91azlwLzlwZGV2LmMKPiA+IG5ldyBm
aWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjA1YTU4MWVhZmJkYgo+ID4g
LS0tIC9kZXYvbnVsbAo+ID4gKysrIGIvbGliL3VrOXAvOXBkZXYuYwo+ID4gQEAgLTAsMCArMSwz
MjYgQEAKPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4g
PiArLyoKPiA+ICsgKiBBdXRob3JzOiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+
ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNh
IG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKgo+ID4gKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAo+ID4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ID4gKyAqIGFyZSBtZXQ6Cj4gPiArICoKPiA+ICsgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAo+ID4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiA+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4gKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKPiA+ICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ID4gKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiA+ICsgKiAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQo+ID4gKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4gPiArICoKPiA+ICsgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKPiA+ICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiA+
ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gPiArICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ID4gKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCj4gPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gPiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiA+ICsg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQo+ID4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gPiArICogUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gPiArICoKPiA+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9U
IEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ID4gKyAqLwo+ID4gKwo+ID4g
KyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ID4gKyNpbmNs
dWRlIDx1ay9jb25maWcuaD4KPiA+ICsjaW5jbHVkZSA8dWsvcGxhdC9zcGlubG9jay5oPgo+ID4g
KyNpbmNsdWRlIDx1ay9hbGxvYy5oPgo+ID4gKyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4g
PiArI2luY2x1ZGUgPHVrL2VycnB0ci5oPgo+ID4gKyNpbmNsdWRlIDx1ay9iaXRtYXAuaD4KPiA+
ICsjaW5jbHVkZSA8dWsvcmVmY291bnQuaD4KPiA+ICsjaW5jbHVkZSA8dWsvd2FpdC5oPgo+ID4g
KyNpbmNsdWRlIDx1ay85cGRldi5oPgo+ID4gKyNpbmNsdWRlIDx1ay85cGRldl90cmFucy5oPgo+
ID4gKyNpbmNsdWRlIDx1ay85cHJlcS5oPgo+ID4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ID4g
KyNpbmNsdWRlIDx1ay9zY2hlZC5oPgo+ID4gKyNpbmNsdWRlIDx1ay93YWl0Lmg+Cj4gPiArI2Vu
ZGlmCj4gPiArCj4gPiArc3RhdGljIGludCBfcmVxX21nbXRfaW5pdChzdHJ1Y3QgdWtfOXBkZXZf
cmVxX21nbXQgKnJlcV9tZ210KQo+ID4gK3sKPiA+ICsgICAgIHVrYXJjaF9zcGluX2xvY2tfaW5p
dCgmcmVxX21nbXQtPnNwaW5sb2NrKTsKPiA+ICsgICAgIHVrX2JpdG1hcF96ZXJvKHJlcV9tZ210
LT50YWdfYm0sIFVLXzlQX05VTVRBR1MpOwo+ID4gKyAgICAgVUtfSU5JVF9MSVNUX0hFQUQoJnJl
cV9tZ210LT5yZXFfbGlzdCk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICt9Cj4KPiBJ
IHRoaW5rIHRoaXMgZnVuY3Rpb24gY2FuIGJlIHZvaWQsIHJpZ2h0PwpZZXMsIGZpeGVkLgo+Cj4g
PiArCj4gPiArc3RhdGljIHZvaWQgX3JlcV9tZ210X2FkZF9yZXFfbG9ja2VkKHN0cnVjdCB1a185
cGRldl9yZXFfbWdtdCAqcmVxX21nbXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgdWtfOXByZXEgKnJlcSkKPiA+ICt7Cj4gPiArICAgICB1a19iaXRtYXBfc2V0KHJl
cV9tZ210LT50YWdfYm0sIHJlcS0+dGFnLCAxKTsKPiA+ICsgICAgIHVrX2xpc3RfYWRkKCZyZXEt
Pl9saXN0LCAmcmVxX21nbXQtPnJlcV9saXN0KTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZv
aWQgX3JlcV9tZ210X2RlbF9yZXFfbG9ja2VkKHN0cnVjdCB1a185cGRldl9yZXFfbWdtdCAqcmVx
X21nbXQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWtfOXByZXEg
KnJlcSkKPiA+ICt7Cj4gPiArICAgICB1a19iaXRtYXBfY2xlYXIocmVxX21nbXQtPnRhZ19ibSwg
cmVxLT50YWcsIDEpOwo+ID4gKyAgICAgdWtfbGlzdF9kZWwoJnJlcS0+X2xpc3QpOwo+ID4gK30K
PiA+ICsKPiA+ICtzdGF0aWMgaW50IF9yZXFfbWdtdF9uZXh0X3RhZ19sb2NrZWQoc3RydWN0IHVr
XzlwZGV2X3JlcV9tZ210ICpyZXFfbWdtdCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQxNl90ICp0YWcpCj4gPiArewo+ID4gKyAgICAgKnRhZyA9IHVrX2ZpbmRfbmV4dF96
ZXJvX2JpdChyZXFfbWdtdC0+dGFnX2JtLCBVS185UF9OVU1UQUdTLCAwKTsKPiA+ICsKPiA+ICsg
ICAgIHJldHVybiAwOwo+ID4gK30KPgo+IERvbid0IHlvdSB3YW50IHRvIHJldHVybiB0aGUgdGFn
IGluc3RlYWQgdXNpbmcgaXQgYXMgb3V0cHV0IHBhcmFtZXRlcj8KPiBUaGVyZSBhcmUgbm8gZXJy
b3JzIHJldHVybmVkLiBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBjYW4gYmUgdm9pZC4KPgo+ID4g
Kwo+ID4gK3N0YXRpYyB2b2lkIF9yZXFfbWdtdF9jbGVhbnVwKHN0cnVjdCB1a185cGRldl9yZXFf
bWdtdCAqcmVxX21nbXQgX191bnVzZWQpCj4gPiArewo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBm
bGFnczsKPiA+ICsgICAgIHVpbnQxNl90IHRhZzsKPiA+ICsgICAgIHN0cnVjdCB1a185cHJlcSAq
cmVxLCAqcmVxbjsKPiA+ICsKPiA+ICsgICAgIHVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmcmVx
X21nbXQtPnNwaW5sb2NrLCBmbGFncyk7Cj4gPiArICAgICB1a19saXN0X2Zvcl9lYWNoX2VudHJ5
X3NhZmUocmVxLCByZXFuLCAmcmVxX21nbXQtPnJlcV9saXN0LCBfbGlzdCkgewo+ID4gKyAgICAg
ICAgICAgICB0YWcgPSByZXEtPnRhZzsKPiA+ICsgICAgICAgICAgICAgX3JlcV9tZ210X2RlbF9y
ZXFfbG9ja2VkKHJlcV9tZ210LCByZXEpOwo+ID4gKyAgICAgICAgICAgICBpZiAoIXVrXzlwcmVx
X3B1dChyZXEpKSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgdWtfcHJfd2FybigiVGFnICVk
IHN0aWxsIGhhcyByZWZlcmVuY2VzIG9uIGNsZWFudXAuXG4iLAo+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGFnKTsKPiA+ICsgICAgICAgICAgICAgfQo+ID4gKyAgICAgfQo+ID4g
KyAgICAgdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJlcV9tZ210LT5zcGlubG9jaywg
ZmxhZ3MpOwo+ID4gK30KPiA+ICsKPiA+ICtzdHJ1Y3QgdWtfOXBkZXYgKnVrXzlwZGV2X2Nvbm5l
Y3QoY29uc3Qgc3RydWN0IHVrXzlwZGV2X3RyYW5zICp0cmFucywKPiA+ICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRldmljZV9pZGVudGlmaWVyLAo+ID4gKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW91bnRfYXJncywKPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1a19hbGxvYyAqYSkKPiA+ICt7Cj4gPiAr
ICAgICBzdHJ1Y3QgdWtfOXBkZXYgKmRldjsKPiA+ICsgICAgIGludCByYyA9IDA7Cj4gPiArCj4g
PiArICAgICBVS19BU1NFUlQodHJhbnMpOwo+ID4gKyAgICAgVUtfQVNTRVJUKGRldmljZV9pZGVu
dGlmaWVyKTsKPiA+ICsKPiA+ICsgICAgIGlmIChhID09IE5VTEwpCj4gPiArICAgICAgICAgICAg
IGEgPSB0cmFucy0+YTsKPiA+ICsKPiA+ICsgICAgIGRldiA9IHVrX2NhbGxvYyhhLCAxLCBzaXpl
b2YoKmRldikpOwo+ID4gKyAgICAgaWYgKGRldiA9PSBOVUxMKSB7Cj4gPiArICAgICAgICAgICAg
IHJjID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICB9Cj4g
PiArCj4gPiArICAgICBkZXYtPm9wcyA9IHRyYW5zLT5vcHM7Cj4gPiArICAgICBkZXYtPmEgPSBh
Owo+ID4gKwo+ID4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ID4gKyAgICAgdWtfd2FpdHFfaW5p
dCgmZGV2LT54bWl0X3dxKTsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsgICAgIHJjID0gX3JlcV9t
Z210X2luaXQoJmRldi0+X3JlcV9tZ210KTsKPiA+ICsgICAgIGlmIChyYyA8IDApCj4gPiArICAg
ICAgICAgICAgIGdvdG8gZnJlZV9kZXY7Cj4gPiArCj4gPiArICAgICByYyA9IGRldi0+b3BzLT5j
b25uZWN0KGRldiwgZGV2aWNlX2lkZW50aWZpZXIsIG1vdW50X2FyZ3MpOwo+ID4gKyAgICAgaWYg
KHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAgZ290byBmcmVlX3JlcTsKPiA+ICsKPiA+ICsgICAg
IFVLX0FTU0VSVChkZXYtPm1zaXplICE9IDApOwo+ID4gKwo+ID4gKyAgICAgZGV2LT5zdGF0ZSA9
IFVLXzlQREVWX0NPTk5FQ1RFRDsKPiA+ICsgICAgIGdvdG8gb3V0Owo+ID4gKwo+Cj4gTWlub3Ig
dGhpbmc6IFNpbmNlIHlvdSBkbyBub3QgbmVlZCBhbnkgY2xlYW4tdXAgaW4gdGhlIHN1Y2Nlc3Mg
ZXhpdCwgeW91Cj4gY291bGQgcmV0dXJuIGhlcmUgdGhlIGRldiBkaXJlY3RseSBhbmQgcmVtb3Zl
IHRoZSBpZiBzdGF0ZW1lbnQgaW4gdGhlCj4gb3V0LWNhc2UgKHdoaWNoIGJlY29tZXMgdG8gYW4g
ZXJyb3Itb25seSBleGl0KS4KRG9uZS4KPgo+ID4gK2ZyZWVfcmVxOgo+ID4gKyAgICAgX3JlcV9t
Z210X2NsZWFudXAoJmRldi0+X3JlcV9tZ210KTsKPiA+ICtmcmVlX2RldjoKPiA+ICsgICAgIHVr
X2ZyZWUoYSwgZGV2KTsKPiA+ICtvdXQ6Cj4gPiArICAgICBpZiAocmMgPT0gMCkKPiA+ICsgICAg
ICAgICAgICAgcmV0dXJuIGRldjsKPiA+ICsgICAgIHJldHVybiBFUlIyUFRSKHJjKTsKPiA+ICt9
Cj4gPiArCj4gPiAraW50IHVrXzlwZGV2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVrXzlwZGV2ICpkZXYp
Cj4gPiArewo+ID4gKyAgICAgaW50IHJjID0gMDsKPiA+ICsKPiA+ICsgICAgIFVLX0FTU0VSVChk
ZXYpOwo+ID4gKyAgICAgVUtfQVNTRVJUKGRldi0+c3RhdGUgPT0gVUtfOVBERVZfQ09OTkVDVEVE
KTsKPiA+ICsKPiA+ICsgICAgIGRldi0+c3RhdGUgPSBVS185UERFVl9ESVNDT05ORUNUSU5HOwo+
ID4gKwo+ID4gKyAgICAgLyogQ2xlYW4gdXAgdGhlIHJlcXVlc3RzIGJlZm9yZSBjbG9zaW5nIHRo
ZSBjaGFubmVsLiAqLwo+ID4gKyAgICAgX3JlcV9tZ210X2NsZWFudXAoJmRldi0+X3JlcV9tZ210
KTsKPiA+ICsKPiA+ICsgICAgIHJjID0gZGV2LT5vcHMtPmRpc2Nvbm5lY3QoZGV2KTsKPgo+IEl0
IHNlZW1zIGluIGNhc2Ugb2YgZHJpdmVyIGZhaWx1cmUgb24gZGlzY29ubmVjdCB5b3Ugc3RpbGwg
cHJvY2VlZCB3aXRoCj4gZGlzY29ubmVjdGluZy4gSXMgdGhpcyBpbnRlbmRlZD8KWWVzLCBJIGRv
Y3VtZW50ZWQgdGhpcyBpbiB0aGUgaGVhZGVyIGZpbGUgYXMgd2VsbC4KPgo+ID4gKwo+ID4gKyAg
ICAgdWtfZnJlZShkZXYtPmEsIGRldik7Cj4gPiArICAgICByZXR1cm4gcmM7Cj4gPiArfQo+ID4g
Kwo+ID4gK2ludCB1a185cGRldl9yZXF1ZXN0KHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3Qg
dWtfOXByZXEgKnJlcSkKPiA+ICt7Cj4gPiArICAgICBpbnQgcmM7Cj4gPiArCj4gPiArICAgICBV
S19BU1NFUlQoZGV2KTsKPiA+ICsgICAgIFVLX0FTU0VSVChyZXEpOwo+ID4gKwo+ID4gKyAgICAg
aWYgKFVLX1JFQURfT05DRShyZXEtPnN0YXRlKSAhPSBVS185UFJFUV9SRUFEWSkgewo+ID4gKyAg
ICAgICAgICAgICByYyA9IC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4g
KyAgICAgfQo+ID4gKwo+ID4gKyAgICAgaWYgKGRldi0+c3RhdGUgIT0gVUtfOVBERVZfQ09OTkVD
VEVEKSB7Cj4gPiArICAgICAgICAgICAgIHJjID0gLUVJTzsKPiA+ICsgICAgICAgICAgICAgZ290
byBvdXQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gPiAr
ICAgICB1a193YWl0cV93YWl0X2V2ZW50KCZkZXYtPnhtaXRfd3EsCj4gPiArICAgICAgICAgICAg
IChyYyA9IGRldi0+b3BzLT5yZXF1ZXN0KGRldiwgcmVxKSkgPj0gMCB8fCByYyAhPSAtRU5PU1BD
KTsKPiA+ICsjZWxzZQo+ID4gKyAgICAgcmMgPSAtRU5PU1BDOwo+ID4gKyAgICAgd2hpbGUgKHJj
IDwgMCAmJiByYyA9PSAtRU5PU1BDKQo+Cj4gSXNuJ3QgdGhlIGNvbmRpdGlvbiAocmMgPT0gLUVO
T1NQQykgZ29vZCBlbm91Z2ggZm9yIHRoZSB3aGlsZSBsb29wPwo+IEl0IGxvb2tzIGFsc28gdG8g
bWUgdGhhdCBhICdkbyB7fSB3aGlsZSgpJyBsb29wIHdvdWxkIGJlIG5pY2VyIGluIHRoaXMgY2Fz
ZS4KRml4ZWQsIG1vZGlmaWVkIHRoZSB3YWl0X2V2ZW50IGNvbmRpdGlvbiBhcyB3ZWxsLgo+Cj4g
PiArICAgICAgICAgICAgIHJjID0gZGV2LT5vcHMtPnJlcXVlc3QoZGV2LCByZXEpOwo+ID4gKyNl
bmRpZgo+ID4gKwo+ID4gK291dDoKPiA+ICsgICAgIHJldHVybiByYzsKPiA+ICt9Cj4gPiArCj4g
PiArdm9pZCB1a185cGRldl94bWl0X3JlYWR5KHN0cnVjdCB1a185cGRldiAqZGV2KQo+ID4gK3sK
PiA+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQKPiA+ICsgICAgIHVrX3dhaXRxX3dha2VfdXAoJmRl
di0+eG1pdF93cSk7Cj4gPiArI2VuZGlmCj4gPiArfQo+ID4gKwo+ID4gK3N0cnVjdCB1a185cHJl
cSAqdWtfOXBkZXZfY2FsbChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDhfdCB0eXBlLAo+ID4g
KyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4u
KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCB1a185cHJlcSAqcmVxOwo+ID4gKyAgICAgdmFfbGlz
dCB2bDsKPiA+ICsgICAgIGludCByYzsKPiA+ICsKPiA+ICsgICAgIHJlcSA9IHVrXzlwZGV2X3Jl
cV9jcmVhdGUoZGV2LCB0eXBlLCBzaXplKTsKPiA+ICsgICAgIGlmIChQVFJJU0VSUihyZXEpKQo+
ID4gKyAgICAgICAgICAgICByZXR1cm4gcmVxOwo+ID4gKwo+ID4gKyAgICAgdmFfc3RhcnQodmws
IGZtdCk7Cj4gPiArICAgICByYyA9IHVrXzlwcmVxX3ZzZXJpYWxpemUocmVxLCBmbXQsIHZsKTsK
PiA+ICsgICAgIHZhX2VuZCh2bCk7Cj4gPiArCj4gPiArICAgICBpZiAocmMgPCAwKQo+ID4gKyAg
ICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsKPiA+ICsgICAgIHJjID0gdWtfOXByZXFfcmVhZHko
cmVxLCBVS185UFJFUV9aQ0RJUl9OT05FLCBOVUxMLCAwLCAwKTsKPiA+ICsgICAgIGlmIChyYyA8
IDApCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgcmMgPSB1a185
cGRldl9yZXF1ZXN0KGRldiwgcmVxKTsKPiA+ICsgICAgIGlmIChyYyA8IDApCj4gPiArICAgICAg
ICAgICAgIGdvdG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgcmMgPSB1a185cHJlcV93YWl0cmVwbHko
cmVxKTsKPiA+ICsgICAgIGlmIChyYyA8IDApCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+
ID4gKwo+ID4gKyAgICAgcmV0dXJuIHJlcTsKPiA+ICtvdXQ6Cj4gPiArICAgICB1a185cGRldl9y
ZXFfcmVtb3ZlKGRldiwgcmVxKTsKPiA+ICsgICAgIHJldHVybiBFUlIyUFRSKHJjKTsKPiA+ICt9
Cj4gPiArCj4gPiArc3RydWN0IHVrXzlwcmVxICp1a185cGRldl9yZXFfY3JlYXRlKHN0cnVjdCB1
a185cGRldiAqZGV2LCB1aW50OF90IHR5cGUsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCBzaXplKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCB1a185cHJlcSAqcmVx
Owo+ID4gKyAgICAgaW50IHJjID0gMDsKPiA+ICsgICAgIHVpbnQxNl90IHRhZzsKPiA+ICsgICAg
IHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPiArCj4gPiArICAgICBVS19BU1NFUlQoZGV2KTsKPiA+
ICsKPiA+ICsgICAgIHNpemUgPSBNSU4oc2l6ZSwgZGV2LT5tc2l6ZSk7Cj4gPiArCj4gPiArICAg
ICByZXEgPSB1a185cHJlcV9hbGxvYyhkZXYtPmEsIHNpemUpOwo+ID4gKyAgICAgaWYgKHJlcSA9
PSBOVUxMKSB7Cj4gPiArICAgICAgICAgICAgIHJjID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAg
ICAgZ290byBvdXQ7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICB1a3BsYXRfc3Bpbl9sb2Nr
X2lycXNhdmUoJmRldi0+X3JlcV9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gPiArICAgICBpZiAo
dHlwZSA9PSBVS185UF9UVkVSU0lPTikgewo+ID4gKyAgICAgICAgICAgICB0YWcgPSBVS185UF9O
T1RBRzsKPiA+ICsgICAgICAgICAgICAgcmMgPSAwOwo+ID4gKyAgICAgfSBlbHNlCj4gPiArICAg
ICAgICAgICAgIHJjID0gX3JlcV9tZ210X25leHRfdGFnX2xvY2tlZCgmZGV2LT5fcmVxX21nbXQs
ICZ0YWcpOwo+ID4gKwo+ID4gKyAgICAgaWYgKHJjIDwgMCkgewo+ID4gKyAgICAgICAgICAgICB1
a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5fcmVxX21nbXQuc3BpbmxvY2ssIGZs
YWdzKTsKPiA+ICsgICAgICAgICAgICAgZ290byBvdXRfZnJlZTsKPiA+ICsgICAgIH0KPiA+ICsK
PiA+ICsgICAgIHJlcS0+dGFnID0gdGFnOwo+ID4gKyAgICAgcmVxLT54bWl0LnR5cGUgPSB0eXBl
Owo+ID4gKwo+ID4gKyAgICAgX3JlcV9tZ210X2FkZF9yZXFfbG9ja2VkKCZkZXYtPl9yZXFfbWdt
dCwgcmVxKTsKPiA+ICsgICAgIHVrcGxhdF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPl9y
ZXFfbWdtdC5zcGlubG9jaywgZmxhZ3MpOwo+ID4gKwo+ID4gKyAgICAgcmVxLT5zdGF0ZSA9IFVL
XzlQUkVRX0lOSVRJQUxJWkVEOwo+ID4gKyAgICAgZ290byBvdXQ7Cj4KPiBJIHRoaW5rIHlvdSBj
YW4gYWxzbyBoZXJlIGRpcmVjdGx5IHJldHVybiBzbyB0aGF0IHlvdSBkbyBub3QgbmVlZCB0aGUg
aWYKPiBzdGF0ZW1lbnQgYWZ0ZXIgdGhlIG91dCBsYWJlbC4gQnV0IHRoaXMgaXMgcmVhbGx5IGEg
bWlub3IgdGhpbmcuCkZpeGVkLgo+Cj4gPiArCj4gPiArb3V0X2ZyZWU6Cj4gPiArICAgICB1a185
cHJlcV9wdXQocmVxKTsKPiA+ICtvdXQ6Cj4gPiArICAgICBpZiAocmMgPT0gMCkKPiA+ICsgICAg
ICAgICAgICAgcmV0dXJuIHJlcTsKPiA+ICsgICAgIHJldHVybiBFUlIyUFRSKHJjKTsKPiA+ICt9
Cj4gPiArCj4gPiArc3RydWN0IHVrXzlwcmVxICp1a185cGRldl9yZXFfbG9va3VwKHN0cnVjdCB1
a185cGRldiAqZGV2LCB1aW50MTZfdCB0YWcpCj4gPiArewo+ID4gKyAgICAgdW5zaWduZWQgbG9u
ZyBmbGFnczsKPiA+ICsgICAgIHN0cnVjdCB1a185cHJlcSAqcmVxOwo+ID4gKyAgICAgaW50IHJj
ID0gLUVJTlZBTDsKPiA+ICsKPiA+ICsgICAgIHVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2
LT5fcmVxX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKPiA+ICsgICAgIHVrX2xpc3RfZm9yX2VhY2hf
ZW50cnkocmVxLCAmZGV2LT5fcmVxX21nbXQucmVxX2xpc3QsIF9saXN0KSB7Cj4gPiArICAgICAg
ICAgICAgIGlmICh0YWcgIT0gcmVxLT50YWcpCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Cj4gPiArICAgICAgICAgICAgIHJjID0gMDsKPiA+ICsgICAgICAgICAgICAgdWtfOXBy
ZXFfZ2V0KHJlcSk7Cj4gPiArICAgICAgICAgICAgIGJyZWFrOwo+ID4gKyAgICAgfQo+ID4gKyAg
ICAgdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+X3JlcV9tZ210LnNwaW5sb2Nr
LCBmbGFncyk7Cj4gPiArCj4gPiArICAgICBpZiAocmMgPT0gMCkKPiA+ICsgICAgICAgICAgICAg
cmV0dXJuIHJlcTsKPiA+ICsKPiA+ICsgICAgIHJldHVybiBFUlIyUFRSKHJjKTsKPiA+ICt9Cj4g
PiArCj4gPiAraW50IHVrXzlwZGV2X3JlcV9yZW1vdmUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0
cnVjdCB1a185cHJlcSAqcmVxKQo+ID4gK3sKPiA+ICsgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7
Cj4gPiArCj4gPiArICAgICB1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+X3JlcV9tZ210
LnNwaW5sb2NrLCBmbGFncyk7Cj4gPiArICAgICBfcmVxX21nbXRfZGVsX3JlcV9sb2NrZWQoJmRl
di0+X3JlcV9tZ210LCByZXEpOwo+ID4gKyAgICAgdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJlc3Rv
cmUoJmRldi0+X3JlcV9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gPiArCj4gPiArICAgICByZXR1
cm4gdWtfOXByZXFfcHV0KHJlcSk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgdWtfOXBkZXZfYWRq
dXN0X21zaXplKHN0cnVjdCB1a185cGRldiAqZGV2LCB1aW50MzJfdCBtc2l6ZSkKPiA+ICt7Cj4g
PiArICAgICBkZXYtPm1zaXplID0gTUlOKGRldi0+bXNpemUsIG1zaXplKTsKPiA+ICt9Cj4KPiBI
dW0sIHdpdGggdGhpcyBmdW5jdGlvbiB5b3UgY2FuIG9ubHkgZGVjcmVhc2UgdGhlIG1zaXplLCBu
ZXZlciBpbmNyZWFzZS4KPiBZb3UgYXJlIGFsc28gbmV2ZXIgZ2V0dGluZyBhIGZlZWRiYWNrIG9u
IHdoaWNoIHNpemUgdGhlIGRldmljZSBpcwo+IG9wZXJhdGluZyBub3cuIElzIGFsbCBvZiB0aGlz
IGludGVuZGVkPyBPdGhlcndpc2UgSSB3b3VsZCByZXR1cm4gYW4gaW50Cj4gdG8gdGVsbCBpZiB0
aGUgd2lzaGVkIG1zaXplIGlzIG91dCBvZiByYW5nZS4gSSBhbHNvIHdvdWxkIHNhdmUgdGhlIG1h
eAo+IHBvc3NpYmxlIG1zaXplIHNlcGFyYXRlbHkgZnJvbSB0aGUgY3VycmVudCBhcHBsaWVkIG1z
aXplIG9uIHRoZSB1a185cGRldgo+IHN0cnVjdHVyZS4KSXQgd2FzIGludGVuZGVkIGluIHRoZSBz
ZW5zZSB0aGF0IHdoZW4gc3RhcnRpbmcgYSBuZXcgOXBmcyBzZXNzaW9uLCB0aGUKY2xpZW50IHNl
bmRzIHRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBpdCBzdXBwb3J0cyBhbmQgdGhlIHNlcnZlciBy
ZXBsaWVzCndpdGggdGhlIG1heGltdW0gbWVzc2FnZSBzaXplIGJvdGggc2lkZXMgc3VwcG9ydCAo
d2hpY2ggaXMgYWx3YXlzIGxlc3MKdGhhbiBvciBlcXVhbCB0byB0aGUgY2xpZW50LXNpZGUgbWF4
aW11bSBtZXNzYWdlIHNpemUpLgpOZXZlcnRoZWxlc3MsIEkgcmVtb3ZlZCB0aGlzIGZ1bmN0aW9u
IGFuZCBhZGRlZCB0d28gZnVuY3Rpb25zCipfc2V0X3NpemUoKSwgKl9nZXRfc2l6ZSgpIHdoaWNo
IGxvb2sgY2xlYW5lciBhbmQgYWxsb3cgbW9yZSBmbGV4aWJpbGl0eS4KPgo+ID4gZGlmZiAtLWdp
dCBhL2xpYi91azlwLzlwZGV2X3RyYW5zLmMgYi9saWIvdWs5cC85cGRldl90cmFucy5jCj4gPiBp
bmRleCA2MzcyODc2NzY1YjIuLjBkYTUwZTUxMjA2ZSAxMDA2NDQKPiA+IC0tLSBhL2xpYi91azlw
LzlwZGV2X3RyYW5zLmMKPiA+ICsrKyBiL2xpYi91azlwLzlwZGV2X3RyYW5zLmMKPiA+IEBAIC00
Nyw2ICs0NywxMCBAQCBpbnQgdWtfOXBkZXZfdHJhbnNfcmVnaXN0ZXIoc3RydWN0IHVrXzlwZGV2
X3RyYW5zICp0cmFucykKPiA+ICAgewo+ID4gICAgICAgVUtfQVNTRVJUKHRyYW5zKTsKPiA+ICAg
ICAgIFVLX0FTU0VSVCh0cmFucy0+bmFtZSk7Cj4gPiArICAgICBVS19BU1NFUlQodHJhbnMtPm9w
cyk7Cj4gPiArICAgICBVS19BU1NFUlQodHJhbnMtPm9wcy0+Y29ubmVjdCk7Cj4gPiArICAgICBV
S19BU1NFUlQodHJhbnMtPm9wcy0+ZGlzY29ubmVjdCk7Cj4gPiArICAgICBVS19BU1NFUlQodHJh
bnMtPm9wcy0+cmVxdWVzdCk7Cj4gPiAgICAgICBVS19BU1NFUlQodHJhbnMtPmEpOwo+ID4KPiA+
ICAgICAgIHVrX2xpc3RfYWRkX3RhaWwoJnRyYW5zLT5fbGlzdCwgJnVrXzlwZGV2X3RyYW5zX2xp
c3QpOwo+ID4gZGlmZiAtLWdpdCBhL2xpYi91azlwL01ha2VmaWxlLnVrIGIvbGliL3VrOXAvTWFr
ZWZpbGUudWsKPiA+IGluZGV4IGFlYTcyMmE1ODViOS4uMzRjYzk4N2EyZjljIDEwMDY0NAo+ID4g
LS0tIGEvbGliL3VrOXAvTWFrZWZpbGUudWsKPiA+ICsrKyBiL2xpYi91azlwL01ha2VmaWxlLnVr
Cj4gPiBAQCAtNSwzICs1LDQgQEAgQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUs5UCkgICAgICAg
ICArPSAtSSQoTElCVUs5UF9CQVNFKS9pbmNsdWRlCj4gPgo+ID4gICBMSUJVSzlQX1NSQ1MteSAr
PSAkKExJQlVLOVBfQkFTRSkvOXBkZXZfdHJhbnMuYwo+ID4gICBMSUJVSzlQX1NSQ1MteSArPSAk
KExJQlVLOVBfQkFTRSkvOXByZXEuYwo+ID4gK0xJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5UF9C
QVNFKS85cGRldi5jCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhwb3J0c3ltcy51ayBiL2xp
Yi91azlwL2V4cG9ydHN5bXMudWsKPiA+IGluZGV4IDg1MGZmYTJkYjIzMy4uYzM3MzMwOGZiMGEy
IDEwMDY0NAo+ID4gLS0tIGEvbGliL3VrOXAvZXhwb3J0c3ltcy51awo+ID4gKysrIGIvbGliL3Vr
OXAvZXhwb3J0c3ltcy51awo+ID4gQEAgLTEyLDMgKzEyLDEyIEBAIHVrXzlwcmVxX2NvcHlfZnJv
bQo+ID4gICB1a185cHJlcV9yZWNlaXZlX2NiCj4gPiAgIHVrXzlwcmVxX3dhaXRyZXBseQo+ID4g
ICB1a185cHJlcV9lcnJvcgo+ID4gK3VrXzlwZGV2X2Nvbm5lY3QKPiA+ICt1a185cGRldl9kaXNj
b25uZWN0Cj4gPiArdWtfOXBkZXZfcmVxdWVzdAo+ID4gK3VrXzlwZGV2X3htaXRfcmVhZHkKPiA+
ICt1a185cGRldl9jYWxsCj4gPiArdWtfOXBkZXZfcmVxX2NyZWF0ZQo+ID4gK3VrXzlwZGV2X3Jl
cV9sb29rdXAKPiA+ICt1a185cGRldl9yZXFfcmVtb3ZlCj4gPiArdWtfOXBkZXZfYWRqdXN0X21z
aXplCj4gPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oIGIvbGliL3Vr
OXAvaW5jbHVkZS91ay85cGRldi5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXgg
MDAwMDAwMDAwMDAwLi5mMjIxMGJiZmZjOTIKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xp
Yi91azlwL2luY2x1ZGUvdWsvOXBkZXYuaAo+ID4gQEAgLTAsMCArMSwxODggQEAKPiA+ICsvKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4gPiArLyoKPiA+ICsgKiBB
dXRob3JzOiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+ID4gKyAqCj4gPiArICog
Q29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKgo+ID4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ID4gKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwo+ID4gKyAqIGFyZSBtZXQ6Cj4gPiArICoKPiA+ICsgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4gKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KPiA+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiA+ICsg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgo+ID4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHly
aWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiA+ICsgKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+
ID4gKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCj4gPiArICoKPiA+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiA+ICsgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCj4gPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiA+ICsgKiBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVU
T1JTIEJFCj4gPiArICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ID4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gPiArICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCj4gPiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiA+ICsgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQo+ID4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCj4gPiArICoKPiA+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBP
UiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19VS185
UERFVl9fCj4gPiArI2RlZmluZSBfX1VLXzlQREVWX18KPiA+ICsKPiA+ICsjaW5jbHVkZSA8aW50
dHlwZXMuaD4KPiA+ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gPiArI2luY2x1ZGUgPHVrL2Fs
bG9jLmg+Cj4gPiArI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgo+ID4gKyNpbmNsdWRlIDx1ay9lc3Nl
bnRpYWxzLmg+Cj4gPiArI2luY2x1ZGUgPHVrLzlwZGV2X2NvcmUuaD4KPiA+ICsjaW5jbHVkZSA8
dWsvcGxhdC9pcnEuaD4KPiA+ICsKPiA+ICsjaWZkZWYgX19jcGx1c3BsdXMKPiA+ICtleHRlcm4g
IkMiIHsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICtzdHJ1Y3QgdWtfOXBkZXZfdHJhbnM7Cj4gPiAr
Cj4gPiArLyoqCj4gPiArICogQ29ubmVjdCB0byBhbiB1bmRlcmx5aW5nIGRldmljZSwgb2J0YWlu
aW5nIGEgOXBkZXYgaGFuZGxlIHRvIHRoZSBjb25uZWN0aW9uLgo+ID4gKyAqCj4gPiArICogQHBh
cmFtIHRyYW5zCj4gPiArICogICBUaGUgdW5kZXJseWluZyB0cmFuc3BvcnQuCj4gPiArICogQHBh
cmFtIGRldmljZV9pZGVudGlmaWVyCj4gPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgZGV2
aWNlIChmb3IgdmlydGlvIGFuZCB4ZW4sIHRoZSBtb3VudCB0YWcpLgo+ID4gKyAqIEBwYXJhbSBt
b3VudF9hcmdzCj4gPiArICogICBBcmd1bWVudHMgcGFzc2VkIGRvd24gZnJvbSB0aGUgbW91bnQo
KSBjYWxsLgo+ID4gKyAqIEBwYXJhbSBhCj4gPiArICogICAoT3B0aW9uYWwpIEFsbG9jYXRvciB1
c2VkIGZvciBhbnkgYWxsb2NhdGlvbnMgZG9uZSBieSB0aGlzIDlwZGV2Lgo+ID4gKyAqICAgSWYg
TlVMTCwgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBhbGxvY2F0b3Igd2lsbCBiZSB1c2VkLgo+ID4g
KyAqIEByZXR1cm4KPiA+ICsgKiAgIC0gQ29ubmVjdGlvbiBoYW5kbGUsIGlmIHN1Y2Nlc3NmdWwu
Cj4gPiArICogICAtIEVycm9yIHBvaW50ZXIsIG90aGVyd2lzZS4KPiA+ICsgKi8KPiA+ICtzdHJ1
Y3QgdWtfOXBkZXYgKnVrXzlwZGV2X2Nvbm5lY3QoY29uc3Qgc3RydWN0IHVrXzlwZGV2X3RyYW5z
ICp0cmFucywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRl
dmljZV9pZGVudGlmaWVyLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciAqbW91bnRfYXJncywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCB1a19hbGxvYyAqYSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogRGlzY29ubmVjdCBmcm9tIHRo
ZSB1bmRlcmx5aW5nIGRldmljZS4KPiA+ICsgKgo+ID4gKyAqIEBwYXJhbSBkZXYKPiA+ICsgKiAg
IFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gPiArICogQHJldHVybgo+ID4gKyAqICAgLSAoMCk6
IFN1Y2Nlc3NmdWwuCj4gPiArICogICAtICg8IDApOiBGYWlsdXJlIHRvIGRpc2Nvbm5lY3QuCj4g
PiArICovCj4gPiAraW50IHVrXzlwZGV2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVrXzlwZGV2ICpkZXYp
Owo+Cj4gSSB0aGluayB5b3Ugc2hvdWxkIGVpdGhlciBkb2N1bWVudCB0aGF0IGV2ZW4gaW4gY2Fz
ZSBvZiBmYWlsdXJlIHRoZQo+IGRldmljZSBpcyBjbG9zZWQgb3IgZXhwZWN0IHRoYXQgdGhlIHVz
ZXIgaXMgcmV0cnlpbmcgdG8gZGlzY29ubmVjdC4KPgo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIFNl
bmQgYSA5UCByZXF1ZXN0IHRvIHRoZSBnaXZlbiA5UCBkZXZpY2UuCj4gPiArICoKPiA+ICsgKiBA
cGFyYW0gZGV2Cj4gPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJh
bSByZXEKPiA+ICsgKiAgIFRoZSA5UCByZXF1ZXN0Lgo+ID4gKyAqIEByZXR1cm4KPiA+ICsgKiAg
IC0gKDApOiBTdWNjZXNzZnVsLgo+ID4gKyAqICAgLSAoPCAwKTogRmFpbGVkLgo+ID4gKyAqLwo+
ID4gK2ludCB1a185cGRldl9yZXF1ZXN0KHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtf
OXByZXEgKnJlcSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogTm90aWZ5IHRoZSA5UCBkZXZpY2Ug
dGhhdCB0aGUgZGV2aWNlJ3MgdHJhbnNtaXQgcXVldWUgaXMgbm90IGZ1bGwgYW5kCj4gPiArICog
aXQgbWF5IGF0dGVtcHQgdG8gc2VuZCByZXF1ZXN0cyBhZ2Fpbi4KPiA+ICsgKgo+ID4gKyAqIEBw
YXJhbSBkZXYKPiA+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gPiArICovCj4gPiAr
dm9pZCB1a185cGRldl94bWl0X3JlYWR5KHN0cnVjdCB1a185cGRldiAqZGV2KTsKPgo+IE1heWJl
IGNhbGwgdGhpcyBmdW5jdGlvbiB0aGVuIC4uLl94bWl0X25vdGlmeSgpIGluc3RlYWQ/CkRvbmUu
Cj4KPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBDcmVhdGVzIGFuZCBzZW5kcyA5UCByZXF1ZXN0IHRv
IHRoZSBnaXZlbiA5UCBkZXZpY2UsIHNlcmlhbGl6aW5nIGl0IHdpdGgKPiA+ICsgKiB0aGUgZ2l2
ZW4gYXJndW1lbnRzLiBUaGlzIGZ1bmN0aW9uIGFjdHMgYXMgYSBzaG9ydGhhbmQgZm9yIHRoZSBl
eHBsaWNpdAo+ID4gKyAqIGNhbGxzIHRvIHJlcV9jcmVhdGUoKSwgc2VyaWFsaXplKCksIHJlYWR5
KCksIHJlcXVlc3QoKSwgd2FpdHJlcGx5KCkuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gZGV2Cj4g
PiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSB0eXBlCj4gPiAr
ICogICBUcmFuc21pdCB0eXBlIG9mIHRoZSByZXF1ZXN0LCBlLmcuIFR2ZXJzaW9uLCBUcmVhZCwg
YW5kIHNvIG9uLgo+ID4gKyAqIEBwYXJhbSBzaXplCj4gPiArICogICBUaGUgbWF4aW11bSBzaXpl
IGZvciB0aGUgcmVjZWl2ZSBhbmQgc2VuZCBidWZmZXJzLgo+ID4gKyAqIEBwYXJhbSBmbXQKPiA+
ICsgKiAgIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgdG8gYmUgc2VyaWFsaXplZCwgaW4gdGhlIHdh
eSB1a185cHJlcV9zZXJpYWxpemUoKQo+ID4gKyAqICAgZXhwZWN0cyBpdC4KPiA+ICsgKiBAcGFy
YW0gLi4uCj4gPiArICogICBUaGUgYXJndW1lbnRzIHRvIGJlIHNlcmlhbGl6ZWQuCj4gPiArICog
QHJldHVybgo+ID4gKyAqICAgLSAoIVBUUklTRVJSKTogVGhlIDlwIHJlcXVlc3QgaW4gdGhlIFVL
XzlQUkVRX1JFQ0VJVkVEIHN0YXRlLgo+ID4gKyAqICAgLSBQVFJJU0VSUjogVGhlIGVycm9yIGNv
ZGUgd2l0aCB3aGljaCBhbnkgb2YgdGhlIHN0ZXBzIGZhaWxlZC4KPiA+ICsgKi8KPiA+ICtzdHJ1
Y3QgdWtfOXByZXEgKnVrXzlwZGV2X2NhbGwoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQ4X3Qg
dHlwZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLCBjb25zdCBjaGFy
ICpmbXQsIC4uLik7Cj4gPiArCj4gPiArLyoqCj4gPiArICogQ3JlYXRlIGEgbmV3IHJlcXVlc3Qs
IGF1dG9tYXRpY2FsbHkgYWxsb2NhdGluZyBpdHMgdGFnLCBiYXNlZCBvbiBpdHMgdHlwZS4KPiA+
ICsgKgo+ID4gKyAqIEBwYXJhbSBkZXYKPiA+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2Uu
Cj4gPiArICogQHBhcmFtIHR5cGUKPiA+ICsgKiAgIFRyYW5zbWl0IHR5cGUgb2YgdGhlIHJlcXVl
c3QsIGUuZy4gVHZlcnNpb24sIFRyZWFkLCBhbmQgc28gb24uCj4gPiArICogQHBhcmFtIHNpemUK
PiA+ICsgKiAgIFRoZSBtYXhpbXVtIHNpemUgZm9yIHRoZSByZWNlaXZlIGFuZCBzZW5kIGJ1ZmZl
cnMuCj4gPiArICogQHJldHVybgo+ID4gKyAqICAgSWYgbm90IGFuIGVycm9yIHBvaW50ZXIsIHRo
ZSBjcmVhdGVkIHJlcXVlc3QuCj4gPiArICogICBPdGhlcndpc2UsIHRoZSBlcnJvciBpbiBjcmVh
dGluZyB0aGUgcmVxdWVzdDoKPiA+ICsgKiAgIC0gRU5PTUVNOiBObyBtZW1vcnkgZm9yIHRoZSBy
ZXF1ZXN0IG9yIG5vIGF2YWlsYWJsZSB0YWdzLgo+ID4gKyAqLwo+ID4gK3N0cnVjdCB1a185cHJl
cSAqdWtfOXBkZXZfcmVxX2NyZWF0ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDhfdCB0eXBl
LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2l6ZSk7Cj4gPiAr
Cj4gPiArLyoqCj4gPiArICogTG9va3MgdXAgYSByZXF1ZXN0IGJhc2VkIG9uIHRoZSBnaXZlbiB0
YWcuIFRoaXMgaXMgZ2VuZXJhbGx5IHVzZWQgYnkKPiA+ICsgKiB0cmFuc3BvcnQgbGF5ZXJzIG9u
IHJlY2VpdmluZyBhIDlQIG1lc3NhZ2UuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gZGV2Cj4gPiAr
ICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSB0YWcKPiA+ICsgKiAg
IFRoZSB0YWcgdG8gbG9vayB1cC4KPiA+ICsgKiBAcmV0dXJuCj4gPiArICogICAtIE5VTEw6IE5v
IHJlcXVlc3Qgd2l0aCB0aGUgZ2l2ZW4gdGFnIHdhcyBmb3VuZC4KPiA+ICsgKiAgIC0gKCE9TlVM
TCk6IFRoZSByZXF1ZXN0Lgo+ID4gKyAqLwo+ID4gK3N0cnVjdCB1a185cHJlcSAqdWtfOXBkZXZf
cmVxX2xvb2t1cChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDE2X3QgdGFnKTsKPiA+ICsKPiA+
ICsvKioKPiA+ICsgKiBSZW1vdmUgYSByZXF1ZXN0IGZyb20gdGhlIGdpdmVuIDlwIGRldmljZS4g
SWYgdGhlIHJlcXVlc3QgaXMgaW4tZmxpZ2h0LAo+ID4gKyAqIGl0IHdpbGwgYmUgZnJlZWQgd2hl
biBhbGwgdGhlIHJlZmVyZW5jZXMgdG8gaXQgYXJlIGdvbmUuCj4gPiArICoKPiA+ICsgKiBAcGFy
YW0gZGV2Cj4gPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSBy
ZXEKPiA+ICsgKiAgIFRoZSByZXF1ZXN0IHRvIGJlIHJlbW92ZWQuCj4gPiArICogQHJldHVybgo+
ID4gKyAqICAgLSAwOiBUaGVyZSBhcmUgbW9yZSBhY3RpdmUgcmVmZXJlbmNlcy4KPiA+ICsgKiAg
IC0gMTogVGhpcyB3YXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0Lgo+ID4gKyAq
Lwo+ID4gK2ludCB1a185cGRldl9yZXFfcmVtb3ZlKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1
Y3QgdWtfOXByZXEgKnJlcSk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogQWRqdXN0cyB0aGUgbWVz
c2FnZSBzaXplIHRvIHRoZSBnaXZlbiBtYXhpbXVtIHNpemUuCj4gPiArICoKPiA+ICsgKiBAcGFy
YW0gZGV2Cj4gPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSBt
c2l6ZQo+ID4gKyAqICAgQWxsb3dlZCBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZS4KPiA+ICsgKi8KPiA+
ICt2b2lkIHVrXzlwZGV2X2FkanVzdF9tc2l6ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDMy
X3QgbXNpemUpOwo+ID4gKwo+ID4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ID4gK30KPiA+ICsjZW5k
aWYKPiA+ICsKPiA+ICsjZW5kaWYgLyogX19VS185UERFVl9fICovCj4gPiBkaWZmIC0tZ2l0IGEv
bGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmggYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlw
ZGV2X2NvcmUuaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAw
MC4uZDdlZjM0MWUxMmQ2Cj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysgYi9saWIvdWs5cC9pbmNs
dWRlL3VrLzlwZGV2X2NvcmUuaAo+ID4gQEAgLTAsMCArMSwxNjkgQEAKPiA+ICsvKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4gPiArLyoKPiA+ICsgKiBBdXRob3Jz
OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+ID4gKyAqCj4gPiArICogQ29weXJp
Z2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KPiA+ICsgKgo+ID4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ID4gKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwo+ID4gKyAqIGFyZSBtZXQ6Cj4gPiArICoKPiA+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4gKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KPiA+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiA+ICsgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgo+ID4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBo
b2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiA+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ID4gKyAq
ICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCj4gPiArICoKPiA+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiA+ICsgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCj4gPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiA+ICsgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
Cj4gPiArICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgo+ID4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gPiArICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCj4gPiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiA+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ID4g
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFCj4gPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Cj4gPiArICoKPiA+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJ
RklFRCBJTiBBTlkgV0FZLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpZm5kZWYgX19VS185UERFVl9D
T1JFX18KPiA+ICsjZGVmaW5lIF9fVUtfOVBERVZfQ09SRV9fCj4gPiArCj4gPiArI2luY2x1ZGUg
PHN0cmluZy5oPgo+ID4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ID4gKyNpbmNsdWRlIDx1ay9j
b25maWcuaD4KPiA+ICsjaW5jbHVkZSA8dWsvYXJjaC9zcGlubG9jay5oPgo+ID4gKyNpbmNsdWRl
IDx1ay9iaXRtYXAuaD4KPiA+ICsjaW5jbHVkZSA8dWsvbGlzdC5oPgo+ID4gKyNpbmNsdWRlIDx1
ay85cF9jb3JlLmg+Cj4gPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gPiArI2luY2x1ZGUgPHVr
L3dhaXRfdHlwZXMuaD4KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsjaWZkZWYgX19jcGx1c3BsdXMK
PiA+ICtleHRlcm4gIkMiIHsKPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICtzdHJ1Y3QgdWtfOXBkZXY7
Cj4gPiArc3RydWN0IHVrXzlwcmVxOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIEZ1bmN0aW9uIHR5
cGUgdXNlZCBmb3IgY29ubmVjdGluZyB0byBhIGRldmljZSBvbiBhIGNlcnRhaW4gdHJhbnNwb3J0
Lgo+ID4gKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWxzbyBzZXQgdGhlIG1zaXplIGZp
ZWxkIGluIHRoZSA5UCBkZXZpY2UKPiA+ICsgKiBzdHJ1Y3QgdG8gdGhlIG1heGltdW0gYWxsb3dl
ZCBtZXNzYWdlIHNpemUuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gZGV2Cj4gPiArICogICBUaGUg
VW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSBkZXZpY2VfaWRlbnRpZmllcgo+ID4g
KyAqICAgVGhlIGlkZW50aWZpZXIgb2YgdGhlIHVuZGVybHlpbmcgZGV2aWNlIChtb3VudF90YWcg
Zm9yIHZpcnRpbywgZXRjLikKPiA+ICsgKiBAcGFyYW0gbW91bnRfYXJncwo+ID4gKyAqICAgQXJn
dW1lbnRzIHJlY2VpdmVkIGJ5IHRoZSBtb3VudCgpIGNhbGwsIGZvciB0cmFuc3BvcnQtc3BlY2lm
aWMgb3B0aW9ucy4KPiA+ICsgKiBAcmV0dXJuCj4gPiArICogICAtICgtRUJVU1kpOiBEZXZpY2Ug
aXMgYWxyZWFkeSBpbi11c2UuCj4gPiArICogICAtICgtRU5PRU5UKTogRGV2aWNlIGRvZXMgbm90
IGV4aXN0Lgo+ID4gKyAqICAgLSAoMCk6IFN1Y2Nlc3NmdWwuCj4gPiArICogICAtICg8IDApOiBG
YWlsZWQgd2l0aCBhIHRyYW5zcG9ydCBsYXllciBkZXBlbmRlbnQgZXJyb3IuCj4gPiArICovCj4g
PiArdHlwZWRlZiBpbnQgKCp1a185cGRldl9jb25uZWN0X3QpKHN0cnVjdCB1a185cGRldiAqZGV2
LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGV2aWNlX2lk
ZW50aWZpZXIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpt
b3VudF9hcmdzKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBGdW5jdGlvbiB0eXBlIHVzZWQgZm9y
IGRpc2Nvbm5lY3RpbmcgZnJvbSB0aGUgZGV2aWNlLgo+ID4gKyAqCj4gPiArICogQHBhcmFtIGRl
dgo+ID4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiA+ICsgKiBAcmV0dXJuCj4gPiAr
ICogICAtICgwKTogU3VjY2Vzc2Z1bC4KPiA+ICsgKiAgIC0gKDwgMCk6IEZhaWxlZCB3aXRoIGEg
dHJhbnNwb3J0IGxheWVyIGRlcGVuZGVudCBlcnJvci4KPiA+ICsgKi8KPiA+ICt0eXBlZGVmIGlu
dCAoKnVrXzlwZGV2X2Rpc2Nvbm5lY3RfdCkoc3RydWN0IHVrXzlwZGV2ICpkZXYpOwo+ID4gKwo+
ID4gKy8qKgo+ID4gKyAqIEZ1bmN0aW9uIHR5cGUgdXNlZCBmb3Igc2VuZGluZyBhIHJlcXVlc3Qg
dG8gdGhlIDlQIGRldmljZS4KPiA+ICsgKgo+ID4gKyAqIEBwYXJhbSBkZXYKPiA+ICsgKiAgIFRo
ZSBVbmlrcmFmdCA5UCBkZXZpY2UuCj4gPiArICogQHBhcmFtIHJlcQo+ID4gKyAqICAgUmVmZXJl
bmNlIHRvIHRoZSByZXF1ZXN0IHRvIGJlIHNlbnQuCj4gPiArICogQHJldHVybgo+ID4gKyAqICAg
LSAoMCk6IFN1Y2Nlc3NmdWwuCj4gPiArICogICAtICg8IDApOiBGYWlsZWQuIElmIC1FTk9TUEMs
IHRoZW4gdGhlIHRyYW5zcG9ydCBsYXllciBkb2VzIG5vdCBoYXZlIGVub3VnaAo+ID4gKyAqICAg
c3BhY2UgdG8gc2VuZCB0aGlzIHJlcXVlc3QgYW5kIHJldHJpZXMgYXJlIHJlcXVpcmVkLgo+ID4g
KyAqLwo+ID4gK3R5cGVkZWYgaW50ICgqdWtfOXBkZXZfcmVxdWVzdF90KShzdHJ1Y3QgdWtfOXBk
ZXYgKmRldiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1a185cHJl
cSAqcmVxKTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBBIHN0cnVjdHVyZSB1c2VkIHRvIHN0b3Jl
IHRoZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBhIGNlcnRhaW4gdHJhbnNwb3J0Lgo+ID4gKyAq
Lwo+ID4gK3N0cnVjdCB1a185cGRldl90cmFuc19vcHMgewo+ID4gKyAgICAgdWtfOXBkZXZfY29u
bmVjdF90ICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Q7Cj4gPiArICAgICB1a185cGRldl9k
aXNjb25uZWN0X3QgICAgICAgICAgICAgICAgICAgZGlzY29ubmVjdDsKPiA+ICsgICAgIHVrXzlw
ZGV2X3JlcXVlc3RfdCAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Owo+ID4gK307Cj4gPiAr
Cj4gPiArLyoqCj4gPiArICogQGludGVybmFsCj4gPiArICogQSBzdHJ1Y3R1cmUgdXNlZCBmb3Ig
OXAgcmVxdWVzdHMnIG1hbmFnZW1lbnQuCj4gPiArICovCj4gPiArc3RydWN0IHVrXzlwZGV2X3Jl
cV9tZ210IHsKPiA+ICsgICAgIC8qIFNwaW5sb2NrIHByb3RlY3RpbmcgdGhpcyBkYXRhLiAqLwo+
ID4gKyAgICAgc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgICAgICBzcGlubG9jazsKPiA+ICsg
ICAgIC8qIEJpdG1hcCBvZiBhdmFpbGFibGUgdGFncy4gKi8KPiA+ICsgICAgIHVuc2lnbmVkIGxv
bmcgICAgICAgICAgICAgICAgICAgdGFnX2JtW1VLX0JJVFNfVE9fTE9OR1MoVUtfOVBfTlVNVEFH
UyldOwo+ID4gKyAgICAgLyogTGlzdCBvZiByZXF1ZXN0cyBhbGxvY2F0ZWQgYW5kIG5vdCB5ZXQg
cmVtb3ZlZC4gKi8KPiA+ICsgICAgIHN0cnVjdCB1a19saXN0X2hlYWQgICAgICAgICAgICAgcmVx
X2xpc3Q7Cj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBAaW50ZXJuYWwKPiA+ICsgKiA5
UERFViB0cmFuc3BvcnQgc3RhdGUKPiA+ICsgKgo+ID4gKyAqIC0gQ09OTkVDVEVEOiBEZWZhdWx0
IHN0YXRlIGFmdGVyIGluaXRpYWxpemF0aW9uIGFuZCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbi4K
PiA+ICsgKiAtIERJU0NPTk5FQ1RJTkc6IEFmdGVyIGEgdWtfOXBkZXZfZGlzY29ubmVjdCgpIGNh
bGwuCj4gPiArICogICBObyByZXF1ZXN0cyBhcmUgYWxsb3dlZCBhbnltb3JlLiBXaGVuIGFsbCBs
aXZlIHJlc291cmNlcyBoYXZlIGJlZW4KPiA+ICsgKiAgIGRlc3Ryb3llZCwgdGhlIDlwZGV2IHdp
bGwgZnJlZSBpdHNlbGYuCj4gPiArICovCj4gPiArZW51bSB1a185cGRldl90cmFuc19zdGF0ZSB7
Cj4gPiArICAgICBVS185UERFVl9DT05ORUNURUQsCj4gPiArICAgICBVS185UERFVl9ESVNDT05O
RUNUSU5HCj4gPiArfTsKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiA5UERFVgo+ID4gKyAqIEEgc3Ry
dWN0dXJlIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCBhIDlQIGRldmljZS4KPiA+ICsgKi8KPiA+ICtz
dHJ1Y3QgdWtfOXBkZXYgewo+ID4gKyAgICAgLyogVW5kZXJseWluZyB0cmFuc3BvcnQgb3BlcmF0
aW9ucy4gKi8KPiA+ICsgICAgIGNvbnN0IHN0cnVjdCB1a185cGRldl90cmFuc19vcHMgKm9wczsK
PiA+ICsgICAgIC8qIEFsbG9jYXRvciB1c2VkIGJ5IHRoaXMgZGV2aWNlLiAqLwo+ID4gKyAgICAg
c3RydWN0IHVrX2FsbG9jICAgICAgICAgICAgICAgICAqYTsgLyogU2VlIHVrXzlwZGV2X2Nvbm5l
Y3QoKS4gKi8KPiA+ICsgICAgIC8qIFRyYW5zcG9ydCBzdGF0ZS4gKi8KPiA+ICsgICAgIGVudW0g
dWtfOXBkZXZfdHJhbnNfc3RhdGUgICAgICAgc3RhdGU7Cj4gPiArICAgICAvKiBNYXhpbXVtIHNp
emUgb2YgYSBtZXNzYWdlLiAqLwo+ID4gKyAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAg
ICAgICBtc2l6ZTsKPiA+ICsgICAgIC8qIFRyYW5zcG9ydC1hbGxvY2F0ZWQgZGF0YS4gKi8KPiA+
ICsgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnByaXY7Cj4gPiArICAgICAv
KiBAaW50ZXJuYWwgUmVxdWVzdCBtYW5hZ2VtZW50LiAqLwo+ID4gKyAgICAgc3RydWN0IHVrXzlw
ZGV2X3JlcV9tZ210ICAgICAgICBfcmVxX21nbXQ7Cj4gPiArI2lmIENPTkZJR19MSUJVS1NDSEVE
Cj4gPiArICAgICAvKgo+ID4gKyAgICAgICogU2xlcHQgb24gYnkgdGhyZWFkcyB3YWl0aW5nIGZv
ciB0aGVpciB0dXJuIGZvciBlbm91Z2ggc3BhY2UgdG8gc2VuZAo+ID4gKyAgICAgICogdGhlIHJl
cXVlc3QuCj4gPiArICAgICAgKi8KPiA+ICsgICAgIHN0cnVjdCB1a193YWl0cSAgICAgICAgICAg
ICAgICAgeG1pdF93cTsKPiA+ICsjZW5kaWYKPiA+ICt9Owo+ID4gKwo+ID4gKyNpZmRlZiBfX2Nw
bHVzcGx1cwo+ID4gK30KPiA+ICsjZW5kaWYKPiA+ICsKPiA+ICsjZW5kaWYgLyogX19VS185UERF
Vl9DT1JFX18gKi8KPiA+IGRpZmYgLS1naXQgYS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X3Ry
YW5zLmggYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X3RyYW5zLmgKPiA+IGluZGV4IDdiNjY0
NWZiNWU4NC4uZDczYWYzZTNiZWFjIDEwMDY0NAo+ID4gLS0tIGEvbGliL3VrOXAvaW5jbHVkZS91
ay85cGRldl90cmFucy5oCj4gPiArKysgYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X3RyYW5z
LmgKPiA+IEBAIC0zNyw2ICszNyw3IEBACj4gPgo+ID4gICAjaW5jbHVkZSA8c3RkYm9vbC5oPgo+
ID4gICAjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gPiArI2luY2x1ZGUgPHVrLzlwZGV2X2NvcmUu
aD4KPiA+Cj4gPiAgICNpZmRlZiBfX2NwbHVzcGx1cwo+ID4gICBleHRlcm4gIkMiIHsKPiA+IEBA
IC01MSw2ICs1Miw4IEBAIHN0cnVjdCB1a185cGRldl90cmFucyB7Cj4gPiAgICAgICAgKiBzcGVj
aWZpYyB0cmFuc3BvcnQuCj4gPiAgICAgICAgKi8KPiA+ICAgICAgIGNvbnN0IGNoYXIgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqbmFtZTsKPiA+ICsgICAgIC8qIFN1cHBvcnRlZCBvcGVy
YXRpb25zLiAqLwo+ID4gKyAgICAgY29uc3Qgc3RydWN0IHVrXzlwZGV2X3RyYW5zX29wcyAgICAg
ICAgICpvcHM7Cj4gPiAgICAgICAvKiBDYW4gdGhlIHRyYW5zcG9ydCBiZSB1c2VkIGFzIGEgZGVm
YXVsdCBvbmU/ICovCj4gPiAgICAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaXNfZGVmYXVsdDsKPiA+ICAgICAgIC8qIEFsbG9jYXRvciB1c2VkIGZvciBkZXZpY2Vz
IHdoaWNoIHVzZSB0aGlzIHRyYW5zcG9ydCBsYXllci4gKi8KPiA+CgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0
Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 12:55:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 12:55:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rIq-0002V0-VS; Thu, 05 Sep 2019 12:55:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5rIq-0002Uv-AE
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 12:55:56 +0000
X-Inumbo-ID: 7ed0c3be-cfdc-11e9-b299-bc764e2007e4
Received: from mail-lf1-x144.google.com (unknown [2a00:1450:4864:20::144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7ed0c3be-cfdc-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 12:55:54 +0000 (UTC)
Received: by mail-lf1-x144.google.com with SMTP id u13so1914130lfm.9
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 05:55:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=/1iDzpTsOCc0IFRh2IzqKJu+7rPwRVBFXpTupkzO4PI=;
 b=TXWETp5HEqhpIOkbv/RPq2EKhaW4XqslWjMc+9GLUvBKpYWuQLEsqzvAvU++XTycM9
 ofCdM6IP7dkjODitoyYL2X8WebB/I3vrQ9YLwwoLEJYsYKyTspa08ziy+KCEj3zPPBHM
 M3jXhREs+Xv+WyJv27sCRJlZ1YCV0gc238XBbOLHVb1KiWkizFQdMWB3sm89vM5lqXts
 aCxHIwAQRhQ1HudZrH7BCcoe5zX3BhCOJYgqYwavBv6iP1iEQ6LQtgZhosKBtrNZr1Ox
 VBz+iFplcas8hhAM/PU2LwgWeZIbp+Y7+uifnSgayCcqM/kO0hpvcrJUiFYE1+iaxfyr
 vjBg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=/1iDzpTsOCc0IFRh2IzqKJu+7rPwRVBFXpTupkzO4PI=;
 b=LcaIsryTC2ibPQwOjMhT02DiBTC3U19NUNEViz1w3PK0kcDwD2bv0gGREIF5fNCvFZ
 PooJhwL74/cNqupTUSIzigKkihm7fKVttO/xUwEFc8+4rkwOPntlzzfxGY+Plhje3twg
 7OaBpzY1KDUGXIOdK66I0OUjjR7pIpvUNJJ4Y7b9b2N4vsyVMbmfx5mBzlmS41gl/7ui
 Ht1u6pm3h+zr52GoFbBjN78szTkER8xToGddNf6yRus3dnjD/gf+oP6H3hG4FIeoxHl1
 sH3SfFTa96L6d2p2/tm79YQKzMtJotyrS6ymhoBq2Cxk4iZwK63GNV9OSyGTQhnVOHVp
 2OUQ==
X-Gm-Message-State: APjAAAXug4vVlbgcygr0dHvy2YG2RPyw9Z5iJRc1yCFDE4SRX9u4YieM
 VZqnpG1v/yWQvpofq5bHFSm3UD0cwmlCWZxT/uw=
X-Google-Smtp-Source: APXvYqyusZB6I+WM5mDOK732m4+w5nc6J1w3VIykHjAaQHVYgSuR7z1+kFuvesd1j415/FWu9Jxt1Jnn2EWuhOXIOlo=
X-Received: by 2002:ac2:510c:: with SMTP id q12mr2189183lfb.163.1567688153070; 
 Thu, 05 Sep 2019 05:55:53 -0700 (PDT)
MIME-Version: 1.0
References: <20190629085608.15680-1-cristb@gmail.com>
 <20190629085608.15680-7-cristb@gmail.com>
 <dac09404-9519-253c-0ccf-e05bdc2c1f90@neclab.eu>
 <fd146061-591c-0d63-8b88-96fb1a0293c3@neclab.eu>
In-Reply-To: <fd146061-591c-0d63-8b88-96fb1a0293c3@neclab.eu>
From: Cristian Banu <cristb@gmail.com>
Date: Thu, 5 Sep 2019 15:55:42 +0300
Message-ID: <CAFJttSWSexwdFM+7ae3m1i1o83cLWG=+YCX9cV1rrkVWj_ptbw@mail.gmail.com>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 6/8] lib/uk9p: Add 9P fid
 abstraction
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpJIGNoYW5nZWQgdGhlIHNpZ25hdHVyZXMgb2YgdGhlIGZ1bmN0aW9ucyB0byBy
ZXR1cm4gdm9pZC4KClRoYW5rcyEKQ3Jpc3RpCgpPbiBGcmksIEp1bCA1LCAyMDE5IGF0IDE6MDgg
QU0gU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+IHdyb3RlOgo+Cj4KPgo+
IE9uIDA1LjA3LjE5IDAwOjAxLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+ID4gT24gMjkuMDYuMTkg
MTA6NTYsIENyaXN0aWFuIEJhbnUgd3JvdGU6Cj4gPj4gVGhpcyBwYXRjaCBhZGRzIHRoZSB1a185
cGZpZCBzdHJ1Y3QsIHdoaWNoIGFic3RyYWN0cyB0aGUgNC1ieXRlIGZpZAo+ID4+IG51bWJlciB1
c2VkIGJ5IHRoZSA5cCBwcm90b2NvbCB0byBhc3NvY2lhdGUgbnVtYmVycyB3aXRoIGZpbGVzeXN0
ZW0KPiA+PiBlbnRyaWVzIChmaWxlcywgZGlyZWN0b3JpZXMsIGV0Yy4pCj4gPj4KPiA+PiBUaGlz
IHBhdGNoIGFsc28gYWRkcyBhIGZpZCBjYWNoZSBmb3IgZWFjaCA5cCBkZXZpY2UsIGVuYWJsaW5n
IHJldXNlIG9mCj4gPj4gdGhlIGZpZHMgYW5kIHJlZHVjaW5nIHRoZSBhbW91bnQgb2YgbWVtb3J5
IGFsbG9jYXRpb25zIGRvbmUuCj4gPj4KPiA+PiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51
IDxjcmlzdGJAZ21haWwuY29tPgo+ID4+IC0tLQo+ID4+ICAgbGliL3VrOXAvOXBkZXYuYyAgICAg
ICAgICAgICAgICAgfCAxMjEKPiA+PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKy0KPiA+PiAgIGxpYi91azlwLzlwZmlkLmMgICAgICAgICAgICAgICAgIHwgIDcxICsrKysr
KysrKysrKysrKysrKysrKysrCj4gPj4gICBsaWIvdWs5cC9NYWtlZmlsZS51ayAgICAgICAgICAg
ICB8ICAgMSArCj4gPj4gICBsaWIvdWs5cC9leHBvcnRzeW1zLnVrICAgICAgICAgICB8ICAgOSAr
Ky0KPiA+PiAgIGxpYi91azlwL2luY2x1ZGUvdWsvOXBkZXYuaCAgICAgIHwgIDIzICsrKysrKysr
Cj4gPj4gICBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X2NvcmUuaCB8ICAyMiArKysrKystCj4g
Pj4gICBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwZmlkLmggICAgICB8IDExNQo+ID4+ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+PiAgIDcgZmlsZXMgY2hhbmdlZCwgMzU5
IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliL3VrOXAvOXBmaWQuYwo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1
ZGUvdWsvOXBmaWQuaAo+ID4+Cj4gPj4gZGlmZiAtLWdpdCBhL2xpYi91azlwLzlwZGV2LmMgYi9s
aWIvdWs5cC85cGRldi5jCj4gPj4gaW5kZXggMDVhNTgxZWFmYmRiLi4xMWNhNGQ5NjU4OTMgMTAw
NjQ0Cj4gPj4gLS0tIGEvbGliL3VrOXAvOXBkZXYuYwo+ID4+ICsrKyBiL2xpYi91azlwLzlwZGV2
LmMKPiA+PiBAQCAtNDUsMTEgKzQ1LDkxIEBACj4gPj4gICAjaW5jbHVkZSA8dWsvOXBkZXYuaD4K
PiA+PiAgICNpbmNsdWRlIDx1ay85cGRldl90cmFucy5oPgo+ID4+ICAgI2luY2x1ZGUgPHVrLzlw
cmVxLmg+Cj4gPj4gKyNpbmNsdWRlIDx1ay85cGZpZC5oPgo+ID4+ICAgI2lmIENPTkZJR19MSUJV
S1NDSEVECj4gPj4gICAjaW5jbHVkZSA8dWsvc2NoZWQuaD4KPiA+PiAgICNpbmNsdWRlIDx1ay93
YWl0Lmg+Cj4gPj4gICAjZW5kaWYKPiA+PiArc3RhdGljIGludCBfZmlkX21nbXRfaW5pdChzdHJ1
Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9tZ210KQo+ID4+ICt7Cj4gPj4gKyAgICB1a2FyY2hf
c3Bpbl9sb2NrX2luaXQoJmZpZF9tZ210LT5zcGlubG9jayk7Cj4gPj4gKyAgICBmaWRfbWdtdC0+
bmV4dF9maWQgPSAwOwo+ID4+ICsgICAgVUtfSU5JVF9MSVNUX0hFQUQoJmZpZF9tZ210LT5maWRf
ZnJlZV9saXN0KTsKPiA+PiArICAgIFVLX0lOSVRfTElTVF9IRUFEKCZmaWRfbWdtdC0+ZmlkX2Fj
dGl2ZV9saXN0KTsKPiA+PiArCj4gPj4gKyAgICByZXR1cm4gMDsKPiA+PiArfQo+ID4KPiA+IENh
biBiZSBhIHZvaWQgZnVuY3Rpb24sIHJpZ2h0Pwo+ID4KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQg
X2ZpZF9tZ210X25leHRfZmlkX2xvY2tlZChzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9t
Z210LAo+ID4+ICsgICAgICAgICAgICAgICAgc3RydWN0IHVrXzlwZGV2ICpkZXYsCj4gPj4gKyAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdWtfOXBmaWQgKipmaWQpCj4gPj4gK3sKPiA+PiArICAgIHN0
cnVjdCB1a185cGZpZCAqcmVzdWx0ID0gTlVMTDsKPiA+PiArCj4gPj4gKyAgICBpZiAoIXVrX2xp
c3RfZW1wdHkoJmZpZF9tZ210LT5maWRfZnJlZV9saXN0KSkgewo+ID4+ICsgICAgICAgIHJlc3Vs
dCA9IHVrX2xpc3RfZmlyc3RfZW50cnkoJmZpZF9tZ210LT5maWRfZnJlZV9saXN0LAo+ID4+ICsg
ICAgICAgICAgICAgICAgc3RydWN0IHVrXzlwZmlkLCBfbGlzdCk7Cj4gPj4gKyAgICAgICAgdWtf
bGlzdF9kZWwoJnJlc3VsdC0+X2xpc3QpOwo+ID4+ICsgICAgfSBlbHNlIHsKPiA+PiArICAgICAg
ICByZXN1bHQgPSB1a185cGZpZF9hbGxvYyhkZXYpOwo+ID4+ICsgICAgICAgIGlmICghcmVzdWx0
KQo+ID4+ICsgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKPiA+PiArICAgICAgICByZXN1bHQt
PmZpZCA9IGZpZF9tZ210LT5uZXh0X2ZpZCsrOwo+ID4+ICsgICAgfQo+ID4+ICsKPiA+PiArICAg
IHVrX3JlZmNvdW50X2luaXQoJnJlc3VsdC0+cmVmY291bnQsIDEpOwo+ID4+ICsgICAgcmVzdWx0
LT53YXNfcmVtb3ZlZCA9IDA7Cj4gPj4gKyAgICAqZmlkID0gcmVzdWx0Owo+ID4+ICsKPiA+PiAr
ICAgIHJldHVybiAwOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgaW50IF9maWRfbWdtdF9h
ZGRfZmlkX2xvY2tlZChzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9tZ210LAo+ID4+ICsg
ICAgICAgICAgICAgICAgc3RydWN0IHVrXzlwZmlkICpmaWQpCj4gPj4gK3sKPiA+PiArICAgIHVr
X2xpc3RfYWRkKCZmaWQtPl9saXN0LCAmZmlkX21nbXQtPmZpZF9hY3RpdmVfbGlzdCk7Cj4gPj4g
Kwo+ID4+ICsgICAgcmV0dXJuIDA7Cj4gPj4gK30KPiA+Cj4gPgo+Cj4gdm9pZCBoZXJlLCB0b28/
Cj4KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkIF9maWRfbWdtdF9kZWxfZmlkX2xvY2tlZChzdHJ1
Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9tZ210LAo+ID4+ICsgICAgICAgICAgICAgICAgc3Ry
dWN0IHVrXzlwZmlkICpmaWQsCj4gPj4gKyAgICAgICAgICAgICAgICBpbnQgbW92ZV90b19mcmVl
bGlzdCkKPiA+PiArewo+ID4+ICsgICAgdWtfbGlzdF9kZWwoJmZpZC0+X2xpc3QpOwo+ID4+ICsK
PiA+PiArICAgIGlmIChtb3ZlX3RvX2ZyZWVsaXN0KQo+ID4+ICsgICAgICAgIHVrX2xpc3RfYWRk
KCZmaWQtPl9saXN0LCAmZmlkX21nbXQtPmZpZF9mcmVlX2xpc3QpOwo+ID4+ICsgICAgZWxzZSB7
Cj4gPj4gKyAgICAgICAgLyoKPiA+PiArICAgICAgICAgKiBGcmVlIHRoZSBtZW1vcnkgYXNzb2Np
YXRlZC4gVGhpcyBmaWQgd2lsbCBuZXZlciBiZSB1c2VkCj4gPj4gKyAgICAgICAgICogYWdhaW4u
Cj4gPj4gKyAgICAgICAgICovCj4gPj4gKyAgICAgICAgdWtfcHJfd2FybigiQ291bGQgbm90IG1v
dmUgZmlkIHRvIGZyZWVsaXN0LCBmcmVlaW5nIG1lbW9yeS5cbiIpOwo+ID4+ICsgICAgICAgIHVr
X2ZyZWUoZmlkLT5fZGV2LT5hLCBmaWQpOwo+ID4+ICsgICAgfQo+ID4+ICt9Cj4gPj4gKwo+ID4+
ICtzdGF0aWMgdm9pZCBfZmlkX21nbXRfY2xlYW51cChzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQg
KmZpZF9tZ210KQo+ID4+ICt7Cj4gPj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4+ICsg
ICAgc3RydWN0IHVrXzlwZmlkICpmaWQsICpmaWRuOwo+ID4+ICsKPiA+PiArICAgIHVrcGxhdF9z
cGluX2xvY2tfaXJxc2F2ZSgmZmlkX21nbXQtPnNwaW5sb2NrLCBmbGFncyk7Cj4gPj4gKyAgICAv
Kgo+ID4+ICsgICAgICogRXZlcnkgZmlkIHNob3VsZCBoYXZlIGJlZW4gY2x1bmtlZCAqYmVmb3Jl
KiBkZXN0cm95aW5nIHRoZQo+ID4+ICsgICAgICogY29ubmVjdGlvbi4KPiA+PiArICAgICAqLwo+
ID4+ICsgICAgVUtfQVNTRVJUKHVrX2xpc3RfZW1wdHkoJmZpZF9tZ210LT5maWRfYWN0aXZlX2xp
c3QpKTsKPiA+PiArICAgIHVrX2xpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmaWQsIGZpZG4sICZm
aWRfbWdtdC0+ZmlkX2ZyZWVfbGlzdCwKPiA+PiArICAgICAgICAgICAgX2xpc3QpIHsKPiA+PiAr
ICAgICAgICB1a19saXN0X2RlbCgmZmlkLT5fbGlzdCk7Cj4gPj4gKyAgICAgICAgdWtfZnJlZShm
aWQtPl9kZXYtPmEsIGZpZCk7Cj4gPj4gKyAgICB9Cj4gPj4gKyAgICB1a3BsYXRfc3Bpbl91bmxv
Y2tfaXJxcmVzdG9yZSgmZmlkX21nbXQtPnNwaW5sb2NrLCBmbGFncyk7Cj4gPj4gK30KPiA+PiAr
Cj4gPj4gICBzdGF0aWMgaW50IF9yZXFfbWdtdF9pbml0KHN0cnVjdCB1a185cGRldl9yZXFfbWdt
dCAqcmVxX21nbXQpCj4gPj4gICB7Cj4gPj4gICAgICAgdWthcmNoX3NwaW5fbG9ja19pbml0KCZy
ZXFfbWdtdC0+c3BpbmxvY2spOwo+ID4+IEBAIC0xMzAsMTUgKzIxMCwyMSBAQCBzdHJ1Y3QgdWtf
OXBkZXYgKnVrXzlwZGV2X2Nvbm5lY3QoY29uc3Qgc3RydWN0Cj4gPj4gdWtfOXBkZXZfdHJhbnMg
KnRyYW5zLAo+ID4+ICAgICAgIGlmIChyYyA8IDApCj4gPj4gICAgICAgICAgIGdvdG8gZnJlZV9k
ZXY7Cj4gPj4gLSAgICByYyA9IGRldi0+b3BzLT5jb25uZWN0KGRldiwgZGV2aWNlX2lkZW50aWZp
ZXIsIG1vdW50X2FyZ3MpOwo+ID4+ICsgICAgcmMgPSBfZmlkX21nbXRfaW5pdCgmZGV2LT5fZmlk
X21nbXQpOwo+ID4+ICAgICAgIGlmIChyYyA8IDApCj4gPj4gICAgICAgICAgIGdvdG8gZnJlZV9y
ZXE7Cj4gPj4gKyAgICByYyA9IGRldi0+b3BzLT5jb25uZWN0KGRldiwgZGV2aWNlX2lkZW50aWZp
ZXIsIG1vdW50X2FyZ3MpOwo+ID4+ICsgICAgaWYgKHJjIDwgMCkKPiA+PiArICAgICAgICBnb3Rv
IGZyZWVfZmlkOwo+ID4+ICsKPiA+PiAgICAgICBVS19BU1NFUlQoZGV2LT5tc2l6ZSAhPSAwKTsK
PiA+PiAgICAgICBkZXYtPnN0YXRlID0gVUtfOVBERVZfQ09OTkVDVEVEOwo+ID4+ICAgICAgIGdv
dG8gb3V0Owo+ID4+ICtmcmVlX2ZpZDoKPiA+PiArICAgIF9maWRfbWdtdF9jbGVhbnVwKCZkZXYt
Pl9maWRfbWdtdCk7Cj4gPj4gICBmcmVlX3JlcToKPiA+PiAgICAgICBfcmVxX21nbXRfY2xlYW51
cCgmZGV2LT5fcmVxX21nbXQpOwo+ID4+ICAgZnJlZV9kZXY6Cj4gPj4gQEAgLTE1OSw2ICsyNDUs
NyBAQCBpbnQgdWtfOXBkZXZfZGlzY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKmRldikKPiA+PiAg
ICAgICBkZXYtPnN0YXRlID0gVUtfOVBERVZfRElTQ09OTkVDVElORzsKPiA+PiAgICAgICAvKiBD
bGVhbiB1cCB0aGUgcmVxdWVzdHMgYmVmb3JlIGNsb3NpbmcgdGhlIGNoYW5uZWwuICovCj4gPj4g
KyAgICBfZmlkX21nbXRfY2xlYW51cCgmZGV2LT5fZmlkX21nbXQpOwo+ID4+ICAgICAgIF9yZXFf
bWdtdF9jbGVhbnVwKCZkZXYtPl9yZXFfbWdtdCk7Cj4gPj4gICAgICAgcmMgPSBkZXYtPm9wcy0+
ZGlzY29ubmVjdChkZXYpOwo+ID4+IEBAIC0zMjAsNiArNDA3LDM4IEBAIGludCB1a185cGRldl9y
ZXFfcmVtb3ZlKHN0cnVjdCB1a185cGRldiAqZGV2LAo+ID4+IHN0cnVjdCB1a185cHJlcSAqcmVx
KQo+ID4+ICAgICAgIHJldHVybiB1a185cHJlcV9wdXQocmVxKTsKPiA+PiAgIH0KPiA+PiArc3Ry
dWN0IHVrXzlwZmlkICp1a185cGRldl9maWRfY3JlYXRlKHN0cnVjdCB1a185cGRldiAqZGV2KQo+
ID4+ICt7Cj4gPj4gKyAgICBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCA9IE5VTEw7Cj4gPj4gKyAgICBp
bnQgcmMgPSAwOwo+ID4+ICsgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+PiArCj4gPj4gKyAg
ICB1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+X2ZpZF9tZ210LnNwaW5sb2NrLCBmbGFn
cyk7Cj4gPj4gKyAgICByYyA9IF9maWRfbWdtdF9uZXh0X2ZpZF9sb2NrZWQoJmRldi0+X2ZpZF9t
Z210LCBkZXYsICZmaWQpOwo+ID4+ICsgICAgaWYgKHJjIDwgMCkKPiA+PiArICAgICAgICBnb3Rv
IG91dDsKPiA+PiArCj4gPj4gKyAgICByYyA9IF9maWRfbWdtdF9hZGRfZmlkX2xvY2tlZCgmZGV2
LT5fZmlkX21nbXQsIGZpZCk7Cj4gPj4gKyAgICBpZiAocmMgPCAwKQo+ID4+ICsgICAgICAgIGdv
dG8gb3V0Owo+ID4+ICsKPiA+PiArb3V0Ogo+ID4+ICsgICAgdWtwbGF0X3NwaW5fdW5sb2NrX2ly
cXJlc3RvcmUoJmRldi0+X2ZpZF9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gPj4gKyAgICBpZiAo
cmMgPT0gMCkKPiA+PiArICAgICAgICByZXR1cm4gZmlkOwo+ID4+ICsgICAgcmV0dXJuIEVSUjJQ
VFIocmMpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICt2b2lkIHVrXzlwZGV2X2ZpZF9yZWxlYXNlKHN0
cnVjdCB1a185cGZpZCAqZmlkKQo+ID4+ICt7Cj4gPj4gKyAgICBzdHJ1Y3QgdWtfOXBkZXYgKmRl
diA9IGZpZC0+X2RldjsKPiA+PiArICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gPj4gKwo+ID4+
ICsgICAgdWtwbGF0X3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPl9maWRfbWdtdC5zcGlubG9jaywg
ZmxhZ3MpOwo+ID4+ICsgICAgX2ZpZF9tZ210X2RlbF9maWRfbG9ja2VkKCZkZXYtPl9maWRfbWdt
dCwgZmlkLCAxKTsKPiA+PiArICAgIHVrcGxhdF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYt
Pl9maWRfbWdtdC5zcGlubG9jaywgZmxhZ3MpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICAgdm9pZCB1
a185cGRldl9hZGp1c3RfbXNpemUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQzMl90IG1zaXpl
KQo+ID4+ICAgewo+ID4+ICAgICAgIGRldi0+bXNpemUgPSBNSU4oZGV2LT5tc2l6ZSwgbXNpemUp
Owo+ID4+IGRpZmYgLS1naXQgYS9saWIvdWs5cC85cGZpZC5jIGIvbGliL3VrOXAvOXBmaWQuYwo+
ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4gaW5kZXggMDAwMDAwMDAwMDAwLi44NWQxNGM2
NjA3OGEKPiA+PiAtLS0gL2Rldi9udWxsCj4gPj4gKysrIGIvbGliL3VrOXAvOXBmaWQuYwo+ID4+
IEBAIC0wLDAgKzEsNzEgQEAKPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0z
LUNsYXVzZSAqLwo+ID4+ICsvKgo+ID4+ICsgKiBBdXRob3JzOiBDcmlzdGlhbiBCYW51IDxjcmlz
dGJAZ21haWwuY29tPgo+ID4+ICsgKgo+ID4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZl
cnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwKPiA+PiByaWdodHMgcmVzZXJ2ZWQu
Cj4gPj4gKyAqCj4gPj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ID4+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiA+PiArICog
YXJlIG1ldDoKPiA+PiArICoKPiA+PiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiA+PiArICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ID4+
ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAo+ID4+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KPiA+PiB0aGUKPiA+PiArICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCj4g
Pj4gZGlzdHJpYnV0aW9uLgo+ID4+ICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5
cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCj4gPj4gKyAqICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAo+ID4+
IGZyb20KPiA+PiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KPiA+PiArICoKPiA+PiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECj4gPj4gQ09OVFJJQlVUT1JTICJBUyBJ
UyIKPiA+PiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQKPiA+PiBUTywgVEhFCj4gPj4gKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgo+ID4+
IFBVUlBPU0UKPiA+PiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SCj4gPj4gQ09OVFJJQlVUT1JTIEJFCj4gPj4gKyAqIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKPiA+PiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiA+PiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCj4gPj4gQlVTSU5FU1MKPiA+
PiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksCj4gPj4gV0hFVEhFUiBJTgo+ID4+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKPiA+PiBPVEhFUldJU0UpCj4g
Pj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGCj4gPj4gQURWSVNFRCBPRiBUSEUKPiA+PiArICogUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCj4gPj4gKyAqCj4gPj4gKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFD
VEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCj4gPj4gKyAqLwo+ID4+ICsKPiA+PiArI2luY2x1
ZGUgPHVrL2NvbmZpZy5oPgo+ID4+ICsjaW5jbHVkZSA8dWsvcmVmY291bnQuaD4KPiA+PiArI2lu
Y2x1ZGUgPHVrL2FsbG9jLmg+Cj4gPj4gKyNpbmNsdWRlIDx1ay85cGRldi5oPgo+ID4+ICsjaW5j
bHVkZSA8dWsvOXBmaWQuaD4KPiA+PiArCj4gPj4gK3N0cnVjdCB1a185cGZpZCAqdWtfOXBmaWRf
YWxsb2Moc3RydWN0IHVrXzlwZGV2ICpkZXYpCj4gPj4gK3sKPiA+PiArICAgIHN0cnVjdCB1a185
cGZpZCAqZmlkOwo+ID4+ICsKPiA+PiArICAgIGZpZCA9IHVrX2NhbGxvYyhkZXYtPmEsIDEsIHNp
emVvZigqZmlkKSk7Cj4gPj4gKyAgICBpZiAoZmlkID09IE5VTEwpCj4gPj4gKyAgICAgICAgZ290
byBvdXQ7Cj4gPj4gKwo+ID4+ICsgICAgZmlkLT5fZGV2ID0gZGV2Owo+ID4+ICsKPiA+PiArICAg
IHJldHVybiBmaWQ7Cj4gPj4gKwo+ID4+ICtvdXQ6Cj4gPj4gKyAgICByZXR1cm4gTlVMTDsKPiA+
PiArfQo+ID4+ICsKPiA+PiArdm9pZCB1a185cGZpZF9nZXQoc3RydWN0IHVrXzlwZmlkICpmaWQp
Cj4gPj4gK3sKPiA+PiArICAgIHVrX3JlZmNvdW50X2FjcXVpcmUoJmZpZC0+cmVmY291bnQpOwo+
ID4+ICt9Cj4gPj4gKwo+ID4+ICtpbnQgdWtfOXBmaWRfcHV0KHN0cnVjdCB1a185cGZpZCAqZmlk
KQo+ID4+ICt7Cj4gPj4gKyAgICBpbnQgbGFzdDsKPiA+PiArCj4gPj4gKyAgICBsYXN0ID0gdWtf
cmVmY291bnRfcmVsZWFzZSgmZmlkLT5yZWZjb3VudCk7Cj4gPj4gKyAgICBpZiAobGFzdCkKPiA+
PiArICAgICAgICB1a185cGRldl9maWRfcmVsZWFzZShmaWQpOwo+ID4+ICsKPiA+PiArICAgIHJl
dHVybiBsYXN0Owo+ID4+ICt9Cj4gPj4gZGlmZiAtLWdpdCBhL2xpYi91azlwL01ha2VmaWxlLnVr
IGIvbGliL3VrOXAvTWFrZWZpbGUudWsKPiA+PiBpbmRleCAzNGNjOTg3YTJmOWMuLmNkNGJmNGI4
YTAzMyAxMDA2NDQKPiA+PiAtLS0gYS9saWIvdWs5cC9NYWtlZmlsZS51awo+ID4+ICsrKyBiL2xp
Yi91azlwL01ha2VmaWxlLnVrCj4gPj4gQEAgLTYsMyArNiw0IEBAIENYWElOQ0xVREVTLSQoQ09O
RklHX0xJQlVLOVApICAgICAgICArPQo+ID4+IC1JJChMSUJVSzlQX0JBU0UpL2luY2x1ZGUKPiA+
PiAgIExJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5UF9CQVNFKS85cGRldl90cmFucy5jCj4gPj4g
ICBMSUJVSzlQX1NSQ1MteSArPSAkKExJQlVLOVBfQkFTRSkvOXByZXEuYwo+ID4+ICAgTElCVUs5
UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwZGV2LmMKPiA+PiArTElCVUs5UF9TUkNTLXkg
Kz0gJChMSUJVSzlQX0JBU0UpLzlwZmlkLmMKPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhw
b3J0c3ltcy51ayBiL2xpYi91azlwL2V4cG9ydHN5bXMudWsKPiA+PiBpbmRleCBjMzczMzA4ZmIw
YTIuLjVjZDc4MTdiZjVjOCAxMDA2NDQKPiA+PiAtLS0gYS9saWIvdWs5cC9leHBvcnRzeW1zLnVr
Cj4gPj4gKysrIGIvbGliL3VrOXAvZXhwb3J0c3ltcy51awo+ID4+IEBAIC0xLDYgKzEsNyBAQAo+
ID4+ICAgdWtfOXBkZXZfdHJhbnNfcmVnaXN0ZXIKPiA+PiAgIHVrXzlwZGV2X3RyYW5zX2J5X25h
bWUKPiA+PiAgIHVrXzlwZGV2X3RyYW5zX2RlZmF1bHQKPiA+PiArCj4gPgo+ID4gSSBndWVzcyBz
cGxpdHRpbmcgdGhvc2UgZW50cmllcyBpbiBncm91cHMgc2hvdWxkIHByb2JhYmx5IHBhcnQgb2YK
PiA+IGVhcmxpZXIgcGF0Y2hlcy4gQnV0IHRoaXMgaXMgcmVhbGx5IG1pbm9yLi4uCj4gPgo+ID4K
PiA+PiAgIHVrXzlwcmVxX2dldAo+ID4+ICAgdWtfOXByZXFfcHV0Cj4gPj4gICB1a185cHJlcV92
c2VyaWFsaXplCj4gPj4gQEAgLTEyLDEyICsxMywxOCBAQCB1a185cHJlcV9jb3B5X2Zyb20KPiA+
PiAgIHVrXzlwcmVxX3JlY2VpdmVfY2IKPiA+PiAgIHVrXzlwcmVxX3dhaXRyZXBseQo+ID4+ICAg
dWtfOXByZXFfZXJyb3IKPiA+PiArCj4gPj4gICB1a185cGRldl9jb25uZWN0Cj4gPj4gICB1a185
cGRldl9kaXNjb25uZWN0Cj4gPj4gICB1a185cGRldl9yZXF1ZXN0Cj4gPj4gICB1a185cGRldl94
bWl0X3JlYWR5Cj4gPj4gICB1a185cGRldl9jYWxsCj4gPj4gK3VrXzlwZGV2X2FkanVzdF9tc2l6
ZQo+ID4+ICsKPiA+PiAgIHVrXzlwZGV2X3JlcV9jcmVhdGUKPiA+PiAgIHVrXzlwZGV2X3JlcV9s
b29rdXAKPiA+PiAgIHVrXzlwZGV2X3JlcV9yZW1vdmUKPiA+PiAtdWtfOXBkZXZfYWRqdXN0X21z
aXplCj4gPj4gKwo+ID4+ICt1a185cGRldl9maWRfY3JlYXRlCj4gPj4gK3VrXzlwZmlkX2dldAo+
ID4+ICt1a185cGZpZF9wdXQKPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85
cGRldi5oIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oCj4gPj4gaW5kZXggZjIyMTBiYmZm
YzkyLi5iOGY0MDBjZWE3MTAgMTAwNjQ0Cj4gPj4gLS0tIGEvbGliL3VrOXAvaW5jbHVkZS91ay85
cGRldi5oCj4gPj4gKysrIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oCj4gPj4gQEAgLTE3
Miw2ICsxNzIsMjkgQEAgc3RydWN0IHVrXzlwcmVxICp1a185cGRldl9yZXFfbG9va3VwKHN0cnVj
dAo+ID4+IHVrXzlwZGV2ICpkZXYsIHVpbnQxNl90IHRhZyk7Cj4gPj4gICBpbnQgdWtfOXBkZXZf
cmVxX3JlbW92ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwcmVxICpyZXEpOwo+
ID4+ICAgLyoqCj4gPj4gKyAqIENyZWF0ZXMgYSBGSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZl
biA5UCBkZXZpY2UuCj4gPj4gKyAqCj4gPj4gKyAqIEBwYXJhbSBkZXYKPiA+PiArICogICBUaGUg
VW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4+ICsgKiBAcmV0dXJuCj4gPj4gKyAqICAgSWYgbm90IGFu
IGVycm9yIHBvaW50ZXIsIHRoZSBjcmVhdGVkIGZpZC4KPiA+PiArICogICBPdGhlcndpc2UsIHRo
ZSBlcnJvciBpbiBjcmVhdGluZyB0aGUgZmlkOgo+ID4+ICsgKiAgIC0gRU5PTUVNOiBObyBtZW1v
cnkgZm9yIHRoZSByZXF1ZXN0IG9yIG5vIGF2YWlsYWJsZSB0YWdzLgo+ID4+ICsgKi8KPiA+PiAr
c3RydWN0IHVrXzlwZmlkICp1a185cGRldl9maWRfY3JlYXRlKHN0cnVjdCB1a185cGRldiAqZGV2
KTsKPiA+PiArCj4gPj4gKy8qKgo+ID4+ICsgKiBAaW50ZXJuYWwKPiA+PiArICogUmVsZWFzZXMg
YSBGSUQgd2hlbiBpdHMgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8gMC4KPiA+PiArICoKPiA+PiAr
ICogU2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCByYXRoZXIgdmlhIHVrXzlwZmlk
X3B1dCgpLgo+ID4+ICsgKgo+ID4+ICsgKiBAcGFyYW0gZmlkCj4gPj4gKyAqICAgVGhlIEZJRCB0
byBiZSByZWxlYXNlZC4KPiA+PiArICovCj4gPj4gK3ZvaWQgdWtfOXBkZXZfZmlkX3JlbGVhc2Uo
c3RydWN0IHVrXzlwZmlkICpmaWQpOwo+ID4+ICsKPiA+PiArLyoqCj4gPj4gICAgKiBBZGp1c3Rz
IHRoZSBtZXNzYWdlIHNpemUgdG8gdGhlIGdpdmVuIG1heGltdW0gc2l6ZS4KPiA+PiAgICAqCj4g
Pj4gICAgKiBAcGFyYW0gZGV2Cj4gPj4gZGlmZiAtLWdpdCBhL2xpYi91azlwL2luY2x1ZGUvdWsv
OXBkZXZfY29yZS5oCj4gPj4gYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X2NvcmUuaAo+ID4+
IGluZGV4IGQ3ZWYzNDFlMTJkNi4uMWM0OTQ3MzIzMzdhIDEwMDY0NAo+ID4+IC0tLSBhL2xpYi91
azlwL2luY2x1ZGUvdWsvOXBkZXZfY29yZS5oCj4gPj4gKysrIGIvbGliL3VrOXAvaW5jbHVkZS91
ay85cGRldl9jb3JlLmgKPiA+PiBAQCAtMTI0LDYgKzEyNCwyNCBAQCBzdHJ1Y3QgdWtfOXBkZXZf
cmVxX21nbXQgewo+ID4+ICAgLyoqCj4gPj4gICAgKiBAaW50ZXJuYWwKPiA+PiArICogQSBzdHJ1
Y3R1cmUgdXNlZCB0byBkZXNjcmliZSB0aGUgYXZhaWxhYmlsaXR5IG9mIDlQIGZpZHMuCj4gPj4g
KyAqLwo+ID4+ICtzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQgewo+ID4+ICsgICAgLyogU3Bpbmxv
Y2sgcHJvdGVjdGluZyBmaWRzLiAqLwo+ID4+ICsgICAgc3BpbmxvY2tfdCAgICAgICAgICAgIHNw
aW5sb2NrOwo+ID4+ICsgICAgLyogTmV4dCBhdmFpbGFibGUgZmlkLiAqLwo+ID4+ICsgICAgdWlu
dDMyX3QgICAgICAgICAgICBuZXh0X2ZpZDsKPiA+PiArICAgIC8qIEZyZWUtbGlzdCBvZiBmaWRz
IHRoYXQgY2FuIGJlIHJldXNlZC4gKi8KPiA+PiArICAgIHN0cnVjdCB1a19saXN0X2hlYWQgICAg
ICAgIGZpZF9mcmVlX2xpc3Q7Cj4gPj4gKyAgICAvKgo+ID4+ICsgICAgICogTGlzdCBvZiBmaWRz
IHRoYXQgYXJlIGN1cnJlbnRseSBhY3RpdmUsIHRvIGJlIGNsdW5rZWQgYXQgdGhlCj4gPj4gZW5k
IG9mCj4gPj4gKyAgICAgKiBhIDlwZnMgc2Vzc2lvbi4KPiA+PiArICAgICAqLwo+ID4+ICsgICAg
c3RydWN0IHVrX2xpc3RfaGVhZCAgICAgICAgZmlkX2FjdGl2ZV9saXN0Owo+ID4+ICt9Owo+ID4+
ICsKPiA+PiArLyoqCj4gPj4gKyAqIEBpbnRlcm5hbAo+ID4+ICAgICogOVBERVYgdHJhbnNwb3J0
IHN0YXRlCj4gPj4gICAgKgo+ID4+ICAgICogLSBDT05ORUNURUQ6IERlZmF1bHQgc3RhdGUgYWZ0
ZXIgaW5pdGlhbGl6YXRpb24gYW5kIGR1cmluZyBub3JtYWwKPiA+PiBvcGVyYXRpb24uCj4gPj4g
QEAgLTE1MCw3ICsxNjgsOSBAQCBzdHJ1Y3QgdWtfOXBkZXYgewo+ID4+ICAgICAgIC8qIE1heGlt
dW0gc2l6ZSBvZiBhIG1lc3NhZ2UuICovCj4gPj4gICAgICAgdWludDMyX3QgICAgICAgICAgICAg
ICAgICAgICAgICBtc2l6ZTsKPiA+PiAgICAgICAvKiBUcmFuc3BvcnQtYWxsb2NhdGVkIGRhdGEu
ICovCj4gPj4gLSAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwcml2Owo+ID4+
ICsgICAgdm9pZCAgICAgICAgICAgICAgICAqcHJpdjsKPiA+Cj4gPiBCZSBjYXJlZnVsIHdoZW4g
eW91ciBlZGl0b3IgY2hhbmdlcyB0aGUgd2hpdGVzcGFjZXMuIEVpdGhlciBrZWVwIHNwYWNlcywK
PiA+IG9yIHVzZSB0YWJzLgpGaXhlZC4KPiA+Cj4gPj4gKyAgICAvKiBAaW50ZXJuYWwgRmlkIG1h
bmFnZW1lbnQuICovCj4gPj4gKyAgICBzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQgICAgX2ZpZF9t
Z210Owo+ID4+ICAgICAgIC8qIEBpbnRlcm5hbCBSZXF1ZXN0IG1hbmFnZW1lbnQuICovCj4gPj4g
ICAgICAgc3RydWN0IHVrXzlwZGV2X3JlcV9tZ210ICAgICAgICBfcmVxX21nbXQ7Cj4gPj4gICAj
aWYgQ09ORklHX0xJQlVLU0NIRUQKPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91
ay85cGZpZC5oIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGZpZC5oCj4gPj4gbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKPiA+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjdlYzc1YmI0YTUwOAo+ID4+IC0tLSAv
ZGV2L251bGwKPiA+PiArKysgYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZmlkLmgKPiA+PiBAQCAt
MCwwICsxLDExNSBAQAo+ID4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh
dXNlICovCj4gPj4gKy8qCj4gPj4gKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBn
bWFpbC5jb20+Cj4gPj4gKyAqCj4gPj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0
eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbAo+ID4+IHJpZ2h0cyByZXNlcnZlZC4KPiA+
PiArICoKPiA+PiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gPj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ID4+ICsgKiBhcmUg
bWV0Ogo+ID4+ICsgKgo+ID4+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4+ICsgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gPj4gKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Cj4gPj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgo+ID4+IHRoZQo+ID4+ICsgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKPiA+PiBk
aXN0cmlidXRpb24uCj4gPj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdo
dCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiA+PiArICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCj4gPj4gZnJv
bQo+ID4+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgo+ID4+ICsgKgo+ID4+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKPiA+PiBDT05UUklCVVRPUlMgIkFTIElTIgo+
ID4+ICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRAo+ID4+IFRPLCBUSEUKPiA+PiArICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCj4gPj4gUFVS
UE9TRQo+ID4+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgT1IKPiA+PiBDT05UUklCVVRPUlMgQkUKPiA+PiArICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+
ID4+ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgo+ID4+ICsgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKPiA+PiBCVVNJTkVTUwo+ID4+ICsg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwKPiA+PiBXSEVUSEVSIElOCj4gPj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgo+ID4+IE9USEVSV0lTRSkKPiA+PiAr
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYKPiA+PiBBRFZJU0VEIE9GIFRIRQo+ID4+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KPiA+PiArICoKPiA+PiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQg
T1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiA+PiArICovCj4gPj4gKwo+ID4+ICsjaWZuZGVmIF9f
VUtfOVBGSURfXwo+ID4+ICsjZGVmaW5lIF9fVUtfOVBGSURfXwo+ID4+ICsKPiA+PiArI2luY2x1
ZGUgPHN0ZGJvb2wuaD4KPiA+PiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gPj4gKyNpbmNsdWRl
IDx1ay9jb25maWcuaD4KPiA+PiArI2luY2x1ZGUgPHVrLzlwX2NvcmUuaD4KPiA+PiArI2luY2x1
ZGUgPHVrL2FsbG9jLmg+Cj4gPj4gKyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4gPj4gKyNp
bmNsdWRlIDx1ay9saXN0Lmg+Cj4gPj4gKyNpbmNsdWRlIDx1ay9yZWZjb3VudC5oPgo+ID4+ICsK
PiA+PiArI2lmZGVmIF9fY3BsdXNwbHVzCj4gPj4gK2V4dGVybiAiQyIgewo+ID4+ICsjZW5kaWYK
PiA+PiArCj4gPj4gKy8qKgo+ID4+ICsgKiBTdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIG1hbmFnZWQg
ZmlkIHZpYSByZWZlcmVuY2UgY291bnRpbmcuCj4gPj4gKyAqLwo+ID4+ICtzdHJ1Y3QgdWtfOXBm
aWQgewo+ID4+ICsgICAgLyogRmlkIG51bWJlci4gKi8KPiA+PiArICAgIHVpbnQzMl90ICAgICAg
ICAgICAgICAgIGZpZDsKPiA+PiArICAgIC8qIEFzc29jaWF0ZWQgc2VydmVyIHFpZC4gKi8KPiA+
PiArICAgIHN0cnVjdCB1a185cF9xaWQgICAgICAgIHFpZDsKPiA+PiArICAgIC8qIEkvTyB1bml0
LiAqLwo+ID4+ICsgICAgdWludDMyX3QgICAgICAgICAgICAgICAgaW91bml0Owo+ID4+ICsgICAg
LyoKPiA+PiArICAgICAqIElmIHJlbW92ZWQsIG5vIGNsdW5rIGlzIG5lY2Vzc2FyeSwgYXMgdGhl
IHJlbW92ZSBvcGVyYXRpb24KPiA+PiArICAgICAqIGltcGxpY2l0bHkgY2x1bmtzIHRoZSBmaWQu
Cj4gPj4gKyAgICAgKi8KPiA+PiArICAgIGJvb2wgd2FzX3JlbW92ZWQ7Cj4gPj4gKyAgICAvKiBU
cmFja3MgdGhlIG51bWJlciBvZiBsaXZlIHJlZmVyZW5jZXMuICovCj4gPj4gKyAgICBfX2F0b21p
YyAgICAgICAgICAgICAgICByZWZjb3VudDsKPiA+PiArICAgIC8qIEBpbnRlcm5hbCBBc3NvY2lh
dGVkIDlQIGRldmljZS4gKi8KPiA+PiArICAgIHN0cnVjdCB1a185cGRldiAgICAgICAgICpfZGV2
Owo+ID4+ICsgICAgLyoKPiA+PiArICAgICAqIEBpbnRlcm5hbAo+ID4+ICsgICAgICogTGlzdCBv
biB3aGljaCB0aGlzIGZpZCBjdXJyZW50bHkgaXMuIFNlZSB1a185cGRldl9maWRfbWdtdCBmb3IK
PiA+PiArICAgICAqIGRldGFpbHMuCj4gPj4gKyAgICAgKi8KPiA+PiArICAgIHN0cnVjdCB1a19s
aXN0X2hlYWQgICAgIF9saXN0Owo+ID4+ICt9Owo+ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIEBp
bnRlcm5hbAo+ID4+ICsgKiBBbGxvY2F0ZXMgYSA5cCBmaWQuCj4gPj4gKyAqIFNob3VsZCBub3Qg
YmUgdXNlZCBkaXJlY3RseSwgdXNlIHVrXzlwZGV2X2ZpZF9jcmVhdGUoKSBpbnN0ZWFkLgo+ID4+
ICsgKgo+ID4+ICsgKiBAcGFyYW0gYQo+ID4+ICsgKiAgIEFsbG9jYXRvciB0byB1c2UuCj4gPj4g
KyAqIEByZXR1cm4KPiA+PiArICogICAtIE5VTEw6IE91dCBvZiBtZW1vcnkuCj4gPj4gKyAqICAg
LSAoIT1OVUxMKTogU3VjY2Vzc2Z1bC4KPiA+PiArICovCj4gPj4gK3N0cnVjdCB1a185cGZpZCAq
dWtfOXBmaWRfYWxsb2Moc3RydWN0IHVrXzlwZGV2ICpkZXYpOwo+ID4KPiA+IERvIHlvdSBuZWVk
IHRoaXMgZnVuY3Rpb24gdGhlbiBiZSBleHBvcnRlZD8KaXQgaXMgbm90IGluIGV4cG9ydHN5bXMu
dWssIGFzIGl0IGlzIG9ubHkgdXNlZCBmcm9tIHdpdGhpbiB0aGUgdWs5cCBsaWJyYXJ5OgpzcGVj
aWZpY2FsbHksIGZyb20gdWtfOXBkZXZfZmlkX2NyZWF0ZSB2aWEgX2ZpZF9tZ210X25leHRfZmlk
X2xvY2tlZC4KPiA+Cj4gPj4gKwo+ID4+ICsvKioKPiA+PiArICogR2V0cyB0aGUgOXAgZmlkLCBp
bmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudC4KPiA+PiArICoKPiA+PiArICogQHBhcmFt
IGZpZAo+ID4+ICsgKiAgIFJlZmVyZW5jZSB0byB0aGUgOXAgZmlkLgo+ID4+ICsgKi8KPiA+PiAr
dm9pZCB1a185cGZpZF9nZXQoc3RydWN0IHVrXzlwZmlkICpmaWQpOwo+ID4+ICsKPiA+PiArLyoq
Cj4gPj4gKyAqIFB1dHMgdGhlIDlwIGZpZCwgZGVjcmVtZW50aW5nIHRoZSByZWZlcmVuY2UgY291
bnQuCj4gPj4gKyAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGxpdmUgcmVmZXJlbmNlLCB0aGUgbWVt
b3J5IHdpbGwgYmUgZnJlZWQuCj4gPj4gKyAqCj4gPj4gKyAqIEBwYXJhbSBmaWQKPiA+PiArICog
ICBSZWZlcmVuY2UgdG8gdGhlIDlwIGZpZC4KPiA+PiArICogQHJldHVybgo+ID4+ICsgKiAgIC0g
MDogVGhpcyB3YXMgbm90IHRoZSBsYXN0IGxpdmUgcmVmZXJlbmNlLgo+ID4+ICsgKiAgIC0gMTog
VGhpcyB3YXMgdGhlIGxhc3QgbGl2ZSByZWZlcmVuY2UuCj4gPj4gKyAqLwo+ID4+ICtpbnQgdWtf
OXBmaWRfcHV0KHN0cnVjdCB1a185cGZpZCAqZmlkKTsKPiA+PiArCj4gPj4gKyNpZmRlZiBfX2Nw
bHVzcGx1cwo+ID4+ICt9Cj4gPj4gKyNlbmRpZgo+ID4+ICsKPiA+PiArI2VuZGlmIC8qIF9fVUtf
OVBGSURfXyAqLwo+ID4+Cj4gPgo+ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KPiA+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKPiA+IE1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+ID4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:06:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:06:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rT0-0003S7-Qd; Thu, 05 Sep 2019 13:06:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5rSz-0003S2-Fb
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:06:25 +0000
X-Inumbo-ID: f5976df8-cfdd-11e9-a337-bc764e2007e4
Received: from mail-lf1-x141.google.com (unknown [2a00:1450:4864:20::141])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f5976df8-cfdd-11e9-a337-bc764e2007e4;
 Thu, 05 Sep 2019 13:06:23 +0000 (UTC)
Received: by mail-lf1-x141.google.com with SMTP id w67so1969291lff.4
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 06:06:23 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=EPMNhFLCNMX4IyFi0vDzCmSst3jdp8hIXKTOBo4O69Q=;
 b=bB/Q8I5LEH5AsFn97BtfISWsmdXMRGA2RJMO49+3fHc5NNFe8KGS1xqKt6AGV00jkC
 j36O1kFpuzjHRjSB+MGXfaBsRXBRVf1u0SvgvOzH/v5IxSe9r3EdwwIushQqRO8KmD+4
 KuL1pzDd3LNtogOCrigBRMBWl4MazMH/FRNOT5dNAKlDJp6sZH/ip6Rh/8e6fLGrJPvy
 klKAL3boY67SSeAahvrVzu2yrGBpnnsVR6jj/fJJFmbjZGwydbEd0nRTn6mBohr+9Ern
 W8a0BJUYFkK2odknVqCwD9e7qdMf4SdcKoFrI2hpGz2vPHAUshudTRacIGQKfTCK9PZ/
 LHYw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=EPMNhFLCNMX4IyFi0vDzCmSst3jdp8hIXKTOBo4O69Q=;
 b=I7EdkFYdd8DdpATxf4xIvrlCqbGq60yx4PPTPlHP0iH26FeFtSXlNRlFvQa7vyPmzl
 7yptB1k/NgC6OpGalvvc3i+Ks1QYcenXoVxFmpkDQzWz6bCxZYWDFwBupkNFeUuHW3lx
 3Q5gFcVJ6Xh4rej7FkvL/3EkXzf73CLfwDiGkj3caB/PvQYsewbv7g8IXusbvASQeRkU
 cRxb4Avv4+yUYiHTGc7qxkGEXyXaFoQ37fkxaqdebNmfXCNz5y4x4U+eXuA1zSx4qWbk
 m0nP17rRZhIe2fwkuClkQa+silCm0Ze8VcC/U2IJWYxSl0Rxw2DwOabjZz4k3gkJldOq
 /+fg==
X-Gm-Message-State: APjAAAVz4Caz6VndN3S/m0T9TK7Q+/vFYyq5FwVRVdFVrVCrh2cnpq4M
 VlXOBpCL231AC5ttcogUru7nvX/JfzcIqbR8LEM=
X-Google-Smtp-Source: APXvYqzrph4izC9IHgmYZy6fQsX9lOOysGLMmpsUY1mcJkyaZk7tMRopcVoI5J6pdOPmzrnLkHt3aL1VPoVIRBtH+eM=
X-Received: by 2002:a19:5215:: with SMTP id m21mr2351345lfb.89.1567688782054; 
 Thu, 05 Sep 2019 06:06:22 -0700 (PDT)
MIME-Version: 1.0
References: <20190629085608.15680-1-cristb@gmail.com>
 <20190629085608.15680-8-cristb@gmail.com>
 <14b0612f-ff58-54f3-cb61-015dc417275e@neclab.eu>
In-Reply-To: <14b0612f-ff58-54f3-cb61-015dc417275e@neclab.eu>
From: Cristian Banu <cristb@gmail.com>
Date: Thu, 5 Sep 2019 16:06:10 +0300
Message-ID: <CAFJttSVfJDvv7RCbauiNiQHkr8BoBs5=9fznMsSN1ihJ5J=ocA@mail.gmail.com>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 7/8] lib/uk9p: Add 9P helper
 API
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpQbGVhc2Ugc2VlIG15IGNvbW1lbnRzIGlubGluZS4KClRoYW5rcyEKQ3Jpc3Rp
CgpPbiBGcmksIEp1bCA1LCAyMDE5IGF0IDE6MTUgQU0gU2ltb24gS3VlbnplciA8c2ltb24ua3Vl
bnplckBuZWNsYWIuZXU+IHdyb3RlOgo+Cj4gSGV5LAo+Cj4gdGhlIHBhdGNoIGxvb2tzIHNvIGZh
ciBva2F5LiBIb3dldmVyLCBJIGFtIG5vdCBhIGZhbiBvZiB0aGUgIl9kb18iCj4gbmFtaW5nIG9u
IHRoZSBBUEkgZnVuY3Rpb25zLiBJcyB0aGVyZSBhIHJlYXNvbiB3aHkgeW91IGNob3NlIHRoaXMg
KGUuZy4sCj4gY29weSBvZiBuYW1pbmcgZnJvbSBkb2N1bWVudGF0aW9uKT8gSG93IGFib3V0IHJl
bW92aW5nIHRoZSAnX2RvXycgcGFydAo+IGZyb20gdGhlIGZ1bmN0aW9ucyBjb21wbGV0ZWx5IG9y
IHJlbmFtaW5nIHRoZW0gdG8gJ19mcyc/CkkgY2hhbmdlZCB0aGUgbmFtaW5nIG9mIGFsbCBmdW5j
dGlvbnMsIHJlbW92aW5nIHRoZSAnX2RvXycgcGFydC4gSSdtCm5vdCBhIGZhbiBvZgonX2ZzJywg
YXMgdGhhdCB3b3VsZCBzdWdnZXN0IHRoZSBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBmaWxlc3lz
dGVtCmltcGxlbWVudGF0aW9uLCBhbmQgdGhlc2UgZnVuY3Rpb25zIGFyZSBqdXN0IGhlbHBlcnMg
dG8gY29tbXVuaWNhdGUgb3ZlciA5UAp3aXRoIHN0YW5kYXJkIG1lc3NhZ2UgdHlwZXMuCj4KPiBU
aGFua3MsCj4KPiBTaW1vbgo+Cj4gT24gMjkuMDYuMTkgMTA6NTYsIENyaXN0aWFuIEJhbnUgd3Jv
dGU6Cj4gPiBUaGlzIHBhdGNoIGltcGxlbWVudHMgYW4gQVBJIGZvciB0aGUgb3BlcmF0aW9ucyBz
dXBwb3J0ZWQgYnkgdGhlIDlQCj4gPiBwcm90b2NvbC4gRWFjaCBzdXBwb3J0ZWQgbWVzc2FnZSB0
eXBlIGhhcyBhbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIHdpdGgKPiA+IHdoaWNoIHRvIG1ha2UgcmVx
dWVzdHMuCj4gPgo+ID4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWls
LmNvbT4KPiA+IC0tLQo+ID4gICBsaWIvdWs5cC85cC5jICAgICAgICAgICAgfCA0MzEgKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ICAgbGliL3VrOXAv
TWFrZWZpbGUudWsgICAgIHwgICAxICsKPiA+ICAgbGliL3VrOXAvZXhwb3J0c3ltcy51ayAgIHwg
IDEzICsrCj4gPiAgIGxpYi91azlwL2luY2x1ZGUvdWsvOXAuaCB8IDI2MCArKysrKysrKysrKysr
KysrKysrKysrKysrKysrCj4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgNzA1IGluc2VydGlvbnMoKykK
PiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwLzlwLmMKPiA+ICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsvOXAuaAo+ID4KPiA+IGRpZmYgLS1naXQgYS9saWIv
dWs5cC85cC5jIGIvbGliL3VrOXAvOXAuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+IGlu
ZGV4IDAwMDAwMDAwMDAwMC4uZWZiYjFiNTNmMWFmCj4gPiAtLS0gL2Rldi9udWxsCj4gPiArKysg
Yi9saWIvdWs5cC85cC5jCj4gPiBAQCAtMCwwICsxLDQzMSBAQAo+ID4gKy8qIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiA+ICsvKgo+ID4gKyAqIEF1dGhvcnM6IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gPiArICoKPiA+ICsgKiBDb3B5cmlnaHQg
KGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgo+ID4gKyAqCj4gPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gPiArICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4g
PiArICogYXJlIG1ldDoKPiA+ICsgKgo+ID4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gPiArICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+
ID4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Cj4gPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQo+ID4gKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCj4gPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRl
ciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ID4gKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCj4gPiArICogICAg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
PiA+ICsgKgo+ID4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ID4gKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKPiA+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ID4gKyAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiA+
ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCj4gPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiA+ICsgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKPiA+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ID4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gPiArICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKPiA+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiA+
ICsgKgo+ID4gKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVE
IElOIEFOWSBXQVkuCj4gPiArICovCj4gPiArCj4gPiArI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgo+
ID4gKyNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KPiA+ICsjaW5jbHVkZSA8dWsvZXJycHRyLmg+Cj4g
PiArI2luY2x1ZGUgPHVrLzlwLmg+Cj4gPiArI2luY2x1ZGUgPHVrLzlwZGV2Lmg+Cj4gPiArI2lu
Y2x1ZGUgPHVrLzlwcmVxLmg+Cj4gPiArI2luY2x1ZGUgPHVrLzlwZmlkLmg+Cj4gPiArCj4gPiAr
c3RydWN0IHVrXzlwcmVxICp1a185cF9kb192ZXJzaW9uKHN0cnVjdCB1a185cGRldiAqZGV2LAo+
ID4gKyAgICAgICAgICAgICBjb25zdCBjaGFyICpyZXF1ZXN0ZWQsIHN0cnVjdCB1a185cF9zdHIg
KnJlY2VpdmVkKQo+Cj4gdWtfOXBfZ2V0X3ZlcnNpb24oKT8KVmVyc2lvbiBpcyBhIDlQIG1lc3Nh
Z2UgdHlwZSAodGhlICdUVkVSU0lPTicvJ1JWRVJTSU9OJyBwYWlyKSwgdGhlCnNhbWUgYXMgYXR0
YWNoLCB3YWxrLCBjcmVhdGUsIG9wZW4sIGV0Yy4gTmFtaW5nIGl0IHdpdGggJ19nZXRfJyB3b3Vs
ZApicmVhayBhbnkgY2hvc2VuIG5hbWluZyBjb252ZW50aW9uLgo+Cj4gPiArewo+ID4gKyAgICAg
c3RydWN0IHVrXzlwX3N0ciByZXF1ZXN0ZWRfc3RyOwo+ID4gKyAgICAgc3RydWN0IHVrXzlwcmVx
ICpyZXE7Cj4gPiArICAgICBpbnQgcmM7Cj4gPiArICAgICB1aW50MzJfdCBuZXdfbXNpemU7Cj4g
PiArCj4gPiArICAgICB1a185cF9zdHJfaW5pdCgmcmVxdWVzdGVkX3N0ciwgcmVxdWVzdGVkKTsK
PiA+ICsKPiA+ICsgICAgIHVrX3ByX2RlYnVnKCJ1azlwOiBUVkVSU0lPTiBtc2l6ZSAldSB2ZXJz
aW9uICVzXG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldi0+bXNpemUsIHJlcXVlc3Rl
ZCk7Cj4KPgo+IEp1c3QgYSBtaW5vciB0aGluZzogWW91IGRvIG5vdCBuZWVkIHRvIHByb3ZpZGUg
dGhlICJ1azlwOiAiIHByZWZpeCBpbgo+IHRoZSBkZWJ1ZyBtZXNzYWdlcyBiZWNhdXNlIHVrX3By
X2RlYnVnIGlzIGFueXdheSBhbHJlYWR5IHRha2luZyBjYXJlIG9mCj4gdGhpcyB3aXRoIGxpYnJh
cnkgbmFtZSwgc291cmNlIGZpbGUsIGFuZCBsaW5lIG51bWJlci4KRml4ZWQuCj4KPiA+ICsKPiA+
ICsgICAgIHJlcSA9IHVrXzlwZGV2X2NhbGwoZGV2LCBVS185UF9UVkVSU0lPTiwgX19QQUdFX1NJ
WkUsICJkcyIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGV2LT5tc2l6ZSwgJnJlcXVlc3Rl
ZF9zdHIpOwo+ID4gKyAgICAgaWYgKFBUUklTRVJSKHJlcSkpCj4gPiArICAgICAgICAgICAgIHJl
dHVybiByZXE7Cj4gPiArCj4gPiArICAgICByYyA9IHVrXzlwcmVxX2Rlc2VyaWFsaXplKHJlcSwg
ImRzIiwgJm5ld19tc2l6ZSwgcmVjZWl2ZWQpOwo+ID4gKwo+ID4gKyAgICAgaWYgKHJjKQo+ID4g
KyAgICAgICAgICAgICByZXR1cm4gRVJSMlBUUihyYyk7Cj4gPiArCj4gPiArICAgICB1a19wcl9k
ZWJ1ZygidWs5cDogUlZFUlNJT04gbXNpemUgJXUgdmVyc2lvbiAlLipzXG4iLCBuZXdfbXNpemUs
Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZWQtPnNpemUsIHJlY2VpdmVkLT5kYXRh
KTsKPiA+ICsKPiA+ICsgICAgIHVrXzlwZGV2X2FkanVzdF9tc2l6ZShkZXYsIG5ld19tc2l6ZSk7
Cj4gPiArICAgICByZXR1cm4gcmVxOwo+ID4gK30KPiA+ICsKPiA+ICtzdHJ1Y3QgdWtfOXBmaWQg
KnVrXzlwX2RvX2F0dGFjaChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDMyX3QgYWZpZCwKPiA+
ICsgICAgICAgICAgICAgY29uc3QgY2hhciAqdW5hbWUsIGNvbnN0IGNoYXIgKmFuYW1lLCB1aW50
MzJfdCBuX3VuYW1lKQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCB1a185cHJlcSAqcmVxOwo+ID4g
KyAgICAgc3RydWN0IHVrXzlwZmlkICpmaWQ7Cj4gPiArICAgICBzdHJ1Y3QgdWtfOXBfc3RyIHVu
YW1lX3N0cjsKPiA+ICsgICAgIHN0cnVjdCB1a185cF9zdHIgYW5hbWVfc3RyOwo+ID4gKyAgICAg
aW50IHJjOwo+ID4gKwo+ID4gKyAgICAgdWtfOXBfc3RyX2luaXQoJnVuYW1lX3N0ciwgdW5hbWUp
Owo+ID4gKyAgICAgdWtfOXBfc3RyX2luaXQoJmFuYW1lX3N0ciwgYW5hbWUpOwo+ID4gKwo+ID4g
KyAgICAgZmlkID0gdWtfOXBkZXZfZmlkX2NyZWF0ZShkZXYpOwo+ID4gKyAgICAgaWYgKFBUUklT
RVJSKGZpZCkpCj4gPiArICAgICAgICAgICAgIHJldHVybiBmaWQ7Cj4gPiArCj4gPiArICAgICB1
a19wcl9kZWJ1ZygidWs5cDogVEFUVEFDSCBmaWQgJXUgYWZpZCAldSB1bmFtZSAlcyBhbmFtZSAl
cyBuX3VuYW1lICV1XG4iLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGZpZC0+ZmlkLCBhZmlk
LCB1bmFtZSwgYW5hbWUsIG5fdW5hbWUpOwo+ID4gKwo+ID4gKyAgICAgcmVxID0gdWtfOXBkZXZf
Y2FsbChkZXYsIFVLXzlQX1RBVFRBQ0gsIF9fUEFHRV9TSVpFLCAiZGRzc2QiLAo+ID4gKyAgICAg
ICAgICAgICAgICAgICAgIGZpZC0+ZmlkLCBhZmlkLCAmdW5hbWVfc3RyLCAmYW5hbWVfc3RyLCBu
X3VuYW1lKTsKPiA+ICsgICAgIGlmIChQVFJJU0VSUihyZXEpKSB7Cj4gPiArICAgICAgICAgICAg
IHVrXzlwZGV2X2ZpZF9yZWxlYXNlKGZpZCk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiAodm9p
ZCAqKXJlcTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJjID0gdWtfOXByZXFfZGVzZXJp
YWxpemUocmVxLCAiUSIsICZmaWQtPnFpZCk7Cj4gPiArICAgICB1a185cGRldl9yZXFfcmVtb3Zl
KGRldiwgcmVxKTsKPiA+ICsKPiA+ICsgICAgIHVrX3ByX2RlYnVnKCJ1azlwOiBSQVRUQUNIIHFp
ZCB0eXBlICV1IHZlcnNpb24gJXUgcGF0aCAlbHVcbiIsCj4gPiArICAgICAgICAgICAgICAgICAg
ICAgZmlkLT5xaWQudHlwZSwgZmlkLT5xaWQudmVyc2lvbiwgZmlkLT5xaWQucGF0aCk7Cj4gPiAr
Cj4gPiArICAgICBpZiAocmMgPCAwKSB7Cj4gPiArICAgICAgICAgICAgIHVrXzlwZGV2X2ZpZF9y
ZWxlYXNlKGZpZCk7Cj4gPiArICAgICAgICAgICAgIHJldHVybiBFUlIyUFRSKHJjKTsKPiA+ICsg
ICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiBmaWQ7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCB1
a185cF9kb19mbHVzaChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDE2X3Qgb2xkdGFnKQo+ID4g
K3sKPiA+ICsgICAgIHN0cnVjdCB1a185cHJlcSAqcmVxOwo+ID4gKwo+ID4gKyAgICAgdWtfcHJf
ZGVidWcoInVrOXA6IFRGTFVTSCBvbGR0YWcgJXVcbiIsIG9sZHRhZyk7Cj4gPiArICAgICByZXEg
PSB1a185cGRldl9jYWxsKGRldiwgVUtfOVBfVEZMVVNILCBfX1BBR0VfU0laRSwgInciLCBvbGR0
YWcpOwo+ID4gKyAgICAgaWYgKFBUUklTRVJSKHJlcSkpCj4gPiArICAgICAgICAgICAgIHJldHVy
biBQVFIyRVJSKHJlcSk7Cj4gPiArCj4gPiArICAgICB1a19wcl9kZWJ1ZygidWs5cDogUkZMVVNI
XG4iKTsKPiA+ICsgICAgIHVrXzlwZGV2X3JlcV9yZW1vdmUoZGV2LCByZXEpOwo+ID4gKwo+ID4g
KyAgICAgcmV0dXJuIDA7Cj4gPiArfQo+ID4gKwo+ID4gKyNpZiAwCj4gPiArc3RydWN0IHVrXzlw
ZmlkICp1a185cF9kb193YWxrX21hbnkoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185
cGZpZCAqZmlkLAo+ID4gKyAgICAgICAgICAgICBjb25zdCBjaGFyICoqd25hbWUsIGludCBud25h
bWUpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4gPiArICAgICBzdHJ1
Y3QgdWtfOXBmaWQgKmZpZDsKPiA+ICt9Cj4gPiArI2VuZGlmCj4KPiBJcyB0aGVyZSBhIHJlYXNv
biB0byBrZWVwIHRoaXMgc3R1Yj8gSWYgeWVzLCBjb3VsZCB5b3UgYWRkIGEgLyogVE9ETyAqLwo+
IGNvbW1lbnQ/Ck9vcHMsIHRoZXJlIGlzIG5vIHJlYXNvbi4gUmVtb3ZlZC4KPgo+ID4gKwo+ID4g
K3N0cnVjdCB1a185cGZpZCAqdWtfOXBfZG9fd2FsayhzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3Ry
dWN0IHVrXzlwZmlkICpmaWQsCj4gPiArICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCj4g
PiArewo+ID4gKyAgICAgc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4gPiArICAgICBzdHJ1Y3QgdWtf
OXBmaWQgKm5ld2ZpZDsKPiA+ICsgICAgIHN0cnVjdCB1a185cF9zdHIgbmFtZV9zdHI7Cj4gPiAr
ICAgICB1aW50MTZfdCBud3FpZDsKPiA+ICsgICAgIHVpbnQxNl90IG53bmFtZTsKPiA+ICsgICAg
IGludCByYzsKPiA+ICsKPiA+ICsgICAgIHVrXzlwX3N0cl9pbml0KCZuYW1lX3N0ciwgbmFtZSk7
Cj4gPiArCj4gPiArICAgICBuZXdmaWQgPSB1a185cGRldl9maWRfY3JlYXRlKGRldik7Cj4gPiAr
ICAgICBpZiAoUFRSSVNFUlIobmV3ZmlkKSkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG5ld2Zp
ZDsKPiA+ICsKPiA+ICsgICAgIG53bmFtZSA9IG5hbWUgPyAxIDogMDsKPiA+ICsKPiA+ICsgICAg
IGlmIChuYW1lKSB7Cj4gPiArICAgICAgICAgICAgIHVrX3ByX2RlYnVnKCJ1azlwOiBUV0FMSyBm
aWQgJXUgbmV3ZmlkICV1IG53bmFtZSAlZCBuYW1lICVzXG4iLAo+ID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlkLT5maWQsIG5ld2ZpZC0+ZmlkLCBud25hbWUsIG5hbWUpOwo+ID4g
KyAgICAgICAgICAgICByZXEgPSB1a185cGRldl9jYWxsKGRldiwgVUtfOVBfVFdBTEssIF9fUEFH
RV9TSVpFLCAiZGR3cyIsCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWQtPmZp
ZCwgbmV3ZmlkLT5maWQsIG53bmFtZSwgJm5hbWVfc3RyKTsKPiA+ICsgICAgIH0gZWxzZSB7Cj4g
PiArICAgICAgICAgICAgIHVrX3ByX2RlYnVnKCJ1azlwOiBUV0FMSyBmaWQgJXUgbmV3ZmlkICV1
IG53bmFtZSAlZFxuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZC0+Zmlk
LCBuZXdmaWQtPmZpZCwgbnduYW1lKTsKPiA+ICsgICAgICAgICAgICAgcmVxID0gdWtfOXBkZXZf
Y2FsbChkZXYsIFVLXzlQX1RXQUxLLCBfX1BBR0VfU0laRSwgImRkdyIsCj4gPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWQtPmZpZCwgbmV3ZmlkLT5maWQsIG53bmFtZSk7Cj4gPiAr
ICAgICB9Cj4gPiArCj4gPiArICAgICBpZiAoUFRSSVNFUlIocmVxKSkgewo+ID4gKyAgICAgICAg
ICAgICAvKgo+ID4gKyAgICAgICAgICAgICAgKiBEb24ndCBjbHVuayBpZiByZXF1ZXN0IGhhcyBm
aW5pc2hlZCB3aXRoIGVycm9yLCBhcyB0aGUgZmlkCj4gPiArICAgICAgICAgICAgICAqIGlzIGlu
dmFsaWQuCj4gPiArICAgICAgICAgICAgICAqLwo+ID4gKyAgICAgICAgICAgICBuZXdmaWQtPndh
c19yZW1vdmVkID0gMTsKPiA+ICsgICAgICAgICAgICAgcmMgPSBQVFIyRVJSKHJlcSk7Cj4gPiAr
ICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgcmMgPSB1
a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJ3IiwgJm53cWlkKTsKPiA+ICsgICAgIGlmIChyYyA8
IDApCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0X3JlcTsKPiA+ICsKPiA+ICsgICAgIHVrX3By
X2RlYnVnKCJ1azlwOiBSV0FMSyBud3FpZCAldVxuIiwgbndxaWQpOwo+ID4gKwo+ID4gKyAgICAg
aWYgKG53cWlkICE9IG53bmFtZSkgewo+ID4gKyAgICAgICAgICAgICByYyA9IC1FTk9FTlQ7Cj4g
PiArICAgICAgICAgICAgIGdvdG8gb3V0X3JlcTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsKPiA+
ICsgICAgIGlmIChud25hbWUpIHsKPiA+ICsgICAgICAgICAgICAgcmMgPSB1a185cHJlcV9kZXNl
cmlhbGl6ZShyZXEsICJRIiwgJm5ld2ZpZC0+cWlkKTsKPiA+ICsgICAgICAgICAgICAgaWYgKHJj
IDwgMCkKPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dF9yZXE7Cj4gPiArICAgICB9
IGVsc2UKPiA+ICsgICAgICAgICAgICAgbmV3ZmlkLT5xaWQgPSBmaWQtPnFpZDsKPiA+ICsKPiA+
ICsgICAgIHJjID0gMDsKPiA+ICtvdXRfcmVxOgo+ID4gKyAgICAgdWtfOXBkZXZfcmVxX3JlbW92
ZShkZXYsIHJlcSk7Cj4gPiArb3V0Ogo+ID4gKyAgICAgaWYgKHJjKSB7Cj4gPiArICAgICAgICAg
ICAgIHVrXzlwZGV2X2ZpZF9yZWxlYXNlKG5ld2ZpZCk7Cj4gPiArICAgICAgICAgICAgIHJldHVy
biBFUlIyUFRSKHJjKTsKPiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIHJldHVybiBuZXdmaWQ7
Cj4gPiArfQo+ID4gKwo+ID4gK2ludCB1a185cF9kb19vcGVuKHN0cnVjdCB1a185cGRldiAqZGV2
LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwgdWludDhfdCBtb2RlKQo+ID4gK3sKPiA+ICsgICAgIHN0
cnVjdCB1a185cHJlcSAqcmVxOwo+ID4gKyAgICAgaW50IHJjOwo+ID4gKwo+ID4gKyAgICAgdWtf
cHJfZGVidWcoInVrOXA6IFRPUEVOIGZpZCAldSBtb2RlICV1XG4iLCBmaWQtPmZpZCwgbW9kZSk7
Cj4gPiArCj4gPiArICAgICByZXEgPSB1a185cGRldl9jYWxsKGRldiwgVUtfOVBfVE9QRU4sIF9f
UEFHRV9TSVpFLCAiZGIiLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGZpZC0+ZmlkLCBtb2Rl
KTsKPiA+ICsgICAgIGlmIChQVFJJU0VSUihyZXEpKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g
UFRSMkVSUihyZXEpOwo+ID4gKwo+ID4gKyAgICAgcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShy
ZXEsICJRZCIsICZmaWQtPnFpZCwgJmZpZC0+aW91bml0KTsKPiA+ICsgICAgIHVrXzlwZGV2X3Jl
cV9yZW1vdmUoZGV2LCByZXEpOwo+ID4gKwo+ID4gKyAgICAgdWtfcHJfZGVidWcoInVrOXA6IFJP
UEVOIHFpZCB0eXBlICV1IHZlcnNpb24gJXUgcGF0aCAlbHUgaW91bml0ICV1XG4iLAo+ID4gKyAg
ICAgICAgICAgICAgICAgICAgIGZpZC0+cWlkLnR5cGUsIGZpZC0+cWlkLnZlcnNpb24sIGZpZC0+
cWlkLnBhdGgsCj4gPiArICAgICAgICAgICAgICAgICAgICAgZmlkLT5pb3VuaXQpOwo+ID4gKwo+
ID4gKyAgICAgcmV0dXJuIHJjOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXBfZG9fY3JlYXRl
KHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKPiA+ICsgICAgICAg
ICAgICAgY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgcGVybSwgdWludDhfdCBtb2RlLAo+ID4g
KyAgICAgICAgICAgICBjb25zdCBjaGFyICpleHRlbnNpb24pCj4gPiArewo+ID4gKyAgICAgc3Ry
dWN0IHVrXzlwcmVxICpyZXE7Cj4gPiArICAgICBzdHJ1Y3QgdWtfOXBfc3RyIG5hbWVfc3RyOwo+
ID4gKyAgICAgc3RydWN0IHVrXzlwX3N0ciBleHRlbnNpb25fc3RyOwo+ID4gKyAgICAgaW50IHJj
Owo+ID4gKwo+ID4gKyAgICAgdWtfOXBfc3RyX2luaXQoJm5hbWVfc3RyLCBuYW1lKTsKPiA+ICsg
ICAgIHVrXzlwX3N0cl9pbml0KCZleHRlbnNpb25fc3RyLCBleHRlbnNpb24pOwo+ID4gKwo+ID4g
KyAgICAgdWtfcHJfZGVidWcoInVrOXA6IFRDUkVBVEUgZmlkICV1IG5hbWUgJXMgcGVybSAldSBt
b2RlICV1IGV4dCAlc1xuIiwKPiA+ICsgICAgICAgICAgICAgICAgICAgICBmaWQtPmZpZCwgbmFt
ZSwgcGVybSwgbW9kZSwgZXh0ZW5zaW9uKTsKPiA+ICsKPiA+ICsgICAgIHJlcSA9IHVrXzlwZGV2
X2NhbGwoZGV2LCBVS185UF9UQ1JFQVRFLCBfX1BBR0VfU0laRSwgImRzZGJzIiwKPiA+ICsgICAg
ICAgICAgICAgICAgICAgICBmaWQtPmZpZCwgJm5hbWVfc3RyLCBwZXJtLCBtb2RlLCAmZXh0ZW5z
aW9uX3N0cik7Cj4gPiArICAgICBpZiAoUFRSSVNFUlIocmVxKSkKPiA+ICsgICAgICAgICAgICAg
cmV0dXJuIFBUUjJFUlIocmVxKTsKPiA+ICsKPiA+ICsgICAgIHJjID0gdWtfOXByZXFfZGVzZXJp
YWxpemUocmVxLCAiUWQiLCAmZmlkLT5xaWQsICZmaWQtPmlvdW5pdCk7Cj4gPiArICAgICB1a185
cGRldl9yZXFfcmVtb3ZlKGRldiwgcmVxKTsKPiA+ICsKPiA+ICsgICAgIHVrX3ByX2RlYnVnKCJ1
azlwOiBSQ1JFQVRFIHFpZCB0eXBlICV1IHZlcnNpb24gJXUgcGF0aCAlbHUgaW91bml0ICV1XG4i
LAo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGZpZC0+cWlkLnR5cGUsIGZpZC0+cWlkLnZlcnNp
b24sIGZpZC0+cWlkLnBhdGgsCj4gPiArICAgICAgICAgICAgICAgICAgICAgZmlkLT5pb3VuaXQp
Owo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHJjOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXBf
ZG9fcmVtb3ZlKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKPiA+
ICt7Cj4gPiArICAgICBzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKPiA+ICsKPiA+ICsgICAgIC8qIFRo
ZSBmaWQgaXMgY29uc2lkZXJlZCBpbnZhbGlkIGV2ZW4gaWYgdGhlIHJlbW92ZSBmYWlscy4gKi8K
PiA+ICsgICAgIGZpZC0+d2FzX3JlbW92ZWQgPSAxOwo+ID4gKwo+ID4gKyAgICAgdWtfcHJfZGVi
dWcoInVrOXA6IFRSRU1PVkUgZmlkICV1XG4iLCBmaWQtPmZpZCk7Cj4gPiArICAgICByZXEgPSB1
a185cGRldl9jYWxsKGRldiwgVUtfOVBfVFJFTU9WRSwgX19QQUdFX1NJWkUsICJkIiwgZmlkLT5m
aWQpOwo+ID4gKyAgICAgaWYgKFBUUklTRVJSKHJlcSkpCj4gPiArICAgICAgICAgICAgIHJldHVy
biBQVFIyRVJSKHJlcSk7Cj4gPiArCj4gPiArICAgICB1a185cGRldl9yZXFfcmVtb3ZlKGRldiwg
cmVxKTsKPiA+ICsgICAgIHVrX3ByX2RlYnVnKCJ1azlwOiBSUkVNT1ZFXG4iKTsKPiA+ICsKPiA+
ICsgICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQgdWtfOXBfZG9fY2x1bmsoc3Ry
dWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkKQo+ID4gK3sKPiA+ICsgICAg
IHN0cnVjdCB1a185cHJlcSAqcmVxOwo+ID4gKwo+ID4gKyAgICAgaWYgKGZpZC0+d2FzX3JlbW92
ZWQpCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOwo+ID4gKwo+ID4gKyAgICAgdWtfcHJfZGVi
dWcoInVrOXA6IFRDTFVOSyBmaWQgJXVcbiIsIGZpZC0+ZmlkKTsKPiA+ICsgICAgIHJlcSA9IHVr
XzlwZGV2X2NhbGwoZGV2LCBVS185UF9UQ0xVTkssIF9fUEFHRV9TSVpFLCAiZCIsIGZpZC0+Zmlk
KTsKPiA+ICsgICAgIGlmIChQVFJJU0VSUihyZXEpKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g
UFRSMkVSUihyZXEpOwo+ID4gKwo+ID4gKyAgICAgdWtfOXBkZXZfcmVxX3JlbW92ZShkZXYsIHJl
cSk7Cj4gPiArICAgICB1a19wcl9kZWJ1ZygidWs5cDogUkNMVU5LXG4iKTsKPiA+ICsKPiA+ICsg
ICAgIHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtpbnQ2NF90IHVrXzlwX2RvX3JlYWQoc3Ry
dWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAo+ID4gKyAgICAgICAgICAg
ICB1aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90IGNvdW50LCBjaGFyICpidWYpCj4gPiArewo+ID4g
KyAgICAgc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4gPiArICAgICBpbnQ2NF90IHJjOwo+ID4gKwo+
ID4gKyAgICAgaWYgKGZpZC0+aW91bml0ICE9IDApCj4gPiArICAgICAgICAgICAgIGNvdW50ID0g
TUlOKGNvdW50LCBmaWQtPmlvdW5pdCk7Cj4gPiArICAgICBjb3VudCA9IE1JTihjb3VudCwgZGV2
LT5tc2l6ZSAtIDExKTsKPiA+ICsKPiA+ICsgICAgIHVrX3ByX2RlYnVnKCJ1azlwOiBUUkVBRCBm
aWQgJXUgb2Zmc2V0ICVsdSBjb3VudCAldVxuIiwgZmlkLT5maWQsCj4gPiArICAgICAgICAgICAg
ICAgICAgICAgb2Zmc2V0LCBjb3VudCk7Cj4gPiArCj4gPiArICAgICByZXEgPSB1a185cGRldl9y
ZXFfY3JlYXRlKGRldiwgVUtfOVBfVFJFQUQsIF9fUEFHRV9TSVpFKTsKPiA+ICsgICAgIGlmIChQ
VFJJU0VSUihyZXEpKQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gUFRSMkVSUihyZXEpOwo+ID4g
Kwo+ID4gKyAgICAgcmMgPSB1a185cHJlcV9zZXJpYWxpemUocmVxLCAiZHFkIiwgZmlkLT5maWQs
IG9mZnNldCwgY291bnQpOwo+ID4gKyAgICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAg
Z290byBvdXQ7Cj4gPiArCj4gPiArICAgICByYyA9IHVrXzlwcmVxX3JlYWR5KHJlcSwgVUtfOVBS
RVFfWkNESVJfUkVBRCwgYnVmLCBjb3VudCwgMTEpOwo+ID4gKyAgICAgaWYgKHJjIDwgMCkKPiA+
ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArCj4gPiArICAgICByYyA9IHVrXzlwZGV2X3Jl
cXVlc3QoZGV2LCByZXEpOwo+ID4gKyAgICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAg
Z290byBvdXQ7Cj4gPiArCj4gPiArICAgICByYyA9IHVrXzlwcmVxX3dhaXRyZXBseShyZXEpOwo+
ID4gKyAgICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArCj4g
PiArICAgICByYyA9IHVrXzlwcmVxX2Rlc2VyaWFsaXplKHJlcSwgImQiLCAmY291bnQpOwo+ID4g
KyAgICAgaWYgKHJjIDwgMCkKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArCj4gPiAr
ICAgICB1a19wcl9kZWJ1ZygidWs5cDogUlJFQUQgY291bnQgJXVcbiIsIGNvdW50KTsKPiA+ICsK
PiA+ICsgICAgIHJjID0gY291bnQ7Cj4gPiArCj4gPiArb3V0Ogo+ID4gKyAgICAgdWtfOXBkZXZf
cmVxX3JlbW92ZShkZXYsIHJlcSk7Cj4gPiArICAgICByZXR1cm4gcmM7Cj4gPiArfQo+ID4gKwo+
ID4gK2ludDY0X3QgdWtfOXBfZG9fd3JpdGUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1
a185cGZpZCAqZmlkLAo+ID4gKyAgICAgICAgICAgICB1aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90
IGNvdW50LCBjb25zdCBjaGFyICpidWYpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHVrXzlwcmVx
ICpyZXE7Cj4gPiArICAgICBpbnQ2NF90IHJjOwo+ID4gKwo+ID4gKyAgICAgY291bnQgPSBNSU4o
Y291bnQsIGZpZC0+aW91bml0KTsKPiA+ICsgICAgIGNvdW50ID0gTUlOKGNvdW50LCBkZXYtPm1z
aXplIC0gMjMpOwo+ID4gKwo+ID4gKyAgICAgdWtfcHJfZGVidWcoInVrOXA6IFRXUklURSBmaWQg
JXUgb2Zmc2V0ICVsdSBjb3VudCAldVxuIiwgZmlkLT5maWQsCj4gPiArICAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0LCBjb3VudCk7Cj4gPiArICAgICByZXEgPSB1a185cGRldl9yZXFfY3JlYXRl
KGRldiwgVUtfOVBfVFdSSVRFLCBfX1BBR0VfU0laRSk7Cj4gPiArICAgICBpZiAoUFRSSVNFUlIo
cmVxKSkKPiA+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUjJFUlIocmVxKTsKPiA+ICsKPiA+ICsg
ICAgIHJjID0gdWtfOXByZXFfc2VyaWFsaXplKHJlcSwgImRxZCIsIGZpZC0+ZmlkLCBvZmZzZXQs
IGNvdW50KTsKPiA+ICsgICAgIGlmIChyYyA8IDApCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0
Owo+ID4gKwo+ID4gKyAgICAgcmMgPSB1a185cHJlcV9yZWFkeShyZXEsIFVLXzlQUkVRX1pDRElS
X1dSSVRFLCAodm9pZCAqKWJ1ZiwgY291bnQsIDIzKTsKPiA+ICsgICAgIGlmIChyYyA8IDApCj4g
PiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgcmMgPSB1a185cGRldl9y
ZXF1ZXN0KGRldiwgcmVxKTsKPiA+ICsgICAgIGlmIChyYyA8IDApCj4gPiArICAgICAgICAgICAg
IGdvdG8gb3V0Owo+ID4gKwo+ID4gKyAgICAgcmMgPSB1a185cHJlcV93YWl0cmVwbHkocmVxKTsK
PiA+ICsgICAgIGlmIChyYyA8IDApCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKwo+
ID4gKyAgICAgcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJkIiwgJmNvdW50KTsKPiA+
ICsgICAgIGlmIChyYyA8IDApCj4gPiArICAgICAgICAgICAgIGdvdG8gb3V0Owo+ID4gKwo+ID4g
KyAgICAgdWtfcHJfZGVidWcoInVrOXA6IFJXUklURSBjb3VudCAldVxuIiwgY291bnQpOwo+ID4g
Kwo+ID4gKyAgICAgcmMgPSBjb3VudDsKPiA+ICsKPiA+ICtvdXQ6Cj4gPiArICAgICB1a185cGRl
dl9yZXFfcmVtb3ZlKGRldiwgcmVxKTsKPiA+ICsgICAgIHJldHVybiByYzsKPiA+ICt9Cj4gPiAr
Cj4gPiArc3RydWN0IHVrXzlwcmVxICp1a185cF9kb19zdGF0KHN0cnVjdCB1a185cGRldiAqZGV2
LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKPiA+ICsgICAgICAgICAgICAgc3RydWN0IHVrXzlwX3N0
YXQgKnN0YXQpCj4gPiArewo+ID4gKyAgICAgc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4gPiArICAg
ICBpbnQgcmM7Cj4gPiArICAgICB1aW50MTZfdCBkdW1teTsKPiA+ICsKPiA+ICsgICAgIHVrX3By
X2RlYnVnKCJ1azlwOiBUU1RBVCBmaWQgJXVcbiIsIGZpZC0+ZmlkKTsKPiA+ICsgICAgIHJlcSA9
IHVrXzlwZGV2X2NhbGwoZGV2LCBVS185UF9UU1RBVCwgX19QQUdFX1NJWkUsICJkIiwgZmlkLT5m
aWQpOwo+ID4gKyAgICAgaWYgKFBUUklTRVJSKHJlcSkpCj4gPiArICAgICAgICAgICAgIHJldHVy
biByZXE7Cj4gPiArCj4gPiArICAgICByYyA9IHVrXzlwcmVxX2Rlc2VyaWFsaXplKHJlcSwgIndT
IiwgJmR1bW15LCBzdGF0KTsKPiA+ICsgICAgIGlmIChyYykKPiA+ICsgICAgICAgICAgICAgcmV0
dXJuIEVSUjJQVFIocmMpOwo+ID4gKyAgICAgdWtfcHJfZGVidWcoInVrOXA6IFJTVEFUXG4iKTsK
PiA+ICsKPiA+ICsgICAgIHJldHVybiByZXE7Cj4gPiArfQo+ID4gKwo+ID4gK2ludCB1a185cF9k
b193c3RhdChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwZmlkICpmaWQsCj4gPiAr
ICAgICAgICAgICAgIHN0cnVjdCB1a185cF9zdGF0ICpzdGF0KQo+ID4gK3sKPiA+ICsgICAgIHN0
cnVjdCB1a185cHJlcSAqcmVxOwo+ID4gKwo+ID4gKyAgICAgLyoKPiA+ICsgICAgICAqIFRoZSBw
YWNrZWQgc2l6ZSBvZiBzdGF0IGlzIDYxIGJ5dGVzICsgdGhlIHNpemUgb2NjdXBpZWQgYnkgdGhl
Cj4gPiArICAgICAgKiBzdHJpbmdzLgo+ID4gKyAgICAgICovCj4gPiArICAgICBzdGF0LT5zaXpl
ID0gNjE7Cj4gPiArICAgICBzdGF0LT5zaXplICs9IHN0YXQtPm5hbWUuc2l6ZTsKPiA+ICsgICAg
IHN0YXQtPnNpemUgKz0gc3RhdC0+dWlkLnNpemU7Cj4gPiArICAgICBzdGF0LT5zaXplICs9IHN0
YXQtPmdpZC5zaXplOwo+ID4gKyAgICAgc3RhdC0+c2l6ZSArPSBzdGF0LT5tdWlkLnNpemU7Cj4g
PiArICAgICBzdGF0LT5zaXplICs9IHN0YXQtPmV4dGVuc2lvbi5zaXplOwo+ID4gKwo+ID4gKyAg
ICAgdWtfcHJfZGVidWcoInVrOXA6IFRXU1RBVCBmaWQgJXVcbiIsIGZpZC0+ZmlkKTsKPiA+ICsg
ICAgIHJlcSA9IHVrXzlwZGV2X2NhbGwoZGV2LCBVS185UF9UV1NUQVQsIF9fUEFHRV9TSVpFLCAi
ZHdTIiwgZmlkLT5maWQsCj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RhdC0+c2l6ZSArIDIs
IHN0YXQpOwo+ID4gKyAgICAgaWYgKFBUUklTRVJSKHJlcSkpCj4gPiArICAgICAgICAgICAgIHJl
dHVybiBQVFIyRVJSKHJlcSk7Cj4gPiArICAgICB1a185cGRldl9yZXFfcmVtb3ZlKGRldiwgcmVx
KTsKPiA+ICsgICAgIHVrX3ByX2RlYnVnKCJ1azlwOiBSV1NUQVQiKTsKPiA+ICsKPiA+ICsgICAg
IHJldHVybiAwOwo+ID4gK30KPiA+IGRpZmYgLS1naXQgYS9saWIvdWs5cC9NYWtlZmlsZS51ayBi
L2xpYi91azlwL01ha2VmaWxlLnVrCj4gPiBpbmRleCBjZDRiZjRiOGEwMzMuLmVmYzBlZTc0OGFk
NCAxMDA2NDQKPiA+IC0tLSBhL2xpYi91azlwL01ha2VmaWxlLnVrCj4gPiArKysgYi9saWIvdWs5
cC9NYWtlZmlsZS51awo+ID4gQEAgLTcsMyArNyw0IEBAIExJQlVLOVBfU1JDUy15ICs9ICQoTElC
VUs5UF9CQVNFKS85cGRldl90cmFucy5jCj4gPiAgIExJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5
UF9CQVNFKS85cHJlcS5jCj4gPiAgIExJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5UF9CQVNFKS85
cGRldi5jCj4gPiAgIExJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5UF9CQVNFKS85cGZpZC5jCj4g
PiArTElCVUs5UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwLmMKPiA+IGRpZmYgLS1naXQg
YS9saWIvdWs5cC9leHBvcnRzeW1zLnVrIGIvbGliL3VrOXAvZXhwb3J0c3ltcy51awo+ID4gaW5k
ZXggNWNkNzgxN2JmNWM4Li40Zjk1MGEwZDNmNzkgMTAwNjQ0Cj4gPiAtLS0gYS9saWIvdWs5cC9l
eHBvcnRzeW1zLnVrCj4gPiArKysgYi9saWIvdWs5cC9leHBvcnRzeW1zLnVrCj4gPiBAQCAtMjgs
MyArMjgsMTYgQEAgdWtfOXBkZXZfcmVxX3JlbW92ZQo+ID4gICB1a185cGRldl9maWRfY3JlYXRl
Cj4gPiAgIHVrXzlwZmlkX2dldAo+ID4gICB1a185cGZpZF9wdXQKPiA+ICsKPiA+ICt1a185cF9k
b192ZXJzaW9uCj4gPiArdWtfOXBfZG9fYXR0YWNoCj4gPiArdWtfOXBfZG9fZmx1c2gKPiA+ICt1
a185cF9kb193YWxrCj4gPiArdWtfOXBfZG9fb3Blbgo+ID4gK3VrXzlwX2RvX2NyZWF0ZQo+ID4g
K3VrXzlwX2RvX3JlbW92ZQo+ID4gK3VrXzlwX2RvX2NsdW5rCj4gPiArdWtfOXBfZG9fcmVhZAo+
ID4gK3VrXzlwX2RvX3dyaXRlCj4gPiArdWtfOXBfZG9fc3RhdAo+ID4gK3VrXzlwX2RvX3dzdGF0
Cj4gPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85cC5oIGIvbGliL3VrOXAvaW5j
bHVkZS91ay85cC5oCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAw
MDAwLi5kNjgzMTM4ZTgyNzkKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2xpYi91azlwL2lu
Y2x1ZGUvdWsvOXAuaAo+ID4gQEAgLTAsMCArMSwyNjAgQEAKPiA+ICsvKiBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4gPiArLyoKPiA+ICsgKiBBdXRob3JzOiBDcmlz
dGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+ID4gKyAqCj4gPiArICogQ29weXJpZ2h0IChj
KSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KPiA+ICsgKgo+ID4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ID4gKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ID4g
KyAqIGFyZSBtZXQ6Cj4gPiArICoKPiA+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ID4gKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiA+
ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAo+ID4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiA+ICsgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgo+ID4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKPiA+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ID4gKyAqICAgIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4g
PiArICoKPiA+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiA+ICsgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Cj4gPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiA+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gPiAr
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgo+ID4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gPiArICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Cj4gPiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiA+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ID4gKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFCj4gPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gPiAr
ICoKPiA+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJ
TiBBTlkgV0FZLgo+ID4gKyAqLwo+ID4gKyNpZm5kZWYgX19VS185UF9fCj4gPiArI2RlZmluZSBf
X1VLXzlQX18KPiA+ICsKPiA+ICsjaW5jbHVkZSA8c3RkYXJnLmg+Cj4gPiArI2luY2x1ZGUgPHN0
ZGludC5oPgo+ID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiA+ICsjaW5jbHVkZSA8dWsvY29uZmln
Lmg+Cj4gPiArI2luY2x1ZGUgPHVrLzlwX2NvcmUuaD4KPiA+ICsjaW5jbHVkZSA8dWsvOXBkZXYu
aD4KPiA+ICsjaW5jbHVkZSA8dWsvOXByZXEuaD4KPiA+ICsjaW5jbHVkZSA8dWsvOXBmaWQuaD4K
PiA+ICsKPiA+ICsjaWZkZWYgX19jcGx1c3BsdXMKPiA+ICtleHRlcm4gIkMiIHsKPiA+ICsjZW5k
aWYKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBOZWdvdGlhdGVzIHRoZSB2ZXJzaW9uIGFuZCBpcyB0
aGUgZmlyc3QgbWVzc2FnZSBpbiBhIDlQIHNlc3Npb24uCj4gPiArICoKPiA+ICsgKiBAcGFyYW0g
ZGV2Cj4gPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSByZXF1
ZXN0ZWQKPiA+ICsgKiAgIFJlcXVlc3RlZCB2ZXJzaW9uIHN0cmluZy4KPiA+ICsgKiBAcGFyYW0g
cmVjZWl2ZWQKPiA+ICsgKiAgIFJlY2VpdmVkIHZlcnNpb24gc3RyaW5nLgo+ID4gKyAqIEByZXR1
cm4KPiA+ICsgKiAgIC0gKCFFUlJQVFIpOiBUaGUgcmVxdWVzdC4gSXQgbXVzdCBiZSByZW1vdmVk
IG9ubHkgYWZ0ZXIgYWxsIGFjY2Vzc2VzIHRvCj4gPiArICogICB0aGUgcmVjZWl2ZWQgdmVyc2lv
biBzdHJpbmcgYXJlIGRvbmUuCj4gPiArICogICAtIEVSUlBUUjogVGhlIGVycm9yIHJldHVybmVk
IGVpdGhlciBieSB0aGUgQVBJIG9yIGJ5IHRoZSByZW1vdGUgc2VydmVyLgo+ID4gKyAqLwo+ID4g
K3N0cnVjdCB1a185cHJlcSAqdWtfOXBfZG9fdmVyc2lvbihzdHJ1Y3QgdWtfOXBkZXYgKmRldiwK
PiA+ICsgICAgICAgICAgICAgY29uc3QgY2hhciAqcmVxdWVzdGVkLCBzdHJ1Y3QgdWtfOXBfc3Ry
ICpyZWNlaXZlZCk7Cj4gPiArCj4gPiArLyoqCj4gPiArICogTmVnb3RpYXRlcyB0aGUgdmVyc2lv
biBhbmQgaXMgdGhlIGZpcnN0IG1lc3NhZ2UgaW4gYSA5UCBzZXNzaW9uLgo+Cj4gVGhlIGRlc2Ny
aXRpb24gZG9lcyBub3QgZml0LCByaWdodD8gOy0pCkZpeGVkIGl0Lgo+Cj4gPiArICoKPiA+ICsg
KiBAcGFyYW0gZGV2Cj4gPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBw
YXJhbSBhZmlkCj4gPiArICogICBBdXRoZW50aWNhdGlvbiBmaWQsIHVzdWFsbHkgVUtfOVBfTk9G
SUQuCj4gPiArICogQHBhcmFtIHVuYW1lCj4gPiArICogICBVc2VyIG5hbWUsIGNhbiBiZSBlbXB0
eSBzdHJpbmcgZm9yIHZpcnRpby94ZW4uCj4gPiArICogQHBhcmFtIGFuYW1lCj4gPiArICogICBU
aGUgZmlsZSB0cmVlIHRvIGFjY2VzcywgY2FuIGJlIGxlZnQgZW1wdHkgZm9yIHZpcnRpby94ZW4u
Cj4gPiArICogQHBhcmFtIG5fdW5hbWUKPiA+ICsgKiAgIE51bWVyaWMgdW5hbWUsIHBhcnQgb2Yg
dGhlIDlQMjAwMC51IHVuaXggZXh0ZW5zaW9uIHRvIHRoZSBwcm90b2NvbC4KPiA+ICsgKiBAcmV0
dXJuCj4gPiArICogICAtICghRVJSUFRSKTogVGhlIGZpZCBvZiB0aGUgcm9vdCBkaXJlY3Rvcnkg
aW4gdGhlIGFjY2Vzc2VkIGZpbGUgdHJlZS4KPiA+ICsgKiAgIC0gRVJSUFRSOiBUaGUgZXJyb3Ig
cmV0dXJuZWQgZWl0aGVyIGJ5IHRoZSBBUEkgb3IgYnkgdGhlIHJlbW90ZSBzZXJ2ZXIuCj4gPiAr
ICovCj4gPiArc3RydWN0IHVrXzlwZmlkICp1a185cF9kb19hdHRhY2goc3RydWN0IHVrXzlwZGV2
ICpkZXYsIHVpbnQzMl90IGFmaWQsCj4gPiArICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVuYW1l
LCBjb25zdCBjaGFyICphbmFtZSwgdWludDMyX3Qgbl91bmFtZSk7Cj4gPiArCj4gPiArLyoqCj4g
PiArICogRmx1c2hlcyB0aGUgZ2l2ZW4gcmVxdWVzdCB0YWcsIGNhbmNlbGluZyB0aGUgY29ycmVz
cG9uZGluZyByZXF1ZXN0IGlmCj4gPiArICogdGhlIHNlcnZlciBoYXMgbm90IHlldCByZXBsaWVk
IHRvIGl0Lgo+ID4gKyAqCj4gPiArICogQHBhcmFtIGRldgo+ID4gKyAqICAgVGhlIFVuaWtyYWZ0
IDlQIERldmljZS4KPiA+ICsgKiBAcGFyYW0gb2xkdGFnCj4gPiArICogICBSZXF1ZXN0IHRhZy4K
PiA+ICsgKiBAcmV0dXJuCj4gPiArICogICAtIDA6IFN1Y2Nlc3NmdWwuCj4gPiArICogICAtICg8
IDApOiBBbiBlcnJvciBvY2N1cnJlZC4KPiA+ICsgKi8KPiA+ICtpbnQgdWtfOXBfZG9fZmx1c2go
c3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQxNl90IG9sZHRhZyk7Cj4gPiArCj4gPiArLyoqCj4g
PiArICogV2Fsa3MgdGhlIGZpbGVzeXN0ZW0gdHJlZSBmcm9tIHRoZSBnaXZlbiBkaXJlY3Rvcnkg
ZmlkLCBhdHRlbXB0aW5nIHRvIG9idGFpbgo+ID4gKyAqIHRoZSBmaWQgZm9yIHRoZSBjaGlsZCB3
aXRoIHRoZSBnaXZlbiBuYW1lLgo+ID4gKyAqCj4gPiArICogQHBhcmFtIGRldgo+ID4gKyAqICAg
VGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiA+ICsgKiBAcGFyYW0gZmlkCj4gPiArICogICBEaXJl
Y3RvcnkgZmlkLgo+ID4gKyAqIEBwYXJhbSBuYW1lCj4gPiArICogICBGaWxlIG5hbWUuCj4gPiAr
ICogQHJldHVybgo+ID4gKyAqICAgLSAoIUVSUlBUUik6IFRoZSBmaWQgb2YgdGhlIGNoaWxkIGVu
dHJ5Lgo+ID4gKyAqICAgLSBFUlJQVFI6IFRoZSBlcnJvciByZXR1cm5lZCBlaXRoZXIgYnkgdGhl
IEFQSSBvciBieSB0aGUgcmVtb3RlIHNlcnZlci4KPiA+ICsgKi8KPiA+ICtzdHJ1Y3QgdWtfOXBm
aWQgKnVrXzlwX2RvX3dhbGsoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAq
ZmlkLAo+ID4gKyAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKTsKPiA+ICsKPgo+IElzIHRo
aXMgdXNlZCB0byBpbXBsZW1lbnQgZGlyZW50PyBNYXliZSBgZGlyZW50YCB3b3VsZCBiZSB0aGVu
IGEgYmV0dGVyCj4gbmFtZS4gSG93ZXZlciwgaWYgYHdhbGtgIGlzIHVzZWQgaW4gdGhlIDlwIGRv
Y3VtZW50YXRpb24sIHRoZW4ga2VlcCBpdC4KVGhlIDlQIGRvY3MgbWVudGlvbiB3YWxrIGV4cGxp
Y2l0bHksIHNlZSA5cF9jb3JlLmggZm9yIHRoZSB3YWxrIG1lc3NhZ2UgdHlwZXMKJ1RXQUxLJywg
J1JXQUxLJy4KPgo+ID4gKy8qKgo+ID4gKyAqIE9wZW5zIHRoZSBmaWQgd2l0aCB0aGUgZ2l2ZW4g
bW9kZS4KPiA+ICsgKgo+ID4gKyAqIEBwYXJhbSBkZXYKPiA+ICsgKiAgIFRoZSBVbmlrcmFmdCA5
UCBEZXZpY2UuCj4gPiArICogQHBhcmFtIGZpZAo+ID4gKyAqICAgOVAgZmlkLgo+ID4gKyAqIEBw
YXJhbSBtb2RlCj4gPiArICogICA5UCBvcGVuIG1vZGUuCj4gPiArICogQHJldHVybgo+ID4gKyAq
ICAgLSAwOiBTdWNjZXNzZnVsLgo+ID4gKyAqICAgLSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQu
Cj4gPiArICovCj4gPiAraW50IHVrXzlwX2RvX29wZW4oc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0
cnVjdCB1a185cGZpZCAqZmlkLCB1aW50OF90IG1vZGUpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAq
IENyZWF0ZXMgYSBuZXcgZmlsZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBkaXJlY3Rvcnkg
YXNzb2NpYXRlZCB3aXRoIGZpZCwKPiA+ICsgKiBhbmQgYXNzb2NpYXRlcyBmaWQgd2l0aCB0aGUg
bmV3bHkgY3JlYXRlZCBmaWxlLCBvcGVuaW5nIGl0IHdpdGggdGhlIGdpdmVuCj4gPiArICogbW9k
ZS4KPiA+ICsgKgo+ID4gKyAqIEBwYXJhbSBkZXYKPiA+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBE
ZXZpY2UuCj4gPiArICogQHBhcmFtIGZpZAo+ID4gKyAqICAgOVAgZGlyZWN0b3J5IGZpZC4KPiA+
ICsgKiBAcGFyYW0gbmFtZQo+ID4gKyAqICAgTmFtZSBvZiB0aGUgY3JlYXRlZCBmaWxlLgo+ID4g
KyAqIEBwYXJhbSBwZXJtCj4gPiArICogICA5UCBwZXJtaXNzaW9uIGJpdHMuCj4gPiArICogQHBh
cmFtIG1vZGUKPiA+ICsgKiAgIDlQIG9wZW4gbW9kZS4KPiA+ICsgKiBAcGFyYW0gZXh0ZW5zaW9u
Cj4gPiArICogICBTdHJpbmcgZGVzY3JpYmluZyBzcGVjaWFsIGZpbGVzLCBkZXBlbmRpbmcgb24g
dGhlIG1vZGUgYml0Lgo+ID4gKyAqIEByZXR1cm4KPiA+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bC4K
PiA+ICsgKiAgIC0gKDwgMCk6IEFuIGVycm9yIG9jY3VycmVkLgo+ID4gKyAqLwo+ID4gK2ludCB1
a185cF9kb19jcmVhdGUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlk
LAo+ID4gKyAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCB1aW50MzJfdCBwZXJtLCB1aW50
OF90IG1vZGUsCj4gPiArICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmV4dGVuc2lvbik7Cj4gPiAr
Cj4gPiArLyoqCj4gPiArICogUmVtb3ZlcyB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggZmlkLgo+
ID4gKyAqCj4gPiArICogQHBhcmFtIGRldgo+ID4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmlj
ZS4KPiA+ICsgKiBAcGFyYW0gZmlkCj4gPiArICogICA5UCBmaWQgdG8gcmVtb3ZlLgo+ID4gKyAq
IEByZXR1cm4KPiA+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bC4KPiA+ICsgKiAgIC0gKDwgMCk6IEFu
IGVycm9yIG9jY3VycmVkLgo+ID4gKyAqLwo+ID4gK2ludCB1a185cF9kb19yZW1vdmUoc3RydWN0
IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkKTsKPiA+ICsKPiA+ICsvKioKPiA+
ICsgKiBDbHVua3MgdGhlIGZpZCwgdGVsbGluZyB0aGUgc2VydmVyIHRvIGZvcmdldCBpdHMgcHJl
dmlvdXMgYXNzb2NpYXRpb24uCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gZGV2Cj4gPiArICogICBU
aGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSBmaWQKPiA+ICsgKiAgIDlQIGZp
ZCB0byBjbHVuay4KPiA+ICsgKiBAcmV0dXJuCj4gPiArICogICAtIDA6IFN1Y2Nlc3NmdWwuCj4g
PiArICogICAtICg8IDApOiBBbiBlcnJvciBvY2N1cnJlZC4KPiA+ICsgKi8KPiA+ICtpbnQgdWtf
OXBfZG9fY2x1bmsoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkKTsK
PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBSZWFkcyBjb3VudCBieXRlcyBmcm9tIHRoZSBmaWQsIHN0
YXJ0aW5nIGZyb20gdGhlIGdpdmVuIG9mZnNldCwgcGxhY2luZwo+ID4gKyAqIHRoZW0gaW50byB0
aGUgYnVmZmVyLgo+Cj4gQ2FuIHlvdSBhZGQgb25lIG9yIHR3byBzZW50ZW5jZXMgZGVzY3JpYmlu
ZyBob3cgRU9GIGlzIGhhbmRsZWQ/CkRvbmUuCj4KPiA+ICsgKgo+ID4gKyAqIEBwYXJhbSBkZXYK
PiA+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gPiArICogQHBhcmFtIGZpZAo+ID4g
KyAqICAgOVAgZmlkIHRvIHJlYWQgZnJvbS4KPiA+ICsgKiBAcGFyYW0gb2Zmc2V0Cj4gPiArICog
ICBPZmZzZXQgYXQgd2hpY2ggdG8gc3RhcnQgcmVhZGluZy4KPiA+ICsgKiBAcGFyYW0gY291bnQK
PiA+ICsgKiAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuCj4gPiArICogQHBhcmFt
IGJ1Zgo+ID4gKyAqICAgQnVmZmVyIHRvIHJlYWQgaW50by4KPiA+ICsgKiBAcmV0dXJuCj4gPiAr
ICogICAtICg+PSAwKTogQW1vdW50IG9mIGJ5dGVzIHJlYWQuCj4gPiArICogICAtICg8IDApOiBB
biBlcnJvciBvY2N1cnJlZC4KPiA+ICsgKi8KPiA+ICtpbnQ2NF90IHVrXzlwX2RvX3JlYWQoc3Ry
dWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAo+ID4gKyAgICAgICAgICAg
ICB1aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90IGNvdW50LCBjaGFyICpidWYpOwo+ID4gKwo+ID4g
Ky8qKgo+ID4gKyAqIFdyaXRlcyBjb3VudCBieXRlcyBmcm9tIGJ1ZiB0byB0aGUgZmlkLCBzdGFy
dGluZyBmcm9tIHRoZSBnaXZlbiBvZmZzZXQuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gZGV2Cj4g
PiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSBmaWQKPiA+ICsg
KiAgIDlQIGZpZCB0byB3cml0ZSB0by4KPiA+ICsgKiBAcGFyYW0gb2Zmc2V0Cj4gPiArICogICBP
ZmZzZXQgYXQgd2hpY2ggdG8gc3RhcnQgd3JpdGluZy4KPiA+ICsgKiBAcGFyYW0gY291bnQKPiA+
ICsgKiAgIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHdyaXRlLgo+ID4gKyAqIEBwYXJhbSBi
dWYKPiA+ICsgKiAgIERhdGEgdG8gYmUgd3JpdHRlbi4KPiA+ICsgKiBAcmV0dXJuCj4gPiArICog
ICAtICg+PSAwKTogQW1vdW50IG9mIGJ5dGVzIHdyaXR0ZW4uCj4gPiArICogICAtICg8IDApOiBB
biBlcnJvciBvY2N1cnJlZC4KPiA+ICsgKi8KPiA+ICtpbnQ2NF90IHVrXzlwX2RvX3dyaXRlKHN0
cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKPiA+ICsgICAgICAgICAg
ICAgdWludDY0X3Qgb2Zmc2V0LCB1aW50MzJfdCBjb3VudCwgY29uc3QgY2hhciAqYnVmKTsKPiA+
ICsKPiA+ICsvKioKPiA+ICsgKiBTdGF0cyB0aGUgZ2l2ZW4gZmlkIGFuZCBwbGFjZXMgdGhlIGRh
dGEgaW50byB0aGUgZ2l2ZW4gc3RhdCBzdHJ1Y3R1cmUuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0g
ZGV2Cj4gPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSBmaWQK
PiA+ICsgKiAgIDlQIGZpZCB0byBzdGF0Lgo+ID4gKyAqIEBwYXJhbSBzdGF0Cj4gPiArICogICBX
aGVyZSB0byBzdG9yZSB0aGUgc3RhdCByZXN1bHRzLgo+ID4gKyAqIEByZXR1cm4KPiA+ICsgKiAg
IC0gKCFFUlJQVFIpOiBUaGUgcmVxdWVzdC4gSXQgbXVzdCBiZSByZW1vdmVkIG9ubHkgYWZ0ZXIg
YWxsIGFjY2Vzc2VzIHRvCj4gPiArICogICB0aGUgc3RyaW5ncyBpbiB0aGUgc3RhdCBzdHJ1Y3R1
cmUgYXJlIG92ZXIuCj4gPiArICogICAtIEVSUlBUUjogVGhlIGVycm9yIHJldHVybmVkIGVpdGhl
ciBieSB0aGUgQVBJIG9yIGJ5IHRoZSByZW1vdGUgc2VydmVyLgo+ID4gKyAqLwo+ID4gK3N0cnVj
dCB1a185cHJlcSAqdWtfOXBfZG9fc3RhdChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVr
XzlwZmlkICpmaWQsCj4gPiArICAgICAgICAgICAgIHN0cnVjdCB1a185cF9zdGF0ICpzdGF0KTsK
PiA+ICsKPiA+ICsvKioKPiA+ICsgKiBDaGFuZ2VzIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgYSBn
aXZlbiBmaWQuCj4gPiArICoKPiA+ICsgKiBAcGFyYW0gZGV2Cj4gPiArICogICBUaGUgVW5pa3Jh
ZnQgOVAgRGV2aWNlLgo+ID4gKyAqIEBwYXJhbSBmaWQKPiA+ICsgKiAgIDlQIGZpZCB0byBjbHVu
ay4KPiA+ICsgKiBAcmV0dXJuCj4gPiArICogICAtIDA6IFN1Y2Nlc3NmdWwuCj4gPiArICogICAt
ICg8IDApOiBBbiBlcnJvciBvY2N1cnJlZC4KPiA+ICsgKi8KPiA+ICtpbnQgdWtfOXBfZG9fd3N0
YXQoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAo+ID4gKyAgICAg
ICAgICAgICBzdHJ1Y3QgdWtfOXBfc3RhdCAqc3RhdCk7Cj4gPiArCj4gPiArI2lmZGVmIF9fY3Bs
dXNwbHVzCj4gPiArfQo+ID4gKyNlbmRpZgo+ID4gKwo+ID4gKyNlbmRpZiAvKiBfX1VLXzlQX18g
Ki8KPiA+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:08:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:08:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rVA-0003Uc-22; Thu, 05 Sep 2019 13:08:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=kOv7=XA=gmail.com=cristb@srs-us1.protection.inumbo.net>)
 id 1i5rV9-0003UX-4q
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:08:39 +0000
X-Inumbo-ID: 460cce54-cfde-11e9-978d-bc764e2007e4
Received: from mail-lf1-x141.google.com (unknown [2a00:1450:4864:20::141])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 460cce54-cfde-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 13:08:38 +0000 (UTC)
Received: by mail-lf1-x141.google.com with SMTP id r134so1942552lff.12
 for <minios-devel@lists.xen.org>; Thu, 05 Sep 2019 06:08:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=Md3PQVHdp951MdyeHyD0iV/gOtaWVGifC13y2g/rmWw=;
 b=DGYuQH3a8oWxkyraMmSLNbIl8kuo+ZFs8eyAkC3Sa8VxiW88idpC8rifHQUXnOLJxg
 qY/N/5Z2JivTnJQVjkyJEMo/TMk3LfPHKNkOdBCNcV2gLgQwpJGFkrqzWmm0yYYejIml
 I0YaJjpw0pd4fRIdHf+z5Kg05JDK/E+u5gGcGpWiTjkAl1BM8akbKNt9Bq0f/QrzrLaI
 pPI4cTvAzirPA/uetyOwiOi5M5Ps806isjPlifgGcpTgHaRM78cnqDnxrokZwJCEN23p
 Grpdp8FoChtr3u8I+qWEtIu7HH1XR7fna3ZrbpRafRyrO+O3FglHLiREviG24LEKCL5j
 7qjg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=Md3PQVHdp951MdyeHyD0iV/gOtaWVGifC13y2g/rmWw=;
 b=cwST+K0VCKdbgd1LlWTHR1NJIziqTlA7vG7TDsse8sibWH7NNm2vKkgswBKtJoOFBh
 EUhbSH6329CwRW61BMQ82lOxCEE+G/+VxD8+W9LbaNArqzMiKehE8nQ582z16DAdIpK8
 /n1NS9x/afTBmZTEzRqhERXupdMu4O+xj4JfHDNdfGOTK9Ly0n+gLFq3QPFObIKZdyKY
 GddNzYZvoKl8jrdA2ng7d8xI9nmbutyVCHMOjOSyMW1vcgBJXE6awwHs7VmRriLYETtp
 NU8m8UVzsvAeyiTDOaoTMBOrYzX/vZf2kcUTVvTxoFV7ltOUssQl9nCGya4Wj1fqKd1s
 M/JA==
X-Gm-Message-State: APjAAAV9IPuhS7zPwhO9K4FUbgUAdLVyrh1sSPMuYXv5Jx6T2z2P/RTB
 8oMPgIqy2vwdqIM6cKQCrU2z0Yrq6er7afbH01o=
X-Google-Smtp-Source: APXvYqyV81DWZQ5mbe5shUDAXS5bLMSIn8H3lxDljK+R7QQ+tY50B9LNS/LrjyG0ibTyM/3QmuRGAwY3JGTVY400Gqw=
X-Received: by 2002:a19:3f47:: with SMTP id m68mr2303651lfa.108.1567688917160; 
 Thu, 05 Sep 2019 06:08:37 -0700 (PDT)
MIME-Version: 1.0
References: <20190629085608.15680-1-cristb@gmail.com>
 <20190629085608.15680-9-cristb@gmail.com>
 <ddc4ff2a-088a-de2f-1381-c109bfa45bc1@neclab.eu>
In-Reply-To: <ddc4ff2a-088a-de2f-1381-c109bfa45bc1@neclab.eu>
From: Cristian Banu <cristb@gmail.com>
Date: Thu, 5 Sep 2019 16:08:25 +0300
Message-ID: <CAFJttSWz=Unj9WUozB4kHRfUwuWp=DkX-AUwZ-Bnj+B+AkbcFg@mail.gmail.com>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 8/8] lib/uk9p: Clunk fids on
 fid release
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpUaGlzIGlzIGZpeGVkIGluIHYzLgoKVGhhbmtzIQpDcmlzdGkKCk9uIEZyaSwg
SnVsIDUsIDIwMTkgYXQgMToxNyBBTSBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xh
Yi5ldT4gd3JvdGU6Cj4KPiBPbiAyOS4wNi4xOSAxMDo1NiwgQ3Jpc3RpYW4gQmFudSB3cm90ZToK
PiA+IE9uIGZpZCByZWxlYXNlLCB0aGUgOXAgc2VydmVyIGlzIHNlbnQgYSBjbHVuayBtZXNzYWdl
IHRvIGRpc2Fzc29jaWF0ZQo+ID4gdGhlIGZpZCBmcm9tIGl0cyBwcmV2aW91cyBhc3NvY2lhdGlv
biwgc3VjaCB0aGF0IGl0IGhhcyBhIGNsZWFuIHNsYXRlCj4gPiBvbiBib3RoIHRoZSBzZXJ2ZXIg
YW5kIHRoZSBjbGllbnQgd2hlbiBpdCB3aWxsIGV2ZW50dWFsbHkgYmUgcmV1c2VkLgo+ID4KPiA+
IFNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gPiAtLS0K
PiA+ICAgbGliL3VrOXAvOXBkZXYuYyB8IDE5ICsrKysrKysrKysrKysrKysrLS0KPiA+ICAgMSBm
aWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gPgo+ID4gZGlm
ZiAtLWdpdCBhL2xpYi91azlwLzlwZGV2LmMgYi9saWIvdWs5cC85cGRldi5jCj4gPiBpbmRleCAx
MWNhNGQ5NjU4OTMuLmVlYWQ0ZmY2MzQ0MiAxMDA2NDQKPiA+IC0tLSBhL2xpYi91azlwLzlwZGV2
LmMKPiA+ICsrKyBiL2xpYi91azlwLzlwZGV2LmMKPiA+IEBAIC00Miw2ICs0Miw3IEBACj4gPiAg
ICNpbmNsdWRlIDx1ay9iaXRtYXAuaD4KPiA+ICAgI2luY2x1ZGUgPHVrL3JlZmNvdW50Lmg+Cj4g
PiAgICNpbmNsdWRlIDx1ay93YWl0Lmg+Cj4gPiArI2luY2x1ZGUgPHVrLzlwLmg+Cj4gPiAgICNp
bmNsdWRlIDx1ay85cGRldi5oPgo+ID4gICAjaW5jbHVkZSA8dWsvOXBkZXZfdHJhbnMuaD4KPiA+
ICAgI2luY2x1ZGUgPHVrLzlwcmVxLmg+Cj4gPiBAQCAtOTUsNyArOTYsNyBAQCBzdGF0aWMgaW50
IF9maWRfbWdtdF9hZGRfZmlkX2xvY2tlZChzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9t
Z210LAo+ID4KPiA+ICAgc3RhdGljIHZvaWQgX2ZpZF9tZ210X2RlbF9maWRfbG9ja2VkKHN0cnVj
dCB1a185cGRldl9maWRfbWdtdCAqZmlkX21nbXQsCj4gPiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBtb3ZlX3RvX2ZyZWVsaXN0KQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBtb3ZlX3RvX2ZyZWVsaXN0KQo+Cj4gQ291bGRuJ3QgdGhpcyBiZSBib29sIGlu
IHRoZSBwYXRjaGVzIGV2ZW4gYmVmb3JlPwo+Cj4gPiAgIHsKPiA+ICAgICAgIHVrX2xpc3RfZGVs
KCZmaWQtPl9saXN0KTsKPiA+Cj4gPiBAQCAtNDMzLDkgKzQzNCwyMyBAQCB2b2lkIHVrXzlwZGV2
X2ZpZF9yZWxlYXNlKHN0cnVjdCB1a185cGZpZCAqZmlkKQo+ID4gICB7Cj4gPiAgICAgICBzdHJ1
Y3QgdWtfOXBkZXYgKmRldiA9IGZpZC0+X2RldjsKPiA+ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxh
Z3M7Cj4gPiArICAgICBib29sIG1vdmVfdG9fZnJlZWxpc3QgPSBmYWxzZTsKPiA+ICsgICAgIGlu
dCByYzsKPiA+Cj4gPiArICAgICAvKiBGaXJzdCBjbHVuayB0aGUgZmlkLiAqLwo+ID4gKyAgICAg
cmMgPSB1a185cF9kb19jbHVuayhmaWQtPl9kZXYsIGZpZCk7Cj4gPiArICAgICBpZiAocmMgPCAw
KSB7Cj4gPiArICAgICAgICAgICAgIHVrX3ByX3dhcm4oIkNvdWxkIG5vdCBjbHVuayBmaWQgJWQ6
ICVkXG4iLCBmaWQtPmZpZCwgcmMpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIG91dDsKPiA+ICsg
ICAgIH0KPiA+ICsKPiA+ICsgICAgIC8qIElmIHN1Y2Nlc3NmdWxseSBjbHVua2VkLCBtb3ZlIGl0
IHRvIGEgZnJlZWxpc3QuICovCj4gPiArICAgICBtb3ZlX3RvX2ZyZWVsaXN0ID0gdHJ1ZTsKPiA+
ICsKPiA+ICtvdXQ6Cj4gPiArICAgICAvKiBUaGVuIHJlbW92ZSBpdCBmcm9tIGFueSBpbnRlcm5h
bCBkYXRhIHN0cnVjdHVyZXMuICovCj4gPiAgICAgICB1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUo
JmRldi0+X2ZpZF9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gPiAtICAgICBfZmlkX21nbXRfZGVs
X2ZpZF9sb2NrZWQoJmRldi0+X2ZpZF9tZ210LCBmaWQsIDEpOwo+ID4gKyAgICAgX2ZpZF9tZ210
X2RlbF9maWRfbG9ja2VkKCZkZXYtPl9maWRfbWdtdCwgZmlkLCBtb3ZlX3RvX2ZyZWVsaXN0KTsK
PiA+ICAgICAgIHVrcGxhdF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPl9maWRfbWdtdC5z
cGlubG9jaywgZmxhZ3MpOwo+ID4gICB9Cj4gPgo+ID4KCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:10:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:10:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rWX-0003wI-6u; Thu, 05 Sep 2019 13:10:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mmEX=XA=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i5rWV-0003hz-Q4
 for minios-devel@lists.xenproject.org; Thu, 05 Sep 2019 13:10:03 +0000
X-Inumbo-ID: 780684ae-cfde-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 780684ae-cfde-11e9-a337-bc764e2007e4;
 Thu, 05 Sep 2019 13:10:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 22489F200A;
 Thu,  5 Sep 2019 15:10:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id fr1WYT8hSl3K; Thu,  5 Sep 2019 15:10:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EF751F2002;
 Thu,  5 Sep 2019 15:09:56 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 5 Sep 2019
 15:09:56 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Thu, 5 Sep 2019 15:09:56
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/vfscore: Add backspace
 support to the stdio
Thread-Index: AQHVXovpRdrvzirv+U+UF/UbJLutBacc9c6AgAAjhwA=
Date: Thu, 5 Sep 2019 13:09:56 +0000
Message-ID: <92B9F4DA-293D-4CC8-916E-E36E673BD9B9@neclab.eu>
References: <20190829170501.23587-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <db496425-4c1b-e564-9e24-f8a5c9ba7fe4@neclab.eu>
In-Reply-To: <db496425-4c1b-e564-9e24-f8a5c9ba7fe4@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <11A6CB4CBBBE3848B73D75CF53296361@office.hd>
MIME-Version: 1.0
Subject: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/vfscore: Add backspace
 support to the stdio
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgVmxhZCwNCg0KUGxlYXNlIHNlZSBhIHNtYWxsIGNvbW1lbnQgaW5saW5lLg0KDQpUaGFua3Ms
DQoNCi0tIEZlbGlwZQ0KDQogICAgU3ViamVjdDogW01pbmlvcy1kZXZlbF0gW1VOSUtSQUZUIFBB
VENIIDEvMV0gbGliL3Zmc2NvcmU6IEFkZCBiYWNrc3BhY2UgDQogICAgc3VwcG9ydCB0byB0aGUg
c3RkaW8NCiAgICBEYXRlOiBUaHUsIDI5IEF1ZyAyMDE5IDE3OjA1OjA5ICswMDAwDQogICAgRnJv
bTogVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KICAgIFRvOiBtaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZyA8bWluaW9zLWRl
dmVsQGxpc3RzLnhlbi5vcmc+DQogICAgQ0M6IHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1IDxzaW1v
bi5rdWVuemVyQG5lY2xhYi5ldT4sIFZsYWQtQW5kcmVpIA0KICAgIELEgkRPSVUgKDc4NjkyKSA8
dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4sIA0KICAgIGNvc3Rpbi5sdXB1QGNz
LnB1Yi5ybyA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgIA0KICAgIFRoaXMgcGF0Y2ggYWRk
cyBiYXNpYyBiYWNrc3BhY2Ugc3VwcG9ydCB0byB0aGUgc3RkaW8uIFRoaXMgcGF0Y2ggZG9lcw0K
ICAgIG5vdCBoYW5kbGUgdGhlIGN1cnNvciBkaWZmZXJlbnRseSBmb3IgdGhlIFx0LiBSZW1vdmlu
ZyB0aGUgbGFzdA0KICAgIGNoYXJhY3RlciBpcyBkb25lIGJ5IG91dHB1dGluZyBcYiBcYiB0byB0
aGUgY29uc29sZS4NCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUg
PHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+DQogICAgLS0tDQogICAgICBsaWIv
dmZzY29yZS9zdGRpby5jIHwgMTYgKysrKysrKysrKysrKy0tLQ0KICAgICAgMSBmaWxlIGNoYW5n
ZWQsIDEzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQogICAgDQogICAgZGlmZiAtLWdp
dCBhL2xpYi92ZnNjb3JlL3N0ZGlvLmMgYi9saWIvdmZzY29yZS9zdGRpby5jDQogICAgaW5kZXgg
MDgzMzUzNjcuLmYyMzQwMWZmIDEwMDY0NA0KICAgIC0tLSBhL2xpYi92ZnNjb3JlL3N0ZGlvLmMN
CiAgICArKysgYi9saWIvdmZzY29yZS9zdGRpby5jDQogICAgQEAgLTg1LDkgKzg1LDE5IEBAIHN0
YXRpYyBpbnQgX19yZWFkX2ZuKHZvaWQgKmRzdCwgdm9pZCAqc3JjIF9fdW51c2VkLCANCiAgICBz
aXplX3QgKmNudCkNCiAgICAgIAkJKihidWYgLSAxKSA9ICooYnVmIC0gMSkgPT0gJ1xyJyA/DQog
ICAgICAJCQkJCSdcbicgOiAqKGJ1ZiAtIDEpOw0KICAgICAgLQkJLyogRWNobyB0aGUgaW5wdXQg
Ki8NCiAgICAtCQl1a3BsYXRfY291dGsoYnVmIC0gYnl0ZXNfcmVhZCwgYnl0ZXNfcmVhZCk7DQog
ICAgLQkJYnl0ZXNfdG90YWwgKz0gYnl0ZXNfcmVhZDsNCiAgICArCQlpZiAoKihidWYgLSAxKSA9
PSAnXDE3NycpIHsNCg0KQ291bGQgeW91IHBsZWFzZSBhZGQgYSBzbWFsbCBjb21tZW50IHRvIGV4
cGxhaW4gd2h5IHlvdSdyZSB1c2luZyB0aGUgMTc3IGNvZGU/DQoNCiAgICArCQkJLyogSWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGJ5dGUgKi8NCiAgICArCQkJaWYgKGJ1ZiAtIDEgIT0gZHN0KSB7
DQogICAgKwkJCQl1a3BsYXRfY291dGsoIlxiIFxiIiwgMyk7DQogICAgKwkJCQlidWYgLT0gMTsN
CiAgICArCQkJCWJ5dGVzX3RvdGFsIC09IDE7DQogICAgKwkJCX0NCiAgICArCQkJYnVmIC09IDE7
DQogICAgKwkJfSBlbHNlIHsNCiAgICArCQkJLyogRWNobyB0aGUgaW5wdXQgKi8NCiAgICArCQkJ
dWtwbGF0X2NvdXRrKGJ1ZiAtIGJ5dGVzX3JlYWQsIGJ5dGVzX3JlYWQpOw0KICAgICsJCQlieXRl
c190b3RhbCArPSBieXRlc19yZWFkOw0KICAgICsJCX0NCiAgICAgICAJfSB3aGlsZSAoYnl0ZXNf
dG90YWwgPCBjb3VudCAmJiAqKGJ1ZiAtIDEpICE9ICdcbicNCiAgICAgIAkJCSYmICooYnVmIC0g
MSkgIT0gVkVPRik7DQogICAgLS0gDQogICAgMi4yMC4xDQogICAgDQogICAgDQogICAgX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQog
ICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:12:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:12:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rZD-0004Gv-SX; Thu, 05 Sep 2019 13:12:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LURs=XA=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i5rZC-0004Gq-FB
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:12:50 +0000
X-Inumbo-ID: db041b4a-cfde-11e9-abca-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id db041b4a-cfde-11e9-abca-12813bfff9fa;
 Thu, 05 Sep 2019 13:12:48 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 3567640C04;
 Thu,  5 Sep 2019 15:12:47 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:12:46 +0200
Message-Id: <20190905131249.22865-1-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 0/3] Initial port of
 http-parser to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIGh0dHAtcGFyc2VyIHRvIFVuaWtyYWZ0IGFzIGFu
IGV4dGVybmFsCmxpYnJhcnkuIE5ld2xpYmMgaXMgcmVxdWlyZWQuCgpUZXN0ZWQgd2l0aCAndGVz
dC5jJyBzdXBwb3J0ZWQgYnkgdGhlIGxpYnJhcnkuIEFsbW9zdCBhbGwgdGVzdCBhcmUKcGFzc2lu
Zywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICd0ZXN0IHZlcnkgbGFyZ2UgY2h1bmtlZCByZXNwb25z
ZScKdGhlICdyZXNwb25zZSBzY2FuIC4uLicgdGVzdHMuCgpDaGFuZ2VzIHNpbmNlIHYxOgotIEVk
aXRlZCBDb25maWcudWsgdG8gdXNlICdjb25maWcnIGluc3RlYWQgb2YgJ21lbnVjb25maWcnCi0g
RWRpdGVkIENvbmZpZy51ayBhbmQgY2hhbmdlZCB0aGUgJ3NlbGVjdCBIQVZFX0xJQkMnIHRvICdz
ZWxlY3QgTElCTkVXTElCQycgYXMgaXQgZGVwZW5kcyBuZXdsaWIKLSBFZGl0ZWQgQ29uZmlnLnVr
IGFuZCBjaGFuZ2VkIHdoaXRlIHNwYWNlcyBmb3IgdGFicwotIEVkaXRlZCBNYWtlZmlsZS51ayB0
byBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgZnJvbSAnaHR0cF9wYXJzZXInIHRvICds
aWJodHRwX3BhcnNlcicKLSBFZGl0ZWQgTWFrZWZpbGUudWsgdG8gcmVtb3ZlIHRoZSAvaW5jbHVk
ZSBmb2xkZXIgYXMgdGhlcmUgaXMgbm9uZSBpbiB0aGUgYXJjaGl2ZQoKU2FudGlhZ28gUGFnYW5p
ICgzKToKICBJbnRyb2R1Y2UgbGlicmFyeSBza2VsZXRvbgogIEFkZCBNYWtlZmlsZS51awogIEV4
cG9ydCBzeW1ib2xzCgogQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKwogQ09OVFJJQlVUSU5HLm1k
IHwgIDQgKysrKwogQ09QWUlORy5tZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwogQ29uZmlnLnVrICAgICAgIHwgIDQgKysrKwogTUFJTlRBSU5FUlMubWQgIHwgMTEg
KysrKysrKysrCiBNYWtlZmlsZS51ayAgICAgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiBSRUFETUUubWQgICAgICAgfCAgNSArKysrCiBleHBv
cnRzeW1zLnVrICAgfCAxNCArKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxNDMgaW5zZXJ0
aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUg
MTAwNjQ0IENPTlRSSUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVS
Uy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQg
UkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awoKLS0gCjIuMjIuMAoK
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1k
ZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:12:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:12:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rZK-0004He-UK; Thu, 05 Sep 2019 13:12:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LURs=XA=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i5rZJ-0004HQ-1a
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:12:57 +0000
X-Inumbo-ID: deece5e0-cfde-11e9-abca-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id deece5e0-cfde-11e9-abca-12813bfff9fa;
 Thu, 05 Sep 2019 13:12:56 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 8395940C04;
 Thu,  5 Sep 2019 15:12:55 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:12:47 +0200
Message-Id: <20190905131249.22865-2-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190905131249.22865-1-santiago.pagani@neclab.eu>
References: <20190905131249.22865-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 1/3] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKwogQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKwog
Q09QWUlORy5tZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCiBDb25maWcudWsgICAgICAgfCAgNCArKysrCiBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysr
KysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDUgKysrKysKIGV4cG9ydHN5bXMudWsgICB8ICAx
ICsKIDcgZmlsZXMgY2hhbmdlZCwgNjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPTlRSSUJVVElORy5tZAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IFJF
QURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKCmRpZmYgLS1naXQgYS9D
T0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZTEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTczMDA0MQotLS0gL2Rldi9udWxsCisrKyBiL0NPRElOR19TVFlMRS5tZApA
QCAtMCwwICsxLDQgQEAKK0NvZGluZyBTdHlsZQorPT09PT09PT09PT09CisKK1BsZWFzZSByZWZl
ciB0byB0aGUgYENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBv
c2l0b3J5LgpkaWZmIC0tZ2l0IGEvQ09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTVlY2EKLS0tIC9kZXYvbnVsbAor
KysgYi9DT05UUklCVVRJTkcubWQKQEAgLTAsMCArMSw0IEBACitDb250cmlidXRpbmcgdG8gVW5p
a3JhZnQKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUgYENP
TlRSSUJVVElORy5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgpkaWZm
IC0tZ2l0IGEvQ09QWUlORy5tZCBiL0NPUFlJTkcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDdiM2Y0MQotLS0gL2Rldi9udWxsCisrKyBiL0NPUFlJTkcubWQKQEAgLTAs
MCArMSwzOSBAQAorTGljZW5zZQorPT09PT09PQorCitVbmlrcmFmdCBodHRwLXBhcnNlciB3cmFw
cGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlu
cyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQgbGlidXVpZCB3aXRoIFVuaWtyYWZ0LgorRWFjaCBDIGNv
ZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRoZQorY29w
eXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGUgY29k
ZSBpcworbGljZW5zZWQuIElmIHN1Y2ggYSBsaWNlbmNlIG5vdGUgaXMgbWlzc2luZywgdGhlIGZv
bGxvd2luZyBjb3B5cmlnaHQKK25vdGljZSB3aWxsIGFwcGx5OgorCisJQ29weXJpZ2h0IChjKSAy
MDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworCWFyZSBtZXQ6CisKKwkxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorCSAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCTMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKwlBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisJTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisJSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisJUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc2OTdlCi0tLSAvZGV2L251bGwKKysrIGIvQ29u
ZmlnLnVrCkBAIC0wLDAgKzEsNCBAQAorY29uZmlnIExJQkhUVFBfUEFSU0VSCisJYm9vbCAiaHR0
cC1wYXJzZXIgLSBhIHBhcnNlciBmb3IgSFRUUCBtZXNzYWdlcyB3cml0dGVuIGluIEMiCisJZGVm
YXVsdCB5CisJc2VsZWN0IExJQk5FV0xJQkMKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTLm1kIGIv
TUFJTlRBSU5FUlMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkY2I3
NAotLS0gL2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTLm1kCkBAIC0wLDAgKzEsMTEgQEAKK01h
aW50YWluZXJzIExpc3QKKz09PT09PT09PT09PT09PT0KKworRm9yIG5vdGVzIG9uIGhvdyB0byBy
ZWFkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byBgTUFJTlRBSU5FUlMubWRgIGlu
Cit0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgorCisJTElCSFRUUF9QQVJTRVItVU5JS1JB
RlQKKwlNOglGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+CisJTToJU2FudGlh
Z28gUGFnYW5pIDxzYW50aWFnby5wYWdhbmlAbmVjbGFiLmV1PgorCUw6CW1pbmlvcy1kZXZlbEBs
aXN0cy54ZW4ub3JnCisJRjogKgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmY2I1M2UKLS0tIC9kZXYvbnVsbAor
KysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw1IEBACitodHRwLXBhcnNlciBmb3IgVW5pa3JhZnQK
Kz09PT09PT09PT09PT09PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBh
cyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2AKK3N1YmRpcmVjdG9yeSBv
ZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51
ayBiL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIx
ZTk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTAsMCArMSBAQAorbm9u
ZQotLSAKMi4yMi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:13:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:13:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rZL-0004I1-W7; Thu, 05 Sep 2019 13:12:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LURs=XA=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i5rZK-0004HY-Ao
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:12:58 +0000
X-Inumbo-ID: e0678156-cfde-11e9-978d-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id e0678156-cfde-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 13:12:56 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 6C39C41688;
 Thu,  5 Sep 2019 15:12:56 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:12:48 +0200
Message-Id: <20190905131249.22865-3-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190905131249.22865-1-santiago.pagani@neclab.eu>
References: <20190905131249.22865-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogTWFrZWZpbGUudWsgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFr
ZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjNzMxZgotLS0g
L2Rldi9udWxsCisrKyBiL01ha2VmaWxlLnVrCkBAIC0wLDAgKzEsNjIgQEAKKyMgIGh0dHAtcGFy
c2VyIE1ha2VmaWxlLnVjCisjCisjICBBdXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWlj
aUBuZWNsYWIuZXU+CisjCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRk
LiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjCisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyAgVEhJUyBIRUFERVIg
TUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyMKKworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmh0dHBfcGFyc2VyLCQoQ09ORklH
X0xJQkhUVFBfUEFSU0VSKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9WRVJTSU9OPXYyLjguMQor
TElCSFRUUF9QQVJTRVJfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvaHR0cC1wYXJzZXIv
YXJjaGl2ZS8kKExJQkhUVFBfUEFSU0VSX1ZFUlNJT04pLnppcAorTElCSFRUUF9QQVJTRVJfU1VC
RElSPWh0dHAtcGFyc2VyLTIuOC4xCiskKGV2YWwgJChjYWxsIGZldGNoLGxpYmh0dHBfcGFyc2Vy
LCQoTElCSFRUUF9QQVJTRVJfVVJMKSwkKExJQkhUVFBfUEFSU0VSX1ZFUlNJT04pLnppcCkpCisK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCitMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQ9JChMSUJIVFRQX1BBUlNFUl9PUklHSU4pLyQo
TElCSFRUUF9QQVJTRVJfU1VCRElSKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJy
YXJ5IGluY2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0lOQ0xVREVTLSQoQ09ORklH
X0xJQkhUVFBfUEFSU0VSKSArPSAtSSQoTElCSFRUUF9QQVJTRVJfRVhUUkFDVEVEKQorCisjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworIyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
TElCSFRUUF9QQVJTRVJfU1JDUy15ICs9ICQoTElCSFRUUF9QQVJTRVJfRVhUUkFDVEVEKS9odHRw
X3BhcnNlci5jCi0tIAoyLjIyLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:13:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:13:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rZR-0004Iv-1k; Thu, 05 Sep 2019 13:13:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LURs=XA=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i5rZP-0004If-Bi
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:13:03 +0000
X-Inumbo-ID: e0d9c784-cfde-11e9-978d-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id e0d9c784-cfde-11e9-978d-bc764e2007e4;
 Thu, 05 Sep 2019 13:12:57 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 2542440C04;
 Thu,  5 Sep 2019 15:12:57 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu,  5 Sep 2019 15:12:49 +0200
Message-Id: <20190905131249.22865-4-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190905131249.22865-1-santiago.pagani@neclab.eu>
References: <20190905131249.22865-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogZXhwb3J0c3ltcy51ayB8IDE1ICsrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDE0
IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVr
IGIvZXhwb3J0c3ltcy51awppbmRleCA2MjFlOTRmLi45OTViMjU2IDEwMDY0NAotLS0gYS9leHBv
cnRzeW1zLnVrCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTEgKzEsMTQgQEAKLW5vbmUKK2h0dHBf
Ym9keV9pc19maW5hbAoraHR0cF9lcnJub19kZXNjcmlwdGlvbgoraHR0cF9lcnJub19uYW1lCito
dHRwX21lc3NhZ2VfbmVlZHNfZW9mCitodHRwX21ldGhvZF9zdHIKK2h0dHBfcGFyc2VyX2V4ZWN1
dGUKK2h0dHBfcGFyc2VyX2luaXQKK2h0dHBfcGFyc2VyX3BhcnNlX3VybAoraHR0cF9wYXJzZXJf
cGF1c2UKK2h0dHBfcGFyc2VyX3NldHRpbmdzX2luaXQKK2h0dHBfcGFyc2VyX3VybF9pbml0Cito
dHRwX3BhcnNlcl92ZXJzaW9uCitodHRwX3Nob3VsZF9rZWVwX2FsaXZlCitodHRwX3N0cmVycm9y
X3RhYgotLSAKMi4yMi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:15:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:15:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rbt-0004M9-96; Thu, 05 Sep 2019 13:15:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=2auV=XA=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i5rbr-0004M4-MU
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:15:35 +0000
X-Inumbo-ID: 3df517de-cfdf-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3df517de-cfdf-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 13:15:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 54B07105663;
 Thu,  5 Sep 2019 15:15:33 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id x1TgbjjZCk6J; Thu,  5 Sep 2019 15:15:33 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 311BA104BB4;
 Thu,  5 Sep 2019 15:15:33 +0200 (CEST)
Received: from [10.1.2.192] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 5 Sep 2019
 15:15:32 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
 <20190902132221.1917-2-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <4086e563-3210-6f63-4b2f-52dd063f4c39@neclab.eu>
Date: Thu, 5 Sep 2019 15:15:32 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190902132221.1917-2-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/3] lib/vfscore: Use a scalable
 bitmap for open file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKUGxlYXNlIGZpbmQgdGhlIGNvbW1lbnQgaW5saW5lLgoKVGhhbmtzICYg
UmVnYXJkcwoKU2hhcmFuCgpPbiA5LzIvMTkgMzoyMiBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4g
VW50aWwgbm93LCB0aGUgbnVtYmVyIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyB3YXMgbGltaXRl
ZCB0byA2NCwgd2hpY2ggd2FzIHRoZQo+IG51bWJlciBvZiBiaXRzIG9mIHRoZSB1bmRlcmx5aW5n
IGJpdG1hcC4gV2UgZml4IHRoYXQgYnkgcmVwbGFjaW5nIHdpdGggYQo+IGNvbmZpZ3VyYWJsZSBi
aXRtYXAuIFdlIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBtYXhpbXVtIG9wZW4gZmlsZXMgdG8g
MTAyNC4KPgo+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIu
cm8+Cj4gLS0tCj4gICBsaWIvdmZzY29yZS9Db25maWcudWsgfCAgOCArKysrKysrLQo+ICAgbGli
L3Zmc2NvcmUvZmQuYyAgICAgIHwgMTYgKysrKysrKystLS0tLS0tLQo+ICAgMiBmaWxlcyBjaGFu
Z2VkLCAxNSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2xp
Yi92ZnNjb3JlL0NvbmZpZy51ayBiL2xpYi92ZnNjb3JlL0NvbmZpZy51awo+IGluZGV4IDZjZjZj
NjNhLi4wNzMxOTA5OSAxMDA2NDQKPiAtLS0gYS9saWIvdmZzY29yZS9Db25maWcudWsKPiArKysg
Yi9saWIvdmZzY29yZS9Db25maWcudWsKPiBAQCAtMSw2ICsxLDEyIEBACj4gLWNvbmZpZyBMSUJW
RlNDT1JFCj4gK21lbnVjb25maWcgTElCVkZTQ09SRQo+ICAgCWJvb2wgInZmc2NvcmU6IFZGUyBD
b3JlIEludGVyZmFjZSIKPiAgIAlkZWZhdWx0IG4KPiAgIAlzZWxlY3QgTElCTk9MSUJDIGlmICFI
QVZFX0xJQkMKPiAgIAlzZWxlY3QgTElCVUtERUJVRwo+ICAgCXNlbGVjdCBMSUJVS0xPQ0sKPiAr
Cj4gK2lmIExJQlZGU0NPUkUKPiArY29uZmlnIExJQlZGU0NPUkVfTUFYX0ZJTEVTCj4gKwlpbnQg
Ik1heGltdW0gbnVtYmVyIG9mIG9wZW4gZmlsZXMiCj4gKwlkZWZhdWx0IDEwMjQKPiArZW5kaWYK
RG8gd2Ugd2FudCB0byBkZWZpbmUgbWF4IGZpbGUgZGVzY3JpcHRvciBhcyBjb25maWd1cmF0aW9u
IGluIENvbmZpZy51az8gCiBGcm9tIGEgdXNlciBwZXJzcGVjdGl2ZSBpdCBtaWdodCBub3QgYWx3
YXlzIGJlIHBvc3NpYmxlIHRvIGRldGVybWluZSAKdGhpcyB2YWx1ZSBiZWZvcmUgaGFuZC4gV2Ug
bWlnaHQgYWRkIHN1cHBvcnQgZm9yIHVsaW1pdCBpbnN0ZWFkIG9mIGtlZXAgCmlzIGNvbXBpbGUg
dGltZSBjb25maWd1cmF0aW9uLiBJIHdvdWxkIHJhdGhlciB3ZSBwaWNrIGEgZGVmYXVsdCB2YWx1
ZSAKZm9yIG5vdyBhbmQgaWYgYSBuZWVkIGFyaXNlIHdlIG1ha2UgaXQgY29uZmlndXJhYmxlIHRo
ZW4uCj4gZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2ZkLmMgYi9saWIvdmZzY29yZS9mZC5jCj4g
aW5kZXggMDEwMjVhNDYuLmUwOWRkNTRjIDEwMDY0NAo+IC0tLSBhL2xpYi92ZnNjb3JlL2ZkLmMK
PiArKysgYi9saWIvdmZzY29yZS9mZC5jCj4gQEAgLTM1LDE5ICszNSwxOSBAQAo+ICAgCj4gICAj
aW5jbHVkZSA8c3RyaW5nLmg+Cj4gICAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgo+IC0jaW5j
bHVkZSA8dWsvYml0b3BzLmg+Cj4gKyNpbmNsdWRlIDx1ay9iaXRtYXAuaD4KPiAgICNpbmNsdWRl
IDx1ay9hc3NlcnQuaD4KPiAgICNpbmNsdWRlIDx2ZnNjb3JlL2ZpbGUuaD4KPiAgICNpbmNsdWRl
IDx1ay9wbGF0L2xjcHUuaD4KPiAgICNpbmNsdWRlIDxlcnJuby5oPgo+ICAgI2luY2x1ZGUgPHVr
L2N0b3JzLmg+Cj4gICAKPiAtI2RlZmluZSBGRFRBQkxFX01BWF9GSUxFUyAoc2l6ZW9mKHVpbnQ2
NF90KSAqIDgpCj4gKyNkZWZpbmUgRkRUQUJMRV9NQVhfRklMRVMgMTAyNApTaG91bGRuJ3QgaXQg
dGhpcyBiZSBDT05GSUdfTElCVkZTQ09SRV9NQVhfRklMRVM/Cj4gICAKPiAgIHZvaWQgaW5pdF9z
dGRpbyh2b2lkKTsKPiAgIAo+ICAgc3RydWN0IGZkdGFibGUgewo+IC0JdWludDY0X3QgYml0bWFw
Owo+ICsJdW5zaWduZWQgbG9uZyBiaXRtYXBbVUtfQklUU19UT19MT05HUyhGRFRBQkxFX01BWF9G
SUxFUyldOwo+ICAgCXVpbnQzMl90IGZkX3N0YXJ0Owo+ICAgCXN0cnVjdCB2ZnNjb3JlX2ZpbGUg
KmZpbGVzW0ZEVEFCTEVfTUFYX0ZJTEVTXTsKPiAgIH07Cj4gQEAgLTU5LDE0ICs1OSwxNCBAQCBp
bnQgdmZzY29yZV9hbGxvY19mZCh2b2lkKQo+ICAgCWludCByZXQ7Cj4gICAKPiAgIAlmbGFncyA9
IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwo+IC0JcmV0ID0gdWthcmNoX2Zmc2wofmZkdGFibGUu
Yml0bWFwKTsKPiArCXJldCA9IHVrX2ZpbmRfbmV4dF96ZXJvX2JpdChmZHRhYmxlLmJpdG1hcCwg
RkRUQUJMRV9NQVhfRklMRVMsIDApOwo+ICAgCj4gICAJaWYgKCFyZXQpIHsKPiAgIAkJcmV0ID0g
LUVORklMRTsKPiAgIAkJZ290byBleGl0Owo+ICAgCX0KPiAgIAo+IC0JZmR0YWJsZS5iaXRtYXAg
fD0gKHVpbnQ2NF90KSAxIDw8IHJldDsKPiArCXVrX2JpdG1hcF9zZXQoZmR0YWJsZS5iaXRtYXAs
IHJldCwgMSk7Cj4gICAKPiAgIGV4aXQ6Cj4gICAJdWtwbGF0X2xjcHVfcmVzdG9yZV9pcnFmKGZs
YWdzKTsKPiBAQCAtODMsNyArODMsNyBAQCB2b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCkKPiAg
IAlVS19BU1NFUlQoZmQgPiAyKTsKPiAgIAo+ICAgCWZsYWdzID0gdWtwbGF0X2xjcHVfc2F2ZV9p
cnFmKCk7Cj4gLQlfX3VrX2NsZWFyX2JpdChmZCwgJmZkdGFibGUuYml0bWFwKTtcCj4gKwl1a19i
aXRtYXBfY2xlYXIoZmR0YWJsZS5iaXRtYXAsIGZkLCAxKTsKPiAgIAlmcCA9IGZkdGFibGUuZmls
ZXNbZmRdOwo+ICAgCWZkdGFibGUuZmlsZXNbZmRdID0gTlVMTDsKPiAgIAl1a3BsYXRfbGNwdV9y
ZXN0b3JlX2lycWYoZmxhZ3MpOwo+IEBAIC0xMjksNyArMTI5LDcgQEAgc3RydWN0IHZmc2NvcmVf
ZmlsZSAqdmZzY29yZV9nZXRfZmlsZShpbnQgZmQpCj4gICAJVUtfQVNTRVJUKGZkIDwgKGludCkg
RkRUQUJMRV9NQVhfRklMRVMpOwo+ICAgCj4gICAJZmxhZ3MgPSB1a3BsYXRfbGNwdV9zYXZlX2ly
cWYoKTsKPiAtCWlmICghKGZkdGFibGUuYml0bWFwICYgKCh1aW50NjRfdCkgMSA8PCBmZCkpKQo+
ICsJaWYgKCF1a190ZXN0X2JpdChmZCwgZmR0YWJsZS5iaXRtYXApKQo+ICAgCQlnb3RvIGV4aXQ7
Cj4gICAJcmV0ID0gZmR0YWJsZS5maWxlc1tmZF07Cj4gICAJZmhvbGQocmV0KTsKPiBAQCAtMTg2
LDcgKzE4Niw3IEBAIHN0YXRpYyB2b2lkIGZkdGFibGVfaW5pdCh2b2lkKQo+ICAgCW1lbXNldCgm
ZmR0YWJsZSwgMCwgc2l6ZW9mKGZkdGFibGUpKTsKPiAgIAo+ICAgCS8qIHJlc2VydmUgc3RkaW4s
IHN0ZG91dCBhbmQgc3RkZXJyICovCj4gLQlmZHRhYmxlLmJpdG1hcCA9IDc7Cj4gKwl1a19iaXRt
YXBfc2V0KGZkdGFibGUuYml0bWFwLCAwLCAzKTsKPiAgIAlpbml0X3N0ZGlvKCk7Cj4gICB9Cj4g
ICAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:18:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:18:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rel-0004QD-JQ; Thu, 05 Sep 2019 13:18:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=2auV=XA=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i5rej-0004Q8-Oz
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:18:33 +0000
X-Inumbo-ID: a7d78913-cfdf-11e9-abcd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a7d78913-cfdf-11e9-abcd-12813bfff9fa;
 Thu, 05 Sep 2019 13:18:32 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 9452CF200A;
 Thu,  5 Sep 2019 15:18:31 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 5C7yXSnL_oa6; Thu,  5 Sep 2019 15:18:31 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 6313BF2002;
 Thu,  5 Sep 2019 15:18:27 +0200 (CEST)
Received: from [10.1.2.192] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 5 Sep 2019
 15:18:27 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
 <20190902132221.1917-3-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <e8ef8433-4621-ae29-7649-6685677b9fd2@neclab.eu>
Date: Thu, 5 Sep 2019 15:18:26 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190902132221.1917-3-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/3] lib/vfscore: Return error
 when trying to close standard file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8sCgpQbGVhc2UgZmluZCB0aGUgY29tbWVudHMgaW5saW5lLgoKVGhhbmtzICYgUmVnYXJk
cwoKU2hhcmFuCgpPbiA5LzIvMTkgMzoyMiBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4gU29tZSBh
cHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8gY2xvc2UgdGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRv
cnMgKHN0ZGluLAo+IHN0ZG91dCwgc3RkZXJyKSwgdGhhdCBpcyBwZXJmZWN0bHkgbm9ybWFsLiBU
aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBzaG91bGQgcmV0dXJuCj4gYW4gZXJyb3IgaWYgc3VjaCBy
ZXF1ZXN0IGlzIG5vdCBhbGxvd2VkLCBpbnN0ZWFkIG9mIGNyYXNoaW5nLgo+Cj4gU2lnbmVkLW9m
Zi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPiAtLS0KPiAgIGxpYi92
ZnNjb3JlL2ZkLmMgICAgICAgICAgICAgICAgICAgfCA3ICsrKysrLS0KPiAgIGxpYi92ZnNjb3Jl
L2luY2x1ZGUvdmZzY29yZS9maWxlLmggfCAyICstCj4gICBsaWIvdmZzY29yZS9tYWluLmMgICAg
ICAgICAgICAgICAgIHwgOCArKysrKy0tLQo+ICAgMyBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRp
b25zKCspLCA2IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2ZkLmMg
Yi9saWIvdmZzY29yZS9mZC5jCj4gaW5kZXggZTA5ZGQ1NGMuLmYxYTI2OGM0IDEwMDY0NAo+IC0t
LSBhL2xpYi92ZnNjb3JlL2ZkLmMKPiArKysgYi9saWIvdmZzY29yZS9mZC5jCj4gQEAgLTczLDE0
ICs3MywxNSBAQCBleGl0Ogo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAtdm9pZCB2ZnNj
b3JlX3B1dF9mZChpbnQgZmQpCj4gK2ludCB2ZnNjb3JlX3B1dF9mZChpbnQgZmQpCj4gICB7Cj4g
ICAJc3RydWN0IHZmc2NvcmVfZmlsZSAqZnA7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAg
IAo+ICAgCVVLX0FTU0VSVChmZCA8IChpbnQpIEZEVEFCTEVfTUFYX0ZJTEVTKTsKPiAgIAkvKiBD
dXJyZW50bHkgaXQgaXMgbm90IGFsbG93ZWQgdG8gZnJlZSBzdGQoaW58b3V0fGVycikgKi8KPiAt
CVVLX0FTU0VSVChmZCA+IDIpOwo+ICsJaWYgKGZkIDw9IDIpCj4gKwkJcmV0dXJuIC1FSU5WQUw7
Ck1heWJlIHdlIGNvdWxkIHJldHVybiAtRUJVU1k/Cj4gICAKPiAgIAlmbGFncyA9IHVrcGxhdF9s
Y3B1X3NhdmVfaXJxZigpOwo+ICAgCXVrX2JpdG1hcF9jbGVhcihmZHRhYmxlLmJpdG1hcCwgZmQs
IDEpOwo+IEBAIC05NCw2ICs5NSw4IEBAIHZvaWQgdmZzY29yZV9wdXRfZmQoaW50IGZkKQo+ICAg
CSAqLwo+ICAgCWlmIChmcCkKPiAgIAkJZmRyb3AoZnApOwo+ICsKPiArCXJldHVybiAwOwo+ICAg
fQo+ICAgCj4gICBpbnQgdmZzY29yZV9pbnN0YWxsX2ZkKGludCBmZCwgc3RydWN0IHZmc2NvcmVf
ZmlsZSAqZmlsZSkKPiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2Zp
bGUuaCBiL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgKPiBpbmRleCA1MWYwNzkx
YS4uMDU0MzRkZmUgMTAwNjQ0Cj4gLS0tIGEvbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2Zp
bGUuaAo+ICsrKyBiL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgKPiBAQCAtNjIs
NyArNjIsNyBAQCBzdHJ1Y3QgdmZzY29yZV9maWxlIHsKPiAgIH07Cj4gICAKPiAgIGludCB2ZnNj
b3JlX2FsbG9jX2ZkKHZvaWQpOwo+IC12b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCk7Cj4gK2lu
dCB2ZnNjb3JlX3B1dF9mZChpbnQgZmQpOwo+ICAgaW50IHZmc2NvcmVfaW5zdGFsbF9mZChpbnQg
ZmQsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwo+ICAgc3RydWN0IHZmc2NvcmVfZmlsZSAq
dmZzY29yZV9nZXRfZmlsZShpbnQgZmQpOwo+ICAgdm9pZCB2ZnNjb3JlX3B1dF9maWxlKHN0cnVj
dCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwo+IGRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9tYWluLmMg
Yi9saWIvdmZzY29yZS9tYWluLmMKPiBpbmRleCBiZTA1NWI3OC4uNDQ5ODgxMWQgMTAwNjQ0Cj4g
LS0tIGEvbGliL3Zmc2NvcmUvbWFpbi5jCj4gKysrIGIvbGliL3Zmc2NvcmUvbWFpbi5jCj4gQEAg
LTIwNSwxNSArMjA1LDE3IEBAIFVLX1RSQUNFUE9JTlQodHJhY2VfdmZzX2Nsb3NlX2VyciwgIiVk
IiwgaW50KTsKPiAgIGludCBmZGNsb3NlKGludCBmZCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdmZzY29y
ZV9maWxlICpmcDsKPiArCWludCBlcnJvcjsKPiAgIAo+ICAgCWZwID0gdmZzY29yZV9nZXRfZmls
ZShmZCk7Cj4gICAJaWYgKCFmcCkKPiAgIAkJcmV0dXJuIEVCQURGOwo+ICAgCj4gLQl2ZnNjb3Jl
X3B1dF9mZChmZCk7Cj4gLQlmZHJvcChmcCk7Cj4gKwllcnJvciA9IHZmc2NvcmVfcHV0X2ZkKGZk
KTsKPiArCWlmICghZXJyb3IpCj4gKwkJZmRyb3AoZnApOwo+ICAgCj4gLQlyZXR1cm4gMDsKPiAr
CXJldHVybiBlcnJvcjsKPiAgIH0KPiAgIAo+ICAgaW50IGNsb3NlKGludCBmZCkKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 05 13:20:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 05 Sep 2019 13:20:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i5rgd-00052T-Px; Thu, 05 Sep 2019 13:20:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=2auV=XA=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i5rgc-00052O-2n
 for minios-devel@lists.xen.org; Thu, 05 Sep 2019 13:20:30 +0000
X-Inumbo-ID: ed03386e-cfdf-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ed03386e-cfdf-11e9-b299-bc764e2007e4;
 Thu, 05 Sep 2019 13:20:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 03D61105664;
 Thu,  5 Sep 2019 15:20:27 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 9Gji9sh0XRIf; Thu,  5 Sep 2019 15:20:26 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id C7818105663;
 Thu,  5 Sep 2019 15:20:26 +0200 (CEST)
Received: from [10.1.2.192] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 5 Sep 2019
 15:20:26 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
 <20190902132221.1917-4-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <097679c3-ddcf-1222-172c-57d72e13dc1e@neclab.eu>
Date: Thu, 5 Sep 2019 15:20:26 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190902132221.1917-4-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 3/3] lib/uklock: Make mutex
 recursive
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKUGxlYXNlIGZpbmQgdGhlIGNvbW1lbnRzIGlubGluZS4KClRoYW5rcyAm
IFJlZ2FyZHMKClNoYXJhbgoKT24gOS8yLzE5IDM6MjIgUE0sIENvc3RpbiBMdXB1IHdyb3RlOgo+
IFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgZXhpc3RpbmcgbXV0ZXggaW1wbGVtZW50YXRpb24gdG8g
c3VwcG9ydCBtdWx0aXBsZSBsb2NraW5nCj4gYnkgdGhlIHNhbWUgdGhyZWFkLgo+Cj4gU2lnbmVk
LW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPiAtLS0KPiAgIGxp
Yi91a2xvY2svaW5jbHVkZS91ay9tdXRleC5oIHwgMjkgKysrKysrKysrKysrKysrKysrKysrKyst
LS0tLS0KPiAgIGxpYi91a2xvY2svbXV0ZXguYyAgICAgICAgICAgIHwgIDIgKysKPiAgIDIgZmls
ZXMgY2hhbmdlZCwgMjUgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1n
aXQgYS9saWIvdWtsb2NrL2luY2x1ZGUvdWsvbXV0ZXguaCBiL2xpYi91a2xvY2svaW5jbHVkZS91
ay9tdXRleC5oCj4gaW5kZXggZmY4NTJiNDUuLmY5YTQxYTkzIDEwMDY0NAo+IC0tLSBhL2xpYi91
a2xvY2svaW5jbHVkZS91ay9tdXRleC5oCj4gKysrIGIvbGliL3VrbG9jay9pbmNsdWRlL3VrL211
dGV4LmgKPiBAQCAtNTUsNDEgKzU1LDU1IEBAIGV4dGVybiAiQyIgewo+ICAgICovCj4gICBzdHJ1
Y3QgdWtfbXV0ZXggewo+ICAgCWludCBsb2NrZWQ7Cj4gKwlpbnQgZGVwdGg7CgpDYW4ndCB3ZSBj
b21iaW5lIGRlcHRoIHdpdGggbG9ja2VkPwoKPiArCXN0cnVjdCB1a190aHJlYWQgKm93bmVyOwo+
ICAgCXN0cnVjdCB1a193YWl0cSB3YWl0Owo+ICAgfTsKPiAgIAo+ICAgI2RlZmluZQlVS19NVVRF
WF9JTklUSUFMSVpFUihuYW1lKQkJCQlcCj4gLQl7IDAsIF9fV0FJVF9RVUVVRV9JTklUSUFMSVpF
UigobmFtZSkud2FpdCkgfQo+ICsJeyAwLCAwLCBOVUxMLCBfX1dBSVRfUVVFVUVfSU5JVElBTEla
RVIoKG5hbWUpLndhaXQpIH0KPiAgIAo+ICAgdm9pZCB1a19tdXRleF9pbml0KHN0cnVjdCB1a19t
dXRleCAqbSk7Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUgdm9pZCB1a19tdXRleF9sb2NrKHN0cnVj
dCB1a19tdXRleCAqbSkKPiAgIHsKPiArCXN0cnVjdCB1a190aHJlYWQgKmN1cnJlbnQ7Cj4gICAJ
dW5zaWduZWQgbG9uZyBpcnFmOwo+ICAgCj4gICAJVUtfQVNTRVJUKG0pOwo+ICAgCj4gKwljdXJy
ZW50ID0gdWtfdGhyZWFkX2N1cnJlbnQoKTsKPiArCj4gICAJZm9yICg7Oykgewo+IC0JCXVrX3dh
aXRxX3dhaXRfZXZlbnQoJm0tPndhaXQsIG0tPmxvY2tlZCA9PSAwKTsKPiArCQl1a193YWl0cV93
YWl0X2V2ZW50KCZtLT53YWl0LAo+ICsJCQltLT5sb2NrZWQgPT0gMCB8fCBtLT5vd25lciA9PSBj
dXJyZW50KTsKPiAgIAkJaXJxZiA9IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwo+IC0JCWlmICgh
bS0+bG9ja2VkKQo+ICsJCWlmIChtLT5sb2NrZWQgPT0gMCB8fCBtLT5vd25lciA9PSBjdXJyZW50
KQo+ICAgCQkJYnJlYWs7Cj4gICAJCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsKPiAg
IAl9Cj4gICAJbS0+bG9ja2VkID0gMTsKPiArCW0tPmRlcHRoKys7Cj4gKwltLT5vd25lciA9IGN1
cnJlbnQ7Cj4gICAJdWtwbGF0X2xjcHVfcmVzdG9yZV9pcnFmKGlycWYpOwo+ICAgfQo+ICAgCj4g
ICBzdGF0aWMgaW5saW5lIGludCB1a19tdXRleF90cnlsb2NrKHN0cnVjdCB1a19tdXRleCAqbSkK
PiAgIHsKPiArCXN0cnVjdCB1a190aHJlYWQgKmN1cnJlbnQ7Cj4gICAJdW5zaWduZWQgbG9uZyBp
cnFmOwo+ICAgCWludCByZXQgPSAwOwo+ICAgCj4gICAJVUtfQVNTRVJUKG0pOwo+ICAgCj4gKwlj
dXJyZW50ID0gdWtfdGhyZWFkX2N1cnJlbnQoKTsKPiArCj4gICAJaXJxZiA9IHVrcGxhdF9sY3B1
X3NhdmVfaXJxZigpOwo+IC0JaWYgKCFtLT5sb2NrZWQpCj4gKwlpZiAobS0+bG9ja2VkID09IDAg
fHwgbS0+b3duZXIgPT0gY3VycmVudCkgewo+ICAgCQlyZXQgPSBtLT5sb2NrZWQgPSAxOwo+ICsJ
CW0tPmRlcHRoKys7Cj4gKwkJbS0+b3duZXIgPSBjdXJyZW50Owo+ICsJfQo+ICAgCXVrcGxhdF9s
Y3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+IEBAIC0xMDcs
OCArMTIxLDExIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB1a19tdXRleF91bmxvY2soc3RydWN0IHVr
X211dGV4ICptKQo+ICAgCj4gICAJaXJxZiA9IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwo+ICAg
CVVLX0FTU0VSVChtLT5sb2NrZWQpOwo+IC0JbS0+bG9ja2VkID0gMDsKPiAtCXVrX3dhaXRxX3dh
a2VfdXAoJm0tPndhaXQpOwo+ICsJaWYgKC0tbS0+ZGVwdGggPT0gMCkgewo+ICsJCW0tPmxvY2tl
ZCA9IDA7Cj4gKwkJbS0+b3duZXIgPSBOVUxMOwo+ICsJCXVrX3dhaXRxX3dha2VfdXAoJm0tPndh
aXQpOwo+ICsJfQo+ICAgCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsKPiAgIH0KPiAg
IAo+IGRpZmYgLS1naXQgYS9saWIvdWtsb2NrL211dGV4LmMgYi9saWIvdWtsb2NrL211dGV4LmMK
PiBpbmRleCAxODNhMDFkYi4uMDdmYWYxZTcgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrbG9jay9tdXRl
eC5jCj4gKysrIGIvbGliL3VrbG9jay9tdXRleC5jCj4gQEAgLTMsNSArMyw3IEBACj4gICB2b2lk
IHVrX211dGV4X2luaXQoc3RydWN0IHVrX211dGV4ICptKQo+ICAgewo+ICAgCW0tPmxvY2tlZCA9
IDA7Cj4gKwltLT5kZXB0aCA9IDA7Cj4gKwltLT5vd25lciA9IE5VTEw7Cj4gICAJdWtfd2FpdHFf
aW5pdCgmbS0+d2FpdCk7Cj4gICB9CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69yP-0002iH-Uf; Fri, 06 Sep 2019 08:52:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yO-0002hy-PE
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:04 +0000
X-Inumbo-ID: 97e34654-d083-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 97e34654-d083-11e9-b299-bc764e2007e4;
 Fri, 06 Sep 2019 08:52:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 7F093105663;
 Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id WWSIzf2zCA6v; Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id BC25A105664;
 Fri,  6 Sep 2019 10:52:00 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:51:51 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-3-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <495e8b22-f865-30c0-15f6-311d33ae8839@neclab.eu>
Date: Fri, 6 Sep 2019 10:51:50 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-3-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 2/8] lib/uk9p: Add 9P
 transport registration
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgY2hhbmdlcy4gSWYgeW91IGFyZSBva2F5IEkgd2lsbCBhZGQgYW4gYXNz
ZXJ0aW9uIG9uIHlvdXIgCmRlZmF1bHQgdHJhbnNwb3J0IHNldHRlciB3aGlsZSB1cHN0cmVhbWlu
Zy4uLiB5b3UgY2FuIHNlZSBpdCBpbmxpbmUuCgpSZXZpZXdlZC1ieTogU2ltb24gS3VlbnplciA8
c2ltb24ua3VlbnplckBuZWNsYWIuZXU+CgpPbiAwNS4wOS4xOSAxNDoxNCwgQ3Jpc3RpYW4gQmFu
dSB3cm90ZToKPiBUaGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIDlQIHRyYW5zcG9ydCByZWdpc3Ry
YXRpb24gYW5kIGxvb2t1cCBBUEkuCj4gCj4gVHJhbnNwb3J0cyBhcmUgY29tbXVuaWNhdGlvbiBj
aGFubmVscyBzdWNoIGFzIHZpcnRpbyBieSB1c2luZyB0aGUKPiB2aXJ0aW8tOXAgZGV2aWNlLCBv
ciB4ZW4gcmluZ3MuIFRob3NlIGFyZSB0aGUgZGVmYXVsdCB0cmFuc3BvcnRzCj4gZm9yIHRoZSBL
Vk0gYW5kIFhlbiBwbGF0Zm9ybXMgcmVzcGVjdGl2ZWx5LiBIb3dldmVyLCBpbiB0aGUgZnV0dXJl
Cj4gb25lIG1pZ2h0IGhhdmUgbXVsdGlwbGUgYXZhaWxhYmxlIHRyYW5zcG9ydHMgZm9yIHRoZSBz
YW1lIHBsYXRmb3JtCj4gYnkgc3VwcG9ydGluZyBUQ1Agb3IgUkRNQS4KPiAKPiBTaWduZWQtb2Zm
LWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICAgbGliL3VrOXAv
OXBkZXZfdHJhbnMuYyAgICAgICAgICAgIHwgIDgyICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwo+ICAgbGliL3VrOXAvTWFrZWZpbGUudWsgICAgICAgICAgICAgIHwgICAyICsKPiAgIGxp
Yi91azlwL2V4cG9ydHN5bXMudWsgICAgICAgICAgICB8ICAgNCArKwo+ICAgbGliL3VrOXAvaW5j
bHVkZS91ay85cGRldl90cmFucy5oIHwgMTAyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCj4gICA0IGZpbGVzIGNoYW5nZWQsIDE5MCBpbnNlcnRpb25zKCspCj4gICBjcmVh
dGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvOXBkZXZfdHJhbnMuYwo+ICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IGxpYi91azlwL2V4cG9ydHN5bXMudWsKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5
cC9pbmNsdWRlL3VrLzlwZGV2X3RyYW5zLmgKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvOXBk
ZXZfdHJhbnMuYyBiL2xpYi91azlwLzlwZGV2X3RyYW5zLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0
NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMDgxZGFjODVkZjMzCj4gLS0tIC9kZXYvbnVsbAo+ICsr
KyBiL2xpYi91azlwLzlwZGV2X3RyYW5zLmMKPiBAQCAtMCwwICsxLDgyIEBACj4gKy8qIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiArLyoKPiArICogQXV0aG9yczog
Q3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiArICoKPiArICogQ29weXJpZ2h0IChj
KSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUg
bWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+
ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Cj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
Lgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklF
RCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVk
ZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KPiArI2luY2x1ZGUgPHVrL2xp
c3QuaD4KPiArI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgo+ICsjaW5jbHVkZSA8dWsvOXBkZXZfdHJh
bnMuaD4KPiArCj4gK3N0YXRpYyBVS19MSVNUX0hFQUQodWtfOXBkZXZfdHJhbnNfbGlzdCk7Cj4g
Kwo+ICtzdGF0aWMgc3RydWN0IHVrXzlwZGV2X3RyYW5zICp1a185cGRldl90cmFuc19zYXZlZF9k
ZWZhdWx0Owo+ICsKPiAraW50IHVrXzlwZGV2X3RyYW5zX3JlZ2lzdGVyKHN0cnVjdCB1a185cGRl
dl90cmFucyAqdHJhbnMpCj4gK3sKPiArCVVLX0FTU0VSVCh0cmFucyk7Cj4gKwlVS19BU1NFUlQo
dHJhbnMtPm5hbWUpOwo+ICsJVUtfQVNTRVJUKHRyYW5zLT5hKTsKPiArCj4gKwl1a19saXN0X2Fk
ZF90YWlsKCZ0cmFucy0+X2xpc3QsICZ1a185cGRldl90cmFuc19saXN0KTsKPiArCj4gKwlpZiAo
IXVrXzlwZGV2X3RyYW5zX3NhdmVkX2RlZmF1bHQpCj4gKwkJdWtfOXBkZXZfdHJhbnNfc2F2ZWRf
ZGVmYXVsdCA9IHRyYW5zOwo+ICsKPiArCXVrX3ByX2luZm8oIlJlZ2lzdGVyZWQgdHJhbnNwb3J0
ICVzXG4iLCB0cmFucy0+bmFtZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0cnVj
dCB1a185cGRldl90cmFucyAqdWtfOXBkZXZfdHJhbnNfYnlfbmFtZShjb25zdCBjaGFyICpuYW1l
KQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnQ7Cj4gKwo+ICsJdWtfbGlzdF9mb3Jf
ZWFjaF9lbnRyeSh0LCAmdWtfOXBkZXZfdHJhbnNfbGlzdCwgX2xpc3QpIHsKPiArCQlpZiAoIXN0
cmNtcCh0LT5uYW1lLCBuYW1lKSkKPiArCQkJcmV0dXJuIHQ7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJu
IE5VTEw7Cj4gK30KPiArCj4gK3N0cnVjdCB1a185cGRldl90cmFucyAqdWtfOXBkZXZfdHJhbnNf
Z2V0X2RlZmF1bHQodm9pZCkKPiArewo+ICsJcmV0dXJuIHVrXzlwZGV2X3RyYW5zX3NhdmVkX2Rl
ZmF1bHQ7Cj4gK30KPiArCj4gK3ZvaWQgdWtfOXBkZXZfdHJhbnNfc2V0X2RlZmF1bHQoc3RydWN0
IHVrXzlwZGV2X3RyYW5zICp0cmFucykKPiArewoKSSB3b3VsZCBhZGQgYW4gYXNzZXJ0aW9uIGhl
cmUgdG8gY2hlY2sgdGhhdCB0cmFucyBpcyBuZXZlciBOVUxMOgoKCVVLX0FTU0VSVCh0cmFucyk7
Cgo+ICsJdWtfOXBkZXZfdHJhbnNfc2F2ZWRfZGVmYXVsdCA9IHRyYW5zOwo+ICt9Cj4gZGlmZiAt
LWdpdCBhL2xpYi91azlwL01ha2VmaWxlLnVrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsKPiBpbmRl
eCBmYTc1NDQ0MDU5OGMuLmIxMDcxYTBlN2QzYyAxMDA2NDQKPiAtLS0gYS9saWIvdWs5cC9NYWtl
ZmlsZS51awo+ICsrKyBiL2xpYi91azlwL01ha2VmaWxlLnVrCj4gQEAgLTIsMyArMiw1IEBAICQo
ZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWs5cCwkKENPTkZJR19MSUJVSzlQKSkpCj4gICAKPiAg
IENJTkNMVURFUy0kKENPTkZJR19MSUJVSzlQKQkJKz0gLUkkKExJQlVLOVBfQkFTRSkvaW5jbHVk
ZQo+ICAgQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUs5UCkJCSs9IC1JJChMSUJVSzlQX0JBU0Up
L2luY2x1ZGUKPiArCj4gK0xJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5UF9CQVNFKS85cGRldl90
cmFucy5jCj4gZGlmZiAtLWdpdCBhL2xpYi91azlwL2V4cG9ydHN5bXMudWsgYi9saWIvdWs5cC9l
eHBvcnRzeW1zLnVrCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAu
LjQ2ZjQwMDgyNWFmOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvdWs5cC9leHBvcnRzeW1z
LnVrCj4gQEAgLTAsMCArMSw0IEBACj4gK3VrXzlwZGV2X3RyYW5zX3JlZ2lzdGVyCj4gK3VrXzlw
ZGV2X3RyYW5zX2J5X25hbWUKPiArdWtfOXBkZXZfdHJhbnNfZ2V0X2RlZmF1bHQKPiArdWtfOXBk
ZXZfdHJhbnNfc2V0X2RlZmF1bHQKPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85
cGRldl90cmFucy5oIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl90cmFucy5oCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE2NDhkYmZiYTkyNwo+IC0tLSAv
ZGV2L251bGwKPiArKysgYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X3RyYW5zLmgKPiBAQCAt
MCwwICsxLDEwMiBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl
ICovCj4gKy8qCj4gKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+
Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBv
ZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+
ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1ldDoKPiArICoKPiArICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xk
ZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArICogICAgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiAr
ICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Cj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgo+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsgKiBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiArICogVEhJUyBIRUFERVIgTUFZIE5P
VCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArICovCj4gKwo+ICsjaWZu
ZGVmIF9fVUtfOVBERVZfVFJBTlNfXwo+ICsjZGVmaW5lIF9fVUtfOVBERVZfVFJBTlNfXwo+ICsK
PiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiArI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgo+ICsKPiAr
I2lmZGVmIF9fY3BsdXNwbHVzCj4gK2V4dGVybiAiQyIgewo+ICsjZW5kaWYKPiArCj4gKy8qKiBB
IHN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgdHJhbnNwb3J0LiAqLwo+ICtzdHJ1Y3QgdWtf
OXBkZXZfdHJhbnMgewo+ICsJLyoKPiArCSAqIFRyYW5zcG9ydCBuYW1lIChlLmcuICJ2aXJ0aW8i
LCAieGVuIikuIFRoaXMgZmllbGQgaXMgcmVzZXJ2ZWQgZm9yCj4gKwkgKiBmdXR1cmUgdXNlLCB3
aGVuIG11bHRpcGxlIHRyYW5zcG9ydCBvcHRpb25zIGFyZSBhdmFpbGFibGUgb24gdGhlCj4gKwkg
KiBzYW1lIHBsYXRmb3JtLCBzdWNoIGFzIFJETUEgb3IgVENQLCBpbiBhZGRpdGlvbiB0byB0aGUg
cGxhdGZvcm0KPiArCSAqIHNwZWNpZmljIHRyYW5zcG9ydC4KPiArCSAqLwo+ICsJY29uc3QgY2hh
ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lOwo+ICsJLyogQWxsb2NhdG9yIHVz
ZWQgZm9yIGRldmljZXMgd2hpY2ggdXNlIHRoaXMgdHJhbnNwb3J0IGxheWVyLiAqLwo+ICsJc3Ry
dWN0IHVrX2FsbG9jICAgICAgICAgICAgICAgICAgICAgICAgICphOwo+ICsJLyogQGludGVybmFs
IEVudHJ5IGluIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0cmFuc3BvcnRzLiAqLwo+ICsJc3RydWN0
IHVrX2xpc3RfaGVhZCAgICAgICAgICAgICAgICAgICAgIF9saXN0Owo+ICt9Owo+ICsKPiArLyoq
Cj4gKyAqIEFkZHMgYSB0cmFuc3BvcnQgdG8gdGhlIGF2YWlsYWJsZSB0cmFuc3BvcnRzIGxpc3Qg
Zm9yIFVuaWtyYWZ0IDlQIERldmljZXMuCj4gKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmNl
IHBlciBkcml2ZXIgKG9uY2UgZm9yIHZpcnRpbywgb25jZSBmb3IgeGVuLCBldGMuKS4KPiArICoK
PiArICogQHBhcmFtIHRyYW5zCj4gKyAqICAgUG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IHN0cnVj
dHVyZS4KPiArICogQHJldHVybgo+ICsgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgo+ICsgKiAgIC0g
KDwgMCk6IEZhaWxlZCB0byByZWdpc3RlciB0aGUgdHJhbnNwb3J0IGxheWVyLgo+ICsgKi8KPiAr
aW50IHVrXzlwZGV2X3RyYW5zX3JlZ2lzdGVyKHN0cnVjdCB1a185cGRldl90cmFucyAqdHJhbnMp
Owo+ICsKPiArLyoqCj4gKyAqIExvb2tzIHVwIGEgdHJhbnNwb3J0IGxheWVyIGJ5IGl0cyBuYW1l
Lgo+ICsgKgo+ICsgKiBAcGFyYW0gbmFtZQo+ICsgKiAgIFRoZSB0cmFuc3BvcnQgbGF5ZXIgbmFt
ZS4KPiArICogQHJldHVybgo+ICsgKiAgIFRoZSA5UCB0cmFuc3BvcnQgd2l0aCB0aGUgZ2l2ZW4g
bmFtZSwgb3IgTlVMTCBpZiBtaXNzaW5nLgo+ICsgKi8KPiArc3RydWN0IHVrXzlwZGV2X3RyYW5z
ICp1a185cGRldl90cmFuc19ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwo+ICsKPiArLyoqCj4g
KyAqIEdldHMgdGhlIGRlZmF1bHQgdHJhbnNwb3J0IGxheWVyLgo+ICsgKgo+ICsgKiBAcmV0dXJu
Cj4gKyAqICAgVGhlIGRlZmF1bHQgOVAgdHJhbnNwb3J0LCBvciBOVUxMIGlmIG1pc3NpbmcuCj4g
KyAqLwo+ICtzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnVrXzlwZGV2X3RyYW5zX2dldF9kZWZhdWx0
KHZvaWQpOwo+ICsKPiArLyoqCj4gKyAqIFNldHMgdGhlIGRlZmF1bHQgdHJhbnNwb3J0IGxheWVy
Lgo+ICsgKgo+ICsgKiBAcGFyYW0gdHJhbnMKPiArICogICBUaGUgZGVmYXVsdCA5UCB0cmFuc3Bv
cnQuCj4gKyAqLwo+ICt2b2lkIHVrXzlwZGV2X3RyYW5zX3NldF9kZWZhdWx0KHN0cnVjdCB1a185
cGRldl90cmFucyAqdHJhbnMpOwo+ICsKPiArI2lmZGVmIF9fY3BsdXNwbHVzCj4gK30KPiArI2Vu
ZGlmCj4gKwo+ICsjZW5kaWYgLyogX19VS185UERFVl9UUkFOU19fICovCj4gCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69yQ-0002iM-0P; Fri, 06 Sep 2019 08:52:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yO-0002i0-Qw
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:04 +0000
X-Inumbo-ID: 97b42298-d083-11e9-abed-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 97b42298-d083-11e9-abed-12813bfff9fa;
 Fri, 06 Sep 2019 08:52:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 050F3105669;
 Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ZUxYl2KnKkOM; Fri,  6 Sep 2019 10:52:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id A9621105662;
 Fri,  6 Sep 2019 10:52:00 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:51:34 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <ab00e347-b559-6292-1333-90fbc80333f7@neclab.eu>
Date: Fri, 6 Sep 2019 10:51:33 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-1-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 0/8] Unikraft 9P API
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

R3JlYXQhIFRoYW5rcyBhIGxvdCBmb3IgdGhlIGNoYW5nZXMuIEkgd2lsbCB1cHN0cmVhbSB5b3Vy
IEFQSS4KUGxlYXNlIGxldCBtZSBrbm93IGlmIHlvdSBhcmUgb2theSB3aXRoIG15IHN1Z2dlc3Rp
b24gaW4gcGF0Y2ggMi84LgoKVGhhbmtzLAoKU2ltb24KCk9uIDA1LjA5LjE5IDE0OjE0LCBDcmlz
dGlhbiBCYW51IHdyb3RlOgo+IFRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgdGhlIDlQIEFQ
SSwgd2hpY2ggYWN0cyBhcyBhIGdlbmVyaWMKPiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgOVAgdHJh
bnNwb3J0IGRyaXZlcnMgKHhlbiwgdmlydGlvKSBhbmQKPiB0aGUgOXBmcyBpbXBsZW1lbnRhdGlv
bi4gVGhlIEFQSSBtYXkgYWxzbyBiZSB1c2VkIGRpcmVjdGx5IGJ5Cj4gdXNlcnMuCj4gCj4gVGhl
IHRyYW5zcG9ydCBkcml2ZXJzIHJlZ2lzdGVyIHRoZW1zZWx2ZXMgd2l0aCB0aGUgQVBJIHVzaW5n
IHRoZQo+IGRlZmluaXRpb25zIGZyb20gOXBkZXZfdHJhbnMuaCBhbmQgOXBkZXZfY29yZS5oLCBh
bmQgaW1wbGVtZW50Cj4gdGhlIGNvbm5lY3QsIGRpc2Nvbm5lY3QgYW5kIHJlcXVlc3QgY2FsbGJh
Y2tzLgo+IAo+IFRoZSBwcm90b2NvbCBjb3JlIHR5cGVzIGFuZCBjb25zdGFudHMgY2FuIGJlIGZv
dW5kIGluIDlwX2NvcmUuaCwKPiBhbmQgYSBoZWxwZXIgaW50ZXJmYWNlIHRvIHRoZSBvcGVyYXRp
b25zIHN1cHBvcnRlZCBieSB0aGUgOVAKPiBwcm90b2NvbCBjYW4gYmUgZm91bmQgaW4gOXAuaC4K
PiAKPiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIG9iamVjdHMgd2hpY2ggbXVzdCBiZSBtYW5hZ2Vk
IGNhcmVmdWxseQo+IGJ5IHRoZSBBUEk6IHRoZSByZXF1ZXN0IGFuZCB0aGUgZmlkIChoYW5kbGUg
dG8gYSBmaWxlc3lzdGVtCj4gZW50aXR5IHN1Y2ggYXMgYSBmaWxlIG9yIGRpcmVjdG9yeSwgc2lt
aWxhciB0byBhIGZpbGUKPiBkZXNjcmlwdG9yKS4gVGhlIG1hbmFnZW1lbnQgb2YgYm90aCBvZiB0
aG9zZSBpcyBhYnN0cmFjdGVkIGludG8KPiA5cHJlcS5oIGFuZCA5cGZpZC5oIHJlc3BlY3RpdmVs
eS4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYyOgo+IC0gUHJvdmlkZSBhIHNldHRlciBmdW5jdGlvbiBm
b3IgdGhlIGRlZmF1bHQgdHJhbnNwb3J0Lgo+IC0gVXNlIHVrX3ByX2RlYnVnKCkgd2hlbiByZXBv
cnRpbmcgZXJyb3JzLCBzdWNoIHRoYXQgdGhlIGNhbGwKPiAgICBnZXRzIGVsaW1pbmF0ZWQgaWYg
bm8gZGVidWdnaW5nIG9wdGlvbnMgYXJlIHNldC4KPiAtIFN0b3JlIHRoZSBtYXhpbXVtIHBvc3Np
YmxlIG1lc3NhZ2Ugc2l6ZSBmb3IgYSB0cmFuc3BvcnQgaW4gYSBzZXBhcmF0ZQo+ICAgIGZpZWxk
LCBwcm92aWRlIGdldHRlciBhbmQgc2V0dGVyIGZ1bmN0aW9ucyBmb3IgdGhlIG1lc3NhZ2Ugc2l6
ZS4KPiAtIFJlbmFtZSB1a185cGRldl94bWl0X3JlYWR5IHRvIHVrXzlwZGV2X3htaXRfbm90aWZ5
Lgo+IC0gUmVtb3ZlICdkb18nIGZyb20gdWtfOXBfZG9fKiBmYW1pbHkgb2YgZnVuY3Rpb25zLgo+
IC0gUmVjdGlmeSB3cm9uZyBvciBpbnN1ZmZpY2llbnQgZG9jdW1lbnRhdGlvbi4KPiBDaGFuZ2Vz
IHNpbmNlIHYxOgo+IC0gTWFrZSB1c2Ugb2Ygd2FpdC1xdWV1ZXMgaWYgYXZhaWxhYmxlLCBpbnN0
ZWFkIG9mIGJ1c3kgd2FpdGluZy4KPiAtIE1vZGlmeSB0cmFuc3BvcnQgbG9va3VwIHRvIHJldHVy
biB0aGUgdHJhbnNwb3J0IGluc3RlYWQgb2YKPiAgICBwYXNzaW5nIGl0IHRocm91Z2ggYW4gYXJn
dW1lbnQuCj4gLSBDaGFuZ2UgbGlicmFyeSBkZXNjcmlwdGlvbiBpbiBtZW51Y29uZmlnIHRvICI5
cCBjbGllbnQiLgo+IC0gVXBkYXRlIGJpdHdpc2UtT1InZWQgZmxhZ3MgdG8gYmUgbWFjcm9zIGlu
c3RlYWQgb2YgZmllbGRzIGluCj4gICAgZW51bXMgaW4gOXBfY29yZS5oLgo+IC0gQWRkIHN1cHBv
cnQgZm9yIHplcm8tY29weWluZy4KPiAKPiBDcmlzdGlhbiBCYW51ICg4KToKPiAgICBsaWIvdWs5
cDogQWRkIDlQIGxpYnJhcnkgc2tlbGV0b24KPiAgICBsaWIvdWs5cDogQWRkIDlQIHRyYW5zcG9y
dCByZWdpc3RyYXRpb24KPiAgICBsaWIvdWs5cDogQWRkIDlQIHByb3RvY29sIGNvcmUgZGVmaW5p
dGlvbnMKPiAgICBsaWIvdWs5cDogQWRkIDlQIHJlcXVlc3RzIGFic3RyYWN0aW9uCj4gICAgbGli
L3VrOXA6IEFkZCA5UCBkZXZpY2UgaW1wbGVtZW50YXRpb24KPiAgICBsaWIvdWs5cDogQWRkIDlQ
IGZpZCBhYnN0cmFjdGlvbgo+ICAgIGxpYi91azlwOiBBZGQgOVAgaGVscGVyIEFQSQo+ICAgIGxp
Yi91azlwOiBDbHVuayBmaWRzIG9uIGZpZCByZWxlYXNlCj4gCj4gICBsaWIvQ29uZmlnLnVrICAg
ICAgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICAgbGliL01ha2VmaWxlLnVrICAgICAgICAgICAg
ICAgICAgIHwgICAxICsKPiAgIGxpYi91azlwLzlwLmMgICAgICAgICAgICAgICAgICAgICB8IDQz
MCArKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBsaWIvdWs5cC85cGRldi5jICAgICAg
ICAgICAgICAgICAgfCA0NTUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBsaWIv
dWs5cC85cGRldl90cmFucy5jICAgICAgICAgICAgfCAgODYgKysrKysrCj4gICBsaWIvdWs5cC85
cGZpZC5jICAgICAgICAgICAgICAgICAgfCAgNzEgKysrKysKPiAgIGxpYi91azlwLzlwcmVxLmMg
ICAgICAgICAgICAgICAgICB8IDU2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwo+ICAgbGliL3VrOXAvQ29uZmlnLnVrICAgICAgICAgICAgICAgIHwgICA2ICsKPiAgIGxp
Yi91azlwL01ha2VmaWxlLnVrICAgICAgICAgICAgICB8ICAxMCArCj4gICBsaWIvdWs5cC9leHBv
cnRzeW1zLnVrICAgICAgICAgICAgfCAgNDggKysrKwo+ICAgbGliL3VrOXAvaW5jbHVkZS91ay85
cC5oICAgICAgICAgIHwgMjY1ICsrKysrKysrKysrKysrKysrKwo+ICAgbGliL3VrOXAvaW5jbHVk
ZS91ay85cF9jb3JlLmggICAgIHwgMjcxICsrKysrKysrKysrKysrKysrKwo+ICAgbGliL3VrOXAv
aW5jbHVkZS91ay85cGRldi5oICAgICAgIHwgMjI5ICsrKysrKysrKysrKysrKwo+ICAgbGliL3Vr
OXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmggIHwgMTkxICsrKysrKysrKysrKysKPiAgIGxpYi91
azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaCB8IDEwNSArKysrKysrCj4gICBsaWIvdWs5cC9p
bmNsdWRlL3VrLzlwZmlkLmggICAgICAgfCAxMTUgKysrKysrKysKPiAgIGxpYi91azlwL2luY2x1
ZGUvdWsvOXByZXEuaCAgICAgICB8IDMwMCArKysrKysrKysrKysrKysrKysrKwo+ICAgMTcgZmls
ZXMgY2hhbmdlZCwgMzE1MyBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3VrOXAvOXAuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwLzlwZGV2LmMKPiAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC85cGRldl90cmFucy5jCj4gICBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliL3VrOXAvOXBmaWQuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwLzlw
cmVxLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9Db25maWcudWsKPiAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9NYWtlZmlsZS51awo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IGxpYi91azlwL2V4cG9ydHN5bXMudWsKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9p
bmNsdWRlL3VrLzlwLmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9pbmNsdWRlL3Vr
LzlwX2NvcmUuaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsvOXBk
ZXYuaAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfY29y
ZS5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91ay85cGRldl90cmFu
cy5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91ay85cGZpZC5oCj4g
ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrOXAvaW5jbHVkZS91ay85cHJlcS5oCj4gCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69yV-0002jY-1r; Fri, 06 Sep 2019 08:52:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yT-0002jF-QZ
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:09 +0000
X-Inumbo-ID: 97bdf87c-d083-11e9-abed-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 97bdf87c-d083-11e9-abed-12813bfff9fa;
 Fri, 06 Sep 2019 08:52:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 167FD10566B;
 Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Ge42mTaQm6TX; Fri,  6 Sep 2019 10:52:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id B3252105663;
 Fri,  6 Sep 2019 10:52:00 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:51:41 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-2-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <5f486c44-686e-fc43-7793-4759346aaadd@neclab.eu>
Date: Fri, 6 Sep 2019 10:51:41 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-2-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 1/8] lib/uk9p: Add 9P library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoKT24g
MDUuMDkuMTkgMTQ6MTQsIENyaXN0aWFuIEJhbnUgd3JvdGU6Cj4gQWRkIGxpYnVrOXAgc2tlbGV0
b24gYW5kIHJlZ2lzdGVyIGl0IHdpdGhpbiB0aGUgYnVpbGQgc3lzdGVtLgo+IAo+IFNpZ25lZC1v
ZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gLS0tCj4gICBsaWIvQ29u
ZmlnLnVrICAgICAgICB8IDEgKwo+ICAgbGliL01ha2VmaWxlLnVrICAgICAgfCAxICsKPiAgIGxp
Yi91azlwL0NvbmZpZy51ayAgIHwgNiArKysrKysKPiAgIGxpYi91azlwL01ha2VmaWxlLnVrIHwg
NCArKysrCj4gICA0IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWIvdWs5cC9Db25maWcudWsKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
dWs5cC9NYWtlZmlsZS51awo+IAo+IGRpZmYgLS1naXQgYS9saWIvQ29uZmlnLnVrIGIvbGliL0Nv
bmZpZy51awo+IGluZGV4IDIwNGY1MjE2MDMwNy4uZjM1ODhhYWY4MDAyIDEwMDY0NAo+IC0tLSBh
L2xpYi9Db25maWcudWsKPiArKysgYi9saWIvQ29uZmlnLnVrCj4gQEAgLTQ5LDUgKzQ5LDYgQEAg
c291cmNlICJsaWIvdWtzd3JhbmQvQ29uZmlnLnVrIgo+ICAgc291cmNlICJsaWIvdWtidXMvQ29u
ZmlnLnVrIgo+ICAgc291cmNlICJsaWIvdWtzZ2xpc3QvQ29uZmlnLnVrIgo+ICAgc291cmNlICJs
aWIvdWtuZXRkZXYvQ29uZmlnLnVrIgo+ICtzb3VyY2UgImxpYi91azlwL0NvbmZpZy51ayIKPiAg
IHNvdXJjZSAibGliL3Bvc2l4LWxpYmRsL0NvbmZpZy51ayIKPiAgIHNvdXJjZSAibGliL3VrbGli
cGFyYW0vQ29uZmlnLnVrIgo+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUudWsgYi9saWIvTWFr
ZWZpbGUudWsKPiBpbmRleCBhYzFlMzhiYzdmYzIuLmU2MmU2MGFmYzk1YSAxMDA2NDQKPiAtLS0g
YS9saWIvTWFrZWZpbGUudWsKPiArKysgYi9saWIvTWFrZWZpbGUudWsKPiBAQCAtMjYsNSArMjYs
NiBAQCAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a21w
aSkpCj4gICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91
a2J1cykpCj4gICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xp
Yi91a3NnbGlzdCkpCj4gICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JB
U0UpL2xpYi91a25ldGRldikpCj4gKyQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdf
VUtfQkFTRSkvbGliL3VrOXApKQo+ICAgJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJ
R19VS19CQVNFKS9saWIvcG9zaXgtbGliZGwpKQo+ICAgJChldmFsICQoY2FsbCBfaW1wb3J0X2xp
YiwkKENPTkZJR19VS19CQVNFKS9saWIvdWtsaWJwYXJhbSkpCj4gZGlmZiAtLWdpdCBhL2xpYi91
azlwL0NvbmZpZy51ayBiL2xpYi91azlwL0NvbmZpZy51awo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0
Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lYTQxMTQ0ODMwNGMKPiAtLS0gL2Rldi9udWxsCj4gKysr
IGIvbGliL3VrOXAvQ29uZmlnLnVrCj4gQEAgLTAsMCArMSw2IEBACj4gK2NvbmZpZyBMSUJVSzlQ
Cj4gKwlib29sICJ1azlwOiA5cCBjbGllbnQiCj4gKwlkZWZhdWx0IG4KPiArCXNlbGVjdCBMSUJV
S0FMTE9DCj4gKwlzZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKPiArCXNlbGVjdCBMSUJV
S0RFQlVHCj4gZGlmZiAtLWdpdCBhL2xpYi91azlwL01ha2VmaWxlLnVrIGIvbGliL3VrOXAvTWFr
ZWZpbGUudWsKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZmE3
NTQ0NDA1OThjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91azlwL01ha2VmaWxlLnVrCj4g
QEAgLTAsMCArMSw0IEBACj4gKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWs5cCwkKENPTkZJ
R19MSUJVSzlQKSkpCj4gKwo+ICtDSU5DTFVERVMtJChDT05GSUdfTElCVUs5UCkJCSs9IC1JJChM
SUJVSzlQX0JBU0UpL2luY2x1ZGUKPiArQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUs5UCkJCSs9
IC1JJChMSUJVSzlQX0JBU0UpL2luY2x1ZGUKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69yV-0002je-3F; Fri, 06 Sep 2019 08:52:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yT-0002jE-Pj
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:09 +0000
X-Inumbo-ID: 97d2caea-d083-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 97d2caea-d083-11e9-b299-bc764e2007e4;
 Fri, 06 Sep 2019 08:52:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 7DCD6105662;
 Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id SiwuJ-s6-fEK; Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id C42D5105668;
 Fri,  6 Sep 2019 10:52:00 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:51:56 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-4-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <4be70f67-7dc5-080b-7591-75be28dd41df@neclab.eu>
Date: Fri, 6 Sep 2019 10:51:55 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-4-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 3/8] lib/uk9p: Add 9P
 protocol core definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoKT24g
MDUuMDkuMTkgMTQ6MTQsIENyaXN0aWFuIEJhbnUgd3JvdGU6Cj4gVGhpcyBwYXRjaCBhZGRzIHRo
ZSA5UCBwcm90b2NvbCBjb3JlIGRlZmluaXRpb25zIGZvciB0aGUgc3RydWN0dXJlcyBpdAo+IHVz
ZXMgYW5kIHRoZSB3aXJlIGZvcm1hdCByZXF1aXJlZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlz
dGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICAgbGliL3VrOXAvaW5jbHVkZS91
ay85cF9jb3JlLmggfCAyNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCj4gICAxIGZpbGUgY2hhbmdlZCwgMjcxIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwX2NvcmUuaAo+IAo+IGRpZmYgLS1naXQgYS9s
aWIvdWs5cC9pbmNsdWRlL3VrLzlwX2NvcmUuaCBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBfY29y
ZS5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjE5N2Y3YTk1
ZDE2OAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwX2NvcmUu
aAo+IEBAIC0wLDAgKzEsMjcxIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt
My1DbGF1c2UgKi8KPiArLyoKPiArICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdt
YWlsLmNvbT4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0
ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiAr
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJp
Z2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsg
KiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
Cj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhFQURF
UiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8KPiAr
Cj4gKyNpZm5kZWYgX19VS185UF9DT1JFX18KPiArI2RlZmluZSBfX1VLXzlQX0NPUkVfXwo+ICsK
PiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRl
IDxsaW1pdHMuaD4KPiArI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgo+ICsKPiArI2lmZGVmIF9fY3Bs
dXNwbHVzCj4gK2V4dGVybiAiQyIgewo+ICsjZW5kaWYKPiArCj4gKy8qKgo+ICsgKiBEb2N1bWVu
dGF0aW9uIG9mIHRoZSBwcm90b2NvbCBtYXkgYmUgZm91bmQgaGVyZToKPiArICogaHR0cHM6Ly85
ZmFucy5naXRodWIuaW8vcGxhbjlwb3J0Lwo+ICsgKi8KPiArCj4gKy8qKgo+ICsgKiA5UCByZXF1
ZXN0IHR5cGVzLgo+ICsgKgo+ICsgKiBTb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS85ZmFucy9w
bGFuOXBvcnQvYmxvYi9tYXN0ZXIvaW5jbHVkZS9mY2FsbC5oCj4gKyAqLwo+ICtlbnVtIHVrXzlw
X3R5cGUgewo+ICsJVUtfOVBfVFZFUlNJT04gICAgICAgICAgPSAxMDAsCj4gKwlVS185UF9SVkVS
U0lPTiwKPiArCVVLXzlQX1RBVVRIICAgICAgICAgICAgID0gMTAyLAo+ICsJVUtfOVBfUkFVVEgs
Cj4gKwlVS185UF9UQVRUQUNIICAgICAgICAgICA9IDEwNCwKPiArCVVLXzlQX1JBVFRBQ0gsCj4g
KwlVS185UF9URVJST1IgICAgICAgICAgICA9IDEwNiwKPiArCVVLXzlQX1JFUlJPUiwKPiArCVVL
XzlQX1RGTFVTSCAgICAgICAgICAgID0gMTA4LAo+ICsJVUtfOVBfUkZMVVNILAo+ICsJVUtfOVBf
VFdBTEsgICAgICAgICAgICAgPSAxMTAsCj4gKwlVS185UF9SV0FMSywKPiArCVVLXzlQX1RPUEVO
ICAgICAgICAgICAgID0gMTEyLAo+ICsJVUtfOVBfUk9QRU4sCj4gKwlVS185UF9UQ1JFQVRFICAg
ICAgICAgICA9IDExNCwKPiArCVVLXzlQX1JDUkVBVEUsCj4gKwlVS185UF9UUkVBRCAgICAgICAg
ICAgICA9IDExNiwKPiArCVVLXzlQX1JSRUFELAo+ICsJVUtfOVBfVFdSSVRFICAgICAgICAgICAg
PSAxMTgsCj4gKwlVS185UF9SV1JJVEUsCj4gKwlVS185UF9UQ0xVTksgICAgICAgICAgICA9IDEy
MCwKPiArCVVLXzlQX1JDTFVOSywKPiArCVVLXzlQX1RSRU1PVkUgICAgICAgICAgID0gMTIyLAo+
ICsJVUtfOVBfUlJFTU9WRSwKPiArCVVLXzlQX1RTVEFUICAgICAgICAgICAgID0gMTI0LAo+ICsJ
VUtfOVBfUlNUQVQsCj4gKwlVS185UF9UV1NUQVQgICAgICAgICAgICA9IDEyNiwKPiArCVVLXzlQ
X1JXU1RBVCwKPiArfTsKPiArCj4gKy8qKgo+ICsgKiA5UCB2YWx1ZXMgb2YgYSBxaWQudHlwZS4K
PiArICoKPiArICogU291cmNlczogaHR0cHM6Ly85ZmFucy5naXRodWIuaW8vcGxhbjlwb3J0L21h
bi9tYW45L2ludHJvLmh0bWwsCj4gKyAqIGh0dHA6Ly9lcmljdmguZ2l0aHViLmlvLzlwLXJmYy9y
ZmM5cDIwMDAudS5odG1sLgo+ICsgKi8KPiArI2RlZmluZSBVS185UF9RVERJUiAgICAgICAgICAg
ICAgIDB4ODAKPiArI2RlZmluZSBVS185UF9RVEFQUEVORCAgICAgICAgICAgIDB4NDAKPiArI2Rl
ZmluZSBVS185UF9RVEVYQ0wgICAgICAgICAgICAgIDB4MjAKPiArI2RlZmluZSBVS185UF9RVE1P
VU5UICAgICAgICAgICAgIDB4MTAKPiArI2RlZmluZSBVS185UF9RVEFVVEggICAgICAgICAgICAg
IDB4MDgKPiArI2RlZmluZSBVS185UF9RVFRNUCAgICAgICAgICAgICAgIDB4MDQKPiArI2RlZmlu
ZSBVS185UF9RVFNZTUxJTksgICAgICAgICAgIDB4MDIKPiArI2RlZmluZSBVS185UF9RVExJTksg
ICAgICAgICAgICAgIDB4MDEKPiArI2RlZmluZSBVS185UF9RVEZJTEUgICAgICAgICAgICAgIDB4
MDAKPiArCj4gKy8qKgo+ICsgKiA5UCBwZXJtaXNzaW9uIGJpdHMuCj4gKyAqCj4gKyAqIFNvdXJj
ZXM6IGh0dHBzOi8vOWZhbnMuZ2l0aHViLmlvL3BsYW45cG9ydC9tYW4vbWFuOS9pbnRyby5odG1s
LAo+ICsgKiBodHRwOi8vZXJpY3ZoLmdpdGh1Yi5pby85cC1yZmMvcmZjOXAyMDAwLnUuaHRtbC4K
PiArICovCj4gKyNkZWZpbmUgVUtfOVBfRE1ESVIgICAgICAgICAgICAgICAweDgwMDAwMDAwCj4g
KyNkZWZpbmUgVUtfOVBfRE1BUFBFTkQgICAgICAgICAgICAweDQwMDAwMDAwCj4gKyNkZWZpbmUg
VUtfOVBfRE1FWENMICAgICAgICAgICAgICAweDIwMDAwMDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1N
T1VOVCAgICAgICAgICAgICAweDEwMDAwMDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1BVVRIICAgICAg
ICAgICAgICAweDA4MDAwMDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1UTVAgICAgICAgICAgICAgICAw
eDA0MDAwMDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1TWU1MSU5LICAgICAgICAgICAweDAyMDAwMDAw
Cj4gKyNkZWZpbmUgVUtfOVBfRE1MSU5LICAgICAgICAgICAgICAweDAxMDAwMDAwCj4gKyNkZWZp
bmUgVUtfOVBfRE1ERVZJQ0UgICAgICAgICAgICAweDAwODAwMDAwCj4gKyNkZWZpbmUgVUtfOVBf
RE1OQU1FRFBJUEUgICAgICAgICAweDAwMjAwMDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1TT0NLRVQg
ICAgICAgICAgICAweDAwMTAwMDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1TRVRVSUQgICAgICAgICAg
ICAweDAwMDgwMDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1TRVRHSUQgICAgICAgICAgICAweDAwMDQw
MDAwCj4gKyNkZWZpbmUgVUtfOVBfRE1TRVRWVFggICAgICAgICAgICAweDAwMDEwMDAwCj4gKwo+
ICsvKioKPiArICogOVAgb3BlbiBtb2RlIGJpdHMuCj4gKyAqCj4gKyAqIFNvdXJjZTogaHR0cHM6
Ly85ZmFucy5naXRodWIuaW8vcGxhbjlwb3J0L21hbi9tYW45L29wZW4uaHRtbC4KPiArICovCj4g
KyNkZWZpbmUgVUtfOVBfT1JFQUQgICAgICAgICAgICAgICAweDAwCj4gKyNkZWZpbmUgVUtfOVBf
T1dSSVRFICAgICAgICAgICAgICAweDAxCj4gKyNkZWZpbmUgVUtfOVBfT1JEV1IgICAgICAgICAg
ICAgICAweDAyCj4gKyNkZWZpbmUgVUtfOVBfT0VYRUMgICAgICAgICAgICAgICAweDAzCj4gKyNk
ZWZpbmUgVUtfOVBfT1RSVU5DICAgICAgICAgICAgICAweDEwCj4gKyNkZWZpbmUgVUtfOVBfT1JF
WEVDICAgICAgICAgICAgICAweDIwCj4gKyNkZWZpbmUgVUtfOVBfT1JDTE9TRSAgICAgICAgICAg
ICAweDQwCj4gKyNkZWZpbmUgVUtfOVBfT0FQUEVORCAgICAgICAgICAgICAweDgwCj4gKyNkZWZp
bmUgVUtfOVBfT0VYQ0wgICAgICAgICAgICAgICAweDEwMDAKPiArCj4gKy8qKgo+ICsgKiA5UCBx
aWQuCj4gKyAqCj4gKyAqIFNvdXJjZTogaHR0cHM6Ly85ZmFucy5naXRodWIuaW8vcGxhbjlwb3J0
L21hbi9tYW45L2ludHJvLmh0bWwuCj4gKyAqLwo+ICtzdHJ1Y3QgdWtfOXBfcWlkIHsKPiArCXVp
bnQ4X3QgICAgICAgICAgICAgICAgIHR5cGU7Cj4gKwl1aW50MzJfdCAgICAgICAgICAgICAgICB2
ZXJzaW9uOwo+ICsJdWludDY0X3QgICAgICAgICAgICAgICAgcGF0aDsKPiArfTsKPiArCj4gKy8q
Kgo+ICsgKiA5UCBzdHJpbmcuCj4gKyAqCj4gKyAqIFNvdXJjZTogaHR0cHM6Ly85ZmFucy5naXRo
dWIuaW8vcGxhbjlwb3J0L21hbi9tYW45L2ludHJvLmh0bWwuCj4gKyAqLwo+ICtzdHJ1Y3QgdWtf
OXBfc3RyIHsKPiArCXVpbnQxNl90ICAgICAgICAgICAgICAgIHNpemU7Cj4gKwljaGFyICAgICAg
ICAgICAgICAgICAgICAqZGF0YTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBDaGVjayBpZiBhIDlQ
IHN0cmluZyBpcyBlcXVhbCB0byBhIGdpdmVuIG51bGwtdGVybWluYXRlZCBzdHJpbmcuCj4gKyAq
Cj4gKyAqIEBwYXJhbSBzCj4gKyAqICAgOVAgc3RyaW5nLgo+ICsgKiBAcGFyYW0gcAo+ICsgKiAg
IE51bGwtdGVybWluYXRlZCBzdHJpbmcuCj4gKyAqIEByZXR1cm4KPiArICogICAxIGlmIGVxdWFs
LCAwIG90aGVyd2lzZS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgaW50IHVrXzlwX3N0cl9lcXVh
bChjb25zdCBzdHJ1Y3QgdWtfOXBfc3RyICpzLCBjb25zdCBjaGFyICpwKQo+ICt7Cj4gKwlyZXR1
cm4gc3RybGVuKHApID09IHMtPnNpemUgJiYgIXN0cm5jbXAocy0+ZGF0YSwgcCwgcy0+c2l6ZSk7
Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBJbml0aWFsaXplIGEgOVAgc3RyaW5nIGZyb20gYSBnaXZl
biBudWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgo+ICsgKgo+ICsgKiBAcGFyYW0gcwo+ICsgKiAgIDlQ
IHN0cmluZy4KPiArICogQHBhcmFtIHAKPiArICogICBOdWxsLXRlcm1pbmF0ZWQgc3RyaW5nLgo+
ICsgKi8KPiArc3RhdGljIGlubGluZSB2b2lkIHVrXzlwX3N0cl9pbml0KHN0cnVjdCB1a185cF9z
dHIgKnMsIGNvbnN0IGNoYXIgKnApCj4gK3sKPiArCWlmICghcCkgewo+ICsJCXMtPnNpemUgPSAw
Owo+ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlzLT5zaXplID0gc3RybGVuKHApOwo+ICsJcy0+
ZGF0YSA9IChjaGFyICopcDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIDlQIHN0YXQgc3RydWN0dXJl
Lgo+ICsgKi8KPiArc3RydWN0IHVrXzlwX3N0YXQgewo+ICsJdWludDE2X3QgICAgICAgICAgICAg
ICAgc2l6ZTsKPiArCXVpbnQxNl90ICAgICAgICAgICAgICAgIHR5cGU7Cj4gKwl1aW50MzJfdCAg
ICAgICAgICAgICAgICBkZXY7Cj4gKwlzdHJ1Y3QgdWtfOXBfcWlkICAgICAgICBxaWQ7Cj4gKwl1
aW50MzJfdCAgICAgICAgICAgICAgICBtb2RlOwo+ICsJdWludDMyX3QgICAgICAgICAgICAgICAg
YXRpbWU7Cj4gKwl1aW50MzJfdCAgICAgICAgICAgICAgICBtdGltZTsKPiArCXVpbnQ2NF90ICAg
ICAgICAgICAgICAgIGxlbmd0aDsKPiArCXN0cnVjdCB1a185cF9zdHIgICAgICAgIG5hbWU7Cj4g
KwlzdHJ1Y3QgdWtfOXBfc3RyICAgICAgICB1aWQ7Cj4gKwlzdHJ1Y3QgdWtfOXBfc3RyICAgICAg
ICBnaWQ7Cj4gKwlzdHJ1Y3QgdWtfOXBfc3RyICAgICAgICBtdWlkOwo+ICsJc3RydWN0IHVrXzlw
X3N0ciAgICAgICAgZXh0ZW5zaW9uOwo+ICsJdWludDMyX3QgICAgICAgICAgICAgICAgbl91aWQ7
Cj4gKwl1aW50MzJfdCAgICAgICAgICAgICAgICBuX2dpZDsKPiArCXVpbnQzMl90ICAgICAgICAg
ICAgICAgIG5fbXVpZDsKPiArfTsKPiArCj4gKy8qCj4gKyAqIFRPRE86IFRoZSB3aXJlIGZvcm1h
dCBpcyBhbHdheXMgbGl0dGxlLWVuZGlhbi4gQWRkIGxpdHRsZS1lbmRpYW4gdHlwZXMgYW5kCj4g
KyAqIGNwdV90b19sZSooKSBkYXRhIHRvIHRoZSByZXF1aXJlZCBmb3JtYXQuCj4gKyAqLwo+ICsK
PiArLyoqCj4gKyAqIEluaXRpYWxpemUgYSA5UCBzdGF0IHN0cnVjdHVyZSB0aGF0IHdvbid0IG1v
ZGlmeSBhbnkgZmllbGRzIGlmIHNlbnQgd2l0aCBhCj4gKyAqIFdTVEFUIG1lc3NhZ2UsIGJ5IHNl
dHRpbmcgYWxsIGludGVnZXIgZmllbGRzIHRvIH4wIGFuZCBhbGwgc3RyaW5nIGZpZWxkcyB0bwo+
ICsgKiBlbXB0eSBzdHJpbmdzLgo+ICsgKgo+ICsgKiBAcGFyYW0gc3RhdAo+ICsgKiAgIFRoZSA5
UCBzdGF0IHN0cnVjdHVyZS4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCB1a185cF9zdGF0
X2luaXQoc3RydWN0IHVrXzlwX3N0YXQgKnN0YXQpCj4gK3sKPiArCVVLX0FTU0VSVChzdGF0KTsK
PiArCW1lbXNldChzdGF0LCB+MCwgc2l6ZW9mKHN0cnVjdCB1a185cF9zdGF0KSk7Cj4gKwlzdGF0
LT5uYW1lLnNpemUgPSAwOwo+ICsJc3RhdC0+dWlkLnNpemUgPSAwOwo+ICsJc3RhdC0+Z2lkLnNp
emUgPSAwOwo+ICsJc3RhdC0+bXVpZC5zaXplID0gMDsKPiArCXN0YXQtPmV4dGVuc2lvbi5zaXpl
ID0gMDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIE5vIHRhZywgdXNlZCBieSB0aGUgVHZlcnNpb24v
UnZlcnNpb24gcGFpciBvZiByZXF1ZXN0L3JlcGx5IG1lc3NhZ2VzLgo+ICsgKi8KPiArI2RlZmlu
ZSBVS185UF9OT1RBRyAgICAgICAgICAgICAgICAgICAgVUlOVDE2X01BWAo+ICsKPiArLyoqCj4g
KyAqIE1heGltdW0gYXZhaWxhYmxlIHRhZyBmb3IgdXNlLgo+ICsgKiBVS185UF9OT1RBRyAofjAp
IGlzIHJlc2VydmVkIGJ5IHRoZSA5UCBSRkMgZm9yIHJlcHJlc2VudGluZyBubyB0YWcuCj4gKyAq
Lwo+ICsjZGVmaW5lIFVLXzlQX01BWFRBRyAgICAgICAgICAgICAgICAgICAoVUlOVDE2X01BWCAt
IDEpCj4gKwo+ICsvKioKPiArICogTnVtYmVyIG9mIHBvc3NpYmxlIHRhZ3MsIGluY2x1ZGluZyBO
T1RBRy4KPiArICovCj4gKyNkZWZpbmUgVUtfOVBfTlVNVEFHUyAgICAgICAgICAgICAgICAgICgo
dWludDMyX3QpKFVJTlQxNl9NQVgpICsgMSkKPiArCj4gKy8qKgo+ICsgKiBObyBmaWQsIHVzZWQg
dG8gbWFyayBhIGZpZCBmaWVsZCBhcyB1bnVzZWQuCj4gKyAqLwo+ICsjZGVmaW5lIFVLXzlQX05P
RklEICAgICAgICAgICAgICAgICAgICBVSU5UMzJfTUFYCj4gKwo+ICsvKioKPiArICogTm8gbl91
bmFtZSBpbiBUQVRUQUNIIHJlcXVlc3RzLCB1c2VkIHRvIG1hcmsgdGhlIGZpZWxkIGFzIHVudXNl
ZC4KPiArICovCj4gKyNkZWZpbmUgVUtfOVBfTk9OVU5BTUUgICAgICAgICAgICAgICAgIFVJTlQz
Ml9NQVgKPiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArI2Vu
ZGlmIC8qIF9fVUtfOVBfQ09SRV9fICovCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69ya-0002lg-5t; Fri, 06 Sep 2019 08:52:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yY-0002kt-PK
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:14 +0000
X-Inumbo-ID: 9d660bde-d083-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9d660bde-d083-11e9-978d-bc764e2007e4;
 Fri, 06 Sep 2019 08:52:11 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E6AF3F200F;
 Fri,  6 Sep 2019 10:52:10 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id KnO1RY9pufts; Fri,  6 Sep 2019 10:52:10 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B1CD9F2008;
 Fri,  6 Sep 2019 10:52:04 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:52:04 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-6-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <131a44f1-09eb-c04a-cc3d-678df2867724@neclab.eu>
Date: Fri, 6 Sep 2019 10:52:03 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-6-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 5/8] lib/uk9p: Add 9P device
 implementation
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGV5LCB0aGFua3MgZm9yIHRoZSBjaGFuZ2VzIGFuZCBhZGRpbmcgYSBjb21tZW50IG9uIHRoZSBk
aXNjb25uZWN0IApiZWhhdmlvci4gVGhlIHBhdGNoIGxvb2tzIGdvb2QuCgpSZXZpZXdlZC1ieTog
U2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+CgpPbiAwNS4wOS4xOSAxNDox
NCwgQ3Jpc3RpYW4gQmFudSB3cm90ZToKPiBUaGlzIHBhdGNoIGFkZHMgdGhlIG9wZXJhdGlvbnMg
dGhhdCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IHRyYW5zcG9ydAo+IGxheWVycywgdGhlIEFQSSB0
byBpbnRlcmFjdCB3aXRoIHRoZW0gYW5kIHRvIG1hbmFnZSByZXF1ZXN0cy4KPiAKPiBTaWduZWQt
b2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICAgbGliL3Vr
OXAvOXBkZXYuYyAgICAgICAgICAgICAgICAgIHwgMzMxICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCj4gICBsaWIvdWs5cC85cGRldl90cmFucy5jICAgICAgICAgICAgfCAg
IDQgKwo+ICAgbGliL3VrOXAvTWFrZWZpbGUudWsgICAgICAgICAgICAgIHwgICAxICsKPiAgIGxp
Yi91azlwL2V4cG9ydHN5bXMudWsgICAgICAgICAgICB8ICAxMCArKwo+ICAgbGliL3VrOXAvaW5j
bHVkZS91ay85cGRldi5oICAgICAgIHwgMjA2ICsrKysrKysrKysrKysrKysrKysrKysrKwo+ICAg
bGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmggIHwgMTcxICsrKysrKysrKysrKysrKysr
KysrCj4gICBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X3RyYW5zLmggfCAgIDMgKwo+ICAgNyBm
aWxlcyBjaGFuZ2VkLCA3MjYgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp
Yi91azlwLzlwZGV2LmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9pbmNsdWRlL3Vr
LzlwZGV2LmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2
X2NvcmUuaAo+IAo+IGRpZmYgLS1naXQgYS9saWIvdWs5cC85cGRldi5jIGIvbGliL3VrOXAvOXBk
ZXYuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5iNzMzMTU3
YWE3ZjUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL3VrOXAvOXBkZXYuYwo+IEBAIC0wLDAg
KzEsMzMxIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8K
PiArLyoKPiArICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAr
ICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1
Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBu
b3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAgICB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKgo+
ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiAr
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Cj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJF
IEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRl
IDxzdGRib29sLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPHVrL2NvbmZp
Zy5oPgo+ICsjaW5jbHVkZSA8dWsvcGxhdC9zcGlubG9jay5oPgo+ICsjaW5jbHVkZSA8dWsvYWxs
b2MuaD4KPiArI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiArI2luY2x1ZGUgPHVrL2VycnB0
ci5oPgo+ICsjaW5jbHVkZSA8dWsvYml0bWFwLmg+Cj4gKyNpbmNsdWRlIDx1ay9yZWZjb3VudC5o
Pgo+ICsjaW5jbHVkZSA8dWsvd2FpdC5oPgo+ICsjaW5jbHVkZSA8dWsvOXBkZXYuaD4KPiArI2lu
Y2x1ZGUgPHVrLzlwZGV2X3RyYW5zLmg+Cj4gKyNpbmNsdWRlIDx1ay85cHJlcS5oPgo+ICsjaWYg
Q09ORklHX0xJQlVLU0NIRUQKPiArI2luY2x1ZGUgPHVrL3NjaGVkLmg+Cj4gKyNpbmNsdWRlIDx1
ay93YWl0Lmg+Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIHZvaWQgX3JlcV9tZ210X2luaXQoc3Ry
dWN0IHVrXzlwZGV2X3JlcV9tZ210ICpyZXFfbWdtdCkKPiArewo+ICsJdWthcmNoX3NwaW5fbG9j
a19pbml0KCZyZXFfbWdtdC0+c3BpbmxvY2spOwo+ICsJdWtfYml0bWFwX3plcm8ocmVxX21nbXQt
PnRhZ19ibSwgVUtfOVBfTlVNVEFHUyk7Cj4gKwlVS19JTklUX0xJU1RfSEVBRCgmcmVxX21nbXQt
PnJlcV9saXN0KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgX3JlcV9tZ210X2FkZF9yZXFfbG9j
a2VkKHN0cnVjdCB1a185cGRldl9yZXFfbWdtdCAqcmVxX21nbXQsCj4gKwkJCQlzdHJ1Y3QgdWtf
OXByZXEgKnJlcSkKPiArewo+ICsJdWtfYml0bWFwX3NldChyZXFfbWdtdC0+dGFnX2JtLCByZXEt
PnRhZywgMSk7Cj4gKwl1a19saXN0X2FkZCgmcmVxLT5fbGlzdCwgJnJlcV9tZ210LT5yZXFfbGlz
dCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9yZXFfbWdtdF9kZWxfcmVxX2xvY2tlZChzdHJ1
Y3QgdWtfOXBkZXZfcmVxX21nbXQgKnJlcV9tZ210LAo+ICsJCQkJc3RydWN0IHVrXzlwcmVxICpy
ZXEpCj4gK3sKPiArCXVrX2JpdG1hcF9jbGVhcihyZXFfbWdtdC0+dGFnX2JtLCByZXEtPnRhZywg
MSk7Cj4gKwl1a19saXN0X2RlbCgmcmVxLT5fbGlzdCk7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50
MTZfdCBfcmVxX21nbXRfbmV4dF90YWdfbG9ja2VkKHN0cnVjdCB1a185cGRldl9yZXFfbWdtdCAq
cmVxX21nbXQpCj4gK3sKPiArCXJldHVybiB1a19maW5kX25leHRfemVyb19iaXQocmVxX21nbXQt
PnRhZ19ibSwgVUtfOVBfTlVNVEFHUywgMCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9yZXFf
bWdtdF9jbGVhbnVwKHN0cnVjdCB1a185cGRldl9yZXFfbWdtdCAqcmVxX21nbXQgX191bnVzZWQp
Cj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwl1aW50MTZfdCB0YWc7Cj4gKwlzdHJ1
Y3QgdWtfOXByZXEgKnJlcSwgKnJlcW47Cj4gKwo+ICsJdWtwbGF0X3NwaW5fbG9ja19pcnFzYXZl
KCZyZXFfbWdtdC0+c3BpbmxvY2ssIGZsYWdzKTsKPiArCXVrX2xpc3RfZm9yX2VhY2hfZW50cnlf
c2FmZShyZXEsIHJlcW4sICZyZXFfbWdtdC0+cmVxX2xpc3QsIF9saXN0KSB7Cj4gKwkJdGFnID0g
cmVxLT50YWc7Cj4gKwkJX3JlcV9tZ210X2RlbF9yZXFfbG9ja2VkKHJlcV9tZ210LCByZXEpOwo+
ICsJCWlmICghdWtfOXByZXFfcHV0KHJlcSkpIHsKPiArCQkJdWtfcHJfd2FybigiVGFnICVkIHN0
aWxsIGhhcyByZWZlcmVuY2VzIG9uIGNsZWFudXAuXG4iLAo+ICsJCQkJdGFnKTsKPiArCQl9Cj4g
Kwl9Cj4gKwl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcmVxX21nbXQtPnNwaW5sb2Nr
LCBmbGFncyk7Cj4gK30KPiArCj4gK3N0cnVjdCB1a185cGRldiAqdWtfOXBkZXZfY29ubmVjdChj
b25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgKnRyYW5zLAo+ICsJCQkJY29uc3QgY2hhciAqZGV2
aWNlX2lkZW50aWZpZXIsCj4gKwkJCQljb25zdCBjaGFyICptb3VudF9hcmdzLAo+ICsJCQkJc3Ry
dWN0IHVrX2FsbG9jICphKQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXBkZXYgKmRldjsKPiArCWludCBy
YyA9IDA7Cj4gKwo+ICsJVUtfQVNTRVJUKHRyYW5zKTsKPiArCVVLX0FTU0VSVChkZXZpY2VfaWRl
bnRpZmllcik7Cj4gKwo+ICsJaWYgKGEgPT0gTlVMTCkKPiArCQlhID0gdHJhbnMtPmE7Cj4gKwo+
ICsJZGV2ID0gdWtfY2FsbG9jKGEsIDEsIHNpemVvZigqZGV2KSk7Cj4gKwlpZiAoZGV2ID09IE5V
TEwpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJZGV2
LT5vcHMgPSB0cmFucy0+b3BzOwo+ICsJZGV2LT5hID0gYTsKPiArCj4gKyNpZiBDT05GSUdfTElC
VUtTQ0hFRAo+ICsJdWtfd2FpdHFfaW5pdCgmZGV2LT54bWl0X3dxKTsKPiArI2VuZGlmCj4gKwo+
ICsJX3JlcV9tZ210X2luaXQoJmRldi0+X3JlcV9tZ210KTsKPiArCj4gKwlyYyA9IGRldi0+b3Bz
LT5jb25uZWN0KGRldiwgZGV2aWNlX2lkZW50aWZpZXIsIG1vdW50X2FyZ3MpOwo+ICsJaWYgKHJj
IDwgMCkKPiArCQlnb3RvIGZyZWVfZGV2Owo+ICsKPiArCS8qCj4gKwkgKiBCeSBkZWZhdWx0LCB0
aGUgbWF4aW11bSBtZXNzYWdlIHNpemUgaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gYWxsb3dlZAo+
ICsJICogbWVzc2FnZSBzaXplLiBUaGlzIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlIF9zZXRfbXNp
emUoKSBhbmQKPiArCSAqIF9nZXRfbXNpemUoKSBmdW5jdGlvbnMuCj4gKwkgKi8KPiArCVVLX0FT
U0VSVChkZXYtPm1heF9tc2l6ZSAhPSAwKTsKPiArCWRldi0+bXNpemUgPSBkZXYtPm1heF9tc2l6
ZTsKPiArCWRldi0+c3RhdGUgPSBVS185UERFVl9DT05ORUNURUQ7Cj4gKwo+ICsJcmV0dXJuIGRl
djsKPiArCj4gK2ZyZWVfZGV2Ogo+ICsJX3JlcV9tZ210X2NsZWFudXAoJmRldi0+X3JlcV9tZ210
KTsKPiArCXVrX2ZyZWUoYSwgZGV2KTsKPiArb3V0Ogo+ICsJcmV0dXJuIEVSUjJQVFIocmMpOwo+
ICt9Cj4gKwo+ICtpbnQgdWtfOXBkZXZfZGlzY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKmRldikK
PiArewo+ICsJaW50IHJjID0gMDsKPiArCj4gKwlVS19BU1NFUlQoZGV2KTsKPiArCVVLX0FTU0VS
VChkZXYtPnN0YXRlID09IFVLXzlQREVWX0NPTk5FQ1RFRCk7Cj4gKwo+ICsJZGV2LT5zdGF0ZSA9
IFVLXzlQREVWX0RJU0NPTk5FQ1RJTkc7Cj4gKwo+ICsJLyogQ2xlYW4gdXAgdGhlIHJlcXVlc3Rz
IGJlZm9yZSBjbG9zaW5nIHRoZSBjaGFubmVsLiAqLwo+ICsJX3JlcV9tZ210X2NsZWFudXAoJmRl
di0+X3JlcV9tZ210KTsKPiArCj4gKwkvKgo+ICsJICogRXZlbiBpZiB0aGUgZGlzY29ubmVjdCBm
cm9tIHRoZSB0cmFuc3BvcnQgbGF5ZXIgZmFpbHMsIHRoZSBtZW1vcnkKPiArCSAqIGFsbG9jYXRl
ZCBmb3IgdGhlIDlwIGRldmljZSBpcyBmcmVlZC4KPiArCSAqLwo+ICsJcmMgPSBkZXYtPm9wcy0+
ZGlzY29ubmVjdChkZXYpOwo+ICsKPiArCXVrX2ZyZWUoZGV2LT5hLCBkZXYpOwo+ICsJcmV0dXJu
IHJjOwo+ICt9Cj4gKwo+ICtpbnQgdWtfOXBkZXZfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKmRl
diwgc3RydWN0IHVrXzlwcmVxICpyZXEpCj4gK3sKPiArCWludCByYzsKPiArCj4gKwlVS19BU1NF
UlQoZGV2KTsKPiArCVVLX0FTU0VSVChyZXEpOwo+ICsKPiArCWlmIChVS19SRUFEX09OQ0UocmVx
LT5zdGF0ZSkgIT0gVUtfOVBSRVFfUkVBRFkpIHsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290
byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGRldi0+c3RhdGUgIT0gVUtfOVBERVZfQ09OTkVDVEVE
KSB7Cj4gKwkJcmMgPSAtRUlPOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArI2lmIENPTkZJ
R19MSUJVS1NDSEVECj4gKwl1a193YWl0cV93YWl0X2V2ZW50KCZkZXYtPnhtaXRfd3EsCj4gKwkJ
KHJjID0gZGV2LT5vcHMtPnJlcXVlc3QoZGV2LCByZXEpKSAhPSAtRU5PU1BDKTsKPiArI2Vsc2UK
PiArCWRvIHsKPiArCQkvKgo+ICsJCSAqIFJldHJ5IHRoZSByZXF1ZXN0IHdoaWxlIGl0IGhhcyBu
byBzcGFjZSBhdmFpbGFibGUgb24gdGhlCj4gKwkJICogdHJhbnNwb3J0IGxheWVyLgo+ICsJCSAq
Lwo+ICsJCXJjID0gZGV2LT5vcHMtPnJlcXVlc3QoZGV2LCByZXEpOwo+ICsJfSB3aGlsZSAocmMg
PT0gLUVOT1NQQyk7Cj4gKyNlbmRpZgo+ICsKPiArb3V0Ogo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4g
Kwo+ICt2b2lkIHVrXzlwZGV2X3htaXRfbm90aWZ5KHN0cnVjdCB1a185cGRldiAqZGV2KQo+ICt7
Cj4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ICsJdWtfd2FpdHFfd2FrZV91cCgmZGV2LT54bWl0
X3dxKTsKPiArI2VuZGlmCj4gK30KPiArCj4gK3N0cnVjdCB1a185cHJlcSAqdWtfOXBkZXZfY2Fs
bChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDhfdCB0eXBlLAo+ICsJCQl1aW50MzJfdCBzaXpl
LCBjb25zdCBjaGFyICpmbXQsIC4uLikKPiArewo+ICsJc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4g
Kwl2YV9saXN0IHZsOwo+ICsJaW50IHJjOwo+ICsKPiArCXJlcSA9IHVrXzlwZGV2X3JlcV9jcmVh
dGUoZGV2LCB0eXBlLCBzaXplKTsKPiArCWlmIChQVFJJU0VSUihyZXEpKQo+ICsJCXJldHVybiBy
ZXE7Cj4gKwo+ICsJdmFfc3RhcnQodmwsIGZtdCk7Cj4gKwlyYyA9IHVrXzlwcmVxX3ZzZXJpYWxp
emUocmVxLCBmbXQsIHZsKTsKPiArCXZhX2VuZCh2bCk7Cj4gKwo+ICsJaWYgKHJjIDwgMCkKPiAr
CQlnb3RvIG91dDsKPiArCj4gKwlyYyA9IHVrXzlwcmVxX3JlYWR5KHJlcSwgVUtfOVBSRVFfWkNE
SVJfTk9ORSwgTlVMTCwgMCwgMCk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsK
PiArCXJjID0gdWtfOXBkZXZfcmVxdWVzdChkZXYsIHJlcSk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJ
CWdvdG8gb3V0Owo+ICsKPiArCXJjID0gdWtfOXByZXFfd2FpdHJlcGx5KHJlcSk7Cj4gKwlpZiAo
cmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXJldHVybiByZXE7Cj4gK291dDoKPiArCXVr
XzlwZGV2X3JlcV9yZW1vdmUoZGV2LCByZXEpOwo+ICsJcmV0dXJuIEVSUjJQVFIocmMpOwo+ICt9
Cj4gKwo+ICtzdHJ1Y3QgdWtfOXByZXEgKnVrXzlwZGV2X3JlcV9jcmVhdGUoc3RydWN0IHVrXzlw
ZGV2ICpkZXYsIHVpbnQ4X3QgdHlwZSwKPiArCQkJCXVpbnQzMl90IHNpemUpCj4gK3sKPiArCXN0
cnVjdCB1a185cHJlcSAqcmVxOwo+ICsJaW50IHJjID0gMDsKPiArCXVpbnQxNl90IHRhZzsKPiAr
CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJVUtfQVNTRVJUKGRldik7Cj4gKwo+ICsJc2l6
ZSA9IE1JTihzaXplLCBkZXYtPm1zaXplKTsKPiArCj4gKwlyZXEgPSB1a185cHJlcV9hbGxvYyhk
ZXYtPmEsIHNpemUpOwo+ICsJaWYgKHJlcSA9PSBOVUxMKSB7Cj4gKwkJcmMgPSAtRU5PTUVNOwo+
ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2
LT5fcmVxX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKPiArCWlmICh0eXBlID09IFVLXzlQX1RWRVJT
SU9OKQo+ICsJCXRhZyA9IFVLXzlQX05PVEFHOwo+ICsJZWxzZQo+ICsJCXRhZyA9IF9yZXFfbWdt
dF9uZXh0X3RhZ19sb2NrZWQoJmRldi0+X3JlcV9tZ210KTsKPiArCj4gKwlyZXEtPnRhZyA9IHRh
ZzsKPiArCXJlcS0+eG1pdC50eXBlID0gdHlwZTsKPiArCj4gKwlfcmVxX21nbXRfYWRkX3JlcV9s
b2NrZWQoJmRldi0+X3JlcV9tZ210LCByZXEpOwo+ICsJdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJl
c3RvcmUoJmRldi0+X3JlcV9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJcmVxLT5zdGF0
ZSA9IFVLXzlQUkVRX0lOSVRJQUxJWkVEOwo+ICsKPiArCXJldHVybiByZXE7Cj4gKwo+ICtvdXQ6
Cj4gKwlyZXR1cm4gRVJSMlBUUihyYyk7Cj4gK30KPiArCj4gK3N0cnVjdCB1a185cHJlcSAqdWtf
OXBkZXZfcmVxX2xvb2t1cChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDE2X3QgdGFnKQo+ICt7
Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4gKwlp
bnQgcmMgPSAtRUlOVkFMOwo+ICsKPiArCXVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5f
cmVxX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKPiArCXVrX2xpc3RfZm9yX2VhY2hfZW50cnkocmVx
LCAmZGV2LT5fcmVxX21nbXQucmVxX2xpc3QsIF9saXN0KSB7Cj4gKwkJaWYgKHRhZyAhPSByZXEt
PnRhZykKPiArCQkJY29udGludWU7Cj4gKwkJcmMgPSAwOwo+ICsJCXVrXzlwcmVxX2dldChyZXEp
Owo+ICsJCWJyZWFrOwo+ICsJfQo+ICsJdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl
di0+X3JlcV9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gKwo+ICsJaWYgKHJjID09IDApCj4gKwkJ
cmV0dXJuIHJlcTsKPiArCj4gKwlyZXR1cm4gRVJSMlBUUihyYyk7Cj4gK30KPiArCj4gK2ludCB1
a185cGRldl9yZXFfcmVtb3ZlKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXByZXEg
KnJlcSkKPiArewo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCj4gKwl1a3BsYXRfc3Bpbl9s
b2NrX2lycXNhdmUoJmRldi0+X3JlcV9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gKwlfcmVxX21n
bXRfZGVsX3JlcV9sb2NrZWQoJmRldi0+X3JlcV9tZ210LCByZXEpOwo+ICsJdWtwbGF0X3NwaW5f
dW5sb2NrX2lycXJlc3RvcmUoJmRldi0+X3JlcV9tZ210LnNwaW5sb2NrLCBmbGFncyk7Cj4gKwo+
ICsJcmV0dXJuIHVrXzlwcmVxX3B1dChyZXEpOwo+ICt9Cj4gKwo+ICtib29sIHVrXzlwZGV2X3Nl
dF9tc2l6ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDMyX3QgbXNpemUpCj4gK3sKPiArCWlm
IChtc2l6ZSA+IGRldi0+bWF4X21zaXplKQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlkZXYt
Pm1zaXplID0gbXNpemU7Cj4gKwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KClRoYW5rcyBhIGxvdCBm
b3IgdGhpcyBjaGFuZ2UuIFRoZSBpbnRlcmZhY2UgYmVjb21lcyBtb3JlIGNsZWFyLiAKRXNwZWNp
YWxseSB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZSBnZXR0ZXIgaXMgdXNlZnVsIHRvIGNoZWNrIHdo
eSBzZXR0aW5nIApvZiBhIG5ldyBzaXplIGZhaWxlZC4KCj4gKwo+ICt1aW50MzJfdCB1a185cGRl
dl9nZXRfbXNpemUoc3RydWN0IHVrXzlwZGV2ICpkZXYpCj4gK3sKPiArCXJldHVybiBkZXYtPm1z
aXplOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYi91azlwLzlwZGV2X3RyYW5zLmMgYi9saWIvdWs5
cC85cGRldl90cmFucy5jCj4gaW5kZXggMDgxZGFjODVkZjMzLi41MWM0Zjc4YjU5Y2QgMTAwNjQ0
Cj4gLS0tIGEvbGliL3VrOXAvOXBkZXZfdHJhbnMuYwo+ICsrKyBiL2xpYi91azlwLzlwZGV2X3Ry
YW5zLmMKPiBAQCAtNDcsNiArNDcsMTAgQEAgaW50IHVrXzlwZGV2X3RyYW5zX3JlZ2lzdGVyKHN0
cnVjdCB1a185cGRldl90cmFucyAqdHJhbnMpCj4gICB7Cj4gICAJVUtfQVNTRVJUKHRyYW5zKTsK
PiAgIAlVS19BU1NFUlQodHJhbnMtPm5hbWUpOwo+ICsJVUtfQVNTRVJUKHRyYW5zLT5vcHMpOwo+
ICsJVUtfQVNTRVJUKHRyYW5zLT5vcHMtPmNvbm5lY3QpOwo+ICsJVUtfQVNTRVJUKHRyYW5zLT5v
cHMtPmRpc2Nvbm5lY3QpOwo+ICsJVUtfQVNTRVJUKHRyYW5zLT5vcHMtPnJlcXVlc3QpOwo+ICAg
CVVLX0FTU0VSVCh0cmFucy0+YSk7Cj4gICAKPiAgIAl1a19saXN0X2FkZF90YWlsKCZ0cmFucy0+
X2xpc3QsICZ1a185cGRldl90cmFuc19saXN0KTsKPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvTWFr
ZWZpbGUudWsgYi9saWIvdWs5cC9NYWtlZmlsZS51awo+IGluZGV4IGFlYTcyMmE1ODViOS4uMzRj
Yzk4N2EyZjljIDEwMDY0NAo+IC0tLSBhL2xpYi91azlwL01ha2VmaWxlLnVrCj4gKysrIGIvbGli
L3VrOXAvTWFrZWZpbGUudWsKPiBAQCAtNSwzICs1LDQgQEAgQ1hYSU5DTFVERVMtJChDT05GSUdf
TElCVUs5UCkJCSs9IC1JJChMSUJVSzlQX0JBU0UpL2luY2x1ZGUKPiAgIAo+ICAgTElCVUs5UF9T
UkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwZGV2X3RyYW5zLmMKPiAgIExJQlVLOVBfU1JDUy15
ICs9ICQoTElCVUs5UF9CQVNFKS85cHJlcS5jCj4gK0xJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5
UF9CQVNFKS85cGRldi5jCj4gZGlmZiAtLWdpdCBhL2xpYi91azlwL2V4cG9ydHN5bXMudWsgYi9s
aWIvdWs5cC9leHBvcnRzeW1zLnVrCj4gaW5kZXggNDI2Nzc2NzNjZDM0Li4wNDU2YjkwOTRkODcg
MTAwNjQ0Cj4gLS0tIGEvbGliL3VrOXAvZXhwb3J0c3ltcy51awo+ICsrKyBiL2xpYi91azlwL2V4
cG9ydHN5bXMudWsKPiBAQCAtMTMsMyArMTMsMTMgQEAgdWtfOXByZXFfY29weV9mcm9tCj4gICB1
a185cHJlcV9yZWNlaXZlX2NiCj4gICB1a185cHJlcV93YWl0cmVwbHkKPiAgIHVrXzlwcmVxX2Vy
cm9yCj4gK3VrXzlwZGV2X2Nvbm5lY3QKPiArdWtfOXBkZXZfZGlzY29ubmVjdAo+ICt1a185cGRl
dl9yZXF1ZXN0Cj4gK3VrXzlwZGV2X3htaXRfbm90aWZ5Cj4gK3VrXzlwZGV2X2NhbGwKPiArdWtf
OXBkZXZfcmVxX2NyZWF0ZQo+ICt1a185cGRldl9yZXFfbG9va3VwCj4gK3VrXzlwZGV2X3JlcV9y
ZW1vdmUKPiArdWtfOXBkZXZfc2V0X21zaXplCj4gK3VrXzlwZGV2X2dldF9tc2l6ZQo+IGRpZmYg
LS1naXQgYS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2LmggYi9saWIvdWs5cC9pbmNsdWRlL3Vr
LzlwZGV2LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uYWVk
NzIzZGNlZTdmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBk
ZXYuaAo+IEBAIC0wLDAgKzEsMjA2IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UgKi8KPiArLyoKPiArICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3Ri
QGdtYWlsLmNvbT4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBv
bGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
PiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+
ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8K
PiArCj4gKyNpZm5kZWYgX19VS185UERFVl9fCj4gKyNkZWZpbmUgX19VS185UERFVl9fCj4gKwo+
ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1
ZGUgPHVrL2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiArI2luY2x1ZGUgPHVr
L2Fzc2VydC5oPgo+ICsjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgo+ICsjaW5jbHVkZSA8dWsv
OXBkZXZfY29yZS5oPgo+ICsjaW5jbHVkZSA8dWsvcGxhdC9pcnEuaD4KPiArCj4gKyNpZmRlZiBf
X2NwbHVzcGx1cwo+ICtleHRlcm4gIkMiIHsKPiArI2VuZGlmCj4gKwo+ICtzdHJ1Y3QgdWtfOXBk
ZXZfdHJhbnM7Cj4gKwo+ICsvKioKPiArICogQ29ubmVjdCB0byBhbiB1bmRlcmx5aW5nIGRldmlj
ZSwgb2J0YWluaW5nIGEgOXBkZXYgaGFuZGxlIHRvIHRoZSBjb25uZWN0aW9uLgo+ICsgKgo+ICsg
KiBAcGFyYW0gdHJhbnMKPiArICogICBUaGUgdW5kZXJseWluZyB0cmFuc3BvcnQuCj4gKyAqIEBw
YXJhbSBkZXZpY2VfaWRlbnRpZmllcgo+ICsgKiAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZXZp
Y2UgKGZvciB2aXJ0aW8gYW5kIHhlbiwgdGhlIG1vdW50IHRhZykuCj4gKyAqIEBwYXJhbSBtb3Vu
dF9hcmdzCj4gKyAqICAgQXJndW1lbnRzIHBhc3NlZCBkb3duIGZyb20gdGhlIG1vdW50KCkgY2Fs
bC4KPiArICogQHBhcmFtIGEKPiArICogICAoT3B0aW9uYWwpIEFsbG9jYXRvciB1c2VkIGZvciBh
bnkgYWxsb2NhdGlvbnMgZG9uZSBieSB0aGlzIDlwZGV2Lgo+ICsgKiAgIElmIE5VTEwsIHRoZSB0
cmFuc3BvcnQtc3BlY2lmaWMgYWxsb2NhdG9yIHdpbGwgYmUgdXNlZC4KPiArICogQHJldHVybgo+
ICsgKiAgIC0gQ29ubmVjdGlvbiBoYW5kbGUsIGlmIHN1Y2Nlc3NmdWwuCj4gKyAqICAgLSBFcnJv
ciBwb2ludGVyLCBvdGhlcndpc2UuCj4gKyAqLwo+ICtzdHJ1Y3QgdWtfOXBkZXYgKnVrXzlwZGV2
X2Nvbm5lY3QoY29uc3Qgc3RydWN0IHVrXzlwZGV2X3RyYW5zICp0cmFucywKPiArCQkJCWNvbnN0
IGNoYXIgKmRldmljZV9pZGVudGlmaWVyLAo+ICsJCQkJY29uc3QgY2hhciAqbW91bnRfYXJncywK
PiArCQkJCXN0cnVjdCB1a19hbGxvYyAqYSk7Cj4gKwo+ICsvKioKPiArICogRGlzY29ubmVjdCBm
cm9tIHRoZSB1bmRlcmx5aW5nIGRldmljZS4KPiArICoKPiArICogSW1wb3J0YW50OiBFdmVuIGlu
IGNhc2Ugb2YgZmFpbHVyZSwgdGhlIGRldmljZSBpcyBjbG9zZWQgYW5kIHNob3VsZCBub3QgYmUK
PiArICogdXNlZCBhZnRlciBjYWxsaW5nIHVrXzlwZGV2X2Rpc2Nvbm5lY3QoKS4KPiArICoKPiAr
ICogQHBhcmFtIGRldgo+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEByZXR1
cm4KPiArICogICAtICgwKTogU3VjY2Vzc2Z1bC4KPiArICogICAtICg8IDApOiBGYWlsdXJlIHRv
IGRpc2Nvbm5lY3QuCj4gKyAqLwo+ICtpbnQgdWtfOXBkZXZfZGlzY29ubmVjdChzdHJ1Y3QgdWtf
OXBkZXYgKmRldik7Cj4gKwo+ICsvKioKPiArICogU2VuZCBhIDlQIHJlcXVlc3QgdG8gdGhlIGdp
dmVuIDlQIGRldmljZS4KPiArICoKPiArICogQHBhcmFtIGRldgo+ICsgKiAgIFRoZSBVbmlrcmFm
dCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJhbSByZXEKPiArICogICBUaGUgOVAgcmVxdWVzdC4KPiAr
ICogQHJldHVybgo+ICsgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgo+ICsgKiAgIC0gKDwgMCk6IEZh
aWxlZC4KPiArICovCj4gK2ludCB1a185cGRldl9yZXF1ZXN0KHN0cnVjdCB1a185cGRldiAqZGV2
LCBzdHJ1Y3QgdWtfOXByZXEgKnJlcSk7Cj4gKwo+ICsvKioKPiArICogTm90aWZ5IHRoZSA5UCBk
ZXZpY2UgdGhhdCB0aGUgZGV2aWNlJ3MgdHJhbnNtaXQgcXVldWUgaXMgbm90IGZ1bGwgYW5kCj4g
KyAqIGl0IG1heSBhdHRlbXB0IHRvIHNlbmQgcmVxdWVzdHMgYWdhaW4uCj4gKyAqCj4gKyAqIEBw
YXJhbSBkZXYKPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ICsgKi8KPiArdm9pZCB1
a185cGRldl94bWl0X25vdGlmeShzdHJ1Y3QgdWtfOXBkZXYgKmRldik7Cj4gKwo+ICsvKioKPiAr
ICogQ3JlYXRlcyBhbmQgc2VuZHMgOVAgcmVxdWVzdCB0byB0aGUgZ2l2ZW4gOVAgZGV2aWNlLCBz
ZXJpYWxpemluZyBpdCB3aXRoCj4gKyAqIHRoZSBnaXZlbiBhcmd1bWVudHMuIFRoaXMgZnVuY3Rp
b24gYWN0cyBhcyBhIHNob3J0aGFuZCBmb3IgdGhlIGV4cGxpY2l0Cj4gKyAqIGNhbGxzIHRvIHJl
cV9jcmVhdGUoKSwgc2VyaWFsaXplKCksIHJlYWR5KCksIHJlcXVlc3QoKSwgd2FpdHJlcGx5KCku
Cj4gKyAqCj4gKyAqIEBwYXJhbSBkZXYKPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+
ICsgKiBAcGFyYW0gdHlwZQo+ICsgKiAgIFRyYW5zbWl0IHR5cGUgb2YgdGhlIHJlcXVlc3QsIGUu
Zy4gVHZlcnNpb24sIFRyZWFkLCBhbmQgc28gb24uCj4gKyAqIEBwYXJhbSBzaXplCj4gKyAqICAg
VGhlIG1heGltdW0gc2l6ZSBmb3IgdGhlIHJlY2VpdmUgYW5kIHNlbmQgYnVmZmVycy4KPiArICog
QHBhcmFtIGZtdAo+ICsgKiAgIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGEgdG8gYmUgc2VyaWFsaXpl
ZCwgaW4gdGhlIHdheSB1a185cHJlcV9zZXJpYWxpemUoKQo+ICsgKiAgIGV4cGVjdHMgaXQuCj4g
KyAqIEBwYXJhbSAuLi4KPiArICogICBUaGUgYXJndW1lbnRzIHRvIGJlIHNlcmlhbGl6ZWQuCj4g
KyAqIEByZXR1cm4KPiArICogICAtICghUFRSSVNFUlIpOiBUaGUgOXAgcmVxdWVzdCBpbiB0aGUg
VUtfOVBSRVFfUkVDRUlWRUQgc3RhdGUuCj4gKyAqICAgLSBQVFJJU0VSUjogVGhlIGVycm9yIGNv
ZGUgd2l0aCB3aGljaCBhbnkgb2YgdGhlIHN0ZXBzIGZhaWxlZC4KPiArICovCj4gK3N0cnVjdCB1
a185cHJlcSAqdWtfOXBkZXZfY2FsbChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDhfdCB0eXBl
LAo+ICsJCQl1aW50MzJfdCBzaXplLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cj4gKwo+ICsvKioK
PiArICogQ3JlYXRlIGEgbmV3IHJlcXVlc3QsIGF1dG9tYXRpY2FsbHkgYWxsb2NhdGluZyBpdHMg
dGFnLCBiYXNlZCBvbiBpdHMgdHlwZS4KPiArICoKPiArICogQHBhcmFtIGRldgo+ICsgKiAgIFRo
ZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJhbSB0eXBlCj4gKyAqICAgVHJhbnNtaXQg
dHlwZSBvZiB0aGUgcmVxdWVzdCwgZS5nLiBUdmVyc2lvbiwgVHJlYWQsIGFuZCBzbyBvbi4KPiAr
ICogQHBhcmFtIHNpemUKPiArICogICBUaGUgbWF4aW11bSBzaXplIGZvciB0aGUgcmVjZWl2ZSBh
bmQgc2VuZCBidWZmZXJzLgo+ICsgKiBAcmV0dXJuCj4gKyAqICAgSWYgbm90IGFuIGVycm9yIHBv
aW50ZXIsIHRoZSBjcmVhdGVkIHJlcXVlc3QuCj4gKyAqICAgT3RoZXJ3aXNlLCB0aGUgZXJyb3Ig
aW4gY3JlYXRpbmcgdGhlIHJlcXVlc3Q6Cj4gKyAqICAgLSBFTk9NRU06IE5vIG1lbW9yeSBmb3Ig
dGhlIHJlcXVlc3Qgb3Igbm8gYXZhaWxhYmxlIHRhZ3MuCj4gKyAqLwo+ICtzdHJ1Y3QgdWtfOXBy
ZXEgKnVrXzlwZGV2X3JlcV9jcmVhdGUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQ4X3QgdHlw
ZSwKPiArCQkJCXVpbnQzMl90IHNpemUpOwo+ICsKPiArLyoqCj4gKyAqIExvb2tzIHVwIGEgcmVx
dWVzdCBiYXNlZCBvbiB0aGUgZ2l2ZW4gdGFnLiBUaGlzIGlzIGdlbmVyYWxseSB1c2VkIGJ5Cj4g
KyAqIHRyYW5zcG9ydCBsYXllcnMgb24gcmVjZWl2aW5nIGEgOVAgbWVzc2FnZS4KPiArICoKPiAr
ICogQHBhcmFtIGRldgo+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJh
bSB0YWcKPiArICogICBUaGUgdGFnIHRvIGxvb2sgdXAuCj4gKyAqIEByZXR1cm4KPiArICogICAt
IE5VTEw6IE5vIHJlcXVlc3Qgd2l0aCB0aGUgZ2l2ZW4gdGFnIHdhcyBmb3VuZC4KPiArICogICAt
ICghPU5VTEwpOiBUaGUgcmVxdWVzdC4KPiArICovCj4gK3N0cnVjdCB1a185cHJlcSAqdWtfOXBk
ZXZfcmVxX2xvb2t1cChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDE2X3QgdGFnKTsKPiArCj4g
Ky8qKgo+ICsgKiBSZW1vdmUgYSByZXF1ZXN0IGZyb20gdGhlIGdpdmVuIDlwIGRldmljZS4gSWYg
dGhlIHJlcXVlc3QgaXMgaW4tZmxpZ2h0LAo+ICsgKiBpdCB3aWxsIGJlIGZyZWVkIHdoZW4gYWxs
IHRoZSByZWZlcmVuY2VzIHRvIGl0IGFyZSBnb25lLgo+ICsgKgo+ICsgKiBAcGFyYW0gZGV2Cj4g
KyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiArICogQHBhcmFtIHJlcQo+ICsgKiAgIFRo
ZSByZXF1ZXN0IHRvIGJlIHJlbW92ZWQuCj4gKyAqIEByZXR1cm4KPiArICogICAtIDA6IFRoZXJl
IGFyZSBtb3JlIGFjdGl2ZSByZWZlcmVuY2VzLgo+ICsgKiAgIC0gMTogVGhpcyB3YXMgdGhlIGxh
c3QgcmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0Lgo+ICsgKi8KPiAraW50IHVrXzlwZGV2X3JlcV9y
ZW1vdmUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cHJlcSAqcmVxKTsKPiArCj4g
Ky8qKgo+ICsgKiBTZXRzIHRoZSBtYXhpbXVtIGFsbG93ZWQgbWVzc2FnZSBzaXplLgo+ICsgKgo+
ICsgKiBAcGFyYW0gZGV2Cj4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiArICogQHBh
cmFtIG1zaXplCj4gKyAqICAgQWxsb3dlZCBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZS4KPiArICogQHJl
dHVybgo+ICsgKiAgIC0gdHJ1ZTogU2V0dGluZyB0aGUgbXNpemUgc3VjY2VlZGVkLgo+ICsgKiAg
IC0gZmFsc2U6IFNldHRpbmcgdGhlIG1zaXplIGZhaWxlZCwgYXMgdGhlIGdpdmVuIG1zaXplIGlz
IGdyZWF0ZXIgdGhhbiB0aGUKPiArICogICAgIG1heGltdW0gYWxsb3dlZCBtZXNzYWdlIHNpemUu
Cj4gKyAqLwo+ICtib29sIHVrXzlwZGV2X3NldF9tc2l6ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwg
dWludDMyX3QgbXNpemUpOwo+ICsKPiArLyoqCj4gKyAqIEdldHMgdGhlIG1heGltdW0gbWVzc2Fn
ZSBzaXplLgo+ICsgKgo+ICsgKiBAcGFyYW0gZGV2Cj4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERl
dmljZS4KPiArICogQHJldHVybgo+ICsgKiAgIE1heGltdW0gbWVzc2FnZSBzaXplLgo+ICsgKi8K
PiArdWludDMyX3QgdWtfOXBkZXZfZ2V0X21zaXplKHN0cnVjdCB1a185cGRldiAqZGV2KTsKPiAr
Cj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArI2VuZGlmIC8qIF9f
VUtfOVBERVZfXyAqLwo+IGRpZmYgLS1naXQgYS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X2Nv
cmUuaCBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfY29yZS5oCj4gbmV3IGZpbGUgbW9kZSAx
MDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjhjNTdkODY4MmQwZQo+IC0tLSAvZGV2L251bGwK
PiArKysgYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZGV2X2NvcmUuaAo+IEBAIC0wLDAgKzEsMTcx
IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiArLyoK
PiArICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiArICoKPiAr
ICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVz
dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4g
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
PiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhl
IG5hbWVzIG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAgICB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKgo+ICsgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJB
Q1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX19VS185
UERFVl9DT1JFX18KPiArI2RlZmluZSBfX1VLXzlQREVWX0NPUkVfXwo+ICsKPiArI2luY2x1ZGUg
PHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1ZGUgPHVrL2NvbmZp
Zy5oPgo+ICsjaW5jbHVkZSA8dWsvYXJjaC9zcGlubG9jay5oPgo+ICsjaW5jbHVkZSA8dWsvYml0
bWFwLmg+Cj4gKyNpbmNsdWRlIDx1ay9saXN0Lmg+Cj4gKyNpbmNsdWRlIDx1ay85cF9jb3JlLmg+
Cj4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ICsjaW5jbHVkZSA8dWsvd2FpdF90eXBlcy5oPgo+
ICsjZW5kaWYKPiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICtleHRlcm4gIkMiIHsKPiArI2Vu
ZGlmCj4gKwo+ICtzdHJ1Y3QgdWtfOXBkZXY7Cj4gK3N0cnVjdCB1a185cHJlcTsKPiArCj4gKy8q
Kgo+ICsgKiBGdW5jdGlvbiB0eXBlIHVzZWQgZm9yIGNvbm5lY3RpbmcgdG8gYSBkZXZpY2Ugb24g
YSBjZXJ0YWluIHRyYW5zcG9ydC4KPiArICogVGhlIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHNv
IHNldCB0aGUgbXNpemUgZmllbGQgaW4gdGhlIDlQIGRldmljZQo+ICsgKiBzdHJ1Y3QgdG8gdGhl
IG1heGltdW0gYWxsb3dlZCBtZXNzYWdlIHNpemUuCj4gKyAqCj4gKyAqIEBwYXJhbSBkZXYKPiAr
ICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ICsgKiBAcGFyYW0gZGV2aWNlX2lkZW50aWZp
ZXIKPiArICogICBUaGUgaWRlbnRpZmllciBvZiB0aGUgdW5kZXJseWluZyBkZXZpY2UgKG1vdW50
X3RhZyBmb3IgdmlydGlvLCBldGMuKQo+ICsgKiBAcGFyYW0gbW91bnRfYXJncwo+ICsgKiAgIEFy
Z3VtZW50cyByZWNlaXZlZCBieSB0aGUgbW91bnQoKSBjYWxsLCBmb3IgdHJhbnNwb3J0LXNwZWNp
ZmljIG9wdGlvbnMuCj4gKyAqIEByZXR1cm4KPiArICogICAtICgtRUJVU1kpOiBEZXZpY2UgaXMg
YWxyZWFkeSBpbi11c2UuCj4gKyAqICAgLSAoLUVOT0VOVCk6IERldmljZSBkb2VzIG5vdCBleGlz
dC4KPiArICogICAtICgwKTogU3VjY2Vzc2Z1bC4KPiArICogICAtICg8IDApOiBGYWlsZWQgd2l0
aCBhIHRyYW5zcG9ydCBsYXllciBkZXBlbmRlbnQgZXJyb3IuCj4gKyAqLwo+ICt0eXBlZGVmIGlu
dCAoKnVrXzlwZGV2X2Nvbm5lY3RfdCkoc3RydWN0IHVrXzlwZGV2ICpkZXYsCj4gKwkJCQljb25z
dCBjaGFyICpkZXZpY2VfaWRlbnRpZmllciwKPiArCQkJCWNvbnN0IGNoYXIgKm1vdW50X2FyZ3Mp
Owo+ICsKPiArLyoqCj4gKyAqIEZ1bmN0aW9uIHR5cGUgdXNlZCBmb3IgZGlzY29ubmVjdGluZyBm
cm9tIHRoZSBkZXZpY2UuCj4gKyAqCj4gKyAqIEBwYXJhbSBkZXYKPiArICogICBUaGUgVW5pa3Jh
ZnQgOVAgRGV2aWNlLgo+ICsgKiBAcmV0dXJuCj4gKyAqICAgLSAoMCk6IFN1Y2Nlc3NmdWwuCj4g
KyAqICAgLSAoPCAwKTogRmFpbGVkIHdpdGggYSB0cmFuc3BvcnQgbGF5ZXIgZGVwZW5kZW50IGVy
cm9yLgo+ICsgKi8KPiArdHlwZWRlZiBpbnQgKCp1a185cGRldl9kaXNjb25uZWN0X3QpKHN0cnVj
dCB1a185cGRldiAqZGV2KTsKPiArCj4gKy8qKgo+ICsgKiBGdW5jdGlvbiB0eXBlIHVzZWQgZm9y
IHNlbmRpbmcgYSByZXF1ZXN0IHRvIHRoZSA5UCBkZXZpY2UuCj4gKyAqCj4gKyAqIEBwYXJhbSBk
ZXYKPiArICogICBUaGUgVW5pa3JhZnQgOVAgZGV2aWNlLgo+ICsgKiBAcGFyYW0gcmVxCj4gKyAq
ICAgUmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0IHRvIGJlIHNlbnQuCj4gKyAqIEByZXR1cm4KPiAr
ICogICAtICgwKTogU3VjY2Vzc2Z1bC4KPiArICogICAtICg8IDApOiBGYWlsZWQuIElmIC1FTk9T
UEMsIHRoZW4gdGhlIHRyYW5zcG9ydCBsYXllciBkb2VzIG5vdCBoYXZlIGVub3VnaAo+ICsgKiAg
IHNwYWNlIHRvIHNlbmQgdGhpcyByZXF1ZXN0IGFuZCByZXRyaWVzIGFyZSByZXF1aXJlZC4KPiAr
ICovCj4gK3R5cGVkZWYgaW50ICgqdWtfOXBkZXZfcmVxdWVzdF90KShzdHJ1Y3QgdWtfOXBkZXYg
KmRldiwKPiArCQkJCXN0cnVjdCB1a185cHJlcSAqcmVxKTsKPiArCj4gKy8qKgo+ICsgKiBBIHN0
cnVjdHVyZSB1c2VkIHRvIHN0b3JlIHRoZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBhIGNlcnRh
aW4gdHJhbnNwb3J0Lgo+ICsgKi8KPiArc3RydWN0IHVrXzlwZGV2X3RyYW5zX29wcyB7Cj4gKwl1
a185cGRldl9jb25uZWN0X3QgICAgICAgICAgICAgICAgICAgICAgY29ubmVjdDsKPiArCXVrXzlw
ZGV2X2Rpc2Nvbm5lY3RfdCAgICAgICAgICAgICAgICAgICBkaXNjb25uZWN0Owo+ICsJdWtfOXBk
ZXZfcmVxdWVzdF90ICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Q7Cj4gK307Cj4gKwo+ICsv
KioKPiArICogQGludGVybmFsCj4gKyAqIEEgc3RydWN0dXJlIHVzZWQgZm9yIDlwIHJlcXVlc3Rz
JyBtYW5hZ2VtZW50Lgo+ICsgKi8KPiArc3RydWN0IHVrXzlwZGV2X3JlcV9tZ210IHsKPiArCS8q
IFNwaW5sb2NrIHByb3RlY3RpbmcgdGhpcyBkYXRhLiAqLwo+ICsJc3BpbmxvY2tfdCAgICAgICAg
ICAgICAgICAgICAgICBzcGlubG9jazsKPiArCS8qIEJpdG1hcCBvZiBhdmFpbGFibGUgdGFncy4g
Ki8KPiArCXVuc2lnbmVkIGxvbmcgICAgICAgICAgICAgICAgICAgdGFnX2JtW1VLX0JJVFNfVE9f
TE9OR1MoVUtfOVBfTlVNVEFHUyldOwo+ICsJLyogTGlzdCBvZiByZXF1ZXN0cyBhbGxvY2F0ZWQg
YW5kIG5vdCB5ZXQgcmVtb3ZlZC4gKi8KPiArCXN0cnVjdCB1a19saXN0X2hlYWQgICAgICAgICAg
ICAgcmVxX2xpc3Q7Cj4gK307Cj4gKwo+ICsvKioKPiArICogQGludGVybmFsCj4gKyAqIDlQREVW
IHRyYW5zcG9ydCBzdGF0ZQo+ICsgKgo+ICsgKiAtIENPTk5FQ1RFRDogRGVmYXVsdCBzdGF0ZSBh
ZnRlciBpbml0aWFsaXphdGlvbiBhbmQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24uCj4gKyAqIC0g
RElTQ09OTkVDVElORzogQWZ0ZXIgYSB1a185cGRldl9kaXNjb25uZWN0KCkgY2FsbC4KPiArICog
ICBObyByZXF1ZXN0cyBhcmUgYWxsb3dlZCBhbnltb3JlLiBXaGVuIGFsbCBsaXZlIHJlc291cmNl
cyBoYXZlIGJlZW4KPiArICogICBkZXN0cm95ZWQsIHRoZSA5cGRldiB3aWxsIGZyZWUgaXRzZWxm
Lgo+ICsgKi8KPiArZW51bSB1a185cGRldl90cmFuc19zdGF0ZSB7Cj4gKwlVS185UERFVl9DT05O
RUNURUQsCj4gKwlVS185UERFVl9ESVNDT05ORUNUSU5HCj4gK307Cj4gKwo+ICsvKioKPiArICog
OVBERVYKPiArICogQSBzdHJ1Y3R1cmUgdXNlZCB0byBpbnRlcmFjdCB3aXRoIGEgOVAgZGV2aWNl
Lgo+ICsgKi8KPiArc3RydWN0IHVrXzlwZGV2IHsKPiArCS8qIFVuZGVybHlpbmcgdHJhbnNwb3J0
IG9wZXJhdGlvbnMuICovCj4gKwljb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNfb3BzICpvcHM7
Cj4gKwkvKiBBbGxvY2F0b3IgdXNlZCBieSB0aGlzIGRldmljZS4gKi8KPiArCXN0cnVjdCB1a19h
bGxvYyAgICAgICAgICAgICAgICAgKmE7IC8qIFNlZSB1a185cGRldl9jb25uZWN0KCkuICovCj4g
KwkvKiBUcmFuc3BvcnQgc3RhdGUuICovCj4gKwllbnVtIHVrXzlwZGV2X3RyYW5zX3N0YXRlICAg
ICAgIHN0YXRlOwo+ICsJLyogTWF4aW11bSBzaXplIG9mIGEgbWVzc2FnZS4gKi8KPiArCXVpbnQz
Ml90ICAgICAgICAgICAgICAgICAgICAgICAgbXNpemU7Cj4gKwkvKiBNYXhpbXVtIHNpemUgb2Yg
YSBtZXNzYWdlIGZvciB0aGUgdHJhbnNwb3J0LiAqLwo+ICsJdWludDMyX3QgICAgICAgICAgICAg
ICAgICAgICAgICBtYXhfbXNpemU7Cj4gKwkvKiBUcmFuc3BvcnQtYWxsb2NhdGVkIGRhdGEuICov
Cj4gKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwcml2Owo+ICsJLyogQGludGVy
bmFsIFJlcXVlc3QgbWFuYWdlbWVudC4gKi8KPiArCXN0cnVjdCB1a185cGRldl9yZXFfbWdtdCAg
ICAgICAgX3JlcV9tZ210Owo+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQKPiArCS8qCj4gKwkgKiBT
bGVwdCBvbiBieSB0aHJlYWRzIHdhaXRpbmcgZm9yIHRoZWlyIHR1cm4gZm9yIGVub3VnaCBzcGFj
ZSB0byBzZW5kCj4gKwkgKiB0aGUgcmVxdWVzdC4KPiArCSAqLwo+ICsJc3RydWN0IHVrX3dhaXRx
ICAgICAgICAgICAgICAgICB4bWl0X3dxOwo+ICsjZW5kaWYKPiArfTsKPiArCj4gKyNpZmRlZiBf
X2NwbHVzcGx1cwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArI2VuZGlmIC8qIF9fVUtfOVBERVZfQ09S
RV9fICovCj4gZGlmZiAtLWdpdCBhL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaCBi
L2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaAo+IGluZGV4IGE2NDhkYmZiYTkyNy4u
NmU5ODFhZTg4YWM2IDEwMDY0NAo+IC0tLSBhL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJh
bnMuaAo+ICsrKyBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfdHJhbnMuaAo+IEBAIC0zNyw2
ICszNyw3IEBACj4gICAKPiAgICNpbmNsdWRlIDxzdGRib29sLmg+Cj4gICAjaW5jbHVkZSA8dWsv
Y29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx1ay85cGRldl9jb3JlLmg+Cj4gICAKPiAgICNpZmRlZiBf
X2NwbHVzcGx1cwo+ICAgZXh0ZXJuICJDIiB7Cj4gQEAgLTUxLDYgKzUyLDggQEAgc3RydWN0IHVr
XzlwZGV2X3RyYW5zIHsKPiAgIAkgKiBzcGVjaWZpYyB0cmFuc3BvcnQuCj4gICAJICovCj4gICAJ
Y29uc3QgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuYW1lOwo+ICsJLyogU3Vw
cG9ydGVkIG9wZXJhdGlvbnMuICovCj4gKwljb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNfb3Bz
ICAgICAgICAgKm9wczsKPiAgIAkvKiBBbGxvY2F0b3IgdXNlZCBmb3IgZGV2aWNlcyB3aGljaCB1
c2UgdGhpcyB0cmFuc3BvcnQgbGF5ZXIuICovCj4gICAJc3RydWN0IHVrX2FsbG9jICAgICAgICAg
ICAgICAgICAgICAgICAgICphOwo+ICAgCS8qIEBpbnRlcm5hbCBFbnRyeSBpbiB0aGUgbGlzdCBv
ZiBhdmFpbGFibGUgdHJhbnNwb3J0cy4gKi8KPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69ya-0002lm-84; Fri, 06 Sep 2019 08:52:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yY-0002kv-Ux
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:15 +0000
X-Inumbo-ID: 980a7c10-d083-11e9-abed-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 980a7c10-d083-11e9-abed-12813bfff9fa;
 Fri, 06 Sep 2019 08:52:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id D461F105664;
 Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2VsFMvgIRflo; Fri,  6 Sep 2019 10:52:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id CC27010566A;
 Fri,  6 Sep 2019 10:52:00 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:51:59 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-5-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <46cc12f5-8436-abbb-a1f9-430e4a277e04@neclab.eu>
Date: Fri, 6 Sep 2019 10:51:59 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-5-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 4/8] lib/uk9p: Add 9P
 requests abstraction
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGEgbG90LiBJIGFtIGZpbmUgd2l0aCB0aGUgbWVzc2FnZSBwcmludCBjaGFuZ2VzLgoK
UmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoKT24g
MDUuMDkuMTkgMTQ6MTQsIENyaXN0aWFuIEJhbnUgd3JvdGU6Cj4gVGhpcyBwYXRjaCBpbnRyb2R1
Y2VzIGEgc3RydWN0IHVrXzlwcmVxIHdoaWNoIGFic3RyYWN0cyB0aGUgbGlmZWN5Y2xlIG9mCj4g
YWxsb2NhdGluZyBtZW1vcnksIHNlcmlhbGl6aW5nIGRhdGEsIHNlbmRpbmcgaXQgb3ZlciBhIHRy
YW5zcG9ydCBsYXllciwKPiByZWNlaXZpbmcgdGhlIHJlc3BvbnNlLCBkZXRlY3RpbmcgZXJyb3Jz
LCBkZXNlcmlhbGl6aW5nIHRoZSByZWNlaXZlZAo+IG1lc3NhZ2UgYW5kIGZyZWVpbmcgdGhlIG1l
bW9yeS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29t
Pgo+IC0tLQo+ICAgbGliL3VrOXAvOXByZXEuYyAgICAgICAgICAgIHwgNTY5ICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBsaWIvdWs5cC9NYWtlZmlsZS51
ayAgICAgICAgfCAgIDEgKwo+ICAgbGliL3VrOXAvZXhwb3J0c3ltcy51ayAgICAgIHwgIDExICsK
PiAgIGxpYi91azlwL2luY2x1ZGUvdWsvOXByZXEuaCB8IDMwMCArKysrKysrKysrKysrKysrKysr
KysrKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCA4ODEgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IGxpYi91azlwLzlwcmVxLmMKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWs5
cC9pbmNsdWRlL3VrLzlwcmVxLmgKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvOXByZXEuYyBi
L2xpYi91azlwLzlwcmVxLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw
MDAwMC4uMGZjNGIxZTlmMTAwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91azlwLzlwcmVx
LmMKPiBAQCAtMCwwICsxLDU2OSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTMtQ2xhdXNlICovCj4gKy8qCj4gKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBn
bWFpbC5jb20+Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xp
dGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1ldDoKPiArICoKPiArICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4g
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHly
aWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiAr
ICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgo+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQo+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiArICogVEhJUyBIRUFE
RVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArICovCj4g
Kwo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KPiArI2lu
Y2x1ZGUgPHVrLzlwcmVxLmg+Cj4gKyNpbmNsdWRlIDx1ay85cF9jb3JlLmg+Cj4gKyNpbmNsdWRl
IDx1ay9saXN0Lmg+Cj4gKyNpbmNsdWRlIDx1ay9yZWZjb3VudC5oPgo+ICsjaW5jbHVkZSA8dWsv
ZXNzZW50aWFscy5oPgo+ICsjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiArI2lmIENPTkZJR19MSUJV
S1NDSEVECj4gKyNpbmNsdWRlIDx1ay9zY2hlZC5oPgo+ICsjaW5jbHVkZSA8dWsvd2FpdC5oPgo+
ICsjZW5kaWYKPiArCj4gK3N0YXRpYyBpbnQgX2ZjYWxsX2FsbG9jKHN0cnVjdCB1a19hbGxvYyAq
YSwgc3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmLAo+ICsJCQl1aW50MzJfdCBzaXplKQo+ICt7Cj4g
KwlVS19BU1NFUlQoYSk7Cj4gKwlVS19BU1NFUlQoZik7Cj4gKwlVS19BU1NFUlQoc2l6ZSA+IDAp
Owo+ICsKPiArCWYtPmJ1ZiA9IHVrX2NhbGxvYyhhLCBzaXplLCBzaXplb2YoY2hhcikpOwo+ICsJ
aWYgKGYtPmJ1ZiA9PSBOVUxMKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiArCWYtPnNpemUg
PSBzaXplOwo+ICsJZi0+b2Zmc2V0ID0gMDsKPiArCWYtPnpjX2J1ZiA9IE5VTEw7Cj4gKwlmLT56
Y19zaXplID0gMDsKPiArCWYtPnpjX29mZnNldCA9IDA7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K
PiArCj4gK3N0YXRpYyB2b2lkIF9mY2FsbF9mcmVlKHN0cnVjdCB1a19hbGxvYyAqYSwgc3RydWN0
IHVrXzlwcmVxX2ZjYWxsICpmKQo+ICt7Cj4gKwlVS19BU1NFUlQoYSk7Cj4gKwlVS19BU1NFUlQo
Zik7Cj4gKwo+ICsJaWYgKGYtPmJ1ZikKPiArCQl1a19mcmVlKGEsIGYtPmJ1Zik7Cj4gK30KPiAr
Cj4gK3N0cnVjdCB1a185cHJlcSAqdWtfOXByZXFfYWxsb2Moc3RydWN0IHVrX2FsbG9jICphLCB1
aW50MzJfdCBzaXplKQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKPiArCWludCByYzsK
PiArCj4gKwlyZXEgPSB1a19jYWxsb2MoYSwgMSwgc2l6ZW9mKCpyZXEpKTsKPiArCWlmIChyZXEg
PT0gTlVMTCkKPiArCQlnb3RvIG91dDsKPiArCj4gKwlyYyA9IF9mY2FsbF9hbGxvYyhhLCAmcmVx
LT54bWl0LCBzaXplKTsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXRfZnJlZTsKPiArCj4g
KwlyYyA9IF9mY2FsbF9hbGxvYyhhLCAmcmVxLT5yZWN2LCBNQVgoc2l6ZSwgVUtfOVBfUkVSUk9S
X01BWFNJWkUpKTsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXRfZnJlZTsKPiArCj4gKwlV
S19JTklUX0xJU1RfSEVBRCgmcmVxLT5fbGlzdCk7Cj4gKwlyZXEtPl9hID0gYTsKPiArCXVrX3Jl
ZmNvdW50X2luaXQoJnJlcS0+cmVmY291bnQsIDEpOwo+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQK
PiArCXVrX3dhaXRxX2luaXQoJnJlcS0+d3EpOwo+ICsjZW5kaWYKPiArCj4gKwkvKgo+ICsJICog
QXNzdW1lIHRoZSBoZWFkZXIgaGFzIGFscmVhZHkgYmVlbiB3cml0dGVuLgo+ICsJICogVGhlIGhl
YWRlciBpdHNlbGYgd2lsbCBiZSB3cml0dGVuIG9uIHVrXzlwcmVxX3JlYWR5KCksIHdoZW4gdGhl
Cj4gKwkgKiBhY3R1YWwgbWVzc2FnZSBzaXplIGlzIGtub3duLgo+ICsJICovCj4gKwlyZXEtPnht
aXQub2Zmc2V0ID0gVUtfOVBfSEVBREVSX1NJWkU7Cj4gKwo+ICsJcmV0dXJuIHJlcTsKPiArCj4g
K291dF9mcmVlOgo+ICsJX2ZjYWxsX2ZyZWUoYSwgJnJlcS0+cmVjdik7Cj4gKwlfZmNhbGxfZnJl
ZShhLCAmcmVxLT54bWl0KTsKPiArCXVrX2ZyZWUoYSwgcmVxKTsKPiArb3V0Ogo+ICsJcmV0dXJu
IE5VTEw7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9yZXFfZnJlZShzdHJ1Y3QgdWtfOXByZXEg
KnJlcSkKPiArewo+ICsJX2ZjYWxsX2ZyZWUocmVxLT5fYSwgJnJlcS0+cmVjdik7Cj4gKwlfZmNh
bGxfZnJlZShyZXEtPl9hLCAmcmVxLT54bWl0KTsKPiArCXVrX2ZyZWUocmVxLT5fYSwgcmVxKTsK
PiArfQo+ICsKPiArdm9pZCB1a185cHJlcV9nZXQoc3RydWN0IHVrXzlwcmVxICpyZXEpCj4gK3sK
PiArCXVrX3JlZmNvdW50X2FjcXVpcmUoJnJlcS0+cmVmY291bnQpOwo+ICt9Cj4gKwo+ICtpbnQg
dWtfOXByZXFfcHV0KHN0cnVjdCB1a185cHJlcSAqcmVxKQo+ICt7Cj4gKwlpbnQgbGFzdDsKPiAr
Cj4gKwlsYXN0ID0gdWtfcmVmY291bnRfcmVsZWFzZSgmcmVxLT5yZWZjb3VudCk7Cj4gKwlpZiAo
bGFzdCkKPiArCQlfcmVxX2ZyZWUocmVxKTsKPiArCj4gKwlyZXR1cm4gbGFzdDsKPiArfQo+ICsK
PiArc3RhdGljIGludCBfZmNhbGxfd3JpdGUoc3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmY2FsbCwg
Y29uc3Qgdm9pZCAqYnVmLAo+ICsJCXVpbnQzMl90IHNpemUpCj4gK3sKPiArCWlmIChmY2FsbC0+
b2Zmc2V0ICsgc2l6ZSA+IGZjYWxsLT5zaXplKQo+ICsJCXJldHVybiAtRU5PQlVGUzsKPiArCj4g
KwltZW1jcHkoKGNoYXIgKilmY2FsbC0+YnVmICsgZmNhbGwtPm9mZnNldCwgYnVmLCBzaXplKTsK
PiArCWZjYWxsLT5vZmZzZXQgKz0gc2l6ZTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0
aWMgaW50IF9mY2FsbF9zZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmLCBjb25zdCBj
aGFyICpmbXQsIC4uLik7Cj4gKwo+ICtzdGF0aWMgaW50IF9mY2FsbF92c2VyaWFsaXplKHN0cnVj
dCB1a185cHJlcV9mY2FsbCAqZmNhbGwsIGNvbnN0IGNoYXIgKmZtdCwKPiArCQkJdmFfbGlzdCB2
bCkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCj4gKwl3aGlsZSAoKmZtdCkgewo+ICsJCXN3aXRj
aCAoKmZtdCkgewo+ICsJCWNhc2UgJ2InOiB7Cj4gKwkJCXVpbnQ4X3QgeDsKPiArCj4gKwkJCXgg
PSB2YV9hcmcodmwsIHVuc2lnbmVkIGludCk7Cj4gKwkJCXJjID0gX2ZjYWxsX3dyaXRlKGZjYWxs
LCAmeCwgc2l6ZW9mKHgpKTsKPiArCQkJaWYgKHJjIDwgMCkKPiArCQkJCWdvdG8gb3V0Owo+ICsJ
CQlicmVhazsKPiArCQl9Cj4gKwkJY2FzZSAndyc6IHsKPiArCQkJdWludDE2X3QgeDsKPiArCj4g
KwkJCXggPSB2YV9hcmcodmwsIHVuc2lnbmVkIGludCk7Cj4gKwkJCXJjID0gX2ZjYWxsX3dyaXRl
KGZjYWxsLCAmeCwgc2l6ZW9mKHgpKTsKPiArCQkJaWYgKHJjIDwgMCkKPiArCQkJCWdvdG8gb3V0
Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJY2FzZSAnZCc6IHsKPiArCQkJdWludDMyX3QgeDsK
PiArCj4gKwkJCXggPSB2YV9hcmcodmwsIHVpbnQzMl90KTsKPiArCQkJcmMgPSBfZmNhbGxfd3Jp
dGUoZmNhbGwsICZ4LCBzaXplb2YoeCkpOwo+ICsJCQlpZiAocmMgPCAwKQo+ICsJCQkJZ290byBv
dXQ7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQljYXNlICdxJzogewo+ICsJCQl1aW50NjRfdCB4
Owo+ICsKPiArCQkJeCA9IHZhX2FyZyh2bCwgdWludDY0X3QpOwo+ICsJCQlyYyA9IF9mY2FsbF93
cml0ZShmY2FsbCwgJngsIHNpemVvZih4KSk7Cj4gKwkJCWlmIChyYyA8IDApCj4gKwkJCQlnb3Rv
IG91dDsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWNhc2UgJ3MnOiB7Cj4gKwkJCXN0cnVjdCB1
a185cF9zdHIgKnA7Cj4gKwo+ICsJCQlwID0gdmFfYXJnKHZsLCBzdHJ1Y3QgdWtfOXBfc3RyICop
Owo+ICsJCQlyYyA9IF9mY2FsbF93cml0ZShmY2FsbCwgJnAtPnNpemUsIHNpemVvZihwLT5zaXpl
KSk7Cj4gKwkJCWlmIChyYyA8IDApCj4gKwkJCQlnb3RvIG91dDsKPiArCQkJcmMgPSBfZmNhbGxf
d3JpdGUoZmNhbGwsIHAtPmRhdGEsIHAtPnNpemUpOwo+ICsJCQlpZiAocmMgPCAwKQo+ICsJCQkJ
Z290byBvdXQ7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQljYXNlICdRJzogewo+ICsJCQlzdHJ1
Y3QgdWtfOXBfcWlkICpwOwo+ICsKPiArCQkJcCA9IHZhX2FyZyh2bCwgc3RydWN0IHVrXzlwX3Fp
ZCAqKTsKPiArCQkJcmMgPSBfZmNhbGxfc2VyaWFsaXplKGZjYWxsLCAiYmRxIiwgcC0+dHlwZSwK
PiArCQkJCQlwLT52ZXJzaW9uLCBwLT5wYXRoKTsKPiArCQkJaWYgKHJjIDwgMCkKPiArCQkJCWdv
dG8gb3V0Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJY2FzZSAnUyc6IHsKPiArCQkJc3RydWN0
IHVrXzlwX3N0YXQgKnA7Cj4gKwo+ICsJCQlwID0gdmFfYXJnKHZsLCBzdHJ1Y3QgdWtfOXBfc3Rh
dCAqKTsKPiArCQkJcmMgPSBfZmNhbGxfc2VyaWFsaXplKGZjYWxsLCAid3dkUWRkZHFzc3Nzc2Rk
ZCIsCj4gKwkJCQkJcC0+c2l6ZSwgcC0+dHlwZSwgcC0+ZGV2LCAmcC0+cWlkLAo+ICsJCQkJCXAt
Pm1vZGUsIHAtPmF0aW1lLCBwLT5tdGltZSwgcC0+bGVuZ3RoLAo+ICsJCQkJCSZwLT5uYW1lLCAm
cC0+dWlkLCAmcC0+Z2lkLCAmcC0+bXVpZCwKPiArCQkJCQkmcC0+ZXh0ZW5zaW9uLCBwLT5uX3Vp
ZCwgcC0+bl9naWQsCj4gKwkJCQkJcC0+bl9tdWlkKTsKPiArCQkJaWYgKHJjIDwgMCkKPiArCQkJ
CWdvdG8gb3V0Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJZGVmYXVsdDoKPiArCQkJcmMgPSAt
RUlOVkFMOwo+ICsJCQlnb3RvIG91dDsKPiArCQl9Cj4gKwo+ICsJCWZtdCsrOwo+ICsJfQo+ICsK
PiArb3V0Ogo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IF9mY2FsbF9zZXJp
YWxpemUoc3RydWN0IHVrXzlwcmVxX2ZjYWxsICpmLCBjb25zdCBjaGFyICpmbXQsIC4uLikKPiAr
ewo+ICsJdmFfbGlzdCB2bDsKPiArCWludCByYzsKPiArCj4gKwl2YV9zdGFydCh2bCwgZm10KTsK
PiArCXJjID0gX2ZjYWxsX3ZzZXJpYWxpemUoZiwgZm10LCB2bCk7Cj4gKwl2YV9lbmQodmwpOwo+
ICsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAraW50IHVrXzlwcmVxX3ZzZXJpYWxpemUoc3Ry
dWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCB2bCkKPiArewo+ICsJ
aW50IHJjOwo+ICsKPiArCVVLX0FTU0VSVChyZXEpOwo+ICsJVUtfQVNTRVJUKFVLX1JFQURfT05D
RShyZXEtPnN0YXRlKSA9PSBVS185UFJFUV9JTklUSUFMSVpFRCk7Cj4gKwlyYyA9IF9mY2FsbF92
c2VyaWFsaXplKCZyZXEtPnhtaXQsIGZtdCwgdmwpOwo+ICsKPiArCXJldHVybiByYzsKPiArfQo+
ICsKPiAraW50IHVrXzlwcmVxX3NlcmlhbGl6ZShzdHJ1Y3QgdWtfOXByZXEgKnJlcSwgY29uc3Qg
Y2hhciAqZm10LCAuLi4pCj4gK3sKPiArCXZhX2xpc3Qgdmw7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJ
dmFfc3RhcnQodmwsIGZtdCk7Cj4gKwlyYyA9IHVrXzlwcmVxX3ZzZXJpYWxpemUocmVxLCBmbXQs
IHZsKTsKPiArCXZhX2VuZCh2bCk7Cj4gKwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0
aWMgaW50IF9mY2FsbF9yZWFkKHN0cnVjdCB1a185cHJlcV9mY2FsbCAqZmNhbGwsIHZvaWQgKmJ1
ZiwgdWludDMyX3Qgc2l6ZSkKPiArewo+ICsJaWYgKGZjYWxsLT5vZmZzZXQgKyBzaXplID4gZmNh
bGwtPnNpemUpCj4gKwkJcmV0dXJuIC1FTk9CVUZTOwo+ICsKPiArCW1lbWNweShidWYsIChjaGFy
ICopZmNhbGwtPmJ1ZiArIGZjYWxsLT5vZmZzZXQsIHNpemUpOwo+ICsJZmNhbGwtPm9mZnNldCAr
PSBzaXplOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgX2ZjYWxsX2Rlc2Vy
aWFsaXplKHN0cnVjdCB1a185cHJlcV9mY2FsbCAqZiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwo+
ICsKPiArc3RhdGljIGludCBfZmNhbGxfdmRlc2VyaWFsaXplKHN0cnVjdCB1a185cHJlcV9mY2Fs
bCAqZmNhbGwsCj4gKwkJCSAgICAgIGNvbnN0IGNoYXIgKmZtdCwKPiArCQkJICAgICAgdmFfbGlz
dCB2bCkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCj4gKwl3aGlsZSAoKmZtdCkgewo+ICsJCXN3
aXRjaCAoKmZtdCkgewo+ICsJCWNhc2UgJ2InOiB7Cj4gKwkJCXVpbnQ4X3QgKng7Cj4gKwo+ICsJ
CQl4ID0gdmFfYXJnKHZsLCB1aW50OF90ICopOwo+ICsJCQlyYyA9IF9mY2FsbF9yZWFkKGZjYWxs
LCB4LCBzaXplb2YoKngpKTsKPiArCQkJaWYgKHJjIDwgMCkKPiArCQkJCWdvdG8gb3V0Owo+ICsJ
CQlicmVhazsKPiArCQl9Cj4gKwkJY2FzZSAndyc6IHsKPiArCQkJdWludDE2X3QgKng7Cj4gKwo+
ICsJCQl4ID0gdmFfYXJnKHZsLCB1aW50MTZfdCAqKTsKPiArCQkJcmMgPSBfZmNhbGxfcmVhZChm
Y2FsbCwgeCwgc2l6ZW9mKCp4KSk7Cj4gKwkJCWlmIChyYyA8IDApCj4gKwkJCQlnb3RvIG91dDsK
PiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJCWNhc2UgJ2QnOiB7Cj4gKwkJCXVpbnQzMl90ICp4Owo+
ICsKPiArCQkJeCA9IHZhX2FyZyh2bCwgdWludDMyX3QgKik7Cj4gKwkJCXJjID0gX2ZjYWxsX3Jl
YWQoZmNhbGwsIHgsIHNpemVvZigqeCkpOwo+ICsJCQlpZiAocmMgPCAwKQo+ICsJCQkJZ290byBv
dXQ7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQljYXNlICdxJzogewo+ICsJCQl1aW50NjRfdCAq
eDsKPiArCj4gKwkJCXggPSB2YV9hcmcodmwsIHVpbnQ2NF90ICopOwo+ICsJCQlyYyA9IF9mY2Fs
bF9yZWFkKGZjYWxsLCB4LCBzaXplb2YoKngpKTsKPiArCQkJaWYgKHJjIDwgMCkKPiArCQkJCWdv
dG8gb3V0Owo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwkJY2FzZSAncyc6IHsKPiArCQkJc3RydWN0
IHVrXzlwX3N0ciAqcDsKPiArCj4gKwkJCXAgPSB2YV9hcmcodmwsIHN0cnVjdCB1a185cF9zdHIg
Kik7Cj4gKwkJCXJjID0gX2ZjYWxsX3JlYWQoZmNhbGwsICZwLT5zaXplLCBzaXplb2YocC0+c2l6
ZSkpOwo+ICsJCQlpZiAocmMgPCAwKQo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJCXAtPmRhdGEgPSAo
Y2hhciAqKWZjYWxsLT5idWYgKyBmY2FsbC0+b2Zmc2V0Owo+ICsJCQlmY2FsbC0+b2Zmc2V0ICs9
IHAtPnNpemU7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQljYXNlICdRJzogewo+ICsJCQlzdHJ1
Y3QgdWtfOXBfcWlkICpwOwo+ICsKPiArCQkJcCA9IHZhX2FyZyh2bCwgc3RydWN0IHVrXzlwX3Fp
ZCAqKTsKPiArCQkJcmMgPSBfZmNhbGxfZGVzZXJpYWxpemUoZmNhbGwsICJiZHEiLCAmcC0+dHlw
ZSwKPiArCQkJCQkmcC0+dmVyc2lvbiwgJnAtPnBhdGgpOwo+ICsJCQlpZiAocmMgPCAwKQo+ICsJ
CQkJZ290byBvdXQ7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQljYXNlICdTJzogewo+ICsJCQlz
dHJ1Y3QgdWtfOXBfc3RhdCAqcDsKPiArCj4gKwkJCXAgPSB2YV9hcmcodmwsIHN0cnVjdCB1a185
cF9zdGF0ICopOwo+ICsJCQlyYyA9IF9mY2FsbF9kZXNlcmlhbGl6ZShmY2FsbCwgInd3ZFFkZGRx
c3Nzc3NkZGQiLAo+ICsJCQkJCSZwLT5zaXplLCAmcC0+dHlwZSwgJnAtPmRldiwgJnAtPnFpZCwK
PiArCQkJCQkmcC0+bW9kZSwgJnAtPmF0aW1lLCAmcC0+bXRpbWUsCj4gKwkJCQkJJnAtPmxlbmd0
aCwgJnAtPm5hbWUsICZwLT51aWQsICZwLT5naWQsCj4gKwkJCQkJJnAtPm11aWQsICZwLT5leHRl
bnNpb24sICZwLT5uX3VpZCwKPiArCQkJCQkmcC0+bl9naWQsICZwLT5uX211aWQpOwo+ICsJCQlp
ZiAocmMgPCAwKQo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCQlkZWZh
dWx0Ogo+ICsJCQlyYyA9IC1FSU5WQUw7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0KPiArCj4gKwkJ
Zm10Kys7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRp
YyBpbnQgX2ZjYWxsX2Rlc2VyaWFsaXplKHN0cnVjdCB1a185cHJlcV9mY2FsbCAqZiwgY29uc3Qg
Y2hhciAqZm10LCAuLi4pCj4gK3sKPiArCXZhX2xpc3Qgdmw7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJ
dmFfc3RhcnQodmwsIGZtdCk7Cj4gKwlyYyA9IF9mY2FsbF92ZGVzZXJpYWxpemUoZiwgZm10LCB2
bCk7Cj4gKwl2YV9lbmQodmwpOwo+ICsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAraW50IHVr
XzlwcmVxX3ZkZXNlcmlhbGl6ZShzdHJ1Y3QgdWtfOXByZXEgKnJlcSwgY29uc3QgY2hhciAqZm10
LCB2YV9saXN0IHZsKQo+ICt7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJVUtfQVNTRVJUKHJlcSk7Cj4g
KwlVS19BU1NFUlQoVUtfUkVBRF9PTkNFKHJlcS0+c3RhdGUpID09IFVLXzlQUkVRX1JFQ0VJVkVE
KTsKPiArCXJjID0gX2ZjYWxsX3ZkZXNlcmlhbGl6ZSgmcmVxLT5yZWN2LCBmbXQsIHZsKTsKPiAr
Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCB1a185cHJlcV9kZXNlcmlhbGl6ZShzdHJ1
Y3QgdWtfOXByZXEgKnJlcSwgY29uc3QgY2hhciAqZm10LCAuLi4pCj4gK3sKPiArCXZhX2xpc3Qg
dmw7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJdmFfc3RhcnQodmwsIGZtdCk7Cj4gKwlyYyA9IHVrXzlw
cmVxX3ZkZXNlcmlhbGl6ZShyZXEsIGZtdCwgdmwpOwo+ICsJdmFfZW5kKHZsKTsKPiArCj4gKwly
ZXR1cm4gcmM7Cj4gK30KPiArCj4gK2ludCB1a185cHJlcV9jb3B5X3RvKHN0cnVjdCB1a185cHJl
cSAqcmVxLCB2b2lkICpidWYsIHVpbnQzMl90IHNpemUpCj4gK3sKPiArCXJldHVybiBfZmNhbGxf
cmVhZCgmcmVxLT5yZWN2LCBidWYsIHNpemUpOwo+ICt9Cj4gKwo+ICtpbnQgdWtfOXByZXFfY29w
eV9mcm9tKHN0cnVjdCB1a185cHJlcSAqcmVxLCBjb25zdCB2b2lkICpidWYsIHVpbnQzMl90IHNp
emUpCj4gK3sKPiArCXJldHVybiBfZmNhbGxfd3JpdGUoJnJlcS0+eG1pdCwgYnVmLCBzaXplKTsK
PiArfQo+ICsKPiAraW50IHVrXzlwcmVxX3JlYWR5KHN0cnVjdCB1a185cHJlcSAqcmVxLCBlbnVt
IHVrXzlwcmVxX3pjZGlyIHpjX2RpciwKPiArCQl2b2lkICp6Y19idWYsIHVpbnQzMl90IHpjX3Np
emUsIHVpbnQzMl90IHpjX29mZnNldCkKPiArewo+ICsJaW50IHJjOwo+ICsJdWludDMyX3QgdG90
YWxfc2l6ZTsKPiArCXVpbnQzMl90IHRvdGFsX3NpemVfd2l0aF96YzsKPiArCj4gKwlVS19BU1NF
UlQocmVxKTsKPiArCj4gKwlpZiAoVUtfUkVBRF9PTkNFKHJlcS0+c3RhdGUpICE9IFVLXzlQUkVR
X0lOSVRJQUxJWkVEKSB7Cj4gKwkJcmMgPSAtRUlPOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsK
PiArCS8qIFNhdmUgY3VycmVudCBvZmZzZXQgYXMgdGhlIHNpemUgb2YgdGhlIG1lc3NhZ2UuICov
Cj4gKwl0b3RhbF9zaXplID0gcmVxLT54bWl0Lm9mZnNldDsKPiArCj4gKwl0b3RhbF9zaXplX3dp
dGhfemMgPSB0b3RhbF9zaXplOwo+ICsJaWYgKHpjX2RpciA9PSBVS185UFJFUV9aQ0RJUl9XUklU
RSkKPiArCQl0b3RhbF9zaXplX3dpdGhfemMgKz0gemNfc2l6ZTsKPiArCj4gKwkvKiBTZXJpYWxp
emUgdGhlIGhlYWRlci4gKi8KPiArCXJlcS0+eG1pdC5vZmZzZXQgPSAwOwo+ICsJcmMgPSB1a185
cHJlcV9zZXJpYWxpemUocmVxLCAiZGJ3IiwgdG90YWxfc2l6ZV93aXRoX3pjLCByZXEtPnhtaXQu
dHlwZSwKPiArCQkJcmVxLT50YWcpOwo+ICsJaWYgKHJjIDwgMCkKPiArCQlnb3RvIG91dDsKPiAr
Cj4gKwkvKiBSZXNldCBvZmZzZXQgYW5kIHNpemUgdG8gc2FuZSB2YWx1ZXMuICovCj4gKwlyZXEt
PnhtaXQub2Zmc2V0ID0gMDsKPiArCXJlcS0+eG1pdC5zaXplID0gdG90YWxfc2l6ZTsKPiArCj4g
KwkvKiBVcGRhdGUgemVybyBjb3B5IGJ1ZmZlcnMuICovCj4gKwlpZiAoemNfZGlyID09IFVLXzlQ
UkVRX1pDRElSX1dSSVRFKSB7Cj4gKwkJcmVxLT54bWl0LnpjX2J1ZiA9IHpjX2J1ZjsKPiArCQly
ZXEtPnhtaXQuemNfc2l6ZSA9IHpjX3NpemU7Cj4gKwkJLyogWmVyby1jb3B5IG9mZnNldCBmb3Ig
d3JpdGVzIG11c3Qgc3RhcnQgYXQgdGhlIGVuZCBvZiBidWYuICovCj4gKwkJcmVxLT54bWl0Lnpj
X29mZnNldCA9IHJlcS0+eG1pdC5zaXplOwo+ICsJfSBlbHNlIGlmICh6Y19kaXIgPT0gVUtfOVBS
RVFfWkNESVJfUkVBRCkgewo+ICsJCXJlcS0+cmVjdi56Y19idWYgPSB6Y19idWY7Cj4gKwkJcmVx
LT5yZWN2LnpjX3NpemUgPSB6Y19zaXplOwo+ICsJCXJlcS0+cmVjdi56Y19vZmZzZXQgPSB6Y19v
ZmZzZXQ7Cj4gKwkJLyogVGhlIHJlY2VpdmUgYnVmZmVyIG11c3QgZW5kIGJlZm9yZSB0aGUgemMg
YnVmLiAqLwo+ICsJCXJlcS0+cmVjdi5zaXplID0gemNfb2Zmc2V0Owo+ICsJfQo+ICsKPiArCS8q
IFVwZGF0ZSB0aGUgc3RhdGUuICovCj4gKwlVS19XUklURV9PTkNFKHJlcS0+c3RhdGUsIFVLXzlQ
UkVRX1JFQURZKTsKPiArCj4gK291dDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAraW50IHVr
XzlwcmVxX3JlY2VpdmVfY2Ioc3RydWN0IHVrXzlwcmVxICpyZXEsIHVpbnQzMl90IHJlY3Zfc2l6
ZSkKPiArewo+ICsJdWludDMyX3Qgc2l6ZTsKPiArCXVpbnQxNl90IHRhZzsKPiArCWludCByYzsK
PiArCj4gKwlVS19BU1NFUlQocmVxKTsKPiArCj4gKwkvKiBDaGVjayBzdGF0ZSBhbmQgdGhlIGV4
aXN0ZW5jZSBvZiB0aGUgaGVhZGVyLiAqLwo+ICsJaWYgKFVLX1JFQURfT05DRShyZXEtPnN0YXRl
KSAhPSBVS185UFJFUV9TRU5UKQo+ICsJCXJldHVybiAtRUlPOwo+ICsJaWYgKHJlY3Zfc2l6ZSA8
IFVLXzlQX0hFQURFUl9TSVpFKQo+ICsJCXJldHVybiAtRUlPOwo+ICsKPiArCS8qIERlc2VyaWFs
aXplIHRoZSBoZWFkZXIgaW50byByZXF1ZXN0IGZpZWxkcy4gKi8KPiArCXJlcS0+cmVjdi5vZmZz
ZXQgPSAwOwo+ICsJcmVxLT5yZWN2LnNpemUgPSByZWN2X3NpemU7Cj4gKwlyYyA9IF9mY2FsbF9k
ZXNlcmlhbGl6ZSgmcmVxLT5yZWN2LCAiZGJ3IiwgJnNpemUsCj4gKwkJCSZyZXEtPnJlY3YudHlw
ZSwgJnRhZyk7Cj4gKwo+ICsJLyogQ2hlY2sgc2FuaXR5IG9mIGRlc2VyaWFsaXplZCB2YWx1ZXMu
ICovCj4gKwlpZiAocmMgPCAwKQo+ICsJCXJldHVybiByYzsKPiArCWlmIChzaXplID4gcmVjdl9z
aXplKQo+ICsJCXJldHVybiAtRUlPOwo+ICsJaWYgKHJlcS0+dGFnICE9IHRhZykKPiArCQlyZXR1
cm4gLUVJTzsKPiArCj4gKwkvKiBGaXggdGhlIHJlY2VpdmUgc2l6ZSBmb3IgemVyby1jb3B5IHJl
cXVlc3RzLiAqLwo+ICsJaWYgKHJlcS0+cmVjdi56Y19idWYgJiYgcmVxLT5yZWN2LnR5cGUgIT0g
VUtfOVBfUkVSUk9SKQo+ICsJCXJlcS0+cmVjdi5zaXplID0gcmVxLT5yZWN2LnpjX29mZnNldDsK
PiArCWVsc2UKPiArCQlyZXEtPnJlY3Yuc2l6ZSA9IHNpemU7Cj4gKwo+ICsJLyogVXBkYXRlIHRo
ZSBzdGF0ZS4gKi8KPiArCVVLX1dSSVRFX09OQ0UocmVxLT5zdGF0ZSwgVUtfOVBSRVFfUkVDRUlW
RUQpOwo+ICsKPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gKwkvKiBOb3RpZnkgYW55IHdhaXRp
bmcgdGhyZWFkcy4gKi8KPiArCXVrX3dhaXRxX3dha2VfdXAoJnJlcS0+d3EpOwo+ICsjZW5kaWYK
PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IHVrXzlwcmVxX3dhaXRyZXBseShzdHJ1
Y3QgdWtfOXByZXEgKnJlcSkKPiArewo+ICsJaW50IHJjOwo+ICsKPiArI2lmIENPTkZJR19MSUJV
S1NDSEVECj4gKwl1a193YWl0cV93YWl0X2V2ZW50KCZyZXEtPndxLCByZXEtPnN0YXRlID09IFVL
XzlQUkVRX1JFQ0VJVkVEKTsKPiArI2Vsc2UKPiArCXdoaWxlIChVS19SRUFEX09OQ0UocmVxLT5z
dGF0ZSkgIT0gVUtfOVBSRVFfUkVDRUlWRUQpCj4gKwkJOwo+ICsjZW5kaWYKPiArCj4gKwkvKiBD
aGVjayBmb3IgOVAgc2VydmVyLXNpZGUgZXJyb3JzLiAqLwo+ICsJcmMgPSB1a185cHJlcV9lcnJv
cihyZXEpOwo+ICsKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAraW50IHVrXzlwcmVxX2Vycm9y
KHN0cnVjdCB1a185cHJlcSAqcmVxKQo+ICt7Cj4gKwl1aW50MzJfdCBlcnJjb2RlOwo+ICsJc3Ry
dWN0IHVrXzlwX3N0ciBlcnJvcjsKPiArCWludCByYyA9IDA7Cj4gKwo+ICsJaWYgKFVLX1JFQURf
T05DRShyZXEtPnN0YXRlKSAhPSBVS185UFJFUV9SRUNFSVZFRCkKPiArCQlyZXR1cm4gLUVJTzsK
PiArCWlmIChyZXEtPnJlY3YudHlwZSAhPSBVS185UF9SRVJST1IpCj4gKwkJcmV0dXJuIDA7Cj4g
Kwo+ICsJLyoKPiArCSAqIFRoZSByZXF1ZXN0IHNob3VsZCBub3QgaGF2ZSBoYWQgYW55IGRhdGEg
ZGVzZXJpYWxpemVkIGZyb20gaXQgcHJpb3IKPiArCSAqIHRvIHRoaXMgY2FsbC4KPiArCSAqLwo+
ICsJVUtfQlVHT04ocmVxLT5yZWN2Lm9mZnNldCAhPSBVS185UF9IRUFERVJfU0laRSk7Cj4gKwo+
ICsJcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJzZCIsICZlcnJvciwgJmVycmNvZGUp
Owo+ICsJaWYgKHJjIDwgMCkKPiArCQlyZXR1cm4gcmM7Cj4gKwo+ICsJdWtfcHJfZGVidWcoIlJF
UlJPUiAlLipzICVkXG4iLCBlcnJvci5zaXplLCBlcnJvci5kYXRhLCBlcnJjb2RlKTsKPiArCWlm
IChlcnJjb2RlID09IDAgfHwgZXJyY29kZSA+PSA1MTIpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+
ICsJcmV0dXJuIC1lcnJjb2RlOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYi91azlwL01ha2VmaWxl
LnVrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsKPiBpbmRleCBiMTA3MWEwZTdkM2MuLmFlYTcyMmE1
ODViOSAxMDA2NDQKPiAtLS0gYS9saWIvdWs5cC9NYWtlZmlsZS51awo+ICsrKyBiL2xpYi91azlw
L01ha2VmaWxlLnVrCj4gQEAgLTQsMyArNCw0IEBAIENJTkNMVURFUy0kKENPTkZJR19MSUJVSzlQ
KQkJKz0gLUkkKExJQlVLOVBfQkFTRSkvaW5jbHVkZQo+ICAgQ1hYSU5DTFVERVMtJChDT05GSUdf
TElCVUs5UCkJCSs9IC1JJChMSUJVSzlQX0JBU0UpL2luY2x1ZGUKPiAgIAo+ICAgTElCVUs5UF9T
UkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwZGV2X3RyYW5zLmMKPiArTElCVUs5UF9TUkNTLXkg
Kz0gJChMSUJVSzlQX0JBU0UpLzlwcmVxLmMKPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhwb3J0
c3ltcy51ayBiL2xpYi91azlwL2V4cG9ydHN5bXMudWsKPiBpbmRleCA0NmY0MDA4MjVhZjguLjQy
Njc3NjczY2QzNCAxMDA2NDQKPiAtLS0gYS9saWIvdWs5cC9leHBvcnRzeW1zLnVrCj4gKysrIGIv
bGliL3VrOXAvZXhwb3J0c3ltcy51awo+IEBAIC0yLDMgKzIsMTQgQEAgdWtfOXBkZXZfdHJhbnNf
cmVnaXN0ZXIKPiAgIHVrXzlwZGV2X3RyYW5zX2J5X25hbWUKPiAgIHVrXzlwZGV2X3RyYW5zX2dl
dF9kZWZhdWx0Cj4gICB1a185cGRldl90cmFuc19zZXRfZGVmYXVsdAo+ICt1a185cHJlcV9nZXQK
PiArdWtfOXByZXFfcHV0Cj4gK3VrXzlwcmVxX3ZzZXJpYWxpemUKPiArdWtfOXByZXFfc2VyaWFs
aXplCj4gK3VrXzlwcmVxX3ZkZXNlcmlhbGl6ZQo+ICt1a185cHJlcV9kZXNlcmlhbGl6ZQo+ICt1
a185cHJlcV9jb3B5X3RvCj4gK3VrXzlwcmVxX2NvcHlfZnJvbQo+ICt1a185cHJlcV9yZWNlaXZl
X2NiCj4gK3VrXzlwcmVxX3dhaXRyZXBseQo+ICt1a185cHJlcV9lcnJvcgo+IGRpZmYgLS1naXQg
YS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwcmVxLmggYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlwcmVx
LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZWU0ZDJhZjg2
MzVkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXByZXEuaAo+
IEBAIC0wLDAgKzEsMzAwIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D
bGF1c2UgKi8KPiArLyoKPiArICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWls
LmNvbT4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhu
aWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+
ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0
IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAg
ICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
Lgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+
ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4g
KyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBN
QVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4g
KyNpZm5kZWYgX19VS185UFJFUV9fCj4gKyNkZWZpbmUgX19VS185UFJFUV9fCj4gKwo+ICsjaW5j
bHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8
dWsvYWxsb2MuaD4KPiArI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiArI2luY2x1ZGUgPHVr
L2xpc3QuaD4KPiArI2luY2x1ZGUgPHVrL3JlZmNvdW50Lmg+Cj4gKyNpZiBDT05GSUdfTElCVUtT
Q0hFRAo+ICsjaW5jbHVkZSA8dWsvd2FpdF90eXBlcy5oPgo+ICsjZW5kaWYKPiArCj4gKyNpZmRl
ZiBfX2NwbHVzcGx1cwo+ICtleHRlcm4gIkMiIHsKPiArI2VuZGlmCj4gKwo+ICsvKgo+ICsgKiBU
aGUgaGVhZGVyIGNvbnNpc3RzIG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzOiBzaXplICg0IGJ5dGVz
KSwgdHlwZSAoMSkgYW5kCj4gKyAqIHRhZyAoMikuCj4gKyAqLwo+ICsjZGVmaW5lIFVLXzlQX0hF
QURFUl9TSVpFICAgICAgICAgICAgICAgN1UKPiArCj4gKy8qCj4gKyAqIFRoZSBtYXhpbXVtIGJ1
ZmZlciBzaXplIGZvciBhbiBlcnJvciByZXBseSBpcyBnaXZlbiBieSB0aGUgaGVhZGVyICg3KSwg
dGhlCj4gKyAqIHN0cmluZyBzaXplICgyKSwgdGhlIGVycm9yIHN0cmluZyAoMTI4KSBhbmQgdGhl
IGVycm9yIGNvZGUgKDQpOiBpbiB0b3RhbCwKPiArICogMTQxLgo+ICsgKi8KPiArI2RlZmluZSBV
S185UF9SRVJST1JfTUFYU0laRSAgICAgICAgICAgIDE0MVUKPiArCj4gKy8qKgo+ICsgKiBAaW50
ZXJuYWwKPiArICoKPiArICogRGVzY3JpYmVzIHRoZSA5cCB6ZXJvLWNvcHkgZGlyZWN0aW9uLgo+
ICsgKi8KPiArZW51bSB1a185cHJlcV96Y2RpciB7Cj4gKwlVS185UFJFUV9aQ0RJUl9OT05FLAo+
ICsJVUtfOVBSRVFfWkNESVJfUkVBRCwKPiArCVVLXzlQUkVRX1pDRElSX1dSSVRFLAo+ICt9Owo+
ICsKPiArLyoqCj4gKyAqIEBpbnRlcm5hbAo+ICsgKgo+ICsgKiBEZXNjcmliZXMgYSA5cCBmY2Fs
bCBzdHJ1Y3R1cmUuCj4gKyAqLwo+ICtzdHJ1Y3QgdWtfOXByZXFfZmNhbGwgewo+ICsJLyoKPiAr
CSAqIFRvdGFsIHNpemUgb2YgdGhlIGZjYWxsLiBJbml0aWFsbHksIHRoaXMgaXMgdGhlIGJ1ZmZl
ciBzaXplLgo+ICsJICogQWZ0ZXIgcmVhZHkgKG9uIHhtaXQpIG9yIHJlcGx5IChvbiByZWN2KSwg
dGhpcyB3aWxsIGJlIHRoZSBzaXplIG9mCj4gKwkgKiB0aGUgc2VudC9yZWNlaXZlZCBkYXRhLgo+
ICsJICovCj4gKwl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIHNpemU7Cj4gKwkvKiBU
eXBlIG9mIHRoZSBmY2FsbC4gU2hvdWxkIGJlIFQqIGZvciB0cmFuc21pdCwgUiogZm9yIHJlY2Vp
dmUuICovCj4gKwl1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU7Cj4gKwkvKiBP
ZmZzZXQgd2hpbGUgc2VyaWFsaXppbmcgb3IgZGVzZXJpYWxpemluZy4gKi8KPiArCXVpbnQzMl90
ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Owo+ICsJLyogQnVmZmVyIHBvaW50ZXIuICov
Cj4gKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICAgICpidWY7Cj4gKwo+ICsJLyogWmVy
by1jb3B5IGJ1ZmZlciBwb2ludGVyLiAqLwo+ICsJdm9pZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqemNfYnVmOwo+ICsJLyogWmVyby1jb3B5IGJ1ZmZlciBzaXplLiAqLwo+ICsJdWludDMy
X3QgICAgICAgICAgICAgICAgICAgICAgICB6Y19zaXplOwo+ICsJLyogWmVyby1jb3B5IGJ1ZmZl
ciBvZmZzZXQgaW4gdGhlIDlQIG1lc3NhZ2UuICovCj4gKwl1aW50MzJfdCAgICAgICAgICAgICAg
ICAgICAgICAgIHpjX29mZnNldDsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBEZXNjcmliZXMgdGhl
IHBvc3NpYmxlIHN0YXRlcyBpbiB3aGljaCBhIHJlcXVlc3QgbWF5IGJlLgo+ICsgKgo+ICsgKiAt
IE5PTkU6IFJpZ2h0IGFmdGVyIGFsbG9jYXRpbmcuCj4gKyAqIC0gSU5JVElBTElaRUQ6IFJlcXVl
c3QgaXMgcmVhZHkgdG8gcmVjZWl2ZSBzZXJpYWxpemF0aW9uIGRhdGEuCj4gKyAqIC0gUkVBRFk6
IFJlcXVlc3QgaXMgcmVhZHkgdG8gYmUgc2VudC4KPiArICogLSBSRUNFSVZFRDogVHJhbnNwb3J0
IGxheWVyIGhhcyByZWNlaXZlZCB0aGUgcmVwbHkgYW5kIGltcG9ydGFudCBkYXRhIHN1Y2gKPiAr
ICogICBhcyB0aGUgdGFnLCB0eXBlIGFuZCBzaXplIGhhdmUgYmVlbiB2YWxpZGF0ZWQuCj4gKyAq
Lwo+ICtlbnVtIHVrXzlwcmVxX3N0YXRlIHsKPiArCVVLXzlQUkVRX05PTkUgPSAwLAo+ICsJVUtf
OVBSRVFfSU5JVElBTElaRUQsCj4gKwlVS185UFJFUV9SRUFEWSwKPiArCVVLXzlQUkVRX1NFTlQs
Cj4gKwlVS185UFJFUV9SRUNFSVZFRAo+ICt9Owo+ICsKPiArLyoqCj4gKyAqICBEZXNjcmliZXMg
YSA5UCByZXF1ZXN0Lgo+ICsgKgo+ICsgKiAgVGhpcyBnZXRzIGFsbG9jYXRlZCB2aWEgdWtfOXBk
ZXZfcmVxX2NyZWF0ZSgpLCBhbmQgZnJlZWQgd2hlbiBpdCBpcyBub3QKPiArICogIHJlZmVyZW5j
ZWQgYW55bW9yZS4gQSBjYWxsIHRvIHVrXzlwZGV2X3JlcV9yZW1vdmUoKSBpcyBtYW5kYXRvcnkg
dG8KPiArICogIGNvcnJlY3RseSBmcmVlIHRoaXMgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0
IG9mIHJlcXVlc3RzIG1hbmFnZWQKPiArICogIGJ5IHRoZSA5cCBkZXZpY2UuCj4gKyAqLwo+ICtz
dHJ1Y3QgdWtfOXByZXEgewo+ICsJLyogVHJhbnNtaXQgZmNhbGwuICovCj4gKwlzdHJ1Y3QgdWtf
OXByZXFfZmNhbGwgICAgICAgICAgIHhtaXQ7Cj4gKwkvKiBSZWNlaXZlIGZjYWxsLiAqLwo+ICsJ
c3RydWN0IHVrXzlwcmVxX2ZjYWxsICAgICAgICAgICByZWN2Owo+ICsJLyogU3RhdGUgb2YgdGhl
IHJlcXVlc3QuIFNlZSB0aGUgc3RhdGUgZW51bSBmb3IgZGV0YWlscy4gKi8KPiArCWVudW0gdWtf
OXByZXFfc3RhdGUgICAgICAgICAgICAgc3RhdGU7Cj4gKwkvKiBUYWcgYWxsb2NhdGVkIHRvIHRo
aXMgcmVxdWVzdC4gKi8KPiArCXVpbnQxNl90ICAgICAgICAgICAgICAgICAgICAgICAgdGFnOwo+
ICsJLyogRW50cnkgaW50byB0aGUgbGlzdCBvZiByZXF1ZXN0cyAoQVBJLWludGVybmFsKS4gKi8K
PiArCXN0cnVjdCB1a19saXN0X2hlYWQgICAgICAgICAgICAgX2xpc3Q7Cj4gKwkvKiBAaW50ZXJu
YWwgQWxsb2NhdG9yIHVzZWQgdG8gYWxsb2NhdGUgdGhpcyByZXF1ZXN0LiAqLwo+ICsJc3RydWN0
IHVrX2FsbG9jICAgICAgICAgICAgICAgICAqX2E7Cj4gKwkvKiBUcmFja3MgdGhlIG51bWJlciBv
ZiByZWZlcmVuY2VzIHRvIHRoaXMgc3RydWN0dXJlLiAqLwo+ICsJX19hdG9taWMgICAgICAgICAg
ICAgICAgICAgICAgICByZWZjb3VudDsKPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gKwkvKiBX
YWl0LXF1ZXVlIGZvciBzdGF0ZSBjaGFuZ2VzLiAqLwo+ICsJc3RydWN0IHVrX3dhaXRxICAgICAg
ICAgICAgICAgICB3cTsKPiArI2VuZGlmCj4gK307Cj4gKwo+ICsvKioKPiArICogQGludGVybmFs
Cj4gKyAqIEFsbG9jYXRlcyBhIDlwIHJlcXVlc3QuCj4gKyAqIFNob3VsZCBub3QgYmUgdXNlZCBk
aXJlY3RseSwgdXNlIHVrXzlwZGV2X3JlcV9jcmVhdGUoKSBpbnN0ZWFkLgo+ICsgKgo+ICsgKiBA
cGFyYW0gYQo+ICsgKiAgIEFsbG9jYXRvciB0byB1c2UuCj4gKyAqIEBwYXJhbSBzaXplCj4gKyAq
ICAgTWluaW11bSBzaXplIG9mIHRoZSByZWNlaXZlIGFuZCB0cmFuc21pdCBidWZmZXJzLgo+ICsg
KiBAcmV0dXJuCj4gKyAqICAgLSAoPT1OVUxMKTogT3V0IG9mIG1lbW9yeS4KPiArICogICAtICgh
PU5VTEwpOiBTdWNjZXNzZnVsLgo+ICsgKi8KPiArc3RydWN0IHVrXzlwcmVxICp1a185cHJlcV9h
bGxvYyhzdHJ1Y3QgdWtfYWxsb2MgKmEsIHVpbnQzMl90IHNpemUpOwo+ICsKPiArLyoqCj4gKyAq
IEdldHMgdGhlIDlwIHJlcXVlc3QsIGluY3JlbWVudGluZyB0aGUgcmVmZXJlbmNlIGNvdW50Lgo+
ICsgKgo+ICsgKiBAcGFyYW0gcmVxCj4gKyAqICAgUmVmZXJlbmNlIHRvIHRoZSA5cCByZXF1ZXN0
Lgo+ICsgKi8KPiArdm9pZCB1a185cHJlcV9nZXQoc3RydWN0IHVrXzlwcmVxICpyZXEpOwo+ICsK
PiArLyoqCj4gKyAqIFB1dHMgdGhlIDlwIHJlcXVlc3QsIGRlY3JlbWVudGluZyB0aGUgcmVmZXJl
bmNlIGNvdW50Lgo+ICsgKiBJZiB0aGlzIHdhcyB0aGUgbGFzdCBsaXZlIHJlZmVyZW5jZSwgdGhl
IG1lbW9yeSB3aWxsIGJlIGZyZWVkLgo+ICsgKgo+ICsgKiBAcGFyYW0gcmVxCj4gKyAqICAgUmVm
ZXJlbmNlIHRvIHRoZSA5cCByZXF1ZXN0Lgo+ICsgKiBAcmV0dXJuCj4gKyAqICAgLSAwOiBUaGlz
IHdhcyBub3QgdGhlIGxhc3QgbGl2ZSByZWZlcmVuY2UuCj4gKyAqICAgLSAxOiBUaGlzIHdhcyB0
aGUgbGFzdCBsaXZlIHJlZmVyZW5jZS4KPiArICovCj4gK2ludCB1a185cHJlcV9wdXQoc3RydWN0
IHVrXzlwcmVxICpyZXEpOwo+ICsKPiArLyoKPiArICogVGhlIGZvbGxvd2luZyBmYW1pbHkgb2Yg
c2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uIGZ1bmN0aW9ucyB3b3JrCj4gKyAqIGJ5
IGVtcGxveWluZyBhIHByaW50Zi1saWtlIGZvcm1hdHRpbmcgbWVjaGFuaXNtIGZvciBkYXRhIHR5
cGVzIHN1cHBvcnRlZCBieQo+ICsgKiB0aGUgOXAgcHJvdG9jb2w6Cj4gKyAqIC0gJ2InOiBieXRl
ICh1aW50OF90KQo+ICsgKiAtICd3Jzogd29yZCAodWludDE2X3QpCj4gKyAqIC0gJ2QnOiBkb3Vi
bGUtd29yZCAodWludDMyX3QpCj4gKyAqIC0gJ3EnOiBxdWFkLXdvcmQgKHVpbnQ2NF90KQo+ICsg
KiAtICdzJzogdWtfOXBfc3RyICoKPiArICogLSAnUyc6IHVrXzlwX3N0YXQgKgo+ICsgKgo+ICsg
KiBTaW1pbGFybHkgdG8gdnByaW50ZigpLCB0aGUgdnNlcmlhbGl6ZSgpIGFuZCB2ZGVzZXJpYWxp
emUoKSBmdW5jdGlvbnMgdGFrZQo+ICsgKiBhIHZhX2xpc3QgaW5zdGVhZCBvZiBhIHZhcmlhYmxl
IG51bWJlciBvZiBhcmd1bWVudHMuCj4gKyAqCj4gKyAqIFBvc3NpYmxlIHJldHVybiB2YWx1ZXM6
Cj4gKyAqIC0gMDogT3BlcmF0aW9uIHN1Y2Nlc3NmdWwuCj4gKyAqIC0gKC1FSU5WQUwpOiBJbnZh
bGlkIGZvcm1hdCBzcGVjaWZpZXIuCj4gKyAqIC0gKC1FTk9CVUZTKTogRW5kIG9mIGJ1ZmZlciBy
ZWFjaGVkLgo+ICsgKi8KPiArCj4gK2ludCB1a185cHJlcV92c2VyaWFsaXplKHN0cnVjdCB1a185
cHJlcSAqcmVxLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgdmwpOwo+ICtpbnQgdWtfOXByZXFf
c2VyaWFsaXplKHN0cnVjdCB1a185cHJlcSAqcmVxLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Cj4g
K2ludCB1a185cHJlcV92ZGVzZXJpYWxpemUoc3RydWN0IHVrXzlwcmVxICpyZXEsIGNvbnN0IGNo
YXIgKmZtdCwgdmFfbGlzdCB2bCk7Cj4gK2ludCB1a185cHJlcV9kZXNlcmlhbGl6ZShzdHJ1Y3Qg
dWtfOXByZXEgKnJlcSwgY29uc3QgY2hhciAqZm10LCAuLi4pOwo+ICsKPiArLyoqCj4gKyAqIENv
cGllcyByYXcgZGF0YSBmcm9tIHRoZSByZXF1ZXN0IHJlY2VpdmUgYnVmZmVyIHRvIHRoZSBwcm92
aWRlZCBidWZmZXIuCj4gKyAqCj4gKyAqIEBwYXJhbSByZXEKPiArICogICBSZWZlcmVuY2UgdG8g
dGhlIDlwIHJlcXVlc3QuCj4gKyAqIEBwYXJhbSBidWYKPiArICogICBEZXN0aW5hdGlvbiBidWZm
ZXIuCj4gKyAqIEBwYXJhbSBzaXplCj4gKyAqICAgQW1vdW50IHRvIGNvcHkuCj4gKyAqIFBvc3Np
YmxlIHJldHVybiB2YWx1ZXM6Cj4gKyAqIC0gMDogT3BlcmF0aW9uIHN1Y2Nlc3NmdWwuCj4gKyAq
IC0gKC1FTk9CVUZTKTogRW5kIG9mIGJ1ZmZlciByZWFjaGVkLgo+ICsgKi8KPiAraW50IHVrXzlw
cmVxX2NvcHlfdG8oc3RydWN0IHVrXzlwcmVxICpyZXEsIHZvaWQgKmJ1ZiwgdWludDMyX3Qgc2l6
ZSk7Cj4gKwo+ICsvKioKPiArICogQ29waWVzIHJhdyBkYXRhIGZyb20gdGhlIHByb3ZpZGVkIGJ1
ZmZlciB0byB0aGUgcmVxdWVzdCB0cmFuc21pc3Npb24gYnVmZmVyLgo+ICsgKgo+ICsgKiBAcGFy
YW0gcmVxCj4gKyAqICAgUmVmZXJlbmNlIHRvIHRoZSA5cCByZXF1ZXN0Lgo+ICsgKiBAcGFyYW0g
YnVmCj4gKyAqICAgU291cmNlIGJ1ZmZlci4KPiArICogQHBhcmFtIHNpemUKPiArICogICBBbW91
bnQgdG8gY29weS4KPiArICogUG9zc2libGUgcmV0dXJuIHZhbHVlczoKPiArICogLSAwOiBPcGVy
YXRpb24gc3VjY2Vzc2Z1bC4KPiArICogLSAoLUVOT0JVRlMpOiBFbmQgb2YgYnVmZmVyIHJlYWNo
ZWQuCj4gKyAqLwo+ICtpbnQgdWtfOXByZXFfY29weV9mcm9tKHN0cnVjdCB1a185cHJlcSAqcmVx
LCBjb25zdCB2b2lkICpidWYsIHVpbnQzMl90IHNpemUpOwo+ICsKPiArLyoqCj4gKyAqIE1hcmtz
IHRoZSBnaXZlbiByZXF1ZXN0IGFzIGJlaW5nIHJlYWR5LCB0cmFuc2l0aW9uaW5nIGJldHdlZW4g
c3RhdGVzCj4gKyAqIElOSVRJQUxJWkVEIGFuZCBSRUFEWS4KPiArICoKPiArICogQHBhcmFtIHJl
cQo+ICsgKiAgIFJlZmVyZW5jZSB0byB0aGUgOXAgcmVxdWVzdC4KPiArICogQHBhcmFtIHpjX2Rp
cgo+ICsgKiAgIFplcm8tY29weSBkaXJlY3Rpb24uCj4gKyAqIEBwYXJhbSB6Y19idWYKPiArICog
ICBaZXJvLWNvcHkgYnVmZmVyLCBpZiB6Y19kaXIgaXMgbm90IE5PTkUuCj4gKyAqIEBwYXJhbSB6
Y19zaXplCj4gKyAqICAgWmVyby1jb3B5IGJ1ZmZlciBzaXplLCBpZiB6Y19kaXIgaXMgbm90IE5P
TkUuCj4gKyAqIEBwYXJhbSB6Y19vZmZzZXQKPiArICogICBaZXJvLWNvcHkgb2Zmc2V0IHdpdGhp
biB0aGUgcmVjZWl2ZWQgbWVzc2FnZSwgaWYgemNfZGlyIGlzIFJFQUQuCj4gKyAqIEByZXR1cm4K
PiArICogICAtIDA6IFN1Y2Nlc3NmdWwuCj4gKyAqICAgLSAoPCAwKTogSW52YWxpZCBzdGF0ZSBv
ciByZXF1ZXN0IHNpemUgc2VyaWFsaXphdGlvbiBmYWlsZWQuCj4gKyAqLwo+ICtpbnQgdWtfOXBy
ZXFfcmVhZHkoc3RydWN0IHVrXzlwcmVxICpyZXEsIGVudW0gdWtfOXByZXFfemNkaXIgemNfZGly
LAo+ICsJCXZvaWQgKnpjX2J1ZiwgdWludDMyX3QgemNfc2l6ZSwgdWludDMyX3QgemNfb2Zmc2V0
KTsKPiArCj4gKy8qKgo+ICsgKiBGdW5jdGlvbiBjYWxsZWQgZnJvbSB0aGUgdHJhbnNwb3J0IGxh
eWVyIHdoZW4gYSByZXF1ZXN0IGhhcyBiZWVuIHJlY2VpdmVkLgo+ICsgKiBJbXBsZW1lbnRzIHRo
ZSB0cmFuc2l0aW9uIGZyb20gdGhlIFNFTlQgdG8gdGhlIFJFQ0VJVkVEIHN0YXRlLgo+ICsgKgo+
ICsgKiBAcGFyYW0gcmVxCj4gKyAqICAgVGhlIDlQIHJlcXVlc3QuCj4gKyAqIEBwYXJhbSByZWN2
X3NpemUKPiArICogICBTaXplIG9mIHRoZSBwYWNrZXQgcmVjZWl2ZWQgZnJvbSB0aGUgdHJhbnNw
b3J0IGxheWVyLgo+ICsgKiBAcmV0dXJuCj4gKyAqICAgLSAoMCk6IFN1Y2Nlc3NmdWxseSByZWNl
aXZlZC4KPiArICogICAtICg8IDApOiBBbiBlcnJvciBvY2N1cnJlZC4KPiArICovCj4gK2ludCB1
a185cHJlcV9yZWNlaXZlX2NiKHN0cnVjdCB1a185cHJlcSAqcmVxLCB1aW50MzJfdCByZWN2X3Np
emUpOwo+ICsKPiArLyoqCj4gKyAqIFdhaXRzIGZvciB0aGUgcmVwbHkgdG8gYmUgcmVjZWl2ZWQu
Cj4gKyAqCj4gKyAqIEBwYXJhbSByZXEKPiArICogICBUaGUgOVAgcmVxdWVzdC4KPiArICogQHJl
dHVybgo+ICsgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgo+ICsgKiAgIC0gKDwgMCk6IEZhaWxlZC4g
UmV0dXJucyB0aGUgZXJyb3IgY29kZSByZWNlaXZlZCBmcm9tIHRoZSA5UCBzZXJ2ZXIuCj4gKyAq
Lwo+ICtpbnQgdWtfOXByZXFfd2FpdHJlcGx5KHN0cnVjdCB1a185cHJlcSAqcmVxKTsKPiArCj4g
Ky8qKgo+ICsgKiBFeHRyYWN0cyB0aGUgZXJyb3IgZnJvbSB0aGUgcmVjZWl2ZWQgcmVwbHkuCj4g
KyAqCj4gKyAqIEBwYXJhbSByZXEKPiArICogICBUaGUgOVAgcmVxdWVzdC4KPiArICogQHJldHVy
bgo+ICsgKiAgIC0gKDApOiBObyBlcnJvciBvY2N1cnJlZC4KPiArICogICAtICg8IDApOiBBbiBS
ZXJyb3Igd2FzIHJlY2VpdmVkLCB0aGUgZXJyb3IgY29kZSBpcyA5cGZzLXNwZWNpZmljLgo+ICsg
Ki8KPiAraW50IHVrXzlwcmVxX2Vycm9yKHN0cnVjdCB1a185cHJlcSAqcmVxKTsKPiArCj4gKyNp
ZmRlZiBfX2NwbHVzcGx1cwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArI2VuZGlmIC8qIF9fVUtfOVBS
RVFfXyAqLwo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69yf-0002nM-AP; Fri, 06 Sep 2019 08:52:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yd-0002n4-So
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:19 +0000
X-Inumbo-ID: 9e0cf782-d083-11e9-abed-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9e0cf782-d083-11e9-abed-12813bfff9fa;
 Fri, 06 Sep 2019 08:52:13 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id F1826105663;
 Fri,  6 Sep 2019 10:52:11 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 0PQ0v5vp3OMS; Fri,  6 Sep 2019 10:52:11 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id B435C105653;
 Fri,  6 Sep 2019 10:52:11 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:52:11 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-7-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <6a438f53-aaf4-b998-a772-222ef33d3a93@neclab.eu>
Date: Fri, 6 Sep 2019 10:52:10 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-7-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 6/8] lib/uk9p: Add 9P fid
 abstraction
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgY2hhbmdlcy4KClJldmlld2VkLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1v
bi5rdWVuemVyQG5lY2xhYi5ldT4KCk9uIDA1LjA5LjE5IDE0OjE0LCBDcmlzdGlhbiBCYW51IHdy
b3RlOgo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUgdWtfOXBmaWQgc3RydWN0LCB3aGljaCBhYnN0cmFj
dHMgdGhlIDQtYnl0ZSBmaWQKPiBudW1iZXIgdXNlZCBieSB0aGUgOXAgcHJvdG9jb2wgdG8gYXNz
b2NpYXRlIG51bWJlcnMgd2l0aCBmaWxlc3lzdGVtCj4gZW50cmllcyAoZmlsZXMsIGRpcmVjdG9y
aWVzLCBldGMuKQo+IAo+IFRoaXMgcGF0Y2ggYWxzbyBhZGRzIGEgZmlkIGNhY2hlIGZvciBlYWNo
IDlwIGRldmljZSwgZW5hYmxpbmcgcmV1c2Ugb2YKPiB0aGUgZmlkcyBhbmQgcmVkdWNpbmcgdGhl
IGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGlvbnMgZG9uZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICAgbGliL3VrOXAvOXBkZXYu
YyAgICAgICAgICAgICAgICAgfCAxMDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwo+ICAgbGliL3VrOXAvOXBmaWQuYyAgICAgICAgICAgICAgICAgfCAgNzEgKysrKysrKysr
KysrKysrKysrKysrKysrCj4gICBsaWIvdWs5cC9NYWtlZmlsZS51ayAgICAgICAgICAgICB8ICAg
MSArCj4gICBsaWIvdWs5cC9leHBvcnRzeW1zLnVrICAgICAgICAgICB8ICAgOCArKysKPiAgIGxp
Yi91azlwL2luY2x1ZGUvdWsvOXBkZXYuaCAgICAgIHwgIDIzICsrKysrKysrCj4gICBsaWIvdWs5
cC9pbmNsdWRlL3VrLzlwZGV2X2NvcmUuaCB8ICAyMCArKysrKysrCj4gICBsaWIvdWs5cC9pbmNs
dWRlL3VrLzlwZmlkLmggICAgICB8IDExNSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKPiAgIDcgZmlsZXMgY2hhbmdlZCwgMzQ3IGluc2VydGlvbnMoKykKPiAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBsaWIvdWs5cC85cGZpZC5jCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3VrOXAvaW5jbHVkZS91ay85cGZpZC5oCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi91azlwLzlwZGV2
LmMgYi9saWIvdWs5cC85cGRldi5jCj4gaW5kZXggYjczMzE1N2FhN2Y1Li40NzM1MjUzZTJhMWUg
MTAwNjQ0Cj4gLS0tIGEvbGliL3VrOXAvOXBkZXYuYwo+ICsrKyBiL2xpYi91azlwLzlwZGV2LmMK
PiBAQCAtNDUsMTEgKzQ1LDg3IEBACj4gICAjaW5jbHVkZSA8dWsvOXBkZXYuaD4KPiAgICNpbmNs
dWRlIDx1ay85cGRldl90cmFucy5oPgo+ICAgI2luY2x1ZGUgPHVrLzlwcmVxLmg+Cj4gKyNpbmNs
dWRlIDx1ay85cGZpZC5oPgo+ICAgI2lmIENPTkZJR19MSUJVS1NDSEVECj4gICAjaW5jbHVkZSA8
dWsvc2NoZWQuaD4KPiAgICNpbmNsdWRlIDx1ay93YWl0Lmg+Cj4gICAjZW5kaWYKPiAgIAo+ICtz
dGF0aWMgdm9pZCBfZmlkX21nbXRfaW5pdChzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9t
Z210KQo+ICt7Cj4gKwl1a2FyY2hfc3Bpbl9sb2NrX2luaXQoJmZpZF9tZ210LT5zcGlubG9jayk7
Cj4gKwlmaWRfbWdtdC0+bmV4dF9maWQgPSAwOwo+ICsJVUtfSU5JVF9MSVNUX0hFQUQoJmZpZF9t
Z210LT5maWRfZnJlZV9saXN0KTsKPiArCVVLX0lOSVRfTElTVF9IRUFEKCZmaWRfbWdtdC0+Zmlk
X2FjdGl2ZV9saXN0KTsKPiArfQo+ICsKPiArc3RhdGljIGludCBfZmlkX21nbXRfbmV4dF9maWRf
bG9ja2VkKHN0cnVjdCB1a185cGRldl9maWRfbWdtdCAqZmlkX21nbXQsCj4gKwkJCQlzdHJ1Y3Qg
dWtfOXBkZXYgKmRldiwKPiArCQkJCXN0cnVjdCB1a185cGZpZCAqKmZpZCkKPiArewo+ICsJc3Ry
dWN0IHVrXzlwZmlkICpyZXN1bHQgPSBOVUxMOwo+ICsKPiArCWlmICghdWtfbGlzdF9lbXB0eSgm
ZmlkX21nbXQtPmZpZF9mcmVlX2xpc3QpKSB7Cj4gKwkJcmVzdWx0ID0gdWtfbGlzdF9maXJzdF9l
bnRyeSgmZmlkX21nbXQtPmZpZF9mcmVlX2xpc3QsCj4gKwkJCQlzdHJ1Y3QgdWtfOXBmaWQsIF9s
aXN0KTsKPiArCQl1a19saXN0X2RlbCgmcmVzdWx0LT5fbGlzdCk7Cj4gKwl9IGVsc2Ugewo+ICsJ
CXJlc3VsdCA9IHVrXzlwZmlkX2FsbG9jKGRldik7Cj4gKwkJaWYgKCFyZXN1bHQpCj4gKwkJCXJl
dHVybiAtRU5PTUVNOwo+ICsJCXJlc3VsdC0+ZmlkID0gZmlkX21nbXQtPm5leHRfZmlkKys7Cj4g
Kwl9Cj4gKwo+ICsJdWtfcmVmY291bnRfaW5pdCgmcmVzdWx0LT5yZWZjb3VudCwgMSk7Cj4gKwly
ZXN1bHQtPndhc19yZW1vdmVkID0gMDsKPiArCSpmaWQgPSByZXN1bHQ7Cj4gKwo+ICsJcmV0dXJu
IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9maWRfbWdtdF9hZGRfZmlkX2xvY2tlZChzdHJ1
Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9tZ210LAo+ICsJCQkJc3RydWN0IHVrXzlwZmlkICpm
aWQpCj4gK3sKPiArCXVrX2xpc3RfYWRkKCZmaWQtPl9saXN0LCAmZmlkX21nbXQtPmZpZF9hY3Rp
dmVfbGlzdCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9maWRfbWdtdF9kZWxfZmlkX2xvY2tl
ZChzdHJ1Y3QgdWtfOXBkZXZfZmlkX21nbXQgKmZpZF9tZ210LAo+ICsJCQkJc3RydWN0IHVrXzlw
ZmlkICpmaWQsCj4gKwkJCQlib29sIG1vdmVfdG9fZnJlZWxpc3QpCj4gK3sKPiArCXVrX2xpc3Rf
ZGVsKCZmaWQtPl9saXN0KTsKPiArCj4gKwlpZiAobW92ZV90b19mcmVlbGlzdCkKPiArCQl1a19s
aXN0X2FkZCgmZmlkLT5fbGlzdCwgJmZpZF9tZ210LT5maWRfZnJlZV9saXN0KTsKPiArCWVsc2Ug
ewo+ICsJCS8qCj4gKwkJICogRnJlZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQuIFRoaXMgZmlkIHdp
bGwgbmV2ZXIgYmUgdXNlZAo+ICsJCSAqIGFnYWluLgo+ICsJCSAqLwo+ICsJCXVrX3ByX3dhcm4o
IkNvdWxkIG5vdCBtb3ZlIGZpZCB0byBmcmVlbGlzdCwgZnJlZWluZyBtZW1vcnkuXG4iKTsKPiAr
CQl1a19mcmVlKGZpZC0+X2Rldi0+YSwgZmlkKTsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZv
aWQgX2ZpZF9tZ210X2NsZWFudXAoc3RydWN0IHVrXzlwZGV2X2ZpZF9tZ210ICpmaWRfbWdtdCkK
PiArewo+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiArCXN0cnVjdCB1a185cGZpZCAqZmlkLCAq
ZmlkbjsKPiArCj4gKwl1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUoJmZpZF9tZ210LT5zcGlubG9j
aywgZmxhZ3MpOwo+ICsJLyoKPiArCSAqIEV2ZXJ5IGZpZCBzaG91bGQgaGF2ZSBiZWVuIGNsdW5r
ZWQgKmJlZm9yZSogZGVzdHJveWluZyB0aGUKPiArCSAqIGNvbm5lY3Rpb24uCj4gKwkgKi8KPiAr
CVVLX0FTU0VSVCh1a19saXN0X2VtcHR5KCZmaWRfbWdtdC0+ZmlkX2FjdGl2ZV9saXN0KSk7Cj4g
Kwl1a19saXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZmlkLCBmaWRuLCAmZmlkX21nbXQtPmZpZF9m
cmVlX2xpc3QsCj4gKwkJCV9saXN0KSB7Cj4gKwkJdWtfbGlzdF9kZWwoJmZpZC0+X2xpc3QpOwo+
ICsJCXVrX2ZyZWUoZmlkLT5fZGV2LT5hLCBmaWQpOwo+ICsJfQo+ICsJdWtwbGF0X3NwaW5fdW5s
b2NrX2lycXJlc3RvcmUoJmZpZF9tZ210LT5zcGlubG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICAg
c3RhdGljIHZvaWQgX3JlcV9tZ210X2luaXQoc3RydWN0IHVrXzlwZGV2X3JlcV9tZ210ICpyZXFf
bWdtdCkKPiAgIHsKPiAgIAl1a2FyY2hfc3Bpbl9sb2NrX2luaXQoJnJlcV9tZ210LT5zcGlubG9j
ayk7Cj4gQEAgLTEyMiw2ICsxOTgsNyBAQCBzdHJ1Y3QgdWtfOXBkZXYgKnVrXzlwZGV2X2Nvbm5l
Y3QoY29uc3Qgc3RydWN0IHVrXzlwZGV2X3RyYW5zICp0cmFucywKPiAgICNlbmRpZgo+ICAgCj4g
ICAJX3JlcV9tZ210X2luaXQoJmRldi0+X3JlcV9tZ210KTsKPiArCV9maWRfbWdtdF9pbml0KCZk
ZXYtPl9maWRfbWdtdCk7Cj4gICAKPiAgIAlyYyA9IGRldi0+b3BzLT5jb25uZWN0KGRldiwgZGV2
aWNlX2lkZW50aWZpZXIsIG1vdW50X2FyZ3MpOwo+ICAgCWlmIChyYyA8IDApCj4gQEAgLTEzOSw2
ICsyMTYsNyBAQCBzdHJ1Y3QgdWtfOXBkZXYgKnVrXzlwZGV2X2Nvbm5lY3QoY29uc3Qgc3RydWN0
IHVrXzlwZGV2X3RyYW5zICp0cmFucywKPiAgIAlyZXR1cm4gZGV2Owo+ICAgCj4gICBmcmVlX2Rl
djoKPiArCV9maWRfbWdtdF9jbGVhbnVwKCZkZXYtPl9maWRfbWdtdCk7Cj4gICAJX3JlcV9tZ210
X2NsZWFudXAoJmRldi0+X3JlcV9tZ210KTsKPiAgIAl1a19mcmVlKGEsIGRldik7Cj4gICBvdXQ6
Cj4gQEAgLTE1NSw2ICsyMzMsNyBAQCBpbnQgdWtfOXBkZXZfZGlzY29ubmVjdChzdHJ1Y3QgdWtf
OXBkZXYgKmRldikKPiAgIAlkZXYtPnN0YXRlID0gVUtfOVBERVZfRElTQ09OTkVDVElORzsKPiAg
IAo+ICAgCS8qIENsZWFuIHVwIHRoZSByZXF1ZXN0cyBiZWZvcmUgY2xvc2luZyB0aGUgY2hhbm5l
bC4gKi8KPiArCV9maWRfbWdtdF9jbGVhbnVwKCZkZXYtPl9maWRfbWdtdCk7Cj4gICAJX3JlcV9t
Z210X2NsZWFudXAoJmRldi0+X3JlcV9tZ210KTsKPiAgIAo+ICAgCS8qCj4gQEAgLTMxNSw2ICsz
OTQsMzYgQEAgaW50IHVrXzlwZGV2X3JlcV9yZW1vdmUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0
cnVjdCB1a185cHJlcSAqcmVxKQo+ICAgCXJldHVybiB1a185cHJlcV9wdXQocmVxKTsKPiAgIH0K
PiAgIAo+ICtzdHJ1Y3QgdWtfOXBmaWQgKnVrXzlwZGV2X2ZpZF9jcmVhdGUoc3RydWN0IHVrXzlw
ZGV2ICpkZXYpCj4gK3sKPiArCXN0cnVjdCB1a185cGZpZCAqZmlkID0gTlVMTDsKPiArCWludCBy
YyA9IDA7Cj4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsKPiArCXVrcGxhdF9zcGluX2xvY2tf
aXJxc2F2ZSgmZGV2LT5fZmlkX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKPiArCXJjID0gX2ZpZF9t
Z210X25leHRfZmlkX2xvY2tlZCgmZGV2LT5fZmlkX21nbXQsIGRldiwgJmZpZCk7Cj4gKwlpZiAo
cmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCV9maWRfbWdtdF9hZGRfZmlkX2xvY2tlZCgm
ZGV2LT5fZmlkX21nbXQsIGZpZCk7Cj4gKwo+ICtvdXQ6Cj4gKwl1a3BsYXRfc3Bpbl91bmxvY2tf
aXJxcmVzdG9yZSgmZGV2LT5fZmlkX21nbXQuc3BpbmxvY2ssIGZsYWdzKTsKPiArCWlmIChyYyA9
PSAwKQo+ICsJCXJldHVybiBmaWQ7Cj4gKwlyZXR1cm4gRVJSMlBUUihyYyk7Cj4gK30KPiArCj4g
K3ZvaWQgdWtfOXBkZXZfZmlkX3JlbGVhc2Uoc3RydWN0IHVrXzlwZmlkICpmaWQpCj4gK3sKPiAr
CXN0cnVjdCB1a185cGRldiAqZGV2ID0gZmlkLT5fZGV2Owo+ICsJdW5zaWduZWQgbG9uZyBmbGFn
czsKPiArCj4gKwl1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+X2ZpZF9tZ210LnNwaW5s
b2NrLCBmbGFncyk7Cj4gKwlfZmlkX21nbXRfZGVsX2ZpZF9sb2NrZWQoJmRldi0+X2ZpZF9tZ210
LCBmaWQsIDEpOwo+ICsJdWtwbGF0X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+X2ZpZF9t
Z210LnNwaW5sb2NrLCBmbGFncyk7Cj4gK30KPiArCj4gICBib29sIHVrXzlwZGV2X3NldF9tc2l6
ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgdWludDMyX3QgbXNpemUpCj4gICB7Cj4gICAJaWYgKG1z
aXplID4gZGV2LT5tYXhfbXNpemUpCj4gZGlmZiAtLWdpdCBhL2xpYi91azlwLzlwZmlkLmMgYi9s
aWIvdWs5cC85cGZpZC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAw
MDAuLjg1ZDE0YzY2MDc4YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvdWs5cC85cGZpZC5j
Cj4gQEAgLTAsMCArMSw3MSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt
Q2xhdXNlICovCj4gKy8qCj4gKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFp
bC5jb20+Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVo
bmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1ldDoKPiArICoKPiArICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
PiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdo
dCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArICog
ICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
PiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgo+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+
ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiArICogVEhJUyBIRUFERVIg
TUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArICovCj4gKwo+
ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx1ay9yZWZjb3VudC5oPgo+ICsj
aW5jbHVkZSA8dWsvYWxsb2MuaD4KPiArI2luY2x1ZGUgPHVrLzlwZGV2Lmg+Cj4gKyNpbmNsdWRl
IDx1ay85cGZpZC5oPgo+ICsKPiArc3RydWN0IHVrXzlwZmlkICp1a185cGZpZF9hbGxvYyhzdHJ1
Y3QgdWtfOXBkZXYgKmRldikKPiArewo+ICsJc3RydWN0IHVrXzlwZmlkICpmaWQ7Cj4gKwo+ICsJ
ZmlkID0gdWtfY2FsbG9jKGRldi0+YSwgMSwgc2l6ZW9mKCpmaWQpKTsKPiArCWlmIChmaWQgPT0g
TlVMTCkKPiArCQlnb3RvIG91dDsKPiArCj4gKwlmaWQtPl9kZXYgPSBkZXY7Cj4gKwo+ICsJcmV0
dXJuIGZpZDsKPiArCj4gK291dDoKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICt2b2lkIHVr
XzlwZmlkX2dldChzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKPiArewo+ICsJdWtfcmVmY291bnRfYWNx
dWlyZSgmZmlkLT5yZWZjb3VudCk7Cj4gK30KPiArCj4gK2ludCB1a185cGZpZF9wdXQoc3RydWN0
IHVrXzlwZmlkICpmaWQpCj4gK3sKPiArCWludCBsYXN0Owo+ICsKPiArCWxhc3QgPSB1a19yZWZj
b3VudF9yZWxlYXNlKCZmaWQtPnJlZmNvdW50KTsKPiArCWlmIChsYXN0KQo+ICsJCXVrXzlwZGV2
X2ZpZF9yZWxlYXNlKGZpZCk7Cj4gKwo+ICsJcmV0dXJuIGxhc3Q7Cj4gK30KPiBkaWZmIC0tZ2l0
IGEvbGliL3VrOXAvTWFrZWZpbGUudWsgYi9saWIvdWs5cC9NYWtlZmlsZS51awo+IGluZGV4IDM0
Y2M5ODdhMmY5Yy4uY2Q0YmY0YjhhMDMzIDEwMDY0NAo+IC0tLSBhL2xpYi91azlwL01ha2VmaWxl
LnVrCj4gKysrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsKPiBAQCAtNiwzICs2LDQgQEAgQ1hYSU5D
TFVERVMtJChDT05GSUdfTElCVUs5UCkJCSs9IC1JJChMSUJVSzlQX0JBU0UpL2luY2x1ZGUKPiAg
IExJQlVLOVBfU1JDUy15ICs9ICQoTElCVUs5UF9CQVNFKS85cGRldl90cmFucy5jCj4gICBMSUJV
SzlQX1NSQ1MteSArPSAkKExJQlVLOVBfQkFTRSkvOXByZXEuYwo+ICAgTElCVUs5UF9TUkNTLXkg
Kz0gJChMSUJVSzlQX0JBU0UpLzlwZGV2LmMKPiArTElCVUs5UF9TUkNTLXkgKz0gJChMSUJVSzlQ
X0JBU0UpLzlwZmlkLmMKPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhwb3J0c3ltcy51ayBiL2xp
Yi91azlwL2V4cG9ydHN5bXMudWsKPiBpbmRleCAwNDU2YjkwOTRkODcuLmVjNDY5YTJiZmYwMyAx
MDA2NDQKPiAtLS0gYS9saWIvdWs5cC9leHBvcnRzeW1zLnVrCj4gKysrIGIvbGliL3VrOXAvZXhw
b3J0c3ltcy51awo+IEBAIC0yLDYgKzIsNyBAQCB1a185cGRldl90cmFuc19yZWdpc3Rlcgo+ICAg
dWtfOXBkZXZfdHJhbnNfYnlfbmFtZQo+ICAgdWtfOXBkZXZfdHJhbnNfZ2V0X2RlZmF1bHQKPiAg
IHVrXzlwZGV2X3RyYW5zX3NldF9kZWZhdWx0Cj4gKwo+ICAgdWtfOXByZXFfZ2V0Cj4gICB1a185
cHJlcV9wdXQKPiAgIHVrXzlwcmVxX3ZzZXJpYWxpemUKPiBAQCAtMTMsMTMgKzE0LDIwIEBAIHVr
XzlwcmVxX2NvcHlfZnJvbQo+ICAgdWtfOXByZXFfcmVjZWl2ZV9jYgo+ICAgdWtfOXByZXFfd2Fp
dHJlcGx5Cj4gICB1a185cHJlcV9lcnJvcgo+ICsKPiAgIHVrXzlwZGV2X2Nvbm5lY3QKPiAgIHVr
XzlwZGV2X2Rpc2Nvbm5lY3QKPiAgIHVrXzlwZGV2X3JlcXVlc3QKPiAgIHVrXzlwZGV2X3htaXRf
bm90aWZ5Cj4gICB1a185cGRldl9jYWxsCj4gKwo+ICAgdWtfOXBkZXZfcmVxX2NyZWF0ZQo+ICAg
dWtfOXBkZXZfcmVxX2xvb2t1cAo+ICAgdWtfOXBkZXZfcmVxX3JlbW92ZQo+ICsKPiAgIHVrXzlw
ZGV2X3NldF9tc2l6ZQo+ICAgdWtfOXBkZXZfZ2V0X21zaXplCj4gKwo+ICt1a185cGRldl9maWRf
Y3JlYXRlCj4gK3VrXzlwZmlkX2dldAo+ICt1a185cGZpZF9wdXQKPiBkaWZmIC0tZ2l0IGEvbGli
L3VrOXAvaW5jbHVkZS91ay85cGRldi5oIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oCj4g
aW5kZXggYWVkNzIzZGNlZTdmLi4xMzk0OThmNzc3N2YgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrOXAv
aW5jbHVkZS91ay85cGRldi5oCj4gKysrIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cGRldi5oCj4g
QEAgLTE3Niw2ICsxNzYsMjkgQEAgc3RydWN0IHVrXzlwcmVxICp1a185cGRldl9yZXFfbG9va3Vw
KHN0cnVjdCB1a185cGRldiAqZGV2LCB1aW50MTZfdCB0YWcpOwo+ICAgaW50IHVrXzlwZGV2X3Jl
cV9yZW1vdmUoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cHJlcSAqcmVxKTsKPiAg
IAo+ICAgLyoqCj4gKyAqIENyZWF0ZXMgYSBGSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiA5
UCBkZXZpY2UuCj4gKyAqCj4gKyAqIEBwYXJhbSBkZXYKPiArICogICBUaGUgVW5pa3JhZnQgOVAg
RGV2aWNlLgo+ICsgKiBAcmV0dXJuCj4gKyAqICAgSWYgbm90IGFuIGVycm9yIHBvaW50ZXIsIHRo
ZSBjcmVhdGVkIGZpZC4KPiArICogICBPdGhlcndpc2UsIHRoZSBlcnJvciBpbiBjcmVhdGluZyB0
aGUgZmlkOgo+ICsgKiAgIC0gRU5PTUVNOiBObyBtZW1vcnkgZm9yIHRoZSByZXF1ZXN0IG9yIG5v
IGF2YWlsYWJsZSB0YWdzLgo+ICsgKi8KPiArc3RydWN0IHVrXzlwZmlkICp1a185cGRldl9maWRf
Y3JlYXRlKHN0cnVjdCB1a185cGRldiAqZGV2KTsKPiArCj4gKy8qKgo+ICsgKiBAaW50ZXJuYWwK
PiArICogUmVsZWFzZXMgYSBGSUQgd2hlbiBpdHMgcmVmZXJlbmNlIGNvdW50IGdvZXMgdG8gMC4K
PiArICoKPiArICogU2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHksIGJ1dCByYXRoZXIgdmlh
IHVrXzlwZmlkX3B1dCgpLgo+ICsgKgo+ICsgKiBAcGFyYW0gZmlkCj4gKyAqICAgVGhlIEZJRCB0
byBiZSByZWxlYXNlZC4KPiArICovCj4gK3ZvaWQgdWtfOXBkZXZfZmlkX3JlbGVhc2Uoc3RydWN0
IHVrXzlwZmlkICpmaWQpOwo+ICsKPiArLyoqCj4gICAgKiBTZXRzIHRoZSBtYXhpbXVtIGFsbG93
ZWQgbWVzc2FnZSBzaXplLgo+ICAgICoKPiAgICAqIEBwYXJhbSBkZXYKPiBkaWZmIC0tZ2l0IGEv
bGliL3VrOXAvaW5jbHVkZS91ay85cGRldl9jb3JlLmggYi9saWIvdWs5cC9pbmNsdWRlL3VrLzlw
ZGV2X2NvcmUuaAo+IGluZGV4IDhjNTdkODY4MmQwZS4uMzg4NjRhY2UxMzhkIDEwMDY0NAo+IC0t
LSBhL2xpYi91azlwL2luY2x1ZGUvdWsvOXBkZXZfY29yZS5oCj4gKysrIGIvbGliL3VrOXAvaW5j
bHVkZS91ay85cGRldl9jb3JlLmgKPiBAQCAtMTI0LDYgKzEyNCwyNCBAQCBzdHJ1Y3QgdWtfOXBk
ZXZfcmVxX21nbXQgewo+ICAgCj4gICAvKioKPiAgICAqIEBpbnRlcm5hbAo+ICsgKiBBIHN0cnVj
dHVyZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBhdmFpbGFiaWxpdHkgb2YgOVAgZmlkcy4KPiArICov
Cj4gK3N0cnVjdCB1a185cGRldl9maWRfbWdtdCB7Cj4gKwkvKiBTcGlubG9jayBwcm90ZWN0aW5n
IGZpZHMuICovCj4gKwlzcGlubG9ja190CQkJc3BpbmxvY2s7Cj4gKwkvKiBOZXh0IGF2YWlsYWJs
ZSBmaWQuICovCj4gKwl1aW50MzJfdAkJCW5leHRfZmlkOwo+ICsJLyogRnJlZS1saXN0IG9mIGZp
ZHMgdGhhdCBjYW4gYmUgcmV1c2VkLiAqLwo+ICsJc3RydWN0IHVrX2xpc3RfaGVhZAkJZmlkX2Zy
ZWVfbGlzdDsKPiArCS8qCj4gKwkgKiBMaXN0IG9mIGZpZHMgdGhhdCBhcmUgY3VycmVudGx5IGFj
dGl2ZSwgdG8gYmUgY2x1bmtlZCBhdCB0aGUgZW5kIG9mCj4gKwkgKiBhIDlwZnMgc2Vzc2lvbi4K
PiArCSAqLwo+ICsJc3RydWN0IHVrX2xpc3RfaGVhZAkJZmlkX2FjdGl2ZV9saXN0Owo+ICt9Owo+
ICsKPiArLyoqCj4gKyAqIEBpbnRlcm5hbAo+ICAgICogOVBERVYgdHJhbnNwb3J0IHN0YXRlCj4g
ICAgKgo+ICAgICogLSBDT05ORUNURUQ6IERlZmF1bHQgc3RhdGUgYWZ0ZXIgaW5pdGlhbGl6YXRp
b24gYW5kIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uLgo+IEBAIC0xNTMsNiArMTcxLDggQEAgc3Ry
dWN0IHVrXzlwZGV2IHsKPiAgIAl1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgICAgIG1heF9t
c2l6ZTsKPiAgIAkvKiBUcmFuc3BvcnQtYWxsb2NhdGVkIGRhdGEuICovCj4gICAJdm9pZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqcHJpdjsKPiArCS8qIEBpbnRlcm5hbCBGaWQgbWFuYWdl
bWVudC4gKi8KPiArCXN0cnVjdCB1a185cGRldl9maWRfbWdtdAlfZmlkX21nbXQ7Cj4gICAJLyog
QGludGVybmFsIFJlcXVlc3QgbWFuYWdlbWVudC4gKi8KPiAgIAlzdHJ1Y3QgdWtfOXBkZXZfcmVx
X21nbXQgICAgICAgIF9yZXFfbWdtdDsKPiAgICNpZiBDT05GSUdfTElCVUtTQ0hFRAo+IGRpZmYg
LS1naXQgYS9saWIvdWs5cC9pbmNsdWRlL3VrLzlwZmlkLmggYi9saWIvdWs5cC9pbmNsdWRlL3Vr
LzlwZmlkLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uN2Vj
NzViYjRhNTA4Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91azlwL2luY2x1ZGUvdWsvOXBm
aWQuaAo+IEBAIC0wLDAgKzEsMTE1IEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UgKi8KPiArLyoKPiArICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3Ri
QGdtYWlsLmNvbT4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBv
bGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
PiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29w
eXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+
ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8K
PiArCj4gKyNpZm5kZWYgX19VS185UEZJRF9fCj4gKyNkZWZpbmUgX19VS185UEZJRF9fCj4gKwo+
ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1
ZGUgPHVrL2NvbmZpZy5oPgo+ICsjaW5jbHVkZSA8dWsvOXBfY29yZS5oPgo+ICsjaW5jbHVkZSA8
dWsvYWxsb2MuaD4KPiArI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiArI2luY2x1ZGUgPHVr
L2xpc3QuaD4KPiArI2luY2x1ZGUgPHVrL3JlZmNvdW50Lmg+Cj4gKwo+ICsjaWZkZWYgX19jcGx1
c3BsdXMKPiArZXh0ZXJuICJDIiB7Cj4gKyNlbmRpZgo+ICsKPiArLyoqCj4gKyAqIFN0cnVjdHVy
ZSBkZXNjcmliaW5nIGEgbWFuYWdlZCBmaWQgdmlhIHJlZmVyZW5jZSBjb3VudGluZy4KPiArICov
Cj4gK3N0cnVjdCB1a185cGZpZCB7Cj4gKwkvKiBGaWQgbnVtYmVyLiAqLwo+ICsJdWludDMyX3Qg
ICAgICAgICAgICAgICAgZmlkOwo+ICsJLyogQXNzb2NpYXRlZCBzZXJ2ZXIgcWlkLiAqLwo+ICsJ
c3RydWN0IHVrXzlwX3FpZCAgICAgICAgcWlkOwo+ICsJLyogSS9PIHVuaXQuICovCj4gKwl1aW50
MzJfdCAgICAgICAgICAgICAgICBpb3VuaXQ7Cj4gKwkvKgo+ICsJICogSWYgcmVtb3ZlZCwgbm8g
Y2x1bmsgaXMgbmVjZXNzYXJ5LCBhcyB0aGUgcmVtb3ZlIG9wZXJhdGlvbgo+ICsJICogaW1wbGlj
aXRseSBjbHVua3MgdGhlIGZpZC4KPiArCSAqLwo+ICsJYm9vbCB3YXNfcmVtb3ZlZDsKPiArCS8q
IFRyYWNrcyB0aGUgbnVtYmVyIG9mIGxpdmUgcmVmZXJlbmNlcy4gKi8KPiArCV9fYXRvbWljICAg
ICAgICAgICAgICAgIHJlZmNvdW50Owo+ICsJLyogQGludGVybmFsIEFzc29jaWF0ZWQgOVAgZGV2
aWNlLiAqLwo+ICsJc3RydWN0IHVrXzlwZGV2ICAgICAgICAgKl9kZXY7Cj4gKwkvKgo+ICsJICog
QGludGVybmFsCj4gKwkgKiBMaXN0IG9uIHdoaWNoIHRoaXMgZmlkIGN1cnJlbnRseSBpcy4gU2Vl
IHVrXzlwZGV2X2ZpZF9tZ210IGZvcgo+ICsJICogZGV0YWlscy4KPiArCSAqLwo+ICsJc3RydWN0
IHVrX2xpc3RfaGVhZCAgICAgX2xpc3Q7Cj4gK307Cj4gKwo+ICsvKioKPiArICogQGludGVybmFs
Cj4gKyAqIEFsbG9jYXRlcyBhIDlwIGZpZC4KPiArICogU2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVj
dGx5LCB1c2UgdWtfOXBkZXZfZmlkX2NyZWF0ZSgpIGluc3RlYWQuCj4gKyAqCj4gKyAqIEBwYXJh
bSBhCj4gKyAqICAgQWxsb2NhdG9yIHRvIHVzZS4KPiArICogQHJldHVybgo+ICsgKiAgIC0gTlVM
TDogT3V0IG9mIG1lbW9yeS4KPiArICogICAtICghPU5VTEwpOiBTdWNjZXNzZnVsLgo+ICsgKi8K
PiArc3RydWN0IHVrXzlwZmlkICp1a185cGZpZF9hbGxvYyhzdHJ1Y3QgdWtfOXBkZXYgKmRldik7
Cj4gKwo+ICsvKioKPiArICogR2V0cyB0aGUgOXAgZmlkLCBpbmNyZW1lbnRpbmcgdGhlIHJlZmVy
ZW5jZSBjb3VudC4KPiArICoKPiArICogQHBhcmFtIGZpZAo+ICsgKiAgIFJlZmVyZW5jZSB0byB0
aGUgOXAgZmlkLgo+ICsgKi8KPiArdm9pZCB1a185cGZpZF9nZXQoc3RydWN0IHVrXzlwZmlkICpm
aWQpOwo+ICsKPiArLyoqCj4gKyAqIFB1dHMgdGhlIDlwIGZpZCwgZGVjcmVtZW50aW5nIHRoZSBy
ZWZlcmVuY2UgY291bnQuCj4gKyAqIElmIHRoaXMgd2FzIHRoZSBsYXN0IGxpdmUgcmVmZXJlbmNl
LCB0aGUgbWVtb3J5IHdpbGwgYmUgZnJlZWQuCj4gKyAqCj4gKyAqIEBwYXJhbSBmaWQKPiArICog
ICBSZWZlcmVuY2UgdG8gdGhlIDlwIGZpZC4KPiArICogQHJldHVybgo+ICsgKiAgIC0gMDogVGhp
cyB3YXMgbm90IHRoZSBsYXN0IGxpdmUgcmVmZXJlbmNlLgo+ICsgKiAgIC0gMTogVGhpcyB3YXMg
dGhlIGxhc3QgbGl2ZSByZWZlcmVuY2UuCj4gKyAqLwo+ICtpbnQgdWtfOXBmaWRfcHV0KHN0cnVj
dCB1a185cGZpZCAqZmlkKTsKPiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICt9Cj4gKyNlbmRp
Zgo+ICsKPiArI2VuZGlmIC8qIF9fVUtfOVBGSURfXyAqLwo+IAoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69yl-0002om-DS; Fri, 06 Sep 2019 08:52:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yj-0002oM-JN
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:25 +0000
X-Inumbo-ID: a45af1fc-d083-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a45af1fc-d083-11e9-a337-bc764e2007e4;
 Fri, 06 Sep 2019 08:52:23 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 9079AF200F;
 Fri,  6 Sep 2019 10:52:22 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id WO61bbOR7G7R; Fri,  6 Sep 2019 10:52:22 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 631CFF2008;
 Fri,  6 Sep 2019 10:52:16 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:52:15 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-8-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <5ac4acf7-6ada-9f5a-323b-4321a547f22b@neclab.eu>
Date: Fri, 6 Sep 2019 10:52:15 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-8-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 7/8] lib/uk9p: Add 9P helper
 API
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGEgbG90IGZvciBhbGwgdGhlIGNoYW5nZXMuIEkgYWdyZWUgd2l0aCB5b3VyIHN1Z2dl
c3Rpb24gcmVnYXJkaW5nIAp0aGUgZnVuY3Rpb24gbmFtZXMuIEkgdGhpbmsgdGhlIEFQSSBsb29r
cyBwcmV0dHkgY2xlYW4gbm93LgoKUmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1
ZW56ZXJAbmVjbGFiLmV1PgoKT24gMDUuMDkuMTkgMTQ6MTQsIENyaXN0aWFuIEJhbnUgd3JvdGU6
Cj4gVGhpcyBwYXRjaCBpbXBsZW1lbnRzIGFuIEFQSSBmb3IgdGhlIG9wZXJhdGlvbnMgc3VwcG9y
dGVkIGJ5IHRoZSA5UAo+IHByb3RvY29sLiBFYWNoIHN1cHBvcnRlZCBtZXNzYWdlIHR5cGUgaGFz
IGFuIGFzc29jaWF0ZWQgZnVuY3Rpb24gd2l0aAo+IHdoaWNoIHRvIG1ha2UgcmVxdWVzdHMuCj4g
Cj4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAtLS0K
PiAgIGxpYi91azlwLzlwLmMgICAgICAgICAgICB8IDQzMCArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgbGliL3VrOXAvTWFrZWZpbGUudWsgICAgIHwg
ICAxICsKPiAgIGxpYi91azlwL2V4cG9ydHN5bXMudWsgICB8ICAxNSArKwo+ICAgbGliL3VrOXAv
aW5jbHVkZS91ay85cC5oIHwgMjY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICA0
IGZpbGVzIGNoYW5nZWQsIDcxMSBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliL3VrOXAvOXAuYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91azlwL2luY2x1ZGUvdWsv
OXAuaAo+IAo+IGRpZmYgLS1naXQgYS9saWIvdWs5cC85cC5jIGIvbGliL3VrOXAvOXAuYwo+IG5l
dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5lYjRjMmRjODZjZjYKPiAt
LS0gL2Rldi9udWxsCj4gKysrIGIvbGliL3VrOXAvOXAuYwo+IEBAIC0wLDAgKzEsNDMwIEBACj4g
Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiArLyoKPiArICog
QXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiArICoKPiArICogQ29w
eXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+
ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVz
IG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKgo+ICsgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBP
UiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx1ay9jb25maWcu
aD4KPiArI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgo+ICsjaW5jbHVkZSA8dWsvZXJycHRyLmg+Cj4g
KyNpbmNsdWRlIDx1ay85cC5oPgo+ICsjaW5jbHVkZSA8dWsvOXBkZXYuaD4KPiArI2luY2x1ZGUg
PHVrLzlwcmVxLmg+Cj4gKyNpbmNsdWRlIDx1ay85cGZpZC5oPgo+ICsKPiArc3RydWN0IHVrXzlw
cmVxICp1a185cF92ZXJzaW9uKHN0cnVjdCB1a185cGRldiAqZGV2LAo+ICsJCWNvbnN0IGNoYXIg
KnJlcXVlc3RlZCwgc3RydWN0IHVrXzlwX3N0ciAqcmVjZWl2ZWQpCj4gK3sKPiArCXN0cnVjdCB1
a185cF9zdHIgcmVxdWVzdGVkX3N0cjsKPiArCXN0cnVjdCB1a185cHJlcSAqcmVxOwo+ICsJaW50
IHJjOwo+ICsJdWludDMyX3QgbmV3X21zaXplOwo+ICsKPiArCXVrXzlwX3N0cl9pbml0KCZyZXF1
ZXN0ZWRfc3RyLCByZXF1ZXN0ZWQpOwo+ICsKPiArCXVrX3ByX2RlYnVnKCJUVkVSU0lPTiBtc2l6
ZSAldSB2ZXJzaW9uICVzXG4iLAo+ICsJCQlkZXYtPm1zaXplLCByZXF1ZXN0ZWQpOwo+ICsKPiAr
CXJlcSA9IHVrXzlwZGV2X2NhbGwoZGV2LCBVS185UF9UVkVSU0lPTiwgX19QQUdFX1NJWkUsICJk
cyIsCj4gKwkJCWRldi0+bXNpemUsICZyZXF1ZXN0ZWRfc3RyKTsKPiArCWlmIChQVFJJU0VSUihy
ZXEpKQo+ICsJCXJldHVybiByZXE7Cj4gKwo+ICsJcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShy
ZXEsICJkcyIsICZuZXdfbXNpemUsIHJlY2VpdmVkKTsKPiArCj4gKwlpZiAocmMpCj4gKwkJcmV0
dXJuIEVSUjJQVFIocmMpOwo+ICsKPiArCXVrX3ByX2RlYnVnKCJSVkVSU0lPTiBtc2l6ZSAldSB2
ZXJzaW9uICUuKnNcbiIsIG5ld19tc2l6ZSwKPiArCQkJcmVjZWl2ZWQtPnNpemUsIHJlY2VpdmVk
LT5kYXRhKTsKPiArCj4gKwkvKgo+ICsJICogTm90ZTogdGhlIDlQIHNwZWNpZmljYXRpb24gbWVu
dGlvbnMgdGhhdCBuZXdfbXNpemUgPD0gZGV2LT5tc2l6ZS4KPiArCSAqIEhvd2V2dmVyLCBleGVj
dXRpb24gY2FuIGNvbnRpbnVlIGV2ZW4gaWYgdGhlIGludmFyaWFudCBpcyB2aW9sYXRlZAo+ICsJ
ICogYW5kIHNldF9tc2l6ZSgpIGZhaWxzLCBhcyB0aGUgb2xkIG1lc3NhZ2Ugc2l6ZSBpcyBhbHdh
eXMgd2l0aGluIHRoZQo+ICsJICogYWNjZXB0ZWQgbGltaXQuCj4gKwkgKi8KPiArCWlmICghdWtf
OXBkZXZfc2V0X21zaXplKGRldiwgbmV3X21zaXplKSkKPiArCQl1a19wcl9kZWJ1ZygiSW52YWxp
ZCBuZXcgbWVzc2FnZSBzaXplLlxuIik7Cj4gKwo+ICsJcmV0dXJuIHJlcTsKPiArfQo+ICsKPiAr
c3RydWN0IHVrXzlwZmlkICp1a185cF9hdHRhY2goc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQz
Ml90IGFmaWQsCj4gKwkJY29uc3QgY2hhciAqdW5hbWUsIGNvbnN0IGNoYXIgKmFuYW1lLCB1aW50
MzJfdCBuX3VuYW1lKQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKPiArCXN0cnVjdCB1
a185cGZpZCAqZmlkOwo+ICsJc3RydWN0IHVrXzlwX3N0ciB1bmFtZV9zdHI7Cj4gKwlzdHJ1Y3Qg
dWtfOXBfc3RyIGFuYW1lX3N0cjsKPiArCWludCByYzsKPiArCj4gKwl1a185cF9zdHJfaW5pdCgm
dW5hbWVfc3RyLCB1bmFtZSk7Cj4gKwl1a185cF9zdHJfaW5pdCgmYW5hbWVfc3RyLCBhbmFtZSk7
Cj4gKwo+ICsJZmlkID0gdWtfOXBkZXZfZmlkX2NyZWF0ZShkZXYpOwo+ICsJaWYgKFBUUklTRVJS
KGZpZCkpCj4gKwkJcmV0dXJuIGZpZDsKPiArCj4gKwl1a19wcl9kZWJ1ZygiVEFUVEFDSCBmaWQg
JXUgYWZpZCAldSB1bmFtZSAlcyBhbmFtZSAlcyBuX3VuYW1lICV1XG4iLAo+ICsJCQlmaWQtPmZp
ZCwgYWZpZCwgdW5hbWUsIGFuYW1lLCBuX3VuYW1lKTsKPiArCj4gKwlyZXEgPSB1a185cGRldl9j
YWxsKGRldiwgVUtfOVBfVEFUVEFDSCwgX19QQUdFX1NJWkUsICJkZHNzZCIsCj4gKwkJCWZpZC0+
ZmlkLCBhZmlkLCAmdW5hbWVfc3RyLCAmYW5hbWVfc3RyLCBuX3VuYW1lKTsKPiArCWlmIChQVFJJ
U0VSUihyZXEpKSB7Cj4gKwkJdWtfOXBkZXZfZmlkX3JlbGVhc2UoZmlkKTsKPiArCQlyZXR1cm4g
KHZvaWQgKilyZXE7Cj4gKwl9Cj4gKwo+ICsJcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShyZXEs
ICJRIiwgJmZpZC0+cWlkKTsKPiArCXVrXzlwZGV2X3JlcV9yZW1vdmUoZGV2LCByZXEpOwo+ICsK
PiArCXVrX3ByX2RlYnVnKCJSQVRUQUNIIHFpZCB0eXBlICV1IHZlcnNpb24gJXUgcGF0aCAlbHVc
biIsCj4gKwkJCWZpZC0+cWlkLnR5cGUsIGZpZC0+cWlkLnZlcnNpb24sIGZpZC0+cWlkLnBhdGgp
Owo+ICsKPiArCWlmIChyYyA8IDApIHsKPiArCQl1a185cGRldl9maWRfcmVsZWFzZShmaWQpOwo+
ICsJCXJldHVybiBFUlIyUFRSKHJjKTsKPiArCX0KPiArCj4gKwlyZXR1cm4gZmlkOwo+ICt9Cj4g
Kwo+ICtpbnQgdWtfOXBfZmx1c2goc3RydWN0IHVrXzlwZGV2ICpkZXYsIHVpbnQxNl90IG9sZHRh
ZykKPiArewo+ICsJc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4gKwo+ICsJdWtfcHJfZGVidWcoIlRG
TFVTSCBvbGR0YWcgJXVcbiIsIG9sZHRhZyk7Cj4gKwlyZXEgPSB1a185cGRldl9jYWxsKGRldiwg
VUtfOVBfVEZMVVNILCBfX1BBR0VfU0laRSwgInciLCBvbGR0YWcpOwo+ICsJaWYgKFBUUklTRVJS
KHJlcSkpCj4gKwkJcmV0dXJuIFBUUjJFUlIocmVxKTsKPiArCj4gKwl1a19wcl9kZWJ1ZygiUkZM
VVNIXG4iKTsKPiArCXVrXzlwZGV2X3JlcV9yZW1vdmUoZGV2LCByZXEpOwo+ICsKPiArCXJldHVy
biAwOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgdWtfOXBmaWQgKnVrXzlwX3dhbGsoc3RydWN0IHVrXzlw
ZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAo+ICsJCWNvbnN0IGNoYXIgKm5hbWUpCj4g
K3sKPiArCXN0cnVjdCB1a185cHJlcSAqcmVxOwo+ICsJc3RydWN0IHVrXzlwZmlkICpuZXdmaWQ7
Cj4gKwlzdHJ1Y3QgdWtfOXBfc3RyIG5hbWVfc3RyOwo+ICsJdWludDE2X3QgbndxaWQ7Cj4gKwl1
aW50MTZfdCBud25hbWU7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJdWtfOXBfc3RyX2luaXQoJm5hbWVf
c3RyLCBuYW1lKTsKPiArCj4gKwluZXdmaWQgPSB1a185cGRldl9maWRfY3JlYXRlKGRldik7Cj4g
KwlpZiAoUFRSSVNFUlIobmV3ZmlkKSkKPiArCQlyZXR1cm4gbmV3ZmlkOwo+ICsKPiArCW53bmFt
ZSA9IG5hbWUgPyAxIDogMDsKPiArCj4gKwlpZiAobmFtZSkgewo+ICsJCXVrX3ByX2RlYnVnKCJU
V0FMSyBmaWQgJXUgbmV3ZmlkICV1IG53bmFtZSAlZCBuYW1lICVzXG4iLAo+ICsJCQkJZmlkLT5m
aWQsIG5ld2ZpZC0+ZmlkLCBud25hbWUsIG5hbWUpOwo+ICsJCXJlcSA9IHVrXzlwZGV2X2NhbGwo
ZGV2LCBVS185UF9UV0FMSywgX19QQUdFX1NJWkUsICJkZHdzIiwKPiArCQkJCWZpZC0+ZmlkLCBu
ZXdmaWQtPmZpZCwgbnduYW1lLCAmbmFtZV9zdHIpOwo+ICsJfSBlbHNlIHsKPiArCQl1a19wcl9k
ZWJ1ZygiVFdBTEsgZmlkICV1IG5ld2ZpZCAldSBud25hbWUgJWRcbiIsCj4gKwkJCQlmaWQtPmZp
ZCwgbmV3ZmlkLT5maWQsIG53bmFtZSk7Cj4gKwkJcmVxID0gdWtfOXBkZXZfY2FsbChkZXYsIFVL
XzlQX1RXQUxLLCBfX1BBR0VfU0laRSwgImRkdyIsCj4gKwkJCQlmaWQtPmZpZCwgbmV3ZmlkLT5m
aWQsIG53bmFtZSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKFBUUklTRVJSKHJlcSkpIHsKPiArCQkvKgo+
ICsJCSAqIERvbid0IGNsdW5rIGlmIHJlcXVlc3QgaGFzIGZpbmlzaGVkIHdpdGggZXJyb3IsIGFz
IHRoZSBmaWQKPiArCQkgKiBpcyBpbnZhbGlkLgo+ICsJCSAqLwo+ICsJCW5ld2ZpZC0+d2FzX3Jl
bW92ZWQgPSAxOwo+ICsJCXJjID0gUFRSMkVSUihyZXEpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+
ICsKPiArCXJjID0gdWtfOXByZXFfZGVzZXJpYWxpemUocmVxLCAidyIsICZud3FpZCk7Cj4gKwlp
ZiAocmMgPCAwKQo+ICsJCWdvdG8gb3V0X3JlcTsKPiArCj4gKwl1a19wcl9kZWJ1ZygiUldBTEsg
bndxaWQgJXVcbiIsIG53cWlkKTsKPiArCj4gKwlpZiAobndxaWQgIT0gbnduYW1lKSB7Cj4gKwkJ
cmMgPSAtRU5PRU5UOwo+ICsJCWdvdG8gb3V0X3JlcTsKPiArCX0KPiArCj4gKwo+ICsJaWYgKG53
bmFtZSkgewo+ICsJCXJjID0gdWtfOXByZXFfZGVzZXJpYWxpemUocmVxLCAiUSIsICZuZXdmaWQt
PnFpZCk7Cj4gKwkJaWYgKHJjIDwgMCkKPiArCQkJZ290byBvdXRfcmVxOwo+ICsJfSBlbHNlCj4g
KwkJbmV3ZmlkLT5xaWQgPSBmaWQtPnFpZDsKPiArCj4gKwlyYyA9IDA7Cj4gK291dF9yZXE6Cj4g
Kwl1a185cGRldl9yZXFfcmVtb3ZlKGRldiwgcmVxKTsKPiArb3V0Ogo+ICsJaWYgKHJjKSB7Cj4g
KwkJdWtfOXBkZXZfZmlkX3JlbGVhc2UobmV3ZmlkKTsKPiArCQlyZXR1cm4gRVJSMlBUUihyYyk7
Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIG5ld2ZpZDsKPiArfQo+ICsKPiAraW50IHVrXzlwX29wZW4o
c3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLCB1aW50OF90IG1vZGUp
Cj4gK3sKPiArCXN0cnVjdCB1a185cHJlcSAqcmVxOwo+ICsJaW50IHJjOwo+ICsKPiArCXVrX3By
X2RlYnVnKCJUT1BFTiBmaWQgJXUgbW9kZSAldVxuIiwgZmlkLT5maWQsIG1vZGUpOwo+ICsKPiAr
CXJlcSA9IHVrXzlwZGV2X2NhbGwoZGV2LCBVS185UF9UT1BFTiwgX19QQUdFX1NJWkUsICJkYiIs
Cj4gKwkJCWZpZC0+ZmlkLCBtb2RlKTsKPiArCWlmIChQVFJJU0VSUihyZXEpKQo+ICsJCXJldHVy
biBQVFIyRVJSKHJlcSk7Cj4gKwo+ICsJcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJR
ZCIsICZmaWQtPnFpZCwgJmZpZC0+aW91bml0KTsKPiArCXVrXzlwZGV2X3JlcV9yZW1vdmUoZGV2
LCByZXEpOwo+ICsKPiArCXVrX3ByX2RlYnVnKCJST1BFTiBxaWQgdHlwZSAldSB2ZXJzaW9uICV1
IHBhdGggJWx1IGlvdW5pdCAldVxuIiwKPiArCQkJZmlkLT5xaWQudHlwZSwgZmlkLT5xaWQudmVy
c2lvbiwgZmlkLT5xaWQucGF0aCwKPiArCQkJZmlkLT5pb3VuaXQpOwo+ICsKPiArCXJldHVybiBy
YzsKPiArfQo+ICsKPiAraW50IHVrXzlwX2NyZWF0ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3Ry
dWN0IHVrXzlwZmlkICpmaWQsCj4gKwkJY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgcGVybSwg
dWludDhfdCBtb2RlLAo+ICsJCWNvbnN0IGNoYXIgKmV4dGVuc2lvbikKPiArewo+ICsJc3RydWN0
IHVrXzlwcmVxICpyZXE7Cj4gKwlzdHJ1Y3QgdWtfOXBfc3RyIG5hbWVfc3RyOwo+ICsJc3RydWN0
IHVrXzlwX3N0ciBleHRlbnNpb25fc3RyOwo+ICsJaW50IHJjOwo+ICsKPiArCXVrXzlwX3N0cl9p
bml0KCZuYW1lX3N0ciwgbmFtZSk7Cj4gKwl1a185cF9zdHJfaW5pdCgmZXh0ZW5zaW9uX3N0ciwg
ZXh0ZW5zaW9uKTsKPiArCj4gKwl1a19wcl9kZWJ1ZygiVENSRUFURSBmaWQgJXUgbmFtZSAlcyBw
ZXJtICV1IG1vZGUgJXUgZXh0ICVzXG4iLAo+ICsJCQlmaWQtPmZpZCwgbmFtZSwgcGVybSwgbW9k
ZSwgZXh0ZW5zaW9uKTsKPiArCj4gKwlyZXEgPSB1a185cGRldl9jYWxsKGRldiwgVUtfOVBfVENS
RUFURSwgX19QQUdFX1NJWkUsICJkc2RicyIsCj4gKwkJCWZpZC0+ZmlkLCAmbmFtZV9zdHIsIHBl
cm0sIG1vZGUsICZleHRlbnNpb25fc3RyKTsKPiArCWlmIChQVFJJU0VSUihyZXEpKQo+ICsJCXJl
dHVybiBQVFIyRVJSKHJlcSk7Cj4gKwo+ICsJcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShyZXEs
ICJRZCIsICZmaWQtPnFpZCwgJmZpZC0+aW91bml0KTsKPiArCXVrXzlwZGV2X3JlcV9yZW1vdmUo
ZGV2LCByZXEpOwo+ICsKPiArCXVrX3ByX2RlYnVnKCJSQ1JFQVRFIHFpZCB0eXBlICV1IHZlcnNp
b24gJXUgcGF0aCAlbHUgaW91bml0ICV1XG4iLAo+ICsJCQlmaWQtPnFpZC50eXBlLCBmaWQtPnFp
ZC52ZXJzaW9uLCBmaWQtPnFpZC5wYXRoLAo+ICsJCQlmaWQtPmlvdW5pdCk7Cj4gKwo+ICsJcmV0
dXJuIHJjOwo+ICt9Cj4gKwo+ICtpbnQgdWtfOXBfcmVtb3ZlKHN0cnVjdCB1a185cGRldiAqZGV2
LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKPiArewo+ICsJc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4g
Kwo+ICsJLyogVGhlIGZpZCBpcyBjb25zaWRlcmVkIGludmFsaWQgZXZlbiBpZiB0aGUgcmVtb3Zl
IGZhaWxzLiAqLwo+ICsJZmlkLT53YXNfcmVtb3ZlZCA9IDE7Cj4gKwo+ICsJdWtfcHJfZGVidWco
IlRSRU1PVkUgZmlkICV1XG4iLCBmaWQtPmZpZCk7Cj4gKwlyZXEgPSB1a185cGRldl9jYWxsKGRl
diwgVUtfOVBfVFJFTU9WRSwgX19QQUdFX1NJWkUsICJkIiwgZmlkLT5maWQpOwo+ICsJaWYgKFBU
UklTRVJSKHJlcSkpCj4gKwkJcmV0dXJuIFBUUjJFUlIocmVxKTsKPiArCj4gKwl1a185cGRldl9y
ZXFfcmVtb3ZlKGRldiwgcmVxKTsKPiArCXVrX3ByX2RlYnVnKCJSUkVNT1ZFXG4iKTsKPiArCj4g
KwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50IHVrXzlwX2NsdW5rKHN0cnVjdCB1a185cGRldiAq
ZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKPiArewo+ICsJc3RydWN0IHVrXzlwcmVxICpyZXE7
Cj4gKwo+ICsJaWYgKGZpZC0+d2FzX3JlbW92ZWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJdWtf
cHJfZGVidWcoIlRDTFVOSyBmaWQgJXVcbiIsIGZpZC0+ZmlkKTsKPiArCXJlcSA9IHVrXzlwZGV2
X2NhbGwoZGV2LCBVS185UF9UQ0xVTkssIF9fUEFHRV9TSVpFLCAiZCIsIGZpZC0+ZmlkKTsKPiAr
CWlmIChQVFJJU0VSUihyZXEpKQo+ICsJCXJldHVybiBQVFIyRVJSKHJlcSk7Cj4gKwo+ICsJdWtf
OXBkZXZfcmVxX3JlbW92ZShkZXYsIHJlcSk7Cj4gKwl1a19wcl9kZWJ1ZygiUkNMVU5LXG4iKTsK
PiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50NjRfdCB1a185cF9yZWFkKHN0cnVjdCB1
a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKPiArCQl1aW50NjRfdCBvZmZzZXQs
IHVpbnQzMl90IGNvdW50LCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVjdCB1a185cHJlcSAqcmVx
Owo+ICsJaW50NjRfdCByYzsKPiArCj4gKwlpZiAoZmlkLT5pb3VuaXQgIT0gMCkKPiArCQljb3Vu
dCA9IE1JTihjb3VudCwgZmlkLT5pb3VuaXQpOwo+ICsJY291bnQgPSBNSU4oY291bnQsIGRldi0+
bXNpemUgLSAxMSk7Cj4gKwo+ICsJdWtfcHJfZGVidWcoIlRSRUFEIGZpZCAldSBvZmZzZXQgJWx1
IGNvdW50ICV1XG4iLCBmaWQtPmZpZCwKPiArCQkJb2Zmc2V0LCBjb3VudCk7Cj4gKwo+ICsJcmVx
ID0gdWtfOXBkZXZfcmVxX2NyZWF0ZShkZXYsIFVLXzlQX1RSRUFELCBfX1BBR0VfU0laRSk7Cj4g
KwlpZiAoUFRSSVNFUlIocmVxKSkKPiArCQlyZXR1cm4gUFRSMkVSUihyZXEpOwo+ICsKPiArCXJj
ID0gdWtfOXByZXFfc2VyaWFsaXplKHJlcSwgImRxZCIsIGZpZC0+ZmlkLCBvZmZzZXQsIGNvdW50
KTsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJcmMgPSB1a185cHJlcV9y
ZWFkeShyZXEsIFVLXzlQUkVRX1pDRElSX1JFQUQsIGJ1ZiwgY291bnQsIDExKTsKPiArCWlmIChy
YyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJcmMgPSB1a185cGRldl9yZXF1ZXN0KGRldiwg
cmVxKTsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJcmMgPSB1a185cHJl
cV93YWl0cmVwbHkocmVxKTsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJ
cmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZShyZXEsICJkIiwgJmNvdW50KTsKPiArCWlmIChyYyA8
IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJdWtfcHJfZGVidWcoIlJSRUFEIGNvdW50ICV1XG4i
LCBjb3VudCk7Cj4gKwo+ICsJcmMgPSBjb3VudDsKPiArCj4gK291dDoKPiArCXVrXzlwZGV2X3Jl
cV9yZW1vdmUoZGV2LCByZXEpOwo+ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtpbnQ2NF90IHVr
XzlwX3dyaXRlKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKPiAr
CQl1aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90IGNvdW50LCBjb25zdCBjaGFyICpidWYpCj4gK3sK
PiArCXN0cnVjdCB1a185cHJlcSAqcmVxOwo+ICsJaW50NjRfdCByYzsKPiArCj4gKwljb3VudCA9
IE1JTihjb3VudCwgZmlkLT5pb3VuaXQpOwo+ICsJY291bnQgPSBNSU4oY291bnQsIGRldi0+bXNp
emUgLSAyMyk7Cj4gKwo+ICsJdWtfcHJfZGVidWcoIlRXUklURSBmaWQgJXUgb2Zmc2V0ICVsdSBj
b3VudCAldVxuIiwgZmlkLT5maWQsCj4gKwkJCW9mZnNldCwgY291bnQpOwo+ICsJcmVxID0gdWtf
OXBkZXZfcmVxX2NyZWF0ZShkZXYsIFVLXzlQX1RXUklURSwgX19QQUdFX1NJWkUpOwo+ICsJaWYg
KFBUUklTRVJSKHJlcSkpCj4gKwkJcmV0dXJuIFBUUjJFUlIocmVxKTsKPiArCj4gKwlyYyA9IHVr
XzlwcmVxX3NlcmlhbGl6ZShyZXEsICJkcWQiLCBmaWQtPmZpZCwgb2Zmc2V0LCBjb3VudCk7Cj4g
KwlpZiAocmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXJjID0gdWtfOXByZXFfcmVhZHko
cmVxLCBVS185UFJFUV9aQ0RJUl9XUklURSwgKHZvaWQgKilidWYsIGNvdW50LCAyMyk7Cj4gKwlp
ZiAocmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXJjID0gdWtfOXBkZXZfcmVxdWVzdChk
ZXYsIHJlcSk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXJjID0gdWtf
OXByZXFfd2FpdHJlcGx5KHJlcSk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsK
PiArCXJjID0gdWtfOXByZXFfZGVzZXJpYWxpemUocmVxLCAiZCIsICZjb3VudCk7Cj4gKwlpZiAo
cmMgPCAwKQo+ICsJCWdvdG8gb3V0Owo+ICsKPiArCXVrX3ByX2RlYnVnKCJSV1JJVEUgY291bnQg
JXVcbiIsIGNvdW50KTsKPiArCj4gKwlyYyA9IGNvdW50Owo+ICsKPiArb3V0Ogo+ICsJdWtfOXBk
ZXZfcmVxX3JlbW92ZShkZXYsIHJlcSk7Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0cnVj
dCB1a185cHJlcSAqdWtfOXBfc3RhdChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlw
ZmlkICpmaWQsCj4gKwkJc3RydWN0IHVrXzlwX3N0YXQgKnN0YXQpCj4gK3sKPiArCXN0cnVjdCB1
a185cHJlcSAqcmVxOwo+ICsJaW50IHJjOwo+ICsJdWludDE2X3QgZHVtbXk7Cj4gKwo+ICsJdWtf
cHJfZGVidWcoIlRTVEFUIGZpZCAldVxuIiwgZmlkLT5maWQpOwo+ICsJcmVxID0gdWtfOXBkZXZf
Y2FsbChkZXYsIFVLXzlQX1RTVEFULCBfX1BBR0VfU0laRSwgImQiLCBmaWQtPmZpZCk7Cj4gKwlp
ZiAoUFRSSVNFUlIocmVxKSkKPiArCQlyZXR1cm4gcmVxOwo+ICsKPiArCXJjID0gdWtfOXByZXFf
ZGVzZXJpYWxpemUocmVxLCAid1MiLCAmZHVtbXksIHN0YXQpOwo+ICsJaWYgKHJjKQo+ICsJCXJl
dHVybiBFUlIyUFRSKHJjKTsKPiArCXVrX3ByX2RlYnVnKCJSU1RBVFxuIik7Cj4gKwo+ICsJcmV0
dXJuIHJlcTsKPiArfQo+ICsKPiAraW50IHVrXzlwX3dzdGF0KHN0cnVjdCB1a185cGRldiAqZGV2
LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCwKPiArCQlzdHJ1Y3QgdWtfOXBfc3RhdCAqc3RhdCkKPiAr
ewo+ICsJc3RydWN0IHVrXzlwcmVxICpyZXE7Cj4gKwo+ICsJLyoKPiArCSAqIFRoZSBwYWNrZWQg
c2l6ZSBvZiBzdGF0IGlzIDYxIGJ5dGVzICsgdGhlIHNpemUgb2NjdXBpZWQgYnkgdGhlCj4gKwkg
KiBzdHJpbmdzLgo+ICsJICovCj4gKwlzdGF0LT5zaXplID0gNjE7Cj4gKwlzdGF0LT5zaXplICs9
IHN0YXQtPm5hbWUuc2l6ZTsKPiArCXN0YXQtPnNpemUgKz0gc3RhdC0+dWlkLnNpemU7Cj4gKwlz
dGF0LT5zaXplICs9IHN0YXQtPmdpZC5zaXplOwo+ICsJc3RhdC0+c2l6ZSArPSBzdGF0LT5tdWlk
LnNpemU7Cj4gKwlzdGF0LT5zaXplICs9IHN0YXQtPmV4dGVuc2lvbi5zaXplOwo+ICsKPiArCXVr
X3ByX2RlYnVnKCJUV1NUQVQgZmlkICV1XG4iLCBmaWQtPmZpZCk7Cj4gKwlyZXEgPSB1a185cGRl
dl9jYWxsKGRldiwgVUtfOVBfVFdTVEFULCBfX1BBR0VfU0laRSwgImR3UyIsIGZpZC0+ZmlkLAo+
ICsJCQlzdGF0LT5zaXplICsgMiwgc3RhdCk7Cj4gKwlpZiAoUFRSSVNFUlIocmVxKSkKPiArCQly
ZXR1cm4gUFRSMkVSUihyZXEpOwo+ICsJdWtfOXBkZXZfcmVxX3JlbW92ZShkZXYsIHJlcSk7Cj4g
Kwl1a19wcl9kZWJ1ZygiUldTVEFUIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiBkaWZmIC0t
Z2l0IGEvbGliL3VrOXAvTWFrZWZpbGUudWsgYi9saWIvdWs5cC9NYWtlZmlsZS51awo+IGluZGV4
IGNkNGJmNGI4YTAzMy4uZWZjMGVlNzQ4YWQ0IDEwMDY0NAo+IC0tLSBhL2xpYi91azlwL01ha2Vm
aWxlLnVrCj4gKysrIGIvbGliL3VrOXAvTWFrZWZpbGUudWsKPiBAQCAtNywzICs3LDQgQEAgTElC
VUs5UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwZGV2X3RyYW5zLmMKPiAgIExJQlVLOVBf
U1JDUy15ICs9ICQoTElCVUs5UF9CQVNFKS85cHJlcS5jCj4gICBMSUJVSzlQX1NSQ1MteSArPSAk
KExJQlVLOVBfQkFTRSkvOXBkZXYuYwo+ICAgTElCVUs5UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JB
U0UpLzlwZmlkLmMKPiArTElCVUs5UF9TUkNTLXkgKz0gJChMSUJVSzlQX0JBU0UpLzlwLmMKPiBk
aWZmIC0tZ2l0IGEvbGliL3VrOXAvZXhwb3J0c3ltcy51ayBiL2xpYi91azlwL2V4cG9ydHN5bXMu
dWsKPiBpbmRleCBlYzQ2OWEyYmZmMDMuLmFhZTllOGExMjdiNSAxMDA2NDQKPiAtLS0gYS9saWIv
dWs5cC9leHBvcnRzeW1zLnVrCj4gKysrIGIvbGliL3VrOXAvZXhwb3J0c3ltcy51awo+IEBAIC0y
MCw2ICsyMCw4IEBAIHVrXzlwZGV2X2Rpc2Nvbm5lY3QKPiAgIHVrXzlwZGV2X3JlcXVlc3QKPiAg
IHVrXzlwZGV2X3htaXRfbm90aWZ5Cj4gICB1a185cGRldl9jYWxsCj4gK3VrXzlwZGV2X3NldF9t
c2l6ZQo+ICt1a185cGRldl9nZXRfbXNpemUKPiAgIAo+ICAgdWtfOXBkZXZfcmVxX2NyZWF0ZQo+
ICAgdWtfOXBkZXZfcmVxX2xvb2t1cAo+IEBAIC0zMSwzICszMywxNiBAQCB1a185cGRldl9nZXRf
bXNpemUKPiAgIHVrXzlwZGV2X2ZpZF9jcmVhdGUKPiAgIHVrXzlwZmlkX2dldAo+ICAgdWtfOXBm
aWRfcHV0Cj4gKwo+ICt1a185cF92ZXJzaW9uCj4gK3VrXzlwX2F0dGFjaAo+ICt1a185cF9mbHVz
aAo+ICt1a185cF93YWxrCj4gK3VrXzlwX29wZW4KPiArdWtfOXBfY3JlYXRlCj4gK3VrXzlwX3Jl
bW92ZQo+ICt1a185cF9jbHVuawo+ICt1a185cF9yZWFkCj4gK3VrXzlwX3dyaXRlCj4gK3VrXzlw
X3N0YXQKPiArdWtfOXBfd3N0YXQKPiBkaWZmIC0tZ2l0IGEvbGliL3VrOXAvaW5jbHVkZS91ay85
cC5oIGIvbGliL3VrOXAvaW5jbHVkZS91ay85cC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp
bmRleCAwMDAwMDAwMDAwMDAuLjU5ZDE4ZDlkMDNjOQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9s
aWIvdWs5cC9pbmNsdWRlL3VrLzlwLmgKPiBAQCAtMCwwICsxLDI2NSBAQAo+ICsvKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4gKy8qCj4gKyAqIEF1dGhvcnM6IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAoYykg
MjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1l
dDoKPiArICoKPiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+
ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiAr
ICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KPiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMi
Cj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ICsgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+
ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
PiArICoKPiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQg
SU4gQU5ZIFdBWS4KPiArICovCj4gKyNpZm5kZWYgX19VS185UF9fCj4gKyNkZWZpbmUgX19VS185
UF9fCj4gKwo+ICsjaW5jbHVkZSA8c3RkYXJnLmg+Cj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiAr
I2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gKyNpbmNsdWRl
IDx1ay85cF9jb3JlLmg+Cj4gKyNpbmNsdWRlIDx1ay85cGRldi5oPgo+ICsjaW5jbHVkZSA8dWsv
OXByZXEuaD4KPiArI2luY2x1ZGUgPHVrLzlwZmlkLmg+Cj4gKwo+ICsjaWZkZWYgX19jcGx1c3Bs
dXMKPiArZXh0ZXJuICJDIiB7Cj4gKyNlbmRpZgo+ICsKPiArLyoqCj4gKyAqIE5lZ290aWF0ZXMg
dGhlIHZlcnNpb24gYW5kIGlzIHRoZSBmaXJzdCBtZXNzYWdlIGluIGEgOVAgc2Vzc2lvbi4KPiAr
ICoKPiArICogQHBhcmFtIGRldgo+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAq
IEBwYXJhbSByZXF1ZXN0ZWQKPiArICogICBSZXF1ZXN0ZWQgdmVyc2lvbiBzdHJpbmcuCj4gKyAq
IEBwYXJhbSByZWNlaXZlZAo+ICsgKiAgIFJlY2VpdmVkIHZlcnNpb24gc3RyaW5nLgo+ICsgKiBA
cmV0dXJuCj4gKyAqICAgLSAoIUVSUlBUUik6IFRoZSByZXF1ZXN0LiBJdCBtdXN0IGJlIHJlbW92
ZWQgb25seSBhZnRlciBhbGwgYWNjZXNzZXMgdG8KPiArICogICB0aGUgcmVjZWl2ZWQgdmVyc2lv
biBzdHJpbmcgYXJlIGRvbmUuCj4gKyAqICAgLSBFUlJQVFI6IFRoZSBlcnJvciByZXR1cm5lZCBl
aXRoZXIgYnkgdGhlIEFQSSBvciBieSB0aGUgcmVtb3RlIHNlcnZlci4KPiArICovCj4gK3N0cnVj
dCB1a185cHJlcSAqdWtfOXBfdmVyc2lvbihzdHJ1Y3QgdWtfOXBkZXYgKmRldiwKPiArCQljb25z
dCBjaGFyICpyZXF1ZXN0ZWQsIHN0cnVjdCB1a185cF9zdHIgKnJlY2VpdmVkKTsKPiArCj4gKy8q
Kgo+ICsgKiBBdHRhY2hlcyB0byBhIGZpbGVzeXN0ZW0gdHJlZSBleHBvcnRlZCBieSB0aGUgOVAg
c2VydmVyLCByZXR1cm5pbmcgdGhlCj4gKyAqIGZpZCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkuCj4g
KyAqCj4gKyAqIEBwYXJhbSBkZXYKPiArICogICBUaGUgVW5pa3JhZnQgOVAgRGV2aWNlLgo+ICsg
KiBAcGFyYW0gYWZpZAo+ICsgKiAgIEF1dGhlbnRpY2F0aW9uIGZpZCwgdXN1YWxseSBVS185UF9O
T0ZJRC4KPiArICogQHBhcmFtIHVuYW1lCj4gKyAqICAgVXNlciBuYW1lLCBjYW4gYmUgZW1wdHkg
c3RyaW5nIGZvciB2aXJ0aW8veGVuLgo+ICsgKiBAcGFyYW0gYW5hbWUKPiArICogICBUaGUgZmls
ZSB0cmVlIHRvIGFjY2VzcywgY2FuIGJlIGxlZnQgZW1wdHkgZm9yIHZpcnRpby94ZW4uCj4gKyAq
IEBwYXJhbSBuX3VuYW1lCj4gKyAqICAgTnVtZXJpYyB1bmFtZSwgcGFydCBvZiB0aGUgOVAyMDAw
LnUgdW5peCBleHRlbnNpb24gdG8gdGhlIHByb3RvY29sLgo+ICsgKiBAcmV0dXJuCj4gKyAqICAg
LSAoIUVSUlBUUik6IFRoZSBmaWQgb2YgdGhlIHJvb3QgZGlyZWN0b3J5IGluIHRoZSBhY2Nlc3Nl
ZCBmaWxlIHRyZWUuCj4gKyAqICAgLSBFUlJQVFI6IFRoZSBlcnJvciByZXR1cm5lZCBlaXRoZXIg
YnkgdGhlIEFQSSBvciBieSB0aGUgcmVtb3RlIHNlcnZlci4KPiArICovCj4gK3N0cnVjdCB1a185
cGZpZCAqdWtfOXBfYXR0YWNoKHN0cnVjdCB1a185cGRldiAqZGV2LCB1aW50MzJfdCBhZmlkLAo+
ICsJCWNvbnN0IGNoYXIgKnVuYW1lLCBjb25zdCBjaGFyICphbmFtZSwgdWludDMyX3Qgbl91bmFt
ZSk7Cj4gKwo+ICsvKioKPiArICogRmx1c2hlcyB0aGUgZ2l2ZW4gcmVxdWVzdCB0YWcsIGNhbmNl
bGluZyB0aGUgY29ycmVzcG9uZGluZyByZXF1ZXN0IGlmCj4gKyAqIHRoZSBzZXJ2ZXIgaGFzIG5v
dCB5ZXQgcmVwbGllZCB0byBpdC4KPiArICoKPiArICogQHBhcmFtIGRldgo+ICsgKiAgIFRoZSBV
bmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJhbSBvbGR0YWcKPiArICogICBSZXF1ZXN0IHRh
Zy4KPiArICogQHJldHVybgo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bC4KPiArICogICAtICg8IDAp
OiBBbiBlcnJvciBvY2N1cnJlZC4KPiArICovCj4gK2ludCB1a185cF9mbHVzaChzdHJ1Y3QgdWtf
OXBkZXYgKmRldiwgdWludDE2X3Qgb2xkdGFnKTsKPiArCj4gKy8qKgo+ICsgKiBXYWxrcyB0aGUg
ZmlsZXN5c3RlbSB0cmVlIGZyb20gdGhlIGdpdmVuIGRpcmVjdG9yeSBmaWQsIGF0dGVtcHRpbmcg
dG8gb2J0YWluCj4gKyAqIHRoZSBmaWQgZm9yIHRoZSBjaGlsZCB3aXRoIHRoZSBnaXZlbiBuYW1l
Lgo+ICsgKgo+ICsgKiBAcGFyYW0gZGV2Cj4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4K
PiArICogQHBhcmFtIGZpZAo+ICsgKiAgIERpcmVjdG9yeSBmaWQuCj4gKyAqIEBwYXJhbSBuYW1l
Cj4gKyAqICAgRmlsZSBuYW1lLgo+ICsgKiBAcmV0dXJuCj4gKyAqICAgLSAoIUVSUlBUUik6IFRo
ZSBmaWQgb2YgdGhlIGNoaWxkIGVudHJ5Lgo+ICsgKiAgIC0gRVJSUFRSOiBUaGUgZXJyb3IgcmV0
dXJuZWQgZWl0aGVyIGJ5IHRoZSBBUEkgb3IgYnkgdGhlIHJlbW90ZSBzZXJ2ZXIuCj4gKyAqLwo+
ICtzdHJ1Y3QgdWtfOXBmaWQgKnVrXzlwX3dhbGsoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVj
dCB1a185cGZpZCAqZmlkLAo+ICsJCWNvbnN0IGNoYXIgKm5hbWUpOwo+ICsKPiArLyoqCj4gKyAq
IE9wZW5zIHRoZSBmaWQgd2l0aCB0aGUgZ2l2ZW4gbW9kZS4KPiArICoKPiArICogQHBhcmFtIGRl
dgo+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJhbSBmaWQKPiArICog
ICA5UCBmaWQuCj4gKyAqIEBwYXJhbSBtb2RlCj4gKyAqICAgOVAgb3BlbiBtb2RlLgo+ICsgKiBA
cmV0dXJuCj4gKyAqICAgLSAwOiBTdWNjZXNzZnVsLgo+ICsgKiAgIC0gKDwgMCk6IEFuIGVycm9y
IG9jY3VycmVkLgo+ICsgKi8KPiAraW50IHVrXzlwX29wZW4oc3RydWN0IHVrXzlwZGV2ICpkZXYs
IHN0cnVjdCB1a185cGZpZCAqZmlkLCB1aW50OF90IG1vZGUpOwo+ICsKPiArLyoqCj4gKyAqIENy
ZWF0ZXMgYSBuZXcgZmlsZSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIHRoZSBkaXJlY3RvcnkgYXNz
b2NpYXRlZCB3aXRoIGZpZCwKPiArICogYW5kIGFzc29jaWF0ZXMgZmlkIHdpdGggdGhlIG5ld2x5
IGNyZWF0ZWQgZmlsZSwgb3BlbmluZyBpdCB3aXRoIHRoZSBnaXZlbgo+ICsgKiBtb2RlLgo+ICsg
Kgo+ICsgKiBAcGFyYW0gZGV2Cj4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiArICog
QHBhcmFtIGZpZAo+ICsgKiAgIDlQIGRpcmVjdG9yeSBmaWQuCj4gKyAqIEBwYXJhbSBuYW1lCj4g
KyAqICAgTmFtZSBvZiB0aGUgY3JlYXRlZCBmaWxlLgo+ICsgKiBAcGFyYW0gcGVybQo+ICsgKiAg
IDlQIHBlcm1pc3Npb24gYml0cy4KPiArICogQHBhcmFtIG1vZGUKPiArICogICA5UCBvcGVuIG1v
ZGUuCj4gKyAqIEBwYXJhbSBleHRlbnNpb24KPiArICogICBTdHJpbmcgZGVzY3JpYmluZyBzcGVj
aWFsIGZpbGVzLCBkZXBlbmRpbmcgb24gdGhlIG1vZGUgYml0Lgo+ICsgKiBAcmV0dXJuCj4gKyAq
ICAgLSAwOiBTdWNjZXNzZnVsLgo+ICsgKiAgIC0gKDwgMCk6IEFuIGVycm9yIG9jY3VycmVkLgo+
ICsgKi8KPiAraW50IHVrXzlwX2NyZWF0ZShzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVr
XzlwZmlkICpmaWQsCj4gKwkJY29uc3QgY2hhciAqbmFtZSwgdWludDMyX3QgcGVybSwgdWludDhf
dCBtb2RlLAo+ICsJCWNvbnN0IGNoYXIgKmV4dGVuc2lvbik7Cj4gKwo+ICsvKioKPiArICogUmVt
b3ZlcyB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggZmlkLgo+ICsgKgo+ICsgKiBAcGFyYW0gZGV2
Cj4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiArICogQHBhcmFtIGZpZAo+ICsgKiAg
IDlQIGZpZCB0byByZW1vdmUuCj4gKyAqIEByZXR1cm4KPiArICogICAtIDA6IFN1Y2Nlc3NmdWwu
Cj4gKyAqICAgLSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQuCj4gKyAqLwo+ICtpbnQgdWtfOXBf
cmVtb3ZlKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCk7Cj4gKwo+
ICsvKioKPiArICogQ2x1bmtzIHRoZSBmaWQsIHRlbGxpbmcgdGhlIHNlcnZlciB0byBmb3JnZXQg
aXRzIHByZXZpb3VzIGFzc29jaWF0aW9uLgo+ICsgKgo+ICsgKiBAcGFyYW0gZGV2Cj4gKyAqICAg
VGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiArICogQHBhcmFtIGZpZAo+ICsgKiAgIDlQIGZpZCB0
byBjbHVuay4KPiArICogQHJldHVybgo+ICsgKiAgIC0gMDogU3VjY2Vzc2Z1bC4KPiArICogICAt
ICg8IDApOiBBbiBlcnJvciBvY2N1cnJlZC4KPiArICovCj4gK2ludCB1a185cF9jbHVuayhzdHJ1
Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwZmlkICpmaWQpOwo+ICsKPiArLyoqCj4gKyAq
IFJlYWRzIGNvdW50IGJ5dGVzIGZyb20gdGhlIGZpZCwgc3RhcnRpbmcgZnJvbSB0aGUgZ2l2ZW4g
b2Zmc2V0LCBwbGFjaW5nCj4gKyAqIHRoZW0gaW50byB0aGUgYnVmZmVyLiBBcyBpbiB0aGUgY2Fz
ZSBvZiBQT1NJWCByZWFkKCksIHRoZSBudW1iZXIgb2YKPiArICogYnl0ZXMgcmVhZCBtYXkgYmUg
bGVzcyB0aGFuIGNvdW50LCB3aGljaCBpcyBub3QgYW4gZXJyb3IsIGJ1dCByYXRoZXIKPiArICog
c2lnbmFscyB0aGF0IHRoZSBvZmZzZXQgaXMgY2xvc2UgdG8gRU9GIG9yIGNvdW50IGlzIHRvbyBi
aWcgZm9yIHRoZQo+ICsgKiB0cmFuc3BvcnQgb2YgdGhpcyA5UCBkZXZpY2UuIEEgcmV0dXJuIHZh
bHVlIG9mIDAgaW5kaWNhdGVzIGVuZCBvZgo+ICsgKiBmaWxlLgo+ICsgKgo+ICsgKiBAcGFyYW0g
ZGV2Cj4gKyAqICAgVGhlIFVuaWtyYWZ0IDlQIERldmljZS4KPiArICogQHBhcmFtIGZpZAo+ICsg
KiAgIDlQIGZpZCB0byByZWFkIGZyb20uCj4gKyAqIEBwYXJhbSBvZmZzZXQKPiArICogICBPZmZz
ZXQgYXQgd2hpY2ggdG8gc3RhcnQgcmVhZGluZy4KPiArICogQHBhcmFtIGNvdW50Cj4gKyAqICAg
TWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KPiArICogQHBhcmFtIGJ1Zgo+ICsgKiAg
IEJ1ZmZlciB0byByZWFkIGludG8uCj4gKyAqIEByZXR1cm4KPiArICogICAtICg+PSAwKTogQW1v
dW50IG9mIGJ5dGVzIHJlYWQuCj4gKyAqICAgLSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQuCj4g
KyAqLwo+ICtpbnQ2NF90IHVrXzlwX3JlYWQoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1
a185cGZpZCAqZmlkLAo+ICsJCXVpbnQ2NF90IG9mZnNldCwgdWludDMyX3QgY291bnQsIGNoYXIg
KmJ1Zik7Cj4gKwo+ICsvKioKPiArICogV3JpdGVzIGNvdW50IGJ5dGVzIGZyb20gYnVmIHRvIHRo
ZSBmaWQsIHN0YXJ0aW5nIGZyb20gdGhlIGdpdmVuIG9mZnNldC4KPiArICoKPiArICogQHBhcmFt
IGRldgo+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJhbSBmaWQKPiAr
ICogICA5UCBmaWQgdG8gd3JpdGUgdG8uCj4gKyAqIEBwYXJhbSBvZmZzZXQKPiArICogICBPZmZz
ZXQgYXQgd2hpY2ggdG8gc3RhcnQgd3JpdGluZy4KPiArICogQHBhcmFtIGNvdW50Cj4gKyAqICAg
TWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gd3JpdGUuCj4gKyAqIEBwYXJhbSBidWYKPiArICog
ICBEYXRhIHRvIGJlIHdyaXR0ZW4uCj4gKyAqIEByZXR1cm4KPiArICogICAtICg+PSAwKTogQW1v
dW50IG9mIGJ5dGVzIHdyaXR0ZW4uCj4gKyAqICAgLSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQu
Cj4gKyAqLwo+ICtpbnQ2NF90IHVrXzlwX3dyaXRlKHN0cnVjdCB1a185cGRldiAqZGV2LCBzdHJ1
Y3QgdWtfOXBmaWQgKmZpZCwKPiArCQl1aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90IGNvdW50LCBj
b25zdCBjaGFyICpidWYpOwo+ICsKPiArLyoqCj4gKyAqIFN0YXRzIHRoZSBnaXZlbiBmaWQgYW5k
IHBsYWNlcyB0aGUgZGF0YSBpbnRvIHRoZSBnaXZlbiBzdGF0IHN0cnVjdHVyZS4KPiArICoKPiAr
ICogQHBhcmFtIGRldgo+ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJh
bSBmaWQKPiArICogICA5UCBmaWQgdG8gc3RhdC4KPiArICogQHBhcmFtIHN0YXQKPiArICogICBX
aGVyZSB0byBzdG9yZSB0aGUgc3RhdCByZXN1bHRzLgo+ICsgKiBAcmV0dXJuCj4gKyAqICAgLSAo
IUVSUlBUUik6IFRoZSByZXF1ZXN0LiBJdCBtdXN0IGJlIHJlbW92ZWQgb25seSBhZnRlciBhbGwg
YWNjZXNzZXMgdG8KPiArICogICB0aGUgc3RyaW5ncyBpbiB0aGUgc3RhdCBzdHJ1Y3R1cmUgYXJl
IG92ZXIuCj4gKyAqICAgLSBFUlJQVFI6IFRoZSBlcnJvciByZXR1cm5lZCBlaXRoZXIgYnkgdGhl
IEFQSSBvciBieSB0aGUgcmVtb3RlIHNlcnZlci4KPiArICovCj4gK3N0cnVjdCB1a185cHJlcSAq
dWtfOXBfc3RhdChzdHJ1Y3QgdWtfOXBkZXYgKmRldiwgc3RydWN0IHVrXzlwZmlkICpmaWQsCj4g
KwkJc3RydWN0IHVrXzlwX3N0YXQgKnN0YXQpOwo+ICsKPiArLyoqCj4gKyAqIENoYW5nZXMgdGhl
IGZpbGUgYXR0cmlidXRlcyBvZiBhIGdpdmVuIGZpZC4KPiArICoKPiArICogQHBhcmFtIGRldgo+
ICsgKiAgIFRoZSBVbmlrcmFmdCA5UCBEZXZpY2UuCj4gKyAqIEBwYXJhbSBmaWQKPiArICogICA5
UCBmaWQgdG8gY2x1bmsuCj4gKyAqIEByZXR1cm4KPiArICogICAtIDA6IFN1Y2Nlc3NmdWwuCj4g
KyAqICAgLSAoPCAwKTogQW4gZXJyb3Igb2NjdXJyZWQuCj4gKyAqLwo+ICtpbnQgdWtfOXBfd3N0
YXQoc3RydWN0IHVrXzlwZGV2ICpkZXYsIHN0cnVjdCB1a185cGZpZCAqZmlkLAo+ICsJCXN0cnVj
dCB1a185cF9zdGF0ICpzdGF0KTsKPiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICt9Cj4gKyNl
bmRpZgo+ICsKPiArI2VuZGlmIC8qIF9fVUtfOVBfXyAqLwo+IAoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 08:52:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 08:52:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i69yp-0002pr-Fe; Fri, 06 Sep 2019 08:52:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i69yo-0002pZ-Cg
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 08:52:30 +0000
X-Inumbo-ID: a7f41f46-d083-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a7f41f46-d083-11e9-a337-bc764e2007e4;
 Fri, 06 Sep 2019 08:52:29 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 9EAF7F200F;
 Fri,  6 Sep 2019 10:52:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id HTDPjKbvddLU; Fri,  6 Sep 2019 10:52:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 6D9A6F2008;
 Fri,  6 Sep 2019 10:52:22 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 10:52:18 +0200
To: Cristian Banu <cristb@gmail.com>, <minios-devel@lists.xen.org>
References: <20190905121433.19834-1-cristb@gmail.com>
 <20190905121433.19834-9-cristb@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <5cc9c752-1548-24b5-9b36-fa3e5a7a7f6d@neclab.eu>
Date: Fri, 6 Sep 2019 10:52:17 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905121433.19834-9-cristb@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 8/8] lib/uk9p: Clunk fids on
 fid release
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: costin.lupu@cs.pub.ro
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoKT24g
MDUuMDkuMTkgMTQ6MTQsIENyaXN0aWFuIEJhbnUgd3JvdGU6Cj4gT24gZmlkIHJlbGVhc2UsIHRo
ZSA5cCBzZXJ2ZXIgaXMgc2VudCBhIGNsdW5rIG1lc3NhZ2UgdG8gZGlzYXNzb2NpYXRlCj4gdGhl
IGZpZCBmcm9tIGl0cyBwcmV2aW91cyBhc3NvY2lhdGlvbiwgc3VjaCB0aGF0IGl0IGhhcyBhIGNs
ZWFuIHNsYXRlCj4gb24gYm90aCB0aGUgc2VydmVyIGFuZCB0aGUgY2xpZW50IHdoZW4gaXQgd2ls
bCBldmVudHVhbGx5IGJlIHJldXNlZC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51
IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICAgbGliL3VrOXAvOXBkZXYuYyB8IDE3ICsrKysr
KysrKysrKysrKystCj4gICAxIGZpbGUgY2hhbmdlZCwgMTYgaW5zZXJ0aW9ucygrKSwgMSBkZWxl
dGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9saWIvdWs5cC85cGRldi5jIGIvbGliL3VrOXAvOXBk
ZXYuYwo+IGluZGV4IDQ3MzUyNTNlMmExZS4uMTRlYTdjYWQzNThhIDEwMDY0NAo+IC0tLSBhL2xp
Yi91azlwLzlwZGV2LmMKPiArKysgYi9saWIvdWs5cC85cGRldi5jCj4gQEAgLTQyLDYgKzQyLDcg
QEAKPiAgICNpbmNsdWRlIDx1ay9iaXRtYXAuaD4KPiAgICNpbmNsdWRlIDx1ay9yZWZjb3VudC5o
Pgo+ICAgI2luY2x1ZGUgPHVrL3dhaXQuaD4KPiArI2luY2x1ZGUgPHVrLzlwLmg+Cj4gICAjaW5j
bHVkZSA8dWsvOXBkZXYuaD4KPiAgICNpbmNsdWRlIDx1ay85cGRldl90cmFucy5oPgo+ICAgI2lu
Y2x1ZGUgPHVrLzlwcmVxLmg+Cj4gQEAgLTQxOCw5ICs0MTksMjMgQEAgdm9pZCB1a185cGRldl9m
aWRfcmVsZWFzZShzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKPiAgIHsKPiAgIAlzdHJ1Y3QgdWtfOXBk
ZXYgKmRldiA9IGZpZC0+X2RldjsKPiAgIAl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICsJYm9vbCBt
b3ZlX3RvX2ZyZWVsaXN0ID0gZmFsc2U7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJLyogRmlyc3QgY2x1
bmsgdGhlIGZpZC4gKi8KPiArCXJjID0gdWtfOXBfY2x1bmsoZmlkLT5fZGV2LCBmaWQpOwo+ICsJ
aWYgKHJjIDwgMCkgewo+ICsJCXVrX3ByX3dhcm4oIkNvdWxkIG5vdCBjbHVuayBmaWQgJWQ6ICVk
XG4iLCBmaWQtPmZpZCwgcmMpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8qIElmIHN1
Y2Nlc3NmdWxseSBjbHVua2VkLCBtb3ZlIGl0IHRvIGEgZnJlZWxpc3QuICovCj4gKwltb3ZlX3Rv
X2ZyZWVsaXN0ID0gdHJ1ZTsKPiAgIAo+ICtvdXQ6Cj4gKwkvKiBUaGVuIHJlbW92ZSBpdCBmcm9t
IGFueSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMuICovCj4gICAJdWtwbGF0X3NwaW5fbG9ja19p
cnFzYXZlKCZkZXYtPl9maWRfbWdtdC5zcGlubG9jaywgZmxhZ3MpOwo+IC0JX2ZpZF9tZ210X2Rl
bF9maWRfbG9ja2VkKCZkZXYtPl9maWRfbWdtdCwgZmlkLCAxKTsKPiArCV9maWRfbWdtdF9kZWxf
ZmlkX2xvY2tlZCgmZGV2LT5fZmlkX21nbXQsIGZpZCwgbW92ZV90b19mcmVlbGlzdCk7Cj4gICAJ
dWtwbGF0X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+X2ZpZF9tZ210LnNwaW5sb2NrLCBm
bGFncyk7Cj4gICB9Cj4gICAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:03:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:03:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6CxS-0002q9-1Y; Fri, 06 Sep 2019 12:03:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6CxQ-0002q4-6X
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:03:16 +0000
X-Inumbo-ID: 4c0680e6-d09e-11e9-abf5-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4c0680e6-d09e-11e9-abf5-12813bfff9fa;
 Fri, 06 Sep 2019 12:03:11 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id BF2EE105664;
 Fri,  6 Sep 2019 14:03:10 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id NsYwMvLuKWVw; Fri,  6 Sep 2019 14:03:10 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 9C1921053DF;
 Fri,  6 Sep 2019 14:03:10 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:03:10 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 6 Sep 2019 14:03:00 +0200
Message-ID: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/6] Move VFS initialization to
 ukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXJpZXMgbW92ZXMgbW91bnRpbmcgZmlsZXN5c3RlbXMgYXMgcGFydCBvZiB0
aGUgVW5pa3JhZnQKaW5pdGlhbGl6YXRpb24gdG8gbGliL3VrYm9vdC4gVGhpcyB3aWxsIGxhdGVy
IHNpbXBsaWZ5IGFkZGluZyBtb3JlIGZlYXR1cmVzCnRvIHRoZSBhdXRvbW91bnQgY29kZSBiZWNh
dXNlIGl0IGlzIGF0IGEgc2luZ2xlIHBsYWNlIChlLmcuLCBsb2FkaW5nIGluaXRyZAphcyByb290
IGZpbGVzeXN0ZW0sIGVuYWJsZSBtb3VudGluZyA5cGZzIHNoYXJlcyBhcyByb290IG1vdW50cG9p
bnQpLgoKUHJldmlvdXNseSwgdGhlIG9wdGlvbiB0byBhdXRvbWF0aWNhbGx5IG1vdW50IGEgcmFt
ZnMgdG8gLyB3YXMgaGlkZGVuLgpJdCBvbmx5IGFwcGVhcmVkIHdoZW4gZGV2ZnMgd2FzIHNlbGVj
dGVkLiBUaGlzIHNlcmllcyBpcyBhbHNvIG1ha2luZyBkZXZmcwphbmQgcmFtZnMgcGVybWFuZW50
bHkgdmlzaWJsZSBpbiB0aGUgbWVudSB0byBzaW1wbGlmeSB0aGUgdXNhZ2UuCgpDaGFuZ2VzIHNp
bmNlIHYxOgogLSBBZG9wdCB0byBsYXRlc3Qgc3RhZ2luZyBzdGF0ZQogLSBBZGQgYWJpbGl0eSB0
byBjb25maWd1cmUgcm9vdCBmcyB3aXRoIGtlcm5lbCBwYXJhbWV0ZXJzCgpTaW1vbiBLdWVuemVy
ICg2KToKICBsaWIvdWtib290OiBBcHBsaWNhdGlvbiBjb25zdHJ1Y3RvcnMgcmlnaHQgYmVmb3Jl
IGNhbGxpbmcgYXBwbGljYXRpb24KICBsaWIvZGV2ZnMsIGxpYi91a2Jvb3Q6IE1vdmUgb3B0aW9u
IHRvIGF1dG9tYXRpY2FsbHkgbW91bnQgcm9vdCB0bwogICAgbGlidWtib290CiAgbGliL3VrYm9v
dDogZGV2ZnMgYXV0b21vdW50IG9wdGlvbgogIGxpYi9yYW1mczogQ29uZmlnLnVrOiBVc2Ugc2Vs
ZWN0IGZvciBkZXBlbmRlbmN5CiAgbGliL3Vrc3dyYW5kOiBDbGVhbi11cDogZGV2ZnMgbm9kZXMg
YXJlIGluZGVwZW5kZW50IG9mIE1XQyBhbGdvcml0aG0KICBsaWIvdWtib290OiBSb290IGZpbGVz
eXN0ZW0gYXMgbGlicmFyeSBwYXJhbWV0ZXIKCiBsaWIvZGV2ZnMvQ29uZmlnLnVrICAgICAgICAg
ICAgICAgfCAgIDggKy0tCiBsaWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYyAgICAgICAgICAgfCAgMjUg
LS0tLS0tLS0KIGxpYi9yYW1mcy9Db25maWcudWsgICAgICAgICAgICAgICB8ICAgMiArLQogbGli
L3VrYm9vdC9Db25maWcudWsgICAgICAgICAgICAgIHwgIDI5ICsrKysrKysrKwogbGliL3VrYm9v
dC9NYWtlZmlsZS51ayAgICAgICAgICAgIHwgICAzICsKIGxpYi91a2Jvb3QvYm9vdC5jICAgICAg
ICAgICAgICAgICB8IDEwMiArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIGxpYi91a3N3
cmFuZC9Db25maWcudWsgICAgICAgICAgICB8ICAgNSArLQogbGliL3Vrc3dyYW5kL01ha2VmaWxl
LnVrICAgICAgICAgIHwgICA2ICstCiBsaWIvdWtzd3JhbmQve213Y19kZXYuYyA9PiBkZXYuY30g
fCAgMjYgKysrKystLS0KIDkgZmlsZXMgY2hhbmdlZCwgMTM0IGluc2VydGlvbnMoKyksIDcyIGRl
bGV0aW9ucygtKQogcmVuYW1lIGxpYi91a3N3cmFuZC97bXdjX2Rldi5jID0+IGRldi5jfSAoODMl
KQoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:03:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:03:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6CxW-0002rE-3E; Fri, 06 Sep 2019 12:03:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6CxV-0002r7-22
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:03:21 +0000
X-Inumbo-ID: 4f35293e-d09e-11e9-abf5-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4f35293e-d09e-11e9-abf5-12813bfff9fa;
 Fri, 06 Sep 2019 12:03:17 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0B72FF201B;
 Fri,  6 Sep 2019 14:03:16 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id YnqmfzP57tBb; Fri,  6 Sep 2019 14:03:15 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D8729F2008;
 Fri,  6 Sep 2019 14:03:11 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:03:11 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 6 Sep 2019 14:03:01 +0200
Message-ID: <20190906120306.18966-2-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/6] lib/ukboot: Application
 constructors right before calling application
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

cHJlaW5pdCBhbmQgaW5pdCB0YWJsZXMgYXJlIHBhcnQgb2YgcG9ydGVkIGxpYnJhcmllcyBhbmQg
YXBwbGljYXRpb25zLgpTaW5jZSB0aGV5IGFyZSBvcmlnaW5hbGx5IHJ1biBpbiB1c2VyIHNwYWNl
IG9uIExpbnV4IG9yIEJTRCwgdGhleQpleHBlY3QgZnVsbHkgaW5pdGlhbGl6ZWQga2VybmVsIGxh
eWVycy4gVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucwpsaXN0ZWQgaW4gdGhvc2UgdGFibGVzIGNv
dWxkIGNyZWF0ZSB0aHJlYWRzLCBhbGxvY2F0ZSBtZW1vcnksIG9yCmludGVyYWN0IHdpdGggdGhl
IFZGUywgZXRjLgpUaGlzIHBhdGNoIG1vdmVzIGNhbGxpbmcgdGhvc2UgY29uc3RydWN0b3JzIGF0
IHRoZSBsYXRlc3QgcG9zc2libGUgcG9pbnQuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVy
IDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KLS0tCiBsaWIvdWtib290L2Jvb3QuYyB8IDUyICsr
KysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hh
bmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGli
L3VrYm9vdC9ib290LmMgYi9saWIvdWtib290L2Jvb3QuYwppbmRleCAzYjhkNjQxZi4uN2ZiMDkw
OGEgMTAwNjQ0Ci0tLSBhL2xpYi91a2Jvb3QvYm9vdC5jCisrKyBiL2xpYi91a2Jvb3QvYm9vdC5j
CkBAIC04MiwyOCArODIsNiBAQCBzdGF0aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFy
ZykKIAlpbnQgcmV0OwogCXN0cnVjdCB0aHJlYWRfbWFpbl9hcmcgKnRtYSA9IGFyZzsKIAotCXVr
X3ByX2luZm8oIlByZS1pbml0IHRhYmxlIGF0ICVwIC0gJXBcbiIsCi0JCSAgIF9fcHJlaW5pdF9h
cnJheV9zdGFydCwgJl9fcHJlaW5pdF9hcnJheV9lbmQpOwotCXVrX2N0b3JfZm9yZWFjaChfX3By
ZWluaXRfYXJyYXlfc3RhcnQsIF9fcHJlaW5pdF9hcnJheV9lbmQsIGkpIHsKLQkJaWYgKF9fcHJl
aW5pdF9hcnJheV9zdGFydFtpXSkgewotCQkJdWtfcHJfZGVidWcoIkNhbGwgcHJlLWluaXQgY29u
c3RydWN0b3IgKGVudHJ5ICVkICglcCk6ICVwKCkpLi4uXG4iLAotCQkJCSAgICBpLCAmX19wcmVp
bml0X2FycmF5X3N0YXJ0W2ldLAotCQkJCSAgICBfX3ByZWluaXRfYXJyYXlfc3RhcnRbaV0pOwot
CQkJX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKCk7Ci0JCX0KLQl9Ci0KLQl1a19wcl9pbmZvKCJD
b25zdHJ1Y3RvciB0YWJsZSBhdCAlcCAtICVwXG4iLAotCQkJX19pbml0X2FycmF5X3N0YXJ0LCAm
X19pbml0X2FycmF5X2VuZCk7Ci0JdWtfY3Rvcl9mb3JlYWNoKF9faW5pdF9hcnJheV9zdGFydCwg
X19pbml0X2FycmF5X2VuZCwgaSkgewotCQlpZiAoX19pbml0X2FycmF5X3N0YXJ0W2ldKSB7Ci0J
CQl1a19wcl9kZWJ1ZygiQ2FsbCBjb25zdHJ1Y3RvciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5c
biIsCi0JCQkJCWksICZfX2luaXRfYXJyYXlfc3RhcnRbaV0sCi0JCQkJCV9faW5pdF9hcnJheV9z
dGFydFtpXSk7Ci0JCQlfX2luaXRfYXJyYXlfc3RhcnRbaV0oKTsKLQkJfQotCX0KLQogI2lmZGVm
IENPTkZJR19MSUJVS0JVUwogCXVrX3ByX2luZm8oIkluaXRpYWxpemUgYnVzIGhhbmRsZXJzLi4u
XG4iKTsKIAl1a19idXNfaW5pdF9hbGwodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSk7CkBAIC0xMjks
NiArMTA3LDM2IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJnKQogCXBy
aW50ZigiJTM1c1xuIiwKIAkgICAgICAgU1RSSU5HSUZZKFVLX0NPREVOQU1FKSAiICIgU1RSSU5H
SUZZKFVLX0ZVTExWRVJTSU9OKSk7CiAjZW5kaWYKKwkvKgorCSAqIEFwcGxpY2F0aW9uCisJICoK
KwkgKiBXZSBhcmUgY2FsbGluZyB0aGUgYXBwbGljYXRpb24gY29uc3RydWN0b3JzIHJpZ2h0IGJl
Zm9yZSBjYWxsaW5nCisJICogdGhlIGFwcGxpY2F0aW9uJ3MgbWFpbigpLiBBbGwgb2Ygb3VyIFVu
aWtyYWZ0IHN5c3RlbXMsIFZGUywKKwkgKiBuZXR3b3JraW5nIHN0YWNrIGlzIGluaXRpYWxpemVk
IGF0IHRoaXMgcG9pbnQuIFRoaXMgd2F5IHdlIGNsb3NlbHkKKwkgKiBtaW1pYyB3aGF0IGEgcmVn
dWxhciB1c2VyIGFwcGxpY2F0aW9uIChlLmcuLCBCU0QsIExpbnV4KSB3b3VsZCBleHBlY3QKKwkg
KiBmcm9tIGl0cyBPUyBiZWluZyBpbml0aWFsaXplZC4KKwkgKi8KKwl1a19wcl9pbmZvKCJQcmUt
aW5pdCB0YWJsZSBhdCAlcCAtICVwXG4iLAorCQkgICBfX3ByZWluaXRfYXJyYXlfc3RhcnQsICZf
X3ByZWluaXRfYXJyYXlfZW5kKTsKKwl1a19jdG9yX2ZvcmVhY2goX19wcmVpbml0X2FycmF5X3N0
YXJ0LCBfX3ByZWluaXRfYXJyYXlfZW5kLCBpKSB7CisJCWlmIChfX3ByZWluaXRfYXJyYXlfc3Rh
cnRbaV0pIHsKKwkJCXVrX3ByX2RlYnVnKCJDYWxsIHByZS1pbml0IGNvbnN0cnVjdG9yIChlbnRy
eSAlZCAoJXApOiAlcCgpKS4uLlxuIiwKKwkJCQkgICAgaSwgJl9fcHJlaW5pdF9hcnJheV9zdGFy
dFtpXSwKKwkJCQkgICAgX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKTsKKwkJCV9fcHJlaW5pdF9h
cnJheV9zdGFydFtpXSgpOworCQl9CisJfQorCisJdWtfcHJfaW5mbygiQ29uc3RydWN0b3IgdGFi
bGUgYXQgJXAgLSAlcFxuIiwKKwkJCV9faW5pdF9hcnJheV9zdGFydCwgJl9faW5pdF9hcnJheV9l
bmQpOworCXVrX2N0b3JfZm9yZWFjaChfX2luaXRfYXJyYXlfc3RhcnQsIF9faW5pdF9hcnJheV9l
bmQsIGkpIHsKKwkJaWYgKF9faW5pdF9hcnJheV9zdGFydFtpXSkgeworCQkJdWtfcHJfZGVidWco
IkNhbGwgY29uc3RydWN0b3IgKGVudHJ5ICVkICglcCk6ICVwKCkpLi4uXG4iLAorCQkJCQlpLCAm
X19pbml0X2FycmF5X3N0YXJ0W2ldLAorCQkJCQlfX2luaXRfYXJyYXlfc3RhcnRbaV0pOworCQkJ
X19pbml0X2FycmF5X3N0YXJ0W2ldKCk7CisJCX0KKwl9CiAKIAl1a19wcl9pbmZvKCJDYWxsaW5n
IG1haW4oJWQsIFsiLCB0bWEtPmFyZ2MpOwogCWZvciAoaSA9IDA7IGkgPCB0bWEtPmFyZ2M7ICsr
aSkgewotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:03:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:03:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6CxZ-0002rp-4e; Fri, 06 Sep 2019 12:03:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6CxX-0002rZ-9y
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:03:23 +0000
X-Inumbo-ID: 518e6c72-d09e-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 518e6c72-d09e-11e9-978d-bc764e2007e4;
 Fri, 06 Sep 2019 12:03:21 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 19922F201B;
 Fri,  6 Sep 2019 14:03:20 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id S_uNldpUWbTI; Fri,  6 Sep 2019 14:03:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E45D4F2008;
 Fri,  6 Sep 2019 14:03:15 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:03:12 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 6 Sep 2019 14:03:02 +0200
Message-ID: <20190906120306.18966-3-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 2/6] lib/devfs,
 lib/ukboot: Move option to automatically mount root to libukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TW92ZXMgdGhlIG9wdGlvbiBvZiBhdXRvbWF0aWNhbGx5IG1vdW50aW5nIHJhbWZzIGFzIGEgcm9v
dCBmaWxlc3lzdGVtCnRvIGxpYi91a2Jvb3QuIFRoaXMgZmVhdHVyZSBpcyBub3Qgb25seSB1c2Vm
dWwgZm9yIGluaXRpYWxpemluZwpkZXZmcy4gVGhlIGlkZWEgaXMgdGhhdCB3ZSBjb3VsZCBsYXRl
ciBmZWVkIGl0cyBpbml0aWFsIGNvbnRlbnQgZnJvbSBhCmFyY2hpdmUgZ2l2ZW4gdGhyb3VnaCBh
biBpbml0cmQuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5l
Y2xhYi5ldT4KLS0tCiBsaWIvZGV2ZnMvQ29uZmlnLnVrICAgICB8ICA4ICstLS0tLS0tCiBsaWIv
ZGV2ZnMvZGV2ZnNfdm5vcHMuYyB8IDI1IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYi91
a2Jvb3QvQ29uZmlnLnVrICAgIHwgIDUgKysrKysKIGxpYi91a2Jvb3QvYm9vdC5jICAgICAgIHwg
MjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzNCBpbnNl
cnRpb25zKCspLCAzMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvZGV2ZnMvQ29uZmln
LnVrIGIvbGliL2RldmZzL0NvbmZpZy51awppbmRleCBlMzhhNjE2ZS4uZjZiMTZhZWUgMTAwNjQ0
Ci0tLSBhL2xpYi9kZXZmcy9Db25maWcudWsKKysrIGIvbGliL2RldmZzL0NvbmZpZy51awpAQCAt
MSwxMCArMSw0IEBACiBjb25maWcgTElCREVWRlMKIAlib29sICJkZXZmczogZGV2ZnMgZmlsZSBz
eXN0ZW0iCiAJZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBMSUJWRlNDT1JFCi1pZiBMSUJERVZGUwot
ICAgICAgICBjb25maWcgTElCREVWRlNfVVNFX1JBTUZTCi0gICAgICAgIGJvb2wgIlVzZSByYW1m
cyBhcyByb290IgotICAgICAgICBkZWZhdWx0IG4KLSAgICAgICAgc2VsZWN0IExJQlJBTUZTCi1l
bmRpZgorCXNlbGVjdCBMSUJWRlNDT1JFCmRpZmYgLS1naXQgYS9saWIvZGV2ZnMvZGV2ZnNfdm5v
cHMuYyBiL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jCmluZGV4IDExYTNlYTA1Li4zMzk5YjJiYyAx
MDA2NDQKLS0tIGEvbGliL2RldmZzL2RldmZzX3Zub3BzLmMKKysrIGIvbGliL2RldmZzL2RldmZz
X3Zub3BzLmMKQEAgLTMwOSwyOCArMzA5LDMgQEAgc3RhdGljIHN0cnVjdCB2ZnNjb3JlX2ZzX3R5
cGUgZnNfZGV2ZnMgPSB7CiB9OwogCiBVS19GU19SRUdJU1RFUihmc19kZXZmcyk7Ci0KLV9fY29u
c3RydWN0b3JfcHJpbygxMDEpIHN0YXRpYyB2b2lkIGRldmZzX2luaXQodm9pZCkKLXsKLSNpZmRl
ZiBDT05GSUdfTElCREVWRlNfVVNFX1JBTUZTCi0JaW50IHJldDsKLQotCXJldCA9IG1vdW50KCIi
LCAiLyIsICJyYW1mcyIsIDAsIE5VTEwpOwotCWlmIChyZXQgIT0gMCkgewotCQl1a19wcl9kZWJ1
ZygiRmFpbGVkIHRvIG1vdW50IC8gaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0K
LQotCXJldCA9ICBta2RpcigiL2RldiIsIFNfSVJXWFUpOwotCWlmIChyZXQgIT0gMCkgewotCQl1
a19wcl9kZWJ1ZygiRmFpbGVkIHRvIG1rZGlyIC9kZXYgaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJ
cmV0dXJuOwotCX0KLQotCXJldCA9IG1vdW50KCIiLCAiL2RldiIsICJkZXZmcyIsIDAsIE5VTEwp
OwotCWlmIChyZXQgIT0gMCkgewotCQl1a19wcl9kZWJ1ZygiRmFpbGVkIHRvIG1vdW50IC9kZXYg
YXMgZGV2ZnMgaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotfQpk
aWZmIC0tZ2l0IGEvbGliL3VrYm9vdC9Db25maWcudWsgYi9saWIvdWtib290L0NvbmZpZy51awpp
bmRleCA4NDFhODc2Ny4uNmY4NmM3ZGUgMTAwNjQ0Ci0tLSBhL2xpYi91a2Jvb3QvQ29uZmlnLnVr
CisrKyBiL2xpYi91a2Jvb3QvQ29uZmlnLnVrCkBAIC0yMSw0ICsyMSw5IEBAIGlmIExJQlVLQk9P
VAogCWJvb2wgIkluaXRpYWxpemUgdWthbGxvY2JidWRkeSBhcyBhbGxvY2F0b3IiCiAJZGVmYXVs
dCB5CiAJc2VsZWN0IExJQlVLQUxMT0NCQlVERFkKKworCWNvbmZpZyBMSUJVS0JPT1RfVkZTUk9P
VAorCWJvb2wgIk1vdW50IHJhbWZzIHRvIC8iCisJZGVmYXVsdCBuCisJc2VsZWN0IExJQlJBTUZT
CiBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3VrYm9vdC9ib290LmMgYi9saWIvdWtib290L2Jvb3Qu
YwppbmRleCA3ZmIwOTA4YS4uY2IzNDAzZTEgMTAwNjQ0Ci0tLSBhL2xpYi91a2Jvb3QvYm9vdC5j
CisrKyBiL2xpYi91a2Jvb3QvYm9vdC5jCkBAIC02Myw2ICs2MywxMSBAQAogI2lmZGVmIENPTkZJ
R19MSUJVS0xJQlBBUkFNCiAjaW5jbHVkZSA8dWsvbGlicGFyYW0uaD4KICNlbmRpZiAvKiBDT05G
SUdfTElCVUtMSUJQQVJBTSAqLworI2lmZGVmIENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVAorI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYgLyogQ09O
RklHX0xJQlVLQk9PVF9WRlNST09UICovCisKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkgX193ZWFrOwogI2lmZGVmIENPTkZJR19MSUJMV0lQCkBAIC04OSw2ICs5NCwyOSBAQCBz
dGF0aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKIAl1a19idXNfcHJvYmVfYWxs
KCk7CiAjZW5kaWYgLyogQ09ORklHX0xJQlVLQlVTICovCiAKKwkvKgorCSAqIFZGUyBpbml0aWFs
aXphdGlvbgorCSAqLworI2lmZGVmIENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVAorCS8qCisJICog
VE9ETzogUHJvdmlkZSBhIGJvb3QgcGFyYW1ldGVyIG9wdGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9t
CisJICogcm9vdCBtb3VudCAoZS5nLiwgcmFtZnMsIGluaXRyZCwgOXBmcykuCisJICovCisJdWtf
cHJfaW5mbygiTW91bnQgcm9vdC4uLlxuIik7CisJcmV0ID0gbW91bnQoIiIsICIvIiwgInJhbWZz
IiwgMCwgTlVMTCk7CisJaWYgKHJldCAhPSAwKQorCQlVS19DUkFTSCgiRmFpbGVkIHRvIG1vdW50
IHJhbWZzIHRvIC9cbiIpOworCisJLyoKKwkgKiBUT0RPOiBXZSBjb3VsZCBwbGFjZSBoZXJlIGNv
ZGUgdGhhdCBleHRyYWN0cyBhbiBhcmNoaXZlCisJICogZm91bmQgYXMgaW5pdHJkIHRvICcvJwor
CSAqLworCisjZW5kaWYgLyogQ09ORklHX0xJQlVLQk9PVF9WRlNST09UICovCisKKwkvKgorCSAq
IE5ldHdvcmsgaW5pdGlhbGl6YXRpb24KKwkgKi8KICNpZmRlZiBDT05GSUdfTElCTFdJUAogCS8q
CiAJICogVE9ETzogVGhpcyBpcyBhbiBpbml0aWFsIGltcGxlbWVudGF0aW9uIHdoZXJlIHdlIGNh
bGwgdGhlCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:03:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:03:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Cxe-0002sp-6F; Fri, 06 Sep 2019 12:03:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6Cxc-0002sM-Ao
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:03:28 +0000
X-Inumbo-ID: 53f997d4-d09e-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 53f997d4-d09e-11e9-978d-bc764e2007e4;
 Fri, 06 Sep 2019 12:03:24 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2BD24F201B;
 Fri,  6 Sep 2019 14:03:24 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 9eyBjnuDf4_V; Fri,  6 Sep 2019 14:03:24 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id F0745F2008;
 Fri,  6 Sep 2019 14:03:19 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:03:13 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 6 Sep 2019 14:03:03 +0200
Message-ID: <20190906120306.18966-4-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 3/6] lib/ukboot: devfs automount
 option
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmUtaW50cm9kdWNlIG1vdW50aW5nIGRldmZzIHRvIGAvZGV2YCBhdXRvbWF0aWNhbGx5IGR1cmlu
ZyBib290LgoKU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNs
YWIuZXU+Ci0tLQogbGliL3VrYm9vdC9Db25maWcudWsgfCAgNiArKysrKysKIGxpYi91a2Jvb3Qv
Ym9vdC5jICAgIHwgMTAgKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxNiBpbnNlcnRpb25z
KCspCgpkaWZmIC0tZ2l0IGEvbGliL3VrYm9vdC9Db25maWcudWsgYi9saWIvdWtib290L0NvbmZp
Zy51awppbmRleCA2Zjg2YzdkZS4uODQyMGFhZTkgMTAwNjQ0Ci0tLSBhL2xpYi91a2Jvb3QvQ29u
ZmlnLnVrCisrKyBiL2xpYi91a2Jvb3QvQ29uZmlnLnVrCkBAIC0yNiw0ICsyNiwxMCBAQCBpZiBM
SUJVS0JPT1QKIAlib29sICJNb3VudCByYW1mcyB0byAvIgogCWRlZmF1bHQgbgogCXNlbGVjdCBM
SUJSQU1GUworCisJY29uZmlnIExJQlVLQk9PVF9ERVZGUworCWJvb2wgIk1vdW50IGRldmZzIHRv
IC9kZXYiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBMSUJVS0JPT1RfVkZTUk9PVAorCXNlbGVj
dCBMSUJERVZGUwogZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvYm9vdC5jIGIvbGliL3Vr
Ym9vdC9ib290LmMKaW5kZXggY2IzNDAzZTEuLjVlMmNiNzU3IDEwMDY0NAotLS0gYS9saWIvdWti
b290L2Jvb3QuYworKysgYi9saWIvdWtib290L2Jvb3QuYwpAQCAtMTEyLDYgKzExMiwxNiBAQCBz
dGF0aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKIAkgKiBmb3VuZCBhcyBpbml0
cmQgdG8gJy8nCiAJICovCiAKKyNpZmRlZiBDT05GSUdfTElCVUtCT09UX0RFVkZTCisJdWtfcHJf
aW5mbygiTW91bnQgJy9kZXYnLi4uXG4iKTsKKwlyZXQgPSAgbWtkaXIoIi9kZXYiLCBTX0lSV1hV
KTsKKwlpZiAocmV0ICE9IDApCisJCVVLX0NSQVNIKCJGYWlsZWQgdG8gY3JlYXRlIGRpcmVjdG9y
eSAnL2RldidcbiIpOworCisJcmV0ID0gbW91bnQoIiIsICIvZGV2IiwgImRldmZzIiwgMCwgTlVM
TCk7CisJaWYgKHJldCAhPSAwKQorCQlVS19DUkFTSCgiRmFpbGVkIHRvIG1vdW50IGRldmZzIHRv
ICcvZGV2J1xuIik7CisjZW5kaWYgLyogQ09ORklHX0xJQlVLQk9PVF9ERVZGUyAqLwogI2VuZGlm
IC8qIENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVCAqLwogCiAJLyoKLS0gCjIuMjAuMQoKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:03:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:03:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Cxf-0002tC-7s; Fri, 06 Sep 2019 12:03:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6Cxd-0002sd-O0
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:03:29 +0000
X-Inumbo-ID: 5641651d-d09e-11e9-abf5-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5641651d-d09e-11e9-abf5-12813bfff9fa;
 Fri, 06 Sep 2019 12:03:29 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 34F66F201B;
 Fri,  6 Sep 2019 14:03:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id qXLqGlc5-A-n; Fri,  6 Sep 2019 14:03:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0C3EFF2008;
 Fri,  6 Sep 2019 14:03:24 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:03:15 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 6 Sep 2019 14:03:04 +0200
Message-ID: <20190906120306.18966-5-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 4/6] lib/ramfs: Config.uk: Use
 select for dependency
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXNlIGBzZWxlY3RgIGluc3RlYWQgb2YgYGRlcGVuZHMgb25gIHdoaWNoIG1ha2VzIHRoZSBmaWxl
c3lzdGVtCmxpYnJhcnkgZXhpc3RlbmNlIG1vcmUgb2J2aW91cyB3aXRoaW4gdGhlIG1lbnUuCgpT
aWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KLS0t
CiBsaWIvcmFtZnMvQ29uZmlnLnVrIHwgMiArLQogMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9u
KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGliL3JhbWZzL0NvbmZpZy51ayBiL2xp
Yi9yYW1mcy9Db25maWcudWsKaW5kZXggNTJlNDM4OGMuLmI4ZDk4OTM2IDEwMDY0NAotLS0gYS9s
aWIvcmFtZnMvQ29uZmlnLnVrCisrKyBiL2xpYi9yYW1mcy9Db25maWcudWsKQEAgLTEsNCArMSw0
IEBACiBjb25maWcgTElCUkFNRlMKIAlib29sICJyYW1mczogc2ltcGxlIFJBTSBmaWxlIHN5c3Rl
bSIKIAlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIExJQlZGU0NPUkUKKwlzZWxlY3QgTElCVkZTQ09S
RQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:03:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:03:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Cxj-0002u5-9N; Fri, 06 Sep 2019 12:03:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6Cxh-0002tq-UV
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:03:33 +0000
X-Inumbo-ID: 58d1f436-d09e-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 58d1f436-d09e-11e9-b299-bc764e2007e4;
 Fri, 06 Sep 2019 12:03:33 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4A5E4F201B;
 Fri,  6 Sep 2019 14:03:32 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id u2ldeGiit0Xg; Fri,  6 Sep 2019 14:03:32 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1CA0CF2008;
 Fri,  6 Sep 2019 14:03:28 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:03:16 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 6 Sep 2019 14:03:05 +0200
Message-ID: <20190906120306.18966-6-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 5/6] lib/ukswrand: Clean-up:
 devfs nodes are independent of MWC algorithm
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGRldmZzIGludGVncmF0aW9uIG9mIHVrc3dyYW5kOgot
IFRoZSBjb25maWcgb3B0aW9uIGlzIHByb3Blcmx5IG5hbWVzcGFjZWQuCi0gbXdjX2Rldi5jIGlz
IGFjdHVhbGx5IGluZGVwZW5kZW50IG9mIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBNV0Mu
CiAgV2UgbW92ZSB0aGlzIGZpbGUgdG8gZGV2LmMKLSBDcmFzaCB0aGUgc3lzdGVtIHdoZW4gcmVn
aXN0cmF0aW9uIGZhaWxlZCB3aXRoaW4gdGhlIGNvbnN0cnVjdG9yLgogIFRoaXMgYmVoYXZpb3Ig
Y2FuIGJlIGNoYW5nZWQgYXMgc29vbiBhcyB3ZSBpbnRyb2R1Y2UgVW5pa3JhZnQgaW5pdAogIGZ1
bmN0aW9ucyB0aGF0IGNhbiByZXR1cm4gZXJyb3IgY29kZXMuCgpTaWduZWQtb2ZmLWJ5OiBTaW1v
biBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KLS0tCiBsaWIvdWtzd3JhbmQvQ29u
ZmlnLnVrICAgICAgICAgICAgfCAgNSArKy0tLQogbGliL3Vrc3dyYW5kL01ha2VmaWxlLnVrICAg
ICAgICAgIHwgIDYgKystLS0tCiBsaWIvdWtzd3JhbmQve213Y19kZXYuYyA9PiBkZXYuY30gfCAy
NiArKysrKysrKysrKysrKysrKystLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRp
b25zKCspLCAxNSBkZWxldGlvbnMoLSkKIHJlbmFtZSBsaWIvdWtzd3JhbmQve213Y19kZXYuYyA9
PiBkZXYuY30gKDgzJSkKCmRpZmYgLS1naXQgYS9saWIvdWtzd3JhbmQvQ29uZmlnLnVrIGIvbGli
L3Vrc3dyYW5kL0NvbmZpZy51awppbmRleCBhMWE4NGJjNS4uNDBkMjJjODYgMTAwNjQ0Ci0tLSBh
L2xpYi91a3N3cmFuZC9Db25maWcudWsKKysrIGIvbGliL3Vrc3dyYW5kL0NvbmZpZy51awpAQCAt
MTgsOSArMTgsOCBAQCBjb25maWcgTElCVUtTV1JBTkRfSU5JVElBTFNFRUQKIAlpbnQgIkluaXRp
YWwgcmFuZG9tIHNlZWQiCiAJZGVmYXVsdCAyMwogCi1jb25maWcgREVWX1JBTkRPTQotCWJvb2wg
Ii9kZXYvcmFuZG9tIGRldmljZSIKK2NvbmZpZyBMSUJVS1NXUkFORF9ERVZGUworCWJvb2wgIlJl
Z2lzdGVyIHJhbmRvbSBhbmQgdXJhbmRvbSB0byBkZXZmcyIKIAlzZWxlY3QgTElCREVWRlMKIAlk
ZWZhdWx0IG4KLQogZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51ayBi
L2xpYi91a3N3cmFuZC9NYWtlZmlsZS51awppbmRleCAyNTI0NzQ3NC4uYjE5MDk0ZTAgMTAwNjQ0
Ci0tLSBhL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51aworKysgYi9saWIvdWtzd3JhbmQvTWFrZWZp
bGUudWsKQEAgLTMsNyArMyw1IEBAICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWtzd3JhbmQs
JChDT05GSUdfTElCVUtTV1JBTkQpKSkKIENJTkNMVURFUy0kKENPTkZJR19MSUJVS1NXUkFORCkJ
Kz0gLUkkKExJQlVLU1dSQU5EX0JBU0UpL2luY2x1ZGUKIENYWElOQ0xVREVTLSQoQ09ORklHX0xJ
QlVLU1dSQU5EKSArPSAtSSQoTElCVUtTV1JBTkRfQkFTRSkvaW5jbHVkZQogCi1MSUJVS1NXUkFO
RF9TUkNTLSQoQ09ORklHX0xJQlVLU1dSQU5EX01XQykgKz0gJChMSUJVS1NXUkFORF9CQVNFKS9t
d2MuYwotaWZkZWYgQ09ORklHX0RFVl9SQU5ET00KLUxJQlVLU1dSQU5EX1NSQ1MtJChDT05GSUdf
TElCVUtTV1JBTkRfTVdDKSArPSAkKExJQlVLU1dSQU5EX0JBU0UpL213Y19kZXYuYwotZW5kaWYK
K0xJQlVLU1dSQU5EX1NSQ1MtJChDT05GSUdfTElCVUtTV1JBTkRfTVdDKSAgICs9ICQoTElCVUtT
V1JBTkRfQkFTRSkvbXdjLmMKK0xJQlVLU1dSQU5EX1NSQ1MtJChDT05GSUdfTElCVUtTV1JBTkRf
REVWRlMpICs9ICQoTElCVUtTV1JBTkRfQkFTRSkvZGV2LmMKZGlmZiAtLWdpdCBhL2xpYi91a3N3
cmFuZC9td2NfZGV2LmMgYi9saWIvdWtzd3JhbmQvZGV2LmMKc2ltaWxhcml0eSBpbmRleCA4MyUK
cmVuYW1lIGZyb20gbGliL3Vrc3dyYW5kL213Y19kZXYuYwpyZW5hbWUgdG8gbGliL3Vrc3dyYW5k
L2Rldi5jCmluZGV4IDVhNGNiMTAwLi5jNWNlNWY4NyAxMDA2NDQKLS0tIGEvbGliL3Vrc3dyYW5k
L213Y19kZXYuYworKysgYi9saWIvdWtzd3JhbmQvZGV2LmMKQEAgLTEwMSwxOSArMTAxLDI5IEBA
IHN0YXRpYyBzdHJ1Y3QgZHJpdmVyIGRydl91cmFuZG9tID0gewogCS5uYW1lID0gREVWX1VSQU5E
T01fTkFNRQogfTsKIAotX19jb25zdHJ1Y3Rvcl9wcmlvKDEwMikgc3RhdGljIHZvaWQgX3VrX2Rl
dl9zd3JhbmRfY3Rvcih2b2lkKQorLyoKKyAqIE5PVEU6IFdlIHJlZ2lzdGVyIHRoZSBkZXZpY2Ug
bm9kZXMgYXMgYXBwbGljYXRpb24gY29uc3RydWN0b3IKKyAqIGJlY2F1c2UgYXQgdGhhdCBwb2lu
dCBvZiB0aW1lIHdlIGNhbiBleHBlY3QgdGhhdCBhIG1lbW9yeSBhbGxvY2F0b3IKKyAqIGlzIGF2
YWlsYWJsZS4KKyAqLworLyoKKyAqIFRPRE86IE1vdmUgdGhpcyByZWdpc3RyYXRpb24gdG8gYW4g
VW5pa3JhZnQgaW5pdCB0YWJsZSBhcyBzb29uIHdlIGhhdmUgaXQKKyAqIGF2YWlsYWJsZS4gQXBw
bGljYXRpb24gY29uc3RydWN0b3JzIG1heSByZXF1aXJlIHJhbmRvbSBhbmQgdXJhbmRvbSBhbHJl
YWR5CisgKiBiZWluZyBhdmFpbGFibGUgd2hlbiB0aGV5IGdldCBjYWxsZWQuCisgKi8KK19fY29u
c3RydWN0b3JfcHJpbygxMDEpIHN0YXRpYyB2b2lkIF91a19kZXZfc3dyYW5kX2N0b3Iodm9pZCkK
IHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQl1a19wcl9pbmZvKCJBZGQgL2Rldi9yYW5kb20g
YW5kIC9kZXYvdXJhbmRvbVxuIik7CisJdWtfcHJfaW5mbygiUmVnaXN0ZXIgcmFuZG9tIGFuZCB1
cmFuZG9tIHRvIGRldmZzXG4iKTsKIAotCS8qIHJlZ2lzdGVyIC9kZXYvdXJhbmRvbSAqLworCS8q
IHJlZ2lzdGVyIHVyYW5kb20gKi8KIAlkZXYgPSBkZXZpY2VfY3JlYXRlKCZkcnZfdXJhbmRvbSwg
REVWX1VSQU5ET01fTkFNRSwgRF9DSFIpOwotCWlmIChkZXYgPT0gTlVMTCkKLQkJdWtfcHJfaW5m
bygiRmFpbGVkIHRvIHJlZ2lzdGVyIC9kZXYvdXJhbmRvbVxuIik7CisJaWYgKCFkZXYpCisJCVVL
X0NSQVNIKCJGYWlsZWQgdG8gcmVnaXN0ZXIgdXJhbmRvbSB0byBkZXZmc1xuIik7CiAKLQkvKiBy
ZWdpc3RlciAvZGV2L3JhbmRvbSAqLworCS8qIHJlZ2lzdGVyIHJhbmRvbSAqLwogCWRldiA9IGRl
dmljZV9jcmVhdGUoJmRydl9yYW5kb20sIERFVl9SQU5ET01fTkFNRSwgRF9DSFIpOwotCWlmIChk
ZXYgPT0gTlVMTCkKLQkJdWtfcHJfaW5mbygiRmFpbGVkIHRvIHJlZ2lzdGVyIC9kZXYvcmFuZG9t
XG4iKTsKKwlpZiAoIWRldikKKwkJVUtfQ1JBU0goIkZhaWxlZCB0byByZWdpc3RlciByYW5kb20g
dG8gZGV2ZnNcbiIpOwogfQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:03:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:03:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Cxo-0002v4-BZ; Fri, 06 Sep 2019 12:03:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6Cxm-0002uo-Ip
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:03:38 +0000
X-Inumbo-ID: 5af1fbc7-d09e-11e9-abf5-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 5af1fbc7-d09e-11e9-abf5-12813bfff9fa;
 Fri, 06 Sep 2019 12:03:37 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 54432F201B;
 Fri,  6 Sep 2019 14:03:36 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id wCKxj_aozN2y; Fri,  6 Sep 2019 14:03:36 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 2C8BAF2008;
 Fri,  6 Sep 2019 14:03:32 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:03:17 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 6 Sep 2019 14:03:06 +0200
Message-ID: <20190906120306.18966-7-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 6/6] lib/ukboot: Root filesystem
 as library parameter
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RW5hYmxlcyBzdXBwb3J0IGZvciBzZXR0aW5nIGZzbmFtZSwgZGV2aWNlLCBmbGFncywgYW5kIG1v
dW50IGRhdGEKZm9yIHRoZSByb290IGZpbGVzeXN0ZW0uIFRoZXNlIG9wdGlvbnMgY2FuIGNvbmZp
Z3VyZWQgdGhyb3VnaCB0aGUgbWVudQpjb25maWd1cmF0aW9uLiBJbiBjYXNlIGxpYnVrcGFyYW0g
aXMgZW5hYmxlZCwgdGhlIGRlZmF1bHQgdmFsdWVzIGNhbgpiZSBvdmVyd3JpdHRlbiB3aXRoIHRo
ZSBrZXJuZWwgY29tbWFuZCBsaW5lOyBmb3IgZXhhbXBsZToKICBpbml0LnJvb3RfZnNuYW1lPSJy
YW1mcyIKClNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFi
LmV1PgotLS0KIGxpYi91a2Jvb3QvQ29uZmlnLnVrICAgfCAyMiArKysrKysrKysrKysrKysrKysr
Ky0tCiBsaWIvdWtib290L01ha2VmaWxlLnVrIHwgIDMgKysrCiBsaWIvdWtib290L2Jvb3QuYyAg
ICAgIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNo
YW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xp
Yi91a2Jvb3QvQ29uZmlnLnVrIGIvbGliL3VrYm9vdC9Db25maWcudWsKaW5kZXggODQyMGFhZTku
LmQ5ZDU3NzE1IDEwMDY0NAotLS0gYS9saWIvdWtib290L0NvbmZpZy51aworKysgYi9saWIvdWti
b290L0NvbmZpZy51awpAQCAtMjIsMTEgKzIyLDI5IEBAIGlmIExJQlVLQk9PVAogCWRlZmF1bHQg
eQogCXNlbGVjdCBMSUJVS0FMTE9DQkJVRERZCiAKLQljb25maWcgTElCVUtCT09UX1ZGU1JPT1QK
LQlib29sICJNb3VudCByYW1mcyB0byAvIgorCW1lbnVjb25maWcgTElCVUtCT09UX1ZGU1JPT1QK
Kwlib29sICJNb3VudCBhIHJvb3QgZmlsZXN5c3l0ZW0gKC8pIgogCWRlZmF1bHQgbgogCXNlbGVj
dCBMSUJSQU1GUwogCisJaWYgTElCVUtCT09UX1ZGU1JPT1QKKwkJY29uZmlnIExJQlVLQk9PVF9W
RlNST09UX0ZTTkFNRQorCQlzdHJpbmcgIkRlZmF1bHQgcm9vdCBmaWxlc3lzdGVtIgorCQlkZWZh
dWx0ICJyYW1mcyIKKworCQljb25maWcgTElCVUtCT09UX1ZGU1JPT1RfREVWCisJCXN0cmluZyAi
RGVmYXVsdCByb290IGRldmljZSIKKwkJZGVmYXVsdCAiIgorCisJCWNvbmZpZyBMSUJVS0JPT1Rf
VkZTUk9PVF9GTEFHUworCQloZXggIkRlZmF1bHQgcm9vdCBtb3VudCBmbGFncyIKKwkJZGVmYXVs
dCAweDAKKworCQljb25maWcgTElCVUtCT09UX1ZGU1JPT1RfREFUQQorCQlzdHJpbmcgIkRlZmF1
bHQgcm9vdCBtb3VudCBkYXRhIgorCQlkZWZhdWx0ICIiCisJZW5kaWYKKwogCWNvbmZpZyBMSUJV
S0JPT1RfREVWRlMKIAlib29sICJNb3VudCBkZXZmcyB0byAvZGV2IgogCWRlZmF1bHQgbgpkaWZm
IC0tZ2l0IGEvbGliL3VrYm9vdC9NYWtlZmlsZS51ayBiL2xpYi91a2Jvb3QvTWFrZWZpbGUudWsK
aW5kZXggZWEwNTIwMTkuLmZhNWMxYWVhIDEwMDY0NAotLS0gYS9saWIvdWtib290L01ha2VmaWxl
LnVrCisrKyBiL2xpYi91a2Jvb3QvTWFrZWZpbGUudWsKQEAgLTEsNSArMSw4IEBACiAkKGV2YWwg
JChjYWxsIGFkZGxpYl9zLGxpYnVrYm9vdCwkKENPTkZJR19MSUJVS0JPT1QpKSkKIAorIyBSZWdp
c3RlciB0byB1a2xpYnBhcmFtLCBzZXRzICJpbmkiIGFzIHBhcmFtcHJlZml4CiskKGV2YWwgJChj
YWxsIGFkZGxpYl9wYXJhbXByZWZpeCxsaWJ1a2Jvb3QsaW5pdCkpCisKIENJTkNMVURFUy0kKENP
TkZJR19MSUJVS0JPT1QpCQkrPSAtSSQoTElCVUtCT09UX0JBU0UpL2luY2x1ZGUKIENYWElOQ0xV
REVTLSQoQ09ORklHX0xJQlVLQk9PVCkJKz0gLUkkKExJQlVLQk9PVF9CQVNFKS9pbmNsdWRlCiAK
ZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvYm9vdC5jIGIvbGliL3VrYm9vdC9ib290LmMKaW5kZXgg
NWUyY2I3NTcuLjRlMzRlZjc2IDEwMDY0NAotLS0gYS9saWIvdWtib290L2Jvb3QuYworKysgYi9s
aWIvdWtib290L2Jvb3QuYwpAQCAtNjAsMTQgKzYwLDIzIEBACiAjaWYgQ09ORklHX0xJQlVLQlVT
CiAjaW5jbHVkZSA8dWsvYnVzLmg+CiAjZW5kaWYgLyogQ09ORklHX0xJQlVLQlVTICovCi0jaWZk
ZWYgQ09ORklHX0xJQlVLTElCUEFSQU0KICNpbmNsdWRlIDx1ay9saWJwYXJhbS5oPgotI2VuZGlm
IC8qIENPTkZJR19MSUJVS0xJQlBBUkFNICovCiAjaWZkZWYgQ09ORklHX0xJQlVLQk9PVF9WRlNS
T09UCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvbW91bnQuaD4KICNlbmRp
ZiAvKiBDT05GSUdfTElCVUtCT09UX1ZGU1JPT1QgKi8KIAorI2lmZGVmIENPTkZJR19MSUJVS0JP
T1RfVkZTUk9PVAorc3RhdGljIGNoYXIgKnJvb3RfZnNuYW1lID0gQ09ORklHX0xJQlVLQk9PVF9W
RlNST09UX0ZTTkFNRTsKK3N0YXRpYyBjaGFyICpyb290X2RldiAgICA9IENPTkZJR19MSUJVS0JP
T1RfVkZTUk9PVF9ERVY7CitzdGF0aWMgY2hhciAqcm9vdF9kYXRhICAgPSBDT05GSUdfTElCVUtC
T09UX1ZGU1JPT1RfREFUQTsKK3N0YXRpYyBfX3U2NCByb290X2ZsYWdzICA9IChfX3U2NCkgQ09O
RklHX0xJQlVLQk9PVF9WRlNST09UX0ZMQUdTOworCitVS19MSUJfUEFSQU1fU1RSKHJvb3RfZnNu
YW1lKTsKK1VLX0xJQl9QQVJBTV9TVFIocm9vdF9kZXYpOworVUtfTElCX1BBUkFNKHJvb3RfZmxh
Z3MsICBfX3U2NCk7CitVS19MSUJfUEFSQU1fU1RSKHJvb3RfZGF0YSk7CisjZW5kaWYKIAogaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgX193ZWFrOwogI2lmZGVmIENPTkZJR19MSUJM
V0lQCkBAIC05OCwyNSArMTA3LDI0IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9p
ZCAqYXJnKQogCSAqIFZGUyBpbml0aWFsaXphdGlvbgogCSAqLwogI2lmZGVmIENPTkZJR19MSUJV
S0JPT1RfVkZTUk9PVAotCS8qCi0JICogVE9ETzogUHJvdmlkZSBhIGJvb3QgcGFyYW1ldGVyIG9w
dGlvbiB0byBzcGVjaWZ5IGEgY3VzdG9tCi0JICogcm9vdCBtb3VudCAoZS5nLiwgcmFtZnMsIGlu
aXRyZCwgOXBmcykuCi0JICovCi0JdWtfcHJfaW5mbygiTW91bnQgcm9vdC4uLlxuIik7Ci0JcmV0
ID0gbW91bnQoIiIsICIvIiwgInJhbWZzIiwgMCwgTlVMTCk7CisJdWtfcHJfaW5mbygiTW91bnQg
cm9vdCAoJXMpLi4uXG4iLCByb290X2ZzbmFtZSk7CisJcmV0ID0gbW91bnQocm9vdF9kZXYsICIv
Iiwgcm9vdF9mc25hbWUsIHJvb3RfZmxhZ3MsIHJvb3RfZGF0YSk7CiAJaWYgKHJldCAhPSAwKQot
CQlVS19DUkFTSCgiRmFpbGVkIHRvIG1vdW50IHJhbWZzIHRvIC9cbiIpOworCQlVS19DUkFTSCgi
RmFpbGVkIHRvIG1vdW50IC9cbiIpOwogCiAJLyoKLQkgKiBUT0RPOiBXZSBjb3VsZCBwbGFjZSBo
ZXJlIGNvZGUgdGhhdCBleHRyYWN0cyBhbiBhcmNoaXZlCi0JICogZm91bmQgYXMgaW5pdHJkIHRv
ICcvJworCSAqIFRPRE86IEFsdGVybmF0aXZlbHkgd2UgY291bGQgZXh0cmFjdCBhbiBhcmNoaXZl
IGZvdW5kCisJICogYXMgaW5pdHJkIHRvIGEgcmFtZnMgJy8nIGlmIHdlIGhhdmUgZ290IGZzbmFt
ZSAnaW5pdHJkJwogCSAqLwogCiAjaWZkZWYgQ09ORklHX0xJQlVLQk9PVF9ERVZGUwogCXVrX3By
X2luZm8oIk1vdW50ICcvZGV2Jy4uLlxuIik7Ci0JcmV0ID0gIG1rZGlyKCIvZGV2IiwgU19JUldY
VSk7Ci0JaWYgKHJldCAhPSAwKQotCQlVS19DUkFTSCgiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3Rv
cnkgJy9kZXYnXG4iKTsKKworCS8qCisJICogVHJ5IHRvIGNyZWF0ZSB0aGUgbW91bnQgcG9pbnQu
CisJICogV2UgYXJlIGlnbm9yaW5nIGVycm9ycyBiZWNhdXNlIGl0IGNvdWxkIGV4aXN0IGFscmVh
ZHkuCisJICovCisJbWtkaXIoIi9kZXYiLCBTX0lSV1hVKTsKIAogCXJldCA9IG1vdW50KCIiLCAi
L2RldiIsICJkZXZmcyIsIDAsIE5VTEwpOwogCWlmIChyZXQgIT0gMCkKLS0gCjIuMjAuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 12:05:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 12:05:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Cz7-0002xS-HE; Fri, 06 Sep 2019 12:05:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SDEJ=XB=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i6Cz6-0002xN-6D
 for minios-devel@lists.xen.org; Fri, 06 Sep 2019 12:05:00 +0000
X-Inumbo-ID: 8b8fbd7c-d09e-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8b8fbd7c-d09e-11e9-b299-bc764e2007e4;
 Fri, 06 Sep 2019 12:04:58 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 62473105664;
 Fri,  6 Sep 2019 14:04:57 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2E-_rAq--Ir4; Fri,  6 Sep 2019 14:04:57 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 3F6571053DF;
 Fri,  6 Sep 2019 14:04:57 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 6 Sep 2019
 14:04:56 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190829131723.2639-1-simon.kuenzer@neclab.eu>
 <20190829131723.2639-3-simon.kuenzer@neclab.eu>
 <509106a4-67d8-ae41-1da0-da2d9e12e4ba@gmail.com>
 <d4a7144d-e018-63ac-8ce8-81c513527d58@neclab.eu>
Message-ID: <9d206586-ee1d-64ac-1b6f-8db4342d4d9b@neclab.eu>
Date: Fri, 6 Sep 2019 14:04:55 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <d4a7144d-e018-63ac-8ce8-81c513527d58@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/5] lib/devfs,
 lib/ukboot: Move option to automatically mount root to libukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMjkuMDguMTkgMTY6MDUsIFNpbW9uIEt1ZW56ZXIgd3JvdGU6Cj4gT24gMjkuMDguMTkgMTU6
NDMsIENvc3RpbiBMdXB1IHdyb3RlOgo+PiBIaSBTaW1vbiwKPj4KPj4gT24gOC8yOS8xOSA0OjE3
IFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+Pj4gTW92ZXMgdGhlIG9wdGlvbiBvZiBhdXRvbWF0
aWNhbGx5IG1vdW50aW5nIHJhbWZzIGFzIGEgcm9vdCBmaWxlc3lzdGVtCj4+PiB0byBsaWIvdWti
b290LiBUaGlzIGZlYXR1cmUgaXMgbm90IG9ubHkgdXNlZnVsIGZvciBpbml0aWFsaXppbmcKPj4+
IGRldmZzLiBUaGUgaWRlYSBpcyB0aGF0IHdlIGNvdWxkIGxhdGVyIGZlZWQgaXRzIGluaXRpYWwg
Y29udGVudCBmcm9tIGEKPj4+IGFyY2hpdmUgZ2l2ZW4gdGhyb3VnaCBhbiBpbml0cmQuCj4+Pgo+
Pj4gU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+
Cj4+PiAtLS0KPj4+IMKgIGxpYi9kZXZmcy9Db25maWcudWvCoMKgwqDCoCB8wqAgOCArLS0tLS0t
LQo+Pj4gwqAgbGliL2RldmZzL2RldmZzX3Zub3BzLmMgfCAyNSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCj4+PiDCoCBsaWIvdWtib290L0NvbmZpZy51a8KgwqDCoCB8wqAgNSArKysrKwo+Pj4g
wqAgbGliL3VrYm9vdC9ib290LmPCoMKgwqDCoMKgwqAgfCAyOCArKysrKysrKysrKysrKysrKysr
KysrKysrKysrCj4+PiDCoCA0IGZpbGVzIGNoYW5nZWQsIDM0IGluc2VydGlvbnMoKyksIDMyIGRl
bGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9saWIvZGV2ZnMvQ29uZmlnLnVrIGIvbGli
L2RldmZzL0NvbmZpZy51awo+Pj4gaW5kZXggZTM4YTYxNmUuLmY2YjE2YWVlIDEwMDY0NAo+Pj4g
LS0tIGEvbGliL2RldmZzL0NvbmZpZy51awo+Pj4gKysrIGIvbGliL2RldmZzL0NvbmZpZy51awo+
Pj4gQEAgLTEsMTAgKzEsNCBAQAo+Pj4gwqAgY29uZmlnIExJQkRFVkZTCj4+PiDCoMKgwqDCoMKg
IGJvb2wgImRldmZzOiBkZXZmcyBmaWxlIHN5c3RlbSIKPj4+IMKgwqDCoMKgwqAgZGVmYXVsdCBu
Cj4+PiAtwqDCoMKgIGRlcGVuZHMgb24gTElCVkZTQ09SRQo+Pj4gLWlmIExJQkRFVkZTCj4+PiAt
wqDCoMKgwqDCoMKgwqAgY29uZmlnIExJQkRFVkZTX1VTRV9SQU1GUwo+Pj4gLcKgwqDCoMKgwqDC
oMKgIGJvb2wgIlVzZSByYW1mcyBhcyByb290Igo+Pj4gLcKgwqDCoMKgwqDCoMKgIGRlZmF1bHQg
bgo+Pj4gLcKgwqDCoMKgwqDCoMKgIHNlbGVjdCBMSUJSQU1GUwo+Pj4gLWVuZGlmCj4+PiArwqDC
oMKgIHNlbGVjdCBMSUJWRlNDT1JFCj4+PiBkaWZmIC0tZ2l0IGEvbGliL2RldmZzL2RldmZzX3Zu
b3BzLmMgYi9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYwo+Pj4gaW5kZXggMTFhM2VhMDUuLjMzOTli
MmJjIDEwMDY0NAo+Pj4gLS0tIGEvbGliL2RldmZzL2RldmZzX3Zub3BzLmMKPj4+ICsrKyBiL2xp
Yi9kZXZmcy9kZXZmc192bm9wcy5jCj4+PiBAQCAtMzA5LDI4ICszMDksMyBAQCBzdGF0aWMgc3Ry
dWN0IHZmc2NvcmVfZnNfdHlwZSBmc19kZXZmcyA9IHsKPj4+IMKgIH07Cj4+PiDCoCBVS19GU19S
RUdJU1RFUihmc19kZXZmcyk7Cj4+PiAtCj4+PiAtX19jb25zdHJ1Y3Rvcl9wcmlvKDEwMSkgc3Rh
dGljIHZvaWQgZGV2ZnNfaW5pdCh2b2lkKQo+Pj4gLXsKPj4+IC0jaWZkZWYgQ09ORklHX0xJQkRF
VkZTX1VTRV9SQU1GUwo+Pj4gLcKgwqDCoCBpbnQgcmV0Owo+Pj4gLQo+Pj4gLcKgwqDCoCByZXQg
PSBtb3VudCgiIiwgIi8iLCAicmFtZnMiLCAwLCBOVUxMKTsKPj4+IC3CoMKgwqAgaWYgKHJldCAh
PSAwKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgdWtfcHJfZGVidWcoIkZhaWxlZCB0byBtb3VudCAv
IGluICVzXG4iLCBfX2Z1bmNfXyk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4gLcKg
wqDCoCB9Cj4+PiAtCj4+PiAtwqDCoMKgIHJldCA9wqAgbWtkaXIoIi9kZXYiLCBTX0lSV1hVKTsK
Pj4+IC3CoMKgwqAgaWYgKHJldCAhPSAwKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgdWtfcHJfZGVi
dWcoIkZhaWxlZCB0byBta2RpciAvZGV2IGluICVzXG4iLCBfX2Z1bmNfXyk7Cj4+PiAtwqDCoMKg
wqDCoMKgwqAgcmV0dXJuOwo+Pj4gLcKgwqDCoCB9Cj4+PiAtCj4+PiAtwqDCoMKgIHJldCA9IG1v
dW50KCIiLCAiL2RldiIsICJkZXZmcyIsIDAsIE5VTEwpOwo+Pj4gLcKgwqDCoCBpZiAocmV0ICE9
IDApIHsKPj4+IC3CoMKgwqDCoMKgwqDCoCB1a19wcl9kZWJ1ZygiRmFpbGVkIHRvIG1vdW50IC9k
ZXYgYXMgZGV2ZnMgaW4gJXNcbiIsIF9fZnVuY19fKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1
cm47Cj4+PiAtwqDCoMKgIH0KPj4+IC0jZW5kaWYKPj4+IC19Cj4+PiBkaWZmIC0tZ2l0IGEvbGli
L3VrYm9vdC9Db25maWcudWsgYi9saWIvdWtib290L0NvbmZpZy51awo+Pj4gaW5kZXggODQxYTg3
NjcuLjZmODZjN2RlIDEwMDY0NAo+Pj4gLS0tIGEvbGliL3VrYm9vdC9Db25maWcudWsKPj4+ICsr
KyBiL2xpYi91a2Jvb3QvQ29uZmlnLnVrCj4+PiBAQCAtMjEsNCArMjEsOSBAQCBpZiBMSUJVS0JP
T1QKPj4+IMKgwqDCoMKgwqAgYm9vbCAiSW5pdGlhbGl6ZSB1a2FsbG9jYmJ1ZGR5IGFzIGFsbG9j
YXRvciIKPj4+IMKgwqDCoMKgwqAgZGVmYXVsdCB5Cj4+PiDCoMKgwqDCoMKgIHNlbGVjdCBMSUJV
S0FMTE9DQkJVRERZCj4+PiArCj4+PiArwqDCoMKgIGNvbmZpZyBMSUJVS0JPT1RfVkZTUk9PVAo+
Pj4gK8KgwqDCoCBib29sICJNb3VudCByYW1mcyB0byAvIgo+Pgo+PiBJJ2Qgc3VnZ2VzdCBMSUJV
S0JPT1RfUkFNRlNST09UIG9yIHNtdGggbGlrZSB0aGF0IHNpbmNlIHJhbWZzICE9IHZmcy4KPiAK
PiBGaW5lLCB3ZSBjYW4gY2hhbmdlIHRoaXMuIEkgZG9uJ3QgbWluZC4KPiAKCkhleSBDb3N0aW4s
CgpJIHNlbnQgb3V0IGEgdjIgb2YgdGhpcyBzZXJpZXMuIEkgZGVjaWRlZCB0byBrZWVwIExJQlVL
Qk9PVF9WRlNST09UIApiZWNhdXNlIEkgYWRkIHRoZSBhYmlsaXR5IHRvIHJlYWQgdGhlIHJvb3Qg
ZnMgbW91bnQgb3B0aW9ucyBmcm9tIGtlcm5lbCAKY29tbWFuZCBsaW5lLiBJbiB0aGlzIGNhc2Ug
dGhlIGNvZGUgaXMgbm90IHNwZWNpZmljIHRvIHJhbWZzIGFueW1vcmUgYW5kIAp0aGUgZ2VuZXJp
YyBuYW1lIHdvdWxkIG1ha2UgbW9yZSBzZW5zZS4KClRoYW5rcywKClNpbW9uCgo+Pgo+Pj4gK8Kg
wqDCoCBkZWZhdWx0IG4KPj4+ICvCoMKgwqAgc2VsZWN0IExJQlJBTUZTCj4+PiDCoCBlbmRpZgo+
Pj4gZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvYm9vdC5jIGIvbGliL3VrYm9vdC9ib290LmMKPj4+
IGluZGV4IGI0YjM5MGVmLi4xNTk1NDIwNSAxMDA2NDQKPj4+IC0tLSBhL2xpYi91a2Jvb3QvYm9v
dC5jCj4+PiArKysgYi9saWIvdWtib290L2Jvb3QuYwo+Pj4gQEAgLTY0LDYgKzY0LDExIEBACj4+
PiDCoCAjaWZkZWYgQ09ORklHX0xJQlVLTElCUEFSQU0KPj4+IMKgICNpbmNsdWRlIDx1ay9saWJw
YXJhbS5oPgo+Pj4gwqAgI2VuZGlmIC8qIENPTkZJR19MSUJVS0xJQlBBUkFNICovCj4+PiArI2lm
ZGVmIENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVAo+Pj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+
Pj4gKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KPj4+ICsjZW5kaWYgLyogQ09ORklHX0xJQlVLQk9P
VF9WRlNST09UICovCj4+PiArCj4+PiDCoCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltd
KSBfX3dlYWs7Cj4+PiDCoCAjaWZkZWYgQ09ORklHX0xJQkxXSVAKPj4+IEBAIC05MCw2ICs5NSwy
OSBAQCBzdGF0aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKPj4+IMKgwqDCoMKg
wqAgdWtfYnVzX3Byb2JlX2FsbCgpOwo+Pj4gwqAgI2VuZGlmIC8qIENPTkZJR19MSUJVS0JVUyAq
Lwo+Pj4gK8KgwqDCoCAvKgo+Pj4gK8KgwqDCoMKgICogVkZTIGluaXRpYWxpemF0aW9uCj4+PiAr
wqDCoMKgwqAgKi8KPj4+ICsjaWZkZWYgQ09ORklHX0xJQlVLQk9PVF9WRlNST09UCj4+PiArwqDC
oMKgIC8qCj4+PiArwqDCoMKgwqAgKiBUT0RPOiBQcm92aWRlIGEgYm9vdCBwYXJhbWV0ZXIgb3B0
aW9uIHRvIHNwZWNpZnkgYSBjdXN0b20KPj4+ICvCoMKgwqDCoCAqIHJvb3QgbW91bnQgKGUuZy4s
IHJhbWZzLCBpbml0cmQsIDlwZnMpLgo+Pj4gK8KgwqDCoMKgICovCj4+PiArwqDCoMKgIHVrX3By
X2luZm8oIk1vdW50IHJvb3QuLi5cbiIpOwo+Pj4gK8KgwqDCoCByZXQgPSBtb3VudCgiIiwgIi8i
LCAicmFtZnMiLCAwLCBOVUxMKTsKPj4+ICvCoMKgwqAgaWYgKHJldCAhPSAwKQo+Pj4gK8KgwqDC
oMKgwqDCoMKgIFVLX0NSQVNIKCJGYWlsZWQgdG8gbW91bnQgcmFtZnMgdG8gL1xuIik7Cj4+Cj4+
IFdoeSBkbyB3ZSByZXN0cmljdCB1a2Jvb3QgdG8gdXNpbmcgcmFtZnM/IFdoeSBub3Qga2VlcGlu
ZyBhIGNvbnN0cnVjdG9yCj4+IGluIHRoZSByYW1mcyBsaWIgaW5zdGVhZD8KPj4KPiAKPiBJIHB1
dCBpdCBoZXJlIGluIG9yZGVyICgxKSB0byBnYWluIG1vcmUgZmxleGliaWxpdHkgaW4gdGhlIGZ1
dHVyZSBhbmQgCj4gKDIpIHRvIGtlZXAgY29kZSBmb3IgbW91bnRpbmcgdGhlIGluaXRpYWwgZnMn
ZXMgYXQgYSBzaW5nbGUgcGxhY2UgCj4gaW5zdGVhZCBhbGwgb3ZlciB0aGUgcGxhY2Ugd2l0aCBj
b25zdHJ1Y3RvcnMuIEFzIHNvb24gYXMgd2UgaGF2ZSBhIAo+IFVuaWtyYWZ0IGluaXR0YWIsIHdl
IGNvdWxkIG1vdmUgdGhpcyB0byBhIGluaXQgZnVuY3Rpb24gaW5zdGVhZC4KPiAKPiBJIGFsc28g
aGF2ZSBpbiBtaW5kIHRoYXQgd2UgY291bGQgdXNlIFNoYXJhbidzIGxpYnJhcnkgcGFyYW1ldGVy
cyB0byAKPiBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRoYW4gYSByYW1mcyByb290IC0gbGlrZSA5
cGZzIGFzIHJvb3QgbW91bnQgCj4gcG9pbnQuIEkgY291bGQgaW1hZ2luZSBzb21ldGhpbmcgbGlr
ZSBgdWtib290LnJvb3Q9OXBmczpzaGFyZW5hbWVgLCAKPiBgdWtib290LnJvb3Q9cmFtZnNgLCBv
ciBgdWtib290LnJvb3Q9aW5pdHJkYCBhcyBleGFtcGxlLiBJdCB3b3VsZCBiZSAKPiBlYXNpZXIg
dG8gaGFuZGxlIHRoaXMgaGVyZSBpbnN0ZWFkIG9mIGVuYWJsaW5nL2Rpc2FibGluZyBpbmRpdmlk
dWFsIAo+IGNvbnN0cnVjdG9ycy4KPiAKPiBJIHRoaW5rIGl0IGlzIGFsc28gdGhlIHJpZ2h0IHBs
YWNlIGFzIHNvb24gYXMgd2Ugd2FudCB0byBzdXBwb3J0IAo+IGluaXRyYW1kaXNrcyB3aGljaCBj
b3VsZCBiZSBhbiAudGFyLmd6IChvciBzb21ldGhpbmcgZWxzZSkgdGhhdCB3ZSB3b3VsZCAKPiBl
eHRyYWN0IHRvIHRoZSByYW1mcyByb290LiBBcyBzb29uIGFzIHlvdSBhcmUgZG9uZSwgeW91IGFy
ZSBhYmxlIHRvIAo+IGNsYWltIHRoZSBpbml0cmQgbWVtb3J5IHJlZ2lvbiB0byB0aGUgbWVtb3J5
IGFsbG9jYXRvci4gSXRzIHNwYWNlIGlzIG5vdCAKPiBuZWVkZWQgYW55bW9yZSBmb3Igc29tZXRo
aW5nIGVsc2UuIEZvciB0aGlzIHB1cnBvc2UgdGhpcyBmaWxlIGlzIGFsc28gCj4gdGhlIHJpZ2h0
IHBsYWNlLCB0aGUgYWxsb2NhdG9yIGlzIGluaXRpYWxpemVkIGhlcmUgYW5kIG1lbW9yeSByZWdp
b25zIAo+IGFyZSBzY2FubmVkIGhlcmUuCj4gCj4+PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDC
oMKgwqAgKiBUT0RPOiBXZSBjb3VsZCBwbGFjZSBoZXJlIGNvZGUgdGhhdCBleHRyYWN0cyBhbiBh
cmNoaXZlCj4+PiArwqDCoMKgwqAgKiBmb3VuZCBhcyBpbml0cmQgdG8gJy8nCj4+PiArwqDCoMKg
wqAgKi8KPj4+ICsKPj4+ICsjZW5kaWYgLyogQ09ORklHX0xJQlVLQk9PVF9WRlNST09UICovCj4+
PiArCj4+PiArwqDCoMKgIC8qCj4+PiArwqDCoMKgwqAgKiBOZXR3b3JrIGluaXRpYWxpemF0aW9u
Cj4+PiArwqDCoMKgwqAgKi8KPj4+IMKgICNpZmRlZiBDT05GSUdfTElCTFdJUAo+Pj4gwqDCoMKg
wqDCoCAvKgo+Pj4gwqDCoMKgwqDCoMKgICogVE9ETzogVGhpcyBpcyBhbiBpbml0aWFsIGltcGxl
bWVudGF0aW9uIHdoZXJlIHdlIGNhbGwgdGhlCj4+Pgo+IAo+IF9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdAo+
IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+IGh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 15:10:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 15:10:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6FsB-0004vR-A4; Fri, 06 Sep 2019 15:10:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=CtaX=XB=citrix.com=roger.pau@srs-us1.protection.inumbo.net>)
 id 1i6FsA-0004nO-AB
 for minios-devel@lists.xenproject.org; Fri, 06 Sep 2019 15:10:02 +0000
X-Inumbo-ID: 61880650-d0b8-11e9-abf6-12813bfff9fa
Received: from esa6.hc3370-68.iphmx.com (unknown [216.71.155.175])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 61880650-d0b8-11e9-abf6-12813bfff9fa;
 Fri, 06 Sep 2019 15:09:55 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567782595;
 h=date:from:to:cc:subject:message-id:references:
 mime-version:content-transfer-encoding:in-reply-to;
 bh=s5bFhWkNjV9sjFKFZO6lPxQVwy+d8XxV+xe07YXOt0A=;
 b=UnsQ02GDy+gMV0uHFdOpPvVstrfHT65TCwXfhBVXieQPnwa3qqBURJZa
 MbZ2S9uncNOS70nQVV9VmPZyB8PHT+Xj5Zo5R7ADOq4AK18gQPWzU/dL7
 ls08A2ZDaQjQpIpuHPBwakUaZAjsKuFR2v7iFOR3tsuJjo6MY0HkTvDtU o=;
Authentication-Results: esa6.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=roger.pau@citrix.com;
 spf=Pass smtp.mailfrom=roger.pau@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21;
 receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="roger.pau@citrix.com";
 x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa6.hc3370-68.iphmx.com: domain of
 roger.pau@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="roger.pau@citrix.com";
 x-sender="roger.pau@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa6.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa6.hc3370-68.iphmx.com;
 envelope-from="roger.pau@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: pgfuchGab97p+JtLr5mytQnldlZfGrvVvnPD2UL6tSqsIiKWX8hFRP7K/hvus0gvJHOQ4XyPFs
 gjMJl8aXyg3myi83Xffae4qRZHAN5Pjazi2w3qAA/wMIKJKkyb8n6UZW53mdCFYcSwK8tGRRcN
 389z4J3ZJ9OlKAd/QH+jicQEj/nKw+Fj3EeTIwsjVcYAOtdXkqVpZFr2cPW8Z6JtbEgF6RagF6
 QEhkE+b9OF0WRAy/UHuc7SMqWbLhoAMsJMPr1F899Yj5rHll6HOZnZMJS1vmHyHTDM8Wg2W8bn
 dNk=
X-SBRS: 2.7
X-MesageID: 5473391
X-Ironport-Server: esa6.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,473,1559534400"; 
   d="scan'208";a="5473391"
Date: Fri, 6 Sep 2019 17:09:43 +0200
From: Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>
To: Lars Kurth <lars.kurth@citrix.com>
Message-ID: <20190906150943.byjgvxrpbhn6ia6i@Air-de-Roger>
References: <cover.1567620587.git.lars.kurth@citrix.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <cover.1567620587.git.lars.kurth@citrix.com>
User-Agent: NeoMutt/20180716
X-ClientProxiedBy: AMSPEX02CAS01.citrite.net (10.69.22.112) To
 AMSPEX02CL01.citrite.net (10.69.22.125)
Subject: Re: [Minios-devel] [Xen-devel] [PATCH 0/2] Code of Conduct (based
 on Contributor Covenant v1.4)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: xen-api@lists.xenproject.org, minios-devel@lists.xenproject.org,
 committers@xenproject.org, mirageos-devel@lists.xenproject.org,
 xen-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gV2VkLCBTZXAgMDQsIDIwMTkgYXQgMDc6MTI6MTZQTSArMDEwMCwgTGFycyBLdXJ0aCB3cm90
ZToKPiBUaGlzIHNlcmllcyBwcm9wb3NlcyBhIGNvbmNyZXRlIHZlcnNpb24gb2YgdGhlIFhlbiBQ
cm9qZWN0Cj4gQ29DIGJhc2VkIG9uIHYxLjQgb2YgdGhlIENvbnRyaWJ1dG9yIENvdmVuYW50LiBT
ZWUgWzFdCj4gCj4gSXQgYWxzbyByZWZsZWN0cyB0aGUgZGlzY3Vzc2lvbiBpbiBbMl0gYW5kIHNv
bWUgcHJpdmF0ZQo+IGRpc2N1c3Npb25zIG9uIElSQyB0byBpZGVudGlmeSBpbml0aWFsIG1lbWJl
cnMgb2YgdGhlIFhlbgo+IFByb2plY3TigJlzIENvQyB0ZWFtLgo+IAo+IEZvciBjb252ZW5lbmNl
IG9mIHJldmlldyBhbmQgaW4gbGluZSB3aXRoIG90aGVyIHBvbGljeSBkb2N1bWVudHMKPiBJIGNy
ZWF0ZWQgYSBnaXQgcmVwb3NpdG9yeSBhdCBbM10uIFRoaXMgc2VyaWVzIGNhbiBiZSBmb3VuZCBh
dCBbNV0uCj4gCj4gVGhlIHNlcmllcyBpcyBpbmNvbXBsZXRlIGluIHRoYXQgaXQgZG9lcyBub3Qg
eWV0IGNvbnRhaW4gdGhlIGRvY3VtZW50Cj4gb24gcG9zaXRpdmUgYmVoYXZpb3I6IHRoaXMgd2ls
bCBiZSBiYXNlZCBvbiBbNF0uIE15IGludGVudGlvbiBpcyB0bwo+IHVzZSBhIGxpZ2h0d2lnaHQg
cHJvY2VzcyBiYXNlZCBvbgo+ICogRG9jdW1lbnRhdGlvbiB0byBzZXQgZXhwZWN0YXRpb25zLCBz
aGFyZSB0aXBzIGFuZCBiZXN0IHByYWN0aWNlcyAtIHdpdGggdGhlCj4gaG9wZSB0aGF0IHBlb3Bs
ZSBpbiB0aGUgY29tbXVuaXR5IHJlZmxlY3Qgb2NjYXNpb25hbGx5IG9uIGhvdyB0aGV5IGFyZSBk
b2luZwo+IGFnYWluc3QgdGhlc2UgKG9yIGFyZSBtYXliZSBwcm9tcHRlZCBieSBwZWVycyB0byBk
byBzbykKPiAqIEEgc2FmZSBiYWNrLWNoYW5uZWwgdG8gYXNrIGZvciBhZHZpY2Ugd2hlbiBhIGNv
bnZlcnNhdGlvbiBiZWNvbWVzIGluZWZmaWNpZW50LAo+IHVuYWN0aW9uYWJsZSwgaXMgdW5mcmll
bmRseSwgLi4uIHdpdGggYSB2aWV3IHRvIHJlY292ZXIgaXQKPiAqIEFyYml0cmF0aW9uIGluIGNh
c2VzIHdoZXJlIHRoZXJlIGlzIHNvbWUgZnJpY3Rpb24gYW1vbmdzdCBwYXJ0aWNpcGFudHMgaW4g
YQo+IGRpc2N1c3Npb24sIHdoaWNoIHdhcyBub3QgcmVzb2x2YWJsZSBieSBhbnkgb2YgdGhlIGJl
Zm9yZS4gQWZ0ZXIgYWxsLCB3aGVuIHRoaXMKPiBoYXBwZW5zIHRoZXJlIGlzIGEgcmlzayB0aGF0
IGEgd29ya2luZyByZWxhdGlvbnNoaXAgZ2V0cyBuZWdhdGl2ZWx5IGltcGFjdGVkLiBJdAo+IGlz
IGFjdHVhbGx5IGluIHRoZSBpbnRlcmVzdCBvZiBlYWNoIHBhcnRpY2lwYW50IHRvIGltcHJvdmUg
dG8gYXZvaWQgZnJpY3Rpb24sCj4gc3RyZXNzLCBldGMuCj4gCj4gSSBob3BlIHRoYXQgd2UgY2Fu
IGFwcHJvdmUgdGhlIHNlcmllcyB3aXRob3V0IHRoZSBmaXJzdCBwYXJ0LCBidXQgSSBkbyBub3Qg
bWluZAo+IGlmIHBlb3BsZSBmZWVsIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiBvbmUgZ28uCgpU
aGUgY3VycmVudCBkb2N1bWVudCBMR1RNLCBJIGp1c3QgaGF2ZSBvbmUgc3R5bGUgbml0LgoKVGhh
bmtzIGZvciBkb2luZyB0aGlzIQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 15:11:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 15:11:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6FtG-0005Ot-Rg; Fri, 06 Sep 2019 15:11:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=CtaX=XB=citrix.com=roger.pau@srs-us1.protection.inumbo.net>)
 id 1i6FtF-0005Ob-1j
 for minios-devel@lists.xenproject.org; Fri, 06 Sep 2019 15:11:09 +0000
X-Inumbo-ID: 866865aa-d0b8-11e9-978d-bc764e2007e4
Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 866865aa-d0b8-11e9-978d-bc764e2007e4;
 Fri, 06 Sep 2019 15:10:57 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567782657;
 h=date:from:to:cc:subject:message-id:references:
 mime-version:in-reply-to;
 bh=vFj9d7b2/A+K7rjm9Mi+IiOEQ097I0rJYOOtnHXeNdI=;
 b=axsUAsBKiCj/wH8HDuay1FgXVrE2g9Z6DIOLkXolRp4uMsTCihOkQH2G
 1vfQBv9eywkinL2hH6tg1aR4P5aVFB4mTClHHmGlRc61l7IYO21f5zO4R
 FHORvznm8X5P2Dd9ED8qJSuOoXxY4+/1PmfjAGytFu9vRZm4Gx506mNh5 s=;
Authentication-Results: esa5.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=roger.pau@citrix.com;
 spf=Pass smtp.mailfrom=roger.pau@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21;
 receiver=esa5.hc3370-68.iphmx.com;
 envelope-from="roger.pau@citrix.com";
 x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa5.hc3370-68.iphmx.com: domain of
 roger.pau@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa5.hc3370-68.iphmx.com;
 envelope-from="roger.pau@citrix.com";
 x-sender="roger.pau@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com;
 envelope-from="roger.pau@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: YaFjOTFewSqWOatgbSwRL7DW6WK3jT/74mXx39r35K9ZZ5H+YEYJzdfprw8E5Ra6VvNb3wzbFa
 HHHFdMaj65pDxMVh6DZa1LsoybbvBIRDVchNd/dwWDpymx/xatE3kApF1EHAVNaO3yKyZRQFM7
 6cj/dcZMBSMfn4FCW+Qo30ZrI7/0ETE3VDKVCbJM68CLo2Z8x/c6UEqX1dgLPbxmr+sVuSk7Bw
 65MKeazoNOtGegvWN+k+Ve6kFYAihCZfaLBZlQTITLUOp3Ac2vjfWrtWcriORyfq0E65YIQ0/E
 e1w=
X-SBRS: 2.7
X-MesageID: 5427858
X-Ironport-Server: esa5.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,473,1559534400"; 
   d="scan'208";a="5427858"
Date: Fri, 6 Sep 2019 17:10:46 +0200
From: Roger Pau =?utf-8?B?TW9ubsOp?= <roger.pau@citrix.com>
To: Lars Kurth <lars.kurth@citrix.com>
Message-ID: <20190906151046.r7cremzaqw73btu3@Air-de-Roger>
References: <cover.1567620587.git.lars.kurth@citrix.com>
 <bce250afe71018f1a62f1b34866833588670a1f9.1567620587.git.lars.kurth@citrix.com>
MIME-Version: 1.0
Content-Disposition: inline
In-Reply-To: <bce250afe71018f1a62f1b34866833588670a1f9.1567620587.git.lars.kurth@citrix.com>
User-Agent: NeoMutt/20180716
X-ClientProxiedBy: AMSPEX02CAS02.citrite.net (10.69.22.113) To
 AMSPEX02CL01.citrite.net (10.69.22.125)
Subject: Re: [Minios-devel] [Xen-devel] [PATCH] Xen Project Code of Conduct
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: xen-api@lists.xenproject.org, minios-devel@lists.xenproject.org,
 committers@xenproject.org, mirageos-devel@lists.xenproject.org,
 xen-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gV2VkLCBTZXAgMDQsIDIwMTkgYXQgMDc6MTI6MThQTSArMDEwMCwgTGFycyBLdXJ0aCB3cm90
ZToKWy4uLl0KPiArIyMgQ29uZHVjdCBUZWFtIG1lbWJlcnMKPiArQ29uZHVjdCBUZWFtIG1lbWJl
cnMgYXJlIHByb2plY3QgbGVhZGVyc2hpcCB0ZWFtIG1lbWJlcnMgZnJvbSBhbnkKPiArc3ViLXBy
b2plY3QuIFRoZSBjdXJyZW50IGxpc3Qgb2YgQ29uZHVjdCBUZWFtIG1lbWJlcnMgaXM6Cj4gKyog
TGFycyBLdXJ0aCA8bGFycyBkb3Qga3VydGggYXQgeGVucHJvamVjdCBkb3Qgb3JnPgo+ICsqIEdl
b3JnZSBEdW5sYXAgPGdlb3JnZSBkb3QgZHVubGFwIGF0IGNpdHJpeCBkb3QgY29tPgo+ICsqIElh
biBKYWNrc29uIDxpYW4gZG90IGphY2tzb24gYXQgY2l0cml4IGRvdCBjb20+Cj4gKwo+ICtDb25k
dWN0IFRlYW0gbWVtYmVycyBhcmUgY2hhbmdlZCBieSBwcm9wb3NpbmcgYSBjaGFuZ2UgdG8gdGhp
cyBkb2N1bWVudCwKPiArcG9zdGVkIG9uIGFsbCBzdWItcHJvamVjdCBsaXN0cywgZm9sbG93ZWQg
YnkgYSBmb3JtYWwgZ2xvYmFsIHZvdGUgYXMgb3V0bGluZWQgW2hlcmVdOiBodHRwczovL3hlbnBy
b2plY3Qub3JnL2RldmVsb3BlcnMvZ292ZXJuYW5jZS8jcHJvamVjdC1kZWNpc2lvbnMKCkNvdWxk
IHlvdSBicmVhayB0aGUgYWJvdmUgbGluZSB0byBtYXRjaCB0aGUgZXhpc3RpbmcgbGluZSBsZW5n
dGggb2YKdGhlIGRvY3VtZW50PwoKUm9nZXIuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 06 15:37:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 06 Sep 2019 15:37:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6GIX-0007j5-Ub; Fri, 06 Sep 2019 15:37:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XnaT=XB=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i6GIW-0007ix-Mi
 for minios-devel@lists.xenproject.org; Fri, 06 Sep 2019 15:37:16 +0000
X-Inumbo-ID: 2c43cbc4-d0bc-11e9-abf7-12813bfff9fa
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2c43cbc4-d0bc-11e9-abf7-12813bfff9fa;
 Fri, 06 Sep 2019 15:37:03 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1567784223;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-id:content-transfer-encoding: mime-version;
 bh=QhNfwDZHgH9gQrN1l+NK5+pKpAJGvv3+xx59gVti6CE=;
 b=OD54sMS+vUzwLGnjs7IsErcIkcrEwpaJBqXPGpQ6Mo6TRoUym49TkgO8
 wYMLhXYRs28/d8a3KBtMcQuEVVaXK8rwjDjvftgOdfBQUMkvrk2QXSt0b
 2Q11pYdjFJdc6yj9VKrJ0mQ1ZpYkxv/TpHwCg8ONZalnrruCitIpkGXmz g=;
Authentication-Results: esa4.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: FqDRpkuv9DkEZgCz92Ct/z1fuvBMZaZ60CpCi17+26ujZaqh/ZISffdIAh7GdKFwHqxi2FXZOZ
 xsYiK580Xg6Tphua5RtZuf5+lowfgxzK3Bvw26/zai0NSBzoKeKRXy/Cg5eeLwdxbrWFazw0Cl
 nT7XYho/fna9AULBhWs5heqgDOP/9i42UKhYMeXyBt6YuwtFrypsGX4mK2sHNd2Qnw/cAin8LD
 yJ4tZ7lgXFtA3iNLMLoEi7w0yS/ZVtEEY7C/SLLK7Hq/8IQiZCvyouLt3nxZkzb8sz3K4x0BiY
 Zuw=
X-SBRS: 2.7
X-MesageID: 5520917
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,473,1559534400"; 
   d="scan'208";a="5520917"
From: Lars Kurth <lars.kurth@citrix.com>
To: Roger Pau Monne <roger.pau@citrix.com>
Thread-Topic: [Xen-devel] [PATCH] Xen Project Code of Conduct
Thread-Index: AQHVY0xS7k25XmSzskSR/W9PSVPWpKceomQAgAAYF4A=
Date: Fri, 6 Sep 2019 15:36:59 +0000
Message-ID: <7C473E1E-7870-4F30-BDE8-254E04B5ADBE@citrix.com>
References: <cover.1567620587.git.lars.kurth@citrix.com>
 <bce250afe71018f1a62f1b34866833588670a1f9.1567620587.git.lars.kurth@citrix.com>
 <20190906151046.r7cremzaqw73btu3@Air-de-Roger>
In-Reply-To: <20190906151046.r7cremzaqw73btu3@Air-de-Roger>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <611AC95F651D0D468B3C5C6C82044607@citrix.com>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [Xen-devel] [PATCH] Xen Project Code of Conduct
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQrvu79PbiAwNi8wOS8yMDE5LCAxNjoxMCwgIlJvZ2VyIFBhdSBNb25uZSIgPHJvZ2VyLnBhdUBj
aXRyaXguY29tPiB3cm90ZToNCg0KICAgIE9uIFdlZCwgU2VwIDA0LCAyMDE5IGF0IDA3OjEyOjE4
UE0gKzAxMDAsIExhcnMgS3VydGggd3JvdGU6DQogICAgWy4uLl0NCiAgICA+ICsjIyBDb25kdWN0
IFRlYW0gbWVtYmVycw0KICAgID4gK0NvbmR1Y3QgVGVhbSBtZW1iZXJzIGFyZSBwcm9qZWN0IGxl
YWRlcnNoaXAgdGVhbSBtZW1iZXJzIGZyb20gYW55DQogICAgPiArc3ViLXByb2plY3QuIFRoZSBj
dXJyZW50IGxpc3Qgb2YgQ29uZHVjdCBUZWFtIG1lbWJlcnMgaXM6DQogICAgPiArKiBMYXJzIEt1
cnRoIDxsYXJzIGRvdCBrdXJ0aCBhdCB4ZW5wcm9qZWN0IGRvdCBvcmc+DQogICAgPiArKiBHZW9y
Z2UgRHVubGFwIDxnZW9yZ2UgZG90IGR1bmxhcCBhdCBjaXRyaXggZG90IGNvbT4NCiAgICA+ICsq
IElhbiBKYWNrc29uIDxpYW4gZG90IGphY2tzb24gYXQgY2l0cml4IGRvdCBjb20+DQogICAgPiAr
DQogICAgPiArQ29uZHVjdCBUZWFtIG1lbWJlcnMgYXJlIGNoYW5nZWQgYnkgcHJvcG9zaW5nIGEg
Y2hhbmdlIHRvIHRoaXMgZG9jdW1lbnQsDQogICAgPiArcG9zdGVkIG9uIGFsbCBzdWItcHJvamVj
dCBsaXN0cywgZm9sbG93ZWQgYnkgYSBmb3JtYWwgZ2xvYmFsIHZvdGUgYXMgb3V0bGluZWQgW2hl
cmVdOiBodHRwczovL3hlbnByb2plY3Qub3JnL2RldmVsb3BlcnMvZ292ZXJuYW5jZS8jcHJvamVj
dC1kZWNpc2lvbnMNCiAgICANCiAgICBDb3VsZCB5b3UgYnJlYWsgdGhlIGFib3ZlIGxpbmUgdG8g
bWF0Y2ggdGhlIGV4aXN0aW5nIGxpbmUgbGVuZ3RoIG9mDQogICAgdGhlIGRvY3VtZW50Pw0KICAg
IA0KU3VyZSwgSSBjYW4gZG8gdGhpcyBpbiB0aGUgbmV4dCByZXZpc2lvbg0KDQpJIGludGVudGlv
bmFsbHkgZGlkbid0IGRvIGxpbmUgYnJlYWtzIG9uIG1vc3QgY2hhbmdlcyB0byBtYWtlIHN1cmUg
dGhhdCB0aGUgZGlmZmVyZW5jZXMgY2FuIGJlIHNlZW4NCg0KQWxzbywgd2Ugd2lsbCBwcm9iYWJs
eSBuZXZlciBwdWJsaXNoIHRoaXMgY29udGVudCBhbnl3aGVyZSBidXQgb24gdGhlIG1haW4gd2Vi
c2l0ZSAoYXMgaHRtbCBnZW5lcmF0ZWQgZnJvbSB0aGUgTUQpDQoNCkxhcnMNCiAgICANCg0KX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:45:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:45:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XHh-0001iO-Ha; Sat, 07 Sep 2019 09:45:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XHg-0001iJ-GW
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:45:32 +0000
X-Inumbo-ID: 399b04ca-d154-11e9-978d-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.58]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 399b04ca-d154-11e9-978d-bc764e2007e4;
 Sat, 07 Sep 2019 09:45:29 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OKoUmLwF/v0ikuDUWD2l8f0Lkc8GvHvdILN1qxmHM+eTMXZH7FpN5cJj0Kbs0SnH/0F66lTO98G6zy23BOoqR76Qo73V5/MstDok4p94rz5rW0URB/NL2Q7sxx181riK+mJR6p8/kpJUubo9UCA3YeMNPFaWxhi07EN4qtVR+zqB+NewM5aTwQBZ9EOil8SGUuINcpTCsxpUQTPb8PZ2sHnQITPMVgMBvwIU0Pa21ZFVCVvRGP8KvlDv3DjjaYOIT21MmiyiEAdWbEvXNHx2ldH0NWpXlb+QDnsPEwL5uuXlRz2zkCR1Jm1AykDxjNu5ySUZRJE505Kp08xYTZHBYA==
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=qTEuWsiDRyn3OZrW+GbuaOuv2O/ylyyfRMzW6FhOrjM=;
 b=LQG0Pq57pPcPc9oLQtH9PN3uiD8ey3psNkCl/gxrAw7ORpGCvsIx83yRZTwoRncj4vIJrBZmdfcd89ms+vTxglw0Tup622PlbBHD1dyBld/inPvvEYZbf7qj41jpbW5c/s5bYBpRGeAc6vy4A+e6423X3Wkn0pshq+73DBtk61tBfcwlvMsVSlV6EPvI5fhGovvFNBCsfdCRr7/ynbiLPItjN1XtfXzTqRw2SC1lI4PakWE2GUkctYZTFeOY06lG1dI9PniDost0K5DsRUoreOMvz9voxtwFW3qWQ9C7L3JteXOkpE+UuDfohhCN3Tp+526YL+PWrmX0L+WEHe6bdg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4940.eurprd01.prod.exchangelabs.com (20.177.210.157) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Sat, 7 Sep
 2019 09:45:27 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:45:27 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 0/5] Virtio 9P driver
Thread-Index: AQHVZWD6XpesMfo5S02N4X/dha3ecA==
Date: Sat, 7 Sep 2019 09:45:27 +0000
Message-ID: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0087.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::31) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 05f6ea80-278b-4e80-80a0-08d733781d0a
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4940; 
x-ms-traffictypediagnostic: PR1PR01MB4940:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB4940BF5D56C794CEE4B2DBB8A6B50@PR1PR01MB4940.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:8273;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(189003)(199004)(66476007)(54906003)(66556008)(64756008)(66446008)(6916009)(478600001)(66946007)(6512007)(14454004)(486006)(99286004)(2351001)(2906002)(50226002)(5640700003)(45776006)(5660300002)(6436002)(81166006)(81156014)(53936002)(8676002)(8936002)(305945005)(4326008)(7736002)(1076003)(4744005)(71200400001)(102836004)(71190400001)(25786009)(2501003)(186003)(46003)(2616005)(256004)(14444005)(316002)(6506007)(386003)(476003)(52116002)(6486002)(786003)(6116002)(86362001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4940;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: BrPeo0US5pMSaeF5TsuPjQoIAII3BXmLEbBfIzZmVIwz+iKRfGtYt1prM2GCkhXsaVIAOUnlyGe09+l3NmUn4BA2z/2qjidXMPnhpm/+4tqAFv3xKkUwkKJR6IhYrBsiYSj1yLH0OpkxMSPMxDr9lpRXGGrbyTZLkiIHxoKwvqX0+NrGExrOr8iLW37XwemuHIpFf/xbi+vKxd8vpAFZf//8FxWaWUqhj+FMDnNRAqjIbACszJOqlhWGVXHSawvOC6wVnNfDXeihLHEEO8b97kXEjqlx6QXO5JEFwj6KMS9vpuNv6VvlHs0gUhNhQ4s8BXF7xOwGnPtNebSoqxAmLjIcrF8XZsWUmEYeKL5NMbw8gZjabdo1v3d2e9QJAsuQho2GGqizn5ykFm+0zxNokcxddJWhlK4VM7C/sKhl3uE=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 05f6ea80-278b-4e80-80a0-08d733781d0a
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:45:27.4862 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: NlxN5kf7/m5FK1Wf8XgsFnYfC4nsi0vHHEk2SuY67b6tc+ZwBXcBEYqPNzJKMk+6ipohMTsvWY1Dpxfe5OMh76FHZr4W9LFttK7iHDo4BGC40PclSWi7gCw8OB9WGQO0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4940
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/5] Virtio 9P driver
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXJpZXMgYWRkcyB0aGUgdmlydGlvIDlQIGRyaXZlciBpbXBsZW1lbnRhdGlv
biwgYmFzZWQgb24gdGhlCnVuaWtyYWZ0IDlQIEFQSS4gVGhlIGRyaXZlcidzIGltcGxlbWVudGF0
aW9uIGlzIGluIHZpcnRpb185cC5jLCBhbmQgdGhlClBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGxh
eW91dCBhbmQgZmxhZ3MgY2FuIGJlIGZvdW5kIGluIHZpcnRpb185cC5oLgoKClRoZSA5UCBkZXZp
Y2VzIGFyZSBpbml0aWFsaXplZCBvbmNlLCBhdCBib290IHRpbWUsIGFuZCBlYWNoIGNvbm5lY3Qo
KSBvcgpkaXNjb25uZWN0KCkgc2ltcGx5IHBvaW50cyB0aGUgdWtfOXBkZXYgdG8gdGhlIGNvcnJl
Y3QgdmlydGlvIDlQIGRldmljZQpvciB0byBOVUxMLgoKQ3Jpc3RpYW4gQmFudSAoNSk6CiAgcGxh
dC9kcml2ZXJzOiBWaXJ0aW8gOVAgZHJpdmVyIHNrZWxldG9uCiAgcGxhdC9kcml2ZXJzOiBBZGQg
OVAgZGV2aWNlIGluaXRpYWxpemF0aW9uCiAgcGxhdC9kcml2ZXJzOiBBbGxvY2F0ZSB2aXJ0cXVl
dWUgZm9yIHZpcnRpbyA5UAogIHBsYXQvZHJpdmVyczogQWRkIDlQIHRyYW5zcG9ydCBmb3Igdmly
dGlvIDlQCiAgcGxhdC9kcml2ZXJzOiBJbXBsZW1lbnQgdmlydGlvIDlQIHJlcXVlc3QgYW5kIHJl
Y3YKCiBwbGF0L2RyaXZlcnMvaW5jbHVkZS92aXJ0aW8vdmlydGlvXzlwLmggfCAgNTMgKysrCiBw
bGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jICAgICAgICAgfCA0NzIgKysrKysrKysrKysr
KysrKysrKysrKysrCiBwbGF0L2t2bS9Db25maWcudWsgICAgICAgICAgICAgICAgICAgICAgfCAg
IDkgKwogcGxhdC9rdm0vTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgIHwgIDEzICsKIDQg
ZmlsZXMgY2hhbmdlZCwgNTQ3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0
L2RyaXZlcnMvaW5jbHVkZS92aXJ0aW8vdmlydGlvXzlwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBw
bGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCgotLSAKMi4yMC4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:45:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:45:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XHm-0001is-KG; Sat, 07 Sep 2019 09:45:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XHl-0001ij-Cn
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:45:37 +0000
X-Inumbo-ID: 3cf4992e-d154-11e9-b299-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.85]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3cf4992e-d154-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:45:34 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=IiYGDkaK46fTJHU7ndat4Ue+n+G7XWq6y6cMGS6++xHQEbPgrTczVYPpNIA33MLqeYwGS+W7yxNvqYmPblUzPAB9ICw31GCFmwciuPvIENgn643QoRKXWlD+e2F6VxhWWMHX9L22I+Z0M5y6ZHQ4Z5XfMhmJYiOrajfDF373EZhFBi2pRStUy2boIv6ZRNV7kvNbZseLrKCXpVpU/70iemI3fROpKkigVNYHKcbXwK4lZVx6m6YrCJbcn8y7gqpL6tWBlWaHnYUQm0B9dwIPme7D5w6P8XXR4FRx5NQySHBsSNBANlcGMlTv3wNqwMRZahXQE7/W+OlqvXf8gcrkxw==
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=Gz9WhC63QL5I/dIJhCB+hPvyIz/dl8FtmmUdBEnzEjU=;
 b=WazXhKmefa7P293cm068cTYPsn7yxJgWxZiL+Y5QkhoXTfF0ZyXShiNlStovKOR6cIQLEdUZDtVgM3HcwxPmrSsVynwqLDBzNsDSyurmW7Kbkp4BHbG0ZuJScCHpqgmIuJ30o+GOPvvDpn1WagIj8fSvo48cfmOFj7lmBbg+vKJMaKP65c7Gs0a67DfHypT4ufYRh285NUG3t0wKH2d7eYtdH0oQPd1x3a/8eTUCyNRqw4W7kkWIqQM95lAHCD1YhFbw6bkN4rpw2eoH1jIvw8r+EovDFbATskevmaungIg89yLfRJV35IEpftKuL8zxshIQd0TnlFFCouSCkdaAdQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4940.eurprd01.prod.exchangelabs.com (20.177.210.157) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Sat, 7 Sep
 2019 09:45:28 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:45:28 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 1/5] plat/drivers: Virtio 9P driver skeleton
Thread-Index: AQHVZWD7Awi+Vh47RUigGoC3bvO8hg==
Date: Sat, 7 Sep 2019 09:45:28 +0000
Message-ID: <20190907094518.12323-2-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0087.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::31) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 179b7b2c-7153-458d-bd5c-08d733781d83
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4940; 
x-ms-traffictypediagnostic: PR1PR01MB4940:
x-microsoft-antispam-prvs: <PR1PR01MB494076C0867B407B91D48A15A6B50@PR1PR01MB4940.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:3383;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(189003)(199004)(66476007)(54906003)(66556008)(64756008)(66446008)(6916009)(478600001)(66946007)(6512007)(14454004)(486006)(99286004)(2351001)(2906002)(50226002)(5640700003)(45776006)(5660300002)(6436002)(81166006)(81156014)(53936002)(8676002)(8936002)(305945005)(4326008)(7736002)(1076003)(71200400001)(102836004)(71190400001)(25786009)(2501003)(186003)(11346002)(46003)(2616005)(446003)(256004)(14444005)(76176011)(316002)(6506007)(386003)(476003)(52116002)(6486002)(786003)(6116002)(86362001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4940;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: CxTavJfsOfwXwEAgJd6qEPRrB5JFUrEUKK241UKAGw1S71usMLI3DmKmMXUHuvowPMjYtEleo8dgHw76h0b2ZJ28bQut0IBNp1bGL/AOR5A8JEIkX84CwZZrEu7TPylOTKPjZhlic3jIGEN19xUxME6b1BxScVVblMm9Ui231jKZWKt+DPxaMNz+SiTISLr2UwPZrB5IcaIs8Wb1AXLqtRGTvjGBpyaHMIJHJaz7AhbwuJnvPzqKX/8xl+CmPWD1Fq72xdHIvvEf86uqP5KaTNzAiMvWo/PtZQW6EOc9vVCLbmnZx81pMjcK6uITm5LHxSX2iBT5Kx/XTdSDsm+OesLANv6t2Ca4kZ97e5tn/I6U0UZikNS+sHO012HnraCuDXW/m9qRVbkeQiqZtRUUwhaSFS5hLCcMKO01J2gCP2Q=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 179b7b2c-7153-458d-bd5c-08d733781d83
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:45:28.3837 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: UWq8duVbXbFsumHR/qkJ2lN9c+gTZS+TDFZyr5JPNVX41dDvSbQAgAbbcJjsjR6GDz6cYmMART6OjcQRxckBA3s2M2kuqMlBREu7oVXWHcUFJBqT/SBpBr9VuwY8oTFV
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4940
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/5] plat/drivers: Virtio 9P
 driver skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgdmlydGlvIDlQIGRyaXZlciBza2VsZXRvbi4KClNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJh
bnUgPGNyaXN0YkBnbWFpbC5jb20+Ci0tLQogcGxhdC9kcml2ZXJzL2luY2x1ZGUvdmlydGlvL3Zp
cnRpb185cC5oIHwgNDQgKysrKysrKysrKysrKysrKysrKwogcGxhdC9kcml2ZXJzL3ZpcnRpby92
aXJ0aW9fOXAuYyAgICAgICAgIHwgNTggKysrKysrKysrKysrKysrKysrKysrKysrKwogcGxhdC9r
dm0vQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKwogcGxhdC9rdm0vTWFr
ZWZpbGUudWsgICAgICAgICAgICAgICAgICAgIHwgMTMgKysrKysrCiA0IGZpbGVzIGNoYW5nZWQs
IDEyNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC9kcml2ZXJzL2luY2x1
ZGUvdmlydGlvL3ZpcnRpb185cC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC9kcml2ZXJzL3Zp
cnRpby92aXJ0aW9fOXAuYwoKZGlmZiAtLWdpdCBhL3BsYXQvZHJpdmVycy9pbmNsdWRlL3ZpcnRp
by92aXJ0aW9fOXAuaCBiL3BsYXQvZHJpdmVycy9pbmNsdWRlL3ZpcnRpby92aXJ0aW9fOXAuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNTQ1OWEzOTcKLS0tIC9kZXYvbnVs
bAorKysgYi9wbGF0L2RyaXZlcnMvaW5jbHVkZS92aXJ0aW8vdmlydGlvXzlwLmgKQEAgLTAsMCAr
MSw0NCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoK
KyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+CisgKgorICogQ29w
eXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RF
RCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKyNpZm5kZWYgX19QTEFUX0RSVl9WSVJU
SU9fOVBfSAorI2RlZmluZSBfX1BMQVRfRFJWX1ZJUlRJT185UF9ICisjaW5jbHVkZSA8dWsvY29u
ZmlnLmg+CisjaW5jbHVkZSA8dWsvYXJjaC90eXBlcy5oPgorCisjaW5jbHVkZSA8dmlydGlvL3Zp
cnRpb19pZHMuaD4KKyNpbmNsdWRlIDx2aXJ0aW8vdmlydGlvX2NvbmZpZy5oPgorI2luY2x1ZGUg
PHZpcnRpby92aXJ0aW9fdHlwZXMuaD4KKworI2VuZGlmIC8qIF9fUExBVF9EUlZfVklSVElPXzlQ
X0ggKi8KZGlmZiAtLWdpdCBhL3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMgYi9wbGF0
L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwLi44NTU1NDhmZQotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQvZHJpdmVycy92aXJ0aW8v
dmlydGlvXzlwLmMKQEAgLTAsMCArMSw1OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBn
bWFpbC5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhu
aWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURF
UiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKyNp
bmNsdWRlIDx2aXJ0aW8vdmlydGlvX2J1cy5oPgorI2luY2x1ZGUgPHZpcnRpby92aXJ0aW9fOXAu
aD4KKworc3RhdGljIGludCB2aXJ0aW9fOXBfYWRkX2RldihzdHJ1Y3QgdmlydGlvX2RldiAqdmRl
diBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aXJ0aW9fOXBfZHJ2
X2luaXQoc3RydWN0IHVrX2FsbG9jICpkcnZfYWxsb2NhdG9yIF9fdW51c2VkKQoreworCXJldHVy
biAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpcnRpb19kZXZfaWQgdjlwX2Rldl9pZFtd
ID0geworCXtWSVJUSU9fSURfOVB9LAorCXtWSVJUSU9fSURfSU5WQUxJRH0gLyogTGlzdCBUZXJt
aW5hdG9yICovCit9OworCitzdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdjlwX2RydiA9IHsK
KwkuZGV2X2lkcyA9IHY5cF9kZXZfaWQsCisJLmluaXQgICAgPSB2aXJ0aW9fOXBfZHJ2X2luaXQs
CisJLmFkZF9kZXYgPSB2aXJ0aW9fOXBfYWRkX2RldgorfTsKK1ZJUlRJT19CVVNfUkVHSVNURVJf
RFJJVkVSKCZ2OXBfZHJ2KTsKZGlmZiAtLWdpdCBhL3BsYXQva3ZtL0NvbmZpZy51ayBiL3BsYXQv
a3ZtL0NvbmZpZy51awppbmRleCAyOGZiN2I4Yi4uYzRhZDY1ZWMgMTAwNjQ0Ci0tLSBhL3BsYXQv
a3ZtL0NvbmZpZy51aworKysgYi9wbGF0L2t2bS9Db25maWcudWsKQEAgLTc5LDYgKzc5LDE1IEBA
IGNvbmZpZyBWSVJUSU9fTkVUCiAgICAgICAgc2VsZWN0IExJQlVLU0dMSVNUCiAgICAgICAgaGVs
cAogICAgICAgICAgICAgICBWaXJ0dWFsIG5ldHdvcmsgZHJpdmVyLgorCitjb25maWcgVklSVElP
XzlQCisgICAgICAgYm9vbCAiVmlydGlvIDlQIGRldmljZSIKKyAgICAgICBkZWZhdWx0IG4KKyAg
ICAgICBkZXBlbmRzIG9uIExJQlVLOVAKKyAgICAgICBzZWxlY3QgVklSVElPX0JVUworICAgICAg
IHNlbGVjdCBMSUJVS1NHTElTVAorICAgICAgIGhlbHAKKyAgICAgICAgICAgICAgVmlydGlvIDlQ
IGRyaXZlci4KIGVuZG1lbnUKIAogY29uZmlnIExJQkdJQ1YyCmRpZmYgLS1naXQgYS9wbGF0L2t2
bS9NYWtlZmlsZS51ayBiL3BsYXQva3ZtL01ha2VmaWxlLnVrCmluZGV4IGY2Y2MyZDE5Li42OGJj
ZmQ5NSAxMDA2NDQKLS0tIGEvcGxhdC9rdm0vTWFrZWZpbGUudWsKKysrIGIvcGxhdC9rdm0vTWFr
ZWZpbGUudWsKQEAgLTEwLDYgKzEwLDcgQEAgJChldmFsICQoY2FsbCBhZGRwbGF0bGliLGt2bSxs
aWJrdm1wbGF0KSkKICQoZXZhbCAkKGNhbGwgYWRkcGxhdGxpYl9zLGt2bSxsaWJrdm1wY2ksJChD
T05GSUdfS1ZNX1BDSSkpKQogJChldmFsICQoY2FsbCBhZGRwbGF0bGliX3Msa3ZtLGxpYmt2bXZp
cnRpbywkKENPTkZJR19WSVJUSU9fQlVTKSkpCiAkKGV2YWwgJChjYWxsIGFkZHBsYXRsaWJfcyxr
dm0sbGlia3ZtdmlydGlvbmV0LCQoQ09ORklHX1ZJUlRJT19ORVQpKSkKKyQoZXZhbCAkKGNhbGwg
YWRkcGxhdGxpYl9zLGt2bSxsaWJrdm12aXJ0aW85cCwkKENPTkZJR19WSVJUSU9fOVApKSkKICQo
ZXZhbCAkKGNhbGwgYWRkcGxhdGxpYl9zLGt2bSxsaWJrdm1vZncsJChDT05GSUdfTElCT0ZXKSkp
CiAkKGV2YWwgJChjYWxsIGFkZHBsYXRsaWJfcyxrdm0sbGlia3ZtZ2ljdjIsJChDT05GSUdfTElC
R0lDVjIpKSkKIApAQCAtMTI5LDYgKzEzMCwxOCBAQCBMSUJLVk1WSVJUSU9ORVRfQ0lOQ0xVREVT
LXkgICAgKz0gLUkkKFVLX1BMQVRfRFJJVkVSU19CQVNFKS9pbmNsdWRlCiBMSUJLVk1WSVJUSU9O
RVRfU1JDUy15ICs9XAogCQkJJChVS19QTEFUX0RSSVZFUlNfQkFTRSkvdmlydGlvL3ZpcnRpb19u
ZXQuYwogCisjIworIyMgVmlydGlvIDlQIGxpYnJhcnkgZGVmaW5pdGlvbgorIyMKK0xJQktWTVZJ
UlRJTzlQX0FTSU5DTFVERVMteSAgICs9IC1JJChMSUJLVk1QTEFUX0JBU0UpL2luY2x1ZGUKK0xJ
QktWTVZJUlRJTzlQX0NJTkNMVURFUy15ICAgICs9IC1JJChMSUJLVk1QTEFUX0JBU0UpL2luY2x1
ZGUKK0xJQktWTVZJUlRJTzlQX0FTSU5DTFVERVMteSAgICs9IC1JJChVS19QTEFUX0NPTU1PTl9C
QVNFKS9pbmNsdWRlCitMSUJLVk1WSVJUSU85UF9DSU5DTFVERVMteSAgICArPSAtSSQoVUtfUExB
VF9DT01NT05fQkFTRSkvaW5jbHVkZQorTElCS1ZNVklSVElPOVBfQVNJTkNMVURFUy15ICAgKz0g
LUkkKFVLX1BMQVRfRFJJVkVSU19CQVNFKS9pbmNsdWRlCitMSUJLVk1WSVJUSU85UF9DSU5DTFVE
RVMteSAgICArPSAtSSQoVUtfUExBVF9EUklWRVJTX0JBU0UpL2luY2x1ZGUKK0xJQktWTVZJUlRJ
TzlQX1NSQ1MteSArPVwKKwkJCSQoVUtfUExBVF9EUklWRVJTX0JBU0UpL3ZpcnRpby92aXJ0aW9f
OXAuYworCiAjIwogIyMgT0ZXIGxpYnJhcnkgZGVmaW5pdGlvbnMKICMjCi0tIAoyLjIwLjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:45:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:45:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XHr-0001jZ-M0; Sat, 07 Sep 2019 09:45:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XHq-0001jR-CC
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:45:42 +0000
X-Inumbo-ID: 3e5a2a86-d154-11e9-b299-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.85]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3e5a2a86-d154-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:45:36 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=bWDZja6FxCFKSMtVtRXlkLu3xhJDk908FIXgnrxEBEqHFpUSGYoooS/rOdN7eIrKl7Jf29qbYQADhdXbd608eYBoZ6OkD13zoDp1aGwY/EJOeoMb2XSHK5tg0RN6hJxCOy7C/VRPi0bY/1TBGUsQihSL0oaLARjVx+yRg1vmRIAcyaTstwJEq+KnlrqKEr91GZlWptH+zAPmy7ftKs6kw//VJoUj8JYb5UlzqKns4ltOmwdjHF9nIgIVR4xn5aMTct/+XwXPvgLDa3TlddTKaqIRsSZ+daa3NSiUgvEGwZA1+UfVPeD6HKIO4xan7BvzzPvamKnGOcDD0B1qydUzbQ==
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=aonibpOQRR01X7vmW7AmwxCGQyy4B6mqsWFbSbNDEXE=;
 b=HT9sebQ/6a7itms5VYxCnQLe9mQsY1hBILp2w8RbIzDy4ewIlTIcHU6MjlI63EyWKUlYxAVO5EuSJRqVG6sD5J+naG0RmgFDV2Y0Y6lhKGWXOyJB054sbM9FtQv3/bfRczkmBjlrAx+mxA93DqH2fQoSuz79YHUQlu1fpjzANjcfCT9J/ClTq14movYx9OQMC0fTHJ5d6lemRvSwRm/ObpwlF9dC0sKATb9QKbYCrVROWp7DLrg/kchFo8nJv4xwfA8WlC+9kv3hPTx7X1osS9ZE6cHN0n6Hc+mdryju9B01vrz9KoSm4WIFKqLg0+s6+o71ej2oONRmDnWE0LjBBw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4940.eurprd01.prod.exchangelabs.com (20.177.210.157) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Sat, 7 Sep
 2019 09:45:33 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:45:33 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 2/5] plat/drivers: Add 9P device
 initialization
Thread-Index: AQHVZWD7Oc82zddUmk2JRAnexWHf/Q==
Date: Sat, 7 Sep 2019 09:45:28 +0000
Message-ID: <20190907094518.12323-3-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0087.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::31) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 58185903-476f-4ce2-4dfd-08d733781de9
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4940; 
x-ms-traffictypediagnostic: PR1PR01MB4940:
x-microsoft-antispam-prvs: <PR1PR01MB4940A527BE0DC687ACDBFEEBA6B50@PR1PR01MB4940.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:949;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(189003)(199004)(66476007)(54906003)(66556008)(64756008)(66446008)(6916009)(478600001)(66946007)(6512007)(14454004)(486006)(99286004)(2351001)(2906002)(50226002)(5640700003)(45776006)(5660300002)(6436002)(81166006)(81156014)(53936002)(8676002)(8936002)(305945005)(4326008)(7736002)(1076003)(71200400001)(102836004)(71190400001)(25786009)(2501003)(186003)(11346002)(46003)(2616005)(446003)(256004)(14444005)(76176011)(316002)(6506007)(386003)(476003)(52116002)(6666004)(6486002)(786003)(6116002)(86362001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4940;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: ZMxZQ9co8ERsziWUsypPbXap/pc6kOHMw9VuI71G5L2tUhwxAGr3s7FVvdB6PQENcpqMmF9jzB3akHgsR+klJx8IaiIffFLKbUOHD/mVRRjnHQwWFv9P9FUyPvTtYXlk9j1NK6BjWeU1eGNpJNtV8P0WLOuTIXTHkIwYT0knN6/US5zI4lQfwotlqTAhLvlljnHEWDUPICwzK2vucIr9et8Jvm7NUWqGmMpCflnltvkcKGgL2SAvmoK5k7E8wjXHqtPHP3H0zhNzQD3IY4ctQvXyWY+FYV4IpJsztRmu3WgsPT7Hvf49z7rUoQ9nOQjjq+R8WGph118kjj4SXDhAxVucfj3bJ6qnn0EuRxuczgOJ+k61jhv6v8GtBPiNl1bSqkZ873MFbPWexEIrv/v5mySZSdcMF5bqmT+EzAHgyFg=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 58185903-476f-4ce2-4dfd-08d733781de9
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:45:28.8924 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: srvbjQojBb8c8jMoGtUn8V3C481j7x3rS2252w6+ksxey6DOBEFiG5QebDXymtPEFMckPRTM/hcj72kCPPBQqGa9O+r4/jy9M/lFIumsql6IKESeLADtpWW5tvytZd9+
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4940
Subject: [Minios-devel] [UNIKRAFT PATCH v2 2/5] plat/drivers: Add 9P device
 initialization
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyB0aGUgOVAgZHJpdmVyIGFuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24uCgpTaWduZWQtb2Zm
LWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgotLS0KIHBsYXQvZHJpdmVycy9p
bmNsdWRlL3ZpcnRpby92aXJ0aW9fOXAuaCB8ICAgOSArKwogcGxhdC9kcml2ZXJzL3ZpcnRpby92
aXJ0aW9fOXAuYyAgICAgICAgIHwgMTMyICsrKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxl
cyBjaGFuZ2VkLCAxMzggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9wbGF0L2RyaXZlcnMvaW5jbHVkZS92aXJ0aW8vdmlydGlvXzlwLmggYi9wbGF0L2RyaXZlcnMv
aW5jbHVkZS92aXJ0aW8vdmlydGlvXzlwLmgKaW5kZXggNTQ1OWEzOTcuLjI5MTU4YWI3IDEwMDY0
NAotLS0gYS9wbGF0L2RyaXZlcnMvaW5jbHVkZS92aXJ0aW8vdmlydGlvXzlwLmgKKysrIGIvcGxh
dC9kcml2ZXJzL2luY2x1ZGUvdmlydGlvL3ZpcnRpb185cC5oCkBAIC00MSw0ICs0MSwxMyBAQAog
I2luY2x1ZGUgPHZpcnRpby92aXJ0aW9fY29uZmlnLmg+CiAjaW5jbHVkZSA8dmlydGlvL3ZpcnRp
b190eXBlcy5oPgogCisvKiBGZWF0dXJlIGJpdG1hcCBmb3IgdmlydGlvIDlQLiAqLworI2RlZmlu
ZSBWSVJUSU9fOVBfRl9NT1VOVF9UQUcgMAorCisvKiBWaXJ0aW8gOVAgUENJIGNvbmZpZ3VyYXRp
b24gc3BhY2UgbGF5b3V0LiAqLworc3RydWN0IHZpcnRpb185cF9jb25maWcgeworCV9fdTE2IHRh
Z19sZW47CisJX191OCB0YWdbMF07Cit9IF9fcGFja2VkOworCiAjZW5kaWYgLyogX19QTEFUX0RS
Vl9WSVJUSU9fOVBfSCAqLwpkaWZmIC0tZ2l0IGEvcGxhdC9kcml2ZXJzL3ZpcnRpby92aXJ0aW9f
OXAuYyBiL3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMKaW5kZXggODU1NTQ4ZmUuLjc5
OGViZTkwIDEwMDY0NAotLS0gYS9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCisrKyBi
L3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMKQEAgLTMyLDE5ICszMiwxNDUgQEAKICAq
IFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVku
CiAgKi8KIAorI2luY2x1ZGUgPHVrL2FsbG9jLmg+CisjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5o
PgogI2luY2x1ZGUgPHZpcnRpby92aXJ0aW9fYnVzLmg+CiAjaW5jbHVkZSA8dmlydGlvL3ZpcnRp
b185cC5oPgorI2luY2x1ZGUgPHVrL3BsYXQvc3BpbmxvY2suaD4KIAotc3RhdGljIGludCB2aXJ0
aW9fOXBfYWRkX2RldihzdHJ1Y3QgdmlydGlvX2RldiAqdmRldiBfX3VudXNlZCkKKyNkZWZpbmUg
RFJJVkVSX05BTUUJInZpcnRpby05cCIKK3N0YXRpYyBzdHJ1Y3QgdWtfYWxsb2MgKmE7CisKKy8q
IExpc3Qgb2YgaW5pdGlhbGl6ZWQgdmlydGlvIDlwIGRldmljZXMuICovCitzdGF0aWMgVUtfTElT
VF9IRUFEKHZpcnRpb185cF9kZXZpY2VfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZp
cnRpb185cF9kZXZpY2VfbGlzdF9sb2NrKTsKKworc3RydWN0IHZpcnRpb185cF9kZXZpY2Ugewor
CS8qIFZpcnRpbyBkZXZpY2UuICovCisJc3RydWN0IHZpcnRpb19kZXYgKnZkZXY7CisJLyogTW91
bnQgdGFnIGZvciB0aGlzIHZpcnRpbyBkZXZpY2UuICovCisJY2hhciAqdGFnOworCS8qIEVudHJ5
IHdpdGhpbiB0aGUgdmlydGlvIGRldmljZXMnIGxpc3QuICovCisJc3RydWN0IHVrX2xpc3RfaGVh
ZCBfbGlzdDsKK307CisKK3N0YXRpYyBpbnQgdmlydGlvXzlwX2ZlYXR1cmVfbmVnb3RpYXRlKHN0
cnVjdCB2aXJ0aW9fOXBfZGV2aWNlICpkKQogewotCXJldHVybiAwOworCV9fdTY0IGhvc3RfZmVh
dHVyZXM7CisJX191MTYgdGFnX2xlbjsKKwlpbnQgcmMgPSAwOworCisJaG9zdF9mZWF0dXJlcyA9
IHZpcnRpb19mZWF0dXJlX2dldChkLT52ZGV2KTsKKwlpZiAoIXZpcnRpb19oYXNfZmVhdHVyZXMo
aG9zdF9mZWF0dXJlcywgVklSVElPXzlQX0ZfTU9VTlRfVEFHKSkgeworCQl1a19wcl9lcnIoRFJJ
VkVSX05BTUUiOiBIb3N0IHN5c3RlbSBkb2VzIG5vdCBvZmZlciBNT1VOVF9UQUcgZmVhdHVyZVxu
Iik7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJdmlydGlvX2NvbmZpZ19n
ZXQoZC0+dmRldiwKKwkJCSAgX19vZmZzZXRvZihzdHJ1Y3QgdmlydGlvXzlwX2NvbmZpZywgdGFn
X2xlbiksCisJCQkgICZ0YWdfbGVuLCAxLCBzaXplb2YodGFnX2xlbikpOworCisJZC0+dGFnID0g
dWtfY2FsbG9jKGEsIHRhZ19sZW4gKyAxLCBzaXplb2YoKmQtPnRhZykpOworCWlmICghZC0+dGFn
KSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJdmlydGlvX2NvbmZpZ19n
ZXQoZC0+dmRldiwKKwkJCSAgX19vZmZzZXRvZihzdHJ1Y3QgdmlydGlvXzlwX2NvbmZpZywgdGFn
KSwKKwkJCSAgZC0+dGFnLCB0YWdfbGVuLCAxKTsKKwlkLT50YWdbdGFnX2xlbl0gPSAnXDAnOwor
CisJZC0+dmRldi0+ZmVhdHVyZXMgJj0gaG9zdF9mZWF0dXJlczsKKwl2aXJ0aW9fZmVhdHVyZV9z
ZXQoZC0+dmRldiwgZC0+dmRldi0+ZmVhdHVyZXMpOworCitvdXQ6CisJcmV0dXJuIHJjOworfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgdmlydGlvXzlwX2ZlYXR1cmVfc2V0KHN0cnVjdCB2aXJ0aW9f
OXBfZGV2aWNlICpkKQoreworCWQtPnZkZXYtPmZlYXR1cmVzID0gMDsKKwlWSVJUSU9fRkVBVFVS
RVNfVVBEQVRFKGQtPnZkZXYtPmZlYXR1cmVzLCBWSVJUSU9fOVBfRl9NT1VOVF9UQUcpOworfQor
CitzdGF0aWMgaW50IHZpcnRpb185cF9jb25maWd1cmUoc3RydWN0IHZpcnRpb185cF9kZXZpY2Ug
KmQpCit7CisJaW50IHJjID0gMDsKKworCXJjID0gdmlydGlvXzlwX2ZlYXR1cmVfbmVnb3RpYXRl
KGQpOworCWlmIChyYyAhPSAwKSB7CisJCXVrX3ByX2VycihEUklWRVJfTkFNRSI6IEZhaWxlZCB0
byBuZWdvdGlhdGUgdGhlIGRldmljZSBmZWF0dXJlICVkXG4iLAorCQkJcmMpOworCQlyYyA9IC1F
SU5WQUw7CisJCWdvdG8gb3V0X3N0YXR1c19mYWlsOworCX0KKworCXVrX3ByX2luZm8oRFJJVkVS
X05BTUUiOiBDb25maWd1cmVkOiBmZWF0dXJlcz0weCVseCB0YWc9JXNcbiIsCisJCQlkLT52ZGV2
LT5mZWF0dXJlcywgZC0+dGFnKTsKK291dDoKKwlyZXR1cm4gcmM7CisKK291dF9zdGF0dXNfZmFp
bDoKKwl2aXJ0aW9fZGV2X3N0YXR1c191cGRhdGUoZC0+dmRldiwgVklSVElPX0NPTkZJR19TVEFU
VVNfRkFJTCk7CisJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBpbnQgdmlydGlvXzlwX2Rydl9pbml0
KHN0cnVjdCB1a19hbGxvYyAqZHJ2X2FsbG9jYXRvciBfX3VudXNlZCkKK3N0YXRpYyBpbnQgdmly
dGlvXzlwX3N0YXJ0KHN0cnVjdCB2aXJ0aW9fOXBfZGV2aWNlICpkKQogeworCXZpcnRpb19kZXZf
ZHJ2X3VwKGQtPnZkZXYpOworCXVrX3ByX2luZm8oRFJJVkVSX05BTUUiOiAlcyBzdGFydGVkXG4i
LCBkLT50YWcpOworCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgdmlydGlvXzlwX2FkZF9k
ZXYoc3RydWN0IHZpcnRpb19kZXYgKnZkZXYpCit7CisJc3RydWN0IHZpcnRpb185cF9kZXZpY2Ug
KmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmMgPSAwOworCisJVUtfQVNTRVJUKHZk
ZXYgIT0gTlVMTCk7CisKKwlkID0gdWtfY2FsbG9jKGEsIDEsIHNpemVvZigqZCkpOworCWlmICgh
ZCkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwlkLT52ZGV2ID0gdmRldjsK
Kwl2aXJ0aW9fOXBfZmVhdHVyZV9zZXQoZCk7CisJcmMgPSB2aXJ0aW9fOXBfY29uZmlndXJlKGQp
OworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKKwlyYyA9IHZpcnRpb185cF9zdGFydChkKTsK
KwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwl1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUo
JnZpcnRpb185cF9kZXZpY2VfbGlzdF9sb2NrLCBmbGFncyk7CisJdWtfbGlzdF9hZGQoJmQtPl9s
aXN0LCAmdmlydGlvXzlwX2RldmljZV9saXN0KTsKKwl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVz
dG9yZSgmdmlydGlvXzlwX2RldmljZV9saXN0X2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4g
cmM7CitvdXRfZnJlZToKKwl1a19mcmVlKGEsIGQpOworCWdvdG8gb3V0OworfQorCitzdGF0aWMg
aW50IHZpcnRpb185cF9kcnZfaW5pdChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxvY2F0b3IpCit7
CisJaW50IHJjID0gMDsKKworCWlmICghZHJ2X2FsbG9jYXRvcikgeworCQlyYyA9IC1FSU5WQUw7
CisJCWdvdG8gb3V0OworCX0KKworCWEgPSBkcnZfYWxsb2NhdG9yOworb3V0OgorCXJldHVybiBy
YzsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2aXJ0aW9fZGV2X2lkIHY5cF9kZXZfaWRbXSA9
IHsKIAl7VklSVElPX0lEXzlQfSwKIAl7VklSVElPX0lEX0lOVkFMSUR9IC8qIExpc3QgVGVybWlu
YXRvciAqLwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:45:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:45:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XHw-0001kN-Nh; Sat, 07 Sep 2019 09:45:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XHv-0001kB-CZ
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:45:47 +0000
X-Inumbo-ID: 3f3a0390-d154-11e9-b299-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.85]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3f3a0390-d154-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:45:38 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jknaXvjrbjoFkVYFtl53QYMrOrpCmd832n5/d1HJ9dFeW9xkNcDwQpU122oGBUVEwORgx5nuJj2lKm/aRxF8tCGDVGFtZq39EMAvN36oSGUQggKV69NS0IyGueabf2aUej3rTfc6R3OkgvEkjdyzAbV4sf5p0P0S5yuFLAhgPod7rEEONHCgTO1rxamcEl6tvMUVk2xXRDjdWa3zTEYAURAAgh+GYNiJiDpMEvUSCzzPNyD/+LR9qwJtez0HxOEDowvdDlrLr/H2rCBgDScqDr/fzS8vO7nnUHDzIz5Epz7LRgXz3Qvo3SgSHOEmQwJ18q/lgRdx+J92sC64fzkjhg==
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=R9lGeIq4sCE5xayuBoTwctinxTxc80tap8FBy9mrdd0=;
 b=TRqhihuYchYrYnzjM9TajI8pcJx7f6h+LRgUGca5q3psd96nkwVVloskKGlGxKzpdJc+OcEw0CYO2dwLlXuwbR3g5LYEx1xM9UXAXB2EqoAVoKJmyPiQNwR3UzZoFnakmPZE4w5an4HnPAJSJI+ZwSS5V1EyhMpWkm4ZY3431Xl4NPtgO7julgsWTjHewLBZ/wkeMQgSarkUj43Wva8ELTi/wqM2Nxzwz7VLUL0MP3Pp5MgXre512X2K0KLRuezI07zP12UyPNOV8j4RiS3IXqNv36VebP6BKfl8xsEoYcq+/qg8071bAiTQq4C1gyM1vauPQRgjRLEglrOJZHGa9Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4940.eurprd01.prod.exchangelabs.com (20.177.210.157) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Sat, 7 Sep
 2019 09:45:34 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:45:34 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 3/5] plat/drivers: Allocate virtqueue for
 virtio 9P
Thread-Index: AQHVZWD7nrkVqrStkke1Yjp1N//tXQ==
Date: Sat, 7 Sep 2019 09:45:29 +0000
Message-ID: <20190907094518.12323-4-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0087.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::31) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 88269d92-4f09-4ab3-b782-08d733781e4e
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4940; 
x-ms-traffictypediagnostic: PR1PR01MB4940:
x-microsoft-antispam-prvs: <PR1PR01MB49407158E0B0DBB367D25752A6B50@PR1PR01MB4940.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:820;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(189003)(199004)(66476007)(54906003)(66556008)(64756008)(66446008)(6916009)(478600001)(66946007)(6512007)(14454004)(486006)(99286004)(2351001)(2906002)(50226002)(5640700003)(45776006)(5660300002)(6436002)(81166006)(81156014)(53936002)(8676002)(8936002)(305945005)(4326008)(7736002)(1076003)(71200400001)(102836004)(71190400001)(25786009)(2501003)(186003)(11346002)(46003)(2616005)(446003)(256004)(76176011)(316002)(6506007)(386003)(476003)(52116002)(6666004)(6486002)(786003)(6116002)(86362001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4940;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: UcxCk0q8YO8+ff5f0zn2idijv3keRWq0QDAF68LJfDflnff5vfQi7opsodOkWpmeBTfV6YL1sihjWkPpHioULL2CtdKw1z9x0eR9GHK3ClqnJEScNSxIU5zCZ2mc0MD+62bDz6Je2wH+5qArTA+TjDrcanPCVl1frH7ExAdny+UgZlC3SKP2iCSNkjzqKM5FnQ5mB2jJB1NawrwV5HRld3WM2DL2997WWYEj312A0L0mjV0BVteD7fZAVFwELWoqV6Nqvj4RbZGsC96rn2463fH9L3/ZW4qqMgfhGIE334gLBryT+3K4fOLxjF3f5OjRBqwISTxGNkdBW+7GrYdeEQuMKm1FR2/Bbr40tjNLRAjdZzXez2g0YS3W3qSI+fotRTkWCW3hnB5TBONgzbHseBRgAQbzeiDrBY7YIzdR1nY=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 88269d92-4f09-4ab3-b782-08d733781e4e
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:45:29.5930 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: O5svOFqO4pd39ik9AcErGKdEeWYt4FdJofDVPq58xB4LBUI7tHGviox1IhiC7hP7N6Xp5M9j+SUtr7QBO8CDhrMUcw9FKckVZKur8MFcFAi2q763b7rLkWIT2HBa+1z7
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4940
Subject: [Minios-devel] [UNIKRAFT PATCH v2 3/5] plat/drivers: Allocate
 virtqueue for virtio 9P
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyB2aXJ0cXVldWUgYWxsb2NhdGlvbiB3aXRoIGEgc3R1YmJlZCBpbnRlcnJ1cHQKaGFuZGxl
ciBmb3IgdmlydGlvIDlQIGRldmljZXMuCgpTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxj
cmlzdGJAZ21haWwuY29tPgotLS0KIHBsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMgfCA1
NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1NyBp
bnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvcGxhdC9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fOXAu
YyBiL3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMKaW5kZXggNzk4ZWJlOTAuLmFiM2Ex
YjE2IDEwMDY0NAotLS0gYS9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCisrKyBiL3Bs
YXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMKQEAgLTMyLDYgKzMyLDcgQEAKICAqIFRISVMg
SEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCiAgKi8K
IAorI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVkZSA8dWsvYWxsb2MuaD4KICNpbmNsdWRl
IDx1ay9lc3NlbnRpYWxzLmg+CiAjaW5jbHVkZSA8dmlydGlvL3ZpcnRpb19idXMuaD4KQEAgLTM5
LDYgKzQwLDcgQEAKICNpbmNsdWRlIDx1ay9wbGF0L3NwaW5sb2NrLmg+CiAKICNkZWZpbmUgRFJJ
VkVSX05BTUUJInZpcnRpby05cCIKKyNkZWZpbmUgTlVNX1NFR01FTlRTCTEyOCAvKiogVGhlIG51
bWJlciBvZiB2aXJ0cXVldWUgZGVzY3JpcHRvcnMuICovCiBzdGF0aWMgc3RydWN0IHVrX2FsbG9j
ICphOwogCiAvKiBMaXN0IG9mIGluaXRpYWxpemVkIHZpcnRpbyA5cCBkZXZpY2VzLiAqLwpAQCAt
NTIsOCArNTQsNTYgQEAgc3RydWN0IHZpcnRpb185cF9kZXZpY2UgewogCWNoYXIgKnRhZzsKIAkv
KiBFbnRyeSB3aXRoaW4gdGhlIHZpcnRpbyBkZXZpY2VzJyBsaXN0LiAqLwogCXN0cnVjdCB1a19s
aXN0X2hlYWQgX2xpc3Q7CisJLyogVmlydHF1ZXVlIHJlZmVyZW5jZS4gKi8KKwlzdHJ1Y3Qgdmly
dHF1ZXVlICp2cTsKKwkvKiBIdyBxdWV1ZSBpZGVudGlmaWVyLiAqLworCXVpbnQxNl90IGh3dnFf
aWQ7CiB9OwogCitzdGF0aWMgaW50IHZpcnRpb185cF9yZWN2KHN0cnVjdCB2aXJ0cXVldWUgKnZx
IF9fdW51c2VkLCB2b2lkICpwcml2IF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCitzdGF0
aWMgaW50IHZpcnRpb185cF92cV9hbGxvYyhzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZCkKK3sK
KwlpbnQgdnFfYXZhaWwgPSAwOworCWludCByYyA9IDA7CisJX191MTYgcWRlc2Nfc2l6ZTsKKwor
CXZxX2F2YWlsID0gdmlydGlvX2ZpbmRfdnFzKGQtPnZkZXYsIDEsICZxZGVzY19zaXplKTsKKwlp
ZiAodW5saWtlbHkodnFfYXZhaWwgIT0gMSkpIHsKKwkJdWtfcHJfZXJyKERSSVZFUl9OQU1FIjog
RXhwZWN0ZWQ6ICVkIHF1ZXVlcywgZm91bmQgJWRcbiIsCisJCQkgIDEsIHZxX2F2YWlsKTsKKwkJ
cmMgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJZC0+aHd2cV9pZCA9IDA7CisJaWYg
KHVubGlrZWx5KHFkZXNjX3NpemUgIT0gTlVNX1NFR01FTlRTKSkgeworCQl1a19wcl9lcnIoRFJJ
VkVSX05BTUUiOiBFeHBlY3RlZCAlZCBkZXNjcmlwdG9ycywgZm91bmQgJWQgKHZpcnRxdWV1ZSAl
IgorCQkJICBQUkl1MTYiKVxuIiwgTlVNX1NFR01FTlRTLCBxZGVzY19zaXplLCBkLT5od3ZxX2lk
KTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIGV4aXQ7CisJfQorCisJZC0+dnEgPSB2aXJ0aW9f
dnF1ZXVlX3NldHVwKGQtPnZkZXYsCisJCQkJICAgIGQtPmh3dnFfaWQsCisJCQkJICAgIHFkZXNj
X3NpemUsCisJCQkJICAgIHZpcnRpb185cF9yZWN2LAorCQkJCSAgICBhKTsKKwlpZiAodW5saWtl
bHkoUFRSSVNFUlIoZC0+dnEpKSkgeworCQl1a19wcl9lcnIoRFJJVkVSX05BTUUiOiBGYWlsZWQg
dG8gc2V0IHVwIHZpcnRxdWV1ZSAlIlBSSXUxNiJcbiIsCisJCQkgIGQtPmh3dnFfaWQpOworCQly
YyA9IFBUUjJFUlIoZC0+dnEpOworCX0KKworCWQtPnZxLT5wcml2ID0gZDsKKworZXhpdDoKKwly
ZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgdmlydGlvXzlwX2ZlYXR1cmVfbmVnb3RpYXRlKHN0
cnVjdCB2aXJ0aW9fOXBfZGV2aWNlICpkKQogewogCV9fdTY0IGhvc3RfZmVhdHVyZXM7CkBAIC0x
MDcsNiArMTU3LDEyIEBAIHN0YXRpYyBpbnQgdmlydGlvXzlwX2NvbmZpZ3VyZShzdHJ1Y3Qgdmly
dGlvXzlwX2RldmljZSAqZCkKIAkJZ290byBvdXRfc3RhdHVzX2ZhaWw7CiAJfQogCisJcmMgPSB2
aXJ0aW9fOXBfdnFfYWxsb2MoZCk7CisJaWYgKHJjKSB7CisJCXVrX3ByX2VycihEUklWRVJfTkFN
RSI6IENvdWxkIG5vdCBhbGxvY2F0ZSB2aXJ0cXVldWVcbiIpOworCQlnb3RvIG91dF9zdGF0dXNf
ZmFpbDsKKwl9CisKIAl1a19wcl9pbmZvKERSSVZFUl9OQU1FIjogQ29uZmlndXJlZDogZmVhdHVy
ZXM9MHglbHggdGFnPSVzXG4iLAogCQkJZC0+dmRldi0+ZmVhdHVyZXMsIGQtPnRhZyk7CiBvdXQ6
CkBAIC0xMTksNiArMTc1LDcgQEAgb3V0X3N0YXR1c19mYWlsOgogCiBzdGF0aWMgaW50IHZpcnRp
b185cF9zdGFydChzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZCkKIHsKKwl2aXJ0cXVldWVfaW50
cl9lbmFibGUoZC0+dnEpOwogCXZpcnRpb19kZXZfZHJ2X3VwKGQtPnZkZXYpOwogCXVrX3ByX2lu
Zm8oRFJJVkVSX05BTUUiOiAlcyBzdGFydGVkXG4iLCBkLT50YWcpOwogCi0tIAoyLjIwLjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:45:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:45:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XI1-0001lD-Q6; Sat, 07 Sep 2019 09:45:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XI0-0001l3-CJ
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:45:52 +0000
X-Inumbo-ID: 40083170-d154-11e9-b299-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.85]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 40083170-d154-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:45:39 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GPedtPdisQ48fS8GqSVyfE3XevqvJhHmRvL1e9cpTcmApgYHNwNNeMSeoKd0jULMMYQJLWYxoO+T5dMrx8VjwkbF1l5cKh4QoJwvs+3BcyLOX7won463ySF3swcMncr1m6ImoM/iDMYa+EqJXzOrMqLj20q8Dp8DAlSOikhn14jiH125rY96NoDnsB4HbrG1vqizfjgZBbkg2GqI1sDf156RvxHtXJKGC33kV2KpzJokuS3iLeclukH7vWkLovzsTzxfZpvWljKr5YsYcPg1F0tGaEvNAeIDh8MGHjCbHbp4066ii7lLMVh3xjTOZ2jcq9LL602OCb+X47NTnAdelg==
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=GsvvvocVns4HH11YiERAV2r0rfUgdDKnXCDUugDjxQ8=;
 b=eCJ+OLle+biSx5NjYWU/+bqfpxDKF5U3Ohuh37+G9YC5y2ic2f57wvLbpx3yMZLf48aqfSaHKbi6zrLaNEkLhCp5xlXhDH/YmTN0lGt0ZpHnGR1e88VE14X10l1yCGY3j9J8l6T1YarxSANMrzX2iBlXnEWcYiKJn3sAy+VGtmVm3NU9BMLMR4LfazB/E1ypWZwu0LUrCYbDddtk5uNJUB0dhbne/7x9/tgNmB8T4q5DCd43e/roOKt3QXR882yGQvNCW6laIjpL1acm/rYYIFCe/d4ihUXjeLozlexTyw75Nztx1pgb3eAQ046FOtGSnFl7rxgtUjZftLX6QWZs7A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4940.eurprd01.prod.exchangelabs.com (20.177.210.157) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Sat, 7 Sep
 2019 09:45:34 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:45:34 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 4/5] plat/drivers: Add 9P transport for
 virtio 9P
Thread-Index: AQHVZWD81wyG3ttaokuvr4iTFFpCwg==
Date: Sat, 7 Sep 2019 09:45:30 +0000
Message-ID: <20190907094518.12323-5-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0087.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::31) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 5b724eb0-9434-45fa-9777-08d733781ea2
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4940; 
x-ms-traffictypediagnostic: PR1PR01MB4940:
x-microsoft-antispam-prvs: <PR1PR01MB4940FC8C59533213E5DDDC85A6B50@PR1PR01MB4940.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:8882;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(189003)(199004)(66476007)(54906003)(66556008)(64756008)(66446008)(6916009)(478600001)(66946007)(6512007)(14454004)(486006)(99286004)(2351001)(2906002)(50226002)(5640700003)(45776006)(5660300002)(6436002)(81166006)(81156014)(53936002)(8676002)(8936002)(305945005)(4326008)(7736002)(1076003)(71200400001)(102836004)(71190400001)(25786009)(2501003)(186003)(11346002)(46003)(2616005)(446003)(256004)(14444005)(76176011)(316002)(6506007)(386003)(476003)(52116002)(6666004)(6486002)(786003)(6116002)(86362001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4940;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: E7qZplk1z5Ko6sCCE+vz87R1FBY/FWUOz48Jt+nMXTmxv8trhE9CecDXBm4S9lwp1JoCkBLCf8exZ+9ji5TdseRPFCgB6d4eBhmWXm+ZnG5lA0xJnIlMSXC6RktuUH/gOKECQ+Qu219vYHuZkkOWq4Rj6xkpngBqIGkw9Q3+j3zoo5yhG1DMki5I66QAiQsQ08AJk2SozfAuiJyuj5to+VbXPaspgx0LICuW3b18BmXs2iYff4a4AGQKw58PRubQngubdd+X7S7qzdTqXDWpZ/rmzx7MB5r3ygjDN3xRwbe+Cd9oZiK3HrpKV0ZsADGx5Xcritop3kIBqxBnjIBPkvyo73VoBQpd/T8mAJpLsnJ+GalSTNcdrvWZNLsOcBGUWZ8xZLws35dhPWmTDujKwm3naooGNtzOEoSiy8+3SAg=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 5b724eb0-9434-45fa-9777-08d733781ea2
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:45:30.0757 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ytIT62ym9KYo/D1+vL/4eeH7a/fPUl6iS51rky7tg4bvIwdKZCputfTQ/Ms4hoyqiJLYdqhr7V20QWeMK5kvkb9KRfH4SmETntsefm/ui/sXqx2Gf4289xA0OhBMa+2g
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4940
Subject: [Minios-devel] [UNIKRAFT PATCH v2 4/5] plat/drivers: Add 9P
 transport for virtio 9P
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgOVAgdHJhbnNwb3J0IGRyaXZlciBza2VsZXRvbiBmb3IgdmlydGlvIDlQIGRldmljZXMsCmJ5
IHByb3ZpZGluZyB0aGUgcmVxdWlyZWQgY29ubmVjdCwgZGlzY29ubmVjdCBhbmQgcmVxdWVzdCBj
YWxsYmFja3MuIFRoZQpyZXF1ZXN0IGNhbGxiYWNrIGlzIGxlZnQgYXMgYSBzdHViIHRvIGJlIGlt
cGxlbWVudGVkIGluIHRoZSBmb2xsb3dpbmcKcGF0Y2hlcy4KClNpZ25lZC1vZmYtYnk6IENyaXN0
aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Ci0tLQogcGxhdC9kcml2ZXJzL3ZpcnRpby92aXJ0
aW9fOXAuYyB8IDg2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNo
YW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcGxh
dC9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fOXAuYyBiL3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlv
XzlwLmMKaW5kZXggYWIzYTFiMTYuLjgwOTRlYzcwIDEwMDY0NAotLS0gYS9wbGF0L2RyaXZlcnMv
dmlydGlvL3ZpcnRpb185cC5jCisrKyBiL3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2luY2x1ZGUgPHVrL2Fs
bG9jLmg+CiAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgorI2luY2x1ZGUgPHVrLzlwZGV2X3Ry
YW5zLmg+CiAjaW5jbHVkZSA8dmlydGlvL3ZpcnRpb19idXMuaD4KICNpbmNsdWRlIDx2aXJ0aW8v
dmlydGlvXzlwLmg+CiAjaW5jbHVkZSA8dWsvcGxhdC9zcGlubG9jay5oPgpAQCAtNTgsNiArNTks
ODMgQEAgc3RydWN0IHZpcnRpb185cF9kZXZpY2UgewogCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwog
CS8qIEh3IHF1ZXVlIGlkZW50aWZpZXIuICovCiAJdWludDE2X3QgaHd2cV9pZDsKKwkvKiBsaWJ1
azlwIGFzc29jaWF0ZWQgZGV2aWNlIChOVUxMIGlmIHRoZSBkZXZpY2UgaXMgbm90IGluIHVzZSku
ICovCisJc3RydWN0IHVrXzlwZGV2ICpwOWRldjsKK307CisKK3N0YXRpYyBpbnQgdmlydGlvXzlw
X2Nvbm5lY3Qoc3RydWN0IHVrXzlwZGV2ICpwOWRldiwKKwkJCSAgICAgY29uc3QgY2hhciAqZGV2
aWNlX2lkZW50aWZpZXIsCisJCQkgICAgIGNvbnN0IGNoYXIgKm1vdW50X2FyZ3MgX191bnVzZWQp
Cit7CisJc3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmRldiA9IE5VTEw7CisJaW50IHJjID0gMDsK
KwlpbnQgZm91bmQgPSAwOworCisJdWthcmNoX3NwaW5fbG9jaygmdmlydGlvXzlwX2RldmljZV9s
aXN0X2xvY2spOworCXVrX2xpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmdmlydGlvXzlwX2Rldmlj
ZV9saXN0LCBfbGlzdCkgeworCQlpZiAoIXN0cmNtcChkZXYtPnRhZywgZGV2aWNlX2lkZW50aWZp
ZXIpKSB7CisJCQlpZiAoZGV2LT5wOWRldiAhPSBOVUxMKSB7CisJCQkJcmMgPSAtRUJVU1k7CisJ
CQkJZ290byBvdXQ7CisJCQl9CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwor
CWlmICghZm91bmQpIHsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgor
CSAqIFRoZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBpcyBnaXZlbiBieSB0aGUgbnVtYmVyIG9mIHNl
Z21lbnRzLgorCSAqCisJICogRm9yIHJlYWQgcmVxdWVzdHMsIHRoZSByZXBseSB3aWxsIGJlIGFi
bGUgdG8gbWFrZSB1c2Ugb2YgdGhlIGxhcmdlCisJICogbXNpemUsIGFuZCB0aGUgcmVxdWVzdCB3
aWxsIG5vdCBleGNlZWQgb25lIHNlZ21lbnQuCisJICogU2ltaWxhcmx5IGZvciB3cml0ZSByZXF1
ZXN0cywgYnV0IGluIHJldmVyc2UuIE90aGVyIHJlcXVlc3RzIHNob3VsZAorCSAqIG5vdCBleGNl
ZWQgb25lIHBhZ2UgZm9yIGJvdGggcmVjdiBhbmQgeG1pdCBmY2FsbHMuCisJICovCisJcDlkZXYt
Pm1heF9tc2l6ZSA9IChOVU1fU0VHTUVOVFMgLSAxKSAqIF9fUEFHRV9TSVpFOworCisJZGV2LT5w
OWRldiA9IHA5ZGV2OworCXA5ZGV2LT5wcml2ID0gZGV2OworCitvdXQ6CisJdWthcmNoX3NwaW5f
dW5sb2NrKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jayk7CisJcmV0dXJuIHJjOworfQorCitz
dGF0aWMgaW50IHZpcnRpb185cF9kaXNjb25uZWN0KHN0cnVjdCB1a185cGRldiAqcDlkZXYpCit7
CisJc3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmRldjsKKworCVVLX0FTU0VSVChwOWRldik7CisJ
ZGV2ID0gcDlkZXYtPnByaXY7CisKKwl1a2FyY2hfc3Bpbl9sb2NrKCZ2aXJ0aW9fOXBfZGV2aWNl
X2xpc3RfbG9jayk7CisJZGV2LT5wOWRldiA9IE5VTEw7CisJdWthcmNoX3NwaW5fdW5sb2NrKCZ2
aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlu
dCB2aXJ0aW9fOXBfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2VkLAorCQkJ
ICAgICBzdHJ1Y3QgdWtfOXByZXEgKnJlcSBfX3VudXNlZCkKK3sKKwlyZXR1cm4gLUVPUE5PVFNV
UFA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNfb3BzIHY5cF90cmFu
c19vcHMgPSB7CisJLmNvbm5lY3QgICAgICAgID0gdmlydGlvXzlwX2Nvbm5lY3QsCisJLmRpc2Nv
bm5lY3QgICAgID0gdmlydGlvXzlwX2Rpc2Nvbm5lY3QsCisJLnJlcXVlc3QgICAgICAgID0gdmly
dGlvXzlwX3JlcXVlc3QKK307CisKK3N0YXRpYyBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMgdjlwX3Ry
YW5zID0geworCS5uYW1lICAgICAgICAgICA9ICJ2aXJ0aW8iLAorCS5vcHMgICAgICAgICAgICA9
ICZ2OXBfdHJhbnNfb3BzLAorCS5hICAgICAgICAgICAgICA9IE5VTEwgLyogU2V0IGJ5IHRoZSBk
cml2ZXIgaW5pdGlhbGl6YXRpb24uICovCiB9OwogCiBzdGF0aWMgaW50IHZpcnRpb185cF9yZWN2
KHN0cnVjdCB2aXJ0cXVldWUgKnZxIF9fdW51c2VkLCB2b2lkICpwcml2IF9fdW51c2VkKQpAQCAt
MTg1LDcgKzI2Myw2IEBAIHN0YXRpYyBpbnQgdmlydGlvXzlwX3N0YXJ0KHN0cnVjdCB2aXJ0aW9f
OXBfZGV2aWNlICpkKQogc3RhdGljIGludCB2aXJ0aW9fOXBfYWRkX2RldihzdHJ1Y3QgdmlydGlv
X2RldiAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZDsKLQl1bnNpZ25lZCBs
b25nIGZsYWdzOwogCWludCByYyA9IDA7CiAKIAlVS19BU1NFUlQodmRldiAhPSBOVUxMKTsKQEAg
LTIwNCw5ICsyODEsOSBAQCBzdGF0aWMgaW50IHZpcnRpb185cF9hZGRfZGV2KHN0cnVjdCB2aXJ0
aW9fZGV2ICp2ZGV2KQogCWlmIChyYykKIAkJZ290byBvdXRfZnJlZTsKIAotCXVrcGxhdF9zcGlu
X2xvY2tfaXJxc2F2ZSgmdmlydGlvXzlwX2RldmljZV9saXN0X2xvY2ssIGZsYWdzKTsKKwl1a2Fy
Y2hfc3Bpbl9sb2NrKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jayk7CiAJdWtfbGlzdF9hZGQo
JmQtPl9saXN0LCAmdmlydGlvXzlwX2RldmljZV9saXN0KTsKLQl1a3BsYXRfc3Bpbl91bmxvY2tf
aXJxcmVzdG9yZSgmdmlydGlvXzlwX2RldmljZV9saXN0X2xvY2ssIGZsYWdzKTsKKwl1a2FyY2hf
c3Bpbl91bmxvY2soJnZpcnRpb185cF9kZXZpY2VfbGlzdF9sb2NrKTsKIG91dDoKIAlyZXR1cm4g
cmM7CiBvdXRfZnJlZToKQEAgLTIyNCw2ICszMDEsOSBAQCBzdGF0aWMgaW50IHZpcnRpb185cF9k
cnZfaW5pdChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxvY2F0b3IpCiAJfQogCiAJYSA9IGRydl9h
bGxvY2F0b3I7CisJdjlwX3RyYW5zLmEgPSBhOworCisJcmMgPSB1a185cGRldl90cmFuc19yZWdp
c3RlcigmdjlwX3RyYW5zKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9Ci0tIAoyLjIwLjEKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:45:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:45:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XI6-0001nX-Rw; Sat, 07 Sep 2019 09:45:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XI5-0001mU-CY
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:45:57 +0000
X-Inumbo-ID: 40aeeb78-d154-11e9-b299-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.85]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 40aeeb78-d154-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:45:40 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Wvwl1Z8LubKBE3TyspXf+kTufY9ZGperkPGRV9BJ7S3vBTNhagqmEaya4Z97gn8N6y6Y7KMJ+Km3OnqNe4nkZauNDVAUseYu/Y46JtJj1kZNJHPLGKDvsItxAd1Cytknp2uZNkqn+gwk4KWr/15LBcMBylULdI+kFHip5OrYkrN6mSgdVJoCqRQovv8FyFm+Cd9QI3Q5cDokPxT2JjHfVrHtdsrdGxkyrMc0U9XfXqT5kDN4eY2N5ogWk4j1THsxCkD/bUli6AB4Y4QsrKZ8dAvgQ2mOifYppfyutTcQvYuR0zM9oIsPjHSo6g6n6UQOfH569W9GHdYrpt3Dyd1QOg==
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=IiV3c+9iWggxIX1R8TI5Bf8LjCMHMgmbH/VkwxPpDho=;
 b=ZQt4RaAGymEK5sZDwuGp/wDzqtXKKn5L6CQP4IdxK98lGKCdzOR7gZaG3msBdKQq5Ct45yFrZNoH7GZDv/zVF9Tmy+edTgUfmovtLtCP3eEElNtYHm4hfvup1wyHdVFPr/7IbHIlE137wNYh6k9M/N5Pa1hrF10Lc94Q4xwFMWRt5ukeKjMnhvHIxHjCwJV+CKO9wT08XEcMAoOaRik5PzGNbDpBbMhm8Au9vOFz87P7qvoOCJXXgXBxgfD27ltRttHl8zILYfpGdDA67efD4fphQc8zQLZf83mARLuH8amwIaKVEVm9D20OHkypF0QeZgUXbBRu6wXsyTCYVpMmsg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4940.eurprd01.prod.exchangelabs.com (20.177.210.157) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Sat, 7 Sep
 2019 09:45:35 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:45:34 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 5/5] plat/drivers: Implement virtio 9P
 request and recv
Thread-Index: AQHVZWD8w7Mezqtol0G1g8tFVsTgng==
Date: Sat, 7 Sep 2019 09:45:30 +0000
Message-ID: <20190907094518.12323-6-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0801CA0087.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::31) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 59d88cc9-376b-42a3-6e7c-08d733781efa
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4940; 
x-ms-traffictypediagnostic: PR1PR01MB4940:
x-microsoft-antispam-prvs: <PR1PR01MB49406D7C5CB91A5FC6E009B0A6B50@PR1PR01MB4940.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6108;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(189003)(199004)(66476007)(54906003)(66556008)(64756008)(66446008)(6916009)(478600001)(66946007)(6512007)(14454004)(486006)(99286004)(2351001)(2906002)(50226002)(5640700003)(45776006)(5660300002)(6436002)(81166006)(81156014)(53936002)(8676002)(8936002)(305945005)(4326008)(7736002)(1076003)(71200400001)(102836004)(71190400001)(25786009)(2501003)(186003)(11346002)(46003)(2616005)(446003)(256004)(14444005)(76176011)(316002)(6506007)(386003)(476003)(52116002)(6666004)(6486002)(786003)(6116002)(86362001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4940;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: UQ8NnzWs7jufRIYQYyihOpIIyj+ZJ3nK+BZ4yOGZF62Or8J3tq2FCEfn5h65mb7TGskESX2vsG1OvzkVIbvx32B5YdrjSt0dR97dkbVGcJp4CfcQp10/oKi6jaPcioXUsM5QEx/waYNMorXp+aUf/Cv7sgFo3s5QGRGU5QyC3hCOZE4K7VGvFgG20c7MrEDNJl6r48FetP+yiLewwslMPJ3VewVUF6S/ygIm++72c4++bcEAPoUWfurK1MdjaivfynJG8N+VcomlWYsqTvqL1TO7KMPiF19mlJoBF5sMTvxayeFF4Ubkvj6FPqOZh6goXDoUUopg642l20grZe32CbbZf1U71LeRxeOZY5XZT+Ua3qXUaWdSu2JkT6gQOOVlaLY/tvguA8aBUn89FRI0RAVHy8Mgqj4IBPGJrXDekd0=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 59d88cc9-376b-42a3-6e7c-08d733781efa
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:45:30.6254 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: G/G2a5sn5c2K2oJeTppNxriwKvAIW2DbG8LU554+jRQYb5urS72SfBgnodSdmz/36TPcIkPRB7nJ9P6L0Gq4Xl+WicIL85T4Gjxw4Tf798uVn03kZnFbGfCSGNY2vN3U
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4940
Subject: [Minios-devel] [UNIKRAFT PATCH v2 5/5] plat/drivers: Implement
 virtio 9P request and recv
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyB0aGUgdmlydGlvIHJlcXVlc3QgYW5kIHJlY2VpdmUgY2FsbGJhY2tzLgoKU2lnbmVkLW9m
Zi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KLS0tCiBwbGF0L2RyaXZlcnMv
dmlydGlvL3ZpcnRpb185cC5jIHwgMTYxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst
CiAxIGZpbGUgY2hhbmdlZCwgMTU2IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZm
IC0tZ2l0IGEvcGxhdC9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fOXAuYyBiL3BsYXQvZHJpdmVycy92
aXJ0aW8vdmlydGlvXzlwLmMKaW5kZXggODA5NGVjNzAuLmZlMGQ2OWFiIDEwMDY0NAotLS0gYS9w
bGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCisrKyBiL3BsYXQvZHJpdmVycy92aXJ0aW8v
dmlydGlvXzlwLmMKQEAgLTM1LDYgKzM1LDkgQEAKICNpbmNsdWRlIDxpbnR0eXBlcy5oPgogI2lu
Y2x1ZGUgPHVrL2FsbG9jLmg+CiAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgorI2luY2x1ZGUg
PHVrL3NnbGlzdC5oPgorI2luY2x1ZGUgPHVrLzlwZGV2Lmg+CisjaW5jbHVkZSA8dWsvOXByZXEu
aD4KICNpbmNsdWRlIDx1ay85cGRldl90cmFucy5oPgogI2luY2x1ZGUgPHZpcnRpby92aXJ0aW9f
YnVzLmg+CiAjaW5jbHVkZSA8dmlydGlvL3ZpcnRpb185cC5oPgpAQCAtNjEsNiArNjQsMTEgQEAg
c3RydWN0IHZpcnRpb185cF9kZXZpY2UgewogCXVpbnQxNl90IGh3dnFfaWQ7CiAJLyogbGlidWs5
cCBhc3NvY2lhdGVkIGRldmljZSAoTlVMTCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBpbiB1c2UpLiAq
LwogCXN0cnVjdCB1a185cGRldiAqcDlkZXY7CisJLyogU2NhdHRlci1nYXRoZXIgbGlzdC4gKi8K
KwlzdHJ1Y3QgdWtfc2dsaXN0IHNnOworCXN0cnVjdCB1a19zZ2xpc3Rfc2VnIHNnc2Vnc1tOVU1f
U0VHTUVOVFNdOworCS8qIFNwaW5sb2NrIHByb3RlY3RpbmcgdGhlIHNnIGxpc3QgYW5kIHRoZSB2
cS4gKi8KKwlzcGlubG9ja190IHNwaW5sb2NrOwogfTsKIAogc3RhdGljIGludCB2aXJ0aW9fOXBf
Y29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2LApAQCAtMTIwLDEwICsxMjgsOTYgQEAgc3Rh
dGljIGludCB2aXJ0aW9fOXBfZGlzY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2KQogCXJl
dHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpcnRpb185cF9yZXF1ZXN0KHN0cnVjdCB1a185cGRl
diAqcDlkZXYgX191bnVzZWQsCi0JCQkgICAgIHN0cnVjdCB1a185cHJlcSAqcmVxIF9fdW51c2Vk
KQorc3RhdGljIGludCB2aXJ0aW9fOXBfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2LAor
CQkJICAgICBzdHJ1Y3QgdWtfOXByZXEgKnJlcSkKIHsKLQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJ
c3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmRldjsKKwlpbnQgcmMsIGhvc3Rfbm90aWZpZWQgPSAw
OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc2l6ZV90IHJlYWRfc2Vncywgd3JpdGVfc2VnczsK
Kwlib29sIGZhaWxlZCA9IGZhbHNlOworCisJVUtfQVNTRVJUKHA5ZGV2KTsKKwlVS19BU1NFUlQo
cmVxKTsKKwlVS19BU1NFUlQoVUtfUkVBRF9PTkNFKHJlcS0+c3RhdGUpID09IFVLXzlQUkVRX1JF
QURZKTsKKworCS8qCisJICogR2V0IHRoZSByZXF1ZXN0IHN1Y2ggdGhhdCBpdCB3b24ndCBnZXQg
ZnJlZWQgd2hpbGUgaXQncworCSAqIHVzZWQgYXMgYSBjb29raWUgZm9yIHRoZSB2aXJ0cXVldWUu
CisJICovCisJdWtfOXByZXFfZ2V0KHJlcSk7CisJZGV2ID0gcDlkZXYtPnByaXY7CisJdWtwbGF0
X3NwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CisJdWtfc2dsaXN0X3Jl
c2V0KCZkZXYtPnNnKTsKKworCXJjID0gdWtfc2dsaXN0X2FwcGVuZCgmZGV2LT5zZywgcmVxLT54
bWl0LmJ1ZiwgcmVxLT54bWl0LnNpemUpOworCWlmIChyYyA8IDApIHsKKwkJZmFpbGVkID0gdHJ1
ZTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWlmIChyZXEtPnhtaXQuemNfYnVmKSB7CisJ
CXJjID0gdWtfc2dsaXN0X2FwcGVuZCgmZGV2LT5zZywgcmVxLT54bWl0LnpjX2J1ZiwKKwkJCQly
ZXEtPnhtaXQuemNfc2l6ZSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWZhaWxlZCA9IHRydWU7CisJ
CQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwl9CisKKwlyZWFkX3NlZ3MgPSBkZXYtPnNnLnNnX25z
ZWc7CisKKwlyYyA9IHVrX3NnbGlzdF9hcHBlbmQoJmRldi0+c2csIHJlcS0+cmVjdi5idWYsIHJl
cS0+cmVjdi5zaXplKTsKKwlpZiAocmMgPCAwKSB7CisJCWZhaWxlZCA9IHRydWU7CisJCWdvdG8g
b3V0X3VubG9jazsKKwl9CisKKwlpZiAocmVxLT5yZWN2LnpjX2J1ZikgeworCQl1aW50MzJfdCBy
ZWN2X3NpemUgPSByZXEtPnJlY3Yuc2l6ZSArIHJlcS0+cmVjdi56Y19zaXplOworCisJCXJjID0g
dWtfc2dsaXN0X2FwcGVuZCgmZGV2LT5zZywgcmVxLT5yZWN2LnpjX2J1ZiwKKwkJCQlyZXEtPnJl
Y3YuemNfc2l6ZSk7CisJCWlmIChyYyA8IDApIHsKKwkJCWZhaWxlZCA9IHRydWU7CisJCQlnb3Rv
IG91dF91bmxvY2s7CisJCX0KKworCQkvKiBNYWtlIGV1cmUgdGhlcmUgaXMgc3VmZmljaWVudCBz
cGFjZSBmb3IgUmVycm9yIHJlcGxpZXMuICovCisJCWlmIChyZWN2X3NpemUgPCBVS185UF9SRVJS
T1JfTUFYU0laRSkgeworCQkJdWludDMyX3QgbGVmdG92ZXIgPSBVS185UF9SRVJST1JfTUFYU0la
RSAtIHJlY3Zfc2l6ZTsKKworCQkJcmMgPSB1a19zZ2xpc3RfYXBwZW5kKCZkZXYtPnNnLAorCQkJ
CQlyZXEtPnJlY3YuYnVmICsgcmVjdl9zaXplLCBsZWZ0b3Zlcik7CisJCQlpZiAocmMgPCAwKSB7
CisJCQkJZmFpbGVkID0gdHJ1ZTsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCX0KKwl9
CisKKwl3cml0ZV9zZWdzID0gZGV2LT5zZy5zZ19uc2VnIC0gcmVhZF9zZWdzOworCisJcmMgPSB2
aXJ0cXVldWVfYnVmZmVyX2VucXVldWUoZGV2LT52cSwgcmVxLCAmZGV2LT5zZywKKwkJCQkgICAg
ICByZWFkX3NlZ3MsIHdyaXRlX3NlZ3MpOworCWlmIChsaWtlbHkocmMgPj0gMCkpIHsKKwkJVUtf
V1JJVEVfT05DRShyZXEtPnN0YXRlLCBVS185UFJFUV9TRU5UKTsKKwkJdmlydHF1ZXVlX2hvc3Rf
bm90aWZ5KGRldi0+dnEpOworCQlob3N0X25vdGlmaWVkID0gMTsKKwkJcmMgPSAwOworCX0KKwor
b3V0X3VubG9jazoKKwlpZiAoZmFpbGVkKQorCQl1a19wcl9lcnIoRFJJVkVSX05BTUUiOiBGYWls
ZWQgdG8gYXBwZW5kIHRvIHRoZSBzZyBsaXN0LlxuIik7CisJdWtwbGF0X3NwaW5fdW5sb2NrX2ly
cXJlc3RvcmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKKwkvKgorCSAqIFJlbGVhc2UgdGhlIHJl
ZmVyZW5jZSB0byB0aGUgOVAgcmVxdWVzdCBpZiBpdCB3YXMgbm90IHN1Y2Nlc3NmdWxseQorCSAq
IHNlbnQuCisJICovCisJaWYgKCFob3N0X25vdGlmaWVkKQorCQl1a185cHJlcV9wdXQocmVxKTsK
KwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNfb3Bz
IHY5cF90cmFuc19vcHMgPSB7CkBAIC0xMzgsOSArMjMyLDYzIEBAIHN0YXRpYyBzdHJ1Y3QgdWtf
OXBkZXZfdHJhbnMgdjlwX3RyYW5zID0gewogCS5hICAgICAgICAgICAgICA9IE5VTEwgLyogU2V0
IGJ5IHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24uICovCiB9OwogCi1zdGF0aWMgaW50IHZpcnRp
b185cF9yZWN2KHN0cnVjdCB2aXJ0cXVldWUgKnZxIF9fdW51c2VkLCB2b2lkICpwcml2IF9fdW51
c2VkKQorc3RhdGljIGludCB2aXJ0aW9fOXBfcmVjdihzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdm9p
ZCAqcHJpdikKIHsKLQlyZXR1cm4gMDsKKwlzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZGV2Owor
CXN0cnVjdCB1a185cHJlcSAqcmVxID0gTlVMTDsKKwl1aW50MzJfdCBsZW47CisJaW50IHJjID0g
MDsKKwlpbnQgaGFuZGxlZCA9IDA7CisKKwlVS19BU1NFUlQodnEpOworCVVLX0FTU0VSVChwcml2
KTsKKworCWRldiA9IHByaXY7CisJVUtfQVNTRVJUKHZxID09IGRldi0+dnEpOworCisJd2hpbGUg
KDEpIHsKKwkJLyoKKwkJICogUHJvdGVjdCBhZ2FpbnN0IGRhdGEgcmFjZXMgd2l0aCB2aXJ0aW9f
OXBfcmVxdWVzdCgpIGNhbGxzCisJCSAqIHdoaWNoIGFyZSB0cnlpbmcgdG8gZW5xdWV1ZSB0byB0
aGUgc2FtZSB2cS4KKwkJICovCisJCXVrYXJjaF9zcGluX2xvY2soJmRldi0+c3BpbmxvY2spOwor
CQlyYyA9IHZpcnRxdWV1ZV9idWZmZXJfZGVxdWV1ZShkZXYtPnZxLCAodm9pZCAqKikmcmVxLCAm
bGVuKTsKKwkJdWthcmNoX3NwaW5fdW5sb2NrKCZkZXYtPnNwaW5sb2NrKTsKKwkJaWYgKHJjIDwg
MCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIE5vdGlmeSB0aGUgOVAgQVBJIHRoYXQgdGhpcyBy
ZXF1ZXN0IGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQorCQkgKiByZWNlaXZlZCwgcmVsZWFzZSB0aGUg
cmVmZXJlbmNlIHRvIHRoZSByZXF1ZXN0LgorCQkgKi8KKwkJdWtfOXByZXFfcmVjZWl2ZV9jYihy
ZXEsIGxlbik7CisKKwkJLyoKKwkJICogQ2hlY2sgZm9yIFJlcnJvciBtZXNzYWdlcywgZml4dXAg
dGhlIGVycm9yIG1lc3NhZ2UgaWYKKwkJICogbmVlZGVkLgorCQkgKi8KKwkJaWYgKHJlcS0+cmVj
di50eXBlID09IFVLXzlQX1JFUlJPUikgeworCQkJbWVtY3B5KHJlcS0+cmVjdi5idWYgKyByZXEt
PnJlY3YuemNfb2Zmc2V0LAorCQkJICAgICAgIHJlcS0+cmVjdi56Y19idWYsCisJCQkgICAgICAg
TUlOKHJlcS0+cmVjdi56Y19zaXplLCBsZW4gLSBVS185UF9IRUFERVJfU0laRSkpOworCQl9CisK
KwkJdWtfOXByZXFfcHV0KHJlcSk7CisJCWhhbmRsZWQgPSAxOworCisJCS8qIEJyZWFrIGlmIHRo
ZXJlIGFyZSBubyBtb3JlIGJ1ZmZlcnMgb24gdGhlIHZpcnRxdWV1ZS4gKi8KKwkJaWYgKHJjID09
IDApCisJCQlicmVhazsKKwl9CisKKwkvKgorCSAqIEFzIHRoZSB2aXJ0cXVldWUgbWlnaHQgaGF2
ZSBlbXB0eSBzbG90cyBub3csIG5vdGlmeSBhbnkgdGhyZWFkcworCSAqIGJsb2NrZWQgb24gRU5P
U1BDIGVycm9ycy4KKwkgKi8KKwlpZiAoaGFuZGxlZCkKKwkJdWtfOXBkZXZfeG1pdF9ub3RpZnko
ZGV2LT5wOWRldik7CisKKwlyZXR1cm4gaGFuZGxlZDsKIH0KIAogc3RhdGljIGludCB2aXJ0aW9f
OXBfdnFfYWxsb2Moc3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmQpCkBAIC0xNjUsNiArMzEzLDgg
QEAgc3RhdGljIGludCB2aXJ0aW9fOXBfdnFfYWxsb2Moc3RydWN0IHZpcnRpb185cF9kZXZpY2Ug
KmQpCiAJCWdvdG8gZXhpdDsKIAl9CiAKKwl1a19zZ2xpc3RfaW5pdCgmZC0+c2csIEFSUkFZX1NJ
WkUoZC0+c2dzZWdzKSwgJmQtPnNnc2Vnc1swXSk7CisKIAlkLT52cSA9IHZpcnRpb192cXVldWVf
c2V0dXAoZC0+dmRldiwKIAkJCQkgICAgZC0+aHd2cV9pZCwKIAkJCQkgICAgcWRlc2Nfc2l6ZSwK
QEAgLTI3Miw2ICs0MjIsNyBAQCBzdGF0aWMgaW50IHZpcnRpb185cF9hZGRfZGV2KHN0cnVjdCB2
aXJ0aW9fZGV2ICp2ZGV2KQogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KKwl1a2Fy
Y2hfc3Bpbl9sb2NrX2luaXQoJmQtPnNwaW5sb2NrKTsKIAlkLT52ZGV2ID0gdmRldjsKIAl2aXJ0
aW9fOXBfZmVhdHVyZV9zZXQoZCk7CiAJcmMgPSB2aXJ0aW9fOXBfY29uZmlndXJlKGQpOwotLSAK
Mi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:56:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:56:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XS1-0002Xv-Lu; Sat, 07 Sep 2019 09:56:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XS0-0002Xq-PR
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:56:12 +0000
X-Inumbo-ID: b8e061c0-d155-11e9-b299-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b8e061c0-d155-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:56:12 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id k1so8849533wmi.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 02:56:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=2xhO16vVdiuAlOyAOcZQDDXu+SmOGzc025B7Drz7otU=;
 b=RWibfTVz+omA8eexdE3RjKeDovpcZziqYKKNL2BzoOXiKh7UzyOF7j/QD3sk2U0mkC
 ftC8DyWWym6jGBQLZKcRgmyac4RNA6gYO2QUIYpCgMaZozIqvwF5+Wec7/Mo2cR2+6Hj
 h6WVjgkQciUTiMtfLfJgYnnGCdOK3uzI6Tzdav2y/Hch9b60bSRt6iCnwU55u679gcyz
 T+6f8tcqSLDssqnkmXR1Tz7FfZtduDbK7mRBZjpOHh4t5aUwE5CWJQTblrG0lV8cPzl2
 kM6YGI1C90sS1jSVjTgDb59jEefrJAdIK5Ssy/SxKBuOoVOdftomjW8fOBq+r/Ua8RKB
 zAAA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=2xhO16vVdiuAlOyAOcZQDDXu+SmOGzc025B7Drz7otU=;
 b=nvKNKvPmxz6fgPV3Xf4vp/vRwsWd0EumLAkS05V8TSf9Jna+xQrRSBNbFj2XBr7ejm
 nORPHgKl1hBLZ/xXohIEWO9qgQgv4gUN8NPmKQWVnkqSRFpH/z9pt6LXKsrK9ce5N3Ut
 Zo697knNOUd22VuQn1FDU922olIspSctPJ3OxJKnlxJ7eUbvi9pOzEb32ZBjnUI0KVGr
 WwzrDRYMaxe2YoWrnS/duECIuhs5JS+I7klCTlRCobGNx+K9m157CJtdU87rAFVYcdu3
 d6t8iew9Xt+zSoiisapXrMtfXexvkozfMRMgZXM6daGWCOyaLSjK7DjM2Co1MLL3jIIH
 inFA==
X-Gm-Message-State: APjAAAXCjaO126YSQiEUliKx8EyPcUvFAAKGM9Rz/QBrXFcdiX3eEANj
 5ELWgbS1Fvb8v6By2bWDw8A=
X-Google-Smtp-Source: APXvYqz/c7EaPxP/braaSoCYWQISVRETakuyoTYH9KYrx2FwthXMyhSNfDi+bIG+ntTmHiQU8XcFWA==
X-Received: by 2002:a05:600c:2486:: with SMTP id
 6mr10401702wms.82.1567850171142; 
 Sat, 07 Sep 2019 02:56:11 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id g73sm12229592wme.10.2019.09.07.02.56.10
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 02:56:10 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <99a53cf4-a770-6236-0be7-f51d79375e8e@gmail.com>
Date: Sat, 7 Sep 2019 12:56:09 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 0/5] Virtio 9P driver
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NDUgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBUaGlzIHBh
dGNoIHNlcmllcyBhZGRzIHRoZSB2aXJ0aW8gOVAgZHJpdmVyIGltcGxlbWVudGF0aW9uLCBiYXNl
ZCBvbiB0aGUKPiB1bmlrcmFmdCA5UCBBUEkuIFRoZSBkcml2ZXIncyBpbXBsZW1lbnRhdGlvbiBp
cyBpbiB2aXJ0aW9fOXAuYywgYW5kIHRoZQo+IFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIGxheW91
dCBhbmQgZmxhZ3MgY2FuIGJlIGZvdW5kIGluIHZpcnRpb185cC5oLgo+IAo+IAo+IFRoZSA5UCBk
ZXZpY2VzIGFyZSBpbml0aWFsaXplZCBvbmNlLCBhdCBib290IHRpbWUsIGFuZCBlYWNoIGNvbm5l
Y3QoKSBvcgo+IGRpc2Nvbm5lY3QoKSBzaW1wbHkgcG9pbnRzIHRoZSB1a185cGRldiB0byB0aGUg
Y29ycmVjdCB2aXJ0aW8gOVAgZGV2aWNlCj4gb3IgdG8gTlVMTC4KPiAKPiBDcmlzdGlhbiBCYW51
ICg1KToKPiAgIHBsYXQvZHJpdmVyczogVmlydGlvIDlQIGRyaXZlciBza2VsZXRvbgo+ICAgcGxh
dC9kcml2ZXJzOiBBZGQgOVAgZGV2aWNlIGluaXRpYWxpemF0aW9uCj4gICBwbGF0L2RyaXZlcnM6
IEFsbG9jYXRlIHZpcnRxdWV1ZSBmb3IgdmlydGlvIDlQCj4gICBwbGF0L2RyaXZlcnM6IEFkZCA5
UCB0cmFuc3BvcnQgZm9yIHZpcnRpbyA5UAo+ICAgcGxhdC9kcml2ZXJzOiBJbXBsZW1lbnQgdmly
dGlvIDlQIHJlcXVlc3QgYW5kIHJlY3YKPiAKPiAgcGxhdC9kcml2ZXJzL2luY2x1ZGUvdmlydGlv
L3ZpcnRpb185cC5oIHwgIDUzICsrKwo+ICBwbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5j
ICAgICAgICAgfCA0NzIgKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHBsYXQva3ZtL0NvbmZp
Zy51ayAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArCj4gIHBsYXQva3ZtL01ha2VmaWxlLnVr
ICAgICAgICAgICAgICAgICAgICB8ICAxMyArCj4gIDQgZmlsZXMgY2hhbmdlZCwgNTQ3IGluc2Vy
dGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQvZHJpdmVycy9pbmNsdWRlL3ZpcnRp
by92aXJ0aW9fOXAuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC9kcml2ZXJzL3ZpcnRpby92
aXJ0aW9fOXAuYwo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:57:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:57:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XTb-0002ZI-Re; Sat, 07 Sep 2019 09:57:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XTa-0002ZD-9y
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:57:50 +0000
X-Inumbo-ID: f2c9a8a6-d155-11e9-b299-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f2c9a8a6-d155-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:57:49 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id i1so8359521wro.4
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 02:57:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=C+ELLbVRR+Zv4D/twEyoXHvwsOHMGODEqmeT89G179k=;
 b=XS0dDVFOvgixk9SbUgMud8NVCRaptFbF/kOBoAJ+1BCvtFJ7SxhNFuv2ObRaSaSvpm
 jvE+EKx+fCKBPeHn8fKW8ly5jFt06yASvA/ayH8v9QqNRhosiVuIPXQZA6hXZ65jmyc8
 1dS5Ay0UKWoNjyZtziZ/ZF8qbiNaVxjmTVcaoi1jMqkKRRNUqPKNNl/9kz3aEHlTQYiT
 4154AzK2JHDP1zSfv/BO2eBAZF5ZiOmvajpEY/4KNl6FZVqweEZxG4VHgbsDFTWX58tn
 WoA1pa8H7tDMcJ0/ufUhG0aQ0xjAVTdEXRUtklYkO1lK/SG8vktP2Vk4RvQxcEpcdy1o
 5v/Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=C+ELLbVRR+Zv4D/twEyoXHvwsOHMGODEqmeT89G179k=;
 b=o3fp233VBKoD88Gx7Q5uIeFbWJuzYXAZsovqH+qEas35DLytWwv5X582OXdEEEIMG4
 FM2IKm5mpVHdlh9AuvBmyzmmXKp2Obitz+e9s6kFIXFMPvYQlHU1rKeLOgdh12cw4pOV
 Fk4GVXZeI+hh0SkI/vreYHWebVPCtUgkZnjom+IKFNiQyHAAziCEzu2RaiqEoi/zusyo
 YmA2TdOBxP7wzmCFt9n5Ozzk1Gr2ooe0pb9UPpi/YPDSniAv416P8GTVyIMYpCDL+rDA
 p2l4mNF7rClCBaBYtXAALGU765/U/5xV5mbC+mdCYODolvkqbT1yiyNaqCnBQ/6GRD83
 YBQg==
X-Gm-Message-State: APjAAAXyKHC6Pd181IHyjl2Dgo16zoZKg8AXda6eyxlMEippj9XeR7Us
 kS2ZeJ7z92eW8xb9oCSFh7k=
X-Google-Smtp-Source: APXvYqxkNerx4TpHqo8U/dxtmh+63bkKDJ9yXat4Uir6H3gYFSOGPF3c5yk3vJuxnXPFMFFOUzARaQ==
X-Received: by 2002:adf:fc4c:: with SMTP id e12mr11417829wrs.147.1567850268360; 
 Sat, 07 Sep 2019 02:57:48 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id u83sm15095609wme.0.2019.09.07.02.57.47
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 02:57:47 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907094518.12323-2-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <f66e0126-bdaf-4633-f331-88319302d7f8@gmail.com>
Date: Sat, 7 Sep 2019 12:57:47 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907094518.12323-2-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/5] plat/drivers: Virtio 9P
 driver skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NDUgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUg
dmlydGlvIDlQIGRyaXZlciBza2VsZXRvbi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBC
YW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBwbGF0L2RyaXZlcnMvaW5jbHVkZS92aXJ0
aW8vdmlydGlvXzlwLmggfCA0NCArKysrKysrKysrKysrKysrKysrCj4gIHBsYXQvZHJpdmVycy92
aXJ0aW8vdmlydGlvXzlwLmMgICAgICAgICB8IDU4ICsrKysrKysrKysrKysrKysrKysrKysrKysK
PiAgcGxhdC9rdm0vQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgIHwgIDkgKysrKwo+ICBw
bGF0L2t2bS9NYWtlZmlsZS51ayAgICAgICAgICAgICAgICAgICAgfCAxMyArKysrKysKPiAgNCBm
aWxlcyBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGxh
dC9kcml2ZXJzL2luY2x1ZGUvdmlydGlvL3ZpcnRpb185cC5oCj4gIGNyZWF0ZSBtb2RlIDEwMDY0
NCBwbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCj4gCj4gZGlmZiAtLWdpdCBhL3BsYXQv
ZHJpdmVycy9pbmNsdWRlL3ZpcnRpby92aXJ0aW9fOXAuaCBiL3BsYXQvZHJpdmVycy9pbmNsdWRl
L3ZpcnRpby92aXJ0aW9fOXAuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw
MDAuLjU0NTlhMzk3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3BsYXQvZHJpdmVycy9pbmNsdWRl
L3ZpcnRpby92aXJ0aW9fOXAuaAo+IEBAIC0wLDAgKzEsNDQgQEAKPiArLyogU1BEWC1MaWNlbnNl
LUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLwo+ICsvKgo+ICsgKiBBdXRob3JzOiBDcmlzdGlh
biBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTks
IFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVk
Lgo+ICsgKgo+ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gKyAqIGFyZSBtZXQ6Cj4g
KyAqCj4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiArICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQo+ICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ICsgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCj4gKyAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCj4gKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCj4gKyAqCj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ICsg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCj4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCj4gKyAqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUKPiArICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+ICsgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKPiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKPiArICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gKyAq
Cj4gKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFO
WSBXQVkuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBfX1BMQVRfRFJWX1ZJUlRJT185UF9ICj4gKyNk
ZWZpbmUgX19QTEFUX0RSVl9WSVJUSU9fOVBfSAo+ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4g
KyNpbmNsdWRlIDx1ay9hcmNoL3R5cGVzLmg+Cj4gKwo+ICsjaW5jbHVkZSA8dmlydGlvL3ZpcnRp
b19pZHMuaD4KPiArI2luY2x1ZGUgPHZpcnRpby92aXJ0aW9fY29uZmlnLmg+Cj4gKyNpbmNsdWRl
IDx2aXJ0aW8vdmlydGlvX3R5cGVzLmg+Cj4gKwo+ICsjZW5kaWYgLyogX19QTEFUX0RSVl9WSVJU
SU9fOVBfSCAqLwo+IGRpZmYgLS1naXQgYS9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5j
IGIvcGxhdC9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fOXAuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0
Cj4gaW5kZXggMDAwMDAwMDAuLjg1NTU0OGZlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3BsYXQv
ZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMKPiBAQCAtMCwwICsxLDU4IEBACj4gKy8qIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiArLyoKPiArICogQXV0aG9yczog
Q3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiArICoKPiArICogQ29weXJpZ2h0IChj
KSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsgKiBhcmUg
bWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+
ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiArICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Cj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
Lgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklF
RCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx2aXJ0aW8vdmlydGlvX2J1cy5o
Pgo+ICsjaW5jbHVkZSA8dmlydGlvL3ZpcnRpb185cC5oPgo+ICsKPiArc3RhdGljIGludCB2aXJ0
aW9fOXBfYWRkX2RldihzdHJ1Y3QgdmlydGlvX2RldiAqdmRldiBfX3VudXNlZCkKPiArewo+ICsJ
cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvXzlwX2Rydl9pbml0KHN0cnVj
dCB1a19hbGxvYyAqZHJ2X2FsbG9jYXRvciBfX3VudXNlZCkKPiArewo+ICsJcmV0dXJuIDA7Cj4g
K30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2Rldl9pZCB2OXBfZGV2X2lkW10g
PSB7Cj4gKwl7VklSVElPX0lEXzlQfSwKPiArCXtWSVJUSU9fSURfSU5WQUxJRH0gLyogTGlzdCBU
ZXJtaW5hdG9yICovCj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHZpcnRpb19kcml2ZXIgdjlw
X2RydiA9IHsKPiArCS5kZXZfaWRzID0gdjlwX2Rldl9pZCwKPiArCS5pbml0ICAgID0gdmlydGlv
XzlwX2Rydl9pbml0LAo+ICsJLmFkZF9kZXYgPSB2aXJ0aW9fOXBfYWRkX2Rldgo+ICt9Owo+ICtW
SVJUSU9fQlVTX1JFR0lTVEVSX0RSSVZFUigmdjlwX2Rydik7Cj4gZGlmZiAtLWdpdCBhL3BsYXQv
a3ZtL0NvbmZpZy51ayBiL3BsYXQva3ZtL0NvbmZpZy51awo+IGluZGV4IDI4ZmI3YjhiLi5jNGFk
NjVlYyAxMDA2NDQKPiAtLS0gYS9wbGF0L2t2bS9Db25maWcudWsKPiArKysgYi9wbGF0L2t2bS9D
b25maWcudWsKPiBAQCAtNzksNiArNzksMTUgQEAgY29uZmlnIFZJUlRJT19ORVQKPiAgICAgICAg
IHNlbGVjdCBMSUJVS1NHTElTVAo+ICAgICAgICAgaGVscAo+ICAgICAgICAgICAgICAgIFZpcnR1
YWwgbmV0d29yayBkcml2ZXIuCj4gKwo+ICtjb25maWcgVklSVElPXzlQCj4gKyAgICAgICBib29s
ICJWaXJ0aW8gOVAgZGV2aWNlIgo+ICsgICAgICAgZGVmYXVsdCBuCj4gKyAgICAgICBkZXBlbmRz
IG9uIExJQlVLOVAKPiArICAgICAgIHNlbGVjdCBWSVJUSU9fQlVTCj4gKyAgICAgICBzZWxlY3Qg
TElCVUtTR0xJU1QKPiArICAgICAgIGhlbHAKPiArICAgICAgICAgICAgICBWaXJ0aW8gOVAgZHJp
dmVyLgo+ICBlbmRtZW51Cj4gIAo+ICBjb25maWcgTElCR0lDVjIKPiBkaWZmIC0tZ2l0IGEvcGxh
dC9rdm0vTWFrZWZpbGUudWsgYi9wbGF0L2t2bS9NYWtlZmlsZS51awo+IGluZGV4IGY2Y2MyZDE5
Li42OGJjZmQ5NSAxMDA2NDQKPiAtLS0gYS9wbGF0L2t2bS9NYWtlZmlsZS51awo+ICsrKyBiL3Bs
YXQva3ZtL01ha2VmaWxlLnVrCj4gQEAgLTEwLDYgKzEwLDcgQEAgJChldmFsICQoY2FsbCBhZGRw
bGF0bGliLGt2bSxsaWJrdm1wbGF0KSkKPiAgJChldmFsICQoY2FsbCBhZGRwbGF0bGliX3Msa3Zt
LGxpYmt2bXBjaSwkKENPTkZJR19LVk1fUENJKSkpCj4gICQoZXZhbCAkKGNhbGwgYWRkcGxhdGxp
Yl9zLGt2bSxsaWJrdm12aXJ0aW8sJChDT05GSUdfVklSVElPX0JVUykpKQo+ICAkKGV2YWwgJChj
YWxsIGFkZHBsYXRsaWJfcyxrdm0sbGlia3ZtdmlydGlvbmV0LCQoQ09ORklHX1ZJUlRJT19ORVQp
KSkKPiArJChldmFsICQoY2FsbCBhZGRwbGF0bGliX3Msa3ZtLGxpYmt2bXZpcnRpbzlwLCQoQ09O
RklHX1ZJUlRJT185UCkpKQo+ICAkKGV2YWwgJChjYWxsIGFkZHBsYXRsaWJfcyxrdm0sbGlia3Zt
b2Z3LCQoQ09ORklHX0xJQk9GVykpKQo+ICAkKGV2YWwgJChjYWxsIGFkZHBsYXRsaWJfcyxrdm0s
bGlia3ZtZ2ljdjIsJChDT05GSUdfTElCR0lDVjIpKSkKPiAgCj4gQEAgLTEyOSw2ICsxMzAsMTgg
QEAgTElCS1ZNVklSVElPTkVUX0NJTkNMVURFUy15ICAgICs9IC1JJChVS19QTEFUX0RSSVZFUlNf
QkFTRSkvaW5jbHVkZQo+ICBMSUJLVk1WSVJUSU9ORVRfU1JDUy15ICs9XAo+ICAJCQkkKFVLX1BM
QVRfRFJJVkVSU19CQVNFKS92aXJ0aW8vdmlydGlvX25ldC5jCj4gIAo+ICsjIwo+ICsjIyBWaXJ0
aW8gOVAgbGlicmFyeSBkZWZpbml0aW9uCj4gKyMjCj4gK0xJQktWTVZJUlRJTzlQX0FTSU5DTFVE
RVMteSAgICs9IC1JJChMSUJLVk1QTEFUX0JBU0UpL2luY2x1ZGUKPiArTElCS1ZNVklSVElPOVBf
Q0lOQ0xVREVTLXkgICAgKz0gLUkkKExJQktWTVBMQVRfQkFTRSkvaW5jbHVkZQo+ICtMSUJLVk1W
SVJUSU85UF9BU0lOQ0xVREVTLXkgICArPSAtSSQoVUtfUExBVF9DT01NT05fQkFTRSkvaW5jbHVk
ZQo+ICtMSUJLVk1WSVJUSU85UF9DSU5DTFVERVMteSAgICArPSAtSSQoVUtfUExBVF9DT01NT05f
QkFTRSkvaW5jbHVkZQo+ICtMSUJLVk1WSVJUSU85UF9BU0lOQ0xVREVTLXkgICArPSAtSSQoVUtf
UExBVF9EUklWRVJTX0JBU0UpL2luY2x1ZGUKPiArTElCS1ZNVklSVElPOVBfQ0lOQ0xVREVTLXkg
ICAgKz0gLUkkKFVLX1BMQVRfRFJJVkVSU19CQVNFKS9pbmNsdWRlCj4gK0xJQktWTVZJUlRJTzlQ
X1NSQ1MteSArPVwKPiArCQkJJChVS19QTEFUX0RSSVZFUlNfQkFTRSkvdmlydGlvL3ZpcnRpb185
cC5jCj4gKwo+ICAjIwo+ICAjIyBPRlcgbGlicmFyeSBkZWZpbml0aW9ucwo+ICAjIwo+IAoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:58:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:58:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XTj-0002an-U6; Sat, 07 Sep 2019 09:57:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XTi-0002ac-AJ
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:57:58 +0000
X-Inumbo-ID: f7bcbec0-d155-11e9-b299-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f7bcbec0-d155-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 09:57:57 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id g7so8985284wrx.2
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 02:57:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=kzQR4atcwzYIAHXOt/zlDQ5OXqKh2YFtugsBKQ3eT90=;
 b=eBGIv7bZ3gMCFbL4Fii31OYqOwSoFCEvawETYkY29MVuByg7UBVI9m6dmmQGbbWCDo
 IFxliPVtHw7g1EXW31VDf0S73lhHeMRW9tSYRgDm484c0v08WpSZcUpcx16+Tl4x1Qw0
 xQlOEtevGxew8Tf/MxXlIJXD/CchbsLto9JeknK/jHO83YbHHoSy/F7+vgX/vD1/4DH+
 EveJsT4fcMi9iimJE1n2EO7pk3L38cotsQgMvu08HvdTAQcSwn0IHqUHXlLh9RgbBCER
 UBIhioAEHZWOXIlYPq7DYDXr4/dfLJyGVqBNbIT+yg+gvFH82hIJqGiejv/22ZZw2ouB
 SrEA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=kzQR4atcwzYIAHXOt/zlDQ5OXqKh2YFtugsBKQ3eT90=;
 b=RZusg8MSsQO5GsejTiCdF8DR0/ygt8cCvBzs9uV2pO8ghNmV+UHurFwpWZCsqawmb2
 BB4BJCdORXEtM5e/8a3UqQ4C0B5252FUKFBX5ITKy4lCwFYZavYTOqhz0u65LXUTtXb1
 6C7fhi4h+LIzfKQov1tO+XUStr61eyoOJ/W0bOV0xCr/ya5XUY34029fRG7gIVx5FCon
 4k/ditSkGFOtqFQIjOpY2qai7A8vw+i09GNT19OvFGgAqiSY0KOoJFyjoDAkhKNUXbLs
 KZ1udsZE8p4x5Qgquta8xZ2XTvrerlBhuRVaqpTcpgQCWdScWaWs56VFYpw5+Iol4cwq
 jcsg==
X-Gm-Message-State: APjAAAX3HVY7PjjZlbVQfPvkHiHjqWIDpBshlqveDNlnDnQwhh9G2pbR
 CKNJ5vILUlOBRyXxBG78PFE=
X-Google-Smtp-Source: APXvYqz1CO3MO+rQ+5j41sNWKWWQUHpk9eN7VFmNNVC3sTwwsuejON7dl6xzz0y1tZdIPkUMqWtP7g==
X-Received: by 2002:adf:ee4a:: with SMTP id w10mr10671862wro.138.1567850276705; 
 Sat, 07 Sep 2019 02:57:56 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id q66sm11700388wme.39.2019.09.07.02.57.55
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 02:57:56 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907094518.12323-3-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <8a57f642-9229-6936-656e-b1c4747a9615@gmail.com>
Date: Sat, 7 Sep 2019 12:57:55 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907094518.12323-3-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 2/5] plat/drivers: Add 9P
 device initialization
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NDUgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggaW1wbGVtZW50
cyB0aGUgOVAgZHJpdmVyIGFuZCBkZXZpY2UgaW5pdGlhbGl6YXRpb24uCj4gCj4gU2lnbmVkLW9m
Zi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAtLS0KPiAgcGxhdC9kcml2
ZXJzL2luY2x1ZGUvdmlydGlvL3ZpcnRpb185cC5oIHwgICA5ICsrCj4gIHBsYXQvZHJpdmVycy92
aXJ0aW8vdmlydGlvXzlwLmMgICAgICAgICB8IDEzMiArKysrKysrKysrKysrKysrKysrKysrKy0K
PiAgMiBmaWxlcyBjaGFuZ2VkLCAxMzggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAK
PiBkaWZmIC0tZ2l0IGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUvdmlydGlvL3ZpcnRpb185cC5oIGIv
cGxhdC9kcml2ZXJzL2luY2x1ZGUvdmlydGlvL3ZpcnRpb185cC5oCj4gaW5kZXggNTQ1OWEzOTcu
LjI5MTU4YWI3IDEwMDY0NAo+IC0tLSBhL3BsYXQvZHJpdmVycy9pbmNsdWRlL3ZpcnRpby92aXJ0
aW9fOXAuaAo+ICsrKyBiL3BsYXQvZHJpdmVycy9pbmNsdWRlL3ZpcnRpby92aXJ0aW9fOXAuaAo+
IEBAIC00MSw0ICs0MSwxMyBAQAo+ICAjaW5jbHVkZSA8dmlydGlvL3ZpcnRpb19jb25maWcuaD4K
PiAgI2luY2x1ZGUgPHZpcnRpby92aXJ0aW9fdHlwZXMuaD4KPiAgCj4gKy8qIEZlYXR1cmUgYml0
bWFwIGZvciB2aXJ0aW8gOVAuICovCj4gKyNkZWZpbmUgVklSVElPXzlQX0ZfTU9VTlRfVEFHIDAK
PiArCj4gKy8qIFZpcnRpbyA5UCBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBsYXlvdXQuICovCj4g
K3N0cnVjdCB2aXJ0aW9fOXBfY29uZmlnIHsKPiArCV9fdTE2IHRhZ19sZW47Cj4gKwlfX3U4IHRh
Z1swXTsKPiArfSBfX3BhY2tlZDsKPiArCj4gICNlbmRpZiAvKiBfX1BMQVRfRFJWX1ZJUlRJT185
UF9IICovCj4gZGlmZiAtLWdpdCBhL3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMgYi9w
bGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCj4gaW5kZXggODU1NTQ4ZmUuLjc5OGViZTkw
IDEwMDY0NAo+IC0tLSBhL3BsYXQvZHJpdmVycy92aXJ0aW8vdmlydGlvXzlwLmMKPiArKysgYi9w
bGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCj4gQEAgLTMyLDE5ICszMiwxNDUgQEAKPiAg
ICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdB
WS4KPiAgICovCj4gIAo+ICsjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiArI2luY2x1ZGUgPHVrL2Vz
c2VudGlhbHMuaD4KPiAgI2luY2x1ZGUgPHZpcnRpby92aXJ0aW9fYnVzLmg+Cj4gICNpbmNsdWRl
IDx2aXJ0aW8vdmlydGlvXzlwLmg+Cj4gKyNpbmNsdWRlIDx1ay9wbGF0L3NwaW5sb2NrLmg+Cj4g
IAo+IC1zdGF0aWMgaW50IHZpcnRpb185cF9hZGRfZGV2KHN0cnVjdCB2aXJ0aW9fZGV2ICp2ZGV2
IF9fdW51c2VkKQo+ICsjZGVmaW5lIERSSVZFUl9OQU1FCSJ2aXJ0aW8tOXAiCj4gK3N0YXRpYyBz
dHJ1Y3QgdWtfYWxsb2MgKmE7Cj4gKwo+ICsvKiBMaXN0IG9mIGluaXRpYWxpemVkIHZpcnRpbyA5
cCBkZXZpY2VzLiAqLwo+ICtzdGF0aWMgVUtfTElTVF9IRUFEKHZpcnRpb185cF9kZXZpY2VfbGlz
dCk7Cj4gK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodmlydGlvXzlwX2RldmljZV9saXN0X2xvY2sp
Owo+ICsKPiArc3RydWN0IHZpcnRpb185cF9kZXZpY2Ugewo+ICsJLyogVmlydGlvIGRldmljZS4g
Ki8KPiArCXN0cnVjdCB2aXJ0aW9fZGV2ICp2ZGV2Owo+ICsJLyogTW91bnQgdGFnIGZvciB0aGlz
IHZpcnRpbyBkZXZpY2UuICovCj4gKwljaGFyICp0YWc7Cj4gKwkvKiBFbnRyeSB3aXRoaW4gdGhl
IHZpcnRpbyBkZXZpY2VzJyBsaXN0LiAqLwo+ICsJc3RydWN0IHVrX2xpc3RfaGVhZCBfbGlzdDsK
PiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvXzlwX2ZlYXR1cmVfbmVnb3RpYXRlKHN0cnVj
dCB2aXJ0aW9fOXBfZGV2aWNlICpkKQo+ICB7Cj4gLQlyZXR1cm4gMDsKPiArCV9fdTY0IGhvc3Rf
ZmVhdHVyZXM7Cj4gKwlfX3UxNiB0YWdfbGVuOwo+ICsJaW50IHJjID0gMDsKPiArCj4gKwlob3N0
X2ZlYXR1cmVzID0gdmlydGlvX2ZlYXR1cmVfZ2V0KGQtPnZkZXYpOwo+ICsJaWYgKCF2aXJ0aW9f
aGFzX2ZlYXR1cmVzKGhvc3RfZmVhdHVyZXMsIFZJUlRJT185UF9GX01PVU5UX1RBRykpIHsKPiAr
CQl1a19wcl9lcnIoRFJJVkVSX05BTUUiOiBIb3N0IHN5c3RlbSBkb2VzIG5vdCBvZmZlciBNT1VO
VF9UQUcgZmVhdHVyZVxuIik7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gb3V0Owo+ICsJ
fQo+ICsKPiArCXZpcnRpb19jb25maWdfZ2V0KGQtPnZkZXYsCj4gKwkJCSAgX19vZmZzZXRvZihz
dHJ1Y3QgdmlydGlvXzlwX2NvbmZpZywgdGFnX2xlbiksCj4gKwkJCSAgJnRhZ19sZW4sIDEsIHNp
emVvZih0YWdfbGVuKSk7Cj4gKwo+ICsJZC0+dGFnID0gdWtfY2FsbG9jKGEsIHRhZ19sZW4gKyAx
LCBzaXplb2YoKmQtPnRhZykpOwo+ICsJaWYgKCFkLT50YWcpIHsKPiArCQlyYyA9IC1FTk9NRU07
Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJdmlydGlvX2NvbmZpZ19nZXQoZC0+dmRldiwK
PiArCQkJICBfX29mZnNldG9mKHN0cnVjdCB2aXJ0aW9fOXBfY29uZmlnLCB0YWcpLAo+ICsJCQkg
IGQtPnRhZywgdGFnX2xlbiwgMSk7Cj4gKwlkLT50YWdbdGFnX2xlbl0gPSAnXDAnOwo+ICsKPiAr
CWQtPnZkZXYtPmZlYXR1cmVzICY9IGhvc3RfZmVhdHVyZXM7Cj4gKwl2aXJ0aW9fZmVhdHVyZV9z
ZXQoZC0+dmRldiwgZC0+dmRldi0+ZmVhdHVyZXMpOwo+ICsKPiArb3V0Ogo+ICsJcmV0dXJuIHJj
Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgdmlydGlvXzlwX2ZlYXR1cmVfc2V0KHN0
cnVjdCB2aXJ0aW9fOXBfZGV2aWNlICpkKQo+ICt7Cj4gKwlkLT52ZGV2LT5mZWF0dXJlcyA9IDA7
Cj4gKwlWSVJUSU9fRkVBVFVSRVNfVVBEQVRFKGQtPnZkZXYtPmZlYXR1cmVzLCBWSVJUSU9fOVBf
Rl9NT1VOVF9UQUcpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb185cF9jb25maWd1cmUo
c3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmQpCj4gK3sKPiArCWludCByYyA9IDA7Cj4gKwo+ICsJ
cmMgPSB2aXJ0aW9fOXBfZmVhdHVyZV9uZWdvdGlhdGUoZCk7Cj4gKwlpZiAocmMgIT0gMCkgewo+
ICsJCXVrX3ByX2VycihEUklWRVJfTkFNRSI6IEZhaWxlZCB0byBuZWdvdGlhdGUgdGhlIGRldmlj
ZSBmZWF0dXJlICVkXG4iLAo+ICsJCQlyYyk7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8g
b3V0X3N0YXR1c19mYWlsOwo+ICsJfQo+ICsKPiArCXVrX3ByX2luZm8oRFJJVkVSX05BTUUiOiBD
b25maWd1cmVkOiBmZWF0dXJlcz0weCVseCB0YWc9JXNcbiIsCj4gKwkJCWQtPnZkZXYtPmZlYXR1
cmVzLCBkLT50YWcpOwo+ICtvdXQ6Cj4gKwlyZXR1cm4gcmM7Cj4gKwo+ICtvdXRfc3RhdHVzX2Zh
aWw6Cj4gKwl2aXJ0aW9fZGV2X3N0YXR1c191cGRhdGUoZC0+dmRldiwgVklSVElPX0NPTkZJR19T
VEFUVVNfRkFJTCk7Cj4gKwlnb3RvIG91dDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCB2aXJ0aW9f
OXBfZHJ2X2luaXQoc3RydWN0IHVrX2FsbG9jICpkcnZfYWxsb2NhdG9yIF9fdW51c2VkKQo+ICtz
dGF0aWMgaW50IHZpcnRpb185cF9zdGFydChzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZCkKPiAg
ewo+ICsJdmlydGlvX2Rldl9kcnZfdXAoZC0+dmRldik7Cj4gKwl1a19wcl9pbmZvKERSSVZFUl9O
QU1FIjogJXMgc3RhcnRlZFxuIiwgZC0+dGFnKTsKPiArCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAK
PiArc3RhdGljIGludCB2aXJ0aW9fOXBfYWRkX2RldihzdHJ1Y3QgdmlydGlvX2RldiAqdmRldikK
PiArewo+ICsJc3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmQ7Cj4gKwl1bnNpZ25lZCBsb25nIGZs
YWdzOwo+ICsJaW50IHJjID0gMDsKPiArCj4gKwlVS19BU1NFUlQodmRldiAhPSBOVUxMKTsKPiAr
Cj4gKwlkID0gdWtfY2FsbG9jKGEsIDEsIHNpemVvZigqZCkpOwo+ICsJaWYgKCFkKSB7Cj4gKwkJ
cmMgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsJZC0+dmRldiA9IHZkZXY7Cj4g
Kwl2aXJ0aW9fOXBfZmVhdHVyZV9zZXQoZCk7Cj4gKwlyYyA9IHZpcnRpb185cF9jb25maWd1cmUo
ZCk7Cj4gKwlpZiAocmMpCj4gKwkJZ290byBvdXRfZnJlZTsKPiArCXJjID0gdmlydGlvXzlwX3N0
YXJ0KGQpOwo+ICsJaWYgKHJjKQo+ICsJCWdvdG8gb3V0X2ZyZWU7Cj4gKwo+ICsJdWtwbGF0X3Nw
aW5fbG9ja19pcnFzYXZlKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jaywgZmxhZ3MpOwo+ICsJ
dWtfbGlzdF9hZGQoJmQtPl9saXN0LCAmdmlydGlvXzlwX2RldmljZV9saXN0KTsKPiArCXVrcGxh
dF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jaywgZmxh
Z3MpOwo+ICtvdXQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK291dF9mcmVlOgo+ICsJdWtfZnJlZShhLCBk
KTsKPiArCWdvdG8gb3V0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHZpcnRpb185cF9kcnZfaW5p
dChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxvY2F0b3IpCj4gK3sKPiArCWludCByYyA9IDA7Cj4g
Kwo+ICsJaWYgKCFkcnZfYWxsb2NhdG9yKSB7Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8g
b3V0Owo+ICsJfQo+ICsKPiArCWEgPSBkcnZfYWxsb2NhdG9yOwo+ICtvdXQ6Cj4gKwlyZXR1cm4g
cmM7Cj4gK30KPiArCj4gIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdmlydGlvX2Rldl9pZCB2OXBfZGV2
X2lkW10gPSB7Cj4gIAl7VklSVElPX0lEXzlQfSwKPiAgCXtWSVJUSU9fSURfSU5WQUxJRH0gLyog
TGlzdCBUZXJtaW5hdG9yICovCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:58:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:58:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XTq-0002bV-Vv; Sat, 07 Sep 2019 09:58:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XTp-0002bM-Lt
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:58:05 +0000
X-Inumbo-ID: fc2dde12-d155-11e9-a337-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fc2dde12-d155-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 09:58:04 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id k1so8852172wmi.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 02:58:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=mn+qu/1PCttAG/AlqqWvMQ4sCWM4UAjuPq8aNiE4V9E=;
 b=MW93aNi4ELpI9PWpGJ1G6uhII4XiCQCXDXztGzr7joIY261sbyzmKj27+UIRry08dz
 RtdbsGgVABX2m903rSjIRnFEifni+HLIMB0BY2xYEP/hqL/ZhsmX8gx4ZzW7osi9BuTE
 Mv8MipK1/ND9Jd23+15cvQq03f9lgZX/S/vxMuN/h8X2goWgvg3P5ZM/ZK79VTMFuLX5
 bS4//7/hz9Pizr6UXEX7fA8Yh0lIg6ftunHzz3RELTPB63it3coKyaqegtL1bvaoNqG7
 43PzK1EthqPdzxtlTwcEt8DmoM6YpNzvoUEtPgPpAlMjyW4tiArUX7DG5/HcahnYUZ4M
 GV+A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=mn+qu/1PCttAG/AlqqWvMQ4sCWM4UAjuPq8aNiE4V9E=;
 b=OEpd+g0ZBlM5N8rERembKjYpKkFWnDANBId5YPynhqQeqp90+cZ9kFLdbMrqmrzH22
 obHPpIyuK7lm4Q1Eo6y9BZxx7+S93mAsZMHcoue1dyQ80PtFaxJm/qFUyNsK8auOgZ1i
 3ybmJG0Dzxm7ZHdFcsSFTLC5+bZg5nMRwUuAGaeYrKpu1CKjmEYhE18KZYxk0bFMY5b1
 BUUk01sXJnjQhFQqmGPg5HUnLaDDCJagbe+D5JJVP/QnNOLfwxn9o0Uylv3zDWWXcGFh
 RFKNRaRhPYX3LLdBDp2j7Ke9DLlBV6kc0oT7+dTvxkf69YyC5f66n8TxW4C6ROjKkjx4
 zKoQ==
X-Gm-Message-State: APjAAAWUgoWYjgRZXN8oGmf+G9AZYIhNn9unPWrRGUjWeJFMVtWlGYsJ
 9eR/exzcldXuNH4HwK8Bh21+lARD
X-Google-Smtp-Source: APXvYqyWka1i0gLI+kptPI1HPVRmjtSipR0a+zUuNEYfMGFsgKAL36GNC9i90k9rP+9Y6j/cJH2QiA==
X-Received: by 2002:a1c:d142:: with SMTP id i63mr11117719wmg.53.1567850284165; 
 Sat, 07 Sep 2019 02:58:04 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id y3sm15745373wmg.2.2019.09.07.02.58.03
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 02:58:03 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907094518.12323-4-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <fa56c4f2-2244-d44e-f775-84faf59a8886@gmail.com>
Date: Sat, 7 Sep 2019 12:58:03 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907094518.12323-4-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 3/5] plat/drivers: Allocate
 virtqueue for virtio 9P
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NDUgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggaW1wbGVtZW50
cyB2aXJ0cXVldWUgYWxsb2NhdGlvbiB3aXRoIGEgc3R1YmJlZCBpbnRlcnJ1cHQKPiBoYW5kbGVy
IGZvciB2aXJ0aW8gOVAgZGV2aWNlcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51
IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBwbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185
cC5jIHwgNTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFu
Z2VkLCA1NyBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL3BsYXQvZHJpdmVycy92aXJ0
aW8vdmlydGlvXzlwLmMgYi9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCj4gaW5kZXgg
Nzk4ZWJlOTAuLmFiM2ExYjE2IDEwMDY0NAo+IC0tLSBhL3BsYXQvZHJpdmVycy92aXJ0aW8vdmly
dGlvXzlwLmMKPiArKysgYi9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCj4gQEAgLTMy
LDYgKzMyLDcgQEAKPiAgICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9E
SUZJRUQgSU4gQU5ZIFdBWS4KPiAgICovCj4gIAo+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiAg
I2luY2x1ZGUgPHVrL2FsbG9jLmg+Cj4gICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4gICNp
bmNsdWRlIDx2aXJ0aW8vdmlydGlvX2J1cy5oPgo+IEBAIC0zOSw2ICs0MCw3IEBACj4gICNpbmNs
dWRlIDx1ay9wbGF0L3NwaW5sb2NrLmg+Cj4gIAo+ICAjZGVmaW5lIERSSVZFUl9OQU1FCSJ2aXJ0
aW8tOXAiCj4gKyNkZWZpbmUgTlVNX1NFR01FTlRTCTEyOCAvKiogVGhlIG51bWJlciBvZiB2aXJ0
cXVldWUgZGVzY3JpcHRvcnMuICovCj4gIHN0YXRpYyBzdHJ1Y3QgdWtfYWxsb2MgKmE7Cj4gIAo+
ICAvKiBMaXN0IG9mIGluaXRpYWxpemVkIHZpcnRpbyA5cCBkZXZpY2VzLiAqLwo+IEBAIC01Miw4
ICs1NCw1NiBAQCBzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSB7Cj4gIAljaGFyICp0YWc7Cj4gIAkv
KiBFbnRyeSB3aXRoaW4gdGhlIHZpcnRpbyBkZXZpY2VzJyBsaXN0LiAqLwo+ICAJc3RydWN0IHVr
X2xpc3RfaGVhZCBfbGlzdDsKPiArCS8qIFZpcnRxdWV1ZSByZWZlcmVuY2UuICovCj4gKwlzdHJ1
Y3QgdmlydHF1ZXVlICp2cTsKPiArCS8qIEh3IHF1ZXVlIGlkZW50aWZpZXIuICovCj4gKwl1aW50
MTZfdCBod3ZxX2lkOwo+ICB9Owo+ICAKPiArc3RhdGljIGludCB2aXJ0aW9fOXBfcmVjdihzdHJ1
Y3QgdmlydHF1ZXVlICp2cSBfX3VudXNlZCwgdm9pZCAqcHJpdiBfX3VudXNlZCkKPiArewo+ICsJ
cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvXzlwX3ZxX2FsbG9jKHN0cnVj
dCB2aXJ0aW9fOXBfZGV2aWNlICpkKQo+ICt7Cj4gKwlpbnQgdnFfYXZhaWwgPSAwOwo+ICsJaW50
IHJjID0gMDsKPiArCV9fdTE2IHFkZXNjX3NpemU7Cj4gKwo+ICsJdnFfYXZhaWwgPSB2aXJ0aW9f
ZmluZF92cXMoZC0+dmRldiwgMSwgJnFkZXNjX3NpemUpOwo+ICsJaWYgKHVubGlrZWx5KHZxX2F2
YWlsICE9IDEpKSB7Cj4gKwkJdWtfcHJfZXJyKERSSVZFUl9OQU1FIjogRXhwZWN0ZWQ6ICVkIHF1
ZXVlcywgZm91bmQgJWRcbiIsCj4gKwkJCSAgMSwgdnFfYXZhaWwpOwo+ICsJCXJjID0gLUVOT01F
TTsKPiArCQlnb3RvIGV4aXQ7Cj4gKwl9Cj4gKwo+ICsJZC0+aHd2cV9pZCA9IDA7Cj4gKwlpZiAo
dW5saWtlbHkocWRlc2Nfc2l6ZSAhPSBOVU1fU0VHTUVOVFMpKSB7Cj4gKwkJdWtfcHJfZXJyKERS
SVZFUl9OQU1FIjogRXhwZWN0ZWQgJWQgZGVzY3JpcHRvcnMsIGZvdW5kICVkICh2aXJ0cXVldWUg
JSIKPiArCQkJICBQUkl1MTYiKVxuIiwgTlVNX1NFR01FTlRTLCBxZGVzY19zaXplLCBkLT5od3Zx
X2lkKTsKPiArCQlyYyA9IC1FSU5WQUw7Cj4gKwkJZ290byBleGl0Owo+ICsJfQo+ICsKPiArCWQt
PnZxID0gdmlydGlvX3ZxdWV1ZV9zZXR1cChkLT52ZGV2LAo+ICsJCQkJICAgIGQtPmh3dnFfaWQs
Cj4gKwkJCQkgICAgcWRlc2Nfc2l6ZSwKPiArCQkJCSAgICB2aXJ0aW9fOXBfcmVjdiwKPiArCQkJ
CSAgICBhKTsKPiArCWlmICh1bmxpa2VseShQVFJJU0VSUihkLT52cSkpKSB7Cj4gKwkJdWtfcHJf
ZXJyKERSSVZFUl9OQU1FIjogRmFpbGVkIHRvIHNldCB1cCB2aXJ0cXVldWUgJSJQUkl1MTYiXG4i
LAo+ICsJCQkgIGQtPmh3dnFfaWQpOwo+ICsJCXJjID0gUFRSMkVSUihkLT52cSk7Cj4gKwl9Cj4g
Kwo+ICsJZC0+dnEtPnByaXYgPSBkOwo+ICsKPiArZXhpdDoKPiArCXJldHVybiByYzsKPiArfQo+
ICsKPiAgc3RhdGljIGludCB2aXJ0aW9fOXBfZmVhdHVyZV9uZWdvdGlhdGUoc3RydWN0IHZpcnRp
b185cF9kZXZpY2UgKmQpCj4gIHsKPiAgCV9fdTY0IGhvc3RfZmVhdHVyZXM7Cj4gQEAgLTEwNyw2
ICsxNTcsMTIgQEAgc3RhdGljIGludCB2aXJ0aW9fOXBfY29uZmlndXJlKHN0cnVjdCB2aXJ0aW9f
OXBfZGV2aWNlICpkKQo+ICAJCWdvdG8gb3V0X3N0YXR1c19mYWlsOwo+ICAJfQo+ICAKPiArCXJj
ID0gdmlydGlvXzlwX3ZxX2FsbG9jKGQpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJdWtfcHJfZXJyKERS
SVZFUl9OQU1FIjogQ291bGQgbm90IGFsbG9jYXRlIHZpcnRxdWV1ZVxuIik7Cj4gKwkJZ290byBv
dXRfc3RhdHVzX2ZhaWw7Cj4gKwl9Cj4gKwo+ICAJdWtfcHJfaW5mbyhEUklWRVJfTkFNRSI6IENv
bmZpZ3VyZWQ6IGZlYXR1cmVzPTB4JWx4IHRhZz0lc1xuIiwKPiAgCQkJZC0+dmRldi0+ZmVhdHVy
ZXMsIGQtPnRhZyk7Cj4gIG91dDoKPiBAQCAtMTE5LDYgKzE3NSw3IEBAIG91dF9zdGF0dXNfZmFp
bDoKPiAgCj4gIHN0YXRpYyBpbnQgdmlydGlvXzlwX3N0YXJ0KHN0cnVjdCB2aXJ0aW9fOXBfZGV2
aWNlICpkKQo+ICB7Cj4gKwl2aXJ0cXVldWVfaW50cl9lbmFibGUoZC0+dnEpOwo+ICAJdmlydGlv
X2Rldl9kcnZfdXAoZC0+dmRldik7Cj4gIAl1a19wcl9pbmZvKERSSVZFUl9OQU1FIjogJXMgc3Rh
cnRlZFxuIiwgZC0+dGFnKTsKPiAgCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:58:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:58:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XU0-0002cG-1b; Sat, 07 Sep 2019 09:58:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XTz-0002c9-40
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:58:15 +0000
X-Inumbo-ID: 01c41922-d156-11e9-978d-bc764e2007e4
Received: from mail-wm1-x344.google.com (unknown [2a00:1450:4864:20::344])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 01c41922-d156-11e9-978d-bc764e2007e4;
 Sat, 07 Sep 2019 09:58:14 +0000 (UTC)
Received: by mail-wm1-x344.google.com with SMTP id r195so9596510wme.2
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 02:58:14 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=eMeN/YAMzDlUtEE6/xsiCNhT4Jdu8rZdBIFYGMkWQ40=;
 b=Yh+/QsLDK9as9Ke7tunundUnfqU/kaH7DEetnFsPlsf/u97nkiCV7aIT1Ny7f0VsNp
 JCK2QqIWYQFDV0NRgO88lDCpWBpliqsPo02qv5SZjVS+uIzXdQX50f8vMTw8NBeA0AWE
 YFiQ3qskvyCA8yTqTIfpIELs7vEThiD14kwLb9GDAPbF9nzMnKv4gCTGjfrWzwCTlDoS
 54wm0V6iHbGTpMftM1CETFjuEpPpy9nx8azXNtTgxJgW+h5kOPgpuDvYUG4KwVMTzhSp
 uY5z0z6kAfTgOS+nKD0ciu7PLZsX9HCqHZF+ss4/JAF0FBpG4T3yxlLZD2H8hI6+woN8
 pe6w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=eMeN/YAMzDlUtEE6/xsiCNhT4Jdu8rZdBIFYGMkWQ40=;
 b=q5kaeQy+DH+hjyd4OtVg3lncL0MIwPPPkM8ZOXvtJSm3jrmZ4WBP6XISy4LP6TXMbb
 6+/WX7RWo3xqhfDbFXv0uJNMTkTvgoFbaf3rDqgJy02Y7/n9OLTAhB+qPBdEKJjFiL1i
 o2ZlutQ8MY/Ve6Q19Ubt/+ZLbdpAwoq0DRliA5TcGiyv1mCfP1HDb6qx1Nj3Qqgyc9FN
 L5uuj37CX1s5tJaIYjzXIjm6Z462lCp0AnmrEqwIDQEcFrvjiIzHalmzlgyK3H1xvZpG
 DVbVeL+1WefZsEu3m2/ROMV4obcgeypFvOEv8eRJ5BTXYRvNd+KPRpYM0y8HA5xh9fUV
 qlRw==
X-Gm-Message-State: APjAAAWsIrxPF2J4IKa+80H0p8llUK8vv4jBTkO9c0YSDHqsThgHQcQi
 czTv+1ypQcpURFkjfKMKV24=
X-Google-Smtp-Source: APXvYqxsdPs6Yw/g+rlLSdl4pzfwywC+vvrDAFqxKN6Envw2nY8vPKBSw8B2siefy3V/bcXEN//imA==
X-Received: by 2002:a1c:cf05:: with SMTP id f5mr9056703wmg.131.1567850293535; 
 Sat, 07 Sep 2019 02:58:13 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id g24sm13469927wrb.35.2019.09.07.02.58.12
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 02:58:13 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907094518.12323-5-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <ed61c057-4f39-0d78-2a0a-9c4abfb27f44@gmail.com>
Date: Sat, 7 Sep 2019 12:58:12 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907094518.12323-5-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 4/5] plat/drivers: Add 9P
 transport for virtio 9P
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NDUgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUg
OVAgdHJhbnNwb3J0IGRyaXZlciBza2VsZXRvbiBmb3IgdmlydGlvIDlQIGRldmljZXMsCj4gYnkg
cHJvdmlkaW5nIHRoZSByZXF1aXJlZCBjb25uZWN0LCBkaXNjb25uZWN0IGFuZCByZXF1ZXN0IGNh
bGxiYWNrcy4gVGhlCj4gcmVxdWVzdCBjYWxsYmFjayBpcyBsZWZ0IGFzIGEgc3R1YiB0byBiZSBp
bXBsZW1lbnRlZCBpbiB0aGUgZm9sbG93aW5nCj4gcGF0Y2hlcy4KPiAKPiBTaWduZWQtb2ZmLWJ5
OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBwbGF0L2RyaXZlcnMv
dmlydGlvL3ZpcnRpb185cC5jIHwgODYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t
Cj4gIDEgZmlsZSBjaGFuZ2VkLCA4MyBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQo+IAo+
IGRpZmYgLS1naXQgYS9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jIGIvcGxhdC9kcml2
ZXJzL3ZpcnRpby92aXJ0aW9fOXAuYwo+IGluZGV4IGFiM2ExYjE2Li44MDk0ZWM3MCAxMDA2NDQK
PiAtLS0gYS9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCj4gKysrIGIvcGxhdC9kcml2
ZXJzL3ZpcnRpby92aXJ0aW9fOXAuYwo+IEBAIC0zNSw2ICszNSw3IEBACj4gICNpbmNsdWRlIDxp
bnR0eXBlcy5oPgo+ICAjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiAgI2luY2x1ZGUgPHVrL2Vzc2Vu
dGlhbHMuaD4KPiArI2luY2x1ZGUgPHVrLzlwZGV2X3RyYW5zLmg+Cj4gICNpbmNsdWRlIDx2aXJ0
aW8vdmlydGlvX2J1cy5oPgo+ICAjaW5jbHVkZSA8dmlydGlvL3ZpcnRpb185cC5oPgo+ICAjaW5j
bHVkZSA8dWsvcGxhdC9zcGlubG9jay5oPgo+IEBAIC01OCw2ICs1OSw4MyBAQCBzdHJ1Y3Qgdmly
dGlvXzlwX2RldmljZSB7Cj4gIAlzdHJ1Y3QgdmlydHF1ZXVlICp2cTsKPiAgCS8qIEh3IHF1ZXVl
IGlkZW50aWZpZXIuICovCj4gIAl1aW50MTZfdCBod3ZxX2lkOwo+ICsJLyogbGlidWs5cCBhc3Nv
Y2lhdGVkIGRldmljZSAoTlVMTCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBpbiB1c2UpLiAqLwo+ICsJ
c3RydWN0IHVrXzlwZGV2ICpwOWRldjsKPiArfTsKPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvXzlw
X2Nvbm5lY3Qoc3RydWN0IHVrXzlwZGV2ICpwOWRldiwKPiArCQkJICAgICBjb25zdCBjaGFyICpk
ZXZpY2VfaWRlbnRpZmllciwKPiArCQkJICAgICBjb25zdCBjaGFyICptb3VudF9hcmdzIF9fdW51
c2VkKQo+ICt7Cj4gKwlzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZGV2ID0gTlVMTDsKPiArCWlu
dCByYyA9IDA7Cj4gKwlpbnQgZm91bmQgPSAwOwo+ICsKPiArCXVrYXJjaF9zcGluX2xvY2soJnZp
cnRpb185cF9kZXZpY2VfbGlzdF9sb2NrKTsKPiArCXVrX2xpc3RfZm9yX2VhY2hfZW50cnkoZGV2
LCAmdmlydGlvXzlwX2RldmljZV9saXN0LCBfbGlzdCkgewo+ICsJCWlmICghc3RyY21wKGRldi0+
dGFnLCBkZXZpY2VfaWRlbnRpZmllcikpIHsKPiArCQkJaWYgKGRldi0+cDlkZXYgIT0gTlVMTCkg
ewo+ICsJCQkJcmMgPSAtRUJVU1k7Cj4gKwkJCQlnb3RvIG91dDsKPiArCQkJfQo+ICsJCQlmb3Vu
ZCA9IDE7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPiArCj4gKwlpZiAoIWZvdW5kKSB7Cj4g
KwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBU
aGUgbWF4aW11bSBtZXNzYWdlIHNpemUgaXMgZ2l2ZW4gYnkgdGhlIG51bWJlciBvZiBzZWdtZW50
cy4KPiArCSAqCj4gKwkgKiBGb3IgcmVhZCByZXF1ZXN0cywgdGhlIHJlcGx5IHdpbGwgYmUgYWJs
ZSB0byBtYWtlIHVzZSBvZiB0aGUgbGFyZ2UKPiArCSAqIG1zaXplLCBhbmQgdGhlIHJlcXVlc3Qg
d2lsbCBub3QgZXhjZWVkIG9uZSBzZWdtZW50Lgo+ICsJICogU2ltaWxhcmx5IGZvciB3cml0ZSBy
ZXF1ZXN0cywgYnV0IGluIHJldmVyc2UuIE90aGVyIHJlcXVlc3RzIHNob3VsZAo+ICsJICogbm90
IGV4Y2VlZCBvbmUgcGFnZSBmb3IgYm90aCByZWN2IGFuZCB4bWl0IGZjYWxscy4KPiArCSAqLwo+
ICsJcDlkZXYtPm1heF9tc2l6ZSA9IChOVU1fU0VHTUVOVFMgLSAxKSAqIF9fUEFHRV9TSVpFOwo+
ICsKPiArCWRldi0+cDlkZXYgPSBwOWRldjsKPiArCXA5ZGV2LT5wcml2ID0gZGV2Owo+ICsKPiAr
b3V0Ogo+ICsJdWthcmNoX3NwaW5fdW5sb2NrKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jayk7
Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmlydGlvXzlwX2Rpc2Nvbm5l
Y3Qoc3RydWN0IHVrXzlwZGV2ICpwOWRldikKPiArewo+ICsJc3RydWN0IHZpcnRpb185cF9kZXZp
Y2UgKmRldjsKPiArCj4gKwlVS19BU1NFUlQocDlkZXYpOwo+ICsJZGV2ID0gcDlkZXYtPnByaXY7
Cj4gKwo+ICsJdWthcmNoX3NwaW5fbG9jaygmdmlydGlvXzlwX2RldmljZV9saXN0X2xvY2spOwo+
ICsJZGV2LT5wOWRldiA9IE5VTEw7Cj4gKwl1a2FyY2hfc3Bpbl91bmxvY2soJnZpcnRpb185cF9k
ZXZpY2VfbGlzdF9sb2NrKTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGlu
dCB2aXJ0aW9fOXBfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2VkLAo+ICsJ
CQkgICAgIHN0cnVjdCB1a185cHJlcSAqcmVxIF9fdW51c2VkKQo+ICt7Cj4gKwlyZXR1cm4gLUVP
UE5PVFNVUFA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNf
b3BzIHY5cF90cmFuc19vcHMgPSB7Cj4gKwkuY29ubmVjdCAgICAgICAgPSB2aXJ0aW9fOXBfY29u
bmVjdCwKPiArCS5kaXNjb25uZWN0ICAgICA9IHZpcnRpb185cF9kaXNjb25uZWN0LAo+ICsJLnJl
cXVlc3QgICAgICAgID0gdmlydGlvXzlwX3JlcXVlc3QKPiArfTsKPiArCj4gK3N0YXRpYyBzdHJ1
Y3QgdWtfOXBkZXZfdHJhbnMgdjlwX3RyYW5zID0gewo+ICsJLm5hbWUgICAgICAgICAgID0gInZp
cnRpbyIsCj4gKwkub3BzICAgICAgICAgICAgPSAmdjlwX3RyYW5zX29wcywKPiArCS5hICAgICAg
ICAgICAgICA9IE5VTEwgLyogU2V0IGJ5IHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24uICovCj4g
IH07Cj4gIAo+ICBzdGF0aWMgaW50IHZpcnRpb185cF9yZWN2KHN0cnVjdCB2aXJ0cXVldWUgKnZx
IF9fdW51c2VkLCB2b2lkICpwcml2IF9fdW51c2VkKQo+IEBAIC0xODUsNyArMjYzLDYgQEAgc3Rh
dGljIGludCB2aXJ0aW9fOXBfc3RhcnQoc3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmQpCj4gIHN0
YXRpYyBpbnQgdmlydGlvXzlwX2FkZF9kZXYoc3RydWN0IHZpcnRpb19kZXYgKnZkZXYpCj4gIHsK
PiAgCXN0cnVjdCB2aXJ0aW9fOXBfZGV2aWNlICpkOwo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsK
PiAgCWludCByYyA9IDA7Cj4gIAo+ICAJVUtfQVNTRVJUKHZkZXYgIT0gTlVMTCk7Cj4gQEAgLTIw
NCw5ICsyODEsOSBAQCBzdGF0aWMgaW50IHZpcnRpb185cF9hZGRfZGV2KHN0cnVjdCB2aXJ0aW9f
ZGV2ICp2ZGV2KQo+ICAJaWYgKHJjKQo+ICAJCWdvdG8gb3V0X2ZyZWU7Cj4gIAo+IC0JdWtwbGF0
X3NwaW5fbG9ja19pcnFzYXZlKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jaywgZmxhZ3MpOwo+
ICsJdWthcmNoX3NwaW5fbG9jaygmdmlydGlvXzlwX2RldmljZV9saXN0X2xvY2spOwo+ICAJdWtf
bGlzdF9hZGQoJmQtPl9saXN0LCAmdmlydGlvXzlwX2RldmljZV9saXN0KTsKPiAtCXVrcGxhdF9z
cGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jaywgZmxhZ3Mp
Owo+ICsJdWthcmNoX3NwaW5fdW5sb2NrKCZ2aXJ0aW9fOXBfZGV2aWNlX2xpc3RfbG9jayk7Cj4g
IG91dDoKPiAgCXJldHVybiByYzsKPiAgb3V0X2ZyZWU6Cj4gQEAgLTIyNCw2ICszMDEsOSBAQCBz
dGF0aWMgaW50IHZpcnRpb185cF9kcnZfaW5pdChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxvY2F0
b3IpCj4gIAl9Cj4gIAo+ICAJYSA9IGRydl9hbGxvY2F0b3I7Cj4gKwl2OXBfdHJhbnMuYSA9IGE7
Cj4gKwo+ICsJcmMgPSB1a185cGRldl90cmFuc19yZWdpc3RlcigmdjlwX3RyYW5zKTsKPiAgb3V0
Ogo+ICAJcmV0dXJuIHJjOwo+ICB9Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:58:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:58:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XU9-0002d4-3O; Sat, 07 Sep 2019 09:58:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XU7-0002cx-EW
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:58:23 +0000
X-Inumbo-ID: 06abbb16-d156-11e9-978d-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 06abbb16-d156-11e9-978d-bc764e2007e4;
 Sat, 07 Sep 2019 09:58:22 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id q12so9586535wmj.4
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 02:58:22 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=T+dTQWLm/ey6BKqySKtSoxvNbO3ZO1ZqmfeJVsK2W0M=;
 b=Tt2SxwpLAPc1BdPrxj7WYpBDwzxiaEJr/c0LydTc3FFDj9PoL7OiF93KtHpNleW0qe
 wWyzbNQJkr+p53hIiGd2zzgz3qZOIxGRHrN+yFd8ckBXrWfpy58k4RShnJ3G69nLN+4H
 143xNpkaIo2LFOZXpDWJhF/kV80hr3zFEHG0jjd5FmkbPIy+zMKQLuNUkgmB4s1zJObd
 m9CkOpH4EFZ4YlIiPEY4sWgsqjX/F4y4dT091+AAf8dpts20tOMOSnuzSER00KLJxgm7
 n8qjDptkg16+Qm2asNoBb3NMqWJ7aFf87JwycwQWpMO5YXtqQuu9yX+Xczym5qeVcrqO
 uckg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=T+dTQWLm/ey6BKqySKtSoxvNbO3ZO1ZqmfeJVsK2W0M=;
 b=CCf5uNV1EyTL5HVjlIDJx10EUYEyKPbjJi2FibVFZ5lZRN42qdkFQleiKRcj/uOaAY
 P0LNzTJvQEklrWurTp8TrrbMGcfvf4l5MBlYYml2Iiiz8LjlKaag+66WTfhDDOBAL94N
 aUIRg8NvfU6hFvCYQuzFFGcrlQq0U30YfY6xzc0nSVQVBEnlN7NNG2p++rPBwvmogK7P
 vffhshK425mQ5PNe49rZCNuSYyVyqjr8eru1akBmId8FDoxt0nM2Z73xVEip/dm5iMtY
 yem3VTRvQnOvoaR/sX3dpssnC3oRzME0gVJUSa3kwG6gEC3jzeVzp8Ru8KnoBuDETl8B
 J5Tg==
X-Gm-Message-State: APjAAAXBwEeuqdYVUtvM3Hp2MhyZcMtG65YVgz/7YffdTcUiCVptvY0Y
 U2tumY8C06+gE/94rQ5I4Nc=
X-Google-Smtp-Source: APXvYqzIHGJbgqm0wsT/4gMc5R3nbw9fLSM8SFesL+vA/75q/5fn1WpwTzajjpenRSSmzDW9wzlDZQ==
X-Received: by 2002:a1c:1a4b:: with SMTP id a72mr10745281wma.44.1567850301743; 
 Sat, 07 Sep 2019 02:58:21 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id t123sm11092240wma.40.2019.09.07.02.58.21
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 02:58:21 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907094518.12323-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907094518.12323-6-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <c4d202a1-6285-e162-f81c-a4bd06303680@gmail.com>
Date: Sat, 7 Sep 2019 12:58:20 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907094518.12323-6-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 5/5] plat/drivers: Implement
 virtio 9P request and recv
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NDUgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggaW1wbGVtZW50
cyB0aGUgdmlydGlvIHJlcXVlc3QgYW5kIHJlY2VpdmUgY2FsbGJhY2tzLgo+IAo+IFNpZ25lZC1v
ZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gLS0tCj4gIHBsYXQvZHJp
dmVycy92aXJ0aW8vdmlydGlvXzlwLmMgfCAxNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKy0KPiAgMSBmaWxlIGNoYW5nZWQsIDE1NiBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygt
KQo+IAo+IGRpZmYgLS1naXQgYS9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jIGIvcGxh
dC9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fOXAuYwo+IGluZGV4IDgwOTRlYzcwLi5mZTBkNjlhYiAx
MDA2NDQKPiAtLS0gYS9wbGF0L2RyaXZlcnMvdmlydGlvL3ZpcnRpb185cC5jCj4gKysrIGIvcGxh
dC9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fOXAuYwo+IEBAIC0zNSw2ICszNSw5IEBACj4gICNpbmNs
dWRlIDxpbnR0eXBlcy5oPgo+ICAjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiAgI2luY2x1ZGUgPHVr
L2Vzc2VudGlhbHMuaD4KPiArI2luY2x1ZGUgPHVrL3NnbGlzdC5oPgo+ICsjaW5jbHVkZSA8dWsv
OXBkZXYuaD4KPiArI2luY2x1ZGUgPHVrLzlwcmVxLmg+Cj4gICNpbmNsdWRlIDx1ay85cGRldl90
cmFucy5oPgo+ICAjaW5jbHVkZSA8dmlydGlvL3ZpcnRpb19idXMuaD4KPiAgI2luY2x1ZGUgPHZp
cnRpby92aXJ0aW9fOXAuaD4KPiBAQCAtNjEsNiArNjQsMTEgQEAgc3RydWN0IHZpcnRpb185cF9k
ZXZpY2Ugewo+ICAJdWludDE2X3QgaHd2cV9pZDsKPiAgCS8qIGxpYnVrOXAgYXNzb2NpYXRlZCBk
ZXZpY2UgKE5VTEwgaWYgdGhlIGRldmljZSBpcyBub3QgaW4gdXNlKS4gKi8KPiAgCXN0cnVjdCB1
a185cGRldiAqcDlkZXY7Cj4gKwkvKiBTY2F0dGVyLWdhdGhlciBsaXN0LiAqLwo+ICsJc3RydWN0
IHVrX3NnbGlzdCBzZzsKPiArCXN0cnVjdCB1a19zZ2xpc3Rfc2VnIHNnc2Vnc1tOVU1fU0VHTUVO
VFNdOwo+ICsJLyogU3BpbmxvY2sgcHJvdGVjdGluZyB0aGUgc2cgbGlzdCBhbmQgdGhlIHZxLiAq
Lwo+ICsJc3BpbmxvY2tfdCBzcGlubG9jazsKPiAgfTsKPiAgCj4gIHN0YXRpYyBpbnQgdmlydGlv
XzlwX2Nvbm5lY3Qoc3RydWN0IHVrXzlwZGV2ICpwOWRldiwKPiBAQCAtMTIwLDEwICsxMjgsOTYg
QEAgc3RhdGljIGludCB2aXJ0aW9fOXBfZGlzY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2
KQo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgdmlydGlvXzlwX3JlcXVlc3Qo
c3RydWN0IHVrXzlwZGV2ICpwOWRldiBfX3VudXNlZCwKPiAtCQkJICAgICBzdHJ1Y3QgdWtfOXBy
ZXEgKnJlcSBfX3VudXNlZCkKPiArc3RhdGljIGludCB2aXJ0aW9fOXBfcmVxdWVzdChzdHJ1Y3Qg
dWtfOXBkZXYgKnA5ZGV2LAo+ICsJCQkgICAgIHN0cnVjdCB1a185cHJlcSAqcmVxKQo+ICB7Cj4g
LQlyZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwlzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZGV2Owo+
ICsJaW50IHJjLCBob3N0X25vdGlmaWVkID0gMDsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g
KwlzaXplX3QgcmVhZF9zZWdzLCB3cml0ZV9zZWdzOwo+ICsJYm9vbCBmYWlsZWQgPSBmYWxzZTsK
PiArCj4gKwlVS19BU1NFUlQocDlkZXYpOwo+ICsJVUtfQVNTRVJUKHJlcSk7Cj4gKwlVS19BU1NF
UlQoVUtfUkVBRF9PTkNFKHJlcS0+c3RhdGUpID09IFVLXzlQUkVRX1JFQURZKTsKPiArCj4gKwkv
Kgo+ICsJICogR2V0IHRoZSByZXF1ZXN0IHN1Y2ggdGhhdCBpdCB3b24ndCBnZXQgZnJlZWQgd2hp
bGUgaXQncwo+ICsJICogdXNlZCBhcyBhIGNvb2tpZSBmb3IgdGhlIHZpcnRxdWV1ZS4KPiArCSAq
Lwo+ICsJdWtfOXByZXFfZ2V0KHJlcSk7Cj4gKwlkZXYgPSBwOWRldi0+cHJpdjsKPiArCXVrcGxh
dF9zcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwo+ICsJdWtfc2dsaXN0
X3Jlc2V0KCZkZXYtPnNnKTsKPiArCj4gKwlyYyA9IHVrX3NnbGlzdF9hcHBlbmQoJmRldi0+c2cs
IHJlcS0+eG1pdC5idWYsIHJlcS0+eG1pdC5zaXplKTsKPiArCWlmIChyYyA8IDApIHsKPiArCQlm
YWlsZWQgPSB0cnVlOwo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCX0KPiArCj4gKwlpZiAocmVx
LT54bWl0LnpjX2J1Zikgewo+ICsJCXJjID0gdWtfc2dsaXN0X2FwcGVuZCgmZGV2LT5zZywgcmVx
LT54bWl0LnpjX2J1ZiwKPiArCQkJCXJlcS0+eG1pdC56Y19zaXplKTsKPiArCQlpZiAocmMgPCAw
KSB7Cj4gKwkJCWZhaWxlZCA9IHRydWU7Cj4gKwkJCWdvdG8gb3V0X3VubG9jazsKPiArCQl9Cj4g
Kwl9Cj4gKwo+ICsJcmVhZF9zZWdzID0gZGV2LT5zZy5zZ19uc2VnOwo+ICsKPiArCXJjID0gdWtf
c2dsaXN0X2FwcGVuZCgmZGV2LT5zZywgcmVxLT5yZWN2LmJ1ZiwgcmVxLT5yZWN2LnNpemUpOwo+
ICsJaWYgKHJjIDwgMCkgewo+ICsJCWZhaWxlZCA9IHRydWU7Cj4gKwkJZ290byBvdXRfdW5sb2Nr
Owo+ICsJfQo+ICsKPiArCWlmIChyZXEtPnJlY3YuemNfYnVmKSB7Cj4gKwkJdWludDMyX3QgcmVj
dl9zaXplID0gcmVxLT5yZWN2LnNpemUgKyByZXEtPnJlY3YuemNfc2l6ZTsKPiArCj4gKwkJcmMg
PSB1a19zZ2xpc3RfYXBwZW5kKCZkZXYtPnNnLCByZXEtPnJlY3YuemNfYnVmLAo+ICsJCQkJcmVx
LT5yZWN2LnpjX3NpemUpOwo+ICsJCWlmIChyYyA8IDApIHsKPiArCQkJZmFpbGVkID0gdHJ1ZTsK
PiArCQkJZ290byBvdXRfdW5sb2NrOwo+ICsJCX0KPiArCj4gKwkJLyogTWFrZSBldXJlIHRoZXJl
IGlzIHN1ZmZpY2llbnQgc3BhY2UgZm9yIFJlcnJvciByZXBsaWVzLiAqLwo+ICsJCWlmIChyZWN2
X3NpemUgPCBVS185UF9SRVJST1JfTUFYU0laRSkgewo+ICsJCQl1aW50MzJfdCBsZWZ0b3ZlciA9
IFVLXzlQX1JFUlJPUl9NQVhTSVpFIC0gcmVjdl9zaXplOwo+ICsKPiArCQkJcmMgPSB1a19zZ2xp
c3RfYXBwZW5kKCZkZXYtPnNnLAo+ICsJCQkJCXJlcS0+cmVjdi5idWYgKyByZWN2X3NpemUsIGxl
ZnRvdmVyKTsKPiArCQkJaWYgKHJjIDwgMCkgewo+ICsJCQkJZmFpbGVkID0gdHJ1ZTsKPiArCQkJ
CWdvdG8gb3V0X3VubG9jazsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCj4gKwl3cml0ZV9zZWdz
ID0gZGV2LT5zZy5zZ19uc2VnIC0gcmVhZF9zZWdzOwo+ICsKPiArCXJjID0gdmlydHF1ZXVlX2J1
ZmZlcl9lbnF1ZXVlKGRldi0+dnEsIHJlcSwgJmRldi0+c2csCj4gKwkJCQkgICAgICByZWFkX3Nl
Z3MsIHdyaXRlX3NlZ3MpOwo+ICsJaWYgKGxpa2VseShyYyA+PSAwKSkgewo+ICsJCVVLX1dSSVRF
X09OQ0UocmVxLT5zdGF0ZSwgVUtfOVBSRVFfU0VOVCk7Cj4gKwkJdmlydHF1ZXVlX2hvc3Rfbm90
aWZ5KGRldi0+dnEpOwo+ICsJCWhvc3Rfbm90aWZpZWQgPSAxOwo+ICsJCXJjID0gMDsKPiArCX0K
PiArCj4gK291dF91bmxvY2s6Cj4gKwlpZiAoZmFpbGVkKQo+ICsJCXVrX3ByX2VycihEUklWRVJf
TkFNRSI6IEZhaWxlZCB0byBhcHBlbmQgdG8gdGhlIHNnIGxpc3QuXG4iKTsKPiArCXVrcGxhdF9z
cGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7Cj4gKwkvKgo+ICsJ
ICogUmVsZWFzZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSA5UCByZXF1ZXN0IGlmIGl0IHdhcyBub3Qg
c3VjY2Vzc2Z1bGx5Cj4gKwkgKiBzZW50Lgo+ICsJICovCj4gKwlpZiAoIWhvc3Rfbm90aWZpZWQp
Cj4gKwkJdWtfOXByZXFfcHV0KHJlcSk7Cj4gKwlyZXR1cm4gcmM7Cj4gIH0KPiAgCj4gIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNfb3BzIHY5cF90cmFuc19vcHMgPSB7Cj4gQEAg
LTEzOCw5ICsyMzIsNjMgQEAgc3RhdGljIHN0cnVjdCB1a185cGRldl90cmFucyB2OXBfdHJhbnMg
PSB7Cj4gIAkuYSAgICAgICAgICAgICAgPSBOVUxMIC8qIFNldCBieSB0aGUgZHJpdmVyIGluaXRp
YWxpemF0aW9uLiAqLwo+ICB9Owo+ICAKPiAtc3RhdGljIGludCB2aXJ0aW9fOXBfcmVjdihzdHJ1
Y3QgdmlydHF1ZXVlICp2cSBfX3VudXNlZCwgdm9pZCAqcHJpdiBfX3VudXNlZCkKPiArc3RhdGlj
IGludCB2aXJ0aW9fOXBfcmVjdihzdHJ1Y3QgdmlydHF1ZXVlICp2cSwgdm9pZCAqcHJpdikKPiAg
ewo+IC0JcmV0dXJuIDA7Cj4gKwlzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZGV2Owo+ICsJc3Ry
dWN0IHVrXzlwcmVxICpyZXEgPSBOVUxMOwo+ICsJdWludDMyX3QgbGVuOwo+ICsJaW50IHJjID0g
MDsKPiArCWludCBoYW5kbGVkID0gMDsKPiArCj4gKwlVS19BU1NFUlQodnEpOwo+ICsJVUtfQVNT
RVJUKHByaXYpOwo+ICsKPiArCWRldiA9IHByaXY7Cj4gKwlVS19BU1NFUlQodnEgPT0gZGV2LT52
cSk7Cj4gKwo+ICsJd2hpbGUgKDEpIHsKPiArCQkvKgo+ICsJCSAqIFByb3RlY3QgYWdhaW5zdCBk
YXRhIHJhY2VzIHdpdGggdmlydGlvXzlwX3JlcXVlc3QoKSBjYWxscwo+ICsJCSAqIHdoaWNoIGFy
ZSB0cnlpbmcgdG8gZW5xdWV1ZSB0byB0aGUgc2FtZSB2cS4KPiArCQkgKi8KPiArCQl1a2FyY2hf
c3Bpbl9sb2NrKCZkZXYtPnNwaW5sb2NrKTsKPiArCQlyYyA9IHZpcnRxdWV1ZV9idWZmZXJfZGVx
dWV1ZShkZXYtPnZxLCAodm9pZCAqKikmcmVxLCAmbGVuKTsKPiArCQl1a2FyY2hfc3Bpbl91bmxv
Y2soJmRldi0+c3BpbmxvY2spOwo+ICsJCWlmIChyYyA8IDApCj4gKwkJCWJyZWFrOwo+ICsKPiAr
CQkvKgo+ICsJCSAqIE5vdGlmeSB0aGUgOVAgQVBJIHRoYXQgdGhpcyByZXF1ZXN0IGhhcyBiZWVu
IHN1Y2Nlc3NmdWxseQo+ICsJCSAqIHJlY2VpdmVkLCByZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8g
dGhlIHJlcXVlc3QuCj4gKwkJICovCj4gKwkJdWtfOXByZXFfcmVjZWl2ZV9jYihyZXEsIGxlbik7
Cj4gKwo+ICsJCS8qCj4gKwkJICogQ2hlY2sgZm9yIFJlcnJvciBtZXNzYWdlcywgZml4dXAgdGhl
IGVycm9yIG1lc3NhZ2UgaWYKPiArCQkgKiBuZWVkZWQuCj4gKwkJICovCj4gKwkJaWYgKHJlcS0+
cmVjdi50eXBlID09IFVLXzlQX1JFUlJPUikgewo+ICsJCQltZW1jcHkocmVxLT5yZWN2LmJ1ZiAr
IHJlcS0+cmVjdi56Y19vZmZzZXQsCj4gKwkJCSAgICAgICByZXEtPnJlY3YuemNfYnVmLAo+ICsJ
CQkgICAgICAgTUlOKHJlcS0+cmVjdi56Y19zaXplLCBsZW4gLSBVS185UF9IRUFERVJfU0laRSkp
Owo+ICsJCX0KPiArCj4gKwkJdWtfOXByZXFfcHV0KHJlcSk7Cj4gKwkJaGFuZGxlZCA9IDE7Cj4g
Kwo+ICsJCS8qIEJyZWFrIGlmIHRoZXJlIGFyZSBubyBtb3JlIGJ1ZmZlcnMgb24gdGhlIHZpcnRx
dWV1ZS4gKi8KPiArCQlpZiAocmMgPT0gMCkKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJLyoK
PiArCSAqIEFzIHRoZSB2aXJ0cXVldWUgbWlnaHQgaGF2ZSBlbXB0eSBzbG90cyBub3csIG5vdGlm
eSBhbnkgdGhyZWFkcwo+ICsJICogYmxvY2tlZCBvbiBFTk9TUEMgZXJyb3JzLgo+ICsJICovCj4g
KwlpZiAoaGFuZGxlZCkKPiArCQl1a185cGRldl94bWl0X25vdGlmeShkZXYtPnA5ZGV2KTsKPiAr
Cj4gKwlyZXR1cm4gaGFuZGxlZDsKPiAgfQo+ICAKPiAgc3RhdGljIGludCB2aXJ0aW9fOXBfdnFf
YWxsb2Moc3RydWN0IHZpcnRpb185cF9kZXZpY2UgKmQpCj4gQEAgLTE2NSw2ICszMTMsOCBAQCBz
dGF0aWMgaW50IHZpcnRpb185cF92cV9hbGxvYyhzdHJ1Y3QgdmlydGlvXzlwX2RldmljZSAqZCkK
PiAgCQlnb3RvIGV4aXQ7Cj4gIAl9Cj4gIAo+ICsJdWtfc2dsaXN0X2luaXQoJmQtPnNnLCBBUlJB
WV9TSVpFKGQtPnNnc2VncyksICZkLT5zZ3NlZ3NbMF0pOwo+ICsKPiAgCWQtPnZxID0gdmlydGlv
X3ZxdWV1ZV9zZXR1cChkLT52ZGV2LAo+ICAJCQkJICAgIGQtPmh3dnFfaWQsCj4gIAkJCQkgICAg
cWRlc2Nfc2l6ZSwKPiBAQCAtMjcyLDYgKzQyMiw3IEBAIHN0YXRpYyBpbnQgdmlydGlvXzlwX2Fk
ZF9kZXYoc3RydWN0IHZpcnRpb19kZXYgKnZkZXYpCj4gIAkJcmMgPSAtRU5PTUVNOwo+ICAJCWdv
dG8gb3V0Owo+ICAJfQo+ICsJdWthcmNoX3NwaW5fbG9ja19pbml0KCZkLT5zcGlubG9jayk7Cj4g
IAlkLT52ZGV2ID0gdmRldjsKPiAgCXZpcnRpb185cF9mZWF0dXJlX3NldChkKTsKPiAgCXJjID0g
dmlydGlvXzlwX2NvbmZpZ3VyZShkKTsKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 09:59:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 09:59:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XVd-0002fD-9e; Sat, 07 Sep 2019 09:59:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XVc-0002f8-BZ
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 09:59:56 +0000
X-Inumbo-ID: 3dbdba00-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3dbdba00-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 09:59:55 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gstNjixjbihQu1PI3777fBgXbt6lbwwIPBnG1blT3FMUhfjc39dV028c6xkQUFbJfM8aU5H7uw5zTmP2UbJYv3agzqgvIZzv1EI4Y1otaRu1c764w36SyYTPZNCSdzgafN0h/cM8sntmwkRy3csyOUtSFKSw1LdzYSaKGVFRBUz0+S8AUwpJU2K3Ms9ZGA2/S6k1pTnL2gKH81ek1dolHCw5diushZqwXnD/6S4klbmnaNqwJKSGp/Gr5Gi01sSuiKq9i1BO9hjw1hv490/FiAXcW92QsjLY4dvB2BGiImrzsmFhyLnf2mpLu2dpeteY4y9Guj7Omu9mWegZah+WNw==
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=U34UTu5OXDXTwOeaTkDMPmMFZnVYaSPDVBo0UkR2CVU=;
 b=Bzu6wF61yfuZyqfec1M6KH6nKu1r3LSSRFSh9rrEUTQ9MksKpAUUWTzxoQqvq3Cza08dsO3HZtGGIvpW9icCHEzKN+xjEQ6l4ASYGjaZtKGg4l97a4VYR+mNF11J5f6AjgmUEbsmas7ezKPQaPhuO0OyKZqLq85bnArHY5s1+HszsdUBQjUOl7Zuv4uObO20Uu64ezs1E+G841WDx9TZrhvpM9x2hhfU3ge2pmKHGINotEPXeWZ4afnbBMhLlUfAeJSQ7cjy67cwNx6fiI8GDFtJq10qJkGZvHbh0EcHwtppva/S/Q5AhfsMnsuXhaB4ol+B02u+I4UyE0afvuJSgg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:53 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:53 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 0/7] 9pfs filesystem operations
Thread-Index: AQHVZWL+ZhSY44U0TUGTSdTjO/d/tQ==
Date: Sat, 7 Sep 2019 09:59:52 +0000
Message-ID: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 9bd1bf9a-21a9-4db8-0ea6-08d7337a20e7
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB5018607B9D6410D74CAA231EA6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:3173;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(4744005)(54906003)(478600001)(476003)(5640700003)(2616005)(2351001)(316002)(25786009)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(5660300002)(102836004)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(305945005)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: niyErOafsLaLqt9zkzCovuBYqdeVsXkuuo5eDmNRTgFPbGIRHGLvR/HnebnFtxwyuhGjHaRj/s0HjHv8qJkI1mW7tclUuNnrPKUfnynQCYD4ulrrfiG4h8qSW1o8059xsadquKdEX1KOsm0n55hDXMBBRAtrg/XdRaZtejRjghuAek7qTA2YhiOoS5x/FcLHeYRBTVh+yG7Y/kTdBv8aGnzWnGYcIBb0LC4VWQF6EzQ6NIw5OUQKe7JGSA4CIQ/ilFQtKZ+UhaUY9dRQsd3TfD9nfcC/w+SaMmLEEYlhwPYUbXU5eRXoeNXmRqejLUu3cF2+uo0Zf4r33BHm5DSDGp5RmTe6x86tTYQFuuGlRm/rZVJAws+iWEznzdNIMCZyyR5smVc+gpk16sYiMgcl8bC708ssq4L6e3AHk+28R2U=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 9bd1bf9a-21a9-4db8-0ea6-08d7337a20e7
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:52.8843 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: TKpWbJnP75li8CRT/yehRcF1o8pG70oU/Db8q8GwYu8MGSdEyPlN61BTiIL7ETKO8FSSc9c1O5x3gC74SDtECaGiuuCHXD3Cj9p3x3Ignyt1sar5lzVqXcHPoah7bT0Q
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 0/7] 9pfs filesystem operations
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucyBpbXBsZW1lbnRhdGlvbnMgZm9yIDlwZnMuCgpDcmlz
dGlhbiBCYW51ICg3KToKICBsaWIvOXBmczogQWRkIDlwZnMgc2tlbGV0b24KICBsaWIvOXBmczog
QWRkIDlwZnMgaGVhZGVyCiAgbGliLzlwZnM6IEltcGxlbWVudCBtb3VudCBhbmQgdW5tb3VudAog
IGxpYi85cGZzOiBBZGQgbG9va3VwIGFuZCBpbmFjdGl2ZSB2bm9wcwogIGxpYi85cGZzOiBBZGQg
Y3JlYXRlLCBta2Rpciwgcm1kaXIsIHJlbW92ZSB2bm9wcwogIGxpYi85cGZzOiBBZGQgb3Blbiwg
Y2xvc2UgYW5kIHJlYWRkaXIgdm5vcHMKICBsaWIvOXBmczogQWRkIHJlYWQgYW5kIHdyaXRlIHZu
b3BzCgogbGliLzlwZnMvOXBmcy5oICAgICAgICB8IDEwMiArKysrKysrCiBsaWIvOXBmcy85cGZz
X3Zmc29wcy5jIHwgMTg5ICsrKysrKysrKysrKysKIGxpYi85cGZzLzlwZnNfdm5vcHMuYyAgfCA1
ODkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi85cGZzL0Nv
bmZpZy51ayAgICAgfCAgIDUgKwogbGliLzlwZnMvTWFrZWZpbGUudWsgICB8ICAgNCArCiBsaWIv
OXBmcy9leHBvcnRzeW1zLnVrIHwgICAxICsKIGxpYi9Db25maWcudWsgICAgICAgICAgfCAgIDEg
KwogbGliL01ha2VmaWxlLnVrICAgICAgICB8ICAgMSArCiA4IGZpbGVzIGNoYW5nZWQsIDg5MiBp
bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliLzlwZnMvOXBmcy5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgbGliLzlwZnMvOXBmc192ZnNvcHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp
Yi85cGZzLzlwZnNfdm5vcHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi85cGZzL0NvbmZpZy51
awogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi85cGZzL01ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliLzlwZnMvZXhwb3J0c3ltcy51awoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:00:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:00:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XVi-0002oW-BR; Sat, 07 Sep 2019 10:00:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XVh-0002fi-Bt
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:00:01 +0000
X-Inumbo-ID: 3ec86292-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3ec86292-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 09:59:56 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WUgFaMruE1BG24Vg3AGLSoZAIv8vbMGxKgCOUa6//Q1kKVmxzVPzbdVTjgOwRbCzJVkactb33Swv5f27dHlINdVT5gAMd3n8a17VdYrprY3OF3vOJz3o9DNGHYcQ1RUoXX+nhA9He2jUH93TZhjaQguB09dkN6zFubmZKWODFvpIFWAkkf1vGq5ulgajB9EyjMg2X67N+IwHav1LKaNMb9Q5hCeXjQufcpW49h1ipnwet0ZWxqvexxZaXjWKwS1B+O69u2QYzVUg1RwvRQvpUfUTnU5Q4I2OISuZiAwZjYfxJfzOrI7PIrpTygipvMgzwKVErGEf7CDAJMl8i/EwCw==
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=Sa3RTwsSuCNGHidvYFRoIwRFWin3p9X76l683Gqkm9M=;
 b=QMJDFuCOBMYMjYe6VtWUdm3oHs0d5G4YehER7Fm7EjV+AbrUpUR7aCO1QeSZCUB0wjSbQX9g5EVOgiIOX3G4c1a0S5J2meHLbHaNF95Uke2HLQDbYyn1DlSHGwvYnZl0kkbXxcUNL6szUFYEqF4ymBcp4xHrolhHSzh3A7kbq0Cc+6GoGq2m+5YaCJCvgQ+aIEGwyxthfxJLJ/s3MytdBLGG3EogzlRJ3EKPOdnwMCPmk5lFpVCsg3AH2b9G5smAtRKT8lX+MWtZVon4MXbr1/JmD22kluKSJ5x300Z54+dfb/pyjuKBcKe8t/mF5MQ4CkSDnBtd6Z2HGjSEbRHykg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:53 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:53 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 1/7] lib/9pfs: Add 9pfs skeleton
Thread-Index: AQHVZWL+hQbuoZBzuECGk2C216nrRg==
Date: Sat, 7 Sep 2019 09:59:53 +0000
Message-ID: <20190907095945.12739-2-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 15a85c70-a537-4575-8e16-08d7337a2142
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-microsoft-antispam-prvs: <PR1PR01MB50182154093A516C96E2EAF7A6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2733;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(54906003)(478600001)(476003)(5640700003)(2616005)(446003)(2351001)(316002)(25786009)(11346002)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(5660300002)(102836004)(76176011)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(305945005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: g2XSEJfJac+QGRBnIimu4512wDh7PSpo+7JqRrwQlKqOX7Y0IQFTLMR+Y/Ew4vap//hhm3XyhoD+bSmA0tN32RP05RypYWvU+OfrnNkd1kdCgLn+ldHO9HKGnmZeaCQxicjzxDDnfS0gvIH/XaQjdOceYATit8LsEk0l8DjtriPklkRGr6ubaAh2sWB7SoTRADJzpVkSVjiR2b6Yk82xcNAZxsZs8vaG9G+p6Qxc3DQi4IquC04+pUTrNKCSsqJTAfFOWi/M7EcqTsD+PZ2MdEVBP6OAetfJdd/yPimttnVekCqssg33DZ/0V8oUhfvHorI8ILo/SmVZX9Wi2+znO053HOXF/TV5kUaqVejRLnlSojQvMxdPflhaC4mbw/ixpYN4ZVuDoAW24AcX+3xBbfPwF9vzgEHwyniSxuTsMNc=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 15a85c70-a537-4575-8e16-08d7337a2142
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:53.5060 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: r4mRH9uKltldbFiALrwz+9BGiguolYuvvfIKBwQZ01EDf8UQDeQaVNBRINX7T4uG9GTH6Mtcsycur9jq1nIaSH8WvcZKYJyzWxXwofNiyXJK4Zm6gntgIG1D5tXDL4No
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 1/7] lib/9pfs: Add 9pfs skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgOXAgZmlsZXN5c3RlbSBhcyBhIHNlcGFyYXRlIGxpYnJhcnksIHBsYWNlZAppbiB0aGUgbWVu
dWNvbmZpZyB1bmRlciAidmZzY29yZSIsIHdpdGggb3RoZXIgYXZhaWxhYmxlIGZpbGVzeXN0ZW1z
LgoKU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KLS0tCiBs
aWIvOXBmcy9Db25maWcudWsgICAgIHwgNSArKysrKwogbGliLzlwZnMvTWFrZWZpbGUudWsgICB8
IDEgKwogbGliLzlwZnMvZXhwb3J0c3ltcy51ayB8IDEgKwogbGliL0NvbmZpZy51ayAgICAgICAg
ICB8IDEgKwogbGliL01ha2VmaWxlLnVrICAgICAgICB8IDEgKwogNSBmaWxlcyBjaGFuZ2VkLCA5
IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvOXBmcy9Db25maWcudWsKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvOXBmcy9NYWtlZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0
IGxpYi85cGZzL2V4cG9ydHN5bXMudWsKCmRpZmYgLS1naXQgYS9saWIvOXBmcy9Db25maWcudWsg
Yi9saWIvOXBmcy9Db25maWcudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu
LjBmYjNjNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliLzlwZnMvQ29uZmlnLnVrCkBAIC0wLDAg
KzEsNSBAQAorY29uZmlnIExJQjlQRlMKKwlib29sICI5cGZzOiA5cCBmaWxlc3lzdGVtIgorCWRl
ZmF1bHQgeQorCWRlcGVuZHMgb24gTElCVkZTQ09SRQorCWRlcGVuZHMgb24gTElCVUs5UApkaWZm
IC0tZ2l0IGEvbGliLzlwZnMvTWFrZWZpbGUudWsgYi9saWIvOXBmcy9NYWtlZmlsZS51awpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTkzZWNjMzQKLS0tIC9kZXYvbnVsbAor
KysgYi9saWIvOXBmcy9NYWtlZmlsZS51awpAQCAtMCwwICsxIEBACiskKGV2YWwgJChjYWxsIGFk
ZGxpYl9zLGxpYjlwZnMsJChDT05GSUdfTElCOVBGUykpKQpkaWZmIC0tZ2l0IGEvbGliLzlwZnMv
ZXhwb3J0c3ltcy51ayBiL2xpYi85cGZzL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAuLjYyMWU5NGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliLzlwZnMv
ZXhwb3J0c3ltcy51awpAQCAtMCwwICsxIEBACitub25lCmRpZmYgLS1naXQgYS9saWIvQ29uZmln
LnVrIGIvbGliL0NvbmZpZy51awppbmRleCBmMzU4OGFhZi4uMzBlYzA5NGQgMTAwNjQ0Ci0tLSBh
L2xpYi9Db25maWcudWsKKysrIGIvbGliL0NvbmZpZy51awpAQCAtNDMsNiArNDMsNyBAQCBzb3Vy
Y2UgImxpYi9zeXNjYWxsX3NoaW0vQ29uZmlnLnVrIgogc291cmNlICJsaWIvdmZzY29yZS9Db25m
aWcudWsiCiBzb3VyY2UgImxpYi9yYW1mcy9Db25maWcudWsiCiBzb3VyY2UgImxpYi9kZXZmcy9D
b25maWcudWsiCitzb3VyY2UgImxpYi85cGZzL0NvbmZpZy51ayIKIHNvdXJjZSAibGliL3VrbG9j
ay9Db25maWcudWsiCiBzb3VyY2UgImxpYi91a21waS9Db25maWcudWsiCiBzb3VyY2UgImxpYi91
a3N3cmFuZC9Db25maWcudWsiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUudWsgYi9saWIvTWFr
ZWZpbGUudWsKaW5kZXggZTYyZTYwYWYuLjg5YTU3ZDcwIDEwMDY0NAotLS0gYS9saWIvTWFrZWZp
bGUudWsKKysrIGIvbGliL01ha2VmaWxlLnVrCkBAIC0yMSw2ICsyMSw3IEBAICQoZXZhbCAkKGNh
bGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3N5c2NhbGxfc2hpbSkpCiAkKGV2
YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi92ZnNjb3JlKSkKICQo
ZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3JhbWZzKSkKICQo
ZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL2RldmZzKSkKKyQo
ZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliLzlwZnMpKQogJChl
dmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWtsb2NrKSkKICQo
ZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrbXBpKSkKICQo
ZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrYnVzKSkKLS0g
CjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:00:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:00:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XVn-0003LF-DS; Sat, 07 Sep 2019 10:00:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XVm-0003Gr-CH
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:00:06 +0000
X-Inumbo-ID: 3f6b3fc6-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3f6b3fc6-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 09:59:57 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ob/w5qeArIXfqpZFoGrX2D0I6G5LgAUqpQmSYwHlJQdISUSDguAylRTP4lNr3y9pAsx3ZNXrhJ4/8cmsNWStY3bCahgruXMUbz4hiurRFSy5TWJqrPT8OVWwfbf1ABUQd2FDF/8S4AJ3e5G5Srerg+LSGaK0SRUT59RN3BxtHl4TpczBU1AabXXnyMNv5R9clQ9grkXSzG5JhizpmOGSN40K7Php9AFqVZ0W9Ilyk4UjlcfmnxBQOvsG4CGWINUQFr2RJh3CBfUldXaTHeDQuNSTiczANY5Q2qXiDI65bVHI13nkLTrVF1W2FSbDpaPcyZQ7r5+PJK/Y20apwifA1Q==
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=Hk9e/P8wTAUJFojTZk+kGbUszgD00CWn0oDLxu/xysM=;
 b=EvzLh1Q0WlsVH8HAerQcysBvWeR8KhGkzlklLxn5V3dCYPNUn0T7a2gZzT2icuWF9MWSeMMzERlFYgAlehyimlvrl/ksrilC9EhiuzOjT0AwqLK8CjBl5IMt+6wudq3OjAtHaVcx7BL+vaIP8VCCN0CSh086udXRDXCaviUa8wbiqzE0oznMbaK/XLGBTzUJrGVlNqoiZJAYaB1Apenhh2WhPWbJPp8siKGkPv+Dmk254ZWQ4Afc3+/K2eBOACkygihjDayF+XHxp5XnVfySR4FGdga/qiByZ6+7TIoO4BV8iaOl/5vb7yirVDj4vqWCOfGJXqNtso7x2GYRFHujFQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:54 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:54 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 2/7] lib/9pfs: Add 9pfs header
Thread-Index: AQHVZWL//PnmkZZ/3keYbCvKtXkoHg==
Date: Sat, 7 Sep 2019 09:59:53 +0000
Message-ID: <20190907095945.12739-3-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 8666e8e2-dadc-49f4-2879-08d7337a2192
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-microsoft-antispam-prvs: <PR1PR01MB5018100D7D3CF9843109D015A6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(54906003)(478600001)(476003)(5640700003)(2616005)(446003)(2351001)(316002)(25786009)(11346002)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(5660300002)(102836004)(76176011)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(305945005)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: lvEf7hqaxU8ZZNdKawRXrGOvEsr1jYg5wx+AXbxMTb42bu6+c4NDt3nyXSi2rcZRMh/ztHf2yM9r+w3JwUo6rSSAig10vFAV2hPMzo2CJX2yr+iBfRzLyXDATC0S8DnoXjZ4NkbrvGwL4Wtw8z8jC6pl5tC03rZsy5T49dRB4WrTA/EptCn6Z51UKTfmxvk+NzqJdE2n+NcdkaYUpZUPJz/y4gPMoRDVCq/AaB6dKM6BIaGQHwgg2km1inI8zju9ktREhFlHAf5QxVzkAiNy/WQ5R346LwX6+zH2TuoFByR8+Ldw+cAXEnCRaevlllPWSC0PQm0v/XjGpacX8nD/9rqZrmDBOlGijCBREsfvqy2/3Jc61atDnC5Pv27ATrrtfpxA/GUM4Bbv6k9FjcO2+ub/5/ZaALX5PDBbqTUjioc=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 8666e8e2-dadc-49f4-2879-08d7337a2192
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:54.0336 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: gb9d3+3/0KO0GQi1DMH4mB+kb1dbcbra4/DTZ11j+RSXde2n30pOuv/CU+AzKj/zW+wvA5ykza7p2KBVAnQtiVMPnAhsWzRz/c5w8j0+k9WvZbwQHxzXaPCbKknI4sEb
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 2/7] lib/9pfs: Add 9pfs header
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgOXBmcyBoZWFkZXIgd2hpY2ggY29udGFpbnMgdGhlIGRhdGEgc3RydWN0dXJlcwp1c2VkIGJ5
IHRoZSBmaWxlIHN5c3RlbSBhbmQgaGVscGVyIG1hY3JvcyBmb3IgYWNjZXNzaW5nIHRoZW0gZnJv
bQpWRlMgc3RydWN0dXJlcy4KClNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBn
bWFpbC5jb20+Ci0tLQogbGliLzlwZnMvOXBmcy5oIHwgMTAyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEwMiBpbnNlcnRp
b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliLzlwZnMvOXBmcy5oCgpkaWZmIC0tZ2l0IGEv
bGliLzlwZnMvOXBmcy5oIGIvbGliLzlwZnMvOXBmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwLi4zNTcxYzg1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi85cGZzLzlwZnMu
aApAQCAtMCwwICsxLDEwMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNs
YXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1
Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
CisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisg
KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9U
IEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKyNpZm5kZWYgX19V
S185UEZTX18KKyNkZWZpbmUgX19VS185UEZTX18KKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNp
bmNsdWRlIDx1ay85cGRldi5oPgorI2luY2x1ZGUgPHVrLzlwZmlkLmg+CisKKyNpbmNsdWRlIDx2
ZnNjb3JlL3ByZXguaD4KKworLyoKKyAqIEN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IHRoZSA5UDIw
MDAudSB2YXJpYW50IG9mIHRoZSBwcm90b2NvbC4KKyAqLworZW51bSB1a185cGZzX3Byb3RvIHsK
KwlVS185UF9QUk9UT18yMDAwVSwKKwlVS185UF9QUk9UT19NQVgKK307CisKK3N0cnVjdCB1a185
cGZzX21vdW50X2RhdGEgeworCS8qIDlQIGRldmljZS4gKi8KKwlzdHJ1Y3QgdWtfOXBkZXYJCSpk
ZXY7CisJLyogV2FudGVkIHRyYW5zcG9ydC4gKi8KKwlzdHJ1Y3QgdWtfOXBkZXZfdHJhbnMJKnRy
YW5zOworCS8qIFByb3RvY29sIHZlcnNpb24gdXNlZC4gKi8KKwllbnVtIHVrXzlwZnNfcHJvdG8J
cHJvdG87CisJLyogVXNlcm5hbWUgdG8gYXR0ZW1wdCB0byBtb3VudCBhcyBvbiB0aGUgcmVtb3Rl
IHNlcnZlci4gKi8KKwljb25zdCBjaGFyCQkqdW5hbWU7CisJLyogRmlsZSB0cmVlIHRvIGFjY2Vz
cyB3aGVuIG9mZmVyZWQgbXVsdGlwbGUgZXhwb3J0ZWQgZmlsZXN5c3RlbXMuICovCisJY29uc3Qg
Y2hhcgkJKmFuYW1lOworfTsKKworc3RydWN0IHVrXzlwZnNfZmlsZV9kYXRhIHsKKwkvKiBGaWQg
YXNzb2NpYXRlZCB3aXRoIHRoZSA5cGZzIGZpbGUuICovCisJc3RydWN0IHVrXzlwZmlkICAgICAg
ICAqZmlkOworCS8qCisJICogQnVmZmVyIGZvciBwZXJzaXN0aW5nIHJlc3VsdHMgZnJvbSBhIDlQ
IHJlYWQgb3BlcmF0aW9uIGFjcm9zcworCSAqIHJlYWRkaXIoKSBjYWxscy4KKwkgKi8KKwljaGFy
ICAgICAgICAgICAgICAgICAgICpyZWFkZGlyX2J1ZjsKKwkvKgorCSAqIE9mZnNldCB3aXRoaW4g
dGhlIGJ1ZmZlciB3aGVyZSB0aGUgc3RhdCBvZiB0aGUgbmV4dCBjaGlsZCBjYW4KKwkgKiBiZSBm
b3VuZC4KKwkgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgIHJlYWRkaXJfb2ZmOworCS8qIFRv
dGFsIHNpemUgb2YgdGhlIGRhdGEgaW4gdGhlIHJlYWRkaXIgYnVmLiAqLworCWludCAgICAgICAg
ICAgICAgICAgICAgcmVhZGRpcl9zejsKK307CisKK3N0cnVjdCB1a185cGZzX25vZGVfZGF0YSB7
CisJLyogRmlkIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmZzIG5vZGUuICovCisJc3RydWN0IHVrXzlw
ZmlkICAgICAgICAqZmlkOworCS8qIE51bWJlciBvZiBmaWxlcyBvcGVuZWQgZnJvbSB0aGUgdmZz
IG5vZGUuICovCisJaW50ICAgICAgICAgICAgICAgICAgICBuYl9vcGVuX2ZpbGVzOworCS8qIElz
IGEgOVAgcmVtb3ZlIGNhbGwgcmVxdWlyZWQgd2hlbiBuYl9vcGVuX2ZpbGVzIHJlYWNoZXMgMD8g
Ki8KKwlib29sICAgICAgICAgICAgICAgICAgIHJlbW92ZWQ7Cit9OworCitpbnQgdWtfOXBmc19h
bGxvY2F0ZV92bm9kZV9kYXRhKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB1a185cGZpZCAqZmlk
KTsKK3ZvaWQgdWtfOXBmc19mcmVlX3Zub2RlX2RhdGEoc3RydWN0IHZub2RlICp2cCk7CisKKy8q
IERlZmF1bHQgcmVhZGRpciBidWZmZXIgc2l6ZS4gKi8KKyNkZWZpbmUgVUtfOVBGU19SRUFERElS
X0JVRlNaCTgxOTIKKworI2RlZmluZSBVS185UEZTX0ZEKGZpbGUpICgoc3RydWN0IHVrXzlwZnNf
ZmlsZV9kYXRhICopIChmaWxlKS0+Zl9kYXRhKQorI2RlZmluZSBVS185UEZTX05EKHZub2RlKSAo
KHN0cnVjdCB1a185cGZzX25vZGVfZGF0YSAqKSAodm5vZGUpLT52X2RhdGEpCisjZGVmaW5lIFVL
XzlQRlNfVkZJRCh2bm9kZSkgKFVLXzlQRlNfTkQodm5vZGUpLT5maWQpCisjZGVmaW5lIFVLXzlQ
RlNfTUQobW91bnQpICgoc3RydWN0IHVrXzlwZnNfbW91bnRfZGF0YSAqKSAobW91bnQpLT5tX2Rh
dGEpCisKKyNlbmRpZiAvKiBfX1VLXzlQRlNfXyAqLwotLSAKMi4yMC4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:00:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:00:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XVs-0003M2-FK; Sat, 07 Sep 2019 10:00:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XVr-0003Ln-Cb
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:00:11 +0000
X-Inumbo-ID: 401bcabc-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 401bcabc-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 09:59:58 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GYe7llLkvJ4xGgOw99m3UTMcdni337hoQeQ+8kTqKqfSm1/ExK8cb6cIcH9J0Yy5jmx8UVHfWWWQVLZ7jou6VvX6xlUHWCXA5q5gOLq8yxg2DuUGYjya8YDZPEx+K0EHUH8HyjDCT48lHUaLsBMqHBmH0dNnW6ugpGelxUCbTo2kvcvIYgP+2z0q1hrXT57Cv3qo2G/KqTljbXessN9YXb4uZNZWETm2dY9p+V2BZ6Im0W+VRMmj9b+3p6taewV+vFieEZgYDCzXJ+hNmQ9nwx2zW+R9g+wozHUg0Yd2L1B1jA+TDONef0mETo3dzhSYmcYG9siYcVq2abL+TW7kPw==
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=OO1IJG0GEdxXiIIjpwIXgqwadvD+fHBLYuR+3z9dduA=;
 b=ie469ysZX32MyhovMfpMokED3kXnChhfQVnf+8Q+2RKc/HPgyvuw3Ltp+V0w0mGsGQgti2VIucpbsM/CSsojKjgn8TvbDPsmjNdLlVhQupwm4Z9oYNDAw7CVLMglDwPLVgjxKhTShiCTv7xJPgEY1NHldhh+R4iMPiyZeJmvApEJjS+2X1Da0P8id8z6qJRg6jfjbCerJ+Voadon89rv7Cxrwtyh5F4nHOhPFbWxIoUDFOBfTcT5eaVceOVbO1M8hvpR7wAWOgo1EJsOeXV1K0uidPQudiX+z6YOiuTGwCGhI2fXOCvBfmQEpuvdFwD9UG7nI8pWKAA0FbhbIBLOmQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:54 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:54 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 3/7] lib/9pfs: Implement mount and unmount
Thread-Index: AQHVZWL/bjgUpPIPgk2b5HJm5ofSSQ==
Date: Sat, 7 Sep 2019 09:59:54 +0000
Message-ID: <20190907095945.12739-4-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: d56a2ec1-0810-485d-ad1b-08d7337a21e2
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-microsoft-antispam-prvs: <PR1PR01MB5018DD110ED2650C192102E0A6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:7691;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(54906003)(478600001)(476003)(5640700003)(2616005)(446003)(2351001)(316002)(25786009)(11346002)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(30864003)(5660300002)(102836004)(76176011)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(5024004)(305945005)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: NU0OU/B971C5Mhatpig9omHXkiAJS08VasqGRJvItcm3UuPWRId2A+6no7v7NURJYP/o8Wq78jSUiDkXRHV+AS+Jr7gIUl9nLM3jmuSbOdZJmBNY5ZLGu6UcfmiOguzYVT2VwN3srwNSq3UAfIu8Nds8Ke6ecmiPpBS/7hBu/dpwOdyYh4XuVp0O2vvS0UoO178FG6M2SoEhhHRDnVR0hrH/46CAy7Q1/D+pOKRSsN3w5yXcsuZzrCcirmpeTdz5DmVvzvmTmC33rEdT9Zc1tBhJ8EBjsRSGx3J4wd12O+xTIKei70cX9K7rzI2u/Yvv0ea02Tog3VwAy6Uu3f41HLwy0xMJs/xDMs3uvL+eNbJA1Vwhuhe6cNwB2BJ4Fshd/KiwwFyVByww7X18V+/6Lp/uccIiQWIDFGOq8YFtFqE=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: d56a2ec1-0810-485d-ad1b-08d7337a21e2
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:54.5173 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: V5LGUGhWvNLNK0zZQ8prctI5/tVlEI8kOOYBdg2Wc/7N04O4e2s5PIrrG9Ph2cvUJxMGI232Fib7zeI5upRs6SrlpjmfVirdUeHQuBU2YG9/2EFt1uSBMyVblJLtXVQI
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 3/7] lib/9pfs: Implement mount and
 unmount
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyB0aGUgbW91bnQgYW5kIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgYWRkcyB0aGUKc2tlbGV0
b24gZm9yIFZGUyBub2RlIG9wZXJhdGlvbnMuCgpTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51
IDxjcmlzdGJAZ21haWwuY29tPgotLS0KIGxpYi85cGZzLzlwZnNfdmZzb3BzLmMgfCAxODkgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi85cGZzLzlwZnNfdm5v
cHMuYyAgfCAxMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi85cGZzL01ha2Vm
aWxlLnVrICAgfCAgIDMgKwogMyBmaWxlcyBjaGFuZ2VkLCAzMjcgaW5zZXJ0aW9ucygrKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGxpYi85cGZzLzlwZnNfdmZzb3BzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvOXBmcy85cGZzX3Zub3BzLmMKCmRpZmYgLS1naXQgYS9saWIvOXBmcy85cGZzX3Zmc29w
cy5jIGIvbGliLzlwZnMvOXBmc192ZnNvcHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uYWNjYjNhNTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvOXBmcy85cGZzX3Zmc29w
cy5jCkBAIC0wLDAgKzEsMTg5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt
Q2xhdXNlICovCisvKgorICogQXV0aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNv
bT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2Yg
QnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUK
KyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBO
T1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUg
PHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVrL2VycnB0ci5oPgorI2luY2x1ZGUgPHVrLzlwLmg+
CisjaW5jbHVkZSA8dWsvOXBkZXZfdHJhbnMuaD4KKyNpbmNsdWRlIDx2ZnNjb3JlL21vdW50Lmg+
CisjaW5jbHVkZSA8dmZzY29yZS9kZW50cnkuaD4KKworI2luY2x1ZGUgIjlwZnMuaCIKKworZXh0
ZXJuIHN0cnVjdCB2bm9wcyB1a185cGZzX3Zub3BzOworCitzdGF0aWMgaW50IHVrXzlwZnNfbW91
bnQoc3RydWN0IG1vdW50ICptcCwgY29uc3QgY2hhciAqZGV2LCBpbnQgZmxhZ3MsCisJCQkgY29u
c3Qgdm9pZCAqZGF0YSk7CisKK3N0YXRpYyBpbnQgdWtfOXBmc191bm1vdW50KHN0cnVjdCBtb3Vu
dCAqbXAsIGludCBmbGFncyk7CisKKyNkZWZpbmUgdWtfOXBmc19zeW5jCQkoKHZmc29wX3N5bmNf
dCl2ZnNjb3JlX251bGxvcCkKKyNkZWZpbmUgdWtfOXBmc192Z2V0CQkoKHZmc29wX3ZnZXRfdCl2
ZnNjb3JlX251bGxvcCkKKyNkZWZpbmUgdWtfOXBmc19zdGF0ZnMJCSgodmZzb3Bfc3RhdGZzX3Qp
dmZzY29yZV9udWxsb3ApCisKK3N0cnVjdCB2ZnNvcHMgdWtfOXBmc192ZnNvcHMgPSB7CisJLnZm
c19tb3VudAk9IHVrXzlwZnNfbW91bnQsCisJLnZmc191bm1vdW50CT0gdWtfOXBmc191bm1vdW50
LAorCS52ZnNfc3luYwk9IHVrXzlwZnNfc3luYywKKwkudmZzX3ZnZXQJPSB1a185cGZzX3ZnZXQs
CisJLnZmc19zdGF0ZnMJPSB1a185cGZzX3N0YXRmcywKKwkudmZzX3Zub3BzCT0gJnVrXzlwZnNf
dm5vcHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmZzY29yZV9mc190eXBlIHVrXzlwZnNfZnMgPSB7
CisJLnZzX25hbWUJPSAiOXBmcyIsCisJLnZzX2luaXQJPSBOVUxMLAorCS52c19vcAkJPSAmdWtf
OXBmc192ZnNvcHMKK307CisKK1VLX0ZTX1JFR0lTVEVSKHVrXzlwZnNfZnMpOworCitzdGF0aWMg
Y29uc3QgY2hhciAqdWtfOXBmc19wcm90b19zdHJbVUtfOVBfUFJPVE9fTUFYXSA9IHsKKwlbVUtf
OVBfUFJPVE9fMjAwMFVdID0gIjlQMjAwMC51IgorfTsKKworc3RhdGljIGludCB1a185cGZzX3Bh
cnNlX29wdGlvbnMoc3RydWN0IHVrXzlwZnNfbW91bnRfZGF0YSAqbWQsCisJCWNvbnN0IHZvaWQg
KmRhdGEgX191bnVzZWQpCit7CisJaW50IHJjID0gMDsKKworCW1kLT50cmFucyA9IHVrXzlwZGV2
X3RyYW5zX2dldF9kZWZhdWx0KCk7CisJaWYgKCFtZC0+dHJhbnMpCisJCWdvdG8gb3V0OworCisJ
LyogQ3VycmVudGx5LCBubyBvcHRpb25zIGFyZSBzdXBwb3J0ZWQuICovCisKKwltZC0+cHJvdG8g
PSBVS185UF9QUk9UT18yMDAwVTsKKwltZC0+dW5hbWUgPSAiIjsKKwltZC0+YW5hbWUgPSAiIjsK
Kworb3V0OgorCXJldHVybiByYzsKK30KKworc3RhdGljIGludCB1a185cGZzX21vdW50KHN0cnVj
dCBtb3VudCAqbXAsIGNvbnN0IGNoYXIgKmRldiwKKwkJCWludCBmbGFncyBfX3VudXNlZCwgY29u
c3Qgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgdWtfOXBmc19tb3VudF9kYXRhICptZDsKKwlzdHJ1
Y3QgdWtfOXByZXEgKnZlcnNpb25fcmVxOworCXN0cnVjdCB1a185cF9zdHIgcmN2ZF92ZXJzaW9u
OworCXN0cnVjdCB1a185cGZpZCAqcm9vdGZpZDsKKwlpbnQgdmVyc2lvbl9hY2NlcHRlZDsKKwlp
bnQgcmM7CisKKwkvKiBTZXQgZGF0YSBhcyBudWxsLCB2bm9wX2luYWN0aXZlKCkgY2hlY2tzIHRo
aXMgZm9yIHRoZSByb290IGZpZC4gKi8KKwltcC0+bV9yb290LT5kX3Zub2RlLT52X2RhdGEgPSBO
VUxMOworCisJLyogQWxsb2NhdGUgbW91bnQgZGF0YSwgcGFyc2Ugb3B0aW9ucy4gKi8KKwltZCA9
IG1hbGxvYyhzaXplb2YoKm1kKSk7CisJaWYgKCFtZCkKKwkJcmV0dXJuIEVOT01FTTsKKworCXJj
ID0gdWtfOXBmc19wYXJzZV9vcHRpb25zKG1kLCBkYXRhKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0
X2ZyZWVfbWRhdGE7CisKKwltcC0+bV9kYXRhID0gbWQ7CisKKwkvKiBFc3RhYmxpc2ggY29ubmVj
dGlvbiB3aXRoIHRoZSBnaXZlbiA5UCBlbmRwb2ludC4gKi8KKwltZC0+ZGV2ID0gdWtfOXBkZXZf
Y29ubmVjdChtZC0+dHJhbnMsIGRldiwgZGF0YSwgTlVMTCk7CisJaWYgKFBUUklTRVJSKG1kLT5k
ZXYpKSB7CisJCXJjID0gLVBUUjJFUlIobWQtPmRldik7CisJCWdvdG8gb3V0X2ZyZWVfbWRhdGE7
CisJfQorCisJLyogQ3JlYXRlIGEgbmV3IDlwZnMgc2Vzc2lvbiB2aWEgYSBWRVJTSU9OIG1lc3Nh
Z2UuICovCisJdmVyc2lvbl9yZXEgPSB1a185cF92ZXJzaW9uKG1kLT5kZXYsIHVrXzlwZnNfcHJv
dG9fc3RyW21kLT5wcm90b10sCisJCQkmcmN2ZF92ZXJzaW9uKTsKKwlpZiAoUFRSSVNFUlIodmVy
c2lvbl9yZXEpKSB7CisJCXJjID0gLVBUUjJFUlIodmVyc2lvbl9yZXEpOworCQlnb3RvIG91dF9k
aXNjb25uZWN0OworCX0KKworCXZlcnNpb25fYWNjZXB0ZWQgPSB1a185cF9zdHJfZXF1YWwoJnJj
dmRfdmVyc2lvbiwKKwkJCXVrXzlwZnNfcHJvdG9fc3RyW21kLT5wcm90b10pOworCXVrXzlwZGV2
X3JlcV9yZW1vdmUobWQtPmRldiwgdmVyc2lvbl9yZXEpOworCisJaWYgKCF2ZXJzaW9uX2FjY2Vw
dGVkKSB7CisJCXJjID0gRUlPOworCQl1a19wcl93YXJuKCJDb3VsZCBub3QgbmVnb3RpYXRlIHBy
b3RvY29sICVzXG4iLAorCQkJCXVrXzlwZnNfcHJvdG9fc3RyW21kLT5wcm90b10pOworCQlnb3Rv
IG91dF9kaXNjb25uZWN0OworCX0KKworCS8qIENyZWF0ZSByb290IGZpZC4gKi8KKwlyb290Zmlk
ID0gdWtfOXBfYXR0YWNoKG1kLT5kZXYsIFVLXzlQX05PRklELCBtZC0+dW5hbWUsCisJCQltZC0+
YW5hbWUsIFVLXzlQX05PTlVOQU1FKTsKKwlpZiAoUFRSSVNFUlIocm9vdGZpZCkpIHsKKwkJcmMg
PSAtUFRSMkVSUihyb290ZmlkKTsKKwkJZ290byBvdXRfZGlzY29ubmVjdDsKKwl9CisKKwlyYyA9
IHVrXzlwZnNfYWxsb2NhdGVfdm5vZGVfZGF0YShtcC0+bV9yb290LT5kX3Zub2RlLCByb290Zmlk
KTsKKwlpZiAocmMgIT0gMCkgeworCQlyYyA9IC1yYzsKKwkJZ290byBvdXRfZGlzY29ubmVjdDsK
Kwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2Rpc2Nvbm5lY3Q6CisJdWtfOXBkZXZfZGlzY29ubmVj
dChtZC0+ZGV2KTsKK291dF9mcmVlX21kYXRhOgorCWZyZWUobWQpOworCXJldHVybiByYzsKK30K
Kworc3RhdGljIHZvaWQgdWtfOXBmc19yZWxlYXNlX3RyZWVfZmlkcyhzdHJ1Y3QgZGVudHJ5ICpk
KQoreworCXN0cnVjdCBkZW50cnkgKnA7CisKKwl1a19saXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZk
LT5kX2NoaWxkX2xpc3QsIGRfY2hpbGRfbGluaykKKwkJdWtfOXBmc19yZWxlYXNlX3RyZWVfZmlk
cyhwKTsKKworCWlmIChkLT5kX3Zub2RlLT52X2RhdGEpCisJCXVrXzlwZnNfZnJlZV92bm9kZV9k
YXRhKGQtPmRfdm5vZGUpOworfQorCitzdGF0aWMgaW50IHVrXzlwZnNfdW5tb3VudChzdHJ1Y3Qg
bW91bnQgKm1wLCBpbnQgZmxhZ3MgX191bnVzZWQpCit7CisJc3RydWN0IHVrXzlwZnNfbW91bnRf
ZGF0YSAqbWQgPSBVS185UEZTX01EKG1wKTsKKworCXVrXzlwZnNfcmVsZWFzZV90cmVlX2ZpZHMo
bXAtPm1fcm9vdCk7CisJdmZzY29yZV9yZWxlYXNlX21wX2RlbnRyaWVzKG1wKTsKKwl1a185cGRl
dl9kaXNjb25uZWN0KG1kLT5kZXYpOworCWZyZWUobWQpOworCisJcmV0dXJuIDA7Cit9CmRpZmYg
LS1naXQgYS9saWIvOXBmcy85cGZzX3Zub3BzLmMgYi9saWIvOXBmcy85cGZzX3Zub3BzLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjgwOWZhYzQzCi0tLSAvZGV2L251bGwK
KysrIGIvbGliLzlwZnMvOXBmc192bm9wcy5jCkBAIC0wLDAgKzEsMTM1IEBACisvKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgorICogQXV0aG9yczogQ3Jpc3Rp
YW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVu
aXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xk
ZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFO
WSBXQVkuCisgKi8KKworI2RlZmluZSBfR05VX1NPVVJDRQorCisjaW5jbHVkZSA8ZmNudGwuaD4K
KyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlIDx1
ay85cC5oPgorI2luY2x1ZGUgPHVrL2VycnB0ci5oPgorI2luY2x1ZGUgPHZmc2NvcmUvbW91bnQu
aD4KKyNpbmNsdWRlIDx2ZnNjb3JlL2RlbnRyeS5oPgorI2luY2x1ZGUgPHZmc2NvcmUvdm5vZGUu
aD4KKyNpbmNsdWRlIDx2ZnNjb3JlL2ZpbGUuaD4KKyNpbmNsdWRlIDx2ZnNjb3JlL2ZzLmg+CisK
KyNpbmNsdWRlICI5cGZzLmgiCisKK2ludCB1a185cGZzX2FsbG9jYXRlX3Zub2RlX2RhdGEoc3Ry
dWN0IHZub2RlICp2cCwgc3RydWN0IHVrXzlwZmlkICpmaWQpCit7CisJc3RydWN0IHVrXzlwZnNf
bm9kZV9kYXRhICpuZDsKKworCW5kID0gbWFsbG9jKHNpemVvZigqbmQpKTsKKwlpZiAobmQgPT0g
TlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZC0+ZmlkID0gZmlkOworCW5kLT5uYl9vcGVu
X2ZpbGVzID0gMDsKKwluZC0+cmVtb3ZlZCA9IGZhbHNlOworCXZwLT52X2RhdGEgPSBuZDsKKwor
CXJldHVybiAwOworfQorCit2b2lkIHVrXzlwZnNfZnJlZV92bm9kZV9kYXRhKHN0cnVjdCB2bm9k
ZSAqdnApCit7CisJc3RydWN0IHVrXzlwZGV2ICpkZXYgPSBVS185UEZTX01EKHZwLT52X21vdW50
KS0+ZGV2OworCXN0cnVjdCB1a185cGZzX25vZGVfZGF0YSAqbmQgPSBVS185UEZTX05EKHZwKTsK
KworCWlmIChuZC0+bmJfb3Blbl9maWxlcyA+IDApCisJCXJldHVybjsKKworCWlmIChuZC0+cmVt
b3ZlZCkKKwkJdWtfOXBfcmVtb3ZlKGRldiwgbmQtPmZpZCk7CisKKwl1a185cGZpZF9wdXQobmQt
PmZpZCk7CisJZnJlZShuZCk7CisJdnAtPnZfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQg
dWtfOXBmc19yZWFkZGlyKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZw
LAorCQlzdHJ1Y3QgZGlyZW50ICpkaXIpCit7CisJcmV0dXJuIEVOT0VOVDsKK30KKworI2RlZmlu
ZSB1a185cGZzX3NlZWsJCSgodm5vcF9zZWVrX3QpdmZzY29yZV92b3BfbnVsbG9wKQorI2RlZmlu
ZSB1a185cGZzX2lvY3RsCQkoKHZub3BfaW9jdGxfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVm
aW5lIHVrXzlwZnNfZnN5bmMJCSgodm5vcF9mc3luY190KXZmc2NvcmVfdm9wX251bGxvcCkKKyNk
ZWZpbmUgdWtfOXBmc19nZXRhdHRyCQkoKHZub3BfZ2V0YXR0cl90KXZmc2NvcmVfdm9wX251bGxv
cCkKKyNkZWZpbmUgdWtfOXBmc19zZXRhdHRyCQkoKHZub3Bfc2V0YXR0cl90KXZmc2NvcmVfdm9w
X251bGxvcCkKKyNkZWZpbmUgdWtfOXBmc190cnVuY2F0ZQkoKHZub3BfdHJ1bmNhdGVfdCl2ZnNj
b3JlX3ZvcF9udWxsb3ApCisjZGVmaW5lIHVrXzlwZnNfaW5hY3RpdmUJKCh2bm9wX2luYWN0aXZl
X3QpdmZzY29yZV92b3BfbnVsbG9wKQorI2RlZmluZSB1a185cGZzX2xpbmsJCSgodm5vcF9saW5r
X3QpdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHVrXzlwZnNfY2FjaGUJCSgodm5vcF9jYWNo
ZV90KU5VTEwpCisjZGVmaW5lIHVrXzlwZnNfcmVhZGxpbmsJKCh2bm9wX3JlYWRsaW5rX3QpdmZz
Y29yZV92b3BfZWludmFsKQorI2RlZmluZSB1a185cGZzX3N5bWxpbmsJCSgodm5vcF9zeW1saW5r
X3QpdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHVrXzlwZnNfZmFsbG9jYXRlCSgodm5vcF9m
YWxsb2NhdGVfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5lIHVrXzlwZnNfY3JlYXRlCQko
KHZub3BfY3JlYXRlX3QpdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSB1a185cGZzX3JlbW92
ZQkJKCh2bm9wX3JlbW92ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgdWtfOXBmc19y
ZW5hbWUJCSgodm5vcF9yZW5hbWVfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHVrXzlw
ZnNfbWtkaXIJCSgodm5vcF9ta2Rpcl90KXZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgdWtf
OXBmc19ybWRpcgkJKCh2bm9wX3JtZGlyX3QpdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSB1
a185cGZzX29wZW4JCSgodm5vcF9vcGVuX3QpdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSB1
a185cGZzX2Nsb3NlCQkoKHZub3BfY2xvc2VfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5l
IHVrXzlwZnNfcmVhZAkJKCh2bm9wX3JlYWRfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5l
IHVrXzlwZnNfd3JpdGUJCSgodm5vcF93cml0ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZp
bmUgdWtfOXBmc19sb29rdXAJCSgodm5vcF9sb29rdXBfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCisK
K3N0cnVjdCB2bm9wcyB1a185cGZzX3Zub3BzID0geworCS52b3Bfb3Blbgk9IHVrXzlwZnNfb3Bl
biwKKwkudm9wX2Nsb3NlCT0gdWtfOXBmc19jbG9zZSwKKwkudm9wX3JlYWQJPSB1a185cGZzX3Jl
YWQsCisJLnZvcF93cml0ZQk9IHVrXzlwZnNfd3JpdGUsCisJLnZvcF9zZWVrCT0gdWtfOXBmc19z
ZWVrLAorCS52b3BfaW9jdGwJPSB1a185cGZzX2lvY3RsLAorCS52b3BfZnN5bmMJPSB1a185cGZz
X2ZzeW5jLAorCS52b3BfcmVhZGRpcgk9IHVrXzlwZnNfcmVhZGRpciwKKwkudm9wX2xvb2t1cAk9
IHVrXzlwZnNfbG9va3VwLAorCS52b3BfY3JlYXRlCT0gdWtfOXBmc19jcmVhdGUsCisJLnZvcF9y
ZW1vdmUJPSB1a185cGZzX3JlbW92ZSwKKwkudm9wX3JlbmFtZQk9IHVrXzlwZnNfcmVuYW1lLAor
CS52b3BfbWtkaXIJPSB1a185cGZzX21rZGlyLAorCS52b3Bfcm1kaXIJPSB1a185cGZzX3JtZGly
LAorCS52b3BfZ2V0YXR0cgk9IHVrXzlwZnNfZ2V0YXR0ciwKKwkudm9wX3NldGF0dHIJPSB1a185
cGZzX3NldGF0dHIsCisJLnZvcF9pbmFjdGl2ZQk9IHVrXzlwZnNfaW5hY3RpdmUsCisJLnZvcF90
cnVuY2F0ZQk9IHVrXzlwZnNfdHJ1bmNhdGUsCisJLnZvcF9saW5rCT0gdWtfOXBmc19saW5rLAor
CS52b3BfY2FjaGUJPSB1a185cGZzX2NhY2hlLAorCS52b3BfZmFsbG9jYXRlCT0gdWtfOXBmc19m
YWxsb2NhdGUsCisJLnZvcF9yZWFkbGluawk9IHVrXzlwZnNfcmVhZGxpbmssCisJLnZvcF9zeW1s
aW5rCT0gdWtfOXBmc19zeW1saW5rCit9OwpkaWZmIC0tZ2l0IGEvbGliLzlwZnMvTWFrZWZpbGUu
dWsgYi9saWIvOXBmcy9NYWtlZmlsZS51awppbmRleCBlOTNlY2MzNC4uOWQ0ZGZiNTcgMTAwNjQ0
Ci0tLSBhL2xpYi85cGZzL01ha2VmaWxlLnVrCisrKyBiL2xpYi85cGZzL01ha2VmaWxlLnVrCkBA
IC0xICsxLDQgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliOXBmcywkKENPTkZJR19MSUI5
UEZTKSkpCisKK0xJQjlQRlNfU1JDUy15ICs9ICQoTElCOVBGU19CQVNFKS85cGZzX3Zmc29wcy5j
CitMSUI5UEZTX1NSQ1MteSArPSAkKExJQjlQRlNfQkFTRSkvOXBmc192bm9wcy5jCi0tIAoyLjIw
LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:00:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:00:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XVx-0003Ms-I5; Sat, 07 Sep 2019 10:00:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XVw-0003Mg-DI
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:00:16 +0000
X-Inumbo-ID: 40e61510-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 40e61510-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 09:59:59 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=CJSLavr8KpeziyhXNSKJPRQxa4w+OF7ml/nvxlIf6MAwhjynfXpmWGev+EASy/g1zMTkm7fVZfmH5HXjGUruz1/efGhsCYByShbLA/SbnB5pyrpR5RccoXUly+V0chN85QedoogYxLmfAMfvVKhCR68A5y5/RNsPsa3fVnzQCC7Dq5fQ140sC352ScqStdctUBzQKk63Gj+yjQGWbtFoV/n9mJEpiVHVTQhO4bSGRU5gGHPZdxXy72mpc3sfQ/lgiWRWZf9O+qnnFeUXDuiBWEkPIkzhGVdA4YabEZpFq4gL0hDSBCvTPo71gkFfC7+elyPmYeEIIJiVWMQqeAjWRg==
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=4ekTANXKfuW//NsyhB3dggcU0UTze37/01O+tcANgvA=;
 b=AeY3zX5L+mK003CVUebCtgKfOZmfmSSGuvtTmh+rxP4M/d8DlO1rHqZsgVkQP6mID0aWem3Uziqq6GqibMrj9dyi6gATHBKGCylqKhBbafgeFVe116ktqE3UX4aW6CSdcBvKhkdmfBCoavp/hoeW7k0Ty0SdUkZwQW7yTk/BpHua1iotiDWoiQQaprlcAVAkDuN5ZNziyyP7FDOJlDFvDxHQ8SrvUboSDdSpmy4ijapOSEF07HnvlxCmQ3MSjfXzx8liR+kWtsWDVbNHhdbCxASR39Qj/I8iJqEylSeA2kxUI0oc7HdXHNBtYiWaOPIE6G4fkb8BBM5bmElLcZCU5w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:55 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:55 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 4/7] lib/9pfs: Add lookup and inactive vnops
Thread-Index: AQHVZWL/W4REVppzT06jPWsZo3lQWw==
Date: Sat, 7 Sep 2019 09:59:54 +0000
Message-ID: <20190907095945.12739-5-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: f295aec3-c90d-4ea1-ce98-08d7337a222a
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-microsoft-antispam-prvs: <PR1PR01MB5018DD49AB971F17B418FA30A6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:4125;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(54906003)(478600001)(476003)(5640700003)(2616005)(446003)(2351001)(316002)(25786009)(11346002)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(5660300002)(102836004)(76176011)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(305945005)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: JgY17Lbsd1bCqp+kbEuTIhJNgWGX/K2Qa/+YWSMBzuKYn/f/RLna4/pOivp5b7roWthbPwGTaxHoKJ4MtTJYpQjDbroyfLwy3JmYMmasPoRujcVBwzaN4IWEFL0pvldBprZFpPnpbH0xV3A/Kug1xbuxYa5bFnMIqLpGOw4fpIokYqadGpYqTLxgSXFLb3zT9GCLlfGVoGq6b4afEcI+kUZWcKV1oaj4D6zV03kTnPNIewZn2zKsxGDI+BtOn20pw5bDjehRHuld55RndhyAwUas1yIGhx4L7p/IU/VyGvG8skVH7Q9DNC6rKM90pQMP8pHh9kEHZDtldpo6h7gxvlUkSEQAkTu56R65Tjhlg+JXJHezNX4mqbn3XaEm88hcBC2XEipin41GeMQkpHbDSSfXtITuZLgsKkWUOe52d/g=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: f295aec3-c90d-4ea1-ce98-08d7337a222a
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:55.0021 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: c3Rhe3BU9wPojGyC86z4ojXl9USVILyTgzqL4x+BAcd+Kq09vtZMqc5YcxtCnuXPc0WM+idL3hQyEDkeu7Pzp5n1LlBDdxYbpi09tCnPXM6T37J9JCek6RSEqbWdT6hz
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 4/7] lib/9pfs: Add lookup and
 inactive vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgbG9va3VwIGFuZCBpbmFjdGl2ZSB2bm9wcy4KClNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJh
bnUgPGNyaXN0YkBnbWFpbC5jb20+Ci0tLQogbGliLzlwZnMvOXBmc192bm9wcy5jIHwgMTEyICsr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs
IDExMCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi85cGZz
LzlwZnNfdm5vcHMuYyBiL2xpYi85cGZzLzlwZnNfdm5vcHMuYwppbmRleCA4MDlmYWM0My4uMGZl
M2ViMjIgMTAwNjQ0Ci0tLSBhL2xpYi85cGZzLzlwZnNfdm5vcHMuYworKysgYi9saWIvOXBmcy85
cGZzX3Zub3BzLmMKQEAgLTQ3LDYgKzQ3LDQ3IEBACiAKICNpbmNsdWRlICI5cGZzLmgiCiAKK3N0
YXRpYyBpbnQgdWtfOXBmc19wb3NpeF9wZXJtX2Zyb21fbW9kZShpbnQgbW9kZSkKK3sKKwlpbnQg
cmVzOworCisJcmVzID0gbW9kZSAmIDA3Nzc7CisJaWYgKG1vZGUgJiBVS185UF9ETVNFVFVJRCkK
KwkJcmVzIHw9IFNfSVNVSUQ7CisJaWYgKG1vZGUgJiBVS185UF9ETVNFVEdJRCkKKwkJcmVzIHw9
IFNfSVNHSUQ7CisJaWYgKG1vZGUgJiBVS185UF9ETVNFVFZUWCkKKwkJcmVzIHw9IFNfSVNWVFg7
CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHVrXzlwZnNfcG9zaXhfbW9kZV9mcm9t
X21vZGUoaW50IG1vZGUpCit7CisJaW50IHJlczsKKworCXJlcyA9IHVrXzlwZnNfcG9zaXhfcGVy
bV9mcm9tX21vZGUobW9kZSk7CisKKwlpZiAobW9kZSAmIFVLXzlQX0RNRElSKQorCQlyZXMgfD0g
U19JRkRJUjsKKwllbHNlCisJCXJlcyB8PSBTX0lGUkVHOworCisJcmV0dXJuIHJlczsKK30KKwor
c3RhdGljIGludCB1a185cGZzX3Z0eXBlX2Zyb21fbW9kZShpbnQgbW9kZSkKK3sKKwlpZiAobW9k
ZSAmIFVLXzlQX0RNRElSKQorCQlyZXR1cm4gVkRJUjsKKwlyZXR1cm4gVlJFRzsKK30KKworc3Rh
dGljIHVpbnQ2NF90IHVrXzlwZnNfaW5vKHN0cnVjdCB1a185cF9zdGF0ICpzdGF0KQoreworCXJl
dHVybiBzdGF0LT5xaWQucGF0aDsKK30KKwogaW50IHVrXzlwZnNfYWxsb2NhdGVfdm5vZGVfZGF0
YShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKIHsKIAlzdHJ1Y3QgdWtf
OXBmc19ub2RlX2RhdGEgKm5kOwpAQCAtNzksNiArMTIwLDc1IEBAIHZvaWQgdWtfOXBmc19mcmVl
X3Zub2RlX2RhdGEoc3RydWN0IHZub2RlICp2cCkKIAl2cC0+dl9kYXRhID0gTlVMTDsKIH0KIAor
c3RhdGljIGludCB1a185cGZzX2xvb2t1cChzdHJ1Y3Qgdm5vZGUgKmR2cCwgY2hhciAqbmFtZSwg
c3RydWN0IHZub2RlICoqdnBwKQoreworCXN0cnVjdCB1a185cGRldiAqZGV2ID0gVUtfOVBGU19N
RChkdnAtPnZfbW91bnQpLT5kZXY7CisJc3RydWN0IHVrXzlwZmlkICpkZmlkID0gVUtfOVBGU19W
RklEKGR2cCk7CisJc3RydWN0IHVrXzlwZmlkICpmaWQ7CisJc3RydWN0IHVrXzlwX3N0YXQgc3Rh
dDsKKwlzdHJ1Y3QgdWtfOXByZXEgKnN0YXRfcmVxOworCXN0cnVjdCB2bm9kZSAqdnA7CisJaW50
IHJjOworCisJaWYgKHN0cmxlbihuYW1lKSA+IE5BTUVfTUFYKQorCQlyZXR1cm4gRU5BTUVUT09M
T05HOworCisJZmlkID0gdWtfOXBfd2FsayhkZXYsIGRmaWQsIG5hbWUpOworCWlmIChQVFJJU0VS
UihmaWQpKSB7CisJCXJjID0gUFRSMkVSUihmaWQpOworCQlnb3RvIG91dDsKKwl9CisKKwlzdGF0
X3JlcSA9IHVrXzlwX3N0YXQoZGV2LCBmaWQsICZzdGF0KTsKKwlpZiAoUFRSSVNFUlIoc3RhdF9y
ZXEpKSB7CisJCXJjID0gUFRSMkVSUihzdGF0X3JlcSk7CisJCWdvdG8gb3V0X2ZpZDsKKwl9CisK
KwkvKiBObyBzdGF0IHN0cmluZyBmaWVsZHMgYXJlIHVzZWQgYmVsb3cuICovCisJdWtfOXBkZXZf
cmVxX3JlbW92ZShkZXYsIHN0YXRfcmVxKTsKKworCWlmICh2ZnNjb3JlX3ZnZXQoZHZwLT52X21v
dW50LCB1a185cGZzX2lubygmc3RhdCksICZ2cCkpIHsKKwkJLyogQWxyZWFkeSBpbiBjYWNoZS4g
Ki8KKwkJcmMgPSAwOworCQkqdnBwID0gdnA7CisJCS8qIGlmIHRoZSB2bm9kZSBhbHJlYWR5IGhh
cyBub2RlIGRhdGEsIGl0IG1heSBiZSByZXVzZWQuICovCisJCWlmICh2cC0+dl9kYXRhKQorCQkJ
Z290byBvdXRfZmlkOworCX0KKworCWlmICghdnApIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3Rv
IG91dF9maWQ7CisJfQorCisJdnAtPnZfZmxhZ3MgPSAwOworCXZwLT52X21vZGUgPSB1a185cGZz
X3Bvc2l4X21vZGVfZnJvbV9tb2RlKHN0YXQubW9kZSk7CisJdnAtPnZfdHlwZSA9IHVrXzlwZnNf
dnR5cGVfZnJvbV9tb2RlKHN0YXQubW9kZSk7CisJdnAtPnZfc2l6ZSA9IHN0YXQubGVuZ3RoOwor
CisJcmMgPSB1a185cGZzX2FsbG9jYXRlX3Zub2RlX2RhdGEodnAsIGZpZCk7CisJaWYgKHJjICE9
IDApCisJCWdvdG8gb3V0X2ZpZDsKKworCSp2cHAgPSB2cDsKKworCXJldHVybiAwOworCitvdXRf
ZmlkOgorCXVrXzlwZmlkX3B1dChmaWQpOworb3V0OgorCXJldHVybiAtcmM7Cit9CisKK3N0YXRp
YyBpbnQgdWtfOXBmc19pbmFjdGl2ZShzdHJ1Y3Qgdm5vZGUgKnZwKQoreworCWlmICh2cC0+dl9k
YXRhKQorCQl1a185cGZzX2ZyZWVfdm5vZGVfZGF0YSh2cCk7CisKKwlyZXR1cm4gMDsKK30KKwog
c3RhdGljIGludCB1a185cGZzX3JlYWRkaXIoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZmc2Nv
cmVfZmlsZSAqZnAsCiAJCXN0cnVjdCBkaXJlbnQgKmRpcikKIHsKQEAgLTkxLDcgKzIwMSw2IEBA
IHN0YXRpYyBpbnQgdWtfOXBmc19yZWFkZGlyKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2ZnNj
b3JlX2ZpbGUgKmZwLAogI2RlZmluZSB1a185cGZzX2dldGF0dHIJCSgodm5vcF9nZXRhdHRyX3Qp
dmZzY29yZV92b3BfbnVsbG9wKQogI2RlZmluZSB1a185cGZzX3NldGF0dHIJCSgodm5vcF9zZXRh
dHRyX3QpdmZzY29yZV92b3BfbnVsbG9wKQogI2RlZmluZSB1a185cGZzX3RydW5jYXRlCSgodm5v
cF90cnVuY2F0ZV90KXZmc2NvcmVfdm9wX251bGxvcCkKLSNkZWZpbmUgdWtfOXBmc19pbmFjdGl2
ZQkoKHZub3BfaW5hY3RpdmVfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCiAjZGVmaW5lIHVrXzlwZnNf
bGluawkJKCh2bm9wX2xpbmtfdCl2ZnNjb3JlX3ZvcF9lcGVybSkKICNkZWZpbmUgdWtfOXBmc19j
YWNoZQkJKCh2bm9wX2NhY2hlX3QpTlVMTCkKICNkZWZpbmUgdWtfOXBmc19yZWFkbGluawkoKHZu
b3BfcmVhZGxpbmtfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCkBAIC0xMDYsNyArMjE1LDYgQEAgc3Rh
dGljIGludCB1a185cGZzX3JlYWRkaXIoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZmc2NvcmVf
ZmlsZSAqZnAsCiAjZGVmaW5lIHVrXzlwZnNfY2xvc2UJCSgodm5vcF9jbG9zZV90KXZmc2NvcmVf
dm9wX2VpbnZhbCkKICNkZWZpbmUgdWtfOXBmc19yZWFkCQkoKHZub3BfcmVhZF90KXZmc2NvcmVf
dm9wX2VpbnZhbCkKICNkZWZpbmUgdWtfOXBmc193cml0ZQkJKCh2bm9wX3dyaXRlX3QpdmZzY29y
ZV92b3BfZWludmFsKQotI2RlZmluZSB1a185cGZzX2xvb2t1cAkJKCh2bm9wX2xvb2t1cF90KXZm
c2NvcmVfdm9wX2VpbnZhbCkKIAogc3RydWN0IHZub3BzIHVrXzlwZnNfdm5vcHMgPSB7CiAJLnZv
cF9vcGVuCT0gdWtfOXBmc19vcGVuLAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:00:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:00:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XW2-0003NY-KF; Sat, 07 Sep 2019 10:00:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XW1-0003NR-CN
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:00:21 +0000
X-Inumbo-ID: 416beece-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 416beece-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 10:00:00 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jTxfxIjn5LqrQUH1jZOs+GHBFBXKTemM69d9d3JPwt+R2BFFxVmFQeH1Znqa+Yx3jkGe8mVaiTCMg/T4Uw0ayhE0fXVu70bf4XisBKFqAyjzkOBiucxeGOk+gJSKOa5x2/l4orsNDGYuoyo6UJHo7LSQkyWG4C43uEVXdtn35XSDDPe4sxient3bbMbNq2C1pX/X5LZccDIZVC/NfU1ZUyaWbsRn+fWBIKGVrMYPYhOOcHdGdPubhgsYROaX1TMWQQW0LeTa3zfbSXgEiUKuflCxYutzKC3aNmPuHc+HXZmG9uh6k1XcgNSmGHJgX2CiN5s3RdQHYg1NNqoWb0YI9A==
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=oevdDIwIdzv4oeNLTsC0/LVYlbV82hR8Z2gGlbKWaFM=;
 b=ThQMHbaGwbJqV6NUus8xi1jQnQlN88Koo4b6IgsxPINMTSUCANAxyMMfgOKBkqaMNioncvOW+Nb3l/slU10OIfUdR2+pIk0qByCdmceowHNOxQ1Bg94iDof+IrI2ngY2y7vOG6D0KVqrGadSSJBBVfKpmqV81fC0wWltdAosmTfBb+liIGquIbKQ5WX97tbj7IZ2DoE3tS8JlRpgeMuf9cHPpHi+MYEgYlCcr+8PFSEO19yisPnLz3zOKjWGPGHHcM2r9RbYBUstVZp3495Q4ynkWKy5hcByOPvsencE2xpxs7P5yHKUbBCh+3yfEs9W4lxSPpG5XOd4qzrVGeT9eg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:55 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:55 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 5/7] lib/9pfs: Add create, mkdir, rmdir, remove
 vnops
Thread-Index: AQHVZWMAIR+TBLPb+0+4giZeEbfOzg==
Date: Sat, 7 Sep 2019 09:59:55 +0000
Message-ID: <20190907095945.12739-6-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 8e60915b-adaf-4edf-b70f-08d7337a227a
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-microsoft-antispam-prvs: <PR1PR01MB50189E4F2A36DCAE1BDB20EEA6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:404;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(54906003)(478600001)(476003)(5640700003)(2616005)(446003)(2351001)(316002)(25786009)(11346002)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(5660300002)(102836004)(76176011)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(305945005)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: B+AXt5mNZFnqFaL9nBgPNwiEk5rVEXlqBOBHlWqxCI9Ks3ya9zzk6oWtjMhT4o+xkDfOn8LBmNzyBvz3DBzlMLdyXiRVIGS4lQel2V/BQv6/9bunZbbnbOFreCR8urdyvieghVd0FJvStTuGajdd0j7SLi3m4f3UFM/+6tOcQNRyT+GDq+wWb0tuBKRJc07siqZvvKz1U1qO0rH9d5sscIWYVSL/x0gZkAl/S29F/5iGLUWLL5xIZUIqmP8pQR7r1djNAnsGHBYi05JFLZrtrDOz7hhLBY2sKHcjB0zHbt8ge+Y6H+nMlfGcxAvQsFqJ/1JWNSfazrq5t1n+RUzGZegdf34042oAgSJz/k1eT+GDliHnGow21i2yp4iYlcMLYnfDsCwYWfnAzYvdQXhX52ZLraFqC2XthugntsaL0Ok=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 8e60915b-adaf-4edf-b70f-08d7337a227a
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:55.4918 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: UndxKKf1Anpip5mkfloAE6vBRZChpqq9v8+EbZHRlzyaqNXf86ZNl3YzGaRTw/rdP1H+2ddBLWQlqeWn4VSDXFXapE/egi+zN+xh+bn4adUfzUVOwUNABRuAwp0zCkWu
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 5/7] lib/9pfs: Add create, mkdir,
 rmdir, remove vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBm
aWxlIGFuZCBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGRlbGV0aW9uIFZGUyBub2RlCm9wZXJhdGlv
bnMuCgpTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgotLS0K
IGxpYi85cGZzLzlwZnNfdm5vcHMuYyB8IDc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCA0IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi85cGZzLzlwZnNfdm5vcHMuYyBiL2xpYi85cGZzLzlw
ZnNfdm5vcHMuYwppbmRleCAwZmUzZWIyMi4uNTBmODMxNDggMTAwNjQ0Ci0tLSBhL2xpYi85cGZz
LzlwZnNfdm5vcHMuYworKysgYi9saWIvOXBmcy85cGZzX3Zub3BzLmMKQEAgLTYyLDYgKzYyLDE3
IEBAIHN0YXRpYyBpbnQgdWtfOXBmc19wb3NpeF9wZXJtX2Zyb21fbW9kZShpbnQgbW9kZSkKIAly
ZXR1cm4gcmVzOwogfQogCitzdGF0aWMgdWludDMyX3QgdWtfOXBmc19wZXJtX2Zyb21fcG9zaXhf
bW9kZShtb2RlX3QgbW9kZSkKK3sKKwlpbnQgcmVzOworCisJcmVzID0gbW9kZSAmIDA3Nzc7CisJ
aWYgKFNfSVNESVIobW9kZSkpCisJCXJlcyB8PSBVS185UF9ETURJUjsKKworCXJldHVybiByZXM7
Cit9CisKIHN0YXRpYyBpbnQgdWtfOXBmc19wb3NpeF9tb2RlX2Zyb21fbW9kZShpbnQgbW9kZSkK
IHsKIAlpbnQgcmVzOwpAQCAtMTg5LDYgKzIwMCw2OSBAQCBzdGF0aWMgaW50IHVrXzlwZnNfaW5h
Y3RpdmUoc3RydWN0IHZub2RlICp2cCkKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1a185
cGZzX2NyZWF0ZV9nZW5lcmljKHN0cnVjdCB2bm9kZSAqZHZwLCBjaGFyICpuYW1lLCBtb2RlX3Qg
bW9kZSkKK3sKKwlzdHJ1Y3QgdWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQoZHZwLT52X21vdW50
KS0+ZGV2OworCXN0cnVjdCB1a185cGZpZCAqZmlkOworCWludCByYzsKKworCWlmIChzdHJsZW4o
bmFtZSkgPiBOQU1FX01BWCkKKwkJcmV0dXJuIEVOQU1FVE9PTE9ORzsKKworCS8qIENsb25lIHBh
cmVudCBmaWQuICovCisJZmlkID0gdWtfOXBfd2FsayhkZXYsIFVLXzlQRlNfVkZJRChkdnApLCBO
VUxMKTsKKworCXJjID0gdWtfOXBfY3JlYXRlKGRldiwgZmlkLCBuYW1lLCB1a185cGZzX3Blcm1f
ZnJvbV9wb3NpeF9tb2RlKG1vZGUpLAorCQkJVUtfOVBfT1RSVU5DIHwgVUtfOVBfT1dSSVRFLCBO
VUxMKTsKKworCXVrXzlwZmlkX3B1dChmaWQpOworCXJldHVybiAtcmM7Cit9CisKK3N0YXRpYyBp
bnQgdWtfOXBmc19jcmVhdGUoc3RydWN0IHZub2RlICpkdnAsIGNoYXIgKm5hbWUsIG1vZGVfdCBt
b2RlKQoreworCWlmICghU19JU1JFRyhtb2RlKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCXJldHVy
biB1a185cGZzX2NyZWF0ZV9nZW5lcmljKGR2cCwgbmFtZSwgbW9kZSk7Cit9CisKK3N0YXRpYyBp
bnQgdWtfOXBmc19yZW1vdmVfZ2VuZXJpYyhzdHJ1Y3Qgdm5vZGUgKmR2cCwgc3RydWN0IHZub2Rl
ICp2cCkKK3sKKwlzdHJ1Y3QgdWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQoZHZwLT52X21vdW50
KS0+ZGV2OworCXN0cnVjdCB1a185cGZzX25vZGVfZGF0YSAqbmQgPSBVS185UEZTX05EKHZwKTsK
KwlpbnQgcmMgPSAwOworCisJaWYgKCFuZC0+cmVtb3ZlZCAmJiAhbmQtPm5iX29wZW5fZmlsZXMp
CisJCXJjID0gdWtfOXBfcmVtb3ZlKGRldiwgbmQtPmZpZCk7CisJZWxzZQorCQluZC0+cmVtb3Zl
ZCA9IHRydWU7CisKKwl1a185cGZzX2ZyZWVfdm5vZGVfZGF0YSh2cCk7CisKKwlyZXR1cm4gLXJj
OworfQorCitzdGF0aWMgaW50IHVrXzlwZnNfcmVtb3ZlKHN0cnVjdCB2bm9kZSAqZHZwLCBzdHJ1
Y3Qgdm5vZGUgKnZwLAorCQljaGFyICpuYW1lIF9fdW51c2VkKQoreworCXJldHVybiB1a185cGZz
X3JlbW92ZV9nZW5lcmljKGR2cCwgdnApOworfQorCitzdGF0aWMgaW50IHVrXzlwZnNfbWtkaXIo
c3RydWN0IHZub2RlICpkdnAsIGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlKQoreworCWlmICghU19J
U0RJUihtb2RlKSkKKwkJcmV0dXJuIEVJTlZBTDsKKworCXJldHVybiB1a185cGZzX2NyZWF0ZV9n
ZW5lcmljKGR2cCwgbmFtZSwgbW9kZSk7Cit9CisKK3N0YXRpYyBpbnQgdWtfOXBmc19ybWRpcihz
dHJ1Y3Qgdm5vZGUgKmR2cCwgc3RydWN0IHZub2RlICp2cCwKKwkJY2hhciAqbmFtZSBfX3VudXNl
ZCkKK3sKKwlyZXR1cm4gdWtfOXBmc19yZW1vdmVfZ2VuZXJpYyhkdnAsIHZwKTsKK30KKwogc3Rh
dGljIGludCB1a185cGZzX3JlYWRkaXIoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZmc2NvcmVf
ZmlsZSAqZnAsCiAJCXN0cnVjdCBkaXJlbnQgKmRpcikKIHsKQEAgLTIwNiwxMSArMjgwLDcgQEAg
c3RhdGljIGludCB1a185cGZzX3JlYWRkaXIoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZmc2Nv
cmVfZmlsZSAqZnAsCiAjZGVmaW5lIHVrXzlwZnNfcmVhZGxpbmsJKCh2bm9wX3JlYWRsaW5rX3Qp
dmZzY29yZV92b3BfZWludmFsKQogI2RlZmluZSB1a185cGZzX3N5bWxpbmsJCSgodm5vcF9zeW1s
aW5rX3QpdmZzY29yZV92b3BfZXBlcm0pCiAjZGVmaW5lIHVrXzlwZnNfZmFsbG9jYXRlCSgodm5v
cF9mYWxsb2NhdGVfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCi0jZGVmaW5lIHVrXzlwZnNfY3JlYXRl
CQkoKHZub3BfY3JlYXRlX3QpdmZzY29yZV92b3BfZWludmFsKQotI2RlZmluZSB1a185cGZzX3Jl
bW92ZQkJKCh2bm9wX3JlbW92ZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKICNkZWZpbmUgdWtfOXBm
c19yZW5hbWUJCSgodm5vcF9yZW5hbWVfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCi0jZGVmaW5lIHVr
XzlwZnNfbWtkaXIJCSgodm5vcF9ta2Rpcl90KXZmc2NvcmVfdm9wX2VpbnZhbCkKLSNkZWZpbmUg
dWtfOXBmc19ybWRpcgkJKCh2bm9wX3JtZGlyX3QpdmZzY29yZV92b3BfZWludmFsKQogI2RlZmlu
ZSB1a185cGZzX29wZW4JCSgodm5vcF9vcGVuX3QpdmZzY29yZV92b3BfZWludmFsKQogI2RlZmlu
ZSB1a185cGZzX2Nsb3NlCQkoKHZub3BfY2xvc2VfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCiAjZGVm
aW5lIHVrXzlwZnNfcmVhZAkJKCh2bm9wX3JlYWRfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:00:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:00:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XW7-0003OK-MA; Sat, 07 Sep 2019 10:00:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XW6-0003OB-CT
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:00:26 +0000
X-Inumbo-ID: 42042bd0-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42042bd0-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 10:00:01 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=iJlVDtYFOCbGOSn+mkP2lHD0wPq9uJrS1hBrQYWcD4UCviRbccZD9Pjfh5RlhItgpOr4DcuvESSlTPRPmmYiGMAjz6qKbTgV0EtCclpIhesIZP8N71/+VUokuTQ8nOGgy1VDk939hUDcZz9j6dNatRFqPsuIkkTuEVFXXV1dazNoxLiTQArIEWsFeW8zwz0AbVWrxJe3pxbKYrvRy2yvwKZ3lX/A6wJBwv7Q+gZZ9vCVBobHrHyZSyjM0kLO09639zNxBeELyRCROw97KYYr2GXRqxqIXK4esBxLK4CKqoh8WSfsXYgi0z5pruZtrHdRQhq7JF9e1Sc3qUdHdZV4DQ==
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=aYt2OLHYNpggQhzLRr5FW6pkJMbJwwKC1AF0qeyEGtQ=;
 b=VYsFwO2IZIsOPyOf1bC4aPuvyjaap4cfPtnU3pLboyP6Q+PxmXoqsuxycEqJUOQzdr1G+0Qf8W9mLYTE/M8aPtoN6secCfgHUyrSscEaywQAOHV5qlXs2orLpNrjD/aiJ1SUYbtF4c1Mz4cHU695x11kIJDQBmcCgggcPBbrpD0VztMynrdbrs2Y+JituXWOM0WeurHH53Kn5q5tdUDoDNCMfZI1KtdPZqpCL8tJGKTnwIiniIihCrpbLNQIyQXJWZWlp3pl5lj19iTl8+ITPZ2TIS9ejY6nzeEn8IBVzf4I4b0ZVmZnovU6XRpoeXFCyEDsAmqjR2LbRTCRbRoRiQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:56 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:56 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 6/7] lib/9pfs: Add open, close and readdir vnops
Thread-Index: AQHVZWMA3KLI4T3HWkmI3CsGNI+0lw==
Date: Sat, 7 Sep 2019 09:59:56 +0000
Message-ID: <20190907095945.12739-7-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 808bd17e-14fb-41ca-aa3f-08d7337a22e8
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-microsoft-antispam-prvs: <PR1PR01MB501848D7101B13D3D4B95432A6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:3968;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(54906003)(478600001)(476003)(5640700003)(2616005)(446003)(2351001)(316002)(25786009)(11346002)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(5660300002)(102836004)(76176011)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(305945005)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: Hr9K5n6ummrjWCAUy97+5Vms/LWDNmr/zJXbc0giBfmH0gKmGyEbCiSvjp7LbiYmjD+taEz5wRHDJInSTB5qWhyDkG73K3TWRYkpN8k0T17dlFhBbNL+hWH6IxOhlcKU57GJWLnoPK5cwu7DCIq8aD67otRGtazMoBvraU1v0rD1aeH6Gm/hg2CCkh6C0hifETCXYamf+yrmHsZ4n00XaVFmm+io8s+yjR9bsBGjwyRr98Jhf3b9UP7juvusdO8L2fJnDDjIcob5MU22Dmx/seV+Zt42nlxxz+cRUypXXsLmCKr5uQ7N4UBrreOLkZuqBqkHyF3XiVdEqit7FK26H/95BTNOHb3xoNxhiv/z2xNQa1H/O3jy88jCFJyTb6z+Vvd5Fq1nk6FxNS6vj9Z7odpFXKI5CH/VmNxjXzknCnE=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 808bd17e-14fb-41ca-aa3f-08d7337a22e8
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:56.2413 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: +7U7ykSVIbCVb1UHbepOXuldTDokjC3B4Kg0M7OLhZ4ppSStLh4SM/zl1aroD9zSw/5Jsj+xMnAXDIJAT95XBMQaSai3Ub8Qcdcw2K5SOyt8B3/30dXgMlQa0NJdmfDQ
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 6/7] lib/9pfs: Add open,
 close and readdir vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgb3BlbiwgY2xvc2UgYW5kIHJlYWRkaXIgVkZTIG5vZGUgb3BlcmF0aW9ucy4KCkluIG9yZGVy
IHRvIGNhY2hlIHN0YXQgc3RydWN0dXJlcyBvbiBzZXF1ZW50aWFsIHJlYWRkaXIgY2FsbHMsCmEg
YnVmZmVyIGlzIHBsYWNlZCBpbiB0aGUgZl9kYXRhIGZpZWxkIG9mIGEgZmlsZSBzdHJ1Y3QuCgpT
aWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgotLS0KIGxpYi85
cGZzLzlwZnNfdm5vcHMuYyB8IDE3OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAxNzUgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9saWIvOXBmcy85cGZzX3Zub3BzLmMgYi9saWIvOXBmcy85cGZzX3Zu
b3BzLmMKaW5kZXggNTBmODMxNDguLmJmMDA4YTg4IDEwMDY0NAotLS0gYS9saWIvOXBmcy85cGZz
X3Zub3BzLmMKKysrIGIvbGliLzlwZnMvOXBmc192bm9wcy5jCkBAIC00Nyw2ICs0NywyNiBAQAog
CiAjaW5jbHVkZSAiOXBmcy5oIgogCitzdGF0aWMgdWludDhfdCB1a185cGZzX29wZW5fbW9kZV9m
cm9tX3Bvc2l4X2ZsYWdzKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJdWludDhfdCBtb2RlID0g
MDsKKwl1aW50OF90IGZsYWdzX3J3ID0gZmxhZ3MgJiAoVUtfRlJFQUQgfCBVS19GV1JJVEUpOwor
CisJaWYgKGZsYWdzX3J3ID09IFVLX0ZSRUFEKQorCQltb2RlID0gVUtfOVBfT1JFQUQ7CisJZWxz
ZSBpZiAoZmxhZ3NfcncgPT0gVUtfRldSSVRFKQorCQltb2RlID0gVUtfOVBfT1dSSVRFOworCWVs
c2UgaWYgKGZsYWdzX3J3ID09IChVS19GUkVBRCB8IFVLX0ZXUklURSkpCisJCW1vZGUgPSBVS185
UF9PUkRXUjsKKworCWlmIChmbGFncyAmIE9fRVhDTCkKKwkJbW9kZSB8PSBVS185UF9PRVhDTDsK
KwlpZiAoZmxhZ3MgJiBPX1RSVU5DKQorCQltb2RlIHw9IFVLXzlQX09UUlVOQzsKKworCXJldHVy
biBtb2RlOworfQorCiBzdGF0aWMgaW50IHVrXzlwZnNfcG9zaXhfcGVybV9mcm9tX21vZGUoaW50
IG1vZGUpCiB7CiAJaW50IHJlczsKQEAgLTczLDYgKzkzLDEzIEBAIHN0YXRpYyB1aW50MzJfdCB1
a185cGZzX3Blcm1fZnJvbV9wb3NpeF9tb2RlKG1vZGVfdCBtb2RlKQogCXJldHVybiByZXM7CiB9
CiAKK3N0YXRpYyBpbnQgdWtfOXBmc19kdHR5cGVfZnJvbV9tb2RlKGludCBtb2RlKQoreworCWlm
IChtb2RlICYgVUtfOVBfRE1ESVIpCisJCXJldHVybiBEVF9ESVI7CisJcmV0dXJuIERUX1JFRzsK
K30KKwogc3RhdGljIGludCB1a185cGZzX3Bvc2l4X21vZGVfZnJvbV9tb2RlKGludCBtb2RlKQog
ewogCWludCByZXM7CkBAIC0xMzEsNiArMTU4LDc1IEBAIHZvaWQgdWtfOXBmc19mcmVlX3Zub2Rl
X2RhdGEoc3RydWN0IHZub2RlICp2cCkKIAl2cC0+dl9kYXRhID0gTlVMTDsKIH0KIAorLyoKKyAq
IFRoZSBjbG9zaW5nIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgZW5mb3JjZSBmcmVlaW5n
IHRoZSBhc3NvY2lhdGVkCisgKiByZXNvdXJjZXMgb25seSBpZiB0aGUgdm5vZGUgd2FzIHJlbW92
ZWQgdmlhIGFuIHVubGluay9ybWRpciBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIHVrXzlw
ZnNfZnJlZV92bm9kZV9kYXRhX2Nsb3Npbmcoc3RydWN0IHZub2RlICp2cCkKK3sKKwlzdHJ1Y3Qg
dWtfOXBmc19ub2RlX2RhdGEgKm5kID0gVUtfOVBGU19ORCh2cCk7CisKKwlpZiAoIW5kLT5yZW1v
dmVkKQorCQlyZXR1cm47CisKKwl1a185cGZzX2ZyZWVfdm5vZGVfZGF0YSh2cCk7Cit9CisKK3N0
YXRpYyBpbnQgdWtfOXBmc19vcGVuKHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpCit7CisJc3Ry
dWN0IHVrXzlwZGV2ICpkZXYgPSBVS185UEZTX01EKGZpbGUtPmZfZGVudHJ5LT5kX21vdW50KS0+
ZGV2OworCXN0cnVjdCB1a185cGZpZCAqb3BlbmVkZmlkOworCXN0cnVjdCB1a185cGZzX2ZpbGVf
ZGF0YSAqZmQ7CisJaW50IHJjOworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBmaWxlIGRhdGEu
ICovCisJZmQgPSBjYWxsb2MoMSwgc2l6ZW9mKCpmZCkpOworCWlmICghZmQpCisJCXJldHVybiBF
Tk9NRU07CisKKwkvKiBDbG9uZSBmaWQuICovCisJb3BlbmVkZmlkID0gdWtfOXBfd2FsayhkZXYs
IFVLXzlQRlNfVkZJRChmaWxlLT5mX2RlbnRyeS0+ZF92bm9kZSksCisJCQlOVUxMKTsKKwlpZiAo
UFRSSVNFUlIob3BlbmVkZmlkKSkgeworCQlyYyA9IFBUUjJFUlIob3BlbmVkZmlkKTsKKwkJZ290
byBvdXQ7CisJfQorCisJLyogT3BlbiBjbG9uZWQgZmlkLiAqLworCXJjID0gdWtfOXBfb3Blbihk
ZXYsIG9wZW5lZGZpZCwKKwkJdWtfOXBmc19vcGVuX21vZGVfZnJvbV9wb3NpeF9mbGFncyhmaWxl
LT5mX2ZsYWdzKSk7CisKKwlpZiAocmMpCisJCWdvdG8gb3V0X2VycjsKKworCWZkLT5maWQgPSBv
cGVuZWRmaWQ7CisJZmlsZS0+Zl9kYXRhID0gZmQ7CisgCVVLXzlQRlNfTkQoZmlsZS0+Zl9kZW50
cnktPmRfdm5vZGUpLT5uYl9vcGVuX2ZpbGVzKys7CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoK
Kwl1a185cGZpZF9wdXQob3BlbmVkZmlkKTsKK291dDoKKwlmcmVlKGZkKTsKKwlyZXR1cm4gLXJj
OworfQorCitzdGF0aWMgaW50IHVrXzlwZnNfY2xvc2Uoc3RydWN0IHZub2RlICp2biBfX3VudXNl
ZCwgc3RydWN0IHZmc2NvcmVfZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdWtfOXBmc19maWxlX2Rh
dGEgKmZkID0gVUtfOVBGU19GRChmaWxlKTsKKworCWlmIChmZC0+cmVhZGRpcl9idWYpCisJCWZy
ZWUoZmQtPnJlYWRkaXJfYnVmKTsKKworCXVrXzlwZmlkX3B1dChmZC0+ZmlkKTsKKwlmcmVlKGZk
KTsKKwlVS185UEZTX05EKGZpbGUtPmZfZGVudHJ5LT5kX3Zub2RlKS0+bmJfb3Blbl9maWxlcy0t
OworCXVrXzlwZnNfZnJlZV92bm9kZV9kYXRhX2Nsb3NpbmcoZmlsZS0+Zl9kZW50cnktPmRfdm5v
ZGUpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgdWtfOXBmc19sb29rdXAoc3RydWN0
IHZub2RlICpkdnAsIGNoYXIgKm5hbWUsIHN0cnVjdCB2bm9kZSAqKnZwcCkKIHsKIAlzdHJ1Y3Qg
dWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQoZHZwLT52X21vdW50KS0+ZGV2OwpAQCAtMjY2LDcg
KzM2Miw4NSBAQCBzdGF0aWMgaW50IHVrXzlwZnNfcm1kaXIoc3RydWN0IHZub2RlICpkdnAsIHN0
cnVjdCB2bm9kZSAqdnAsCiBzdGF0aWMgaW50IHVrXzlwZnNfcmVhZGRpcihzdHJ1Y3Qgdm5vZGUg
KnZwLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmcCwKIAkJc3RydWN0IGRpcmVudCAqZGlyKQogewot
CXJldHVybiBFTk9FTlQ7CisJc3RydWN0IHVrXzlwZGV2ICpkZXYgPSBVS185UEZTX01EKHZwLT52
X21vdW50KS0+ZGV2OworCXN0cnVjdCB1a185cGZzX2ZpbGVfZGF0YSAqZmQgPSBVS185UEZTX0ZE
KGZwKTsKKwlpbnQgcmM7CisJc3RydWN0IHVrXzlwX3N0YXQgc3RhdDsKKwlzdHJ1Y3QgdWtfOXBy
ZXEgZmFrZV9yZXF1ZXN0OworCithZ2FpbjoKKwlpZiAoIWZkLT5yZWFkZGlyX2J1ZikgeworCQlm
ZC0+cmVhZGRpcl9idWYgPSBtYWxsb2MoVUtfOVBGU19SRUFERElSX0JVRlNaKTsKKwkJaWYgKCFm
ZC0+cmVhZGRpcl9idWYpCisJCQlyZXR1cm4gRU5PTUVNOworCisJCS8qIEN1cnJlbnRseSB0aGUg
cmVhZGRpcigpIGJ1ZmZlciBpcyBlbXB0eS4gKi8KKwkJZmQtPnJlYWRkaXJfb2ZmID0gMDsKKwkJ
ZmQtPnJlYWRkaXJfc3ogPSAwOworCX0KKworCWlmIChmZC0+cmVhZGRpcl9vZmYgPT0gZmQtPnJl
YWRkaXJfc3opIHsKKwkJZmQtPnJlYWRkaXJfb2ZmID0gMDsKKwkJZmQtPnJlYWRkaXJfc3ogPSB1
a185cF9yZWFkKGRldiwgZmQtPmZpZCwgZnAtPmZfb2Zmc2V0LAorCQkJCVVLXzlQRlNfUkVBRERJ
Ul9CVUZTWiwgZmQtPnJlYWRkaXJfYnVmKTsKKwkJaWYgKGZkLT5yZWFkZGlyX3N6IDwgMCkgewor
CQkJcmMgPSBmZC0+cmVhZGRpcl9zejsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyogRW5kIG9m
IGRpcmVjdG9yeS4gKi8KKwkJaWYgKGZkLT5yZWFkZGlyX3N6ID09IDApIHsKKwkJCXJjID0gLUVO
T0VOVDsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICogVXBkYXRlIG9mZnNldCBmb3Ig
dGhlIG5leHQgcmVhZGRpcigpIGNhbGwgd2hpY2ggcmVxdWlyZXMKKwkJICogdGhlIG5leHQgY2h1
bmsgb2YgZGF0YSB0byBiZSB0cmFuc2ZlcnJlZC4KKwkJICovCisJCWZwLT5mX29mZnNldCArPSBm
ZC0+cmVhZGRpcl9zejsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIGEgZmFrZSByZXF1ZXN0IHRvIHVz
ZSB0aGUgOVAgcmVxdWVzdCBBUEkgdG8gcmVhZCBmcm9tIHRoZQorCSAqIGJ1ZmZlciB0aGUgc3Rh
dCBzdHJ1Y3R1cmUuCisJICovCisJZmFrZV9yZXF1ZXN0LnJlY3YuYnVmID0gZmQtPnJlYWRkaXJf
YnVmOworCWZha2VfcmVxdWVzdC5yZWN2LnNpemUgPSBmZC0+cmVhZGRpcl9zejsKKwlmYWtlX3Jl
cXVlc3QucmVjdi5vZmZzZXQgPSBmZC0+cmVhZGRpcl9vZmY7CisJZmFrZV9yZXF1ZXN0LnN0YXRl
ID0gVUtfOVBSRVFfUkVDRUlWRUQ7CisJcmMgPSB1a185cHJlcV9kZXNlcmlhbGl6ZSgmZmFrZV9y
ZXF1ZXN0LCAiUyIsICZzdGF0KTsKKworCWlmIChyYyA9PSAtRU5PQlVGUykgeworCQkvKgorCQkg
KiBSZXRyeSB3aXRoIGEgY2xlYW4gYnVmZmVyLCBtYXliZSB0aGUgc3RhdCBzdHJ1Y3R1cmUgZ290
CisJCSAqIGNodW5rZWQgYW5kIGlzIG5vdCB3aG9sZSwgYWx0aG91Z2ggdGhlIFJGQyBzYXlzIHRo
aXMgc2hvdWxkCisJCSAqIG5vdCBoYXBwZW4uCisJCSAqLworCQlmZC0+cmVhZGRpcl9vZmYgPSAw
OworCQlmZC0+cmVhZGRpcl9zeiA9IDA7CisJCWdvdG8gYWdhaW47CisJfQorCisJLyogVXBkYXRl
IHRoZSByZWFkZGlyKCkgb2Zmc2V0IHRvIHRoZSBvZmZzZXQgYWZ0ZXIgZGVzZXJpYWxpemF0aW9u
LiAqLworCWZkLT5yZWFkZGlyX29mZiA9IGZha2VfcmVxdWVzdC5yZWN2Lm9mZnNldDsKKworCS8q
CisJICogQW55IG90aGVyIGVycm9yIGJlc2lkZXMgRU5PQlVGUyB3aGVuIGRlc2VyaWFsaXppbmcg
aXMgY29uc2lkZXJlZAorCSAqIGFuIElPIGVycm9yLgorCSAqLworCWlmIChyYykgeworCQlyYyA9
IC1FSU87CisJCWdvdG8gb3V0OworCX0KKworCWRpci0+ZF90eXBlID0gdWtfOXBmc19kdHR5cGVf
ZnJvbV9tb2RlKHN0YXQubW9kZSk7CisJZGlyLT5kX2lubyA9IHVrXzlwZnNfaW5vKCZzdGF0KTsK
KwlzdHJsY3B5KChjaGFyICopICZkaXItPmRfbmFtZSwgc3RhdC5uYW1lLmRhdGEsCisJCQlNSU4o
c2l6ZW9mKGRpci0+ZF9uYW1lKSwgc3RhdC5uYW1lLnNpemUgKyAxVSkpOworCitvdXQ6CisJcmV0
dXJuIC1yYzsKIH0KIAogI2RlZmluZSB1a185cGZzX3NlZWsJCSgodm5vcF9zZWVrX3QpdmZzY29y
ZV92b3BfbnVsbG9wKQpAQCAtMjgxLDggKzQ1NSw2IEBAIHN0YXRpYyBpbnQgdWtfOXBmc19yZWFk
ZGlyKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZwLAogI2RlZmluZSB1
a185cGZzX3N5bWxpbmsJCSgodm5vcF9zeW1saW5rX3QpdmZzY29yZV92b3BfZXBlcm0pCiAjZGVm
aW5lIHVrXzlwZnNfZmFsbG9jYXRlCSgodm5vcF9mYWxsb2NhdGVfdCl2ZnNjb3JlX3ZvcF9udWxs
b3ApCiAjZGVmaW5lIHVrXzlwZnNfcmVuYW1lCQkoKHZub3BfcmVuYW1lX3QpdmZzY29yZV92b3Bf
ZWludmFsKQotI2RlZmluZSB1a185cGZzX29wZW4JCSgodm5vcF9vcGVuX3QpdmZzY29yZV92b3Bf
ZWludmFsKQotI2RlZmluZSB1a185cGZzX2Nsb3NlCQkoKHZub3BfY2xvc2VfdCl2ZnNjb3JlX3Zv
cF9laW52YWwpCiAjZGVmaW5lIHVrXzlwZnNfcmVhZAkJKCh2bm9wX3JlYWRfdCl2ZnNjb3JlX3Zv
cF9laW52YWwpCiAjZGVmaW5lIHVrXzlwZnNfd3JpdGUJCSgodm5vcF93cml0ZV90KXZmc2NvcmVf
dm9wX2VpbnZhbCkKIAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:00:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:00:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XWC-0003PB-Ob; Sat, 07 Sep 2019 10:00:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XWB-0003Oz-DF
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:00:31 +0000
X-Inumbo-ID: 42a8a372-d156-11e9-a337-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42a8a372-d156-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 10:00:02 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UqTBAw05WwD5Rx/Js80WWbioR1E+fQJjxS3E59dqXVYNkqbXhLEy1oFpU68ztvpjKvdpws0lz6qIl+m06a3bFDVg4UHf9YFS8bUyYK4jayt+xlFNC87y92wWsAbNW+BoQ6hlXbTqC/vkBtx5OQcCNDqljFaXBy6UYQ6+iAGKsAB64HI2VIUH9kWss/i2kP+LbjDxIcrt/IkiXxN7UleDSFe8efG/DGt0IyPfKjpxnrlSBrw4tdn7Hpz4sjRBzpR2NpqysRQpnxvVfI5LEL0WfB3NUJiX5LsS6u9KEZSeL1qXlTbGL8Wnj+kAyBJkTunwTrbjPD54e1NMBv85ZYQiHg==
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=HswhVuC1oX7eq23UoeLIqr8mC6rZIAzb7jl6FZrwI0A=;
 b=BrLlNI9nMx9iJYBA0LB9V3+sNvvLqPPQcM/ZBwHVEXWV+DdljtUPWOcvOrzv0xxenIUMCe8TlfM/0BXUKjXmjiwAcRWRVLH8McB+MTMEPb6gTS77mE7S4+VC0g7yiLltXtwoyaAUWrTM7fqFdRJfysykTzrpjHiod7Q0tl0s1uQN9Dp8hZncNJmcosp6BoiWGSth+e9so+U/3wV3R3/iJ0UlIxhoEWuxbnTrlp/5JLfVjuDw675bDSjD9zZGh8LPRvOwFxTBngcDzvgupE7EanaVCJJV0DTHq+gvvDH66ty2wDVjH5AfvzRqEJ7XNrrgoVK1rmWJ26/FqW4HGc53Qw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5018.eurprd01.prod.exchangelabs.com (20.177.211.25) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Sat, 7 Sep
 2019 09:59:56 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 09:59:56 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 7/7] lib/9pfs: Add read and write vnops
Thread-Index: AQHVZWMAg4rfQzrDZECpAh7lPp76Ow==
Date: Sat, 7 Sep 2019 09:59:56 +0000
Message-ID: <20190907095945.12739-8-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0031.eurprd03.prod.outlook.com
 (2603:10a6:803:118::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 2536f0b1-0a68-4057-8173-08d7337a2337
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5018; 
x-ms-traffictypediagnostic: PR1PR01MB5018:
x-microsoft-antispam-prvs: <PR1PR01MB5018608010F9E6AC97D3FED6A6B50@PR1PR01MB5018.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1417;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(39860400002)(376002)(396003)(366004)(136003)(199004)(189003)(66946007)(2906002)(14454004)(54906003)(478600001)(476003)(5640700003)(2616005)(446003)(2351001)(316002)(25786009)(11346002)(99286004)(786003)(46003)(6506007)(386003)(6512007)(1076003)(186003)(52116002)(53936002)(5660300002)(102836004)(76176011)(6116002)(8936002)(71190400001)(50226002)(45776006)(6486002)(6436002)(7736002)(2501003)(81156014)(81166006)(8676002)(486006)(64756008)(66446008)(71200400001)(86362001)(4326008)(66556008)(6916009)(66476007)(256004)(305945005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5018;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 3GKUohUZS46mdE13s6BtYEvAAGDROJzyCAQ2bC+Vpxr7xE9XQAaorqkQbvH6DPuvYNPDbvXJ8tOeekdxFd+PsTVHjXpocyYdqpcsMuK0MfgdHIhNhpV0rIwoKvrSnl6nw4Qzs9bCVCt2qDLEnsOwM6T5mkqM3t7SP9AY7QHPFDj9zqDecDxbaF3zf4oR5qWUu+0zSt2+ShPN0tQUGoTg9iRZkltLqnM5PERIH8arsqWeDy2SklSbybOqTqjarL8KLEb/ethbAmMFv1oGGMC1XLodJBlMlDgb04er2rsBFOKdXzsoToRj+R0ua5vFHIlL5cWR3S5YMiU/e7XfbjxBs1niveCrJcgGrfYQFZ9ghcnNMcEIMk2YS2ddjF0WNiZU+ciShbAGlV2Ka3tFUMbvqJ7YC96mbwzuHCWPLQ/4NtY=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 2536f0b1-0a68-4057-8173-08d7337a2337
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 09:59:56.7380 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: /kmXz/rZlzCamMVOCwlTjaSyN8NItyKL4Qma3kTMLWANXH7GsWagwmT1xTXRQbgVmhKYNClMlpMT1lBk/wAd/9t926sW7uhUIIU+Ue470z4I2d4UX7CrawmXZWOiJyYU
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5018
Subject: [Minios-devel] [UNIKRAFT PATCH 7/7] lib/9pfs: Add read and write
 vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgcmVhZCBhbmQgd3JpdGUgVkZTIG5vZGUgb3BlcmF0aW9ucy4KClNpZ25lZC1vZmYtYnk6IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Ci0tLQogbGliLzlwZnMvOXBmc192bm9wcy5j
IHwgMTA4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogMSBmaWxl
IGNoYW5nZWQsIDEwNiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L2xpYi85cGZzLzlwZnNfdm5vcHMuYyBiL2xpYi85cGZzLzlwZnNfdm5vcHMuYwppbmRleCBiZjAw
OGE4OC4uNTNkMDBiOGUgMTAwNjQ0Ci0tLSBhL2xpYi85cGZzLzlwZnNfdm5vcHMuYworKysgYi9s
aWIvOXBmcy85cGZzX3Zub3BzLmMKQEAgLTQ0Myw2ICs0NDMsMTEyIEBAIG91dDoKIAlyZXR1cm4g
LXJjOwogfQogCitzdGF0aWMgaW50IHVrXzlwZnNfcmVhZChzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1
Y3QgdmZzY29yZV9maWxlICpmcCwKKwkJCXN0cnVjdCB1aW8gKnVpbywgaW50IGlvZmxhZyBfX3Vu
dXNlZCkKK3sKKwlzdHJ1Y3QgdWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQodnAtPnZfbW91bnQp
LT5kZXY7CisJc3RydWN0IHVrXzlwZmlkICpmaWQgPSBVS185UEZTX0ZEKGZwKS0+ZmlkOworCXN0
cnVjdCBpb3ZlYyAqaW92OworCWludCByYzsKKworCWlmICh2cC0+dl90eXBlID09IFZESVIpCisJ
CXJldHVybiBFSVNESVI7CisJaWYgKHZwLT52X3R5cGUgIT0gVlJFRykKKwkJcmV0dXJuIEVJTlZB
TDsKKwlpZiAodWlvLT51aW9fb2Zmc2V0IDwgMCkKKwkJcmV0dXJuIEVJTlZBTDsKKwlpZiAodWlv
LT51aW9fb2Zmc2V0ID49IChvZmZfdCkgdnAtPnZfc2l6ZSkKKwkJcmV0dXJuIDA7CisKKwlpZiAo
IXVpby0+dWlvX3Jlc2lkKQorCQlyZXR1cm4gMDsKKworCWlvdiA9IHVpby0+dWlvX2lvdjsKKwl3
aGlsZSAoIWlvdi0+aW92X2xlbikgeworCQl1aW8tPnVpb19pb3YrKzsKKwkJdWlvLT51aW9faW92
Y250LS07CisJfQorCisJcmMgPSB1a185cF9yZWFkKGRldiwgZmlkLCB1aW8tPnVpb19vZmZzZXQs
CisJCQkgICBpb3YtPmlvdl9sZW4sIGlvdi0+aW92X2Jhc2UpOworCWlmIChyYyA8IDApCisJCXJl
dHVybiAtcmM7CisKKwlpb3YtPmlvdl9iYXNlID0gKGNoYXIgKilpb3YtPmlvdl9iYXNlICsgcmM7
CisJaW92LT5pb3ZfbGVuIC09IHJjOworCXVpby0+dWlvX3Jlc2lkIC09IHJjOworCXVpby0+dWlv
X29mZnNldCArPSByYzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVrXzlwZnNfd3Jp
dGUoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVpbyAqdWlvLCBpbnQgaW9mbGFnKQoreworCXN0
cnVjdCB1a185cGRldiAqZGV2ID0gVUtfOVBGU19NRCh2cC0+dl9tb3VudCktPmRldjsKKwlzdHJ1
Y3QgdWtfOXBmaWQgKmZpZDsKKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKKwlpbnQgcmM7CisKKwlpZiAo
dnAtPnZfdHlwZSA9PSBWRElSKQorCQlyZXR1cm4gRUlTRElSOworCWlmICh2cC0+dl90eXBlICE9
IFZSRUcpCisJCXJldHVybiBFSU5WQUw7CisJaWYgKHVpby0+dWlvX29mZnNldCA8IDApCisJCXJl
dHVybiBFSU5WQUw7CisJaWYgKHVpby0+dWlvX29mZnNldCA+PSBMT05HX01BWCkKKwkJcmV0dXJu
IEVGQklHOworCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChp
b2ZsYWcgJiBJT19BUFBFTkQpCisJCXVpby0+dWlvX29mZnNldCA9IHZwLT52X3NpemU7CisKKwkv
KiBDbG9uZSB2bm9kZSBmaWQuICovCisJZmlkID0gdWtfOXBfd2FsayhkZXYsIFVLXzlQRlNfVkZJ
RCh2cCksIE5VTEwpOworCWlmIChQVFJJU0VSUihmaWQpKQorCQlyZXR1cm4gLVBUUjJFUlIoZmlk
KTsKKworCXJjID0gdWtfOXBfb3BlbihkZXYsIGZpZCwgVUtfOVBfT1dSSVRFKTsKKwlpZiAocmMg
PCAwKQorCQlnb3RvIG91dDsKKworCWlmICghdWlvLT51aW9fcmVzaWQpCisJCXJldHVybiAwOwor
CisJaW92ID0gdWlvLT51aW9faW92OworCXdoaWxlICghaW92LT5pb3ZfbGVuKSB7CisJCXVpby0+
dWlvX2lvdisrOworCQl1aW8tPnVpb19pb3ZjbnQtLTsKKwl9CisKKwlyYyA9IHVrXzlwX3dyaXRl
KGRldiwgZmlkLCB1aW8tPnVpb19vZmZzZXQsCisJCQkgICAgaW92LT5pb3ZfbGVuLCBpb3YtPmlv
dl9iYXNlKTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gLXJjOworCisJaW92LT5pb3ZfYmFzZSA9
IChjaGFyICopaW92LT5pb3ZfYmFzZSArIHJjOworCWlvdi0+aW92X2xlbiAtPSByYzsKKwl1aW8t
PnVpb19yZXNpZCAtPSByYzsKKwl1aW8tPnVpb19vZmZzZXQgKz0gcmM7CisKKwlpZiAocmMgPCAw
KQorCQlnb3RvIG91dDsKKworCXJjID0gMDsKKworCS8qCisJICogSWYgdGhlIHVpbyBvZmZzZXQg
YWZ0ZXIgY29tcGxldGlvbiBvZiB0aGUgd3JpdGUgcmVxdWVzdHMgaXMgYmlnZ2VyCisJICogdGhh
biB0aGUgdm5vZGUncyBhc3NvY2lhdGVkIHNpemUsIHRoZW4gdGhlIHNpemUgbXVzdCBiZSB1cGRh
dGVkCisJICogYWNjb3JkaW5nbHkuCisJICovCisJaWYgKHVpby0+dWlvX29mZnNldCA+IHZwLT52
X3NpemUpCisJCXZwLT52X3NpemUgPSB1aW8tPnVpb19vZmZzZXQ7CisKK291dDoKKwl1a185cGZp
ZF9wdXQoZmlkKTsKKwlyZXR1cm4gLXJjOworfQorCiAjZGVmaW5lIHVrXzlwZnNfc2VlawkJKCh2
bm9wX3NlZWtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCiAjZGVmaW5lIHVrXzlwZnNfaW9jdGwJCSgo
dm5vcF9pb2N0bF90KXZmc2NvcmVfdm9wX2VpbnZhbCkKICNkZWZpbmUgdWtfOXBmc19mc3luYwkJ
KCh2bm9wX2ZzeW5jX3QpdmZzY29yZV92b3BfbnVsbG9wKQpAQCAtNDU1LDggKzU2MSw2IEBAIG91
dDoKICNkZWZpbmUgdWtfOXBmc19zeW1saW5rCQkoKHZub3Bfc3ltbGlua190KXZmc2NvcmVfdm9w
X2VwZXJtKQogI2RlZmluZSB1a185cGZzX2ZhbGxvY2F0ZQkoKHZub3BfZmFsbG9jYXRlX3QpdmZz
Y29yZV92b3BfbnVsbG9wKQogI2RlZmluZSB1a185cGZzX3JlbmFtZQkJKCh2bm9wX3JlbmFtZV90
KXZmc2NvcmVfdm9wX2VpbnZhbCkKLSNkZWZpbmUgdWtfOXBmc19yZWFkCQkoKHZub3BfcmVhZF90
KXZmc2NvcmVfdm9wX2VpbnZhbCkKLSNkZWZpbmUgdWtfOXBmc193cml0ZQkJKCh2bm9wX3dyaXRl
X3QpdmZzY29yZV92b3BfZWludmFsKQogCiBzdHJ1Y3Qgdm5vcHMgdWtfOXBmc192bm9wcyA9IHsK
IAkudm9wX29wZW4JPSB1a185cGZzX29wZW4sCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0
Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:08:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:08:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xe3-0003dD-Le; Sat, 07 Sep 2019 10:08:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xe2-0003d8-3x
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:08:38 +0000
X-Inumbo-ID: 7508f280-d157-11e9-a337-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7508f280-d157-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 10:08:37 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id r195so9614941wme.2
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:08:37 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=kMQq1sDu2PHuTScVmiaGWbnio2EyZH+TmReeh1WdryE=;
 b=KTauvhiY7YibmgNL556sJTeL0NpM6P3GauadeMLpAd/KSqhrm0SOShQTBhO84cQa4U
 0V1KPoNxAbmvP+A/zwFbUS/YkP4tz4uN7ifDFl6K5N7c1sY1lIPKtHRGDxcLV0C0+WVZ
 S5Y0NCPrU7CMO6+Vq8nM/BCuYwbDOVmDXdjhKqGjUhvCZZHhCo4c5PJDO9pYyUa35kWL
 xYW+YbDOtV5ZaVG+7KwKht740yu+nmzxXiN4cb3QN7sGO+tIhwmdcRFdxyAdTxKEUk2q
 R2ZGEY32ImAa6hiKftqRM2b1J4ErAWExERACL4IcyH3SnOkscvPIS1Eui4RFpLBfMYSI
 L8ig==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=kMQq1sDu2PHuTScVmiaGWbnio2EyZH+TmReeh1WdryE=;
 b=FppebskY1lxlWHIxHaBVLNpkqve52n/yo8O3L0f4VPOc/MEI9KGqe6tcDAH80mWYsw
 gIYOe1tqGLDIVIl3lLI3VOpc2TOyARdZUKCQPHJPqEUiS2dUcayB6o3etBN017DaEvN8
 u+aAU6qiTUl61Ebr4OfzzRCnODXtLUd9o3KUg79oWMGbZYSzIdzPX2JQlFvYPtAlmxEA
 MF4Xxb+5d7LgpLY4V0aWLlEVHnyikuU2HrCcQQB2pRf84/yRK8NvdbLHqs3TuaVEtKV2
 hCfLC4uIvc/F/IIP9U07POQNXHH2JXswBY0b2AOMka08ohirVAUhiirmbo6L7/xjJYBZ
 9uhg==
X-Gm-Message-State: APjAAAV/2xcy+2pxZvhQo0OwCxKV8E+wlBhZKRLwIDVxhgnQIlgKCd9g
 cE6M4HfW7FQbz0DeM73pCRM=
X-Google-Smtp-Source: APXvYqz7l1UlD7KoBR70ZFRZ/HLc5hS8/gJJ0E9RcMBQVIy8ZVMRC1N6bfbhz1Akj7w1+f6blBrGKw==
X-Received: by 2002:a1c:4b0a:: with SMTP id y10mr11496380wma.78.1567850916338; 
 Sat, 07 Sep 2019 03:08:36 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id y3sm15787029wmg.2.2019.09.07.03.08.35
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:08:35 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907095945.12739-2-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <59294800-639d-2bf3-430e-0fbb17b8ae2a@gmail.com>
Date: Sat, 7 Sep 2019 13:08:35 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907095945.12739-2-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/7] lib/9pfs: Add 9pfs skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NTkgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUg
OXAgZmlsZXN5c3RlbSBhcyBhIHNlcGFyYXRlIGxpYnJhcnksIHBsYWNlZAo+IGluIHRoZSBtZW51
Y29uZmlnIHVuZGVyICJ2ZnNjb3JlIiwgd2l0aCBvdGhlciBhdmFpbGFibGUgZmlsZXN5c3RlbXMu
Cj4gCj4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAt
LS0KPiAgbGliLzlwZnMvQ29uZmlnLnVrICAgICB8IDUgKysrKysKPiAgbGliLzlwZnMvTWFrZWZp
bGUudWsgICB8IDEgKwo+ICBsaWIvOXBmcy9leHBvcnRzeW1zLnVrIHwgMSArCj4gIGxpYi9Db25m
aWcudWsgICAgICAgICAgfCAxICsKPiAgbGliL01ha2VmaWxlLnVrICAgICAgICB8IDEgKwo+ICA1
IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
LzlwZnMvQ29uZmlnLnVrCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvOXBmcy9NYWtlZmlsZS51
awo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliLzlwZnMvZXhwb3J0c3ltcy51awo+IAo+IGRpZmYg
LS1naXQgYS9saWIvOXBmcy9Db25maWcudWsgYi9saWIvOXBmcy9Db25maWcudWsKPiBuZXcgZmls
ZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi4wZmIzYzc2NQo+IC0tLSAvZGV2L251bGwK
PiArKysgYi9saWIvOXBmcy9Db25maWcudWsKPiBAQCAtMCwwICsxLDUgQEAKPiArY29uZmlnIExJ
QjlQRlMKPiArCWJvb2wgIjlwZnM6IDlwIGZpbGVzeXN0ZW0iCj4gKwlkZWZhdWx0IHkKPiArCWRl
cGVuZHMgb24gTElCVkZTQ09SRQo+ICsJZGVwZW5kcyBvbiBMSUJVSzlQCj4gZGlmZiAtLWdpdCBh
L2xpYi85cGZzL01ha2VmaWxlLnVrIGIvbGliLzlwZnMvTWFrZWZpbGUudWsKPiBuZXcgZmlsZSBt
b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi5lOTNlY2MzNAo+IC0tLSAvZGV2L251bGwKPiAr
KysgYi9saWIvOXBmcy9NYWtlZmlsZS51awo+IEBAIC0wLDAgKzEgQEAKPiArJChldmFsICQoY2Fs
bCBhZGRsaWJfcyxsaWI5cGZzLCQoQ09ORklHX0xJQjlQRlMpKSkKPiBkaWZmIC0tZ2l0IGEvbGli
LzlwZnMvZXhwb3J0c3ltcy51ayBiL2xpYi85cGZzL2V4cG9ydHN5bXMudWsKPiBuZXcgZmlsZSBt
b2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi42MjFlOTRmMAo+IC0tLSAvZGV2L251bGwKPiAr
KysgYi9saWIvOXBmcy9leHBvcnRzeW1zLnVrCj4gQEAgLTAsMCArMSBAQAo+ICtub25lCj4gZGlm
ZiAtLWdpdCBhL2xpYi9Db25maWcudWsgYi9saWIvQ29uZmlnLnVrCj4gaW5kZXggZjM1ODhhYWYu
LjMwZWMwOTRkIDEwMDY0NAo+IC0tLSBhL2xpYi9Db25maWcudWsKPiArKysgYi9saWIvQ29uZmln
LnVrCj4gQEAgLTQzLDYgKzQzLDcgQEAgc291cmNlICJsaWIvc3lzY2FsbF9zaGltL0NvbmZpZy51
ayIKPiAgc291cmNlICJsaWIvdmZzY29yZS9Db25maWcudWsiCj4gIHNvdXJjZSAibGliL3JhbWZz
L0NvbmZpZy51ayIKPiAgc291cmNlICJsaWIvZGV2ZnMvQ29uZmlnLnVrIgo+ICtzb3VyY2UgImxp
Yi85cGZzL0NvbmZpZy51ayIKPiAgc291cmNlICJsaWIvdWtsb2NrL0NvbmZpZy51ayIKPiAgc291
cmNlICJsaWIvdWttcGkvQ29uZmlnLnVrIgo+ICBzb3VyY2UgImxpYi91a3N3cmFuZC9Db25maWcu
dWsiCj4gZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS51ayBiL2xpYi9NYWtlZmlsZS51awo+IGlu
ZGV4IGU2MmU2MGFmLi44OWE1N2Q3MCAxMDA2NDQKPiAtLS0gYS9saWIvTWFrZWZpbGUudWsKPiAr
KysgYi9saWIvTWFrZWZpbGUudWsKPiBAQCAtMjEsNiArMjEsNyBAQCAkKGV2YWwgJChjYWxsIF9p
bXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi9zeXNjYWxsX3NoaW0pKQo+ICAkKGV2YWwg
JChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi92ZnNjb3JlKSkKPiAgJChl
dmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvcmFtZnMpKQo+ICAk
KGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi9kZXZmcykpCj4g
KyQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliLzlwZnMpKQo+
ICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a2xvY2sp
KQo+ICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a21w
aSkpCj4gICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3Vr
YnVzKSkKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:08:50 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:08:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XeE-0003e4-Nw; Sat, 07 Sep 2019 10:08:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XeE-0003dy-6F
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:08:50 +0000
X-Inumbo-ID: 7c4872e6-d157-11e9-b299-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7c4872e6-d157-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:08:49 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id w13so8958454wru.7
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:08:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=5VBnDQYRAIQu1MVTiUnftmQDukOApDEiPfn9vHN4DbE=;
 b=Di0JRvylOfDqdgK7g2nkDfy1JjjYzCrzD6XF82sZot0Zn74rDmLmsC7naLRDGGoC6w
 kWYg+caL3putIqD4uRHVvM2SyN+hIu44XhZec6DAPhWnqlsAcO/5detVaFI3StrpUv5N
 dUER2Zql3TuPCi1Ps1AnaKnv/DqQNSxVE1CM8MvTSLy7+3ckSPIr/I0ahzwXsvXcDBZx
 j9u+N9OF/+ly/UFHY8IWFGtzcuffVoOniHCozW5/hEih8MyFwtcTp0Y0AE/lyI8Y+tFR
 ZrxUoTi6pRJaJaZ6H4xRfqeceEXqI0xzns622CvWMIpc7YySDtM7xwnBY+EwvMf//QWO
 RNlQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=5VBnDQYRAIQu1MVTiUnftmQDukOApDEiPfn9vHN4DbE=;
 b=o3bd8WKwJZVqhzQA/YM/3Z4/cRHzI0cYHSd/tP3RZ+Kl5JfukBrdTvA0a2XFoXQqPT
 A2xr1WgRLw1cshBKzip9yjXQm/kDF0uA8TrydYLWAkeOJ32eF93r+K7RxdSNft+LkrOw
 mAZijahbq9HdXHjmOtBU22jkJAQtIkm5dU1PlUHhnJ5b4Cc0ceBiHsz/ignFMUQNZdHT
 FEDL4+gYf59oIiRhGYqBQ8U0NoJw9tP3ccUBNPL4IymKKYt/ILJ8nU0HJNmUYDSPqOT3
 VTe2M+ONGSffYi9i8VS4nVmry6OlyuyGgslzYj+NWUsya+ITus95n6XWpW2CcXdaqUjg
 IF2g==
X-Gm-Message-State: APjAAAUnqOtdF4Ay9gk2ZepWTChcRPhFhs7msomb/Z8wNo+V3WB3V6Ns
 DTeKqChLdi/S0J6lRGi7NyA=
X-Google-Smtp-Source: APXvYqxoHFWF69Y7Fh4ENz7z4rR1Y+jiw77FWv80Cjmg7a1q0OlE/yd4p+oXM7auN8pURW8kfCNH5g==
X-Received: by 2002:adf:e947:: with SMTP id m7mr11254362wrn.178.1567850928464; 
 Sat, 07 Sep 2019 03:08:48 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id f75sm9115966wmf.2.2019.09.07.03.08.47
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:08:48 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907095945.12739-3-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <81afb6ab-6b61-9654-4319-ca460ad1fe6d@gmail.com>
Date: Sat, 7 Sep 2019 13:08:47 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907095945.12739-3-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/7] lib/9pfs: Add 9pfs header
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NTkgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUg
OXBmcyBoZWFkZXIgd2hpY2ggY29udGFpbnMgdGhlIGRhdGEgc3RydWN0dXJlcwo+IHVzZWQgYnkg
dGhlIGZpbGUgc3lzdGVtIGFuZCBoZWxwZXIgbWFjcm9zIGZvciBhY2Nlc3NpbmcgdGhlbSBmcm9t
Cj4gVkZTIHN0cnVjdHVyZXMuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jp
c3RiQGdtYWlsLmNvbT4KPiAtLS0KPiAgbGliLzlwZnMvOXBmcy5oIHwgMTAyICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwg
MTAyIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi85cGZzLzlwZnMuaAo+
IAo+IGRpZmYgLS1naXQgYS9saWIvOXBmcy85cGZzLmggYi9saWIvOXBmcy85cGZzLmgKPiBuZXcg
ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi4zNTcxYzg1Nwo+IC0tLSAvZGV2L251
bGwKPiArKysgYi9saWIvOXBmcy85cGZzLmgKPiBAQCAtMCwwICsxLDEwMiBAQAo+ICsvKiBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4gKy8qCj4gKyAqIEF1dGhvcnM6
IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIENvcHlyaWdodCAo
YykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJl
IG1ldDoKPiArICoKPiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
PiArICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KPiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMg
SVMiCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ICsgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KPiArICoKPiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJ
RUQgSU4gQU5ZIFdBWS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fVUtfOVBGU19fCj4gKyNkZWZp
bmUgX19VS185UEZTX18KPiArCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gKyNpbmNsdWRlIDx1
ay85cGRldi5oPgo+ICsjaW5jbHVkZSA8dWsvOXBmaWQuaD4KPiArCj4gKyNpbmNsdWRlIDx2ZnNj
b3JlL3ByZXguaD4KPiArCj4gKy8qCj4gKyAqIEN1cnJlbnRseSBzdXBwb3J0cyBvbmx5IHRoZSA5
UDIwMDAudSB2YXJpYW50IG9mIHRoZSBwcm90b2NvbC4KPiArICovCj4gK2VudW0gdWtfOXBmc19w
cm90byB7Cj4gKwlVS185UF9QUk9UT18yMDAwVSwKPiArCVVLXzlQX1BST1RPX01BWAo+ICt9Owo+
ICsKPiArc3RydWN0IHVrXzlwZnNfbW91bnRfZGF0YSB7Cj4gKwkvKiA5UCBkZXZpY2UuICovCj4g
KwlzdHJ1Y3QgdWtfOXBkZXYJCSpkZXY7Cj4gKwkvKiBXYW50ZWQgdHJhbnNwb3J0LiAqLwo+ICsJ
c3RydWN0IHVrXzlwZGV2X3RyYW5zCSp0cmFuczsKPiArCS8qIFByb3RvY29sIHZlcnNpb24gdXNl
ZC4gKi8KPiArCWVudW0gdWtfOXBmc19wcm90bwlwcm90bzsKPiArCS8qIFVzZXJuYW1lIHRvIGF0
dGVtcHQgdG8gbW91bnQgYXMgb24gdGhlIHJlbW90ZSBzZXJ2ZXIuICovCj4gKwljb25zdCBjaGFy
CQkqdW5hbWU7Cj4gKwkvKiBGaWxlIHRyZWUgdG8gYWNjZXNzIHdoZW4gb2ZmZXJlZCBtdWx0aXBs
ZSBleHBvcnRlZCBmaWxlc3lzdGVtcy4gKi8KPiArCWNvbnN0IGNoYXIJCSphbmFtZTsKPiArfTsK
PiArCj4gK3N0cnVjdCB1a185cGZzX2ZpbGVfZGF0YSB7Cj4gKwkvKiBGaWQgYXNzb2NpYXRlZCB3
aXRoIHRoZSA5cGZzIGZpbGUuICovCj4gKwlzdHJ1Y3QgdWtfOXBmaWQgICAgICAgICpmaWQ7Cj4g
KwkvKgo+ICsJICogQnVmZmVyIGZvciBwZXJzaXN0aW5nIHJlc3VsdHMgZnJvbSBhIDlQIHJlYWQg
b3BlcmF0aW9uIGFjcm9zcwo+ICsJICogcmVhZGRpcigpIGNhbGxzLgo+ICsJICovCj4gKwljaGFy
ICAgICAgICAgICAgICAgICAgICpyZWFkZGlyX2J1ZjsKPiArCS8qCj4gKwkgKiBPZmZzZXQgd2l0
aGluIHRoZSBidWZmZXIgd2hlcmUgdGhlIHN0YXQgb2YgdGhlIG5leHQgY2hpbGQgY2FuCj4gKwkg
KiBiZSBmb3VuZC4KPiArCSAqLwo+ICsJaW50ICAgICAgICAgICAgICAgICAgICByZWFkZGlyX29m
ZjsKPiArCS8qIFRvdGFsIHNpemUgb2YgdGhlIGRhdGEgaW4gdGhlIHJlYWRkaXIgYnVmLiAqLwo+
ICsJaW50ICAgICAgICAgICAgICAgICAgICByZWFkZGlyX3N6Owo+ICt9Owo+ICsKPiArc3RydWN0
IHVrXzlwZnNfbm9kZV9kYXRhIHsKPiArCS8qIEZpZCBhc3NvY2lhdGVkIHdpdGggdGhlIHZmcyBu
b2RlLiAqLwo+ICsJc3RydWN0IHVrXzlwZmlkICAgICAgICAqZmlkOwo+ICsJLyogTnVtYmVyIG9m
IGZpbGVzIG9wZW5lZCBmcm9tIHRoZSB2ZnMgbm9kZS4gKi8KPiArCWludCAgICAgICAgICAgICAg
ICAgICAgbmJfb3Blbl9maWxlczsKPiArCS8qIElzIGEgOVAgcmVtb3ZlIGNhbGwgcmVxdWlyZWQg
d2hlbiBuYl9vcGVuX2ZpbGVzIHJlYWNoZXMgMD8gKi8KPiArCWJvb2wgICAgICAgICAgICAgICAg
ICAgcmVtb3ZlZDsKPiArfTsKPiArCj4gK2ludCB1a185cGZzX2FsbG9jYXRlX3Zub2RlX2RhdGEo
c3RydWN0IHZub2RlICp2cCwgc3RydWN0IHVrXzlwZmlkICpmaWQpOwo+ICt2b2lkIHVrXzlwZnNf
ZnJlZV92bm9kZV9kYXRhKHN0cnVjdCB2bm9kZSAqdnApOwo+ICsKPiArLyogRGVmYXVsdCByZWFk
ZGlyIGJ1ZmZlciBzaXplLiAqLwo+ICsjZGVmaW5lIFVLXzlQRlNfUkVBRERJUl9CVUZTWgk4MTky
Cj4gKwo+ICsjZGVmaW5lIFVLXzlQRlNfRkQoZmlsZSkgKChzdHJ1Y3QgdWtfOXBmc19maWxlX2Rh
dGEgKikgKGZpbGUpLT5mX2RhdGEpCj4gKyNkZWZpbmUgVUtfOVBGU19ORCh2bm9kZSkgKChzdHJ1
Y3QgdWtfOXBmc19ub2RlX2RhdGEgKikgKHZub2RlKS0+dl9kYXRhKQo+ICsjZGVmaW5lIFVLXzlQ
RlNfVkZJRCh2bm9kZSkgKFVLXzlQRlNfTkQodm5vZGUpLT5maWQpCj4gKyNkZWZpbmUgVUtfOVBG
U19NRChtb3VudCkgKChzdHJ1Y3QgdWtfOXBmc19tb3VudF9kYXRhICopIChtb3VudCktPm1fZGF0
YSkKPiArCj4gKyNlbmRpZiAvKiBfX1VLXzlQRlNfXyAqLwo+IAoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:08:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:08:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XeN-0003fH-QB; Sat, 07 Sep 2019 10:08:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XeM-0003fA-JI
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:08:58 +0000
X-Inumbo-ID: 810ada44-d157-11e9-b76c-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 810ada44-d157-11e9-b76c-bc764e2007e4;
 Sat, 07 Sep 2019 10:08:57 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id p13so9628077wmh.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:08:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=7FeeJRpTZ2msWoLyCtgt0ull/j7BDWUms/tqoasYw3g=;
 b=Z9KhHFqwJsjJnKZlozjU7UFbXEMe8+3cZ5+jRx0WGhpT0vDJIHjlK3fsHLh+qatcu5
 rqC5lbwZelvzCtjQEAbkQY6PSCwTZxSvSknOH/aup/JCB5jjbW233oUmU91pguct6d3w
 JrMqYb6XG1JujkL77LRu6KZq4Q0A/Ope2bLq7GPJMX1IzEfMHd7XuwBuAMerqlUuZnmO
 fwAoDDQvg8Nhp3CbOR7RMCX6ddQzBNsmeJRtIgftix/QWoFpeAycnw15STA2Ce+vXPiw
 pCxsZGmRQLD4c6evWJV3e9mjYqpeepTpZTXCr80AD+9qXvAyhq8c6ajgpFHGfp5fpPVb
 EO9Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=7FeeJRpTZ2msWoLyCtgt0ull/j7BDWUms/tqoasYw3g=;
 b=oCuBIaIAOIV63zpf1wA7uRWLiO096kBe1U3ulIB64mB0j5+35EQ6rqdN4KYfWj9jSG
 /sfNCAbid6wMfXW+g5yKVs8NC5S81Jbr6M0a2o8GsBJ/9+1LRWA/3DL4em3USlhD+/wC
 rQfGJ7IX9xXk+gCw7P2GCRN6DU9IfDPCozd6Azs2l8DCXk+/jmwBPIIC0R60FIBCvFD1
 ifXFwDW9QgSzDgfqNlG50P1jHCKYjiKOmY08U3anbJsuPVxLj3GksmxS1kC7FBUlreBo
 DgeiuPhqgU/3SfIoJwiHOixVfxiZfKUvm4ioKV7Z0D/xED1doSYrtTO7rVKW/sRSQfQT
 a/qw==
X-Gm-Message-State: APjAAAV/Dzb1Z7zySZj+EUYJFGFgUxXnQ1Km/6qKxLx9vB+Uc0bMcP6d
 qYKLHG7h00Zp72ZgH9HxLpc=
X-Google-Smtp-Source: APXvYqxdKWT1a3S/TmGLiEciHllZKfUeP1Ry/XtNI6vhXpe4+QkAglL5uKV/SN4eAVS8sV1JmRFRLQ==
X-Received: by 2002:a7b:c447:: with SMTP id l7mr10418024wmi.33.1567850936480; 
 Sat, 07 Sep 2019 03:08:56 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id v6sm12642355wma.24.2019.09.07.03.08.55
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:08:56 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907095945.12739-4-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <e8fa184f-1f62-66d9-0f82-b71167951cbb@gmail.com>
Date: Sat, 7 Sep 2019 13:08:55 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907095945.12739-4-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 3/7] lib/9pfs: Implement mount
 and unmount
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NTkgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggaW1wbGVtZW50
cyB0aGUgbW91bnQgYW5kIHVubW91bnQgb3BlcmF0aW9ucyBhbmQgYWRkcyB0aGUKPiBza2VsZXRv
biBmb3IgVkZTIG5vZGUgb3BlcmF0aW9ucy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBC
YW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBsaWIvOXBmcy85cGZzX3Zmc29wcy5jIHwg
MTg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIGxpYi85cGZz
LzlwZnNfdm5vcHMuYyAgfCAxMzUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgbGli
LzlwZnMvTWFrZWZpbGUudWsgICB8ICAgMyArCj4gIDMgZmlsZXMgY2hhbmdlZCwgMzI3IGluc2Vy
dGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi85cGZzLzlwZnNfdmZzb3BzLmMKPiAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi85cGZzLzlwZnNfdm5vcHMuYwo+IAo+IGRpZmYgLS1naXQg
YS9saWIvOXBmcy85cGZzX3Zmc29wcy5jIGIvbGliLzlwZnMvOXBmc192ZnNvcHMuYwo+IG5ldyBm
aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLmFjY2IzYTU2Cj4gLS0tIC9kZXYvbnVs
bAo+ICsrKyBiL2xpYi85cGZzLzlwZnNfdmZzb3BzLmMKPiBAQCAtMCwwICsxLDE4OSBAQAo+ICsv
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4gKy8qCj4gKyAqIEF1
dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIENvcHly
aWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiAr
ICogYXJlIG1ldDoKPiArICoKPiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKPiArICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiArICoKPiArICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
PiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Cj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ICsgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KPiArICoKPiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1Ig
TU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+
Cj4gKyNpbmNsdWRlIDx1ay9lcnJwdHIuaD4KPiArI2luY2x1ZGUgPHVrLzlwLmg+Cj4gKyNpbmNs
dWRlIDx1ay85cGRldl90cmFucy5oPgo+ICsjaW5jbHVkZSA8dmZzY29yZS9tb3VudC5oPgo+ICsj
aW5jbHVkZSA8dmZzY29yZS9kZW50cnkuaD4KPiArCj4gKyNpbmNsdWRlICI5cGZzLmgiCj4gKwo+
ICtleHRlcm4gc3RydWN0IHZub3BzIHVrXzlwZnNfdm5vcHM7Cj4gKwo+ICtzdGF0aWMgaW50IHVr
XzlwZnNfbW91bnQoc3RydWN0IG1vdW50ICptcCwgY29uc3QgY2hhciAqZGV2LCBpbnQgZmxhZ3Ms
Cj4gKwkJCSBjb25zdCB2b2lkICpkYXRhKTsKPiArCj4gK3N0YXRpYyBpbnQgdWtfOXBmc191bm1v
dW50KHN0cnVjdCBtb3VudCAqbXAsIGludCBmbGFncyk7Cj4gKwo+ICsjZGVmaW5lIHVrXzlwZnNf
c3luYwkJKCh2ZnNvcF9zeW5jX3QpdmZzY29yZV9udWxsb3ApCj4gKyNkZWZpbmUgdWtfOXBmc192
Z2V0CQkoKHZmc29wX3ZnZXRfdCl2ZnNjb3JlX251bGxvcCkKPiArI2RlZmluZSB1a185cGZzX3N0
YXRmcwkJKCh2ZnNvcF9zdGF0ZnNfdCl2ZnNjb3JlX251bGxvcCkKPiArCj4gK3N0cnVjdCB2ZnNv
cHMgdWtfOXBmc192ZnNvcHMgPSB7Cj4gKwkudmZzX21vdW50CT0gdWtfOXBmc19tb3VudCwKPiAr
CS52ZnNfdW5tb3VudAk9IHVrXzlwZnNfdW5tb3VudCwKPiArCS52ZnNfc3luYwk9IHVrXzlwZnNf
c3luYywKPiArCS52ZnNfdmdldAk9IHVrXzlwZnNfdmdldCwKPiArCS52ZnNfc3RhdGZzCT0gdWtf
OXBmc19zdGF0ZnMsCj4gKwkudmZzX3Zub3BzCT0gJnVrXzlwZnNfdm5vcHMKPiArfTsKPiArCj4g
K3N0YXRpYyBzdHJ1Y3QgdmZzY29yZV9mc190eXBlIHVrXzlwZnNfZnMgPSB7Cj4gKwkudnNfbmFt
ZQk9ICI5cGZzIiwKPiArCS52c19pbml0CT0gTlVMTCwKPiArCS52c19vcAkJPSAmdWtfOXBmc192
ZnNvcHMKPiArfTsKPiArCj4gK1VLX0ZTX1JFR0lTVEVSKHVrXzlwZnNfZnMpOwo+ICsKPiArc3Rh
dGljIGNvbnN0IGNoYXIgKnVrXzlwZnNfcHJvdG9fc3RyW1VLXzlQX1BST1RPX01BWF0gPSB7Cj4g
KwlbVUtfOVBfUFJPVE9fMjAwMFVdID0gIjlQMjAwMC51Igo+ICt9Owo+ICsKPiArc3RhdGljIGlu
dCB1a185cGZzX3BhcnNlX29wdGlvbnMoc3RydWN0IHVrXzlwZnNfbW91bnRfZGF0YSAqbWQsCj4g
KwkJY29uc3Qgdm9pZCAqZGF0YSBfX3VudXNlZCkKPiArewo+ICsJaW50IHJjID0gMDsKPiArCj4g
KwltZC0+dHJhbnMgPSB1a185cGRldl90cmFuc19nZXRfZGVmYXVsdCgpOwo+ICsJaWYgKCFtZC0+
dHJhbnMpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJLyogQ3VycmVudGx5LCBubyBvcHRpb25zIGFy
ZSBzdXBwb3J0ZWQuICovCj4gKwo+ICsJbWQtPnByb3RvID0gVUtfOVBfUFJPVE9fMjAwMFU7Cj4g
KwltZC0+dW5hbWUgPSAiIjsKPiArCW1kLT5hbmFtZSA9ICIiOwo+ICsKPiArb3V0Ogo+ICsJcmV0
dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVrXzlwZnNfbW91bnQoc3RydWN0IG1vdW50
ICptcCwgY29uc3QgY2hhciAqZGV2LAo+ICsJCQlpbnQgZmxhZ3MgX191bnVzZWQsIGNvbnN0IHZv
aWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCB1a185cGZzX21vdW50X2RhdGEgKm1kOwo+ICsJc3Ry
dWN0IHVrXzlwcmVxICp2ZXJzaW9uX3JlcTsKPiArCXN0cnVjdCB1a185cF9zdHIgcmN2ZF92ZXJz
aW9uOwo+ICsJc3RydWN0IHVrXzlwZmlkICpyb290ZmlkOwo+ICsJaW50IHZlcnNpb25fYWNjZXB0
ZWQ7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJLyogU2V0IGRhdGEgYXMgbnVsbCwgdm5vcF9pbmFjdGl2
ZSgpIGNoZWNrcyB0aGlzIGZvciB0aGUgcm9vdCBmaWQuICovCj4gKwltcC0+bV9yb290LT5kX3Zu
b2RlLT52X2RhdGEgPSBOVUxMOwo+ICsKPiArCS8qIEFsbG9jYXRlIG1vdW50IGRhdGEsIHBhcnNl
IG9wdGlvbnMuICovCj4gKwltZCA9IG1hbGxvYyhzaXplb2YoKm1kKSk7Cj4gKwlpZiAoIW1kKQo+
ICsJCXJldHVybiBFTk9NRU07Cj4gKwo+ICsJcmMgPSB1a185cGZzX3BhcnNlX29wdGlvbnMobWQs
IGRhdGEpOwo+ICsJaWYgKHJjKQo+ICsJCWdvdG8gb3V0X2ZyZWVfbWRhdGE7Cj4gKwo+ICsJbXAt
Pm1fZGF0YSA9IG1kOwo+ICsKPiArCS8qIEVzdGFibGlzaCBjb25uZWN0aW9uIHdpdGggdGhlIGdp
dmVuIDlQIGVuZHBvaW50LiAqLwo+ICsJbWQtPmRldiA9IHVrXzlwZGV2X2Nvbm5lY3QobWQtPnRy
YW5zLCBkZXYsIGRhdGEsIE5VTEwpOwo+ICsJaWYgKFBUUklTRVJSKG1kLT5kZXYpKSB7Cj4gKwkJ
cmMgPSAtUFRSMkVSUihtZC0+ZGV2KTsKPiArCQlnb3RvIG91dF9mcmVlX21kYXRhOwo+ICsJfQo+
ICsKPiArCS8qIENyZWF0ZSBhIG5ldyA5cGZzIHNlc3Npb24gdmlhIGEgVkVSU0lPTiBtZXNzYWdl
LiAqLwo+ICsJdmVyc2lvbl9yZXEgPSB1a185cF92ZXJzaW9uKG1kLT5kZXYsIHVrXzlwZnNfcHJv
dG9fc3RyW21kLT5wcm90b10sCj4gKwkJCSZyY3ZkX3ZlcnNpb24pOwo+ICsJaWYgKFBUUklTRVJS
KHZlcnNpb25fcmVxKSkgewo+ICsJCXJjID0gLVBUUjJFUlIodmVyc2lvbl9yZXEpOwo+ICsJCWdv
dG8gb3V0X2Rpc2Nvbm5lY3Q7Cj4gKwl9Cj4gKwo+ICsJdmVyc2lvbl9hY2NlcHRlZCA9IHVrXzlw
X3N0cl9lcXVhbCgmcmN2ZF92ZXJzaW9uLAo+ICsJCQl1a185cGZzX3Byb3RvX3N0clttZC0+cHJv
dG9dKTsKPiArCXVrXzlwZGV2X3JlcV9yZW1vdmUobWQtPmRldiwgdmVyc2lvbl9yZXEpOwo+ICsK
PiArCWlmICghdmVyc2lvbl9hY2NlcHRlZCkgewo+ICsJCXJjID0gRUlPOwo+ICsJCXVrX3ByX3dh
cm4oIkNvdWxkIG5vdCBuZWdvdGlhdGUgcHJvdG9jb2wgJXNcbiIsCj4gKwkJCQl1a185cGZzX3By
b3RvX3N0clttZC0+cHJvdG9dKTsKPiArCQlnb3RvIG91dF9kaXNjb25uZWN0Owo+ICsJfQo+ICsK
PiArCS8qIENyZWF0ZSByb290IGZpZC4gKi8KPiArCXJvb3RmaWQgPSB1a185cF9hdHRhY2gobWQt
PmRldiwgVUtfOVBfTk9GSUQsIG1kLT51bmFtZSwKPiArCQkJbWQtPmFuYW1lLCBVS185UF9OT05V
TkFNRSk7Cj4gKwlpZiAoUFRSSVNFUlIocm9vdGZpZCkpIHsKPiArCQlyYyA9IC1QVFIyRVJSKHJv
b3RmaWQpOwo+ICsJCWdvdG8gb3V0X2Rpc2Nvbm5lY3Q7Cj4gKwl9Cj4gKwo+ICsJcmMgPSB1a185
cGZzX2FsbG9jYXRlX3Zub2RlX2RhdGEobXAtPm1fcm9vdC0+ZF92bm9kZSwgcm9vdGZpZCk7Cj4g
KwlpZiAocmMgIT0gMCkgewo+ICsJCXJjID0gLXJjOwo+ICsJCWdvdG8gb3V0X2Rpc2Nvbm5lY3Q7
Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfZGlzY29ubmVjdDoKPiArCXVrXzlw
ZGV2X2Rpc2Nvbm5lY3QobWQtPmRldik7Cj4gK291dF9mcmVlX21kYXRhOgo+ICsJZnJlZShtZCk7
Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHVrXzlwZnNfcmVsZWFzZV90
cmVlX2ZpZHMoc3RydWN0IGRlbnRyeSAqZCkKPiArewo+ICsJc3RydWN0IGRlbnRyeSAqcDsKPiAr
Cj4gKwl1a19saXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZkLT5kX2NoaWxkX2xpc3QsIGRfY2hpbGRf
bGluaykKPiArCQl1a185cGZzX3JlbGVhc2VfdHJlZV9maWRzKHApOwo+ICsKPiArCWlmIChkLT5k
X3Zub2RlLT52X2RhdGEpCj4gKwkJdWtfOXBmc19mcmVlX3Zub2RlX2RhdGEoZC0+ZF92bm9kZSk7
Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdWtfOXBmc191bm1vdW50KHN0cnVjdCBtb3VudCAqbXAs
IGludCBmbGFncyBfX3VudXNlZCkKPiArewo+ICsJc3RydWN0IHVrXzlwZnNfbW91bnRfZGF0YSAq
bWQgPSBVS185UEZTX01EKG1wKTsKPiArCj4gKwl1a185cGZzX3JlbGVhc2VfdHJlZV9maWRzKG1w
LT5tX3Jvb3QpOwo+ICsJdmZzY29yZV9yZWxlYXNlX21wX2RlbnRyaWVzKG1wKTsKPiArCXVrXzlw
ZGV2X2Rpc2Nvbm5lY3QobWQtPmRldik7Cj4gKwlmcmVlKG1kKTsKPiArCj4gKwlyZXR1cm4gMDsK
PiArfQo+IGRpZmYgLS1naXQgYS9saWIvOXBmcy85cGZzX3Zub3BzLmMgYi9saWIvOXBmcy85cGZz
X3Zub3BzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi44MDlmYWM0
Mwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvOXBmcy85cGZzX3Zub3BzLmMKPiBAQCAtMCww
ICsxLDEzNSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICov
Cj4gKy8qCj4gKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4g
KyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBC
dWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKPiArICogYXJlIG1ldDoKPiArICoKPiArICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiArICoK
PiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4g
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
Tgo+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsgKiBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBC
RSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArICovCj4gKwo+ICsjZGVmaW5l
IF9HTlVfU09VUkNFCj4gKwo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGRpcmVu
dC5oPgo+ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx1ay85cC5oPgo+ICsj
aW5jbHVkZSA8dWsvZXJycHRyLmg+Cj4gKyNpbmNsdWRlIDx2ZnNjb3JlL21vdW50Lmg+Cj4gKyNp
bmNsdWRlIDx2ZnNjb3JlL2RlbnRyeS5oPgo+ICsjaW5jbHVkZSA8dmZzY29yZS92bm9kZS5oPgo+
ICsjaW5jbHVkZSA8dmZzY29yZS9maWxlLmg+Cj4gKyNpbmNsdWRlIDx2ZnNjb3JlL2ZzLmg+Cj4g
Kwo+ICsjaW5jbHVkZSAiOXBmcy5oIgo+ICsKPiAraW50IHVrXzlwZnNfYWxsb2NhdGVfdm5vZGVf
ZGF0YShzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdWtfOXBmaWQgKmZpZCkKPiArewo+ICsJc3Ry
dWN0IHVrXzlwZnNfbm9kZV9kYXRhICpuZDsKPiArCj4gKwluZCA9IG1hbGxvYyhzaXplb2YoKm5k
KSk7Cj4gKwlpZiAobmQgPT0gTlVMTCkKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwluZC0+
ZmlkID0gZmlkOwo+ICsJbmQtPm5iX29wZW5fZmlsZXMgPSAwOwo+ICsJbmQtPnJlbW92ZWQgPSBm
YWxzZTsKPiArCXZwLT52X2RhdGEgPSBuZDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr
dm9pZCB1a185cGZzX2ZyZWVfdm5vZGVfZGF0YShzdHJ1Y3Qgdm5vZGUgKnZwKQo+ICt7Cj4gKwlz
dHJ1Y3QgdWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQodnAtPnZfbW91bnQpLT5kZXY7Cj4gKwlz
dHJ1Y3QgdWtfOXBmc19ub2RlX2RhdGEgKm5kID0gVUtfOVBGU19ORCh2cCk7Cj4gKwo+ICsJaWYg
KG5kLT5uYl9vcGVuX2ZpbGVzID4gMCkKPiArCQlyZXR1cm47Cj4gKwo+ICsJaWYgKG5kLT5yZW1v
dmVkKQo+ICsJCXVrXzlwX3JlbW92ZShkZXYsIG5kLT5maWQpOwo+ICsKPiArCXVrXzlwZmlkX3B1
dChuZC0+ZmlkKTsKPiArCWZyZWUobmQpOwo+ICsJdnAtPnZfZGF0YSA9IE5VTEw7Cj4gK30KPiAr
Cj4gK3N0YXRpYyBpbnQgdWtfOXBmc19yZWFkZGlyKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2
ZnNjb3JlX2ZpbGUgKmZwLAo+ICsJCXN0cnVjdCBkaXJlbnQgKmRpcikKPiArewo+ICsJcmV0dXJu
IEVOT0VOVDsKPiArfQo+ICsKPiArI2RlZmluZSB1a185cGZzX3NlZWsJCSgodm5vcF9zZWVrX3Qp
dmZzY29yZV92b3BfbnVsbG9wKQo+ICsjZGVmaW5lIHVrXzlwZnNfaW9jdGwJCSgodm5vcF9pb2N0
bF90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2RlZmluZSB1a185cGZzX2ZzeW5jCQkoKHZub3Bf
ZnN5bmNfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCj4gKyNkZWZpbmUgdWtfOXBmc19nZXRhdHRyCQko
KHZub3BfZ2V0YXR0cl90KXZmc2NvcmVfdm9wX251bGxvcCkKPiArI2RlZmluZSB1a185cGZzX3Nl
dGF0dHIJCSgodm5vcF9zZXRhdHRyX3QpdmZzY29yZV92b3BfbnVsbG9wKQo+ICsjZGVmaW5lIHVr
XzlwZnNfdHJ1bmNhdGUJKCh2bm9wX3RydW5jYXRlX3QpdmZzY29yZV92b3BfbnVsbG9wKQo+ICsj
ZGVmaW5lIHVrXzlwZnNfaW5hY3RpdmUJKCh2bm9wX2luYWN0aXZlX3QpdmZzY29yZV92b3BfbnVs
bG9wKQo+ICsjZGVmaW5lIHVrXzlwZnNfbGluawkJKCh2bm9wX2xpbmtfdCl2ZnNjb3JlX3ZvcF9l
cGVybSkKPiArI2RlZmluZSB1a185cGZzX2NhY2hlCQkoKHZub3BfY2FjaGVfdClOVUxMKQo+ICsj
ZGVmaW5lIHVrXzlwZnNfcmVhZGxpbmsJKCh2bm9wX3JlYWRsaW5rX3QpdmZzY29yZV92b3BfZWlu
dmFsKQo+ICsjZGVmaW5lIHVrXzlwZnNfc3ltbGluawkJKCh2bm9wX3N5bWxpbmtfdCl2ZnNjb3Jl
X3ZvcF9lcGVybSkKPiArI2RlZmluZSB1a185cGZzX2ZhbGxvY2F0ZQkoKHZub3BfZmFsbG9jYXRl
X3QpdmZzY29yZV92b3BfbnVsbG9wKQo+ICsjZGVmaW5lIHVrXzlwZnNfY3JlYXRlCQkoKHZub3Bf
Y3JlYXRlX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICsjZGVmaW5lIHVrXzlwZnNfcmVtb3ZlCQko
KHZub3BfcmVtb3ZlX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICsjZGVmaW5lIHVrXzlwZnNfcmVu
YW1lCQkoKHZub3BfcmVuYW1lX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICsjZGVmaW5lIHVrXzlw
ZnNfbWtkaXIJCSgodm5vcF9ta2Rpcl90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2RlZmluZSB1
a185cGZzX3JtZGlyCQkoKHZub3Bfcm1kaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gKyNkZWZp
bmUgdWtfOXBmc19vcGVuCQkoKHZub3Bfb3Blbl90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiArI2Rl
ZmluZSB1a185cGZzX2Nsb3NlCQkoKHZub3BfY2xvc2VfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4g
KyNkZWZpbmUgdWtfOXBmc19yZWFkCQkoKHZub3BfcmVhZF90KXZmc2NvcmVfdm9wX2VpbnZhbCkK
PiArI2RlZmluZSB1a185cGZzX3dyaXRlCQkoKHZub3Bfd3JpdGVfdCl2ZnNjb3JlX3ZvcF9laW52
YWwpCj4gKyNkZWZpbmUgdWtfOXBmc19sb29rdXAJCSgodm5vcF9sb29rdXBfdCl2ZnNjb3JlX3Zv
cF9laW52YWwpCj4gKwo+ICtzdHJ1Y3Qgdm5vcHMgdWtfOXBmc192bm9wcyA9IHsKPiArCS52b3Bf
b3Blbgk9IHVrXzlwZnNfb3BlbiwKPiArCS52b3BfY2xvc2UJPSB1a185cGZzX2Nsb3NlLAo+ICsJ
LnZvcF9yZWFkCT0gdWtfOXBmc19yZWFkLAo+ICsJLnZvcF93cml0ZQk9IHVrXzlwZnNfd3JpdGUs
Cj4gKwkudm9wX3NlZWsJPSB1a185cGZzX3NlZWssCj4gKwkudm9wX2lvY3RsCT0gdWtfOXBmc19p
b2N0bCwKPiArCS52b3BfZnN5bmMJPSB1a185cGZzX2ZzeW5jLAo+ICsJLnZvcF9yZWFkZGlyCT0g
dWtfOXBmc19yZWFkZGlyLAo+ICsJLnZvcF9sb29rdXAJPSB1a185cGZzX2xvb2t1cCwKPiArCS52
b3BfY3JlYXRlCT0gdWtfOXBmc19jcmVhdGUsCj4gKwkudm9wX3JlbW92ZQk9IHVrXzlwZnNfcmVt
b3ZlLAo+ICsJLnZvcF9yZW5hbWUJPSB1a185cGZzX3JlbmFtZSwKPiArCS52b3BfbWtkaXIJPSB1
a185cGZzX21rZGlyLAo+ICsJLnZvcF9ybWRpcgk9IHVrXzlwZnNfcm1kaXIsCj4gKwkudm9wX2dl
dGF0dHIJPSB1a185cGZzX2dldGF0dHIsCj4gKwkudm9wX3NldGF0dHIJPSB1a185cGZzX3NldGF0
dHIsCj4gKwkudm9wX2luYWN0aXZlCT0gdWtfOXBmc19pbmFjdGl2ZSwKPiArCS52b3BfdHJ1bmNh
dGUJPSB1a185cGZzX3RydW5jYXRlLAo+ICsJLnZvcF9saW5rCT0gdWtfOXBmc19saW5rLAo+ICsJ
LnZvcF9jYWNoZQk9IHVrXzlwZnNfY2FjaGUsCj4gKwkudm9wX2ZhbGxvY2F0ZQk9IHVrXzlwZnNf
ZmFsbG9jYXRlLAo+ICsJLnZvcF9yZWFkbGluawk9IHVrXzlwZnNfcmVhZGxpbmssCj4gKwkudm9w
X3N5bWxpbmsJPSB1a185cGZzX3N5bWxpbmsKPiArfTsKPiBkaWZmIC0tZ2l0IGEvbGliLzlwZnMv
TWFrZWZpbGUudWsgYi9saWIvOXBmcy9NYWtlZmlsZS51awo+IGluZGV4IGU5M2VjYzM0Li45ZDRk
ZmI1NyAxMDA2NDQKPiAtLS0gYS9saWIvOXBmcy9NYWtlZmlsZS51awo+ICsrKyBiL2xpYi85cGZz
L01ha2VmaWxlLnVrCj4gQEAgLTEgKzEsNCBAQAo+ICAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxp
YjlwZnMsJChDT05GSUdfTElCOVBGUykpKQo+ICsKPiArTElCOVBGU19TUkNTLXkgKz0gJChMSUI5
UEZTX0JBU0UpLzlwZnNfdmZzb3BzLmMKPiArTElCOVBGU19TUkNTLXkgKz0gJChMSUI5UEZTX0JB
U0UpLzlwZnNfdm5vcHMuYwo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:09:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:09:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XeT-0003g4-Sf; Sat, 07 Sep 2019 10:09:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XeT-0003fx-J9
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:09:05 +0000
X-Inumbo-ID: 858a10bc-d157-11e9-a337-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 858a10bc-d157-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 10:09:04 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id t9so9587578wmi.5
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:09:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=TYWWOv0yuIBRGw9lyEtjhP2oGhsd4J6ItNYtwq0PGLc=;
 b=agRabk2sBc1OiiSgSeF37xzx2J8/hneECvxBKsJv7iVniVJW0CsiMynUELfyLcf8dS
 d2q4QtQwUmLcwG+ndHWN2olZAQih8Ce6B/MGuy4r3HKFwVLn9lQQZmNFe4L2nvnEwtVQ
 n5nwk9c/fZ3Gla1uMhaQ+OSFQb3ueG5ru0w5UGv1vqK2AkPC1+O5aZy9uXKWiE3YWiBh
 4T6ZGrh6E+NZppZ1kOQdFvJY4bT+H1dbmCe05gnKI9Ns7A27ex2T16HpYe12YBdmXBST
 vpK3G24QAD105hugn/LXYIHRj/moFDabW+yZCpNbsxKFTluT4DJta4x7LlSpwQxHI0jP
 GeSA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=TYWWOv0yuIBRGw9lyEtjhP2oGhsd4J6ItNYtwq0PGLc=;
 b=PPn271lnMSU9TR6OMCVeN4KIMb9qFFU1NpVAax19UsAUJ3H5gi7C+dj13RubSJ1yR3
 45ZpVtQIgh46KiqzOLec6iaKpzoLwn0OBREcuz9ZEHf2Lg+fwm+EFc0SWmj/0Rn2ddzV
 G8nIxUmcn4omLhPuAfMsmnl9Hf4CrGSuQ1RgClU+uri/7vOQBbzhnjq7dCRtarN1njg5
 Nelc1WVblzC3byNH0aK7ulSGJZw6By6m7XURa1qW6m2Wf58Pvl3tlbp1ztFwKe8pph6H
 ZaoeY/IrNTFaJWVxluGE4AOBJMPYuU5ffvk/qAQOZu1Xs7U6eSr6SBawagNWaIN9VX7c
 iPyw==
X-Gm-Message-State: APjAAAWlKXXi+oHDYTxO2nHWch3f5QvRmQ5R7YNJOz5Df+j0iASU3s+M
 APrFp5I++/Hb2QWSTRIRrXw=
X-Google-Smtp-Source: APXvYqwM84gQk0qoiEIv0Q1WZngwgCHreOXQEEW57809R3eIRwx5J1OxmR2q1Z7iB6bFKthO26U1SA==
X-Received: by 2002:a1c:d188:: with SMTP id
 i130mr10963297wmg.101.1567850944099; 
 Sat, 07 Sep 2019 03:09:04 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id t123sm11166840wma.40.2019.09.07.03.09.03
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:09:03 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907095945.12739-5-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <1988a466-c217-bd91-7ba9-a94873ceb9a5@gmail.com>
Date: Sat, 7 Sep 2019 13:09:03 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907095945.12739-5-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 4/7] lib/9pfs: Add lookup and
 inactive vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NTkgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUg
bG9va3VwIGFuZCBpbmFjdGl2ZSB2bm9wcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBC
YW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBsaWIvOXBmcy85cGZzX3Zub3BzLmMgfCAx
MTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIDEgZmlsZSBj
aGFuZ2VkLCAxMTAgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0
IGEvbGliLzlwZnMvOXBmc192bm9wcy5jIGIvbGliLzlwZnMvOXBmc192bm9wcy5jCj4gaW5kZXgg
ODA5ZmFjNDMuLjBmZTNlYjIyIDEwMDY0NAo+IC0tLSBhL2xpYi85cGZzLzlwZnNfdm5vcHMuYwo+
ICsrKyBiL2xpYi85cGZzLzlwZnNfdm5vcHMuYwo+IEBAIC00Nyw2ICs0Nyw0NyBAQAo+ICAKPiAg
I2luY2x1ZGUgIjlwZnMuaCIKPiAgCj4gK3N0YXRpYyBpbnQgdWtfOXBmc19wb3NpeF9wZXJtX2Zy
b21fbW9kZShpbnQgbW9kZSkKPiArewo+ICsJaW50IHJlczsKPiArCj4gKwlyZXMgPSBtb2RlICYg
MDc3NzsKPiArCWlmIChtb2RlICYgVUtfOVBfRE1TRVRVSUQpCj4gKwkJcmVzIHw9IFNfSVNVSUQ7
Cj4gKwlpZiAobW9kZSAmIFVLXzlQX0RNU0VUR0lEKQo+ICsJCXJlcyB8PSBTX0lTR0lEOwo+ICsJ
aWYgKG1vZGUgJiBVS185UF9ETVNFVFZUWCkKPiArCQlyZXMgfD0gU19JU1ZUWDsKPiArCj4gKwly
ZXR1cm4gcmVzOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVrXzlwZnNfcG9zaXhfbW9kZV9mcm9t
X21vZGUoaW50IG1vZGUpCj4gK3sKPiArCWludCByZXM7Cj4gKwo+ICsJcmVzID0gdWtfOXBmc19w
b3NpeF9wZXJtX2Zyb21fbW9kZShtb2RlKTsKPiArCj4gKwlpZiAobW9kZSAmIFVLXzlQX0RNRElS
KQo+ICsJCXJlcyB8PSBTX0lGRElSOwo+ICsJZWxzZQo+ICsJCXJlcyB8PSBTX0lGUkVHOwo+ICsK
PiArCXJldHVybiByZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdWtfOXBmc192dHlwZV9mcm9t
X21vZGUoaW50IG1vZGUpCj4gK3sKPiArCWlmIChtb2RlICYgVUtfOVBfRE1ESVIpCj4gKwkJcmV0
dXJuIFZESVI7Cj4gKwlyZXR1cm4gVlJFRzsKPiArfQo+ICsKPiArc3RhdGljIHVpbnQ2NF90IHVr
XzlwZnNfaW5vKHN0cnVjdCB1a185cF9zdGF0ICpzdGF0KQo+ICt7Cj4gKwlyZXR1cm4gc3RhdC0+
cWlkLnBhdGg7Cj4gK30KPiArCj4gIGludCB1a185cGZzX2FsbG9jYXRlX3Zub2RlX2RhdGEoc3Ry
dWN0IHZub2RlICp2cCwgc3RydWN0IHVrXzlwZmlkICpmaWQpCj4gIHsKPiAgCXN0cnVjdCB1a185
cGZzX25vZGVfZGF0YSAqbmQ7Cj4gQEAgLTc5LDYgKzEyMCw3NSBAQCB2b2lkIHVrXzlwZnNfZnJl
ZV92bm9kZV9kYXRhKHN0cnVjdCB2bm9kZSAqdnApCj4gIAl2cC0+dl9kYXRhID0gTlVMTDsKPiAg
fQo+ICAKPiArc3RhdGljIGludCB1a185cGZzX2xvb2t1cChzdHJ1Y3Qgdm5vZGUgKmR2cCwgY2hh
ciAqbmFtZSwgc3RydWN0IHZub2RlICoqdnBwKQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXBkZXYgKmRl
diA9IFVLXzlQRlNfTUQoZHZwLT52X21vdW50KS0+ZGV2Owo+ICsJc3RydWN0IHVrXzlwZmlkICpk
ZmlkID0gVUtfOVBGU19WRklEKGR2cCk7Cj4gKwlzdHJ1Y3QgdWtfOXBmaWQgKmZpZDsKPiArCXN0
cnVjdCB1a185cF9zdGF0IHN0YXQ7Cj4gKwlzdHJ1Y3QgdWtfOXByZXEgKnN0YXRfcmVxOwo+ICsJ
c3RydWN0IHZub2RlICp2cDsKPiArCWludCByYzsKPiArCj4gKwlpZiAoc3RybGVuKG5hbWUpID4g
TkFNRV9NQVgpCj4gKwkJcmV0dXJuIEVOQU1FVE9PTE9ORzsKPiArCj4gKwlmaWQgPSB1a185cF93
YWxrKGRldiwgZGZpZCwgbmFtZSk7Cj4gKwlpZiAoUFRSSVNFUlIoZmlkKSkgewo+ICsJCXJjID0g
UFRSMkVSUihmaWQpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXN0YXRfcmVxID0gdWtf
OXBfc3RhdChkZXYsIGZpZCwgJnN0YXQpOwo+ICsJaWYgKFBUUklTRVJSKHN0YXRfcmVxKSkgewo+
ICsJCXJjID0gUFRSMkVSUihzdGF0X3JlcSk7Cj4gKwkJZ290byBvdXRfZmlkOwo+ICsJfQo+ICsK
PiArCS8qIE5vIHN0YXQgc3RyaW5nIGZpZWxkcyBhcmUgdXNlZCBiZWxvdy4gKi8KPiArCXVrXzlw
ZGV2X3JlcV9yZW1vdmUoZGV2LCBzdGF0X3JlcSk7Cj4gKwo+ICsJaWYgKHZmc2NvcmVfdmdldChk
dnAtPnZfbW91bnQsIHVrXzlwZnNfaW5vKCZzdGF0KSwgJnZwKSkgewo+ICsJCS8qIEFscmVhZHkg
aW4gY2FjaGUuICovCj4gKwkJcmMgPSAwOwo+ICsJCSp2cHAgPSB2cDsKPiArCQkvKiBpZiB0aGUg
dm5vZGUgYWxyZWFkeSBoYXMgbm9kZSBkYXRhLCBpdCBtYXkgYmUgcmV1c2VkLiAqLwo+ICsJCWlm
ICh2cC0+dl9kYXRhKQo+ICsJCQlnb3RvIG91dF9maWQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKCF2cCkg
ewo+ICsJCXJjID0gLUVOT01FTTsKPiArCQlnb3RvIG91dF9maWQ7Cj4gKwl9Cj4gKwo+ICsJdnAt
PnZfZmxhZ3MgPSAwOwo+ICsJdnAtPnZfbW9kZSA9IHVrXzlwZnNfcG9zaXhfbW9kZV9mcm9tX21v
ZGUoc3RhdC5tb2RlKTsKPiArCXZwLT52X3R5cGUgPSB1a185cGZzX3Z0eXBlX2Zyb21fbW9kZShz
dGF0Lm1vZGUpOwo+ICsJdnAtPnZfc2l6ZSA9IHN0YXQubGVuZ3RoOwo+ICsKPiArCXJjID0gdWtf
OXBmc19hbGxvY2F0ZV92bm9kZV9kYXRhKHZwLCBmaWQpOwo+ICsJaWYgKHJjICE9IDApCj4gKwkJ
Z290byBvdXRfZmlkOwo+ICsKPiArCSp2cHAgPSB2cDsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4g
K291dF9maWQ6Cj4gKwl1a185cGZpZF9wdXQoZmlkKTsKPiArb3V0Ogo+ICsJcmV0dXJuIC1yYzsK
PiArfQo+ICsKPiArc3RhdGljIGludCB1a185cGZzX2luYWN0aXZlKHN0cnVjdCB2bm9kZSAqdnAp
Cj4gK3sKPiArCWlmICh2cC0+dl9kYXRhKQo+ICsJCXVrXzlwZnNfZnJlZV92bm9kZV9kYXRhKHZw
KTsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAgc3RhdGljIGludCB1a185cGZzX3JlYWRk
aXIoc3RydWN0IHZub2RlICp2cCwgc3RydWN0IHZmc2NvcmVfZmlsZSAqZnAsCj4gIAkJc3RydWN0
IGRpcmVudCAqZGlyKQo+ICB7Cj4gQEAgLTkxLDcgKzIwMSw2IEBAIHN0YXRpYyBpbnQgdWtfOXBm
c19yZWFkZGlyKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZwLAo+ICAj
ZGVmaW5lIHVrXzlwZnNfZ2V0YXR0cgkJKCh2bm9wX2dldGF0dHJfdCl2ZnNjb3JlX3ZvcF9udWxs
b3ApCj4gICNkZWZpbmUgdWtfOXBmc19zZXRhdHRyCQkoKHZub3Bfc2V0YXR0cl90KXZmc2NvcmVf
dm9wX251bGxvcCkKPiAgI2RlZmluZSB1a185cGZzX3RydW5jYXRlCSgodm5vcF90cnVuY2F0ZV90
KXZmc2NvcmVfdm9wX251bGxvcCkKPiAtI2RlZmluZSB1a185cGZzX2luYWN0aXZlCSgodm5vcF9p
bmFjdGl2ZV90KXZmc2NvcmVfdm9wX251bGxvcCkKPiAgI2RlZmluZSB1a185cGZzX2xpbmsJCSgo
dm5vcF9saW5rX3QpdmZzY29yZV92b3BfZXBlcm0pCj4gICNkZWZpbmUgdWtfOXBmc19jYWNoZQkJ
KCh2bm9wX2NhY2hlX3QpTlVMTCkKPiAgI2RlZmluZSB1a185cGZzX3JlYWRsaW5rCSgodm5vcF9y
ZWFkbGlua190KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiBAQCAtMTA2LDcgKzIxNSw2IEBAIHN0YXRp
YyBpbnQgdWtfOXBmc19yZWFkZGlyKHN0cnVjdCB2bm9kZSAqdnAsIHN0cnVjdCB2ZnNjb3JlX2Zp
bGUgKmZwLAo+ICAjZGVmaW5lIHVrXzlwZnNfY2xvc2UJCSgodm5vcF9jbG9zZV90KXZmc2NvcmVf
dm9wX2VpbnZhbCkKPiAgI2RlZmluZSB1a185cGZzX3JlYWQJCSgodm5vcF9yZWFkX3QpdmZzY29y
ZV92b3BfZWludmFsKQo+ICAjZGVmaW5lIHVrXzlwZnNfd3JpdGUJCSgodm5vcF93cml0ZV90KXZm
c2NvcmVfdm9wX2VpbnZhbCkKPiAtI2RlZmluZSB1a185cGZzX2xvb2t1cAkJKCh2bm9wX2xvb2t1
cF90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiAgCj4gIHN0cnVjdCB2bm9wcyB1a185cGZzX3Zub3Bz
ID0gewo+ICAJLnZvcF9vcGVuCT0gdWtfOXBmc19vcGVuLAo+IAoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:09:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:09:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xea-0003gs-UK; Sat, 07 Sep 2019 10:09:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xea-0003gl-CX
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:09:12 +0000
X-Inumbo-ID: 899686a4-d157-11e9-978d-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 899686a4-d157-11e9-978d-bc764e2007e4;
 Sat, 07 Sep 2019 10:09:11 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id n10so9616922wmj.0
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:09:11 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=ntW/lzMpVnpNQIbS5keBVsnkF/HGdCv/f3t4zhVj5lk=;
 b=P3hHnCKH5ZJMR6VtxusxYXI3zBLCJ44ArjHeFpBkbYyqYMIxNQQ3noX03xPxZ6mgBQ
 VgmOhYcPUE0zsdWL2yINkAUIn3Qstk6QdfjmvJSt44VwvgOfCP10UY+CepsPsJ4qGGC7
 lVMkLCr46mbImCwssXOsEzGp7VV7JJj/KGOFwLqJf1W+2CgU4Ws0L+Ha6vrRdT44vQOG
 +HKOHQktmGu2TyJK6hSAJrtGYs7g5PUV+rBlxvdtx2zXfcAzcKe4aH/YT8y4evvGrUu+
 DypeZCyVYW6PQ7w+N33QcpK0kIBfoyTXUgr0mmydoWtvI9W3DdOO2jhxp7jTO/KPg3/A
 lsJA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=ntW/lzMpVnpNQIbS5keBVsnkF/HGdCv/f3t4zhVj5lk=;
 b=EeqFNWx4Nb/KZMFwInxMhf9gSs0JgB7PkuXEQTw27qpFCTU76iiY6lwSowOBtpVPhq
 45WfxmicDBXApo+PQ17PkpytRGDTBtTi7jqO8BCUQCsnjunRmK/JJBr04WBG9ySpc+Iy
 q83pOWKByl+OFfOJfEQ9WNnBDrhayle6jj5kg9LxtxSeC+eK8SY7wXo5AHbOXBX+p7ZK
 7o8Du3X2a7+KaXIbaUoRVukS8m+ms3RQ6NMIbZe68oNL7vhnmYCytH4dx9KJoWTq96rB
 2igknXSQD5OLpvq2/2/Dpd19NqXDfR2knwLsRZoC9Wdt9eUcfJZXjpO6krAFnrr1xsf0
 tc6g==
X-Gm-Message-State: APjAAAUHpTSdPyEj4dWyuQE9hvv+uXvFu9Iy424bX0C/Vwk0L6qwbTcz
 +ddGVHQZM/rgFAvHavBv5ME=
X-Google-Smtp-Source: APXvYqyXvgwawA6Ajk28VYROle3sosHbq+WXNOrGr2o9TYAV5Pnt6gwHZqAzHHz/2969elIhasunrQ==
X-Received: by 2002:a7b:c766:: with SMTP id x6mr11637436wmk.51.1567850950905; 
 Sat, 07 Sep 2019 03:09:10 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id f66sm11263555wmg.2.2019.09.07.03.09.10
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:09:10 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907095945.12739-6-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <bc26c889-889c-c66c-f44c-e2b3ea51ea5d@gmail.com>
Date: Sat, 7 Sep 2019 13:09:09 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907095945.12739-6-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 5/7] lib/9pfs: Add create, mkdir,
 rmdir, remove vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NTkgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyBmaWxl
IGFuZCBkaXJlY3RvcnkgY3JlYXRpb24gYW5kIGRlbGV0aW9uIFZGUyBub2RlCj4gb3BlcmF0aW9u
cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+
IC0tLQo+ICBsaWIvOXBmcy85cGZzX3Zub3BzLmMgfCA3OCArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrLS0tCj4gIDEgZmlsZSBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCsp
LCA0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9saWIvOXBmcy85cGZzX3Zub3BzLmMg
Yi9saWIvOXBmcy85cGZzX3Zub3BzLmMKPiBpbmRleCAwZmUzZWIyMi4uNTBmODMxNDggMTAwNjQ0
Cj4gLS0tIGEvbGliLzlwZnMvOXBmc192bm9wcy5jCj4gKysrIGIvbGliLzlwZnMvOXBmc192bm9w
cy5jCj4gQEAgLTYyLDYgKzYyLDE3IEBAIHN0YXRpYyBpbnQgdWtfOXBmc19wb3NpeF9wZXJtX2Zy
b21fbW9kZShpbnQgbW9kZSkKPiAgCXJldHVybiByZXM7Cj4gIH0KPiAgCj4gK3N0YXRpYyB1aW50
MzJfdCB1a185cGZzX3Blcm1fZnJvbV9wb3NpeF9tb2RlKG1vZGVfdCBtb2RlKQo+ICt7Cj4gKwlp
bnQgcmVzOwo+ICsKPiArCXJlcyA9IG1vZGUgJiAwNzc3Owo+ICsJaWYgKFNfSVNESVIobW9kZSkp
Cj4gKwkJcmVzIHw9IFVLXzlQX0RNRElSOwo+ICsKPiArCXJldHVybiByZXM7Cj4gK30KPiArCj4g
IHN0YXRpYyBpbnQgdWtfOXBmc19wb3NpeF9tb2RlX2Zyb21fbW9kZShpbnQgbW9kZSkKPiAgewo+
ICAJaW50IHJlczsKPiBAQCAtMTg5LDYgKzIwMCw2OSBAQCBzdGF0aWMgaW50IHVrXzlwZnNfaW5h
Y3RpdmUoc3RydWN0IHZub2RlICp2cCkKPiAgCXJldHVybiAwOwo+ICB9Cj4gIAo+ICtzdGF0aWMg
aW50IHVrXzlwZnNfY3JlYXRlX2dlbmVyaWMoc3RydWN0IHZub2RlICpkdnAsIGNoYXIgKm5hbWUs
IG1vZGVfdCBtb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQo
ZHZwLT52X21vdW50KS0+ZGV2Owo+ICsJc3RydWN0IHVrXzlwZmlkICpmaWQ7Cj4gKwlpbnQgcmM7
Cj4gKwo+ICsJaWYgKHN0cmxlbihuYW1lKSA+IE5BTUVfTUFYKQo+ICsJCXJldHVybiBFTkFNRVRP
T0xPTkc7Cj4gKwo+ICsJLyogQ2xvbmUgcGFyZW50IGZpZC4gKi8KPiArCWZpZCA9IHVrXzlwX3dh
bGsoZGV2LCBVS185UEZTX1ZGSUQoZHZwKSwgTlVMTCk7Cj4gKwo+ICsJcmMgPSB1a185cF9jcmVh
dGUoZGV2LCBmaWQsIG5hbWUsIHVrXzlwZnNfcGVybV9mcm9tX3Bvc2l4X21vZGUobW9kZSksCj4g
KwkJCVVLXzlQX09UUlVOQyB8IFVLXzlQX09XUklURSwgTlVMTCk7Cj4gKwo+ICsJdWtfOXBmaWRf
cHV0KGZpZCk7Cj4gKwlyZXR1cm4gLXJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVrXzlwZnNf
Y3JlYXRlKHN0cnVjdCB2bm9kZSAqZHZwLCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSkKPiArewo+
ICsJaWYgKCFTX0lTUkVHKG1vZGUpKQo+ICsJCXJldHVybiBFSU5WQUw7Cj4gKwo+ICsJcmV0dXJu
IHVrXzlwZnNfY3JlYXRlX2dlbmVyaWMoZHZwLCBuYW1lLCBtb2RlKTsKPiArfQo+ICsKPiArc3Rh
dGljIGludCB1a185cGZzX3JlbW92ZV9nZW5lcmljKHN0cnVjdCB2bm9kZSAqZHZwLCBzdHJ1Y3Qg
dm5vZGUgKnZwKQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQoZHZw
LT52X21vdW50KS0+ZGV2Owo+ICsJc3RydWN0IHVrXzlwZnNfbm9kZV9kYXRhICpuZCA9IFVLXzlQ
RlNfTkQodnApOwo+ICsJaW50IHJjID0gMDsKPiArCj4gKwlpZiAoIW5kLT5yZW1vdmVkICYmICFu
ZC0+bmJfb3Blbl9maWxlcykKPiArCQlyYyA9IHVrXzlwX3JlbW92ZShkZXYsIG5kLT5maWQpOwo+
ICsJZWxzZQo+ICsJCW5kLT5yZW1vdmVkID0gdHJ1ZTsKPiArCj4gKwl1a185cGZzX2ZyZWVfdm5v
ZGVfZGF0YSh2cCk7Cj4gKwo+ICsJcmV0dXJuIC1yYzsKPiArfQo+ICsKPiArc3RhdGljIGludCB1
a185cGZzX3JlbW92ZShzdHJ1Y3Qgdm5vZGUgKmR2cCwgc3RydWN0IHZub2RlICp2cCwKPiArCQlj
aGFyICpuYW1lIF9fdW51c2VkKQo+ICt7Cj4gKwlyZXR1cm4gdWtfOXBmc19yZW1vdmVfZ2VuZXJp
YyhkdnAsIHZwKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB1a185cGZzX21rZGlyKHN0cnVjdCB2
bm9kZSAqZHZwLCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSkKPiArewo+ICsJaWYgKCFTX0lTRElS
KG1vZGUpKQo+ICsJCXJldHVybiBFSU5WQUw7Cj4gKwo+ICsJcmV0dXJuIHVrXzlwZnNfY3JlYXRl
X2dlbmVyaWMoZHZwLCBuYW1lLCBtb2RlKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB1a185cGZz
X3JtZGlyKHN0cnVjdCB2bm9kZSAqZHZwLCBzdHJ1Y3Qgdm5vZGUgKnZwLAo+ICsJCWNoYXIgKm5h
bWUgX191bnVzZWQpCj4gK3sKPiArCXJldHVybiB1a185cGZzX3JlbW92ZV9nZW5lcmljKGR2cCwg
dnApOwo+ICt9Cj4gKwo+ICBzdGF0aWMgaW50IHVrXzlwZnNfcmVhZGRpcihzdHJ1Y3Qgdm5vZGUg
KnZwLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmcCwKPiAgCQlzdHJ1Y3QgZGlyZW50ICpkaXIpCj4g
IHsKPiBAQCAtMjA2LDExICsyODAsNyBAQCBzdGF0aWMgaW50IHVrXzlwZnNfcmVhZGRpcihzdHJ1
Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmcCwKPiAgI2RlZmluZSB1a185cGZz
X3JlYWRsaW5rCSgodm5vcF9yZWFkbGlua190KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiAgI2RlZmlu
ZSB1a185cGZzX3N5bWxpbmsJCSgodm5vcF9zeW1saW5rX3QpdmZzY29yZV92b3BfZXBlcm0pCj4g
ICNkZWZpbmUgdWtfOXBmc19mYWxsb2NhdGUJKCh2bm9wX2ZhbGxvY2F0ZV90KXZmc2NvcmVfdm9w
X251bGxvcCkKPiAtI2RlZmluZSB1a185cGZzX2NyZWF0ZQkJKCh2bm9wX2NyZWF0ZV90KXZmc2Nv
cmVfdm9wX2VpbnZhbCkKPiAtI2RlZmluZSB1a185cGZzX3JlbW92ZQkJKCh2bm9wX3JlbW92ZV90
KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiAgI2RlZmluZSB1a185cGZzX3JlbmFtZQkJKCh2bm9wX3Jl
bmFtZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiAtI2RlZmluZSB1a185cGZzX21rZGlyCQkoKHZu
b3BfbWtkaXJfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gLSNkZWZpbmUgdWtfOXBmc19ybWRpcgkJ
KCh2bm9wX3JtZGlyX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICAjZGVmaW5lIHVrXzlwZnNfb3Bl
bgkJKCh2bm9wX29wZW5fdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gICNkZWZpbmUgdWtfOXBmc19j
bG9zZQkJKCh2bm9wX2Nsb3NlX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICAjZGVmaW5lIHVrXzlw
ZnNfcmVhZAkJKCh2bm9wX3JlYWRfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:09:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:09:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xej-0003hm-Vt; Sat, 07 Sep 2019 10:09:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xei-0003hd-Vj
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:09:20 +0000
X-Inumbo-ID: 8e99ac30-d157-11e9-978d-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8e99ac30-d157-11e9-978d-bc764e2007e4;
 Sat, 07 Sep 2019 10:09:20 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id l16so8907350wrv.12
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:09:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=WWKdqbaOBLtVxTZpdGFFsCRN5VtoXFbUijFx3dTNVWM=;
 b=UC5MD6r0fy5CmEuiYWdhL+VMZyuIVFZPDyQR5Mbk3QcoR+lXJJRm8zlX0xnULp/dYT
 MW/d+8YDlYMl1QlgBGE+Lo6E+57YVP9+gW6ie6vTk4MYYV1oBAuNGPUPtFfVAvlSkULP
 gKCVBQHrnAZNDwm3eTkrvSrcw7ToEcZW+Cp7vzCMTU8ffcKOvqvHXoEjUue9zh6+Mk08
 hqDxfBokpH0uzPr6w740UXoBrRjquQC27Tj0VIbqoDKt2A95DEKp1cJjowZXWmsVbvgE
 fqOr3DC34Pjug6ciUIbNfdBIH2UKAibTjInsjUr10fE2RNo05a1Au/SqwgIxbtnWreg7
 eSyg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=WWKdqbaOBLtVxTZpdGFFsCRN5VtoXFbUijFx3dTNVWM=;
 b=f8FCljRESz74zns4ChpkpgBo/6LAyas7jmWIwfwZFd2fLIRf1bCutnUZP8osaPM9gO
 C03tKmOD+ul4XkBGe8l4zRspURlZjo8UjjN7D/mI3WjDf5UwfDTlKpwKov66XqpjGQJb
 fOUwZ8G8nNkcale7gaYn1NQWlo2/0tnbPkFv5crkZ0ZUnnKS8DjkUdPz1xAZwl6Y6XvZ
 CSs8Y9bzg2yqv89lNEmvjuBEcHgyYa1zxmHC3kDDxm7F7gQCRghDsmdDN+QLS5LPpDVG
 Ia1nqSqCjTspZlL/rL8NYlvf4hH0DrtWydiyBkLoY6aeLxClfCBN7MFBxXwVX82bKC71
 XeeA==
X-Gm-Message-State: APjAAAVB4/hpQaOTtKS4TibLXWhbmcOIbBflKz2XdJBm1HuL+8KNTHcA
 ai4as96USS1Zkwf5ciII4P5DiYBx
X-Google-Smtp-Source: APXvYqwznva7eiSjwlRQGuCtge/R+Gy2qzFG9gHAcvy/6qKLwlUFGOPkBl4q9GWfHTDuC6hlQGRD/w==
X-Received: by 2002:adf:ea85:: with SMTP id s5mr11368932wrm.295.1567850959283; 
 Sat, 07 Sep 2019 03:09:19 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id e20sm13645610wrc.34.2019.09.07.03.09.18
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:09:18 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907095945.12739-7-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <7de9e9b2-bfb5-0644-5396-6e1759a6aad9@gmail.com>
Date: Sat, 7 Sep 2019 13:09:17 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907095945.12739-7-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 6/7] lib/9pfs: Add open,
 close and readdir vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NTkgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUg
b3BlbiwgY2xvc2UgYW5kIHJlYWRkaXIgVkZTIG5vZGUgb3BlcmF0aW9ucy4KPiAKPiBJbiBvcmRl
ciB0byBjYWNoZSBzdGF0IHN0cnVjdHVyZXMgb24gc2VxdWVudGlhbCByZWFkZGlyIGNhbGxzLAo+
IGEgYnVmZmVyIGlzIHBsYWNlZCBpbiB0aGUgZl9kYXRhIGZpZWxkIG9mIGEgZmlsZSBzdHJ1Y3Qu
Cj4gCj4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAt
LS0KPiAgbGliLzlwZnMvOXBmc192bm9wcy5jIHwgMTc4ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrLQo+ICAxIGZpbGUgY2hhbmdlZCwgMTc1IGluc2VydGlvbnMoKyks
IDMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi85cGZzLzlwZnNfdm5vcHMuYyBi
L2xpYi85cGZzLzlwZnNfdm5vcHMuYwo+IGluZGV4IDUwZjgzMTQ4Li5iZjAwOGE4OCAxMDA2NDQK
PiAtLS0gYS9saWIvOXBmcy85cGZzX3Zub3BzLmMKPiArKysgYi9saWIvOXBmcy85cGZzX3Zub3Bz
LmMKPiBAQCAtNDcsNiArNDcsMjYgQEAKPiAgCj4gICNpbmNsdWRlICI5cGZzLmgiCj4gIAo+ICtz
dGF0aWMgdWludDhfdCB1a185cGZzX29wZW5fbW9kZV9mcm9tX3Bvc2l4X2ZsYWdzKHVuc2lnbmVk
IGxvbmcgZmxhZ3MpCj4gK3sKPiArCXVpbnQ4X3QgbW9kZSA9IDA7Cj4gKwl1aW50OF90IGZsYWdz
X3J3ID0gZmxhZ3MgJiAoVUtfRlJFQUQgfCBVS19GV1JJVEUpOwo+ICsKPiArCWlmIChmbGFnc19y
dyA9PSBVS19GUkVBRCkKPiArCQltb2RlID0gVUtfOVBfT1JFQUQ7Cj4gKwllbHNlIGlmIChmbGFn
c19ydyA9PSBVS19GV1JJVEUpCj4gKwkJbW9kZSA9IFVLXzlQX09XUklURTsKPiArCWVsc2UgaWYg
KGZsYWdzX3J3ID09IChVS19GUkVBRCB8IFVLX0ZXUklURSkpCj4gKwkJbW9kZSA9IFVLXzlQX09S
RFdSOwo+ICsKPiArCWlmIChmbGFncyAmIE9fRVhDTCkKPiArCQltb2RlIHw9IFVLXzlQX09FWENM
Owo+ICsJaWYgKGZsYWdzICYgT19UUlVOQykKPiArCQltb2RlIHw9IFVLXzlQX09UUlVOQzsKPiAr
Cj4gKwlyZXR1cm4gbW9kZTsKPiArfQo+ICsKPiAgc3RhdGljIGludCB1a185cGZzX3Bvc2l4X3Bl
cm1fZnJvbV9tb2RlKGludCBtb2RlKQo+ICB7Cj4gIAlpbnQgcmVzOwo+IEBAIC03Myw2ICs5Mywx
MyBAQCBzdGF0aWMgdWludDMyX3QgdWtfOXBmc19wZXJtX2Zyb21fcG9zaXhfbW9kZShtb2RlX3Qg
bW9kZSkKPiAgCXJldHVybiByZXM7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQgdWtfOXBmc19kdHR5
cGVfZnJvbV9tb2RlKGludCBtb2RlKQo+ICt7Cj4gKwlpZiAobW9kZSAmIFVLXzlQX0RNRElSKQo+
ICsJCXJldHVybiBEVF9ESVI7Cj4gKwlyZXR1cm4gRFRfUkVHOwo+ICt9Cj4gKwo+ICBzdGF0aWMg
aW50IHVrXzlwZnNfcG9zaXhfbW9kZV9mcm9tX21vZGUoaW50IG1vZGUpCj4gIHsKPiAgCWludCBy
ZXM7Cj4gQEAgLTEzMSw2ICsxNTgsNzUgQEAgdm9pZCB1a185cGZzX2ZyZWVfdm5vZGVfZGF0YShz
dHJ1Y3Qgdm5vZGUgKnZwKQo+ICAJdnAtPnZfZGF0YSA9IE5VTEw7Cj4gIH0KPiAgCj4gKy8qCj4g
KyAqIFRoZSBjbG9zaW5nIHZhcmlhbnQgb2YgdGhlIGZ1bmN0aW9uIHdpbGwgZW5mb3JjZSBmcmVl
aW5nIHRoZSBhc3NvY2lhdGVkCj4gKyAqIHJlc291cmNlcyBvbmx5IGlmIHRoZSB2bm9kZSB3YXMg
cmVtb3ZlZCB2aWEgYW4gdW5saW5rL3JtZGlyIG9wZXJhdGlvbi4KPiArICovCj4gK3N0YXRpYyB2
b2lkIHVrXzlwZnNfZnJlZV92bm9kZV9kYXRhX2Nsb3Npbmcoc3RydWN0IHZub2RlICp2cCkKPiAr
ewo+ICsJc3RydWN0IHVrXzlwZnNfbm9kZV9kYXRhICpuZCA9IFVLXzlQRlNfTkQodnApOwo+ICsK
PiArCWlmICghbmQtPnJlbW92ZWQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXVrXzlwZnNfZnJlZV92
bm9kZV9kYXRhKHZwKTsKPiArfQo+ICsKPiArc3RhdGljIGludCB1a185cGZzX29wZW4oc3RydWN0
IHZmc2NvcmVfZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IHVrXzlwZGV2ICpkZXYgPSBVS185
UEZTX01EKGZpbGUtPmZfZGVudHJ5LT5kX21vdW50KS0+ZGV2Owo+ICsJc3RydWN0IHVrXzlwZmlk
ICpvcGVuZWRmaWQ7Cj4gKwlzdHJ1Y3QgdWtfOXBmc19maWxlX2RhdGEgKmZkOwo+ICsJaW50IHJj
Owo+ICsKPiArCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgZmlsZSBkYXRhLiAqLwo+ICsJZmQgPSBj
YWxsb2MoMSwgc2l6ZW9mKCpmZCkpOwo+ICsJaWYgKCFmZCkKPiArCQlyZXR1cm4gRU5PTUVNOwo+
ICsKPiArCS8qIENsb25lIGZpZC4gKi8KPiArCW9wZW5lZGZpZCA9IHVrXzlwX3dhbGsoZGV2LCBV
S185UEZTX1ZGSUQoZmlsZS0+Zl9kZW50cnktPmRfdm5vZGUpLAo+ICsJCQlOVUxMKTsKPiArCWlm
IChQVFJJU0VSUihvcGVuZWRmaWQpKSB7Cj4gKwkJcmMgPSBQVFIyRVJSKG9wZW5lZGZpZCk7Cj4g
KwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJLyogT3BlbiBjbG9uZWQgZmlkLiAqLwo+ICsJcmMg
PSB1a185cF9vcGVuKGRldiwgb3BlbmVkZmlkLAo+ICsJCXVrXzlwZnNfb3Blbl9tb2RlX2Zyb21f
cG9zaXhfZmxhZ3MoZmlsZS0+Zl9mbGFncykpOwo+ICsKPiArCWlmIChyYykKPiArCQlnb3RvIG91
dF9lcnI7Cj4gKwo+ICsJZmQtPmZpZCA9IG9wZW5lZGZpZDsKPiArCWZpbGUtPmZfZGF0YSA9IGZk
Owo+ICsgCVVLXzlQRlNfTkQoZmlsZS0+Zl9kZW50cnktPmRfdm5vZGUpLT5uYl9vcGVuX2ZpbGVz
Kys7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtvdXRfZXJyOgo+ICsJdWtfOXBmaWRfcHV0KG9w
ZW5lZGZpZCk7Cj4gK291dDoKPiArCWZyZWUoZmQpOwo+ICsJcmV0dXJuIC1yYzsKPiArfQo+ICsK
PiArc3RhdGljIGludCB1a185cGZzX2Nsb3NlKHN0cnVjdCB2bm9kZSAqdm4gX191bnVzZWQsIHN0
cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCB1a185cGZzX2ZpbGVfZGF0
YSAqZmQgPSBVS185UEZTX0ZEKGZpbGUpOwo+ICsKPiArCWlmIChmZC0+cmVhZGRpcl9idWYpCj4g
KwkJZnJlZShmZC0+cmVhZGRpcl9idWYpOwo+ICsKPiArCXVrXzlwZmlkX3B1dChmZC0+ZmlkKTsK
PiArCWZyZWUoZmQpOwo+ICsJVUtfOVBGU19ORChmaWxlLT5mX2RlbnRyeS0+ZF92bm9kZSktPm5i
X29wZW5fZmlsZXMtLTsKPiArCXVrXzlwZnNfZnJlZV92bm9kZV9kYXRhX2Nsb3NpbmcoZmlsZS0+
Zl9kZW50cnktPmRfdm5vZGUpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICBzdGF0aWMg
aW50IHVrXzlwZnNfbG9va3VwKHN0cnVjdCB2bm9kZSAqZHZwLCBjaGFyICpuYW1lLCBzdHJ1Y3Qg
dm5vZGUgKip2cHApCj4gIHsKPiAgCXN0cnVjdCB1a185cGRldiAqZGV2ID0gVUtfOVBGU19NRChk
dnAtPnZfbW91bnQpLT5kZXY7Cj4gQEAgLTI2Niw3ICszNjIsODUgQEAgc3RhdGljIGludCB1a185
cGZzX3JtZGlyKHN0cnVjdCB2bm9kZSAqZHZwLCBzdHJ1Y3Qgdm5vZGUgKnZwLAo+ICBzdGF0aWMg
aW50IHVrXzlwZnNfcmVhZGRpcihzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdmZzY29yZV9maWxl
ICpmcCwKPiAgCQlzdHJ1Y3QgZGlyZW50ICpkaXIpCj4gIHsKPiAtCXJldHVybiBFTk9FTlQ7Cj4g
KwlzdHJ1Y3QgdWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQodnAtPnZfbW91bnQpLT5kZXY7Cj4g
KwlzdHJ1Y3QgdWtfOXBmc19maWxlX2RhdGEgKmZkID0gVUtfOVBGU19GRChmcCk7Cj4gKwlpbnQg
cmM7Cj4gKwlzdHJ1Y3QgdWtfOXBfc3RhdCBzdGF0Owo+ICsJc3RydWN0IHVrXzlwcmVxIGZha2Vf
cmVxdWVzdDsKPiArCj4gK2FnYWluOgo+ICsJaWYgKCFmZC0+cmVhZGRpcl9idWYpIHsKPiArCQlm
ZC0+cmVhZGRpcl9idWYgPSBtYWxsb2MoVUtfOVBGU19SRUFERElSX0JVRlNaKTsKPiArCQlpZiAo
IWZkLT5yZWFkZGlyX2J1ZikKPiArCQkJcmV0dXJuIEVOT01FTTsKPiArCj4gKwkJLyogQ3VycmVu
dGx5IHRoZSByZWFkZGlyKCkgYnVmZmVyIGlzIGVtcHR5LiAqLwo+ICsJCWZkLT5yZWFkZGlyX29m
ZiA9IDA7Cj4gKwkJZmQtPnJlYWRkaXJfc3ogPSAwOwo+ICsJfQo+ICsKPiArCWlmIChmZC0+cmVh
ZGRpcl9vZmYgPT0gZmQtPnJlYWRkaXJfc3opIHsKPiArCQlmZC0+cmVhZGRpcl9vZmYgPSAwOwo+
ICsJCWZkLT5yZWFkZGlyX3N6ID0gdWtfOXBfcmVhZChkZXYsIGZkLT5maWQsIGZwLT5mX29mZnNl
dCwKPiArCQkJCVVLXzlQRlNfUkVBRERJUl9CVUZTWiwgZmQtPnJlYWRkaXJfYnVmKTsKPiArCQlp
ZiAoZmQtPnJlYWRkaXJfc3ogPCAwKSB7Cj4gKwkJCXJjID0gZmQtPnJlYWRkaXJfc3o7Cj4gKwkJ
CWdvdG8gb3V0Owo+ICsJCX0KPiArCj4gKwkJLyogRW5kIG9mIGRpcmVjdG9yeS4gKi8KPiArCQlp
ZiAoZmQtPnJlYWRkaXJfc3ogPT0gMCkgewo+ICsJCQlyYyA9IC1FTk9FTlQ7Cj4gKwkJCWdvdG8g
b3V0Owo+ICsJCX0KPiArCj4gKwkJLyoKPiArCQkgKiBVcGRhdGUgb2Zmc2V0IGZvciB0aGUgbmV4
dCByZWFkZGlyKCkgY2FsbCB3aGljaCByZXF1aXJlcwo+ICsJCSAqIHRoZSBuZXh0IGNodW5rIG9m
IGRhdGEgdG8gYmUgdHJhbnNmZXJyZWQuCj4gKwkJICovCj4gKwkJZnAtPmZfb2Zmc2V0ICs9IGZk
LT5yZWFkZGlyX3N6Owo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBCdWlsZCBhIGZha2UgcmVxdWVz
dCB0byB1c2UgdGhlIDlQIHJlcXVlc3QgQVBJIHRvIHJlYWQgZnJvbSB0aGUKPiArCSAqIGJ1ZmZl
ciB0aGUgc3RhdCBzdHJ1Y3R1cmUuCj4gKwkgKi8KPiArCWZha2VfcmVxdWVzdC5yZWN2LmJ1ZiA9
IGZkLT5yZWFkZGlyX2J1ZjsKPiArCWZha2VfcmVxdWVzdC5yZWN2LnNpemUgPSBmZC0+cmVhZGRp
cl9zejsKPiArCWZha2VfcmVxdWVzdC5yZWN2Lm9mZnNldCA9IGZkLT5yZWFkZGlyX29mZjsKPiAr
CWZha2VfcmVxdWVzdC5zdGF0ZSA9IFVLXzlQUkVRX1JFQ0VJVkVEOwo+ICsJcmMgPSB1a185cHJl
cV9kZXNlcmlhbGl6ZSgmZmFrZV9yZXF1ZXN0LCAiUyIsICZzdGF0KTsKPiArCj4gKwlpZiAocmMg
PT0gLUVOT0JVRlMpIHsKPiArCQkvKgo+ICsJCSAqIFJldHJ5IHdpdGggYSBjbGVhbiBidWZmZXIs
IG1heWJlIHRoZSBzdGF0IHN0cnVjdHVyZSBnb3QKPiArCQkgKiBjaHVua2VkIGFuZCBpcyBub3Qg
d2hvbGUsIGFsdGhvdWdoIHRoZSBSRkMgc2F5cyB0aGlzIHNob3VsZAo+ICsJCSAqIG5vdCBoYXBw
ZW4uCj4gKwkJICovCj4gKwkJZmQtPnJlYWRkaXJfb2ZmID0gMDsKPiArCQlmZC0+cmVhZGRpcl9z
eiA9IDA7Cj4gKwkJZ290byBhZ2FpbjsKPiArCX0KPiArCj4gKwkvKiBVcGRhdGUgdGhlIHJlYWRk
aXIoKSBvZmZzZXQgdG8gdGhlIG9mZnNldCBhZnRlciBkZXNlcmlhbGl6YXRpb24uICovCj4gKwlm
ZC0+cmVhZGRpcl9vZmYgPSBmYWtlX3JlcXVlc3QucmVjdi5vZmZzZXQ7Cj4gKwo+ICsJLyoKPiAr
CSAqIEFueSBvdGhlciBlcnJvciBiZXNpZGVzIEVOT0JVRlMgd2hlbiBkZXNlcmlhbGl6aW5nIGlz
IGNvbnNpZGVyZWQKPiArCSAqIGFuIElPIGVycm9yLgo+ICsJICovCj4gKwlpZiAocmMpIHsKPiAr
CQlyYyA9IC1FSU87Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJZGlyLT5kX3R5cGUgPSB1
a185cGZzX2R0dHlwZV9mcm9tX21vZGUoc3RhdC5tb2RlKTsKPiArCWRpci0+ZF9pbm8gPSB1a185
cGZzX2lubygmc3RhdCk7Cj4gKwlzdHJsY3B5KChjaGFyICopICZkaXItPmRfbmFtZSwgc3RhdC5u
YW1lLmRhdGEsCj4gKwkJCU1JTihzaXplb2YoZGlyLT5kX25hbWUpLCBzdGF0Lm5hbWUuc2l6ZSAr
IDFVKSk7Cj4gKwo+ICtvdXQ6Cj4gKwlyZXR1cm4gLXJjOwo+ICB9Cj4gIAo+ICAjZGVmaW5lIHVr
XzlwZnNfc2VlawkJKCh2bm9wX3NlZWtfdCl2ZnNjb3JlX3ZvcF9udWxsb3ApCj4gQEAgLTI4MSw4
ICs0NTUsNiBAQCBzdGF0aWMgaW50IHVrXzlwZnNfcmVhZGRpcihzdHJ1Y3Qgdm5vZGUgKnZwLCBz
dHJ1Y3QgdmZzY29yZV9maWxlICpmcCwKPiAgI2RlZmluZSB1a185cGZzX3N5bWxpbmsJCSgodm5v
cF9zeW1saW5rX3QpdmZzY29yZV92b3BfZXBlcm0pCj4gICNkZWZpbmUgdWtfOXBmc19mYWxsb2Nh
dGUJKCh2bm9wX2ZhbGxvY2F0ZV90KXZmc2NvcmVfdm9wX251bGxvcCkKPiAgI2RlZmluZSB1a185
cGZzX3JlbmFtZQkJKCh2bm9wX3JlbmFtZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiAtI2RlZmlu
ZSB1a185cGZzX29wZW4JCSgodm5vcF9vcGVuX3QpdmZzY29yZV92b3BfZWludmFsKQo+IC0jZGVm
aW5lIHVrXzlwZnNfY2xvc2UJCSgodm5vcF9jbG9zZV90KXZmc2NvcmVfdm9wX2VpbnZhbCkKPiAg
I2RlZmluZSB1a185cGZzX3JlYWQJCSgodm5vcF9yZWFkX3QpdmZzY29yZV92b3BfZWludmFsKQo+
ICAjZGVmaW5lIHVrXzlwZnNfd3JpdGUJCSgodm5vcF93cml0ZV90KXZmc2NvcmVfdm9wX2VpbnZh
bCkKPiAgCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:09:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:09:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xer-0003iY-1E; Sat, 07 Sep 2019 10:09:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xeq-0003iO-3o
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:09:28 +0000
X-Inumbo-ID: 92fa3f7e-d157-11e9-b299-bc764e2007e4
Received: from mail-wr1-x443.google.com (unknown [2a00:1450:4864:20::443])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 92fa3f7e-d157-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:09:27 +0000 (UTC)
Received: by mail-wr1-x443.google.com with SMTP id s18so8972108wrn.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:09:27 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=pjn20uTQws8eVx+bwcBZWlZ0nBhl1K3rCT5wbQ8pma8=;
 b=clTHFapq8XHDK/otUs5dOK5UWzQwzE4bbTFcTmlBrxB1QRQ/K06htPWukAVtnrENIx
 iJpMb0YpA5z2/foeKeJzXEf/ZTaaZEP0v1bALsBWrLU38hoYeBRwLwizErPJgVyCv6lh
 i8aZMb86jCK5UwgVNdi9U/3ERefeMfW4jOLllShDbhQQGdHzNOLRbgZ5J1NWLO1gTDb5
 WtGbo2ulLbeBaLjUl7BoMPRIjOE0aame3jo8aJbjCl9mvP5yKqU54lf1ntngbvGj/O1d
 Aqq67xfXFv9lCeBnO2ow9lSfagrtxsmdYlIGro/li1PfCmzWE2VzmrpxW1pYp3s96KOo
 nzng==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=pjn20uTQws8eVx+bwcBZWlZ0nBhl1K3rCT5wbQ8pma8=;
 b=VtuY+9ziqoCy31OQVk8du+lucCY4g2aTPO0IpeJ+kagAZFl0Xvb3jpXmE3OAjNyzJa
 elEZ5Y1d8ni5e7Yj5aMsszpHho7uk7FU9xSqxVM6VpmizdH8QRkxzs5X/ccyRzYblBAj
 8fVM09eBuFoUSK1swP2eQqMmW6e1+Jc32i0HZpLtVRhScMdcs35PSS5EzXGY/NPXg+yq
 UmPz1O0OKOvGgol2i0yDsIZafHy04DSGFJj0832Ew19FHc6lV35hzthE5VP4GaYj16x8
 DnpABL/F6EWGhCvFwpahhrBIJUCU9xe7QxJPWU3/fW+Rusccb3efcIZIjxFzh6Gt2/YO
 b/tw==
X-Gm-Message-State: APjAAAUvXZiLn5/6lgpYLk1UhS+IzyRbOpbMclC84z63nRlloxbwH6pk
 HxOHOqEkdAzG8CHCXyxxS28=
X-Google-Smtp-Source: APXvYqx7YVNGodRgiWta/EVATnSQsfDJ7j1rB4MsegCKikgjytCVGMnPE0AtbeG5+l6yVQnJdWzZyA==
X-Received: by 2002:adf:df8e:: with SMTP id z14mr11500859wrl.81.1567850966677; 
 Sat, 07 Sep 2019 03:09:26 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id e30sm11763761wra.48.2019.09.07.03.09.26
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:09:26 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907095945.12739-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907095945.12739-8-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <d1bfb6c3-b60d-46db-65ec-16ffc8175be4@gmail.com>
Date: Sat, 7 Sep 2019 13:09:25 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907095945.12739-8-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 7/7] lib/9pfs: Add read and
 write vnops
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMTI6NTkgUE0sIFZsYWQtQW5kcmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBGcm9tOiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IAo+IFRoaXMgcGF0Y2ggYWRkcyB0aGUg
cmVhZCBhbmQgd3JpdGUgVkZTIG5vZGUgb3BlcmF0aW9ucy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBD
cmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBsaWIvOXBmcy85cGZzX3Zu
b3BzLmMgfCAxMDggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCj4g
IDEgZmlsZSBjaGFuZ2VkLCAxMDYgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKPiAKPiBk
aWZmIC0tZ2l0IGEvbGliLzlwZnMvOXBmc192bm9wcy5jIGIvbGliLzlwZnMvOXBmc192bm9wcy5j
Cj4gaW5kZXggYmYwMDhhODguLjUzZDAwYjhlIDEwMDY0NAo+IC0tLSBhL2xpYi85cGZzLzlwZnNf
dm5vcHMuYwo+ICsrKyBiL2xpYi85cGZzLzlwZnNfdm5vcHMuYwo+IEBAIC00NDMsNiArNDQzLDEx
MiBAQCBvdXQ6Cj4gIAlyZXR1cm4gLXJjOwo+ICB9Cj4gIAo+ICtzdGF0aWMgaW50IHVrXzlwZnNf
cmVhZChzdHJ1Y3Qgdm5vZGUgKnZwLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmcCwKPiArCQkJc3Ry
dWN0IHVpbyAqdWlvLCBpbnQgaW9mbGFnIF9fdW51c2VkKQo+ICt7Cj4gKwlzdHJ1Y3QgdWtfOXBk
ZXYgKmRldiA9IFVLXzlQRlNfTUQodnAtPnZfbW91bnQpLT5kZXY7Cj4gKwlzdHJ1Y3QgdWtfOXBm
aWQgKmZpZCA9IFVLXzlQRlNfRkQoZnApLT5maWQ7Cj4gKwlzdHJ1Y3QgaW92ZWMgKmlvdjsKPiAr
CWludCByYzsKPiArCj4gKwlpZiAodnAtPnZfdHlwZSA9PSBWRElSKQo+ICsJCXJldHVybiBFSVNE
SVI7Cj4gKwlpZiAodnAtPnZfdHlwZSAhPSBWUkVHKQo+ICsJCXJldHVybiBFSU5WQUw7Cj4gKwlp
ZiAodWlvLT51aW9fb2Zmc2V0IDwgMCkKPiArCQlyZXR1cm4gRUlOVkFMOwo+ICsJaWYgKHVpby0+
dWlvX29mZnNldCA+PSAob2ZmX3QpIHZwLT52X3NpemUpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJ
aWYgKCF1aW8tPnVpb19yZXNpZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlpb3YgPSB1aW8tPnVp
b19pb3Y7Cj4gKwl3aGlsZSAoIWlvdi0+aW92X2xlbikgewo+ICsJCXVpby0+dWlvX2lvdisrOwo+
ICsJCXVpby0+dWlvX2lvdmNudC0tOwo+ICsJfQo+ICsKPiArCXJjID0gdWtfOXBfcmVhZChkZXYs
IGZpZCwgdWlvLT51aW9fb2Zmc2V0LAo+ICsJCQkgICBpb3YtPmlvdl9sZW4sIGlvdi0+aW92X2Jh
c2UpOwo+ICsJaWYgKHJjIDwgMCkKPiArCQlyZXR1cm4gLXJjOwo+ICsKPiArCWlvdi0+aW92X2Jh
c2UgPSAoY2hhciAqKWlvdi0+aW92X2Jhc2UgKyByYzsKPiArCWlvdi0+aW92X2xlbiAtPSByYzsK
PiArCXVpby0+dWlvX3Jlc2lkIC09IHJjOwo+ICsJdWlvLT51aW9fb2Zmc2V0ICs9IHJjOwo+ICsK
PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHVrXzlwZnNfd3JpdGUoc3RydWN0
IHZub2RlICp2cCwgc3RydWN0IHVpbyAqdWlvLCBpbnQgaW9mbGFnKQo+ICt7Cj4gKwlzdHJ1Y3Qg
dWtfOXBkZXYgKmRldiA9IFVLXzlQRlNfTUQodnAtPnZfbW91bnQpLT5kZXY7Cj4gKwlzdHJ1Y3Qg
dWtfOXBmaWQgKmZpZDsKPiArCXN0cnVjdCBpb3ZlYyAqaW92Owo+ICsJaW50IHJjOwo+ICsKPiAr
CWlmICh2cC0+dl90eXBlID09IFZESVIpCj4gKwkJcmV0dXJuIEVJU0RJUjsKPiArCWlmICh2cC0+
dl90eXBlICE9IFZSRUcpCj4gKwkJcmV0dXJuIEVJTlZBTDsKPiArCWlmICh1aW8tPnVpb19vZmZz
ZXQgPCAwKQo+ICsJCXJldHVybiBFSU5WQUw7Cj4gKwlpZiAodWlvLT51aW9fb2Zmc2V0ID49IExP
TkdfTUFYKQo+ICsJCXJldHVybiBFRkJJRzsKPiArCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKQo+
ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChpb2ZsYWcgJiBJT19BUFBFTkQpCj4gKwkJdWlvLT51
aW9fb2Zmc2V0ID0gdnAtPnZfc2l6ZTsKPiArCj4gKwkvKiBDbG9uZSB2bm9kZSBmaWQuICovCj4g
KwlmaWQgPSB1a185cF93YWxrKGRldiwgVUtfOVBGU19WRklEKHZwKSwgTlVMTCk7Cj4gKwlpZiAo
UFRSSVNFUlIoZmlkKSkKPiArCQlyZXR1cm4gLVBUUjJFUlIoZmlkKTsKPiArCj4gKwlyYyA9IHVr
XzlwX29wZW4oZGV2LCBmaWQsIFVLXzlQX09XUklURSk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCWdv
dG8gb3V0Owo+ICsKPiArCWlmICghdWlvLT51aW9fcmVzaWQpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+
ICsJaW92ID0gdWlvLT51aW9faW92Owo+ICsJd2hpbGUgKCFpb3YtPmlvdl9sZW4pIHsKPiArCQl1
aW8tPnVpb19pb3YrKzsKPiArCQl1aW8tPnVpb19pb3ZjbnQtLTsKPiArCX0KPiArCj4gKwlyYyA9
IHVrXzlwX3dyaXRlKGRldiwgZmlkLCB1aW8tPnVpb19vZmZzZXQsCj4gKwkJCSAgICBpb3YtPmlv
dl9sZW4sIGlvdi0+aW92X2Jhc2UpOwo+ICsJaWYgKHJjIDwgMCkKPiArCQlyZXR1cm4gLXJjOwo+
ICsKPiArCWlvdi0+aW92X2Jhc2UgPSAoY2hhciAqKWlvdi0+aW92X2Jhc2UgKyByYzsKPiArCWlv
di0+aW92X2xlbiAtPSByYzsKPiArCXVpby0+dWlvX3Jlc2lkIC09IHJjOwo+ICsJdWlvLT51aW9f
b2Zmc2V0ICs9IHJjOwo+ICsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJ
cmMgPSAwOwo+ICsKPiArCS8qCj4gKwkgKiBJZiB0aGUgdWlvIG9mZnNldCBhZnRlciBjb21wbGV0
aW9uIG9mIHRoZSB3cml0ZSByZXF1ZXN0cyBpcyBiaWdnZXIKPiArCSAqIHRoYW4gdGhlIHZub2Rl
J3MgYXNzb2NpYXRlZCBzaXplLCB0aGVuIHRoZSBzaXplIG11c3QgYmUgdXBkYXRlZAo+ICsJICog
YWNjb3JkaW5nbHkuCj4gKwkgKi8KPiArCWlmICh1aW8tPnVpb19vZmZzZXQgPiB2cC0+dl9zaXpl
KQo+ICsJCXZwLT52X3NpemUgPSB1aW8tPnVpb19vZmZzZXQ7Cj4gKwo+ICtvdXQ6Cj4gKwl1a185
cGZpZF9wdXQoZmlkKTsKPiArCXJldHVybiAtcmM7Cj4gK30KPiArCj4gICNkZWZpbmUgdWtfOXBm
c19zZWVrCQkoKHZub3Bfc2Vla190KXZmc2NvcmVfdm9wX251bGxvcCkKPiAgI2RlZmluZSB1a185
cGZzX2lvY3RsCQkoKHZub3BfaW9jdGxfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gICNkZWZpbmUg
dWtfOXBmc19mc3luYwkJKCh2bm9wX2ZzeW5jX3QpdmZzY29yZV92b3BfbnVsbG9wKQo+IEBAIC00
NTUsOCArNTYxLDYgQEAgb3V0Ogo+ICAjZGVmaW5lIHVrXzlwZnNfc3ltbGluawkJKCh2bm9wX3N5
bWxpbmtfdCl2ZnNjb3JlX3ZvcF9lcGVybSkKPiAgI2RlZmluZSB1a185cGZzX2ZhbGxvY2F0ZQko
KHZub3BfZmFsbG9jYXRlX3QpdmZzY29yZV92b3BfbnVsbG9wKQo+ICAjZGVmaW5lIHVrXzlwZnNf
cmVuYW1lCQkoKHZub3BfcmVuYW1lX3QpdmZzY29yZV92b3BfZWludmFsKQo+IC0jZGVmaW5lIHVr
XzlwZnNfcmVhZAkJKCh2bm9wX3JlYWRfdCl2ZnNjb3JlX3ZvcF9laW52YWwpCj4gLSNkZWZpbmUg
dWtfOXBmc193cml0ZQkJKCh2bm9wX3dyaXRlX3QpdmZzY29yZV92b3BfZWludmFsKQo+ICAKPiAg
c3RydWN0IHZub3BzIHVrXzlwZnNfdm5vcHMgPSB7Cj4gIAkudm9wX29wZW4JPSB1a185cGZzX29w
ZW4sCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xqx-00057J-Ul; Sat, 07 Sep 2019 10:21:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6Xqx-00057E-3p
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:21:59 +0000
X-Inumbo-ID: 524b842c-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.42]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 524b842c-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:21:58 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=A4qUp7HnP6PRaIlwl9BJ1NCHSlcy1M8F02mzwBavozFlv6cFIZw/6Fx/HNmZd0NegoJ2gDhUCwYPoPe3SP4IW9tOhH4G5d+s0XcJ/al31D+8Mi9LjSW1E9iaUcOYCJetLVikCIwBE22FTwg73hnIMDeSy6LDbXzQ0c6Vp4GQi4aUrWa4A37dFhqZDnsBI7DXujzKRqq0QwntPaOOCU6u8Lo7pgkOO0lTS3gVchc6NriXQxD6UkPr/5W/v9EJZnjEpAz/eNUOIpwmEXvvVmN932+fdxpRnB6g7aAR+BEvFB/Xm+firN2pI30lbYJbjaraaee1VynciQn5BrmhuDYcVA==
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=ij9hX1ySdKkrPAWhk7SLWt0XoRQvcDoQUTjcBom1v9w=;
 b=JqSQCtc1gIqsy8wYFx7VoooakSQuTEwIh3napzkudkrndTSdJrm/Qc9qF/kK1w1ouS9ETpG2221JZz3Rm5LzCj+zCJKN1w2Y2j+C3Yr225SR2j+1x3xjxwsgnAogI8a3/4e85GcDLTSmDmxvft41TzbJELiRsONy+vpD4bpZ7niW0eqdSprynhdkOWjWdY54Pio8skN7S9XzLIdb++faJmp1vX7z+ap2DezQ4d1krzUAJUth0SNsh1gYnlPZwqA06VcTvGIGB8cpm/KoGpYwaydqLDWbOHgbqRIOS5baQKbyZI1x9jeVbqztsz394OMAXpOipsXma3YK6iCES2RcdQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:56 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:56 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 1/9] plat/xen: Add 9P device type
Thread-Index: AQHVZWYThJDJHQZLxU232/6XJPpT0g==
Date: Sat, 7 Sep 2019 10:21:56 +0000
Message-ID: <20190907102148.13371-2-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 1bdc64b5-0ba9-4abe-19ea-08d7337d35c6
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB493706BD79748FDF381F04F9A6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:4303;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(4744005)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: jAgwDkz8Wj4XBchzZMDQHAcKgH7hC1yauH9Yt/mkDnJHLzyUwE8Pe1FZXOK+5pwqz3k6xmVafikuPIM34wqESXAOJ8+aoU0H2uTuQfWX+f2fQBv2yun0m7juSde5MPw3Z8qxOw/8jrm1h7ChJAHPrhPNiyBHZOqvdJDgm6IkG5YmehcATkE+ibpI/yNZ6K+CqwXOoKfs/gdGXrD2w4kaYGDF65qGfHI+mDG5jfmUdJ2RcYSYK7CwgIwK4H+wzpC8gX6ku5BKcHYW+EABQDiJYqfiRjR4w9qzrlALHeIy6WnQwqzVA7hkB9Z5hp9q1VgmGOwSQuvqi79SBDctNScPF4+UJoaRkbkzbYi9n/mW9jeHR3sgbItDj6FacEhfJHgoTjPRIo3DS2HAEzySAhttXMJHJ4D6lQ3T5Z+VylY5giw=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 1bdc64b5-0ba9-4abe-19ea-08d7337d35c6
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:56.4037 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: uAuHt1LMt6KoQHux9JBjzv3ft0y5ZyxMA1lLiUTjyAuL4Nw3j4OkW/0tLt+hpF3LZeYUf2nWnMl3VkVSsz7WpGxKhiDpZy0iXNO9j1GVeC2dxJYhcSiRLrrGyZ0Ue4OR
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 1/9] plat/xen: Add 9P device type
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgOVAgZGV2aWNlIHR5cGUgZW50cnkgaW4gdGhlIHhlbmJ1cyBkZXZpY2UgdHlwZSBlbnVtLgoK
U2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KLS0tCiBwbGF0
L3hlbi9pbmNsdWRlL3hlbmJ1cy94ZW5idXMuaCB8IDEgKwogcGxhdC94ZW4veGVuYnVzL2NsaWVu
dC5jICAgICAgICAgfCAxICsKIDIgZmlsZXMgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCgpkaWZm
IC0tZ2l0IGEvcGxhdC94ZW4vaW5jbHVkZS94ZW5idXMveGVuYnVzLmggYi9wbGF0L3hlbi9pbmNs
dWRlL3hlbmJ1cy94ZW5idXMuaAppbmRleCBhOWQ2NDM2Zi4uMzVjY2Q3NjUgMTAwNjQ0Ci0tLSBh
L3BsYXQveGVuL2luY2x1ZGUveGVuYnVzL3hlbmJ1cy5oCisrKyBiL3BsYXQveGVuL2luY2x1ZGUv
eGVuYnVzL3hlbmJ1cy5oCkBAIC00OSw2ICs0OSw3IEBACiAgKi8KIHR5cGVkZWYgZW51bSB4ZW5i
dXNfZGV2X3R5cGUgewogCXhlbmJ1c19kZXZfbm9uZSA9IDAsCisJeGVuYnVzX2Rldl85cGZzLAog
fSB4ZW5idXNfZGV2X3R5cGVfdDsKIAogc3RydWN0IHhlbmJ1c19kZXZpY2U7CmRpZmYgLS1naXQg
YS9wbGF0L3hlbi94ZW5idXMvY2xpZW50LmMgYi9wbGF0L3hlbi94ZW5idXMvY2xpZW50LmMKaW5k
ZXggYmQwNjA2MzguLjU2ZmQxYjM3IDEwMDY0NAotLS0gYS9wbGF0L3hlbi94ZW5idXMvY2xpZW50
LmMKKysrIGIvcGxhdC94ZW4veGVuYnVzL2NsaWVudC5jCkBAIC03NCw2ICs3NCw3IEBAIGNvbnN0
IGNoYXIgKnhlbmJ1c19zdGF0ZV90b19zdHIoWGVuYnVzU3RhdGUgc3RhdGUpCiAKIHN0YXRpYyBj
b25zdCBjaGFyICpjb25zdCB4Yl9kZXZ0eXBlX3RibFtdID0gewogCVhFTkJVU19ERVZUWVBFX0VO
VFJZKG5vbmUpLAorCVhFTkJVU19ERVZUWVBFX0VOVFJZKDlwZnMpLAogfTsKIAogY29uc3QgY2hh
ciAqeGVuYnVzX2RldnR5cGVfdG9fc3RyKGVudW0geGVuYnVzX2Rldl90eXBlIGRldnR5cGUpCi0t
IAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xr3-00057r-0D; Sat, 07 Sep 2019 10:22:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6Xr1-00057h-Vi
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:04 +0000
X-Inumbo-ID: 532f8366-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.42]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 532f8366-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:21:59 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fTIBLMXRg/U2F/Dno+lUax2yipzRSHMPxqo2Qa5zLBFXo6sMhn3n4DWwdbqTd5Gwi/blSkL5YRQbB8GQp51QUknprkv2HIzE15jBGB60RKYbT7TUukWctULyV6GbiSjt4MWW+ab3hvGAQ0+hpWI6E5uptM237IQmntTf/zDW4+xffrZRF8UPzk2qjAZZh+WUyEOXQxGTHqBPTUivhwaK1ErEFrxCZsTUHr73dtiuuw0w4ny4Y1iiUUT9/Zz0lUv0ItrLc5P2I2Bo+W2cZqw9REaTuUaGLQKnv3xRJ+4BwlpxSSBxYEs5xNuF/WuhX14ZCWddWP8C/ScGSYFcEOjB3g==
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=o0WrnTPJ892q/B1jEnzE37MoeCwi8g4FAoDLW4lLeCo=;
 b=aOb50O1fwHrq0d/rJE/VdmEAvHZfwjCZUiExO4xe7dMH42MEDAxOg0dQHXEOm4JKOguqDYq8RzNhQku/5ScdZUKRdOkPXkPNCLUTekpY9zTYR3iSYJx1KF/jh2k8HSn93/nx93V+kaWK8VewC9Yx4gUbAz9E/7+YLKKsI55Q4eaIYba21i7jhCpbadsznSmJ9E5NrsdO1iGhBGA66dzzsiA6cYMNvpr7oBZtINQynXmDWrB7Of62mcaGx1vIeHFTH9Qe0uWtJGV5s5CdsD1o6sWWFjoLue0o5hgzmBzydAgKMXGON2SpJk+JiZE/nmY7QjMhR5QEApsJuPLb78f53w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:56 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:55 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 0/9] 9pfs frontend driver
Thread-Index: AQHVZWYTNySHUR0HZUywQrRnkaS0yw==
Date: Sat, 7 Sep 2019 10:21:55 +0000
Message-ID: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 6532361c-ce25-476f-903e-08d7337d3577
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB49370AC46A2D3D94A0DDA920A6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:3173;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(476003)(64756008)(486006)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: TrnBafPKF1wzQfTVd7CXnE+XR//ftVVzFGY9pazo2yBIF0Z3IIOHr4VOOYX3wqzyBXUlRbX09ZtNBBGUb06iW3XPlfsk7OhcpFp5YCYdmpePfqAxPeyhpAh49ARDI7tphHY17SW/ZZ9IDgM5jDHVqivkeR/rNxzzjAgbDgsHLojQLuptOmxSiH0GazOo5fB2Ufza5B9iW3xt61YMs0e4wIkApHxVfZNBgYuS55MmLkdGhVT3TTH1lbQJnKWa/Inlllhs6Kyxc8wBIoT/kM3eqnut8xVnLbq15GHrqcGORaCY1LUUtQLT6xwIo5KLfLAs8IHlaa0VFlbRjBVQu08vDQ8fcBR4yqBo6y2n7r31DaXkCXUgbGZxealUJOQXt0MCxbH+VEdnETbqbC/9bXfjs7hGdOOvybU5mUg5R9r181w=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 6532361c-ce25-476f-903e-08d7337d3577
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:55.8720 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 1ngOKUjjhlGXB/nbkGj5A874ld+v/aWfiZdd5OcF4+heaafnX0OUiPyKyuiZ2hGdTc2OYkVSMC/s7omLD3e4Ssq5x6R8lwQ5PBWChtsTpzSfNpCQU53EzB9sn3G+FFvh
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 0/9] 9pfs frontend driver
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

WGVuIGZyb250ZW5kIGltcGxlbWVudGF0aW9uIGZvciA5cGZzLgoKQ3Jpc3RpYW4gQmFudSAoOSk6
CiAgcGxhdC94ZW46IEFkZCA5UCBkZXZpY2UgdHlwZQogIHBsYXQveGVuL2RyaXZlcnM6IEFkZCA5
cGZyb250IGRyaXZlciBza2VsZXRvbgogIHBsYXQveGVuL2RyaXZlcnMvOXA6IEluaXRpYWxpemUg
eGVuYnVzIGRldmljZQogIHBsYXQveGVuL2RyaXZlcnMvOXA6IEFkZCBkZXZpY2UgbGlzdAogIHBs
YXQveGVuL2RyaXZlcnMvOXA6IENvbm5lY3QgdG8geGVuYnVzIGRldmljZQogIHBsYXQveGVuL2Ry
aXZlcnMvOXA6IFJlZ2lzdGVyIDlQIHRyYW5zcG9ydAogIHBsYXQveGVuL2RyaXZlcnMvOXA6IEFk
ZCBjb25uZWN0aW9uIGNhbGxiYWNrcwogIHBsYXQveGVuL2RyaXZlcnMvOXA6IEltcGxlbWVudCBy
ZXF1ZXN0IGFuZCByZWN2CiAgcGxhdC94ZW4vZHJpdmVycy85cDogQWRkIGJvdHRvbS1oYWxmIGhh
bmRsZXIKCiBwbGF0L3hlbi9Db25maWcudWsgICAgICAgICAgICAgICAgfCAgMjQgKysKIHBsYXQv
eGVuL01ha2VmaWxlLnVrICAgICAgICAgICAgICB8ICAxMSArCiBwbGF0L3hlbi9kcml2ZXJzLzlw
LzlwZnJvbnQuYyAgICAgfCA1MjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBwbGF0
L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaCAgICAgfCAgOTggKysrKysrCiBwbGF0L3hlbi9kcml2
ZXJzLzlwLzlwZnJvbnRfeGIuaCAgfCAgNjUgKysrKwogcGxhdC94ZW4vZHJpdmVycy85cC85cGZy
b250X3hzLmMgIHwgMzYwICsrKysrKysrKysrKysrKysrKysrKwogcGxhdC94ZW4vZHJpdmVycy85
cC9leHBvcnRzeW1zLnVrIHwgICAxICsKIHBsYXQveGVuL2luY2x1ZGUveGVuYnVzL3hlbmJ1cy5o
ICB8ICAgMSArCiBwbGF0L3hlbi94ZW5idXMvY2xpZW50LmMgICAgICAgICAgfCAgIDEgKwogOSBm
aWxlcyBjaGFuZ2VkLCAxMDgyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0
L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQveGVuL2Ry
aXZlcnMvOXAvOXBmcm9udC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC94ZW4vZHJpdmVycy85
cC85cGZyb250X3hiLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L3hlbi9kcml2ZXJzLzlwLzlw
ZnJvbnRfeHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQveGVuL2RyaXZlcnMvOXAvZXhwb3J0
c3ltcy51awoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xr8-00058a-1y; Sat, 07 Sep 2019 10:22:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6Xr6-00058R-Vh
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:09 +0000
X-Inumbo-ID: 53b45af0-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.42]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 53b45af0-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:21:59 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=YtKCP1cx6j2A8DS27wHuoSwbqDc75lLhcCucjF4KDomC3qsgDJ909ZroF+zX9bLkSkEUNXNF288ELipXmDleQu3tPT/vDgF6W9nkuQaiLYJlJM2+0ZeHHKd+NnoKsat1RQyIlc/MOBOyLG3lIVUO/YaVRKLeBzTYRJe6WF5za17aK9cK9pXvHgcvB/MgKRHCdDJf74LSz/fBXX/twG2WbYEmeLsQDIG76Vh8NY2HG8P1qZAUyXoDybenQKzQRIDI9icC84+kBjHKnPyRfw/zTH4RchmYlwI/VnDLAzb2E9kIXug5AU8tu5ULejHWQ1NW9Tq0Xjz2iRfgxUYbb1C+Ng==
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=IOpulg8WxFBJ2Wq/fQUFf+eNFjHAiCEmm9yNNeNdtHk=;
 b=TEMiDQmiu7Y9QmJo6RdBKU6BjoKlurMFXLFAWwDLSMKCL0FECSjW7pB8yLmv0MJnTdrj9yQC301KtdTCf1CyiHhGziuSo/w3QFfHOqM5Q3N8UHnckgfS15X30z1T6imbEHRO2bAIQS2GdLGHmCdCWdDbU8lBMSEkmWUDQHnAwbbGdqwolONX+yFz7ssHM9zIMMOHS8klTdnbSqJ2rc9rzgvqy8cSc03yF1YGGe+8rpR/2uTByRMFL3wTCmV2LnKPt7rdKikB2ZbcwMeHnTqBmBKLPzmbTahIjHzJhHCZRmPJXcz0s1CmYkzcUfHJd5aJcHdlRICU47G/vZEKnZ/4Bg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:57 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:57 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 3/9] plat/xen/drivers/9p: Initialize xenbus
 device
Thread-Index: AQHVZWYUk7BRbcEeGUC22SoxVNyAGw==
Date: Sat, 7 Sep 2019 10:21:57 +0000
Message-ID: <20190907102148.13371-4-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 41802223-6630-4e91-1bfb-08d7337d3662
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB4937269E1B1891D745A86590A6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(30864003)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: vkLX30yy6DSE17Wi6reOjtKNatbnedK/Rk1A6wLMFXBQtJ4Qr7CEUYZCZzONru1jOC2TsSrMF2sPvCsKpSoqhoayAS8mIwFujbMNbx1DkMnqy9Dn1C3fEGX14lXJQmgv1sHXuSzmNuj6/aeKAlEEFhGXKIBgnf70KfMGD1wV+zL+TuWyl/eIQJ+TSiUHwOC/8j3+iiwgnBLuJf3cmRuF5SzqcSjQ1AApqAQS+mA8fPWUSYAp37+fl+UKVShTt8a/3FwgAwWGGU/WGNe9lvdPvNeLq+0X5KxSViom6hKaTnty32T/JzoH9nD2zFVl3ChYKgOS8i5v/ovkY6HqkCi3olmiFnRkx8NZXIAvL5ctzzMfFRRLt+3XsMWhm6kb651/vgnV/cuyF+xiXsPT3zDA0l9jGZKgcUpEyZ44swGWS3U=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 41802223-6630-4e91-1bfb-08d7337d3662
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:57.4451 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ulQIcWXhM0BsY7MdoPPbfoea+RsZJO7UqGemp5VUQ1hvkvrXQj87Vnxwk7QW/qeBVvWNNVz1I4l3U7zHEeubwJNQc3h0lhnhXIEMs4kT6Hc640gNDJSwASLLkC/MsTh/
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 3/9] plat/xen/drivers/9p: Initialize
 xenbus device
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgeGVuYnVzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciByZWFkaW5nIGRhdGEgd3JpdHRlbgpi
eSB0aGUgdG9vbHN0YWNrIGFuZCB0aGUgYmFja2VuZCBmcm9tIHRoZSB4ZW5zdG9yZSwgcmVxdWly
ZWQgZm9yCmluaXRpYWxpemluZyBhIDlwZnJvbnQgZGV2aWNlLgoKU2lnbmVkLW9mZi1ieTogQ3Jp
c3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KLS0tCiBwbGF0L3hlbi9NYWtlZmlsZS51ayAg
ICAgICAgICAgICB8ICAgMSArCiBwbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaCAgICB8ICA1
MyArKysrKysrKysrKwogcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hiLmggfCAgNTMgKysr
KysrKysrKysKIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udF94cy5jIHwgMTU2ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMjYzIGluc2VydGlvbnMo
KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udF94Yi5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hzLmMKCmRpZmYgLS1naXQg
YS9wbGF0L3hlbi9NYWtlZmlsZS51ayBiL3BsYXQveGVuL01ha2VmaWxlLnVrCmluZGV4IDlkYmM3
NzI1Li4xZDdlN2NmZiAxMDA2NDQKLS0tIGEvcGxhdC94ZW4vTWFrZWZpbGUudWsKKysrIGIvcGxh
dC94ZW4vTWFrZWZpbGUudWsKQEAgLTExOSw0ICsxMTksNSBAQCBMSUJYRU45UEZST05UX0FTSU5D
TFVERVMteSAgICAgKz0gJChMSUJYRU5QTEFUX0FTSU5DTFVERVMteSkKIExJQlhFTjlQRlJPTlRf
Q0ZMQUdTLXkgICAgICAgICArPSAkKExJQlhFTlBMQVRfQ0ZMQUdTLXkpCiBMSUJYRU45UEZST05U
X0NJTkNMVURFUy15ICAgICAgKz0gJChMSUJYRU5QTEFUX0NJTkNMVURFUy15KQogTElCWEVOOVBG
Uk9OVF9TUkNTLXkgICAgICAgICAgICs9ICQoTElCWEVOUExBVF9CQVNFKS9kcml2ZXJzLzlwLzlw
ZnJvbnQuYworTElCWEVOOVBGUk9OVF9TUkNTLXkgICAgICAgICAgICs9ICQoTElCWEVOUExBVF9C
QVNFKS9kcml2ZXJzLzlwLzlwZnJvbnRfeHMuYwogZW5kaWYKZGlmZiAtLWdpdCBhL3BsYXQveGVu
L2RyaXZlcnMvOXAvOXBmcm9udC5oIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjBkZDk5ZDZjCi0tLSAvZGV2L251bGwK
KysrIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKQEAgLTAsMCArMSw1MyBAQAorLyog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6
IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAy
MDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmln
aHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklF
RCBJTiBBTlkgV0FZLgorICovCisKKyNpZm5kZWYgX185UEZST05UX0hfXworI2RlZmluZSBfXzlQ
RlJPTlRfSF9fCisKKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlIDx1ay9lc3NlbnRp
YWxzLmg+CisjaW5jbHVkZSA8dWsvbGlzdC5oPgorCitzdHJ1Y3QgcDlmcm9udF9kZXYgeworCS8q
IFhlbmJ1cyBkZXZpY2UuICovCisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldjsKKwkvKiBO
dW1iZXIgb2YgbWF4aW11bSByaW5ncywgcmVhZCBmcm9tIHhlbnN0b3JlLiAqLworCWludCBuYl9t
YXhfcmluZ3M7CisJLyogTWF4aW11bSByaW5nIHBhZ2Ugb3JkZXIsIHJlYWQgZnJvbSB4ZW5zdG9y
ZS4gKi8KKwlpbnQgbWF4X3JpbmdfcGFnZV9vcmRlcjsKKwkvKiBNb3VudCB0YWcgZm9yIHRoaXMg
ZGV2aWNlLCByZWFkIGZyb20geGVuc3RvcmUuICovCisJY2hhciAqdGFnOworfTsKKworI2VuZGlm
IC8qIF9fOVBGUk9OVF9IX18gKi8KZGlmZiAtLWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBm
cm9udF94Yi5oIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hiLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjIyNGRmN2FmCi0tLSAvZGV2L251bGwKKysrIGIvcGxh
dC94ZW4vZHJpdmVycy85cC85cGZyb250X3hiLmgKQEAgLTAsMCArMSw1MyBAQAorLyogU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IENyaXN0
aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBV
bml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9s
ZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBB
TlkgV0FZLgorICovCisKKyNpZm5kZWYgX185UEZST05UX1hCX0hfXworI2RlZmluZSBfXzlQRlJP
TlRfWEJfSF9fCisKKyNpbmNsdWRlICI5cGZyb250LmgiCisKKy8qKgorICogUmVhZHMgZGV2aWNl
IGluZm9ybWF0aW9uIGZyb20gdGhlIHhlbnN0b3JlLCBzdWNoIGFzIHRoZSBtb3VudCB0YWcKKyAq
IGFuZCBkZXRhaWxzIGFib3V0IHRoZSBkZXZpY2UgcmluZ3MuCisgKgorICogQHBhcmFtIHA5ZmRl
dgorICogICA5UCBmcm9udGVuZCBkZXZpY2UKKyAqIEByZXR1cm4KKyAqICAgLSAoMCk6IFN1Y2Nl
c3NmdWwuCisgKiAgIC0gKC1FSU5WQUwpOiBJbnZhbGlkIGRhdGEuCisgKiAgIC0gKDwgMCk6IEVy
cm9yIHdoaWxlIHJlYWRpbmcuCisgKi8KK2ludCBwOWZyb250X3hiX2luaXQoc3RydWN0IHA5ZnJv
bnRfZGV2ICpwOWZkZXYpOworCisjZW5kaWYgLyogX185UEZST05UX1hCX0hfXyAqLwpkaWZmIC0t
Z2l0IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hzLmMgYi9wbGF0L3hlbi9kcml2ZXJz
LzlwLzlwZnJvbnRfeHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNWI1
ZGMyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRfeHMu
YwpAQCAtMCwwICsxLDE1NiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNs
YXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1
Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJF
CisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisg
KiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9U
IEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1
ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgorI2luY2x1ZGUgPHVrL2Vz
c2VudGlhbHMuaD4KKyNpbmNsdWRlIDx1ay9lcnJwdHIuaD4KKyNpbmNsdWRlIDx4ZW5idXMveHMu
aD4KKyNpbmNsdWRlIDx4ZW5idXMvY2xpZW50Lmg+CisKKyNpbmNsdWRlICI5cGZyb250X3hiLmgi
CisKK3N0YXRpYyBpbnQgeHNfcmVhZF9iYWNrZW5kX2luZm8oc3RydWN0IHhlbmJ1c19kZXZpY2Ug
KnhlbmRldikKK3sKKwlpbnQgcmMsIHZhbDsKKwljaGFyIHBhdGhbc3RybGVuKHhlbmRldi0+bm9k
ZW5hbWUpICsgc2l6ZW9mKCIvYmFja2VuZC1pZCIpXTsKKworCS8qIFJlYWQgYmFja2VuZCBpZC4g
Ki8KKwlzcHJpbnRmKHBhdGgsICIlcy9iYWNrZW5kLWlkIiwgeGVuZGV2LT5ub2RlbmFtZSk7CisJ
cmMgPSB4c19yZWFkX2ludGVnZXIoWEJUX05JTCwgcGF0aCwgJnZhbCk7CisJaWYgKHJjKQorCQln
b3RvIG91dDsKKwl4ZW5kZXYtPm90aGVyZW5kX2lkID0gKGRvbWlkX3QpdmFsOworCisJLyogUmVh
ZCBiYWNrZW5kIHBhdGguICovCisJeGVuZGV2LT5vdGhlcmVuZCA9IHhzX3JlYWQoWEJUX05JTCwg
eGVuZGV2LT5ub2RlbmFtZSwgImJhY2tlbmQiKTsKKwlpZiAoUFRSSVNFUlIoeGVuZGV2LT5vdGhl
cmVuZCkpIHsKKwkJcmMgPSBQVFIyRVJSKHhlbmRldi0+b3RoZXJlbmQpOworCQl4ZW5kZXYtPm90
aGVyZW5kID0gTlVMTDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQg
eHNfcmVhZF9iYWNrZW5kX3JpbmdfaW5mbyhzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2LAor
CQkJCSAgICAgaW50ICpuYl9tYXhfcmluZ3MsCisJCQkJICAgICBpbnQgKm1heF9yaW5nX3BhZ2Vf
b3JkZXIpCit7CisJaW50IHJjOworCWNoYXIgKmludF9zdHI7CisKKwkvKiBSZWFkIG1heC1yaW5n
cy4gKi8KKwlpbnRfc3RyID0geHNfcmVhZChYQlRfTklMLCB4ZW5kZXYtPm90aGVyZW5kLCAibWF4
LXJpbmdzIik7CisJaWYgKFBUUklTRVJSKGludF9zdHIpKSB7CisJCXJjID0gUFRSMkVSUihpbnRf
c3RyKTsKKwkJdWtfcHJfZXJyKCJFcnJvcjogJWRcbiIsIHJjKTsKKwkJZ290byBvdXQ7CisJfQor
CisJKm5iX21heF9yaW5ncyA9IHN0cnRvbChpbnRfc3RyLCBOVUxMLCAxMCk7CisJZnJlZShpbnRf
c3RyKTsKKworCS8qIFJlYWQgbWF4LXJpbmctcGFnZS1vcmRlci4gKi8KKwlpbnRfc3RyID0geHNf
cmVhZChYQlRfTklMLCB4ZW5kZXYtPm90aGVyZW5kLCAibWF4LXJpbmctcGFnZS1vcmRlciIpOwor
CWlmIChQVFJJU0VSUihpbnRfc3RyKSkgeworCQlyYyA9IFBUUjJFUlIoaW50X3N0cik7CisJCXVr
X3ByX2VycigiRXJyb3I6ICVkXG4iLCByYyk7CisJCWdvdG8gb3V0OworCX0KKworCSptYXhfcmlu
Z19wYWdlX29yZGVyID0gc3RydG9sKGludF9zdHIsIE5VTEwsIDEwKTsKKwlmcmVlKGludF9zdHIp
OworCXJjID0gMDsKKworb3V0OgorCXJldHVybiByYzsKK30KKworaW50IHA5ZnJvbnRfeGJfaW5p
dChzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldikKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAq
eGVuZGV2OworCWNoYXIgKnZlcnNpb25zOworCWludCByYzsKKworCVVLX0FTU0VSVChwOWZkZXYg
IT0gTlVMTCk7CisKKwl4ZW5kZXYgPSBwOWZkZXYtPnhlbmRldjsKKwlVS19BU1NFUlQoeGVuZGV2
ICE9IE5VTEwpOworCisJLyogUmVhZCBiYWNrZW5kIG5vZGUgYW5kIGJhY2tlbmQgaWQuICovCisJ
cmMgPSB4c19yZWFkX2JhY2tlbmRfaW5mbyh4ZW5kZXYpOworCWlmIChyYykgeworCQl1a19wcl9l
cnIoIkVycm9yIGluaXRpYWxpemluZyBiYWNrZW5kIG5vZGUgYW5kIGlkLlxuIik7CisJCWdvdG8g
b3V0OworCX0KKworCS8qIENoZWNrIHZlcnNpb25zIHN0cmluZy4gKi8KKwl2ZXJzaW9ucyA9IHhz
X3JlYWQoWEJUX05JTCwgeGVuZGV2LT5vdGhlcmVuZCwgInZlcnNpb25zIik7CisJaWYgKFBUUklT
RVJSKHZlcnNpb25zKSkgeworCQl1a19wcl9lcnIoIkVycm9yIHJlYWRpbmcgYmFja2VuZCB2ZXJz
aW9uIGluZm9ybWF0aW9uLlxuIik7CisJCXJjID0gUFRSMkVSUih2ZXJzaW9ucyk7CisJCWdvdG8g
b3V0OworCX0KKworCWlmIChzdHJjbXAodmVyc2lvbnMsICIxIikpIHsKKwkJdWtfcHJfZXJyKCJC
YWNrZW5kIGRvZXMgbm90IHN1cHBvcnQgeGVuIHByb3RvY29sIHZlcnNpb24gMS5cbiIpOworCQlm
cmVlKHZlcnNpb25zKTsKKwkJcmMgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisJZnJlZSh2
ZXJzaW9ucyk7CisKKwkvKiBSZWFkIHJpbmcgaW5mb3JtYXRpb24uICovCisJcmMgPSB4c19yZWFk
X2JhY2tlbmRfcmluZ19pbmZvKHhlbmRldiwgJnA5ZmRldi0+bmJfbWF4X3JpbmdzLAorCQkJCSAg
ICAgICAmcDlmZGV2LT5tYXhfcmluZ19wYWdlX29yZGVyKTsKKwlpZiAocmMpIHsKKwkJdWtfcHJf
ZXJyKCJFcnJvciByZWFkaW5nIGJhY2tlbmQgcmluZyBpbmZvcm1hdGlvbi5cbiIpOworCQlnb3Rv
IG91dDsKKwl9CisKKwkvKiBSZWFkIHRhZy4gKi8KKwlwOWZkZXYtPnRhZyA9IHhzX3JlYWQoWEJU
X05JTCwgeGVuZGV2LT5ub2RlbmFtZSwgInRhZyIpOworCWlmIChQVFJJU0VSUihwOWZkZXYtPnRh
ZykpIHsKKwkJdWtfcHJfZXJyKCJFcnJvciByZWFkaW5nIDlwZnMgbW91bnQgdGFnLlxuIik7CisJ
CXJjID0gUFRSMkVSUihwOWZkZXYtPnRhZyk7CisJCXA5ZmRldi0+dGFnID0gTlVMTDsKKwl9CisK
K291dDoKKwlyZXR1cm4gcmM7Cit9Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XrD-00059W-4O; Sat, 07 Sep 2019 10:22:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XrB-00059L-Vv
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:14 +0000
X-Inumbo-ID: 53a03232-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.80]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 53a03232-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:22:00 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WCc/LrEPfG8K2naMbXEfGUk8wdzQFPAvhEELLfM5GGvmlgCkVyD70T/qtvVuKvhUeQ73rdxlpq3ngdS+Kr5Wv3uc1mKQ6jRemLm5DX9V7kdFUAgKO1zfHcHi+kYwFMdHsZH0e007fqv7P/3QetuZwUcBC+8HISn21QwUkzwmVdehhjvXNLnb3FLQeJjdrupKSPZgTfjc/VDrNfN+XuflSXVlavk6jAnK0jM7jgI6pQHikqVL9s905A56AV0luypxP8EiuIGUE7IuJxz+Q6lUpcKxEIXOr40ts7bDfG+ONFHReL0/ViPGz3ey86b3Cf60JhWzIveLVA438Bn8DfrxYA==
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=wdT7h7TNveh7URP5Ag3cwe7dDClRqgJ/YhWE0jpVSXU=;
 b=QGmbAwto7Br+ImsBX6FoQ76uvMVSTMQwFrnbZ6cj1V24b674pH5PlA7eLhJSH7yP3T4zNJ4GhbKhSjr++WNl6hJFXNOxWzbc+Mhq6RDmMBB+TCRMxj789RU7Gt31TYDpDODzYgmBQKvc0HIJC6KhEB/huQuDFV/78H86AxX3kaT6CQjbWl8T9vMMU5N6ZYh3n9dBCQDYzGir+usURXjNgUGHQoA9gANDhGQS7yxJRp93wK/PgDbfn8MpzYeIY6alszBA57eHayjwRzMB9mXjan0seXo8kjsykJEooTRWIjq6dpcBrmHneUYMS9X2wHAbwaLgF+HCd76dqtU4D99ZAw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:56 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:56 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 2/9] plat/xen/drivers: Add 9pfront driver
 skeleton
Thread-Index: AQHVZWYTYO/2ZlkUr0ye+xv/1eMr6w==
Date: Sat, 7 Sep 2019 10:21:56 +0000
Message-ID: <20190907102148.13371-3-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 568a14dc-89f4-4c59-076a-08d7337d3614
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB4937F99366DCD01EA71F9E5AA6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:4941;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: O7ivK0w7J3gbU7FB8yBdayOgCdMjvUOdxgSsDCKeDtKf9C3xYIkA8TdTUHlnprKwVhaV/34EgrEFZSFSrrGQ/ga0ZmMLPWwrQwlOLV9Og6UQ2b1RSO8FEmozsvWru7AzQR/bXsPEMZloo0d3q/SFEk16TEI33zc8t5Dap1gEtBL3NcyGXloaP9Hd8k+/DQbcrkNzej9ayiIG20sjhRWG8okHL8z7ka9YwaZoCspozUh2yMvkvWZnUoU9RwQGtE5WHgv8VulAWr9b1Xv28arRfDapKGK7hPGmtKnjJ3A1YrLQBYUyJViBz80TDi8AAyu7B2Qr9Xn7bRhbUBi+r6aQFHijXrAqP0TT31BKC8cUJG1YiQzw/HiK20LGrm3/JUpCljdmcm6brYPiyUHLo6XZe4Ph/GQhqaDbgKGiy6cJvm8=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 568a14dc-89f4-4c59-076a-08d7337d3614
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:56.8564 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: DJkijA7/gRYDntJhViFpV8Grg85nHco0z00xDHOj7sp5MBIO1rDvsv1u343qD/w1+HOKHrdUo41VYkRzPh5VEHJYpPyH0THhutpmPC24SeVQGgVRuODR9AT7dMgK5zUn
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 2/9] plat/xen/drivers: Add 9pfront
 driver skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgeGVuIDlwZnJvbnQgZHJpdmVyIHNrZWxldG9uLgoKU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4g
QmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KLS0tCiBwbGF0L3hlbi9Db25maWcudWsgICAgICAgICAg
ICAgICAgfCAgNyArKysrCiBwbGF0L3hlbi9NYWtlZmlsZS51ayAgICAgICAgICAgICAgfCAxMCAr
KysrKysKIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jICAgICB8IDU5ICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysKIHBsYXQveGVuL2RyaXZlcnMvOXAvZXhwb3J0c3ltcy51ayB8
ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGxh
dC94ZW4vZHJpdmVycy85cC9leHBvcnRzeW1zLnVrCgpkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vQ29u
ZmlnLnVrIGIvcGxhdC94ZW4vQ29uZmlnLnVrCmluZGV4IDFhYjRjYzg1Li5kZmZmYjMyMCAxMDA2
NDQKLS0tIGEvcGxhdC94ZW4vQ29uZmlnLnVrCisrKyBiL3BsYXQveGVuL0NvbmZpZy51awpAQCAt
NzIsNSArNzIsMTIgQEAgY29uZmlnIFhFTl9YRU5CVVMKIG1lbnUgIlhlbmJ1cyBEcml2ZXJzIgog
ICAgICAgICBkZXBlbmRzIG9uIFhFTl9YRU5CVVMKICAgICAgICAgZGVwZW5kcyBvbiBYRU5fR05U
VEFCCisKK2NvbmZpZyBYRU5fOVBGUk9OVAorCWJvb2wgIlhlbmJ1cyA5cGZyb250IERyaXZlciIK
KwlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIExJQlVLOVAKKwloZWxwCisJCURyaXZlciBmb3IgOXBm
cyBkZXZpY2VzCiBlbmRtZW51CiBlbmRpZgpkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vTWFrZWZpbGUu
dWsgYi9wbGF0L3hlbi9NYWtlZmlsZS51awppbmRleCBjNzc2ZWVhZi4uOWRiYzc3MjUgMTAwNjQ0
Ci0tLSBhL3BsYXQveGVuL01ha2VmaWxlLnVrCisrKyBiL3BsYXQveGVuL01ha2VmaWxlLnVrCkBA
IC0xMCw2ICsxMCw3IEBAICQoZXZhbCAkKGNhbGwgYWRkcGxhdF9zLHhlbiwkKENPTkZJR19QTEFU
X1hFTikpKQogIyMKICQoZXZhbCAkKGNhbGwgYWRkcGxhdGxpYix4ZW4sbGlieGVucGxhdCkpCiAk
KGV2YWwgJChjYWxsIGFkZHBsYXRsaWJfcyx4ZW4sbGlieGVuYnVzLCQoQ09ORklHX1hFTl9YRU5C
VVMpKSkKKyQoZXZhbCAkKGNhbGwgYWRkcGxhdGxpYl9zLHhlbixsaWJ4ZW45cGZyb250LCQoQ09O
RklHX1hFTl85UEZST05UKSkpCiAKICMjCiAjIyBYZW4gcGxhdGZvcm0gY29tcGlsYXRpb24gc2V0
dGluZ3MKQEAgLTExMCwzICsxMTEsMTIgQEAgTElCWEVOQlVTX1NSQ1MteSAgICAgICAgICAgICAg
ICs9ICQoTElCWEVOUExBVF9CQVNFKS94ZW5idXMveHNfY29tbXMuYwogTElCWEVOQlVTX1NSQ1Mt
eSAgICAgICAgICAgICAgICs9ICQoTElCWEVOUExBVF9CQVNFKS94ZW5idXMveHNfd2F0Y2guYwog
TElCWEVOQlVTX1NSQ1MteSAgICAgICAgICAgICAgICs9ICQoTElCWEVOUExBVF9CQVNFKS94ZW5i
dXMveHMuYwogZW5kaWYKKworaWZlcSAoJChDT05GSUdfWEVOXzlQRlJPTlQpLHkpCitMSUJYRU45
UEZST05UX0VYUE9SVFMgICAgICAgICAgID0gJChMSUJYRU5QTEFUX0JBU0UpL2RyaXZlcnMvOXAv
ZXhwb3J0c3ltcy51aworTElCWEVOOVBGUk9OVF9BU0ZMQUdTLXkgICAgICAgICs9ICQoTElCWEVO
UExBVF9BU0ZMQUdTLXkpCitMSUJYRU45UEZST05UX0FTSU5DTFVERVMteSAgICAgKz0gJChMSUJY
RU5QTEFUX0FTSU5DTFVERVMteSkKK0xJQlhFTjlQRlJPTlRfQ0ZMQUdTLXkgICAgICAgICArPSAk
KExJQlhFTlBMQVRfQ0ZMQUdTLXkpCitMSUJYRU45UEZST05UX0NJTkNMVURFUy15ICAgICAgKz0g
JChMSUJYRU5QTEFUX0NJTkNMVURFUy15KQorTElCWEVOOVBGUk9OVF9TUkNTLXkgICAgICAgICAg
ICs9ICQoTElCWEVOUExBVF9CQVNFKS9kcml2ZXJzLzlwLzlwZnJvbnQuYworZW5kaWYKZGlmZiAt
LWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jIGIvcGxhdC94ZW4vZHJpdmVycy85
cC85cGZyb250LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjhjOTg4MGU4
Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKQEAgLTAs
MCArMSw1OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLwor
LyoKKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+CisgKgorICog
Q29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJB
Q1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKyNpbmNsdWRlIDx4ZW5idXMveGVu
YnVzLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUJInhlbi05cGZyb250IgorCitzdGF0aWMgaW50
IHA5ZnJvbnRfZHJ2X2luaXQoc3RydWN0IHVrX2FsbG9jICpkcnZfYWxsb2NhdG9yIF9fdW51c2Vk
KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA5ZnJvbnRfYWRkX2RldihzdHJ1Y3Qg
eGVuYnVzX2RldmljZSAqeGVuZGV2IF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCitzdGF0
aWMgY29uc3QgeGVuYnVzX2Rldl90eXBlX3QgcDlmcm9udF9kZXZ0eXBlc1tdID0geworCXhlbmJ1
c19kZXZfOXBmcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgeGVuYnVzX2RyaXZlciBwOWZyb250X2Ry
aXZlciA9IHsKKwkuZGV2aWNlX3R5cGVzICAgPSBwOWZyb250X2RldnR5cGVzLAorCS5pbml0ICAg
ICAgICAgICA9IHA5ZnJvbnRfZHJ2X2luaXQsCisJLmFkZF9kZXYgICAgICAgID0gcDlmcm9udF9h
ZGRfZGV2Cit9OworCitYRU5CVVNfUkVHSVNURVJfRFJJVkVSKCZwOWZyb250X2RyaXZlcik7CmRp
ZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwL2V4cG9ydHN5bXMudWsgYi9wbGF0L3hlbi9k
cml2ZXJzLzlwL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjYyMWU5NGYwCi0tLSAvZGV2L251bGwKKysrIGIvcGxhdC94ZW4vZHJpdmVycy85cC9leHBv
cnRzeW1zLnVrCkBAIC0wLDAgKzEgQEAKK25vbmUKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XrI-0005AI-68; Sat, 07 Sep 2019 10:22:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XrG-0005A7-W0
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:19 +0000
X-Inumbo-ID: 5474080a-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.42]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5474080a-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:22:01 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=agn/cgVqQoEvknwQZNEOdihsf1PB5n0HDINcSlm9GvHQmEYELbwK30mjgWfVYe+sCXO6cSqdsJDv/9rGdM1zH2GHYpsHP6PzHLIdh75APsj5r0LqHAQEHffOvVLvhg6TUKOBeucsaRQ48sGAWbQ68vl6TTEK7/nBl+OZ2NK4NqY+US55mWRkE5JwT4Y6yL5qWoCsjlYYMjKMO+MxXGHTY5c6DQ6arukqy5ZmEAm9DtlMPjl77aAZow/H2DsaSfCkrQKQyNvGNwIDqn8zEmhl5d71k+Mh6QFP3ZHhEvC38vs7Q/OL77h2o6xOGn77P98mCHiHR2CfyZeXzdmlmLCN9w==
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=v4XSHnWzLKU/G32kWW+ChJ1Cxavu02P9raKYoB+tU+A=;
 b=lnx+W5nAuJDf5ZED0NwtOhDmdKPogaHHDYHeOp6KRrLt9lYJnThnCujR4FG5A16J3yu7fs6eEv3fvPK7ePJswbHm49s8gP3hA96v2lL+pCF6Ef8L6fdunyJ96yIkJgiNVKmL7fFLO++UomFddX6ADIhUKAaBS9LCbSeALYF0mrfVGZATmMkfdqJROsMj0N2Rgzv0o1GeXw39gdnTmtC/QLv6mhJfwzZOTpaahO1tkjyE4S0s7guekIhBiSMrHgIeDqey7nOEbqC0RyPlKQH4rfpMSebOGI8MXODVAtUi+jBVqv9A3/tU6NRRThaBXqu9g3KEi1dOlgM6NKKiyDgtyg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:58 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:58 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 4/9] plat/xen/drivers/9p: Add device list
Thread-Index: AQHVZWYUHaOYAVgy90CBpCzSzzpyYQ==
Date: Sat, 7 Sep 2019 10:21:57 +0000
Message-ID: <20190907102148.13371-5-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: ed518fa5-fc03-4081-e26b-08d7337d36af
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB49374574FA91740652194C6BA6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2733;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: YQNMgtipVgOPfRGVzG/TWYqxZFcafJ/7cI42mAqFEzfZuc0rL7Vqd5Ki4gjbuKgbhXIBkeyniiR8rhumjAw6dRUDFdk4XmcPQPDN+eDT8mFUrt52NNZzWt5bSb6aaK+Ko5g6p236KE5tW/+jzPOVzFiX2sbUYMRqFcCz2sunBRiIppfe9eKaSCv/5yo0hFX9oUdPadhkbuzUoVQztweH1AM0ey0HFHDqtErwpXGWRuWGXU+pGSnvNyJ+qIGhj0sPzVazGqLJGYbp5FMYKbogzmmrVABcAWif1Szm7PCN2DC3Cze/a3ylo9/1hOJx7+hh+AvFerKnyekDifDCPErEmy5+K+6eX/90sDao1BoYLyJYfqqCBeydB+w1L1XYa55OFZLPimYw8LTh83Bx0eq7lqFGQbCYjZeW7EAbZvVBRw0=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: ed518fa5-fc03-4081-e26b-08d7337d36af
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:57.9118 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: +LuVYlOXpI2YrKqAXbpOWsoN8qhoEi8LbvHXiGCRlSM7STxw0tJbW+1HJXZKxgXbHAisu2hvnGSTtxpd9NOYRWdz8GxmTE0fpt6Tq3/sQbGOVnu2L1vWqRK2+Ryz+08a
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 4/9] plat/xen/drivers/9p: Add device
 list
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyB0
aGUgOXBmcm9udCBkZXZpY2UgbGlzdC4gOXBmcm9udCBkZXZpY2VzIGFyZSBhZGRlZCB0bwp0aGUg
bGlzdCB3aGVuIHByb2JlZC4KClNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBn
bWFpbC5jb20+Ci0tLQogcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgfCA0NiArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250
LmggfCAgMiArKwogMiBmaWxlcyBjaGFuZ2VkLCA0NSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jIGIvcGxhdC94
ZW4vZHJpdmVycy85cC85cGZyb250LmMKaW5kZXggOGM5ODgwZTguLmYyODljZDA1IDEwMDY0NAot
LS0gYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYworKysgYi9wbGF0L3hlbi9kcml2ZXJz
LzlwLzlwZnJvbnQuYwpAQCAtMzIsMTggKzMyLDU4IEBACiAgKiBUSElTIEhFQURFUiBNQVkgTk9U
IEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgogICovCiAKKyNpbmNsdWRlIDx1
ay9jb25maWcuaD4KKyNpbmNsdWRlIDx1ay9hbGxvYy5oPgorI2luY2x1ZGUgPHVrL2Fzc2VydC5o
PgorI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDx1ay9saXN0Lmg+CisjaW5j
bHVkZSA8dWsvcGxhdC9zcGlubG9jay5oPgogI2luY2x1ZGUgPHhlbmJ1cy94ZW5idXMuaD4KIAor
I2luY2x1ZGUgIjlwZnJvbnRfeGIuaCIKKwogI2RlZmluZSBEUklWRVJfTkFNRQkieGVuLTlwZnJv
bnQiCiAKLXN0YXRpYyBpbnQgcDlmcm9udF9kcnZfaW5pdChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9h
bGxvY2F0b3IgX191bnVzZWQpCitzdGF0aWMgc3RydWN0IHVrX2FsbG9jICphOworc3RhdGljIFVL
X0xJU1RfSEVBRChwOWZyb250X2RldmljZV9saXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0so
cDlmcm9udF9kZXZpY2VfbGlzdF9sb2NrKTsKKworc3RhdGljIGludCBwOWZyb250X2Rydl9pbml0
KHN0cnVjdCB1a19hbGxvYyAqZHJ2X2FsbG9jYXRvcikKIHsKKwlpZiAoIWRydl9hbGxvY2F0b3Ip
CisJCXJldHVybiAtRUlOVkFMOworCisJYSA9IGRydl9hbGxvY2F0b3I7CisKIAlyZXR1cm4gMDsK
IH0KIAotc3RhdGljIGludCBwOWZyb250X2FkZF9kZXYoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhl
bmRldiBfX3VudXNlZCkKK3N0YXRpYyBpbnQgcDlmcm9udF9hZGRfZGV2KHN0cnVjdCB4ZW5idXNf
ZGV2aWNlICp4ZW5kZXYpCiB7Ci0JcmV0dXJuIDA7CisJc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZk
ZXY7CisJaW50IHJjOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlwOWZkZXYgPSB1a19jYWxs
b2MoYSwgMSwgc2l6ZW9mKCpwOWZkZXYpKTsKKwlpZiAoIXA5ZmRldikgeworCQlyYyA9IC1FTk9N
RU07CisJCWdvdG8gb3V0OworCX0KKworCXA5ZmRldi0+eGVuZGV2ID0geGVuZGV2OworCXJjID0g
cDlmcm9udF94Yl9pbml0KHA5ZmRldik7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOworCisJ
cmMgPSAwOworCXVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmcDlmcm9udF9kZXZpY2VfbGlzdF9s
b2NrLCBmbGFncyk7CisJdWtfbGlzdF9hZGQoJnA5ZmRldi0+X2xpc3QsICZwOWZyb250X2Rldmlj
ZV9saXN0KTsKKwl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlmcm9udF9kZXZpY2Vf
bGlzdF9sb2NrLCBmbGFncyk7CisKK291dF9mcmVlOgorCXVrX2ZyZWUoYSwgcDlmZGV2KTsKK291
dDoKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBjb25zdCB4ZW5idXNfZGV2X3R5cGVfdCBwOWZy
b250X2RldnR5cGVzW10gPSB7CmRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJv
bnQuaCBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oCmluZGV4IDBkZDk5ZDZjLi5lNzdm
MzE1YSAxMDA2NDQKLS0tIGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKKysrIGIvcGxh
dC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKQEAgLTQyLDYgKzQyLDggQEAKIHN0cnVjdCBwOWZy
b250X2RldiB7CiAJLyogWGVuYnVzIGRldmljZS4gKi8KIAlzdHJ1Y3QgeGVuYnVzX2RldmljZSAq
eGVuZGV2OworCS8qIEVudHJ5IHdpdGhpbiB0aGUgOXBmcm9udCBkZXZpY2UgbGlzdC4gKi8KKwlz
dHJ1Y3QgdWtfbGlzdF9oZWFkIF9saXN0OwogCS8qIE51bWJlciBvZiBtYXhpbXVtIHJpbmdzLCBy
ZWFkIGZyb20geGVuc3RvcmUuICovCiAJaW50IG5iX21heF9yaW5nczsKIAkvKiBNYXhpbXVtIHJp
bmcgcGFnZSBvcmRlciwgcmVhZCBmcm9tIHhlbnN0b3JlLiAqLwotLSAKMi4yMC4xCgoKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XrN-0005B1-85; Sat, 07 Sep 2019 10:22:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XrM-0005Aq-1D
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:24 +0000
X-Inumbo-ID: 5506602e-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.42]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5506602e-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:22:02 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fZU4e0iKxDvsxnyFXJtjoybGymuwnUhIRWGJtee1YHeNzzJwyJhUuPKX52S3fJWailUcKSd1DxGGY38CjXE/4LsCT576+a4LLOHFMMvZznIY7pdQSloucpXIqKWs5TpXEw4/spjRmiAn+dgViVTxguWN+n+iUJ5X//g+BP209lwt/9CbU4Zi32XFobcpBIA+Wus03O1CiOEo3qYrOSORIzkSwycL15+clM+2XmtU64TRyffm5LgvWHTonfTrQtEgYL6z7YBV6/cZY1e8iZ2pu0bT9KbedNE7nUHoa/AiV7lO1/ubWdxZ6Y4XD6mcMKXF2yx4u+DZnZcGNroW81PkQw==
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=G4LwodXLjR2P7PdhKeW1/E+yJZD6z1slV91dYoIX7Pc=;
 b=mPHa/phQemXuzbcIAcyR5mjK+Jo/zXGVt7ACkdUPBGcRmuNZ4/pEAf8xi4O/qV9lA8bV0hK0tSb7zzSCum/jKE9fSNwuib5L1A/JCG2kvTepRCMs5csFOgA2JmCRgxQ8l1+v6mXAjd+7ijWHQccTwBxg5eGL7NA7WWzXE37Z4Guf6ZA93lf3P2nDQ1kABJeJfUfhycjRBZf1I3rVrrKByFf9DH+1GjKlKz3dee4UjcjGhorGsK594vbift9WX4RFvmuOmPB8jB8IYvlC542T9IloWkpG7FtA/pksp57yUjvDIcEg4S8DBqBKxhj495ia6oYtn9HAp+Q8j0kgmzUSMA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:58 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:58 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 6/9] plat/xen/drivers/9p: Register 9P transport
Thread-Index: AQHVZWYUhiDteg2QhE20ejY1kQdYKw==
Date: Sat, 7 Sep 2019 10:21:58 +0000
Message-ID: <20190907102148.13371-7-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: ed48e8d0-04eb-4821-7cd0-08d7337d3745
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB4937438A530A24E5B5586677A6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:3631;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: QkEoN/IzfEaKJeG9MtcG/0ZeU38duFH3KfL9+civv7lEBav3nhRjzFzBEFSI8kY/QPqQlRPjbcmMv2XorrdsiScLLogoEgjIUiBw9Cbnrv1FI/7Yfs8xBPDmyqcOfXhEAj820sQj0TcB43TGT3UlEUDFhpnJ1YnomnA+vNVi5z373JDJX4DFeLwhc8zfPq/h7nMSZU6h4KVtpT5pYceF5A8Uq8giUhy//kvMzuY4QYMdH1hPAMSc9Hxj+bEhEGVJJXQPPvHUYH17/i+2e67ZM94hA00PeTP9LNlcU01JM87+Wtv+HhJG/sSJi0coZ5Ua4XOn/E1u5+pRyHVLlMEh6XT4iIQZ6vRMKXIlR+/Bv4atHUVe88FB2YgbVqVTPH9e8EsMtD37+bv6R+LcNXMMDWzS5fn0RMOxT3BftyDAgN0=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: ed48e8d0-04eb-4821-7cd0-08d7337d3745
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:58.8933 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: SDwB+I2wQRm6gj7DPmZIpqDBOlpqiIyYdZxzGuUz04VMjmC1hApSsXbMiIwUU45/Drolkx8Aq8LeFLFaaaSdx3JmyrusK1YU/xJXPU0C8LpDEestkSMdyXSXzVnJ6ZMw
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 6/9] plat/xen/drivers/9p: Register
 9P transport
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBz
dHVicyBmb3IgdGhlIGNhbGxiYWNrcyByZXF1aXJlZCBieSB0aGUgdHJhbnNwb3J0IGxheWVyCmFu
ZCByZWdpc3RlcnMgdGhlIHRyYW5zcG9ydCB3aXRoIHRoZSA5UCBBUEkuCgpTaWduZWQtb2ZmLWJ5
OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgotLS0KIHBsYXQveGVuL2RyaXZlcnMv
OXAvOXBmcm9udC5jIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEg
ZmlsZSBjaGFuZ2VkLCAzNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0
IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlw
ZnJvbnQuYwppbmRleCAzODk4Y2I4NS4uMTI1OTFkMDcgMTAwNjQ0Ci0tLSBhL3BsYXQveGVuL2Ry
aXZlcnMvOXAvOXBmcm9udC5jCisrKyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCkBA
IC0zOCw2ICszOCw5IEBACiAjaW5jbHVkZSA8dWsvYXNzZXJ0Lmg+CiAjaW5jbHVkZSA8dWsvZXNz
ZW50aWFscy5oPgogI2luY2x1ZGUgPHVrL2xpc3QuaD4KKyNpbmNsdWRlIDx1ay85cGRldi5oPgor
I2luY2x1ZGUgPHVrLzlwcmVxLmg+CisjaW5jbHVkZSA8dWsvOXBkZXZfdHJhbnMuaD4KICNpbmNs
dWRlIDx1ay9wbGF0L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8eGVuLXg4Ni9tbS5oPgogI2luY2x1
ZGUgPHhlbi14ODYvaXJxLmg+CkBAIC0xODcsMTQgKzE5MCw0NiBAQCBvdXQ6CiAJcmV0dXJuIHJj
OwogfQogCitzdGF0aWMgaW50IHA5ZnJvbnRfY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2
IF9fdW51c2VkLAorCQkJICAgY29uc3QgY2hhciAqZGV2aWNlX2lkZW50aWZpZXIgX191bnVzZWQs
CisJCQkgICBjb25zdCBjaGFyICptb3VudF9hcmdzIF9fdW51c2VkKQoreworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50IHA5ZnJvbnRfZGlzY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2
IF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHA5ZnJvbnRfcmVxdWVz
dChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2VkLAorCQkJICAgc3RydWN0IHVrXzlwcmVx
ICpyZXEgX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
dWtfOXBkZXZfdHJhbnNfb3BzIHA5ZnJvbnRfdHJhbnNfb3BzID0geworCS5jb25uZWN0ICAgICAg
ICA9IHA5ZnJvbnRfY29ubmVjdCwKKwkuZGlzY29ubmVjdCAgICAgPSBwOWZyb250X2Rpc2Nvbm5l
Y3QsCisJLnJlcXVlc3QgICAgICAgID0gcDlmcm9udF9yZXF1ZXN0Cit9OworCitzdGF0aWMgc3Ry
dWN0IHVrXzlwZGV2X3RyYW5zIHA5ZnJvbnRfdHJhbnMgPSB7CisJLm5hbWUgICAgICAgICAgID0g
InhlbiIsCisJLm9wcyAgICAgICAgICAgID0gJnA5ZnJvbnRfdHJhbnNfb3BzLAorCS5hICAgICAg
ICAgICAgICA9IE5VTEwgLyogU2V0IGJlbG93LiAqLworfTsKKworCiBzdGF0aWMgaW50IHA5ZnJv
bnRfZHJ2X2luaXQoc3RydWN0IHVrX2FsbG9jICpkcnZfYWxsb2NhdG9yKQogewogCWlmICghZHJ2
X2FsbG9jYXRvcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhID0gZHJ2X2FsbG9jYXRvcjsKKwlw
OWZyb250X3RyYW5zLmEgPSBhOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHVrXzlwZGV2X3RyYW5z
X3JlZ2lzdGVyKCZwOWZyb250X3RyYW5zKTsKIH0KIAogc3RhdGljIGludCBwOWZyb250X2FkZF9k
ZXYoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldikKLS0gCjIuMjAuMQoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XrS-0005Bn-9q; Sat, 07 Sep 2019 10:22:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XrQ-0005Bg-WB
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:29 +0000
X-Inumbo-ID: 54bb8766-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.80]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 54bb8766-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:22:01 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=brSBFZAEYc3xcMsrmyv1F61IVQpqr4y+q2KK8JgfVYGoM+7XutjoG1gA0DvbLnZpo2DIFPwY6w4rGEojsPoX+0isAivkvzS6eHN6WYTcZmV1ZI3gcG1IDyFji7ekj365pm/4qod6yeIfkiz1oQyFH/+Et0pJJNcHsCQz8/XN5qgQLa13r1Z7uxBXw6FE/rKb43A//OK7qPA9ndKbOgFvbxFCGo6awBttgi5EVAiLT+sihduY9ONgRbz8OGrQhgfEjHvHCTCg44v6Qi7OWM3ow84KgSzxyAr1lzx0BVAIkZEKK2S2prj+LHKrSZpOSHZW5reXUdF9oyAG7b0X9zZPTQ==
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=Y3HBAzU4Xe5K7Hl8Yeq30X/tLWuZPtUNMISrc8R614Q=;
 b=R3iRgeFITHQr+K8/eyy3XwcnIOA9rDmcvCBQW1t3GghHLH0Cd/4ovOMEUrqAD3nvLo1g91IHio4w1YFKISOqYZb16N6CGbLhtoNlUXxGiDsWATsMbZgC4i9JOYthQQIkQwwUBxhBtnBCNWk257M6p0pZvjbqKkO6U/Kyu0I/scWWQ7GdolbLE438LHfygv2sWSEMgfFCDrTO5JuYjpzwj/+lX+YyosvEQS6zEz4Ee+z3p/3eShMCQ/PjV0ZgK/fXMRhol0TJ/hfpm41UrzMw2a83eXtEDiKT4ha4NLVB2wCK4JeVZAC91xXMRHxPq3MI+eF7scl2OXA+4SA+TafUGg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:58 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:58 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 5/9] plat/xen/drivers/9p: Connect to xenbus
 device
Thread-Index: AQHVZWYUHIYNG9M/aEywvXKU87klPg==
Date: Sat, 7 Sep 2019 10:21:58 +0000
Message-ID: <20190907102148.13371-6-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: bb5df077-4904-4955-a516-08d7337d36f6
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB4937550475F96AEC05DA9CF7A6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2000;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(30864003)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: j4+Hfwqufbb/snUngj+LS46FsfEM0O9QqvpiGEcN5divDWdzeUPIr9SU2+g2PNJgrf/Vm/ApuGmPR7FarAD3fqfks1i11qgwxLwGyHwHmPvG1wM938u8ZNCcFHBbuU9lVZo1UUhGlqc9L+aSoM+Npk3OL/0INlOliOWinlaYBb70ZYKepJ4uk7SG3IGHXMAseVAEhIdjhnz93G1Lk6z3dN9giwdiT0wZhQkNPo9pXHikniFJ3k/qV1y+mx9UXA3LLTUM/S00+PdLGPoBB2CTAdya/O4dQyEyoaG9UfVDYrcH47B/ZdjDLqrz/64g5Z+vswyQ0HPbAAGaZqoKVJCVgDDSKeySso+pZFKeOrAeXep0CkKntKzwoYHox32LRZgUmKcZ5/prrYvF5Phm0U098z6SfmdRXKFkVCwpH2n5314=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: bb5df077-4904-4955-a516-08d7337d36f6
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:58.4135 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 0y4eJTr69ot+K9k0y+O7v1zy3p7u2QEVc0stZmk+YghSyx652ZS5SsmVTqSaL2TcMuGhedOx/OXoUW7npOM12YP7psdLGJ4LwpiY78w0PdRP4qJcDTRmo0b3hkVV4iZP
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 5/9] plat/xen/drivers/9p: Connect to
 xenbus device
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggaW1wbGVt
ZW50cyByaW5nIGFsbG9jYXRpb24sIHJlZmVyZW5jZSBncmFudGluZyBhbmQgZXZlbnQgY2hhbm5l
bAphbGxvY2F0aW9uLCB3aXRoIHRoZSBwdXJwb3NlIG9mIGVzdGFibGlzaGluZyB0aGUgY29ubmVj
dGlvbiB0byB0aGUKYmFja2VuZCA5cGZzIGRldmljZS4KClNpZ25lZC1vZmYtYnk6IENyaXN0aWFu
IEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Ci0tLQogcGxhdC94ZW4vQ29uZmlnLnVrICAgICAgICAg
ICAgICAgfCAgMTkgKystCiBwbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYyAgICB8IDE2NyAr
KysrKysrKysrKysrKysrKysrKysrKysrCiBwbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaCAg
ICB8ICAyOSArKysrKwogcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hiLmggfCAgMTIgKysK
IHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udF94cy5jIHwgMjA0ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNDMwIGluc2VydGlvbnMoKyksIDEgZGVs
ZXRpb24oLSkKCmRpZmYgLS1naXQgYS9wbGF0L3hlbi9Db25maWcudWsgYi9wbGF0L3hlbi9Db25m
aWcudWsKaW5kZXggZGZmZmIzMjAuLjFhZDdmN2U0IDEwMDY0NAotLS0gYS9wbGF0L3hlbi9Db25m
aWcudWsKKysrIGIvcGxhdC94ZW4vQ29uZmlnLnVrCkBAIC03MywxMSArNzMsMjggQEAgbWVudSAi
WGVuYnVzIERyaXZlcnMiCiAgICAgICAgIGRlcGVuZHMgb24gWEVOX1hFTkJVUwogICAgICAgICBk
ZXBlbmRzIG9uIFhFTl9HTlRUQUIKIAotY29uZmlnIFhFTl85UEZST05UCittZW51Y29uZmlnIFhF
Tl85UEZST05UCiAJYm9vbCAiWGVuYnVzIDlwZnJvbnQgRHJpdmVyIgogCWRlZmF1bHQgbgogCWRl
cGVuZHMgb24gTElCVUs5UAogCWhlbHAKIAkJRHJpdmVyIGZvciA5cGZzIGRldmljZXMKKworY29u
ZmlnIFhFTl85UEZST05UX05CX1JJTkdTCisJaW50ICJYZW4gOVAgcmluZyBudW1iZXIiCisJZGVm
YXVsdCAyCisJZGVwZW5kcyBvbiBYRU5fOVBGUk9OVAorCWhlbHAKKwkJTnVtYmVyIG9mIHJpbmdz
IHRvIGFsbG9jYXRlLgorCQlXaWxsIGJlIGNsYW1wZWQgdG8gdGhlIG1heGltdW0gdmFsdWUgYWxs
b3dlZCBieSB0aGUgYmFja2VuZC4KKworY29uZmlnIFhFTl85UEZST05UX1JJTkdfT1JERVIKKwlp
bnQgIlhlbiA5UCByaW5nIG9yZGVyIgorCWRlZmF1bHQgNgorCWRlcGVuZHMgb24gWEVOXzlQRlJP
TlQKKwloZWxwCisJCVJpbmcgb3JkZXIgZm9yIHhlbiA5UCBkZXZpY2VzLiBPcmRlcnMgb2YgMCwg
MSwgMiwgLi4uLCA5IHdpbGwKKwkJY3JlYXRlIHJpbmdzIG9mIHNpemUgNEssIDhLLCAxNkssIC4u
LiwgMk0gcmVzcGVjdGl2ZWx5LgorCQlXaWxsIGJlIGNsYW1wZWQgdG8gdGhlIG1heGltdW0gdmFs
dWUgYWxsb3dlZCBieSB0aGUgYmFja2VuZC4KIGVuZG1lbnUKIGVuZGlmCmRpZmYgLS1naXQgYS9w
bGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9u
dC5jCmluZGV4IGYyODljZDA1Li4zODk4Y2I4NSAxMDA2NDQKLS0tIGEvcGxhdC94ZW4vZHJpdmVy
cy85cC85cGZyb250LmMKKysrIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKQEAgLTMy
LDEyICszMiwxNSBAQAogICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9E
SUZJRUQgSU4gQU5ZIFdBWS4KICAqLwogCisjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUg
PHVrL2NvbmZpZy5oPgogI2luY2x1ZGUgPHVrL2FsbG9jLmg+CiAjaW5jbHVkZSA8dWsvYXNzZXJ0
Lmg+CiAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgogI2luY2x1ZGUgPHVrL2xpc3QuaD4KICNp
bmNsdWRlIDx1ay9wbGF0L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8eGVuLXg4Ni9tbS5oPgorI2lu
Y2x1ZGUgPHhlbi14ODYvaXJxLmg+CiAjaW5jbHVkZSA8eGVuYnVzL3hlbmJ1cy5oPgogCiAjaW5j
bHVkZSAiOXBmcm9udF94Yi5oIgpAQCAtNDgsNiArNTEsMTQyIEBAIHN0YXRpYyBzdHJ1Y3QgdWtf
YWxsb2MgKmE7CiBzdGF0aWMgVUtfTElTVF9IRUFEKHA5ZnJvbnRfZGV2aWNlX2xpc3QpOwogc3Rh
dGljIERFRklORV9TUElOTE9DSyhwOWZyb250X2RldmljZV9saXN0X2xvY2spOwogCitzdGF0aWMg
dm9pZCBwOWZyb250X2hhbmRsZXIoZXZ0Y2huX3BvcnRfdCBldnRjaG4gX191bnVzZWQsCisJCQkg
ICAgc3RydWN0IF9fcmVncyAqcmVncyBfX3VudXNlZCwKKwkJCSAgICB2b2lkICphcmcgX191bnVz
ZWQpCit7Cit9CisKK3N0YXRpYyB2b2lkIHA5ZnJvbnRfZnJlZV9kZXZfcmluZyhzdHJ1Y3QgcDlm
cm9udF9kZXYgKnA5ZmRldiwgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgcDlmcm9udF9kZXZfcmluZyAq
cmluZyA9ICZwOWZkZXYtPnJpbmdzW2lkeF07CisJaW50IGk7CisKKwlVS19BU1NFUlQocmluZy0+
aW5pdGlhbGl6ZWQpOworCisJdW5iaW5kX2V2dGNobihyaW5nLT5ldnRjaG4pOworCWZvciAoaSA9
IDA7IGkgPCAoMSA8PCBwOWZkZXYtPnJpbmdfb3JkZXIpOyBpKyspCisJCWdudHRhYl9lbmRfYWNj
ZXNzKHJpbmctPmludGYtPnJlZltpXSk7CisJdWtfcGZyZWUoYSwgcmluZy0+ZGF0YS5pbiwKKwkJ
cDlmZGV2LT5yaW5nX29yZGVyICsgWEVOX1BBR0VfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwlnbnR0
YWJfZW5kX2FjY2VzcyhyaW5nLT5yZWYpOworCXVrX3BmcmVlKGEsIHJpbmctPmludGYsIDApOwor
CXJpbmctPmluaXRpYWxpemVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHA5ZnJvbnRfZnJl
ZV9kZXZfcmluZ3Moc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYpCit7CisJaW50IGk7CisKKwlm
b3IgKGkgPSAwOyBpIDwgcDlmZGV2LT5uYl9yaW5nczsgaSsrKSB7CisJCWlmICghcDlmZGV2LT5y
aW5nc1tpXS5pbml0aWFsaXplZCkKKwkJCWNvbnRpbnVlOworCQlwOWZyb250X2ZyZWVfZGV2X3Jp
bmcocDlmZGV2LCBpKTsKKwl9CisKKwl1a19mcmVlKGEsIHA5ZmRldi0+cmluZ3MpOworfQorCitz
dGF0aWMgaW50IHA5ZnJvbnRfYWxsb2NhdGVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2ICpw
OWZkZXYsIGludCBpZHgpCit7CisJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiA9IHA5ZmRl
di0+eGVuZGV2OworCXN0cnVjdCBwOWZyb250X2Rldl9yaW5nICpyaW5nOworCWludCByYywgaTsK
Kwl2b2lkICpkYXRhX2J5dGVzOworCisJLyogU2FuaXR5IGNoZWNrcy4gKi8KKwlVS19BU1NFUlQo
aWR4ID49IDAgJiYgaWR4IDwgcDlmZGV2LT5uYl9yaW5ncyk7CisKKwlyaW5nID0gJnA5ZmRldi0+
cmluZ3NbaWR4XTsKKwlVS19BU1NFUlQoIXJpbmctPmluaXRpYWxpemVkKTsKKworCXVrYXJjaF9z
cGluX2xvY2tfaW5pdCgmcmluZy0+c3BpbmxvY2spOworCXJpbmctPmRldiA9IHA5ZmRldjsKKwor
CS8qIEFsbG9jYXRlIHJpbmcgaW50ZiBwYWdlLiAqLworCXJpbmctPmludGYgPSB1a19wYWxsb2Mo
YSwgMCk7CisJaWYgKCFyaW5nLT5pbnRmKSB7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXQ7
CisJfQorCW1lbXNldChyaW5nLT5pbnRmLCAwLCBQQUdFX1NJWkUpOworCisJLyogR3JhbnQgYWNj
ZXNzIHRvIHRoZSBhbGxvY2F0ZWQgcGFnZSB0byB0aGUgYmFja2VuZC4gKi8KKwlyaW5nLT5yZWYg
PSBnbnR0YWJfZ3JhbnRfYWNjZXNzKHhlbmRldi0+b3RoZXJlbmRfaWQsCisJCQl2aXJ0X3RvX21m
bihyaW5nLT5pbnRmKSwgMCk7CisJVUtfQVNTRVJUKHJpbmctPnJlZiAhPSBHUkFOVF9JTlZBTElE
X1JFRik7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBkYXRhLiAqLworCWRhdGFfYnl0
ZXMgPSB1a19wYWxsb2MoYSwKKwkJCXA5ZmRldi0+cmluZ19vcmRlciArIFhFTl9QQUdFX1NISUZU
IC0gUEFHRV9TSElGVCk7CisJaWYgKCFkYXRhX2J5dGVzKSB7CisJCXJjID0gLUVOT01FTTsKKwkJ
Z290byBvdXRfZnJlZV9pbnRmOworCX0KKwltZW1zZXQoZGF0YV9ieXRlcywgMCwgWEVOX0ZMRVhf
UklOR19TSVpFKHA5ZmRldi0+cmluZ19vcmRlcikgKiAyKTsKKworCS8qIEdyYW50IHJlZnMgdG8g
dGhlIGVudGlyZSBkYXRhLiAqLworCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBwOWZkZXYtPnJpbmdf
b3JkZXIpOyBpKyspIHsKKwkJcmluZy0+aW50Zi0+cmVmW2ldID0gZ250dGFiX2dyYW50X2FjY2Vz
cyh4ZW5kZXYtPm90aGVyZW5kX2lkLAorCQkJCXZpcnRfdG9fbWZuKGRhdGFfYnl0ZXMpICsgaSwg
MCk7CisJCVVLX0FTU0VSVChyaW5nLT5pbnRmLT5yZWZbaV0gIT0gR1JBTlRfSU5WQUxJRF9SRUYp
OworCX0KKworCXJpbmctPmludGYtPnJpbmdfb3JkZXIgPSBwOWZkZXYtPnJpbmdfb3JkZXI7CisJ
cmluZy0+ZGF0YS5pbiA9IGRhdGFfYnl0ZXM7CisJcmluZy0+ZGF0YS5vdXQgPSBkYXRhX2J5dGVz
ICsgWEVOX0ZMRVhfUklOR19TSVpFKHA5ZmRldi0+cmluZ19vcmRlcik7CisKKwkvKiBBbGxvY2F0
ZSBldmVudCBjaGFubmVsLiAqLworCXJjID0gZXZ0Y2huX2FsbG9jX3VuYm91bmQoeGVuZGV2LT5v
dGhlcmVuZF9pZCwgcDlmcm9udF9oYW5kbGVyLCByaW5nLAorCQkJCSZyaW5nLT5ldnRjaG4pOwor
CWlmIChyYykgeworCQl1a19wcl9lcnIoRFJJVkVSX05BTUUiOiBFcnJvciBjcmVhdGluZyBldnQg
Y2hhbm5lbDogJWRcbiIsIHJjKTsKKwkJZ290byBvdXRfZnJlZV9ncmFudHM7CisJfQorCisJdW5t
YXNrX2V2dGNobihyaW5nLT5ldnRjaG4pOworCisJLyogTWFyayByaW5nIGFzIGluaXRpYWxpemVk
LiAqLworCXJpbmctPmluaXRpYWxpemVkID0gdHJ1ZTsKKworCXJldHVybiAwOworCitvdXRfZnJl
ZV9ncmFudHM6CisJZm9yIChpID0gMDsgaSA8ICgxIDw8IHA5ZmRldi0+cmluZ19vcmRlcik7IGkr
KykKKwkJZ250dGFiX2VuZF9hY2Nlc3MocmluZy0+aW50Zi0+cmVmW2ldKTsKKwl1a19wZnJlZShh
LCBkYXRhX2J5dGVzLAorCQlwOWZkZXYtPnJpbmdfb3JkZXIgKyBYRU5fUEFHRV9TSElGVCAtIFBB
R0VfU0hJRlQpOworb3V0X2ZyZWVfaW50ZjoKKwlnbnR0YWJfZW5kX2FjY2VzcyhyaW5nLT5yZWYp
OworCXVrX3BmcmVlKGEsIHJpbmctPmludGYsIDApOworb3V0OgorCXJldHVybiByYzsKK30KKwor
c3RhdGljIGludCBwOWZyb250X2FsbG9jYXRlX2Rldl9yaW5ncyhzdHJ1Y3QgcDlmcm9udF9kZXYg
KnA5ZmRldikKK3sKKwlpbnQgcmMsIGk7CisKKwlwOWZkZXYtPnJpbmdzID0gdWtfY2FsbG9jKGEs
IHA5ZmRldi0+bmJfcmluZ3MsIHNpemVvZigqcDlmZGV2LT5yaW5ncykpOworCWlmICghcDlmZGV2
LT5yaW5ncykgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaSA9
IDA7IGkgPCBwOWZkZXYtPm5iX3JpbmdzOyBpKyspIHsKKwkJcmMgPSBwOWZyb250X2FsbG9jYXRl
X2Rldl9yaW5nKHA5ZmRldiwgaSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0X2ZyZWU7CisJfQor
CisJcmV0dXJuIDA7CisKK291dF9mcmVlOgorCXA5ZnJvbnRfZnJlZV9kZXZfcmluZ3MocDlmZGV2
KTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgcDlmcm9udF9kcnZfaW5pdChz
dHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxvY2F0b3IpCiB7CiAJaWYgKCFkcnZfYWxsb2NhdG9yKQpA
QCAtNzUsMTEgKzIxNCwzOSBAQCBzdGF0aWMgaW50IHA5ZnJvbnRfYWRkX2RldihzdHJ1Y3QgeGVu
YnVzX2RldmljZSAqeGVuZGV2KQogCWlmIChyYykKIAkJZ290byBvdXRfZnJlZTsKIAorCXVrX3By
X2luZm8oIkluaXRpYWxpemVkIDlwZnJvbnQgZGV2OiB0YWc9JXMsbWF4cmluZ3M9JWQsbWF4b3Jk
ZXI9JWRcbiIsCisJCXA5ZmRldi0+dGFnLCBwOWZkZXYtPm5iX21heF9yaW5ncywgcDlmZGV2LT5t
YXhfcmluZ19wYWdlX29yZGVyKTsKKworCXA5ZmRldi0+bmJfcmluZ3MgPSBNSU4oQ09ORklHX1hF
Tl85UEZST05UX05CX1JJTkdTLAorCQkJCXA5ZmRldi0+bmJfbWF4X3JpbmdzKTsKKwlwOWZkZXYt
PnJpbmdfb3JkZXIgPSBNSU4oQ09ORklHX1hFTl85UEZST05UX1JJTkdfT1JERVIsCisJCQkJcDlm
ZGV2LT5tYXhfcmluZ19wYWdlX29yZGVyKTsKKworCXJjID0gcDlmcm9udF9hbGxvY2F0ZV9kZXZf
cmluZ3MocDlmZGV2KTsKKwlpZiAocmMpIHsKKwkJdWtfcHJfZXJyKERSSVZFUl9OQU1FIjogQ291
bGQgbm90IGluaXRpYWxpemUgZGV2aWNlIHJpbmdzOiAlZFxuIiwKKwkJCXJjKTsKKwkJZ290byBv
dXRfZnJlZTsKKwl9CisKKwlyYyA9IHA5ZnJvbnRfeGJfY29ubmVjdChwOWZkZXYpOworCWlmIChy
YykgeworCQl1a19wcl9lcnIoRFJJVkVSX05BTUUiOiBDb3VsZCBub3QgY29ubmVjdDogJWRcbiIs
IHJjKTsKKwkJZ290byBvdXRfZnJlZV9yaW5nczsKKwl9CisKIAlyYyA9IDA7CiAJdWtwbGF0X3Nw
aW5fbG9ja19pcnFzYXZlKCZwOWZyb250X2RldmljZV9saXN0X2xvY2ssIGZsYWdzKTsKIAl1a19s
aXN0X2FkZCgmcDlmZGV2LT5fbGlzdCwgJnA5ZnJvbnRfZGV2aWNlX2xpc3QpOwogCXVrcGxhdF9z
cGluX3VubG9ja19pcnFyZXN0b3JlKCZwOWZyb250X2RldmljZV9saXN0X2xvY2ssIGZsYWdzKTsK
IAorCXVrX3ByX2luZm8oRFJJVkVSX05BTUUiOiBDb25uZWN0ZWQgOXBmcm9udCBkZXY6IHRhZz0l
cyxyaW5ncz0lZCxvcmRlcj0lZFxuIiwKKwkJcDlmZGV2LT50YWcsIHA5ZmRldi0+bmJfcmluZ3Ms
IHA5ZmRldi0+cmluZ19vcmRlcik7CisKKwlnb3RvIG91dDsKKworb3V0X2ZyZWVfcmluZ3M6CisJ
cDlmcm9udF9mcmVlX2Rldl9yaW5ncyhwOWZkZXYpOwogb3V0X2ZyZWU6CiAJdWtfZnJlZShhLCBw
OWZkZXYpOwogb3V0OgpkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250Lmgg
Yi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaAppbmRleCBlNzdmMzE1YS4uOTdjOTg2ZDgg
MTAwNjQ0Ci0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oCisrKyBiL3BsYXQveGVu
L2RyaXZlcnMvOXAvOXBmcm9udC5oCkBAIC0zNSw5ICszNSwzMSBAQAogI2lmbmRlZiBfXzlQRlJP
TlRfSF9fCiAjZGVmaW5lIF9fOVBGUk9OVF9IX18KIAorI2luY2x1ZGUgPHN0cmluZy5oPgogI2lu
Y2x1ZGUgPHVrL2NvbmZpZy5oPgogI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KICNpbmNsdWRl
IDx1ay9saXN0Lmg+CisjaW5jbHVkZSA8dWsvcGxhdC9zcGlubG9jay5oPgorI2luY2x1ZGUgPHhl
bi9pby85cGZzLmg+CisjaW5jbHVkZSA8Y29tbW9uL2V2ZW50cy5oPgorI2luY2x1ZGUgPGNvbW1v
bi9nbnR0YWIuaD4KKworc3RydWN0IHA5ZnJvbnRfZGV2X3JpbmcgeworCS8qIEJhY2twb2ludGVy
IHRvIHRoZSBwOWZyb250IGRldmljZS4gKi8KKwlzdHJ1Y3QgcDlmcm9udF9kZXYgKmRldjsKKwkv
KiBUaGUgOXBmcyBkYXRhIGludGVyZmFjZSwgYXMgZGVkZmluZWQgYnkgdGhlIHhlbiBoZWFkZXJz
LiAqLworCXN0cnVjdCB4ZW5fOXBmc19kYXRhX2ludGYgKmludGY7CisJLyogVGhlIDlwZnMgZGF0
YSwgYXMgZGVmaW5lZCBieSB0aGUgeGVuIGhlYWRlcnMuICovCisJc3RydWN0IHhlbl85cGZzX2Rh
dGEgZGF0YTsKKwkvKiBUaGUgZXZlbnQgY2hhbm5lbCBmb3IgdGhpcyByaW5nLiAqLworCWV2dGNo
bl9wb3J0X3QgZXZ0Y2huOworCS8qIEdyYW50IHJlZmVyZW5jZSBmb3IgdGhlIGludGVyZmFjZS4g
Ki8KKwlncmFudF9yZWZfdCByZWY7CisJLyogUGVyLXJpbmcgc3BpbmxvY2suICovCisJc3Bpbmxv
Y2tfdCBzcGlubG9jazsKKwkvKiBUcmFja3MgaWYgdGhpcyByaW5nIHdhcyBpbml0aWFsaXplZC4g
Ki8KKwlib29sIGluaXRpYWxpemVkOworfTsKIAogc3RydWN0IHA5ZnJvbnRfZGV2IHsKIAkvKiBY
ZW5idXMgZGV2aWNlLiAqLwpAQCAtNTAsNiArNzIsMTMgQEAgc3RydWN0IHA5ZnJvbnRfZGV2IHsK
IAlpbnQgbWF4X3JpbmdfcGFnZV9vcmRlcjsKIAkvKiBNb3VudCB0YWcgZm9yIHRoaXMgZGV2aWNl
LCByZWFkIGZyb20geGVuc3RvcmUuICovCiAJY2hhciAqdGFnOworCisJLyogTnVtYmVyIG9mIHJp
bmdzIHRvIHVzZS4gKi8KKwlpbnQgbmJfcmluZ3M7CisJLyogUmluZyBwYWdlIG9yZGVyLiAqLwor
CWludCByaW5nX29yZGVyOworCS8qIERldmljZSBkYXRhIHJpbmdzLiAqLworCXN0cnVjdCBwOWZy
b250X2Rldl9yaW5nICpyaW5nczsKIH07CiAKICNlbmRpZiAvKiBfXzlQRlJPTlRfSF9fICovCmRp
ZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRfeGIuaCBiL3BsYXQveGVuL2Ry
aXZlcnMvOXAvOXBmcm9udF94Yi5oCmluZGV4IDIyNGRmN2FmLi42ZTI2OTdmOSAxMDA2NDQKLS0t
IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hiLmgKKysrIGIvcGxhdC94ZW4vZHJpdmVy
cy85cC85cGZyb250X3hiLmgKQEAgLTUwLDQgKzUwLDE2IEBACiAgKi8KIGludCBwOWZyb250X3hi
X2luaXQoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYpOwogCisvKioKKyAqIENvbm5lY3RzIHRv
IHRoZSBiYWNrZW5kIGJ5IHNldHRpbmcgdXAgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbgorICog
ZnJvbnRlbmQgYW5kIGJhY2tlbmQuCisgKgorICogQHBhcmFtIHA5ZmRldgorICogICA5UCBmcm9u
dGVuZCBkZXZpY2UKKyAqIEByZXR1cm4KKyAqICAgLSAoMCk6IFN1Y2Nlc3NmdWwuCisgKiAgIC0g
KDwgMCk6IEVycm9yIHdoaWxlIGNvbW1pdHRpbmcgWGVuU3RvcmUgdHJhbnNhY3Rpb24uCisgKi8K
K2ludCBwOWZyb250X3hiX2Nvbm5lY3Qoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYpOworCiAj
ZW5kaWYgLyogX185UEZST05UX1hCX0hfXyAqLwpkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVy
cy85cC85cGZyb250X3hzLmMgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRfeHMuYwppbmRl
eCA1YjVkYzJlNC4uNzE4NTA2MWMgMTAwNjQ0Ci0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBm
cm9udF94cy5jCisrKyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udF94cy5jCkBAIC0xNTQs
MyArMTU0LDIwNyBAQCBpbnQgcDlmcm9udF94Yl9pbml0KHN0cnVjdCBwOWZyb250X2RldiAqcDlm
ZGV2KQogb3V0OgogCXJldHVybiByYzsKIH0KKworc3RhdGljIGludCB4c193cml0ZV9yaW5nKHN0
cnVjdCBwOWZyb250X2RldiAqcDlmZGV2LAorCQkJIGludCBpLAorCQkJIHhlbmJ1c190cmFuc2Fj
dGlvbl90IHhidCkKK3sKKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2ID0gcDlmZGV2LT54
ZW5kZXY7CisJc3RydWN0IHA5ZnJvbnRfZGV2X3JpbmcgKnJpbmcgPSAmcDlmZGV2LT5yaW5nc1tp
XTsKKwljaGFyICpwYXRoOworCWludCByYzsKKworCXJjID0gYXNwcmludGYoJnBhdGgsICJyaW5n
LXJlZiV1IiwgaSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKKwlyYyA9IHhzX3ByaW50
Zih4YnQsIHhlbmRldi0+bm9kZW5hbWUsIHBhdGgsICIldSIsIHJpbmctPnJlZik7CisJaWYgKHJj
IDwgMCkKKwkJZ290byBvdXRfcGF0aDsKKworCWZyZWUocGF0aCk7CisJcmMgPSBhc3ByaW50Zigm
cGF0aCwgImV2ZW50LWNoYW5uZWwtJXUiLCBpKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsK
KworCXJjID0geHNfcHJpbnRmKHhidCwgeGVuZGV2LT5ub2RlbmFtZSwgcGF0aCwgIiV1Iiwgcmlu
Zy0+ZXZ0Y2huKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dF9wYXRoOworCisJcmMgPSAwOwor
CitvdXRfcGF0aDoKKwlmcmVlKHBhdGgpOworb3V0OgorCXJldHVybiByYzsKK30KKworc3RhdGlj
IHZvaWQgeHNfZGVsZXRlX3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYsCisJCQkgICBp
bnQgaSwKKwkJCSAgIHhlbmJ1c190cmFuc2FjdGlvbl90IHhidCkKK3sKKwlzdHJ1Y3QgeGVuYnVz
X2RldmljZSAqeGVuZGV2ID0gcDlmZGV2LT54ZW5kZXY7CisJaW50IHJjOworCWNoYXIgKnBhdGg7
CisKKwlyYyA9IGFzcHJpbnRmKCZwYXRoLCAiJXMvcmluZy1yZWYldSIsIHhlbmRldi0+bm9kZW5h
bWUsIGkpOworCWlmIChyYyA8IDApCisJCXJldHVybjsKKwl4c19ybSh4YnQsIHBhdGgpOworCWZy
ZWUocGF0aCk7CisKKwlyYyA9IGFzcHJpbnRmKCZwYXRoLCAiJXMvZXZlbnQtY2hhbm5lbC0ldSIs
IHhlbmRldi0+bm9kZW5hbWUsIGkpOworCWlmIChyYyA8IDApCisJCXJldHVybjsKKwl4c19ybSh4
YnQsIHBhdGgpOworCWZyZWUocGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgcDlmcm9udF94Yl9mcm9u
dF9pbml0KHN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2LAorCQkJCSB4ZW5idXNfdHJhbnNhY3Rp
b25fdCB4YnQpCit7CisJaW50IGksIHJjOworCXN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYg
PSBwOWZkZXYtPnhlbmRldjsKKworCS8qCisJICogQXNzZXJ0IHRoYXQgdGhlIHA5ZmRldiByaW5n
IGluZm9ybWF0aW9uIGhhcyBiZWVuIHByb3Blcmx5CisJICogY29uZmlndXJlZCBiZWZvcmUgYXR0
ZW1wdGluZyB0byBjb25uZWN0LgorCSAqLworCVVLX0FTU0VSVChwOWZkZXYtPm5iX3JpbmdzICE9
IDAgJiYgcDlmZGV2LT5uYl9yaW5ncyA8PSA5KTsKKwlVS19BU1NFUlQocDlmZGV2LT5yaW5nX29y
ZGVyICE9IDApOworCisJLyoKKwkgKiBBc3NlcnQgdGhhdCB0aGUgcDlmZGV2IHJpbmdzIGhhdmUg
YmVlbiBpbml0aWFsaXplZC4KKwkgKi8KKwlVS19BU1NFUlQocDlmZGV2LT5yaW5ncyAhPSBOVUxM
KTsKKworCS8qIFdyaXRlIHZlcnNpb24uLi4gKi8KKwlyYyA9IHhzX3ByaW50Zih4YnQsIHhlbmRl
di0+bm9kZW5hbWUsICJ2ZXJzaW9uIiwgIiV1IiwgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBv
dXQ7CisKKwkvKiAuLi4gYW5kIG51bS1yaW5ncy4uLiAqLworCXJjID0geHNfcHJpbnRmKHhidCwg
eGVuZGV2LT5ub2RlbmFtZSwgIm51bS1yaW5ncyIsICIldSIsCisJCQlwOWZkZXYtPm5iX3Jpbmdz
KTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIG91dDsKKworCS8qIC4uLiBhbmQgZWFjaCByaW5nLiAq
LworCWZvciAoaSA9IDA7IGkgPCBwOWZkZXYtPm5iX3JpbmdzOyBpKyspIHsKKwkJcmMgPSB4c193
cml0ZV9yaW5nKHA5ZmRldiwgaSwgeGJ0KTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQ7CisJfQor
CitvdXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBwOWZyb250X3hiX2Zyb250X2Zp
bmkoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYsCisJCQkJICB4ZW5idXNfdHJhbnNhY3Rpb25f
dCB4YnQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcDlmZGV2LT5uYl9yaW5nczsg
aSsrKQorCQl4c19kZWxldGVfcmluZyhwOWZkZXYsIGksIHhidCk7Cit9CisKK3N0YXRpYyBpbnQg
YmVfd2F0Y2hfc3RhcnQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiwgY29uc3QgY2hhciAq
cGF0aCkKK3sKKwlzdHJ1Y3QgeGVuYnVzX3dhdGNoICp3YXRjaDsKKworCXdhdGNoID0geHNfd2F0
Y2hfcGF0aChYQlRfTklMLCBwYXRoKTsKKwlpZiAoUFRSSVNFUlIod2F0Y2gpKQorCQlyZXR1cm4g
UFRSMkVSUih3YXRjaCk7CisKKwl4ZW5kZXYtPm90aGVyZW5kX3dhdGNoID0gd2F0Y2g7CisKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBiZV93YXRjaF9zdG9wKHN0cnVjdCB4ZW5idXNfZGV2
aWNlICp4ZW5kZXYpCit7CisJcmV0dXJuIHhzX3Vud2F0Y2goWEJUX05JTCwgeGVuZGV2LT5vdGhl
cmVuZF93YXRjaCk7Cit9CisKKyNkZWZpbmUgV0FJVF9CRV9TVEFURV9DSEFOR0VfV0hJTEVfQ09O
RChzdGF0ZV9jb25kKSBcCisJZG8geyBcCisJCXJjID0geHNfcmVhZF9pbnRlZ2VyKFhCVF9OSUws
IGJlX3N0YXRlX3BhdGgsIFwKKwkJCShpbnQgKikgJmJlX3N0YXRlKTsgXAorCQlpZiAocmMpIFwK
KwkJCWdvdG8gb3V0OyBcCisJCXdoaWxlICghcmMgJiYgKHN0YXRlX2NvbmQpKSBcCisJCQlyYyA9
IHhlbmJ1c193YWl0X2Zvcl9zdGF0ZV9jaGFuZ2UoYmVfc3RhdGVfcGF0aCwgXAorCQkJCSZiZV9z
dGF0ZSwgeGVuZGV2LT5vdGhlcmVuZF93YXRjaCk7IFwKKwkJaWYgKHJjKSBcCisJCQlnb3RvIG91
dDsgXAorCX0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgcDlmcm9udF94Yl93YWl0X2JlX2Nvbm5l
Y3Qoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYpCit7CisJc3RydWN0IHhlbmJ1c19kZXZpY2Ug
KnhlbmRldiA9IHA5ZmRldi0+eGVuZGV2OworCWNoYXIgYmVfc3RhdGVfcGF0aFtzdHJsZW4oeGVu
ZGV2LT5vdGhlcmVuZCkgKyBzaXplb2YoIi9zdGF0ZSIpXTsKKwlYZW5idXNTdGF0ZSBiZV9zdGF0
ZTsKKwlpbnQgcmM7CisKKwlzcHJpbnRmKGJlX3N0YXRlX3BhdGgsICIlcy9zdGF0ZSIsIHhlbmRl
di0+b3RoZXJlbmQpOworCisJcmMgPSBiZV93YXRjaF9zdGFydCh4ZW5kZXYsIGJlX3N0YXRlX3Bh
dGgpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisKKwlXQUlUX0JFX1NUQVRFX0NIQU5HRV9XSElM
RV9DT05EKGJlX3N0YXRlIDwgWGVuYnVzU3RhdGVDb25uZWN0ZWQpOworCisJaWYgKGJlX3N0YXRl
ICE9IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKSB7CisJCXVrX3ByX2VycigiQmFja2VuZCBub3QgYXZh
aWxhYmxlLCBzdGF0ZT0lc1xuIiwKKwkJCQl4ZW5idXNfc3RhdGVfdG9fc3RyKGJlX3N0YXRlKSk7
CisJCWJlX3dhdGNoX3N0b3AoeGVuZGV2KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmMgPSB4ZW5i
dXNfc3dpdGNoX3N0YXRlKFhCVF9OSUwsIHhlbmRldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQpOwor
CWlmIChyYykKKwkJZ290byBvdXQ7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK2ludCBwOWZy
b250X3hiX2Nvbm5lY3Qoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYpCit7CisJc3RydWN0IHhl
bmJ1c19kZXZpY2UgKnhlbmRldjsKKwl4ZW5idXNfdHJhbnNhY3Rpb25fdCB4YnQ7CisJaW50IHJj
OworCisJVUtfQVNTRVJUKHA5ZmRldiAhPSBOVUxMKTsKKworCXhlbmRldiA9IHA5ZmRldi0+eGVu
ZGV2OworCVVLX0FTU0VSVCh4ZW5kZXYgIT0gTlVMTCk7CisKK2FnYWluOgorCXJjID0geHNfdHJh
bnNhY3Rpb25fc3RhcnQoJnhidCk7CisJaWYgKHJjKQorCQlnb3RvIGFib3J0X3RyYW5zYWN0aW9u
OworCisJcmMgPSBwOWZyb250X3hiX2Zyb250X2luaXQocDlmZGV2LCB4YnQpOworCWlmIChyYykK
KwkJZ290byBhYm9ydF90cmFuc2FjdGlvbjsKKworCXJjID0geGVuYnVzX3N3aXRjaF9zdGF0ZSh4
YnQsIHhlbmRldiwgWGVuYnVzU3RhdGVJbml0aWFsaXNlZCk7CisJaWYgKHJjKQorCQlnb3RvIGFi
b3J0X3RyYW5zYWN0aW9uOworCisJcmMgPSB4c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAwKTsKKwlp
ZiAocmMgPT0gLUVBR0FJTikKKwkJZ290byBhZ2FpbjsKKworCXJjID0gcDlmcm9udF94Yl93YWl0
X2JlX2Nvbm5lY3QocDlmZGV2KTsKKwlpZiAocmMpCisJCXA5ZnJvbnRfeGJfZnJvbnRfZmluaShw
OWZkZXYsIFhCVF9OSUwpOworCisJcmV0dXJuIHJjOworCithYm9ydF90cmFuc2FjdGlvbjoKKwl4
c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAxKTsKKwlyZXR1cm4gcmM7Cit9Ci0tIAoyLjIwLjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XrX-0005Cb-D7; Sat, 07 Sep 2019 10:22:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6XrW-0005CR-07
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:34 +0000
X-Inumbo-ID: 55842b9e-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.42]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 55842b9e-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:22:03 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=PbpcfNCafWCKcdcvRjfTEV/4iiSwyjAEUbkW/3RHy8M8rsEsjzyHqm2Rf6Eas67F2YRIZ+sZa/+w7aQ5i6vHuOSkTSBmM72A4K5PGRUuTv2EJ6INW3FxiRryIjNQ4Y834r4VRTjZ/pKFU2+bYx3GqvRhc5054zxKhtOFIwkPobtj9EHG9dYMEjuVX8EZuI03mkWdFX88b52b0uz24pSovFVMH5kjmpyHE1ccwV3yq3RsL1imlxs5H4HBfajJM9B7VSbWlfpH9xiPVdaDYBUfFDiZ231Brt0mVSp6OutBltaFjHVhKBuV/laxRrKXP9zC+b5W+CzpT+T1l7NvPMjaHA==
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=qdxx2OkEpIsC3LUP76Vk/V6CZ91Qxx4AJhbrvgMCLFA=;
 b=iORZzISq9DU23zc4VOOojrB2WnMEaVWSglev1ZoNQMuqp9nI0IK6o/UCwUMAlYVHp/aJDrZg9nzZQ1iAmQp9vO8iUjJzfPjsb3BQ09vkdvx5SqE/m2cABW7vUcs0xLj5U/23psT5vaQxSA9sLivcT8KFqHTyExBCTJkNTYmhFrI5H+iBf8Jib1wAJL75keCO/fQ9nq6j25afkFOoY95/7f6PmXCnSvYoYUMUrKx5+eqznHTayoKYELPkAfiiDIA5K1/OV/dy90kGzQhGXHsUYRZ4nLNB4lsJlHMHMs6dQW8sHdu5SARlHzABeavcyRI4khWk2Tp69CjLD+X2a+ik6g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:21:59 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:21:59 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 7/9] plat/xen/drivers/9p: Add connection
 callbacks
Thread-Index: AQHVZWYVZlAXVEmC5kql6HuHs1YpBw==
Date: Sat, 7 Sep 2019 10:21:59 +0000
Message-ID: <20190907102148.13371-8-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 2e262638-95ef-4131-0a56-08d7337d379b
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB49378DEF913C78A782B780A0A6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:4714;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: PhUuwCiF/TZUYVRkhrh+KQnSSTHLsh1J6tmujezyl8NGt736dVdKkcbmKzKjl8zTopqgbzv2FhhCG10FY4imUq08darG3tXfkk8cV38XNwCzpieW/7NAn2hUbGx5Q8WQhwbX0o+aWEKVpyjR+hzF7nJ/827UHHi5Xe9VJOq9VDuLEFxeftX1+Et0m+YkK1YcLMZFzxhLKdUwIZ0Ad+ZgoUA1GfFfytus65U/1vkGI9Wr87r5IgCplteXaXntrf809EWay6AHzx9eUOtkfig1VX07UMSFScw7NIFBUs7UGmaI23CQYuU9HnCfgkYKDfGMSOZmGA80wSOTirHvUbrdOWoonamuqTdoLzG4HPq1VcnVV9jpH5eucdRuUjZSTp/2sbyNMd8JjDp1jTjpRo0lwEOjtNrHqGni4tXt9DSPoSk=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 2e262638-95ef-4131-0a56-08d7337d379b
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:59.4469 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: LoE++QWTVeDphc2fhTMhxu5/Rux7uzen1Yxn0NLc/+IkakvpUjYLud57OzFF/KggLYF4vTqeB1tZLQdKn2yf2v3L3v12/sP+mYL53CJS3A+Ql2ublyrzWZwTnYbYSLZa
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 7/9] plat/xen/drivers/9p: Add
 connection callbacks
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBj
b25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uIGNhbGxiYWNrcyB0byB0aGUgeGVuIDlQCnRyYW5z
cG9ydCBkcml2ZXIuCgpTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwu
Y29tPgotLS0KIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jIHwgNTEgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrLS0tLS0KIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oIHwg
IDMgKystCiAyIGZpbGVzIGNoYW5nZWQsIDQ3IGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgYi9wbGF0L3hlbi9k
cml2ZXJzLzlwLzlwZnJvbnQuYwppbmRleCAxMjU5MWQwNy4uMWE4YjQ5YzUgMTAwNjQ0Ci0tLSBh
L3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCisrKyBiL3BsYXQveGVuL2RyaXZlcnMvOXAv
OXBmcm9udC5jCkBAIC0xOTAsMTUgKzE5MCw1NSBAQCBvdXQ6CiAJcmV0dXJuIHJjOwogfQogCi1z
dGF0aWMgaW50IHA5ZnJvbnRfY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2Vk
LAotCQkJICAgY29uc3QgY2hhciAqZGV2aWNlX2lkZW50aWZpZXIgX191bnVzZWQsCitzdGF0aWMg
aW50IHA5ZnJvbnRfY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2LAorCQkJICAgY29uc3Qg
Y2hhciAqZGV2aWNlX2lkZW50aWZpZXIsCiAJCQkgICBjb25zdCBjaGFyICptb3VudF9hcmdzIF9f
dW51c2VkKQogewotCXJldHVybiAwOworCXN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2ID0gTlVM
TDsKKwlpbnQgcmMgPSAwOworCWludCBmb3VuZCA9IDA7CisKKwl1a2FyY2hfc3Bpbl9sb2NrKCZw
OWZyb250X2RldmljZV9saXN0X2xvY2spOworCXVrX2xpc3RfZm9yX2VhY2hfZW50cnkocDlmZGV2
LCAmcDlmcm9udF9kZXZpY2VfbGlzdCwgX2xpc3QpIHsKKwkJaWYgKCFzdHJjbXAocDlmZGV2LT50
YWcsIGRldmljZV9pZGVudGlmaWVyKSkgeworCQkJaWYgKHA5ZmRldi0+cDlkZXYgIT0gTlVMTCkg
eworCQkJCXJjID0gLUVCVVNZOworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJZm91bmQgPSAxOwor
CQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSB7CisJCXJjID0gLUVOT0RFVjsKKwkJ
Z290byBvdXQ7CisJfQorCisJLyogVGhlIG1zaXplIGlzIGdpdmVuIGJ5IHRoZSBzaXplIG9mIHRo
ZSBmbGV4IHJpbmcuICovCisJcDlkZXYtPm1heF9tc2l6ZSA9IFhFTl9GTEVYX1JJTkdfU0laRShw
OWZkZXYtPnJpbmdfb3JkZXIpOworCisJcDlmZGV2LT5wOWRldiA9IHA5ZGV2OworCXA5ZGV2LT5w
cml2ID0gcDlmZGV2OworCXJjID0gMDsKKwlmb3VuZCA9IDE7CisKK291dDoKKwl1a2FyY2hfc3Bp
bl91bmxvY2soJnA5ZnJvbnRfZGV2aWNlX2xpc3RfbG9jayk7CisJcmV0dXJuIHJjOwogfQogCiBz
dGF0aWMgaW50IHA5ZnJvbnRfZGlzY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51
c2VkKQogeworCXN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2OworCisJVUtfQVNTRVJUKHA5ZGV2
KTsKKwlwOWZkZXYgPSBwOWRldi0+cHJpdjsKKworCXVrYXJjaF9zcGluX2xvY2soJnA5ZnJvbnRf
ZGV2aWNlX2xpc3RfbG9jayk7CisJcDlmZGV2LT5wOWRldiA9IE5VTEw7CisJdWthcmNoX3NwaW5f
dW5sb2NrKCZwOWZyb250X2RldmljZV9saXN0X2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKQEAg
LTIzNiw3ICsyNzYsNiBAQCBzdGF0aWMgaW50IHA5ZnJvbnRfYWRkX2RldihzdHJ1Y3QgeGVuYnVz
X2RldmljZSAqeGVuZGV2KQogewogCXN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2OwogCWludCBy
YzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcDlmZGV2ID0gdWtfY2FsbG9jKGEsIDEsIHNp
emVvZigqcDlmZGV2KSk7CiAJaWYgKCFwOWZkZXYpIHsKQEAgLTI3MSw5ICszMTAsOSBAQCBzdGF0
aWMgaW50IHA5ZnJvbnRfYWRkX2RldihzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2KQogCX0K
IAogCXJjID0gMDsKLQl1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUoJnA5ZnJvbnRfZGV2aWNlX2xp
c3RfbG9jaywgZmxhZ3MpOworCXVrYXJjaF9zcGluX2xvY2soJnA5ZnJvbnRfZGV2aWNlX2xpc3Rf
bG9jayk7CiAJdWtfbGlzdF9hZGQoJnA5ZmRldi0+X2xpc3QsICZwOWZyb250X2RldmljZV9saXN0
KTsKLQl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlmcm9udF9kZXZpY2VfbGlzdF9s
b2NrLCBmbGFncyk7CisJdWthcmNoX3NwaW5fdW5sb2NrKCZwOWZyb250X2RldmljZV9saXN0X2xv
Y2spOwogCiAJdWtfcHJfaW5mbyhEUklWRVJfTkFNRSI6IENvbm5lY3RlZCA5cGZyb250IGRldjog
dGFnPSVzLHJpbmdzPSVkLG9yZGVyPSVkXG4iLAogCQlwOWZkZXYtPnRhZywgcDlmZGV2LT5uYl9y
aW5ncywgcDlmZGV2LT5yaW5nX29yZGVyKTsKZGlmZiAtLWdpdCBhL3BsYXQveGVuL2RyaXZlcnMv
OXAvOXBmcm9udC5oIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKaW5kZXggOTdjOTg2
ZDguLjdjZWE2MWM1IDEwMDY0NAotLS0gYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaAor
KysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaApAQCAtNjQsNiArNjQsOCBAQCBzdHJ1
Y3QgcDlmcm9udF9kZXZfcmluZyB7CiBzdHJ1Y3QgcDlmcm9udF9kZXYgewogCS8qIFhlbmJ1cyBk
ZXZpY2UuICovCiAJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldjsKKwkvKiA5UCBBUEkgZGV2
aWNlLiAqLworCXN0cnVjdCB1a185cGRldiAqcDlkZXY7CiAJLyogRW50cnkgd2l0aGluIHRoZSA5
cGZyb250IGRldmljZSBsaXN0LiAqLwogCXN0cnVjdCB1a19saXN0X2hlYWQgX2xpc3Q7CiAJLyog
TnVtYmVyIG9mIG1heGltdW0gcmluZ3MsIHJlYWQgZnJvbSB4ZW5zdG9yZS4gKi8KQEAgLTcyLDcg
Kzc0LDYgQEAgc3RydWN0IHA5ZnJvbnRfZGV2IHsKIAlpbnQgbWF4X3JpbmdfcGFnZV9vcmRlcjsK
IAkvKiBNb3VudCB0YWcgZm9yIHRoaXMgZGV2aWNlLCByZWFkIGZyb20geGVuc3RvcmUuICovCiAJ
Y2hhciAqdGFnOwotCiAJLyogTnVtYmVyIG9mIHJpbmdzIHRvIHVzZS4gKi8KIAlpbnQgbmJfcmlu
Z3M7CiAJLyogUmluZyBwYWdlIG9yZGVyLiAqLwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xrc-0005DL-FJ; Sat, 07 Sep 2019 10:22:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6Xrb-0005DC-1S
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:39 +0000
X-Inumbo-ID: 55ba9c4c-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.80]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 55ba9c4c-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:22:03 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=lRDclIbQVDtCE/JKqUj6ic0iSCLHb1m6RPp3/fu3LNP051OcZFDOZc4XNDrLXrHckqyJb7CvPQhk6HpGxo6dHmZmMMXUhjw8Iyuh3JKhRXA/HXF3/+B21Tjjy3xThtOcAJat/YLKpDx68UOT/HojV/8mH/kifRm99TGRMt+hKlxHf6UscGfvBqKrmUhkQaVYsI1fnOInbkhYDrDefEFtw1V5AYum63pRERtLqldtpTIbAMNmFefRMmXXJxtIkNJyeb3jIZ05tJb87Jbxq/MfoQ2rPZNaYzUAkCgW/lyxughHVWU+GsX03GyEb6fQEqkaGmghl+8UdfDz603r6w/ONg==
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=mWg8EriGBem2jCPFoOdNSNt4aUnB+5Cc+1gUNa5mT28=;
 b=TEi/XiZMY0Y/SMT3yj4kJTYM21XR978IWi7dkthxZOhCSnnqqKsV3R3hLyeMJG8IC7DeQLHN+j/2puQj5hm6P+0ggLqEyEAq4xhfRn0BKoPOJ6/S8EO2D06pEtAYCpWto12dypGWMx9kAb93+VZAfWHXu81PJ5S8h6fuAJEoMHNK4ySqzmP7wezL+lIhyF/F5g5CiKh+bUS5Js90MiAwsVPHAmZLwwgYm1WA/7KQXnLl9Ehx39VBpYej5yMk9rKJzWA0B6b20Accw6EAUnXEHEPE4z+GLP9I415fIpOmq9txQtpFKtYydyJhWWIjVMo2M8o3i8stqSg8+dUX5bf+aA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:22:00 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:22:00 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 8/9] plat/xen/drivers/9p: Implement request and
 recv
Thread-Index: AQHVZWYVlsaRvMV7CE29b19VPrntoQ==
Date: Sat, 7 Sep 2019 10:21:59 +0000
Message-ID: <20190907102148.13371-9-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 0bed14bc-7b52-4874-5baf-08d7337d37e8
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB49379E90CAC6A2B468EBDB87A6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6790;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: iNN9/Z4WOI93Trj0lKRlhHw6Vprk8XNHGDXQSxEP/xRh/T/MbWlt1awtPU+e5IAh6aO+0oanoEZn1kCvsJXreM7B+bcozcwh4z7j7sfTuYucCwXOEqFtd9NYgamgTb1bxCE3hi9mcdvcHg1yf4ktFZZbg57f5qSR7V05aePWijOBN7AhmS5B52B4Vx9yNerKKGbEdM3T/UymrIcIH6M6aBcu2+7bRX3372ZzHMkju7x11l2Pve2ft/Sj5PwadlQ+PVM3C6y+eFfUB53VSKawsDZAQvpam2lxTTSjRv6zk+9fNavdSOTU+BOwNl2v8BHBUfKh/nreUR/58+DTaoN/+zuoxVekDwsyUxXV3J8fkj0VjS47+lJHG+4FofHYzVX/Z9UuaMouJn6159ajVC1hcon4ilTr+dETKU07taSZ8m8=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 0bed14bc-7b52-4874-5baf-08d7337d37e8
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:21:59.9277 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ib/gfnDjVekuOua3xzM3vZNPX4EkGqMgUjdLMNGGo85IQTJX7X6ToE2iHrRflBDGTSiM1xm4vHSKUW1FRo3TL/6v7nmqg/snKCyR+ooAcDCy4gs/YnMUyKxihCLMuzso
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 8/9] plat/xen/drivers/9p: Implement
 request and recv
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggaW1wbGVt
ZW50IHJlcXVlc3QgYW5kIHJlY2VpdmUgZnVuY3Rpb25zIGZvciB0aGUgeGVuIDlQCnRyYW5zcG9y
dCBkcml2ZXIuCgpTaWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29t
PgotLS0KIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jIHwgMTM4ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCAxMzQgaW5zZXJ0aW9ucygrKSwg
NCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQu
YyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCmluZGV4IDFhOGI0OWM1Li5hNTMyMTg5
OCAxMDA2NDQKLS0tIGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKKysrIGIvcGxhdC94
ZW4vZHJpdmVycy85cC85cGZyb250LmMKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx1ay9h
bGxvYy5oPgogI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgogI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMu
aD4KKyNpbmNsdWRlIDx1ay9lcnJwdHIuaD4KICNpbmNsdWRlIDx1ay9saXN0Lmg+CiAjaW5jbHVk
ZSA8dWsvOXBkZXYuaD4KICNpbmNsdWRlIDx1ay85cHJlcS5oPgpAQCAtNTQsMTAgKzU1LDk2IEBA
IHN0YXRpYyBzdHJ1Y3QgdWtfYWxsb2MgKmE7CiBzdGF0aWMgVUtfTElTVF9IRUFEKHA5ZnJvbnRf
ZGV2aWNlX2xpc3QpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwOWZyb250X2RldmljZV9saXN0
X2xvY2spOwogCi1zdGF0aWMgdm9pZCBwOWZyb250X2hhbmRsZXIoZXZ0Y2huX3BvcnRfdCBldnRj
aG4gX191bnVzZWQsCitzdHJ1Y3QgcDlmcm9udF9oZWFkZXIgeworCXVpbnQzMl90IHNpemU7CisJ
dWludDhfdCB0eXBlOworCXVpbnQxNl90IHRhZzsKK30gX19wYWNrZWQ7CisKK3N0YXRpYyB2b2lk
IHA5ZnJvbnRfcmVjdihzdHJ1Y3QgcDlmcm9udF9kZXZfcmluZyAqcmluZykKK3sKKwlzdHJ1Y3Qg
cDlmcm9udF9kZXYgKnA5ZmRldiA9IHJpbmctPmRldjsKKwlldnRjaG5fcG9ydF90IGV2dGNobiA9
IHJpbmctPmV2dGNobjsKKwlSSU5HX0lEWCBjb25zLCBwcm9kLCBtYXNrZWRfY29ucywgbWFza2Vk
X3Byb2Q7CisJaW50IHJpbmdfc2l6ZSwgcmM7CisJc3RydWN0IHA5ZnJvbnRfaGVhZGVyIGhkcjsK
KwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKKwl1aW50MzJfdCBidWZfY250LCB6Y19idWZfY250Owor
CisJcmluZ19zaXplID0gWEVOX0ZMRVhfUklOR19TSVpFKHA5ZmRldi0+cmluZ19vcmRlcik7CisK
Kwl3aGlsZSAoMSkgeworCQljb25zID0gcmluZy0+aW50Zi0+aW5fY29uczsKKwkJcHJvZCA9IHJp
bmctPmludGYtPmluX3Byb2Q7CisJCXhlbl9ybWIoKTsKKworCQlpZiAoeGVuXzlwZnNfcXVldWVk
KHByb2QsIGNvbnMsIHJpbmdfc2l6ZSkgPCBzaXplb2YoaGRyKSkgeworCQkJbm90aWZ5X3JlbW90
ZV92aWFfZXZ0Y2huKGV2dGNobik7CisJCQlyZXR1cm47CisJCX0KKworCQltYXNrZWRfcHJvZCA9
IHhlbl85cGZzX21hc2socHJvZCwgcmluZ19zaXplKTsKKwkJbWFza2VkX2NvbnMgPSB4ZW5fOXBm
c19tYXNrKGNvbnMsIHJpbmdfc2l6ZSk7CisKKwkJeGVuXzlwZnNfcmVhZF9wYWNrZXQoJmhkciwg
cmluZy0+ZGF0YS5pbiwgc2l6ZW9mKGhkciksCisJCQkJbWFza2VkX3Byb2QsICZtYXNrZWRfY29u
cywgcmluZ19zaXplKTsKKworCQlyZXEgPSB1a185cGRldl9yZXFfbG9va3VwKHA5ZmRldi0+cDlk
ZXYsIGhkci50YWcpOworCQlpZiAoUFRSSVNFUlIocmVxKSkgeworCQkJdWtfcHJfd2FybigiRm91
bmQgaW52YWxpZCB0YWc9JXVcbiIsIGhkci50YWcpOworCQkJY29ucyArPSBoZHIuc2l6ZTsKKwkJ
CXhlbl9tYigpOworCQkJcmluZy0+aW50Zi0+aW5fY29ucyA9IGNvbnM7CisJCQljb250aW51ZTsK
KwkJfQorCisJCW1hc2tlZF9jb25zID0geGVuXzlwZnNfbWFzayhjb25zLCByaW5nX3NpemUpOwor
CisJCS8qCisJCSAqIENvbXB1dGUgYW1vdW50IG9mIGRhdGEgdG8gcmVhZCBpbnRvIHJlcXVlc3Qg
YnVmZmVyIGFuZCBpbnRvCisJCSAqIHplcm8tY29weSBidWZmZXIuCisJCSAqLworCQlidWZfY250
ID0gaGRyLnNpemU7CisJCWlmIChoZHIudHlwZSAhPSBVS185UF9SRVJST1IgJiYgcmVxLT5yZWN2
LnpjX2J1ZikKKwkJCWJ1Zl9jbnQgPSBNSU4oYnVmX2NudCwgcmVxLT5yZWN2LnpjX29mZnNldCk7
CisJCXpjX2J1Zl9jbnQgPSBoZHIuc2l6ZSAtIGJ1Zl9jbnQ7CisKKwkJeGVuXzlwZnNfcmVhZF9w
YWNrZXQocmVxLT5yZWN2LmJ1ZiwgcmluZy0+ZGF0YS5pbiwgYnVmX2NudCwKKwkJCQltYXNrZWRf
cHJvZCwgJm1hc2tlZF9jb25zLCByaW5nX3NpemUpOworCQl4ZW5fOXBmc19yZWFkX3BhY2tldChy
ZXEtPnJlY3YuemNfYnVmLCByaW5nLT5kYXRhLmluLAorCQkJCXpjX2J1Zl9jbnQsIG1hc2tlZF9w
cm9kLCAmbWFza2VkX2NvbnMsCisJCQkJcmluZ19zaXplKTsKKwkJY29ucyArPSBoZHIuc2l6ZTsK
KwkJeGVuX21iKCk7CisJCXJpbmctPmludGYtPmluX2NvbnMgPSBjb25zOworCisJCXJjID0gdWtf
OXByZXFfcmVjZWl2ZV9jYihyZXEsIGhkci5zaXplKTsKKwkJaWYgKHJjKQorCQkJdWtfcHJfd2Fy
bigiQ291bGQgbm90IHJlY2VpdmUgcmVwbHk6ICVkXG4iLCByYyk7CisKKwkJLyogUmVsZWFzZSBy
ZWZlcmVuY2UgaGVsZCBieSB1a185cGRldl9yZXFfbG9va3VwKCkuICovCisJCXVrXzlwcmVxX3B1
dChyZXEpOworCX0KK30KKworc3RhdGljIHZvaWQgcDlmcm9udF9oYW5kbGVyKGV2dGNobl9wb3J0
X3QgZXZ0Y2huLAogCQkJICAgIHN0cnVjdCBfX3JlZ3MgKnJlZ3MgX191bnVzZWQsCi0JCQkgICAg
dm9pZCAqYXJnIF9fdW51c2VkKQorCQkJICAgIHZvaWQgKmFyZykKIHsKKwlzdHJ1Y3QgcDlmcm9u
dF9kZXZfcmluZyAqcmluZyA9IGFyZzsKKworCVVLX0FTU0VSVChyaW5nKTsKKwlVS19BU1NFUlQo
cmluZy0+ZXZ0Y2huID09IGV2dGNobik7CisKKwkvKgorCSAqIEEgbmV3IGludGVycnVwdCBtZWFu
cyB0aGF0IHRoZXJlIGlzIGEgcmVzcG9uc2UgdG8gYmUgcmVjZWl2ZWQsIHdoaWNoCisJICogbWVh
bnMgdGhhdCBhIHByZXZpb3VzbHkgc2VudCByZXF1ZXN0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0
aGUgb3V0CisJICogcmluZy4gVGh1cywgdGhlIEFQSSBjYW4gYmUgbm90aWZpZWQgb2YgdGhlIHBv
c3NpYmlsaXR5IG9mIHJldHJ5aW5nIHRvCisJICogc2VuZCByZXF1ZXN0cyBibG9ja2VkIG9uIEVO
T1NQQyBlcnJvcnMuCisJICovCisJaWYgKHJpbmctPmRldi0+cDlkZXYpCisJCXVrXzlwZGV2X3ht
aXRfbm90aWZ5KHJpbmctPmRldi0+cDlkZXYpOworCXA5ZnJvbnRfcmVjdihyaW5nKTsKIH0KIAog
c3RhdGljIHZvaWQgcDlmcm9udF9mcmVlX2Rldl9yaW5nKHN0cnVjdCBwOWZyb250X2RldiAqcDlm
ZGV2LCBpbnQgaWR4KQpAQCAtMjQyLDkgKzMyOSw1MiBAQCBzdGF0aWMgaW50IHA5ZnJvbnRfZGlz
Y29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2VkKQogCXJldHVybiAwOwogfQog
Ci1zdGF0aWMgaW50IHA5ZnJvbnRfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51
c2VkLAotCQkJICAgc3RydWN0IHVrXzlwcmVxICpyZXEgX191bnVzZWQpCitzdGF0aWMgaW50IHA5
ZnJvbnRfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2LAorCQkJICAgc3RydWN0IHVrXzlw
cmVxICpyZXEpCiB7CisJc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXY7CisJc3RydWN0IHA5ZnJv
bnRfZGV2X3JpbmcgKnJpbmc7CisJaW50IHJpbmdfaWR4LCByaW5nX3NpemU7CisJUklOR19JRFgg
bWFza2VkX3Byb2QsIG1hc2tlZF9jb25zLCBwcm9kLCBjb25zOworCisJVUtfQVNTRVJUKHA5ZGV2
KTsKKwlVS19BU1NFUlQocmVxKTsKKwlVS19BU1NFUlQocmVxLT5zdGF0ZSA9PSBVS185UFJFUV9S
RUFEWSk7CisKKwlwOWZkZXYgPSBwOWRldi0+cHJpdjsKKworCXJpbmdfc2l6ZSA9IFhFTl9GTEVY
X1JJTkdfU0laRShwOWZkZXYtPnJpbmdfb3JkZXIpOworCisJcmluZ19pZHggPSByZXEtPnRhZyAl
IHA5ZmRldi0+bmJfcmluZ3M7CisJcmluZyA9ICZwOWZkZXYtPnJpbmdzW3JpbmdfaWR4XTsKKwor
CS8qIFByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHdyaXRlcyB0byB0aGUgb3V0IHJpbmcuICov
CisJdWthcmNoX3NwaW5fbG9jaygmcmluZy0+c3BpbmxvY2spOworCWNvbnMgPSByaW5nLT5pbnRm
LT5vdXRfY29uczsKKwlwcm9kID0gcmluZy0+aW50Zi0+b3V0X3Byb2Q7CisJeGVuX21iKCk7CisK
KwltYXNrZWRfcHJvZCA9IHhlbl85cGZzX21hc2socHJvZCwgcmluZ19zaXplKTsKKwltYXNrZWRf
Y29ucyA9IHhlbl85cGZzX21hc2soY29ucywgcmluZ19zaXplKTsKKworCWlmIChyaW5nX3NpemUg
LSB4ZW5fOXBmc19xdWV1ZWQocHJvZCwgY29ucywgcmluZ19zaXplKSA8CisJCQlyZXEtPnhtaXQu
c2l6ZSArIHJlcS0+eG1pdC56Y19zaXplKSB7CisJCXVrYXJjaF9zcGluX3VubG9jaygmcmluZy0+
c3BpbmxvY2spOworCQlyZXR1cm4gLUVOT1NQQzsKKwl9CisKKwl4ZW5fOXBmc193cml0ZV9wYWNr
ZXQocmluZy0+ZGF0YS5vdXQsIHJlcS0+eG1pdC5idWYsIHJlcS0+eG1pdC5zaXplLAorCQkJICAg
ICAgJm1hc2tlZF9wcm9kLCBtYXNrZWRfY29ucywgcmluZ19zaXplKTsKKwl4ZW5fOXBmc193cml0
ZV9wYWNrZXQocmluZy0+ZGF0YS5vdXQsIHJlcS0+eG1pdC56Y19idWYsIHJlcS0+eG1pdC56Y19z
aXplLAorCQkJICAgICAgJm1hc2tlZF9wcm9kLCBtYXNrZWRfY29ucywgcmluZ19zaXplKTsKKwly
ZXEtPnN0YXRlID0gVUtfOVBSRVFfU0VOVDsKKwl4ZW5fd21iKCk7CisJcHJvZCArPSByZXEtPnht
aXQuc2l6ZSArIHJlcS0+eG1pdC56Y19zaXplOworCXJpbmctPmludGYtPm91dF9wcm9kID0gcHJv
ZDsKKworCXVrYXJjaF9zcGluX3VubG9jaygmcmluZy0+c3BpbmxvY2spOworCW5vdGlmeV9yZW1v
dGVfdmlhX2V2dGNobihyaW5nLT5ldnRjaG4pOworCiAJcmV0dXJuIDA7CiB9CiAKLS0gCjIuMjAu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:22:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:22:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xrh-0005E9-Gx; Sat, 07 Sep 2019 10:22:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gipO=XC=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i6Xrg-0005Dw-1V
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:22:44 +0000
X-Inumbo-ID: 55f4a1d0-d159-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.42]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 55f4a1d0-d159-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:22:03 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=dy6ccuq3FY+zfH2VYb2nxBoh5hKK9XfsyKIGgj/c6cd04PqI88uFAlqfKYyjcAXQ9m714lB6s32lMOvSHJ8XrhIQLDFC2N8LOTqaQdPt6/i6lscxH4Xf0zwfhxN0XLMqvfE6FByBpfZVu55Ng3e3lNGSRKaFFmflaDsME6UAv5dXV1ds/If6/OFZlw1qu2pxfnNNhaI4gRqtuRMmlRquqIUMo5NK4RJHNDh1tiahSXkhC1iXcFFAtZXJPS9TaEMfVIwnifaMfh46ck27xfLx2EpA+Ri7wLWNYa98dgF6bAQoM3Ps+96fA5zJ5Qpta2zvC3uVy+TzjgzZH7iCrOIrIw==
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=I35OTyAb3BWfiMVLkZSYJIZq9Fw4WKb9DU/R7cp++/A=;
 b=Ow5FHq/G3Jvu4sF9qzAgWlAvlnNjcndleYmc2ISECoh82f206HJ5IiJIbjgkgNlkZhhsDlGUVmmFkpLhOQG+WgFIQ1Hs18tKaZI0QLbhYKBjD5d78gYrR1XkzW14llUdmoxVzQMzuKOCYxAkPCDPXuaqKNuSsSgzRBjXQzIIlsRygpTZjmXS5ocAvlmNblN5oY7pexQcvxwar4Pw5ZvBD4UMOnFkHjIZELvWaKirQx1l3SZPU9ZtdaSuY7tcvzPt5AA/t9O6s+pM+R5WRa6SbPwVn1ovPXA+65c+ZabhbddZIJxyYgBFV3XHwYcFBgLbbfIjq7YUS8i6cy3+9E2mpQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4937.eurprd01.prod.exchangelabs.com (20.177.208.74) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2178.16; Sat, 7 Sep
 2019 10:22:00 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Sat, 7 Sep 2019
 10:22:00 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 9/9] plat/xen/drivers/9p: Add bottom-half handler
Thread-Index: AQHVZWYVsZUhaqVofEuchbkSsWgVag==
Date: Sat, 7 Sep 2019 10:22:00 +0000
Message-ID: <20190907102148.13371-10-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0901CA0101.eurprd09.prod.outlook.com
 (2603:10a6:800:7e::27) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:8dce:eab8:1dee:647a]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 755fbe76-0580-468a-a88e-08d7337d3837
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4937; 
x-ms-traffictypediagnostic: PR1PR01MB4937:
x-microsoft-antispam-prvs: <PR1PR01MB493724824A2A6A601C475A2DA6B50@PR1PR01MB4937.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:110;
x-forefront-prvs: 0153A8321A
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39860400002)(366004)(136003)(396003)(346002)(376002)(199004)(189003)(14444005)(66476007)(25786009)(52116002)(2906002)(54906003)(14454004)(76176011)(305945005)(99286004)(478600001)(86362001)(71190400001)(2501003)(2351001)(7736002)(8936002)(50226002)(256004)(316002)(71200400001)(786003)(6436002)(102836004)(46003)(186003)(446003)(476003)(64756008)(486006)(11346002)(81166006)(6512007)(6506007)(386003)(53936002)(2616005)(4326008)(8676002)(6916009)(5640700003)(66556008)(6486002)(66946007)(6116002)(45776006)(5660300002)(1076003)(66446008)(81156014);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4937;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 5PL594ShLPN2a0zQGbKM3QwIdklMx3XoplOAFpUpvZAq9bO8z/Z5k2rpnz/Hm0RQP7wXwKiOTcwVJcCzT2LU0w4T6pMU5IP7R1aU+7FiRhVoaQ7Ugc3E7iHyV+P8EnVquHTDdVBb6OnEodopx+skSG+Utu3JJxg/F1qHELLX3L4C6bTjNKjI2jazWuYDwxV49cIR0in5ipbjjL/scW4QH8eYiBXYUe6DPLkzhJ+fd2KfdH+9LYLwenzCC408AGVlKkOs2dcWh6R1I4cUwmhL51wiIuFRzBl6WuSRItNv3+HlK5rlRhbtD6uWduoP2mnHhP3Bz5XYh/nomheZKl9nphXRsCzc5DWjkv7MtxxyAJIuJSYgdY0DtG5sqfMHuXKfWlJqTm7vLbkn265HjqJNdewkBMmSgZwo3UVNbnt3V6g=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 755fbe76-0580-468a-a88e-08d7337d3837
X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Sep 2019 10:22:00.4444 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ahAhTncpYx8Y+Nkzl1nmC8UyvEZ0Ss0IVF8yqbYZai6sEj8rqxiltFR5V1/sR+S0RszLwkS0gF9XQeCWOB3qRglTm6NCFvuMSJs3mjMH8LE6/gLSfJXUxHRot0l3+lXX
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4937
Subject: [Minios-devel] [UNIKRAFT PATCH 9/9] plat/xen/drivers/9p: Add
 bottom-half handler
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KClRoaXMgcGF0Y2ggYWRkcyBi
b3R0b20taGFsZiBoYW5kbGluZyB0byBYZW4gOVAgYnkgY3JlYXRpbmcgb25lIHRocmVhZApwZXIg
cmluZyB3aGljaCB3YWl0cyBvbiBkYXRhIHRvIGFycml2ZS4KClNpZ25lZC1vZmYtYnk6IENyaXN0
aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Ci0tLQogcGxhdC94ZW4vZHJpdmVycy85cC85cGZy
b250LmMgfCA1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogcGxhdC94ZW4v
ZHJpdmVycy85cC85cGZyb250LmggfCAxMyArKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNjUg
aW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3BsYXQveGVuL2RyaXZl
cnMvOXAvOXBmcm9udC5jIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKaW5kZXggYTUz
MjE4OTguLmRhNTVmZDYxIDEwMDY0NAotLS0gYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQu
YworKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYwpAQCAtMzMsMTIgKzMzLDE2IEBA
CiAgKi8KIAogI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1
ZGUgPHVrL2NvbmZpZy5oPgogI2luY2x1ZGUgPHVrL2FsbG9jLmg+CiAjaW5jbHVkZSA8dWsvYXNz
ZXJ0Lmg+CiAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgogI2luY2x1ZGUgPHVrL2VycnB0ci5o
PgogI2luY2x1ZGUgPHVrL2xpc3QuaD4KKyNpZiBDT05GSUdfTElCVUtTQ0hFRAorI2luY2x1ZGUg
PHVrL3RocmVhZC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8dWsvOXBkZXYuaD4KICNpbmNsdWRlIDx1
ay85cHJlcS5oPgogI2luY2x1ZGUgPHVrLzlwZGV2X3RyYW5zLmg+CkBAIC02MSw2ICs2NSwyMyBA
QCBzdHJ1Y3QgcDlmcm9udF9oZWFkZXIgewogCXVpbnQxNl90IHRhZzsKIH0gX19wYWNrZWQ7CiAK
K3N0YXRpYyB2b2lkIHA5ZnJvbnRfcmVjdihzdHJ1Y3QgcDlmcm9udF9kZXZfcmluZyAqcmluZyk7
CisKKyNpZiBDT05GSUdfTElCVUtTQ0hFRAorCitzdGF0aWMgdm9pZCBwOWZyb250X2JoX2hhbmRs
ZXIodm9pZCAqYXJnKQoreworCXN0cnVjdCBwOWZyb250X2Rldl9yaW5nICpyaW5nID0gYXJnOwor
CisJd2hpbGUgKDEpIHsKKwkJdWtfd2FpdHFfd2FpdF9ldmVudCgmcmluZy0+Ymhfd3EsCisJCQkJ
VUtfUkVBRF9PTkNFKHJpbmctPmRhdGFfYXZhaWwpKTsKKwkJcDlmcm9udF9yZWN2KHJpbmcpOwor
CX0KK30KKworI2VuZGlmCisKIHN0YXRpYyB2b2lkIHA5ZnJvbnRfcmVjdihzdHJ1Y3QgcDlmcm9u
dF9kZXZfcmluZyAqcmluZykKIHsKIAlzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldiA9IHJpbmct
PmRldjsKQEAgLTc5LDYgKzEwMCw5IEBAIHN0YXRpYyB2b2lkIHA5ZnJvbnRfcmVjdihzdHJ1Y3Qg
cDlmcm9udF9kZXZfcmluZyAqcmluZykKIAkJeGVuX3JtYigpOwogCiAJCWlmICh4ZW5fOXBmc19x
dWV1ZWQocHJvZCwgY29ucywgcmluZ19zaXplKSA8IHNpemVvZihoZHIpKSB7CisjaWYgQ09ORklH
X0xJQlVLU0NIRUQKKwkJCVVLX1dSSVRFX09OQ0UocmluZy0+ZGF0YV9hdmFpbCwgZmFsc2UpOwor
I2VuZGlmCiAJCQlub3RpZnlfcmVtb3RlX3ZpYV9ldnRjaG4oZXZ0Y2huKTsKIAkJCXJldHVybjsK
IAkJfQpAQCAtMTQ0LDcgKzE2OCwxMiBAQCBzdGF0aWMgdm9pZCBwOWZyb250X2hhbmRsZXIoZXZ0
Y2huX3BvcnRfdCBldnRjaG4sCiAJICovCiAJaWYgKHJpbmctPmRldi0+cDlkZXYpCiAJCXVrXzlw
ZGV2X3htaXRfbm90aWZ5KHJpbmctPmRldi0+cDlkZXYpOworI2lmIENPTkZJR19MSUJVS1NDSEVE
CisJVUtfV1JJVEVfT05DRShyaW5nLT5kYXRhX2F2YWlsLCB0cnVlKTsKKwl1a193YWl0cV93YWtl
X3VwKCZyaW5nLT5iaF93cSk7CisjZWxzZQogCXA5ZnJvbnRfcmVjdihyaW5nKTsKKyNlbmRpZgog
fQogCiBzdGF0aWMgdm9pZCBwOWZyb250X2ZyZWVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2
ICpwOWZkZXYsIGludCBpZHgpCkBAIC0xNTQsNiArMTgzLDkgQEAgc3RhdGljIHZvaWQgcDlmcm9u
dF9mcmVlX2Rldl9yaW5nKHN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2LCBpbnQgaWR4KQogCiAJ
VUtfQVNTRVJUKHJpbmctPmluaXRpYWxpemVkKTsKIAorCWlmIChyaW5nLT5iaF90aHJlYWRfbmFt
ZSkKKwkJZnJlZShyaW5nLT5iaF90aHJlYWRfbmFtZSk7CisJdWtfdGhyZWFkX2tpbGwocmluZy0+
YmhfdGhyZWFkKTsKIAl1bmJpbmRfZXZ0Y2huKHJpbmctPmV2dGNobik7CiAJZm9yIChpID0gMDsg
aSA8ICgxIDw8IHA5ZmRldi0+cmluZ19vcmRlcik7IGkrKykKIAkJZ250dGFiX2VuZF9hY2Nlc3Mo
cmluZy0+aW50Zi0+cmVmW2ldKTsKQEAgLTIyNiwxMiArMjU4LDI3IEBAIHN0YXRpYyBpbnQgcDlm
cm9udF9hbGxvY2F0ZV9kZXZfcmluZyhzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldiwgaW50IGlk
eCkKIAlyaW5nLT5kYXRhLmluID0gZGF0YV9ieXRlczsKIAlyaW5nLT5kYXRhLm91dCA9IGRhdGFf
Ynl0ZXMgKyBYRU5fRkxFWF9SSU5HX1NJWkUocDlmZGV2LT5yaW5nX29yZGVyKTsKIAorI2lmIENP
TkZJR19MSUJVS1NDSEVECisJLyogQWxsb2NhdGUgYm90dG9tLWhhbGYgdGhyZWFkLiAqLworCXJp
bmctPmRhdGFfYXZhaWwgPSBmYWxzZTsKKwl1a193YWl0cV9pbml0KCZyaW5nLT5iaF93cSk7CisK
KwlyYyA9IGFzcHJpbnRmKCZyaW5nLT5iaF90aHJlYWRfbmFtZSwgRFJJVkVSX05BTUUiLXJlY3Yt
JXMtJXUiLAorCQkJcDlmZGV2LT50YWcsIGlkeCk7CisJcmluZy0+YmhfdGhyZWFkID0gdWtfdGhy
ZWFkX2NyZWF0ZShyaW5nLT5iaF90aHJlYWRfbmFtZSwKKwkJCXA5ZnJvbnRfYmhfaGFuZGxlciwg
cmluZyk7CisJaWYgKCFyaW5nLT5iaF90aHJlYWQpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3Rv
IG91dF9mcmVlX2dyYW50czsKKwl9CisjZW5kaWYKKwogCS8qIEFsbG9jYXRlIGV2ZW50IGNoYW5u
ZWwuICovCiAJcmMgPSBldnRjaG5fYWxsb2NfdW5ib3VuZCh4ZW5kZXYtPm90aGVyZW5kX2lkLCBw
OWZyb250X2hhbmRsZXIsIHJpbmcsCiAJCQkJJnJpbmctPmV2dGNobik7CiAJaWYgKHJjKSB7CiAJ
CXVrX3ByX2VycihEUklWRVJfTkFNRSI6IEVycm9yIGNyZWF0aW5nIGV2dCBjaGFubmVsOiAlZFxu
IiwgcmMpOwotCQlnb3RvIG91dF9mcmVlX2dyYW50czsKKwkJZ290byBvdXRfZnJlZV90aHJlYWQ7
CiAJfQogCiAJdW5tYXNrX2V2dGNobihyaW5nLT5ldnRjaG4pOwpAQCAtMjQxLDYgKzI4OCwxMCBA
QCBzdGF0aWMgaW50IHA5ZnJvbnRfYWxsb2NhdGVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2
ICpwOWZkZXYsIGludCBpZHgpCiAKIAlyZXR1cm4gMDsKIAorb3V0X2ZyZWVfdGhyZWFkOgorCWlm
IChyaW5nLT5iaF90aHJlYWRfbmFtZSkKKwkJZnJlZShyaW5nLT5iaF90aHJlYWRfbmFtZSk7CisJ
dWtfdGhyZWFkX2tpbGwocmluZy0+YmhfdGhyZWFkKTsKIG91dF9mcmVlX2dyYW50czoKIAlmb3Ig
KGkgPSAwOyBpIDwgKDEgPDwgcDlmZGV2LT5yaW5nX29yZGVyKTsgaSsrKQogCQlnbnR0YWJfZW5k
X2FjY2VzcyhyaW5nLT5pbnRmLT5yZWZbaV0pOwpkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVy
cy85cC85cGZyb250LmggYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaAppbmRleCA3Y2Vh
NjFjNS4uMGJiYzdmNDQgMTAwNjQ0Ci0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5o
CisrKyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oCkBAIC00MCw2ICs0MCw5IEBACiAj
aW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgogI2luY2x1ZGUgPHVrL2xpc3QuaD4KICNpbmNsdWRl
IDx1ay9wbGF0L3NwaW5sb2NrLmg+CisjaWYgQ09ORklHX0xJQlVLU0NIRUQKKyNpbmNsdWRlIDx1
ay9zY2hlZC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8eGVuL2lvLzlwZnMuaD4KICNpbmNsdWRlIDxj
b21tb24vZXZlbnRzLmg+CiAjaW5jbHVkZSA8Y29tbW9uL2dudHRhYi5oPgpAQCAtNTksNiArNjIs
MTYgQEAgc3RydWN0IHA5ZnJvbnRfZGV2X3JpbmcgewogCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CiAJ
LyogVHJhY2tzIGlmIHRoaXMgcmluZyB3YXMgaW5pdGlhbGl6ZWQuICovCiAJYm9vbCBpbml0aWFs
aXplZDsKKyNpZiBDT05GSUdfTElCVUtTQ0hFRAorCS8qIFRyYWNrcyBpZiB0aGVyZSBpcyBhbnkg
ZGF0YSBhdmFpbGFibGUgb24gdGhpcyByaW5nLiAqLworCWJvb2wgZGF0YV9hdmFpbDsKKwkvKiBC
b3R0b20taGFsZiB0aHJlYWQuICovCisJc3RydWN0IHVrX3RocmVhZCAqYmhfdGhyZWFkOworCS8q
IEJvdHRvbS1oYWxmIHRocmVhZCBuYW1lLiAqLworCWNoYXIgKmJoX3RocmVhZF9uYW1lOworCS8q
IFdhaXQtcXVldWUgb24gd2hpY2ggdGhlIHRocmVhZCB3YWl0cyBmb3IgYXZhaWxhYmxlIGRhdGEu
ICovCisJc3RydWN0IHVrX3dhaXRxIGJoX3dxOworI2VuZGlmCiB9OwogCiBzdHJ1Y3QgcDlmcm9u
dF9kZXYgewotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:27:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:27:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XwD-0005Ku-UY; Sat, 07 Sep 2019 10:27:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XwC-0005Kp-Qw
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:27:24 +0000
X-Inumbo-ID: 14acc92c-d15a-11e9-a337-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 14acc92c-d15a-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 10:27:24 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id h7so8989989wrt.13
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:27:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=QwXVBUCd1D30MCXiCMxdVajaQ2J6LNyHirLR/nVqAXk=;
 b=mRZ6HP8hkwhDkZszL7s8v/ZYKp+Sw8k/xHPngl+I4IUUjeXzYkzXaG6YDhUZT0rBUg
 Zp0ps6V9kUN++V5zm3+WCbbPMUZXrctBsP9UpIvnf667MSqjMGDAGOXtVKhycr/J66SA
 jWl/rPk3XDj5nZHXSNtOqoHRr+24H2kOraEqVvwJh+UJDt0YrVV6aP4sDrTn3ENGcEOb
 9m1UUYh6ronGoONSPyY6d/JupoR+SRyf03xHf9Svugukt3342rI+gxCphzh4MvUCfeHW
 3T8Ofm/vj0XxkoLWdkvYPOk0hd65O8RPDyUzhfXAtPN2EUhT2KpqocFPOQ/E4bhtrz+t
 pqWA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=QwXVBUCd1D30MCXiCMxdVajaQ2J6LNyHirLR/nVqAXk=;
 b=ljmhYWqRBUu9gLULNGWkf+B+47oaF2Mnimk8hxEpZsRspwt36eFF+TFmryjVj0X4pN
 90vdW0wsTefN/PL0XtfXSH/VaQvOZ/O919cODztTxt8twMq+JGkfI8rtw9r5YrtUMD5q
 y/GCvYmwLt4C1Krd0MCVwzfy7ZeO+jN4WAWM3BPHdd2k3zM7/STQUOTB0nZ3As7y98yU
 LfH367nYRsLqvMMgWTEjBw7iuU+bkS4WgDsnvoC6hTqhuaQSFbdXDu9wGnbVf7+YsjqF
 ciyA/I4BmbvJP5i0f4lgo7Hwkp15eFLt6fg0AVGfsIi1isqmxez2QVN977wxZyLXzn5n
 c76Q==
X-Gm-Message-State: APjAAAXGYFcWN50KGxGppNZZOoQw3QJ7zIYVodgQWHVTwoans/bPvX8b
 36m4Z3XLssyMkSN0v8e6Xco=
X-Google-Smtp-Source: APXvYqzQ3IWuvEsduUpAacwp/bEHqEpZla4MkA5nbgg3lNNldT1r+uB3nkF+KLfvMjqMKKH7qmeENQ==
X-Received: by 2002:adf:ef8d:: with SMTP id d13mr10538707wro.219.1567852043245; 
 Sat, 07 Sep 2019 03:27:23 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id i73sm11130040wmg.33.2019.09.07.03.27.22
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:27:22 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-2-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <3ea85eac-60e6-7224-48a8-76aa30b2a4f2@gmail.com>
Date: Sat, 7 Sep 2019 13:27:21 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-2-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/9] plat/xen: Add 9P device type
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGRzIHRoZSA5
UCBkZXZpY2UgdHlwZSBlbnRyeSBpbiB0aGUgeGVuYnVzIGRldmljZSB0eXBlIGVudW0uCj4gCj4g
U2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAtLS0KPiAg
cGxhdC94ZW4vaW5jbHVkZS94ZW5idXMveGVuYnVzLmggfCAxICsKPiAgcGxhdC94ZW4veGVuYnVz
L2NsaWVudC5jICAgICAgICAgfCAxICsKPiAgMiBmaWxlcyBjaGFuZ2VkLCAyIGluc2VydGlvbnMo
KykKPiAKPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vaW5jbHVkZS94ZW5idXMveGVuYnVzLmggYi9w
bGF0L3hlbi9pbmNsdWRlL3hlbmJ1cy94ZW5idXMuaAo+IGluZGV4IGE5ZDY0MzZmLi4zNWNjZDc2
NSAxMDA2NDQKPiAtLS0gYS9wbGF0L3hlbi9pbmNsdWRlL3hlbmJ1cy94ZW5idXMuaAo+ICsrKyBi
L3BsYXQveGVuL2luY2x1ZGUveGVuYnVzL3hlbmJ1cy5oCj4gQEAgLTQ5LDYgKzQ5LDcgQEAKPiAg
ICovCj4gIHR5cGVkZWYgZW51bSB4ZW5idXNfZGV2X3R5cGUgewo+ICAJeGVuYnVzX2Rldl9ub25l
ID0gMCwKPiArCXhlbmJ1c19kZXZfOXBmcywKPiAgfSB4ZW5idXNfZGV2X3R5cGVfdDsKPiAgCj4g
IHN0cnVjdCB4ZW5idXNfZGV2aWNlOwo+IGRpZmYgLS1naXQgYS9wbGF0L3hlbi94ZW5idXMvY2xp
ZW50LmMgYi9wbGF0L3hlbi94ZW5idXMvY2xpZW50LmMKPiBpbmRleCBiZDA2MDYzOC4uNTZmZDFi
MzcgMTAwNjQ0Cj4gLS0tIGEvcGxhdC94ZW4veGVuYnVzL2NsaWVudC5jCj4gKysrIGIvcGxhdC94
ZW4veGVuYnVzL2NsaWVudC5jCj4gQEAgLTc0LDYgKzc0LDcgQEAgY29uc3QgY2hhciAqeGVuYnVz
X3N0YXRlX3RvX3N0cihYZW5idXNTdGF0ZSBzdGF0ZSkKPiAgCj4gIHN0YXRpYyBjb25zdCBjaGFy
ICpjb25zdCB4Yl9kZXZ0eXBlX3RibFtdID0gewo+ICAJWEVOQlVTX0RFVlRZUEVfRU5UUlkobm9u
ZSksCj4gKwlYRU5CVVNfREVWVFlQRV9FTlRSWSg5cGZzKSwKPiAgfTsKPiAgCj4gIGNvbnN0IGNo
YXIgKnhlbmJ1c19kZXZ0eXBlX3RvX3N0cihlbnVtIHhlbmJ1c19kZXZfdHlwZSBkZXZ0eXBlKQo+
IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:27:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:27:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XwM-0005LY-0F; Sat, 07 Sep 2019 10:27:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XwL-0005LR-En
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:27:33 +0000
X-Inumbo-ID: 19bdc8ee-d15a-11e9-b299-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 19bdc8ee-d15a-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:27:32 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id l11so8978832wrx.5
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:27:32 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=aIlt9kCZ0EsKKyrDjNjCWqMh0RTIVXNBnQLyUGNC1XU=;
 b=DBz1Xr9GGoFeP0s9WBuQJSuGrtyGq8AE3FypjJGzb4hU1EiedDrEvUYlkJU3AhkhAR
 i9B8ib9068Vvwff5GAisXEP3D2Qk3Si1rMl7SOSIVNBfWbFJBGUpD7JV/oX9fVfcZ46v
 YYt1yCo5GemaIrAwAbm6pfX1hAJa542DiaDoHI3/TUMfVYjYw9tCM4YeczsybC6SyY46
 UrxI331XefeuTgzHNfPrzpR5mnUMwuOcqV9dhdPOaBaoKZ/bWoVIxk8agbw+poxs/koq
 znZGGGO449fHjL2z0ybDZtVLLKg3dx072H+5Zd8c+3GcDZ0W/YTLZsxlTLwngkAccqTr
 N1jA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=aIlt9kCZ0EsKKyrDjNjCWqMh0RTIVXNBnQLyUGNC1XU=;
 b=BTSoP3sZ+xN10xtlN0kFRB4fYn+mKQDzGFfQez+oe1g9NQxwweF+WuGpDrhmrzoxLZ
 J2cIZpupYGSk7FZIYsIyoAV4rsilYjmevKgaxEUCP1K7WdTgod9rDt/yvd0ojibrzUm7
 u+xWz3gJuNBDP1uVAEt48wkZEqVPUXsvYCdWfbocl9WXtrz15YTF5k++MYyetMXGQFvI
 MxyWUn3kA4Tb+1AfSXgLPcTiSZAAGe1u8OPKomZdjuDahMQX3eQqFe/wSPziI26EPNID
 w/b3QPccICZhXpD3/nNTcnof5yEFZdKXd6Y/oztNMXpvrtDx6YlBhXKNxPrRpCcMoBW0
 D8VA==
X-Gm-Message-State: APjAAAXSlyA0XbMbonKsExdkSRwxq3QiPXmK3kS5IKLdGPEzMORbkGKh
 X6B8K1goSLsY0Rgj14mnVqI=
X-Google-Smtp-Source: APXvYqys4kBjW0HPZTaKpO59y0mEqXCDmtVD1suobV9Z3PdYDuVuYcW1WDyUkBbyObxYRgvhG5poKQ==
X-Received: by 2002:a5d:68c6:: with SMTP id p6mr11371757wrw.188.1567852051721; 
 Sat, 07 Sep 2019 03:27:31 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id i73sm11130996wmg.33.2019.09.07.03.27.30
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:27:31 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-3-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <89163d05-ac76-379d-66f3-4fde161f7a1e@gmail.com>
Date: Sat, 7 Sep 2019 13:27:30 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-3-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/9] plat/xen/drivers: Add
 9pfront driver skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGRzIHRoZSB4
ZW4gOXBmcm9udCBkcml2ZXIgc2tlbGV0b24uCj4gCj4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4g
QmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAtLS0KPiAgcGxhdC94ZW4vQ29uZmlnLnVrICAgICAg
ICAgICAgICAgIHwgIDcgKysrKwo+ICBwbGF0L3hlbi9NYWtlZmlsZS51ayAgICAgICAgICAgICAg
fCAxMCArKysrKysKPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgICAgIHwgNTkgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBwbGF0L3hlbi9kcml2ZXJzLzlwL2V4cG9y
dHN5bXMudWsgfCAgMSArCj4gIDQgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQo+ICBj
cmVhdGUgbW9kZSAxMDA2NDQgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKPiAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHBsYXQveGVuL2RyaXZlcnMvOXAvZXhwb3J0c3ltcy51awo+IAo+IGRpZmYg
LS1naXQgYS9wbGF0L3hlbi9Db25maWcudWsgYi9wbGF0L3hlbi9Db25maWcudWsKPiBpbmRleCAx
YWI0Y2M4NS4uZGZmZmIzMjAgMTAwNjQ0Cj4gLS0tIGEvcGxhdC94ZW4vQ29uZmlnLnVrCj4gKysr
IGIvcGxhdC94ZW4vQ29uZmlnLnVrCj4gQEAgLTcyLDUgKzcyLDEyIEBAIGNvbmZpZyBYRU5fWEVO
QlVTCj4gIG1lbnUgIlhlbmJ1cyBEcml2ZXJzIgo+ICAgICAgICAgIGRlcGVuZHMgb24gWEVOX1hF
TkJVUwo+ICAgICAgICAgIGRlcGVuZHMgb24gWEVOX0dOVFRBQgo+ICsKPiArY29uZmlnIFhFTl85
UEZST05UCj4gKwlib29sICJYZW5idXMgOXBmcm9udCBEcml2ZXIiCj4gKwlkZWZhdWx0IG4KPiAr
CWRlcGVuZHMgb24gTElCVUs5UAo+ICsJaGVscAo+ICsJCURyaXZlciBmb3IgOXBmcyBkZXZpY2Vz
Cj4gIGVuZG1lbnUKPiAgZW5kaWYKPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vTWFrZWZpbGUudWsg
Yi9wbGF0L3hlbi9NYWtlZmlsZS51awo+IGluZGV4IGM3NzZlZWFmLi45ZGJjNzcyNSAxMDA2NDQK
PiAtLS0gYS9wbGF0L3hlbi9NYWtlZmlsZS51awo+ICsrKyBiL3BsYXQveGVuL01ha2VmaWxlLnVr
Cj4gQEAgLTEwLDYgKzEwLDcgQEAgJChldmFsICQoY2FsbCBhZGRwbGF0X3MseGVuLCQoQ09ORklH
X1BMQVRfWEVOKSkpCj4gICMjCj4gICQoZXZhbCAkKGNhbGwgYWRkcGxhdGxpYix4ZW4sbGlieGVu
cGxhdCkpCj4gICQoZXZhbCAkKGNhbGwgYWRkcGxhdGxpYl9zLHhlbixsaWJ4ZW5idXMsJChDT05G
SUdfWEVOX1hFTkJVUykpKQo+ICskKGV2YWwgJChjYWxsIGFkZHBsYXRsaWJfcyx4ZW4sbGlieGVu
OXBmcm9udCwkKENPTkZJR19YRU5fOVBGUk9OVCkpKQo+ICAKPiAgIyMKPiAgIyMgWGVuIHBsYXRm
b3JtIGNvbXBpbGF0aW9uIHNldHRpbmdzCj4gQEAgLTExMCwzICsxMTEsMTIgQEAgTElCWEVOQlVT
X1NSQ1MteSAgICAgICAgICAgICAgICs9ICQoTElCWEVOUExBVF9CQVNFKS94ZW5idXMveHNfY29t
bXMuYwo+ICBMSUJYRU5CVVNfU1JDUy15ICAgICAgICAgICAgICAgKz0gJChMSUJYRU5QTEFUX0JB
U0UpL3hlbmJ1cy94c193YXRjaC5jCj4gIExJQlhFTkJVU19TUkNTLXkgICAgICAgICAgICAgICAr
PSAkKExJQlhFTlBMQVRfQkFTRSkveGVuYnVzL3hzLmMKPiAgZW5kaWYKPiArCj4gK2lmZXEgKCQo
Q09ORklHX1hFTl85UEZST05UKSx5KQo+ICtMSUJYRU45UEZST05UX0VYUE9SVFMgICAgICAgICAg
ID0gJChMSUJYRU5QTEFUX0JBU0UpL2RyaXZlcnMvOXAvZXhwb3J0c3ltcy51awo+ICtMSUJYRU45
UEZST05UX0FTRkxBR1MteSAgICAgICAgKz0gJChMSUJYRU5QTEFUX0FTRkxBR1MteSkKPiArTElC
WEVOOVBGUk9OVF9BU0lOQ0xVREVTLXkgICAgICs9ICQoTElCWEVOUExBVF9BU0lOQ0xVREVTLXkp
Cj4gK0xJQlhFTjlQRlJPTlRfQ0ZMQUdTLXkgICAgICAgICArPSAkKExJQlhFTlBMQVRfQ0ZMQUdT
LXkpCj4gK0xJQlhFTjlQRlJPTlRfQ0lOQ0xVREVTLXkgICAgICArPSAkKExJQlhFTlBMQVRfQ0lO
Q0xVREVTLXkpCj4gK0xJQlhFTjlQRlJPTlRfU1JDUy15ICAgICAgICAgICArPSAkKExJQlhFTlBM
QVRfQkFTRSkvZHJpdmVycy85cC85cGZyb250LmMKPiArZW5kaWYKPiBkaWZmIC0tZ2l0IGEvcGxh
dC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQu
Ywo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLjhjOTg4MGU4Cj4gLS0t
IC9kZXYvbnVsbAo+ICsrKyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gQEAgLTAs
MCArMSw1OSBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICov
Cj4gKy8qCj4gKyAqIEF1dGhvcnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4g
KyAqCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBC
dWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKPiArICogYXJlIG1ldDoKPiArICoKPiArICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIg
bm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiArICoK
PiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4g
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
Tgo+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsgKiBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBC
RSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArICovCj4gKwo+ICsjaW5jbHVk
ZSA8eGVuYnVzL3hlbmJ1cy5oPgo+ICsKPiArI2RlZmluZSBEUklWRVJfTkFNRQkieGVuLTlwZnJv
bnQiCj4gKwo+ICtzdGF0aWMgaW50IHA5ZnJvbnRfZHJ2X2luaXQoc3RydWN0IHVrX2FsbG9jICpk
cnZfYWxsb2NhdG9yIF9fdW51c2VkKQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh
dGljIGludCBwOWZyb250X2FkZF9kZXYoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiBfX3Vu
dXNlZCkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCB4ZW5idXNf
ZGV2X3R5cGVfdCBwOWZyb250X2RldnR5cGVzW10gPSB7Cj4gKwl4ZW5idXNfZGV2XzlwZnMsCj4g
K307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHhlbmJ1c19kcml2ZXIgcDlmcm9udF9kcml2ZXIgPSB7
Cj4gKwkuZGV2aWNlX3R5cGVzICAgPSBwOWZyb250X2RldnR5cGVzLAo+ICsJLmluaXQgICAgICAg
ICAgID0gcDlmcm9udF9kcnZfaW5pdCwKPiArCS5hZGRfZGV2ICAgICAgICA9IHA5ZnJvbnRfYWRk
X2Rldgo+ICt9Owo+ICsKPiArWEVOQlVTX1JFR0lTVEVSX0RSSVZFUigmcDlmcm9udF9kcml2ZXIp
Owo+IGRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwL2V4cG9ydHN5bXMudWsgYi9wbGF0
L3hlbi9kcml2ZXJzLzlwL2V4cG9ydHN5bXMudWsKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu
ZGV4IDAwMDAwMDAwLi42MjFlOTRmMAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9wbGF0L3hlbi9k
cml2ZXJzLzlwL2V4cG9ydHN5bXMudWsKPiBAQCAtMCwwICsxIEBACj4gK25vbmUKPiAKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:27:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:27:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XwW-0005MO-1y; Sat, 07 Sep 2019 10:27:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XwU-0005MH-I0
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:27:42 +0000
X-Inumbo-ID: 1ef7bd92-d15a-11e9-a337-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1ef7bd92-d15a-11e9-a337-bc764e2007e4;
 Sat, 07 Sep 2019 10:27:41 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id p13so9658159wmh.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:27:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=If8tY6G03rpliXfe9N9n2QpZLeTXEhgpxKQpvEAdxZA=;
 b=rq1HM8Mz2zDeAlkO/2PA+9u15fKDa7N975O4gcRznYAHc29TbiRIbchlSTsbJOqYPm
 fvH4H/uzqGxEpCwoGYuJPE0Bg1uFBSvxOBSSp0Vnu7zW1CeWNo/mUuXEdJtS7rQpmWo5
 D0k7/fUyE6JknVJqhxcof6QXXTpd1GOZxaCMIOwq/65w6Hx4+jXVxJqN9rmBKlgMsk6g
 iPnqM9tijAv700IdJwxXAPzgaGx1sKItfqpBPtAVqPS0lhS51ZsyCIb22N1t37o1h8Rz
 Z10kP//mZFCmwZPBjHROsy6JgjzFhEHeHgOPcv2qWvHDZhmIuvWJqIB1VRkXh0pHynYH
 3IOA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=If8tY6G03rpliXfe9N9n2QpZLeTXEhgpxKQpvEAdxZA=;
 b=CVXOv/kd8xt50Ne0GweSlI9IabKLijk9EoqrP3KiBKXVlX5hN/HnNerF5FcVU65YIi
 +ONIunDQOMATUXGrTJ8yVsiF6zpxpuhL50WqR8UefeGoAUQtpgUDGxWyMQKMZBCKwDbe
 4IaZRjYLo1dbeFf4KzXCRnsYspphHhpxUFiDsHNa+pm/N8cuzWbNXwedE/7JkJ5f/Kcs
 2UpA9fIxB8BfZsvZSJr5cw3ej3irdQCIOYe7N4jsJeAST2NGzabyn70aG1o5ZKL3vq1j
 MQP9nqpfmFNlXOGyVSCyzxiehV06jnXGHKsRhi1LK32dqllDfJ0IXfXREv4+tgYGVsES
 LolQ==
X-Gm-Message-State: APjAAAVfBPfHMNJp3KteuojsxAS3me93lTQzOxSB+Tu6wZ0SwRWQQQOA
 6cFj3dkoPGoZ+KrnqA15xu0=
X-Google-Smtp-Source: APXvYqz5FHOy0ae0p+yOjkOsvATiDHx78yO9LkOTBAVlGKEIoG/T45iT3qFfFpPv01EzH28LSrTcLg==
X-Received: by 2002:a1c:5f0b:: with SMTP id t11mr10831055wmb.76.1567852060347; 
 Sat, 07 Sep 2019 03:27:40 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id i73sm11131922wmg.33.2019.09.07.03.27.39
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:27:39 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-4-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <16e8fe42-cc97-13dc-5339-c4eb3f7d5ee3@gmail.com>
Date: Sat, 7 Sep 2019 13:27:39 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-4-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 3/9] plat/xen/drivers/9p:
 Initialize xenbus device
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGRzIHRoZSB4
ZW5idXMgZnVuY3Rpb24gcmVzcG9uc2libGUgZm9yIHJlYWRpbmcgZGF0YSB3cml0dGVuCj4gYnkg
dGhlIHRvb2xzdGFjayBhbmQgdGhlIGJhY2tlbmQgZnJvbSB0aGUgeGVuc3RvcmUsIHJlcXVpcmVk
IGZvcgo+IGluaXRpYWxpemluZyBhIDlwZnJvbnQgZGV2aWNlLgo+IAo+IFNpZ25lZC1vZmYtYnk6
IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gLS0tCj4gIHBsYXQveGVuL01ha2Vm
aWxlLnVrICAgICAgICAgICAgIHwgICAxICsKPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250
LmggICAgfCAgNTMgKysrKysrKysrKysKPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hi
LmggfCAgNTMgKysrKysrKysrKysKPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hzLmMg
fCAxNTYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQs
IDI2MyBpbnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L3hlbi9kcml2ZXJz
LzlwLzlwZnJvbnQuaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC94ZW4vZHJpdmVycy85cC85
cGZyb250X3hiLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQveGVuL2RyaXZlcnMvOXAvOXBm
cm9udF94cy5jCj4gCj4gZGlmZiAtLWdpdCBhL3BsYXQveGVuL01ha2VmaWxlLnVrIGIvcGxhdC94
ZW4vTWFrZWZpbGUudWsKPiBpbmRleCA5ZGJjNzcyNS4uMWQ3ZTdjZmYgMTAwNjQ0Cj4gLS0tIGEv
cGxhdC94ZW4vTWFrZWZpbGUudWsKPiArKysgYi9wbGF0L3hlbi9NYWtlZmlsZS51awo+IEBAIC0x
MTksNCArMTE5LDUgQEAgTElCWEVOOVBGUk9OVF9BU0lOQ0xVREVTLXkgICAgICs9ICQoTElCWEVO
UExBVF9BU0lOQ0xVREVTLXkpCj4gIExJQlhFTjlQRlJPTlRfQ0ZMQUdTLXkgICAgICAgICArPSAk
KExJQlhFTlBMQVRfQ0ZMQUdTLXkpCj4gIExJQlhFTjlQRlJPTlRfQ0lOQ0xVREVTLXkgICAgICAr
PSAkKExJQlhFTlBMQVRfQ0lOQ0xVREVTLXkpCj4gIExJQlhFTjlQRlJPTlRfU1JDUy15ICAgICAg
ICAgICArPSAkKExJQlhFTlBMQVRfQkFTRSkvZHJpdmVycy85cC85cGZyb250LmMKPiArTElCWEVO
OVBGUk9OVF9TUkNTLXkgICAgICAgICAgICs9ICQoTElCWEVOUExBVF9CQVNFKS9kcml2ZXJzLzlw
LzlwZnJvbnRfeHMuYwo+ICBlbmRpZgo+IGRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlw
LzlwZnJvbnQuaCBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oCj4gbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uMGRkOTlkNmMKPiAtLS0gL2Rldi9udWxsCj4gKysr
IGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKPiBAQCAtMCwwICsxLDUzIEBACj4gKy8q
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiArLyoKPiArICogQXV0
aG9yczogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiArICoKPiArICogQ29weXJp
Z2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsg
KiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9m
IGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKgo+ICsgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+
ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
PiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBN
T0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgX185UEZST05UX0hfXwo+
ICsjZGVmaW5lIF9fOVBGUk9OVF9IX18KPiArCj4gKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KPiAr
I2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiArI2luY2x1ZGUgPHVrL2xpc3QuaD4KPiArCj4g
K3N0cnVjdCBwOWZyb250X2RldiB7Cj4gKwkvKiBYZW5idXMgZGV2aWNlLiAqLwo+ICsJc3RydWN0
IHhlbmJ1c19kZXZpY2UgKnhlbmRldjsKPiArCS8qIE51bWJlciBvZiBtYXhpbXVtIHJpbmdzLCBy
ZWFkIGZyb20geGVuc3RvcmUuICovCj4gKwlpbnQgbmJfbWF4X3JpbmdzOwo+ICsJLyogTWF4aW11
bSByaW5nIHBhZ2Ugb3JkZXIsIHJlYWQgZnJvbSB4ZW5zdG9yZS4gKi8KPiArCWludCBtYXhfcmlu
Z19wYWdlX29yZGVyOwo+ICsJLyogTW91bnQgdGFnIGZvciB0aGlzIGRldmljZSwgcmVhZCBmcm9t
IHhlbnN0b3JlLiAqLwo+ICsJY2hhciAqdGFnOwo+ICt9Owo+ICsKPiArI2VuZGlmIC8qIF9fOVBG
Uk9OVF9IX18gKi8KPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hi
LmggYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRfeGIuaAo+IG5ldyBmaWxlIG1vZGUgMTAw
NjQ0Cj4gaW5kZXggMDAwMDAwMDAuLjIyNGRmN2FmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Bs
YXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udF94Yi5oCj4gQEAgLTAsMCArMSw1MyBAQAo+ICsvKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4gKy8qCj4gKyAqIEF1dGhv
cnM6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gKyAqCj4gKyAqIENvcHlyaWdo
dCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICog
YXJlIG1ldDoKPiArICoKPiArICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAo+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKPiArICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAi
QVMgSVMiCj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiAr
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IE9SIENPTlRSSUJVVE9SUyBCRQo+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4g
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ICsgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQo+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KPiArICoKPiArICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9E
SUZJRUQgSU4gQU5ZIFdBWS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9fOVBGUk9OVF9YQl9IX18K
PiArI2RlZmluZSBfXzlQRlJPTlRfWEJfSF9fCj4gKwo+ICsjaW5jbHVkZSAiOXBmcm9udC5oIgo+
ICsKPiArLyoqCj4gKyAqIFJlYWRzIGRldmljZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB4ZW5zdG9y
ZSwgc3VjaCBhcyB0aGUgbW91bnQgdGFnCj4gKyAqIGFuZCBkZXRhaWxzIGFib3V0IHRoZSBkZXZp
Y2UgcmluZ3MuCj4gKyAqCj4gKyAqIEBwYXJhbSBwOWZkZXYKPiArICogICA5UCBmcm9udGVuZCBk
ZXZpY2UKPiArICogQHJldHVybgo+ICsgKiAgIC0gKDApOiBTdWNjZXNzZnVsLgo+ICsgKiAgIC0g
KC1FSU5WQUwpOiBJbnZhbGlkIGRhdGEuCj4gKyAqICAgLSAoPCAwKTogRXJyb3Igd2hpbGUgcmVh
ZGluZy4KPiArICovCj4gK2ludCBwOWZyb250X3hiX2luaXQoc3RydWN0IHA5ZnJvbnRfZGV2ICpw
OWZkZXYpOwo+ICsKPiArI2VuZGlmIC8qIF9fOVBGUk9OVF9YQl9IX18gKi8KPiBkaWZmIC0tZ2l0
IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hzLmMgYi9wbGF0L3hlbi9kcml2ZXJzLzlw
LzlwZnJvbnRfeHMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLjVi
NWRjMmU0Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9u
dF94cy5jCj4gQEAgLTAsMCArMSwxNTYgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEJTRC0zLUNsYXVzZSAqLwo+ICsvKgo+ICsgKiBBdXRob3JzOiBDcmlzdGlhbiBCYW51IDxjcmlz
dGJAZ21haWwuY29tPgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkg
UG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKPiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gKyAqIGFyZSBtZXQ6Cj4gKyAqCj4gKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KPiArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQo+ICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBj
b3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCj4gKyAqICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Cj4gKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCj4gKyAqCj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ICsgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCj4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCj4gKyAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiAr
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgo+ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+ICsgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiAr
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KPiArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKPiArICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gKyAqCj4gKyAqIFRISVMg
SEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCj4gKyAq
Lwo+ICsKPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiArI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx1
ay9hc3NlcnQuaD4KPiArI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiArI2luY2x1ZGUgPHVr
L2VycnB0ci5oPgo+ICsjaW5jbHVkZSA8eGVuYnVzL3hzLmg+Cj4gKyNpbmNsdWRlIDx4ZW5idXMv
Y2xpZW50Lmg+Cj4gKwo+ICsjaW5jbHVkZSAiOXBmcm9udF94Yi5oIgo+ICsKPiArc3RhdGljIGlu
dCB4c19yZWFkX2JhY2tlbmRfaW5mbyhzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2KQo+ICt7
Cj4gKwlpbnQgcmMsIHZhbDsKPiArCWNoYXIgcGF0aFtzdHJsZW4oeGVuZGV2LT5ub2RlbmFtZSkg
KyBzaXplb2YoIi9iYWNrZW5kLWlkIildOwo+ICsKPiArCS8qIFJlYWQgYmFja2VuZCBpZC4gKi8K
PiArCXNwcmludGYocGF0aCwgIiVzL2JhY2tlbmQtaWQiLCB4ZW5kZXYtPm5vZGVuYW1lKTsKPiAr
CXJjID0geHNfcmVhZF9pbnRlZ2VyKFhCVF9OSUwsIHBhdGgsICZ2YWwpOwo+ICsJaWYgKHJjKQo+
ICsJCWdvdG8gb3V0Owo+ICsJeGVuZGV2LT5vdGhlcmVuZF9pZCA9IChkb21pZF90KXZhbDsKPiAr
Cj4gKwkvKiBSZWFkIGJhY2tlbmQgcGF0aC4gKi8KPiArCXhlbmRldi0+b3RoZXJlbmQgPSB4c19y
ZWFkKFhCVF9OSUwsIHhlbmRldi0+bm9kZW5hbWUsICJiYWNrZW5kIik7Cj4gKwlpZiAoUFRSSVNF
UlIoeGVuZGV2LT5vdGhlcmVuZCkpIHsKPiArCQlyYyA9IFBUUjJFUlIoeGVuZGV2LT5vdGhlcmVu
ZCk7Cj4gKwkJeGVuZGV2LT5vdGhlcmVuZCA9IE5VTEw7Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwly
ZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgeHNfcmVhZF9iYWNrZW5kX3JpbmdfaW5m
byhzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2LAo+ICsJCQkJICAgICBpbnQgKm5iX21heF9y
aW5ncywKPiArCQkJCSAgICAgaW50ICptYXhfcmluZ19wYWdlX29yZGVyKQo+ICt7Cj4gKwlpbnQg
cmM7Cj4gKwljaGFyICppbnRfc3RyOwo+ICsKPiArCS8qIFJlYWQgbWF4LXJpbmdzLiAqLwo+ICsJ
aW50X3N0ciA9IHhzX3JlYWQoWEJUX05JTCwgeGVuZGV2LT5vdGhlcmVuZCwgIm1heC1yaW5ncyIp
Owo+ICsJaWYgKFBUUklTRVJSKGludF9zdHIpKSB7Cj4gKwkJcmMgPSBQVFIyRVJSKGludF9zdHIp
Owo+ICsJCXVrX3ByX2VycigiRXJyb3I6ICVkXG4iLCByYyk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9
Cj4gKwo+ICsJKm5iX21heF9yaW5ncyA9IHN0cnRvbChpbnRfc3RyLCBOVUxMLCAxMCk7Cj4gKwlm
cmVlKGludF9zdHIpOwo+ICsKPiArCS8qIFJlYWQgbWF4LXJpbmctcGFnZS1vcmRlci4gKi8KPiAr
CWludF9zdHIgPSB4c19yZWFkKFhCVF9OSUwsIHhlbmRldi0+b3RoZXJlbmQsICJtYXgtcmluZy1w
YWdlLW9yZGVyIik7Cj4gKwlpZiAoUFRSSVNFUlIoaW50X3N0cikpIHsKPiArCQlyYyA9IFBUUjJF
UlIoaW50X3N0cik7Cj4gKwkJdWtfcHJfZXJyKCJFcnJvcjogJWRcbiIsIHJjKTsKPiArCQlnb3Rv
IG91dDsKPiArCX0KPiArCj4gKwkqbWF4X3JpbmdfcGFnZV9vcmRlciA9IHN0cnRvbChpbnRfc3Ry
LCBOVUxMLCAxMCk7Cj4gKwlmcmVlKGludF9zdHIpOwo+ICsJcmMgPSAwOwo+ICsKPiArb3V0Ogo+
ICsJcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICtpbnQgcDlmcm9udF94Yl9pbml0KHN0cnVjdCBwOWZy
b250X2RldiAqcDlmZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2Owo+
ICsJY2hhciAqdmVyc2lvbnM7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJVUtfQVNTRVJUKHA5ZmRldiAh
PSBOVUxMKTsKPiArCj4gKwl4ZW5kZXYgPSBwOWZkZXYtPnhlbmRldjsKPiArCVVLX0FTU0VSVCh4
ZW5kZXYgIT0gTlVMTCk7Cj4gKwo+ICsJLyogUmVhZCBiYWNrZW5kIG5vZGUgYW5kIGJhY2tlbmQg
aWQuICovCj4gKwlyYyA9IHhzX3JlYWRfYmFja2VuZF9pbmZvKHhlbmRldik7Cj4gKwlpZiAocmMp
IHsKPiArCQl1a19wcl9lcnIoIkVycm9yIGluaXRpYWxpemluZyBiYWNrZW5kIG5vZGUgYW5kIGlk
LlxuIik7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJLyogQ2hlY2sgdmVyc2lvbnMgc3Ry
aW5nLiAqLwo+ICsJdmVyc2lvbnMgPSB4c19yZWFkKFhCVF9OSUwsIHhlbmRldi0+b3RoZXJlbmQs
ICJ2ZXJzaW9ucyIpOwo+ICsJaWYgKFBUUklTRVJSKHZlcnNpb25zKSkgewo+ICsJCXVrX3ByX2Vy
cigiRXJyb3IgcmVhZGluZyBiYWNrZW5kIHZlcnNpb24gaW5mb3JtYXRpb24uXG4iKTsKPiArCQly
YyA9IFBUUjJFUlIodmVyc2lvbnMpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWlmIChz
dHJjbXAodmVyc2lvbnMsICIxIikpIHsKPiArCQl1a19wcl9lcnIoIkJhY2tlbmQgZG9lcyBub3Qg
c3VwcG9ydCB4ZW4gcHJvdG9jb2wgdmVyc2lvbiAxLlxuIik7Cj4gKwkJZnJlZSh2ZXJzaW9ucyk7
Cj4gKwkJcmMgPSAtRUlOVkFMOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsJZnJlZSh2ZXJzaW9u
cyk7Cj4gKwo+ICsJLyogUmVhZCByaW5nIGluZm9ybWF0aW9uLiAqLwo+ICsJcmMgPSB4c19yZWFk
X2JhY2tlbmRfcmluZ19pbmZvKHhlbmRldiwgJnA5ZmRldi0+bmJfbWF4X3JpbmdzLAo+ICsJCQkJ
ICAgICAgICZwOWZkZXYtPm1heF9yaW5nX3BhZ2Vfb3JkZXIpOwo+ICsJaWYgKHJjKSB7Cj4gKwkJ
dWtfcHJfZXJyKCJFcnJvciByZWFkaW5nIGJhY2tlbmQgcmluZyBpbmZvcm1hdGlvbi5cbiIpOwo+
ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCS8qIFJlYWQgdGFnLiAqLwo+ICsJcDlmZGV2LT50
YWcgPSB4c19yZWFkKFhCVF9OSUwsIHhlbmRldi0+bm9kZW5hbWUsICJ0YWciKTsKPiArCWlmIChQ
VFJJU0VSUihwOWZkZXYtPnRhZykpIHsKPiArCQl1a19wcl9lcnIoIkVycm9yIHJlYWRpbmcgOXBm
cyBtb3VudCB0YWcuXG4iKTsKPiArCQlyYyA9IFBUUjJFUlIocDlmZGV2LT50YWcpOwo+ICsJCXA5
ZmRldi0+dGFnID0gTlVMTDsKPiArCX0KPiArCj4gK291dDoKPiArCXJldHVybiByYzsKPiArfQo+
IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:27:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:27:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xwe-0005N7-3z; Sat, 07 Sep 2019 10:27:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xwc-0005My-P9
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:27:50 +0000
X-Inumbo-ID: 24398c7c-d15a-11e9-b299-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 24398c7c-d15a-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:27:50 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id w13so8988548wru.7
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:27:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=ItZrjS8t4DBj4mN8J98naZ6I6AsP3hEy8Qu3EmCNofM=;
 b=JVjkBRuGMpzi3IQZZUnj3jshhuNChYcQEa98nC31xKCUgtmm4szcv8CQFeomdD0DZQ
 SaQMF2tsZMVEbeaU3OCMCpyBtrP1PS4QAmTAfAGx6LmDDsducj/9/K4cJbww0GyZCliS
 80knFQc8Lzg2SSxqr/34htK8LcB7Qba09mzG7+r+7PoKkCr9r/yNCdj3ftAM1P0h9Oz3
 9mVOAf/Q2JrJbICGtQD4BbbW0ukZiBWs5a2Sf+lkQcc/h7Hk+MvKa366ekC4u4upOf7j
 hinaZ1mdggeIP9K83d+gpdOIgd9r92Y+Rs/NoglWBfudQafTgDfDT69Kl+VemDZbH6j7
 SZ1w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=ItZrjS8t4DBj4mN8J98naZ6I6AsP3hEy8Qu3EmCNofM=;
 b=rfBaPitdVsfYP/uCwT7Z9r0zkUnmPeoGn9qdJxZRshMLNby0ERE/kW/eXnmLFyNZGr
 +PzUhYb17hvQnw/YsgTQqQg8m+X5GNhcvlN1VmFJ/RbjE7snVNEMHDtscg5D0NcvGvrO
 SiL1An7UfkZsT7nhm9vIfA/tOpRy7pMK6XKdpdqHcz7R4DBfIPFwTL+JZuct1e99sdZw
 85HajrAB0ATbhYNQ65o2wN1kvtAVwqqNw+mwz38gpADtbUpbC6QZdqg/2zuJrQugN1Ue
 kGH7xssThaSFsp0H7NgTxgQLEneuia4NSmTQxSoEPmpEcRA7RJVhm16oyPqiXqZ/RoNR
 KHCw==
X-Gm-Message-State: APjAAAXzg9GypEbjB3GSPYB+rzmhw5RtLHNxUCptnphxiZGATJ7Qi0iW
 XRoV7fWgEU875C5i9G1RuAo=
X-Google-Smtp-Source: APXvYqyHm2LrOfzfIfgCsThv3FoTYbHMTuTGFmvqVsmimCrJp0Jw0h+bV5PCGKb3FeO028RXtaZN9Q==
X-Received: by 2002:adf:ead2:: with SMTP id o18mr10595453wrn.107.1567852069354; 
 Sat, 07 Sep 2019 03:27:49 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id l8sm20633634wrg.86.2019.09.07.03.27.48
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:27:48 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-5-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <d3dfd302-5b4d-43a7-be72-e5e7c90c7f6e@gmail.com>
Date: Sat, 7 Sep 2019 13:27:48 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-5-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 4/9] plat/xen/drivers/9p: Add
 device list
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGRzIHRoZSA5
cGZyb250IGRldmljZSBsaXN0LiA5cGZyb250IGRldmljZXMgYXJlIGFkZGVkIHRvCj4gdGhlIGxp
c3Qgd2hlbiBwcm9iZWQuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3Ri
QGdtYWlsLmNvbT4KPiAtLS0KPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgfCA0NiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+ICBwbGF0L3hlbi9kcml2ZXJzLzlw
LzlwZnJvbnQuaCB8ICAyICsrCj4gIDIgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9ucygrKSwg
MyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZy
b250LmMgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYwo+IGluZGV4IDhjOTg4MGU4Li5m
Mjg5Y2QwNSAxMDA2NDQKPiAtLS0gYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYwo+ICsr
KyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gQEAgLTMyLDE4ICszMiw1OCBAQAo+
ICAgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkg
V0FZLgo+ICAgKi8KPiAgCj4gKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KPiArI2luY2x1ZGUgPHVr
L2FsbG9jLmg+Cj4gKyNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KPiArI2luY2x1ZGUgPHVrL2Vzc2Vu
dGlhbHMuaD4KPiArI2luY2x1ZGUgPHVrL2xpc3QuaD4KPiArI2luY2x1ZGUgPHVrL3BsYXQvc3Bp
bmxvY2suaD4KPiAgI2luY2x1ZGUgPHhlbmJ1cy94ZW5idXMuaD4KPiAgCj4gKyNpbmNsdWRlICI5
cGZyb250X3hiLmgiCj4gKwo+ICAjZGVmaW5lIERSSVZFUl9OQU1FCSJ4ZW4tOXBmcm9udCIKPiAg
Cj4gLXN0YXRpYyBpbnQgcDlmcm9udF9kcnZfaW5pdChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxv
Y2F0b3IgX191bnVzZWQpCj4gK3N0YXRpYyBzdHJ1Y3QgdWtfYWxsb2MgKmE7Cj4gK3N0YXRpYyBV
S19MSVNUX0hFQUQocDlmcm9udF9kZXZpY2VfbGlzdCk7Cj4gK3N0YXRpYyBERUZJTkVfU1BJTkxP
Q0socDlmcm9udF9kZXZpY2VfbGlzdF9sb2NrKTsKPiArCj4gK3N0YXRpYyBpbnQgcDlmcm9udF9k
cnZfaW5pdChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxvY2F0b3IpCj4gIHsKPiArCWlmICghZHJ2
X2FsbG9jYXRvcikKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlhID0gZHJ2X2FsbG9jYXRv
cjsKPiArCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBwOWZyb250X2FkZF9k
ZXYoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiBfX3VudXNlZCkKPiArc3RhdGljIGludCBw
OWZyb250X2FkZF9kZXYoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldikKPiAgewo+IC0JcmV0
dXJuIDA7Cj4gKwlzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldjsKPiArCWludCByYzsKPiArCXVu
c2lnbmVkIGxvbmcgZmxhZ3M7Cj4gKwo+ICsJcDlmZGV2ID0gdWtfY2FsbG9jKGEsIDEsIHNpemVv
ZigqcDlmZGV2KSk7Cj4gKwlpZiAoIXA5ZmRldikgewo+ICsJCXJjID0gLUVOT01FTTsKPiArCQln
b3RvIG91dDsKPiArCX0KPiArCj4gKwlwOWZkZXYtPnhlbmRldiA9IHhlbmRldjsKPiArCXJjID0g
cDlmcm9udF94Yl9pbml0KHA5ZmRldik7Cj4gKwlpZiAocmMpCj4gKwkJZ290byBvdXRfZnJlZTsK
PiArCj4gKwlyYyA9IDA7Cj4gKwl1a3BsYXRfc3Bpbl9sb2NrX2lycXNhdmUoJnA5ZnJvbnRfZGV2
aWNlX2xpc3RfbG9jaywgZmxhZ3MpOwo+ICsJdWtfbGlzdF9hZGQoJnA5ZmRldi0+X2xpc3QsICZw
OWZyb250X2RldmljZV9saXN0KTsKPiArCXVrcGxhdF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZw
OWZyb250X2RldmljZV9saXN0X2xvY2ssIGZsYWdzKTsKPiArCj4gK291dF9mcmVlOgo+ICsJdWtf
ZnJlZShhLCBwOWZkZXYpOwo+ICtvdXQ6Cj4gKwlyZXR1cm4gcmM7Cj4gIH0KPiAgCj4gIHN0YXRp
YyBjb25zdCB4ZW5idXNfZGV2X3R5cGVfdCBwOWZyb250X2RldnR5cGVzW10gPSB7Cj4gZGlmZiAt
LWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oIGIvcGxhdC94ZW4vZHJpdmVycy85
cC85cGZyb250LmgKPiBpbmRleCAwZGQ5OWQ2Yy4uZTc3ZjMxNWEgMTAwNjQ0Cj4gLS0tIGEvcGxh
dC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKPiArKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlw
ZnJvbnQuaAo+IEBAIC00Miw2ICs0Miw4IEBACj4gIHN0cnVjdCBwOWZyb250X2RldiB7Cj4gIAkv
KiBYZW5idXMgZGV2aWNlLiAqLwo+ICAJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldjsKPiAr
CS8qIEVudHJ5IHdpdGhpbiB0aGUgOXBmcm9udCBkZXZpY2UgbGlzdC4gKi8KPiArCXN0cnVjdCB1
a19saXN0X2hlYWQgX2xpc3Q7Cj4gIAkvKiBOdW1iZXIgb2YgbWF4aW11bSByaW5ncywgcmVhZCBm
cm9tIHhlbnN0b3JlLiAqLwo+ICAJaW50IG5iX21heF9yaW5nczsKPiAgCS8qIE1heGltdW0gcmlu
ZyBwYWdlIG9yZGVyLCByZWFkIGZyb20geGVuc3RvcmUuICovCj4gCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0
Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:28:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:28:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xwm-0005Oa-6c; Sat, 07 Sep 2019 10:28:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xwk-0005OU-Oj
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:27:58 +0000
X-Inumbo-ID: 288eae92-d15a-11e9-b299-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 288eae92-d15a-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:27:57 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id k1so8900156wmi.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:27:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=aUu620Ct5nbLG5QtWW3Tn/sYmuK92nAwTSRzbF+/Hz4=;
 b=qyyi1eZ3cAwXdjnxqiadBJVv3JfpABBmmxMcd5N+Li35EkwVtT+lrZTpXe5AJxo+u+
 OH44jVMfgt9cNB5ZxW3ny+q6whU+S4gGo+6o7S+bMSgQP/q3zInwGH7sTxNvB0Zb8O/l
 5gCHhSvfr9HEex2XEPEohqZ1RCOU+EaGnwAgZNPNmwNPdGOC/pOly0ecKoM8WSzgmLrB
 isKYeLQuDOzkQ3seFWquVoAfHyfjXxI7TdoJ1mXy4p+GU7OoC0sIxm9qmNYoKm3Xa36X
 cgdZZcTi/KDeNzXfkcE4YkQzUbYjR/XCbzTBrBmnNqoIyK6hy3n2LXubh2VejlRrHuKT
 o93w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=aUu620Ct5nbLG5QtWW3Tn/sYmuK92nAwTSRzbF+/Hz4=;
 b=mRFAwxRJ/B7mYl/RJI4k3vdrBNyaJcqmgNg2dM2pje4Pi04HExVt101xuDxs2H04aw
 sUZP/MBCr9gwRLrhXeZ19XxD6x2jjfygedUNkI9jebcdTNfSJx+qc2v9/jeG6uEVP+ue
 smaIbuHbBgsbNNEtl6ULjhcGiFbkwfViMCh6VSXJ3/DUebKB2pA0cDgnwqgZ+t2uOW84
 SnY63Ap10m/Xwu9qxuyaiNJGmnx610chco8IONe5ulWrqlYQDuO6NsTLSYd5/x0p4eV0
 iFPc/e0RwISmUlbKL3aJXHIyNc70QkD+q/xEt8NQWOrFaJyaYi9+xWU5mfvj1GovS9qB
 kaQg==
X-Gm-Message-State: APjAAAUWN90AxqAZrwa3EvSC26Q7Q/+PZi1RUx6n+U19QgtLcJOShjP7
 oNu2hyADw1LC9rgY1skI4K6ovfHy
X-Google-Smtp-Source: APXvYqyI8nbFNxpTzsW89sRwJXbQ/h6S990InUaEaUJo1ITA+k5nPEqIfLG471814CF0B1DW2EN0bA==
X-Received: by 2002:a1c:f417:: with SMTP id z23mr9075861wma.77.1567852076531; 
 Sat, 07 Sep 2019 03:27:56 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id l62sm10813176wml.13.2019.09.07.03.27.55
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:27:56 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-6-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <a71d383f-fe3b-f8a1-2995-582c95aa39a7@gmail.com>
Date: Sat, 7 Sep 2019 13:27:55 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-6-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 5/9] plat/xen/drivers/9p:
 Connect to xenbus device
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBpbXBsZW1lbnRz
IHJpbmcgYWxsb2NhdGlvbiwgcmVmZXJlbmNlIGdyYW50aW5nIGFuZCBldmVudCBjaGFubmVsCj4g
YWxsb2NhdGlvbiwgd2l0aCB0aGUgcHVycG9zZSBvZiBlc3RhYmxpc2hpbmcgdGhlIGNvbm5lY3Rp
b24gdG8gdGhlCj4gYmFja2VuZCA5cGZzIGRldmljZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDcmlz
dGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBwbGF0L3hlbi9Db25maWcudWsg
ICAgICAgICAgICAgICB8ICAxOSArKy0KPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMg
ICAgfCAxNjcgKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICBwbGF0L3hlbi9kcml2ZXJzLzlw
LzlwZnJvbnQuaCAgICB8ICAyOSArKysrKwo+ICBwbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRf
eGIuaCB8ICAxMiArKwo+ICBwbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRfeHMuYyB8IDIwNCAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIDUgZmlsZXMgY2hhbmdlZCwgNDMwIGlu
c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vQ29u
ZmlnLnVrIGIvcGxhdC94ZW4vQ29uZmlnLnVrCj4gaW5kZXggZGZmZmIzMjAuLjFhZDdmN2U0IDEw
MDY0NAo+IC0tLSBhL3BsYXQveGVuL0NvbmZpZy51awo+ICsrKyBiL3BsYXQveGVuL0NvbmZpZy51
awo+IEBAIC03MywxMSArNzMsMjggQEAgbWVudSAiWGVuYnVzIERyaXZlcnMiCj4gICAgICAgICAg
ZGVwZW5kcyBvbiBYRU5fWEVOQlVTCj4gICAgICAgICAgZGVwZW5kcyBvbiBYRU5fR05UVEFCCj4g
IAo+IC1jb25maWcgWEVOXzlQRlJPTlQKPiArbWVudWNvbmZpZyBYRU5fOVBGUk9OVAo+ICAJYm9v
bCAiWGVuYnVzIDlwZnJvbnQgRHJpdmVyIgo+ICAJZGVmYXVsdCBuCj4gIAlkZXBlbmRzIG9uIExJ
QlVLOVAKPiAgCWhlbHAKPiAgCQlEcml2ZXIgZm9yIDlwZnMgZGV2aWNlcwo+ICsKPiArY29uZmln
IFhFTl85UEZST05UX05CX1JJTkdTCj4gKwlpbnQgIlhlbiA5UCByaW5nIG51bWJlciIKPiArCWRl
ZmF1bHQgMgo+ICsJZGVwZW5kcyBvbiBYRU5fOVBGUk9OVAo+ICsJaGVscAo+ICsJCU51bWJlciBv
ZiByaW5ncyB0byBhbGxvY2F0ZS4KPiArCQlXaWxsIGJlIGNsYW1wZWQgdG8gdGhlIG1heGltdW0g
dmFsdWUgYWxsb3dlZCBieSB0aGUgYmFja2VuZC4KPiArCj4gK2NvbmZpZyBYRU5fOVBGUk9OVF9S
SU5HX09SREVSCj4gKwlpbnQgIlhlbiA5UCByaW5nIG9yZGVyIgo+ICsJZGVmYXVsdCA2Cj4gKwlk
ZXBlbmRzIG9uIFhFTl85UEZST05UCj4gKwloZWxwCj4gKwkJUmluZyBvcmRlciBmb3IgeGVuIDlQ
IGRldmljZXMuIE9yZGVycyBvZiAwLCAxLCAyLCAuLi4sIDkgd2lsbAo+ICsJCWNyZWF0ZSByaW5n
cyBvZiBzaXplIDRLLCA4SywgMTZLLCAuLi4sIDJNIHJlc3BlY3RpdmVseS4KPiArCQlXaWxsIGJl
IGNsYW1wZWQgdG8gdGhlIG1heGltdW0gdmFsdWUgYWxsb3dlZCBieSB0aGUgYmFja2VuZC4KPiAg
ZW5kbWVudQo+ICBlbmRpZgo+IGRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJv
bnQuYyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gaW5kZXggZjI4OWNkMDUuLjM4
OThjYjg1IDEwMDY0NAo+IC0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gKysr
IGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKPiBAQCAtMzIsMTIgKzMyLDE1IEBACj4g
ICAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBX
QVkuCj4gICAqLwo+ICAKPiArI2luY2x1ZGUgPHN0ZGJvb2wuaD4KPiAgI2luY2x1ZGUgPHVrL2Nv
bmZpZy5oPgo+ICAjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiAgI2luY2x1ZGUgPHVrL2Fzc2VydC5o
Pgo+ICAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgo+ICAjaW5jbHVkZSA8dWsvbGlzdC5oPgo+
ICAjaW5jbHVkZSA8dWsvcGxhdC9zcGlubG9jay5oPgo+ICsjaW5jbHVkZSA8eGVuLXg4Ni9tbS5o
Pgo+ICsjaW5jbHVkZSA8eGVuLXg4Ni9pcnEuaD4KPiAgI2luY2x1ZGUgPHhlbmJ1cy94ZW5idXMu
aD4KPiAgCj4gICNpbmNsdWRlICI5cGZyb250X3hiLmgiCj4gQEAgLTQ4LDYgKzUxLDE0MiBAQCBz
dGF0aWMgc3RydWN0IHVrX2FsbG9jICphOwo+ICBzdGF0aWMgVUtfTElTVF9IRUFEKHA5ZnJvbnRf
ZGV2aWNlX2xpc3QpOwo+ICBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHA5ZnJvbnRfZGV2aWNlX2xp
c3RfbG9jayk7Cj4gIAo+ICtzdGF0aWMgdm9pZCBwOWZyb250X2hhbmRsZXIoZXZ0Y2huX3BvcnRf
dCBldnRjaG4gX191bnVzZWQsCj4gKwkJCSAgICBzdHJ1Y3QgX19yZWdzICpyZWdzIF9fdW51c2Vk
LAo+ICsJCQkgICAgdm9pZCAqYXJnIF9fdW51c2VkKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyB2
b2lkIHA5ZnJvbnRfZnJlZV9kZXZfcmluZyhzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldiwgaW50
IGlkeCkKPiArewo+ICsJc3RydWN0IHA5ZnJvbnRfZGV2X3JpbmcgKnJpbmcgPSAmcDlmZGV2LT5y
aW5nc1tpZHhdOwo+ICsJaW50IGk7Cj4gKwo+ICsJVUtfQVNTRVJUKHJpbmctPmluaXRpYWxpemVk
KTsKPiArCj4gKwl1bmJpbmRfZXZ0Y2huKHJpbmctPmV2dGNobik7Cj4gKwlmb3IgKGkgPSAwOyBp
IDwgKDEgPDwgcDlmZGV2LT5yaW5nX29yZGVyKTsgaSsrKQo+ICsJCWdudHRhYl9lbmRfYWNjZXNz
KHJpbmctPmludGYtPnJlZltpXSk7Cj4gKwl1a19wZnJlZShhLCByaW5nLT5kYXRhLmluLAo+ICsJ
CXA5ZmRldi0+cmluZ19vcmRlciArIFhFTl9QQUdFX1NISUZUIC0gUEFHRV9TSElGVCk7Cj4gKwln
bnR0YWJfZW5kX2FjY2VzcyhyaW5nLT5yZWYpOwo+ICsJdWtfcGZyZWUoYSwgcmluZy0+aW50Ziwg
MCk7Cj4gKwlyaW5nLT5pbml0aWFsaXplZCA9IGZhbHNlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p
ZCBwOWZyb250X2ZyZWVfZGV2X3JpbmdzKHN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2KQo+ICt7
Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcDlmZGV2LT5uYl9yaW5nczsgaSsr
KSB7Cj4gKwkJaWYgKCFwOWZkZXYtPnJpbmdzW2ldLmluaXRpYWxpemVkKQo+ICsJCQljb250aW51
ZTsKPiArCQlwOWZyb250X2ZyZWVfZGV2X3JpbmcocDlmZGV2LCBpKTsKPiArCX0KPiArCj4gKwl1
a19mcmVlKGEsIHA5ZmRldi0+cmluZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHA5ZnJvbnRf
YWxsb2NhdGVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYsIGludCBpZHgpCj4g
K3sKPiArCXN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYgPSBwOWZkZXYtPnhlbmRldjsKPiAr
CXN0cnVjdCBwOWZyb250X2Rldl9yaW5nICpyaW5nOwo+ICsJaW50IHJjLCBpOwo+ICsJdm9pZCAq
ZGF0YV9ieXRlczsKPiArCj4gKwkvKiBTYW5pdHkgY2hlY2tzLiAqLwo+ICsJVUtfQVNTRVJUKGlk
eCA+PSAwICYmIGlkeCA8IHA5ZmRldi0+bmJfcmluZ3MpOwo+ICsKPiArCXJpbmcgPSAmcDlmZGV2
LT5yaW5nc1tpZHhdOwo+ICsJVUtfQVNTRVJUKCFyaW5nLT5pbml0aWFsaXplZCk7Cj4gKwo+ICsJ
dWthcmNoX3NwaW5fbG9ja19pbml0KCZyaW5nLT5zcGlubG9jayk7Cj4gKwlyaW5nLT5kZXYgPSBw
OWZkZXY7Cj4gKwo+ICsJLyogQWxsb2NhdGUgcmluZyBpbnRmIHBhZ2UuICovCj4gKwlyaW5nLT5p
bnRmID0gdWtfcGFsbG9jKGEsIDApOwo+ICsJaWYgKCFyaW5nLT5pbnRmKSB7Cj4gKwkJcmMgPSAt
RU5PTUVNOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsJbWVtc2V0KHJpbmctPmludGYsIDAsIFBB
R0VfU0laRSk7Cj4gKwo+ICsJLyogR3JhbnQgYWNjZXNzIHRvIHRoZSBhbGxvY2F0ZWQgcGFnZSB0
byB0aGUgYmFja2VuZC4gKi8KPiArCXJpbmctPnJlZiA9IGdudHRhYl9ncmFudF9hY2Nlc3MoeGVu
ZGV2LT5vdGhlcmVuZF9pZCwKPiArCQkJdmlydF90b19tZm4ocmluZy0+aW50ZiksIDApOwo+ICsJ
VUtfQVNTRVJUKHJpbmctPnJlZiAhPSBHUkFOVF9JTlZBTElEX1JFRik7Cj4gKwo+ICsJLyogQWxs
b2NhdGUgbWVtb3J5IGZvciB0aGUgZGF0YS4gKi8KPiArCWRhdGFfYnl0ZXMgPSB1a19wYWxsb2Mo
YSwKPiArCQkJcDlmZGV2LT5yaW5nX29yZGVyICsgWEVOX1BBR0VfU0hJRlQgLSBQQUdFX1NISUZU
KTsKPiArCWlmICghZGF0YV9ieXRlcykgewo+ICsJCXJjID0gLUVOT01FTTsKPiArCQlnb3RvIG91
dF9mcmVlX2ludGY7Cj4gKwl9Cj4gKwltZW1zZXQoZGF0YV9ieXRlcywgMCwgWEVOX0ZMRVhfUklO
R19TSVpFKHA5ZmRldi0+cmluZ19vcmRlcikgKiAyKTsKPiArCj4gKwkvKiBHcmFudCByZWZzIHRv
IHRoZSBlbnRpcmUgZGF0YS4gKi8KPiArCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBwOWZkZXYtPnJp
bmdfb3JkZXIpOyBpKyspIHsKPiArCQlyaW5nLT5pbnRmLT5yZWZbaV0gPSBnbnR0YWJfZ3JhbnRf
YWNjZXNzKHhlbmRldi0+b3RoZXJlbmRfaWQsCj4gKwkJCQl2aXJ0X3RvX21mbihkYXRhX2J5dGVz
KSArIGksIDApOwo+ICsJCVVLX0FTU0VSVChyaW5nLT5pbnRmLT5yZWZbaV0gIT0gR1JBTlRfSU5W
QUxJRF9SRUYpOwo+ICsJfQo+ICsKPiArCXJpbmctPmludGYtPnJpbmdfb3JkZXIgPSBwOWZkZXYt
PnJpbmdfb3JkZXI7Cj4gKwlyaW5nLT5kYXRhLmluID0gZGF0YV9ieXRlczsKPiArCXJpbmctPmRh
dGEub3V0ID0gZGF0YV9ieXRlcyArIFhFTl9GTEVYX1JJTkdfU0laRShwOWZkZXYtPnJpbmdfb3Jk
ZXIpOwo+ICsKPiArCS8qIEFsbG9jYXRlIGV2ZW50IGNoYW5uZWwuICovCj4gKwlyYyA9IGV2dGNo
bl9hbGxvY191bmJvdW5kKHhlbmRldi0+b3RoZXJlbmRfaWQsIHA5ZnJvbnRfaGFuZGxlciwgcmlu
ZywKPiArCQkJCSZyaW5nLT5ldnRjaG4pOwo+ICsJaWYgKHJjKSB7Cj4gKwkJdWtfcHJfZXJyKERS
SVZFUl9OQU1FIjogRXJyb3IgY3JlYXRpbmcgZXZ0IGNoYW5uZWw6ICVkXG4iLCByYyk7Cj4gKwkJ
Z290byBvdXRfZnJlZV9ncmFudHM7Cj4gKwl9Cj4gKwo+ICsJdW5tYXNrX2V2dGNobihyaW5nLT5l
dnRjaG4pOwo+ICsKPiArCS8qIE1hcmsgcmluZyBhcyBpbml0aWFsaXplZC4gKi8KPiArCXJpbmct
PmluaXRpYWxpemVkID0gdHJ1ZTsKPiArCj4gKwlyZXR1cm4gMDsKPiArCj4gK291dF9mcmVlX2dy
YW50czoKPiArCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBwOWZkZXYtPnJpbmdfb3JkZXIpOyBpKysp
Cj4gKwkJZ250dGFiX2VuZF9hY2Nlc3MocmluZy0+aW50Zi0+cmVmW2ldKTsKPiArCXVrX3BmcmVl
KGEsIGRhdGFfYnl0ZXMsCj4gKwkJcDlmZGV2LT5yaW5nX29yZGVyICsgWEVOX1BBR0VfU0hJRlQg
LSBQQUdFX1NISUZUKTsKPiArb3V0X2ZyZWVfaW50ZjoKPiArCWdudHRhYl9lbmRfYWNjZXNzKHJp
bmctPnJlZik7Cj4gKwl1a19wZnJlZShhLCByaW5nLT5pbnRmLCAwKTsKPiArb3V0Ogo+ICsJcmV0
dXJuIHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IHA5ZnJvbnRfYWxsb2NhdGVfZGV2X3Jpbmdz
KHN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2KQo+ICt7Cj4gKwlpbnQgcmMsIGk7Cj4gKwo+ICsJ
cDlmZGV2LT5yaW5ncyA9IHVrX2NhbGxvYyhhLCBwOWZkZXYtPm5iX3JpbmdzLCBzaXplb2YoKnA5
ZmRldi0+cmluZ3MpKTsKPiArCWlmICghcDlmZGV2LT5yaW5ncykgewo+ICsJCXJjID0gLUVOT01F
TTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgcDlmZGV2LT5u
Yl9yaW5nczsgaSsrKSB7Cj4gKwkJcmMgPSBwOWZyb250X2FsbG9jYXRlX2Rldl9yaW5nKHA5ZmRl
diwgaSk7Cj4gKwkJaWYgKHJjKQo+ICsJCQlnb3RvIG91dF9mcmVlOwo+ICsJfQo+ICsKPiArCXJl
dHVybiAwOwo+ICsKPiArb3V0X2ZyZWU6Cj4gKwlwOWZyb250X2ZyZWVfZGV2X3JpbmdzKHA5ZmRl
dik7Cj4gK291dDoKPiArCXJldHVybiByYzsKPiArfQo+ICsKPiAgc3RhdGljIGludCBwOWZyb250
X2Rydl9pbml0KHN0cnVjdCB1a19hbGxvYyAqZHJ2X2FsbG9jYXRvcikKPiAgewo+ICAJaWYgKCFk
cnZfYWxsb2NhdG9yKQo+IEBAIC03NSwxMSArMjE0LDM5IEBAIHN0YXRpYyBpbnQgcDlmcm9udF9h
ZGRfZGV2KHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYpCj4gIAlpZiAocmMpCj4gIAkJZ290
byBvdXRfZnJlZTsKPiAgCj4gKwl1a19wcl9pbmZvKCJJbml0aWFsaXplZCA5cGZyb250IGRldjog
dGFnPSVzLG1heHJpbmdzPSVkLG1heG9yZGVyPSVkXG4iLAo+ICsJCXA5ZmRldi0+dGFnLCBwOWZk
ZXYtPm5iX21heF9yaW5ncywgcDlmZGV2LT5tYXhfcmluZ19wYWdlX29yZGVyKTsKPiArCj4gKwlw
OWZkZXYtPm5iX3JpbmdzID0gTUlOKENPTkZJR19YRU5fOVBGUk9OVF9OQl9SSU5HUywKPiArCQkJ
CXA5ZmRldi0+bmJfbWF4X3JpbmdzKTsKPiArCXA5ZmRldi0+cmluZ19vcmRlciA9IE1JTihDT05G
SUdfWEVOXzlQRlJPTlRfUklOR19PUkRFUiwKPiArCQkJCXA5ZmRldi0+bWF4X3JpbmdfcGFnZV9v
cmRlcik7Cj4gKwo+ICsJcmMgPSBwOWZyb250X2FsbG9jYXRlX2Rldl9yaW5ncyhwOWZkZXYpOwo+
ICsJaWYgKHJjKSB7Cj4gKwkJdWtfcHJfZXJyKERSSVZFUl9OQU1FIjogQ291bGQgbm90IGluaXRp
YWxpemUgZGV2aWNlIHJpbmdzOiAlZFxuIiwKPiArCQkJcmMpOwo+ICsJCWdvdG8gb3V0X2ZyZWU7
Cj4gKwl9Cj4gKwo+ICsJcmMgPSBwOWZyb250X3hiX2Nvbm5lY3QocDlmZGV2KTsKPiArCWlmIChy
Yykgewo+ICsJCXVrX3ByX2VycihEUklWRVJfTkFNRSI6IENvdWxkIG5vdCBjb25uZWN0OiAlZFxu
IiwgcmMpOwo+ICsJCWdvdG8gb3V0X2ZyZWVfcmluZ3M7Cj4gKwl9Cj4gKwo+ICAJcmMgPSAwOwo+
ICAJdWtwbGF0X3NwaW5fbG9ja19pcnFzYXZlKCZwOWZyb250X2RldmljZV9saXN0X2xvY2ssIGZs
YWdzKTsKPiAgCXVrX2xpc3RfYWRkKCZwOWZkZXYtPl9saXN0LCAmcDlmcm9udF9kZXZpY2VfbGlz
dCk7Cj4gIAl1a3BsYXRfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcDlmcm9udF9kZXZpY2VfbGlz
dF9sb2NrLCBmbGFncyk7Cj4gIAo+ICsJdWtfcHJfaW5mbyhEUklWRVJfTkFNRSI6IENvbm5lY3Rl
ZCA5cGZyb250IGRldjogdGFnPSVzLHJpbmdzPSVkLG9yZGVyPSVkXG4iLAo+ICsJCXA5ZmRldi0+
dGFnLCBwOWZkZXYtPm5iX3JpbmdzLCBwOWZkZXYtPnJpbmdfb3JkZXIpOwo+ICsKPiArCWdvdG8g
b3V0Owo+ICsKPiArb3V0X2ZyZWVfcmluZ3M6Cj4gKwlwOWZyb250X2ZyZWVfZGV2X3JpbmdzKHA5
ZmRldik7Cj4gIG91dF9mcmVlOgo+ICAJdWtfZnJlZShhLCBwOWZkZXYpOwo+ICBvdXQ6Cj4gZGlm
ZiAtLWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oIGIvcGxhdC94ZW4vZHJpdmVy
cy85cC85cGZyb250LmgKPiBpbmRleCBlNzdmMzE1YS4uOTdjOTg2ZDggMTAwNjQ0Cj4gLS0tIGEv
cGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKPiArKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlw
LzlwZnJvbnQuaAo+IEBAIC0zNSw5ICszNSwzMSBAQAo+ICAjaWZuZGVmIF9fOVBGUk9OVF9IX18K
PiAgI2RlZmluZSBfXzlQRlJPTlRfSF9fCj4gIAo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gICNp
bmNsdWRlIDx1ay9jb25maWcuaD4KPiAgI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiAgI2lu
Y2x1ZGUgPHVrL2xpc3QuaD4KPiArI2luY2x1ZGUgPHVrL3BsYXQvc3BpbmxvY2suaD4KPiArI2lu
Y2x1ZGUgPHhlbi9pby85cGZzLmg+Cj4gKyNpbmNsdWRlIDxjb21tb24vZXZlbnRzLmg+Cj4gKyNp
bmNsdWRlIDxjb21tb24vZ250dGFiLmg+Cj4gKwo+ICtzdHJ1Y3QgcDlmcm9udF9kZXZfcmluZyB7
Cj4gKwkvKiBCYWNrcG9pbnRlciB0byB0aGUgcDlmcm9udCBkZXZpY2UuICovCj4gKwlzdHJ1Y3Qg
cDlmcm9udF9kZXYgKmRldjsKPiArCS8qIFRoZSA5cGZzIGRhdGEgaW50ZXJmYWNlLCBhcyBkZWRm
aW5lZCBieSB0aGUgeGVuIGhlYWRlcnMuICovCj4gKwlzdHJ1Y3QgeGVuXzlwZnNfZGF0YV9pbnRm
ICppbnRmOwo+ICsJLyogVGhlIDlwZnMgZGF0YSwgYXMgZGVmaW5lZCBieSB0aGUgeGVuIGhlYWRl
cnMuICovCj4gKwlzdHJ1Y3QgeGVuXzlwZnNfZGF0YSBkYXRhOwo+ICsJLyogVGhlIGV2ZW50IGNo
YW5uZWwgZm9yIHRoaXMgcmluZy4gKi8KPiArCWV2dGNobl9wb3J0X3QgZXZ0Y2huOwo+ICsJLyog
R3JhbnQgcmVmZXJlbmNlIGZvciB0aGUgaW50ZXJmYWNlLiAqLwo+ICsJZ3JhbnRfcmVmX3QgcmVm
Owo+ICsJLyogUGVyLXJpbmcgc3BpbmxvY2suICovCj4gKwlzcGlubG9ja190IHNwaW5sb2NrOwo+
ICsJLyogVHJhY2tzIGlmIHRoaXMgcmluZyB3YXMgaW5pdGlhbGl6ZWQuICovCj4gKwlib29sIGlu
aXRpYWxpemVkOwo+ICt9Owo+ICAKPiAgc3RydWN0IHA5ZnJvbnRfZGV2IHsKPiAgCS8qIFhlbmJ1
cyBkZXZpY2UuICovCj4gQEAgLTUwLDYgKzcyLDEzIEBAIHN0cnVjdCBwOWZyb250X2RldiB7Cj4g
IAlpbnQgbWF4X3JpbmdfcGFnZV9vcmRlcjsKPiAgCS8qIE1vdW50IHRhZyBmb3IgdGhpcyBkZXZp
Y2UsIHJlYWQgZnJvbSB4ZW5zdG9yZS4gKi8KPiAgCWNoYXIgKnRhZzsKPiArCj4gKwkvKiBOdW1i
ZXIgb2YgcmluZ3MgdG8gdXNlLiAqLwo+ICsJaW50IG5iX3JpbmdzOwo+ICsJLyogUmluZyBwYWdl
IG9yZGVyLiAqLwo+ICsJaW50IHJpbmdfb3JkZXI7Cj4gKwkvKiBEZXZpY2UgZGF0YSByaW5ncy4g
Ki8KPiArCXN0cnVjdCBwOWZyb250X2Rldl9yaW5nICpyaW5nczsKPiAgfTsKPiAgCj4gICNlbmRp
ZiAvKiBfXzlQRlJPTlRfSF9fICovCj4gZGlmZiAtLWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAv
OXBmcm9udF94Yi5oIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250X3hiLmgKPiBpbmRleCAy
MjRkZjdhZi4uNmUyNjk3ZjkgMTAwNjQ0Cj4gLS0tIGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZy
b250X3hiLmgKPiArKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRfeGIuaAo+IEBAIC01
MCw0ICs1MCwxNiBAQAo+ICAgKi8KPiAgaW50IHA5ZnJvbnRfeGJfaW5pdChzdHJ1Y3QgcDlmcm9u
dF9kZXYgKnA5ZmRldik7Cj4gIAo+ICsvKioKPiArICogQ29ubmVjdHMgdG8gdGhlIGJhY2tlbmQg
Ynkgc2V0dGluZyB1cCB0aGUgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCj4gKyAqIGZyb250ZW5kIGFu
ZCBiYWNrZW5kLgo+ICsgKgo+ICsgKiBAcGFyYW0gcDlmZGV2Cj4gKyAqICAgOVAgZnJvbnRlbmQg
ZGV2aWNlCj4gKyAqIEByZXR1cm4KPiArICogICAtICgwKTogU3VjY2Vzc2Z1bC4KPiArICogICAt
ICg8IDApOiBFcnJvciB3aGlsZSBjb21taXR0aW5nIFhlblN0b3JlIHRyYW5zYWN0aW9uLgo+ICsg
Ki8KPiAraW50IHA5ZnJvbnRfeGJfY29ubmVjdChzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldik7
Cj4gKwo+ICAjZW5kaWYgLyogX185UEZST05UX1hCX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9wbGF0
L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnRfeHMuYyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9u
dF94cy5jCj4gaW5kZXggNWI1ZGMyZTQuLjcxODUwNjFjIDEwMDY0NAo+IC0tLSBhL3BsYXQveGVu
L2RyaXZlcnMvOXAvOXBmcm9udF94cy5jCj4gKysrIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZy
b250X3hzLmMKPiBAQCAtMTU0LDMgKzE1NCwyMDcgQEAgaW50IHA5ZnJvbnRfeGJfaW5pdChzdHJ1
Y3QgcDlmcm9udF9kZXYgKnA5ZmRldikKPiAgb3V0Ogo+ICAJcmV0dXJuIHJjOwo+ICB9Cj4gKwo+
ICtzdGF0aWMgaW50IHhzX3dyaXRlX3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYsCj4g
KwkJCSBpbnQgaSwKPiArCQkJIHhlbmJ1c190cmFuc2FjdGlvbl90IHhidCkKPiArewo+ICsJc3Ry
dWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiA9IHA5ZmRldi0+eGVuZGV2Owo+ICsJc3RydWN0IHA5
ZnJvbnRfZGV2X3JpbmcgKnJpbmcgPSAmcDlmZGV2LT5yaW5nc1tpXTsKPiArCWNoYXIgKnBhdGg7
Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJcmMgPSBhc3ByaW50ZigmcGF0aCwgInJpbmctcmVmJXUiLCBp
KTsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJcmMgPSB4c19wcmludGYo
eGJ0LCB4ZW5kZXYtPm5vZGVuYW1lLCBwYXRoLCAiJXUiLCByaW5nLT5yZWYpOwo+ICsJaWYgKHJj
IDwgMCkKPiArCQlnb3RvIG91dF9wYXRoOwo+ICsKPiArCWZyZWUocGF0aCk7Cj4gKwlyYyA9IGFz
cHJpbnRmKCZwYXRoLCAiZXZlbnQtY2hhbm5lbC0ldSIsIGkpOwo+ICsJaWYgKHJjIDwgMCkKPiAr
CQlnb3RvIG91dDsKPiArCj4gKwlyYyA9IHhzX3ByaW50Zih4YnQsIHhlbmRldi0+bm9kZW5hbWUs
IHBhdGgsICIldSIsIHJpbmctPmV2dGNobik7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCWdvdG8gb3V0
X3BhdGg7Cj4gKwo+ICsJcmMgPSAwOwo+ICsKPiArb3V0X3BhdGg6Cj4gKwlmcmVlKHBhdGgpOwo+
ICtvdXQ6Cj4gKwlyZXR1cm4gcmM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHhzX2RlbGV0ZV9y
aW5nKHN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2LAo+ICsJCQkgICBpbnQgaSwKPiArCQkJICAg
eGVuYnVzX3RyYW5zYWN0aW9uX3QgeGJ0KQo+ICt7Cj4gKwlzdHJ1Y3QgeGVuYnVzX2RldmljZSAq
eGVuZGV2ID0gcDlmZGV2LT54ZW5kZXY7Cj4gKwlpbnQgcmM7Cj4gKwljaGFyICpwYXRoOwo+ICsK
PiArCXJjID0gYXNwcmludGYoJnBhdGgsICIlcy9yaW5nLXJlZiV1IiwgeGVuZGV2LT5ub2RlbmFt
ZSwgaSk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCXJldHVybjsKPiArCXhzX3JtKHhidCwgcGF0aCk7
Cj4gKwlmcmVlKHBhdGgpOwo+ICsKPiArCXJjID0gYXNwcmludGYoJnBhdGgsICIlcy9ldmVudC1j
aGFubmVsLSV1IiwgeGVuZGV2LT5ub2RlbmFtZSwgaSk7Cj4gKwlpZiAocmMgPCAwKQo+ICsJCXJl
dHVybjsKPiArCXhzX3JtKHhidCwgcGF0aCk7Cj4gKwlmcmVlKHBhdGgpOwo+ICt9Cj4gKwo+ICtz
dGF0aWMgaW50IHA5ZnJvbnRfeGJfZnJvbnRfaW5pdChzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRl
diwKPiArCQkJCSB4ZW5idXNfdHJhbnNhY3Rpb25fdCB4YnQpCj4gK3sKPiArCWludCBpLCByYzsK
PiArCXN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYgPSBwOWZkZXYtPnhlbmRldjsKPiArCj4g
KwkvKgo+ICsJICogQXNzZXJ0IHRoYXQgdGhlIHA5ZmRldiByaW5nIGluZm9ybWF0aW9uIGhhcyBi
ZWVuIHByb3Blcmx5Cj4gKwkgKiBjb25maWd1cmVkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGNvbm5l
Y3QuCj4gKwkgKi8KPiArCVVLX0FTU0VSVChwOWZkZXYtPm5iX3JpbmdzICE9IDAgJiYgcDlmZGV2
LT5uYl9yaW5ncyA8PSA5KTsKPiArCVVLX0FTU0VSVChwOWZkZXYtPnJpbmdfb3JkZXIgIT0gMCk7
Cj4gKwo+ICsJLyoKPiArCSAqIEFzc2VydCB0aGF0IHRoZSBwOWZkZXYgcmluZ3MgaGF2ZSBiZWVu
IGluaXRpYWxpemVkLgo+ICsJICovCj4gKwlVS19BU1NFUlQocDlmZGV2LT5yaW5ncyAhPSBOVUxM
KTsKPiArCj4gKwkvKiBXcml0ZSB2ZXJzaW9uLi4uICovCj4gKwlyYyA9IHhzX3ByaW50Zih4YnQs
IHhlbmRldi0+bm9kZW5hbWUsICJ2ZXJzaW9uIiwgIiV1IiwgMSk7Cj4gKwlpZiAocmMgPCAwKQo+
ICsJCWdvdG8gb3V0Owo+ICsKPiArCS8qIC4uLiBhbmQgbnVtLXJpbmdzLi4uICovCj4gKwlyYyA9
IHhzX3ByaW50Zih4YnQsIHhlbmRldi0+bm9kZW5hbWUsICJudW0tcmluZ3MiLCAiJXUiLAo+ICsJ
CQlwOWZkZXYtPm5iX3JpbmdzKTsKPiArCWlmIChyYyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwo+
ICsJLyogLi4uIGFuZCBlYWNoIHJpbmcuICovCj4gKwlmb3IgKGkgPSAwOyBpIDwgcDlmZGV2LT5u
Yl9yaW5nczsgaSsrKSB7Cj4gKwkJcmMgPSB4c193cml0ZV9yaW5nKHA5ZmRldiwgaSwgeGJ0KTsK
PiArCQlpZiAocmMpCj4gKwkJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArb3V0Ogo+ICsJcmV0dXJu
IHJjOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBwOWZyb250X3hiX2Zyb250X2Zpbmkoc3RydWN0
IHA5ZnJvbnRfZGV2ICpwOWZkZXYsCj4gKwkJCQkgIHhlbmJ1c190cmFuc2FjdGlvbl90IHhidCkK
PiArewo+ICsJaW50IGk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHA5ZmRldi0+bmJfcmluZ3M7
IGkrKykKPiArCQl4c19kZWxldGVfcmluZyhwOWZkZXYsIGksIHhidCk7Cj4gK30KPiArCj4gK3N0
YXRpYyBpbnQgYmVfd2F0Y2hfc3RhcnQoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiwgY29u
c3QgY2hhciAqcGF0aCkKPiArewo+ICsJc3RydWN0IHhlbmJ1c193YXRjaCAqd2F0Y2g7Cj4gKwo+
ICsJd2F0Y2ggPSB4c193YXRjaF9wYXRoKFhCVF9OSUwsIHBhdGgpOwo+ICsJaWYgKFBUUklTRVJS
KHdhdGNoKSkKPiArCQlyZXR1cm4gUFRSMkVSUih3YXRjaCk7Cj4gKwo+ICsJeGVuZGV2LT5vdGhl
cmVuZF93YXRjaCA9IHdhdGNoOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMg
aW50IGJlX3dhdGNoX3N0b3Aoc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldikKPiArewo+ICsJ
cmV0dXJuIHhzX3Vud2F0Y2goWEJUX05JTCwgeGVuZGV2LT5vdGhlcmVuZF93YXRjaCk7Cj4gK30K
PiArCj4gKyNkZWZpbmUgV0FJVF9CRV9TVEFURV9DSEFOR0VfV0hJTEVfQ09ORChzdGF0ZV9jb25k
KSBcCj4gKwlkbyB7IFwKPiArCQlyYyA9IHhzX3JlYWRfaW50ZWdlcihYQlRfTklMLCBiZV9zdGF0
ZV9wYXRoLCBcCj4gKwkJCShpbnQgKikgJmJlX3N0YXRlKTsgXAo+ICsJCWlmIChyYykgXAo+ICsJ
CQlnb3RvIG91dDsgXAo+ICsJCXdoaWxlICghcmMgJiYgKHN0YXRlX2NvbmQpKSBcCj4gKwkJCXJj
ID0geGVuYnVzX3dhaXRfZm9yX3N0YXRlX2NoYW5nZShiZV9zdGF0ZV9wYXRoLCBcCj4gKwkJCQkm
YmVfc3RhdGUsIHhlbmRldi0+b3RoZXJlbmRfd2F0Y2gpOyBcCj4gKwkJaWYgKHJjKSBcCj4gKwkJ
CWdvdG8gb3V0OyBcCj4gKwl9IHdoaWxlICgwKQo+ICsKPiArc3RhdGljIGludCBwOWZyb250X3hi
X3dhaXRfYmVfY29ubmVjdChzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldikKPiArewo+ICsJc3Ry
dWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldiA9IHA5ZmRldi0+eGVuZGV2Owo+ICsJY2hhciBiZV9z
dGF0ZV9wYXRoW3N0cmxlbih4ZW5kZXYtPm90aGVyZW5kKSArIHNpemVvZigiL3N0YXRlIildOwo+
ICsJWGVuYnVzU3RhdGUgYmVfc3RhdGU7Cj4gKwlpbnQgcmM7Cj4gKwo+ICsJc3ByaW50ZihiZV9z
dGF0ZV9wYXRoLCAiJXMvc3RhdGUiLCB4ZW5kZXYtPm90aGVyZW5kKTsKPiArCj4gKwlyYyA9IGJl
X3dhdGNoX3N0YXJ0KHhlbmRldiwgYmVfc3RhdGVfcGF0aCk7Cj4gKwlpZiAocmMpCj4gKwkJZ290
byBvdXQ7Cj4gKwo+ICsJV0FJVF9CRV9TVEFURV9DSEFOR0VfV0hJTEVfQ09ORChiZV9zdGF0ZSA8
IFhlbmJ1c1N0YXRlQ29ubmVjdGVkKTsKPiArCj4gKwlpZiAoYmVfc3RhdGUgIT0gWGVuYnVzU3Rh
dGVDb25uZWN0ZWQpIHsKPiArCQl1a19wcl9lcnIoIkJhY2tlbmQgbm90IGF2YWlsYWJsZSwgc3Rh
dGU9JXNcbiIsCj4gKwkJCQl4ZW5idXNfc3RhdGVfdG9fc3RyKGJlX3N0YXRlKSk7Cj4gKwkJYmVf
d2F0Y2hfc3RvcCh4ZW5kZXYpOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXJjID0geGVu
YnVzX3N3aXRjaF9zdGF0ZShYQlRfTklMLCB4ZW5kZXYsIFhlbmJ1c1N0YXRlQ29ubmVjdGVkKTsK
PiArCWlmIChyYykKPiArCQlnb3RvIG91dDsKPiArCj4gK291dDoKPiArCXJldHVybiByYzsKPiAr
fQo+ICsKPiAraW50IHA5ZnJvbnRfeGJfY29ubmVjdChzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRl
dikKPiArewo+ICsJc3RydWN0IHhlbmJ1c19kZXZpY2UgKnhlbmRldjsKPiArCXhlbmJ1c190cmFu
c2FjdGlvbl90IHhidDsKPiArCWludCByYzsKPiArCj4gKwlVS19BU1NFUlQocDlmZGV2ICE9IE5V
TEwpOwo+ICsKPiArCXhlbmRldiA9IHA5ZmRldi0+eGVuZGV2Owo+ICsJVUtfQVNTRVJUKHhlbmRl
diAhPSBOVUxMKTsKPiArCj4gK2FnYWluOgo+ICsJcmMgPSB4c190cmFuc2FjdGlvbl9zdGFydCgm
eGJ0KTsKPiArCWlmIChyYykKPiArCQlnb3RvIGFib3J0X3RyYW5zYWN0aW9uOwo+ICsKPiArCXJj
ID0gcDlmcm9udF94Yl9mcm9udF9pbml0KHA5ZmRldiwgeGJ0KTsKPiArCWlmIChyYykKPiArCQln
b3RvIGFib3J0X3RyYW5zYWN0aW9uOwo+ICsKPiArCXJjID0geGVuYnVzX3N3aXRjaF9zdGF0ZSh4
YnQsIHhlbmRldiwgWGVuYnVzU3RhdGVJbml0aWFsaXNlZCk7Cj4gKwlpZiAocmMpCj4gKwkJZ290
byBhYm9ydF90cmFuc2FjdGlvbjsKPiArCj4gKwlyYyA9IHhzX3RyYW5zYWN0aW9uX2VuZCh4YnQs
IDApOwo+ICsJaWYgKHJjID09IC1FQUdBSU4pCj4gKwkJZ290byBhZ2FpbjsKPiArCj4gKwlyYyA9
IHA5ZnJvbnRfeGJfd2FpdF9iZV9jb25uZWN0KHA5ZmRldik7Cj4gKwlpZiAocmMpCj4gKwkJcDlm
cm9udF94Yl9mcm9udF9maW5pKHA5ZmRldiwgWEJUX05JTCk7Cj4gKwo+ICsJcmV0dXJuIHJjOwo+
ICsKPiArYWJvcnRfdHJhbnNhY3Rpb246Cj4gKwl4c190cmFuc2FjdGlvbl9lbmQoeGJ0LCAxKTsK
PiArCXJldHVybiByYzsKPiArfQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:28:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:28:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xwt-0005PM-8V; Sat, 07 Sep 2019 10:28:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xwr-0005PC-MD
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:28:05 +0000
X-Inumbo-ID: 2d0989ec-d15a-11e9-b299-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2d0989ec-d15a-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:28:04 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id s18so9001871wrn.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:28:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=UGHlKituG3eoHuJwf4+Ki4v3tYNodENPODJm7DN8js0=;
 b=IzI8c8Orhz/VV5o3YgFKV9rDK60vsNMyL0azrcIS7Kto4i9YiZifdu0qUQjyfHe0gO
 spMCgmCiSsfvNcr8BRlJrHyPrwS8ArGk0cdPgvJoutkVlOSqfCe1c8LCH8oBDHKbpF3L
 vXlLv2zsuzrOBraLTC8kdvmrpCRdgKHqxZyN65gp5MekLvPp9Ziz3ek6kXnDoHsVAC1A
 Kdqu+9ch7MNJA6GZC//+a9jAkyiBFkyESQnRpWSCor6YLqMFpLsGxMa9UeGWh2T9xHqU
 wZzX1fZy5h+OJWU2n64oChzNLjAJws4EgrgGMAboCwe+gcDWfzqTPJbJ/cMZfgo7YEvb
 Vbcg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=UGHlKituG3eoHuJwf4+Ki4v3tYNodENPODJm7DN8js0=;
 b=itGZlhGkvDuLEekOk4OuxSKI4Y5xYRiikGSxvYwvXIcEedyntz8r5N1nnOT8BbndPV
 TybMDZNTindqyGAr07xYJ85+IKc9bmjK0I9OlR7PUqLoZ16biMsEp7w3hMs+75A3xYz0
 PXFVz0xFgUNJUgzi7JyOz5Q78ExsVDwqeVXFU4oOUkrO8MJIlEr7H/Bt+RCbV3Mi8ywP
 7iVnoOB4SWkwqIK25eYFfpVSXipu0Vrm0ZPxTUINZCjnWkpJoCjAIevMxdMw9OOUZjOy
 ns0jmS8hbY9f2uwLuAQGb764ISvOvaXZ2ZVLTP8ejP0d/dDmRPpQ1wmq3ZCLQi8ELeZP
 R82Q==
X-Gm-Message-State: APjAAAWjpPcKHI9FikAfbyOvq+t+Lrc1sNPhVCmQ3sWRe4YAalAhWKuo
 RYQCMKRG5h1Y63XqUdxVmwM=
X-Google-Smtp-Source: APXvYqwD3XaOP2KQw8gkY+li6StS0moOG70UTCvzRYMuy+NXfoVnzxZ4+x0eK8o7dfD/CDpXKXZ48w==
X-Received: by 2002:a5d:4f8c:: with SMTP id d12mr10983568wru.150.1567852084142; 
 Sat, 07 Sep 2019 03:28:04 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id 33sm4660804wra.41.2019.09.07.03.28.03
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:28:03 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-7-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <c3ab36b0-9501-b678-f94d-999ccdf09b71@gmail.com>
Date: Sat, 7 Sep 2019 13:28:03 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-7-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 6/9] plat/xen/drivers/9p:
 Register 9P transport
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGRzIHN0dWJz
IGZvciB0aGUgY2FsbGJhY2tzIHJlcXVpcmVkIGJ5IHRoZSB0cmFuc3BvcnQgbGF5ZXIKPiBhbmQg
cmVnaXN0ZXJzIHRoZSB0cmFuc3BvcnQgd2l0aCB0aGUgOVAgQVBJLgo+IAo+IFNpZ25lZC1vZmYt
Ynk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gLS0tCj4gIHBsYXQveGVuL2Ry
aXZlcnMvOXAvOXBmcm9udC5jIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
Ky0KPiAgMSBmaWxlIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAK
PiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgYi9wbGF0L3hlbi9k
cml2ZXJzLzlwLzlwZnJvbnQuYwo+IGluZGV4IDM4OThjYjg1Li4xMjU5MWQwNyAxMDA2NDQKPiAt
LS0gYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYwo+ICsrKyBiL3BsYXQveGVuL2RyaXZl
cnMvOXAvOXBmcm9udC5jCj4gQEAgLTM4LDYgKzM4LDkgQEAKPiAgI2luY2x1ZGUgPHVrL2Fzc2Vy
dC5oPgo+ICAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgo+ICAjaW5jbHVkZSA8dWsvbGlzdC5o
Pgo+ICsjaW5jbHVkZSA8dWsvOXBkZXYuaD4KPiArI2luY2x1ZGUgPHVrLzlwcmVxLmg+Cj4gKyNp
bmNsdWRlIDx1ay85cGRldl90cmFucy5oPgo+ICAjaW5jbHVkZSA8dWsvcGxhdC9zcGlubG9jay5o
Pgo+ICAjaW5jbHVkZSA8eGVuLXg4Ni9tbS5oPgo+ICAjaW5jbHVkZSA8eGVuLXg4Ni9pcnEuaD4K
PiBAQCAtMTg3LDE0ICsxOTAsNDYgQEAgb3V0Ogo+ICAJcmV0dXJuIHJjOwo+ICB9Cj4gIAo+ICtz
dGF0aWMgaW50IHA5ZnJvbnRfY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2Vk
LAo+ICsJCQkgICBjb25zdCBjaGFyICpkZXZpY2VfaWRlbnRpZmllciBfX3VudXNlZCwKPiArCQkJ
ICAgY29uc3QgY2hhciAqbW91bnRfYXJncyBfX3VudXNlZCkKPiArewo+ICsJcmV0dXJuIDA7Cj4g
K30KPiArCj4gK3N0YXRpYyBpbnQgcDlmcm9udF9kaXNjb25uZWN0KHN0cnVjdCB1a185cGRldiAq
cDlkZXYgX191bnVzZWQpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50
IHA5ZnJvbnRfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2VkLAo+ICsJCQkg
ICBzdHJ1Y3QgdWtfOXByZXEgKnJlcSBfX3VudXNlZCkKPiArewo+ICsJcmV0dXJuIDA7Cj4gK30K
PiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdWtfOXBkZXZfdHJhbnNfb3BzIHA5ZnJvbnRfdHJh
bnNfb3BzID0gewo+ICsJLmNvbm5lY3QgICAgICAgID0gcDlmcm9udF9jb25uZWN0LAo+ICsJLmRp
c2Nvbm5lY3QgICAgID0gcDlmcm9udF9kaXNjb25uZWN0LAo+ICsJLnJlcXVlc3QgICAgICAgID0g
cDlmcm9udF9yZXF1ZXN0Cj4gK307Cj4gKwo+ICtzdGF0aWMgc3RydWN0IHVrXzlwZGV2X3RyYW5z
IHA5ZnJvbnRfdHJhbnMgPSB7Cj4gKwkubmFtZSAgICAgICAgICAgPSAieGVuIiwKPiArCS5vcHMg
ICAgICAgICAgICA9ICZwOWZyb250X3RyYW5zX29wcywKPiArCS5hICAgICAgICAgICAgICA9IE5V
TEwgLyogU2V0IGJlbG93LiAqLwo+ICt9Owo+ICsKPiArCj4gIHN0YXRpYyBpbnQgcDlmcm9udF9k
cnZfaW5pdChzdHJ1Y3QgdWtfYWxsb2MgKmRydl9hbGxvY2F0b3IpCj4gIHsKPiAgCWlmICghZHJ2
X2FsbG9jYXRvcikKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gIAlhID0gZHJ2X2FsbG9jYXRv
cjsKPiArCXA5ZnJvbnRfdHJhbnMuYSA9IGE7Cj4gIAo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4g
dWtfOXBkZXZfdHJhbnNfcmVnaXN0ZXIoJnA5ZnJvbnRfdHJhbnMpOwo+ICB9Cj4gIAo+ICBzdGF0
aWMgaW50IHA5ZnJvbnRfYWRkX2RldihzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2KQo+IAoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:28:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:28:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xwz-0005Q5-AF; Sat, 07 Sep 2019 10:28:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xwy-0005Pv-D8
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:28:12 +0000
X-Inumbo-ID: 3113b6e8-d15a-11e9-978d-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3113b6e8-d15a-11e9-978d-bc764e2007e4;
 Sat, 07 Sep 2019 10:28:11 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id q14so8975536wrm.9
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:28:11 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=S44JMHvi+Cwa7lmjzoDWLXrGnThkO7raOxHnZ625EW8=;
 b=kTW8tkf+dAj5rU5Myoz9yKhUOEkbLfdwKFVJUSzopH+OGhz32ttE8NTLZtl+Ro+8Oj
 pwOLgHpJmodibOaGoHR4FrySEVY56MKHIzpAA/qM/dNTgdtTMlAoRoRhHCJYHNq9VUcB
 T+NaZWMsHLNohUX50/C0HclZBuRY4PGIatNQZYD0hkrQOywSoZSxzIfW0NP49VaXRNiC
 hQoyva+8zUeAlxvk1dW7zQhnTnsiGpBRLP9UDyQhUFXsxVtKHuRLhZ3CQtZvbbqlGRYF
 VsJV9CWaX2fueuID8KSDqIgzOYVVPb/Ja2wqpDNhUiVDYyVaZ2OVWxkwuAPRkeKMDqr9
 GLoA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=S44JMHvi+Cwa7lmjzoDWLXrGnThkO7raOxHnZ625EW8=;
 b=R+RPCfdWwaF3ot1HqWzomN2axS26QTD/BZKRdJ5usrDFomPv/hHS8mMkwD2pQBpqi1
 /LbZ+X4jbuoQA1cUOyJ2Om36586BiK+gQmCjC/54Wz2JjnZp9HnaSeciJ5G+fvtfwsqh
 Q4vjOKrc+bZTlD+CyS8cz+bW8xMncrQ98YUXVx3Ynv1lFFsgSeODOdCeDyPmtfLQ7UE7
 YxJoV7g2xvpD7nZbbS+TuYZ9EJ02CVtFq+ZnRHaSGx6QsIdpy0PyChFYhRO+mLgRhQWW
 HZ4TAbZnRUjdZJMcN2wArZUELvh3kFyskDKqhWkHSVqgkJqDv6GiVt/bVisKcfaSy2RH
 55Vg==
X-Gm-Message-State: APjAAAU2d7OE2lVGpqNLkLYgUhWI+Mm9Cz5rpL3llkBfOIHDry/Uy+PW
 YYrVkLsIm9Jk6F68XSYxhQk=
X-Google-Smtp-Source: APXvYqx7EZlhws0iIhMUDbeG6J/klOEXeqMv6KBGSkkcLc05b9AoveVr3GLi8GQuu58LtbPLyFfd8g==
X-Received: by 2002:a5d:4041:: with SMTP id w1mr2951625wrp.313.1567852090899; 
 Sat, 07 Sep 2019 03:28:10 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id j22sm16359525wre.45.2019.09.07.03.28.10
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:28:10 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-8-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <7a6ee21c-3917-6681-fbe5-3c355e2d8baa@gmail.com>
Date: Sat, 7 Sep 2019 13:28:09 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-8-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 7/9] plat/xen/drivers/9p: Add
 connection callbacks
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGRzIGNvbm5l
Y3Rpb24gYW5kIGRpc2Nvbm5lY3Rpb24gY2FsbGJhY2tzIHRvIHRoZSB4ZW4gOVAKPiB0cmFuc3Bv
cnQgZHJpdmVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFp
bC5jb20+Cj4gLS0tCj4gIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jIHwgNTEgKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0KPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZy
b250LmggfCAgMyArKy0KPiAgMiBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCA3IGRl
bGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQu
YyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gaW5kZXggMTI1OTFkMDcuLjFhOGI0
OWM1IDEwMDY0NAo+IC0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gKysrIGIv
cGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKPiBAQCAtMTkwLDE1ICsxOTAsNTUgQEAgb3V0
Ogo+ICAJcmV0dXJuIHJjOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW50IHA5ZnJvbnRfY29ubmVjdChz
dHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2VkLAo+IC0JCQkgICBjb25zdCBjaGFyICpkZXZp
Y2VfaWRlbnRpZmllciBfX3VudXNlZCwKPiArc3RhdGljIGludCBwOWZyb250X2Nvbm5lY3Qoc3Ry
dWN0IHVrXzlwZGV2ICpwOWRldiwKPiArCQkJICAgY29uc3QgY2hhciAqZGV2aWNlX2lkZW50aWZp
ZXIsCj4gIAkJCSAgIGNvbnN0IGNoYXIgKm1vdW50X2FyZ3MgX191bnVzZWQpCj4gIHsKPiAtCXJl
dHVybiAwOwo+ICsJc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYgPSBOVUxMOwo+ICsJaW50IHJj
ID0gMDsKPiArCWludCBmb3VuZCA9IDA7Cj4gKwo+ICsJdWthcmNoX3NwaW5fbG9jaygmcDlmcm9u
dF9kZXZpY2VfbGlzdF9sb2NrKTsKPiArCXVrX2xpc3RfZm9yX2VhY2hfZW50cnkocDlmZGV2LCAm
cDlmcm9udF9kZXZpY2VfbGlzdCwgX2xpc3QpIHsKPiArCQlpZiAoIXN0cmNtcChwOWZkZXYtPnRh
ZywgZGV2aWNlX2lkZW50aWZpZXIpKSB7Cj4gKwkJCWlmIChwOWZkZXYtPnA5ZGV2ICE9IE5VTEwp
IHsKPiArCQkJCXJjID0gLUVCVVNZOwo+ICsJCQkJZ290byBvdXQ7Cj4gKwkJCX0KPiArCQkJZm91
bmQgPSAxOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKCFmb3VuZCkgewo+
ICsJCXJjID0gLUVOT0RFVjsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwkvKiBUaGUgbXNp
emUgaXMgZ2l2ZW4gYnkgdGhlIHNpemUgb2YgdGhlIGZsZXggcmluZy4gKi8KPiArCXA5ZGV2LT5t
YXhfbXNpemUgPSBYRU5fRkxFWF9SSU5HX1NJWkUocDlmZGV2LT5yaW5nX29yZGVyKTsKPiArCj4g
KwlwOWZkZXYtPnA5ZGV2ID0gcDlkZXY7Cj4gKwlwOWRldi0+cHJpdiA9IHA5ZmRldjsKPiArCXJj
ID0gMDsKPiArCWZvdW5kID0gMTsKPiArCj4gK291dDoKPiArCXVrYXJjaF9zcGluX3VubG9jaygm
cDlmcm9udF9kZXZpY2VfbGlzdF9sb2NrKTsKPiArCXJldHVybiByYzsKPiAgfQo+ICAKPiAgc3Rh
dGljIGludCBwOWZyb250X2Rpc2Nvbm5lY3Qoc3RydWN0IHVrXzlwZGV2ICpwOWRldiBfX3VudXNl
ZCkKPiAgewo+ICsJc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXY7Cj4gKwo+ICsJVUtfQVNTRVJU
KHA5ZGV2KTsKPiArCXA5ZmRldiA9IHA5ZGV2LT5wcml2Owo+ICsKPiArCXVrYXJjaF9zcGluX2xv
Y2soJnA5ZnJvbnRfZGV2aWNlX2xpc3RfbG9jayk7Cj4gKwlwOWZkZXYtPnA5ZGV2ID0gTlVMTDsK
PiArCXVrYXJjaF9zcGluX3VubG9jaygmcDlmcm9udF9kZXZpY2VfbGlzdF9sb2NrKTsKPiArCj4g
IAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBAQCAtMjM2LDcgKzI3Niw2IEBAIHN0YXRpYyBpbnQgcDlm
cm9udF9hZGRfZGV2KHN0cnVjdCB4ZW5idXNfZGV2aWNlICp4ZW5kZXYpCj4gIHsKPiAgCXN0cnVj
dCBwOWZyb250X2RldiAqcDlmZGV2Owo+ICAJaW50IHJjOwo+IC0JdW5zaWduZWQgbG9uZyBmbGFn
czsKPiAgCj4gIAlwOWZkZXYgPSB1a19jYWxsb2MoYSwgMSwgc2l6ZW9mKCpwOWZkZXYpKTsKPiAg
CWlmICghcDlmZGV2KSB7Cj4gQEAgLTI3MSw5ICszMTAsOSBAQCBzdGF0aWMgaW50IHA5ZnJvbnRf
YWRkX2RldihzdHJ1Y3QgeGVuYnVzX2RldmljZSAqeGVuZGV2KQo+ICAJfQo+ICAKPiAgCXJjID0g
MDsKPiAtCXVrcGxhdF9zcGluX2xvY2tfaXJxc2F2ZSgmcDlmcm9udF9kZXZpY2VfbGlzdF9sb2Nr
LCBmbGFncyk7Cj4gKwl1a2FyY2hfc3Bpbl9sb2NrKCZwOWZyb250X2RldmljZV9saXN0X2xvY2sp
Owo+ICAJdWtfbGlzdF9hZGQoJnA5ZmRldi0+X2xpc3QsICZwOWZyb250X2RldmljZV9saXN0KTsK
PiAtCXVrcGxhdF9zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwOWZyb250X2RldmljZV9saXN0X2xv
Y2ssIGZsYWdzKTsKPiArCXVrYXJjaF9zcGluX3VubG9jaygmcDlmcm9udF9kZXZpY2VfbGlzdF9s
b2NrKTsKPiAgCj4gIAl1a19wcl9pbmZvKERSSVZFUl9OQU1FIjogQ29ubmVjdGVkIDlwZnJvbnQg
ZGV2OiB0YWc9JXMscmluZ3M9JWQsb3JkZXI9JWRcbiIsCj4gIAkJcDlmZGV2LT50YWcsIHA5ZmRl
di0+bmJfcmluZ3MsIHA5ZmRldi0+cmluZ19vcmRlcik7Cj4gZGlmZiAtLWdpdCBhL3BsYXQveGVu
L2RyaXZlcnMvOXAvOXBmcm9udC5oIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKPiBp
bmRleCA5N2M5ODZkOC4uN2NlYTYxYzUgMTAwNjQ0Cj4gLS0tIGEvcGxhdC94ZW4vZHJpdmVycy85
cC85cGZyb250LmgKPiArKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaAo+IEBAIC02
NCw2ICs2NCw4IEBAIHN0cnVjdCBwOWZyb250X2Rldl9yaW5nIHsKPiAgc3RydWN0IHA5ZnJvbnRf
ZGV2IHsKPiAgCS8qIFhlbmJ1cyBkZXZpY2UuICovCj4gIAlzdHJ1Y3QgeGVuYnVzX2RldmljZSAq
eGVuZGV2Owo+ICsJLyogOVAgQVBJIGRldmljZS4gKi8KPiArCXN0cnVjdCB1a185cGRldiAqcDlk
ZXY7Cj4gIAkvKiBFbnRyeSB3aXRoaW4gdGhlIDlwZnJvbnQgZGV2aWNlIGxpc3QuICovCj4gIAlz
dHJ1Y3QgdWtfbGlzdF9oZWFkIF9saXN0Owo+ICAJLyogTnVtYmVyIG9mIG1heGltdW0gcmluZ3Ms
IHJlYWQgZnJvbSB4ZW5zdG9yZS4gKi8KPiBAQCAtNzIsNyArNzQsNiBAQCBzdHJ1Y3QgcDlmcm9u
dF9kZXYgewo+ICAJaW50IG1heF9yaW5nX3BhZ2Vfb3JkZXI7Cj4gIAkvKiBNb3VudCB0YWcgZm9y
IHRoaXMgZGV2aWNlLCByZWFkIGZyb20geGVuc3RvcmUuICovCj4gIAljaGFyICp0YWc7Cj4gLQo+
ICAJLyogTnVtYmVyIG9mIHJpbmdzIHRvIHVzZS4gKi8KPiAgCWludCBuYl9yaW5nczsKPiAgCS8q
IFJpbmcgcGFnZSBvcmRlci4gKi8KPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:28:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:28:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Xx6-0005Qz-D2; Sat, 07 Sep 2019 10:28:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Xx5-0005Qp-2a
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:28:19 +0000
X-Inumbo-ID: 35017c36-d15a-11e9-978d-bc764e2007e4
Received: from mail-wm1-x344.google.com (unknown [2a00:1450:4864:20::344])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 35017c36-d15a-11e9-978d-bc764e2007e4;
 Sat, 07 Sep 2019 10:28:18 +0000 (UTC)
Received: by mail-wm1-x344.google.com with SMTP id p13so9659134wmh.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:28:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=Dz09NQEAv1gyyyccf+SeUA0/c7Byx5zKgMLzj5f0do0=;
 b=jEw3Cis95cY6F9yoCKHk/RlKWk8TXhv95HTYt3CoI1Z8FllhCdlscJj8LI1oWOU40N
 HieyXTlb/jxSuYTVx1gGOHacmMXe2gUPvrkFqYaagTq2dpl1wP6pZgAT9TsIB8P18XMo
 +8bV893NK0icVoyv6UEPMuHf3X4iyGStXH2jUkBiI9gay/NXlAfwivAZHr57eqQXleGj
 kmyCWU8BxmtZmwhaDHexQr9SNgkXGS7hmFb7C1kSoOcYP/1/hrLnFAUjETaYXcsr3VpJ
 tHtd2Jna81aPoYpOYNMFzJUFUeBYV03HsFpJ/ILKZLUkxjKORMHcZhgmQZLq7bQibGYQ
 SzeQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=Dz09NQEAv1gyyyccf+SeUA0/c7Byx5zKgMLzj5f0do0=;
 b=NprdCUospytFrm402TaFLWMGm6ksOh9qPXu+CEZZ1W/E1usUvOUAgRJYCGAMAxSmWa
 MwUgp4zwFTlsUUWaNNM6T8LCMRk45aHVT+NZ4ubPDmWLVBKYJyIpp+B8jZQu/j6SFG1g
 76yaL+mhmNEwmkoffmsLHcev41tMyAbwiwsjSyVatOEv7EtRTDIaI0Es/un1FOri4mCw
 cIYe9/slykGv2LZRHR8gxf7OnvN0YwyAkuUOHtwh+WhLUoifdwSetkF/aHbo4ws0EHj6
 bUJpCrwl64rZj9WdDu3kJgmmoR/AQuFt0/o+cOq5JWBXt3EEXwwixFET5OSORcl/1IsO
 UWtA==
X-Gm-Message-State: APjAAAW72Kpmu4hIWYUVdnJH5GWL+VkgDExsl1gxVyx6+ptbeIhMYChu
 a+5/9HT8y3qSyXv5Q6tRHvA=
X-Google-Smtp-Source: APXvYqxTK0v8sC1I/t/MQrnMEdCAPyhZ0cq0tv8iPTlsP516zEFnCLG8owwP2yH8OoQgVH2Ow/41Og==
X-Received: by 2002:a05:600c:3d2:: with SMTP id
 z18mr1500606wmd.169.1567852097477; 
 Sat, 07 Sep 2019 03:28:17 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id y3sm12229043wra.88.2019.09.07.03.28.16
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:28:17 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-9-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <8fd88604-420c-4e4d-5141-6302717da0de@gmail.com>
Date: Sat, 7 Sep 2019 13:28:16 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-9-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 8/9] plat/xen/drivers/9p:
 Implement request and recv
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBpbXBsZW1lbnQg
cmVxdWVzdCBhbmQgcmVjZWl2ZSBmdW5jdGlvbnMgZm9yIHRoZSB4ZW4gOVAKPiB0cmFuc3BvcnQg
ZHJpdmVyLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5j
b20+Cj4gLS0tCj4gIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jIHwgMTM4ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKy0KPiAgMSBmaWxlIGNoYW5nZWQsIDEzNCBpbnNlcnRp
b25zKCspLCA0IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJz
LzlwLzlwZnJvbnQuYyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gaW5kZXggMWE4
YjQ5YzUuLmE1MzIxODk4IDEwMDY0NAo+IC0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9u
dC5jCj4gKysrIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMKPiBAQCAtMzcsNiArMzcs
NyBAQAo+ICAjaW5jbHVkZSA8dWsvYWxsb2MuaD4KPiAgI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgo+
ICAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgo+ICsjaW5jbHVkZSA8dWsvZXJycHRyLmg+Cj4g
ICNpbmNsdWRlIDx1ay9saXN0Lmg+Cj4gICNpbmNsdWRlIDx1ay85cGRldi5oPgo+ICAjaW5jbHVk
ZSA8dWsvOXByZXEuaD4KPiBAQCAtNTQsMTAgKzU1LDk2IEBAIHN0YXRpYyBzdHJ1Y3QgdWtfYWxs
b2MgKmE7Cj4gIHN0YXRpYyBVS19MSVNUX0hFQUQocDlmcm9udF9kZXZpY2VfbGlzdCk7Cj4gIHN0
YXRpYyBERUZJTkVfU1BJTkxPQ0socDlmcm9udF9kZXZpY2VfbGlzdF9sb2NrKTsKPiAgCj4gLXN0
YXRpYyB2b2lkIHA5ZnJvbnRfaGFuZGxlcihldnRjaG5fcG9ydF90IGV2dGNobiBfX3VudXNlZCwK
PiArc3RydWN0IHA5ZnJvbnRfaGVhZGVyIHsKPiArCXVpbnQzMl90IHNpemU7Cj4gKwl1aW50OF90
IHR5cGU7Cj4gKwl1aW50MTZfdCB0YWc7Cj4gK30gX19wYWNrZWQ7Cj4gKwo+ICtzdGF0aWMgdm9p
ZCBwOWZyb250X3JlY3Yoc3RydWN0IHA5ZnJvbnRfZGV2X3JpbmcgKnJpbmcpCj4gK3sKPiArCXN0
cnVjdCBwOWZyb250X2RldiAqcDlmZGV2ID0gcmluZy0+ZGV2Owo+ICsJZXZ0Y2huX3BvcnRfdCBl
dnRjaG4gPSByaW5nLT5ldnRjaG47Cj4gKwlSSU5HX0lEWCBjb25zLCBwcm9kLCBtYXNrZWRfY29u
cywgbWFza2VkX3Byb2Q7Cj4gKwlpbnQgcmluZ19zaXplLCByYzsKPiArCXN0cnVjdCBwOWZyb250
X2hlYWRlciBoZHI7Cj4gKwlzdHJ1Y3QgdWtfOXByZXEgKnJlcTsKPiArCXVpbnQzMl90IGJ1Zl9j
bnQsIHpjX2J1Zl9jbnQ7Cj4gKwo+ICsJcmluZ19zaXplID0gWEVOX0ZMRVhfUklOR19TSVpFKHA5
ZmRldi0+cmluZ19vcmRlcik7Cj4gKwo+ICsJd2hpbGUgKDEpIHsKPiArCQljb25zID0gcmluZy0+
aW50Zi0+aW5fY29uczsKPiArCQlwcm9kID0gcmluZy0+aW50Zi0+aW5fcHJvZDsKPiArCQl4ZW5f
cm1iKCk7Cj4gKwo+ICsJCWlmICh4ZW5fOXBmc19xdWV1ZWQocHJvZCwgY29ucywgcmluZ19zaXpl
KSA8IHNpemVvZihoZHIpKSB7Cj4gKwkJCW5vdGlmeV9yZW1vdGVfdmlhX2V2dGNobihldnRjaG4p
Owo+ICsJCQlyZXR1cm47Cj4gKwkJfQo+ICsKPiArCQltYXNrZWRfcHJvZCA9IHhlbl85cGZzX21h
c2socHJvZCwgcmluZ19zaXplKTsKPiArCQltYXNrZWRfY29ucyA9IHhlbl85cGZzX21hc2soY29u
cywgcmluZ19zaXplKTsKPiArCj4gKwkJeGVuXzlwZnNfcmVhZF9wYWNrZXQoJmhkciwgcmluZy0+
ZGF0YS5pbiwgc2l6ZW9mKGhkciksCj4gKwkJCQltYXNrZWRfcHJvZCwgJm1hc2tlZF9jb25zLCBy
aW5nX3NpemUpOwo+ICsKPiArCQlyZXEgPSB1a185cGRldl9yZXFfbG9va3VwKHA5ZmRldi0+cDlk
ZXYsIGhkci50YWcpOwo+ICsJCWlmIChQVFJJU0VSUihyZXEpKSB7Cj4gKwkJCXVrX3ByX3dhcm4o
IkZvdW5kIGludmFsaWQgdGFnPSV1XG4iLCBoZHIudGFnKTsKPiArCQkJY29ucyArPSBoZHIuc2l6
ZTsKPiArCQkJeGVuX21iKCk7Cj4gKwkJCXJpbmctPmludGYtPmluX2NvbnMgPSBjb25zOwo+ICsJ
CQljb250aW51ZTsKPiArCQl9Cj4gKwo+ICsJCW1hc2tlZF9jb25zID0geGVuXzlwZnNfbWFzayhj
b25zLCByaW5nX3NpemUpOwo+ICsKPiArCQkvKgo+ICsJCSAqIENvbXB1dGUgYW1vdW50IG9mIGRh
dGEgdG8gcmVhZCBpbnRvIHJlcXVlc3QgYnVmZmVyIGFuZCBpbnRvCj4gKwkJICogemVyby1jb3B5
IGJ1ZmZlci4KPiArCQkgKi8KPiArCQlidWZfY250ID0gaGRyLnNpemU7Cj4gKwkJaWYgKGhkci50
eXBlICE9IFVLXzlQX1JFUlJPUiAmJiByZXEtPnJlY3YuemNfYnVmKQo+ICsJCQlidWZfY250ID0g
TUlOKGJ1Zl9jbnQsIHJlcS0+cmVjdi56Y19vZmZzZXQpOwo+ICsJCXpjX2J1Zl9jbnQgPSBoZHIu
c2l6ZSAtIGJ1Zl9jbnQ7Cj4gKwo+ICsJCXhlbl85cGZzX3JlYWRfcGFja2V0KHJlcS0+cmVjdi5i
dWYsIHJpbmctPmRhdGEuaW4sIGJ1Zl9jbnQsCj4gKwkJCQltYXNrZWRfcHJvZCwgJm1hc2tlZF9j
b25zLCByaW5nX3NpemUpOwo+ICsJCXhlbl85cGZzX3JlYWRfcGFja2V0KHJlcS0+cmVjdi56Y19i
dWYsIHJpbmctPmRhdGEuaW4sCj4gKwkJCQl6Y19idWZfY250LCBtYXNrZWRfcHJvZCwgJm1hc2tl
ZF9jb25zLAo+ICsJCQkJcmluZ19zaXplKTsKPiArCQljb25zICs9IGhkci5zaXplOwo+ICsJCXhl
bl9tYigpOwo+ICsJCXJpbmctPmludGYtPmluX2NvbnMgPSBjb25zOwo+ICsKPiArCQlyYyA9IHVr
XzlwcmVxX3JlY2VpdmVfY2IocmVxLCBoZHIuc2l6ZSk7Cj4gKwkJaWYgKHJjKQo+ICsJCQl1a19w
cl93YXJuKCJDb3VsZCBub3QgcmVjZWl2ZSByZXBseTogJWRcbiIsIHJjKTsKPiArCj4gKwkJLyog
UmVsZWFzZSByZWZlcmVuY2UgaGVsZCBieSB1a185cGRldl9yZXFfbG9va3VwKCkuICovCj4gKwkJ
dWtfOXByZXFfcHV0KHJlcSk7Cj4gKwl9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHA5ZnJvbnRf
aGFuZGxlcihldnRjaG5fcG9ydF90IGV2dGNobiwKPiAgCQkJICAgIHN0cnVjdCBfX3JlZ3MgKnJl
Z3MgX191bnVzZWQsCj4gLQkJCSAgICB2b2lkICphcmcgX191bnVzZWQpCj4gKwkJCSAgICB2b2lk
ICphcmcpCj4gIHsKPiArCXN0cnVjdCBwOWZyb250X2Rldl9yaW5nICpyaW5nID0gYXJnOwo+ICsK
PiArCVVLX0FTU0VSVChyaW5nKTsKPiArCVVLX0FTU0VSVChyaW5nLT5ldnRjaG4gPT0gZXZ0Y2hu
KTsKPiArCj4gKwkvKgo+ICsJICogQSBuZXcgaW50ZXJydXB0IG1lYW5zIHRoYXQgdGhlcmUgaXMg
YSByZXNwb25zZSB0byBiZSByZWNlaXZlZCwgd2hpY2gKPiArCSAqIG1lYW5zIHRoYXQgYSBwcmV2
aW91c2x5IHNlbnQgcmVxdWVzdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIG91dAo+ICsJICog
cmluZy4gVGh1cywgdGhlIEFQSSBjYW4gYmUgbm90aWZpZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9m
IHJldHJ5aW5nIHRvCj4gKwkgKiBzZW5kIHJlcXVlc3RzIGJsb2NrZWQgb24gRU5PU1BDIGVycm9y
cy4KPiArCSAqLwo+ICsJaWYgKHJpbmctPmRldi0+cDlkZXYpCj4gKwkJdWtfOXBkZXZfeG1pdF9u
b3RpZnkocmluZy0+ZGV2LT5wOWRldik7Cj4gKwlwOWZyb250X3JlY3YocmluZyk7Cj4gIH0KPiAg
Cj4gIHN0YXRpYyB2b2lkIHA5ZnJvbnRfZnJlZV9kZXZfcmluZyhzdHJ1Y3QgcDlmcm9udF9kZXYg
KnA5ZmRldiwgaW50IGlkeCkKPiBAQCAtMjQyLDkgKzMyOSw1MiBAQCBzdGF0aWMgaW50IHA5ZnJv
bnRfZGlzY29ubmVjdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2IF9fdW51c2VkKQo+ICAJcmV0dXJu
IDA7Cj4gIH0KPiAgCj4gLXN0YXRpYyBpbnQgcDlmcm9udF9yZXF1ZXN0KHN0cnVjdCB1a185cGRl
diAqcDlkZXYgX191bnVzZWQsCj4gLQkJCSAgIHN0cnVjdCB1a185cHJlcSAqcmVxIF9fdW51c2Vk
KQo+ICtzdGF0aWMgaW50IHA5ZnJvbnRfcmVxdWVzdChzdHJ1Y3QgdWtfOXBkZXYgKnA5ZGV2LAo+
ICsJCQkgICBzdHJ1Y3QgdWtfOXByZXEgKnJlcSkKPiAgewo+ICsJc3RydWN0IHA5ZnJvbnRfZGV2
ICpwOWZkZXY7Cj4gKwlzdHJ1Y3QgcDlmcm9udF9kZXZfcmluZyAqcmluZzsKPiArCWludCByaW5n
X2lkeCwgcmluZ19zaXplOwo+ICsJUklOR19JRFggbWFza2VkX3Byb2QsIG1hc2tlZF9jb25zLCBw
cm9kLCBjb25zOwo+ICsKPiArCVVLX0FTU0VSVChwOWRldik7Cj4gKwlVS19BU1NFUlQocmVxKTsK
PiArCVVLX0FTU0VSVChyZXEtPnN0YXRlID09IFVLXzlQUkVRX1JFQURZKTsKPiArCj4gKwlwOWZk
ZXYgPSBwOWRldi0+cHJpdjsKPiArCj4gKwlyaW5nX3NpemUgPSBYRU5fRkxFWF9SSU5HX1NJWkUo
cDlmZGV2LT5yaW5nX29yZGVyKTsKPiArCj4gKwlyaW5nX2lkeCA9IHJlcS0+dGFnICUgcDlmZGV2
LT5uYl9yaW5nczsKPiArCXJpbmcgPSAmcDlmZGV2LT5yaW5nc1tyaW5nX2lkeF07Cj4gKwo+ICsJ
LyogUHJvdGVjdCBhZ2FpbnN0IGNvbmN1cnJlbnQgd3JpdGVzIHRvIHRoZSBvdXQgcmluZy4gKi8K
PiArCXVrYXJjaF9zcGluX2xvY2soJnJpbmctPnNwaW5sb2NrKTsKPiArCWNvbnMgPSByaW5nLT5p
bnRmLT5vdXRfY29uczsKPiArCXByb2QgPSByaW5nLT5pbnRmLT5vdXRfcHJvZDsKPiArCXhlbl9t
YigpOwo+ICsKPiArCW1hc2tlZF9wcm9kID0geGVuXzlwZnNfbWFzayhwcm9kLCByaW5nX3NpemUp
Owo+ICsJbWFza2VkX2NvbnMgPSB4ZW5fOXBmc19tYXNrKGNvbnMsIHJpbmdfc2l6ZSk7Cj4gKwo+
ICsJaWYgKHJpbmdfc2l6ZSAtIHhlbl85cGZzX3F1ZXVlZChwcm9kLCBjb25zLCByaW5nX3NpemUp
IDwKPiArCQkJcmVxLT54bWl0LnNpemUgKyByZXEtPnhtaXQuemNfc2l6ZSkgewo+ICsJCXVrYXJj
aF9zcGluX3VubG9jaygmcmluZy0+c3BpbmxvY2spOwo+ICsJCXJldHVybiAtRU5PU1BDOwo+ICsJ
fQo+ICsKPiArCXhlbl85cGZzX3dyaXRlX3BhY2tldChyaW5nLT5kYXRhLm91dCwgcmVxLT54bWl0
LmJ1ZiwgcmVxLT54bWl0LnNpemUsCj4gKwkJCSAgICAgICZtYXNrZWRfcHJvZCwgbWFza2VkX2Nv
bnMsIHJpbmdfc2l6ZSk7Cj4gKwl4ZW5fOXBmc193cml0ZV9wYWNrZXQocmluZy0+ZGF0YS5vdXQs
IHJlcS0+eG1pdC56Y19idWYsIHJlcS0+eG1pdC56Y19zaXplLAo+ICsJCQkgICAgICAmbWFza2Vk
X3Byb2QsIG1hc2tlZF9jb25zLCByaW5nX3NpemUpOwo+ICsJcmVxLT5zdGF0ZSA9IFVLXzlQUkVR
X1NFTlQ7Cj4gKwl4ZW5fd21iKCk7Cj4gKwlwcm9kICs9IHJlcS0+eG1pdC5zaXplICsgcmVxLT54
bWl0LnpjX3NpemU7Cj4gKwlyaW5nLT5pbnRmLT5vdXRfcHJvZCA9IHByb2Q7Cj4gKwo+ICsJdWth
cmNoX3NwaW5fdW5sb2NrKCZyaW5nLT5zcGlubG9jayk7Cj4gKwlub3RpZnlfcmVtb3RlX3ZpYV9l
dnRjaG4ocmluZy0+ZXZ0Y2huKTsKPiArCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiAKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:28:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:28:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6XxD-0005S1-GD; Sat, 07 Sep 2019 10:28:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6XxC-0005Ru-D8
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:28:26 +0000
X-Inumbo-ID: 3967bb28-d15a-11e9-b76c-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3967bb28-d15a-11e9-b76c-bc764e2007e4;
 Sat, 07 Sep 2019 10:28:25 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id s18so9002381wrn.1
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:28:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=l1/3krW1rpJlEWqCgk7UbimjJkKiIabix66sU1ABDU8=;
 b=jjAAgwpmbhSqVBOwhGued4YQlHi6JusNso/t9QoltSejgR8I1iZ/cVLEqiWrBAga2s
 UHBiRmKWF+zUwUjAZk88kPQqACVlbceJMvwSRtirsW/WVYusmJDXmj8qU0/cuyBIaMMO
 d/fx+E6LuOhs25L9TgLHTPYiTgRpEjTzAYy4X6ktpJogVPE1guN8isvBNvRsamBQlFpd
 hh6DYqM+igylgwfAzLkwhKNDOcc+RTHyrKxws+3cbu0pkKRDHvgSyzsc3RUp078QIXBd
 i/YD8k3nJMHeqknlcQJpqS0mQ9Ea13DhS81dnfJOx1lP8QT5kfqA79fvJAkTqPz9a57H
 Z5Aw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=l1/3krW1rpJlEWqCgk7UbimjJkKiIabix66sU1ABDU8=;
 b=L/SG/+g6GZjlAIsO3hXkXOIdBKlM4DL4SX+Sg8fWetomn49Jv9i+MiL8K9O8vIaDfA
 949n+loBPovY0t4WtV/fRyTHZdKx28VFnXhzG2GPH4a2i0BaIVuQLsLyq+0V81P+vMYt
 RnE00/aNExbbK5T1u5WgGMwpBWDhIJhWYA0amtv0B+yeAP5v7qeP06q5K3NO27YmUg53
 RQEM2SBithEsFMptX7SCoMse05x4YS9qlsXdTTijEeBkk98HwBKmentqelOZxZC9EpSs
 gSgbLIR4tbhPPXit9bXV1GeC63j51K02CEvg33f8W8mCqUuYrtUS+mXNlDswhjlf2pDF
 yF4w==
X-Gm-Message-State: APjAAAVZNnAhPqcw4BPod5qKnGuFd/RObWgPAP55PYukGhEXlu5cQli5
 H83oymyaX2qG40AK1Kc5XIb6Gdwe
X-Google-Smtp-Source: APXvYqxMPZO1WxT8lVVFll7kxRLa/3isMg9RXKhgVir9O3k4eScsa+fGmGqDfkQ58DKx8POuphvrSg==
X-Received: by 2002:adf:e548:: with SMTP id z8mr10779564wrm.324.1567852104858; 
 Sat, 07 Sep 2019 03:28:24 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id p85sm14564150wme.23.2019.09.07.03.28.24
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:28:24 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-10-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <15d7ea6c-8fbd-abe0-6a59-076e3efe8522@gmail.com>
Date: Sat, 7 Sep 2019 13:28:23 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-10-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 9/9] plat/xen/drivers/9p: Add
 bottom-half handler
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>,
 Cristian Banu <cristb@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzcv
MTkgMToyMiBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEZyb206IENy
aXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+Cj4gCj4gVGhpcyBwYXRjaCBhZGRzIGJvdHRv
bS1oYWxmIGhhbmRsaW5nIHRvIFhlbiA5UCBieSBjcmVhdGluZyBvbmUgdGhyZWFkCj4gcGVyIHJp
bmcgd2hpY2ggd2FpdHMgb24gZGF0YSB0byBhcnJpdmUuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ3Jp
c3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAtLS0KPiAgcGxhdC94ZW4vZHJpdmVycy85
cC85cGZyb250LmMgfCA1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ICBw
bGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaCB8IDEzICsrKysrKysrKwo+ICAyIGZpbGVzIGNo
YW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEv
cGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJv
bnQuYwo+IGluZGV4IGE1MzIxODk4Li5kYTU1ZmQ2MSAxMDA2NDQKPiAtLS0gYS9wbGF0L3hlbi9k
cml2ZXJzLzlwLzlwZnJvbnQuYwo+ICsrKyBiL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5j
Cj4gQEAgLTMzLDEyICszMywxNiBAQAo+ICAgKi8KPiAgCj4gICNpbmNsdWRlIDxzdGRib29sLmg+
Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICAjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gICNpbmNs
dWRlIDx1ay9hbGxvYy5oPgo+ICAjaW5jbHVkZSA8dWsvYXNzZXJ0Lmg+Cj4gICNpbmNsdWRlIDx1
ay9lc3NlbnRpYWxzLmg+Cj4gICNpbmNsdWRlIDx1ay9lcnJwdHIuaD4KPiAgI2luY2x1ZGUgPHVr
L2xpc3QuaD4KPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gKyNpbmNsdWRlIDx1ay90aHJlYWQu
aD4KPiArI2VuZGlmCj4gICNpbmNsdWRlIDx1ay85cGRldi5oPgo+ICAjaW5jbHVkZSA8dWsvOXBy
ZXEuaD4KPiAgI2luY2x1ZGUgPHVrLzlwZGV2X3RyYW5zLmg+Cj4gQEAgLTYxLDYgKzY1LDIzIEBA
IHN0cnVjdCBwOWZyb250X2hlYWRlciB7Cj4gIAl1aW50MTZfdCB0YWc7Cj4gIH0gX19wYWNrZWQ7
Cj4gIAo+ICtzdGF0aWMgdm9pZCBwOWZyb250X3JlY3Yoc3RydWN0IHA5ZnJvbnRfZGV2X3Jpbmcg
KnJpbmcpOwo+ICsKPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gKwo+ICtzdGF0aWMgdm9pZCBw
OWZyb250X2JoX2hhbmRsZXIodm9pZCAqYXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgcDlmcm9udF9kZXZf
cmluZyAqcmluZyA9IGFyZzsKPiArCj4gKwl3aGlsZSAoMSkgewo+ICsJCXVrX3dhaXRxX3dhaXRf
ZXZlbnQoJnJpbmctPmJoX3dxLAo+ICsJCQkJVUtfUkVBRF9PTkNFKHJpbmctPmRhdGFfYXZhaWwp
KTsKPiArCQlwOWZyb250X3JlY3YocmluZyk7Cj4gKwl9Cj4gK30KPiArCj4gKyNlbmRpZgo+ICsK
PiAgc3RhdGljIHZvaWQgcDlmcm9udF9yZWN2KHN0cnVjdCBwOWZyb250X2Rldl9yaW5nICpyaW5n
KQo+ICB7Cj4gIAlzdHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldiA9IHJpbmctPmRldjsKPiBAQCAt
NzksNiArMTAwLDkgQEAgc3RhdGljIHZvaWQgcDlmcm9udF9yZWN2KHN0cnVjdCBwOWZyb250X2Rl
dl9yaW5nICpyaW5nKQo+ICAJCXhlbl9ybWIoKTsKPiAgCj4gIAkJaWYgKHhlbl85cGZzX3F1ZXVl
ZChwcm9kLCBjb25zLCByaW5nX3NpemUpIDwgc2l6ZW9mKGhkcikpIHsKPiArI2lmIENPTkZJR19M
SUJVS1NDSEVECj4gKwkJCVVLX1dSSVRFX09OQ0UocmluZy0+ZGF0YV9hdmFpbCwgZmFsc2UpOwo+
ICsjZW5kaWYKPiAgCQkJbm90aWZ5X3JlbW90ZV92aWFfZXZ0Y2huKGV2dGNobik7Cj4gIAkJCXJl
dHVybjsKPiAgCQl9Cj4gQEAgLTE0NCw3ICsxNjgsMTIgQEAgc3RhdGljIHZvaWQgcDlmcm9udF9o
YW5kbGVyKGV2dGNobl9wb3J0X3QgZXZ0Y2huLAo+ICAJICovCj4gIAlpZiAocmluZy0+ZGV2LT5w
OWRldikKPiAgCQl1a185cGRldl94bWl0X25vdGlmeShyaW5nLT5kZXYtPnA5ZGV2KTsKPiArI2lm
IENPTkZJR19MSUJVS1NDSEVECj4gKwlVS19XUklURV9PTkNFKHJpbmctPmRhdGFfYXZhaWwsIHRy
dWUpOwo+ICsJdWtfd2FpdHFfd2FrZV91cCgmcmluZy0+Ymhfd3EpOwo+ICsjZWxzZQo+ICAJcDlm
cm9udF9yZWN2KHJpbmcpOwo+ICsjZW5kaWYKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQgcDlmcm9u
dF9mcmVlX2Rldl9yaW5nKHN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2LCBpbnQgaWR4KQo+IEBA
IC0xNTQsNiArMTgzLDkgQEAgc3RhdGljIHZvaWQgcDlmcm9udF9mcmVlX2Rldl9yaW5nKHN0cnVj
dCBwOWZyb250X2RldiAqcDlmZGV2LCBpbnQgaWR4KQo+ICAKPiAgCVVLX0FTU0VSVChyaW5nLT5p
bml0aWFsaXplZCk7Cj4gIAo+ICsJaWYgKHJpbmctPmJoX3RocmVhZF9uYW1lKQo+ICsJCWZyZWUo
cmluZy0+YmhfdGhyZWFkX25hbWUpOwo+ICsJdWtfdGhyZWFkX2tpbGwocmluZy0+YmhfdGhyZWFk
KTsKPiAgCXVuYmluZF9ldnRjaG4ocmluZy0+ZXZ0Y2huKTsKPiAgCWZvciAoaSA9IDA7IGkgPCAo
MSA8PCBwOWZkZXYtPnJpbmdfb3JkZXIpOyBpKyspCj4gIAkJZ250dGFiX2VuZF9hY2Nlc3Mocmlu
Zy0+aW50Zi0+cmVmW2ldKTsKPiBAQCAtMjI2LDEyICsyNTgsMjcgQEAgc3RhdGljIGludCBwOWZy
b250X2FsbG9jYXRlX2Rldl9yaW5nKHN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2LCBpbnQgaWR4
KQo+ICAJcmluZy0+ZGF0YS5pbiA9IGRhdGFfYnl0ZXM7Cj4gIAlyaW5nLT5kYXRhLm91dCA9IGRh
dGFfYnl0ZXMgKyBYRU5fRkxFWF9SSU5HX1NJWkUocDlmZGV2LT5yaW5nX29yZGVyKTsKPiAgCj4g
KyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ICsJLyogQWxsb2NhdGUgYm90dG9tLWhhbGYgdGhyZWFk
LiAqLwo+ICsJcmluZy0+ZGF0YV9hdmFpbCA9IGZhbHNlOwo+ICsJdWtfd2FpdHFfaW5pdCgmcmlu
Zy0+Ymhfd3EpOwo+ICsKPiArCXJjID0gYXNwcmludGYoJnJpbmctPmJoX3RocmVhZF9uYW1lLCBE
UklWRVJfTkFNRSItcmVjdi0lcy0ldSIsCj4gKwkJCXA5ZmRldi0+dGFnLCBpZHgpOwo+ICsJcmlu
Zy0+YmhfdGhyZWFkID0gdWtfdGhyZWFkX2NyZWF0ZShyaW5nLT5iaF90aHJlYWRfbmFtZSwKPiAr
CQkJcDlmcm9udF9iaF9oYW5kbGVyLCByaW5nKTsKPiArCWlmICghcmluZy0+YmhfdGhyZWFkKSB7
Cj4gKwkJcmMgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0X2ZyZWVfZ3JhbnRzOwo+ICsJfQo+ICsj
ZW5kaWYKPiArCj4gIAkvKiBBbGxvY2F0ZSBldmVudCBjaGFubmVsLiAqLwo+ICAJcmMgPSBldnRj
aG5fYWxsb2NfdW5ib3VuZCh4ZW5kZXYtPm90aGVyZW5kX2lkLCBwOWZyb250X2hhbmRsZXIsIHJp
bmcsCj4gIAkJCQkmcmluZy0+ZXZ0Y2huKTsKPiAgCWlmIChyYykgewo+ICAJCXVrX3ByX2VycihE
UklWRVJfTkFNRSI6IEVycm9yIGNyZWF0aW5nIGV2dCBjaGFubmVsOiAlZFxuIiwgcmMpOwo+IC0J
CWdvdG8gb3V0X2ZyZWVfZ3JhbnRzOwo+ICsJCWdvdG8gb3V0X2ZyZWVfdGhyZWFkOwo+ICAJfQo+
ICAKPiAgCXVubWFza19ldnRjaG4ocmluZy0+ZXZ0Y2huKTsKPiBAQCAtMjQxLDYgKzI4OCwxMCBA
QCBzdGF0aWMgaW50IHA5ZnJvbnRfYWxsb2NhdGVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2
ICpwOWZkZXYsIGludCBpZHgpCj4gIAo+ICAJcmV0dXJuIDA7Cj4gIAo+ICtvdXRfZnJlZV90aHJl
YWQ6Cj4gKwlpZiAocmluZy0+YmhfdGhyZWFkX25hbWUpCj4gKwkJZnJlZShyaW5nLT5iaF90aHJl
YWRfbmFtZSk7Cj4gKwl1a190aHJlYWRfa2lsbChyaW5nLT5iaF90aHJlYWQpOwo+ICBvdXRfZnJl
ZV9ncmFudHM6Cj4gIAlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgcDlmZGV2LT5yaW5nX29yZGVyKTsg
aSsrKQo+ICAJCWdudHRhYl9lbmRfYWNjZXNzKHJpbmctPmludGYtPnJlZltpXSk7Cj4gZGlmZiAt
LWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oIGIvcGxhdC94ZW4vZHJpdmVycy85
cC85cGZyb250LmgKPiBpbmRleCA3Y2VhNjFjNS4uMGJiYzdmNDQgMTAwNjQ0Cj4gLS0tIGEvcGxh
dC94ZW4vZHJpdmVycy85cC85cGZyb250LmgKPiArKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlw
ZnJvbnQuaAo+IEBAIC00MCw2ICs0MCw5IEBACj4gICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+
Cj4gICNpbmNsdWRlIDx1ay9saXN0Lmg+Cj4gICNpbmNsdWRlIDx1ay9wbGF0L3NwaW5sb2NrLmg+
Cj4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ICsjaW5jbHVkZSA8dWsvc2NoZWQuaD4KPiArI2Vu
ZGlmCj4gICNpbmNsdWRlIDx4ZW4vaW8vOXBmcy5oPgo+ICAjaW5jbHVkZSA8Y29tbW9uL2V2ZW50
cy5oPgo+ICAjaW5jbHVkZSA8Y29tbW9uL2dudHRhYi5oPgo+IEBAIC01OSw2ICs2MiwxNiBAQCBz
dHJ1Y3QgcDlmcm9udF9kZXZfcmluZyB7Cj4gIAlzcGlubG9ja190IHNwaW5sb2NrOwo+ICAJLyog
VHJhY2tzIGlmIHRoaXMgcmluZyB3YXMgaW5pdGlhbGl6ZWQuICovCj4gIAlib29sIGluaXRpYWxp
emVkOwo+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQKPiArCS8qIFRyYWNrcyBpZiB0aGVyZSBpcyBh
bnkgZGF0YSBhdmFpbGFibGUgb24gdGhpcyByaW5nLiAqLwo+ICsJYm9vbCBkYXRhX2F2YWlsOwo+
ICsJLyogQm90dG9tLWhhbGYgdGhyZWFkLiAqLwo+ICsJc3RydWN0IHVrX3RocmVhZCAqYmhfdGhy
ZWFkOwo+ICsJLyogQm90dG9tLWhhbGYgdGhyZWFkIG5hbWUuICovCj4gKwljaGFyICpiaF90aHJl
YWRfbmFtZTsKPiArCS8qIFdhaXQtcXVldWUgb24gd2hpY2ggdGhlIHRocmVhZCB3YWl0cyBmb3Ig
YXZhaWxhYmxlIGRhdGEuICovCj4gKwlzdHJ1Y3QgdWtfd2FpdHEgYmhfd3E7Cj4gKyNlbmRpZgo+
ICB9Owo+ICAKPiAgc3RydWN0IHA5ZnJvbnRfZGV2IHsKPiAKCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sat Sep 07 10:40:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sat, 07 Sep 2019 10:40:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6Y8p-00072p-1F; Sat, 07 Sep 2019 10:40:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Og7s=XC=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6Y8o-00072k-BU
 for minios-devel@lists.xen.org; Sat, 07 Sep 2019 10:40:26 +0000
X-Inumbo-ID: e6565c94-d15b-11e9-b299-bc764e2007e4
Received: from mail-wr1-x443.google.com (unknown [2a00:1450:4864:20::443])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e6565c94-d15b-11e9-b299-bc764e2007e4;
 Sat, 07 Sep 2019 10:40:25 +0000 (UTC)
Received: by mail-wr1-x443.google.com with SMTP id g7so9054553wrx.2
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 03:40:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=R4HAAg1ll6pGNXaWrN1/vgvY1+bKyJeVDQYkx7+JGPw=;
 b=U397Bbf2Tu24pP+JPCR2UveUSGqvXLyqTawpcMFcGJ2StLhZAXcObdfVWFdWPgyaSU
 /kpmNbQ533kIQdOV0qrswGFaTuQT2K+SQOg/L/iH89KqW063QTYuF6ew0Pou6hnes4If
 b/06Um4HZyU9LwzpD1vHoOd3i9Vsir7J5afO7BxYYDi4J2WCpZUwSVGB7cSD+r5QkCXC
 flQ92b8relXc8TdkdZec4e8yFKO7ckH/g4iuq/3fa/TUBbLZPf2PWsohVm/eRG76zvlb
 pE9jD1eJSen1z6E6SblT9fQVFZm3EHrL8dBZONe9ex7sOQU7zbjQlsd18e876BwbLuWq
 iF6g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=R4HAAg1ll6pGNXaWrN1/vgvY1+bKyJeVDQYkx7+JGPw=;
 b=ZaRl2qSQeu02nNxt9NeQB3MohNrlyLHELOn10Q2HxDuvi1qyAHPARfB2ZvDi+YmyF6
 ZGj/h11hB5zbDtbLMpg9xMi7A5P41kvBzm5v7I+K5htOigMw79u7OVml+pn5DAPINano
 58q2uwc0YQzHEa4fyaGdDAtOv+MVicSvfrOa5f310ZXUy3h7d/P9T1asg3ws6WVRH1vj
 zDwMqru/IIyDTy28OHHT2Kdvt5cp0F5yTzBDacZinbWMBNQwQ/hKzEi3C/98eZGM13xC
 pBTNCIYCIuCYqhjOcTXJSeAYi8yeG1dux3UXfrQ4zKeKFe1lRG1hqdtKIrNbMnOSsP7a
 C/0Q==
X-Gm-Message-State: APjAAAX3oshJH9fd/DDInwyeaeWTOnZ/v2V53LIReyQ+5tKPz3yLckDL
 jIY3LjEjlar0Pi+Z5Sz91X8=
X-Google-Smtp-Source: APXvYqwQ4n7b034YKOw9dKiDnTaSZaA/V2L6lHuZrFFPxY8mvCySCg1N3KhoN8l6sAoCRi7KKyrMmg==
X-Received: by 2002:adf:e290:: with SMTP id v16mr8414843wri.256.1567852824384; 
 Sat, 07 Sep 2019 03:40:24 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id q10sm10065960wrd.39.2019.09.07.03.40.23
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 03:40:23 -0700 (PDT)
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>,
 Cristian Banu <cristb@gmail.com>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-10-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <1fe1325e-d995-ec36-71e3-f6bd568d24ff@gmail.com>
Date: Sat, 7 Sep 2019 13:40:23 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190907102148.13371-10-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 9/9] plat/xen/drivers/9p: Add
 bottom-half handler
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgOXBmcyBzdXBwb3J0LCBDcmlzdGkhIEF3ZXNvbWUgam9iIQoKQ2hlZXJz
LApDb3N0aW4KCk9uIDkvNy8xOSAxOjIyIFBNLCBWbGFkLUFuZHJlaSBCxIJET0lVICg3ODY5Mikg
d3JvdGU6Cj4gRnJvbTogQ3Jpc3RpYW4gQmFudSA8Y3Jpc3RiQGdtYWlsLmNvbT4KPiAKPiBUaGlz
IHBhdGNoIGFkZHMgYm90dG9tLWhhbGYgaGFuZGxpbmcgdG8gWGVuIDlQIGJ5IGNyZWF0aW5nIG9u
ZSB0aHJlYWQKPiBwZXIgcmluZyB3aGljaCB3YWl0cyBvbiBkYXRhIHRvIGFycml2ZS4KPiAKPiBT
aWduZWQtb2ZmLWJ5OiBDcmlzdGlhbiBCYW51IDxjcmlzdGJAZ21haWwuY29tPgo+IC0tLQo+ICBw
bGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYyB8IDUzICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKystCj4gIHBsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oIHwgMTMgKysrKysr
KysrCj4gIDIgZmlsZXMgY2hhbmdlZCwgNjUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+
IAo+IGRpZmYgLS1naXQgYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYyBiL3BsYXQveGVu
L2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gaW5kZXggYTUzMjE4OTguLmRhNTVmZDYxIDEwMDY0NAo+
IC0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5jCj4gKysrIGIvcGxhdC94ZW4vZHJp
dmVycy85cC85cGZyb250LmMKPiBAQCAtMzMsMTIgKzMzLDE2IEBACj4gICAqLwo+ICAKPiAgI2lu
Y2x1ZGUgPHN0ZGJvb2wuaD4KPiArI2luY2x1ZGUgPHN0ZGlvLmg+Cj4gICNpbmNsdWRlIDx1ay9j
b25maWcuaD4KPiAgI2luY2x1ZGUgPHVrL2FsbG9jLmg+Cj4gICNpbmNsdWRlIDx1ay9hc3NlcnQu
aD4KPiAgI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiAgI2luY2x1ZGUgPHVrL2VycnB0ci5o
Pgo+ICAjaW5jbHVkZSA8dWsvbGlzdC5oPgo+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQKPiArI2lu
Y2x1ZGUgPHVrL3RocmVhZC5oPgo+ICsjZW5kaWYKPiAgI2luY2x1ZGUgPHVrLzlwZGV2Lmg+Cj4g
ICNpbmNsdWRlIDx1ay85cHJlcS5oPgo+ICAjaW5jbHVkZSA8dWsvOXBkZXZfdHJhbnMuaD4KPiBA
QCAtNjEsNiArNjUsMjMgQEAgc3RydWN0IHA5ZnJvbnRfaGVhZGVyIHsKPiAgCXVpbnQxNl90IHRh
ZzsKPiAgfSBfX3BhY2tlZDsKPiAgCj4gK3N0YXRpYyB2b2lkIHA5ZnJvbnRfcmVjdihzdHJ1Y3Qg
cDlmcm9udF9kZXZfcmluZyAqcmluZyk7Cj4gKwo+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQKPiAr
Cj4gK3N0YXRpYyB2b2lkIHA5ZnJvbnRfYmhfaGFuZGxlcih2b2lkICphcmcpCj4gK3sKPiArCXN0
cnVjdCBwOWZyb250X2Rldl9yaW5nICpyaW5nID0gYXJnOwo+ICsKPiArCXdoaWxlICgxKSB7Cj4g
KwkJdWtfd2FpdHFfd2FpdF9ldmVudCgmcmluZy0+Ymhfd3EsCj4gKwkJCQlVS19SRUFEX09OQ0Uo
cmluZy0+ZGF0YV9hdmFpbCkpOwo+ICsJCXA5ZnJvbnRfcmVjdihyaW5nKTsKPiArCX0KPiArfQo+
ICsKPiArI2VuZGlmCj4gKwo+ICBzdGF0aWMgdm9pZCBwOWZyb250X3JlY3Yoc3RydWN0IHA5ZnJv
bnRfZGV2X3JpbmcgKnJpbmcpCj4gIHsKPiAgCXN0cnVjdCBwOWZyb250X2RldiAqcDlmZGV2ID0g
cmluZy0+ZGV2Owo+IEBAIC03OSw2ICsxMDAsOSBAQCBzdGF0aWMgdm9pZCBwOWZyb250X3JlY3Yo
c3RydWN0IHA5ZnJvbnRfZGV2X3JpbmcgKnJpbmcpCj4gIAkJeGVuX3JtYigpOwo+ICAKPiAgCQlp
ZiAoeGVuXzlwZnNfcXVldWVkKHByb2QsIGNvbnMsIHJpbmdfc2l6ZSkgPCBzaXplb2YoaGRyKSkg
ewo+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQKPiArCQkJVUtfV1JJVEVfT05DRShyaW5nLT5kYXRh
X2F2YWlsLCBmYWxzZSk7Cj4gKyNlbmRpZgo+ICAJCQlub3RpZnlfcmVtb3RlX3ZpYV9ldnRjaG4o
ZXZ0Y2huKTsKPiAgCQkJcmV0dXJuOwo+ICAJCX0KPiBAQCAtMTQ0LDcgKzE2OCwxMiBAQCBzdGF0
aWMgdm9pZCBwOWZyb250X2hhbmRsZXIoZXZ0Y2huX3BvcnRfdCBldnRjaG4sCj4gIAkgKi8KPiAg
CWlmIChyaW5nLT5kZXYtPnA5ZGV2KQo+ICAJCXVrXzlwZGV2X3htaXRfbm90aWZ5KHJpbmctPmRl
di0+cDlkZXYpOwo+ICsjaWYgQ09ORklHX0xJQlVLU0NIRUQKPiArCVVLX1dSSVRFX09OQ0Uocmlu
Zy0+ZGF0YV9hdmFpbCwgdHJ1ZSk7Cj4gKwl1a193YWl0cV93YWtlX3VwKCZyaW5nLT5iaF93cSk7
Cj4gKyNlbHNlCj4gIAlwOWZyb250X3JlY3YocmluZyk7Cj4gKyNlbmRpZgo+ICB9Cj4gIAo+ICBz
dGF0aWMgdm9pZCBwOWZyb250X2ZyZWVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZk
ZXYsIGludCBpZHgpCj4gQEAgLTE1NCw2ICsxODMsOSBAQCBzdGF0aWMgdm9pZCBwOWZyb250X2Zy
ZWVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYsIGludCBpZHgpCj4gIAo+ICAJ
VUtfQVNTRVJUKHJpbmctPmluaXRpYWxpemVkKTsKPiAgCj4gKwlpZiAocmluZy0+YmhfdGhyZWFk
X25hbWUpCj4gKwkJZnJlZShyaW5nLT5iaF90aHJlYWRfbmFtZSk7Cj4gKwl1a190aHJlYWRfa2ls
bChyaW5nLT5iaF90aHJlYWQpOwo+ICAJdW5iaW5kX2V2dGNobihyaW5nLT5ldnRjaG4pOwo+ICAJ
Zm9yIChpID0gMDsgaSA8ICgxIDw8IHA5ZmRldi0+cmluZ19vcmRlcik7IGkrKykKPiAgCQlnbnR0
YWJfZW5kX2FjY2VzcyhyaW5nLT5pbnRmLT5yZWZbaV0pOwo+IEBAIC0yMjYsMTIgKzI1OCwyNyBA
QCBzdGF0aWMgaW50IHA5ZnJvbnRfYWxsb2NhdGVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2
ICpwOWZkZXYsIGludCBpZHgpCj4gIAlyaW5nLT5kYXRhLmluID0gZGF0YV9ieXRlczsKPiAgCXJp
bmctPmRhdGEub3V0ID0gZGF0YV9ieXRlcyArIFhFTl9GTEVYX1JJTkdfU0laRShwOWZkZXYtPnJp
bmdfb3JkZXIpOwo+ICAKPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gKwkvKiBBbGxvY2F0ZSBi
b3R0b20taGFsZiB0aHJlYWQuICovCj4gKwlyaW5nLT5kYXRhX2F2YWlsID0gZmFsc2U7Cj4gKwl1
a193YWl0cV9pbml0KCZyaW5nLT5iaF93cSk7Cj4gKwo+ICsJcmMgPSBhc3ByaW50ZigmcmluZy0+
YmhfdGhyZWFkX25hbWUsIERSSVZFUl9OQU1FIi1yZWN2LSVzLSV1IiwKPiArCQkJcDlmZGV2LT50
YWcsIGlkeCk7Cj4gKwlyaW5nLT5iaF90aHJlYWQgPSB1a190aHJlYWRfY3JlYXRlKHJpbmctPmJo
X3RocmVhZF9uYW1lLAo+ICsJCQlwOWZyb250X2JoX2hhbmRsZXIsIHJpbmcpOwo+ICsJaWYgKCFy
aW5nLT5iaF90aHJlYWQpIHsKPiArCQlyYyA9IC1FTk9NRU07Cj4gKwkJZ290byBvdXRfZnJlZV9n
cmFudHM7Cj4gKwl9Cj4gKyNlbmRpZgo+ICsKPiAgCS8qIEFsbG9jYXRlIGV2ZW50IGNoYW5uZWwu
ICovCj4gIAlyYyA9IGV2dGNobl9hbGxvY191bmJvdW5kKHhlbmRldi0+b3RoZXJlbmRfaWQsIHA5
ZnJvbnRfaGFuZGxlciwgcmluZywKPiAgCQkJCSZyaW5nLT5ldnRjaG4pOwo+ICAJaWYgKHJjKSB7
Cj4gIAkJdWtfcHJfZXJyKERSSVZFUl9OQU1FIjogRXJyb3IgY3JlYXRpbmcgZXZ0IGNoYW5uZWw6
ICVkXG4iLCByYyk7Cj4gLQkJZ290byBvdXRfZnJlZV9ncmFudHM7Cj4gKwkJZ290byBvdXRfZnJl
ZV90aHJlYWQ7Cj4gIAl9Cj4gIAo+ICAJdW5tYXNrX2V2dGNobihyaW5nLT5ldnRjaG4pOwo+IEBA
IC0yNDEsNiArMjg4LDEwIEBAIHN0YXRpYyBpbnQgcDlmcm9udF9hbGxvY2F0ZV9kZXZfcmluZyhz
dHJ1Y3QgcDlmcm9udF9kZXYgKnA5ZmRldiwgaW50IGlkeCkKPiAgCj4gIAlyZXR1cm4gMDsKPiAg
Cj4gK291dF9mcmVlX3RocmVhZDoKPiArCWlmIChyaW5nLT5iaF90aHJlYWRfbmFtZSkKPiArCQlm
cmVlKHJpbmctPmJoX3RocmVhZF9uYW1lKTsKPiArCXVrX3RocmVhZF9raWxsKHJpbmctPmJoX3Ro
cmVhZCk7Cj4gIG91dF9mcmVlX2dyYW50czoKPiAgCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBwOWZk
ZXYtPnJpbmdfb3JkZXIpOyBpKyspCj4gIAkJZ250dGFiX2VuZF9hY2Nlc3MocmluZy0+aW50Zi0+
cmVmW2ldKTsKPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmggYi9w
bGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaAo+IGluZGV4IDdjZWE2MWM1Li4wYmJjN2Y0NCAx
MDA2NDQKPiAtLS0gYS9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuaAo+ICsrKyBiL3BsYXQv
eGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oCj4gQEAgLTQwLDYgKzQwLDkgQEAKPiAgI2luY2x1ZGUg
PHVrL2Vzc2VudGlhbHMuaD4KPiAgI2luY2x1ZGUgPHVrL2xpc3QuaD4KPiAgI2luY2x1ZGUgPHVr
L3BsYXQvc3BpbmxvY2suaD4KPiArI2lmIENPTkZJR19MSUJVS1NDSEVECj4gKyNpbmNsdWRlIDx1
ay9zY2hlZC5oPgo+ICsjZW5kaWYKPiAgI2luY2x1ZGUgPHhlbi9pby85cGZzLmg+Cj4gICNpbmNs
dWRlIDxjb21tb24vZXZlbnRzLmg+Cj4gICNpbmNsdWRlIDxjb21tb24vZ250dGFiLmg+Cj4gQEAg
LTU5LDYgKzYyLDE2IEBAIHN0cnVjdCBwOWZyb250X2Rldl9yaW5nIHsKPiAgCXNwaW5sb2NrX3Qg
c3BpbmxvY2s7Cj4gIAkvKiBUcmFja3MgaWYgdGhpcyByaW5nIHdhcyBpbml0aWFsaXplZC4gKi8K
PiAgCWJvb2wgaW5pdGlhbGl6ZWQ7Cj4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRAo+ICsJLyogVHJh
Y2tzIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF2YWlsYWJsZSBvbiB0aGlzIHJpbmcuICovCj4gKwli
b29sIGRhdGFfYXZhaWw7Cj4gKwkvKiBCb3R0b20taGFsZiB0aHJlYWQuICovCj4gKwlzdHJ1Y3Qg
dWtfdGhyZWFkICpiaF90aHJlYWQ7Cj4gKwkvKiBCb3R0b20taGFsZiB0aHJlYWQgbmFtZS4gKi8K
PiArCWNoYXIgKmJoX3RocmVhZF9uYW1lOwo+ICsJLyogV2FpdC1xdWV1ZSBvbiB3aGljaCB0aGUg
dGhyZWFkIHdhaXRzIGZvciBhdmFpbGFibGUgZGF0YS4gKi8KPiArCXN0cnVjdCB1a193YWl0cSBi
aF93cTsKPiArI2VuZGlmCj4gIH07Cj4gIAo+ICBzdHJ1Y3QgcDlmcm9udF9kZXYgewo+IAoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 06:19:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 06:19:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6qXL-0007Od-NV; Sun, 08 Sep 2019 06:18:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6qXK-0007OY-L7
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 06:18:58 +0000
X-Inumbo-ID: 89ce8d66-d200-11e9-b76c-bc764e2007e4
Received: from mail-wm1-x344.google.com (unknown [2a00:1450:4864:20::344])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 89ce8d66-d200-11e9-b76c-bc764e2007e4;
 Sun, 08 Sep 2019 06:18:57 +0000 (UTC)
Received: by mail-wm1-x344.google.com with SMTP id r195so11141368wme.2
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 23:18:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=1f94dLYR2VJ23+ZuatWCWWMxYwVDQT9vjA+LwUuDHb4=;
 b=kNAD5uivQeeNUsDMPDxl2M1XjWdhn2PEPxUIgIXnuYqYgIeT/lrtq+bbVSP0zNQvir
 KT/3JM7/YJRNbOkwcRsMMeFWh9cXzOrS915U7AVoRIe5Sosz3URxGiEp54icMzlUfeXM
 yrwIVBYgzrwMcjdv1pZNSliaqIV+c5qCnCQWb+VjfbsKY/hMsj0k9KJi1Pgk8UidOQHi
 pU+gDlqil9EcdvZDOOfG5ov0XabwDiIrL6g51h4nk6ogafzIA/gVJJddwS/oYtli4Xtu
 yCMbCmasQBJozPg+byWaOJYCYwhyJ2plmRs8x+pHC5H7WVTtlGt0YBHC7KY1czHTcn8G
 lbIQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=1f94dLYR2VJ23+ZuatWCWWMxYwVDQT9vjA+LwUuDHb4=;
 b=Po4tsdT4DRN15q0ChxitZohLW77Bv9sHMBb5mLR/50AELNTef2pUbEZ5/tGEh48zEG
 CJV9ojXyUsUEiTrrRoA0qUkWQDR6ajI5+AKK4VcATQulP/UBbBkk8SJow4YXdckBRYC+
 0dw3Fbqc7F5wP/a2fjrG18JjGXmVYddeJ1aYkbQd1xcVc8gNCPiZkHnU29yM1aywSEAg
 yg2X0sNJgSLmH+CPPjzw/woONWA8Xisa6puShJREBDxV47TxdF+GPHLWoPNJr1K1M2cy
 HkAipBeuOG82rSiqZk9sh8ZA0gHDicE7pAnkn1VkytSDjwXa2sc6nM76dsRF1ZlEUE3c
 ECfw==
X-Gm-Message-State: APjAAAUYmwPUCWvN4GdPwYx3rLsZyVa15OkalpMP3Uvrmtf/SczhZyVP
 e/bhuyLw71MaQqbFIsUfuJZSKtxM
X-Google-Smtp-Source: APXvYqwLjnrHVvoeDsLlhp2aChSvLJQ0szQLIfj7dmwPZLxfhRKOSjBSUHAusNhfWgr5ePOu122TLQ==
X-Received: by 2002:a7b:c08d:: with SMTP id r13mr13448560wmh.39.1567923536170; 
 Sat, 07 Sep 2019 23:18:56 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id f15sm10412103wml.8.2019.09.07.23.18.55
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 23:18:55 -0700 (PDT)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, minios-devel@lists.xen.org
References: <20190902132221.1917-1-costin.lupu@cs.pub.ro>
 <20190902132221.1917-2-costin.lupu@cs.pub.ro>
 <4086e563-3210-6f63-4b2f-52dd063f4c39@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <8472986f-280c-41a2-4d0a-8f1e5732ff8c@gmail.com>
Date: Sun, 8 Sep 2019 09:18:54 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <4086e563-3210-6f63-4b2f-52dd063f4c39@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/3] lib/vfscore: Use a scalable
 bitmap for open file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLAoKVGhhbmtzIGZvciByZXZpZXdpbmcgdGhpcyBzZXJpZXMuCgpPbiA5LzUvMTkg
NDoxNSBQTSwgU2hhcmFuIFNhbnRoYW5hbSB3cm90ZToKPiBIZWxsbyBDb3N0aW4sCj4gCj4gUGxl
YXNlIGZpbmQgdGhlIGNvbW1lbnQgaW5saW5lLgo+IAo+IFRoYW5rcyAmIFJlZ2FyZHMKPiAKPiBT
aGFyYW4KPiAKPiBPbiA5LzIvMTkgMzoyMiBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+IFVudGls
IG5vdywgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgd2FzIGxpbWl0ZWQgdG8g
NjQsCj4+IHdoaWNoIHdhcyB0aGUKPj4gbnVtYmVyIG9mIGJpdHMgb2YgdGhlIHVuZGVybHlpbmcg
Yml0bWFwLiBXZSBmaXggdGhhdCBieSByZXBsYWNpbmcgd2l0aCBhCj4+IGNvbmZpZ3VyYWJsZSBi
aXRtYXAuIFdlIHNldCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBtYXhpbXVtIG9wZW4gZmlsZXMgdG8K
Pj4gMTAyNC4KPj4KPj4gU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNz
LnB1Yi5ybz4KPj4gLS0tCj4+IMKgIGxpYi92ZnNjb3JlL0NvbmZpZy51ayB8wqAgOCArKysrKysr
LQo+PiDCoCBsaWIvdmZzY29yZS9mZC5jwqDCoMKgwqDCoCB8IDE2ICsrKysrKysrLS0tLS0tLS0K
Pj4gwqAgMiBmaWxlcyBjaGFuZ2VkLCAxNSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+
Pgo+PiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvQ29uZmlnLnVrIGIvbGliL3Zmc2NvcmUvQ29u
ZmlnLnVrCj4+IGluZGV4IDZjZjZjNjNhLi4wNzMxOTA5OSAxMDA2NDQKPj4gLS0tIGEvbGliL3Zm
c2NvcmUvQ29uZmlnLnVrCj4+ICsrKyBiL2xpYi92ZnNjb3JlL0NvbmZpZy51awo+PiBAQCAtMSw2
ICsxLDEyIEBACj4+IC1jb25maWcgTElCVkZTQ09SRQo+PiArbWVudWNvbmZpZyBMSUJWRlNDT1JF
Cj4+IMKgwqDCoMKgwqAgYm9vbCAidmZzY29yZTogVkZTIENvcmUgSW50ZXJmYWNlIgo+PiDCoMKg
wqDCoMKgIGRlZmF1bHQgbgo+PiDCoMKgwqDCoMKgIHNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVf
TElCQwo+PiDCoMKgwqDCoMKgIHNlbGVjdCBMSUJVS0RFQlVHCj4+IMKgwqDCoMKgwqAgc2VsZWN0
IExJQlVLTE9DSwo+PiArCj4+ICtpZiBMSUJWRlNDT1JFCj4+ICtjb25maWcgTElCVkZTQ09SRV9N
QVhfRklMRVMKPj4gK8KgwqDCoCBpbnQgIk1heGltdW0gbnVtYmVyIG9mIG9wZW4gZmlsZXMiCj4+
ICvCoMKgwqAgZGVmYXVsdCAxMDI0Cj4+ICtlbmRpZgo+IERvIHdlIHdhbnQgdG8gZGVmaW5lIG1h
eCBmaWxlIGRlc2NyaXB0b3IgYXMgY29uZmlndXJhdGlvbiBpbiBDb25maWcudWs/Cj4gRnJvbSBh
IHVzZXIgcGVyc3BlY3RpdmUgaXQgbWlnaHQgbm90IGFsd2F5cyBiZSBwb3NzaWJsZSB0byBkZXRl
cm1pbmUKPiB0aGlzIHZhbHVlIGJlZm9yZSBoYW5kLiBXZSBtaWdodCBhZGQgc3VwcG9ydCBmb3Ig
dWxpbWl0IGluc3RlYWQgb2Yga2VlcAo+IGlzIGNvbXBpbGUgdGltZSBjb25maWd1cmF0aW9uLiBJ
IHdvdWxkIHJhdGhlciB3ZSBwaWNrIGEgZGVmYXVsdCB2YWx1ZQo+IGZvciBub3cgYW5kIGlmIGEg
bmVlZCBhcmlzZSB3ZSBtYWtlIGl0IGNvbmZpZ3VyYWJsZSB0aGVuLgoKQWxyaWdodCwgSSdsbCBn
ZXQgcmlkIG9mIHRoaXMgTElCVkZTQ09SRV9NQVhfRklMRVMgaW4gdjIuCgpDaGVlcnMsCkNvc3Rp
bgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 06:58:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 06:58:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6r9P-0001zf-KK; Sun, 08 Sep 2019 06:58:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6r9O-0001za-2f
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 06:58:18 +0000
X-Inumbo-ID: 0885a770-d206-11e9-b299-bc764e2007e4
Received: from mail-wr1-x443.google.com (unknown [2a00:1450:4864:20::443])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0885a770-d206-11e9-b299-bc764e2007e4;
 Sun, 08 Sep 2019 06:58:17 +0000 (UTC)
Received: by mail-wr1-x443.google.com with SMTP id h7so9441842wrw.8
 for <minios-devel@lists.xen.org>; Sat, 07 Sep 2019 23:58:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=6PfQhLT+9F9l/j6PyvI8/ErNaK2s5dKj4PouGv2xLo4=;
 b=guIGcZSvIVKYP2xrQ0y49bW/YmalYOYfzDY12oj2R5Afg97pUSWA63qGN+iG1rcDTR
 l5utZwNGxLUdiRkdbIwfEndipo7fjtq3ZabReDTjQQQpMwiUyVGVaTr9ZtnE3LU2CTDe
 PXSesX6bND4j2wkVLKMA6AogYWPmdQoieI56nuTdnh5HZoosbNQc4So1j4kuWc5NuvQc
 pRaVEald4jgGHgYtsSpJcdl5C34ZiM2rEAJMCGpqWmuxJpqbNrfWU0pK08NpdfvFisKn
 0c/NPtqPii253TxR9nIXhZZm0xWkzgo+2EubxQTTn7P56K72XICJbJU48MeLuU4o3UZ1
 TUKw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=6PfQhLT+9F9l/j6PyvI8/ErNaK2s5dKj4PouGv2xLo4=;
 b=FB55/aBWX06iIVvH3LDSlYfAQaSsEOJwt3eaAmoWEDUWQiEfARH3rIFAe6ov5BY7ht
 ipBjss90WUOf2/SH6mccxaVVQC2qkJQieCinahY/TMX3i9DbmEHf0zwLBjFL7XcEPoEk
 zH71zZMFf9+W/C3beNkSn1wG4dkOq/ISbnViKhJdXazYgsiK1TsyjeR+3Xs+/y1AN29E
 +qFkHzuQtc4hZVx+V7DYscOLTWhPgydxpamFSU3m1SoNUir07Ou1iWEs1yxK2okdCwgv
 Zlb3VhSlPABXx4pjOWBhfpJM7yWJUBA10bpcExoeqf+nGHiOnsR2LwR2ei7mH3T6LAIy
 PAnA==
X-Gm-Message-State: APjAAAUarzVZKlRwXM8nER6uoggsuzL44zFmx5cg1imFL+sroFcAiGS0
 6uJmEZ/nhv0641nJ7Qt49RA=
X-Google-Smtp-Source: APXvYqxTFNmQlfASwP3FJixBzqVlhNtgIz8MEhfzaZXTKGN4/3WBwnr++UaLhW2otBj7vjyXhuD7dw==
X-Received: by 2002:a05:6000:1081:: with SMTP id
 y1mr13712170wrw.53.1567925896206; 
 Sat, 07 Sep 2019 23:58:16 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id y12sm3121108wrn.74.2019.09.07.23.58.14
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sat, 07 Sep 2019 23:58:15 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190827075640.21814-1-costin.lupu@cs.pub.ro>
 <95afbf5b-103c-99c0-c6e2-de04ef131e0b@neclab.eu>
 <ddf3cf2c-c0e7-f9f6-8b75-2fd109ed7bd7@gmail.com>
 <fac0083a-1989-1ec4-a1d7-32f04467c437@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <903d9610-8409-534a-06b9-f8214ea907a7@gmail.com>
Date: Sun, 8 Sep 2019 09:58:14 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <fac0083a-1989-1ec4-a1d7-32f04467c437@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] plat: Configure stack size page
 order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpQbGVhc2Ugc2VlIGlubGluZS4KCk9uIDkvNS8xOSAxMTo1NSBBTSwgU2ltb24g
S3VlbnplciB3cm90ZToKPiBPbiAwNC4wOS4xOSAwOToxNSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+
IEhpIFNpbW9uLAo+Pgo+PiBQbGVhc2Ugc2VlIGlubGluZS4KPj4KPj4gT24gOC8zMC8xOSA0OjUx
IFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+Pj4gSGV5IENvc3RpbiwKPj4+Cj4+PiBUaGFua3Mg
YSBsb3QgZm9yIHRoaXMgcGF0Y2guIEkgYW0gY3VycmVudGx5IGhhdmluZyBhIGxvb2sgYnV0IG5l
ZWQgc29tZQo+Pj4gY2xhcmlmaWNhdGlvbnMuCj4+Pgo+Pj4gMSkgV2h5IGRpZCB5b3UgZXhwb3Nl
IHRoZSBvcHRpb24gaW50IHRoZSBwbGF0Zm9ybSBzdWJtZW51PyBJdCBpcwo+Pj4gb2J2aW91c2x5
IGNoYW5naW5nIHNvbWV0aGluZyBpbiBhcmNoaXRlY3R1cmUgaGVhZGVycz8KPj4KPj4gV2VsbCwg
YWN0dWFsbHkgaXQgaXMgbmVpdGhlci4gSSB0aGluayBpdCdzIGFjdHVhbGx5IGEgc2NoZWR1bGlu
Zwo+PiBhYnN0cmFjdGlvbiwgYnV0IG9uZSB0aGF0IGlzIGN1cnJlbnRseSB1c2VkIGZvciBvdGhl
ciBzdGFja3MgYXMgd2VsbAo+PiAoaW50ZXJydXB0cywgdHJhcHMpLiBTbyBpdCdzIHRydWUgdGhh
dCBpdCdzIHdlaXJkIHRvIHB1dCBpdCBoZXJlLCBidXQKPj4gaXQncyBub3QgYW4gYXJjaCBzcGVj
aWZpYyBjb25maWcgZWl0aGVyLiBUaGlzIHN0YWNrIHNpemUgdmFsdWUgc2hvdWxkIGJlCj4+IHRo
ZSBzYW1lIHJlZ2FyZGxlc3MgYW55IGFyY2ggb3IgcGxhdGZvcm0uCj4+Cj4gCj4gSSBjb21wbGV0
ZWx5IGFncmVlIHdpdGggdGhpcyBhbmQgSSB0aGluayB3ZSBhcmUgZ29pbmcgdG8gaW50cm9kdWNl
Cj4gc3VwcG9ydGluZyBkaWZmZXJlbnQgc3RhY2sgc2l6ZXMgbGF0ZXIuIFRoZSB3aG9sZSBkaXNj
dXNzaW9uIGlzIHJlbGF0ZWQKPiB3aGF0IHdlIGhhZCB3aXRoIHBhdGNoIElEIDczNTc1MiAoc2Vl
IHBhdGNod29yay51bmlrcmFmdC5vcmcpLiBBbHRob3VnaAo+IHRoaXMgcGF0Y2ggaXMgYWxzbyBh
biBpbnRlcm1lZGlhdGUgZml4LCBJIHRlbmQgdG8gcHV0IHRoaXMgb3B0aW9uCj4gZGlyZWN0bHkg
dW5kZXIgJ0FyY2hpdGVjdHVyZSBTZWxlY3Rpb24nIGJlY2F1c2UgaXQgc2hvdWxkIGJlIGluZGVw
ZW5kZW50Cj4gdG8gYW55IHBsYXRmb3JtLiBUaGUgb3RoZXIgcmVhc29uIGlzIHRoYXQgd2UgaGF2
ZSB0aGUgc3RhY2sgc2l6ZQo+IGN1cnJlbnRseSBkZWZpbmVkIHdpdGhpbiB0aGUgYXJjaCBoZWFk
ZXJzLgo+IAoKQWxyaWdodCwgSSdsbCBtb3ZlIGl0IHRvIGFyY2ggaW4gdjIuCgo+Pj4KPj4+IDIp
IERpZCB5b3UgY2hlY2sgdGhlIGludGVycnVwdCBzdGFjayBmb3IgWGVuIG9uIHg4Nj8gSXQgc2Vl
bXMgdGhhdCB0aGlzCj4+PiBvbmUgaXMganVzdCBzaXplZCB0byBQQUdFX1NJWkUuIEkgdGhpbmsg
dGhpcyBjYW4gZ2V0IGNyaXRpY2FsIGZvciB0aHJlYWQKPj4+IGN1cnJlbnQgcmV0cmlldmFsLCBy
aWdodD8gU2VlOiBwbGF0L3hlbi94ODYvYXJjaF9ldmVudHMuYyBhbmQKPj4+IHBsYXQveGVuL3g4
Ni90cmFwcy5jIC4KPj4KPj4gV2VsbCBhY3R1YWxseSBJIHNlZSB0aGF0IHRoZSBpbnRlcnJ1cHQg
c3RhY2sgaW4KPj4gcGxhdC94ZW4veDg2L2FyY2hfZXZlbnRzLmMgaGFzIHRoZSByaWdodCBzaXpl
LCBTVEFDS19TSVpFLgo+Pgo+PiBJbiBkZWVkLCB0aGUgdHJhcCBzdGFjayBpbiBwbGF0L3hlbi94
ODYvdHJhcHMuYyBpcyBQQUdFX1NJWkUgYW5kIGl0Cj4+IHNob3VsZCBiZSBmaXhlZC4KPj4KPj4+
IERvIHlvdSBieSBjaGFuY2UgcmVtZW1iZXIgd2h5IHdlIGhhdmUgdGhlIGJvb3Qgc3RhY2sgdHdp
Y2UgYXMgYmlnPwo+Pj4gU2VlOiB4ZW4veDg2L3NldHVwLmMKPj4KPj4gSSBkb24ndCByZW1lbWJl
ciwgYnV0IGl0IHdhcyB0aGUgc2FtZSB3aXRoIHRoZSBpbnRlcnJ1cHQgc3RhY2sgaW4KPj4gcGxh
dC94ZW4veDg2L2FyY2hfZXZlbnRzLmMgYmVjYXVzZSB0aGUgYWxpZ25tZW50IHdhcyBkb25lIGF0
IHJ1bnRpbWUuIEl0Cj4+IG1pZ2h0IGJlIHRoZSBzYW1lIHJlYXNvbi4KPj4KPiAKPiBJIHVuZGVy
c3RhbmQuIFByb2JhYmx5IGFsc28gc29tZXRoaW5nIHRvIHJlLXZpc2l0IGxhdGVyIGJ1dCBub3Qg
d2l0aAo+IHRoaXMgcGF0Y2guLi4KPiAKPj4+Cj4+PiAzKSBNb3JlIGFzIGEgbm90ZTogWGVuIG9u
IEFybTMyIHNlZW1zIG5vdCB0byBmb2xsb3cgYW55IFNUQUNLX1NJWkUKPj4+IGRlZmluaXRpb24g
YXQgYWxsLiBXZSBzaG91bGQgcHJvYmFibHkgcHV0IGEgbm90ZSBvbiB0aGlzIHNvbWV3aGVyZS4g
SSBhbQo+Pj4gbm90IHN1cmUgaWYgaXQgaXMgd29ydGggZml4aW5nIGl0IC0gd2hvIGtub3dzIHdo
YXQgd2UgYXJlIGdvaW5nIHRvIGRvCj4+PiB3aXRoIHRoaXMgYXJjaGl0ZWN0dXJlLXBsYXRmb3Jt
LWNvbWJpbmF0aW9uLiBJIHJhdGhlciBleHBlY3QgdGhhdCB3ZSBhcmUKPj4+IGdvaW5nIHRvd2Fy
ZHMgQXJtNjQgZm9yIFhlbiBpbiB0aGUgZnV0dXJlLgo+Pgo+PiBJJ20gbm90IHN1cmUgSSBmb2xs
b3cuIFRoaXMgcGF0Y2ggZml4ZXMgdGhhdCBhbmQgc2V0cyB0aGUgc2FtZSBzdGFjawo+PiBzaXpl
IGZvciBBUk0uCj4+Cj4gCj4gQXJtMzIgdXNlcyBzb21lIGludGVybmFsIGhhcmQtY29kZWQgdmFs
dWVzIGFuZCBkb2VzIG5vdCB1c2UgdGhlCj4gU1RBQ0tfU0laRSBkZWZpbml0aW9uLiBJIHRoaW5r
IHdlIHNob3VsZCBhZG9wdCB0aGlzIHdpdGggdGhpcyBwYXRjaCwgdG9vLgo+IAo+IEluIGdlbmVy
YWwsIEkgYW0gZmluZSB3aXRoIGludHJvZHVjaW5nIHRoaXMgc3RhY2sgc2l6ZSBjb25maWd1cmF0
aW9uIGFzCj4gb3B0aW9uLgo+IAo+IFRoYW5rcywKPiAKPiBTaW1vbgo+IAo+Pj4KPj4+IFRoYW5r
cywKPj4+Cj4+PiBTaW1vbgo+Pj4KPj4+IE9uIDI3LjA4LjE5IDA5OjU2LCBDb3N0aW4gTHVwdSB3
cm90ZToKPj4+PiBUaGlzIHBhdGNoIGFkZHMgYSBjb25maWcgb3B0aW9uIGZvciBjb25maWd1cmlu
ZyB0aGUgc3RhY2sgc2l6ZSBwYWdlCj4+Pj4gb3JkZXIuIFdlCj4+Pj4gbmVlZCB0aGlzIGZvciBz
dXBwb3J0aW5nIGxhcmdlIHN0YWNrcy4KPj4+Pgo+Pj4+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBM
dXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Cj4+Pj4gLS0tCj4+Pj4gwqDCoCBhcmNoL2FybS9h
cm0vaW5jbHVkZS91ay9hc20vbGltaXRzLmjCoMKgwqAgfCAyICstCj4+Pj4gwqDCoCBhcmNoL2Fy
bS9hcm02NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaMKgIHwgMiArLQo+Pj4+IMKgwqAgYXJjaC94
ODYveDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oIHwgMiArLQo+Pj4+IMKgwqAgcGxhdC9D
b25maWcudWvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oCB8IDkgKysrKysrKysrCj4+Pj4gwqDCoCA0IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMo
KyksIDMgZGVsZXRpb25zKC0pCj4+Pj4KPj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYXJtL2lu
Y2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+Pj4gYi9hcmNoL2FybS9hcm0vaW5jbHVkZS91ay9hc20v
bGltaXRzLmgKPj4+PiBpbmRleCAwODU3NjFjMy4uZTIyOThkNmIgMTAwNjQ0Cj4+Pj4gLS0tIGEv
YXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+Pj4gKysrIGIvYXJjaC9hcm0v
YXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+Pj4gQEAgLTM5LDcgKzM5LDcgQEAKPj4+PiDC
oMKgICNkZWZpbmUgX19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUpIC0g
MSkpCj4+Pj4gwqDCoCAjZW5kaWYKPj4+PiDCoMKgIC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdF
X09SREVSwqDCoMKgIDIKPj4+PiArI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDC
oCBDT05GSUdfU1RBQ0tfU0laRV9QQUdFX09SREVSCj4+Pj4gwqDCoCAjZGVmaW5lIF9fU1RBQ0tf
U0laRcKgwqDCoMKgwqDCoMKgIChfX1BBR0VfU0laRSAqICgxIDw8Cj4+Pj4gX19TVEFDS19TSVpF
X1BBR0VfT1JERVIpKQo+Pj4+IMKgwqAgwqAgI2RlZmluZSBfX1dPUkRTSVpFwqDCoMKgwqDCoMKg
wqAgMzIKPj4+PiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGlt
aXRzLmgKPj4+PiBiL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+Pj4g
aW5kZXggY2VjMDU2NDEuLmZiNzBmMmJhIDEwMDY0NAo+Pj4+IC0tLSBhL2FyY2gvYXJtL2FybTY0
L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+Pj4gKysrIGIvYXJjaC9hcm0vYXJtNjQvaW5jbHVk
ZS91ay9hc20vbGltaXRzLmgKPj4+PiBAQCAtNDAsNyArNDAsNyBAQAo+Pj4+IMKgwqAgI2RlZmlu
ZSBfX1BBR0VfTUFTS8KgwqDCoMKgwqDCoMKgICh+KChfX1BBR0VfU0laRSkgLSAxKSkKPj4+PiDC
oMKgICNlbmRpZgo+Pj4+IMKgwqAgLSNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLCoMKg
wqAgNAo+Pj4+ICsjZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIENPTkZJR19T
VEFDS19TSVpFX1BBR0VfT1JERVIKPj4+PiDCoMKgICNkZWZpbmUgX19TVEFDS19TSVpFwqDCoMKg
IChfX1BBR0VfU0laRSAqICgxIDw8Cj4+Pj4gX19TVEFDS19TSVpFX1BBR0VfT1JERVIpKQo+Pj4+
IMKgwqAgI2RlZmluZSBfX1NUQUNLX0FMSUdOX1NJWkXCoMKgwqAgMTYKPj4+PiDCoMKgIGRpZmYg
LS1naXQgYS9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4+PiBiL2Fy
Y2gveDg2L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4+IGluZGV4IGE5NjliZDE3
Li4yMTgxNDA0NCAxMDA2NDQKPj4+PiAtLS0gYS9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9h
c20vbGltaXRzLmgKPj4+PiArKysgYi9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGlt
aXRzLmgKPj4+PiBAQCAtMzksNyArMzksNyBAQAo+Pj4+IMKgwqAgI2RlZmluZSBfX1BBR0VfTUFT
S8KgwqDCoMKgwqDCoMKgICh+KChfX1BBR0VfU0laRSkgLSAxKSkKPj4+PiDCoMKgICNlbmRpZgo+
Pj4+IMKgwqAgLSNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLCoMKgwqAgNAo+Pj4+ICsj
ZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIENPTkZJR19TVEFDS19TSVpFX1BB
R0VfT1JERVIKPj4+PiDCoMKgICNkZWZpbmUgX19TVEFDS19TSVpFwqDCoMKgwqDCoMKgwqAgKF9f
UEFHRV9TSVpFICogKDEgPDwKPj4+PiBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUikpCj4+Pj4gwqDC
oCDCoCAjZGVmaW5lIF9fV09SRFNJWkXCoMKgwqDCoMKgwqDCoCA2NAo+Pj4+IGRpZmYgLS1naXQg
YS9wbGF0L0NvbmZpZy51ayBiL3BsYXQvQ29uZmlnLnVrCj4+Pj4gaW5kZXggOGE4NzhlYjAuLmQw
Yjk5YmQ1IDEwMDY0NAo+Pj4+IC0tLSBhL3BsYXQvQ29uZmlnLnVrCj4+Pj4gKysrIGIvcGxhdC9D
b25maWcudWsKPj4+PiBAQCAtMjUsMyArMjUsMTIgQEAgY29uZmlnIEhaCj4+Pj4gwqDCoMKgwqDC
oMKgIGhlbHAKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBDb25maWd1cmUgdGhlIHRpbWVyIGlu
dGVycnVwdCBmcmVxdWVuY3kuCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqAgT25seSBjaGFuZ2Ug
dGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4KPj4+PiArCj4+Pj4gK2NvbmZpZyBT
VEFDS19TSVpFX1BBR0VfT1JERVIKPj4+PiArwqDCoMKgIGludAo+Pj4+ICvCoMKgwqAgcHJvbXB0
ICJTdGFjayBzaXplIHBhZ2Ugb3JkZXIiCj4+Pj4gK8KgwqDCoCBkZWZhdWx0IDQKPj4+PiArwqDC
oMKgIGhlbHAKPj4+PiArwqDCoMKgwqDCoMKgwqAgSW5kaXJlY3RseSBjb25maWd1cmVzIHRoZSBz
dGFjayBzaXplIGJ5IGNoYW5naW5nIHRoZSBzdGFjawo+Pj4+IHNpemUgcGFnZQo+Pj4+ICvCoMKg
wqDCoMKgwqDCoCBvcmRlci4gU3RhY2sgc2l6ZSBpcyBlcXVhbCB3aXRoIDJeb3JkZXIgKiBwYWdl
IHNpemUgKGUuZy4KPj4+PiA0S0IpLgo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBPbmx5IGNoYW5nZSB0
aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLgo+Pj4+Cj4+Pgo+Pj4gX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+IE1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKPj4+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+Pj4gaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 07:01:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 07:01:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6rCP-0002jY-T3; Sun, 08 Sep 2019 07:01:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fOAs=XD=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i6rCO-0002jT-Jg
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 07:01:24 +0000
X-Inumbo-ID: 740c5caa-d206-11e9-ac03-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 740c5caa-d206-11e9-ac03-12813bfff9fa;
 Sun, 08 Sep 2019 07:01:17 +0000 (UTC)
IronPort-SDR: VPrR7hfx3dRb62fMrhA9uk94Y67793nx+T1+iEOFRf3adfgGdViDFkgXtHfLUwAsDOBLTOeFLn
 6OdKXNGLs7gA==
IronPort-PHdr: =?us-ascii?q?9a23=3AUNVJvxUI+1fzzE7yDX2CRf2Nc83V8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbBWDt8tkgFKBZ4jH8fUM07OQ7/m6HzVQut3Y4DgrS99lb1?=
 =?us-ascii?q?c9k8IYnggtUoauKHbQC7rUVRE8B9lIT1R//nu2YgB/Ecf6YEDO8DXptWZBUh?=
 =?us-ascii?q?rwOhBoKevrB4Xck9q41/yo+53Ufg5EmCexbal9IRmrswndrNQajIhsJ6o+1x?=
 =?us-ascii?q?fEoWZDdvhLy29vOV+dhQv36N2q/J5k/SRQuvYh+NBFXK7nYak2TqFWASo/PW?=
 =?us-ascii?q?wt68LlqRfMTQ2U5nsBSWoWiQZHAxLE7B7hQJj8tDbxu/dn1ymbOc32Sq00WS?=
 =?us-ascii?q?in4qx2RhLklDsLOjgk+2zRl8d+jr9UoAi5qhJ/3YDafY+bOvl5cK7GYd8WWX?=
 =?us-ascii?q?BMUtpLWiBdHo+xaZYEAeobPeZfqonwv0UDrRylBQmwBePvzCJDiHnr3a0izu?=
 =?us-ascii?q?QqDAbL0xAnH9IVrHTUrdP1OL0WUeCo1KnI0C7OYO9N2Tvn8IjIbwsureuWXb?=
 =?us-ascii?q?J3aMfcz1QkGQDdjliItIDoMC6Z2v4OvmWb9eZsS/yjhmw9pwx/ujSj28ghhp?=
 =?us-ascii?q?TTio8Wyl3I7zt1zYg7KNGiVUJ2bsCoHZ1NvC+ALYR2WNktQ2RwtSY/zb0JpI?=
 =?us-ascii?q?C0cTARyJQi2x7fc/uHc5WU4h77VOaePzN4hHV9dbKhgha960mgyunmWsaoy1?=
 =?us-ascii?q?ZGtDJFksTXuXwXzRzT7dCLSvp7/ki/xTaCzx3f5+5ZLUwulqfWK4QtzqAump?=
 =?us-ascii?q?cRq0jOEDf6mEDsg6+XckUk9PKo6+PiYrj+upCcMJR0ih3/MqQogMC/Bfk4Mh?=
 =?us-ascii?q?ATX2WA5eu8z6fv/VXkQLpRlPE2iK7ZvIjAJcsHvq65HxNV0oE75ha6Djem1t?=
 =?us-ascii?q?UYnX4cLF5cZR2IkZbpNE/KIP3jCfe/gk+skCtwx/zcMbzuHJPNImLEkLf7cr?=
 =?us-ascii?q?Z381RcxxYrzdBD+5JUDakMIOnyWk/0s9zYCAU1Mw+pw+n5DtV8150RWXiUD6?=
 =?us-ascii?q?+fLqzdrVuI6fg0LOWWeoAVpWW1F/9w4v/ojHgi3FMQY6St9Z8Wc2yjWORrJQ?=
 =?us-ascii?q?Oee3W/rM0GFDIhuREiTeqirECaTHYHbHGpQ6M6oDUmEJ+OBpyFXp2nxqaGin?=
 =?us-ascii?q?ToVqZKb3xLXwjfWUzjcJ+JDq8B?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2D/BwAbpnRd/wPjVY1kHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MFUyASKo0dozcJAQEBKREBAgEBhD+CXDgTAgMJAQEFAQEBAQEGBAF?=
 =?us-ascii?q?shS4Mgjoig25PgQKDIgGCDqoZhUuDOIFJgTSHH4YxP4RhhRGFFgSWHJYkB4I?=
 =?us-ascii?q?kZASGF4UNiFwngyOVX4cLoTc4IYFYMxqDXwmCDgGMFoJcPQEBMYEGAQGQLwE?=
 =?us-ascii?q?B?=
X-IPAS-Result: =?us-ascii?q?A2D/BwAbpnRd/wPjVY1kHAEBAQQBAQcEAQGBZ4MFUyASK?=
 =?us-ascii?q?o0dozcJAQEBKREBAgEBhD+CXDgTAgMJAQEFAQEBAQEGBAFshS4Mgjoig25Pg?=
 =?us-ascii?q?QKDIgGCDqoZhUuDOIFJgTSHH4YxP4RhhRGFFgSWHJYkB4IkZASGF4UNiFwng?=
 =?us-ascii?q?yOVX4cLoTc4IYFYMxqDXwmCDgGMFoJcPQEBMYEGAQGQLwEB?=
X-IronPort-AV: E=Sophos;i="5.64,479,1559509200"; 
   d="scan'208";a="4705788"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 08 Sep 2019 10:01:13 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9CDD11A60042;
 Sun,  8 Sep 2019 10:01:13 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id I93dgi-Z2qif; Sun,  8 Sep 2019 10:01:13 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 846751A60043;
 Sun,  8 Sep 2019 10:01:13 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id tc2bsdsNnvUA; Sun,  8 Sep 2019 10:01:13 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 698F41A60042;
 Sun,  8 Sep 2019 10:01:13 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Sun,  8 Sep 2019 10:01:03 +0300
Message-Id: <20190908070103.21674-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v2] plat: Configure stack size page
 order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBhZGRzIGEgY29uZmlnIG9wdGlvbiBmb3IgY29uZmlndXJpbmcgdGhlIHN0YWNr
IHNpemUgcGFnZSBvcmRlci4gV2UKbmVlZCB0aGlzIGZvciBzdXBwb3J0aW5nIGxhcmdlIHN0YWNr
cy4KClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0t
LQogYXJjaC9Db25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOSArKysrKysrKysK
IGFyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaCAgICB8IDIgKy0KIGFyY2gvYXJt
L2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oICB8IDIgKy0KIGFyY2gveDg2L3g4Nl82NC9p
bmNsdWRlL3VrL2FzbS9saW1pdHMuaCB8IDIgKy0KIDQgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0
aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9hcmNoL0NvbmZpZy51ayBiL2Fy
Y2gvQ29uZmlnLnVrCmluZGV4IDE5MGM3NWU2Li5kMDkxZGNiZCAxMDA2NDQKLS0tIGEvYXJjaC9D
b25maWcudWsKKysrIGIvYXJjaC9Db25maWcudWsKQEAgLTI0LDMgKzI0LDEyIEBAIGVuZGlmCiBp
ZiAoQVJDSF9BUk1fNjQpCiAJc291cmNlICJhcmNoL2FybS9hcm02NC9Db25maWcudWsiCiBlbmRp
ZgorCitjb25maWcgU1RBQ0tfU0laRV9QQUdFX09SREVSCisJaW50CisJcHJvbXB0ICJTdGFjayBz
aXplIHBhZ2Ugb3JkZXIiCisJZGVmYXVsdCA0CisJaGVscAorCQlJbmRpcmVjdGx5IGNvbmZpZ3Vy
ZXMgdGhlIHN0YWNrIHNpemUgYnkgY2hhbmdpbmcgdGhlIHN0YWNrIHNpemUgcGFnZQorCQlvcmRl
ci4gU3RhY2sgc2l6ZSBpcyBlcXVhbCB3aXRoIDJeb3JkZXIgKiBwYWdlIHNpemUgKGUuZy4gNEtC
KS4KKwkJT25seSBjaGFuZ2UgdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSdyZSBkb2luZy4KZGlm
ZiAtLWdpdCBhL2FyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaCBiL2FyY2gvYXJt
L2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAppbmRleCAwODU3NjFjMy4uZTIyOThkNmIgMTAw
NjQ0Ci0tLSBhL2FyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAorKysgYi9hcmNo
L2FybS9hcm0vaW5jbHVkZS91ay9hc20vbGltaXRzLmgKQEAgLTM5LDcgKzM5LDcgQEAKICNkZWZp
bmUgX19QQUdFX01BU0sJCSh+KChfX1BBR0VfU0laRSkgLSAxKSkKICNlbmRpZgogCi0jZGVmaW5l
IF9fU1RBQ0tfU0laRV9QQUdFX09SREVSCTIKKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JE
RVIJQ09ORklHX1NUQUNLX1NJWkVfUEFHRV9PUkRFUgogI2RlZmluZSBfX1NUQUNLX1NJWkUJCShf
X1BBR0VfU0laRSAqICgxIDw8IF9fU1RBQ0tfU0laRV9QQUdFX09SREVSKSkKIAogI2RlZmluZSBf
X1dPUkRTSVpFCQkzMgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20v
bGltaXRzLmggYi9hcmNoL2FybS9hcm02NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAppbmRleCBj
ZWMwNTY0MS4uZmI3MGYyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsv
YXNtL2xpbWl0cy5oCisrKyBiL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5o
CkBAIC00MCw3ICs0MCw3IEBACiAjZGVmaW5lIF9fUEFHRV9NQVNLCQkofigoX19QQUdFX1NJWkUp
IC0gMSkpCiAjZW5kaWYKIAotI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUgk0CisjZGVm
aW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSCUNPTkZJR19TVEFDS19TSVpFX1BBR0VfT1JERVIK
ICNkZWZpbmUgX19TVEFDS19TSVpFCShfX1BBR0VfU0laRSAqICgxIDw8IF9fU1RBQ0tfU0laRV9Q
QUdFX09SREVSKSkKICNkZWZpbmUgX19TVEFDS19BTElHTl9TSVpFCTE2CiAKZGlmZiAtLWdpdCBh
L2FyY2gveDg2L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaCBiL2FyY2gveDg2L3g4Nl82
NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAppbmRleCBhOTY5YmQxNy4uMjE4MTQwNDQgMTAwNjQ0
Ci0tLSBhL2FyY2gveDg2L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAorKysgYi9hcmNo
L3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKQEAgLTM5LDcgKzM5LDcgQEAKICNk
ZWZpbmUgX19QQUdFX01BU0sJCSh+KChfX1BBR0VfU0laRSkgLSAxKSkKICNlbmRpZgogCi0jZGVm
aW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSCTQKKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0Vf
T1JERVIJQ09ORklHX1NUQUNLX1NJWkVfUEFHRV9PUkRFUgogI2RlZmluZSBfX1NUQUNLX1NJWkUJ
CShfX1BBR0VfU0laRSAqICgxIDw8IF9fU1RBQ0tfU0laRV9QQUdFX09SREVSKSkKIAogI2RlZmlu
ZSBfX1dPUkRTSVpFCQk2NAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 14:37:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 14:37:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6yJk-00049F-Nt; Sun, 08 Sep 2019 14:37:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6yJk-00049A-18
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 14:37:28 +0000
X-Inumbo-ID: 2d6256fc-d246-11e9-978d-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2d6256fc-d246-11e9-978d-bc764e2007e4;
 Sun, 08 Sep 2019 14:37:26 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id k2so10994886wmj.4
 for <minios-devel@lists.xen.org>; Sun, 08 Sep 2019 07:37:26 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=Q2CkN3rsIXhktpTj0c/NpCZIRn7yYytItIcHaKvTBUA=;
 b=YEVFlp6wwEMjSIMpk22PA2EJJo/D11MgKLI5wMGzgyt0th2nzRdB2QPiJ1iWAJLLO6
 TJ4p7CFGTjcjVaNIReqPaDwlQp+U9DP3fhpOQAH7asTfD1wi0ceu4i2j4XxXJgggxOg8
 6HIUs08DQomxH4AQwFEOPVdAok9sEMFqqqZ15aINnh4FQvAfufZwSjgHYQ8zvbV10WZ+
 gzZMOhYEB8QHpAD3DVhUZpnv3BBCnxV2F9kwOalR+vdIhO85OXsKHJarJ5UnZ+PV0Lnd
 BJBIMnVDAVSne1JRdOlfk7xxUUAqsVizlnyuUIfWYcTSPW7/uYvsn3glytm3SYeQFHOr
 zzNg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=Q2CkN3rsIXhktpTj0c/NpCZIRn7yYytItIcHaKvTBUA=;
 b=ZmUBF+ayJEkrT0cnLvhXdM92DVFj59cmxudVuibS2NeCoY8sygVjpc8SM1nf03D6JZ
 xmTfJI6ow90hPL1iMJ4+KFdoImQ9MIOie4fVlDUDnUGl6Y9Cv02QBOfsyOYQKJQAZ/V9
 cQRrEDmFf4dpbnFNsc7A6CvEaDuZ0OOwC3SaxbT+iCVLP6d/TjBR3XHUxn1dDXC73BCS
 wJmEwJxH1Pbj0xPDrbpj5Eqs41yqKT+9QKTtzP85NWcF8fAzXYJxtS+hk0Ru8CqtGtmr
 ooqkCXEKXmQ8houENRc1YCSy+NEuLhOXst67aiNH/o5ZC/yL32mBRpZbjH96y51I/fRY
 i1Kw==
X-Gm-Message-State: APjAAAVt1jPRD0kkBQT+a9gQ+d3CBK1jiMJ46dprRCKGPbe+DSQVLpPX
 3jMeVtvFFGosMOCJmtUrKQY=
X-Google-Smtp-Source: APXvYqxnY6cazf+OIItmL+mArDpqGB03uqzG/oK0uie+ImnczxDWveowU1vzI+72rN49KYeaeqtEaQ==
X-Received: by 2002:a7b:ca5a:: with SMTP id m26mr3887928wml.177.1567953445837; 
 Sun, 08 Sep 2019 07:37:25 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id t25sm9418273wmj.29.2019.09.08.07.37.24
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 08 Sep 2019 07:37:25 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20190906120306.18966-7-simon.kuenzer@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <8348ec5f-ccf1-aa39-cbb5-f01879170648@gmail.com>
Date: Sun, 8 Sep 2019 17:37:23 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190906120306.18966-7-simon.kuenzer@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 6/6] lib/ukboot: Root
 filesystem as library parameter
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpQbGVhc2Ugc2VlIGlubGluZS4KCk9uIDkvNi8xOSAzOjAzIFBNLCBTaW1vbiBL
dWVuemVyIHdyb3RlOgo+IEVuYWJsZXMgc3VwcG9ydCBmb3Igc2V0dGluZyBmc25hbWUsIGRldmlj
ZSwgZmxhZ3MsIGFuZCBtb3VudCBkYXRhCj4gZm9yIHRoZSByb290IGZpbGVzeXN0ZW0uIFRoZXNl
IG9wdGlvbnMgY2FuIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgbWVudQo+IGNvbmZpZ3VyYXRpb24u
IEluIGNhc2UgbGlidWtwYXJhbSBpcyBlbmFibGVkLCB0aGUgZGVmYXVsdCB2YWx1ZXMgY2FuCj4g
YmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUga2VybmVsIGNvbW1hbmQgbGluZTsgZm9yIGV4YW1wbGU6
Cj4gICBpbml0LnJvb3RfZnNuYW1lPSJyYW1mcyIKPiAKPiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBL
dWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KPiAtLS0KPiAgbGliL3VrYm9vdC9Db25m
aWcudWsgICB8IDIyICsrKysrKysrKysrKysrKysrKysrLS0KPiAgbGliL3VrYm9vdC9NYWtlZmls
ZS51ayB8ICAzICsrKwo+ICBsaWIvdWtib290L2Jvb3QuYyAgICAgIHwgMzYgKysrKysrKysrKysr
KysrKysrKysrKy0tLS0tLS0tLS0tLS0tCj4gIDMgZmlsZXMgY2hhbmdlZCwgNDUgaW5zZXJ0aW9u
cygrKSwgMTYgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvQ29uZmln
LnVrIGIvbGliL3VrYm9vdC9Db25maWcudWsKPiBpbmRleCA4NDIwYWFlOS4uZDlkNTc3MTUgMTAw
NjQ0Cj4gLS0tIGEvbGliL3VrYm9vdC9Db25maWcudWsKPiArKysgYi9saWIvdWtib290L0NvbmZp
Zy51awo+IEBAIC0yMiwxMSArMjIsMjkgQEAgaWYgTElCVUtCT09UCj4gIAlkZWZhdWx0IHkKPiAg
CXNlbGVjdCBMSUJVS0FMTE9DQkJVRERZCj4gIAo+IC0JY29uZmlnIExJQlVLQk9PVF9WRlNST09U
Cj4gLQlib29sICJNb3VudCByYW1mcyB0byAvIgo+ICsJbWVudWNvbmZpZyBMSUJVS0JPT1RfVkZT
Uk9PVAo+ICsJYm9vbCAiTW91bnQgYSByb290IGZpbGVzeXN5dGVtICgvKSIKPiAgCWRlZmF1bHQg
bgo+ICAJc2VsZWN0IExJQlJBTUZTCgpQbGVhc2UgYmUgY2FyZWZ1bCB3aXRoIGluZGVudGF0aW9u
IG5leHQgdGltZS4KCj4gIAo+ICsJaWYgTElCVUtCT09UX1ZGU1JPT1QKPiArCQljb25maWcgTElC
VUtCT09UX1ZGU1JPT1RfRlNOQU1FCj4gKwkJc3RyaW5nICJEZWZhdWx0IHJvb3QgZmlsZXN5c3Rl
bSIKPiArCQlkZWZhdWx0ICJyYW1mcyIKClNpbmNlIHdlJ2xsIGhhdmUgYSBhIG5leHQgdmVyc2lv
biwgcGxlYXNlIGluZGVudCB0aGUgY29uZmlnIGF0dHJpYnV0ZXMKZm9yIGFsbCB0aGVzZSA0IG5l
dyBjb25maWcgb3B0aW9ucy4KCj4gKwo+ICsJCWNvbmZpZyBMSUJVS0JPT1RfVkZTUk9PVF9ERVYK
PiArCQlzdHJpbmcgIkRlZmF1bHQgcm9vdCBkZXZpY2UiCj4gKwkJZGVmYXVsdCAiIgo+ICsKPiAr
CQljb25maWcgTElCVUtCT09UX1ZGU1JPT1RfRkxBR1MKPiArCQloZXggIkRlZmF1bHQgcm9vdCBt
b3VudCBmbGFncyIKPiArCQlkZWZhdWx0IDB4MAo+ICsKPiArCQljb25maWcgTElCVUtCT09UX1ZG
U1JPT1RfREFUQQo+ICsJCXN0cmluZyAiRGVmYXVsdCByb290IG1vdW50IGRhdGEiCj4gKwkJZGVm
YXVsdCAiIgo+ICsJZW5kaWYKPiArCj4gIAljb25maWcgTElCVUtCT09UX0RFVkZTCj4gIAlib29s
ICJNb3VudCBkZXZmcyB0byAvZGV2Igo+ICAJZGVmYXVsdCBuCj4gZGlmZiAtLWdpdCBhL2xpYi91
a2Jvb3QvTWFrZWZpbGUudWsgYi9saWIvdWtib290L01ha2VmaWxlLnVrCj4gaW5kZXggZWEwNTIw
MTkuLmZhNWMxYWVhIDEwMDY0NAo+IC0tLSBhL2xpYi91a2Jvb3QvTWFrZWZpbGUudWsKPiArKysg
Yi9saWIvdWtib290L01ha2VmaWxlLnVrCj4gQEAgLTEsNSArMSw4IEBACj4gICQoZXZhbCAkKGNh
bGwgYWRkbGliX3MsbGlidWtib290LCQoQ09ORklHX0xJQlVLQk9PVCkpKQo+ICAKPiArIyBSZWdp
c3RlciB0byB1a2xpYnBhcmFtLCBzZXRzICJpbmkiIGFzIHBhcmFtcHJlZml4Cj4gKyQoZXZhbCAk
KGNhbGwgYWRkbGliX3BhcmFtcHJlZml4LGxpYnVrYm9vdCxpbml0KSkKPiArCj4gIENJTkNMVURF
Uy0kKENPTkZJR19MSUJVS0JPT1QpCQkrPSAtSSQoTElCVUtCT09UX0JBU0UpL2luY2x1ZGUKPiAg
Q1hYSU5DTFVERVMtJChDT05GSUdfTElCVUtCT09UKQkrPSAtSSQoTElCVUtCT09UX0JBU0UpL2lu
Y2x1ZGUKPiAgCj4gZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvYm9vdC5jIGIvbGliL3VrYm9vdC9i
b290LmMKPiBpbmRleCA1ZTJjYjc1Ny4uNGUzNGVmNzYgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrYm9v
dC9ib290LmMKPiArKysgYi9saWIvdWtib290L2Jvb3QuYwo+IEBAIC02MCwxNCArNjAsMjMgQEAK
PiAgI2lmIENPTkZJR19MSUJVS0JVUwo+ICAjaW5jbHVkZSA8dWsvYnVzLmg+Cj4gICNlbmRpZiAv
KiBDT05GSUdfTElCVUtCVVMgKi8KPiAtI2lmZGVmIENPTkZJR19MSUJVS0xJQlBBUkFNCj4gICNp
bmNsdWRlIDx1ay9saWJwYXJhbS5oPgo+IC0jZW5kaWYgLyogQ09ORklHX0xJQlVLTElCUEFSQU0g
Ki8KPiAgI2lmZGVmIENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVAo+ICAjaW5jbHVkZSA8c3lzL3N0
YXQuaD4KPiAgI2luY2x1ZGUgPHN5cy9tb3VudC5oPgo+ICAjZW5kaWYgLyogQ09ORklHX0xJQlVL
Qk9PVF9WRlNST09UICovCj4gIAo+ICsjaWZkZWYgQ09ORklHX0xJQlVLQk9PVF9WRlNST09UCj4g
K3N0YXRpYyBjaGFyICpyb290X2ZzbmFtZSA9IENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVF9GU05B
TUU7Cj4gK3N0YXRpYyBjaGFyICpyb290X2RldiAgICA9IENPTkZJR19MSUJVS0JPT1RfVkZTUk9P
VF9ERVY7Cj4gK3N0YXRpYyBjaGFyICpyb290X2RhdGEgICA9IENPTkZJR19MSUJVS0JPT1RfVkZT
Uk9PVF9EQVRBOwo+ICtzdGF0aWMgX191NjQgcm9vdF9mbGFncyAgPSAoX191NjQpIENPTkZJR19M
SUJVS0JPT1RfVkZTUk9PVF9GTEFHUzsKPiArCj4gK1VLX0xJQl9QQVJBTV9TVFIocm9vdF9mc25h
bWUpOwo+ICtVS19MSUJfUEFSQU1fU1RSKHJvb3RfZGV2KTsKPiArVUtfTElCX1BBUkFNKHJvb3Rf
ZmxhZ3MsICBfX3U2NCk7Cj4gK1VLX0xJQl9QQVJBTV9TVFIocm9vdF9kYXRhKTsKPiArI2VuZGlm
CgpUaGlzIGlzIGEgZ2VuZXJhbCBjb21tZW50LiBXZSBraW5kIG9mIGJsb2F0IHRoaXMgYm9vdCBj
b2RlIHdpdGgKZmlsZXN5c3RlbSByZWxhdGVkIGNvZGUuIFdoeSBkb24ndCB3ZSBpbnRyb2R1Y2Ug
YSBuZXcgZmlsZSBpbiB2ZnNjb3JlLAplLmcuIGluaXQuYywgd2hpY2ggd291bGQgZG8gdGhpcyAt
IGluaXRpYWxpemluZyBhIGZpbGVzeXN0ZW0/IEFuZCB0aGUKeW91IHdvdWxkIGp1c3QgY2FsbCB0
aGF0IGZ1bmN0aW9uIGZyb20gaGVyZSwgaWYgY29uZmlnIG9wdGlvbiB3YXMgZW5hYmxlZC4KCj4g
IAo+ICBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSBfX3dlYWs7Cj4gICNpZmRlZiBD
T05GSUdfTElCTFdJUAo+IEBAIC05OCwyNSArMTA3LDI0IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhy
ZWFkX2Z1bmModm9pZCAqYXJnKQo+ICAJICogVkZTIGluaXRpYWxpemF0aW9uCj4gIAkgKi8KPiAg
I2lmZGVmIENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVAo+IC0JLyoKPiAtCSAqIFRPRE86IFByb3Zp
ZGUgYSBib290IHBhcmFtZXRlciBvcHRpb24gdG8gc3BlY2lmeSBhIGN1c3RvbQo+IC0JICogcm9v
dCBtb3VudCAoZS5nLiwgcmFtZnMsIGluaXRyZCwgOXBmcykuCj4gLQkgKi8KPiAtCXVrX3ByX2lu
Zm8oIk1vdW50IHJvb3QuLi5cbiIpOwo+IC0JcmV0ID0gbW91bnQoIiIsICIvIiwgInJhbWZzIiwg
MCwgTlVMTCk7Cj4gKwl1a19wcl9pbmZvKCJNb3VudCByb290ICglcykuLi5cbiIsIHJvb3RfZnNu
YW1lKTsKPiArCXJldCA9IG1vdW50KHJvb3RfZGV2LCAiLyIsIHJvb3RfZnNuYW1lLCByb290X2Zs
YWdzLCByb290X2RhdGEpOwo+ICAJaWYgKHJldCAhPSAwKQo+IC0JCVVLX0NSQVNIKCJGYWlsZWQg
dG8gbW91bnQgcmFtZnMgdG8gL1xuIik7Cj4gKwkJVUtfQ1JBU0goIkZhaWxlZCB0byBtb3VudCAv
XG4iKTsKClNpbmNlIHdlJ2xsIGhhdmUgYSBuZXh0IHZlcnNpb24sIHBsZWFzZSByZW1vdmUgdGhp
cyBleHRyYSBzcGFjZSBhdCB0aGUgZW5kLgoKPiAgCj4gIAkvKgo+IC0JICogVE9ETzogV2UgY291
bGQgcGxhY2UgaGVyZSBjb2RlIHRoYXQgZXh0cmFjdHMgYW4gYXJjaGl2ZQo+IC0JICogZm91bmQg
YXMgaW5pdHJkIHRvICcvJwo+ICsJICogVE9ETzogQWx0ZXJuYXRpdmVseSB3ZSBjb3VsZCBleHRy
YWN0IGFuIGFyY2hpdmUgZm91bmQKPiArCSAqIGFzIGluaXRyZCB0byBhIHJhbWZzICcvJyBpZiB3
ZSBoYXZlIGdvdCBmc25hbWUgJ2luaXRyZCcKPiAgCSAqLwo+ICAKPiAgI2lmZGVmIENPTkZJR19M
SUJVS0JPT1RfREVWRlMKPiAgCXVrX3ByX2luZm8oIk1vdW50ICcvZGV2Jy4uLlxuIik7Cj4gLQly
ZXQgPSAgbWtkaXIoIi9kZXYiLCBTX0lSV1hVKTsKPiAtCWlmIChyZXQgIT0gMCkKPiAtCQlVS19D
UkFTSCgiRmFpbGVkIHRvIGNyZWF0ZSBkaXJlY3RvcnkgJy9kZXYnXG4iKTsKPiArCj4gKwkvKgo+
ICsJICogVHJ5IHRvIGNyZWF0ZSB0aGUgbW91bnQgcG9pbnQuCj4gKwkgKiBXZSBhcmUgaWdub3Jp
bmcgZXJyb3JzIGJlY2F1c2UgaXQgY291bGQgZXhpc3QgYWxyZWFkeS4KPiArCSAqLwo+ICsJbWtk
aXIoIi9kZXYiLCBTX0lSV1hVKTsKCm1rZGlyKCkgbWF5IGZhaWwgYmVjYXVzZSBvZiBtdWx0aXBs
ZSByZWFzb25zLCBub3Qgb25seSB3aGVuIHRoZQpkaXJlY3RvcnkgZXhpc3QuIFRoYXQncyB3aHkg
d2Ugc2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgcmV0dXJuIGNvZGUgaGVyZSwKYnV0IHRoYXQncyBh
bHNvIHVuaXZlcnNhbGx5IHRydWUuIFlvdSBzaG91bGQgY2hlY2sgaWYgdGhlIGRpcmVjdG9yeQpl
eGlzdHMgYmVmb3JlIGFuZCBpZiBub3QsIHRoZW4geW91IGNyZWF0ZSBpdC4KCj4gIAo+ICAJcmV0
ID0gbW91bnQoIiIsICIvZGV2IiwgImRldmZzIiwgMCwgTlVMTCk7Cj4gIAlpZiAocmV0ICE9IDAp
Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 14:46:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 14:46:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6ySb-0004tr-Ep; Sun, 08 Sep 2019 14:46:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6ySa-0004tm-LM
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 14:46:36 +0000
X-Inumbo-ID: 749b5568-d247-11e9-978d-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 749b5568-d247-11e9-978d-bc764e2007e4;
 Sun, 08 Sep 2019 14:46:35 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id q14so11096470wrm.9
 for <minios-devel@lists.xen.org>; Sun, 08 Sep 2019 07:46:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=BFpzW54f7Z8xG99WJrYAVfSFFSuC9u/vs5AhyvEI2xU=;
 b=IC2Ta2vS15DyyX96t0lF/7bsbKTz9d3kt4GIzBwNRN1M9qpISewz7ckVAxzOP49Y/U
 X5zI3FRExdB7DfT6oTRVLlg0dKtIqBqvDPMPysjLWAlzPnX3HflnSK8ADGI22o4TFgSN
 4cqNURDG7it7GgAqv5Q0ZV2hfmYRFvbYcEeJpVwEJ9E95t4R07MWmFjBgTNuD04yLCQB
 dYBXsb2y8icdc1bQdI97kRW/44jMpAyByx6anGmr5zE9shM/4ixFQZRn/IYW2+kr3sPB
 jbyoh/x+NamU/QI/0cD00E3RKYqdVEba9l7ZZjCmdl6kYLtTcihkmDdgws+9ZWrfDSEE
 +6Aw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=BFpzW54f7Z8xG99WJrYAVfSFFSuC9u/vs5AhyvEI2xU=;
 b=unSSN4HKP+S+neKaQkDdg8NH2b1oNm0uV4KYNBx3d+5Sy+H4pgIFDehYaPUOoWlHzW
 AugIetYfJOyBn1w+Xky8QbtulM9rhGx67AptzRin+tGRLXZrXnjZ53fuV3A38PZFb2fW
 U6Ol/vvlrYVb4+j2Hev17C4sXTNZBjgi5gv9AceM1/mNjHJKNPZHKQH8P/6+0/Gz/E8u
 5sjFJZ9gDSveKtDTBUZfZTXAr3K6XO+7wlScCEUg+GrJD+XUBKTR14fZEji6Y2HcyOkt
 BVGvTKZKGDV1TbRqpiyJh9jCQIFKgASYbGfQpUuIWPsRU+YYGiHd54sj5c7BfX+yb48V
 U48A==
X-Gm-Message-State: APjAAAWnDeXMiO0PjF4NbwaTkP+ZDsKHOCAxktGoe5u3FLCEA3Mo/O5J
 WAGKpFzh3xBgozMSKwFv+j0=
X-Google-Smtp-Source: APXvYqxdi742Ga6oeyiA/dWGmbKBFLknQ/cVcde/tmRNGwrbxs883LM4R9qffUH54SWPR+ZNhUDHzQ==
X-Received: by 2002:adf:ee45:: with SMTP id w5mr14661585wro.246.1567953994861; 
 Sun, 08 Sep 2019 07:46:34 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id m17sm12461652wrs.9.2019.09.08.07.46.34
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 08 Sep 2019 07:46:34 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20190906120306.18966-6-simon.kuenzer@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <20acee32-fa93-e551-6c78-6d08990b2fa7@gmail.com>
Date: Sun, 8 Sep 2019 17:46:33 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190906120306.18966-6-simon.kuenzer@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 5/6] lib/ukswrand: Clean-up:
 devfs nodes are independent of MWC algorithm
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpQbGVhc2Ugc2VlIGlubGluZS4KCk9uIDkvNi8xOSAzOjAzIFBNLCBTaW1vbiBL
dWVuemVyIHdyb3RlOgo+IFRoaXMgcGF0Y2ggY2xlYW5zIHVwIHRoZSBkZXZmcyBpbnRlZ3JhdGlv
biBvZiB1a3N3cmFuZDoKPiAtIFRoZSBjb25maWcgb3B0aW9uIGlzIHByb3Blcmx5IG5hbWVzcGFj
ZWQuCj4gLSBtd2NfZGV2LmMgaXMgYWN0dWFsbHkgaW5kZXBlbmRlbnQgb2YgdGhlIHJhbmRvbSBu
dW1iZXIgZ2VuZXJhdG9yIE1XQy4KPiAgIFdlIG1vdmUgdGhpcyBmaWxlIHRvIGRldi5jCj4gLSBD
cmFzaCB0aGUgc3lzdGVtIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxlZCB3aXRoaW4gdGhlIGNvbnN0
cnVjdG9yLgo+ICAgVGhpcyBiZWhhdmlvciBjYW4gYmUgY2hhbmdlZCBhcyBzb29uIGFzIHdlIGlu
dHJvZHVjZSBVbmlrcmFmdCBpbml0Cj4gICBmdW5jdGlvbnMgdGhhdCBjYW4gcmV0dXJuIGVycm9y
IGNvZGVzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJA
bmVjbGFiLmV1Pgo+IC0tLQo+ICBsaWIvdWtzd3JhbmQvQ29uZmlnLnVrICAgICAgICAgICAgfCAg
NSArKy0tLQo+ICBsaWIvdWtzd3JhbmQvTWFrZWZpbGUudWsgICAgICAgICAgfCAgNiArKy0tLS0K
PiAgbGliL3Vrc3dyYW5kL3ttd2NfZGV2LmMgPT4gZGV2LmN9IHwgMjYgKysrKysrKysrKysrKysr
KysrLS0tLS0tLS0KPiAgMyBmaWxlcyBjaGFuZ2VkLCAyMiBpbnNlcnRpb25zKCspLCAxNSBkZWxl
dGlvbnMoLSkKPiAgcmVuYW1lIGxpYi91a3N3cmFuZC97bXdjX2Rldi5jID0+IGRldi5jfSAoODMl
KQo+IAo+IGRpZmYgLS1naXQgYS9saWIvdWtzd3JhbmQvQ29uZmlnLnVrIGIvbGliL3Vrc3dyYW5k
L0NvbmZpZy51awo+IGluZGV4IGExYTg0YmM1Li40MGQyMmM4NiAxMDA2NDQKPiAtLS0gYS9saWIv
dWtzd3JhbmQvQ29uZmlnLnVrCj4gKysrIGIvbGliL3Vrc3dyYW5kL0NvbmZpZy51awo+IEBAIC0x
OCw5ICsxOCw4IEBAIGNvbmZpZyBMSUJVS1NXUkFORF9JTklUSUFMU0VFRAo+ICAJaW50ICJJbml0
aWFsIHJhbmRvbSBzZWVkIgo+ICAJZGVmYXVsdCAyMwo+ICAKPiAtY29uZmlnIERFVl9SQU5ET00K
PiAtCWJvb2wgIi9kZXYvcmFuZG9tIGRldmljZSIKPiArY29uZmlnIExJQlVLU1dSQU5EX0RFVkZT
Cj4gKwlib29sICJSZWdpc3RlciByYW5kb20gYW5kIHVyYW5kb20gdG8gZGV2ZnMiCj4gIAlzZWxl
Y3QgTElCREVWRlMKPiAgCWRlZmF1bHQgbgo+IC0KPiAgZW5kaWYKPiBkaWZmIC0tZ2l0IGEvbGli
L3Vrc3dyYW5kL01ha2VmaWxlLnVrIGIvbGliL3Vrc3dyYW5kL01ha2VmaWxlLnVrCj4gaW5kZXgg
MjUyNDc0NzQuLmIxOTA5NGUwIDEwMDY0NAo+IC0tLSBhL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51
awo+ICsrKyBiL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51awo+IEBAIC0zLDcgKzMsNSBAQCAkKGV2
YWwgJChjYWxsIGFkZGxpYl9zLGxpYnVrc3dyYW5kLCQoQ09ORklHX0xJQlVLU1dSQU5EKSkpCj4g
IENJTkNMVURFUy0kKENPTkZJR19MSUJVS1NXUkFORCkJKz0gLUkkKExJQlVLU1dSQU5EX0JBU0Up
L2luY2x1ZGUKPiAgQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUtTV1JBTkQpICs9IC1JJChMSUJV
S1NXUkFORF9CQVNFKS9pbmNsdWRlCj4gIAo+IC1MSUJVS1NXUkFORF9TUkNTLSQoQ09ORklHX0xJ
QlVLU1dSQU5EX01XQykgKz0gJChMSUJVS1NXUkFORF9CQVNFKS9td2MuYwo+IC1pZmRlZiBDT05G
SUdfREVWX1JBTkRPTQo+IC1MSUJVS1NXUkFORF9TUkNTLSQoQ09ORklHX0xJQlVLU1dSQU5EX01X
QykgKz0gJChMSUJVS1NXUkFORF9CQVNFKS9td2NfZGV2LmMKPiAtZW5kaWYKPiArTElCVUtTV1JB
TkRfU1JDUy0kKENPTkZJR19MSUJVS1NXUkFORF9NV0MpICAgKz0gJChMSUJVS1NXUkFORF9CQVNF
KS9td2MuYwo+ICtMSUJVS1NXUkFORF9TUkNTLSQoQ09ORklHX0xJQlVLU1dSQU5EX0RFVkZTKSAr
PSAkKExJQlVLU1dSQU5EX0JBU0UpL2Rldi5jCj4gZGlmZiAtLWdpdCBhL2xpYi91a3N3cmFuZC9t
d2NfZGV2LmMgYi9saWIvdWtzd3JhbmQvZGV2LmMKPiBzaW1pbGFyaXR5IGluZGV4IDgzJQo+IHJl
bmFtZSBmcm9tIGxpYi91a3N3cmFuZC9td2NfZGV2LmMKPiByZW5hbWUgdG8gbGliL3Vrc3dyYW5k
L2Rldi5jCj4gaW5kZXggNWE0Y2IxMDAuLmM1Y2U1Zjg3IDEwMDY0NAo+IC0tLSBhL2xpYi91a3N3
cmFuZC9td2NfZGV2LmMKPiArKysgYi9saWIvdWtzd3JhbmQvZGV2LmMKPiBAQCAtMTAxLDE5ICsx
MDEsMjkgQEAgc3RhdGljIHN0cnVjdCBkcml2ZXIgZHJ2X3VyYW5kb20gPSB7Cj4gIAkubmFtZSA9
IERFVl9VUkFORE9NX05BTUUKPiAgfTsKPiAgCj4gLV9fY29uc3RydWN0b3JfcHJpbygxMDIpIHN0
YXRpYyB2b2lkIF91a19kZXZfc3dyYW5kX2N0b3Iodm9pZCkKPiArLyoKPiArICogTk9URTogV2Ug
cmVnaXN0ZXIgdGhlIGRldmljZSBub2RlcyBhcyBhcHBsaWNhdGlvbiBjb25zdHJ1Y3Rvcgo+ICsg
KiBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgb2YgdGltZSB3ZSBjYW4gZXhwZWN0IHRoYXQgYSBtZW1v
cnkgYWxsb2NhdG9yCj4gKyAqIGlzIGF2YWlsYWJsZS4KPiArICovCj4gKy8qCj4gKyAqIFRPRE86
IE1vdmUgdGhpcyByZWdpc3RyYXRpb24gdG8gYW4gVW5pa3JhZnQgaW5pdCB0YWJsZSBhcyBzb29u
IHdlIGhhdmUgaXQKPiArICogYXZhaWxhYmxlLiBBcHBsaWNhdGlvbiBjb25zdHJ1Y3RvcnMgbWF5
IHJlcXVpcmUgcmFuZG9tIGFuZCB1cmFuZG9tIGFscmVhZHkKPiArICogYmVpbmcgYXZhaWxhYmxl
IHdoZW4gdGhleSBnZXQgY2FsbGVkLgo+ICsgKi8KPiArX19jb25zdHJ1Y3Rvcl9wcmlvKDEwMSkg
c3RhdGljIHZvaWQgX3VrX2Rldl9zd3JhbmRfY3Rvcih2b2lkKQoKSSBkb24ndCB1bmRlcnN0YW5k
IHdoeSB5b3UgY2hhbmdlIHRoZSBwcmlvcml0eSBoZXJlLiBMZXQncyBjaGFuZ2UgaXQKcHJvcGVy
bHkgaW4gYW5vdGhlciBwYXRjaCB3aGVuIHdlJ2xsIGludHJvZHVjZSBhIGZpbGUvbGlzdCBvZiBw
cmlvcml0aWVzCihlLmcuIHdpdGggbWFjcm9zIGxpa2UgJyNkZWZpbmUgQ09OU1RSVUNUT1JfUFJJ
T19TV1JBTkQgMTAyKS4KCj4gIHsKPiAgCXN0cnVjdCBkZXZpY2UgKmRldjsKPiAgCj4gLQl1a19w
cl9pbmZvKCJBZGQgL2Rldi9yYW5kb20gYW5kIC9kZXYvdXJhbmRvbVxuIik7Cj4gKwl1a19wcl9p
bmZvKCJSZWdpc3RlciByYW5kb20gYW5kIHVyYW5kb20gdG8gZGV2ZnNcbiIpOwo+ICAKPiAtCS8q
IHJlZ2lzdGVyIC9kZXYvdXJhbmRvbSAqLwo+ICsJLyogcmVnaXN0ZXIgdXJhbmRvbSAqLwo+ICAJ
ZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZHJ2X3VyYW5kb20sIERFVl9VUkFORE9NX05BTUUsIERfQ0hS
KTsKPiAtCWlmIChkZXYgPT0gTlVMTCkKClBsZWFzZSBrZWVwIHRoZSBjaGFuZ2VzIHRvIGEgbWlu
aW11bSwgaS5lLiBsZWF2ZSB0aGVzZSBgaWYgKGRldiA9PQpOVUxMKWAgY2hlY2tzIGFzIHRoZXkg
YXJlLiBJdCBkb2VzIGJvdGhlciBtZSB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIG5vdApvYmplY3Rp
dmVseSBiZXR0ZXIsIGJ1dCB0aGVzZSBjaGVja3MgYXJlIGluIG5vIHdheSBiZXR0ZXIgdGhhbiBi
ZWZvcmUuCgo+IC0JCXVrX3ByX2luZm8oIkZhaWxlZCB0byByZWdpc3RlciAvZGV2L3VyYW5kb21c
biIpOwo+ICsJaWYgKCFkZXYpCj4gKwkJVUtfQ1JBU0goIkZhaWxlZCB0byByZWdpc3RlciB1cmFu
ZG9tIHRvIGRldmZzXG4iKTsKPiAgCj4gLQkvKiByZWdpc3RlciAvZGV2L3JhbmRvbSAqLwo+ICsJ
LyogcmVnaXN0ZXIgcmFuZG9tICovCj4gIAlkZXYgPSBkZXZpY2VfY3JlYXRlKCZkcnZfcmFuZG9t
LCBERVZfUkFORE9NX05BTUUsIERfQ0hSKTsKPiAtCWlmIChkZXYgPT0gTlVMTCkKClBsZWFzZSBr
ZWVwIHRoZSBjaGFuZ2VzIHRvIGEgbWluaW11bSwgaS5lLiBsZWF2ZSB0aGVzZSBgaWYgKGRldiA9
PQpOVUxMKWAgY2hlY2tzIGFzIHRoZXkgYXJlLgoKPiAtCQl1a19wcl9pbmZvKCJGYWlsZWQgdG8g
cmVnaXN0ZXIgL2Rldi9yYW5kb21cbiIpOwo+ICsJaWYgKCFkZXYpCj4gKwkJVUtfQ1JBU0goIkZh
aWxlZCB0byByZWdpc3RlciByYW5kb20gdG8gZGV2ZnNcbiIpOwo+ICB9Cj4gCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 14:55:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 14:55:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6ybb-0005da-6Y; Sun, 08 Sep 2019 14:55:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6ybZ-0005dV-KW
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 14:55:53 +0000
X-Inumbo-ID: c0b4d252-d248-11e9-a337-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c0b4d252-d248-11e9-a337-bc764e2007e4;
 Sun, 08 Sep 2019 14:55:52 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id q19so11025768wmc.3
 for <minios-devel@lists.xen.org>; Sun, 08 Sep 2019 07:55:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=o1zBMA2qAdu4dLkNaoVsZWsv/z0QXpq5cT8WyGrGErI=;
 b=BOAJNBM9K/8UzIiAkW+Lv907b3bUQPKuQfkrsWJscmaTvbETO5gFDN24Zz7HCiZ5aT
 U5tb4wq2tHvMTqipUndXN2I+ZVfrF2yK/de5MeHmsPGh+YY8MbuojemzzzC3BNZbn4HZ
 b1+10taUX2xUsCW5/MBGOqRip7jvtQu2TAVqjXQV/J238XH1W/Zz1VojU0vJy/BX5mFO
 3+kEc+rSOwSCXYl8yMENZvrIvZXwJNu0xRmosaFh0XIU7qzNZLFj83imzW/4vmLIYMkm
 zIv0rhPl5N++/N8JpUIF0Saz3m9+ij/0/3Elb0Epp9Dz0oKa/943MbEZtovv4XBnM/Cw
 6Z7A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=o1zBMA2qAdu4dLkNaoVsZWsv/z0QXpq5cT8WyGrGErI=;
 b=SKsjegugk7m+iyBXpelxG5xHBjqlT/OourDikk8Wt2uuNrTrMCvp4mKDwpHQRoNbWj
 3q+eNhgJK+JutkbRIfLh+8ScUmiYBLadkpHFnw7MavMwXinxLNxhRf7cYXriIQHWm7s+
 OmywJbgef2ZpRmi95beF035CvZyWCRr0TVpyk/HZEwG1YGjg/b+L9MH9O0ONGs6PPz20
 xv0O+rUTxWPag1K/fyrmPRj1XfP1sUzocRcydlHWQQTxPiOMic572vPKO4RKN83YXNak
 uzqjXcBIOampuq81UUQYdVqEc9kiWhwWiDTa7FESnhBzZ+eE75TLhUtZM8JdAOZ10Ehy
 kJuw==
X-Gm-Message-State: APjAAAXq8CvBoieEGf4RZ69MhyMEdiFYRtgDQ2D7QsV4yJOB7fBmB1wI
 1v130E5IwMwKzn9EtQOqYEc=
X-Google-Smtp-Source: APXvYqxSuXlKknjlIQbWMeo2jurEWbLcDoeVVPJnJeRYgVhZBJYVkHMlGKnCi2drzT0remayp2l3Kw==
X-Received: by 2002:a1c:a558:: with SMTP id o85mr15149239wme.30.1567954552082; 
 Sun, 08 Sep 2019 07:55:52 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id n14sm33524470wra.75.2019.09.08.07.55.51
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 08 Sep 2019 07:55:51 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20190906120306.18966-5-simon.kuenzer@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <3844facd-4638-a26a-760f-32c8425db97b@gmail.com>
Date: Sun, 8 Sep 2019 17:55:50 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190906120306.18966-5-simon.kuenzer@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 4/6] lib/ramfs: Config.uk:
 Use select for dependency
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpJbiBvcmRlciB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGxvZ2ljIGZvciB0
aGUgZmlsZXN5c3RlbSBvcHRpb25zIGluCm1lbnVjb25maWcsIHlvdSBzaG91bGQgcmVhZCB0aGUg
J3Zmc2NvcmU6IC4uLicgb3B0aW9uIGFzICdGaWxlc3lzdGVtcycKKGFuZCBtYXliZSBpdCBzaG91
bGQgYmUgcmVuYW1lZCB0aGF0IHdheSkuIFNvLCBpbiBvcmRlciB0byByZWFjaApzZWxlY3Rpbmcg
cmFtZnMgeW91IHNob3VsZCBmaXJzdCBzZWxlY3QgJ0ZpbGVzeXN0ZW1zJyBzdXBwb3J0LiBBcHBs
eWluZwp5b3VyIHBhdGNoIG5vdyB3b3VsZCBwdXQgcmFtZnMgb24gdGhlIHNhbWUgbGV2ZWwgYXMg
J3Zmc2NvcmU6IC4uLicgd2hpY2gKd291bGQgbWFrZSBpdCB1bm5lY2Vzc2FyeS4KCk9uIDkvNi8x
OSAzOjAzIFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+IFVzZSBgc2VsZWN0YCBpbnN0ZWFkIG9m
IGBkZXBlbmRzIG9uYCB3aGljaCBtYWtlcyB0aGUgZmlsZXN5c3RlbQo+IGxpYnJhcnkgZXhpc3Rl
bmNlIG1vcmUgb2J2aW91cyB3aXRoaW4gdGhlIG1lbnUuCj4gCj4gU2lnbmVkLW9mZi1ieTogU2lt
b24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Cj4gLS0tCj4gIGxpYi9yYW1mcy9D
b25maWcudWsgfCAyICstCj4gIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxl
dGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9saWIvcmFtZnMvQ29uZmlnLnVrIGIvbGliL3JhbWZz
L0NvbmZpZy51awo+IGluZGV4IDUyZTQzODhjLi5iOGQ5ODkzNiAxMDA2NDQKPiAtLS0gYS9saWIv
cmFtZnMvQ29uZmlnLnVrCj4gKysrIGIvbGliL3JhbWZzL0NvbmZpZy51awo+IEBAIC0xLDQgKzEs
NCBAQAo+ICBjb25maWcgTElCUkFNRlMKPiAgCWJvb2wgInJhbWZzOiBzaW1wbGUgUkFNIGZpbGUg
c3lzdGVtIgo+ICAJZGVmYXVsdCBuCj4gLQlkZXBlbmRzIG9uIExJQlZGU0NPUkUKPiArCXNlbGVj
dCBMSUJWRlNDT1JFCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 15:01:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 15:01:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6yh3-0006Ms-LW; Sun, 08 Sep 2019 15:01:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6yh2-0006Mn-1u
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 15:01:32 +0000
X-Inumbo-ID: 8a50060e-d249-11e9-b299-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 8a50060e-d249-11e9-b299-bc764e2007e4;
 Sun, 08 Sep 2019 15:01:31 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id t17so11048661wmi.2
 for <minios-devel@lists.xen.org>; Sun, 08 Sep 2019 08:01:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=blKbRRWmBy8UBGmt2KfvGEqlRBcS4CV8sLPTTs+NC8M=;
 b=YEt/mOkfJdQ+TB/mh7dlFIBthJWhsXfY6sdpHH0VDjOtNnalekDBmtoWqRjCydDvhv
 ybk4jxkan4m5umLK7PIzhhnxjU4VfQqHJ7b2Ev4tjyRH0+FW+CHDG+Pv1vbAKtU4G1sR
 kqlqemit9Gh7H5XVG3oSAN425kcw5dJmzUS2uQbYiwZGpJrOwuWLA8kuv7kQa0ody2e6
 sRdODgFMSqkv66HjS4p6ev9WxsAXmxcqTFQxw/PoT1I9bGngO6Qox/WemT44Q8Ru+Sxy
 ADmEDbf4gF3W2g/UZcwK40Fb4DLXuwGykV5e6r7vhDH8CFIElh+NJzcbl6rX0bV9nW67
 AbRg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=blKbRRWmBy8UBGmt2KfvGEqlRBcS4CV8sLPTTs+NC8M=;
 b=dl2wM904BW4BCNWaNjQAhgoxR+dIHw1mkDdSdYjENaKJK8TkYeviSiFsRoUT12n1LN
 SS7HeF9KKt3xEEywXGs7mVMjylbuxXLWhUZcpQuFqbRMPv/aN1tgKnWnSpkNsjM9c4wN
 VB4Im9Dzvwxccvo7ORyyUU0ZJjLB4kwLX1kZBmJDcJBXOhD1LsbE/lVLl2YVRyjHo5kO
 J9J+jr6KDa4xgoIaS2FHOsqAgqHQEkGCO33zkpxQ1FVRGp3lU+8qAGBlIviT/JIQGPT/
 8xrjdmb2l0X2QxNhUC4DGO9mmSreFbZNH2jLRYGjcm1G1tlVdXgthVFUlqUJCokOjCmS
 4qVQ==
X-Gm-Message-State: APjAAAX00Y1Wj48YGyAnZpDeiG+ztMQnTgoBddL/0va53lX9PVj43Dq/
 7y0Ub/KuWApBnIi51WecyOM=
X-Google-Smtp-Source: APXvYqw0nPYLR2nhNDY9aTpaeS33v3XEaslsJS/tVovr5fZaB4vu6D3dZ6sOY1fD5AtO5UZI72GFOw==
X-Received: by 2002:a7b:c318:: with SMTP id k24mr16433832wmj.113.1567954890288; 
 Sun, 08 Sep 2019 08:01:30 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id s12sm1634461wrn.90.2019.09.08.08.01.29
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 08 Sep 2019 08:01:29 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20190906120306.18966-3-simon.kuenzer@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <77d59300-6ecc-8fe1-134c-67222bf41d9c@gmail.com>
Date: Sun, 8 Sep 2019 18:01:28 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190906120306.18966-3-simon.kuenzer@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 2/6] lib/devfs,
 lib/ukboot: Move option to automatically mount root to libukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpUaGUgZ2VuZXJhbCBjb21tZW50IGluIHBhdGNoIDYvNiB3b3VsZCBhcHBseSBo
ZXJlIGFzIHdlbGwuIEl0IHdvdWxkIGJlCmJldHRlciBpZiB3ZSB3b3VsZCBoYXZlIHRoaXMga2lu
ZCBvZiBsb2dpYyBmb3IgaW5pdGlhbGl6aW5nIHRoZQpmaWxlc3lzdGVtIGVsc2V3aGVyZSwgbWF5
YmUgaW4gdmZzY29yZSBpbiBhIG5ldyBmaWxlLgoKT24gOS82LzE5IDM6MDMgUE0sIFNpbW9uIEt1
ZW56ZXIgd3JvdGU6Cj4gTW92ZXMgdGhlIG9wdGlvbiBvZiBhdXRvbWF0aWNhbGx5IG1vdW50aW5n
IHJhbWZzIGFzIGEgcm9vdCBmaWxlc3lzdGVtCj4gdG8gbGliL3VrYm9vdC4gVGhpcyBmZWF0dXJl
IGlzIG5vdCBvbmx5IHVzZWZ1bCBmb3IgaW5pdGlhbGl6aW5nCj4gZGV2ZnMuIFRoZSBpZGVhIGlz
IHRoYXQgd2UgY291bGQgbGF0ZXIgZmVlZCBpdHMgaW5pdGlhbCBjb250ZW50IGZyb20gYQo+IGFy
Y2hpdmUgZ2l2ZW4gdGhyb3VnaCBhbiBpbml0cmQuCj4gCj4gU2lnbmVkLW9mZi1ieTogU2ltb24g
S3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Cj4gLS0tCj4gIGxpYi9kZXZmcy9Db25m
aWcudWsgICAgIHwgIDggKy0tLS0tLS0KPiAgbGliL2RldmZzL2RldmZzX3Zub3BzLmMgfCAyNSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gIGxpYi91a2Jvb3QvQ29uZmlnLnVrICAgIHwgIDUg
KysrKysKPiAgbGliL3VrYm9vdC9ib290LmMgICAgICAgfCAyOCArKysrKysrKysrKysrKysrKysr
KysrKysrKysrCj4gIDQgZmlsZXMgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRp
b25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi9kZXZmcy9Db25maWcudWsgYi9saWIvZGV2ZnMv
Q29uZmlnLnVrCj4gaW5kZXggZTM4YTYxNmUuLmY2YjE2YWVlIDEwMDY0NAo+IC0tLSBhL2xpYi9k
ZXZmcy9Db25maWcudWsKPiArKysgYi9saWIvZGV2ZnMvQ29uZmlnLnVrCj4gQEAgLTEsMTAgKzEs
NCBAQAo+ICBjb25maWcgTElCREVWRlMKPiAgCWJvb2wgImRldmZzOiBkZXZmcyBmaWxlIHN5c3Rl
bSIKPiAgCWRlZmF1bHQgbgo+IC0JZGVwZW5kcyBvbiBMSUJWRlNDT1JFCj4gLWlmIExJQkRFVkZT
Cj4gLSAgICAgICAgY29uZmlnIExJQkRFVkZTX1VTRV9SQU1GUwo+IC0gICAgICAgIGJvb2wgIlVz
ZSByYW1mcyBhcyByb290Igo+IC0gICAgICAgIGRlZmF1bHQgbgo+IC0gICAgICAgIHNlbGVjdCBM
SUJSQU1GUwo+IC1lbmRpZgo+ICsJc2VsZWN0IExJQlZGU0NPUkUKPiBkaWZmIC0tZ2l0IGEvbGli
L2RldmZzL2RldmZzX3Zub3BzLmMgYi9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYwo+IGluZGV4IDEx
YTNlYTA1Li4zMzk5YjJiYyAxMDA2NDQKPiAtLS0gYS9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYwo+
ICsrKyBiL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jCj4gQEAgLTMwOSwyOCArMzA5LDMgQEAgc3Rh
dGljIHN0cnVjdCB2ZnNjb3JlX2ZzX3R5cGUgZnNfZGV2ZnMgPSB7Cj4gIH07Cj4gIAo+ICBVS19G
U19SRUdJU1RFUihmc19kZXZmcyk7Cj4gLQo+IC1fX2NvbnN0cnVjdG9yX3ByaW8oMTAxKSBzdGF0
aWMgdm9pZCBkZXZmc19pbml0KHZvaWQpCj4gLXsKPiAtI2lmZGVmIENPTkZJR19MSUJERVZGU19V
U0VfUkFNRlMKPiAtCWludCByZXQ7Cj4gLQo+IC0JcmV0ID0gbW91bnQoIiIsICIvIiwgInJhbWZz
IiwgMCwgTlVMTCk7Cj4gLQlpZiAocmV0ICE9IDApIHsKPiAtCQl1a19wcl9kZWJ1ZygiRmFpbGVk
IHRvIG1vdW50IC8gaW4gJXNcbiIsIF9fZnVuY19fKTsKPiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+
IC0JcmV0ID0gIG1rZGlyKCIvZGV2IiwgU19JUldYVSk7Cj4gLQlpZiAocmV0ICE9IDApIHsKPiAt
CQl1a19wcl9kZWJ1ZygiRmFpbGVkIHRvIG1rZGlyIC9kZXYgaW4gJXNcbiIsIF9fZnVuY19fKTsK
PiAtCQlyZXR1cm47Cj4gLQl9Cj4gLQo+IC0JcmV0ID0gbW91bnQoIiIsICIvZGV2IiwgImRldmZz
IiwgMCwgTlVMTCk7Cj4gLQlpZiAocmV0ICE9IDApIHsKPiAtCQl1a19wcl9kZWJ1ZygiRmFpbGVk
IHRvIG1vdW50IC9kZXYgYXMgZGV2ZnMgaW4gJXNcbiIsIF9fZnVuY19fKTsKPiAtCQlyZXR1cm47
Cj4gLQl9Cj4gLSNlbmRpZgo+IC19Cj4gZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvQ29uZmlnLnVr
IGIvbGliL3VrYm9vdC9Db25maWcudWsKPiBpbmRleCA4NDFhODc2Ny4uNmY4NmM3ZGUgMTAwNjQ0
Cj4gLS0tIGEvbGliL3VrYm9vdC9Db25maWcudWsKPiArKysgYi9saWIvdWtib290L0NvbmZpZy51
awo+IEBAIC0yMSw0ICsyMSw5IEBAIGlmIExJQlVLQk9PVAo+ICAJYm9vbCAiSW5pdGlhbGl6ZSB1
a2FsbG9jYmJ1ZGR5IGFzIGFsbG9jYXRvciIKPiAgCWRlZmF1bHQgeQo+ICAJc2VsZWN0IExJQlVL
QUxMT0NCQlVERFkKPiArCj4gKwljb25maWcgTElCVUtCT09UX1ZGU1JPT1QKPiArCWJvb2wgIk1v
dW50IHJhbWZzIHRvIC8iCj4gKwlkZWZhdWx0IG4KPiArCXNlbGVjdCBMSUJSQU1GUwo+ICBlbmRp
Zgo+IGRpZmYgLS1naXQgYS9saWIvdWtib290L2Jvb3QuYyBiL2xpYi91a2Jvb3QvYm9vdC5jCj4g
aW5kZXggN2ZiMDkwOGEuLmNiMzQwM2UxIDEwMDY0NAo+IC0tLSBhL2xpYi91a2Jvb3QvYm9vdC5j
Cj4gKysrIGIvbGliL3VrYm9vdC9ib290LmMKPiBAQCAtNjMsNiArNjMsMTEgQEAKPiAgI2lmZGVm
IENPTkZJR19MSUJVS0xJQlBBUkFNCj4gICNpbmNsdWRlIDx1ay9saWJwYXJhbS5oPgo+ICAjZW5k
aWYgLyogQ09ORklHX0xJQlVLTElCUEFSQU0gKi8KPiArI2lmZGVmIENPTkZJR19MSUJVS0JPT1Rf
VkZTUk9PVAo+ICsjaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9tb3VudC5o
Pgo+ICsjZW5kaWYgLyogQ09ORklHX0xJQlVLQk9PVF9WRlNST09UICovCj4gKwo+ICAKPiAgaW50
IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgX193ZWFrOwo+ICAjaWZkZWYgQ09ORklHX0xJ
QkxXSVAKPiBAQCAtODksNiArOTQsMjkgQEAgc3RhdGljIHZvaWQgbWFpbl90aHJlYWRfZnVuYyh2
b2lkICphcmcpCj4gIAl1a19idXNfcHJvYmVfYWxsKCk7Cj4gICNlbmRpZiAvKiBDT05GSUdfTElC
VUtCVVMgKi8KPiAgCj4gKwkvKgo+ICsJICogVkZTIGluaXRpYWxpemF0aW9uCj4gKwkgKi8KPiAr
I2lmZGVmIENPTkZJR19MSUJVS0JPT1RfVkZTUk9PVAo+ICsJLyoKPiArCSAqIFRPRE86IFByb3Zp
ZGUgYSBib290IHBhcmFtZXRlciBvcHRpb24gdG8gc3BlY2lmeSBhIGN1c3RvbQo+ICsJICogcm9v
dCBtb3VudCAoZS5nLiwgcmFtZnMsIGluaXRyZCwgOXBmcykuCj4gKwkgKi8KPiArCXVrX3ByX2lu
Zm8oIk1vdW50IHJvb3QuLi5cbiIpOwo+ICsJcmV0ID0gbW91bnQoIiIsICIvIiwgInJhbWZzIiwg
MCwgTlVMTCk7Cj4gKwlpZiAocmV0ICE9IDApCj4gKwkJVUtfQ1JBU0goIkZhaWxlZCB0byBtb3Vu
dCByYW1mcyB0byAvXG4iKTsKCkdpdmVuIHRoYXQgbm93IHdlIGFsc28gaGF2ZSA5cGZzLCB3ZSBj
YW4ndCBhcHBseSB0aGlzIGtpbmQgb2Ygc29sdXRpb24KYW55bW9yZS4gV2Ugc2hvdWxkIHRoaW5r
IGFib3V0IGEgbW9yZSBzY2FsYWJsZSBvbmUgdG8gc3VwcG9ydCBtdWx0aXBsZQpmaWxlc3lzdGVt
cyB0eXBlcy4gTW9yZSB0aGFuIHRoYXQsIGl0J3MgdmVyeSBjb25mdXNpbmcgdGhhdCB0aGUgY2hh
bmdlcwpvZiB0aGlzIHBhdGNoIGFyZSBsYXRlciB0b3VjaGVkIGJ5IHBhdGNoZXMgaW4gdGhpcyBz
ZXJpZXMsIHNvIHBsZWFzZQptYWtlIHRoZSBuZWNlc3NhcnkgY2hhbmdlcyBvbmx5IG9uY2UuCgo+
ICsKPiArCS8qCj4gKwkgKiBUT0RPOiBXZSBjb3VsZCBwbGFjZSBoZXJlIGNvZGUgdGhhdCBleHRy
YWN0cyBhbiBhcmNoaXZlCj4gKwkgKiBmb3VuZCBhcyBpbml0cmQgdG8gJy8nCj4gKwkgKi8KPiAr
Cj4gKyNlbmRpZiAvKiBDT05GSUdfTElCVUtCT09UX1ZGU1JPT1QgKi8KPiArCj4gKwkvKgo+ICsJ
ICogTmV0d29yayBpbml0aWFsaXphdGlvbgo+ICsJICovCj4gICNpZmRlZiBDT05GSUdfTElCTFdJ
UAo+ICAJLyoKPiAgCSAqIFRPRE86IFRoaXMgaXMgYW4gaW5pdGlhbCBpbXBsZW1lbnRhdGlvbiB3
aGVyZSB3ZSBjYWxsIHRoZQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 15:03:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 15:03:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6yiU-0006Os-Qq; Sun, 08 Sep 2019 15:03:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6yiU-0006On-4L
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 15:03:02 +0000
X-Inumbo-ID: c02065f8-d249-11e9-978d-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c02065f8-d249-11e9-978d-bc764e2007e4;
 Sun, 08 Sep 2019 15:03:01 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id t9so11838457wmi.5
 for <minios-devel@lists.xen.org>; Sun, 08 Sep 2019 08:03:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=zDabrGRaLSyFD6L7jLJTWRwuBM6Fl7/rLvTfxdOMu9I=;
 b=opp6iF5LzfVlF1e7QYaZ1jykZP+YF8uiNNYe3NjVFy5v0p5hfp7TTZWzoOjvZY1y1Y
 TI45CezVAeyIEsGykgv73Pmqp4qiQDYRet/bovxgPvg7MQz/CeA47WPLwhmcxIvLOP/p
 4eWBXqSKUM08QwquijO3CNAneUjAgdBaUkbP88KAxwfVCoXHhyi9widze58mXygC/xGO
 MKusl16hybQYBZvLei/ITyJugn8km0tnK4LO4aK9bIKCKDaGXrKC5bkpd2pXet60IgUl
 BV2UH/9LP1lbDCEuXBFegXw8GVl+aZGx6LvltAxQeKpod7psP2zZuSpGjWngHIEvcczv
 pN8Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=zDabrGRaLSyFD6L7jLJTWRwuBM6Fl7/rLvTfxdOMu9I=;
 b=mJtCCixBJF0KeUwyHEKovYlCCOuuqCcF/18ZOTUUMSc16vPqVMqM6c+VGGL4EP7Yvm
 pXty+vD+tCkgj3U8O0Yv5Q4NSi6OXIDgljQz6pAZVk8+9IQxD5JXOZJD0tA1EP5ywIOR
 DvbJXJwj2giQ1yR02ErvQ1DJVz/vp8Qf5R6PSRRO/vqRB/HhiBZvnP87Vv5NoBmXf0Tg
 DTVR2NvpU9Y+9gnnahgfQqCGeJ1/i7i8nmQxQ6K/XHvqwOLGyzwzIyxJiCQAGM4aLW9Z
 F75GlF5pKVmSGWdk77urGWpB7KrsktFiQFvIBrEzWTzTNPZLBzrAJFM4k+exba6/y1mq
 JlLg==
X-Gm-Message-State: APjAAAXgBBTEvqN+3EASkOS2heof/3GO4xulBWmtjHfQCQk2NtXOQeAx
 Nq5GSiWphRn09iQTRxGmTP8=
X-Google-Smtp-Source: APXvYqzEhjgpy40pxtbZEfnhgwcn23HNRjGGVDxiPH8Bip49uejylO0Q4iseRrVUzKFE9SvwLE1zEw==
X-Received: by 2002:a1c:b745:: with SMTP id h66mr14961296wmf.70.1567954980587; 
 Sun, 08 Sep 2019 08:03:00 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id x6sm17992323wmf.35.2019.09.08.08.02.59
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 08 Sep 2019 08:03:00 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20190906120306.18966-2-simon.kuenzer@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <34d4e746-58be-5eb2-eef7-8be485c8a620@gmail.com>
Date: Sun, 8 Sep 2019 18:02:59 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190906120306.18966-2-simon.kuenzer@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/6] lib/ukboot: Application
 constructors right before calling application
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpJZiB3ZSBrZWVwIG1vdmluZyB0aGlzIGNvZGUgdXAgYW5kIGRvd24sIHdvdWxk
bid0IGl0IG1ha2UgbW9yZSBzZW5zZSB0bwpwdXQgaXQgaW4gYSBmdW5jdGlvbiBpbnN0ZWFkPwoK
Q2hlZXJzLApDb3N0aW4KCk9uIDkvNi8xOSAzOjAzIFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+
IHByZWluaXQgYW5kIGluaXQgdGFibGVzIGFyZSBwYXJ0IG9mIHBvcnRlZCBsaWJyYXJpZXMgYW5k
IGFwcGxpY2F0aW9ucy4KPiBTaW5jZSB0aGV5IGFyZSBvcmlnaW5hbGx5IHJ1biBpbiB1c2VyIHNw
YWNlIG9uIExpbnV4IG9yIEJTRCwgdGhleQo+IGV4cGVjdCBmdWxseSBpbml0aWFsaXplZCBrZXJu
ZWwgbGF5ZXJzLiBUaGUgY29uc3RydWN0b3IgZnVuY3Rpb25zCj4gbGlzdGVkIGluIHRob3NlIHRh
YmxlcyBjb3VsZCBjcmVhdGUgdGhyZWFkcywgYWxsb2NhdGUgbWVtb3J5LCBvcgo+IGludGVyYWN0
IHdpdGggdGhlIFZGUywgZXRjLgo+IFRoaXMgcGF0Y2ggbW92ZXMgY2FsbGluZyB0aG9zZSBjb25z
dHJ1Y3RvcnMgYXQgdGhlIGxhdGVzdCBwb3NzaWJsZSBwb2ludC4KPiAKPiBTaWduZWQtb2ZmLWJ5
OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KPiAtLS0KPiAgbGliL3Vr
Ym9vdC9ib290LmMgfCA1MiArKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t
LS0tLS0tLQo+ICAxIGZpbGUgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwgMjIgZGVsZXRpb25z
KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvYm9vdC5jIGIvbGliL3VrYm9vdC9ib290
LmMKPiBpbmRleCAzYjhkNjQxZi4uN2ZiMDkwOGEgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrYm9vdC9i
b290LmMKPiArKysgYi9saWIvdWtib290L2Jvb3QuYwo+IEBAIC04MiwyOCArODIsNiBAQCBzdGF0
aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKPiAgCWludCByZXQ7Cj4gIAlzdHJ1
Y3QgdGhyZWFkX21haW5fYXJnICp0bWEgPSBhcmc7Cj4gIAo+IC0JdWtfcHJfaW5mbygiUHJlLWlu
aXQgdGFibGUgYXQgJXAgLSAlcFxuIiwKPiAtCQkgICBfX3ByZWluaXRfYXJyYXlfc3RhcnQsICZf
X3ByZWluaXRfYXJyYXlfZW5kKTsKPiAtCXVrX2N0b3JfZm9yZWFjaChfX3ByZWluaXRfYXJyYXlf
c3RhcnQsIF9fcHJlaW5pdF9hcnJheV9lbmQsIGkpIHsKPiAtCQlpZiAoX19wcmVpbml0X2FycmF5
X3N0YXJ0W2ldKSB7Cj4gLQkJCXVrX3ByX2RlYnVnKCJDYWxsIHByZS1pbml0IGNvbnN0cnVjdG9y
IChlbnRyeSAlZCAoJXApOiAlcCgpKS4uLlxuIiwKPiAtCQkJCSAgICBpLCAmX19wcmVpbml0X2Fy
cmF5X3N0YXJ0W2ldLAo+IC0JCQkJICAgIF9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSk7Cj4gLQkJ
CV9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSgpOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQl1a19wcl9p
bmZvKCJDb25zdHJ1Y3RvciB0YWJsZSBhdCAlcCAtICVwXG4iLAo+IC0JCQlfX2luaXRfYXJyYXlf
c3RhcnQsICZfX2luaXRfYXJyYXlfZW5kKTsKPiAtCXVrX2N0b3JfZm9yZWFjaChfX2luaXRfYXJy
YXlfc3RhcnQsIF9faW5pdF9hcnJheV9lbmQsIGkpIHsKPiAtCQlpZiAoX19pbml0X2FycmF5X3N0
YXJ0W2ldKSB7Cj4gLQkJCXVrX3ByX2RlYnVnKCJDYWxsIGNvbnN0cnVjdG9yIChlbnRyeSAlZCAo
JXApOiAlcCgpKS4uLlxuIiwKPiAtCQkJCQlpLCAmX19pbml0X2FycmF5X3N0YXJ0W2ldLAo+IC0J
CQkJCV9faW5pdF9hcnJheV9zdGFydFtpXSk7Cj4gLQkJCV9faW5pdF9hcnJheV9zdGFydFtpXSgp
Owo+IC0JCX0KPiAtCX0KPiAtCj4gICNpZmRlZiBDT05GSUdfTElCVUtCVVMKPiAgCXVrX3ByX2lu
Zm8oIkluaXRpYWxpemUgYnVzIGhhbmRsZXJzLi4uXG4iKTsKPiAgCXVrX2J1c19pbml0X2FsbCh1
a19hbGxvY19nZXRfZGVmYXVsdCgpKTsKPiBAQCAtMTI5LDYgKzEwNywzNiBAQCBzdGF0aWMgdm9p
ZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKPiAgCXByaW50ZigiJTM1c1xuIiwKPiAgCSAg
ICAgICBTVFJJTkdJRlkoVUtfQ09ERU5BTUUpICIgIiBTVFJJTkdJRlkoVUtfRlVMTFZFUlNJT04p
KTsKPiAgI2VuZGlmCj4gKwkvKgo+ICsJICogQXBwbGljYXRpb24KPiArCSAqCj4gKwkgKiBXZSBh
cmUgY2FsbGluZyB0aGUgYXBwbGljYXRpb24gY29uc3RydWN0b3JzIHJpZ2h0IGJlZm9yZSBjYWxs
aW5nCj4gKwkgKiB0aGUgYXBwbGljYXRpb24ncyBtYWluKCkuIEFsbCBvZiBvdXIgVW5pa3JhZnQg
c3lzdGVtcywgVkZTLAo+ICsJICogbmV0d29ya2luZyBzdGFjayBpcyBpbml0aWFsaXplZCBhdCB0
aGlzIHBvaW50LiBUaGlzIHdheSB3ZSBjbG9zZWx5Cj4gKwkgKiBtaW1pYyB3aGF0IGEgcmVndWxh
ciB1c2VyIGFwcGxpY2F0aW9uIChlLmcuLCBCU0QsIExpbnV4KSB3b3VsZCBleHBlY3QKPiArCSAq
IGZyb20gaXRzIE9TIGJlaW5nIGluaXRpYWxpemVkLgo+ICsJICovCj4gKwl1a19wcl9pbmZvKCJQ
cmUtaW5pdCB0YWJsZSBhdCAlcCAtICVwXG4iLAo+ICsJCSAgIF9fcHJlaW5pdF9hcnJheV9zdGFy
dCwgJl9fcHJlaW5pdF9hcnJheV9lbmQpOwo+ICsJdWtfY3Rvcl9mb3JlYWNoKF9fcHJlaW5pdF9h
cnJheV9zdGFydCwgX19wcmVpbml0X2FycmF5X2VuZCwgaSkgewo+ICsJCWlmIChfX3ByZWluaXRf
YXJyYXlfc3RhcnRbaV0pIHsKPiArCQkJdWtfcHJfZGVidWcoIkNhbGwgcHJlLWluaXQgY29uc3Ry
dWN0b3IgKGVudHJ5ICVkICglcCk6ICVwKCkpLi4uXG4iLAo+ICsJCQkJICAgIGksICZfX3ByZWlu
aXRfYXJyYXlfc3RhcnRbaV0sCj4gKwkJCQkgICAgX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKTsK
PiArCQkJX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKCk7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCXVr
X3ByX2luZm8oIkNvbnN0cnVjdG9yIHRhYmxlIGF0ICVwIC0gJXBcbiIsCj4gKwkJCV9faW5pdF9h
cnJheV9zdGFydCwgJl9faW5pdF9hcnJheV9lbmQpOwo+ICsJdWtfY3Rvcl9mb3JlYWNoKF9faW5p
dF9hcnJheV9zdGFydCwgX19pbml0X2FycmF5X2VuZCwgaSkgewo+ICsJCWlmIChfX2luaXRfYXJy
YXlfc3RhcnRbaV0pIHsKPiArCQkJdWtfcHJfZGVidWcoIkNhbGwgY29uc3RydWN0b3IgKGVudHJ5
ICVkICglcCk6ICVwKCkpLi4uXG4iLAo+ICsJCQkJCWksICZfX2luaXRfYXJyYXlfc3RhcnRbaV0s
Cj4gKwkJCQkJX19pbml0X2FycmF5X3N0YXJ0W2ldKTsKPiArCQkJX19pbml0X2FycmF5X3N0YXJ0
W2ldKCk7Cj4gKwkJfQo+ICsJfQo+ICAKPiAgCXVrX3ByX2luZm8oIkNhbGxpbmcgbWFpbiglZCwg
WyIsIHRtYS0+YXJnYyk7Cj4gIAlmb3IgKGkgPSAwOyBpIDwgdG1hLT5hcmdjOyArK2kpIHsKPiAK
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1k
ZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Sun Sep 08 15:05:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Sun, 08 Sep 2019 15:05:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i6ylA-0006SB-3V; Sun, 08 Sep 2019 15:05:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Esg=XD=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i6yl9-0006S6-0h
 for minios-devel@lists.xen.org; Sun, 08 Sep 2019 15:05:47 +0000
X-Inumbo-ID: 22607262-d24a-11e9-b299-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 22607262-d24a-11e9-b299-bc764e2007e4;
 Sun, 08 Sep 2019 15:05:46 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id w13so11138722wru.7
 for <minios-devel@lists.xen.org>; Sun, 08 Sep 2019 08:05:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=Ls6kcZq0gsbCYcD9uasiBufJHKzUg+dK5cgtbN1Se74=;
 b=kihbW/mtoohojv7FrU72MxV0RwBQioamvWOZKIe/b22d5vNGtb6rmAlQISZGMNfIty
 u2T3ZoFZI8KAVhr1simfNhsxM2itULENsBbJQANjGoYTrjs4SS62iB1JwepG8LJzj7Na
 8WguQHRjUtPyNx6QQNFbN8laNNVTFvQvQNHiJYX/rna+692ELuvOBYyoyQ2JmXjkH9eA
 fRfJVHuaKY6NCGXEZWq7jjLZ8vp5tQh8zNH26dN/SgpygXy0spzpaLeg9xxhTk9BoB07
 q1u6CpDc1v12/XhojV9qq+aDeASNYHpEFgWEq0ggtnygIblHG0s0ComklS/pUMWOJZjG
 rMBQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=Ls6kcZq0gsbCYcD9uasiBufJHKzUg+dK5cgtbN1Se74=;
 b=c4Be0N0gby6powU0cRT4NcrWpzoNWqVriHJW8mRdBdSmQ4pZMaObXsZdYXQzfXO3J7
 wFPj6AW8Ja10U0OGNkkQBWRoABpPeWidUT/KtlGvfsoofrDYDQXCltqO7osI6sGwQPiz
 lzOeEzwsL+T1rOzvFhDjOZI8isCUQamaSWtlLaLvWo/TTEBSvo9VdWoxPr97jkjigsTw
 QpEy5+9LJawP3JwvmdAB+runTx+Ug2UOqfp8Rvg0kPxraNTrDDAWTybiV2SBq3wYwpXm
 JLsFo8iDgtO54a4ualvFrFi+DsSRorxP2xhoTlX63Dr+MeIMgmXCf3sDyGwQDFB1TfXV
 Q/1Q==
X-Gm-Message-State: APjAAAVYUcdnc4k06bdwGbunecqGCD+eVct4sUVfc92W2E6YRAMM4f01
 yPjd11c32jajKt1Kw8W5W+Y=
X-Google-Smtp-Source: APXvYqwsAfqPt8CwlkPIya8Do5Z5dun5KOSyhI84R+G7v1XgUbb13a/d9aq7PwZKQBHgByNK+TF7Fw==
X-Received: by 2002:a5d:5387:: with SMTP id d7mr15776278wrv.312.1567955145402; 
 Sun, 08 Sep 2019 08:05:45 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id u83sm20406539wme.0.2019.09.08.08.05.44
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Sun, 08 Sep 2019 08:05:44 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <20fdad09-9cd4-2482-644c-571077fcdb2a@gmail.com>
Date: Sun, 8 Sep 2019 18:05:43 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 0/6] Move VFS initialization
 to ukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpXZSBjbGVhcmx5IG5lZWQgdG8gY29tZSB1cCB3aXRoIGEgc29sdXRpb24gZm9y
IGluaXRpYWxpemluZyBmaWxlc3lzdGVtcy4KSG93ZXZlciwgdGhlc2Ugc2VyaWVzIGhhdmUgdG8g
YmUgcmV3b3JrZWQ6CjEuIFlvdSBzaG91bGQgYWRkIHlvdXIgY2hhbmdlcyBvbmNlLgoyLiBXZSBz
aG91bGQgYWRkIHRoaXMgaW5pdCB0aGluZyBpbiB2ZnNjb3JlIGluc3RlYWQgb2YgYmxvYXRpbmcg
dGhlCmJvb3QuYyBjb2RlLgoKQ2hlZXJzLApDb3N0aW4KCk9uIDkvNi8xOSAzOjAzIFBNLCBTaW1v
biBLdWVuemVyIHdyb3RlOgo+IFRoaXMgcGF0Y2ggc2VyaWVzIG1vdmVzIG1vdW50aW5nIGZpbGVz
eXN0ZW1zIGFzIHBhcnQgb2YgdGhlIFVuaWtyYWZ0Cj4gaW5pdGlhbGl6YXRpb24gdG8gbGliL3Vr
Ym9vdC4gVGhpcyB3aWxsIGxhdGVyIHNpbXBsaWZ5IGFkZGluZyBtb3JlIGZlYXR1cmVzCj4gdG8g
dGhlIGF1dG9tb3VudCBjb2RlIGJlY2F1c2UgaXQgaXMgYXQgYSBzaW5nbGUgcGxhY2UgKGUuZy4s
IGxvYWRpbmcgaW5pdHJkCj4gYXMgcm9vdCBmaWxlc3lzdGVtLCBlbmFibGUgbW91bnRpbmcgOXBm
cyBzaGFyZXMgYXMgcm9vdCBtb3VudHBvaW50KS4KPiAKPiBQcmV2aW91c2x5LCB0aGUgb3B0aW9u
IHRvIGF1dG9tYXRpY2FsbHkgbW91bnQgYSByYW1mcyB0byAvIHdhcyBoaWRkZW4uCj4gSXQgb25s
eSBhcHBlYXJlZCB3aGVuIGRldmZzIHdhcyBzZWxlY3RlZC4gVGhpcyBzZXJpZXMgaXMgYWxzbyBt
YWtpbmcgZGV2ZnMKPiBhbmQgcmFtZnMgcGVybWFuZW50bHkgdmlzaWJsZSBpbiB0aGUgbWVudSB0
byBzaW1wbGlmeSB0aGUgdXNhZ2UuCj4gCj4gQ2hhbmdlcyBzaW5jZSB2MToKPiAgLSBBZG9wdCB0
byBsYXRlc3Qgc3RhZ2luZyBzdGF0ZQo+ICAtIEFkZCBhYmlsaXR5IHRvIGNvbmZpZ3VyZSByb290
IGZzIHdpdGgga2VybmVsIHBhcmFtZXRlcnMKPiAKPiBTaW1vbiBLdWVuemVyICg2KToKPiAgIGxp
Yi91a2Jvb3Q6IEFwcGxpY2F0aW9uIGNvbnN0cnVjdG9ycyByaWdodCBiZWZvcmUgY2FsbGluZyBh
cHBsaWNhdGlvbgo+ICAgbGliL2RldmZzLCBsaWIvdWtib290OiBNb3ZlIG9wdGlvbiB0byBhdXRv
bWF0aWNhbGx5IG1vdW50IHJvb3QgdG8KPiAgICAgbGlidWtib290Cj4gICBsaWIvdWtib290OiBk
ZXZmcyBhdXRvbW91bnQgb3B0aW9uCj4gICBsaWIvcmFtZnM6IENvbmZpZy51azogVXNlIHNlbGVj
dCBmb3IgZGVwZW5kZW5jeQo+ICAgbGliL3Vrc3dyYW5kOiBDbGVhbi11cDogZGV2ZnMgbm9kZXMg
YXJlIGluZGVwZW5kZW50IG9mIE1XQyBhbGdvcml0aG0KPiAgIGxpYi91a2Jvb3Q6IFJvb3QgZmls
ZXN5c3RlbSBhcyBsaWJyYXJ5IHBhcmFtZXRlcgo+IAo+ICBsaWIvZGV2ZnMvQ29uZmlnLnVrICAg
ICAgICAgICAgICAgfCAgIDggKy0tCj4gIGxpYi9kZXZmcy9kZXZmc192bm9wcy5jICAgICAgICAg
ICB8ICAyNSAtLS0tLS0tLQo+ICBsaWIvcmFtZnMvQ29uZmlnLnVrICAgICAgICAgICAgICAgfCAg
IDIgKy0KPiAgbGliL3VrYm9vdC9Db25maWcudWsgICAgICAgICAgICAgIHwgIDI5ICsrKysrKysr
Kwo+ICBsaWIvdWtib290L01ha2VmaWxlLnVrICAgICAgICAgICAgfCAgIDMgKwo+ICBsaWIvdWti
b290L2Jvb3QuYyAgICAgICAgICAgICAgICAgfCAxMDIgKysrKysrKysrKysrKysrKysrKysrKyst
LS0tLS0tCj4gIGxpYi91a3N3cmFuZC9Db25maWcudWsgICAgICAgICAgICB8ICAgNSArLQo+ICBs
aWIvdWtzd3JhbmQvTWFrZWZpbGUudWsgICAgICAgICAgfCAgIDYgKy0KPiAgbGliL3Vrc3dyYW5k
L3ttd2NfZGV2LmMgPT4gZGV2LmN9IHwgIDI2ICsrKysrLS0tCj4gIDkgZmlsZXMgY2hhbmdlZCwg
MTM0IGluc2VydGlvbnMoKyksIDcyIGRlbGV0aW9ucygtKQo+ICByZW5hbWUgbGliL3Vrc3dyYW5k
L3ttd2NfZGV2LmMgPT4gZGV2LmN9ICg4MyUpCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 05:34:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 05:34:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7CK7-0002zV-WB; Mon, 09 Sep 2019 05:34:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OmoP=XE=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i7CK6-0002zQ-81
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 05:34:46 +0000
X-Inumbo-ID: 85b85522-d2c3-11e9-ac08-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 85b85522-d2c3-11e9-ac08-12813bfff9fa;
 Mon, 09 Sep 2019 05:34:42 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 20FC2F2027;
 Mon,  9 Sep 2019 07:34:41 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 7qXf-itoykVJ; Mon,  9 Sep 2019 07:34:41 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E11E6F200E;
 Mon,  9 Sep 2019 07:34:30 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 07:34:30 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Mon, 9 Sep 2019 07:34:30
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Costin Lupu <costin.lup@gmail.com>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>, Cristian Banu <cristb@gmail.com>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH 9/9] plat/xen/drivers/9p: Add
 bottom-half handler
Thread-Index: AQHVZWY5zmmYfFd6xEq1y+yvzhck66cf5PqAgALwuYA=
Date: Mon, 9 Sep 2019 05:34:30 +0000
Message-ID: <737F814C-6601-49BF-BF85-667DBDAF8E6D@neclab.eu>
References: <20190907102148.13371-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190907102148.13371-10-vlad_andrei.badoiu@stud.acs.upb.ro>
 <1fe1325e-d995-ec36-71e3-f6bd568d24ff@gmail.com>
In-Reply-To: <1fe1325e-d995-ec36-71e3-f6bd568d24ff@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <44BEEAA09745284AA650B643AA4309BE@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 9/9] plat/xen/drivers/9p: Add
 bottom-half handler
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SSB3YXNudGVkIHRvIGFkZCBteSB0aGFua3MgQ3Jpc3RpLCB3ZWxsIGRvbmUhDQoNCi0tIEZlbGlw
ZQ0KDQrvu79PbiAwNy4wOS4xOSwgMTI6NDAsICJNaW5pb3MtZGV2ZWwgb24gYmVoYWxmIG9mIENv
c3RpbiBMdXB1IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24g
YmVoYWxmIG9mIGNvc3Rpbi5sdXBAZ21haWwuY29tPiB3cm90ZToNCg0KICAgIFRoYW5rcyBmb3Ig
dGhlIDlwZnMgc3VwcG9ydCwgQ3Jpc3RpISBBd2Vzb21lIGpvYiENCiAgICANCiAgICBDaGVlcnMs
DQogICAgQ29zdGluDQogICAgDQogICAgT24gOS83LzE5IDE6MjIgUE0sIFZsYWQtQW5kcmVpIELE
gkRPSVUgKDc4NjkyKSB3cm90ZToNCiAgICA+IEZyb206IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBn
bWFpbC5jb20+DQogICAgPiANCiAgICA+IFRoaXMgcGF0Y2ggYWRkcyBib3R0b20taGFsZiBoYW5k
bGluZyB0byBYZW4gOVAgYnkgY3JlYXRpbmcgb25lIHRocmVhZA0KICAgID4gcGVyIHJpbmcgd2hp
Y2ggd2FpdHMgb24gZGF0YSB0byBhcnJpdmUuDQogICAgPiANCiAgICA+IFNpZ25lZC1vZmYtYnk6
IENyaXN0aWFuIEJhbnUgPGNyaXN0YkBnbWFpbC5jb20+DQogICAgPiAtLS0NCiAgICA+ICBwbGF0
L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYyB8IDUzICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKystDQogICAgPiAgcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmggfCAxMyArKysr
KysrKysNCiAgICA+ICAyIGZpbGVzIGNoYW5nZWQsIDY1IGluc2VydGlvbnMoKyksIDEgZGVsZXRp
b24oLSkNCiAgICA+IA0KICAgID4gZGlmZiAtLWdpdCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBm
cm9udC5jIGIvcGxhdC94ZW4vZHJpdmVycy85cC85cGZyb250LmMNCiAgICA+IGluZGV4IGE1MzIx
ODk4Li5kYTU1ZmQ2MSAxMDA2NDQNCiAgICA+IC0tLSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBm
cm9udC5jDQogICAgPiArKysgYi9wbGF0L3hlbi9kcml2ZXJzLzlwLzlwZnJvbnQuYw0KICAgID4g
QEAgLTMzLDEyICszMywxNiBAQA0KICAgID4gICAqLw0KICAgID4gIA0KICAgID4gICNpbmNsdWRl
IDxzdGRib29sLmg+DQogICAgPiArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgPiAgI2luY2x1ZGUg
PHVrL2NvbmZpZy5oPg0KICAgID4gICNpbmNsdWRlIDx1ay9hbGxvYy5oPg0KICAgID4gICNpbmNs
dWRlIDx1ay9hc3NlcnQuaD4NCiAgICA+ICAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPg0KICAg
ID4gICNpbmNsdWRlIDx1ay9lcnJwdHIuaD4NCiAgICA+ICAjaW5jbHVkZSA8dWsvbGlzdC5oPg0K
ICAgID4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRA0KICAgID4gKyNpbmNsdWRlIDx1ay90aHJlYWQu
aD4NCiAgICA+ICsjZW5kaWYNCiAgICA+ICAjaW5jbHVkZSA8dWsvOXBkZXYuaD4NCiAgICA+ICAj
aW5jbHVkZSA8dWsvOXByZXEuaD4NCiAgICA+ICAjaW5jbHVkZSA8dWsvOXBkZXZfdHJhbnMuaD4N
CiAgICA+IEBAIC02MSw2ICs2NSwyMyBAQCBzdHJ1Y3QgcDlmcm9udF9oZWFkZXIgew0KICAgID4g
IAl1aW50MTZfdCB0YWc7DQogICAgPiAgfSBfX3BhY2tlZDsNCiAgICA+ICANCiAgICA+ICtzdGF0
aWMgdm9pZCBwOWZyb250X3JlY3Yoc3RydWN0IHA5ZnJvbnRfZGV2X3JpbmcgKnJpbmcpOw0KICAg
ID4gKw0KICAgID4gKyNpZiBDT05GSUdfTElCVUtTQ0hFRA0KICAgID4gKw0KICAgID4gK3N0YXRp
YyB2b2lkIHA5ZnJvbnRfYmhfaGFuZGxlcih2b2lkICphcmcpDQogICAgPiArew0KICAgID4gKwlz
dHJ1Y3QgcDlmcm9udF9kZXZfcmluZyAqcmluZyA9IGFyZzsNCiAgICA+ICsNCiAgICA+ICsJd2hp
bGUgKDEpIHsNCiAgICA+ICsJCXVrX3dhaXRxX3dhaXRfZXZlbnQoJnJpbmctPmJoX3dxLA0KICAg
ID4gKwkJCQlVS19SRUFEX09OQ0UocmluZy0+ZGF0YV9hdmFpbCkpOw0KICAgID4gKwkJcDlmcm9u
dF9yZWN2KHJpbmcpOw0KICAgID4gKwl9DQogICAgPiArfQ0KICAgID4gKw0KICAgID4gKyNlbmRp
Zg0KICAgID4gKw0KICAgID4gIHN0YXRpYyB2b2lkIHA5ZnJvbnRfcmVjdihzdHJ1Y3QgcDlmcm9u
dF9kZXZfcmluZyAqcmluZykNCiAgICA+ICB7DQogICAgPiAgCXN0cnVjdCBwOWZyb250X2RldiAq
cDlmZGV2ID0gcmluZy0+ZGV2Ow0KICAgID4gQEAgLTc5LDYgKzEwMCw5IEBAIHN0YXRpYyB2b2lk
IHA5ZnJvbnRfcmVjdihzdHJ1Y3QgcDlmcm9udF9kZXZfcmluZyAqcmluZykNCiAgICA+ICAJCXhl
bl9ybWIoKTsNCiAgICA+ICANCiAgICA+ICAJCWlmICh4ZW5fOXBmc19xdWV1ZWQocHJvZCwgY29u
cywgcmluZ19zaXplKSA8IHNpemVvZihoZHIpKSB7DQogICAgPiArI2lmIENPTkZJR19MSUJVS1ND
SEVEDQogICAgPiArCQkJVUtfV1JJVEVfT05DRShyaW5nLT5kYXRhX2F2YWlsLCBmYWxzZSk7DQog
ICAgPiArI2VuZGlmDQogICAgPiAgCQkJbm90aWZ5X3JlbW90ZV92aWFfZXZ0Y2huKGV2dGNobik7
DQogICAgPiAgCQkJcmV0dXJuOw0KICAgID4gIAkJfQ0KICAgID4gQEAgLTE0NCw3ICsxNjgsMTIg
QEAgc3RhdGljIHZvaWQgcDlmcm9udF9oYW5kbGVyKGV2dGNobl9wb3J0X3QgZXZ0Y2huLA0KICAg
ID4gIAkgKi8NCiAgICA+ICAJaWYgKHJpbmctPmRldi0+cDlkZXYpDQogICAgPiAgCQl1a185cGRl
dl94bWl0X25vdGlmeShyaW5nLT5kZXYtPnA5ZGV2KTsNCiAgICA+ICsjaWYgQ09ORklHX0xJQlVL
U0NIRUQNCiAgICA+ICsJVUtfV1JJVEVfT05DRShyaW5nLT5kYXRhX2F2YWlsLCB0cnVlKTsNCiAg
ICA+ICsJdWtfd2FpdHFfd2FrZV91cCgmcmluZy0+Ymhfd3EpOw0KICAgID4gKyNlbHNlDQogICAg
PiAgCXA5ZnJvbnRfcmVjdihyaW5nKTsNCiAgICA+ICsjZW5kaWYNCiAgICA+ICB9DQogICAgPiAg
DQogICAgPiAgc3RhdGljIHZvaWQgcDlmcm9udF9mcmVlX2Rldl9yaW5nKHN0cnVjdCBwOWZyb250
X2RldiAqcDlmZGV2LCBpbnQgaWR4KQ0KICAgID4gQEAgLTE1NCw2ICsxODMsOSBAQCBzdGF0aWMg
dm9pZCBwOWZyb250X2ZyZWVfZGV2X3Jpbmcoc3RydWN0IHA5ZnJvbnRfZGV2ICpwOWZkZXYsIGlu
dCBpZHgpDQogICAgPiAgDQogICAgPiAgCVVLX0FTU0VSVChyaW5nLT5pbml0aWFsaXplZCk7DQog
ICAgPiAgDQogICAgPiArCWlmIChyaW5nLT5iaF90aHJlYWRfbmFtZSkNCiAgICA+ICsJCWZyZWUo
cmluZy0+YmhfdGhyZWFkX25hbWUpOw0KICAgID4gKwl1a190aHJlYWRfa2lsbChyaW5nLT5iaF90
aHJlYWQpOw0KICAgID4gIAl1bmJpbmRfZXZ0Y2huKHJpbmctPmV2dGNobik7DQogICAgPiAgCWZv
ciAoaSA9IDA7IGkgPCAoMSA8PCBwOWZkZXYtPnJpbmdfb3JkZXIpOyBpKyspDQogICAgPiAgCQln
bnR0YWJfZW5kX2FjY2VzcyhyaW5nLT5pbnRmLT5yZWZbaV0pOw0KICAgID4gQEAgLTIyNiwxMiAr
MjU4LDI3IEBAIHN0YXRpYyBpbnQgcDlmcm9udF9hbGxvY2F0ZV9kZXZfcmluZyhzdHJ1Y3QgcDlm
cm9udF9kZXYgKnA5ZmRldiwgaW50IGlkeCkNCiAgICA+ICAJcmluZy0+ZGF0YS5pbiA9IGRhdGFf
Ynl0ZXM7DQogICAgPiAgCXJpbmctPmRhdGEub3V0ID0gZGF0YV9ieXRlcyArIFhFTl9GTEVYX1JJ
TkdfU0laRShwOWZkZXYtPnJpbmdfb3JkZXIpOw0KICAgID4gIA0KICAgID4gKyNpZiBDT05GSUdf
TElCVUtTQ0hFRA0KICAgID4gKwkvKiBBbGxvY2F0ZSBib3R0b20taGFsZiB0aHJlYWQuICovDQog
ICAgPiArCXJpbmctPmRhdGFfYXZhaWwgPSBmYWxzZTsNCiAgICA+ICsJdWtfd2FpdHFfaW5pdCgm
cmluZy0+Ymhfd3EpOw0KICAgID4gKw0KICAgID4gKwlyYyA9IGFzcHJpbnRmKCZyaW5nLT5iaF90
aHJlYWRfbmFtZSwgRFJJVkVSX05BTUUiLXJlY3YtJXMtJXUiLA0KICAgID4gKwkJCXA5ZmRldi0+
dGFnLCBpZHgpOw0KICAgID4gKwlyaW5nLT5iaF90aHJlYWQgPSB1a190aHJlYWRfY3JlYXRlKHJp
bmctPmJoX3RocmVhZF9uYW1lLA0KICAgID4gKwkJCXA5ZnJvbnRfYmhfaGFuZGxlciwgcmluZyk7
DQogICAgPiArCWlmICghcmluZy0+YmhfdGhyZWFkKSB7DQogICAgPiArCQlyYyA9IC1FTk9NRU07
DQogICAgPiArCQlnb3RvIG91dF9mcmVlX2dyYW50czsNCiAgICA+ICsJfQ0KICAgID4gKyNlbmRp
Zg0KICAgID4gKw0KICAgID4gIAkvKiBBbGxvY2F0ZSBldmVudCBjaGFubmVsLiAqLw0KICAgID4g
IAlyYyA9IGV2dGNobl9hbGxvY191bmJvdW5kKHhlbmRldi0+b3RoZXJlbmRfaWQsIHA5ZnJvbnRf
aGFuZGxlciwgcmluZywNCiAgICA+ICAJCQkJJnJpbmctPmV2dGNobik7DQogICAgPiAgCWlmIChy
Yykgew0KICAgID4gIAkJdWtfcHJfZXJyKERSSVZFUl9OQU1FIjogRXJyb3IgY3JlYXRpbmcgZXZ0
IGNoYW5uZWw6ICVkXG4iLCByYyk7DQogICAgPiAtCQlnb3RvIG91dF9mcmVlX2dyYW50czsNCiAg
ICA+ICsJCWdvdG8gb3V0X2ZyZWVfdGhyZWFkOw0KICAgID4gIAl9DQogICAgPiAgDQogICAgPiAg
CXVubWFza19ldnRjaG4ocmluZy0+ZXZ0Y2huKTsNCiAgICA+IEBAIC0yNDEsNiArMjg4LDEwIEBA
IHN0YXRpYyBpbnQgcDlmcm9udF9hbGxvY2F0ZV9kZXZfcmluZyhzdHJ1Y3QgcDlmcm9udF9kZXYg
KnA5ZmRldiwgaW50IGlkeCkNCiAgICA+ICANCiAgICA+ICAJcmV0dXJuIDA7DQogICAgPiAgDQog
ICAgPiArb3V0X2ZyZWVfdGhyZWFkOg0KICAgID4gKwlpZiAocmluZy0+YmhfdGhyZWFkX25hbWUp
DQogICAgPiArCQlmcmVlKHJpbmctPmJoX3RocmVhZF9uYW1lKTsNCiAgICA+ICsJdWtfdGhyZWFk
X2tpbGwocmluZy0+YmhfdGhyZWFkKTsNCiAgICA+ICBvdXRfZnJlZV9ncmFudHM6DQogICAgPiAg
CWZvciAoaSA9IDA7IGkgPCAoMSA8PCBwOWZkZXYtPnJpbmdfb3JkZXIpOyBpKyspDQogICAgPiAg
CQlnbnR0YWJfZW5kX2FjY2VzcyhyaW5nLT5pbnRmLT5yZWZbaV0pOw0KICAgID4gZGlmZiAtLWdp
dCBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oIGIvcGxhdC94ZW4vZHJpdmVycy85cC85
cGZyb250LmgNCiAgICA+IGluZGV4IDdjZWE2MWM1Li4wYmJjN2Y0NCAxMDA2NDQNCiAgICA+IC0t
LSBhL3BsYXQveGVuL2RyaXZlcnMvOXAvOXBmcm9udC5oDQogICAgPiArKysgYi9wbGF0L3hlbi9k
cml2ZXJzLzlwLzlwZnJvbnQuaA0KICAgID4gQEAgLTQwLDYgKzQwLDkgQEANCiAgICA+ICAjaW5j
bHVkZSA8dWsvZXNzZW50aWFscy5oPg0KICAgID4gICNpbmNsdWRlIDx1ay9saXN0Lmg+DQogICAg
PiAgI2luY2x1ZGUgPHVrL3BsYXQvc3BpbmxvY2suaD4NCiAgICA+ICsjaWYgQ09ORklHX0xJQlVL
U0NIRUQNCiAgICA+ICsjaW5jbHVkZSA8dWsvc2NoZWQuaD4NCiAgICA+ICsjZW5kaWYNCiAgICA+
ICAjaW5jbHVkZSA8eGVuL2lvLzlwZnMuaD4NCiAgICA+ICAjaW5jbHVkZSA8Y29tbW9uL2V2ZW50
cy5oPg0KICAgID4gICNpbmNsdWRlIDxjb21tb24vZ250dGFiLmg+DQogICAgPiBAQCAtNTksNiAr
NjIsMTYgQEAgc3RydWN0IHA5ZnJvbnRfZGV2X3Jpbmcgew0KICAgID4gIAlzcGlubG9ja190IHNw
aW5sb2NrOw0KICAgID4gIAkvKiBUcmFja3MgaWYgdGhpcyByaW5nIHdhcyBpbml0aWFsaXplZC4g
Ki8NCiAgICA+ICAJYm9vbCBpbml0aWFsaXplZDsNCiAgICA+ICsjaWYgQ09ORklHX0xJQlVLU0NI
RUQNCiAgICA+ICsJLyogVHJhY2tzIGlmIHRoZXJlIGlzIGFueSBkYXRhIGF2YWlsYWJsZSBvbiB0
aGlzIHJpbmcuICovDQogICAgPiArCWJvb2wgZGF0YV9hdmFpbDsNCiAgICA+ICsJLyogQm90dG9t
LWhhbGYgdGhyZWFkLiAqLw0KICAgID4gKwlzdHJ1Y3QgdWtfdGhyZWFkICpiaF90aHJlYWQ7DQog
ICAgPiArCS8qIEJvdHRvbS1oYWxmIHRocmVhZCBuYW1lLiAqLw0KICAgID4gKwljaGFyICpiaF90
aHJlYWRfbmFtZTsNCiAgICA+ICsJLyogV2FpdC1xdWV1ZSBvbiB3aGljaCB0aGUgdGhyZWFkIHdh
aXRzIGZvciBhdmFpbGFibGUgZGF0YS4gKi8NCiAgICA+ICsJc3RydWN0IHVrX3dhaXRxIGJoX3dx
Ow0KICAgID4gKyNlbmRpZg0KICAgID4gIH07DQogICAgPiAgDQogICAgPiAgc3RydWN0IHA5ZnJv
bnRfZGV2IHsNCiAgICA+IA0KICAgIA0KICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:08:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:08:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Fee-0003ZP-JP; Mon, 09 Sep 2019 09:08:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7Fed-0003ZK-4q
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:08:11 +0000
X-Inumbo-ID: 55a2bd96-d2e1-11e9-ac09-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 55a2bd96-d2e1-11e9-ac09-12813bfff9fa;
 Mon, 09 Sep 2019 09:08:06 +0000 (UTC)
IronPort-SDR: BGI15yheHBn08b2C7rIwsCCDJRDrsGUEufCcUC5vhMAhli+DtU/LLNGCcUwUhWt0An/BTcO/KP
 Rt80iFwnmzhQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AI6KWCRxFDyTUqQLXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2+gWIJqq85mqBkHD//Il1AaPAdyBrasU1aGO4+jJYi8p2d65qncMcZhBBV?=
 =?us-ascii?q?cuqP49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx?=
 =?us-ascii?q?7xKRR6JvjvGo7Vks+7y/2+94fcbglVmjaxe65+IRa3oAneqsUbgpZpJ7osxB?=
 =?us-ascii?q?fOvnZGYfldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2?=
 =?us-ascii?q?Yu5M32rhbDVheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RS?=
 =?us-ascii?q?iu4qF2QxLulSwJNSM28HvPh8JwkqxVvRyvqR94zYPPfI2ZKOBzcr/HcN8GWW?=
 =?us-ascii?q?ZMWNtaWSxbAoO7aosCF/QMPeFDr4nhplsOqwa1Cw+xBOP31z9Dm3j70rE90+?=
 =?us-ascii?q?Q6DQHG3QogE8gKsHTJtNX1KbwfXvyuzKXS1TXDcuhZ1S3n6IjPax0sp+yHU7?=
 =?us-ascii?q?FoccfJ1EUiGB7Jgk+TpIHlJT+ZyPoBvmqB4+duTe6jlmEqpxxrrjWsxsogkJ?=
 =?us-ascii?q?fFi4wbx1ze6Cl0z5g5KNulQ0Bhe9GkCoFftySCOotzRcMtXn9ntT4hyr0DpZ?=
 =?us-ascii?q?67ZC8KyIk7xxLHa/yIbYyI4hX7WeaPJDd3nnNleLalixmu6kis0PX8VtSv31?=
 =?us-ascii?q?pQtCpFlcHAtnEL1xPN9siKUuZx80i81TqV1A3e6vtILV4qmafZMZIszKY8lp?=
 =?us-ascii?q?8JvkTCGi/2ll/2jKiTdkg85ueo7P/nYqnnpp+aLYN0jhz+MrwzmsGkHes4KR?=
 =?us-ascii?q?ICX3CG+eunzrHj50r5TK1QjvIqiqnZrIzaJcMDq668Ag9V1Icj6xGkDzu/zd?=
 =?us-ascii?q?sXg2cHI0xBeB+ci4jpOkrOIOzjDfuljFWjjjFry+rBPr37DZXHNmLDn6v5fb?=
 =?us-ascii?q?Zh905czxI+zctf551OELEOOvTzVlXqtNPCCB85Lwy0zPzhCNpn04MTQmSPDb?=
 =?us-ascii?q?GFP6PWq1CH/fgjLPeRZNxdhDGoLvkj5vn1yHM0h1IZVa2oxocMLmC1GLJhOU?=
 =?us-ascii?q?rKT2Drh4IqFnwWvwx2aPHylRXWWjlIe3e0GaYh/iwTA5ngFZrJAJqq1u/SlB?=
 =?us-ascii?q?ynF4FbMzgVQmuHFm3lIt2J?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AcBQBtFXZd/wPjVY1lHgEGBwaBZ4N?=
 =?us-ascii?q?YMo1HozcJAQEBOgECAQGEP4JcOBMCAwkBAQUBAQEBAQYEAWyFOoI6IoNuT4Q?=
 =?us-ascii?q?kgg+mLoVLgziBSYE0hx+GMT+If3OFFgSMVYlHliQHgiRkBJQAJ4RhkAKEH6M?=
 =?us-ascii?q?ThS84IYFYMxqDYIIWAY5yPQEBgTcBAY0SglMBAQ?=
X-IPAS-Result: =?us-ascii?q?A2AcBQBtFXZd/wPjVY1lHgEGBwaBZ4NYMo1HozcJAQEBO?=
 =?us-ascii?q?gECAQGEP4JcOBMCAwkBAQUBAQEBAQYEAWyFOoI6IoNuT4Qkgg+mLoVLgziBS?=
 =?us-ascii?q?YE0hx+GMT+If3OFFgSMVYlHliQHgiRkBJQAJ4RhkAKEH6MThS84IYFYMxqDY?=
 =?us-ascii?q?IIWAY5yPQEBgTcBAY0SglMBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708025"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:08:04 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 85B731A60127;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 8aVTxAmgIdkC; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6533C1A60136;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id MaQOo8b4wwBF; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 487831A60125;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:07:50 +0300
Message-Id: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH 0/4] Changes for supporting Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgY2hhbmdlcyBhcmUgbmVlZGVkIGZvciBzb21lIG9mIHRoZSBQeXRob24gMiB1bml0IHRl
c3RzLiBTb21lIHRlc3RzIG1heQp1c2UgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMsIHRoZXJlZm9y
ZSB3ZSBoYWQgdG8gaW5jcmVhc2Ugb3VyIGxpbWl0LiBPdGhlcgpmaWxlcyB0cnkgdG8gY2xvc2Ug
dGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMgKDAtMiksIHRoZXJlZm9yZSB0aGUgVk0Kc2hv
dWxkbid0IGNyYXNoIGlmIHN1Y2ggYmVoYXZpb3IgaXMgd2FudGVkLiBBbHNvLCBzb21lIHVuaXQg
dGVzdHMgbmVlZApyZWN1cnNpdmUgbXV0ZXhlcy4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gQXBwbGll
ZCBjb21tZW50cwotIEFkZGVkICdsaWIvdmZzY29yZTogc3lzX2lvY3RsKCkgLSBIYW5kbGUgRklP
Q0xFWCBhbmQgRklPTkNMRVggcmVxdWVzdHMnIHBhdGNoCgpDb3N0aW4gTHVwdSAoNCk6CiAgbGli
L3Zmc2NvcmU6IFVzZSBhIHNjYWxhYmxlIGJpdG1hcCBmb3Igb3BlbiBmaWxlIGRlc2NyaXB0b3Jz
CiAgbGliL3Zmc2NvcmU6IFJldHVybiBlcnJvciB3aGVuIHRyeWluZyB0byBjbG9zZSBzdGFuZGFy
ZCBmaWxlCiAgICBkZXNjcmlwdG9ycwogIGxpYi92ZnNjb3JlOiBzeXNfaW9jdGwoKSAtIEhhbmRs
ZSBGSU9DTEVYIGFuZCBGSU9OQ0xFWCByZXF1ZXN0cwogIGxpYi91a2xvY2s6IE1ha2UgbXV0ZXgg
cmVjdXJzaXZlCgogbGliL3VrbG9jay9pbmNsdWRlL3VrL211dGV4LmggICAgICB8IDM2ICsrKysr
KysrKysrKysrKysrKysrKy0tLS0tLS0tLQogbGliL3VrbG9jay9tdXRleC5jICAgICAgICAgICAg
ICAgICB8ICAzICsrLQogbGliL3Zmc2NvcmUvZmQuYyAgICAgICAgICAgICAgICAgICB8IDIzICsr
KysrKysrKystLS0tLS0tLS0KIGxpYi92ZnNjb3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmggfCAg
MiArLQogbGliL3Zmc2NvcmUvbWFpbi5jICAgICAgICAgICAgICAgICB8ICA4ICsrKystLS0KIGxp
Yi92ZnNjb3JlL3N5c2NhbGxzLmMgICAgICAgICAgICAgfCAxNSArKysrKysrKysrKy0tCiA2IGZp
bGVzIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDI4IGRlbGV0aW9ucygtKQoKLS0gCjIuMjAu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:08:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:08:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Fei-0003Zu-LE; Mon, 09 Sep 2019 09:08:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7Feh-0003ZZ-7F
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:08:15 +0000
X-Inumbo-ID: 589f2be2-d2e1-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 589f2be2-d2e1-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 09:08:11 +0000 (UTC)
IronPort-SDR: ScdP9BE+XahU1KXP25GOfYp0uu0XBFsy2f4hEK7BHc1Ocx4lMoiUrfSro95WERdpRzlwdflc0d
 bWjhBN6Er9Ww==
IronPort-PHdr: =?us-ascii?q?9a23=3AHZUBURwf5fjJTT7XCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2+gSIJqq85mqBkHD//Il1AaPAdyBrasU1aGO4+jJYi8p2d65qncMcZhBBV?=
 =?us-ascii?q?cuqP49uEgeOvODElDxN/XwbiY3T4xoXV5h+GynYwAOQJ6tL1LdrWev4jEMBx?=
 =?us-ascii?q?7xKRR6JvjvGo7Vks+7y/2+94fcbglVmjaxe65+IRa3oAneqsUbgpZpJ7osxB?=
 =?us-ascii?q?fOvnZGYfldy3lyJVKUkRb858Ow84Bm/i9Npf8v9NNOXLvjcaggQrNWEDopM2?=
 =?us-ascii?q?Yu5M32rhbDVheA5mEdUmoNjBVFBRXO4QzgUZfwtiv6sfd92DWfMMbrQ704RS?=
 =?us-ascii?q?iu4qF2QxLulSwJNSM28HvPh8JwkqxVvRyvqR94zYHWboGYL+Zycr/HcN8GX2?=
 =?us-ascii?q?dNQtpdWipcCY28dYsPCO8BMP5Goon6vFsOsRq+BQ+xD+3p1z9InmL21rA93u?=
 =?us-ascii?q?s9FgHGxxAgH9MIsHjOqNX1Kb8SUf2uwabU1jXPdetW2Srm54TSaBAhpuiBUL?=
 =?us-ascii?q?RtesTS0UkiDx7Jg1qNpYD/PD6Y1v4Bv3aF4+diT+6ihXYrpxx+rzSy3MshiY?=
 =?us-ascii?q?nEipgLxl3K+yh12ps5KNKmREN9fNWqCoFftzuAOItzWs4iRmZotzskxbAeop?=
 =?us-ascii?q?67eTQKyIwgxx7Cd/yLa4iI7QznVOaWOTp4mndld6i+hxa260Sv1vb8WtOs0F?=
 =?us-ascii?q?ZXtSVJiMPMtncV2xzS7MiIVOd981+81TuAygzf8OJJLEAumabFNZIswKQ8m5?=
 =?us-ascii?q?QLvUTGBCD2mUH2jKGMdkUj/+il8/joYrL9pp+ANo90jBvyMqAzmsynHOQ1KR?=
 =?us-ascii?q?QBX3OB9eSkyb3s5lf1QK9NjvEuiKnWrIjaJdgHpq6+GwJV14cj6xC+Dzehy9?=
 =?us-ascii?q?QUhGQII0xbeB2Zi4jkIFXOIPHjDfejmFSgijhqyO7APrH7BZXNNHfDmq/7fb?=
 =?us-ascii?q?lh805c1BYzzddH6pJPCrEOOujzVVX3tNDCFR82KQq0w/rnCNpn0IMRQ2ePD7?=
 =?us-ascii?q?SfMKzMrVCI4vggLPKWaIALpTauY8Qisvvvi34+ghoRcLek2bMTaWukBbJ2Lk?=
 =?us-ascii?q?PfZmDj0fkbFmJflQ0lUO3swHmfSSMbM321RL494Hc/FZq7JYzYAJiwivqb23?=
 =?us-ascii?q?HoTdVtemlaBwXUQj/TfIKeVqJUZQ=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BHBABtFXZd/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYMiqNHaM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjo?=
 =?us-ascii?q?igm8GJ1IQPxJXGYMigg+lezOJA4FJgTSHH4YxP4N1bIURhHQiBJYcliQHgiR?=
 =?us-ascii?q?kBJQAJ5kCoxOFLzghgVgzGoNfgk4XFY4QPQEBMYEGAQGPZQEB?=
X-IPAS-Result: =?us-ascii?q?A2BHBABtFXZd/wPjVY1lHQEBBQEHBQGBZ4NYMiqNHaM3C?=
 =?us-ascii?q?QEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjoigm8GJ1IQPxJXG?=
 =?us-ascii?q?YMigg+lezOJA4FJgTSHH4YxP4N1bIURhHQiBJYcliQHgiRkBJQAJ5kCoxOFL?=
 =?us-ascii?q?zghgVgzGoNfgk4XFY4QPQEBMYEGAQGPZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708027"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:08:04 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id A500C1A60125;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 6W1nyMfmH9A4; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7FDBE1A6013D;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 7jb0RvACT-UU; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 61B781A6012B;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:07:52 +0300
Message-Id: <20190909090754.23788-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
References: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 2/4] lib/vfscore: Return error when
 trying to close standard file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29tZSBhcHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8gY2xvc2UgdGhlIHN0YW5kYXJkIGZpbGUgZGVz
Y3JpcHRvcnMgKHN0ZGluLApzdGRvdXQsIHN0ZGVyciksIHRoYXQgaXMgcGVyZmVjdGx5IG5vcm1h
bC4gVGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gc2hvdWxkIHJldHVybgphbiBlcnJvciBpZiBzdWNo
IHJlcXVlc3QgaXMgbm90IGFsbG93ZWQsIGluc3RlYWQgb2YgY3Jhc2hpbmcuCgpTaWduZWQtb2Zm
LWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGxpYi92ZnNjb3Jl
L2ZkLmMgICAgICAgICAgICAgICAgICAgfCA3ICsrKysrLS0KIGxpYi92ZnNjb3JlL2luY2x1ZGUv
dmZzY29yZS9maWxlLmggfCAyICstCiBsaWIvdmZzY29yZS9tYWluLmMgICAgICAgICAgICAgICAg
IHwgOCArKysrKy0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2ZkLmMgYi9saWIvdmZzY29yZS9mZC5j
CmluZGV4IGUwOWRkNTRjLi43ZWZlZDc0MSAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvZmQuYwor
KysgYi9saWIvdmZzY29yZS9mZC5jCkBAIC03MywxNCArNzMsMTUgQEAgZXhpdDoKIAlyZXR1cm4g
cmV0OwogfQogCi12b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCkKK2ludCB2ZnNjb3JlX3B1dF9m
ZChpbnQgZmQpCiB7CiAJc3RydWN0IHZmc2NvcmVfZmlsZSAqZnA7CiAJdW5zaWduZWQgbG9uZyBm
bGFnczsKIAogCVVLX0FTU0VSVChmZCA8IChpbnQpIEZEVEFCTEVfTUFYX0ZJTEVTKTsKIAkvKiBD
dXJyZW50bHkgaXQgaXMgbm90IGFsbG93ZWQgdG8gZnJlZSBzdGQoaW58b3V0fGVycikgKi8KLQlV
S19BU1NFUlQoZmQgPiAyKTsKKwlpZiAoZmQgPD0gMikKKwkJcmV0dXJuIC1FQlVTWTsKIAogCWZs
YWdzID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7CiAJdWtfYml0bWFwX2NsZWFyKGZkdGFibGUu
Yml0bWFwLCBmZCwgMSk7CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgdmZzY29yZV9wdXRfZmQoaW50
IGZkKQogCSAqLwogCWlmIChmcCkKIAkJZmRyb3AoZnApOworCisJcmV0dXJuIDA7CiB9CiAKIGlu
dCB2ZnNjb3JlX2luc3RhbGxfZmQoaW50IGZkLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmaWxlKQpk
aWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaCBiL2xpYi92ZnNj
b3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgKaW5kZXggMzU0YTQxNGUuLmM2OTgyMDFkIDEwMDY0
NAotLS0gYS9saWIvdmZzY29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCisrKyBiL2xpYi92ZnNj
b3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgKQEAgLTY2LDcgKzY2LDcgQEAgc3RydWN0IHZmc2Nv
cmVfZmlsZSB7CiAjZGVmaW5lIEZEX1VOTE9DSyhmcCkgICAgIHVrX211dGV4X3VubG9jaygmKGZw
LT5mX2xvY2spKQogCiBpbnQgdmZzY29yZV9hbGxvY19mZCh2b2lkKTsKLXZvaWQgdmZzY29yZV9w
dXRfZmQoaW50IGZkKTsKK2ludCB2ZnNjb3JlX3B1dF9mZChpbnQgZmQpOwogaW50IHZmc2NvcmVf
aW5zdGFsbF9mZChpbnQgZmQsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwogc3RydWN0IHZm
c2NvcmVfZmlsZSAqdmZzY29yZV9nZXRfZmlsZShpbnQgZmQpOwogdm9pZCB2ZnNjb3JlX3B1dF9m
aWxlKHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUv
bWFpbi5jIGIvbGliL3Zmc2NvcmUvbWFpbi5jCmluZGV4IDhkMGU0YjJjLi45MjVjZTc2MiAxMDA2
NDQKLS0tIGEvbGliL3Zmc2NvcmUvbWFpbi5jCisrKyBiL2xpYi92ZnNjb3JlL21haW4uYwpAQCAt
MjA1LDE1ICsyMDUsMTcgQEAgVUtfVFJBQ0VQT0lOVCh0cmFjZV92ZnNfY2xvc2VfZXJyLCAiJWQi
LCBpbnQpOwogaW50IGZkY2xvc2UoaW50IGZkKQogewogCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZw
OworCWludCBlcnJvcjsKIAogCWZwID0gdmZzY29yZV9nZXRfZmlsZShmZCk7CiAJaWYgKCFmcCkK
IAkJcmV0dXJuIEVCQURGOwogCi0JdmZzY29yZV9wdXRfZmQoZmQpOwotCWZkcm9wKGZwKTsKKwll
cnJvciA9IHZmc2NvcmVfcHV0X2ZkKGZkKTsKKwlpZiAoIWVycm9yKQorCQlmZHJvcChmcCk7CiAK
LQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludCBjbG9zZShpbnQgZmQpCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:08:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:08:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Fej-0003aG-ND; Mon, 09 Sep 2019 09:08:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7Feh-0003Zp-Vv
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:08:16 +0000
X-Inumbo-ID: 57a99aa7-d2e1-11e9-ac09-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 57a99aa7-d2e1-11e9-ac09-12813bfff9fa;
 Mon, 09 Sep 2019 09:08:10 +0000 (UTC)
IronPort-SDR: nOGkmAe/EJs12RXXCN0wC5XfXpXMgevql9X7uma1YV2bmEnRRDD3jvAjMHKt2emIteRxpJLucI
 K4o1G6mxDm9A==
IronPort-PHdr: =?us-ascii?q?9a23=3AiGU7zBBOlyITNuVK1jilUyQJP3N1i/DPJgcQr6?=
 =?us-ascii?q?AfoPdwSPT5o8bcNUDSrc9gkEXOFd2Cra4d0ayP4/6rATxIyK3CmUhKSIZLWR?=
 =?us-ascii?q?4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBx?=
 =?us-ascii?q?rwKxd+KPjrFY7OlcS30P2594HObwlSizexfK1+IA+roQjSt8QajpduJ6UswR?=
 =?us-ascii?q?bVv3VEfPhby3l1LlyJhRb84cmw/J9n8ytOvv8q6tBNX6bncakmVLJUFDspPX?=
 =?us-ascii?q?w7683trhnDUBCA5mAAXWUMkxpHGBbK4RfnVZrsqCT6t+592C6HPc3qSL0/RD?=
 =?us-ascii?q?qv47t3RBLulSwKMSMy/mPKhcxqlK9VoAyvqQFxzYDXZ4+aNvR+c7jBcd8GX2?=
 =?us-ascii?q?dNQtxcWzBdDo66coABD/ABPeFdr4TluVYOqgC+BRWtBOPp1zRGgGL23bUn0+?=
 =?us-ascii?q?88FgzJwAsgH8kSsHTVqtX5LqMSUf2tzKnV1jjMc+hW1S3l6IjVaR8tu+uMXb?=
 =?us-ascii?q?VpfMfX1EIhFBvFg02NpYHqIj+ZzOcAvmiB4+Z+S+6iiXQrpg9prjSyycogl5?=
 =?us-ascii?q?PFi4EVx1ze6yl0zog4KcelREN0f9KpFoZbuTuAOItsWMwiRnlluCM9yrIbp5?=
 =?us-ascii?q?G2ZDMKyJE7xx7HbPyHbpSI7grjVOmPJTd4g2poeKy6hxmo8EigzvfwWdWv0F?=
 =?us-ascii?q?pQtipFj8LDumoX1xzU8sSHS/198Vm92TuXygze5fxILVo3mKfbMZIt3KA8m5?=
 =?us-ascii?q?gJvUnNBiP2nV/5jK6SdkUq4Oio7OHnb636qZ+bLI90lgD+MqI0lsy7HOQ4Kh?=
 =?us-ascii?q?UOUnOH9uSnzrHj5VD5T65Qgv0slanVqIraKtgDpq6lHw9V1Z4u6xO+Dzeg0d?=
 =?us-ascii?q?QYmmIHIEtYdx2ZkYjmJVXOLev8Dfe+mFSsjCxry+rJP7L/BJXBNH/DkK3ufb?=
 =?us-ascii?q?xl8U5T1BIzzcxD55JTErwBO/LzVVXrtNPCCB81KRe0zPzhCNVh1oMRQ2SPDb?=
 =?us-ascii?q?WcMK7Jt1+H+P4gI+2Wa4AOojryNeUltLbSiio8mFkcerLs0ZYJZXSQGvV9P1?=
 =?us-ascii?q?7fcXfqxNAbHjQkpA07Gcftk0GDV3Z3em6vF/Y34SonCYTgCZrbW6imm/qZwS?=
 =?us-ascii?q?39BJoANTMOMUyFDXq9L9bMYPwLci/HesI=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2D0AgBtFXZd/wPjVY1lHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4NYMiqNHaM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU?=
 =?us-ascii?q?6gjoigm8GJ1IQPxJXGYMigg+lezOFS4M4gUmBNIcfhjE/hGGBBAGEDIUWBIx?=
 =?us-ascii?q?ViUeWJAeCJGQElAAnmQIthACkFTghgVgzGoNfgk4MCxWOED0BATGBBgEBj2U?=
 =?us-ascii?q?BAQ?=
X-IPAS-Result: =?us-ascii?q?A2D0AgBtFXZd/wPjVY1lHAEBAQQBAQcEAQGBZ4NYMiqNH?=
 =?us-ascii?q?aM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjoigm8GJ1IQP?=
 =?us-ascii?q?xJXGYMigg+lezOFS4M4gUmBNIcfhjE/hGGBBAGEDIUWBIxViUeWJAeCJGQEl?=
 =?us-ascii?q?AAnmQIthACkFTghgVgzGoNfgk4MCxWOED0BATGBBgEBj2UBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708028"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:08:04 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id ADABC1A60136;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id FDftO_ydQSKC; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 8E2B31A6013E;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id HnGqs_eYwowl; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 6EB6A1A6013B;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:07:53 +0300
Message-Id: <20190909090754.23788-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
References: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 3/4] lib/vfscore: sys_ioctl() -
 Handle FIOCLEX and FIONCLEX requests
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBs
aWIvdmZzY29yZS9zeXNjYWxscy5jIHwgMTUgKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hhbmdl
ZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdmZz
Y29yZS9zeXNjYWxscy5jIGIvbGliL3Zmc2NvcmUvc3lzY2FsbHMuYwppbmRleCA1NGFkYzJkMi4u
ZDM3NTc3NGEgMTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMKKysrIGIvbGliL3Zm
c2NvcmUvc3lzY2FsbHMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0
bC5oPgogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8dmZzY29yZS9wcmV4Lmg+CkBA
IC0zODEsMTQgKzM4MiwyNCBAQCBzeXNfbHNlZWsoc3RydWN0IHZmc2NvcmVfZmlsZSAqZnAsIG9m
Zl90IG9mZiwgaW50IHR5cGUsIG9mZl90ICpvcmlnaW4pCiBpbnQKIHN5c19pb2N0bChzdHJ1Y3Qg
dmZzY29yZV9maWxlICpmcCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LCB2b2lkICpidWYpCiB7Ci0J
aW50IGVycm9yOworCWludCBlcnJvciA9IDA7CiAKIAlEUFJJTlRGKFZGU0RCX1NZU0NBTEwsICgi
c3lzX2lvY3RsOiBmcD0lcCByZXF1ZXN0PSVsdXhcbiIsIGZwLCByZXF1ZXN0KSk7CiAKIAlpZiAo
KGZwLT5mX2ZsYWdzICYgKFVLX0ZSRUFEIHwgVUtfRldSSVRFKSkgPT0gMCkKIAkJcmV0dXJuIEVC
QURGOwogCi0JZXJyb3IgPSB2ZnNfaW9jdGwoZnAsIHJlcXVlc3QsIGJ1Zik7CisJc3dpdGNoIChy
ZXF1ZXN0KSB7CisJY2FzZSBGSU9DTEVYOgorCQlmcC0+Zl9mbGFncyB8PSBPX0NMT0VYRUM7CisJ
CWJyZWFrOworCWNhc2UgRklPTkNMRVg6CisJCWZwLT5mX2ZsYWdzICY9IH5PX0NMT0VYRUM7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gdmZzX2lvY3RsKGZwLCByZXF1ZXN0LCBidWYp
OworCQlicmVhazsKKwl9CiAKIAlEUFJJTlRGKFZGU0RCX1NZU0NBTEwsICgic3lzX2lvY3RsOiBj
b21wIGVycm9yPSVkXG4iLCBlcnJvcikpOwogCXJldHVybiBlcnJvcjsKLS0gCjIuMjAuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:08:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:08:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Fem-0003au-Q7; Mon, 09 Sep 2019 09:08:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7Fem-0003ao-3K
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:08:20 +0000
X-Inumbo-ID: 593f9032-d2e1-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 593f9032-d2e1-11e9-b76c-bc764e2007e4;
 Mon, 09 Sep 2019 09:08:12 +0000 (UTC)
IronPort-SDR: Fyj+9zavpsBdNCuUZVmVICPG3y0QkSAFx+Ntc9JVV/ZjYI6EN6cTcHJHWt4blo9/WLlLyA3B1g
 5bG/O78WB2xQ==
IronPort-PHdr: =?us-ascii?q?9a23=3A8H6EChan+GmggHmFTprogET/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZr86+bnLW6fgltlLVR4KTs6sC17OM9fmwBydYsd6oizMrSNR0TR?=
 =?us-ascii?q?gLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ?=
 =?us-ascii?q?/iOgVrO+/7BpDdj9it1+C15pbffxhEiCCybL9vMhm6txjdu8oXjIdtNqo8yQ?=
 =?us-ascii?q?bCr2dVdehR2W5mP0+YkQzm5se38p5j8iBQtOwk+sVdT6j0fLk2QKJBAjg+PG?=
 =?us-ascii?q?87+MPktR/YTQuS/XQcSXkZkgBJAwfe8h73WIr6vzbguep83CmaOtD2TawxVD?=
 =?us-ascii?q?+/4apnVAPkhSEaPDM/7WrZiNF/jLhDrRyhuRJx3oDaboKSOvV8cKPQZs8WSX?=
 =?us-ascii?q?ZbU8pNTSFNHp+wYo0SBOQBJ+ZYqIz9qkMQoBu5HgmsGOLvyjlVjXHwwK06y/?=
 =?us-ascii?q?khGhzB0QM8GNIOq2jUrNTzNKsIVeC10bHIzSjYYvxKwjfx8pDIcg06rv2WR7?=
 =?us-ascii?q?JwdtPcxE8yHA3GllWdsZHpMjyI2ugXsGWW7/BsWfyxh2MlsQ18rCCjytojh4?=
 =?us-ascii?q?XUnI4YyVDJ+T9nzIs7K9C0UlN3bNG6HJZWqiqULZF5Qtk4TGFtoCs6z7oGto?=
 =?us-ascii?q?OlcyUS05QnwgLfa+SAc4iV/hLvTOaRLil8hHJiYL+/mROy/lKhyu34TMW7zE?=
 =?us-ascii?q?1KojBdktnRrX8BzQbT6s+fRvt8+EeuxyqP2hjO5uxLPEw4j6nWJp47zrIuiJ?=
 =?us-ascii?q?Yes17PEyHulEXzlqCWd0Ek+uay6+TgZ7XrvoOTN4hvigHiM6QunNazAeAlMg?=
 =?us-ascii?q?gWQmiW4viz1Kb58U3hXbVFlec6krPesJzCP8QUura5AxNJ0oYk8xu/Cjam0N?=
 =?us-ascii?q?IZnXkAN1JJYQ+IgJb3O17QJPD1FvO/g1W3kDd33PDKJLLgDYvLLnTZl7fhZ7?=
 =?us-ascii?q?l94VZGyAUv1dBf+45UCrYZLfLoWk/+rsbYAQU/MwCu2OboEtN91p8eWW2VBK?=
 =?us-ascii?q?+WKqbSvESO5u0xP+aMYJUaty3nJ/c7+v69xUM+zFoce6iuxt4bZW61GtxiIl?=
 =?us-ascii?q?6Fejz8j9FHFn0F7SQkS+m/o1qZTT9VL1KvR790sjo8E56nC8HHW5iwqLeamj?=
 =?us-ascii?q?+mFNtMYTYVWRi3DX70etDcCL83YyWIL5o5nw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BHBABtFXZd/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYMiqNHaM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjo?=
 =?us-ascii?q?igm8GeRA/ElcZgyKCD6YuhUuDOIFJgTSHH4YxP4ERgmRshB10hHQiBJYcliQ?=
 =?us-ascii?q?HgiRkBJQAJ4RhkAKEH6MThS84IYFYMxqDX4JOFxWOED0BATGBBgEBjRGCVAE?=
 =?us-ascii?q?B?=
X-IPAS-Result: =?us-ascii?q?A2BHBABtFXZd/wPjVY1lHQEBBQEHBQGBZ4NYMiqNHaM3C?=
 =?us-ascii?q?QEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjoigm8GeRA/ElcZg?=
 =?us-ascii?q?yKCD6YuhUuDOIFJgTSHH4YxP4ERgmRshB10hHQiBJYcliQHgiRkBJQAJ4Rhk?=
 =?us-ascii?q?AKEH6MThS84IYFYMxqDX4JOFxWOED0BATGBBgEBjRGCVAEB?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708026"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:08:04 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 8F1441A60143;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 85wsVfi9sP93; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7372C1A60125;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id CF3nbD2J9Szs; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 554341A60127;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:07:51 +0300
Message-Id: <20190909090754.23788-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
References: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 1/4] lib/vfscore: Use a scalable
 bitmap for open file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VW50aWwgbm93LCB0aGUgbnVtYmVyIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyB3YXMgbGltaXRl
ZCB0byA2NCwgd2hpY2ggd2FzIHRoZQpudW1iZXIgb2YgYml0cyBvZiB0aGUgdW5kZXJseWluZyBi
aXRtYXAuIFdlIGZpeCB0aGF0IGJ5IHJlcGxhY2luZyB3aXRoIGEKY29uZmlndXJhYmxlIGJpdG1h
cC4gV2Ugc2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIG1heGltdW0gb3BlbiBmaWxlcyB0byAxMDI0
LgoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0t
CiBsaWIvdmZzY29yZS9mZC5jIHwgMTYgKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdmZzY29y
ZS9mZC5jIGIvbGliL3Zmc2NvcmUvZmQuYwppbmRleCAwMTAyNWE0Ni4uZTA5ZGQ1NGMgMTAwNjQ0
Ci0tLSBhL2xpYi92ZnNjb3JlL2ZkLmMKKysrIGIvbGliL3Zmc2NvcmUvZmQuYwpAQCAtMzUsMTkg
KzM1LDE5IEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxz
Lmg+Ci0jaW5jbHVkZSA8dWsvYml0b3BzLmg+CisjaW5jbHVkZSA8dWsvYml0bWFwLmg+CiAjaW5j
bHVkZSA8dWsvYXNzZXJ0Lmg+CiAjaW5jbHVkZSA8dmZzY29yZS9maWxlLmg+CiAjaW5jbHVkZSA8
dWsvcGxhdC9sY3B1Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx1ay9jdG9ycy5o
PgogCi0jZGVmaW5lIEZEVEFCTEVfTUFYX0ZJTEVTIChzaXplb2YodWludDY0X3QpICogOCkKKyNk
ZWZpbmUgRkRUQUJMRV9NQVhfRklMRVMgMTAyNAogCiB2b2lkIGluaXRfc3RkaW8odm9pZCk7CiAK
IHN0cnVjdCBmZHRhYmxlIHsKLQl1aW50NjRfdCBiaXRtYXA7CisJdW5zaWduZWQgbG9uZyBiaXRt
YXBbVUtfQklUU19UT19MT05HUyhGRFRBQkxFX01BWF9GSUxFUyldOwogCXVpbnQzMl90IGZkX3N0
YXJ0OwogCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGVzW0ZEVEFCTEVfTUFYX0ZJTEVTXTsKIH07
CkBAIC01OSwxNCArNTksMTQgQEAgaW50IHZmc2NvcmVfYWxsb2NfZmQodm9pZCkKIAlpbnQgcmV0
OwogCiAJZmxhZ3MgPSB1a3BsYXRfbGNwdV9zYXZlX2lycWYoKTsKLQlyZXQgPSB1a2FyY2hfZmZz
bCh+ZmR0YWJsZS5iaXRtYXApOworCXJldCA9IHVrX2ZpbmRfbmV4dF96ZXJvX2JpdChmZHRhYmxl
LmJpdG1hcCwgRkRUQUJMRV9NQVhfRklMRVMsIDApOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0g
LUVORklMRTsKIAkJZ290byBleGl0OwogCX0KIAotCWZkdGFibGUuYml0bWFwIHw9ICh1aW50NjRf
dCkgMSA8PCByZXQ7CisJdWtfYml0bWFwX3NldChmZHRhYmxlLmJpdG1hcCwgcmV0LCAxKTsKIAog
ZXhpdDoKIAl1a3BsYXRfbGNwdV9yZXN0b3JlX2lycWYoZmxhZ3MpOwpAQCAtODMsNyArODMsNyBA
QCB2b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCkKIAlVS19BU1NFUlQoZmQgPiAyKTsKIAogCWZs
YWdzID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7Ci0JX191a19jbGVhcl9iaXQoZmQsICZmZHRh
YmxlLmJpdG1hcCk7XAorCXVrX2JpdG1hcF9jbGVhcihmZHRhYmxlLmJpdG1hcCwgZmQsIDEpOwog
CWZwID0gZmR0YWJsZS5maWxlc1tmZF07CiAJZmR0YWJsZS5maWxlc1tmZF0gPSBOVUxMOwogCXVr
cGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihmbGFncyk7CkBAIC0xMjksNyArMTI5LDcgQEAgc3RydWN0
IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9nZXRfZmlsZShpbnQgZmQpCiAJVUtfQVNTRVJUKGZkIDwg
KGludCkgRkRUQUJMRV9NQVhfRklMRVMpOwogCiAJZmxhZ3MgPSB1a3BsYXRfbGNwdV9zYXZlX2ly
cWYoKTsKLQlpZiAoIShmZHRhYmxlLmJpdG1hcCAmICgodWludDY0X3QpIDEgPDwgZmQpKSkKKwlp
ZiAoIXVrX3Rlc3RfYml0KGZkLCBmZHRhYmxlLmJpdG1hcCkpCiAJCWdvdG8gZXhpdDsKIAlyZXQg
PSBmZHRhYmxlLmZpbGVzW2ZkXTsKIAlmaG9sZChyZXQpOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHN0
YXRpYyB2b2lkIGZkdGFibGVfaW5pdCh2b2lkKQogCW1lbXNldCgmZmR0YWJsZSwgMCwgc2l6ZW9m
KGZkdGFibGUpKTsKIAogCS8qIHJlc2VydmUgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyICovCi0J
ZmR0YWJsZS5iaXRtYXAgPSA3OworCXVrX2JpdG1hcF9zZXQoZmR0YWJsZS5iaXRtYXAsIDAsIDMp
OwogCWluaXRfc3RkaW8oKTsKIH0KIAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:08:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:08:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Fen-0003bU-Rc; Mon, 09 Sep 2019 09:08:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7Fem-0003b0-VH
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:08:20 +0000
X-Inumbo-ID: 592c9ce8-d2e1-11e9-ac09-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 592c9ce8-d2e1-11e9-ac09-12813bfff9fa;
 Mon, 09 Sep 2019 09:08:11 +0000 (UTC)
IronPort-SDR: kGS0oZZ4BTORA8HOtZ8rQr5XEcTfWoKQtl3Ed+z7bM1l2Zf9CSTSb0PfiOZ8QebhGzrHlU6GDR
 NwFAWLHXDxDA==
IronPort-PHdr: =?us-ascii?q?9a23=3APf3gDhP/W3bHQru+z8Il6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0Iv7/rarrMEGX3/hxlliBBdydt6sezbOG7eu4CSQp2tWoiDg6aptCVh?=
 =?us-ascii?q?sI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFR?=
 =?us-ascii?q?rhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTagf79+Ngi6oAbQu8UZnYdvKbs6xw?=
 =?us-ascii?q?fUrHdPZ+lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2?=
 =?us-ascii?q?465MvwtRneVgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVz?=
 =?us-ascii?q?mu87tnRRn1gyoBKjU38nzYitZogaxbvhyvuhJxzY3Tbo6XOvpzZb/Rcc8ASG?=
 =?us-ascii?q?ZdRMtdSzBND4WhZIUPFeoBOuNYopHjqlsJthu+GQisBOXywTFOm3/2xbA62P?=
 =?us-ascii?q?kmHA7a2wwgBM4OsHXSrNnvMKcSTPi1zLTTwDrfdPNawy/96JXTfRw7u/GMWq?=
 =?us-ascii?q?t9fMzMwkcsDwPIlkicpIP4Mz+P1ekAs3KX4/R+We+tkWIqpRl9riWgy8sxkI?=
 =?us-ascii?q?XEhYIYxkra+Sh3zos5P8C0RUFlbdOiDZBerTuVN5FsTcMnW2xovSE6xaAYtp?=
 =?us-ascii?q?OjZygKzYgnxwbYa/yab4iE+hLjW/iVITd/nH9lZre/iAyz8Uik0OHzStK03E?=
 =?us-ascii?q?xSripYidbArGoN1xvL5siGTPty4Fuh1C6S2w3c9+1IO0M5mKrBJ5I/3LI9lI?=
 =?us-ascii?q?AfvErbEi/zgkr2jauWdks++uiv7uTqeqnpppiHN49oiwH+NL4imsiiAeQgLw?=
 =?us-ascii?q?gDRHSU+f+m2L374E32W69GjucxkqXBqpDVOdwbprKlAw9Syosj7he/DzGn0N?=
 =?us-ascii?q?QfhnkLNU9KdwyZj4f3P1HDO/T4Dfakg1Swizdn3f/HMaPnApnXKXjDirjhd6?=
 =?us-ascii?q?5n60FA0Aoz0cxf55VMB7EaIPL8QFXxu8beDhMjKAy72eDnCMl91owEX2KAGK?=
 =?us-ascii?q?qZPbjUsVCW+u0vJ/ODa5QPtDnjNvh2r8Lp2Ho4n14aZuyl0IUabFi8H+96OA?=
 =?us-ascii?q?OJbHyqhc0OQkkQuQ9rZ+vxlFyEGRpOf2v6C6k7/S06DsSiEJ/ebou2xqSc1m?=
 =?us-ascii?q?GhGcsFNSh9FlmQHCKwJM2/UPAWZXfKLw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BIBABtFXZd/wPjVY1dCB0BAQUBBwU?=
 =?us-ascii?q?BgWeDWDIqjR2jNwkBAQE6AQIBAYQ/AoJaOBMCAwkBAQUBAQEBAQYEAWyFOoI?=
 =?us-ascii?q?6IoJvBidSED8SVxmDIoIPpXszhUuDOIFJgTSHH4YxP4ERg1CEH3KFFgSMWYg?=
 =?us-ascii?q?lgR6WJAeCJGQElAAnmQKoQjghgVgzGoNfgk4XjiU9AQExgQYBAY9lAQE?=
X-IPAS-Result: =?us-ascii?q?A2BIBABtFXZd/wPjVY1dCB0BAQUBBwUBgWeDWDIqjR2jN?=
 =?us-ascii?q?wkBAQE6AQIBAYQ/AoJaOBMCAwkBAQUBAQEBAQYEAWyFOoI6IoJvBidSED8SV?=
 =?us-ascii?q?xmDIoIPpXszhUuDOIFJgTSHH4YxP4ERg1CEH3KFFgSMWYglgR6WJAeCJGQEl?=
 =?us-ascii?q?AAnmQKoQjghgVgzGoNfgk4XjiU9AQExgQYBAY9lAQE?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708029"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:08:04 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id C511C1A6013B;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id D9NIpVGyxcu8; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id A8C9D1A6012B;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id vA8lyNn9sJOU; Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 7BD271A6013C;
 Mon,  9 Sep 2019 12:08:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:07:54 +0300
Message-Id: <20190909090754.23788-5-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
References: <20190909090754.23788-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 4/4] lib/uklock: Make mutex recursive
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBleGlzdGluZyBtdXRleCBpbXBsZW1lbnRhdGlvbiB0byBz
dXBwb3J0IG11bHRpcGxlIGxvY2tpbmcKYnkgdGhlIHNhbWUgdGhyZWFkLgoKU2lnbmVkLW9mZi1i
eTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvdWtsb2NrL2lu
Y2x1ZGUvdWsvbXV0ZXguaCB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t
CiBsaWIvdWtsb2NrL211dGV4LmMgICAgICAgICAgICB8ICAzICsrLQogMiBmaWxlcyBjaGFuZ2Vk
LCAyNyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdWts
b2NrL2luY2x1ZGUvdWsvbXV0ZXguaCBiL2xpYi91a2xvY2svaW5jbHVkZS91ay9tdXRleC5oCmlu
ZGV4IGZmODUyYjQ1Li45ODZmYTZiMiAxMDA2NDQKLS0tIGEvbGliL3VrbG9jay9pbmNsdWRlL3Vr
L211dGV4LmgKKysrIGIvbGliL3VrbG9jay9pbmNsdWRlL3VrL211dGV4LmgKQEAgLTU0LDQ5ICs1
NCw2MSBAQCBleHRlcm4gIkMiIHsKICAqIHVzZXMgd2FpdCBxdWV1ZXMgZm9yIHRocmVhZHMKICAq
Lwogc3RydWN0IHVrX211dGV4IHsKLQlpbnQgbG9ja2VkOworCWludCBsb2NrX2NvdW50OworCXN0
cnVjdCB1a190aHJlYWQgKm93bmVyOwogCXN0cnVjdCB1a193YWl0cSB3YWl0OwogfTsKIAogI2Rl
ZmluZQlVS19NVVRFWF9JTklUSUFMSVpFUihuYW1lKQkJCQlcCi0JeyAwLCBfX1dBSVRfUVVFVUVf
SU5JVElBTElaRVIoKG5hbWUpLndhaXQpIH0KKwl7IDAsIDAsIE5VTEwsIF9fV0FJVF9RVUVVRV9J
TklUSUFMSVpFUigobmFtZSkud2FpdCkgfQogCiB2b2lkIHVrX211dGV4X2luaXQoc3RydWN0IHVr
X211dGV4ICptKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVrX211dGV4X2xvY2soc3RydWN0IHVr
X211dGV4ICptKQogeworCXN0cnVjdCB1a190aHJlYWQgKmN1cnJlbnQ7CiAJdW5zaWduZWQgbG9u
ZyBpcnFmOwogCiAJVUtfQVNTRVJUKG0pOwogCisJY3VycmVudCA9IHVrX3RocmVhZF9jdXJyZW50
KCk7CisKIAlmb3IgKDs7KSB7Ci0JCXVrX3dhaXRxX3dhaXRfZXZlbnQoJm0tPndhaXQsIG0tPmxv
Y2tlZCA9PSAwKTsKKwkJdWtfd2FpdHFfd2FpdF9ldmVudCgmbS0+d2FpdCwKKwkJCW0tPmxvY2tf
Y291bnQgPT0gMCB8fCBtLT5vd25lciA9PSBjdXJyZW50KTsKIAkJaXJxZiA9IHVrcGxhdF9sY3B1
X3NhdmVfaXJxZigpOwotCQlpZiAoIW0tPmxvY2tlZCkKKwkJaWYgKG0tPmxvY2tfY291bnQgPT0g
MCB8fCBtLT5vd25lciA9PSBjdXJyZW50KQogCQkJYnJlYWs7CiAJCXVrcGxhdF9sY3B1X3Jlc3Rv
cmVfaXJxZihpcnFmKTsKIAl9Ci0JbS0+bG9ja2VkID0gMTsKKwltLT5sb2NrX2NvdW50Kys7CisJ
bS0+b3duZXIgPSBjdXJyZW50OwogCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsKIH0K
IAogc3RhdGljIGlubGluZSBpbnQgdWtfbXV0ZXhfdHJ5bG9jayhzdHJ1Y3QgdWtfbXV0ZXggKm0p
CiB7CisJc3RydWN0IHVrX3RocmVhZCAqY3VycmVudDsKIAl1bnNpZ25lZCBsb25nIGlycWY7CiAJ
aW50IHJldCA9IDA7CiAKIAlVS19BU1NFUlQobSk7CiAKKwljdXJyZW50ID0gdWtfdGhyZWFkX2N1
cnJlbnQoKTsKKwogCWlycWYgPSB1a3BsYXRfbGNwdV9zYXZlX2lycWYoKTsKLQlpZiAoIW0tPmxv
Y2tlZCkKLQkJcmV0ID0gbS0+bG9ja2VkID0gMTsKKwlpZiAobS0+bG9ja19jb3VudCA9PSAwIHx8
IG0tPm93bmVyID09IGN1cnJlbnQpIHsKKwkJcmV0ID0gMTsKKwkJbS0+bG9ja19jb3VudCsrOwor
CQltLT5vd25lciA9IGN1cnJlbnQ7CisJfQogCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFm
KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCB1a19tdXRleF9pc19sb2Nr
ZWQoc3RydWN0IHVrX211dGV4ICptKQogewotCXJldHVybiBtLT5sb2NrZWQ7CisJcmV0dXJuIG0t
PmxvY2tfY291bnQgPiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdWtfbXV0ZXhfdW5sb2Nr
KHN0cnVjdCB1a19tdXRleCAqbSkKQEAgLTEwNiw5ICsxMTgsMTEgQEAgc3RhdGljIGlubGluZSB2
b2lkIHVrX211dGV4X3VubG9jayhzdHJ1Y3QgdWtfbXV0ZXggKm0pCiAJVUtfQVNTRVJUKG0pOwog
CiAJaXJxZiA9IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwotCVVLX0FTU0VSVChtLT5sb2NrZWQp
OwotCW0tPmxvY2tlZCA9IDA7Ci0JdWtfd2FpdHFfd2FrZV91cCgmbS0+d2FpdCk7CisJVUtfQVNT
RVJUKG0tPmxvY2tfY291bnQgPiAwKTsKKwlpZiAoLS1tLT5sb2NrX2NvdW50ID09IDApIHsKKwkJ
bS0+b3duZXIgPSBOVUxMOworCQl1a193YWl0cV93YWtlX3VwKCZtLT53YWl0KTsKKwl9CiAJdWtw
bGF0X2xjcHVfcmVzdG9yZV9pcnFmKGlycWYpOwogfQogCmRpZmYgLS1naXQgYS9saWIvdWtsb2Nr
L211dGV4LmMgYi9saWIvdWtsb2NrL211dGV4LmMKaW5kZXggMTgzYTAxZGIuLjVlNWVjOWE2IDEw
MDY0NAotLS0gYS9saWIvdWtsb2NrL211dGV4LmMKKysrIGIvbGliL3VrbG9jay9tdXRleC5jCkBA
IC0yLDYgKzIsNyBAQAogCiB2b2lkIHVrX211dGV4X2luaXQoc3RydWN0IHVrX211dGV4ICptKQog
ewotCW0tPmxvY2tlZCA9IDA7CisJbS0+bG9ja19jb3VudCA9IDA7CisJbS0+b3duZXIgPSBOVUxM
OwogCXVrX3dhaXRxX2luaXQoJm0tPndhaXQpOwogfQotLSAKMi4yMC4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GR2-0000G0-SU; Mon, 09 Sep 2019 09:58:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7GR1-0000Fv-6r
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:11 +0000
X-Inumbo-ID: 53275c78-d2e8-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 53275c78-d2e8-11e9-a337-bc764e2007e4;
 Mon, 09 Sep 2019 09:58:08 +0000 (UTC)
IronPort-SDR: dQioBhIp6ceYOXo3YPTcmmrZSFYyZfXEBzLIBbJ67Ivx48WnLERLwdglD3kU/mi5tm6aOJK6nS
 TM/J0x1IJwtw==
IronPort-PHdr: =?us-ascii?q?9a23=3AjEI8PxRXQ81Pyo3upvupCOLHtdpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6yZhSN2/xhgRfzUJnB7Loc0qyK6vqmADxeqs/R+Fk5M7V0Hy?=
 =?us-ascii?q?cfjssXmwFySOWkMmbcaMDQUiohAc5ZX0Vk9XzoeWJcGcL5ekGA6ibqtW1aFR?=
 =?us-ascii?q?rwLxd6KfroEYDOkcu3y/qy+5rOaAlUmTaxe7x/IAiooQnLq8UbgopvJqksxh?=
 =?us-ascii?q?bKv3BFZ/lYyWR0KFyJgh3y/N2w/Jlt8yRRv/Iu6ctNWrjkcqo7ULJVEi0oP3?=
 =?us-ascii?q?g668P3uxbDSxCP5mYHXWUNjhVIGQnF4wrkUZr3ryD3q/By2CiePc3xULA0RT?=
 =?us-ascii?q?Gv5LplRRP0lCsKMSMy/WfKgcJyka1bugqsqRxhzYDJbo+bN/1wc7jBcd8GX2?=
 =?us-ascii?q?dNQtxcWzBdDo66coABD/ABPeFdr4TluVYOqgC+BRWtBOPp1zRGgGL23bUn0+?=
 =?us-ascii?q?88FgzJwAsgH8kSsHTVqtX5LqMSUf2tzKnV1jjMc+hW1S3l6IjVaR8tu+uMXb?=
 =?us-ascii?q?VpfMfX1EIhFBvFg02NpYHqIj+ZzOcAvmiB4+Z+S+6iiXQrpg9prjSyycogl5?=
 =?us-ascii?q?PFi4EVx1ze6yl0zog4KcelREN0f9KpFoZbuTuAOItsWMwiRnlluCM9yrIbp5?=
 =?us-ascii?q?G2ZDMKyJE7xx7HbPyHbpSI7grjVOmPJTd4g2poeKy6hxmo8EigzvfwWdWv0F?=
 =?us-ascii?q?pQtipFj8LDumoX1xzU8sSHS/198Vm92TuXygze5fxILVo3mKfbMZIt3KA8m5?=
 =?us-ascii?q?gJvUnNBiP2nV/5jK6SdkUq4Oio7OHnb636qZ+bLI90lgD+MqI0lsy7HOQ4Kh?=
 =?us-ascii?q?UOUnOH9uSnzrHj5VD5T65Qgv0slanVqIraKtgDpq6lHw9V1Z4u6xO+Dzeg0d?=
 =?us-ascii?q?QYmmIHIEtYdx2ZkYjmJVXOLev8Dfe+mFSsjCxry+rJP7L/BJXBNH/DkK3ufb?=
 =?us-ascii?q?xl8U5T1BIzzcxD55JTErwBO/LzVVXrtNPCCB81KRe0zPzhCNVh1oMRQ2SPDb?=
 =?us-ascii?q?WcMK7Jt1+H+P4gI+2Wa4AOojryNeUltLbSiio8mFkcerLs0ZYJZXSQGvV9P1?=
 =?us-ascii?q?7fcXfqxNAbHjQkpA07Gcftk0GDV3Z3em6vF/Y34SonCYTgCZrbW6imm/qZwS?=
 =?us-ascii?q?39BJoANTMOMUyFDXq9L9bMYPwLci/HesI=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AcBQD/IHZd/wPjVY1lHgEGBwaBZ4N?=
 =?us-ascii?q?YMo1HozcJAQEBOgECAQGEP4JcOBMCAwkBAQUBAQEBAQYEAWyFOoI6IoNuT4Q?=
 =?us-ascii?q?kgg+mNoVLgziBSYE0hx+GMT+If3OFFgSMVYlHliQHgiRkBJQAJ4RhkAKEH6M?=
 =?us-ascii?q?ThS84IYFYMxqDYIIWAY5yPQEBgTcBAY0SglMBAQ?=
X-IPAS-Result: =?us-ascii?q?A2AcBQD/IHZd/wPjVY1lHgEGBwaBZ4NYMo1HozcJAQEBO?=
 =?us-ascii?q?gECAQGEP4JcOBMCAwkBAQUBAQEBAQYEAWyFOoI6IoNuT4Qkgg+mNoVLgziBS?=
 =?us-ascii?q?YE0hx+GMT+If3OFFgSMVYlHliQHgiRkBJQAJ4RhkAKEH6MThS84IYFYMxqDY?=
 =?us-ascii?q?IIWAY5yPQEBgTcBAY0SglMBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708129"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:58:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id EFBDB1A60127;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id CQWqLA6ojijT; Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id D20351A60136;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id W0OdPPb-bsDm; Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id B33731A60125;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:57:58 +0300
Message-Id: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v3 0/4] Changes for supporting
 Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgY2hhbmdlcyBhcmUgbmVlZGVkIGZvciBzb21lIG9mIHRoZSBQeXRob24gMiB1bml0IHRl
c3RzLiBTb21lIHRlc3RzIG1heQp1c2UgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMsIHRoZXJlZm9y
ZSB3ZSBoYWQgdG8gaW5jcmVhc2Ugb3VyIGxpbWl0LiBPdGhlcgpmaWxlcyB0cnkgdG8gY2xvc2Ug
dGhlIHN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMgKDAtMiksIHRoZXJlZm9yZSB0aGUgVk0Kc2hv
dWxkbid0IGNyYXNoIGlmIHN1Y2ggYmVoYXZpb3IgaXMgd2FudGVkLiBBbHNvLCBzb21lIHVuaXQg
dGVzdHMgbmVlZApyZWN1cnNpdmUgbXV0ZXhlcy4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gQXBwbGll
ZCBjb21tZW50cwotIEFkZGVkICdsaWIvdmZzY29yZTogc3lzX2lvY3RsKCkgLSBIYW5kbGUgRklP
Q0xFWCBhbmQgRklPTkNMRVggcmVxdWVzdHMnIHBhdGNoCgpDaGFuZ2VzIHNpbmNlIHYyOgotIEZp
eGVkIFVLX01VVEVYX0lOSVRJQUxJWkVSKCkKCkNvc3RpbiBMdXB1ICg0KToKICBsaWIvdmZzY29y
ZTogVXNlIGEgc2NhbGFibGUgYml0bWFwIGZvciBvcGVuIGZpbGUgZGVzY3JpcHRvcnMKICBsaWIv
dmZzY29yZTogUmV0dXJuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNsb3NlIHN0YW5kYXJkIGZpbGUK
ICAgIGRlc2NyaXB0b3JzCiAgbGliL3Zmc2NvcmU6IHN5c19pb2N0bCgpIC0gSGFuZGxlIEZJT0NM
RVggYW5kIEZJT05DTEVYIHJlcXVlc3RzCiAgbGliL3VrbG9jazogTWFrZSBtdXRleCByZWN1cnNp
dmUKCiBsaWIvdWtsb2NrL2luY2x1ZGUvdWsvbXV0ZXguaCAgICAgIHwgMzYgKysrKysrKysrKysr
KysrKysrKysrLS0tLS0tLS0tCiBsaWIvdWtsb2NrL211dGV4LmMgICAgICAgICAgICAgICAgIHwg
IDMgKystCiBsaWIvdmZzY29yZS9mZC5jICAgICAgICAgICAgICAgICAgIHwgMjMgKysrKysrKysr
Ky0tLS0tLS0tLQogbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaCB8ICAyICstCiBs
aWIvdmZzY29yZS9tYWluLmMgICAgICAgICAgICAgICAgIHwgIDggKysrKy0tLQogbGliL3Zmc2Nv
cmUvc3lzY2FsbHMuYyAgICAgICAgICAgICB8IDE1ICsrKysrKysrKysrLS0KIDYgZmlsZXMgY2hh
bmdlZCwgNTkgaW5zZXJ0aW9ucygrKSwgMjggZGVsZXRpb25zKC0pCgotLSAKMi4yMC4xCgoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GR5-0000Ge-U5; Mon, 09 Sep 2019 09:58:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7GR4-0000G6-38
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:14 +0000
X-Inumbo-ID: 5516bb97-d2e8-11e9-ac09-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 5516bb97-d2e8-11e9-ac09-12813bfff9fa;
 Mon, 09 Sep 2019 09:58:13 +0000 (UTC)
IronPort-SDR: J7uFfteeBv2lLjM7jkHrM85b3KR4AINlSZ0Ujvilg9mRicCnE/B2SzclsBT8SBQjhk9MI0u+VP
 3TN54SdUrzdw==
IronPort-PHdr: =?us-ascii?q?9a23=3ApcJQpBHce5Td6Rs7RN0IbZ1GYnF86YWxBRYc79?=
 =?us-ascii?q?8ds5kLTJ7zpciwAkXT6L1XgUPTWs2DsrQY0rCQ6vC+EjVQqb+681k6OKRWUB?=
 =?us-ascii?q?EEjchE1ycBO+WiTXPBEfjxciYhF95DXlI2t1uyMExSBdqsLwaK+i764jEdAA?=
 =?us-ascii?q?jwOhRoLerpBIHSk9631+ev8JHPfglEnjWwba5sIBmssAnctcgbjYR/Jqsy1x?=
 =?us-ascii?q?DEvmZGd+NKyG1yOFmdhQz85sC+/J5i9yRfpfcs/NNeXKv5Yqo1U6VWACwpPG?=
 =?us-ascii?q?4p6sLrswLDTRaU6XsHTmoWiBtIDBPb4xz8Q5z8rzH1tut52CmdIM32UbU5Ui?=
 =?us-ascii?q?ms4qt3VBPljjoMOjgk+2/Vl8NwlrpWrhK/qRJizYDaY4abO/hwfq7GYd8WWX?=
 =?us-ascii?q?BMUtpLWiBdHo+xaZYEAeobPeZfqonwv0UDrRylBQmwBePvzCJDiHnr3a0izu?=
 =?us-ascii?q?QqDAbL0xAnH9IVrHTUrdP1OL0WUeCo1KnI0C7OYO9N2Tvn8IjIbwsureuWXb?=
 =?us-ascii?q?J3aMfcz1QkGQDdjliItIDoMC6Z2v4OvmWb9eZsS/yjhmw9pwx/ujSj28ghhp?=
 =?us-ascii?q?TTio8Wyl3I7zt1zYg7KNGiVUJ2bsCoHZ1NvC+ALYR2WNktQ2RwtSY/zb0JpI?=
 =?us-ascii?q?C0cTARyJQi2x7fc/uHc5WU4h77VOaePzN4hHV9dbKhgha960mgyunmWsaoy1?=
 =?us-ascii?q?ZGtDJFksTXuXwXzRzT7dCLSvp7/ki/xTaCzx3f5+5ZLUwulqfWK4QtzqAump?=
 =?us-ascii?q?cRq0jOEDf6mEDsg6+XckUk9PKo6+PiYrj+upCcMJR0ih3/MqQogMC/Bfk4Mh?=
 =?us-ascii?q?ATX2WA5eu8z6fv/VXkQLpRlPE2iK7ZvIjAJcsHvq65HxNV0oE75ha6Djem1t?=
 =?us-ascii?q?UYnX4cLF5cZR2IkZbpNE/KIP3jCfe/gk+skCtwx/zcMbzuHJPNImLEkLf7cr?=
 =?us-ascii?q?Z381RcxxYrzdBD+5JUDakMIOnzWkDrrtzXFBk5Pxavw+n9DtV9yoMeVniJAq?=
 =?us-ascii?q?CDNaPfqlmI6fwzLOmIfoAaoyzxJOY4562msXhsnF4bfK6ymJcadn28NvBnOF?=
 =?us-ascii?q?mCJ2rhhJEGC2hZkBA5SbnBj0aeUDgbQ2uqQupo7TYgFIOgS4PeXp2Fi6fHxD?=
 =?us-ascii?q?qxWIdRMDMVQmuQGGvlIt3XE8wHbzifd5ds?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2D0AgD/IHZd/wPjVY1lHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4NYMiqNHaM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU?=
 =?us-ascii?q?6gjoigm8GJ1IQPxJXGYMigg+mAzOFS4M4gUmBNIcfhjE/hGGBBAGEDIUWBIx?=
 =?us-ascii?q?ViUeWJAeCJGQElAAnmQIthACkFTghgVgzGoNfgk4MCxWOED0BATGBBgEBj2U?=
 =?us-ascii?q?BAQ?=
X-IPAS-Result: =?us-ascii?q?A2D0AgD/IHZd/wPjVY1lHAEBAQQBAQcEAQGBZ4NYMiqNH?=
 =?us-ascii?q?aM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjoigm8GJ1IQP?=
 =?us-ascii?q?xJXGYMigg+mAzOFS4M4gUmBNIcfhjE/hGGBBAGEDIUWBIxViUeWJAeCJGQEl?=
 =?us-ascii?q?AAnmQIthACkFTghgVgzGoNfgk4MCxWOED0BATGBBgEBj2UBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708132"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:58:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 1CF981A6013D;
 Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id ymOIIqC6zJeC; Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 016131A60136;
 Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id o4225XFVWMFL; Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id DB1451A6013B;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:58:01 +0300
Message-Id: <20190909095802.23905-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 3/4] lib/vfscore: sys_ioctl() -
 Handle FIOCLEX and FIONCLEX requests
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBs
aWIvdmZzY29yZS9zeXNjYWxscy5jIHwgMTUgKysrKysrKysrKysrKy0tCiAxIGZpbGUgY2hhbmdl
ZCwgMTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdmZz
Y29yZS9zeXNjYWxscy5jIGIvbGliL3Zmc2NvcmUvc3lzY2FsbHMuYwppbmRleCA1NGFkYzJkMi4u
ZDM3NTc3NGEgMTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMKKysrIGIvbGliL3Zm
c2NvcmUvc3lzY2FsbHMuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0
bC5oPgogCiAjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8dmZzY29yZS9wcmV4Lmg+CkBA
IC0zODEsMTQgKzM4MiwyNCBAQCBzeXNfbHNlZWsoc3RydWN0IHZmc2NvcmVfZmlsZSAqZnAsIG9m
Zl90IG9mZiwgaW50IHR5cGUsIG9mZl90ICpvcmlnaW4pCiBpbnQKIHN5c19pb2N0bChzdHJ1Y3Qg
dmZzY29yZV9maWxlICpmcCwgdW5zaWduZWQgbG9uZyByZXF1ZXN0LCB2b2lkICpidWYpCiB7Ci0J
aW50IGVycm9yOworCWludCBlcnJvciA9IDA7CiAKIAlEUFJJTlRGKFZGU0RCX1NZU0NBTEwsICgi
c3lzX2lvY3RsOiBmcD0lcCByZXF1ZXN0PSVsdXhcbiIsIGZwLCByZXF1ZXN0KSk7CiAKIAlpZiAo
KGZwLT5mX2ZsYWdzICYgKFVLX0ZSRUFEIHwgVUtfRldSSVRFKSkgPT0gMCkKIAkJcmV0dXJuIEVC
QURGOwogCi0JZXJyb3IgPSB2ZnNfaW9jdGwoZnAsIHJlcXVlc3QsIGJ1Zik7CisJc3dpdGNoIChy
ZXF1ZXN0KSB7CisJY2FzZSBGSU9DTEVYOgorCQlmcC0+Zl9mbGFncyB8PSBPX0NMT0VYRUM7CisJ
CWJyZWFrOworCWNhc2UgRklPTkNMRVg6CisJCWZwLT5mX2ZsYWdzICY9IH5PX0NMT0VYRUM7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gdmZzX2lvY3RsKGZwLCByZXF1ZXN0LCBidWYp
OworCQlicmVhazsKKwl9CiAKIAlEUFJJTlRGKFZGU0RCX1NZU0NBTEwsICgic3lzX2lvY3RsOiBj
b21wIGVycm9yPSVkXG4iLCBlcnJvcikpOwogCXJldHVybiBlcnJvcjsKLS0gCjIuMjAuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GR7-0000Ht-Ve; Mon, 09 Sep 2019 09:58:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7GR6-0000Ha-7X
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:16 +0000
X-Inumbo-ID: 55107f74-d2e8-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 55107f74-d2e8-11e9-a337-bc764e2007e4;
 Mon, 09 Sep 2019 09:58:11 +0000 (UTC)
IronPort-SDR: W37x8ACUmsh7j0bAq3NSw3bRBbsKxfTdH8R9lp34SzvbizPZszNTui5DWPQyMD+7V96mAWSKfR
 uMWvsIH6soFQ==
IronPort-PHdr: =?us-ascii?q?9a23=3Aq8OyPxYE3f3Qcml28uQZcqX/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZr86+bnLW6fgltlLVR4KTs6sC17OM9fmwBydZsd6oizMrSNR0TR?=
 =?us-ascii?q?gLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ?=
 =?us-ascii?q?/iOgVrO+/7BpDdj9it1+C15pbffxhEiCCybL9vMhm6txjdu8oXjIdtN6o8yQ?=
 =?us-ascii?q?bCr2dVdehR2W5mP0+YkQzm5se38p5j8iBQtOwk+sVdT6j0fLk2QKJBAjg+PG?=
 =?us-ascii?q?87+MPktR/YTQuS/XQcSXkZkgBJAwfe8h73WIr6vzbguep83CmaOtD2TawxVD?=
 =?us-ascii?q?+/4apnVAPkhSEaPDM/7WrZiNF/jLhDrRyhuRJx3oDaboKSOvV8cKPQZs8WSX?=
 =?us-ascii?q?ZbU8pNTSFNHp+wYo0SBOQBJ+ZYqIz9qkMQoBu5HgmsGOLvyjlVjXHwwK06y/?=
 =?us-ascii?q?khGhzB0QM8GNIOq2jUrNTzNKsIVeC10bHIzSjYYvxKwjfx8pDIcg06rv2WR7?=
 =?us-ascii?q?JwdtPcxE8yHA3GllWdsZHpMjyI2ugXsGWW7/BsWfyxh2MlsQ18rCCjytojh4?=
 =?us-ascii?q?XUnI4YyVDJ+T9nzIs7K9C0UlN3bNG6HJZWqiqULZF5Qtk4TGFtoCs6z7oGto?=
 =?us-ascii?q?OlcyUS05QnwgLfa+SAc4iV/hLvTOaRLil8hHJiYL+/mROy/lKhyu34TMW7zE?=
 =?us-ascii?q?1KojBdktnRrX8BzQbT6s+fRvt8+EeuxyqP2hjO5uxLPEw4j6nWJp47zrIuiJ?=
 =?us-ascii?q?Yes17PEyHulEXzlqCWd0Ek+uay6+TgZ7XrvoOTN4hvigHiM6QunNazAeAlMg?=
 =?us-ascii?q?gWQmiW4viz1Kb58U3hXbVFlec6krPesJzCP8QUura5AxNJ0oYk8xu/Cjam0N?=
 =?us-ascii?q?IZnXkAN1JJYQ+IgJb3O17QJPD1FvO/g1W3kDd33PDKJLLgDYvLLnTZl7fhZ7?=
 =?us-ascii?q?l94VZGyAUv1dBf+45UCrYZLfLoWk/+rsbYAQU/MwCu2OboEtN91p8eWW2VBK?=
 =?us-ascii?q?+WKqbSvESO5u0xP+aMYJUaty3nJ/c7+v69xUM+zFoce6iuxt4bZW61GtxiIl?=
 =?us-ascii?q?6Fejz8j9FHFn0F7SQkS+m/o1qZTT9VL1KvR790sjo8E56nC8HHW5iwqLeamj?=
 =?us-ascii?q?+mFNtMYTYVWRi3DX70etDcCL83YyWIL5o5nw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BHBAD/IHZd/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYMiqNHaM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjo?=
 =?us-ascii?q?igm8GeRA/ElcZgyKCD6Y2hUuDOIFJgTSHH4YxP4ERgmRshB10hHQiBJYcliQ?=
 =?us-ascii?q?HgiRkBJQAJ4RhkAKEH6MThS84IYFYMxqDX4JOFxWOED0BATGBBgEBjRGCVAE?=
 =?us-ascii?q?B?=
X-IPAS-Result: =?us-ascii?q?A2BHBAD/IHZd/wPjVY1lHQEBBQEHBQGBZ4NYMiqNHaM3C?=
 =?us-ascii?q?QEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjoigm8GeRA/ElcZg?=
 =?us-ascii?q?yKCD6Y2hUuDOIFJgTSHH4YxP4ERgmRshB10hHQiBJYcliQHgiRkBJQAJ4Rhk?=
 =?us-ascii?q?AKEH6MThS84IYFYMxqDX4JOFxWOED0BATGBBgEBjRGCVAEB?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708130"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:58:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 068541A6012B;
 Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id Yaq9JoHGvdqL; Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id DFD941A60125;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id SpmkkYbCcxxD; Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id C043C1A60127;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:57:59 +0300
Message-Id: <20190909095802.23905-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 1/4] lib/vfscore: Use a scalable
 bitmap for open file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VW50aWwgbm93LCB0aGUgbnVtYmVyIG9mIG9wZW4gZmlsZSBkZXNjcmlwdG9ycyB3YXMgbGltaXRl
ZCB0byA2NCwgd2hpY2ggd2FzIHRoZQpudW1iZXIgb2YgYml0cyBvZiB0aGUgdW5kZXJseWluZyBi
aXRtYXAuIFdlIGZpeCB0aGF0IGJ5IHJlcGxhY2luZyB3aXRoIGEKY29uZmlndXJhYmxlIGJpdG1h
cC4gV2Ugc2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIG1heGltdW0gb3BlbiBmaWxlcyB0byAxMDI0
LgoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0t
CiBsaWIvdmZzY29yZS9mZC5jIHwgMTYgKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdmZzY29y
ZS9mZC5jIGIvbGliL3Zmc2NvcmUvZmQuYwppbmRleCAwMTAyNWE0Ni4uZTA5ZGQ1NGMgMTAwNjQ0
Ci0tLSBhL2xpYi92ZnNjb3JlL2ZkLmMKKysrIGIvbGliL3Zmc2NvcmUvZmQuYwpAQCAtMzUsMTkg
KzM1LDE5IEBACiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxz
Lmg+Ci0jaW5jbHVkZSA8dWsvYml0b3BzLmg+CisjaW5jbHVkZSA8dWsvYml0bWFwLmg+CiAjaW5j
bHVkZSA8dWsvYXNzZXJ0Lmg+CiAjaW5jbHVkZSA8dmZzY29yZS9maWxlLmg+CiAjaW5jbHVkZSA8
dWsvcGxhdC9sY3B1Lmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDx1ay9jdG9ycy5o
PgogCi0jZGVmaW5lIEZEVEFCTEVfTUFYX0ZJTEVTIChzaXplb2YodWludDY0X3QpICogOCkKKyNk
ZWZpbmUgRkRUQUJMRV9NQVhfRklMRVMgMTAyNAogCiB2b2lkIGluaXRfc3RkaW8odm9pZCk7CiAK
IHN0cnVjdCBmZHRhYmxlIHsKLQl1aW50NjRfdCBiaXRtYXA7CisJdW5zaWduZWQgbG9uZyBiaXRt
YXBbVUtfQklUU19UT19MT05HUyhGRFRBQkxFX01BWF9GSUxFUyldOwogCXVpbnQzMl90IGZkX3N0
YXJ0OwogCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGVzW0ZEVEFCTEVfTUFYX0ZJTEVTXTsKIH07
CkBAIC01OSwxNCArNTksMTQgQEAgaW50IHZmc2NvcmVfYWxsb2NfZmQodm9pZCkKIAlpbnQgcmV0
OwogCiAJZmxhZ3MgPSB1a3BsYXRfbGNwdV9zYXZlX2lycWYoKTsKLQlyZXQgPSB1a2FyY2hfZmZz
bCh+ZmR0YWJsZS5iaXRtYXApOworCXJldCA9IHVrX2ZpbmRfbmV4dF96ZXJvX2JpdChmZHRhYmxl
LmJpdG1hcCwgRkRUQUJMRV9NQVhfRklMRVMsIDApOwogCiAJaWYgKCFyZXQpIHsKIAkJcmV0ID0g
LUVORklMRTsKIAkJZ290byBleGl0OwogCX0KIAotCWZkdGFibGUuYml0bWFwIHw9ICh1aW50NjRf
dCkgMSA8PCByZXQ7CisJdWtfYml0bWFwX3NldChmZHRhYmxlLmJpdG1hcCwgcmV0LCAxKTsKIAog
ZXhpdDoKIAl1a3BsYXRfbGNwdV9yZXN0b3JlX2lycWYoZmxhZ3MpOwpAQCAtODMsNyArODMsNyBA
QCB2b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCkKIAlVS19BU1NFUlQoZmQgPiAyKTsKIAogCWZs
YWdzID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7Ci0JX191a19jbGVhcl9iaXQoZmQsICZmZHRh
YmxlLmJpdG1hcCk7XAorCXVrX2JpdG1hcF9jbGVhcihmZHRhYmxlLmJpdG1hcCwgZmQsIDEpOwog
CWZwID0gZmR0YWJsZS5maWxlc1tmZF07CiAJZmR0YWJsZS5maWxlc1tmZF0gPSBOVUxMOwogCXVr
cGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihmbGFncyk7CkBAIC0xMjksNyArMTI5LDcgQEAgc3RydWN0
IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9nZXRfZmlsZShpbnQgZmQpCiAJVUtfQVNTRVJUKGZkIDwg
KGludCkgRkRUQUJMRV9NQVhfRklMRVMpOwogCiAJZmxhZ3MgPSB1a3BsYXRfbGNwdV9zYXZlX2ly
cWYoKTsKLQlpZiAoIShmZHRhYmxlLmJpdG1hcCAmICgodWludDY0X3QpIDEgPDwgZmQpKSkKKwlp
ZiAoIXVrX3Rlc3RfYml0KGZkLCBmZHRhYmxlLmJpdG1hcCkpCiAJCWdvdG8gZXhpdDsKIAlyZXQg
PSBmZHRhYmxlLmZpbGVzW2ZkXTsKIAlmaG9sZChyZXQpOwpAQCAtMTg2LDcgKzE4Niw3IEBAIHN0
YXRpYyB2b2lkIGZkdGFibGVfaW5pdCh2b2lkKQogCW1lbXNldCgmZmR0YWJsZSwgMCwgc2l6ZW9m
KGZkdGFibGUpKTsKIAogCS8qIHJlc2VydmUgc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyICovCi0J
ZmR0YWJsZS5iaXRtYXAgPSA3OworCXVrX2JpdG1hcF9zZXQoZmR0YWJsZS5iaXRtYXAsIDAsIDMp
OwogCWluaXRfc3RkaW8oKTsKIH0KIAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GRA-0000IY-1z; Mon, 09 Sep 2019 09:58:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LAkm=XE=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i7GR9-0000IL-3P
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:19 +0000
X-Inumbo-ID: 567c2ef8-d2e8-11e9-ac09-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 567c2ef8-d2e8-11e9-ac09-12813bfff9fa;
 Mon, 09 Sep 2019 09:58:14 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 64FEF105688;
 Mon,  9 Sep 2019 11:58:13 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id dw49LrD1pfO4; Mon,  9 Sep 2019 11:58:13 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 438A3105028
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 11:58:13 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 11:58:13 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 11:57:57 +0200
Message-ID: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 0/4] Introduce
 libucontext library to unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyB0aGUgbGlidWNvbnRleHQgbGlicmFyeSB0byBV
bmlrcmFmdC4KbGlidWNvbnRleHQgcHJvdmlkZXMgdGhlIDx1Y29udGV4dC5oPiBBQkkgd2hlbiBw
ZXJmb3JtaW5nIGNvbnRleHQgc3dhcHMuClRoZSA8dWNvbnRleHQuaD4gZnVuY3Rpb25zIGFyZSBk
ZXByZWNhdGVkIGluIFBPU0lYLiBIb3dldmVyIHRoZXkgYXJlCm5vdGFibHkgdXNlZCBieSBHQ0Mn
cyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgR28gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuClRoZXJlZm9y
ZSwgdG8gc3VwcG9ydCBHbywgc29mdHdhcmUgdGhhdCB1dGlsaXNlcyB0aGlzIGRlcHJlY2F0ZWQg
QVBJIGlzCm5lZWRlZC4KClBsZWFzZSBpZ25vcmUgdGhlIHByZXZpb3VzIHZlcnNpb24uIAoKQ2hh
cmFsYW1wb3MgTWFpbmFzICg0KToKICBJbnRyb2R1Y2UgbGlicmFyeSBza2VsZXRvbgogIEFkZCBN
YWtlZmlsZS51awogIEFkZCBwYXRjaCBmb3IgdGhlIG9yaWdpbmFsIGNvZGUKICBFeHBvcnQgc3lt
Ym9scwoKIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyNyAr
KysrKysKIENPRElOR19TVFlMRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNSAr
KwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1ICsrCiBD
T1BZSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzkgKysrKysrKysr
CiBDb25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcgKysKIE1B
SU5UQUlORVJTLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMSArKysKIE1ha2Vm
aWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA5MSArKysrKysrKysrKysr
KysrKysrKysKIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
OCArKwogZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0ICsK
IHBhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQtaGVhZGVyLWZpbGUucGF0Y2ggfCAzMiArKysrKysr
KwogMTAgZmlsZXMgY2hhbmdlZCwgMjI5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0
NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVhdGUg
bW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5t
ZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5U
QUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBSRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCiBjcmVhdGUg
bW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLUFkZC11Y29udGV4dC1oZWFkZXItZmlsZS5wYXRjaAoK
LS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GRC-0000JD-3X; Mon, 09 Sep 2019 09:58:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7GRB-0000J0-6k
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:21 +0000
X-Inumbo-ID: 54fd6ccc-d2e8-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 54fd6ccc-d2e8-11e9-a337-bc764e2007e4;
 Mon, 09 Sep 2019 09:58:11 +0000 (UTC)
IronPort-SDR: MAXD1+Px+/SOheV9K6WNICiSIFah2bmwJolWGqQVmZ9cCVF/CXxqfZNKoCZmEHfwmiTyk1A2Qk
 oeLJLEsR5G9A==
IronPort-PHdr: =?us-ascii?q?9a23=3AerpBSRZARr88U1d/42MccgX/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZr86+bnLW6fgltlLVR4KTs6sC17OM9fmwBydZsd6oizMrSNR0TR?=
 =?us-ascii?q?gLiMEbzUQLIfWuLgnFFsPsdDEwB89YVVVorDmROElRH9viNRWJ+iXhpTEdFQ?=
 =?us-ascii?q?/iOgVrO+/7BpDdj9it1+C15pbffxhEiCCybL9vMhm6txjdu8oXjIdtN6o8yQ?=
 =?us-ascii?q?bCr2dVdehR2W5mP0+YkQzm5se38p5j8iBQtOwk+sVdT6j0fLk2QKJBAjg+PG?=
 =?us-ascii?q?87+MPktR/YTQuS/XQcSXkZkgBJAwfe8h73WIr6vzbguep83CmaOtD2TawxVD?=
 =?us-ascii?q?+/4apnVAPkhSEaPDM/7WrZiNF/jLhDrRyhuRJx3oDaboKSOvV8cKPQZs8WSX?=
 =?us-ascii?q?ZbU8pNTSFNHp+wYo0SBOQBJ+ZYqIz9qkMQoBu5HgmsGOLvyjlVjXHwwK06y/?=
 =?us-ascii?q?khGhzB0QM8GNIOq2jUrNTzNKsIVeC10bHIzSjYYvxKwjfx8pDIcg06rv2WR7?=
 =?us-ascii?q?JwdtPcxE8yHA3GllWdsZHpMjyI2ugXsGWW7/BsWfyxh2MlsQ18rCCjytojh4?=
 =?us-ascii?q?XUnI4YyVDJ+T9nzIs7K9C0UlN3bNG6HJZWqiqULZF5Qtk4TGFtoCs6z7oGto?=
 =?us-ascii?q?OlcyUS05QnwgLfa+SAc4iV/hLvTOaRLil8hHJiYL+/mROy/lKhyu34TMW7zE?=
 =?us-ascii?q?1KojBdktnRrX8BzQbT6s+fRvt8+EeuxyqP2hjO5uxLPEw4j6nWJp47zrIuiJ?=
 =?us-ascii?q?Yes17PEyHulEXzlqCWd0Ek+uay6+TgZ7XrvoOTN4hvigHiM6QunNazAeAlMg?=
 =?us-ascii?q?gWQmiW4viz1Kb58U3hXbVFlec6krPesJzCP8QUura5AxNJ0oYk8xu/Cjam0N?=
 =?us-ascii?q?IZnXkAN1JJYQ+IgJb3O17QJPD1FvO/g1W3kDd33PDKJLLgDYvLLnTZl7fhZ7?=
 =?us-ascii?q?l94VZGyAUv1dBf+45UCrYZLfLoWk/+rsbYAQU/MwCu2OboEtN91p8eWW2VBK?=
 =?us-ascii?q?+WKqbSvESO5u0xP+aMYJUaty3nJ/c7+v69xUM+zFoce6iuxt4bZW61GtxiIl?=
 =?us-ascii?q?6Fejz8j9FHFn0F7SQkS+m/o1qZTT9VL1KvR790sjo8E56nC8HHW5iwqLeamj?=
 =?us-ascii?q?+mFNtMYTYVWRi3DX70etDcCL83YyWIL5o5nw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BIBAD/IHZd/wPjVY1dCB0BAQUBBwU?=
 =?us-ascii?q?BgWeDWDIqjR2jNwkBAQE6AQIBAYQ/AoJaOBMCAwkBAQUBAQEBAQYEAWyFOoI?=
 =?us-ascii?q?6IoJvBidSED8SVxmDIoIPpgMzhUuDOIFJgTSHH4YxP4ERg1CEH3KFFgSMWYg?=
 =?us-ascii?q?lgR6WJAeCJGQElAAnmQKoQjghgVgzGoNfgk4XjiU9AQExgQYBAY9lAQE?=
X-IPAS-Result: =?us-ascii?q?A2BIBAD/IHZd/wPjVY1dCB0BAQUBBwUBgWeDWDIqjR2jN?=
 =?us-ascii?q?wkBAQE6AQIBAYQ/AoJaOBMCAwkBAQUBAQEBAQYEAWyFOoI6IoJvBidSED8SV?=
 =?us-ascii?q?xmDIoIPpgMzhUuDOIFJgTSHH4YxP4ERg1CEH3KFFgSMWYglgR6WJAeCJGQEl?=
 =?us-ascii?q?AAnmQKoQjghgVgzGoNfgk4XjiU9AQExgQYBAY9lAQE?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708133"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:58:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2F3621A60136;
 Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 6uOIga_TuQXr; Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 15A791A6013B;
 Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id Pp5iSFi5mJgY; Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id E79F11A6013C;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:58:02 +0300
Message-Id: <20190909095802.23905-5-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 4/4] lib/uklock: Make mutex
 recursive
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBjaGFuZ2VzIHRoZSBleGlzdGluZyBtdXRleCBpbXBsZW1lbnRhdGlvbiB0byBz
dXBwb3J0IG11bHRpcGxlIGxvY2tpbmcKYnkgdGhlIHNhbWUgdGhyZWFkLgoKU2lnbmVkLW9mZi1i
eTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvdWtsb2NrL2lu
Y2x1ZGUvdWsvbXV0ZXguaCB8IDM2ICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t
CiBsaWIvdWtsb2NrL211dGV4LmMgICAgICAgICAgICB8ICAzICsrLQogMiBmaWxlcyBjaGFuZ2Vk
LCAyNyBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdWts
b2NrL2luY2x1ZGUvdWsvbXV0ZXguaCBiL2xpYi91a2xvY2svaW5jbHVkZS91ay9tdXRleC5oCmlu
ZGV4IGZmODUyYjQ1Li5kNDQzNWViZCAxMDA2NDQKLS0tIGEvbGliL3VrbG9jay9pbmNsdWRlL3Vr
L211dGV4LmgKKysrIGIvbGliL3VrbG9jay9pbmNsdWRlL3VrL211dGV4LmgKQEAgLTU0LDQ5ICs1
NCw2MSBAQCBleHRlcm4gIkMiIHsKICAqIHVzZXMgd2FpdCBxdWV1ZXMgZm9yIHRocmVhZHMKICAq
Lwogc3RydWN0IHVrX211dGV4IHsKLQlpbnQgbG9ja2VkOworCWludCBsb2NrX2NvdW50OworCXN0
cnVjdCB1a190aHJlYWQgKm93bmVyOwogCXN0cnVjdCB1a193YWl0cSB3YWl0OwogfTsKIAogI2Rl
ZmluZQlVS19NVVRFWF9JTklUSUFMSVpFUihuYW1lKQkJCQlcCi0JeyAwLCBfX1dBSVRfUVVFVUVf
SU5JVElBTElaRVIoKG5hbWUpLndhaXQpIH0KKwl7IDAsIE5VTEwsIF9fV0FJVF9RVUVVRV9JTklU
SUFMSVpFUigobmFtZSkud2FpdCkgfQogCiB2b2lkIHVrX211dGV4X2luaXQoc3RydWN0IHVrX211
dGV4ICptKTsKIAogc3RhdGljIGlubGluZSB2b2lkIHVrX211dGV4X2xvY2soc3RydWN0IHVrX211
dGV4ICptKQogeworCXN0cnVjdCB1a190aHJlYWQgKmN1cnJlbnQ7CiAJdW5zaWduZWQgbG9uZyBp
cnFmOwogCiAJVUtfQVNTRVJUKG0pOwogCisJY3VycmVudCA9IHVrX3RocmVhZF9jdXJyZW50KCk7
CisKIAlmb3IgKDs7KSB7Ci0JCXVrX3dhaXRxX3dhaXRfZXZlbnQoJm0tPndhaXQsIG0tPmxvY2tl
ZCA9PSAwKTsKKwkJdWtfd2FpdHFfd2FpdF9ldmVudCgmbS0+d2FpdCwKKwkJCW0tPmxvY2tfY291
bnQgPT0gMCB8fCBtLT5vd25lciA9PSBjdXJyZW50KTsKIAkJaXJxZiA9IHVrcGxhdF9sY3B1X3Nh
dmVfaXJxZigpOwotCQlpZiAoIW0tPmxvY2tlZCkKKwkJaWYgKG0tPmxvY2tfY291bnQgPT0gMCB8
fCBtLT5vd25lciA9PSBjdXJyZW50KQogCQkJYnJlYWs7CiAJCXVrcGxhdF9sY3B1X3Jlc3RvcmVf
aXJxZihpcnFmKTsKIAl9Ci0JbS0+bG9ja2VkID0gMTsKKwltLT5sb2NrX2NvdW50Kys7CisJbS0+
b3duZXIgPSBjdXJyZW50OwogCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsKIH0KIAog
c3RhdGljIGlubGluZSBpbnQgdWtfbXV0ZXhfdHJ5bG9jayhzdHJ1Y3QgdWtfbXV0ZXggKm0pCiB7
CisJc3RydWN0IHVrX3RocmVhZCAqY3VycmVudDsKIAl1bnNpZ25lZCBsb25nIGlycWY7CiAJaW50
IHJldCA9IDA7CiAKIAlVS19BU1NFUlQobSk7CiAKKwljdXJyZW50ID0gdWtfdGhyZWFkX2N1cnJl
bnQoKTsKKwogCWlycWYgPSB1a3BsYXRfbGNwdV9zYXZlX2lycWYoKTsKLQlpZiAoIW0tPmxvY2tl
ZCkKLQkJcmV0ID0gbS0+bG9ja2VkID0gMTsKKwlpZiAobS0+bG9ja19jb3VudCA9PSAwIHx8IG0t
Pm93bmVyID09IGN1cnJlbnQpIHsKKwkJcmV0ID0gMTsKKwkJbS0+bG9ja19jb3VudCsrOworCQlt
LT5vd25lciA9IGN1cnJlbnQ7CisJfQogCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsK
IAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIGludCB1a19tdXRleF9pc19sb2NrZWQo
c3RydWN0IHVrX211dGV4ICptKQogewotCXJldHVybiBtLT5sb2NrZWQ7CisJcmV0dXJuIG0tPmxv
Y2tfY291bnQgPiAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdWtfbXV0ZXhfdW5sb2NrKHN0
cnVjdCB1a19tdXRleCAqbSkKQEAgLTEwNiw5ICsxMTgsMTEgQEAgc3RhdGljIGlubGluZSB2b2lk
IHVrX211dGV4X3VubG9jayhzdHJ1Y3QgdWtfbXV0ZXggKm0pCiAJVUtfQVNTRVJUKG0pOwogCiAJ
aXJxZiA9IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwotCVVLX0FTU0VSVChtLT5sb2NrZWQpOwot
CW0tPmxvY2tlZCA9IDA7Ci0JdWtfd2FpdHFfd2FrZV91cCgmbS0+d2FpdCk7CisJVUtfQVNTRVJU
KG0tPmxvY2tfY291bnQgPiAwKTsKKwlpZiAoLS1tLT5sb2NrX2NvdW50ID09IDApIHsKKwkJbS0+
b3duZXIgPSBOVUxMOworCQl1a193YWl0cV93YWtlX3VwKCZtLT53YWl0KTsKKwl9CiAJdWtwbGF0
X2xjcHVfcmVzdG9yZV9pcnFmKGlycWYpOwogfQogCmRpZmYgLS1naXQgYS9saWIvdWtsb2NrL211
dGV4LmMgYi9saWIvdWtsb2NrL211dGV4LmMKaW5kZXggMTgzYTAxZGIuLjVlNWVjOWE2IDEwMDY0
NAotLS0gYS9saWIvdWtsb2NrL211dGV4LmMKKysrIGIvbGliL3VrbG9jay9tdXRleC5jCkBAIC0y
LDYgKzIsNyBAQAogCiB2b2lkIHVrX211dGV4X2luaXQoc3RydWN0IHVrX211dGV4ICptKQogewot
CW0tPmxvY2tlZCA9IDA7CisJbS0+bG9ja19jb3VudCA9IDA7CisJbS0+b3duZXIgPSBOVUxMOwog
CXVrX3dhaXRxX2luaXQoJm0tPndhaXQpOwogfQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GRH-0000KN-5F; Mon, 09 Sep 2019 09:58:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7GRG-0000KD-83
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:26 +0000
X-Inumbo-ID: 55e849fe-d2e8-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 55e849fe-d2e8-11e9-a337-bc764e2007e4;
 Mon, 09 Sep 2019 09:58:12 +0000 (UTC)
IronPort-SDR: H1TCGP9IQd9qV8cPAgS9sJy0N/UVL6hMomJIYYeyjDByueANf+Uu1o76jOUSOLqCkF7daO3Rjn
 VqcjdynAa04A==
IronPort-PHdr: =?us-ascii?q?9a23=3AFwXvtBPBgunD0PS04Sol6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0Iv7/rarrMEGX3/hxlliBBdydt6sezbOG7eu5CSQp2tWoiDg6aptCVh?=
 =?us-ascii?q?sI2409vjcLJ4q7M3D9N+PgdCcgHc5PBxdP9nC/NlVJSo6lPwWB6nK94iQPFR?=
 =?us-ascii?q?rhKAF7Ovr6GpLIj8Swyuu+54Dfbx9HiTagf79+Ngi6oAbQu8UZnIdvKbs6xw?=
 =?us-ascii?q?fUrHdPZ+lY335jK0iJnxb76Mew/Zpj/DpVtvk86cNOUrj0crohQ7BAAzsoL2?=
 =?us-ascii?q?465MvwtRneVgSP/WcTUn8XkhVTHQfI6gzxU4rrvSv7sup93zSaPdHzQLspVz?=
 =?us-ascii?q?mu87tnRRn1gyoBKjU38nzYitZogaxbvhyvuhJxzY3Tbo6XOvpzZb/Rcc8ASG?=
 =?us-ascii?q?ZdRMtdSzBND4WhZIUPFeoBOuNYopHjqlsJthu+GQisBOXywTFOm3/2xbA62P?=
 =?us-ascii?q?kmHA7a2wwgBM4OsHXSrNnvMKcSTPi1zLTTwDrfdPNawy/96JXTfRw7u/GMWq?=
 =?us-ascii?q?t9fMzMwkcsDwPIlkicpIP4Mz+P1ekAs3KX4/R+We+tkWIqpRl9riWgy8sxkI?=
 =?us-ascii?q?XEhYIYxkra+Sh3zos5P8C0RUFlbdOiDZBerTuVN5FsTcMnW2xovSE6xaAYtp?=
 =?us-ascii?q?OjZygKzYgnxwbYa/yab4iE+hLjW/iVITd/nH9lZre/iAyz8Uik0OHzStK03E?=
 =?us-ascii?q?xSripYidbArGoN1xvL5siGTPty4Fuh1C6S2w3c9+1IO0M5mKrBJ5I/3LI9lI?=
 =?us-ascii?q?AfvErbEi/zgkr2jauWdks++uiv7uTqeqnpppiHN49oiwH+NL4imsiiAeQgLw?=
 =?us-ascii?q?gDRHSU+f+m2L374E32W69GjucxkqXBqpDVOdwbprKlAw9Syosj7he/DzGn0N?=
 =?us-ascii?q?QfhnkLNU9KdwyZj4f3P1HDO/T4Dfakg1Swizdn3f/HMaPnApnXKXjDirjhd6?=
 =?us-ascii?q?5n60FA0Aoz0cxf55VMB7EaIPL8QFXxu8beDhMjKAy72eDnCMl91owEX2KAGK?=
 =?us-ascii?q?qZPbjUsVCW+u0vJ/ODa5QPtDnjNvh2r8Lp2Ho4n14aZuyl0IUabFi8H+96OA?=
 =?us-ascii?q?OJbHyqhc0OQkkQuQ9rZ+vxlFyEGRpOf2v6C6k7/S06DsSiEJ/ebou2xqSc1m?=
 =?us-ascii?q?GhGcsFNSh9FlmQHCKwJM2/UPAWZXfKLw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BHBAD/IHZd/wPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NYMiqNHaM3CQEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjo?=
 =?us-ascii?q?igm8GJ1IQPxJXGYMigg+mAzOJA4FJgTSHH4YxP4N1bIURhHQiBJYcliQHgiR?=
 =?us-ascii?q?kBJQAJ5kCoxOFLzghgVgzGoNfgk4XFY4QPQEBMYEGAQGPZQEB?=
X-IPAS-Result: =?us-ascii?q?A2BHBAD/IHZd/wPjVY1lHQEBBQEHBQGBZ4NYMiqNHaM3C?=
 =?us-ascii?q?QEBAToBAgEBhD8Cglo4EwIDCQEBBQEBAQEBBgQBbIU6gjoigm8GJ1IQPxJXG?=
 =?us-ascii?q?YMigg+mAzOJA4FJgTSHH4YxP4N1bIURhHQiBJYcliQHgiRkBJQAJ5kCoxOFL?=
 =?us-ascii?q?zghgVgzGoNfgk4XFY4QPQEBMYEGAQGPZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708131"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 12:58:06 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 0F1241A60125;
 Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id zqsTRkxj7koY; Mon,  9 Sep 2019 12:58:06 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id EC0AB1A6013D;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id fsdoNOixQsTt; Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id CCDFA1A6012B;
 Mon,  9 Sep 2019 12:58:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 12:58:00 +0300
Message-Id: <20190909095802.23905-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 2/4] lib/vfscore: Return error
 when trying to close standard file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29tZSBhcHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8gY2xvc2UgdGhlIHN0YW5kYXJkIGZpbGUgZGVz
Y3JpcHRvcnMgKHN0ZGluLApzdGRvdXQsIHN0ZGVyciksIHRoYXQgaXMgcGVyZmVjdGx5IG5vcm1h
bC4gVGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gc2hvdWxkIHJldHVybgphbiBlcnJvciBpZiBzdWNo
IHJlcXVlc3QgaXMgbm90IGFsbG93ZWQsIGluc3RlYWQgb2YgY3Jhc2hpbmcuCgpTaWduZWQtb2Zm
LWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGxpYi92ZnNjb3Jl
L2ZkLmMgICAgICAgICAgICAgICAgICAgfCA3ICsrKysrLS0KIGxpYi92ZnNjb3JlL2luY2x1ZGUv
dmZzY29yZS9maWxlLmggfCAyICstCiBsaWIvdmZzY29yZS9tYWluLmMgICAgICAgICAgICAgICAg
IHwgOCArKysrKy0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA2IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2ZkLmMgYi9saWIvdmZzY29yZS9mZC5j
CmluZGV4IGUwOWRkNTRjLi43ZWZlZDc0MSAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvZmQuYwor
KysgYi9saWIvdmZzY29yZS9mZC5jCkBAIC03MywxNCArNzMsMTUgQEAgZXhpdDoKIAlyZXR1cm4g
cmV0OwogfQogCi12b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCkKK2ludCB2ZnNjb3JlX3B1dF9m
ZChpbnQgZmQpCiB7CiAJc3RydWN0IHZmc2NvcmVfZmlsZSAqZnA7CiAJdW5zaWduZWQgbG9uZyBm
bGFnczsKIAogCVVLX0FTU0VSVChmZCA8IChpbnQpIEZEVEFCTEVfTUFYX0ZJTEVTKTsKIAkvKiBD
dXJyZW50bHkgaXQgaXMgbm90IGFsbG93ZWQgdG8gZnJlZSBzdGQoaW58b3V0fGVycikgKi8KLQlV
S19BU1NFUlQoZmQgPiAyKTsKKwlpZiAoZmQgPD0gMikKKwkJcmV0dXJuIC1FQlVTWTsKIAogCWZs
YWdzID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7CiAJdWtfYml0bWFwX2NsZWFyKGZkdGFibGUu
Yml0bWFwLCBmZCwgMSk7CkBAIC05NCw2ICs5NSw4IEBAIHZvaWQgdmZzY29yZV9wdXRfZmQoaW50
IGZkKQogCSAqLwogCWlmIChmcCkKIAkJZmRyb3AoZnApOworCisJcmV0dXJuIDA7CiB9CiAKIGlu
dCB2ZnNjb3JlX2luc3RhbGxfZmQoaW50IGZkLCBzdHJ1Y3QgdmZzY29yZV9maWxlICpmaWxlKQpk
aWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaCBiL2xpYi92ZnNj
b3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgKaW5kZXggMzU0YTQxNGUuLmM2OTgyMDFkIDEwMDY0
NAotLS0gYS9saWIvdmZzY29yZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oCisrKyBiL2xpYi92ZnNj
b3JlL2luY2x1ZGUvdmZzY29yZS9maWxlLmgKQEAgLTY2LDcgKzY2LDcgQEAgc3RydWN0IHZmc2Nv
cmVfZmlsZSB7CiAjZGVmaW5lIEZEX1VOTE9DSyhmcCkgICAgIHVrX211dGV4X3VubG9jaygmKGZw
LT5mX2xvY2spKQogCiBpbnQgdmZzY29yZV9hbGxvY19mZCh2b2lkKTsKLXZvaWQgdmZzY29yZV9w
dXRfZmQoaW50IGZkKTsKK2ludCB2ZnNjb3JlX3B1dF9mZChpbnQgZmQpOwogaW50IHZmc2NvcmVf
aW5zdGFsbF9mZChpbnQgZmQsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwogc3RydWN0IHZm
c2NvcmVfZmlsZSAqdmZzY29yZV9nZXRfZmlsZShpbnQgZmQpOwogdm9pZCB2ZnNjb3JlX3B1dF9m
aWxlKHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUv
bWFpbi5jIGIvbGliL3Zmc2NvcmUvbWFpbi5jCmluZGV4IDhkMGU0YjJjLi45MjVjZTc2MiAxMDA2
NDQKLS0tIGEvbGliL3Zmc2NvcmUvbWFpbi5jCisrKyBiL2xpYi92ZnNjb3JlL21haW4uYwpAQCAt
MjA1LDE1ICsyMDUsMTcgQEAgVUtfVFJBQ0VQT0lOVCh0cmFjZV92ZnNfY2xvc2VfZXJyLCAiJWQi
LCBpbnQpOwogaW50IGZkY2xvc2UoaW50IGZkKQogewogCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZw
OworCWludCBlcnJvcjsKIAogCWZwID0gdmZzY29yZV9nZXRfZmlsZShmZCk7CiAJaWYgKCFmcCkK
IAkJcmV0dXJuIEVCQURGOwogCi0JdmZzY29yZV9wdXRfZmQoZmQpOwotCWZkcm9wKGZwKTsKKwll
cnJvciA9IHZmc2NvcmVfcHV0X2ZkKGZkKTsKKwlpZiAoIWVycm9yKQorCQlmZHJvcChmcCk7CiAK
LQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludCBjbG9zZShpbnQgZmQpCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GRZ-0000Lg-7X; Mon, 09 Sep 2019 09:58:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LAkm=XE=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i7GRY-0000Lb-7G
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:44 +0000
X-Inumbo-ID: 66d35984-d2e8-11e9-ac09-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 66d35984-d2e8-11e9-ac09-12813bfff9fa;
 Mon, 09 Sep 2019 09:58:41 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CC009F2027;
 Mon,  9 Sep 2019 11:58:40 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Qm0VAgd_vkBF; Mon,  9 Sep 2019 11:58:40 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id A88D0F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 11:58:38 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 11:58:38 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 11:57:58 +0200
Message-ID: <20190909095801.13956-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 1/4] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFz
QG5lY2xhYi5ldT4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysr
KysrKysrKysKIENPRElOR19TVFlMRS5tZCB8ICA1ICsrKysrCiBDT05UUklCVVRJTkcubWQgfCAg
NSArKysrKwogQ09QWUlORy5tZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrCiBDb25maWcudWsgICAgICAgfCAgNyArKysrKysrCiBNQUlOVEFJTkVSUy5t
ZCAgfCAxMSArKysrKysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDggKysrKysrKysKIGV4cG9y
dHN5bXMudWsgICB8ICAxICsKIDggZmlsZXMgY2hhbmdlZCwgMTAzIGluc2VydGlvbnMoKykKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NU
WUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAx
MDA2NDQgQ09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1v
ZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCiBj
cmVhdGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUg
Yi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJmZDMK
LS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjcgQEAKKyouZGVwZW5k
CisqLm8KKyouYQorKi5kCisqLnNvCisqLm9yaWcKKyoucmVqCisqLmJhaworKi5zd3AKKyp+Ciss
KgorXCMqXCMKKy5cIyoKK1wjXypcIworLlwjXyoKKyEuZ2l0aWdub3JlCisuKgorCisjIGdudSBn
bG9iYWwgZmlsZXMKK0dQQVRICitHUlRBR1MKK0dTWU1TCitHVEFHUworCisjIGNzY29wZSBmaWxl
cworY3Njb3BlLioKK25jc2NvcGUuKgpkaWZmIC0tZ2l0IGEvQ09ESU5HX1NUWUxFLm1kIGIvQ09E
SU5HX1NUWUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjI0MjcK
LS0tIC9kZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQKQEAgLTAsMCArMSw1IEBACitDb2Rp
bmcgU3R5bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT0RJTkdfU1RZ
TEUubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KKwpkaWZmIC0tZ2l0
IGEvQ09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjUyM2MxYjIKLS0tIC9kZXYvbnVsbAorKysgYi9DT05UUklCVVRJTkcu
bWQKQEAgLTAsMCArMSw1IEBACitDb250cmlidXRpbmcgdG8gVW5pa3JhZnQKKz09PT09PT09PT09
PT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUgYENPTlRSSUJVVElORy5tZGAgZmls
ZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgorCmRpZmYgLS1naXQgYS9DT1BZSU5H
Lm1kIGIvQ09QWUlORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODA2
NDA2Ci0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORy5tZApAQCAtMCwwICsxLDM5IEBACitMaWNl
bnNlCis9PT09PT09CisKK1VuaWtyYWZ0IGxpYnVjb250ZXh0IHdyYXBwZXJzCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFw
cGVyIGNvZGUgdG8gYnVpbGQgbGlidWNvbnRleHQgd2l0aCBVbmlrcmFmdC4KK0VhY2ggQyBjb2Rl
IGZpbGUgaW4gdGhpcyByZXBvc2l0b3J5IHNob3VsZCBkZWNsYXJlIHdobyBpcyB0aGUKK2NvcHly
aWdodCBvd25lciBhbmQgdW5kZXIgd2hpY2ggdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhlIGNvZGUg
aXMKK2xpY2Vuc2VkLiBJZiBzdWNoIGEgbGljZW5jZSBub3RlIGlzIG1pc3NpbmcsIHRoZSBmb2xs
b3dpbmcgY29weXJpZ2h0Citub3RpY2Ugd2lsbCBhcHBseToKKworCUNvcHlyaWdodCAoYykgMjAx
OSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisKKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKwltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKwlhcmUgbWV0OgorCisJMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKwkgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKwkgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisJICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKwkzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisJICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKwkgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisJQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorCUlNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisJQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorCUxJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKwlDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorCVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworCUlOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisJ
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKwlBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorCVBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVhYjBhMwotLS0gL2Rldi9udWxsCisrKyBiL0NvbmZp
Zy51awpAQCAtMCwwICsxLDcgQEAKK2NvbmZpZyBMSUJVQ09OVEVYVAorICAgICAgICAgICBib29s
ICJ1Y29udGV4dC5oIEFQSSIKKyAgICAgICAgICAgZGVmYXVsdCBuCisJICAgc2VsZWN0IExJQk5F
V0xJQkMKKworaWYgTElCVUNPTlRFWFQKK2VuZGlmCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUy5t
ZCBiL01BSU5UQUlORVJTLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdl
MTk3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9NQUlOVEFJTkVSUy5tZApAQCAtMCwwICsxLDExIEBA
CitNYWludGFpbmVycyBMaXN0Cis9PT09PT09PT09PT09PT09CisKK0ZvciBub3RlcyBvbiBob3cg
dG8gcmVhZCB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gYE1BSU5UQUlORVJTLm1k
YCBpbgordGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KKworCUxJQlVDT05URVhULVVOSUtS
QUZUCisJTToJRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgorCUw6CW1pbmlv
cy1kZXZlbEBsaXN0cy54ZW4ub3JnCisJRjogKgorCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9S
RUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTdhMGNiOQotLS0g
L2Rldi9udWxsCisrKyBiL1JFQURNRS5tZApAQCAtMCwwICsxLDggQEAKK2xpYnVjb250ZXh0IGZv
ciB1bmlrcmFmdAorPT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBwb3J0IG9mIGxpYnVj
b250ZXh0IGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5LgorCitQbGVhc2UgcmVmZXIg
dG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIGBk
b2MvYAorc3ViZGlyZWN0b3J5IG9mIHRoZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuCisKZGlm
ZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjYyMWU5NGYKLS0tIC9kZXYvbnVsbAorKysgYi9leHBvcnRzeW1z
LnVrCkBAIC0wLDAgKzEgQEAKK25vbmUKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GRc-0000M9-94; Mon, 09 Sep 2019 09:58:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LAkm=XE=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i7GRb-0000M4-Nz
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:47 +0000
X-Inumbo-ID: 693d1412-d2e8-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 693d1412-d2e8-11e9-b76c-bc764e2007e4;
 Mon, 09 Sep 2019 09:58:45 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id DF1EBF2027;
 Mon,  9 Sep 2019 11:58:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id gMPeN04wfM-p; Mon,  9 Sep 2019 11:58:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B7909F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 11:58:42 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 11:58:41 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 11:58:00 +0200
Message-ID: <20190909095801.13956-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 3/4] Add patch for
 the original code
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmVwbGFjZSBzaWduYWwuaCB3aXRoIG11c2wncyB1Y29udGV4dC5oLiBtYWtlY29udGV4dCB1c2Vz
IHRoZSBzdHJ1Y3QKdWNvbnRleHRfdCBhbmQgdGhpcyBzdHJ1Y3QgaXMgZGVmaW5lZCBpbiBiaXRz
L3NpZ25hbC5oIHdoaWNoIGluY2x1ZGVkCmZyb20gdWNvbnRleHQuaC4gSW4gbXVzbCBzaWduYWwu
aCBpbmNsdWRlcyBiaXRzL3NpZ25hbC5oIGJ1dCB0aGlzIGlzIG5vdAp0aGUgY2FzZSB3aXRoIG5l
d2xpYiB3aGljaCBoYXMgbm8gZGVmaW5pdGlvbiBmb3IgdWNvbnRleHRfdCBzdHJ1Y3QuCiAKU2ln
bmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFi
LmV1PgotLS0KIHBhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQtaGVhZGVyLWZpbGUucGF0Y2ggfCAz
MiArKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCsp
CiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLUFkZC11Y29udGV4dC1oZWFkZXItZmls
ZS5wYXRjaAoKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQtaGVhZGVyLWZp
bGUucGF0Y2ggYi9wYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhlYWRlci1maWxlLnBhdGNoCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YTE5YTUKLS0tIC9kZXYvbnVsbAor
KysgYi9wYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhlYWRlci1maWxlLnBhdGNoCkBAIC0wLDAg
KzEsMzIgQEAKK0Zyb20gYmJjYWFlOTkyZjUzZDg2NDhhYmFiNTI1NGU4MWJkZjMwNjQwOTExYyBN
b24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFs
YW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KK0RhdGU6IFdlZCwgMjkgTWF5IDIwMTkgMTE6MzQ6MDMg
KzAyMDAKK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHVjb250ZXh0IGhlYWRlciBmaWxlCisKK21ha2Vj
b250ZXh0IHVzZXMgdGhlIHN0cnVjdCB1Y29udGV4dF90IHdoaWNoIGlzIG5vdCBkZWZpbmVkIGFu
eXdoZXJlIGluCituZXdsaWIuIEluIG11c2wgc2lnbmFsLmggaW5jbHVkZXMgYml0cy9zaWduYWwu
aCB3aGljaCBkZWZpbmVzIHVjb250ZXh0X3QKK3N0cnVjdC4gVGhlcmVmb3JlIG5ld2xpYidzIHNp
Z25hbC5oIGlzIHJlcGxhY2VkIGJ5IG11c2wncyB1Y29udGV4dC5oCitoZWFkZXIgd2hpY2ggaW5j
bHVkZXMgYml0cy9zaWduYWwuaC4KKworU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFz
IDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgorCistLS0KKyBhcmNoL3g4Nl82NC9tYWtl
Y29udGV4dC5jIHwgMiArLQorIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMSBkZWxl
dGlvbigtKQorCitkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbWFrZWNvbnRleHQuYyBiL2FyY2gv
eDg2XzY0L21ha2Vjb250ZXh0LmMKK2luZGV4IGJhNmNhNTkuLmUyNzIwMDggMTAwNjQ0CistLS0g
YS9hcmNoL3g4Nl82NC9tYWtlY29udGV4dC5jCisrKysgYi9hcmNoL3g4Nl82NC9tYWtlY29udGV4
dC5jCitAQCAtMTMsNyArMTMsNyBAQAorICNkZWZpbmUgX0dOVV9TT1VSQ0UKKyAjaW5jbHVkZSA8
c3RkZGVmLmg+CisgI2luY2x1ZGUgPHN0ZGFyZy5oPgorLSNpbmNsdWRlIDxzaWduYWwuaD4KKysj
aW5jbHVkZSA8dWNvbnRleHQuaD4KKyAjaW5jbHVkZSA8c3RyaW5nLmg+CisgI2luY2x1ZGUgPHN0
ZGludC5oPgorIAorLS0gCisyLjE3LjEKKwotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:50 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GRe-0000Mp-BF; Mon, 09 Sep 2019 09:58:50 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LAkm=XE=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i7GRd-0000MU-2q
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:49 +0000
X-Inumbo-ID: 680ded50-d2e8-11e9-ac09-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 680ded50-d2e8-11e9-ac09-12813bfff9fa;
 Mon, 09 Sep 2019 09:58:43 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D158DF2028;
 Mon,  9 Sep 2019 11:58:42 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 4K1T4bVRvkje; Mon,  9 Sep 2019 11:58:42 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B0527F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 11:58:40 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 11:58:39 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 11:57:59 +0200
Message-ID: <20190909095801.13956-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 2/4] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIE1ha2VmaWxlLnVrIHwgOTEgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA5MSBpbnNlcnRpb25z
KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKCmRpZmYgLS1naXQgYS9NYWtlZmls
ZS51ayBiL01ha2VmaWxlLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5
Y2Q5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS51awpAQCAtMCwwICsxLDkxIEBACisj
ICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisjCisjICBsaWJ1Y29udGV4
dCBNYWtlZmlsZS51aworIworIyAgQXV0aG9yczogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxh
bXBvcy5NYWluYXNAbmVjbGFiLmV1PgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgRXVy
b3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0OgorIworIyAgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhl
IG5hbWVzIG9mIGl0cworIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgICAgIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjICBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjICBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyAgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKKyMgIFRISVMg
SEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisjCisK
KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnVjb250ZXh0LCQo
Q09ORklHX0xJQlVDT05URVhUKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE9yaWdp
bmFsIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJVQ09OVEVYVF9WRVJTSU9O
PTAuOS4wCitMSUJVQ09OVEVYVF9VUkw9aHR0cHM6Ly9naXRodWIuY29tL0FkZWxpZUxpbnV4L2xp
YnVjb250ZXh0L2FyY2hpdmUvdiQoTElCVUNPTlRFWFRfVkVSU0lPTikuemlwCitMSUJVQ09OVEVY
VF9QQVRDSERJUj0kKExJQlVDT05URVhUX0JBU0UpL3BhdGNoZXMKK0xJQlVDT05URVhUX1NVQkRJ
Uj1saWJ1Y29udGV4dC0kKExJQlVDT05URVhUX1ZFUlNJT04pCiskKGV2YWwgJChjYWxsIGZldGNo
LGxpYnVjb250ZXh0LCQoTElCVUNPTlRFWFRfVVJMKSkpCiskKGV2YWwgJChjYWxsIHBhdGNoLGxp
YnVjb250ZXh0LCQoTElCVUNPTlRFWFRfUEFUQ0hESVIpLCQoTElCVUNPTlRFWFRfU1VCRElSKSkp
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCitMSUJVQ09OVEVYVF9FWFRSQUNURUQ9JChMSUJVQ09OVEVYVF9PUklHSU4pL2xpYnVj
b250ZXh0LSQoTElCVUNPTlRFWFRfVkVSU0lPTikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
KyMgTGlicmFyeSBpbmNsdWRlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJQlVDT05URVhU
X0NPTU1PTl9JTkNMVURFUy15ICAgICArPSAtSSQoTElCVUNPTlRFWFRfQkFTRSkvaW5jbHVkZQor
TElCVUNPTlRFWFRfQ09NTU9OX0lOQ0xVREVTLXkgICAgICs9IC1JJChMSUJVQ09OVEVYVF9FWFRS
QUNURUQpCitDSU5DTFVERVMtJChDT05GSUdfTElCVUNPTlRFWFQpICAgKz0gJChMSUJVQ09OVEVY
VF9DT01NT05fSU5DTFVERVMteSkKK0NYWElOQ0xVREVTLSQoQ09ORklHX0xJQlVDT05URVhUKSAr
PSAkKExJQlVDT05URVhUX0NPTU1PTl9JTkNMVURFUy15KQorCitMSUJVQ09OVEVYVF9DSU5DTFVE
RVMgICArPSAtSSQoTElCVUNPTlRFWFRfRVhUUkFDVEVEKQorTElCVUNPTlRFWFRfQ1hYSU5DTFVE
RVMgKz0gLUkkKExJQlVDT05URVhUX0VYVFJBQ1RFRCkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKKyMgR2xvYmFsIGZsYWdzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdXBwcmVzcyBz
b21lIHdhcm5pbmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nlc3MgbG9vayBuZWF0ZXIKK1NVUFBS
RVNTX0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlciBcCisJLVduby11bnVzZWQtdmFyaWFi
bGUgLVduby11bnVzZWQtdmFsdWUgLVduby11bnVzZWQtZnVuY3Rpb24gXAorCS1Xbm8tbWlzc2lu
Zy1maWVsZC1pbml0aWFsaXplcnMgLVduby1pbXBsaWNpdC1mYWxsdGhyb3VnaAorCitMSUJVQ09O
VEVYVF9DRkxBR1MteSAgICs9ICQoU1VQUFJFU1NfRkxBR1MpIFwKKyAJLVduby1wb2ludGVyLXRv
LWludC1jYXN0IC1Xbm8taW50LXRvLXBvaW50ZXItY2FzdAorTElCVUNPTlRFWFRfQ1hYRkxBR1Mt
eSArPSAkKFNVUFBSRVNTX0ZMQUdTKQorCisjIEV4cG9ydGVkIHN5bWJvbHMKK0xJQlVDT05URVhU
X0VYUE9SVFMgPSAkKExJQlBDUkVfQkFTRSkvZXhwb3J0c3ltcy51aworCisjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworIyBsaWJ1Y29udGV4dCBjb2RlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
TElCVUNPTlRFWFRfU1JDUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0gJChMSUJVQ09OVEVYVF9F
WFRSQUNURUQpL2FyY2gveDg2XzY0L2dldGNvbnRleHQuUworTElCVUNPTlRFWFRfU1JDUy0kKENP
TkZJR19BUkNIX1g4Nl82NCkgKz0gJChMSUJVQ09OVEVYVF9FWFRSQUNURUQpL2FyY2gveDg2XzY0
L21ha2Vjb250ZXh0LmMKK0xJQlVDT05URVhUX1NSQ1MtJChDT05GSUdfQVJDSF9YODZfNjQpICs9
ICQoTElCVUNPTlRFWFRfRVhUUkFDVEVEKS9hcmNoL3g4Nl82NC9zZXRjb250ZXh0LlMKK0xJQlVD
T05URVhUX1NSQ1MtJChDT05GSUdfQVJDSF9YODZfNjQpICs9ICQoTElCVUNPTlRFWFRfRVhUUkFD
VEVEKS9hcmNoL3g4Nl82NC9zdGFydGNvbnRleHQuUworTElCVUNPTlRFWFRfU1JDUy0kKENPTkZJ
R19BUkNIX1g4Nl82NCkgKz0gJChMSUJVQ09OVEVYVF9FWFRSQUNURUQpL2FyY2gveDg2XzY0L3N3
YXBjb250ZXh0LlMKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 09:58:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 09:58:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GRh-0000NW-Cy; Mon, 09 Sep 2019 09:58:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LAkm=XE=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1i7GRg-0000NP-Jx
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 09:58:52 +0000
X-Inumbo-ID: 6a76cb70-d2e8-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6a76cb70-d2e8-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 09:58:47 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id F0922F2028;
 Mon,  9 Sep 2019 11:58:46 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id mPfvAh-_kM3r; Mon,  9 Sep 2019 11:58:46 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C536DF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 11:58:44 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 11:58:41 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 11:58:01 +0200
Message-ID: <20190909095801.13956-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 4/4] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGV4cG9ydHN5bXMudWsgfCA1ICsrKystCiAxIGZpbGUgY2hhbmdlZCwgNCBp
bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBi
L2V4cG9ydHN5bXMudWsKaW5kZXggNjIxZTk0Zi4uMzBkYjA0MSAxMDA2NDQKLS0tIGEvZXhwb3J0
c3ltcy51aworKysgYi9leHBvcnRzeW1zLnVrCkBAIC0xICsxLDQgQEAKLW5vbmUKK2dldGNvbnRl
eHQKK21ha2Vjb250ZXh0CitzZXRjb250ZXh0Citzd2FwY29udGV4dAotLSAKMi4xNy4xCgoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 10:04:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 10:04:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GWg-0001Dn-8l; Mon, 09 Sep 2019 10:04:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7GWe-0001Dh-Nt
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 10:04:00 +0000
X-Inumbo-ID: 249dbd38-d2e9-11e9-b299-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 249dbd38-d2e9-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 10:04:00 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id a11so3342857wrx.1
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 03:03:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=nVOpdYJ0IeR8zJ9JOgRChamXTvOUI+LYK7kDc9bAsIE=;
 b=GxiZE0cv7SViJToFWzMc6dMTvTPCnvHrIWQG4DHrzkjuNRCaKXbhUWWvoHxIDIJSKR
 mj6mxOz+0ErQw9ozwEs8glgrAI8SlCjr4XcUnNPgL0W8Ht58Eend4hYe6EPoRvntMliX
 dj752AdMDFGJNDEcFwNYkv1Plj1+yzVAjg9rbDdDRg3wjjDl8Xi/mR+4YhEVYVtkFtWV
 cLSH4elBlaX2mmyP5py4+BZo3Q6wj+2V/uE8Bwvj8Ob9fPSwRUgYuKS/bywf8Fg/dN8D
 F8cJ6jhLlpQnfRnvERqkhyaNekqiiypGAj6RBf0BwZYw9IJ2bkBsLhDr0Kl94hgnT2ue
 sX2w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=nVOpdYJ0IeR8zJ9JOgRChamXTvOUI+LYK7kDc9bAsIE=;
 b=LO0VASLZ5FEmygt1s5Xb7Wv9+IG/XBTgxocHKH2B5CwfFwxJA6TT+GFNtetNOCwcJK
 ZJQosQWmUV5/zmyrfp8kAK/RyPSsjy1i2Tclw37bTfhqyRZ/HNlWgc166DG+qNWvbQJP
 RXQPZ36LJG92mjKW86rhzWZf48Swx3QYLrjITynqKYBK2f4pTS9wOM+3tLWWUZEvwEcP
 32hRSFCXcKLPMIwVtdQHw19BCOM63tLxyEFtV7cAeReFKU+jyqlzNcdHw8NGIOIaPrDt
 9UQHNZNReDXBnHf7WH1ojZebcE4LBd9ZeN4Fn57aKMMwLSVrMugonf9B+EbaAi66BDhC
 Tzqg==
X-Gm-Message-State: APjAAAXdBI/Sg5lQaXDyxtIosNkFQ6BFpiwAObc5qBTeUHSSZjJRGPXS
 3NNs2PfbQEbxcV+/WFTqHZgE8lXG
X-Google-Smtp-Source: APXvYqwfWKRiVxhH0gC8gSKpL1ymUpqnZnbX1OIRr1lWQb3WkyrBIIZR6qUBmvS85xoZLQj7hKYP2Q==
X-Received: by 2002:a05:6000:106:: with SMTP id
 o6mr17526241wrx.57.1568023439042; 
 Mon, 09 Sep 2019 03:03:59 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id y14sm25610763wrd.84.2019.09.09.03.03.58
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 03:03:58 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
 <20190909095801.13956-5-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <3ff80471-96ef-4868-d859-fa4c050aa620@gmail.com>
Date: Mon, 9 Sep 2019 13:03:57 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095801.13956-5-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 4/4] Export
 symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzkv
MTkgMTI6NTggUE0sIENoYXJhbGFtcG9zIE1haW5hcyB3cm90ZToKPiBTaWduZWQtb2ZmLWJ5OiBD
aGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Cj4gLS0tCj4g
IGV4cG9ydHN5bXMudWsgfCA1ICsrKystCj4gIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMo
KyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9y
dHN5bXMudWsKPiBpbmRleCA2MjFlOTRmLi4zMGRiMDQxIDEwMDY0NAo+IC0tLSBhL2V4cG9ydHN5
bXMudWsKPiArKysgYi9leHBvcnRzeW1zLnVrCj4gQEAgLTEgKzEsNCBAQAo+IC1ub25lCj4gK2dl
dGNvbnRleHQKPiArbWFrZWNvbnRleHQKPiArc2V0Y29udGV4dAo+ICtzd2FwY29udGV4dAo+IAoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 10:31:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 10:31:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Gx5-00049E-2T; Mon, 09 Sep 2019 10:31:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7Gx3-000499-N3
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 10:31:17 +0000
X-Inumbo-ID: f3aad572-d2ec-11e9-978d-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f3aad572-d2ec-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 10:31:15 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id q19so13164727wmc.3
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 03:31:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=PW4m+gkrwayQdWIpE5J82r/PC2233OQZkD0HonGOo6k=;
 b=AzEkk+5EFwSWLia1+lXrat6iXYcJyFl8ZUX9OW3jkmXyWvU8cvJbzEZ3GiajBUf5U1
 judsj8PvARAw1AnkKrC/6IsqjyW5wfFNm1JPyvSPuAArQ3fPLcYw7N8txrOUhAtj9VqX
 OP27VgrqL31I8XO0iQRDQCtokX237ysdVU3v7/Q6BOpuliVw4mlKb243p7NoxqygLXOL
 pWkgiRADcg7iQsB+pqAfUW+vk/dB/QG08c1vfaxktyCbhGlaGvcyHEeLC97dLy2HA9Em
 dyD6llx19QfrdFwPyFEKJVuDwnLVl/LC/DKoa+EV1DoqUCh8scx+49VQm3QQan7aMC00
 MVyg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=PW4m+gkrwayQdWIpE5J82r/PC2233OQZkD0HonGOo6k=;
 b=MycQbgAjLCk+3GKQ6MgIzVgh9C758aEzf3G6SeqImrlPXwYefDTFzZvyeT8/c8WUY+
 Mu+hmzrCq8tti8UKef1CtmcMWgD9RybbEeuQr88YHx0GXT5mj3bfNYy53oPy2cPyN2wf
 ewacq45l5e1k0O+Brulhz8usbrLZmr+4Lr51Rs3hKS2IPuAagImwnnMs0gLQ7GUa3lTw
 QKBDga9t0Uclng8ey/aJC5qb7leePXDqHEMByQ27fD1Opa025lAG4YLGkvykP4I5/Igv
 M+t/c3+PFwzjauCXb9ZdUCQWY1TrdWZHvxiwKgGQZqMDSOfxoZL/W8B+E8m4a1y42wDm
 V1YA==
X-Gm-Message-State: APjAAAUVP1lZb5+r68UwRtQC4EUrb/tGD/JFRhfledQ2YBCkzvXD2laT
 ImYyWf/6oAMSFCtJSGZvbSQXCqWt
X-Google-Smtp-Source: APXvYqyHG9B9RjpqMditqbrOb2oWGwvwKcFsnuUjztRV90BLIm+mZyWsBSJAg4TJ0HFAGdftMjv/TA==
X-Received: by 2002:a1c:9950:: with SMTP id b77mr18987524wme.46.1568025074873; 
 Mon, 09 Sep 2019 03:31:14 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.103])
 by smtp.gmail.com with ESMTPSA id e12sm2931020wrw.37.2019.09.09.03.31.13
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 03:31:14 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
 <20190904102538.16320-2-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <0071db06-3fee-7b44-0d4a-1bb357be1390@gmail.com>
Date: Mon, 9 Sep 2019 13:31:13 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190904102538.16320-2-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/4] bits/signal.h:
 Import from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5LzQv
MTkgMToyNSBQTSwgQ2hhcmFsYW1wb3MgTWFpbmFzIHdyb3RlOgo+IENvcGllZCBhcyBpcyBmcm9t
IHRoZSBvZmZpY2lhbCBtdXNsIGdpdCBtaXJyb3IKPiBnaXQ6Ly9naXQubXVzbC1saWJjLm9yZy9t
dXNsLCBjb21taXQgNmZjYjQ0MGQuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFp
bmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pgo+IC0tLQo+ICBtdXNsLWltcG9ydGVk
L2FyY2gveDg2XzY0L2JpdHMvc2lnbmFsLmggfCAxMjQgKysrKysrKysrKysrKysrKysrKysrKysr
Cj4gIDEgZmlsZSBjaGFuZ2VkLCAxMjQgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2
NDQgbXVzbC1pbXBvcnRlZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oCj4gCj4gZGlmZiAtLWdp
dCBhL211c2wtaW1wb3J0ZWQvYXJjaC94ODZfNjQvYml0cy9zaWduYWwuaCBiL211c2wtaW1wb3J0
ZWQvYXJjaC94ODZfNjQvYml0cy9zaWduYWwuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k
ZXggMDAwMDAwMC4uMjBjYmY0YQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9tdXNsLWltcG9ydGVk
L2FyY2gveDg2XzY0L2JpdHMvc2lnbmFsLmgKPiBAQCAtMCwwICsxLDEyNCBAQAo+ICsjaWYgZGVm
aW5lZChfUE9TSVhfU09VUkNFKSB8fCBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgXAo+ICsgfHwg
ZGVmaW5lZChfWE9QRU5fU09VUkNFKSB8fCBkZWZpbmVkKF9HTlVfU09VUkNFKSB8fCBkZWZpbmVk
KF9CU0RfU09VUkNFKQo+ICsKPiArI2lmZGVmIF9HTlVfU09VUkNFCj4gKyNkZWZpbmUgUkVHX1I4
ICAgICAgICAgIDAKPiArI2RlZmluZSBSRUdfUjkgICAgICAgICAgMQo+ICsjZGVmaW5lIFJFR19S
MTAgICAgICAgICAyCj4gKyNkZWZpbmUgUkVHX1IxMSAgICAgICAgIDMKPiArI2RlZmluZSBSRUdf
UjEyICAgICAgICAgNAo+ICsjZGVmaW5lIFJFR19SMTMgICAgICAgICA1Cj4gKyNkZWZpbmUgUkVH
X1IxNCAgICAgICAgIDYKPiArI2RlZmluZSBSRUdfUjE1ICAgICAgICAgNwo+ICsjZGVmaW5lIFJF
R19SREkgICAgICAgICA4Cj4gKyNkZWZpbmUgUkVHX1JTSSAgICAgICAgIDkKPiArI2RlZmluZSBS
RUdfUkJQICAgICAgICAgMTAKPiArI2RlZmluZSBSRUdfUkJYICAgICAgICAgMTEKPiArI2RlZmlu
ZSBSRUdfUkRYICAgICAgICAgMTIKPiArI2RlZmluZSBSRUdfUkFYICAgICAgICAgMTMKPiArI2Rl
ZmluZSBSRUdfUkNYICAgICAgICAgMTQKPiArI2RlZmluZSBSRUdfUlNQICAgICAgICAgMTUKPiAr
I2RlZmluZSBSRUdfUklQICAgICAgICAgMTYKPiArI2RlZmluZSBSRUdfRUZMICAgICAgICAgMTcK
PiArI2RlZmluZSBSRUdfQ1NHU0ZTICAgICAgMTgKPiArI2RlZmluZSBSRUdfRVJSICAgICAgICAg
MTkKPiArI2RlZmluZSBSRUdfVFJBUE5PICAgICAgMjAKPiArI2RlZmluZSBSRUdfT0xETUFTSyAg
ICAgMjEKPiArI2RlZmluZSBSRUdfQ1IyICAgICAgICAgMjIKPiArI2VuZGlmCj4gKwo+ICsjaWYg
ZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKPiArdHlwZWRlZiBs
b25nIGxvbmcgZ3JlZ190LCBncmVnc2V0X3RbMjNdOwo+ICt0eXBlZGVmIHN0cnVjdCBfZnBzdGF0
ZSB7Cj4gKwl1bnNpZ25lZCBzaG9ydCBjd2QsIHN3ZCwgZnR3LCBmb3A7Cj4gKwl1bnNpZ25lZCBs
b25nIGxvbmcgcmlwLCByZHA7Cj4gKwl1bnNpZ25lZCBteGNzciwgbXhjcl9tYXNrOwo+ICsJc3Ry
dWN0IHsKPiArCQl1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XSwgZXhwb25lbnQsIHBhZGRp
bmdbM107Cj4gKwl9IF9zdFs4XTsKPiArCXN0cnVjdCB7Cj4gKwkJdW5zaWduZWQgZWxlbWVudFs0
XTsKPiArCX0gX3htbVsxNl07Cj4gKwl1bnNpZ25lZCBwYWRkaW5nWzI0XTsKPiArfSAqZnByZWdz
ZXRfdDsKPiArc3RydWN0IHNpZ2NvbnRleHQgewo+ICsJdW5zaWduZWQgbG9uZyByOCwgcjksIHIx
MCwgcjExLCByMTIsIHIxMywgcjE0LCByMTU7Cj4gKwl1bnNpZ25lZCBsb25nIHJkaSwgcnNpLCBy
YnAsIHJieCwgcmR4LCByYXgsIHJjeCwgcnNwLCByaXAsIGVmbGFnczsKPiArCXVuc2lnbmVkIHNo
b3J0IGNzLCBncywgZnMsIF9fcGFkMDsKPiArCXVuc2lnbmVkIGxvbmcgZXJyLCB0cmFwbm8sIG9s
ZG1hc2ssIGNyMjsKPiArCXN0cnVjdCBfZnBzdGF0ZSAqZnBzdGF0ZTsKPiArCXVuc2lnbmVkIGxv
bmcgX19yZXNlcnZlZDFbOF07Cj4gK307Cj4gK3R5cGVkZWYgc3RydWN0IHsKPiArCWdyZWdzZXRf
dCBncmVnczsKPiArCWZwcmVnc2V0X3QgZnByZWdzOwo+ICsJdW5zaWduZWQgbG9uZyBsb25nIF9f
cmVzZXJ2ZWQxWzhdOwo+ICt9IG1jb250ZXh0X3Q7Cj4gKyNlbHNlCj4gK3R5cGVkZWYgc3RydWN0
IHsKPiArCXVuc2lnbmVkIGxvbmcgX19zcGFjZVszMl07Cj4gK30gbWNvbnRleHRfdDsKPiArI2Vu
ZGlmCj4gKwo+ICtzdHJ1Y3Qgc2lnYWx0c3RhY2sgewo+ICsJdm9pZCAqc3Nfc3A7Cj4gKwlpbnQg
c3NfZmxhZ3M7Cj4gKwlzaXplX3Qgc3Nfc2l6ZTsKPiArfTsKPiArCj4gK3R5cGVkZWYgc3RydWN0
IF9fdWNvbnRleHQgewo+ICsJdW5zaWduZWQgbG9uZyB1Y19mbGFnczsKPiArCXN0cnVjdCBfX3Vj
b250ZXh0ICp1Y19saW5rOwo+ICsJc3RhY2tfdCB1Y19zdGFjazsKPiArCW1jb250ZXh0X3QgdWNf
bWNvbnRleHQ7Cj4gKwlzaWdzZXRfdCB1Y19zaWdtYXNrOwo+ICsJdW5zaWduZWQgbG9uZyBfX2Zw
cmVnc19tZW1bNjRdOwo+ICt9IHVjb250ZXh0X3Q7Cj4gKwo+ICsjZGVmaW5lIFNBX05PQ0xEU1RP
UCAgMQo+ICsjZGVmaW5lIFNBX05PQ0xEV0FJVCAgMgo+ICsjZGVmaW5lIFNBX1NJR0lORk8gICAg
NAo+ICsjZGVmaW5lIFNBX09OU1RBQ0sgICAgMHgwODAwMDAwMAo+ICsjZGVmaW5lIFNBX1JFU1RB
UlQgICAgMHgxMDAwMDAwMAo+ICsjZGVmaW5lIFNBX05PREVGRVIgICAgMHg0MDAwMDAwMAo+ICsj
ZGVmaW5lIFNBX1JFU0VUSEFORCAgMHg4MDAwMDAwMAo+ICsjZGVmaW5lIFNBX1JFU1RPUkVSICAg
MHgwNDAwMDAwMAo+ICsKPiArI2VuZGlmCj4gKwo+ICsjZGVmaW5lIFNJR0hVUCAgICAxCj4gKyNk
ZWZpbmUgU0lHSU5UICAgIDIKPiArI2RlZmluZSBTSUdRVUlUICAgMwo+ICsjZGVmaW5lIFNJR0lM
TCAgICA0Cj4gKyNkZWZpbmUgU0lHVFJBUCAgIDUKPiArI2RlZmluZSBTSUdBQlJUICAgNgo+ICsj
ZGVmaW5lIFNJR0lPVCAgICBTSUdBQlJUCj4gKyNkZWZpbmUgU0lHQlVTICAgIDcKPiArI2RlZmlu
ZSBTSUdGUEUgICAgOAo+ICsjZGVmaW5lIFNJR0tJTEwgICA5Cj4gKyNkZWZpbmUgU0lHVVNSMSAg
IDEwCj4gKyNkZWZpbmUgU0lHU0VHViAgIDExCj4gKyNkZWZpbmUgU0lHVVNSMiAgIDEyCj4gKyNk
ZWZpbmUgU0lHUElQRSAgIDEzCj4gKyNkZWZpbmUgU0lHQUxSTSAgIDE0Cj4gKyNkZWZpbmUgU0lH
VEVSTSAgIDE1Cj4gKyNkZWZpbmUgU0lHU1RLRkxUIDE2Cj4gKyNkZWZpbmUgU0lHQ0hMRCAgIDE3
Cj4gKyNkZWZpbmUgU0lHQ09OVCAgIDE4Cj4gKyNkZWZpbmUgU0lHU1RPUCAgIDE5Cj4gKyNkZWZp
bmUgU0lHVFNUUCAgIDIwCj4gKyNkZWZpbmUgU0lHVFRJTiAgIDIxCj4gKyNkZWZpbmUgU0lHVFRP
VSAgIDIyCj4gKyNkZWZpbmUgU0lHVVJHICAgIDIzCj4gKyNkZWZpbmUgU0lHWENQVSAgIDI0Cj4g
KyNkZWZpbmUgU0lHWEZTWiAgIDI1Cj4gKyNkZWZpbmUgU0lHVlRBTFJNIDI2Cj4gKyNkZWZpbmUg
U0lHUFJPRiAgIDI3Cj4gKyNkZWZpbmUgU0lHV0lOQ0ggIDI4Cj4gKyNkZWZpbmUgU0lHSU8gICAg
IDI5Cj4gKyNkZWZpbmUgU0lHUE9MTCAgIDI5Cj4gKyNkZWZpbmUgU0lHUFdSICAgIDMwCj4gKyNk
ZWZpbmUgU0lHU1lTICAgIDMxCj4gKyNkZWZpbmUgU0lHVU5VU0VEIFNJR1NZUwo+ICsKPiArI2Rl
ZmluZSBfTlNJRyA2NQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 10:31:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 10:31:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GxL-00049z-4d; Mon, 09 Sep 2019 10:31:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7GxJ-00049t-SJ
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 10:31:33 +0000
X-Inumbo-ID: fdf04634-d2ec-11e9-978d-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fdf04634-d2ec-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 10:31:33 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id t16so13227975wra.6
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 03:31:33 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=Ai81E5IwHwUsjrAZTS2SR6cEhPq3vF4Fc6ctUlltnvk=;
 b=sEcL69Ms01f46zbV+raPlye1vKe/s/KOW7Kv1OK4tQxhNmSEZzFY/9NNwmncu0teR+
 yqO1YxYGeV0iRdDsoXVvjM2v7pBOM6mhKBlvQfTzeWTsQ/Z3SBY6DQ8U6PlUFTPV8d0T
 yI+s12l+emwRXO6z321tMp4NfSASD8b0s0pRluuJbeU8YT4VjaGZkxeVa+udQamdw/7u
 peVE0GniU00hYydnGBKrl65+hgCU+9QNnosNhHrLJLVB2pjtybk3CwO9a7XDBarKBnUw
 DrKyDAS5cI5rRt1bCdji7mX6ieeA0x78uzwnSbYLrCyobevxer9qZyHQDPLP/n19JqPJ
 s0GQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=Ai81E5IwHwUsjrAZTS2SR6cEhPq3vF4Fc6ctUlltnvk=;
 b=ccVlFisbCjztYGpa8nNcWhnu4Hmxyme6PMUQd9SRVtJlEh+wPLPOsRulana4/N4fug
 npakIF66vh6REp03DmYABIcYnf6mka4aUYeiguMnycG2VdxbXhqZxfv79E7R1Wc2FxvM
 t6calISI9GPaJZ6SRbk+iN+u7XT16ZHsH3hHe9Qtndtralem4XTCWnzs3VeuKzcAkUNq
 nxqQagZL7lMi1o0cAOHJFujN6V4y8VxLaFiQx1gdkPLPXLJMsw+UWvThmLKyXhynpr8l
 NkTE6oXUZPL9/DGIXdMteRfqwQnOrtJUujpazHPg/J3Lnp1dxx3IWDwNrwi0eQHCm+hl
 8KFQ==
X-Gm-Message-State: APjAAAVmxMy5BS0t5hPH05m/JsOAdZE+WAPBAltL4FGmthgw7bZCgkNh
 nRteEfBVLHoJ3JVpFdZ6x2xOFFsx
X-Google-Smtp-Source: APXvYqyA7820k6vc2CA3bfJj41NiylqCVsEBg3jRiFbkQupnrSbcvpB7KmBEUerXF05+ApGGpiwIeA==
X-Received: by 2002:adf:ed42:: with SMTP id u2mr18987645wro.330.1568025092064; 
 Mon, 09 Sep 2019 03:31:32 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.103])
 by smtp.gmail.com with ESMTPSA id v6sm21734238wma.24.2019.09.09.03.31.31
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 03:31:31 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
 <20190904102538.16320-4-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <e0c7b17c-d1ca-7c06-b044-70a81c57f7ed@gmail.com>
Date: Mon, 9 Sep 2019 13:31:31 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190904102538.16320-4-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 3/4] ucontext.h: Import
 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5LzQv
MTkgMToyNSBQTSwgQ2hhcmFsYW1wb3MgTWFpbmFzIHdyb3RlOgo+IENvcGllZCBhcyBpcyBmcm9t
IHRoZSBvZmZpY2lhbCBtdXNsIGdpdCBtaXJyb3IKPiBnaXQ6Ly9naXQubXVzbC1saWJjLm9yZy9t
dXNsLCBjb21taXQgNmZjYjQ0MGQuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFp
bmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pgo+IC0tLQo+ICBtdXNsLWltcG9ydGVk
L2luY2x1ZGUvdWNvbnRleHQuaCB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMSBm
aWxlIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG11c2wt
aW1wb3J0ZWQvaW5jbHVkZS91Y29udGV4dC5oCj4gCj4gZGlmZiAtLWdpdCBhL211c2wtaW1wb3J0
ZWQvaW5jbHVkZS91Y29udGV4dC5oIGIvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmgK
PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjNiYjc3NmUKPiAtLS0gL2Rl
di9udWxsCj4gKysrIGIvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vjb250ZXh0LmgKPiBAQCAtMCww
ICsxLDI1IEBACj4gKyNpZm5kZWYgX1VDT05URVhUX0gKPiArI2RlZmluZSBfVUNPTlRFWFRfSAo+
ICsjaWZkZWYgX19jcGx1c3BsdXMKPiArZXh0ZXJuICJDIiB7Cj4gKyNlbmRpZgo+ICsKPiArI2lu
Y2x1ZGUgPGZlYXR1cmVzLmg+Cj4gKwo+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gKwo+ICsjaWYg
ZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKPiArI2RlZmluZSBO
R1JFRyAoc2l6ZW9mKGdyZWdzZXRfdCkvc2l6ZW9mKGdyZWdfdCkpCj4gKyNlbmRpZgo+ICsKPiAr
c3RydWN0IF9fdWNvbnRleHQ7Cj4gKwo+ICtpbnQgIGdldGNvbnRleHQoc3RydWN0IF9fdWNvbnRl
eHQgKik7Cj4gK3ZvaWQgbWFrZWNvbnRleHQoc3RydWN0IF9fdWNvbnRleHQgKiwgdm9pZCAoKiko
dm9pZCksIGludCwgLi4uKTsKPiAraW50ICBzZXRjb250ZXh0KGNvbnN0IHN0cnVjdCBfX3Vjb250
ZXh0ICopOwo+ICtpbnQgIHN3YXBjb250ZXh0KHN0cnVjdCBfX3Vjb250ZXh0ICosIGNvbnN0IHN0
cnVjdCBfX3Vjb250ZXh0ICopOwo+ICsKPiArI2lmZGVmIF9fY3BsdXNwbHVzCj4gK30KPiArI2Vu
ZGlmCj4gKyNlbmRpZgo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 10:31:46 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 10:31:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GxW-0004Ao-6e; Mon, 09 Sep 2019 10:31:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7GxV-0004Ai-HP
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 10:31:45 +0000
X-Inumbo-ID: 04f8ecba-d2ed-11e9-978d-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 04f8ecba-d2ed-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 10:31:44 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id c10so13215907wmc.0
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 03:31:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=uqMDlFiMt3yGXZqy74J0eEuUMwqVa6IY70kpgVK2694=;
 b=txI7Qf4SZmyu+DQVHJg4NRd5MbBQWAgnSbZtMoxjj2xVt+KsxZg0j8YgHTTAPuDANl
 L04dwaTJgP7A7ZNBqHEFyDW9256ZMbBS3c5RUS2IEqsaF2UBLFUogODi5yKpib/Avsos
 HLK4Fa1ICpesaMtMujbwDZYexyAHllbJ103zYMJ0TBC42z9e2gFfeea9zDJgmpYrnX8o
 2+9NKM1jZiO2mYK152dc3gQhsVahk1Pi9zv0FCVVwTirCPdcWTmScPqnOz26ARM+ziJT
 aAvZuKelNYn7Rr75dXgRklKZF3DZoG3HK7qbMJjD4JdEFvZ+5QlAg77FGOGyrY6aYL8l
 2YIA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=uqMDlFiMt3yGXZqy74J0eEuUMwqVa6IY70kpgVK2694=;
 b=kyhOEchibSUvjiDOAlvPmevJ0imb9MpcYOH5+Qfz3ybmgB5ZDW1pVtJq/iculH/tuR
 58H2niK8uMy1qCYH1hVnKdtHlrzo/llKwuPJhAfBc29152LMDBAi1Pv49BWn+pTEFd3w
 c2xfk2fmEN7QA/rwnYiKE79ZcBBdy8kE97JISw4eslbSUdY6oqUSdfqqhx4A0BcCF0qO
 aWE7uRc1w8z336a0mvMV1obj2DRnpqnxITuTDoN5rOSgBkZ+UARsKfbZMGQLrS5BTCOt
 iYEtXuzGSubE4X2hbOURJaivQEM0dJ38DvzKHGMAH3QxxG+J69tZSKVRpA6mgdM1y4//
 bG1g==
X-Gm-Message-State: APjAAAXqgHsbo9lmj1g0V2joowfXjiEIYkUmfEC5iRu89FfvsPx9JsIb
 zDZEoU+jULBZQQZ+dKluozbMiqrx
X-Google-Smtp-Source: APXvYqztWL1XcrasU0CSpMWskseH9bbOT+D1Z4mz4eg/khXfcIcwCHd4HP6KO6SGTgtREVOlZmrsGA==
X-Received: by 2002:a7b:c651:: with SMTP id q17mr17806897wmk.13.1568025103996; 
 Mon, 09 Sep 2019 03:31:43 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.103])
 by smtp.gmail.com with ESMTPSA id s12sm19456819wra.82.2019.09.09.03.31.43
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 03:31:43 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
 <20190904102538.16320-5-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <bc998969-8242-b1c4-a813-bd60a82f887c@gmail.com>
Date: Mon, 9 Sep 2019 13:31:43 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190904102538.16320-5-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 4/4] ucontext.h: Adapt to
 unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5LzQv
MTkgMToyNSBQTSwgQ2hhcmFsYW1wb3MgTWFpbmFzIHdyb3RlOgo+IENvbW1lbnQgb3V0IGZlYXR1
cmVzLmggYW5kIGluY2x1ZGUgYml0cy9zaWduYWwuaCB3aGljaCBkZWZpbmVzIHN0cnVjdAo+IHVj
b250ZXh0X3QuICAKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJh
bGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Cj4gLS0tCj4gIG11c2wtaW1wb3J0ZWQvaW5jbHVkZS91
Y29udGV4dC5oIHwgMyArKy0KPiAgMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBk
ZWxldGlvbigtKQo+IAo+IGRpZmYgLS1naXQgYS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWNvbnRl
eHQuaCBiL211c2wtaW1wb3J0ZWQvaW5jbHVkZS91Y29udGV4dC5oCj4gaW5kZXggM2JiNzc2ZS4u
NzYwYzY4MCAxMDA2NDQKPiAtLS0gYS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWNvbnRleHQuaAo+
ICsrKyBiL211c2wtaW1wb3J0ZWQvaW5jbHVkZS91Y29udGV4dC5oCj4gQEAgLTQsOSArNCwxMCBA
QAo+ICBleHRlcm4gIkMiIHsKPiAgI2VuZGlmCj4gIAo+IC0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4K
PiArLyogVE9ETyAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4qLwo+ICAKPiAgI2luY2x1ZGUgPHNpZ25h
bC5oPgo+ICsjaW5jbHVkZSA8Yml0cy9zaWduYWwuaD4KPiAgCj4gICNpZiBkZWZpbmVkKF9HTlVf
U09VUkNFKSB8fCBkZWZpbmVkKF9CU0RfU09VUkNFKQo+ICAjZGVmaW5lIE5HUkVHIChzaXplb2Yo
Z3JlZ3NldF90KS9zaXplb2YoZ3JlZ190KSkKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 10:32:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 10:32:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7GyP-0004CU-BA; Mon, 09 Sep 2019 10:32:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7GyO-0004CP-Ld
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 10:32:40 +0000
X-Inumbo-ID: 25dbb5c0-d2ed-11e9-978d-bc764e2007e4
Received: from mail-wm1-x344.google.com (unknown [2a00:1450:4864:20::344])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 25dbb5c0-d2ed-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 10:32:40 +0000 (UTC)
Received: by mail-wm1-x344.google.com with SMTP id q12so14027716wmj.4
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 03:32:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=AML3IBEj/3W7RW+ALPrpCd05afPi8f87JttkuL04yJY=;
 b=NGgc/fzZxl1Ede0EXDf4BLMobw9zVVY+MshynYsQBYEGflHu2HO41BIyoMBz0dVxgL
 zVweH5gWBHfizWkRc0uCqGrAVuDYtjR4wMjRoHBI/EqO8iZMU1lcqPpihvVGOAMXmCVg
 i3jHBvrNfw5QEN09RbilLZlCqGhd95iYXbUFsGHlq6S37xNZc/wj3Ie4YVIjg8BEyxZG
 ybAitV7+84OVGhtbLw6X9+M4YQ70Y20x48QNZDrp/rXcrWL+1ntfpvFZ9xSSRjiqKYGB
 U9SF1pg7DaJut75tPIx1OLGvJKDrjS2dZy7yxGD5zxjmQr6Hq5GEh7Un+WvEGmCFIA7h
 8kWQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=AML3IBEj/3W7RW+ALPrpCd05afPi8f87JttkuL04yJY=;
 b=dHY8h9icIXlAlEkIISOwVw3/HdX2EKW+nvStej4j08tGtRqsGCIPFUS/uS8y+A+CO0
 insDY0BIuNIUXPnZv0+QdrS68a4IDHdLAmMBcNWaNha8AcAtdOTDbRKg9J/A7aHwOmNW
 HQH0hQ316TH2aD52/TfyL8F21qk0ay70+o2281ziFBcHFzYFgky0vwcOcxGgIkkh84nL
 XI1j+K+N3fqq1BA8T+R/WoraOpcUdqNspvLQptQP6c+970Dd7IXbEf+sqpHrvQSaxfxg
 PJYucpxy8frAyJtrU86Tu+BdqNf5gO0HIjNp8m2rCleYwphK12ANF9Hze/81Ye76QZK6
 36NA==
X-Gm-Message-State: APjAAAXOaqwVlnimJNo2LAf4UbvObDwlIXcB+io3FUHeVmZ+cSVBRVRK
 jIxm4LH41y+3SDliTF2h8NRlnMxx
X-Google-Smtp-Source: APXvYqwYSZVBwOq/4H0FCaO72bTHAXbvVZ4f0GOPoT0/2VjfHAIA/v+MiXEZWfEHuWd8j3NTn+Y2aA==
X-Received: by 2002:a1c:e709:: with SMTP id e9mr18527951wmh.65.1568025159165; 
 Mon, 09 Sep 2019 03:32:39 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.103])
 by smtp.gmail.com with ESMTPSA id x6sm22543169wmf.38.2019.09.09.03.32.38
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 03:32:38 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190904102538.16320-1-Charalampos.Mainas@neclab.eu>
 <20190904102538.16320-3-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <0c64761b-ea00-ca03-d28a-4a2b66702759@gmail.com>
Date: Mon, 9 Sep 2019 13:32:37 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190904102538.16320-3-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 2/4] bits/signal.h: Adapt
 to unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SSB3aWxsIGRpc2FibGUgdGhlIGRlY2xhcmF0aW9uIHVzaW5nIGAjaWYgMGAgaW5zdGVhZCBvZiBD
KysgY29tbWVudHMgb24KdXBzdHJlYW1pbmcuCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNv
c3Rpbi5sdXB1QGNzLnB1Yi5ybz4KCk9uIDkvNC8xOSAxOjI1IFBNLCBDaGFyYWxhbXBvcyBNYWlu
YXMgd3JvdGU6Cj4gc3RydWN0IHNpZ2FsdHN0YWNrIGlzIGFscmVhZHkgZGVmaW5lZCBmcm9tIG5l
d2xpYidzIHN5cy9zaWduYWwuaCB3aGljaAo+IGlzIGluY2x1ZGVkIGZyb20gdWNvbnRleHQuaC4g
VG8gYXZvaWQgcmVkaW5pdGlvbiBlcnJvciB3aGlsZSBjb21waWxpbmcsIAo+IHN0cnVjdCBzaWdh
bHRzdGFjayBpcyBjb21tZW50ZWQgb3V0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9z
IE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KPiAtLS0KPiAgbXVzbC1pbXBv
cnRlZC9hcmNoL3g4Nl82NC9iaXRzL3NpZ25hbC5oIHwgMTAgKysrKystLS0tLQo+ICAxIGZpbGUg
Y2hhbmdlZCwgNSBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQg
YS9tdXNsLWltcG9ydGVkL2FyY2gveDg2XzY0L2JpdHMvc2lnbmFsLmggYi9tdXNsLWltcG9ydGVk
L2FyY2gveDg2XzY0L2JpdHMvc2lnbmFsLmgKPiBpbmRleCAyMGNiZjRhLi5mM2I5ZWZkIDEwMDY0
NAo+IC0tLSBhL211c2wtaW1wb3J0ZWQvYXJjaC94ODZfNjQvYml0cy9zaWduYWwuaAo+ICsrKyBi
L211c2wtaW1wb3J0ZWQvYXJjaC94ODZfNjQvYml0cy9zaWduYWwuaAo+IEBAIC02MCwxMSArNjAs
MTEgQEAgdHlwZWRlZiBzdHJ1Y3Qgewo+ICB9IG1jb250ZXh0X3Q7Cj4gICNlbmRpZgo+ICAKPiAt
c3RydWN0IHNpZ2FsdHN0YWNrIHsKPiAtCXZvaWQgKnNzX3NwOwo+IC0JaW50IHNzX2ZsYWdzOwo+
IC0Jc2l6ZV90IHNzX3NpemU7Cj4gLX07Cj4gKy8vc3RydWN0IHNpZ2FsdHN0YWNrIHsKPiArLy8J
dm9pZCAqc3Nfc3A7Cj4gKy8vCWludCBzc19mbGFnczsKPiArLy8Jc2l6ZV90IHNzX3NpemU7Cj4g
Ky8vfTsKPiAgCj4gIHR5cGVkZWYgc3RydWN0IF9fdWNvbnRleHQgewo+ICAJdW5zaWduZWQgbG9u
ZyB1Y19mbGFnczsKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 10:41:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 10:41:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7H6l-0004wK-1L; Mon, 09 Sep 2019 10:41:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=RPW9=XE=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i7H6j-0004wF-UK
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 10:41:17 +0000
X-Inumbo-ID: 59539c82-d2ee-11e9-b76c-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 59539c82-d2ee-11e9-b76c-bc764e2007e4;
 Mon, 09 Sep 2019 10:41:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 23216105671;
 Mon,  9 Sep 2019 12:41:15 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id xJsxHWHwWGE4; Mon,  9 Sep 2019 12:41:15 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 007151047B8;
 Mon,  9 Sep 2019 12:41:15 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 12:41:14 +0200
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20fdad09-9cd4-2482-644c-571077fcdb2a@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <24b79a4a-42b5-84a2-ed03-00bc232efbc7@neclab.eu>
Date: Mon, 9 Sep 2019 12:41:13 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20fdad09-9cd4-2482-644c-571077fcdb2a@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 0/6] Move VFS initialization
 to ukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMDguMDkuMTkgMTc6MDUsIENvc3RpbiBMdXB1IHdyb3RlOgo+IEhpIFNpbW9uLAo+IAo+IFdl
IGNsZWFybHkgbmVlZCB0byBjb21lIHVwIHdpdGggYSBzb2x1dGlvbiBmb3IgaW5pdGlhbGl6aW5n
IGZpbGVzeXN0ZW1zLgo+IEhvd2V2ZXIsIHRoZXNlIHNlcmllcyBoYXZlIHRvIGJlIHJld29ya2Vk
Ogo+IDEuIFlvdSBzaG91bGQgYWRkIHlvdXIgY2hhbmdlcyBvbmNlID4gMi4gV2Ugc2hvdWxkIGFk
ZCB0aGlzIGluaXQgdGhpbmcgaW4gdmZzY29yZSBpbnN0ZWFkIG9mIGJsb2F0aW5nIHRoZQo+IGJv
b3QuYyBjb2RlLgoKSSBvcmlnaW5hbGx5IGNob3NlIGxpYnVrYm9vdCBiZWNhdXNlIG9mIG91ciBj
dXJyZW50IGJvb3QgbG9naWMuIFRoZSAKcmVhc29uIGlzIHRoYXQgd2Ugc2hvdWxkIG5vdCB1c2Ug
YW55IHByZS1pbml0IG9yIGluaXQgdGFibGUgZW50cmllcyBmb3IgCm91ciBzeXN0ZW0gaW5pdGlh
bGl6YXRpb24uIFdlIHNob3VsZCB0cmVhdCB0aGUgdGFibGVzIGFzIHJlc2VydmVkIHRvIHRoZSAK
VW5pa2VybmVsKC1pemVkKSBwcm9ncmFtIGFuZCBpdHMgbGlicmFyaWVzLiBTbyBmYXIgd2UgdXNl
ZCB0aGVtIGZvciB0aGUgCmNhc2Ugd2hlbiB3ZSBuZWVkIG1lbW9yeSBhbmQvb3Igc2NoZWR1bGlu
ZyBzdXBwb3J0LiBIb3dldmVyLCB3aGVuZXZlciB3ZSAKcG9ydCBleGlzdGluZyBzdGFuZGFyZCB1
c2VyIHNwYWNlIHByb2dyYW1zIChlLmcuLCBMaW51eCBwcm9ncmFtKSB0byBvdXIgCmVudmlyb25t
ZW50LCB3ZSBhY3R1YWxseSBzaG91bGQgYmUgYXdhcmUgdGhhdCBpdHMgY29uc3RydWN0b3IgYW5k
IGluaXQgCmZ1bmN0aW9ucyBpbnRlcmFjdCBhbHJlYWR5IHdpdGggb3Igc3lzdGVtIGNvbXBvbmVu
dHMuIEVmZmVjdGl2ZWx5LCB0aGV5IApzaG91bGQgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgYXQgdGhh
dCBwb2ludC4gSSBleHBlY3QgdGhhdCBtb3N0IAppbnRlcmFjdGlvbnMgYXJlIGRvbmUgd2l0aCB0
aGUgVkZTLgpPdmVyYWxsIG91ciBjdXJyZW50IGJvb3Qgc3RhZ2VzIHNob3VsZCBsb29rIGxpa2Ug
dGhpczoKCiAgMCkgRW50cnkgYW5kIGVhcmx5IHBsYXRmb3JtIGluaXQgKHBsYXRmb3JtIGxpYnJh
cnkpCiAgMSkgVW5pa3JhZnQgY29uc3RydWN0b3JzCiAgICAgQ2Fubm90IHVzZSB1a2FsbG9jIG9y
IHVrc2NoZWQgYmVjYXVzZSBpdCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0LgogIDIpIFVuaWtyYWZ0
IGluaXQKICAgICAyLjEpIHVrYWxsb2MKICAgICAyLjIpIHVrc2NoZWQKICAgICAyLjMpIFZGUwog
ICAgIDIuNCkgTmV0d29ya2luZwogICAgIDIuNSkgZXRjLgogIDMpIFByb2dyYW0gY29uc3RydWN0
b3JzCiAgICAgVGhlc2UgYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2UgZmluZCBpbiB0aGUgcHJlLWlu
aXQgYW5kIGluaXQKICAgICBzZWN0aW9ucy4KICA0KSBFbnRlciBtYWluKCkgb2YgdGhlIHByb2dy
YW0KCkV2ZXJ5dGhpbmcgb2YgcG9pbnQgMiBpcyBjdXJyZW50bHkgaGFyZC1jb2RlZCB0byBsaWJ1
a2Jvb3QuIFNvIGl0IG1ha2VzIApjdXJyZW50bHkgc2Vuc2UgdG8gcHV0IG91ciBWRlMgaW5pdGlh
bGl6YXRpb24gdGhlcmUgaW5zdGVhZCBvZiAKcmVnaXN0ZXJpbmcgaXQgdG8gdGhlIHByZS1pbml0
IG9yIGluaXQgc2VjdGlvbi4gSW4gZmFjdCwgSSBhZ3JlZSB0aGF0IHdlIApuZWVkIHRvIGludHJv
ZHVjZSBhICJVbmlrcmFmdCBpbml0IHRhYmxlIiAoc2ltaWxhciB0byBVbmlrcmFmdCAKY29uc3Ry
dWN0b3JzKSB3aGVyZSBvdXIgc3lzdGVtIGxpYnJhcmllcyBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZl
cyB0by4gQXMgCmludGVybWVkaWF0ZSBzb2x1dGlvbiBJIGNvdWxkIGludHJvZHVjZSBhIHZmc2Nv
cmVfaW5pdCgpIGZ1bmN0aW9uIHRoYXQgCmlzIGNhbGxlZCBmcm9tIGxpYnVrYm9vdCwgc2ltaWxh
ciB0byB3aGF0IHdlIGRpZCB3aXRoIGx3aXAuIFRoaXMgd2F5LCB3ZSAKa2VlcCB0aGUgVkZTIGlu
aXQgY29kZSBpbiB2ZnNjb3JlLgoKSG93ZXZlciwgSSBhbHNvIGhhZCBhIHNlY29uZCByZWFzb24g
Zm9yIHB1dHRpbmcgdGhlIFZGUyBpbml0IGNvZGUgdG8gCmxpYnVrYm9vdDogSSBoYWQgaW4gbWlu
ZCB0aGF0IHdlIGNvdWxkIGFkZCBpbml0cmQgc3VwcG9ydCB3aXRoIGFub3RoZXIgCnBhdGNoIHNl
cmllcyByZWxhdGl2ZWx5IGVhc3k6CiAgMSkgTW91bnQgcmFtZnMgZm9yIC8KICAyKSBTZWFyY2gg
Zm9yIGFuIGFyY2hpdmUgaW4gaW5pdHJkIHNlY3Rpb24KICAzKSBEZWNvbXByZXNzIGFyY2hpdmUg
dG8gLwogIDQpIEFkZCBpbml0cmQgbWVtb3J5IHJlZ2lvbiB0byBpbml0aWFsaXplZCB1a2FsbG9j
CiAgICAgYmVjYXVzZSB3ZSBkbyBub3QgbmVlZCBpdCBhbnltb3JlLgoKQSBkZWNvbXByZXNzaW5n
IGFsZ29yaXRobSB0aGF0IGNyZWF0ZXMgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGZyb20gdGhlIAph
cmNoaXZlIChlLmcuLCBiYXNlZCBvbiB6bGliKSBpcyB0aGUgb25seSBtaXNzaW5nIHBpZWNlLiBO
by4gNCByZXF1aXJlcyAKa25vd2xlZGdlIGFib3V0IHdoaWNoIGFsbG9jYXRvciB0byBhZGQgbWVt
b3J5IHJlZ2lvbnMgdG8uIFRoaXMgd291bGQgYmUgCmN1cnJlbnRseSBtdWNoIGVhc2llciB3aXRo
IGxpYnVrYm9vdCB0aGF0IGNvdWxkIGRpY3RhdGUgdGhpcy4gSG93ZXZlciwgCndlIGNhbiBhbHNv
IGZpbmQgYW5vdGhlciBzb2x1dGlvbiBmb3IgZG9pbmcgdGhpcyB3aGVuIGltcGxlbWVudGluZyAK
aW5pdHJkIHN1cHBvcnQgYXMgcGFydCBvZiB2ZnNjb3JlLi4uCgpXaGF0IGRvIHlvdSB0aGluaz8K
Cj4gCj4gQ2hlZXJzLAo+IENvc3Rpbgo+IAo+IE9uIDkvNi8xOSAzOjAzIFBNLCBTaW1vbiBLdWVu
emVyIHdyb3RlOgo+PiBUaGlzIHBhdGNoIHNlcmllcyBtb3ZlcyBtb3VudGluZyBmaWxlc3lzdGVt
cyBhcyBwYXJ0IG9mIHRoZSBVbmlrcmFmdAo+PiBpbml0aWFsaXphdGlvbiB0byBsaWIvdWtib290
LiBUaGlzIHdpbGwgbGF0ZXIgc2ltcGxpZnkgYWRkaW5nIG1vcmUgZmVhdHVyZXMKPj4gdG8gdGhl
IGF1dG9tb3VudCBjb2RlIGJlY2F1c2UgaXQgaXMgYXQgYSBzaW5nbGUgcGxhY2UgKGUuZy4sIGxv
YWRpbmcgaW5pdHJkCj4+IGFzIHJvb3QgZmlsZXN5c3RlbSwgZW5hYmxlIG1vdW50aW5nIDlwZnMg
c2hhcmVzIGFzIHJvb3QgbW91bnRwb2ludCkuCj4+Cj4+IFByZXZpb3VzbHksIHRoZSBvcHRpb24g
dG8gYXV0b21hdGljYWxseSBtb3VudCBhIHJhbWZzIHRvIC8gd2FzIGhpZGRlbi4KPj4gSXQgb25s
eSBhcHBlYXJlZCB3aGVuIGRldmZzIHdhcyBzZWxlY3RlZC4gVGhpcyBzZXJpZXMgaXMgYWxzbyBt
YWtpbmcgZGV2ZnMKPj4gYW5kIHJhbWZzIHBlcm1hbmVudGx5IHZpc2libGUgaW4gdGhlIG1lbnUg
dG8gc2ltcGxpZnkgdGhlIHVzYWdlLgo+Pgo+PiBDaGFuZ2VzIHNpbmNlIHYxOgo+PiAgIC0gQWRv
cHQgdG8gbGF0ZXN0IHN0YWdpbmcgc3RhdGUKPj4gICAtIEFkZCBhYmlsaXR5IHRvIGNvbmZpZ3Vy
ZSByb290IGZzIHdpdGgga2VybmVsIHBhcmFtZXRlcnMKPj4KPj4gU2ltb24gS3VlbnplciAoNik6
Cj4+ICAgIGxpYi91a2Jvb3Q6IEFwcGxpY2F0aW9uIGNvbnN0cnVjdG9ycyByaWdodCBiZWZvcmUg
Y2FsbGluZyBhcHBsaWNhdGlvbgo+PiAgICBsaWIvZGV2ZnMsIGxpYi91a2Jvb3Q6IE1vdmUgb3B0
aW9uIHRvIGF1dG9tYXRpY2FsbHkgbW91bnQgcm9vdCB0bwo+PiAgICAgIGxpYnVrYm9vdAo+PiAg
ICBsaWIvdWtib290OiBkZXZmcyBhdXRvbW91bnQgb3B0aW9uCj4+ICAgIGxpYi9yYW1mczogQ29u
ZmlnLnVrOiBVc2Ugc2VsZWN0IGZvciBkZXBlbmRlbmN5Cj4+ICAgIGxpYi91a3N3cmFuZDogQ2xl
YW4tdXA6IGRldmZzIG5vZGVzIGFyZSBpbmRlcGVuZGVudCBvZiBNV0MgYWxnb3JpdGhtCj4+ICAg
IGxpYi91a2Jvb3Q6IFJvb3QgZmlsZXN5c3RlbSBhcyBsaWJyYXJ5IHBhcmFtZXRlcgo+Pgo+PiAg
IGxpYi9kZXZmcy9Db25maWcudWsgICAgICAgICAgICAgICB8ICAgOCArLS0KPj4gICBsaWIvZGV2
ZnMvZGV2ZnNfdm5vcHMuYyAgICAgICAgICAgfCAgMjUgLS0tLS0tLS0KPj4gICBsaWIvcmFtZnMv
Q29uZmlnLnVrICAgICAgICAgICAgICAgfCAgIDIgKy0KPj4gICBsaWIvdWtib290L0NvbmZpZy51
ayAgICAgICAgICAgICAgfCAgMjkgKysrKysrKysrCj4+ICAgbGliL3VrYm9vdC9NYWtlZmlsZS51
ayAgICAgICAgICAgIHwgICAzICsKPj4gICBsaWIvdWtib290L2Jvb3QuYyAgICAgICAgICAgICAg
ICAgfCAxMDIgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCj4+ICAgbGliL3Vrc3dyYW5k
L0NvbmZpZy51ayAgICAgICAgICAgIHwgICA1ICstCj4+ICAgbGliL3Vrc3dyYW5kL01ha2VmaWxl
LnVrICAgICAgICAgIHwgICA2ICstCj4+ICAgbGliL3Vrc3dyYW5kL3ttd2NfZGV2LmMgPT4gZGV2
LmN9IHwgIDI2ICsrKysrLS0tCj4+ICAgOSBmaWxlcyBjaGFuZ2VkLCAxMzQgaW5zZXJ0aW9ucygr
KSwgNzIgZGVsZXRpb25zKC0pCj4+ICAgcmVuYW1lIGxpYi91a3N3cmFuZC97bXdjX2Rldi5jID0+
IGRldi5jfSAoODMlKQo+PgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 11:25:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 11:25:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Hn5-0000fO-Si; Mon, 09 Sep 2019 11:25:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=RPW9=XE=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i7Hn4-0000fC-5D
 for minios-devel@lists.xenproject.org; Mon, 09 Sep 2019 11:25:02 +0000
X-Inumbo-ID: 752d8fa2-d2f4-11e9-ac0a-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 752d8fa2-d2f4-11e9-ac0a-12813bfff9fa;
 Mon, 09 Sep 2019 11:24:59 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id A16FA105671;
 Mon,  9 Sep 2019 13:24:58 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id cPC8UK6O9ybw; Mon,  9 Sep 2019 13:24:58 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 7D5FF1047B8;
 Mon,  9 Sep 2019 13:24:58 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 13:24:57 +0200
To: Felipe Huici <Felipe.Huici@neclab.eu>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>,
 =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190829170501.23587-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <db496425-4c1b-e564-9e24-f8a5c9ba7fe4@neclab.eu>
 <92B9F4DA-293D-4CC8-916E-E36E673BD9B9@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <25057869-4555-f4e3-7604-447f39a1977c@neclab.eu>
Date: Mon, 9 Sep 2019 13:24:57 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <92B9F4DA-293D-4CC8-916E-E36E673BD9B9@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/1] lib/vfscore: Add backspace
 support to the stdio
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

CgpPbiAwNS4wOS4xOSAxNTowOSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IEhpIFZsYWQsCj4gCj4g
UGxlYXNlIHNlZSBhIHNtYWxsIGNvbW1lbnQgaW5saW5lLgo+IAo+IFRoYW5rcywKPiAKPiAtLSBG
ZWxpcGUKPiAKPiAgICAgIFN1YmplY3Q6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVCBQQVRDSCAx
LzFdIGxpYi92ZnNjb3JlOiBBZGQgYmFja3NwYWNlCj4gICAgICBzdXBwb3J0IHRvIHRoZSBzdGRp
bwo+ICAgICAgRGF0ZTogVGh1LCAyOSBBdWcgMjAxOSAxNzowNTowOSArMDAwMAo+ICAgICAgRnJv
bTogVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPgo+ICAgICAgVG86IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnIDxtaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVuLm9yZz4KPiAgICAgIENDOiBzaW1vbi5rdWVuemVyQG5lY2xhYi5ldSA8
c2ltb24ua3VlbnplckBuZWNsYWIuZXU+LCBWbGFkLUFuZHJlaQo+ICAgICAgQsSCRE9JVSAoNzg2
OTIpIDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPiwKPiAgICAgIGNvc3Rpbi5s
dXB1QGNzLnB1Yi5ybyA8Y29zdGluLmx1cHVAY3MucHViLnJvPgo+ICAgICAgCj4gICAgICBUaGlz
IHBhdGNoIGFkZHMgYmFzaWMgYmFja3NwYWNlIHN1cHBvcnQgdG8gdGhlIHN0ZGlvLiBUaGlzIHBh
dGNoIGRvZXMKPiAgICAgIG5vdCBoYW5kbGUgdGhlIGN1cnNvciBkaWZmZXJlbnRseSBmb3IgdGhl
IFx0LiBSZW1vdmluZyB0aGUgbGFzdAo+ICAgICAgY2hhcmFjdGVyIGlzIGRvbmUgYnkgb3V0cHV0
aW5nIFxiIFxiIHRvIHRoZSBjb25zb2xlLgo+ICAgICAgCj4gICAgICBTaWduZWQtb2ZmLWJ5OiBW
bGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Cj4g
ICAgICAtLS0KPiAgICAgICAgbGliL3Zmc2NvcmUvc3RkaW8uYyB8IDE2ICsrKysrKysrKysrKyst
LS0KPiAgICAgICAgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z
KC0pCj4gICAgICAKPiAgICAgIGRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9zdGRpby5jIGIvbGli
L3Zmc2NvcmUvc3RkaW8uYwo+ICAgICAgaW5kZXggMDgzMzUzNjcuLmYyMzQwMWZmIDEwMDY0NAo+
ICAgICAgLS0tIGEvbGliL3Zmc2NvcmUvc3RkaW8uYwo+ICAgICAgKysrIGIvbGliL3Zmc2NvcmUv
c3RkaW8uYwo+ICAgICAgQEAgLTg1LDkgKzg1LDE5IEBAIHN0YXRpYyBpbnQgX19yZWFkX2ZuKHZv
aWQgKmRzdCwgdm9pZCAqc3JjIF9fdW51c2VkLAo+ICAgICAgc2l6ZV90ICpjbnQpCj4gICAgICAg
IAkJKihidWYgLSAxKSA9ICooYnVmIC0gMSkgPT0gJ1xyJyA/Cj4gICAgICAgIAkJCQkJJ1xuJyA6
ICooYnVmIC0gMSk7Cj4gICAgICAgIC0JCS8qIEVjaG8gdGhlIGlucHV0ICovCj4gICAgICAtCQl1
a3BsYXRfY291dGsoYnVmIC0gYnl0ZXNfcmVhZCwgYnl0ZXNfcmVhZCk7Cj4gICAgICAtCQlieXRl
c190b3RhbCArPSBieXRlc19yZWFkOwo+ICAgICAgKwkJaWYgKCooYnVmIC0gMSkgPT0gJ1wxNzcn
KSB7Cj4gCj4gQ291bGQgeW91IHBsZWFzZSBhZGQgYSBzbWFsbCBjb21tZW50IHRvIGV4cGxhaW4g
d2h5IHlvdSdyZSB1c2luZyB0aGUgMTc3IGNvZGU/CgpIZXksCgpJIGp1c3QgZG91YmxlLWNoZWNr
ZWQ6IFwxNzcgaXMgdGhlIERFTEVURSBjb250cm9sIGNoYXJhY3RlciB3aGljaCAKdG90YWxseSBt
YWtlcyBzZW5zZS4gSSB3aWxsIHB1dCBhIGNvbW1lbnQgd2hpbGUgdXBzdHJlYW1pbmcuIFRoYW5r
cyBhIGxvdC4KClJldmlld2VkLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xh
Yi5ldT4KCj4gCj4gICAgICArCQkJLyogSWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGJ5dGUgKi8K
PiAgICAgICsJCQlpZiAoYnVmIC0gMSAhPSBkc3QpIHsKPiAgICAgICsJCQkJdWtwbGF0X2NvdXRr
KCJcYiBcYiIsIDMpOwo+ICAgICAgKwkJCQlidWYgLT0gMTsKPiAgICAgICsJCQkJYnl0ZXNfdG90
YWwgLT0gMTsKPiAgICAgICsJCQl9Cj4gICAgICArCQkJYnVmIC09IDE7Cj4gICAgICArCQl9IGVs
c2Ugewo+ICAgICAgKwkJCS8qIEVjaG8gdGhlIGlucHV0ICovCj4gICAgICArCQkJdWtwbGF0X2Nv
dXRrKGJ1ZiAtIGJ5dGVzX3JlYWQsIGJ5dGVzX3JlYWQpOwo+ICAgICAgKwkJCWJ5dGVzX3RvdGFs
ICs9IGJ5dGVzX3JlYWQ7Cj4gICAgICArCQl9Cj4gICAgICAgICAJfSB3aGlsZSAoYnl0ZXNfdG90
YWwgPCBjb3VudCAmJiAqKGJ1ZiAtIDEpICE9ICdcbicKPiAgICAgICAgCQkJJiYgKihidWYgLSAx
KSAhPSBWRU9GKTsKPiAgICAgIC0tCj4gICAgICAyLjIwLjEKPiAgICAgIAo+ICAgICAgCj4gICAg
ICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ICAgICAg
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdAo+ICAgICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCj4gICAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVsCj4gICAgICAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwo+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsCj4gCgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 11:29:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 11:29:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Hrq-0000nN-A6; Mon, 09 Sep 2019 11:29:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=RPW9=XE=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i7Hro-0000nI-KU
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 11:29:56 +0000
X-Inumbo-ID: 2556c628-d2f5-11e9-ac0a-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2556c628-d2f5-11e9-ac0a-12813bfff9fa;
 Mon, 09 Sep 2019 11:29:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 5BF4D105671;
 Mon,  9 Sep 2019 13:29:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id jMto2I5ygwC3; Mon,  9 Sep 2019 13:29:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 37E101047B8;
 Mon,  9 Sep 2019 13:29:54 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 13:29:53 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190908070103.21674-1-costin.lupu@cs.pub.ro>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <58c2a51d-b61a-8d14-d41c-fd8f87c2da31@neclab.eu>
Date: Mon, 9 Sep 2019 13:29:52 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190908070103.21674-1-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2] plat: Configure stack size
 page order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGV5IENvc3RpbiwKCndoYXQgYWJvdXQgcGxhdC94ZW4veDg2L2FyY2hfZXZlbnRzLmMgYW5kIHBs
YXQveGVuL3g4Ni90cmFwcy5jPyBJIHRob3VnaCAKeW91IHdhbnRlZCB0byBmaXggdGhlbSB3aXRo
IHRoaXMgcGF0Y2gsIHRvby4KQXQgbGVhc3QgaW4geW91ciBjb21taXQgbWVzc2FnZSB5b3Ugc2hv
dWxkIG1lbnRpb24gdGhhdCBBcm0zMiBYZW4gaXMgbm90IAphZG9wdGVkIGJ5IHRoaXMgcGF0Y2gu
CgpUaGFua3MgYSBsb3QsCgpTaW1vbgoKT24gMDguMDkuMTkgMDk6MDEsIENvc3RpbiBMdXB1IHdy
b3RlOgo+IFRoaXMgcGF0Y2ggYWRkcyBhIGNvbmZpZyBvcHRpb24gZm9yIGNvbmZpZ3VyaW5nIHRo
ZSBzdGFjayBzaXplIHBhZ2Ugb3JkZXIuIFdlCj4gbmVlZCB0aGlzIGZvciBzdXBwb3J0aW5nIGxh
cmdlIHN0YWNrcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVA
Y3MucHViLnJvPgo+IC0tLQo+ICAgYXJjaC9Db25maWcudWsgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgOSArKysrKysrKysKPiAgIGFyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMu
aCAgICB8IDIgKy0KPiAgIGFyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oICB8
IDIgKy0KPiAgIGFyY2gveDg2L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaCB8IDIgKy0K
PiAgIDQgZmlsZXMgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAK
PiBkaWZmIC0tZ2l0IGEvYXJjaC9Db25maWcudWsgYi9hcmNoL0NvbmZpZy51awo+IGluZGV4IDE5
MGM3NWU2Li5kMDkxZGNiZCAxMDA2NDQKPiAtLS0gYS9hcmNoL0NvbmZpZy51awo+ICsrKyBiL2Fy
Y2gvQ29uZmlnLnVrCj4gQEAgLTI0LDMgKzI0LDEyIEBAIGVuZGlmCj4gICBpZiAoQVJDSF9BUk1f
NjQpCj4gICAJc291cmNlICJhcmNoL2FybS9hcm02NC9Db25maWcudWsiCj4gICBlbmRpZgo+ICsK
PiArY29uZmlnIFNUQUNLX1NJWkVfUEFHRV9PUkRFUgo+ICsJaW50Cj4gKwlwcm9tcHQgIlN0YWNr
IHNpemUgcGFnZSBvcmRlciIKPiArCWRlZmF1bHQgNAo+ICsJaGVscAo+ICsJCUluZGlyZWN0bHkg
Y29uZmlndXJlcyB0aGUgc3RhY2sgc2l6ZSBieSBjaGFuZ2luZyB0aGUgc3RhY2sgc2l6ZSBwYWdl
Cj4gKwkJb3JkZXIuIFN0YWNrIHNpemUgaXMgZXF1YWwgd2l0aCAyXm9yZGVyICogcGFnZSBzaXpl
IChlLmcuIDRLQikuCj4gKwkJT25seSBjaGFuZ2UgdGhpcyBpZiB5b3Uga25vdyB3aGF0IHlvdSdy
ZSBkb2luZy4KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0
cy5oIGIvYXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4gaW5kZXggMDg1NzYx
YzMuLmUyMjk4ZDZiIDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9s
aW1pdHMuaAo+ICsrKyBiL2FyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+IEBA
IC0zOSw3ICszOSw3IEBACj4gICAjZGVmaW5lIF9fUEFHRV9NQVNLCQkofigoX19QQUdFX1NJWkUp
IC0gMSkpCj4gICAjZW5kaWYKPiAgIAo+IC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVS
CTIKPiArI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUglDT05GSUdfU1RBQ0tfU0laRV9Q
QUdFX09SREVSCj4gICAjZGVmaW5lIF9fU1RBQ0tfU0laRQkJKF9fUEFHRV9TSVpFICogKDEgPDwg
X19TVEFDS19TSVpFX1BBR0VfT1JERVIpKQo+ICAgCj4gICAjZGVmaW5lIF9fV09SRFNJWkUJCTMy
Cj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oIGIv
YXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPiBpbmRleCBjZWMwNTY0MS4u
ZmI3MGYyYmEgMTAwNjQ0Cj4gLS0tIGEvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGlt
aXRzLmgKPiArKysgYi9hcmNoL2FybS9hcm02NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+IEBA
IC00MCw3ICs0MCw3IEBACj4gICAjZGVmaW5lIF9fUEFHRV9NQVNLCQkofigoX19QQUdFX1NJWkUp
IC0gMSkpCj4gICAjZW5kaWYKPiAgIAo+IC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVS
CTQKPiArI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUglDT05GSUdfU1RBQ0tfU0laRV9Q
QUdFX09SREVSCj4gICAjZGVmaW5lIF9fU1RBQ0tfU0laRQkoX19QQUdFX1NJWkUgKiAoMSA8PCBf
X1NUQUNLX1NJWkVfUEFHRV9PUkRFUikpCj4gICAjZGVmaW5lIF9fU1RBQ0tfQUxJR05fU0laRQkx
Ngo+ICAgCj4gZGlmZiAtLWdpdCBhL2FyY2gveDg2L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1p
dHMuaCBiL2FyY2gveDg2L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+IGluZGV4IGE5
NjliZDE3Li4yMTgxNDA0NCAxMDA2NDQKPiAtLS0gYS9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91
ay9hc20vbGltaXRzLmgKPiArKysgYi9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGlt
aXRzLmgKPiBAQCAtMzksNyArMzksNyBAQAo+ICAgI2RlZmluZSBfX1BBR0VfTUFTSwkJKH4oKF9f
UEFHRV9TSVpFKSAtIDEpKQo+ICAgI2VuZGlmCj4gICAKPiAtI2RlZmluZSBfX1NUQUNLX1NJWkVf
UEFHRV9PUkRFUgk0Cj4gKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVIJQ09ORklHX1NU
QUNLX1NJWkVfUEFHRV9PUkRFUgo+ICAgI2RlZmluZSBfX1NUQUNLX1NJWkUJCShfX1BBR0VfU0la
RSAqICgxIDw8IF9fU1RBQ0tfU0laRV9QQUdFX09SREVSKSkKPiAgIAo+ICAgI2RlZmluZSBfX1dP
UkRTSVpFCQk2NAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 11:53:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 11:53:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7IEK-0003Wl-Tc; Mon, 09 Sep 2019 11:53:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7IEJ-0003Wg-U5
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 11:53:11 +0000
X-Inumbo-ID: 64e2ca78-d2f8-11e9-a337-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 64e2ca78-d2f8-11e9-a337-bc764e2007e4;
 Mon, 09 Sep 2019 11:53:10 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id t16so13502331wra.6
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 04:53:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=HK64umu090qEBE14x011AZUgIh0Ii78s1R2JAaPW0HA=;
 b=UNEnoOVpBDZXA2tbmFs/MO9mi8xRt2mQYVxmcSey7V2NpzGUzV3UQ7kaeJckEX78zF
 sKYrXibWUfRRrLqt5aClwsKggmGPwXVWGVgY9cbT8wWpDjc23yT+57DS10gdE8/pLERG
 s6o1shlk0pFYfFk8J39i+AQdiQxuUuk24acrI4V4uIfsjku/YPRIZZqRpte6RtWgUpWo
 ixDn29HsI3LwiWZ0XWNQr5LSCuvrAYMfxO5VCi4mIdnwkSRYs3UajhzLpHyiAuixjm+H
 98UUNQseh18EeHbctMIV74ev4SV9zaDBJG52DQGmo0zzeLPGMjVdXojtVoIP28g5LL2D
 RdjQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=HK64umu090qEBE14x011AZUgIh0Ii78s1R2JAaPW0HA=;
 b=QIwgo5G+3oZ1dPWEmhYaBtLI/PkjMx1a2/MVqW0xEXAGKKHhqV6o4hlULemXlX0qJh
 50H8dofqTm2DzeRoTamMuYUdzLWeApwOXK+3pLxtFZG5zmDdNc+Lr9XeS5QbyHE+dTGr
 VHa9RuSnZgBiGPdxvDPhclZWsHBAsCRvxXKGpuJt7hXSnzHR7cRjgPYnyaw35yYya8NI
 l4R5cCRm/vPr0uwI7qpfaXfsWnMgbnzt7Djvoh/sIcWUEGJVj9jCwmIYiV951vayoh49
 kxPX+PXUD4YWK7N0FbJTVFzc8GGKZ4vgzTp/y7tBmOR5exNALc/24AGkq19C+lrkeV0J
 siTg==
X-Gm-Message-State: APjAAAVENLnWFS4O7dlq82E63QH1awZ4f65SiveC43rhiLZEKxyM5PTn
 DfJtknSc7xyCYTqYyIQ6I3f2YNTl
X-Google-Smtp-Source: APXvYqym/IKDmOXMLcoHV2UTcY0TeFN8R8l5+OzbJJoTetXTxJ34FkHOsf1TGY1J525MXLSuXtkyeg==
X-Received: by 2002:adf:e390:: with SMTP id e16mr19187662wrm.29.1568029989258; 
 Mon, 09 Sep 2019 04:53:09 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id j26sm30624926wrd.2.2019.09.09.04.53.08
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 04:53:08 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190908070103.21674-1-costin.lupu@cs.pub.ro>
 <58c2a51d-b61a-8d14-d41c-fd8f87c2da31@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <58148785-905f-846f-86a4-d317ea600b1e@gmail.com>
Date: Mon, 9 Sep 2019 14:53:07 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <58c2a51d-b61a-8d14-d41c-fd8f87c2da31@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2] plat: Configure stack size
 page order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpQbGVhc2UgcmVhZCBteSBwcmV2aW91cyBlbWFpbHMgbW9yZSBjYXJlZnVsbHku
IEkgc2FpZCB0aGF0IGluCnBsYXQveGVuL3g4Ni9hcmNoX2V2ZW50cy5jIHRoZSBzdGFjayBhbHJl
YWR5IGhhcyBTVEFDS19TSVpFIGJ5dGVzLCBJCmRvbid0IHNlZSB3aGVyZSBpcyB0aGUgcHJvYmxl
bS4KCkFuZCBmb3IgcGxhdC94ZW4veDg2L3RyYXBzLmMgSSBzYWlkIHRoYXQgdGhlcmUgaXMgYnVn
LCBidXQgdGhhdCBidWcgaXMKb3V0IG9mIHNjb3BlIGZvciB0aGlzIHBhdGNoLgoKQW5kIEkgYWxz
byBzYWlkIHRoYXQgdGhpcyBwYXRjaCBhbHNvIHRvdWNoZXMgQXJtMzIgKHNlZQphcmNoL2FybS9h
cm0vaW5jbHVkZS91ay9hc20vbGltaXRzLmgpLgoKQ2hlZXJzLApDb3N0aW4KCk9uIDkvOS8xOSAy
OjI5IFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+IEhleSBDb3N0aW4sCj4gCj4gd2hhdCBhYm91
dCBwbGF0L3hlbi94ODYvYXJjaF9ldmVudHMuYyBhbmQgcGxhdC94ZW4veDg2L3RyYXBzLmM/IEkg
dGhvdWdoCj4geW91IHdhbnRlZCB0byBmaXggdGhlbSB3aXRoIHRoaXMgcGF0Y2gsIHRvby4KPiBB
dCBsZWFzdCBpbiB5b3VyIGNvbW1pdCBtZXNzYWdlIHlvdSBzaG91bGQgbWVudGlvbiB0aGF0IEFy
bTMyIFhlbiBpcyBub3QKPiBhZG9wdGVkIGJ5IHRoaXMgcGF0Y2guCj4gCj4gVGhhbmtzIGEgbG90
LAo+IAo+IFNpbW9uCj4gCj4gT24gMDguMDkuMTkgMDk6MDEsIENvc3RpbiBMdXB1IHdyb3RlOgo+
PiBUaGlzIHBhdGNoIGFkZHMgYSBjb25maWcgb3B0aW9uIGZvciBjb25maWd1cmluZyB0aGUgc3Rh
Y2sgc2l6ZSBwYWdlCj4+IG9yZGVyLiBXZQo+PiBuZWVkIHRoaXMgZm9yIHN1cHBvcnRpbmcgbGFy
Z2Ugc3RhY2tzLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVA
Y3MucHViLnJvPgo+PiAtLS0KPj4gwqAgYXJjaC9Db25maWcudWvCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IDkgKysrKysrKysrCj4+IMKgIGFyY2gv
YXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaMKgwqDCoCB8IDIgKy0KPj4gwqAgYXJjaC9h
cm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmjCoCB8IDIgKy0KPj4gwqAgYXJjaC94ODYv
eDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oIHwgMiArLQo+PiDCoCA0IGZpbGVzIGNoYW5n
ZWQsIDEyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9h
cmNoL0NvbmZpZy51ayBiL2FyY2gvQ29uZmlnLnVrCj4+IGluZGV4IDE5MGM3NWU2Li5kMDkxZGNi
ZCAxMDA2NDQKPj4gLS0tIGEvYXJjaC9Db25maWcudWsKPj4gKysrIGIvYXJjaC9Db25maWcudWsK
Pj4gQEAgLTI0LDMgKzI0LDEyIEBAIGVuZGlmCj4+IMKgIGlmIChBUkNIX0FSTV82NCkKPj4gwqDC
oMKgwqDCoCBzb3VyY2UgImFyY2gvYXJtL2FybTY0L0NvbmZpZy51ayIKPj4gwqAgZW5kaWYKPj4g
Kwo+PiArY29uZmlnIFNUQUNLX1NJWkVfUEFHRV9PUkRFUgo+PiArwqDCoMKgIGludAo+PiArwqDC
oMKgIHByb21wdCAiU3RhY2sgc2l6ZSBwYWdlIG9yZGVyIgo+PiArwqDCoMKgIGRlZmF1bHQgNAo+
PiArwqDCoMKgIGhlbHAKPj4gK8KgwqDCoMKgwqDCoMKgIEluZGlyZWN0bHkgY29uZmlndXJlcyB0
aGUgc3RhY2sgc2l6ZSBieSBjaGFuZ2luZyB0aGUgc3RhY2sKPj4gc2l6ZSBwYWdlCj4+ICvCoMKg
wqDCoMKgwqDCoCBvcmRlci4gU3RhY2sgc2l6ZSBpcyBlcXVhbCB3aXRoIDJeb3JkZXIgKiBwYWdl
IHNpemUgKGUuZy4gNEtCKS4KPj4gK8KgwqDCoMKgwqDCoMKgIE9ubHkgY2hhbmdlIHRoaXMgaWYg
eW91IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuCj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9hcm0v
aW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gYi9hcmNoL2FybS9hcm0vaW5jbHVkZS91ay9hc20v
bGltaXRzLmgKPj4gaW5kZXggMDg1NzYxYzMuLmUyMjk4ZDZiIDEwMDY0NAo+PiAtLS0gYS9hcmNo
L2FybS9hcm0vaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gKysrIGIvYXJjaC9hcm0vYXJtL2lu
Y2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+IEBAIC0zOSw3ICszOSw3IEBACj4+IMKgICNkZWZpbmUg
X19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUpIC0gMSkpCj4+IMKgICNl
bmRpZgo+PiDCoCAtI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDCoCAyCj4+ICsj
ZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIENPTkZJR19TVEFDS19TSVpFX1BB
R0VfT1JERVIKPj4gwqAgI2RlZmluZSBfX1NUQUNLX1NJWkXCoMKgwqDCoMKgwqDCoCAoX19QQUdF
X1NJWkUgKiAoMSA8PAo+PiBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUikpCj4+IMKgIMKgICNkZWZp
bmUgX19XT1JEU0laRcKgwqDCoMKgwqDCoMKgIDMyCj4+IGRpZmYgLS1naXQgYS9hcmNoL2FybS9h
cm02NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+PiBiL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUv
dWsvYXNtL2xpbWl0cy5oCj4+IGluZGV4IGNlYzA1NjQxLi5mYjcwZjJiYSAxMDA2NDQKPj4gLS0t
IGEvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gKysrIGIvYXJjaC9h
cm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gQEAgLTQwLDcgKzQwLDcgQEAKPj4g
wqAgI2RlZmluZSBfX1BBR0VfTUFTS8KgwqDCoMKgwqDCoMKgICh+KChfX1BBR0VfU0laRSkgLSAx
KSkKPj4gwqAgI2VuZGlmCj4+IMKgIC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDC
oMKgIDQKPj4gKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLCoMKgwqAgQ09ORklHX1NU
QUNLX1NJWkVfUEFHRV9PUkRFUgo+PiDCoCAjZGVmaW5lIF9fU1RBQ0tfU0laRcKgwqDCoCAoX19Q
QUdFX1NJWkUgKiAoMSA8PCBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUikpCj4+IMKgICNkZWZpbmUg
X19TVEFDS19BTElHTl9TSVpFwqDCoMKgIDE2Cj4+IMKgIGRpZmYgLS1naXQgYS9hcmNoL3g4Ni94
ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gYi9hcmNoL3g4Ni94ODZfNjQvaW5jbHVk
ZS91ay9hc20vbGltaXRzLmgKPj4gaW5kZXggYTk2OWJkMTcuLjIxODE0MDQ0IDEwMDY0NAo+PiAt
LS0gYS9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4gKysrIGIvYXJj
aC94ODYveDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+IEBAIC0zOSw3ICszOSw3IEBA
Cj4+IMKgICNkZWZpbmUgX19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUp
IC0gMSkpCj4+IMKgICNlbmRpZgo+PiDCoCAtI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRF
UsKgwqDCoCA0Cj4+ICsjZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIENPTkZJ
R19TVEFDS19TSVpFX1BBR0VfT1JERVIKPj4gwqAgI2RlZmluZSBfX1NUQUNLX1NJWkXCoMKgwqDC
oMKgwqDCoCAoX19QQUdFX1NJWkUgKiAoMSA8PAo+PiBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUikp
Cj4+IMKgIMKgICNkZWZpbmUgX19XT1JEU0laRcKgwqDCoMKgwqDCoMKgIDY0Cj4+Cj4gCj4gX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Cj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4gaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 11:56:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 11:56:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7IHT-0003as-HH; Mon, 09 Sep 2019 11:56:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7IHS-0003ah-1j
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 11:56:26 +0000
X-Inumbo-ID: d90c93de-d2f8-11e9-b299-bc764e2007e4
Received: from mail-wm1-x344.google.com (unknown [2a00:1450:4864:20::344])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d90c93de-d2f8-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 11:56:25 +0000 (UTC)
Received: by mail-wm1-x344.google.com with SMTP id c10so13516629wmc.0
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 04:56:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=cPpP5cm3nkDIOskiELV27q3DHRt9esL8XhdXVq/6e78=;
 b=ag1AgAya5uf3U2rGi5X/6W+7c8Sbwa4eBCGr+ZfOPjmLyPMH0DDJJ/z5Q1kgpvKDuT
 482ZKryssw+nrCR7dzty1ugmgWXDqRzArEairZ/PzlCRzbdMcl5R5aIAlr1aO0+ttg0O
 0bU/ALzvqQlvEX3nk6P9UfvUnCdrkRpSsmwvfLAz+SsFCW32inMZQelGB39EzPZ+GaQU
 GoyJFZk37jBkfLUDXAFajzErtC3XPCs54XwEVzQKfQn9XLRlQerS9Ej7C3cxZh/Smfio
 1A6feDGHFbDylDM9RrujxSbvfr/NuUNlAjvR5y6XQf5mj8NttWzYOm4gb0peEvAlSjUw
 K71g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=cPpP5cm3nkDIOskiELV27q3DHRt9esL8XhdXVq/6e78=;
 b=oMsNUdpaDZH8kEWbu5zkh+HiuSDRv9a6o4D/G7AFmpcqwQ5CzDjo0evxHeWqVA6vjV
 vOK96e1OgNyLyUyV4cVpJ8yTdAlbkb52iFn7UG5rNoOkSZR0q3lTMY5K/mcgOomZdypm
 TDNIeoN3wGUdKjxd7g1gAZDB9Sb2rFGcLiHZDYJj2D2ue+Ie0/cx2gTBhJaMyq0EaFvh
 7d6rRCgAH8M40dazbf8ZdKf2Nei89gHe+MZxAAzGDmehW9D5PIYUcDZgFXQoJOeSLESV
 5IT0qfGEpLcoyyXkyRTU5EypdYTrCndZ5uI90MSVUiaTh+Q6o2tOJnq3UfhFgIGEb5lN
 hoUA==
X-Gm-Message-State: APjAAAVUu+zsshjhyZMQILmV5QkLYf+tuuqvIwwgIl45V2Z2SofQyox8
 YB6r/BIggVbRsJPu9Q5enaY=
X-Google-Smtp-Source: APXvYqwi+alv+UQtFdr3pxf/umgbXE1pqiXe01SZHTOb8V1og5czuSHbcveE6FFSJ9Biqq5UbCmb7g==
X-Received: by 2002:a7b:cb53:: with SMTP id v19mr389154wmj.0.1568030184335;
 Mon, 09 Sep 2019 04:56:24 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id j22sm28713176wre.45.2019.09.09.04.56.23
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 04:56:23 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20fdad09-9cd4-2482-644c-571077fcdb2a@gmail.com>
 <24b79a4a-42b5-84a2-ed03-00bc232efbc7@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <414aded7-67fa-b1ae-a3ba-bebd2b5891ca@gmail.com>
Date: Mon, 9 Sep 2019 14:56:22 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <24b79a4a-42b5-84a2-ed03-00bc232efbc7@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 0/6] Move VFS initialization
 to ukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sCgpPbiA5LzkvMTkgMTo0MSBQTSwgU2ltb24gS3VlbnplciB3cm90ZToKPiBPbiAw
OC4wOS4xOSAxNzowNSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+IEhpIFNpbW9uLAo+Pgo+PiBXZSBj
bGVhcmx5IG5lZWQgdG8gY29tZSB1cCB3aXRoIGEgc29sdXRpb24gZm9yIGluaXRpYWxpemluZyBm
aWxlc3lzdGVtcy4KPj4gSG93ZXZlciwgdGhlc2Ugc2VyaWVzIGhhdmUgdG8gYmUgcmV3b3JrZWQ6
Cj4+IDEuIFlvdSBzaG91bGQgYWRkIHlvdXIgY2hhbmdlcyBvbmNlID4gMi4gV2Ugc2hvdWxkIGFk
ZCB0aGlzIGluaXQgdGhpbmcKPj4gaW4gdmZzY29yZSBpbnN0ZWFkIG9mIGJsb2F0aW5nIHRoZQo+
PiBib290LmMgY29kZS4KPiAKPiBJIG9yaWdpbmFsbHkgY2hvc2UgbGlidWtib290IGJlY2F1c2Ug
b2Ygb3VyIGN1cnJlbnQgYm9vdCBsb2dpYy4gVGhlCj4gcmVhc29uIGlzIHRoYXQgd2Ugc2hvdWxk
IG5vdCB1c2UgYW55IHByZS1pbml0IG9yIGluaXQgdGFibGUgZW50cmllcyBmb3IKPiBvdXIgc3lz
dGVtIGluaXRpYWxpemF0aW9uLiBXZSBzaG91bGQgdHJlYXQgdGhlIHRhYmxlcyBhcyByZXNlcnZl
ZCB0byB0aGUKPiBVbmlrZXJuZWwoLWl6ZWQpIHByb2dyYW0gYW5kIGl0cyBsaWJyYXJpZXMuIFNv
IGZhciB3ZSB1c2VkIHRoZW0gZm9yIHRoZQo+IGNhc2Ugd2hlbiB3ZSBuZWVkIG1lbW9yeSBhbmQv
b3Igc2NoZWR1bGluZyBzdXBwb3J0LiBIb3dldmVyLCB3aGVuZXZlciB3ZQo+IHBvcnQgZXhpc3Rp
bmcgc3RhbmRhcmQgdXNlciBzcGFjZSBwcm9ncmFtcyAoZS5nLiwgTGludXggcHJvZ3JhbSkgdG8g
b3VyCj4gZW52aXJvbm1lbnQsIHdlIGFjdHVhbGx5IHNob3VsZCBiZSBhd2FyZSB0aGF0IGl0cyBj
b25zdHJ1Y3RvciBhbmQgaW5pdAo+IGZ1bmN0aW9ucyBpbnRlcmFjdCBhbHJlYWR5IHdpdGggb3Ig
c3lzdGVtIGNvbXBvbmVudHMuIEVmZmVjdGl2ZWx5LCB0aGV5Cj4gc2hvdWxkIGJlIGZ1bGx5IGlu
aXRpYWxpemVkIGF0IHRoYXQgcG9pbnQuIEkgZXhwZWN0IHRoYXQgbW9zdAo+IGludGVyYWN0aW9u
cyBhcmUgZG9uZSB3aXRoIHRoZSBWRlMuCj4gT3ZlcmFsbCBvdXIgY3VycmVudCBib290IHN0YWdl
cyBzaG91bGQgbG9vayBsaWtlIHRoaXM6Cj4gCj4gwqAwKSBFbnRyeSBhbmQgZWFybHkgcGxhdGZv
cm0gaW5pdCAocGxhdGZvcm0gbGlicmFyeSkKPiDCoDEpIFVuaWtyYWZ0IGNvbnN0cnVjdG9ycwo+
IMKgwqDCoCBDYW5ub3QgdXNlIHVrYWxsb2Mgb3IgdWtzY2hlZCBiZWNhdXNlIGl0IGlzIG5vdCBp
bml0aWFsaXplZCB5ZXQuCj4gwqAyKSBVbmlrcmFmdCBpbml0Cj4gwqDCoMKgIDIuMSkgdWthbGxv
Ywo+IMKgwqDCoCAyLjIpIHVrc2NoZWQKPiDCoMKgwqAgMi4zKSBWRlMKPiDCoMKgwqAgMi40KSBO
ZXR3b3JraW5nCj4gwqDCoMKgIDIuNSkgZXRjLgo+IMKgMykgUHJvZ3JhbSBjb25zdHJ1Y3RvcnMK
PiDCoMKgwqAgVGhlc2UgYXJlIHRoZSBlbnRyaWVzIHRoYXQgd2UgZmluZCBpbiB0aGUgcHJlLWlu
aXQgYW5kIGluaXQKPiDCoMKgwqAgc2VjdGlvbnMuCj4gwqA0KSBFbnRlciBtYWluKCkgb2YgdGhl
IHByb2dyYW0KPiAKPiBFdmVyeXRoaW5nIG9mIHBvaW50IDIgaXMgY3VycmVudGx5IGhhcmQtY29k
ZWQgdG8gbGlidWtib290LiBTbyBpdCBtYWtlcwo+IGN1cnJlbnRseSBzZW5zZSB0byBwdXQgb3Vy
IFZGUyBpbml0aWFsaXphdGlvbiB0aGVyZSBpbnN0ZWFkIG9mCj4gcmVnaXN0ZXJpbmcgaXQgdG8g
dGhlIHByZS1pbml0IG9yIGluaXQgc2VjdGlvbi4gSW4gZmFjdCwgSSBhZ3JlZSB0aGF0IHdlCj4g
bmVlZCB0byBpbnRyb2R1Y2UgYSAiVW5pa3JhZnQgaW5pdCB0YWJsZSIgKHNpbWlsYXIgdG8gVW5p
a3JhZnQKPiBjb25zdHJ1Y3RvcnMpIHdoZXJlIG91ciBzeXN0ZW0gbGlicmFyaWVzIGNhbiByZWdp
c3RlciB0aGVtc2VsdmVzIHRvLiBBcwo+IGludGVybWVkaWF0ZSBzb2x1dGlvbiBJIGNvdWxkIGlu
dHJvZHVjZSBhIHZmc2NvcmVfaW5pdCgpIGZ1bmN0aW9uIHRoYXQKPiBpcyBjYWxsZWQgZnJvbSBs
aWJ1a2Jvb3QsIHNpbWlsYXIgdG8gd2hhdCB3ZSBkaWQgd2l0aCBsd2lwLiBUaGlzIHdheSwgd2UK
PiBrZWVwIHRoZSBWRlMgaW5pdCBjb2RlIGluIHZmc2NvcmUuCgpUaGF0J3MgZXhhY3RseSB3aGF0
IEkgc3VnZ2VzdGVkLCBhIHZmc2NvcmVfaW5pdCgpIGZ1bmN0aW9uIGRvaW5nIGFsbAp0aGF0IHN0
dWZmLgoKPiAKPiBIb3dldmVyLCBJIGFsc28gaGFkIGEgc2Vjb25kIHJlYXNvbiBmb3IgcHV0dGlu
ZyB0aGUgVkZTIGluaXQgY29kZSB0bwo+IGxpYnVrYm9vdDogSSBoYWQgaW4gbWluZCB0aGF0IHdl
IGNvdWxkIGFkZCBpbml0cmQgc3VwcG9ydCB3aXRoIGFub3RoZXIKPiBwYXRjaCBzZXJpZXMgcmVs
YXRpdmVseSBlYXN5Ogo+IMKgMSkgTW91bnQgcmFtZnMgZm9yIC8KPiDCoDIpIFNlYXJjaCBmb3Ig
YW4gYXJjaGl2ZSBpbiBpbml0cmQgc2VjdGlvbgo+IMKgMykgRGVjb21wcmVzcyBhcmNoaXZlIHRv
IC8KPiDCoDQpIEFkZCBpbml0cmQgbWVtb3J5IHJlZ2lvbiB0byBpbml0aWFsaXplZCB1a2FsbG9j
Cj4gwqDCoMKgIGJlY2F1c2Ugd2UgZG8gbm90IG5lZWQgaXQgYW55bW9yZS4KPiAKPiBBIGRlY29t
cHJlc3NpbmcgYWxnb3JpdGhtIHRoYXQgY3JlYXRlcyBkaXJlY3RvcmllcyBhbmQgZmlsZXMgZnJv
bSB0aGUKPiBhcmNoaXZlIChlLmcuLCBiYXNlZCBvbiB6bGliKSBpcyB0aGUgb25seSBtaXNzaW5n
IHBpZWNlLiBOby4gNCByZXF1aXJlcwo+IGtub3dsZWRnZSBhYm91dCB3aGljaCBhbGxvY2F0b3Ig
dG8gYWRkIG1lbW9yeSByZWdpb25zIHRvLiBUaGlzIHdvdWxkIGJlCj4gY3VycmVudGx5IG11Y2gg
ZWFzaWVyIHdpdGggbGlidWtib290IHRoYXQgY291bGQgZGljdGF0ZSB0aGlzLiBIb3dldmVyLAo+
IHdlIGNhbiBhbHNvIGZpbmQgYW5vdGhlciBzb2x1dGlvbiBmb3IgZG9pbmcgdGhpcyB3aGVuIGlt
cGxlbWVudGluZwo+IGluaXRyZCBzdXBwb3J0IGFzIHBhcnQgb2YgdmZzY29yZS4uLgo+IAo+IFdo
YXQgZG8geW91IHRoaW5rPwoKVGhpcyBjYW4gYmUgZG9uZSBhbHNvIGJ5IGNhbGxpbmcgZGlmZmVy
ZW50IGluaXQgZnVuY3Rpb25zIGluIHZmc2NvcmUuCkhvd2V2ZXIsIGl0J3Mgb3V0IG9mIHNjb3Bl
IGZvciBub3cuCgpDaGVlcnMsCkNvc3RpbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 12:02:09 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 12:02:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7IMy-0004RR-8b; Mon, 09 Sep 2019 12:02:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=RPW9=XE=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i7IMw-0004RM-T2
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 12:02:06 +0000
X-Inumbo-ID: a3b2d328-d2f9-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a3b2d328-d2f9-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 12:02:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 643EA10568B;
 Mon,  9 Sep 2019 14:02:04 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 95DJJnZstuDY; Mon,  9 Sep 2019 14:02:04 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 350BD10568A;
 Mon,  9 Sep 2019 14:02:04 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 14:02:03 +0200
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190908070103.21674-1-costin.lupu@cs.pub.ro>
 <58c2a51d-b61a-8d14-d41c-fd8f87c2da31@neclab.eu>
 <58148785-905f-846f-86a4-d317ea600b1e@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <edf5b4b4-96b3-2383-23b9-862e7eac2094@neclab.eu>
Date: Mon, 9 Sep 2019 14:02:03 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <58148785-905f-846f-86a4-d317ea600b1e@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2] plat: Configure stack size
 page order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T2theSwgSSB1bmRlcnN0YW5kLiBZb3UgdHJlYXQgdGhlIGlzc3VlcyBhcyBidWdzIHRoYXQgd2Ug
Zml4IGFmdGVyd2FyZHMuIApYZW4gb24gQXJtMzIgaXMgYWN0dWFsbHkgdGhlIHNhbWUga2luZCBh
cyB0aGUgeDg2IHRyYXBzIGlzc3VlLiBDYW4geW91IApwcm92aWRlIGEgZml4IGZvciB4ODYgdHJh
cHMgZGlyZWN0bHkgYWZ0ZXIgSSB1cHN0cmVhbWVkIHRoaXMgcGF0Y2g/CgpUaGFua3MsCgpTaW1v
bgoKUmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoK
T24gMDkuMDkuMTkgMTM6NTMsIENvc3RpbiBMdXB1IHdyb3RlOgo+IEhpIFNpbW9uLAo+IAo+IFBs
ZWFzZSByZWFkIG15IHByZXZpb3VzIGVtYWlscyBtb3JlIGNhcmVmdWxseS4gSSBzYWlkIHRoYXQg
aW4KPiBwbGF0L3hlbi94ODYvYXJjaF9ldmVudHMuYyB0aGUgc3RhY2sgYWxyZWFkeSBoYXMgU1RB
Q0tfU0laRSBieXRlcywgSQo+IGRvbid0IHNlZSB3aGVyZSBpcyB0aGUgcHJvYmxlbS4KPiAKPiBB
bmQgZm9yIHBsYXQveGVuL3g4Ni90cmFwcy5jIEkgc2FpZCB0aGF0IHRoZXJlIGlzIGJ1ZywgYnV0
IHRoYXQgYnVnIGlzCj4gb3V0IG9mIHNjb3BlIGZvciB0aGlzIHBhdGNoLgoKSXQgd2Fzbid0IGNs
ZWFyIHRvIG1lIHRoYXQgeW91IHdhbnQgdG8gaGF2ZSBhIHNlcGFyYXRlIHBhdGNoIHRvIGZpeCB0
aGlzIApwcm9ibGVtLiBGaW5lIHdpdGggbWUuCgo+IAo+IEFuZCBJIGFsc28gc2FpZCB0aGF0IHRo
aXMgcGF0Y2ggYWxzbyB0b3VjaGVzIEFybTMyIChzZWUKPiBhcmNoL2FybS9hcm0vaW5jbHVkZS91
ay9hc20vbGltaXRzLmgpLgo+IAoKSSB3YXMgdGFsa2luZyBhYm91dCBfWGVuXyBvbiBBcm0zMiB3
aGljaCBkb2VzIG5vdCB1c2UgU1RBQ0tfU0laRSBwcm9wZXJseS4KCj4gQ2hlZXJzLAo+IENvc3Rp
bgo+IAo+IE9uIDkvOS8xOSAyOjI5IFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+PiBIZXkgQ29z
dGluLAo+Pgo+PiB3aGF0IGFib3V0IHBsYXQveGVuL3g4Ni9hcmNoX2V2ZW50cy5jIGFuZCBwbGF0
L3hlbi94ODYvdHJhcHMuYz8gSSB0aG91Z2gKPj4geW91IHdhbnRlZCB0byBmaXggdGhlbSB3aXRo
IHRoaXMgcGF0Y2gsIHRvby4KPj4gQXQgbGVhc3QgaW4geW91ciBjb21taXQgbWVzc2FnZSB5b3Ug
c2hvdWxkIG1lbnRpb24gdGhhdCBBcm0zMiBYZW4gaXMgbm90Cj4+IGFkb3B0ZWQgYnkgdGhpcyBw
YXRjaC4KPj4KPj4gVGhhbmtzIGEgbG90LAo+Pgo+PiBTaW1vbgo+Pgo+PiBPbiAwOC4wOS4xOSAw
OTowMSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+PiBUaGlzIHBhdGNoIGFkZHMgYSBjb25maWcgb3B0
aW9uIGZvciBjb25maWd1cmluZyB0aGUgc3RhY2sgc2l6ZSBwYWdlCj4+PiBvcmRlci4gV2UKPj4+
IG5lZWQgdGhpcyBmb3Igc3VwcG9ydGluZyBsYXJnZSBzdGFja3MuCj4+Pgo+Pj4gU2lnbmVkLW9m
Zi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPj4+IC0tLQo+Pj4gIMKg
IGFyY2gvQ29uZmlnLnVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqAgfCA5ICsrKysrKysrKwo+Pj4gIMKgIGFyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2Fz
bS9saW1pdHMuaMKgwqDCoCB8IDIgKy0KPj4+ICDCoCBhcmNoL2FybS9hcm02NC9pbmNsdWRlL3Vr
L2FzbS9saW1pdHMuaMKgIHwgMiArLQo+Pj4gIMKgIGFyY2gveDg2L3g4Nl82NC9pbmNsdWRlL3Vr
L2FzbS9saW1pdHMuaCB8IDIgKy0KPj4+ICDCoCA0IGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlv
bnMoKyksIDMgZGVsZXRpb25zKC0pCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvQ29uZmlnLnVr
IGIvYXJjaC9Db25maWcudWsKPj4+IGluZGV4IDE5MGM3NWU2Li5kMDkxZGNiZCAxMDA2NDQKPj4+
IC0tLSBhL2FyY2gvQ29uZmlnLnVrCj4+PiArKysgYi9hcmNoL0NvbmZpZy51awo+Pj4gQEAgLTI0
LDMgKzI0LDEyIEBAIGVuZGlmCj4+PiAgwqAgaWYgKEFSQ0hfQVJNXzY0KQo+Pj4gIMKgwqDCoMKg
wqAgc291cmNlICJhcmNoL2FybS9hcm02NC9Db25maWcudWsiCj4+PiAgwqAgZW5kaWYKPj4+ICsK
Pj4+ICtjb25maWcgU1RBQ0tfU0laRV9QQUdFX09SREVSCj4+PiArwqDCoMKgIGludAo+Pj4gK8Kg
wqDCoCBwcm9tcHQgIlN0YWNrIHNpemUgcGFnZSBvcmRlciIKPj4+ICvCoMKgwqAgZGVmYXVsdCA0
Cj4+PiArwqDCoMKgIGhlbHAKPj4+ICvCoMKgwqDCoMKgwqDCoCBJbmRpcmVjdGx5IGNvbmZpZ3Vy
ZXMgdGhlIHN0YWNrIHNpemUgYnkgY2hhbmdpbmcgdGhlIHN0YWNrCj4+PiBzaXplIHBhZ2UKPj4+
ICvCoMKgwqDCoMKgwqDCoCBvcmRlci4gU3RhY2sgc2l6ZSBpcyBlcXVhbCB3aXRoIDJeb3JkZXIg
KiBwYWdlIHNpemUgKGUuZy4gNEtCKS4KPj4+ICvCoMKgwqDCoMKgwqDCoCBPbmx5IGNoYW5nZSB0
aGlzIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLgo+Pj4gZGlmZiAtLWdpdCBhL2FyY2gv
YXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4gYi9hcmNoL2FybS9hcm0vaW5jbHVk
ZS91ay9hc20vbGltaXRzLmgKPj4+IGluZGV4IDA4NTc2MWMzLi5lMjI5OGQ2YiAxMDA2NDQKPj4+
IC0tLSBhL2FyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4gKysrIGIvYXJj
aC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiBAQCAtMzksNyArMzksNyBAQAo+
Pj4gIMKgICNkZWZpbmUgX19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUp
IC0gMSkpCj4+PiAgwqAgI2VuZGlmCj4+PiAgwqAgLSNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0Vf
T1JERVLCoMKgwqAgMgo+Pj4gKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLCoMKgwqAg
Q09ORklHX1NUQUNLX1NJWkVfUEFHRV9PUkRFUgo+Pj4gIMKgICNkZWZpbmUgX19TVEFDS19TSVpF
wqDCoMKgwqDCoMKgwqAgKF9fUEFHRV9TSVpFICogKDEgPDwKPj4+IF9fU1RBQ0tfU0laRV9QQUdF
X09SREVSKSkKPj4+ICDCoCDCoCAjZGVmaW5lIF9fV09SRFNJWkXCoMKgwqDCoMKgwqDCoCAzMgo+
Pj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+
PiBiL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiBpbmRleCBjZWMw
NTY0MS4uZmI3MGYyYmEgMTAwNjQ0Cj4+PiAtLS0gYS9hcmNoL2FybS9hcm02NC9pbmNsdWRlL3Vr
L2FzbS9saW1pdHMuaAo+Pj4gKysrIGIvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vbGlt
aXRzLmgKPj4+IEBAIC00MCw3ICs0MCw3IEBACj4+PiAgwqAgI2RlZmluZSBfX1BBR0VfTUFTS8Kg
wqDCoMKgwqDCoMKgICh+KChfX1BBR0VfU0laRSkgLSAxKSkKPj4+ICDCoCAjZW5kaWYKPj4+ICDC
oCAtI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDCoCA0Cj4+PiArI2RlZmluZSBf
X1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDCoCBDT05GSUdfU1RBQ0tfU0laRV9QQUdFX09SREVS
Cj4+PiAgwqAgI2RlZmluZSBfX1NUQUNLX1NJWkXCoMKgwqAgKF9fUEFHRV9TSVpFICogKDEgPDwg
X19TVEFDS19TSVpFX1BBR0VfT1JERVIpKQo+Pj4gIMKgICNkZWZpbmUgX19TVEFDS19BTElHTl9T
SVpFwqDCoMKgIDE2Cj4+PiAgwqAgZGlmZiAtLWdpdCBhL2FyY2gveDg2L3g4Nl82NC9pbmNsdWRl
L3VrL2FzbS9saW1pdHMuaAo+Pj4gYi9hcmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGlt
aXRzLmgKPj4+IGluZGV4IGE5NjliZDE3Li4yMTgxNDA0NCAxMDA2NDQKPj4+IC0tLSBhL2FyY2gv
eDg2L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4gKysrIGIvYXJjaC94ODYveDg2
XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+PiBAQCAtMzksNyArMzksNyBAQAo+Pj4gIMKg
ICNkZWZpbmUgX19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUpIC0gMSkp
Cj4+PiAgwqAgI2VuZGlmCj4+PiAgwqAgLSNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLC
oMKgwqAgNAo+Pj4gKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLCoMKgwqAgQ09ORklH
X1NUQUNLX1NJWkVfUEFHRV9PUkRFUgo+Pj4gIMKgICNkZWZpbmUgX19TVEFDS19TSVpFwqDCoMKg
wqDCoMKgwqAgKF9fUEFHRV9TSVpFICogKDEgPDwKPj4+IF9fU1RBQ0tfU0laRV9QQUdFX09SREVS
KSkKPj4+ICDCoCDCoCAjZGVmaW5lIF9fV09SRFNJWkXCoMKgwqDCoMKgwqDCoCA2NAo+Pj4KPj4K
Pj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdAo+PiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKPj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 12:05:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 12:05:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7IQ2-0004UC-Hr; Mon, 09 Sep 2019 12:05:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7IQ0-0004U7-K9
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 12:05:16 +0000
X-Inumbo-ID: 1543f4fe-d2fa-11e9-b299-bc764e2007e4
Received: from mail-wr1-x443.google.com (unknown [2a00:1450:4864:20::443])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1543f4fe-d2fa-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 12:05:15 +0000 (UTC)
Received: by mail-wr1-x443.google.com with SMTP id l16so13490235wrv.12
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 05:05:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=fLlkwIPZZhoTV+aVvzACHGW6FL12yAdCNVd7DcDxY7A=;
 b=Ty48vbwPYN0L4MIo0Amw4lhdkjdky6WpbPupdiPFXSHsY5SjedqsORQ4zerzNHDSE2
 zFn7Ov+rkaw9Odzgjs+7pZC7KHU5WEGS9Xwk0/ajfXimNVlE4XsILteRCyoUg2i5b+DT
 +WS359d3+EZxYyj3fcigUDNryRerqQPvQA6yG/WEr0yu6Hb2g3OzAvFQylaUu9rBQf16
 UbrkQdJd/nnpvfh7cM2h0M21U219t8JgDRJc+bAI96FeiLRA3B6POC+pWl7P81WQp4dV
 oAjr12fPAUKsQHhFyfwKRYEtFf7yzwpn5ctPk77Pr8lY0ZsSySDJU2EgaR53upPfKQ0t
 z27w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=fLlkwIPZZhoTV+aVvzACHGW6FL12yAdCNVd7DcDxY7A=;
 b=aX93TvxTsPE254YfaEfEnPpC37Xgns8/ALLCyeBY2afEIqEP1red1UrxR7dP94fduw
 /9LdhTqiR25UnKtEnsS1FEHALrSDH1bHfcvH4vLxsq+3zdTmaq38LTgX1YUvdob524bm
 Bu1NzIwfy6OrnACFS4h9TlxclcU/siPVXe/CJ+ZuwBG76+xVrN4WVHKeJmJ7VNxx9o7p
 6HgFV5ohbEj2FafgHuzsPtIp57ZNbpvb+Ye5o2KwqKwi6VoVtkyn1uOurYxs28KOEF/j
 CYfmIDLz0X4aLnkATXebSyFijGEqSdFembIkHNpEEy4o7iOLAkGfifwbZyFDehJplk2I
 2WiA==
X-Gm-Message-State: APjAAAUi2Zckp+M349Eiw++Q4emnDoPTEgys2IzCL7BmbtxVdBoF8LHd
 2MkCxrQf0+MQ66nUvZwEo06oOPNG
X-Google-Smtp-Source: APXvYqxwMafzpTKAr72dMjIQBDf4TMyBC0a9hA0jhlY7gDSOCOoiiWMk9EIVbUUSbXr6G09HufjYUQ==
X-Received: by 2002:a5d:4247:: with SMTP id s7mr18557786wrr.110.1568030714678; 
 Mon, 09 Sep 2019 05:05:14 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id o9sm16783114wrh.46.2019.09.09.05.05.13
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 05:05:14 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190908070103.21674-1-costin.lupu@cs.pub.ro>
 <58c2a51d-b61a-8d14-d41c-fd8f87c2da31@neclab.eu>
 <58148785-905f-846f-86a4-d317ea600b1e@gmail.com>
 <edf5b4b4-96b3-2383-23b9-862e7eac2094@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <7ba80296-3033-df2f-2257-13d9847ea281@gmail.com>
Date: Mon, 9 Sep 2019 15:05:13 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <edf5b4b4-96b3-2383-23b9-862e7eac2094@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2] plat: Configure stack size
 page order
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SSByZWFsbHkgZG8gaGF2ZSBsb29vb3RzIG9mIHN0dWZmIG9uIG15IHBsYXRlIHJpZ2h0IG5vdy4g
UGxlYXNlIGxvZyBpbgphbiBpc3N1ZSBvbiBvdXIgYnVnIHRyYWNrZXIgZm9yIGRvaW5nIGl0IGxh
dGVyLgoKQ2hlZXJzLApDb3N0aW4KCk9uIDkvOS8xOSAzOjAyIFBNLCBTaW1vbiBLdWVuemVyIHdy
b3RlOgo+IE9rYXksIEkgdW5kZXJzdGFuZC4gWW91IHRyZWF0IHRoZSBpc3N1ZXMgYXMgYnVncyB0
aGF0IHdlIGZpeCBhZnRlcndhcmRzLgo+IFhlbiBvbiBBcm0zMiBpcyBhY3R1YWxseSB0aGUgc2Ft
ZSBraW5kIGFzIHRoZSB4ODYgdHJhcHMgaXNzdWUuIENhbiB5b3UKPiBwcm92aWRlIGEgZml4IGZv
ciB4ODYgdHJhcHMgZGlyZWN0bHkgYWZ0ZXIgSSB1cHN0cmVhbWVkIHRoaXMgcGF0Y2g/Cj4gCj4g
VGhhbmtzLAo+IAo+IFNpbW9uCj4gCj4gUmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9u
Lmt1ZW56ZXJAbmVjbGFiLmV1Pgo+IAo+IE9uIDA5LjA5LjE5IDEzOjUzLCBDb3N0aW4gTHVwdSB3
cm90ZToKPj4gSGkgU2ltb24sCj4+Cj4+IFBsZWFzZSByZWFkIG15IHByZXZpb3VzIGVtYWlscyBt
b3JlIGNhcmVmdWxseS4gSSBzYWlkIHRoYXQgaW4KPj4gcGxhdC94ZW4veDg2L2FyY2hfZXZlbnRz
LmMgdGhlIHN0YWNrIGFscmVhZHkgaGFzIFNUQUNLX1NJWkUgYnl0ZXMsIEkKPj4gZG9uJ3Qgc2Vl
IHdoZXJlIGlzIHRoZSBwcm9ibGVtLgo+Pgo+PiBBbmQgZm9yIHBsYXQveGVuL3g4Ni90cmFwcy5j
IEkgc2FpZCB0aGF0IHRoZXJlIGlzIGJ1ZywgYnV0IHRoYXQgYnVnIGlzCj4+IG91dCBvZiBzY29w
ZSBmb3IgdGhpcyBwYXRjaC4KPiAKPiBJdCB3YXNuJ3QgY2xlYXIgdG8gbWUgdGhhdCB5b3Ugd2Fu
dCB0byBoYXZlIGEgc2VwYXJhdGUgcGF0Y2ggdG8gZml4IHRoaXMKPiBwcm9ibGVtLiBGaW5lIHdp
dGggbWUuCj4gCj4+Cj4+IEFuZCBJIGFsc28gc2FpZCB0aGF0IHRoaXMgcGF0Y2ggYWxzbyB0b3Vj
aGVzIEFybTMyIChzZWUKPj4gYXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oKS4K
Pj4KPiAKPiBJIHdhcyB0YWxraW5nIGFib3V0IF9YZW5fIG9uIEFybTMyIHdoaWNoIGRvZXMgbm90
IHVzZSBTVEFDS19TSVpFIHByb3Blcmx5Lgo+IAo+PiBDaGVlcnMsCj4+IENvc3Rpbgo+Pgo+PiBP
biA5LzkvMTkgMjoyOSBQTSwgU2ltb24gS3VlbnplciB3cm90ZToKPj4+IEhleSBDb3N0aW4sCj4+
Pgo+Pj4gd2hhdCBhYm91dCBwbGF0L3hlbi94ODYvYXJjaF9ldmVudHMuYyBhbmQgcGxhdC94ZW4v
eDg2L3RyYXBzLmM/IEkgdGhvdWdoCj4+PiB5b3Ugd2FudGVkIHRvIGZpeCB0aGVtIHdpdGggdGhp
cyBwYXRjaCwgdG9vLgo+Pj4gQXQgbGVhc3QgaW4geW91ciBjb21taXQgbWVzc2FnZSB5b3Ugc2hv
dWxkIG1lbnRpb24gdGhhdCBBcm0zMiBYZW4gaXMgbm90Cj4+PiBhZG9wdGVkIGJ5IHRoaXMgcGF0
Y2guCj4+Pgo+Pj4gVGhhbmtzIGEgbG90LAo+Pj4KPj4+IFNpbW9uCj4+Pgo+Pj4gT24gMDguMDku
MTkgMDk6MDEsIENvc3RpbiBMdXB1IHdyb3RlOgo+Pj4+IFRoaXMgcGF0Y2ggYWRkcyBhIGNvbmZp
ZyBvcHRpb24gZm9yIGNvbmZpZ3VyaW5nIHRoZSBzdGFjayBzaXplIHBhZ2UKPj4+PiBvcmRlci4g
V2UKPj4+PiBuZWVkIHRoaXMgZm9yIHN1cHBvcnRpbmcgbGFyZ2Ugc3RhY2tzLgo+Pj4+Cj4+Pj4g
U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPj4+PiAt
LS0KPj4+PiDCoMKgIGFyY2gvQ29uZmlnLnVrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqAgfCA5ICsrKysrKysrKwo+Pj4+IMKgwqAgYXJjaC9hcm0vYXJt
L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5owqDCoMKgIHwgMiArLQo+Pj4+IMKgwqAgYXJjaC9hcm0v
YXJtNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmjCoCB8IDIgKy0KPj4+PiDCoMKgIGFyY2gveDg2
L3g4Nl82NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaCB8IDIgKy0KPj4+PiDCoMKgIDQgZmlsZXMg
Y2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPj4+Pgo+Pj4+IGRpZmYg
LS1naXQgYS9hcmNoL0NvbmZpZy51ayBiL2FyY2gvQ29uZmlnLnVrCj4+Pj4gaW5kZXggMTkwYzc1
ZTYuLmQwOTFkY2JkIDEwMDY0NAo+Pj4+IC0tLSBhL2FyY2gvQ29uZmlnLnVrCj4+Pj4gKysrIGIv
YXJjaC9Db25maWcudWsKPj4+PiBAQCAtMjQsMyArMjQsMTIgQEAgZW5kaWYKPj4+PiDCoMKgIGlm
IChBUkNIX0FSTV82NCkKPj4+PiDCoMKgwqDCoMKgwqAgc291cmNlICJhcmNoL2FybS9hcm02NC9D
b25maWcudWsiCj4+Pj4gwqDCoCBlbmRpZgo+Pj4+ICsKPj4+PiArY29uZmlnIFNUQUNLX1NJWkVf
UEFHRV9PUkRFUgo+Pj4+ICvCoMKgwqAgaW50Cj4+Pj4gK8KgwqDCoCBwcm9tcHQgIlN0YWNrIHNp
emUgcGFnZSBvcmRlciIKPj4+PiArwqDCoMKgIGRlZmF1bHQgNAo+Pj4+ICvCoMKgwqAgaGVscAo+
Pj4+ICvCoMKgwqDCoMKgwqDCoCBJbmRpcmVjdGx5IGNvbmZpZ3VyZXMgdGhlIHN0YWNrIHNpemUg
YnkgY2hhbmdpbmcgdGhlIHN0YWNrCj4+Pj4gc2l6ZSBwYWdlCj4+Pj4gK8KgwqDCoMKgwqDCoMKg
IG9yZGVyLiBTdGFjayBzaXplIGlzIGVxdWFsIHdpdGggMl5vcmRlciAqIHBhZ2Ugc2l6ZSAoZS5n
Lgo+Pj4+IDRLQikuCj4+Pj4gK8KgwqDCoMKgwqDCoMKgIE9ubHkgY2hhbmdlIHRoaXMgaWYgeW91
IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuCj4+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2FybS9p
bmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4+IGIvYXJjaC9hcm0vYXJtL2luY2x1ZGUvdWsvYXNt
L2xpbWl0cy5oCj4+Pj4gaW5kZXggMDg1NzYxYzMuLmUyMjk4ZDZiIDEwMDY0NAo+Pj4+IC0tLSBh
L2FyY2gvYXJtL2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4+ICsrKyBiL2FyY2gvYXJt
L2FybS9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4+IEBAIC0zOSw3ICszOSw3IEBACj4+Pj4g
wqDCoCAjZGVmaW5lIF9fUEFHRV9NQVNLwqDCoMKgwqDCoMKgwqAgKH4oKF9fUEFHRV9TSVpFKSAt
IDEpKQo+Pj4+IMKgwqAgI2VuZGlmCj4+Pj4gwqDCoCAtI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFH
RV9PUkRFUsKgwqDCoCAyCj4+Pj4gKyNkZWZpbmUgX19TVEFDS19TSVpFX1BBR0VfT1JERVLCoMKg
wqAgQ09ORklHX1NUQUNLX1NJWkVfUEFHRV9PUkRFUgo+Pj4+IMKgwqAgI2RlZmluZSBfX1NUQUNL
X1NJWkXCoMKgwqDCoMKgwqDCoCAoX19QQUdFX1NJWkUgKiAoMSA8PAo+Pj4+IF9fU1RBQ0tfU0la
RV9QQUdFX09SREVSKSkKPj4+PiDCoMKgIMKgICNkZWZpbmUgX19XT1JEU0laRcKgwqDCoMKgwqDC
oMKgIDMyCj4+Pj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2xp
bWl0cy5oCj4+Pj4gYi9hcmNoL2FybS9hcm02NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4+
IGluZGV4IGNlYzA1NjQxLi5mYjcwZjJiYSAxMDA2NDQKPj4+PiAtLS0gYS9hcmNoL2FybS9hcm02
NC9pbmNsdWRlL3VrL2FzbS9saW1pdHMuaAo+Pj4+ICsrKyBiL2FyY2gvYXJtL2FybTY0L2luY2x1
ZGUvdWsvYXNtL2xpbWl0cy5oCj4+Pj4gQEAgLTQwLDcgKzQwLDcgQEAKPj4+PiDCoMKgICNkZWZp
bmUgX19QQUdFX01BU0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUpIC0gMSkpCj4+Pj4g
wqDCoCAjZW5kaWYKPj4+PiDCoMKgIC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDC
oMKgIDQKPj4+PiArI2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDCoCBDT05GSUdf
U1RBQ0tfU0laRV9QQUdFX09SREVSCj4+Pj4gwqDCoCAjZGVmaW5lIF9fU1RBQ0tfU0laRcKgwqDC
oCAoX19QQUdFX1NJWkUgKiAoMSA8PAo+Pj4+IF9fU1RBQ0tfU0laRV9QQUdFX09SREVSKSkKPj4+
PiDCoMKgICNkZWZpbmUgX19TVEFDS19BTElHTl9TSVpFwqDCoMKgIDE2Cj4+Pj4gwqDCoCBkaWZm
IC0tZ2l0IGEvYXJjaC94ODYveDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xpbWl0cy5oCj4+Pj4gYi9h
cmNoL3g4Ni94ODZfNjQvaW5jbHVkZS91ay9hc20vbGltaXRzLmgKPj4+PiBpbmRleCBhOTY5YmQx
Ny4uMjE4MTQwNDQgMTAwNjQ0Cj4+Pj4gLS0tIGEvYXJjaC94ODYveDg2XzY0L2luY2x1ZGUvdWsv
YXNtL2xpbWl0cy5oCj4+Pj4gKysrIGIvYXJjaC94ODYveDg2XzY0L2luY2x1ZGUvdWsvYXNtL2xp
bWl0cy5oCj4+Pj4gQEAgLTM5LDcgKzM5LDcgQEAKPj4+PiDCoMKgICNkZWZpbmUgX19QQUdFX01B
U0vCoMKgwqDCoMKgwqDCoCAofigoX19QQUdFX1NJWkUpIC0gMSkpCj4+Pj4gwqDCoCAjZW5kaWYK
Pj4+PiDCoMKgIC0jZGVmaW5lIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSwqDCoMKgIDQKPj4+PiAr
I2RlZmluZSBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUsKgwqDCoCBDT05GSUdfU1RBQ0tfU0laRV9Q
QUdFX09SREVSCj4+Pj4gwqDCoCAjZGVmaW5lIF9fU1RBQ0tfU0laRcKgwqDCoMKgwqDCoMKgIChf
X1BBR0VfU0laRSAqICgxIDw8Cj4+Pj4gX19TVEFDS19TSVpFX1BBR0VfT1JERVIpKQo+Pj4+IMKg
wqAgwqAgI2RlZmluZSBfX1dPUkRTSVpFwqDCoMKgwqDCoMKgwqAgNjQKPj4+Pgo+Pj4KPj4+IF9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiBNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Cj4+PiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
Pj4+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 12:19:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 12:19:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7IdK-0005QU-TP; Mon, 09 Sep 2019 12:19:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7IdK-0005QP-7b
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 12:19:02 +0000
X-Inumbo-ID: 01798392-d2fc-11e9-b299-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 01798392-d2fc-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 12:19:01 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id c10so13605699wmc.0
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 05:19:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=g+IbIliSlE3oEt6I8K3Q6lDD+IqTkl5MLGjVmGyie1o=;
 b=mcGvAtVqwmy2CiSkzjQfczHwque8prD3YwEfHLkkyPTpbnaypb1ubbTI40Dmc9WVlu
 B63ZdEjn/g06CTbzQWAsG2myg3gNF9/4Z8jnAI5OkSsDF+YvZFk8b4HH2XN2EpDz6Zzx
 Z4H2TNOcPDLtcAzC/hy99fH/B4X/uX412VWeNwFLBUhJSvrHszgCpCUD0BdAgoJhIlRb
 vOjGzrM9tJklfjcNnBp0llI4bTWZXc0zHKRms3oIR8iEMLdOKMtN6RA+/xQOAbueNHOX
 vpSUz7kUNIuvGHB9+il42o1z08wwpMNXn7htVG73Qhu1XTZy1odO9TNBHehxKr4zIjR2
 4Bww==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=g+IbIliSlE3oEt6I8K3Q6lDD+IqTkl5MLGjVmGyie1o=;
 b=RUCrmFAeuCG0qsPhKjwmuZp4iKsGVD+0Oi+uCIq+UUDT8icqs+LYOj93h22N/97obY
 ULOCY7GArqfLRiu5Gn4uZOdZmJpH2/O9CB1hypVKMMJy8eOGonWcgIQN4D1K/fl2Epv1
 eHI7jZdnFu6ftmIawu/usvM5KxDZNn9FubJ8S6271weKt1q2SZPJwKn9OHlCYgChw/EG
 5Zg220bAR2v9GxLOrCoSw43n3O1wrn5kSoioSHCmT1SfjwW825YW54cp4tIXmizXZZqK
 PZZPGrVvxA2wXFfjPLwY+3wyeTAkMOzE20y/O06ZcrPVImpBl1vwEJV+WvzmJEZCj7A6
 MdtA==
X-Gm-Message-State: APjAAAXHQQdgqZxg+J7o5wK5GEIytqzLUA3VJxnnIfkXXdq5r3YOO7T6
 bmPCsidukNK5jzoiVt+cf2DIRqoV
X-Google-Smtp-Source: APXvYqwHVjKx5DMCRwYZdwGlFR5USBca2vnbaMdHJchuwI97sjCibr4rqky85YvPvhTEX8PO6mdEvw==
X-Received: by 2002:a1c:cf8c:: with SMTP id
 f134mr19082697wmg.174.1568031540365; 
 Mon, 09 Sep 2019 05:19:00 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id 33sm14115683wra.41.2019.09.09.05.18.59
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 05:18:59 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
 <20190909095801.13956-4-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <971ec903-a5a3-6624-6fa5-d569f3a5e984@gmail.com>
Date: Mon, 9 Sep 2019 15:18:59 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095801.13956-4-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 3/4] Add patch
 for the original code
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5Lzkv
MTkgMTI6NTggUE0sIENoYXJhbGFtcG9zIE1haW5hcyB3cm90ZToKPiBSZXBsYWNlIHNpZ25hbC5o
IHdpdGggbXVzbCdzIHVjb250ZXh0LmguIG1ha2Vjb250ZXh0IHVzZXMgdGhlIHN0cnVjdAo+IHVj
b250ZXh0X3QgYW5kIHRoaXMgc3RydWN0IGlzIGRlZmluZWQgaW4gYml0cy9zaWduYWwuaCB3aGlj
aCBpbmNsdWRlZAo+IGZyb20gdWNvbnRleHQuaC4gSW4gbXVzbCBzaWduYWwuaCBpbmNsdWRlcyBi
aXRzL3NpZ25hbC5oIGJ1dCB0aGlzIGlzIG5vdAo+IHRoZSBjYXNlIHdpdGggbmV3bGliIHdoaWNo
IGhhcyBubyBkZWZpbml0aW9uIGZvciB1Y29udGV4dF90IHN0cnVjdC4KPiAgCj4gU2lnbmVkLW9m
Zi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pgo+
IC0tLQo+ICBwYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhlYWRlci1maWxlLnBhdGNoIHwgMzIg
KysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAzMiBpbnNlcnRpb25zKCsp
Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhlYWRlci1m
aWxlLnBhdGNoCj4gCj4gZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQtaGVh
ZGVyLWZpbGUucGF0Y2ggYi9wYXRjaGVzLzAwMDEtQWRkLXVjb250ZXh0LWhlYWRlci1maWxlLnBh
dGNoCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4zN2ExOWE1Cj4gLS0t
IC9kZXYvbnVsbAo+ICsrKyBiL3BhdGNoZXMvMDAwMS1BZGQtdWNvbnRleHQtaGVhZGVyLWZpbGUu
cGF0Y2gKPiBAQCAtMCwwICsxLDMyIEBACj4gK0Zyb20gYmJjYWFlOTkyZjUzZDg2NDhhYmFiNTI1
NGU4MWJkZjMwNjQwOTExYyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKPiArRnJvbTogQ2hhcmFs
YW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pgo+ICtEYXRlOiBXZWQs
IDI5IE1heSAyMDE5IDExOjM0OjAzICswMjAwCj4gK1N1YmplY3Q6IFtQQVRDSF0gQWRkIHVjb250
ZXh0IGhlYWRlciBmaWxlCj4gKwo+ICttYWtlY29udGV4dCB1c2VzIHRoZSBzdHJ1Y3QgdWNvbnRl
eHRfdCB3aGljaCBpcyBub3QgZGVmaW5lZCBhbnl3aGVyZSBpbgo+ICtuZXdsaWIuIEluIG11c2wg
c2lnbmFsLmggaW5jbHVkZXMgYml0cy9zaWduYWwuaCB3aGljaCBkZWZpbmVzIHVjb250ZXh0X3QK
PiArc3RydWN0LiBUaGVyZWZvcmUgbmV3bGliJ3Mgc2lnbmFsLmggaXMgcmVwbGFjZWQgYnkgbXVz
bCdzIHVjb250ZXh0LmgKPiAraGVhZGVyIHdoaWNoIGluY2x1ZGVzIGJpdHMvc2lnbmFsLmguCj4g
Kwo+ICtTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5h
c0BuZWNsYWIuZXU+Cj4gKwo+ICstLS0KPiArIGFyY2gveDg2XzY0L21ha2Vjb250ZXh0LmMgfCAy
ICstCj4gKyAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24oLSkKPiAr
Cj4gK2RpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tYWtlY29udGV4dC5jIGIvYXJjaC94ODZfNjQv
bWFrZWNvbnRleHQuYwo+ICtpbmRleCBiYTZjYTU5Li5lMjcyMDA4IDEwMDY0NAo+ICstLS0gYS9h
cmNoL3g4Nl82NC9tYWtlY29udGV4dC5jCj4gKysrKyBiL2FyY2gveDg2XzY0L21ha2Vjb250ZXh0
LmMKPiArQEAgLTEzLDcgKzEzLDcgQEAKPiArICNkZWZpbmUgX0dOVV9TT1VSQ0UKPiArICNpbmNs
dWRlIDxzdGRkZWYuaD4KPiArICNpbmNsdWRlIDxzdGRhcmcuaD4KPiArLSNpbmNsdWRlIDxzaWdu
YWwuaD4KPiArKyNpbmNsdWRlIDx1Y29udGV4dC5oPgo+ICsgI2luY2x1ZGUgPHN0cmluZy5oPgo+
ICsgI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsgCj4gKy0tIAo+ICsyLjE3LjEKPiArCj4gCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 12:19:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 12:19:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7IdX-0005RC-Vl; Mon, 09 Sep 2019 12:19:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7IdX-0005R7-EU
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 12:19:15 +0000
X-Inumbo-ID: 0947ada6-d2fc-11e9-b299-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0947ada6-d2fc-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 12:19:14 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id q17so8865218wrx.10
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 05:19:14 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=RJoJF6LB3j7mL8XjqRyYOhPZ0QQQQUgq/TE6owy3ncA=;
 b=JwVl5i+9O4xj+F9ShzTeMSp5OOsC4yz2pVwPEhCdGdBIOIjz+BMBVOxa2qxcTfUuVa
 2gmvCOcUUX3maV554RNnbS88DMdb6LmuBqfBMdhsylvgguYgmaazxtBpIegdUrQJwV+Z
 Tj6cBqu1KhCRwvZGWSlPvY3bXjTztxyRILoRg/epTolNiEXsM9DGN8LUbe7Oq15+7jiJ
 Clfnppm7PRBsFUG4MsVedofLuqyrKQFoE9nHhYmYOFCs+Fv1Vp/AJ1XLhlTgofDg6a6J
 IHavyrK2DhX7QwNd98ru0tck9OBft9xvh7M7FbuV+7ZuyF8jTpgj2mXTjQaklbVXWh9S
 WyyA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=RJoJF6LB3j7mL8XjqRyYOhPZ0QQQQUgq/TE6owy3ncA=;
 b=E3A7yLBj2QBsXFSkja2FbdVioWus2gM1GkYs2QLods1HPZMFkde6mlO21MjHC5XU0S
 4EnjBDsqsE/EDghbvV5/HiXeDotp4b6eRiy+c7xH19ZwV1aeMyDpnZ3n4WttgFfMhjEl
 fuvo3DZ/lSqI7DY6jvdQXRRm5Te2AxD92rr5FKZ45JNnv0C0JL5e6kKamTkld7nEdJlU
 zci24Vl4VuiIwsW8OsmoTU/zJqjmpHng38Ez2TWQV+Kz7mxea3GzGEEQmFWSgzyS3Ygb
 LjRKIuSV1NPP6Mmk2uGBmvpAqvKe8+gvILq68mMYF/dylCvRBhu88+DgLcrztKDZEif2
 y3cA==
X-Gm-Message-State: APjAAAX80ARreZmybEKuXVnQag1BhagA+DvfDPpvaMyNisLC5K2FS5YG
 TXdPEJTV44fSEQdNdxJwCQp9sX4b
X-Google-Smtp-Source: APXvYqxHlFlmQ7pjAwLBA8m19lt1YMd7wODpcskYGY1C/7P6NR2DcYTBbDrja4t5YuYRPE6oQ7WG1Q==
X-Received: by 2002:adf:f812:: with SMTP id s18mr19908680wrp.32.1568031553488; 
 Mon, 09 Sep 2019 05:19:13 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id a144sm14995142wme.13.2019.09.09.05.19.12
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 05:19:13 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
 <20190909095801.13956-3-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <3f25012b-d309-9b63-69a1-748be7a44ee5@gmail.com>
Date: Mon, 9 Sep 2019 15:19:12 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095801.13956-3-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 2/4] Add
 Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SSdsbCByZXBsYWNlIHRoZSBQQ1JFIG9uIHVwc3RyZWFtaW5nLiBPdGhlciB0aGFuIHRoYXQgdGhp
cyBwYXRjaCBsb29rcyBmaW5lIQoKUmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVw
dUBjcy5wdWIucm8+CgpPbiA5LzkvMTkgMTI6NTcgUE0sIENoYXJhbGFtcG9zIE1haW5hcyB3cm90
ZToKPiBTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5h
c0BuZWNsYWIuZXU+Cj4gLS0tCj4gIE1ha2VmaWxlLnVrIHwgOTEgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMSBmaWxlIGNoYW5nZWQsIDkx
IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCj4gCj4gZGlm
ZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKPiBuZXcgZmlsZSBtb2RlIDEwMDY0
NAo+IGluZGV4IDAwMDAwMDAuLmE5Y2Q5OTQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvTWFrZWZp
bGUudWsKPiBAQCAtMCwwICsxLDkxIEBACj4gKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UKPiArIwo+ICsjICBsaWJ1Y29udGV4dCBNYWtlZmlsZS51awo+ICsjCj4gKyMg
IEF1dGhvcnM6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5l
dT4KPiArIwo+ICsjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsjCj4gKyMgIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsj
ICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKPiArIyAgYXJlIG1ldDoKPiArIwo+ICsjICAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsjICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCj4gKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArIyAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KPiArIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBu
b3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsjICAgICB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsjCj4g
KyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMgIkFTIElTIgo+ICsjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKyMgIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCj4gKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiArIyAgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsj
ICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgo+ICsjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiArIyAgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
PiArIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKPiArIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKPiArIyAgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gKyMKPiArIyAgVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBF
WFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArIwo+ICsKPiArCj4gKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCj4gKyMgTGlicmFyeSByZWdpc3RyYXRpb24KPiArIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKPiArJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ1Y29udGV4dCwkKENPTkZJ
R19MSUJVQ09OVEVYVCkpKQo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBPcmln
aW5hbCBTb3VyY2VzCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQlVDT05URVhUX1ZF
UlNJT049MC45LjAKPiArTElCVUNPTlRFWFRfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9BZGVsaWVM
aW51eC9saWJ1Y29udGV4dC9hcmNoaXZlL3YkKExJQlVDT05URVhUX1ZFUlNJT04pLnppcAo+ICtM
SUJVQ09OVEVYVF9QQVRDSERJUj0kKExJQlVDT05URVhUX0JBU0UpL3BhdGNoZXMKPiArTElCVUNP
TlRFWFRfU1VCRElSPWxpYnVjb250ZXh0LSQoTElCVUNPTlRFWFRfVkVSU0lPTikKPiArJChldmFs
ICQoY2FsbCBmZXRjaCxsaWJ1Y29udGV4dCwkKExJQlVDT05URVhUX1VSTCkpKQo+ICskKGV2YWwg
JChjYWxsIHBhdGNoLGxpYnVjb250ZXh0LCQoTElCVUNPTlRFWFRfUEFUQ0hESVIpLCQoTElCVUNP
TlRFWFRfU1VCRElSKSkpCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIEhlbHBl
cnMKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArTElCVUNPTlRFWFRfRVhUUkFDVEVEPSQo
TElCVUNPTlRFWFRfT1JJR0lOKS9saWJ1Y29udGV4dC0kKExJQlVDT05URVhUX1ZFUlNJT04pCj4g
Kwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIExpYnJhcnkgaW5jbHVkZXMKPiArIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArTElCVUNPTlRFWFRfQ09NTU9OX0lOQ0xVREVTLXkgICAg
ICs9IC1JJChMSUJVQ09OVEVYVF9CQVNFKS9pbmNsdWRlCj4gK0xJQlVDT05URVhUX0NPTU1PTl9J
TkNMVURFUy15ICAgICArPSAtSSQoTElCVUNPTlRFWFRfRVhUUkFDVEVEKQo+ICtDSU5DTFVERVMt
JChDT05GSUdfTElCVUNPTlRFWFQpICAgKz0gJChMSUJVQ09OVEVYVF9DT01NT05fSU5DTFVERVMt
eSkKPiArQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUNPTlRFWFQpICs9ICQoTElCVUNPTlRFWFRf
Q09NTU9OX0lOQ0xVREVTLXkpCj4gKwo+ICtMSUJVQ09OVEVYVF9DSU5DTFVERVMgICArPSAtSSQo
TElCVUNPTlRFWFRfRVhUUkFDVEVEKQo+ICtMSUJVQ09OVEVYVF9DWFhJTkNMVURFUyArPSAtSSQo
TElCVUNPTlRFWFRfRVhUUkFDVEVEKQo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiAr
IyBHbG9iYWwgZmxhZ3MKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBTdXBwcmVzcyBz
b21lIHdhcm5pbmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nlc3MgbG9vayBuZWF0ZXIKPiArU1VQ
UFJFU1NfRkxBR1MgKz0gLVduby11bnVzZWQtcGFyYW1ldGVyIFwKPiArCS1Xbm8tdW51c2VkLXZh
cmlhYmxlIC1Xbm8tdW51c2VkLXZhbHVlIC1Xbm8tdW51c2VkLWZ1bmN0aW9uIFwKPiArCS1Xbm8t
bWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVduby1pbXBsaWNpdC1mYWxsdGhyb3VnaAo+ICsK
PiArTElCVUNPTlRFWFRfQ0ZMQUdTLXkgICArPSAkKFNVUFBSRVNTX0ZMQUdTKSBcCj4gKyAJLVdu
by1wb2ludGVyLXRvLWludC1jYXN0IC1Xbm8taW50LXRvLXBvaW50ZXItY2FzdAo+ICtMSUJVQ09O
VEVYVF9DWFhGTEFHUy15ICs9ICQoU1VQUFJFU1NfRkxBR1MpCj4gKwo+ICsjIEV4cG9ydGVkIHN5
bWJvbHMKPiArTElCVUNPTlRFWFRfRVhQT1JUUyA9ICQoTElCUENSRV9CQVNFKS9leHBvcnRzeW1z
LnVrCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIGxpYnVjb250ZXh0IGNvZGUK
PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArTElCVUNPTlRFWFRfU1JDUy0kKENPTkZJR19B
UkNIX1g4Nl82NCkgKz0gJChMSUJVQ09OVEVYVF9FWFRSQUNURUQpL2FyY2gveDg2XzY0L2dldGNv
bnRleHQuUwo+ICtMSUJVQ09OVEVYVF9TUkNTLSQoQ09ORklHX0FSQ0hfWDg2XzY0KSArPSAkKExJ
QlVDT05URVhUX0VYVFJBQ1RFRCkvYXJjaC94ODZfNjQvbWFrZWNvbnRleHQuYwo+ICtMSUJVQ09O
VEVYVF9TUkNTLSQoQ09ORklHX0FSQ0hfWDg2XzY0KSArPSAkKExJQlVDT05URVhUX0VYVFJBQ1RF
RCkvYXJjaC94ODZfNjQvc2V0Y29udGV4dC5TCj4gK0xJQlVDT05URVhUX1NSQ1MtJChDT05GSUdf
QVJDSF9YODZfNjQpICs9ICQoTElCVUNPTlRFWFRfRVhUUkFDVEVEKS9hcmNoL3g4Nl82NC9zdGFy
dGNvbnRleHQuUwo+ICtMSUJVQ09OVEVYVF9TUkNTLSQoQ09ORklHX0FSQ0hfWDg2XzY0KSArPSAk
KExJQlVDT05URVhUX0VYVFJBQ1RFRCkvYXJjaC94ODZfNjQvc3dhcGNvbnRleHQuUwo+IAoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 12:19:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 12:19:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Ide-0005Rv-2M; Mon, 09 Sep 2019 12:19:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7Idd-0005Ro-6Z
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 12:19:21 +0000
X-Inumbo-ID: 0cb7af7c-d2fc-11e9-978d-bc764e2007e4
Received: from mail-wr1-x444.google.com (unknown [2a00:1450:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0cb7af7c-d2fc-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 12:19:20 +0000 (UTC)
Received: by mail-wr1-x444.google.com with SMTP id i1so13004117wro.4
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 05:19:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=pSxdZjy70zbHOZxBUal1dSzdQ8IL1zZM7ZvGv+TFz60=;
 b=ZOXWkatMvRUkKqWLQVkoV5rDsBmRonWDlZAGwi8zRYoz0sBXYu36KrSmiX2+RkOEjC
 DrGGLKc+O8KEhz9TwnS53R0Lk/Sxy/OyifG5CLKap2Ql6gzQHiexq9lQRZqADm0PSjT2
 ETZ67y9509sEymgpkPD14g0KR19xqzOkETslYwamXqlbVEJOBGi8FgIZEIo/LjzVQ9VA
 h6pkny2I/ImfDe5EMDNvM6QcmYwYzyh1gja9dzEh4fcvp9UyzSYCzAQ3xzHqXAyxjx7x
 ahnsfjY3a+ESCBbxUXEtVy2UJTuL88FMsOTTqoS+RP5y9K2eB1Qt/oyvW33gmBCZMNy2
 vPcg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=pSxdZjy70zbHOZxBUal1dSzdQ8IL1zZM7ZvGv+TFz60=;
 b=Sknm+tqFK3YLzGu073BsDkH40Hhll6Bp1c5hcfPTmaguplAb6dQQE1V6hcFWagrJu9
 QXtdLDbdubXmPE3ED+puWp4cxKVliGB4flf/g6xLBFe0UlS705pjXnHWViVQT0T2UpFL
 rHc7IBpE8OKotalwE7o7rcUNCE0hm/ygCM5vTPAW8tv1ES6LbURe06TPareSHVqD/Wp9
 qXlQBSCXM57N0/5RU13il5NGWWQvSz1JM1ti+gIgpjydYXEF5Bg5SsSRQtXK0bHobc08
 /l/BctCvXKuXXLt3POjH0XOPSlqhifTbCiNL+Pc9sxjLoj3hXxXDpfzYRJYrYJ3V0w0S
 HkVg==
X-Gm-Message-State: APjAAAXKqD0D5s3x1Y1zKNLYYjqZjSz1SJXez0Vt5ZV8pvaxIwELR9Ce
 UtJufGVkj5ucWLTHMlKJRbPctyKo
X-Google-Smtp-Source: APXvYqwHAveYkFMugZZfWht1b40+x9DxETME5fq+0jP4e9KsjqFNnXjxzDFP1i71GZsIdbB4SyqD4g==
X-Received: by 2002:adf:dc81:: with SMTP id r1mr18248757wrj.52.1568031559276; 
 Mon, 09 Sep 2019 05:19:19 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id m12sm12493545wro.32.2019.09.09.05.19.18
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 05:19:18 -0700 (PDT)
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 minios-devel@lists.xen.org
References: <20190909095801.13956-1-Charalampos.Mainas@neclab.eu>
 <20190909095801.13956-2-Charalampos.Mainas@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <4a77f9b7-69b2-ab09-bb55-5b78c4d100c6@gmail.com>
Date: Mon, 9 Sep 2019 15:19:18 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095801.13956-2-Charalampos.Mainas@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUCONTEXT PATCH v2 1/4] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGlzIHBhdGNoLCBDaGFyYWxhbXBvcyEgSSdsbCBkbyBzb21lIHNtYWxsIHJl
ZmluZW1lbnRzIGxpa2UKcmVtb3ZpbmcgZXh0cmEgbmV3bGluZXMgaW4gb3JkZXIgdG8gbWF0Y2gg
dGhlIGV4YWN0IHRlbXBsYXRlIEkgdXNlZCBmb3IKcGNyZS4gT3RoZXIgdGhhbiB0aGF0IHRoaXMg
cGF0Y2ggbG9va3MgZmluZSEKClJldmlld2VkLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVA
Y3MucHViLnJvPgoKT24gOS85LzE5IDEyOjU3IFBNLCBDaGFyYWxhbXBvcyBNYWluYXMgd3JvdGU6
Cj4gV2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUg
Y29kZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9z
Lk1haW5hc0BuZWNsYWIuZXU+Cj4gLS0tCj4gIC5naXRpZ25vcmUgICAgICB8IDI3ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKwo+ICBDT0RJTkdfU1RZTEUubWQgfCAgNSArKysrKwo+ICBDT05U
UklCVVRJTkcubWQgfCAgNSArKysrKwo+ICBDT1BZSU5HLm1kICAgICAgfCAzOSArKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgQ29uZmlnLnVrICAgICAgIHwgIDcgKysr
KysrKwo+ICBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysrKysrKysrKwo+ICBSRUFETUUubWQgICAg
ICAgfCAgOCArKysrKysrKwo+ICBleHBvcnRzeW1zLnVrICAgfCAgMSArCj4gIDggZmlsZXMgY2hh
bmdlZCwgMTAzIGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUK
PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAo+ICBjcmVhdGUgbW9kZSAxMDA2
NDQgQ09OVFJJQlVUSU5HLm1kCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCj4gIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlO
RVJTLm1kCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQKPiAgY3JlYXRlIG1vZGUgMTAw
NjQ0IGV4cG9ydHN5bXMudWsKPiAKPiBkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25v
cmUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjc1ZDJmZDMKPiAtLS0g
L2Rldi9udWxsCj4gKysrIGIvLmdpdGlnbm9yZQo+IEBAIC0wLDAgKzEsMjcgQEAKPiArKi5kZXBl
bmQKPiArKi5vCj4gKyouYQo+ICsqLmQKPiArKi5zbwo+ICsqLm9yaWcKPiArKi5yZWoKPiArKi5i
YWsKPiArKi5zd3AKPiArKn4KPiArLCoKPiArXCMqXCMKPiArLlwjKgo+ICtcI18qXCMKPiArLlwj
XyoKPiArIS5naXRpZ25vcmUKPiArLioKPiArCj4gKyMgZ251IGdsb2JhbCBmaWxlcwo+ICtHUEFU
SAo+ICtHUlRBR1MKPiArR1NZTVMKPiArR1RBR1MKPiArCj4gKyMgY3Njb3BlIGZpbGVzCj4gK2Nz
Y29wZS4qCj4gK25jc2NvcGUuKgo+IGRpZmYgLS1naXQgYS9DT0RJTkdfU1RZTEUubWQgYi9DT0RJ
TkdfU1RZTEUubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjM3ZjI0
MjcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvQ09ESU5HX1NUWUxFLm1kCj4gQEAgLTAsMCArMSw1
IEBACj4gK0NvZGluZyBTdHlsZQo+ICs9PT09PT09PT09PT0KPiArCj4gK1BsZWFzZSByZWZlciB0
byB0aGUgYENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0
b3J5Lgo+ICsKPiBkaWZmIC0tZ2l0IGEvQ09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1k
Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41MjNjMWIyCj4gLS0tIC9k
ZXYvbnVsbAo+ICsrKyBiL0NPTlRSSUJVVElORy5tZAo+IEBAIC0wLDAgKzEsNSBAQAo+ICtDb250
cmlidXRpbmcgdG8gVW5pa3JhZnQKPiArPT09PT09PT09PT09PT09PT09PT09PT0KPiArCj4gK1Bs
ZWFzZSByZWZlciB0byB0aGUgYENPTlRSSUJVVElORy5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlr
cmFmdCByZXBvc2l0b3J5Lgo+ICsKPiBkaWZmIC0tZ2l0IGEvQ09QWUlORy5tZCBiL0NPUFlJTkcu
bWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmU4MDY0MDYKPiAtLS0g
L2Rldi9udWxsCj4gKysrIGIvQ09QWUlORy5tZAo+IEBAIC0wLDAgKzEsMzkgQEAKPiArTGljZW5z
ZQo+ICs9PT09PT09Cj4gKwo+ICtVbmlrcmFmdCBsaWJ1Y29udGV4dCB3cmFwcGVycwo+ICstLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICtUaGlzIHJlcG9zaXRvcnkgY29u
dGFpbnMgd3JhcHBlciBjb2RlIHRvIGJ1aWxkIGxpYnVjb250ZXh0IHdpdGggVW5pa3JhZnQuCj4g
K0VhY2ggQyBjb2RlIGZpbGUgaW4gdGhpcyByZXBvc2l0b3J5IHNob3VsZCBkZWNsYXJlIHdobyBp
cyB0aGUKPiArY29weXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBhbmQgY29uZGl0
aW9ucyB0aGUgY29kZSBpcwo+ICtsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ugbm90ZSBpcyBt
aXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodAo+ICtub3RpY2Ugd2lsbCBhcHBseToKPiAr
Cj4gKwlDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsKPiArCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsJbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4g
KwlhcmUgbWV0Ogo+ICsKPiArCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKwkgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKwkyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+
ICsJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQo+ICsJICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArCTMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArCSAgIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCj4gKwkgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgo+ICsKPiArCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ICsJQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQo+ICsJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArCUFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiArCUxJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKPiArCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKwlTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiArCUlOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCj4gKwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsJQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKPiArCVBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsKPiBkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29u
ZmlnLnVrCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi44NWFiMGEzCj4g
LS0tIC9kZXYvbnVsbAo+ICsrKyBiL0NvbmZpZy51awo+IEBAIC0wLDAgKzEsNyBAQAo+ICtjb25m
aWcgTElCVUNPTlRFWFQKPiArICAgICAgICAgICBib29sICJ1Y29udGV4dC5oIEFQSSIKPiArICAg
ICAgICAgICBkZWZhdWx0IG4KPiArCSAgIHNlbGVjdCBMSUJORVdMSUJDCj4gKwo+ICtpZiBMSUJV
Q09OVEVYVAo+ICtlbmRpZgo+IGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUy5tZCBiL01BSU5UQUlO
RVJTLm1kCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi43ZTE5N2Y5Cj4g
LS0tIC9kZXYvbnVsbAo+ICsrKyBiL01BSU5UQUlORVJTLm1kCj4gQEAgLTAsMCArMSwxMSBAQAo+
ICtNYWludGFpbmVycyBMaXN0Cj4gKz09PT09PT09PT09PT09PT0KPiArCj4gK0ZvciBub3RlcyBv
biBob3cgdG8gcmVhZCB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gYE1BSU5UQUlO
RVJTLm1kYCBpbgo+ICt0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lgo+ICsKPiArCUxJQlVD
T05URVhULVVOSUtSQUZUCj4gKwlNOglGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIu
ZXU+Cj4gKwlMOgltaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZwo+ICsJRjogKgo+ICsKPiBkaWZm
IC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp
bmRleCAwMDAwMDAwLi5lN2EwY2I5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL1JFQURNRS5tZAo+
IEBAIC0wLDAgKzEsOCBAQAo+ICtsaWJ1Y29udGV4dCBmb3IgdW5pa3JhZnQKPiArPT09PT09PT09
PT09PT09PQo+ICsKPiArVGhpcyBpcyB0aGUgcG9ydCBvZiBsaWJ1Y29udGV4dCBmb3IgVW5pa3Jh
ZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4KPiArCj4gK1BsZWFzZSByZWZlciB0byB0aGUgYFJFQURN
RS5tZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCj4gK3N1YmRp
cmVjdG9yeSBvZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5Lgo+ICsKPiBkaWZmIC0tZ2l0
IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+
IGluZGV4IDAwMDAwMDAuLjYyMWU5NGYKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZXhwb3J0c3lt
cy51awo+IEBAIC0wLDAgKzEgQEAKPiArbm9uZQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 13:05:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 13:05:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7JLy-0001Yw-Rt; Mon, 09 Sep 2019 13:05:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Nby0=XE=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7JLx-0001Yo-T7
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 13:05:09 +0000
X-Inumbo-ID: 708beb70-d302-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 708beb70-d302-11e9-b76c-bc764e2007e4;
 Mon, 09 Sep 2019 13:05:04 +0000 (UTC)
IronPort-SDR: 3D7kKFlGil5+nCC2ILrkoIcJ4ruEtp2S3a+4ZHb8TywZ0USazF8RbvNRsfhsoXzuUFQSjgqBcF
 VGTnzAjvaJUQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AsX+L2hBER8dTmQZUDcKoUyQJP3N1i/DPJgcQr6?=
 =?us-ascii?q?AfoPdwSPX9o8bcNUDSrc9gkEXOFd2Cra4d0ayP4/6rBDJIyK3CmUhKSIZLWR?=
 =?us-ascii?q?4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBx?=
 =?us-ascii?q?rwKxd+KPjrFY7OlcS30P2594HObwlSizexfK1+IA+roQjSt8QajotvJ6cswR?=
 =?us-ascii?q?bVv3VEfPhby3l1LlyJhRb84cmw/J9n8ytOvv8q6tBNX6bncakmVLJUFDspPX?=
 =?us-ascii?q?w7683trhnDUBCA5mAAXWUMkxpHGBbK4RfnVZrsqCT6t+592C6HPc3qSL0/RD?=
 =?us-ascii?q?qv47t3RBLulSwKMSMy/mPKhcxqlK9VoAyvqQFxzYDXZ4+aO+ZxcKzGcNMGXG?=
 =?us-ascii?q?pMRNpdWjZdDo6+aYYEEuoPPfxfr4n4v1YDsxy+BRKwBOPuzD9Dm3n43bAi0+?=
 =?us-ascii?q?Q8DArL2xAvH9UVsHTIrdX1Mr0eUeSozKnQ0DXOdO9Z2Szn5IjQbxAuuuuAXa?=
 =?us-ascii?q?h3ccfIz0QkCgDLjk2IpID4MD6Zy/4Bvmub4uZ6S+6jlWwqpxt/rzS328shhZ?=
 =?us-ascii?q?TFipgWx13E7yl13og4KNOiREJmbtOoDp1dvDyAOYRsWMMtWWRotT4/yr0BpJ?=
 =?us-ascii?q?G0YjAHyI8ixx7Dc/yHdJWI4g77WOaRPzh4gHVldaqhhxa360egy+n8WtOo31?=
 =?us-ascii?q?ZRtCZFisTMuWsX2xzJ7ciLUvp9/kG/1jaTzw3f9+5JLV0umafYK5Mt2KA8mo?=
 =?us-ascii?q?QRvEjZECL6gED2g7WXdkUg9Oio8ePnYrD+q5CAMI90kR3+MqUomsClBeQ4Lx?=
 =?us-ascii?q?AOX3WA9Ougz73v51X5QKhRgfEsiKnZt4jWJd4Hqa6hHw9VzoEj5g66Dzen1t?=
 =?us-ascii?q?QYnH4HLElcdB2akYfpJU/BIPTjAPe7glSsiytrx+vcMrzuHJrNKGLPkLD7fb?=
 =?us-ascii?q?Zy80Rc0hY8zchD55JIDbEMOPzzVVH1tNzZFh82LRa4w+b6CNV8yoweWHmCAq?=
 =?us-ascii?q?mHP6zOtV+H/PkgL/OSa48IoDz9MeQq5+byjX8lnl8QZbKp3ZoSaHC/GPRqOU?=
 =?us-ascii?q?aZYWfyjdcHEGYFoBA+QffsiFKcTTFTY2y9ULkm6j4lFYKsFZ3DSZy1gLydwC?=
 =?us-ascii?q?e7GYVbZn5CCl+WDHjnb5+LW/ERZyKIPMBhkyYIWqO7RIA80hGutRL6xqF8Lu?=
 =?us-ascii?q?rI5y0XqIjv28Jp6O3Ijx0y6CR0AN+H32GXSGEn1l8PEjo32qF4uglxx0mO1Y?=
 =?us-ascii?q?B8gudEDppD6vUPVR01ZrDGyOkvINfpRgPHNvOUUEvuFt6hGi0wSJQ13scTS0?=
 =?us-ascii?q?1mXc2/hFbZ2Hz5UPcui7WXCclsoern1H/rKpMlxg=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DSAACnTHZd/wPjVY1lHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBVgQBAQsBgW2BF1MyKoQhiHyXVol7gWcJAQEBKREBAgEBgUuCdIJdNwY?=
 =?us-ascii?q?OAgMJAQEFAQEBAQEGBAFshS4MgjoigxhEEjUCGA4CcoJXSwGCDqVegTKFS4M?=
 =?us-ascii?q?4gUmBDCgBhx6GMT+EYYN9DAcND4MjglgEjEcSiUOWJAeCJGQEhheJIYRIJ4J?=
 =?us-ascii?q?jQJVeAahCNyIigTYzGoNfCY4lglw9AQExgQYBAY0RglQBAQ?=
X-IPAS-Result: =?us-ascii?q?A2DSAACnTHZd/wPjVY1lHAEBAQQBAQcEAQGBVgQBAQsBg?=
 =?us-ascii?q?W2BF1MyKoQhiHyXVol7gWcJAQEBKREBAgEBgUuCdIJdNwYOAgMJAQEFAQEBA?=
 =?us-ascii?q?QEGBAFshS4MgjoigxhEEjUCGA4CcoJXSwGCDqVegTKFS4M4gUmBDCgBhx6GM?=
 =?us-ascii?q?T+EYYN9DAcND4MjglgEjEcSiUOWJAeCJGQEhheJIYRIJ4JjQJVeAahCNyIig?=
 =?us-ascii?q?TYzGoNfCY4lglw9AQExgQYBAY0RglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,484,1559509200"; 
   d="scan'208";a="4708609"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 09 Sep 2019 16:05:03 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 1ACE41A600E5;
 Mon,  9 Sep 2019 16:05:03 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id xCznCsSF2HMf; Mon,  9 Sep 2019 16:05:03 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id F39BB1A60112;
 Mon,  9 Sep 2019 16:05:02 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 1Himge1Zu1Wy; Mon,  9 Sep 2019 16:05:02 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id D4D0F1A600E5;
 Mon,  9 Sep 2019 16:05:02 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon,  9 Sep 2019 16:04:58 +0300
Message-Id: <20190909130458.24126-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
MIME-Version: 1.0
Subject: [Minios-devel] [UNIKRAFT PATCH] lib/uktime: Introduce time
 functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu,
 vlad_andrei.badoiu@stud.acs.upb.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VW50aWwgbm93LCB0aGUgdGltZSBmdW5jdGlvbnMgd2VyZSBhZGRlZCBvbmUgYnkgb25lIGluIGJv
dGggbm9saWJjIGFuZCBuZXdsaWIKZ2x1ZSBjb2RlLiBUaGlzIG1lYW50IHRoYXQgb25lIGhhZCB0
byBtYWtlIHRoZSBleGFjdCBzYW1lIGNoYW5nZXMgaW4gYm90aApVbmlrcmFmdCBhbmQgbmV3bGli
IHJlcG9zLiBUaGUgbWFqb3IgZHJhd2JhY2sgaXMgdGhhdCBvbmUgY2FuIGZvcmdldCB0bwpkdXBs
aWNhdGUgdGhlIGNoYW5nZXMgaW4gdGhlIG90aGVyIGxpYnJhcnkgYW5kIHRoaXMgaGFzIGFscmVh
ZHkgaGFwcGVuZWQKc2V2ZXJhbCB0aW1lcy4gTm93LCBnaXZlbiB0aGF0IGJvdGggbm9saWJjIGFu
ZCBuZXdsaWIgbWlzcyB0aGVzZSB0aW1lCmZ1bmN0aW9ucywgaXQgbWFrZXMgbW9yZSBzZW5zZSB0
byBwcm92aWRlIGFuIGludGVybmFsIGxpYnJhcnkgZm9yIGFsbCBvZiB0aGVtIC0KaS5lLiBrZWVw
aW5nIHRoZW0gaW4gb25lIHBsYWNlIGluc3RlYWQgb2YgbW9yZS4KClNvbWUgb2YgdGhlIGZ1bmN0
aW9ucyBhcmUgaW1wbGVtZW50ZWQgZnJvbSBzY3JhdGNoLCBidXQgc29tZSBtYXkgYmUgaW1wb3J0
ZWQKZnJvbSBvdGhlciBsaWJyYXJpZXMuIEZvciB0aG9zZSBpbXBvcnRlZCBmcm9tIG11c2wgd2Ug
d2lsbCBrZWVwIHRoZSBzYW1lCmhpZXJhcmNoeSB1bmRlciB0aGUgbXVzbC1pbXBvcnRlZC8gc3Vi
ZGlyZWN0b3J5LCBqdXN0IGxpa2Ugd2UgZG8gaXQgZm9yIG5ld2xpYgpnbHVlIGNvZGUuIFRoYXQn
cyB3aHkgd2UgYWxzbyBhZGQgdGhlIG11c2wgQ09QWVJJR0hULgoKU2lnbmVkLW9mZi1ieTogQ29z
dGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvQ29uZmlnLnVrICAgICAg
ICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYi9NYWtlZmlsZS51ayAgICAgICAgICAgICAgICAg
ICAgfCAgIDEgKwogbGliL3VrdGltZS9Db25maWcudWsgICAgICAgICAgICAgICB8ICAgMyArCiBs
aWIvdWt0aW1lL01ha2VmaWxlLnVrICAgICAgICAgICAgIHwgICA0ICsKIGxpYi91a3RpbWUvZXhw
b3J0c3ltcy51ayAgICAgICAgICAgfCAgIDEgKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL0NP
UFlSSUdIVCB8IDE4OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFu
Z2VkLCAxOTkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvQ29u
ZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9NYWtlZmlsZS51awogY3JlYXRl
IG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvZXhwb3J0c3ltcy51awogY3JlYXRlIG1vZGUgMTAwNjQ0
IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9DT1BZUklHSFQKCmRpZmYgLS1naXQgYS9saWIvQ29u
ZmlnLnVrIGIvbGliL0NvbmZpZy51awppbmRleCAzMGVjMDk0ZC4uZjBkNjIwNTQgMTAwNjQ0Ci0t
LSBhL2xpYi9Db25maWcudWsKKysrIGIvbGliL0NvbmZpZy51awpAQCAtNTMsMyArNTMsNCBAQCBz
b3VyY2UgImxpYi91a25ldGRldi9Db25maWcudWsiCiBzb3VyY2UgImxpYi91azlwL0NvbmZpZy51
ayIKIHNvdXJjZSAibGliL3Bvc2l4LWxpYmRsL0NvbmZpZy51ayIKIHNvdXJjZSAibGliL3VrbGli
cGFyYW0vQ29uZmlnLnVrIgorc291cmNlICJsaWIvdWt0aW1lL0NvbmZpZy51ayIKZGlmZiAtLWdp
dCBhL2xpYi9NYWtlZmlsZS51ayBiL2xpYi9NYWtlZmlsZS51awppbmRleCA4OWE1N2Q3MC4uYTE2
OTcxOTggMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZS51aworKysgYi9saWIvTWFrZWZpbGUudWsK
QEAgLTMwLDMgKzMwLDQgQEAgJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19C
QVNFKS9saWIvdWtuZXRkZXYpKQogJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19V
S19CQVNFKS9saWIvdWs5cCkpCiAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VL
X0JBU0UpL2xpYi9wb3NpeC1saWJkbCkpCiAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09O
RklHX1VLX0JBU0UpL2xpYi91a2xpYnBhcmFtKSkKKyQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIs
JChDT05GSUdfVUtfQkFTRSkvbGliL3VrdGltZSkpCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL0Nv
bmZpZy51ayBiL2xpYi91a3RpbWUvQ29uZmlnLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwLi5hNjhlM2Y0ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91a3RpbWUvQ29uZmln
LnVrCkBAIC0wLDAgKzEsMyBAQAorY29uZmlnIExJQlVLVElNRQorICAgICAgIGJvb2wgInVrdGlt
ZTogVGltZSBmdW5jdGlvbnMiCisgICAgICAgZGVmYXVsdCBuClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9NYWtlZmlsZS51ayBiL2xpYi91a3RpbWUv
TWFrZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjljMWY4YjM1
Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrdGltZS9NYWtlZmlsZS51awpAQCAtMCwwICsxLDQg
QEAKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWt0aW1lLCQoQ09ORklHX0xJQlVLVElNRSkp
KQorCitDSU5DTFVERVMtJChDT05GSUdfTElCVUtUSU1FKSAgICArPSAtSSQoTElCVUtUSU1FX0JB
U0UpL2luY2x1ZGUKK0NYWElOQ0xVREVTLSQoQ09ORklHX0xJQlVLVElNRSkgICs9IC1JJChMSUJV
S1RJTUVfQkFTRSkvaW5jbHVkZQpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9leHBvcnRzeW1zLnVr
IGIvbGliL3VrdGltZS9leHBvcnRzeW1zLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwLi5jODZjM2YzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91a3RpbWUvZXhwb3J0c3lt
cy51awpAQCAtMCwwICsxIEBACitub25lClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm
IC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL0NPUFlSSUdIVCBiL2xpYi91a3RpbWUv
bXVzbC1pbXBvcnRlZC9DT1BZUklHSFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjI1MjVmZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L0NPUFlSSUdIVApAQCAtMCwwICsxLDE4OSBAQAorbXVzbCBhcyBhIHdob2xlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgTUlUIGxpY2Vuc2U6CisKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KK0NvcHlyaWdodCDCqSAyMDA1LTIwMTkgUmljaCBGZWxrZXIsIGV0IGFsLgorCitQZXJtaXNz
aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh
aW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRp
b24gZmlsZXMgKHRoZQorIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv
dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMg
dG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGlj
ZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCitwZXJtaXQg
cGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1Ympl
Y3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKK2luY2x1ZGVkIGluIGFs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUg
U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO
RCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUg
V0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKK0NMQUlNLCBEQU1BR0VT
IE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCitU
T1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRQorU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09G
VFdBUkUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0F1dGhvcnMvY29udHJpYnV0b3JzIGluY2x1ZGU6CisK
K0EuIFdpbGNveAorQWxleCBEb3dhZAorQWxleCBTdXlrb3YKK0FsZXhhbmRlciBNb25ha292CitB
bmRyZSBNY0N1cmR5CitBbmRyZXcgS2VsbGV5CitBbnRob255IEcuIEJhc2lsZQorQXJpYyBCZWxz
aXRvCitBcnZpZCBQaWNjaWFuaQorQmFydG9zeiBCcmFjaGFjemVrCitCZW5qYW1pbiBQZXRlcnNv
bgorQm9iYnkgQmluZ2hhbQorQm9yaXMgQnJlemlsbG9uCitCcmVudCBDb29rCitDaHJpcyBTcGll
Z2VsCitDbMOpbWVudCBWYXNzZXVyCitEYW5pZWwgTWljYXkKK0RhbmllbCBTYWJvZ2FsCitEYXVy
bmltYXRvcgorRGF2aWQgQ2FybGllcgorRGF2aWQgRWRlbHNvaG4KK0RlbnlzIFZsYXNlbmtvCitE
bWl0cnkgSXZhbm92CitEbWl0cnkgVi4gTGV2aW4KK0RyZXcgRGVWYXVsdAorRW1pbCBSZW5uZXIg
QmVydGhpbmcKK0ZhbmdydWkgU29uZworRmVsaXggRmlldGthdQorRmVsaXggSmFuZGEKK0dpYW5s
dWNhIEFuem9saW4KK0hhdWtlIE1laHJ0ZW5zCitIZSBYCitIaWx0am8gUG9zdGh1bWEKK0lzYWFj
IER1bmhhbQorSmF5ZGVlcCBQYXRpbAorSmVucyBHdXN0ZWR0CitKZXJlbXkgSHVudHdvcmsKK0pv
LVBoaWxpcHAgV2ljaAorSm9ha2ltIFNpbmRob2x0CitKb2huIFNwZW5jZXIKK0pvc2lhaCBXb3Jj
ZXN0ZXIKK0p1bGllbiBSYW1zZWllcgorSnVzdGluIENvcm1hY2sKK0thYXJsZSBSaXR2YW5lbgor
S2hlbSBSYWoKK0t5bGllIE1jQ2xhaW4KK0xlYWggTmV1a2lyY2hlbgorTHVjYSBCYXJiYXRvCitM
dWthIFBlcmtvdgorTSBGYXJrYXMtRHljayAoU3RyYWtlKQorTWFoZXNoIEJvZGFwYXRpCitNYXJr
dXMgV2ljaG1hbm4KK01hc2Fub3JpIE9naW5vCitNaWNoYWVsIENsYXJrCitNaWNoYWVsIEZvcm5l
eQorTWlraGFpbCBLcmVtbnlvdgorTmF0YW5hZWwgQ29wYQorTmljaG9sYXMgSi4gS2Fpbgorb3Jj
CitQYXNjYWwgQ3VvcQorUGF0cmljayBPcHBlbmxhbmRlcgorUGV0ciBIb3NlaworUGV0ciBTa29j
aWsKK1BpZXJyZSBDYXJyaWVyCitSZWluaSBVcmJhbgorUmljaCBGZWxrZXIKK1JpY2hhcmQgUGVu
bmluZ3RvbgorUnlhbiBGYWlyZmF4CitTYW11ZWwgSG9sbGFuZAorU2VnZXYgRmluZXIKK1NoaXoK
K3NpbgorU29sYXIgRGVzaWduZXIKK1N0ZWZhbiBLcmlzdGlhbnNzb24KK1N0ZWZhbiBPJ1JlYXIK
K1N6YWJvbGNzIE5hZ3kKK1RpbW8gVGVyw6RzCitUcnV0eiBCZWhuCitWYWxlbnRpbiBPY2hzCitX
aWxsIERpZXR6CitXaWxsaWFtIEhhZGRvbgorV2lsbGlhbSBQaXRjb2NrCisKK1BvcnRpb25zIG9m
IHRoaXMgc29mdHdhcmUgYXJlIGRlcml2ZWQgZnJvbSB0aGlyZC1wYXJ0eSB3b3JrcyBsaWNlbnNl
ZAordW5kZXIgdGVybXMgY29tcGF0aWJsZSB3aXRoIHRoZSBhYm92ZSBNSVQgbGljZW5zZToKKwor
VGhlIFRSRSByZWd1bGFyIGV4cHJlc3Npb24gaW1wbGVtZW50YXRpb24gKHNyYy9yZWdleC9yZWcq
IGFuZAorc3JjL3JlZ2V4L3RyZSopIGlzIENvcHlyaWdodCDCqSAyMDAxLTIwMDggVmlsbGUgTGF1
cmlrYXJpIGFuZCBsaWNlbnNlZAordW5kZXIgYSAyLWNsYXVzZSBCU0QgbGljZW5zZSAobGljZW5z
ZSB0ZXh0IGluIHRoZSBzb3VyY2UgZmlsZXMpLiBUaGUKK2luY2x1ZGVkIHZlcnNpb24gaGFzIGJl
ZW4gaGVhdmlseSBtb2RpZmllZCBieSBSaWNoIEZlbGtlciBpbiAyMDEyLCBpbgordGhlIGludGVy
ZXN0cyBvZiBzaXplLCBzaW1wbGljaXR5LCBhbmQgbmFtZXNwYWNlIGNsZWFubGluZXNzLgorCitN
dWNoIG9mIHRoZSBtYXRoIGxpYnJhcnkgY29kZSAoc3JjL21hdGgvKiBhbmQgc3JjL2NvbXBsZXgv
KikgaXMKK0NvcHlyaWdodCDCqSAxOTkzLDIwMDQgU3VuIE1pY3Jvc3lzdGVtcyBvcgorQ29weXJp
Z2h0IMKpIDIwMDMtMjAxMSBEYXZpZCBTY2h1bHR6IG9yCitDb3B5cmlnaHQgwqkgMjAwMy0yMDA5
IFN0ZXZlbiBHLiBLYXJnbCBvcgorQ29weXJpZ2h0IMKpIDIwMDMtMjAwOSBCcnVjZSBELiBFdmFu
cyBvcgorQ29weXJpZ2h0IMKpIDIwMDggU3RlcGhlbiBMLiBNb3NoaWVyCithbmQgbGFiZWxsZWQg
YXMgc3VjaCBpbiBjb21tZW50cyBpbiB0aGUgaW5kaXZpZHVhbCBzb3VyY2UgZmlsZXMuIEFsbAor
aGF2ZSBiZWVuIGxpY2Vuc2VkIHVuZGVyIGV4dHJlbWVseSBwZXJtaXNzaXZlIHRlcm1zLgorCitU
aGUgQVJNIG1lbWNweSBjb2RlIChzcmMvc3RyaW5nL2FybS9tZW1jcHlfZWwuUykgaXMgQ29weXJp
Z2h0IMKpIDIwMDgKK1RoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgYW5kIGlzIGxpY2Vu
c2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0QKK2xpY2Vuc2UuIEl0IHdhcyB0YWtlbiBmcm9tIEJp
b25pYyBsaWJjLCB1c2VkIG9uIEFuZHJvaWQuCisKK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiBERVMg
Zm9yIGNyeXB0IChzcmMvY3J5cHQvY3J5cHRfZGVzLmMpIGlzCitDb3B5cmlnaHQgwqkgMTk5NCBE
YXZpZCBCdXJyZW4uIEl0IGlzIGxpY2Vuc2VkIHVuZGVyIGEgQlNEIGxpY2Vuc2UuCisKK1RoZSBp
bXBsZW1lbnRhdGlvbiBvZiBibG93ZmlzaCBjcnlwdCAoc3JjL2NyeXB0L2NyeXB0X2Jsb3dmaXNo
LmMpIHdhcworb3JpZ2luYWxseSB3cml0dGVuIGJ5IFNvbGFyIERlc2lnbmVyIGFuZCBwbGFjZWQg
aW50byB0aGUgcHVibGljCitkb21haW4uIFRoZSBjb2RlIGFsc28gY29tZXMgd2l0aCBhIGZhbGxi
YWNrIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IgdXNlCitpbiBqdXJpc2RpY3Rpb25zIHRoYXQgbWF5
IG5vdCByZWNvZ25pemUgdGhlIHB1YmxpYyBkb21haW4uCisKK1RoZSBzbW9vdGhzb3J0IGltcGxl
bWVudGF0aW9uIChzcmMvc3RkbGliL3Fzb3J0LmMpIGlzIENvcHlyaWdodCDCqSAyMDExCitWYWxl
bnRpbiBPY2hzIGFuZCBpcyBsaWNlbnNlZCB1bmRlciBhbiBNSVQtc3R5bGUgbGljZW5zZS4KKwor
VGhlIHg4Nl82NCBwb3J0IHdhcyB3cml0dGVuIGJ5IE5pY2hvbGFzIEouIEthaW4gYW5kIGlzIGxp
Y2Vuc2VkIHVuZGVyCit0aGUgc3RhbmRhcmQgTUlUIHRlcm1zLgorCitUaGUgbWlwcyBhbmQgbWlj
cm9ibGF6ZSBwb3J0cyB3ZXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBSaWNoYXJkCitQZW5uaW5n
dG9uIGZvciB1c2UgaW4gdGhlIGVsbGNjIHByb2plY3QuIFRoZSBvcmlnaW5hbCBjb2RlIHdhcyBh
ZGFwdGVkCitieSBSaWNoIEZlbGtlciBmb3IgYnVpbGQgc3lzdGVtIGFuZCBjb2RlIGNvbnZlbnRp
b25zIGR1cmluZyB1cHN0cmVhbQoraW50ZWdyYXRpb24uIEl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRo
ZSBzdGFuZGFyZCBNSVQgdGVybXMuCisKK1RoZSBtaXBzNjQgcG9ydCB3YXMgY29udHJpYnV0ZWQg
YnkgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIGFuZCBpcworbGljZW5zZWQgdW5kZXIgdGhlIHN0
YW5kYXJkIE1JVCB0ZXJtcy4KKworVGhlIHBvd2VycGMgcG9ydCB3YXMgYWxzbyBvcmlnaW5hbGx5
IHdyaXR0ZW4gYnkgUmljaGFyZCBQZW5uaW5ndG9uLAorYW5kIGxhdGVyIHN1cHBsZW1lbnRlZCBh
bmQgaW50ZWdyYXRlZCBieSBKb2huIFNwZW5jZXIuIEl0IGlzIGxpY2Vuc2VkCit1bmRlciB0aGUg
c3RhbmRhcmQgTUlUIHRlcm1zLgorCitBbGwgb3RoZXIgZmlsZXMgd2hpY2ggaGF2ZSBubyBjb3B5
cmlnaHQgY29tbWVudHMgYXJlIG9yaWdpbmFsIHdvcmtzCitwcm9kdWNlZCBzcGVjaWZpY2FsbHkg
Zm9yIHVzZSBhcyBwYXJ0IG9mIHRoaXMgbGlicmFyeSwgd3JpdHRlbiBlaXRoZXIKK2J5IFJpY2gg
RmVsa2VyLCB0aGUgbWFpbiBhdXRob3Igb2YgdGhlIGxpYnJhcnksIG9yIGJ5IG9uZSBvciBtb3Jl
Citjb250aWJ1dG9ycyBsaXN0ZWQgYWJvdmUuIERldGFpbHMgb24gYXV0aG9yc2hpcCBvZiBpbmRp
dmlkdWFsIGZpbGVzCitjYW4gYmUgZm91bmQgaW4gdGhlIGdpdCB2ZXJzaW9uIGNvbnRyb2wgaGlz
dG9yeSBvZiB0aGUgcHJvamVjdC4gVGhlCitvbWlzc2lvbiBvZiBjb3B5cmlnaHQgYW5kIGxpY2Vu
c2UgY29tbWVudHMgaW4gZWFjaCBmaWxlIGlzIGluIHRoZQoraW50ZXJlc3Qgb2Ygc291cmNlIHRy
ZWUgc2l6ZS4KKworSW4gYWRkaXRpb24sIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9y
IGFsbCBwdWJsaWMgaGVhZGVyIGZpbGVzCisoaW5jbHVkZS8qIGFuZCBhcmNoLyovYml0cy8qKSBh
bmQgY3J0IGZpbGVzIGludGVuZGVkIHRvIGJlIGxpbmtlZCBpbnRvCithcHBsaWNhdGlvbnMgKGNy
dC8qLCBsZHNvL2Rsc3RhcnQuYywgYW5kIGFyY2gvKi9jcnRfYXJjaC5oKSB0byBvbWl0Cit0aGUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgcGVybWlzc2lvbiBub3RpY2Ugb3RoZXJ3aXNlIHJlcXVpcmVk
IGJ5IHRoZQorbGljZW5zZSwgYW5kIHRvIHVzZSB0aGVzZSBmaWxlcyB3aXRob3V0IGFueSByZXF1
aXJlbWVudCBvZgorYXR0cmlidXRpb24uIFRoZXNlIGZpbGVzIGluY2x1ZGUgc3Vic3RhbnRpYWwg
Y29udHJpYnV0aW9ucyBmcm9tOgorCitCb2JieSBCaW5naGFtCitKb2huIFNwZW5jZXIKK05pY2hv
bGFzIEouIEthaW4KK1JpY2ggRmVsa2VyCitSaWNoYXJkIFBlbm5pbmd0b24KK1N0ZWZhbiBLcmlz
dGlhbnNzb24KK1N6YWJvbGNzIE5hZ3kKKworYWxsIG9mIHdob20gaGF2ZSBleHBsaWNpdGx5IGdy
YW50ZWQgc3VjaCBwZXJtaXNzaW9uLgorCitUaGlzIGZpbGUgcHJldmlvdXNseSBjb250YWluZWQg
dGV4dCBleHByZXNzaW5nIGEgYmVsaWVmIHRoYXQgbW9zdCBvZgordGhlIGZpbGVzIGNvdmVyZWQg
YnkgdGhlIGFib3ZlIGV4Y2VwdGlvbiB3ZXJlIHN1ZmZpY2llbnRseSB0cml2aWFsIG5vdAordG8g
YmUgc3ViamVjdCB0byBjb3B5cmlnaHQsIHJlc3VsdGluZyBpbiBjb25mdXNpb24gb3ZlciB3aGV0
aGVyIGl0CituZWdhdGVkIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGluIHRoZSBsaWNlbnNlLiBJ
biB0aGUgc3Bpcml0IG9mCitwZXJtaXNzaXZlIGxpY2Vuc2luZywgYW5kIG9mIG5vdCBoYXZpbmcg
bGljZW5zaW5nIGlzc3VlcyBiZWluZyBhbgorb2JzdGFjbGUgdG8gYWRvcHRpb24sIHRoYXQgdGV4
dCBoYXMgYmVlbiByZW1vdmVkLgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 13:06:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 13:06:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7JN5-0001db-2Q; Mon, 09 Sep 2019 13:06:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7JN3-0001dW-KB
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 13:06:17 +0000
X-Inumbo-ID: 9b538bc4-d302-11e9-b299-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9b538bc4-d302-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 13:06:16 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id q12so14601100wmj.4
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 06:06:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=2jZ40K2kk17sv3UuTN6hFVZzP+c8vWELpEsZ/VKjtPM=;
 b=Ho3qqQ18itkTIB0g+jD/gs0XWAcrhjzWHcP+s/gdr0cMsiG89Ib8u2cm4IUcT9lxH+
 O2plXvELj29gx2JIT8UVkSnlIjMudU4db7zwbXRoaQMNg4TGp0V63BvTfFmbbFVyoZgj
 0N4LyNg2aMeuMQ93ruF1QBvEPIV4PxbpPYHwiBlh6vGMrfezCTjejosWUvPQyL6xCN1I
 6htzpwBpKTVYvPmgNYIpV1zdW4MFL3IXmzYmcZFe+s2thOlqF4W/RRFe84zsnYbM2cis
 w/65nBZGCSLHRozZ/7SjSduORSFs8hizVLWtq5cHjPoyG0+B7MlPKLCEykFGxlE7df31
 rqQw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=2jZ40K2kk17sv3UuTN6hFVZzP+c8vWELpEsZ/VKjtPM=;
 b=X0Wh2NeJxcI+YHg5JDvpzutax5ms7vY8+v3Alqhav9aAaqoige9iF26DtqBE/w3gN0
 KdXxKOFqbSJx/ddK+enjCgFOdqGcaovO51ccXk6185rNcO5/6W2NVdlWNLZGSScmnOjQ
 O9Ekh3q/lZ/klhNIAlfcT+Ha7C4BfDmztKbfNfUv9xheMkX2jNFXFUfzfeZfDejx5xou
 hKzXhWVYb0IOQPiOrIxk64qmAumGdtqWKlceAISIglXbaSBuzqIO0MBMbNzkUWCSKeXE
 rF3sBotH1KyEjAmMaBptITqkDvwp/Fs1ntoQ5EmIQSF7Qs9Mo8nOqcVc2h0JELd/UZSP
 3FIA==
X-Gm-Message-State: APjAAAUvP8Y2vyQ/QLFQQ7RHgUy7Yt6+FVWh1z4ekz3VgHD1VGOBBW7U
 Mu7e9ScYqZCG5LPw6DVDDQXJDVjl
X-Google-Smtp-Source: APXvYqzM2uXVBuBRQ92iBd8tWv6oVOKpKDuoxnyY2rFwv1J0+2J09270djYL2mbMK0bYoN2eePKikw==
X-Received: by 2002:a05:600c:214:: with SMTP id
 20mr19910736wmi.112.1568034375174; 
 Mon, 09 Sep 2019 06:06:15 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.104])
 by smtp.gmail.com with ESMTPSA id n2sm11583218wro.52.2019.09.09.06.06.14
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 06:06:14 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190905001935.29223-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <ab3e88ae-f520-e577-1ee1-0a3030fb5e98@gmail.com>
Date: Mon, 9 Sep 2019 16:06:13 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190905001935.29223-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBNEWLIBC PATCH 1/1] Import the
 timegm function from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgVmxhZCwKClRoYW5rcyBmb3IgdGhpcyBwYXRjaC4gUGxlYXNlIHJlc2VuZCBpdCBmb3IgdGhl
IHVrdGltZSBpbnRlcm5hbCBsaWJyYXJ5CmFzIHNvb24gYXMgaXQgZ2V0cyB1cHN0cmVhbWVkIGFu
ZCBkb24ndCBmb3JnZXQgdG8gYWRkIHRoZSBoZWFkZXIgd2l0aAp0aGUgZGVjbGFyYXRpb25zIHRv
by4KCkNoZWVycywKQ29zdGluCgpPbiA5LzUvMTkgMzoyMCBBTSwgVmxhZC1BbmRyZWkgQsSCRE9J
VSAoNzg2OTIpIHdyb3RlOgo+IENvcGllZCBhcyBpcyBmcm9tIHRoZSBvZmZpY2lhbCBtdXNsIGdp
dCBtaXJyb3IKPiBnaXQ6Ly9naXQubXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQu
Cj4gVGhlIG9ubHkgY2hhbmdlIG1hZGUgdG8gdGhlIGZpbGVzIHdhcyB0byByZW1vdmUKPiB0aGUg
ZGVwZW5kZW5jeSB1cG9uIHRoZSB0aW1lX2ltcGwuaCBoZWFkZXIuCj4gCj4gU2lnbmVkLW9mZi1i
eTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJv
Pgo+IC0tLQo+ICBNYWtlZmlsZS51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUg
KysKPiAgbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX21vbnRoX3RvX3NlY3MuYyB8IDEwICsrKwo+
ICBtdXNsLWltcG9ydGVkL3NyYy90aW1lL19fc2Vjc190b190bS5jICAgIHwgODEgKysrKysrKysr
KysrKysrKysrKysrKysrCj4gIG11c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX190bV90b19zZWNzLmMg
ICAgfCAyNiArKysrKysrKwo+ICBtdXNsLWltcG9ydGVkL3NyYy90aW1lL19feWVhcl90b19zZWNz
LmMgIHwgNDcgKysrKysrKysrKysrKysKPiAgbXVzbC1pbXBvcnRlZC9zcmMvdGltZS90aW1lZ20u
YyAgICAgICAgICB8IDE3ICsrKysrCj4gIDYgZmlsZXMgY2hhbmdlZCwgMTg2IGluc2VydGlvbnMo
KykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG11c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX19tb250aF90
b19zZWNzLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG11c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX19z
ZWNzX3RvX3RtLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG11c2wtaW1wb3J0ZWQvc3JjL3RpbWUv
X190bV90b19zZWNzLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG11c2wtaW1wb3J0ZWQvc3JjL3Rp
bWUvX195ZWFyX3RvX3NlY3MuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbXVzbC1pbXBvcnRlZC9z
cmMvdGltZS90aW1lZ20uYwo+IAo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxl
LnVrCj4gaW5kZXggMDFkYTcyNC4uMWM5ZTZiYiAxMDA2NDQKPiAtLS0gYS9NYWtlZmlsZS51awo+
ICsrKyBiL01ha2VmaWxlLnVrCj4gQEAgLTEyNyw2ICsxMjcsMTEgQEAgTElCTkVXTElCR0xVRV9T
UkNTLXkgKz0gJChMSUJORVdMSUJDX0JBU0UpL21udGVudC5jCj4gIExJQk5FV0xJQkdMVUVfU1JD
Uy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy9taXNjL3N5c2xvZy5j
Cj4gIExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9y
dGVkL3NyYy90ZXJtaW9zL3Rjc2V0YXR0ci5jCj4gIExJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQo
TElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy90ZXJtaW9zL3RjZ2V0YXR0ci5jCj4g
K0xJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVk
L3NyYy90aW1lL19fbW9udGhfdG9fc2Vjcy5jCj4gK0xJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQo
TElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy90aW1lL19fc2Vjc190b190bS5jCj4g
K0xJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVk
L3NyYy90aW1lL3RpbWVnbS5jCj4gK0xJQk5FV0xJQkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElC
Q19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy90aW1lL19fdG1fdG9fc2Vjcy5jCj4gK0xJQk5FV0xJ
QkdMVUVfU1JDUy15ICs9ICQoTElCTkVXTElCQ19CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy90aW1l
L19feWVhcl90b19zZWNzLmMKPiAgCj4gICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gICMgTmV3
bGliL2xpYmMgY29kZSAtLSBhcmd6Cj4gZGlmZiAtLWdpdCBhL211c2wtaW1wb3J0ZWQvc3JjL3Rp
bWUvX19tb250aF90b19zZWNzLmMgYi9tdXNsLWltcG9ydGVkL3NyYy90aW1lL19fbW9udGhfdG9f
c2Vjcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi40MzI0OGZiCj4g
LS0tIC9kZXYvbnVsbAo+ICsrKyBiL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX19tb250aF90b19z
ZWNzLmMKPiBAQCAtMCwwICsxLDEwIEBACj4gK2ludCBfX21vbnRoX3RvX3NlY3MoaW50IG1vbnRo
LCBpbnQgaXNfbGVhcCkKPiArewo+ICsJc3RhdGljIGNvbnN0IGludCBzZWNzX3Rocm91Z2hfbW9u
dGhbXSA9IHsKPiArCQkwLCAzMSo4NjQwMCwgNTkqODY0MDAsIDkwKjg2NDAwLAo+ICsJCTEyMCo4
NjQwMCwgMTUxKjg2NDAwLCAxODEqODY0MDAsIDIxMio4NjQwMCwKPiArCQkyNDMqODY0MDAsIDI3
Myo4NjQwMCwgMzA0Kjg2NDAwLCAzMzQqODY0MDAgfTsKPiArCWludCB0ID0gc2Vjc190aHJvdWdo
X21vbnRoW21vbnRoXTsKPiArCWlmIChpc19sZWFwICYmIG1vbnRoID49IDIpIHQrPTg2NDAwOwo+
ICsJcmV0dXJuIHQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9f
X3NlY3NfdG9fdG0uYyBiL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX19zZWNzX3RvX3RtLmMKPiBu
ZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjFiN2JmNzAKPiAtLS0gL2Rldi9u
dWxsCj4gKysrIGIvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9fX3NlY3NfdG9fdG0uYwo+IEBAIC0w
LDAgKzEsODEgQEAKPiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICsjaW5jbHVkZSA8dGltZS5oPgo+
ICsKPiArLyogMjAwMC0wMy0wMSAobW9kIDQwMCB5ZWFyLCBpbW1lZGlhdGVseSBhZnRlciBmZWIy
OSAqLwo+ICsjZGVmaW5lIExFQVBPQ0ggKDk0NjY4NDgwMExMICsgODY0MDAqKDMxKzI5KSkKPiAr
Cj4gKyNkZWZpbmUgREFZU19QRVJfNDAwWSAoMzY1KjQwMCArIDk3KQo+ICsjZGVmaW5lIERBWVNf
UEVSXzEwMFkgKDM2NSoxMDAgKyAyNCkKPiArI2RlZmluZSBEQVlTX1BFUl80WSAgICgzNjUqNCAg
ICsgMSkKPiArCj4gK2ludCBfX3NlY3NfdG9fdG0obG9uZyBsb25nIHQsIHN0cnVjdCB0bSAqdG0p
Cj4gK3sKPiArCWxvbmcgbG9uZyBkYXlzLCBzZWNzOwo+ICsJaW50IHJlbWRheXMsIHJlbXNlY3Ms
IHJlbXllYXJzOwo+ICsJaW50IHFjX2N5Y2xlcywgY19jeWNsZXMsIHFfY3ljbGVzOwo+ICsJaW50
IHllYXJzLCBtb250aHM7Cj4gKwlpbnQgd2RheSwgeWRheSwgbGVhcDsKPiArCXN0YXRpYyBjb25z
dCBjaGFyIGRheXNfaW5fbW9udGhbXSA9IHszMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMSwz
MSwyOX07Cj4gKwo+ICsJLyogUmVqZWN0IHRpbWVfdCB2YWx1ZXMgd2hvc2UgeWVhciB3b3VsZCBv
dmVyZmxvdyBpbnQgKi8KPiArCWlmICh0IDwgSU5UX01JTiAqIDMxNjIyNDAwTEwgfHwgdCA+IElO
VF9NQVggKiAzMTYyMjQwMExMKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlzZWNzID0gdCAtIExF
QVBPQ0g7Cj4gKwlkYXlzID0gc2VjcyAvIDg2NDAwOwo+ICsJcmVtc2VjcyA9IHNlY3MgJSA4NjQw
MDsKPiArCWlmIChyZW1zZWNzIDwgMCkgewo+ICsJCXJlbXNlY3MgKz0gODY0MDA7Cj4gKwkJZGF5
cy0tOwo+ICsJfQo+ICsKPiArCXdkYXkgPSAoMytkYXlzKSU3Owo+ICsJaWYgKHdkYXkgPCAwKSB3
ZGF5ICs9IDc7Cj4gKwo+ICsJcWNfY3ljbGVzID0gZGF5cyAvIERBWVNfUEVSXzQwMFk7Cj4gKwly
ZW1kYXlzID0gZGF5cyAlIERBWVNfUEVSXzQwMFk7Cj4gKwlpZiAocmVtZGF5cyA8IDApIHsKPiAr
CQlyZW1kYXlzICs9IERBWVNfUEVSXzQwMFk7Cj4gKwkJcWNfY3ljbGVzLS07Cj4gKwl9Cj4gKwo+
ICsJY19jeWNsZXMgPSByZW1kYXlzIC8gREFZU19QRVJfMTAwWTsKPiArCWlmIChjX2N5Y2xlcyA9
PSA0KSBjX2N5Y2xlcy0tOwo+ICsJcmVtZGF5cyAtPSBjX2N5Y2xlcyAqIERBWVNfUEVSXzEwMFk7
Cj4gKwo+ICsJcV9jeWNsZXMgPSByZW1kYXlzIC8gREFZU19QRVJfNFk7Cj4gKwlpZiAocV9jeWNs
ZXMgPT0gMjUpIHFfY3ljbGVzLS07Cj4gKwlyZW1kYXlzIC09IHFfY3ljbGVzICogREFZU19QRVJf
NFk7Cj4gKwo+ICsJcmVteWVhcnMgPSByZW1kYXlzIC8gMzY1Owo+ICsJaWYgKHJlbXllYXJzID09
IDQpIHJlbXllYXJzLS07Cj4gKwlyZW1kYXlzIC09IHJlbXllYXJzICogMzY1Owo+ICsKPiArCWxl
YXAgPSAhcmVteWVhcnMgJiYgKHFfY3ljbGVzIHx8ICFjX2N5Y2xlcyk7Cj4gKwl5ZGF5ID0gcmVt
ZGF5cyArIDMxICsgMjggKyBsZWFwOwo+ICsJaWYgKHlkYXkgPj0gMzY1K2xlYXApIHlkYXkgLT0g
MzY1K2xlYXA7Cj4gKwo+ICsJeWVhcnMgPSByZW15ZWFycyArIDQqcV9jeWNsZXMgKyAxMDAqY19j
eWNsZXMgKyA0MDAqcWNfY3ljbGVzOwo+ICsKPiArCWZvciAobW9udGhzPTA7IGRheXNfaW5fbW9u
dGhbbW9udGhzXSA8PSByZW1kYXlzOyBtb250aHMrKykKPiArCQlyZW1kYXlzIC09IGRheXNfaW5f
bW9udGhbbW9udGhzXTsKPiArCj4gKwlpZiAoeWVhcnMrMTAwID4gSU5UX01BWCB8fCB5ZWFycysx
MDAgPCBJTlRfTUlOKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwl0bS0+dG1feWVhciA9IHllYXJz
ICsgMTAwOwo+ICsJdG0tPnRtX21vbiA9IG1vbnRocyArIDI7Cj4gKwlpZiAodG0tPnRtX21vbiA+
PSAxMikgewo+ICsJCXRtLT50bV9tb24gLT0xMjsKPiArCQl0bS0+dG1feWVhcisrOwo+ICsJfQo+
ICsJdG0tPnRtX21kYXkgPSByZW1kYXlzICsgMTsKPiArCXRtLT50bV93ZGF5ID0gd2RheTsKPiAr
CXRtLT50bV95ZGF5ID0geWRheTsKPiArCj4gKwl0bS0+dG1faG91ciA9IHJlbXNlY3MgLyAzNjAw
Owo+ICsJdG0tPnRtX21pbiA9IHJlbXNlY3MgLyA2MCAlIDYwOwo+ICsJdG0tPnRtX3NlYyA9IHJl
bXNlY3MgJSA2MDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+IGRpZmYgLS1naXQgYS9tdXNsLWlt
cG9ydGVkL3NyYy90aW1lL19fdG1fdG9fc2Vjcy5jIGIvbXVzbC1pbXBvcnRlZC9zcmMvdGltZS9f
X3RtX3RvX3NlY3MuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzQ0
OGQ2Nwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9tdXNsLWltcG9ydGVkL3NyYy90aW1lL19fdG1f
dG9fc2Vjcy5jCj4gQEAgLTAsMCArMSwyNiBAQAo+ICsjaW5jbHVkZSA8dGltZS5oPgo+ICsKPiAr
I2RlZmluZSBMRUFQT0NIICg5NDY2ODQ4MDBMTCArIDg2NDAwKigzMSsyOSkpCj4gKwo+ICtsb25n
IGxvbmcgX190bV90b19zZWNzKGNvbnN0IHN0cnVjdCB0bSAqdG0pCj4gK3sKPiArCWludCBpc19s
ZWFwOwo+ICsJbG9uZyBsb25nIHllYXIgPSB0bS0+dG1feWVhcjsKPiArCWludCBtb250aCA9IHRt
LT50bV9tb247Cj4gKwlpZiAobW9udGggPj0gMTIgfHwgbW9udGggPCAwKSB7Cj4gKwkJaW50IGFk
aiA9IG1vbnRoIC8gMTI7Cj4gKwkJbW9udGggJT0gMTI7Cj4gKwkJaWYgKG1vbnRoIDwgMCkgewo+
ICsJCQlhZGotLTsKPiArCQkJbW9udGggKz0gMTI7Cj4gKwkJfQo+ICsJCXllYXIgKz0gYWRqOwo+
ICsJfQo+ICsJbG9uZyBsb25nIHQgPSBfX3llYXJfdG9fc2Vjcyh5ZWFyLCAmaXNfbGVhcCk7Cj4g
Kwl0ICs9IF9fbW9udGhfdG9fc2Vjcyhtb250aCwgaXNfbGVhcCk7Cj4gKwl0ICs9IDg2NDAwTEwg
KiAodG0tPnRtX21kYXktMSk7Cj4gKwl0ICs9IDM2MDBMTCAqIHRtLT50bV9ob3VyOwo+ICsJdCAr
PSA2MExMICogdG0tPnRtX21pbjsKPiArCXQgKz0gdG0tPnRtX3NlYzsKPiArCXJldHVybiB0Owo+
ICt9Cj4gZGlmZiAtLWdpdCBhL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX195ZWFyX3RvX3NlY3Mu
YyBiL211c2wtaW1wb3J0ZWQvc3JjL3RpbWUvX195ZWFyX3RvX3NlY3MuYwo+IG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMjgyNGVjNgo+IC0tLSAvZGV2L251bGwKPiArKysg
Yi9tdXNsLWltcG9ydGVkL3NyYy90aW1lL19feWVhcl90b19zZWNzLmMKPiBAQCAtMCwwICsxLDQ3
IEBACj4gK2xvbmcgbG9uZyBfX3llYXJfdG9fc2Vjcyhsb25nIGxvbmcgeWVhciwgaW50ICppc19s
ZWFwKQo+ICt7Cj4gKwlpZiAoeWVhci0yVUxMIDw9IDEzNikgewo+ICsJCWludCB5ID0geWVhcjsK
PiArCQlpbnQgbGVhcHMgPSAoeS02OCk+PjI7Cj4gKwkJaWYgKCEoKHktNjgpJjMpKSB7Cj4gKwkJ
CWxlYXBzLS07Cj4gKwkJCWlmIChpc19sZWFwKSAqaXNfbGVhcCA9IDE7Cj4gKwkJfSBlbHNlIGlm
IChpc19sZWFwKSAqaXNfbGVhcCA9IDA7Cj4gKwkJcmV0dXJuIDMxNTM2MDAwKih5LTcwKSArIDg2
NDAwKmxlYXBzOwo+ICsJfQo+ICsKPiArCWludCBjeWNsZXMsIGNlbnR1cmllcywgbGVhcHMsIHJl
bTsKPiArCj4gKwlpZiAoIWlzX2xlYXApIGlzX2xlYXAgPSAmKGludCl7MH07Cj4gKwljeWNsZXMg
PSAoeWVhci0xMDApIC8gNDAwOwo+ICsJcmVtID0gKHllYXItMTAwKSAlIDQwMDsKPiArCWlmIChy
ZW0gPCAwKSB7Cj4gKwkJY3ljbGVzLS07Cj4gKwkJcmVtICs9IDQwMDsKPiArCX0KPiArCWlmICgh
cmVtKSB7Cj4gKwkJKmlzX2xlYXAgPSAxOwo+ICsJCWNlbnR1cmllcyA9IDA7Cj4gKwkJbGVhcHMg
PSAwOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAocmVtID49IDIwMCkgewo+ICsJCQlpZiAocmVtID49
IDMwMCkgY2VudHVyaWVzID0gMywgcmVtIC09IDMwMDsKPiArCQkJZWxzZSBjZW50dXJpZXMgPSAy
LCByZW0gLT0gMjAwOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWlmIChyZW0gPj0gMTAwKSBjZW50dXJp
ZXMgPSAxLCByZW0gLT0gMTAwOwo+ICsJCQllbHNlIGNlbnR1cmllcyA9IDA7Cj4gKwkJfQo+ICsJ
CWlmICghcmVtKSB7Cj4gKwkJCSppc19sZWFwID0gMDsKPiArCQkJbGVhcHMgPSAwOwo+ICsJCX0g
ZWxzZSB7Cj4gKwkJCWxlYXBzID0gcmVtIC8gNFU7Cj4gKwkJCXJlbSAlPSA0VTsKPiArCQkJKmlz
X2xlYXAgPSAhcmVtOwo+ICsJCX0KPiArCX0KPiArCj4gKwlsZWFwcyArPSA5NypjeWNsZXMgKyAy
NCpjZW50dXJpZXMgLSAqaXNfbGVhcDsKPiArCj4gKwlyZXR1cm4gKHllYXItMTAwKSAqIDMxNTM2
MDAwTEwgKyBsZWFwcyAqIDg2NDAwTEwgKyA5NDY2ODQ4MDAgKyA4NjQwMDsKPiArfQo+IGRpZmYg
LS1naXQgYS9tdXNsLWltcG9ydGVkL3NyYy90aW1lL3RpbWVnbS5jIGIvbXVzbC1pbXBvcnRlZC9z
cmMvdGltZS90aW1lZ20uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4u
YTA5ZGNjMQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9tdXNsLWltcG9ydGVkL3NyYy90aW1lL3Rp
bWVnbS5jCj4gQEAgLTAsMCArMSwxNyBAQAo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1
ZGUgPHRpbWUuaD4KPiArCj4gK2V4dGVybiBjb25zdCBjaGFyIF9fZ210W107Cj4gKwo+ICt0aW1l
X3QgdGltZWdtKHN0cnVjdCB0bSAqdG0pCj4gK3sKPiArCXN0cnVjdCB0bSBuZXc7Cj4gKwlsb25n
IGxvbmcgdCA9IF9fdG1fdG9fc2Vjcyh0bSk7Cj4gKwlpZiAoX19zZWNzX3RvX3RtKHQsICZuZXcp
IDwgMCkgewo+ICsJCWVycm5vID0gRU9WRVJGTE9XOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiAr
CSp0bSA9IG5ldzsKPiArCXRtLT50bV9pc2RzdCA9IDA7Cj4gKwlyZXR1cm4gdDsKPiArfQo+IAoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 13:18:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 13:18:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7JZD-0002V1-L2; Mon, 09 Sep 2019 13:18:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7JZD-0002Uw-3I
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 13:18:51 +0000
X-Inumbo-ID: 5bbcd2f2-d304-11e9-978d-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.55]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5bbcd2f2-d304-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 13:18:49 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Lb4If34rDG/ss/OJCWewX6HO/zQMu1nTajgQn9CF/WAoH5FxRZcgC/d90+D9JT2mR+FIe0Y1qImtS8H5yhSbHAse8Mj9JfUhlZNXzFkezew+VQ2+LlthUxhXOJbNQjtlLYW6PpYgSfx2H8QM49N9oa8LVeU3T5376q1AG5kMQusANvupF03d/Sqo3YSpS5ust87uqvCABrkLVii/eTB4EGy0LrvVjKFUVuSMT1kfXjyYLWobM1Hf+y/NEk/ralZWcFPfnycV7YDrpXNDCdvU4jvpaOq1Iv2jw/lGfAIfnvu3fxb3v/1UUiz7ktuAew1xj0QfJVVrDpObncyHb47hAw==
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=+n3Mt67l2a+/C++vdL6x+jWwbY1mzn+elszNnWZpYlo=;
 b=LRxHnaLWeh8w1IR5Et4xsjRodw3OvpEU8Bs6FGx1ma2nOPdG9L+MxVlCDJknY4T/Xf+SOTD8VlwgPyvvRBXLrr4v5R99Y3Ld3hsIg/BMUJba7uvgW1ua7M2pdNBMz04MT6P/P3TWJayXg6htdYtUabk528As7ooeZcm2mWY/96y2wBt0gk3ewvk8PRa5BKC0yhYZrORHc/rR1bFrPR2jKP8eP+n0z/jaueRagCvpbRnyZeewYhv/wAtkOeWJ9k3AvLbvHv0+GI3O4yzeDA+QKbQuHOWXI2lLDA2W71j5vn09Ox3ufwYGQqFEbceZd+0O9aTw2kro9BLETLmer6L4Mw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5097.eurprd01.prod.exchangelabs.com (20.177.210.15) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Mon, 9 Sep
 2019 13:18:47 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 13:18:46 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 1/1] Implement sethostname and uname
Thread-Index: AQHVZxEch90PQMOpDkeMYYzaj1YmCQ==
Date: Mon, 9 Sep 2019 13:18:46 +0000
Message-ID: <20190909131836.28315-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0108.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:19::24) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [141.85.233.105]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 66264f36-c7a9-4149-9d8f-08d735283ec8
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5097; 
x-ms-traffictypediagnostic: PR1PR01MB5097:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB5097138D90D75D3799132F95A6B70@PR1PR01MB5097.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1284;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(376002)(346002)(136003)(366004)(396003)(39850400004)(199004)(189003)(86362001)(1076003)(99286004)(6916009)(2501003)(2351001)(52116002)(316002)(786003)(478600001)(14454004)(54906003)(6486002)(6436002)(476003)(66066001)(2906002)(8676002)(8936002)(81166006)(81156014)(53936002)(5640700003)(25786009)(4326008)(2616005)(486006)(6116002)(102836004)(3846002)(186003)(6506007)(64756008)(66446008)(386003)(305945005)(45776006)(66556008)(66476007)(5660300002)(26005)(71200400001)(71190400001)(66946007)(6512007)(256004)(50226002)(7736002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5097;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: B7niY/JoFrgclNgN9s7TFcid7qFrPPMU7qgxlSaA2dyRv/RUegD344rVkkNfF+OaHT6TF/eKWv8BDYEVpyRWZQo25Om0NOChBAuKU5p6RkRG15+VBHVM7n9/dllMzn/q3m0CksodvoOMiYnzrzRMGNfRhzup8EmmbaIE/e/FmjX+sSpyh/xCAUOwt1fXzmRJYU/EsN6G4jg/8jhlJndRlqHZ6teCJv6DxkIZAUDLahsvu/voGFZsYaTuiN7qNS064ZxDSlu5WLSfs29bLP+P5j1EjXU7+vcMi4HErhIHtGCo2G+yq9VbyHRRiLx+w4s/lrYG9Wpwh7mWO7Y53nri0U7zxSJk73FdsZY1vAEtT4LC2i4chaqlBQsSTO/GprX38CiO/NGaHh05XQeVgXmQQphVRLYr4qR6cxeqRPRGOvY=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 66264f36-c7a9-4149-9d8f-08d735283ec8
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 13:18:46.8131 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: CoOVkUxUOAQS46wHgWQM30ZBiWI69q+d+qrovP1YiZGtMC7ToBkW7whME9foX+1b1GCkFuzjNL1qSi0+d6RmHSOKvRtD6vBgIfFPzOjljmey2Na22q39C1qm/G1T9iPE
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5097
Subject: [Minios-devel] [UNIKRAFT PATCH 1/1] Implement sethostname and uname
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

LS0tCiBsaWIvdWtzeXNpbmZvL2V4cG9ydHN5bXMudWsgfCAgMSArCiBsaWIvdWtzeXNpbmZvL3N5
c2luZm8uYyAgICAgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAy
IGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9saWIvdWtzeXNp
bmZvL2V4cG9ydHN5bXMudWsgYi9saWIvdWtzeXNpbmZvL2V4cG9ydHN5bXMudWsKaW5kZXggMmUz
NWI2ZmEuLjczZTFmZTk5IDEwMDY0NAotLS0gYS9saWIvdWtzeXNpbmZvL2V4cG9ydHN5bXMudWsK
KysrIGIvbGliL3Vrc3lzaW5mby9leHBvcnRzeW1zLnVrCkBAIC01LDMgKzUsNCBAQCBwYXRoY29u
ZgogZ2V0cGFnZXNpemUKIHVuYW1lCiBnZXRob3N0bmFtZQorc2V0aG9zdG5hbWUKZGlmZiAtLWdp
dCBhL2xpYi91a3N5c2luZm8vc3lzaW5mby5jIGIvbGliL3Vrc3lzaW5mby9zeXNpbmZvLmMKaW5k
ZXggMTVlMDk3YzQuLmI0MWIyZjdiIDEwMDY0NAotLS0gYS9saWIvdWtzeXNpbmZvL3N5c2luZm8u
YworKysgYi9saWIvdWtzeXNpbmZvL3N5c2luZm8uYwpAQCAtMzksNiArMzksMjEgQEAKICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2luY2x1ZGUgPHVrL2Vz
c2VudGlhbHMuaD4KKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKworc3RhdGljIHN0cnVjdCB1dHNu
YW1lIHV0c25hbWUgPSB7CisJLnN5c25hbWUJPSAiVW5pa3JhZnQiLAorCS5ub2RlbmFtZQk9ICJ1
bmlrcmFmdCIsCisJLnJlbGVhc2UJPSBTVFJJTkdJRlkoVUtfQ09ERU5BTUUpLAorCS52ZXJzaW9u
CT0gU1RSSU5HSUZZKFVLX0ZVTExWRVJTSU9OKSwKKyNpZmRlZiBBUkNIX1g4Nl82NAorCS5tYWNo
aW5lCT0gIng4Nl82NCIKKyNlbGlmIEFSQ0hfQVJNXzY0CisJLm1hY2hpbmUJPSAiYXJtNjQiCisj
ZWxpZiBBUkNIX0FSTV8zMgorCS5tYWNoaW5lCT0gImFybTMyIgorI2VuZGlmCit9OwogCiBsb25n
IGZwYXRoY29uZihpbnQgZmQgX191bnVzZWQsIGludCBuYW1lIF9fdW51c2VkKQogewpAQCAtNzAs
NiArODUsMzAgQEAgaW50IGdldHBhZ2VzaXplKHZvaWQpCiAKIGludCB1bmFtZShzdHJ1Y3QgdXRz
bmFtZSAqYnVmIF9fdW51c2VkKQogeworCWlmIChidWYgPT0gTlVMTCkgeworCQllcnJubyA9IEVG
QVVMVDsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbWNweShidWYsICZ1dHNuYW1lLCBzaXplb2Yo
c3RydWN0IHV0c25hbWUpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHNldGhvc3RuYW1lKGNvbnN0
IGNoYXIgKm5hbWUsIHNpemVfdCBsZW4pCit7CisJaWYgKG5hbWUgPT0gTlVMTCkgeworCQllcnJu
byA9IEVGQVVMVDsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChsZW4gPCAwIHx8IGxlbiA+IHNp
emVvZih1dHNuYW1lLm5vZGVuYW1lKSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0x
OworCX0KKworCXN0cm5jcHkodXRzbmFtZS5ub2RlbmFtZSwgbmFtZSwgbGVuKTsKKwlpZiAobGVu
IDwgc2l6ZW9mKHV0c25hbWUubm9kZW5hbWUpKQorCQl1dHNuYW1lLm5vZGVuYW1lW2xlbl0gPSAw
OwogCXJldHVybiAwOwogfQogCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 13:24:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 13:24:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7JeI-0003An-3M; Mon, 09 Sep 2019 13:24:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7JeH-0003Ai-BU
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 13:24:05 +0000
X-Inumbo-ID: 17f46a48-d305-11e9-978d-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 17f46a48-d305-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 13:24:04 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id p13so14700683wmh.1
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 06:24:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=bxZmKQMmxxbMMNaFprggTVWHYVdx+2yb8fKy4idPrZE=;
 b=u7KAIYBeeq+L5UXOpX91U2VT6UxA3AnkMaa1oFsk0AiJBHhdpr8yO1B78hwX/7r4SU
 rv+sFQGetfwyrx0Tj5toeWZY+X7dfklU04f92Vny/39Nf4sSjuzI8hbuRMKxLCql8Vhk
 GAUueZvCIeINRAv89CKb09RkAR+z8S98IR+YBfk4A1BysMtEnAG8sOTkAn1APKqfffQL
 9jET6WhCdNbnQFgE7E/sBSrTaf0SmkRR9iR35RrAJaVp8RRAt5HoFnlci2NrRplUcQl1
 6wxiRRpNt8BHXVtOezJWYFwfdMrEKnAPBLfC9nIE2BvOdGuCqghoqO/v7kQSEw+WwSMg
 /bTg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=bxZmKQMmxxbMMNaFprggTVWHYVdx+2yb8fKy4idPrZE=;
 b=F0Rju8/AdSVlQD2XDcZIAjCUASOB03ENGzxd0YdaqaKtusVdI+yyAWryMcuZaKDy1S
 bjw7DrmQYVHkLYzdvK2ctUlEGSBI4jTRINaF6k+ObTKFdexj0eS5GVF3kMrPvaUmvjqg
 USrgkncTgNC/BdpW5thPttcsyzE6m6jlzWgKMB21do9uLmcBz7pbGfRsVqYuuHM1h+Ez
 IHf1DlJ0biuqZCsBtm9CnOFVoiN6x/8H8gOFW7i9OWk9Xng6YCuxjMvvifzEV0GS86qD
 osLV3s09c5qGim6AfIszwwHx8R6yzxPSFuKuOc2k6F4Qx6xxGvz3ueyXL2CW2ch6jeF+
 ACsQ==
X-Gm-Message-State: APjAAAX+M7Nq/8ct3Ifx6Af4xrEytuyi9ziBTbXdcP+cyPaEzgOdbm6G
 3W5ooeAgUpyvQyEA2r4MZj1+RwkF
X-Google-Smtp-Source: APXvYqyH0GKLfZjDguErZmCFi7lCS/+IaQoCgz/Dm1320xz2cRf8APPHVz3dBC2P3zH9K6OeYCBkXw==
X-Received: by 2002:a05:600c:2291:: with SMTP id
 17mr18400849wmf.70.1568035443657; 
 Mon, 09 Sep 2019 06:24:03 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.103])
 by smtp.gmail.com with ESMTPSA id p85sm30977867wme.23.2019.09.09.06.24.02
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 06:24:03 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190909131836.28315-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <88c4738e-2ea1-cfd8-be2c-86cf90ee3b58@gmail.com>
Date: Mon, 9 Sep 2019 16:24:01 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909131836.28315-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/1] Implement sethostname and
 uname
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgcGF0Y2gsIFZsYWQhIERvbid0IGZvcmdldCB5b3VyIFNpZ25lZC1vZmYt
YnkgbmV4dCB0aW1lLgoKUmV2aWV3ZWQtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5w
dWIucm8+CgpPbiA5LzkvMTkgNDoxOCBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdy
b3RlOgo+IC0tLQo+ICBsaWIvdWtzeXNpbmZvL2V4cG9ydHN5bXMudWsgfCAgMSArCj4gIGxpYi91
a3N5c2luZm8vc3lzaW5mby5jICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAt
LWdpdCBhL2xpYi91a3N5c2luZm8vZXhwb3J0c3ltcy51ayBiL2xpYi91a3N5c2luZm8vZXhwb3J0
c3ltcy51awo+IGluZGV4IDJlMzViNmZhLi43M2UxZmU5OSAxMDA2NDQKPiAtLS0gYS9saWIvdWtz
eXNpbmZvL2V4cG9ydHN5bXMudWsKPiArKysgYi9saWIvdWtzeXNpbmZvL2V4cG9ydHN5bXMudWsK
PiBAQCAtNSwzICs1LDQgQEAgcGF0aGNvbmYKPiAgZ2V0cGFnZXNpemUKPiAgdW5hbWUKPiAgZ2V0
aG9zdG5hbWUKPiArc2V0aG9zdG5hbWUKPiBkaWZmIC0tZ2l0IGEvbGliL3Vrc3lzaW5mby9zeXNp
bmZvLmMgYi9saWIvdWtzeXNpbmZvL3N5c2luZm8uYwo+IGluZGV4IDE1ZTA5N2M0Li5iNDFiMmY3
YiAxMDA2NDQKPiAtLS0gYS9saWIvdWtzeXNpbmZvL3N5c2luZm8uYwo+ICsrKyBiL2xpYi91a3N5
c2luZm8vc3lzaW5mby5jCj4gQEAgLTM5LDYgKzM5LDIxIEBACj4gICNpbmNsdWRlIDxzdHJpbmcu
aD4KPiAgI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+Cj4gICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxz
Lmg+Cj4gKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgdXRzbmFt
ZSB1dHNuYW1lID0gewo+ICsJLnN5c25hbWUJPSAiVW5pa3JhZnQiLAo+ICsJLm5vZGVuYW1lCT0g
InVuaWtyYWZ0IiwKPiArCS5yZWxlYXNlCT0gU1RSSU5HSUZZKFVLX0NPREVOQU1FKSwKPiArCS52
ZXJzaW9uCT0gU1RSSU5HSUZZKFVLX0ZVTExWRVJTSU9OKSwKPiArI2lmZGVmIEFSQ0hfWDg2XzY0
Cj4gKwkubWFjaGluZQk9ICJ4ODZfNjQiCj4gKyNlbGlmIEFSQ0hfQVJNXzY0Cj4gKwkubWFjaGlu
ZQk9ICJhcm02NCIKPiArI2VsaWYgQVJDSF9BUk1fMzIKPiArCS5tYWNoaW5lCT0gImFybTMyIgo+
ICsjZW5kaWYKPiArfTsKPiAgCj4gIGxvbmcgZnBhdGhjb25mKGludCBmZCBfX3VudXNlZCwgaW50
IG5hbWUgX191bnVzZWQpCj4gIHsKPiBAQCAtNzAsNiArODUsMzAgQEAgaW50IGdldHBhZ2VzaXpl
KHZvaWQpCj4gIAo+ICBpbnQgdW5hbWUoc3RydWN0IHV0c25hbWUgKmJ1ZiBfX3VudXNlZCkKPiAg
ewo+ICsJaWYgKGJ1ZiA9PSBOVUxMKSB7Cj4gKwkJZXJybm8gPSBFRkFVTFQ7Cj4gKwkJcmV0dXJu
IC0xOwo+ICsJfQo+ICsKPiArCW1lbWNweShidWYsICZ1dHNuYW1lLCBzaXplb2Yoc3RydWN0IHV0
c25hbWUpKTsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgc2V0aG9zdG5hbWUoY29uc3Qg
Y2hhciAqbmFtZSwgc2l6ZV90IGxlbikKPiArewo+ICsJaWYgKG5hbWUgPT0gTlVMTCkgewo+ICsJ
CWVycm5vID0gRUZBVUxUOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwlpZiAobGVuIDwg
MCB8fCBsZW4gPiBzaXplb2YodXRzbmFtZS5ub2RlbmFtZSkpIHsKPiArCQllcnJubyA9IEVJTlZB
TDsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwo+ICsJc3RybmNweSh1dHNuYW1lLm5vZGVuYW1l
LCBuYW1lLCBsZW4pOwo+ICsJaWYgKGxlbiA8IHNpemVvZih1dHNuYW1lLm5vZGVuYW1lKSkKPiAr
CQl1dHNuYW1lLm5vZGVuYW1lW2xlbl0gPSAwOwo+ICAJcmV0dXJuIDA7Cj4gIH0KPiAgCj4gCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 13:32:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 13:32:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7JmU-0003uo-38; Mon, 09 Sep 2019 13:32:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7JmT-0003uh-6u
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 13:32:33 +0000
X-Inumbo-ID: 45879c72-d306-11e9-ac0b-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.71]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 45879c72-d306-11e9-ac0b-12813bfff9fa;
 Mon, 09 Sep 2019 13:32:30 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=X96JupCXRv/cC8NoDyBekkFbUMdP786kuboEaqNrhD0xTA+yR8fioZyCvxsO5qUgWnxjbm89j8r8JO7PeExQGUoVquNkxXHYW5kI9MBulEhVk5kO6SZUqD9Qc6/oXIud8z7isUaIdMzXz/ViZacsOKQGs2NvrC9e97GDDeAOlXvc2XET38UUPSf6lqq1l4/Z+U8KfeITe3fz1/YEyryw8r2pcC9cUlqwvpQ8stw/JaPrmhHh4haKqFyPaaBCMM+LEgSUpa41e3v8aQ37VgwzcKbxWRWVokt388bvtFFqFbZMTf7QeLgDqi4ZUuWeVol7XfozvPiQfUAHWdKW1Psp8Q==
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=cg459pzpSJ6ARZIl8Uk7HT9BZvvprt12vW507Qdjxjk=;
 b=aw/bxVJFneqtKlJ5OpwjS28Ck1yKOAA5L3LT44BCr9N9Jp1n2JK+A5l+KlYrM/djcYC+SA/v7JIYB/8VEnjWWRm3DWtaTGWv7oool9l7tK1y6TaUnmRkx6tOhAxfiUbDcpPMYapeQcwi8DPY0cSSahbvX4n1erJ98ooX64xyMBavYPPS9tyuRBsxWs8X8iJOTRBt3+nMDES/i0LY55kplGGhDXZnO91/owDfKF57yPwXHMJIyeiaxGJQHe4zdUGiSyZPGnFypuLB/WVvQro8EkfSM6fy5a6dKU6TQ961yxmH7P+L5j9GPIhKKBUSWSKXtJNkM5vm2b8um3TkPauhlQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5020.eurprd01.prod.exchangelabs.com (20.177.211.91) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Mon, 9 Sep
 2019 13:32:28 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 13:32:28 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH] lib/uktime: Introduce time functions library
 skeleton
Thread-Index: AQHVZw80/TVZlpNTGUKMMgWnq4BIcKcjV+sA
Date: Mon, 9 Sep 2019 13:32:28 +0000
Message-ID: <51bae9a9-1b9c-5e40-2de0-57e4918191c5@stud.acs.upb.ro>
References: <20190909130458.24126-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190909130458.24126-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0205.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::25) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: c8a6a252-9981-4847-1819-08d7352a2878
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5020; 
x-ms-traffictypediagnostic: PR1PR01MB5020:
x-microsoft-antispam-prvs: <PR1PR01MB5020ADD2A0DAA67258635C1DA6B70@PR1PR01MB5020.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(376002)(366004)(136003)(396003)(39850400004)(189003)(199004)(6512007)(256004)(54906003)(186003)(8936002)(7736002)(64756008)(478600001)(66476007)(2906002)(66574012)(66556008)(86362001)(6246003)(71190400001)(66946007)(99286004)(25786009)(71200400001)(4326008)(386003)(3846002)(6506007)(53546011)(102836004)(31696002)(476003)(2616005)(446003)(11346002)(486006)(76176011)(786003)(316002)(66066001)(5660300002)(31686004)(26005)(2501003)(6116002)(6486002)(14444005)(52116002)(66446008)(229853002)(8676002)(305945005)(85182001)(85202003)(81166006)(53936002)(14454004)(81156014)(6436002)(110136005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5020;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: Fsqk0YtzxGOvX0nEZmwtDp3dgBtmJC1xy0fvVHxft4r/2SwRxhxAozEIiDZK/uV5BIiInKerp/QGuH6rIal+i9wGZPCF9RbSfftC/1zdn7DR1Q+PJ/SCD2rrVdya/ybsosW+AB8FEdRqCvNgN0rj6NqBlZtLdu75jF6a29K5gftmtUIP6nXcenfTkmN+LKNKRgO32QxJcy5HQ2MCZx/ywYpI0M2SWyP1DJe7JbVP5uCvgbNA7Gs5MsuVB6NcjVpiHip3Dve8OBWX32pAWApjHfCFBkzC0BLWET6fLhXBuIWMWRYvoVojoCpLff+YQv0mye1iFFPej5ax0/XoHq3ySra6oXW4ip8uFqHebMTdJ3lpnFDqE1FsIm/KaDoHcqnoz7FL2r4EHFtxcPXzX3ZQmGNsfJKX0J4uTxTN6rN8bqQ=
x-ms-exchange-transport-forked: True
Content-ID: <1CBDC26F109A754FA5C70C5DC9E10B5A@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: c8a6a252-9981-4847-1819-08d7352a2878
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 13:32:28.2690 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: gvh7RkKqxsUxAhTg8sb6jnxTvnP2hgJX8EoWmr74r9F3bT48Ul2ra5kkriooN3YL/6yZd6CgIT6LP6DG7WEPz48qPIss6Ndrzk1td1b3jnQOdvjbzXSU8488Nj7Ybooy
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5020
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/uktime: Introduce time
 functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpS
ZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1PHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFj
cy51cGIucm8+DQoNCk9uIDA5LjA5LjIwMTkgMTY6MDQsIENvc3RpbiBMdXB1IHdyb3RlOg0KDQo+
IFVudGlsIG5vdywgdGhlIHRpbWUgZnVuY3Rpb25zIHdlcmUgYWRkZWQgb25lIGJ5IG9uZSBpbiBi
b3RoIG5vbGliYyBhbmQgbmV3bGliDQo+IGdsdWUgY29kZS4gVGhpcyBtZWFudCB0aGF0IG9uZSBo
YWQgdG8gbWFrZSB0aGUgZXhhY3Qgc2FtZSBjaGFuZ2VzIGluIGJvdGgNCj4gVW5pa3JhZnQgYW5k
IG5ld2xpYiByZXBvcy4gVGhlIG1ham9yIGRyYXdiYWNrIGlzIHRoYXQgb25lIGNhbiBmb3JnZXQg
dG8NCj4gZHVwbGljYXRlIHRoZSBjaGFuZ2VzIGluIHRoZSBvdGhlciBsaWJyYXJ5IGFuZCB0aGlz
IGhhcyBhbHJlYWR5IGhhcHBlbmVkDQo+IHNldmVyYWwgdGltZXMuIE5vdywgZ2l2ZW4gdGhhdCBi
b3RoIG5vbGliYyBhbmQgbmV3bGliIG1pc3MgdGhlc2UgdGltZQ0KPiBmdW5jdGlvbnMsIGl0IG1h
a2VzIG1vcmUgc2Vuc2UgdG8gcHJvdmlkZSBhbiBpbnRlcm5hbCBsaWJyYXJ5IGZvciBhbGwgb2Yg
dGhlbSAtDQo+IGkuZS4ga2VlcGluZyB0aGVtIGluIG9uZSBwbGFjZSBpbnN0ZWFkIG9mIG1vcmUu
DQo+DQo+IFNvbWUgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgZnJvbSBzY3JhdGNo
LCBidXQgc29tZSBtYXkgYmUgaW1wb3J0ZWQNCj4gZnJvbSBvdGhlciBsaWJyYXJpZXMuIEZvciB0
aG9zZSBpbXBvcnRlZCBmcm9tIG11c2wgd2Ugd2lsbCBrZWVwIHRoZSBzYW1lDQo+IGhpZXJhcmNo
eSB1bmRlciB0aGUgbXVzbC1pbXBvcnRlZC8gc3ViZGlyZWN0b3J5LCBqdXN0IGxpa2Ugd2UgZG8g
aXQgZm9yIG5ld2xpYg0KPiBnbHVlIGNvZGUuIFRoYXQncyB3aHkgd2UgYWxzbyBhZGQgdGhlIG11
c2wgQ09QWVJJR0hULg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPg0KPiAtLS0NCj4gICBsaWIvQ29uZmlnLnVrICAgICAgICAgICAgICAgICAg
ICAgIHwgICAxICsNCj4gICBsaWIvTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgIHwgICAx
ICsNCj4gICBsaWIvdWt0aW1lL0NvbmZpZy51ayAgICAgICAgICAgICAgIHwgICAzICsNCj4gICBs
aWIvdWt0aW1lL01ha2VmaWxlLnVrICAgICAgICAgICAgIHwgICA0ICsNCj4gICBsaWIvdWt0aW1l
L2V4cG9ydHN5bXMudWsgICAgICAgICAgIHwgICAxICsNCj4gICBsaWIvdWt0aW1lL211c2wtaW1w
b3J0ZWQvQ09QWVJJR0hUIHwgMTg5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICAg
NiBmaWxlcyBjaGFuZ2VkLCAxOTkgaW5zZXJ0aW9ucygrKQ0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvdWt0aW1lL0NvbmZpZy51aw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1l
L01ha2VmaWxlLnVrDQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvZXhwb3J0c3lt
cy51aw0KPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvQ09Q
WVJJR0hUDQo+DQo+IGRpZmYgLS1naXQgYS9saWIvQ29uZmlnLnVrIGIvbGliL0NvbmZpZy51aw0K
PiBpbmRleCAzMGVjMDk0ZC4uZjBkNjIwNTQgMTAwNjQ0DQo+IC0tLSBhL2xpYi9Db25maWcudWsN
Cj4gKysrIGIvbGliL0NvbmZpZy51aw0KPiBAQCAtNTMsMyArNTMsNCBAQCBzb3VyY2UgImxpYi91
a25ldGRldi9Db25maWcudWsiDQo+ICAgc291cmNlICJsaWIvdWs5cC9Db25maWcudWsiDQo+ICAg
c291cmNlICJsaWIvcG9zaXgtbGliZGwvQ29uZmlnLnVrIg0KPiAgIHNvdXJjZSAibGliL3VrbGli
cGFyYW0vQ29uZmlnLnVrIg0KPiArc291cmNlICJsaWIvdWt0aW1lL0NvbmZpZy51ayINCj4gZGlm
ZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS51ayBiL2xpYi9NYWtlZmlsZS51aw0KPiBpbmRleCA4OWE1
N2Q3MC4uYTE2OTcxOTggMTAwNjQ0DQo+IC0tLSBhL2xpYi9NYWtlZmlsZS51aw0KPiArKysgYi9s
aWIvTWFrZWZpbGUudWsNCj4gQEAgLTMwLDMgKzMwLDQgQEAgJChldmFsICQoY2FsbCBfaW1wb3J0
X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWtuZXRkZXYpKQ0KPiAgICQoZXZhbCAkKGNhbGwg
X2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrOXApKQ0KPiAgICQoZXZhbCAkKGNh
bGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3Bvc2l4LWxpYmRsKSkNCj4gICAk
KGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a2xpYnBhcmFt
KSkNCj4gKyQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3Vr
dGltZSkpDQo+IGRpZmYgLS1naXQgYS9saWIvdWt0aW1lL0NvbmZpZy51ayBiL2xpYi91a3RpbWUv
Q29uZmlnLnVrDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwLi5hNjhl
M2Y0ZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi91a3RpbWUvQ29uZmlnLnVrDQo+IEBA
IC0wLDAgKzEsMyBAQA0KPiArY29uZmlnIExJQlVLVElNRQ0KPiArICAgICAgIGJvb2wgInVrdGlt
ZTogVGltZSBmdW5jdGlvbnMiDQo+ICsgICAgICAgZGVmYXVsdCBuDQo+IFwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQ0KPiBkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9NYWtlZmlsZS51ayBiL2xp
Yi91a3RpbWUvTWFrZWZpbGUudWsNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw
MDAwMDAuLjljMWY4YjM1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL3VrdGltZS9NYWtl
ZmlsZS51aw0KPiBAQCAtMCwwICsxLDQgQEANCj4gKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGli
dWt0aW1lLCQoQ09ORklHX0xJQlVLVElNRSkpKQ0KPiArDQo+ICtDSU5DTFVERVMtJChDT05GSUdf
TElCVUtUSU1FKSAgICArPSAtSSQoTElCVUtUSU1FX0JBU0UpL2luY2x1ZGUNCj4gK0NYWElOQ0xV
REVTLSQoQ09ORklHX0xJQlVLVElNRSkgICs9IC1JJChMSUJVS1RJTUVfQkFTRSkvaW5jbHVkZQ0K
PiBkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9leHBvcnRzeW1zLnVrIGIvbGliL3VrdGltZS9leHBv
cnRzeW1zLnVrDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwLi5jODZj
M2YzNQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi91a3RpbWUvZXhwb3J0c3ltcy51aw0K
PiBAQCAtMCwwICsxIEBADQo+ICtub25lDQo+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0K
PiBkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL0NPUFlSSUdIVCBiL2xpYi91
a3RpbWUvbXVzbC1pbXBvcnRlZC9DT1BZUklHSFQNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g
aW5kZXggMDAwMDAwMDAuLjI1MjVmZmI1DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL3Vr
dGltZS9tdXNsLWltcG9ydGVkL0NPUFlSSUdIVA0KPiBAQCAtMCwwICsxLDE4OSBAQA0KPiArbXVz
bCBhcyBhIHdob2xlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBmb2xsb3dpbmcgc3RhbmRhcmQgTUlU
IGxpY2Vuc2U6DQo+ICsNCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gK0NvcHlyaWdodCDCqSAyMDA1LTIw
MTkgUmljaCBGZWxrZXIsIGV0IGFsLg0KPiArDQo+ICtQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFu
dGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcNCj4gK2EgY29weSBv
ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQ0K
PiArIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rp
b24sIGluY2x1ZGluZw0KPiArd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBj
b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLA0KPiArZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwg
YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvDQo+ICtwZXJtaXQgcGVy
c29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3Qg
dG8NCj4gK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gKw0KPiArVGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUNCj4gK2luY2x1
ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJl
Lg0KPiArDQo+ICtUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJS
QU5UWSBPRiBBTlkgS0lORCwNCj4gK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBO
T1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRg0KPiArTUVSQ0hBTlRBQklMSVRZLCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULg0KPiArSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF
IEZPUiBBTlkNCj4gK0NMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsDQo+ICtUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG
Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQ0KPiArU09GVFdBUkUgT1IgVEhF
IFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuDQo+ICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
DQo+ICsNCj4gK0F1dGhvcnMvY29udHJpYnV0b3JzIGluY2x1ZGU6DQo+ICsNCj4gK0EuIFdpbGNv
eA0KPiArQWxleCBEb3dhZA0KPiArQWxleCBTdXlrb3YNCj4gK0FsZXhhbmRlciBNb25ha292DQo+
ICtBbmRyZSBNY0N1cmR5DQo+ICtBbmRyZXcgS2VsbGV5DQo+ICtBbnRob255IEcuIEJhc2lsZQ0K
PiArQXJpYyBCZWxzaXRvDQo+ICtBcnZpZCBQaWNjaWFuaQ0KPiArQmFydG9zeiBCcmFjaGFjemVr
DQo+ICtCZW5qYW1pbiBQZXRlcnNvbg0KPiArQm9iYnkgQmluZ2hhbQ0KPiArQm9yaXMgQnJlemls
bG9uDQo+ICtCcmVudCBDb29rDQo+ICtDaHJpcyBTcGllZ2VsDQo+ICtDbMOpbWVudCBWYXNzZXVy
DQo+ICtEYW5pZWwgTWljYXkNCj4gK0RhbmllbCBTYWJvZ2FsDQo+ICtEYXVybmltYXRvcg0KPiAr
RGF2aWQgQ2FybGllcg0KPiArRGF2aWQgRWRlbHNvaG4NCj4gK0RlbnlzIFZsYXNlbmtvDQo+ICtE
bWl0cnkgSXZhbm92DQo+ICtEbWl0cnkgVi4gTGV2aW4NCj4gK0RyZXcgRGVWYXVsdA0KPiArRW1p
bCBSZW5uZXIgQmVydGhpbmcNCj4gK0ZhbmdydWkgU29uZw0KPiArRmVsaXggRmlldGthdQ0KPiAr
RmVsaXggSmFuZGENCj4gK0dpYW5sdWNhIEFuem9saW4NCj4gK0hhdWtlIE1laHJ0ZW5zDQo+ICtI
ZSBYDQo+ICtIaWx0am8gUG9zdGh1bWENCj4gK0lzYWFjIER1bmhhbQ0KPiArSmF5ZGVlcCBQYXRp
bA0KPiArSmVucyBHdXN0ZWR0DQo+ICtKZXJlbXkgSHVudHdvcmsNCj4gK0pvLVBoaWxpcHAgV2lj
aA0KPiArSm9ha2ltIFNpbmRob2x0DQo+ICtKb2huIFNwZW5jZXINCj4gK0pvc2lhaCBXb3JjZXN0
ZXINCj4gK0p1bGllbiBSYW1zZWllcg0KPiArSnVzdGluIENvcm1hY2sNCj4gK0thYXJsZSBSaXR2
YW5lbg0KPiArS2hlbSBSYWoNCj4gK0t5bGllIE1jQ2xhaW4NCj4gK0xlYWggTmV1a2lyY2hlbg0K
PiArTHVjYSBCYXJiYXRvDQo+ICtMdWthIFBlcmtvdg0KPiArTSBGYXJrYXMtRHljayAoU3RyYWtl
KQ0KPiArTWFoZXNoIEJvZGFwYXRpDQo+ICtNYXJrdXMgV2ljaG1hbm4NCj4gK01hc2Fub3JpIE9n
aW5vDQo+ICtNaWNoYWVsIENsYXJrDQo+ICtNaWNoYWVsIEZvcm5leQ0KPiArTWlraGFpbCBLcmVt
bnlvdg0KPiArTmF0YW5hZWwgQ29wYQ0KPiArTmljaG9sYXMgSi4gS2Fpbg0KPiArb3JjDQo+ICtQ
YXNjYWwgQ3VvcQ0KPiArUGF0cmljayBPcHBlbmxhbmRlcg0KPiArUGV0ciBIb3Nlaw0KPiArUGV0
ciBTa29jaWsNCj4gK1BpZXJyZSBDYXJyaWVyDQo+ICtSZWluaSBVcmJhbg0KPiArUmljaCBGZWxr
ZXINCj4gK1JpY2hhcmQgUGVubmluZ3Rvbg0KPiArUnlhbiBGYWlyZmF4DQo+ICtTYW11ZWwgSG9s
bGFuZA0KPiArU2VnZXYgRmluZXINCj4gK1NoaXoNCj4gK3Npbg0KPiArU29sYXIgRGVzaWduZXIN
Cj4gK1N0ZWZhbiBLcmlzdGlhbnNzb24NCj4gK1N0ZWZhbiBPJ1JlYXINCj4gK1N6YWJvbGNzIE5h
Z3kNCj4gK1RpbW8gVGVyw6RzDQo+ICtUcnV0eiBCZWhuDQo+ICtWYWxlbnRpbiBPY2hzDQo+ICtX
aWxsIERpZXR6DQo+ICtXaWxsaWFtIEhhZGRvbg0KPiArV2lsbGlhbSBQaXRjb2NrDQo+ICsNCj4g
K1BvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgYXJlIGRlcml2ZWQgZnJvbSB0aGlyZC1wYXJ0eSB3
b3JrcyBsaWNlbnNlZA0KPiArdW5kZXIgdGVybXMgY29tcGF0aWJsZSB3aXRoIHRoZSBhYm92ZSBN
SVQgbGljZW5zZToNCj4gKw0KPiArVGhlIFRSRSByZWd1bGFyIGV4cHJlc3Npb24gaW1wbGVtZW50
YXRpb24gKHNyYy9yZWdleC9yZWcqIGFuZA0KPiArc3JjL3JlZ2V4L3RyZSopIGlzIENvcHlyaWdo
dCDCqSAyMDAxLTIwMDggVmlsbGUgTGF1cmlrYXJpIGFuZCBsaWNlbnNlZA0KPiArdW5kZXIgYSAy
LWNsYXVzZSBCU0QgbGljZW5zZSAobGljZW5zZSB0ZXh0IGluIHRoZSBzb3VyY2UgZmlsZXMpLiBU
aGUNCj4gK2luY2x1ZGVkIHZlcnNpb24gaGFzIGJlZW4gaGVhdmlseSBtb2RpZmllZCBieSBSaWNo
IEZlbGtlciBpbiAyMDEyLCBpbg0KPiArdGhlIGludGVyZXN0cyBvZiBzaXplLCBzaW1wbGljaXR5
LCBhbmQgbmFtZXNwYWNlIGNsZWFubGluZXNzLg0KPiArDQo+ICtNdWNoIG9mIHRoZSBtYXRoIGxp
YnJhcnkgY29kZSAoc3JjL21hdGgvKiBhbmQgc3JjL2NvbXBsZXgvKikgaXMNCj4gK0NvcHlyaWdo
dCDCqSAxOTkzLDIwMDQgU3VuIE1pY3Jvc3lzdGVtcyBvcg0KPiArQ29weXJpZ2h0IMKpIDIwMDMt
MjAxMSBEYXZpZCBTY2h1bHR6IG9yDQo+ICtDb3B5cmlnaHQgwqkgMjAwMy0yMDA5IFN0ZXZlbiBH
LiBLYXJnbCBvcg0KPiArQ29weXJpZ2h0IMKpIDIwMDMtMjAwOSBCcnVjZSBELiBFdmFucyBvcg0K
PiArQ29weXJpZ2h0IMKpIDIwMDggU3RlcGhlbiBMLiBNb3NoaWVyDQo+ICthbmQgbGFiZWxsZWQg
YXMgc3VjaCBpbiBjb21tZW50cyBpbiB0aGUgaW5kaXZpZHVhbCBzb3VyY2UgZmlsZXMuIEFsbA0K
PiAraGF2ZSBiZWVuIGxpY2Vuc2VkIHVuZGVyIGV4dHJlbWVseSBwZXJtaXNzaXZlIHRlcm1zLg0K
PiArDQo+ICtUaGUgQVJNIG1lbWNweSBjb2RlIChzcmMvc3RyaW5nL2FybS9tZW1jcHlfZWwuUykg
aXMgQ29weXJpZ2h0IMKpIDIwMDgNCj4gK1RoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3Qg
YW5kIGlzIGxpY2Vuc2VkIHVuZGVyIGEgdHdvLWNsYXVzZSBCU0QNCj4gK2xpY2Vuc2UuIEl0IHdh
cyB0YWtlbiBmcm9tIEJpb25pYyBsaWJjLCB1c2VkIG9uIEFuZHJvaWQuDQo+ICsNCj4gK1RoZSBp
bXBsZW1lbnRhdGlvbiBvZiBERVMgZm9yIGNyeXB0IChzcmMvY3J5cHQvY3J5cHRfZGVzLmMpIGlz
DQo+ICtDb3B5cmlnaHQgwqkgMTk5NCBEYXZpZCBCdXJyZW4uIEl0IGlzIGxpY2Vuc2VkIHVuZGVy
IGEgQlNEIGxpY2Vuc2UuDQo+ICsNCj4gK1RoZSBpbXBsZW1lbnRhdGlvbiBvZiBibG93ZmlzaCBj
cnlwdCAoc3JjL2NyeXB0L2NyeXB0X2Jsb3dmaXNoLmMpIHdhcw0KPiArb3JpZ2luYWxseSB3cml0
dGVuIGJ5IFNvbGFyIERlc2lnbmVyIGFuZCBwbGFjZWQgaW50byB0aGUgcHVibGljDQo+ICtkb21h
aW4uIFRoZSBjb2RlIGFsc28gY29tZXMgd2l0aCBhIGZhbGxiYWNrIHBlcm1pc3NpdmUgbGljZW5z
ZSBmb3IgdXNlDQo+ICtpbiBqdXJpc2RpY3Rpb25zIHRoYXQgbWF5IG5vdCByZWNvZ25pemUgdGhl
IHB1YmxpYyBkb21haW4uDQo+ICsNCj4gK1RoZSBzbW9vdGhzb3J0IGltcGxlbWVudGF0aW9uIChz
cmMvc3RkbGliL3Fzb3J0LmMpIGlzIENvcHlyaWdodCDCqSAyMDExDQo+ICtWYWxlbnRpbiBPY2hz
IGFuZCBpcyBsaWNlbnNlZCB1bmRlciBhbiBNSVQtc3R5bGUgbGljZW5zZS4NCj4gKw0KPiArVGhl
IHg4Nl82NCBwb3J0IHdhcyB3cml0dGVuIGJ5IE5pY2hvbGFzIEouIEthaW4gYW5kIGlzIGxpY2Vu
c2VkIHVuZGVyDQo+ICt0aGUgc3RhbmRhcmQgTUlUIHRlcm1zLg0KPiArDQo+ICtUaGUgbWlwcyBh
bmQgbWljcm9ibGF6ZSBwb3J0cyB3ZXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBSaWNoYXJkDQo+
ICtQZW5uaW5ndG9uIGZvciB1c2UgaW4gdGhlIGVsbGNjIHByb2plY3QuIFRoZSBvcmlnaW5hbCBj
b2RlIHdhcyBhZGFwdGVkDQo+ICtieSBSaWNoIEZlbGtlciBmb3IgYnVpbGQgc3lzdGVtIGFuZCBj
b2RlIGNvbnZlbnRpb25zIGR1cmluZyB1cHN0cmVhbQ0KPiAraW50ZWdyYXRpb24uIEl0IGlzIGxp
Y2Vuc2VkIHVuZGVyIHRoZSBzdGFuZGFyZCBNSVQgdGVybXMuDQo+ICsNCj4gK1RoZSBtaXBzNjQg
cG9ydCB3YXMgY29udHJpYnV0ZWQgYnkgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIGFuZCBpcw0K
PiArbGljZW5zZWQgdW5kZXIgdGhlIHN0YW5kYXJkIE1JVCB0ZXJtcy4NCj4gKw0KPiArVGhlIHBv
d2VycGMgcG9ydCB3YXMgYWxzbyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUmljaGFyZCBQZW5uaW5n
dG9uLA0KPiArYW5kIGxhdGVyIHN1cHBsZW1lbnRlZCBhbmQgaW50ZWdyYXRlZCBieSBKb2huIFNw
ZW5jZXIuIEl0IGlzIGxpY2Vuc2VkDQo+ICt1bmRlciB0aGUgc3RhbmRhcmQgTUlUIHRlcm1zLg0K
PiArDQo+ICtBbGwgb3RoZXIgZmlsZXMgd2hpY2ggaGF2ZSBubyBjb3B5cmlnaHQgY29tbWVudHMg
YXJlIG9yaWdpbmFsIHdvcmtzDQo+ICtwcm9kdWNlZCBzcGVjaWZpY2FsbHkgZm9yIHVzZSBhcyBw
YXJ0IG9mIHRoaXMgbGlicmFyeSwgd3JpdHRlbiBlaXRoZXINCj4gK2J5IFJpY2ggRmVsa2VyLCB0
aGUgbWFpbiBhdXRob3Igb2YgdGhlIGxpYnJhcnksIG9yIGJ5IG9uZSBvciBtb3JlDQo+ICtjb250
aWJ1dG9ycyBsaXN0ZWQgYWJvdmUuIERldGFpbHMgb24gYXV0aG9yc2hpcCBvZiBpbmRpdmlkdWFs
IGZpbGVzDQo+ICtjYW4gYmUgZm91bmQgaW4gdGhlIGdpdCB2ZXJzaW9uIGNvbnRyb2wgaGlzdG9y
eSBvZiB0aGUgcHJvamVjdC4gVGhlDQo+ICtvbWlzc2lvbiBvZiBjb3B5cmlnaHQgYW5kIGxpY2Vu
c2UgY29tbWVudHMgaW4gZWFjaCBmaWxlIGlzIGluIHRoZQ0KPiAraW50ZXJlc3Qgb2Ygc291cmNl
IHRyZWUgc2l6ZS4NCj4gKw0KPiArSW4gYWRkaXRpb24sIHBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy
YW50ZWQgZm9yIGFsbCBwdWJsaWMgaGVhZGVyIGZpbGVzDQo+ICsoaW5jbHVkZS8qIGFuZCBhcmNo
LyovYml0cy8qKSBhbmQgY3J0IGZpbGVzIGludGVuZGVkIHRvIGJlIGxpbmtlZCBpbnRvDQo+ICth
cHBsaWNhdGlvbnMgKGNydC8qLCBsZHNvL2Rsc3RhcnQuYywgYW5kIGFyY2gvKi9jcnRfYXJjaC5o
KSB0byBvbWl0DQo+ICt0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgcGVybWlzc2lvbiBub3RpY2Ug
b3RoZXJ3aXNlIHJlcXVpcmVkIGJ5IHRoZQ0KPiArbGljZW5zZSwgYW5kIHRvIHVzZSB0aGVzZSBm
aWxlcyB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZg0KPiArYXR0cmlidXRpb24uIFRoZXNlIGZp
bGVzIGluY2x1ZGUgc3Vic3RhbnRpYWwgY29udHJpYnV0aW9ucyBmcm9tOg0KPiArDQo+ICtCb2Ji
eSBCaW5naGFtDQo+ICtKb2huIFNwZW5jZXINCj4gK05pY2hvbGFzIEouIEthaW4NCj4gK1JpY2gg
RmVsa2VyDQo+ICtSaWNoYXJkIFBlbm5pbmd0b24NCj4gK1N0ZWZhbiBLcmlzdGlhbnNzb24NCj4g
K1N6YWJvbGNzIE5hZ3kNCj4gKw0KPiArYWxsIG9mIHdob20gaGF2ZSBleHBsaWNpdGx5IGdyYW50
ZWQgc3VjaCBwZXJtaXNzaW9uLg0KPiArDQo+ICtUaGlzIGZpbGUgcHJldmlvdXNseSBjb250YWlu
ZWQgdGV4dCBleHByZXNzaW5nIGEgYmVsaWVmIHRoYXQgbW9zdCBvZg0KPiArdGhlIGZpbGVzIGNv
dmVyZWQgYnkgdGhlIGFib3ZlIGV4Y2VwdGlvbiB3ZXJlIHN1ZmZpY2llbnRseSB0cml2aWFsIG5v
dA0KPiArdG8gYmUgc3ViamVjdCB0byBjb3B5cmlnaHQsIHJlc3VsdGluZyBpbiBjb25mdXNpb24g
b3ZlciB3aGV0aGVyIGl0DQo+ICtuZWdhdGVkIHRoZSBwZXJtaXNzaW9ucyBncmFudGVkIGluIHRo
ZSBsaWNlbnNlLiBJbiB0aGUgc3Bpcml0IG9mDQo+ICtwZXJtaXNzaXZlIGxpY2Vuc2luZywgYW5k
IG9mIG5vdCBoYXZpbmcgbGljZW5zaW5nIGlzc3VlcyBiZWluZyBhbg0KPiArb2JzdGFjbGUgdG8g
YWRvcHRpb24sIHRoYXQgdGV4dCBoYXMgYmVlbiByZW1vdmVkLg0KX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 14:21:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 14:21:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7KXS-0000EO-PO; Mon, 09 Sep 2019 14:21:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7KXR-0000EI-BY
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 14:21:05 +0000
X-Inumbo-ID: 0dc3910e-d30d-11e9-ac0c-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.55]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0dc3910e-d30d-11e9-ac0c-12813bfff9fa;
 Mon, 09 Sep 2019 14:21:03 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=IzerbmBBB06EHP2p0D6IHLCxy8K0aEHT8ruSSorlmr2/6BncX745MeFGLB7ibsO5M/P7UKaFhPn79tidd9FzrHoqYdP64bn+H45Vcryv9yYJbV6pOkyZ6Ma/O07gXwa1TPO+GZH+V7L878kfR93eg+i6UndbrmxLDewwI0g0q9HVbQ9PigFXlKjfO8ZdNvY1PA+18KhAz5ALQmK2kI7G6e9aRsQ3+SWjSNzCGb+54X5zbYMYIbHWDLNrwCl4j2lxzxPzlsR2ykyAAUPIbR+omk42C5ATW92itgcxBiJf/93GmeW9oGUmGw1Tb8/kbk8yJTTpskXUp+t+fJ2SIT9jsQ==
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=Lz9UKSsvrtyqwjtmktYJziphDgFqFNxruvtDSZNA6GU=;
 b=i71rYPwIB5tZVuyqNXjYXtuET9mTfxfMY41jNpeJ0h5DTSxdLR7HZ+rK+eKiDU541PsOlvA4fd6jDoypfYA/TkWtDYHrapnIZe4PIBm6fzfme6K4SThthUk+pngO5nqFts3kXTHk8gvjIjdVixij+fg4watlAuoTm/xb4/sPftDDQg2w4J/LXEAmpz2YO0ZitnWi5queUuZI582vBR8xVEwUcEPHrQ6AbC3EOJT6NGdxAXHGzCnlNPohuCP9pjhBxMyn5nq1EnYdJIQW10u5N4QuwrBbvw2aYN0TsekqTlYJPW42wVHeRjHOq0JM/I7HtbiQ7JirJQ7YEw5O+sI1Pg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4908.eurprd01.prod.exchangelabs.com (20.177.209.75) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.14; Mon, 9 Sep
 2019 14:21:01 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 14:21:01 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LWIP PATCH 5/5] Makefile.uk: Suppress 'unused
 parameters' warnings
Thread-Index: AQHVY1RB+fM0UxBRnEWzhQ5Au0C+eKcjbPGA
Date: Mon, 9 Sep 2019 14:21:01 +0000
Message-ID: <5ddf4788-b09c-b023-e234-4941858437da@stud.acs.upb.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
 <20190904190912.6801-6-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904190912.6801-6-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM0PR0102CA0048.eurprd01.prod.exchangelabs.com
 (2603:10a6:208::25) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 864f30e0-8722-44d8-6c1a-08d73530f0b2
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4908; 
x-ms-traffictypediagnostic: PR1PR01MB4908:
x-microsoft-antispam-prvs: <PR1PR01MB4908981CE5768894AEDA30EEA6B70@PR1PR01MB4908.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2582;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(979002)(136003)(396003)(366004)(346002)(39840400004)(376002)(199004)(189003)(4326008)(6116002)(102836004)(8676002)(66066001)(256004)(66556008)(64756008)(14444005)(81166006)(66446008)(86362001)(2616005)(446003)(486006)(81156014)(26005)(71190400001)(476003)(66476007)(71200400001)(66946007)(52116002)(186003)(3846002)(11346002)(85202003)(478600001)(386003)(6506007)(53546011)(14454004)(99286004)(6486002)(31696002)(229853002)(76176011)(5660300002)(2501003)(6436002)(6246003)(53936002)(85182001)(305945005)(2906002)(25786009)(7736002)(8936002)(6512007)(54906003)(31686004)(316002)(110136005)(786003)(969003)(989001)(999001)(1009001)(1019001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4908;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: KsXRiQmobLpXvoDpRSA30QsWY6nkte/d+cglreu67qkSqKyZVMJc1zZgsH5Sk5pUBgw3NT1112GjxV5nTNMO1/6tfsBf3M0GIv8Yw0zIvKq8bOXMbKF41Zo9yWnw3gfMeorQ4oFHTpFCMzBZYBSONXf7USy1v6UQ2Xb4XBPhIVl5TwnFi4OhBWpHIfcbOlMwcXIoEwbqWY+AbofRJEd8IgZ28Fhg1o8Wbpk/VOe/5rn7u+pwXxme/Vlre+CT9YCLbOPw7TE1oFO+OK+fuqmMxFcqtXHgZpyyepEKhXkixedxskpyRmklHeanM3q8JSgXCH775dSMdYoR5e5CWSQUpaBtRThqpTDJ/mqtVLIfECR3rZ6GMdDmbdBFrTivNxLBD6P2xgW5zHsBbymg+lmAk8W0utmtpI0j9dNBu53x/fM=
x-ms-exchange-transport-forked: True
Content-ID: <E2BDB58312A23F4C8DAE0781E6CC6D7F@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 864f30e0-8722-44d8-6c1a-08d73530f0b2
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 14:21:01.1240 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: yIqsByOiBQ4phgEDdonb9jqki0ST4cOf+J6UQCBBOk1kw2EoVDxHv5nVQ/iE0o/6wZZzfMpODTymCIAI+YTdlfhodkCzzO6yJQXlfeMTtkcPGFU6fMWi1UDO6M2nI5+r
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4908
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 5/5] Makefile.uk: Suppress
 'unused parameters' warnings
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpS
ZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1CTx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KDQpPbiAwNC4wOS4yMDE5IDIyOjA5LCBDb3N0aW4gTHVwdSB3cm90ZToNCj4g
SXQncyBzaW1wbGVyIHRvIHN1cHByZXNzIHRoZSB3YXJuaW5nIHJhdGhlciB0aGFuIGFkZCAnX191
bnVzZWQnIHF1YWxpZmllciBlYWNoDQo+IHRpbWUuIFRoaXMgYWxzbyBzZWVtcyBpdCB3YXMgdGhl
IGluaXRpYWwgaW50ZW50aW9uIGJlaGluZCB1c2luZw0KPiAnLVd1bnVzZWQtcGFyYW1ldGVyJywg
Z2l2ZW4gdGhhdCBhbGwgd2FybmluZ3MgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdC4NCj4NCj4gU2ln
bmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCj4gLS0tDQo+
ICAgTWFrZWZpbGUudWsgfCAyICstDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCsp
LCAxIGRlbGV0aW9uKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxl
LnVrDQo+IGluZGV4IDk5ZmMwNjIuLjIyOTJjYjQgMTAwNjQ0DQo+IC0tLSBhL01ha2VmaWxlLnVr
DQo+ICsrKyBiL01ha2VmaWxlLnVrDQo+IEBAIC02Myw3ICs2Myw3IEBAIENYWElOQ0xVREVTLSQo
Q09ORklHX0xJQkxXSVApICs9IC1JJChMSUJMV0lQX0JBU0UpL2luY2x1ZGUgLUkkKExJQkxXSVBf
RVhUUkFDVEVEDQo+ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gICAjIExpYnJhcnkgZmxh
Z3MNCj4gICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAtTElCTFdJUF9DRkxBR1MteSArPSAt
V25vLXR5cGUtbGltaXRzIC1XdW51c2VkLXBhcmFtZXRlcg0KPiArTElCTFdJUF9DRkxBR1MteSAr
PSAtV25vLXR5cGUtbGltaXRzIC1Xbm8tdW51c2VkLXBhcmFtZXRlcg0KPiAgIExJQkxXSVBfQ0ZM
QUdTLSQoQ09ORklHX0xXSVBfREVCVUcpICs9IC1EVUtfREVCVUcNCj4gICBMSUJMV0lQX0NGTEFH
Uy15ICAgKz0gLURfX0lOX0xJQkxXSVBfXw0KPiAgIExJQkxXSVBfQ1hYRkxBR1MteSArPSAtRF9f
SU5fTElCTFdJUF9fDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 14:31:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 14:31:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7KhR-0001MN-Vh; Mon, 09 Sep 2019 14:31:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7KhR-0001MH-6D
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 14:31:25 +0000
X-Inumbo-ID: 7f020b6b-d30e-11e9-ac0d-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.82]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 7f020b6b-d30e-11e9-ac0d-12813bfff9fa;
 Mon, 09 Sep 2019 14:31:23 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QidO8bOBKLCERFgqv/vAuYkJskM+WFtGTqk1s19XNN2CVpUvuUKqmJ/nwrztof4ZhKKEnQLYkhaptBCbkdj9sTBqAuqWnCAAKJwqgAdgpWrOwIN1xQFOPjzKwFPJFCl5MPCfWfowuUmLcID31qy6iQz1vAPN/BZG0IqruUWaIqv7duym2NCu9MJQxKY81Z+J0gGAwhEXXhmwOYJjTisHTWfR8iwY0GjC8Z5rLU1Sm76sM2zKn6xtBqObef1qHP00KgEoLTvFqLngfZ+mXgY7BMgeUAE5oQyxOSeWNk8USntyLEsazM12nGl2egoQxs0J4fAhZDGnxp8Wk4omLV//jw==
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=AEoAbbVO0CWdOv5VHe6qaSqVddgXRkiOnQRFNlVbbGc=;
 b=nlMQT9tS3UXcZdar1SL+ALryyK4H8F2NKEy9glHLZhWCCGlz8orScwAehdhDvi3N5wnT8nb27G7hroy9qUW++Uhz0bCVSgmc44koBeyGh1w5hREYm+pZhO5lmtLdxGhhlgewD6D4mX3uqXO5g/Da9+5FpzS+mjXvzFODboHuy85DxVUtSUSGgMMlWoXCxKErKgILn9LzpUbZjHikf9sFz5x1meK+cjcRGMUzudoc+P11fEuNCAC/ZVJ7SDTHbUfoy91QN4BCIcAdi0T8CTR4V1jKBk/Kjpg5e8fD3NwvTR0GhLaSZD2NmZzBvgspEblLMDX0+AtUU15TBZLrjIOb1Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5020.eurprd01.prod.exchangelabs.com (20.177.211.91) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Mon, 9 Sep
 2019 14:31:22 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 14:31:22 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LWIP PATCH 4/5] sockets: Add socketpair() stub
Thread-Index: AQHVY1RCpOarhfTfkUGEicR5iHC66acjb9UA
Date: Mon, 9 Sep 2019 14:31:22 +0000
Message-ID: <fde14b62-2bf1-2e3a-45b8-9dee6d749673@stud.acs.upb.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
 <20190904190912.6801-5-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904190912.6801-5-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM0PR02CA0062.eurprd02.prod.outlook.com
 (2603:10a6:208:d2::39) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.105]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: c5e0b620-051e-49ec-6bbc-08d7353262df
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5020; 
x-ms-traffictypediagnostic: PR1PR01MB5020:
x-microsoft-antispam-prvs: <PR1PR01MB502061A48D8E7D0318063FFCA6B70@PR1PR01MB5020.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:81;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(376002)(396003)(366004)(136003)(39850400004)(189003)(199004)(6512007)(256004)(186003)(8936002)(54906003)(7736002)(64756008)(478600001)(66476007)(2906002)(66556008)(86362001)(6246003)(71190400001)(66946007)(99286004)(25786009)(71200400001)(4326008)(386003)(3846002)(53546011)(6506007)(102836004)(31696002)(476003)(2616005)(446003)(11346002)(486006)(76176011)(786003)(316002)(66066001)(5660300002)(31686004)(26005)(2501003)(6116002)(6486002)(52116002)(66446008)(229853002)(8676002)(305945005)(85182001)(85202003)(81166006)(53936002)(14454004)(81156014)(6436002)(110136005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5020;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: GNDgS7iV5qU34yRwYNM4CG8mi12Ozc9K87WsD81nU5ik+6aRwNb62hSRsJh1OzoBCdFKiq7PaHkG9j2wzh84upxFXsSzOHyY0B7TXXggoSAamADu0Sgn/gaBQfZeKRMlg/v46fKW3xyvinWtZhGTsbJGG/+Q34wXULjc0TUm/z+LLfOnDEmRZizoeOUe5SD3/yAuNw4g7aYIjQV9iRdoOkrvhhcTm7k1BCO8Qze17vcMyaM3VrXNj6WmPVX/9AlLttQR004jFdf3OXuEYtS+1L8pcgPpkcsOqrG6YMNhEQ62n3UjKDxoHiKMe3HkJBUOG5ByIQycoNxBtGxUjhDOxGRvK6v5XxpfkkaQ9UEd+omD4YnCZ+nNhU7a2oTO/F3wtwOIxzp/lAJGiIp0aHbrfjZX6JS+QC7/Uj2Vuffo1Mk=
x-ms-exchange-transport-forked: True
Content-ID: <B95AC2726330AB42B5CCA0C6E3076361@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: c5e0b620-051e-49ec-6bbc-08d7353262df
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 14:31:22.1359 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: P2Jqloqjb9TMApnl+rYnrhAphU0K8Y8M8YzikYAeXmJWHHUqZadENjKM9iGFw3xV/Frub9VAl0LMi0Z7tsn1TvfP0Gdqf2XsjghX/3vXEkMxoIGrlOpMhyLUu1T+0qPf
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5020
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 4/5] sockets: Add
 socketpair() stub
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdQk8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQu
YWNzLnVwYi5ybz4NCg0KT24gMDQuMDkuMjAxOSAyMjowOSwgQ29zdGluIEx1cHUgd3JvdGU6DQo+
IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQo+IC0t
LQ0KPiAgIGV4cG9ydHN5bXMudWsgICAgICAgIHwgMSArDQo+ICAgaW5jbHVkZS9zeXMvc29ja2V0
LmggfCAxICsNCj4gICBzb2NrZXRzLmMgICAgICAgICAgICB8IDYgKysrKysrDQo+ICAgMyBmaWxl
cyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykNCj4NCj4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMu
dWsgYi9leHBvcnRzeW1zLnVrDQo+IGluZGV4IDJmOWY0ZjYuLjBkNmM3ZTkgMTAwNjQ0DQo+IC0t
LSBhL2V4cG9ydHN5bXMudWsNCj4gKysrIGIvZXhwb3J0c3ltcy51aw0KPiBAQCAtNDcsNiArNDcs
NyBAQCBzZXRwcm90b2VudA0KPiAgIHNldHNvY2tvcHQNCj4gICBzaHV0ZG93bg0KPiAgIHNvY2tl
dA0KPiArc29ja2V0cGFpcg0KPiAgIHN5c19jaGVja190aW1lb3V0cw0KPiAgIHRjcF9hYm9ydA0K
PiAgIHRjcF9hY2NlcHQNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvc3lzL3NvY2tldC5oIGIvaW5j
bHVkZS9zeXMvc29ja2V0LmgNCj4gaW5kZXggN2UwMjdiOS4uOTkxYWUzZSAxMDA2NDQNCj4gLS0t
IGEvaW5jbHVkZS9zeXMvc29ja2V0LmgNCj4gKysrIGIvaW5jbHVkZS9zeXMvc29ja2V0LmgNCj4g
QEAgLTc1LDUgKzc1LDYgQEAgaW50IHNlbmQoaW50IHMsIGNvbnN0IHZvaWQgKmRhdGFwdHIsIHNp
emVfdCBzaXplLCBpbnQgZmxhZ3MpOw0KPiAgIGludCBzZW5kbXNnKGludCBzLCBjb25zdCBzdHJ1
Y3QgbXNnaGRyICptZXNzYWdlLCBpbnQgZmxhZ3MpOw0KPiAgIGludCBzZW5kdG8oaW50IHMsIGNv
bnN0IHZvaWQgKmRhdGFwdHIsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MsDQo+ICAgCSAgIGNvbnN0
IHN0cnVjdCBzb2NrYWRkciAqdG8sIHNvY2tsZW5fdCB0b2xlbik7DQo+ICtpbnQgc29ja2V0cGFp
cihpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sLCBpbnQgc3ZbMl0pOw0KPiAgIA0K
PiAgICNlbmRpZiAvKiBfVUtfTFdJUF9TT0NLRVRfSF8gKi8NCj4gZGlmZiAtLWdpdCBhL3NvY2tl
dHMuYyBiL3NvY2tldHMuYw0KPiBpbmRleCAxODA2ODQ2Li5mNGY3ZDQwIDEwMDY0NA0KPiAtLS0g
YS9zb2NrZXRzLmMNCj4gKysrIGIvc29ja2V0cy5jDQo+IEBAIC04MzEsMyArODMxLDkgQEAgaW50
IHNlbmR0byhpbnQgcywgY29uc3Qgdm9pZCAqZGF0YXB0ciwgc2l6ZV90IHNpemUsIGludCBmbGFn
cywNCj4gICBFWElUOg0KPiAgIAlyZXR1cm4gcmV0Ow0KPiAgIH0NCj4gKw0KPiAraW50IHNvY2tl
dHBhaXIoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IHN2WzJdKQ0KPiAr
ew0KPiArCWVycm5vID0gRU5PVFNVUDsNCj4gKwlyZXR1cm4gLTE7DQo+ICt9DQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 14:40:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 14:40:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7KqI-00039D-7H; Mon, 09 Sep 2019 14:40:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7KqG-000397-Us
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 14:40:32 +0000
X-Inumbo-ID: c580eaec-d30f-11e9-ac0d-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.45]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c580eaec-d30f-11e9-ac0d-12813bfff9fa;
 Mon, 09 Sep 2019 14:40:31 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=H0PP/PrcLvFMAZGVWGwvc6SQfmqABorFFQqy7n/yAgw9vDVl9YJ8D/vE/2VKhIzg8P5PifcPRwKsDLpNOQ5WO4AeWpCG2T1uJGJCmQ3nQ21gGtWlUzVtbdQVoIkk5z/Tnt73rOIHHcpJDPdEI6vRlodeMsGv0tl4Ld17LxXwSiPgqqQ1GVf8pthRZhCukFRPz6H8MmfLBQXremgPqBLl5eF+lcmpGaiSEkGxSPXHLI4o8j49Qguyszz18aBtf4r8JPi2iAljso67KFcGLupFcBsQdTY+wMGnTL2AGd1PqqUrtiaxUtuVinO20kaYunC9HeJ6roiYD5RDvkJ6wyFTOg==
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=8T9WDYz5WUYozUfwQ5yEiut7zkJOr1v2dBCfc0lFbDk=;
 b=JiUBfKfwbZW2F0A+PBr1ApAYVeMU1TSgThWFeYGqOLrXSHs/hbL1cgePebmpClVQN9+5qD7twiTI2NSaaV/mayO4/NXstPaVtbhxRVzpzcWcqFhzSzuPXGdCJK2aN+c06ekV0OwLJ73fKpg0omKeG19EdgKbpGa4sG+4Q7+CqjG7Z1h+e+wBwE7QQltdG43Aze0f7NH+UaG+4pSx3niEa1cEXLkYvE98faaXqxTs4Vc+NWwUP1EIdnSkvb1Zh4udzZed8CsFNTzwqa2Nt0/mlISKoVioEU7RU7L/dLdp1CYWAD+1BK/Bvf1nUDkBU1Kvw9Yy6+Yz8doSAiMjQOhRKg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4793.eurprd01.prod.exchangelabs.com (20.177.208.207) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.14; Mon, 9 Sep
 2019 14:40:28 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 14:40:28 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LWIP PATCH 3/5] sockets: Add recvmsg() function
Thread-Index: AQHVY1RC4bI3a8kXOUqEnTXiHVnO86cjcmAA
Date: Mon, 9 Sep 2019 14:40:27 +0000
Message-ID: <ce24d6a9-d7df-7725-c30c-a48259c3d186@stud.acs.upb.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
 <20190904190912.6801-4-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904190912.6801-4-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM0PR02CA0013.eurprd02.prod.outlook.com
 (2603:10a6:208:3e::26) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.103]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 6cfd9e06-ae45-4b07-c482-08d73533a828
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4793; 
x-ms-traffictypediagnostic: PR1PR01MB4793:
x-microsoft-antispam-prvs: <PR1PR01MB4793E0D35B3FC9113C73C9EEA6B70@PR1PR01MB4793.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:107;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(136003)(376002)(39850400004)(366004)(396003)(189003)(199004)(2616005)(66946007)(2906002)(66476007)(66556008)(64756008)(2501003)(66446008)(99286004)(71200400001)(14454004)(3846002)(478600001)(31686004)(85202003)(71190400001)(256004)(86362001)(85182001)(31696002)(6116002)(5660300002)(8936002)(81166006)(81156014)(8676002)(26005)(305945005)(7736002)(53936002)(52116002)(486006)(6436002)(4326008)(6512007)(110136005)(6246003)(316002)(786003)(66066001)(54906003)(25786009)(229853002)(6486002)(186003)(386003)(53546011)(6506007)(76176011)(11346002)(102836004)(476003)(446003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4793;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: +HtLxZjaNBgY45rPKxLtltsFE5jbLiEnSi6dmj00Tu40FNXqyBVmJt8ucfwIYe4NTZRbYayQ0e1x6fVwAX2qxiGyk7+cNmxbuqEaWehXc5jsQrmy1uztHqt/x7W6z/2YKN0HkwP4mX7pdIkwgPcR2mWtJJ99P7v3RT+Iw0XGhSrUMTJeB9anOlrTgU7E1y8j82ugetm7LJ88KUufIg6Eq2mKcFGZkeGrLNpEIItJFbXIa5buOywCj7OO+n9JyYf5sHuzPo0H5UHtRCiZQ/yURtvhRd9PNzCz91+keadrN16gOblGos4k6efnw8uxjGKo0f9/dCsOXvVxT0Ld9hlMpwm/zg3AzYVC1UDTtqEqwaJiXJbDEUVCDlyBK1hESTZqNxidaegFnvWJZb9L20C/VITc9RjaJh+7/WLudwXHb0k=
x-ms-exchange-transport-forked: True
Content-ID: <7D6C8740B04C944897C80064177BC1E3@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 6cfd9e06-ae45-4b07-c482-08d73533a828
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 14:40:27.8402 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Lzk7G75BWlrnszmt8ynJ5bCB3rKRI85cfM7+v9xWTsZ9/R4jUzg7zf0uEmMqZHcZoGUJwyDoIx+QNm2IfuB3URYYVNGb6Ktxho3GthfAwodgpaiovT+bbvbZObyWCa7i
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4793
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 3/5] sockets: Add recvmsg()
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdQk8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQu
YWNzLnVwYi5ybz4NCg0KT24gMDQuMDkuMjAxOSAyMjowOSwgQ29zdGluIEx1cHUgd3JvdGU6DQo+
IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQo+IC0t
LQ0KPiAgIGV4cG9ydHN5bXMudWsgICAgICAgIHwgIDEgKw0KPiAgIGluY2x1ZGUvc3lzL3NvY2tl
dC5oIHwgIDEgKw0KPiAgIHNvY2tldHMuYyAgICAgICAgICAgIHwgMTkgKysrKysrKysrKysrKysr
KysrKw0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQ0KPg0KPiBkaWZmIC0t
Z2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsNCj4gaW5kZXggMWNhNDNmOC4uMmY5
ZjRmNiAxMDA2NDQNCj4gLS0tIGEvZXhwb3J0c3ltcy51aw0KPiArKysgYi9leHBvcnRzeW1zLnVr
DQo+IEBAIC0zOCw2ICszOCw3IEBAIHBidWZfcmVmDQo+ICAgcG9sbA0KPiAgIHJlY3YNCj4gICBy
ZWN2ZnJvbQ0KPiArcmVjdm1zZw0KPiAgIHNlbGVjdA0KPiAgIHNlbmQNCj4gICBzZW5kbXNnDQo+
IGRpZmYgLS1naXQgYS9pbmNsdWRlL3N5cy9zb2NrZXQuaCBiL2luY2x1ZGUvc3lzL3NvY2tldC5o
DQo+IGluZGV4IGFmZjA2NGUuLjdlMDI3YjkgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvc3lzL3Nv
Y2tldC5oDQo+ICsrKyBiL2luY2x1ZGUvc3lzL3NvY2tldC5oDQo+IEBAIC03MCw2ICs3MCw3IEBA
IGludCBsaXN0ZW4oaW50IHMsIGludCBiYWNrbG9nKTsNCj4gICBpbnQgcmVjdihpbnQgcywgdm9p
ZCAqbWVtLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MpOw0KPiAgIGludCByZWN2ZnJvbShpbnQgcywg
dm9pZCAqbWVtLCBzaXplX3QgbGVuLCBpbnQgZmxhZ3MsDQo+ICAgCSAgICAgc3RydWN0IHNvY2th
ZGRyICpmcm9tLCBzb2NrbGVuX3QgKmZyb21sZW4pOw0KPiAraW50IHJlY3Ztc2coaW50IHMsIHN0
cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKTsNCj4gICBpbnQgc2VuZChpbnQgcywgY29uc3Qg
dm9pZCAqZGF0YXB0ciwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7DQo+ICAgaW50IHNlbmRtc2co
aW50IHMsIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1lc3NhZ2UsIGludCBmbGFncyk7DQo+ICAgaW50
IHNlbmR0byhpbnQgcywgY29uc3Qgdm9pZCAqZGF0YXB0ciwgc2l6ZV90IHNpemUsIGludCBmbGFn
cywNCj4gZGlmZiAtLWdpdCBhL3NvY2tldHMuYyBiL3NvY2tldHMuYw0KPiBpbmRleCBhYTc3MmRh
Li4xODA2ODQ2IDEwMDY0NA0KPiAtLS0gYS9zb2NrZXRzLmMNCj4gKysrIGIvc29ja2V0cy5jDQo+
IEBAIC03NTUsNiArNzU1LDI1IEBAIEVYSVQ6DQo+ICAgCXJldHVybiByZXQ7DQo+ICAgfQ0KPiAg
IA0KPiAraW50IHJlY3Ztc2coaW50IHMsIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGZsYWdzKQ0K
PiArew0KPiArCWludCByZXQgPSAwOw0KPiArCXN0cnVjdCBzb2NrX25ldF9maWxlICpmaWxlID0g
TlVMTDsNCj4gKw0KPiArCWZpbGUgPSBzb2NrX25ldF9maWxlX2dldChzKTsNCj4gKwlpZiAoUFRS
SVNFUlIoZmlsZSkpIHsNCj4gKwkJTFdJUF9ERUJVR0YoU09DS0VUU19ERUJVRywNCj4gKwkJCSAg
ICAoImZhaWxlZCB0byBpZGVudGlmeSBzb2NrZXQgZGVzY3JpcHRvclxuIikpOw0KPiArCQlyZXQg
PSAtMTsNCj4gKwkJU09DS19ORVRfU0VUX0VSUk5PKFBUUjJFUlIoZmlsZSkpOw0KPiArCQlnb3Rv
IEVYSVQ7DQo+ICsJfQ0KPiArCXJldCA9IGx3aXBfcmVjdm1zZyhmaWxlLT5zb2NrX2ZkLCBtc2cs
IGZsYWdzKTsNCj4gKwl2ZnNjb3JlX3B1dF9maWxlKGZpbGUtPnZmc2NvcmVfZmlsZSk7IC8qIHJl
bGVhc2UgcmVmY291bnQgKi8NCj4gK0VYSVQ6DQo+ICsJcmV0dXJuIHJldDsNCj4gK30NCj4gKw0K
PiAgIGludCBzZW5kKGludCBzLCBjb25zdCB2b2lkICpkYXRhcHRyLCBzaXplX3Qgc2l6ZSwgaW50
IGZsYWdzKQ0KPiAgIHsNCj4gICAJaW50IHJldCA9IDA7DQpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 14:45:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 14:45:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Kuk-0003Lj-CW; Mon, 09 Sep 2019 14:45:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7Kuj-0003La-AQ
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 14:45:09 +0000
X-Inumbo-ID: 6a6397b2-d310-11e9-978d-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.75]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6a6397b2-d310-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 14:45:07 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=IOimFjdYvv8kSONW58ZpB6egNqwPWfRPZiJatd4XNZWl9fC59klBz/5gnM0PJF6ye2rj8bEBAMowuFos+2oxsh9kzYtS3+chgy3FSf0AiYj2WlvExJR/JviYzv4VnBUAfhoyygJZb7w8nHoIyAv8J+cH+HiTjnirH0uYlD0aU6HQqD2FKycBEgjaqjM4yHbQHhFD2I67scoVc5KEc0ZHvaiCBUkBMCxkFeG5s5glDKutmJ/TwnPXQH3gMz8IHubW/3STSJd6tg9DR/sXYV9O7bOkvuxZBuqNLxHJC+PB8ys3bR9dGc2OitCCHoe3Uly5W5M0fh7RXLGgaRPJLLiUjw==
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=/lFgUR9vQaOBP104wqjQW5kpbBN4R6GTIEhl3JuTqUY=;
 b=RqhWZElvM4GMaFnPmx0piXcM96Hg4MYAcVlv078yZ5VVI1GaEYZRGsHXbPWv/qg1FvZIrP6peuatBX0Nr+eVmHkCzCXMRhVZ0IaOSaayEDHlHEC06R6CT/0tlhCila5LocMYNdhmCSYwSBRyvNXoLoRJp5tps5wx0zHG7aJm27Wuwj3RdsMpUMwr9M97h7qscwCCGIqx7oiIYOEKPMD8ax4j1Y3TC2gBGFB6vlCliZV6TBSXEajKk/BEPQ5EkkSzTGYdONXNFyTcQTRkh0YdXm2WqYCpZF6fBU6TvbWjrbYwnh09nHD7kIcvqzaa0i/kExlIth0VdCZ4qgz7JeubAA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5034.eurprd01.prod.exchangelabs.com (20.177.211.97) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Mon, 9 Sep
 2019 14:45:05 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 14:45:05 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LWIP PATCH 2/5] sys/socket.h: Add SOMAXCONN macro
Thread-Index: AQHVY1RByUwJ4k9UlEKhf91G9gz+racjc6uA
Date: Mon, 9 Sep 2019 14:45:05 +0000
Message-ID: <7dfb50eb-cd2e-84df-63d9-2687e28f2ad0@stud.acs.upb.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
 <20190904190912.6801-3-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904190912.6801-3-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR2P264CA0002.FRAP264.PROD.OUTLOOK.COM (2603:10a6:101::14)
 To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.103]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 294be8eb-3e62-48e2-226e-08d735344d72
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5034; 
x-ms-traffictypediagnostic: PR1PR01MB5034:
x-microsoft-antispam-prvs: <PR1PR01MB503427DEFA3A827F58C13938A6B70@PR1PR01MB5034.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:517;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(136003)(346002)(396003)(39850400004)(376002)(199004)(189003)(2906002)(66556008)(81156014)(66066001)(4744005)(5660300002)(8676002)(7736002)(66476007)(305945005)(102836004)(8936002)(66946007)(81166006)(229853002)(386003)(6506007)(53546011)(26005)(6436002)(186003)(76176011)(6486002)(486006)(476003)(2616005)(446003)(11346002)(53936002)(6246003)(85182001)(6512007)(85202003)(316002)(786003)(110136005)(4326008)(25786009)(256004)(54906003)(2501003)(64756008)(66446008)(6116002)(31686004)(3846002)(31696002)(14454004)(478600001)(86362001)(71190400001)(99286004)(71200400001)(52116002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5034;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 33j7RxDlYmngZS1SKHVgLnJDOMVjuV8NHTYhjoVWlorZZBWrszp6JM+8MzZVA9EFy+VC70mwizBbXfTbdobV/N38p0HJFoqGjzbMmhurARoSxbNIWeLgq89mJFuTGsHSPyp8vFXq+McnvXDSA26KKuoHcxiv9pKqabSQGzrQoRhrcn9+jwrGkNJoTcgEXBiTw0oIaxKPp6acX0PBZTKz1urlc4eWPO0BFRoUbeMfCpIAdEmvuiMdy5NJ6/rgd4/lAV/U6P5fwSnLnI+TEcmODo/ZHe1ktwVANfuWMmT0I5yLBv+NUv37nXWptcSMYY1iD83f8As6wi+OuPDVrGLNuEXCxgcQ1abi2Uheh8u7xVP93B/YBFVrQSsT6B9BzUM66nwOcGvFR23TBvogVLk9cdPkTnP58RnstTgZ90/+EO4=
x-ms-exchange-transport-forked: True
Content-ID: <85BE6B39C149AA4D9F5560F88ACC1296@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 294be8eb-3e62-48e2-226e-08d735344d72
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 14:45:05.1730 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: tQD6Ji5ypGCSRr5sQ2xzj24WKYBaatl5jSGqB2EdCkyYCrcSWeusnRUn2I1G3Ku7QDa5HbBWhbScAIxv8jlTmyHJhUd+sFsy6/iyvCWJmEDcehDEtsOSKnhx/i8kufBH
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5034
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 2/5] sys/socket.h: Add
 SOMAXCONN macro
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIENvc3RpbiENCg0KUmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdQk8dmxhZF9h
bmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4NCg0KT24gMDQuMDkuMjAxOSAyMjowOSwgQ29z
dGluIEx1cHUgd3JvdGU6DQo+IFRoaXMgaXMgdGhlIG1heGltdW0gdmFsdWUgZm9yIHRoZSBiYWNr
bG9nIHBhcmFtZXRlciBvZiBsaXN0ZW4oKSBmdW5jdGlvbi4NCj4NCj4gU2lnbmVkLW9mZi1ieTog
Q29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCj4gLS0tDQo+ICAgaW5jbHVkZS9z
eXMvc29ja2V0LmggfCA0ICsrKysNCj4gICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCsp
DQo+DQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3N5cy9zb2NrZXQuaCBiL2luY2x1ZGUvc3lzL3Nv
Y2tldC5oDQo+IGluZGV4IDdhOGFjYTAuLmFmZjA2NGUgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUv
c3lzL3NvY2tldC5oDQo+ICsrKyBiL2luY2x1ZGUvc3lzL3NvY2tldC5oDQo+IEBAIC01Miw2ICs1
MiwxMCBAQA0KPiAgICNkZWZpbmUgU09DS19TRVFQQUNLRVQgNQ0KPiAgICNlbmRpZg0KPiAgIA0K
PiArI2lmbmRlZiBTT01BWENPTk4NCj4gKyNkZWZpbmUgU09NQVhDT05OIDEyOA0KPiArI2VuZGlm
DQo+ICsNCj4gICBpbnQgc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQgcHJvdG9jb2wp
Ow0KPiAgIGludCBhY2NlcHQoaW50IHMsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90
ICphZGRybGVuKTsNCj4gICBpbnQgYmluZChpbnQgcywgY29uc3Qgc3RydWN0IHNvY2thZGRyICpu
YW1lLCBzb2NrbGVuX3QgbmFtZWxlbik7DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 14:52:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 14:52:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7L1x-0004MM-GR; Mon, 09 Sep 2019 14:52:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7L1w-0004MD-B1
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 14:52:36 +0000
X-Inumbo-ID: 74967596-d311-11e9-978d-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:7e19::62d])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 74967596-d311-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 14:52:34 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=c+Porh10NGpz0KYpr4DdGQtsl6jjAGIgUh7wuXkFbV8RceofEHf46mvN0HnsJsnGYLwKYVrOveipoHEAH//MDvog9wX7z202g5fBfbfSO+P/6n3ppuT85XGz1WMXKQvs/7srGNNCcHB/5hHHKnns0f8kOUDcQC1xuJNQL5aet94TgNOqNHvRB9VB3UR5UBixvSLgrHBGzEv1H+N0KAfl+GOuObJV3nmMQMnjGWl7OpJ7QydiTiCF9suNV+ZZ9EJBToY9Rt4OoPDRLZyyU28EDI+48XTKYwItcPg4OFIfCNy2+sM0pQKN1TnHYHyb2D7swbP8UdjtCrh/is+XigSgyQ==
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=ubVaUzNq8WtujHSjAhT60lxs+RAyCwDFgXWHGlZv01E=;
 b=di4lxJ/qdyPB4rrWnX9/ENoypPgVldnfaetBcZIrmUflJJwOQgOVNenyWFecK8aePoE7VhO5eoVWVdcxETy6RlCr5Rh5wEPck1txSBcFCy1OTTUT8A4hAqjnke72HPyDAGA+/wuU4lSMiyHq6tOcJdeaM8ZWoVgYJ1NuGRaGtawLSnIlHQs3fGy8V57byNUARQx3leu0RnQMBzfzuugbE9RvEfhqFg1F4iWwL7T8C1w7zJT5aGb2RtRVFiORxb/Ta3ykhc54oijg0/UKdKc1Kl4qsve/yrB6lrUYRRJFyGG5Uttyx1haT+DskWa0TlRXTtLxCljDzMq6IzFVWw6QMQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4874.eurprd01.prod.exchangelabs.com (20.177.208.206) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.20; Mon, 9 Sep
 2019 14:52:31 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 14:52:31 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h declarations
Thread-Index: AQHVY1RC7RVOKCO6+EShUiUhavbnDKcjdb6A
Date: Mon, 9 Sep 2019 14:52:31 +0000
Message-ID: <75a532df-c09b-f420-121f-3705899f075f@stud.acs.upb.ro>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
 <20190904190912.6801-2-costin.lupu@cs.pub.ro>
In-Reply-To: <20190904190912.6801-2-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM3PR03CA0070.eurprd03.prod.outlook.com
 (2603:10a6:207:5::28) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.103]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 15c95273-6e2e-480c-7e12-08d735355788
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4874; 
x-ms-traffictypediagnostic: PR1PR01MB4874:
x-microsoft-antispam-prvs: <PR1PR01MB4874B7C00C7C6E53CA81CBB0A6B70@PR1PR01MB4874.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:119;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(979002)(39840400004)(376002)(346002)(366004)(136003)(396003)(199004)(189003)(86362001)(186003)(81166006)(81156014)(8676002)(26005)(6486002)(8936002)(2906002)(31686004)(7736002)(6512007)(54896002)(6436002)(229853002)(4326008)(85202003)(102836004)(6246003)(66066001)(386003)(6506007)(53546011)(236005)(3846002)(6116002)(53936002)(786003)(316002)(99286004)(25786009)(2501003)(256004)(5660300002)(446003)(71190400001)(76176011)(110136005)(52116002)(54906003)(66476007)(66446008)(31696002)(64756008)(478600001)(486006)(66556008)(11346002)(476003)(71200400001)(66946007)(14454004)(85182001)(2616005)(969003)(989001)(999001)(1009001)(1019001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4874;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: TS49UyF1O/R/m30FULM/KTgVAApKTY/hrwkLxC0k9YCwESXjO+cRCUgvCc8RFiUzU67wtw7vENyW1PGVVieEXSpSKrjQQF8kYitWVDnGgLM6vTD29F2PJe0+081+C1RN+8Gipl+tfDhX8tRbr8/L9entB6tESK5dMTykG6ZVEwGnwOjxqO6a1+OVBEAT4sTFp2RRhFfNWppkw9CTVOFD/DofEME8RYCkEIk9rtoPtzkjL6fdbIcK4jdn6sWP7KgZPRUBIyO4QScYRwJcQdR1IgKdmAQ/SMDK77etOeoPVoshPcJsCed8fLGeeFLDIEIjcoOnnvmgc97M9431CGQS4kVXm+XW4B61kU+07HPYAFBQWyeeoQSbM1CSUiDvSwIjirIsePXRmjmr3eqgxX35PM6yc+hN9f4XuQUPjCMATks=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 15c95273-6e2e-480c-7e12-08d735355788
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 14:52:31.5845 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: NASc8tZr7/LOAg49ovPoeuksLW3pEul3587guX14POM34qg1d8tfHzvv9g5MNbKl3F0fT7DdzRD5KrSUAZuRlsK7kKZPN//YWFfCt6FclZ0kuyQdYf6EOvdCZLheKLEY
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4874
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h
 declarations
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: multipart/mixed; boundary="===============8594606353560412713=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============8594606353560412713==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_75a532dfc09bf420121f3705899f075fstudacsupbro_"

--_000_75a532dfc09bf420121f3705899f075fstudacsupbro_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SGV5IENvc3RpbiwNCg0KSSBoYXZlIG9uZSBzbWFsbCBjb21tZW50IGlubGluZS4NCg0KVGhhbmtz
LA0KDQpWbGFkDQoNCk9uIDA0LjA5LjIwMTkgMjI6MDksIENvc3RpbiBMdXB1IHdyb3RlOg0KDQoq
IEFzIHdlIGRpZCBpbiBjb21taXQgYjBkYzU5M2QsIHdlIHVzZSBmdW5jdGlvbiB3cmFwcGVycyBp
bnN0ZWFkIG9mIG1hY3JvcyBmb3INCmdldGhvc3RieW5hbWUoKSBhbmQgZ2V0aG9zdGJ5bmFtZV9y
KCkNCiogQWRkIG1pc3NpbmcgZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBv
ciBzdHViYmVkIGluIGdsdWUgY29kZQ0KDQpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29z
dGluLmx1cHVAY3MucHViLnJvPjxtYWlsdG86Y29zdGluLmx1cHVAY3MucHViLnJvPg0KLS0tDQog
ZXhwb3J0c3ltcy51ayAgIHwgIDEgKw0KIGhvc3QuYyAgICAgICAgICB8IDE5ICsrKysrKysrKysr
KysrKysrKysNCiBpbmNsdWRlL25ldGRiLmggfCAyMyArKysrKysrKysrKysrKysrKystLS0tLQ0K
IDMgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkNCg0KZGlm
ZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrDQppbmRleCA2ZmU5NWVjLi4x
Y2E0M2Y4IDEwMDY0NA0KLS0tIGEvZXhwb3J0c3ltcy51aw0KKysrIGIvZXhwb3J0c3ltcy51aw0K
QEAgLTcsNiArNyw3IEBAIGZyZWVhZGRyaW5mbw0KIGdhaV9zdHJlcnJvcg0KIGdldGFkZHJpbmZv
DQogZ2V0aG9zdGJ5YWRkcg0KK2dldGhvc3RieW5hbWUNCg0KU2hvdWxkbid0IHdlIGFsc28gZXhw
b3J0IHRoZSBnZXRob3N0YnluYW1lX3Igc3ltYm9sPw0KDQoNCiBnZXRuYW1laW5mbw0KIGdldHBl
ZXJuYW1lDQogZ2V0cHJvdG9ieW5hbWUNCmRpZmYgLS1naXQgYS9ob3N0LmMgYi9ob3N0LmMNCmlu
ZGV4IDU1OWQxODYuLjljNGM4ZWEgMTAwNjQ0DQotLS0gYS9ob3N0LmMNCisrKyBiL2hvc3QuYw0K
QEAgLTMzLDEwICszMywyOSBAQA0KDQogI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICNpbmNsdWRlIDxz
eXMvc29ja2V0Lmg+DQorI2luY2x1ZGUgPG5ldGRiLmg+DQorDQorDQorI2lmIExXSVBfRE5TICYm
IExXSVBfU09DS0VUDQorDQorI2lmICEoTFdJUF9DT01QQVRfU09DS0VUUykNCitzdHJ1Y3QgaG9z
dGVudCAqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQ0KK3sNCisgICAgICAgcmV0dXJu
IGx3aXBfZ2V0aG9zdGJ5bmFtZShuYW1lKTsNCit9DQorDQoraW50IGdldGhvc3RieW5hbWVfcihj
b25zdCBjaGFyICpuYW1lLA0KKyAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpyZXQsIGNo
YXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwNCisgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCAq
KnJlc3VsdCwgaW50ICpoX2Vycm5vcCkNCit7DQorICAgICAgIHJldHVybiBsd2lwX2dldGhvc3Ri
eW5hbWVfcihuYW1lLCByZXQsIGJ1ZiwgYnVmbGVuLCByZXN1bHQsIGhfZXJybm9wKTsNCit9DQor
I2VuZGlmDQoNCiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICphZGRy
IF9fdW51c2VkLA0KICAgICAgICBzb2NrbGVuX3QgbGVuIF9fdW51c2VkLCBpbnQgdHlwZSBfX3Vu
dXNlZCkNCiB7DQogICAgICAgIHJldHVybiBOVUxMOw0KIH0NCisjZW5kaWYNCg0KZGlmZiAtLWdp
dCBhL2luY2x1ZGUvbmV0ZGIuaCBiL2luY2x1ZGUvbmV0ZGIuaA0KaW5kZXggMDg1NmE0OS4uYjEw
MDEzNiAxMDA2NDQNCi0tLSBhL2luY2x1ZGUvbmV0ZGIuaA0KKysrIGIvaW5jbHVkZS9uZXRkYi5o
DQpAQCAtMSwxMCArMSwxNiBAQA0KICNpbmNsdWRlIDxjb21wYXQvcG9zaXgvbmV0ZGIuaD4NCg0K
LSNpZiBMV0lQX0ROUyAmJiBMV0lQX1NPQ0tFVCAmJiAhKExXSVBfQ09NUEFUX1NPQ0tFVFMpDQor
I2lmIExXSVBfRE5TICYmIExXSVBfU09DS0VUDQoNCi0jZGVmaW5lIGdldGhvc3RieW5hbWUobmFt
ZSkgbHdpcF9nZXRob3N0YnluYW1lKG5hbWUpDQotI2RlZmluZSBnZXRob3N0YnluYW1lX3IobmFt
ZSwgcmV0LCBidWYsIGJ1ZmxlbiwgcmVzdWx0LCBoX2Vycm5vcCkgXA0KLSAgICAgICAgICAgICAg
IGx3aXBfZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIHJldCwgYnVmLCBidWZsZW4sIHJlc3VsdCwgaF9l
cnJub3ApDQorI2lmICEoTFdJUF9DT01QQVRfU09DS0VUUykNCitzdHJ1Y3QgaG9zdGVudCAqZ2V0
aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKTsNCitpbnQgZ2V0aG9zdGJ5bmFtZV9yKGNvbnN0
IGNoYXIgKm5hbWUsDQorICAgICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKnJldCwgY2hhciAq
YnVmLCBzaXplX3QgYnVmbGVuLA0KKyAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqcmVz
dWx0LCBpbnQgKmhfZXJybm9wKTsNCisjZW5kaWYNCisNCitzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9z
dGJ5YWRkcihjb25zdCB2b2lkICphZGRyIF9fdW51c2VkLA0KKyAgICAgICAgICAgICAgIHNvY2ts
ZW5fdCBsZW4gX191bnVzZWQsIGludCB0eXBlIF9fdW51c2VkKTsNCg0KIGludCBnZXRhZGRyaW5m
byhjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLA0KICAgICAgICAgICAgICAg
IGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsDQpAQCAtMTMsNiArMTksOSBAQCB2b2lkIGZy
ZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKnJlcyk7DQoNCiAjZW5kaWYgLyogTFdJUF9ETlMg
JiYgTFdJUF9TT0NLRVQgJiYgIShMV0lQX0NPTVBBVF9TT0NLRVRTKSAqLw0KDQorY29uc3QgY2hh
ciAqZ2FpX3N0cmVycm9yKGludCBlcnJjb2RlKTsNCisNCisNCiBzdHJ1Y3Qgc2VydmVudCB7DQog
ICAgICAgIGNoYXIgICAgKnNfbmFtZTsgICAgICAgIC8qIG9mZmljaWFsIHNlcnZpY2UgbmFtZSAq
Lw0KICAgICAgICBjaGFyICAgICoqc19hbGlhc2VzOyAgICAvKiBhbGlhcyBsaXN0ICovDQpAQCAt
MjYsNyArMzUsMTEgQEAgc3RydWN0IHByb3RvZW50IHsNCiAgICAgICAgaW50ICAgICBwX3Byb3Rv
OyAgICAgICAgLyogcHJvdG9jb2wgIyAqLw0KIH07DQoNCi1jb25zdCBjaGFyICpnYWlfc3RyZXJy
b3IoaW50IGVycmNvZGUpOw0KK3N0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9lbnQodm9pZCk7DQor
c3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bmFtZShjb25zdCBjaGFyICpuYW1lKTsNCitzdHJ1
Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIoaW50IG51bSk7DQordm9pZCBlbmRwcm90b2Vu
dCh2b2lkKTsNCit2b2lkIHNldHByb3RvZW50KGludCBzdGF5b3Blbik7DQoNCiAvKg0KICAqIENv
bnN0YW50cyBmb3IgZ2V0bmFtZWluZm8oKQ0KDQo=

--_000_75a532dfc09bf420121f3705899f075fstudacsupbro_
Content-Type: text/html; charset="utf-8"
Content-ID: <88C112666335C442B0FA478FE4359E23@eurprd01.prod.exchangelabs.com>
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHRleHQ9IiMwMDAwMDAi
IGJnY29sb3I9IiNGRkZGRkYiPg0KPHA+SGV5IENvc3Rpbiw8L3A+DQo8cD5JIGhhdmUgb25lIHNt
YWxsIGNvbW1lbnQgaW5saW5lLjwvcD4NCjxwPlRoYW5rcyw8L3A+DQo8cD5WbGFkPGJyPg0KPC9w
Pg0KPGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAwNC4wOS4yMDE5IDIyOjA5LCBDb3N0
aW4gTHVwdSB3cm90ZTo8YnI+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9
Im1pZDoyMDE5MDkwNDE5MDkxMi42ODAxLTItY29zdGluLmx1cHVAY3MucHViLnJvIj4NCjxwcmUg
Y2xhc3M9Im1vei1xdW90ZS1wcmUiIHdyYXA9IiI+KiBBcyB3ZSBkaWQgaW4gY29tbWl0IGIwZGM1
OTNkLCB3ZSB1c2UgZnVuY3Rpb24gd3JhcHBlcnMgaW5zdGVhZCBvZiBtYWNyb3MgZm9yDQpnZXRo
b3N0YnluYW1lKCkgYW5kIGdldGhvc3RieW5hbWVfcigpDQoqIEFkZCBtaXNzaW5nIGRlY2xhcmF0
aW9ucyBvZiBmdW5jdGlvbnMgaW1wbGVtZW50ZWQgb3Igc3R1YmJlZCBpbiBnbHVlIGNvZGUNCg0K
U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGEgY2xhc3M9Im1vei10eHQtbGluay1yZmMyMzk2
RSIgaHJlZj0ibWFpbHRvOmNvc3Rpbi5sdXB1QGNzLnB1Yi5ybyI+Jmx0O2Nvc3Rpbi5sdXB1QGNz
LnB1Yi5ybyZndDs8L2E+DQotLS0NCiBleHBvcnRzeW1zLnVrICAgfCAgMSAmIzQzOw0KIGhvc3Qu
YyAgICAgICAgICB8IDE5ICYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0Mzsm
IzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7DQog
aW5jbHVkZS9uZXRkYi5oIHwgMjMgJiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0Mzsm
IzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7LS0t
LS0NCiAzIGZpbGVzIGNoYW5nZWQsIDM4IGluc2VydGlvbnMoJiM0MzspLCA1IGRlbGV0aW9ucygt
KQ0KDQpkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsNCmluZGV4IDZm
ZTk1ZWMuLjFjYTQzZjggMTAwNjQ0DQotLS0gYS9leHBvcnRzeW1zLnVrDQomIzQzOyYjNDM7JiM0
MzsgYi9leHBvcnRzeW1zLnVrDQpAQCAtNyw2ICYjNDM7Nyw3IEBAIGZyZWVhZGRyaW5mbw0KIGdh
aV9zdHJlcnJvcg0KIGdldGFkZHJpbmZvDQogZ2V0aG9zdGJ5YWRkcg0KJiM0MztnZXRob3N0Ynlu
YW1lPC9wcmU+DQo8L2Jsb2NrcXVvdGU+DQo8Y29kZT48c3BhbiBjbGFzcz0ibiI+U2hvdWxkbid0
IHdlIGFsc28gZXhwb3J0IHRoZSBnZXRob3N0YnluYW1lX3Igc3ltYm9sPzwvc3Bhbj48L2NvZGU+
PGNvZGU+PC9jb2RlPg0KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOjIwMTkwOTA0
MTkwOTEyLjY4MDEtMi1jb3N0aW4ubHVwdUBjcy5wdWIucm8iPg0KPHByZSBjbGFzcz0ibW96LXF1
b3RlLXByZSIgd3JhcD0iIj4NCiBnZXRuYW1laW5mbw0KIGdldHBlZXJuYW1lDQogZ2V0cHJvdG9i
eW5hbWUNCmRpZmYgLS1naXQgYS9ob3N0LmMgYi9ob3N0LmMNCmluZGV4IDU1OWQxODYuLjljNGM4
ZWEgMTAwNjQ0DQotLS0gYS9ob3N0LmMNCiYjNDM7JiM0MzsmIzQzOyBiL2hvc3QuYw0KQEAgLTMz
LDEwICYjNDM7MzMsMjkgQEANCiANCiAjaW5jbHVkZSAmbHQ7dW5pc3RkLmgmZ3Q7DQogI2luY2x1
ZGUgJmx0O3N5cy9zb2NrZXQuaCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0O25ldGRiLmgmZ3Q7DQom
IzQzOw0KJiM0MzsNCiYjNDM7I2lmIExXSVBfRE5TICZhbXA7JmFtcDsgTFdJUF9TT0NLRVQNCiYj
NDM7DQomIzQzOyNpZiAhKExXSVBfQ09NUEFUX1NPQ0tFVFMpDQomIzQzO3N0cnVjdCBob3N0ZW50
ICpnZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpDQomIzQzO3sNCiYjNDM7CXJldHVybiBs
d2lwX2dldGhvc3RieW5hbWUobmFtZSk7DQomIzQzO30NCiYjNDM7DQomIzQzO2ludCBnZXRob3N0
YnluYW1lX3IoY29uc3QgY2hhciAqbmFtZSwNCiYjNDM7CQlzdHJ1Y3QgaG9zdGVudCAqcmV0LCBj
aGFyICpidWYsIHNpemVfdCBidWZsZW4sDQomIzQzOwkJc3RydWN0IGhvc3RlbnQgKipyZXN1bHQs
IGludCAqaF9lcnJub3ApDQomIzQzO3sNCiYjNDM7CXJldHVybiBsd2lwX2dldGhvc3RieW5hbWVf
cihuYW1lLCByZXQsIGJ1ZiwgYnVmbGVuLCByZXN1bHQsIGhfZXJybm9wKTsNCiYjNDM7fQ0KJiM0
MzsjZW5kaWYNCiANCiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICph
ZGRyIF9fdW51c2VkLA0KIAlzb2NrbGVuX3QgbGVuIF9fdW51c2VkLCBpbnQgdHlwZSBfX3VudXNl
ZCkNCiB7DQogCXJldHVybiBOVUxMOw0KIH0NCiYjNDM7I2VuZGlmDQogDQpkaWZmIC0tZ2l0IGEv
aW5jbHVkZS9uZXRkYi5oIGIvaW5jbHVkZS9uZXRkYi5oDQppbmRleCAwODU2YTQ5Li5iMTAwMTM2
IDEwMDY0NA0KLS0tIGEvaW5jbHVkZS9uZXRkYi5oDQomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRl
L25ldGRiLmgNCkBAIC0xLDEwICYjNDM7MSwxNiBAQA0KICNpbmNsdWRlICZsdDtjb21wYXQvcG9z
aXgvbmV0ZGIuaCZndDsNCiANCi0jaWYgTFdJUF9ETlMgJmFtcDsmYW1wOyBMV0lQX1NPQ0tFVCAm
YW1wOyZhbXA7ICEoTFdJUF9DT01QQVRfU09DS0VUUykNCiYjNDM7I2lmIExXSVBfRE5TICZhbXA7
JmFtcDsgTFdJUF9TT0NLRVQNCiANCi0jZGVmaW5lIGdldGhvc3RieW5hbWUobmFtZSkgbHdpcF9n
ZXRob3N0YnluYW1lKG5hbWUpDQotI2RlZmluZSBnZXRob3N0YnluYW1lX3IobmFtZSwgcmV0LCBi
dWYsIGJ1ZmxlbiwgcmVzdWx0LCBoX2Vycm5vcCkgXA0KLQkJbHdpcF9nZXRob3N0YnluYW1lX3Io
bmFtZSwgcmV0LCBidWYsIGJ1ZmxlbiwgcmVzdWx0LCBoX2Vycm5vcCkNCiYjNDM7I2lmICEoTFdJ
UF9DT01QQVRfU09DS0VUUykNCiYjNDM7c3RydWN0IGhvc3RlbnQgKmdldGhvc3RieW5hbWUoY29u
c3QgY2hhciAqbmFtZSk7DQomIzQzO2ludCBnZXRob3N0YnluYW1lX3IoY29uc3QgY2hhciAqbmFt
ZSwNCiYjNDM7CQlzdHJ1Y3QgaG9zdGVudCAqcmV0LCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4s
DQomIzQzOwkJc3RydWN0IGhvc3RlbnQgKipyZXN1bHQsIGludCAqaF9lcnJub3ApOw0KJiM0Mzsj
ZW5kaWYNCiYjNDM7DQomIzQzO3N0cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyKGNvbnN0IHZv
aWQgKmFkZHIgX191bnVzZWQsDQomIzQzOwkJc29ja2xlbl90IGxlbiBfX3VudXNlZCwgaW50IHR5
cGUgX191bnVzZWQpOw0KIA0KIGludCBnZXRhZGRyaW5mbyhjb25zdCBjaGFyICpub2RlLCBjb25z
dCBjaGFyICpzZXJ2aWNlLA0KIAkJY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywNCkBAIC0x
Myw2ICYjNDM7MTksOSBAQCB2b2lkIGZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKnJlcyk7
DQogDQogI2VuZGlmIC8qIExXSVBfRE5TICZhbXA7JmFtcDsgTFdJUF9TT0NLRVQgJmFtcDsmYW1w
OyAhKExXSVBfQ09NUEFUX1NPQ0tFVFMpICovDQogDQomIzQzO2NvbnN0IGNoYXIgKmdhaV9zdHJl
cnJvcihpbnQgZXJyY29kZSk7DQomIzQzOw0KJiM0MzsNCiBzdHJ1Y3Qgc2VydmVudCB7DQogCWNo
YXIgICAgKnNfbmFtZTsgICAgICAgIC8qIG9mZmljaWFsIHNlcnZpY2UgbmFtZSAqLw0KIAljaGFy
ICAgICoqc19hbGlhc2VzOyAgICAvKiBhbGlhcyBsaXN0ICovDQpAQCAtMjYsNyAmIzQzOzM1LDEx
IEBAIHN0cnVjdCBwcm90b2VudCB7DQogCWludCAgICAgcF9wcm90bzsgICAgICAgIC8qIHByb3Rv
Y29sICMgKi8NCiB9Ow0KIA0KLWNvbnN0IGNoYXIgKmdhaV9zdHJlcnJvcihpbnQgZXJyY29kZSk7
DQomIzQzO3N0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9lbnQodm9pZCk7DQomIzQzO3N0cnVjdCBw
cm90b2VudCAqZ2V0cHJvdG9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7DQomIzQzO3N0cnVjdCBw
cm90b2VudCAqZ2V0cHJvdG9ieW51bWJlcihpbnQgbnVtKTsNCiYjNDM7dm9pZCBlbmRwcm90b2Vu
dCh2b2lkKTsNCiYjNDM7dm9pZCBzZXRwcm90b2VudChpbnQgc3RheW9wZW4pOw0KIA0KIC8qDQog
ICogQ29uc3RhbnRzIGZvciBnZXRuYW1laW5mbygpDQo8L3ByZT4NCjwvYmxvY2txdW90ZT4NCjwv
Ym9keT4NCjwvaHRtbD4NCg==

--_000_75a532dfc09bf420121f3705899f075fstudacsupbro_--


--===============8594606353560412713==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============8594606353560412713==--


From minios-devel-bounces@lists.xenproject.org Mon Sep 09 15:10:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 15:10:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7LJ6-000640-FE; Mon, 09 Sep 2019 15:10:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yizC=XE=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i7LJ5-00063v-FH
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 15:10:19 +0000
X-Inumbo-ID: ef363b36-d313-11e9-b299-bc764e2007e4
Received: from mail-wm1-x334.google.com (unknown [2a00:1450:4864:20::334])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ef363b36-d313-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 15:10:18 +0000 (UTC)
Received: by mail-wm1-x334.google.com with SMTP id 7so4675515wme.1
 for <minios-devel@lists.xen.org>; Mon, 09 Sep 2019 08:10:18 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=dpHXT8jsuBsNa3XpkmSmYC6uCyOXFJ9C6DaaSBwmIlE=;
 b=cQFngUrwNqrMwO1rmykTQ72mxq50lMaYntlxbCN5v/AqtG7Qw5/Qsj7lVA5wlvaaO6
 l+2zor5g44sbo5LN/cw8ISflqa/qM7gLiwGQNcu5FDCiVL/sdU2fm+dNGORUqivjvKuI
 QsJuO3O+YfzroOE/ToGWin/z+9migv1qlBWK6UC47btrwxU/QMPPwoYwEbgaDgkWZ2U3
 wXH430V3D7gC8lNlC1+t79muj0LH967Vq03pxvi4Y2eNOt5tFYQmywOJFgkNGSsUH0cY
 KiuBf++by7GnzxP90jsSOwh8quO9CvjGJtNdWB2KxqauXnbU/oEiFNxtnc23sjsm0bK8
 0E0g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=dpHXT8jsuBsNa3XpkmSmYC6uCyOXFJ9C6DaaSBwmIlE=;
 b=M1UtSwhF0EgCUURYleqJtQJP5qSSzIqXQZP7P95lzkqrnRKl81AFE0TGeN9DmBehh5
 KPmxfXTeDAB7WQhaSajE5ehY0rD26I6Solmw4JeUAiQWIGTmWmWM40LFnLYEvI8azG2L
 226qEaxDku8yeRjycOrYiVTmFKuNxvs8qQR5x7OGtGulggG5DrFODonTii27/x2FC6uW
 DZml3RfPOmbHoSwXfWv+fptq4VMqJr5mGGmm+gFp3jVfCmirzpSqBL6emsofD5FF4yUy
 z07qhrgSw+ec/DZZ/Oyx8Sg8n6tM6pSvzl/RqKJbt8uJdtGzW6emN7mnLTGJtjR3mIid
 V+ow==
X-Gm-Message-State: APjAAAXHNPGybQZX9xp+Xkpgvi62p0yvcZEVZcxHHnZqcDbPRT2Z9JF9
 T+waWKUEa8bxPvxnaqtCmtI=
X-Google-Smtp-Source: APXvYqzXD3zUoBZb4Rf4xOQskzWh4u/keTnEJAI5tLoBVRTxKU4FFfj576aFAFytRnkp0ifckFG4QA==
X-Received: by 2002:a05:600c:3d2:: with SMTP id
 z18mr10062373wmd.169.1568041817917; 
 Mon, 09 Sep 2019 08:10:17 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id y6sm12371751wmi.14.2019.09.09.08.10.16
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 09 Sep 2019 08:10:17 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
 <20190904190912.6801-2-costin.lupu@cs.pub.ro>
 <75a532df-c09b-f420-121f-3705899f075f@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <20d01946-6ff8-f8d1-ddfe-971796b5a86e@gmail.com>
Date: Mon, 9 Sep 2019 18:10:15 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <75a532df-c09b-f420-121f-3705899f075f@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h
 declarations
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgVmxhZCwKClBsZWFzZSBzZWUgaW5saW5lLgoKT24gOS85LzE5IDU6NTIgUE0sIFZsYWQtQW5k
cmVpIELEgkRPSVUgKDc4NjkyKSB3cm90ZToKPiBIZXkgQ29zdGluLAo+IAo+IEkgaGF2ZSBvbmUg
c21hbGwgY29tbWVudCBpbmxpbmUuCj4gCj4gVGhhbmtzLAo+IAo+IFZsYWQKPiAKPiBPbiAwNC4w
OS4yMDE5IDIyOjA5LCBDb3N0aW4gTHVwdSB3cm90ZToKPj4gKiBBcyB3ZSBkaWQgaW4gY29tbWl0
IGIwZGM1OTNkLCB3ZSB1c2UgZnVuY3Rpb24gd3JhcHBlcnMgaW5zdGVhZCBvZiBtYWNyb3MgZm9y
Cj4+IGdldGhvc3RieW5hbWUoKSBhbmQgZ2V0aG9zdGJ5bmFtZV9yKCkKPj4gKiBBZGQgbWlzc2lu
ZyBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIGltcGxlbWVudGVkIG9yIHN0dWJiZWQgaW4gZ2x1
ZSBjb2RlCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5w
dWIucm8+Cj4+IC0tLQo+PiAgZXhwb3J0c3ltcy51ayAgIHwgIDEgKwo+PiAgaG9zdC5jICAgICAg
ICAgIHwgMTkgKysrKysrKysrKysrKysrKysrKwo+PiAgaW5jbHVkZS9uZXRkYi5oIHwgMjMgKysr
KysrKysrKysrKysrKysrLS0tLS0KPj4gIDMgZmlsZXMgY2hhbmdlZCwgMzggaW5zZXJ0aW9ucygr
KSwgNSBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBv
cnRzeW1zLnVrCj4+IGluZGV4IDZmZTk1ZWMuLjFjYTQzZjggMTAwNjQ0Cj4+IC0tLSBhL2V4cG9y
dHN5bXMudWsKPj4gKysrIGIvZXhwb3J0c3ltcy51awo+PiBAQCAtNyw2ICs3LDcgQEAgZnJlZWFk
ZHJpbmZvCj4+ICBnYWlfc3RyZXJyb3IKPj4gIGdldGFkZHJpbmZvCj4+ICBnZXRob3N0YnlhZGRy
Cj4+ICtnZXRob3N0YnluYW1lCj4gfFNob3VsZG4ndCB3ZSBhbHNvIGV4cG9ydCB0aGUgZ2V0aG9z
dGJ5bmFtZV9yIHN5bWJvbD98fHwKClRoYXQncyByaWdodCwgSSBmb3Jnb3QgdG8gZXhwb3J0IGl0
LiBJZiBpdCdzIGZpbmUgd2l0aCB5b3UsIEkgY2FuIGRvIGl0CndoZW4gdXBzdHJlYW1pbmcuCgo+
PiAgZ2V0bmFtZWluZm8KPj4gIGdldHBlZXJuYW1lCj4+ICBnZXRwcm90b2J5bmFtZQo+PiBkaWZm
IC0tZ2l0IGEvaG9zdC5jIGIvaG9zdC5jCj4+IGluZGV4IDU1OWQxODYuLjljNGM4ZWEgMTAwNjQ0
Cj4+IC0tLSBhL2hvc3QuYwo+PiArKysgYi9ob3N0LmMKPj4gQEAgLTMzLDEwICszMywyOSBAQAo+
PiAgCj4+ICAjaW5jbHVkZSA8dW5pc3RkLmg+Cj4+ICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgo+
PiArI2luY2x1ZGUgPG5ldGRiLmg+Cj4+ICsKPj4gKwo+PiArI2lmIExXSVBfRE5TICYmIExXSVBf
U09DS0VUCj4+ICsKPj4gKyNpZiAhKExXSVBfQ09NUEFUX1NPQ0tFVFMpCj4+ICtzdHJ1Y3QgaG9z
dGVudCAqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQo+PiArewo+PiArCXJldHVybiBs
d2lwX2dldGhvc3RieW5hbWUobmFtZSk7Cj4+ICt9Cj4+ICsKPj4gK2ludCBnZXRob3N0YnluYW1l
X3IoY29uc3QgY2hhciAqbmFtZSwKPj4gKwkJc3RydWN0IGhvc3RlbnQgKnJldCwgY2hhciAqYnVm
LCBzaXplX3QgYnVmbGVuLAo+PiArCQlzdHJ1Y3QgaG9zdGVudCAqKnJlc3VsdCwgaW50ICpoX2Vy
cm5vcCkKPj4gK3sKPj4gKwlyZXR1cm4gbHdpcF9nZXRob3N0YnluYW1lX3IobmFtZSwgcmV0LCBi
dWYsIGJ1ZmxlbiwgcmVzdWx0LCBoX2Vycm5vcCk7Cj4+ICt9Cj4+ICsjZW5kaWYKPj4gIAo+PiAg
c3RydWN0IGhvc3RlbnQgKmdldGhvc3RieWFkZHIoY29uc3Qgdm9pZCAqYWRkciBfX3VudXNlZCwK
Pj4gIAlzb2NrbGVuX3QgbGVuIF9fdW51c2VkLCBpbnQgdHlwZSBfX3VudXNlZCkKPj4gIHsKPj4g
IAlyZXR1cm4gTlVMTDsKPj4gIH0KPj4gKyNlbmRpZgo+PiAgCj4+IGRpZmYgLS1naXQgYS9pbmNs
dWRlL25ldGRiLmggYi9pbmNsdWRlL25ldGRiLmgKPj4gaW5kZXggMDg1NmE0OS4uYjEwMDEzNiAx
MDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9uZXRkYi5oCj4+ICsrKyBiL2luY2x1ZGUvbmV0ZGIuaAo+
PiBAQCAtMSwxMCArMSwxNiBAQAo+PiAgI2luY2x1ZGUgPGNvbXBhdC9wb3NpeC9uZXRkYi5oPgo+
PiAgCj4+IC0jaWYgTFdJUF9ETlMgJiYgTFdJUF9TT0NLRVQgJiYgIShMV0lQX0NPTVBBVF9TT0NL
RVRTKQo+PiArI2lmIExXSVBfRE5TICYmIExXSVBfU09DS0VUCj4+ICAKPj4gLSNkZWZpbmUgZ2V0
aG9zdGJ5bmFtZShuYW1lKSBsd2lwX2dldGhvc3RieW5hbWUobmFtZSkKPj4gLSNkZWZpbmUgZ2V0
aG9zdGJ5bmFtZV9yKG5hbWUsIHJldCwgYnVmLCBidWZsZW4sIHJlc3VsdCwgaF9lcnJub3ApIFwK
Pj4gLQkJbHdpcF9nZXRob3N0YnluYW1lX3IobmFtZSwgcmV0LCBidWYsIGJ1ZmxlbiwgcmVzdWx0
LCBoX2Vycm5vcCkKPj4gKyNpZiAhKExXSVBfQ09NUEFUX1NPQ0tFVFMpCj4+ICtzdHJ1Y3QgaG9z
dGVudCAqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKTsKPj4gK2ludCBnZXRob3N0Ynlu
YW1lX3IoY29uc3QgY2hhciAqbmFtZSwKPj4gKwkJc3RydWN0IGhvc3RlbnQgKnJldCwgY2hhciAq
YnVmLCBzaXplX3QgYnVmbGVuLAo+PiArCQlzdHJ1Y3QgaG9zdGVudCAqKnJlc3VsdCwgaW50ICpo
X2Vycm5vcCk7Cj4+ICsjZW5kaWYKPj4gKwo+PiArc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieWFk
ZHIoY29uc3Qgdm9pZCAqYWRkciBfX3VudXNlZCwKPj4gKwkJc29ja2xlbl90IGxlbiBfX3VudXNl
ZCwgaW50IHR5cGUgX191bnVzZWQpOwo+PiAgCj4+ICBpbnQgZ2V0YWRkcmluZm8oY29uc3QgY2hh
ciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKPj4gIAkJY29uc3Qgc3RydWN0IGFkZHJpbmZv
ICpoaW50cywKPj4gQEAgLTEzLDYgKzE5LDkgQEAgdm9pZCBmcmVlYWRkcmluZm8oc3RydWN0IGFk
ZHJpbmZvICpyZXMpOwo+PiAgCj4+ICAjZW5kaWYgLyogTFdJUF9ETlMgJiYgTFdJUF9TT0NLRVQg
JiYgIShMV0lQX0NPTVBBVF9TT0NLRVRTKSAqLwo+PiAgCj4+ICtjb25zdCBjaGFyICpnYWlfc3Ry
ZXJyb3IoaW50IGVycmNvZGUpOwo+PiArCj4+ICsKPj4gIHN0cnVjdCBzZXJ2ZW50IHsKPj4gIAlj
aGFyICAgICpzX25hbWU7ICAgICAgICAvKiBvZmZpY2lhbCBzZXJ2aWNlIG5hbWUgKi8KPj4gIAlj
aGFyICAgICoqc19hbGlhc2VzOyAgICAvKiBhbGlhcyBsaXN0ICovCj4+IEBAIC0yNiw3ICszNSwx
MSBAQCBzdHJ1Y3QgcHJvdG9lbnQgewo+PiAgCWludCAgICAgcF9wcm90bzsgICAgICAgIC8qIHBy
b3RvY29sICMgKi8KPj4gIH07Cj4+ICAKPj4gLWNvbnN0IGNoYXIgKmdhaV9zdHJlcnJvcihpbnQg
ZXJyY29kZSk7Cj4+ICtzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvZW50KHZvaWQpOwo+PiArc3Ry
dWN0IHByb3RvZW50ICpnZXRwcm90b2J5bmFtZShjb25zdCBjaGFyICpuYW1lKTsKPj4gK3N0cnVj
dCBwcm90b2VudCAqZ2V0cHJvdG9ieW51bWJlcihpbnQgbnVtKTsKPj4gK3ZvaWQgZW5kcHJvdG9l
bnQodm9pZCk7Cj4+ICt2b2lkIHNldHByb3RvZW50KGludCBzdGF5b3Blbik7Cj4+ICAKPj4gIC8q
Cj4+ICAgKiBDb25zdGFudHMgZm9yIGdldG5hbWVpbmZvKCkKPiAKPiBfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPiBodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsCj4gCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 15:54:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 15:54:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Lze-0001MH-2R; Mon, 09 Sep 2019 15:54:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7Lzd-0001MC-CY
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 15:54:17 +0000
X-Inumbo-ID: 120d03b4-d31a-11e9-ac0e-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.74]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 120d03b4-d31a-11e9-ac0e-12813bfff9fa;
 Mon, 09 Sep 2019 15:54:14 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=D+/0o+Jc3kzlwah38OYbzoI22RVoKNJzWoyAoExwvXhYfBS4I420Hy3rqtkVXe7H3HTQEM5D+BBO728siHaN6HpxeZ7tB6GbUcL9Xg2FPhCSaIPN4boe1wlx3gnI9BE8UjjAPycUkHKJIqxZ8+1MSYDtuCqyPThx0AlS3uDVQX9xWXESMfWTJUU5uqsl0LCUqZRGeJ5s+sOq1SomQ9mw4cKbmMhMlRiN1up+DyvTgjkgaqU2ugbfZn3tAEvTcDQPpJMKcqiA2VUe/NTwCOWlhyU4U2bzFcAbeGAuvhR3xUp05liK0Qb9EtmujSuw9xcKHiKPMS2s2/66V0vQo1mIXQ==
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=CuklNpOok+iB4AjIyq8fIdYfHAdc3V8PTnLv5N9pGP4=;
 b=NClAW61rY6+GHRRbFVnJ4RetKHQUAJaw4k8m4FCygta4RvUQNMU++JgS6THGcIl4T+J4+Qg0QuXQGQ/5zjP1BCDNrt75Fs+Swzy7QLCjQeOjhPghLpuUqcQUiqrpOZo2lxC9lt0t3FTJY4luE25Z3jTF4uhzaRYkUGJeelV3XGZlevT3AEunHCn8ej+MxCFz9vyIrY6hMTwSRv9u++Rg6m7odiKcZRTi7Fuo3z1APgWWKvoTZwGyB4m0UC7zbevNce0tjZ4SMdCVNyT5xyk8LuZ7kJ5fzQH4K5/bD65MZo9ZJUJwDtddYDqZtx6BVnPHy/3T1kY85QJdU0/t9YCMGQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4956.eurprd01.prod.exchangelabs.com (20.177.208.222) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.20; Mon, 9 Sep
 2019 15:54:12 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 15:54:12 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lup@gmail.com>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h
 declarations
Thread-Index: AQHVZybSQjOvBvWNq0y+q1Yob2xeKg==
Date: Mon, 9 Sep 2019 15:54:12 +0000
Message-ID: <PR1PR01MB5068BE96AEC112B1CDB4509FA6B70@PR1PR01MB5068.eurprd01.prod.exchangelabs.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-originating-ip: [213.233.110.125]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: eb6490bf-0efc-48d8-d70c-08d7353df576
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4956; 
x-ms-traffictypediagnostic: PR1PR01MB4956:
x-ms-exchange-purlcount: 1
x-microsoft-antispam-prvs: <PR1PR01MB4956911B2A3F358D2A2EDCFDA6B70@PR1PR01MB4956.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:153;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39840400004)(376002)(136003)(366004)(346002)(396003)(189003)(199004)(256004)(99286004)(2501003)(7696005)(102836004)(6506007)(81166006)(74316002)(8936002)(966005)(7736002)(76116006)(91956017)(8676002)(81156014)(6436002)(110136005)(54906003)(786003)(316002)(606006)(53546011)(478600001)(85182001)(14454004)(71190400001)(71200400001)(86362001)(66446008)(64756008)(66556008)(66476007)(66946007)(52536014)(229853002)(2906002)(5660300002)(3846002)(4326008)(55016002)(476003)(66066001)(6306002)(6246003)(236005)(9686003)(486006)(53936002)(186003)(54896002)(25786009)(26005)(33656002)(85202003)(6116002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4956;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: ka3wjp1eUJXua/kYRItffQ1P2yF0NPPeTU4W3Ppf7v6ZHD3fsHlSrl/KPTSn+yyYGefIhxghj9VmQi18QZUkg4ZWk3/J3sMv9wByA8un2KxVut2swkt+gTMM8Bmn4KTkNAOPdNwL4pW9b+4LEri4FEVmLLEzLrsd1/gWmy0iHOGkOQI1kzs4XljLd62tj0WV0P9vDA5w6/ohTEq96BHUpsvY7R6C8i1X1DXeTUWru5ikSwKfPlzSq5dD+FBs8pWnBFrn2Zk94bvhQzLTK2SyK9Bks2APi766EfGnd6yJfLbDYkvPZKgCntkXP3BbNe+FTCdPuv+pddQaBpFAk9GWSHdjfAf5zt+rL3kUMc5n1Mnu2M3Sav8656xKX2Sz7t88pZ8t050xooW+PIEvLEjrrCGbI5GJdPqPLHgUoI/rGv8=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: eb6490bf-0efc-48d8-d70c-08d7353df576
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 15:54:12.2028 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: OryxMO0STtJDLgkXuXfutfsVGBvKAMes28kNEy2FBcjC363xRjURDmTxqdF6KmHQAF0mx2MIf12y1O6PdlVzu2k6/xO9lQXtXUH7RjKWZ7evOzS1I0c0kq43kCwM7Tdk
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4956
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h
 declarations
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: multipart/mixed; boundary="===============1575786450104516079=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============1575786450104516079==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_PR1PR01MB5068BE96AEC112B1CDB4509FA6B70PR1PR01MB5068eurp_"

--_000_PR1PR01MB5068BE96AEC112B1CDB4509FA6B70PR1PR01MB5068eurp_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SGV5IENvc3RpbiwNCg0KU3VyZS4NCg0KVGhhbmtzLA0KVmxhZA0KDQotLS0tLS0tLSBPcmlnaW5h
bCBtZXNzYWdlIC0tLS0tLS0tDQpGcm9tOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cEBnbWFpbC5j
b20+DQpEYXRlOiA5LzkvMTkgMTg6MTAgKEdNVCswMjowMCkNClRvOiAiVmxhZC1BbmRyZWkgQsSC
RE9JVSAoNzg2OTIpIiA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4sIG1pbmlv
cy1kZXZlbEBsaXN0cy54ZW4ub3JnDQpDYzogZmVsaXBlLmh1aWNpQG5lY2xhYi5ldSwgc2ltb24u
a3VlbnplckBuZWNsYWIuZXUNClN1YmplY3Q6IFJlOiBbTWluaW9zLWRldmVsXSBbVU5JS1JBRlQv
TFdJUCBQQVRDSCAxLzVdIFJldmlzaXQgbmV0ZGIuaCBkZWNsYXJhdGlvbnMNCg0KSGkgVmxhZCwN
Cg0KUGxlYXNlIHNlZSBpbmxpbmUuDQoNCk9uIDkvOS8xOSA1OjUyIFBNLCBWbGFkLUFuZHJlaSBC
xIJET0lVICg3ODY5Mikgd3JvdGU6DQo+IEhleSBDb3N0aW4sDQo+DQo+IEkgaGF2ZSBvbmUgc21h
bGwgY29tbWVudCBpbmxpbmUuDQo+DQo+IFRoYW5rcywNCj4NCj4gVmxhZA0KPg0KPiBPbiAwNC4w
OS4yMDE5IDIyOjA5LCBDb3N0aW4gTHVwdSB3cm90ZToNCj4+ICogQXMgd2UgZGlkIGluIGNvbW1p
dCBiMGRjNTkzZCwgd2UgdXNlIGZ1bmN0aW9uIHdyYXBwZXJzIGluc3RlYWQgb2YgbWFjcm9zIGZv
cg0KPj4gZ2V0aG9zdGJ5bmFtZSgpIGFuZCBnZXRob3N0YnluYW1lX3IoKQ0KPj4gKiBBZGQgbWlz
c2luZyBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIGltcGxlbWVudGVkIG9yIHN0dWJiZWQgaW4g
Z2x1ZSBjb2RlDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1
QGNzLnB1Yi5ybz4NCj4+IC0tLQ0KPj4gIGV4cG9ydHN5bXMudWsgICB8ICAxICsNCj4+ICBob3N0
LmMgICAgICAgICAgfCAxOSArKysrKysrKysrKysrKysrKysrDQo+PiAgaW5jbHVkZS9uZXRkYi5o
IHwgMjMgKysrKysrKysrKysrKysrKysrLS0tLS0NCj4+ICAzIGZpbGVzIGNoYW5nZWQsIDM4IGlu
c2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5
bXMudWsgYi9leHBvcnRzeW1zLnVrDQo+PiBpbmRleCA2ZmU5NWVjLi4xY2E0M2Y4IDEwMDY0NA0K
Pj4gLS0tIGEvZXhwb3J0c3ltcy51aw0KPj4gKysrIGIvZXhwb3J0c3ltcy51aw0KPj4gQEAgLTcs
NiArNyw3IEBAIGZyZWVhZGRyaW5mbw0KPj4gIGdhaV9zdHJlcnJvcg0KPj4gIGdldGFkZHJpbmZv
DQo+PiAgZ2V0aG9zdGJ5YWRkcg0KPj4gK2dldGhvc3RieW5hbWUNCj4gfFNob3VsZG4ndCB3ZSBh
bHNvIGV4cG9ydCB0aGUgZ2V0aG9zdGJ5bmFtZV9yIHN5bWJvbD98fHwNCg0KVGhhdCdzIHJpZ2h0
LCBJIGZvcmdvdCB0byBleHBvcnQgaXQuIElmIGl0J3MgZmluZSB3aXRoIHlvdSwgSSBjYW4gZG8g
aXQNCndoZW4gdXBzdHJlYW1pbmcuDQoNCj4+ICBnZXRuYW1laW5mbw0KPj4gIGdldHBlZXJuYW1l
DQo+PiAgZ2V0cHJvdG9ieW5hbWUNCj4+IGRpZmYgLS1naXQgYS9ob3N0LmMgYi9ob3N0LmMNCj4+
IGluZGV4IDU1OWQxODYuLjljNGM4ZWEgMTAwNjQ0DQo+PiAtLS0gYS9ob3N0LmMNCj4+ICsrKyBi
L2hvc3QuYw0KPj4gQEAgLTMzLDEwICszMywyOSBAQA0KPj4NCj4+ICAjaW5jbHVkZSA8dW5pc3Rk
Lmg+DQo+PiAgI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCj4+ICsjaW5jbHVkZSA8bmV0ZGIuaD4N
Cj4+ICsNCj4+ICsNCj4+ICsjaWYgTFdJUF9ETlMgJiYgTFdJUF9TT0NLRVQNCj4+ICsNCj4+ICsj
aWYgIShMV0lQX0NPTVBBVF9TT0NLRVRTKQ0KPj4gK3N0cnVjdCBob3N0ZW50ICpnZXRob3N0Ynlu
YW1lKGNvbnN0IGNoYXIgKm5hbWUpDQo+PiArew0KPj4gKyAgICByZXR1cm4gbHdpcF9nZXRob3N0
YnluYW1lKG5hbWUpOw0KPj4gK30NCj4+ICsNCj4+ICtpbnQgZ2V0aG9zdGJ5bmFtZV9yKGNvbnN0
IGNoYXIgKm5hbWUsDQo+PiArICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKnJldCwgY2hhciAq
YnVmLCBzaXplX3QgYnVmbGVuLA0KPj4gKyAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50ICoqcmVz
dWx0LCBpbnQgKmhfZXJybm9wKQ0KPj4gK3sNCj4+ICsgICAgcmV0dXJuIGx3aXBfZ2V0aG9zdGJ5
bmFtZV9yKG5hbWUsIHJldCwgYnVmLCBidWZsZW4sIHJlc3VsdCwgaF9lcnJub3ApOw0KPj4gK30N
Cj4+ICsjZW5kaWYNCj4+DQo+PiAgc3RydWN0IGhvc3RlbnQgKmdldGhvc3RieWFkZHIoY29uc3Qg
dm9pZCAqYWRkciBfX3VudXNlZCwNCj4+ICAgICAgIHNvY2tsZW5fdCBsZW4gX191bnVzZWQsIGlu
dCB0eXBlIF9fdW51c2VkKQ0KPj4gIHsNCj4+ICAgICAgIHJldHVybiBOVUxMOw0KPj4gIH0NCj4+
ICsjZW5kaWYNCj4+DQo+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXRkYi5oIGIvaW5jbHVkZS9u
ZXRkYi5oDQo+PiBpbmRleCAwODU2YTQ5Li5iMTAwMTM2IDEwMDY0NA0KPj4gLS0tIGEvaW5jbHVk
ZS9uZXRkYi5oDQo+PiArKysgYi9pbmNsdWRlL25ldGRiLmgNCj4+IEBAIC0xLDEwICsxLDE2IEBA
DQo+PiAgI2luY2x1ZGUgPGNvbXBhdC9wb3NpeC9uZXRkYi5oPg0KPj4NCj4+IC0jaWYgTFdJUF9E
TlMgJiYgTFdJUF9TT0NLRVQgJiYgIShMV0lQX0NPTVBBVF9TT0NLRVRTKQ0KPj4gKyNpZiBMV0lQ
X0ROUyAmJiBMV0lQX1NPQ0tFVA0KPj4NCj4+IC0jZGVmaW5lIGdldGhvc3RieW5hbWUobmFtZSkg
bHdpcF9nZXRob3N0YnluYW1lKG5hbWUpDQo+PiAtI2RlZmluZSBnZXRob3N0YnluYW1lX3IobmFt
ZSwgcmV0LCBidWYsIGJ1ZmxlbiwgcmVzdWx0LCBoX2Vycm5vcCkgXA0KPj4gLSAgICAgICAgICAg
IGx3aXBfZ2V0aG9zdGJ5bmFtZV9yKG5hbWUsIHJldCwgYnVmLCBidWZsZW4sIHJlc3VsdCwgaF9l
cnJub3ApDQo+PiArI2lmICEoTFdJUF9DT01QQVRfU09DS0VUUykNCj4+ICtzdHJ1Y3QgaG9zdGVu
dCAqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKTsNCj4+ICtpbnQgZ2V0aG9zdGJ5bmFt
ZV9yKGNvbnN0IGNoYXIgKm5hbWUsDQo+PiArICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKnJl
dCwgY2hhciAqYnVmLCBzaXplX3QgYnVmbGVuLA0KPj4gKyAgICAgICAgICAgIHN0cnVjdCBob3N0
ZW50ICoqcmVzdWx0LCBpbnQgKmhfZXJybm9wKTsNCj4+ICsjZW5kaWYNCj4+ICsNCj4+ICtzdHJ1
Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICphZGRyIF9fdW51c2VkLA0KPj4g
KyAgICAgICAgICAgIHNvY2tsZW5fdCBsZW4gX191bnVzZWQsIGludCB0eXBlIF9fdW51c2VkKTsN
Cj4+DQo+PiAgaW50IGdldGFkZHJpbmZvKGNvbnN0IGNoYXIgKm5vZGUsIGNvbnN0IGNoYXIgKnNl
cnZpY2UsDQo+PiAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsDQo+
PiBAQCAtMTMsNiArMTksOSBAQCB2b2lkIGZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKnJl
cyk7DQo+Pg0KPj4gICNlbmRpZiAvKiBMV0lQX0ROUyAmJiBMV0lQX1NPQ0tFVCAmJiAhKExXSVBf
Q09NUEFUX1NPQ0tFVFMpICovDQo+Pg0KPj4gK2NvbnN0IGNoYXIgKmdhaV9zdHJlcnJvcihpbnQg
ZXJyY29kZSk7DQo+PiArDQo+PiArDQo+PiAgc3RydWN0IHNlcnZlbnQgew0KPj4gICAgICAgY2hh
ciAgICAqc19uYW1lOyAgICAgICAgLyogb2ZmaWNpYWwgc2VydmljZSBuYW1lICovDQo+PiAgICAg
ICBjaGFyICAgICoqc19hbGlhc2VzOyAgICAvKiBhbGlhcyBsaXN0ICovDQo+PiBAQCAtMjYsNyAr
MzUsMTEgQEAgc3RydWN0IHByb3RvZW50IHsNCj4+ICAgICAgIGludCAgICAgcF9wcm90bzsgICAg
ICAgIC8qIHByb3RvY29sICMgKi8NCj4+ICB9Ow0KPj4NCj4+IC1jb25zdCBjaGFyICpnYWlfc3Ry
ZXJyb3IoaW50IGVycmNvZGUpOw0KPj4gK3N0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9lbnQodm9p
ZCk7DQo+PiArc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bmFtZShjb25zdCBjaGFyICpuYW1l
KTsNCj4+ICtzdHJ1Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIoaW50IG51bSk7DQo+PiAr
dm9pZCBlbmRwcm90b2VudCh2b2lkKTsNCj4+ICt2b2lkIHNldHByb3RvZW50KGludCBzdGF5b3Bl
bik7DQo+Pg0KPj4gIC8qDQo+PiAgICogQ29uc3RhbnRzIGZvciBnZXRuYW1laW5mbygpDQo+DQo+
IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IE1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
DQo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWwNCj4NCg==

--_000_PR1PR01MB5068BE96AEC112B1CDB4509FA6B70PR1PR01MB5068eurp_
Content-Type: text/html; charset="utf-8"
Content-ID: <D98E298DD135E442863B58F38D14C4A7@cti.pub.ro>
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IGRpcj0iYXV0byI+DQpI
ZXkgQ29zdGluLA0KPGRpdiBkaXI9ImF1dG8iPjxicj4NCjwvZGl2Pg0KPGRpdiBkaXI9ImF1dG8i
PlN1cmUuJm5ic3A7PC9kaXY+DQo8ZGl2IGRpcj0iYXV0byI+PGJyPg0KPC9kaXY+DQo8ZGl2IGRp
cj0iYXV0byI+VGhhbmtzLDwvZGl2Pg0KPGRpdiBkaXI9ImF1dG8iPlZsYWQ8L2Rpdj4NCjxkaXY+
PGJyPg0KPC9kaXY+DQo8ZGl2IHN0eWxlPSJmb250LXNpemU6MTAwJTtjb2xvcjojMDAwMDAwIiBk
aXI9ImF1dG8iPjwhLS0gb3JpZ2luYWxNZXNzYWdlIC0tPg0KPGRpdj4tLS0tLS0tLSBPcmlnaW5h
bCBtZXNzYWdlIC0tLS0tLS0tPC9kaXY+DQo8ZGl2PkZyb206IENvc3RpbiBMdXB1ICZsdDtjb3N0
aW4ubHVwQGdtYWlsLmNvbSZndDsgPC9kaXY+DQo8ZGl2PkRhdGU6IDkvOS8xOSAxODoxMCAoR01U
JiM0MzswMjowMCkgPC9kaXY+DQo8ZGl2PlRvOiAmcXVvdDtWbGFkLUFuZHJlaSBCxIJET0lVICg3
ODY5MikmcXVvdDsgJmx0O3ZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8mZ3Q7LCBt
aW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZw0KPC9kaXY+DQo8ZGl2PkNjOiBmZWxpcGUuaHVpY2lA
bmVjbGFiLmV1LCBzaW1vbi5rdWVuemVyQG5lY2xhYi5ldSA8L2Rpdj4NCjxkaXY+U3ViamVjdDog
UmU6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVC9MV0lQIFBBVENIIDEvNV0gUmV2aXNpdCBuZXRk
Yi5oIGRlY2xhcmF0aW9ucw0KPC9kaXY+DQo8ZGl2Pjxicj4NCjwvZGl2Pg0KPC9kaXY+DQo8Zm9u
dCBzaXplPSIyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExcHQ7Ij4NCjxkaXYgY2xhc3M9IlBs
YWluVGV4dCI+SGkgVmxhZCw8YnI+DQo8YnI+DQpQbGVhc2Ugc2VlIGlubGluZS48YnI+DQo8YnI+
DQpPbiA5LzkvMTkgNTo1MiBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOjxi
cj4NCiZndDsgSGV5IENvc3Rpbiw8YnI+DQomZ3Q7IDxicj4NCiZndDsgSSBoYXZlIG9uZSBzbWFs
bCBjb21tZW50IGlubGluZS48YnI+DQomZ3Q7IDxicj4NCiZndDsgVGhhbmtzLDxicj4NCiZndDsg
PGJyPg0KJmd0OyBWbGFkPGJyPg0KJmd0OyA8YnI+DQomZ3Q7IE9uIDA0LjA5LjIwMTkgMjI6MDks
IENvc3RpbiBMdXB1IHdyb3RlOjxicj4NCiZndDsmZ3Q7ICogQXMgd2UgZGlkIGluIGNvbW1pdCBi
MGRjNTkzZCwgd2UgdXNlIGZ1bmN0aW9uIHdyYXBwZXJzIGluc3RlYWQgb2YgbWFjcm9zIGZvcjxi
cj4NCiZndDsmZ3Q7IGdldGhvc3RieW5hbWUoKSBhbmQgZ2V0aG9zdGJ5bmFtZV9yKCk8YnI+DQom
Z3Q7Jmd0OyAqIEFkZCBtaXNzaW5nIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgaW1wbGVtZW50
ZWQgb3Igc3R1YmJlZCBpbiBnbHVlIGNvZGU8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7IFNp
Z25lZC1vZmYtYnk6IENvc3RpbiBMdXB1ICZsdDtjb3N0aW4ubHVwdUBjcy5wdWIucm8mZ3Q7PGJy
Pg0KJmd0OyZndDsgLS0tPGJyPg0KJmd0OyZndDsmbmJzcDsgZXhwb3J0c3ltcy51ayZuYnNwOyZu
YnNwOyB8Jm5ic3A7IDEgJiM0Mzs8YnI+DQomZ3Q7Jmd0OyZuYnNwOyBob3N0LmMmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCAxOSAmIzQzOyYj
NDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQz
OyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOzxicj4NCiZndDsmZ3Q7Jm5ic3A7IGluY2x1
ZGUvbmV0ZGIuaCB8IDIzICYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0Mzsm
IzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOy0tLS0tPGJy
Pg0KJmd0OyZndDsmbmJzcDsgMyBmaWxlcyBjaGFuZ2VkLCAzOCBpbnNlcnRpb25zKCYjNDM7KSwg
NSBkZWxldGlvbnMoLSk8YnI+DQomZ3Q7Jmd0Ozxicj4NCiZndDsmZ3Q7IGRpZmYgLS1naXQgYS9l
eHBvcnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51azxicj4NCiZndDsmZ3Q7IGluZGV4IDZmZTk1ZWMu
LjFjYTQzZjggMTAwNjQ0PGJyPg0KJmd0OyZndDsgLS0tIGEvZXhwb3J0c3ltcy51azxicj4NCiZn
dDsmZ3Q7ICYjNDM7JiM0MzsmIzQzOyBiL2V4cG9ydHN5bXMudWs8YnI+DQomZ3Q7Jmd0OyBAQCAt
Nyw2ICYjNDM7Nyw3IEBAIGZyZWVhZGRyaW5mbzxicj4NCiZndDsmZ3Q7Jm5ic3A7IGdhaV9zdHJl
cnJvcjxicj4NCiZndDsmZ3Q7Jm5ic3A7IGdldGFkZHJpbmZvPGJyPg0KJmd0OyZndDsmbmJzcDsg
Z2V0aG9zdGJ5YWRkcjxicj4NCiZndDsmZ3Q7ICYjNDM7Z2V0aG9zdGJ5bmFtZTxicj4NCiZndDsg
fFNob3VsZG4ndCB3ZSBhbHNvIGV4cG9ydCB0aGUgZ2V0aG9zdGJ5bmFtZV9yIHN5bWJvbD98fHw8
YnI+DQo8YnI+DQpUaGF0J3MgcmlnaHQsIEkgZm9yZ290IHRvIGV4cG9ydCBpdC4gSWYgaXQncyBm
aW5lIHdpdGggeW91LCBJIGNhbiBkbyBpdDxicj4NCndoZW4gdXBzdHJlYW1pbmcuPGJyPg0KPGJy
Pg0KJmd0OyZndDsmbmJzcDsgZ2V0bmFtZWluZm88YnI+DQomZ3Q7Jmd0OyZuYnNwOyBnZXRwZWVy
bmFtZTxicj4NCiZndDsmZ3Q7Jm5ic3A7IGdldHByb3RvYnluYW1lPGJyPg0KJmd0OyZndDsgZGlm
ZiAtLWdpdCBhL2hvc3QuYyBiL2hvc3QuYzxicj4NCiZndDsmZ3Q7IGluZGV4IDU1OWQxODYuLjlj
NGM4ZWEgMTAwNjQ0PGJyPg0KJmd0OyZndDsgLS0tIGEvaG9zdC5jPGJyPg0KJmd0OyZndDsgJiM0
MzsmIzQzOyYjNDM7IGIvaG9zdC5jPGJyPg0KJmd0OyZndDsgQEAgLTMzLDEwICYjNDM7MzMsMjkg
QEA8YnI+DQomZ3Q7Jmd0OyZuYnNwOyA8YnI+DQomZ3Q7Jmd0OyZuYnNwOyAjaW5jbHVkZSAmbHQ7
dW5pc3RkLmgmZ3Q7PGJyPg0KJmd0OyZndDsmbmJzcDsgI2luY2x1ZGUgJmx0O3N5cy9zb2NrZXQu
aCZndDs8YnI+DQomZ3Q7Jmd0OyAmIzQzOyNpbmNsdWRlICZsdDtuZXRkYi5oJmd0Ozxicj4NCiZn
dDsmZ3Q7ICYjNDM7PGJyPg0KJmd0OyZndDsgJiM0Mzs8YnI+DQomZ3Q7Jmd0OyAmIzQzOyNpZiBM
V0lQX0ROUyAmYW1wOyZhbXA7IExXSVBfU09DS0VUPGJyPg0KJmd0OyZndDsgJiM0Mzs8YnI+DQom
Z3Q7Jmd0OyAmIzQzOyNpZiAhKExXSVBfQ09NUEFUX1NPQ0tFVFMpPGJyPg0KJmd0OyZndDsgJiM0
MztzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKTxicj4NCiZn
dDsmZ3Q7ICYjNDM7ezxicj4NCiZndDsmZ3Q7ICYjNDM7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJldHVy
biBsd2lwX2dldGhvc3RieW5hbWUobmFtZSk7PGJyPg0KJmd0OyZndDsgJiM0Mzt9PGJyPg0KJmd0
OyZndDsgJiM0Mzs8YnI+DQomZ3Q7Jmd0OyAmIzQzO2ludCBnZXRob3N0YnluYW1lX3IoY29uc3Qg
Y2hhciAqbmFtZSw8YnI+DQomZ3Q7Jmd0OyAmIzQzOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzdHJ1Y3QgaG9zdGVudCAq
cmV0LCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sPGJyPg0KJmd0OyZndDsgJiM0MzsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgc3RydWN0IGhvc3RlbnQgKipyZXN1bHQsIGludCAqaF9lcnJub3ApPGJyPg0KJmd0OyZndDsg
JiM0Mzt7PGJyPg0KJmd0OyZndDsgJiM0MzsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIGx3aXBf
Z2V0aG9zdGJ5bmFtZV9yKG5hbWUsIHJldCwgYnVmLCBidWZsZW4sIHJlc3VsdCwgaF9lcnJub3Ap
Ozxicj4NCiZndDsmZ3Q7ICYjNDM7fTxicj4NCiZndDsmZ3Q7ICYjNDM7I2VuZGlmPGJyPg0KJmd0
OyZndDsmbmJzcDsgPGJyPg0KJmd0OyZndDsmbmJzcDsgc3RydWN0IGhvc3RlbnQgKmdldGhvc3Ri
eWFkZHIoY29uc3Qgdm9pZCAqYWRkciBfX3VudXNlZCw8YnI+DQomZ3Q7Jmd0OyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzb2NrbGVuX3QgbGVuIF9fdW51c2VkLCBpbnQgdHlw
ZSBfX3VudXNlZCk8YnI+DQomZ3Q7Jmd0OyZuYnNwOyB7PGJyPg0KJmd0OyZndDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIE5VTEw7PGJyPg0KJmd0OyZndDsmbmJz
cDsgfTxicj4NCiZndDsmZ3Q7ICYjNDM7I2VuZGlmPGJyPg0KJmd0OyZndDsmbmJzcDsgPGJyPg0K
Jmd0OyZndDsgZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0ZGIuaCBiL2luY2x1ZGUvbmV0ZGIuaDxi
cj4NCiZndDsmZ3Q7IGluZGV4IDA4NTZhNDkuLmIxMDAxMzYgMTAwNjQ0PGJyPg0KJmd0OyZndDsg
LS0tIGEvaW5jbHVkZS9uZXRkYi5oPGJyPg0KJmd0OyZndDsgJiM0MzsmIzQzOyYjNDM7IGIvaW5j
bHVkZS9uZXRkYi5oPGJyPg0KJmd0OyZndDsgQEAgLTEsMTAgJiM0MzsxLDE2IEBAPGJyPg0KJmd0
OyZndDsmbmJzcDsgI2luY2x1ZGUgJmx0O2NvbXBhdC9wb3NpeC9uZXRkYi5oJmd0Ozxicj4NCiZn
dDsmZ3Q7Jm5ic3A7IDxicj4NCiZndDsmZ3Q7IC0jaWYgTFdJUF9ETlMgJmFtcDsmYW1wOyBMV0lQ
X1NPQ0tFVCAmYW1wOyZhbXA7ICEoTFdJUF9DT01QQVRfU09DS0VUUyk8YnI+DQomZ3Q7Jmd0OyAm
IzQzOyNpZiBMV0lQX0ROUyAmYW1wOyZhbXA7IExXSVBfU09DS0VUPGJyPg0KJmd0OyZndDsmbmJz
cDsgPGJyPg0KJmd0OyZndDsgLSNkZWZpbmUgZ2V0aG9zdGJ5bmFtZShuYW1lKSBsd2lwX2dldGhv
c3RieW5hbWUobmFtZSk8YnI+DQomZ3Q7Jmd0OyAtI2RlZmluZSBnZXRob3N0YnluYW1lX3IobmFt
ZSwgcmV0LCBidWYsIGJ1ZmxlbiwgcmVzdWx0LCBoX2Vycm5vcCkgXDxicj4NCiZndDsmZ3Q7IC0m
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsgbHdpcF9nZXRob3N0YnluYW1lX3IobmFtZSwgcmV0LCBidWYsIGJ1ZmxlbiwgcmVz
dWx0LCBoX2Vycm5vcCk8YnI+DQomZ3Q7Jmd0OyAmIzQzOyNpZiAhKExXSVBfQ09NUEFUX1NPQ0tF
VFMpPGJyPg0KJmd0OyZndDsgJiM0MztzdHJ1Y3QgaG9zdGVudCAqZ2V0aG9zdGJ5bmFtZShjb25z
dCBjaGFyICpuYW1lKTs8YnI+DQomZ3Q7Jmd0OyAmIzQzO2ludCBnZXRob3N0YnluYW1lX3IoY29u
c3QgY2hhciAqbmFtZSw8YnI+DQomZ3Q7Jmd0OyAmIzQzOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzdHJ1Y3QgaG9zdGVu
dCAqcmV0LCBjaGFyICpidWYsIHNpemVfdCBidWZsZW4sPGJyPg0KJmd0OyZndDsgJiM0MzsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsgc3RydWN0IGhvc3RlbnQgKipyZXN1bHQsIGludCAqaF9lcnJub3ApOzxicj4NCiZndDsm
Z3Q7ICYjNDM7I2VuZGlmPGJyPg0KJmd0OyZndDsgJiM0Mzs8YnI+DQomZ3Q7Jmd0OyAmIzQzO3N0
cnVjdCBob3N0ZW50ICpnZXRob3N0YnlhZGRyKGNvbnN0IHZvaWQgKmFkZHIgX191bnVzZWQsPGJy
Pg0KJmd0OyZndDsgJiM0MzsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgc29ja2xlbl90IGxlbiBfX3VudXNlZCwgaW50IHR5
cGUgX191bnVzZWQpOzxicj4NCiZndDsmZ3Q7Jm5ic3A7IDxicj4NCiZndDsmZ3Q7Jm5ic3A7IGlu
dCBnZXRhZGRyaW5mbyhjb25zdCBjaGFyICpub2RlLCBjb25zdCBjaGFyICpzZXJ2aWNlLDxicj4N
CiZndDsmZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNvbnN0IHN0cnVjdCBhZGRyaW5m
byAqaGludHMsPGJyPg0KJmd0OyZndDsgQEAgLTEzLDYgJiM0MzsxOSw5IEBAIHZvaWQgZnJlZWFk
ZHJpbmZvKHN0cnVjdCBhZGRyaW5mbyAqcmVzKTs8YnI+DQomZ3Q7Jmd0OyZuYnNwOyA8YnI+DQom
Z3Q7Jmd0OyZuYnNwOyAjZW5kaWYgLyogTFdJUF9ETlMgJmFtcDsmYW1wOyBMV0lQX1NPQ0tFVCAm
YW1wOyZhbXA7ICEoTFdJUF9DT01QQVRfU09DS0VUUykgKi88YnI+DQomZ3Q7Jmd0OyZuYnNwOyA8
YnI+DQomZ3Q7Jmd0OyAmIzQzO2NvbnN0IGNoYXIgKmdhaV9zdHJlcnJvcihpbnQgZXJyY29kZSk7
PGJyPg0KJmd0OyZndDsgJiM0Mzs8YnI+DQomZ3Q7Jmd0OyAmIzQzOzxicj4NCiZndDsmZ3Q7Jm5i
c3A7IHN0cnVjdCBzZXJ2ZW50IHs8YnI+DQomZ3Q7Jmd0OyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyBjaGFyJm5ic3A7Jm5ic3A7Jm5ic3A7ICpzX25hbWU7Jm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8qIG9mZmljaWFsIHNlcnZpY2UgbmFtZSAq
Lzxicj4NCiZndDsmZ3Q7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNoYXIm
bmJzcDsmbmJzcDsmbmJzcDsgKipzX2FsaWFzZXM7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8qIGFsaWFz
IGxpc3QgKi88YnI+DQomZ3Q7Jmd0OyBAQCAtMjYsNyAmIzQzOzM1LDExIEBAIHN0cnVjdCBwcm90
b2VudCB7PGJyPg0KJmd0OyZndDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsg
aW50Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHBfcHJvdG87Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5i
c3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8qIHByb3RvY29sICMgKi88YnI+DQomZ3Q7Jmd0OyZuYnNw
OyB9Ozxicj4NCiZndDsmZ3Q7Jm5ic3A7IDxicj4NCiZndDsmZ3Q7IC1jb25zdCBjaGFyICpnYWlf
c3RyZXJyb3IoaW50IGVycmNvZGUpOzxicj4NCiZndDsmZ3Q7ICYjNDM7c3RydWN0IHByb3RvZW50
ICpnZXRwcm90b2VudCh2b2lkKTs8YnI+DQomZ3Q7Jmd0OyAmIzQzO3N0cnVjdCBwcm90b2VudCAq
Z2V0cHJvdG9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7PGJyPg0KJmd0OyZndDsgJiM0MztzdHJ1
Y3QgcHJvdG9lbnQgKmdldHByb3RvYnludW1iZXIoaW50IG51bSk7PGJyPg0KJmd0OyZndDsgJiM0
Mzt2b2lkIGVuZHByb3RvZW50KHZvaWQpOzxicj4NCiZndDsmZ3Q7ICYjNDM7dm9pZCBzZXRwcm90
b2VudChpbnQgc3RheW9wZW4pOzxicj4NCiZndDsmZ3Q7Jm5ic3A7IDxicj4NCiZndDsmZ3Q7Jm5i
c3A7IC8qPGJyPg0KJmd0OyZndDsmbmJzcDsmbmJzcDsgKiBDb25zdGFudHMgZm9yIGdldG5hbWVp
bmZvKCk8YnI+DQomZ3Q7IDxicj4NCiZndDsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX188YnI+DQomZ3Q7IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3Q8YnI+
DQomZ3Q7IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzxicj4NCiZndDsgPGEgaHJl
Zj0iaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbCIgdGFyZ2V0PSJfQkxBTksiPg0KaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbDwvYT48YnI+DQomZ3Q7IDxicj4NCjwvZGl2Pg0KPC9z
cGFuPjwvZm9udD4NCjwvYm9keT4NCjwvaHRtbD4NCg==

--_000_PR1PR01MB5068BE96AEC112B1CDB4509FA6B70PR1PR01MB5068eurp_--


--===============1575786450104516079==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============1575786450104516079==--


From minios-devel-bounces@lists.xenproject.org Mon Sep 09 16:01:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 16:01:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7M6Y-0002gi-0Z; Mon, 09 Sep 2019 16:01:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=f7Nt=XE=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i7M6W-0002gd-AM
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 16:01:24 +0000
X-Inumbo-ID: 10952d81-d31b-11e9-ac0e-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.83]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 10952d81-d31b-11e9-ac0e-12813bfff9fa;
 Mon, 09 Sep 2019 16:01:22 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KxsIa7zoq7iF6K7T0e5e5A4hGmq9pTs8kVF8aPQCN8izGlhVkLFSz4pYIE3O21AYQvSMhmh4hUayME277c5f9/KABZqVa5urbkga6xqz7krVwUrn+Yxoddy4i1UQFOUAbRdRTEvHdeuiz25WhYhbYPOxuXUWwKvUnzC/qtpPFpiFuWO/QFmh4x/8qUOkLAOQXCYabzVy4ov650S3l5qfQd6RN8ubFo1o7Q0kvOlJr7v7FEPCvTrQXBfUEGsq06fJAis+dO3Rqa+bQGJaxhnMWgTpPcl34SQRIKGz9LaGx27m9nMI/hQ+Hj7yjGEEEAbwEYHBuRS5ez68XJySnipIug==
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=y8t6h04IOwhVNik/Ft4mOxsMhBoSmVUVsCmZfvXK30Y=;
 b=BLz/55VjE9kaSnLehOUXdPVU+P4QmTdlMnbhV3LgqYI2tlc/AscPsNKBK/Bshg+l/leB33DW411siMQqk15y9pAvWXAqL0cYpFuEEfXu3BN/9a+I/5YAzoi8/0ghLdIy8B1VEoHhr509MlDMMytIYKGad67U4268ccabcMKfWKeJQH9MJxj8qbS2HK505on69bW/NKb7pjBwrP3WTSamZGhx8/Ceh1TJcl0mJJ6thby8wQG/3LoBsdpccm6FmxyN30p+DmaQSU2wTUySnXm1LVsmToXLfN3DDJB+R4dV9Bnp8jZspuuAnqhtZGsBU2t55rPe/yIZo14nFx+bmOg/KQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4827.eurprd01.prod.exchangelabs.com (20.177.211.84) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Mon, 9 Sep
 2019 16:01:20 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Mon, 9 Sep 2019
 16:01:20 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h
 declarations
Thread-Index: AQHVY1RC7RVOKCO6+EShUiUhavbnDKcjqAmA///g8l0=
Date: Mon, 9 Sep 2019 16:01:20 +0000
Message-ID: <PR1PR01MB50687A4D63530FF3A6DDA5A0A6B70@PR1PR01MB5068.eurprd01.prod.exchangelabs.com>
References: <20190904190912.6801-1-costin.lupu@cs.pub.ro>
 <20190904190912.6801-2-costin.lupu@cs.pub.ro>,
 <75a532df-c09b-f420-121f-3705899f075f@stud.acs.upb.ro>
In-Reply-To: <75a532df-c09b-f420-121f-3705899f075f@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-originating-ip: [213.233.110.125]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 9fe6b866-4bd1-4507-13af-08d7353ef47f
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4827; 
x-ms-traffictypediagnostic: PR1PR01MB4827:
x-microsoft-antispam-prvs: <PR1PR01MB4827C4E6F33500CBAB7A1FC2A6B70@PR1PR01MB4827.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:160;
x-forefront-prvs: 01559F388D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(346002)(376002)(396003)(39840400004)(136003)(199004)(189003)(486006)(478600001)(53546011)(25786009)(26005)(74316002)(11346002)(476003)(9686003)(54896002)(446003)(66066001)(55016002)(236005)(53936002)(66446008)(81166006)(2906002)(110136005)(52536014)(186003)(71200400001)(786003)(66556008)(5660300002)(71190400001)(66946007)(54906003)(316002)(2501003)(66476007)(86362001)(91956017)(76116006)(256004)(7696005)(76176011)(229853002)(33656002)(64756008)(81156014)(4326008)(102836004)(8936002)(6506007)(6246003)(45776006)(8676002)(99286004)(7736002)(6116002)(14454004)(6436002)(3846002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4827;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: JqSCvfTCPabAK+mBNjtXSxbIaoMbkK3VDTTUxmM1TpVysRhX22qSKVC86Kwp1UTVpZ91dFpOr40bQ9q6bQwi4yKfpNQunITFHYfG0Ml+Mtig0Wobws8lp3o4lpCyvzCLUTm0suyRz+NBmrcHZh89IGLtUt6IasMIe7o9RwcUaBPmUApspVUBLr9lwd280/5dNt/yofQe20Q+KuyMkZ9PtvA5DlcUUj8aYa40t4Sg2TkdNAhY6w3De0g5IY6KPW8mYK2/sKFtRZ/AaB+k6pWU4nmL0NlLpbU22uC3RUKYUy7yBjnZlKn5yoiBLABPsOXaJaU4l2XdwpRz2WBYvbTNCwkMq0mgfbchs/kPQfyHXC5dyOofpT9JugYRi3IZIDq5hHj7jQZObETrbr7IKxU0Yg82Osd342YWYEwr5X0J2j8=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 9fe6b866-4bd1-4507-13af-08d7353ef47f
X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Sep 2019 16:01:20.1798 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Y/s1bb9ocp0YyTQN3ug4pHLdqnmqz2FRN+f8UDVpNBhxrllLMtFUMZ3JlfoeJKQEvjAZ4MMTPh9yiAmf5zmONeoo0xje4Njl5/6LojvGwcJTExTKcJM+b//1n/3viG5+
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4827
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h
 declarations
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 "simon.kuenzer@neclab.eu" <simon.kuenzer@neclab.eu>
Content-Type: multipart/mixed; boundary="===============0383848679168484279=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============0383848679168484279==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_PR1PR01MB50687A4D63530FF3A6DDA5A0A6B70PR1PR01MB5068eurp_"

--_000_PR1PR01MB50687A4D63530FF3A6DDA5A0A6B70PR1PR01MB5068eurp_
Content-Type: text/plain; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable

Since the comment may be resolved during the upstreaming, I have left the R=
eviewed By here.

Reviewed-by: Vlad-Andrei Badoiu <vlad_andrei.badoiu@stud.acs.upb.ro<mailto:=
vlad_andrei.badoiu@stud.acs.upb.ro>>


-------- Original message --------
From: "Vlad-Andrei B=C3DOIU (78692)" <vlad_andrei.badoiu@stud.acs.upb.ro>
Date: 9/9/19 17:52 (GMT+02:00)
To: Costin Lupu <costin.lupu@cs.pub.ro>, minios-devel@lists.xen.org
Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h decla=
rations


Hey Costin,

I have one small comment inline.

Thanks,

Vlad

On 04.09.2019 22:09, Costin Lupu wrote:

* As we did in commit b0dc593d, we use function wrappers instead of macros =
for
gethostbyname() and gethostbyname_r()
* Add missing declarations of functions implemented or stubbed in glue code

Signed-off-by: Costin Lupu <costin.lupu@cs.pub.ro><mailto:costin.lupu@cs.pu=
b.ro>
---
 exportsyms.uk   |  1 +
 host.c          | 19 +++++++++++++++++++
 include/netdb.h | 23 ++++++++++++++++++-----
 3 files changed, 38 insertions(+), 5 deletions(-)

diff --git a/exportsyms.uk b/exportsyms.uk
index 6fe95ec..1ca43f8 100644
--- a/exportsyms.uk
+++ b/exportsyms.uk
@@ -7,6 +7,7 @@ freeaddrinfo
 gai_strerror
 getaddrinfo
 gethostbyaddr
+gethostbyname

Shouldn't we also export the gethostbyname_r symbol?


 getnameinfo
 getpeername
 getprotobyname
diff --git a/host.c b/host.c
index 559d186..9c4c8ea 100644
--- a/host.c
+++ b/host.c
@@ -33,10 +33,29 @@

 #include <unistd.h>
 #include <sys/socket.h>
+#include <netdb.h>
+
+
+#if LWIP_DNS && LWIP_SOCKET
+
+#if !(LWIP_COMPAT_SOCKETS)
+struct hostent *gethostbyname(const char *name)
+{
+       return lwip_gethostbyname(name);
+}
+
+int gethostbyname_r(const char *name,
+               struct hostent *ret, char *buf, size_t buflen,
+               struct hostent **result, int *h_errnop)
+{
+       return lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errno=
p);
+}
+#endif

 struct hostent *gethostbyaddr(const void *addr __unused,
        socklen_t len __unused, int type __unused)
 {
        return NULL;
 }
+#endif

diff --git a/include/netdb.h b/include/netdb.h
index 0856a49..b100136 100644
--- a/include/netdb.h
+++ b/include/netdb.h
@@ -1,10 +1,16 @@
 #include <compat/posix/netdb.h>

-#if LWIP_DNS && LWIP_SOCKET && !(LWIP_COMPAT_SOCKETS)
+#if LWIP_DNS && LWIP_SOCKET

-#define gethostbyname(name) lwip_gethostbyname(name)
-#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \
-               lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errn=
op)
+#if !(LWIP_COMPAT_SOCKETS)
+struct hostent *gethostbyname(const char *name);
+int gethostbyname_r(const char *name,
+               struct hostent *ret, char *buf, size_t buflen,
+               struct hostent **result, int *h_errnop);
+#endif
+
+struct hostent *gethostbyaddr(const void *addr __unused,
+               socklen_t len __unused, int type __unused);

 int getaddrinfo(const char *node, const char *service,
                const struct addrinfo *hints,
@@ -13,6 +19,9 @@ void freeaddrinfo(struct addrinfo *res);

 #endif /* LWIP_DNS && LWIP_SOCKET && !(LWIP_COMPAT_SOCKETS) */

+const char *gai_strerror(int errcode);
+
+
 struct servent {
        char    *s_name;        /* official service name */
        char    **s_aliases;    /* alias list */
@@ -26,7 +35,11 @@ struct protoent {
        int     p_proto;        /* protocol # */
 };

-const char *gai_strerror(int errcode);
+struct protoent *getprotoent(void);
+struct protoent *getprotobyname(const char *name);
+struct protoent *getprotobynumber(int num);
+void endprotoent(void);
+void setprotoent(int stayopen);

 /*
  * Constants for getnameinfo()


--_000_PR1PR01MB50687A4D63530FF3A6DDA5A0A6B70PR1PR01MB5068eurp_
Content-Type: text/html; charset="iso-8859-2"
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Diso-8859-=
2">
<meta content=3D"text/html; charset=3Dutf-8">
</head>
<body bgcolor=3D"#FFFFFF">
<div dir=3D"auto">Since the comment may be resolved during the upstreaming,=
 I have left the Reviewed By here.&nbsp;</div>
<div dir=3D"auto"><br>
</div>
Reviewed-by: Vlad-Andrei Badoiu &lt;<a href=3D"mailto:vlad_andrei.badoiu@st=
ud.acs.upb.ro" dir=3D"auto">vlad_andrei.badoiu@stud.acs.upb.ro</a>&gt;<br d=
ir=3D"auto">
<div><br>
</div>
<div><br>
</div>
<div>-------- Original message --------</div>
<div>From: &quot;Vlad-Andrei B=C3DOIU (78692)&quot; &lt;vlad_andrei.badoiu@=
stud.acs.upb.ro&gt; </div>
<div>Date: 9/9/19 17:52 (GMT&#43;02:00) </div>
<div>To: Costin Lupu &lt;costin.lupu@cs.pub.ro&gt;, minios-devel@lists.xen.=
org </div>
<div>Cc: felipe.huici@neclab.eu, simon.kuenzer@neclab.eu </div>
<div>Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/5] Revisit netdb.h =
declarations
</div>
<div><br>
</div>
<div>
<p>Hey Costin,</p>
<p>I have one small comment inline.</p>
<p>Thanks,</p>
<p>Vlad<br>
</p>
<div class=3D"moz-cite-prefix">On 04.09.2019 22:09, Costin Lupu wrote:<br>
</div>
<blockquote type=3D"cite">
<pre class=3D"moz-quote-pre">* As we did in commit b0dc593d, we use functio=
n wrappers instead of macros for
gethostbyname() and gethostbyname_r()
* Add missing declarations of functions implemented or stubbed in glue code

Signed-off-by: Costin Lupu <a class=3D"moz-txt-link-rfc2396E" href=3D"mailt=
o:costin.lupu@cs.pub.ro">&lt;costin.lupu@cs.pub.ro&gt;</a>
---
 exportsyms.uk   |  1 &#43;
 host.c          | 19 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#4=
3;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;
 include/netdb.h | 23 &#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#4=
3;&#43;&#43;&#43;&#43;&#43;&#43;&#43;-----
 3 files changed, 38 insertions(&#43;), 5 deletions(-)

diff --git a/exportsyms.uk b/exportsyms.uk
index 6fe95ec..1ca43f8 100644
--- a/exportsyms.uk
&#43;&#43;&#43; b/exportsyms.uk
@@ -7,6 &#43;7,7 @@ freeaddrinfo
 gai_strerror
 getaddrinfo
 gethostbyaddr
&#43;gethostbyname</pre>
</blockquote>
<code><span class=3D"n">Shouldn't we also export the gethostbyname_r symbol=
?</span></code><code></code>
<blockquote type=3D"cite">
<pre class=3D"moz-quote-pre">
 getnameinfo
 getpeername
 getprotobyname
diff --git a/host.c b/host.c
index 559d186..9c4c8ea 100644
--- a/host.c
&#43;&#43;&#43; b/host.c
@@ -33,10 &#43;33,29 @@
=20
 #include &lt;unistd.h&gt;
 #include &lt;sys/socket.h&gt;
&#43;#include &lt;netdb.h&gt;
&#43;
&#43;
&#43;#if LWIP_DNS &amp;&amp; LWIP_SOCKET
&#43;
&#43;#if !(LWIP_COMPAT_SOCKETS)
&#43;struct hostent *gethostbyname(const char *name)
&#43;{
&#43;	return lwip_gethostbyname(name);
&#43;}
&#43;
&#43;int gethostbyname_r(const char *name,
&#43;		struct hostent *ret, char *buf, size_t buflen,
&#43;		struct hostent **result, int *h_errnop)
&#43;{
&#43;	return lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop)=
;
&#43;}
&#43;#endif
=20
 struct hostent *gethostbyaddr(const void *addr __unused,
 	socklen_t len __unused, int type __unused)
 {
 	return NULL;
 }
&#43;#endif
=20
diff --git a/include/netdb.h b/include/netdb.h
index 0856a49..b100136 100644
--- a/include/netdb.h
&#43;&#43;&#43; b/include/netdb.h
@@ -1,10 &#43;1,16 @@
 #include &lt;compat/posix/netdb.h&gt;
=20
-#if LWIP_DNS &amp;&amp; LWIP_SOCKET &amp;&amp; !(LWIP_COMPAT_SOCKETS)
&#43;#if LWIP_DNS &amp;&amp; LWIP_SOCKET
=20
-#define gethostbyname(name) lwip_gethostbyname(name)
-#define gethostbyname_r(name, ret, buf, buflen, result, h_errnop) \
-		lwip_gethostbyname_r(name, ret, buf, buflen, result, h_errnop)
&#43;#if !(LWIP_COMPAT_SOCKETS)
&#43;struct hostent *gethostbyname(const char *name);
&#43;int gethostbyname_r(const char *name,
&#43;		struct hostent *ret, char *buf, size_t buflen,
&#43;		struct hostent **result, int *h_errnop);
&#43;#endif
&#43;
&#43;struct hostent *gethostbyaddr(const void *addr __unused,
&#43;		socklen_t len __unused, int type __unused);
=20
 int getaddrinfo(const char *node, const char *service,
 		const struct addrinfo *hints,
@@ -13,6 &#43;19,9 @@ void freeaddrinfo(struct addrinfo *res);
=20
 #endif /* LWIP_DNS &amp;&amp; LWIP_SOCKET &amp;&amp; !(LWIP_COMPAT_SOCKETS=
) */
=20
&#43;const char *gai_strerror(int errcode);
&#43;
&#43;
 struct servent {
 	char    *s_name;        /* official service name */
 	char    **s_aliases;    /* alias list */
@@ -26,7 &#43;35,11 @@ struct protoent {
 	int     p_proto;        /* protocol # */
 };
=20
-const char *gai_strerror(int errcode);
&#43;struct protoent *getprotoent(void);
&#43;struct protoent *getprotobyname(const char *name);
&#43;struct protoent *getprotobynumber(int num);
&#43;void endprotoent(void);
&#43;void setprotoent(int stayopen);
=20
 /*
  * Constants for getnameinfo()
</pre>
</blockquote>
</div>
</body>
</html>

--_000_PR1PR01MB50687A4D63530FF3A6DDA5A0A6B70PR1PR01MB5068eurp_--


--===============0383848679168484279==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============0383848679168484279==--


From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:23:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:23:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOF-0000UX-CU; Mon, 09 Sep 2019 17:23:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOD-0000US-KU
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:23:45 +0000
X-Inumbo-ID: 919f8aaa-d326-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 919f8aaa-d326-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 17:23:42 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 69B6C10568F;
 Mon,  9 Sep 2019 19:23:41 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id YjS9W7P5uSiE; Mon,  9 Sep 2019 19:23:41 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 40B4A10568E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:41 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:40 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:37 +0200
Message-ID: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 00/23] Upgrade Unikraft's
 configuration system
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXBncmFkZSB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gdXNlZCB3aXRoaW4gVW5pa3JhZnQu
IFdlIGludHJvZHVjZSB0aGUgZm9sbG93aW5nCmNoYW5nZXMgYXMgYSBwYXJ0IG9mIHRoZSB1cGdy
YWRlLgoKLSBVc2UgdGhlIGxhdGVzdCBLY29uZmlnWzFdIGNoYW5nZSBmcm9tIHRoZSBsaW51eCBr
ZXJuZWwgdjUuMgotIEludHJvZHVjZSB3aWxkY2FyZCBvcGVyYXRpb24gaW4gdGhlIGtjb25maWcg
YnVpbGQgc3lzdGVtCi0gQWRkIHN1cHBvcnQgZm9yIHRoZSBrY29uZmlnbGliWzJdLCBhIHB5dGhv
biBiYXNlZCB0b29sIHRvIHBlcmZvcm0ga2NvbmZpZy4KLSBUaGUgcHl0aG9uIG1lbnVjb25maWcK
LSBQcmVwcm9jZXNzIENvbmZpZy51ayB0byBkZXRlcm1pbmUgdGhlIGxpYnJhcmllcyB0byBiZSBj
b25maWd1cmVkCi0gUHJlcHJvY2VzcyBDb25maWcudWsgdG8gZGV0ZXJtaW5lIHRoZSBwbGF0Zm9y
bSB0byBiZSBjb25maWd1cmVkLgotIFByZXByb2Nlc3MgQ29uZmlnLnVrIHRvIGRldGVybWluZSB0
aGUgaG9zdCBhcmNoaXRlY3R1cmUuCgpUaGUgcGF0Y2ggc2V0IGFsc28gY2hhbmdlcyB0aGUgY3Vy
cmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgYnVpbGQgZnJvbSB0aGUKVW5pa3JhZnQgc291
cmNlIHRyZWUgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeSBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9u
LgoKWzFdIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L2tidWlsZC9rY29u
ZmlnLW1hY3JvLWxhbmd1YWdlLmh0bWwKWzJdIGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy83NTMx
OTYvCgpTaGFyYW4gU2FudGhhbmFtICgyMyk6CiAga2NvbmZpZzogSW1wb3J0IGtjb25maWcgZnJv
bSBMaW51eCBrZXJuZWwKICBrY29uZmlnOiBJbnRyb2R1Y2UgUkVBRE1FLnVuaWtyYWZ0CiAga2Nv
bmZpZzogUmVwbGFjZSB0aGUga2VybmVsIHdpdGggVW5pa3JhZnQKICBLY29uZmlnOiBJbXBvcnRp
bmcgZXhpc3RpbmcgTWFrZWZpbGUuYnIKICBrYnVpbGQ6IEFkZCBidWlsZCBoZWxwZXIgZnVuY3Rp
b24gZnJvbSBMaW51eAogIGtjb25maWc6IFJlbW92aW5nIHRoZSBnZW5lcmljIHJ1bGUKICBrY29u
ZmlnOiBJbXBvcnQgZml4ZGVwIGZyb20gTGludXgga2VybmVsCiAgYnVpbGQ6IEFkZCBVbmlrcmFm
dCBzcGVjaWZpYyBmaXhkZXAgaGVhZGVyCiAgYnVpbGQ6IFJlbW92ZSBpbXBsaWNpdCBydWxlcwog
IGJ1aWxkOiBJbXBvcnQgdGhlIGtjb25maWcgaG9zdCBydWxlcyBmcm9tIExpbnV4CiAga2NvbmZp
ZzogRml4ZGVwIGFuZCBob3N0IGZsYWdzCiAga2NvbmZpZzogU3VwcG9ydCBnbG9iIGluIGtjb25m
aWcKICBLY29uZmlnOiBTaGlmdGluZyB0byB0aGUgbmV3IEtjb25maWcgc3lzdGVtCiAga2NvbmZp
ZzogSW1wb3J0IGtjb25maWdsaWIKICBidWlsZDogVXNlIGtjb25maWdsaWIgZnJvbSBVbmlrcmFm
dAogIFJlcGxhY2UgdGhlIHNpbGVudG9sZGNvbmZpZyB3aXRoIHN5bmNjb25maWcKICBsaWI6IFVz
ZSBnbG9iIGluc3RlYWQgb2YgYWRkaW5nIGVhY2ggbGliCiAgYnVpbGQ6IFByZS1wcm9jZXNzIENv
bmZpZy51ayB3aXRoaW4ga2NvbmZpZwogIGJ1aWxkOiBTdXBwb3J0IHN5bmNjb25maWcgd2l0aCBr
Y29uZmlnbGliCiAgYnVpbGQ6IFN3aXRjaCBidWlsZCBkaXJlY3RvcnkgYXMgQ1VSRElSCiAga2Nv
bmZpZzogRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGFyY2ggZnJvbSBDQwogIGtjb25maWc6IFJlbW92
ZSB0aGUgb2xkIGtjb25maWcKICBrY29uZmlnOiBSZXBsYWNlIHRoZSBrY29uZmlnIHdpdGggdGhl
IHVwZGF0ZQoKIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICA0NCArLQogTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMjE3ICstCiBhcmNoL0NvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMTAgKy0KIGxpYi9Db25maWcudWsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAzNCAtCiBwbGF0L0NvbmZpZy51ayAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgLQogc3VwcG9ydC9idWlsZC9NYWtlZmlsZS5y
dWxlcyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBzdXBwb3J0L2tjb25maWcubmV3
L1JFQURNRS51bmlrcmFmdCAgICAgICAgICAgICAgICB8ICAgMjEgKwogLi4uL3BhdGNoZXMvMDEt
a2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2ggICAgfCAgIDc2ICsKIHN1cHBvcnQva2Nv
bmZpZy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnIgIHwgICA1OSArCiAuLi4vcGF0
Y2hlcy8wMy1pbmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbCB8ICAxMDIgKwogc3Vw
cG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUgfCAgIDI2ICsK
IC4uLi9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhkZXAtaGVhZGVyICAgICAgICAgIHwgICAx
MiArCiAuLi4va2NvbmZpZy5uZXcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVsZXMgICB8
ICAgMTMgKwogLi4uL2tjb25maWcubmV3L3BhdGNoZXMvMDctaW1wb3J0LWhvc3QtdG9vbHMtcnVs
ZXMgfCAgMTQyICsKIC4uLi9rY29uZmlnLm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmln
LWZsYWcgIHwgICAxOSArCiAuLi4va2NvbmZpZy5uZXcvcGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2It
aW4ta2NvbmZpZyB8ICAgNzAgKwogc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMzY3ICstCiBzdXBwb3J0L2tjb25maWcvTWFrZWZpbGUuYnIgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAxMzIgKy0KIHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5y
dWxlcyAgICAgICAgICAgICAgICAgICAgIHwgICA4NCArCiBzdXBwb3J0L2tjb25maWcvUE9URklM
RVMuaW4gICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgLQogc3VwcG9ydC9rY29uZmlnL1JF
QURNRS51bmlrcmFmdCAgICAgICAgICAgICAgICAgICAgfCAgIDIxIC0KIHN1cHBvcnQva2NvbmZp
Zy9jaGVjay5zaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCAtCiBzdXBwb3J0L2tj
b25maWcvY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMjkgKy0KIHN1cHBv
cnQva2NvbmZpZy9jb25mZGF0YS5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDUzMSArLQog
c3VwcG9ydC9rY29uZmlnL2V4cHIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDcz
ICstCiBzdXBwb3J0L2tjb25maWcvZXhwci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAxMTkgKy0KIHN1cHBvcnQva2NvbmZpZy9maXhkZXAuYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICA1OSArLQogc3VwcG9ydC9rY29uZmlnL2Zvby5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDEyIC0KIHN1cHBvcnQva2NvbmZpZy9nY29uZi1jZmcuc2ggICAgICAgICAg
ICAgICAgICAgICAgIHwgICAzMCArCiBzdXBwb3J0L2tjb25maWcvZ2NvbmYuYyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAxMTYgKy0KIHN1cHBvcnQva2NvbmZpZy9pbWFnZXMuYyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAzNCArLQogc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICsKIHN1cHBvcnQva2NvbmZpZy9reGdl
dHRleHQuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIzNSAtCiBzdXBwb3J0L2tjb25maWcv
bGV4ZXIubCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0OTggKysKIHN1cHBvcnQva2Nv
bmZpZy9saXN0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQogc3VwcG9y
dC9rY29uZmlnL2xrYy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY1ICstCiBz
dXBwb3J0L2tjb25maWcvbGtjX3Byb3RvLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDUg
Ky0KIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy8uZ2l0aWdub3JlICAgICAgICAgICAgICAgIHwg
ICAgNCAtCiBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HICAgICAgICAg
ICB8ICAgIDIgKy0KIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaCAg
ICAgICAgIHwgICA5MSAtCiBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgICAg
ICAgICAgICAgICB8ICAgMjMgKy0KIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9kaWFsb2cuaCAg
ICAgICAgICAgICAgICAgIHwgICAyNSArLQogc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2lucHV0
Ym94LmMgICAgICAgICAgICAgICAgfCAgIDI0ICstCiBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cv
bWVudWJveC5jICAgICAgICAgICAgICAgICB8ICAgMjkgKy0KIHN1cHBvcnQva2NvbmZpZy9seGRp
YWxvZy90ZXh0Ym94LmMgICAgICAgICAgICAgICAgIHwgICAxNyArLQogc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL3V0aWwuYyAgICAgICAgICAgICAgICAgICAgfCAgIDE3ICstCiBzdXBwb3J0L2tj
b25maWcvbHhkaWFsb2cveWVzbm8uYyAgICAgICAgICAgICAgICAgICB8ICAgMTkgKy0KIHN1cHBv
cnQva2NvbmZpZy9tY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICAgICAgIHwgICA0NyArCiBz
dXBwb3J0L2tjb25maWcvbWNvbmYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxODQg
Ky0KIHN1cHBvcnQva2NvbmZpZy9tZW51LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDMxNSArLQogc3VwcG9ydC9rY29uZmlnL21lcmdlX2NvbmZpZy5zaCAgICAgICAgICAgICAgICAg
ICAgfCAgMTAzICstCiBzdXBwb3J0L2tjb25maWcvbmNvbmYtY2ZnLnNoICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgNDcgKwogc3VwcG9ydC9rY29uZmlnL25jb25mLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMTg0ICstCiBzdXBwb3J0L2tjb25maWcvbmNvbmYuZ3VpLmMgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMzAgKy0KIHN1cHBvcnQva2NvbmZpZy9uY29uZi5oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogc3VwcG9ydC9rY29uZmlnL3BhcnNlci55
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzMxICsrCiAuLi4vMDEta2NvbmZpZy1rZXJu
ZWwtdG8tYnVpbGRyb290LXVuaWtvcmUucGF0Y2ggICB8ICAgOTggLQogLi4uL3BhdGNoZXMvMDYt
YnItYnVpbGQtc3lzdGVtLWludGVncmF0aW9uLnBhdGNoICAgfCAgIDM1IC0KIHN1cHBvcnQva2Nv
bmZpZy9wYXRjaGVzLzEwLWJyLWJ1aWxkLXN5c3RlbS5wYXRjaCAgIHwgICA4MCAtCiAuLi4vcGF0
Y2hlcy8xMS11c2UtbWt0ZW1wLWZvci1seGRpYWxvZy5wYXRjaCAgICAgICB8ICAgMTcgLQogLi4u
L2tjb25maWcvcGF0Y2hlcy8xMi1maXgtZ2xhZGUtZmlsZS1wYXRoLnBhdGNoICAgfCAgIDE3IC0K
IC4uLi9wYXRjaGVzLzE0LXN1cHBvcnQtb3V0LW9mLXRyZWUtY29uZmlnLnBhdGNoICAgIHwgIDIw
NyAtCiAuLi4va2NvbmZpZy9wYXRjaGVzLzE1LWZpeC1xY29uZi1tb2MtcnVsZS5wYXRjaCAgICB8
ICAgMjQgLQogLi4uZGlhbG9nLWdldC1uY3Vyc2VzLUNGTEFHUy13aXRoLXBrZy1jb25maWcucGF0
Y2ggfCAgIDUwIC0KIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzL3NlcmllcyAgICAgICAgICAgICAg
ICAgICAgIHwgICAgOCAtCiBzdXBwb3J0L2tjb25maWcvcHJlcHJvY2Vzcy5jICAgICAgICAgICAg
ICAgICAgICAgICB8ICA1NzMgKysKIHN1cHBvcnQva2NvbmZpZy9xY29uZi1jZmcuc2ggICAgICAg
ICAgICAgICAgICAgICAgIHwgICAzMiArCiBzdXBwb3J0L2tjb25maWcvcWNvbmYuY2MgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICA4MDkgKystCiBzdXBwb3J0L2tjb25maWcvcWNvbmYuaCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNTMgKy0KIHN1cHBvcnQva2NvbmZpZy9zdHJl
YW1saW5lX2NvbmZpZy5wbCAgICAgICAgICAgICAgIHwgICA2NCArLQogc3VwcG9ydC9rY29uZmln
L3N5bWJvbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzQyICstCiBzdXBwb3J0L2tj
b25maWcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcgICAgICAgICB8ICAgNTIgKwogc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weSAgICAgfCAgIDEzICsKIHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IHwgICAxMCAr
CiBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL0tjb25maWcgICAgICAgICAgICAgICB8ICAg
NTYgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSAgICAgICAgICAg
fCAgIDQxICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmln
ICAgIHwgICAgNSArCiAuLi4va2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2Nv
bmZpZyAgICB8ICAgIDkgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxub19leHBl
Y3RlZF9jb25maWcgfCAgICA1ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhw
ZWN0ZWRfY29uZmlnICAgIHwgICAgOSArCiAuLi4va2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNr
MF9leHBlY3RlZF9zdGRvdXQgICB8ICAgMTAgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2lj
ZS9vbGRhc2sxX2NvbmZpZyAgICAgICAgfCAgICAyICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2lj
ZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91dCAgIHwgICAxNSArCiAuLi4va2NvbmZpZy90ZXN0cy9j
aG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnICB8ICAgMjEgKwogLi4uL3Rlc3RzL2Nob2lj
ZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5ICAgICAgfCAgIDE2ICsKIC4uLi9rY29uZmln
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZyAgIHwgICAgMiArCiAuLi4vdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnICB8ICAgIDMgKwogLi4u
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dCAgfCAgICA0ICsK
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jb25mdGVzdC5weSAgICAgICAgICAgICAgICAgIHwgIDI5
MSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZyAgICB8
ICAgNjMgKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkg
ICAgfCAgIDEwICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnIg
ICAgICAgIHwgICAzOCArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZyAgICB8ICAgIDIgKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMxICAgfCAgICA1ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcuaW5jMiAgIHwgICAgNCArCiAuLi4va2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJz
aXZlX2luYy9LY29uZmlnLmluYzMgICB8ICAgIDIgKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvX19pbml0X18ucHkgICAgfCAgIDExICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJz
aXZlX2luYy9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAgNiArCiBzdXBwb3J0L2tjb25maWcv
dGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcgICAgICAgICB8ICAgMjUgKwogc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weSAgICAgfCAgIDE1ICsKIHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnICAgICAgIHwgICAgMSArCiBzdXBw
b3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZyB8ICAgIDQgKwog
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZpZyAgfCAgIDM5
ICsKIC4uLi9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkgIHwg
ICAxNSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcg
ICB8ICAgIDMgKwogLi4uL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0
ICAgICAgfCAgIDEwICsKIC4uLi9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9L
Y29uZmlnICAgIHwgICAxNiArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5p
dF9fLnB5ICAgICAgICB8ICAgMjAgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9jb25maWcgfCAgICAxICsKIC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5t
ZXQvZXhwZWN0ZWRfY29uZmlnICAgIHwgICAgNSArCiAuLi4va2NvbmZpZy90ZXN0cy9wcmVwcm9j
ZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnICB8ICAgMjcgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3Mv
YnVpbHRpbl9mdW5jL19faW5pdF9fLnB5ICAgICAgfCAgICA5ICsKIC4uLi90ZXN0cy9wcmVwcm9j
ZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIgIHwgICAgNSArCiAuLi4vdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0ICB8ICAgIDEgKwogLi4uL3Rlc3Rz
L3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcgICAgfCAgICA1ICsKIC4uLi9w
cmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weSAgICAgIHwgICAxMSArCiAu
Li4vcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyICB8ICAgIDEg
Kwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcgICAgfCAg
IDQ0ICsKIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5ICAg
IHwgICAgOCArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3RkZXJyICAg
ICAgICB8ICAgMTAgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUv
S2NvbmZpZyAgfCAgIDUzICsKIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUv
X19pbml0X18ucHkgIHwgICAgOCArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBl
Y3RlZF9zdGRlcnIgICAgICB8ICAgIDkgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3B5dGVzdC5p
bmkgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvS2NvbmZpZyAgIHwgICAzNSArCiAuLi4va2NvbmZpZy90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkgICB8ICAgMTcgKwogLi4uL3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwICAgICAgfCAgICAyICsKIC4uLi90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MSAgICAgIHwgICAgNCArCiAuLi4vdGVzdHMv
cmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIgICAgICB8ICAgIDUgKwogc3VwcG9y
dC9rY29uZmlnL3V0aWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA2ICstCiBz
dXBwb3J0L2tjb25maWcvemNvbmYuZ3BlcmYgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDcg
LQogc3VwcG9ydC9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkICAgICAgICAgICAgICAgfCAg
Mjg2IC0KIHN1cHBvcnQva2NvbmZpZy96Y29uZi5sICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDM2MyAtCiBzdXBwb3J0L2tjb25maWcvemNvbmYubGV4LmMgICAgICAgICAgICAgICAgICAg
ICAgICB8IDI4MjAgKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy96Y29uZi5sZXguY19zaGlwcGVk
ICAgICAgICAgICAgICAgIHwgMjQyMCAtLS0tLS0tCiBzdXBwb3J0L2tjb25maWcvemNvbmYudGFi
LmMgICAgICAgICAgICAgICAgICAgICAgICB8IDI1MDQgKysrKysrKwogc3VwcG9ydC9rY29uZmln
L3pjb25mLnRhYi5jX3NoaXBwZWQgICAgICAgICAgICAgICAgfCAyNTM4IC0tLS0tLS0KIHN1cHBv
cnQva2NvbmZpZy96Y29uZi55ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDczMyAtLQog
c3VwcG9ydC9rY29uZmlnbGliL0xJQ0VOU0UudHh0ICAgICAgICAgICAgICAgICAgICAgfCAgICA1
ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9NQU5JRkVTVC5pbiAgICAgICAgICAgICAgICAgICAgIHwg
ICAgMiArCiBzdXBwb3J0L2tjb25maWdsaWIvUkVBRE1FLnJzdCAgICAgICAgICAgICAgICAgICAg
ICB8ICA4MDYgKysrCiBzdXBwb3J0L2tjb25maWdsaWIvYWxsZGVmY29uZmlnLnB5ICAgICAgICAg
ICAgICAgICB8ICAgMjcgKwogc3VwcG9ydC9rY29uZmlnbGliL2FsbG1vZGNvbmZpZy5weSAgICAg
ICAgICAgICAgICAgfCAgIDQ2ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9hbGxub2NvbmZpZy5weSAg
ICAgICAgICAgICAgICAgIHwgICA0NSArCiBzdXBwb3J0L2tjb25maWdsaWIvYWxseWVzY29uZmln
LnB5ICAgICAgICAgICAgICAgICB8ICAgNTYgKwogc3VwcG9ydC9rY29uZmlnbGliL2RlZmNvbmZp
Zy5weSAgICAgICAgICAgICAgICAgICAgfCAgIDQzICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFt
cGxlcy9LbWVudWNvbmZpZyAgICAgICAgICAgIHwgIDEwMiArCiBzdXBwb3J0L2tjb25maWdsaWIv
ZXhhbXBsZXMvYWxsbm9jb25maWdfd2Fsay5weSAgICB8ICAgNjYgKwogc3VwcG9ydC9rY29uZmln
bGliL2V4YW1wbGVzL2RlZmNvbmZpZ19vbGRjb25maWcucHkgfCAgIDM5ICsKIHN1cHBvcnQva2Nv
bmZpZ2xpYi9leGFtcGxlcy9kdW1wdmFycy5weSAgICAgICAgICAgIHwgICAxNSArCiBzdXBwb3J0
L2tjb25maWdsaWIvZXhhbXBsZXMvZXZhbF9leHByLnB5ICAgICAgICAgICB8ICAgMjQgKwogc3Vw
cG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2ZpbmRfc3ltYm9sLnB5ICAgICAgICAgfCAgMTEyICsK
IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9oZWxwX2dyZXAucHkgICAgICAgICAgIHwgICA2
NCArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMva2NvbmZpZ2xpYi5weSAgICAgICAgICB8
ICAgIDEgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2xpc3RfdW5kZWZpbmVkLnB5ICAg
ICAgfCAgMTU2ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9tZW51Y29uZmlnX2V4YW1w
bGUucHkgIHwgIDM0MSArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvbWVyZ2VfY29uZmln
LnB5ICAgICAgICB8ICAxMzMgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL3ByaW50X2Nv
bmZpZ190cmVlLnB5ICAgfCAgMTk5ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9wcmlu
dF9zeW1faW5mby5weSAgICAgIHwgICA1NCArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMv
cHJpbnRfdHJlZS5weSAgICAgICAgICB8ICAgNzUgKwogc3VwcG9ydC9rY29uZmlnbGliL2dlbmNv
bmZpZy5weSAgICAgICAgICAgICAgICAgICAgfCAgMTMyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9n
dWljb25maWcucHkgICAgICAgICAgICAgICAgICAgIHwgMjMxNiArKysrKysrCiBzdXBwb3J0L2tj
b25maWdsaWIva2NvbmZpZ2xpYi5weSAgICAgICAgICAgICAgICAgICB8IDcwMTggKysrKysrKysr
KysrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZ2xpYi9saXN0bmV3Y29uZmlnLnB5ICAgICAgICAg
ICAgICAgIHwgICA0NyArCiBzdXBwb3J0L2tjb25maWdsaWIvbWFrZWZpbGUucGF0Y2ggICAgICAg
ICAgICAgICAgICB8ICAgNDggKwogc3VwcG9ydC9rY29uZmlnbGliL21lbnVjb25maWcucHkgICAg
ICAgICAgICAgICAgICAgfCAzMjY0ICsrKysrKysrKwogc3VwcG9ydC9rY29uZmlnbGliL29sZGNv
bmZpZy5weSAgICAgICAgICAgICAgICAgICAgfCAgMjQ2ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9v
bGRkZWZjb25maWcucHkgICAgICAgICAgICAgICAgIHwgICAyOCArCiBzdXBwb3J0L2tjb25maWds
aWIvc2F2ZWRlZmNvbmZpZy5weSAgICAgICAgICAgICAgICB8ICAgNDkgKwogc3VwcG9ydC9rY29u
ZmlnbGliL3NldGNvbmZpZy5weSAgICAgICAgICAgICAgICAgICAgfCAgIDkyICsKIHN1cHBvcnQv
a2NvbmZpZ2xpYi9zZXR1cC5jZmcgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArCiBzdXBw
b3J0L2tjb25maWdsaWIvc2V0dXAucHkgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDAgKwog
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0thcHBlbmQgICAgICAgICAgICAgICAgICAgfCAgIDEy
ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LYXNzaWduYWJsZSAgICAgICAgICAgICAgIHwg
IDIzMCArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Nob2ljZSAgICAgICAgICAgICAgICAg
ICB8ICAxOTggKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnQg
ICAgICAgfCAgICA4ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX2V4aXN0
ZW50X2J1dF9uIHwgICAxMCArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19u
b25leGlzdGVudCAgICB8ICAgIDUgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25m
aWdfc3JjdHJlZSAgICAgICAgfCAgICA1ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVw
Y29weSAgICAgICAgICAgICAgICAgIHwgIDE3MyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2RlcGxvb3AwICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0tkZXBsb29wMSAgICAgICAgICAgICAgICAgfCAgICAzICsKIHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LZGVwbG9vcDEwICAgICAgICAgICAgICAgIHwgICA0OCArCiBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS2RlcGxvb3AyICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMyAgICAgICAgICAgICAgICAgfCAgICAzICsKIHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDQgICAgICAgICAgICAgICAgIHwgICAgNyArCiBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A1ICAgICAgICAgICAgICAgICB8ICAgIDcg
Kwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNiAgICAgICAgICAgICAgICAgfCAg
ICA2ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDcgICAgICAgICAgICAgICAg
IHwgICAxMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A4ICAgICAgICAgICAg
ICAgICB8ICAgIDggKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOSAgICAgICAg
ICAgICAgICAgfCAgICA3ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGlyZGVwICAgICAg
ICAgICAgICAgICAgIHwgICAzMCArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2VzY2FwZSAg
ICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tldmFs
ICAgICAgICAgICAgICAgICAgICAgfCAgIDM0ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
ZXhwcl9pdGVtcyAgICAgICAgICAgICAgIHwgICAxMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2hlbHAgICAgICAgICAgICAgICAgICAgICB8ICAgNTAgKwogc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tpZnJlbW92YWwgICAgICAgICAgICAgICAgfCAgIDk5ICsKIHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LaW1wbHkgICAgICAgICAgICAgICAgICAgIHwgIDE0NSArCiBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aCAgICAgICAgICAgICB8ICAgMTIgKwogc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8xICAgfCAgIDEyICsKIHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaW5jbHVkZV9wYXRoX3NvdXJjZWRfMiAgIHwgICAxMSAr
CiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2l0ZW1saXN0cyAgICAgICAgICAgICAgICB8ICAg
MzYgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tsb2NhdGlvbiAgICAgICAgICAgICAgICAg
fCAgIDcyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbG9jYXRpb25fc291cmNlZCAgICAg
ICAgIHwgICAxOCArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21haW5tZW51ICAgICAgICAg
ICAgICAgICB8ICAgIDUgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttZW51Y29uZmlnICAg
ICAgICAgICAgICAgfCAgIDM3ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWlzYyAgICAg
ICAgICAgICAgICAgICAgIHwgICA4MiArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc3Np
bmdyc291cmNlICAgICAgICAgICB8ICAgIDEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tt
aXNzaW5nc291cmNlICAgICAgICAgICAgfCAgICAxICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9Lb3JkZXIgICAgICAgICAgICAgICAgICAgIHwgICAzNSArCiBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS3ByZXByb2Nlc3MgICAgICAgICAgICAgICB8ICAxNDcgKwogc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0tyYW5nZSAgICAgICAgICAgICAgICAgICAgfCAgMTMzICsKIHN1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9LcmVjdXJzaXZlMSAgICAgICAgICAgICAgIHwgICAgMSArCiBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvS3JlY3Vyc2l2ZTIgICAgICAgICAgICAgICB8ICAgIDEgKwogc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWZlcmVuY2VkICAgICAgICAgICAgICAgfCAgIDYzICsK
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVsYXRpb24gICAgICAgICAgICAgICAgIHwgICAz
NiArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JlcHIgICAgICAgICAgICAgICAgICAgICB8
ICAgNjQgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tzdHIgICAgICAgICAgICAgICAgICAg
ICAgfCAgMjkzICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdW5kZWYgICAgICAgICAgICAg
ICAgICAgIHwgICAyMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3VzZXJmdW5jdGlvbnMg
ICAgICAgICAgICB8ICAgMTEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0t2aXNpYmlsaXR5
ICAgICAgICAgICAgICAgfCAgMzQyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdf
aW5kZW50ZWQgICAgICAgICAgIHwgICAgMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvY29u
ZmlnX3NldF9ib29sICAgICAgICAgICB8ICAgIDEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L2NvbmZpZ19zZXRfc3RyaW5nICAgICAgICAgfCAgICAxICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90
ZXN0cy9kZWZjb25maWdfMSAgICAgICAgICAgICAgIHwgICAgMAogc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL2RlZmNvbmZpZ18yICAgICAgICAgICAgICAgfCAgICAwCiBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvZW1wdHkgICAgICAgICAgICAgICAgICAgICB8ICAgIDAKIHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9rY29uZmlnZnVuY3Rpb25zLnB5ICAgICAgIHwgICAxNCArCiBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvcmVsdGVzdCAgICAgICAgICAgICAgICAgICB8ICAgNTEgKwogc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LY29uZmlnX3N5bWxpbmtfMiAgICAgfCAgICAxICsKIHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2NvbmZpZ19zeW1saW5rXzMgICAgIHwgICAgMiAr
CiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWQxICB8ICAg
IDEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3VyY2VkMiAg
fCAgICAxICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2Vk
MSAgIHwgICAgMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9nc291
cmNlZDIgICB8ICAgIDEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25f
cnNvdXJjZWQgICAgfCAgICAyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvZGVmY29u
ZmlnX2luX3N1YiAgICAgIHwgICAgMAogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9zdWIv
S2NvbmZpZ19zeW1saW5rXzEgfCAgICAyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zeW1s
aW5rICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHN1
aXRlLnB5ICAgICAgICAgICAgICAgICAgICB8IDMxMzYgKysrKysrKysrCiBzdXBwb3J0L3Njcmlw
dHMvY29uZmlndXBkYXRlICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIHN1cHBvcnQv
c2NyaXB0cy91a19idWlsZF9jb25maWd1cmUuc2ggICAgICAgICAgICAgIHwgIDEwMiArCiAyNDIg
ZmlsZXMgY2hhbmdlZCwgMzMzODkgaW5zZXJ0aW9ucygrKSwgOTYyMyBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMS1rY29uZmlnLWtl
cm5lbC10by11bmlrcmFmdC5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJv
bS1rZXJuZWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMv
MDQtcmVtb3ZlLWdlbmVyaWMtcnVsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlcgogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVs
ZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDctaW1w
b3J0LWhvc3QtdG9vbHMtcnVsZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2ItaW4ta2NvbmZpZwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5ydWxlcwogZGVsZXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9QT1RGSUxFUy5pbgogZGVsZXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy9SRUFETUUudW5pa3JhZnQKIGRlbGV0ZSBtb2RlIDEwMDc1NSBz
dXBwb3J0L2tjb25maWcvY2hlY2suc2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvZm9vLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcvZ2NvbmYtY2ZnLnNo
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5oCiBkZWxldGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2t4Z2V0dGV4dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL2xleGVyLmwKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvbHhkaWFsb2cvLmdpdGlnbm9yZQogZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZp
Zy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaAogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQv
a2NvbmZpZy9tY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcv
bmNvbmYtY2ZnLnNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhcnNlci55
CiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDEta2NvbmZpZy1r
ZXJuZWwtdG8tYnVpbGRyb290LXVuaWtvcmUucGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcvcGF0Y2hlcy8wNi1ici1idWlsZC1zeXN0ZW0taW50ZWdyYXRpb24ucGF0Y2gK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8xMC1ici1idWlsZC1z
eXN0ZW0ucGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8x
MS11c2UtbWt0ZW1wLWZvci1seGRpYWxvZy5wYXRjaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy9wYXRjaGVzLzEyLWZpeC1nbGFkZS1maWxlLXBhdGgucGF0Y2gKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8xNC1zdXBwb3J0LW91dC1vZi10cmVl
LWNvbmZpZy5wYXRjaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVz
LzE1LWZpeC1xY29uZi1tb2MtcnVsZS5wYXRjaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy9wYXRjaGVzLzE3LWtjb25maWctbHhkaWFsb2ctZ2V0LW5jdXJzZXMtQ0ZMQUdTLXdp
dGgtcGtnLWNvbmZpZy5wYXRjaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9w
YXRjaGVzL3NlcmllcwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wcmVwcm9j
ZXNzLmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcvcWNvbmYtY2ZnLnNoCiBt
b2RlIGNoYW5nZSAxMDA2NDQgPT4gMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5lX2Nv
bmZpZy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1
Ym1lbnUvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9h
dXRvX3N1Ym1lbnUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG1vZF9l
eHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
Y2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRv
dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFz
azFfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2lj
ZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5p
dF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92
YWx1ZV93aXRoX21fZGVwL2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAv
ZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2NvbmZ0ZXN0LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfZGVwL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJy
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJy
X3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMgogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmlu
YzMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2
ZV9pbmMvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29u
ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2lj
ZS9leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25m
aWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93
aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2Rl
cF91bm1ldC9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
bm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRp
bl9mdW5jL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBl
Y3RlZF9zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJl
cHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRf
Xy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNz
L2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRf
Xy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNz
L2VzY2FwZS9leHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJs
ZS9leHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvcHl0ZXN0LmluaQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9y
YW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0
ZG91dDAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0
ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvemNvbmYuZ3BlcmYKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvemNvbmYubAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy96Y29uZi5sZXguYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96Y29u
Zi5sZXguY19zaGlwcGVkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25m
LnRhYi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLnRhYi5jX3No
aXBwZWQKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvemNvbmYueQogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9MSUNFTlNFLnR4dAogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9NQU5JRkVTVC5pbgogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi9SRUFETUUucnN0CiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9y
dC9rY29uZmlnbGliL2FsbGRlZmNvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQv
a2NvbmZpZ2xpYi9hbGxtb2Rjb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tj
b25maWdsaWIvYWxsbm9jb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25m
aWdsaWIvYWxseWVzY29uZmlnLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmln
bGliL2RlZmNvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9l
eGFtcGxlcy9LbWVudWNvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi9leGFtcGxlcy9hbGxub2NvbmZpZ193YWxrLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL2V4YW1wbGVzL2RlZmNvbmZpZ19vbGRjb25maWcucHkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZHVtcHZhcnMucHkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZXZhbF9leHByLnB5CiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2ZpbmRfc3ltYm9sLnB5
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2hlbHBfZ3Jl
cC5weQogY3JlYXRlIG1vZGUgMTIwMDAwIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9rY29u
ZmlnbGliLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVz
L2xpc3RfdW5kZWZpbmVkLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGli
L2V4YW1wbGVzL21lbnVjb25maWdfZXhhbXBsZS5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBv
cnQva2NvbmZpZ2xpYi9leGFtcGxlcy9tZXJnZV9jb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfY29uZmlnX3RyZWUucHkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfc3ltX2luZm8u
cHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRf
dHJlZS5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9nZW5jb25maWcu
cHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvZ3VpY29uZmlnLnB5CiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2tjb25maWdsaWIucHkKIGNyZWF0
ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvbGlzdG5ld2NvbmZpZy5weQogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9tYWtlZmlsZS5wYXRjaAogY3JlYXRlIG1v
ZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9tZW51Y29uZmlnLnB5CiBjcmVhdGUgbW9kZSAx
MDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL29sZGNvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNzU1
IHN1cHBvcnQva2NvbmZpZ2xpYi9vbGRkZWZjb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBz
dXBwb3J0L2tjb25maWdsaWIvc2F2ZWRlZmNvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1
cHBvcnQva2NvbmZpZ2xpYi9zZXRjb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWdsaWIvc2V0dXAuY2ZnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
bGliL3NldHVwLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0thcHBlbmQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Fz
c2lnbmFibGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2No
b2ljZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29u
ZmlnX2V4aXN0ZW50CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tkZWZjb25maWdfZXhpc3RlbnRfYnV0X24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19ub25leGlzdGVudAogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX3NyY3RyZWUKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGNvcHkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMQogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDEwCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDYKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RlcGxvb3A3CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tkZXBsb29wOAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LZGVwbG9vcDkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2RpcmRlcAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90
ZXN0cy9LZXNjYXBlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tldmFsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tleHBy
X2l0ZW1zCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0toZWxw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpZnJlbW92YWwK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2ltcGx5CiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aF9z
b3VyY2VkXzEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2lu
Y2x1ZGVfcGF0aF9zb3VyY2VkXzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2l0ZW1saXN0cwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LbG9jYXRpb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2xvY2F0aW9uX3NvdXJjZWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS21haW5tZW51CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0ttZW51Y29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0ttaXNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0ttaXNzaW5ncnNvdXJjZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LbWlzc2luZ3NvdXJjZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9Lb3JkZXIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS3ByZXByb2Nlc3MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS3JhbmdlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tyZWN1cnNpdmUxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tyZWN1cnNpdmUyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tyZWZlcmVuY2VkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tyZWxhdGlvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
cmVwcgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9Lc3RyCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0t1bmRlZgogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdXNlcmZ1bmN0aW9ucwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdmlzaWJpbGl0eQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfaW5kZW50ZWQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvY29uZmlnX3NldF9i
b29sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19z
ZXRfc3RyaW5nCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2Rl
ZmNvbmZpZ18xCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2Rl
ZmNvbmZpZ18yCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2Vt
cHR5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2tjb25maWdm
dW5jdGlvbnMucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
cmVsdGVzdAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIv
S2NvbmZpZ19zeW1saW5rXzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18zCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3VyY2VkMQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dyc291cmNlZDIKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9n
c291cmNlZDEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3Vi
L0tsb2NhdGlvbl9nc291cmNlZDIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9yc291cmNlZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvZGVmY29uZmlnX2luX3N1YgogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvc3ViL0tjb25maWdfc3ltbGlua18xCiBj
cmVhdGUgbW9kZSAxMjAwMDAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N5bWxpbmsKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHN1aXRlLnB5CiBjcmVhdGUgbW9k
ZSAxMDA3NTUgc3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaAoKLS0gCjIuNy40
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:23:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:23:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOH-0000Ux-FZ; Mon, 09 Sep 2019 17:23:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOG-0000Uj-BM
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:23:48 +0000
X-Inumbo-ID: 929203cb-d326-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 929203cb-d326-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 17:23:45 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8610CF2027;
 Mon,  9 Sep 2019 19:23:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Y9VShaiycUwN; Mon,  9 Sep 2019 19:23:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 5365AF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:42 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:41 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:40 +0200
Message-ID: <20190909172300.21502-4-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 03/23] kconfig: Replace the kernel
 with Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2VhcmNoIGFuZCByZXBsYWNlIHRoZSBLZXJuZWwgd2l0aCBVbmlrcmFmdAoKU2lnbmVkLW9mZi1i
eTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQog
c3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSAgICAgICAgICAgICAgICAgICAgfCAgMiAr
LQogc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAg
NiArLQogc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMiArLQogLi4uL3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2gg
ICAgfCA3NiArKysrKysrKysrKysrKysrKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25m
LmNjICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiA2IGZpbGVzIGNoYW5nZWQsIDgzIGlu
c2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoCgpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUKaW5kZXggM2YzMjdlMi4uN2I1MzJjNSAxMDA2NDQKLS0tIGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZQorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
CkBAIC0xLDYgKzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogIyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSMgS2VybmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworIyBVbmlr
cmFmdCBjb25maWd1cmF0aW9uIHRhcmdldHMKICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBmcm9t
IHRvcC1sZXZlbCBtYWtlZmlsZQogCiBQSE9OWSArPSB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZp
ZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcgXApkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYu
Z2xhZGUKaW5kZXggYWE0ODNjYi4uMDNlOTdkNyAxMDA2NDQKLS0tIGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9nY29uZi5nbGFkZQorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlCkBA
IC00LDcgKzQsNyBAQAogCiA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cxIj4K
ICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICA8cHJvcGVydHkg
bmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVsIENvbmZpZ3VyYXRvcjwv
cHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0
ayBVbmlrcmFmdCBDb25maWd1cmF0b3I8L3Byb3BlcnR5PgogICA8cHJvcGVydHkgbmFtZT0idHlw
ZSI+R1RLX1dJTkRPV19UT1BMRVZFTDwvcHJvcGVydHk+CiAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5k
b3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX05PTkU8L3Byb3BlcnR5PgogICA8cHJvcGVydHkgbmFt
ZT0ibW9kYWwiPkZhbHNlPC9wcm9wZXJ0eT4KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYwppbmRleCA2OTQwOTFmLi41
M2M0YTYyIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMKKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCkBAIC0xNzUsOSArMTc1LDkgQEAgbWVudV9pbnN0cnVj
dGlvbnNbXSA9CiAJIkFycm93IGtleXMgbmF2aWdhdGUgdGhlIG1lbnUuICAiCiAJIjxFbnRlcj4g
c2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBlbXB0eSBzdWJtZW51cyAtLS0tKS4gICIKIAkiSGln
aGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICIKLQkiUHJlc3NpbmcgPFk+IGluY2x1ZGVz
LCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFyaXplcyBmZWF0dXJlcy4gICIKKwkiUHJlc3Npbmcg
PFk+IHNlbGVjdHMgYSBmZWF0dXJlLCB3aGlsZSA8Tj4gd2lsbCBleGNsdWRlIGEgZmVhdHVyZS4g
ICIKIAkiUHJlc3MgPEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2Vh
cmNoLiAgIgotCSJMZWdlbmQ6IFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxl
ICA8ID4gbW9kdWxlIGNhcGFibGUiLAorCSJMZWdlbmQ6IFsqXSBmZWF0dXJlIGlzIHNlbGVjdGVk
ICBbIF0gZmVhdHVyZSBpcyBleGNsdWRlZCIsCiByYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQog
CSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgogCSJwcmVz
cyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRvIHNlbGVjdCAiCkBAIC05NTcsNyAr
OTU3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhpdCh2b2lkKQogCWlmIChjb25mX2dldF9jaGFu
Z2VkKCkpCiAJCXJlcyA9IGRpYWxvZ195ZXNubyhOVUxMLAogCQkJCSAgICJEbyB5b3Ugd2lzaCB0
byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRpb24/XG4iCi0JCQkJICAgICAiKFByZXNzIDxFU0M+
PEVTQz4gdG8gY29udGludWUga2VybmVsIGNvbmZpZ3VyYXRpb24uKSIsCisJCQkJICAgICAiKFBy
ZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUgVW5pa3JhZnQgY29uZmlndXJhdGlvbi4pIiwKIAkJ
CQkgICA2LCA2MCk7CiAJZWxzZQogCQlyZXMgPSAtMTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbmNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYwppbmRleCBjYmFm
ZTNiLi5kM2Q5MDhjIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCkBAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBj
b25zdCBjaGFyIG5jb25mX2dsb2JhbF9oZWxwW10gPQogIk1lbnUgZW50cmllc1xuIgogIi0tLS0t
LS0tLS0tLVxuIgogIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQg
cGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIgotImJ1aWxkLiAgS2VybmVsIGZlYXR1cmVzIGNh
biBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciByZW1vdmVkLlxuIgorImJ1aWxk
LiAgVW5pa3JhZnQgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBzZWxlY3RlZCBvciBkZXNlbGVjdGVk
LlxuIgogIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVjaW1hbCBvciBo
ZXhhZGVjaW1hbCBudW1iZXJzLlxuIgogIlxuIgogIk1lbnUgZW50cmllcyBiZWdpbm5pbmcgd2l0
aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3Jh
ZnQucGF0Y2ggYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwt
dG8tdW5pa3JhZnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBk
NjNiNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMS1r
Y29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRjaApAQCAtMCwwICsxLDc2IEBACitkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUKK2luZGV4IDNmMzI3ZTIuLjdiNTMyYzUgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlCitA
QCAtMSw2ICsxLDYgQEAKKyAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisgIyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKy0jIEtlcm5lbCBjb25maWd1cmF0aW9uIHRhcmdldHMKKysjIFVu
aWtyYWZ0IGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBm
cm9tIHRvcC1sZXZlbCBtYWtlZmlsZQorIAorIFBIT05ZICs9IHhjb25maWcgZ2NvbmZpZyBtZW51
Y29uZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZyBcCitkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
Z2NvbmYuZ2xhZGUKK2luZGV4IGFhNDgzY2IuLjAzZTk3ZDcgMTAwNjQ0CistLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L2djb25mLmdsYWRlCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25m
LmdsYWRlCitAQCAtNCw3ICs0LDcgQEAKKyAKKyA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlk
PSJ3aW5kb3cxIj4KKyAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4K
Ky0gIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0ayBLZXJuZWwg
Q29uZmlndXJhdG9yPC9wcm9wZXJ0eT4KKysgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPkd0ayBVbmlrcmFmdCBDb25maWd1cmF0b3I8L3Byb3BlcnR5PgorICAgPHBy
b3BlcnR5IG5hbWU9InR5cGUiPkdUS19XSU5ET1dfVE9QTEVWRUw8L3Byb3BlcnR5PgorICAgPHBy
b3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfTk9ORTwvcHJvcGVydHk+
CisgICA8cHJvcGVydHkgbmFtZT0ibW9kYWwiPkZhbHNlPC9wcm9wZXJ0eT4KK2RpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25m
LmMKK2luZGV4IDY5NDA5MWYuLjUzYzRhNjIgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L21jb25mLmMKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYworQEAgLTE3NSw5
ICsxNzUsOSBAQCBtZW51X2luc3RydWN0aW9uc1tdID0KKyAJIkFycm93IGtleXMgbmF2aWdhdGUg
dGhlIG1lbnUuICAiCisgCSI8RW50ZXI+IHNlbGVjdHMgc3VibWVudXMgLS0tPiAob3IgZW1wdHkg
c3VibWVudXMgLS0tLSkuICAiCisgCSJIaWdobGlnaHRlZCBsZXR0ZXJzIGFyZSBob3RrZXlzLiAg
IgorLQkiUHJlc3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFyaXpl
cyBmZWF0dXJlcy4gICIKKysJIlByZXNzaW5nIDxZPiBzZWxlY3RzIGEgZmVhdHVyZSwgd2hpbGUg
PE4+IHdpbGwgZXhjbHVkZSBhIGZlYXR1cmUuICAiCisgCSJQcmVzcyA8RXNjPjxFc2M+IHRvIGV4
aXQsIDw/PiBmb3IgSGVscCwgPC8+IGZvciBTZWFyY2guICAiCistCSJMZWdlbmQ6IFsqXSBidWls
dC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUiLAorKwki
TGVnZW5kOiBbKl0gZmVhdHVyZSBpcyBzZWxlY3RlZCAgWyBdIGZlYXR1cmUgaXMgZXhjbHVkZWQi
LAorIHJhZGlvbGlzdF9pbnN0cnVjdGlvbnNbXSA9CisgCSJVc2UgdGhlIGFycm93IGtleXMgdG8g
bmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgorIAkicHJlc3MgdGhlIGhvdGtleSBvZiB0aGUgaXRl
bSB5b3Ugd2lzaCB0byBzZWxlY3QgIgorQEAgLTk1Nyw3ICs5NTcsNyBAQCBzdGF0aWMgaW50IGhh
bmRsZV9leGl0KHZvaWQpCisgCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpCisgCQlyZXMgPSBkaWFs
b2dfeWVzbm8oTlVMTCwKKyAJCQkJICAgIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29u
ZmlndXJhdGlvbj9cbiIKKy0JCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUg
a2VybmVsIGNvbmZpZ3VyYXRpb24uKSIsCisrCQkJCSAgICAgIihQcmVzcyA8RVNDPjxFU0M+IHRv
IGNvbnRpbnVlIFVuaWtyYWZ0IGNvbmZpZ3VyYXRpb24uKSIsCisgCQkJCSAgIDYsIDYwKTsKKyAJ
ZWxzZQorIAkJcmVzID0gLTE7CitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29u
Zi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCitpbmRleCBjYmFmZTNiLi5kM2Q5MDhj
IDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCisrKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L25jb25mLmMKK0BAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
IG5jb25mX2dsb2JhbF9oZWxwW10gPQorICJNZW51IGVudHJpZXNcbiIKKyAiLS0tLS0tLS0tLS0t
XG4iCisgIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1l
dGVycyBmb3IgdGhlIGtlcm5lbFxuIgorLSJidWlsZC4gIEtlcm5lbCBmZWF0dXJlcyBjYW4gZWl0
aGVyIGJlIGJ1aWx0LWluLCBtb2R1bGFyaXplZCwgb3IgcmVtb3ZlZC5cbiIKKysiYnVpbGQuICBV
bmlrcmFmdCBmZWF0dXJlcyBjYW4gZWl0aGVyIGJlIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWQuXG4i
CisgIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVjaW1hbCBvciBoZXhh
ZGVjaW1hbCBudW1iZXJzLlxuIgorICJcbiIKKyAiTWVudSBlbnRyaWVzIGJlZ2lubmluZyB3aXRo
IGZvbGxvd2luZyBicmFjZXMgcmVwcmVzZW50IGZlYXR1cmVzIHRoYXRcbiIKK2RpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29u
Zi5jYworaW5kZXggY2U3ZmM4Ny4uMDAyMWFhNiAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcWNvbmYuY2MKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MKK0BAIC00
Niw3ICs0Niw3IEBAIHN0YXRpYyBpbmxpbmUgUVN0cmluZyBxZ2V0dGV4dChjb25zdCBjaGFyKiBz
dHIpCisgfQorIAorIENvbmZpZ1NldHRpbmdzOjpDb25maWdTZXR0aW5ncygpCistCTogUVNldHRp
bmdzKCJrZXJuZWwub3JnIiwgInFjb25mIikKKysJOiBRU2V0dGluZ3MoInVuaWtyYWZ0Lm9yZyIs
ICJxY29uZiIpCisgeworIH0KKyAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNv
bmYuY2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCmluZGV4IGNlN2ZjODcuLjAwMjFh
YTYgMTAwNjQ0Ci0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9xY29uZi5jYwpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgaW5saW5lIFFT
dHJpbmcgcWdldHRleHQoY29uc3QgY2hhciogc3RyKQogfQogCiBDb25maWdTZXR0aW5nczo6Q29u
ZmlnU2V0dGluZ3MoKQotCTogUVNldHRpbmdzKCJrZXJuZWwub3JnIiwgInFjb25mIikKKwk6IFFT
ZXR0aW5ncygidW5pa3JhZnQub3JnIiwgInFjb25mIikKIHsKIH0KIAotLSAKMi43LjQKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:23:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:23:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOK-0000VZ-HI; Mon, 09 Sep 2019 17:23:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOI-0000VI-VD
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:23:50 +0000
X-Inumbo-ID: 95e4c38c-d326-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 95e4c38c-d326-11e9-a337-bc764e2007e4;
 Mon, 09 Sep 2019 17:23:49 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 9E038F2027;
 Mon,  9 Sep 2019 19:23:48 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 6CBb4h4FRTGG; Mon,  9 Sep 2019 19:23:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 6FF31F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:46 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:42 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:42 +0200
Message-ID: <20190909172300.21502-6-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 05/23] kbuild: Add build helper
 function from Linux
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0IE1ha2VmaWxlLnJ1bGVzIGZyb20gc2NyaXB0cy9rYnVpbGQuaW5jbHVkZS4KVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAg
ICAgICAgICB8ICAgMSArCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzICAgICAg
ICAgICAgICAgICB8ICA4NCArKysrKysrKysrKysrKysrKwogLi4uL3BhdGNoZXMvMDMtaW5jbHVk
ZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwgfCAxMDIgKysrKysrKysrKysrKysrKysrKysr
CiAzIGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMy1pbmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9t
LWtlcm5lbAoKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCmluZGV4IDQxYzVjZTEuLjBmZGJlOWEgMTAw
NjQ0Ci0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgpAQCAtNCw2ICs0LDcgQEAgdG9wX2J1aWxkZGlyPS4uLy4u
Lwogc3JjdHJlZSA6PSAuCiBvYmogPz0gLgogCitpbmNsdWRlIE1ha2VmaWxlLnJ1bGVzCiBpbmNs
dWRlIE1ha2VmaWxlCiAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKIC1p
bmNsdWRlICQob2JqKS8uZGVwZW5kCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLnJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGE5YzgxCi0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwpAQCAtMCwwICsxLDg0IEBACitrZWNo
byA6PSBlY2hvCitjb21tYSA6PSAsCisKKworZG90LXRhcmdldCA9ICQoZGlyICRAKS4kKG5vdGRp
ciAkQCkKKworYW55LXByZXJlcSA9ICQoZmlsdGVyLW91dCAkKFBIT05ZKSwkPykgJChmaWx0ZXIt
b3V0ICQoUEhPTlkpICQod2lsZGNhcmQgJF4pLCReKQorCithcmctY2hlY2sgPSAkKGlmICQoc3Ry
aXAgJChjbWRfJEApKSwsMSkKKworbWFrZS1jbWQgPSAkKGNhbGwgZXNjc3EsJChzdWJzdCAkKHBv
dW5kKSwkJChwb3VuZCksJChzdWJzdCAkJCwkJCQkLCQoY21kXyQoMSkpKSkpCisKKyMgcHJpbnRp
bmcgY29tbWFuZHMKK2NtZCA9IEBzZXQgLWU7ICQoZWNoby1jbWQpICQoY21kXyQoMSkpCisKK2Rl
cGZpbGUgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5kKQorZGVwZmxhZ3MgPSAt
V3AkKGNvbW1hKS1NRCQoY29tbWEpJChjYWxsIGRvdC10YXJnZXQpCisKK2NtZF9hbmRfZml4ZGVw
ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJJChj
bWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisJJChvYmopL2ZpeGRlcCAkKGRlcGZpbGUpICRAICckKG1ha2UtY21kKScgPiAkKGRvdC10
YXJnZXQpLmNtZDtcCisJcm0gLWYgJChkZXBmaWxlKQorCitpZl9jaGFuZ2VkX2RlcCA9ICQoaWYg
JChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSksJChjbWRfYW5kX2ZpeGRlcCksQDop
CisKK2RlZmluZSBtdWx0aV9kZXBlbmQKKyQoZm9yZWFjaCBtLCAkKG5vdGRpciAkMSksIFwKKyAg
ICAkKGV2YWwgJChvYmopLyRtOiBcCisgICAgJChhZGRwcmVmaXggJChvYmopLywgJChmb3JlYWNo
IHMsICQzLCAkKCQobTolJChzdHJpcCAkMik9JSQocykpKSkpKSkKK2VuZGVmCisKKyMjIworIyBm
aWxlY2hrIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGNvbnRlbnQgb2YgYSBnZW5lcmF0ZWQgZmls
ZSBpcyB1cGRhdGVkLgorIyBTYW1wbGUgdXNhZ2U6CisjCisjIGZpbGVjaGtfc2FtcGxlID0gZWNo
byAkKEtFUk5FTFJFTEVBU0UpCisjIHZlcnNpb24uaDogRk9SQ0UKKyMgICAkKGNhbGwgZmlsZWNo
ayxzYW1wbGUpCisjCisjIFRoZSBydWxlIGRlZmluZWQgc2hhbGwgd3JpdGUgdG8gc3Rkb3V0IHRo
ZSBjb250ZW50IG9mIHRoZSBuZXcgZmlsZS4KKyMgVGhlIGV4aXN0aW5nIGZpbGUgd2lsbCBiZSBj
b21wYXJlZCB3aXRoIHRoZSBuZXcgb25lLgorIyAtIElmIG5vIGZpbGUgZXhpc3QgaXQgaXMgY3Jl
YXRlZAorIyAtIElmIHRoZSBjb250ZW50IGRpZmZlciB0aGUgbmV3IGZpbGUgaXMgdXNlZAorIyAt
IElmIHRoZXkgYXJlIGVxdWFsIG5vIGNoYW5nZSwgYW5kIG5vIHRpbWVzdGFtcCB1cGRhdGUKKyMg
LSBzdGRpbiBpcyBwaXBlZCBpbiBmcm9tIHRoZSBmaXJzdCBwcmVyZXF1aXNpdGUgKCQ8KSBzbyBv
bmUgaGFzCisjICAgdG8gc3BlY2lmeSBhIHZhbGlkIGZpbGUgYXMgZmlyc3QgcHJlcmVxdWlzaXRl
IChvZnRlbiB0aGUga2J1aWxkIGZpbGUpCitkZWZpbmUgZmlsZWNoaworCSQoUSlzZXQgLWU7ICAg
ICAgICAgICAgIFwKKwlta2RpciAtcCAkKGRpciAkQCk7ICAgICAgICAgXAorCXsgJChmaWxlY2hr
XyQoMSkpOyB9ID4gJEAudG1wOyAgICAgIFwKKwlpZiBbIC1yICRAIF0gJiYgY21wIC1zICRAICRA
LnRtcDsgdGhlbiAgXAorCSAgICBybSAtZiAkQC50bXA7ICAgICAgICAgICBcCisJZWxzZSAgICAg
ICAgICAgICAgICAgICAgXAorCSAgICAkKGtlY2hvKSAnICBVUEQgICAgICRAJzsgICAgXAorCSAg
ICBtdiAtZiAkQC50bXAgJEA7ICAgICAgICBcCisJZmkKK2VuZGVmCisKKyMgRXhlY3V0ZSBjb21t
YW5kIGlmIGNvbW1hbmQgaGFzIGNoYW5nZWQgb3IgcHJlcmVxdWlzaXRlKHMpIGFyZSB1cGRhdGVk
LgoraWZfY2hhbmdlZCA9ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSks
CQlcCisJJChjbWQpO1wKKwlwcmludGYgJyVzXG4nICdjbWRfJEAgOj0gJChtYWtlLWNtZCknID4g
JChkb3QtdGFyZ2V0KS5jbWQsIEA6KQorCisjIExFWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3F1
aWV0X2NtZF9mbGV4ID0gTEVYICRACitjbWRfZmxleCA9ICQoTEVYKSAtbyRAIC1MICQ8CisKKyQo
b2JqKS8lLmxleC5jOiAkKHNyYykvJS5sIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZmxleCkK
KworIyBZQUNDCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcXVpZXRfY21kX2Jpc29uID0gWUFDQyAg
ICAkQAorY21kX2Jpc29uID0gJChZQUNDKSAtbyRAIC10IC1sICQ8CisKKyQob2JqKS8lLnRhYi5j
OiAkKHNyYykvJS55IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsYmlzb24pCisKK3F1aWV0X2Nt
ZF9iaXNvbl9oID0gWUFDQyAgICAkQAorY21kX2Jpc29uX2ggPSAkKFlBQ0MpIC1vL2Rldi9udWxs
IC0tZGVmaW5lcz0kQCAtdCAtbCAkPAorCiskKG9iaikvJS50YWIuaDogJChzcmMpLyUueSBGT1JD
RQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uX2gpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwgYi9z
dXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJv
bS1rZXJuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNzlmOAotLS0g
L2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMy1pbmNsdWRlLW1h
a2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbApAQCAtMCwwICsxLDEwMiBAQAorZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyCitpbmRleCA0MWM1Y2UxLi4wZmRiZTlhIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgorKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5icgorQEAgLTQsNiArNCw3IEBAIHRvcF9idWlsZGRpcj0uLi8uLi8KKyBzcmN0cmVlIDo9IC4K
KyBvYmogPz0gLgorIAorK2luY2x1ZGUgTWFrZWZpbGUucnVsZXMKKyBpbmNsdWRlIE1ha2VmaWxl
CisgI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oCisgLWluY2x1ZGUgJChv
YmopLy5kZXBlbmQKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1
bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcworbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLjc4YTljODEKKy0tLSAvZGV2L251bGwKKysrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUucnVsZXMKK0BAIC0wLDAgKzEsODQgQEAKKytrZWNobyA6
PSBlY2hvCisrY29tbWEgOj0gLAorKworKworK2RvdC10YXJnZXQgPSAkKGRpciAkQCkuJChub3Rk
aXIgJEApCisrCisrYW55LXByZXJlcSA9ICQoZmlsdGVyLW91dCAkKFBIT05ZKSwkPykgJChmaWx0
ZXItb3V0ICQoUEhPTlkpICQod2lsZGNhcmQgJF4pLCReKQorKworK2FyZy1jaGVjayA9ICQoaWYg
JChzdHJpcCAkKGNtZF8kQCkpLCwxKQorKworK21ha2UtY21kID0gJChjYWxsIGVzY3NxLCQoc3Vi
c3QgJChwb3VuZCksJCQocG91bmQpLCQoc3Vic3QgJCQsJCQkJCwkKGNtZF8kKDEpKSkpKQorKwor
KyMgcHJpbnRpbmcgY29tbWFuZHMKKytjbWQgPSBAc2V0IC1lOyAkKGVjaG8tY21kKSAkKGNtZF8k
KDEpKQorKworK2RlcGZpbGUgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5kKQor
K2RlcGZsYWdzID0gLVdwJChjb21tYSktTUQkKGNvbW1hKSQoY2FsbCBkb3QtdGFyZ2V0KQorKwor
K2NtZF9hbmRfZml4ZGVwID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisrCSQoY21kKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKwkkKG9iaikvZml4ZGVwICQoZGVwZmlsZSkgJEAgJyQobWFr
ZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kO1wKKysJcm0gLWYgJChkZXBmaWxlKQorKworK2lm
X2NoYW5nZWRfZGVwID0gJChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwk
KGNtZF9hbmRfZml4ZGVwKSxAOikKKysKKytkZWZpbmUgbXVsdGlfZGVwZW5kCisrJChmb3JlYWNo
IG0sICQobm90ZGlyICQxKSwgXAorKyAgICAkKGV2YWwgJChvYmopLyRtOiBcCisrICAgICQoYWRk
cHJlZml4ICQob2JqKS8sICQoZm9yZWFjaCBzLCAkMywgJCgkKG06JSQoc3RyaXAgJDIpPSUkKHMp
KSkpKSkpCisrZW5kZWYKKysKKysjIyMKKysjIGZpbGVjaGsgaXMgdXNlZCB0byBjaGVjayBpZiB0
aGUgY29udGVudCBvZiBhIGdlbmVyYXRlZCBmaWxlIGlzIHVwZGF0ZWQuCisrIyBTYW1wbGUgdXNh
Z2U6CisrIworKyMgZmlsZWNoa19zYW1wbGUgPSBlY2hvICQoS0VSTkVMUkVMRUFTRSkKKysjIHZl
cnNpb24uaDogRk9SQ0UKKysjICAgJChjYWxsIGZpbGVjaGssc2FtcGxlKQorKyMKKysjIFRoZSBy
dWxlIGRlZmluZWQgc2hhbGwgd3JpdGUgdG8gc3Rkb3V0IHRoZSBjb250ZW50IG9mIHRoZSBuZXcg
ZmlsZS4KKysjIFRoZSBleGlzdGluZyBmaWxlIHdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgbmV3
IG9uZS4KKysjIC0gSWYgbm8gZmlsZSBleGlzdCBpdCBpcyBjcmVhdGVkCisrIyAtIElmIHRoZSBj
b250ZW50IGRpZmZlciB0aGUgbmV3IGZpbGUgaXMgdXNlZAorKyMgLSBJZiB0aGV5IGFyZSBlcXVh
bCBubyBjaGFuZ2UsIGFuZCBubyB0aW1lc3RhbXAgdXBkYXRlCisrIyAtIHN0ZGluIGlzIHBpcGVk
IGluIGZyb20gdGhlIGZpcnN0IHByZXJlcXVpc2l0ZSAoJDwpIHNvIG9uZSBoYXMKKysjICAgdG8g
c3BlY2lmeSBhIHZhbGlkIGZpbGUgYXMgZmlyc3QgcHJlcmVxdWlzaXRlIChvZnRlbiB0aGUga2J1
aWxkIGZpbGUpCisrZGVmaW5lIGZpbGVjaGsKKysJJChRKXNldCAtZTsgICAgICAgICAgICAgXAor
Kwlta2RpciAtcCAkKGRpciAkQCk7ICAgICAgICAgXAorKwl7ICQoZmlsZWNoa18kKDEpKTsgfSA+
ICRALnRtcDsgICAgICBcCisrCWlmIFsgLXIgJEAgXSAmJiBjbXAgLXMgJEAgJEAudG1wOyB0aGVu
ICBcCisrCSAgICBybSAtZiAkQC50bXA7ICAgICAgICAgICBcCisrCWVsc2UgICAgICAgICAgICAg
ICAgICAgIFwKKysJICAgICQoa2VjaG8pICcgIFVQRCAgICAgJEAnOyAgICBcCisrCSAgICBtdiAt
ZiAkQC50bXAgJEA7ICAgICAgICBcCisrCWZpCisrZW5kZWYKKysKKysjIEV4ZWN1dGUgY29tbWFu
ZCBpZiBjb21tYW5kIGhhcyBjaGFuZ2VkIG9yIHByZXJlcXVpc2l0ZShzKSBhcmUgdXBkYXRlZC4K
KytpZl9jaGFuZ2VkID0gJChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwJ
CVwKKysJJChjbWQpO1wKKysJcHJpbnRmICclc1xuJyAnY21kXyRAIDo9ICQobWFrZS1jbWQpJyA+
ICQoZG90LXRhcmdldCkuY21kLCBAOikKKysKKysjIExFWAorKyMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisrcXVpZXRfY21kX2ZsZXggPSBMRVggJEAKKytjbWRfZmxleCA9ICQoTEVYKSAtbyRAIC1MICQ8
CisrCisrJChvYmopLyUubGV4LmM6ICQoc3JjKS8lLmwgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5n
ZWQsZmxleCkKKysKKysjIFlBQ0MKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK3F1aWV0X2NtZF9i
aXNvbiA9IFlBQ0MgICAgJEAKKytjbWRfYmlzb24gPSAkKFlBQ0MpIC1vJEAgLXQgLWwgJDwKKysK
KyskKG9iaikvJS50YWIuYzogJChzcmMpLyUueSBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZCxi
aXNvbikKKysKKytxdWlldF9jbWRfYmlzb25faCA9IFlBQ0MgICAgJEAKKytjbWRfYmlzb25faCA9
ICQoWUFDQykgLW8vZGV2L251bGwgLS1kZWZpbmVzPSRAIC10IC1sICQ8CisrCisrJChvYmopLyUu
dGFiLmg6ICQoc3JjKS8lLnkgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWQsYmlzb25faCkKLS0g
CjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:23:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:23:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOM-0000W6-Ip; Mon, 09 Sep 2019 17:23:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOL-0000Vs-7p
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:23:53 +0000
X-Inumbo-ID: 94b500b2-d326-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 94b500b2-d326-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 17:23:47 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8981DF2028;
 Mon,  9 Sep 2019 19:23:46 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id VjDkQGs2EeMd; Mon,  9 Sep 2019 19:23:46 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 60287F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:44 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:42 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:41 +0200
Message-ID: <20190909172300.21502-5-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 04/23] Kconfig: Importing existing
 Makefile.br
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciAgICAgICAgICAgICAgICAg
ICB8IDUzICsrKysrKysrKysrKysrKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMv
MDItaW1wb3J0LW1ha2VmaWxlLmJyIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmls
ZXMgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L01ha2VmaWxlLmJyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5icgoKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzVjZTEKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCkBAIC0wLDAgKzEsNTMg
QEAKK3NyYyA6PSAuCit0b3Bfc3JjZGlyPS4uLy4uLwordG9wX2J1aWxkZGlyPS4uLy4uLworc3Jj
dHJlZSA6PSAuCitvYmogPz0gLgorCitpbmNsdWRlIE1ha2VmaWxlCisjSE9TVENGTEFHUys9LURp
bmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKKy1pbmNsdWRlICQob2JqKS8uZGVwZW5kCiskKG9iaikv
LmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQorCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoKKworX19ob3N0
cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQoraG9zdC1jc2lu
Z2xlIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0p
KSkKK2hvc3QtY211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwKKyAgICAgICAg
ICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkKK2hvc3Qt
Y3h4bXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXAorICAgICAgICAgICAkKGlm
ICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQoraG9zdC1jb2JqcyA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KCQobSktb2JqcykpKSkKK2hvc3QtY3h4b2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29y
dCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktY3h4b2JqcykpKSkKKworSE9TVF9F
WFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgorCiskKGhvc3QtY3NpbmdsZSk6
ICU6ICUuYworCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChI
T1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKKworJChob3N0LWNtdWx0aSk6ICU6ICQoaG9z
dC1jb2JqcykgJChob3N0LWNzaGxpYikKKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAk
KEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYp
LW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorCiskKGhvc3QtY3h4
bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQor
CSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZM
QUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpz
KSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKworJChvYmopLyUubzogJS5j
CisJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxB
R1NfJChARikpIC1jICQ8IC1vICRACisKKyQob2JqKS8lLm86ICQob2JqKS8lLmMKKwkkKEhPU1RD
QykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkg
LWMgJDwgLW8gJEAKKworJChvYmopLyUubzogJS5jYworCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFD
RkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRACisK
KyQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZAorCSQoUSljYXQgJDwgPiAkQAorCitjbGVhbjoK
KwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKK2Rpc3RjbGVh
bjogY2xlYW4KKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGx4ZGlhbG9nKSAkKGNv
bmYtb2JqcykgJChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpzKSBcCisJCSQoaG9zdHByb2dz
LXkpICQocWNvbmYtY3h4b2JqcykgJChxY29uZi1vYmpzKSAkKGdjb25mLW9ianMpIFwKKwkJbWNv
bmYgLmRlcGVuZCkKKworRk9SQ0U6CisuUEhPTlk6IEZPUkNFIGNsZWFuIGRpc3RjbGVhbgpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5i
ciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnIKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlMGJhOQotLS0gL2Rldi9udWxsCisr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnIKQEAg
LTAsMCArMSw1OSBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUu
YnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCituZXcgZmlsZSBtb2RlIDEwMDY0
NAoraW5kZXggMDAwMDAwMC4uNDFjNWNlMQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgorQEAgLTAsMCArMSw1MyBAQAorK3NyYyA6PSAuCisrdG9w
X3NyY2Rpcj0uLi8uLi8KKyt0b3BfYnVpbGRkaXI9Li4vLi4vCisrc3JjdHJlZSA6PSAuCisrb2Jq
ID89IC4KKysKKytpbmNsdWRlIE1ha2VmaWxlCisrI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1p
bmNsdWRlIGZvby5oCisrLWluY2x1ZGUgJChvYmopLy5kZXBlbmQKKyskKG9iaikvLmRlcGVuZDog
JCh3aWxkY2FyZCAqLmggKi5jKQorKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhP
U1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAyPi9kZXYvbnVsbCB8fCA6CisrCisrX19ob3N0cHJvZ3Mg
Oj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQorK2hvc3QtY3NpbmdsZSA6
PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQoJChtKS1vYmpzKSwsJChtKSkpCisr
aG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXAorKyAgICAgICAgICAg
JChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkKKytob3N0LWN4
eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwKKysgICAgICAgICAgICQoaWYg
JCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQobSktb2JqcyksKSkpCisraG9zdC1jb2JqcyA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KCQobSktb2JqcykpKSkKKytob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNv
cnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLWN4eG9ianMpKSkpCisrCisrSE9T
VF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgorKworKyQoaG9zdC1jc2lu
Z2xlKTogJTogJS5jCisrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFH
UykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKKysKKyskKGhvc3QtY211bHRpKTog
JTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQorKwkkKEhPU1RDQykgJChIT1NUX0VYVFJB
Q0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmop
LywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorKwor
KyQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9z
dC1jc2hsaWIpCisrCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1Mp
ICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgk
KEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKysKKysk
KG9iaikvJS5vOiAlLmMKKysJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZM
QUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACisrCisrJChvYmopLyUubzogJChv
YmopLyUuYworKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQo
SE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKysKKyskKG9iaikvJS5vOiAlLmNjCisrCSQo
SE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1Nf
JChARikpIC1jICQ8IC1vICRACisrCisrJChvYmopLyU6OiAkKHNyYykvJV9zaGlwcGVkCisrCSQo
USljYXQgJDwgPiAkQAorKworK2NsZWFuOgorKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmop
LywkKGNsZWFuLWZpbGVzKSkKKytkaXN0Y2xlYW46IGNsZWFuCisrCSQoUSlybSAtZiAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQobHhkaWFsb2cpICQoY29uZi1vYmpzKSAkKG1jb25mLW9ianMpICQoa3hn
ZXR0ZXh0LW9ianMpIFwKKysJCSQoaG9zdHByb2dzLXkpICQocWNvbmYtY3h4b2JqcykgJChxY29u
Zi1vYmpzKSAkKGdjb25mLW9ianMpIFwKKysJCW1jb25mIC5kZXBlbmQpCisrCisrRk9SQ0U6Cisr
LlBIT05ZOiBGT1JDRSBjbGVhbiBkaXN0Y2xlYW4KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:23:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:23:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOP-0000Wl-KL; Mon, 09 Sep 2019 17:23:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NON-0000WU-KI
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:23:55 +0000
X-Inumbo-ID: 97214a04-d326-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 97214a04-d326-11e9-b76c-bc764e2007e4;
 Mon, 09 Sep 2019 17:23:51 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B0C6AF2028;
 Mon,  9 Sep 2019 19:23:50 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id TKAM0zvkM-KS; Mon,  9 Sep 2019 19:23:50 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 8191EF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:48 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:42 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:43 +0200
Message-ID: <20190909172300.21502-7-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 06/23] kconfig: Removing the generic
 rule
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGdlbmVyaWMgcnVsZSB0byBidWlsZCBjIGFuZCBjYyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCB0
byBidWlsZCB0aGUKa2NvbmZpZyB0b29scy4gSXQgdXNlcyBmaXhkZXAgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBjb25maWcgdG9vbCBoYXMgdG8gYmUKYnVpbHQgYW5kIGV4ZWN1dGUgdGhlIGJ1aWxkIGNv
bW1hbmQgYXMgbmVjZXNzYXJ5LgoKU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hh
cmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5iciAgICAgICAgICAgICAgICAgICAgfCAxMiAtLS0tLS0tLS0tCiBzdXBwb3J0L2tjb25maWcu
bmV3L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZSB8IDI2ICsrKysrKysrKysrKysrKysr
KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92
ZS1nZW5lcmljLXJ1bGUKCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgppbmRleCAwZmRiZTlhLi5jMTFm
Mjk3IDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTMxLDE4ICszMSw2IEBAICQoaG9zdC1j
bXVsdGkpOiAlOiAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCiAkKGhvc3QtY3h4bXVsdGkp
OiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQogCSQoSE9T
VENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRA
KSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChI
T1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKIAotJChvYmopLyUubzogJS5jCi0JJChI
T1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChA
RikpIC1jICQ8IC1vICRACi0KLSQob2JqKS8lLm86ICQob2JqKS8lLmMKLQkkKEhPU1RDQykgJChI
T1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwg
LW8gJEAKLQotJChvYmopLyUubzogJS5jYwotCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1Mp
ICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRACi0KLSQob2Jq
KS8lOjogJChzcmMpLyVfc2hpcHBlZAotCSQoUSljYXQgJDwgPiAkQAotCiBjbGVhbjoKIAkkKFEp
cm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKIGRpc3RjbGVhbjogY2xl
YW4KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2Vu
ZXJpYy1ydWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmlj
LXJ1bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMGNiMQotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJp
Yy1ydWxlCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgoraW5kZXggMGZk
YmU5YS4uYzExZjI5NyAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUu
YnIKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK0BAIC0zMSwxOCArMzEs
NiBAQCAkKGhvc3QtY211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQorICQo
aG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1j
c2hsaWIpCisgCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQo
SE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBG
KS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKyAKKy0kKG9i
aikvJS5vOiAlLmMKKy0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdT
KSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACistCistJChvYmopLyUubzogJChvYmop
LyUuYworLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9T
VENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKy0KKy0kKG9iaikvJS5vOiAlLmNjCistCSQoSE9T
VENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChA
RikpIC1jICQ8IC1vICRACistCistJChvYmopLyU6OiAkKHNyYykvJV9zaGlwcGVkCistCSQoUSlj
YXQgJDwgPiAkQAorLQorIGNsZWFuOgorIAkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywk
KGNsZWFuLWZpbGVzKSkKKyBkaXN0Y2xlYW46IGNsZWFuCitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZQorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:24:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:24:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOU-0000Xv-N4; Mon, 09 Sep 2019 17:24:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOS-0000XX-KD
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:24:00 +0000
X-Inumbo-ID: 985ea876-d326-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 985ea876-d326-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 17:23:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id BDB91F2027;
 Mon,  9 Sep 2019 19:23:52 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 4W4YkAFYPLGf; Mon,  9 Sep 2019 19:23:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 90D84F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:50 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:42 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:44 +0200
Message-ID: <20190909172300.21502-8-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 07/23] kconfig: Import fixdep from
 Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0IGZpeGRlcCBmcm9tIHRoZSBsaW51eCBrZXJuZWwuClRhZyB2NS4yCgpTaWduZWQtb2Zm
LWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBz
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIHwgICA3ICsKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvZml4ZGVwLmMgICAgfCAzNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogMiBmaWxlcyBjaGFuZ2VkLCAzODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgpp
bmRleCBjMTFmMjk3Li41OGU2ZTc1IDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTE5LDYg
KzE5LDcgQEAgaG9zdC1jeHhtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCiAg
ICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQobSktb2JqcyksKSkp
CiBob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQo
X19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQogaG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4
ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1jeHhvYmpz
KSkpKQorZml4ZGVwLW9ianMgOj0gJChvYmopL2ZpeGRlcC5vCiAKIEhPU1RfRVhUUkFDRkxBR1Mg
Kz0gLUkkKG9iaikgLURDT05GSUdfPVwiXCIKIApAQCAtMzEsNiArMzIsMTIgQEAgJChob3N0LWNt
dWx0aSk6ICU6ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikKICQoaG9zdC1jeHhtdWx0aSk6
ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCiAJJChIT1NU
Q1hYKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEAp
ICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhP
U1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAogCiskKG9iaikvZml4ZGVwOiAkKGZpeGRl
cC1vYmpzKQorCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChI
T1NUQ0ZMQUdTXyQoQEYpKSAkPCAtbyAkQAorCiskKGZpeGRlcC1vYmpzKTogJChzcmMpL2ZpeGRl
cC5jCisJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RD
RkxBR1NfJChARikpIC1jICQ8IC1vICRACisKIGNsZWFuOgogCSQoUSlybSAtZiAkKGFkZHByZWZp
eCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQogZGlzdGNsZWFuOiBjbGVhbgpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVw
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjYmQ2MAotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKQEAgLTAsMCArMSwzNzkgQEAK
Ky8qCisgKiAiT3B0aW1pemUiIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYXMgc3BpdCBvdXQgYnkg
Z2NjIC1NRAorICogZm9yIHRoZSBrZXJuZWwgYnVpbGQKKyAqID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
ICoKKyAqIEF1dGhvciAgICAgICBLYWkgR2VybWFzY2hld3NraQorICogQ29weXJpZ2h0ICAgIDIw
MDIgYnkgS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+CisgKgor
ICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRv
IHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBv
cmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKgorICogSW50cm9kdWN0aW9uOgorICoK
KyAqIGdjYyBwcm9kdWNlcyBhIHZlcnkgbmljZSBhbmQgY29ycmVjdCBsaXN0IG9mIGRlcGVuZGVu
Y2llcyB3aGljaAorICogdGVsbHMgbWFrZSB3aGVuIHRvIHJlbWFrZSBhIGZpbGUuCisgKgorICog
VG8gdXNlIHRoaXMgbGlzdCBhcy1pcyBob3dldmVyIGhhcyB0aGUgZHJhd2JhY2sgdGhhdCB2aXJ0
dWFsbHkKKyAqIGV2ZXJ5IGZpbGUgaW4gdGhlIGtlcm5lbCBpbmNsdWRlcyBhdXRvY29uZi5oLgor
ICoKKyAqIElmIHRoZSB1c2VyIHJlLXJ1bnMgbWFrZSAqY29uZmlnLCBhdXRvY29uZi5oIHdpbGwg
YmUKKyAqIHJlZ2VuZXJhdGVkLiAgbWFrZSBub3RpY2VzIHRoYXQgYW5kIHdpbGwgcmVidWlsZCBl
dmVyeSBmaWxlIHdoaWNoCisgKiBpbmNsdWRlcyBhdXRvY29uZi5oLCBpLmUuIGJhc2ljYWxseSBh
bGwgZmlsZXMuIFRoaXMgaXMgZXh0cmVtZWx5CisgKiBhbm5veWluZyBpZiB0aGUgdXNlciBqdXN0
IGNoYW5nZWQgQ09ORklHX0hJU19EUklWRVIgZnJvbSBuIHRvIG0uCisgKgorICogU28gd2UgcGxh
eSB0aGUgc2FtZSB0cmljayB0aGF0ICJta2RlcCIgcGxheWVkIGJlZm9yZS4gV2UgcmVwbGFjZQor
ICogdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBieSBhIGRlcGVuZGVuY3kgb24gZXZlcnkg
Y29uZmlnCisgKiBvcHRpb24gd2hpY2ggaXMgbWVudGlvbmVkIGluIGFueSBvZiB0aGUgbGlzdGVk
IHByZXJlcXVpc2l0ZXMuCisgKgorICoga2NvbmZpZyBwb3B1bGF0ZXMgYSB0cmVlIGluIGluY2x1
ZGUvY29uZmlnLyB3aXRoIGFuIGVtcHR5IGZpbGUKKyAqIGZvciBlYWNoIGNvbmZpZyBzeW1ib2wg
YW5kIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdXBkYXRlZAorICogdGhlIGZpbGVzIHJlcHJl
c2VudGluZyBjaGFuZ2VkIGNvbmZpZyBvcHRpb25zIGFyZSB0b3VjaGVkCisgKiB3aGljaCB0aGVu
IGxldCBtYWtlIHBpY2sgdXAgdGhlIGNoYW5nZXMgYW5kIHRoZSBmaWxlcyB0aGF0IHVzZQorICog
dGhlIGNvbmZpZyBzeW1ib2xzIGFyZSByZWJ1aWx0LgorICoKKyAqIFNvIGlmIHRoZSB1c2VyIGNo
YW5nZXMgaGlzIENPTkZJR19ISVNfRFJJVkVSIG9wdGlvbiwgb25seSB0aGUgb2JqZWN0cworICog
d2hpY2ggZGVwZW5kIG9uICJpbmNsdWRlL2NvbmZpZy9oaXMvZHJpdmVyLmgiIHdpbGwgYmUgcmVi
dWlsdCwKKyAqIHNvIG1vc3QgbGlrZWx5IG9ubHkgaGlzIGRyaXZlciA7LSkKKyAqCisgKiBUaGUg
aWRlYSBhYm92ZSBkYXRlcywgYnkgdGhlIHdheSwgYmFjayB0byBNaWNoYWVsIEUgQ2hhc3RhaW4s
IEFGQUlLLgorICoKKyAqIFNvIHRvIGdldCBkZXBlbmRlbmNpZXMgcmlnaHQsIHRoZXJlIGFyZSB0
d28gaXNzdWVzOgorICogbyBpZiBhbnkgb2YgdGhlIGZpbGVzIHRoZSBjb21waWxlciByZWFkIGNo
YW5nZWQsIHdlIG5lZWQgdG8gcmVidWlsZAorICogbyBpZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVu
IHRvIHRoZSBjb21waWxlIHRoZSBmaWxlIGNoYW5nZWQsIHdlCisgKiAgIGJldHRlciByZWJ1aWxk
IGFzIHdlbGwuCisgKgorICogVGhlIGZvcm1lciBpcyBoYW5kbGVkIGJ5IHVzaW5nIHRoZSAtTUQg
b3V0cHV0LCB0aGUgbGF0ZXIgYnkgc2F2aW5nCisgKiB0aGUgY29tbWFuZCBsaW5lIHVzZWQgdG8g
Y29tcGlsZSB0aGUgb2xkIG9iamVjdCBhbmQgY29tcGFyaW5nIGl0CisgKiB0byB0aGUgb25lIHdl
IHdvdWxkIG5vdyB1c2UuCisgKgorICogQWdhaW4sIGFsc28gdGhpcyBpZGVhIGlzIHByZXR0eSBv
bGQgYW5kIGhhcyBiZWVuIGRpc2N1c3NlZCBvbgorICoga2J1aWxkLWRldmVsIGEgbG9uZyB0aW1l
IGFnby4gSSBkb24ndCBoYXZlIGEgc2Vuc2libHkgd29ya2luZworICogaW50ZXJuZXQgY29ubmVj
dGlvbiByaWdodCBub3csIHNvIEkgcmF0aGVyIGRvbid0IG1lbnRpb24gbmFtZXMKKyAqIHdpdGhv
dXQgZG91YmxlIGNoZWNraW5nLgorICoKKyAqIFRoaXMgY29kZSBoZXJlIGhhcyBiZWVuIGJhc2Vk
IHBhcnRpYWxseSBiYXNlZCBvbiBta2RlcC5jLCB3aGljaAorICogc2F5cyB0aGUgZm9sbG93aW5n
IGFib3V0IGl0cyBoaXN0b3J5OgorICoKKyAqICAgQ29weXJpZ2h0IGFiYW5kb25lZCwgTWljaGFl
bCBDaGFzdGFpbiwgPG1haWx0bzptZWNAc2hvdXQubmV0Pi4KKyAqICAgVGhpcyBpcyBhIEMgdmVy
c2lvbiBvZiBzeW5jZGVwLnBsIGJ5IFdlcm5lciBBbG1lc2Jlcmdlci4KKyAqCisgKgorICogSXQg
aXMgaW52b2tlZCBhcworICoKKyAqICAgZml4ZGVwIDxkZXBmaWxlPiA8dGFyZ2V0PiA8Y21kbGlu
ZT4KKyAqCisgKiBhbmQgd2lsbCByZWFkIHRoZSBkZXBlbmRlbmN5IGZpbGUgPGRlcGZpbGU+Cisg
KgorICogVGhlIHRyYW5zZm9ybWVkIGRlcGVuZGVuY3kgc25pcHBlZCBpcyB3cml0dGVuIHRvIHN0
ZG91dC4KKyAqCisgKiBJdCBmaXJzdCBnZW5lcmF0ZXMgYSBsaW5lCisgKgorICogICBjbWRfPHRh
cmdldD4gPSA8Y21kbGluZT4KKyAqCisgKiBhbmQgdGhlbiBiYXNpY2FsbHkgY29waWVzIHRoZSAu
PHRhcmdldD4uZCBmaWxlIHRvIHN0ZG91dCwgaW4gdGhlCisgKiBwcm9jZXNzIGZpbHRlcmluZyBv
dXQgdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBhbmQgYWRkaW5nCisgKiBkZXBlbmRlbmNp
ZXMgb24gaW5jbHVkZS9jb25maWcvbXkvb3B0aW9uLmggZm9yIGV2ZXJ5CisgKiBDT05GSUdfTVlf
T1BUSU9OIGVuY291bnRlcmVkIGluIGFueSBvZiB0aGUgcHJlcmVxdWlzaXRlcy4KKyAqCisgKiBJ
dCB3aWxsIGFsc28gZmlsdGVyIG91dCBhbGwgdGhlIGRlcGVuZGVuY2llcyBvbiAqLnZlci4gV2Ug
bmVlZAorICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGdlbmVyYXRlZCB2ZXJzaW9uIGNoZWNrc3Vt
IGFyZSBnbG9iYWxseSB1cAorICogdG8gZGF0ZSBiZWZvcmUgZXZlbiBzdGFydGluZyB0aGUgcmVj
dXJzaXZlIGJ1aWxkLCBzbyBpdCdzIHRvbyBsYXRlCisgKiBhdCB0aGlzIHBvaW50IGFueXdheS4K
KyAqCisgKiBXZSBkb24ndCBldmVuIHRyeSB0byByZWFsbHkgcGFyc2UgdGhlIGhlYWRlciBmaWxl
cywgYnV0CisgKiBtZXJlbHkgZ3JlcCwgaS5lLiBpZiBDT05GSUdfRk9PIGlzIG1lbnRpb25lZCBp
biBhIGNvbW1lbnQsIGl0IHdpbGwKKyAqIGJlIHBpY2tlZCB1cCBhcyB3ZWxsLiBJdCdzIG5vdCBh
IHByb2JsZW0gd2l0aCByZXNwZWN0IHRvCisgKiBjb3JyZWN0bmVzcywgc2luY2UgdGhhdCBjYW4g
b25seSBnaXZlIHRvbyBtYW55IGRlcGVuZGVuY2llcywgdGh1cworICogd2UgY2Fubm90IG1pc3Mg
YSByZWJ1aWxkLiBTaW5jZSBwZW9wbGUgdGVuZCB0byBub3QgbWVudGlvbiB0b3RhbGx5CisgKiB1
bnJlbGF0ZWQgQ09ORklHXyBvcHRpb25zIGFsbCBvdmVyIHRoZSBwbGFjZSwgaXQncyBub3QgYW4K
KyAqIGVmZmljaWVuY3kgcHJvYmxlbSBlaXRoZXIuCisgKgorICogKE5vdGU6IGl0J2QgYmUgZWFz
eSB0byBwb3J0IG92ZXIgdGhlIGNvbXBsZXRlIG1rZGVwIHN0YXRlIG1hY2hpbmUsCisgKiAgYnV0
IEkgZG9uJ3QgdGhpbmsgdGhlIGFkZGVkIGNvbXBsZXhpdHkgaXMgd29ydGggaXQpCisgKi8KKwor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisK
K3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogZml4
ZGVwIDxkZXBmaWxlPiA8dGFyZ2V0PiA8Y21kbGluZT5cbiIpOworCWV4aXQoMSk7Cit9CisKKy8q
CisgKiBQcmludCBvdXQgYSBkZXBlbmRlbmN5IHBhdGggZnJvbSBhIHN5bWJvbCBuYW1lCisgKi8K
K3N0YXRpYyB2b2lkIHByaW50X2RlcChjb25zdCBjaGFyICptLCBpbnQgc2xlbiwgY29uc3QgY2hh
ciAqZGlyKQoreworCWludCBjLCBwcmV2X2MgPSAnLycsIGk7CisKKwlwcmludGYoIiAgICAkKHdp
bGRjYXJkICVzLyIsIGRpcik7CisJZm9yIChpID0gMDsgaSA8IHNsZW47IGkrKykgeworCQljID0g
bVtpXTsKKwkJaWYgKGMgPT0gJ18nKQorCQkJYyA9ICcvJzsKKwkJZWxzZQorCQkJYyA9IHRvbG93
ZXIoYyk7CisJCWlmIChjICE9ICcvJyB8fCBwcmV2X2MgIT0gJy8nKQorCQkJcHV0Y2hhcihjKTsK
KwkJcHJldl9jID0gYzsKKwl9CisJcHJpbnRmKCIuaCkgXFxcbiIpOworfQorCitzdHJ1Y3QgaXRl
bSB7CisJc3RydWN0IGl0ZW0JKm5leHQ7CisJdW5zaWduZWQgaW50CWxlbjsKKwl1bnNpZ25lZCBp
bnQJaGFzaDsKKwljaGFyCQluYW1lWzBdOworfTsKKworI2RlZmluZSBIQVNIU1ogMjU2CitzdGF0
aWMgc3RydWN0IGl0ZW0gKmhhc2h0YWJbSEFTSFNaXTsKKworc3RhdGljIHVuc2lnbmVkIGludCBz
dHJoYXNoKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHN6KQoreworCS8qIGZudjMyIGhh
c2ggKi8KKwl1bnNpZ25lZCBpbnQgaSwgaGFzaCA9IDIxNjYxMzYyNjFVOworCisJZm9yIChpID0g
MDsgaSA8IHN6OyBpKyspCisJCWhhc2ggPSAoaGFzaCBeIHN0cltpXSkgKiAweDAxMDAwMTkzOwor
CXJldHVybiBoYXNoOworfQorCisvKgorICogTG9va3VwIGEgdmFsdWUgaW4gdGhlIGNvbmZpZ3Vy
YXRpb24gc3RyaW5nLgorICovCitzdGF0aWMgaW50IGlzX2RlZmluZWRfY29uZmlnKGNvbnN0IGNo
YXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGludCBoYXNoKQoreworCXN0cnVjdCBpdGVtICph
dXg7CisKKwlmb3IgKGF1eCA9IGhhc2h0YWJbaGFzaCAlIEhBU0hTWl07IGF1eDsgYXV4ID0gYXV4
LT5uZXh0KSB7CisJCWlmIChhdXgtPmhhc2ggPT0gaGFzaCAmJiBhdXgtPmxlbiA9PSBsZW4gJiYK
KwkJICAgIG1lbWNtcChhdXgtPm5hbWUsIG5hbWUsIGxlbikgPT0gMCkKKwkJCXJldHVybiAxOwor
CX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFkZCBhIG5ldyB2YWx1ZSB0byB0aGUgY29uZmln
dXJhdGlvbiBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRlZmluZV9jb25maWcoY29uc3QgY2hh
ciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpCit7CisJc3RydWN0IGl0ZW0gKmF1
eCA9IG1hbGxvYyhzaXplb2YoKmF1eCkgKyBsZW4pOworCisJaWYgKCFhdXgpIHsKKwkJcGVycm9y
KCJmaXhkZXA6bWFsbG9jIik7CisJCWV4aXQoMSk7CisJfQorCW1lbWNweShhdXgtPm5hbWUsIG5h
bWUsIGxlbik7CisJYXV4LT5sZW4gPSBsZW47CisJYXV4LT5oYXNoID0gaGFzaDsKKwlhdXgtPm5l
eHQgPSBoYXNodGFiW2hhc2ggJSBIQVNIU1pdOworCWhhc2h0YWJbaGFzaCAlIEhBU0hTWl0gPSBh
dXg7Cit9CisKKy8qCisgKiBSZWNvcmQgdGhlIHVzZSBvZiBhIENPTkZJR18qIHdvcmQuCisgKi8K
K3N0YXRpYyB2b2lkIHVzZV9jb25maWcoY29uc3QgY2hhciAqbSwgaW50IHNsZW4pCit7CisJdW5z
aWduZWQgaW50IGhhc2ggPSBzdHJoYXNoKG0sIHNsZW4pOworCisJaWYgKGlzX2RlZmluZWRfY29u
ZmlnKG0sIHNsZW4sIGhhc2gpKQorCSAgICByZXR1cm47CisKKwlkZWZpbmVfY29uZmlnKG0sIHNs
ZW4sIGhhc2gpOworCXByaW50X2RlcChtLCBzbGVuLCAiaW5jbHVkZS9jb25maWciKTsKK30KKwor
LyogdGVzdCBpZiBzIGVuZHMgaW4gc3ViICovCitzdGF0aWMgaW50IHN0cl9lbmRzX3dpdGgoY29u
c3QgY2hhciAqcywgaW50IHNsZW4sIGNvbnN0IGNoYXIgKnN1YikKK3sKKwlpbnQgc3VibGVuID0g
c3RybGVuKHN1Yik7CisKKwlpZiAoc3VibGVuID4gc2xlbikKKwkJcmV0dXJuIDA7CisKKwlyZXR1
cm4gIW1lbWNtcChzICsgc2xlbiAtIHN1Ymxlbiwgc3ViLCBzdWJsZW4pOworfQorCitzdGF0aWMg
dm9pZCBwYXJzZV9jb25maWdfZmlsZShjb25zdCBjaGFyICpwKQoreworCWNvbnN0IGNoYXIgKnEs
ICpyOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gcDsKKworCXdoaWxlICgocCA9IHN0cnN0cihwLCAi
Q09ORklHXyIpKSkgeworCQlpZiAocCA+IHN0YXJ0ICYmIChpc2FsbnVtKHBbLTFdKSB8fCBwWy0x
XSA9PSAnXycpKSB7CisJCQlwICs9IDc7CisJCQljb250aW51ZTsKKwkJfQorCQlwICs9IDc7CisJ
CXEgPSBwOworCQl3aGlsZSAoKnEgJiYgKGlzYWxudW0oKnEpIHx8ICpxID09ICdfJykpCisJCQlx
Kys7CisJCWlmIChzdHJfZW5kc193aXRoKHAsIHEgLSBwLCAiX01PRFVMRSIpKQorCQkJciA9IHEg
LSA3OworCQllbHNlCisJCQlyID0gcTsKKwkJaWYgKHIgPiBwKQorCQkJdXNlX2NvbmZpZyhwLCBy
IC0gcCk7CisJCXAgPSBxOworCX0KK30KKworc3RhdGljIHZvaWQgKnJlYWRfZmlsZShjb25zdCBj
aGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZmQ7CisJY2hhciAqYnVm
OworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlm
cHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3Igb3BlbmluZyBmaWxlOiAiKTsKKwkJcGVycm9y
KGZpbGVuYW1lKTsKKwkJZXhpdCgyKTsKKwl9CisJaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgewor
CQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3IgZnN0YXQnaW5nIGZpbGU6ICIpOworCQlw
ZXJyb3IoZmlsZW5hbWUpOworCQlleGl0KDIpOworCX0KKwlidWYgPSBtYWxsb2Moc3Quc3Rfc2l6
ZSArIDEpOworCWlmICghYnVmKSB7CisJCXBlcnJvcigiZml4ZGVwOiBtYWxsb2MiKTsKKwkJZXhp
dCgyKTsKKwl9CisJaWYgKHJlYWQoZmQsIGJ1Ziwgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSkg
eworCQlwZXJyb3IoImZpeGRlcDogcmVhZCIpOworCQlleGl0KDIpOworCX0KKwlidWZbc3Quc3Rf
c2l6ZV0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiBidWY7Cit9CisKKy8qIElnbm9y
ZSBjZXJ0YWluIGRlcGVuZGVuY2llcyAqLworc3RhdGljIGludCBpc19pZ25vcmVkX2ZpbGUoY29u
c3QgY2hhciAqcywgaW50IGxlbikKK3sKKwlyZXR1cm4gc3RyX2VuZHNfd2l0aChzLCBsZW4sICJp
bmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIikgfHwKKwkgICAgICAgc3RyX2VuZHNfd2l0aChz
LCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5bXMuaCIpIHx8CisJICAgICAgIHN0cl9l
bmRzX3dpdGgocywgbGVuLCAiLnZlciIpOworfQorCisvKgorICogSW1wb3J0YW50OiBUaGUgYmVs
b3cgZ2VuZXJhdGVkIHNvdXJjZV9mb28ubyBhbmQgZGVwc19mb28ubyB2YXJpYWJsZQorICogYXNz
aWdubWVudHMgYXJlIHBhcnNlZCBub3Qgb25seSBieSBtYWtlLCBidXQgYWxzbyBieSB0aGUgcmF0
aGVyIHNpbXBsZQorICogcGFyc2VyIGluIHNjcmlwdHMvbW9kL3N1bXZlcnNpb24uYy4KKyAqLwor
c3RhdGljIHZvaWQgcGFyc2VfZGVwX2ZpbGUoY2hhciAqbSwgY29uc3QgY2hhciAqdGFyZ2V0KQor
eworCWNoYXIgKnA7CisJaW50IGlzX2xhc3QsIGlzX3RhcmdldDsKKwlpbnQgc2F3X2FueV90YXJn
ZXQgPSAwOworCWludCBpc19maXJzdF9kZXAgPSAwOworCXZvaWQgKmJ1ZjsKKworCXdoaWxlICgx
KSB7CisJCS8qIFNraXAgYW55ICJ3aGl0ZSBzcGFjZSIgKi8KKwkJd2hpbGUgKCptID09ICcgJyB8
fCAqbSA9PSAnXFwnIHx8ICptID09ICdcbicpCisJCQltKys7CisKKwkJaWYgKCEqbSkKKwkJCWJy
ZWFrOworCisJCS8qIEZpbmQgbmV4dCAid2hpdGUgc3BhY2UiICovCisJCXAgPSBtOworCQl3aGls
ZSAoKnAgJiYgKnAgIT0gJyAnICYmICpwICE9ICdcXCcgJiYgKnAgIT0gJ1xuJykKKwkJCXArKzsK
KwkJaXNfbGFzdCA9ICgqcCA9PSAnXDAnKTsKKwkJLyogSXMgdGhlIHRva2VuIHdlIGZvdW5kIGEg
dGFyZ2V0IG5hbWU/ICovCisJCWlzX3RhcmdldCA9ICgqKHAtMSkgPT0gJzonKTsKKwkJLyogRG9u
J3Qgd3JpdGUgYW55IHRhcmdldCBuYW1lcyBpbnRvIHRoZSBkZXBlbmRlbmN5IGZpbGUgKi8KKwkJ
aWYgKGlzX3RhcmdldCkgeworCQkJLyogVGhlIC9uZXh0LyBmaWxlIGlzIHRoZSBmaXJzdCBkZXBl
bmRlbmN5ICovCisJCQlpc19maXJzdF9kZXAgPSAxOworCQl9IGVsc2UgaWYgKCFpc19pZ25vcmVk
X2ZpbGUobSwgcCAtIG0pKSB7CisJCQkqcCA9ICdcMCc7CisKKwkJCS8qCisJCQkgKiBEbyBub3Qg
bGlzdCB0aGUgc291cmNlIGZpbGUgYXMgZGVwZW5kZW5jeSwgc28gdGhhdAorCQkJICoga2J1aWxk
IGlzIG5vdCBjb25mdXNlZCBpZiBhIC5jIGZpbGUgaXMgcmV3cml0dGVuCisJCQkgKiBpbnRvIC5T
IG9yIHZpY2UgdmVyc2EuIFN0b3JpbmcgaXQgaW4gc291cmNlXyogaXMKKwkJCSAqIG5lZWRlZCBm
b3IgbW9kcG9zdCB0byBjb21wdXRlIHNyY3ZlcnNpb25zLgorCQkJICovCisJCQlpZiAoaXNfZmly
c3RfZGVwKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBwcm9jZXNzaW5nIHRoZSBjb25jYXRlbmF0aW9u
IG9mIG11bHRpcGxlCisJCQkJICogZGVwZW5kZW5jeSBmaWxlcywgb25seSBwcm9jZXNzIHRoZSBm
aXJzdAorCQkJCSAqIHRhcmdldCBuYW1lLCB3aGljaCB3aWxsIGJlIHRoZSBvcmlnaW5hbAorCQkJ
CSAqIHNvdXJjZSBuYW1lLCBhbmQgaWdub3JlIGFueSBvdGhlciB0YXJnZXQKKwkJCQkgKiBuYW1l
cywgd2hpY2ggd2lsbCBiZSBpbnRlcm1lZGlhdGUgdGVtcG9yYXJ5CisJCQkJICogZmlsZXMuCisJ
CQkJICovCisJCQkJaWYgKCFzYXdfYW55X3RhcmdldCkgeworCQkJCQlzYXdfYW55X3RhcmdldCA9
IDE7CisJCQkJCXByaW50Zigic291cmNlXyVzIDo9ICVzXG5cbiIsCisJCQkJCSAgICAgICB0YXJn
ZXQsIG0pOworCQkJCQlwcmludGYoImRlcHNfJXMgOj0gXFxcbiIsIHRhcmdldCk7CisJCQkJfQor
CQkJCWlzX2ZpcnN0X2RlcCA9IDA7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZigiICAlcyBcXFxu
IiwgbSk7CisJCQl9CisKKwkJCWJ1ZiA9IHJlYWRfZmlsZShtKTsKKwkJCXBhcnNlX2NvbmZpZ19m
aWxlKGJ1Zik7CisJCQlmcmVlKGJ1Zik7CisJCX0KKworCQlpZiAoaXNfbGFzdCkKKwkJCWJyZWFr
OworCisJCS8qCisJCSAqIFN0YXJ0IHNlYXJjaGluZyBmb3IgbmV4dCB0b2tlbiBpbW1lZGlhdGVs
eSBhZnRlciB0aGUgZmlyc3QKKwkJICogIndoaXRlc3BhY2UiIGNoYXJhY3RlciB0aGF0IGZvbGxv
d3MgdGhpcyB0b2tlbi4KKwkJICovCisJCW0gPSBwICsgMTsKKwl9CisKKwlpZiAoIXNhd19hbnlf
dGFyZ2V0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiZml4ZGVwOiBwYXJzZSBlcnJvcjsgbm8gdGFy
Z2V0cyBmb3VuZFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJcHJpbnRmKCJcbiVzOiAkKGRlcHNf
JXMpXG5cbiIsIHRhcmdldCwgdGFyZ2V0KTsKKwlwcmludGYoIiQoZGVwc18lcyk6XG4iLCB0YXJn
ZXQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNo
YXIgKmRlcGZpbGUsICp0YXJnZXQsICpjbWRsaW5lOworCXZvaWQgKmJ1ZjsKKworCWlmIChhcmdj
ICE9IDQpCisJCXVzYWdlKCk7CisKKwlkZXBmaWxlID0gYXJndlsxXTsKKwl0YXJnZXQgPSBhcmd2
WzJdOworCWNtZGxpbmUgPSBhcmd2WzNdOworCisJcHJpbnRmKCJjbWRfJXMgOj0gJXNcblxuIiwg
dGFyZ2V0LCBjbWRsaW5lKTsKKworCWJ1ZiA9IHJlYWRfZmlsZShkZXBmaWxlKTsKKwlwYXJzZV9k
ZXBfZmlsZShidWYsIHRhcmdldCk7CisJZnJlZShidWYpOworCisJcmV0dXJuIDA7Cit9Ci0tIAoy
LjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:24:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:24:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOW-0000YY-Ra; Mon, 09 Sep 2019 17:24:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOV-0000YG-A3
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:24:03 +0000
X-Inumbo-ID: 9c1f254e-d326-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9c1f254e-d326-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 17:24:00 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 08834F2028;
 Mon,  9 Sep 2019 19:23:59 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 1LByDRyr79mM; Mon,  9 Sep 2019 19:23:58 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D80B6F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:56 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:41 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:39 +0200
Message-ID: <20190909172300.21502-3-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 02/23] kconfig: Introduce
 README.unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQgfCAyMSArKysrKysr
KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQKCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdCBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvUkVBRE1FLnVuaWtyYWZ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmRlMzdmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51
bmlrcmFmdApAQCAtMCwwICsxLDIxIEBACitUaGlzIGlzIGEgY29weSBvZiB0aGUga2NvbmZpZyBj
b2RlIGluIHRoZSBrZXJuZWwgKGN1cnJlbnRseSB2NS4yKSB0d2Vha2VkCit0byBzdWl0IFVuaWty
YWZ0LgorCitUbyB1cGRhdGUgKGZyb20gbGludXgpOgorCWNwIC1yIC91c3Ivc3JjL2xpbnV4L3Nj
cmlwdHMva2NvbmZpZyBzdXBwb3J0L2tjb25maWcubmV3CisJY2Qgc3VwcG9ydC9rY29uZmlnLm5l
dworCWNwIC1hIC4uL2tjb25maWcvcGF0Y2hlcyAuLi9rY29uZmlnL1JFQURNRS51bmlrcmFmdCAu
Li9rY29uZmlnLy5naXRpZ25vcmUgLgorCXF1aWx0IHB1c2ggLWEKKwkjIEZpeCBhbnkgY29uZmxp
Y3QKKwljZCAuLgorCXJtIC1yZiBrY29uZmlnCisJbXYga2NvbmZpZy5uZXcga2NvbmZpZworCitU
aGVuIHZlcmlmeSB0aGUgdG9wbGV2ZWwgdGFyZ2V0cyB3b3JrOgorCWNvbmZpZworCWRlZmNvbmZp
ZworCW1lbnVjb25maWcKKwl4Y29uZmlnCisJZ2NvbmZpZworCW9sZGNvbmZpZworCXFjb25maWcK
LS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 17:24:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 17:24:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NOY-0000Z6-2i; Mon, 09 Sep 2019 17:24:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOX-0000Yw-Jd
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:24:05 +0000
X-Inumbo-ID: 99922dc6-d326-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 99922dc6-d326-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 17:23:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C87E8F2028;
 Mon,  9 Sep 2019 19:23:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id fwXE3rXI6yvc; Mon,  9 Sep 2019 19:23:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id A09C5F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:52 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:42 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:45 +0200
Message-ID: <20190909172300.21502-9-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 08/23] build: Add Unikraft specific
 fixdep header
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SWdub3JlIGF1dG8gZ2VuZXJhdGVkIHVrL19jb25maWcuaC4KClNpZ25lZC1vZmYtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIHN1cHBvcnQva2Nv
bmZpZy5uZXcvZml4ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHN1
cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlciB8
IDEyICsrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFm
dC1maXhkZXAtaGVhZGVyCgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAu
YyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKaW5kZXggZmFjYmQ2MC4uOTdhZmI3MCAx
MDA2NDQKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYworKysgYi9zdXBwb3J0L2tj
b25maWcubmV3L2ZpeGRlcC5jCkBAIC0yNjksNiArMjY5LDcgQEAgc3RhdGljIGludCBpc19pZ25v
cmVkX2ZpbGUoY29uc3QgY2hhciAqcywgaW50IGxlbikKIHsKIAlyZXR1cm4gc3RyX2VuZHNfd2l0
aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIikgfHwKIAkgICAgICAgc3Ry
X2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5bXMuaCIpIHx8CisJ
ICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiYnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgi
KSB8fAogCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgIi52ZXIiKTsKIH0KIApkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhkZXAt
aGVhZGVyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhk
ZXAtaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmM4YWUKLS0t
IC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWty
YWZ0LWZpeGRlcC1oZWFkZXIKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZml4ZGVwLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jCitpbmRl
eCBmYWNiZDYwLi45N2FmYjcwIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhk
ZXAuYworKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYworQEAgLTI2OSw2ICsyNjks
NyBAQCBzdGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBjaGFyICpzLCBpbnQgbGVuKQor
IHsKKyAJcmV0dXJuIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0
b2NvbmYuaCIpIHx8CisgCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1ZGUvZ2Vu
ZXJhdGVkL2F1dG9rc3ltcy5oIikgfHwKKysJICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVuLCAi
YnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fAorIAkgICAgICAgc3RyX2VuZHNfd2l0aChz
LCBsZW4sICIudmVyIik7CisgfQorIAotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NxK-00034C-Ru; Mon, 09 Sep 2019 18:00:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NxK-0002uS-3f
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:02 +0000
X-Inumbo-ID: a3477362-d32b-11e9-ac12-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a3477362-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 17:59:59 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 7863810568F;
 Mon,  9 Sep 2019 19:59:58 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id qr6tPljRnKMm; Mon,  9 Sep 2019 19:59:58 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 437271047B8
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:59:58 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:59:57 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:16 +0200
Message-ID: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 00/23] Upgrade Unikraft's
 configuration system
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXBncmFkZSB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gdXNlZCB3aXRoaW4gVW5pa3JhZnQu
IFdlIGludHJvZHVjZSB0aGUgZm9sbG93aW5nCmNoYW5nZXMgYXMgYSBwYXJ0IG9mIHRoZSB1cGdy
YWRlLgoKLSBVc2UgdGhlIGxhdGVzdCBLY29uZmlnWzFdIGNoYW5nZSBmcm9tIHRoZSBsaW51eCBr
ZXJuZWwgdjUuMgotIEludHJvZHVjZSB3aWxkY2FyZCBvcGVyYXRpb24gaW4gdGhlIGtjb25maWcg
YnVpbGQgc3lzdGVtCi0gQWRkIHN1cHBvcnQgZm9yIHRoZSBrY29uZmlnbGliWzJdLCBhIHB5dGhv
biBiYXNlZCB0b29sIHRvIHBlcmZvcm0ga2NvbmZpZy4KLSBUaGUgcHl0aG9uIG1lbnVjb25maWcK
LSBQcmVwcm9jZXNzIENvbmZpZy51ayB0byBkZXRlcm1pbmUgdGhlIGxpYnJhcmllcyB0byBiZSBj
b25maWd1cmVkCi0gUHJlcHJvY2VzcyBDb25maWcudWsgdG8gZGV0ZXJtaW5lIHRoZSBwbGF0Zm9y
bSB0byBiZSBjb25maWd1cmVkLgotIFByZXByb2Nlc3MgQ29uZmlnLnVrIHRvIGRldGVybWluZSB0
aGUgaG9zdCBhcmNoaXRlY3R1cmUuCgpUaGUgcGF0Y2ggc2V0IGFsc28gY2hhbmdlcyB0aGUgY3Vy
cmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgYnVpbGQgZnJvbSB0aGUKVW5pa3JhZnQgc291
cmNlIHRyZWUgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeSBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9u
LgoKUGxlYXNlIGlnbm9yZSB0aGUgdmVyc2lvbiAxIGFzIGxlc3MgdGhhbiBoYWxmIHRoZSBwYXRj
aCBzZXJpZXMgd2VyZW4ndCBzZW50IG91dC4KQXBvbG9naWVzIGZvciB0aGUgaW5jb252ZW5pZW5j
ZSBjYXVzZWQuCgpbMV0gaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3Qva2J1
aWxkL2tjb25maWctbWFjcm8tbGFuZ3VhZ2UuaHRtbApbMl0gaHR0cHM6Ly9sd24ubmV0L0FydGlj
bGVzLzc1MzE5Ni8KClNoYXJhbiBTYW50aGFuYW0gKDIzKToKICBrY29uZmlnOiBJbXBvcnQga2Nv
bmZpZyBmcm9tIExpbnV4IGtlcm5lbAogIGtjb25maWc6IEludHJvZHVjZSBSRUFETUUudW5pa3Jh
ZnQKICBrY29uZmlnOiBSZXBsYWNlIHRoZSBrZXJuZWwgd2l0aCBVbmlrcmFmdAogIEtjb25maWc6
IEltcG9ydGluZyBleGlzdGluZyBNYWtlZmlsZS5icgogIGtidWlsZDogQWRkIGJ1aWxkIGhlbHBl
ciBmdW5jdGlvbiBmcm9tIExpbnV4CiAga2NvbmZpZzogUmVtb3ZpbmcgdGhlIGdlbmVyaWMgcnVs
ZQogIGtjb25maWc6IEltcG9ydCBmaXhkZXAgZnJvbSBMaW51eCBrZXJuZWwKICBidWlsZDogQWRk
IFVuaWtyYWZ0IHNwZWNpZmljIGZpeGRlcCBoZWFkZXIKICBidWlsZDogUmVtb3ZlIGltcGxpY2l0
IHJ1bGVzCiAgYnVpbGQ6IEltcG9ydCB0aGUga2NvbmZpZyBob3N0IHJ1bGVzIGZyb20gTGludXgK
ICBrY29uZmlnOiBGaXhkZXAgYW5kIGhvc3QgZmxhZ3MKICBrY29uZmlnOiBTdXBwb3J0IGdsb2Ig
aW4ga2NvbmZpZwogIEtjb25maWc6IFNoaWZ0aW5nIHRvIHRoZSBuZXcgS2NvbmZpZyBzeXN0ZW0K
ICBrY29uZmlnOiBJbXBvcnQga2NvbmZpZ2xpYgogIGJ1aWxkOiBVc2Uga2NvbmZpZ2xpYiBmcm9t
IFVuaWtyYWZ0CiAgUmVwbGFjZSB0aGUgc2lsZW50b2xkY29uZmlnIHdpdGggc3luY2NvbmZpZwog
IGxpYjogVXNlIGdsb2IgaW5zdGVhZCBvZiBhZGRpbmcgZWFjaCBsaWIKICBidWlsZDogUHJlLXBy
b2Nlc3MgQ29uZmlnLnVrIHdpdGhpbiBrY29uZmlnCiAgYnVpbGQ6IFN1cHBvcnQgc3luY2NvbmZp
ZyB3aXRoIGtjb25maWdsaWIKICBidWlsZDogU3dpdGNoIGJ1aWxkIGRpcmVjdG9yeSBhcyBDVVJE
SVIKICBrY29uZmlnOiBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgYXJjaCBmcm9tIENDCiAga2NvbmZp
ZzogUmVtb3ZlIHRoZSBvbGQga2NvbmZpZwogIGtjb25maWc6IFJlcGxhY2UgdGhlIGtjb25maWcg
d2l0aCB0aGUgdXBkYXRlCgogQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICA0NCArLQogTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDIxNyArLQogYXJjaC9Db25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxMCArLQogbGliL0NvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAzNCAtCiBwbGF0L0NvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICA0IC0KIHN1cHBvcnQvYnVpbGQvTWFrZWZpbGUucnVsZXMgICAgICAgICAgICAg
ICAgICB8ICAgIDIgKy0KIC4uLi97a2NvbmZpZyA9PiBrY29uZmlnLm5ld30vUkVBRE1FLnVuaWty
YWZ0ICB8ICAgIDYgKy0KIC4uLi8wMS1rY29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRjaCAg
ICAgICB8ICAgNzYgKwogLi4uL3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyfSAgICAgICAg
ICAgIHwgICAyOSArLQogLi4uLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVs
ICAgIHwgIDEwMiArCiAuLi4vcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlICAgICAgICAg
ICAgfCAgIDI2ICsKIC4uLi9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhkZXAtaGVhZGVyICAg
ICB8ICAgMTIgKwogLi4uL3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzICAgICAgICAg
IHwgICAxMyArCiAuLi4vcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcyAgICAgICAg
fCAgMTQyICsKIC4uLi9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcgICAgICAgICB8
ICAgMTkgKwogLi4uL3BhdGNoZXMvMDktc3VwcG9ydC1nbG9iLWluLWtjb25maWcgICAgICAgIHwg
ICA3MCArCiBzdXBwb3J0L2tjb25maWcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgfCAg
MzY3ICstCiBzdXBwb3J0L2tjb25maWcvTWFrZWZpbGUuYnIgICAgICAgICAgICAgICAgICAgfCAg
MTMyICstCiBzdXBwb3J0L2tjb25maWcvTWFrZWZpbGUucnVsZXMgICAgICAgICAgICAgICAgfCAg
IDg0ICsKIHN1cHBvcnQva2NvbmZpZy9QT1RGSUxFUy5pbiAgICAgICAgICAgICAgICAgICB8ICAg
MTIgLQogc3VwcG9ydC9rY29uZmlnL2NoZWNrLnNoICAgICAgICAgICAgICAgICAgICAgIHwgICAx
NCAtCiBzdXBwb3J0L2tjb25maWcvY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjI5
ICstCiBzdXBwb3J0L2tjb25maWcvY29uZmRhdGEuYyAgICAgICAgICAgICAgICAgICAgfCAgNTMx
ICstCiBzdXBwb3J0L2tjb25maWcvZXhwci5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDcz
ICstCiBzdXBwb3J0L2tjb25maWcvZXhwci5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTE5
ICstCiBzdXBwb3J0L2tjb25maWcvZml4ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDU5
ICstCiBzdXBwb3J0L2tjb25maWcvZm9vLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEy
IC0KIHN1cHBvcnQva2NvbmZpZy9nY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICB8ICAgMzAg
Kwogc3VwcG9ydC9rY29uZmlnL2djb25mLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDExNiAr
LQogc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5jICAgICAgICAgICAgICAgICAgICAgIHwgICAzNCAr
LQogc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5oICAgICAgICAgICAgICAgICAgICAgIHwgICAzMyAr
CiBzdXBwb3J0L2tjb25maWcva3hnZXR0ZXh0LmMgICAgICAgICAgICAgICAgICAgfCAgMjM1IC0K
IHN1cHBvcnQva2NvbmZpZy9sZXhlci5sICAgICAgICAgICAgICAgICAgICAgICB8ICA0OTggKysK
IHN1cHBvcnQva2NvbmZpZy9saXN0LmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0K
IHN1cHBvcnQva2NvbmZpZy9sa2MuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjUgKy0K
IHN1cHBvcnQva2NvbmZpZy9sa2NfcHJvdG8uaCAgICAgICAgICAgICAgICAgICB8ICAxMDUgKy0K
IHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy8uZ2l0aWdub3JlICAgICAgICAgICB8ICAgIDQgLQog
c3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORyAgICAgIHwgICAgMiArLQog
c3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoICAgIHwgICA5MSAtCiBz
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgICAgICAgICAgfCAgIDIzICstCiBz
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmggICAgICAgICAgICAgfCAgIDI1ICstCiBz
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvaW5wdXRib3guYyAgICAgICAgICAgfCAgIDI0ICstCiBz
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jICAgICAgICAgICAgfCAgIDI5ICstCiBz
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdGV4dGJveC5jICAgICAgICAgICAgfCAgIDE3ICstCiBz
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jICAgICAgICAgICAgICAgfCAgIDE3ICstCiBz
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cveWVzbm8uYyAgICAgICAgICAgICAgfCAgIDE5ICstCiBz
dXBwb3J0L2tjb25maWcvbWNvbmYtY2ZnLnNoICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsKIHN1
cHBvcnQva2NvbmZpZy9tY29uZi5jICAgICAgICAgICAgICAgICAgICAgICB8ICAxODQgKy0KIHN1
cHBvcnQva2NvbmZpZy9tZW51LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMTUgKy0KIHN1
cHBvcnQva2NvbmZpZy9tZXJnZV9jb25maWcuc2ggICAgICAgICAgICAgICB8ICAxMDMgKy0KIHN1
cHBvcnQva2NvbmZpZy9uY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICB8ICAgNDcgKwogc3Vw
cG9ydC9rY29uZmlnL25jb25mLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDE4NCArLQogc3Vw
cG9ydC9rY29uZmlnL25jb25mLmd1aS5jICAgICAgICAgICAgICAgICAgIHwgICAzMCArLQogc3Vw
cG9ydC9rY29uZmlnL25jb25mLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAxMCArLQogc3Vw
cG9ydC9rY29uZmlnL3t6Y29uZi55ID0+IHBhcnNlci55fSAgICAgICAgIHwgIDQxNCArLQogLi4u
LWtjb25maWcta2VybmVsLXRvLWJ1aWxkcm9vdC11bmlrb3JlLnBhdGNoIHwgICA5OCAtCiAuLi4v
MDYtYnItYnVpbGQtc3lzdGVtLWludGVncmF0aW9uLnBhdGNoICAgICAgfCAgIDM1IC0KIC4uLi9w
YXRjaGVzLzExLXVzZS1ta3RlbXAtZm9yLWx4ZGlhbG9nLnBhdGNoICB8ICAgMTcgLQogLi4uL3Bh
dGNoZXMvMTItZml4LWdsYWRlLWZpbGUtcGF0aC5wYXRjaCAgICAgIHwgICAxNyAtCiAuLi4vMTQt
c3VwcG9ydC1vdXQtb2YtdHJlZS1jb25maWcucGF0Y2ggICAgICAgfCAgMjA3IC0KIC4uLi9wYXRj
aGVzLzE1LWZpeC1xY29uZi1tb2MtcnVsZS5wYXRjaCAgICAgICB8ICAgMjQgLQogLi4uZy1nZXQt
bmN1cnNlcy1DRkxBR1Mtd2l0aC1wa2ctY29uZmlnLnBhdGNoIHwgICA1MCAtCiBzdXBwb3J0L2tj
b25maWcvcGF0Y2hlcy9zZXJpZXMgICAgICAgICAgICAgICAgfCAgICA4IC0KIHN1cHBvcnQva2Nv
bmZpZy9wcmVwcm9jZXNzLmMgICAgICAgICAgICAgICAgICB8ICA1NzMgKysKIHN1cHBvcnQva2Nv
bmZpZy9xY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICB8ICAgMzIgKwogc3VwcG9ydC9rY29u
ZmlnL3Fjb25mLmNjICAgICAgICAgICAgICAgICAgICAgIHwgIDgwOSArLQogc3VwcG9ydC9rY29u
ZmlnL3Fjb25mLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDE1MyArLQogc3VwcG9ydC9rY29u
ZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsICAgICAgICAgIHwgICA2NCArLQogc3VwcG9ydC9rY29u
ZmlnL3N5bWJvbC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDM0MiArLQogc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnICAgIHwgICA1MiArCiAuLi4va2NvbmZpZy90
ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkgICAgfCAgIDEzICsKIC4uLi90ZXN0cy9hdXRv
X3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0ICAgICAgICB8ICAgMTAgKwogc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2Nob2ljZS9LY29uZmlnICAgICAgICAgIHwgICA1NiArCiBzdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlL19faW5pdF9fLnB5ICAgICAgfCAgIDQxICsKIC4uLi90ZXN0cy9jaG9pY2Uv
YWxsZGVmX2V4cGVjdGVkX2NvbmZpZyAgICAgICB8ICAgIDUgKwogLi4uL3Rlc3RzL2Nob2ljZS9h
bGxtb2RfZXhwZWN0ZWRfY29uZmlnICAgICAgIHwgICAgOSArCiAuLi4vdGVzdHMvY2hvaWNlL2Fs
bG5vX2V4cGVjdGVkX2NvbmZpZyAgICAgICAgfCAgICA1ICsKIC4uLi90ZXN0cy9jaG9pY2UvYWxs
eWVzX2V4cGVjdGVkX2NvbmZpZyAgICAgICB8ICAgIDkgKwogLi4uL3Rlc3RzL2Nob2ljZS9vbGRh
c2swX2V4cGVjdGVkX3N0ZG91dCAgICAgIHwgICAxMCArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMv
Y2hvaWNlL29sZGFzazFfY29uZmlnICAgfCAgICAyICsKIC4uLi90ZXN0cy9jaG9pY2Uvb2xkYXNr
MV9leHBlY3RlZF9zdGRvdXQgICAgICB8ICAgMTUgKwogLi4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93
aXRoX21fZGVwL0tjb25maWcgICAgIHwgICAyMSArCiAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dp
dGhfbV9kZXAvX19pbml0X18ucHkgfCAgIDE2ICsKIC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0
aF9tX2RlcC9jb25maWcgICAgICB8ICAgIDIgKwogLi4uL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L2V4cGVjdGVkX2NvbmZpZyAgIHwgICAgMyArCiAuLi4vY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAv
ZXhwZWN0ZWRfc3Rkb3V0ICAgfCAgICA0ICsKIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jb25mdGVz
dC5weSAgICAgICAgICAgICB8ICAyOTEgKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2
ZV9kZXAvS2NvbmZpZyAgIHwgICA2MyArCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19p
bml0X18ucHkgICAgICAgfCAgIDEwICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBl
Y3RlZF9zdGRlcnIgICB8ICAgMzggKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9p
bmMvS2NvbmZpZyAgIHwgICAgMiArCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
Zy5pbmMxICAgICAgfCAgICA1ICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmln
LmluYzIgICAgICB8ICAgIDQgKwogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcu
aW5jMyAgICAgIHwgICAgMiArCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18u
cHkgICAgICAgfCAgIDExICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9z
dGRlcnIgICB8ICAgIDYgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9LY29u
ZmlnICAgIHwgICAyNSArCiAuLi4va2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18u
cHkgICAgfCAgIDE1ICsKIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29u
ZmlnICB8ICAgIDEgKwogLi4uL3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcgICAg
ICAgIHwgICAgNCArCiAuLi4va2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25m
aWcgfCAgIDM5ICsKIC4uLi90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5ICAg
ICB8ICAgMTUgKwogLi4uL2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcg
IHwgICAgMyArCiAuLi4vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQg
fCAgIDEwICsKIC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZyAgICAgICB8
ICAgMTYgKwogLi4uL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9fX2luaXRfXy5weSAgIHwg
ICAyMCArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZyAgICAgICAgfCAg
ICAxICsKIC4uLi9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnICAgICB8ICAg
IDUgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcgICAgIHwgICAy
NyArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0X18ucHkgfCAgICA5
ICsKIC4uLi9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIgICB8ICAgIDUg
KwogLi4uL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91dCAgIHwgICAgMSAr
CiAuLi4vcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZyAgICAgfCAgICA1ICsK
IC4uLi9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weSB8ICAgMTEgKwog
Li4uL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAgMSArCiAu
Li4va2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnICAgfCAgIDQ0ICsKIC4u
Li90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weSAgICAgICB8ICAgIDggKwogLi4u
L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVyciAgIHwgICAxMCArCiAuLi4v
a2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcgfCAgIDUzICsKIC4uLi90
ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5ICAgICB8ICAgIDggKwogLi4uL3Rl
c3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyIHwgICAgOSArCiBzdXBwb3J0
L2tjb25maWcvdGVzdHMvcHl0ZXN0LmluaSAgICAgICAgICAgICAgfCAgICA3ICsKIC4uLi9rY29u
ZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnICB8ICAgMzUgKwogLi4uL3Rlc3Rz
L3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weSAgICAgIHwgICAxNyArCiAuLi4vdGVzdHMv
cmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDAgfCAgICAyICsKIC4uLi90ZXN0cy9y
YW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MSB8ICAgIDQgKwogLi4uL3Rlc3RzL3Jh
bmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyIHwgICAgNSArCiBzdXBwb3J0L2tjb25m
aWcvdXRpbC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTA2ICstCiBzdXBwb3J0L2tjb25m
aWcvemNvbmYuZ3BlcmYgICAgICAgICAgICAgICAgICAgfCAgIDQ3IC0KIHN1cHBvcnQva2NvbmZp
Zy96Y29uZi5oYXNoLmNfc2hpcHBlZCAgICAgICAgICB8ICAyODYgLQogc3VwcG9ydC9rY29uZmln
L3pjb25mLmwgICAgICAgICAgICAgICAgICAgICAgIHwgIDM2MyAtCiAuLi4ve3pjb25mLmxleC5j
X3NoaXBwZWQgPT4gemNvbmYubGV4LmN9ICAgICAgfCAxNDc2ICsrLS0KIC4uLi97emNvbmYudGFi
LmNfc2hpcHBlZCA9PiB6Y29uZi50YWIuY30gICAgICB8IDE3ODAgKystLS0KIHN1cHBvcnQva2Nv
bmZpZ2xpYi9MSUNFTlNFLnR4dCAgICAgICAgICAgICAgICB8ICAgIDUgKwogc3VwcG9ydC9rY29u
ZmlnbGliL01BTklGRVNULmluICAgICAgICAgICAgICAgIHwgICAgMiArCiBzdXBwb3J0L2tjb25m
aWdsaWIvUkVBRE1FLnJzdCAgICAgICAgICAgICAgICAgfCAgODA2ICsrCiBzdXBwb3J0L2tjb25m
aWdsaWIvYWxsZGVmY29uZmlnLnB5ICAgICAgICAgICAgfCAgIDI3ICsKIHN1cHBvcnQva2NvbmZp
Z2xpYi9hbGxtb2Rjb25maWcucHkgICAgICAgICAgICB8ICAgNDYgKwogc3VwcG9ydC9rY29uZmln
bGliL2FsbG5vY29uZmlnLnB5ICAgICAgICAgICAgIHwgICA0NSArCiBzdXBwb3J0L2tjb25maWds
aWIvYWxseWVzY29uZmlnLnB5ICAgICAgICAgICAgfCAgIDU2ICsKIHN1cHBvcnQva2NvbmZpZ2xp
Yi9kZWZjb25maWcucHkgICAgICAgICAgICAgICB8ICAgNDMgKwogc3VwcG9ydC9rY29uZmlnbGli
L2V4YW1wbGVzL0ttZW51Y29uZmlnICAgICAgIHwgIDEwMiArCiAuLi4va2NvbmZpZ2xpYi9leGFt
cGxlcy9hbGxub2NvbmZpZ193YWxrLnB5ICAgfCAgIDY2ICsKIC4uLi9leGFtcGxlcy9kZWZjb25m
aWdfb2xkY29uZmlnLnB5ICAgICAgICAgICB8ICAgMzkgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4
YW1wbGVzL2R1bXB2YXJzLnB5ICAgICAgIHwgICAxNSArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhh
bXBsZXMvZXZhbF9leHByLnB5ICAgICAgfCAgIDI0ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFt
cGxlcy9maW5kX3N5bWJvbC5weSAgICB8ICAxMTIgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4YW1w
bGVzL2hlbHBfZ3JlcC5weSAgICAgIHwgICA2NCArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBs
ZXMva2NvbmZpZ2xpYi5weSAgICAgfCAgICAxICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxl
cy9saXN0X3VuZGVmaW5lZC5weSB8ICAxNTYgKwogLi4uL2tjb25maWdsaWIvZXhhbXBsZXMvbWVu
dWNvbmZpZ19leGFtcGxlLnB5IHwgIDM0MSArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMv
bWVyZ2VfY29uZmlnLnB5ICAgfCAgMTMzICsKIC4uLi9rY29uZmlnbGliL2V4YW1wbGVzL3ByaW50
X2NvbmZpZ190cmVlLnB5ICB8ICAxOTkgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL3By
aW50X3N5bV9pbmZvLnB5IHwgICA1NCArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJp
bnRfdHJlZS5weSAgICAgfCAgIDc1ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9nZW5jb25maWcucHkg
ICAgICAgICAgICAgICB8ICAxMzIgKwogc3VwcG9ydC9rY29uZmlnbGliL2d1aWNvbmZpZy5weSAg
ICAgICAgICAgICAgIHwgMjMxNiArKysrKysKIHN1cHBvcnQva2NvbmZpZ2xpYi9rY29uZmlnbGli
LnB5ICAgICAgICAgICAgICB8IDcwMTggKysrKysrKysrKysrKysrKysKIHN1cHBvcnQva2NvbmZp
Z2xpYi9saXN0bmV3Y29uZmlnLnB5ICAgICAgICAgICB8ICAgNDcgKwogc3VwcG9ydC9rY29uZmln
bGliL21ha2VmaWxlLnBhdGNoICAgICAgICAgICAgIHwgICA0OCArCiBzdXBwb3J0L2tjb25maWds
aWIvbWVudWNvbmZpZy5weSAgICAgICAgICAgICAgfCAzMjY0ICsrKysrKysrCiBzdXBwb3J0L2tj
b25maWdsaWIvb2xkY29uZmlnLnB5ICAgICAgICAgICAgICAgfCAgMjQ2ICsKIHN1cHBvcnQva2Nv
bmZpZ2xpYi9vbGRkZWZjb25maWcucHkgICAgICAgICAgICB8ICAgMjggKwogc3VwcG9ydC9rY29u
ZmlnbGliL3NhdmVkZWZjb25maWcucHkgICAgICAgICAgIHwgICA0OSArCiBzdXBwb3J0L2tjb25m
aWdsaWIvc2V0Y29uZmlnLnB5ICAgICAgICAgICAgICAgfCAgIDkyICsKIHN1cHBvcnQva2NvbmZp
Z2xpYi9zZXR1cC5jZmcgICAgICAgICAgICAgICAgICB8ICAgIDcgKwogc3VwcG9ydC9rY29uZmln
bGliL3NldHVwLnB5ICAgICAgICAgICAgICAgICAgIHwgIDEwMCArCiBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2FwcGVuZCAgICAgICAgICAgICAgfCAgIDEyICsKIHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LYXNzaWduYWJsZSAgICAgICAgICB8ICAyMzAgKwogc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tjaG9pY2UgICAgICAgICAgICAgIHwgIDE5OCArCiBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2RlZmNvbmZpZ19leGlzdGVudCAgfCAgICA4ICsKIC4uLi90ZXN0cy9LZGVmY29uZmln
X2V4aXN0ZW50X2J1dF9uICAgICAgICAgICB8ICAgMTAgKwogLi4uL2tjb25maWdsaWIvdGVzdHMv
S2RlZmNvbmZpZ19ub25leGlzdGVudCAgIHwgICAgNSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2RlZmNvbmZpZ19zcmN0cmVlICAgfCAgICA1ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9LZGVwY29weSAgICAgICAgICAgICB8ICAxNzMgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tkZXBsb29wMCAgICAgICAgICAgIHwgICAgMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2RlcGxvb3AxICAgICAgICAgICAgfCAgICAzICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
ZGVwbG9vcDEwICAgICAgICAgICB8ICAgNDggKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tk
ZXBsb29wMiAgICAgICAgICAgIHwgICAgMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Rl
cGxvb3AzICAgICAgICAgICAgfCAgICAzICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVw
bG9vcDQgICAgICAgICAgICB8ICAgIDcgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBs
b29wNSAgICAgICAgICAgIHwgICAgNyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxv
b3A2ICAgICAgICAgICAgfCAgICA2ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9v
cDcgICAgICAgICAgICB8ICAgMTEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29w
OCAgICAgICAgICAgIHwgICAgOCArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A5
ICAgICAgICAgICAgfCAgICA3ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGlyZGVwICAg
ICAgICAgICAgICB8ICAgMzAgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tlc2NhcGUgICAg
ICAgICAgICAgIHwgICAgMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2V2YWwgICAgICAg
ICAgICAgICAgfCAgIDM0ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXhwcl9pdGVtcyAg
ICAgICAgICB8ICAgMTEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0toZWxwICAgICAgICAg
ICAgICAgIHwgICA1MCArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2lmcmVtb3ZhbCAgICAg
ICAgICAgfCAgIDk5ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaW1wbHkgICAgICAgICAg
ICAgICB8ICAxNDUgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGggICAg
ICAgIHwgICAxMiArCiAuLi4va2NvbmZpZ2xpYi90ZXN0cy9LaW5jbHVkZV9wYXRoX3NvdXJjZWRf
MSAgfCAgIDEyICsKIC4uLi9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8y
ICB8ICAgMTEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpdGVtbGlzdHMgICAgICAgICAg
IHwgICAzNiArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2xvY2F0aW9uICAgICAgICAgICAg
fCAgIDcyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbG9jYXRpb25fc291cmNlZCAgICB8
ICAgMTggKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttYWlubWVudSAgICAgICAgICAgIHwg
ICAgNSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21lbnVjb25maWcgICAgICAgICAgfCAg
IDM3ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWlzYyAgICAgICAgICAgICAgICB8ICAg
ODIgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNzaW5ncnNvdXJjZSAgICAgIHwgICAg
MSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc3Npbmdzb3VyY2UgICAgICAgfCAgICAx
ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9Lb3JkZXIgICAgICAgICAgICAgICB8ICAgMzUg
Kwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0twcmVwcm9jZXNzICAgICAgICAgIHwgIDE0NyAr
CiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JhbmdlICAgICAgICAgICAgICAgfCAgMTMzICsK
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVjdXJzaXZlMSAgICAgICAgICB8ICAgIDEgKwog
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNpdmUyICAgICAgICAgIHwgICAgMSArCiBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JlZmVyZW5jZWQgICAgICAgICAgfCAgIDYzICsKIHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVsYXRpb24gICAgICAgICAgICB8ICAgMzYgKwogc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZXByICAgICAgICAgICAgICAgIHwgICA2NCArCiBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS3N0ciAgICAgICAgICAgICAgICAgfCAgMjkzICsKIHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LdW5kZWYgICAgICAgICAgICAgICB8ICAgMjMgKwogc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0t1c2VyZnVuY3Rpb25zICAgICAgIHwgICAxMSArCiBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvS3Zpc2liaWxpdHkgICAgICAgICAgfCAgMzQyICsKIHN1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfaW5kZW50ZWQgICAgICB8ICAgIDMgKwogc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL2NvbmZpZ19zZXRfYm9vbCAgICAgIHwgICAgMSArCiBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvY29uZmlnX3NldF9zdHJpbmcgICAgfCAgICAxICsKIHN1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9kZWZjb25maWdfMSAgICAgICAgICB8ICAgIDAKIHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9kZWZjb25maWdfMiAgICAgICAgICB8ICAgIDAKIHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9lbXB0eSAgICAgICAgICAgICAgICB8ICAgIDAKIHN1cHBvcnQva2NvbmZpZ2xpYi90
ZXN0cy9rY29uZmlnZnVuY3Rpb25zLnB5ICB8ICAgMTQgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL3JlbHRlc3QgICAgICAgICAgICAgIHwgICA1MSArCiAuLi4va2NvbmZpZ2xpYi90ZXN0cy9z
dWIvS2NvbmZpZ19zeW1saW5rXzIgICAgfCAgICAxICsKIC4uLi9rY29uZmlnbGliL3Rlc3RzL3N1
Yi9LY29uZmlnX3N5bWxpbmtfMyAgICB8ICAgIDIgKwogLi4uL2tjb25maWdsaWIvdGVzdHMvc3Vi
L0tsb2NhdGlvbl9ncnNvdXJjZWQxIHwgICAgMSArCiAuLi4va2NvbmZpZ2xpYi90ZXN0cy9zdWIv
S2xvY2F0aW9uX2dyc291cmNlZDIgfCAgICAxICsKIC4uLi9rY29uZmlnbGliL3Rlc3RzL3N1Yi9L
bG9jYXRpb25fZ3NvdXJjZWQxICB8ICAgIDEgKwogLi4uL2tjb25maWdsaWIvdGVzdHMvc3ViL0ts
b2NhdGlvbl9nc291cmNlZDIgIHwgICAgMSArCiAuLi4va2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xv
Y2F0aW9uX3Jzb3VyY2VkICAgfCAgICAyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIv
ZGVmY29uZmlnX2luX3N1YiB8ICAgIDAKIC4uLi90ZXN0cy9zdWIvc3ViL0tjb25maWdfc3ltbGlu
a18xICAgICAgICAgICB8ICAgIDIgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N5bWxpbmsg
ICAgICAgICAgICAgIHwgICAgMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHN1aXRlLnB5ICAg
ICAgICAgICAgICAgfCAzMTM2ICsrKysrKysrCiBzdXBwb3J0L3NjcmlwdHMvY29uZmlndXBkYXRl
ICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBzdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29u
ZmlndXJlLnNoICAgICAgICAgfCAgMTAyICsKIDIzNyBmaWxlcyBjaGFuZ2VkLCAyOTI3OCBpbnNl
cnRpb25zKCspLCA1NTEyIGRlbGV0aW9ucygtKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcgPT4g
a2NvbmZpZy5uZXd9L1JFQURNRS51bmlrcmFmdCAoNjklKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5w
YXRjaAogcmVuYW1lIHN1cHBvcnQve2tjb25maWcvcGF0Y2hlcy8xMC1ici1idWlsZC1zeXN0ZW0u
cGF0Y2ggPT4ga2NvbmZpZy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnJ9ICg3NyUp
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAzLWluY2x1
ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZpeGRl
cC1oZWFkZXIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMv
MDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZs
YWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDktc3Vw
cG9ydC1nbG9iLWluLWtjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcv
TWFrZWZpbGUucnVsZXMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvUE9URklM
RVMuaW4KIGRlbGV0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcvY2hlY2suc2gKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvZm9vLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBz
dXBwb3J0L2tjb25maWcvZ2NvbmYtY2ZnLnNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL2ltYWdlcy5oCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2t4Z2V0
dGV4dC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2xleGVyLmwKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvLmdpdGlnbm9yZQogZGVsZXRl
IG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaAog
Y3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9tY29uZi1jZmcuc2gKIGNyZWF0ZSBt
b2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcvbmNvbmYtY2ZnLnNoCiByZW5hbWUgc3VwcG9ydC9r
Y29uZmlnL3t6Y29uZi55ID0+IHBhcnNlci55fSAoNjYlKQogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLWJ1aWxkcm9vdC11bmlr
b3JlLnBhdGNoCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDYt
YnItYnVpbGQtc3lzdGVtLWludGVncmF0aW9uLnBhdGNoCiBkZWxldGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3BhdGNoZXMvMTEtdXNlLW1rdGVtcC1mb3ItbHhkaWFsb2cucGF0Y2gKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8xMi1maXgtZ2xhZGUtZmls
ZS1wYXRoLnBhdGNoCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMv
MTQtc3VwcG9ydC1vdXQtb2YtdHJlZS1jb25maWcucGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvcGF0Y2hlcy8xNS1maXgtcWNvbmYtbW9jLXJ1bGUucGF0Y2gKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8xNy1rY29uZmlnLWx4ZGlhbG9n
LWdldC1uY3Vyc2VzLUNGTEFHUy13aXRoLXBrZy1jb25maWcucGF0Y2gKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy9zZXJpZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvcHJlcHJvY2Vzcy5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9r
Y29uZmlnL3Fjb25mLWNmZy5zaAogbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzdXBwb3J0
L2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5CiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRv
dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL0tjb25m
aWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL19faW5p
dF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9h
bGxkZWZfZXhwZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3Rl
ZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNl
L29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAv
S2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Vf
dmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhw
ZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jb25mdGVzdC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9f
LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNp
dmVfZGVwL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMQogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29u
ZmlnLmluYzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVy
cgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2Uv
S2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9j
aG9pY2UvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZpZwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVw
L19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25l
d19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29u
ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25m
aWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9i
dWlsdGluX2Z1bmMvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3Rl
ZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJv
Y2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJj
dWxhcl9leHBhbnNpb24vX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJy
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNj
YXBlL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJl
cHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3RkZXJyCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZp
ZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3Zh
cmlhYmxlL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3B5dGVzdC5pbmkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5p
dF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBl
Y3RlZF9zdGRvdXQyCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLmdw
ZXJmCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLmhhc2guY19zaGlw
cGVkCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLmwKIHJlbmFtZSBz
dXBwb3J0L2tjb25maWcve3pjb25mLmxleC5jX3NoaXBwZWQgPT4gemNvbmYubGV4LmN9ICg1NSUp
CiByZW5hbWUgc3VwcG9ydC9rY29uZmlnL3t6Y29uZi50YWIuY19zaGlwcGVkID0+IHpjb25mLnRh
Yi5jfSAoNTMlKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9MSUNFTlNF
LnR4dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9NQU5JRkVTVC5pbgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9SRUFETUUucnN0CiBjcmVhdGUg
bW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2FsbGRlZmNvbmZpZy5weQogY3JlYXRlIG1v
ZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9hbGxtb2Rjb25maWcucHkKIGNyZWF0ZSBtb2Rl
IDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvYWxsbm9jb25maWcucHkKIGNyZWF0ZSBtb2RlIDEw
MDc1NSBzdXBwb3J0L2tjb25maWdsaWIvYWxseWVzY29uZmlnLnB5CiBjcmVhdGUgbW9kZSAxMDA3
NTUgc3VwcG9ydC9rY29uZmlnbGliL2RlZmNvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9LbWVudWNvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9hbGxub2NvbmZpZ193YWxrLnB5CiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2RlZmNvbmZpZ19vbGRjb25m
aWcucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZHVt
cHZhcnMucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMv
ZXZhbF9leHByLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1w
bGVzL2ZpbmRfc3ltYm9sLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L2V4YW1wbGVzL2hlbHBfZ3JlcC5weQogY3JlYXRlIG1vZGUgMTIwMDAwIHN1cHBvcnQva2NvbmZp
Z2xpYi9leGFtcGxlcy9rY29uZmlnbGliLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL2V4YW1wbGVzL2xpc3RfdW5kZWZpbmVkLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUg
c3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL21lbnVjb25maWdfZXhhbXBsZS5weQogY3JlYXRl
IG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9tZXJnZV9jb25maWcucHkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfY29u
ZmlnX3RyZWUucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBs
ZXMvcHJpbnRfc3ltX2luZm8ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvZXhhbXBsZXMvcHJpbnRfdHJlZS5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2Nv
bmZpZ2xpYi9nZW5jb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWds
aWIvZ3VpY29uZmlnLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2tj
b25maWdsaWIucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvbGlzdG5l
d2NvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9tYWtlZmls
ZS5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9tZW51Y29uZmln
LnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL29sZGNvbmZpZy5weQog
Y3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9vbGRkZWZjb25maWcucHkKIGNy
ZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvc2F2ZWRlZmNvbmZpZy5weQogY3Jl
YXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9zZXRjb25maWcucHkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvc2V0dXAuY2ZnCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL3NldHVwLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0thcHBlbmQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2Fzc2lnbmFibGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2Nob2ljZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LZGVmY29uZmlnX2V4aXN0ZW50CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnRfYnV0X24KIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19ub25leGlzdGVudAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX3Ny
Y3RyZWUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGNv
cHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3Aw
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDEwCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMgogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDMKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A0CiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDYKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A3CiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOAogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RpcmRlcAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXNjYXBlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tldmFsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tleHByX2l0ZW1zCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0toZWxwCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tpZnJlbW92YWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2ltcGx5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tpbmNsdWRlX3BhdGgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzIKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2l0ZW1saXN0cwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbG9jYXRpb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2xvY2F0aW9uX3NvdXJjZWQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21haW5tZW51CiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttZW51Y29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNzaW5ncnNvdXJjZQogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWlzc2luZ3NvdXJjZQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9Lb3JkZXIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3ByZXByb2Nlc3MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JhbmdlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNpdmUxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNpdmUyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tyZWZlcmVuY2VkCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tyZWxhdGlvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9LcmVwcgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9Lc3RyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0t1bmRlZgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
dXNlcmZ1bmN0aW9ucwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9LdmlzaWJpbGl0eQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9jb25maWdfaW5kZW50ZWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvY29uZmlnX3NldF9ib29sCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL2NvbmZpZ19zZXRfc3RyaW5nCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL2RlZmNvbmZpZ18xCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL2RlZmNvbmZpZ18yCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL2VtcHR5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL2tjb25maWdmdW5jdGlvbnMucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvcmVsdGVzdAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9zdWIvS2NvbmZpZ19zeW1saW5rXzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18zCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3VyY2Vk
MQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0
aW9uX2dyc291cmNlZDIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvc3ViL0tsb2NhdGlvbl9nc291cmNlZDEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9nc291cmNlZDIKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9yc291cmNlZAogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvZGVmY29uZmlnX2luX3N1
YgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvc3ViL0tj
b25maWdfc3ltbGlua18xCiBjcmVhdGUgbW9kZSAxMjAwMDAgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL3N5bWxpbmsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHN1
aXRlLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZp
Z3VyZS5zaAoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NxM-0003GQ-Ug; Mon, 09 Sep 2019 18:00:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NxM-00039K-BQ
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:04 +0000
X-Inumbo-ID: a51567da-d32b-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a51567da-d32b-11e9-b76c-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 87D35F2027;
 Mon,  9 Sep 2019 20:00:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id EXOsokCc9mqX; Mon,  9 Sep 2019 20:00:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 59E9EF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:59:59 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:59:59 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:19 +0200
Message-ID: <20190909175939.23936-4-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 03/23] kconfig: Replace the
 kernel with Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2VhcmNoIGFuZCByZXBsYWNlIHRoZSBLZXJuZWwgd2l0aCBVbmlrcmFmdAoKU2lnbmVkLW9mZi1i
eTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIHN1cHBv
cnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUgICAgICAgICAgICAgICB8ICAyICstCiBzdXBwb3J0
L2tjb25maWcubmV3L21jb25mLmMgICAgICAgICAgICAgICAgICAgfCAgNiArLQogc3VwcG9ydC9r
Y29uZmlnLm5ldy9uY29uZi5jICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIC4uLi8wMS1rY29u
ZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRjaCAgICAgICB8IDc2ICsrKysrKysrKysrKysrKysr
KysKIHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MgICAgICAgICAgICAgICAgICB8ICAyICst
CiA2IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAxLWtjb25maWcta2Vy
bmVsLXRvLXVuaWtyYWZ0LnBhdGNoCgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9N
YWtlZmlsZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUKaW5kZXggM2YzMjdlMjEuLjdi
NTMyYzVmIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUKQEAgLTEsNiArMSw2IEBACiAjIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBLZXJuZWwgY29u
ZmlndXJhdGlvbiB0YXJnZXRzCisjIFVuaWtyYWZ0IGNvbmZpZ3VyYXRpb24gdGFyZ2V0cwogIyBU
aGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZyb20gdG9wLWxldmVsIG1ha2VmaWxlCiAKIFBIT05ZICs9
IHhjb25maWcgZ2NvbmZpZyBtZW51Y29uZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHll
c2NvbmZpZyBcCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQppbmRleCBhYTQ4M2NiMy4uMDNlOTdkNzQg
MTAwNjQ0Ci0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQpAQCAtNCw3ICs0LDcgQEAKIAogPHdpZGdldCBjbGFz
cz0iR3RrV2luZG93IiBpZD0id2luZG93MSI+CiAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4KLSAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xhdGFibGU9Inll
cyI+R3RrIEtlcm5lbCBDb25maWd1cmF0b3I8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0i
dGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgVW5pa3JhZnQgQ29uZmlndXJhdG9yPC9wcm9w
ZXJ0eT4KICAgPHByb3BlcnR5IG5hbWU9InR5cGUiPkdUS19XSU5ET1dfVE9QTEVWRUw8L3Byb3Bl
cnR5PgogICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19OT05F
PC9wcm9wZXJ0eT4KICAgPHByb3BlcnR5IG5hbWU9Im1vZGFsIj5GYWxzZTwvcHJvcGVydHk+CmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMgYi9zdXBwb3J0L2tjb25maWcu
bmV3L21jb25mLmMKaW5kZXggNjk0MDkxZjMuLjUzYzRhNjJiIDEwMDY0NAotLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L21jb25mLmMKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCkBA
IC0xNzUsOSArMTc1LDkgQEAgbWVudV9pbnN0cnVjdGlvbnNbXSA9CiAJIkFycm93IGtleXMgbmF2
aWdhdGUgdGhlIG1lbnUuICAiCiAJIjxFbnRlcj4gc2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBl
bXB0eSBzdWJtZW51cyAtLS0tKS4gICIKIAkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5
cy4gICIKLQkiUHJlc3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFy
aXplcyBmZWF0dXJlcy4gICIKKwkiUHJlc3NpbmcgPFk+IHNlbGVjdHMgYSBmZWF0dXJlLCB3aGls
ZSA8Tj4gd2lsbCBleGNsdWRlIGEgZmVhdHVyZS4gICIKIAkiUHJlc3MgPEVzYz48RXNjPiB0byBl
eGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIgotCSJMZWdlbmQ6IFsqXSBidWls
dC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUiLAorCSJM
ZWdlbmQ6IFsqXSBmZWF0dXJlIGlzIHNlbGVjdGVkICBbIF0gZmVhdHVyZSBpcyBleGNsdWRlZCIs
CiByYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQogCSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2
aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgogCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlv
dSB3aXNoIHRvIHNlbGVjdCAiCkBAIC05NTcsNyArOTU3LDcgQEAgc3RhdGljIGludCBoYW5kbGVf
ZXhpdCh2b2lkKQogCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpCiAJCXJlcyA9IGRpYWxvZ195ZXNu
byhOVUxMLAogCQkJCSAgICJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRp
b24/XG4iCi0JCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUga2VybmVsIGNv
bmZpZ3VyYXRpb24uKSIsCisJCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUg
VW5pa3JhZnQgY29uZmlndXJhdGlvbi4pIiwKIAkJCQkgICA2LCA2MCk7CiAJZWxzZQogCQlyZXMg
PSAtMTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvbmNvbmYuYwppbmRleCBjYmFmZTNiZi4uZDNkOTA4YzQgMTAwNjQ0Ci0tLSBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYworKysgYi9zdXBwb3J0L2tjb25maWcubmV3L25j
b25mLmMKQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgbmNvbmZfZ2xvYmFsX2hl
bHBbXSA9CiAiTWVudSBlbnRyaWVzXG4iCiAiLS0tLS0tLS0tLS0tXG4iCiAiVGhpcyBpbnRlcmZh
Y2UgbGV0cyB5b3Ugc2VsZWN0IGZlYXR1cmVzIGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUga2VybmVs
XG4iCi0iYnVpbGQuICBLZXJuZWwgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9k
dWxhcml6ZWQsIG9yIHJlbW92ZWQuXG4iCisiYnVpbGQuICBVbmlrcmFmdCBmZWF0dXJlcyBjYW4g
ZWl0aGVyIGJlIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWQuXG4iCiAiUGFyYW1ldGVycyBtdXN0IGJl
IGVudGVyZWQgYXMgdGV4dCBvciBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIG51bWJlcnMuXG4iCiAi
XG4iCiAiTWVudSBlbnRyaWVzIGJlZ2lubmluZyB3aXRoIGZvbGxvd2luZyBicmFjZXMgcmVwcmVz
ZW50IGZlYXR1cmVzIHRoYXRcbiIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0
Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRjaCBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcGF0Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRjaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZjBkNjNiNGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3Jh
ZnQucGF0Y2gKQEAgLTAsMCArMSw3NiBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvTWFrZWZpbGUgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlCitpbmRleCAzZjMyN2Uy
Li43YjUzMmM1IDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQorKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQorQEAgLTEsNiArMSw2IEBACisgIyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorICMgPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CistIyBL
ZXJuZWwgY29uZmlndXJhdGlvbiB0YXJnZXRzCisrIyBVbmlrcmFmdCBjb25maWd1cmF0aW9uIHRh
cmdldHMKKyAjIFRoZXNlIHRhcmdldHMgYXJlIHVzZWQgZnJvbSB0b3AtbGV2ZWwgbWFrZWZpbGUK
KyAKKyBQSE9OWSArPSB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgbG9jYWxtb2Rj
b25maWcgbG9jYWx5ZXNjb25maWcgXAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
Z2NvbmYuZ2xhZGUgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlCitpbmRleCBhYTQ4
M2NiLi4wM2U5N2Q3IDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFk
ZQorKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQorQEAgLTQsNyArNCw3IEBA
CisgCisgPHdpZGdldCBjbGFzcz0iR3RrV2luZG93IiBpZD0id2luZG93MSI+CisgICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CistICA8cHJvcGVydHkgbmFtZT0idGl0
bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVsIENvbmZpZ3VyYXRvcjwvcHJvcGVydHk+
CisrICA8cHJvcGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgVW5pa3Jh
ZnQgQ29uZmlndXJhdG9yPC9wcm9wZXJ0eT4KKyAgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlIj5HVEtf
V0lORE9XX1RPUExFVkVMPC9wcm9wZXJ0eT4KKyAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9z
aXRpb24iPkdUS19XSU5fUE9TX05PTkU8L3Byb3BlcnR5PgorICAgPHByb3BlcnR5IG5hbWU9Im1v
ZGFsIj5GYWxzZTwvcHJvcGVydHk+CitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9t
Y29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCitpbmRleCA2OTQwOTFmLi41M2M0
YTYyIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCisrKysgYi9zdXBw
b3J0L2tjb25maWcubmV3L21jb25mLmMKK0BAIC0xNzUsOSArMTc1LDkgQEAgbWVudV9pbnN0cnVj
dGlvbnNbXSA9CisgCSJBcnJvdyBrZXlzIG5hdmlnYXRlIHRoZSBtZW51LiAgIgorIAkiPEVudGVy
PiBzZWxlY3RzIHN1Ym1lbnVzIC0tLT4gKG9yIGVtcHR5IHN1Ym1lbnVzIC0tLS0pLiAgIgorIAki
SGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICIKKy0JIlByZXNzaW5nIDxZPiBpbmNs
dWRlcywgPE4+IGV4Y2x1ZGVzLCA8TT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuICAiCisrCSJQcmVz
c2luZyA8WT4gc2VsZWN0cyBhIGZlYXR1cmUsIHdoaWxlIDxOPiB3aWxsIGV4Y2x1ZGUgYSBmZWF0
dXJlLiAgIgorIAkiUHJlc3MgPEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBm
b3IgU2VhcmNoLiAgIgorLQkiTGVnZW5kOiBbKl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+
IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxlIiwKKysJIkxlZ2VuZDogWypdIGZlYXR1cmUgaXMg
c2VsZWN0ZWQgIFsgXSBmZWF0dXJlIGlzIGV4Y2x1ZGVkIiwKKyByYWRpb2xpc3RfaW5zdHJ1Y3Rp
b25zW10gPQorIAkiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlIHRoaXMgd2luZG93IG9y
ICIKKyAJInByZXNzIHRoZSBob3RrZXkgb2YgdGhlIGl0ZW0geW91IHdpc2ggdG8gc2VsZWN0ICIK
K0BAIC05NTcsNyArOTU3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhpdCh2b2lkKQorIAlpZiAo
Y29uZl9nZXRfY2hhbmdlZCgpKQorIAkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsCisgCQkJCSAg
ICJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRpb24/XG4iCistCQkJCSAg
ICAgIihQcmVzcyA8RVNDPjxFU0M+IHRvIGNvbnRpbnVlIGtlcm5lbCBjb25maWd1cmF0aW9uLiki
LAorKwkJCQkgICAgICIoUHJlc3MgPEVTQz48RVNDPiB0byBjb250aW51ZSBVbmlrcmFmdCBjb25m
aWd1cmF0aW9uLikiLAorIAkJCQkgICA2LCA2MCk7CisgCWVsc2UKKyAJCXJlcyA9IC0xOworZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbmNvbmYuYworaW5kZXggY2JhZmUzYi4uZDNkOTA4YyAxMDA2NDQKKy0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvbmNvbmYuYworKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCitA
QCAtMjksNyArMjksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBuY29uZl9nbG9iYWxfaGVscFtdID0K
KyAiTWVudSBlbnRyaWVzXG4iCisgIi0tLS0tLS0tLS0tLVxuIgorICJUaGlzIGludGVyZmFjZSBs
ZXRzIHlvdSBzZWxlY3QgZmVhdHVyZXMgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBrZXJuZWxcbiIK
Ky0iYnVpbGQuICBLZXJuZWwgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxh
cml6ZWQsIG9yIHJlbW92ZWQuXG4iCisrImJ1aWxkLiAgVW5pa3JhZnQgZmVhdHVyZXMgY2FuIGVp
dGhlciBiZSBzZWxlY3RlZCBvciBkZXNlbGVjdGVkLlxuIgorICJQYXJhbWV0ZXJzIG11c3QgYmUg
ZW50ZXJlZCBhcyB0ZXh0IG9yIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycy5cbiIKKyAi
XG4iCisgIk1lbnUgZW50cmllcyBiZWdpbm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJl
c2VudCBmZWF0dXJlcyB0aGF0XG4iCitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9x
Y29uZi5jYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MKK2luZGV4IGNlN2ZjODcuLjAw
MjFhYTYgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCisrKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCitAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgaW5s
aW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgY2hhciogc3RyKQorIH0KKyAKKyBDb25maWdTZXR0
aW5nczo6Q29uZmlnU2V0dGluZ3MoKQorLQk6IFFTZXR0aW5ncygia2VybmVsLm9yZyIsICJxY29u
ZiIpCisrCTogUVNldHRpbmdzKCJ1bmlrcmFmdC5vcmciLCAicWNvbmYiKQorIHsKKyB9CisgCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9xY29uZi5jYwppbmRleCBjZTdmYzg3YS4uMDAyMWFhNjIgMTAwNjQ0Ci0tLSBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvcWNvbmYuY2MKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5j
YwpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3Qg
Y2hhciogc3RyKQogfQogCiBDb25maWdTZXR0aW5nczo6Q29uZmlnU2V0dGluZ3MoKQotCTogUVNl
dHRpbmdzKCJrZXJuZWwub3JnIiwgInFjb25mIikKKwk6IFFTZXR0aW5ncygidW5pa3JhZnQub3Jn
IiwgInFjb25mIikKIHsKIH0KIAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NxQ-0003YH-09; Mon, 09 Sep 2019 18:00:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NxP-0003TY-3v
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:07 +0000
X-Inumbo-ID: a64ff2b4-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a64ff2b4-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:04 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 926C8F2028;
 Mon,  9 Sep 2019 20:00:03 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id lzNJFmhRiORO; Mon,  9 Sep 2019 20:00:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 67AE2F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:01 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:59:59 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:20 +0200
Message-ID: <20190909175939.23936-5-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 04/23] Kconfig: Importing
 existing Makefile.br
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciAgICAgICAgICAgICAgIHwg
NTMgKysrKysrKysrKysrKysrKysKIC4uLi9rY29uZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1t
YWtlZmlsZS5iciB8IDU5ICsrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTEy
IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVz
LzAyLWltcG9ydC1tYWtlZmlsZS5icgoKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi40MWM1Y2UxNgotLS0gL2Rldi9udWxsCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTAsMCArMSw1MyBAQAorc3JjIDo9IC4K
K3RvcF9zcmNkaXI9Li4vLi4vCit0b3BfYnVpbGRkaXI9Li4vLi4vCitzcmN0cmVlIDo9IC4KK29i
aiA/PSAuCisKK2luY2x1ZGUgTWFrZWZpbGUKKyNIT1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5j
bHVkZSBmb28uaAorLWluY2x1ZGUgJChvYmopLy5kZXBlbmQKKyQob2JqKS8uZGVwZW5kOiAkKHdp
bGRjYXJkICouaCAqLmMpCisJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZM
QUdTKSAtTU0gKi5jID4gJEAgMj4vZGV2L251bGwgfHwgOgorCitfX2hvc3Rwcm9ncyA6PSAkKHNv
cnQgJChob3N0cHJvZ3MteSkgJChob3N0cHJvZ3MtbSkpCitob3N0LWNzaW5nbGUgOj0gJChmb3Jl
YWNoIG0sJChfX2hvc3Rwcm9ncyksJChpZiAkKCQobSktb2JqcyksLCQobSkpKQoraG9zdC1jbXVs
dGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXAorICAgICAgICAgICAkKGlmICQoJCht
KS1jeHhvYmpzKSwsJChpZiAkKCQobSktb2JqcyksJChtKSkpKQoraG9zdC1jeHhtdWx0aSA6PSAk
KGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCisgICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9i
anMpLCQobSksJChpZiAkKCQobSktb2JqcyksKSkpCitob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4
ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkp
KQoraG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBt
LCQoX19ob3N0cHJvZ3MpLCQoJChtKS1jeHhvYmpzKSkpKQorCitIT1NUX0VYVFJBQ0ZMQUdTICs9
IC1JJChvYmopIC1EQ09ORklHXz1cIlwiCisKKyQoaG9zdC1jc2luZ2xlKTogJTogJS5jCisJJChI
T1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJEAp
ICQ8IC1vICQob2JqKS8kQAorCiskKGhvc3QtY211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhv
c3QtY3NobGliKQorCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykg
JChIT1NUQ0ZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykpICQoSE9T
VExPQURMSUJFU18kKEBGKSkgLW8gJChvYmopLyRACisKKyQoaG9zdC1jeHhtdWx0aSk6ICU6ICQo
aG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCisJJChIT1NUQ1hYKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEApICQoYWRk
cHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhPU1RMT0FE
TElCRVNfJChARikpIC1vICQob2JqKS8kQAorCiskKG9iaikvJS5vOiAlLmMKKwkkKEhPU1RDQykg
JChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMg
JDwgLW8gJEAKKworJChvYmopLyUubzogJChvYmopLyUuYworCSQoSE9TVENDKSAkKEhPU1RfRVhU
UkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAkPCAtbyAkQAor
CiskKG9iaikvJS5vOiAlLmNjCisJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NU
Q0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKworJChvYmopLyU6OiAk
KHNyYykvJV9zaGlwcGVkCisJJChRKWNhdCAkPCA+ICRACisKK2NsZWFuOgorCSQoUSlybSAtZiAk
KGFkZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQorZGlzdGNsZWFuOiBjbGVhbgorCSQo
USlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQobHhkaWFsb2cpICQoY29uZi1vYmpzKSAkKG1j
b25mLW9ianMpICQoa3hnZXR0ZXh0LW9ianMpIFwKKwkJJChob3N0cHJvZ3MteSkgJChxY29uZi1j
eHhvYmpzKSAkKHFjb25mLW9ianMpICQoZ2NvbmYtb2JqcykgXAorCQltY29uZiAuZGVwZW5kKQor
CitGT1JDRToKKy5QSE9OWTogRk9SQ0UgY2xlYW4gZGlzdGNsZWFuCmRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5icgpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMC4uZmZlMGJhOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyCkBAIC0wLDAgKzEsNTkg
QEAKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorbmV3IGZpbGUgbW9kZSAxMDA2NDQKK2luZGV4IDAw
MDAwMDAuLjQxYzVjZTEKKy0tLSAvZGV2L251bGwKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUuYnIKK0BAIC0wLDAgKzEsNTMgQEAKKytzcmMgOj0gLgorK3RvcF9zcmNkaXI9Li4v
Li4vCisrdG9wX2J1aWxkZGlyPS4uLy4uLworK3NyY3RyZWUgOj0gLgorK29iaiA/PSAuCisrCisr
aW5jbHVkZSBNYWtlZmlsZQorKyNIT1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5jbHVkZSBmb28u
aAorKy1pbmNsdWRlICQob2JqKS8uZGVwZW5kCisrJChvYmopLy5kZXBlbmQ6ICQod2lsZGNhcmQg
Ki5oICouYykKKysJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAt
TU0gKi5jID4gJEAgMj4vZGV2L251bGwgfHwgOgorKworK19faG9zdHByb2dzIDo9ICQoc29ydCAk
KGhvc3Rwcm9ncy15KSAkKGhvc3Rwcm9ncy1tKSkKKytob3N0LWNzaW5nbGUgOj0gJChmb3JlYWNo
IG0sJChfX2hvc3Rwcm9ncyksJChpZiAkKCQobSktb2JqcyksLCQobSkpKQorK2hvc3QtY211bHRp
IDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwKKysgICAgICAgICAgICQoaWYgJCgkKG0p
LWN4eG9ianMpLCwkKGlmICQoJChtKS1vYmpzKSwkKG0pKSkpCisraG9zdC1jeHhtdWx0aSA6PSAk
KGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCisrICAgICAgICAgICAkKGlmICQoJChtKS1jeHhv
YmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQorK2hvc3QtY29ianMgOj0gJChhZGRwcmVm
aXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMp
KSkpCisraG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFj
aCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1jeHhvYmpzKSkpKQorKworK0hPU1RfRVhUUkFDRkxB
R1MgKz0gLUkkKG9iaikgLURDT05GSUdfPVwiXCIKKysKKyskKGhvc3QtY3NpbmdsZSk6ICU6ICUu
YworKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENG
TEFHU18kQCkgJDwgLW8gJChvYmopLyRACisrCisrJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1j
b2JqcykgJChob3N0LWNzaGxpYikKKysJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChI
T1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJEApICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1v
YmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKysKKyskKGhvc3QtY3h4
bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQor
KwkkKEhPU1RDWFgpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhG
TEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpICQoJChARiktY3h4b2Jq
cykpICQoSE9TVExPQURMSUJFU18kKEBGKSkgLW8gJChvYmopLyRACisrCisrJChvYmopLyUubzog
JS5jCisrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NU
Q0ZMQUdTXyQoQEYpKSAtYyAkPCAtbyAkQAorKworKyQob2JqKS8lLm86ICQob2JqKS8lLmMKKysJ
JChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1Nf
JChARikpIC1jICQ8IC1vICRACisrCisrJChvYmopLyUubzogJS5jYworKwkkKEhPU1RDQykgJChI
T1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoQEYpKSAtYyAk
PCAtbyAkQAorKworKyQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZAorKwkkKFEpY2F0ICQ8ID4g
JEAKKysKKytjbGVhbjoKKysJJChRKXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1m
aWxlcykpCisrZGlzdGNsZWFuOiBjbGVhbgorKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmop
LywkKGx4ZGlhbG9nKSAkKGNvbmYtb2JqcykgJChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpz
KSBcCisrCQkkKGhvc3Rwcm9ncy15KSAkKHFjb25mLWN4eG9ianMpICQocWNvbmYtb2JqcykgJChn
Y29uZi1vYmpzKSBcCisrCQltY29uZiAuZGVwZW5kKQorKworK0ZPUkNFOgorKy5QSE9OWTogRk9S
Q0UgY2xlYW4gZGlzdGNsZWFuCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NxS-0003aO-1y; Mon, 09 Sep 2019 18:00:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NxR-0003aA-9U
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:09 +0000
X-Inumbo-ID: a8cd868c-d32b-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a8cd868c-d32b-11e9-b76c-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:08 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CFF84F2028;
 Mon,  9 Sep 2019 20:00:07 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id BCfALht94cHa; Mon,  9 Sep 2019 20:00:07 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 9E9C1F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:05 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:59:58 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:18 +0200
Message-ID: <20190909175939.23936-3-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 02/23] kconfig: Introduce
 README.unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQgfCAyMSArKysrKysr
KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQKCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdCBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvUkVBRE1FLnVuaWtyYWZ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
Li5kZTM3ZjlmYwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvUkVBRE1F
LnVuaWtyYWZ0CkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgaXMgYSBjb3B5IG9mIHRoZSBrY29uZmln
IGNvZGUgaW4gdGhlIGtlcm5lbCAoY3VycmVudGx5IHY1LjIpIHR3ZWFrZWQKK3RvIHN1aXQgVW5p
a3JhZnQuCisKK1RvIHVwZGF0ZSAoZnJvbSBsaW51eCk6CisJY3AgLXIgL3Vzci9zcmMvbGludXgv
c2NyaXB0cy9rY29uZmlnIHN1cHBvcnQva2NvbmZpZy5uZXcKKwljZCBzdXBwb3J0L2tjb25maWcu
bmV3CisJY3AgLWEgLi4va2NvbmZpZy9wYXRjaGVzIC4uL2tjb25maWcvUkVBRE1FLnVuaWtyYWZ0
IC4uL2tjb25maWcvLmdpdGlnbm9yZSAuCisJcXVpbHQgcHVzaCAtYQorCSMgRml4IGFueSBjb25m
bGljdAorCWNkIC4uCisJcm0gLXJmIGtjb25maWcKKwltdiBrY29uZmlnLm5ldyBrY29uZmlnCisK
K1RoZW4gdmVyaWZ5IHRoZSB0b3BsZXZlbCB0YXJnZXRzIHdvcms6CisJY29uZmlnCisJZGVmY29u
ZmlnCisJbWVudWNvbmZpZworCXhjb25maWcKKwlnY29uZmlnCisJb2xkY29uZmlnCisJcWNvbmZp
ZwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxc-0003by-C3; Mon, 09 Sep 2019 18:00:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxb-0003bq-2O
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:19 +0000
X-Inumbo-ID: ae1f9135-d32b-11e9-ac12-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ae1f9135-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:18 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 0F4B710568F;
 Mon,  9 Sep 2019 20:00:17 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 80n60sMhOpfZ; Mon,  9 Sep 2019 20:00:16 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id E3B681047B8
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:16 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:16 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:21 +0200
Message-ID: <20190909175939.23936-6-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 05/23] kbuild: Add build helper
 function from Linux
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0IE1ha2VmaWxlLnJ1bGVzIGZyb20gc2NyaXB0cy9rYnVpbGQuaW5jbHVkZS4KVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAg
ICAgfCAgIDEgKwogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcyAgICAgICAgICAg
IHwgIDg0ICsrKysrKysrKysrKysrKwogLi4uLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZy
b20ta2VybmVsICAgIHwgMTAyICsrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAx
ODcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUucnVsZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Bh
dGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwKCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9N
YWtlZmlsZS5icgppbmRleCA0MWM1Y2UxNi4uMGZkYmU5YWIgMTAwNjQ0Ci0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5icgpAQCAtNCw2ICs0LDcgQEAgdG9wX2J1aWxkZGlyPS4uLy4uLwogc3JjdHJlZSA6PSAuCiBv
YmogPz0gLgogCitpbmNsdWRlIE1ha2VmaWxlLnJ1bGVzCiBpbmNsdWRlIE1ha2VmaWxlCiAjSE9T
VENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKIC1pbmNsdWRlICQob2JqKS8uZGVw
ZW5kCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMC4uNzhhOWM4MWQKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L01ha2VmaWxlLnJ1bGVzCkBAIC0wLDAgKzEsODQgQEAKK2tlY2hvIDo9IGVjaG8KK2NvbW1h
IDo9ICwKKworCitkb3QtdGFyZ2V0ID0gJChkaXIgJEApLiQobm90ZGlyICRAKQorCithbnktcHJl
cmVxID0gJChmaWx0ZXItb3V0ICQoUEhPTlkpLCQ/KSAkKGZpbHRlci1vdXQgJChQSE9OWSkgJCh3
aWxkY2FyZCAkXiksJF4pCisKK2FyZy1jaGVjayA9ICQoaWYgJChzdHJpcCAkKGNtZF8kQCkpLCwx
KQorCittYWtlLWNtZCA9ICQoY2FsbCBlc2NzcSwkKHN1YnN0ICQocG91bmQpLCQkKHBvdW5kKSwk
KHN1YnN0ICQkLCQkJCQsJChjbWRfJCgxKSkpKSkKKworIyBwcmludGluZyBjb21tYW5kcworY21k
ID0gQHNldCAtZTsgJChlY2hvLWNtZCkgJChjbWRfJCgxKSkKKworZGVwZmlsZSA9ICQoc3Vic3Qg
JChjb21tYSksXywkKGRvdC10YXJnZXQpLmQpCitkZXBmbGFncyA9IC1XcCQoY29tbWEpLU1EJChj
b21tYSkkKGNhbGwgZG90LXRhcmdldCkKKworY21kX2FuZF9maXhkZXAgPSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkkKGNtZCk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkkKG9iaikvZml4
ZGVwICQoZGVwZmlsZSkgJEAgJyQobWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kO1wKKwly
bSAtZiAkKGRlcGZpbGUpCisKK2lmX2NoYW5nZWRfZGVwID0gJChpZiAkKHN0cmlwICQoYW55LXBy
ZXJlcSkgJChhcmctY2hlY2spKSwkKGNtZF9hbmRfZml4ZGVwKSxAOikKKworZGVmaW5lIG11bHRp
X2RlcGVuZAorJChmb3JlYWNoIG0sICQobm90ZGlyICQxKSwgXAorICAgICQoZXZhbCAkKG9iaikv
JG06IFwKKyAgICAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGZvcmVhY2ggcywgJDMsICQoJChtOiUk
KHN0cmlwICQyKT0lJChzKSkpKSkpKQorZW5kZWYKKworIyMjCisjIGZpbGVjaGsgaXMgdXNlZCB0
byBjaGVjayBpZiB0aGUgY29udGVudCBvZiBhIGdlbmVyYXRlZCBmaWxlIGlzIHVwZGF0ZWQuCisj
IFNhbXBsZSB1c2FnZToKKyMKKyMgZmlsZWNoa19zYW1wbGUgPSBlY2hvICQoS0VSTkVMUkVMRUFT
RSkKKyMgdmVyc2lvbi5oOiBGT1JDRQorIyAgICQoY2FsbCBmaWxlY2hrLHNhbXBsZSkKKyMKKyMg
VGhlIHJ1bGUgZGVmaW5lZCBzaGFsbCB3cml0ZSB0byBzdGRvdXQgdGhlIGNvbnRlbnQgb2YgdGhl
IG5ldyBmaWxlLgorIyBUaGUgZXhpc3RpbmcgZmlsZSB3aWxsIGJlIGNvbXBhcmVkIHdpdGggdGhl
IG5ldyBvbmUuCisjIC0gSWYgbm8gZmlsZSBleGlzdCBpdCBpcyBjcmVhdGVkCisjIC0gSWYgdGhl
IGNvbnRlbnQgZGlmZmVyIHRoZSBuZXcgZmlsZSBpcyB1c2VkCisjIC0gSWYgdGhleSBhcmUgZXF1
YWwgbm8gY2hhbmdlLCBhbmQgbm8gdGltZXN0YW1wIHVwZGF0ZQorIyAtIHN0ZGluIGlzIHBpcGVk
IGluIGZyb20gdGhlIGZpcnN0IHByZXJlcXVpc2l0ZSAoJDwpIHNvIG9uZSBoYXMKKyMgICB0byBz
cGVjaWZ5IGEgdmFsaWQgZmlsZSBhcyBmaXJzdCBwcmVyZXF1aXNpdGUgKG9mdGVuIHRoZSBrYnVp
bGQgZmlsZSkKK2RlZmluZSBmaWxlY2hrCisJJChRKXNldCAtZTsgICAgICAgICAgICAgXAorCW1r
ZGlyIC1wICQoZGlyICRAKTsgICAgICAgICBcCisJeyAkKGZpbGVjaGtfJCgxKSk7IH0gPiAkQC50
bXA7ICAgICAgXAorCWlmIFsgLXIgJEAgXSAmJiBjbXAgLXMgJEAgJEAudG1wOyB0aGVuICBcCisJ
ICAgIHJtIC1mICRALnRtcDsgICAgICAgICAgIFwKKwllbHNlICAgICAgICAgICAgICAgICAgICBc
CisJICAgICQoa2VjaG8pICcgIFVQRCAgICAgJEAnOyAgICBcCisJICAgIG12IC1mICRALnRtcCAk
QDsgICAgICAgIFwKKwlmaQorZW5kZWYKKworIyBFeGVjdXRlIGNvbW1hbmQgaWYgY29tbWFuZCBo
YXMgY2hhbmdlZCBvciBwcmVyZXF1aXNpdGUocykgYXJlIHVwZGF0ZWQuCitpZl9jaGFuZ2VkID0g
JChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwJCVwKKwkkKGNtZCk7XAor
CXByaW50ZiAnJXNcbicgJ2NtZF8kQCA6PSAkKG1ha2UtY21kKScgPiAkKGRvdC10YXJnZXQpLmNt
ZCwgQDopCisKKyMgTEVYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcXVpZXRfY21kX2ZsZXggPSBM
RVggJEAKK2NtZF9mbGV4ID0gJChMRVgpIC1vJEAgLUwgJDwKKworJChvYmopLyUubGV4LmM6ICQo
c3JjKS8lLmwgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxmbGV4KQorCisjIFlBQ0MKKyMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCitxdWlldF9jbWRfYmlzb24gPSBZQUNDICAgICRACitjbWRfYmlzb24g
PSAkKFlBQ0MpIC1vJEAgLXQgLWwgJDwKKworJChvYmopLyUudGFiLmM6ICQoc3JjKS8lLnkgRk9S
Q0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiaXNvbikKKworcXVpZXRfY21kX2Jpc29uX2ggPSBZQUND
ICAgICRACitjbWRfYmlzb25faCA9ICQoWUFDQykgLW8vZGV2L251bGwgLS1kZWZpbmVzPSRAIC10
IC1sICQ8CisKKyQob2JqKS8lLnRhYi5oOiAkKHNyYykvJS55IEZPUkNFCisJJChjYWxsIGlmX2No
YW5nZWQsYmlzb25faCkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8w
My1pbmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbCBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcGF0Y2hlcy8wMy1pbmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMzVjNzlmOGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXIt
ZnJvbS1rZXJuZWwKQEAgLTAsMCArMSwxMDIgQEAKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgoraW5k
ZXggNDFjNWNlMS4uMGZkYmU5YSAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFr
ZWZpbGUuYnIKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK0BAIC00LDYg
KzQsNyBAQCB0b3BfYnVpbGRkaXI9Li4vLi4vCisgc3JjdHJlZSA6PSAuCisgb2JqID89IC4KKyAK
KytpbmNsdWRlIE1ha2VmaWxlLnJ1bGVzCisgaW5jbHVkZSBNYWtlZmlsZQorICNIT1NUQ0ZMQUdT
Kz0tRGlubGluZT0iIiAtaW5jbHVkZSBmb28uaAorIC1pbmNsdWRlICQob2JqKS8uZGVwZW5kCitk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUucnVsZXMKK25ldyBmaWxlIG1vZGUgMTAwNjQ0CitpbmRleCAw
MDAwMDAwLi43OGE5YzgxCistLS0gL2Rldi9udWxsCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLnJ1bGVzCitAQCAtMCwwICsxLDg0IEBACisra2VjaG8gOj0gZWNobworK2NvbW1h
IDo9ICwKKysKKysKKytkb3QtdGFyZ2V0ID0gJChkaXIgJEApLiQobm90ZGlyICRAKQorKworK2Fu
eS1wcmVyZXEgPSAkKGZpbHRlci1vdXQgJChQSE9OWSksJD8pICQoZmlsdGVyLW91dCAkKFBIT05Z
KSAkKHdpbGRjYXJkICReKSwkXikKKysKKythcmctY2hlY2sgPSAkKGlmICQoc3RyaXAgJChjbWRf
JEApKSwsMSkKKysKKyttYWtlLWNtZCA9ICQoY2FsbCBlc2NzcSwkKHN1YnN0ICQocG91bmQpLCQk
KHBvdW5kKSwkKHN1YnN0ICQkLCQkJCQsJChjbWRfJCgxKSkpKSkKKysKKysjIHByaW50aW5nIGNv
bW1hbmRzCisrY21kID0gQHNldCAtZTsgJChlY2hvLWNtZCkgJChjbWRfJCgxKSkKKysKKytkZXBm
aWxlID0gJChzdWJzdCAkKGNvbW1hKSxfLCQoZG90LXRhcmdldCkuZCkKKytkZXBmbGFncyA9IC1X
cCQoY29tbWEpLU1EJChjb21tYSkkKGNhbGwgZG90LXRhcmdldCkKKysKKytjbWRfYW5kX2ZpeGRl
cCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKwkk
KGNtZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKysJJChvYmopL2ZpeGRlcCAkKGRlcGZpbGUpICRAICckKG1ha2UtY21kKScgPiAkKGRv
dC10YXJnZXQpLmNtZDtcCisrCXJtIC1mICQoZGVwZmlsZSkKKysKKytpZl9jaGFuZ2VkX2RlcCA9
ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSksJChjbWRfYW5kX2ZpeGRl
cCksQDopCisrCisrZGVmaW5lIG11bHRpX2RlcGVuZAorKyQoZm9yZWFjaCBtLCAkKG5vdGRpciAk
MSksIFwKKysgICAgJChldmFsICQob2JqKS8kbTogXAorKyAgICAkKGFkZHByZWZpeCAkKG9iaikv
LCAkKGZvcmVhY2ggcywgJDMsICQoJChtOiUkKHN0cmlwICQyKT0lJChzKSkpKSkpKQorK2VuZGVm
CisrCisrIyMjCisrIyBmaWxlY2hrIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGNvbnRlbnQgb2Yg
YSBnZW5lcmF0ZWQgZmlsZSBpcyB1cGRhdGVkLgorKyMgU2FtcGxlIHVzYWdlOgorKyMKKysjIGZp
bGVjaGtfc2FtcGxlID0gZWNobyAkKEtFUk5FTFJFTEVBU0UpCisrIyB2ZXJzaW9uLmg6IEZPUkNF
CisrIyAgICQoY2FsbCBmaWxlY2hrLHNhbXBsZSkKKysjCisrIyBUaGUgcnVsZSBkZWZpbmVkIHNo
YWxsIHdyaXRlIHRvIHN0ZG91dCB0aGUgY29udGVudCBvZiB0aGUgbmV3IGZpbGUuCisrIyBUaGUg
ZXhpc3RpbmcgZmlsZSB3aWxsIGJlIGNvbXBhcmVkIHdpdGggdGhlIG5ldyBvbmUuCisrIyAtIElm
IG5vIGZpbGUgZXhpc3QgaXQgaXMgY3JlYXRlZAorKyMgLSBJZiB0aGUgY29udGVudCBkaWZmZXIg
dGhlIG5ldyBmaWxlIGlzIHVzZWQKKysjIC0gSWYgdGhleSBhcmUgZXF1YWwgbm8gY2hhbmdlLCBh
bmQgbm8gdGltZXN0YW1wIHVwZGF0ZQorKyMgLSBzdGRpbiBpcyBwaXBlZCBpbiBmcm9tIHRoZSBm
aXJzdCBwcmVyZXF1aXNpdGUgKCQ8KSBzbyBvbmUgaGFzCisrIyAgIHRvIHNwZWNpZnkgYSB2YWxp
ZCBmaWxlIGFzIGZpcnN0IHByZXJlcXVpc2l0ZSAob2Z0ZW4gdGhlIGtidWlsZCBmaWxlKQorK2Rl
ZmluZSBmaWxlY2hrCisrCSQoUSlzZXQgLWU7ICAgICAgICAgICAgIFwKKysJbWtkaXIgLXAgJChk
aXIgJEApOyAgICAgICAgIFwKKysJeyAkKGZpbGVjaGtfJCgxKSk7IH0gPiAkQC50bXA7ICAgICAg
XAorKwlpZiBbIC1yICRAIF0gJiYgY21wIC1zICRAICRALnRtcDsgdGhlbiAgXAorKwkgICAgcm0g
LWYgJEAudG1wOyAgICAgICAgICAgXAorKwllbHNlICAgICAgICAgICAgICAgICAgICBcCisrCSAg
ICAkKGtlY2hvKSAnICBVUEQgICAgICRAJzsgICAgXAorKwkgICAgbXYgLWYgJEAudG1wICRAOyAg
ICAgICAgXAorKwlmaQorK2VuZGVmCisrCisrIyBFeGVjdXRlIGNvbW1hbmQgaWYgY29tbWFuZCBo
YXMgY2hhbmdlZCBvciBwcmVyZXF1aXNpdGUocykgYXJlIHVwZGF0ZWQuCisraWZfY2hhbmdlZCA9
ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSksCQlcCisrCSQoY21kKTtc
CisrCXByaW50ZiAnJXNcbicgJ2NtZF8kQCA6PSAkKG1ha2UtY21kKScgPiAkKGRvdC10YXJnZXQp
LmNtZCwgQDopCisrCisrIyBMRVgKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK3F1aWV0X2NtZF9m
bGV4ID0gTEVYICRACisrY21kX2ZsZXggPSAkKExFWCkgLW8kQCAtTCAkPAorKworKyQob2JqKS8l
LmxleC5jOiAkKHNyYykvJS5sIEZPUkNFCisrCSQoY2FsbCBpZl9jaGFuZ2VkLGZsZXgpCisrCisr
IyBZQUNDCisrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKytxdWlldF9jbWRfYmlzb24gPSBZQUNDICAg
ICRACisrY21kX2Jpc29uID0gJChZQUNDKSAtbyRAIC10IC1sICQ8CisrCisrJChvYmopLyUudGFi
LmM6ICQoc3JjKS8lLnkgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWQsYmlzb24pCisrCisrcXVp
ZXRfY21kX2Jpc29uX2ggPSBZQUNDICAgICRACisrY21kX2Jpc29uX2ggPSAkKFlBQ0MpIC1vL2Rl
di9udWxsIC0tZGVmaW5lcz0kQCAtdCAtbCAkPAorKworKyQob2JqKS8lLnRhYi5oOiAkKHNyYykv
JS55IEZPUkNFCisrCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uX2gpCi0tIAoyLjIwLjEKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxd-0003cS-Eq; Mon, 09 Sep 2019 18:00:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxc-0003cB-JC
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:20 +0000
X-Inumbo-ID: af9c2734-d32b-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id af9c2734-d32b-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 46A89F2027;
 Mon,  9 Sep 2019 20:00:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id iEAYwWu-H3hS; Mon,  9 Sep 2019 20:00:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1F2BCF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:17 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:16 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:22 +0200
Message-ID: <20190909175939.23936-7-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 06/23] kconfig: Removing the
 generic rule
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGdlbmVyaWMgcnVsZSB0byBidWlsZCBjIGFuZCBjYyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCB0
byBidWlsZCB0aGUKa2NvbmZpZyB0b29scy4gSXQgdXNlcyBmaXhkZXAgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBjb25maWcgdG9vbCBoYXMgdG8gYmUKYnVpbHQgYW5kIGV4ZWN1dGUgdGhlIGJ1aWxkIGNv
bW1hbmQgYXMgbmVjZXNzYXJ5LgoKU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hh
cmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5iciAgICAgICAgICAgICAgIHwgMTIgLS0tLS0tLS0tCiAuLi4vcGF0Y2hlcy8wNC1yZW1vdmUt
Z2VuZXJpYy1ydWxlICAgICAgICAgICAgfCAyNiArKysrKysrKysrKysrKysrKysrCiAyIGZpbGVz
IGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxl
CgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKaW5kZXggMGZkYmU5YWIuLmMxMWYyOTcxIDEwMDY0NAot
LS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisrKyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnIKQEAgLTMxLDE4ICszMSw2IEBAICQoaG9zdC1jbXVsdGkpOiAlOiAk
KGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCiAkKGhvc3QtY3h4bXVsdGkpOiAlOiAkKGhvc3Qt
Y3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQogCSQoSE9TVENYWCkgJChIT1NU
X0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZp
eCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVT
XyQoQEYpKSAtbyAkKG9iaikvJEAKIAotJChvYmopLyUubzogJS5jCi0JJChIT1NUQ0MpICQoSE9T
VF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1v
ICRACi0KLSQob2JqKS8lLm86ICQob2JqKS8lLmMKLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZM
QUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKLQotJChv
YmopLyUubzogJS5jYwotCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFH
UykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRACi0KLSQob2JqKS8lOjogJChzcmMp
LyVfc2hpcHBlZAotCSQoUSljYXQgJDwgPiAkQAotCiBjbGVhbjoKIAkkKFEpcm0gLWYgJChhZGRw
cmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKIGRpc3RjbGVhbjogY2xlYW4KZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjNkZTBjYjE2Ci0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKQEAg
LTAsMCArMSwyNiBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUu
YnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCitpbmRleCAwZmRiZTlhLi5jMTFm
Mjk3IDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorQEAgLTMxLDE4ICszMSw2IEBAICQoaG9z
dC1jbXVsdGkpOiAlOiAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCisgJChob3N0LWN4eG11
bHRpKTogJTogJChob3N0LWN4eG9ianMpICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikKKyAJ
JChIT1NUQ1hYKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxB
R1NfJEApICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMp
KSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorIAorLSQob2JqKS8lLm86ICUu
YworLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENG
TEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKy0KKy0kKG9iaikvJS5vOiAkKG9iaikvJS5jCistCSQo
SE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQo
QEYpKSAtYyAkPCAtbyAkQAorLQorLSQob2JqKS8lLm86ICUuY2MKKy0JJChIT1NUQ0MpICQoSE9T
VF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kKEBGKSkgLWMgJDwg
LW8gJEAKKy0KKy0kKG9iaikvJTo6ICQoc3JjKS8lX3NoaXBwZWQKKy0JJChRKWNhdCAkPCA+ICRA
CistCisgY2xlYW46CisgCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmls
ZXMpKQorIGRpc3RjbGVhbjogY2xlYW4KK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0
Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXgg
MDAwMDAwMC4uZTY5ZGUyOQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxh-0003dR-Gt; Mon, 09 Sep 2019 18:00:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxg-0003d6-7i
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:24 +0000
X-Inumbo-ID: b0dac510-d32b-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b0dac510-d32b-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:22 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5C1AAF2027;
 Mon,  9 Sep 2019 20:00:21 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 8oG-rYPLaWzz; Mon,  9 Sep 2019 20:00:21 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 2DC4DF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:19 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:16 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:23 +0200
Message-ID: <20190909175939.23936-8-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 07/23] kconfig: Import fixdep
 from Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0IGZpeGRlcCBmcm9tIHRoZSBsaW51eCBrZXJuZWwuClRhZyB2NS4yCgpTaWduZWQtb2Zm
LWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBz
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIHwgICA3ICsKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvZml4ZGVwLmMgICAgfCAzNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIg
ZmlsZXMgY2hhbmdlZCwgMzg2IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L2ZpeGRlcC5jCgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKaW5kZXggYzEx
ZjI5NzEuLjU4ZTZlNzUwIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTE5LDYgKzE5LDcg
QEAgaG9zdC1jeHhtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCiAgICAgICAg
ICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQobSktb2JqcyksKSkpCiBob3N0
LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0
cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQogaG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2Jq
KS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1jeHhvYmpzKSkpKQor
Zml4ZGVwLW9ianMgOj0gJChvYmopL2ZpeGRlcC5vCiAKIEhPU1RfRVhUUkFDRkxBR1MgKz0gLUkk
KG9iaikgLURDT05GSUdfPVwiXCIKIApAQCAtMzEsNiArMzIsMTIgQEAgJChob3N0LWNtdWx0aSk6
ICU6ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikKICQoaG9zdC1jeHhtdWx0aSk6ICU6ICQo
aG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCiAJJChIT1NUQ1hYKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEApICQoYWRk
cHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhPU1RMT0FE
TElCRVNfJChARikpIC1vICQob2JqKS8kQAogCiskKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpz
KQorCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZM
QUdTXyQoQEYpKSAkPCAtbyAkQAorCiskKGZpeGRlcC1vYmpzKTogJChzcmMpL2ZpeGRlcC5jCisJ
JChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1Nf
JChARikpIC1jICQ8IC1vICRACisKIGNsZWFuOgogCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9i
aikvLCQoY2xlYW4tZmlsZXMpKQogZGlzdGNsZWFuOiBjbGVhbgpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9maXhkZXAuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmZhY2JkNjAzCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYwpAQCAtMCwwICsxLDM3OSBAQAorLyoK
KyAqICJPcHRpbWl6ZSIgYSBsaXN0IG9mIGRlcGVuZGVuY2llcyBhcyBzcGl0IG91dCBieSBnY2Mg
LU1ECisgKiBmb3IgdGhlIGtlcm5lbCBidWlsZAorICogPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgor
ICogQXV0aG9yICAgICAgIEthaSBHZXJtYXNjaGV3c2tpCisgKiBDb3B5cmlnaHQgICAgMjAwMiBi
eSBLYWkgR2VybWFzY2hld3NraSAgPGthaS5nZXJtYXNjaGV3c2tpQGdteC5kZT4KKyAqCisgKiBU
aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhl
IHRlcm1zCisgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRl
ZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgorICoKKyAqCisgKiBJbnRyb2R1Y3Rpb246CisgKgorICog
Z2NjIHByb2R1Y2VzIGEgdmVyeSBuaWNlIGFuZCBjb3JyZWN0IGxpc3Qgb2YgZGVwZW5kZW5jaWVz
IHdoaWNoCisgKiB0ZWxscyBtYWtlIHdoZW4gdG8gcmVtYWtlIGEgZmlsZS4KKyAqCisgKiBUbyB1
c2UgdGhpcyBsaXN0IGFzLWlzIGhvd2V2ZXIgaGFzIHRoZSBkcmF3YmFjayB0aGF0IHZpcnR1YWxs
eQorICogZXZlcnkgZmlsZSBpbiB0aGUga2VybmVsIGluY2x1ZGVzIGF1dG9jb25mLmguCisgKgor
ICogSWYgdGhlIHVzZXIgcmUtcnVucyBtYWtlICpjb25maWcsIGF1dG9jb25mLmggd2lsbCBiZQor
ICogcmVnZW5lcmF0ZWQuICBtYWtlIG5vdGljZXMgdGhhdCBhbmQgd2lsbCByZWJ1aWxkIGV2ZXJ5
IGZpbGUgd2hpY2gKKyAqIGluY2x1ZGVzIGF1dG9jb25mLmgsIGkuZS4gYmFzaWNhbGx5IGFsbCBm
aWxlcy4gVGhpcyBpcyBleHRyZW1lbHkKKyAqIGFubm95aW5nIGlmIHRoZSB1c2VyIGp1c3QgY2hh
bmdlZCBDT05GSUdfSElTX0RSSVZFUiBmcm9tIG4gdG8gbS4KKyAqCisgKiBTbyB3ZSBwbGF5IHRo
ZSBzYW1lIHRyaWNrIHRoYXQgIm1rZGVwIiBwbGF5ZWQgYmVmb3JlLiBXZSByZXBsYWNlCisgKiB0
aGUgZGVwZW5kZW5jeSBvbiBhdXRvY29uZi5oIGJ5IGEgZGVwZW5kZW5jeSBvbiBldmVyeSBjb25m
aWcKKyAqIG9wdGlvbiB3aGljaCBpcyBtZW50aW9uZWQgaW4gYW55IG9mIHRoZSBsaXN0ZWQgcHJl
cmVxdWlzaXRlcy4KKyAqCisgKiBrY29uZmlnIHBvcHVsYXRlcyBhIHRyZWUgaW4gaW5jbHVkZS9j
b25maWcvIHdpdGggYW4gZW1wdHkgZmlsZQorICogZm9yIGVhY2ggY29uZmlnIHN5bWJvbCBhbmQg
d2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyB1cGRhdGVkCisgKiB0aGUgZmlsZXMgcmVwcmVzZW50
aW5nIGNoYW5nZWQgY29uZmlnIG9wdGlvbnMgYXJlIHRvdWNoZWQKKyAqIHdoaWNoIHRoZW4gbGV0
IG1ha2UgcGljayB1cCB0aGUgY2hhbmdlcyBhbmQgdGhlIGZpbGVzIHRoYXQgdXNlCisgKiB0aGUg
Y29uZmlnIHN5bWJvbHMgYXJlIHJlYnVpbHQuCisgKgorICogU28gaWYgdGhlIHVzZXIgY2hhbmdl
cyBoaXMgQ09ORklHX0hJU19EUklWRVIgb3B0aW9uLCBvbmx5IHRoZSBvYmplY3RzCisgKiB3aGlj
aCBkZXBlbmQgb24gImluY2x1ZGUvY29uZmlnL2hpcy9kcml2ZXIuaCIgd2lsbCBiZSByZWJ1aWx0
LAorICogc28gbW9zdCBsaWtlbHkgb25seSBoaXMgZHJpdmVyIDstKQorICoKKyAqIFRoZSBpZGVh
IGFib3ZlIGRhdGVzLCBieSB0aGUgd2F5LCBiYWNrIHRvIE1pY2hhZWwgRSBDaGFzdGFpbiwgQUZB
SUsuCisgKgorICogU28gdG8gZ2V0IGRlcGVuZGVuY2llcyByaWdodCwgdGhlcmUgYXJlIHR3byBp
c3N1ZXM6CisgKiBvIGlmIGFueSBvZiB0aGUgZmlsZXMgdGhlIGNvbXBpbGVyIHJlYWQgY2hhbmdl
ZCwgd2UgbmVlZCB0byByZWJ1aWxkCisgKiBvIGlmIHRoZSBjb21tYW5kIGxpbmUgZ2l2ZW4gdG8g
dGhlIGNvbXBpbGUgdGhlIGZpbGUgY2hhbmdlZCwgd2UKKyAqICAgYmV0dGVyIHJlYnVpbGQgYXMg
d2VsbC4KKyAqCisgKiBUaGUgZm9ybWVyIGlzIGhhbmRsZWQgYnkgdXNpbmcgdGhlIC1NRCBvdXRw
dXQsIHRoZSBsYXRlciBieSBzYXZpbmcKKyAqIHRoZSBjb21tYW5kIGxpbmUgdXNlZCB0byBjb21w
aWxlIHRoZSBvbGQgb2JqZWN0IGFuZCBjb21wYXJpbmcgaXQKKyAqIHRvIHRoZSBvbmUgd2Ugd291
bGQgbm93IHVzZS4KKyAqCisgKiBBZ2FpbiwgYWxzbyB0aGlzIGlkZWEgaXMgcHJldHR5IG9sZCBh
bmQgaGFzIGJlZW4gZGlzY3Vzc2VkIG9uCisgKiBrYnVpbGQtZGV2ZWwgYSBsb25nIHRpbWUgYWdv
LiBJIGRvbid0IGhhdmUgYSBzZW5zaWJseSB3b3JraW5nCisgKiBpbnRlcm5ldCBjb25uZWN0aW9u
IHJpZ2h0IG5vdywgc28gSSByYXRoZXIgZG9uJ3QgbWVudGlvbiBuYW1lcworICogd2l0aG91dCBk
b3VibGUgY2hlY2tpbmcuCisgKgorICogVGhpcyBjb2RlIGhlcmUgaGFzIGJlZW4gYmFzZWQgcGFy
dGlhbGx5IGJhc2VkIG9uIG1rZGVwLmMsIHdoaWNoCisgKiBzYXlzIHRoZSBmb2xsb3dpbmcgYWJv
dXQgaXRzIGhpc3Rvcnk6CisgKgorICogICBDb3B5cmlnaHQgYWJhbmRvbmVkLCBNaWNoYWVsIENo
YXN0YWluLCA8bWFpbHRvOm1lY0BzaG91dC5uZXQ+LgorICogICBUaGlzIGlzIGEgQyB2ZXJzaW9u
IG9mIHN5bmNkZXAucGwgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLgorICoKKyAqCisgKiBJdCBpcyBp
bnZva2VkIGFzCisgKgorICogICBmaXhkZXAgPGRlcGZpbGU+IDx0YXJnZXQ+IDxjbWRsaW5lPgor
ICoKKyAqIGFuZCB3aWxsIHJlYWQgdGhlIGRlcGVuZGVuY3kgZmlsZSA8ZGVwZmlsZT4KKyAqCisg
KiBUaGUgdHJhbnNmb3JtZWQgZGVwZW5kZW5jeSBzbmlwcGVkIGlzIHdyaXR0ZW4gdG8gc3Rkb3V0
LgorICoKKyAqIEl0IGZpcnN0IGdlbmVyYXRlcyBhIGxpbmUKKyAqCisgKiAgIGNtZF88dGFyZ2V0
PiA9IDxjbWRsaW5lPgorICoKKyAqIGFuZCB0aGVuIGJhc2ljYWxseSBjb3BpZXMgdGhlIC48dGFy
Z2V0Pi5kIGZpbGUgdG8gc3Rkb3V0LCBpbiB0aGUKKyAqIHByb2Nlc3MgZmlsdGVyaW5nIG91dCB0
aGUgZGVwZW5kZW5jeSBvbiBhdXRvY29uZi5oIGFuZCBhZGRpbmcKKyAqIGRlcGVuZGVuY2llcyBv
biBpbmNsdWRlL2NvbmZpZy9teS9vcHRpb24uaCBmb3IgZXZlcnkKKyAqIENPTkZJR19NWV9PUFRJ
T04gZW5jb3VudGVyZWQgaW4gYW55IG9mIHRoZSBwcmVyZXF1aXNpdGVzLgorICoKKyAqIEl0IHdp
bGwgYWxzbyBmaWx0ZXIgb3V0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIG9uICoudmVyLiBXZSBuZWVk
CisgKiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkIHZlcnNpb24gY2hlY2tzdW0gYXJl
IGdsb2JhbGx5IHVwCisgKiB0byBkYXRlIGJlZm9yZSBldmVuIHN0YXJ0aW5nIHRoZSByZWN1cnNp
dmUgYnVpbGQsIHNvIGl0J3MgdG9vIGxhdGUKKyAqIGF0IHRoaXMgcG9pbnQgYW55d2F5LgorICoK
KyAqIFdlIGRvbid0IGV2ZW4gdHJ5IHRvIHJlYWxseSBwYXJzZSB0aGUgaGVhZGVyIGZpbGVzLCBi
dXQKKyAqIG1lcmVseSBncmVwLCBpLmUuIGlmIENPTkZJR19GT08gaXMgbWVudGlvbmVkIGluIGEg
Y29tbWVudCwgaXQgd2lsbAorICogYmUgcGlja2VkIHVwIGFzIHdlbGwuIEl0J3Mgbm90IGEgcHJv
YmxlbSB3aXRoIHJlc3BlY3QgdG8KKyAqIGNvcnJlY3RuZXNzLCBzaW5jZSB0aGF0IGNhbiBvbmx5
IGdpdmUgdG9vIG1hbnkgZGVwZW5kZW5jaWVzLCB0aHVzCisgKiB3ZSBjYW5ub3QgbWlzcyBhIHJl
YnVpbGQuIFNpbmNlIHBlb3BsZSB0ZW5kIHRvIG5vdCBtZW50aW9uIHRvdGFsbHkKKyAqIHVucmVs
YXRlZCBDT05GSUdfIG9wdGlvbnMgYWxsIG92ZXIgdGhlIHBsYWNlLCBpdCdzIG5vdCBhbgorICog
ZWZmaWNpZW5jeSBwcm9ibGVtIGVpdGhlci4KKyAqCisgKiAoTm90ZTogaXQnZCBiZSBlYXN5IHRv
IHBvcnQgb3ZlciB0aGUgY29tcGxldGUgbWtkZXAgc3RhdGUgbWFjaGluZSwKKyAqICBidXQgSSBk
b24ndCB0aGluayB0aGUgYWRkZWQgY29tcGxleGl0eSBpcyB3b3J0aCBpdCkKKyAqLworCisjaW5j
bHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworc3Rh
dGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBmaXhkZXAg
PGRlcGZpbGU+IDx0YXJnZXQ+IDxjbWRsaW5lPlxuIik7CisJZXhpdCgxKTsKK30KKworLyoKKyAq
IFByaW50IG91dCBhIGRlcGVuZGVuY3kgcGF0aCBmcm9tIGEgc3ltYm9sIG5hbWUKKyAqLworc3Rh
dGljIHZvaWQgcHJpbnRfZGVwKGNvbnN0IGNoYXIgKm0sIGludCBzbGVuLCBjb25zdCBjaGFyICpk
aXIpCit7CisJaW50IGMsIHByZXZfYyA9ICcvJywgaTsKKworCXByaW50ZigiICAgICQod2lsZGNh
cmQgJXMvIiwgZGlyKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2xlbjsgaSsrKSB7CisJCWMgPSBtW2ld
OworCQlpZiAoYyA9PSAnXycpCisJCQljID0gJy8nOworCQllbHNlCisJCQljID0gdG9sb3dlcihj
KTsKKwkJaWYgKGMgIT0gJy8nIHx8IHByZXZfYyAhPSAnLycpCisJCQlwdXRjaGFyKGMpOworCQlw
cmV2X2MgPSBjOworCX0KKwlwcmludGYoIi5oKSBcXFxuIik7Cit9CisKK3N0cnVjdCBpdGVtIHsK
KwlzdHJ1Y3QgaXRlbQkqbmV4dDsKKwl1bnNpZ25lZCBpbnQJbGVuOworCXVuc2lnbmVkIGludAlo
YXNoOworCWNoYXIJCW5hbWVbMF07Cit9OworCisjZGVmaW5lIEhBU0hTWiAyNTYKK3N0YXRpYyBz
dHJ1Y3QgaXRlbSAqaGFzaHRhYltIQVNIU1pdOworCitzdGF0aWMgdW5zaWduZWQgaW50IHN0cmhh
c2goY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgc3opCit7CisJLyogZm52MzIgaGFzaCAq
LworCXVuc2lnbmVkIGludCBpLCBoYXNoID0gMjE2NjEzNjI2MVU7CisKKwlmb3IgKGkgPSAwOyBp
IDwgc3o7IGkrKykKKwkJaGFzaCA9IChoYXNoIF4gc3RyW2ldKSAqIDB4MDEwMDAxOTM7CisJcmV0
dXJuIGhhc2g7Cit9CisKKy8qCisgKiBMb29rdXAgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlv
biBzdHJpbmcuCisgKi8KK3N0YXRpYyBpbnQgaXNfZGVmaW5lZF9jb25maWcoY29uc3QgY2hhciAq
bmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpCit7CisJc3RydWN0IGl0ZW0gKmF1eDsK
KworCWZvciAoYXV4ID0gaGFzaHRhYltoYXNoICUgSEFTSFNaXTsgYXV4OyBhdXggPSBhdXgtPm5l
eHQpIHsKKwkJaWYgKGF1eC0+aGFzaCA9PSBoYXNoICYmIGF1eC0+bGVuID09IGxlbiAmJgorCQkg
ICAgbWVtY21wKGF1eC0+bmFtZSwgbmFtZSwgbGVuKSA9PSAwKQorCQkJcmV0dXJuIDE7CisJfQor
CXJldHVybiAwOworfQorCisvKgorICogQWRkIGEgbmV3IHZhbHVlIHRvIHRoZSBjb25maWd1cmF0
aW9uIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQgZGVmaW5lX2NvbmZpZyhjb25zdCBjaGFyICpu
YW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgaGFzaCkKK3sKKwlzdHJ1Y3QgaXRlbSAqYXV4ID0g
bWFsbG9jKHNpemVvZigqYXV4KSArIGxlbik7CisKKwlpZiAoIWF1eCkgeworCQlwZXJyb3IoImZp
eGRlcDptYWxsb2MiKTsKKwkJZXhpdCgxKTsKKwl9CisJbWVtY3B5KGF1eC0+bmFtZSwgbmFtZSwg
bGVuKTsKKwlhdXgtPmxlbiA9IGxlbjsKKwlhdXgtPmhhc2ggPSBoYXNoOworCWF1eC0+bmV4dCA9
IGhhc2h0YWJbaGFzaCAlIEhBU0hTWl07CisJaGFzaHRhYltoYXNoICUgSEFTSFNaXSA9IGF1eDsK
K30KKworLyoKKyAqIFJlY29yZCB0aGUgdXNlIG9mIGEgQ09ORklHXyogd29yZC4KKyAqLworc3Rh
dGljIHZvaWQgdXNlX2NvbmZpZyhjb25zdCBjaGFyICptLCBpbnQgc2xlbikKK3sKKwl1bnNpZ25l
ZCBpbnQgaGFzaCA9IHN0cmhhc2gobSwgc2xlbik7CisKKwlpZiAoaXNfZGVmaW5lZF9jb25maWco
bSwgc2xlbiwgaGFzaCkpCisJICAgIHJldHVybjsKKworCWRlZmluZV9jb25maWcobSwgc2xlbiwg
aGFzaCk7CisJcHJpbnRfZGVwKG0sIHNsZW4sICJpbmNsdWRlL2NvbmZpZyIpOworfQorCisvKiB0
ZXN0IGlmIHMgZW5kcyBpbiBzdWIgKi8KK3N0YXRpYyBpbnQgc3RyX2VuZHNfd2l0aChjb25zdCBj
aGFyICpzLCBpbnQgc2xlbiwgY29uc3QgY2hhciAqc3ViKQoreworCWludCBzdWJsZW4gPSBzdHJs
ZW4oc3ViKTsKKworCWlmIChzdWJsZW4gPiBzbGVuKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAh
bWVtY21wKHMgKyBzbGVuIC0gc3VibGVuLCBzdWIsIHN1Ymxlbik7Cit9CisKK3N0YXRpYyB2b2lk
IHBhcnNlX2NvbmZpZ19maWxlKGNvbnN0IGNoYXIgKnApCit7CisJY29uc3QgY2hhciAqcSwgKnI7
CisJY29uc3QgY2hhciAqc3RhcnQgPSBwOworCisJd2hpbGUgKChwID0gc3Ryc3RyKHAsICJDT05G
SUdfIikpKSB7CisJCWlmIChwID4gc3RhcnQgJiYgKGlzYWxudW0ocFstMV0pIHx8IHBbLTFdID09
ICdfJykpIHsKKwkJCXAgKz0gNzsKKwkJCWNvbnRpbnVlOworCQl9CisJCXAgKz0gNzsKKwkJcSA9
IHA7CisJCXdoaWxlICgqcSAmJiAoaXNhbG51bSgqcSkgfHwgKnEgPT0gJ18nKSkKKwkJCXErKzsK
KwkJaWYgKHN0cl9lbmRzX3dpdGgocCwgcSAtIHAsICJfTU9EVUxFIikpCisJCQlyID0gcSAtIDc7
CisJCWVsc2UKKwkJCXIgPSBxOworCQlpZiAociA+IHApCisJCQl1c2VfY29uZmlnKHAsIHIgLSBw
KTsKKwkJcCA9IHE7CisJfQorfQorCitzdGF0aWMgdm9pZCAqcmVhZF9maWxlKGNvbnN0IGNoYXIg
KmZpbGVuYW1lKQoreworCXN0cnVjdCBzdGF0IHN0OworCWludCBmZDsKKwljaGFyICpidWY7CisK
KwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCWZwcmlu
dGYoc3RkZXJyLCAiZml4ZGVwOiBlcnJvciBvcGVuaW5nIGZpbGU6ICIpOworCQlwZXJyb3IoZmls
ZW5hbWUpOworCQlleGl0KDIpOworCX0KKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKSB7CisJCWZw
cmludGYoc3RkZXJyLCAiZml4ZGVwOiBlcnJvciBmc3RhdCdpbmcgZmlsZTogIik7CisJCXBlcnJv
cihmaWxlbmFtZSk7CisJCWV4aXQoMik7CisJfQorCWJ1ZiA9IG1hbGxvYyhzdC5zdF9zaXplICsg
MSk7CisJaWYgKCFidWYpIHsKKwkJcGVycm9yKCJmaXhkZXA6IG1hbGxvYyIpOworCQlleGl0KDIp
OworCX0KKwlpZiAocmVhZChmZCwgYnVmLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKSB7CisJ
CXBlcnJvcigiZml4ZGVwOiByZWFkIik7CisJCWV4aXQoMik7CisJfQorCWJ1ZltzdC5zdF9zaXpl
XSA9ICdcMCc7CisJY2xvc2UoZmQpOworCisJcmV0dXJuIGJ1ZjsKK30KKworLyogSWdub3JlIGNl
cnRhaW4gZGVwZW5kZW5jaWVzICovCitzdGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBj
aGFyICpzLCBpbnQgbGVuKQoreworCXJldHVybiBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1
ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgiKSB8fAorCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxl
biwgImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9rc3ltcy5oIikgfHwKKwkgICAgICAgc3RyX2VuZHNf
d2l0aChzLCBsZW4sICIudmVyIik7Cit9CisKKy8qCisgKiBJbXBvcnRhbnQ6IFRoZSBiZWxvdyBn
ZW5lcmF0ZWQgc291cmNlX2Zvby5vIGFuZCBkZXBzX2Zvby5vIHZhcmlhYmxlCisgKiBhc3NpZ25t
ZW50cyBhcmUgcGFyc2VkIG5vdCBvbmx5IGJ5IG1ha2UsIGJ1dCBhbHNvIGJ5IHRoZSByYXRoZXIg
c2ltcGxlCisgKiBwYXJzZXIgaW4gc2NyaXB0cy9tb2Qvc3VtdmVyc2lvbi5jLgorICovCitzdGF0
aWMgdm9pZCBwYXJzZV9kZXBfZmlsZShjaGFyICptLCBjb25zdCBjaGFyICp0YXJnZXQpCit7CisJ
Y2hhciAqcDsKKwlpbnQgaXNfbGFzdCwgaXNfdGFyZ2V0OworCWludCBzYXdfYW55X3RhcmdldCA9
IDA7CisJaW50IGlzX2ZpcnN0X2RlcCA9IDA7CisJdm9pZCAqYnVmOworCisJd2hpbGUgKDEpIHsK
KwkJLyogU2tpcCBhbnkgIndoaXRlIHNwYWNlIiAqLworCQl3aGlsZSAoKm0gPT0gJyAnIHx8ICpt
ID09ICdcXCcgfHwgKm0gPT0gJ1xuJykKKwkJCW0rKzsKKworCQlpZiAoISptKQorCQkJYnJlYWs7
CisKKwkJLyogRmluZCBuZXh0ICJ3aGl0ZSBzcGFjZSIgKi8KKwkJcCA9IG07CisJCXdoaWxlICgq
cCAmJiAqcCAhPSAnICcgJiYgKnAgIT0gJ1xcJyAmJiAqcCAhPSAnXG4nKQorCQkJcCsrOworCQlp
c19sYXN0ID0gKCpwID09ICdcMCcpOworCQkvKiBJcyB0aGUgdG9rZW4gd2UgZm91bmQgYSB0YXJn
ZXQgbmFtZT8gKi8KKwkJaXNfdGFyZ2V0ID0gKCoocC0xKSA9PSAnOicpOworCQkvKiBEb24ndCB3
cml0ZSBhbnkgdGFyZ2V0IG5hbWVzIGludG8gdGhlIGRlcGVuZGVuY3kgZmlsZSAqLworCQlpZiAo
aXNfdGFyZ2V0KSB7CisJCQkvKiBUaGUgL25leHQvIGZpbGUgaXMgdGhlIGZpcnN0IGRlcGVuZGVu
Y3kgKi8KKwkJCWlzX2ZpcnN0X2RlcCA9IDE7CisJCX0gZWxzZSBpZiAoIWlzX2lnbm9yZWRfZmls
ZShtLCBwIC0gbSkpIHsKKwkJCSpwID0gJ1wwJzsKKworCQkJLyoKKwkJCSAqIERvIG5vdCBsaXN0
IHRoZSBzb3VyY2UgZmlsZSBhcyBkZXBlbmRlbmN5LCBzbyB0aGF0CisJCQkgKiBrYnVpbGQgaXMg
bm90IGNvbmZ1c2VkIGlmIGEgLmMgZmlsZSBpcyByZXdyaXR0ZW4KKwkJCSAqIGludG8gLlMgb3Ig
dmljZSB2ZXJzYS4gU3RvcmluZyBpdCBpbiBzb3VyY2VfKiBpcworCQkJICogbmVlZGVkIGZvciBt
b2Rwb3N0IHRvIGNvbXB1dGUgc3JjdmVyc2lvbnMuCisJCQkgKi8KKwkJCWlmIChpc19maXJzdF9k
ZXApIHsKKwkJCQkvKgorCQkJCSAqIElmIHByb2Nlc3NpbmcgdGhlIGNvbmNhdGVuYXRpb24gb2Yg
bXVsdGlwbGUKKwkJCQkgKiBkZXBlbmRlbmN5IGZpbGVzLCBvbmx5IHByb2Nlc3MgdGhlIGZpcnN0
CisJCQkJICogdGFyZ2V0IG5hbWUsIHdoaWNoIHdpbGwgYmUgdGhlIG9yaWdpbmFsCisJCQkJICog
c291cmNlIG5hbWUsIGFuZCBpZ25vcmUgYW55IG90aGVyIHRhcmdldAorCQkJCSAqIG5hbWVzLCB3
aGljaCB3aWxsIGJlIGludGVybWVkaWF0ZSB0ZW1wb3JhcnkKKwkJCQkgKiBmaWxlcy4KKwkJCQkg
Ki8KKwkJCQlpZiAoIXNhd19hbnlfdGFyZ2V0KSB7CisJCQkJCXNhd19hbnlfdGFyZ2V0ID0gMTsK
KwkJCQkJcHJpbnRmKCJzb3VyY2VfJXMgOj0gJXNcblxuIiwKKwkJCQkJICAgICAgIHRhcmdldCwg
bSk7CisJCQkJCXByaW50ZigiZGVwc18lcyA6PSBcXFxuIiwgdGFyZ2V0KTsKKwkJCQl9CisJCQkJ
aXNfZmlyc3RfZGVwID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBt
KTsKKwkJCX0KKworCQkJYnVmID0gcmVhZF9maWxlKG0pOworCQkJcGFyc2VfY29uZmlnX2ZpbGUo
YnVmKTsKKwkJCWZyZWUoYnVmKTsKKwkJfQorCisJCWlmIChpc19sYXN0KQorCQkJYnJlYWs7CisK
KwkJLyoKKwkJICogU3RhcnQgc2VhcmNoaW5nIGZvciBuZXh0IHRva2VuIGltbWVkaWF0ZWx5IGFm
dGVyIHRoZSBmaXJzdAorCQkgKiAid2hpdGVzcGFjZSIgY2hhcmFjdGVyIHRoYXQgZm9sbG93cyB0
aGlzIHRva2VuLgorCQkgKi8KKwkJbSA9IHAgKyAxOworCX0KKworCWlmICghc2F3X2FueV90YXJn
ZXQpIHsKKwkJZnByaW50ZihzdGRlcnIsICJmaXhkZXA6IHBhcnNlIGVycm9yOyBubyB0YXJnZXRz
IGZvdW5kXG4iKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlwcmludGYoIlxuJXM6ICQoZGVwc18lcylc
blxuIiwgdGFyZ2V0LCB0YXJnZXQpOworCXByaW50ZigiJChkZXBzXyVzKTpcbiIsIHRhcmdldCk7
Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhciAq
ZGVwZmlsZSwgKnRhcmdldCwgKmNtZGxpbmU7CisJdm9pZCAqYnVmOworCisJaWYgKGFyZ2MgIT0g
NCkKKwkJdXNhZ2UoKTsKKworCWRlcGZpbGUgPSBhcmd2WzFdOworCXRhcmdldCA9IGFyZ3ZbMl07
CisJY21kbGluZSA9IGFyZ3ZbM107CisKKwlwcmludGYoImNtZF8lcyA6PSAlc1xuXG4iLCB0YXJn
ZXQsIGNtZGxpbmUpOworCisJYnVmID0gcmVhZF9maWxlKGRlcGZpbGUpOworCXBhcnNlX2RlcF9m
aWxlKGJ1ZiwgdGFyZ2V0KTsKKwlmcmVlKGJ1Zik7CisKKwlyZXR1cm4gMDsKK30KLS0gCjIuMjAu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxi-0003dr-IZ; Mon, 09 Sep 2019 18:00:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxh-0003dH-0g
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:25 +0000
X-Inumbo-ID: b21d422c-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b21d422c-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:24 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 689CFF2027;
 Mon,  9 Sep 2019 20:00:23 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id iJs4nkOoqiAh; Mon,  9 Sep 2019 20:00:23 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 405FDF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:21 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:17 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:24 +0200
Message-ID: <20190909175939.23936-9-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 08/23] build: Add Unikraft
 specific fixdep header
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SWdub3JlIGF1dG8gZ2VuZXJhdGVkIHVrL19jb25maWcuaC4KClNpZ25lZC1vZmYtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIHN1cHBvcnQva2Nv
bmZpZy5uZXcvZml4ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiAuLi4vcGF0
Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlciAgICAgICAgICAgIHwgMTIgKysrKysr
KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZpeGRlcC1o
ZWFkZXIKCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9maXhkZXAuYwppbmRleCBmYWNiZDYwMy4uOTdhZmI3MDYgMTAwNjQ0Ci0t
LSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9maXhkZXAuYwpAQCAtMjY5LDYgKzI2OSw3IEBAIHN0YXRpYyBpbnQgaXNfaWdub3JlZF9maWxl
KGNvbnN0IGNoYXIgKnMsIGludCBsZW4pCiB7CiAJcmV0dXJuIHN0cl9lbmRzX3dpdGgocywgbGVu
LCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIpIHx8CiAJICAgICAgIHN0cl9lbmRzX3dp
dGgocywgbGVuLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2tzeW1zLmgiKSB8fAorCSAgICAgICBz
dHJfZW5kc193aXRoKHMsIGxlbiwgImJ1aWxkL2luY2x1ZGUvdWsvX2NvbmZpZy5oIikgfHwKIAkg
ICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICIudmVyIik7CiB9CiAKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlciBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRl
cgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uM2IyYzhhZTgKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZp
eGRlcC1oZWFkZXIKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvZml4ZGVwLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jCitpbmRleCBmYWNi
ZDYwLi45N2FmYjcwIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYwor
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYworQEAgLTI2OSw2ICsyNjksNyBAQCBz
dGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBjaGFyICpzLCBpbnQgbGVuKQorIHsKKyAJ
cmV0dXJuIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYu
aCIpIHx8CisgCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1ZGUvZ2VuZXJhdGVk
L2F1dG9rc3ltcy5oIikgfHwKKysJICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiYnVpbGQv
aW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fAorIAkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4s
ICIudmVyIik7CisgfQorIAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxm-0003eh-KH; Mon, 09 Sep 2019 18:00:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxl-0003eV-7M
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:29 +0000
X-Inumbo-ID: b351a0ac-d32b-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b351a0ac-d32b-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 784C8F2027;
 Mon,  9 Sep 2019 20:00:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id k3LU2lHiLt7o; Mon,  9 Sep 2019 20:00:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 4FFBBF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:23 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:17 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:25 +0200
Message-ID: <20190909175939.23936-10-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 09/23] build: Remove implicit
 rules
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RGlzYWJsZSBpbXBsaWNpdCBtYWtlZmlsZSBydWxlcy4KClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBT
YW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIHN1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnIgICAgICAgICAgICAgICAgICAgICB8ICAyICsrCiAuLi4va2NvbmZp
Zy5uZXcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVsZXMgICAgfCAxMyArKysrKysrKysr
KysrCiAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzCgpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUuYnIKaW5kZXggNThlNmU3NTAuLmFmZTk0ZWVhIDEwMDY0NAotLS0g
YS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvTWFrZWZpbGUuYnIKQEAgLTQsNiArNCw4IEBAIHRvcF9idWlsZGRpcj0uLi8uLi8KIHNyY3Ry
ZWUgOj0gLgogb2JqID89IC4KIAorLlNVRkZJWEVTIDoKKwogaW5jbHVkZSBNYWtlZmlsZS5ydWxl
cwogaW5jbHVkZSBNYWtlZmlsZQogI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZv
by5oCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWlt
cGxpY2l0LXJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBs
aWNpdC1ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGUxNzllOGYK
LS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3Zl
LWltcGxpY2l0LXJ1bGVzCkBAIC0wLDAgKzEsMTMgQEAKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgor
aW5kZXggNThlNmU3NS4uYWZlOTRlZSAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUuYnIKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK0BAIC00
LDYgKzQsOCBAQCB0b3BfYnVpbGRkaXI9Li4vLi4vCisgc3JjdHJlZSA6PSAuCisgb2JqID89IC4K
KyAKKysuU1VGRklYRVMgOgorKworIGluY2x1ZGUgTWFrZWZpbGUucnVsZXMKKyBpbmNsdWRlIE1h
a2VmaWxlCisgI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oCi0tIAoyLjIw
LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxq-0003fT-Lx; Mon, 09 Sep 2019 18:00:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxp-0003fJ-IW
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:33 +0000
X-Inumbo-ID: b70006a8-d32b-11e9-ac12-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b70006a8-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:32 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id A3428105694;
 Mon,  9 Sep 2019 20:00:31 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id XnO8apmreP6s; Mon,  9 Sep 2019 20:00:31 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 83C1D10568F
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:31 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:31 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:26 +0200
Message-ID: <20190909175939.23936-11-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 10/23] build: Import the kconfig
 host rules from Linux
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHJ1bGVzIGJ1aWxkIHRoZSBjb25maWcgdG9vbC4gVGhlc2UgcnVsZSBhcmUgaW1wb3J0ZWQg
ZnJvbSB0aGUgbGludXgKa2VybmVsLgpGaWxlOiBzY3JpcHRzL01ha2VmaWxlLmhvc3QKVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAg
ICAgfCAxMTYgKysrKysrKysrKysrLS0KIC4uLi9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xz
LXJ1bGVzICAgICAgICB8IDE0MiArKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwg
MjQzIGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcwoKZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25m
aWcubmV3L01ha2VmaWxlLmJyCmluZGV4IGFmZTk0ZWVhLi44ZTY0YTliOSAxMDA2NDQKLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLmJyCkBAIC0xMCwyOSArMTAsNDEgQEAgaW5jbHVkZSBNYWtlZmlsZS5ydWxlcwog
aW5jbHVkZSBNYWtlZmlsZQogI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5o
CiAtaW5jbHVkZSAkKG9iaikvLmRlcGVuZAotJChvYmopLy5kZXBlbmQ6ICQod2lsZGNhcmQgKi5o
ICouYykKLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpIC1NTSAq
LmMgPiAkQCAyPi9kZXYvbnVsbCB8fCA6CiAKIF9faG9zdHByb2dzIDo9ICQoc29ydCAkKGhvc3Rw
cm9ncy15KSAkKGhvc3Rwcm9ncy1tKSkKLWhvc3QtY3NpbmdsZSA6PSAkKGZvcmVhY2ggbSwkKF9f
aG9zdHByb2dzKSwkKGlmICQoJChtKS1vYmpzKSwsJChtKSkpCitob3N0LWNzaGxpYiA6PSAkKHNv
cnQgJChob3N0bGlicy15KSAkKGhvc3RsaWJzLW0pKQoraG9zdC1jeHhzaGxpYiA6PSAkKHNvcnQg
JChob3N0Y3h4bGlicy15KSAkKGhvc3RjeHhsaWJzLW0pKQorCisjIEMgY29kZQorIyBFeGVjdXRh
YmxlcyBjb21waWxlZCBmcm9tIGEgc2luZ2xlIC5jIGZpbGUKK2hvc3QtY3NpbmdsZTo9ICQoZm9y
ZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCBcCisgICAgICAgICAgICAgJChpZiAkKCQobSktb2Jqcykk
KCQobSktY3h4b2JqcyksLCQobSkpKQogaG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hv
c3Rwcm9ncyksXAotICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwsJChpZiAkKCQobSkt
b2JqcyksJChtKSkpKQotaG9zdC1jeHhtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dz
KSxcCi0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQobSktb2Jq
cyksKSkpCi1ob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFj
aCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQotaG9zdC1jeHhvYmpzIDo9ICQoYWRk
cHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1j
eHhvYmpzKSkpKQorCQkgICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwsJChpZiAkKCQo
bSktb2JqcyksJChtKSkpKQorIyBPYmplY3QgKC5vKSBmaWxlcyBjb21waWxlZCBmcm9tIC5jIGZp
bGVzCitob3N0LWNvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgk
KG0pLW9ianMpKSkKKworIyBDKysgY29kZQorIyBDKysgZXhlY3V0YWJsZXMgY29tcGlsZWQgZnJv
bSBhdCBsZWFzdCBvbmUgLmNjIGZpbGUKKyMgYW5kIHplcm8gb3IgbW9yZSAuYyBmaWxlcworIGhv
c3QtY3h4bXVsdGkgICA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQoJChtKS1j
eHhvYmpzKSwkKG0pKSkKKyMgQysrIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBpbGVkIGZyb20gLmNj
IGZpbGVzCitob3N0LWN4eG9ianMgICAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQoaG9zdC1jeHht
dWx0aSksJCgkKG0pLWN4eG9ianMpKSkKKyNPYmplY3QgKC5vKSBmaWxlcyB1c2VkIGJ5IHRoZSBz
aGFyZWQgbGliYXJpZXMKK2hvc3QtY3Nob2JqcyAgICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJCho
b3N0LWNzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQoraG9zdC1jeHhzaG9ianMgIDo9ICQoc29y
dCAkKGZvcmVhY2ggbSwkKGhvc3QtY3h4c2hsaWIpLCQoJChtOi5zbz0tb2JqcykpKSkKKworCito
b3N0LWNzaW5nbGUgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3NpbmdsZSkpCitob3N0
LWNtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY211bHRpKSkKK2hvc3QtY3h4
bXVsdGkgIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG11bHRpKSkKK2hvc3QtY29i
anMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY29ianMpKQoraG9zdC1jeHhvYmpzIDo9
ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQogZml4ZGVwLW9ianMgOj0gJChv
YmopL2ZpeGRlcC5vCiAKIEhPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKG9iaikgLURDT05GSUdfPVwi
XCIKIAotJChob3N0LWNzaW5nbGUpOiAlOiAlLmMKLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZM
QUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJDwgLW8gJChvYmopLyRACi0KLSQo
aG9zdC1jbXVsdGkpOiAlOiAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCi0JJChIT1NUQ0Mp
ICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJEApICQoYWRk
cHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAk
KG9iaikvJEAKIAotJChob3N0LWN4eG11bHRpKTogJTogJChob3N0LWN4eG9ianMpICQoaG9zdC1j
b2JqcykgJChob3N0LWNzaGxpYikKLQkkKEhPU1RDWFgpICQoSE9TVF9FWFRSQUNGTEFHUykgJChI
T1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYp
LW9ianMpICQoJChARiktY3h4b2JqcykpICQoSE9TVExPQURMSUJFU18kKEBGKSkgLW8gJChvYmop
LyRACiAKICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpCiAJJChIT1NUQ0MpICQoSE9TVF9F
WFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpICQ8IC1vICRACkBA
IC00MCw2ICs1Miw4MCBAQCAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQogJChmaXhkZXAt
b2Jqcyk6ICQoc3JjKS9maXhkZXAuYwogCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQo
SE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAkPCAtbyAkQAogCisjIyMjIworIyBD
b21waWxlIHByb2dyYW1zIG9uIHRoZSBob3N0CisKKyMgQ3JlYXRlIGV4ZWN1dGFibGUgZnJvbSBh
IHNpbmdsZSAuYyBmaWxlCisjIGhvc3QtY3NpbmdsZSAtPiBFeGVjdXRhYmxlCitxdWlldF9jbWRf
aG9zdC1jc2luZ2xlIAk9IEhPU1RDQyAgJEAKKyAgICAgIGNtZF9ob3N0LWNzaW5nbGUJPSAkKEhP
U1RDQykgJChob3N0Y19mbGFncykgJChIT1NUTERGTEFHUykgLW8gJEAgJDwgXAorCQkkKEhPU1RM
RExJQlMpICQoSE9TVExETElCU18kKEBGKSkKKyQoaG9zdC1jc2luZ2xlKTogJChvYmopLyU6ICQo
c3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0
LWNzaW5nbGUpCisKKyMgTGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmls
ZXMsIGFsbCBwbGFpbiBjCisjIGhvc3QtY211bHRpIC0+IGV4ZWN1dGFibGUKK3F1aWV0X2NtZF9o
b3N0LWNtdWx0aQk9IEhPU1RMRCAgJEAKKyAgICAgIGNtZF9ob3N0LWNtdWx0aQk9ICQoSE9TVEND
KSAkKGhvc3RjX2ZsYWdzKSAtbyAkQCBcCisJCQkgICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBG
KS1vYmpzKSkgXAorCQkJICAkKEhPU1RfTERGTEFHUykgJChIT1NUTERMSUJTXyQoQEYpKQorJCho
b3N0LWNtdWx0aSk6ICQob2JqKS9maXhkZXAgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxob3N0
LWNtdWx0aSkKKyQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWNtdWx0aSksICwgLW9ianMpCisK
KworIyBDcmVhdGUgLm8gZmlsZSBmcm9tIGEgc2luZ2xlIC5jIGZpbGUKKyMgaG9zdC1jb2JqcyAt
PiAubworcXVpZXRfY21kX2hvc3QtY29ianMJPSBIT1NUQ0MgICRACisgICAgICBjbWRfaG9zdC1j
b2Jqcwk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RDRkxBR1NfJChARikpXAorCQkJ
ICAtYyAtbyAkQCAkPAorJChmaWx0ZXItb3V0ICUudGFiLm8sICQoZmlsdGVyLW91dCAlLmxleC5v
LCQoaG9zdC1jb2JqcykpKTogJChvYmopLyUubzpcCisJCSQoc3JjKS8lLmMgJChvYmopL2ZpeGRl
cCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNvYmpzKQorCiskKGZpbHRlciAl
LmxleC5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikvJS5sZXgubzogICQob2JqKS8lLmxleC5jICQo
b2JqKS9maXhkZXAgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykKKwor
JChmaWx0ZXIgJS50YWIubywkKGhvc3QtY29ianMpKTogJChvYmopLyUudGFiLm86ICAkKG9iaikv
JS50YWIuYyAkKG9iaikvZml4ZGVwIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3Qt
Y29ianMpCisKKyMgTGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmlsZXMs
IGEgbWl4dHVyZSBvZiAuYyBhbmQgLmNjCisjIGhvc3QtY3h4bXVsdGkgLT4gZXhlY3V0YWJsZQor
cXVpZXRfY21kX2hvc3QtY3h4bXVsdGkJPSBIT1NUTEQgICRACisgICAgICBjbWRfaG9zdC1jeHht
dWx0aQk9ICQoSE9TVENYWCkgJChIT1NUTERGTEFHUykgLW8gJEBcCisJCQkgICQoZm9yZWFjaCBv
LG9ianMgY3h4b2JqcyxcCisJCQkgICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS0kKG8pKSkp
IFwKKwkJCSAgJChIT1NUTERMSUJTKSAkKEhPU1RMRExJQlNfJChARikpCiskKGhvc3QtY3h4bXVs
dGkpOiBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkLGhvc3QtY3h4bXVsdGkpCiskKGNhbGwgbXVs
dGlfZGVwZW5kLCQoaG9zdC1jeHhtdWx0aSksICwgLW9ianMgLWN4eG9ianMpCisKKworIyBDcmVh
dGUgLm8gZmlsZSBmcm9tIGEgc2luZ2xlIC5jYyAoQysrKSBmaWxlCitxdWlldF9jbWRfaG9zdC1j
eHhvYmpzCT0gSE9TVENYWCAkQAorICAgICAgY21kX2hvc3QtY3h4b2Jqcwk9ICQoSE9TVENYWCkg
JChob3N0Y3h4X2ZsYWdzKSAkKEhPU1RDWFhGTEFHU18kKEBGKSkgXAorCQkJICAtYyAtbyAkQCAk
PAorJChob3N0LWN4eG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jYyBGT1JDRQorCSQoY2Fs
bCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eG9ianMpCisKKyMgQ29tcGlsZSAuYyBmaWxlLCBjcmVh
dGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgLm8gZmlsZQorIyBob3N0LWNzaG9ianMgLT4gLm8KK3F1
aWV0X2NtZF9ob3N0LWNzaG9ianMJPSBIT1NUQ0MgIC1mUElDICRACisgICAgICBjbWRfaG9zdC1j
c2hvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpIC1mUElDIC1jIC1vICRAICQ8CiskKGhv
c3QtY3Nob2Jqcyk6ICQob2JqKS8lLm86ICQoc3JjKS8lLmMgRk9SQ0UKKwkkKGNhbGwgaWZfY2hh
bmdlZF9kZXAsaG9zdC1jc2hvYmpzKQorCisjIENvbXBpbGUgLmMgZmlsZSwgY3JlYXRlIHBvc2l0
aW9uIGluZGVwZW5kZW50IC5vIGZpbGUKKyMgTm90ZSB0aGF0IHBsdWdpbiBjYXBhYmxlIGdjYyB2
ZXJzaW9ucyBjYW4gYmUgZWl0aGVyIEMgb3IgQysrIGJhc2VkCisjIHRoZXJlZm9yZSBwbHVnaW4g
c291cmNlIGZpbGVzIGhhdmUgdG8gYmUgY29tcGlsYWJsZSBpbiBib3RoIEMgYW5kIEMrKyBtb2Rl
LgorIyBUaGlzIGlzIHdoeSBhIEMrKyBjb21waWxlciBpcyBpbnZva2VkIG9uIGEgLmMgZmlsZS4K
KyMgaG9zdC1jeHhzaG9ianMgLT4gLm8KK3F1aWV0X2NtZF9ob3N0LWN4eHNob2Jqcwk9IEhPU1RD
WFggLWZQSUMgJEAKKyAgICAgIGNtZF9ob3N0LWN4eHNob2Jqcwk9ICQoSE9TVENYWCkgJChob3N0
Y3h4X2ZsYWdzKSAtZlBJQyAtYyAtbyAkQCAkPAorJChob3N0LWN4eHNob2Jqcyk6ICQob2JqKS8l
Lm86ICQoc3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQorCUBlY2hvIHRlc3QtLSRACisJJChj
YWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3h4c2hvYmpzKQorCiBjbGVhbjoKIAkkKFEpcm0gLWYg
JChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKIGRpc3RjbGVhbjogY2xlYW4KZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29s
cy1ydWxlcyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29s
cy1ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZDI0ZGM5NzgKLS0t
IC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDctaW1wb3J0LWhv
c3QtdG9vbHMtcnVsZXMKQEAgLTAsMCArMSwxNDIgQEAKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgor
aW5kZXggYWZlOTRlZS4uOGU2NGE5YiAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUuYnIKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK0BAIC0x
MCwyOSArMTAsNDEgQEAgaW5jbHVkZSBNYWtlZmlsZS5ydWxlcworIGluY2x1ZGUgTWFrZWZpbGUK
KyAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKKyAtaW5jbHVkZSAkKG9i
aikvLmRlcGVuZAorLSQob2JqKS8uZGVwZW5kOiAkKHdpbGRjYXJkICouaCAqLmMpCistCSQoSE9T
VENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rl
di9udWxsIHx8IDoKKyAKKyBfX2hvc3Rwcm9ncyA6PSAkKHNvcnQgJChob3N0cHJvZ3MteSkgJCho
b3N0cHJvZ3MtbSkpCistaG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3Mp
LCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkKKytob3N0LWNzaGxpYiA6PSAkKHNvcnQgJChob3N0
bGlicy15KSAkKGhvc3RsaWJzLW0pKQorK2hvc3QtY3h4c2hsaWIgOj0gJChzb3J0ICQoaG9zdGN4
eGxpYnMteSkgJChob3N0Y3h4bGlicy1tKSkKKysKKysjIEMgY29kZQorKyMgRXhlY3V0YWJsZXMg
Y29tcGlsZWQgZnJvbSBhIHNpbmdsZSAuYyBmaWxlCisraG9zdC1jc2luZ2xlOj0gJChmb3JlYWNo
IG0sJChfX2hvc3Rwcm9ncyksIFwKKysgICAgICAgICAgICAgJChpZiAkKCQobSktb2JqcykkKCQo
bSktY3h4b2JqcyksLCQobSkpKQorIGhvc3QtY211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0
cHJvZ3MpLFwKKy0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCwkKGlmICQoJChtKS1v
YmpzKSwkKG0pKSkpCistaG9zdC1jeHhtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dz
KSxcCistICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9i
anMpLCkpKQorLWhvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQgJChmb3Jl
YWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkpCistaG9zdC1jeHhvYmpzIDo9ICQo
YWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJCht
KS1jeHhvYmpzKSkpKQorKwkJICAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYg
JCgkKG0pLW9ianMpLCQobSkpKSkKKysjIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBpbGVkIGZyb20g
LmMgZmlsZXMKKytob3N0LWNvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9n
cyksJCgkKG0pLW9ianMpKSkKKysKKysjIEMrKyBjb2RlCisrIyBDKysgZXhlY3V0YWJsZXMgY29t
cGlsZWQgZnJvbSBhdCBsZWFzdCBvbmUgLmNjIGZpbGUKKysjIGFuZCB6ZXJvIG9yIG1vcmUgLmMg
ZmlsZXMKKysgaG9zdC1jeHhtdWx0aSAgIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQo
aWYgJCgkKG0pLWN4eG9ianMpLCQobSkpKQorKyMgQysrIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBp
bGVkIGZyb20gLmNjIGZpbGVzCisraG9zdC1jeHhvYmpzICAgIDo9ICQoc29ydCAkKGZvcmVhY2gg
bSwkKGhvc3QtY3h4bXVsdGkpLCQoJChtKS1jeHhvYmpzKSkpCisrI09iamVjdCAoLm8pIGZpbGVz
IHVzZWQgYnkgdGhlIHNoYXJlZCBsaWJhcmllcworK2hvc3QtY3Nob2JqcyAgICA6PSAkKHNvcnQg
JChmb3JlYWNoIG0sJChob3N0LWNzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQorK2hvc3QtY3h4
c2hvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWN4eHNobGliKSwkKCQobTouc289
LW9ianMpKSkpCisrCisrCisraG9zdC1jc2luZ2xlIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJCho
b3N0LWNzaW5nbGUpKQorK2hvc3QtY211bHRpICA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9z
dC1jbXVsdGkpKQorK2hvc3QtY3h4bXVsdGkgIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0
LWN4eG11bHRpKSkKKytob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNv
YmpzKSkKKytob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4b2Jq
cykpCisgZml4ZGVwLW9ianMgOj0gJChvYmopL2ZpeGRlcC5vCisgCisgSE9TVF9FWFRSQUNGTEFH
UyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgorIAorLSQoaG9zdC1jc2luZ2xlKTogJTogJS5j
CistCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZM
QUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKKy0KKy0kKGhvc3QtY211bHRpKTogJTogJChob3N0LWNv
YmpzKSAkKGhvc3QtY3NobGliKQorLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhP
U1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9i
anMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorIAorLSQoaG9zdC1jeHht
dWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCist
CSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZM
QUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpz
KSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKyAKKyAkKG9iaikvZml4ZGVw
OiAkKGZpeGRlcC1vYmpzKQorIAkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RD
RkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgJDwgLW8gJEAKK0BAIC00MCw2ICs1Miw4MCBAQCAk
KG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQorICQoZml4ZGVwLW9ianMpOiAkKHNyYykvZml4
ZGVwLmMKKyAJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhP
U1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACisgCisrIyMjIyMKKysjIENvbXBpbGUgcHJvZ3Jh
bXMgb24gdGhlIGhvc3QKKysKKysjIENyZWF0ZSBleGVjdXRhYmxlIGZyb20gYSBzaW5nbGUgLmMg
ZmlsZQorKyMgaG9zdC1jc2luZ2xlIC0+IEV4ZWN1dGFibGUKKytxdWlldF9jbWRfaG9zdC1jc2lu
Z2xlIAk9IEhPU1RDQyAgJEAKKysgICAgICBjbWRfaG9zdC1jc2luZ2xlCT0gJChIT1NUQ0MpICQo
aG9zdGNfZmxhZ3MpICQoSE9TVExERkxBR1MpIC1vICRAICQ8IFwKKysJCSQoSE9TVExETElCUykg
JChIT1NUTERMSUJTXyQoQEYpKQorKyQoaG9zdC1jc2luZ2xlKTogJChvYmopLyU6ICQoc3JjKS8l
LmMgJChvYmopL2ZpeGRlcCBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jc2lu
Z2xlKQorKworKyMgTGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmlsZXMs
IGFsbCBwbGFpbiBjCisrIyBob3N0LWNtdWx0aSAtPiBleGVjdXRhYmxlCisrcXVpZXRfY21kX2hv
c3QtY211bHRpCT0gSE9TVExEICAkQAorKyAgICAgIGNtZF9ob3N0LWNtdWx0aQk9ICQoSE9TVEND
KSAkKGhvc3RjX2ZsYWdzKSAtbyAkQCBcCisrCQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChA
Riktb2JqcykpIFwKKysJCQkgICQoSE9TVF9MREZMQUdTKSAkKEhPU1RMRExJQlNfJChARikpCisr
JChob3N0LWNtdWx0aSk6ICQob2JqKS9maXhkZXAgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWQs
aG9zdC1jbXVsdGkpCisrJChjYWxsIG11bHRpX2RlcGVuZCwkKGhvc3QtY211bHRpKSwgLCAtb2Jq
cykKKysKKysKKysjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmMgZmlsZQorKyMgaG9z
dC1jb2JqcyAtPiAubworK3F1aWV0X2NtZF9ob3N0LWNvYmpzCT0gSE9TVENDICAkQAorKyAgICAg
IGNtZF9ob3N0LWNvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVENGTEFHU18k
KEBGKSlcCisrCQkJICAtYyAtbyAkQCAkPAorKyQoZmlsdGVyLW91dCAlLnRhYi5vLCAkKGZpbHRl
ci1vdXQgJS5sZXgubywkKGhvc3QtY29ianMpKSk6ICQob2JqKS8lLm86XAorKwkJJChzcmMpLyUu
YyAkKG9iaikvZml4ZGVwIEZPUkNFCisrCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNvYmpz
KQorKworKyQoZmlsdGVyICUubGV4Lm8sJChob3N0LWNvYmpzKSk6ICQob2JqKS8lLmxleC5vOiAg
JChvYmopLyUubGV4LmMgJChvYmopL2ZpeGRlcCBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZF9k
ZXAsaG9zdC1jb2JqcykKKysKKyskKGZpbHRlciAlLnRhYi5vLCQoaG9zdC1jb2JqcykpOiAkKG9i
aikvJS50YWIubzogICQob2JqKS8lLnRhYi5jICQob2JqKS9maXhkZXAgRk9SQ0UKKysJJChjYWxs
IGlmX2NoYW5nZWRfZGVwLGhvc3QtY29ianMpCisrCisrIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFz
ZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYSBtaXh0dXJlIG9mIC5jIGFuZCAuY2MKKysjIGhvc3Qt
Y3h4bXVsdGkgLT4gZXhlY3V0YWJsZQorK3F1aWV0X2NtZF9ob3N0LWN4eG11bHRpCT0gSE9TVExE
ICAkQAorKyAgICAgIGNtZF9ob3N0LWN4eG11bHRpCT0gJChIT1NUQ1hYKSAkKEhPU1RMREZMQUdT
KSAtbyAkQFwKKysJCQkgICQoZm9yZWFjaCBvLG9ianMgY3h4b2JqcyxcCisrCQkJICAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQoJChARiktJChvKSkpKSBcCisrCQkJICAkKEhPU1RMRExJQlMpICQoSE9T
VExETElCU18kKEBGKSkKKyskKGhvc3QtY3h4bXVsdGkpOiBGT1JDRQorKwkkKGNhbGwgaWZfY2hh
bmdlZCxob3N0LWN4eG11bHRpKQorKyQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWN4eG11bHRp
KSwgLCAtb2JqcyAtY3h4b2JqcykKKysKKysKKysjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5n
bGUgLmNjIChDKyspIGZpbGUKKytxdWlldF9jbWRfaG9zdC1jeHhvYmpzCT0gSE9TVENYWCAkQAor
KyAgICAgIGNtZF9ob3N0LWN4eG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4eF9mbGFncykgJChI
T1NUQ1hYRkxBR1NfJChARikpIFwKKysJCQkgIC1jIC1vICRAICQ8CisrJChob3N0LWN4eG9ianMp
OiAkKG9iaikvJS5vOiAkKHNyYykvJS5jYyBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAs
aG9zdC1jeHhvYmpzKQorKworKyMgQ29tcGlsZSAuYyBmaWxlLCBjcmVhdGUgcG9zaXRpb24gaW5k
ZXBlbmRlbnQgLm8gZmlsZQorKyMgaG9zdC1jc2hvYmpzIC0+IC5vCisrcXVpZXRfY21kX2hvc3Qt
Y3Nob2Jqcwk9IEhPU1RDQyAgLWZQSUMgJEAKKysgICAgICBjbWRfaG9zdC1jc2hvYmpzCT0gJChI
T1NUQ0MpICQoaG9zdGNfZmxhZ3MpIC1mUElDIC1jIC1vICRAICQ8CisrJChob3N0LWNzaG9ianMp
OiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNFCisrCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxo
b3N0LWNzaG9ianMpCisrCisrIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRl
cGVuZGVudCAubyBmaWxlCisrIyBOb3RlIHRoYXQgcGx1Z2luIGNhcGFibGUgZ2NjIHZlcnNpb25z
IGNhbiBiZSBlaXRoZXIgQyBvciBDKysgYmFzZWQKKysjIHRoZXJlZm9yZSBwbHVnaW4gc291cmNl
IGZpbGVzIGhhdmUgdG8gYmUgY29tcGlsYWJsZSBpbiBib3RoIEMgYW5kIEMrKyBtb2RlLgorKyMg
VGhpcyBpcyB3aHkgYSBDKysgY29tcGlsZXIgaXMgaW52b2tlZCBvbiBhIC5jIGZpbGUuCisrIyBo
b3N0LWN4eHNob2JqcyAtPiAubworK3F1aWV0X2NtZF9ob3N0LWN4eHNob2Jqcwk9IEhPU1RDWFgg
LWZQSUMgJEAKKysgICAgICBjbWRfaG9zdC1jeHhzaG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4
eF9mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwKKyskKGhvc3QtY3h4c2hvYmpzKTogJChvYmopLyUu
bzogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCisrCUBlY2hvIHRlc3QtLSRACisrCSQo
Y2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eHNob2JqcykKKysKKyBjbGVhbjoKKyAJJChRKXJt
IC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpCisgZGlzdGNsZWFuOiBjbGVh
bgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxs-0003gD-Og; Mon, 09 Sep 2019 18:00:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxr-0003fx-D5
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:35 +0000
X-Inumbo-ID: b855f6de-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b855f6de-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D3414F2027;
 Mon,  9 Sep 2019 20:00:33 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UBGaX4s575RC; Mon,  9 Sep 2019 20:00:33 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id AD531F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:31 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:31 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:27 +0200
Message-ID: <20190909175939.23936-12-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 11/23] kconfig: Fixdep and host
 flags
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIENGTEFHUywgTERGTEFHUywgaW5jbHVkZSBwYXRocyBhbmQgZml4ZGVwIGZsYWdzIGFzIGEg
cGFydCBvZiB0aGUKaG9zdF9jZmxhZ3MuIFRoZSBob3N0X2NmbGFncyBhcmUgdXNlZCB0byBkZXRl
Y3QgaWYgdGhlcmUgd2FzIGNoYW5nZXMgdG8KdGhlc2UgZmxhZ3MuCgpTaWduZWQtb2ZmLWJ5OiBT
aGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBzdXBwb3J0
L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAgICAgfCAgNiArKysrKy0KIC4uLi9w
YXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcgICAgICAgICB8IDE5ICsrKysrKysrKysr
KysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wOC1maXhk
ZXAtYW5kLWNvbmZpZy1mbGFnCgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtl
ZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKaW5kZXggOGU2NGE5Yjku
LmVkOWE1Y2YwIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTQyLDkgKzQyLDEzIEBAIGhv
c3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY29ianMpKQogaG9zdC1jeHhv
YmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQogZml4ZGVwLW9ianMg
Oj0gJChvYmopL2ZpeGRlcC5vCiAKLUhPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKG9iaikgLURDT05G
SUdfPVwiXCIKK0hPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKHNyYykgLUkkKG9iaikgLURDT05GSUdf
PVwiXCIKIAorX2hvc3RjX2ZsYWdzID0gJChIT1NUQ0ZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1Mp
ICQoSE9TVENGTEFHU18kKGJhc2V0YXJnZXQpLm8pCitfaG9zdGN4eF9mbGFncyA9ICQoSE9TVENY
WEZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoYmFzZXRhcmdldCku
bykKIAoraG9zdGNfZmxhZ3MgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChfaG9zdGNfZmxhZ3Mp
Citob3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y3h4X2ZsYWdzKQog
CiAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQogCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFD
RkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAkPCAtbyAkQApkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZs
YWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxh
ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGEzYTM1OGMKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25m
aWctZmxhZwpAQCAtMCwwICsxLDE5IEBACitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK2luZGV4IDI5
ZGVlNWUuLjljMTEyOTMgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCitAQCAtNDIsOSArNDIs
MTMgQEAgaG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jb2JqcykpCisg
aG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQorIGZp
eGRlcC1vYmpzIDo9ICQob2JqKS9maXhkZXAubworIAorLUhPU1RfRVhUUkFDRkxBR1MgKz0gLUkk
KG9iaikgLURDT05GSUdfPVwiXCIKKytIT1NUX0VYVFJBQ0ZMQUdTICs9IC1JJChzcmMpIC1JJChv
YmopIC1EQ09ORklHXz1cIlwiCisgCisrX2hvc3RjX2ZsYWdzID0gJChIT1NUQ0ZMQUdTKSAkKEhP
U1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHU18kKGJhc2V0YXJnZXQpLm8pCisrX2hvc3RjeHhf
ZmxhZ3MgPSAkKEhPU1RDWFhGTEFHUykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDWFhGTEFH
U18kKGJhc2V0YXJnZXQpLm8pCisgCisraG9zdGNfZmxhZ3MgICAgPSAtV3AsLU1ELCQoZGVwZmls
ZSkgJChfaG9zdGNfZmxhZ3MpCisraG9zdGN4eF9mbGFncyAgPSAtV3AsLU1ELCQoZGVwZmlsZSkg
JChfaG9zdGN4eF9mbGFncykKKyAKKyAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQorIAkk
KEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18k
KEBGKSkgJDwgLW8gJEAKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxu-0003gm-Qc; Mon, 09 Sep 2019 18:00:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxt-0003gb-Q8
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:37 +0000
X-Inumbo-ID: b99574f2-d32b-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b99574f2-d32b-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 05628F2027;
 Mon,  9 Sep 2019 20:00:36 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id MZMmAy4drXwa; Mon,  9 Sep 2019 20:00:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id BB476F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:33 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:31 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:28 +0200
Message-ID: <20190909175939.23936-13-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 12/23] kconfig: Support glob in
 kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN1cHBvcnQgZm9yIGdsb2Igb24ga2NvbmZpZy4gVGFrZW4gZnJvbSBjb3JlYm9vdCBpbXBs
ZW1lbnRhdGlvbi4KClVSTDogaHR0cHM6Ly9naXRodWIuY29tL2NvcmVib290L2NvcmVib290CmNv
bW1pdC1pZDogOTFiYTgwZGQ3OThiCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxz
aGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L2xleGVy
LmwgICAgICAgICAgICAgICAgICAgfCAyNyArKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L2xr
Yy5oICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzdXBwb3J0L2tjb25maWcubmV3L3BhcnNl
ci55ICAgICAgICAgICAgICAgICAgfCAgMiArLQogLi4uL3BhdGNoZXMvMDktc3VwcG9ydC1nbG9i
LWluLWtjb25maWcgICAgICAgIHwgNzAgKysrKysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFu
Z2VkLCA5OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmlnCgpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9sZXhlci5sCmluZGV4IDYzNTRjOTA1Li5jNWFjYjMyZCAxMDA2NDQKLS0tIGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9sZXhlci5sCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubApA
QCAtOCw2ICs4LDcgQEAKICV7CiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxnbG9i
Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxz
dGRsaWIuaD4KQEAgLTQ0Miw2ICs0NDMsMzIgQEAgdm9pZCB6Y29uZl9uZXh0ZmlsZShjb25zdCBj
aGFyICpuYW1lKQogCWN1cnJlbnRfZmlsZSA9IGZpbGU7CiB9CiAKK3ZvaWQgemNvbmZfbmV4dGZp
bGVzKGNvbnN0IGNoYXIgKndpbGRjYXJkKQoreworCWdsb2JfdCBnID0gezB9OworCWNoYXIgKip3
OworCWludCBpOworCisJaWYgKGdsb2Iod2lsZGNhcmQsIDAsIE5VTEwsICZnKSAhPSAwKSB7CisJ
CXJldHVybjsKKwl9CisJaWYgKGcuZ2xfcGF0aHYgPT0gTlVMTCkgeworCQlnbG9iZnJlZSgmZyk7
CisJCXJldHVybjsKKwl9CisKKwkvKiB3b3JraW5nIHRocm91Z2ggZmlsZXMgYmFja3dhcmRzLCBz
aW5jZQorCSAqIHdlJ3JlIGZpcnN0IHB1c2hpbmcgdGhlbSBvbiBhIHN0YWNrCisJICogYmVmb3Jl
IGFjdHVhbGx5IGhhbmRsaW5nIHRoZW0uCisJICovCisJZm9yIChpID0gZy5nbF9wYXRoYzsgaSA+
IDA7IGktLSkgeworCQl3ID0gJmcuZ2xfcGF0aHZbaSAtIDFdOworCQl6Y29uZl9uZXh0ZmlsZSgq
dyk7CisJfQorCisJZ2xvYmZyZWUoJmcpOworfQorCiBzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxl
KHZvaWQpCiB7CiAJc3RydWN0IGJ1ZmZlciAqcGFyZW50OwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9sa2MuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKaW5kZXggY2JjNzY1
OGUuLjY5ZDJjNzdhIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oCisrKyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKQEAgLTQ0LDYgKzQ0LDcgQEAgdm9pZCB6Y29uZl9z
dGFydGhlbHAodm9pZCk7CiBGSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKTsKIHZv
aWQgemNvbmZfaW5pdHNjYW4oY29uc3QgY2hhciAqbmFtZSk7CiB2b2lkIHpjb25mX25leHRmaWxl
KGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB6Y29uZl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqbmFt
ZSk7CiBpbnQgemNvbmZfbGluZW5vKHZvaWQpOwogY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2
b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueSBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvcGFyc2VyLnkKaW5kZXggNjA5MzZjNzYuLjk1NzAwZjg4IDEwMDY0NAot
LS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55CisrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcGFyc2VyLnkKQEAgLTM2Niw3ICszNjYsNyBAQCBtZW51X29wdGlvbl9saXN0Ogogc291cmNl
X3N0bXQ6IFRfU09VUkNFIHByb21wdCBUX0VPTAogewogCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOwot
CXpjb25mX25leHRmaWxlKCQyKTsKKwl6Y29uZl9uZXh0ZmlsZXMoJDIpOwogCWZyZWUoJDIpOwog
fTsKIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA5LXN1cHBvcnQt
Z2xvYi1pbi1rY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA5LXN1cHBvcnQt
Z2xvYi1pbi1rY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wMzU3
YzIyMgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wOS1z
dXBwb3J0LWdsb2ItaW4ta2NvbmZpZwpAQCAtMCwwICsxLDcwIEBACitkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9sZXhlci5sIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sCitp
bmRleCA2MzU0YzkwLi5jNWFjYjMyIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9s
ZXhlci5sCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwKK0BAIC04LDYgKzgsNyBA
QAorICV7CisgCisgI2luY2x1ZGUgPGFzc2VydC5oPgorKyNpbmNsdWRlIDxnbG9iLmg+CisgI2lu
Y2x1ZGUgPGxpbWl0cy5oPgorICNpbmNsdWRlIDxzdGRpby5oPgorICNpbmNsdWRlIDxzdGRsaWIu
aD4KK0BAIC00NDIsNiArNDQzLDMyIEBAIHZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAq
bmFtZSkKKyAJY3VycmVudF9maWxlID0gZmlsZTsKKyB9CisgCisrdm9pZCB6Y29uZl9uZXh0Zmls
ZXMoY29uc3QgY2hhciAqd2lsZGNhcmQpCisreworKwlnbG9iX3QgZyA9IHswfTsKKysJY2hhciAq
Knc7CisrCWludCBpOworKworKwlpZiAoZ2xvYih3aWxkY2FyZCwgMCwgTlVMTCwgJmcpICE9IDAp
IHsKKysJCXJldHVybjsKKysJfQorKwlpZiAoZy5nbF9wYXRodiA9PSBOVUxMKSB7CisrCQlnbG9i
ZnJlZSgmZyk7CisrCQlyZXR1cm47CisrCX0KKysKKysJLyogd29ya2luZyB0aHJvdWdoIGZpbGVz
IGJhY2t3YXJkcywgc2luY2UKKysJICogd2UncmUgZmlyc3QgcHVzaGluZyB0aGVtIG9uIGEgc3Rh
Y2sKKysJICogYmVmb3JlIGFjdHVhbGx5IGhhbmRsaW5nIHRoZW0uCisrCSAqLworKwlmb3IgKGkg
PSBnLmdsX3BhdGhjOyBpID4gMDsgaS0tKSB7CisrCQl3ID0gJmcuZ2xfcGF0aHZbaSAtIDFdOwor
KwkJemNvbmZfbmV4dGZpbGUoKncpOworKwl9CisrCisrCWdsb2JmcmVlKCZnKTsKKyt9CisrCisg
c3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKQorIHsKKyAJc3RydWN0IGJ1ZmZlciAqcGFy
ZW50OworZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmggYi9zdXBwb3J0L2tj
b25maWcubmV3L2xrYy5oCitpbmRleCBjYmM3NjU4Li42OWQyYzc3IDEwMDY0NAorLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9sa2MuaAorKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaAor
QEAgLTQ0LDYgKzQ0LDcgQEAgdm9pZCB6Y29uZl9zdGFydGhlbHAodm9pZCk7CisgRklMRSAqemNv
bmZfZm9wZW4oY29uc3QgY2hhciAqbmFtZSk7Cisgdm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBj
aGFyICpuYW1lKTsKKyB2b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpOworK3Zv
aWQgemNvbmZfbmV4dGZpbGVzKGNvbnN0IGNoYXIgKm5hbWUpOworIGludCB6Y29uZl9saW5lbm8o
dm9pZCk7CisgY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKTsKKyAKK2RpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJz
ZXIueQoraW5kZXggNjA5MzZjNy4uOTU3MDBmOCAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcGFyc2VyLnkKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkKK0BAIC0z
NjYsNyArMzY2LDcgQEAgbWVudV9vcHRpb25fbGlzdDoKKyBzb3VyY2Vfc3RtdDogVF9TT1VSQ0Ug
cHJvbXB0IFRfRU9MCisgeworIAlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNc
biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsKKy0JemNvbmZfbmV4dGZp
bGUoJDIpOworKwl6Y29uZl9uZXh0ZmlsZXMoJDIpOworIAlmcmVlKCQyKTsKKyB9OworIAotLSAK
Mi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Nxw-0003hW-SW; Mon, 09 Sep 2019 18:00:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Nxv-0003hD-Qv
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:39 +0000
X-Inumbo-ID: bada281c-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bada281c-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:39 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 15A81F2027;
 Mon,  9 Sep 2019 20:00:38 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id hOc32F_zWchV; Mon,  9 Sep 2019 20:00:37 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DF6C6F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:35 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:31 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:29 +0200
Message-ID: <20190909175939.23936-14-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 13/23] Kconfig: Shifting to the
 new Kconfig system
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW4gdGhpcyBwYXRjaCwgd2UgdXNlIHRoZSB2ZXJzaW9uIG9mIHRoZSBrY29uZmlnLiBUaGUgZXhp
c3RpbmcKa2NvbmZpZyBzdGlsbCBleGlzdHMuIEluIGxhdGVyIGNvbW1pdHMgd2Ugd2lsbCByZXBs
YWNlIHRoZSBvbGQKa2NvbmZpZyB3aXRoIHRoZSBuZXcgY29uZmlnLgoKTk9URTogVGhlIGxhdGVy
IGtjb25maWcgc3lzdGVtIGRlcHJlY2F0ZXMgc2lsZW50b2xkY29uZmlnLiBJbiBhCmxhdGVyIHBh
dGNoIHRoaXMgd2lsbCBiZSByZXBsYWNlIHN5bmNjb25maWcuCgpTaWduZWQtb2ZmLWJ5OiBTaGFy
YW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBDb25maWcudWsg
ICAgICAgICAgICAgICAgICAgIHwgMjkgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIE1h
a2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAxNiArKysrKysrKystLS0tLS0tCiBzdXBwb3J0
L2J1aWxkL01ha2VmaWxlLnJ1bGVzIHwgIDIgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0
aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmln
LnVrCmluZGV4IGQyYTRlMzJkLi4yMWFlNjU3ZiAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBi
L0NvbmZpZy51awpAQCAtMiwzNCArMiwzNSBAQAogIyBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUg
c3ludGF4IG9mIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlLAogIyBzZWUgaHR0cHM6Ly93d3cua2Vy
bmVsLm9yZy9kb2MvRG9jdW1lbnRhdGlvbi9rYnVpbGQvQ29uZmlnLmluLWxhbmd1YWdlLnR4dC4K
ICMKLW1haW5tZW51ICJVbmlrcmFmdC8kVUtfRlVMTFZFUlNJT04gQ29uZmlndXJhdGlvbiIKK21h
aW5tZW51ICJVbmlrcmFmdC8kKFVLX0ZVTExWRVJTSU9OKSBDb25maWd1cmF0aW9uIgogY29uZmln
IEtDT05GSUdfQVBQX0lOCiAJc3RyaW5nCi0Jb3B0aW9uIGVudj0iS0NPTkZJR19BUFBfSU4iCisJ
ZGVmYXVsdCAiJChLQ09ORklHX0FQUF9JTikiCiBjb25maWcgS0NPTkZJR19FTElCX0lOCiAJc3Ry
aW5nCi0Jb3B0aW9uIGVudj0iS0NPTkZJR19FTElCX0lOIgorCWRlZmF1bHQgIiQoS0NPTkZJR19F
TElCX0lOKSIKIGNvbmZpZyBLQ09ORklHX0VQTEFUX0lOCiAJc3RyaW5nCi0Jb3B0aW9uIGVudj0i
S0NPTkZJR19FUExBVF9JTiIKKwlkZWZhdWx0ICIkKEtDT05GSUdfRVBMQVRfSU4pIgorCiBjb25m
aWcgVUtfRlVMTFZFUlNJT04KIAlzdHJpbmcKLQlvcHRpb24gZW52PSJVS19GVUxMVkVSU0lPTiIK
KwlkZWZhdWx0ICIkKFVLX0ZVTExWRVJTSU9OKSIKIGNvbmZpZyBVS19DT0RFTkFNRQogCXN0cmlu
ZwotCW9wdGlvbiBlbnY9IlVLX0NPREVOQU1FIgorCWRlZmF1bHQgIiQoVUtfQ09ERU5BTUUpIgog
Y29uZmlnIFVLX0FSQ0gKIAlzdHJpbmcKLQlvcHRpb24gZW52PSJVS19BUkNIIgorCWRlZmF1bHQg
IiQoVUtfQVJDSCkiCiBjb25maWcgVUtfQkFTRQogCXN0cmluZwotCW9wdGlvbiBlbnY9IlVLX0JB
U0UiCisJZGVmYXVsdCAiJChVS19CQVNFKSIKIGNvbmZpZyBVS19BUFAKIAlzdHJpbmcKLQlvcHRp
b24gZW52PSJVS19BUFAiCisJZGVmYXVsdCAiJChVS19BUFApIgogY29uZmlnIFVLX0RFRk5BTUUK
IAlzdHJpbmcKLQlvcHRpb24gZW52PSJVS19OQU1FIgorCWRlZmF1bHQgIiQoVUtfTkFNRSkiCiAK
IG1lbnUgIkFyY2hpdGVjdHVyZSBTZWxlY3Rpb24iCiAJc291cmNlICJhcmNoL0NvbmZpZy51ayIK
QEAgLTM3LDEyICszOCwxMiBAQCBlbmRtZW51CiAKIG1lbnUgIlBsYXRmb3JtIENvbmZpZ3VyYXRp
b24iCiAJc291cmNlICJwbGF0L0NvbmZpZy51ayIKLQlzb3VyY2UgIiRLQ09ORklHX0VQTEFUX0lO
IgorCXNvdXJjZSAiJChLQ09ORklHX0VQTEFUX0lOKSIKIGVuZG1lbnUKIAogbWVudSAiTGlicmFy
eSBDb25maWd1cmF0aW9uIgogCXNvdXJjZSAibGliL0NvbmZpZy51ayIKLQlzb3VyY2UgIiRLQ09O
RklHX0VMSUJfSU4iCisJc291cmNlICIkKEtDT05GSUdfRUxJQl9JTikiCiBlbmRtZW51CiAKIG1l
bnUgIkJ1aWxkIE9wdGlvbnMiCkBAIC0xODMsMTIgKzE4NCwxMiBAQCBlbmRtZW51CiAKIGlmIFVL
X0FQUCAhPSBVS19CQVNFCiAJbWVudSAiQXBwbGljYXRpb24gT3B0aW9ucyIKLQkJc291cmNlICIk
S0NPTkZJR19BUFBfSU4iCisJCXNvdXJjZSAiJChLQ09ORklHX0FQUF9JTikiCiAJZW5kbWVudQog
ZW5kaWYKIAogY29uZmlnIFVLX05BTUUKIAlzdHJpbmcgIkltYWdlIG5hbWUiCi0JZGVmYXVsdCAk
VUtfREVGTkFNRQorCWRlZmF1bHQgVUtfREVGTkFNRQogCWhlbHAKIAkgIE5hbWUgdG8gYmUgdXNl
ZCBmb3IgZmluYWwgaW1hZ2UKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXgg
YWZiODIwNjguLmM3YTZhOTlmIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpA
QCAtMTI3LDExICsxMjcsMTEgQEAgRUxJQl9ESVIgOj0gJChyZWFscGF0aCAkKHBhdHN1YnN0ICUv
LCUsJChwYXRzdWJzdCAlLiwlLCQoRUxJQl9ESVIpKSkpCiAjIEtDb25maWcgc2V0dGluZ3MKIENP
TkZJR19ESVIgICAgICAgICAgICA6PSAkKENPTkZJR19VS19BUFApCiBDT05GSUdfQ09ORklHX0lO
ICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkvQ29uZmlnLnVrCi1DT05GSUcgICAgICAgICAgICAg
ICAgOj0gJChDT05GSUdfVUtfQkFTRSkvc3VwcG9ydC9rY29uZmlnCitDT05GSUcgICAgICAgICAg
ICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkvc3VwcG9ydC9rY29uZmlnLm5ldwogVUtfQ09ORklH
ICAgICAgICAgICAgIDo9ICQoQ09ORklHX0RJUikvLmNvbmZpZwogVUtfQ09ORklHX09VVCAgICAg
ICAgIDo9ICQoQlVJTERfRElSKS9jb25maWcKIFVLX0dFTkVSQVRFRF9JTkNMVURFUyA6PSAkKEJV
SUxEX0RJUikvaW5jbHVkZQotS0NPTkZJR19ESVIgICAgICAgICAgIDo9ICQoQlVJTERfRElSKS9r
Y29uZmlnCitLQ09ORklHX0RJUiAgICAgICAgICAgOj0gJChCVUlMRF9ESVIpL2tjb25maWcubmV3
CiBVS19GSVhERVAgICAgICAgICAgICAgOj0gJChLQ09ORklHX0RJUikvZml4ZGVwCiBLQ09ORklH
X0FVVE9DT05GSUcgICAgOj0gJChLQ09ORklHX0RJUikvYXV0by5jb25mCiBLQ09ORklHX1RSSVNU
QVRFICAgICAgOj0gJChLQ09ORklHX0RJUikvdHJpc3RhdGUuY29uZmlnCkBAIC00NzMsNiArNDcz
LDggQEAgQVIJCTo9IGFyCiBDQVQJCTo9IGNhdAogU0VECQk6PSBzZWQKIEFXSwkJOj0gYXdrCitZ
QUNDCQk6PSBiaXNvbgorTEVYICAgICAJOj0gZmxleAogUEFUQ0gJCTo9IHBhdGNoCiBHWklQCQk6
PSBnemlwCiBUQVIJCTo9IHRhcgpAQCAtNDk2LDcgKzQ5OCw3IEBAIENYWEZMQUdTCSs9IC1EQ0Nf
VkVSU0lPTj0kKENDX1ZFUlNJT04pCiBHT0NGTEFHUwkrPSAtRENDX1ZFUlNJT049JChDQ19WRVJT
SU9OKQogCiAjIGVuc3VyZSAkKEJVSUxEX0RJUikva2NvbmZpZywgJChCVUlMRF9ESVIpL2luY2x1
ZGUgYW5kICQoQlVJTERfRElSKS9pbmNsdWRlL3VrIGV4aXN0cwotJChjYWxsIG1rX3N1Yl9idWls
ZF9kaXIsa2NvbmZpZykKKyQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGtjb25maWcubmV3KQogJChj
YWxsIG1rX3N1Yl9idWlsZF9kaXIsaW5jbHVkZSkKICQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGlu
Y2x1ZGUvdWspCiAKQEAgLTY2MSwxMyArNjYzLDEzIEBAICQoS0NPTkZJR19FUExBVF9JTikubmV3
OgogIyBlbmZvcmNlIGV4ZWN1dGlvbgogLlBIT05ZOiAkKEtDT05GSUdfQVBQX0lOKS5uZXcgJChL
Q09ORklHX0VMSUJfSU4pLm5ldyAkKEtDT05GSUdfRVBMQVRfSU4pLm5ldwogCi1LQ09ORklHX1RP
T0xTID0gY29uZiBtY29uZiBnY29uZiBuY29uZiBmaXhkZXAKK0tDT05GSUdfVE9PTFMgPSBjb25m
IG1jb25mIGdjb25mIG5jb25mIHFjb25mIGZpeGRlcAogS0NPTkZJR19UT09MUyA6PSAkKGFkZHBy
ZWZpeCAkKEtDT05GSUdfRElSKS8sJChLQ09ORklHX1RPT0xTKSkKIAogJChLQ09ORklHX1RPT0xT
KToKIAlta2RpciAtcCAkKEBEKS9seGRpYWxvZwogCSQoTUFLRSkgQ0M9IiQoSE9TVENDX05PQ0NB
Q0hFKSIgSE9TVENDPSIkKEhPU1RDQ19OT0NDQUNIRSkiIFwKLQkgICAgb2JqPSQoQEQpIC1DICQo
Q09ORklHKSAtZiBNYWtlZmlsZS5iciAkKEBGKQorCSAgICBvYmo9JChARCkgLUMgJChDT05GSUcp
IC1mIE1ha2VmaWxlLmJyICQoQCkKIAogREVGQ09ORklHID0gJChjYWxsIHFzdHJpcCwkKFVLX0RF
RkNPTkZJRykpCiAKQEAgLTY3NSw3ICs2NzcsNyBAQCBERUZDT05GSUcgPSAkKGNhbGwgcXN0cmlw
LCQoVUtfREVGQ09ORklHKSkKICMgcmVjb2duaXplIHRoYXQgaWYgaXQncyBzdGlsbCBhdCBpdHMg
ZGVmYXVsdCAkKENPTkZJR19ESVIpL2RlZmNvbmZpZwogQ09NTU9OX0NPTkZJR19FTlYgPSBcCiAJ
Q09ORklHXz0iQ09ORklHXyIgXAotCUJSMl9DT05GSUc9IiQoVUtfQ09ORklHKSIgXAorCUtDT05G
SUdfQ09ORklHPSIkKFVLX0NPTkZJRykiIFwKIAlLQ09ORklHX0FVVE9DT05GSUc9IiQoS0NPTkZJ
R19BVVRPQ09ORklHKSIgXAogCUtDT05GSUdfQVVUT0hFQURFUj0iJChLQ09ORklHX0FVVE9IRUFE
RVIpIiBcCiAJS0NPTkZJR19UUklTVEFURT0iJChLQ09ORklHX1RSSVNUQVRFKSIgXApAQCAtNzYz
LDcgKzc2NSw3IEBAIHNhdmVkZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09ORklH
X0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJCiAKICMgUmVnZW5lcmF0ZSAkKEtD
T05GSUdfQVVUT0hFQURFUikgd2hlbmV2ZXIgJChVS19DT05GSUcpIGNoYW5nZWQKICQoS0NPTkZJ
R19BVVRPSEVBREVSKTogJChVS19DT05GSUcpICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09ORklH
X0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikKLQlAJChDT01N
T05fQ09ORklHX0VOVikgJChLQ09ORklHX0RJUikvY29uZiAtLXNpbGVudG9sZGNvbmZpZyAkKENP
TkZJR19DT05GSUdfSU4pCisJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoS0NPTkZJR19ESVIpL2Nv
bmYgLS1zeW5jY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikKIAogCiAjIE1pc2Mgc3R1ZmYKZGlm
ZiAtLWdpdCBhL3N1cHBvcnQvYnVpbGQvTWFrZWZpbGUucnVsZXMgYi9zdXBwb3J0L2J1aWxkL01h
a2VmaWxlLnJ1bGVzCmluZGV4IDc0YjZkN2QxLi45MDZhMGE2ZSAxMDA2NDQKLS0tIGEvc3VwcG9y
dC9idWlsZC9NYWtlZmlsZS5ydWxlcworKysgYi9zdXBwb3J0L2J1aWxkL01ha2VmaWxlLnJ1bGVz
CkBAIC0yMzQsNyArMjM0LDcgQEAgZGVwZmxhZ3MgPSAtV3AkKGNvbW1hKS1NRCQoY29tbWEpJChj
YWxsIHRtcF9kZXBmaWxlLCQoMykpCiBkZWZpbmUgYnVpbGRfY21kX2ZpeGRlcCA9CiAJJChjYWxs
IGJ1aWxkX2NtZCwkMSwkMiwkMywkNCkKIAkkUSAkKFVLX0ZJWERFUCkgJChjYWxsIHRtcF9kZXBm
aWxlLCQzKSAkMyAnJChjYWxsIHN0cmlwLCQ0KScgXAotCQkkKEJVSUxEX0RJUikgCT4gJChjYWxs
IG91dDJkZXAsJDMpICYmIFwKKwkJPiAkKGNhbGwgb3V0MmRlcCwkMykgJiYgXAogCQkkKFJNKSAk
KGNhbGwgdG1wX2RlcGZpbGUsJDMpCiBlbmRlZgogCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:51 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Ny7-0003jZ-6Y; Mon, 09 Sep 2019 18:00:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Ny5-0003jE-9b
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:49 +0000
X-Inumbo-ID: c0529e96-d32b-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c0529e96-d32b-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:48 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id E22451047B8;
 Mon,  9 Sep 2019 20:00:46 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id cOm9-bCHiWAx; Mon,  9 Sep 2019 20:00:46 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id A06B7105694
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:46 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:46 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:31 +0200
Message-ID: <20190909175939.23936-16-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 15/23] build: Use kconfiglib from
 Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGttZW51Y29uZmlnLCBndWljb25maWcgcnVsZXMgdG8g
dXNlIHdpdGgKa2NvbmZpZ2xpYi4KClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNo
YXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlIHwgNDUgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDIgaW5z
ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2Vm
aWxlCmluZGV4IGM3YTZhOTlmLi5mNzM0Mjk2MiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIv
TWFrZWZpbGUKQEAgLTEyOCw2ICsxMjgsNyBAQCBFTElCX0RJUiA6PSAkKHJlYWxwYXRoICQocGF0
c3Vic3QgJS8sJSwkKHBhdHN1YnN0ICUuLCUsJChFTElCX0RJUikpKSkKIENPTkZJR19ESVIgICAg
ICAgICAgICA6PSAkKENPTkZJR19VS19BUFApCiBDT05GSUdfQ09ORklHX0lOICAgICAgOj0gJChD
T05GSUdfVUtfQkFTRSkvQ29uZmlnLnVrCiBDT05GSUcgICAgICAgICAgICAgICAgOj0gJChDT05G
SUdfVUtfQkFTRSkvc3VwcG9ydC9rY29uZmlnLm5ldworQ09ORklHTElCCSAgICAgIDo9ICQoQ09O
RklHX1VLX0JBU0UpL3N1cHBvcnQva2NvbmZpZ2xpYgogVUtfQ09ORklHICAgICAgICAgICAgIDo9
ICQoQ09ORklHX0RJUikvLmNvbmZpZwogVUtfQ09ORklHX09VVCAgICAgICAgIDo9ICQoQlVJTERf
RElSKS9jb25maWcKIFVLX0dFTkVSQVRFRF9JTkNMVURFUyA6PSAkKEJVSUxEX0RJUikvaW5jbHVk
ZQpAQCAtMTYxLDkgKzE2MiwxMyBAQCBleHBvcnQgREFURSA6PSAkKHNoZWxsIGRhdGUgKyVZJW0l
ZCkKIAogIyBNYWtlZmlsZSB0YXJnZXRzCiBudWxsX3RhcmdldHMJCTo9IHByaW50LXZlcnNpb24g
cHJpbnQtdmFycyBoZWxwCi1ub2NvbmZpZ190YXJnZXRzCTo9IG1lbnVjb25maWcgbmNvbmZpZyBn
Y29uZmlnIHhjb25maWcgY29uZmlnIG9sZGNvbmZpZyByYW5kY29uZmlnIFwKLQkJCSAgIGRlZmNv
bmZpZyAlX2RlZmNvbmZpZyBhbGx5ZXNjb25maWcgYWxsbm9jb25maWcgc2lsZW50b2xkY29uZmln
IHJlbGVhc2UgXAotCQkJICAgb2xkZGVmY29uZmlnIHByb3BlcmNsZWFuIGRpc3RjbGVhbiAkKG51
bGxfdGFyZ2V0cykKK25vY29uZmlnX3RhcmdldHMJOj0gdWtjb25maWcgbWVudWNvbmZpZyBuY29u
ZmlnIGdjb25maWcgeGNvbmZpZyBjb25maWcgXAorCQkJICAgb2xkY29uZmlnIHJhbmRjb25maWcg
XAorCQkJICAgZGVmY29uZmlnICVfZGVmY29uZmlnIGFsbHllc2NvbmZpZyBhbGxub2NvbmZpZyBc
CisJCQkgICBzaWxlbnRvbGRjb25maWcgXAorCQkJICAgcmVsZWFzZSBvbGRkZWZjb25maWcgcHJv
cGVyY2xlYW4gZGlzdGNsZWFuIFwKKwkJCSAgIHNjcmlwdGNvbmZpZyBpc2NyaXB0Y29uZmlnIGtt
ZW51Y29uZmlnIGd1aWNvbmZpZyBcCisJCQkgICBkdW1wdmFyc2NvbmZpZyAkKG51bGxfdGFyZ2V0
cykKIAogIyBUbyBwdXQgbW9yZSBmb2N1cyBvbiB3YXJuaW5ncywgYmUgbGVzcyB2ZXJib3NlIGFz
IGRlZmF1bHQKICMgVXNlICdtYWtlIFY9MScgdG8gc2VlIHRoZSBmdWxsIGNvbW1hbmRzCkBAIC02
OTQsNiArNjk5LDM4IEBAIENPTU1PTl9DT05GSUdfRU5WID0gXAogCUtDT05GSUdfRVBMQVRfSU49
IiQoS0NPTkZJR19FUExBVF9JTikiIFwKIAlVS19OQU1FPSIkKENPTkZJR19VS19OQU1FKSIKIAor
UEhPTlkgKz0gc2NyaXB0Y29uZmlnIGlzY3JpcHRjb25maWcga21lbnVjb25maWcgZ3VpY29uZmln
IGR1bXB2YXJzY29uZmlnCisKK1BZVEhPTkNNRCA/PSBweXRob24KK2tweXRob24gOj0gUFlUSE9O
UEFUSD0kKFVLX0NPTkZJR0xJQik6JCRQWVRIT05QQVRIICQoUFlUSE9OQ01EKQorCitpZm5lcSAo
JChmaWx0ZXIgc2NyaXB0Y29uZmlnLCQoTUFLRUNNREdPQUxTKSksKQoraWZuZGVmIFNDUklQVAor
JChlcnJvciBVc2UgIm1ha2Ugc2NyaXB0Y29uZmlnIFNDUklQVD08cGF0aCB0byBzY3JpcHQ+IFtT
Q1JJUFRfQVJHPTxhcmd1bWVudD5dIikKK2VuZGlmCitlbmRpZgorCitzY3JpcHRjb25maWc6ICQo
S0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCisJ
JChRKSQoa3B5dGhvbikgJChTQ1JJUFQpICQoS2NvbmZpZykgJChpZiAkKFNDUklQVF9BUkcpLCIk
KFNDUklQVF9BUkcpIikKKworaXNjcmlwdGNvbmZpZzogJChLQ09ORklHX0FQUF9JTikgJChLQ09O
RklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorCSQo
USkkKGtweXRob24pIC1pIC1jIFwKKwkgICJpbXBvcnQga2NvbmZpZ2xpYjsgXAorCSAgIGtjb25m
ID0ga2NvbmZpZ2xpYi5LY29uZmlnKCckKFVLX0NPTkZJRyknKTsgXAorCSAgIHByaW50KCdBIEtj
b25maWcgaW5zdGFuY2UgXCdrY29uZlwnIGZvciB0aGUgYXJjaGl0ZWN0dXJlICQoQVJDSCkgaGFz
IGJlZW4gY3JlYXRlZC4nKSIKKwora21lbnVjb25maWc6JChLQ09ORklHX0RJUikvZml4ZGVwICQo
S0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCisJ
QCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChDT05GSUdMSUIpL21lbnVjb25maWcu
cHkgJChDT05GSUdfQ09ORklHX0lOKQorCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChV
S19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKworZ3VpY29uZmlnOiAkKEtDT05GSUdfQVBQX0lO
KSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorCUAkKGtweXRob24pICQo
Q09ORklHTElCKS9ndWljb25maWcucHkgJChDT05GSUdfQ09ORklHX0lOKQorCUAkKFNDUklQVFNf
RElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKworZHVtcHZh
cnNjb25maWc6ICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdf
RVBMQVRfSU4pCisJJChRKSQoa3B5dGhvbikgJChDT05GSUdMSUIpL2V4YW1wbGVzL2R1bXB2YXJz
LnB5ICQoQ09ORklHX0NPTkZJR19JTikKKwlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQo
VUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisKIHhjb25maWc6ICQoS0NPTkZJR19ESVIpL3Fj
b25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRf
SU4pCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NPTkZJR19JTikKIAlAJChT
Q1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCkBA
IC04NjIsNiArODk5LDggQEAgaGVscDoKIAlAZWNobyAnQ29uZmlndXJhdGlvbjonCiAJQGVjaG8g
JyogbWVudWNvbmZpZyAgICAgICAgICAgICAtIGludGVyYWN0aXZlIGN1cnNlcy1iYXNlZCBjb25m
aWd1cmF0b3InCiAJQGVjaG8gJyAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IHRh
cmdldCB3aGVuIG5vIGNvbmZpZyBleGlzdHMpJworCUBlY2hvICcgIGttZW51Y29uZmlnICAgICAg
ICAgICAgLSBpbnRlcmFjdGl2ZSBweXRob24gYmFzZWQgY29uZmlndXJhdG9yJworCUBlY2hvICcg
IGd1aWNvbmZpZyAgICAgICAgICAgICAgLSBpbnRlcmFjdGl2ZSBweXRob24gYmFzZWQgY29uZmln
dXJhdG9yJwogCUBlY2hvICcgIG5jb25maWcgICAgICAgICAgICAgICAgLSBpbnRlcmFjdGl2ZSBu
Y3Vyc2VzLWJhc2VkIGNvbmZpZ3VyYXRvcicKIAlAZWNobyAnICB4Y29uZmlnICAgICAgICAgICAg
ICAgIC0gaW50ZXJhY3RpdmUgUXQtYmFzZWQgY29uZmlndXJhdG9yJwogCUBlY2hvICcgIGdjb25m
aWcgICAgICAgICAgICAgICAgLSBpbnRlcmFjdGl2ZSBHVEstYmFzZWQgY29uZmlndXJhdG9yJwot
LSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Ny8-0003jx-8A; Mon, 09 Sep 2019 18:00:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Ny6-0003jQ-F6
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:50 +0000
X-Inumbo-ID: c15bc466-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c15bc466-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:50 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0425FF2028;
 Mon,  9 Sep 2019 20:00:49 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id EowMIeT5Y_vY; Mon,  9 Sep 2019 20:00:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D0361F2027
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:46 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:46 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:32 +0200
Message-ID: <20190909175939.23936-17-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 16/23] Replace the
 silentoldconfig with syncconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHNpbGVudG9sZGNvbmZpZyBoYXMgYmVlbiByZXBsYWNlZCBpbiB0aGUgbmV3ZXIgZmVhdHVy
ZSBvZiBrY29uZmlnCndpdGggdGhlIHN5bmNjb25maWcuIFdpdGggdGhpcyBwYXRjaCB3ZSByZXBs
YWNlIGl0LgoKU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5h
bUBuZWNsYWIuZXU+Ci0tLQogTWFrZWZpbGUgfCA2ICsrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMg
aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01h
a2VmaWxlCmluZGV4IGY3MzQyOTYyLi5iYTQ3ODMyYyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysr
IGIvTWFrZWZpbGUKQEAgLTc3NCw4ICs3NzQsOCBAQCBhbGxub2NvbmZpZzogJChLQ09ORklHX0RJ
UikvY29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHXwog
CUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLW9sZGRlZmNvbmZpZyAkKENPTkZJR19DT05GSUdf
SU4pID4vZGV2L251bGwKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklH
KSAkKFVLX0NPTkZJR19PVVQpCiAKLXNpbGVudG9sZGNvbmZpZzogJChLQ09ORklHX0RJUikvY29u
ZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lO
KQotCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLXNpbGVudG9sZGNvbmZpZyAkKENPTkZJR19D
T05GSUdfSU4pCitzeW5jY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBf
SU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCisJQCQoQ09NTU9OX0NP
TkZJR19FTlYpICQ8IC0tc3luY2NvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoU0NSSVBU
U19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCiBvbGRk
ZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklH
X0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikKQEAgLTkwNSw3ICs5MDUsNyBAQCBoZWxwOgog
CUBlY2hvICcgIHhjb25maWcgICAgICAgICAgICAgICAgLSBpbnRlcmFjdGl2ZSBRdC1iYXNlZCBj
b25maWd1cmF0b3InCiAJQGVjaG8gJyAgZ2NvbmZpZyAgICAgICAgICAgICAgICAtIGludGVyYWN0
aXZlIEdUSy1iYXNlZCBjb25maWd1cmF0b3InCiAJQGVjaG8gJyAgb2xkY29uZmlnICAgICAgICAg
ICAgICAtIHJlc29sdmUgYW55IHVucmVzb2x2ZWQgc3ltYm9scyBpbiAuY29uZmlnJwotCUBlY2hv
ICcgIHNpbGVudG9sZGNvbmZpZyAgICAgICAgLSBTYW1lIGFzIG9sZGNvbmZpZywgYnV0IHF1aWV0
bHksIGFkZGl0aW9uYWxseSB1cGRhdGUgZGVwcycKKwlAZWNobyAnICBzeW5jY29uZmlnICAgICAg
ICAgICAgIC0gU2FtZSBhcyBvbGRjb25maWcsIGJ1dCBxdWlldGx5LCBhZGRpdGlvbmFsbHkgdXBk
YXRlIGRlcHMnCiAJQGVjaG8gJyAgb2xkZGVmY29uZmlnICAgICAgICAgICAtIFNhbWUgYXMgc2ls
ZW50b2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUn
CiAJQGVjaG8gJyAgcmFuZGNvbmZpZyAgICAgICAgICAgICAtIE5ldyBjb25maWcgd2l0aCByYW5k
b20gYW5zd2VyIHRvIGFsbCBvcHRpb25zJwogCUBlY2hvICcgIGRlZmNvbmZpZyAgICAgICAgICAg
ICAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBhbnN3ZXIgdG8gYWxsIG9wdGlvbnMnCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NyB-0003kp-BJ; Mon, 09 Sep 2019 18:00:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Ny9-0003kW-J4
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:53 +0000
X-Inumbo-ID: c297174a-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c297174a-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:52 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 14E12F2028;
 Mon,  9 Sep 2019 20:00:51 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id SAxEQGOgwXMN; Mon,  9 Sep 2019 20:00:50 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E0272F2027
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:48 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:46 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:33 +0200
Message-ID: <20190909175939.23936-18-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 17/23] lib: Use glob instead of
 adding each lib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2luY2UgdGhlIGtjb25maWcgdmVyc2lvbiBzdXBwb3J0cyB3aWxkIGNhcmQgb3BlcmF0aW9ucwp3
ZSByZXBsYWNlIGFkZGl0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIGxpYnJhcnkgd2l0aCBhIHdpbGQK
Y2FyZCBvcGVyYXRpb24gb24gdGhlICdsaWIvJyBkaXJlY3RvcnkuCgpTaWduZWQtb2ZmLWJ5OiBT
aGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBsaWIvQ29u
ZmlnLnVrIHwgMjggKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDEgaW5zZXJ0aW9uKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvQ29uZmln
LnVrIGIvbGliL0NvbmZpZy51awppbmRleCBmMGQ2MjA1NC4uMjNlNzA1ZDQgMTAwNjQ0Ci0tLSBh
L2xpYi9Db25maWcudWsKKysrIGIvbGliL0NvbmZpZy51awpAQCAtMjcsMzAgKzI3LDQgQEAgY29u
ZmlnIEhBVkVfTldfU1RBQ0sKICMgTGlicmFyeSBkZWZpbml0aW9ucwogIwogIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKLXNvdXJjZSAibGliL3VrYm9vdC9Db25maWcudWsiCi1zb3VyY2UgImxpYi91
a2RlYnVnL0NvbmZpZy51ayIKLXNvdXJjZSAibGliL3VrYXJncGFyc2UvQ29uZmlnLnVrIgotc291
cmNlICJsaWIvdWt1bmlzdGQvQ29uZmlnLnVrIgotc291cmNlICJsaWIvdWtzeXNpbmZvL0NvbmZp
Zy51ayIKLXNvdXJjZSAibGliL3VrdGltZWNvbnYvQ29uZmlnLnVrIgotc291cmNlICJsaWIvbm9s
aWJjL0NvbmZpZy51ayIKLXNvdXJjZSAibGliL3VrYWxsb2MvQ29uZmlnLnVrIgotc291cmNlICJs
aWIvdWthbGxvY2JidWRkeS9Db25maWcudWsiCi1zb3VyY2UgImxpYi91a3NjaGVkL0NvbmZpZy51
ayIKLXNvdXJjZSAibGliL3Vrc2NoZWRjb29wL0NvbmZpZy51ayIKLXNvdXJjZSAibGliL2ZkdC9D
b25maWcudWsiCi1zb3VyY2UgImxpYi9zeXNjYWxsX3NoaW0vQ29uZmlnLnVrIgotc291cmNlICJs
aWIvdmZzY29yZS9Db25maWcudWsiCi1zb3VyY2UgImxpYi9yYW1mcy9Db25maWcudWsiCi1zb3Vy
Y2UgImxpYi9kZXZmcy9Db25maWcudWsiCi1zb3VyY2UgImxpYi85cGZzL0NvbmZpZy51ayIKLXNv
dXJjZSAibGliL3VrbG9jay9Db25maWcudWsiCi1zb3VyY2UgImxpYi91a21waS9Db25maWcudWsi
Ci1zb3VyY2UgImxpYi91a3N3cmFuZC9Db25maWcudWsiCi1zb3VyY2UgImxpYi91a2J1cy9Db25m
aWcudWsiCi1zb3VyY2UgImxpYi91a3NnbGlzdC9Db25maWcudWsiCi1zb3VyY2UgImxpYi91a25l
dGRldi9Db25maWcudWsiCi1zb3VyY2UgImxpYi91azlwL0NvbmZpZy51ayIKLXNvdXJjZSAibGli
L3Bvc2l4LWxpYmRsL0NvbmZpZy51ayIKLXNvdXJjZSAibGliL3VrbGlicGFyYW0vQ29uZmlnLnVr
Igotc291cmNlICJsaWIvdWt0aW1lL0NvbmZpZy51ayIKK3NvdXJjZSAibGliLyovQ29uZmlnLnVr
IgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:00:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:00:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NyC-0003lF-D1; Mon, 09 Sep 2019 18:00:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NyB-0003km-8H
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:55 +0000
X-Inumbo-ID: c3cf5744-d32b-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c3cf5744-d32b-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 281D1F2028;
 Mon,  9 Sep 2019 20:00:53 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id zy6xGs-7ZsnZ; Mon,  9 Sep 2019 20:00:53 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EFD15F2027
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:50 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:46 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:34 +0200
Message-ID: <20190909175939.23936-19-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 18/23] build: Pre-process
 Config.uk within kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGtjb25maWcgZXh0ZXJuYWwgbGlicmFyeSB3ZXJlIHByb2Nlc3NlZCBpbiB0aGUgTWFrZWZp
bGUuIFdpdGgKdGhpcyBwYXRjaCB3ZSB1c2UgdGhlIGtjb25maWcgcHJlcHJvY2VzcyBmZWF0dXJl
IHRvIGdlbmVyYXRlIHRoZQpuZWNlc3NhcnkgQ29uZmlnLnVrIGZpbGVzCgpTaWduZWQtb2ZmLWJ5
OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBDb25m
aWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIzICsrLS0tLQogTWFrZWZpbGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4OCArKysrKysrKystLS0tLS0tLS0tLS0t
CiBsaWIvQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4IC0tCiBwbGF0L0Nv
bmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0IC0KIHN1cHBvcnQvc2NyaXB0cy91
a19idWlsZF9jb25maWd1cmUuc2ggfCAxMDIgKysrKysrKysrKysrKysrKysrKysrKysrKysKIDUg
ZmlsZXMgY2hhbmdlZCwgMTQyIGluc2VydGlvbnMoKyksIDgzIGRlbGV0aW9ucygtKQogY3JlYXRl
IG1vZGUgMTAwNzU1IHN1cHBvcnQvc2NyaXB0cy91a19idWlsZF9jb25maWd1cmUuc2gKCmRpZmYg
LS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggMjFhZTY1N2YuLjAxYTdhYzg1IDEw
MDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBAIC0zLDE2ICszLDYgQEAKICMg
c2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL0RvY3VtZW50YXRpb24va2J1aWxkL0NvbmZp
Zy5pbi1sYW5ndWFnZS50eHQuCiAjCiBtYWlubWVudSAiVW5pa3JhZnQvJChVS19GVUxMVkVSU0lP
TikgQ29uZmlndXJhdGlvbiIKLWNvbmZpZyBLQ09ORklHX0FQUF9JTgotCXN0cmluZwotCWRlZmF1
bHQgIiQoS0NPTkZJR19BUFBfSU4pIgotY29uZmlnIEtDT05GSUdfRUxJQl9JTgotCXN0cmluZwot
CWRlZmF1bHQgIiQoS0NPTkZJR19FTElCX0lOKSIKLWNvbmZpZyBLQ09ORklHX0VQTEFUX0lOCi0J
c3RyaW5nCi0JZGVmYXVsdCAiJChLQ09ORklHX0VQTEFUX0lOKSIKLQogY29uZmlnIFVLX0ZVTExW
RVJTSU9OCiAJc3RyaW5nCiAJZGVmYXVsdCAiJChVS19GVUxMVkVSU0lPTikiCkBAIC0yMiw2ICsx
Miw5IEBAIGNvbmZpZyBVS19DT0RFTkFNRQogY29uZmlnIFVLX0FSQ0gKIAlzdHJpbmcKIAlkZWZh
dWx0ICIkKFVLX0FSQ0gpIgorY29uZmlnIE5PX0FQUAorCWRlZl9ib29sICQoc2hlbGwsdGVzdCAk
KFVLX0JBU0UpID0gJChVS19BUFApICYmIGVjaG8geSB8fCBlY2hvIG4pCisKIGNvbmZpZyBVS19C
QVNFCiAJc3RyaW5nCiAJZGVmYXVsdCAiJChVS19CQVNFKSIKQEAgLTM3LDEzICszMCwxMSBAQCBt
ZW51ICJBcmNoaXRlY3R1cmUgU2VsZWN0aW9uIgogZW5kbWVudQogCiBtZW51ICJQbGF0Zm9ybSBD
b25maWd1cmF0aW9uIgotCXNvdXJjZSAicGxhdC9Db25maWcudWsiCi0Jc291cmNlICIkKEtDT05G
SUdfRVBMQVRfSU4pIgorCXNvdXJjZSAiJChzaGVsbCwkKFVLX0JBU0UpL3N1cHBvcnQvc2NyaXB0
cy91a19idWlsZF9jb25maWd1cmUuc2ggLXAgJyQoS0NPTkZJR19QTEFUX0RJUiknIC1vICckKEtD
T05GSUdfUExBVF9JTiknKSIKIGVuZG1lbnUKIAogbWVudSAiTGlicmFyeSBDb25maWd1cmF0aW9u
IgotCXNvdXJjZSAibGliL0NvbmZpZy51ayIKLQlzb3VyY2UgIiQoS0NPTkZJR19FTElCX0lOKSIK
Kwlzb3VyY2UgIiQoc2hlbGwsJChVS19CQVNFKS9zdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29u
ZmlndXJlLnNoIC1lICckKEtDT05GSUdfTElCX0RJUiknIC1vICckKEtDT05GSUdfTElCX0lOKScp
IgogZW5kbWVudQogCiBtZW51ICJCdWlsZCBPcHRpb25zIgpAQCAtMTgyLDkgKzE3Myw5IEBAIGNv
bmZpZyBDUk9TU19DT01QSUxFCiAjCSAgc3lzdGVtLgogZW5kbWVudQogCi1pZiBVS19BUFAgIT0g
VUtfQkFTRQoraWYgIU5PX0FQUAogCW1lbnUgIkFwcGxpY2F0aW9uIE9wdGlvbnMiCi0JCXNvdXJj
ZSAiJChLQ09ORklHX0FQUF9JTikiCisJCXNvdXJjZSAiJChzaGVsbCwkKFVLX0JBU0UpL3N1cHBv
cnQvc2NyaXB0cy91a19idWlsZF9jb25maWd1cmUuc2ggLWEgJyQoS0NPTkZJR19BUFBfRElSKScp
IgogCWVuZG1lbnUKIGVuZGlmCiAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5k
ZXggYmE0NzgzMmMuLjAwZDAxYzJiIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmls
ZQpAQCAtMTI1LDYgKzEyNSw4IEBAIGVuZGlmCiBFTElCX0RJUiA6PSAkKHJlYWxwYXRoICQocGF0
c3Vic3QgJS8sJSwkKHBhdHN1YnN0ICUuLCUsJChFTElCX0RJUikpKSkKIAogIyBLQ29uZmlnIHNl
dHRpbmdzCisKK0NPTkZJR19VS19QTEFUICAgICAgICA6PSAkKENPTkZJR19VS19CQVNFKS9wbGF0
LwogQ09ORklHX0RJUiAgICAgICAgICAgIDo9ICQoQ09ORklHX1VLX0FQUCkKIENPTkZJR19DT05G
SUdfSU4gICAgICA6PSAkKENPTkZJR19VS19CQVNFKS9Db25maWcudWsKIENPTkZJRyAgICAgICAg
ICAgICAgICA6PSAkKENPTkZJR19VS19CQVNFKS9zdXBwb3J0L2tjb25maWcubmV3CkBAIC0xMzcs
OSArMTM5LDEyIEBAIFVLX0ZJWERFUCAgICAgICAgICAgICA6PSAkKEtDT05GSUdfRElSKS9maXhk
ZXAKIEtDT05GSUdfQVVUT0NPTkZJRyAgICA6PSAkKEtDT05GSUdfRElSKS9hdXRvLmNvbmYKIEtD
T05GSUdfVFJJU1RBVEUgICAgICA6PSAkKEtDT05GSUdfRElSKS90cmlzdGF0ZS5jb25maWcKIEtD
T05GSUdfQVVUT0hFQURFUiAgICA6PSAkKFVLX0dFTkVSQVRFRF9JTkNMVURFUykvdWsvX2NvbmZp
Zy5oCi1LQ09ORklHX0FQUF9JTiAgICAgICAgOj0gJChLQ09ORklHX0RJUikvYXBwLnVrCi1LQ09O
RklHX0VQTEFUX0lOICAgICAgOj0gJChLQ09ORklHX0RJUikvZXBsYXQudWsKLUtDT05GSUdfRUxJ
Ql9JTiAgICAgICA6PSAkKEtDT05GSUdfRElSKS9lbGliLnVrCitLQ09ORklHX0FQUF9ESVIgICAg
ICAgOj0gJChDT05GSUdfVUtfQVBQKQorS0NPTkZJR19MSUJfSU4gICAgICAgIDo9ICQoS0NPTkZJ
R19ESVIpL2xpYnMudWsKK0tDT05GSUdfREVGX1BMQVRTICAgICA6PSAkKGFkZHByZWZpeCAkKENP
TkZJR19VS19QTEFUKSxsaW51eHUga3ZtIHhlbikKK0tDT05GSUdfTElCX0RJUiAgICAgICA6PSAk
KENPTkZJR19VS19CQVNFKS9saWIgJChFTElCX0RJUikKK0tDT05GSUdfUExBVF9ESVIgICAgICA6
PSAkKEtDT05GSUdfREVGX1BMQVRTKSAkKEVQTEFUX0RJUikgJChDT05GSUdfVUtfUExBVCkKK0tD
T05GSUdfUExBVF9JTiAgICAgICA6PSAkKEtDT05GSUdfRElSKS9wbGF0LnVrCiAKICMgTWFrZWZp
bGUgc3VwcG9ydCBzY3JpcHRzCiBTQ1JJUFRTX0RJUiA6PSAkKENPTkZJR19VS19CQVNFKS9zdXBw
b3J0L3NjcmlwdHMKQEAgLTYzOCwzNiArNjQzLDYgQEAgZW5kaWYKIEhPU1RDRkxBR1MgPSAkKENG
TEFHU19GT1JfQlVJTEQpCiBleHBvcnQgSE9TVENGTEFHUwogCi0jIGF1dG8tZ2VuZXJhdGVkIEtD
b25maWcgZmlsZXMgZm9yIGluY2x1ZGluZyBleHRlcm5hbCBhcHAKLSQoS0NPTkZJR19BUFBfSU4p
ICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pOiAlOiAlLm5ldwotCUBjbXAg
LXMgJF4gJEA7IGlmIFsgJCQ/IC1uZSAwIF07IHRoZW4gY3AgJF4gJEA7IGZpCi0KLSQoS0NPTkZJ
R19BUFBfSU4pLm5ldzoKLQlAZWNobyAnIyBleHRlcm5hbCBhcHBsaWNhdGlvbicgPiAkQAotaWZu
ZXEgKCQoQ09ORklHX1VLX0JBU0UpLCQoQ09ORklHX1VLX0FQUCkpCi0JQGVjaG8gJ3NvdXJjZSAi
JChBUFBfRElSKS9Db25maWcudWsiJyA+PiAkQAotZWxzZQotCUBlY2hvICdjb21tZW50ICJObyBl
eHRlcm5hbCBhcHBsaWNhdGlvbiBzcGVjaWZpZWQiJyA+PiAkQAotZW5kaWYKLQotIyBhdXRvLWdl
bmVyYXRlZCBLQ29uZmlnIGZpbGVzIGZvciBpbmNsdWRpbmcgZXh0ZXJuYWwgbGlicmFyaWVzCi0k
KEtDT05GSUdfRUxJQl9JTikubmV3OgotCUBlY2hvICcjIGV4dGVybmFsIGxpYnJhcmllcycgPiAk
QAotCUAkKGZvcmVhY2ggRSwkKEVMSUJfRElSKSwgXAotCQllY2hvICdzb3VyY2UgIiQoRSkvQ29u
ZmlnLnVrIicgPj4gJEA7IFwKLQkpCi0KLSMgYXV0by1nZW5lcmF0ZWQgS0NvbmZpZyBmaWxlIGZv
ciBpbmNsdWRpbmcKLSMgZXh0ZXJuYWwgcGxhdGZvcm0gbGlicmFyaWVzIHRvIHRoZSBtZW51Ci0k
KEtDT05GSUdfRVBMQVRfSU4pLm5ldzoKLQlAZWNobyAnIyBleHRlcm5hbCBwbGF0Zm9ybSBsaWJy
YXJpZXMnID4gJEAKLQlAJChmb3JlYWNoIEUsJChFUExBVF9ESVIpLCBcCi0JCWVjaG8gJ3NvdXJj
ZSAiJChFKS9Db25maWcudWsiJyA+PiAkQDsgXAotCSkKLQotIyBlbmZvcmNlIGV4ZWN1dGlvbgot
LlBIT05ZOiAkKEtDT05GSUdfQVBQX0lOKS5uZXcgJChLQ09ORklHX0VMSUJfSU4pLm5ldyAkKEtD
T05GSUdfRVBMQVRfSU4pLm5ldwotCiBLQ09ORklHX1RPT0xTID0gY29uZiBtY29uZiBnY29uZiBu
Y29uZiBxY29uZiBmaXhkZXAKIEtDT05GSUdfVE9PTFMgOj0gJChhZGRwcmVmaXggJChLQ09ORklH
X0RJUikvLCQoS0NPTkZJR19UT09MUykpCiAKQEAgLTY5NCw5ICs2NjksMTEgQEAgQ09NTU9OX0NP
TkZJR19FTlYgPSBcCiAJVUtfRlVMTFZFUlNJT049IiQoVUtfRlVMTFZFUlNJT04pIiBcCiAJVUtf
Q09ERU5BTUU9IiQoVUtfQ09ERU5BTUUpIiBcCiAJVUtfQVJDSD0iJChDT05GSUdfVUtfQVJDSCki
IFwKLQlLQ09ORklHX0FQUF9JTj0iJChLQ09ORklHX0FQUF9JTikiIFwKLQlLQ09ORklHX0VMSUJf
SU49IiQoS0NPTkZJR19FTElCX0lOKSIgXAotCUtDT05GSUdfRVBMQVRfSU49IiQoS0NPTkZJR19F
UExBVF9JTikiIFwKKwlLQ09ORklHX0FQUF9ESVI9IiQoS0NPTkZJR19BUFBfRElSKSIgXAorCUtD
T05GSUdfTElCX0RJUj0iJChLQ09ORklHX0xJQl9ESVIpIiBcCisJS0NPTkZJR19MSUJfSU49IiQo
S0NPTkZJR19MSUJfSU4pIiBcCisJS0NPTkZJR19QTEFUX0RJUj0iJChLQ09ORklHX1BMQVRfRElS
KSIgXAorCUtDT05GSUdfUExBVF9JTj0iJChLQ09ORklHX1BMQVRfSU4pIiBcCiAJVUtfTkFNRT0i
JChDT05GSUdfVUtfTkFNRSkiCiAKIFBIT05ZICs9IHNjcmlwdGNvbmZpZyBpc2NyaXB0Y29uZmln
IGttZW51Y29uZmlnIGd1aWNvbmZpZyBkdW1wdmFyc2NvbmZpZwpAQCAtNzE5LDM1ICs2OTYsMzYg
QEAgaXNjcmlwdGNvbmZpZzogJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQo
S0NPTkZJR19FUExBVF9JTikgJChLQ09ORkkKIAkgICBrY29uZiA9IGtjb25maWdsaWIuS2NvbmZp
ZygnJChVS19DT05GSUcpJyk7IFwKIAkgICBwcmludCgnQSBLY29uZmlnIGluc3RhbmNlIFwna2Nv
bmZcJyBmb3IgdGhlIGFyY2hpdGVjdHVyZSAkKEFSQ0gpIGhhcyBiZWVuIGNyZWF0ZWQuJykiCiAK
LWttZW51Y29uZmlnOiQoS0NPTkZJR19ESVIpL2ZpeGRlcCAkKEtDT05GSUdfQVBQX0lOKSAkKEtD
T05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQotCUAkKENPTU1PTl9DT05GSUdfRU5W
KSAkKGtweXRob24pICQoQ09ORklHTElCKS9tZW51Y29uZmlnLnB5ICQoQ09ORklHX0NPTkZJR19J
TikKK2ttZW51Y29uZmlnOiQoS0NPTkZJR19ESVIpL2ZpeGRlcAorCUAkKENPTU1PTl9DT05GSUdf
RU5WKSAkKGtweXRob24pICQoQ09ORklHTElCKS9tZW51Y29uZmlnLnB5IFwKKwkJJChDT05GSUdf
Q09ORklHX0lOKQogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQo
VUtfQ09ORklHX09VVCkKIAotZ3VpY29uZmlnOiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdf
RUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorZ3VpY29uZmlnOiAkKEtDT05GSUdfRElSKS9m
aXhkZXAKIAlAJChrcHl0aG9uKSAkKENPTkZJR0xJQikvZ3VpY29uZmlnLnB5ICQoQ09ORklHX0NP
TkZJR19JTikKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVL
X0NPTkZJR19PVVQpCiAKLWR1bXB2YXJzY29uZmlnOiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05G
SUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorZHVtcHZhcnNjb25maWc6JChLQ09ORklH
X0RJUikvZml4ZGVwCiAJJChRKSQoa3B5dGhvbikgJChDT05GSUdMSUIpL2V4YW1wbGVzL2R1bXB2
YXJzLnB5ICQoQ09ORklHX0NPTkZJR19JTikKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRl
ICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKLXhjb25maWc6ICQoS0NPTkZJR19ESVIp
L3Fjb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBM
QVRfSU4pCit4Y29uZmlnOiAkKEtDT05GSUdfRElSKS9xY29uZgogCUAkKENPTU1PTl9DT05GSUdf
RU5WKSAkPCAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0
ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCi1nY29uZmlnOiAkKEtDT05GSUdfRElS
KS9nY29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQ
TEFUX0lOKQorZ2NvbmZpZzogJChLQ09ORklHX0RJUikvZ2NvbmYKIAlAJChDT01NT05fQ09ORklH
X0VOVikgc3JjdHJlZT0kKENPTkZJR19VS19CQVNFKSAkPCAkKENPTkZJR19DT05GSUdfSU4pCiAJ
QCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VU
KQogCi1tZW51Y29uZmlnOiAkKEtDT05GSUdfRElSKS9tY29uZiAkKEtDT05GSUdfQVBQX0lOKSAk
KEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorbWVudWNvbmZpZzogJChLQ09O
RklHX0RJUikvbWNvbmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgJChDT05GSUdfQ09ORklH
X0lOKQogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09O
RklHX09VVCkKIAotbmNvbmZpZzogJChLQ09ORklHX0RJUikvbmNvbmYgJChLQ09ORklHX0FQUF9J
TikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikKK25jb25maWc6ICQoS0NP
TkZJR19ESVIpL25jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NPTkZJ
R19JTikKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NP
TkZJR19PVVQpCiAKLWNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lO
KSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorY29uZmlnOiAkKEtDT05G
SUdfRElSKS9jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NPTkZJR19J
TikKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJ
R19PVVQpCiAKQEAgLTc1NSw0MyArNzMzLDQzIEBAIGNvbmZpZzogJChLQ09ORklHX0RJUikvY29u
ZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUCiAj
IFNLSVBfTEVHQUNZPXkgdG8gZGlzYWJsZSB0aGUgbGVnYWN5IG9wdGlvbnMuIEhvd2V2ZXIsIGlu
IHRoYXQgY2FzZQogIyBubyB2YWx1ZXMgYXJlIHNldCBmb3IgdGhlIGxlZ2FjeSBvcHRpb25zIHNv
IGEgc3Vic2VxdWVudCBvbGRjb25maWcKICMgd2lsbCBxdWVyeSB0aGVtLiBUaGVyZWZvcmUsIHJ1
biBhbiBhZGRpdGlvbmFsIG9sZGRlZmNvbmZpZy4KLW9sZGNvbmZpZzogJChLQ09ORklHX0RJUikv
Y29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFU
X0lOKQorb2xkY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19F
TlYpICQ8IC0tb2xkY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikKIAlAJChTQ1JJUFRTX0RJUikv
Y29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKLXJhbmRjb25maWc6
ICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4p
ICQoS0NPTkZJR19FUExBVF9JTikKK3JhbmRjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlA
JChDT01NT05fQ09ORklHX0VOVikgU0tJUF9MRUdBQ1k9eSAkPCAtLXJhbmRjb25maWcgJChDT05G
SUdfQ09ORklHX0lOKQogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLW9sZGRlZmNvbmZpZyAk
KENPTkZJR19DT05GSUdfSU4pID4vZGV2L251bGwKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBk
YXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKLWFsbHllc2NvbmZpZzogJChLQ09O
RklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09O
RklHX0VQTEFUX0lOKQorYWxseWVzY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mCiAJQCQoQ09N
TU9OX0NPTkZJR19FTlYpIFNLSVBfTEVHQUNZPXkgJDwgLS1hbGx5ZXNjb25maWcgJChDT05GSUdf
Q09ORklHX0lOKQogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLW9sZGRlZmNvbmZpZyAkKENP
TkZJR19DT05GSUdfSU4pID4vZGV2L251bGwKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRl
ICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKLWFsbG5vY29uZmlnOiAkKEtDT05GSUdf
RElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdf
RVBMQVRfSU4pCithbGxub2NvbmZpZzogJChLQ09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9D
T05GSUdfRU5WKSBTS0lQX0xFR0FDWT15ICQ8IC0tYWxsbm9jb25maWcgJChDT05GSUdfQ09ORklH
X0lOKQogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLW9sZGRlZmNvbmZpZyAkKENPTkZJR19D
T05GSUdfSU4pID4vZGV2L251bGwKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtf
Q09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKLXN5bmNjb25maWc6ICQoS0NPTkZJR19ESVIpL2Nv
bmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9J
TikKK3N5bmNjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VO
VikgJDwgLS1zeW5jY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikKIAlAJChTQ1JJUFRTX0RJUikv
Y29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKLW9sZGRlZmNvbmZp
ZzogJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9J
TikgJChLQ09ORklHX0VQTEFUX0lOKQorb2xkZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25m
CiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJ
R19JTikKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NP
TkZJR19PVVQpCiAKLWRlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQ
X0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorZGVmY29uZmlnOiAk
KEtDT05GSUdfRElSKS9jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8IC0tZGVmY29uZmln
JChpZiAkKERFRkNPTkZJRyksPSQoREVGQ09ORklHKSkgJChDT05GSUdfQ09ORklHX0lOKQogCUAk
KFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkK
IAogIyBPdmVycmlkZSB0aGUgVUtfREVGQ09ORklHIGZyb20gQ09NTU9OX0NPTkZJR19FTlYgd2l0
aCB0aGUgbmV3IGRlZmNvbmZpZwotJV9kZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYgJChB
KS9jb25maWdzLyVfZGVmY29uZmlnICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lO
KSAkKEtDT05GSUdfRVBMQVRfSU4pCislX2RlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAk
KEEpL2NvbmZpZ3MvJV9kZWZjb25maWcKIAlAJChDT01NT05fQ09ORklHX0VOVikgVUtfREVGQ09O
RklHPSQoQSkvY29uZmlncy8kQCBcCiAJCSQ8IC0tZGVmY29uZmlnPSQoQSkvY29uZmlncy8kQCAk
KENPTkZJR19DT05GSUdfSU4pCiAKLXNhdmVkZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYg
JChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikK
K3NhdmVkZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VO
VikgJDwgXAogCQktLXNhdmVkZWZjb25maWc9JChpZiAkKERFRkNPTkZJRyksJChERUZDT05GSUcp
LCQoQ09ORklHX0RJUikvZGVmY29uZmlnKSBcCiAJCSQoQ09ORklHX0NPTkZJR19JTikKQEAgLTgw
MSw3ICs3NzksNyBAQCBzYXZlZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJ
R19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSQogLlBIT05ZOiBkZWZjb25maWcg
c2F2ZWRlZmNvbmZpZyBzaWxlbnRvbGRjb25maWcKIAogIyBSZWdlbmVyYXRlICQoS0NPTkZJR19B
VVRPSEVBREVSKSB3aGVuZXZlciAkKFVLX0NPTkZJRykgY2hhbmdlZAotJChLQ09ORklHX0FVVE9I
RUFERVIpOiAkKFVLX0NPTkZJRykgJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lO
KSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorJChLQ09ORklHX0FVVE9I
RUFERVIpOiAkKFVLX0NPTkZJRykgJChLQ09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9DT05G
SUdfRU5WKSAkKEtDT05GSUdfRElSKS9jb25mIC0tc3luY2NvbmZpZyAkKENPTkZJR19DT05GSUdf
SU4pCiAKIApkaWZmIC0tZ2l0IGEvbGliL0NvbmZpZy51ayBiL2xpYi9Db25maWcudWsKaW5kZXgg
MjNlNzA1ZDQuLjQ0MzExZGUzIDEwMDY0NAotLS0gYS9saWIvQ29uZmlnLnVrCisrKyBiL2xpYi9D
b25maWcudWsKQEAgLTIwLDExICsyMCwzIEBAIGNvbmZpZyBIQVZFX1NDSEVECiBjb25maWcgSEFW
RV9OV19TVEFDSwogICAgICAgIGJvb2wKICAgICAgICBkZWZhdWx0IG4KLQotCi0jIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIwotIwotIyBMaWJyYXJ5IGRlZmluaXRpb25zCi0jCi0jIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwotc291cmNlICJsaWIvKi9Db25maWcudWsiCmRpZmYgLS1naXQgYS9wbGF0L0Nv
bmZpZy51ayBiL3BsYXQvQ29uZmlnLnVrCmluZGV4IDhhODc4ZWIwLi4wZWI1YTEwYiAxMDA2NDQK
LS0tIGEvcGxhdC9Db25maWcudWsKKysrIGIvcGxhdC9Db25maWcudWsKQEAgLTEsNyArMSwzIEBA
Ci1zb3VyY2UgInBsYXQveGVuL0NvbmZpZy51ayIKLXNvdXJjZSAicGxhdC9rdm0vQ29uZmlnLnVr
Igotc291cmNlICJwbGF0L2xpbnV4dS9Db25maWcudWsiCi0KIG1lbnUgIlBsYXRmb3JtIEludGVy
ZmFjZSBPcHRpb25zIgogY29uZmlnIFVLUExBVF9NRU1STkFNRQogCWJvb2wgIk1lbW9yeSByZWdp
b24gbmFtZXMiCmRpZmYgLS1naXQgYS9zdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29uZmlndXJl
LnNoIGIvc3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaApuZXcgZmlsZSBtb2Rl
IDEwMDc1NQppbmRleCAwMDAwMDAwMC4uMWRmOGM1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBw
b3J0L3NjcmlwdHMvdWtfYnVpbGRfY29uZmlndXJlLnNoCkBAIC0wLDAgKzEsMTAyIEBACisjIS9i
aW4vYmFzaAorCitPUFRfQkFTRU5BTUU9YGJhc2VuYW1lICQwYAorT1BUX1NUUklORz0iYTplOmhv
OnA6IgorCityZWFkIC1yIC1kICcnIE9QVF9IRUxQICA8PC0gRU9ICisJYSAtIFRoZSBhcHBsaWNh
dGlvbiBsb2NhdGlvbgorCWUgLSBUaGUgbG9jYXRpb24gb2YgdGhlIGV4dGVybmFsIGxpYnJhcmll
cworCXAgLSBUaGUgbG9jYXRpb24gb2YgZXh0ZXJuYWwgcGxhdGZvcm1zCisJbyAtIFRoZSBvdXRw
dXQgY29uZmlndXJhdGlvbiBmaWxlCisJaCAtIFByaW50IFVzYWdlCitFT0gKKworcHJpbnRfdXNh
Z2UoKSB7CisJcHJpbnRmICIlcyBbJXNdXG4iICR7T1BUX0JBU0VOQU1FfSAke09QVF9TVFJJTkd9
OworCXByaW50ZiAiJXNcbiIgIiR7T1BUX0hFTFB9IgorfQorCitmZXRjaF9wbGF0cygpIHsKKwls
b2NhbCBmaWxlcz07CisJZmlsZXM9YGZpbmQgJHtAfSAtbWF4ZGVwdGggMSAtbmFtZSAiQ29uZmln
LnVrImAKKwllY2hvICR7ZmlsZXN9Cit9CisKK2ZldGNoX2xpYnMoKSB7CisJbG9jYWwgZmlsZXM9
OworCWZpbGVzPWBmaW5kICR7QH0gLW5hbWUgIkNvbmZpZy51ayJgCisJZWNobyAke2ZpbGVzfQor
fQorCitmZXRjaF9hcHAoKSB7CisJbG9jYWwgZmlsZXM9OworCWZpbGVzPWBmaW5kICR7MX0gLW5h
bWUgIkNvbmZpZy51ayJgCisJZWNobyAke2ZpbGVzfQorfQorCitjb25maWdfb3V0X2NyZWF0ZSgp
IHsKKworCVtbIC1mICR7Mn0gXV0gfHwgdG91Y2ggJHsyfTsKKworCWZvciBmaWxlIGluICR7MX0K
KwlkbworCQlbWyAteiBgY2F0ICR7Mn0gfCBncmVwICR7ZmlsZX1gIF1dICYmIFwKKwkJCXsgZWNo
byAic291cmNlIFwiJHtmaWxlfVwiIiA+PiAkezJ9OyB9CisJZG9uZQorfQorCitpZiBbICQjIC1l
cSAwIF07Cit0aGVuCisJcHJpbnRfdXNhZ2UKKwlleGl0IDE7CitmaQorCitbWyAtbiAke0NPTkZJ
R19VS19CQVNFfSBdXSAmJiBVS19CQVNFPSR7Q09ORklHX1VLX0JBU0V9OworW1sgLW4gJHtVS19C
QVNFfSBdXSB8fCBVS19CQVNFPSQocmVhZGxpbmsgLWYgJChkaXJuYW1lICQwKS8uLi8uLikKKwor
Q09ORklHX0ZJTEVTPTsKKword2hpbGUgZ2V0b3B0cyAke09QVF9TVFJJTkd9IG9wdAorZG8KKwlj
YXNlICR7b3B0fSBpbgorCWEpCisJCUFQUF9ESVI9IiR7T1BUQVJHfSIKKwkJW1sgLWQgJHtBUFBf
RElSfSBdXSB8fCBcCisJCQl7IGVjaG8gIkNhbm5vdCBmaW5kIHRoZSBhcHBsaWNhdGlvbiI7IGV4
aXQgMTsgfQorCQlpZiBbICR7VUtfQkFTRX0gIT0gJHtBUFBfRElSfSBdCisJCXRoZW4KKwkJCUNP
TkZJR19GSUxFUz0kKGZldGNoX2FwcCAke0FQUF9ESVJ9KQorCQkJZWNobyAke0NPTkZJR19GSUxF
U307CisJCWVsc2UKKwkJCUNPTkZJR19GSUxFUz0ke0JVSUxEX0RJUn0vYXBwLnVrCisJCQlbWyAt
ZiAke0JVSUxEX0RJUn0vYXBwLnVrIF1dIHx8IFwKKwkJCQl7IHRvdWNoICR7Q09ORklHX0ZJTEVT
fTsgfQorCQkJZWNobyAnIyBleHRlcm5hbCBhcHBsaWNhdGlvbicgPj4gJHtDT05GSUdfRklMRVN9
CisJCQllY2hvICdjb21tZW50ICJObyBleHRlcm5hbCBhcHBsaWNhdGlvbiBzcGVjaWZpZWQiJ1wK
KwkJCQkgPj4gJHtDT05GSUdfRklMRVN9CisJCQllY2hvICR7Q09ORklHX0ZJTEVTfTsKKwkJZmkK
KwkJZXhpdCAwOworCTs7CisJZSkKKwkJQ09ORklHX0ZJTEVTPWBmZXRjaF9saWJzICIke09QVEFS
R30iYAorCTs7CisJcCkKKwkJQ09ORklHX0ZJTEVTPWBmZXRjaF9wbGF0cyAiJHtPUFRBUkd9ImAK
Kwk7OworCWgpCisJCXByaW50X3VzYWdlOworCQlleGl0IDA7CisJOzsKKwlvKQorCQlDT05GSUdf
T1VUX0ZJTEU9JHtPUFRBUkd9CisJOzsKKwkqKQorCQlwcmludF91c2FnZQorCQlleGl0IDE7CisJ
OzsKKwllc2FjCitkb25lCisKK2NvbmZpZ19vdXRfY3JlYXRlICIke0NPTkZJR19GSUxFU30iICR7
Q09ORklHX09VVF9GSUxFfQorZWNobyAke0NPTkZJR19PVVRfRklMRX0KLS0gCjIuMjAuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:01:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:01:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NyG-0003m9-Eg; Mon, 09 Sep 2019 18:01:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NyF-0003lx-9O
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:59 +0000
X-Inumbo-ID: c508a23c-d32b-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c508a23c-d32b-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 352D5F2028;
 Mon,  9 Sep 2019 20:00:55 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id IJKWNu_sRHou; Mon,  9 Sep 2019 20:00:55 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0CE81F2027
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:53 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:47 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:35 +0200
Message-ID: <20190909175939.23936-20-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 19/23] build: Support syncconfig
 with kconfiglib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

c3luY2NvbmZpZyBydWxlIGdlbmVyYXRlIHRoZSBjb25maWcgaGVhZGVyIGZpbGUgYW5kIG90aGVy
IGhlYWRlciBmaWxlcwpuZWVkZWQgZnJvbSBmaXhkZXAuIFRoaXMgcGF0Y2ggcHJvdmlkZXMgYSBw
eXRob24gaW50ZXJmYWNlIGZvciB0aGUKc3luY2NvbmZpZyB1c2luZyBzY3JpcHRzeW5jY29uZmln
IHJ1bGUKClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1A
bmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlIHwgMTEgKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2Vk
LCA5IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUg
Yi9NYWtlZmlsZQppbmRleCAwMGQwMWMyYi4uMWY2MGVhNmQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxl
CisrKyBiL01ha2VmaWxlCkBAIC02NzYsNyArNjc2LDggQEAgQ09NTU9OX0NPTkZJR19FTlYgPSBc
CiAJS0NPTkZJR19QTEFUX0lOPSIkKEtDT05GSUdfUExBVF9JTikiIFwKIAlVS19OQU1FPSIkKENP
TkZJR19VS19OQU1FKSIKIAotUEhPTlkgKz0gc2NyaXB0Y29uZmlnIGlzY3JpcHRjb25maWcga21l
bnVjb25maWcgZ3VpY29uZmlnIGR1bXB2YXJzY29uZmlnCitQSE9OWSArPSBzY3JpcHRjb25maWcg
c3luY3NjcmlwdGNvbmZpZyBpc2NyaXB0Y29uZmlnIGttZW51Y29uZmlnIGd1aWNvbmZpZyBcCisJ
CSBkdW1wdmFyc2NvbmZpZwogCiBQWVRIT05DTUQgPz0gcHl0aG9uCiBrcHl0aG9uIDo9IFBZVEhP
TlBBVEg9JChVS19DT05GSUdMSUIpOiQkUFlUSE9OUEFUSCAkKFBZVEhPTkNNRCkKQEAgLTcwMSw3
ICs3MDIsMTIgQEAga21lbnVjb25maWc6JChLQ09ORklHX0RJUikvZml4ZGVwCiAJCSQoQ09ORklH
X0NPTkZJR19JTikKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAk
KFVLX0NPTkZJR19PVVQpCiAKLWd1aWNvbmZpZzogJChLQ09ORklHX0RJUikvZml4ZGVwCitzY3Jp
cHRzeW5jY29uZmlnOiAkKEtDT05GSUdfRElSKS9maXhkZXAKKwlAJChDT01NT05fQ09ORklHX0VO
VikgJChrcHl0aG9uKSAkKENPTkZJR0xJQikvZ2VuY29uZmlnLnB5IFwKKwkJLS1zeW5jLWRlcHM9
JChCVUlMRF9ESVIpL2luY2x1ZGUvY29uZmlnIFwKKwkJLS1oZWFkZXItcGF0aD0kKEtDT05GSUdf
QVVUT0hFQURFUikgJChDT05GSUdfQ09ORklHX0lOKQorCUAkKFNDUklQVFNfRElSKS9jb25maWd1
cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwogCUAkKGtweXRob24pICQoQ09O
RklHTElCKS9ndWljb25maWcucHkgJChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNfRElS
KS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIApAQCAtODg0LDYg
Kzg5MCw3IEBAIGhlbHA6CiAJQGVjaG8gJyAgZ2NvbmZpZyAgICAgICAgICAgICAgICAtIGludGVy
YWN0aXZlIEdUSy1iYXNlZCBjb25maWd1cmF0b3InCiAJQGVjaG8gJyAgb2xkY29uZmlnICAgICAg
ICAgICAgICAtIHJlc29sdmUgYW55IHVucmVzb2x2ZWQgc3ltYm9scyBpbiAuY29uZmlnJwogCUBl
Y2hvICcgIHN5bmNjb25maWcgICAgICAgICAgICAgLSBTYW1lIGFzIG9sZGNvbmZpZywgYnV0IHF1
aWV0bHksIGFkZGl0aW9uYWxseSB1cGRhdGUgZGVwcycKKwlAZWNobyAnICBzY3JpcHRzeW5jY29u
ZmlnICAgICAgIC0gU2FtZSBhcyBvbGRjb25maWcsIGJ1dCBxdWlldGx5LCBhZGRpdGlvbmFsbHkg
dXBkYXRlIGRlcHMnCiAJQGVjaG8gJyAgb2xkZGVmY29uZmlnICAgICAgICAgICAtIFNhbWUgYXMg
c2lsZW50b2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRoZWlyIGRlZmF1bHQgdmFs
dWUnCiAJQGVjaG8gJyAgcmFuZGNvbmZpZyAgICAgICAgICAgICAtIE5ldyBjb25maWcgd2l0aCBy
YW5kb20gYW5zd2VyIHRvIGFsbCBvcHRpb25zJwogCUBlY2hvICcgIGRlZmNvbmZpZyAgICAgICAg
ICAgICAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBhbnN3ZXIgdG8gYWxsIG9wdGlvbnMnCi0t
IAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:01:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:01:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NyL-0003oB-GP; Mon, 09 Sep 2019 18:01:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NyK-0003nu-AA
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:01:04 +0000
X-Inumbo-ID: c8abdada-d32b-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c8abdada-d32b-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 18:01:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 5879A105694;
 Mon,  9 Sep 2019 20:01:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id uSH6vU-yrPJD; Mon,  9 Sep 2019 20:01:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 34F2D1047B8
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:01:01 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:01:00 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:36 +0200
Message-ID: <20190909175939.23936-21-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 20/23] build: Switch build
 directory as CURDIR
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Rml4ZGVwIGFuZCBvdGhlciBrY29uZmlnIGF1dG9nZW5lcmF0ZSBmaWxlcyBvbiBmaXhlZCBwYXRo
LiBJbnN0ZWFkIG9mCnBhdGNoaW5nIHRoZSBrY29uZmlnIGFuZCBmaXhkZXAsIHdlIG1ha2UgY3Vy
cmVudCB3b3JraW5nIGRpcmVjdG9yeSBhcwpidWlsZCBkaXJlY3RvcnkuCgpTaWduZWQtb2ZmLWJ5
OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBDb25m
aWcudWsgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIE1ha2VmaWxlICAgICAgICAgICAgICAg
ICAgICAgfCA3OCArKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIGFyY2gvQ29u
ZmlnLnVrICAgICAgICAgICAgICAgfCAgNiArLS0KIHN1cHBvcnQvc2NyaXB0cy9jb25maWd1cGRh
dGUgfCAgNCArLQogNCBmaWxlcyBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggMDFhN2FjODUu
Ljc3MmRiODU3IDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBAIC0yNiw3
ICsyNiw3IEBAIGNvbmZpZyBVS19ERUZOQU1FCiAJZGVmYXVsdCAiJChVS19OQU1FKSIKIAogbWVu
dSAiQXJjaGl0ZWN0dXJlIFNlbGVjdGlvbiIKLQlzb3VyY2UgImFyY2gvQ29uZmlnLnVrIgorCXNv
dXJjZSAiJChVS19CQVNFKS9hcmNoL0NvbmZpZy51ayIKIGVuZG1lbnUKIAogbWVudSAiUGxhdGZv
cm0gQ29uZmlndXJhdGlvbiIKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXgg
MWY2MGVhNmQuLjA5ZDI1NzlhIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpA
QCAtNjUsNyArNjUsNyBAQCBzcGFjZSA6PSAkKGVtcHR5KSAkKGVtcHR5KQogZXhwb3J0IENEUEFU
SCA6PQogCiAjIFVzZSBjdXJyZW50IGRpcmVjdG9yeSBhcyBiYXNlCi1DT05GSUdfVUtfQkFTRSA6
PSAkKENVUkRJUikKK0NPTkZJR19VS19CQVNFID89ICQoQ1VSRElSKQogb3ZlcnJpZGUgQ09ORklH
X1VLX0JBU0UgOj0gJChyZWFscGF0aCAkKENPTkZJR19VS19CQVNFKSkKIGlmZXEgKCQoQ09ORklH
X1VLX0JBU0UpLCkKICQoZXJyb3IgIkludmFsaWQgYmFzZSBkaXJlY3RvcnkgKENPTkZJR19VS19C
QVNFKSIpCkBAIC0xMDksNiArMTA5LDEyIEBAICQoaWYgJCh3aWxkY2FyZCAkKEUpKSwgXAogKQog
ZW5kaWYKIEVQTEFUX0RJUiA6PSAkKHJlYWxwYXRoICQocGF0c3Vic3QgJS8sJSwkKHBhdHN1YnN0
ICUuLCUsJChFUExBVF9ESVIpKSkpCitidWlsZF9kaXJfbWFrZSAgOj0gMAoraWZuZXEgKCQoQlVJ
TERfRElSKSwkKFVLX0JBU0UpKQorCWJ1aWxkX2Rpcl9tYWtlIDo9IDE7CitlbHNlCisJc3ViX21h
a2VfZXhlYyA6PSAxOworZW5kaWYKIAogIyBFTElCX0RJUiAobGlzdCBvZiBleHRlcm5hbCBsaWJy
YXJpZXMpCiAjIFJldHJpZXZlZCBmcm9tIEwgdmFyaWFibGUgZnJvbSB0aGUgY29tbWFuZCBsaW5l
IChwYXRocyBzZXBhcmF0ZWQgYnkgY29sb24pCkBAIC00MjgsNiArNDM0LDcgQEAgZW5kaWYKICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIENvbXBpbGVyIGFuZCBsaW5rZXIgdG9vbHMKICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCitpZmVxICgkKHN1Yl9tYWtlX2V4ZWMpLCAxKQogaWZlcSAoJChV
S19IQVZFX0RPVF9DT05GSUcpLHkpCiAjIEhpZGUgdHJvdWJsZXNvbWUgZW52aXJvbm1lbnQgdmFy
aWFibGVzIGZyb20gc3ViIHByb2Nlc3NlcwogdW5leHBvcnQgQ09ORklHX0NST1NTX0NPTVBJTEUK
QEAgLTYxNywxOSArNjI0LDI1IEBAIGNsZWFuOiBjbGVhbi1saWJzCiAKIGVsc2UgIyAhKCQoVUtf
SEFWRV9ET1RfQ09ORklHKSx5KQogCi1hbGw6IG1lbnVjb25maWcKIAotLlBIT05ZOiBwcmVwYXJl
IGltYWdlIGxpYnMgb2JqcyBjbGVhbi1saWJzIGNsZWFuCiskKGZpbHRlciAlY29uZmlnLCQoTUFL
RUNNREdPQUxTKSk6ICQoQlVJTERfRElSKS9NYWtlZmlsZQorCisjIyB1a2NvbmZpZwordWtjb25m
aWc6ICQoQlVJTERfRElSKS9NYWtlZmlsZSBtZW51Y29uZmlnCiAKLWZldGNoOiBtZW51Y29uZmln
CithbGw6IHVrY29uZmlnCiAKLXByZXBhcmU6IG1lbnVjb25maWcKKy5QSE9OWTogcHJlcGFyZSBp
bWFnZSBsaWJzIG9ianMgY2xlYW4tbGlicyBjbGVhbiB1a2NvbmZpZwogCi1vYmpzOiBtZW51Y29u
ZmlnCitmZXRjaDogdWtjb25maWcKIAotbGliczogbWVudWNvbmZpZworcHJlcGFyZTogdWtjb25m
aWcKIAotaW1hZ2VzOiBtZW51Y29uZmlnCitvYmpzOiB1a2NvbmZpZworCitsaWJzOiB1a2NvbmZp
ZworCitpbWFnZXM6IHVrY29uZmlnCiAKIGNsZWFuLWxpYnMgY2xlYW46CiAJJChlcnJvciBEbyBu
b3Qga25vdyB3aGljaCBmaWxlcyB0byBjbGVhbiB3aXRob3V0IGhhdmluZyBhIGNvbmZpZ3VyYXRp
b24uIERpZCB5b3UgbWVhbiAncHJvcGVyY2xlYW4nIG9yICdkaXN0Y2xlYW4nPykKQEAgLTcwMCw0
MCArNzEzLDQxIEBAIGlzY3JpcHRjb25maWc6ICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19F
TElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pICQoS0NPTkZJCiBrbWVudWNvbmZpZzokKEtDT05G
SUdfRElSKS9maXhkZXAKIAlAJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9uKSAkKENPTkZJ
R0xJQikvbWVudWNvbmZpZy5weSBcCiAJCSQoQ09ORklHX0NPTkZJR19JTikKLQlAJChTQ1JJUFRT
X0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09N
TU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykg
JChVS19DT05GSUdfT1VUKQogCiBzY3JpcHRzeW5jY29uZmlnOiAkKEtDT05GSUdfRElSKS9maXhk
ZXAKIAlAJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9uKSAkKENPTkZJR0xJQikvZ2VuY29u
ZmlnLnB5IFwKIAkJLS1zeW5jLWRlcHM9JChCVUlMRF9ESVIpL2luY2x1ZGUvY29uZmlnIFwKIAkJ
LS1oZWFkZXItcGF0aD0kKEtDT05GSUdfQVVUT0hFQURFUikgJChDT05GSUdfQ09ORklHX0lOKQot
CUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09V
VCkKKwlAJChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQo
VUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKK2d1aWNvbmZpZzogJChLQ09ORklHX0RJUikv
Zml4ZGVwCiAJQCQoa3B5dGhvbikgJChDT05GSUdMSUIpL2d1aWNvbmZpZy5weSAkKENPTkZJR19D
T05GSUdfSU4pCi0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChV
S19DT05GSUdfT1VUKQorCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25m
aWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIAogZHVtcHZhcnNjb25maWc6
JChLQ09ORklHX0RJUikvZml4ZGVwCiAJJChRKSQoa3B5dGhvbikgJChDT05GSUdMSUIpL2V4YW1w
bGVzL2R1bXB2YXJzLnB5ICQoQ09ORklHX0NPTkZJR19JTikKLQlAJChTQ1JJUFRTX0RJUikvY29u
ZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJJChDT01NT05fQ09ORklH
X0VOVikgQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05G
SUdfT1VUKQogCiB4Y29uZmlnOiAkKEtDT05GSUdfRElSKS9xY29uZgogCUAkKENPTU1PTl9DT05G
SUdfRU5WKSAkPCAkKENPTkZJR19DT05GSUdfSU4pCi0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3Vw
ZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQorCUAkKENPTU1PTl9DT05GSUdfRU5W
KSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09V
VCkKIAogZ2NvbmZpZzogJChLQ09ORklHX0RJUikvZ2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VO
Vikgc3JjdHJlZT0kKENPTkZJR19VS19CQVNFKSAkPCAkKENPTkZJR19DT05GSUdfSU4pCi0JQCQo
U0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQor
CUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19D
T05GSUcpICQoVUtfQ09ORklHX09VVCkKIAogbWVudWNvbmZpZzogJChLQ09ORklHX0RJUikvbWNv
bmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQotCUAkKFND
UklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlA
JChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09O
RklHKSAkKFVLX0NPTkZJR19PVVQpCiAKIG5jb25maWc6ICQoS0NPTkZJR19ESVIpL25jb25mCiAJ
QCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NPTkZJR19JTikKLQlAJChTQ1JJUFRT
X0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09N
TU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykg
JChVS19DT05GSUdfT1VUKQogCiBjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01N
T05fQ09ORklHX0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQotCUAkKFNDUklQVFNfRElSKS9j
b25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09O
RklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NP
TkZJR19PVVQpCiAKICMgRm9yIHRoZSBjb25maWcgdGFyZ2V0cyB0aGF0IGF1dG9tYXRpY2FsbHkg
c2VsZWN0IG9wdGlvbnMsIHdlIHBhc3MKICMgU0tJUF9MRUdBQ1k9eSB0byBkaXNhYmxlIHRoZSBs
ZWdhY3kgb3B0aW9ucy4gSG93ZXZlciwgaW4gdGhhdCBjYXNlCkBAIC03NDEsMzQgKzc1NSwzNCBA
QCBjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKICMgd2lsbCBxdWVyeSB0aGVtLiBUaGVyZWZv
cmUsIHJ1biBhbiBhZGRpdGlvbmFsIG9sZGRlZmNvbmZpZy4KIG9sZGNvbmZpZzogJChLQ09ORklH
X0RJUikvY29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLW9sZGNvbmZpZyAkKENPTkZJ
R19DT05GSUdfSU4pCi0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykg
JChVS19DT05GSUdfT1VUKQorCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9j
b25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIAogcmFuZGNvbmZpZzog
JChLQ09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5WKSBTS0lQX0xFR0FDWT15
ICQ8IC0tcmFuZGNvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoQ09NTU9OX0NPTkZJR19F
TlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikgPi9kZXYvbnVsbAotCUAk
KFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkK
KwlAJChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtf
Q09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKIGFsbHllc2NvbmZpZzogJChLQ09ORklHX0RJUikv
Y29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5WKSBTS0lQX0xFR0FDWT15ICQ8IC0tYWxseWVzY29u
ZmlnICQoQ09ORklHX0NPTkZJR19JTikKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRk
ZWZjb25maWcgJChDT05GSUdfQ09ORklHX0lOKSA+L2Rldi9udWxsCi0JQCQoU0NSSVBUU19ESVIp
L2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQorCUAkKENPTU1PTl9D
T05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtf
Q09ORklHX09VVCkKIAogYWxsbm9jb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01N
T05fQ09ORklHX0VOVikgU0tJUF9MRUdBQ1k9eSAkPCAtLWFsbG5vY29uZmlnICQoQ09ORklHX0NP
TkZJR19JTikKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRkZWZjb25maWcgJChDT05G
SUdfQ09ORklHX0lOKSA+L2Rldi9udWxsCi0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAk
KFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQorCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFND
UklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIAog
c3luY2NvbmZpZzogJChLQ09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAk
PCAtLXN5bmNjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQotCUAkKFNDUklQVFNfRElSKS9jb25m
aWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09ORklH
X0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJ
R19PVVQpCiAKIG9sZGRlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9D
T05GSUdfRU5WKSAkPCAtLW9sZGRlZmNvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pCi0JQCQoU0NS
SVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQorCUAk
KENPTU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05G
SUcpICQoVUtfQ09ORklHX09VVCkKIAogZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mCiAJ
QCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8IC0tZGVmY29uZmlnJChpZiAkKERFRkNPTkZJRyksPSQo
REVGQ09ORklHKSkgJChDT05GSUdfQ09ORklHX0lOKQotCUAkKFNDUklQVFNfRElSKS9jb25maWd1
cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09ORklHX0VO
VikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19P
VVQpCiAKICMgT3ZlcnJpZGUgdGhlIFVLX0RFRkNPTkZJRyBmcm9tIENPTU1PTl9DT05GSUdfRU5W
IHdpdGggdGhlIG5ldyBkZWZjb25maWcKICVfZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25m
ICQoQSkvY29uZmlncy8lX2RlZmNvbmZpZwpAQCAtNzgwLDcgKzc5NCw3IEBAIHNhdmVkZWZjb25m
aWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAkJLS1zYXZlZGVmY29uZmlnPSQoaWYgJChERUZDT05G
SUcpLCQoREVGQ09ORklHKSwkKENPTkZJR19ESVIpL2RlZmNvbmZpZykgXAogCQkkKENPTkZJR19D
T05GSUdfSU4pCiAJQCQoU0VEKSAnL1VLX0RFRkNPTkZJRz0vZCcgJChpZiAkKERFRkNPTkZJRyks
JChERUZDT05GSUcpLCQoQ09ORklHX0RJUikvZGVmY29uZmlnKQotCUAkKFNDUklQVFNfRElSKS9j
b25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09O
RklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NP
TkZJR19PVVQpCiAKIC5QSE9OWTogZGVmY29uZmlnIHNhdmVkZWZjb25maWcgc2lsZW50b2xkY29u
ZmlnCiAKQEAgLTg1OSw2ICs4NzMsMjAgQEAgcHJpbnQtb2JqczoKIHByaW50LXNyY3M6CiAJJChl
cnJvciBEbyBub3QgaGF2ZSBhIGNvbmZpZ3VyYXRpb24uIFBsZWFzZSBydW4gb25lIG9mIHRoZSBj
b25maWd1cmF0aW9uIHRhcmdldHMgZmlyc3QpCiBlbmRpZgorZWxzZSAjISgkKHN1Yl9tYWtlX2V4
ZWMpLCkKK2V4cG9ydCBzdWJfbWFrZV9leGVjOj0xCisKKyQoQlVJTERfRElSKS9NYWtlZmlsZToK
KwlsbiAtc24gJChDT05GSUdfVUtfQkFTRSkvTWFrZWZpbGUgJChAKQorCiskKGZpbHRlci1vdXQg
X2FsbCAkKEJVSUxEX0RJUikvTWFrZWZpbGUgc3ViLW1ha2UgZGlzdGNsZWFuIHByb3BlcmNsZWFu
IGhlbHAgJChsYXN0d29yZCAkKE1BS0VGSUxFX0xJU1QpKSwgXAorICAkKE1BS0VDTURHT0FMUykp
IGFsbDogc3ViLW1ha2UKKwlAOgorCitzdWItbWFrZTogJChCVUlMRF9ESVIpL01ha2VmaWxlCisJ
JChRKSQoTUFLRSkgQ09ORklHX1VLX0JBU0U9JChDT05GSUdfVUtfQkFTRSkgLUMgJChCVUlMRF9E
SVIpIC1mICQoQlVJTERfRElSKS9NYWtlZmlsZSAkKE1BS0VDTURHT0FMUykKKworZW5kaWYKIAog
aGVscDoKIAlAZWNobyAnQ2xlYW5pbmc6JwpkaWZmIC0tZ2l0IGEvYXJjaC9Db25maWcudWsgYi9h
cmNoL0NvbmZpZy51awppbmRleCBkMDkxZGNiZC4uOWYyMTUwNGUgMTAwNjQ0Ci0tLSBhL2FyY2gv
Q29uZmlnLnVrCisrKyBiL2FyY2gvQ29uZmlnLnVrCkBAIC0xNiwxMyArMTYsMTMgQEAgY29uZmln
IEFSQ0hfQVJNXzMyCiBlbmRjaG9pY2UKIAogaWYgKEFSQ0hfWDg2XzY0KQotCXNvdXJjZSAiYXJj
aC94ODYveDg2XzY0L0NvbmZpZy51ayIKKwlzb3VyY2UgIiQoVUtfQkFTRSkvYXJjaC94ODYveDg2
XzY0L0NvbmZpZy51ayIKIGVuZGlmCiBpZiAoQVJDSF9BUk1fMzIpCi0Jc291cmNlICJhcmNoL2Fy
bS9hcm0vQ29uZmlnLnVrIgorCXNvdXJjZSAiJChVS19CQVNFKS9hcmNoL2FybS9hcm0vQ29uZmln
LnVrIgogZW5kaWYKIGlmIChBUkNIX0FSTV82NCkKLQlzb3VyY2UgImFyY2gvYXJtL2FybTY0L0Nv
bmZpZy51ayIKKwlzb3VyY2UgIiQoVUtfQkFTRSkvYXJjaC9hcm0vYXJtNjQvQ29uZmlnLnVrIgog
ZW5kaWYKIAogY29uZmlnIFNUQUNLX1NJWkVfUEFHRV9PUkRFUgpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9zY3JpcHRzL2NvbmZpZ3VwZGF0ZSBiL3N1cHBvcnQvc2NyaXB0cy9jb25maWd1cGRhdGUKaW5k
ZXggY2U1Y2U5ODYuLjg2YjgzNWNhIDEwMDc1NQotLS0gYS9zdXBwb3J0L3NjcmlwdHMvY29uZmln
dXBkYXRlCisrKyBiL3N1cHBvcnQvc2NyaXB0cy9jb25maWd1cGRhdGUKQEAgLTEsNiArMSw2IEBA
CiAjIS9iaW4vYmFzaAotVUtfQ09ORklHPSIkezE6LS5jb25maWd9IgotVUtfQ09ORklHX09MRD0i
JHsyOi0uY29uZmlnLm9sZH0iCitVS19DT05GSUc9IiR7MTotJHtVS19CQVNFfS8uY29uZmlnfSIK
K1VLX0NPTkZJR19PTEQ9IiR7MjotJHtVS19CQVNFfS8uY29uZmlnLm9sZH0iCiAKIF9zdWJjb25m
aWcoKQogewotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:01:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:01:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NyL-0003oG-If; Mon, 09 Sep 2019 18:01:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NyL-0003o3-33
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:01:05 +0000
X-Inumbo-ID: ca029464-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ca029464-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:01:04 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 82273F2028;
 Mon,  9 Sep 2019 20:01:03 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id HWuYnwyWhCqO; Mon,  9 Sep 2019 20:01:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 59BFBF2027
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:01:01 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:01:01 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:37 +0200
Message-ID: <20190909175939.23936-22-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 21/23] kconfig: Determine the
 default arch from CC
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIGFyY2hpdGVjdHVyZSB1c2luZyBDQwoKU2lnbmVk
LW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0t
LQogQ29uZmlnLnVrICAgICAgfCA2ICsrKysrLQogTWFrZWZpbGUgICAgICAgfCAxICsKIGFyY2gv
Q29uZmlnLnVrIHwgNCArKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggNzcy
ZGI4NTcuLjMyMzViOTE0IDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBA
IC0xMSw3ICsxMSwxMSBAQCBjb25maWcgVUtfQ09ERU5BTUUKIAlkZWZhdWx0ICIkKFVLX0NPREVO
QU1FKSIKIGNvbmZpZyBVS19BUkNICiAJc3RyaW5nCi0JZGVmYXVsdCAiJChVS19BUkNIKSIKKwlk
ZWZhdWx0ICJ4ODZfNjQiIGlmIEFSQ0hfWDg2XzY0CisJZGVmYXVsdCAiYXJtNjQiICBpZiBBUkNI
X0FSTV82NAorCWRlZmF1bHQgImFybSIJaWYgQVJDSF9BUk1fMzIKKwlkZWZhdWx0ICQoVUtfQVJD
SCkKKwogY29uZmlnIE5PX0FQUAogCWRlZl9ib29sICQoc2hlbGwsdGVzdCAkKFVLX0JBU0UpID0g
JChVS19BUFApICYmIGVjaG8geSB8fCBlY2hvIG4pCiAKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIv
TWFrZWZpbGUKaW5kZXggMDlkMjU3OWEuLjZmYTc1Y2YyIDEwMDY0NAotLS0gYS9NYWtlZmlsZQor
KysgYi9NYWtlZmlsZQpAQCAtNjY5LDYgKzY2OSw3IEBAIERFRkNPTkZJRyA9ICQoY2FsbCBxc3Ry
aXAsJChVS19ERUZDT05GSUcpKQogIyBXZSBkb24ndCB3YW50IHRvIGZ1bGx5IGV4cGFuZCBVS19E
RUZDT05GSUcgaGVyZSwgc28gS2NvbmZpZyB3aWxsCiAjIHJlY29nbml6ZSB0aGF0IGlmIGl0J3Mg
c3RpbGwgYXQgaXRzIGRlZmF1bHQgJChDT05GSUdfRElSKS9kZWZjb25maWcKIENPTU1PTl9DT05G
SUdfRU5WID0gXAorCUNDPSQoQ0MpXAogCUNPTkZJR189IkNPTkZJR18iIFwKIAlLQ09ORklHX0NP
TkZJRz0iJChVS19DT05GSUcpIiBcCiAJS0NPTkZJR19BVVRPQ09ORklHPSIkKEtDT05GSUdfQVVU
T0NPTkZJRykiIFwKZGlmZiAtLWdpdCBhL2FyY2gvQ29uZmlnLnVrIGIvYXJjaC9Db25maWcudWsK
aW5kZXggOWYyMTUwNGUuLjc5MDk3Y2YxIDEwMDY0NAotLS0gYS9hcmNoL0NvbmZpZy51aworKysg
Yi9hcmNoL0NvbmZpZy51awpAQCAtMSw3ICsxLDcgQEAKIGNob2ljZQogCXByb21wdCAiQXJjaGl0
ZWN0dXJlIgotCWRlZmF1bHQgQVJDSF9BUk1fMzIgaWYgKFVLX0FSQ0ggPSAiYXJtIikKLQlkZWZh
dWx0IEFSQ0hfQVJNXzY0IGlmIChVS19BUkNIID0gImFybTY0IikKKwlkZWZhdWx0IEFSQ0hfQVJN
XzMyIGlmICgkKHNoZWxsLCQoQ0MpIC1kdW1wbWFjaGluZSB8IGN1dCAtZCAnLScgLWYxKSA9ICJh
cm0iKQorCWRlZmF1bHQgQVJDSF9BUk1fNjQgaWYgKCQoc2hlbGwsJChDQykgLWR1bXBtYWNoaW5l
IHwgY3V0IC1kICctJyAtZjEpID0gImFybTY0IikKIAlkZWZhdWx0IEFSQ0hfWDg2XzY0CiAJaGVs
cAogCSAgU2VsZWN0IHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZS4KLS0gCjIuMjAuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:01:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:01:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7NyQ-0003qD-Mj; Mon, 09 Sep 2019 18:01:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NyP-0003ps-Aq
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:01:09 +0000
X-Inumbo-ID: ca74a356-d32b-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ca74a356-d32b-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 18:01:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 4AA4F1056A1;
 Mon,  9 Sep 2019 20:01:04 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 5SxZGdj5FL8K; Mon,  9 Sep 2019 20:01:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id DACAF10569E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:01:03 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:01:01 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:39 +0200
Message-ID: <20190909175939.23936-24-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 23/23] kconfig: Replace the
 kconfig with the update
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2ZXJ0IGtjb25maWcubmV3IGJhY2sgdG8ga2NvbmZpZy4KClNpZ25lZC1vZmYtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgNiArKyst
LS0KIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L01ha2VmaWxlICAgICAgICAgICAg
ICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vTWFrZWZpbGUuYnIg
ICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9NYWtl
ZmlsZS5ydWxlcyAgICAgICAgICAgICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25m
aWd9L2NvbmYuYyAgICAgICAgICAgICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcg
PT4ga2NvbmZpZ30vY29uZmRhdGEuYyAgICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29u
ZmlnLm5ldyA9PiBrY29uZmlnfS9leHByLmMgICAgICAgICAgICAgICAgICAgICB8IDAKIHN1cHBv
cnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L2V4cHIuaCAgICAgICAgICAgICAgICAgICAgIHwg
MAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vZml4ZGVwLmMgICAgICAgICAgICAg
ICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9nY29uZi1jZmcuc2gg
ICAgICAgICAgICAgICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L2djb25m
LmMgICAgICAgICAgICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZp
Z30vZ2NvbmYuZ2xhZGUgICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9
PiBrY29uZmlnfS9pbWFnZXMuYyAgICAgICAgICAgICAgICAgICB8IDAKIHN1cHBvcnQve2tjb25m
aWcubmV3ID0+IGtjb25maWd9L2ltYWdlcy5oICAgICAgICAgICAgICAgICAgIHwgMAogc3VwcG9y
dC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbGV4ZXIubCAgICAgICAgICAgICAgICAgICAgfCAw
CiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9saXN0LmggICAgICAgICAgICAgICAg
ICAgICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L2xrYy5oICAgICAgICAg
ICAgICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbGtjX3By
b3RvLmggICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmln
fS9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcgICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+
IGtjb25maWd9L2x4ZGlhbG9nL2NoZWNrbGlzdC5jICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZp
Zy5uZXcgPT4ga2NvbmZpZ30vbHhkaWFsb2cvZGlhbG9nLmggICAgICAgICAgfCAwCiBzdXBwb3J0
L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9seGRpYWxvZy9pbnB1dGJveC5jICAgICAgICB8IDAK
IHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L2x4ZGlhbG9nL21lbnVib3guYyAgICAg
ICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbHhkaWFsb2cvdGV4dGJv
eC5jICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9seGRpYWxv
Zy91dGlsLmMgICAgICAgICAgICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9
L2x4ZGlhbG9nL3llc25vLmMgICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4g
a2NvbmZpZ30vbWNvbmYtY2ZnLnNoICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmln
Lm5ldyA9PiBrY29uZmlnfS9tY29uZi5jICAgICAgICAgICAgICAgICAgICB8IDAKIHN1cHBvcnQv
e2tjb25maWcubmV3ID0+IGtjb25maWd9L21lbnUuYyAgICAgICAgICAgICAgICAgICAgIHwgMAog
c3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbWVyZ2VfY29uZmlnLnNoICAgICAgICAg
ICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9uY29uZi1jZmcuc2ggICAg
ICAgICAgICAgICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L25jb25mLmMg
ICAgICAgICAgICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30v
bmNvbmYuZ3VpLmMgICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBr
Y29uZmlnfS9uY29uZi5oICAgICAgICAgICAgICAgICAgICB8IDAKIHN1cHBvcnQve2tjb25maWcu
bmV3ID0+IGtjb25maWd9L3BhcnNlci55ICAgICAgICAgICAgICAgICAgIHwgMAogc3VwcG9ydC97
a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vcHJlcHJvY2Vzcy5jICAgICAgICAgICAgICAgfCAwCiBz
dXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9xY29uZi1jZmcuc2ggICAgICAgICAgICAg
ICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Fjb25mLmNjICAgICAgICAg
ICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vcWNvbmYuaCAg
ICAgICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9z
dHJlYW1saW5lX2NvbmZpZy5wbCAgICAgICB8IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtj
b25maWd9L3N5bWJvbC5jICAgICAgICAgICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5u
ZXcgPT4ga2NvbmZpZ30vdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcgfCAwCiAuLi4ve2tjb25m
aWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weSB8IDAKIC4u
Li90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0ICAgICAgICAgICAgICAgICAgICAg
IHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvY2hvaWNlL0tjb25m
aWcgICAgICAgfCAwCiBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9jaG9p
Y2UvX19pbml0X18ucHkgICB8IDAKIC4uLi90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2Nv
bmZpZyAgICAgICAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhw
ZWN0ZWRfY29uZmlnICAgICAgICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvY2hvaWNlL2Fs
bG5vX2V4cGVjdGVkX2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9j
aG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgMAogLi4u
L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dCAgICAgICAgICAgICAgICAgICAg
fCAwCiAuLi4ve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2Nv
bmZpZyAgICB8IDAKIC4uLi90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQgICAg
ICAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tj
b25maWcgICAgICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhf
bV9kZXAvX19pbml0X18ucHkgICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9jaG9pY2VfdmFs
dWVfd2l0aF9tX2RlcC9jb25maWcgICAgICAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZyAgICAgICAgICAgfCAwCiAuLi4v
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0ICAgICAgICAgICB8
IDAKIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2NvbmZ0ZXN0LnB5ICAg
ICAgICAgIHwgMAogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18u
cHkgICAgICAgICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9l
eHBlY3RlZF9zdGRlcnIgICAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL2Vycl9yZWN1cnNp
dmVfaW5jL0tjb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvZXJy
X3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxICAgICAgICAgICAgICAgICAgICB8IDAKIC4uLi90
ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIgICAgICAgICAgICAgICAgICAgIHwg
MAogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMyAgICAgICAgICAgICAg
ICAgICAgfCAwCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkgICAgICAg
ICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9z
dGRlcnIgICAgICAgICAgICAgICAgIHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZp
Z30vdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcgfCAwCiAuLi4ve2tjb25maWcubmV3ID0+IGtj
b25maWd9L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weSB8IDAKIC4uLi97a2NvbmZpZy5u
ZXcgPT4ga2NvbmZpZ30vdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZyAgIHwgMAogLi4uL3Rl
c3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcgICAgICAgICAgICAgICAgICAgICAgfCAw
CiAuLi4vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnICAgICAgICAgICAgICAgICAg
ICAgICB8IDAKIC4uLi90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5ICAgICAg
ICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnICAg
ICAgICAgICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9l
eHBlY3RlZF9zdGRvdXQgICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL25vX3dy
aXRlX2lmX2RlcF91bm1ldC9fX2luaXRfXy5weSAgICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVz
dHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICB8IDAK
IC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnICAgICAgICAg
ICAgIHwgMAogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcgICAgICAg
ICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0
X18ucHkgICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVu
Yy9leHBlY3RlZF9zdGRlcnIgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVp
bHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91dCAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvcHJlcHJv
Y2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZyAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0
cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weSAgICAgICAgIHwgMAog
Li4uL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVyciAg
ICAgfCAwCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZyAgICAgICAgICAgICAg
ICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weSAg
ICAgICAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVj
dGVkX3N0ZGVyciAgICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy92YXJp
YWJsZS9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9wcmVwcm9j
ZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5ICAgICAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3Rz
L3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyICAgICAgICAgICAgICAgfCAwCiBz
dXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9weXRlc3QuaW5pICAgICAgICAg
ICB8IDAKIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZyAgICAgICAgICAgICAg
ICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weSAg
ICAgICAgICAgICAgICAgICAgfCAwCiAuLi4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVj
dGVkX3N0ZG91dDAgICAgICAgICAgICAgICB8IDAKIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9p
Y2UvZXhwZWN0ZWRfc3Rkb3V0MSAgICAgICAgICAgICAgIHwgMAogLi4uL3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyICAgICAgICAgICAgICAgfCAwCiBzdXBwb3J0L3tr
Y29uZmlnLm5ldyA9PiBrY29uZmlnfS91dGlsLmMgICAgICAgICAgICAgICAgICAgICB8IDAKIHN1
cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3pjb25mLmxleC5jICAgICAgICAgICAgICAg
IHwgMAogc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vemNvbmYudGFiLmMgICAgICAg
ICAgICAgICAgfCAwCiAxMDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspLCAzIGRlbGV0
aW9ucygtKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L01ha2VmaWxl
ICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L01ha2VmaWxl
LmJyICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L01ha2Vm
aWxlLnJ1bGVzICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9
L2NvbmYuYyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9j
b25mZGF0YS5jICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9
L2V4cHIuYyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9l
eHByLmggKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vZml4
ZGVwLmMgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vZ2Nv
bmYtY2ZnLnNoICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9
L2djb25mLmMgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30v
Z2NvbmYuZ2xhZGUgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZp
Z30vaW1hZ2VzLmMgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZp
Z30vaW1hZ2VzLmggKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZp
Z30vbGV4ZXIubCAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmln
fS9saXN0LmggKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30v
bGtjLmggKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbGtj
X3Byb3RvLmggKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30v
bHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcu
bmV3ID0+IGtjb25maWd9L2x4ZGlhbG9nL2NoZWNrbGlzdC5jICgxMDAlKQogcmVuYW1lIHN1cHBv
cnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L2x4ZGlhbG9nL2RpYWxvZy5oICgxMDAlKQogcmVu
YW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L2x4ZGlhbG9nL2lucHV0Ym94LmMg
KDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbHhkaWFsb2cv
bWVudWJveC5jICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9
L2x4ZGlhbG9nL3RleHRib3guYyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9
PiBrY29uZmlnfS9seGRpYWxvZy91dGlsLmMgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZp
Zy5uZXcgPT4ga2NvbmZpZ30vbHhkaWFsb2cveWVzbm8uYyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0
L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9tY29uZi1jZmcuc2ggKDEwMCUpCiByZW5hbWUgc3Vw
cG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbWNvbmYuYyAoMTAwJSkKIHJlbmFtZSBzdXBw
b3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9tZW51LmMgKDEwMCUpCiByZW5hbWUgc3VwcG9y
dC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vbWVyZ2VfY29uZmlnLnNoICgxMDAlKQogcmVuYW1l
IHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L25jb25mLWNmZy5zaCAoMTAwJSkKIHJl
bmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9uY29uZi5jICgxMDAlKQogcmVu
YW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L25jb25mLmd1aS5jICgxMDAlKQog
cmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L25jb25mLmggKDEwMCUpCiBy
ZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vcGFyc2VyLnkgKDEwMCUpCiBy
ZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vcHJlcHJvY2Vzcy5jICgxMDAl
KQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Fjb25mLWNmZy5zaCAo
MTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9xY29uZi5jYyAo
MTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS9xY29uZi5oICgx
MDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3N0cmVhbWxpbmVf
Y29uZmlnLnBsICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9
L3N5bWJvbC5jICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9
L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25m
aWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weSAoMTAwJSkK
IHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9hdXRvX3N1Ym1l
bnUvZXhwZWN0ZWRfc3Rkb3V0ICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+
IGtjb25maWd9L3Rlc3RzL2Nob2ljZS9LY29uZmlnICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tj
b25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSAoMTAwJSkKIHJl
bmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9jaG9pY2UvYWxsZGVm
X2V4cGVjdGVkX2NvbmZpZyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBr
Y29uZmlnfS90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZyAoMTAwJSkKIHJlbmFt
ZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9jaG9pY2UvYWxsbm9fZXhw
ZWN0ZWRfY29uZmlnICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25m
aWd9L3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnICgxMDAlKQogcmVuYW1lIHN1
cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVj
dGVkX3N0ZG91dCAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmln
fS90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2Nv
bmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0
ICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2Nv
bmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvX19pbml0
X18ucHkgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnICgxMDAlKQogcmVuYW1lIHN1cHBvcnQv
e2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4
cGVjdGVkX2NvbmZpZyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29u
ZmlnfS90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQgKDEwMCUp
CiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvY29uZnRlc3Qu
cHkgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmln
Lm5ldyA9PiBrY29uZmlnfS90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weSAoMTAw
JSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9lcnJfcmVj
dXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnIgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZp
Zy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZyAoMTAwJSkK
IHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9lcnJfcmVjdXJz
aXZlX2luYy9LY29uZmlnLmluYzEgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcg
PT4ga2NvbmZpZ30vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMyICgxMDAlKQog
cmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL2Vycl9yZWN1cnNp
dmVfaW5jL0tjb25maWcuaW5jMyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9
PiBrY29uZmlnfS90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weSAoMTAwJSkKIHJl
bmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9lcnJfcmVjdXJzaXZl
X2luYy9leHBlY3RlZF9zdGRlcnIgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcg
PT4ga2NvbmZpZ30vdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcgKDEwMCUpCiByZW5hbWUgc3Vw
cG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9f
LnB5ICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3Rz
L2ludGVyX2Nob2ljZS9kZWZjb25maWcgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5u
ZXcgPT4ga2NvbmZpZ30vdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZyAoMTAwJSkK
IHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9uZXdfY2hvaWNl
X3dpdGhfZGVwL0tjb25maWcgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4g
a2NvbmZpZ30vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weSAoMTAwJSkKIHJl
bmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9uZXdfY2hvaWNlX3dp
dGhfZGVwL2NvbmZpZyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29u
ZmlnfS90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0ZG91dCAoMTAwJSkKIHJl
bmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvS2NvbmZpZyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBr
Y29uZmlnfS90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkgKDEwMCUpCiBy
ZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvbm9fd3JpdGVfaWZf
ZGVwX3VubWV0L2NvbmZpZyAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBr
Y29uZmlnfS90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnICgxMDAl
KQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL3ByZXByb2Nl
c3MvYnVpbHRpbl9mdW5jL0tjb25maWcgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5u
ZXcgPT4ga2NvbmZpZ30vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0X18ucHkg
KDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyICgxMDAlKQogcmVuYW1lIHN1cHBv
cnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5j
L2V4cGVjdGVkX3N0ZG91dCAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBr
Y29uZmlnfS90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnICgxMDAl
KQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL3ByZXByb2Nl
c3MvY2lyY3VsYXJfZXhwYW5zaW9uL19faW5pdF9fLnB5ICgxMDAlKQogcmVuYW1lIHN1cHBvcnQv
e2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5z
aW9uL2V4cGVjdGVkX3N0ZGVyciAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9
PiBrY29uZmlnfS90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnICgxMDAlKQogcmVuYW1l
IHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBl
L19faW5pdF9fLnB5ICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25m
aWd9L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVyciAoMTAwJSkKIHJlbmFt
ZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9wcmVwcm9jZXNzL3Zhcmlh
YmxlL0tjb25maWcgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZp
Z30vdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weSAoMTAwJSkKIHJlbmFtZSBz
dXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxl
L2V4cGVjdGVkX3N0ZGVyciAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBr
Y29uZmlnfS90ZXN0cy9weXRlc3QuaW5pICgxMDAlKQogcmVuYW1lIHN1cHBvcnQve2tjb25maWcu
bmV3ID0+IGtjb25maWd9L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnICgxMDAlKQog
cmVuYW1lIHN1cHBvcnQve2tjb25maWcubmV3ID0+IGtjb25maWd9L3Rlc3RzL3JhbmRfbmVzdGVk
X2Nob2ljZS9fX2luaXRfXy5weSAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9
PiBrY29uZmlnfS90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCAoMTAw
JSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9yYW5kX25l
c3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MSAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29u
ZmlnLm5ldyA9PiBrY29uZmlnfS90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MiAoMTAwJSkKIHJlbmFtZSBzdXBwb3J0L3trY29uZmlnLm5ldyA9PiBrY29uZmlnfS91dGls
LmMgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vemNvbmYu
bGV4LmMgKDEwMCUpCiByZW5hbWUgc3VwcG9ydC97a2NvbmZpZy5uZXcgPT4ga2NvbmZpZ30vemNv
bmYudGFiLmMgKDEwMCUpCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA2
ZmE3NWNmMi4uYTVhNjNhMzggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBA
IC0xMzUsMTIgKzEzNSwxMiBAQCBFTElCX0RJUiA6PSAkKHJlYWxwYXRoICQocGF0c3Vic3QgJS8s
JSwkKHBhdHN1YnN0ICUuLCUsJChFTElCX0RJUikpKSkKIENPTkZJR19VS19QTEFUICAgICAgICA6
PSAkKENPTkZJR19VS19CQVNFKS9wbGF0LwogQ09ORklHX0RJUiAgICAgICAgICAgIDo9ICQoQ09O
RklHX1VLX0FQUCkKIENPTkZJR19DT05GSUdfSU4gICAgICA6PSAkKENPTkZJR19VS19CQVNFKS9D
b25maWcudWsKLUNPTkZJRyAgICAgICAgICAgICAgICA6PSAkKENPTkZJR19VS19CQVNFKS9zdXBw
b3J0L2tjb25maWcubmV3CitDT05GSUcgICAgICAgICAgICAgICAgOj0gJChDT05GSUdfVUtfQkFT
RSkvc3VwcG9ydC9rY29uZmlnCiBDT05GSUdMSUIJICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkv
c3VwcG9ydC9rY29uZmlnbGliCiBVS19DT05GSUcgICAgICAgICAgICAgOj0gJChDT05GSUdfRElS
KS8uY29uZmlnCiBVS19DT05GSUdfT1VUICAgICAgICAgOj0gJChCVUlMRF9ESVIpL2NvbmZpZwog
VUtfR0VORVJBVEVEX0lOQ0xVREVTIDo9ICQoQlVJTERfRElSKS9pbmNsdWRlCi1LQ09ORklHX0RJ
UiAgICAgICAgICAgOj0gJChCVUlMRF9ESVIpL2tjb25maWcubmV3CitLQ09ORklHX0RJUiAgICAg
ICAgICAgOj0gJChCVUlMRF9ESVIpL2tjb25maWcKIFVLX0ZJWERFUCAgICAgICAgICAgICA6PSAk
KEtDT05GSUdfRElSKS9maXhkZXAKIEtDT05GSUdfQVVUT0NPTkZJRyAgICA6PSAkKEtDT05GSUdf
RElSKS9hdXRvLmNvbmYKIEtDT05GSUdfVFJJU1RBVEUgICAgICA6PSAkKEtDT05GSUdfRElSKS90
cmlzdGF0ZS5jb25maWcKQEAgLTUxNSw3ICs1MTUsNyBAQCBDWFhGTEFHUwkrPSAtRENDX1ZFUlNJ
T049JChDQ19WRVJTSU9OKQogR09DRkxBR1MJKz0gLURDQ19WRVJTSU9OPSQoQ0NfVkVSU0lPTikK
IAogIyBlbnN1cmUgJChCVUlMRF9ESVIpL2tjb25maWcsICQoQlVJTERfRElSKS9pbmNsdWRlIGFu
ZCAkKEJVSUxEX0RJUikvaW5jbHVkZS91ayBleGlzdHMKLSQoY2FsbCBta19zdWJfYnVpbGRfZGly
LGtjb25maWcubmV3KQorJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsa2NvbmZpZykKICQoY2FsbCBt
a19zdWJfYnVpbGRfZGlyLGluY2x1ZGUpCiAkKGNhbGwgbWtfc3ViX2J1aWxkX2RpcixpbmNsdWRl
L3VrKQogCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlIGIvc3VwcG9y
dC9rY29uZmlnL01ha2VmaWxlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBw
b3J0L2tjb25maWcubmV3L01ha2VmaWxlCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvTWFrZWZp
bGUKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0
L2tjb25maWcvTWFrZWZpbGUuYnIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9N
YWtlZmlsZS5icgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxl
cyBiL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5ydWxlcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUK
cmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwpyZW5hbWUgdG8g
c3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLnJ1bGVzCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L2NvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy9jb25mLmMKc2ltaWxhcml0eSBpbmRleCAx
MDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZi5jCnJlbmFtZSB0byBzdXBw
b3J0L2tjb25maWcvY29uZi5jCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2NvbmZk
YXRhLmMgYi9zdXBwb3J0L2tjb25maWcvY29uZmRhdGEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUK
cmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5jCnJlbmFtZSB0byBzdXBw
b3J0L2tjb25maWcvY29uZmRhdGEuYwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9l
eHByLmMgYi9zdXBwb3J0L2tjb25maWcvZXhwci5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5h
bWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L2V4cHIuYwpyZW5hbWUgdG8gc3VwcG9ydC9rY29u
ZmlnL2V4cHIuYwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmggYi9zdXBw
b3J0L2tjb25maWcvZXhwci5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBw
b3J0L2tjb25maWcubmV3L2V4cHIuaApyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL2V4cHIuaApk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYyBiL3N1cHBvcnQva2NvbmZp
Zy9maXhkZXAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29u
ZmlnLm5ldy9maXhkZXAuYwpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL2ZpeGRlcC5jCmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZp
Zy9nY29uZi1jZmcuc2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQv
a2NvbmZpZy5uZXcvZ2NvbmYtY2ZnLnNoCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvZ2NvbmYt
Y2ZnLnNoCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmMgYi9zdXBwb3J0
L2tjb25maWcvZ2NvbmYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9y
dC9rY29uZmlnLm5ldy9nY29uZi5jCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvZ2NvbmYuYwpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2Nv
bmZpZy9nY29uZi5nbGFkZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9y
dC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL2djb25m
LmdsYWRlCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5jIGIvc3VwcG9y
dC9rY29uZmlnL2ltYWdlcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBw
b3J0L2tjb25maWcubmV3L2ltYWdlcy5jCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvaW1hZ2Vz
LmMKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2VzLmggYi9zdXBwb3J0L2tj
b25maWcvaW1hZ2VzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQv
a2NvbmZpZy5uZXcvaW1hZ2VzLmgKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9pbWFnZXMuaApk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sIGIvc3VwcG9ydC9rY29uZmln
L2xleGVyLmwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZp
Zy5uZXcvbGV4ZXIubApyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL2xleGVyLmwKZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5oIGIvc3VwcG9ydC9rY29uZmlnL2xpc3QuaApz
aW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9saXN0
LmgKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9saXN0LmgKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvbGtjLmggYi9zdXBwb3J0L2tjb25maWcvbGtjLmgKc2ltaWxhcml0eSBpbmRl
eCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKcmVuYW1lIHRvIHN1
cHBvcnQva2NvbmZpZy9sa2MuaApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2Nf
cHJvdG8uaCBiL3N1cHBvcnQva2NvbmZpZy9sa2NfcHJvdG8uaApzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaApyZW5hbWUgdG8g
c3VwcG9ydC9rY29uZmlnL2xrY19wcm90by5oCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORyBiL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9C
SUcuRkFULldBUk5JTkcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQv
a2NvbmZpZy5uZXcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HCnJlbmFtZSB0byBzdXBwb3J0L2tj
b25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L2x4ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2No
ZWNrbGlzdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25m
aWcubmV3L2x4ZGlhbG9nL2NoZWNrbGlzdC5jCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvbHhk
aWFsb2cvY2hlY2tsaXN0LmMKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFs
b2cvZGlhbG9nLmggYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmgKc2ltaWxhcml0
eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlh
bG9nLmgKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9kaWFsb2cuaApkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jIGIvc3VwcG9ydC9r
Y29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBm
cm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvaW5wdXRib3guYwpyZW5hbWUgdG8gc3Vw
cG9ydC9rY29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94LmMKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL21l
bnVib3guYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmln
Lm5ldy9seGRpYWxvZy9tZW51Ym94LmMKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9seGRpYWxv
Zy9tZW51Ym94LmMKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4
dGJveC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3guYwpzaW1pbGFyaXR5IGlu
ZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy90ZXh0Ym94
LmMKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy90ZXh0Ym94LmMKZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL3V0aWwuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9y
dC9rY29uZmlnLm5ldy9seGRpYWxvZy91dGlsLmMKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9s
eGRpYWxvZy91dGlsLmMKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cv
eWVzbm8uYyBiL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jCnNpbWlsYXJpdHkgaW5k
ZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3llc25vLmMK
cmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jCmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy9tY29uZi1j
Zmcuc2gKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5u
ZXcvbWNvbmYtY2ZnLnNoCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvbWNvbmYtY2ZnLnNoCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMgYi9zdXBwb3J0L2tjb25maWcv
bWNvbmYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmln
Lm5ldy9tY29uZi5jCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvbWNvbmYuYwpkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMgYi9zdXBwb3J0L2tjb25maWcvbWVudS5jCnNp
bWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L21lbnUu
YwpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL21lbnUuYwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2ggYi9zdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmln
LnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3
L21lcmdlX2NvbmZpZy5zaApyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL21lcmdlX2NvbmZpZy5z
aApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi1jZmcuc2ggYi9zdXBwb3J0
L2tjb25maWcvbmNvbmYtY2ZnLnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBz
dXBwb3J0L2tjb25maWcubmV3L25jb25mLWNmZy5zaApyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmln
L25jb25mLWNmZy5zaApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jIGIv
c3VwcG9ydC9rY29uZmlnL25jb25mLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9t
IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYwpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL25j
b25mLmMKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuZ3VpLmMgYi9zdXBw
b3J0L2tjb25maWcvbmNvbmYuZ3VpLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9t
IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuZ3VpLmMKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZp
Zy9uY29uZi5ndWkuYwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5oIGIv
c3VwcG9ydC9rY29uZmlnL25jb25mLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9t
IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaApyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL25j
b25mLmgKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkgYi9zdXBwb3J0
L2tjb25maWcvcGFyc2VyLnkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBv
cnQva2NvbmZpZy5uZXcvcGFyc2VyLnkKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy9wYXJzZXIu
eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMgYi9zdXBwb3J0
L2tjb25maWcvcHJlcHJvY2Vzcy5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBz
dXBwb3J0L2tjb25maWcubmV3L3ByZXByb2Nlc3MuYwpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmln
L3ByZXByb2Nlc3MuYwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi1jZmcu
c2ggYi9zdXBwb3J0L2tjb25maWcvcWNvbmYtY2ZnLnNoCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpy
ZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLWNmZy5zaApyZW5hbWUgdG8gc3Vw
cG9ydC9rY29uZmlnL3Fjb25mLWNmZy5zaApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9xY29uZi5jYyBiL3N1cHBvcnQva2NvbmZpZy9xY29uZi5jYwpzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYwpyZW5hbWUgdG8gc3Vw
cG9ydC9rY29uZmlnL3Fjb25mLmNjCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Fj
b25mLmggYi9zdXBwb3J0L2tjb25maWcvcWNvbmYuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVu
YW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5oCnJlbmFtZSB0byBzdXBwb3J0L2tj
b25maWcvcWNvbmYuaApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9zdHJlYW1saW5l
X2NvbmZpZy5wbCBiL3N1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbApzaW1pbGFy
aXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy9zdHJlYW1saW5l
X2NvbmZpZy5wbApyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBs
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3N5bWJvbC5jIGIvc3VwcG9ydC9rY29u
ZmlnL3N5bWJvbC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tj
b25maWcubmV3L3N5bWJvbC5jCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvc3ltYm9sLmMKZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcg
Yi9zdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcKc2ltaWxhcml0eSBp
bmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJt
ZW51L0tjb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUv
S2NvbmZpZwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1l
bnUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L19faW5p
dF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQpyZW5hbWUgdG8gc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQKc2ltaWxhcml0eSBpbmRl
eCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51
L2V4cGVjdGVkX3N0ZG91dApyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3Vi
bWVudS9leHBlY3RlZF9zdGRvdXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvY2hvaWNlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL0tjb25maWcK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvY2hvaWNlL0tjb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uv
S2NvbmZpZwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvX19p
bml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL19faW5pdF9fLnB5CnNpbWls
YXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZS9fX2luaXRfXy5weQpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9f
X2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
YWxsZGVmX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxs
ZGVmX2V4cGVjdGVkX2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZwpyZW5h
bWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmln
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhw
ZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0
ZWRfY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnCnJlbmFtZSB0byBzdXBw
b3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25maWcKZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZp
ZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnCnNp
bWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnCnNpbWlsYXJpdHkgaW5k
ZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGx5
ZXNfZXhwZWN0ZWRfY29uZmlnCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNl
L2FsbHllc19leHBlY3RlZF9jb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dApzaW1pbGFyaXR5IGluZGV4IDEwMCUK
cmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBl
Y3RlZF9zdGRvdXQKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNr
MF9leHBlY3RlZF9zdGRvdXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlL29sZGFzazFfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRh
c2sxX2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91dApzaW1pbGFyaXR5IGlu
ZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xk
YXNrMV9leHBlY3RlZF9zdGRvdXQKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9p
Y2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnCnNpbWlsYXJpdHkgaW5kZXgg
MTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93
aXRoX21fZGVwL0tjb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Vf
dmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5CnNpbWlsYXJpdHkg
aW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92
YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5CnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnIGIvc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZwpzaW1pbGFy
aXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9p
Y2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnIGIv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2Nv
bmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcKcmVuYW1lIHRv
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9j
b25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVl
X3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2lj
ZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dApzaW1pbGFyaXR5IGluZGV4IDEwMCUK
cmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9t
X2RlcC9leHBlY3RlZF9zdGRvdXQKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9p
Y2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY29u
ZnRlc3QucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvY29uZnRlc3QucHkKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9j
b25mdGVzdC5weQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVj
dXJzaXZlX2RlcC9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
ZGVwL0tjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwpyZW5hbWUgdG8gc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkgYi9z
dXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKc2ltaWxh
cml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJy
X3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0
L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyCnNpbWlsYXJp
dHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9y
ZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycgpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycgpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnIGIvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcKc2ltaWxhcml0eSBpbmRleCAx
MDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9p
bmMvS2NvbmZpZwpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1
cnNpdmVfaW5jL0tjb25maWcuaW5jMQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20g
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzEK
cmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmln
LmluYzEKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2
ZV9pbmMvS2NvbmZpZy5pbmMyIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcuaW5jMgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKcmVuYW1l
IHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIK
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMzIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tj
b25maWcuaW5jMwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMKcmVuYW1lIHRvIHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMKZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0
X18ucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18u
cHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkKcmVuYW1lIHRvIHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnIg
Yi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJy
CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycgpyZW5hbWUgdG8gc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycgpkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZyBiL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2Nv
bmZpZwpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9LY29uZmln
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2lu
aXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18ucHkK
c2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5CnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvdGVz
dHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9kZWZjb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMv
aW50ZXJfY2hvaWNlL2RlZmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20g
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnCnJlbmFtZSB0
byBzdXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZwpkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmln
IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcKc2lt
aWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
aW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZwpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnIGIvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhf
ZGVwL0tjb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dp
dGhfZGVwL0tjb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3
X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdf
Y2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUg
ZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0
X18ucHkKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVw
L19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19j
aG9pY2Vfd2l0aF9kZXAvY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnCnJlbmFtZSB0byBz
dXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcKZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3Rl
ZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBl
Y3RlZF9zdGRvdXQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQKcmVuYW1l
IHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0
ZG91dApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBf
dW5tZXQvS2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwpyZW5hbWUgdG8g
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnCmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9f
X2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQv
X19pbml0X18ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5CnJlbmFtZSB0
byBzdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91
bm1ldC9jb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0
L2NvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvY29uZmlnCnJlbmFtZSB0byBzdXBwb3J0
L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZwpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRf
Y29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBl
Y3RlZF9jb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZwpyZW5h
bWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3Rl
ZF9jb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vz
cy9idWlsdGluX2Z1bmMvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNz
L2J1aWx0aW5fZnVuYy9LY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBz
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcK
cmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9L
Y29uZmlnCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3Mv
YnVpbHRpbl9mdW5jL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nl
c3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUg
ZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19f
aW5pdF9fLnB5CnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWls
dGluX2Z1bmMvX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgpzaW1pbGFy
aXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVw
cm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIKcmVuYW1lIHRvIHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIKZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMv
ZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRp
bl9mdW5jL2V4cGVjdGVkX3N0ZG91dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20g
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3Rl
ZF9zdGRvdXQKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0
aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZyBiL3N1cHBvcnQva2Nv
bmZpZy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnCnNpbWlsYXJp
dHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9u
L19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJf
ZXhwYW5zaW9uL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBz
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL19f
aW5pdF9fLnB5CnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJj
dWxhcl9leHBhbnNpb24vX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyIGIv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVj
dGVkX3N0ZGVycgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRl
cnIKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4
cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9w
cmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJv
bSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcKcmVu
YW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19f
aW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5p
dF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5CnJlbmFtZSB0byBzdXBwb3J0
L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3Rk
ZXJyIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0
ZGVycgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIKcmVuYW1lIHRvIHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIKZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29u
ZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZwpz
aW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weSBiL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5CnNpbWlsYXJpdHkg
aW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nl
c3MvdmFyaWFibGUvX19pbml0X18ucHkKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9w
cmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyCnNpbWls
YXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3By
ZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyCnJlbmFtZSB0byBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBlY3RlZF9zdGRlcnIKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0LmluaSBiL3N1cHBvcnQva2NvbmZpZy90
ZXN0cy9weXRlc3QuaW5pCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3B5dGVzdC5pbmkKcmVuYW1lIHRvIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9weXRlc3QuaW5pCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3Jh
bmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9LY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnCnJlbmFtZSB0
byBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcKZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5p
dF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRf
Xy5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkKcmVuYW1lIHRvIHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0
ZG91dDAgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVk
X3N0ZG91dDAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDAKcmVuYW1lIHRv
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0
MApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9p
Y2UvZXhwZWN0ZWRfc3Rkb3V0MSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9j
aG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20g
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MQpyZW5hbWUgdG8gc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9l
eHBlY3RlZF9zdGRvdXQxCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3Jh
bmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyCnNpbWlsYXJpdHkgaW5kZXggMTAw
JQpyZW5hbWUgZnJvbSBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2lj
ZS9leHBlY3RlZF9zdGRvdXQyCnJlbmFtZSB0byBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9u
ZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnL3V0aWwuYwpzaW1pbGFyaXR5IGluZGV4IDEw
MCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMKcmVuYW1lIHRvIHN1cHBv
cnQva2NvbmZpZy91dGlsLmMKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYu
bGV4LmMgYi9zdXBwb3J0L2tjb25maWcvemNvbmYubGV4LmMKc2ltaWxhcml0eSBpbmRleCAxMDAl
CnJlbmFtZSBmcm9tIHN1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYubGV4LmMKcmVuYW1lIHRvIHN1
cHBvcnQva2NvbmZpZy96Y29uZi5sZXguYwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy96Y29uZi50YWIuYyBiL3N1cHBvcnQva2NvbmZpZy96Y29uZi50YWIuYwpzaW1pbGFyaXR5IGlu
ZGV4IDEwMCUKcmVuYW1lIGZyb20gc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYwpyZW5h
bWUgdG8gc3VwcG9ydC9rY29uZmlnL3pjb25mLnRhYi5jCi0tIAoyLjIwLjEKCgoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 09 18:07:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 09 Sep 2019 18:07:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7O4h-0003xA-Gf; Mon, 09 Sep 2019 18:07:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7O4g-0003x5-0g
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:07:38 +0000
X-Inumbo-ID: b3c28a82-d32c-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b3c28a82-d32c-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:07:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8FFC1F2027;
 Mon,  9 Sep 2019 20:07:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kCWiSi5OPGbk; Mon,  9 Sep 2019 20:07:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 6B76EF200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:07:33 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:07:33 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 20:07:12 +0200
Message-ID: <20190909180712.24161-1-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH] plat/kvm: Ofw driver depend on the
 AARCH64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIG9mdyBkcml2ZXIgd29ya3Mgd2l0aCBBQVJDSDY0IGFyY2hpdGVjdHVyZS4gV2UgYWRkIGFu
IGV4cGxpY2l0CmRlcGVuZGVuY3kgdG8gdGhpcyBkcml2ZXIuCgpTaWduZWQtb2ZmLWJ5OiBTaGFy
YW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBwbGF0L2t2bS9D
b25maWcudWsgfCAxICsKIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQoKZGlmZiAtLWdp
dCBhL3BsYXQva3ZtL0NvbmZpZy51ayBiL3BsYXQva3ZtL0NvbmZpZy51awppbmRleCBjNGFkNjVl
Yy4uYmU2YWVhMDAgMTAwNjQ0Ci0tLSBhL3BsYXQva3ZtL0NvbmZpZy51aworKysgYi9wbGF0L2t2
bS9Db25maWcudWsKQEAgLTk5LDYgKzk5LDcgQEAgY29uZmlnIExJQkdJQ1YyCiBjb25maWcgTElC
T0ZXCiAgICAgICAgYm9vbCAiT3BlbiBGaXJtd2FyZSBsaWJyYXJ5IHN1cHBvcnQiCiAgICAgICAg
ZGVmYXVsdCBuCisgICAgICAgZGVwZW5kcyBvbiBBUkNIX0FSTV82NAogICAgICAgIHNlbGVjdCBM
SUJGRFQKIAogZW5kaWYKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 01:24:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 01:24:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7Utp-0006z9-7O; Tue, 10 Sep 2019 01:24:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=p5Yf=XF=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i7Utn-0006z4-Hd
 for minios-devel@lists.xen.org; Tue, 10 Sep 2019 01:24:51 +0000
X-Inumbo-ID: c78ec660-d369-11e9-b299-bc764e2007e4
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.4.82]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c78ec660-d369-11e9-b299-bc764e2007e4;
 Tue, 10 Sep 2019 01:24:49 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rTf2CShTNKmb2u+s2OZ/vy9+Por6qhr+Erq/XnQgAIA=;
 b=nivXImgvvASQvzW4/PbXto2e5y2NTB6bE15SljjafKTBeF+0f9mFxjy4VaB5h0VNeY+xWBATybfxzl7g1N2A8ydEJw/I/CYAUFNtMHbn3CQZOp+JYOH5ebAwtPxxGjXYmxeFVvKdc26J5Gk06/SyLdyZUgxQzbyLc1PgCnffv6I=
Received: from VI1PR0802CA0042.eurprd08.prod.outlook.com
 (2603:10a6:800:a9::28) by VI1PR08MB4142.eurprd08.prod.outlook.com
 (2603:10a6:803:e9::12) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.18; Tue, 10 Sep
 2019 01:24:45 +0000
Received: from VE1EUR03FT041.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::208) by VI1PR0802CA0042.outlook.office365.com
 (2603:10a6:800:a9::28) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2241.15 via Frontend
 Transport; Tue, 10 Sep 2019 01:24:45 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=temperror action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT041.mail.protection.outlook.com (10.152.19.163) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2241.14 via Frontend Transport; Tue, 10 Sep 2019 01:24:44 +0000
Received: ("Tessian outbound a68750feb7d5:v28");
 Tue, 10 Sep 2019 01:24:44 +0000
X-CR-MTA-TID: 64aa7808
Received: from 15a0d95eb503.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.6.50]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 9609BA2F-4035-4FA3-8263-A68F7FAAF25F.1; 
 Tue, 10 Sep 2019 01:24:39 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2050.outbound.protection.outlook.com [104.47.6.50])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 15a0d95eb503.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 10 Sep 2019 01:24:39 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GOIfGEev+4GcWsIgv8g9itldBTgp6wZCdIojLGvitJa8KvcWe+xQFkuDOTiYsn7HxOKGgxqMJ+927X03POtiQzC0mDdPiJCzOovklhxNznetBzlqwlrKQrtbUjwNQ1W+1WJNWMZLjDbRM/x9W/sYh/kdWdWwzp+oAEzQmbCVTpklGFlx3jGWsMby1ekMjKArT1ibJa9g51YWlJS1hFRx8kCCPZMFccm/H8xD0h8PO95asHhtEzJG7YvVPlzdLF0WYxH2JPQbS+kxJK0t4Yb1iybZgJYZkk8RZ2uKd+kfTqaQfkuoPhDzlUMYwMJAQqNNhMAbHUQDVKJ26KxB6fBUsQ==
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=86m8ixo0yi2bjSu5h5lRIbNcb9fINSF4h8R/dj3Lqpw=;
 b=FHkzjzqA2Cj7negR8wsJQCb519qrM743ejLPeUZvWOlG0OP1yuYIWEBTB57GwCygMKHY9rwvgwHCqVjvX/Y79wwRZmoUvgi8Oz+W+rvPIKE97tdVraQWR/cYxOSmEtAQh5ixGJEdrOmvz8ssgfDIF9lJ+YkZXDwx1YAXNi3HfDgoZPSliuSizIaF4VpPa4gf4YTY3MRnVMd9mAOnsZdSIfP2j95oBXMkwmpihlwDNbWEf5Qs0F1j6raqEZjp3hyixo7ivY+EdrLMoe1TqbrWKrZOXN1eKG6RM66+1T/Ut8lTrM+JVzyYnAmDx4fMyDWOdpTFpDmLKS18i9bTZ+eHyw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=86m8ixo0yi2bjSu5h5lRIbNcb9fINSF4h8R/dj3Lqpw=;
 b=zm0Olsi+0smQ63ngZ0Npl2GCPXE4KZ+ywHQ37FlXnWL8uo5SVieQj6gnqWx6LZt6FxYBYRWKcDdv1XwvKDADrqDDEoVi0mdDjDWG2FUe7P7O7Yd4hWuXvWsmT+z9FWZWPtqEKWEbhe+I01F4aij+pAvS27Q/dYYPLa5qSGemfro=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB2970.eurprd08.prod.outlook.com (52.134.107.21) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.18; Tue, 10 Sep 2019 01:24:38 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2241.018; Tue, 10 Sep 2019
 01:24:38 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH] plat/kvm: Ofw driver depend on
 the AARCH64
Thread-Index: AQHVZzl+K2PyOiCQuUuc82fmTrm83ackHfEQ
Date: Tue, 10 Sep 2019 01:24:38 +0000
Message-ID: <DB7PR08MB308254DE279FEEE147946810F7B60@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190909180712.24161-1-sharan.santhanam@neclab.eu>
In-Reply-To: <20190909180712.24161-1-sharan.santhanam@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 044042ea-3bb3-49b4-a7e6-14d03103e2fd.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: f6072257-6f6b-499d-c4a2-08d7358da98b
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB7PR08MB2970; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB2970:|VI1PR08MB4142:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <VI1PR08MB41424F7C036D0ADCB6FCD97CF7B60@VI1PR08MB4142.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:1388;OLM:1388;
x-forefront-prvs: 01565FED4C
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(346002)(136003)(396003)(39860400002)(366004)(199004)(189003)(13464003)(2906002)(229853002)(256004)(55016002)(6436002)(14454004)(99286004)(110136005)(76176011)(7696005)(6246003)(6306002)(9686003)(86362001)(53936002)(186003)(33656002)(26005)(81166006)(81156014)(476003)(486006)(71190400001)(71200400001)(66066001)(8936002)(8676002)(2501003)(6116002)(3846002)(478600001)(966005)(446003)(11346002)(76116006)(74316002)(55236004)(102836004)(305945005)(66946007)(53546011)(52536014)(316002)(6506007)(5660300002)(4744005)(7736002)(66446008)(64756008)(66556008)(66476007)(25786009);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB2970;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: PkhRxSlem2bWPbEJ66O/vKdsfZxQOn41vB4dblItx7OPxcXhiIo9mq2U5L5pjKN9ra64KLx0orjv/+PcXAN5hv7JdY+Y+KAkEZ39KC7tGfabrBOjqbQyYAU8UhPmqpWqgl4q3hppqhw3bq6JeMuv9eV39h3ltgKIg+L/G1eBl/PMK+ZVUvcwwZuLiUIPx0e299ePWMccoXB+c14XcUF6QThcWpaVbeaZktDvcZNQCmUOzIiv/2hUsEJ10uD16vhPvYW4YNIT5OQlUKemqPrwRoUlyZ3Mjgve5PiFjEa0bcvTHvgYsip2LTRK0z92DdczKEL22piSdl+goonyzTOFUYpdceuX51H09YOJKh2fgXR5n0KBxi1UofOjqg1dFMzudCGhhNTwlmLRMb6TVFrO78DbcLEWCRI+PztRwfnrh5c=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB2970
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT041.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(136003)(396003)(39860400002)(376002)(2980300002)(189003)(199004)(40434004)(13464003)(2486003)(305945005)(966005)(55016002)(99286004)(2501003)(14444005)(5660300002)(66066001)(22756006)(5024004)(14454004)(7696005)(8676002)(81166006)(70586007)(50466002)(356004)(76130400001)(52536014)(81156014)(25786009)(70206006)(8936002)(26005)(6506007)(53546011)(102836004)(186003)(7736002)(6306002)(26826003)(76176011)(9686003)(47776003)(486006)(110136005)(3846002)(6116002)(74316002)(229853002)(126002)(33656002)(86362001)(23676004)(36906005)(6246003)(11346002)(478600001)(336012)(446003)(316002)(476003)(2906002)(63350400001)(436003)(63370400001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR08MB4142;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 1f5a5bed-b4dd-485d-d5e4-08d7358da5be
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:VI1PR08MB4142; 
X-Forefront-PRVS: 01565FED4C
X-Microsoft-Antispam-Message-Info: q+DSZYR1EVgN+0ead0ajKEN7GMEC2c9clKigLwZ0a+M9qpX8eWBNzjv/axOVjVaX1q+/MMUFhvyaMTw+n0VuP8fOo4qYW+/iBSMfYZq0D1RTQKdFDLOVED3eZ4Jh1PnPkNQ+N3u0TVNhIqp0GRLVgq+IKOq0kSLIYTaRDcOMHc8dupfIwAI1LWzDzjoY/gQYVCSn7MHhegynSZAhJId/IEFeZmW2zijQfdUXi5TSO0XoWdTVRGhrb/0krNjyY6xpGJH8PYBL4FfjDB6U6Myb1sr37C4o3n7NX7bd80HNC+S5TSaiZ1dExRCbmhYNFcJ2p3e8S2urZVo5POMjZEKgR2cicpL/PVfNfO8HlFM+TlfGYF83GMLqCVTs7TkK3T1iwvqsa8J5m4R/OmPGMGe8Eyps/71E7MZoF5z34c4AfwQ=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2019 01:24:44.6208 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: f6072257-6f6b-499d-c4a2-08d7358da98b
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4142
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] plat/kvm: Ofw driver depend on
 the AARCH64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuDQpMb29rcyBnb29kIHRvIG1lDQoNClJldmlld2VkLWJ5OiBKaWEgSGUgPGp1c3Rp
bi5oZUBhcm0uY29tPg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1p
bmlvcy1kZXZlbCA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc+IE9u
IEJlaGFsZg0KPiBPZiBTaGFyYW4gU2FudGhhbmFtDQo+IFNlbnQ6IDIwMTnlubQ55pyIMTDml6Ug
MjowNw0KPiBUbzogbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcNCj4gQ2M6IFNoYXJhbiBTYW50
aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pg0KPiBTdWJqZWN0OiBbTWluaW9zLWRl
dmVsXSBbVU5JS1JBRlQgUEFUQ0hdIHBsYXQva3ZtOiBPZncgZHJpdmVyIGRlcGVuZCBvbg0KPiB0
aGUgQUFSQ0g2NA0KPg0KPiBUaGUgb2Z3IGRyaXZlciB3b3JrcyB3aXRoIEFBUkNINjQgYXJjaGl0
ZWN0dXJlLiBXZSBhZGQgYW4gZXhwbGljaXQNCj4gZGVwZW5kZW5jeSB0byB0aGlzIGRyaXZlci4N
Cj4NCj4gU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBu
ZWNsYWIuZXU+DQo+IC0tLQ0KPiAgcGxhdC9rdm0vQ29uZmlnLnVrIHwgMSArDQo+ICAxIGZpbGUg
Y2hhbmdlZCwgMSBpbnNlcnRpb24oKykNCj4NCj4gZGlmZiAtLWdpdCBhL3BsYXQva3ZtL0NvbmZp
Zy51ayBiL3BsYXQva3ZtL0NvbmZpZy51aw0KPiBpbmRleCBjNGFkNjVlYy4uYmU2YWVhMDAgMTAw
NjQ0DQo+IC0tLSBhL3BsYXQva3ZtL0NvbmZpZy51aw0KPiArKysgYi9wbGF0L2t2bS9Db25maWcu
dWsNCj4gQEAgLTk5LDYgKzk5LDcgQEAgY29uZmlnIExJQkdJQ1YyDQo+ICBjb25maWcgTElCT0ZX
DQo+ICAgICAgICAgYm9vbCAiT3BlbiBGaXJtd2FyZSBsaWJyYXJ5IHN1cHBvcnQiDQo+ICAgICAg
ICAgZGVmYXVsdCBuDQo+ICsgICAgICAgZGVwZW5kcyBvbiBBUkNIX0FSTV82NA0KPiAgICAgICAg
IHNlbGVjdCBMSUJGRFQNCj4NCj4gIGVuZGlmDQo+IC0tDQo+IDIuMjAuMQ0KPg0KPg0KPiBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0DQo+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KPiBo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs
DQpJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMgb2YgdGhpcyBlbWFpbCBhbmQgYW55IGF0
dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwgYW5kIG1heSBhbHNvIGJlIHByaXZpbGVnZWQuIElm
IHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGllbnQsIHBsZWFzZSBub3RpZnkgdGhlIHNl
bmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZSBjb250ZW50cyB0byBhbnkg
b3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLCBvciBzdG9yZSBvciBjb3B5IHRo
ZSBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFuayB5b3UuDQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0
Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:02:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:02:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7aAR-0007u8-Ti; Tue, 10 Sep 2019 07:02:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=hBU4=XF=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i7aAQ-0007u3-4j
 for minios-devel@lists.xenproject.org; Tue, 10 Sep 2019 07:02:22 +0000
X-Inumbo-ID: ee3c208a-d398-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ee3c208a-d398-11e9-b299-bc764e2007e4;
 Tue, 10 Sep 2019 07:02:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5D5B0F2013;
 Tue, 10 Sep 2019 09:02:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id mXlhDhQtizMB; Tue, 10 Sep 2019 09:02:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 2C128F200B;
 Tue, 10 Sep 2019 09:02:07 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 09:02:06 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 10 Sep 2019 09:02:06
 +0200
From: Santiago Pagani <Santiago.Pagani@neclab.eu>
To: Jia He <justin.he@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>, 
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 1/7] plat/common: Calculate shift factors for
 coversion between ns and tick
Thread-Index: AQHVZ6Wos7yeavhzjE+Ut5n9hF9cUA==
Date: Tue, 10 Sep 2019 07:02:06 +0000
Message-ID: <AB15EB89-2D66-439F-8F21-1FC5AC6CA6B1@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-2-justin.he@arm.com>
In-Reply-To: <20190730142748.62490-2-justin.he@arm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.24.96]
Content-ID: <2837E8561F2EB341994E54420FDEEF8B@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 1/7] plat/common: Calculate
 shift factors for coversion between ns and tick
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Wei Chen <wei.chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgYWxsLA0KDQpUaGFua3MgZm9yIHRoZSBwYXRjaC4gUGxlYXNlIGZpbmQgbXkgY29tbWVudHMg
aW5saW5lOg0KDQrvu79PbiAzMC4wNy4xOSwgMTY6MjcsICJKaWEgSGUiIDxqdXN0aW4uaGVAYXJt
LmNvbT4gd3JvdGU6DQoNCiAgICBXZSBoYWQgc2hpZnQgZmFjdG9yIGZvciBjb3ZlcnRpbmcgY291
bnRlciB0aWNrcyB0byBucywgYnV0IGl0J3Mgbm90DQogICAgZW5vdWdoLiBTb21ldGltZSwgd2Ug
bmVlZCB0byBjb3ZlcnQgbnMgdG8gdGlja3MuIEZvciBleGFtcGxlLCB3ZSdsbA0KICAgIHRyYW5z
ZmVyIHNsZWVwKG5zKSB0byBjb3VudGVyIHRpY2tzLiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBzaGlm
dCBmYWN0b3IsDQogICAgdGhlIGNvbnZlcnNpb24gYWNjdXJhY3kgd2lsbCBiZSBsb3dlci4NCiAg
ICANCiAgICBTaWduZWQtb2ZmLWJ5OiBXZWkgQ2hlbiA8d2VpLmNoZW5AYXJtLmNvbT4NCiAgICBT
aWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNvbT4NCiAgICBTaWdu
ZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPg0KICAgIC0tLQ0KICAgICBwbGF0
L2NvbW1vbi9hcm0vdGltZS5jIHwgMTExICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKyst
LS0tLS0tLS0tDQogICAgIDEgZmlsZSBjaGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspLCAyNSBkZWxl
dGlvbnMoLSkNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vYXJtL3RpbWUuYyBi
L3BsYXQvY29tbW9uL2FybS90aW1lLmMNCiAgICBpbmRleCAxYjMwOTAzLi40YzY2MDM5IDEwMDY0
NA0KICAgIC0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCiAgICArKysgYi9wbGF0L2NvbW1v
bi9hcm0vdGltZS5jDQogICAgQEAgLTQ3LDIxICs0Nyw4MyBAQA0KICAgICBzdGF0aWMgdWludDY0
X3QgYm9vdF90aWNrczsNCiAgICAgc3RhdGljIHVpbnQzMl90IGNvdW50ZXJfZnJlcTsNCiAgICAg
DQogICAgLS8qDQogICAgLSAqIFNoaWZ0IGZhY3RvciBmb3IgY291bnRlciBzY2FsaW5nIG11bHRp
cGxpZXI7IHJlZmVycmVkIHRvIGFzIFMgaW4gdGhlDQogICAgLSAqIGZvbGxvd2luZyBjb21tZW50
cy4NCiAgICAtICovDQogICAgLXN0YXRpYyB1aW50OF90IGNvdW50ZXJfc2hpZnQ7DQogICAgIA0K
ICAgIC0vKiBNdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIGNvdW50ZXIgdGlja3MgdG8gbnNlY3Mu
ICgwLlMpIGZpeGVkIHBvaW50LiAqLw0KICAgICsvKiBTaGlmdCBmYWN0b3IgZm9yIGNvbnZlcnRp
bmcgdGlja3MgdG8gbnMgKi8NCiAgICArc3RhdGljIHVpbnQ4X3QgY291bnRlcl9zaGlmdF90b19u
czsNCiAgICArDQogICAgKy8qIFNoaWZ0IGZhY3RvciBmb3IgY29udmVydGluZyBucyB0byB0aWNr
cyAqLw0KICAgICtzdGF0aWMgdWludDhfdCBjb3VudGVyX3NoaWZ0X3RvX3RpY2s7DQogICAgKw0K
ICAgICsvKiBNdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIGNvdW50ZXIgdGlja3MgdG8gbnNlY3Mg
Ki8NCiAgICAgc3RhdGljIHVpbnQzMl90IG5zX3Blcl90aWNrOw0KICAgICANCiAgICArLyogTXVs
dGlwbGllciBmb3IgY29udmVydGluZyBuc2VjcyB0byBjb3VudGVyIHRpY2tzICovDQogICAgK3N0
YXRpYyB1aW50MzJfdCB0aWNrX3Blcl9uczsNCiAgICArDQogICAgKy8qDQogICAgKyAqIFRoZSBt
YXhpbXVtIHRpbWUgcmFuZ2UgaW4gc2Vjb25kcyB3aGljaCBjYW4gYmUgY29udmVydGVkIGJ5IG11
bHRpcGxpZXINCiAgICArICogYW5kIHNoaWZ0IGZhY3RvcnMuIFRoaXMgd2lsbCBndWFyYW50ZWUg
dGhlIGNvbnZlcnRlZCB2YWx1ZSBub3QgdG8gZXhjZWVkDQogICAgKyAqIDY0LWJpdCB1bnNpZ25l
ZCBpbnRlZ2VyLiBJbmNyZWFzZSB0aGUgdGltZSByYW5nZSB3aWxsIHJlZHVjZSB0aGUgYWNjdXJh
Y3kNCiAgICArICogb2YgY29udmVyc2lvbiwgYmVjYXVzZSB3ZSB3aWxsIGdldCBzbWFsbGVyIG11
bHRpcGxpZXIgYW5kIHNoaWZ0IGZhY3RvcnMuDQogICAgKyAqIEluIHRoaXMgY2FzZSwgd2Ugc2Vs
ZWN0ZWQgMzYwMHMgYXMgdGhlIHRpbWUgcmFuZ2UuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIF9f
TUFYX0NPTlZFUlRfU0VDUwkzNjAwVUwNCkNPTU1ORVQ6IEFzIEkgdW5kZXJzdGFuZCBpdCwgIHRo
aXMgI2RlZmluZSBpcyBhbHNvIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbnNfcGVyX3RpY2ss
IGl0IG5vdCBvbmx5IGltcG9zZXMgYSBsaW1pdCB0byB0aGUgdGltZSByYW5nZSwgYnV0IGFsc28g
dG8gdGhlIHRpY2sgcmFuZ2UuIFRoYXQgaXMsIHdlIGRvIG5vdCBzdXBwb3J0IGNvbnZlcnRpbmcg
bnNfdG9fdGlja3MgZm9yIG1vcmUgdGhhbiAzNjAwIHNlY29uZHMsIGFuZCBhcyB3ZWxsIHdlIGRv
IG5vdCBzdXBwb3J0IHRvIGNvbnZlcnQgdGlja3NfdG9fbnMgZm9yIG1vcmUgdGhhbiAzNjAwMDAw
MDAwIHRpY2tzLCBjb3JyZWN0PyBNYXliZSBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlICNkZWZpbmUg
dG8gc29tZXRoaW5nIG1vcmUgZ2VuZXJpYy4NCiAgICArDQogICAgIC8qIEhvdyBtYW55IG5hbm9z
ZWNvbmRzIHBlciBzZWNvbmQgKi8NCiAgICAgI2RlZmluZSBOU0VDX1BFUl9TRUMgdWthcmNoX3Rp
bWVfc2VjX3RvX25zZWMoMSkNCiAgICAgDQogICAgIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgdGlj
a3NfdG9fbnModWludDY0X3QgdGlja3MpDQogICAgIHsNCiAgICAtCXJldHVybiAobnNfcGVyX3Rp
Y2sgKiB0aWNrcykgPj4gY291bnRlcl9zaGlmdDsNCiAgICArCXJldHVybiAobnNfcGVyX3RpY2sg
KiB0aWNrcykgPj4gY291bnRlcl9zaGlmdF90b19uczsNCkNPTU1FTlQ6IE1heWJlIGFkZCBhbiBh
c3NlcnRpb24gZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyBhcyBhIHNhbml0eSBjaGVj
az8NCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGlubGluZSB1aW50NjRfdCBuc190b190aWNr
cyh1aW50NjRfdCBucykNCiAgICArew0KICAgICsJcmV0dXJuICh0aWNrX3Blcl9ucyAqIG5zKSA+
PiBjb3VudGVyX3NoaWZ0X3RvX3RpY2s7DQpDT01NRU5UOiBNYXliZSBhZGQgYW4gYXNzZXJ0aW9u
IGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyBhcyBhIHNhbml0eSBjaGVjaz8NCiAg
ICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogQ2FsY3VsYXRlIG11bHRpcGxpZXIvc2hpZnQg
ZmFjdG9ycyBmb3Igc2NhbGVkIG1hdGguDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBjYWxj
dWxhdGVfbXVsdF9zaGlmdCh1aW50MzJfdCAqbXVsdCwgdWludDhfdCAqc2hpZnQsDQogICAgKwkJ
dWludDY0X3QgZnJvbSwgdWludDY0X3QgdG8pDQogICAgK3sNCiAgICArCXVpbnQ2NF90IHRtcDsN
CiAgICArCXVpbnQzMl90IHNmdCwgc2Z0YWNjID0gMzI7DQogICAgKw0KICAgICsJLyoNCiAgICAr
CSAqIENhbGN1bGF0ZSB0aGUgc2hpZnQgZmFjdG9yIHdoaWNoIGlzIGxpbWl0aW5nIHRoZSBjb252
ZXJzaW9uDQogICAgKwkgKiByYW5nZToNCiAgICArCSAqLw0KICAgICsJdG1wID0gKCh1aW50NjRf
dClfX01BWF9DT05WRVJUX1NFQ1MgKiBmcm9tKSA+PiAzMjsNCiAgICArCXdoaWxlICh0bXApIHsN
CiAgICArCQl0bXAgPj49IDE7DQogICAgKwkJc2Z0YWNjLS07DQogICAgKwl9DQogICAgKw0KICAg
ICsNCiAgICArCS8qDQogICAgKwkgKiBDYWxjdWxhdGUgc2hpZnQgZmFjdG9yIChTKSBhbmQgc2Nh
bGluZyBtdWx0aXBsaWVyIChNKS4NCiAgICArCSAqDQogICAgKwkgKiAoUykgbmVlZHMgdG8gYmUg
dGhlIGxhcmdlc3Qgc2hpZnQgZmFjdG9yICg8PSBtYXhfc2hpZnQpIHdoZXJlDQogICAgKwkgKiB0
aGUgcmVzdWx0IG9mIHRoZSBNIGNhbGN1bGF0aW9uIGJlbG93IGZpdHMgaW50byB1aW50MzJfdA0K
ICAgICsJICogd2l0aG91dCB0cnVuY2F0aW9uLg0KICAgICsJICoNCiAgICArCSAqIG11bHRpcGxp
ZXIgPSAodGFyZ2V0IDw8IHNoaWZ0KSAvIHNvdXJjZQ0KICAgICsJICovDQogICAgKwlmb3IgKHNm
dCA9IDMyOyBzZnQgPiAwOyBzZnQtLSkgew0KICAgICsJCXRtcCA9ICh1aW50NjRfdCkgdG8gPDwg
c2Z0Ow0KICAgICsNCiAgICArCQkvKiBFbnN1cmluZyB3ZSByb3VuZCB0byBuZWFyZXN0IHdoZW4g
Y2FsY3VsYXRpbmcgdGhlDQogICAgKwkJICogbXVsdGlwbGllcg0KICAgICsJCSAqLw0KICAgICsJ
CXRtcCArPSBmcm9tIC8gMjsNCiAgICArCQl0bXAgLz0gZnJvbTsNCiAgICArCQlpZiAoKHRtcCA+
PiBzZnRhY2MpID09IDApDQogICAgKwkJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJKm11bHQgPSB0
bXA7DQogICAgKwkqc2hpZnQgPSBzZnQ7DQogICAgIH0NCiAgICAgDQogICAgIC8qDQogICAgQEAg
LTE0NSwyOSArMjA3LDI4IEBAIHN0YXRpYyBfX3U2NCAgZ2VuZXJpY190aW1lcl9lcG9jaG9mZnNl
dCh2b2lkKQ0KICAgICANCiAgICAgc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkN
CiAgICAgew0KICAgICsJY291bnRlcl9mcmVxID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KCk7DQog
ICAgKw0KICAgICAJLyoNCiAgICAtCSAqIENhbGN1bGF0ZSBjb3VudGVyIHNoaWZ0IGZhY3RvciBh
bmQgc2NhbGluZyBtdWx0aXBsaWVyLg0KICAgIC0JICoNCiAgICAtCSAqIGNvdW50ZXJfc2hpZnQg
KFMpIG5lZWRzIHRvIGJlIHRoZSBsYXJnZXN0ICg8PTMyKSBzaGlmdCBmYWN0b3Igd2hlcmUNCiAg
ICAtCSAqIHRoZSByZXN1bHQgb2YgdGhlIG5zX3Blcl90aWNrIGNhbGN1bGF0aW9uIGJlbG93IGZp
dHMgaW50byB1aW50MzJfdA0KICAgIC0JICogd2l0aG91dCB0cnVuY2F0aW9uLiBOb3RlIHRoYXQg
d2UgZGlzYWxsb3cgYW4gUyBvZiB6ZXJvIHRvIGVuc3VyZQ0KICAgIC0JICogdGhlIGxvb3AgYWx3
YXlzIHRlcm1pbmF0ZXMuDQogICAgLQkgKg0KICAgIC0JICogKDAuUykgbnNfcGVyX3RpY2sgPSBO
U0VDX1BFUl9TRUMgKFMuUykgLyBjb3VudGVyX2ZyZXEgKFMuMCkNCiAgICArCSAqIENhbGN1bGF0
ZSB0aGUgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIgZm9yDQogICAgKwkgKiBj
cG52ZXJ0aW5nIHRpY2tzIHRvIG5zLg0KICAgICAJICovDQpUWVBPOiBUeXBvIGluIGNvbW1lbnQ6
IGNwbnZlcnRpbmcgLT4gY29udmVydGluZw0KICAgIC0JdWludDY0X3QgdG1wOw0KICAgICsJY2Fs
Y3VsYXRlX211bHRfc2hpZnQoJm5zX3Blcl90aWNrLCAmY291bnRlcl9zaGlmdF90b19ucywNCiAg
ICArCQkJCWNvdW50ZXJfZnJlcSwgTlNFQ19QRVJfU0VDKTsNCiAgICAgDQogICAgLQljb3VudGVy
X2ZyZXEgPSBnZXRfY291bnRlcl9mcmVxdWVuY3koKTsNCiAgICAtCWNvdW50ZXJfc2hpZnQgPSAz
MjsNCiAgICAtCWRvIHsNCiAgICAtCQl0bXAgPSAoTlNFQ19QRVJfU0VDIDw8IGNvdW50ZXJfc2hp
ZnQpIC8gY291bnRlcl9mcmVxOw0KICAgIC0JCWlmICgodG1wICYgMHhGRkZGRkZGRjAwMDAwMDAw
TCkgPT0gMEwpDQogICAgLQkJCW5zX3Blcl90aWNrID0gKHVpbnQzMl90KXRtcDsNCiAgICAtCQll
bHNlDQogICAgLQkJCWNvdW50ZXJfc2hpZnQtLTsNCiAgICAtCX0gd2hpbGUgKGNvdW50ZXJfc2hp
ZnQgPiAwICYmIG5zX3Blcl90aWNrID09IDBMKTsNCiAgICArCS8qIFdlIGRpc2FsbG93IHplcm8g
bnNfcGVyX3RpY2sgKi8NCiAgICAgCVVLX0JVR09OKCFuc19wZXJfdGljayk7DQogICAgIA0KICAg
ICsJLyoNCiAgICArCSAqIENhbGN1bGF0ZSB0aGUgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11
bHRpcGxpZXIgZm9yDQogICAgKwkgKiBjcG52ZXJ0aW5nIG5zIHRvIHRpY2tzLg0KICAgICsJICov
DQpUWVBPOiBUeXBvIGluIGNvbW1lbnQ6IGNwbnZlcnRpbmcgLT4gY29udmVydGluZw0KICAgICsJ
Y2FsY3VsYXRlX211bHRfc2hpZnQoJnRpY2tfcGVyX25zLCAmY291bnRlcl9zaGlmdF90b190aWNr
LA0KICAgICsJCQkJTlNFQ19QRVJfU0VDLCBjb3VudGVyX2ZyZXEpOw0KICAgICsNCiAgICArCS8q
IFdlIGRpc2FsbG93IHplcm8gbnNfcGVyX3RpY2sgKi8NCiAgICArCVVLX0JVR09OKCF0aWNrX3Bl
cl9ucyk7DQogICAgKw0KICAgICAJLyoNCiAgICAgCSAqIE1vbm90b25pYyB0aW1lIGJlZ2lucyBh
dCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNvdW50ZXINCiAgICAgCSAqIGJlZm9yZSBjYWxp
YnJhdGlvbikuDQogICAgLS0gDQogICAgMi4xNy4xDQogICAgDQogICAgDQogICAgDQoNCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:11:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:11:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7aJ3-0000D9-I3; Tue, 10 Sep 2019 07:11:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=hBU4=XF=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i7aJ2-0000D4-8M
 for minios-devel@lists.xenproject.org; Tue, 10 Sep 2019 07:11:16 +0000
X-Inumbo-ID: 2c5aa3cd-d39a-11e9-ac19-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2c5aa3cd-d39a-11e9-ac19-12813bfff9fa;
 Tue, 10 Sep 2019 07:11:14 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0D1F2F2029;
 Tue, 10 Sep 2019 09:11:13 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Of5JVWFyT02u; Tue, 10 Sep 2019 09:11:12 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id CB79EF200B;
 Tue, 10 Sep 2019 09:11:00 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 09:11:00 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 10 Sep 2019 09:11:00
 +0200
From: Santiago Pagani <Santiago.Pagani@neclab.eu>
To: Jia He <justin.he@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>, 
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 4/7] plat/common: Share arch_timer fdt node
 among functions
Thread-Index: AQHVZ6bmUwLXuVkbcEiEGnC1o5zHRg==
Date: Tue, 10 Sep 2019 07:11:00 +0000
Message-ID: <6909C446-2E34-4E06-8BB2-3C4AD41B7CB1@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-5-justin.he@arm.com>
In-Reply-To: <20190730142748.62490-5-justin.he@arm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.24.96]
Content-ID: <D0051C6B474E0E49A52BF2290B21F360@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 4/7] plat/common: Share
 arch_timer fdt node among functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Wei Chen <wei.chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgYWxsLA0KDQpUaGFua3MgZm9yIHRoZSBwYXRjaC4gUGxlYXNlIGZpbmQgbXkgY29tbWVudHMg
aW5saW5lLg0KDQrvu79PbiAzMC4wNy4xOSwgMTY6MjcsICJKaWEgSGUiIDxqdXN0aW4uaGVAYXJt
LmNvbT4gd3JvdGU6DQoNCiAgICBTZXZlcmFsIGZ1bmN0aW9uIHdpbGwgdXNlIHRoZSBhcmNoX3Rp
bWVyIGZkdCBub2RlIHRvIGdldCBpbmZvcm1hdGlvbg0KICAgIGZyb20gZGV2aWNlIHRyZWUuIFdl
IGZpbmQgaXQgb25jZSwgYW5kIHNoYXJlIGl0IGFtb25nIGZ1bmN0aW9ucy4gdGhpcw0KICAgIHdp
bGwgYXZvaWQgZmluZCBhcmNoX3RpbWVyIGZkdCBldmVyeXdoZXJlLg0KICAgIA0KICAgIFNpZ25l
ZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hlbkBhcm0uY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6
IEppYW55b25nIFd1IDxqaWFueW9uZy53dUBhcm0uY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IEpp
YSBIZSA8anVzdGluLmhlQGFybS5jb20+DQogICAgLS0tDQogICAgIHBsYXQvY29tbW9uL2FybS90
aW1lLmMgfCA1MyArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAg
ICAgMSBmaWxlIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygtKQ0KICAg
IA0KICAgIGRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jIGIvcGxhdC9jb21tb24v
YXJtL3RpbWUuYw0KICAgIGluZGV4IGFlYTM3OWMuLjEwN2ZkZjAgMTAwNjQ0DQogICAgLS0tIGEv
cGxhdC9jb21tb24vYXJtL3RpbWUuYw0KICAgICsrKyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMN
CiAgICBAQCAtMzMsNiArMzMsNyBAQA0KICAgICAgKi8NCiAgICAgI2luY2x1ZGUgPHN0ZGxpYi5o
Pg0KICAgICAjaW5jbHVkZSA8bGliZmR0Lmg+DQogICAgKyNpbmNsdWRlIDxvZncvZmR0Lmg+DQog
ICAgICNpbmNsdWRlIDx1ay9hc3NlcnQuaD4NCiAgICAgI2luY2x1ZGUgPHVrL3BsYXQvdGltZS5o
Pg0KICAgICAjaW5jbHVkZSA8dWsvcGxhdC9pcnEuaD4NCiAgICBAQCAtNDQsNiArNDUsMTIgQEAN
CiAgICAgICogcG9ydGFibGUgd2F5IHRvIGhhbmRvdmVyIHRoZSBEVEIgZW50cnkgcG9pbnQgdG8g
Y29tbW9uIHBsYXRmb3JtIGNvZGUgKi8NCiAgICAgI2luY2x1ZGUgPGt2bS9jb25maWcuaD4NCiAg
ICAgDQogICAgK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgYXJjaF90aW1lcl9saXN0W10gPSB7
DQogICAgKwkiYXJtLGFybXY4LXRpbWVyIiwNCiAgICArCSJhcm0sYXJtdjctdGltZXIiLA0KICAg
ICsJTlVMTA0KICAgICt9Ow0KICAgICsNCiAgICAgc3RhdGljIHVpbnQ2NF90IGJvb3RfdGlja3M7
DQogICAgIHN0YXRpYyB1aW50MzJfdCBjb3VudGVyX2ZyZXE7DQogICAgIA0KICAgIEBAIC0xMjYs
MzIgKzEzMywxOCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVfbXVsdF9zaGlmdCh1aW50MzJfdCAq
bXVsdCwgdWludDhfdCAqc2hpZnQsDQogICAgIAkqc2hpZnQgPSBzZnQ7DQogICAgIH0NCiAgICAg
DQogICAgLS8qDQogICAgLSAqIE9uIGEgZmV3IHBsYXRmb3JtcyB0aGUgZnJlcXVlbmN5IGlzIG5v
dCBjb25maWd1cmVkIGNvcnJlY3RseQ0KICAgIC0gKiBieSB0aGUgZmlybXdhcmUuIEEgcHJvcGVy
dHkgaW4gdGhlIERUIChjbG9jay1mcmVxdWVuY3kpIGhhcw0KICAgIC0gKiBiZWVuIGludHJvZHVj
ZWQgdG8gd29ya2Fyb3VuZCB0aG9zZSBmaXJtd2FyZS4gU28sIHdlIHdpbGwgdHJ5DQogICAgLSAq
IHRvIGdldCBjbG9jay1mcmVxdWVuY3kgZnJvbSBEVCBmaXJzdCwgaWYgZmFpbGVkIHdlIHdpbGwg
cmVhZA0KICAgIC0gKiB0aGUgcmVnaXN0ZXIgZGlyZWN0bHkuDQogICAgLSAqLw0KICAgIC1zdGF0
aWMgdWludDMyX3QgZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KHZvaWQpDQogICAgK3N0YXRpYyB1aW50
MzJfdCBnZW5lcmljX3RpbWVyX2dldF9mcmVxdWVuY3koaW50IGZkdF90aW1lcikNCiAgICAgew0K
ICAgIC0JaW50IGZkdF9hcmNodGltZXIsIGxlbjsNCiAgICArCWludCBsZW47DQogICAgIAljb25z
dCB1aW50NjRfdCAqZmR0X2ZyZXE7DQogICAgIA0KICAgIC0JLyogVHJ5IHRvIGZpbmQgYXJtLGFy
bXY4LXRpbWVyIGZpcnN0ICovDQogICAgLQlmZHRfYXJjaHRpbWVyID0gZmR0X25vZGVfb2Zmc2V0
X2J5X2NvbXBhdGlibGUoX2xpYmt2bXBsYXRfY2ZnLmR0YiwNCiAgICAtCQkJCQkJLTEsICJhcm0s
YXJtdjgtdGltZXIiKTsNCiAgICAtCS8qIElmIGZhaWxlZCwgdHJ5IHRvIGZpbmQgYXJtLGFybXY3
LXRpbWVyICovDQogICAgLQlpZiAoZmR0X2FyY2h0aW1lciA8IDApDQogICAgLQkJZmR0X2FyY2h0
aW1lciA9IGZkdF9ub2RlX29mZnNldF9ieV9jb21wYXRpYmxlKA0KICAgIC0JCQkJCQkJX2xpYmt2
bXBsYXRfY2ZnLmR0YiwNCiAgICAtCQkJCQkJCS0xLCAiYXJtLGFybXY3LXRpbWVyIik7DQogICAg
LQkvKiBEVCBkb2Vzbid0IHByb3ZpZGUgYXJjaCB0aW1lciBpbmZvcm1hdGlvbiAqLw0KICAgIC0J
aWYgKGZkdF9hcmNodGltZXIgPCAwKQ0KICAgIC0JCWdvdG8gZW5kbm9mcmVxOw0KICAgIC0NCiAg
ICArCS8qDQogICAgKwkgKiBPbiBhIGZldyBwbGF0Zm9ybXMgdGhlIGZyZXF1ZW5jeSBpcyBub3Qg
Y29uZmlndXJlZCBjb3JyZWN0bHkNCiAgICArCSAqIGJ5IHRoZSBmaXJtd2FyZS4gQSBwcm9wZXJ0
eSBpbiB0aGUgRFQgKGNsb2NrLWZyZXF1ZW5jeSkgaGFzDQogICAgKwkgKiBiZWVuIGludHJvZHVj
ZWQgdG8gd29ya2Fyb3VuZCB0aG9zZSBmaXJtd2FyZS4NCiAgICArCSAqLw0KICAgICAJZmR0X2Zy
ZXEgPSBmZHRfZ2V0cHJvcChfbGlia3ZtcGxhdF9jZmcuZHRiLA0KICAgIC0JCQlmZHRfYXJjaHRp
bWVyLCAiY2xvY2stZnJlcXVlbmN5IiwgJmxlbik7DQogICAgKwkJCWZkdF90aW1lciwgImNsb2Nr
LWZyZXF1ZW5jeSIsICZsZW4pOw0KICAgICAJaWYgKCFmZHRfZnJlcSB8fCAobGVuIDw9IDApKSB7
DQogICAgIAkJdWtfcHJfaW5mbygiTm8gY2xvY2stZnJlcXVlbmN5IGZvdW5kLCByZWFkaW5nIGZy
b20gcmVnaXN0ZXIgZGlyZWN0bHkuXG4iKTsNCiAgICAgCQlnb3RvIGVuZG5vZnJlcTsNCkNPTU1F
TlQ6IE5vIG5lZWQgdG8gdXNlIGdvdG8gaW4gdGhpcyBjYXNlLiBTaW1wbHkgbW92ZSB0aGUgY29t
bWVudCBhbmQgcmV0dXJuIHN0YXRlbWVudCBpbiB0aGUgZ290byBoZXJlIGFuZCB0aGVuIHJlbW92
ZSB0aGUgZW5kbm9ncmVxIGxhYmVsLg0KICAgIEBAIC0xNjAsNiArMTUzLDcgQEAgc3RhdGljIHVp
bnQzMl90IGdldF9jb3VudGVyX2ZyZXF1ZW5jeSh2b2lkKQ0KICAgICAJcmV0dXJuIGZkdDMyX3Rv
X2NwdShmZHRfZnJlcVswXSk7DQogICAgIA0KICAgICBlbmRub2ZyZXE6DQogICAgKwkvKiBObyB3
b3JrYXJvdW5kLCBnZXQgZnJvbSByZWdpc3RlciBkaXJlY3RseSAqLw0KICAgICAJcmV0dXJuIFNZ
U1JFR19SRUFEMzIoY250ZnJxX2VsMCk7DQogICAgIH0NCiAgICAgDQogICAgQEAgLTIwNSw5ICsx
OTksMTAgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyaWNfdGltZXJfZXBvY2hvZmZzZXQodm9pZCkN
CiAgICAgCXJldHVybiAwOw0KICAgICB9DQogICAgIA0KICAgIC1zdGF0aWMgaW50IGdlbmVyaWNf
dGltZXJfaW5pdCh2b2lkKQ0KICAgICtzdGF0aWMgaW50IGdlbmVyaWNfdGltZXJfaW5pdChpbnQg
ZmR0X3RpbWVyKQ0KICAgICB7DQogICAgLQljb3VudGVyX2ZyZXEgPSBnZXRfY291bnRlcl9mcmVx
dWVuY3koKTsNCiAgICArCS8qIEdldCBjb3VudGVyIGZyZXF1ZW5jeSBmcm9tIERUQiBvciByZWdp
c3RlciAqLw0KICAgICsJY291bnRlcl9mcmVxID0gZ2VuZXJpY190aW1lcl9nZXRfZnJlcXVlbmN5
KGZkdF90aW1lcik7DQogICAgIA0KICAgICAJLyoNCiAgICAgCSAqIENhbGN1bGF0ZSB0aGUgc2hp
ZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIgZm9yDQogICAgQEAgLTI2OCw3ICsyNjMs
NyBAQCBzdGF0aWMgaW50IHRpbWVyX2hhbmRsZXIodm9pZCAqYXJnIF9fdW51c2VkKQ0KICAgICAv
KiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLw0KICAgICB2
b2lkIHVrcGxhdF90aW1lX2luaXQodm9pZCkNCiAgICAgew0KICAgIC0JaW50IHJjOw0KICAgICsJ
aW50IHJjLCBmZHRfdGltZXI7DQogICAgIA0KICAgICAJLyoNCiAgICAgCSAqIE1vbm90b25pYyB0
aW1lIGJlZ2lucyBhdCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNvdW50ZXINCiAgICBAQCAt
Mjc2LDExICsyNzEsMTcgQEAgdm9pZCB1a3BsYXRfdGltZV9pbml0KHZvaWQpDQogICAgIAkgKi8N
CiAgICAgCWJvb3RfdGlja3MgPSBnZW5lcmljX3RpbWVyX2dldF90aWNrcygpOw0KICAgICANCiAg
ICArCS8qIEN1cnJlbnRseSwgd2Ugb25seSBzdXBwb3J0IDEgdGltZXIgcGVyIHN5c3RlbSAqLw0K
ICAgICsJZmR0X3RpbWVyID0gZmR0X25vZGVfb2Zmc2V0X2J5X2NvbXBhdGlibGVfbGlzdChfbGli
a3ZtcGxhdF9jZmcuZHRiLA0KICAgICsJCQkJLTEsIGFyY2hfdGltZXJfbGlzdCk7DQogICAgKwlp
ZiAoZmR0X3RpbWVyIDwgMCkNCiAgICArCQlVS19DUkFTSCgiQ291bGQgbm90IGZpbmQgYXJjaCB0
aW1lciFcbiIpOw0KICAgICsNCiAgICAgCXJjID0gdWtwbGF0X2lycV9yZWdpc3RlcigwLCB0aW1l
cl9oYW5kbGVyLCBOVUxMKTsNCiAgICAgCWlmIChyYyA8IDApDQogICAgIAkJVUtfQ1JBU0goIkZh
aWxlZCB0byByZWdpc3RlciB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlclxuIik7DQogICAgIA0KICAg
IC0JcmMgPSBnZW5lcmljX3RpbWVyX2luaXQoKTsNCiAgICArCXJjID0gZ2VuZXJpY190aW1lcl9p
bml0KGZkdF90aW1lcik7DQogICAgIAlpZiAocmMgPCAwKQ0KICAgICAJCVVLX0NSQVNIKCJGYWls
ZWQgdG8gaW5pdGlhbGl6ZSBwbGF0Zm9ybSB0aW1lXG4iKTsNCiAgICAgfQ0KICAgIC0tIA0KICAg
IDIuMTcuMQ0KICAgIA0KICAgIA0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:17:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:17:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7aOm-0000J2-22; Tue, 10 Sep 2019 07:17:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=hBU4=XF=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i7aOl-0000Ix-NX
 for minios-devel@lists.xenproject.org; Tue, 10 Sep 2019 07:17:11 +0000
X-Inumbo-ID: 00951afa-d39b-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 00951afa-d39b-11e9-b299-bc764e2007e4;
 Tue, 10 Sep 2019 07:17:09 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 23C13F2013;
 Tue, 10 Sep 2019 09:17:09 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id J4zJyiBHHlW3; Tue, 10 Sep 2019 09:17:09 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DF962F200B;
 Tue, 10 Sep 2019 09:16:56 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 09:16:56 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 10 Sep 2019 09:16:56
 +0200
From: Santiago Pagani <Santiago.Pagani@neclab.eu>
To: Jia He <justin.he@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>, 
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 5/7] plat/common: Find and register IRQ for
 arch_timer
Thread-Index: AQHVZ6e6PzX4C/9taUKlq7xRUwpj/A==
Date: Tue, 10 Sep 2019 07:16:56 +0000
Message-ID: <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
In-Reply-To: <20190730142748.62490-6-justin.he@arm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.24.96]
Content-ID: <FA1CCD0C0774EF408B2701417D23346F@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Wei Chen <wei.chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgYWxsLA0KDQpUaGFua3MgZm9yIHRoZSBwYXRjaGVzLiBQbGVhc2UgZmluZCBteSBjb21tZW50
cyBpbmxpbmUuDQoNCu+7v09uIDMwLjA3LjE5LCAxNjoyNywgIkppYSBIZSIgPGp1c3Rpbi5oZUBh
cm0uY29tPiB3cm90ZToNCg0KICAgIEN1cnJlbnRseSwgaW4gdW5pa3JhZnQsIHRoZSB0aW1lciBp
bnRlcnJ1cHQgaGFzbid0IGJlZW4NCiAgICB1c2VkIHRvIHVwZGF0ZSB0aWNrcyBwZXJpb2RpY2Fs
bHkuIFdlIGp1c3QgbWFzayBpdCBpbg0KICAgIElSUSBoYW5kbGVyLCBhbmQgd2FpdCBmb3Igc2xl
ZXAgZnVuY3Rpb24gdG8gc2V0IG5ldw0KICAgIG1hdGNoIGNvdW50ZXIgYW5kIHVubWFzayBJUlEu
DQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5jb20+DQog
ICAgU2lnbmVkLW9mZi1ieTogSmlhbnlvbmcgV3UgPGppYW55b25nLnd1QGFybS5jb20+DQogICAg
U2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4NCiAgICAtLS0NCiAgICAg
cGxhdC9jb21tb24vYXJtL3RpbWUuYyAgICAgICAgICAgICB8IDkxICsrKysrKysrKysrKysrKysr
KysrKysrKy0tLS0tLQ0KICAgICBwbGF0L2RyaXZlcnMvZ2ljL2dpYy12Mi5jICAgICAgICAgIHwg
IDIgKy0NCiAgICAgcGxhdC9kcml2ZXJzL2luY2x1ZGUvZ2ljL2dpYy12Mi5oICB8ICAyICstDQog
ICAgIHBsYXQvZHJpdmVycy9pbmNsdWRlL29mdy9naWNfZmR0LmggfCAgMiArLQ0KICAgICA0IGZp
bGVzIGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQ0KICAgIA0KICAg
IGRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jIGIvcGxhdC9jb21tb24vYXJtL3Rp
bWUuYw0KICAgIGluZGV4IDEwN2ZkZjAuLjQwMzQ1NzIgMTAwNjQ0DQogICAgLS0tIGEvcGxhdC9j
b21tb24vYXJtL3RpbWUuYw0KICAgICsrKyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCiAgICBA
QCAtMzYsOSArMzYsMTggQEANCiAgICAgI2luY2x1ZGUgPG9mdy9mZHQuaD4NCiAgICAgI2luY2x1
ZGUgPHVrL2Fzc2VydC5oPg0KICAgICAjaW5jbHVkZSA8dWsvcGxhdC90aW1lLmg+DQogICAgKyNp
bmNsdWRlIDx1ay9wbGF0L2xjcHUuaD4NCiAgICAgI2luY2x1ZGUgPHVrL3BsYXQvaXJxLmg+DQog
ICAgICNpbmNsdWRlIDx1ay9iaXRvcHMuaD4NCiAgICAgI2luY2x1ZGUgPGNwdS5oPg0KICAgICsj
aW5jbHVkZSA8b2Z3L2dpY19mZHQuaD4NCiAgICArI2luY2x1ZGUgPGlycS5oPg0KICAgICsjaW5j
bHVkZSA8Z2ljL2dpYy12Mi5oPg0KICAgICsNCiAgICArLyogQml0cyBkZWZpbml0aW9uIG9mIGNu
dHZfY3RsX2VsMCByZWdpc3RlciAqLw0KICAgICsjZGVmaW5lIEdUX1RJTUVSX0VOQUJMRSAgICAg
ICAgMHgwMQ0KICAgICsjZGVmaW5lIEdUX1RJTUVSX01BU0tfSVJRICAgICAgMHgwMg0KICAgICsj
ZGVmaW5lIEdUX1RJTUVSX0lSUV9TVEFUVVMgICAgMHgwNA0KICAgICANCiAgICAgLyogVE9ETzog
Rm9yIG5vdyB0aGlzIGZpbGUgaXMgS1ZNIGRlcGVuZGVudC4gQXMgc29vbiBhcyB3ZSBoYXZlIG1v
cmUNCiAgICAgICogQXJtIHBsYXRmb3JtcyB0aGF0IGFyZSB1c2luZyB0aGlzIGZpbGUsIHdlIG5l
ZWQgdG8gaW50cm9kdWNlIGENCiAgICBAQCAtMTMzLDYgKzE0Miw0MCBAQCBzdGF0aWMgdm9pZCBj
YWxjdWxhdGVfbXVsdF9zaGlmdCh1aW50MzJfdCAqbXVsdCwgdWludDhfdCAqc2hpZnQsDQogICAg
IAkqc2hpZnQgPSBzZnQ7DQogICAgIH0NCiAgICAgDQogICAgK3N0YXRpYyBpbmxpbmUgdm9pZCBn
ZW5lcmljX3RpbWVyX2VuYWJsZSh2b2lkKQ0KICAgICt7DQogICAgKwlTWVNSRUdfV1JJVEUzMihj
bnR2X2N0bF9lbDAsIEdUX1RJTUVSX0VOQUJMRSk7DQpDT01NRU5UOiBMb29rcyB0byBtZSBsaWtl
IGhlcmUgd2UgYXJlIGFsc28gaW1wbGljaXRlbHkgdW5tYXNraW5nIHRoZSBJUlEuIElzIHRoaXMg
dGhlIGRlc2lyZWQgYmVoYWl2b3VyPyBUaGlzIGlzIG5vdCBlbnRpcmVseSBjbGVhciBmcm9tIHRo
ZSBmdW5jdGlvbnMgbmFtZS4gTWF5YmUganVzdCBPUiB0aGlzIGJpdCBzbyB0aGUgSVJRIG1hc2sg
aXMgbm90IGNoYW5nZWQgYnkgdGhpcyBmdW5jdGlvbj8gVGhlcmUgaXMgYWxzbyBubyB0aW1lcl9k
aXNhYmxlIGZ1bmN0aW9uLCBtYXliZSB3ZSBhbHNvIHdhbnQgdG8gZXhwb3NlIHRoYXQ/DQogICAg
Kw0KICAgICsJLyogRW5zdXJlIHRoZSB3cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAq
Lw0KICAgICsJaXNiKCk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbmxpbmUgdm9pZCBn
ZW5lcmljX3RpbWVyX21hc2tfaXJxKHZvaWQpDQogICAgK3sNCiAgICArCVNZU1JFR19XUklURTMy
KGNudHZfY3RsX2VsMCwNCiAgICArCQlTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkgfCBHVF9U
SU1FUl9NQVNLX0lSUSk7DQogICAgKw0KICAgICsJLyogRW5zdXJlIHRoZSB3cml0ZSBvZiBzeXMg
cmVnaXN0ZXIgaXMgdmlzaWJsZSAqLw0KICAgICsJaXNiKCk7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX3RpbWVyX3VubWFza19pcnEodm9pZCkNCiAgICAr
ew0KICAgICsJU1lTUkVHX1dSSVRFMzIoY250dl9jdGxfZWwwLA0KICAgICsJCVNZU1JFR19SRUFE
MzIoY250dl9jdGxfZWwwKSAmICh+R1RfVElNRVJfTUFTS19JUlEpKTsNCiAgICArDQogICAgKwkv
KiBFbnN1cmUgdGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxlICovDQogICAgKwlp
c2IoKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGlt
ZXJfdXBkYXRlX2NvbXBhcmUodWludDY0X3QgbmV3X3ZhbCkNCiAgICArew0KICAgICsJU1lTUkVH
X1dSSVRFNjQoY250dl9jdmFsX2VsMCwgbmV3X3ZhbCk7DQogICAgKw0KICAgICsJLyogRW5zdXJl
IHRoZSB3cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAqLw0KICAgICsJaXNiKCk7DQog
ICAgK30NCiAgICArDQogICAgIHN0YXRpYyB1aW50MzJfdCBnZW5lcmljX3RpbWVyX2dldF9mcmVx
dWVuY3koaW50IGZkdF90aW1lcikNCiAgICAgew0KICAgICAJaW50IGxlbjsNCiAgICBAQCAtMjI3
LDE2ICsyNzAsMjIgQEAgc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQoaW50IGZkdF90aW1l
cikNCiAgICAgCXJldHVybiAwOw0KICAgICB9DQogICAgIA0KICAgICtzdGF0aWMgaW50IGdlbmVy
aWNfdGltZXJfaXJxX2hhbmRsZXIodm9pZCAqYXJnIF9fdW51c2VkKQ0KICAgICt7DQogICAgKwkv
KiBZZXMsIHdlIGhhbmRsZWQgdGhlIGlycS4gKi8NCkNPTU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcg
dGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIGhlcmU/IE5vdCBldmVuIGRpc2FibGUgdGhlIElSUT8g
QXMgdGhlIHRpbWVyIGlzIG5vdCBzdG9wcGVkLCB3aGVuIHRoZSBjb3VudGVyIG92ZXJmbG93cyB3
ZSB3b3VsZCBnZXQgYSBuZXcgaW50ZXJydXB0IG90aGVyd2lzZSAoYWx0aG91Z2ggdGhlIG92ZXJm
bG93IGNvdWxkIGhhcHBlbiBpbiBhIHZlcnkgdmVyeSBsb25nIHRpbWUsIHJpZ2h0PykNCiAgICAr
CXJldHVybiAxOw0KICAgICt9DQogICAgKw0KICAgICB1bnNpZ25lZCBsb25nIHNjaGVkX2hhdmVf
cGVuZGluZ19ldmVudHM7DQogICAgIA0KICAgICB2b2lkIHRpbWVfYmxvY2tfdW50aWwoX19zbnNl
YyB1bnRpbCkNCiAgICAgew0KICAgICsJLyoNCiAgICArCSAqIFRPRE86DQogICAgKwkgKiBBcyB3
ZSBoYXZlbid0IHN1cHBvcnQgaW50ZXJydXB0IG9uIEFybSwgc28gd2UganVzdA0KICAgICsJICog
dXNlIGJ1c3kgcG9sbGluZyBmb3Igbm93Lg0KICAgICsJICovDQogICAgIAl3aGlsZSAoKF9fc25z
ZWMpIHVrcGxhdF9tb25vdG9uaWNfY2xvY2soKSA8IHVudGlsKSB7DQogICAgLQkJLyoNCiAgICAt
CQkgKiBUT0RPOg0KICAgIC0JCSAqIEFzIHdlIGhhdmVuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHQgb24g
QXJtLCBzbyB3ZSBqdXN0DQogICAgLQkJICogdXNlIGJ1c3kgcG9sbGluZyBmb3Igbm93Lg0KICAg
IC0JCSAqLw0KICAgICAJCWlmIChfX3VrX3Rlc3RfYW5kX2NsZWFyX2JpdCgwLCAmc2NoZWRfaGF2
ZV9wZW5kaW5nX2V2ZW50cykpDQogICAgIAkJCWJyZWFrOw0KICAgICAJfQ0KICAgIEBAIC0yNTQs
MTYgKzMwMywxMiBAQCBfX25zZWMgdWtwbGF0X3dhbGxfY2xvY2sodm9pZCkNCiAgICAgCXJldHVy
biBnZW5lcmljX3RpbWVyX21vbm90b25pYygpICsgZ2VuZXJpY190aW1lcl9lcG9jaG9mZnNldCgp
Ow0KICAgICB9DQogICAgIA0KICAgIC1zdGF0aWMgaW50IHRpbWVyX2hhbmRsZXIodm9pZCAqYXJn
IF9fdW51c2VkKQ0KICAgIC17DQogICAgLQkvKiBZZXMsIHdlIGhhbmRsZWQgdGhlIGlycS4gKi8N
CiAgICAtCXJldHVybiAxOw0KICAgIC19DQogICAgLQ0KICAgICAvKiBtdXN0IGJlIGNhbGxlZCBi
ZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAqLw0KICAgICB2b2lkIHVrcGxhdF90aW1lX2lu
aXQodm9pZCkNCiAgICAgew0KICAgIC0JaW50IHJjLCBmZHRfdGltZXI7DQogICAgKwlpbnQgcmMs
IGlycSwgZmR0X3RpbWVyOw0KICAgICsJdWludDMyX3QgaXJxX3R5cGUsIGh3aXJxOw0KICAgICsJ
dWludDMyX3QgdHJpZ2dlcl90eXBlOw0KICAgICANCiAgICAgCS8qDQogICAgIAkgKiBNb25vdG9u
aWMgdGltZSBiZWdpbnMgYXQgYm9vdF90aWNrcyAoZmlyc3QgcmVhZCBvZiBjb3VudGVyDQogICAg
QEAgLTI3NywxMSArMzIyLDI1IEBAIHZvaWQgdWtwbGF0X3RpbWVfaW5pdCh2b2lkKQ0KICAgICAJ
aWYgKGZkdF90aW1lciA8IDApDQogICAgIAkJVUtfQ1JBU0goIkNvdWxkIG5vdCBmaW5kIGFyY2gg
dGltZXIhXG4iKTsNCiAgICAgDQogICAgLQlyYyA9IHVrcGxhdF9pcnFfcmVnaXN0ZXIoMCwgdGlt
ZXJfaGFuZGxlciwgTlVMTCk7DQogICAgLQlpZiAocmMgPCAwKQ0KICAgIC0JCVVLX0NSQVNIKCJG
YWlsZWQgdG8gcmVnaXN0ZXIgdGltZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOw0KICAgIC0NCiAg
ICAgCXJjID0gZ2VuZXJpY190aW1lcl9pbml0KGZkdF90aW1lcik7DQogICAgIAlpZiAocmMgPCAw
KQ0KICAgICAJCVVLX0NSQVNIKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGF0Zm9ybSB0aW1lXG4i
KTsNCiAgICArDQogICAgKwlyYyA9IGdpY19nZXRfaXJxX2Zyb21fZHRiKF9saWJrdm1wbGF0X2Nm
Zy5kdGIsIGZkdF90aW1lciwgMiwNCiAgICArCQkJJmlycV90eXBlLCAmaHdpcnEsICZ0cmlnZ2Vy
X3R5cGUpOw0KICAgICsJaWYgKHJjIDwgMCkNCiAgICArCQlVS19DUkFTSCgiRmFpbGVkIHRvIGZp
bmQgSVJRIG51bWJlciBmcm9tIERUQlxuIik7DQogICAgKw0KICAgICsJaXJxID0gZ2ljX2lycV90
cmFuc2xhdGUoaXJxX3R5cGUsIGh3aXJxKTsNCiAgICArCWlmIChpcnEgPCAwIHx8IGlycSA+PSBf
X01BWF9JUlEpDQogICAgKwkJVUtfQ1JBU0goIkZhaWxlZCB0byB0cmFuc2xhdGUgSVJRIG51bWJl
ciwgdHlwZT0ldSwgaHdpcnE9JXVcbiIsDQogICAgKwkJCWlycV90eXBlLCBod2lycSk7DQogICAg
Kw0KICAgICsJcmMgPSB1a3BsYXRfaXJxX3JlZ2lzdGVyKGlycSwgZ2VuZXJpY190aW1lcl9pcnFf
aGFuZGxlciwgTlVMTCk7DQogICAgKwlpZiAocmMgPCAwKQ0KICAgICsJCVVLX0NSQVNIKCJGYWls
ZWQgdG8gcmVnaXN0ZXIgdGltZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOw0KICAgICsNCiAgICAr
CS8qIEVuYWJsZSBhbmQgdW5tYXNrIHRpbWVyICovDQogICAgKwlnZW5lcmljX3RpbWVyX2VuYWJs
ZSgpOw0KICAgICsJZ2VuZXJpY190aW1lcl91bm1hc2tfaXJxKCk7DQpDT01NRU5UOiBXaHkgYXJl
IHdlIGVuYWJsaW5nIHRoZSBJUlEgaGVyZT8gTWF5YmUgSSdtIG1pc3Npbmcgc29tZXRoaW5nLCBi
dXQgc2luY2UgdGhlcmUgaXMgbm8gdmFsdWUgc2V0IGZvciB0aGUgdXBkYXRlIGNvbXBhcmUsICB3
ZSBkbyBub3Qga25vdyB3aGVuIHRoZSBJUlEgd2lsbCBiZSB0cmlnZ2VyZWQuIEFsc28sIHRoZSBJ
UlEgaGFuZGxlciBpcyBub3QgZG9pbmcgYW55dGhpbmcuDQogICAgIH0NCiAgICBkaWZmIC0tZ2l0
IGEvcGxhdC9kcml2ZXJzL2dpYy9naWMtdjIuYyBiL3BsYXQvZHJpdmVycy9naWMvZ2ljLXYyLmMN
CiAgICBpbmRleCA2ODc3MTRlLi5jMDFjOTJmIDEwMDY0NA0KICAgIC0tLSBhL3BsYXQvZHJpdmVy
cy9naWMvZ2ljLXYyLmMNCiAgICArKysgYi9wbGF0L2RyaXZlcnMvZ2ljL2dpYy12Mi5jDQogICAg
QEAgLTI5MSw3ICsyOTEsNyBAQCB2b2lkIGdpY19zZXRfaXJxX3R5cGUodWludDMyX3QgaXJxLCBp
bnQgdHJpZ2dlcikNCiAgICAgCXdyaXRlX2dpY2QzMihHSUNEX0lDRkdSKGlycSksIHZhbCk7DQog
ICAgIH0NCiAgICAgDQogICAgLXVpbnQzMl90IGdpY19pcnFfdHJhbnNsYXRlKHVpbnQzMl90IHR5
cGUsIHVpbnQzMl90IGh3X2lycSkNCiAgICAraW50MzJfdCBnaWNfaXJxX3RyYW5zbGF0ZSh1aW50
MzJfdCB0eXBlLCB1aW50MzJfdCBod19pcnEpDQogICAgIHsNCiAgICAgCXVpbnQzMl90IGlycTsN
CiAgICAgDQogICAgZGlmZiAtLWdpdCBhL3BsYXQvZHJpdmVycy9pbmNsdWRlL2dpYy9naWMtdjIu
aCBiL3BsYXQvZHJpdmVycy9pbmNsdWRlL2dpYy9naWMtdjIuaA0KICAgIGluZGV4IDI0ZGExZWIu
LmMyOGI3YTcgMTAwNjQ0DQogICAgLS0tIGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUvZ2ljL2dpYy12
Mi5oDQogICAgKysrIGIvcGxhdC9kcml2ZXJzL2luY2x1ZGUvZ2ljL2dpYy12Mi5oDQogICAgQEAg
LTM2NSw3ICszNjUsNyBAQCBpbnQgZ2ljX2lzX2lycV9hY3RpdmUodWludDMyX3QgaXJxKTsNCiAg
ICAgdm9pZCBnaWNfc2V0X2lycV90eXBlKHVpbnQzMl90IGlycSwgaW50IHRyaWdnZXIpOw0KICAg
ICANCiAgICAgLyogVHJhbnNsYXRlIHRvIGh3aXJxIGFjY29yZGluZyB0byB0eXBlIGUuZy4gUFBJ
IFNQSSBTR0kgKi8NCiAgICAtdWludDMyX3QgZ2ljX2lycV90cmFuc2xhdGUodWludDMyX3QgdHlw
ZSwgdWludDMyX3QgaHdfaXJxKTsNCiAgICAraW50IGdpY19pcnFfdHJhbnNsYXRlKHVpbnQzMl90
IHR5cGUsIHVpbnQzMl90IGh3X2lycSk7DQogICAgIA0KICAgICAvKiBIYW5kbGUgSVJRIGVudHJ5
ICovDQogICAgIHZvaWQgZ2ljX2hhbmRsZV9pcnEodm9pZCk7DQogICAgZGlmZiAtLWdpdCBhL3Bs
YXQvZHJpdmVycy9pbmNsdWRlL29mdy9naWNfZmR0LmggYi9wbGF0L2RyaXZlcnMvaW5jbHVkZS9v
ZncvZ2ljX2ZkdC5oDQogICAgaW5kZXggZTgxYmMyOC4uZTU1NTg5MiAxMDA2NDQNCiAgICAtLS0g
YS9wbGF0L2RyaXZlcnMvaW5jbHVkZS9vZncvZ2ljX2ZkdC5oDQogICAgKysrIGIvcGxhdC9kcml2
ZXJzL2luY2x1ZGUvb2Z3L2dpY19mZHQuaA0KICAgIEBAIC00Nyw1ICs0Nyw1IEBADQogICAgICAq
Lw0KICAgICBpbnQgZ2ljX2dldF9pcnFfZnJvbV9kdGIoY29uc3Qgdm9pZCAqZmR0LCBpbnQgbm9k
ZW9mZnNldCwgaW50IGluZGV4LA0KICAgICAJCQl1aW50MzJfdCAqaXJxX3R5cGUsIHVpbnQzMl90
ICpod2lycSwNCiAgICAtCQkJdWludDMyX3QgKnRyaWdnZXJfdHlwZSkNCiAgICArCQkJdWludDMy
X3QgKnRyaWdnZXJfdHlwZSk7DQogICAgICNlbmRpZiAvKiBfX1BMQVRfRFJWX0dJQ19GRFRfSF9f
ICovDQogICAgLS0gDQogICAgMi4xNy4xDQogICAgDQogICAgDQogICAgDQoNCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:28:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:28:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7aZf-0001HV-OI; Tue, 10 Sep 2019 07:28:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=hBU4=XF=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i7aZe-0001HQ-0g
 for minios-devel@lists.xenproject.org; Tue, 10 Sep 2019 07:28:26 +0000
X-Inumbo-ID: 92c62044-d39c-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 92c62044-d39c-11e9-978d-bc764e2007e4;
 Tue, 10 Sep 2019 07:28:24 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id EA8EBF200B;
 Tue, 10 Sep 2019 09:28:23 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id hQ9ec1Rit0Z4; Tue, 10 Sep 2019 09:28:23 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B8143F2017;
 Tue, 10 Sep 2019 09:28:11 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 09:28:11 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 10 Sep 2019 09:28:11
 +0200
From: Santiago Pagani <Santiago.Pagani@neclab.eu>
To: Jia He <justin.he@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>, 
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 6/7] plat/common: Implement
 generic_timer_cpu_block
Thread-Index: AQHVZ6lMqSDX3ioZEEWHOqMk7KP92w==
Date: Tue, 10 Sep 2019 07:28:11 +0000
Message-ID: <250EB994-8794-46DC-BBB6-8F12735F930A@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-7-justin.he@arm.com>
In-Reply-To: <20190730142748.62490-7-justin.he@arm.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.24.96]
Content-ID: <2108E7DAF4AD3549880531C1271E7ABB@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 6/7] plat/common: Implement
 generic_timer_cpu_block
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Wei Chen <wei.chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgYWxsLA0KDQpUaGFua3MgZm9yIHRoZSBwYXRjaC4gUGxlYXNlIGZpbmQgbXkgY29tbWVudHMg
aW5saW5lLg0KDQrvu79PbiAzMC4wNy4xOSwgMTY6MjcsICJKaWEgSGUiIDxqdXN0aW4uaGVAYXJt
LmNvbT4gd3JvdGU6DQoNCiAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB3aGVuIHN5c3Rl
bSBlbnRlciBzbGVlcCBhbmQgbmVlZCB3YWtldXANCiAgICBpbiBhIHNwZWNpZmljIHRpbWUuIEZv
ciBuc190b190aWNrcyBwcmVjaXNpb24sIHdlIGxpbWl0ZWQgdGhlIG1heA0KICAgIHNsZWVwIHRp
bWUgdG8gMzYwMCBzZWNvbmRzLg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3
ZWkuY2hlbkBhcm0uY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IEppYW55b25nIFd1IDxqaWFueW9u
Zy53dUBhcm0uY29tPg0KICAgIFNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5j
b20+DQogICAgLS0tDQogICAgIHBsYXQvY29tbW9uL2FybS90aW1lLmMgfCA0NSArKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0NCiAgICAgMSBmaWxlIGNoYW5nZWQsIDQw
IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pDQogICAgDQogICAgZGlmZiAtLWdpdCBhL3Bs
YXQvY29tbW9uL2FybS90aW1lLmMgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jDQogICAgaW5kZXgg
NDAzNDU3Mi4uM2NiYmQzZiAxMDA2NDQNCiAgICAtLS0gYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5j
DQogICAgKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYw0KICAgIEBAIC0yNDIsNiArMjQyLDQ1
IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmljX3RpbWVyX2Vwb2Nob2Zmc2V0KHZvaWQpDQogICAg
IAlyZXR1cm4gMDsNCiAgICAgfQ0KICAgICANCiAgICArLyoNCiAgICArICogUmV0dXJucyBlYXJs
eSBpZiBhbnkgaW50ZXJydXB0cyBhcmUgc2VydmljZWQsIG9yIGlmIHRoZSByZXF1ZXN0ZWQgZGVs
YXkgaXMNCiAgICArICogdG9vIHNob3J0LiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMg
ZGlzYWJsZWQsIHdpbGwgZW5hYmxlIGludGVycnVwdHMNCiAgICArICogImF0b21pY2FsbHkiIGR1
cmluZyBpZGxlIGxvb3AuDQogICAgKyAqDQogICAgKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBj
YWxsZWQgb25seSBmcm9tIHRoZSBzY2hlZHVsZXIuIEl0IHdpbGwgc2NyZXcNCiAgICArICogeW91
ciBzeXN0ZW0gaWYgeW91IGRvIG90aGVyd2lzZS4gQW5kLCB0aGVyZSBpcyBubyByZWFzb24geW91
DQogICAgKyAqIGFjdHVhbGx5IHdhbnQgdG8gdXNlIGl0IGFueXdoZXJlIGVsc2UuIFRISVMgSVMg
Tk9UIEEgWUlFTEQgb3IgYW55DQogICAgKyAqIGtpbmQgb2YgbXV0ZXhfbG9jay4gSXQgd2lsbCBz
aW1wbHkgaGFsdCB0aGUgY3B1LCBub3QgYWxsb3dpbmcgYW55DQogICAgKyAqIG90aGVyIHRocmVh
ZCB0byBleGVjdXRlLg0KICAgICsgKi8NCkNPTU1FTlQ6IElzIHRoaXMgdGhlIEFQSSB0aGF0IHdl
IHdhbnQ/IE1vc3QgaW50dWl0aXZlbHkgSSB3b3VsZCBleHBlY3QgdG8gYmxvY2sgZm9yIGEgZ2l2
ZW4gdGltZSBhZnRlciB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBIb3dldmVyLCBhcyB0aGUgdmFy
aWFibGUgbmFtZSBzdGF0ZXMsIHdlIGFyZSBoZXJlIGJsb2NraW5nIHVudGlsIGEgY2VydGFpbiBh
YnNvbHV0ZSB2YWx1ZSwgd2hpY2ggZG9lcyBub3Qgc2VlbSBpbnR1aXRpdmUgdG8gbWUuIElmIHRo
aXMgaXMgaW4gZmFjdCB3aGF0IHdlIHdhbnQsIHRoZW4gbWF5YmUgYWRkICJfdW50aWwiIHRvIHRo
ZSBmdW5jdGlvbiBuYW1lIChtb3N0IHJlYWQgdGhhbiB0aGUgdmFyaWFibGUgbmFtZSk/IA0KICAg
ICtzdGF0aWMgdm9pZCBnZW5lcmljX3RpbWVyX2NwdV9ibG9jayh1aW50NjRfdCB1bnRpbF9ucykN
CiAgICArew0KICAgICsJdWludDY0X3Qgbm93X25zLCB1bnRpbF90aWNrczsNCiAgICArDQogICAg
KwlVS19BU1NFUlQodWtwbGF0X2xjcHVfaXJxc19kaXNhYmxlZCgpKTsNCiAgICArDQogICAgKwkv
KiBSZWNvcmQgY3VycmVudCBucyBhbmQgdW50aWxfdGlja3MgZm9yIHRpbWVyICovDQogICAgKwlu
b3dfbnMgPSB1a3BsYXRfbW9ub3RvbmljX2Nsb2NrKCk7DQogICAgKwl1bnRpbF90aWNrcyA9IGdl
bmVyaWNfdGltZXJfZ2V0X3RpY2tzKCkNCiAgICArCQkJCSsgbnNfdG9fdGlja3ModW50aWxfbnMg
LSBub3dfbnMpOw0KICAgICsNCiAgICArCWlmIChub3dfbnMgPCB1bnRpbF9ucykgew0KICAgICsJ
CWdlbmVyaWNfdGltZXJfdXBkYXRlX2NvbXBhcmUodW50aWxfdGlja3MpOw0KICAgICsJCWdlbmVy
aWNfdGltZXJfZW5hYmxlKCk7DQogICAgKwkJZ2VuZXJpY190aW1lcl91bm1hc2tfaXJxKCk7DQog
ICAgKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oIndmaSIpOw0KICAgICsJCWdlbmVyaWNfdGltZXJf
bWFza19pcnEoKTsNCiAgICArDQogICAgKwkJLyogR2l2ZSB0aGUgSVJRIGhhbmRsZXIgYSBjaGFu
Y2UgdG8gaGFuZGxlIHdoYXRldmVyIHdva2UNCiAgICArCQkgKiB1cyB1cA0KICAgICsJCSAqLw0K
ICAgICsJCXVrcGxhdF9sY3B1X2VuYWJsZV9pcnEoKTsNCiAgICArCQl1a3BsYXRfbGNwdV9kaXNh
YmxlX2lycSgpOw0KICAgICsNCiAgICArCQlyZXR1cm47DQpDT01NRU5UOiBObyBuZWVkIGZvciB0
aGlzIHJldHVybiBoZXJlDQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgIHN0YXRpYyBpbnQg
Z2VuZXJpY190aW1lcl9pbml0KGludCBmZHRfdGltZXIpDQogICAgIHsNCiAgICAgCS8qIEdldCBj
b3VudGVyIGZyZXF1ZW5jeSBmcm9tIERUQiBvciByZWdpc3RlciAqLw0KICAgIEBAIC0yODAsMTIg
KzMxOSw4IEBAIHVuc2lnbmVkIGxvbmcgc2NoZWRfaGF2ZV9wZW5kaW5nX2V2ZW50czsNCiAgICAg
DQogICAgIHZvaWQgdGltZV9ibG9ja191bnRpbChfX3Nuc2VjIHVudGlsKQ0KICAgICB7DQogICAg
LQkvKg0KICAgIC0JICogVE9ETzoNCiAgICAtCSAqIEFzIHdlIGhhdmVuJ3Qgc3VwcG9ydCBpbnRl
cnJ1cHQgb24gQXJtLCBzbyB3ZSBqdXN0DQogICAgLQkgKiB1c2UgYnVzeSBwb2xsaW5nIGZvciBu
b3cuDQogICAgLQkgKi8NCiAgICAgCXdoaWxlICgoX19zbnNlYykgdWtwbGF0X21vbm90b25pY19j
bG9jaygpIDwgdW50aWwpIHsNCiAgICArCQlnZW5lcmljX3RpbWVyX2NwdV9ibG9jayh1bnRpbCk7
DQogICAgIAkJaWYgKF9fdWtfdGVzdF9hbmRfY2xlYXJfYml0KDAsICZzY2hlZF9oYXZlX3BlbmRp
bmdfZXZlbnRzKSkNCiAgICAgCQkJYnJlYWs7DQogICAgIAl9DQogICAgLS0gDQogICAgMi4xNy4x
DQogICAgDQogICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:35:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:35:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7agY-00020F-MO; Tue, 10 Sep 2019 07:35:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NxW-0003b8-7H
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:14 +0000
X-Inumbo-ID: a8787d18-d32b-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a8787d18-d32b-11e9-b299-bc764e2007e4;
 Mon, 09 Sep 2019 18:00:08 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 1BF2AF2027;
 Mon,  9 Sep 2019 20:00:07 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id n7Ywn7HnWPGV; Mon,  9 Sep 2019 20:00:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 78D59F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:03 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:59:58 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:17 +0200
Message-ID: <20190909175939.23936-2-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Tue, 10 Sep 2019 07:35:32 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH v2 01/23] kconfig: Import kconfig
 from Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0aW5nIHRoZSBrY29uZmlnIGZyb20gdGhlIExpbnV4IGtlcm5lbApLZXJuZWwgVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlICAgICAgICAgICAgICAg
ICAgfCAgMjA4ICsrCiBzdXBwb3J0L2tjb25maWcubmV3L2NvbmYuYyAgICAgICAgICAgICAgICAg
ICAgfCAgNzAyICsrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYyAgICAgICAgICAg
ICAgICB8IDEzODAgKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jICAgICAgICAg
ICAgICAgICAgICB8IDEyOTcgKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oICAg
ICAgICAgICAgICAgICAgICB8ICAzMzEgKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2Zn
LnNoICAgICAgICAgICAgICB8ICAgMzAgKwogc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jICAg
ICAgICAgICAgICAgICAgIHwgMTUxNiArKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvZ2Nv
bmYuZ2xhZGUgICAgICAgICAgICAgICB8ICA2NjEgKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9p
bWFnZXMuYyAgICAgICAgICAgICAgICAgIHwgIDMyOCArKwogc3VwcG9ydC9rY29uZmlnLm5ldy9p
bWFnZXMuaCAgICAgICAgICAgICAgICAgIHwgICAzMyArCiBzdXBwb3J0L2tjb25maWcubmV3L2xl
eGVyLmwgICAgICAgICAgICAgICAgICAgfCAgNDcxICsrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9s
aXN0LmggICAgICAgICAgICAgICAgICAgIHwgIDEzMiArCiBzdXBwb3J0L2tjb25maWcubmV3L2xr
Yy5oICAgICAgICAgICAgICAgICAgICAgfCAgMTU5ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvbGtj
X3Byb3RvLmggICAgICAgICAgICAgICB8ICAgNjYgKwogc3VwcG9ydC9rY29uZmlnLm5ldy9seGRp
YWxvZy9CSUcuRkFULldBUk5JTkcgIHwgICAgNCArCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL2NoZWNrbGlzdC5jICAgICAgfCAgMzE5ICsrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL2RpYWxvZy5oICAgICAgICAgfCAgMjM4ICsrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL2lucHV0Ym94LmMgICAgICAgfCAgMjg5ICsrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL21lbnVib3guYyAgICAgICAgfCAgNDI0ICsrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9seGRp
YWxvZy90ZXh0Ym94LmMgICAgICAgIHwgIDM5NSArKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhk
aWFsb2cvdXRpbC5jICAgICAgICAgICB8ICA3MDAgKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9s
eGRpYWxvZy95ZXNuby5jICAgICAgICAgIHwgIDEwMSArCiBzdXBwb3J0L2tjb25maWcubmV3L21j
b25mLWNmZy5zaCAgICAgICAgICAgICAgfCAgIDQ3ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvbWNv
bmYuYyAgICAgICAgICAgICAgICAgICB8IDEwMzkgKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3
L21lbnUuYyAgICAgICAgICAgICAgICAgICAgfCAgODY3ICsrKysrCiBzdXBwb3J0L2tjb25maWcu
bmV3L21lcmdlX2NvbmZpZy5zaCAgICAgICAgICAgfCAgMTg5ICsrCiBzdXBwb3J0L2tjb25maWcu
bmV3L25jb25mLWNmZy5zaCAgICAgICAgICAgICAgfCAgIDQ3ICsKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvbmNvbmYuYyAgICAgICAgICAgICAgICAgICB8IDE1NTUgKysrKysrKysrCiBzdXBwb3J0L2tj
b25maWcubmV3L25jb25mLmd1aS5jICAgICAgICAgICAgICAgfCAgNjY0ICsrKysKIHN1cHBvcnQv
a2NvbmZpZy5uZXcvbmNvbmYuaCAgICAgICAgICAgICAgICAgICB8ICAgOTIgKwogc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXJzZXIueSAgICAgICAgICAgICAgICAgIHwgIDczMSArKysrKwogc3VwcG9y
dC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMgICAgICAgICAgICAgIHwgIDU3MyArKysrCiBzdXBw
b3J0L2tjb25maWcubmV3L3Fjb25mLWNmZy5zaCAgICAgICAgICAgICAgfCAgIDMyICsKIHN1cHBv
cnQva2NvbmZpZy5uZXcvcWNvbmYuY2MgICAgICAgICAgICAgICAgICB8IDE4OTYgKysrKysrKysr
KysKIHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuaCAgICAgICAgICAgICAgICAgICB8ICAzMzEg
KysKIHN1cHBvcnQva2NvbmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwgICAgICB8ICA2ODIg
KysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9zeW1ib2wuYyAgICAgICAgICAgICAgICAgIHwgMTMz
MSArKysrKysrKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnICAg
IHwgICA1MiArCiAuLi4vdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5ICAgICAgICAgICAg
fCAgIDEzICsKIC4uLi90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0ICAgICAgICB8
ICAgMTAgKwogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvS2NvbmZpZyAgICAgIHwg
ICA1NiArCiBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSAgfCAg
IDQxICsKIC4uLi90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZyAgICAgICB8ICAg
IDUgKwogLi4uL3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnICAgICAgIHwgICAg
OSArCiAuLi4vdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZyAgICAgICAgfCAgICA1
ICsKIC4uLi90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZyAgICAgICB8ICAgIDkg
KwogLi4uL3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dCAgICAgIHwgICAxMCAr
CiAuLi4va2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnICAgfCAgICAyICsK
IC4uLi90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQgICAgICB8ICAgMTUgKwog
Li4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcgICAgIHwgICAyMSArCiAu
Li4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvX19pbml0X18ucHkgfCAgIDE2ICsKIC4u
Li90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcgICAgICB8ICAgIDIgKwogLi4u
L2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZyAgIHwgICAgMyArCiAuLi4v
Y2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0ICAgfCAgICA0ICsKIHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkgICAgICAgICB8ICAyOTEgKysKIC4uLi90
ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnICAgICAgICAgICB8ICAgNjMgKwogLi4uL3Rl
c3RzL2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5ICAgICAgIHwgICAxMCArCiAuLi4vdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyICAgfCAgIDM4ICsKIC4uLi90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnICAgICAgICAgICB8ICAgIDIgKwogLi4uL3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMSAgICAgIHwgICAgNSArCiAuLi4vdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMyICAgICAgfCAgICA0ICsKIC4uLi90ZXN0cy9l
cnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMgICAgICB8ICAgIDIgKwogLi4uL3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5ICAgICAgIHwgICAxMSArCiAuLi4vdGVzdHMvZXJy
X3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyICAgfCAgICA2ICsKIC4uLi9rY29uZmlnLm5l
dy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZyAgICB8ICAgMjUgKwogLi4uL3Rlc3RzL2ludGVy
X2Nob2ljZS9fX2luaXRfXy5weSAgICAgICAgICAgIHwgICAxNSArCiAuLi4va2NvbmZpZy5uZXcv
dGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZyAgfCAgICAxICsKIC4uLi90ZXN0cy9pbnRlcl9j
aG9pY2UvZXhwZWN0ZWRfY29uZmlnICAgICAgICB8ICAgIDQgKwogLi4uL3Rlc3RzL25ld19jaG9p
Y2Vfd2l0aF9kZXAvS2NvbmZpZyAgICAgICAgIHwgICAzOSArCiAuLi4vdGVzdHMvbmV3X2Nob2lj
ZV93aXRoX2RlcC9fX2luaXRfXy5weSAgICAgfCAgIDE1ICsKIC4uLi90ZXN0cy9uZXdfY2hvaWNl
X3dpdGhfZGVwL2NvbmZpZyAgICAgICAgICB8ICAgIDMgKwogLi4uL3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0IHwgICAxMCArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZf
ZGVwX3VubWV0L0tjb25maWcgICAgICAgfCAgIDE2ICsKIC4uLi90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvX19pbml0X18ucHkgICB8ICAgMjAgKwogLi4uL3Rlc3RzL25vX3dyaXRlX2lmX2Rl
cF91bm1ldC9jb25maWcgICAgICAgIHwgICAgMSArCiAuLi4vbm9fd3JpdGVfaWZfZGVwX3VubWV0
L2V4cGVjdGVkX2NvbmZpZyAgICAgfCAgICA1ICsKIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0
aW5fZnVuYy9LY29uZmlnICAgICB8ICAgMjcgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRp
bl9mdW5jL19faW5pdF9fLnB5IHwgICAgOSArCiAuLi4vcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMv
ZXhwZWN0ZWRfc3RkZXJyICAgfCAgICA1ICsKIC4uLi9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9l
eHBlY3RlZF9zdGRvdXQgICB8ICAgIDEgKwogLi4uL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5z
aW9uL0tjb25maWcgICAgIHwgICAgNSArCiAuLi4vcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNp
b24vX19pbml0X18ucHkgfCAgIDExICsKIC4uLi9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRf
c3RkZXJyICAgICAgICB8ICAgIDEgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25m
aWcgICAgICAgICAgIHwgICA0NCArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0
X18ucHkgICAgICAgfCAgICA4ICsKIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3Rl
ZF9zdGRlcnIgICB8ICAgMTAgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZp
ZyAgICAgICAgIHwgICA1MyArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRf
Xy5weSAgICAgfCAgICA4ICsKIC4uLi90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVk
X3N0ZGVyciB8ICAgIDkgKwogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pICAg
ICAgICAgIHwgICAgNyArCiAuLi4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcgICAg
ICAgICAgfCAgIDM1ICsKIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkg
ICAgICB8ICAgMTcgKwogLi4uL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRv
dXQwIHwgICAgMiArCiAuLi4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91
dDEgfCAgICA0ICsKIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0
MiB8ICAgIDUgKwogc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMgICAgICAgICAgICAgICAgICAg
IHwgIDEyOSArCiBzdXBwb3J0L2tjb25maWcubmV3L3pjb25mLmxleC5jICAgICAgICAgICAgICAg
fCAyODIwICsrKysrKysrKysrKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L3pjb25mLnRhYi5j
ICAgICAgICAgICAgICAgfCAyNTA0ICsrKysrKysrKysrKysrKwogOTggZmlsZXMgY2hhbmdlZCwg
MjY0MzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2NvbmYu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmgKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBw
b3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvZ2NvbmYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvZ2NvbmYuZ2xhZGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2lt
YWdlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuaAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvbGtjX3Byb3RvLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2RpYWxvZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3guYwogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNuby5jCiBjcmVhdGUgbW9kZSAxMDA3
NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L21jb25mLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L21lbnUuYwogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy5uZXcv
bWVyZ2VfY29uZmlnLnNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9u
Y29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L25jb25m
LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1aS5jCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJvY2Vzcy5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3Vw
cG9ydC9rY29uZmlnLm5ldy9xY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Fjb25mLmNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy9xY29uZi5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9zdHJl
YW1saW5lX2NvbmZpZy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
c3ltYm9sLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1
dG9fc3VibWVudS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9LY29uZmlnCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvX19pbml0
X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2lj
ZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2Nv
bmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
L2FsbHllc19leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNr
MV9leHBlY3RlZF9zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5p
dF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9p
Y2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVl
X3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0
X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9y
ZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZwogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
Zy5pbmMxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJf
cmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19p
bml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNl
L2RlZmNvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
aW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19f
aW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9u
ZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91
bm1ldC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2Rl
cF91bm1ldC9leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5j
L19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4
cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNp
b24vX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUv
S2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJs
ZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9w
cmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0LmluaQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRf
Y2hvaWNlL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91
dDAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MgogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMKCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uM2YzMjdlMjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlCkBAIC0wLDAgKzEsMjA4IEBACisjIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBLZXJu
ZWwgY29uZmlndXJhdGlvbiB0YXJnZXRzCisjIFRoZXNlIHRhcmdldHMgYXJlIHVzZWQgZnJvbSB0
b3AtbGV2ZWwgbWFrZWZpbGUKKworUEhPTlkgKz0geGNvbmZpZyBnY29uZmlnIG1lbnVjb25maWcg
Y29uZmlnIGxvY2FsbW9kY29uZmlnIGxvY2FseWVzY29uZmlnIFwKKwlidWlsZF9tZW51Y29uZmln
IGJ1aWxkX25jb25maWcgYnVpbGRfZ2NvbmZpZyBidWlsZF94Y29uZmlnCisKK2lmZGVmIEtCVUlM
RF9LQ09ORklHCitLY29uZmlnIDo9ICQoS0JVSUxEX0tDT05GSUcpCitlbHNlCitLY29uZmlnIDo9
IEtjb25maWcKK2VuZGlmCisKK2lmZXEgKCQocXVpZXQpLHNpbGVudF8pCitzaWxlbnQgOj0gLXMK
K2VuZGlmCisKKyMgV2UgbmVlZCB0aGlzLCBpbiBjYXNlIHRoZSB1c2VyIGhhcyBpdCBpbiBpdHMg
ZW52aXJvbm1lbnQKK3VuZXhwb3J0IENPTkZJR18KKworeGNvbmZpZzogJChvYmopL3Fjb25mCisJ
JDwgJChzaWxlbnQpICQoS2NvbmZpZykKKworZ2NvbmZpZzogJChvYmopL2djb25mCisJJDwgJChz
aWxlbnQpICQoS2NvbmZpZykKKworbWVudWNvbmZpZzogJChvYmopL21jb25mCisJJDwgJChzaWxl
bnQpICQoS2NvbmZpZykKKworY29uZmlnOiAkKG9iaikvY29uZgorCSQ8ICQoc2lsZW50KSAtLW9s
ZGFza2NvbmZpZyAkKEtjb25maWcpCisKK25jb25maWc6ICQob2JqKS9uY29uZgorCSQ8ICQoc2ls
ZW50KSAkKEtjb25maWcpCisKK2J1aWxkX21lbnVjb25maWc6ICQob2JqKS9tY29uZgorCitidWls
ZF9uY29uZmlnOiAkKG9iaikvbmNvbmYKKworYnVpbGRfZ2NvbmZpZzogJChvYmopL2djb25mCisK
K2J1aWxkX3hjb25maWc6ICQob2JqKS9xY29uZgorCitsb2NhbHllc2NvbmZpZyBsb2NhbG1vZGNv
bmZpZzogJChvYmopL2NvbmYKKwkkKFEpcGVybCAkKHNyY3RyZWUpLyQoc3JjKS9zdHJlYW1saW5l
X2NvbmZpZy5wbCAtLSRAICQoc3JjdHJlZSkgJChLY29uZmlnKSA+IC50bXAuY29uZmlnCisJJChR
KWlmIFsgLWYgLmNvbmZpZyBdOyB0aGVuIAkJCQkJXAorCQkJY21wIC1zIC50bXAuY29uZmlnIC5j
b25maWcgfHwJCQlcCisJCQkobXYgLWYgLmNvbmZpZyAuY29uZmlnLm9sZC4xOwkJCVwKKwkJCSBt
diAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJCVwKKwkJCSAkPCAkKHNpbGVudCkgLS1vbGRjb25m
aWcgJChLY29uZmlnKTsJCVwKKwkJCSBtdiAtZiAuY29uZmlnLm9sZC4xIC5jb25maWcub2xkKQkJ
XAorCWVsc2UJCQkJCQkJCVwKKwkJCW12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXAorCQkJ
JDwgJChzaWxlbnQpIC0tb2xkY29uZmlnICQoS2NvbmZpZyk7CQlcCisJZmkKKwkkKFEpcm0gLWYg
LnRtcC5jb25maWcKKworIyBUaGVzZSB0YXJnZXRzIG1hcCAxOjEgdG8gdGhlIGNvbW1hbmRsaW5l
IG9wdGlvbnMgb2YgJ2NvbmYnCisjCisjIE5vdGU6CisjICBzeW5jY29uZmlnIGhhcyBiZWNvbWUg
YW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBpcyBub3cKKyMgIGRlcHJlY2F0
ZWQgZm9yIGV4dGVybmFsIHVzZQorc2ltcGxlLXRhcmdldHMgOj0gb2xkY29uZmlnIGFsbG5vY29u
ZmlnIGFsbHllc2NvbmZpZyBhbGxtb2Rjb25maWcgXAorCWFsbGRlZmNvbmZpZyByYW5kY29uZmln
IGxpc3RuZXdjb25maWcgb2xkZGVmY29uZmlnIHN5bmNjb25maWcKK1BIT05ZICs9ICQoc2ltcGxl
LXRhcmdldHMpCisKKyQoc2ltcGxlLXRhcmdldHMpOiAkKG9iaikvY29uZgorCSQ8ICQoc2lsZW50
KSAtLSRAICQoS2NvbmZpZykKKworUEhPTlkgKz0gc2F2ZWRlZmNvbmZpZyBkZWZjb25maWcKKwor
c2F2ZWRlZmNvbmZpZzogJChvYmopL2NvbmYKKwkkPCAkKHNpbGVudCkgLS0kQD1kZWZjb25maWcg
JChLY29uZmlnKQorCitkZWZjb25maWc6ICQob2JqKS9jb25mCitpZmVxICgkKEtCVUlMRF9ERUZD
T05GSUcpLCkKKwkkPCAkKHNpbGVudCkgLS1kZWZjb25maWcgJChLY29uZmlnKQorZWxzZSBpZm5l
cSAoJCh3aWxkY2FyZCAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxE
X0RFRkNPTkZJRykpLCkKKwlAJChrZWNobykgIioqKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMg
YmFzZWQgb24gJyQoS0JVSUxEX0RFRkNPTkZJRyknIgorCSQoUSkkPCAkKHNpbGVudCkgLS1kZWZj
b25maWc9YXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3MvJChLQlVJTERfREVGQ09ORklHKSAkKEtjb25m
aWcpCitlbHNlCisJQCQoa2VjaG8pICIqKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGJhc2Vk
IG9uIHRhcmdldCAnJChLQlVJTERfREVGQ09ORklHKSciCisJJChRKSQoTUFLRSkgLWYgJChzcmN0
cmVlKS9NYWtlZmlsZSAkKEtCVUlMRF9ERUZDT05GSUcpCitlbmRpZgorCislX2RlZmNvbmZpZzog
JChvYmopL2NvbmYKKwkkKFEpJDwgJChzaWxlbnQpIC0tZGVmY29uZmlnPWFyY2gvJChTUkNBUkNI
KS9jb25maWdzLyRAICQoS2NvbmZpZykKKworY29uZmlnZmlsZXM9JCh3aWxkY2FyZCAkKHNyY3Ry
ZWUpL2tlcm5lbC9jb25maWdzLyRAICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3Mv
JEApCisKKyUuY29uZmlnOiAkKG9iaikvY29uZgorCSQoaWYgJChjYWxsIGNvbmZpZ2ZpbGVzKSws
ICQoZXJyb3IgTm8gY29uZmlndXJhdGlvbiBleGlzdHMgZm9yIHRoaXMgdGFyZ2V0IG9uIHRoaXMg
YXJjaGl0ZWN0dXJlKSkKKwkkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9r
Y29uZmlnL21lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnICQoY29uZmlnZmlsZXMpCisJKyQoUSl5
ZXMgIiIgfCAkKE1BS0UpIC1mICQoc3JjdHJlZSkvTWFrZWZpbGUgb2xkY29uZmlnCisKK1BIT05Z
ICs9IGt2bWNvbmZpZwora3ZtY29uZmlnOiBrdm1fZ3Vlc3QuY29uZmlnCisJQDoKKworUEhPTlkg
Kz0geGVuY29uZmlnCit4ZW5jb25maWc6IHhlbi5jb25maWcKKwlAOgorCitQSE9OWSArPSB0aW55
Y29uZmlnCit0aW55Y29uZmlnOgorCSQoUSkkKE1BS0UpIC1mICQoc3JjdHJlZSkvTWFrZWZpbGUg
YWxsbm9jb25maWcgdGlueS5jb25maWcKKworIyBDSEVDSzogLW8gY2FjaGVfZGlyPTxwYXRoPiB3
b3JraW5nPworUEhPTlkgKz0gdGVzdGNvbmZpZwordGVzdGNvbmZpZzogJChvYmopL2NvbmYKKwkk
KFBZVEhPTjMpIC1CIC1tIHB5dGVzdCAkKHNyY3RyZWUpLyQoc3JjKS90ZXN0cyBcCisJLW8gY2Fj
aGVfZGlyPSQoYWJzcGF0aCAkKG9iaikvdGVzdHMvLmNhY2hlKSBcCisJJChpZiAkKGZpbmRzdHJp
bmcgMSwkKEtCVUlMRF9WRVJCT1NFKSksLS1jYXB0dXJlPW5vKQorY2xlYW4tZGlycyArPSB0ZXN0
cy8uY2FjaGUKKworIyBIZWxwIHRleHQgdXNlZCBieSBtYWtlIGhlbHAKK2hlbHA6CisJQGVjaG8g
ICcgIGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIGxpbmUtb3Jp
ZW50ZWQgcHJvZ3JhbScKKwlAZWNobyAgJyAgbmNvbmZpZyAgICAgICAgIC0gVXBkYXRlIGN1cnJl
bnQgY29uZmlnIHV0aWxpc2luZyBhIG5jdXJzZXMgbWVudSBiYXNlZCBwcm9ncmFtJworCUBlY2hv
ICAnICBtZW51Y29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbWVu
dSBiYXNlZCBwcm9ncmFtJworCUBlY2hvICAnICB4Y29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBj
b25maWcgdXRpbGlzaW5nIGEgUXQgYmFzZWQgZnJvbnQtZW5kJworCUBlY2hvICAnICBnY29uZmln
CSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgR1RLKyBiYXNlZCBmcm9udC1l
bmQnCisJQGVjaG8gICcgIG9sZGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxp
c2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMgYmFzZScKKwlAZWNobyAgJyAgbG9jYWxtb2Rjb25m
aWcgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIGRpc2FibGluZyBtb2R1bGVzIG5vdCBsb2FkZWQn
CisJQGVjaG8gICcgIGxvY2FseWVzY29uZmlnICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyBjb252
ZXJ0aW5nIGxvY2FsIG1vZHMgdG8gY29yZScKKwlAZWNobyAgJyAgZGVmY29uZmlnCSAgLSBOZXcg
Y29uZmlnIHdpdGggZGVmYXVsdCBmcm9tIEFSQ0ggc3VwcGxpZWQgZGVmY29uZmlnJworCUBlY2hv
ICAnICBzYXZlZGVmY29uZmlnICAgLSBTYXZlIGN1cnJlbnQgY29uZmlnIGFzIC4vZGVmY29uZmln
IChtaW5pbWFsIGNvbmZpZyknCisJQGVjaG8gICcgIGFsbG5vY29uZmlnCSAgLSBOZXcgY29uZmln
IHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG5vJworCUBlY2hvICAnICBhbGx5
ZXNjb25maWcJICAtIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFjY2VwdGVkIHdp
dGggeWVzJworCUBlY2hvICAnICBhbGxtb2Rjb25maWcJICAtIE5ldyBjb25maWcgc2VsZWN0aW5n
IG1vZHVsZXMgd2hlbiBwb3NzaWJsZScKKwlAZWNobyAgJyAgYWxsZGVmY29uZmlnICAgIC0gTmV3
IGNvbmZpZyB3aXRoIGFsbCBzeW1ib2xzIHNldCB0byBkZWZhdWx0JworCUBlY2hvICAnICByYW5k
Y29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dlciB0byBhbGwgb3B0aW9ucycK
KwlAZWNobyAgJyAgbGlzdG5ld2NvbmZpZyAgIC0gTGlzdCBuZXcgb3B0aW9ucycKKwlAZWNobyAg
JyAgb2xkZGVmY29uZmlnCSAgLSBTYW1lIGFzIG9sZGNvbmZpZyBidXQgc2V0cyBuZXcgc3ltYm9s
cyB0byB0aGVpcicKKwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSB3
aXRob3V0IHByb21wdGluZycKKwlAZWNobyAgJyAga3ZtY29uZmlnCSAgLSBFbmFibGUgYWRkaXRp
b25hbCBvcHRpb25zIGZvciBrdm0gZ3Vlc3Qga2VybmVsIHN1cHBvcnQnCisJQGVjaG8gICcgIHhl
bmNvbmZpZyAgICAgICAtIEVuYWJsZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIHhlbiBkb20wIGFu
ZCBndWVzdCBrZXJuZWwgc3VwcG9ydCcKKwlAZWNobyAgJyAgdGlueWNvbmZpZwkgIC0gQ29uZmln
dXJlIHRoZSB0aW5pZXN0IHBvc3NpYmxlIGtlcm5lbCcKKwlAZWNobyAgJyAgdGVzdGNvbmZpZwkg
IC0gUnVuIEtjb25maWcgdW5pdCB0ZXN0cyAocmVxdWlyZXMgcHl0aG9uMyBhbmQgcHl0ZXN0KScK
KworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KKyMgb2JqZWN0IGZpbGVzIHVzZWQgYnkgYWxsIGtjb25m
aWcgZmxhdm91cnMKK2NvbW1vbi1vYmpzCTo9IGNvbmZkYXRhLm8gZXhwci5vIGxleGVyLmxleC5v
IHBhcnNlci50YWIubyBwcmVwcm9jZXNzLm8gXAorCQkgICBzeW1ib2wubworCiskKG9iaikvbGV4
ZXIubGV4Lm86ICQob2JqKS9wYXJzZXIudGFiLmgKK0hPU1RDRkxBR1NfbGV4ZXIubGV4Lm8JOj0g
LUkgJChzcmN0cmVlKS8kKHNyYykKK0hPU1RDRkxBR1NfcGFyc2VyLnRhYi5vCTo9IC1JICQoc3Jj
dHJlZSkvJChzcmMpCisKKyMgY29uZjogVXNlZCBmb3IgZGVmY29uZmlnLCBvbGRjb25maWcgYW5k
IHJlbGF0ZWQgdGFyZ2V0cworaG9zdHByb2dzLXkJKz0gY29uZgorY29uZi1vYmpzCTo9IGNvbmYu
byAkKGNvbW1vbi1vYmpzKQorCisjIG5jb25mOiBVc2VkIGZvciB0aGUgbmNvbmZpZyB0YXJnZXQg
YmFzZWQgb24gbmN1cnNlcworaG9zdHByb2dzLXkJKz0gbmNvbmYKK25jb25mLW9ianMJOj0gbmNv
bmYubyBuY29uZi5ndWkubyAkKGNvbW1vbi1vYmpzKQorCitIT1NUTERMSUJTX25jb25mCT0gJChz
aGVsbCAuICQob2JqKS9uY29uZi1jZmcgJiYgZWNobyAkJGxpYnMpCitIT1NUQ0ZMQUdTX25jb25m
Lm8JPSAkKHNoZWxsIC4gJChvYmopL25jb25mLWNmZyAmJiBlY2hvICQkY2ZsYWdzKQorSE9TVENG
TEFHU19uY29uZi5ndWkubwk9ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2ZnICYmIGVjaG8gJCRj
ZmxhZ3MpCisKKyQob2JqKS9uY29uZi5vICQob2JqKS9uY29uZi5ndWkubzogJChvYmopL25jb25m
LWNmZworCisjIG1jb25mOiBVc2VkIGZvciB0aGUgbWVudWNvbmZpZyB0YXJnZXQgYmFzZWQgb24g
bHhkaWFsb2cKK2hvc3Rwcm9ncy15CSs9IG1jb25mCitseGRpYWxvZwk6PSBjaGVja2xpc3QubyBp
bnB1dGJveC5vIG1lbnVib3gubyB0ZXh0Ym94Lm8gdXRpbC5vIHllc25vLm8KK21jb25mLW9ianMJ
Oj0gbWNvbmYubyAkKGFkZHByZWZpeCBseGRpYWxvZy8sICQobHhkaWFsb2cpKSAkKGNvbW1vbi1v
YmpzKQorCitIT1NUTERMSUJTX21jb25mID0gJChzaGVsbCAuICQob2JqKS9tY29uZi1jZmcgJiYg
ZWNobyAkJGxpYnMpCiskKGZvcmVhY2ggZiwgbWNvbmYubyAkKGx4ZGlhbG9nKSwgXAorICAkKGV2
YWwgSE9TVENGTEFHU18kZiA9ICQkKHNoZWxsIC4gJChvYmopL21jb25mLWNmZyAmJiBlY2hvICQk
JCRjZmxhZ3MpKSkKKworJChvYmopL21jb25mLm86ICQob2JqKS9tY29uZi1jZmcKKyQoYWRkcHJl
Zml4ICQob2JqKS9seGRpYWxvZy8sICQobHhkaWFsb2cpKTogJChvYmopL21jb25mLWNmZworCisj
IHFjb25mOiBVc2VkIGZvciB0aGUgeGNvbmZpZyB0YXJnZXQgYmFzZWQgb24gUXQKK2hvc3Rwcm9n
cy15CSs9IHFjb25mCitxY29uZi1jeHhvYmpzCTo9IHFjb25mLm8KK3Fjb25mLW9ianMJOj0gaW1h
Z2VzLm8gJChjb21tb24tb2JqcykKKworSE9TVExETElCU19xY29uZgk9ICQoc2hlbGwgLiAkKG9i
aikvcWNvbmYtY2ZnICYmIGVjaG8gJCRsaWJzKQorSE9TVENYWEZMQUdTX3Fjb25mLm8JPSAkKHNo
ZWxsIC4gJChvYmopL3Fjb25mLWNmZyAmJiBlY2hvICQkY2ZsYWdzKQorCiskKG9iaikvcWNvbmYu
bzogJChvYmopL3Fjb25mLWNmZyAkKG9iaikvcWNvbmYubW9jCisKK3F1aWV0X2NtZF9tb2MgPSBN
T0MgICAgICRACisgICAgICBjbWRfbW9jID0gJChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcgJiYg
ZWNobyAkJG1vYykgLWkgJDwgLW8gJEAKKworJChvYmopLyUubW9jOiAkKHNyYykvJS5oICQob2Jq
KS9xY29uZi1jZmcKKwkkKGNhbGwgY21kLG1vYykKKworIyBnY29uZjogVXNlZCBmb3IgdGhlIGdj
b25maWcgdGFyZ2V0IGJhc2VkIG9uIEdUSysKK2hvc3Rwcm9ncy15CSs9IGdjb25mCitnY29uZi1v
YmpzCTo9IGdjb25mLm8gaW1hZ2VzLm8gJChjb21tb24tb2JqcykKKworSE9TVExETElCU19nY29u
ZiAgICA9ICQoc2hlbGwgLiAkKG9iaikvZ2NvbmYtY2ZnICYmIGVjaG8gJCRsaWJzKQorSE9TVENG
TEFHU19nY29uZi5vICA9ICQoc2hlbGwgLiAkKG9iaikvZ2NvbmYtY2ZnICYmIGVjaG8gJCRjZmxh
Z3MpCisKKyQob2JqKS9nY29uZi5vOiAkKG9iaikvZ2NvbmYtY2ZnCisKKyMgY2hlY2sgaWYgbmVj
ZXNzYXJ5IHBhY2thZ2VzIGFyZSBhdmFpbGFibGUsIGFuZCBjb25maWd1cmUgYnVpbGQgZmxhZ3MK
K2ZpbGVjaGtfY29uZl9jZmcgPSAkKENPTkZJR19TSEVMTCkgJDwKKworJChvYmopLyVjb25mLWNm
ZzogJChzcmMpLyVjb25mLWNmZy5zaCBGT1JDRQorCSQoY2FsbCBmaWxlY2hrLGNvbmZfY2ZnKQor
CitjbGVhbi1maWxlcyArPSAqY29uZi1jZmcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvY29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAuLmVmMzY3OGMyCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9jb25mLmMKQEAgLTAsMCArMSw3MDIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8
emlwcGVsQGxpbnV4LW02OGsub3JnPgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1
ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+Cisj
aW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8
c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKK3N0
YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIHZvaWQgY2hlY2tfY29u
ZihzdHJ1Y3QgbWVudSAqbWVudSk7CisKK2VudW0gaW5wdXRfbW9kZSB7CisJb2xkYXNrY29uZmln
LAorCXN5bmNjb25maWcsCisJb2xkY29uZmlnLAorCWFsbG5vY29uZmlnLAorCWFsbHllc2NvbmZp
ZywKKwlhbGxtb2Rjb25maWcsCisJYWxsZGVmY29uZmlnLAorCXJhbmRjb25maWcsCisJZGVmY29u
ZmlnLAorCXNhdmVkZWZjb25maWcsCisJbGlzdG5ld2NvbmZpZywKKwlvbGRkZWZjb25maWcsCit9
Oworc3RhdGljIGVudW0gaW5wdXRfbW9kZSBpbnB1dF9tb2RlID0gb2xkYXNrY29uZmlnOworCitz
dGF0aWMgaW50IGluZGVudCA9IDE7CitzdGF0aWMgaW50IHR0eV9zdGRpbzsKK3N0YXRpYyBpbnQg
c3luY19rY29uZmlnOworc3RhdGljIGludCBjb25mX2NudDsKK3N0YXRpYyBjaGFyIGxpbmVbUEFU
SF9NQVhdOworc3RhdGljIHN0cnVjdCBtZW51ICpyb290RW50cnk7CisKK3N0YXRpYyB2b2lkIHBy
aW50X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IGdzdHIgaGVscCA9IHN0cl9u
ZXcoKTsKKworCW1lbnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsKKworCXByaW50ZigiXG4l
c1xuIiwgc3RyX2dldCgmaGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsKK30KKworc3RhdGljIHZv
aWQgc3RyaXAoY2hhciAqc3RyKQoreworCWNoYXIgKnAgPSBzdHI7CisJaW50IGw7CisKKwl3aGls
ZSAoKGlzc3BhY2UoKnApKSkKKwkJcCsrOworCWwgPSBzdHJsZW4ocCk7CisJaWYgKHAgIT0gc3Ry
KQorCQltZW1tb3ZlKHN0ciwgcCwgbCArIDEpOworCWlmICghbCkKKwkJcmV0dXJuOworCXAgPSBz
dHIgKyBsIC0gMTsKKwl3aGlsZSAoKGlzc3BhY2UoKnApKSkKKwkJKnAtLSA9IDA7Cit9CisKKy8q
IEhlbHBlciBmdW5jdGlvbiB0byBmYWNpbGl0YXRlIGZnZXRzKCkgYnkgSmVhbiBTYWNyZW4uICov
CitzdGF0aWMgdm9pZCB4ZmdldHMoY2hhciAqc3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pCit7CisJ
aWYgKCFmZ2V0cyhzdHIsIHNpemUsIGluKSkKKwkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIGlu
IHJlYWRpbmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsKKworCWlmICghdHR5X3N0ZGlvKQorCQlwcmlu
dGYoIiVzIiwgc3RyKTsKK30KKworc3RhdGljIGludCBjb25mX2Fza3ZhbHVlKHN0cnVjdCBzeW1i
b2wgKnN5bSwgY29uc3QgY2hhciAqZGVmKQoreworCWVudW0gc3ltYm9sX3R5cGUgdHlwZSA9IHN5
bV9nZXRfdHlwZShzeW0pOworCisJaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkpCisJCXByaW50Zigi
KE5FVykgIik7CisKKwlsaW5lWzBdID0gJ1xuJzsKKwlsaW5lWzFdID0gMDsKKworCWlmICghc3lt
X2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCXByaW50ZigiJXNcbiIsIGRlZik7CisJCWxpbmVbMF0g
PSAnXG4nOworCQlsaW5lWzFdID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChpbnB1
dF9tb2RlKSB7CisJY2FzZSBvbGRjb25maWc6CisJY2FzZSBzeW5jY29uZmlnOgorCQlpZiAoc3lt
X2hhc192YWx1ZShzeW0pKSB7CisJCQlwcmludGYoIiVzXG4iLCBkZWYpOworCQkJcmV0dXJuIDA7
CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBvbGRhc2tjb25maWc6CisJCWZmbHVz
aChzdGRvdXQpOworCQl4ZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbik7CisJCXJldHVy
biAxOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2Ug
U19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQlwcmludGYoIiVzXG4iLCBk
ZWYpOworCQlyZXR1cm4gMTsKKwlkZWZhdWx0OgorCQk7CisJfQorCXByaW50ZigiJXMiLCBsaW5l
KTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAq
bWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJY29uc3QgY2hhciAq
ZGVmOworCisJd2hpbGUgKDEpIHsKKwkJcHJpbnRmKCIlKnMlcyAiLCBpbmRlbnQgLSAxLCAiIiwg
bWVudS0+cHJvbXB0LT50ZXh0KTsKKwkJcHJpbnRmKCIoJXMpICIsIHN5bS0+bmFtZSk7CisJCWRl
ZiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1fZ2V0X3N0cmluZ192YWx1
ZShzeW0pKQorCQkJcHJpbnRmKCJbJXNdICIsIGRlZik7CisJCWlmICghY29uZl9hc2t2YWx1ZShz
eW0sIGRlZikpCisJCQlyZXR1cm4gMDsKKwkJc3dpdGNoIChsaW5lWzBdKSB7CisJCWNhc2UgJ1xu
JzoKKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCS8qIHByaW50IGhlbHAgKi8KKwkJCWlmIChs
aW5lWzFdID09ICdcbicpIHsKKwkJCQlwcmludF9oZWxwKG1lbnUpOworCQkJCWRlZiA9IE5VTEw7
CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJ
CWxpbmVbc3RybGVuKGxpbmUpLTFdID0gMDsKKwkJCWRlZiA9IGxpbmU7CisJCX0KKwkJaWYgKGRl
ZiAmJiBzeW1fc2V0X3N0cmluZ192YWx1ZShzeW0sIGRlZikpCisJCQlyZXR1cm4gMDsKKwl9Cit9
CisKK3N0YXRpYyBpbnQgY29uZl9zeW0oc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5
bWJvbCAqc3ltID0gbWVudS0+c3ltOworCXRyaXN0YXRlIG9sZHZhbCwgbmV3dmFsOworCisJd2hp
bGUgKDEpIHsKKwkJcHJpbnRmKCIlKnMlcyAiLCBpbmRlbnQgLSAxLCAiIiwgbWVudS0+cHJvbXB0
LT50ZXh0KTsKKwkJaWYgKHN5bS0+bmFtZSkKKwkJCXByaW50ZigiKCVzKSAiLCBzeW0tPm5hbWUp
OworCQlwdXRjaGFyKCdbJyk7CisJCW9sZHZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3lt
KTsKKwkJc3dpdGNoIChvbGR2YWwpIHsKKwkJY2FzZSBubzoKKwkJCXB1dGNoYXIoJ04nKTsKKwkJ
CWJyZWFrOworCQljYXNlIG1vZDoKKwkJCXB1dGNoYXIoJ00nKTsKKwkJCWJyZWFrOworCQljYXNl
IHllczoKKwkJCXB1dGNoYXIoJ1knKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvbGR2YWwgIT0g
bm8gJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKSkKKwkJCXByaW50ZigiL24i
KTsKKwkJaWYgKG9sZHZhbCAhPSBtb2QgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0s
IG1vZCkpCisJCQlwcmludGYoIi9tIik7CisJCWlmIChvbGR2YWwgIT0geWVzICYmIHN5bV90cmlz
dGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5ZXMpKQorCQkJcHJpbnRmKCIveSIpOworCQlwcmludGYo
Ii8/XSAiKTsKKwkJaWYgKCFjb25mX2Fza3ZhbHVlKHN5bSwgc3ltX2dldF9zdHJpbmdfdmFsdWUo
c3ltKSkpCisJCQlyZXR1cm4gMDsKKwkJc3RyaXAobGluZSk7CisKKwkJc3dpdGNoIChsaW5lWzBd
KSB7CisJCWNhc2UgJ24nOgorCQljYXNlICdOJzoKKwkJCW5ld3ZhbCA9IG5vOworCQkJaWYgKCFs
aW5lWzFdIHx8ICFzdHJjbXAoJmxpbmVbMV0sICJvIikpCisJCQkJYnJlYWs7CisJCQljb250aW51
ZTsKKwkJY2FzZSAnbSc6CisJCWNhc2UgJ00nOgorCQkJbmV3dmFsID0gbW9kOworCQkJaWYgKCFs
aW5lWzFdKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCWNhc2UgJ3knOgorCQljYXNlICdZ
JzoKKwkJCW5ld3ZhbCA9IHllczsKKwkJCWlmICghbGluZVsxXSB8fCAhc3RyY21wKCZsaW5lWzFd
LCAiZXMiKSkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQljYXNlIDA6CisJCQluZXd2YWwg
PSBvbGR2YWw7CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQlnb3RvIGhlbHA7CisJCWRlZmF1
bHQ6CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0s
IG5ld3ZhbCkpCisJCQlyZXR1cm4gMDsKK2hlbHA6CisJCXByaW50X2hlbHAobWVudSk7CisJfQor
fQorCitzdGF0aWMgaW50IGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVj
dCBzeW1ib2wgKnN5bSwgKmRlZl9zeW07CisJc3RydWN0IG1lbnUgKmNoaWxkOworCWJvb2wgaXNf
bmV3OworCisJc3ltID0gbWVudS0+c3ltOworCWlzX25ldyA9ICFzeW1faGFzX3ZhbHVlKHN5bSk7
CisJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQljb25mX3N5bShtZW51KTsKKwkJc3lt
X2NhbGNfdmFsdWUoc3ltKTsKKwkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkp
IHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAxOworCQljYXNlIG1vZDoKKwkJCXJldHVybiAwOwor
CQljYXNlIHllczoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSkpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAxOworCQljYXNl
IG1vZDoKKwkJCXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBtZW51X2dldF9wcm9t
cHQobWVudSkpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgeWVzOgorCQkJYnJlYWs7CisJCX0KKwl9
CisKKwl3aGlsZSAoMSkgeworCQlpbnQgY250LCBkZWY7CisKKwkJcHJpbnRmKCIlKnMlc1xuIiwg
aW5kZW50IC0gMSwgIiIsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7CisJCWRlZl9zeW0gPSBzeW1f
Z2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQljbnQgPSBkZWYgPSAwOworCQlsaW5lWzBdID0gMDsK
KwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7
CisJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisJCQlpZiAo
IWNoaWxkLT5zeW0pIHsKKwkJCQlwcmludGYoIiUqYyAlc1xuIiwgaW5kZW50LCAnKicsIG1lbnVf
Z2V0X3Byb21wdChjaGlsZCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY250Kys7CisJCQlp
ZiAoY2hpbGQtPnN5bSA9PSBkZWZfc3ltKSB7CisJCQkJZGVmID0gY250OworCQkJCXByaW50Zigi
JSpjIiwgaW5kZW50LCAnPicpOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKCIlKmMiLCBpbmRlbnQs
ICcgJyk7CisJCQlwcmludGYoIiAlZC4gJXMiLCBjbnQsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkp
OworCQkJaWYgKGNoaWxkLT5zeW0tPm5hbWUpCisJCQkJcHJpbnRmKCIgKCVzKSIsIGNoaWxkLT5z
eW0tPm5hbWUpOworCQkJaWYgKCFzeW1faGFzX3ZhbHVlKGNoaWxkLT5zeW0pKQorCQkJCXByaW50
ZigiIChORVcpIik7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwkJcHJpbnRmKCIlKnNjaG9pY2Ui
LCBpbmRlbnQgLSAxLCAiIik7CisJCWlmIChjbnQgPT0gMSkgeworCQkJcHJpbnRmKCJbMV06IDFc
biIpOworCQkJZ290byBjb25mX2NoaWxkczsKKwkJfQorCQlwcmludGYoIlsxLSVkP106ICIsIGNu
dCk7CisJCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCQljYXNlIG9sZGNvbmZpZzoKKwkJY2FzZSBz
eW5jY29uZmlnOgorCQkJaWYgKCFpc19uZXcpIHsKKwkJCQljbnQgPSBkZWY7CisJCQkJcHJpbnRm
KCIlZFxuIiwgY250KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLwor
CQljYXNlIG9sZGFza2NvbmZpZzoKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJeGZnZXRzKGxpbmUs
IHNpemVvZihsaW5lKSwgc3RkaW4pOworCQkJc3RyaXAobGluZSk7CisJCQlpZiAobGluZVswXSA9
PSAnPycpIHsKKwkJCQlwcmludF9oZWxwKG1lbnUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJ
aWYgKCFsaW5lWzBdKQorCQkJCWNudCA9IGRlZjsKKwkJCWVsc2UgaWYgKGlzZGlnaXQobGluZVsw
XSkpCisJCQkJY250ID0gYXRvaShsaW5lKTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJCWJy
ZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCWNvbmZfY2hpbGRzOgorCQlmb3Ig
KGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWlm
ICghY2hpbGQtPnN5bSB8fCAhbWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwkJCQljb250aW51ZTsK
KwkJCWlmICghLS1jbnQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjaGlsZCkKKwkJCWNvbnRp
bnVlOworCQlpZiAobGluZVswXSAmJiBsaW5lW3N0cmxlbihsaW5lKSAtIDFdID09ICc/Jykgewor
CQkJcHJpbnRfaGVscChjaGlsZCk7CisJCQljb250aW51ZTsKKwkJfQorCQlzeW1fc2V0X2Nob2lj
ZV92YWx1ZShzeW0sIGNoaWxkLT5zeW0pOworCQlmb3IgKGNoaWxkID0gY2hpbGQtPmxpc3Q7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpbmRlbnQgKz0gMjsKKwkJCWNvbmYoY2hp
bGQpOworCQkJaW5kZW50IC09IDI7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMg
dm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlz
dHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCisJaWYgKCFtZW51
X2lzX3Zpc2libGUobWVudSkpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5bTsKKwlwcm9w
ID0gbWVudS0+cHJvbXB0OworCWlmIChwcm9wKSB7CisJCWNvbnN0IGNoYXIgKnByb21wdDsKKwor
CQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX01FTlU6CisJCQkvKgorCQkJICogRXhj
ZXB0IGluIG9sZGFza2NvbmZpZyBtb2RlLCB3ZSBzaG93IG9ubHkgbWVudXMgdGhhdAorCQkJICog
Y29udGFpbiBuZXcgc3ltYm9scy4KKwkJCSAqLworCQkJaWYgKGlucHV0X21vZGUgIT0gb2xkYXNr
Y29uZmlnICYmIHJvb3RFbnRyeSAhPSBtZW51KSB7CisJCQkJY2hlY2tfY29uZihtZW51KTsKKwkJ
CQlyZXR1cm47CisJCQl9CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBQX0NPTU1FTlQ6
CisJCQlwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJCQlpZiAocHJvbXB0KQorCQkJ
CXByaW50ZigiJSpjXG4lKmMgJXNcbiUqY1xuIiwKKwkJCQkJaW5kZW50LCAnKicsCisJCQkJCWlu
ZGVudCwgJyonLCBwcm9tcHQsCisJCQkJCWluZGVudCwgJyonKTsKKwkJZGVmYXVsdDoKKwkJCTsK
KwkJfQorCX0KKworCWlmICghc3ltKQorCQlnb3RvIGNvbmZfY2hpbGRzOworCisJaWYgKHN5bV9p
c19jaG9pY2Uoc3ltKSkgeworCQljb25mX2Nob2ljZShtZW51KTsKKwkJaWYgKHN5bS0+Y3Vyci50
cmkgIT0gbW9kKQorCQkJcmV0dXJuOworCQlnb3RvIGNvbmZfY2hpbGRzOworCX0KKworCXN3aXRj
aCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJ
Tkc6CisJCWNvbmZfc3RyaW5nKG1lbnUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb25mX3N5
bShtZW51KTsKKwkJYnJlYWs7CisJfQorCitjb25mX2NoaWxkczoKKwlpZiAoc3ltKQorCQlpbmRl
bnQgKz0gMjsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHQpCisJCWNvbmYoY2hpbGQpOworCWlmIChzeW0pCisJCWluZGVudCAtPSAyOworfQorCitz
dGF0aWMgdm9pZCBjaGVja19jb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1i
b2wgKnN5bTsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisKKwlpZiAoIW1lbnVfaXNfdmlzaWJsZSht
ZW51KSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCWlmIChzeW0gJiYgIXN5bV9o
YXNfdmFsdWUoc3ltKSkgeworCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pIHx8CisJCSAgICAo
c3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMp
KSB7CisJCQlpZiAoaW5wdXRfbW9kZSA9PSBsaXN0bmV3Y29uZmlnKSB7CisJCQkJaWYgKHN5bS0+
bmFtZSkgeworCQkJCQljb25zdCBjaGFyICpzdHI7CisKKwkJCQkJaWYgKHN5bS0+dHlwZSA9PSBT
X1NUUklORykgeworCQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJCQkJ
CXN0ciA9IHN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKHN0cik7CisJCQkJCQlwcmludGYoIiVzJXM9
JXNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSwgc3RyKTsKKwkJCQkJCWZyZWUoKHZvaWQgKilzdHIp
OworCQkJCQl9IGVsc2UgeworCQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsK
KwkJCQkJCXByaW50ZigiJXMlcz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQkJ
CQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoIWNvbmZfY250KyspCisJCQkJCXByaW50
ZigiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIik7CisJCQkJcm9vdEVudHJ5ID0gbWVudV9n
ZXRfcGFyZW50X21lbnUobWVudSk7CisJCQkJY29uZihyb290RW50cnkpOworCQkJfQorCQl9CisJ
fQorCisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
KQorCQljaGVja19jb25mKGNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19v
cHRzW10gPSB7CisJeyJvbGRhc2tjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwg
b2xkYXNrY29uZmlnfSwKKwl7Im9sZGNvbmZpZyIsICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBO
VUxMLCBvbGRjb25maWd9LAorCXsic3luY2NvbmZpZyIsICAgICAgbm9fYXJndW1lbnQsICAgICAg
IE5VTEwsIHN5bmNjb25maWd9LAorCXsiZGVmY29uZmlnIiwgICAgICAgb3B0aW9uYWxfYXJndW1l
bnQsIE5VTEwsIGRlZmNvbmZpZ30sCisJeyJzYXZlZGVmY29uZmlnIiwgICByZXF1aXJlZF9hcmd1
bWVudCwgTlVMTCwgc2F2ZWRlZmNvbmZpZ30sCisJeyJhbGxub2NvbmZpZyIsICAgICBub19hcmd1
bWVudCwgICAgICAgTlVMTCwgYWxsbm9jb25maWd9LAorCXsiYWxseWVzY29uZmlnIiwgICAgbm9f
YXJndW1lbnQsICAgICAgIE5VTEwsIGFsbHllc2NvbmZpZ30sCisJeyJhbGxtb2Rjb25maWciLCAg
ICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxsbW9kY29uZmlnfSwKKwl7ImFsbGRlZmNvbmZp
ZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxkZWZjb25maWd9LAorCXsicmFuZGNv
bmZpZyIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIHJhbmRjb25maWd9LAorCXsibGlz
dG5ld2NvbmZpZyIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGxpc3RuZXdjb25maWd9LAor
CXsib2xkZGVmY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGRlZmNvbmZp
Z30sCisJe05VTEwsIDAsIE5VTEwsIDB9Cit9OworCitzdGF0aWMgdm9pZCBjb25mX3VzYWdlKGNv
bnN0IGNoYXIgKnByb2duYW1lKQoreworCisJcHJpbnRmKCJVc2FnZTogJXMgWy1zXSBbb3B0aW9u
XSA8a2NvbmZpZy1maWxlPlxuIiwgcHJvZ25hbWUpOworCXByaW50ZigiW29wdGlvbl0gaXMgX29u
ZV8gb2YgdGhlIGZvbGxvd2luZzpcbiIpOworCXByaW50ZigiICAtLWxpc3RuZXdjb25maWcgICAg
ICAgICBMaXN0IG5ldyBvcHRpb25zXG4iKTsKKwlwcmludGYoIiAgLS1vbGRhc2tjb25maWcgICAg
ICAgICAgU3RhcnQgYSBuZXcgY29uZmlndXJhdGlvbiB1c2luZyBhIGxpbmUtb3JpZW50ZWQgcHJv
Z3JhbVxuIik7CisJcHJpbnRmKCIgIC0tb2xkY29uZmlnICAgICAgICAgICAgIFVwZGF0ZSBhIGNv
bmZpZ3VyYXRpb24gdXNpbmcgYSBwcm92aWRlZCAuY29uZmlnIGFzIGJhc2VcbiIpOworCXByaW50
ZigiICAtLXN5bmNjb25maWcgICAgICAgICAgICBTaW1pbGFyIHRvIG9sZGNvbmZpZyBidXQgZ2Vu
ZXJhdGVzIGNvbmZpZ3VyYXRpb24gaW5cbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5jbHVkZS97Z2VuZXJhdGVkLyxjb25maWcvfVxuIik7CisJcHJpbnRmKCIgIC0tb2xk
ZGVmY29uZmlnICAgICAgICAgIFNhbWUgYXMgb2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xz
IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVcbiIpOworCXByaW50ZigiICAtLWRlZmNvbmZpZyA8Zmls
ZT4gICAgICBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBkZWZpbmVkIGluIDxmaWxlPlxuIik7CisJ
cHJpbnRmKCIgIC0tc2F2ZWRlZmNvbmZpZyA8ZmlsZT4gIFNhdmUgdGhlIG1pbmltYWwgY3VycmVu
dCBjb25maWd1cmF0aW9uIHRvIDxmaWxlPlxuIik7CisJcHJpbnRmKCIgIC0tYWxsbm9jb25maWcg
ICAgICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGgg
bm9cbiIpOworCXByaW50ZigiICAtLWFsbHllc2NvbmZpZyAgICAgICAgICBOZXcgY29uZmlnIHdo
ZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIHllc1xuIik7CisJcHJpbnRmKCIgIC0t
YWxsbW9kY29uZmlnICAgICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFu
c3dlcmVkIHdpdGggbW9kXG4iKTsKKwlwcmludGYoIiAgLS1hbGxkZWZjb25maWcgICAgICAgICAg
TmV3IGNvbmZpZyB3aXRoIGFsbCBzeW1ib2xzIHNldCB0byBkZWZhdWx0XG4iKTsKKwlwcmludGYo
IiAgLS1yYW5kY29uZmlnICAgICAgICAgICAgTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIg
dG8gYWxsIG9wdGlvbnNcbiIpOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sK
Kwljb25zdCBjaGFyICpwcm9nbmFtZSA9IGF2WzBdOworCWludCBvcHQ7CisJY29uc3QgY2hhciAq
bmFtZSwgKmRlZmNvbmZpZ19maWxlID0gTlVMTCAvKiBnY2MgdW5pbml0ICovOworCWludCBub19j
b25mX3dyaXRlID0gMDsKKworCXR0eV9zdGRpbyA9IGlzYXR0eSgwKSAmJiBpc2F0dHkoMSk7CisK
Kwl3aGlsZSAoKG9wdCA9IGdldG9wdF9sb25nKGFjLCBhdiwgInMiLCBsb25nX29wdHMsIE5VTEwp
KSAhPSAtMSkgeworCQlpZiAob3B0ID09ICdzJykgeworCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxs
YmFjayhOVUxMKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlucHV0X21vZGUgPSAoZW51bSBpbnB1
dF9tb2RlKW9wdDsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSBzeW5jY29uZmlnOgorCQkJLyoK
KwkJCSAqIHN5bmNjb25maWcgaXMgaW52b2tlZCBkdXJpbmcgdGhlIGJ1aWxkIHN0YWdlLgorCQkJ
ICogU3VwcHJlc3MgZGlzdHJhY3RpbmcgImNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAuLi4iCisJ
CQkgKi8KKwkJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7CisJCQlzeW5jX2tjb25m
aWcgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgZGVmY29uZmlnOgorCQljYXNlIHNhdmVkZWZjb25m
aWc6CisJCQlkZWZjb25maWdfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlIHJhbmRj
b25maWc6CisJCXsKKwkJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJCXVuc2lnbmVkIGludCBzZWVk
OworCQkJY2hhciAqc2VlZF9lbnY7CisKKwkJCS8qCisJCQkgKiBVc2UgbWljcm9zZWNvbmRzIGRl
cml2ZWQgc2VlZCwKKwkJCSAqIGNvbXBlbnNhdGUgZm9yIHN5c3RlbXMgd2hlcmUgaXQgbWF5IGJl
IHplcm8KKwkJCSAqLworCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCQkJc2VlZCA9ICh1
bnNpZ25lZCBpbnQpKChub3cudHZfc2VjICsgMSkgKiAobm93LnR2X3VzZWMgKyAxKSk7CisKKwkJ
CXNlZWRfZW52ID0gZ2V0ZW52KCJLQ09ORklHX1NFRUQiKTsKKwkJCWlmKCBzZWVkX2VudiAmJiAq
c2VlZF9lbnYgKSB7CisJCQkJY2hhciAqZW5kcDsKKwkJCQlpbnQgdG1wID0gKGludClzdHJ0b2wo
c2VlZF9lbnYsICZlbmRwLCAwKTsKKwkJCQlpZiAoKmVuZHAgPT0gJ1wwJykgeworCQkJCQlzZWVk
ID0gdG1wOworCQkJCX0KKwkJCX0KKwkJCWZwcmludGYoIHN0ZGVyciwgIktDT05GSUdfU0VFRD0w
eCVYXG4iLCBzZWVkICk7CisJCQlzcmFuZChzZWVkKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2Ug
b2xkYXNrY29uZmlnOgorCQljYXNlIG9sZGNvbmZpZzoKKwkJY2FzZSBhbGxub2NvbmZpZzoKKwkJ
Y2FzZSBhbGx5ZXNjb25maWc6CisJCWNhc2UgYWxsbW9kY29uZmlnOgorCQljYXNlIGFsbGRlZmNv
bmZpZzoKKwkJY2FzZSBsaXN0bmV3Y29uZmlnOgorCQljYXNlIG9sZGRlZmNvbmZpZzoKKwkJCWJy
ZWFrOworCQljYXNlICc/JzoKKwkJCWNvbmZfdXNhZ2UocHJvZ25hbWUpOworCQkJZXhpdCgxKTsK
KwkJCWJyZWFrOworCQl9CisJfQorCWlmIChhYyA9PSBvcHRpbmQpIHsKKwkJZnByaW50ZihzdGRl
cnIsICIlczogS2NvbmZpZyBmaWxlIG1pc3NpbmdcbiIsIGF2WzBdKTsKKwkJY29uZl91c2FnZShw
cm9nbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCW5hbWUgPSBhdltvcHRpbmRdOworCWNvbmZfcGFy
c2UobmFtZSk7CisJLy96Y29uZmR1bXAoc3Rkb3V0KTsKKworCXN3aXRjaCAoaW5wdXRfbW9kZSkg
eworCWNhc2UgZGVmY29uZmlnOgorCQlpZiAoIWRlZmNvbmZpZ19maWxlKQorCQkJZGVmY29uZmln
X2ZpbGUgPSBjb25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKCk7CisJCWlmIChjb25mX3JlYWQoZGVm
Y29uZmlnX2ZpbGUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiKioqXG4iCisJCQkJICAi
KioqIENhbid0IGZpbmQgZGVmYXVsdCBjb25maWd1cmF0aW9uIFwiJXNcIiFcbiIKKwkJCQkgICIq
KipcbiIsCisJCQkJZGVmY29uZmlnX2ZpbGUpOworCQkJZXhpdCgxKTsKKwkJfQorCQlicmVhazsK
KwljYXNlIHNhdmVkZWZjb25maWc6CisJY2FzZSBzeW5jY29uZmlnOgorCWNhc2Ugb2xkYXNrY29u
ZmlnOgorCWNhc2Ugb2xkY29uZmlnOgorCWNhc2UgbGlzdG5ld2NvbmZpZzoKKwljYXNlIG9sZGRl
ZmNvbmZpZzoKKwkJY29uZl9yZWFkKE5VTEwpOworCQlicmVhazsKKwljYXNlIGFsbG5vY29uZmln
OgorCWNhc2UgYWxseWVzY29uZmlnOgorCWNhc2UgYWxsbW9kY29uZmlnOgorCWNhc2UgYWxsZGVm
Y29uZmlnOgorCWNhc2UgcmFuZGNvbmZpZzoKKwkJbmFtZSA9IGdldGVudigiS0NPTkZJR19BTExD
T05GSUciKTsKKwkJaWYgKCFuYW1lKQorCQkJYnJlYWs7CisJCWlmICgoc3RyY21wKG5hbWUsICIi
KSAhPSAwKSAmJiAoc3RyY21wKG5hbWUsICIxIikgIT0gMCkpIHsKKwkJCWlmIChjb25mX3JlYWRf
c2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIq
KiogQ2FuJ3QgcmVhZCBzZWVkIGNvbmZpZ3VyYXRpb24gXCIlc1wiIVxuIiwKKwkJCQkJbmFtZSk7
CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoaW5wdXRfbW9k
ZSkgeworCQljYXNlIGFsbG5vY29uZmlnOgluYW1lID0gImFsbG5vLmNvbmZpZyI7IGJyZWFrOwor
CQljYXNlIGFsbHllc2NvbmZpZzoJbmFtZSA9ICJhbGx5ZXMuY29uZmlnIjsgYnJlYWs7CisJCWNh
c2UgYWxsbW9kY29uZmlnOgluYW1lID0gImFsbG1vZC5jb25maWciOyBicmVhazsKKwkJY2FzZSBh
bGxkZWZjb25maWc6CW5hbWUgPSAiYWxsZGVmLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIHJhbmRj
b25maWc6CW5hbWUgPSAiYWxscmFuZG9tLmNvbmZpZyI7IGJyZWFrOworCQlkZWZhdWx0OiBicmVh
azsKKwkJfQorCQlpZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VSKSAmJgorCQkg
ICAgY29uZl9yZWFkX3NpbXBsZSgiYWxsLmNvbmZpZyIsIFNfREVGX1VTRVIpKSB7CisJCQlmcHJp
bnRmKHN0ZGVyciwKKwkJCQkiKioqIEtDT05GSUdfQUxMQ09ORklHIHNldCwgYnV0IG5vIFwiJXNc
IiBvciBcImFsbC5jb25maWdcIiBmaWxlIGZvdW5kXG4iLAorCQkJCW5hbWUpOworCQkJZXhpdCgx
KTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoc3luY19r
Y29uZmlnKSB7CisJCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfTk9TSUxFTlRVUERBVEUiKTsKKwkJ
aWYgKG5hbWUgJiYgKm5hbWUpIHsKKwkJCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpIHsKKwkJCQlm
cHJpbnRmKHN0ZGVyciwKKwkJCQkJIlxuKioqIFRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGV4
cGxpY2l0IHVwZGF0ZS5cblxuIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlub19jb25mX3dy
aXRlID0gMTsKKwkJfQorCX0KKworCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCWNhc2UgYWxsbm9j
b25maWc6CisJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfbm8pOworCQlicmVhazsKKwlj
YXNlIGFsbHllc2NvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl95ZXMpOwor
CQlicmVhazsKKwljYXNlIGFsbG1vZGNvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xz
KGRlZl9tb2QpOworCQlicmVhazsKKwljYXNlIGFsbGRlZmNvbmZpZzoKKwkJY29uZl9zZXRfYWxs
X25ld19zeW1ib2xzKGRlZl9kZWZhdWx0KTsKKwkJYnJlYWs7CisJY2FzZSByYW5kY29uZmlnOgor
CQkvKiBSZWFsbHkgbm90aGluZyB0byBkbyBpbiB0aGlzIGxvb3AgKi8KKwkJd2hpbGUgKGNvbmZf
c2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfcmFuZG9tKSkgOworCQlicmVhazsKKwljYXNlIGRlZmNv
bmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9kZWZhdWx0KTsKKwkJYnJlYWs7
CisJY2FzZSBzYXZlZGVmY29uZmlnOgorCQlicmVhazsKKwljYXNlIG9sZGFza2NvbmZpZzoKKwkJ
cm9vdEVudHJ5ID0gJnJvb3RtZW51OworCQljb25mKCZyb290bWVudSk7CisJCWlucHV0X21vZGUg
PSBvbGRjb25maWc7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugb2xkY29uZmlnOgorCWNh
c2UgbGlzdG5ld2NvbmZpZzoKKwljYXNlIHN5bmNjb25maWc6CisJCS8qIFVwZGF0ZSB1bnRpbCBh
IGxvb3AgY2F1c2VkIG5vIG1vcmUgY2hhbmdlcyAqLworCQlkbyB7CisJCQljb25mX2NudCA9IDA7
CisJCQljaGVja19jb25mKCZyb290bWVudSk7CisJCX0gd2hpbGUgKGNvbmZfY250KTsKKwkJYnJl
YWs7CisJY2FzZSBvbGRkZWZjb25maWc6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYg
KGlucHV0X21vZGUgPT0gc2F2ZWRlZmNvbmZpZykgeworCQlpZiAoY29uZl93cml0ZV9kZWZjb25m
aWcoZGVmY29uZmlnX2ZpbGUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIm4qKiogRXJyb3Igd2hp
bGUgc2F2aW5nIGRlZmNvbmZpZyB0bzogJXNcblxuIiwKKwkJCQlkZWZjb25maWdfZmlsZSk7CisJ
CQlyZXR1cm4gMTsKKwkJfQorCX0gZWxzZSBpZiAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmln
KSB7CisJCWlmICghbm9fY29uZl93cml0ZSAmJiBjb25mX3dyaXRlKE5VTEwpKSB7CisJCQlmcHJp
bnRmKHN0ZGVyciwgIlxuKioqIEVycm9yIGR1cmluZyB3cml0aW5nIG9mIHRoZSBjb25maWd1cmF0
aW9uLlxuXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQkvKgorCQkgKiBDcmVhdGUgYXV0by5j
b25mIGlmIGl0IGRvZXMgbm90IGV4aXN0LgorCQkgKiBUaGlzIHByZXZlbnRzIEdOVSBNYWtlIDQu
MSBvciBvbGRlciBmcm9tIGVtaXR0aW5nCisJCSAqICJpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY6
IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkiCisJCSAqIGluIHRoZSB0b3AtbGV2ZWwgTWFrZWZp
bGUKKwkJICoKKwkJICogc3luY2NvbmZpZyBhbHdheXMgY3JlYXRlcyBvciB1cGRhdGVzIGF1dG8u
Y29uZiBiZWNhdXNlIGl0IGlzCisJCSAqIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKwkJICovCisJ
CWlmIChjb25mX3dyaXRlX2F1dG9jb25mKHN5bmNfa2NvbmZpZykgJiYgc3luY19rY29uZmlnKSB7
CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiXG4qKiogRXJyb3IgZHVyaW5nIHN5bmMgb2YgdGhl
IGNvbmZpZ3VyYXRpb24uXG5cbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7
Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2NvbmZkYXRhLmMgYi9zdXBwb3J0
L2tjb25maWcubmV3L2NvbmZkYXRhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjYwMDYxNTRkCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25m
ZGF0YS5jCkBAIC0wLDAgKzEsMTM4MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGlu
dXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxr
Yy5oIgorCisvKiByZXR1cm4gdHJ1ZSBpZiAncGF0aCcgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2Ug
Ki8KK3N0YXRpYyBib29sIGlzX3ByZXNlbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qg
c3RhdCBzdDsKKworCXJldHVybiAhc3RhdChwYXRoLCAmc3QpOworfQorCisvKiByZXR1cm4gdHJ1
ZSBpZiAncGF0aCcgZXhpc3RzIGFuZCBpdCBpcyBhIGRpcmVjdG9yeSwgZmFsc2Ugb3RoZXJ3aXNl
ICovCitzdGF0aWMgYm9vbCBpc19kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3Rh
dCBzdDsKKworCWlmIChzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIFNf
SVNESVIoc3Quc3RfbW9kZSk7Cit9CisKKy8qIHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB0d28g
ZmlsZXMgYXJlIHRoZSBzYW1lLCBmYWxzZSBvdGhlcndpc2UgKi8KK3N0YXRpYyBib29sIGlzX3Nh
bWUoY29uc3QgY2hhciAqZmlsZTEsIGNvbnN0IGNoYXIgKmZpbGUyKQoreworCWludCBmZDEsIGZk
MjsKKwlzdHJ1Y3Qgc3RhdCBzdDEsIHN0MjsKKwl2b2lkICptYXAxLCAqbWFwMjsKKwlib29sIHJl
dCA9IGZhbHNlOworCisJZmQxID0gb3BlbihmaWxlMSwgT19SRE9OTFkpOworCWlmIChmZDEgPCAw
KQorCQlyZXR1cm4gcmV0OworCisJZmQyID0gb3BlbihmaWxlMiwgT19SRE9OTFkpOworCWlmIChm
ZDIgPCAwKQorCQlnb3RvIGNsb3NlMTsKKworCXJldCA9IGZzdGF0KGZkMSwgJnN0MSk7CisJaWYg
KHJldCkKKwkJZ290byBjbG9zZTI7CisJcmV0ID0gZnN0YXQoZmQyLCAmc3QyKTsKKwlpZiAocmV0
KQorCQlnb3RvIGNsb3NlMjsKKworCWlmIChzdDEuc3Rfc2l6ZSAhPSBzdDIuc3Rfc2l6ZSkKKwkJ
Z290byBjbG9zZTI7CisKKwltYXAxID0gbW1hcChOVUxMLCBzdDEuc3Rfc2l6ZSwgUFJPVF9SRUFE
LCBNQVBfUFJJVkFURSwgZmQxLCAwKTsKKwlpZiAobWFwMSA9PSBNQVBfRkFJTEVEKQorCQlnb3Rv
IGNsb3NlMjsKKworCW1hcDIgPSBtbWFwKE5VTEwsIHN0Mi5zdF9zaXplLCBQUk9UX1JFQUQsIE1B
UF9QUklWQVRFLCBmZDIsIDApOworCWlmIChtYXAyID09IE1BUF9GQUlMRUQpCisJCWdvdG8gY2xv
c2UyOworCisJaWYgKGJjbXAobWFwMSwgbWFwMiwgc3QxLnN0X3NpemUpKQorCQlnb3RvIGNsb3Nl
MjsKKworCXJldCA9IHRydWU7CitjbG9zZTI6CisJY2xvc2UoZmQyKTsKK2Nsb3NlMToKKwljbG9z
ZShmZDEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENyZWF0ZSB0aGUgcGFyZW50IGRp
cmVjdG9yeSBvZiB0aGUgZ2l2ZW4gcGF0aC4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgJ2luY2x1
ZGUvY29uZmlnL2F1dG8uY29uZicgaXMgZ2l2ZW4sIGNyZWF0ZSAnaW5jbHVkZS9jb25maWcnLgor
ICovCitzdGF0aWMgaW50IG1ha2VfcGFyZW50X2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCWNo
YXIgdG1wW1BBVEhfTUFYICsgMV07CisJY2hhciAqcDsKKworCXN0cm5jcHkodG1wLCBwYXRoLCBz
aXplb2YodG1wKSk7CisJdG1wW3NpemVvZih0bXApIC0gMV0gPSAwOworCisJLyogUmVtb3ZlIHRo
ZSBiYXNlIG5hbWUuIEp1c3QgcmV0dXJuIGlmIG5vdGhpbmcgaXMgbGVmdCAqLworCXAgPSBzdHJy
Y2hyKHRtcCwgJy8nKTsKKwlpZiAoIXApCisJCXJldHVybiAwOworCSoocCArIDEpID0gMDsKKwor
CS8qIEp1c3QgaW4gY2FzZSBpdCBpcyBhbiBhYnNvbHV0ZSBwYXRoICovCisJcCA9IHRtcDsKKwl3
aGlsZSAoKnAgPT0gJy8nKQorCQlwKys7CisKKwl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJy8nKSkp
IHsKKwkJKnAgPSAwOworCisJCS8qIHNraXAgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgKi8KKwkJ
aWYgKCFpc19kaXIodG1wKSAmJiBta2Rpcih0bXAsIDA3NTUpKQorCQkJcmV0dXJuIC0xOworCisJ
CSpwID0gJy8nOworCQl3aGlsZSAoKnAgPT0gJy8nKQorCQkJcCsrOworCX0KKworCXJldHVybiAw
OworfQorCitzdGF0aWMgY2hhciBkZXBmaWxlX3BhdGhbUEFUSF9NQVhdOworc3RhdGljIHNpemVf
dCBkZXBmaWxlX3ByZWZpeF9sZW47CisKKy8qIHRvdWNoIGRlcGZpbGUgZm9yIHN5bWJvbCAnbmFt
ZScgKi8KK3N0YXRpYyBpbnQgY29uZl90b3VjaF9kZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlp
bnQgZmQsIHJldDsKKwljb25zdCBjaGFyICpzOworCWNoYXIgKmQsIGM7CisKKwkvKiBjaGVjayBv
dmVyZmxvdzogcHJlZml4ICsgbmFtZSArICIuaCIgKyAnXDAnIG11c3QgZml0IGluIGJ1ZmZlci4g
Ki8KKwlpZiAoZGVwZmlsZV9wcmVmaXhfbGVuICsgc3RybGVuKG5hbWUpICsgMyA+IHNpemVvZihk
ZXBmaWxlX3BhdGgpKQorCQlyZXR1cm4gLTE7CisKKwlkID0gZGVwZmlsZV9wYXRoICsgZGVwZmls
ZV9wcmVmaXhfbGVuOworCXMgPSBuYW1lOworCisJd2hpbGUgKChjID0gKnMrKykpCisJCSpkKysg
PSAoYyA9PSAnXycpID8gJy8nIDogdG9sb3dlcihjKTsKKwlzdHJjcHkoZCwgIi5oIik7CisKKwkv
KiBBc3N1bWUgZGlyZWN0b3J5IHBhdGggYWxyZWFkeSBleGlzdHMuICovCisJZmQgPSBvcGVuKGRl
cGZpbGVfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJaWYgKGZk
ID09IC0xKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gLTE7CisKKwkJcmV0
ID0gbWFrZV9wYXJlbnRfZGlyKGRlcGZpbGVfcGF0aCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g
cmV0OworCisJCS8qIFRyeSBpdCBhZ2Fpbi4gKi8KKwkJZmQgPSBvcGVuKGRlcGZpbGVfcGF0aCwg
T19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJCWlmIChmZCA9PSAtMSkKKwkJ
CXJldHVybiAtMTsKKwl9CisJY2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBj
b25mX3ByaW50ZXIgeworCXZvaWQgKCpwcmludF9zeW1ib2wpKEZJTEUgKiwgc3RydWN0IHN5bWJv
bCAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisJdm9pZCAoKnByaW50X2NvbW1lbnQpKEZJTEUg
KiwgY29uc3QgY2hhciAqLCB2b2lkICopOworfTsKKworc3RhdGljIHZvaWQgY29uZl93YXJuaW5n
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50Ziwg
MSwgMikpKTsKKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4u
KQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIGNv
bnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7CitzdGF0aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dh
cm5pbmdzOworCitjb25zdCBjaGFyIGNvbmZfZGVmbmFtZVtdID0gImFyY2gvJChBUkNIKS9kZWZj
b25maWciOworCitzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10LCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwg
IiVzOiVkOndhcm5pbmc6ICIsIGNvbmZfZmlsZW5hbWUsIGNvbmZfbGluZW5vKTsKKwl2ZnByaW50
ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXAp
OworCWNvbmZfd2FybmluZ3MrKzsKK30KKworc3RhdGljIHZvaWQgY29uZl9kZWZhdWx0X21lc3Nh
Z2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykKK3sKKwlwcmludGYoIiNcbiMgIik7CisJcHJpbnRm
KCIlcyIsIHMpOworCXByaW50ZigiXG4jXG4iKTsKK30KKworc3RhdGljIHZvaWQgKCpjb25mX21l
c3NhZ2VfY2FsbGJhY2spKGNvbnN0IGNoYXIgKnMpID0KKwljb25mX2RlZmF1bHRfbWVzc2FnZV9j
YWxsYmFjazsKK3ZvaWQgY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayh2b2lkICgqZm4pKGNvbnN0
IGNoYXIgKnMpKQoreworCWNvbmZfbWVzc2FnZV9jYWxsYmFjayA9IGZuOworfQorCitzdGF0aWMg
dm9pZCBjb25mX21lc3NhZ2UoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsK
KwljaGFyIGJ1Zls0MDk2XTsKKworCWlmICghY29uZl9tZXNzYWdlX2NhbGxiYWNrKQorCQlyZXR1
cm47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKworCXZzbnByaW50ZihidWYsIHNpemVvZihidWYp
LCBmbXQsIGFwKTsKKwljb25mX21lc3NhZ2VfY2FsbGJhY2soYnVmKTsKKwl2YV9lbmQoYXApOwor
fQorCitjb25zdCBjaGFyICpjb25mX2dldF9jb25maWduYW1lKHZvaWQpCit7CisJY2hhciAqbmFt
ZSA9IGdldGVudigiS0NPTkZJR19DT05GSUciKTsKKworCXJldHVybiBuYW1lID8gbmFtZSA6ICIu
Y29uZmlnIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZ2V0X2F1dG9jb25maWdfbmFt
ZSh2b2lkKQoreworCWNoYXIgKm5hbWUgPSBnZXRlbnYoIktDT05GSUdfQVVUT0NPTkZJRyIpOwor
CisJcmV0dXJuIG5hbWUgPyBuYW1lIDogImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZiI7Cit9CisK
K2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBm
dWxsbmFtZVtQQVRIX01BWCsxXTsKKwljaGFyICplbnYsICpuYW1lOworCisJbmFtZSA9IGV4cGFu
ZF9zdHJpbmcoY29uZl9kZWZuYW1lKTsKKwllbnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJaWYgKGVu
dikgeworCQlzbnByaW50ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwgIiVzLyVzIiwgZW52
LCBuYW1lKTsKKwkJaWYgKGlzX3ByZXNlbnQoZnVsbG5hbWUpKQorCQkJcmV0dXJuIGZ1bGxuYW1l
OworCX0KKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGludCBjb25mX3NldF9zeW1fdmFsKHN0
cnVjdCBzeW1ib2wgKnN5bSwgaW50IGRlZiwgaW50IGRlZl9mbGFncywgY2hhciAqcCkKK3sKKwlj
aGFyICpwMjsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX1RSSVNUQVRFOgorCQlp
ZiAocFswXSA9PSAnbScpIHsKKwkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbW9kOworCQkJc3ltLT5m
bGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8K
KwljYXNlIFNfQk9PTEVBTjoKKwkJaWYgKHBbMF0gPT0gJ3knKSB7CisJCQlzeW0tPmRlZltkZWZd
LnRyaSA9IHllczsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQkJYnJlYWs7CisJCX0K
KwkJaWYgKHBbMF0gPT0gJ24nKSB7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQkJc3lt
LT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGVmICE9IFNfREVG
X0FVVE8pCisJCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVz
IiwKKwkJCQkgICAgIHAsIHN5bS0+bmFtZSk7CisJCXJldHVybiAxOworCWNhc2UgU19TVFJJTkc6
CisJCWlmICgqcCsrICE9ICciJykKKwkJCWJyZWFrOworCQlmb3IgKHAyID0gcDsgKHAyID0gc3Ry
cGJyayhwMiwgIlwiXFwiKSk7IHAyKyspIHsKKwkJCWlmICgqcDIgPT0gJyInKSB7CisJCQkJKnAy
ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1lbW1vdmUocDIsIHAyICsgMSwgc3RybGVuKHAy
KSk7CisJCX0KKwkJaWYgKCFwMikgeworCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQorCQkJCWNv
bmZfd2FybmluZygiaW52YWxpZCBzdHJpbmcgZm91bmQiKTsKKwkJCXJldHVybiAxOworCQl9CisJ
CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwkJaWYgKHN5
bV9zdHJpbmdfdmFsaWQoc3ltLCBwKSkgeworCQkJc3ltLT5kZWZbZGVmXS52YWwgPSB4c3RyZHVw
KHApOworCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVm
ICE9IFNfREVGX0FVVE8pCisJCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZh
bGlkIGZvciAlcyIsCisJCQkJCSAgICAgcCwgc3ltLT5uYW1lKTsKKwkJCXJldHVybiAxOworCQl9
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUg
TElORV9HUk9XVEggMTYKK3N0YXRpYyBpbnQgYWRkX2J5dGUoaW50IGMsIGNoYXIgKipsaW5lcHRy
LCBzaXplX3Qgc2xlbiwgc2l6ZV90ICpuKQoreworCWNoYXIgKm5saW5lOworCXNpemVfdCBuZXdf
c2l6ZSA9IHNsZW4gKyAxOworCWlmIChuZXdfc2l6ZSA+ICpuKSB7CisJCW5ld19zaXplICs9IExJ
TkVfR1JPV1RIIC0gMTsKKwkJbmV3X3NpemUgKj0gMjsKKwkJbmxpbmUgPSB4cmVhbGxvYygqbGlu
ZXB0ciwgbmV3X3NpemUpOworCQlpZiAoIW5saW5lKQorCQkJcmV0dXJuIC0xOworCisJCSpsaW5l
cHRyID0gbmxpbmU7CisJCSpuID0gbmV3X3NpemU7CisJfQorCisJKCpsaW5lcHRyKVtzbGVuXSA9
IGM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY29tcGF0X2dldGxpbmUoY2hh
ciAqKmxpbmVwdHIsIHNpemVfdCAqbiwgRklMRSAqc3RyZWFtKQoreworCWNoYXIgKmxpbmUgPSAq
bGluZXB0cjsKKwlzaXplX3Qgc2xlbiA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0
YyhzdHJlYW0pOworCisJCXN3aXRjaCAoYykgeworCQljYXNlICdcbic6CisJCQlpZiAoYWRkX2J5
dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkKKwkJCQlnb3RvIGVfb3V0OworCQkJc2xlbisrOwor
CQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgRU9GOgorCQkJaWYgKGFkZF9ieXRlKCdcMCcs
ICZsaW5lLCBzbGVuLCBuKSA8IDApCisJCQkJZ290byBlX291dDsKKwkJCSpsaW5lcHRyID0gbGlu
ZTsKKwkJCWlmIChzbGVuID09IDApCisJCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIHNsZW47CisJ
CWRlZmF1bHQ6CisJCQlpZiAoYWRkX2J5dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkKKwkJCQln
b3RvIGVfb3V0OworCQkJc2xlbisrOworCQl9CisJfQorCitlX291dDoKKwlsaW5lW3NsZW4tMV0g
PSAnXDAnOworCSpsaW5lcHRyID0gbGluZTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBjb25mX3Jl
YWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZWYpCit7CisJRklMRSAqaW4gPSBOVUxM
OworCWNoYXIgICAqbGluZSA9IE5VTEw7CisJc2l6ZV90ICBsaW5lX2FzaXplID0gMDsKKwljaGFy
ICpwLCAqcDI7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpLCBkZWZfZmxhZ3M7CisKKwlp
ZiAobmFtZSkgeworCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOworCX0gZWxzZSB7CisJCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsKKworCQluYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgpOworCQlp
biA9IHpjb25mX2ZvcGVuKG5hbWUpOworCQlpZiAoaW4pCisJCQlnb3RvIGxvYWQ7CisJCXN5bV9h
ZGRfY2hhbmdlX2NvdW50KDEpOworCQlpZiAoIXN5bV9kZWZjb25maWdfbGlzdCkKKwkJCXJldHVy
biAxOworCisJCWZvcl9hbGxfZGVmYXVsdHMoc3ltX2RlZmNvbmZpZ19saXN0LCBwcm9wKSB7CisJ
CQlpZiAoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcikgPT0gbm8gfHwKKwkJCSAg
ICBwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJCWNvbnRpbnVlOworCQkJc3ltX2Nh
bGNfdmFsdWUocHJvcC0+ZXhwci0+bGVmdC5zeW0pOworCQkJbmFtZSA9IHN5bV9nZXRfc3RyaW5n
X3ZhbHVlKHByb3AtPmV4cHItPmxlZnQuc3ltKTsKKwkJCWluID0gemNvbmZfZm9wZW4obmFtZSk7
CisJCQlpZiAoaW4pIHsKKwkJCQljb25mX21lc3NhZ2UoInVzaW5nIGRlZmF1bHRzIGZvdW5kIGlu
ICVzIiwKKwkJCQkJIG5hbWUpOworCQkJCWdvdG8gbG9hZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAo
IWluKQorCQlyZXR1cm4gMTsKKworbG9hZDoKKwljb25mX2ZpbGVuYW1lID0gbmFtZTsKKwljb25m
X2xpbmVubyA9IDA7CisJY29uZl93YXJuaW5ncyA9IDA7CisKKwlkZWZfZmxhZ3MgPSBTWU1CT0xf
REVGIDw8IGRlZjsKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bS0+ZmxhZ3MgfD0g
U1lNQk9MX0NIQU5HRUQ7CisJCXN5bS0+ZmxhZ3MgJj0gfihkZWZfZmxhZ3N8U1lNQk9MX1ZBTElE
KTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdz
OworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNfSU5UOgorCQljYXNlIFNfSEVYOgor
CQljYXNlIFNfU1RSSU5HOgorCQkJaWYgKHN5bS0+ZGVmW2RlZl0udmFsKQorCQkJCWZyZWUoc3lt
LT5kZWZbZGVmXS52YWwpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlz
eW0tPmRlZltkZWZdLnZhbCA9IE5VTEw7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQl9
CisJfQorCisJd2hpbGUgKGNvbXBhdF9nZXRsaW5lKCZsaW5lLCAmbGluZV9hc2l6ZSwgaW4pICE9
IC0xKSB7CisJCWNvbmZfbGluZW5vKys7CisJCXN5bSA9IE5VTEw7CisJCWlmIChsaW5lWzBdID09
ICcjJykgeworCQkJaWYgKG1lbWNtcChsaW5lICsgMiwgQ09ORklHXywgc3RybGVuKENPTkZJR18p
KSkKKwkJCQljb250aW51ZTsKKwkJCXAgPSBzdHJjaHIobGluZSArIDIgKyBzdHJsZW4oQ09ORklH
XyksICcgJyk7CisJCQlpZiAoIXApCisJCQkJY29udGludWU7CisJCQkqcCsrID0gMDsKKwkJCWlm
IChzdHJuY21wKHAsICJpcyBub3Qgc2V0IiwgMTApKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRl
ZiA9PSBTX0RFRl9VU0VSKSB7CisJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDIgKyBzdHJsZW4o
Q09ORklHXykpOworCQkJCWlmICghc3ltKSB7CisJCQkJCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEp
OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN5bSA9IHN5bV9sb29r
dXAobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksIDApOworCQkJCWlmIChzeW0tPnR5cGUgPT0g
U19VTktOT1dOKQorCQkJCQlzeW0tPnR5cGUgPSBTX0JPT0xFQU47CisJCQl9CisJCQlpZiAoc3lt
LT5mbGFncyAmIGRlZl9mbGFncykgeworCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6IHJlYXNz
aWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7CisJCQl9CisJCQlzd2l0Y2ggKHN5bS0+
dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3lt
LT5kZWZbZGVmXS50cmkgPSBubzsKKwkJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQl9IGVsc2UgaWYgKG1lbWNtcChsaW5l
LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsKKwkJCXAgPSBzdHJjaHIobGluZSAr
IHN0cmxlbihDT05GSUdfKSwgJz0nKTsKKwkJCWlmICghcCkKKwkJCQljb250aW51ZTsKKwkJCSpw
KysgPSAwOworCQkJcDIgPSBzdHJjaHIocCwgJ1xuJyk7CisJCQlpZiAocDIpIHsKKwkJCQkqcDIt
LSA9IDA7CisJCQkJaWYgKCpwMiA9PSAnXHInKQorCQkJCQkqcDIgPSAwOworCQkJfQorCisJCQlz
eW0gPSBzeW1fZmluZChsaW5lICsgc3RybGVuKENPTkZJR18pKTsKKwkJCWlmICghc3ltKSB7CisJ
CQkJaWYgKGRlZiA9PSBTX0RFRl9BVVRPKQorCQkJCQkvKgorCQkJCQkgKiBSZWFkaW5nIGZyb20g
aW5jbHVkZS9jb25maWcvYXV0by5jb25mCisJCQkJCSAqIElmIENPTkZJR19GT08gcHJldmlvdXNs
eSBleGlzdGVkIGluCisJCQkJCSAqIGF1dG8uY29uZiBidXQgaXQgaXMgbWlzc2luZyBub3csCisJ
CQkJCSAqIGluY2x1ZGUvY29uZmlnL2Zvby5oIG11c3QgYmUgdG91Y2hlZC4KKwkJCQkJICovCisJ
CQkJCWNvbmZfdG91Y2hfZGVwKGxpbmUgKyBzdHJsZW4oQ09ORklHXykpOworCQkJCWVsc2UKKwkJ
CQkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlm
IChzeW0tPmZsYWdzICYgZGVmX2ZsYWdzKSB7CisJCQkJY29uZl93YXJuaW5nKCJvdmVycmlkZTog
cmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWlmIChjb25m
X3NldF9zeW1fdmFsKHN5bSwgZGVmLCBkZWZfZmxhZ3MsIHApKQorCQkJCWNvbnRpbnVlOworCQl9
IGVsc2UgeworCQkJaWYgKGxpbmVbMF0gIT0gJ1xyJyAmJiBsaW5lWzBdICE9ICdcbicpCisJCQkJ
Y29uZl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGE6ICUuKnMiLAorCQkJCQkgICAgIChpbnQpc3Ry
Y3NwbihsaW5lLCAiXHJcbiIpLCBsaW5lKTsKKworCQkJY29udGludWU7CisJCX0KKworCQlpZiAo
c3ltICYmIHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJc3RydWN0IHN5bWJvbCAqY3Mg
PSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJCXN3aXRjaCAo
c3ltLT5kZWZbZGVmXS50cmkpIHsKKwkJCWNhc2Ugbm86CisJCQkJYnJlYWs7CisJCQljYXNlIG1v
ZDoKKwkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSA9PSB5ZXMpIHsKKwkJCQkJY29uZl93YXJuaW5n
KCIlcyBjcmVhdGVzIGluY29uc2lzdGVudCBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJ
CQljcy0+ZmxhZ3MgJj0gfmRlZl9mbGFnczsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIHll
czoKKwkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSAhPSBubykKKwkJCQkJY29uZl93YXJuaW5nKCJv
dmVycmlkZTogJXMgY2hhbmdlcyBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJCWNzLT5k
ZWZbZGVmXS52YWwgPSBzeW07CisJCQkJYnJlYWs7CisJCQl9CisJCQljcy0+ZGVmW2RlZl0udHJp
ID0gRVhQUl9PUihjcy0+ZGVmW2RlZl0udHJpLCBzeW0tPmRlZltkZWZdLnRyaSk7CisJCX0KKwl9
CisJZnJlZShsaW5lKTsKKwlmY2xvc2UoaW4pOworCXJldHVybiAwOworfQorCitpbnQgY29uZl9y
ZWFkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBjb25m
X3Vuc2F2ZWQgPSAwOworCWludCBpOworCisJc3ltX3NldF9jaGFuZ2VfY291bnQoMCk7CisKKwlp
ZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VSKSkgeworCQlzeW1fY2FsY192YWx1
ZShtb2R1bGVzX3N5bSk7CisJCXJldHVybiAxOworCX0KKworCXN5bV9jYWxjX3ZhbHVlKG1vZHVs
ZXNfc3ltKTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUo
c3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9O
T19XUklURSkpCisJCQljb250aW51ZTsKKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSAmJiAoc3lt
LT5mbGFncyAmIFNZTUJPTF9XUklURSkpIHsKKwkJCS8qIGNoZWNrIHRoYXQgY2FsY3VsYXRlZCB2
YWx1ZSBhZ3JlZXMgd2l0aCBzYXZlZCB2YWx1ZSAqLworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsK
KwkJCWNhc2UgU19CT09MRUFOOgorCQkJY2FzZSBTX1RSSVNUQVRFOgorCQkJCWlmIChzeW0tPmRl
ZltTX0RFRl9VU0VSXS50cmkgIT0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKQorCQkJCQli
cmVhazsKKwkJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCQkJY29udGludWU7CisJCQkJ
LyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCWlmICghc3RyY21wKHN5bS0+Y3Vy
ci52YWwsIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJy
ZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIShzeW0tPmZs
YWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCS8qIG5vIHByZXZpb3VzIHZhbHVlIGFuZCBub3Qgc2F2
ZWQgKi8KKwkJCWNvbnRpbnVlOworCQljb25mX3Vuc2F2ZWQrKzsKKwkJLyogbWF5YmUgcHJpbnQg
dmFsdWUgaW4gdmVyYm9zZSBtb2RlLi4uICovCisJfQorCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5
bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5
bSkpIHsKKwkJCS8qIFJlc2V0IHZhbHVlcyBvZiBnZW5lcmF0ZXMgdmFsdWVzLCBzbyB0aGV5J2xs
IGFwcGVhcgorCQkJICogYXMgbmV3LCBpZiB0aGV5IHNob3VsZCBiZWNvbWUgdmlzaWJsZSwgYnV0
IHRoYXQKKwkJCSAqIGRvZXNuJ3QgcXVpdGUgd29yayBpZiB0aGUgS2NvbmZpZyBhbmQgdGhlIHNh
dmVkCisJCQkgKiBjb25maWd1cmF0aW9uIGRpc2FncmVlLgorCQkJICovCisJCQlpZiAoc3ltLT52
aXNpYmxlID09IG5vICYmICFjb25mX3Vuc2F2ZWQpCisJCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9M
X0RFRl9VU0VSOworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCWNhc2UgU19TVFJJTkc6CisJ
CQljYXNlIFNfSU5UOgorCQkJY2FzZSBTX0hFWDoKKwkJCQkvKiBSZXNldCBhIHN0cmluZyB2YWx1
ZSBpZiBpdCdzIG91dCBvZiByYW5nZSAqLworCQkJCWlmIChzeW1fc3RyaW5nX3dpdGhpbl9yYW5n
ZShzeW0sIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCisJCQkJCWJyZWFrOworCQkJCXN5bS0+
ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUR8U1lNQk9MX0RFRl9VU0VSKTsKKwkJCQljb25mX3Vuc2F2
ZWQrKzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9
CisKKwlzeW1fYWRkX2NoYW5nZV9jb3VudChjb25mX3dhcm5pbmdzIHx8IGNvbmZfdW5zYXZlZCk7
CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEtjb25maWcgY29uZmlndXJhdGlvbiBwcmludGVy
CisgKgorICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSByZXN1bHRp
bmcgY29uZmlndXJhdGlvbiBhZnRlcgorICoga2NvbmZpZyBpbnZvY2F0aW9uIGFuZCBgZGVmY29u
ZmlnJyBmaWxlcy4gVW5zZXQgc3ltYm9sIG1pZ2h0IGJlIG9taXR0ZWQgYnkKKyAqIHBhc3Npbmcg
YSBub24tTlVMTCBhcmd1bWVudCB0byB0aGUgcHJpbnRlci4KKyAqCisgKi8KK3N0YXRpYyB2b2lk
CitrY29uZmlnX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25z
dCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwlj
YXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmICgqdmFsdWUgPT0gJ24nKSB7
CisJCQlib29sIHNraXBfdW5zZXQgPSAoYXJnICE9IE5VTEwpOworCisJCQlpZiAoIXNraXBfdW5z
ZXQpCisJCQkJZnByaW50ZihmcCwgIiMgJXMlcyBpcyBub3Qgc2V0XG4iLAorCQkJCSAgICBDT05G
SUdfLCBzeW0tPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CWJyZWFrOworCX0KKworCWZwcmludGYoZnAsICIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5h
bWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQKK2tjb25maWdfcHJpbnRfY29tbWVudChGSUxF
ICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBjaGFyICpwID0g
dmFsdWU7CisJc2l6ZV90IGw7CisKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcbiIp
OworCQlmcHJpbnRmKGZwLCAiIyIpOworCQlpZiAobCkgeworCQkJZnByaW50ZihmcCwgIiAiKTsK
KwkJCXhmd3JpdGUocCwgbCwgMSwgZnApOworCQkJcCArPSBsOworCQl9CisJCWZwcmludGYoZnAs
ICJcbiIpOworCQlpZiAoKnArKyA9PSAnXDAnKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMg
c3RydWN0IGNvbmZfcHJpbnRlciBrY29uZmlnX3ByaW50ZXJfY2IgPQoreworCS5wcmludF9zeW1i
b2wgPSBrY29uZmlnX3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJp
bnRfY29tbWVudCwKK307CisKKy8qCisgKiBIZWFkZXIgcHJpbnRlcgorICoKKyAqIFRoaXMgcHJp
bnRlciBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgYGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9j
b25mLmgnIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFkZXJfcHJpbnRfc3ltYm9sKEZJTEUg
KmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpCit7
CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklT
VEFURTogeworCQljb25zdCBjaGFyICpzdWZmaXggPSAiIjsKKworCQlzd2l0Y2ggKCp2YWx1ZSkg
eworCQljYXNlICduJzoKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN1ZmZpeCA9ICJfTU9E
VUxFIjsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJZnByaW50ZihmcCwg
IiNkZWZpbmUgJXMlcyVzIDFcbiIsCisJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBzdWZmaXgp
OworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNfSEVYOiB7CisJCWNvbnN0IGNoYXIgKnByZWZp
eCA9ICIiOworCisJCWlmICh2YWx1ZVswXSAhPSAnMCcgfHwgKHZhbHVlWzFdICE9ICd4JyAmJiB2
YWx1ZVsxXSAhPSAnWCcpKQorCQkJcHJlZml4ID0gIjB4IjsKKwkJZnByaW50ZihmcCwgIiNkZWZp
bmUgJXMlcyAlcyVzXG4iLAorCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBwcmVmaXgsIHZhbHVl
KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU19TVFJJTkc6CisJY2FzZSBTX0lOVDoKKwkJZnByaW50
ZihmcCwgIiNkZWZpbmUgJXMlcyAlc1xuIiwKKwkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgdmFs
dWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK30KKworc3RhdGljIHZv
aWQKK2hlYWRlcl9wcmludF9jb21tZW50KEZJTEUgKmZwLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9p
ZCAqYXJnKQoreworCWNvbnN0IGNoYXIgKnAgPSB2YWx1ZTsKKwlzaXplX3QgbDsKKworCWZwcmlu
dGYoZnAsICIvKlxuIik7CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXG4iKTsKKwkJ
ZnByaW50ZihmcCwgIiAqIik7CisJCWlmIChsKSB7CisJCQlmcHJpbnRmKGZwLCAiICIpOworCQkJ
eGZ3cml0ZShwLCBsLCAxLCBmcCk7CisJCQlwICs9IGw7CisJCX0KKwkJZnByaW50ZihmcCwgIlxu
Iik7CisJCWlmICgqcCsrID09ICdcMCcpCisJCQlicmVhazsKKwl9CisJZnByaW50ZihmcCwgIiAq
L1xuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGhlYWRlcl9wcmludGVyX2Ni
ID0KK3sKKwkucHJpbnRfc3ltYm9sID0gaGVhZGVyX3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29t
bWVudCA9IGhlYWRlcl9wcmludF9jb21tZW50LAorfTsKKworLyoKKyAqIFRyaXN0YXRlIHByaW50
ZXIKKyAqCisgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIGBpbmNs
dWRlL2NvbmZpZy90cmlzdGF0ZS5jb25mJyBmaWxlLgorICovCitzdGF0aWMgdm9pZAordHJpc3Rh
dGVfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIg
KnZhbHVlLCB2b2lkICphcmcpCit7CisKKwlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYg
KnZhbHVlICE9ICduJykKKwkJZnByaW50ZihmcCwgIiVzJXM9JWNcbiIsIENPTkZJR18sIHN5bS0+
bmFtZSwgKGNoYXIpdG91cHBlcigqdmFsdWUpKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25mX3By
aW50ZXIgdHJpc3RhdGVfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9IHRyaXN0YXRl
X3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJpbnRfY29tbWVudCwK
K307CisKK3N0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3lt
Ym9sICpzeW0sCisJCQkgICAgICBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpw
cmludGVyX2FyZykKK3sKKwljb25zdCBjaGFyICpzdHI7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19VTktOT1dOOgorCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCQlzdHIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlzdHIgPSBzeW1fZXNjYXBlX3N0cmluZ192YWx1
ZShzdHIpOworCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5bSwgc3RyLCBwcmludGVyX2Fy
Zyk7CisJCWZyZWUoKHZvaWQgKilzdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdHIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5
bSwgc3RyLCBwcmludGVyX2FyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorY29uZl93cml0ZV9o
ZWFkaW5nKEZJTEUgKmZwLCBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpwcmlu
dGVyX2FyZykKK3sKKwljaGFyIGJ1ZlsyNTZdOworCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwKKwkgICAgIlxuIgorCSAgICAiQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZTsgRE8gTk9U
IEVESVQuXG4iCisJICAgICIlc1xuIiwKKwkgICAgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKwor
CXByaW50ZXItPnByaW50X2NvbW1lbnQoZnAsIGJ1ZiwgcHJpbnRlcl9hcmcpOworfQorCisvKgor
ICogV3JpdGUgb3V0IGEgbWluaW1hbCBjb25maWcuCisgKiBBbGwgdmFsdWVzIHRoYXQgaGFzIGRl
ZmF1bHQgdmFsdWVzIGFyZSBza2lwcGVkIGFzIHRoaXMgaXMgcmVkdW5kYW50LgorICovCitpbnQg
Y29uZl93cml0ZV9kZWZjb25maWcoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN5
bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICptZW51OworCUZJTEUgKm91dDsKKworCW91dCA9IGZv
cGVuKGZpbGVuYW1lLCAidyIpOworCWlmICghb3V0KQorCQlyZXR1cm4gMTsKKworCXN5bV9jbGVh
cl9hbGxfdmFsaWQoKTsKKworCS8qIFRyYXZlcnNlIGFsbCBtZW51cyB0byBmaW5kIGFsbCByZWxl
dmFudCBzeW1ib2xzICovCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisKKwl3aGlsZSAobWVudSAh
PSBOVUxMKQorCXsKKwkJc3ltID0gbWVudS0+c3ltOworCQlpZiAoc3ltID09IE5VTEwpIHsKKwkJ
CWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQorCQkJCWdvdG8gbmV4dF9tZW51OworCQl9IGVs
c2UgaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJ
CQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCQlnb3RvIG5leHRfbWVudTsK
KwkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKKwkJCS8qIElmIHdlIGNhbm5vdCBjaGFu
Z2UgdGhlIHN5bWJvbCAtIHNraXAgKi8KKwkJCWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0pKQor
CQkJCWdvdG8gbmV4dF9tZW51OworCQkJLyogSWYgc3ltYm9sIGVxdWFscyB0byBkZWZhdWx0IHZh
bHVlIC0gc2tpcCAqLworCQkJaWYgKHN0cmNtcChzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLCBz
eW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN5bSkpID09IDApCisJCQkJZ290byBuZXh0X21lbnU7CisK
KwkJCS8qCisJCQkgKiBJZiBzeW1ib2wgaXMgYSBjaG9pY2UgdmFsdWUgYW5kIGVxdWFscyB0byB0
aGUKKwkJCSAqIGRlZmF1bHQgZm9yIGEgY2hvaWNlIC0gc2tpcC4KKwkJCSAqIEJ1dCBvbmx5IGlm
IHZhbHVlIGlzIGJvb2wgYW5kIGVxdWFsIHRvICJ5IiBhbmQKKwkJCSAqIGNob2ljZSBpcyBub3Qg
Im9wdGlvbmFsIi4KKwkJCSAqIChJZiBjaG9pY2UgaXMgIm9wdGlvbmFsIiB0aGVuIGFsbCB2YWx1
ZXMgY2FuIGJlICJuIikKKwkJCSAqLworCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkg
eworCQkJCXN0cnVjdCBzeW1ib2wgKmNzOworCQkJCXN0cnVjdCBzeW1ib2wgKmRzOworCisJCQkJ
Y3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJCQlkcyA9
IHN5bV9jaG9pY2VfZGVmYXVsdChjcyk7CisJCQkJaWYgKCFzeW1faXNfb3B0aW9uYWwoY3MpICYm
IHN5bSA9PSBkcykgeworCQkJCQlpZiAoKHN5bS0+dHlwZSA9PSBTX0JPT0xFQU4pICYmCisJCQkJ
CSAgICBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQorCQkJCQkJZ290byBuZXh0
X21lbnU7CisJCQkJfQorCQkJfQorCQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29u
ZmlnX3ByaW50ZXJfY2IsIE5VTEwpOworCQl9CituZXh0X21lbnU6CisJCWlmIChtZW51LT5saXN0
ICE9IE5VTEwpIHsKKwkJCW1lbnUgPSBtZW51LT5saXN0OworCQl9CisJCWVsc2UgaWYgKG1lbnUt
Pm5leHQgIT0gTlVMTCkgeworCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCX0gZWxzZSB7CisJCQl3
aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7CisJCQkJaWYgKG1lbnUtPm5leHQgIT0gTlVM
TCkgeworCQkJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisJfQorCWZjbG9zZShvdXQpOworCXJldHVybiAwOworfQorCitpbnQgY29uZl93cml0ZShj
b25zdCBjaGFyICpuYW1lKQoreworCUZJTEUgKm91dDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJ
c3RydWN0IG1lbnUgKm1lbnU7CisJY29uc3QgY2hhciAqc3RyOworCWNoYXIgdG1wbmFtZVtQQVRI
X01BWCArIDFdLCBvbGRuYW1lW1BBVEhfTUFYICsgMV07CisJY2hhciAqZW52OworCWJvb2wgbmVl
ZF9uZXdsaW5lID0gZmFsc2U7CisKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSBjb25mX2dldF9jb25m
aWduYW1lKCk7CisKKwlpZiAoISpuYW1lKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY29uZmlnIG5h
bWUgaXMgZW1wdHlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlzX2RpcihuYW1lKSkg
eworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJcyBhIGRpcmVjdG9yeVxuIiwgbmFtZSk7CisJCXJl
dHVybiAtMTsKKwl9CisKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQorCQlyZXR1cm4gLTE7
CisKKwllbnYgPSBnZXRlbnYoIktDT05GSUdfT1ZFUldSSVRFQ09ORklHIik7CisJaWYgKGVudiAm
JiAqZW52KSB7CisJCSp0bXBuYW1lID0gMDsKKwkJb3V0ID0gZm9wZW4obmFtZSwgInciKTsKKwl9
IGVsc2UgeworCQlzbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICIlcy4lZC50bXAi
LAorCQkJIG5hbWUsIChpbnQpZ2V0cGlkKCkpOworCQlvdXQgPSBmb3Blbih0bXBuYW1lLCAidyIp
OworCX0KKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0
LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKworCWlmICghY29uZl9nZXRfY2hhbmdlZCgp
KQorCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwltZW51ID0gcm9vdG1lbnUubGlzdDsKKwl3
aGlsZSAobWVudSkgeworCQlzeW0gPSBtZW51LT5zeW07CisJCWlmICghc3ltKSB7CisJCQlpZiAo
IW1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJCQlnb3RvIG5leHQ7CisJCQlzdHIgPSBtZW51X2dl
dF9wcm9tcHQobWVudSk7CisJCQlmcHJpbnRmKG91dCwgIlxuIgorCQkJCSAgICAgIiNcbiIKKwkJ
CQkgICAgICIjICVzXG4iCisJCQkJICAgICAiI1xuIiwgc3RyKTsKKwkJCW5lZWRfbmV3bGluZSA9
IGZhbHNlOworCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0UpKSB7CisJ
CQlzeW1fY2FsY192YWx1ZShzeW0pOworCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklU
RSkpCisJCQkJZ290byBuZXh0OworCQkJaWYgKG5lZWRfbmV3bGluZSkgeworCQkJCWZwcmludGYo
b3V0LCAiXG4iKTsKKwkJCQluZWVkX25ld2xpbmUgPSBmYWxzZTsKKwkJCX0KKwkJCXN5bS0+Zmxh
Z3MgJj0gflNZTUJPTF9XUklURTsKKwkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2Nv
bmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKwkJfQorCituZXh0OgorCQlpZiAobWVudS0+bGlzdCkg
eworCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobWVudS0+
bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUt
PnBhcmVudCkpIHsKKwkJCWlmICghbWVudS0+c3ltICYmIG1lbnVfaXNfdmlzaWJsZShtZW51KSAm
JgorCQkJICAgIG1lbnUgIT0gJnJvb3RtZW51KSB7CisJCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0
KG1lbnUpOworCQkJCWZwcmludGYob3V0LCAiIyBlbmQgb2YgJXNcbiIsIHN0cik7CisJCQkJbmVl
ZF9uZXdsaW5lID0gdHJ1ZTsKKwkJCX0KKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJbWVudSA9
IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZmNsb3NlKG91dCk7CisK
KwlpZiAoKnRtcG5hbWUpIHsKKwkJaWYgKGlzX3NhbWUobmFtZSwgdG1wbmFtZSkpIHsKKwkJCWNv
bmZfbWVzc2FnZSgiTm8gY2hhbmdlIHRvICVzIiwgbmFtZSk7CisJCQl1bmxpbmsodG1wbmFtZSk7
CisJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc25w
cmludGYob2xkbmFtZSwgc2l6ZW9mKG9sZG5hbWUpLCAiJXMub2xkIiwgbmFtZSk7CisJCXJlbmFt
ZShuYW1lLCBvbGRuYW1lKTsKKwkJaWYgKHJlbmFtZSh0bXBuYW1lLCBuYW1lKSkKKwkJCXJldHVy
biAxOworCX0KKworCWNvbmZfbWVzc2FnZSgiY29uZmlndXJhdGlvbiB3cml0dGVuIHRvICVzIiwg
bmFtZSk7CisKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKworCXJldHVybiAwOworfQorCisv
KiB3cml0ZSBhIGRlcGVuZGVuY3kgZmlsZSBhcyB1c2VkIGJ5IGtidWlsZCB0byB0cmFjayBkZXBl
bmRlbmNpZXMgKi8KK3N0YXRpYyBpbnQgY29uZl93cml0ZV9kZXAoY29uc3QgY2hhciAqbmFtZSkK
K3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlGSUxFICpvdXQ7CisKKwlvdXQgPSBmb3BlbigiLi5j
b25maWcudG1wIiwgInciKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisJZnByaW50ZihvdXQs
ICJkZXBzX2NvbmZpZyA6PSBcXFxuIik7CisJZm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBm
aWxlID0gZmlsZS0+bmV4dCkgeworCQlpZiAoZmlsZS0+bmV4dCkKKwkJCWZwcmludGYob3V0LCAi
XHQlcyBcXFxuIiwgZmlsZS0+bmFtZSk7CisJCWVsc2UKKwkJCWZwcmludGYob3V0LCAiXHQlc1xu
IiwgZmlsZS0+bmFtZSk7CisJfQorCWZwcmludGYob3V0LCAiXG4lczogXFxcbiIKKwkJICAgICAi
XHQkKGRlcHNfY29uZmlnKVxuXG4iLCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7CisKKwll
bnZfd3JpdGVfZGVwKG91dCwgY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCkpOworCisJZnByaW50
ZihvdXQsICJcbiQoZGVwc19jb25maWcpOiA7XG4iKTsKKwlmY2xvc2Uob3V0KTsKKworCWlmICht
YWtlX3BhcmVudF9kaXIobmFtZSkpCisJCXJldHVybiAxOworCXJlbmFtZSgiLi5jb25maWcudG1w
IiwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29uZl90b3VjaF9kZXBzKHZv
aWQpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50IHJl
cywgaTsKKworCXN0cmNweShkZXBmaWxlX3BhdGgsICJpbmNsdWRlL2NvbmZpZy8iKTsKKwlkZXBm
aWxlX3ByZWZpeF9sZW4gPSBzdHJsZW4oZGVwZmlsZV9wYXRoKTsKKworCW5hbWUgPSBjb25mX2dl
dF9hdXRvY29uZmlnX25hbWUoKTsKKwljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX0FVVE8p
OworCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBz
eW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9M
X05PX1dSSVRFKSB8fCAhc3ltLT5uYW1lKQorCQkJY29udGludWU7CisJCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX1dSSVRFKSB7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykg
eworCQkJCS8qCisJCQkJICogc3ltYm9sIGhhcyBvbGQgYW5kIG5ldyB2YWx1ZSwKKwkJCQkgKiBz
byBjb21wYXJlIHRoZW0uLi4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJ
CWNhc2UgU19CT09MRUFOOgorCQkJCWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRf
dHJpc3RhdGVfdmFsdWUoc3ltKSA9PQorCQkJCQkgICAgc3ltLT5kZWZbU19ERUZfQVVUT10udHJp
KQorCQkJCQkJY29udGludWU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU19TVFJJTkc6CisJCQkJ
Y2FzZSBTX0hFWDoKKwkJCQljYXNlIFNfSU5UOgorCQkJCQlpZiAoIXN0cmNtcChzeW1fZ2V0X3N0
cmluZ192YWx1ZShzeW0pLAorCQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnZhbCkpCisJ
CQkJCQljb250aW51ZTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZXJlIGlzIG5vIG9sZCB2YWx1
ZSwgb25seSAnbm8nICh1bnNldCkKKwkJCQkgKiBpcyBhbGxvd2VkIGFzIG5ldyB2YWx1ZS4KKwkJ
CQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJCWNhc2UgU19CT09MRUFOOgorCQkJ
CWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9
PSBubykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RF
Rl9BVVRPKSkKKwkJCS8qIFRoZXJlIGlzIG5laXRoZXIgYW4gb2xkIG5vciBhIG5ldyB2YWx1ZS4g
Ki8KKwkJCWNvbnRpbnVlOworCQkvKiBlbHNlCisJCSAqCVRoZXJlIGlzIGFuIG9sZCB2YWx1ZSwg
YnV0IG5vIG5ldyB2YWx1ZSAoJ25vJyAodW5zZXQpCisJCSAqCWlzbid0IHNhdmVkIGluIGF1dG8u
Y29uZiwgc28gdGhlIG9sZCB2YWx1ZSBpcyBhbHdheXMKKwkJICoJZGlmZmVyZW50IGZyb20gJ25v
JykuCisJCSAqLworCisJCXJlcyA9IGNvbmZfdG91Y2hfZGVwKHN5bS0+bmFtZSk7CisJCWlmIChy
ZXMpCisJCQlyZXR1cm4gcmVzOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY29uZl93cml0
ZV9hdXRvY29uZihpbnQgb3ZlcndyaXRlKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwljb25z
dCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmF1dG9jb25mX25hbWUgPSBjb25mX2dldF9hdXRv
Y29uZmlnX25hbWUoKTsKKwlGSUxFICpvdXQsICp0cmlzdGF0ZSwgKm91dF9oOworCWludCBpOwor
CisJaWYgKCFvdmVyd3JpdGUgJiYgaXNfcHJlc2VudChhdXRvY29uZl9uYW1lKSkKKwkJcmV0dXJu
IDA7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwljb25mX3dyaXRlX2RlcCgiaW5jbHVk
ZS9jb25maWcvYXV0by5jb25mLmNtZCIpOworCisJaWYgKGNvbmZfdG91Y2hfZGVwcygpKQorCQly
ZXR1cm4gMTsKKworCW91dCA9IGZvcGVuKCIudG1wY29uZmlnIiwgInciKTsKKwlpZiAoIW91dCkK
KwkJcmV0dXJuIDE7CisKKwl0cmlzdGF0ZSA9IGZvcGVuKCIudG1wY29uZmlnX3RyaXN0YXRlIiwg
InciKTsKKwlpZiAoIXRyaXN0YXRlKSB7CisJCWZjbG9zZShvdXQpOworCQlyZXR1cm4gMTsKKwl9
CisKKwlvdXRfaCA9IGZvcGVuKCIudG1wY29uZmlnLmgiLCAidyIpOworCWlmICghb3V0X2gpIHsK
KwkJZmNsb3NlKG91dCk7CisJCWZjbG9zZSh0cmlzdGF0ZSk7CisJCXJldHVybiAxOworCX0KKwor
CWNvbmZfd3JpdGVfaGVhZGluZyhvdXQsICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwpOworCisJ
Y29uZl93cml0ZV9oZWFkaW5nKHRyaXN0YXRlLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwgTlVMTCk7
CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0X2gsICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7
CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJ
CWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8ICFzeW0tPm5hbWUpCisJCQljb250
aW51ZTsKKworCQkvKiB3cml0ZSBzeW1ib2wgdG8gYXV0by5jb25mLCB0cmlzdGF0ZSBhbmQgaGVh
ZGVyIGZpbGVzICovCisJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZpZ19wcmlu
dGVyX2NiLCAodm9pZCAqKTEpOworCisJCWNvbmZfd3JpdGVfc3ltYm9sKHRyaXN0YXRlLCBzeW0s
ICZ0cmlzdGF0ZV9wcmludGVyX2NiLCAodm9pZCAqKTEpOworCisJCWNvbmZfd3JpdGVfc3ltYm9s
KG91dF9oLCBzeW0sICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7CisJfQorCWZjbG9zZShvdXQp
OworCWZjbG9zZSh0cmlzdGF0ZSk7CisJZmNsb3NlKG91dF9oKTsKKworCW5hbWUgPSBnZXRlbnYo
IktDT05GSUdfQVVUT0hFQURFUiIpOworCWlmICghbmFtZSkKKwkJbmFtZSA9ICJpbmNsdWRlL2dl
bmVyYXRlZC9hdXRvY29uZi5oIjsKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQorCQlyZXR1
cm4gMTsKKwlpZiAocmVuYW1lKCIudG1wY29uZmlnLmgiLCBuYW1lKSkKKwkJcmV0dXJuIDE7CisK
KwluYW1lID0gZ2V0ZW52KCJLQ09ORklHX1RSSVNUQVRFIik7CisJaWYgKCFuYW1lKQorCQluYW1l
ID0gImluY2x1ZGUvY29uZmlnL3RyaXN0YXRlLmNvbmYiOworCWlmIChtYWtlX3BhcmVudF9kaXIo
bmFtZSkpCisJCXJldHVybiAxOworCWlmIChyZW5hbWUoIi50bXBjb25maWdfdHJpc3RhdGUiLCBu
YW1lKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWFrZV9wYXJlbnRfZGlyKGF1dG9jb25mX25hbWUp
KQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzdGVwLCBrYnVp
bGQgaGFzIGEgZGVwZW5kZW5jeSBvbiBhdXRvLmNvbmYKKwkgKiBhbmQgdGhpcyBtYXJrcyB0aGUg
c3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBzdGVwcy4KKwkgKi8KKwlpZiAo
cmVuYW1lKCIudG1wY29uZmlnIiwgYXV0b2NvbmZfbmFtZSkpCisJCXJldHVybiAxOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ltX2NoYW5nZV9jb3VudDsKK3N0YXRpYyB2b2lkICgq
Y29uZl9jaGFuZ2VkX2NhbGxiYWNrKSh2b2lkKTsKKwordm9pZCBzeW1fc2V0X2NoYW5nZV9jb3Vu
dChpbnQgY291bnQpCit7CisJaW50IF9zeW1fY2hhbmdlX2NvdW50ID0gc3ltX2NoYW5nZV9jb3Vu
dDsKKwlzeW1fY2hhbmdlX2NvdW50ID0gY291bnQ7CisJaWYgKGNvbmZfY2hhbmdlZF9jYWxsYmFj
ayAmJgorCSAgICAoYm9vbClfc3ltX2NoYW5nZV9jb3VudCAhPSAoYm9vbCljb3VudCkKKwkJY29u
Zl9jaGFuZ2VkX2NhbGxiYWNrKCk7Cit9CisKK3ZvaWQgc3ltX2FkZF9jaGFuZ2VfY291bnQoaW50
IGNvdW50KQoreworCXN5bV9zZXRfY2hhbmdlX2NvdW50KGNvdW50ICsgc3ltX2NoYW5nZV9jb3Vu
dCk7Cit9CisKK2Jvb2wgY29uZl9nZXRfY2hhbmdlZCh2b2lkKQoreworCXJldHVybiBzeW1fY2hh
bmdlX2NvdW50OworfQorCit2b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZu
KSh2b2lkKSkKK3sKKwljb25mX2NoYW5nZWRfY2FsbGJhY2sgPSBmbjsKK30KKworc3RhdGljIGJv
b2wgcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoc3RydWN0IHN5bWJvbCAqY3N5bSkKK3sKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBleHByICpl
OworCWludCBjbnQsIGRlZjsKKworCS8qCisJICogSWYgY2hvaWNlIGlzIG1vZCB0aGVuIHdlIG1h
eSBoYXZlIG1vcmUgaXRlbXMgc2VsZWN0ZWQKKwkgKiBhbmQgaWYgbm8gdGhlbiBuby1vbmUuCisJ
ICogSW4gYm90aCBjYXNlcyBzdG9wLgorCSAqLworCWlmIChjc3ltLT5jdXJyLnRyaSAhPSB5ZXMp
CisJCXJldHVybiBmYWxzZTsKKworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNzeW0pOwor
CisJLyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8KKwljbnQgPSAwOworCWV4cHJf
bGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQorCQljbnQrKzsKKworCS8qCisJ
ICogZmluZCBhIHJhbmRvbSB2YWx1ZSBhbmQgc2V0IGl0IHRvIHllcywKKwkgKiBzZXQgdGhlIHJl
c3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9uZSBzZXQKKwkgKi8KKwlkZWYgPSAocmFuZCgpICUg
Y250KTsKKworCWNudCA9IDA7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBl
LCBzeW0pIHsKKwkJaWYgKGRlZiA9PSBjbnQrKykgeworCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0u
dHJpID0geWVzOworCQkJY3N5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsKKwkJfQorCQll
bHNlIHsKKwkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOworCQl9CisJCXN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2Fs
Y3VsYXRlZCAqLworCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfVkFMSUQ7CisJfQorCWNzeW0tPmZs
YWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2Fs
Y3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsKKworCXJldHVybiB0
cnVlOworfQorCit2b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpjc3lt
KQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3Ry
dWN0IGV4cHIgKmU7CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8q
CisJICogU2V0IGFsbCBub24tYXNzaW5nZWQgY2hvaWNlIHZhbHVlcyB0byBubworCSAqLworCWV4
cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmICghc3ltX2hh
c192YWx1ZShzeW0pKQorCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87CisJfQorCWNz
eW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFs
dWUgY2FsY3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEIHwgU1lNQk9M
X05FRURfU0VUX0NIT0lDRV9WQUxVRVMpOworfQorCitib29sIGNvbmZfc2V0X2FsbF9uZXdfc3lt
Ym9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpj
c3ltOworCWludCBpLCBjbnQsIHBieSwgcHR5LCBwdG07CS8qIHBieTogcHJvYmFiaWxpdHkgb2Yg
Ym9vbCAgICAgPSB5CisJCQkJCSAqIHB0eTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSB5CisJ
CQkJCSAqIHB0bTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSBtCisJCQkJCSAqLworCisJcGJ5
ID0gNTA7IHB0eSA9IHB0bSA9IDMzOyAvKiBjYW4ndCBnbyBhcyB0aGUgZGVmYXVsdCBpbiBzd2l0
Y2gtY2FzZQorCQkJCSAgICogYmVsb3csIG90aGVyd2lzZSBnY2Mgd2hpbmVzIGFib3V0CisJCQkJ
ICAgKiAtV21heWJlLXVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKSB7
CisJCWludCBuLCBwWzNdOworCQljaGFyICplbnYgPSBnZXRlbnYoIktDT05GSUdfUFJPQkFCSUxJ
VFkiKTsKKwkJbiA9IDA7CisJCXdoaWxlKCBlbnYgJiYgKmVudiApIHsKKwkJCWNoYXIgKmVuZHA7
CisJCQlpbnQgdG1wID0gc3RydG9sKCBlbnYsICZlbmRwLCAxMCApOworCQkJaWYoIHRtcCA+PSAw
ICYmIHRtcCA8PSAxMDAgKSB7CisJCQkJcFtuKytdID0gdG1wOworCQkJfSBlbHNlIHsKKwkJCQll
cnJubyA9IEVSQU5HRTsKKwkJCQlwZXJyb3IoICJLQ09ORklHX1BST0JBQklMSVRZIiApOworCQkJ
CWV4aXQoIDEgKTsKKwkJCX0KKwkJCWVudiA9ICgqZW5kcCA9PSAnOicpID8gZW5kcCsxIDogZW5k
cDsKKwkJCWlmKCBuID49MyApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzd2l0Y2goIG4g
KSB7CisJCWNhc2UgMToKKwkJCXBieSA9IHBbMF07IHB0bSA9IHBieS8yOyBwdHkgPSBwYnktcHRt
OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXB0eSA9IHBbMF07IHB0bSA9IHBbMV07IHBieSA9
IHB0eSArIHB0bTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYnkgPSBwWzBdOyBwdHkgPSBw
WzFdOyBwdG0gPSBwWzJdOworCQkJYnJlYWs7CisJCX0KKworCQlpZiggcHR5K3B0bSA+IDEwMCAp
IHsKKwkJCWVycm5vID0gRVJBTkdFOworCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIg
KTsKKwkJCWV4aXQoIDEgKTsKKwkJfQorCX0KKwlib29sIGhhc19jaGFuZ2VkID0gZmFsc2U7CisK
Kwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwg
KHN5bS0+ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoc3lt
X2dldF90eXBlKHN5bSkpIHsKKwkJY2FzZSBTX0JPT0xFQU46CisJCWNhc2UgU19UUklTVEFURToK
KwkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsKKwkJCXN3aXRjaCAobW9kZSkgeworCQkJY2FzZSBkZWZf
eWVzOgorCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgZGVmX21vZDoKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7CisJCQkJ
YnJlYWs7CisJCQljYXNlIGRlZl9ubzoKKwkJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9BTExO
T0NPTkZJR19ZKQorCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7CisJCQkJZWxz
ZQorCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlicmVhazsKKwkJCWNh
c2UgZGVmX3JhbmRvbToKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlj
bnQgPSByYW5kKCkgJSAxMDA7CisJCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJ
CQkJCWlmIChjbnQgPCBwdHkpCisJCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7
CisJCQkJCWVsc2UgaWYgKGNudCA8IChwdHkrcHRtKSkKKwkJCQkJCXN5bS0+ZGVmW1NfREVGX1VT
RVJdLnRyaSA9IG1vZDsKKwkJCQl9IGVsc2UgaWYgKGNudCA8IHBieSkKKwkJCQkJc3ltLT5kZWZb
U19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb250
aW51ZTsKKwkJCX0KKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9y
YW5kb20pKQorCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkJYnJlYWs7CisJ
CWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJfQorCisJc3ltX2NsZWFyX2FsbF92YWxpZCgp
OworCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJ
ICogSWYgY3Vyci50cmkgZXF1YWxzIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2ZXJhbAor
CSAqIGNob2ljZSBzeW1ib2xzIGluIG9uZSBibG9jay4KKwkgKiBJbiB0aGlzIGNhc2Ugd2UgZG8g
bm90aGluZy4KKwkgKiBJZiBjdXJyLnRyaSBlcXVhbHMgeWVzIHRoZW4gb25seSBvbmUgc3ltYm9s
IGNhbiBiZQorCSAqIHNlbGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQgaXQgdG8g
eWVzLAorCSAqIGFuZCB0aGUgcmVzdCB0byBuby4KKwkgKi8KKwlpZiAobW9kZSAhPSBkZWZfcmFu
ZG9tKSB7CisJCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7CisJCQlpZiAoKHN5bV9pc19jaG9p
Y2UoY3N5bSkgJiYgIXN5bV9oYXNfdmFsdWUoY3N5bSkpIHx8CisJCQkgICAgc3ltX2lzX2Nob2lj
ZV92YWx1ZShjc3ltKSkKKwkJCQljc3ltLT5mbGFncyB8PSBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNF
X1ZBTFVFUzsKKwkJfQorCX0KKworCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7CisJCWlmIChz
eW1faGFzX3ZhbHVlKGNzeW0pIHx8ICFzeW1faXNfY2hvaWNlKGNzeW0pKQorCQkJY29udGludWU7
CisKKwkJc3ltX2NhbGNfdmFsdWUoY3N5bSk7CisJCWlmIChtb2RlID09IGRlZl9yYW5kb20pCisJ
CQloYXNfY2hhbmdlZCA9IHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKGNzeW0pOworCQllbHNlIHsK
KwkJCXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhjc3ltKTsKKwkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsK
KwkJfQorCX0KKworCXJldHVybiBoYXNfY2hhbmdlZDsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZXhwci5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjc3ZmZmZjNhCi0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmMKQEAgLTAsMCArMSwxMjk3IEBACisvLyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21h
biBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUu
aD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk
bGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmlu
ZSBERUJVR19FWFBSCTAKKworc3RhdGljIGludCBleHByX2VxKHN0cnVjdCBleHByICplMSwgc3Ry
dWN0IGV4cHIgKmUyKTsKK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfeW4oc3Ry
dWN0IGV4cHIgKmUpOworCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19zeW1ib2woc3RydWN0IHN5
bWJvbCAqc3ltKQoreworCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsK
KwllLT50eXBlID0gRV9TWU1CT0w7CisJZS0+bGVmdC5zeW0gPSBzeW07CisJcmV0dXJuIGU7Cit9
CisKK3N0cnVjdCBleHByICpleHByX2FsbG9jX29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1
Y3QgZXhwciAqY2UpCit7CisJc3RydWN0IGV4cHIgKmUgPSB4Y2FsbG9jKDEsIHNpemVvZigqZSkp
OworCWUtPnR5cGUgPSB0eXBlOworCWUtPmxlZnQuZXhwciA9IGNlOworCXJldHVybiBlOworfQor
CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY190d28oZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJc3RydWN0IGV4cHIgKmUgPSB4Y2FsbG9j
KDEsIHNpemVvZigqZSkpOworCWUtPnR5cGUgPSB0eXBlOworCWUtPmxlZnQuZXhwciA9IGUxOwor
CWUtPnJpZ2h0LmV4cHIgPSBlMjsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJf
YWxsb2NfY29tcChlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzMSwgc3RydWN0
IHN5bWJvbCAqczIpCit7CisJc3RydWN0IGV4cHIgKmUgPSB4Y2FsbG9jKDEsIHNpemVvZigqZSkp
OworCWUtPnR5cGUgPSB0eXBlOworCWUtPmxlZnQuc3ltID0gczE7CisJZS0+cmlnaHQuc3ltID0g
czI7CisJcmV0dXJuIGU7Cit9CisKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2FuZChzdHJ1Y3Qg
ZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKK3sKKwlpZiAoIWUxKQorCQlyZXR1cm4gZTI7CisJ
cmV0dXJuIGUyID8gZXhwcl9hbGxvY190d28oRV9BTkQsIGUxLCBlMikgOiBlMTsKK30KKworc3Ry
dWN0IGV4cHIgKmV4cHJfYWxsb2Nfb3Ioc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIp
Cit7CisJaWYgKCFlMSkKKwkJcmV0dXJuIGUyOworCXJldHVybiBlMiA/IGV4cHJfYWxsb2NfdHdv
KEVfT1IsIGUxLCBlMikgOiBlMTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfY29weShjb25zdCBz
dHJ1Y3QgZXhwciAqb3JnKQoreworCXN0cnVjdCBleHByICplOworCisJaWYgKCFvcmcpCisJCXJl
dHVybiBOVUxMOworCisJZSA9IHhtYWxsb2Moc2l6ZW9mKCpvcmcpKTsKKwltZW1jcHkoZSwgb3Jn
LCBzaXplb2YoKm9yZykpOworCXN3aXRjaCAob3JnLT50eXBlKSB7CisJY2FzZSBFX1NZTUJPTDoK
KwkJZS0+bGVmdCA9IG9yZy0+bGVmdDsKKwkJYnJlYWs7CisJY2FzZSBFX05PVDoKKwkJZS0+bGVm
dC5leHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsKKwkJYnJlYWs7CisJY2FzZSBFX0VR
VUFMOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0dUSDoKKwljYXNlIEVfTEVROgorCWNhc2UgRV9M
VEg6CisJY2FzZSBFX1VORVFVQUw6CisJCWUtPmxlZnQuc3ltID0gb3JnLT5sZWZ0LnN5bTsKKwkJ
ZS0+cmlnaHQuc3ltID0gb3JnLT5yaWdodC5zeW07CisJCWJyZWFrOworCWNhc2UgRV9BTkQ6CisJ
Y2FzZSBFX09SOgorCWNhc2UgRV9MSVNUOgorCQllLT5sZWZ0LmV4cHIgPSBleHByX2NvcHkob3Jn
LT5sZWZ0LmV4cHIpOworCQllLT5yaWdodC5leHByID0gZXhwcl9jb3B5KG9yZy0+cmlnaHQuZXhw
cik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoc3RkZXJyLCAiY2FuJ3QgY29weSB0
eXBlICVkXG4iLCBlLT50eXBlKTsKKwkJZnJlZShlKTsKKwkJZSA9IE5VTEw7CisJCWJyZWFrOwor
CX0KKworCXJldHVybiBlOworfQorCit2b2lkIGV4cHJfZnJlZShzdHJ1Y3QgZXhwciAqZSkKK3sK
KwlpZiAoIWUpCisJCXJldHVybjsKKworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9TWU1C
T0w6CisJCWJyZWFrOworCWNhc2UgRV9OT1Q6CisJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOwor
CQlicmVhazsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgorCWNh
c2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJYnJlYWs7CisJY2Fz
ZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQlleHBy
X2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwcmludGYoc3Rk
ZXJyLCAiaG93IHRvIGZyZWUgdHlwZSAlZD9cbiIsIGUtPnR5cGUpOworCQlicmVhazsKKwl9CisJ
ZnJlZShlKTsKK30KKworc3RhdGljIGludCB0cmFuc19jb3VudDsKKworI2RlZmluZSBlMSAoKmVw
MSkKKyNkZWZpbmUgZTIgKCplcDIpCisKKy8qCisgKiBleHByX2VsaW1pbmF0ZV9lcSgpIGhlbHBl
ci4KKyAqCisgKiBXYWxrcyB0aGUgdHdvIGV4cHJlc3Npb24gdHJlZXMgZ2l2ZW4gaW4gJ2VwMScg
YW5kICdlcDInLiBBbnkgbm9kZSB0aGF0IGRvZXMKKyAqIG5vdCBoYXZlIHR5cGUgJ3R5cGUnIChF
X09SL0VfQU5EKSBpcyBjb25zaWRlcmVkIGEgbGVhZiwgYW5kIGlzIGNvbXBhcmVkCisgKiBhZ2Fp
bnN0IGFsbCBvdGhlciBsZWF2ZXMuIFR3byBlcXVhbCBsZWF2ZXMgYXJlIGJvdGggcmVwbGFjZWQg
d2l0aCBlaXRoZXIgJ3knCisgKiBvciAnbicgYXMgYXBwcm9wcmlhdGUgZm9yICd0eXBlJywgdG8g
YmUgZWxpbWluYXRlZCBsYXRlci4KKyAqLworc3RhdGljIHZvaWQgX19leHByX2VsaW1pbmF0ZV9l
cShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKipl
cDIpCit7CisJLyogUmVjdXJzZSBkb3duIHRvIGxlYXZlcyAqLworCisJaWYgKGUxLT50eXBlID09
IHR5cGUpIHsKKwkJX19leHByX2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUy
KTsKKwkJX19leHByX2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEtPnJpZ2h0LmV4cHIsICZlMik7CisJ
CXJldHVybjsKKwl9CisJaWYgKGUyLT50eXBlID09IHR5cGUpIHsKKwkJX19leHByX2VsaW1pbmF0
ZV9lcSh0eXBlLCAmZTEsICZlMi0+bGVmdC5leHByKTsKKwkJX19leHByX2VsaW1pbmF0ZV9lcSh0
eXBlLCAmZTEsICZlMi0+cmlnaHQuZXhwcik7CisJCXJldHVybjsKKwl9CisKKwkvKiBlMSBhbmQg
ZTIgYXJlIGxlYXZlcy4gQ29tcGFyZSB0aGVtLiAqLworCisJaWYgKGUxLT50eXBlID09IEVfU1lN
Qk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MICYmCisJICAgIGUxLT5sZWZ0LnN5bSA9PSBlMi0+
bGVmdC5zeW0gJiYKKwkgICAgKGUxLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcyB8fCBlMS0+bGVm
dC5zeW0gPT0gJnN5bWJvbF9ubykpCisJCXJldHVybjsKKwlpZiAoIWV4cHJfZXEoZTEsIGUyKSkK
KwkJcmV0dXJuOworCisJLyogZTEgYW5kIGUyIGFyZSBlcXVhbCBsZWF2ZXMuIFByZXBhcmUgdGhl
bSBmb3IgZWxpbWluYXRpb24uICovCisKKwl0cmFuc19jb3VudCsrOworCWV4cHJfZnJlZShlMSk7
IGV4cHJfZnJlZShlMik7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBFX09SOgorCQllMSA9IGV4
cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQllMiA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZz
eW1ib2xfbm8pOworCQlicmVhazsKKwljYXNlIEVfQU5EOgorCQllMSA9IGV4cHJfYWxsb2Nfc3lt
Ym9sKCZzeW1ib2xfeWVzKTsKKwkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9Cit9CisKKy8qCisgKiBSZXdyaXRlcyB0aGUg
ZXhwcmVzc2lvbnMgJ2VwMScgYW5kICdlcDInIHRvIHJlbW92ZSBvcGVyYW5kcyBjb21tb24gdG8g
Ym90aC4KKyAqIEV4YW1wbGUgcmVkdWN0aW9uczoKKyAqCisgKgllcDE6IEEgJiYgQiAgICAgICAg
ICAgLT4gIGVwMTogeQorICoJZXAyOiBBICYmIEIgJiYgQyAgICAgIC0+ICBlcDI6IEMKKyAqCisg
KgllcDE6IEEgfHwgQiAgICAgICAgICAgLT4gIGVwMTogbgorICoJZXAyOiBBIHx8IEIgfHwgQyAg
ICAgIC0+ICBlcDI6IEMKKyAqCisgKgllcDE6IEEgJiYgKEIgJiYgRk9PKSAgLT4gIGVwMTogRk9P
CisgKgllcDI6IChCQVIgJiYgQikgJiYgQSAgLT4gIGVwMjogQkFSCisgKgorICoJZXAxOiBBICYm
IChCIHx8IEMpICAgIC0+ICBlcDE6IHkKKyAqCWVwMjogKEMgfHwgQikgJiYgQSAgICAtPiAgZXAy
OiB5CisgKgorICogQ29tcGFyaXNvbnMgYXJlIGRvbmUgYmV0d2VlbiBhbGwgb3BlcmFuZHMgYXQg
dGhlIHNhbWUgImxldmVsIiBvZiAmJiBvciB8fC4KKyAqIEZvciBleGFtcGxlLCBpbiB0aGUgZXhw
cmVzc2lvbiAnZTEgJiYgKGUyIHx8IGUzKSAmJiAoZTQgfHwgZTUpJywgdGhlCisgKiBmb2xsb3dp
bmcgb3BlcmFuZHMgd2lsbCBiZSBjb21wYXJlZDoKKyAqCisgKgktICdlMScsICdlMiB8fCBlMycs
IGFuZCAnZTQgfHwgZTUnLCBhZ2FpbnN0IGVhY2ggb3RoZXIKKyAqCS0gZTIgYWdhaW5zdCBlMwor
ICoJLSBlNCBhZ2FpbnN0IGU1CisgKgorICogUGFyZW50aGVzZXMgYXJlIGlycmVsZXZhbnQgd2l0
aGluIGEgc2luZ2xlIGxldmVsLiAnZTEgJiYgKGUyICYmIGUzKScgYW5kCisgKiAnKGUxICYmIGUy
KSAmJiBlMycgYXJlIGJvdGggYSBzaW5nbGUgbGV2ZWwuCisgKgorICogU2VlIF9fZXhwcl9lbGlt
aW5hdGVfZXEoKSBhcyB3ZWxsLgorICovCit2b2lkIGV4cHJfZWxpbWluYXRlX2VxKHN0cnVjdCBl
eHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKwlpZiAoIWUxIHx8ICFlMikKKwkJcmV0
dXJuOworCXN3aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJ
X19leHByX2VsaW1pbmF0ZV9lcShlMS0+dHlwZSwgZXAxLCBlcDIpOworCWRlZmF1bHQ6CisJCTsK
Kwl9CisJaWYgKGUxLT50eXBlICE9IGUyLT50eXBlKSBzd2l0Y2ggKGUyLT50eXBlKSB7CisJY2Fz
ZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCV9fZXhwcl9lbGltaW5hdGVfZXEoZTItPnR5cGUsIGVw
MSwgZXAyKTsKKwlkZWZhdWx0OgorCQk7CisJfQorCWUxID0gZXhwcl9lbGltaW5hdGVfeW4oZTEp
OworCWUyID0gZXhwcl9lbGltaW5hdGVfeW4oZTIpOworfQorCisjdW5kZWYgZTEKKyN1bmRlZiBl
MgorCisvKgorICogUmV0dXJucyB0cnVlIGlmICdlMScgYW5kICdlMicgYXJlIGVxdWFsLCBhZnRl
ciBtaW5vciBzaW1wbGlmaWNhdGlvbi4gVHdvCisgKiAmJi98fCBleHByZXNzaW9ucyBhcmUgY29u
c2lkZXJlZCBlcXVhbCBpZiBldmVyeSBvcGVyYW5kIGluIG9uZSBleHByZXNzaW9uCisgKiBlcXVh
bHMgc29tZSBvcGVyYW5kIGluIHRoZSBvdGhlciAob3BlcmFuZHMgZG8gbm90IG5lZWQgdG8gYXBw
ZWFyIGluIHRoZSBzYW1lCisgKiBvcmRlciksIHJlY3Vyc2l2ZWx5LgorICovCitzdGF0aWMgaW50
IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJaW50IHJlcywg
b2xkX2NvdW50OworCisJaWYgKGUxLT50eXBlICE9IGUyLT50eXBlKQorCQlyZXR1cm4gMDsKKwlz
d2l0Y2ggKGUxLT50eXBlKSB7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9HRVE6CisJY2FzZSBF
X0dUSDoKKwljYXNlIEVfTEVROgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX1VORVFVQUw6CisJCXJl
dHVybiBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltICYmIGUxLT5yaWdodC5zeW0gPT0gZTIt
PnJpZ2h0LnN5bTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gZTEtPmxlZnQuc3ltID09IGUy
LT5sZWZ0LnN5bTsKKwljYXNlIEVfTk9UOgorCQlyZXR1cm4gZXhwcl9lcShlMS0+bGVmdC5leHBy
LCBlMi0+bGVmdC5leHByKTsKKwljYXNlIEVfQU5EOgorCWNhc2UgRV9PUjoKKwkJZTEgPSBleHBy
X2NvcHkoZTEpOworCQllMiA9IGV4cHJfY29weShlMik7CisJCW9sZF9jb3VudCA9IHRyYW5zX2Nv
dW50OworCQlleHByX2VsaW1pbmF0ZV9lcSgmZTEsICZlMik7CisJCXJlcyA9IChlMS0+dHlwZSA9
PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJgorCQkgICAgICAgZTEtPmxlZnQu
c3ltID09IGUyLT5sZWZ0LnN5bSk7CisJCWV4cHJfZnJlZShlMSk7CisJCWV4cHJfZnJlZShlMik7
CisJCXRyYW5zX2NvdW50ID0gb2xkX2NvdW50OworCQlyZXR1cm4gcmVzOworCWNhc2UgRV9MSVNU
OgorCWNhc2UgRV9SQU5HRToKKwljYXNlIEVfTk9ORToKKwkJLyogcGFuaWMgKi87CisJfQorCisJ
aWYgKERFQlVHX0VYUFIpIHsKKwkJZXhwcl9mcHJpbnQoZTEsIHN0ZG91dCk7CisJCXByaW50Zigi
ID0gIik7CisJCWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOworCQlwcmludGYoIiA/XG4iKTsKKwl9
CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFJlY3Vyc2l2ZWx5IHBlcmZvcm1zIHRoZSBmb2xs
b3dpbmcgc2ltcGxpZmljYXRpb25zIGluLXBsYWNlIChhcyB3ZWxsIGFzIHRoZQorICogY29ycmVz
cG9uZGluZyBzaW1wbGlmaWNhdGlvbnMgd2l0aCBzd2FwcGVkIG9wZXJhbmRzKToKKyAqCisgKgll
eHByICYmIG4gIC0+ICBuCisgKglleHByICYmIHkgIC0+ICBleHByCisgKglleHByIHx8IG4gIC0+
ICBleHByCisgKglleHByIHx8IHkgIC0+ICB5CisgKgorICogUmV0dXJucyB0aGUgb3B0aW1pemVk
IGV4cHJlc3Npb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfeW4o
c3RydWN0IGV4cHIgKmUpCit7CisJc3RydWN0IGV4cHIgKnRtcDsKKworCWlmIChlKSBzd2l0Y2gg
KGUtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgorCQllLT5sZWZ0LmV4cHIgPSBleHByX2VsaW1pbmF0
ZV95bihlLT5sZWZ0LmV4cHIpOworCQllLT5yaWdodC5leHByID0gZXhwcl9lbGltaW5hdGVfeW4o
ZS0+cmlnaHQuZXhwcik7CisJCWlmIChlLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsK
KwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQlleHBy
X2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJ
ZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsKKwkJCQll
LT5yaWdodC5leHByID0gTlVMTDsKKwkJCQlyZXR1cm4gZTsKKwkJCX0gZWxzZSBpZiAoZS0+bGVm
dC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCWZyZWUoZS0+bGVmdC5leHBy
KTsKKwkJCQl0bXAgPSBlLT5yaWdodC5leHByOworCQkJCSplID0gKihlLT5yaWdodC5leHByKTsK
KwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9CisJCX0KKwkJaWYgKGUtPnJpZ2h0
LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsKKwkJCWlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5
bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7CisJCQkJZXhw
cl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5s
ZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0
dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPnJpZ2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xf
eWVzKSB7CisJCQkJZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7
CisJCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7CisJCQkJZnJlZSh0bXApOworCQkJCXJldHVybiBl
OworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2UgRV9PUjoKKwkJZS0+bGVmdC5leHByID0gZXhw
cl9lbGltaW5hdGVfeW4oZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfZWxp
bWluYXRlX3luKGUtPnJpZ2h0LmV4cHIpOworCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09IEVf
U1lNQk9MKSB7CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7
CisJCQkJZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7CisJCQkJ
KmUgPSAqKGUtPnJpZ2h0LmV4cHIpOworCQkJCWZyZWUodG1wKTsKKwkJCQlyZXR1cm4gZTsKKwkJ
CX0gZWxzZSBpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJ
CWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsK
KwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsK
KwkJCQllLT5yaWdodC5leHByID0gTlVMTDsKKwkJCQlyZXR1cm4gZTsKKwkJCX0KKwkJfQorCQlp
ZiAoZS0+cmlnaHQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCkgeworCQkJaWYgKGUtPnJpZ2h0LmV4
cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOwor
CQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQkqZSA9ICooZS0+bGVmdC5leHByKTsKKwkJCQlm
cmVlKHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPnJpZ2h0LmV4cHItPmxl
ZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7CisJ
CQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJ
CQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOworCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOwor
CQkJCXJldHVybiBlOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJ
cmV0dXJuIGU7Cit9CisKKy8qCisgKiBib29sIEZPTyE9biA9PiBGT08KKyAqLworc3RydWN0IGV4
cHIgKmV4cHJfdHJhbnNfYm9vbChzdHJ1Y3QgZXhwciAqZSkKK3sKKwlpZiAoIWUpCisJCXJldHVy
biBOVUxMOworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9BTkQ6CisJY2FzZSBFX09SOgor
CWNhc2UgRV9OT1Q6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfdHJhbnNfYm9vbChlLT5sZWZ0LmV4
cHIpOworCQllLT5yaWdodC5leHByID0gZXhwcl90cmFuc19ib29sKGUtPnJpZ2h0LmV4cHIpOwor
CQlicmVhazsKKwljYXNlIEVfVU5FUVVBTDoKKwkJLy8gRk9PIT1uIC0+IEZPTworCQlpZiAoZS0+
bGVmdC5zeW0tPnR5cGUgPT0gU19UUklTVEFURSkgeworCQkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAm
c3ltYm9sX25vKSB7CisJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPnJpZ2h0LnN5bSA9
IE5VTEw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4g
ZTsKK30KKworLyoKKyAqIGUxIHx8IGUyIC0+ID8KKyAqLworc3RhdGljIHN0cnVjdCBleHByICpl
eHByX2pvaW5fb3Ioc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJc3RydWN0
IGV4cHIgKnRtcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0xLCAqc3ltMjsKKworCWlmIChleHByX2Vx
KGUxLCBlMikpCisJCXJldHVybiBleHByX2NvcHkoZTEpOworCWlmIChlMS0+dHlwZSAhPSBFX0VR
VUFMICYmIGUxLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBl
MS0+dHlwZSAhPSBFX05PVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUyLT50eXBlICE9IEVfRVFV
QUwgJiYgZTItPnR5cGUgIT0gRV9VTkVRVUFMICYmIGUyLT50eXBlICE9IEVfU1lNQk9MICYmIGUy
LT50eXBlICE9IEVfTk9UKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZTEtPnR5cGUgPT0gRV9OT1Qp
IHsKKwkJdG1wID0gZTEtPmxlZnQuZXhwcjsKKwkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYm
IHRtcC0+dHlwZSAhPSBFX1VORVFVQUwgJiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQorCQkJcmV0
dXJuIE5VTEw7CisJCXN5bTEgPSB0bXAtPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0xID0gZTEt
PmxlZnQuc3ltOworCWlmIChlMi0+dHlwZSA9PSBFX05PVCkgeworCQlpZiAoZTItPmxlZnQuZXhw
ci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCXJldHVybiBOVUxMOworCQlzeW0yID0gZTItPmxlZnQu
ZXhwci0+bGVmdC5zeW07CisJfSBlbHNlCisJCXN5bTIgPSBlMi0+bGVmdC5zeW07CisJaWYgKHN5
bTEgIT0gc3ltMikKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHN5bTEtPnR5cGUgIT0gU19CT09MRUFO
ICYmIHN5bTEtPnR5cGUgIT0gU19UUklTVEFURSkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHN5bTEt
PnR5cGUgPT0gU19UUklTVEFURSkgeworCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+
dHlwZSA9PSBFX0VRVUFMICYmCisJCSAgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMg
JiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkJICAgICAoZTEtPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpIHsKKwkJ
CS8vIChhPSd5JykgfHwgKGE9J20nKSAtPiAoYSE9J24nKQorCQkJcmV0dXJuIGV4cHJfYWxsb2Nf
Y29tcChFX1VORVFVQUwsIHN5bTEsICZzeW1ib2xfbm8pOworCQl9CisJCWlmIChlMS0+dHlwZSA9
PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYKKwkJICAgICgoZTEtPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX3llcyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8CisJCSAg
ICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1i
b2xfeWVzKSkpIHsKKwkJCS8vIChhPSd5JykgfHwgKGE9J24nKSAtPiAoYSE9J20nKQorCQkJcmV0
dXJuIGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsIHN5bTEsICZzeW1ib2xfbW9kKTsKKwkJfQor
CQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmCisJCSAg
ICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX25vKSB8fAorCQkgICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJp
Z2h0LnN5bSA9PSAmc3ltYm9sX21vZCkpKSB7CisJCQkvLyAoYT0nbScpIHx8IChhPSduJykgLT4g
KGEhPSd5JykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3lt
Ym9sX3llcyk7CisJCX0KKwl9CisJaWYgKHN5bTEtPnR5cGUgPT0gU19CT09MRUFOICYmIHN5bTEg
PT0gc3ltMikgeworCQlpZiAoKGUxLT50eXBlID09IEVfTk9UICYmIGUxLT5sZWZ0LmV4cHItPnR5
cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wpIHx8CisJCSAgICAoZTItPnR5
cGUgPT0gRV9OT1QgJiYgZTItPmxlZnQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlw
ZSA9PSBFX1NZTUJPTCkpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMp
OworCX0KKworCWlmIChERUJVR19FWFBSKSB7CisJCXByaW50Zigib3B0aW1pemUgKCIpOworCQll
eHByX2ZwcmludChlMSwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpIHx8ICgiKTsKKwkJZXhwcl9mcHJp
bnQoZTIsIHN0ZG91dCk7CisJCXByaW50ZigiKT9cbiIpOworCX0KKwlyZXR1cm4gTlVMTDsKK30K
Kworc3RhdGljIHN0cnVjdCBleHByICpleHByX2pvaW5fYW5kKHN0cnVjdCBleHByICplMSwgc3Ry
dWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBleHByICp0bXA7CisJc3RydWN0IHN5bWJvbCAqc3lt
MSwgKnN5bTI7CisKKwlpZiAoZXhwcl9lcShlMSwgZTIpKQorCQlyZXR1cm4gZXhwcl9jb3B5KGUx
KTsKKwlpZiAoZTEtPnR5cGUgIT0gRV9FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1VORVFVQUwgJiYg
ZTEtPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxM
OworCWlmIChlMi0+dHlwZSAhPSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBl
Mi0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMi0+dHlwZSAhPSBFX05PVCkKKwkJcmV0dXJuIE5VTEw7
CisJaWYgKGUxLT50eXBlID09IEVfTk9UKSB7CisJCXRtcCA9IGUxLT5sZWZ0LmV4cHI7CisJCWlm
ICh0bXAtPnR5cGUgIT0gRV9FUVVBTCAmJiB0bXAtPnR5cGUgIT0gRV9VTkVRVUFMICYmIHRtcC0+
dHlwZSAhPSBFX1NZTUJPTCkKKwkJCXJldHVybiBOVUxMOworCQlzeW0xID0gdG1wLT5sZWZ0LnN5
bTsKKwl9IGVsc2UKKwkJc3ltMSA9IGUxLT5sZWZ0LnN5bTsKKwlpZiAoZTItPnR5cGUgPT0gRV9O
T1QpIHsKKwkJaWYgKGUyLT5sZWZ0LmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4g
TlVMTDsKKwkJc3ltMiA9IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0y
ID0gZTItPmxlZnQuc3ltOworCWlmIChzeW0xICE9IHN5bTIpCisJCXJldHVybiBOVUxMOworCWlm
IChzeW0xLT50eXBlICE9IFNfQk9PTEVBTiAmJiBzeW0xLT50eXBlICE9IFNfVFJJU1RBVEUpCisJ
CXJldHVybiBOVUxMOworCisJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9
PSBFX0VRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpIHx8CisJICAgIChlMi0+
dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF95ZXMpKQorCQkvLyAoYSkgJiYgKGE9J3knKSAtPiAoYT0neScpCisJCXJldHVy
biBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOworCisJaWYgKChl
MS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0
LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEt
PnR5cGUgPT0gRV9VTkVRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykpCisJCS8v
IChhKSAmJiAoYSE9J24nKSAtPiAoYSkKKwkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKHN5bTEp
OworCisJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwg
JiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkgICAgKGUyLT50eXBlID09IEVf
U1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1i
b2xfbW9kKSkKKwkJLy8gKGEpICYmIChhIT0nbScpIC0+IChhPSd5JykKKwkJcmV0dXJuIGV4cHJf
YWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7CisKKwlpZiAoc3ltMS0+dHlw
ZSA9PSBTX1RSSVNUQVRFKSB7CisJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBl
ID09IEVfVU5FUVVBTCkgeworCQkJLy8gKGE9J2InKSAmJiAoYSE9J2MnKSAtPiAnYic9J2MnID8g
J24nIDogYT0nYicKKwkJCXN5bTIgPSBlMS0+cmlnaHQuc3ltOworCQkJaWYgKChlMi0+cmlnaHQu
c3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCkgJiYgKHN5bTItPmZsYWdzICYgU1lNQk9MX0NPTlNU
KSkKKwkJCQlyZXR1cm4gc3ltMiAhPSBlMi0+cmlnaHQuc3ltID8gZXhwcl9hbGxvY19jb21wKEVf
RVFVQUwsIHN5bTEsIHN5bTIpCisJCQkJCQkJICAgICA6IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1i
b2xfbm8pOworCQl9CisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0g
RV9FUVVBTCkgeworCQkJLy8gKGE9J2InKSAmJiAoYSE9J2MnKSAtPiAnYic9J2MnID8gJ24nIDog
YT0nYicKKwkJCXN5bTIgPSBlMi0+cmlnaHQuc3ltOworCQkJaWYgKChlMS0+cmlnaHQuc3ltLT5m
bGFncyAmIFNZTUJPTF9DT05TVCkgJiYgKHN5bTItPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkKKwkJ
CQlyZXR1cm4gc3ltMiAhPSBlMS0+cmlnaHQuc3ltID8gZXhwcl9hbGxvY19jb21wKEVfRVFVQUws
IHN5bTEsIHN5bTIpCisJCQkJCQkJICAgICA6IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8p
OworCQl9CisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVR
VUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0
LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkJICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xf
bm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKQorCQkJLy8gKGEhPSd5JykgJiYg
KGEhPSduJykgLT4gKGE9J20nKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBz
eW0xLCAmc3ltYm9sX21vZCk7CisKKwkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+
dHlwZSA9PSBFX1VORVFVQUwgJiYKKwkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3ll
cyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAorCQkJICAgIChlMS0+cmlnaHQu
c3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKSkKKwkJ
CS8vIChhIT0neScpICYmIChhIT0nbScpIC0+IChhPSduJykKKwkJCXJldHVybiBleHByX2FsbG9j
X2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF9ubyk7CisKKwkJaWYgKGUxLT50eXBlID09IEVf
VU5FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYKKwkJCSAgICgoZTEtPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8CisJCQkg
ICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1i
b2xfbW9kKSkpCisJCQkvLyAoYSE9J20nKSAmJiAoYSE9J24nKSAtPiAoYT0nbScpCisJCQlyZXR1
cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsKKworCQlpZiAo
KGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnJpZ2h0
LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBl
MS0+dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJ
CSAgICAoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUy
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpIHx8CisJCSAgICAoZTItPnR5cGUgPT0gRV9TWU1C
T0wgJiYgZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95
ZXMpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKERFQlVHX0VYUFIpIHsKKwkJcHJpbnRm
KCJvcHRpbWl6ZSAoIik7CisJCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOworCQlwcmludGYoIikg
JiYgKCIpOworCQlleHByX2ZwcmludChlMiwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpP1xuIik7CisJ
fQorCXJldHVybiBOVUxMOworfQorCisvKgorICogZXhwcl9lbGltaW5hdGVfZHVwcygpIGhlbHBl
ci4KKyAqCisgKiBXYWxrcyB0aGUgdHdvIGV4cHJlc3Npb24gdHJlZXMgZ2l2ZW4gaW4gJ2VwMScg
YW5kICdlcDInLiBBbnkgbm9kZSB0aGF0IGRvZXMKKyAqIG5vdCBoYXZlIHR5cGUgJ3R5cGUnIChF
X09SL0VfQU5EKSBpcyBjb25zaWRlcmVkIGEgbGVhZiwgYW5kIGlzIGNvbXBhcmVkCisgKiBhZ2Fp
bnN0IGFsbCBvdGhlciBsZWF2ZXMgdG8gbG9vayBmb3Igc2ltcGxpZmljYXRpb25zLgorICovCitz
dGF0aWMgdm9pZCBleHByX2VsaW1pbmF0ZV9kdXBzMShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1
Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisjZGVmaW5lIGUxICgqZXAxKQor
I2RlZmluZSBlMiAoKmVwMikKKwlzdHJ1Y3QgZXhwciAqdG1wOworCisJLyogUmVjdXJzZSBkb3du
IHRvIGxlYXZlcyAqLworCisJaWYgKGUxLT50eXBlID09IHR5cGUpIHsKKwkJZXhwcl9lbGltaW5h
dGVfZHVwczEodHlwZSwgJmUxLT5sZWZ0LmV4cHIsICZlMik7CisJCWV4cHJfZWxpbWluYXRlX2R1
cHMxKHR5cGUsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZTIt
PnR5cGUgPT0gdHlwZSkgeworCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEsICZlMi0+
bGVmdC5leHByKTsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLCAmZTItPnJpZ2h0
LmV4cHIpOworCQlyZXR1cm47CisJfQorCisJLyogZTEgYW5kIGUyIGFyZSBsZWF2ZXMuIENvbXBh
cmUgYW5kIHByb2Nlc3MgdGhlbS4gKi8KKworCWlmIChlMSA9PSBlMikKKwkJcmV0dXJuOworCisJ
c3dpdGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9PUjogY2FzZSBFX0FORDoKKwkJZXhwcl9lbGlt
aW5hdGVfZHVwczEoZTEtPnR5cGUsICZlMSwgJmUxKTsKKwlkZWZhdWx0OgorCQk7CisJfQorCisJ
c3dpdGNoICh0eXBlKSB7CisJY2FzZSBFX09SOgorCQl0bXAgPSBleHByX2pvaW5fb3IoZTEsIGUy
KTsKKwkJaWYgKHRtcCkgeworCQkJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUyKTsKKwkJCWUx
ID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCQllMiA9IHRtcDsKKwkJCXRyYW5z
X2NvdW50Kys7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwkJdG1wID0gZXhwcl9qb2lu
X2FuZChlMSwgZTIpOworCQlpZiAodG1wKSB7CisJCQlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUo
ZTIpOworCQkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7CisJCQllMiA9IHRt
cDsKKwkJCXRyYW5zX2NvdW50Kys7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0K
KyN1bmRlZiBlMQorI3VuZGVmIGUyCit9CisKKy8qCisgKiBSZXdyaXRlcyAnZScgaW4tcGxhY2Ug
dG8gcmVtb3ZlICgiam9pbiIpIGR1cGxpY2F0ZSBhbmQgb3RoZXIgcmVkdW5kYW50CisgKiBvcGVy
YW5kcy4KKyAqCisgKiBFeGFtcGxlIHNpbXBsaWZpY2F0aW9uczoKKyAqCisgKglBIHx8IEIgfHwg
QSAgICAtPiAgQSB8fCBCCisgKglBICYmIEIgJiYgQT15ICAtPiAgQT15ICYmIEIKKyAqCisgKiBS
ZXR1cm5zIHRoZSBkZWR1cGxpY2F0ZWQgZXhwcmVzc2lvbi4KKyAqLworc3RydWN0IGV4cHIgKmV4
cHJfZWxpbWluYXRlX2R1cHMoc3RydWN0IGV4cHIgKmUpCit7CisJaW50IG9sZGNvdW50OworCWlm
ICghZSkKKwkJcmV0dXJuIGU7CisKKwlvbGRjb3VudCA9IHRyYW5zX2NvdW50OworCXdoaWxlICgx
KSB7CisJCXRyYW5zX2NvdW50ID0gMDsKKwkJc3dpdGNoIChlLT50eXBlKSB7CisJCWNhc2UgRV9P
UjogY2FzZSBFX0FORDoKKwkJCWV4cHJfZWxpbWluYXRlX2R1cHMxKGUtPnR5cGUsICZlLCAmZSk7
CisJCWRlZmF1bHQ6CisJCQk7CisJCX0KKwkJaWYgKCF0cmFuc19jb3VudCkKKwkJCS8qIE5vIHNp
bXBsaWZpY2F0aW9ucyBkb25lIGluIHRoaXMgcGFzcy4gV2UncmUgZG9uZSAqLworCQkJYnJlYWs7
CisJCWUgPSBleHByX2VsaW1pbmF0ZV95bihlKTsKKwl9CisJdHJhbnNfY291bnQgPSBvbGRjb3Vu
dDsKKwlyZXR1cm4gZTsKK30KKworLyoKKyAqIFBlcmZvcm1zIHZhcmlvdXMgc2ltcGxpZmljYXRp
b25zIGludm9sdmluZyBsb2dpY2FsIG9wZXJhdG9ycyBhbmQKKyAqIGNvbXBhcmlzb25zLgorICoK
KyAqIEFsbG9jYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBleHByZXNzaW9uLgorICovCitzdHJ1Y3Qg
ZXhwciAqZXhwcl90cmFuc2Zvcm0oc3RydWN0IGV4cHIgKmUpCit7CisJc3RydWN0IGV4cHIgKnRt
cDsKKworCWlmICghZSkKKwkJcmV0dXJuIE5VTEw7CisJc3dpdGNoIChlLT50eXBlKSB7CisJY2Fz
ZSBFX0VRVUFMOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0dUSDoKKwljYXNlIEVfTEVROgorCWNh
c2UgRV9MVEg6CisJY2FzZSBFX1VORVFVQUw6CisJY2FzZSBFX1NZTUJPTDoKKwljYXNlIEVfTElT
VDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl90cmFuc2Zvcm0o
ZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfdHJhbnNmb3JtKGUtPnJpZ2h0
LmV4cHIpOworCX0KKworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9FUVVBTDoKKwkJaWYg
KGUtPmxlZnQuc3ltLT50eXBlICE9IFNfQk9PTEVBTikKKwkJCWJyZWFrOworCQlpZiAoZS0+cmln
aHQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCWUtPnR5cGUgPSBFX05PVDsKKwkJCWUtPmxlZnQu
ZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKGUtPmxlZnQuc3ltKTsKKwkJCWUtPnJpZ2h0LnN5bSA9
IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9k
KSB7CisJCQlwcmludGYoImJvb2xlYW4gc3ltYm9sICVzIHRlc3RlZCBmb3IgJ20nPyB0ZXN0IGZv
cmNlZCB0byAnbidcbiIsIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJCWUtPnR5cGUgPSBFX1NZTUJP
TDsKKwkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7
CisJCQlicmVhazsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJ
CQllLT50eXBlID0gRV9TWU1CT0w7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7
CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJCWlmIChlLT5sZWZ0LnN5bS0+dHlw
ZSAhPSBTX0JPT0xFQU4pCisJCQlicmVhazsKKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X25vKSB7CisJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOwor
CQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgeworCQkJ
cHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVzdCBmb3JjZWQgdG8g
J3knXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQll
LT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJy
ZWFrOworCQl9CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCWUtPnR5
cGUgPSBFX05PVDsKKwkJCWUtPmxlZnQuZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKGUtPmxlZnQu
c3ltKTsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsK
KwljYXNlIEVfTk9UOgorCQlzd2l0Y2ggKGUtPmxlZnQuZXhwci0+dHlwZSkgeworCQljYXNlIEVf
Tk9UOgorCQkJLy8gISFhIC0+IGEKKwkJCXRtcCA9IGUtPmxlZnQuZXhwci0+bGVmdC5leHByOwor
CQkJZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJZnJlZShlKTsKKwkJCWUgPSB0bXA7CisJCQllID0g
ZXhwcl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX0VRVUFMOgorCQljYXNlIEVf
VU5FUVVBTDoKKwkJCS8vICFhPSd4JyAtPiBhIT0neCcKKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsK
KwkJCWZyZWUoZSk7CisJCQllID0gdG1wOworCQkJZS0+dHlwZSA9IGUtPnR5cGUgPT0gRV9FUVVB
TCA/IEVfVU5FUVVBTCA6IEVfRVFVQUw7CisJCQlicmVhazsKKwkJY2FzZSBFX0xFUToKKwkJY2Fz
ZSBFX0dFUToKKwkJCS8vICFhPD0neCcgLT4gYT4neCcKKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsK
KwkJCWZyZWUoZSk7CisJCQllID0gdG1wOworCQkJZS0+dHlwZSA9IGUtPnR5cGUgPT0gRV9MRVEg
PyBFX0dUSCA6IEVfTFRIOworCQkJYnJlYWs7CisJCWNhc2UgRV9MVEg6CisJCWNhc2UgRV9HVEg6
CisJCQkvLyAhYTwneCcgLT4gYT49J3gnCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQlmcmVl
KGUpOworCQkJZSA9IHRtcDsKKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfTFRIID8gRV9HRVEg
OiBFX0xFUTsKKwkJCWJyZWFrOworCQljYXNlIEVfT1I6CisJCQkvLyAhKGEgfHwgYikgLT4gIWEg
JiYgIWIKKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCWUtPnR5cGUgPSBFX0FORDsKKwkJCWUt
PnJpZ2h0LmV4cHIgPSBleHByX2FsbG9jX29uZShFX05PVCwgdG1wLT5yaWdodC5leHByKTsKKwkJ
CXRtcC0+dHlwZSA9IEVfTk9UOworCQkJdG1wLT5yaWdodC5leHByID0gTlVMTDsKKwkJCWUgPSBl
eHByX3RyYW5zZm9ybShlKTsKKwkJCWJyZWFrOworCQljYXNlIEVfQU5EOgorCQkJLy8gIShhICYm
IGIpIC0+ICFhIHx8ICFiCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQllLT50eXBlID0gRV9P
UjsKKwkJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2FsbG9jX29uZShFX05PVCwgdG1wLT5yaWdodC5l
eHByKTsKKwkJCXRtcC0+dHlwZSA9IEVfTk9UOworCQkJdG1wLT5yaWdodC5leHByID0gTlVMTDsK
KwkJCWUgPSBleHByX3RyYW5zZm9ybShlKTsKKwkJCWJyZWFrOworCQljYXNlIEVfU1lNQk9MOgor
CQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQkvLyAh
J3knIC0+ICduJworCQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQlmcmVlKGUpOworCQkJCWUg
PSB0bXA7CisJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJv
bF9ubzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09
ICZzeW1ib2xfbW9kKSB7CisJCQkJLy8gISdtJyAtPiAnbScKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4
cHI7CisJCQkJZnJlZShlKTsKKwkJCQllID0gdG1wOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsK
KwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbW9kOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYg
KGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgeworCQkJCS8vICEnbicgLT4g
J3knCisJCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJCWZyZWUoZSk7CisJCQkJZSA9IHRtcDsK
KwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJOworCQl9CisJCWJy
ZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIGU7Cit9CisKK2ludCBleHByX2NvbnRh
aW5zX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJaWYg
KCFkZXApCisJCXJldHVybiAwOworCisJc3dpdGNoIChkZXAtPnR5cGUpIHsKKwljYXNlIEVfQU5E
OgorCWNhc2UgRV9PUjoKKwkJcmV0dXJuIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+bGVmdC5l
eHByLCBzeW0pIHx8CisJCSAgICAgICBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAtPnJpZ2h0LmV4
cHIsIHN5bSk7CisJY2FzZSBFX1NZTUJPTDoKKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0gPT0gc3lt
OworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xF
UToKKwljYXNlIEVfTFRIOgorCWNhc2UgRV9VTkVRVUFMOgorCQlyZXR1cm4gZGVwLT5sZWZ0LnN5
bSA9PSBzeW0gfHwKKwkJICAgICAgIGRlcC0+cmlnaHQuc3ltID09IHN5bTsKKwljYXNlIEVfTk9U
OgorCQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSk7CisJ
ZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4gMDsKK30KKworYm9vbCBleHByX2RlcGVuZHNfc3lt
Ym9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlpZiAoIWRlcCkK
KwkJcmV0dXJuIGZhbHNlOworCisJc3dpdGNoIChkZXAtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgor
CQlyZXR1cm4gZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAtPmxlZnQuZXhwciwgc3ltKSB8fAorCQkg
ICAgICAgZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAtPnJpZ2h0LmV4cHIsIHN5bSk7CisJY2FzZSBF
X1NZTUJPTDoKKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0gPT0gc3ltOworCWNhc2UgRV9FUVVBTDoK
KwkJaWYgKGRlcC0+bGVmdC5zeW0gPT0gc3ltKSB7CisJCQlpZiAoZGVwLT5yaWdodC5zeW0gPT0g
JnN5bWJvbF95ZXMgfHwgZGVwLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpCisJCQkJcmV0dXJu
IHRydWU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJCWlmIChkZXAtPmxlZnQu
c3ltID09IHN5bSkgeworCQkJaWYgKGRlcC0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pCisJCQkJ
cmV0dXJuIHRydWU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKyAJcmV0dXJu
IGZhbHNlOworfQorCisvKgorICogSW5zZXJ0cyBleHBsaWNpdCBjb21wYXJpc29ucyBvZiB0eXBl
ICd0eXBlJyB0byBzeW1ib2wgJ3N5bScgaW50byB0aGUKKyAqIGV4cHJlc3Npb24gJ2UnLgorICoK
KyAqIEV4YW1wbGVzIHRyYW5zZm9ybWF0aW9ucyBmb3IgdHlwZSA9PSBFX1VORVFVQUwsIHN5bSA9
PSAmc3ltYm9sX25vOgorICoKKyAqCUEgICAgICAgICAgICAgIC0+ICBBIT1uCisgKgkhQSAgICAg
ICAgICAgICAtPiAgQT1uCisgKglBICYmIEIgICAgICAgICAtPiAgIShBPW4gfHwgQj1uKQorICoJ
QSB8fCBCICAgICAgICAgLT4gICEoQT1uICYmIEI9bikKKyAqCUEgJiYgKEIgfHwgQykgIC0+ICAh
KEE9biB8fCAoQj1uICYmIEM9bikpCisgKgorICogQWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgbmV3
IGV4cHJlc3Npb24uCisgKi8KK3N0cnVjdCBleHByICpleHByX3RyYW5zX2NvbXBhcmUoc3RydWN0
IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlz
dHJ1Y3QgZXhwciAqZTEsICplMjsKKworCWlmICghZSkgeworCQllID0gZXhwcl9hbGxvY19zeW1i
b2woc3ltKTsKKwkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQorCQkJZSA9IGV4cHJfYWxsb2Nfb25l
KEVfTk9ULCBlKTsKKwkJcmV0dXJuIGU7CisJfQorCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2Ug
RV9BTkQ6CisJCWUxID0gZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgRV9FUVVBTCwg
c3ltKTsKKwkJZTIgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+cmlnaHQuZXhwciwgRV9FUVVBTCwg
c3ltKTsKKwkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhF
X0FORCwgZTEsIGUyKTsKKwkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQorCQkJZSA9IGV4cHJfYWxs
b2NfdHdvKEVfT1IsIGUxLCBlMik7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBl
eHByX2FsbG9jX29uZShFX05PVCwgZSk7CisJCXJldHVybiBlOworCWNhc2UgRV9PUjoKKwkJZTEg
PSBleHByX3RyYW5zX2NvbXBhcmUoZS0+bGVmdC5leHByLCBFX0VRVUFMLCBzeW0pOworCQllMiA9
IGV4cHJfdHJhbnNfY29tcGFyZShlLT5yaWdodC5leHByLCBFX0VRVUFMLCBzeW0pOworCQlpZiAo
c3ltID09ICZzeW1ib2xfeWVzKQorCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsIGUxLCBlMik7
CisJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX0FORCwg
ZTEsIGUyKTsKKwkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQorCQkJZSA9IGV4cHJfYWxsb2Nfb25l
KEVfTk9ULCBlKTsKKwkJcmV0dXJuIGU7CisJY2FzZSBFX05PVDoKKwkJcmV0dXJuIGV4cHJfdHJh
bnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIHR5cGUgPT0gRV9FUVVBTCA/IEVfVU5FUVVBTCA6IEVf
RVFVQUwsIHN5bSk7CisJY2FzZSBFX1VORVFVQUw6CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfTEVR
OgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0dFUToKKwljYXNlIEVfRVFVQUw6CisJCWlmICh0eXBl
ID09IEVfRVFVQUwpIHsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpCisJCQkJcmV0dXJuIGV4
cHJfY29weShlKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpCisJCQkJcmV0dXJuIGV4cHJf
YWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQorCQkJ
CXJldHVybiBleHByX2FsbG9jX29uZShFX05PVCwgZXhwcl9jb3B5KGUpKTsKKwkJfSBlbHNlIHsK
KwkJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpCisJCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVf
Tk9ULCBleHByX2NvcHkoZSkpOworCQkJaWYgKHN5bSA9PSAmc3ltYm9sX21vZCkKKwkJCQlyZXR1
cm4gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQkJaWYgKHN5bSA9PSAmc3ltYm9s
X25vKQorCQkJCXJldHVybiBleHByX2NvcHkoZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX1NZ
TUJPTDoKKwkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcCh0eXBlLCBlLT5sZWZ0LnN5bSwgc3ltKTsK
KwljYXNlIEVfTElTVDoKKwljYXNlIEVfUkFOR0U6CisJY2FzZSBFX05PTkU6CisJCS8qIHBhbmlj
ICovOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworZW51bSBzdHJpbmdfdmFsdWVfa2luZCB7CisJ
a19zdHJpbmcsCisJa19zaWduZWQsCisJa191bnNpZ25lZCwKK307CisKK3VuaW9uIHN0cmluZ192
YWx1ZSB7CisJdW5zaWduZWQgbG9uZyBsb25nIHU7CisJc2lnbmVkIGxvbmcgbG9uZyBzOworfTsK
Kworc3RhdGljIGVudW0gc3RyaW5nX3ZhbHVlX2tpbmQgZXhwcl9wYXJzZV9zdHJpbmcoY29uc3Qg
Y2hhciAqc3RyLAorCQkJCQkJZW51bSBzeW1ib2xfdHlwZSB0eXBlLAorCQkJCQkJdW5pb24gc3Ry
aW5nX3ZhbHVlICp2YWwpCit7CisJY2hhciAqdGFpbDsKKwllbnVtIHN0cmluZ192YWx1ZV9raW5k
IGtpbmQ7CisKKwllcnJubyA9IDA7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46
CisJY2FzZSBTX1RSSVNUQVRFOgorCQl2YWwtPnMgPSAhc3RyY21wKHN0ciwgIm4iKSA/IDAgOgor
CQkJICFzdHJjbXAoc3RyLCAibSIpID8gMSA6CisJCQkgIXN0cmNtcChzdHIsICJ5IikgPyAyIDog
LTE7CisJCXJldHVybiBrX3NpZ25lZDsKKwljYXNlIFNfSU5UOgorCQl2YWwtPnMgPSBzdHJ0b2xs
KHN0ciwgJnRhaWwsIDEwKTsKKwkJa2luZCA9IGtfc2lnbmVkOworCQlicmVhazsKKwljYXNlIFNf
SEVYOgorCQl2YWwtPnUgPSBzdHJ0b3VsbChzdHIsICZ0YWlsLCAxNik7CisJCWtpbmQgPSBrX3Vu
c2lnbmVkOworCQlicmVhazsKKwlkZWZhdWx0OgorCQl2YWwtPnMgPSBzdHJ0b2xsKHN0ciwgJnRh
aWwsIDApOworCQlraW5kID0ga19zaWduZWQ7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gIWVycm5v
ICYmICEqdGFpbCAmJiB0YWlsID4gc3RyICYmIGlzeGRpZ2l0KHRhaWxbLTFdKQorCSAgICAgICA/
IGtpbmQgOiBrX3N0cmluZzsKK30KKwordHJpc3RhdGUgZXhwcl9jYWxjX3ZhbHVlKHN0cnVjdCBl
eHByICplKQoreworCXRyaXN0YXRlIHZhbDEsIHZhbDI7CisJY29uc3QgY2hhciAqc3RyMSwgKnN0
cjI7CisJZW51bSBzdHJpbmdfdmFsdWVfa2luZCBrMSA9IGtfc3RyaW5nLCBrMiA9IGtfc3RyaW5n
OworCXVuaW9uIHN0cmluZ192YWx1ZSBsdmFsID0ge30sIHJ2YWwgPSB7fTsKKwlpbnQgcmVzOwor
CisJaWYgKCFlKQorCQlyZXR1cm4geWVzOworCisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBF
X1NZTUJPTDoKKwkJc3ltX2NhbGNfdmFsdWUoZS0+bGVmdC5zeW0pOworCQlyZXR1cm4gZS0+bGVm
dC5zeW0tPmN1cnIudHJpOworCWNhc2UgRV9BTkQ6CisJCXZhbDEgPSBleHByX2NhbGNfdmFsdWUo
ZS0+bGVmdC5leHByKTsKKwkJdmFsMiA9IGV4cHJfY2FsY192YWx1ZShlLT5yaWdodC5leHByKTsK
KwkJcmV0dXJuIEVYUFJfQU5EKHZhbDEsIHZhbDIpOworCWNhc2UgRV9PUjoKKwkJdmFsMSA9IGV4
cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOworCQl2YWwyID0gZXhwcl9jYWxjX3ZhbHVlKGUt
PnJpZ2h0LmV4cHIpOworCQlyZXR1cm4gRVhQUl9PUih2YWwxLCB2YWwyKTsKKwljYXNlIEVfTk9U
OgorCQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7CisJCXJldHVybiBFWFBS
X05PVCh2YWwxKTsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgor
CWNhc2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJYnJlYWs7CisJ
ZGVmYXVsdDoKKwkJcHJpbnRmKCJleHByX2NhbGNfdmFsdWU6ICVkP1xuIiwgZS0+dHlwZSk7CisJ
CXJldHVybiBubzsKKwl9CisKKwlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5bSk7CisJc3ltX2Nh
bGNfdmFsdWUoZS0+cmlnaHQuc3ltKTsKKwlzdHIxID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoZS0+
bGVmdC5zeW0pOworCXN0cjIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShlLT5yaWdodC5zeW0pOwor
CisJaWYgKGUtPmxlZnQuc3ltLT50eXBlICE9IFNfU1RSSU5HIHx8IGUtPnJpZ2h0LnN5bS0+dHlw
ZSAhPSBTX1NUUklORykgeworCQlrMSA9IGV4cHJfcGFyc2Vfc3RyaW5nKHN0cjEsIGUtPmxlZnQu
c3ltLT50eXBlLCAmbHZhbCk7CisJCWsyID0gZXhwcl9wYXJzZV9zdHJpbmcoc3RyMiwgZS0+cmln
aHQuc3ltLT50eXBlLCAmcnZhbCk7CisJfQorCisJaWYgKGsxID09IGtfc3RyaW5nIHx8IGsyID09
IGtfc3RyaW5nKQorCQlyZXMgPSBzdHJjbXAoc3RyMSwgc3RyMik7CisJZWxzZSBpZiAoazEgPT0g
a191bnNpZ25lZCB8fCBrMiA9PSBrX3Vuc2lnbmVkKQorCQlyZXMgPSAobHZhbC51ID4gcnZhbC51
KSAtIChsdmFsLnUgPCBydmFsLnUpOworCWVsc2UgLyogaWYgKGsxID09IGtfc2lnbmVkICYmIGsy
ID09IGtfc2lnbmVkKSAqLworCQlyZXMgPSAobHZhbC5zID4gcnZhbC5zKSAtIChsdmFsLnMgPCBy
dmFsLnMpOworCisJc3dpdGNoKGUtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJCXJldHVybiBy
ZXMgPyBubyA6IHllczsKKwljYXNlIEVfR0VROgorCQlyZXR1cm4gcmVzID49IDAgPyB5ZXMgOiBu
bzsKKwljYXNlIEVfR1RIOgorCQlyZXR1cm4gcmVzID4gMCA/IHllcyA6IG5vOworCWNhc2UgRV9M
RVE6CisJCXJldHVybiByZXMgPD0gMCA/IHllcyA6IG5vOworCWNhc2UgRV9MVEg6CisJCXJldHVy
biByZXMgPCAwID8geWVzIDogbm87CisJY2FzZSBFX1VORVFVQUw6CisJCXJldHVybiByZXMgPyB5
ZXMgOiBubzsKKwlkZWZhdWx0OgorCQlwcmludGYoImV4cHJfY2FsY192YWx1ZTogcmVsYXRpb24g
JWQ/XG4iLCBlLT50eXBlKTsKKwkJcmV0dXJuIG5vOworCX0KK30KKworc3RhdGljIGludCBleHBy
X2NvbXBhcmVfdHlwZShlbnVtIGV4cHJfdHlwZSB0MSwgZW51bSBleHByX3R5cGUgdDIpCit7CisJ
aWYgKHQxID09IHQyKQorCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKHQxKSB7CisJY2FzZSBFX0xFUToK
KwljYXNlIEVfTFRIOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0dUSDoKKwkJaWYgKHQyID09IEVf
RVFVQUwgfHwgdDIgPT0gRV9VTkVRVUFMKQorCQkJcmV0dXJuIDE7CisJY2FzZSBFX0VRVUFMOgor
CWNhc2UgRV9VTkVRVUFMOgorCQlpZiAodDIgPT0gRV9OT1QpCisJCQlyZXR1cm4gMTsKKwljYXNl
IEVfTk9UOgorCQlpZiAodDIgPT0gRV9BTkQpCisJCQlyZXR1cm4gMTsKKwljYXNlIEVfQU5EOgor
CQlpZiAodDIgPT0gRV9PUikKKwkJCXJldHVybiAxOworCWNhc2UgRV9PUjoKKwkJaWYgKHQyID09
IEVfTElTVCkKKwkJCXJldHVybiAxOworCWNhc2UgRV9MSVNUOgorCQlpZiAodDIgPT0gMCkKKwkJ
CXJldHVybiAxOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisJcHJpbnRmKCJbJWRndCVk
P10iLCB0MSwgdDIpOworCXJldHVybiAwOworfQorCit2b2lkIGV4cHJfcHJpbnQoc3RydWN0IGV4
cHIgKmUsCisJCXZvaWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNoYXIg
KiksCisJCXZvaWQgKmRhdGEsIGludCBwcmV2dG9rZW4pCit7CisJaWYgKCFlKSB7CisJCWZuKGRh
dGEsIE5VTEwsICJ5Iik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoZXhwcl9jb21wYXJlX3R5cGUo
cHJldnRva2VuLCBlLT50eXBlKSA+IDApCisJCWZuKGRhdGEsIE5VTEwsICIoIik7CisJc3dpdGNo
IChlLT50eXBlKSB7CisJY2FzZSBFX1NZTUJPTDoKKwkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQor
CQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJ
Zm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7CisJCWJyZWFrOworCWNhc2UgRV9OT1Q6CisJCWZu
KGRhdGEsIE5VTEwsICIhIik7CisJCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwg
RV9OT1QpOworCQlicmVhazsKKwljYXNlIEVfRVFVQUw6CisJCWlmIChlLT5sZWZ0LnN5bS0+bmFt
ZSkKKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWVsc2UK
KwkJCWZuKGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlmbihkYXRhLCBOVUxMLCAiPSIpOwor
CQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWJyZWFrOwor
CWNhc2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQorCQkJ
Zm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJZm4o
ZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7CisJCWZuKGRhdGEsIE5VTEwsIGUtPnR5cGUgPT0gRV9M
RVEgPyAiPD0iIDogIjwiKTsKKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0t
Pm5hbWUpOworCQlicmVhazsKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJCWlmIChlLT5s
ZWZ0LnN5bS0+bmFtZSkKKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFt
ZSk7CisJCWVsc2UKKwkJCWZuKGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlmbihkYXRhLCBO
VUxMLCBlLT50eXBlID09IEVfR0VRID8gIj49IiA6ICI+Iik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0
LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJ
CWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkKKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0
LnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCWZuKGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlm
bihkYXRhLCBOVUxMLCAiIT0iKTsKKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5z
eW0tPm5hbWUpOworCQlicmVhazsKKwljYXNlIEVfT1I6CisJCWV4cHJfcHJpbnQoZS0+bGVmdC5l
eHByLCBmbiwgZGF0YSwgRV9PUik7CisJCWZuKGRhdGEsIE5VTEwsICIgfHwgIik7CisJCWV4cHJf
cHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEsIEVfT1IpOworCQlicmVhazsKKwljYXNlIEVf
QU5EOgorCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIEVfQU5EKTsKKwkJZm4o
ZGF0YSwgTlVMTCwgIiAmJiAiKTsKKwkJZXhwcl9wcmludChlLT5yaWdodC5leHByLCBmbiwgZGF0
YSwgRV9BTkQpOworCQlicmVhazsKKwljYXNlIEVfTElTVDoKKwkJZm4oZGF0YSwgZS0+cmlnaHQu
c3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOworCQlpZiAoZS0+bGVmdC5leHByKSB7CisJCQlmbihk
YXRhLCBOVUxMLCAiIF4gIik7CisJCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEs
IEVfTElTVCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX1JBTkdFOgorCQlmbihkYXRhLCBOVUxM
LCAiWyIpOworCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQlm
bihkYXRhLCBOVUxMLCAiICIpOworCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5
bS0+bmFtZSk7CisJCWZuKGRhdGEsIE5VTEwsICJdIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
ICB7CisJCWNoYXIgYnVmWzMyXTsKKwkJc3ByaW50ZihidWYsICI8dW5rbm93biB0eXBlICVkPiIs
IGUtPnR5cGUpOworCQlmbihkYXRhLCBOVUxMLCBidWYpOworCQlicmVhazsKKwkgIH0KKwl9CisJ
aWYgKGV4cHJfY29tcGFyZV90eXBlKHByZXZ0b2tlbiwgZS0+dHlwZSkgPiAwKQorCQlmbihkYXRh
LCBOVUxMLCAiKSIpOworfQorCitzdGF0aWMgdm9pZCBleHByX3ByaW50X2ZpbGVfaGVscGVyKHZv
aWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQoreworCXhmd3Jp
dGUoc3RyLCBzdHJsZW4oc3RyKSwgMSwgZGF0YSk7Cit9CisKK3ZvaWQgZXhwcl9mcHJpbnQoc3Ry
dWN0IGV4cHIgKmUsIEZJTEUgKm91dCkKK3sKKwlleHByX3ByaW50KGUsIGV4cHJfcHJpbnRfZmls
ZV9oZWxwZXIsIG91dCwgRV9OT05FKTsKK30KKworc3RhdGljIHZvaWQgZXhwcl9wcmludF9nc3Ry
X2hlbHBlcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikK
K3sKKwlzdHJ1Y3QgZ3N0ciAqZ3MgPSAoc3RydWN0IGdzdHIqKWRhdGE7CisJY29uc3QgY2hhciAq
c3ltX3N0ciA9IE5VTEw7CisKKwlpZiAoc3ltKQorCQlzeW1fc3RyID0gc3ltX2dldF9zdHJpbmdf
dmFsdWUoc3ltKTsKKworCWlmIChncy0+bWF4X3dpZHRoKSB7CisJCXVuc2lnbmVkIGV4dHJhX2xl
bmd0aCA9IHN0cmxlbihzdHIpOworCQljb25zdCBjaGFyICpsYXN0X2NyID0gc3RycmNocihncy0+
cywgJ1xuJyk7CisJCXVuc2lnbmVkIGxhc3RfbGluZV9sZW5ndGg7CisKKwkJaWYgKHN5bV9zdHIp
CisJCQlleHRyYV9sZW5ndGggKz0gNCArIHN0cmxlbihzeW1fc3RyKTsKKworCQlpZiAoIWxhc3Rf
Y3IpCisJCQlsYXN0X2NyID0gZ3MtPnM7CisKKwkJbGFzdF9saW5lX2xlbmd0aCA9IHN0cmxlbihn
cy0+cykgLSAobGFzdF9jciAtIGdzLT5zKTsKKworCQlpZiAoKGxhc3RfbGluZV9sZW5ndGggKyBl
eHRyYV9sZW5ndGgpID4gZ3MtPm1heF93aWR0aCkKKwkJCXN0cl9hcHBlbmQoZ3MsICJcXFxuIik7
CisJfQorCisJc3RyX2FwcGVuZChncywgc3RyKTsKKwlpZiAoc3ltICYmIHN5bS0+dHlwZSAhPSBT
X1VOS05PV04pCisJCXN0cl9wcmludGYoZ3MsICIgWz0lc10iLCBzeW1fc3RyKTsKK30KKwordm9p
ZCBleHByX2dzdHJfcHJpbnQoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBnc3RyICpncykKK3sKKwll
eHByX3ByaW50KGUsIGV4cHJfcHJpbnRfZ3N0cl9oZWxwZXIsIGdzLCBFX05PTkUpOworfQorCisv
KgorICogVHJhbnNmb3JtIHRoZSB0b3AgbGV2ZWwgInx8IiB0b2tlbnMgaW50byBuZXdsaW5lcyBh
bmQgcHJlcGVuZCBlYWNoCisgKiBsaW5lIHdpdGggYSBtaW51cy4gVGhpcyBtYWtlcyBleHByZXNz
aW9ucyBtdWNoIGVhc2llciB0byByZWFkLgorICogU3VpdGFibGUgZm9yIHJldmVyc2UgZGVwZW5k
ZW5jeSBleHByZXNzaW9ucy4KKyAqLworc3RhdGljIHZvaWQgZXhwcl9wcmludF9yZXZkZXAoc3Ry
dWN0IGV4cHIgKmUsCisJCQkgICAgICB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAq
LCBjb25zdCBjaGFyICopLAorCQkJICAgICAgdm9pZCAqZGF0YSwgdHJpc3RhdGUgcHJfdHlwZSwg
Y29uc3QgY2hhciAqKnRpdGxlKQoreworCWlmIChlLT50eXBlID09IEVfT1IpIHsKKwkJZXhwcl9w
cmludF9yZXZkZXAoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgcHJfdHlwZSwgdGl0bGUpOworCQll
eHByX3ByaW50X3JldmRlcChlLT5yaWdodC5leHByLCBmbiwgZGF0YSwgcHJfdHlwZSwgdGl0bGUp
OworCX0gZWxzZSBpZiAoZXhwcl9jYWxjX3ZhbHVlKGUpID09IHByX3R5cGUpIHsKKwkJaWYgKCp0
aXRsZSkgeworCQkJZm4oZGF0YSwgTlVMTCwgKnRpdGxlKTsKKwkJCSp0aXRsZSA9IE5VTEw7CisJ
CX0KKworCQlmbihkYXRhLCBOVUxMLCAiICAtICIpOworCQlleHByX3ByaW50KGUsIGZuLCBkYXRh
LCBFX05PTkUpOworCQlmbihkYXRhLCBOVUxMLCAiXG4iKTsKKwl9Cit9CisKK3ZvaWQgZXhwcl9n
c3RyX3ByaW50X3JldmRlcChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzLAorCQkJICAg
IHRyaXN0YXRlIHByX3R5cGUsIGNvbnN0IGNoYXIgKnRpdGxlKQoreworCWV4cHJfcHJpbnRfcmV2
ZGVwKGUsIGV4cHJfcHJpbnRfZ3N0cl9oZWxwZXIsIGdzLCBwcl90eXBlLCAmdGl0bGUpOworfQpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmggYi9zdXBwb3J0L2tjb25maWcu
bmV3L2V4cHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uOGRkZTY1YmMK
LS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2V4cHIuaApAQCAtMCwwICsx
LDMzMSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Cisg
Ki8KKworI2lmbmRlZiBFWFBSX0gKKyNkZWZpbmUgRVhQUl9ICisKKyNpZmRlZiBfX2NwbHVzcGx1
cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSAibGlzdC5oIgorI2lmbmRlZiBfX2NwbHVzcGx1cworI2luY2x1
ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCitzdHJ1Y3QgZmlsZSB7CisJc3RydWN0IGZpbGUgKm5l
eHQ7CisJc3RydWN0IGZpbGUgKnBhcmVudDsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBsaW5l
bm87Cit9OworCit0eXBlZGVmIGVudW0gdHJpc3RhdGUgeworCW5vLCBtb2QsIHllcworfSB0cmlz
dGF0ZTsKKworZW51bSBleHByX3R5cGUgeworCUVfTk9ORSwgRV9PUiwgRV9BTkQsIEVfTk9ULAor
CUVfRVFVQUwsIEVfVU5FUVVBTCwgRV9MVEgsIEVfTEVRLCBFX0dUSCwgRV9HRVEsCisJRV9MSVNU
LCBFX1NZTUJPTCwgRV9SQU5HRQorfTsKKwordW5pb24gZXhwcl9kYXRhIHsKKwlzdHJ1Y3QgZXhw
ciAqZXhwcjsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07Cit9OworCitzdHJ1Y3QgZXhwciB7CisJZW51
bSBleHByX3R5cGUgdHlwZTsKKwl1bmlvbiBleHByX2RhdGEgbGVmdCwgcmlnaHQ7Cit9OworCisj
ZGVmaW5lIEVYUFJfT1IoZGVwMSwgZGVwMikJKCgoZGVwMSk+KGRlcDIpKT8oZGVwMSk6KGRlcDIp
KQorI2RlZmluZSBFWFBSX0FORChkZXAxLCBkZXAyKQkoKChkZXAxKTwoZGVwMikpPyhkZXAxKToo
ZGVwMikpCisjZGVmaW5lIEVYUFJfTk9UKGRlcCkJCSgyLShkZXApKQorCisjZGVmaW5lIGV4cHJf
bGlzdF9mb3JfZWFjaF9zeW0obCwgZSwgcykgXAorCWZvciAoZSA9IChsKTsgZSAmJiAocyA9IGUt
PnJpZ2h0LnN5bSk7IGUgPSBlLT5sZWZ0LmV4cHIpCisKK3N0cnVjdCBleHByX3ZhbHVlIHsKKwlz
dHJ1Y3QgZXhwciAqZXhwcjsKKwl0cmlzdGF0ZSB0cmk7Cit9OworCitzdHJ1Y3Qgc3ltYm9sX3Zh
bHVlIHsKKwl2b2lkICp2YWw7CisJdHJpc3RhdGUgdHJpOworfTsKKworZW51bSBzeW1ib2xfdHlw
ZSB7CisJU19VTktOT1dOLCBTX0JPT0xFQU4sIFNfVFJJU1RBVEUsIFNfSU5ULCBTX0hFWCwgU19T
VFJJTkcKK307CisKKy8qIGVudW0gdmFsdWVzIGFyZSB1c2VkIGFzIGluZGV4IHRvIHN5bWJvbC5k
ZWZbXSAqLworZW51bSB7CisJU19ERUZfVVNFUiwJCS8qIG1haW4gdXNlciB2YWx1ZSAqLworCVNf
REVGX0FVVE8sCQkvKiB2YWx1ZXMgcmVhZCBmcm9tIGF1dG8uY29uZiAqLworCVNfREVGX0RFRjMs
CQkvKiBSZXNlcnZlZCBmb3IgVUkgdXNhZ2UgKi8KKwlTX0RFRl9ERUY0LAkJLyogUmVzZXJ2ZWQg
Zm9yIFVJIHVzYWdlICovCisJU19ERUZfQ09VTlQKK307CisKKy8qCisgKiBSZXByZXNlbnRzIGEg
Y29uZmlndXJhdGlvbiBzeW1ib2wuCisgKgorICogQ2hvaWNlcyBhcmUgcmVwcmVzZW50ZWQgYXMg
YSBzcGVjaWFsIGtpbmQgb2Ygc3ltYm9sIGFuZCBoYXZlIHRoZQorICogU1lNQk9MX0NIT0lDRSBi
aXQgc2V0IGluICdmbGFncycuCisgKi8KK3N0cnVjdCBzeW1ib2wgeworCS8qIFRoZSBuZXh0IHN5
bWJvbCBpbiB0aGUgc2FtZSBidWNrZXQgaW4gdGhlIHN5bWJvbCBoYXNoIHRhYmxlICovCisJc3Ry
dWN0IHN5bWJvbCAqbmV4dDsKKworCS8qIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wsIGUuZy4gIkZP
TyIgZm9yICdjb25maWcgRk9PJyAqLworCWNoYXIgKm5hbWU7CisKKwkvKiBTX0JPT0xFQU4sIFNf
VFJJU1RBVEUsIC4uLiAqLworCWVudW0gc3ltYm9sX3R5cGUgdHlwZTsKKworCS8qCisJICogVGhl
IGNhbGN1bGF0ZWQgdmFsdWUgb2YgdGhlIHN5bWJvbC4gVGhlIFNZTUJPTF9WQUxJRCBiaXQgaXMg
c2V0IGluCisJICogJ2ZsYWdzJyB3aGVuIHRoaXMgaXMgdXAgdG8gZGF0ZS4gTm90ZSB0aGF0IHRo
aXMgdmFsdWUgbWlnaHQgZGlmZmVyCisJICogZnJvbSB0aGUgdXNlciB2YWx1ZSBzZXQgaW4gZS5n
LiBhIC5jb25maWcgZmlsZSwgZHVlIHRvIHZpc2liaWxpdHkuCisJICovCisJc3RydWN0IHN5bWJv
bF92YWx1ZSBjdXJyOworCisJLyoKKwkgKiBWYWx1ZXMgZm9yIHRoZSBzeW1ib2wgcHJvdmlkZWQg
ZnJvbSBvdXRzaWRlLiBkZWZbU19ERUZfVVNFUl0gaG9sZHMKKwkgKiB0aGUgLmNvbmZpZyB2YWx1
ZS4KKwkgKi8KKwlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIGRlZltTX0RFRl9DT1VOVF07CisKKwkvKgor
CSAqIEFuIHVwcGVyIGJvdW5kIG9uIHRoZSB0cmlzdGF0ZSB2YWx1ZSB0aGUgdXNlciBjYW4gc2V0
IGZvciB0aGUgc3ltYm9sCisJICogaWYgaXQgaXMgYSBib29sZWFuIG9yIHRyaXN0YXRlLiBDYWxj
dWxhdGVkIGZyb20gcHJvbXB0IGRlcGVuZGVuY2llcywKKwkgKiB3aGljaCBhbHNvIGluaGVyaXQg
ZGVwZW5kZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9pY2VzLCBhbmQKKwkgKiBpZnMu
IElmICduJywgdGhlIHVzZXIgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgorCSAqCisJICogU3ltYm9s
cyBsYWNraW5nIHByb21wdHMgYWx3YXlzIGhhdmUgdmlzaWJpbGl0eSAnbicuCisJICovCisJdHJp
c3RhdGUgdmlzaWJsZTsKKworCS8qIFNZTUJPTF8qIGZsYWdzICovCisJaW50IGZsYWdzOworCisJ
LyogTGlzdCBvZiBwcm9wZXJ0aWVzLiBTZWUgcHJvcF90eXBlLiAqLworCXN0cnVjdCBwcm9wZXJ0
eSAqcHJvcDsKKworCS8qIERlcGVuZGVuY2llcyBmcm9tIGVuY2xvc2luZyBtZW51cywgY2hvaWNl
cywgYW5kIGlmcyAqLworCXN0cnVjdCBleHByX3ZhbHVlIGRpcl9kZXA7CisKKwkvKiBSZXZlcnNl
IGRlcGVuZGVuY2llcyB0aHJvdWdoIGJlaW5nIHNlbGVjdGVkIGJ5IG90aGVyIHN5bWJvbHMgKi8K
KwlzdHJ1Y3QgZXhwcl92YWx1ZSByZXZfZGVwOworCisJLyoKKwkgKiAiV2VhayIgcmV2ZXJzZSBk
ZXBlbmRlbmNpZXMgdGhyb3VnaCBiZWluZyBpbXBsaWVkIGJ5IG90aGVyIHN5bWJvbHMKKwkgKi8K
KwlzdHJ1Y3QgZXhwcl92YWx1ZSBpbXBsaWVkOworfTsKKworI2RlZmluZSBmb3JfYWxsX3N5bWJv
bHMoaSwgc3ltKSBmb3IgKGkgPSAwOyBpIDwgU1lNQk9MX0hBU0hTSVpFOyBpKyspIGZvciAoc3lt
ID0gc3ltYm9sX2hhc2hbaV07IHN5bTsgc3ltID0gc3ltLT5uZXh0KQorCisjZGVmaW5lIFNZTUJP
TF9DT05TVCAgICAgIDB4MDAwMSAgLyogc3ltYm9sIGlzIGNvbnN0ICovCisjZGVmaW5lIFNZTUJP
TF9DSEVDSyAgICAgIDB4MDAwOCAgLyogdXNlZCBkdXJpbmcgZGVwZW5kZW5jeSBjaGVja2luZyAq
LworI2RlZmluZSBTWU1CT0xfQ0hPSUNFICAgICAweDAwMTAgIC8qIHN0YXJ0IG9mIGEgY2hvaWNl
IGJsb2NrIChudWxsIG5hbWUpICovCisjZGVmaW5lIFNZTUJPTF9DSE9JQ0VWQUwgIDB4MDAyMCAg
LyogdXNlZCBhcyBhIHZhbHVlIGluIGEgY2hvaWNlIGJsb2NrICovCisjZGVmaW5lIFNZTUJPTF9W
QUxJRCAgICAgIDB4MDA4MCAgLyogc2V0IHdoZW4gc3ltYm9sLmN1cnIgaXMgY2FsY3VsYXRlZCAq
LworI2RlZmluZSBTWU1CT0xfT1BUSU9OQUwgICAweDAxMDAgIC8qIGNob2ljZSBpcyBvcHRpb25h
bCAtIHZhbHVlcyBjYW4gYmUgJ24nICovCisjZGVmaW5lIFNZTUJPTF9XUklURSAgICAgIDB4MDIw
MCAgLyogd3JpdGUgc3ltYm9sIHRvIGZpbGUgKEtDT05GSUdfQ09ORklHKSAqLworI2RlZmluZSBT
WU1CT0xfQ0hBTkdFRCAgICAweDA0MDAgIC8qID8gKi8KKyNkZWZpbmUgU1lNQk9MX05PX1dSSVRF
ICAgMHgxMDAwICAvKiBTeW1ib2wgZm9yIGludGVybmFsIHVzZSBvbmx5OyBpdCB3aWxsIG5vdCBi
ZSB3cml0dGVuICovCisjZGVmaW5lIFNZTUJPTF9DSEVDS0VEICAgIDB4MjAwMCAgLyogdXNlZCBk
dXJpbmcgZGVwZW5kZW5jeSBjaGVja2luZyAqLworI2RlZmluZSBTWU1CT0xfV0FSTkVEICAgICAw
eDgwMDAgIC8qIHdhcm5pbmcgaGFzIGJlZW4gaXNzdWVkICovCisKKy8qIFNldCB3aGVuIHN5bWJv
bC5kZWZbXSBpcyB1c2VkICovCisjZGVmaW5lIFNZTUJPTF9ERUYgICAgICAgIDB4MTAwMDAgIC8q
IEZpcnN0IGJpdCBvZiBTWU1CT0xfREVGICovCisjZGVmaW5lIFNZTUJPTF9ERUZfVVNFUiAgIDB4
MTAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfVVNFUl0gaXMgdmFsaWQgKi8KKyNkZWZpbmUgU1lN
Qk9MX0RFRl9BVVRPICAgMHgyMDAwMCAgLyogc3ltYm9sLmRlZltTX0RFRl9BVVRPXSBpcyB2YWxp
ZCAqLworI2RlZmluZSBTWU1CT0xfREVGMyAgICAgICAweDQwMDAwICAvKiBzeW1ib2wuZGVmW1Nf
REVGXzNdIGlzIHZhbGlkICovCisjZGVmaW5lIFNZTUJPTF9ERUY0ICAgICAgIDB4ODAwMDAgIC8q
IHN5bWJvbC5kZWZbU19ERUZfNF0gaXMgdmFsaWQgKi8KKworLyogY2hvaWNlIHZhbHVlcyBuZWVk
IHRvIGJlIHNldCBiZWZvcmUgY2FsY3VsYXRpbmcgdGhpcyBzeW1ib2wgdmFsdWUgKi8KKyNkZWZp
bmUgU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMgIDB4MTAwMDAwCisKKy8qIFNldCBzeW1i
b2wgdG8geSBpZiBhbGxub2NvbmZpZzsgdXNlZCBmb3Igc3ltYm9scyB0aGF0IGhpZGUgb3RoZXJz
ICovCisjZGVmaW5lIFNZTUJPTF9BTExOT0NPTkZJR19ZIDB4MjAwMDAwCisKKyNkZWZpbmUgU1lN
Qk9MX01BWExFTkdUSAkyNTYKKyNkZWZpbmUgU1lNQk9MX0hBU0hTSVpFCQk5OTczCisKKy8qIEEg
cHJvcGVydHkgcmVwcmVzZW50IHRoZSBjb25maWcgb3B0aW9ucyB0aGF0IGNhbiBiZSBhc3NvY2lh
dGVkCisgKiB3aXRoIGEgY29uZmlnICJzeW1ib2wiLgorICogU2FtcGxlOgorICogY29uZmlnIEZP
TworICogICAgICAgICBkZWZhdWx0IHkKKyAqICAgICAgICAgcHJvbXB0ICJmb28gcHJvbXB0Igor
ICogICAgICAgICBzZWxlY3QgQkFSCisgKiBjb25maWcgQkFaCisgKiAgICAgICAgIGludCAiQkFa
IFZhbHVlIgorICogICAgICAgICByYW5nZSAxLi4yNTUKKyAqCisgKiBQbGVhc2UsIGFsc28gY2hl
Y2sgcGFyc2VyLnk6cHJpbnRfc3ltYm9sKCkgd2hlbiBtb2RpZnlpbmcgdGhlCisgKiBsaXN0IG9m
IHByb3BlcnR5IHR5cGVzIQorICovCitlbnVtIHByb3BfdHlwZSB7CisJUF9VTktOT1dOLAorCVBf
UFJPTVBULCAgIC8qIHByb21wdCAiZm9vIHByb21wdCIgb3IgIkJBWiBWYWx1ZSIgKi8KKwlQX0NP
TU1FTlQsICAvKiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1lbnQgKi8KKwlQX01FTlUsICAg
ICAvKiBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIGEgbWVudSBvciBtZW51Y29uZmlnIHN5bWJvbCAq
LworCVBfREVGQVVMVCwgIC8qIGRlZmF1bHQgeSAqLworCVBfQ0hPSUNFLCAgIC8qIGNob2ljZSB2
YWx1ZSAqLworCVBfU0VMRUNULCAgIC8qIHNlbGVjdCBCQVIgKi8KKwlQX0lNUExZLCAgICAvKiBp
bXBseSBCQVIgKi8KKwlQX1JBTkdFLCAgICAvKiByYW5nZSA3Li4xMDAgKGZvciBhIHN5bWJvbCkg
Ki8KKwlQX1NZTUJPTCwgICAvKiB3aGVyZSBhIHN5bWJvbCBpcyBkZWZpbmVkICovCit9OworCitz
dHJ1Y3QgcHJvcGVydHkgeworCXN0cnVjdCBwcm9wZXJ0eSAqbmV4dDsgICAgIC8qIG5leHQgcHJv
cGVydHkgLSBudWxsIGlmIGxhc3QgKi8KKwlzdHJ1Y3Qgc3ltYm9sICpzeW07ICAgICAgICAvKiB0
aGUgc3ltYm9sIGZvciB3aGljaCB0aGUgcHJvcGVydHkgaXMgYXNzb2NpYXRlZCAqLworCWVudW0g
cHJvcF90eXBlIHR5cGU7ICAgICAgIC8qIHR5cGUgb2YgcHJvcGVydHkgKi8KKwljb25zdCBjaGFy
ICp0ZXh0OyAgICAgICAgICAvKiB0aGUgcHJvbXB0IHZhbHVlIC0gUF9QUk9NUFQsIFBfTUVOVSwg
UF9DT01NRU5UICovCisJc3RydWN0IGV4cHJfdmFsdWUgdmlzaWJsZTsKKwlzdHJ1Y3QgZXhwciAq
ZXhwcjsgICAgICAgICAvKiB0aGUgb3B0aW9uYWwgY29uZGl0aW9uYWwgcGFydCBvZiB0aGUgcHJv
cGVydHkgKi8KKwlzdHJ1Y3QgbWVudSAqbWVudTsgICAgICAgICAvKiB0aGUgbWVudSB0aGUgcHJv
cGVydHkgYXJlIGFzc29jaWF0ZWQgd2l0aAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
IHZhbGlkIGZvcjogUF9TRUxFQ1QsIFBfUkFOR0UsIFBfQ0hPSUNFLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAqIFBfUFJPTVBULCBQX0RFRkFVTFQsIFBfTUVOVSwgUF9DT01NRU5UICov
CisJc3RydWN0IGZpbGUgKmZpbGU7ICAgICAgICAgLyogd2hhdCBmaWxlIHdhcyB0aGlzIHByb3Bl
cnR5IGRlZmluZWQgKi8KKwlpbnQgbGluZW5vOyAgICAgICAgICAgICAgICAvKiB3aGF0IGxpbmVu
byB3YXMgdGhpcyBwcm9wZXJ0eSBkZWZpbmVkICovCit9OworCisjZGVmaW5lIGZvcl9hbGxfcHJv
cGVydGllcyhzeW0sIHN0LCB0b2spIFwKKwlmb3IgKHN0ID0gc3ltLT5wcm9wOyBzdDsgc3QgPSBz
dC0+bmV4dCkgXAorCQlpZiAoc3QtPnR5cGUgPT0gKHRvaykpCisjZGVmaW5lIGZvcl9hbGxfZGVm
YXVsdHMoc3ltLCBzdCkgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIFBfREVGQVVMVCkKKyNk
ZWZpbmUgZm9yX2FsbF9jaG9pY2VzKHN5bSwgc3QpIGZvcl9hbGxfcHJvcGVydGllcyhzeW0sIHN0
LCBQX0NIT0lDRSkKKyNkZWZpbmUgZm9yX2FsbF9wcm9tcHRzKHN5bSwgc3QpIFwKKwlmb3IgKHN0
ID0gc3ltLT5wcm9wOyBzdDsgc3QgPSBzdC0+bmV4dCkgXAorCQlpZiAoc3QtPnRleHQpCisKKy8q
CisgKiBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgbWVudSB0cmVlLCBhcyBzZWVuIGluIGUuZy4g
bWVudWNvbmZpZyAodGhvdWdoIHVzZWQKKyAqIGZvciBhbGwgZnJvbnQgZW5kcykuIEVhY2ggc3lt
Ym9sLCBtZW51LCBldGMuIGRlZmluZWQgaW4gdGhlIEtjb25maWcgZmlsZXMKKyAqIGdldHMgYSBu
b2RlLiBBIHN5bWJvbCBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucyBnZXRzIG9uZSBub2Rl
IGF0IGVhY2gKKyAqIGxvY2F0aW9uLgorICovCitzdHJ1Y3QgbWVudSB7CisJLyogVGhlIG5leHQg
bWVudSBub2RlIGF0IHRoZSBzYW1lIGxldmVsICovCisJc3RydWN0IG1lbnUgKm5leHQ7CisKKwkv
KiBUaGUgcGFyZW50IG1lbnUgbm9kZSwgY29ycmVzcG9uZGluZyB0byBlLmcuIGEgbWVudSBvciBj
aG9pY2UgKi8KKwlzdHJ1Y3QgbWVudSAqcGFyZW50OworCisJLyogVGhlIGZpcnN0IGNoaWxkIG1l
bnUgbm9kZSwgZm9yIGUuZy4gbWVudXMgYW5kIGNob2ljZXMgKi8KKwlzdHJ1Y3QgbWVudSAqbGlz
dDsKKworCS8qCisJICogVGhlIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUgbm9kZS4g
Q2hvaWNlcyBhcmUgaW1wbGVtZW50ZWQgYXMKKwkgKiBhIHNwZWNpYWwga2luZCBvZiBzeW1ib2wu
IE5VTEwgZm9yIG1lbnVzLCBjb21tZW50cywgYW5kIGlmcy4KKwkgKi8KKwlzdHJ1Y3Qgc3ltYm9s
ICpzeW07CisKKwkvKgorCSAqIFRoZSBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlLiBU
aGlzIGhvbGRzIHRoZSBwcm9tcHQgZm9yIGEKKwkgKiBzeW1ib2wgYXMgd2VsbCBhcyB0aGUgdGV4
dCBmb3IgYSBtZW51IG9yIGNvbW1lbnQsIGFsb25nIHdpdGggdGhlCisJICogdHlwZSAoUF9QUk9N
UFQsIFBfTUVOVSwgZXRjLikKKwkgKi8KKwlzdHJ1Y3QgcHJvcGVydHkgKnByb21wdDsKKworCS8q
CisJICogJ3Zpc2libGUgaWYnIGRlcGVuZGVuY2llcy4gSWYgbW9yZSB0aGFuIG9uZSBpcyBnaXZl
biwgdGhleSB3aWxsIGJlCisJICogQU5EZWQgdG9nZXRoZXIuCisJICovCisJc3RydWN0IGV4cHIg
KnZpc2liaWxpdHk7CisKKwkvKgorCSAqIE9yZGluYXJ5IGRlcGVuZGVuY2llcyBmcm9tIGUuZy4g
J2RlcGVuZHMgb24nIGFuZCAnaWYnLCBBTkRlZAorCSAqIHRvZ2V0aGVyCisJICovCisJc3RydWN0
IGV4cHIgKmRlcDsKKworCS8qIE1FTlVfKiBmbGFncyAqLworCXVuc2lnbmVkIGludCBmbGFnczsK
KworCS8qIEFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlICovCisJY2hhciAq
aGVscDsKKworCS8qIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgbWVudSBub2RlIGFwcGVhcnMgaW4g
dGhlIEtjb25maWcgZmlsZXMgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgbGluZW5vOwor
CisJLyogRm9yIHVzZSBieSBmcm9udCBlbmRzIHRoYXQgbmVlZCB0byBzdG9yZSBhdXhpbGlhcnkg
ZGF0YSAqLworCXZvaWQgKmRhdGE7Cit9OworCisvKgorICogU2V0IG9uIGEgbWVudSBub2RlIHdo
ZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9sIGNoYW5nZXMgc3RhdGUgaW4gc29tZSB3YXkuCisg
KiBDYW4gYmUgY2hlY2tlZCBieSBmcm9udCBlbmRzLgorICovCisjZGVmaW5lIE1FTlVfQ0hBTkdF
RAkJMHgwMDAxCisKKyNkZWZpbmUgTUVOVV9ST09UCQkweDAwMDIKKworc3RydWN0IGp1bXBfa2V5
IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJpZXM7CisJc2l6ZV90IG9mZnNldDsKKwlzdHJ1Y3Qg
bWVudSAqdGFyZ2V0OworCWludCBpbmRleDsKK307CisKKyNkZWZpbmUgSlVNUF9OQgkJCTkKKwor
ZXh0ZXJuIHN0cnVjdCBmaWxlICpmaWxlX2xpc3Q7CitleHRlcm4gc3RydWN0IGZpbGUgKmN1cnJl
bnRfZmlsZTsKK3N0cnVjdCBmaWxlICpsb29rdXBfZmlsZShjb25zdCBjaGFyICpuYW1lKTsKKwor
ZXh0ZXJuIHN0cnVjdCBzeW1ib2wgc3ltYm9sX3llcywgc3ltYm9sX25vLCBzeW1ib2xfbW9kOwor
ZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKm1vZHVsZXNfc3ltOworZXh0ZXJuIHN0cnVjdCBzeW1ib2wg
KnN5bV9kZWZjb25maWdfbGlzdDsKK2V4dGVybiBpbnQgY2RlYnVnOworc3RydWN0IGV4cHIgKmV4
cHJfYWxsb2Nfc3ltYm9sKHN0cnVjdCBzeW1ib2wgKnN5bSk7CitzdHJ1Y3QgZXhwciAqZXhwcl9h
bGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmNlKTsKK3N0cnVjdCBl
eHByICpleHByX2FsbG9jX3R3byhlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZTEs
IHN0cnVjdCBleHByICplMik7CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19jb21wKGVudW0gZXhw
cl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnMxLCBzdHJ1Y3Qgc3ltYm9sICpzMik7CitzdHJ1
Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIp
Oworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfb3Ioc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhw
ciAqZTIpOworc3RydWN0IGV4cHIgKmV4cHJfY29weShjb25zdCBzdHJ1Y3QgZXhwciAqb3JnKTsK
K3ZvaWQgZXhwcl9mcmVlKHN0cnVjdCBleHByICplKTsKK3ZvaWQgZXhwcl9lbGltaW5hdGVfZXEo
c3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKK3RyaXN0YXRlIGV4cHJfY2Fs
Y192YWx1ZShzdHJ1Y3QgZXhwciAqZSk7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19ib29sKHN0
cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX2VsaW1pbmF0ZV9kdXBzKHN0cnVjdCBl
eHByICplKTsKK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAqZSk7Citp
bnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAq
c3ltKTsKK2Jvb2wgZXhwcl9kZXBlbmRzX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qg
c3ltYm9sICpzeW0pOworc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNfY29tcGFyZShzdHJ1Y3QgZXhw
ciAqZSwgZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltKTsKKwordm9pZCBl
eHByX2ZwcmludChzdHJ1Y3QgZXhwciAqZSwgRklMRSAqb3V0KTsKK3N0cnVjdCBnc3RyOyAvKiBm
b3J3YXJkICovCit2b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdz
dHIgKmdzKTsKK3ZvaWQgZXhwcl9nc3RyX3ByaW50X3JldmRlcChzdHJ1Y3QgZXhwciAqZSwgc3Ry
dWN0IGdzdHIgKmdzLAorCQkJICAgIHRyaXN0YXRlIHByX3R5cGUsIGNvbnN0IGNoYXIgKnRpdGxl
KTsKKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc195ZXMoc3RydWN0IGV4cHIgKmUpCit7CisJ
cmV0dXJuICFlIHx8IChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQuc3ltID09ICZzeW1i
b2xfeWVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc19ubyhzdHJ1Y3QgZXhwciAq
ZSkKK3sKKwlyZXR1cm4gZSAmJiAoZS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlLT5sZWZ0LnN5bSA9
PSAmc3ltYm9sX25vKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2Vu
ZGlmIC8qIEVYUFJfSCAqLwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi1j
Zmcuc2ggYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaApuZXcgZmlsZSBtb2RlIDEw
MDc1NQppbmRleCAwMDAwMDAwMC4uNDgwZWNkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L2djb25mLWNmZy5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKyMg
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJndGsrLTIuMCBnbW9kdWxl
LTIuMCBsaWJnbGFkZS0yLjAiCisKK2lmIFsgLXogIiQoY29tbWFuZCAtdiBwa2ctY29uZmlnKSIg
XTsgdGhlbgorCWVjaG8gPiYyICIqIgorCWVjaG8gPiYyICIqICdtYWtlIGdjb25maWcnIHJlcXVp
cmVzICdwa2ctY29uZmlnJy4gUGxlYXNlIGluc3RhbGwgaXQuIgorCWVjaG8gPiYyICIqIgorCWV4
aXQgMQorZmkKKworaWYgISBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0c7IHRoZW4KKwllY2hvID4m
MiAiKiIKKwllY2hvID4mMiAiKiBVbmFibGUgdG8gZmluZCB0aGUgR1RLKyBpbnN0YWxsYXRpb24u
IFBsZWFzZSBtYWtlIHN1cmUgdGhhdCIKKwllY2hvID4mMiAiKiB0aGUgR1RLKyAyLjAgZGV2ZWxv
cG1lbnQgcGFja2FnZSBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkLiIKKwllY2hvID4mMiAiKiBZb3Ug
bmVlZCAkUEtHIgorCWVjaG8gPiYyICIqIgorCWV4aXQgMQorZmkKKworaWYgISBwa2ctY29uZmln
IC0tYXRsZWFzdC12ZXJzaW9uPTIuMC4wIGd0aystMi4wOyB0aGVuCisJZWNobyA+JjIgIioiCisJ
ZWNobyA+JjIgIiogR1RLKyBpcyBwcmVzZW50IGJ1dCB2ZXJzaW9uID49IDIuMC4wIGlzIHJlcXVp
cmVkLiIKKwllY2hvID4mMiAiKiIKKwlleGl0IDEKK2ZpCisKK2VjaG8gY2ZsYWdzPVwiJChwa2ct
Y29uZmlnIC0tY2ZsYWdzICRQS0cpXCIKK2VjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMg
JFBLRylcIgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9nY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
Li5lMzZiMzQyZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYu
YwpAQCAtMCwwICsxLDE1MTYgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgUm9tYWluIExpZXZpbiA8cm9tc0B0aWxw
LmluZm8+CisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyMgIGluY2x1ZGUgPGNvbmZpZy5o
PgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsa2MuaCIKKyNpbmNs
dWRlICJpbWFnZXMuaCIKKworI2luY2x1ZGUgPGdsYWRlL2dsYWRlLmg+CisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgor
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKy8vI2RlZmluZSBERUJVRworCitlbnVtIHsKKwlT
SU5HTEVfVklFVywgU1BMSVRfVklFVywgRlVMTF9WSUVXCit9OworCitlbnVtIHsKKwlPUFRfTk9S
TUFMLCBPUFRfQUxMLCBPUFRfUFJPTVBUCit9OworCitzdGF0aWMgZ2ludCB2aWV3X21vZGUgPSBG
VUxMX1ZJRVc7CitzdGF0aWMgZ2Jvb2xlYW4gc2hvd19uYW1lID0gVFJVRTsKK3N0YXRpYyBnYm9v
bGVhbiBzaG93X3JhbmdlID0gVFJVRTsKK3N0YXRpYyBnYm9vbGVhbiBzaG93X3ZhbHVlID0gVFJV
RTsKK3N0YXRpYyBnYm9vbGVhbiByZXNpemVhYmxlID0gRkFMU0U7CitzdGF0aWMgaW50IG9wdF9t
b2RlID0gT1BUX05PUk1BTDsKKworR3RrV2lkZ2V0ICptYWluX3duZCA9IE5VTEw7CitHdGtXaWRn
ZXQgKnRyZWUxX3cgPSBOVUxMOwkvLyBsZWZ0ICBmcmFtZQorR3RrV2lkZ2V0ICp0cmVlMl93ID0g
TlVMTDsJLy8gcmlnaHQgZnJhbWUKK0d0a1dpZGdldCAqdGV4dF93ID0gTlVMTDsKK0d0a1dpZGdl
dCAqaHBhbmVkID0gTlVMTDsKK0d0a1dpZGdldCAqdnBhbmVkID0gTlVMTDsKK0d0a1dpZGdldCAq
YmFja19idG4gPSBOVUxMOworR3RrV2lkZ2V0ICpzYXZlX2J0biA9IE5VTEw7CitHdGtXaWRnZXQg
KnNhdmVfbWVudV9pdGVtID0gTlVMTDsKKworR3RrVGV4dFRhZyAqdGFnMSwgKnRhZzI7CitHZGtD
b2xvciBjb2xvcjsKKworR3RrVHJlZVN0b3JlICp0cmVlMSwgKnRyZWUyLCAqdHJlZTsKK0d0a1Ry
ZWVNb2RlbCAqbW9kZWwxLCAqbW9kZWwyOworc3RhdGljIEd0a1RyZWVJdGVyICpwYXJlbnRzWzI1
Nl07CitzdGF0aWMgZ2ludCBpbmRlbnQ7CisKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudDsg
Ly8gY3VycmVudCBub2RlIGZvciBTSU5HTEUgdmlldworc3RhdGljIHN0cnVjdCBtZW51ICpicm93
c2VkOyAvLyBicm93c2VkIG5vZGUgZm9yIFNQTElUIHZpZXcKKworZW51bSB7CisJQ09MX09QVElP
TiwgQ09MX05BTUUsIENPTF9OTywgQ09MX01PRCwgQ09MX1lFUywgQ09MX1ZBTFVFLAorCUNPTF9N
RU5VLCBDT0xfQ09MT1IsIENPTF9FRElULCBDT0xfUElYQlVGLAorCUNPTF9QSVhWSVMsIENPTF9C
VE5WSVMsIENPTF9CVE5BQ1QsIENPTF9CVE5JTkMsIENPTF9CVE5SQUQsCisJQ09MX05VTUJFUgor
fTsKKworc3RhdGljIHZvaWQgZGlzcGxheV9saXN0KHZvaWQpOworc3RhdGljIHZvaWQgZGlzcGxh
eV90cmVlKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZV9wYXJ0
KHZvaWQpOworc3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJl
ZUl0ZXIgKiBkc3QpOworc3RhdGljIHZvaWQgc2V0X25vZGUoR3RrVHJlZUl0ZXIgKiBub2RlLCBz
dHJ1Y3QgbWVudSAqbWVudSwgZ2NoYXIgKiogcm93KTsKK3N0YXRpYyBnY2hhciAqKmZpbGxfcm93
KHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKTsKKwor
LyogSGVscGluZy9EZWJ1Z2dpbmcgRnVuY3Rpb25zICovCisjaWZkZWYgREVCVUcKK3N0YXRpYyBj
b25zdCBjaGFyICpkYmdfc3ltX2ZsYWdzKGludCB2YWwpCit7CisJc3RhdGljIGNoYXIgYnVmWzI1
Nl07CisKKwliemVybyhidWYsIDI1Nik7CisKKwlpZiAodmFsICYgU1lNQk9MX0NPTlNUKQorCQlz
dHJjYXQoYnVmLCAiY29uc3QvIik7CisJaWYgKHZhbCAmIFNZTUJPTF9DSEVDSykKKwkJc3RyY2F0
KGJ1ZiwgImNoZWNrLyIpOworCWlmICh2YWwgJiBTWU1CT0xfQ0hPSUNFKQorCQlzdHJjYXQoYnVm
LCAiY2hvaWNlLyIpOworCWlmICh2YWwgJiBTWU1CT0xfQ0hPSUNFVkFMKQorCQlzdHJjYXQoYnVm
LCAiY2hvaWNldmFsLyIpOworCWlmICh2YWwgJiBTWU1CT0xfVkFMSUQpCisJCXN0cmNhdChidWYs
ICJ2YWxpZC8iKTsKKwlpZiAodmFsICYgU1lNQk9MX09QVElPTkFMKQorCQlzdHJjYXQoYnVmLCAi
b3B0aW9uYWwvIik7CisJaWYgKHZhbCAmIFNZTUJPTF9XUklURSkKKwkJc3RyY2F0KGJ1ZiwgIndy
aXRlLyIpOworCWlmICh2YWwgJiBTWU1CT0xfQ0hBTkdFRCkKKwkJc3RyY2F0KGJ1ZiwgImNoYW5n
ZWQvIik7CisJaWYgKHZhbCAmIFNZTUJPTF9OT19XUklURSkKKwkJc3RyY2F0KGJ1ZiwgIm5vX3dy
aXRlLyIpOworCisJYnVmW3N0cmxlbihidWYpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIGJ1ZjsK
K30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCByZXBsYWNlX2J1dHRvbl9pY29uKEdsYWRlWE1MICp4
bWwsIEdka0RyYXdhYmxlICp3aW5kb3csCisJCQkJR3RrU3R5bGUgKnN0eWxlLCBnY2hhciAqYnRu
X25hbWUsIGdjaGFyICoqeHBtKQoreworCUdka1BpeG1hcCAqcGl4bWFwOworCUdka0JpdG1hcCAq
bWFzazsKKwlHdGtUb29sQnV0dG9uICpidXR0b247CisJR3RrV2lkZ2V0ICppbWFnZTsKKworCXBp
eG1hcCA9IGdka19waXhtYXBfY3JlYXRlX2Zyb21feHBtX2Qod2luZG93LCAmbWFzaywKKwkJCQkJ
ICAgICAgJnN0eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFMXSwKKwkJCQkJICAgICAgeHBtKTsKKwor
CWJ1dHRvbiA9IEdUS19UT09MX0JVVFRPTihnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsIGJ0bl9u
YW1lKSk7CisJaW1hZ2UgPSBndGtfaW1hZ2VfbmV3X2Zyb21fcGl4bWFwKHBpeG1hcCwgbWFzayk7
CisJZ3RrX3dpZGdldF9zaG93KGltYWdlKTsKKwlndGtfdG9vbF9idXR0b25fc2V0X2ljb25fd2lk
Z2V0KGJ1dHRvbiwgaW1hZ2UpOworfQorCisvKiBNYWluIFdpbmRvdyBJbml0aWFsaXphdGlvbiAq
Lworc3RhdGljIHZvaWQgaW5pdF9tYWluX3dpbmRvdyhjb25zdCBnY2hhciAqZ2xhZGVfZmlsZSkK
K3sKKwlHbGFkZVhNTCAqeG1sOworCUd0a1dpZGdldCAqd2lkZ2V0OworCUd0a1RleHRCdWZmZXIg
KnR4dGJ1ZjsKKwlHdGtTdHlsZSAqc3R5bGU7CisKKwl4bWwgPSBnbGFkZV94bWxfbmV3KGdsYWRl
X2ZpbGUsICJ3aW5kb3cxIiwgTlVMTCk7CisJaWYgKCF4bWwpCisJCWdfZXJyb3IoIkdVSSBsb2Fk
aW5nIGZhaWxlZCAhXG4iKTsKKwlnbGFkZV94bWxfc2lnbmFsX2F1dG9jb25uZWN0KHhtbCk7CisK
KwltYWluX3duZCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgIndpbmRvdzEiKTsKKwlocGFu
ZWQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJocGFuZWQxIik7CisJdnBhbmVkID0gZ2xh
ZGVfeG1sX2dldF93aWRnZXQoeG1sLCAidnBhbmVkMSIpOworCXRyZWUxX3cgPSBnbGFkZV94bWxf
Z2V0X3dpZGdldCh4bWwsICJ0cmVldmlldzEiKTsKKwl0cmVlMl93ID0gZ2xhZGVfeG1sX2dldF93
aWRnZXQoeG1sLCAidHJlZXZpZXcyIik7CisJdGV4dF93ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQo
eG1sLCAidGV4dHZpZXczIik7CisKKwliYWNrX2J0biA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgImJ1dHRvbjEiKTsKKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNF
KTsKKworCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInNob3dfbmFtZTEiKTsK
KwlndGtfY2hlY2tfbWVudV9pdGVtX3NldF9hY3RpdmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lk
Z2V0LAorCQkJCSAgICAgICBzaG93X25hbWUpOworCisJd2lkZ2V0ID0gZ2xhZGVfeG1sX2dldF93
aWRnZXQoeG1sLCAic2hvd19yYW5nZTEiKTsKKwlndGtfY2hlY2tfbWVudV9pdGVtX3NldF9hY3Rp
dmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lkZ2V0LAorCQkJCSAgICAgICBzaG93X3JhbmdlKTsK
KworCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInNob3dfZGF0YTEiKTsKKwln
dGtfY2hlY2tfbWVudV9pdGVtX3NldF9hY3RpdmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lkZ2V0
LAorCQkJCSAgICAgICBzaG93X3ZhbHVlKTsKKworCXNhdmVfYnRuID0gZ2xhZGVfeG1sX2dldF93
aWRnZXQoeG1sLCAiYnV0dG9uMyIpOworCXNhdmVfbWVudV9pdGVtID0gZ2xhZGVfeG1sX2dldF93
aWRnZXQoeG1sLCAic2F2ZTEiKTsKKwljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZfY2hh
bmdlZCk7CisKKwlzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKG1haW5fd25kKTsKKwl3aWRn
ZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0b29sYmFyMSIpOworCisJcmVwbGFjZV9i
dXR0b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLAorCQkJICAgICJidXR0b240
IiwgKGdjaGFyICoqKSB4cG1fc2luZ2xlX3ZpZXcpOworCXJlcGxhY2VfYnV0dG9uX2ljb24oeG1s
LCBtYWluX3duZC0+d2luZG93LCBzdHlsZSwKKwkJCSAgICAiYnV0dG9uNSIsIChnY2hhciAqKikg
eHBtX3NwbGl0X3ZpZXcpOworCXJlcGxhY2VfYnV0dG9uX2ljb24oeG1sLCBtYWluX3duZC0+d2lu
ZG93LCBzdHlsZSwKKwkJCSAgICAiYnV0dG9uNiIsIChnY2hhciAqKikgeHBtX3RyZWVfdmlldyk7
CisKKwl0eHRidWYgPSBndGtfdGV4dF92aWV3X2dldF9idWZmZXIoR1RLX1RFWFRfVklFVyh0ZXh0
X3cpKTsKKwl0YWcxID0gZ3RrX3RleHRfYnVmZmVyX2NyZWF0ZV90YWcodHh0YnVmLCAibXl0YWcx
IiwKKwkJCQkJICAiZm9yZWdyb3VuZCIsICJyZWQiLAorCQkJCQkgICJ3ZWlnaHQiLCBQQU5HT19X
RUlHSFRfQk9MRCwKKwkJCQkJICBOVUxMKTsKKwl0YWcyID0gZ3RrX3RleHRfYnVmZmVyX2NyZWF0
ZV90YWcodHh0YnVmLCAibXl0YWcyIiwKKwkJCQkJICAvKiJzdHlsZSIsIFBBTkdPX1NUWUxFX09C
TElRVUUsICovCisJCQkJCSAgTlVMTCk7CisKKwlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lO
RE9XKG1haW5fd25kKSwgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKworCWd0a193aWRnZXRfc2hv
dyhtYWluX3duZCk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfdHJlZV9tb2RlbCh2b2lkKQorewor
CWdpbnQgaTsKKworCXRyZWUgPSB0cmVlMiA9IGd0a190cmVlX3N0b3JlX25ldyhDT0xfTlVNQkVS
LAorCQkJCQkgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsCisJCQkJCSAgR19UWVBFX1NU
UklORywgR19UWVBFX1NUUklORywKKwkJCQkJICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5H
LAorCQkJCQkgIEdfVFlQRV9QT0lOVEVSLCBHREtfVFlQRV9DT0xPUiwKKwkJCQkJICBHX1RZUEVf
Qk9PTEVBTiwgR0RLX1RZUEVfUElYQlVGLAorCQkJCQkgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVf
Qk9PTEVBTiwKKwkJCQkJICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sCisJCQkJCSAg
R19UWVBFX0JPT0xFQU4pOworCW1vZGVsMiA9IEdUS19UUkVFX01PREVMKHRyZWUyKTsKKworCWZv
ciAocGFyZW50c1swXSA9IE5VTEwsIGkgPSAxOyBpIDwgMjU2OyBpKyspCisJCXBhcmVudHNbaV0g
PSAoR3RrVHJlZUl0ZXIgKikgZ19tYWxsb2Moc2l6ZW9mKEd0a1RyZWVJdGVyKSk7CisKKwl0cmVl
MSA9IGd0a190cmVlX3N0b3JlX25ldyhDT0xfTlVNQkVSLAorCQkJCSAgIEdfVFlQRV9TVFJJTkcs
IEdfVFlQRV9TVFJJTkcsCisJCQkJICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywKKwkJ
CQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLAorCQkJCSAgIEdfVFlQRV9QT0lOVEVS
LCBHREtfVFlQRV9DT0xPUiwKKwkJCQkgICBHX1RZUEVfQk9PTEVBTiwgR0RLX1RZUEVfUElYQlVG
LAorCQkJCSAgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfQk9PTEVBTiwKKwkJCQkgICBHX1RZUEVf
Qk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sCisJCQkJICAgR19UWVBFX0JPT0xFQU4pOworCW1vZGVs
MSA9IEdUS19UUkVFX01PREVMKHRyZWUxKTsKK30KKworc3RhdGljIHZvaWQgaW5pdF9sZWZ0X3Ry
ZWUodm9pZCkKK3sKKwlHdGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVcodHJlZTFfdyk7
CisJR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsKKwlHdGtUcmVlU2VsZWN0aW9uICpzZWw7CisJ
R3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKKworCWd0a190cmVlX3ZpZXdfc2V0X21vZGVsKHZp
ZXcsIG1vZGVsMSk7CisJZ3RrX3RyZWVfdmlld19zZXRfaGVhZGVyc192aXNpYmxlKHZpZXcsIFRS
VUUpOworCWd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQodmlldywgVFJVRSk7CisKKwljb2x1
bW4gPSBndGtfdHJlZV92aWV3X2NvbHVtbl9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2FwcGVuZF9j
b2x1bW4odmlldywgY29sdW1uKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdGl0bGUoY29s
dW1uLCAiT3B0aW9ucyIpOworCisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVf
bmV3KCk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NP
TFVNTihjb2x1bW4pLAorCQkJCQlyZW5kZXJlciwgRkFMU0UpOworCWd0a190cmVlX3ZpZXdfY29s
dW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCSAg
ICByZW5kZXJlciwKKwkJCQkJICAgICJhY3RpdmUiLCBDT0xfQlROQUNULAorCQkJCQkgICAgImlu
Y29uc2lzdGVudCIsIENPTF9CVE5JTkMsCisJCQkJCSAgICAidmlzaWJsZSIsIENPTF9CVE5WSVMs
CisJCQkJCSAgICAicmFkaW8iLCBDT0xfQlROUkFELCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19j
ZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFy
dChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJCQlyZW5kZXJlciwgRkFMU0UpOwor
CWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1O
KGNvbHVtbiksCisJCQkJCSAgICByZW5kZXJlciwKKwkJCQkJICAgICJ0ZXh0IiwgQ09MX09QVElP
TiwKKwkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsCisJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwp
OworCisJc2VsID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHZpZXcpOworCWd0a190cmVl
X3NlbGVjdGlvbl9zZXRfbW9kZShzZWwsIEdUS19TRUxFQ1RJT05fU0lOR0xFKTsKKwlndGtfd2lk
Z2V0X3JlYWxpemUodHJlZTFfdyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbmRlcmVyX2VkaXRlZChH
dGtDZWxsUmVuZGVyZXJUZXh0ICogY2VsbCwKKwkJCSAgICBjb25zdCBnY2hhciAqIHBhdGhfc3Ry
aW5nLAorCQkJICAgIGNvbnN0IGdjaGFyICogbmV3X3RleHQsIGdwb2ludGVyIHVzZXJfZGF0YSk7
CisKK3N0YXRpYyB2b2lkIGluaXRfcmlnaHRfdHJlZSh2b2lkKQoreworCUd0a1RyZWVWaWV3ICp2
aWV3ID0gR1RLX1RSRUVfVklFVyh0cmVlMl93KTsKKwlHdGtDZWxsUmVuZGVyZXIgKnJlbmRlcmVy
OworCUd0a1RyZWVTZWxlY3Rpb24gKnNlbDsKKwlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOwor
CWdpbnQgaTsKKworCWd0a190cmVlX3ZpZXdfc2V0X21vZGVsKHZpZXcsIG1vZGVsMik7CisJZ3Rr
X3RyZWVfdmlld19zZXRfaGVhZGVyc192aXNpYmxlKHZpZXcsIFRSVUUpOworCWd0a190cmVlX3Zp
ZXdfc2V0X3J1bGVzX2hpbnQodmlldywgVFJVRSk7CisKKwljb2x1bW4gPSBndGtfdHJlZV92aWV3
X2NvbHVtbl9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2FwcGVuZF9jb2x1bW4odmlldywgY29sdW1u
KTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdGl0bGUoY29sdW1uLCAiT3B0aW9ucyIpOwor
CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl9waXhidWZfbmV3KCk7CisJZ3RrX3RyZWVf
dmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJ
CQlyZW5kZXJlciwgRkFMU0UpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVz
KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCSAgICByZW5kZXJlciwKKwkJCQkJ
ICAgICJwaXhidWYiLCBDT0xfUElYQlVGLAorCQkJCQkgICAgInZpc2libGUiLCBDT0xfUElYVklT
LCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RvZ2dsZV9uZXcoKTsKKwln
dGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVt
biksCisJCQkJCXJlbmRlcmVyLCBGQUxTRSk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0
dHJpYnV0ZXMoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJICAgIHJlbmRlcmVy
LAorCQkJCQkgICAgImFjdGl2ZSIsIENPTF9CVE5BQ1QsCisJCQkJCSAgICAiaW5jb25zaXN0ZW50
IiwgQ09MX0JUTklOQywKKwkJCQkJICAgICJ2aXNpYmxlIiwgQ09MX0JUTlZJUywKKwkJCQkJICAg
ICJyYWRpbyIsIENPTF9CVE5SQUQsIE5VTEwpOworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVy
ZXJfdGV4dF9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVF
X1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCXJlbmRlcmVyLCBGQUxTRSk7CisJZ3RrX3RyZWVf
dmlld19jb2x1bW5fc2V0X2F0dHJpYnV0ZXMoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwK
KwkJCQkJICAgIHJlbmRlcmVyLAorCQkJCQkgICAgInRleHQiLCBDT0xfT1BUSU9OLAorCQkJCQkg
ICAgImZvcmVncm91bmQtZ2RrIiwKKwkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7CisKKwlyZW5k
ZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7CisJZ3RrX3RyZWVfdmlld19pbnNl
cnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwKKwkJCQkJCSAgICAiTmFtZSIsIHJl
bmRlcmVyLAorCQkJCQkJICAgICJ0ZXh0IiwgQ09MX05BTUUsCisJCQkJCQkgICAgImZvcmVncm91
bmQtZ2RrIiwKKwkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOworCXJlbmRlcmVyID0gZ3RrX2Nl
bGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0
aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLAorCQkJCQkJICAgICJOIiwgcmVuZGVyZXIsCisJCQkJCQkg
ICAgInRleHQiLCBDT0xfTk8sCisJCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwKKwkJCQkJCSAg
ICBDT0xfQ09MT1IsIE5VTEwpOworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9u
ZXcoKTsKKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcs
IC0xLAorCQkJCQkJICAgICJNIiwgcmVuZGVyZXIsCisJCQkJCQkgICAgInRleHQiLCBDT0xfTU9E
LAorCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsCisJCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxM
KTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7CisJZ3RrX3RyZWVf
dmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwKKwkJCQkJCSAgICAi
WSIsIHJlbmRlcmVyLAorCQkJCQkJICAgICJ0ZXh0IiwgQ09MX1lFUywKKwkJCQkJCSAgICAiZm9y
ZWdyb3VuZC1nZGsiLAorCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7CisJcmVuZGVyZXIgPSBn
dGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVt
bl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsCisJCQkJCQkgICAgIlZhbHVlIiwgcmVuZGVyZXIs
CisJCQkJCQkgICAgInRleHQiLCBDT0xfVkFMVUUsCisJCQkJCQkgICAgImVkaXRhYmxlIiwKKwkJ
CQkJCSAgICBDT0xfRURJVCwKKwkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLAorCQkJCQkJICAg
IENPTF9DT0xPUiwgTlVMTCk7CisJZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChyZW5kZXJlciks
ICJlZGl0ZWQiLAorCQkJIEdfQ0FMTEJBQ0socmVuZGVyZXJfZWRpdGVkKSwgTlVMTCk7CisKKwlj
b2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywgQ09MX05BTUUpOworCWd0a190
cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwgc2hvd19uYW1lKTsKKwljb2x1bW4g
PSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywgQ09MX05PKTsKKwlndGtfdHJlZV92aWV3
X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfcmFuZ2UpOworCWNvbHVtbiA9IGd0a190
cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xfTU9EKTsKKwlndGtfdHJlZV92aWV3X2NvbHVt
bl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfcmFuZ2UpOworCWNvbHVtbiA9IGd0a190cmVlX3Zp
ZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xfWUVTKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRf
dmlzaWJsZShjb2x1bW4sIHNob3dfcmFuZ2UpOworCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0
X2NvbHVtbih2aWV3LCBDT0xfVkFMVUUpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNp
YmxlKGNvbHVtbiwgc2hvd192YWx1ZSk7CisKKwlpZiAocmVzaXplYWJsZSkgeworCQlmb3IgKGkg
PSAwOyBpIDwgQ09MX1ZBTFVFOyBpKyspIHsKKwkJCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0
X2NvbHVtbih2aWV3LCBpKTsKKwkJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9yZXNpemFibGUo
Y29sdW1uLCBUUlVFKTsKKwkJfQorCX0KKworCXNlbCA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVj
dGlvbih2aWV3KTsKKwlndGtfdHJlZV9zZWxlY3Rpb25fc2V0X21vZGUoc2VsLCBHVEtfU0VMRUNU
SU9OX1NJTkdMRSk7Cit9CisKKworLyogVXRpbGl0eSBGdW5jdGlvbnMgKi8KKworCitzdGF0aWMg
dm9pZCB0ZXh0X2luc2VydF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQoreworCUd0a1RleHRCdWZm
ZXIgKmJ1ZmZlcjsKKwlHdGtUZXh0SXRlciBzdGFydCwgZW5kOworCWNvbnN0IGNoYXIgKnByb21w
dCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygp
OworCisJbWVudV9nZXRfZXh0X2hlbHAobWVudSwgJmhlbHApOworCisJYnVmZmVyID0gZ3RrX3Rl
eHRfdmlld19nZXRfYnVmZmVyKEdUS19URVhUX1ZJRVcodGV4dF93KSk7CisJZ3RrX3RleHRfYnVm
ZmVyX2dldF9ib3VuZHMoYnVmZmVyLCAmc3RhcnQsICZlbmQpOworCWd0a190ZXh0X2J1ZmZlcl9k
ZWxldGUoYnVmZmVyLCAmc3RhcnQsICZlbmQpOworCWd0a190ZXh0X3ZpZXdfc2V0X2xlZnRfbWFy
Z2luKEdUS19URVhUX1ZJRVcodGV4dF93KSwgMTUpOworCisJZ3RrX3RleHRfYnVmZmVyX2dldF9l
bmRfaXRlcihidWZmZXIsICZlbmQpOworCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdz
KGJ1ZmZlciwgJmVuZCwgcHJvbXB0LCAtMSwgdGFnMSwKKwkJCQkJIE5VTEwpOworCWd0a190ZXh0
X2J1ZmZlcl9pbnNlcnRfYXRfY3Vyc29yKGJ1ZmZlciwgIlxuXG4iLCAyKTsKKwlndGtfdGV4dF9i
dWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7CisJZ3RrX3RleHRfYnVmZmVyX2luc2Vy
dF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCBzdHJfZ2V0KCZoZWxwKSwgLTEsIHRhZzIsCisJCQkJ
CSBOVUxMKTsKKwlzdHJfZnJlZSgmaGVscCk7Cit9CisKKworc3RhdGljIHZvaWQgdGV4dF9pbnNl
cnRfbXNnKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCUd0a1Rl
eHRCdWZmZXIgKmJ1ZmZlcjsKKwlHdGtUZXh0SXRlciBzdGFydCwgZW5kOworCWNvbnN0IGNoYXIg
Km1zZyA9IG1lc3NhZ2U7CisKKwlidWZmZXIgPSBndGtfdGV4dF92aWV3X2dldF9idWZmZXIoR1RL
X1RFWFRfVklFVyh0ZXh0X3cpKTsKKwlndGtfdGV4dF9idWZmZXJfZ2V0X2JvdW5kcyhidWZmZXIs
ICZzdGFydCwgJmVuZCk7CisJZ3RrX3RleHRfYnVmZmVyX2RlbGV0ZShidWZmZXIsICZzdGFydCwg
JmVuZCk7CisJZ3RrX3RleHRfdmlld19zZXRfbGVmdF9tYXJnaW4oR1RLX1RFWFRfVklFVyh0ZXh0
X3cpLCAxNSk7CisKKwlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7
CisJZ3RrX3RleHRfYnVmZmVyX2luc2VydF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCB0aXRsZSwg
LTEsIHRhZzEsCisJCQkJCSBOVUxMKTsKKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X2F0X2N1cnNv
cihidWZmZXIsICJcblxuIiwgMik7CisJZ3RrX3RleHRfYnVmZmVyX2dldF9lbmRfaXRlcihidWZm
ZXIsICZlbmQpOworCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVu
ZCwgbXNnLCAtMSwgdGFnMiwKKwkJCQkJIE5VTEwpOworfQorCisKKy8qIE1haW4gV2luZG93cyBD
YWxsYmFja3MgKi8KKwordm9pZCBvbl9zYXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0
ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSk7CitnYm9vbGVhbiBvbl93aW5kb3cxX2RlbGV0ZV9ldmVu
dChHdGtXaWRnZXQgKiB3aWRnZXQsIEdka0V2ZW50ICogZXZlbnQsCisJCQkJIGdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKwlHdGtXaWRnZXQgKmRpYWxvZywgKmxhYmVsOworCWdpbnQgcmVzdWx0Owor
CisJaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpCisJCXJldHVybiBGQUxTRTsKKworCWRpYWxvZyA9
IGd0a19kaWFsb2dfbmV3X3dpdGhfYnV0dG9ucygiV2FybmluZyAhIiwKKwkJCQkJICAgICBHVEtf
V0lORE9XKG1haW5fd25kKSwKKwkJCQkJICAgICAoR3RrRGlhbG9nRmxhZ3MpCisJCQkJCSAgICAg
KEdUS19ESUFMT0dfTU9EQUwgfAorCQkJCQkgICAgICBHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9Q
QVJFTlQpLAorCQkJCQkgICAgIEdUS19TVE9DS19PSywKKwkJCQkJICAgICBHVEtfUkVTUE9OU0Vf
WUVTLAorCQkJCQkgICAgIEdUS19TVE9DS19OTywKKwkJCQkJICAgICBHVEtfUkVTUE9OU0VfTk8s
CisJCQkJCSAgICAgR1RLX1NUT0NLX0NBTkNFTCwKKwkJCQkJICAgICBHVEtfUkVTUE9OU0VfQ0FO
Q0VMLCBOVUxMKTsKKwlndGtfZGlhbG9nX3NldF9kZWZhdWx0X3Jlc3BvbnNlKEdUS19ESUFMT0co
ZGlhbG9nKSwKKwkJCQkJR1RLX1JFU1BPTlNFX0NBTkNFTCk7CisKKwlsYWJlbCA9IGd0a19sYWJl
bF9uZXcoIlxuU2F2ZSBjb25maWd1cmF0aW9uID9cbiIpOworCWd0a19jb250YWluZXJfYWRkKEdU
S19DT05UQUlORVIoR1RLX0RJQUxPRyhkaWFsb2cpLT52Ym94KSwgbGFiZWwpOworCWd0a193aWRn
ZXRfc2hvdyhsYWJlbCk7CisKKwlyZXN1bHQgPSBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRp
YWxvZykpOworCXN3aXRjaCAocmVzdWx0KSB7CisJY2FzZSBHVEtfUkVTUE9OU0VfWUVTOgorCQlv
bl9zYXZlX2FjdGl2YXRlKE5VTEwsIE5VTEwpOworCQlyZXR1cm4gRkFMU0U7CisJY2FzZSBHVEtf
UkVTUE9OU0VfTk86CisJCXJldHVybiBGQUxTRTsKKwljYXNlIEdUS19SRVNQT05TRV9DQU5DRUw6
CisJY2FzZSBHVEtfUkVTUE9OU0VfREVMRVRFX0VWRU5UOgorCWRlZmF1bHQ6CisJCWd0a193aWRn
ZXRfZGVzdHJveShkaWFsb2cpOworCQlyZXR1cm4gVFJVRTsKKwl9CisKKwlyZXR1cm4gRkFMU0U7
Cit9CisKKwordm9pZCBvbl93aW5kb3cxX2Rlc3Ryb3koR3RrT2JqZWN0ICogb2JqZWN0LCBncG9p
bnRlciB1c2VyX2RhdGEpCit7CisJZ3RrX21haW5fcXVpdCgpOworfQorCisKK3ZvaWQKK29uX3dp
bmRvdzFfc2l6ZV9yZXF1ZXN0KEd0a1dpZGdldCAqIHdpZGdldCwKKwkJCUd0a1JlcXVpc2l0aW9u
ICogcmVxdWlzaXRpb24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlzdGF0aWMgZ2ludCBvbGRf
aDsKKwlnaW50IHcsIGg7CisKKwlpZiAod2lkZ2V0LT53aW5kb3cgPT0gTlVMTCkKKwkJZ3RrX3dp
bmRvd19nZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cobWFpbl93bmQpLCAmdywgJmgpOworCWVs
c2UKKwkJZ2RrX3dpbmRvd19nZXRfc2l6ZSh3aWRnZXQtPndpbmRvdywgJncsICZoKTsKKworCWlm
IChoID09IG9sZF9oKQorCQlyZXR1cm47CisJb2xkX2ggPSBoOworCisJZ3RrX3BhbmVkX3NldF9w
b3NpdGlvbihHVEtfUEFORUQodnBhbmVkKSwgMiAqIGggLyAzKTsKK30KKworCisvKiBNZW51ICYg
VG9vbGJhciBDYWxsYmFja3MgKi8KKworCitzdGF0aWMgdm9pZAorbG9hZF9maWxlbmFtZShHdGtG
aWxlU2VsZWN0aW9uICogZmlsZV9zZWxlY3RvciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWNv
bnN0IGdjaGFyICpmbjsKKworCWZuID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX2dldF9maWxlbmFtZShH
VEtfRklMRV9TRUxFQ1RJT04KKwkJCQkJICAgICAodXNlcl9kYXRhKSk7CisKKwlpZiAoY29uZl9y
ZWFkKGZuKSkKKwkJdGV4dF9pbnNlcnRfbXNnKCJFcnJvciIsICJVbmFibGUgdG8gbG9hZCBjb25m
aWd1cmF0aW9uICEiKTsKKwllbHNlCisJCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOworfQorCit2
b2lkIG9uX2xvYWQxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKwlHdGtXaWRnZXQgKmZzOworCisJZnMgPSBndGtfZmlsZV9zZWxlY3Rpb25f
bmV3KCJMb2FkIGZpbGUuLi4iKTsKKwlnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoR1RLX0ZJ
TEVfU0VMRUNUSU9OKGZzKS0+b2tfYnV0dG9uKSwKKwkJCSAiY2xpY2tlZCIsCisJCQkgR19DQUxM
QkFDSyhsb2FkX2ZpbGVuYW1lKSwgKGdwb2ludGVyKSBmcyk7CisJZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKEdUS19PQkpFQ1QKKwkJCQkgKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRv
biksCisJCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLAorCQkJ
CSAoZ3BvaW50ZXIpIGZzKTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVAor
CQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+Y2FuY2VsX2J1dHRvbiksCisJCQkJICJjbGlj
a2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLAorCQkJCSAoZ3BvaW50ZXIpIGZz
KTsKKwlndGtfd2lkZ2V0X3Nob3coZnMpOworfQorCisKK3ZvaWQgb25fc2F2ZV9hY3RpdmF0ZShH
dGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJaWYgKGNvbmZf
d3JpdGUoTlVMTCkpCisJCXRleHRfaW5zZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRvIHNhdmUg
Y29uZmlndXJhdGlvbiAhIik7CisJY29uZl93cml0ZV9hdXRvY29uZigwKTsKK30KKworCitzdGF0
aWMgdm9pZAorc3RvcmVfZmlsZW5hbWUoR3RrRmlsZVNlbGVjdGlvbiAqIGZpbGVfc2VsZWN0b3Is
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwljb25zdCBnY2hhciAqZm47CisKKwlmbiA9IGd0a19m
aWxlX3NlbGVjdGlvbl9nZXRfZmlsZW5hbWUoR1RLX0ZJTEVfU0VMRUNUSU9OCisJCQkJCSAgICAg
KHVzZXJfZGF0YSkpOworCisJaWYgKGNvbmZfd3JpdGUoZm4pKQorCQl0ZXh0X2luc2VydF9tc2co
IkVycm9yIiwgIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24gISIpOworCisJZ3RrX3dpZGdl
dF9kZXN0cm95KEdUS19XSURHRVQodXNlcl9kYXRhKSk7Cit9CisKK3ZvaWQgb25fc2F2ZV9hczFf
YWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CUd0a1dpZGdldCAqZnM7CisKKwlmcyA9IGd0a19maWxlX3NlbGVjdGlvbl9uZXcoIlNhdmUgZmls
ZSBhcy4uLiIpOworCWdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChHVEtfRklMRV9TRUxFQ1RJ
T04oZnMpLT5va19idXR0b24pLAorCQkJICJjbGlja2VkIiwKKwkJCSBHX0NBTExCQUNLKHN0b3Jl
X2ZpbGVuYW1lKSwgKGdwb2ludGVyKSBmcyk7CisJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdU
S19PQkpFQ1QKKwkJCQkgKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksCisJCQkJ
ICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLAorCQkJCSAoZ3BvaW50
ZXIpIGZzKTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVAorCQkJCSAoR1RL
X0ZJTEVfU0VMRUNUSU9OKGZzKS0+Y2FuY2VsX2J1dHRvbiksCisJCQkJICJjbGlja2VkIiwgR19D
QUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLAorCQkJCSAoZ3BvaW50ZXIpIGZzKTsKKwlndGtf
d2lkZ2V0X3Nob3coZnMpOworfQorCisKK3ZvaWQgb25fcXVpdDFfYWN0aXZhdGUoR3RrTWVudUl0
ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWlmICghb25fd2luZG93MV9k
ZWxldGVfZXZlbnQoTlVMTCwgTlVMTCwgTlVMTCkpCisJCWd0a193aWRnZXRfZGVzdHJveShHVEtf
V0lER0VUKG1haW5fd25kKSk7Cit9CisKKwordm9pZCBvbl9zaG93X25hbWUxX2FjdGl2YXRlKEd0
a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtUcmVlVmll
d0NvbHVtbiAqY29sOworCisJc2hvd19uYW1lID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRl
bSktPmFjdGl2ZTsKKwljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklF
Vyh0cmVlMl93KSwgQ09MX05BTUUpOworCWlmIChjb2wpCisJCWd0a190cmVlX3ZpZXdfY29sdW1u
X3NldF92aXNpYmxlKGNvbCwgc2hvd19uYW1lKTsKK30KKworCit2b2lkIG9uX3Nob3dfcmFuZ2Ux
X2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sK
KwlHdGtUcmVlVmlld0NvbHVtbiAqY29sOworCisJc2hvd19yYW5nZSA9IEdUS19DSEVDS19NRU5V
X0lURU0obWVudWl0ZW0pLT5hY3RpdmU7CisJY29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1u
KEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9OTyk7CisJaWYgKGNvbCkKKwkJZ3RrX3RyZWVf
dmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sLCBzaG93X3JhbmdlKTsKKwljb2wgPSBndGtfdHJl
ZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09MX01PRCk7CisJaWYg
KGNvbCkKKwkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sLCBzaG93X3Jhbmdl
KTsKKwljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93
KSwgQ09MX1lFUyk7CisJaWYgKGNvbCkKKwkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2li
bGUoY29sLCBzaG93X3JhbmdlKTsKKworfQorCisKK3ZvaWQgb25fc2hvd19kYXRhMV9hY3RpdmF0
ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrVHJl
ZVZpZXdDb2x1bW4gKmNvbDsKKworCXNob3dfdmFsdWUgPSBHVEtfQ0hFQ0tfTUVOVV9JVEVNKG1l
bnVpdGVtKS0+YWN0aXZlOworCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJF
RV9WSUVXKHRyZWUyX3cpLCBDT0xfVkFMVUUpOworCWlmIChjb2wpCisJCWd0a190cmVlX3ZpZXdf
Y29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd192YWx1ZSk7Cit9CisKKwordm9pZAorb25fc2V0
X29wdGlvbl9tb2RlMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKwlvcHRfbW9kZSA9IE9QVF9OT1JNQUw7CisJZ3RrX3RyZWVfc3RvcmVfY2xl
YXIodHJlZTIpOworCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOwkvKiBpbnN0ZWFkIG9mIHVwZGF0
ZV90cmVlIHRvIHNwZWVkLXVwICovCit9CisKKwordm9pZAorb25fc2V0X29wdGlvbl9tb2RlMl9h
Y3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlv
cHRfbW9kZSA9IE9QVF9BTEw7CisJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOworCWRpc3Bs
YXlfdHJlZSgmcm9vdG1lbnUpOwkvKiBpbnN0ZWFkIG9mIHVwZGF0ZV90cmVlIHRvIHNwZWVkLXVw
ICovCit9CisKKwordm9pZAorb25fc2V0X29wdGlvbl9tb2RlM19hY3RpdmF0ZShHdGtNZW51SXRl
bSAqbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlvcHRfbW9kZSA9IE9QVF9QUk9N
UFQ7CisJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOworCWRpc3BsYXlfdHJlZSgmcm9vdG1l
bnUpOwkvKiBpbnN0ZWFkIG9mIHVwZGF0ZV90cmVlIHRvIHNwZWVkLXVwICovCit9CisKKwordm9p
ZCBvbl9pbnRyb2R1Y3Rpb24xX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2lu
dGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtXaWRnZXQgKmRpYWxvZzsKKwljb25zdCBnY2hhciAqaW50
cm9fdGV4dCA9CisJICAgICJXZWxjb21lIHRvIGdrYywgdGhlIEdUSysgZ3JhcGhpY2FsIGNvbmZp
Z3VyYXRpb24gdG9vbFxuIgorCSAgICAiRm9yIGVhY2ggb3B0aW9uLCBhIGJsYW5rIGJveCBpbmRp
Y2F0ZXMgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQsIGFcbiIKKwkgICAgImNoZWNrIGluZGljYXRl
cyBpdCBpcyBlbmFibGVkLCBhbmQgYSBkb3QgaW5kaWNhdGVzIHRoYXQgaXQgaXMgdG9cbiIKKwkg
ICAgImJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLiAgQ2xpY2tpbmcgb24gdGhlIGJveCB3aWxsIGN5
Y2xlIHRocm91Z2ggdGhlIHRocmVlIHN0YXRlcy5cbiIKKwkgICAgIlxuIgorCSAgICAiSWYgeW91
IGRvIG5vdCBzZWUgYW4gb3B0aW9uIChlLmcuLCBhIGRldmljZSBkcml2ZXIpIHRoYXQgeW91XG4i
CisJICAgICJiZWxpZXZlIHNob3VsZCBiZSBwcmVzZW50LCB0cnkgdHVybmluZyBvbiBTaG93IEFs
bCBPcHRpb25zXG4iCisJICAgICJ1bmRlciB0aGUgT3B0aW9ucyBtZW51LlxuIgorCSAgICAiQWx0
aG91Z2ggdGhlcmUgaXMgbm8gY3Jvc3MgcmVmZXJlbmNlIHlldCB0byBoZWxwIHlvdSBmaWd1cmUg
b3V0XG4iCisJICAgICJ3aGF0IG90aGVyIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIHRvIHN1cHBv
cnQgdGhlIG9wdGlvbiB5b3VcbiIKKwkgICAgImFyZSBpbnRlcmVzdGVkIGluLCB5b3UgY2FuIHN0
aWxsIHZpZXcgdGhlIGhlbHAgb2YgYSBncmF5ZWQtb3V0XG4iCisJICAgICJvcHRpb24uXG4iCisJ
ICAgICJcbiIKKwkgICAgIlRvZ2dsaW5nIFNob3cgRGVidWcgSW5mbyB1bmRlciB0aGUgT3B0aW9u
cyBtZW51IHdpbGwgc2hvdyBcbiIKKwkgICAgInRoZSBkZXBlbmRlbmNpZXMsIHdoaWNoIHlvdSBj
YW4gdGhlbiBtYXRjaCBieSBleGFtaW5pbmcgb3RoZXIgb3B0aW9ucy4iOworCisJZGlhbG9nID0g
Z3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKG1haW5fd25kKSwKKwkJCQkJR1RLX0RJ
QUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorCQkJCQlHVEtfTUVTU0FHRV9JTkZPLAorCQkJCQlH
VEtfQlVUVE9OU19DTE9TRSwgIiVzIiwgaW50cm9fdGV4dCk7CisJZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKEdUS19PQkpFQ1QoZGlhbG9nKSwgInJlc3BvbnNlIiwKKwkJCQkgR19DQUxMQkFDSyhn
dGtfd2lkZ2V0X2Rlc3Ryb3kpLAorCQkJCSBHVEtfT0JKRUNUKGRpYWxvZykpOworCWd0a193aWRn
ZXRfc2hvd19hbGwoZGlhbG9nKTsKK30KKworCit2b2lkIG9uX2Fib3V0MV9hY3RpdmF0ZShHdGtN
ZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrV2lkZ2V0ICpk
aWFsb2c7CisJY29uc3QgZ2NoYXIgKmFib3V0X3RleHQgPQorCSAgICAiZ2tjIGlzIGNvcHlyaWdo
dCAoYykgMjAwMiBSb21haW4gTGlldmluIDxyb21zQGxwZy50aWNhbGMub3JnPi5cbiIKKwkgICAg
ICAiQmFzZWQgb24gdGhlIHNvdXJjZSBjb2RlIGZyb20gUm9tYW4gWmlwcGVsLlxuIjsKKworCWRp
YWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksCisJCQkJ
CUdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKKwkJCQkJR1RLX01FU1NBR0VfSU5GTywK
KwkJCQkJR1RLX0JVVFRPTlNfQ0xPU0UsICIlcyIsIGFib3V0X3RleHQpOworCWdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25zZSIsCisJCQkJIEdfQ0FM
TEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsKKwln
dGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxvZyk7Cit9CisKKwordm9pZCBvbl9saWNlbnNlMV9hY3Rp
dmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3Rr
V2lkZ2V0ICpkaWFsb2c7CisJY29uc3QgZ2NoYXIgKmxpY2Vuc2VfdGV4dCA9CisJICAgICJna2Mg
aXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLlxuIgorCSAgICAg
ICJGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgc291cmNlIGNvZGUgb3JcbiIK
KwkgICAgICAidmlzaXQgaHR0cDovL3d3dy5mc2Yub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWxc
biI7CisKKwlkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93
bmQpLAorCQkJCQlHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCisJCQkJCUdUS19NRVNT
QUdFX0lORk8sCisJCQkJCUdUS19CVVRUT05TX0NMT1NFLCAiJXMiLCBsaWNlbnNlX3RleHQpOwor
CWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25zZSIs
CisJCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgR1RLX09CSkVDVChk
aWFsb2cpKTsKKwlndGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxvZyk7Cit9CisKKwordm9pZCBvbl9i
YWNrX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJ
ZW51bSBwcm9wX3R5cGUgcHR5cGU7CisKKwljdXJyZW50ID0gY3VycmVudC0+cGFyZW50OworCXB0
eXBlID0gY3VycmVudC0+cHJvbXB0ID8gY3VycmVudC0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dO
OworCWlmIChwdHlwZSAhPSBQX01FTlUpCisJCWN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQ7CisJ
ZGlzcGxheV90cmVlX3BhcnQoKTsKKworCWlmIChjdXJyZW50ID09ICZyb290bWVudSkKKwkJZ3Rr
X3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7Cit9CisKKwordm9pZCBvbl9s
b2FkX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJ
b25fbG9hZDFfYWN0aXZhdGUoTlVMTCwgdXNlcl9kYXRhKTsKK30KKworCit2b2lkIG9uX3Npbmds
ZV9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCXZp
ZXdfbW9kZSA9IFNJTkdMRV9WSUVXOworCWd0a193aWRnZXRfaGlkZSh0cmVlMV93KTsKKwljdXJy
ZW50ID0gJnJvb3RtZW51OworCWRpc3BsYXlfdHJlZV9wYXJ0KCk7Cit9CisKKwordm9pZCBvbl9z
cGxpdF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CWdpbnQgdywgaDsKKwl2aWV3X21vZGUgPSBTUExJVF9WSUVXOworCWd0a193aWRnZXRfc2hvdyh0
cmVlMV93KTsKKwlndGtfd2luZG93X2dldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhtYWluX3du
ZCksICZ3LCAmaCk7CisJZ3RrX3BhbmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQoaHBhbmVkKSwg
dyAvIDIpOworCWlmICh0cmVlMikKKwkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOworCWRp
c3BsYXlfbGlzdCgpOworCisJLyogRGlzYWJsZSBiYWNrIGJ0biwgbGlrZSBpbiBmdWxsIG1vZGUu
ICovCisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7Cit9CisKKwor
dm9pZCBvbl9mdWxsX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2Rh
dGEpCit7CisJdmlld19tb2RlID0gRlVMTF9WSUVXOworCWd0a193aWRnZXRfaGlkZSh0cmVlMV93
KTsKKwlpZiAodHJlZTIpCisJCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlkaXNwbGF5
X3RyZWUoJnJvb3RtZW51KTsKKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZB
TFNFKTsKK30KKworCit2b2lkIG9uX2NvbGxhcHNlX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9u
LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJZ3RrX3RyZWVfdmlld19jb2xsYXBzZV9hbGwoR1RL
X1RSRUVfVklFVyh0cmVlMl93KSk7Cit9CisKKwordm9pZCBvbl9leHBhbmRfY2xpY2tlZChHdGtC
dXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlndGtfdHJlZV92aWV3X2V4
cGFuZF9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMl93KSk7Cit9CisKKworLyogQ1RyZWUgQ2FsbGJh
Y2tzICovCisKKy8qIENoYW5nZSBoZXgvaW50L3N0cmluZyB2YWx1ZSBpbiB0aGUgY2VsbCAqLwor
c3RhdGljIHZvaWQgcmVuZGVyZXJfZWRpdGVkKEd0a0NlbGxSZW5kZXJlclRleHQgKiBjZWxsLAor
CQkJICAgIGNvbnN0IGdjaGFyICogcGF0aF9zdHJpbmcsCisJCQkgICAgY29uc3QgZ2NoYXIgKiBu
ZXdfdGV4dCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1RyZWVQYXRoICpwYXRoID0gZ3Rr
X3RyZWVfcGF0aF9uZXdfZnJvbV9zdHJpbmcocGF0aF9zdHJpbmcpOworCUd0a1RyZWVJdGVyIGl0
ZXI7CisJY29uc3QgY2hhciAqb2xkX2RlZiwgKm5ld19kZWY7CisJc3RydWN0IG1lbnUgKm1lbnU7
CisJc3RydWN0IHN5bWJvbCAqc3ltOworCisJaWYgKCFndGtfdHJlZV9tb2RlbF9nZXRfaXRlciht
b2RlbDIsICZpdGVyLCBwYXRoKSkKKwkJcmV0dXJuOworCisJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1v
ZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOworCXN5bSA9IG1lbnUtPnN5bTsKKwor
CWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfVkFMVUUsICZvbGRfZGVmLCAt
MSk7CisJbmV3X2RlZiA9IG5ld190ZXh0OworCisJc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBu
ZXdfZGVmKTsKKworCXVwZGF0ZV90cmVlKCZyb290bWVudSwgTlVMTCk7CisKKwlndGtfdHJlZV9w
YXRoX2ZyZWUocGF0aCk7Cit9CisKKy8qIENoYW5nZSB0aGUgdmFsdWUgb2YgYSBzeW1ib2wgYW5k
IHVwZGF0ZSB0aGUgdHJlZSAqLworc3RhdGljIHZvaWQgY2hhbmdlX3N5bV92YWx1ZShzdHJ1Y3Qg
bWVudSAqbWVudSwgZ2ludCBjb2wpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3lt
OworCXRyaXN0YXRlIG5ld3ZhbDsKKworCWlmICghc3ltKQorCQlyZXR1cm47CisKKwlpZiAoY29s
ID09IENPTF9OTykKKwkJbmV3dmFsID0gbm87CisJZWxzZSBpZiAoY29sID09IENPTF9NT0QpCisJ
CW5ld3ZhbCA9IG1vZDsKKwllbHNlIGlmIChjb2wgPT0gQ09MX1lFUykKKwkJbmV3dmFsID0geWVz
OworCWVsc2UKKwkJcmV0dXJuOworCisJc3dpdGNoIChzeW1fZ2V0X3R5cGUoc3ltKSkgeworCWNh
c2UgU19CT09MRUFOOgorCWNhc2UgU19UUklTVEFURToKKwkJaWYgKCFzeW1fdHJpc3RhdGVfd2l0
aGluX3JhbmdlKHN5bSwgbmV3dmFsKSkKKwkJCW5ld3ZhbCA9IHllczsKKwkJc3ltX3NldF90cmlz
dGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCk7CisJCWlmICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQor
CQkJdXBkYXRlX3RyZWUoJnJvb3RtZW51LCBOVUxMKTsKKwkJZWxzZSBpZiAodmlld19tb2RlID09
IFNQTElUX1ZJRVcpIHsKKwkJCXVwZGF0ZV90cmVlKGJyb3dzZWQsIE5VTEwpOworCQkJZGlzcGxh
eV9saXN0KCk7CisJCX0KKwkJZWxzZSBpZiAodmlld19tb2RlID09IFNJTkdMRV9WSUVXKQorCQkJ
ZGlzcGxheV90cmVlX3BhcnQoKTsJLy9maXhtZToga2VlcCBleHAvY29sbAorCQlicmVhazsKKwlj
YXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NUUklORzoKKwlkZWZhdWx0OgorCQli
cmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHRvZ2dsZV9zeW1fdmFsdWUoc3RydWN0IG1lbnUg
Km1lbnUpCit7CisJaWYgKCFtZW51LT5zeW0pCisJCXJldHVybjsKKworCXN5bV90b2dnbGVfdHJp
c3RhdGVfdmFsdWUobWVudS0+c3ltKTsKKwlpZiAodmlld19tb2RlID09IEZVTExfVklFVykKKwkJ
dXBkYXRlX3RyZWUoJnJvb3RtZW51LCBOVUxMKTsKKwllbHNlIGlmICh2aWV3X21vZGUgPT0gU1BM
SVRfVklFVykgeworCQl1cGRhdGVfdHJlZShicm93c2VkLCBOVUxMKTsKKwkJZGlzcGxheV9saXN0
KCk7CisJfQorCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykKKwkJZGlzcGxheV90
cmVlX3BhcnQoKTsJLy9maXhtZToga2VlcCBleHAvY29sbAorfQorCitzdGF0aWMgZ2ludCBjb2x1
bW4yaW5kZXgoR3RrVHJlZVZpZXdDb2x1bW4gKiBjb2x1bW4pCit7CisJZ2ludCBpOworCisJZm9y
IChpID0gMDsgaSA8IENPTF9OVU1CRVI7IGkrKykgeworCQlHdGtUcmVlVmlld0NvbHVtbiAqY29s
OworCisJCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUy
X3cpLCBpKTsKKwkJaWYgKGNvbCA9PSBjb2x1bW4pCisJCQlyZXR1cm4gaTsKKwl9CisKKwlyZXR1
cm4gLTE7Cit9CisKKworLyogVXNlciBjbGljazogdXBkYXRlIGNob2ljZSAoZnVsbCkgb3IgZ29l
cyBkb3duIChzaW5nbGUpICovCitnYm9vbGVhbgorb25fdHJlZXZpZXcyX2J1dHRvbl9wcmVzc19l
dmVudChHdGtXaWRnZXQgKiB3aWRnZXQsCisJCQkJR2RrRXZlbnRCdXR0b24gKiBldmVudCwgZ3Bv
aW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh3
aWRnZXQpOworCUd0a1RyZWVQYXRoICpwYXRoOworCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47
CisJR3RrVHJlZUl0ZXIgaXRlcjsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwlnaW50IGNvbDsKKwor
I2lmIEdUS19DSEVDS19WRVJTSU9OKDIsMSw0KSAvLyBidWcgaW4gY3RyZWUgd2l0aCBlYXJsaWVy
IHZlcnNpb24gb2YgR1RLCisJZ2ludCB0eCA9IChnaW50KSBldmVudC0+eDsKKwlnaW50IHR5ID0g
KGdpbnQpIGV2ZW50LT55OworCWdpbnQgY3gsIGN5OworCisJZ3RrX3RyZWVfdmlld19nZXRfcGF0
aF9hdF9wb3ModmlldywgdHgsIHR5LCAmcGF0aCwgJmNvbHVtbiwgJmN4LAorCQkJCSAgICAgICZj
eSk7CisjZWxzZQorCWd0a190cmVlX3ZpZXdfZ2V0X2N1cnNvcih2aWV3LCAmcGF0aCwgJmNvbHVt
bik7CisjZW5kaWYKKwlpZiAocGF0aCA9PSBOVUxMKQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAo
IWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsMiwgJml0ZXIsIHBhdGgpKQorCQlyZXR1cm4g
RkFMU0U7CisJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAmbWVu
dSwgLTEpOworCisJY29sID0gY29sdW1uMmluZGV4KGNvbHVtbik7CisJaWYgKGV2ZW50LT50eXBl
ID09IEdES18yQlVUVE9OX1BSRVNTKSB7CisJCWVudW0gcHJvcF90eXBlIHB0eXBlOworCQlwdHlw
ZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKworCQlp
ZiAocHR5cGUgPT0gUF9NRU5VICYmIHZpZXdfbW9kZSAhPSBGVUxMX1ZJRVcgJiYgY29sID09IENP
TF9PUFRJT04pIHsKKwkJCS8vIGdvZXMgZG93biBpbnRvIG1lbnUKKwkJCWN1cnJlbnQgPSBtZW51
OworCQkJZGlzcGxheV90cmVlX3BhcnQoKTsKKwkJCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShi
YWNrX2J0biwgVFJVRSk7CisJCX0gZWxzZSBpZiAoY29sID09IENPTF9PUFRJT04pIHsKKwkJCXRv
Z2dsZV9zeW1fdmFsdWUobWVudSk7CisJCQlndGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywg
cGF0aCwgVFJVRSk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY29sID09IENPTF9WQUxVRSkgewor
CQkJdG9nZ2xlX3N5bV92YWx1ZShtZW51KTsKKwkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2
aWV3LCBwYXRoLCBUUlVFKTsKKwkJfSBlbHNlIGlmIChjb2wgPT0gQ09MX05PIHx8IGNvbCA9PSBD
T0xfTU9ECisJCQkgICB8fCBjb2wgPT0gQ09MX1lFUykgeworCQkJY2hhbmdlX3N5bV92YWx1ZSht
ZW51LCBjb2wpOworCQkJZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgsIFRSVUUp
OworCQl9CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCisvKiBLZXkgcHJlc3NlZDogdXBkYXRl
IGNob2ljZSAqLworZ2Jvb2xlYW4KK29uX3RyZWV2aWV3Ml9rZXlfcHJlc3NfZXZlbnQoR3RrV2lk
Z2V0ICogd2lkZ2V0LAorCQkJICAgICBHZGtFdmVudEtleSAqIGV2ZW50LCBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7CisJ
R3RrVHJlZVBhdGggKnBhdGg7CisJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKKwlHdGtUcmVl
SXRlciBpdGVyOworCXN0cnVjdCBtZW51ICptZW51OworCWdpbnQgY29sOworCisJZ3RrX3RyZWVf
dmlld19nZXRfY3Vyc29yKHZpZXcsICZwYXRoLCAmY29sdW1uKTsKKwlpZiAocGF0aCA9PSBOVUxM
KQorCQlyZXR1cm4gRkFMU0U7CisKKwlpZiAoZXZlbnQtPmtleXZhbCA9PSBHREtfc3BhY2UpIHsK
KwkJaWYgKGd0a190cmVlX3ZpZXdfcm93X2V4cGFuZGVkKHZpZXcsIHBhdGgpKQorCQkJZ3RrX3Ry
ZWVfdmlld19jb2xsYXBzZV9yb3codmlldywgcGF0aCk7CisJCWVsc2UKKwkJCWd0a190cmVlX3Zp
ZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBGQUxTRSk7CisJCXJldHVybiBUUlVFOworCX0KKwlp
ZiAoZXZlbnQtPmtleXZhbCA9PSBHREtfS1BfRW50ZXIpIHsKKwl9CisJaWYgKHdpZGdldCA9PSB0
cmVlMV93KQorCQlyZXR1cm4gRkFMU0U7CisKKwlndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2Rl
bDIsICZpdGVyLCBwYXRoKTsKKwlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09M
X01FTlUsICZtZW51LCAtMSk7CisKKwlpZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgIm4i
KSkKKwkJY29sID0gQ09MX05POworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGV2ZW50LT5zdHJpbmcs
ICJtIikpCisJCWNvbCA9IENPTF9NT0Q7CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0
cmluZywgInkiKSkKKwkJY29sID0gQ09MX1lFUzsKKwllbHNlCisJCWNvbCA9IC0xOworCWNoYW5n
ZV9zeW1fdmFsdWUobWVudSwgY29sKTsKKworCXJldHVybiBGQUxTRTsKK30KKworCisvKiBSb3cg
c2VsZWN0aW9uIGNoYW5nZWQ6IHVwZGF0ZSBoZWxwICovCit2b2lkCitvbl90cmVldmlldzJfY3Vy
c29yX2NoYW5nZWQoR3RrVHJlZVZpZXcgKiB0cmVldmlldywgZ3BvaW50ZXIgdXNlcl9kYXRhKQor
eworCUd0a1RyZWVTZWxlY3Rpb24gKnNlbGVjdGlvbjsKKwlHdGtUcmVlSXRlciBpdGVyOworCXN0
cnVjdCBtZW51ICptZW51OworCisJc2VsZWN0aW9uID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0
aW9uKHRyZWV2aWV3KTsKKwlpZiAoZ3RrX3RyZWVfc2VsZWN0aW9uX2dldF9zZWxlY3RlZChzZWxl
Y3Rpb24sICZtb2RlbDIsICZpdGVyKSkgeworCQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCAm
aXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7CisJCXRleHRfaW5zZXJ0X2hlbHAobWVudSk7CisJ
fQorfQorCisKKy8qIFVzZXIgY2xpY2s6IGRpc3BsYXkgc3ViLXRyZWUgaW4gdGhlIHJpZ2h0IGZy
YW1lLiAqLworZ2Jvb2xlYW4KK29uX3RyZWV2aWV3MV9idXR0b25fcHJlc3NfZXZlbnQoR3RrV2lk
Z2V0ICogd2lkZ2V0LAorCQkJCUdka0V2ZW50QnV0dG9uICogZXZlbnQsIGdwb2ludGVyIHVzZXJf
ZGF0YSkKK3sKKwlHdGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVcod2lkZ2V0KTsKKwlH
dGtUcmVlUGF0aCAqcGF0aDsKKwlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOworCUd0a1RyZWVJ
dGVyIGl0ZXI7CisJc3RydWN0IG1lbnUgKm1lbnU7CisKKwlnaW50IHR4ID0gKGdpbnQpIGV2ZW50
LT54OworCWdpbnQgdHkgPSAoZ2ludCkgZXZlbnQtPnk7CisJZ2ludCBjeCwgY3k7CisKKwlndGtf
dHJlZV92aWV3X2dldF9wYXRoX2F0X3Bvcyh2aWV3LCB0eCwgdHksICZwYXRoLCAmY29sdW1uLCAm
Y3gsCisJCQkJICAgICAgJmN5KTsKKwlpZiAocGF0aCA9PSBOVUxMKQorCQlyZXR1cm4gRkFMU0U7
CisKKwlndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbDEsICZpdGVyLCBwYXRoKTsKKwlndGtf
dHJlZV9tb2RlbF9nZXQobW9kZWwxLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7CisKKwlp
ZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpIHsKKwkJdG9nZ2xlX3N5bV92YWx1
ZShtZW51KTsKKwkJY3VycmVudCA9IG1lbnU7CisJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7CisJfSBl
bHNlIHsKKwkJYnJvd3NlZCA9IG1lbnU7CisJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7CisJfQorCisJ
Z3RrX3dpZGdldF9yZWFsaXplKHRyZWUyX3cpOworCWd0a190cmVlX3ZpZXdfc2V0X2N1cnNvcih2
aWV3LCBwYXRoLCBOVUxMLCBGQUxTRSk7CisJZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHRyZWUyX3cp
OworCisJcmV0dXJuIEZBTFNFOworfQorCisKKy8qIEZpbGwgYSByb3cgb2Ygc3RyaW5ncyAqLwor
c3RhdGljIGdjaGFyICoqZmlsbF9yb3coc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RhdGljIGdj
aGFyICpyb3dbQ09MX05VTUJFUl07CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOwor
CWNvbnN0IGNoYXIgKmRlZjsKKwlpbnQgc3R5cGU7CisJdHJpc3RhdGUgdmFsOworCWVudW0gcHJv
cF90eXBlIHB0eXBlOworCWludCBpOworCisJZm9yIChpID0gQ09MX09QVElPTjsgaSA8PSBDT0xf
Q09MT1I7IGkrKykKKwkJZ19mcmVlKHJvd1tpXSk7CisJYnplcm8ocm93LCBzaXplb2Yocm93KSk7
CisKKwlyb3dbQ09MX09QVElPTl0gPQorCSAgICBnX3N0cmR1cF9wcmludGYoIiVzICVzIiwgbWVu
dV9nZXRfcHJvbXB0KG1lbnUpLAorCQkJICAgIHN5bSAmJiAhc3ltX2hhc192YWx1ZShzeW0pID8g
IihORVcpIiA6ICIiKTsKKworCWlmIChvcHRfbW9kZSA9PSBPUFRfQUxMICYmICFtZW51X2lzX3Zp
c2libGUobWVudSkpCisJCXJvd1tDT0xfQ09MT1JdID0gZ19zdHJkdXAoIkRhcmtHcmF5Iik7CisJ
ZWxzZSBpZiAob3B0X21vZGUgPT0gT1BUX1BST01QVCAmJgorCQkJbWVudV9oYXNfcHJvbXB0KG1l
bnUpICYmICFtZW51X2lzX3Zpc2libGUobWVudSkpCisJCXJvd1tDT0xfQ09MT1JdID0gZ19zdHJk
dXAoIkRhcmtHcmF5Iik7CisJZWxzZQorCQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJCbGFj
ayIpOworCisJcHR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VO
S05PV047CisJc3dpdGNoIChwdHlwZSkgeworCWNhc2UgUF9NRU5VOgorCQlyb3dbQ09MX1BJWEJV
Rl0gPSAoZ2NoYXIgKikgeHBtX21lbnU7CisJCWlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcp
CisJCQlyb3dbQ09MX1BJWFZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7CisJCXJvd1tDT0xf
QlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7CisJCWJyZWFrOworCWNhc2UgUF9DT01N
RU5UOgorCQlyb3dbQ09MX1BJWEJVRl0gPSAoZ2NoYXIgKikgeHBtX3ZvaWQ7CisJCXJvd1tDT0xf
UElYVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7CisJCXJvd1tDT0xfQlROVklTXSA9IEdJ
TlRfVE9fUE9JTlRFUihGQUxTRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJvd1tDT0xfUElY
QlVGXSA9IChnY2hhciAqKSB4cG1fdm9pZDsKKwkJcm93W0NPTF9QSVhWSVNdID0gR0lOVF9UT19Q
T0lOVEVSKEZBTFNFKTsKKwkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUp
OworCQlicmVhazsKKwl9CisKKwlpZiAoIXN5bSkKKwkJcmV0dXJuIHJvdzsKKwlyb3dbQ09MX05B
TUVdID0gZ19zdHJkdXAoc3ltLT5uYW1lKTsKKworCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJc3lt
LT5mbGFncyAmPSB+U1lNQk9MX0NIQU5HRUQ7CisKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7
CS8vIHBhcnNlIGNoaWxkcyBmb3IgZ2V0dGluZyBmaW5hbCB2YWx1ZQorCQlzdHJ1Y3QgbWVudSAq
Y2hpbGQ7CisJCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShz
eW0pOworCQlzdHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOworCisJCXJvd1tDT0xfQlROVklT
XSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7CisKKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAobWVudV9pc192aXNpYmxlKGNo
aWxkKQorCQkJICAgICYmIGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkKKwkJCQlkZWZfbWVudSA9IGNo
aWxkOworCQl9CisKKwkJaWYgKGRlZl9tZW51KQorCQkJcm93W0NPTF9WQUxVRV0gPQorCQkJICAg
IGdfc3RyZHVwKG1lbnVfZ2V0X3Byb21wdChkZWZfbWVudSkpOworCX0KKwlpZiAoc3ltLT5mbGFn
cyAmIFNZTUJPTF9DSE9JQ0VWQUwpCisJCXJvd1tDT0xfQlROUkFEXSA9IEdJTlRfVE9fUE9JTlRF
UihUUlVFKTsKKworCXN0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisJc3dpdGNoIChzdHlwZSkg
eworCWNhc2UgU19CT09MRUFOOgorCQlpZiAoR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfUElYVklT
XSkgPT0gRkFMU0UpCisJCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7
CisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpCisJCQlicmVhazsKKwkJLyogZmFsbCB0aHJvdWdo
ICovCisJY2FzZSBTX1RSSVNUQVRFOgorCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSk7CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2Ugbm86CisJCQlyb3dbQ09MX05PXSA9IGdfc3Ry
ZHVwKCJOIik7CisJCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3RyZHVwKCJOIik7CisJCQlyb3dbQ09M
X0JUTkFDVF0gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQkJcm93W0NPTF9CVE5JTkNdID0g
R0lOVF9UT19QT0lOVEVSKEZBTFNFKTsKKwkJCWJyZWFrOworCQljYXNlIG1vZDoKKwkJCXJvd1tD
T0xfTU9EXSA9IGdfc3RyZHVwKCJNIik7CisJCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3RyZHVwKCJN
Iik7CisJCQlyb3dbQ09MX0JUTklOQ10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7CisJCQlicmVh
azsKKwkJY2FzZSB5ZXM6CisJCQlyb3dbQ09MX1lFU10gPSBnX3N0cmR1cCgiWSIpOworCQkJcm93
W0NPTF9WQUxVRV0gPSBnX3N0cmR1cCgiWSIpOworCQkJcm93W0NPTF9CVE5BQ1RdID0gR0lOVF9U
T19QT0lOVEVSKFRSVUUpOworCQkJcm93W0NPTF9CVE5JTkNdID0gR0lOVF9UT19QT0lOVEVSKEZB
TFNFKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHZhbCAhPSBubyAmJiBzeW1fdHJpc3RhdGVf
d2l0aGluX3JhbmdlKHN5bSwgbm8pKQorCQkJcm93W0NPTF9OT10gPSBnX3N0cmR1cCgiXyIpOwor
CQlpZiAodmFsICE9IG1vZCAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbW9kKSkK
KwkJCXJvd1tDT0xfTU9EXSA9IGdfc3RyZHVwKCJfIik7CisJCWlmICh2YWwgIT0geWVzICYmIHN5
bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5ZXMpKQorCQkJcm93W0NPTF9ZRVNdID0gZ19z
dHJkdXAoIl8iKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2Ug
U19TVFJJTkc6CisJCWRlZiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCXJvd1tDT0xf
VkFMVUVdID0gZ19zdHJkdXAoZGVmKTsKKwkJcm93W0NPTF9FRElUXSA9IEdJTlRfVE9fUE9JTlRF
UihUUlVFKTsKKwkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsKKwkJ
YnJlYWs7CisJfQorCisJcmV0dXJuIHJvdzsKK30KKworCisvKiBTZXQgdGhlIG5vZGUgY29udGVu
dCB3aXRoIGEgcm93IG9mIHN0cmluZ3MgKi8KK3N0YXRpYyB2b2lkIHNldF9ub2RlKEd0a1RyZWVJ
dGVyICogbm9kZSwgc3RydWN0IG1lbnUgKm1lbnUsIGdjaGFyICoqIHJvdykKK3sKKwlHZGtDb2xv
ciBjb2xvcjsKKwlnYm9vbGVhbiBzdWNjZXNzOworCUdka1BpeGJ1ZiAqcGl4OworCisJcGl4ID0g
Z2RrX3BpeGJ1Zl9uZXdfZnJvbV94cG1fZGF0YSgoY29uc3QgY2hhciAqKikKKwkJCQkJICAgcm93
W0NPTF9QSVhCVUZdKTsKKworCWdka19jb2xvcl9wYXJzZShyb3dbQ09MX0NPTE9SXSwgJmNvbG9y
KTsKKwlnZGtfY29sb3JtYXBfYWxsb2NfY29sb3JzKGdka19jb2xvcm1hcF9nZXRfc3lzdGVtKCks
ICZjb2xvciwgMSwKKwkJCQkgIEZBTFNFLCBGQUxTRSwgJnN1Y2Nlc3MpOworCisJZ3RrX3RyZWVf
c3RvcmVfc2V0KHRyZWUsIG5vZGUsCisJCQkgICBDT0xfT1BUSU9OLCByb3dbQ09MX09QVElPTl0s
CisJCQkgICBDT0xfTkFNRSwgcm93W0NPTF9OQU1FXSwKKwkJCSAgIENPTF9OTywgcm93W0NPTF9O
T10sCisJCQkgICBDT0xfTU9ELCByb3dbQ09MX01PRF0sCisJCQkgICBDT0xfWUVTLCByb3dbQ09M
X1lFU10sCisJCQkgICBDT0xfVkFMVUUsIHJvd1tDT0xfVkFMVUVdLAorCQkJICAgQ09MX01FTlUs
IChncG9pbnRlcikgbWVudSwKKwkJCSAgIENPTF9DT0xPUiwgJmNvbG9yLAorCQkJICAgQ09MX0VE
SVQsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX0VESVRdKSwKKwkJCSAgIENPTF9QSVhCVUYsIHBp
eCwKKwkJCSAgIENPTF9QSVhWSVMsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX1BJWFZJU10pLAor
CQkJICAgQ09MX0JUTlZJUywgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfQlROVklTXSksCisJCQkg
ICBDT0xfQlROQUNULCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9CVE5BQ1RdKSwKKwkJCSAgIENP
TF9CVE5JTkMsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTklOQ10pLAorCQkJICAgQ09MX0JU
TlJBRCwgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfQlROUkFEXSksCisJCQkgICAtMSk7CisKKwln
X29iamVjdF91bnJlZihwaXgpOworfQorCisKKy8qIEFkZCBhIG5vZGUgdG8gdGhlIHRyZWUgKi8K
K3N0YXRpYyB2b2lkIHBsYWNlX25vZGUoc3RydWN0IG1lbnUgKm1lbnUsIGNoYXIgKipyb3cpCit7
CisJR3RrVHJlZUl0ZXIgKnBhcmVudCA9IHBhcmVudHNbaW5kZW50IC0gMV07CisJR3RrVHJlZUl0
ZXIgKm5vZGUgPSBwYXJlbnRzW2luZGVudF07CisKKwlndGtfdHJlZV9zdG9yZV9hcHBlbmQodHJl
ZSwgbm9kZSwgcGFyZW50KTsKKwlzZXRfbm9kZShub2RlLCBtZW51LCByb3cpOworfQorCisKKy8q
IEZpbmQgYSBub2RlIGluIHRoZSBHVEsrIHRyZWUgKi8KK3N0YXRpYyBHdGtUcmVlSXRlciBmb3Vu
ZDsKKworLyoKKyAqIEZpbmQgYSBtZW51IGluIHRoZSBHdGtUcmVlIHN0YXJ0aW5nIGF0IHBhcmVu
dC4KKyAqLworc3RhdGljIEd0a1RyZWVJdGVyICpndGt0cmVlX2l0ZXJfZmluZF9ub2RlKEd0a1Ry
ZWVJdGVyICpwYXJlbnQsCisJCQkJCSAgIHN0cnVjdCBtZW51ICp0b2ZpbmQpCit7CisJR3RrVHJl
ZUl0ZXIgaXRlcjsKKwlHdGtUcmVlSXRlciAqY2hpbGQgPSAmaXRlcjsKKwlnYm9vbGVhbiB2YWxp
ZDsKKwlHdGtUcmVlSXRlciAqcmV0OworCisJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX2No
aWxkcmVuKG1vZGVsMiwgY2hpbGQsIHBhcmVudCk7CisJd2hpbGUgKHZhbGlkKSB7CisJCXN0cnVj
dCBtZW51ICptZW51OworCisJCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsIGNoaWxkLCA2LCAm
bWVudSwgLTEpOworCisJCWlmIChtZW51ID09IHRvZmluZCkgeworCQkJbWVtY3B5KCZmb3VuZCwg
Y2hpbGQsIHNpemVvZihHdGtUcmVlSXRlcikpOworCQkJcmV0dXJuICZmb3VuZDsKKwkJfQorCisJ
CXJldCA9IGd0a3RyZWVfaXRlcl9maW5kX25vZGUoY2hpbGQsIHRvZmluZCk7CisJCWlmIChyZXQp
CisJCQlyZXR1cm4gcmV0OworCisJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1v
ZGVsMiwgY2hpbGQpOworCX0KKworCXJldHVybiBOVUxMOworfQorCisKKy8qCisgKiBVcGRhdGUg
dGhlIHRyZWUgYnkgYWRkaW5nL3JlbW92aW5nIGVudHJpZXMKKyAqIERvZXMgbm90IGNoYW5nZSBv
dGhlciBub2RlcworICovCitzdGF0aWMgdm9pZCB1cGRhdGVfdHJlZShzdHJ1Y3QgbWVudSAqc3Jj
LCBHdGtUcmVlSXRlciAqIGRzdCkKK3sKKwlzdHJ1Y3QgbWVudSAqY2hpbGQxOworCUd0a1RyZWVJ
dGVyIGl0ZXIsIHRtcDsKKwlHdGtUcmVlSXRlciAqY2hpbGQyID0gJml0ZXI7CisJZ2Jvb2xlYW4g
dmFsaWQ7CisJR3RrVHJlZUl0ZXIgKnNpYmxpbmc7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0
cnVjdCBtZW51ICptZW51MSwgKm1lbnUyOworCisJaWYgKHNyYyA9PSAmcm9vdG1lbnUpCisJCWlu
ZGVudCA9IDE7CisKKwl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfY2hpbGRyZW4obW9kZWwy
LCBjaGlsZDIsIGRzdCk7CisJZm9yIChjaGlsZDEgPSBzcmMtPmxpc3Q7IGNoaWxkMTsgY2hpbGQx
ID0gY2hpbGQxLT5uZXh0KSB7CisKKwkJc3ltID0gY2hpbGQxLT5zeW07CisKKwkgICAgICByZXBh
cnNlOgorCQltZW51MSA9IGNoaWxkMTsKKwkJaWYgKHZhbGlkKQorCQkJZ3RrX3RyZWVfbW9kZWxf
Z2V0KG1vZGVsMiwgY2hpbGQyLCBDT0xfTUVOVSwKKwkJCQkJICAgJm1lbnUyLCAtMSk7CisJCWVs
c2UKKwkJCW1lbnUyID0gTlVMTDsJLy8gZm9yY2UgYWRkaW5nIG9mIGEgZmlyc3QgY2hpbGQKKwor
I2lmZGVmIERFQlVHCisJCXByaW50ZigiJSpjJXMgfCAlc1xuIiwgaW5kZW50LCAnICcsCisJCSAg
ICAgICBtZW51MSA/IG1lbnVfZ2V0X3Byb21wdChtZW51MSkgOiAibmlsIiwKKwkJICAgICAgIG1l
bnUyID8gbWVudV9nZXRfcHJvbXB0KG1lbnUyKSA6ICJuaWwiKTsKKyNlbmRpZgorCisJCWlmICgo
b3B0X21vZGUgPT0gT1BUX05PUk1BTCAmJiAhbWVudV9pc192aXNpYmxlKGNoaWxkMSkpIHx8CisJ
CSAgICAob3B0X21vZGUgPT0gT1BUX1BST01QVCAmJiAhbWVudV9oYXNfcHJvbXB0KGNoaWxkMSkp
IHx8CisJCSAgICAob3B0X21vZGUgPT0gT1BUX0FMTCAgICAmJiAhbWVudV9nZXRfcHJvbXB0KGNo
aWxkMSkpKSB7CisKKwkJCS8qIHJlbW92ZSBub2RlICovCisJCQlpZiAoZ3RrdHJlZV9pdGVyX2Zp
bmRfbm9kZShkc3QsIG1lbnUxKSAhPSBOVUxMKSB7CisJCQkJbWVtY3B5KCZ0bXAsIGNoaWxkMiwg
c2l6ZW9mKEd0a1RyZWVJdGVyKSk7CisJCQkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25l
eHQobW9kZWwyLAorCQkJCQkJCQkgY2hpbGQyKTsKKwkJCQlndGtfdHJlZV9zdG9yZV9yZW1vdmUo
dHJlZTIsICZ0bXApOworCQkJCWlmICghdmFsaWQpCisJCQkJCXJldHVybjsJCS8qIG5leHQgcGFy
ZW50ICovCisJCQkJZWxzZQorCQkJCQlnb3RvIHJlcGFyc2U7CS8qIG5leHQgY2hpbGQgKi8KKwkJ
CX0gZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG1lbnUxICE9IG1lbnUyKSB7CisJ
CQlpZiAoZ3RrdHJlZV9pdGVyX2ZpbmRfbm9kZShkc3QsIG1lbnUxKSA9PSBOVUxMKSB7CS8vIGFk
ZCBub2RlCisJCQkJaWYgKCF2YWxpZCAmJiAhbWVudTIpCisJCQkJCXNpYmxpbmcgPSBOVUxMOwor
CQkJCWVsc2UKKwkJCQkJc2libGluZyA9IGNoaWxkMjsKKwkJCQlndGtfdHJlZV9zdG9yZV9pbnNl
cnRfYmVmb3JlKHRyZWUyLAorCQkJCQkJCSAgICAgY2hpbGQyLAorCQkJCQkJCSAgICAgZHN0LCBz
aWJsaW5nKTsKKwkJCQlzZXRfbm9kZShjaGlsZDIsIG1lbnUxLCBmaWxsX3JvdyhtZW51MSkpOwor
CQkJCWlmIChtZW51MiA9PSBOVUxMKQorCQkJCQl2YWxpZCA9IFRSVUU7CisJCQl9IGVsc2Ugewkv
LyByZW1vdmUgbm9kZQorCQkJCW1lbWNweSgmdG1wLCBjaGlsZDIsIHNpemVvZihHdGtUcmVlSXRl
cikpOworCQkJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwKKwkJCQkJ
CQkJIGNoaWxkMik7CisJCQkJZ3RrX3RyZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAmdG1wKTsKKwkJ
CQlpZiAoIXZhbGlkKQorCQkJCQlyZXR1cm47CS8vIG5leHQgcGFyZW50CisJCQkJZWxzZQorCQkJ
CQlnb3RvIHJlcGFyc2U7CS8vIG5leHQgY2hpbGQKKwkJCX0KKwkJfSBlbHNlIGlmIChzeW0gJiYg
KHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hBTkdFRCkpIHsKKwkJCXNldF9ub2RlKGNoaWxkMiwgbWVu
dTEsIGZpbGxfcm93KG1lbnUxKSk7CisJCX0KKworCQlpbmRlbnQrKzsKKwkJdXBkYXRlX3RyZWUo
Y2hpbGQxLCBjaGlsZDIpOworCQlpbmRlbnQtLTsKKworCQl2YWxpZCA9IGd0a190cmVlX21vZGVs
X2l0ZXJfbmV4dChtb2RlbDIsIGNoaWxkMik7CisJfQorfQorCisKKy8qIERpc3BsYXkgdGhlIHdo
b2xlIHRyZWUgKHNpbmdsZS9zcGxpdC9mdWxsIHZpZXcpICovCitzdGF0aWMgdm9pZCBkaXNwbGF5
X3RyZWUoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJZW51bSBwcm9wX3R5cGUg
cHR5cGU7CisKKwlpZiAobWVudSA9PSAmcm9vdG1lbnUpIHsKKwkJaW5kZW50ID0gMTsKKwkJY3Vy
cmVudCA9ICZyb290bWVudTsKKwl9CisKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJcHJvcCA9IGNoaWxkLT5wcm9tcHQ7CisJCXN5bSA9
IGNoaWxkLT5zeW07CisJCXB0eXBlID0gcHJvcCA/IHByb3AtPnR5cGUgOiBQX1VOS05PV047CisK
KwkJaWYgKHN5bSkKKwkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEFOR0VEOworCisJCWlmICgo
dmlld19tb2RlID09IFNQTElUX1ZJRVcpCisJCSAgICAmJiAhKGNoaWxkLT5mbGFncyAmIE1FTlVf
Uk9PVCkgJiYgKHRyZWUgPT0gdHJlZTEpKQorCQkJY29udGludWU7CisKKwkJaWYgKCh2aWV3X21v
ZGUgPT0gU1BMSVRfVklFVykgJiYgKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkKKwkJICAgICYm
ICh0cmVlID09IHRyZWUyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgob3B0X21vZGUgPT0gT1BU
X05PUk1BTCAmJiBtZW51X2lzX3Zpc2libGUoY2hpbGQpKSB8fAorCQkgICAgKG9wdF9tb2RlID09
IE9QVF9QUk9NUFQgJiYgbWVudV9oYXNfcHJvbXB0KGNoaWxkKSkgfHwKKwkJICAgIChvcHRfbW9k
ZSA9PSBPUFRfQUxMICAgICYmIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpKQorCQkJcGxhY2Vfbm9k
ZShjaGlsZCwgZmlsbF9yb3coY2hpbGQpKTsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIiUqYyVz
OiAiLCBpbmRlbnQsICcgJywgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCXByaW50ZigiJXMi
LCBjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QgPyAicm9vdG1lbnUgfCAiIDogIiIpOworCQlwcmlu
dGYoIiVzIiwgcHJvcF9nZXRfdHlwZV9uYW1lKHB0eXBlKSk7CisJCXByaW50ZigiIHwgIik7CisJ
CWlmIChzeW0pIHsKKwkJCXByaW50ZigiJXMiLCBzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOwor
CQkJcHJpbnRmKCIgfCAiKTsKKwkJCXByaW50ZigiJXMiLCBkYmdfc3ltX2ZsYWdzKHN5bS0+Zmxh
Z3MpKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJfSBlbHNlCisJCQlwcmludGYoIlxuIik7CisjZW5k
aWYKKwkJaWYgKCh2aWV3X21vZGUgIT0gRlVMTF9WSUVXKSAmJiAocHR5cGUgPT0gUF9NRU5VKQor
CQkgICAgJiYgKHRyZWUgPT0gdHJlZTIpKQorCQkJY29udGludWU7CisvKgorCQlpZiAoKChtZW51
ICE9ICZyb290bWVudSkgJiYgIShtZW51LT5mbGFncyAmIE1FTlVfUk9PVCkpCisJCSAgICB8fCAo
dmlld19tb2RlID09IEZVTExfVklFVykKKwkJICAgIHx8ICh2aWV3X21vZGUgPT0gU1BMSVRfVklF
VykpKi8KKworCQkvKiBDaGFuZ2UgcGFuZWQgcG9zaXRpb24gaWYgdGhlIHZpZXcgaXMgbm90IGlu
ICdzcGxpdCBtb2RlJyAqLworCQlpZiAodmlld19tb2RlID09IFNJTkdMRV9WSUVXIHx8IHZpZXdf
bW9kZSA9PSBGVUxMX1ZJRVcpIHsKKwkJCWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVE
KGhwYW5lZCksIDApOworCQl9CisKKwkJaWYgKCgodmlld19tb2RlID09IFNJTkdMRV9WSUVXKSAm
JiAobWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQorCQkgICAgfHwgKHZpZXdfbW9kZSA9PSBGVUxM
X1ZJRVcpCisJCSAgICB8fCAodmlld19tb2RlID09IFNQTElUX1ZJRVcpKSB7CisJCQlpbmRlbnQr
KzsKKwkJCWRpc3BsYXlfdHJlZShjaGlsZCk7CisJCQlpbmRlbnQtLTsKKwkJfQorCX0KK30KKwor
LyogRGlzcGxheSBhIHBhcnQgb2YgdGhlIHRyZWUgc3RhcnRpbmcgYXQgY3VycmVudCBub2RlIChz
aW5nbGUvc3BsaXQgdmlldykgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZV9wYXJ0KHZvaWQp
Cit7CisJaWYgKHRyZWUyKQorCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7CisJaWYgKHZp
ZXdfbW9kZSA9PSBTSU5HTEVfVklFVykKKwkJZGlzcGxheV90cmVlKGN1cnJlbnQpOworCWVsc2Ug
aWYgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKQorCQlkaXNwbGF5X3RyZWUoYnJvd3NlZCk7CisJ
Z3RrX3RyZWVfdmlld19leHBhbmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTJfdykpOworfQorCisv
KiBEaXNwbGF5IHRoZSBsaXN0IGluIHRoZSBsZWZ0IGZyYW1lIChzcGxpdCB2aWV3KSAqLworc3Rh
dGljIHZvaWQgZGlzcGxheV9saXN0KHZvaWQpCit7CisJaWYgKHRyZWUxKQorCQlndGtfdHJlZV9z
dG9yZV9jbGVhcih0cmVlMSk7CisKKwl0cmVlID0gdHJlZTE7CisJZGlzcGxheV90cmVlKCZyb290
bWVudSk7CisJZ3RrX3RyZWVfdmlld19leHBhbmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTFfdykp
OworCXRyZWUgPSB0cmVlMjsKK30KKworc3RhdGljIHZvaWQgZml4dXBfcm9vdG1lbnUoc3RydWN0
IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCXN0YXRpYyBpbnQgbWVudV9j
bnQgPSAwOworCisJbWVudS0+ZmxhZ3MgfD0gTUVOVV9ST09UOworCWZvciAoY2hpbGQgPSBtZW51
LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQlpZiAoY2hpbGQtPnByb21w
dCAmJiBjaGlsZC0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgeworCQkJbWVudV9jbnQrKzsKKwkJ
CWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsKKwkJCW1lbnVfY250LS07CisJCX0gZWxzZSBpZiAoIW1l
bnVfY250KQorCQkJZml4dXBfcm9vdG1lbnUoY2hpbGQpOworCX0KK30KKworCisvKiBNYWluICov
CitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKmF2W10pCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlj
aGFyICplbnY7CisJZ2NoYXIgKmdsYWRlX2ZpbGU7CisKKwkvKiBHVEsgc3R1ZmZzICovCisJZ3Rr
X3NldF9sb2NhbGUoKTsKKwlndGtfaW5pdCgmYWMsICZhdik7CisJZ2xhZGVfaW5pdCgpOworCisJ
Ly9hZGRfcGl4bWFwX2RpcmVjdG9yeSAoUEFDS0FHRV9EQVRBX0RJUiAiLyIgUEFDS0FHRSAiL3Bp
eG1hcHMiKTsKKwkvL2FkZF9waXhtYXBfZGlyZWN0b3J5IChQQUNLQUdFX1NPVVJDRV9ESVIgIi9w
aXhtYXBzIik7CisKKwkvKiBEZXRlcm1pbmUgR1VJIHBhdGggKi8KKwllbnYgPSBnZXRlbnYoU1JD
VFJFRSk7CisJaWYgKGVudikKKwkJZ2xhZGVfZmlsZSA9IGdfc3RyY29uY2F0KGVudiwgIi9zY3Jp
cHRzL2tjb25maWcvZ2NvbmYuZ2xhZGUiLCBOVUxMKTsKKwllbHNlIGlmIChhdlswXVswXSA9PSAn
LycpCisJCWdsYWRlX2ZpbGUgPSBnX3N0cmNvbmNhdChhdlswXSwgIi5nbGFkZSIsIE5VTEwpOwor
CWVsc2UKKwkJZ2xhZGVfZmlsZSA9IGdfc3RyY29uY2F0KGdfZ2V0X2N1cnJlbnRfZGlyKCksICIv
IiwgYXZbMF0sICIuZ2xhZGUiLCBOVUxMKTsKKworCS8qIENvbmYgc3R1ZmZzICovCisJaWYgKGFj
ID4gMSAmJiBhdlsxXVswXSA9PSAnLScpIHsKKwkJc3dpdGNoIChhdlsxXVsxXSkgeworCQljYXNl
ICdhJzoKKwkJCS8vc2hvd0FsbCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSAncyc6CisJCQljb25m
X3NldF9tZXNzYWdlX2NhbGxiYWNrKE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQlj
YXNlICc/JzoKKwkJCXByaW50ZigiJXMgWy1zXSA8Y29uZmlnPlxuIiwgYXZbMF0pOworCQkJZXhp
dCgwKTsKKwkJfQorCQluYW1lID0gYXZbMl07CisJfSBlbHNlCisJCW5hbWUgPSBhdlsxXTsKKwor
CWNvbmZfcGFyc2UobmFtZSk7CisJZml4dXBfcm9vdG1lbnUoJnJvb3RtZW51KTsKKwljb25mX3Jl
YWQoTlVMTCk7CisKKwkvKiBMb2FkIHRoZSBpbnRlcmZhY2UgYW5kIGNvbm5lY3Qgc2lnbmFscyAq
LworCWluaXRfbWFpbl93aW5kb3coZ2xhZGVfZmlsZSk7CisJaW5pdF90cmVlX21vZGVsKCk7CisJ
aW5pdF9sZWZ0X3RyZWUoKTsKKwlpbml0X3JpZ2h0X3RyZWUoKTsKKworCXN3aXRjaCAodmlld19t
b2RlKSB7CisJY2FzZSBTSU5HTEVfVklFVzoKKwkJZGlzcGxheV90cmVlX3BhcnQoKTsKKwkJYnJl
YWs7CisJY2FzZSBTUExJVF9WSUVXOgorCQlkaXNwbGF5X2xpc3QoKTsKKwkJYnJlYWs7CisJY2Fz
ZSBGVUxMX1ZJRVc6CisJCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOworCQlicmVhazsKKwl9CisK
KwlndGtfbWFpbigpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfY2hhbmdl
ZCh2b2lkKQoreworCWJvb2wgY2hhbmdlZCA9IGNvbmZfZ2V0X2NoYW5nZWQoKTsKKwlndGtfd2lk
Z2V0X3NldF9zZW5zaXRpdmUoc2F2ZV9idG4sIGNoYW5nZWQpOworCWd0a193aWRnZXRfc2V0X3Nl
bnNpdGl2ZShzYXZlX21lbnVfaXRlbSwgY2hhbmdlZCk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcubmV3L2djb25mLmdsYWRlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFk
ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYWE0ODNjYjMKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlCkBAIC0wLDAgKzEsNjYx
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+IDwhLS0qLSBtb2RlOiB4
bWwgLSotLT4KKworPGdsYWRlLWludGVyZmFjZT4KKworPHdpZGdldCBjbGFzcz0iR3RrV2luZG93
IiBpZD0id2luZG93MSI+CisgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4KKyAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xhdGFibGU9InllcyI+R3RrIEtlcm5l
bCBDb25maWd1cmF0b3I8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0idHlwZSI+R1RLX1dJ
TkRPV19UT1BMRVZFTDwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRp
b24iPkdUS19XSU5fUE9TX05PTkU8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0ibW9kYWwi
PkZhbHNlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHRfd2lkdGgiPjY0MDwv
cHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0X2hlaWdodCI+NDgwPC9wcm9wZXJ0
eT4KKyAgPHByb3BlcnR5IG5hbWU9InJlc2l6YWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgIDxwcm9w
ZXJ0eSBuYW1lPSJkZXN0cm95X3dpdGhfcGFyZW50Ij5GYWxzZTwvcHJvcGVydHk+CisgIDxwcm9w
ZXJ0eSBuYW1lPSJkZWNvcmF0ZWQiPlRydWU8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0i
c2tpcF90YXNrYmFyX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9InNr
aXBfcGFnZXJfaGludCI+RmFsc2U8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0idHlwZV9o
aW50Ij5HREtfV0lORE9XX1RZUEVfSElOVF9OT1JNQUw8L3Byb3BlcnR5PgorICA8cHJvcGVydHkg
bmFtZT0iZ3Jhdml0eSI+R0RLX0dSQVZJVFlfTk9SVEhfV0VTVDwvcHJvcGVydHk+CisgIDxzaWdu
YWwgbmFtZT0iZGVzdHJveSIgaGFuZGxlcj0ib25fd2luZG93MV9kZXN0cm95IiBvYmplY3Q9Indp
bmRvdzEiLz4KKyAgPHNpZ25hbCBuYW1lPSJzaXplX3JlcXVlc3QiIGhhbmRsZXI9Im9uX3dpbmRv
dzFfc2l6ZV9yZXF1ZXN0IiBvYmplY3Q9InZwYW5lZDEiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9
IkZyaSwgMTEgSmFuIDIwMDIgMTY6MTc6MTEgR01UIi8+CisgIDxzaWduYWwgbmFtZT0iZGVsZXRl
X2V2ZW50IiBoYW5kbGVyPSJvbl93aW5kb3cxX2RlbGV0ZV9ldmVudCIgb2JqZWN0PSJ3aW5kb3cx
IiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDA5IE1hciAyMDAzIDE5OjQyOjQ2IEdNVCIv
PgorCisgIDxjaGlsZD4KKyAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWQm94IiBpZD0idmJveDEiPgor
ICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICAgICAgPHBy
b3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxzZTwvcHJvcGVydHk+CisgICAgICA8cHJvcGVy
dHkgbmFtZT0ic3BhY2luZyI+MDwvcHJvcGVydHk+CisKKyAgICAgIDxjaGlsZD4KKwk8d2lkZ2V0
IGNsYXNzPSJHdGtNZW51QmFyIiBpZD0ibWVudWJhcjEiPgorCSAgPHByb3BlcnR5IG5hbWU9InZp
c2libGUiPlRydWU8L3Byb3BlcnR5PgorCisJICA8Y2hpbGQ+CisJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a01lbnVJdGVtIiBpZD0iZmlsZTEiPgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0
YWJsZT0ieWVzIj5fRmlsZTwvcHJvcGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91
bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNs
YXNzPSJHdGtNZW51IiBpZD0iZmlsZTFfbWVudSI+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lk
Z2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ibG9hZDEiPgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+TG9hZCBhIGNvbmZpZyBmaWxlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0xv
YWQ8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9u
X2xvYWQxX2FjdGl2YXRlIi8+CisJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IkwiIG1vZGlmaWVy
cz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPgorCisJCSAgICAgIDxjaGls
ZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPgorCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlk
PSJpbWFnZTM5Ij4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1vcGVuPC9wcm9wZXJ0eT4KKwkJCSAg
PHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24i
PjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4K
KwkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5PgorCQkJPC93aWRnZXQ+CisJ
CSAgICAgIDwvY2hpbGQ+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNo
aWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9InNhdmUxIj4K
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgdGhlIGNv
bmZpZyBpbiAuY29uZmlnPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVs
IiB0cmFuc2xhdGFibGU9InllcyI+X1NhdmU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkg
bmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFt
ZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmVfYWN0aXZhdGUiLz4KKwkJICAgICAgPGFjY2Vs
ZXJhdG9yIGtleT0iUyIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2
YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8d2lk
Z2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDAiPgorCQkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3Rr
LXNhdmU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9w
ZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAg
PHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5h
bWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJv
cGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0Pgor
CQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFn
ZU1lbnVJdGVtIiBpZD0ic2F2ZV9hczEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFu
c2xhdGFibGU9InllcyI+U2F2ZSB0aGUgY29uZmlnIGluIGEgZmlsZTwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgX2FzPC9w
cm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3By
b3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zYXZl
X2FzMV9hY3RpdmF0ZSIvPgorCisJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2Ui
PgorCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQxIj4KKwkJCSAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0i
c3RvY2siPmd0ay1zYXZlLWFzPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25f
c2l6ZSI+MTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJv
cGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9
InlwYWQiPjA8L3Byb3BlcnR5PgorCQkJPC93aWRnZXQ+CisJCSAgICAgIDwvY2hpbGQ+CisJCSAg
ICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBj
bGFzcz0iR3RrU2VwYXJhdG9yTWVudUl0ZW0iIGlkPSJzZXBhcmF0b3IxIj4KKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgPC93aWRnZXQ+CisJ
CSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdl
TWVudUl0ZW0iIGlkPSJxdWl0MSI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFi
bGU9InllcyI+X1F1aXQ8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3Vu
ZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUi
IGhhbmRsZXI9Im9uX3F1aXQxX2FjdGl2YXRlIi8+CisJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9
IlEiIG1vZGlmaWVycz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPgorCisJ
CSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPgorCQkJPHdpZGdldCBjbGFzcz0i
R3RrSW1hZ2UiIGlkPSJpbWFnZTQyIj4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1xdWl0PC9wcm9w
ZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+CisJCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4w
PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5PgorCQkJ
PC93aWRnZXQ+CisJCSAgICAgIDwvY2hpbGQ+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxk
PgorCQk8L3dpZGdldD4KKwkgICAgICA8L2NoaWxkPgorCSAgICA8L3dpZGdldD4KKwkgIDwvY2hp
bGQ+CisKKwkgIDxjaGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrTWVudUl0ZW0iIGlkPSJv
cHRpb25zMSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9PcHRp
b25zPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a01lbnUi
IGlkPSJvcHRpb25zMV9tZW51Ij4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a0NoZWNrTWVudUl0ZW0iIGlkPSJzaG93X25hbWUxIj4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9v
bHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgbmFtZTwvcHJvcGVydHk+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgX25hbWU8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJ
ICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2hvd19uYW1lMV9hY3Rp
dmF0ZSIvPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJ
ICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0NoZWNrTWVudUl0ZW0iIGlkPSJzaG93X3JhbmdlMSI+CisJ
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IHJhbmdlIChZ
L00vTik8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0
YWJsZT0ieWVzIj5TaG93IF9yYW5nZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRl
IiBoYW5kbGVyPSJvbl9zaG93X3JhbmdlMV9hY3RpdmF0ZSIvPgorCQkgICAgPC93aWRnZXQ+CisJ
CSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0NoZWNr
TWVudUl0ZW0iIGlkPSJzaG93X2RhdGExIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJh
bnNsYXRhYmxlPSJ5ZXMiPlNob3cgdmFsdWUgb2YgdGhlIG9wdGlvbjwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgX2RhdGE8
L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwv
cHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPkZhbHNlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2hvd19kYXRh
MV9hY3RpdmF0ZSIvPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKworCQkgIDxjaGls
ZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1NlcGFyYXRvck1lbnVJdGVtIiBpZD0ic2VwYXJh
dG9yMiI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lk
Z2V0IGNsYXNzPSJHdGtSYWRpb01lbnVJdGVtIiBpZD0ic2V0X29wdGlvbl9tb2RlMSI+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IG5vcm1hbCBvcHRp
b25zPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFi
bGU9InllcyI+U2hvdyBub3JtYWwgb3B0aW9uczwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImFjdGl2ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0
aXZhdGUiIGhhbmRsZXI9Im9uX3NldF9vcHRpb25fbW9kZTFfYWN0aXZhdGUiLz4KKwkJICAgIDwv
d2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNz
PSJHdGtSYWRpb01lbnVJdGVtIiBpZD0ic2V0X29wdGlvbl9tb2RlMiI+CisJCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBvcHRpb25zPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hv
dyBhbGwgX29wdGlvbnM8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3Vu
ZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUi
PkZhbHNlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imdyb3VwIj5zZXRfb3B0
aW9uX21vZGUxPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFu
ZGxlcj0ib25fc2V0X29wdGlvbl9tb2RlMl9hY3RpdmF0ZSIvPgorCQkgICAgPC93aWRnZXQ+CisJ
CSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1JhZGlv
TWVudUl0ZW0iIGlkPSJzZXRfb3B0aW9uX21vZGUzIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgYWxsIG9wdGlvbnMgd2l0aCBwcm9tcHRzPC9wcm9w
ZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+
U2hvdyBhbGwgcHJvbXB0IG9wdGlvbnM8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJhY3RpdmUiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imdyb3Vw
Ij5zZXRfb3B0aW9uX21vZGUxPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3Rp
dmF0ZSIgaGFuZGxlcj0ib25fc2V0X29wdGlvbl9tb2RlM19hY3RpdmF0ZSIvPgorCQkgICAgPC93
aWRnZXQ+CisJCSAgPC9jaGlsZD4KKworCQk8L3dpZGdldD4KKwkgICAgICA8L2NoaWxkPgorCSAg
ICA8L3dpZGdldD4KKwkgIDwvY2hpbGQ+CisKKwkgIDxjaGlsZD4KKwkgICAgPHdpZGdldCBjbGFz
cz0iR3RrTWVudUl0ZW0iIGlkPSJoZWxwMSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGUiPlRydWU8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPl9IZWxwPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0idXNl
X3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQg
Y2xhc3M9Ikd0a01lbnUiIGlkPSJoZWxwMV9tZW51Ij4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3
aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJpbnRyb2R1Y3Rpb24xIj4KKwkJICAg
ICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJv
cGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fSW50cm9kdWN0aW9uPC9wcm9w
ZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9pbnRyb2R1
Y3Rpb24xX2FjdGl2YXRlIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDE1IE5vdiAyMDAy
IDIwOjI2OjMwIEdNVCIvPgorCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJJIiBtb2RpZmllcnM9
IkdES19DT05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4KKworCQkgICAgICA8Y2hpbGQg
aW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4KKwkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0i
aW1hZ2U0MyI+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstZGlhbG9nLXF1ZXN0aW9uPC9wcm9wZXJ0
eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+CisJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9w
cm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5PgorCQkJPC93
aWRnZXQ+CisJCSAgICAgIDwvY2hpbGQ+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgor
CisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9
ImFib3V0MSI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0Fi
b3V0PC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRy
dWU8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJv
bl9hYm91dDFfYWN0aXZhdGUiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZyaSwgMTUgTm92IDIw
MDIgMjA6MjY6MzAgR01UIi8+CisJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IkEiIG1vZGlmaWVy
cz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPgorCisJCSAgICAgIDxjaGls
ZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPgorCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlk
PSJpbWFnZTQ0Ij4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1wcm9wZXJ0aWVzPC9wcm9wZXJ0eT4K
KwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+CisJCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5
YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9w
ZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5PgorCQkJPC93aWRn
ZXQ+CisJCSAgICAgIDwvY2hpbGQ+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJ
CSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9Imxp
Y2Vuc2UxIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fTGlj
ZW5zZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0i
b25fbGljZW5zZTFfYWN0aXZhdGUiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZyaSwgMTUgTm92
IDIwMDIgMjA6MjY6MzAgR01UIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJp
bWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDUiPgorCQkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJzdG9jayI+Z3RrLWp1c3RpZnktZmlsbDwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWdu
Ij4wLjU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3Bl
cnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+CisJCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KKwkJCTwvd2lkZ2V0PgorCQkgICAgICA8L2No
aWxkPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKwkJPC93aWRnZXQ+CisJICAgICAg
PC9jaGlsZD4KKwkgICAgPC93aWRnZXQ+CisJICA8L2NoaWxkPgorCTwvd2lkZ2V0PgorCTxwYWNr
aW5nPgorCSAgPHByb3BlcnR5IG5hbWU9InBhZGRpbmciPjA8L3Byb3BlcnR5PgorCSAgPHByb3Bl
cnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5IG5hbWU9ImZp
bGwiPkZhbHNlPC9wcm9wZXJ0eT4KKwk8L3BhY2tpbmc+CisgICAgICA8L2NoaWxkPgorCisgICAg
ICA8Y2hpbGQ+CisJPHdpZGdldCBjbGFzcz0iR3RrSGFuZGxlQm94IiBpZD0iaGFuZGxlYm94MSI+
CisJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJICA8cHJvcGVy
dHkgbmFtZT0ic2hhZG93X3R5cGUiPkdUS19TSEFET1dfT1VUPC9wcm9wZXJ0eT4KKwkgIDxwcm9w
ZXJ0eSBuYW1lPSJoYW5kbGVfcG9zaXRpb24iPkdUS19QT1NfTEVGVDwvcHJvcGVydHk+CisJICA8
cHJvcGVydHkgbmFtZT0ic25hcF9lZGdlIj5HVEtfUE9TX1RPUDwvcHJvcGVydHk+CisKKwkgIDxj
aGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrVG9vbGJhciIgaWQ9InRvb2xiYXIxIj4KKwkg
ICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAgPHBy
b3BlcnR5IG5hbWU9Im9yaWVudGF0aW9uIj5HVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDwvcHJv
cGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2xiYXJfc3R5bGUiPkdUS19UT09MQkFS
X0JPVEg8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwcyI+VHJ1ZTwv
cHJvcGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InNob3dfYXJyb3ciPlRydWU8L3Byb3Bl
cnR5PgorCisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBp
ZD0iYnV0dG9uMSI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+R29lcyB1
cCBvZiBvbmUgbGV2ZWwgKHNpbmdsZSB2aWV3KTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+QmFjazwvcHJvcGVydHk+CisJCSAgPHByb3Bl
cnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJzdG9ja19pZCI+Z3RrLXVuZG88L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNf
aW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBo
YW5kbGVyPSJvbl9iYWNrX2NsaWNrZWQiLz4KKwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkg
bmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAg
PC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEl0ZW0i
IGlkPSJ0b29saXRlbTEiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5Pgor
CisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlNlcGFyYXRvciIgaWQ9InZz
ZXBhcmF0b3IxIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5PgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKwkJPC93aWRnZXQ+CisJCTxwYWNr
aW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5n
PgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0
a1Rvb2xCdXR0b24iIGlkPSJidXR0b24yIj4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJs
ZT0ieWVzIj5Mb2FkIGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxvYWQ8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFt
ZT0ic3RvY2tfaWQiPmd0ay1vcGVuPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2lt
cG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFu
ZGxlcj0ib25fbG9hZF9jbGlja2VkIi8+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8
cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwv
Y2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24i
IGlkPSJidXR0b24zIj4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZl
IGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJh
bnNsYXRhYmxlPSJ5ZXMiPlNhdmU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vf
dW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQi
Pmd0ay1zYXZlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9u
dGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNh
bCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFs
c2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fc2F2
ZV9hY3RpdmF0ZSIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5h
bWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2Vu
ZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgorCisJ
ICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xpdGVt
MiI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJv
cGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisKKwkJICA8Y2hpbGQ+
CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjIiPgor
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICA8
L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHBy
b3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAgPC9j
aGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIg
aWQ9ImJ1dHRvbjQiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNpbmds
ZSB2aWV3PC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJs
ZT0ieWVzIj5TaW5nbGU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJs
aW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1t
aXNzaW5nLWltYWdlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jp
em9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0
aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+
RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25f
c2luZ2xlX2NsaWNrZWQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMg
MTQ6Mjg6MzkgR01UIi8+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkg
bmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9n
ZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisK
KwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0
b241Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAg
PHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TcGxpdCB2aWV3PC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5T
cGxpdDwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW1pc3NpbmctaW1h
Z2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRy
dWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVl
PC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJv
cGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zcGxpdF9jbGlj
a2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE0OjI4OjQ1IEdN
VCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFu
ZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1
ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgorCisJICAgICAgPGNo
aWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uNiI+CisJCSAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+RnVsbCB2aWV3PC9wcm9wZXJ0eT4KKwkJ
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5GdWxsPC9wcm9wZXJ0
eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJ
CSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5Pgor
CQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8
c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2Z1bGxfY2xpY2tlZCIgbGFzdF9tb2Rp
ZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODo1MCBHTVQiLz4KKwkJPC93aWRn
ZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pgor
CQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdl
dCBjbGFzcz0iR3RrVG9vbEl0ZW0iIGlkPSJ0b29saXRlbTMiPgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9o
b3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92
ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFu
dCI+RmFsc2U8L3Byb3BlcnR5PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0i
R3RrVlNlcGFyYXRvciIgaWQ9InZzZXBhcmF0b3IzIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4K
KwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZh
bHNlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPkZhbHNlPC9w
cm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+
CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b243Ij4KKwkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9
InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5Db2xsYXBzZSB0aGUgd2hvbGUgdHJlZSBpbiB0
aGUgcmlnaHQgZnJhbWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJh
bnNsYXRhYmxlPSJ5ZXMiPkNvbGxhcHNlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0i
dXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InN0b2Nr
X2lkIj5ndGstcmVtb3ZlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9o
b3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92
ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFu
dCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0i
b25fY29sbGFwc2VfY2xpY2tlZCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHBy
b3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2No
aWxkPgorCisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBp
ZD0iYnV0dG9uOCI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+RXhwYW5k
IHRoZSB3aG9sZSB0cmVlIGluIHRoZSByaWdodCBmcmFtZTwvcHJvcGVydHk+CisJCSAgPHByb3Bl
cnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+RXhwYW5kPC9wcm9wZXJ0eT4KKwkJ
ICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHBy
b3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstYWRkPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFtZT0iY2xp
Y2tlZCIgaGFuZGxlcj0ib25fZXhwYW5kX2NsaWNrZWQiLz4KKwkJPC93aWRnZXQ+CisJCTxwYWNr
aW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+
CisJICAgICAgPC9jaGlsZD4KKwkgICAgPC93aWRnZXQ+CisJICA8L2NoaWxkPgorCTwvd2lkZ2V0
PgorCTxwYWNraW5nPgorCSAgPHByb3BlcnR5IG5hbWU9InBhZGRpbmciPjA8L3Byb3BlcnR5Pgor
CSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5
IG5hbWU9ImZpbGwiPkZhbHNlPC9wcm9wZXJ0eT4KKwk8L3BhY2tpbmc+CisgICAgICA8L2NoaWxk
PgorCisgICAgICA8Y2hpbGQ+CisJPHdpZGdldCBjbGFzcz0iR3RrSFBhbmVkIiBpZD0iaHBhbmVk
MSI+CisJICA8cHJvcGVydHkgbmFtZT0id2lkdGhfcmVxdWVzdCI+MTwvcHJvcGVydHk+CisJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFt
ZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlv
biI+MDwvcHJvcGVydHk+CisKKwkgIDxjaGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrU2Ny
b2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzEiPgorCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9s
bGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJv
cGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9w
ZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUiPkdUS19TSEFET1dfSU48
L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxhY2VtZW50Ij5HVEtf
Q09STkVSX1RPUF9MRUZUPC9wcm9wZXJ0eT4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBj
bGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzEiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaGVhZGVyc192aXNpYmxlIj5UcnVl
PC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0icnVsZXNfaGludCI+RmFsc2U8L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJyZW9yZGVyYWJsZSI+RmFsc2U8L3Byb3BlcnR5Pgor
CQkgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVfc2VhcmNoIj5GYWxzZTwvcHJvcGVydHk+CisJCSAg
PHNpZ25hbCBuYW1lPSJjdXJzb3JfY2hhbmdlZCIgaGFuZGxlcj0ib25fdHJlZXZpZXcyX2N1cnNv
cl9jaGFuZ2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE1OjU4
OjIyIEdNVCIvPgorCQkgIDxzaWduYWwgbmFtZT0iYnV0dG9uX3ByZXNzX2V2ZW50IiBoYW5kbGVy
PSJvbl90cmVldmlldzFfYnV0dG9uX3ByZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90aW1l
PSJTdW4sIDEyIEphbiAyMDAzIDE2OjAzOjUyIEdNVCIvPgorCQkgIDxzaWduYWwgbmFtZT0ia2V5
X3ByZXNzX2V2ZW50IiBoYW5kbGVyPSJvbl90cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50IiBsYXN0
X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE2OjExOjQ0IEdNVCIvPgorCQk8
L3dpZGdldD4KKwkgICAgICA8L2NoaWxkPgorCSAgICA8L3dpZGdldD4KKwkgICAgPHBhY2tpbmc+
CisJICAgICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAg
PHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+RmFsc2U8L3Byb3BlcnR5PgorCSAgICA8L3BhY2tpbmc+
CisJICA8L2NoaWxkPgorCisJICA8Y2hpbGQ+CisJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZQYW5l
ZCIgaWQ9InZwYW5lZDEiPgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0
eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjA8L3Byb3BlcnR5PgorCisJICAg
ICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9s
bGVkd2luZG93MiI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRP
TUFUSUM8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+
R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzaGFk
b3dfdHlwZSI+R1RLX1NIQURPV19JTjwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9Indp
bmRvd19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9QX0xFRlQ8L3Byb3BlcnR5PgorCisJCSAgPGNo
aWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzIiPgor
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJv
cGVydHkgbmFtZT0iaGFzX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImhlYWRlcnNfdmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJydWxlc19oaW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJyZW9yZGVyYWJsZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0iZW5hYmxlX3NlYXJjaCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9
ImN1cnNvcl9jaGFuZ2VkIiBoYW5kbGVyPSJvbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQiIGxh
c3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTc6NTUgR01UIi8+CisJ
CSAgICAgIDxzaWduYWwgbmFtZT0iYnV0dG9uX3ByZXNzX2V2ZW50IiBoYW5kbGVyPSJvbl90cmVl
dmlldzJfYnV0dG9uX3ByZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEy
IEphbiAyMDAzIDE1OjU3OjU4IEdNVCIvPgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImtleV9wcmVz
c19ldmVudCIgaGFuZGxlcj0ib25fdHJlZXZpZXcyX2tleV9wcmVzc19ldmVudCIgbGFzdF9tb2Rp
ZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNTo1ODowMSBHTVQiLz4KKwkJICAgIDwv
d2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJv
cGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0i
cmVzaXplIj5GYWxzZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgor
CisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9
InNjcm9sbGVkd2luZG93MyI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3By
b3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElD
WV9ORVZFUjwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5
Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InNo
YWRvd190eXBlIj5HVEtfU0hBRE9XX0lOPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0i
d2luZG93X3BsYWNlbWVudCI+R1RLX0NPUk5FUl9UT1BfTEVGVDwvcHJvcGVydHk+CisKKwkJICA8
Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUZXh0VmlldyIgaWQ9InRleHR2aWV3MyI+
CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAg
ICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJlZGl0YWJsZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0ib3ZlcndyaXRlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJhY2NlcHRzX3RhYiI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJqdXN0aWZpY2F0aW9uIj5HVEtfSlVTVElGWV9MRUZUPC9wcm9wZXJ0eT4KKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9IndyYXBfbW9kZSI+R1RLX1dSQVBfV09SRDwvcHJvcGVydHk+CisJCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJjdXJzb3JfdmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJwaXhlbHNfYWJvdmVfbGluZXMiPjA8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2JlbG93X2xpbmVzIj4wPC9wcm9wZXJ0eT4KKwkJICAg
ICAgPHByb3BlcnR5IG5hbWU9InBpeGVsc19pbnNpZGVfd3JhcCI+MDwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJsZWZ0X21hcmdpbiI+MDwvcHJvcGVydHk+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJyaWdodF9tYXJnaW4iPjA8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0iaW5kZW50Ij4wPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRl
eHQiIHRyYW5zbGF0YWJsZT0ieWVzIj5Tb3JyeSwgbm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMg
b3B0aW9uIHlldC48L3Byb3BlcnR5PgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKwkJ
PC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsiPlRydWU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPlRydWU8L3Byb3BlcnR5Pgor
CQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKwkgICAgPC93aWRnZXQ+CisJICAgIDxwYWNr
aW5nPgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsiPlRydWU8L3Byb3BlcnR5PgorCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPlRydWU8L3Byb3BlcnR5PgorCSAgICA8L3BhY2tp
bmc+CisJICA8L2NoaWxkPgorCTwvd2lkZ2V0PgorCTxwYWNraW5nPgorCSAgPHByb3BlcnR5IG5h
bWU9InBhZGRpbmciPjA8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+VHJ1
ZTwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+VHJ1ZTwvcHJvcGVydHk+CisJ
PC9wYWNraW5nPgorICAgICAgPC9jaGlsZD4KKyAgICA8L3dpZGdldD4KKyAgPC9jaGlsZD4KKzwv
d2lkZ2V0PgorCis8L2dsYWRlLWludGVyZmFjZT4KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvaW1hZ2VzLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iNGZhMGU0YQotLS0gL2Rldi9udWxsCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2VzLmMKQEAgLTAsMCArMSwzMjggQEAKKy8vIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu
IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICovCisKKyNpbmNsdWRlICJpbWFnZXMu
aCIKKworY29uc3QgY2hhciAqeHBtX2xvYWRbXSA9IHsKKyIyMiAyMiA1IDEiLAorIi4gYyBOb25l
IiwKKyIjIGMgIzAwMDAwMCIsCisiYyBjICM4MzgxMDAiLAorImEgYyAjZmZmZjAwIiwKKyJiIGMg
I2ZmZmZmZiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uIyMjIy4uLi4j
LiIsCisiLi4uLi4uLi4uLi4jLi4uLiMjLiMjLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uIyMjLiIs
CisiLi4uLi4uLi4uLi4uLi4uLi4jIyMjLiIsCisiLiMjIyMuLi4uLi4uLi4uLiMjIyMjLiIsCisi
I2FiYWIjIyMjIyMjIyMjLi4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCisiI2Fi
YWJhYmFiYWJhYmEjLi4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCisiI2FiYWJh
YiMjIyMjIyMjIyMjIyMjIyIsCisiI2JhYmFiIyNjY2NjY2NjY2NjY2MjIyIsCisiI2FiYWIjI2Nj
Y2NjY2NjY2NjYyMjLiIsCisiI2JhYiMjY2NjY2NjY2NjY2NjIyMuLiIsCisiI2FiIyNjY2NjY2Nj
Y2NjY2MjIy4uLiIsCisiI2IjI2NjY2NjY2NjY2NjYyMjLi4uLiIsCisiIyMjY2NjY2NjY2NjY2Nj
IyMuLi4uLiIsCisiIyNjY2NjY2NjY2NjY2MjIy4uLi4uLiIsCisiIyMjIyMjIyMjIyMjIyMjLi4u
Li4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBjaGFyICp4cG1fc2F2
ZVtdID0geworIjIyIDIyIDUgMSIsCisiLiBjIE5vbmUiLAorIiMgYyAjMDAwMDAwIiwKKyJhIGMg
IzgzODEwMCIsCisiYiBjICNjNWMyYzUiLAorImMgYyAjY2RiNmQ1IiwKKyIuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uIiwKKyIuIyMjIyMjIyMjIyMjIyMjIyMjIyMuIiwKKyIuI2FhI2JiYmJiYmJiYmJi
YiNiYiMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNiYiMuIiwKKyIuI2FhI2JiYmJiYmJiYmNiYiMj
IyMuIiwKKyIuI2FhI2JiYmNjYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmNjYmJiYmJiYiNhYSMu
IiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwK
KyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIu
I2FhYSMjIyMjIyMjIyMjI2FhYSMuIiwKKyIuI2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwKKyIuI2Fh
YWFhYWFhYWFhYWFhYWFhYSMuIiwKKyIuI2FhYSMjIyMjIyMjIyMjIyNhYSMuIiwKKyIuI2FhYSMj
IyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMj
IyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMj
I2JiYiNhYSMuIiwKKyIuLiMjIyMjIyMjIyMjIyMjIyMjIy4uIiwKKyIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIn07CisKK2NvbnN0IGNoYXIgKnhwbV9iYWNrW10gPSB7CisiMjIgMjIgMyAxIiwKKyIu
IGMgTm9uZSIsCisiIyBjICMwMDAwODMiLAorImEgYyAjODM4MTgzIiwKKyIuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uIiwKKyIuLi4uLi4uLi4uLiMjIyMjI2EuLi4uIiwKKyIuLiMuLi4uLi4jIyMjIyMjIyMjLi4u
IiwKKyIuLiMjLi4uIyMjIy4uLi4uLiMjYS4uIiwKKyIuLiMjIy4jIyMuLi4uLi4uLi4jIy4uIiwK
KyIuLiMjIyMjIy4uLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjLi4uLi4uLi4uLi4jIy4uIiwKKyIu
LiMjIyMjIy4uLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIyMuLi4uLi4uLi4jIy4uIiwKKyIuLiMj
IyMjIyMjLi4uLi4uLiMjYS4uIiwKKyIuLi4uLi4uLi4uLi4uLi5hIyMjLi4uIiwKKyIuLi4uLi4u
Li4uLi4uLi4jIyMuLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4u
Li4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIn07CisKK2NvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXSA9IHsKKyIyMiAyMiAyIDEi
LAorIi4gYyBOb25lIiwKKyIjIGMgIzAwMDAwMCIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIs
CisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisi
Li4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4u
Li4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4u
IyMjIyMjIyMuLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4u
Li4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4u
Li4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMu
Li4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4u
Li4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4u
LiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIs
CisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Owor
Citjb25zdCBjaGFyICp4cG1fc2luZ2xlX3ZpZXdbXSA9IHsKKyIyMiAyMiAyIDEiLAorIi4gYyBO
b25lIiwKKyIjIGMgIzAwMDAwMCIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4u
LiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMu
Li4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4u
Li4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4u
Li4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIs
CisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisi
Li4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4u
Li4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBj
aGFyICp4cG1fc3BsaXRfdmlld1tdID0geworIjIyIDIyIDIgMSIsCisiLiBjIE5vbmUiLAorIiMg
YyAjMDAwMDAwIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4u
Li4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4u
IiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwK
KyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIu
Li4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4u
Li4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4u
Iy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisKK2NvbnN0IGNoYXIgKnhwbV9z
eW1ib2xfbm9bXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwK
KyIgICAgICAgICAgICAiLAorIiAuLi4uLi4uLi4uICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAg
ICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAg
LiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAor
IiAuLi4uLi4uLi4uICIsCisiICAgICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9zeW1i
b2xfbW9kW10gPSB7CisiMTIgMTIgMiAxIiwKKyIgIGMgd2hpdGUiLAorIi4gYyBibGFjayIsCisi
ICAgICAgICAgICAgIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAg
ICAgIC4gIiwKKyIgLiAgIC4uICAgLiAiLAorIiAuICAuLi4uICAuICIsCisiIC4gIC4uLi4gIC4g
IiwKKyIgLiAgIC4uICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIg
Li4uLi4uLi4uLiAiLAorIiAgICAgICAgICAgICJ9OworCitjb25zdCBjaGFyICp4cG1fc3ltYm9s
X3llc1tdID0geworIjEyIDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAg
ICAgICAgICAgICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAg
ICAuICIsCisiIC4gICAgICAuIC4gIiwKKyIgLiAgICAgLi4gLiAiLAorIiAuIC4gIC4uICAuICIs
CisiIC4gLi4uLiAgIC4gIiwKKyIgLiAgLi4gICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4u
Li4uLi4uLi4gIiwKKyIgICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX2Nob2ljZV9u
b1tdID0geworIjEyIDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAg
ICAgICAgICIsCisiICAgIC4uLi4gICAgIiwKKyIgIC4uICAgIC4uICAiLAorIiAgLiAgICAgIC4g
ICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisi
IC4gICAgICAgIC4gIiwKKyIgIC4gICAgICAuICAiLAorIiAgLi4gICAgLi4gICIsCisiICAgIC4u
Li4gICAgIiwKKyIgICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX2Nob2ljZV95ZXNb
XSA9IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAg
ICAgICAiLAorIiAgICAuLi4uICAgICIsCisiICAuLiAgICAuLiAgIiwKKyIgIC4gICAgICAuICAi
LAorIiAuICAgLi4gICAuICIsCisiIC4gIC4uLi4gIC4gIiwKKyIgLiAgLi4uLiAgLiAiLAorIiAu
ICAgLi4gICAuICIsCisiICAuICAgICAgLiAgIiwKKyIgIC4uICAgIC4uICAiLAorIiAgICAuLi4u
ICAgICIsCisiICAgICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9tZW51W10gPSB7Cisi
MTIgMTIgMiAxIiwKKyIgIGMgd2hpdGUiLAorIi4gYyBibGFjayIsCisiICAgICAgICAgICAgIiwK
KyIgLi4uLi4uLi4uLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gLi4gICAgIC4gIiwKKyIgLiAu
Li4uICAgLiAiLAorIiAuIC4uLi4uLiAuICIsCisiIC4gLi4uLi4uIC4gIiwKKyIgLiAuLi4uICAg
LiAiLAorIiAuIC4uICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLi4uLi4uLi4uLiAiLAor
IiAgICAgICAgICAgICJ9OworCitjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXSA9IHsKKyIxMiAx
MiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAu
Li4uLi4uLi4uICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgLi4gIC4uLi4uLiAiLAorIiAuLiAgICAu
Li4uICIsCisiIC4uICAgICAgLi4gIiwKKyIgLi4gICAgICAuLiAiLAorIiAuLiAgICAuLi4uICIs
CisiIC4uICAuLi4uLi4gIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuLi4uLi4uLi4uICIsCisiICAg
ICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9tZW51YmFja1tdID0geworIjEyIDEyIDIg
MSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAgICIsCisiIC4uLi4u
Li4uLi4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAuLiAuICIsCisiIC4gICAuLi4uIC4g
IiwKKyIgLiAuLi4uLi4gLiAiLAorIiAuIC4uLi4uLiAuICIsCisiIC4gICAuLi4uIC4gIiwKKyIg
LiAgICAgLi4gLiAiLAorIiAuICAgICAgICAuICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgICAgICAg
ICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX3ZvaWRbXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAg
YyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIs
CisiICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAg
ICAgICAgICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAg
ICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIn07
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5oIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9pbWFnZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZDhm
ZjYxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5oCkBA
IC0wLDAgKzEsMzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsu
b3JnPgorICovCisKKyNpZm5kZWYgSU1BR0VTX0gKKyNkZWZpbmUgSU1BR0VTX0gKKworI2lmZGVm
IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitleHRlcm4gY29uc3QgY2hhciAq
eHBtX2xvYWRbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fc2F2ZVtdOworZXh0ZXJuIGNvbnN0
IGNoYXIgKnhwbV9iYWNrW107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX3RyZWVfdmlld1tdOwor
ZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zaW5nbGVfdmlld1tdOworZXh0ZXJuIGNvbnN0IGNoYXIg
KnhwbV9zcGxpdF92aWV3W107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX3N5bWJvbF9ub1tdOwor
ZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbW9kW107CitleHRlcm4gY29uc3QgY2hhciAq
eHBtX3N5bWJvbF95ZXNbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fY2hvaWNlX25vW107Citl
eHRlcm4gY29uc3QgY2hhciAqeHBtX2Nob2ljZV95ZXNbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4
cG1fbWVudVtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9tZW51X2ludltdOworZXh0ZXJuIGNv
bnN0IGNoYXIgKnhwbV9tZW51YmFja1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV92b2lkW107
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBJTUFHRVNfSCAq
LwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9sZXhlci5sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi42MzU0
YzkwNQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubApAQCAt
MCwwICsxLDQ3MSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5v
cmc+CisgKi8KKyVvcHRpb24gbm9zdGRpbml0IG5veXl3cmFwIG5ldmVyLWludGVyYWN0aXZlIGZ1
bGwgZWNzCislb3B0aW9uIDhiaXQgbm9kZWZhdWx0IHl5bGluZW5vCisleCBBU1NJR05fVkFMIEhF
TFAgU1RSSU5HCisleworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxrYy5oIgorI2luY2x1ZGUg
InBhcnNlci50YWIuaCIKKworI2RlZmluZSBZWV9ERUNMCQlzdGF0aWMgaW50IHl5bGV4MSh2b2lk
KQorCisjZGVmaW5lIFNUQVJUX1NUUlNJWkUJMTYKKworc3RhdGljIHN0cnVjdCB7CisJc3RydWN0
IGZpbGUgKmZpbGU7CisJaW50IGxpbmVubzsKK30gY3VycmVudF9wb3M7CisKK3N0YXRpYyBpbnQg
cHJldl9wcmV2X3Rva2VuID0gVF9FT0w7CitzdGF0aWMgaW50IHByZXZfdG9rZW4gPSBUX0VPTDsK
K3N0YXRpYyBjaGFyICp0ZXh0Oworc3RhdGljIGludCB0ZXh0X3NpemUsIHRleHRfYXNpemU7CisK
K3N0cnVjdCBidWZmZXIgeworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKwlZWV9CVUZGRVJfU1RB
VEUgc3RhdGU7Cit9OworCitzdHJ1Y3QgYnVmZmVyICpjdXJyZW50X2J1ZjsKKworc3RhdGljIGlu
dCBsYXN0X3RzLCBmaXJzdF90czsKKworc3RhdGljIGNoYXIgKmV4cGFuZF90b2tlbihjb25zdCBj
aGFyICppbiwgc2l6ZV90IG4pOworc3RhdGljIHZvaWQgYXBwZW5kX2V4cGFuZGVkX3N0cmluZyhj
b25zdCBjaGFyICppbik7CitzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOworc3RhdGlj
IHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKKworc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2b2lk
KQoreworCXRleHQgPSB4bWFsbG9jKFNUQVJUX1NUUlNJWkUpOworCXRleHRfYXNpemUgPSBTVEFS
VF9TVFJTSVpFOworCXRleHRfc2l6ZSA9IDA7CisJKnRleHQgPSAwOworfQorCitzdGF0aWMgdm9p
ZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJaW50IG5ld19z
aXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CisJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkg
eworCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKKwkJbmV3X3NpemUgJj0gLVNUQVJU
X1NUUlNJWkU7CisJCXRleHQgPSB4cmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7CisJCXRleHRfYXNp
emUgPSBuZXdfc2l6ZTsKKwl9CisJbWVtY3B5KHRleHQgKyB0ZXh0X3NpemUsIHN0ciwgc2l6ZSk7
CisJdGV4dF9zaXplICs9IHNpemU7CisJdGV4dFt0ZXh0X3NpemVdID0gMDsKK30KKworc3RhdGlj
IHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJdGV4dCA9
IHhtYWxsb2Moc2l6ZSArIDEpOworCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOworCXRleHRbc2l6
ZV0gPSAwOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKGNoYXIgY2hy
KQoreworCWZwcmludGYoc3RkZXJyLAorCSAgICAgICAgIiVzOiVkOndhcm5pbmc6IGlnbm9yaW5n
IHVuc3VwcG9ydGVkIGNoYXJhY3RlciAnJWMnXG4iLAorCSAgICAgICAgY3VycmVudF9maWxlLT5u
YW1lLCB5eWxpbmVubywgY2hyKTsKK30KKyV9CisKK24JW0EtWmEtejAtOV8tXQorCislJQorCWlu
dCBzdHIgPSAwOworCWludCB0cywgaTsKKworIy4qCQkJLyogaWdub3JlIGNvbW1lbnQgKi8KK1sg
XHRdKgkJCS8qIHdoaXRlc3BhY2VzICovCitcXFxuCQkJLyogZXNjYXBlZCBuZXcgbGluZSAqLwor
XG4JCQlyZXR1cm4gVF9FT0w7CisiYWxsbm9jb25maWdfeSIJCXJldHVybiBUX0FMTE5PQ09ORklH
X1k7CisiYm9vbCIJCQlyZXR1cm4gVF9CT09MOworImNob2ljZSIJCXJldHVybiBUX0NIT0lDRTsK
KyJjb21tZW50IgkJcmV0dXJuIFRfQ09NTUVOVDsKKyJjb25maWciCQlyZXR1cm4gVF9DT05GSUc7
CisiZGVmX2Jvb2wiCQlyZXR1cm4gVF9ERUZfQk9PTDsKKyJkZWZfdHJpc3RhdGUiCQlyZXR1cm4g
VF9ERUZfVFJJU1RBVEU7CisiZGVmYXVsdCIJCXJldHVybiBUX0RFRkFVTFQ7CisiZGVmY29uZmln
X2xpc3QiCXJldHVybiBUX0RFRkNPTkZJR19MSVNUOworImRlcGVuZHMiCQlyZXR1cm4gVF9ERVBF
TkRTOworImVuZGNob2ljZSIJCXJldHVybiBUX0VORENIT0lDRTsKKyJlbmRpZiIJCQlyZXR1cm4g
VF9FTkRJRjsKKyJlbmRtZW51IgkJcmV0dXJuIFRfRU5ETUVOVTsKKyJoZWxwInwiLS0taGVscC0t
LSIJcmV0dXJuIFRfSEVMUDsKKyJoZXgiCQkJcmV0dXJuIFRfSEVYOworImlmIgkJCXJldHVybiBU
X0lGOworImltcGx5IgkJCXJldHVybiBUX0lNUExZOworImludCIJCQlyZXR1cm4gVF9JTlQ7Cisi
bWFpbm1lbnUiCQlyZXR1cm4gVF9NQUlOTUVOVTsKKyJtZW51IgkJCXJldHVybiBUX01FTlU7Cisi
bWVudWNvbmZpZyIJCXJldHVybiBUX01FTlVDT05GSUc7CisibW9kdWxlcyIJCXJldHVybiBUX01P
RFVMRVM7Cisib24iCQkJcmV0dXJuIFRfT047Cisib3B0aW9uIgkJcmV0dXJuIFRfT1BUSU9OOwor
Im9wdGlvbmFsIgkJcmV0dXJuIFRfT1BUSU9OQUw7CisicHJvbXB0IgkJcmV0dXJuIFRfUFJPTVBU
OworInJhbmdlIgkJCXJldHVybiBUX1JBTkdFOworInNlbGVjdCIJCXJldHVybiBUX1NFTEVDVDsK
KyJzb3VyY2UiCQlyZXR1cm4gVF9TT1VSQ0U7Cisic3RyaW5nIgkJcmV0dXJuIFRfU1RSSU5HOwor
InRyaXN0YXRlIgkJcmV0dXJuIFRfVFJJU1RBVEU7CisidmlzaWJsZSIJCXJldHVybiBUX1ZJU0lC
TEU7CisifHwiCQkJcmV0dXJuIFRfT1I7CisiJiYiCQkJcmV0dXJuIFRfQU5EOworIj0iCQkJcmV0
dXJuIFRfRVFVQUw7CisiIT0iCQkJcmV0dXJuIFRfVU5FUVVBTDsKKyI8IgkJCXJldHVybiBUX0xF
U1M7CisiPD0iCQkJcmV0dXJuIFRfTEVTU19FUVVBTDsKKyI+IgkJCXJldHVybiBUX0dSRUFURVI7
CisiPj0iCQkJcmV0dXJuIFRfR1JFQVRFUl9FUVVBTDsKKyIhIgkJCXJldHVybiBUX05PVDsKKyIo
IgkJCXJldHVybiBUX09QRU5fUEFSRU47CisiKSIJCQlyZXR1cm4gVF9DTE9TRV9QQVJFTjsKKyI6
PSIJCQlyZXR1cm4gVF9DT0xPTl9FUVVBTDsKKyIrPSIJCQlyZXR1cm4gVF9QTFVTX0VRVUFMOwor
XCJ8XCcJCQl7CisJCQkJc3RyID0geXl0ZXh0WzBdOworCQkJCW5ld19zdHJpbmcoKTsKKwkJCQlC
RUdJTihTVFJJTkcpOworCQkJfQore259KwkJCXsKKwkJCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5
eWxlbmcpOworCQkJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQkJCXJldHVybiBUX1dPUkQ7CisJ
CQl9Cisoe259fCQpKwkJeworCQkJCS8qIHRoaXMgdG9rZW4gaW5jbHVkZXMgYXQgbGVhc3Qgb25l
ICckJyAqLworCQkJCXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxlbmcp
OworCQkJCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpCisJCQkJCXJldHVybiBUX1dPUkQ7CisJ
CQkJZnJlZSh5eWx2YWwuc3RyaW5nKTsKKwkJCX0KKy4JCQl3YXJuX2lnbm9yZWRfY2hhcmFjdGVy
KCp5eXRleHQpOworCis8QVNTSUdOX1ZBTD57CisJW15bOmJsYW5rOl1cbl0rLioJeworCQlhbGxv
Y19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0
dXJuIFRfQVNTSUdOX1ZBTDsKKwl9CisJXG4JeyBCRUdJTihJTklUSUFMKTsgcmV0dXJuIFRfRU9M
OyB9CisJLgorfQorCis8U1RSSU5HPnsKKwkiJCIuKglhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKHl5
dGV4dCk7CisJW14kJyJcXFxuXSsJeworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsK
Kwl9CisJXFwuPwl7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0ICsgMSwgeXlsZW5nIC0gMSk7CisJ
fQorCVwnfFwiCXsKKwkJaWYgKHN0ciA9PSB5eXRleHRbMF0pIHsKKwkJCUJFR0lOKElOSVRJQUwp
OworCQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCQlyZXR1cm4gVF9XT1JEX1FVT1RFOworCQl9
IGVsc2UKKwkJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCAxKTsKKwl9CisJXG4JeworCQlmcHJpbnRm
KHN0ZGVyciwKKwkJCSIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1cHBv
cnRlZFxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCQl1bnB1dCgn
XG4nKTsKKwkJQkVHSU4oSU5JVElBTCk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1
cm4gVF9XT1JEX1FVT1RFOworCX0KKwk8PEVPRj4+CXsKKwkJQkVHSU4oSU5JVElBTCk7CisJCXl5
bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9XT1JEX1FVT1RFOworCX0KK30KKworPEhF
TFA+eworCVsgXHRdKwl7CisJCXRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHl5bGVuZzsgaSsr
KSB7CisJCQlpZiAoeXl0ZXh0W2ldID09ICdcdCcpCisJCQkJdHMgPSAodHMgJiB+NykgKyA4Owor
CQkJZWxzZQorCQkJCXRzKys7CisJCX0KKwkJbGFzdF90cyA9IHRzOworCQlpZiAoZmlyc3RfdHMp
IHsKKwkJCWlmICh0cyA8IGZpcnN0X3RzKSB7CisJCQkJemNvbmZfZW5kaGVscCgpOworCQkJCXJl
dHVybiBUX0hFTFBURVhUOworCQkJfQorCQkJdHMgLT0gZmlyc3RfdHM7CisJCQl3aGlsZSAodHMg
PiA4KSB7CisJCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCA4KTsKKwkJCQl0cyAtPSA4Owor
CQkJfQorCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCB0cyk7CisJCX0KKwl9CisJWyBcdF0q
XG4vW14gXHRcbl0geworCQl6Y29uZl9lbmRoZWxwKCk7CisJCXJldHVybiBUX0hFTFBURVhUOwor
CX0KKwlbIFx0XSpcbgl7CisJCWFwcGVuZF9zdHJpbmcoIlxuIiwgMSk7CisJfQorCVteIFx0XG5d
LiogeworCQl3aGlsZSAoeXlsZW5nKSB7CisJCQlpZiAoKHl5dGV4dFt5eWxlbmctMV0gIT0gJyAn
KSAmJiAoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnXHQnKSkKKwkJCQlicmVhazsKKwkJCXl5bGVuZy0t
OworCQl9CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCQlpZiAoIWZpcnN0X3Rz
KQorCQkJZmlyc3RfdHMgPSBsYXN0X3RzOworCX0KKwk8PEVPRj4+CXsKKwkJemNvbmZfZW5kaGVs
cCgpOworCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwl9Cit9CisKKzw8RU9GPj4JeworCUJFR0lOKElO
SVRJQUwpOworCisJaWYgKHByZXZfdG9rZW4gIT0gVF9FT0wgJiYgcHJldl90b2tlbiAhPSBUX0hF
TFBURVhUKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6IG5vIG5ldyBsaW5lIGF0
IGVuZCBvZiBmaWxlXG4iLAorCQkJY3VycmVudF9maWxlLT5uYW1lLCB5eWxpbmVubyk7CisKKwlp
ZiAoY3VycmVudF9maWxlKSB7CisJCXpjb25mX2VuZGZpbGUoKTsKKwkJcmV0dXJuIFRfRU9MOwor
CX0KKwlmY2xvc2UoeXlpbik7CisJeXl0ZXJtaW5hdGUoKTsKK30KKworJSUKKworLyogc2Vjb25k
IHN0YWdlIGxleGVyICovCitpbnQgeXlsZXgodm9pZCkKK3sKKwlpbnQgdG9rZW47CisKK3JlcGVh
dDoKKwl0b2tlbiA9IHl5bGV4MSgpOworCisJaWYgKHByZXZfdG9rZW4gPT0gVF9FT0wgfHwgcHJl
dl90b2tlbiA9PSBUX0hFTFBURVhUKSB7CisJCWlmICh0b2tlbiA9PSBUX0VPTCkgeworCQkJLyog
RG8gbm90IHBhc3MgdW5uZWVkZWQgVF9FT0wgdG8gdGhlIHBhcnNlci4gKi8KKwkJCWdvdG8gcmVw
ZWF0OworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEZvciB0aGUgcGFyc2VyLCB1cGRhdGUgZmls
ZS9saW5lbm8gYXQgdGhlIGZpcnN0IHRva2VuCisJCQkgKiBvZiBlYWNoIHN0YXRlbWVudC4gR2Vu
ZXJhbGx5LCBcbiBpcyBhIHN0YXRlbWVudAorCQkJICogdGVybWluYXRvciBpbiBLY29uZmlnLCBi
dXQgaXQgaXMgbm90IGFsd2F5cyB0cnVlCisJCQkgKiBiZWNhdXNlIFxuIGNvdWxkIGJlIGVzY2Fw
ZWQgYnkgYSBiYWNrc2xhc2guCisJCQkgKi8KKwkJCWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50
X2ZpbGU7CisJCQljdXJyZW50X3Bvcy5saW5lbm8gPSB5eWxpbmVubzsKKwkJfQorCX0KKworCWlm
IChwcmV2X3ByZXZfdG9rZW4gPT0gVF9FT0wgJiYgcHJldl90b2tlbiA9PSBUX1dPUkQgJiYKKwkg
ICAgKHRva2VuID09IFRfRVFVQUwgfHwgdG9rZW4gPT0gVF9DT0xPTl9FUVVBTCB8fCB0b2tlbiA9
PSBUX1BMVVNfRVFVQUwpKQorCQlCRUdJTihBU1NJR05fVkFMKTsKKworCXByZXZfcHJldl90b2tl
biA9IHByZXZfdG9rZW47CisJcHJldl90b2tlbiA9IHRva2VuOworCisJcmV0dXJuIHRva2VuOwor
fQorCitzdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIgKmluLCBzaXplX3QgbikK
K3sKKwljaGFyICpvdXQ7CisJaW50IGM7CisJY2hhciBjMjsKKwljb25zdCBjaGFyICpyZXN0LCAq
ZW5kOworCisJbmV3X3N0cmluZygpOworCWFwcGVuZF9zdHJpbmcoaW4sIG4pOworCisJLyogZ2V0
IHRoZSB3aG9sZSBsaW5lIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgdGhlIGVuZCBvZiB0b2tlbi4g
Ki8KKwl3aGlsZSAoKGMgPSBpbnB1dCgpKSAhPSBFT0YpIHsKKwkJaWYgKGMgPT0gJ1xuJykgewor
CQkJdW5wdXQoYyk7CisJCQlicmVhazsKKwkJfQorCQljMiA9IGM7CisJCWFwcGVuZF9zdHJpbmco
JmMyLCAxKTsKKwl9CisKKwlyZXN0ID0gdGV4dDsKKwlvdXQgPSBleHBhbmRfb25lX3Rva2VuKCZy
ZXN0KTsKKworCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5wdXQgc3Ry
ZWFtICovCisJZW5kID0gcmVzdCArIHN0cmxlbihyZXN0KTsKKwl3aGlsZSAoZW5kID4gcmVzdCkK
KwkJdW5wdXQoKi0tZW5kKTsKKworCWZyZWUodGV4dCk7CisKKwlyZXR1cm4gb3V0OworfQorCitz
dGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKK3sKKwlj
b25zdCBjaGFyICplbmQ7CisJY2hhciAqcmVzOworCisJc3RyKys7CisKKwlyZXMgPSBleHBhbmRf
ZG9sbGFyKCZzdHIpOworCisJLyogcHVzaCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRoZSBp
bnB1dCBzdHJlYW0gKi8KKwllbmQgPSBzdHIgKyBzdHJsZW4oc3RyKTsKKwl3aGlsZSAoZW5kID4g
c3RyKQorCQl1bnB1dCgqLS1lbmQpOworCisJYXBwZW5kX3N0cmluZyhyZXMsIHN0cmxlbihyZXMp
KTsKKworCWZyZWUocmVzKTsKK30KKwordm9pZCB6Y29uZl9zdGFydGhlbHAodm9pZCkKK3sKKwlu
ZXdfc3RyaW5nKCk7CisJbGFzdF90cyA9IGZpcnN0X3RzID0gMDsKKwlCRUdJTihIRUxQKTsKK30K
Kworc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKQoreworCXl5bHZhbC5zdHJpbmcgPSB0
ZXh0OworCUJFR0lOKElOSVRJQUwpOworfQorCisKKy8qCisgKiBUcnkgdG8gb3BlbiBzcGVjaWZp
ZWQgZmlsZSB3aXRoIGZvbGxvd2luZyBuYW1lczoKKyAqIC4vbmFtZQorICogJChzcmN0cmVlKS9u
YW1lCisgKiBUaGUgbGF0dGVyIGlzIHVzZWQgd2hlbiBzcmN0cmVlIGlzIHNlcGFyYXRlIGZyb20g
b2JqdHJlZQorICogd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbC4KKyAqIFJldHVybiBOVUxMIGlm
IGZpbGUgaXMgbm90IGZvdW5kLgorICovCitGSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpu
YW1lKQoreworCWNoYXIgKmVudiwgZnVsbG5hbWVbUEFUSF9NQVgrMV07CisJRklMRSAqZjsKKwor
CWYgPSBmb3BlbihuYW1lLCAiciIpOworCWlmICghZiAmJiBuYW1lICE9IE5VTEwgJiYgbmFtZVsw
XSAhPSAnLycpIHsKKwkJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOworCQlpZiAoZW52KSB7CisJCQlz
bnByaW50ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwKKwkJCQkgIiVzLyVzIiwgZW52LCBu
YW1lKTsKKwkJCWYgPSBmb3BlbihmdWxsbmFtZSwgInIiKTsKKwkJfQorCX0KKwlyZXR1cm4gZjsK
K30KKwordm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKQoreworCXl5aW4gPSB6
Y29uZl9mb3BlbihuYW1lKTsKKwlpZiAoIXl5aW4pIHsKKwkJZnByaW50ZihzdGRlcnIsICJjYW4n
dCBmaW5kIGZpbGUgJXNcbiIsIG5hbWUpOworCQlleGl0KDEpOworCX0KKworCWN1cnJlbnRfYnVm
ID0geG1hbGxvYyhzaXplb2YoKmN1cnJlbnRfYnVmKSk7CisJbWVtc2V0KGN1cnJlbnRfYnVmLCAw
LCBzaXplb2YoKmN1cnJlbnRfYnVmKSk7CisKKwljdXJyZW50X2ZpbGUgPSBmaWxlX2xvb2t1cChu
YW1lKTsKKwl5eWxpbmVubyA9IDE7Cit9CisKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hh
ciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqaXRlcjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZp
bGVfbG9va3VwKG5hbWUpOworCXN0cnVjdCBidWZmZXIgKmJ1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpi
dWYpKTsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCisJY3VycmVudF9idWYtPnN0
YXRlID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJeXlpbiA9IHpjb25mX2ZvcGVuKGZpbGUtPm5hbWUp
OworCWlmICgheXlpbikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjYW4ndCBvcGVuIGZp
bGUgXCIlc1wiXG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgZmlsZS0+
bmFtZSk7CisJCWV4aXQoMSk7CisJfQorCXl5X3N3aXRjaF90b19idWZmZXIoeXlfY3JlYXRlX2J1
ZmZlcih5eWluLCBZWV9CVUZfU0laRSkpOworCWJ1Zi0+cGFyZW50ID0gY3VycmVudF9idWY7CisJ
Y3VycmVudF9idWYgPSBidWY7CisKKwljdXJyZW50X2ZpbGUtPmxpbmVubyA9IHl5bGluZW5vOwor
CWZpbGUtPnBhcmVudCA9IGN1cnJlbnRfZmlsZTsKKworCWZvciAoaXRlciA9IGN1cnJlbnRfZmls
ZTsgaXRlcjsgaXRlciA9IGl0ZXItPnBhcmVudCkgeworCQlpZiAoIXN0cmNtcChpdGVyLT5uYW1l
LCBmaWxlLT5uYW1lKSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlY3Vyc2l2ZSBpbmNs
dXNpb24gZGV0ZWN0ZWQuXG4iCisJCQkJIkluY2x1c2lvbiBwYXRoOlxuIgorCQkJCSIgIGN1cnJl
bnQgZmlsZSA6ICVzXG4iLCBmaWxlLT5uYW1lKTsKKwkJCWl0ZXIgPSBmaWxlOworCQkJZG8gewor
CQkJCWl0ZXIgPSBpdGVyLT5wYXJlbnQ7CisJCQkJZnByaW50ZihzdGRlcnIsICIgIGluY2x1ZGVk
IGZyb206ICVzOiVkXG4iLAorCQkJCQlpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8gLSAxKTsKKwkJ
CX0gd2hpbGUgKHN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5uYW1lKSk7CisJCQlleGl0KDEpOwor
CQl9CisJfQorCisJeXlsaW5lbm8gPSAxOworCWN1cnJlbnRfZmlsZSA9IGZpbGU7Cit9CisKK3N0
YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkKK3sKKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7
CisKKwljdXJyZW50X2ZpbGUgPSBjdXJyZW50X2ZpbGUtPnBhcmVudDsKKwlpZiAoY3VycmVudF9m
aWxlKQorCQl5eWxpbmVubyA9IGN1cnJlbnRfZmlsZS0+bGluZW5vOworCisJcGFyZW50ID0gY3Vy
cmVudF9idWYtPnBhcmVudDsKKwlpZiAocGFyZW50KSB7CisJCWZjbG9zZSh5eWluKTsKKwkJeXlf
ZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUik7CisJCXl5X3N3aXRjaF90b19idWZmZXIo
cGFyZW50LT5zdGF0ZSk7CisJfQorCWZyZWUoY3VycmVudF9idWYpOworCWN1cnJlbnRfYnVmID0g
cGFyZW50OworfQorCitpbnQgemNvbmZfbGluZW5vKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRf
cG9zLmxpbmVubzsKK30KKworY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKQoreworCXJl
dHVybiBjdXJyZW50X3Bvcy5maWxlID8gY3VycmVudF9wb3MuZmlsZS0+bmFtZSA6ICI8bm9uZT4i
OworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9saXN0LmggYi9zdXBwb3J0L2tj
b25maWcubmV3L2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNDVj
YjIzN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaApAQCAt
MCwwICsxLDEzMiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNp
Zm5kZWYgTElTVF9ICisjZGVmaW5lIExJU1RfSAorCisvKgorICogQ29waWVkIGZyb20gaW5jbHVk
ZS9saW51eC8uLi4KKyAqLworCisjdW5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQ
RSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCisKKy8qKgorICogY29u
dGFpbmVyX29mIC0gY2FzdCBhIG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvdXQgdG8gdGhlIGNvbnRh
aW5pbmcgc3RydWN0dXJlCisgKiBAcHRyOiAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIG1lbWJl
ci4KKyAqIEB0eXBlOiAgICAgICB0aGUgdHlwZSBvZiB0aGUgY29udGFpbmVyIHN0cnVjdCB0aGlz
IGlzIGVtYmVkZGVkIGluLgorICogQG1lbWJlcjogICAgIHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIg
d2l0aGluIHRoZSBzdHJ1Y3QuCisgKgorICovCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5
cGUsIG1lbWJlcikgKHsgICAgICAgICAgICAgICAgICAgICAgXAorCWNvbnN0IHR5cGVvZiggKCh0
eXBlICopMCktPm1lbWJlciApICpfX21wdHIgPSAocHRyKTsgICAgXAorCSh0eXBlICopKCAoY2hh
ciAqKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsbWVtYmVyKSApO30pCisKKworc3RydWN0IGxpc3Rf
aGVhZCB7CisJc3RydWN0IGxpc3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9OworCisKKyNkZWZpbmUg
TElTVF9IRUFEX0lOSVQobmFtZSkgeyAmKG5hbWUpLCAmKG5hbWUpIH0KKworI2RlZmluZSBMSVNU
X0hFQUQobmFtZSkgXAorCXN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5h
bWUpCisKKy8qKgorICogbGlzdF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5
CisgKiBAcHRyOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgcG9pbnRlci4KKyAqIEB0eXBlOgl0aGUg
dHlwZSBvZiB0aGUgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOgl0aGUg
bmFtZSBvZiB0aGUgbGlzdF9oZWFkIHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxp
c3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKKwljb250YWluZXJfb2YocHRyLCB0eXBlLCBt
ZW1iZXIpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeQktCWl0ZXJhdGUgb3ZlciBsaXN0
IG9mIGdpdmVuIHR5cGUKKyAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJz
b3IuCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBu
YW1lIG9mIHRoZSBsaXN0X2hlYWQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlz
dF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG1lbWJlcikJCQkJXAorCWZvciAocG9zID0gbGlz
dF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgJnBv
cy0+bWVtYmVyICE9IChoZWFkKTsgCVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1i
ZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hf
ZW50cnlfc2FmZSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgc2FmZSBhZ2FpbnN0
IHJlbW92YWwgb2YgbGlzdCBlbnRyeQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBs
b29wIGN1cnNvci4KKyAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBz
dG9yYWdlCisgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRo
ZSBuYW1lIG9mIHRoZSBsaXN0X2hlYWQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUg
bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgaGVhZCwgbWVtYmVyKQkJCVwKKwlmb3Ig
KHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlciksCVwK
KwkJbiA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIp
OwlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwkJCQkJXAorCSAgICAgcG9zID0gbiwg
biA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpCisKKy8q
KgorICogbGlzdF9lbXB0eSAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0IGlzIGVtcHR5CisgKiBAaGVh
ZDogdGhlIGxpc3QgdG8gdGVzdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShj
b25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0ID09IGhl
YWQ7Cit9CisKKy8qCisgKiBJbnNlcnQgYSBuZXcgZW50cnkgYmV0d2VlbiB0d28ga25vd24gY29u
c2VjdXRpdmUgZW50cmllcy4KKyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3Qg
bWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJl
YWR5IQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFk
ICpfbmV3LAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcHJldiwKKwkJCSAgICAgIHN0cnVj
dCBsaXN0X2hlYWQgKm5leHQpCit7CisJbmV4dC0+cHJldiA9IF9uZXc7CisJX25ldy0+bmV4dCA9
IG5leHQ7CisJX25ldy0+cHJldiA9IHByZXY7CisJcHJldi0+bmV4dCA9IF9uZXc7Cit9CisKKy8q
KgorICogbGlzdF9hZGRfdGFpbCAtIGFkZCBhIG5ldyBlbnRyeQorICogQG5ldzogbmV3IGVudHJ5
IHRvIGJlIGFkZGVkCisgKiBAaGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBiZWZvcmUKKyAqCisg
KiBJbnNlcnQgYSBuZXcgZW50cnkgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMg
aXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgcXVldWVzLgorICovCitzdGF0aWMgaW5saW5lIHZv
aWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpfbmV3LCBzdHJ1Y3QgbGlzdF9oZWFk
ICpoZWFkKQoreworCV9fbGlzdF9hZGQoX25ldywgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKKy8q
CisgKiBEZWxldGUgYSBsaXN0IGVudHJ5IGJ5IG1ha2luZyB0aGUgcHJldi9uZXh0IGVudHJpZXMK
KyAqIHBvaW50IHRvIGVhY2ggb3RoZXIuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5h
bCBsaXN0IG1hbmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJp
ZXMgYWxyZWFkeSEKKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWwoc3RydWN0IGxp
c3RfaGVhZCAqcHJldiwgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0g
cHJldjsKKwlwcmV2LT5uZXh0ID0gbmV4dDsKK30KKworI2RlZmluZSBMSVNUX1BPSVNPTjEgICgo
dm9pZCAqKSAweDAwMTAwMTAwKQorI2RlZmluZSBMSVNUX1BPSVNPTjIgICgodm9pZCAqKSAweDAw
MjAwMjAwKQorLyoqCisgKiBsaXN0X2RlbCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0LgorICog
QGVudHJ5OiB0aGUgZWxlbWVudCB0byBkZWxldGUgZnJvbSB0aGUgbGlzdC4KKyAqIE5vdGU6IGxp
c3RfZW1wdHkoKSBvbiBlbnRyeSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLCB0aGUg
ZW50cnkgaXMKKyAqIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4KKyAqLworc3RhdGljIGlubGluZSB2
b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50
cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKKwllbnRyeS0+bmV4dCA9IChzdHJ1Y3QgbGlzdF9oZWFk
KilMSVNUX1BPSVNPTjE7CisJZW50cnktPnByZXYgPSAoc3RydWN0IGxpc3RfaGVhZCopTElTVF9Q
T0lTT04yOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5o
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uY2JjNzY1OGUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L2xrYy5oCkBAIC0wLDAgKzEsMTU5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBs
aW51eC1tNjhrLm9yZz4KKyAqLworCisjaWZuZGVmIExLQ19ICisjZGVmaW5lIExLQ19ICisKKyNp
bmNsdWRlICJleHByLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5k
aWYKKworI2luY2x1ZGUgImxrY19wcm90by5oIgorCisjZGVmaW5lIFNSQ1RSRUUgInNyY3RyZWUi
CisKKyNpZm5kZWYgUEFDS0FHRQorI2RlZmluZSBQQUNLQUdFICJsaW51eCIKKyNlbmRpZgorCisj
aWZuZGVmIENPTkZJR18KKyNkZWZpbmUgQ09ORklHXyAiQ09ORklHXyIKKyNlbmRpZgorc3RhdGlj
IGlubGluZSBjb25zdCBjaGFyICpDT05GSUdfcHJlZml4KHZvaWQpCit7CisJcmV0dXJuIGdldGVu
diggIkNPTkZJR18iICkgPzogQ09ORklHXzsKK30KKyN1bmRlZiBDT05GSUdfCisjZGVmaW5lIENP
TkZJR18gQ09ORklHX3ByZWZpeCgpCisKK2VudW0gY29uZl9kZWZfbW9kZSB7CisJZGVmX2RlZmF1
bHQsCisJZGVmX3llcywKKwlkZWZfbW9kLAorCWRlZl9ubywKKwlkZWZfcmFuZG9tCit9OworCitl
eHRlcm4gaW50IHl5bGluZW5vOwordm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KTsKK3ZvaWQgemNv
bmZfc3RhcnRoZWxwKHZvaWQpOworRklMRSAqemNvbmZfZm9wZW4oY29uc3QgY2hhciAqbmFtZSk7
Cit2b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB6Y29uZl9uZXh0
ZmlsZShjb25zdCBjaGFyICpuYW1lKTsKK2ludCB6Y29uZl9saW5lbm8odm9pZCk7Citjb25zdCBj
aGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpOworCisvKiBjb25mZGF0YS5jICovCitjb25zdCBjaGFy
ICpjb25mX2dldF9jb25maWduYW1lKHZvaWQpOworY2hhciAqY29uZl9nZXRfZGVmYXVsdF9jb25m
bmFtZSh2b2lkKTsKK3ZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50KTsKK3ZvaWQg
c3ltX2FkZF9jaGFuZ2VfY291bnQoaW50IGNvdW50KTsKK2Jvb2wgY29uZl9zZXRfYWxsX25ld19z
eW1ib2xzKGVudW0gY29uZl9kZWZfbW9kZSBtb2RlKTsKK3ZvaWQgc2V0X2FsbF9jaG9pY2VfdmFs
dWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pOworCisvKiBjb25mZGF0YS5jIGFuZCBleHByLmMgKi8K
K3N0YXRpYyBpbmxpbmUgdm9pZCB4ZndyaXRlKGNvbnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwg
c2l6ZV90IGNvdW50LCBGSUxFICpvdXQpCit7CisJYXNzZXJ0KGxlbiAhPSAwKTsKKworCWlmIChm
d3JpdGUoc3RyLCBsZW4sIGNvdW50LCBvdXQpICE9IGNvdW50KQorCQlmcHJpbnRmKHN0ZGVyciwg
IkVycm9yIGluIHdyaXRpbmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsKK30KKworLyogbWVudS5jICov
Cit2b2lkIF9tZW51X2luaXQodm9pZCk7Cit2b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVu
dSwgY29uc3QgY2hhciAqZm10LCAuLi4pOworc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9p
ZCk7Cit2b2lkIG1lbnVfZW5kX21lbnUodm9pZCk7Cit2b2lkIG1lbnVfYWRkX2VudHJ5KHN0cnVj
dCBzeW1ib2wgKnN5bSk7Cit2b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVwKTsKK3Zv
aWQgbWVudV9hZGRfdmlzaWJpbGl0eShzdHJ1Y3QgZXhwciAqZGVwKTsKK3N0cnVjdCBwcm9wZXJ0
eSAqbWVudV9hZGRfcHJvbXB0KGVudW0gcHJvcF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3Ry
dWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVfYWRkX2V4cHIoZW51bSBwcm9wX3R5cGUgdHlwZSwg
c3RydWN0IGV4cHIgKmV4cHIsIHN0cnVjdCBleHByICpkZXApOwordm9pZCBtZW51X2FkZF9zeW1i
b2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3QgZXhwciAq
ZGVwKTsKK3ZvaWQgbWVudV9hZGRfb3B0aW9uX21vZHVsZXModm9pZCk7Cit2b2lkIG1lbnVfYWRk
X29wdGlvbl9kZWZjb25maWdfbGlzdCh2b2lkKTsKK3ZvaWQgbWVudV9hZGRfb3B0aW9uX2FsbG5v
Y29uZmlnX3kodm9pZCk7Cit2b2lkIG1lbnVfZmluYWxpemUoc3RydWN0IG1lbnUgKnBhcmVudCk7
Cit2b2lkIG1lbnVfc2V0X3R5cGUoaW50IHR5cGUpOworCisvKiB1dGlsLmMgKi8KK3N0cnVjdCBm
aWxlICpmaWxlX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgKnhtYWxsb2Moc2l6ZV90
IHNpemUpOwordm9pZCAqeGNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsKK3ZvaWQg
KnhyZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBzaXplKTsKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hh
ciAqcyk7CitjaGFyICp4c3RybmR1cChjb25zdCBjaGFyICpzLCBzaXplX3Qgbik7CisKKy8qIGxl
eGVyLmwgKi8KK2ludCB5eWxleCh2b2lkKTsKKworc3RydWN0IGdzdHIgeworCXNpemVfdCBsZW47
CisJY2hhciAgKnM7CisJLyoKKwkqIHdoZW4gbWF4X3dpZHRoIGlzIG5vdCB6ZXJvIGxvbmcgbGlu
ZXMgaW4gc3RyaW5nIHMgKGlmIGFueSkgZ2V0CisJKiB3cmFwcGVkIG5vdCB0byBleGNlZWQgdGhl
IG1heF93aWR0aCB2YWx1ZQorCSovCisJaW50IG1heF93aWR0aDsKK307CitzdHJ1Y3QgZ3N0ciBz
dHJfbmV3KHZvaWQpOwordm9pZCBzdHJfZnJlZShzdHJ1Y3QgZ3N0ciAqZ3MpOwordm9pZCBzdHJf
YXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqcyk7Cit2b2lkIHN0cl9wcmludGYo
c3RydWN0IGdzdHIgKmdzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7Citjb25zdCBjaGFyICpzdHJf
Z2V0KHN0cnVjdCBnc3RyICpncyk7CisKKy8qIHN5bWJvbC5jICovCit2b2lkIHN5bV9jbGVhcl9h
bGxfdmFsaWQodm9pZCk7CitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3RydWN0
IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVj
dCBzeW1ib2wgKnN5bSk7Citjb25zdCBjaGFyICpzeW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN0cnVj
dCBzeW1ib2wgKnN5bSk7CitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZGVwcyhzdHJ1Y3Qgc3lt
Ym9sICpzeW0pOworc3RydWN0IHByb3BlcnR5ICpwcm9wX2FsbG9jKGVudW0gcHJvcF90eXBlIHR5
cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSk7CitzdHJ1Y3Qgc3ltYm9sICpwcm9wX2dldF9zeW1ib2wo
c3RydWN0IHByb3BlcnR5ICpwcm9wKTsKKworc3RhdGljIGlubGluZSB0cmlzdGF0ZSBzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT5jdXJy
LnRyaTsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKnN5bV9nZXRfY2hvaWNl
X3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBzeW1ib2wgKilz
eW0tPmN1cnIudmFsOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX3NldF9jaG9pY2VfdmFs
dWUoc3RydWN0IHN5bWJvbCAqY2gsIHN0cnVjdCBzeW1ib2wgKmNodmFsKQoreworCXJldHVybiBz
eW1fc2V0X3RyaXN0YXRlX3ZhbHVlKGNodmFsLCB5ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgc3ltX2lzX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+Zmxh
Z3MgJiBTWU1CT0xfQ0hPSUNFID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJv
b2wgc3ltX2lzX2Nob2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5
bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFVkFMID8gdHJ1ZSA6IGZhbHNlOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgc3ltX2lzX29wdGlvbmFsKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1
cm4gc3ltLT5mbGFncyAmIFNZTUJPTF9PUFRJT05BTCA/IHRydWUgOiBmYWxzZTsKK30KKworc3Rh
dGljIGlubGluZSBib29sIHN5bV9oYXNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJl
dHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSID8gdHJ1ZSA6IGZhbHNlOworfQorCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogTEtDX0ggKi8KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjX3Byb3RvLmggYi9zdXBwb3J0L2tjb25maWcu
bmV3L2xrY19wcm90by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi44NmMy
Njc1NAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjX3Byb3RvLmgK
QEAgLTAsMCArMSw2NiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8K
KyNpbmNsdWRlIDxzdGRhcmcuaD4KKworLyogY29uZmRhdGEuYyAqLwordm9pZCBjb25mX3BhcnNl
KGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGNvbmZfcmVhZChjb25zdCBjaGFyICpuYW1lKTsKK2lu
dCBjb25mX3JlYWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCk7CitpbnQgY29uZl93cml0
ZV9kZWZjb25maWcoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgY29uZl93cml0ZShjb25zdCBjaGFy
ICpuYW1lKTsKK2ludCBjb25mX3dyaXRlX2F1dG9jb25mKGludCBvdmVyd3JpdGUpOworYm9vbCBj
b25mX2dldF9jaGFuZ2VkKHZvaWQpOwordm9pZCBjb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKHZv
aWQgKCpmbikodm9pZCkpOwordm9pZCBjb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKHZvaWQgKCpm
bikoY29uc3QgY2hhciAqcykpOworCisvKiBtZW51LmMgKi8KK2V4dGVybiBzdHJ1Y3QgbWVudSBy
b290bWVudTsKKworYm9vbCBtZW51X2lzX2VtcHR5KHN0cnVjdCBtZW51ICptZW51KTsKK2Jvb2wg
bWVudV9pc192aXNpYmxlKHN0cnVjdCBtZW51ICptZW51KTsKK2Jvb2wgbWVudV9oYXNfcHJvbXB0
KHN0cnVjdCBtZW51ICptZW51KTsKK2NvbnN0IGNoYXIgKiBtZW51X2dldF9wcm9tcHQoc3RydWN0
IG1lbnUgKm1lbnUpOworc3RydWN0IG1lbnUgKiBtZW51X2dldF9yb290X21lbnUoc3RydWN0IG1l
bnUgKm1lbnUpOworc3RydWN0IG1lbnUgKiBtZW51X2dldF9wYXJlbnRfbWVudShzdHJ1Y3QgbWVu
dSAqbWVudSk7Citib29sIG1lbnVfaGFzX2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOworY29uc3Qg
Y2hhciAqIG1lbnVfZ2V0X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOworc3RydWN0IGdzdHIgZ2V0
X3JlbGF0aW9uc19zdHIoc3RydWN0IHN5bWJvbCAqKnN5bV9hcnIsIHN0cnVjdCBsaXN0X2hlYWQg
KmhlYWQpOwordm9pZCBtZW51X2dldF9leHRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0
IGdzdHIgKmhlbHApOworCisvKiBzeW1ib2wuYyAqLworZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKiBz
eW1ib2xfaGFzaFtTWU1CT0xfSEFTSFNJWkVdOworCitzdHJ1Y3Qgc3ltYm9sICogc3ltX2xvb2t1
cChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOworc3RydWN0IHN5bWJvbCAqIHN5bV9maW5k
KGNvbnN0IGNoYXIgKm5hbWUpOworY29uc3QgY2hhciAqIHN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVl
KGNvbnN0IGNoYXIgKmluKTsKK3N0cnVjdCBzeW1ib2wgKiogc3ltX3JlX3NlYXJjaChjb25zdCBj
aGFyICpwYXR0ZXJuKTsKK2NvbnN0IGNoYXIgKiBzeW1fdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5
cGUgdHlwZSk7Cit2b2lkIHN5bV9jYWxjX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7CitlbnVt
IHN5bWJvbF90eXBlIHN5bV9nZXRfdHlwZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOworYm9vbCBzeW1f
dHJpc3RhdGVfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlzdGF0ZSB0cmkpOwor
Ym9vbCBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlzdGF0ZSB0
cmkpOwordHJpc3RhdGUgc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpz
eW0pOworYm9vbCBzeW1fc3RyaW5nX3ZhbGlkKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hh
ciAqbmV3dmFsKTsKK2Jvb2wgc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3RydWN0IHN5bWJvbCAq
c3ltLCBjb25zdCBjaGFyICpzdHIpOworYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qg
c3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCk7Citib29sIHN5bV9pc19jaGFuZ2FibGUo
c3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBwcm9wZXJ0eSAqIHN5bV9nZXRfY2hvaWNlX3By
b3Aoc3RydWN0IHN5bWJvbCAqc3ltKTsKK2NvbnN0IGNoYXIgKiBzeW1fZ2V0X3N0cmluZ192YWx1
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCitjb25zdCBjaGFyICogcHJvcF9nZXRfdHlwZV9uYW1l
KGVudW0gcHJvcF90eXBlIHR5cGUpOworCisvKiBwcmVwcm9jZXNzLmMgKi8KK2VudW0gdmFyaWFi
bGVfZmxhdm9yIHsKKwlWQVJfU0lNUExFLAorCVZBUl9SRUNVUlNJVkUsCisJVkFSX0FQUEVORCwK
K307Cit2b2lkIGVudl93cml0ZV9kZXAoRklMRSAqZiwgY29uc3QgY2hhciAqYXV0b19jb25mX25h
bWUpOwordm9pZCB2YXJpYWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFs
dWUsCisJCSAgZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yKTsKK3ZvaWQgdmFyaWFibGVfYWxs
X2RlbCh2b2lkKTsKK2NoYXIgKmV4cGFuZF9zdHJpbmcoY29uc3QgY2hhciAqaW4pOworY2hhciAq
ZXhwYW5kX2RvbGxhcihjb25zdCBjaGFyICoqc3RyKTsKK2NoYXIgKmV4cGFuZF9vbmVfdG9rZW4o
Y29uc3QgY2hhciAqKnN0cik7CisKKy8qIGV4cHIuYyAqLwordm9pZCBleHByX3ByaW50KHN0cnVj
dCBleHByICplLCB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFy
ICopLCB2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9s
eGRpYWxvZy9CSUcuRkFULldBUk5JTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjdjYjVhN2VjCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRp
YWxvZy9CSUcuRkFULldBUk5JTkcKQEAgLTAsMCArMSw0IEBACitUaGlzIGlzIE5PVCB0aGUgb2Zm
aWNpYWwgdmVyc2lvbiBvZiBkaWFsb2cuICBUaGlzIHZlcnNpb24gaGFzIGJlZW4KK3NpZ25pZmlj
YW50bHkgbW9kaWZpZWQgZnJvbSB0aGUgb3JpZ2luYWwuICBJdCBpcyBmb3IgdXNlIGJ5IHRoZSBM
aW51eAora2VybmVsIGNvbmZpZ3VyYXRpb24gc2NyaXB0LiAgUGxlYXNlIGRvIG5vdCBib3RoZXIg
U2F2aW8gTGFtIHdpdGgKK3F1ZXN0aW9ucyBhYm91dCB0aGlzIHByb2dyYW0uCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9seGRpYWxvZy9jaGVja2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uZmQxNjFjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L2x4ZGlhbG9nL2NoZWNrbGlzdC5jCkBAIC0wLDAgKzEsMzE5IEBACisvLyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgY2hlY2tsaXN0LmMgLS0gaW1wbGVtZW50cyB0
aGUgY2hlY2tsaXN0IGJveAorICoKKyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFt
ODM2QGNzLmN1aGsuaGspCisgKiAgICAgU3R1YXJ0IEhlcmJlcnQgLSBTLkhlcmJlcnRAc2hlZmZp
ZWxkLmFjLnVrOiByYWRpb2xpc3QgZXh0ZW5zaW9uCisgKiAgICAgQWxlc3NhbmRybyBSdWJpbmkg
LSBydWJpbmlAaXB2dmlzLnVuaXB2Lml0OiBtZXJnZWQgdGhlIHR3bworICogIE1PRElGSUVEIEZP
UiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNv
bSkKKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKK3N0YXRpYyBpbnQgbGlzdF93aWR0aCwg
Y2hlY2tfeCwgaXRlbV94OworCisvKgorICogUHJpbnQgbGlzdCBpdGVtCisgKi8KK3N0YXRpYyB2
b2lkIHByaW50X2l0ZW0oV0lORE9XICogd2luLCBpbnQgY2hvaWNlLCBpbnQgc2VsZWN0ZWQpCit7
CisJaW50IGk7CisJY2hhciAqbGlzdF9pdGVtID0gbWFsbG9jKGxpc3Rfd2lkdGggKyAxKTsKKwor
CXN0cm5jcHkobGlzdF9pdGVtLCBpdGVtX3N0cigpLCBsaXN0X3dpZHRoIC0gaXRlbV94KTsKKwls
aXN0X2l0ZW1bbGlzdF93aWR0aCAtIGl0ZW1feF0gPSAnXDAnOworCisJLyogQ2xlYXIgJ3Jlc2lk
dWUnIG9mIGxhc3QgaXRlbSAqLworCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsKKwl3
bW92ZSh3aW4sIGNob2ljZSwgMCk7CisJZm9yIChpID0gMDsgaSA8IGxpc3Rfd2lkdGg7IGkrKykK
KwkJd2FkZGNoKHdpbiwgJyAnKTsKKworCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194KTsKKwl3
YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmNoZWNrX3NlbGVjdGVkLmF0cgorCQkgOiBkbGcu
Y2hlY2suYXRyKTsKKwlpZiAoIWl0ZW1faXNfdGFnKCc6JykpCisJCXdwcmludHcod2luLCAiKCVj
KSIsIGl0ZW1faXNfdGFnKCdYJykgPyAnWCcgOiAnICcpOworCisJd2F0dHJzZXQod2luLCBzZWxl
Y3RlZCA/IGRsZy50YWdfc2VsZWN0ZWQuYXRyIDogZGxnLnRhZy5hdHIpOworCW12d2FkZGNoKHdp
biwgY2hvaWNlLCBpdGVtX3gsIGxpc3RfaXRlbVswXSk7CisJd2F0dHJzZXQod2luLCBzZWxlY3Rl
ZCA/IGRsZy5pdGVtX3NlbGVjdGVkLmF0ciA6IGRsZy5pdGVtLmF0cik7CisJd2FkZHN0cih3aW4s
IGxpc3RfaXRlbSArIDEpOworCWlmIChzZWxlY3RlZCkgeworCQl3bW92ZSh3aW4sIGNob2ljZSwg
Y2hlY2tfeCArIDEpOworCQl3cmVmcmVzaCh3aW4pOworCX0KKwlmcmVlKGxpc3RfaXRlbSk7Cit9
CisKKy8qCisgKiBQcmludCB0aGUgc2Nyb2xsIGluZGljYXRvcnMuCisgKi8KK3N0YXRpYyB2b2lk
IHByaW50X2Fycm93cyhXSU5ET1cgKiB3aW4sIGludCBjaG9pY2UsIGludCBpdGVtX25vLCBpbnQg
c2Nyb2xsLAorCSAgICAgaW50IHksIGludCB4LCBpbnQgaGVpZ2h0KQoreworCXdtb3ZlKHdpbiwg
eSwgeCk7CisKKwlpZiAoc2Nyb2xsID4gMCkgeworCQl3YXR0cnNldCh3aW4sIGRsZy51YXJyb3cu
YXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNTX1VBUlJPVyk7CisJCXdhZGRzdHIod2luLCAiKC0pIik7
CisJfSBlbHNlIHsKKwkJd2F0dHJzZXQod2luLCBkbGcubWVudWJveC5hdHIpOworCQl3YWRkY2go
d2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2lu
LCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCX0KKworCXkgPSB5ICsg
aGVpZ2h0ICsgMTsKKwl3bW92ZSh3aW4sIHksIHgpOworCisJaWYgKChoZWlnaHQgPCBpdGVtX25v
KSAmJiAoc2Nyb2xsICsgY2hvaWNlIDwgaXRlbV9ubyAtIDEpKSB7CisJCXdhdHRyc2V0KHdpbiwg
ZGxnLmRhcnJvdy5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfREFSUk9XKTsKKwkJd2FkZHN0cih3
aW4sICIoKykiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94X2JvcmRl
ci5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJ
TkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUp
OworCX0KK30KKworLyoKKyAqICBEaXNwbGF5IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zCisgKi8K
K3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0LCBp
bnQgd2lkdGgsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOworCWlu
dCB5ID0gaGVpZ2h0IC0gMjsKKworCXByaW50X2J1dHRvbihkaWFsb2csICJTZWxlY3QiLCB5LCB4
LCBzZWxlY3RlZCA9PSAwKTsKKwlwcmludF9idXR0b24oZGlhbG9nLCAiIEhlbHAgIiwgeSwgeCAr
IDE0LCBzZWxlY3RlZCA9PSAxKTsKKworCXdtb3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxNCAqIHNl
bGVjdGVkKTsKKwl3cmVmcmVzaChkaWFsb2cpOworfQorCisvKgorICogRGlzcGxheSBhIGRpYWxv
ZyBib3ggd2l0aCBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSB0dXJuZWQgb24gb3Igb2Zm
CisgKiBpbiB0aGUgc3R5bGUgb2YgcmFkaW9saXN0IChvbmx5IG9uZSBvcHRpb24gdHVybmVkIG9u
IGF0IGEgdGltZSkuCisgKi8KK2ludCBkaWFsb2dfY2hlY2tsaXN0KGNvbnN0IGNoYXIgKnRpdGxl
LCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsCisJCSAgICAgaW50IHdpZHRoLCBpbnQg
bGlzdF9oZWlnaHQpCit7CisJaW50IGksIHgsIHksIGJveF94LCBib3hfeTsKKwlpbnQga2V5ID0g
MCwgYnV0dG9uID0gMCwgY2hvaWNlID0gMCwgc2Nyb2xsID0gMCwgbWF4X2Nob2ljZTsKKwlXSU5E
T1cgKmRpYWxvZywgKmxpc3Q7CisKKwkvKiB3aGljaCBpdGVtIHRvIGhpZ2hsaWdodCAqLworCWl0
ZW1fZm9yZWFjaCgpIHsKKwkJaWYgKGl0ZW1faXNfdGFnKCdYJykpCisJCQljaG9pY2UgPSBpdGVt
X24oKTsKKwkJaWYgKGl0ZW1faXNfc2VsZWN0ZWQoKSkgeworCQkJY2hvaWNlID0gaXRlbV9uKCk7
CisJCQlicmVhazsKKwkJfQorCX0KKworZG9fcmVzaXplOgorCWlmIChnZXRtYXh5KHN0ZHNjcikg
PCAoaGVpZ2h0ICsgQ0hFQ0tMSVNUX0hFSUdUSF9NSU4pKQorCQlyZXR1cm4gLUVSUkRJU1BMQVlU
T09TTUFMTDsKKwlpZiAoZ2V0bWF4eChzdGRzY3IpIDwgKHdpZHRoICsgQ0hFQ0tMSVNUX1dJRFRI
X01JTikpCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOworCisJbWF4X2Nob2ljZSA9IE1J
TihsaXN0X2hlaWdodCwgaXRlbV9jb3VudCgpKTsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94IG9u
IHNjcmVlbiAqLworCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKKwl5ID0gKGdl
dG1heHkoc3Rkc2NyKSAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4
LCBoZWlnaHQsIHdpZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4
KTsKKwlrZXlwYWQoZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVp
Z2h0LCB3aWR0aCwKKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisJd2F0dHJz
ZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAz
LCAwLCBBQ1NfTFRFRSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRk
Y2goZGlhbG9nLCBBQ1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIp
OworCXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0
bGUsIHdpZHRoKTsKKworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXByaW50
X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOworCisJbGlzdF93aWR0
aCA9IHdpZHRoIC0gNjsKKwlib3hfeSA9IGhlaWdodCAtIGxpc3RfaGVpZ2h0IC0gNTsKKwlib3hf
eCA9ICh3aWR0aCAtIGxpc3Rfd2lkdGgpIC8gMiAtIDE7CisKKwkvKiBjcmVhdGUgbmV3IHdpbmRv
dyBmb3IgdGhlIGxpc3QgKi8KKwlsaXN0ID0gc3Vid2luKGRpYWxvZywgbGlzdF9oZWlnaHQsIGxp
c3Rfd2lkdGgsIHkgKyBib3hfeSArIDEsCisJCSAgICAgIHggKyBib3hfeCArIDEpOworCisJa2V5
cGFkKGxpc3QsIFRSVUUpOworCisJLyogZHJhdyBhIGJveCBhcm91bmQgdGhlIGxpc3QgaXRlbXMg
Ki8KKwlkcmF3X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbGlzdF9oZWlnaHQgKyAyLCBsaXN0
X3dpZHRoICsgMiwKKwkJIGRsZy5tZW51Ym94X2JvcmRlci5hdHIsIGRsZy5tZW51Ym94LmF0cik7
CisKKwkvKiBGaW5kIGxlbmd0aCBvZiBsb25nZXN0IGl0ZW0gaW4gb3JkZXIgdG8gY2VudGVyIGNo
ZWNrbGlzdCAqLworCWNoZWNrX3ggPSAwOworCWl0ZW1fZm9yZWFjaCgpCisJCWNoZWNrX3ggPSBN
QVgoY2hlY2tfeCwgc3RybGVuKGl0ZW1fc3RyKCkpICsgNCk7CisJY2hlY2tfeCA9IE1JTihjaGVj
a194LCBsaXN0X3dpZHRoKTsKKworCWNoZWNrX3ggPSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8g
MjsKKwlpdGVtX3ggPSBjaGVja194ICsgNDsKKworCWlmIChjaG9pY2UgPj0gbGlzdF9oZWlnaHQp
IHsKKwkJc2Nyb2xsID0gY2hvaWNlIC0gbGlzdF9oZWlnaHQgKyAxOworCQljaG9pY2UgLT0gc2Ny
b2xsOworCX0KKworCS8qIFByaW50IHRoZSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IG1heF9j
aG9pY2U7IGkrKykgeworCQlpdGVtX3NldChzY3JvbGwgKyBpKTsKKwkJcHJpbnRfaXRlbShsaXN0
LCBpLCBpID09IGNob2ljZSk7CisJfQorCisJcHJpbnRfYXJyb3dzKGRpYWxvZywgY2hvaWNlLCBp
dGVtX2NvdW50KCksIHNjcm9sbCwKKwkJICAgICBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwg
bGlzdF9oZWlnaHQpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDAp
OworCisJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJd25vdXRyZWZyZXNoKGxpc3QpOworCWRvdXBk
YXRlKCk7CisKKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxv
Zyk7CisKKwkJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQkJaXRlbV9zZXQo
aSArIHNjcm9sbCk7CisJCQlpZiAodG91cHBlcihrZXkpID09IHRvdXBwZXIoaXRlbV9zdHIoKVsw
XSkpCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaSA8IG1heF9jaG9pY2UgfHwga2V5ID09IEtF
WV9VUCB8fCBrZXkgPT0gS0VZX0RPV04gfHwKKwkJICAgIGtleSA9PSAnKycgfHwga2V5ID09ICct
JykgeworCQkJaWYgKGtleSA9PSBLRVlfVVAgfHwga2V5ID09ICctJykgeworCQkJCWlmICghY2hv
aWNlKSB7CisJCQkJCWlmICghc2Nyb2xsKQorCQkJCQkJY29udGludWU7CisJCQkJCS8qIFNjcm9s
bCBsaXN0IGRvd24gKi8KKwkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4gMSkgeworCQkJCQkJLyogRGUt
aGlnaGxpZ2h0IGN1cnJlbnQgZmlyc3QgaXRlbSAqLworCQkJCQkJaXRlbV9zZXQoc2Nyb2xsKTsK
KwkJCQkJCXByaW50X2l0ZW0obGlzdCwgMCwgRkFMU0UpOworCQkJCQkJc2Nyb2xsb2sobGlzdCwg
VFJVRSk7CisJCQkJCQl3c2NybChsaXN0LCAtMSk7CisJCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxT
RSk7CisJCQkJCX0KKwkJCQkJc2Nyb2xsLS07CisJCQkJCWl0ZW1fc2V0KHNjcm9sbCk7CisJCQkJ
CXByaW50X2l0ZW0obGlzdCwgMCwgVFJVRSk7CisJCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNo
b2ljZSwgaXRlbV9jb3VudCgpLAorCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNo
ZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7CisKKwkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJ
CQkJCXdyZWZyZXNoKGxpc3QpOworCisJCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVy
IGtleSBwcmVzcyAqLworCQkJCX0gZWxzZQorCQkJCQlpID0gY2hvaWNlIC0gMTsKKwkJCX0gZWxz
ZSBpZiAoa2V5ID09IEtFWV9ET1dOIHx8IGtleSA9PSAnKycpIHsKKwkJCQlpZiAoY2hvaWNlID09
IG1heF9jaG9pY2UgLSAxKSB7CisJCQkJCWlmIChzY3JvbGwgKyBjaG9pY2UgPj0gaXRlbV9jb3Vu
dCgpIC0gMSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBTY3JvbGwgbGlzdCB1cCAqLworCQkJ
CQlpZiAobGlzdF9oZWlnaHQgPiAxKSB7CisJCQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBs
YXN0IGl0ZW0gYmVmb3JlIHNjcm9sbGluZyB1cCAqLworCQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsg
bWF4X2Nob2ljZSAtIDEpOworCQkJCQkJcHJpbnRfaXRlbShsaXN0LAorCQkJCQkJCSAgICBtYXhf
Y2hvaWNlIC0gMSwKKwkJCQkJCQkgICAgRkFMU0UpOworCQkJCQkJc2Nyb2xsb2sobGlzdCwgVFJV
RSk7CisJCQkJCQl3c2NybChsaXN0LCAxKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNFKTsK
KwkJCQkJfQorCQkJCQlzY3JvbGwrKzsKKwkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2lj
ZSAtIDEpOworCQkJCQlwcmludF9pdGVtKGxpc3QsIG1heF9jaG9pY2UgLSAxLCBUUlVFKTsKKwor
CQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwKKwkJCQkJCSAg
ICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOworCisJ
CQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCQl3cmVmcmVzaChsaXN0KTsKKworCQkJCQlj
b250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJCQl9IGVsc2UKKwkJ
CQkJaSA9IGNob2ljZSArIDE7CisJCQl9CisJCQlpZiAoaSAhPSBjaG9pY2UpIHsKKwkJCQkvKiBE
ZS1oaWdobGlnaHQgY3VycmVudCBpdGVtICovCisJCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNl
KTsKKwkJCQlwcmludF9pdGVtKGxpc3QsIGNob2ljZSwgRkFMU0UpOworCQkJCS8qIEhpZ2hsaWdo
dCBuZXcgaXRlbSAqLworCQkJCWNob2ljZSA9IGk7CisJCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hv
aWNlKTsKKwkJCQlwcmludF9pdGVtKGxpc3QsIGNob2ljZSwgVFJVRSk7CisJCQkJd25vdXRyZWZy
ZXNoKGRpYWxvZyk7CisJCQkJd3JlZnJlc2gobGlzdCk7CisJCQl9CisJCQljb250aW51ZTsJLyog
d2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJfQorCQlzd2l0Y2ggKGtleSkgeworCQlj
YXNlICdIJzoKKwkJY2FzZSAnaCc6CisJCWNhc2UgJz8nOgorCQkJYnV0dG9uID0gMTsKKwkJCS8q
IGZhbGwtdGhyb3VnaCAqLworCQljYXNlICdTJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJyAnOgor
CQljYXNlICdcbic6CisJCQlpdGVtX2ZvcmVhY2goKQorCQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDAp
OworCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsKKwkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEp
OworCQkJZGVsd2luKGxpc3QpOworCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gYnV0dG9u
OworCQljYXNlIFRBQjoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQli
dXR0b24gPSAoKGtleSA9PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDogKytidXR0b24pIDwgMCkKKwkJ
CSAgICA/IDEgOiAoYnV0dG9uID4gMSA/IDAgOiBidXR0b24pOworCisJCQlwcmludF9idXR0b25z
KGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgYnV0dG9uKTsKKwkJCXdyZWZyZXNoKGRpYWxvZyk7CisJ
CQlicmVhazsKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gS0VZX0VTQzsKKwkJ
CWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7CisJ
CQlicmVhazsKKwkJY2FzZSBLRVlfUkVTSVpFOgorCQkJZGVsd2luKGxpc3QpOworCQkJZGVsd2lu
KGRpYWxvZyk7CisJCQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3RvIGRvX3Jlc2l6ZTsKKwkJfQor
CisJCS8qIE5vdywgdXBkYXRlIGV2ZXJ5dGhpbmcuLi4gKi8KKwkJZG91cGRhdGUoKTsKKwl9CisJ
ZGVsd2luKGxpc3QpOworCWRlbHdpbihkaWFsb2cpOworCXJldHVybiBrZXk7CQkvKiBFU0MgcHJl
c3NlZCAqLworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9kaWFs
b2cuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjY4YjU2NWUzCi0tLSAvZGV2L251bGwKKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9kaWFsb2cuaApAQCAtMCwwICsxLDIzOCBAQAorLyog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCisvKgorICogIGRpYWxvZy5oIC0t
IGNvbW1vbiBkZWNsYXJhdGlvbnMgZm9yIGFsbCBkaWFsb2cgbW9kdWxlcworICoKKyAqICBBVVRI
T1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCisgKi8KKworI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVk
ZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlIDxzdGRib29sLmg+CisKKyNpZmRlZiBfX3N1bl9fCisjZGVmaW5lIENVUlNfTUFDUk9T
CisjZW5kaWYKKyNpbmNsdWRlIDxuY3Vyc2VzLmg+CisKKy8qCisgKiBDb2xvcnMgaW4gbmN1cnNl
cyAxLjkuOWUgZG8gbm90IHdvcmsgcHJvcGVybHkgc2luY2UgZm9yZWdyb3VuZCBhbmQKKyAqIGJh
Y2tncm91bmQgY29sb3JzIGFyZSBPUidkIHJhdGhlciB0aGFuIHNlcGFyYXRlbHkgbWFza2VkLiAg
VGhpcyB2ZXJzaW9uCisgKiBvZiBkaWFsb2cgd2FzIGhhY2tlZCB0byB3b3JrIHdpdGggbmN1cnNl
cyAxLjkuOWUsIG1ha2luZyBpdCBpbmNvbXBhdGlibGUKKyAqIHdpdGggc3RhbmRhcmQgY3Vyc2Vz
LiAgVGhlIHNpbXBsZXN0IGZpeCAodG8gbWFrZSB0aGlzIHdvcmsgd2l0aCBzdGFuZGFyZAorICog
Y3Vyc2VzKSB1c2VzIHRoZSB3YmtnZHNldCgpIGZ1bmN0aW9uLCBub3QgdXNlZCBpbiB0aGUgb3Jp
Z2luYWwgaGFjay4KKyAqIFR1cm4gaXQgb2ZmIGlmIHdlJ3JlIGJ1aWxkaW5nIHdpdGggMS45Ljll
LCBzaW5jZSBpdCBqdXN0IGNvbmZ1c2VzIHRoaW5ncy4KKyAqLworI2lmIGRlZmluZWQoTkNVUlNF
U19WRVJTSU9OKSAmJiBkZWZpbmVkKF9ORUVEX1dSQVApICYmICFkZWZpbmVkKEdDQ19QUklOVEZM
SUtFKQorI2RlZmluZSBPTERfTkNVUlNFUyAxCisjdW5kZWYgIHdia2dkc2V0CisjZGVmaW5lIHdi
a2dkc2V0KHcscCkJCS8qbm90aGluZyAqLworI2Vsc2UKKyNkZWZpbmUgT0xEX05DVVJTRVMgMAor
I2VuZGlmCisKKyNkZWZpbmUgVFIocGFyYW1zKSBfdHJhY2VmIHBhcmFtcworCisjZGVmaW5lIEtF
WV9FU0MgMjcKKyNkZWZpbmUgVEFCIDkKKyNkZWZpbmUgTUFYX0xFTiAyMDQ4CisjZGVmaW5lIEJV
Rl9TSVpFICgxMCoxMDI0KQorI2RlZmluZSBNSU4oeCx5KSAoeCA8IHkgPyB4IDogeSkKKyNkZWZp
bmUgTUFYKHgseSkgKHggPiB5ID8geCA6IHkpCisKKyNpZm5kZWYgQUNTX1VMQ09STkVSCisjZGVm
aW5lIEFDU19VTENPUk5FUiAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfTExDT1JORVIKKyNkZWZp
bmUgQUNTX0xMQ09STkVSICcrJworI2VuZGlmCisjaWZuZGVmIEFDU19VUkNPUk5FUgorI2RlZmlu
ZSBBQ1NfVVJDT1JORVIgJysnCisjZW5kaWYKKyNpZm5kZWYgQUNTX0xSQ09STkVSCisjZGVmaW5l
IEFDU19MUkNPUk5FUiAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfSExJTkUKKyNkZWZpbmUgQUNT
X0hMSU5FICctJworI2VuZGlmCisjaWZuZGVmIEFDU19WTElORQorI2RlZmluZSBBQ1NfVkxJTkUg
J3wnCisjZW5kaWYKKyNpZm5kZWYgQUNTX0xURUUKKyNkZWZpbmUgQUNTX0xURUUgJysnCisjZW5k
aWYKKyNpZm5kZWYgQUNTX1JURUUKKyNkZWZpbmUgQUNTX1JURUUgJysnCisjZW5kaWYKKyNpZm5k
ZWYgQUNTX1VBUlJPVworI2RlZmluZSBBQ1NfVUFSUk9XICdeJworI2VuZGlmCisjaWZuZGVmIEFD
U19EQVJST1cKKyNkZWZpbmUgQUNTX0RBUlJPVyAndicKKyNlbmRpZgorCisvKiBlcnJvciByZXR1
cm4gY29kZXMgKi8KKyNkZWZpbmUgRVJSRElTUExBWVRPT1NNQUxMIChLRVlfTUFYICsgMSkKKwor
LyoKKyAqICAgQ29sb3IgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IGRpYWxvZ19jb2xvciB7CisJ
Y2h0eXBlIGF0cjsJLyogQ29sb3IgYXR0cmlidXRlICovCisJaW50IGZnOwkJLyogZm9yZWdyb3Vu
ZCAqLworCWludCBiZzsJCS8qIGJhY2tncm91bmQgKi8KKwlpbnQgaGw7CQkvKiBoaWdobGlnaHQg
dGhpcyBpdGVtICovCit9OworCitzdHJ1Y3Qgc3VidGl0bGVfbGlzdCB7CisJc3RydWN0IHN1YnRp
dGxlX2xpc3QgKm5leHQ7CisJY29uc3QgY2hhciAqdGV4dDsKK307CisKK3N0cnVjdCBkaWFsb2df
aW5mbyB7CisJY29uc3QgY2hhciAqYmFja3RpdGxlOworCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpz
dWJ0aXRsZXM7CisJc3RydWN0IGRpYWxvZ19jb2xvciBzY3JlZW47CisJc3RydWN0IGRpYWxvZ19j
b2xvciBzaGFkb3c7CisJc3RydWN0IGRpYWxvZ19jb2xvciBkaWFsb2c7CisJc3RydWN0IGRpYWxv
Z19jb2xvciB0aXRsZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJvcmRlcjsKKwlzdHJ1Y3QgZGlh
bG9nX2NvbG9yIGJ1dHRvbl9hY3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25faW5h
Y3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fa2V5X2FjdGl2ZTsKKwlzdHJ1Y3Qg
ZGlhbG9nX2NvbG9yIGJ1dHRvbl9rZXlfaW5hY3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xvciBi
dXR0b25fbGFiZWxfYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2xhYmVsX2lu
YWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgaW5wdXRib3g7CisJc3RydWN0IGRpYWxvZ19j
b2xvciBpbnB1dGJveF9ib3JkZXI7CisJc3RydWN0IGRpYWxvZ19jb2xvciBzZWFyY2hib3g7CisJ
c3RydWN0IGRpYWxvZ19jb2xvciBzZWFyY2hib3hfdGl0bGU7CisJc3RydWN0IGRpYWxvZ19jb2xv
ciBzZWFyY2hib3hfYm9yZGVyOworCXN0cnVjdCBkaWFsb2dfY29sb3IgcG9zaXRpb25faW5kaWNh
dG9yOworCXN0cnVjdCBkaWFsb2dfY29sb3IgbWVudWJveDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9y
IG1lbnVib3hfYm9yZGVyOworCXN0cnVjdCBkaWFsb2dfY29sb3IgaXRlbTsKKwlzdHJ1Y3QgZGlh
bG9nX2NvbG9yIGl0ZW1fc2VsZWN0ZWQ7CisJc3RydWN0IGRpYWxvZ19jb2xvciB0YWc7CisJc3Ry
dWN0IGRpYWxvZ19jb2xvciB0YWdfc2VsZWN0ZWQ7CisJc3RydWN0IGRpYWxvZ19jb2xvciB0YWdf
a2V5OworCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnX2tleV9zZWxlY3RlZDsKKwlzdHJ1Y3QgZGlh
bG9nX2NvbG9yIGNoZWNrOworCXN0cnVjdCBkaWFsb2dfY29sb3IgY2hlY2tfc2VsZWN0ZWQ7CisJ
c3RydWN0IGRpYWxvZ19jb2xvciB1YXJyb3c7CisJc3RydWN0IGRpYWxvZ19jb2xvciBkYXJyb3c7
Cit9OworCisvKgorICogR2xvYmFsIHZhcmlhYmxlcworICovCitleHRlcm4gc3RydWN0IGRpYWxv
Z19pbmZvIGRsZzsKK2V4dGVybiBjaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbXTsKK2V4dGVybiBp
bnQgc2F2ZWRfeCwgc2F2ZWRfeTsJCS8qIE5lZWRlZCBpbiBzaWduYWwgaGFuZGxlciBpbiBtY29u
Zi5jICovCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KKworLyogaXRlbSBsaXN0
IGFzIHVzZWQgYnkgY2hlY2tsaXN0IGFuZCBtZW51Ym94ICovCit2b2lkIGl0ZW1fcmVzZXQodm9p
ZCk7Cit2b2lkIGl0ZW1fbWFrZShjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGl0ZW1fYWRk
X3N0cihjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGl0ZW1fc2V0X3RhZyhjaGFyIHRhZyk7
Cit2b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcCk7Cit2b2lkIGl0ZW1fc2V0X3NlbGVjdGVkKGlu
dCB2YWwpOworaW50IGl0ZW1fYWN0aXZhdGVfc2VsZWN0ZWQodm9pZCk7Cit2b2lkICppdGVtX2Rh
dGEodm9pZCk7CitjaGFyIGl0ZW1fdGFnKHZvaWQpOworCisvKiBpdGVtIGxpc3QgbWFuaXB1bGF0
aW9uIGZvciBseGRpYWxvZyB1c2UgKi8KKyNkZWZpbmUgTUFYSVRFTVNUUiAyMDAKK3N0cnVjdCBk
aWFsb2dfaXRlbSB7CisJY2hhciBzdHJbTUFYSVRFTVNUUl07CS8qIHByb21wdCBkaXNwbGF5ZWQg
Ki8KKwljaGFyIHRhZzsKKwl2b2lkICpkYXRhOwkvKiBwb2ludGVyIHRvIG1lbnUgaXRlbSAtIHVz
ZWQgYnkgbWVudWJveCtjaGVja2xpc3QgKi8KKwlpbnQgc2VsZWN0ZWQ7CS8qIFNldCB0byAxIGJ5
IGRpYWxvZ18qKCkgZnVuY3Rpb24gaWYgc2VsZWN0ZWQuICovCit9OworCisvKiBsaXN0IG9mIGxp
YWxvZ19pdGVtcyAqLworc3RydWN0IGRpYWxvZ19saXN0IHsKKwlzdHJ1Y3QgZGlhbG9nX2l0ZW0g
bm9kZTsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKm5leHQ7Cit9OworCitleHRlcm4gc3RydWN0IGRp
YWxvZ19saXN0ICppdGVtX2N1cjsKK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3QgaXRlbV9uaWw7
CitleHRlcm4gc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2hlYWQ7CisKK2ludCBpdGVtX2NvdW50
KHZvaWQpOwordm9pZCBpdGVtX3NldChpbnQgbik7CitpbnQgaXRlbV9uKHZvaWQpOworY29uc3Qg
Y2hhciAqaXRlbV9zdHIodm9pZCk7CitpbnQgaXRlbV9pc19zZWxlY3RlZCh2b2lkKTsKK2ludCBp
dGVtX2lzX3RhZyhjaGFyIHRhZyk7CisjZGVmaW5lIGl0ZW1fZm9yZWFjaCgpIFwKKwlmb3IgKGl0
ZW1fY3VyID0gaXRlbV9oZWFkID8gaXRlbV9oZWFkOiBpdGVtX2N1cjsgXAorCSAgICAgaXRlbV9j
dXIgJiYgKGl0ZW1fY3VyICE9ICZpdGVtX25pbCk7IGl0ZW1fY3VyID0gaXRlbV9jdXItPm5leHQp
CisKKy8qIGdlbmVyaWMga2V5IGhhbmRsZXJzICovCitpbnQgb25fa2V5X2VzYyhXSU5ET1cgKndp
bik7CitpbnQgb25fa2V5X3Jlc2l6ZSh2b2lkKTsKKworLyogbWluaW11bSAocmUpc2l6ZSB2YWx1
ZXMgKi8KKyNkZWZpbmUgQ0hFQ0tMSVNUX0hFSUdUSF9NSU4gNgkvKiBGb3IgZGlhbG9nX2NoZWNr
bGlzdCgpICovCisjZGVmaW5lIENIRUNLTElTVF9XSURUSF9NSU4gNgorI2RlZmluZSBJTlBVVEJP
WF9IRUlHVEhfTUlOIDIJLyogRm9yIGRpYWxvZ19pbnB1dGJveCgpICovCisjZGVmaW5lIElOUFVU
Qk9YX1dJRFRIX01JTiAyCisjZGVmaW5lIE1FTlVCT1hfSEVJR1RIX01JTiAxNQkvKiBGb3IgZGlh
bG9nX21lbnUoKSAqLworI2RlZmluZSBNRU5VQk9YX1dJRFRIX01JTiA2NQorI2RlZmluZSBURVhU
Qk9YX0hFSUdUSF9NSU4gOAkvKiBGb3IgZGlhbG9nX3RleHRib3goKSAqLworI2RlZmluZSBURVhU
Qk9YX1dJRFRIX01JTiA4CisjZGVmaW5lIFlFU05PX0hFSUdUSF9NSU4gNAkvKiBGb3IgZGlhbG9n
X3llc25vKCkgKi8KKyNkZWZpbmUgWUVTTk9fV0lEVEhfTUlOIDQKKyNkZWZpbmUgV0lORE9XX0hF
SUdUSF9NSU4gMTkJLyogRm9yIGluaXRfZGlhbG9nKCkgKi8KKyNkZWZpbmUgV0lORE9XX1dJRFRI
X01JTiA4MAorCitpbnQgaW5pdF9kaWFsb2coY29uc3QgY2hhciAqYmFja3RpdGxlKTsKK3ZvaWQg
c2V0X2RpYWxvZ19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKTsKK3ZvaWQgc2V0X2Rp
YWxvZ19zdWJ0aXRsZXMoc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlcyk7Cit2b2lkIGVu
ZF9kaWFsb2coaW50IHgsIGludCB5KTsKK3ZvaWQgYXR0cl9jbGVhcihXSU5ET1cgKiB3aW4sIGlu
dCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpOwordm9pZCBkaWFsb2dfY2xlYXIodm9p
ZCk7Cit2b2lkIHByaW50X2F1dG93cmFwKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqcHJvbXB0
LCBpbnQgd2lkdGgsIGludCB5LCBpbnQgeCk7Cit2b2lkIHByaW50X2J1dHRvbihXSU5ET1cgKiB3
aW4sIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3RlZCk7Cit2b2lk
IHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25zdCBjaGFyICp0aXRsZSwgaW50IHdpZHRo
KTsKK3ZvaWQgZHJhd19ib3goV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQs
IGludCB3aWR0aCwgY2h0eXBlIGJveCwKKwkgICAgICBjaHR5cGUgYm9yZGVyKTsKK3ZvaWQgZHJh
d19zaGFkb3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0
aCk7CisKK2ludCBmaXJzdF9hbHBoYShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4
ZW1wdCk7CitpbnQgZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpw
cm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCk7CitpbnQgZGlhbG9nX21zZ2JveChjb25zdCBj
aGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkgIGludCB3aWR0
aCwgaW50IHBhdXNlKTsKKworCit0eXBlZGVmIHZvaWQgKCp1cGRhdGVfdGV4dF9mbikoY2hhciAq
YnVmLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZvaWQKKwkJCSAgICAgICAqX2RhdGEpOwor
aW50IGRpYWxvZ190ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjaGFyICp0YnVmLCBpbnQgaW5p
dGlhbF9oZWlnaHQsCisJCSAgIGludCBpbml0aWFsX3dpZHRoLCBpbnQgKmtleXMsIGludCAqX3Zz
Y3JvbGwsIGludCAqX2hzY3JvbGwsCisJCSAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2
b2lkICpkYXRhKTsKK2ludCBkaWFsb2dfbWVudShjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hh
ciAqcHJvbXB0LAorCQljb25zdCB2b2lkICpzZWxlY3RlZCwgaW50ICpzX3Njcm9sbCk7CitpbnQg
ZGlhbG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBp
bnQgaGVpZ2h0LAorCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0KTsKK2ludCBkaWFs
b2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhl
aWdodCwKKwkJICAgIGludCB3aWR0aCwgY29uc3QgY2hhciAqaW5pdCk7CisKKy8qCisgKiBUaGlz
IGlzIHRoZSBiYXNlIGZvciBmaWN0aXRpb3VzIGtleXMsIHdoaWNoIGFjdGl2YXRlCisgKiB0aGUg
YnV0dG9ucy4KKyAqCisgKiBNb3VzZS1nZW5lcmF0ZWQga2V5cyBhcmUgdGhlIGZvbGxvd2luZzoK
KyAqICAgLS0gdGhlIGZpcnN0IDMyIGFyZSB1c2VkIGFzIG51bWJlcnMsIGluIGFkZGl0aW9uIHRv
ICcwJy0nOScKKyAqICAgLS0gdGhlIGxvd2VyY2FzZSBhcmUgdXNlZCB0byBzaWduYWwgbW91c2Ut
ZW50ZXIgZXZlbnRzIChNX0VWRU5UICsgJ28nKQorICogICAtLSB1cHBlcmNhc2UgY2hhcnMgYXJl
IHVzZWQgdG8gaW52b2tlIHRoZSBidXR0b24gKE1fRVZFTlQgKyAnTycpCisgKi8KKyNkZWZpbmUg
TV9FVkVOVCAoS0VZX01BWCsxKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRp
YWxvZy9pbnB1dGJveC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xZGNmYjI4OAotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvaW5wdXRib3guYwpAQCAtMCww
ICsxLDI4OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgorICog
IGlucHV0Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgaW5wdXQgYm94CisgKgorICogIE9SSUdJTkFM
IEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1Ig
TElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20p
CisgKi8KKworI2luY2x1ZGUgImRpYWxvZy5oIgorCitjaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRb
TUFYX0xFTiArIDFdOworCisvKgorICogIFByaW50IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zCisg
Ki8KK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0
LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOwor
CWludCB5ID0gaGVpZ2h0IC0gMjsKKworCXByaW50X2J1dHRvbihkaWFsb2csICIgIE9rICAiLCB5
LCB4LCBzZWxlY3RlZCA9PSAwKTsKKwlwcmludF9idXR0b24oZGlhbG9nLCAiIEhlbHAgIiwgeSwg
eCArIDE0LCBzZWxlY3RlZCA9PSAxKTsKKworCXdtb3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxNCAq
IHNlbGVjdGVkKTsKKwl3cmVmcmVzaChkaWFsb2cpOworfQorCisvKgorICogRGlzcGxheSBhIGRp
YWxvZyBib3ggZm9yIGlucHV0aW5nIGEgc3RyaW5nCisgKi8KK2ludCBkaWFsb2dfaW5wdXRib3go
Y29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdp
ZHRoLAorCQkgICAgY29uc3QgY2hhciAqaW5pdCkKK3sKKwlpbnQgaSwgeCwgeSwgYm94X3ksIGJv
eF94LCBib3hfd2lkdGg7CisJaW50IGlucHV0X3ggPSAwLCBrZXkgPSAwLCBidXR0b24gPSAtMTsK
KwlpbnQgc2hvd194LCBsZW4sIHBvczsKKwljaGFyICppbnN0ciA9IGRpYWxvZ19pbnB1dF9yZXN1
bHQ7CisJV0lORE9XICpkaWFsb2c7CisKKwlpZiAoIWluaXQpCisJCWluc3RyWzBdID0gJ1wwJzsK
KwllbHNlCisJCXN0cmNweShpbnN0ciwgaW5pdCk7CisKK2RvX3Jlc2l6ZToKKwlpZiAoZ2V0bWF4
eShzdGRzY3IpIDw9IChoZWlnaHQgLSBJTlBVVEJPWF9IRUlHVEhfTUlOKSkKKwkJcmV0dXJuIC1F
UlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1heHgoc3Rkc2NyKSA8PSAod2lkdGggLSBJTlBV
VEJPWF9XSURUSF9NSU4pKQorCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsKKworCS8qIGNl
bnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLworCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lk
dGgpIC8gMjsKKwl5ID0gKGdldG1heHkoc3Rkc2NyKSAtIGhlaWdodCkgLyAyOworCisJZHJhd19z
aGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbiho
ZWlnaHQsIHdpZHRoLCB5LCB4KTsKKwlrZXlwYWQoZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94
KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwKKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9y
ZGVyLmF0cik7CisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2go
ZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRo
IC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxv
ZywgZGxnLmRpYWxvZy5hdHIpOworCXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsKKworCXByaW50
X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsKKworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRp
YWxvZy5hdHIpOworCXByaW50X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEs
IDMpOworCisJLyogRHJhdyB0aGUgaW5wdXQgZmllbGQgYm94ICovCisJYm94X3dpZHRoID0gd2lk
dGggLSA2OworCWdldHl4KGRpYWxvZywgeSwgeCk7CisJYm94X3kgPSB5ICsgMjsKKwlib3hfeCA9
ICh3aWR0aCAtIGJveF93aWR0aCkgLyAyOworCWRyYXdfYm94KGRpYWxvZywgeSArIDEsIGJveF94
IC0gMSwgMywgYm94X3dpZHRoICsgMiwKKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0
cik7CisKKwlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisKKwkvKiBT
ZXQgdXAgdGhlIGluaXRpYWwgdmFsdWUgKi8KKwl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7
CisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuaW5wdXRib3guYXRyKTsKKworCWxlbiA9IHN0cmxlbihp
bnN0cik7CisJcG9zID0gbGVuOworCisJaWYgKGxlbiA+PSBib3hfd2lkdGgpIHsKKwkJc2hvd194
ID0gbGVuIC0gYm94X3dpZHRoICsgMTsKKwkJaW5wdXRfeCA9IGJveF93aWR0aCAtIDE7CisJCWZv
ciAoaSA9IDA7IGkgPCBib3hfd2lkdGggLSAxOyBpKyspCisJCQl3YWRkY2goZGlhbG9nLCBpbnN0
cltzaG93X3ggKyBpXSk7CisJfSBlbHNlIHsKKwkJc2hvd194ID0gMDsKKwkJaW5wdXRfeCA9IGxl
bjsKKwkJd2FkZHN0cihkaWFsb2csIGluc3RyKTsKKwl9CisKKwl3bW92ZShkaWFsb2csIGJveF95
LCBib3hfeCArIGlucHV0X3gpOworCisJd3JlZnJlc2goZGlhbG9nKTsKKworCXdoaWxlIChrZXkg
IT0gS0VZX0VTQykgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKworCQlpZiAoYnV0dG9uID09
IC0xKSB7CS8qIElucHV0IGJveCBzZWxlY3RlZCAqLworCQkJc3dpdGNoIChrZXkpIHsKKwkJCWNh
c2UgVEFCOgorCQkJY2FzZSBLRVlfVVA6CisJCQljYXNlIEtFWV9ET1dOOgorCQkJCWJyZWFrOwor
CQkJY2FzZSBLRVlfQkFDS1NQQUNFOgorCQkJY2FzZSA4OiAgIC8qIF5IICovCisJCQljYXNlIDEy
NzogLyogXj8gKi8KKwkJCQlpZiAocG9zKSB7CisJCQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlu
cHV0Ym94LmF0cik7CisJCQkJCWlmIChpbnB1dF94ID09IDApIHsKKwkJCQkJCXNob3dfeC0tOwor
CQkJCQl9IGVsc2UKKwkJCQkJCWlucHV0X3gtLTsKKworCQkJCQlpZiAocG9zIDwgbGVuKSB7CisJ
CQkJCQlmb3IgKGkgPSBwb3MgLSAxOyBpIDwgbGVuOyBpKyspIHsKKwkJCQkJCQlpbnN0cltpXSA9
IGluc3RyW2krMV07CisJCQkJCQl9CisJCQkJCX0KKworCQkJCQlwb3MtLTsKKwkJCQkJbGVuLS07
CisJCQkJCWluc3RyW2xlbl0gPSAnXDAnOworCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hf
eCk7CisJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykgeworCQkJCQkJaWYgKCFp
bnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJCXdhZGRjaChkaWFsb2csICcgJyk7CisJCQkJCQkJ
YnJlYWs7CisJCQkJCQl9CisJCQkJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7
CisJCQkJCX0KKwkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCArIGJveF94KTsKKwkJ
CQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQljYXNlIEtFWV9M
RUZUOgorCQkJCWlmIChwb3MgPiAwKSB7CisJCQkJCWlmIChpbnB1dF94ID4gMCkgeworCQkJCQkJ
d21vdmUoZGlhbG9nLCBib3hfeSwgLS1pbnB1dF94ICsgYm94X3gpOworCQkJCQl9IGVsc2UgaWYg
KGlucHV0X3ggPT0gMCkgeworCQkJCQkJc2hvd194LS07CisJCQkJCQl3bW92ZShkaWFsb2csIGJv
eF95LCBib3hfeCk7CisJCQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsKKwkJ
CQkJCQlpZiAoIWluc3RyW3Nob3dfeCArIGldKSB7CisJCQkJCQkJCXdhZGRjaChkaWFsb2csICcg
Jyk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJCQl3YWRkY2goZGlhbG9nLCBpbnN0
cltzaG93X3ggKyBpXSk7CisJCQkJCQl9CisJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hf
eCk7CisJCQkJCX0KKwkJCQkJcG9zLS07CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJY2FzZSBL
RVlfUklHSFQ6CisJCQkJaWYgKHBvcyA8IGxlbikgeworCQkJCQlpZiAoaW5wdXRfeCA8IGJveF93
aWR0aCAtIDEpIHsKKwkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksICsraW5wdXRfeCArIGJveF94
KTsKKwkJCQkJfSBlbHNlIGlmIChpbnB1dF94ID09IGJveF93aWR0aCAtIDEpIHsKKwkJCQkJCXNo
b3dfeCsrOworCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOworCQkJCQkJZm9yIChp
ID0gMDsgaSA8IGJveF93aWR0aDsgaSsrKSB7CisJCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBp
XSkgeworCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOworCQkJCQkJCQlicmVhazsKKwkJCQkJ
CQl9CisJCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOworCQkJCQkJfQor
CQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCArIGJveF94KTsKKwkJCQkJfQorCQkJ
CQlwb3MrKzsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQlkZWZhdWx0OgorCQkJCWlmIChrZXkg
PCAweDEwMCAmJiBpc3ByaW50KGtleSkpIHsKKwkJCQkJaWYgKGxlbiA8IE1BWF9MRU4pIHsKKwkJ
CQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7CisJCQkJCQlpZiAocG9zIDwg
bGVuKSB7CisJCQkJCQkJZm9yIChpID0gbGVuOyBpID4gcG9zOyBpLS0pCisJCQkJCQkJCWluc3Ry
W2ldID0gaW5zdHJbaS0xXTsKKwkJCQkJCQlpbnN0cltwb3NdID0ga2V5OworCQkJCQkJfSBlbHNl
IHsKKwkJCQkJCQlpbnN0cltsZW5dID0ga2V5OworCQkJCQkJfQorCQkJCQkJcG9zKys7CisJCQkJ
CQlsZW4rKzsKKwkJCQkJCWluc3RyW2xlbl0gPSAnXDAnOworCisJCQkJCQlpZiAoaW5wdXRfeCA9
PSBib3hfd2lkdGggLSAxKSB7CisJCQkJCQkJc2hvd194Kys7CisJCQkJCQl9IGVsc2UgeworCQkJ
CQkJCWlucHV0X3grKzsKKwkJCQkJCX0KKworCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94
X3gpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aDsgaSsrKSB7CisJCQkJCQkJaWYg
KCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOworCQkJ
CQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194
ICsgaV0pOworCQkJCQkJfQorCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCArIGJv
eF94KTsKKwkJCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJCX0gZWxzZQorCQkJCQkJZmxhc2go
KTsJLyogQWxhcm0gdXNlciBhYm91dCBvdmVyZmxvdyAqLworCQkJCQljb250aW51ZTsKKwkJCQl9
CisJCQl9CisJCX0KKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAnTyc6CisJCWNhc2UgJ28nOgor
CQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnSCc6CisJCWNhc2UgJ2gn
OgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4gMTsKKwkJY2FzZSBLRVlfVVA6CisJCWNh
c2UgS0VZX0xFRlQ6CisJCQlzd2l0Y2ggKGJ1dHRvbikgeworCQkJY2FzZSAtMToKKwkJCQlidXR0
b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXBy
aW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAxKTsKKwkJCQlicmVhazsKKwkJCWNh
c2UgMDoKKwkJCQlidXR0b24gPSAtMTsJLyogSW5kaWNhdGVzIGlucHV0IGJveCBpcyBzZWxlY3Rl
ZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQl3
bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOworCQkJCXdyZWZyZXNoKGRpYWxv
Zyk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJYnV0dG9uID0gMDsJLyogSW5kaWNhdGVz
ICJPSyIgYnV0dG9uIGlzIHNlbGVjdGVkICovCisJCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhl
aWdodCwgd2lkdGgsIDApOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVEFC
OgorCQljYXNlIEtFWV9ET1dOOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCXN3aXRjaCAoYnV0dG9u
KSB7CisJCQljYXNlIC0xOgorCQkJCWJ1dHRvbiA9IDA7CS8qIEluZGljYXRlcyAiT0siIGJ1dHRv
biBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRo
LCAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0
ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9n
LCBoZWlnaHQsIHdpZHRoLCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMToKKwkJCQlidXR0b24g
PSAtMTsJLyogSW5kaWNhdGVzIGlucHV0IGJveCBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1
dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQl3bW92ZShkaWFsb2csIGJveF95
LCBib3hfeCArIGlucHV0X3gpOworCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJYnJlYWs7CisJ
CQl9CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCWNhc2UgJ1xuJzoKKwkJCWRlbHdpbihkaWFs
b2cpOworCQkJcmV0dXJuIChidXR0b24gPT0gLTEgPyAwIDogYnV0dG9uKTsKKwkJY2FzZSAnWCc6
CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gS0VZX0VTQzsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9F
U0M6CisJCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlf
UkVTSVpFOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3Rv
IGRvX3Jlc2l6ZTsKKwkJfQorCX0KKworCWRlbHdpbihkaWFsb2cpOworCXJldHVybiBLRVlfRVND
OwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
bHhkaWFsb2cvbWVudWJveC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjU4YzJmOGFmCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMKQEAgLTAs
MCArMSw0MjQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAq
ICBtZW51Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgbWVudSBib3gKKyAqCisgKiAgT1JJR0lOQUwg
QVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBM
SU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXB3QGNmdy5jb20p
CisgKi8KKworLyoKKyAqICBDaGFuZ2VzIGJ5IENsaWZmb3JkIFdvbGYgKGdvZEBjbGlmZm9yZC5h
dCkKKyAqCisgKiAgWyAxOTk4LTA2LTEzIF0KKyAqCisgKiAgICAqKSAgQSBidWdmaXggZm9yIHRo
ZSBQYWdlLURvd24gcHJvYmxlbQorICoKKyAqICAgICopICBGb3JtZXJseSB3aGVuIEkgdXNlZCBQ
YWdlIERvd24gYW5kIFBhZ2UgVXAsIHRoZSBjdXJzb3Igd291bGQgYmUgc2V0CisgKiAgICAgICAg
dG8gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBtZW51IGJveC4gIE5vdyBseGRpYWxvZyBpcyBh
IGJpdAorICogICAgICAgIHNtYXJ0ZXIgYW5kIHdvcmtzIG1vcmUgbGlrZSBvdGhlciBtZW51IHN5
c3RlbXMgKGp1c3QgaGF2ZSBhIGxvb2sgYXQKKyAqICAgICAgICBpdCkuCisgKgorICogICAgKikg
IEZvcm1lcmx5IGlmIEkgc2VsZWN0ZWQgc29tZXRoaW5nIG15IHNjcm9sbGluZyB3b3VsZCBiZSBi
cm9rZW4gYmVjYXVzZQorICogICAgICAgIGx4ZGlhbG9nIGlzIHJlLWludm9rZWQgYnkgdGhlIE1l
bnVjb25maWcgc2hlbGwgc2NyaXB0LCBjYW4ndAorICogICAgICAgIHJlbWVtYmVyIHRoZSBsYXN0
IHNjcm9sbGluZyBwb3NpdGlvbiwgYW5kIGp1c3Qgc2V0cyBpdCBzbyB0aGF0IHRoZQorICogICAg
ICAgIGN1cnNvciBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBib3guICBOb3cgaXQgd3JpdGVzIHRo
ZSB0ZW1wb3JhcnkgZmlsZQorICogICAgICAgIGx4ZGlhbG9nLnNjcmx0bXAgd2hpY2ggY29udGFp
bnMgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZpbGUgaXMKKyAqICAgICAgICBkZWxldGVkIGJ5IGx4
ZGlhbG9nIGlmIHRoZSB1c2VyIGxlYXZlcyBhIHN1Ym1lbnUgb3IgZW50ZXJzIGEgbmV3CisgKiAg
ICAgICAgb25lLCBidXQgaXQgd291bGQgYmUgbmljZSBpZiBNZW51Y29uZmlnIGNvdWxkIG1ha2Ug
YW5vdGhlciAicm0gLWYiCisgKiAgICAgICAganVzdCB0byBiZSBzdXJlLiAgSnVzdCB0cnkgaXQg
b3V0IC0geW91IHdpbGwgcmVjb2duaXNlIGEgZGlmZmVyZW5jZSEKKyAqCisgKiAgWyAxOTk4LTA2
LTE0IF0KKyAqCisgKiAgICAqKSAgTm93IGx4ZGlhbG9nIGlzIGNyYXNoLXNhZmUgYWdhaW5zdCBi
cm9rZW4gImx4ZGlhbG9nLnNjcmx0bXAiIGZpbGVzCisgKiAgICAgICAgYW5kIG1lbnVzIGNoYW5n
ZSB0aGVpciBzaXplIG9uIHRoZSBmbHkuCisgKgorICogICAgKikgIElmIGZvciBzb21lIHJlYXNv
biB0aGUgbGFzdCBzY3JvbGxpbmcgcG9zaXRpb24gaXMgbm90IHNhdmVkIGJ5CisgKiAgICAgICAg
bHhkaWFsb2csIGl0IHNldHMgdGhlIHNjcm9sbGluZyBzbyB0aGF0IHRoZSBzZWxlY3RlZCBpdGVt
IGlzIGluIHRoZQorICogICAgICAgIG1pZGRsZSBvZiB0aGUgbWVudSBib3gsIG5vdCBhdCB0aGUg
Ym90dG9tLgorICoKKyAqIDAyIEphbnVhcnkgMTk5OSwgTWljaGFlbCBFbGl6YWJldGggQ2hhc3Rh
aW4gKG1lY0BzaG91dC5uZXQpCisgKiBSZXNldCAnc2Nyb2xsJyB0byAwIGlmIHRoZSB2YWx1ZSBm
cm9tIGx4ZGlhbG9nLnNjcmx0bXAgaXMgYm9ndXMuCisgKiBUaGlzIGZpeGVzIGEgYnVnIGluIE1l
bnVjb25maWcgd2hlcmUgdXNpbmcgJyAnIHRvIGRlc2NlbmQgaW50byBtZW51cworICogd291bGQg
bGVhdmUgbWlzLXN5bmNocm9uaXplZCBseGRpYWxvZy5zY3JsdG1wIGZpbGVzIGx5aW5nIGFyb3Vu
ZCwKKyAqIGZzY2FuZiB3b3VsZCByZWFkIGluICdzY3JvbGwnLCBhbmQgZXZlbnR1YWxseSB0aGF0
IHZhbHVlIHdvdWxkIGdldCB1c2VkLgorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworc3Rh
dGljIGludCBtZW51X3dpZHRoLCBpdGVtX3g7CisKKy8qCisgKiBQcmludCBtZW51IGl0ZW0KKyAq
Lworc3RhdGljIHZvaWQgZG9fcHJpbnRfaXRlbShXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKml0
ZW0sIGludCBsaW5lX3ksCisJCQkgIGludCBzZWxlY3RlZCwgaW50IGhvdGtleSkKK3sKKwlpbnQg
ajsKKwljaGFyICptZW51X2l0ZW0gPSBtYWxsb2MobWVudV93aWR0aCArIDEpOworCisJc3RybmNw
eShtZW51X2l0ZW0sIGl0ZW0sIG1lbnVfd2lkdGggLSBpdGVtX3gpOworCW1lbnVfaXRlbVttZW51
X3dpZHRoIC0gaXRlbV94XSA9ICdcMCc7CisJaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5
Tm5NbUhoIik7CisKKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovCisJd2F0dHJz
ZXQod2luLCBkbGcubWVudWJveC5hdHIpOworCXdtb3ZlKHdpbiwgbGluZV95LCAwKTsKKyNpZiBP
TERfTkNVUlNFUworCXsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBtZW51X3dpZHRoOyBp
KyspCisJCQl3YWRkY2god2luLCAnICcpOworCX0KKyNlbHNlCisJd2NscnRvZW9sKHdpbik7Cisj
ZW5kaWYKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDog
ZGxnLml0ZW0uYXRyKTsKKwltdndhZGRzdHIod2luLCBsaW5lX3ksIGl0ZW1feCwgbWVudV9pdGVt
KTsKKwlpZiAoaG90a2V5KSB7CisJCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX2tl
eV9zZWxlY3RlZC5hdHIKKwkJCSA6IGRsZy50YWdfa2V5LmF0cik7CisJCW12d2FkZGNoKHdpbiwg
bGluZV95LCBpdGVtX3ggKyBqLCBtZW51X2l0ZW1bal0pOworCX0KKwlpZiAoc2VsZWN0ZWQpIHsK
KwkJd21vdmUod2luLCBsaW5lX3ksIGl0ZW1feCArIDEpOworCX0KKwlmcmVlKG1lbnVfaXRlbSk7
CisJd3JlZnJlc2god2luKTsKK30KKworI2RlZmluZSBwcmludF9pdGVtKGluZGV4LCBjaG9pY2Us
IHNlbGVjdGVkKQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWl0ZW1fc2V0KGluZGV4KTsJCQkJCQlc
CisJZG9fcHJpbnRfaXRlbShtZW51LCBpdGVtX3N0cigpLCBjaG9pY2UsIHNlbGVjdGVkLCAhaXRl
bV9pc190YWcoJzonKSk7IFwKK30gd2hpbGUgKDApCisKKy8qCisgKiBQcmludCB0aGUgc2Nyb2xs
IGluZGljYXRvcnMuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2Fycm93cyhXSU5ET1cgKiB3aW4s
IGludCBpdGVtX25vLCBpbnQgc2Nyb2xsLCBpbnQgeSwgaW50IHgsCisJCQkgaW50IGhlaWdodCkK
K3sKKwlpbnQgY3VyX3ksIGN1cl94OworCisJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOworCisJ
d21vdmUod2luLCB5LCB4KTsKKworCWlmIChzY3JvbGwgPiAwKSB7CisJCXdhdHRyc2V0KHdpbiwg
ZGxnLnVhcnJvdy5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsKKwkJd2FkZHN0cih3
aW4sICIoLSkiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7
CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJ
CXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQor
CisJeSA9IHkgKyBoZWlnaHQgKyAxOworCXdtb3ZlKHdpbiwgeSwgeCk7CisJd3JlZnJlc2god2lu
KTsKKworCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGhlaWdodCA8IGl0ZW1f
bm8pKSB7CisJCXdhdHRyc2V0KHdpbiwgZGxnLmRhcnJvdy5hdHIpOworCQl3YWRkY2god2luLCBB
Q1NfREFSUk9XKTsKKwkJd2FkZHN0cih3aW4sICIoKykiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNl
dCh3aW4sIGRsZy5tZW51Ym94X2JvcmRlci5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUp
OworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwor
CQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCX0KKworCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94
KTsKKwl3cmVmcmVzaCh3aW4pOworfQorCisvKgorICogRGlzcGxheSB0aGUgdGVybWluYXRpb24g
YnV0dG9ucy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiB3aW4sIGlu
dCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQoreworCWludCB4ID0gd2lkdGggLyAy
IC0gMjg7CisJaW50IHkgPSBoZWlnaHQgLSAyOworCisJcHJpbnRfYnV0dG9uKHdpbiwgIlNlbGVj
dCIsIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbih3aW4sICIgRXhpdCAiLCB5
LCB4ICsgMTIsIHNlbGVjdGVkID09IDEpOworCXByaW50X2J1dHRvbih3aW4sICIgSGVscCAiLCB5
LCB4ICsgMjQsIHNlbGVjdGVkID09IDIpOworCXByaW50X2J1dHRvbih3aW4sICIgU2F2ZSAiLCB5
LCB4ICsgMzYsIHNlbGVjdGVkID09IDMpOworCXByaW50X2J1dHRvbih3aW4sICIgTG9hZCAiLCB5
LCB4ICsgNDgsIHNlbGVjdGVkID09IDQpOworCisJd21vdmUod2luLCB5LCB4ICsgMSArIDEyICog
c2VsZWN0ZWQpOworCXdyZWZyZXNoKHdpbik7Cit9CisKKy8qIHNjcm9sbCB1cCBuIGxpbmVzIChu
IG1heSBiZSBuZWdhdGl2ZSkgKi8KK3N0YXRpYyB2b2lkIGRvX3Njcm9sbChXSU5ET1cgKndpbiwg
aW50ICpzY3JvbGwsIGludCBuKQoreworCS8qIFNjcm9sbCBtZW51IHVwICovCisJc2Nyb2xsb2so
d2luLCBUUlVFKTsKKwl3c2NybCh3aW4sIG4pOworCXNjcm9sbG9rKHdpbiwgRkFMU0UpOworCSpz
Y3JvbGwgPSAqc2Nyb2xsICsgbjsKKwl3cmVmcmVzaCh3aW4pOworfQorCisvKgorICogRGlzcGxh
eSBhIG1lbnUgZm9yIGNob29zaW5nIGFtb25nIGEgbnVtYmVyIG9mIG9wdGlvbnMKKyAqLworaW50
IGRpYWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCisJCWNv
bnN0IHZvaWQgKnNlbGVjdGVkLCBpbnQgKnNfc2Nyb2xsKQoreworCWludCBpLCBqLCB4LCB5LCBi
b3hfeCwgYm94X3k7CisJaW50IGhlaWdodCwgd2lkdGgsIG1lbnVfaGVpZ2h0OworCWludCBrZXkg
PSAwLCBidXR0b24gPSAwLCBzY3JvbGwgPSAwLCBjaG9pY2UgPSAwOworCWludCBmaXJzdF9pdGVt
ID0gIDAsIG1heF9jaG9pY2U7CisJV0lORE9XICpkaWFsb2csICptZW51OworCitkb19yZXNpemU6
CisJaGVpZ2h0ID0gZ2V0bWF4eShzdGRzY3IpOworCXdpZHRoID0gZ2V0bWF4eChzdGRzY3IpOwor
CWlmIChoZWlnaHQgPCBNRU5VQk9YX0hFSUdUSF9NSU4gfHwgd2lkdGggPCBNRU5VQk9YX1dJRFRI
X01JTikKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisKKwloZWlnaHQgLT0gNDsKKwl3
aWR0aCAgLT0gNTsKKwltZW51X2hlaWdodCA9IGhlaWdodCAtIDEwOworCisJbWF4X2Nob2ljZSA9
IE1JTihtZW51X2hlaWdodCwgaXRlbV9jb3VudCgpKTsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94
IG9uIHNjcmVlbiAqLworCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKKwl5ID0g
KGdldG1heHkoc3Rkc2NyKSAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5
LCB4LCBoZWlnaHQsIHdpZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5
LCB4KTsKKwlrZXlwYWQoZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwg
aGVpZ2h0LCB3aWR0aCwKKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisJd2F0
dHJzZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQg
LSAzLCAwLCBBQ1NfTFRFRSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3
YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5h
dHIpOworCXdia2dkc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIgJiBBX0NPTE9SKTsKKwl3YWRk
Y2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0
aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwlwcmludF9hdXRvd3Jh
cChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsKKworCW1lbnVfd2lkdGggPSB3aWR0
aCAtIDY7CisJYm94X3kgPSBoZWlnaHQgLSBtZW51X2hlaWdodCAtIDU7CisJYm94X3ggPSAod2lk
dGggLSBtZW51X3dpZHRoKSAvIDIgLSAxOworCisJLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRo
ZSBtZW51ICovCisJbWVudSA9IHN1YndpbihkaWFsb2csIG1lbnVfaGVpZ2h0LCBtZW51X3dpZHRo
LAorCQkgICAgICB5ICsgYm94X3kgKyAxLCB4ICsgYm94X3ggKyAxKTsKKwlrZXlwYWQobWVudSwg
VFJVRSk7CisKKwkvKiBkcmF3IGEgYm94IGFyb3VuZCB0aGUgbWVudSBpdGVtcyAqLworCWRyYXdf
Ym94KGRpYWxvZywgYm94X3ksIGJveF94LCBtZW51X2hlaWdodCArIDIsIG1lbnVfd2lkdGggKyAy
LAorCQkgZGxnLm1lbnVib3hfYm9yZGVyLmF0ciwgZGxnLm1lbnVib3guYXRyKTsKKworCWlmICht
ZW51X3dpZHRoID49IDgwKQorCQlpdGVtX3ggPSAobWVudV93aWR0aCAtIDcwKSAvIDI7CisJZWxz
ZQorCQlpdGVtX3ggPSA0OworCisJLyogU2V0IGNob2ljZSB0byBkZWZhdWx0IGl0ZW0gKi8KKwlp
dGVtX2ZvcmVhY2goKQorCQlpZiAoc2VsZWN0ZWQgJiYgKHNlbGVjdGVkID09IGl0ZW1fZGF0YSgp
KSkKKwkJCWNob2ljZSA9IGl0ZW1fbigpOworCS8qIGdldCB0aGUgc2F2ZWQgc2Nyb2xsIGluZm8g
Ki8KKwlzY3JvbGwgPSAqc19zY3JvbGw7CisJaWYgKChzY3JvbGwgPD0gY2hvaWNlKSAmJiAoc2Ny
b2xsICsgbWF4X2Nob2ljZSA+IGNob2ljZSkgJiYKKwkgICAoc2Nyb2xsID49IDApICYmIChzY3Jv
bGwgKyBtYXhfY2hvaWNlIDw9IGl0ZW1fY291bnQoKSkpIHsKKwkJZmlyc3RfaXRlbSA9IHNjcm9s
bDsKKwkJY2hvaWNlID0gY2hvaWNlIC0gc2Nyb2xsOworCX0gZWxzZSB7CisJCXNjcm9sbCA9IDA7
CisJfQorCWlmICgoY2hvaWNlID49IG1heF9jaG9pY2UpKSB7CisJCWlmIChjaG9pY2UgPj0gaXRl
bV9jb3VudCgpIC0gbWF4X2Nob2ljZSAvIDIpCisJCQlzY3JvbGwgPSBmaXJzdF9pdGVtID0gaXRl
bV9jb3VudCgpIC0gbWF4X2Nob2ljZTsKKwkJZWxzZQorCQkJc2Nyb2xsID0gZmlyc3RfaXRlbSA9
IGNob2ljZSAtIG1heF9jaG9pY2UgLyAyOworCQljaG9pY2UgPSBjaG9pY2UgLSBzY3JvbGw7CisJ
fQorCisJLyogUHJpbnQgdGhlIG1lbnUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsg
aSsrKSB7CisJCXByaW50X2l0ZW0oZmlyc3RfaXRlbSArIGksIGksIGkgPT0gY2hvaWNlKTsKKwl9
CisKKwl3bm91dHJlZnJlc2gobWVudSk7CisKKwlwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX2Nv
dW50KCksIHNjcm9sbCwKKwkJICAgICBib3hfeSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51X2hl
aWdodCk7CisKKwlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJd21v
dmUobWVudSwgY2hvaWNlLCBpdGVtX3ggKyAxKTsKKwl3cmVmcmVzaChtZW51KTsKKworCXdoaWxl
IChrZXkgIT0gS0VZX0VTQykgeworCQlrZXkgPSB3Z2V0Y2gobWVudSk7CisKKwkJaWYgKGtleSA8
IDI1NiAmJiBpc2FscGhhKGtleSkpCisJCQlrZXkgPSB0b2xvd2VyKGtleSk7CisKKwkJaWYgKHN0
cmNocigieW5taCIsIGtleSkpCisJCQlpID0gbWF4X2Nob2ljZTsKKwkJZWxzZSB7CisJCQlmb3Ig
KGkgPSBjaG9pY2UgKyAxOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7CisJCQkJaXRlbV9zZXQoc2Ny
b2xsICsgaSk7CisJCQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1fc3RyKCksICJZeU5uTW1IaCIpOwor
CQkJCWlmIChrZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pdKSkKKwkJCQkJYnJlYWs7CisJCQl9
CisJCQlpZiAoaSA9PSBtYXhfY2hvaWNlKQorCQkJCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNl
OyBpKyspIHsKKwkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgaSk7CisJCQkJCWogPSBmaXJzdF9hbHBo
YShpdGVtX3N0cigpLCAiWXlObk1tSGgiKTsKKwkJCQkJaWYgKGtleSA9PSB0b2xvd2VyKGl0ZW1f
c3RyKClbal0pKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQl9CisKKwkJaWYgKGl0ZW1fY291bnQo
KSAhPSAwICYmCisJCSAgICAoaSA8IG1heF9jaG9pY2UgfHwKKwkJICAgICBrZXkgPT0gS0VZX1VQ
IHx8IGtleSA9PSBLRVlfRE9XTiB8fAorCQkgICAgIGtleSA9PSAnLScgfHwga2V5ID09ICcrJyB8
fAorCQkgICAgIGtleSA9PSBLRVlfUFBBR0UgfHwga2V5ID09IEtFWV9OUEFHRSkpIHsKKwkJCS8q
IFJlbW92ZSBoaWdobGlndCBvZiBjdXJyZW50IGl0ZW0gKi8KKwkJCXByaW50X2l0ZW0oc2Nyb2xs
ICsgY2hvaWNlLCBjaG9pY2UsIEZBTFNFKTsKKworCQkJaWYgKGtleSA9PSBLRVlfVVAgfHwga2V5
ID09ICctJykgeworCQkJCWlmIChjaG9pY2UgPCAyICYmIHNjcm9sbCkgeworCQkJCQkvKiBTY3Jv
bGwgbWVudSBkb3duICovCisJCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAtMSk7CisKKwkJ
CQkJcHJpbnRfaXRlbShzY3JvbGwsIDAsIEZBTFNFKTsKKwkJCQl9IGVsc2UKKwkJCQkJY2hvaWNl
ID0gTUFYKGNob2ljZSAtIDEsIDApOworCisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8
fCBrZXkgPT0gJysnKSB7CisJCQkJcHJpbnRfaXRlbShzY3JvbGwrY2hvaWNlLCBjaG9pY2UsIEZB
TFNFKTsKKworCQkJCWlmICgoY2hvaWNlID4gbWF4X2Nob2ljZSAtIDMpICYmCisJCQkJICAgIChz
Y3JvbGwgKyBtYXhfY2hvaWNlIDwgaXRlbV9jb3VudCgpKSkgeworCQkJCQkvKiBTY3JvbGwgbWVu
dSB1cCAqLworCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgMSk7CisKKwkJCQkJcHJpbnRf
aXRlbShzY3JvbGwrbWF4X2Nob2ljZSAtIDEsCisJCQkJCQkgICBtYXhfY2hvaWNlIC0gMSwgRkFM
U0UpOworCQkJCX0gZWxzZQorCQkJCQljaG9pY2UgPSBNSU4oY2hvaWNlICsgMSwgbWF4X2Nob2lj
ZSAtIDEpOworCisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfUFBBR0UpIHsKKwkJCQlzY3JvbGxv
ayhtZW51LCBUUlVFKTsKKwkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsK
KwkJCQkJaWYgKHNjcm9sbCA+IDApIHsKKwkJCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAt
MSk7CisJCQkJCQlwcmludF9pdGVtKHNjcm9sbCwgMCwgRkFMU0UpOworCQkJCQl9IGVsc2Ugewor
CQkJCQkJaWYgKGNob2ljZSA+IDApCisJCQkJCQkJY2hvaWNlLS07CisJCQkJCX0KKwkJCQl9CisK
KwkJCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9OUEFHRSkgeworCQkJCWZvciAoaSA9IDA7IChpIDwg
bWF4X2Nob2ljZSk7IGkrKykgeworCQkJCQlpZiAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8IGl0ZW1f
Y291bnQoKSkgeworCQkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIDEpOworCQkJCQkJcHJp
bnRfaXRlbShzY3JvbGwrbWF4X2Nob2ljZS0xLAorCQkJCQkJCSAgIG1heF9jaG9pY2UgLSAxLCBG
QUxTRSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoY2hvaWNlICsgMSA8IG1heF9jaG9pY2Up
CisJCQkJCQkJY2hvaWNlKys7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UKKwkJCQljaG9pY2Ug
PSBpOworCisJCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBUUlVFKTsKKwor
CQkJcHJpbnRfYXJyb3dzKGRpYWxvZywgaXRlbV9jb3VudCgpLCBzY3JvbGwsCisJCQkJICAgICBi
b3hfeSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51X2hlaWdodCk7CisKKwkJCXdub3V0cmVmcmVz
aChkaWFsb2cpOworCQkJd3JlZnJlc2gobWVudSk7CisKKwkJCWNvbnRpbnVlOwkvKiB3YWl0IGZv
ciBhbm90aGVyIGtleSBwcmVzcyAqLworCQl9CisKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSBL
RVlfTEVGVDoKKwkJY2FzZSBUQUI6CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJYnV0dG9uID0gKChr
ZXkgPT0gS0VZX0xFRlQgPyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApCisJCQkgICAgPyA0IDog
KGJ1dHRvbiA+IDQgPyAwIDogYnV0dG9uKTsKKworCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhl
aWdodCwgd2lkdGgsIGJ1dHRvbik7CisJCQl3cmVmcmVzaChtZW51KTsKKwkJCWJyZWFrOworCQlj
YXNlICcgJzoKKwkJY2FzZSAncyc6CisJCWNhc2UgJ3knOgorCQljYXNlICduJzoKKwkJY2FzZSAn
bSc6CisJCWNhc2UgJy8nOgorCQljYXNlICdoJzoKKwkJY2FzZSAnPyc6CisJCWNhc2UgJ3onOgor
CQljYXNlICdcbic6CisJCQkvKiBzYXZlIHNjcm9sbCBpbmZvICovCisJCQkqc19zY3JvbGwgPSBz
Y3JvbGw7CisJCQlkZWx3aW4obWVudSk7CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCWl0ZW1fc2V0
KHNjcm9sbCArIGNob2ljZSk7CisJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKKwkJCXN3aXRjaCAo
a2V5KSB7CisJCQljYXNlICdoJzoKKwkJCWNhc2UgJz8nOgorCQkJCXJldHVybiAyOworCQkJY2Fz
ZSAncyc6CisJCQljYXNlICd5JzoKKwkJCQlyZXR1cm4gNTsKKwkJCWNhc2UgJ24nOgorCQkJCXJl
dHVybiA2OworCQkJY2FzZSAnbSc6CisJCQkJcmV0dXJuIDc7CisJCQljYXNlICcgJzoKKwkJCQly
ZXR1cm4gODsKKwkJCWNhc2UgJy8nOgorCQkJCXJldHVybiA5OworCQkJY2FzZSAneic6CisJCQkJ
cmV0dXJuIDEwOworCQkJY2FzZSAnXG4nOgorCQkJCXJldHVybiBidXR0b247CisJCQl9CisJCQly
ZXR1cm4gMDsKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gS0VZX0VTQzsKKwkJ
CWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlrZXkgPSBvbl9rZXlfZXNjKG1lbnUpOworCQkJ
YnJlYWs7CisJCWNhc2UgS0VZX1JFU0laRToKKwkJCW9uX2tleV9yZXNpemUoKTsKKwkJCWRlbHdp
bihtZW51KTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJZ290byBkb19yZXNpemU7CisJCX0KKwl9
CisJZGVsd2luKG1lbnUpOworCWRlbHdpbihkaWFsb2cpOworCXJldHVybiBrZXk7CQkvKiBFU0Mg
cHJlc3NlZCAqLworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy90
ZXh0Ym94LmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3guYwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGUzMzliMTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3guYwpAQCAtMCwwICsxLDM5NSBA
QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgorICogIHRleHRib3gu
YyAtLSBpbXBsZW1lbnRzIHRoZSB0ZXh0IGJveAorICoKKyAqICBPUklHSU5BTCBBVVRIT1I6IFNh
dmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCisgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5F
TCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQorICovCisKKyNp
bmNsdWRlICJkaWFsb2cuaCIKKworc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbik7CitzdGF0
aWMgdm9pZCBwcmludF9wYWdlKFdJTkRPVyAqd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIHVw
ZGF0ZV90ZXh0X2ZuCisJCSAgICAgICB1cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSk7CitzdGF0aWMg
dm9pZCBwcmludF9saW5lKFdJTkRPVyAqd2luLCBpbnQgcm93LCBpbnQgd2lkdGgpOworc3RhdGlj
IGNoYXIgKmdldF9saW5lKHZvaWQpOworc3RhdGljIHZvaWQgcHJpbnRfcG9zaXRpb24oV0lORE9X
ICogd2luKTsKKworc3RhdGljIGludCBoc2Nyb2xsOworc3RhdGljIGludCBiZWdpbl9yZWFjaGVk
LCBlbmRfcmVhY2hlZCwgcGFnZV9sZW5ndGg7CitzdGF0aWMgY2hhciAqYnVmOworc3RhdGljIGNo
YXIgKnBhZ2U7CisKKy8qCisgKiByZWZyZXNoIHdpbmRvdyBjb250ZW50CisgKi8KK3N0YXRpYyB2
b2lkIHJlZnJlc2hfdGV4dF9ib3goV0lORE9XICpkaWFsb2csIFdJTkRPVyAqYm94LCBpbnQgYm94
aCwgaW50IGJveHcsCisJCQkgICAgIGludCBjdXJfeSwgaW50IGN1cl94LCB1cGRhdGVfdGV4dF9m
biB1cGRhdGVfdGV4dCwKKwkJCSAgICAgdm9pZCAqZGF0YSkKK3sKKwlwcmludF9wYWdlKGJveCwg
Ym94aCwgYm94dywgdXBkYXRlX3RleHQsIGRhdGEpOworCXByaW50X3Bvc2l0aW9uKGRpYWxvZyk7
CisJd21vdmUoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlv
biAqLworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKworLyoKKyAqIERpc3BsYXkgdGV4dCBmcm9t
IGEgZmlsZSBpbiBhIGRpYWxvZyBib3guCisgKgorICoga2V5cyBpcyBhIG51bGwtdGVybWluYXRl
ZCBhcnJheQorICogdXBkYXRlX3RleHQoKSBtYXkgbm90IGFkZCBvciByZW1vdmUgYW55ICdcbicg
b3IgJ1wwJyBpbiB0YnVmCisgKi8KK2ludCBkaWFsb2dfdGV4dGJveChjb25zdCBjaGFyICp0aXRs
ZSwgY2hhciAqdGJ1ZiwgaW50IGluaXRpYWxfaGVpZ2h0LAorCQkgICBpbnQgaW5pdGlhbF93aWR0
aCwgaW50ICprZXlzLCBpbnQgKl92c2Nyb2xsLCBpbnQgKl9oc2Nyb2xsLAorCQkgICB1cGRhdGVf
dGV4dF9mbiB1cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgeCwgeSwgY3VyX3gs
IGN1cl95LCBrZXkgPSAwOworCWludCBoZWlnaHQsIHdpZHRoLCBib3hoLCBib3h3OworCVdJTkRP
VyAqZGlhbG9nLCAqYm94OworCWJvb2wgZG9uZSA9IGZhbHNlOworCisJYmVnaW5fcmVhY2hlZCA9
IDE7CisJZW5kX3JlYWNoZWQgPSAwOworCXBhZ2VfbGVuZ3RoID0gMDsKKwloc2Nyb2xsID0gMDsK
KwlidWYgPSB0YnVmOworCXBhZ2UgPSBidWY7CS8qIHBhZ2UgaXMgcG9pbnRlciB0byBzdGFydCBv
ZiBwYWdlIHRvIGJlIGRpc3BsYXllZCAqLworCisJaWYgKF92c2Nyb2xsICYmICpfdnNjcm9sbCkg
eworCQliZWdpbl9yZWFjaGVkID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgKl92c2Nyb2xsOyBp
KyspCisJCQlnZXRfbGluZSgpOworCX0KKwlpZiAoX2hzY3JvbGwpCisJCWhzY3JvbGwgPSAqX2hz
Y3JvbGw7CisKK2RvX3Jlc2l6ZToKKwlnZXRtYXh5eChzdGRzY3IsIGhlaWdodCwgd2lkdGgpOwor
CWlmIChoZWlnaHQgPCBURVhUQk9YX0hFSUdUSF9NSU4gfHwgd2lkdGggPCBURVhUQk9YX1dJRFRI
X01JTikKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGluaXRpYWxfaGVpZ2h0
ICE9IDApCisJCWhlaWdodCA9IGluaXRpYWxfaGVpZ2h0OworCWVsc2UKKwkJaWYgKGhlaWdodCA+
IDQpCisJCQloZWlnaHQgLT0gNDsKKwkJZWxzZQorCQkJaGVpZ2h0ID0gMDsKKwlpZiAoaW5pdGlh
bF93aWR0aCAhPSAwKQorCQl3aWR0aCA9IGluaXRpYWxfd2lkdGg7CisJZWxzZQorCQlpZiAod2lk
dGggPiA1KQorCQkJd2lkdGggLT0gNTsKKwkJZWxzZQorCQkJd2lkdGggPSAwOworCisJLyogY2Vu
dGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0
aCkgLyAyOworCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7CisKKwlkcmF3X3No
YWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOworCisJZGlhbG9nID0gbmV3d2luKGhl
aWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFsb2csIFRSVUUpOworCisJLyogQ3JlYXRl
IHdpbmRvdyBmb3IgYm94IHJlZ2lvbiwgdXNlZCBmb3Igc2Nyb2xsaW5nIHRleHQgKi8KKwlib3ho
ID0gaGVpZ2h0IC0gNDsKKwlib3h3ID0gd2lkdGggLSAyOworCWJveCA9IHN1YndpbihkaWFsb2cs
IGJveGgsIGJveHcsIHkgKyAxLCB4ICsgMSk7CisJd2F0dHJzZXQoYm94LCBkbGcuZGlhbG9nLmF0
cik7CisJd2JrZ2RzZXQoYm94LCBkbGcuZGlhbG9nLmF0ciAmIEFfQ09MT1IpOworCisJa2V5cGFk
KGJveCwgVFJVRSk7CisKKwkvKiByZWdpc3RlciB0aGUgbmV3IHdpbmRvdywgYWxvbmcgd2l0aCBp
dHMgYm9yZGVycyAqLworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwKKwkJ
IGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisKKwl3YXR0cnNldChkaWFsb2csIGRs
Zy5ib3JkZXIuYXRyKTsKKwltdndhZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVF
KTsKKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBpKyspCisJCXdhZGRjaChkaWFsb2csIEFD
U19ITElORSk7CisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7CisJd2JrZ2RzZXQo
ZGlhbG9nLCBkbGcuZGlhbG9nLmF0ciAmIEFfQ09MT1IpOworCXdhZGRjaChkaWFsb2csIEFDU19S
VEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsKKworCXByaW50X2J1
dHRvbihkaWFsb2csICIgRXhpdCAiLCBoZWlnaHQgLSAyLCB3aWR0aCAvIDIgLSA0LCBUUlVFKTsK
Kwl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwlnZXR5eChkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8q
IFNhdmUgY3Vyc29yIHBvc2l0aW9uICovCisKKwkvKiBQcmludCBmaXJzdCBwYWdlIG9mIHRleHQg
Ki8KKwlhdHRyX2NsZWFyKGJveCwgYm94aCwgYm94dywgZGxnLmRpYWxvZy5hdHIpOworCXJlZnJl
c2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LCBjdXJfeCwgdXBkYXRl
X3RleHQsCisJCQkgZGF0YSk7CisKKwl3aGlsZSAoIWRvbmUpIHsKKwkJa2V5ID0gd2dldGNoKGRp
YWxvZyk7CisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgJ0UnOgkvKiBFeGl0ICovCisJCWNhc2Ug
J2UnOgorCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJCWNhc2UgJ3EnOgorCQljYXNlICdcbic6
CisJCQlkb25lID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlICdnJzoJLyogRmlyc3QgcGFnZSAq
LworCQljYXNlIEtFWV9IT01FOgorCQkJaWYgKCFiZWdpbl9yZWFjaGVkKSB7CisJCQkJYmVnaW5f
cmVhY2hlZCA9IDE7CisJCQkJcGFnZSA9IGJ1ZjsKKwkJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxv
ZywgYm94LCBib3hoLCBib3h3LAorCQkJCQkJIGN1cl95LCBjdXJfeCwgdXBkYXRlX3RleHQsCisJ
CQkJCQkgZGF0YSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnRyc6CS8qIExhc3QgcGFnZSAq
LworCQljYXNlIEtFWV9FTkQ6CisKKwkJCWVuZF9yZWFjaGVkID0gMTsKKwkJCS8qIHBvaW50IHRv
IGxhc3QgY2hhciBpbiBidWYgKi8KKwkJCXBhZ2UgPSBidWYgKyBzdHJsZW4oYnVmKTsKKwkJCWJh
Y2tfbGluZXMoYm94aCk7CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBi
b3h3LCBjdXJfeSwKKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJCQlicmVhazsK
KwkJY2FzZSAnSyc6CS8qIFByZXZpb3VzIGxpbmUgKi8KKwkJY2FzZSAnayc6CisJCWNhc2UgS0VZ
X1VQOgorCQkJaWYgKGJlZ2luX3JlYWNoZWQpCisJCQkJYnJlYWs7CisKKwkJCWJhY2tfbGluZXMo
cGFnZV9sZW5ndGggKyAxKTsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgs
IGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsKKwkJCWJyZWFr
OworCQljYXNlICdCJzoJLyogUHJldmlvdXMgcGFnZSAqLworCQljYXNlICdiJzoKKwkJY2FzZSAn
dSc6CisJCWNhc2UgS0VZX1BQQUdFOgorCQkJaWYgKGJlZ2luX3JlYWNoZWQpCisJCQkJYnJlYWs7
CisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoICsgYm94aCk7CisJCQlyZWZyZXNoX3RleHRfYm94
KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwKKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4
dCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSAnSic6CS8qIE5leHQgbGluZSAqLworCQljYXNl
ICdqJzoKKwkJY2FzZSBLRVlfRE9XTjoKKwkJCWlmIChlbmRfcmVhY2hlZCkKKwkJCQlicmVhazsK
KworCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCAtIDEpOworCQkJcmVmcmVzaF90ZXh0X2JveChk
aWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksCisJCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQs
IGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX05QQUdFOgkvKiBOZXh0IHBhZ2UgKi8KKwkJ
Y2FzZSAnICc6CisJCWNhc2UgJ2QnOgorCQkJaWYgKGVuZF9yZWFjaGVkKQorCQkJCWJyZWFrOwor
CisJCQliZWdpbl9yZWFjaGVkID0gMDsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gs
IGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsKKwkJ
CWJyZWFrOworCQljYXNlICcwJzoJLyogQmVnaW5uaW5nIG9mIGxpbmUgKi8KKwkJY2FzZSAnSCc6
CS8qIFNjcm9sbCBsZWZ0ICovCisJCWNhc2UgJ2gnOgorCQljYXNlIEtFWV9MRUZUOgorCQkJaWYg
KGhzY3JvbGwgPD0gMCkKKwkJCQlicmVhazsKKworCQkJaWYgKGtleSA9PSAnMCcpCisJCQkJaHNj
cm9sbCA9IDA7CisJCQllbHNlCisJCQkJaHNjcm9sbC0tOworCQkJLyogUmVwcmludCBjdXJyZW50
IHBhZ2UgdG8gc2Nyb2xsIGhvcml6b250YWxseSAqLworCQkJYmFja19saW5lcyhwYWdlX2xlbmd0
aCk7CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwK
KwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSAnTCc6
CS8qIFNjcm9sbCByaWdodCAqLworCQljYXNlICdsJzoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlp
ZiAoaHNjcm9sbCA+PSBNQVhfTEVOKQorCQkJCWJyZWFrOworCQkJaHNjcm9sbCsrOworCQkJLyog
UmVwcmludCBjdXJyZW50IHBhZ2UgdG8gc2Nyb2xsIGhvcml6b250YWxseSAqLworCQkJYmFja19s
aW5lcyhwYWdlX2xlbmd0aCk7CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3ho
LCBib3h3LCBjdXJfeSwKKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJCQlicmVh
azsKKwkJY2FzZSBLRVlfRVNDOgorCQkJaWYgKG9uX2tleV9lc2MoZGlhbG9nKSA9PSBLRVlfRVND
KQorCQkJCWRvbmUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1JFU0laRToKKwkJCWJh
Y2tfbGluZXMoaGVpZ2h0KTsKKwkJCWRlbHdpbihib3gpOworCQkJZGVsd2luKGRpYWxvZyk7CisJ
CQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3RvIGRvX3Jlc2l6ZTsKKwkJZGVmYXVsdDoKKwkJCWZv
ciAoaSA9IDA7IGtleXNbaV07IGkrKykgeworCQkJCWlmIChrZXkgPT0ga2V5c1tpXSkgeworCQkJ
CQlkb25lID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCWRlbHdp
bihib3gpOworCWRlbHdpbihkaWFsb2cpOworCWlmIChfdnNjcm9sbCkgeworCQljb25zdCBjaGFy
ICpzOworCisJCXMgPSBidWY7CisJCSpfdnNjcm9sbCA9IDA7CisJCWJhY2tfbGluZXMocGFnZV9s
ZW5ndGgpOworCQl3aGlsZSAocyA8IHBhZ2UgJiYgKHMgPSBzdHJjaHIocywgJ1xuJykpKSB7CisJ
CQkoKl92c2Nyb2xsKSsrOworCQkJcysrOworCQl9CisJfQorCWlmIChfaHNjcm9sbCkKKwkJKl9o
c2Nyb2xsID0gaHNjcm9sbDsKKwlyZXR1cm4ga2V5OworfQorCisvKgorICogR28gYmFjayAnbicg
bGluZXMgaW4gdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkuCisgKiAncGFnZScgd2ls
bCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBkZXNpcmVkIGxpbmUgaW4gJ2J1ZicuCisgKi8K
K3N0YXRpYyB2b2lkIGJhY2tfbGluZXMoaW50IG4pCit7CisJaW50IGk7CisKKwliZWdpbl9yZWFj
aGVkID0gMDsKKwkvKiBHbyBiYWNrICduJyBsaW5lcyAqLworCWZvciAoaSA9IDA7IGkgPCBuOyBp
KyspIHsKKwkJaWYgKCpwYWdlID09ICdcMCcpIHsKKwkJCWlmIChlbmRfcmVhY2hlZCkgeworCQkJ
CWVuZF9yZWFjaGVkID0gMDsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAocGFnZSA9
PSBidWYpIHsKKwkJCWJlZ2luX3JlYWNoZWQgPSAxOworCQkJcmV0dXJuOworCQl9CisJCXBhZ2Ut
LTsKKwkJZG8geworCQkJaWYgKHBhZ2UgPT0gYnVmKSB7CisJCQkJYmVnaW5fcmVhY2hlZCA9IDE7
CisJCQkJcmV0dXJuOworCQkJfQorCQkJcGFnZS0tOworCQl9IHdoaWxlICgqcGFnZSAhPSAnXG4n
KTsKKwkJcGFnZSsrOworCX0KK30KKworLyoKKyAqIFByaW50IGEgbmV3IHBhZ2Ugb2YgdGV4dC4K
KyAqLworc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5ET1cgKndpbiwgaW50IGhlaWdodCwgaW50
IHdpZHRoLCB1cGRhdGVfdGV4dF9mbgorCQkgICAgICAgdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEp
Cit7CisJaW50IGksIHBhc3NlZF9lbmQgPSAwOworCisJaWYgKHVwZGF0ZV90ZXh0KSB7CisJCWNo
YXIgKmVuZDsKKworCQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspCisJCQlnZXRfbGluZSgp
OworCQllbmQgPSBwYWdlOworCQliYWNrX2xpbmVzKGhlaWdodCk7CisJCXVwZGF0ZV90ZXh0KGJ1
ZiwgcGFnZSAtIGJ1ZiwgZW5kIC0gYnVmLCBkYXRhKTsKKwl9CisKKwlwYWdlX2xlbmd0aCA9IDA7
CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXByaW50X2xpbmUod2luLCBpLCB3
aWR0aCk7CisJCWlmICghcGFzc2VkX2VuZCkKKwkJCXBhZ2VfbGVuZ3RoKys7CisJCWlmIChlbmRf
cmVhY2hlZCAmJiAhcGFzc2VkX2VuZCkKKwkJCXBhc3NlZF9lbmQgPSAxOworCX0KKwl3bm91dHJl
ZnJlc2god2luKTsKK30KKworLyoKKyAqIFByaW50IGEgbmV3IGxpbmUgb2YgdGV4dC4KKyAqLwor
c3RhdGljIHZvaWQgcHJpbnRfbGluZShXSU5ET1cgKiB3aW4sIGludCByb3csIGludCB3aWR0aCkK
K3sKKwljaGFyICpsaW5lOworCisJbGluZSA9IGdldF9saW5lKCk7CisJbGluZSArPSBNSU4oc3Ry
bGVuKGxpbmUpLCBoc2Nyb2xsKTsJLyogU2Nyb2xsIGhvcml6b250YWxseSAqLworCXdtb3ZlKHdp
biwgcm93LCAwKTsJLyogbW92ZSBjdXJzb3IgdG8gY29ycmVjdCBsaW5lICovCisJd2FkZGNoKHdp
biwgJyAnKTsKKwl3YWRkbnN0cih3aW4sIGxpbmUsIE1JTihzdHJsZW4obGluZSksIHdpZHRoIC0g
MikpOworCisJLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIHByZXZpb3VzIGxpbmUgKi8KKyNpZiBPTERf
TkNVUlNFUworCXsKKwkJaW50IHggPSBnZXRjdXJ4KHdpbik7CisJCWludCBpOworCQlmb3IgKGkg
PSAwOyBpIDwgd2lkdGggLSB4OyBpKyspCisJCQl3YWRkY2god2luLCAnICcpOworCX0KKyNlbHNl
CisJd2NscnRvZW9sKHdpbik7CisjZW5kaWYKK30KKworLyoKKyAqIFJldHVybiBjdXJyZW50IGxp
bmUgb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkgYW5kIHByaW50X2xpbmUoKS4K
KyAqICdwYWdlJyBzaG91bGQgcG9pbnQgdG8gc3RhcnQgb2YgY3VycmVudCBsaW5lIGJlZm9yZSBj
YWxsaW5nLCBhbmQgd2lsbCBiZQorICogdXBkYXRlZCB0byBwb2ludCB0byBzdGFydCBvZiBuZXh0
IGxpbmUuCisgKi8KK3N0YXRpYyBjaGFyICpnZXRfbGluZSh2b2lkKQoreworCWludCBpID0gMDsK
KwlzdGF0aWMgY2hhciBsaW5lW01BWF9MRU4gKyAxXTsKKworCWVuZF9yZWFjaGVkID0gMDsKKwl3
aGlsZSAoKnBhZ2UgIT0gJ1xuJykgeworCQlpZiAoKnBhZ2UgPT0gJ1wwJykgeworCQkJZW5kX3Jl
YWNoZWQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoaSA8IE1BWF9MRU4pCisJCQlsaW5l
W2krK10gPSAqKHBhZ2UrKyk7CisJCWVsc2UgeworCQkJLyogVHJ1bmNhdGUgbGluZXMgbG9uZ2Vy
IHRoYW4gTUFYX0xFTiBjaGFyYWN0ZXJzICovCisJCQlpZiAoaSA9PSBNQVhfTEVOKQorCQkJCWxp
bmVbaSsrXSA9ICdcMCc7CisJCQlwYWdlKys7CisJCX0KKwl9CisJaWYgKGkgPD0gTUFYX0xFTikK
KwkJbGluZVtpXSA9ICdcMCc7CisJaWYgKCFlbmRfcmVhY2hlZCkKKwkJcGFnZSsrOwkJLyogbW92
ZSBwYXN0ICdcbicgKi8KKworCXJldHVybiBsaW5lOworfQorCisvKgorICogUHJpbnQgY3VycmVu
dCBwb3NpdGlvbgorICovCitzdGF0aWMgdm9pZCBwcmludF9wb3NpdGlvbihXSU5ET1cgKiB3aW4p
Cit7CisJaW50IHBlcmNlbnQ7CisKKwl3YXR0cnNldCh3aW4sIGRsZy5wb3NpdGlvbl9pbmRpY2F0
b3IuYXRyKTsKKwl3YmtnZHNldCh3aW4sIGRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyICYgQV9D
T0xPUik7CisJcGVyY2VudCA9IChwYWdlIC0gYnVmKSAqIDEwMCAvIHN0cmxlbihidWYpOworCXdt
b3ZlKHdpbiwgZ2V0bWF4eSh3aW4pIC0gMywgZ2V0bWF4eCh3aW4pIC0gOSk7CisJd3ByaW50dyh3
aW4sICIoJTNkJSUpIiwgcGVyY2VudCk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L2x4ZGlhbG9nL3V0aWwuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xYjQ5MGQ0YQotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jCkBAIC0wLDAgKzEs
NzAwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgdXRp
bC5jCisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5o
aykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2Fk
Y2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjaW5j
bHVkZSAiZGlhbG9nLmgiCisKKy8qIE5lZWRlZCBpbiBzaWduYWwgaGFuZGxlciBpbiBtY29uZi5j
ICovCitpbnQgc2F2ZWRfeCwgc2F2ZWRfeTsKKworc3RydWN0IGRpYWxvZ19pbmZvIGRsZzsKKwor
c3RhdGljIHZvaWQgc2V0X21vbm9fdGhlbWUodm9pZCkKK3sKKwlkbGcuc2NyZWVuLmF0ciA9IEFf
Tk9STUFMOworCWRsZy5zaGFkb3cuYXRyID0gQV9OT1JNQUw7CisJZGxnLmRpYWxvZy5hdHIgPSBB
X05PUk1BTDsKKwlkbGcudGl0bGUuYXRyID0gQV9CT0xEOworCWRsZy5ib3JkZXIuYXRyID0gQV9O
T1JNQUw7CisJZGxnLmJ1dHRvbl9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOworCWRsZy5idXR0b25f
aW5hY3RpdmUuYXRyID0gQV9ESU07CisJZGxnLmJ1dHRvbl9rZXlfYWN0aXZlLmF0ciA9IEFfUkVW
RVJTRTsKKwlkbGcuYnV0dG9uX2tleV9pbmFjdGl2ZS5hdHIgPSBBX0JPTEQ7CisJZGxnLmJ1dHRv
bl9sYWJlbF9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOworCWRsZy5idXR0b25fbGFiZWxfaW5hY3Rp
dmUuYXRyID0gQV9OT1JNQUw7CisJZGxnLmlucHV0Ym94LmF0ciA9IEFfTk9STUFMOworCWRsZy5p
bnB1dGJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxnLnNlYXJjaGJveC5hdHIgPSBBX05P
Uk1BTDsKKwlkbGcuc2VhcmNoYm94X3RpdGxlLmF0ciA9IEFfQk9MRDsKKwlkbGcuc2VhcmNoYm94
X2JvcmRlci5hdHIgPSBBX05PUk1BTDsKKwlkbGcucG9zaXRpb25faW5kaWNhdG9yLmF0ciA9IEFf
Qk9MRDsKKwlkbGcubWVudWJveC5hdHIgPSBBX05PUk1BTDsKKwlkbGcubWVudWJveF9ib3JkZXIu
YXRyID0gQV9OT1JNQUw7CisJZGxnLml0ZW0uYXRyID0gQV9OT1JNQUw7CisJZGxnLml0ZW1fc2Vs
ZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy50YWcuYXRyID0gQV9CT0xEOworCWRsZy50YWdf
c2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy50YWdfa2V5LmF0ciA9IEFfQk9MRDsKKwlk
bGcudGFnX2tleV9zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7CisJZGxnLmNoZWNrLmF0ciA9IEFf
Qk9MRDsKKwlkbGcuY2hlY2tfc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy51YXJyb3cu
YXRyID0gQV9CT0xEOworCWRsZy5kYXJyb3cuYXRyID0gQV9CT0xEOworfQorCisjZGVmaW5lIERM
R19DT0xPUihkaWFsb2csIGYsIGIsIGgpIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorCWRsZy5kaWFsb2cuZmcgPSAoZik7ICAgICAgIFwKKwlkbGcuZGlhbG9nLmJnID0g
KGIpOyAgICAgICBcCisJZGxnLmRpYWxvZy5obCA9IChoKTsgICAgICAgXAorfSB3aGlsZSAoMCkK
Kworc3RhdGljIHZvaWQgc2V0X2NsYXNzaWNfdGhlbWUodm9pZCkKK3sKKwlETEdfQ09MT1Ioc2Ny
ZWVuLCAgICAgICAgICAgICAgICBDT0xPUl9DWUFOLCAgIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJ
RExHX0NPTE9SKHNoYWRvdywgICAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9CTEFD
SywgIHRydWUpOworCURMR19DT0xPUihkaWFsb2csICAgICAgICAgICAgICAgIENPTE9SX0JMQUNL
LCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKHRpdGxlLCAgICAgICAgICAgICAg
ICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihib3JkZXIs
ICAgICAgICAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdf
Q09MT1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAg
dHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwgICAgICAgQ09MT1JfQkxBQ0ssICBD
T0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2tleV9hY3RpdmUsICAgICBD
T0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9rZXlf
aW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09M
T1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMVUUsICAgdHJ1
ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZSwgQ09MT1JfQkxBQ0ssICBDT0xP
Ul9XSElURSwgIHRydWUpOworCURMR19DT0xPUihpbnB1dGJveCwgICAgICAgICAgICAgIENPTE9S
X0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKGlucHV0Ym94X2JvcmRl
ciwgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1Io
c2VhcmNoYm94LCAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2Up
OworCURMR19DT0xPUihzZWFyY2hib3hfdGl0bGUsICAgICAgIENPTE9SX1lFTExPVywgQ09MT1Jf
V0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94X2JvcmRlciwgICAgICBDT0xPUl9X
SElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKHBvc2l0aW9uX2luZGljYXRv
ciwgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihtZW51
Ym94LCAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJ
RExHX0NPTE9SKG1lbnVib3hfYm9yZGVyLCAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9XSElU
RSwgIHRydWUpOworCURMR19DT0xPUihpdGVtLCAgICAgICAgICAgICAgICAgIENPTE9SX0JMQUNL
LCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKGl0ZW1fc2VsZWN0ZWQsICAgICAg
ICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOworCURMR19DT0xPUih0YWcsICAg
ICAgICAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdf
Q09MT1IodGFnX3NlbGVjdGVkLCAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMVUUsICAg
dHJ1ZSk7CisJRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBD
T0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUih0YWdfa2V5X3NlbGVjdGVkLCAgICAgIENP
TE9SX1lFTExPVywgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1IoY2hlY2ssICAgICAg
ICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xP
UihjaGVja19zZWxlY3RlZCwgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVl
KTsKKwlETEdfQ09MT1IodWFycm93LCAgICAgICAgICAgICAgICBDT0xPUl9HUkVFTiwgIENPTE9S
X1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGRhcnJvdywgICAgICAgICAgICAgICAgQ09MT1Jf
R1JFRU4sICBDT0xPUl9XSElURSwgIHRydWUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfYmxhY2ti
Z190aGVtZSh2b2lkKQoreworCURMR19DT0xPUihzY3JlZW4sIENPTE9SX1JFRCwgICBDT0xPUl9C
TEFDSywgdHJ1ZSk7CisJRExHX0NPTE9SKHNoYWRvdywgQ09MT1JfQkxBQ0ssIENPTE9SX0JMQUNL
LCBmYWxzZSk7CisJRExHX0NPTE9SKGRpYWxvZywgQ09MT1JfV0hJVEUsIENPTE9SX0JMQUNLLCBm
YWxzZSk7CisJRExHX0NPTE9SKHRpdGxlLCAgQ09MT1JfUkVELCAgIENPTE9SX0JMQUNLLCBmYWxz
ZSk7CisJRExHX0NPTE9SKGJvcmRlciwgQ09MT1JfQkxBQ0ssIENPTE9SX0JMQUNLLCB0cnVlKTsK
KworCURMR19DT0xPUihidXR0b25fYWN0aXZlLCAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1Jf
UkVELCAgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2luYWN0aXZlLCAgICAgICBDT0xPUl9Z
RUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9rZXlfYWN0aXZl
LCAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRv
bl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xPUl9CTEFDSywgZmFsc2UpOworCURM
R19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCAgIENPTE9SX1dISVRFLCAgQ09MT1JfUkVELCAg
IGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2luYWN0aXZlLCBDT0xPUl9CTEFDSywg
IENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihpbnB1dGJveCwgICAgICAgICBDT0xP
Ul9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGlucHV0Ym94X2JvcmRl
ciwgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKworCURMR19DT0xPUihzZWFy
Y2hib3gsICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NP
TE9SKHNlYXJjaGJveF90aXRsZSwgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIHRydWUpOwor
CURMR19DT0xPUihzZWFyY2hib3hfYm9yZGVyLCBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0
cnVlKTsKKworCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0b3IsIENPTE9SX1JFRCwgQ09MT1Jf
QkxBQ0ssICBmYWxzZSk7CisKKwlETEdfQ09MT1IobWVudWJveCwgICAgICAgICAgQ09MT1JfWUVM
TE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihtZW51Ym94X2JvcmRlciwgICBD
T0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihpdGVtLCAgICAg
ICAgICAgICBDT0xPUl9XSElURSwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IoaXRl
bV9zZWxlY3RlZCwgICAgQ09MT1JfV0hJVEUsIENPTE9SX1JFRCwgICBmYWxzZSk7CisKKwlETEdf
Q09MT1IodGFnLCAgICAgICAgICAgICAgQ09MT1JfUkVELCAgICBDT0xPUl9CTEFDSywgZmFsc2Up
OworCURMR19DT0xPUih0YWdfc2VsZWN0ZWQsICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwg
ICB0cnVlKTsKKwlETEdfQ09MT1IodGFnX2tleSwgICAgICAgICAgQ09MT1JfUkVELCAgICBDT0xP
Ul9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUih0YWdfa2V5X3NlbGVjdGVkLCBDT0xPUl9ZRUxM
T1csIENPTE9SX1JFRCwgICB0cnVlKTsKKworCURMR19DT0xPUihjaGVjaywgICAgICAgICAgICBD
T0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGNoZWNrX3NlbGVj
dGVkLCAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRydWUpOworCisJRExHX0NPTE9SKHVh
cnJvdywgQ09MT1JfUkVELCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihkYXJyb3cs
IENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgc2V0X2Js
dWV0aXRsZV90aGVtZSh2b2lkKQoreworCXNldF9jbGFzc2ljX3RoZW1lKCk7CisJRExHX0NPTE9S
KHRpdGxlLCAgICAgICAgICAgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOwor
CURMR19DT0xPUihidXR0b25fa2V5X2FjdGl2ZSwgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMVUUs
ICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgQ09MT1JfV0hJVEUsICBD
T0xPUl9CTFVFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKHNlYXJjaGJveF90aXRsZSwgICAgIENPTE9S
X0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOworCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0
b3IsICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsKKwlETEdfQ09MT1IodGFnLCAg
ICAgICAgICAgICAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7CisJRExHX0NP
TE9SKHRhZ19rZXksICAgICAgICAgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUp
OworCit9CisKKy8qCisgKiBTZWxlY3QgY29sb3IgdGhlbWUKKyAqLworc3RhdGljIGludCBzZXRf
dGhlbWUoY29uc3QgY2hhciAqdGhlbWUpCit7CisJaW50IHVzZV9jb2xvciA9IDE7CisJaWYgKCF0
aGVtZSkKKwkJc2V0X2JsdWV0aXRsZV90aGVtZSgpOworCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwg
ImNsYXNzaWMiKSA9PSAwKQorCQlzZXRfY2xhc3NpY190aGVtZSgpOworCWVsc2UgaWYgKHN0cmNt
cCh0aGVtZSwgImJsdWV0aXRsZSIpID09IDApCisJCXNldF9ibHVldGl0bGVfdGhlbWUoKTsKKwll
bHNlIGlmIChzdHJjbXAodGhlbWUsICJibGFja2JnIikgPT0gMCkKKwkJc2V0X2JsYWNrYmdfdGhl
bWUoKTsKKwllbHNlIGlmIChzdHJjbXAodGhlbWUsICJtb25vIikgPT0gMCkKKwkJdXNlX2NvbG9y
ID0gMDsKKworCXJldHVybiB1c2VfY29sb3I7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfb25lX2Nv
bG9yKHN0cnVjdCBkaWFsb2dfY29sb3IgKmNvbG9yKQoreworCXN0YXRpYyBpbnQgcGFpciA9IDA7
CisKKwlwYWlyKys7CisJaW5pdF9wYWlyKHBhaXIsIGNvbG9yLT5mZywgY29sb3ItPmJnKTsKKwlp
ZiAoY29sb3ItPmhsKQorCQljb2xvci0+YXRyID0gQV9CT0xEIHwgQ09MT1JfUEFJUihwYWlyKTsK
KwllbHNlCisJCWNvbG9yLT5hdHIgPSBDT0xPUl9QQUlSKHBhaXIpOworfQorCitzdGF0aWMgdm9p
ZCBpbml0X2RpYWxvZ19jb2xvcnModm9pZCkKK3sKKwlpbml0X29uZV9jb2xvcigmZGxnLnNjcmVl
bik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5zaGFkb3cpOworCWluaXRfb25lX2NvbG9yKCZkbGcu
ZGlhbG9nKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRpdGxlKTsKKwlpbml0X29uZV9jb2xvcigm
ZGxnLmJvcmRlcik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fYWN0aXZlKTsKKwlpbml0
X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9pbmFjdGl2ZSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5i
dXR0b25fa2V5X2FjdGl2ZSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fa2V5X2luYWN0
aXZlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUpOworCWluaXRf
b25lX2NvbG9yKCZkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlKTsKKwlpbml0X29uZV9jb2xvcigm
ZGxnLmlucHV0Ym94KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmlucHV0Ym94X2JvcmRlcik7CisJ
aW5pdF9vbmVfY29sb3IoJmRsZy5zZWFyY2hib3gpOworCWluaXRfb25lX2NvbG9yKCZkbGcuc2Vh
cmNoYm94X3RpdGxlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnNlYXJjaGJveF9ib3JkZXIpOwor
CWluaXRfb25lX2NvbG9yKCZkbGcucG9zaXRpb25faW5kaWNhdG9yKTsKKwlpbml0X29uZV9jb2xv
cigmZGxnLm1lbnVib3gpOworCWluaXRfb25lX2NvbG9yKCZkbGcubWVudWJveF9ib3JkZXIpOwor
CWluaXRfb25lX2NvbG9yKCZkbGcuaXRlbSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5pdGVtX3Nl
bGVjdGVkKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZyk7CisJaW5pdF9vbmVfY29sb3IoJmRs
Zy50YWdfc2VsZWN0ZWQpOworCWluaXRfb25lX2NvbG9yKCZkbGcudGFnX2tleSk7CisJaW5pdF9v
bmVfY29sb3IoJmRsZy50YWdfa2V5X3NlbGVjdGVkKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmNo
ZWNrKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmNoZWNrX3NlbGVjdGVkKTsKKwlpbml0X29uZV9j
b2xvcigmZGxnLnVhcnJvdyk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5kYXJyb3cpOworfQorCisv
KgorICogU2V0dXAgZm9yIGNvbG9yIGRpc3BsYXkKKyAqLworc3RhdGljIHZvaWQgY29sb3Jfc2V0
dXAoY29uc3QgY2hhciAqdGhlbWUpCit7CisJaW50IHVzZV9jb2xvcjsKKworCXVzZV9jb2xvciA9
IHNldF90aGVtZSh0aGVtZSk7CisJaWYgKHVzZV9jb2xvciAmJiBoYXNfY29sb3JzKCkpIHsKKwkJ
c3RhcnRfY29sb3IoKTsKKwkJaW5pdF9kaWFsb2dfY29sb3JzKCk7CisJfSBlbHNlCisJCXNldF9t
b25vX3RoZW1lKCk7Cit9CisKKy8qCisgKiBTZXQgd2luZG93IHRvIGF0dHJpYnV0ZSAnYXR0cicK
KyAqLwordm9pZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRo
LCBjaHR5cGUgYXR0cikKK3sKKwlpbnQgaSwgajsKKworCXdhdHRyc2V0KHdpbiwgYXR0cik7CisJ
Zm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXdtb3ZlKHdpbiwgaSwgMCk7CisJCWZv
ciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQorCQkJd2FkZGNoKHdpbiwgJyAnKTsKKwl9CisJdG91
Y2h3aW4od2luKTsKK30KKwordm9pZCBkaWFsb2dfY2xlYXIodm9pZCkKK3sKKwlpbnQgbGluZXMs
IGNvbHVtbnM7CisKKwlsaW5lcyA9IGdldG1heHkoc3Rkc2NyKTsKKwljb2x1bW5zID0gZ2V0bWF4
eChzdGRzY3IpOworCisJYXR0cl9jbGVhcihzdGRzY3IsIGxpbmVzLCBjb2x1bW5zLCBkbGcuc2Ny
ZWVuLmF0cik7CisJLyogRGlzcGxheSBiYWNrZ3JvdW5kIHRpdGxlIGlmIGl0IGV4aXN0cyAuLi4g
LSBTTEggKi8KKwlpZiAoZGxnLmJhY2t0aXRsZSAhPSBOVUxMKSB7CisJCWludCBpLCBsZW4gPSAw
LCBza2lwID0gMDsKKwkJc3RydWN0IHN1YnRpdGxlX2xpc3QgKnBvczsKKworCQl3YXR0cnNldChz
dGRzY3IsIGRsZy5zY3JlZW4uYXRyKTsKKwkJbXZ3YWRkc3RyKHN0ZHNjciwgMCwgMSwgKGNoYXIg
KilkbGcuYmFja3RpdGxlKTsKKworCQlmb3IgKHBvcyA9IGRsZy5zdWJ0aXRsZXM7IHBvcyAhPSBO
VUxMOyBwb3MgPSBwb3MtPm5leHQpIHsKKwkJCS8qIDMgaXMgZm9yIHRoZSBhcnJvdyBhbmQgc3Bh
Y2VzICovCisJCQlsZW4gKz0gc3RybGVuKHBvcy0+dGV4dCkgKyAzOworCQl9CisKKwkJd21vdmUo
c3Rkc2NyLCAxLCAxKTsKKwkJaWYgKGxlbiA+IGNvbHVtbnMgLSAyKSB7CisJCQljb25zdCBjaGFy
ICplbGxpcHNpcyA9ICJbLi4uXSAiOworCQkJd2FkZHN0cihzdGRzY3IsIGVsbGlwc2lzKTsKKwkJ
CXNraXAgPSBsZW4gLSAoY29sdW1ucyAtIDIgLSBzdHJsZW4oZWxsaXBzaXMpKTsKKwkJfQorCisJ
CWZvciAocG9zID0gZGxnLnN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHBvcy0+bmV4dCkg
eworCQkJaWYgKHNraXAgPT0gMCkKKwkJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfUkFSUk9XKTsKKwkJ
CWVsc2UKKwkJCQlza2lwLS07CisKKwkJCWlmIChza2lwID09IDApCisJCQkJd2FkZGNoKHN0ZHNj
ciwgJyAnKTsKKwkJCWVsc2UKKwkJCQlza2lwLS07CisKKwkJCWlmIChza2lwIDwgc3RybGVuKHBv
cy0+dGV4dCkpIHsKKwkJCQl3YWRkc3RyKHN0ZHNjciwgcG9zLT50ZXh0ICsgc2tpcCk7CisJCQkJ
c2tpcCA9IDA7CisJCQl9IGVsc2UKKwkJCQlza2lwIC09IHN0cmxlbihwb3MtPnRleHQpOworCisJ
CQlpZiAoc2tpcCA9PSAwKQorCQkJCXdhZGRjaChzdGRzY3IsICcgJyk7CisJCQllbHNlCisJCQkJ
c2tpcC0tOworCQl9CisKKwkJZm9yIChpID0gbGVuICsgMTsgaSA8IGNvbHVtbnMgLSAxOyBpKysp
CisJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfSExJTkUpOworCX0KKwl3bm91dHJlZnJlc2goc3Rkc2Ny
KTsKK30KKworLyoKKyAqIERvIHNvbWUgaW5pdGlhbGl6YXRpb24gZm9yIGRpYWxvZworICovCitp
bnQgaW5pdF9kaWFsb2coY29uc3QgY2hhciAqYmFja3RpdGxlKQoreworCWludCBoZWlnaHQsIHdp
ZHRoOworCisJaW5pdHNjcigpOwkJLyogSW5pdCBjdXJzZXMgKi8KKworCS8qIEdldCBjdXJyZW50
IGN1cnNvciBwb3NpdGlvbiBmb3Igc2lnbmFsIGhhbmRsZXIgaW4gbWNvbmYuYyAqLworCWdldHl4
KHN0ZHNjciwgc2F2ZWRfeSwgc2F2ZWRfeCk7CisKKwlnZXRtYXh5eChzdGRzY3IsIGhlaWdodCwg
d2lkdGgpOworCWlmIChoZWlnaHQgPCBXSU5ET1dfSEVJR1RIX01JTiB8fCB3aWR0aCA8IFdJTkRP
V19XSURUSF9NSU4pIHsKKwkJZW5kd2luKCk7CisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxM
OworCX0KKworCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7CisJY29sb3Jfc2V0dXAoZ2V0ZW52
KCJNRU5VQ09ORklHX0NPTE9SIikpOworCisJa2V5cGFkKHN0ZHNjciwgVFJVRSk7CisJY2JyZWFr
KCk7CisJbm9lY2hvKCk7CisJZGlhbG9nX2NsZWFyKCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9p
ZCBzZXRfZGlhbG9nX2JhY2t0aXRsZShjb25zdCBjaGFyICpiYWNrdGl0bGUpCit7CisJZGxnLmJh
Y2t0aXRsZSA9IGJhY2t0aXRsZTsKK30KKwordm9pZCBzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdHJ1
Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0bGVzKQoreworCWRsZy5zdWJ0aXRsZXMgPSBzdWJ0aXRs
ZXM7Cit9CisKKy8qCisgKiBFbmQgdXNpbmcgZGlhbG9nIGZ1bmN0aW9ucy4KKyAqLwordm9pZCBl
bmRfZGlhbG9nKGludCB4LCBpbnQgeSkKK3sKKwkvKiBtb3ZlIGN1cnNvciBiYWNrIHRvIG9yaWdp
bmFsIHBvc2l0aW9uICovCisJbW92ZSh5LCB4KTsKKwlyZWZyZXNoKCk7CisJZW5kd2luKCk7Cit9
CisKKy8qIFByaW50IHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLiBDZW50ZXIgdGhlIHRpdGxlIGFu
ZCB0cnVuY2F0ZQorICogdGlsZSBpZiB3aWRlciB0aGFuIGRpYWxvZyAoLSAyIGNoYXJzKS4KKyAq
Ki8KK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2csIGNvbnN0IGNoYXIgKnRpdGxlLCBp
bnQgd2lkdGgpCit7CisJaWYgKHRpdGxlKSB7CisJCWludCB0bGVuID0gTUlOKHdpZHRoIC0gMiwg
c3RybGVuKHRpdGxlKSk7CisJCXdhdHRyc2V0KGRpYWxvZywgZGxnLnRpdGxlLmF0cik7CisJCW12
d2FkZGNoKGRpYWxvZywgMCwgKHdpZHRoIC0gdGxlbikgLyAyIC0gMSwgJyAnKTsKKwkJbXZ3YWRk
bnN0cihkaWFsb2csIDAsICh3aWR0aCAtIHRsZW4pLzIsIHRpdGxlLCB0bGVuKTsKKwkJd2FkZGNo
KGRpYWxvZywgJyAnKTsKKwl9Cit9CisKKy8qCisgKiBQcmludCBhIHN0cmluZyBvZiB0ZXh0IGlu
IGEgd2luZG93LCBhdXRvbWF0aWNhbGx5IHdyYXAgYXJvdW5kIHRvIHRoZQorICogbmV4dCBsaW5l
IGlmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcgdG8gZml0IG9uIG9uZSBsaW5lLiBOZXdsaW5lCisg
KiBjaGFyYWN0ZXJzICdcbicgYXJlIHByb3BwZXJseSBwcm9jZXNzZWQuICBXZSBzdGFydCBvbiBh
IG5ldyBsaW5lCisgKiBpZiB0aGVyZSBpcyBubyByb29tIGZvciBhdCBsZWFzdCA0IG5vbmJsYW5r
cyBmb2xsb3dpbmcgYSBkb3VibGUtc3BhY2UuCisgKi8KK3ZvaWQgcHJpbnRfYXV0b3dyYXAoV0lO
RE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0aCwgaW50IHksIGludCB4KQor
eworCWludCBuZXdsLCBjdXJfeCwgY3VyX3k7CisJaW50IHByb21wdF9sZW4sIHJvb20sIHdsZW47
CisJY2hhciB0ZW1wc3RyW01BWF9MRU4gKyAxXSwgKndvcmQsICpzcCwgKnNwMiwgKm5ld2xpbmVf
c2VwYXJhdG9yID0gMDsKKworCXN0cmNweSh0ZW1wc3RyLCBwcm9tcHQpOworCisJcHJvbXB0X2xl
biA9IHN0cmxlbih0ZW1wc3RyKTsKKworCWlmIChwcm9tcHRfbGVuIDw9IHdpZHRoIC0geCAqIDIp
IHsJLyogSWYgcHJvbXB0IGlzIHNob3J0ICovCisJCXdtb3ZlKHdpbiwgeSwgKHdpZHRoIC0gcHJv
bXB0X2xlbikgLyAyKTsKKwkJd2FkZHN0cih3aW4sIHRlbXBzdHIpOworCX0gZWxzZSB7CisJCWN1
cl94ID0geDsKKwkJY3VyX3kgPSB5OworCQluZXdsID0gMTsKKwkJd29yZCA9IHRlbXBzdHI7CisJ
CXdoaWxlICh3b3JkICYmICp3b3JkKSB7CisJCQlzcCA9IHN0cnBicmsod29yZCwgIlxuICIpOwor
CQkJaWYgKHNwICYmICpzcCA9PSAnXG4nKQorCQkJCW5ld2xpbmVfc2VwYXJhdG9yID0gc3A7CisK
KwkJCWlmIChzcCkKKwkJCQkqc3ArKyA9IDA7CisKKwkJCS8qIFdyYXAgdG8gbmV4dCBsaW5lIGlm
IGVpdGhlciB0aGUgd29yZCBkb2VzIG5vdCBmaXQsCisJCQkgICBvciBpdCBpcyB0aGUgZmlyc3Qg
d29yZCBvZiBhIG5ldyBzZW50ZW5jZSwgYW5kIGl0IGlzCisJCQkgICBzaG9ydCwgYW5kIHRoZSBu
ZXh0IHdvcmQgZG9lcyBub3QgZml0LiAqLworCQkJcm9vbSA9IHdpZHRoIC0gY3VyX3g7CisJCQl3
bGVuID0gc3RybGVuKHdvcmQpOworCQkJaWYgKHdsZW4gPiByb29tIHx8CisJCQkgICAgKG5ld2wg
JiYgd2xlbiA8IDQgJiYgc3AKKwkJCSAgICAgJiYgd2xlbiArIDEgKyBzdHJsZW4oc3ApID4gcm9v
bQorCQkJICAgICAmJiAoIShzcDIgPSBzdHJwYnJrKHNwLCAiXG4gIikpCisJCQkJIHx8IHdsZW4g
KyAxICsgKHNwMiAtIHNwKSA+IHJvb20pKSkgeworCQkJCWN1cl95Kys7CisJCQkJY3VyX3ggPSB4
OworCQkJfQorCQkJd21vdmUod2luLCBjdXJfeSwgY3VyX3gpOworCQkJd2FkZHN0cih3aW4sIHdv
cmQpOworCQkJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOworCisJCQkvKiBNb3ZlIHRvIHRoZSBu
ZXh0IGxpbmUgaWYgdGhlIHdvcmQgc2VwYXJhdG9yIHdhcyBhIG5ld2xpbmUgKi8KKwkJCWlmIChu
ZXdsaW5lX3NlcGFyYXRvcikgeworCQkJCWN1cl95Kys7CisJCQkJY3VyX3ggPSB4OworCQkJCW5l
d2xpbmVfc2VwYXJhdG9yID0gMDsKKwkJCX0gZWxzZQorCQkJCWN1cl94Kys7CisKKwkJCWlmIChz
cCAmJiAqc3AgPT0gJyAnKSB7CisJCQkJY3VyX3grKzsJLyogZG91YmxlIHNwYWNlICovCisJCQkJ
d2hpbGUgKCorK3NwID09ICcgJykgOworCQkJCW5ld2wgPSAxOworCQkJfSBlbHNlCisJCQkJbmV3
bCA9IDA7CisJCQl3b3JkID0gc3A7CisJCX0KKwl9Cit9CisKKy8qCisgKiBQcmludCBhIGJ1dHRv
bgorICovCit2b2lkIHByaW50X2J1dHRvbihXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKmxhYmVs
LCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgaSwgdGVtcDsKKworCXdtb3Zl
KHdpbiwgeSwgeCk7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fYWN0aXZl
LmF0cgorCQkgOiBkbGcuYnV0dG9uX2luYWN0aXZlLmF0cik7CisJd2FkZHN0cih3aW4sICI8Iik7
CisJdGVtcCA9IHN0cnNwbihsYWJlbCwgIiAiKTsKKwlsYWJlbCArPSB0ZW1wOworCXdhdHRyc2V0
KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2xhYmVsX2FjdGl2ZS5hdHIKKwkJIDogZGxnLmJ1
dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIpOworCWZvciAoaSA9IDA7IGkgPCB0ZW1wOyBpKyspCisJ
CXdhZGRjaCh3aW4sICcgJyk7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25f
a2V5X2FjdGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUuYXRyKTsKKwl3YWRk
Y2god2luLCBsYWJlbFswXSk7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25f
bGFiZWxfYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlLmF0cik7CisJ
d2FkZHN0cih3aW4sIChjaGFyICopbGFiZWwgKyAxKTsKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVk
ID8gZGxnLmJ1dHRvbl9hY3RpdmUuYXRyCisJCSA6IGRsZy5idXR0b25faW5hY3RpdmUuYXRyKTsK
Kwl3YWRkc3RyKHdpbiwgIj4iKTsKKwl3bW92ZSh3aW4sIHksIHggKyB0ZW1wICsgMSk7Cit9CisK
Ky8qCisgKiBEcmF3IGEgcmVjdGFuZ3VsYXIgYm94IHdpdGggbGluZSBkcmF3aW5nIGNoYXJhY3Rl
cnMKKyAqLwordm9pZAorZHJhd19ib3goV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBo
ZWlnaHQsIGludCB3aWR0aCwKKwkgY2h0eXBlIGJveCwgY2h0eXBlIGJvcmRlcikKK3sKKwlpbnQg
aSwgajsKKworCXdhdHRyc2V0KHdpbiwgMCk7CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsr
KSB7CisJCXdtb3ZlKHdpbiwgeSArIGksIHgpOworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGor
KykKKwkJCWlmICghaSAmJiAhaikKKwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfVUxDT1JO
RVIpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmICFqKQorCQkJCXdhZGRjaCh3aW4s
IGJvcmRlciB8IEFDU19MTENPUk5FUik7CisJCQllbHNlIGlmICghaSAmJiBqID09IHdpZHRoIC0g
MSkKKwkJCQl3YWRkY2god2luLCBib3ggfCBBQ1NfVVJDT1JORVIpOworCQkJZWxzZSBpZiAoaSA9
PSBoZWlnaHQgLSAxICYmIGogPT0gd2lkdGggLSAxKQorCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFD
U19MUkNPUk5FUik7CisJCQllbHNlIGlmICghaSkKKwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBB
Q1NfSExJTkUpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxKQorCQkJCXdhZGRjaCh3aW4s
IGJveCB8IEFDU19ITElORSk7CisJCQllbHNlIGlmICghaikKKwkJCQl3YWRkY2god2luLCBib3Jk
ZXIgfCBBQ1NfVkxJTkUpOworCQkJZWxzZSBpZiAoaiA9PSB3aWR0aCAtIDEpCisJCQkJd2FkZGNo
KHdpbiwgYm94IHwgQUNTX1ZMSU5FKTsKKwkJCWVsc2UKKwkJCQl3YWRkY2god2luLCBib3ggfCAn
ICcpOworCX0KK30KKworLyoKKyAqIERyYXcgc2hhZG93cyBhbG9uZyB0aGUgcmlnaHQgYW5kIGJv
dHRvbSBlZGdlIHRvIGdpdmUgYSBtb3JlIDNEIGxvb2sKKyAqIHRvIHRoZSBib3hlcworICovCit2
b2lkIGRyYXdfc2hhZG93KFdJTkRPVyAqIHdpbiwgaW50IHksIGludCB4LCBpbnQgaGVpZ2h0LCBp
bnQgd2lkdGgpCit7CisJaW50IGk7CisKKwlpZiAoaGFzX2NvbG9ycygpKSB7CS8qIFdoZXRoZXIg
dGVybWluYWwgc3VwcG9ydHMgY29sb3I/ICovCisJCXdhdHRyc2V0KHdpbiwgZGxnLnNoYWRvdy5h
dHIpOworCQl3bW92ZSh3aW4sIHkgKyBoZWlnaHQsIHggKyAyKTsKKwkJZm9yIChpID0gMDsgaSA8
IHdpZHRoOyBpKyspCisJCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7CisJ
CWZvciAoaSA9IHkgKyAxOyBpIDwgeSArIGhlaWdodCArIDE7IGkrKykgeworCQkJd21vdmUod2lu
LCBpLCB4ICsgd2lkdGgpOworCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQp
OworCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQpOworCQl9CisJCXdub3V0
cmVmcmVzaCh3aW4pOworCX0KK30KKworLyoKKyAqICBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRo
ZSBmaXJzdCBhbHBoYWJldGljIGNoYXJhY3RlciBpbiBhIHN0cmluZy4KKyAqLworaW50IGZpcnN0
X2FscGhhKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZXhlbXB0KQoreworCWludCBp
LCBpbl9wYXJlbiA9IDAsIGM7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKHN0cmluZyk7IGkr
KykgeworCQljID0gdG9sb3dlcihzdHJpbmdbaV0pOworCisJCWlmIChzdHJjaHIoIjxbKCIsIGMp
KQorCQkJKytpbl9wYXJlbjsKKwkJaWYgKHN0cmNocigiPl0pIiwgYykgJiYgaW5fcGFyZW4gPiAw
KQorCQkJLS1pbl9wYXJlbjsKKworCQlpZiAoKCFpbl9wYXJlbikgJiYgaXNhbHBoYShjKSAmJiBz
dHJjaHIoZXhlbXB0LCBjKSA9PSAwKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIDA7Cit9
CisKKy8qCisgKiBuY3Vyc2VzIHVzZXMgRVNDIHRvIGRldGVjdCBlc2NhcGVkIGNoYXIgc2VxdWVu
Y2VzLiBUaGlzIHJlc3V0bCBpbgorICogYSBzbWFsbCB0aW1lb3V0IGJlZm9yZSBFU0MgaXMgYWN0
dWFsbHkgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAqIGx4ZGlhbG9nIHN1Z2dlc3Qg
PEVTQz4gPEVTQz4gd2hpY2ggaXMgY29ycmVjdGx5IHRyYW5zbGF0ZWQgdG8gdHdvCisgKiB0aW1l
cyBlc2MuIEJ1dCB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgZXNjIHRvIGF2b2lk
IHN0ZXBwaW5nCisgKiBvdXQgb25lIG1lbnUgdG9vIG11Y2guIEZpbHRlciBhd2F5IGFsbCBlc2Nh
cGVkIGtleSBzZXF1ZW5jZXMgc2luY2UKKyAqIGtleXBhZChGQUxTRSkgdHVybiBvZmYgbmN1cnNl
cyBzdXBwb3J0IGZvciBlc2NhcGUgc2VxdWVuY2VzIC0gYW5kIHRoYXRzCisgKiBuZWVkZWQgdG8g
bWFrZSBub3RpbWVvdXQoKSBkbyBhcyBleHBlY3RlZC4KKyAqLworaW50IG9uX2tleV9lc2MoV0lO
RE9XICp3aW4pCit7CisJaW50IGtleTsKKwlpbnQga2V5MjsKKwlpbnQga2V5MzsKKworCW5vZGVs
YXkod2luLCBUUlVFKTsKKwlrZXlwYWQod2luLCBGQUxTRSk7CisJa2V5ID0gd2dldGNoKHdpbik7
CisJa2V5MiA9IHdnZXRjaCh3aW4pOworCWRvIHsKKwkJa2V5MyA9IHdnZXRjaCh3aW4pOworCX0g
d2hpbGUgKGtleTMgIT0gRVJSKTsKKwlub2RlbGF5KHdpbiwgRkFMU0UpOworCWtleXBhZCh3aW4s
IFRSVUUpOworCWlmIChrZXkgPT0gS0VZX0VTQyAmJiBrZXkyID09IEVSUikKKwkJcmV0dXJuIEtF
WV9FU0M7CisJZWxzZSBpZiAoa2V5ICE9IEVSUiAmJiBrZXkgIT0gS0VZX0VTQyAmJiBrZXkyID09
IEVSUikKKwkJdW5nZXRjaChrZXkpOworCisJcmV0dXJuIC0xOworfQorCisvKiByZWRyYXcgc2Ny
ZWVuIGluIG5ldyBzaXplICovCitpbnQgb25fa2V5X3Jlc2l6ZSh2b2lkKQoreworCWRpYWxvZ19j
bGVhcigpOworCXJldHVybiBLRVlfUkVTSVpFOworfQorCitzdHJ1Y3QgZGlhbG9nX2xpc3QgKml0
ZW1fY3VyOworc3RydWN0IGRpYWxvZ19saXN0IGl0ZW1fbmlsOworc3RydWN0IGRpYWxvZ19saXN0
ICppdGVtX2hlYWQ7CisKK3ZvaWQgaXRlbV9yZXNldCh2b2lkKQoreworCXN0cnVjdCBkaWFsb2df
bGlzdCAqcCwgKm5leHQ7CisKKwlmb3IgKHAgPSBpdGVtX2hlYWQ7IHA7IHAgPSBuZXh0KSB7CisJ
CW5leHQgPSBwLT5uZXh0OworCQlmcmVlKHApOworCX0KKwlpdGVtX2hlYWQgPSBOVUxMOworCWl0
ZW1fY3VyID0gJml0ZW1fbmlsOworfQorCit2b2lkIGl0ZW1fbWFrZShjb25zdCBjaGFyICpmbXQs
IC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBkaWFsb2dfbGlzdCAqcCA9IG1hbGxvYyhz
aXplb2YoKnApKTsKKworCWlmIChpdGVtX2hlYWQpCisJCWl0ZW1fY3VyLT5uZXh0ID0gcDsKKwll
bHNlCisJCWl0ZW1faGVhZCA9IHA7CisJaXRlbV9jdXIgPSBwOworCW1lbXNldChwLCAwLCBzaXpl
b2YoKnApKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihpdGVtX2N1ci0+bm9k
ZS5zdHIsIHNpemVvZihpdGVtX2N1ci0+bm9kZS5zdHIpLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXAp
OworfQorCit2b2lkIGl0ZW1fYWRkX3N0cihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9s
aXN0IGFwOworCXNpemVfdCBhdmFpbDsKKworCWF2YWlsID0gc2l6ZW9mKGl0ZW1fY3VyLT5ub2Rl
LnN0cikgLSBzdHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQp
OworCXZzbnByaW50ZihpdGVtX2N1ci0+bm9kZS5zdHIgKyBzdHJsZW4oaXRlbV9jdXItPm5vZGUu
c3RyKSwKKwkJICBhdmFpbCwgZm10LCBhcCk7CisJaXRlbV9jdXItPm5vZGUuc3RyW3NpemVvZihp
dGVtX2N1ci0+bm9kZS5zdHIpIC0gMV0gPSAnXDAnOworCXZhX2VuZChhcCk7Cit9CisKK3ZvaWQg
aXRlbV9zZXRfdGFnKGNoYXIgdGFnKQoreworCWl0ZW1fY3VyLT5ub2RlLnRhZyA9IHRhZzsKK30K
K3ZvaWQgaXRlbV9zZXRfZGF0YSh2b2lkICpwdHIpCit7CisJaXRlbV9jdXItPm5vZGUuZGF0YSA9
IHB0cjsKK30KKwordm9pZCBpdGVtX3NldF9zZWxlY3RlZChpbnQgdmFsKQoreworCWl0ZW1fY3Vy
LT5ub2RlLnNlbGVjdGVkID0gdmFsOworfQorCitpbnQgaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCh2
b2lkKQoreworCWl0ZW1fZm9yZWFjaCgpCisJCWlmIChpdGVtX2lzX3NlbGVjdGVkKCkpCisJCQly
ZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqaXRlbV9kYXRhKHZvaWQpCit7CisJcmV0
dXJuIGl0ZW1fY3VyLT5ub2RlLmRhdGE7Cit9CisKK2NoYXIgaXRlbV90YWcodm9pZCkKK3sKKwly
ZXR1cm4gaXRlbV9jdXItPm5vZGUudGFnOworfQorCitpbnQgaXRlbV9jb3VudCh2b2lkKQorewor
CWludCBuID0gMDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7CisKKwlmb3IgKHAgPSBpdGVtX2hl
YWQ7IHA7IHAgPSBwLT5uZXh0KQorCQluKys7CisJcmV0dXJuIG47Cit9CisKK3ZvaWQgaXRlbV9z
ZXQoaW50IG4pCit7CisJaW50IGkgPSAwOworCWl0ZW1fZm9yZWFjaCgpCisJCWlmIChpKysgPT0g
bikKKwkJCXJldHVybjsKK30KKworaW50IGl0ZW1fbih2b2lkKQoreworCWludCBuID0gMDsKKwlz
dHJ1Y3QgZGlhbG9nX2xpc3QgKnA7CisKKwlmb3IgKHAgPSBpdGVtX2hlYWQ7IHA7IHAgPSBwLT5u
ZXh0KSB7CisJCWlmIChwID09IGl0ZW1fY3VyKQorCQkJcmV0dXJuIG47CisJCW4rKzsKKwl9CisJ
cmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKml0ZW1fc3RyKHZvaWQpCit7CisJcmV0dXJuIGl0
ZW1fY3VyLT5ub2RlLnN0cjsKK30KKworaW50IGl0ZW1faXNfc2VsZWN0ZWQodm9pZCkKK3sKKwly
ZXR1cm4gKGl0ZW1fY3VyLT5ub2RlLnNlbGVjdGVkICE9IDApOworfQorCitpbnQgaXRlbV9pc190
YWcoY2hhciB0YWcpCit7CisJcmV0dXJuIChpdGVtX2N1ci0+bm9kZS50YWcgPT0gdGFnKTsKK30K
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cveWVzbm8uYyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvbHhkaWFsb2cveWVzbm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMC4uYmNhYWM5YjcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L2x4ZGlhbG9nL3llc25vLmMKQEAgLTAsMCArMSwxMDEgQEAKKy8vIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqICB5ZXNuby5jIC0tIGltcGxlbWVudHMgdGhlIHll
cy9ubyBib3gKKyAqCisgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5j
dWhrLmhrKQorICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFt
IFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKKyAqLworCisjaW5jbHVkZSAiZGlhbG9nLmgiCisK
Ky8qCisgKiBEaXNwbGF5IHRlcm1pbmF0aW9uIGJ1dHRvbnMKKyAqLworc3RhdGljIHZvaWQgcHJp
bnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNl
bGVjdGVkKQoreworCWludCB4ID0gd2lkdGggLyAyIC0gMTA7CisJaW50IHkgPSBoZWlnaHQgLSAy
OworCisJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiBZZXMgIiwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7
CisJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiAgTm8gICIsIHksIHggKyAxMywgc2VsZWN0ZWQgPT0g
MSk7CisKKwl3bW92ZShkaWFsb2csIHksIHggKyAxICsgMTMgKiBzZWxlY3RlZCk7CisJd3JlZnJl
c2goZGlhbG9nKTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBkaWFsb2cgYm94IHdpdGggdHdvIGJ1
dHRvbnMgLSBZZXMgYW5kIE5vCisgKi8KK2ludCBkaWFsb2dfeWVzbm8oY29uc3QgY2hhciAqdGl0
bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQoreworCWludCBp
LCB4LCB5LCBrZXkgPSAwLCBidXR0b24gPSAwOworCVdJTkRPVyAqZGlhbG9nOworCitkb19yZXNp
emU6CisJaWYgKGdldG1heHkoc3Rkc2NyKSA8IChoZWlnaHQgKyBZRVNOT19IRUlHVEhfTUlOKSkK
KwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1heHgoc3Rkc2NyKSA8ICh3
aWR0aCArIFlFU05PX1dJRFRIX01JTikpCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOwor
CisJLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9IChnZXRtYXh4KHN0ZHNj
cikgLSB3aWR0aCkgLyAyOworCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7CisK
KwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOworCisJZGlhbG9nID0g
bmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFsb2csIFRSVUUpOworCisJ
ZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLAorCQkgZGxnLmRpYWxvZy5hdHIs
IGRsZy5ib3JkZXIuYXRyKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsKKwlt
dndhZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsKKwlmb3IgKGkgPSAwOyBp
IDwgd2lkdGggLSAyOyBpKyspCisJCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7CisJd2F0dHJz
ZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7CisJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOwor
CisJcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOworCisJd2F0dHJzZXQoZGlhbG9n
LCBkbGcuZGlhbG9nLmF0cik7CisJcHJpbnRfYXV0b3dyYXAoZGlhbG9nLCBwcm9tcHQsIHdpZHRo
IC0gMiwgMSwgMyk7CisKKwlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7
CisKKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7CisJ
CXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgJ1knOgorCQljYXNlICd5JzoKKwkJCWRlbHdpbihkaWFs
b2cpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ04nOgorCQljYXNlICduJzoKKwkJCWRlbHdpbihk
aWFsb2cpOworCQkJcmV0dXJuIDE7CisKKwkJY2FzZSBUQUI6CisJCWNhc2UgS0VZX0xFRlQ6CisJ
CWNhc2UgS0VZX1JJR0hUOgorCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAtLWJ1dHRv
biA6ICsrYnV0dG9uKSA8IDApID8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRvbik7CisKKwkJ
CXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOworCQkJd3JlZnJl
c2goZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlICcgJzoKKwkJY2FzZSAnXG4nOgorCQkJZGVs
d2luKGRpYWxvZyk7CisJCQlyZXR1cm4gYnV0dG9uOworCQljYXNlIEtFWV9FU0M6CisJCQlrZXkg
PSBvbl9rZXlfZXNjKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUkVTSVpFOgorCQkJ
ZGVsd2luKGRpYWxvZyk7CisJCQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3RvIGRvX3Jlc2l6ZTsK
KwkJfQorCX0KKworCWRlbHdpbihkaWFsb2cpOworCXJldHVybiBrZXk7CQkvKiBFU0MgcHJlc3Nl
ZCAqLworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1jZmcuc2ggYi9z
dXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRl
eCAwMDAwMDAwMC4uYzgxMjg3MmQKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L21jb25mLWNmZy5zaApAQCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKyMgU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJuY3Vyc2VzdyIKK1BLRzI9Im5jdXJzZXMi
CisKK2lmIFsgLW4gIiQoY29tbWFuZCAtdiBwa2ctY29uZmlnKSIgXTsgdGhlbgorCWlmIHBrZy1j
b25maWcgLS1leGlzdHMgJFBLRzsgdGhlbgorCQllY2hvIGNmbGFncz1cIiQocGtnLWNvbmZpZyAt
LWNmbGFncyAkUEtHKVwiCisJCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRylc
IgorCQlleGl0IDAKKwlmaQorCisJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHMjsgdGhlbgor
CQllY2hvIGNmbGFncz1cIiQocGtnLWNvbmZpZyAtLWNmbGFncyAkUEtHMilcIgorCQllY2hvIGxp
YnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cyKVwiCisJCWV4aXQgMAorCWZpCitmaQorCisj
IENoZWNrIHRoZSBkZWZhdWx0IHBhdGhzIGluIGNhc2UgcGtnLWNvbmZpZyBpcyBub3QgaW5zdGFs
bGVkLgorIyAoRXZlbiBpZiBpdCBpcyBpbnN0YWxsZWQsIHNvbWUgZGlzdHJpYnV0aW9ucyBzdWNo
IGFzIG9wZW5TVVNFIGNhbm5vdAorIyBmaW5kIG5jdXJzZXMgYnkgcGtnLWNvbmZpZy4pCitpZiBb
IC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9uY3Vyc2VzLmggXTsgdGhlbgorCWVjaG8gY2ZsYWdz
PVwiLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9uY3Vyc2Vzd1wiCisJZWNobyBsaWJzPVwi
LWxuY3Vyc2Vzd1wiCisJZXhpdCAwCitmaQorCitpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vz
L25jdXJzZXMuaCBdOyB0aGVuCisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9p
bmNsdWRlL25jdXJzZXNcIgorCWVjaG8gbGlicz1cIi1sbmN1cnNlc1wiCisJZXhpdCAwCitmaQor
CitpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzLmggXTsgdGhlbgorCWVjaG8gY2ZsYWdzPVwi
LURfR05VX1NPVVJDRVwiCisJZWNobyBsaWJzPVwiLWxuY3Vyc2VzXCIKKwlleGl0IDAKK2ZpCisK
K2VjaG8gPiYyICIqIgorZWNobyA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIG5jdXJzZXMgcGFj
a2FnZS4iCitlY2hvID4mMiAiKiBJbnN0YWxsIG5jdXJzZXMgKG5jdXJzZXMtZGV2ZWwgb3IgbGli
bmN1cnNlcy1kZXYiCitlY2hvID4mMiAiKiBkZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24p
LiIKK2VjaG8gPiYyICIqIgorZXhpdCAxCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L21jb25mLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAuLjY5NDA5MWYzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9tY29uZi5jCkBAIC0wLDAgKzEsMTAzOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVs
IDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKgorICogSW50cm9kdWNlZCBzaW5nbGUgbWVudSBt
b2RlIChzaG93IGFsbCBzdWItbWVudXMgaW4gb25lIGxhcmdlIHRyZWUpLgorICogMjAwMi0xMS0w
NiBQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6PgorICoKKyAqIGkxOG4sIDIwMDUsIEFybmFsZG8g
Q2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgorICovCisKKyNpbmNsdWRl
IDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs
dWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKworI2luY2x1ZGUgImxrYy5oIgorI2luY2x1ZGUgImx4ZGlhbG9nL2RpYWxvZy5oIgor
CitzdGF0aWMgY29uc3QgY2hhciBtY29uZl9yZWFkbWVbXSA9CisiT3ZlcnZpZXdcbiIKKyItLS0t
LS0tLVxuIgorIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFy
YW1ldGVycyBmb3IgdGhlIGJ1aWxkLlxuIgorIkZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgYnVpbHQt
aW4sIG1vZHVsYXJpemVkLCBvciBpZ25vcmVkLiBQYXJhbWV0ZXJzXG4iCisibXVzdCBiZSBlbnRl
cmVkIGluIGFzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycyBvciB0ZXh0LlxuIgorIlxu
IgorIk1lbnUgaXRlbXMgYmVnaW5uaW5nIHdpdGggZm9sbG93aW5nIGJyYWNlcyByZXByZXNlbnQg
ZmVhdHVyZXMgdGhhdFxuIgorIiAgWyBdIGNhbiBiZSBidWlsdCBpbiBvciByZW1vdmVkXG4iCisi
ICA8ID4gY2FuIGJlIGJ1aWx0IGluLCBtb2R1bGFyaXplZCBvciByZW1vdmVkXG4iCisiICB7IH0g
Y2FuIGJlIGJ1aWx0IGluIG9yIG1vZHVsYXJpemVkIChzZWxlY3RlZCBieSBvdGhlciBmZWF0dXJl
KVxuIgorIiAgLSAtIGFyZSBzZWxlY3RlZCBieSBvdGhlciBmZWF0dXJlLFxuIgorIndoaWxlICos
IE0gb3Igd2hpdGVzcGFjZSBpbnNpZGUgYnJhY2VzIG1lYW5zIHRvIGJ1aWxkIGluLCBidWlsZCBh
c1xuIgorImEgbW9kdWxlIG9yIHRvIGV4Y2x1ZGUgdGhlIGZlYXR1cmUgcmVzcGVjdGl2ZWx5Llxu
IgorIlxuIgorIlRvIGNoYW5nZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXMsIGhpZ2hsaWdodCBpdCB3
aXRoIHRoZSBjdXJzb3JcbiIKKyJrZXlzIGFuZCBwcmVzcyA8WT4gdG8gYnVpbGQgaXQgaW4sIDxN
PiB0byBtYWtlIGl0IGEgbW9kdWxlIG9yXG4iCisiPE4+IHRvIHJlbW92ZSBpdC4gIFlvdSBtYXkg
YWxzbyBwcmVzcyB0aGUgPFNwYWNlIEJhcj4gdG8gY3ljbGVcbiIKKyJ0aHJvdWdoIHRoZSBhdmFp
bGFibGUgb3B0aW9ucyAoaS5lLiBZLT5OLT5NLT5ZKS5cbiIKKyJcbiIKKyJTb21lIGFkZGl0aW9u
YWwga2V5Ym9hcmQgaGludHM6XG4iCisiXG4iCisiTWVudXNcbiIKKyItLS0tLS0tLS0tXG4iCisi
byAgVXNlIHRoZSBVcC9Eb3duIGFycm93IGtleXMgKGN1cnNvciBrZXlzKSB0byBoaWdobGlnaHQg
dGhlIGl0ZW0geW91XG4iCisiICAgd2lzaCB0byBjaGFuZ2Ugb3IgdGhlIHN1Ym1lbnUgeW91IHdp
c2ggdG8gc2VsZWN0IGFuZCBwcmVzcyA8RW50ZXI+LlxuIgorIiAgIFN1Ym1lbnVzIGFyZSBkZXNp
Z25hdGVkIGJ5IFwiLS0tPlwiLCBlbXB0eSBvbmVzIGJ5IFwiLS0tLVwiLlxuIgorIlxuIgorIiAg
IFNob3J0Y3V0OiBQcmVzcyB0aGUgb3B0aW9uJ3MgaGlnaGxpZ2h0ZWQgbGV0dGVyIChob3RrZXkp
LlxuIgorIiAgICAgICAgICAgICBQcmVzc2luZyBhIGhvdGtleSBtb3JlIHRoYW4gb25jZSB3aWxs
IHNlcXVlbmNlXG4iCisiICAgICAgICAgICAgIHRocm91Z2ggYWxsIHZpc2libGUgaXRlbXMgd2hp
Y2ggdXNlIHRoYXQgaG90a2V5LlxuIgorIlxuIgorIiAgIFlvdSBtYXkgYWxzbyB1c2UgdGhlIDxQ
QUdFIFVQPiBhbmQgPFBBR0UgRE9XTj4ga2V5cyB0byBzY3JvbGxcbiIKKyIgICB1bnNlZW4gb3B0
aW9ucyBpbnRvIHZpZXcuXG4iCisiXG4iCisibyAgVG8gZXhpdCBhIG1lbnUgdXNlIHRoZSBjdXJz
b3Iga2V5cyB0byBoaWdobGlnaHQgdGhlIDxFeGl0PiBidXR0b25cbiIKKyIgICBhbmQgcHJlc3Mg
PEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgPEVTQz48RVNDPiBvciA8RT4g
b3IgPFg+IGlmIHRoZXJlIGlzIG5vIGhvdGtleVxuIgorIiAgICAgICAgICAgICB1c2luZyB0aG9z
ZSBsZXR0ZXJzLiAgWW91IG1heSBwcmVzcyBhIHNpbmdsZSA8RVNDPiwgYnV0XG4iCisiICAgICAg
ICAgICAgIHRoZXJlIGlzIGEgZGVsYXllZCByZXNwb25zZSB3aGljaCB5b3UgbWF5IGZpbmQgYW5u
b3lpbmcuXG4iCisiXG4iCisiICAgQWxzbywgdGhlIDxUQUI+IGFuZCBjdXJzb3Iga2V5cyB3aWxs
IGN5Y2xlIGJldHdlZW4gPFNlbGVjdD4sXG4iCisiICAgPEV4aXQ+LCA8SGVscD4sIDxTYXZlPiwg
YW5kIDxMb2FkPi5cbiIKKyJcbiIKKyJvICBUbyBnZXQgaGVscCB3aXRoIGFuIGl0ZW0sIHVzZSB0
aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IDxIZWxwPlxuIgorIiAgIGFuZCBwcmVzcyA8RU5U
RVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyA8SD4gb3IgPD8+LlxuIgorIlxuIgor
Im8gIFRvIHRvZ2dsZSB0aGUgZGlzcGxheSBvZiBoaWRkZW4gb3B0aW9ucywgcHJlc3MgPFo+Llxu
IgorIlxuIgorIlxuIgorIlJhZGlvbGlzdHMgIChDaG9pY2UgbGlzdHMpXG4iCisiLS0tLS0tLS0t
LS1cbiIKKyJvICBVc2UgdGhlIGN1cnNvciBrZXlzIHRvIHNlbGVjdCB0aGUgb3B0aW9uIHlvdSB3
aXNoIHRvIHNldCBhbmQgcHJlc3NcbiIKKyIgICA8Uz4gb3IgdGhlIDxTUEFDRSBCQVI+LlxuIgor
IlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBvcHRpb24g
eW91IHdpc2ggdG8gc2V0IHRoZW5cbiIKKyIgICAgICAgICAgICAgcHJlc3MgPFM+IG9yIDxTUEFD
RSBCQVI+LlxuIgorIlxuIgorIm8gIFRvIHNlZSBhdmFpbGFibGUgaGVscCBmb3IgdGhlIGl0ZW0s
IHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0XG4iCisiICAgPEhlbHA+IGFuZCBQcmVz
cyA8RU5URVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyA8SD4gb3IgPD8+LlxuIgor
IlxuIgorIiAgIEFsc28sIHRoZSA8VEFCPiBhbmQgY3Vyc29yIGtleXMgd2lsbCBjeWNsZSBiZXR3
ZWVuIDxTZWxlY3Q+IGFuZFxuIgorIiAgIDxIZWxwPlxuIgorIlxuIgorIlxuIgorIkRhdGEgRW50
cnlcbiIKKyItLS0tLS0tLS0tLVxuIgorIm8gIEVudGVyIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRp
b24gYW5kIHByZXNzIDxFTlRFUj5cbiIKKyIgICBJZiB5b3UgYXJlIGVudGVyaW5nIGhleGFkZWNp
bWFsIHZhbHVlcywgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuIgorIiAgIGFkZCB0aGUgJzB4JyBw
cmVmaXggdG8gdGhlIGVudHJ5LlxuIgorIlxuIgorIm8gIEZvciBoZWxwLCB1c2UgdGhlIDxUQUI+
IG9yIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCB0aGUgaGVscCBvcHRpb25cbiIKKyIgICBhbmQg
cHJlc3MgPEVOVEVSPi4gIFlvdSBjYW4gdHJ5IDxUQUI+PEg+IGFzIHdlbGwuXG4iCisiXG4iCisi
XG4iCisiVGV4dCBCb3ggICAgKEhlbHAgV2luZG93KVxuIgorIi0tLS0tLS0tXG4iCisibyAgVXNl
IHRoZSBjdXJzb3Iga2V5cyB0byBzY3JvbGwgdXAvZG93bi9sZWZ0L3JpZ2h0LiAgVGhlIFZJIGVk
aXRvclxuIgorIiAgIGtleXMgaCxqLGssbCBmdW5jdGlvbiBoZXJlIGFzIGRvIDx1PiwgPGQ+LCA8
U1BBQ0UgQkFSPiBhbmQgPEI+IGZvclxuIgorIiAgIHRob3NlIHdobyBhcmUgZmFtaWxpYXIgd2l0
aCBsZXNzIGFuZCBseW54LlxuIgorIlxuIgorIm8gIFByZXNzIDxFPiwgPFg+LCA8cT4sIDxFbnRl
cj4gb3IgPEVzYz48RXNjPiB0byBleGl0LlxuIgorIlxuIgorIlxuIgorIkFsdGVybmF0ZSBDb25m
aWd1cmF0aW9uIEZpbGVzXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJN
ZW51Y29uZmlnIHN1cHBvcnRzIHRoZSB1c2Ugb2YgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmls
ZXMgZm9yXG4iCisidGhvc2Ugd2hvLCBmb3IgdmFyaW91cyByZWFzb25zLCBmaW5kIGl0IG5lY2Vz
c2FyeSB0byBzd2l0Y2hcbiIKKyJiZXR3ZWVuIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cbiIK
KyJcbiIKKyJUaGUgPFNhdmU+IGJ1dHRvbiB3aWxsIGxldCB5b3Ugc2F2ZSB0aGUgY3VycmVudCBj
b25maWd1cmF0aW9uIHRvXG4iCisiYSBmaWxlIG9mIHlvdXIgY2hvb3NpbmcuICBVc2UgdGhlIDxM
b2FkPiBidXR0b24gdG8gbG9hZCBhIHByZXZpb3VzbHlcbiIKKyJzYXZlZCBhbHRlcm5hdGUgY29u
ZmlndXJhdGlvbi5cbiIKKyJcbiIKKyJFdmVuIGlmIHlvdSBkb24ndCB1c2UgYWx0ZXJuYXRlIGNv
bmZpZ3VyYXRpb24gZmlsZXMsIGJ1dCB5b3UgZmluZFxuIgorImR1cmluZyBhIE1lbnVjb25maWcg
c2Vzc2lvbiB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgbWVzc2VkIHVwIHlvdXJcbiIKKyJzZXR0
aW5ncywgeW91IG1heSB1c2UgdGhlIDxMb2FkPiBidXR0b24gdG8gcmVzdG9yZSB5b3VyIHByZXZp
b3VzbHlcbiIKKyJzYXZlZCBzZXR0aW5ncyBmcm9tIFwiLmNvbmZpZ1wiIHdpdGhvdXQgcmVzdGFy
dGluZyBNZW51Y29uZmlnLlxuIgorIlxuIgorIk90aGVyIGluZm9ybWF0aW9uXG4iCisiLS0tLS0t
LS0tLS0tLS0tLS1cbiIKKyJJZiB5b3UgdXNlIE1lbnVjb25maWcgaW4gYW4gWFRFUk0gd2luZG93
LCBtYWtlIHN1cmUgeW91IGhhdmUgeW91clxuIgorIiRURVJNIHZhcmlhYmxlIHNldCB0byBwb2lu
dCB0byBhbiB4dGVybSBkZWZpbml0aW9uIHdoaWNoIHN1cHBvcnRzXG4iCisiY29sb3IuICBPdGhl
cndpc2UsIE1lbnVjb25maWcgd2lsbCBsb29rIHJhdGhlciBiYWQuICBNZW51Y29uZmlnIHdpbGxc
biIKKyJub3QgZGlzcGxheSBjb3JyZWN0bHkgaW4gYW4gUlhWVCB3aW5kb3cgYmVjYXVzZSByeHZ0
IGRpc3BsYXlzIG9ubHkgb25lXG4iCisiaW50ZW5zaXR5IG9mIGNvbG9yLCBicmlnaHQuXG4iCisi
XG4iCisiTWVudWNvbmZpZyB3aWxsIGRpc3BsYXkgbGFyZ2VyIG1lbnVzIG9uIHNjcmVlbnMgb3Ig
eHRlcm1zIHdoaWNoIGFyZVxuIgorInNldCB0byBkaXNwbGF5IG1vcmUgdGhhbiB0aGUgc3RhbmRh
cmQgMjUgcm93IGJ5IDgwIGNvbHVtbiBnZW9tZXRyeS5cbiIKKyJJbiBvcmRlciBmb3IgdGhpcyB0
byB3b3JrLCB0aGUgXCJzdHR5IHNpemVcIiBjb21tYW5kIG11c3QgYmUgYWJsZSB0b1xuIgorImRp
c3BsYXkgdGhlIHNjcmVlbidzIGN1cnJlbnQgcm93IGFuZCBjb2x1bW4gZ2VvbWV0cnkuICBJIFNU
Uk9OR0xZXG4iCisiUkVDT01NRU5EIHRoYXQgeW91IG1ha2Ugc3VyZSB5b3UgZG8gTk9UIGhhdmUg
dGhlIHNoZWxsIHZhcmlhYmxlc1xuIgorIkxJTkVTIGFuZCBDT0xVTU5TIGV4cG9ydGVkIGludG8g
eW91ciBlbnZpcm9ubWVudC4gIFNvbWUgZGlzdHJpYnV0aW9uc1xuIgorImV4cG9ydCB0aG9zZSB2
YXJpYWJsZXMgdmlhIC9ldGMvcHJvZmlsZS4gIFNvbWUgbmN1cnNlcyBwcm9ncmFtcyBjYW5cbiIK
KyJiZWNvbWUgY29uZnVzZWQgd2hlbiB0aG9zZSB2YXJpYWJsZXMgKExJTkVTICYgQ09MVU1OUykg
ZG9uJ3QgcmVmbGVjdFxuIgorInRoZSB0cnVlIHNjcmVlbiBzaXplLlxuIgorIlxuIgorIk9wdGlv
bmFsIHBlcnNvbmFsaXR5IGF2YWlsYWJsZVxuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIgorIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2YgdGhlIG9wdGlvbnMgbGlzdGVk
IGluIGEgc2luZ2xlIG1lbnUsXG4iCisicmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgbXVsdGltZW51
IGhpZXJhcmNoeSwgcnVuIHRoZSBtZW51Y29uZmlnIHdpdGhcbiIKKyJNRU5VQ09ORklHX01PREUg
ZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiBFeGFtcGxlOlxuIgorIlxu
IgorIm1ha2UgTUVOVUNPTkZJR19NT0RFPXNpbmdsZV9tZW51IG1lbnVjb25maWdcbiIKKyJcbiIK
KyI8RW50ZXI+IHdpbGwgdGhlbiB1bnJvbGwgdGhlIGFwcHJvcHJpYXRlIGNhdGVnb3J5LCBvciBl
bmZvbGQgaXQgaWYgaXRcbiIKKyJpcyBhbHJlYWR5IHVucm9sbGVkLlxuIgorIlxuIgorIk5vdGUg
dGhhdCB0aGlzIG1vZGUgY2FuIGV2ZW50dWFsbHkgYmUgYSBsaXR0bGUgbW9yZSBDUFUgZXhwZW5z
aXZlXG4iCisiKGVzcGVjaWFsbHkgd2l0aCBhIGxhcmdlciBudW1iZXIgb2YgdW5yb2xsZWQgY2F0
ZWdvcmllcykgdGhhbiB0aGVcbiIKKyJkZWZhdWx0IG1vZGUuXG4iCisiXG4iCisiRGlmZmVyZW50
IGNvbG9yIHRoZW1lcyBhdmFpbGFibGVcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIgorIkl0IGlzIHBvc3NpYmxlIHRvIHNlbGVjdCBkaWZmZXJlbnQgY29sb3IgdGhlbWVz
IHVzaW5nIHRoZSB2YXJpYWJsZVxuIgorIk1FTlVDT05GSUdfQ09MT1IuIFRvIHNlbGVjdCBhIHRo
ZW1lIHVzZTpcbiIKKyJcbiIKKyJtYWtlIE1FTlVDT05GSUdfQ09MT1I9PHRoZW1lPiBtZW51Y29u
ZmlnXG4iCisiXG4iCisiQXZhaWxhYmxlIHRoZW1lcyBhcmVcbiIKKyIgbW9ubyAgICAgICA9PiBz
ZWxlY3RzIGNvbG9ycyBzdWl0YWJsZSBmb3IgbW9ub2Nocm9tZSBkaXNwbGF5c1xuIgorIiBibGFj
a2JnICAgID0+IHNlbGVjdHMgYSBjb2xvciBzY2hlbWUgd2l0aCBibGFjayBiYWNrZ3JvdW5kXG4i
CisiIGNsYXNzaWMgICAgPT4gdGhlbWUgd2l0aCBibHVlIGJhY2tncm91bmQuIFRoZSBjbGFzc2lj
IGxvb2tcbiIKKyIgYmx1ZXRpdGxlICA9PiBhbiBMQ0QgZnJpZW5kbHkgdmVyc2lvbiBvZiBjbGFz
c2ljLiAoZGVmYXVsdClcbiIKKyJcbiIsCittZW51X2luc3RydWN0aW9uc1tdID0KKwkiQXJyb3cg
a2V5cyBuYXZpZ2F0ZSB0aGUgbWVudS4gICIKKwkiPEVudGVyPiBzZWxlY3RzIHN1Ym1lbnVzIC0t
LT4gKG9yIGVtcHR5IHN1Ym1lbnVzIC0tLS0pLiAgIgorCSJIaWdobGlnaHRlZCBsZXR0ZXJzIGFy
ZSBob3RrZXlzLiAgIgorCSJQcmVzc2luZyA8WT4gaW5jbHVkZXMsIDxOPiBleGNsdWRlcywgPE0+
IG1vZHVsYXJpemVzIGZlYXR1cmVzLiAgIgorCSJQcmVzcyA8RXNjPjxFc2M+IHRvIGV4aXQsIDw/
PiBmb3IgSGVscCwgPC8+IGZvciBTZWFyY2guICAiCisJIkxlZ2VuZDogWypdIGJ1aWx0LWluICBb
IF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJsZSIsCityYWRpb2xpc3Rf
aW5zdHJ1Y3Rpb25zW10gPQorCSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3
aW5kb3cgb3IgIgorCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRvIHNl
bGVjdCAiCisJImZvbGxvd2VkIGJ5IHRoZSA8U1BBQ0UgQkFSPi4gIgorCSJQcmVzcyA8Pz4gZm9y
IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24uIiwKK2lucHV0Ym94X2lu
c3RydWN0aW9uc19pbnRbXSA9CisJIlBsZWFzZSBlbnRlciBhIGRlY2ltYWwgdmFsdWUuICIKKwki
RnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgIgorCSJVc2UgdGhlIDxUQUI+IGtleSB0
byBtb3ZlIGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsCitp
bnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQorCSJQbGVhc2UgZW50ZXIgYSBoZXhhZGVjaW1h
bCB2YWx1ZS4gIgorCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3ZlIGZyb20gdGhlIGlucHV0IGZp
ZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfc3Ry
aW5nW10gPQorCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuICIKKwkiVXNlIHRoZSA8VEFC
PiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBp
dC4iLAorc2V0bW9kX3RleHRbXSA9CisJIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIg
d2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhIG1vZHVsZS5cbiIKKwkiQXMgYSByZXN1bHQs
IHRoaXMgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiIsCitsb2FkX2NvbmZpZ190
ZXh0W10gPQorCSJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHlvdSB3
aXNoIHRvIGxvYWQuICAiCisJIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0byByZXN0b3JlIHRoZSBj
b25maWd1cmF0aW9uIHlvdSAiCisJImxhc3QgcmV0cmlldmVkLiAgTGVhdmUgYmxhbmsgdG8gYWJv
cnQuIiwKK2xvYWRfY29uZmlnX2hlbHBbXSA9CisJIlxuIgorCSJGb3IgdmFyaW91cyByZWFzb25z
LCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIgorCSJjb25maWd1cmF0
aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKKwkiXG4iCisJIklmIHlvdSBo
YXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhhbiB0
aGVcbiIKKwkiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5
b3UgdG8gbW9kaWZ5IHRoYXRcbiIKKwkiY29uZmlndXJhdGlvbi5cbiIKKwkiXG4iCisJIklmIHlv
dSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5IG5ldmVyIHVzZWQgYWx0ZXJu
YXRlXG4iCisJImNvbmZpZ3VyYXRpb24gZmlsZXMuIFlvdSBzaG91bGQgdGhlcmVmb3JlIGxlYXZl
IHRoaXMgYmxhbmsgdG8gYWJvcnQuXG4iLAorc2F2ZV9jb25maWdfdGV4dFtdID0KKwkiRW50ZXIg
YSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNhdmVkICIK
KwkiYXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQuIiwKK3NhdmVfY29uZmln
X2hlbHBbXSA9CisJIlxuIgorCSJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8g
a2VlcCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiIKKwkiYXZhaWxhYmxlIG9uIGEgc2luZ2xl
IG1hY2hpbmUuXG4iCisJIlxuIgorCSJFbnRlcmluZyBhIGZpbGUgbmFtZSBoZXJlIHdpbGwgYWxs
b3cgeW91IHRvIGxhdGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKKwkiYW5kIHVzZSB0aGUgY3VycmVu
dCBjb25maWd1cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0ZXZlclxuIgorCSJjb25maWd1
cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxuIgorCSJcbiIK
KwkiSWYgeW91IGFyZSB1bmNlcnRhaW4gd2hhdCBhbGwgdGhpcyBtZWFucyB0aGVuIHlvdSBzaG91
bGQgcHJvYmFibHlcbiIKKwkibGVhdmUgdGhpcyBibGFuay5cbiIsCitzZWFyY2hfaGVscFtdID0K
KwkiXG4iCisJIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlzcGxheSB0aGVpciByZWxhdGlvbnMu
XG4iCisJIlJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuXG4iCisJIkV4YW1wbGU6IHNl
YXJjaCBmb3IgXCJeRk9PXCJcbiIKKwkiUmVzdWx0OlxuIgorCSItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCSJTeW1i
b2w6IEZPTyBbPW1dXG4iCisJIlR5cGUgIDogdHJpc3RhdGVcbiIKKwkiUHJvbXB0OiBGb28gYnVz
IGlzIHVzZWQgdG8gZHJpdmUgdGhlIGJhciBIV1xuIgorCSIgIExvY2F0aW9uOlxuIgorCSIgICAg
LT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EpXG4iCisJIiAgICAgIC0+IFBD
SSBzdXBwb3J0IChQQ0kgWz15XSlcbiIKKwkiKDEpICAgICAtPiBQQ0kgYWNjZXNzIG1vZGUgKDxj
aG9pY2U+IFs9eV0pXG4iCisJIiAgRGVmaW5lZCBhdCBkcml2ZXJzL3BjaS9LY29uZmlnOjQ3XG4i
CisJIiAgRGVwZW5kcyBvbjogWDg2X0xPQ0FMX0FQSUMgJiYgWDg2X0lPX0FQSUMgfHwgSUE2NFxu
IgorCSIgIFNlbGVjdHM6IExJQkNSQzMyXG4iCisJIiAgU2VsZWN0ZWQgYnk6IEJBUiBbPW5dXG4i
CisJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iCisJIm8gVGhlIGxpbmUgJ1R5cGU6JyBzaG93cyB0aGUgdHlwZSBvZiB0
aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yXG4iCisJIiAgdGhpcyBzeW1ib2wgKGJvb2wsIHRy
aXN0YXRlLCBzdHJpbmcsIC4uLilcbiIKKwkibyBUaGUgbGluZSAnUHJvbXB0Oicgc2hvd3MgdGhl
IHRleHQgdXNlZCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgZm9yXG4iCisJIiAgdGhpcyBzeW1ib2xc
biIKKwkibyBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQgd2hhdCBmaWxlIC8gbGluZSBu
dW1iZXIgdGhlIHN5bWJvbFxuIgorCSIgIGlzIGRlZmluZWRcbiIKKwkibyBUaGUgJ0RlcGVuZHMg
b246JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyBuZWVkIHRvIGJlIGRlZmluZWQgZm9yXG4iCisJ
IiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVudSAoc2VsZWN0YWJsZSlcbiIK
KwkibyBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVsbHMgd2hlcmUgaW4gdGhlIG1lbnUgc3RydWN0
dXJlIHRoaXMgc3ltYm9sXG4iCisJIiAgaXMgbG9jYXRlZFxuIgorCSIgICAgQSBsb2NhdGlvbiBm
b2xsb3dlZCBieSBhIFs9eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhXG4iCisJIiAgICBzZWxl
Y3RhYmxlIG1lbnUgaXRlbSAtIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBpcyBkaXNwbGF5ZWQgaW5z
aWRlXG4iCisJIiAgICBicmFja2V0cy5cbiIKKwkiICAgIFByZXNzIHRoZSBrZXkgaW4gdGhlICgj
KSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iCisJIiAgICBsb2NhdGlvbi4gWW91
IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGN1cnJlbnQgc2VhcmNoIHJlc3VsdHNcbiIKKwkiICAg
IGFmdGVyIGV4aXRpbmcgdGhpcyBuZXcgbWVudS5cbiIKKwkibyBUaGUgJ1NlbGVjdHM6JyBsaW5l
IHRlbGxzIHdoYXQgc3ltYm9scyB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcbiIKKwkiICBzZWxlY3Rl
ZCBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKVxuIgorCSJvIFRoZSAnU2VsZWN0
ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVkIHRoaXMgc3ltYm9sXG4i
CisJIlxuIgorCSJPbmx5IHJlbGV2YW50IGxpbmVzIGFyZSBzaG93bi5cbiIKKwkiXG5cbiIKKwki
U2VhcmNoIGV4YW1wbGVzOlxuIgorCSJFeGFtcGxlczogVVNCCT0+IGZpbmQgYWxsIHN5bWJvbHMg
Y29udGFpbmluZyBVU0JcbiIKKwkiICAgICAgICAgIF5VU0IgPT4gZmluZCBhbGwgc3ltYm9scyBz
dGFydGluZyB3aXRoIFVTQlxuIgorCSIgICAgICAgICAgVVNCJCA9PiBmaW5kIGFsbCBzeW1ib2xz
IGVuZGluZyB3aXRoIFVTQlxuIgorCSJcbiI7CisKK3N0YXRpYyBpbnQgaW5kZW50Oworc3RhdGlj
IHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7CitzdGF0aWMgaW50IGNoaWxkX2NvdW50Oworc3Rh
dGljIGludCBzaW5nbGVfbWVudV9tb2RlOworc3RhdGljIGludCBzaG93X2FsbF9vcHRpb25zOwor
c3RhdGljIGludCBzYXZlX2FuZF9leGl0Oworc3RhdGljIGludCBzaWxlbnQ7CisKK3N0YXRpYyB2
b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBtZW51ICphY3RpdmVfbWVudSk7Citz
dGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBj
b25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2xvYWQodm9p
ZCk7CitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7CitzdGF0aWMgaW50IHNob3dfdGV4dGJv
eF9leHQoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRleHQsIGludCByLCBpbnQgYywKKwkJCSAg
ICBpbnQgKmtleXMsIGludCAqdnNjcm9sbCwgaW50ICpoc2Nyb2xsLAorCQkJICAgIHVwZGF0ZV90
ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIHNob3dfdGV4dGJv
eChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdGV4dCwgaW50IHIsIGludCBjKTsKK3N0
YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRl
eHQpOworc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KTsKKworc3RhdGlj
IGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07CitzdGF0aWMgdm9pZCBzZXRfY29uZmlnX2ZpbGVu
YW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKK3sKKwlzdGF0aWMgY2hhciBtZW51X2Jh
Y2t0aXRsZVtQQVRIX01BWCsxMjhdOworCWludCBzaXplOworCisJc2l6ZSA9IHNucHJpbnRmKG1l
bnVfYmFja3RpdGxlLCBzaXplb2YobWVudV9iYWNrdGl0bGUpLAorCQkJIiVzIC0gJXMiLCBjb25m
aWdfZmlsZW5hbWUsIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisJaWYgKHNpemUgPj0gc2l6ZW9m
KG1lbnVfYmFja3RpdGxlKSkKKwkJbWVudV9iYWNrdGl0bGVbc2l6ZW9mKG1lbnVfYmFja3RpdGxl
KS0xXSA9ICdcMCc7CisJc2V0X2RpYWxvZ19iYWNrdGl0bGUobWVudV9iYWNrdGl0bGUpOworCisJ
c2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMiLCBjb25maWdf
ZmlsZW5hbWUpOworCWlmIChzaXplID49IHNpemVvZihmaWxlbmFtZSkpCisJCWZpbGVuYW1lW3Np
emVvZihmaWxlbmFtZSktMV0gPSAnXDAnOworfQorCitzdHJ1Y3Qgc3VidGl0bGVfcGFydCB7CisJ
c3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOworCWNvbnN0IGNoYXIgKnRleHQ7Cit9Oworc3RhdGlj
IExJU1RfSEVBRCh0cmFpbCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0
bGVzOworc3RhdGljIHZvaWQgc2V0X3N1YnRpdGxlKHZvaWQpCit7CisJc3RydWN0IHN1YnRpdGxl
X3BhcnQgKnNwOworCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3MsICp0bXA7CisKKwlmb3IgKHBv
cyA9IHN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHRtcCkgeworCQl0bXAgPSBwb3MtPm5l
eHQ7CisJCWZyZWUocG9zKTsKKwl9CisKKwlzdWJ0aXRsZXMgPSBOVUxMOworCWxpc3RfZm9yX2Vh
Y2hfZW50cnkoc3AsICZ0cmFpbCwgZW50cmllcykgeworCQlpZiAoc3AtPnRleHQpIHsKKwkJCWlm
IChwb3MpIHsKKwkJCQlwb3MtPm5leHQgPSB4Y2FsbG9jKDEsIHNpemVvZigqcG9zKSk7CisJCQkJ
cG9zID0gcG9zLT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlzdWJ0aXRsZXMgPSBwb3MgPSB4Y2Fs
bG9jKDEsIHNpemVvZigqcG9zKSk7CisJCQl9CisJCQlwb3MtPnRleHQgPSBzcC0+dGV4dDsKKwkJ
fQorCX0KKworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7Cit9CisKK3N0YXRpYyB2
b2lkIHJlc2V0X3N1YnRpdGxlKHZvaWQpCit7CisJc3RydWN0IHN1YnRpdGxlX2xpc3QgKnBvcywg
KnRtcDsKKworCWZvciAocG9zID0gc3VidGl0bGVzOyBwb3MgIT0gTlVMTDsgcG9zID0gdG1wKSB7
CisJCXRtcCA9IHBvcy0+bmV4dDsKKwkJZnJlZShwb3MpOworCX0KKwlzdWJ0aXRsZXMgPSBOVUxM
OworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7Cit9CisKK3N0cnVjdCBzZWFyY2hf
ZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3QgbWVudSAqKnRhcmdldHM7
CisJaW50ICprZXlzOworfTsKKworc3RhdGljIHZvaWQgdXBkYXRlX3RleHQoY2hhciAqYnVmLCBz
aXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZvaWQgKl9kYXRhKQoreworCXN0cnVjdCBzZWFyY2hf
ZGF0YSAqZGF0YSA9IF9kYXRhOworCXN0cnVjdCBqdW1wX2tleSAqcG9zOworCWludCBrID0gMDsK
KworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBkYXRhLT5oZWFkLCBlbnRyaWVzKSB7CisJCWlm
IChwb3MtPm9mZnNldCA+PSBzdGFydCAmJiBwb3MtPm9mZnNldCA8IGVuZCkgeworCQkJY2hhciBo
ZWFkZXJbNF07CisKKwkJCWlmIChrIDwgSlVNUF9OQikgeworCQkJCWludCBrZXkgPSAnMCcgKyAo
cG9zLT5pbmRleCAlIEpVTVBfTkIpICsgMTsKKworCQkJCXNwcmludGYoaGVhZGVyLCAiKCVjKSIs
IGtleSk7CisJCQkJZGF0YS0+a2V5c1trXSA9IGtleTsKKwkJCQlkYXRhLT50YXJnZXRzW2tdID0g
cG9zLT50YXJnZXQ7CisJCQkJaysrOworCQkJfSBlbHNlIHsKKwkJCQlzcHJpbnRmKGhlYWRlciwg
IiAgICIpOworCQkJfQorCisJCQltZW1jcHkoYnVmICsgcG9zLT5vZmZzZXQsIGhlYWRlciwgc2l6
ZW9mKGhlYWRlcikgLSAxKTsKKwkJfQorCX0KKwlkYXRhLT5rZXlzW2tdID0gMDsKK30KKworc3Rh
dGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsK
KwlzdHJ1Y3QgZ3N0ciByZXM7CisJc3RydWN0IGdzdHIgdGl0bGU7CisJY2hhciAqZGlhbG9nX2lu
cHV0OworCWludCBkcmVzLCB2c2Nyb2xsID0gMCwgaHNjcm9sbCA9IDA7CisJYm9vbCBhZ2FpbjsK
KwlzdHJ1Y3QgZ3N0ciBzdHRleHQ7CisJc3RydWN0IHN1YnRpdGxlX3BhcnQgc3RwYXJ0OworCisJ
dGl0bGUgPSBzdHJfbmV3KCk7CisJc3RyX3ByaW50ZiggJnRpdGxlLCAiRW50ZXIgKHN1YilzdHJp
bmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIgorCQkJICAgICAgIih3aXRoIG9yIHdpdGhvdXQg
XCIlc1wiKSIsIENPTkZJR18pOworCithZ2FpbjoKKwlkaWFsb2dfY2xlYXIoKTsKKwlkcmVzID0g
ZGlhbG9nX2lucHV0Ym94KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiLAorCQkJICAg
ICAgc3RyX2dldCgmdGl0bGUpLAorCQkJICAgICAgMTAsIDc1LCAiIik7CisJc3dpdGNoIChkcmVz
KSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCXNob3dfaGVscHRleHQoIlNlYXJj
aCBDb25maWd1cmF0aW9uIiwgc2VhcmNoX2hlbHApOworCQlnb3RvIGFnYWluOworCWRlZmF1bHQ6
CisJCXN0cl9mcmVlKCZ0aXRsZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzdHJpcCB0aGUgcHJl
Zml4IGlmIG5lY2Vzc2FyeSAqLworCWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7
CisJaWYgKHN0cm5jYXNlY21wKGRpYWxvZ19pbnB1dF9yZXN1bHQsIENPTkZJR18sIHN0cmxlbihD
T05GSUdfKSkgPT0gMCkKKwkJZGlhbG9nX2lucHV0ICs9IHN0cmxlbihDT05GSUdfKTsKKworCXN0
dGV4dCA9IHN0cl9uZXcoKTsKKwlzdHJfcHJpbnRmKCZzdHRleHQsICJTZWFyY2ggKCVzKSIsIGRp
YWxvZ19pbnB1dF9yZXN1bHQpOworCXN0cGFydC50ZXh0ID0gc3RyX2dldCgmc3R0ZXh0KTsKKwls
aXN0X2FkZF90YWlsKCZzdHBhcnQuZW50cmllcywgJnRyYWlsKTsKKworCXN5bV9hcnIgPSBzeW1f
cmVfc2VhcmNoKGRpYWxvZ19pbnB1dCk7CisJZG8geworCQlMSVNUX0hFQUQoaGVhZCk7CisJCXN0
cnVjdCBtZW51ICp0YXJnZXRzW0pVTVBfTkJdOworCQlpbnQga2V5c1tKVU1QX05CICsgMV0sIGk7
CisJCXN0cnVjdCBzZWFyY2hfZGF0YSBkYXRhID0geworCQkJLmhlYWQgPSAmaGVhZCwKKwkJCS50
YXJnZXRzID0gdGFyZ2V0cywKKwkJCS5rZXlzID0ga2V5cywKKwkJfTsKKwkJc3RydWN0IGp1bXBf
a2V5ICpwb3MsICp0bXA7CisKKwkJcmVzID0gZ2V0X3JlbGF0aW9uc19zdHIoc3ltX2FyciwgJmhl
YWQpOworCQlzZXRfc3VidGl0bGUoKTsKKwkJZHJlcyA9IHNob3dfdGV4dGJveF9leHQoIlNlYXJj
aCBSZXN1bHRzIiwgKGNoYXIgKikKKwkJCQkJc3RyX2dldCgmcmVzKSwgMCwgMCwga2V5cywgJnZz
Y3JvbGwsCisJCQkJCSZoc2Nyb2xsLCAmdXBkYXRlX3RleHQsICh2b2lkICopCisJCQkJCSZkYXRh
KTsKKwkJYWdhaW4gPSBmYWxzZTsKKwkJZm9yIChpID0gMDsgaSA8IEpVTVBfTkIgJiYga2V5c1tp
XTsgaSsrKQorCQkJaWYgKGRyZXMgPT0ga2V5c1tpXSkgeworCQkJCWNvbmYodGFyZ2V0c1tpXS0+
cGFyZW50LCB0YXJnZXRzW2ldKTsKKwkJCQlhZ2FpbiA9IHRydWU7CisJCQl9CisJCXN0cl9mcmVl
KCZyZXMpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZoZWFkLCBlbnRy
aWVzKQorCQkJZnJlZShwb3MpOworCX0gd2hpbGUgKGFnYWluKTsKKwlmcmVlKHN5bV9hcnIpOwor
CXN0cl9mcmVlKCZ0aXRsZSk7CisJbGlzdF9kZWwodHJhaWwucHJldik7CisJc3RyX2ZyZWUoJnN0
dGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpCit7
CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qg
bWVudSAqY2hpbGQ7CisJaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOworCXRyaXN0YXRlIHZhbDsK
KwljaGFyIGNoOworCWJvb2wgdmlzaWJsZTsKKworCS8qCisJICogbm90ZTogbWVudV9pc192aXNp
YmxlKCkgaGFzIHNpZGUgZWZmZWN0IHRoYXQgaXQgd2lsbAorCSAqIHJlY2FsYyB0aGUgdmFsdWUg
b2YgdGhlIHN5bWJvbC4KKwkgKi8KKwl2aXNpYmxlID0gbWVudV9pc192aXNpYmxlKG1lbnUpOwor
CWlmIChzaG93X2FsbF9vcHRpb25zICYmICFtZW51X2hhc19wcm9tcHQobWVudSkpCisJCXJldHVy
bjsKKwllbHNlIGlmICghc2hvd19hbGxfb3B0aW9ucyAmJiAhdmlzaWJsZSkKKwkJcmV0dXJuOwor
CisJc3ltID0gbWVudS0+c3ltOworCXByb3AgPSBtZW51LT5wcm9tcHQ7CisJaWYgKCFzeW0pIHsK
KwkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsKKwkJCWNvbnN0IGNoYXIgKnBy
b21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCXN3aXRjaCAocHJvcC0+dHlwZSkgewor
CQkJY2FzZSBQX01FTlU6CisJCQkJY2hpbGRfY291bnQrKzsKKwkJCQlpZiAoc2luZ2xlX21lbnVf
bW9kZSkgeworCQkJCQlpdGVtX21ha2UoIiVzJSpjJXMiLAorCQkJCQkJICBtZW51LT5kYXRhID8g
Ii0tPiIgOiAiKys+IiwKKwkJCQkJCSAgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOworCQkJCX0g
ZWxzZQorCQkJCQlpdGVtX21ha2UoIiAgICUqYyVzICAlcyIsCisJCQkJCQkgIGluZGVudCArIDEs
ICcgJywgcHJvbXB0LAorCQkJCQkJICBtZW51X2lzX2VtcHR5KG1lbnUpID8gIi0tLS0iIDogIi0t
LT4iKTsKKwkJCQlpdGVtX3NldF90YWcoJ20nKTsKKwkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOwor
CQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEpCisJCQkJCWdvdG8gY29uZl9j
aGlsZHM7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQX0NPTU1FTlQ6CisJCQkJaWYgKHByb21wdCkg
eworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UoIiAgICUqYyoqKiAlcyAqKioi
LCBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJ
CQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJ
CQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UoIi0t
LSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOworCQkJCQlpdGVtX3NldF90YWcoJzon
KTsKKwkJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZQorCQkJ
ZG9pbnQgPSAwOworCQlnb3RvIGNvbmZfY2hpbGRzOworCX0KKworCXR5cGUgPSBzeW1fZ2V0X3R5
cGUoc3ltKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN0cnVjdCBzeW1ib2wgKmRl
Zl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQlzdHJ1Y3QgbWVudSAqZGVmX21l
bnUgPSBOVUxMOworCisJCWNoaWxkX2NvdW50Kys7CisJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKG1lbnVfaXNfdmlzaWJsZShj
aGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQorCQkJCWRlZl9tZW51ID0gY2hpbGQ7CisJ
CX0KKworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1faXNf
Y2hhbmdhYmxlKHN5bSkpIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46
CisJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVz
OiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2FzZSBtb2Q6IGNoID0gJ00nOyBicmVhazsKKwkJCQlk
ZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOworCQkJCX0KKwkJCQlpdGVtX21ha2UoIjwlYz4iLCBj
aCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpdGVtX3NldF90YWcoJ3QnKTsKKwkJCWl0ZW1fc2V0
X2RhdGEobWVudSk7CisJCX0gZWxzZSB7CisJCQlpdGVtX21ha2UoIiAgICIpOworCQkJaXRlbV9z
ZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsKKwkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJ
CX0KKworCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBtZW51X2dldF9w
cm9tcHQobWVudSkpOworCQlpZiAodmFsID09IHllcykgeworCQkJaWYgKGRlZl9tZW51KSB7CisJ
CQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsIG1lbnVfZ2V0X3Byb21wdChkZWZfbWVudSkpOworCQkJ
CWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7CisJCQkJaWYgKGRlZl9tZW51LT5saXN0KSB7CisJCQkJ
CWluZGVudCArPSAyOworCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsKKwkJCQkJaW5kZW50IC09
IDI7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1lbnUg
PT0gY3VycmVudF9tZW51KSB7CisJCQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwg
JyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQkJaXRlbV9zZXRfdGFnKCc6Jyk7CisJCQlp
dGVtX3NldF9kYXRhKG1lbnUpOworCQkJZ290byBjb25mX2NoaWxkczsKKwkJfQorCQljaGlsZF9j
b3VudCsrOworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1f
aXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgeworCQkJaXRlbV9tYWtlKCIgICAi
KTsKKwkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJfSBl
bHNlIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQkJaWYgKHN5
bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8g
JyAnIDogJyonKTsKKwkJCQllbHNlCisJCQkJCWl0ZW1fbWFrZSgiLSVjLSIsIHZhbCA9PSBubyA/
ICcgJyA6ICcqJyk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJaXRlbV9zZXRfZGF0YSht
ZW51KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkg
eworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2FzZSBtb2Q6IGNoID0gJ00n
OyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOworCQkJCX0KKwkJCQlpZiAo
c3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCQkJCWlmIChzeW0tPnJldl9kZXAudHJpID09IG1v
ZCkKKwkJCQkJCWl0ZW1fbWFrZSgieyVjfSIsIGNoKTsKKwkJCQkJZWxzZQorCQkJCQkJaXRlbV9t
YWtlKCI8JWM+IiwgY2gpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21ha2UoIi0lYy0iLCBjaCk7
CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wID0gMiArIHN0cmxlbihzeW1fZ2V0X3N0cmluZ192
YWx1ZShzeW0pKTsgLyogKCkgPSAyICovCisJCQkJaXRlbV9tYWtlKCIoJXMpIiwgc3ltX2dldF9z
dHJpbmdfdmFsdWUoc3ltKSk7CisJCQkJdG1wID0gaW5kZW50IC0gdG1wICsgNDsKKwkJCQlpZiAo
dG1wIDwgMCkKKwkJCQkJdG1wID0gMDsKKwkJCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCB0bXAs
ICcgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpLAorCQkJCQkgICAgIChzeW1faGFzX3ZhbHVlKHN5
bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPworCQkJCQkgICAgICIiIDogIiAoTkVXKSIp
OworCQkJCWl0ZW1fc2V0X3RhZygncycpOworCQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJCQkJ
Z290byBjb25mX2NoaWxkczsKKwkJCX0KKwkJfQorCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCBp
bmRlbnQgKyAxLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSwKKwkJCSAgKHN5bV9oYXNfdmFs
dWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/CisJCQkgICIiIDogIiAoTkVXKSIp
OworCQlpZiAobWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgeworCQkJaXRlbV9hZGRfc3Ry
KCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7CisJCQlyZXR1
cm47CisJCX0KKwl9CisKK2NvbmZfY2hpbGRzOgorCWluZGVudCArPSBkb2ludDsKKwlmb3IgKGNo
aWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpCisJCWJ1aWxkX2Nv
bmYoY2hpbGQpOworCWluZGVudCAtPSBkb2ludDsKK30KKworc3RhdGljIHZvaWQgY29uZihzdHJ1
Y3QgbWVudSAqbWVudSwgc3RydWN0IG1lbnUgKmFjdGl2ZV9tZW51KQoreworCXN0cnVjdCBtZW51
ICpzdWJtZW51OworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsK
KwlzdHJ1Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWlu
dCByZXM7CisJaW50IHNfc2Nyb2xsID0gMDsKKworCWlmIChtZW51ICE9ICZyb290bWVudSkKKwkJ
c3RwYXJ0LnRleHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJZWxzZQorCQlzdHBhcnQudGV4
dCA9IE5VTEw7CisJbGlzdF9hZGRfdGFpbCgmc3RwYXJ0LmVudHJpZXMsICZ0cmFpbCk7CisKKwl3
aGlsZSAoMSkgeworCQlpdGVtX3Jlc2V0KCk7CisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWJ1
aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJCQlicmVhazsKKwkJc2V0X3N1
YnRpdGxlKCk7CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFsb2dfbWVudShwcm9tcHQg
PyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKKwkJCQkgIG1lbnVfaW5zdHJ1Y3Rpb25zLAorCQkJCSAg
YWN0aXZlX21lbnUsICZzX3Njcm9sbCk7CisJCWlmIChyZXMgPT0gMSB8fCByZXMgPT0gS0VZX0VT
QyB8fCByZXMgPT0gLUVSUkRJU1BMQVlUT09TTUFMTCkKKwkJCWJyZWFrOworCQlpZiAoaXRlbV9j
b3VudCgpICE9IDApIHsKKwkJCWlmICghaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCgpKQorCQkJCWNv
bnRpbnVlOworCQkJaWYgKCFpdGVtX3RhZygpKQorCQkJCWNvbnRpbnVlOworCQl9CisJCXN1Ym1l
bnUgPSBpdGVtX2RhdGEoKTsKKwkJYWN0aXZlX21lbnUgPSBpdGVtX2RhdGEoKTsKKwkJaWYgKHN1
Ym1lbnUpCisJCQlzeW0gPSBzdWJtZW51LT5zeW07CisJCWVsc2UKKwkJCXN5bSA9IE5VTEw7CisK
KwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJc3dpdGNoIChpdGVtX3RhZygpKSB7CisJ
CQljYXNlICdtJzoKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkKKwkJCQkJc3VibWVudS0+ZGF0
YSA9ICh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKKwkJCQllbHNlCisJCQkJCWNvbmYo
c3VibWVudSwgTlVMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJCQlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMpCisJCQkJ
CWNvbmZfY2hvaWNlKHN1Ym1lbnUpOworCQkJCWVsc2UgaWYgKHN1Ym1lbnUtPnByb21wdC0+dHlw
ZSA9PSBQX01FTlUpCisJCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7CisJCQkJYnJlYWs7CisJCQlj
YXNlICdzJzoKKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
CWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoc3ltKQorCQkJCXNob3dfaGVscChzdWJtZW51KTsK
KwkJCWVsc2UgeworCQkJCXJlc2V0X3N1YnRpdGxlKCk7CisJCQkJc2hvd19oZWxwdGV4dCgiUkVB
RE1FIiwgbWNvbmZfcmVhZG1lKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlyZXNl
dF9zdWJ0aXRsZSgpOworCQkJY29uZl9zYXZlKCk7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJ
cmVzZXRfc3VidGl0bGUoKTsKKwkJCWNvbmZfbG9hZCgpOworCQkJYnJlYWs7CisJCWNhc2UgNToK
KwkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7CisJCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCB5ZXMpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1
ZShzeW0sIG1vZCkpCisJCQkJCXNob3dfdGV4dGJveChOVUxMLCBzZXRtb2RfdGV4dCwgNiwgNzQp
OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKQor
CQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7CisJCQlicmVhazsKKwkJY2FzZSA3
OgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShz
eW0sIG1vZCk7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0Jykp
CisJCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOworCQkJZWxzZSBpZiAoaXRlbV9p
c190YWcoJ20nKSkKKwkJCQljb25mKHN1Ym1lbnUsIE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2Ug
OToKKwkJCXNlYXJjaF9jb25mKCk7CisJCQlicmVhazsKKwkJY2FzZSAxMDoKKwkJCXNob3dfYWxs
X29wdGlvbnMgPSAhc2hvd19hbGxfb3B0aW9uczsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbGlz
dF9kZWwodHJhaWwucHJldik7Cit9CisKK3N0YXRpYyBpbnQgc2hvd190ZXh0Ym94X2V4dChjb25z
dCBjaGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIsIGludCBjLCBpbnQKKwkJCSAgICAqa2V5
cywgaW50ICp2c2Nyb2xsLCBpbnQgKmhzY3JvbGwsIHVwZGF0ZV90ZXh0X2ZuCisJCQkgICAgdXBk
YXRlX3RleHQsIHZvaWQgKmRhdGEpCit7CisJZGlhbG9nX2NsZWFyKCk7CisJcmV0dXJuIGRpYWxv
Z190ZXh0Ym94KHRpdGxlLCB0ZXh0LCByLCBjLCBrZXlzLCB2c2Nyb2xsLCBoc2Nyb2xsLAorCQkJ
ICAgICAgdXBkYXRlX3RleHQsIGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBzaG93X3RleHRib3go
Y29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCByLCBpbnQgYykKK3sKKwlz
aG93X3RleHRib3hfZXh0KHRpdGxlLCAoY2hhciAqKSB0ZXh0LCByLCBjLCAoaW50IFtdKSB7MH0s
IE5VTEwsIE5VTEwsCisJCQkgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaGVs
cHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQpCit7CisJc2hvd190ZXh0
Ym94KHRpdGxlLCB0ZXh0LCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlX2Nh
bGxiYWNrKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKHNhdmVfYW5kX2V4aXQpIHsKKwkJaWYgKCFz
aWxlbnQpCisJCQlwcmludGYoIiVzIiwgcyk7CisJfSBlbHNlIHsKKwkJc2hvd190ZXh0Ym94KE5V
TEwsIHMsIDYsIDYwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaGVscChzdHJ1Y3QgbWVu
dSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygpOworCisJaGVscC5tYXhf
d2lkdGggPSBnZXRtYXh4KHN0ZHNjcikgLSAxMDsKKwltZW51X2dldF9leHRfaGVscChtZW51LCAm
aGVscCk7CisKKwlzaG93X2hlbHB0ZXh0KG1lbnVfZ2V0X3Byb21wdChtZW51KSwgc3RyX2dldCgm
aGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsKK30KKworc3RhdGljIHZvaWQgY29uZl9jaG9pY2Uo
c3RydWN0IG1lbnUgKm1lbnUpCit7CisJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJv
bXB0KG1lbnUpOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlzdHJ1Y3Qgc3ltYm9sICphY3RpdmU7
CisKKwlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pOworCXdoaWxlICgx
KSB7CisJCWludCByZXM7CisJCWludCBzZWxlY3RlZDsKKwkJaXRlbV9yZXNldCgpOworCisJCWN1
cnJlbnRfbWVudSA9IG1lbnU7CisJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKCFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQorCQkJ
CWNvbnRpbnVlOworCQkJaWYgKGNoaWxkLT5zeW0pCisJCQkJaXRlbV9tYWtlKCIlcyIsIG1lbnVf
Z2V0X3Byb21wdChjaGlsZCkpOworCQkJZWxzZSB7CisJCQkJaXRlbV9tYWtlKCIqKiogJXMgKioq
IiwgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQkJaXRlbV9zZXRfdGFnKCc6Jyk7CisJCQl9
CisJCQlpdGVtX3NldF9kYXRhKGNoaWxkKTsKKwkJCWlmIChjaGlsZC0+c3ltID09IGFjdGl2ZSkK
KwkJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKKwkJCWlmIChjaGlsZC0+c3ltID09IHN5bV9nZXRf
Y2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCisJCQkJaXRlbV9zZXRfdGFnKCdYJyk7CisJCX0KKwkJ
ZGlhbG9nX2NsZWFyKCk7CisJCXJlcyA9IGRpYWxvZ19jaGVja2xpc3QocHJvbXB0ID8gcHJvbXB0
IDogIk1haW4gTWVudSIsCisJCQkJCXJhZGlvbGlzdF9pbnN0cnVjdGlvbnMsCisJCQkJCU1FTlVC
T1hfSEVJR1RIX01JTiwKKwkJCQkJTUVOVUJPWF9XSURUSF9NSU4sCisJCQkJCUNIRUNLTElTVF9I
RUlHVEhfTUlOKTsKKwkJc2VsZWN0ZWQgPSBpdGVtX2FjdGl2YXRlX3NlbGVjdGVkKCk7CisJCXN3
aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmIChzZWxlY3RlZCkgeworCQkJCWNoaWxkID0g
aXRlbV9kYXRhKCk7CisJCQkJaWYgKCFjaGlsZC0+c3ltKQorCQkJCQlicmVhazsKKworCQkJCXN5
bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwgeWVzKTsKKwkJCX0KKwkJCXJldHVybjsK
KwkJY2FzZSAxOgorCQkJaWYgKHNlbGVjdGVkKSB7CisJCQkJY2hpbGQgPSBpdGVtX2RhdGEoKTsK
KwkJCQlzaG93X2hlbHAoY2hpbGQpOworCQkJCWFjdGl2ZSA9IGNoaWxkLT5zeW07CisJCQl9IGVs
c2UKKwkJCQlzaG93X2hlbHAobWVudSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJ
cmV0dXJuOworCQljYXNlIC1FUlJESVNQTEFZVE9PU01BTEw6CisJCQlyZXR1cm47CisJCX0KKwl9
Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KQoreworCWNv
bnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKworCXdoaWxlICgxKSB7
CisJCWludCByZXM7CisJCWNvbnN0IGNoYXIgKmhlYWRpbmc7CisKKwkJc3dpdGNoIChzeW1fZ2V0
X3R5cGUobWVudS0+c3ltKSkgeworCQljYXNlIFNfSU5UOgorCQkJaGVhZGluZyA9IGlucHV0Ym94
X2luc3RydWN0aW9uc19pbnQ7CisJCQlicmVhazsKKwkJY2FzZSBTX0hFWDoKKwkJCWhlYWRpbmcg
PSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4OworCQkJYnJlYWs7CisJCWNhc2UgU19TVFJJTkc6
CisJCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsKKwkJCWJyZWFrOwor
CQlkZWZhdWx0OgorCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBtY29uZiBlcnJvciEiOworCQl9CisJ
CWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFsb2dfaW5wdXRib3gocHJvbXB0ID8gcHJvbXB0
IDogIk1haW4gTWVudSIsCisJCQkJICAgICAgaGVhZGluZywgMTAsIDc1LAorCQkJCSAgICAgIHN5
bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkpOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNl
IDA6CisJCQlpZiAoc3ltX3NldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltLCBkaWFsb2dfaW5wdXRf
cmVzdWx0KSkKKwkJCQlyZXR1cm47CisJCQlzaG93X3RleHRib3goTlVMTCwgIllvdSBoYXZlIG1h
ZGUgYW4gaW52YWxpZCBlbnRyeS4iLCA1LCA0Myk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJ
c2hvd19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VTQzoKKwkJCXJldHVybjsK
KwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpCit7CisKKwl3aGlsZSAo
MSkgeworCQlpbnQgcmVzOworCQlkaWFsb2dfY2xlYXIoKTsKKwkJcmVzID0gZGlhbG9nX2lucHV0
Ym94KE5VTEwsIGxvYWRfY29uZmlnX3RleHQsCisJCQkJICAgICAgMTEsIDU1LCBmaWxlbmFtZSk7
CisJCXN3aXRjaChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0
WzBdKQorCQkJCXJldHVybjsKKwkJCWlmICghY29uZl9yZWFkKGRpYWxvZ19pbnB1dF9yZXN1bHQp
KSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKKwkJCQlz
eW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlzaG93X3RleHRi
b3goTlVMTCwgIkZpbGUgZG9lcyBub3QgZXhpc3QhIiwgNSwgMzgpOworCQkJYnJlYWs7CisJCWNh
c2UgMToKKwkJCXNob3dfaGVscHRleHQoIkxvYWQgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iLCBs
b2FkX2NvbmZpZ19oZWxwKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlyZXR1cm47
CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKQoreworCXdoaWxlICgx
KSB7CisJCWludCByZXM7CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFsb2dfaW5wdXRi
b3goTlVMTCwgc2F2ZV9jb25maWdfdGV4dCwKKwkJCQkgICAgICAxMSwgNTUsIGZpbGVuYW1lKTsK
KwkJc3dpdGNoKHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoIWRpYWxvZ19pbnB1dF9yZXN1bHRb
MF0pCisJCQkJcmV0dXJuOworCQkJaWYgKCFjb25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1bHQp
KSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKKwkJCQly
ZXR1cm47CisJCQl9CisJCQlzaG93X3RleHRib3goTlVMTCwgIkNhbid0IGNyZWF0ZSBmaWxlISIs
IDUsIDYwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X2hlbHB0ZXh0KCJTYXZlIEFs
dGVybmF0ZSBDb25maWd1cmF0aW9uIiwgc2F2ZV9jb25maWdfaGVscCk7CisJCQlicmVhazsKKwkJ
Y2FzZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IGhhbmRs
ZV9leGl0KHZvaWQpCit7CisJaW50IHJlczsKKworCXNhdmVfYW5kX2V4aXQgPSAxOworCXJlc2V0
X3N1YnRpdGxlKCk7CisJZGlhbG9nX2NsZWFyKCk7CisJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkK
KwkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsCisJCQkJICAgIkRvIHlvdSB3aXNoIHRvIHNhdmUg
eW91ciBuZXcgY29uZmlndXJhdGlvbj9cbiIKKwkJCQkgICAgICIoUHJlc3MgPEVTQz48RVNDPiB0
byBjb250aW51ZSBrZXJuZWwgY29uZmlndXJhdGlvbi4pIiwKKwkJCQkgICA2LCA2MCk7CisJZWxz
ZQorCQlyZXMgPSAtMTsKKworCWVuZF9kaWFsb2coc2F2ZWRfeCwgc2F2ZWRfeSk7CisKKwlzd2l0
Y2ggKHJlcykgeworCWNhc2UgMDoKKwkJaWYgKGNvbmZfd3JpdGUoZmlsZW5hbWUpKSB7CisJCQlm
cHJpbnRmKHN0ZGVyciwgIlxuXG4iCisJCQkJCSAgIkVycm9yIHdoaWxlIHdyaXRpbmcgb2YgdGhl
IGNvbmZpZ3VyYXRpb24uXG4iCisJCQkJCSAgIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdl
cmUgTk9UIHNhdmVkLiIKKwkJCQkJICAiXG5cbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJY29u
Zl93cml0ZV9hdXRvY29uZigwKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAtMToKKwkJ
aWYgKCFzaWxlbnQpCisJCQlwcmludGYoIlxuXG4iCisJCQkJICIqKiogRW5kIG9mIHRoZSBjb25m
aWd1cmF0aW9uLlxuIgorCQkJCSAiKioqIEV4ZWN1dGUgJ21ha2UnIHRvIHN0YXJ0IHRoZSBidWls
ZCBvciB0cnkgJ21ha2UgaGVscCcuIgorCQkJCSAiXG5cbiIpOworCQlyZXMgPSAwOworCQlicmVh
azsKKwlkZWZhdWx0OgorCQlpZiAoIXNpbGVudCkKKwkJCWZwcmludGYoc3RkZXJyLCAiXG5cbiIK
KwkJCQkJICAiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIgorCQkJ
CQkgICJcblxuIik7CisJCWlmIChyZXMgIT0gS0VZX0VTQykKKwkJCXJlcyA9IDA7CisJfQorCisJ
cmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgc2lnX2hhbmRsZXIoaW50IHNpZ25vKQorewor
CWV4aXQoaGFuZGxlX2V4aXQoKSk7Cit9CisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQor
eworCWNoYXIgKm1vZGU7CisJaW50IHJlczsKKworCXNpZ25hbChTSUdJTlQsIHNpZ19oYW5kbGVy
KTsKKworCWlmIChhYyA+IDEgJiYgc3RyY21wKGF2WzFdLCAiLXMiKSA9PSAwKSB7CisJCXNpbGVu
dCA9IDE7CisJCS8qIFNpbGVuY2UgY29uZl9yZWFkKCkgdW50aWwgdGhlIHJlYWwgY2FsbGJhY2sg
aXMgc2V0IHVwICovCisJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7CisJCWF2Kys7
CisJfQorCWNvbmZfcGFyc2UoYXZbMV0pOworCWNvbmZfcmVhZChOVUxMKTsKKworCW1vZGUgPSBn
ZXRlbnYoIk1FTlVDT05GSUdfTU9ERSIpOworCWlmIChtb2RlKSB7CisJCWlmICghc3RyY2FzZWNt
cChtb2RlLCAic2luZ2xlX21lbnUiKSkKKwkJCXNpbmdsZV9tZW51X21vZGUgPSAxOworCX0KKwor
CWlmIChpbml0X2RpYWxvZyhOVUxMKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIllvdXIgZGlzcGxh
eSBpcyB0b28gc21hbGwgdG8gcnVuIE1lbnVjb25maWchXG4iKTsKKwkJZnByaW50ZihzdGRlcnIs
ICJJdCBtdXN0IGJlIGF0IGxlYXN0IDE5IGxpbmVzIGJ5IDgwIGNvbHVtbnMuXG4iKTsKKwkJcmV0
dXJuIDE7CisJfQorCisJc2V0X2NvbmZpZ19maWxlbmFtZShjb25mX2dldF9jb25maWduYW1lKCkp
OworCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soY29uZl9tZXNzYWdlX2NhbGxiYWNrKTsKKwlk
byB7CisJCWNvbmYoJnJvb3RtZW51LCBOVUxMKTsKKwkJcmVzID0gaGFuZGxlX2V4aXQoKTsKKwl9
IHdoaWxlIChyZXMgPT0gS0VZX0VTQyk7CisKKwlyZXR1cm4gcmVzOworfQpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMgYi9zdXBwb3J0L2tjb25maWcubmV3L21lbnUuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZDlkMTY0NjkKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L21lbnUuYwpAQCAtMCwwICsxLDg2NyBAQAorLy8g
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUg
PGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworc3RhdGljIGNvbnN0IGNoYXIg
bm9oZWxwX3RleHRbXSA9ICJUaGVyZSBpcyBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRp
b24uIjsKKworc3RydWN0IG1lbnUgcm9vdG1lbnU7CitzdGF0aWMgc3RydWN0IG1lbnUgKipsYXN0
X2VudHJ5X3B0cjsKKworc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsKK3N0cnVjdCBmaWxlICpjdXJy
ZW50X2ZpbGU7CisKK3ZvaWQgbWVudV93YXJuKHN0cnVjdCBtZW51ICptZW51LCBjb25zdCBjaGFy
ICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCWZwcmlu
dGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGlu
ZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4i
KTsKKwl2YV9lbmQoYXApOworfQorCitzdGF0aWMgdm9pZCBwcm9wX3dhcm4oc3RydWN0IHByb3Bl
cnR5ICpwcm9wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0
YXJ0KGFwLCBmbXQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgcHJvcC0+
ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOwor
CWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIF9tZW51X2lu
aXQodm9pZCkKK3sKKwljdXJyZW50X2VudHJ5ID0gY3VycmVudF9tZW51ID0gJnJvb3RtZW51Owor
CWxhc3RfZW50cnlfcHRyID0gJnJvb3RtZW51Lmxpc3Q7Cit9CisKK3ZvaWQgbWVudV9hZGRfZW50
cnkoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBtZW51ICptZW51OworCisJbWVudSA9
IHhtYWxsb2Moc2l6ZW9mKCptZW51KSk7CisJbWVtc2V0KG1lbnUsIDAsIHNpemVvZigqbWVudSkp
OworCW1lbnUtPnN5bSA9IHN5bTsKKwltZW51LT5wYXJlbnQgPSBjdXJyZW50X21lbnU7CisJbWVu
dS0+ZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwltZW51LT5saW5lbm8gPSB6Y29uZl9saW5lbm8oKTsK
KworCSpsYXN0X2VudHJ5X3B0ciA9IG1lbnU7CisJbGFzdF9lbnRyeV9wdHIgPSAmbWVudS0+bmV4
dDsKKwljdXJyZW50X2VudHJ5ID0gbWVudTsKKwlpZiAoc3ltKQorCQltZW51X2FkZF9zeW1ib2wo
UF9TWU1CT0wsIHN5bSwgTlVMTCk7Cit9CisKK3N0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZv
aWQpCit7CisJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9lbnRyeS0+bGlzdDsKKwlyZXR1cm4g
Y3VycmVudF9tZW51ID0gY3VycmVudF9lbnRyeTsKK30KKwordm9pZCBtZW51X2VuZF9tZW51KHZv
aWQpCit7CisJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9tZW51LT5uZXh0OworCWN1cnJlbnRf
bWVudSA9IGN1cnJlbnRfbWVudS0+cGFyZW50OworfQorCisvKgorICogUmV3cml0ZXMgJ20nIHRv
ICdtJyAmJiBNT0RVTEVTLCBzbyB0aGF0IGl0IGV2YWx1YXRlcyB0byAnbicgd2hlbiBydW5uaW5n
CisgKiB3aXRob3V0IG1vZHVsZXMKKyAqLworc3RhdGljIHN0cnVjdCBleHByICpyZXdyaXRlX20o
c3RydWN0IGV4cHIgKmUpCit7CisJaWYgKCFlKQorCQlyZXR1cm4gZTsKKworCXN3aXRjaCAoZS0+
dHlwZSkgeworCWNhc2UgRV9OT1Q6CisJCWUtPmxlZnQuZXhwciA9IHJld3JpdGVfbShlLT5sZWZ0
LmV4cHIpOworCQlicmVhazsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJZS0+bGVmdC5l
eHByID0gcmV3cml0ZV9tKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSByZXdyaXRl
X20oZS0+cmlnaHQuZXhwcik7CisJCWJyZWFrOworCWNhc2UgRV9TWU1CT0w6CisJCS8qIGNoYW5n
ZSAnbScgaW50byAnbScgJiYgTU9EVUxFUyAqLworCQlpZiAoZS0+bGVmdC5zeW0gPT0gJnN5bWJv
bF9tb2QpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19hbmQoZSwgZXhwcl9hbGxvY19zeW1ib2wobW9k
dWxlc19zeW0pKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBl
OworfQorCit2b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVwKQoreworCWN1cnJlbnRf
ZW50cnktPmRlcCA9IGV4cHJfYWxsb2NfYW5kKGN1cnJlbnRfZW50cnktPmRlcCwgZGVwKTsKK30K
Kwordm9pZCBtZW51X3NldF90eXBlKGludCB0eXBlKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9
IGN1cnJlbnRfZW50cnktPnN5bTsKKworCWlmIChzeW0tPnR5cGUgPT0gdHlwZSkKKwkJcmV0dXJu
OworCWlmIChzeW0tPnR5cGUgPT0gU19VTktOT1dOKSB7CisJCXN5bS0+dHlwZSA9IHR5cGU7CisJ
CXJldHVybjsKKwl9CisJbWVudV93YXJuKGN1cnJlbnRfZW50cnksCisJCSJpZ25vcmluZyB0eXBl
IHJlZGVmaW5pdGlvbiBvZiAnJXMnIGZyb20gJyVzJyB0byAnJXMnIiwKKwkJc3ltLT5uYW1lID8g
c3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpLCBzeW1f
dHlwZV9uYW1lKHR5cGUpKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRf
cHJvcChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHByICpleHBy
LCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IHByb3BfYWxs
b2ModHlwZSwgY3VycmVudF9lbnRyeS0+c3ltKTsKKworCXByb3AtPm1lbnUgPSBjdXJyZW50X2Vu
dHJ5OworCXByb3AtPmV4cHIgPSBleHByOworCXByb3AtPnZpc2libGUuZXhwciA9IGRlcDsKKwor
CWlmIChwcm9tcHQpIHsKKwkJaWYgKGlzc3BhY2UoKnByb21wdCkpIHsKKwkJCXByb3Bfd2Fybihw
cm9wLCAibGVhZGluZyB3aGl0ZXNwYWNlIGlnbm9yZWQiKTsKKwkJCXdoaWxlIChpc3NwYWNlKCpw
cm9tcHQpKQorCQkJCXByb21wdCsrOworCQl9CisJCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQg
JiYgY3VycmVudF9lbnRyeSAhPSAmcm9vdG1lbnUpCisJCQlwcm9wX3dhcm4ocHJvcCwgInByb21w
dCByZWRlZmluZWQiKTsKKworCQkvKiBBcHBseSBhbGwgdXBwZXIgbWVudXMnIHZpc2liaWxpdGll
cyB0byBhY3R1YWwgcHJvbXB0cy4gKi8KKwkJaWYodHlwZSA9PSBQX1BST01QVCkgeworCQkJc3Ry
dWN0IG1lbnUgKm1lbnUgPSBjdXJyZW50X2VudHJ5OworCisJCQl3aGlsZSAoKG1lbnUgPSBtZW51
LT5wYXJlbnQpICE9IE5VTEwpIHsKKwkJCQlzdHJ1Y3QgZXhwciAqZHVwX2V4cHI7CisKKwkJCQlp
ZiAoIW1lbnUtPnZpc2liaWxpdHkpCisJCQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJICogRG8g
bm90IGFkZCBhIHJlZmVyZW5jZSB0byB0aGUKKwkJCQkgKiBtZW51J3MgdmlzaWJpbGl0eSBleHBy
ZXNzaW9uIGJ1dAorCQkJCSAqIHVzZSBhIGNvcHkgb2YgaXQuICBPdGhlcndpc2UgdGhlCisJCQkJ
ICogZXhwcmVzc2lvbiByZWR1Y3Rpb24gZnVuY3Rpb25zCisJCQkJICogd2lsbCBtb2RpZnkgZXhw
cmVzc2lvbnMgdGhhdCBoYXZlCisJCQkJICogbXVsdGlwbGUgcmVmZXJlbmNlcyB3aGljaCBjYW4K
KwkJCQkgKiBjYXVzZSB1bndhbnRlZCBzaWRlIGVmZmVjdHMuCisJCQkJICovCisJCQkJZHVwX2V4
cHIgPSBleHByX2NvcHkobWVudS0+dmlzaWJpbGl0eSk7CisKKwkJCQlwcm9wLT52aXNpYmxlLmV4
cHIKKwkJCQkJPSBleHByX2FsbG9jX2FuZChwcm9wLT52aXNpYmxlLmV4cHIsCisJCQkJCQkJIGR1
cF9leHByKTsKKwkJCX0KKwkJfQorCisJCWN1cnJlbnRfZW50cnktPnByb21wdCA9IHByb3A7CisJ
fQorCXByb3AtPnRleHQgPSBwcm9tcHQ7CisKKwlyZXR1cm4gcHJvcDsKK30KKworc3RydWN0IHBy
b3BlcnR5ICptZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0
LCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCXJldHVybiBtZW51X2FkZF9wcm9wKHR5cGUsIHByb21w
dCwgTlVMTCwgZGVwKTsKK30KKwordm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVjdCBleHBy
ICpleHByKQoreworCWN1cnJlbnRfZW50cnktPnZpc2liaWxpdHkgPSBleHByX2FsbG9jX2FuZChj
dXJyZW50X2VudHJ5LT52aXNpYmlsaXR5LAorCSAgICBleHByKTsKK30KKwordm9pZCBtZW51X2Fk
ZF9leHByKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBleHByICpleHByLCBzdHJ1Y3QgZXhw
ciAqZGVwKQoreworCW1lbnVfYWRkX3Byb3AodHlwZSwgTlVMTCwgZXhwciwgZGVwKTsKK30KKwor
dm9pZCBtZW51X2FkZF9zeW1ib2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAq
c3ltLCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCW1lbnVfYWRkX3Byb3AodHlwZSwgTlVMTCwgZXhw
cl9hbGxvY19zeW1ib2woc3ltKSwgZGVwKTsKK30KKwordm9pZCBtZW51X2FkZF9vcHRpb25fbW9k
dWxlcyh2b2lkKQoreworCWlmIChtb2R1bGVzX3N5bSkKKwkJemNvbmZfZXJyb3IoInN5bWJvbCAn
JXMnIHJlZGVmaW5lcyBvcHRpb24gJ21vZHVsZXMnIGFscmVhZHkgZGVmaW5lZCBieSBzeW1ib2wg
JyVzJyIsCisJCQkgICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lLCBtb2R1bGVzX3N5bS0+bmFt
ZSk7CisJbW9kdWxlc19zeW0gPSBjdXJyZW50X2VudHJ5LT5zeW07Cit9CisKK3ZvaWQgbWVudV9h
ZGRfb3B0aW9uX2RlZmNvbmZpZ19saXN0KHZvaWQpCit7CisJaWYgKCFzeW1fZGVmY29uZmlnX2xp
c3QpCisJCXN5bV9kZWZjb25maWdfbGlzdCA9IGN1cnJlbnRfZW50cnktPnN5bTsKKwllbHNlIGlm
IChzeW1fZGVmY29uZmlnX2xpc3QgIT0gY3VycmVudF9lbnRyeS0+c3ltKQorCQl6Y29uZl9lcnJv
cigidHJ5aW5nIHRvIHJlZGVmaW5lIGRlZmNvbmZpZyBzeW1ib2wiKTsKKwlzeW1fZGVmY29uZmln
X2xpc3QtPmZsYWdzIHw9IFNZTUJPTF9OT19XUklURTsKK30KKwordm9pZCBtZW51X2FkZF9vcHRp
b25fYWxsbm9jb25maWdfeSh2b2lkKQoreworCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0g
U1lNQk9MX0FMTE5PQ09ORklHX1k7Cit9CisKK3N0YXRpYyBpbnQgbWVudV92YWxpZGF0ZV9udW1i
ZXIoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgc3ltYm9sICpzeW0yKQoreworCXJldHVybiBz
eW0yLT50eXBlID09IFNfSU5UIHx8IHN5bTItPnR5cGUgPT0gU19IRVggfHwKKwkgICAgICAgKHN5
bTItPnR5cGUgPT0gU19VTktOT1dOICYmIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzeW0yLT5uYW1l
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHN5bV9jaGVja19wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkK
K3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltMjsKKwljaGFy
ICp1c2U7CisKKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0
KSB7CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfREVGQVVMVDoKKwkJCWlmICgo
c3ltLT50eXBlID09IFNfU1RSSU5HIHx8IHN5bS0+dHlwZSA9PSBTX0lOVCB8fCBzeW0tPnR5cGUg
PT0gU19IRVgpICYmCisJCQkgICAgcHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCQlw
cm9wX3dhcm4ocHJvcCwKKwkJCQkgICAgImRlZmF1bHQgZm9yIGNvbmZpZyBzeW1ib2wgJyVzJyIK
KwkJCQkgICAgIiBtdXN0IGJlIGEgc2luZ2xlIHN5bWJvbCIsIHN5bS0+bmFtZSk7CisJCQlpZiAo
cHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCQlicmVhazsKKwkJCXN5bTIgPSBwcm9w
X2dldF9zeW1ib2wocHJvcCk7CisJCQlpZiAoc3ltLT50eXBlID09IFNfSEVYIHx8IHN5bS0+dHlw
ZSA9PSBTX0lOVCkgeworCQkJCWlmICghbWVudV92YWxpZGF0ZV9udW1iZXIoc3ltLCBzeW0yKSkK
KwkJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJCSAgICAiJyVzJzogbnVtYmVyIGlzIGludmFsaWQi
LAorCQkJCQkgICAgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkp
IHsKKwkJCQlzdHJ1Y3QgcHJvcGVydHkgKmNob2ljZV9wcm9wID0KKwkJCQkJc3ltX2dldF9jaG9p
Y2VfcHJvcChzeW0yKTsKKworCQkJCWlmICghY2hvaWNlX3Byb3AgfHwKKwkJCQkgICAgcHJvcF9n
ZXRfc3ltYm9sKGNob2ljZV9wcm9wKSAhPSBzeW0pCisJCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJ
CQkJICAiY2hvaWNlIGRlZmF1bHQgc3ltYm9sICclcycgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUg
Y2hvaWNlIiwKKwkJCQkJCSAgc3ltMi0+bmFtZSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBQ
X1NFTEVDVDoKKwkJY2FzZSBQX0lNUExZOgorCQkJdXNlID0gcHJvcC0+dHlwZSA9PSBQX1NFTEVD
VCA/ICJzZWxlY3QiIDogImltcGx5IjsKKwkJCXN5bTIgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7
CisJCQlpZiAoc3ltLT50eXBlICE9IFNfQk9PTEVBTiAmJiBzeW0tPnR5cGUgIT0gU19UUklTVEFU
RSkKKwkJCQlwcm9wX3dhcm4ocHJvcCwKKwkJCQkgICAgImNvbmZpZyBzeW1ib2wgJyVzJyB1c2Vz
ICVzLCBidXQgaXMgIgorCQkJCSAgICAibm90IGJvb2wgb3IgdHJpc3RhdGUiLCBzeW0tPm5hbWUs
IHVzZSk7CisJCQllbHNlIGlmIChzeW0yLT50eXBlICE9IFNfVU5LTk9XTiAmJgorCQkJCSBzeW0y
LT50eXBlICE9IFNfQk9PTEVBTiAmJgorCQkJCSBzeW0yLT50eXBlICE9IFNfVFJJU1RBVEUpCisJ
CQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICInJXMnIGhhcyB3cm9uZyB0eXBlLiAnJXMnIG9u
bHkgIgorCQkJCSAgICAiYWNjZXB0IGFyZ3VtZW50cyBvZiBib29sIGFuZCAiCisJCQkJICAgICJ0
cmlzdGF0ZSB0eXBlIiwgc3ltMi0+bmFtZSwgdXNlKTsKKwkJCWJyZWFrOworCQljYXNlIFBfUkFO
R0U6CisJCQlpZiAoc3ltLT50eXBlICE9IFNfSU5UICYmIHN5bS0+dHlwZSAhPSBTX0hFWCkKKwkJ
CQlwcm9wX3dhcm4ocHJvcCwgInJhbmdlIGlzIG9ubHkgYWxsb3dlZCAiCisJCQkJCQkiZm9yIGlu
dCBvciBoZXggc3ltYm9scyIpOworCQkJaWYgKCFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHBy
b3AtPmV4cHItPmxlZnQuc3ltKSB8fAorCQkJICAgICFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0s
IHByb3AtPmV4cHItPnJpZ2h0LnN5bSkpCisJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBp
bnZhbGlkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCX0KK30KKwordm9p
ZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQpCit7CisJc3RydWN0IG1lbnUgKm1l
bnUsICpsYXN0X21lbnU7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAq
cHJvcDsKKwlzdHJ1Y3QgZXhwciAqcGFyZW50ZGVwLCAqYmFzZWRlcCwgKmRlcCwgKmRlcDIsICoq
ZXA7CisKKwlzeW0gPSBwYXJlbnQtPnN5bTsKKwlpZiAocGFyZW50LT5saXN0KSB7CisJCS8qCisJ
CSAqIFRoaXMgbWVudSBub2RlIGhhcyBjaGlsZHJlbi4gV2UgKHJlY3Vyc2l2ZWx5KSBwcm9jZXNz
IHRoZW0KKwkJICogYW5kIHByb3BhZ2F0ZSBwYXJlbnQgZGVwZW5kZW5jaWVzIGJlZm9yZSBtb3Zp
bmcgb24uCisJCSAqLworCisJCWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQlp
ZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgeworCQkJCS8qIGZpbmQgdGhlIGZpcnN0IGNob2lj
ZSB2YWx1ZSB0byBmaW5kIG91dCBjaG9pY2UgdHlwZSAqLworCQkJCWN1cnJlbnRfZW50cnkgPSBw
YXJlbnQ7CisJCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+
bmV4dCkgeworCQkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1VOS05P
V04pIHsKKwkJCQkJCW1lbnVfc2V0X3R5cGUobWVudS0+c3ltLT50eXBlKTsKKwkJCQkJCWJyZWFr
OworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJLyogc2V0IHRoZSB0eXBlIG9mIHRoZSByZW1haW5p
bmcgY2hvaWNlIHZhbHVlcyAqLworCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBt
ZW51ID0gbWVudS0+bmV4dCkgeworCQkJCWN1cnJlbnRfZW50cnkgPSBtZW51OworCQkJCWlmICht
ZW51LT5zeW0gJiYgbWVudS0+c3ltLT50eXBlID09IFNfVU5LTk9XTikKKwkJCQkJbWVudV9zZXRf
dHlwZShzeW0tPnR5cGUpOworCQkJfQorCisJCQkvKgorCQkJICogVXNlIHRoZSBjaG9pY2UgaXRz
ZWxmIGFzIHRoZSBwYXJlbnQgZGVwZW5kZW5jeSBvZgorCQkJICogdGhlIGNvbnRhaW5lZCBpdGVt
cy4gVGhpcyB0dXJucyB0aGUgbW9kZSBvZiB0aGUKKwkJCSAqIGNob2ljZSBpbnRvIGFuIHVwcGVy
IGJvdW5kIG9uIHRoZSB2aXNpYmlsaXR5IG9mIHRoZQorCQkJICogY2hvaWNlIHZhbHVlIHN5bWJv
bHMuCisJCQkgKi8KKwkJCXBhcmVudGRlcCA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7CisJCX0g
ZWxzZSBpZiAocGFyZW50LT5wcm9tcHQpCisJCQkvKiBNZW51IG5vZGUgZm9yICdtZW51JyAqLwor
CQkJcGFyZW50ZGVwID0gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwcjsKKwkJZWxzZQorCQkJ
LyogTWVudSBub2RlIGZvciAnaWYnICovCisJCQlwYXJlbnRkZXAgPSBwYXJlbnQtPmRlcDsKKwor
CQkvKiBGb3IgZWFjaCBjaGlsZCBtZW51IG5vZGUuLi4gKi8KKwkJZm9yIChtZW51ID0gcGFyZW50
LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQkJLyoKKwkJCSAqIFByb3BhZ2F0
ZSBwYXJlbnQgZGVwZW5kZW5jaWVzIHRvIHRoZSBjaGlsZCBtZW51CisJCQkgKiBub2RlLCBhbHNv
IHJld3JpdGluZyBhbmQgc2ltcGxpZnlpbmcgZXhwcmVzc2lvbnMKKwkJCSAqLworCQkJYmFzZWRl
cCA9IHJld3JpdGVfbShtZW51LT5kZXApOworCQkJYmFzZWRlcCA9IGV4cHJfdHJhbnNmb3JtKGJh
c2VkZXApOworCQkJYmFzZWRlcCA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShwYXJlbnRkZXAp
LCBiYXNlZGVwKTsKKwkJCWJhc2VkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGJhc2VkZXApOwor
CQkJbWVudS0+ZGVwID0gYmFzZWRlcDsKKworCQkJaWYgKG1lbnUtPnN5bSkKKwkJCQkvKgorCQkJ
CSAqIE5vdGU6IEZvciBzeW1ib2xzLCBhbGwgcHJvbXB0cyBhcmUgaW5jbHVkZWQKKwkJCQkgKiB0
b28gaW4gdGhlIHN5bWJvbCdzIG93biBwcm9wZXJ0eSBsaXN0CisJCQkJICovCisJCQkJcHJvcCA9
IG1lbnUtPnN5bS0+cHJvcDsKKwkJCWVsc2UKKwkJCQkvKgorCQkJCSAqIEZvciBub24tc3ltYm9s
IG1lbnUgbm9kZXMsIHdlIGp1c3QgbmVlZCB0bworCQkJCSAqIGhhbmRsZSB0aGUgcHJvbXB0CisJ
CQkJICovCisJCQkJcHJvcCA9IG1lbnUtPnByb21wdDsKKworCQkJLyogRm9yIGVhY2ggcHJvcGVy
dHkuLi4gKi8KKwkJCWZvciAoOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQkJCWlmIChw
cm9wLT5tZW51ICE9IG1lbnUpCisJCQkJCS8qCisJCQkJCSAqIFR3byBwb3NzaWJpbGl0aWVzOgor
CQkJCQkgKgorCQkJCQkgKiAxLiBUaGUgcHJvcGVydHkgbGFja3MgZGVwZW5kZW5jaWVzCisJCQkJ
CSAqICAgIGFuZCBzbyBpc24ndCBsb2NhdGlvbi1zcGVjaWZpYywKKwkJCQkJICogICAgZS5nLiBh
biAnb3B0aW9uJworCQkJCQkgKgorCQkJCQkgKiAyLiBUaGUgcHJvcGVydHkgYmVsb25ncyB0byBh
IHN5bWJvbAorCQkJCQkgKiAgICBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucyBhbmQKKwkJ
CQkJICogICAgaXMgZnJvbSBzb21lIG90aGVyIGxvY2F0aW9uLiBJdAorCQkJCQkgKiAgICB3aWxs
IGJlIGhhbmRsZWQgdGhlcmUgaW4gdGhhdAorCQkJCQkgKiAgICBjYXNlLgorCQkJCQkgKgorCQkJ
CQkgKiBTa2lwIHRoZSBwcm9wZXJ0eS4KKwkJCQkJICovCisJCQkJCWNvbnRpbnVlOworCisJCQkJ
LyoKKwkJCQkgKiBQcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2llcyB0byB0aGUKKwkJCQkgKiBw
cm9wZXJ0eSdzIGNvbmRpdGlvbiwgcmV3cml0aW5nIGFuZAorCQkJCSAqIHNpbXBsaWZ5aW5nIGV4
cHJlc3Npb25zIGF0IHRoZSBzYW1lIHRpbWUKKwkJCQkgKi8KKwkJCQlkZXAgPSByZXdyaXRlX20o
cHJvcC0+dmlzaWJsZS5leHByKTsKKwkJCQlkZXAgPSBleHByX3RyYW5zZm9ybShkZXApOworCQkJ
CWRlcCA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShiYXNlZGVwKSwgZGVwKTsKKwkJCQlkZXAg
PSBleHByX2VsaW1pbmF0ZV9kdXBzKGRlcCk7CisJCQkJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5z
eW0tPnR5cGUgIT0gU19UUklTVEFURSkKKwkJCQkJZGVwID0gZXhwcl90cmFuc19ib29sKGRlcCk7
CisJCQkJcHJvcC0+dmlzaWJsZS5leHByID0gZGVwOworCisJCQkJLyoKKwkJCQkgKiBIYW5kbGUg
c2VsZWN0cyBhbmQgaW1wbGllcywgd2hpY2ggbW9kaWZ5IHRoZQorCQkJCSAqIGRlcGVuZGVuY2ll
cyBvZiB0aGUgc2VsZWN0ZWQvaW1wbGllZCBzeW1ib2wKKwkJCQkgKi8KKwkJCQlpZiAocHJvcC0+
dHlwZSA9PSBQX1NFTEVDVCkgeworCQkJCQlzdHJ1Y3Qgc3ltYm9sICplcyA9IHByb3BfZ2V0X3N5
bWJvbChwcm9wKTsKKwkJCQkJZXMtPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3IoZXMtPnJl
dl9kZXAuZXhwciwKKwkJCQkJCQlleHByX2FsbG9jX2FuZChleHByX2FsbG9jX3N5bWJvbChtZW51
LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOworCQkJCX0gZWxzZSBpZiAocHJvcC0+dHlwZSA9PSBQ
X0lNUExZKSB7CisJCQkJCXN0cnVjdCBzeW1ib2wgKmVzID0gcHJvcF9nZXRfc3ltYm9sKHByb3Ap
OworCQkJCQllcy0+aW1wbGllZC5leHByID0gZXhwcl9hbGxvY19vcihlcy0+aW1wbGllZC5leHBy
LAorCQkJCQkJCWV4cHJfYWxsb2NfYW5kKGV4cHJfYWxsb2Nfc3ltYm9sKG1lbnUtPnN5bSksIGV4
cHJfY29weShkZXApKSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKHN5bSAmJiBzeW1faXNf
Y2hvaWNlKHN5bSkpCisJCQlleHByX2ZyZWUocGFyZW50ZGVwKTsKKworCQkvKgorCQkgKiBSZWN1
cnNpdmVseSBwcm9jZXNzIGNoaWxkcmVuIGluIHRoZSBzYW1lIGZhc2hpb24gYmVmb3JlCisJCSAq
IG1vdmluZyBvbgorCQkgKi8KKwkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51
ID0gbWVudS0+bmV4dCkKKwkJCW1lbnVfZmluYWxpemUobWVudSk7CisJfSBlbHNlIGlmIChzeW0p
IHsKKwkJLyoKKwkJICogQXV0b21hdGljIHN1Ym1lbnUgY3JlYXRpb24uIElmIHN5bSBpcyBhIHN5
bWJvbCBhbmQgQSwgQiwgQywKKwkJICogLi4uIGFyZSBjb25zZWN1dGl2ZSBpdGVtcyAoc3ltYm9s
cywgbWVudXMsIGlmcywgZXRjLikgdGhhdAorCQkgKiBhbGwgZGVwZW5kIG9uIHN5bSwgdGhlbiB0
aGUgZm9sbG93aW5nIG1lbnUgc3RydWN0dXJlIGlzCisJCSAqIGNyZWF0ZWQ6CisJCSAqCisJCSAq
CXN5bQorCQkgKgkgKy1BCisJCSAqCSArLUIKKwkJICoJICstQworCQkgKgkgLi4uCisJCSAqCisJ
CSAqIFRoaXMgYWxzbyB3b3JrcyByZWN1cnNpdmVseSwgZ2l2aW5nIHRoZSBmb2xsb3dpbmcgc3Ry
dWN0dXJlCisJCSAqIGlmIEEgaXMgYSBzeW1ib2wgYW5kIEIgZGVwZW5kcyBvbiBBOgorCQkgKgor
CQkgKglzeW0KKwkJICoJICstQQorCQkgKgkgfCArLUIKKwkJICoJICstQworCQkgKgkgLi4uCisJ
CSAqLworCisJCWJhc2VkZXAgPSBwYXJlbnQtPnByb21wdCA/IHBhcmVudC0+cHJvbXB0LT52aXNp
YmxlLmV4cHIgOiBOVUxMOworCQliYXNlZGVwID0gZXhwcl90cmFuc19jb21wYXJlKGJhc2VkZXAs
IEVfVU5FUVVBTCwgJnN5bWJvbF9ubyk7CisJCWJhc2VkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBz
KGV4cHJfdHJhbnNmb3JtKGJhc2VkZXApKTsKKworCQkvKiBFeGFtaW5lIGNvbnNlY3V0aXZlIGVs
ZW1lbnRzIGFmdGVyIHN5bSAqLworCQlsYXN0X21lbnUgPSBOVUxMOworCQlmb3IgKG1lbnUgPSBw
YXJlbnQtPm5leHQ7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7CisJCQlkZXAgPSBtZW51LT5w
cm9tcHQgPyBtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IG1lbnUtPmRlcDsKKwkJCWlmICgh
ZXhwcl9jb250YWluc19zeW1ib2woZGVwLCBzeW0pKQorCQkJCS8qIE5vIGRlcGVuZGVuY3ksIHF1
aXQgKi8KKwkJCQlicmVhazsKKwkJCWlmIChleHByX2RlcGVuZHNfc3ltYm9sKGRlcCwgc3ltKSkK
KwkJCQkvKiBBYnNvbHV0ZSBkZXBlbmRlbmN5LCBwdXQgaW4gc3VibWVudSAqLworCQkJCWdvdG8g
bmV4dDsKKworCQkJLyoKKwkJCSAqIEFsc28gY29uc2lkZXIgaXQgYSBkZXBlbmRlbmN5IG9uIHN5
bSBpZiBvdXIKKwkJCSAqIGRlcGVuZGVuY2llcyBjb250YWluIHN5bSBhbmQgYXJlIGEgInN1cGVy
c2V0IiBvZgorCQkJICogc3ltJ3MgZGVwZW5kZW5jaWVzLCBlLmcuICcoc3ltIHx8IFEpICYmIFIn
IHdoZW4gc3ltCisJCQkgKiBkZXBlbmRzIG9uIFIuCisJCQkgKgorCQkJICogTm90ZSB0aGF0ICdS
JyBtaWdodCBiZSBmcm9tIGFuIGVuY2xvc2luZyBtZW51IG9yIGlmLAorCQkJICogbWFraW5nIHRo
aXMgYSBtb3JlIGNvbW1vbiBjYXNlIHRoYW4gaXQgbWlnaHQgc2VlbS4KKwkJCSAqLworCQkJZGVw
ID0gZXhwcl90cmFuc19jb21wYXJlKGRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsKKwkJCWRl
cCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90cmFuc2Zvcm0oZGVwKSk7CisJCQlkZXAyID0g
ZXhwcl9jb3B5KGJhc2VkZXApOworCQkJZXhwcl9lbGltaW5hdGVfZXEoJmRlcCwgJmRlcDIpOwor
CQkJZXhwcl9mcmVlKGRlcCk7CisJCQlpZiAoIWV4cHJfaXNfeWVzKGRlcDIpKSB7CisJCQkJLyog
Tm90IHN1cGVyc2V0LCBxdWl0ICovCisJCQkJZXhwcl9mcmVlKGRlcDIpOworCQkJCWJyZWFrOwor
CQkJfQorCQkJLyogU3VwZXJzZXQsIHB1dCBpbiBzdWJtZW51ICovCisJCQlleHByX2ZyZWUoZGVw
Mik7CisJCW5leHQ6CisJCQltZW51X2ZpbmFsaXplKG1lbnUpOworCQkJbWVudS0+cGFyZW50ID0g
cGFyZW50OworCQkJbGFzdF9tZW51ID0gbWVudTsKKwkJfQorCQlleHByX2ZyZWUoYmFzZWRlcCk7
CisJCWlmIChsYXN0X21lbnUpIHsKKwkJCXBhcmVudC0+bGlzdCA9IHBhcmVudC0+bmV4dDsKKwkJ
CXBhcmVudC0+bmV4dCA9IGxhc3RfbWVudS0+bmV4dDsKKwkJCWxhc3RfbWVudS0+bmV4dCA9IE5V
TEw7CisJCX0KKworCQlzeW0tPmRpcl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5kaXJf
ZGVwLmV4cHIsIHBhcmVudC0+ZGVwKTsKKwl9CisJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBt
ZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3lt
KSAmJgorCQkgICAgbWVudS0+c3ltICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkp
IHsKKwkJCWN1cnJlbnRfZW50cnkgPSBtZW51OworCQkJbWVudS0+c3ltLT5mbGFncyB8PSBTWU1C
T0xfQ0hPSUNFVkFMOworCQkJaWYgKCFtZW51LT5wcm9tcHQpCisJCQkJbWVudV93YXJuKG1lbnUs
ICJjaG9pY2UgdmFsdWUgbXVzdCBoYXZlIGEgcHJvbXB0Iik7CisJCQlmb3IgKHByb3AgPSBtZW51
LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCQkJaWYgKHByb3AtPnR5
cGUgPT0gUF9ERUZBVUxUKQorCQkJCQlwcm9wX3dhcm4ocHJvcCwgImRlZmF1bHRzIGZvciBjaG9p
Y2UgIgorCQkJCQkJICAidmFsdWVzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCQlpZiAocHJvcC0+bWVu
dSA9PSBtZW51KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocHJvcC0+dHlwZSA9PSBQX1BST01Q
VCAmJgorCQkJCSAgICBwcm9wLT5tZW51LT5wYXJlbnQtPnN5bSAhPSBzeW0pCisJCQkJCXByb3Bf
d2Fybihwcm9wLCAiY2hvaWNlIHZhbHVlIHVzZWQgb3V0c2lkZSBpdHMgY2hvaWNlIGdyb3VwIik7
CisJCQl9CisJCQkvKiBOb24tdHJpc3RhdGUgY2hvaWNlIHZhbHVlcyBvZiB0cmlzdGF0ZSBjaG9p
Y2VzIG11c3QKKwkJCSAqIGRlcGVuZCBvbiB0aGUgY2hvaWNlIGJlaW5nIHNldCB0byBZLiBUaGUg
Y2hvaWNlCisJCQkgKiB2YWx1ZXMnIGRlcGVuZGVuY2llcyB3ZXJlIHByb3BhZ2F0ZWQgdG8gdGhl
aXIKKwkJCSAqIHByb3BlcnRpZXMgYWJvdmUsIHNvIHRoZSBjaGFuZ2UgaGVyZSBtdXN0IGJlIHJl
LQorCQkJICogcHJvcGFnYXRlZC4KKwkJCSAqLworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNU
QVRFICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKSB7CisJCQkJYmFzZWRlcCA9IGV4
cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0sICZzeW1ib2xfeWVzKTsKKwkJCQltZW51LT5kZXAg
PSBleHByX2FsbG9jX2FuZChiYXNlZGVwLCBtZW51LT5kZXApOworCQkJCWZvciAocHJvcCA9IG1l
bnUtPnN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJCQkJaWYgKHByb3At
Pm1lbnUgIT0gbWVudSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlwcm9wLT52aXNpYmxlLmV4cHIg
PSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksCisJCQkJCQkJCQkgICAgcHJvcC0+
dmlzaWJsZS5leHByKTsKKwkJCQl9CisJCQl9CisJCQltZW51X2FkZF9zeW1ib2woUF9DSE9JQ0Us
IHN5bSwgTlVMTCk7CisJCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCQkJZm9y
IChlcCA9ICZwcm9wLT5leHByOyAqZXA7IGVwID0gJigqZXApLT5sZWZ0LmV4cHIpCisJCQkJOwor
CQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxMKTsKKwkJCSgqZXApLT5yaWdodC5z
eW0gPSBtZW51LT5zeW07CisJCX0KKworCQkvKgorCQkgKiBUaGlzIGNvZGUgc2VydmVzIHR3byBw
dXJwb3NlczoKKwkJICoKKwkJICogKDEpIEZsYXR0ZW5pbmcgJ2lmJyBibG9ja3MsIHdoaWNoIGRv
IG5vdCBzcGVjaWZ5IGEgc3VibWVudQorCQkgKiAgICAgYW5kIG9ubHkgYWRkIGRlcGVuZGVuY2ll
cy4KKwkJICoKKwkJICogICAgIChBdXRvbWF0aWMgc3VibWVudSBjcmVhdGlvbiBtaWdodCBzdGls
bCBjcmVhdGUgYSBzdWJtZW51CisJCSAqICAgICBmcm9tIGFuICdpZicgYmVmb3JlIHRoaXMgY29k
ZSBydW5zLikKKwkJICoKKwkJICogKDIpICJVbmRvaW5nIiBhbnkgYXV0b21hdGljIHN1Ym1lbnVz
IGNyZWF0ZWQgZWFybGllciBiZWxvdworCQkgKiAgICAgcHJvbXB0bGVzcyBzeW1ib2xzLgorCQkg
KgorCQkgKiBCZWZvcmU6CisJCSAqCisJCSAqCUEKKwkJICoJaWYgLi4uIChvciBwcm9tcHRsZXNz
IHN5bWJvbCkKKwkJICoJICstQgorCQkgKgkgKy1DCisJCSAqCUQKKwkJICoKKwkJICogQWZ0ZXI6
CisJCSAqCisJCSAqCUEKKwkJICoJaWYgLi4uIChvciBwcm9tcHRsZXNzIHN5bWJvbCkKKwkJICoJ
QgorCQkgKglDCisJCSAqCUQKKwkJICovCisJCWlmIChtZW51LT5saXN0ICYmICghbWVudS0+cHJv
bXB0IHx8ICFtZW51LT5wcm9tcHQtPnRleHQpKSB7CisJCQlmb3IgKGxhc3RfbWVudSA9IG1lbnUt
Pmxpc3Q7IDsgbGFzdF9tZW51ID0gbGFzdF9tZW51LT5uZXh0KSB7CisJCQkJbGFzdF9tZW51LT5w
YXJlbnQgPSBwYXJlbnQ7CisJCQkJaWYgKCFsYXN0X21lbnUtPm5leHQpCisJCQkJCWJyZWFrOwor
CQkJfQorCQkJbGFzdF9tZW51LT5uZXh0ID0gbWVudS0+bmV4dDsKKwkJCW1lbnUtPm5leHQgPSBt
ZW51LT5saXN0OworCQkJbWVudS0+bGlzdCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAoc3ltICYm
ICEoc3ltLT5mbGFncyAmIFNZTUJPTF9XQVJORUQpKSB7CisJCWlmIChzeW0tPnR5cGUgPT0gU19V
TktOT1dOKQorCQkJbWVudV93YXJuKHBhcmVudCwgImNvbmZpZyBzeW1ib2wgZGVmaW5lZCB3aXRo
b3V0IHR5cGUiKTsKKworCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmICFwYXJlbnQtPnByb21w
dCkKKwkJCW1lbnVfd2FybihwYXJlbnQsICJjaG9pY2UgbXVzdCBoYXZlIGEgcHJvbXB0Iik7CisK
KwkJLyogQ2hlY2sgcHJvcGVydGllcyBjb25uZWN0ZWQgdG8gdGhpcyBzeW1ib2wgKi8KKwkJc3lt
X2NoZWNrX3Byb3Aoc3ltKTsKKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV0FSTkVEOworCX0KKwor
CS8qCisJICogRm9yIG5vbi1vcHRpb25hbCBjaG9pY2VzLCBhZGQgYSByZXZlcnNlIGRlcGVuZGVu
Y3kgKGNvcnJlc3BvbmRpbmcgdG8KKwkgKiBhIHNlbGVjdCkgb2YgJzx2aXNpYmlsaXR5PiAmJiBt
Jy4gVGhpcyBwcmV2ZW50cyB0aGUgdXNlciBmcm9tCisJICogc2V0dGluZyB0aGUgY2hvaWNlIG1v
ZGUgdG8gJ24nIHdoZW4gdGhlIGNob2ljZSBpcyB2aXNpYmxlLgorCSAqCisJICogVGhpcyB3b3Vs
ZCBhbHNvIHdvcmsgZm9yIG5vbi1jaG9pY2Ugc3ltYm9scywgYnV0IG9ubHkgbm9uLW9wdGlvbmFs
CisJICogY2hvaWNlcyBjbGVhciBTWU1CT0xfT1BUSU9OQUwgYXMgb2Ygd3JpdGluZy4gQ2hvaWNl
cyBhcmUgaW1wbGVtZW50ZWQKKwkgKiBhcyBhIHR5cGUgb2Ygc3ltYm9sLgorCSAqLworCWlmIChz
eW0gJiYgIXN5bV9pc19vcHRpb25hbChzeW0pICYmIHBhcmVudC0+cHJvbXB0KSB7CisJCXN5bS0+
cmV2X2RlcC5leHByID0gZXhwcl9hbGxvY19vcihzeW0tPnJldl9kZXAuZXhwciwKKwkJCQlleHBy
X2FsbG9jX2FuZChwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByLAorCQkJCQlleHByX2FsbG9j
X3N5bWJvbCgmc3ltYm9sX21vZCkpKTsKKwl9Cit9CisKK2Jvb2wgbWVudV9oYXNfcHJvbXB0KHN0
cnVjdCBtZW51ICptZW51KQoreworCWlmICghbWVudS0+cHJvbXB0KQorCQlyZXR1cm4gZmFsc2U7
CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgYSBtZW51IGlzIGVtcHR5
LgorICogQSBtZW51IGlzIGNvbnNpZGVyZWQgZW1wdHkgaWYgaXQgY29udGFpbnMgbm8gb3Igb25s
eQorICogaW52aXNpYmxlIGVudHJpZXMuCisgKi8KK2Jvb2wgbWVudV9pc19lbXB0eShzdHJ1Y3Qg
bWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisKKwlmb3IgKGNoaWxkID0gbWVu
dS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaWYgKG1lbnVfaXNfdmlz
aWJsZShjaGlsZCkpCisJCQlyZXR1cm4oZmFsc2UpOworCX0KKwlyZXR1cm4odHJ1ZSk7Cit9CisK
K2Jvb2wgbWVudV9pc192aXNpYmxlKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBtZW51
ICpjaGlsZDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJdHJpc3RhdGUgdmlzaWJsZTsKKworCWlm
ICghbWVudS0+cHJvbXB0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAobWVudS0+dmlzaWJpbGl0
eSkgeworCQlpZiAoZXhwcl9jYWxjX3ZhbHVlKG1lbnUtPnZpc2liaWxpdHkpID09IG5vKQorCQkJ
cmV0dXJuIGZhbHNlOworCX0KKworCXN5bSA9IG1lbnUtPnN5bTsKKwlpZiAoc3ltKSB7CisJCXN5
bV9jYWxjX3ZhbHVlKHN5bSk7CisJCXZpc2libGUgPSBtZW51LT5wcm9tcHQtPnZpc2libGUudHJp
OworCX0gZWxzZQorCQl2aXNpYmxlID0gbWVudS0+cHJvbXB0LT52aXNpYmxlLnRyaSA9IGV4cHJf
Y2FsY192YWx1ZShtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwcik7CisKKwlpZiAodmlzaWJsZSAh
PSBubykKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoIXN5bSB8fCBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKG1lbnUtPnN5bSkgPT0gbm8pCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoY2hpbGQgPSBt
ZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQlpZiAobWVudV9pc192
aXNpYmxlKGNoaWxkKSkgeworCQkJaWYgKHN5bSkKKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9E
RUZfVVNFUjsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQor
Citjb25zdCBjaGFyICptZW51X2dldF9wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJaWYg
KG1lbnUtPnByb21wdCkKKwkJcmV0dXJuIG1lbnUtPnByb21wdC0+dGV4dDsKKwllbHNlIGlmICht
ZW51LT5zeW0pCisJCXJldHVybiBtZW51LT5zeW0tPm5hbWU7CisJcmV0dXJuIE5VTEw7Cit9CisK
K3N0cnVjdCBtZW51ICptZW51X2dldF9yb290X21lbnUoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJ
cmV0dXJuICZyb290bWVudTsKK30KKworc3RydWN0IG1lbnUgKm1lbnVfZ2V0X3BhcmVudF9tZW51
KHN0cnVjdCBtZW51ICptZW51KQoreworCWVudW0gcHJvcF90eXBlIHR5cGU7CisKKwlmb3IgKDsg
bWVudSAhPSAmcm9vdG1lbnU7IG1lbnUgPSBtZW51LT5wYXJlbnQpIHsKKwkJdHlwZSA9IG1lbnUt
PnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IDA7CisJCWlmICh0eXBlID09IFBfTUVOVSkK
KwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbWVudTsKK30KKworYm9vbCBtZW51X2hhc19oZWxwKHN0
cnVjdCBtZW51ICptZW51KQoreworCXJldHVybiBtZW51LT5oZWxwICE9IE5VTEw7Cit9CisKK2Nv
bnN0IGNoYXIgKm1lbnVfZ2V0X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJaWYgKG1lbnUt
PmhlbHApCisJCXJldHVybiBtZW51LT5oZWxwOworCWVsc2UKKwkJcmV0dXJuICIiOworfQorCitz
dGF0aWMgdm9pZCBnZXRfcHJvbXB0X3N0cihzdHJ1Y3QgZ3N0ciAqciwgc3RydWN0IHByb3BlcnR5
ICpwcm9wLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlpbnQgaSwgajsKKwlz
dHJ1Y3QgbWVudSAqc3VibWVudVs4XSwgKm1lbnUsICpsb2NhdGlvbiA9IE5VTEw7CisJc3RydWN0
IGp1bXBfa2V5ICpqdW1wID0gTlVMTDsKKworCXN0cl9wcmludGYociwgIlByb21wdDogJXNcbiIs
IHByb3AtPnRleHQpOworCW1lbnUgPSBwcm9wLT5tZW51LT5wYXJlbnQ7CisJZm9yIChpID0gMDsg
bWVudSAhPSAmcm9vdG1lbnUgJiYgaSA8IDg7IG1lbnUgPSBtZW51LT5wYXJlbnQpIHsKKwkJYm9v
bCBhY2Nlc3NpYmxlID0gbWVudV9pc192aXNpYmxlKG1lbnUpOworCisJCXN1Ym1lbnVbaSsrXSA9
IG1lbnU7CisJCWlmIChsb2NhdGlvbiA9PSBOVUxMICYmIGFjY2Vzc2libGUpCisJCQlsb2NhdGlv
biA9IG1lbnU7CisJfQorCWlmIChoZWFkICYmIGxvY2F0aW9uKSB7CisJCWp1bXAgPSB4bWFsbG9j
KHNpemVvZihzdHJ1Y3QganVtcF9rZXkpKTsKKworCQlpZiAobWVudV9pc192aXNpYmxlKHByb3At
Pm1lbnUpKSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgbm90IGVub3VnaCByb29tIHRvIHB1dCB0
aGUgaGludCBhdCB0aGUKKwkJCSAqIGJlZ2lubmluZyBvZiB0aGUgIlByb21wdCIgbGluZS4gUHV0
IHRoZSBoaW50IG9uIHRoZQorCQkJICogbGFzdCAiTG9jYXRpb24iIGxpbmUgZXZlbiB3aGVuIGl0
IHdvdWxkIGJlbG9uZyBvbgorCQkJICogdGhlIGZvcm1lci4KKwkJCSAqLworCQkJanVtcC0+dGFy
Z2V0ID0gcHJvcC0+bWVudTsKKwkJfSBlbHNlCisJCQlqdW1wLT50YXJnZXQgPSBsb2NhdGlvbjsK
KworCQlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJCWp1bXAtPmluZGV4ID0gMDsKKwkJZWxzZQor
CQkJanVtcC0+aW5kZXggPSBsaXN0X2VudHJ5KGhlYWQtPnByZXYsIHN0cnVjdCBqdW1wX2tleSwK
KwkJCQkJCSBlbnRyaWVzKS0+aW5kZXggKyAxOworCisJCWxpc3RfYWRkX3RhaWwoJmp1bXAtPmVu
dHJpZXMsIGhlYWQpOworCX0KKworCWlmIChpID4gMCkgeworCQlzdHJfcHJpbnRmKHIsICIgIExv
Y2F0aW9uOlxuIik7CisJCWZvciAoaiA9IDQ7IC0taSA+PSAwOyBqICs9IDIpIHsKKwkJCW1lbnUg
PSBzdWJtZW51W2ldOworCQkJaWYgKGp1bXAgJiYgbWVudSA9PSBsb2NhdGlvbikKKwkJCQlqdW1w
LT5vZmZzZXQgPSBzdHJsZW4oci0+cyk7CisJCQlzdHJfcHJpbnRmKHIsICIlKmMtPiAlcyIsIGos
ICcgJywKKwkJCQkgICBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQkJaWYgKG1lbnUtPnN5bSkg
eworCQkJCXN0cl9wcmludGYociwgIiAoJXMgWz0lc10pIiwgbWVudS0+c3ltLT5uYW1lID8KKwkJ
CQkJbWVudS0+c3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQkJc3ltX2dldF9zdHJpbmdfdmFs
dWUobWVudS0+c3ltKSk7CisJCQl9CisJCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCQl9CisJfQor
fQorCisvKgorICogZ2V0IHByb3BlcnR5IG9mIHR5cGUgUF9TWU1CT0wKKyAqLworc3RhdGljIHN0
cnVjdCBwcm9wZXJ0eSAqZ2V0X3N5bWJvbF9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlz
dHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBOVUxMOworCisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwg
cHJvcCwgUF9TWU1CT0wpCisJCWJyZWFrOworCXJldHVybiBwcm9wOworfQorCitzdGF0aWMgdm9p
ZCBnZXRfc3ltYm9sX3Byb3BzX3N0cihzdHJ1Y3QgZ3N0ciAqciwgc3RydWN0IHN5bWJvbCAqc3lt
LAorCQkJCSBlbnVtIHByb3BfdHlwZSB0b2ssIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKwlib29s
IGhpdCA9IGZhbHNlOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWZvcl9hbGxfcHJvcGVy
dGllcyhzeW0sIHByb3AsIHRvaykgeworCQlpZiAoIWhpdCkgeworCQkJc3RyX2FwcGVuZChyLCBw
cmVmaXgpOworCQkJaGl0ID0gdHJ1ZTsKKwkJfSBlbHNlCisJCQlzdHJfcHJpbnRmKHIsICIgJiYg
Iik7CisJCWV4cHJfZ3N0cl9wcmludChwcm9wLT5leHByLCByKTsKKwl9CisJaWYgKGhpdCkKKwkJ
c3RyX2FwcGVuZChyLCAiXG4iKTsKK30KKworLyoKKyAqIGhlYWQgaXMgb3B0aW9uYWwgYW5kIG1h
eSBiZSBOVUxMCisgKi8KK3N0YXRpYyB2b2lkIGdldF9zeW1ib2xfc3RyKHN0cnVjdCBnc3RyICpy
LCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQorewor
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWlmIChzeW0gJiYgc3ltLT5uYW1lKSB7CisJCXN0
cl9wcmludGYociwgIlN5bWJvbDogJXMgWz0lc11cbiIsIHN5bS0+bmFtZSwKKwkJCSAgIHN5bV9n
ZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOworCQlzdHJfcHJpbnRmKHIsICJUeXBlICA6ICVzXG4iLCBz
eW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOworCQlpZiAoc3ltLT50eXBlID09IFNfSU5UIHx8IHN5
bS0+dHlwZSA9PSBTX0hFWCkgeworCQkJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOwor
CQkJaWYgKHByb3ApIHsKKwkJCQlzdHJfcHJpbnRmKHIsICJSYW5nZSA6ICIpOworCQkJCWV4cHJf
Z3N0cl9wcmludChwcm9wLT5leHByLCByKTsKKwkJCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCQkJ
fQorCQl9CisJfQorCWZvcl9hbGxfcHJvbXB0cyhzeW0sIHByb3ApCisJCWdldF9wcm9tcHRfc3Ry
KHIsIHByb3AsIGhlYWQpOworCisJcHJvcCA9IGdldF9zeW1ib2xfcHJvcChzeW0pOworCWlmIChw
cm9wKSB7CisJCXN0cl9wcmludGYociwgIiAgRGVmaW5lZCBhdCAlczolZFxuIiwgcHJvcC0+bWVu
dS0+ZmlsZS0+bmFtZSwKKwkJCXByb3AtPm1lbnUtPmxpbmVubyk7CisJCWlmICghZXhwcl9pc195
ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJc3RyX2FwcGVuZChyLCAiICBEZXBlbmRzIG9u
OiAiKTsKKwkJCWV4cHJfZ3N0cl9wcmludChwcm9wLT52aXNpYmxlLmV4cHIsIHIpOworCQkJc3Ry
X2FwcGVuZChyLCAiXG4iKTsKKwkJfQorCX0KKworCWdldF9zeW1ib2xfcHJvcHNfc3RyKHIsIHN5
bSwgUF9TRUxFQ1QsICIgIFNlbGVjdHM6ICIpOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikgewor
CQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCB5ZXMsICIgIFNl
bGVjdGVkIGJ5IFt5XTpcbiIpOworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2Rl
cC5leHByLCByLCBtb2QsICIgIFNlbGVjdGVkIGJ5IFttXTpcbiIpOworCQlleHByX2dzdHJfcHJp
bnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCBubywgIiAgU2VsZWN0ZWQgYnkgW25dOlxu
Iik7CisJfQorCisJZ2V0X3N5bWJvbF9wcm9wc19zdHIociwgc3ltLCBQX0lNUExZLCAiICBJbXBs
aWVzOiAiKTsKKwlpZiAoc3ltLT5pbXBsaWVkLmV4cHIpIHsKKwkJZXhwcl9nc3RyX3ByaW50X3Jl
dmRlcChzeW0tPmltcGxpZWQuZXhwciwgciwgeWVzLCAiICBJbXBsaWVkIGJ5IFt5XTpcbiIpOwor
CQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+aW1wbGllZC5leHByLCByLCBtb2QsICIgIElt
cGxpZWQgYnkgW21dOlxuIik7CisJCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5pbXBsaWVk
LmV4cHIsIHIsIG5vLCAiICBJbXBsaWVkIGJ5IFtuXTpcbiIpOworCX0KKworCXN0cl9hcHBlbmQo
ciwgIlxuXG4iKTsKK30KKworc3RydWN0IGdzdHIgZ2V0X3JlbGF0aW9uc19zdHIoc3RydWN0IHN5
bWJvbCAqKnN5bV9hcnIsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IHN5bWJv
bCAqc3ltOworCXN0cnVjdCBnc3RyIHJlcyA9IHN0cl9uZXcoKTsKKwlpbnQgaTsKKworCWZvciAo
aSA9IDA7IHN5bV9hcnIgJiYgKHN5bSA9IHN5bV9hcnJbaV0pOyBpKyspCisJCWdldF9zeW1ib2xf
c3RyKCZyZXMsIHN5bSwgaGVhZCk7CisJaWYgKCFpKQorCQlzdHJfYXBwZW5kKCZyZXMsICJObyBt
YXRjaGVzIGZvdW5kLlxuIik7CisJcmV0dXJuIHJlczsKK30KKworCit2b2lkIG1lbnVfZ2V0X2V4
dF9oZWxwKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCkKK3sKKwlzdHJ1Y3Qg
c3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJY29uc3QgY2hhciAqaGVscF90ZXh0ID0gbm9oZWxw
X3RleHQ7CisKKwlpZiAobWVudV9oYXNfaGVscChtZW51KSkgeworCQlpZiAoc3ltLT5uYW1lKQor
CQkJc3RyX3ByaW50ZihoZWxwLCAiJXMlczpcblxuIiwgQ09ORklHXywgc3ltLT5uYW1lKTsKKwkJ
aGVscF90ZXh0ID0gbWVudV9nZXRfaGVscChtZW51KTsKKwl9CisJc3RyX3ByaW50ZihoZWxwLCAi
JXNcbiIsIGhlbHBfdGV4dCk7CisJaWYgKHN5bSkKKwkJZ2V0X3N5bWJvbF9zdHIoaGVscCwgc3lt
LCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29uZmln
LnNoIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2gKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAuLmQ5MjRjNTFkCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2gKQEAgLTAsMCArMSwxODkgQEAKKyMhL2Jpbi9z
aAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIworIyAgbWVyZ2VfY29uZmln
LnNoIC0gVGFrZXMgYSBsaXN0IG9mIGNvbmZpZyBmcmFnbWVudCB2YWx1ZXMsIGFuZCBtZXJnZXMK
KyMgIHRoZW0gb25lIGJ5IG9uZS4gUHJvdmlkZXMgd2FybmluZ3Mgb24gb3ZlcnJpZGRlbiB2YWx1
ZXMsIGFuZCBzcGVjaWZpZWQKKyMgIHZhbHVlcyB0aGF0IGRpZCBub3QgbWFrZSBpdCB0byB0aGUg
cmVzdWx0aW5nIC5jb25maWcgZmlsZSAoZHVlIHRvIG1pc3NlZAorIyAgZGVwZW5kZW5jaWVzIG9y
IGNvbmZpZyBzeW1ib2wgcmVtb3ZhbCkuCisjCisjICBQb3J0aW9ucyByZXVzZWQgZnJvbSBrY29u
Zl9jaGVjayBhbmQgZ2VuZXJhdGVfY2ZnOgorIyAgaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3Jn
L2NnaXQvY2dpdC5jZ2kveW9jdG8ta2VybmVsLXRvb2xzL3RyZWUvdG9vbHMva2NvbmZfY2hlY2sK
KyMgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3lvY3RvLWtlcm5l
bC10b29scy90cmVlL3Rvb2xzL2dlbmVyYXRlX2NmZworIworIyAgQ29weXJpZ2h0IChjKSAyMDA5
LTIwMTAgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCisjICBDb3B5cmlnaHQgMjAxMSBMaW5hcm8K
KworY2xlYW5fdXAoKSB7CisJcm0gLWYgJFRNUF9GSUxFCisJcm0gLWYgJE1FUkdFX0ZJTEUKKwll
eGl0Cit9Cit0cmFwIGNsZWFuX3VwIEhVUCBJTlQgVEVSTQorCit1c2FnZSgpIHsKKwllY2hvICJV
c2FnZTogJDAgW09QVElPTlNdIFtDT05GSUcgWy4uLl1dIgorCWVjaG8gIiAgLWggICAgZGlzcGxh
eSB0aGlzIGhlbHAgdGV4dCIKKwllY2hvICIgIC1tICAgIG9ubHkgbWVyZ2UgdGhlIGZyYWdtZW50
cywgZG8gbm90IGV4ZWN1dGUgdGhlIG1ha2UgY29tbWFuZCIKKwllY2hvICIgIC1uICAgIHVzZSBh
bGxub2NvbmZpZyBpbnN0ZWFkIG9mIGFsbGRlZmNvbmZpZyIKKwllY2hvICIgIC1yICAgIGxpc3Qg
cmVkdW5kYW50IGVudHJpZXMgd2hlbiBtZXJnaW5nIGZyYWdtZW50cyIKKwllY2hvICIgIC15ICAg
IG1ha2UgYnVpbHRpbiBoYXZlIHByZWNlZGVuY2Ugb3ZlciBtb2R1bGVzIgorCWVjaG8gIiAgLU8g
ICAgZGlyIHRvIHB1dCBnZW5lcmF0ZWQgb3V0cHV0IGZpbGVzLiAgQ29uc2lkZXIgc2V0dGluZyBc
JEtDT05GSUdfQ09ORklHIGluc3RlYWQuIgorCWVjaG8KKwllY2hvICJVc2VkIHByZWZpeDogJyRD
T05GSUdfUFJFRklYJy4gWW91IGNhbiByZWRlZmluZSBpdCB3aXRoIFwkQ09ORklHXyBlbnZpcm9u
bWVudCB2YXJpYWJsZS4iCit9CisKK1JVTk1BS0U9dHJ1ZQorQUxMVEFSR0VUPWFsbGRlZmNvbmZp
ZworV0FSTlJFRFVOPWZhbHNlCitCVUlMVElOPWZhbHNlCitPVVRQVVQ9LgorQ09ORklHX1BSRUZJ
WD0ke0NPTkZJR18tQ09ORklHX30KKword2hpbGUgdHJ1ZTsgZG8KKwljYXNlICQxIGluCisJIi1u
IikKKwkJQUxMVEFSR0VUPWFsbG5vY29uZmlnCisJCXNoaWZ0CisJCWNvbnRpbnVlCisJCTs7CisJ
Ii1tIikKKwkJUlVOTUFLRT1mYWxzZQorCQlzaGlmdAorCQljb250aW51ZQorCQk7OworCSItaCIp
CisJCXVzYWdlCisJCWV4aXQKKwkJOzsKKwkiLXIiKQorCQlXQVJOUkVEVU49dHJ1ZQorCQlzaGlm
dAorCQljb250aW51ZQorCQk7OworCSIteSIpCisJCUJVSUxUSU49dHJ1ZQorCQlzaGlmdAorCQlj
b250aW51ZQorCQk7OworCSItTyIpCisJCWlmIFsgLWQgJDIgXTt0aGVuCisJCQlPVVRQVVQ9JChl
Y2hvICQyIHwgc2VkICdzL1wvKiQvLycpCisJCWVsc2UKKwkJCWVjaG8gIm91dHB1dCBkaXJlY3Rv
cnkgJDIgZG9lcyBub3QgZXhpc3QiIDE+JjIKKwkJCWV4aXQgMQorCQlmaQorCQlzaGlmdCAyCisJ
CWNvbnRpbnVlCisJCTs7CisJKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCitkb25lCisKK2lmIFsg
IiQjIiAtbHQgMSBdIDsgdGhlbgorCXVzYWdlCisJZXhpdAorZmkKKworaWYgWyAteiAiJEtDT05G
SUdfQ09ORklHIiBdOyB0aGVuCisJaWYgWyAiJE9VVFBVVCIgIT0gLiBdOyB0aGVuCisJCUtDT05G
SUdfQ09ORklHPSQocmVhZGxpbmsgLW0gLS0gIiRPVVRQVVQvLmNvbmZpZyIpCisJZWxzZQorCQlL
Q09ORklHX0NPTkZJRz0uY29uZmlnCisJZmkKK2ZpCisKK0lOSVRGSUxFPSQxCitzaGlmdDsKKwor
aWYgWyAhIC1yICIkSU5JVEZJTEUiIF07IHRoZW4KKwllY2hvICJUaGUgYmFzZSBmaWxlICckSU5J
VEZJTEUnIGRvZXMgbm90IGV4aXN0LiAgRXhpdC4iID4mMgorCWV4aXQgMQorZmkKKworTUVSR0Vf
TElTVD0kKgorU0VEX0NPTkZJR19FWFAxPSJzL15cKCR7Q09ORklHX1BSRUZJWH1bYS16QS1aMC05
X10qXCk9LiovXDEvcCIKK1NFRF9DT05GSUdfRVhQMj0icy9eIyBcKCR7Q09ORklHX1BSRUZJWH1b
YS16QS1aMC05X10qXCkgaXMgbm90IHNldCQvXDEvcCIKKworVE1QX0ZJTEU9JChta3RlbXAgLi8u
dG1wLmNvbmZpZy5YWFhYWFhYWFhYKQorTUVSR0VfRklMRT0kKG1rdGVtcCAuLy5tZXJnZV90bXAu
Y29uZmlnLlhYWFhYWFhYWFgpCisKK2VjaG8gIlVzaW5nICRJTklURklMRSBhcyBiYXNlIgorY2F0
ICRJTklURklMRSA+ICRUTVBfRklMRQorCisjIE1lcmdlIGZpbGVzLCBwcmludGluZyB3YXJuaW5n
cyBvbiBvdmVycmlkZGVuIHZhbHVlcworZm9yIE9SSUdfTUVSR0VfRklMRSBpbiAkTUVSR0VfTElT
VCA7IGRvCisJZWNobyAiTWVyZ2luZyAkT1JJR19NRVJHRV9GSUxFIgorCWlmIFsgISAtciAiJE9S
SUdfTUVSR0VfRklMRSIgXTsgdGhlbgorCQllY2hvICJUaGUgbWVyZ2UgZmlsZSAnJE9SSUdfTUVS
R0VfRklMRScgZG9lcyBub3QgZXhpc3QuICBFeGl0LiIgPiYyCisJCWV4aXQgMQorCWZpCisJY2F0
ICRPUklHX01FUkdFX0ZJTEUgPiAkTUVSR0VfRklMRQorCUNGR19MSVNUPSQoc2VkIC1uIC1lICIk
U0VEX0NPTkZJR19FWFAxIiAtZSAiJFNFRF9DT05GSUdfRVhQMiIgJE1FUkdFX0ZJTEUpCisKKwlm
b3IgQ0ZHIGluICRDRkdfTElTVCA7IGRvCisJCWdyZXAgLXEgLXcgJENGRyAkVE1QX0ZJTEUgfHwg
Y29udGludWUKKwkJUFJFVl9WQUw9JChncmVwIC13ICRDRkcgJFRNUF9GSUxFKQorCQlORVdfVkFM
PSQoZ3JlcCAtdyAkQ0ZHICRNRVJHRV9GSUxFKQorCQlCVUlMVElOX0ZMQUc9ZmFsc2UKKwkJaWYg
WyAiJEJVSUxUSU4iID0gInRydWUiIF0gJiYgWyAiJHtORVdfVkFMI0NPTkZJR18qPX0iID0gIm0i
IF0gJiYgWyAiJHtQUkVWX1ZBTCNDT05GSUdfKj19IiA9ICJ5IiBdOyB0aGVuCisJCQllY2hvIFBy
ZXZpb3VzICB2YWx1ZTogJFBSRVZfVkFMCisJCQllY2hvIE5ldyB2YWx1ZTogICAgICAgJE5FV19W
QUwKKwkJCWVjaG8gLXkgcGFzc2VkLCB3aWxsIG5vdCBkZW1vdGUgeSB0byBtCisJCQllY2hvCisJ
CQlCVUlMVElOX0ZMQUc9dHJ1ZQorCQllbGlmIFsgIngkUFJFVl9WQUwiICE9ICJ4JE5FV19WQUwi
IF0gOyB0aGVuCisJCQllY2hvIFZhbHVlIG9mICRDRkcgaXMgcmVkZWZpbmVkIGJ5IGZyYWdtZW50
ICRPUklHX01FUkdFX0ZJTEU6CisJCQllY2hvIFByZXZpb3VzICB2YWx1ZTogJFBSRVZfVkFMCisJ
CQllY2hvIE5ldyB2YWx1ZTogICAgICAgJE5FV19WQUwKKwkJCWVjaG8KKwkJZWxpZiBbICIkV0FS
TlJFRFVOIiA9ICJ0cnVlIiBdOyB0aGVuCisJCQllY2hvIFZhbHVlIG9mICRDRkcgaXMgcmVkdW5k
YW50IGJ5IGZyYWdtZW50ICRPUklHX01FUkdFX0ZJTEU6CisJCWZpCisJCWlmIFsgIiRCVUlMVElO
X0ZMQUciID0gImZhbHNlIiBdOyB0aGVuCisJCQlzZWQgLWkgIi8kQ0ZHWyA9XS9kIiAkVE1QX0ZJ
TEUKKwkJZWxzZQorCQkJc2VkIC1pICIvJENGR1sgPV0vZCIgJE1FUkdFX0ZJTEUKKwkJZmkKKwlk
b25lCisJY2F0ICRNRVJHRV9GSUxFID4+ICRUTVBfRklMRQorZG9uZQorCitpZiBbICIkUlVOTUFL
RSIgPSAiZmFsc2UiIF07IHRoZW4KKwljcCAtVCAtLSAiJFRNUF9GSUxFIiAiJEtDT05GSUdfQ09O
RklHIgorCWVjaG8gIiMiCisJZWNobyAiIyBtZXJnZWQgY29uZmlndXJhdGlvbiB3cml0dGVuIHRv
ICRLQ09ORklHX0NPTkZJRyAobmVlZHMgbWFrZSkiCisJZWNobyAiIyIKKwljbGVhbl91cAorCWV4
aXQKK2ZpCisKKyMgSWYgd2UgaGF2ZSBhbiBvdXRwdXQgZGlyLCBzZXR1cCB0aGUgTz0gYXJndW1l
bnQsIG90aGVyd2lzZSBsZWF2ZQorIyBpdCBibGFuaywgc2luY2UgTz0uIHdpbGwgY3JlYXRlIGFu
IHVubmVjZXNzYXJ5IC4vc291cmNlIHNvZnRsaW5rCitPVVRQVVRfQVJHPSIiCitpZiBbICIkT1VU
UFVUIiAhPSAiLiIgXSA7IHRoZW4KKwlPVVRQVVRfQVJHPSJPPSRPVVRQVVQiCitmaQorCisKKyMg
VXNlIHRoZSBtZXJnZWQgZmlsZSBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yOgorIyBhbGxkZWZj
b25maWc6IEZpbGxzIGluIGFueSBtaXNzaW5nIHN5bWJvbHMgd2l0aCBLY29uZmlnIGRlZmF1bHQK
KyMgYWxsbm9jb25maWc6IEZpbGxzIGluIGFueSBtaXNzaW5nIHN5bWJvbHMgd2l0aCAjIENPTkZJ
R18qIGlzIG5vdCBzZXQKK21ha2UgS0NPTkZJR19BTExDT05GSUc9JFRNUF9GSUxFICRPVVRQVVRf
QVJHICRBTExUQVJHRVQKKworCisjIENoZWNrIGFsbCBzcGVjaWZpZWQgY29uZmlnIHZhbHVlcyB0
b29rIChtaWdodCBoYXZlIG1pc3NlZC1kZXBlbmRlbmN5IGlzc3VlcykKK2ZvciBDRkcgaW4gJChz
ZWQgLW4gLWUgIiRTRURfQ09ORklHX0VYUDEiIC1lICIkU0VEX0NPTkZJR19FWFAyIiAkVE1QX0ZJ
TEUpOyBkbworCisJUkVRVUVTVEVEX1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICRUTVBfRklMRSkK
KwlBQ1RVQUxfVkFMPSQoZ3JlcCAtdyAtZSAiJENGRyIgIiRLQ09ORklHX0NPTkZJRyIpCisJaWYg
WyAieCRSRVFVRVNURURfVkFMIiAhPSAieCRBQ1RVQUxfVkFMIiBdIDsgdGhlbgorCQllY2hvICJW
YWx1ZSByZXF1ZXN0ZWQgZm9yICRDRkcgbm90IGluIGZpbmFsIC5jb25maWciCisJCWVjaG8gIlJl
cXVlc3RlZCB2YWx1ZTogICRSRVFVRVNURURfVkFMIgorCQllY2hvICJBY3R1YWwgdmFsdWU6ICAg
ICAkQUNUVUFMX1ZBTCIKKwkJZWNobyAiIgorCWZpCitkb25lCisKK2NsZWFuX3VwCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbmNvbmYtY2ZnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwLi4wMDE1
NTllZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNo
CkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog
R1BMLTIuMAorCitQS0c9Im5jdXJzZXN3IG1lbnV3IHBhbmVsdyIKK1BLRzI9Im5jdXJzZXMgbWVu
dSBwYW5lbCIKKworaWYgWyAtbiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBdOyB0aGVuCisJ
aWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHOyB0aGVuCisJCWVjaG8gY2ZsYWdzPVwiJChwa2ct
Y29uZmlnIC0tY2ZsYWdzICRQS0cpXCIKKwkJZWNobyBsaWJzPVwiJChwa2ctY29uZmlnIC0tbGli
cyAkUEtHKVwiCisJCWV4aXQgMAorCWZpCisKKwlpZiBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0cy
OyB0aGVuCisJCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiCisJ
CWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCIKKwkJZXhpdCAwCisJZmkK
K2ZpCisKKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4gY2FzZSBwa2ctY29uZmlnIGlzIG5v
dCBpbnN0YWxsZWQuCisjIChFdmVuIGlmIGl0IGlzIGluc3RhbGxlZCwgc29tZSBkaXN0cmlidXRp
b25zIHN1Y2ggYXMgb3BlblNVU0UgY2Fubm90CisjIGZpbmQgbmN1cnNlcyBieSBwa2ctY29uZmln
LikKK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuCisJZWNo
byBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3XCIKKwllY2hv
IGxpYnM9XCItbG5jdXJzZXN3IC1sbWVudXcgLWxwYW5lbHdcIgorCWV4aXQgMAorZmkKKworaWYg
WyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy9uY3Vyc2VzLmggXTsgdGhlbgorCWVjaG8gY2ZsYWdz
PVwiLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzXCIKKwllY2hvIGxpYnM9XCIt
bG5jdXJzZXMgLWxtZW51IC1scGFuZWxcIgorCWV4aXQgMAorZmkKKworaWYgWyAtZiAvdXNyL2lu
Y2x1ZGUvbmN1cnNlcy5oIF07IHRoZW4KKwllY2hvIGNmbGFncz1cIi1EX0dOVV9TT1VSQ0VcIgor
CWVjaG8gbGlicz1cIi1sbmN1cnNlcyAtbG1lbnUgLWxwYW5lbFwiCisJZXhpdCAwCitmaQorCitl
Y2hvID4mMiAiKiIKK2VjaG8gPiYyICIqIFVuYWJsZSB0byBmaW5kIHRoZSBuY3Vyc2VzIHBhY2th
Z2UuIgorZWNobyA+JjIgIiogSW5zdGFsbCBuY3Vyc2VzIChuY3Vyc2VzLWRldmVsIG9yIGxpYm5j
dXJzZXMtZGV2IgorZWNobyA+JjIgIiogZGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJpYnV0aW9uKS4i
CitlY2hvID4mMiAiKiIKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9u
Y29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwLi5jYmFmZTNiZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbmNvbmYuYwpAQCAtMCwwICsxLDE1NTUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5pciBUemFjaGFyIDxu
aXIudHphY2hhckBnbWFpbC5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIG1lbnVjb25maWcuCisg
Ki8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNlbmRpZgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAibGtjLmgi
CisjaW5jbHVkZSAibmNvbmYuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorCitzdGF0aWMgY29uc3Qg
Y2hhciBuY29uZl9nbG9iYWxfaGVscFtdID0KKyJIZWxwIHdpbmRvd3NcbiIKKyItLS0tLS0tLS0t
LS1cbiIKKyJvICBHbG9iYWwgaGVscDogIFVubGVzcyBpbiBhIGRhdGEgZW50cnkgd2luZG93LCBw
cmVzc2luZyA8RjE+IHdpbGwgZ2l2ZSBcbiIKKyIgICB5b3UgdGhlIGdsb2JhbCBoZWxwIHdpbmRv
dywgd2hpY2ggeW91IGFyZSBqdXN0IHJlYWRpbmcuXG4iCisiXG4iCisibyAgQSBzaG9ydCB2ZXJz
aW9uIG9mIHRoZSBnbG9iYWwgaGVscCBpcyBhdmFpbGFibGUgYnkgcHJlc3NpbmcgPEYzPi5cbiIK
KyJcbiIKKyJvICBMb2NhbCBoZWxwOiAgVG8gZ2V0IGhlbHAgcmVsYXRlZCB0byB0aGUgY3VycmVu
dCBtZW51IGVudHJ5LCB1c2UgYW55XG4iCisiICAgb2YgPD8+IDxoPiwgb3IgaWYgaW4gYSBkYXRh
IGVudHJ5IHdpbmRvdyB0aGVuIHByZXNzIDxGMT4uXG4iCisiXG4iCisiXG4iCisiTWVudSBlbnRy
aWVzXG4iCisiLS0tLS0tLS0tLS0tXG4iCisiVGhpcyBpbnRlcmZhY2UgbGV0cyB5b3Ugc2VsZWN0
IGZlYXR1cmVzIGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUga2VybmVsXG4iCisiYnVpbGQuICBLZXJu
ZWwgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIHJlbW92
ZWQuXG4iCisiUGFyYW1ldGVycyBtdXN0IGJlIGVudGVyZWQgYXMgdGV4dCBvciBkZWNpbWFsIG9y
IGhleGFkZWNpbWFsIG51bWJlcnMuXG4iCisiXG4iCisiTWVudSBlbnRyaWVzIGJlZ2lubmluZyB3
aXRoIGZvbGxvd2luZyBicmFjZXMgcmVwcmVzZW50IGZlYXR1cmVzIHRoYXRcbiIKKyIgIFsgXSAg
Y2FuIGJlIGJ1aWx0IGluIG9yIHJlbW92ZWRcbiIKKyIgIDwgPiAgY2FuIGJlIGJ1aWx0IGluLCBt
b2R1bGFyaXplZCBvciByZW1vdmVkXG4iCisiICB7IH0gIGNhbiBiZSBidWlsdCBpbiBvciBtb2R1
bGFyaXplZCwgYXJlIHNlbGVjdGVkIGJ5IGFub3RoZXIgZmVhdHVyZVxuIgorIiAgLSAtICBhcmUg
c2VsZWN0ZWQgYnkgYW5vdGhlciBmZWF0dXJlXG4iCisiICBYWFggIGNhbm5vdCBiZSBzZWxlY3Rl
ZC4gIFN5bWJvbCBJbmZvIDxGMj4gdGVsbHMgeW91IHdoeS5cbiIKKyIqLCBNIG9yIHdoaXRlc3Bh
Y2UgaW5zaWRlIGJyYWNlcyBtZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXMgYSBtb2R1bGVcbiIK
KyJvciB0byBleGNsdWRlIHRoZSBmZWF0dXJlIHJlc3BlY3RpdmVseS5cbiIKKyJcbiIKKyJUbyBj
aGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQgd2l0aCB0aGUgbW92ZW1l
bnQga2V5c1xuIgorImxpc3RlZCBiZWxvdyBhbmQgcHJlc3MgPHk+IHRvIGJ1aWxkIGl0IGluLCA8
bT4gdG8gbWFrZSBpdCBhIG1vZHVsZSBvclxuIgorIjxuPiB0byByZW1vdmUgaXQuICBZb3UgbWF5
IHByZXNzIHRoZSA8U3BhY2U+IGtleSB0byBjeWNsZSB0aHJvdWdoIHRoZVxuIgorImF2YWlsYWJs
ZSBvcHRpb25zLlxuIgorIlxuIgorIkEgdHJhaWxpbmcgXCItLS0+XCIgZGVzaWduYXRlcyBhIHN1
Ym1lbnUsIGEgdHJhaWxpbmcgXCItLS0tXCIgYW5cbiIKKyJlbXB0eSBzdWJtZW51LlxuIgorIlxu
IgorIk1lbnUgbmF2aWdhdGlvbiBrZXlzXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIkxpbmV3aXNl
IHVwICAgICAgICAgICAgICAgICA8VXA+XG4iCisiTGluZXdpc2UgZG93biAgICAgICAgICAgICAg
IDxEb3duPlxuIgorIlBhZ2V3aXNlIHVwICAgICAgICAgICAgICAgICA8UGFnZSBVcD5cbiIKKyJQ
YWdld2lzZSBkb3duICAgICAgICAgICAgICAgPFBhZ2UgRG93bj5cbiIKKyJGaXJzdCBlbnRyeSAg
ICAgICAgICAgICAgICAgPEhvbWU+XG4iCisiTGFzdCBlbnRyeSAgICAgICAgICAgICAgICAgIDxF
bmQ+XG4iCisiRW50ZXIgYSBzdWJtZW51ICAgICAgICAgICAgIDxSaWdodD4gIDxFbnRlcj5cbiIK
KyJHbyBiYWNrIHRvIHBhcmVudCBtZW51ICAgICAgPExlZnQ+ICAgPEVzYz4gIDxGNT5cbiIKKyJD
bG9zZSBhIGhlbHAgd2luZG93ICAgICAgICAgPEVudGVyPiAgPEVzYz4gIDxGNT5cbiIKKyJDbG9z
ZSBlbnRyeSB3aW5kb3csIGFwcGx5ICAgPEVudGVyPlxuIgorIkNsb3NlIGVudHJ5IHdpbmRvdywg
Zm9yZ2V0ICA8RXNjPiAgPEY1PlxuIgorIlN0YXJ0IGluY3JlbWVudGFsLCBjYXNlLWluc2Vuc2l0
aXZlIHNlYXJjaCBmb3IgU1RSSU5HIGluIG1lbnUgZW50cmllcyxcbiIKKyIgICAgbm8gcmVnZXgg
c3VwcG9ydCwgU1RSSU5HIGlzIGRpc3BsYXllZCBpbiB1cHBlciBsZWZ0IGNvcm5lclxuIgorIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5TVFJJTkdcbiIKKyIgICAgUmVtb3ZlIGxhc3Qg
Y2hhcmFjdGVyICAgPEJhY2tzcGFjZT5cbiIKKyIgICAgSnVtcCB0byBuZXh0IGhpdCAgICAgICAg
PERvd24+XG4iCisiICAgIEp1bXAgdG8gcHJldmlvdXMgaGl0ICAgIDxVcD5cbiIKKyJFeGl0IG1l
bnUgc2VhcmNoIG1vZGUgICAgICAgPC8+ICA8RXNjPlxuIgorIlNlYXJjaCBmb3IgY29uZmlndXJh
dGlvbiB2YXJpYWJsZXMgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgQ09ORklHX1xuIgorIiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8Rjg+UmVnRXhwcjxFbnRlcj5cbiIKKyJWZXJib3NlIHNl
YXJjaCBoZWxwICAgICAgICAgPEY4PjxGMT5cbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisiXG4iCisi
VW5sZXNzIGluIGEgZGF0YSBlbnRyeSB3aW5kb3csIGtleSA8MT4gbWF5IGJlIHVzZWQgaW5zdGVh
ZCBvZiA8RjE+LFxuIgorIjwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiIKKyJcbiIKKyJcbiIK
KyJSYWRpb2xpc3QgKENob2ljZSBsaXN0KVxuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4i
CisiVXNlIHRoZSBtb3ZlbWVudCBrZXlzIGxpc3RlZCBhYm92ZSB0byBzZWxlY3QgdGhlIG9wdGlv
biB5b3Ugd2lzaCB0byBzZXRcbiIKKyJhbmQgcHJlc3MgPFNwYWNlPi5cbiIKKyJcbiIKKyJcbiIK
KyJEYXRhIGVudHJ5XG4iCisiLS0tLS0tLS0tLVxuIgorIkVudGVyIHRoZSByZXF1ZXN0ZWQgaW5m
b3JtYXRpb24gYW5kIHByZXNzIDxFbnRlcj4uICBIZXhhZGVjaW1hbCB2YWx1ZXNcbiIKKyJtYXkg
YmUgZW50ZXJlZCB3aXRob3V0IHRoZSBcIjB4XCIgcHJlZml4LlxuIgorIlxuIgorIlxuIgorIlRl
eHQgQm94IChIZWxwIFdpbmRvdylcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisiVXNl
IG1vdmVtZW50IGtleXMgYXMgbGlzdGVkIGluIHRhYmxlIGFib3ZlLlxuIgorIlxuIgorIlByZXNz
IGFueSBvZiA8RW50ZXI+IDxFc2M+IDxxPiA8RjU+IDxGOT4gdG8gZXhpdC5cbiIKKyJcbiIKKyJc
biIKKyJBbHRlcm5hdGUgY29uZmlndXJhdGlvbiBmaWxlc1xuIgorIi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iCisibmNvbmZpZyBzdXBwb3J0cyBzd2l0Y2hpbmcgYmV0d2VlbiBkaWZm
ZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iCisiUHJlc3MgPEY2PiB0byBzYXZlIHlvdXIgY3VycmVu
dCBjb25maWd1cmF0aW9uLiAgUHJlc3MgPEY3PiBhbmQgZW50ZXJcbiIKKyJhIGZpbGUgbmFtZSB0
byBsb2FkIGEgcHJldmlvdXNseSBzYXZlZCBjb25maWd1cmF0aW9uLlxuIgorIlxuIgorIlxuIgor
IlRlcm1pbmFsIGNvbmZpZ3VyYXRpb25cbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisi
SWYgeW91IHVzZSBuY29uZmlnIGluIGEgeHRlcm0gd2luZG93LCBtYWtlIHN1cmUgeW91ciBURVJN
IGVudmlyb25tZW50XG4iCisidmFyaWFibGUgc3BlY2lmaWVzIGEgdGVybWluYWwgY29uZmlndXJh
dGlvbiB3aGljaCBzdXBwb3J0cyBhdCBsZWFzdFxuIgorIjE2IGNvbG9ycy4gIE90aGVyd2lzZSBu
Y29uZmlnIHdpbGwgbG9vayByYXRoZXIgYmFkLlxuIgorIlxuIgorIklmIHRoZSBcInN0dHkgc2l6
ZVwiIGNvbW1hbmQgcmVwb3J0cyB0aGUgY3VycmVudCB0ZXJtaW5hbHNpemUgY29ycmVjdGx5LFxu
IgorIm5jb25maWcgd2lsbCBhZGFwdCB0byBzaXplcyBsYXJnZXIgdGhhbiB0aGUgdHJhZGl0aW9u
YWwgODB4MjUgXCJzdGFuZGFyZFwiXG4iCisiYW5kIGRpc3BsYXkgbG9uZ2VyIG1lbnVzIHByb3Bl
cmx5LlxuIgorIlxuIgorIlxuIgorIlNpbmdsZSBtZW51IG1vZGVcbiIKKyItLS0tLS0tLS0tLS0t
LS0tXG4iCisiSWYgeW91IHByZWZlciB0byBoYXZlIGFsbCBvZiB0aGUgbWVudSBlbnRyaWVzIGxp
c3RlZCBpbiBhIHNpbmdsZSBtZW51LFxuIgorInJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IG11bHRp
bWVudSBoaWVyYXJjaHksIHJ1biBuY29uZmlnIHdpdGhcbiIKKyJOQ09ORklHX01PREUgZW52aXJv
bm1lbnQgdmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiAgRXhhbXBsZTpcbiIKKyJcbiIKKyJt
YWtlIE5DT05GSUdfTU9ERT1zaW5nbGVfbWVudSBuY29uZmlnXG4iCisiXG4iCisiPEVudGVyPiB3
aWxsIHRoZW4gdW5mb2xkIHRoZSBhcHByb3ByaWF0ZSBjYXRlZ29yeSwgb3IgZm9sZCBpdCBpZiBp
dFxuIgorImlzIGFscmVhZHkgdW5mb2xkZWQuICBGb2xkZWQgbWVudSBlbnRyaWVzIHdpbGwgYmUg
ZGVzaWduYXRlZCBieSBhXG4iCisibGVhZGluZyBcIisrPlwiIGFuZCB1bmZvbGRlZCBlbnRyaWVz
IGJ5IGEgbGVhZGluZyBcIi0tPlwiLlxuIgorIlxuIgorIk5vdGUgdGhhdCB0aGlzIG1vZGUgY2Fu
IGV2ZW50dWFsbHkgYmUgYSBsaXR0bGUgbW9yZSBDUFUgZXhwZW5zaXZlIHRoYW5cbiIKKyJ0aGUg
ZGVmYXVsdCBtb2RlLCBlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVuZm9sZGVk
IHN1Ym1lbnVzLlxuIgorIlxuIiwKK21lbnVfbm9fZl9pbnN0cnVjdGlvbnNbXSA9CisiTGVnZW5k
OiAgWypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2Fw
YWJsZS5cbiIKKyJTdWJtZW51cyBhcmUgZGVzaWduYXRlZCBieSBhIHRyYWlsaW5nIFwiLS0tPlwi
LCBlbXB0eSBvbmVzIGJ5IFwiLS0tLVwiLlxuIgorIlxuIgorIlVzZSB0aGUgZm9sbG93aW5nIGtl
eXMgdG8gbmF2aWdhdGUgdGhlIG1lbnVzOlxuIgorIk1vdmUgdXAgb3IgZG93biB3aXRoIDxVcD4g
YW5kIDxEb3duPi5cbiIKKyJFbnRlciBhIHN1Ym1lbnUgd2l0aCA8RW50ZXI+IG9yIDxSaWdodD4u
XG4iCisiRXhpdCBhIHN1Ym1lbnUgdG8gaXRzIHBhcmVudCBtZW51IHdpdGggPEVzYz4gb3IgPExl
ZnQ+LlxuIgorIlByZXNzaW5nIDx5PiBpbmNsdWRlcywgPG4+IGV4Y2x1ZGVzLCA8bT4gbW9kdWxh
cml6ZXMgZmVhdHVyZXMuXG4iCisiUHJlc3NpbmcgPFNwYWNlPiBjeWNsZXMgdGhyb3VnaCB0aGUg
YXZhaWxhYmxlIG9wdGlvbnMuXG4iCisiVG8gc2VhcmNoIGZvciBtZW51IGVudHJpZXMgcHJlc3Mg
PC8+LlxuIgorIjxFc2M+IGFsd2F5cyBsZWF2ZXMgdGhlIGN1cnJlbnQgd2luZG93LlxuIgorIlxu
IgorIllvdSBkbyBub3QgaGF2ZSBmdW5jdGlvbiBrZXlzIHN1cHBvcnQuXG4iCisiUHJlc3MgPDE+
IGluc3RlYWQgb2YgPEYxPiwgPDI+IGluc3RlYWQgb2YgPEYyPiwgZXRjLlxuIgorIkZvciB2ZXJi
b3NlIGdsb2JhbCBoZWxwIHVzZSBrZXkgPDE+LlxuIgorIkZvciBoZWxwIHJlbGF0ZWQgdG8gdGhl
IGN1cnJlbnQgbWVudSBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIiwKK21lbnVfaW5zdHJ1Y3Rp
b25zW10gPQorIkxlZ2VuZDogIFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxl
ICA8ID4gbW9kdWxlIGNhcGFibGUuXG4iCisiU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgYSB0
cmFpbGluZyBcIi0tLT5cIiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiIKKyJcbiIKKyJVc2Ug
dGhlIGZvbGxvd2luZyBrZXlzIHRvIG5hdmlnYXRlIHRoZSBtZW51czpcbiIKKyJNb3ZlIHVwIG9y
IGRvd24gd2l0aCA8VXA+IG9yIDxEb3duPi5cbiIKKyJFbnRlciBhIHN1Ym1lbnUgd2l0aCA8RW50
ZXI+IG9yIDxSaWdodD4uXG4iCisiRXhpdCBhIHN1Ym1lbnUgdG8gaXRzIHBhcmVudCBtZW51IHdp
dGggPEVzYz4gb3IgPExlZnQ+LlxuIgorIlByZXNzaW5nIDx5PiBpbmNsdWRlcywgPG4+IGV4Y2x1
ZGVzLCA8bT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuXG4iCisiUHJlc3NpbmcgPFNwYWNlPiBjeWNs
ZXMgdGhyb3VnaCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4iCisiVG8gc2VhcmNoIGZvciBtZW51
IGVudHJpZXMgcHJlc3MgPC8+LlxuIgorIjxFc2M+IGFsd2F5cyBsZWF2ZXMgdGhlIGN1cnJlbnQg
d2luZG93LlxuIgorIlxuIgorIlByZXNzaW5nIDwxPiBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mIDxG
MT4sIDwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiIKKyJGb3IgdmVyYm9zZSBnbG9iYWwgaGVs
cCBwcmVzcyA8RjE+LlxuIgorIkZvciBoZWxwIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBl
bnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIiwKK3JhZGlvbGlzdF9pbnN0cnVjdGlvbnNbXSA9Cisi
UHJlc3MgPFVwPiwgPERvd24+LCA8SG9tZT4gb3IgPEVuZD4gdG8gbmF2aWdhdGUgYSByYWRpb2xp
c3QsIHNlbGVjdFxuIgorIndpdGggPFNwYWNlPi5cbiIKKyJGb3IgaGVscCByZWxhdGVkIHRvIHRo
ZSBjdXJyZW50IGVudHJ5IHByZXNzIDw/PiBvciA8aD4uXG4iCisiRm9yIGdsb2JhbCBoZWxwIHBy
ZXNzIDxGMT4uXG4iLAoraW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2ludFtdID0KKyJQbGVhc2UgZW50
ZXIgYSBkZWNpbWFsIHZhbHVlLlxuIgorIkZyYWN0aW9ucyB3aWxsIG5vdCBiZSBhY2NlcHRlZC5c
biIKKyJQcmVzcyA8RW50ZXI+IHRvIGFwcGx5LCA8RXNjPiB0byBjYW5jZWwuIiwKK2lucHV0Ym94
X2luc3RydWN0aW9uc19oZXhbXSA9CisiUGxlYXNlIGVudGVyIGEgaGV4YWRlY2ltYWwgdmFsdWUu
XG4iCisiUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsCitpbnB1dGJv
eF9pbnN0cnVjdGlvbnNfc3RyaW5nW10gPQorIlBsZWFzZSBlbnRlciBhIHN0cmluZyB2YWx1ZS5c
biIKKyJQcmVzcyA8RW50ZXI+IHRvIGFwcGx5LCA8RXNjPiB0byBjYW5jZWwuIiwKK3NldG1vZF90
ZXh0W10gPQorIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIgZmVhdHVyZSB3aGljaCBo
YXMgYmVlbiBjb25maWd1cmVkIGFzIGFcbiIKKyJtb2R1bGUuICBBcyBhIHJlc3VsdCwgdGhlIGN1
cnJlbnQgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIHRvby4iLAorbG9hZF9jb25m
aWdfdGV4dFtdID0KKyJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHlv
dSB3aXNoIHRvIGxvYWQuXG4iCisiQWNjZXB0IHRoZSBuYW1lIHNob3duIHRvIHJlc3RvcmUgdGhl
IGNvbmZpZ3VyYXRpb24geW91IGxhc3RcbiIKKyJyZXRyaWV2ZWQuICBMZWF2ZSBlbXB0eSB0byBh
Ym9ydC4iLAorbG9hZF9jb25maWdfaGVscFtdID0KKyJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUg
bWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIgorImNvbmZpZ3VyYXRpb25zIGF2
YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxuIgorIlxuIgorIklmIHlvdSBoYXZlIHNhdmVk
IGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhhbiB0aGVcbiIKKyJk
ZWZhdWx0IG9uZSwgZW50ZXJpbmcgaXRzIG5hbWUgaGVyZSB3aWxsIGFsbG93IHlvdSB0byBsb2Fk
IGFuZCBtb2RpZnlcbiIKKyJ0aGF0IGNvbmZpZ3VyYXRpb24uXG4iCisiXG4iCisiTGVhdmUgZW1w
dHkgdG8gYWJvcnQuXG4iLAorc2F2ZV9jb25maWdfdGV4dFtdID0KKyJFbnRlciBhIGZpbGVuYW1l
IHRvIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgc2F2ZWRcbiIKKyJhcyBhbiBh
bHRlcm5hdGUuICBMZWF2ZSBlbXB0eSB0byBhYm9ydC4iLAorc2F2ZV9jb25maWdfaGVscFtdID0K
KyJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZl
cmVudFxuIgorImNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxu
IgorIlxuIgorIkVudGVyaW5nIGEgZmlsZSBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbGF0
ZXIgcmV0cmlldmUsIG1vZGlmeVxuIgorImFuZCB1c2UgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlv
biBhcyBhbiBhbHRlcm5hdGUgdG8gd2hhdGV2ZXJcbiIKKyJjb25maWd1cmF0aW9uIG9wdGlvbnMg
eW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxuIgorIlxuIgorIkxlYXZlIGVtcHR5IHRv
IGFib3J0LlxuIiwKK3NlYXJjaF9oZWxwW10gPQorIlNlYXJjaCBmb3Igc3ltYm9scyAoY29uZmln
dXJhdGlvbiB2YXJpYWJsZSBuYW1lcyBDT05GSUdfKikgYW5kIGRpc3BsYXlcbiIKKyJ0aGVpciBy
ZWxhdGlvbnMuICBSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBzdXBwb3J0ZWQuXG4iCisiRXhhbXBs
ZTogIFNlYXJjaCBmb3IgXCJeRk9PXCIuXG4iCisiUmVzdWx0OlxuIgorIi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisi
U3ltYm9sOiBGT08gWyA9IG1dXG4iCisiUHJvbXB0OiBGb28gYnVzIGlzIHVzZWQgdG8gZHJpdmUg
dGhlIGJhciBIV1xuIgorIkRlZmluZWQgYXQgZHJpdmVycy9wY2kvS2NvbmZpZzo0N1xuIgorIkRl
cGVuZHMgb246IFg4Nl9MT0NBTF9BUElDICYmIFg4Nl9JT19BUElDIHx8IElBNjRcbiIKKyJMb2Nh
dGlvbjpcbiIKKyIgIC0+IEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlTQSwgSVNBKVxuIgor
IiAgICAtPiBQQ0kgc3VwcG9ydCAoUENJIFsgPSB5XSlcbiIKKyIgICAgICAtPiBQQ0kgYWNjZXNz
IG1vZGUgKDxjaG9pY2U+IFsgPSB5XSlcbiIKKyJTZWxlY3RzOiBMSUJDUkMzMlxuIgorIlNlbGVj
dGVkIGJ5OiBCQVJcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIm8gIFRoZSBsaW5lICdQcm9tcHQ6JyBzaG93
cyB0aGUgdGV4dCBkaXNwbGF5ZWQgZm9yIHRoaXMgc3ltYm9sIGluXG4iCisiICAgdGhlIG1lbnUg
aGllcmFyY2h5LlxuIgorIm8gIFRoZSAnRGVmaW5lZCBhdCcgbGluZSB0ZWxscyBhdCB3aGF0IGZp
bGUgLyBsaW5lIG51bWJlciB0aGUgc3ltYm9sIGlzXG4iCisiICAgZGVmaW5lZC5cbiIKKyJvICBU
aGUgJ0RlcGVuZHMgb246JyBsaW5lIGxpc3RzIHN5bWJvbHMgdGhhdCBuZWVkIHRvIGJlIGRlZmlu
ZWQgZm9yXG4iCisiICAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBhbmQgc2VsZWN0YWJsZSBp
biB0aGUgbWVudS5cbiIKKyJvICBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVsbCwgd2hlcmUgaW4g
dGhlIG1lbnUgc3RydWN0dXJlIHRoaXMgc3ltYm9sXG4iCisiICAgaXMgbG9jYXRlZC4gIEEgbG9j
YXRpb24gZm9sbG93ZWQgYnkgYSBbID0geV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpc1xuIgorIiAg
IGEgc2VsZWN0YWJsZSBtZW51IGl0ZW0sIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBpcyBkaXNwbGF5
ZWQgaW5zaWRlXG4iCisiICAgYnJhY2tldHMuXG4iCisibyAgVGhlICdTZWxlY3RzOicgbGluZSB0
ZWxscywgd2hhdCBzeW1ib2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkXG4iCisiICAg
aWYgdGhpcyBzeW1ib2wgaXMgc2VsZWN0ZWQgKHkgb3IgbSkuXG4iCisibyAgVGhlICdTZWxlY3Rl
ZCBieScgbGluZSB0ZWxscyB3aGF0IHN5bWJvbCBoYXMgc2VsZWN0ZWQgdGhpcyBzeW1ib2wuXG4i
CisiXG4iCisiT25seSByZWxldmFudCBsaW5lcyBhcmUgc2hvd24uXG4iCisiXG5cbiIKKyJTZWFy
Y2ggZXhhbXBsZXM6XG4iCisiVVNCICA9PiBmaW5kIGFsbCBzeW1ib2xzIGNvbnRhaW5pbmcgVVNC
XG4iCisiXlVTQiA9PiBmaW5kIGFsbCBzeW1ib2xzIHN0YXJ0aW5nIHdpdGggVVNCXG4iCisiVVNC
JCA9PiBmaW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIgorIlxuIjsKKworc3RydWN0
IG1pdGVtIHsKKwljaGFyIHN0clsyNTZdOworCWNoYXIgdGFnOworCXZvaWQgKnVzcnB0cjsKKwlp
bnQgaXNfdmlzaWJsZTsKK307CisKKyNkZWZpbmUgTUFYX01FTlVfSVRFTVMgNDA5Ngorc3RhdGlj
IGludCBzaG93X2FsbF9pdGVtczsKK3N0YXRpYyBpbnQgaW5kZW50Oworc3RhdGljIHN0cnVjdCBt
ZW51ICpjdXJyZW50X21lbnU7CitzdGF0aWMgaW50IGNoaWxkX2NvdW50Oworc3RhdGljIGludCBz
aW5nbGVfbWVudV9tb2RlOworLyogdGhlIHdpbmRvdyBpbiB3aGljaCBhbGwgaW5mb3JtYXRpb24g
YXBwZWFycyAqLworc3RhdGljIFdJTkRPVyAqbWFpbl93aW5kb3c7CisvKiB0aGUgbGFyZ2VzdCBz
aXplIG9mIHRoZSBtZW51IHdpbmRvdyAqLworc3RhdGljIGludCBtd2luX21heF9saW5lczsKK3N0
YXRpYyBpbnQgbXdpbl9tYXhfY29sczsKKy8qIHRoZSB3aW5kb3cgaW4gd2hpY2ggd2Ugc2hvdyBv
cHRpb24gYnV0dG9ucyAqLworc3RhdGljIE1FTlUgKmN1cnNlc19tZW51Oworc3RhdGljIElURU0g
KmN1cnNlc19tZW51X2l0ZW1zW01BWF9NRU5VX0lURU1TXTsKK3N0YXRpYyBzdHJ1Y3QgbWl0ZW0g
a19tZW51X2l0ZW1zW01BWF9NRU5VX0lURU1TXTsKK3N0YXRpYyBpbnQgaXRlbXNfbnVtOworc3Rh
dGljIGludCBnbG9iYWxfZXhpdDsKKy8qIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYnV0dG9uICov
CitzdGF0aWMgY29uc3QgY2hhciAqY3VycmVudF9pbnN0cnVjdGlvbnMgPSBtZW51X2luc3RydWN0
aW9uczsKKworc3RhdGljIGNoYXIgKmRpYWxvZ19pbnB1dF9yZXN1bHQ7CitzdGF0aWMgaW50IGRp
YWxvZ19pbnB1dF9yZXN1bHRfbGVuOworCitzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICpt
ZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRp
YyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZf
bG9hZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKTsKK3N0YXRpYyB2b2lkIHNo
b3dfaGVscChzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgaW50IGRvX2V4aXQodm9pZCk7Citz
dGF0aWMgdm9pZCBzZXR1cF93aW5kb3dzKHZvaWQpOworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYo
dm9pZCk7CisKK3R5cGVkZWYgdm9pZCAoKmZ1bmN0aW9uX2tleV9oYW5kbGVyX3QpKGludCAqa2V5
LCBzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjEoaW50ICprZXksIHN0
cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGljIHZvaWQgaGFuZGxlX2YyKGludCAqa2V5
LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mMyhpbnQg
KmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjQo
aW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGljIHZvaWQgaGFuZGxl
X2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhh
bmRsZV9mNihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9p
ZCBoYW5kbGVfZjcoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGlj
IHZvaWQgaGFuZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0
YXRpYyB2b2lkIGhhbmRsZV9mOShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7
CisKK3N0cnVjdCBmdW5jdGlvbl9rZXlzIHsKKwljb25zdCBjaGFyICprZXlfc3RyOworCWNvbnN0
IGNoYXIgKmZ1bmM7CisJZnVuY3Rpb25fa2V5IGtleTsKKwlmdW5jdGlvbl9rZXlfaGFuZGxlcl90
IGhhbmRsZXI7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGZ1bmN0aW9uX2tleXNfbnVtID0gOTsK
K3N0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fa2V5cyBmdW5jdGlvbl9rZXlzW10gPSB7CisJeworCQku
a2V5X3N0ciA9ICJGMSIsCisJCS5mdW5jID0gIkhlbHAiLAorCQkua2V5ID0gRl9IRUxQLAorCQku
aGFuZGxlciA9IGhhbmRsZV9mMSwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjIiLAorCQkuZnVu
YyA9ICJTeW1JbmZvIiwKKwkJLmtleSA9IEZfU1lNQk9MLAorCQkuaGFuZGxlciA9IGhhbmRsZV9m
MiwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjMiLAorCQkuZnVuYyA9ICJIZWxwIDIiLAorCQku
a2V5ID0gRl9JTlNUUywKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjMsCisJfSwKKwl7CisJCS5rZXlf
c3RyID0gIkY0IiwKKwkJLmZ1bmMgPSAiU2hvd0FsbCIsCisJCS5rZXkgPSBGX0NPTkYsCisJCS5o
YW5kbGVyID0gaGFuZGxlX2Y0LAorCX0sCisJeworCQkua2V5X3N0ciA9ICJGNSIsCisJCS5mdW5j
ID0gIkJhY2siLAorCQkua2V5ID0gRl9CQUNLLAorCQkuaGFuZGxlciA9IGhhbmRsZV9mNSwKKwl9
LAorCXsKKwkJLmtleV9zdHIgPSAiRjYiLAorCQkuZnVuYyA9ICJTYXZlIiwKKwkJLmtleSA9IEZf
U0FWRSwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjYsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY3
IiwKKwkJLmZ1bmMgPSAiTG9hZCIsCisJCS5rZXkgPSBGX0xPQUQsCisJCS5oYW5kbGVyID0gaGFu
ZGxlX2Y3LAorCX0sCisJeworCQkua2V5X3N0ciA9ICJGOCIsCisJCS5mdW5jID0gIlN5bVNlYXJj
aCIsCisJCS5rZXkgPSBGX1NFQVJDSCwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjgsCisJfSwKKwl7
CisJCS5rZXlfc3RyID0gIkY5IiwKKwkJLmZ1bmMgPSAiRXhpdCIsCisJCS5rZXkgPSBGX0VYSVQs
CisJCS5oYW5kbGVyID0gaGFuZGxlX2Y5LAorCX0sCit9OworCitzdGF0aWMgdm9pZCBwcmludF9m
dW5jdGlvbl9saW5lKHZvaWQpCit7CisJaW50IGk7CisJaW50IG9mZnNldCA9IDE7CisJY29uc3Qg
aW50IHNraXAgPSAxOworCWludCBsaW5lcyA9IGdldG1heHkoc3Rkc2NyKTsKKworCWZvciAoaSA9
IDA7IGkgPCBmdW5jdGlvbl9rZXlzX251bTsgaSsrKSB7CisJCSh2b2lkKSB3YXR0cnNldChtYWlu
X3dpbmRvdywgYXR0cmlidXRlc1tGVU5DVElPTl9ISUdITElHSFRdKTsKKwkJbXZ3cHJpbnR3KG1h
aW5fd2luZG93LCBsaW5lcy0zLCBvZmZzZXQsCisJCQkJIiVzIiwKKwkJCQlmdW5jdGlvbl9rZXlz
W2ldLmtleV9zdHIpOworCQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJpYnV0ZXNb
RlVOQ1RJT05fVEVYVF0pOworCQlvZmZzZXQgKz0gc3RybGVuKGZ1bmN0aW9uX2tleXNbaV0ua2V5
X3N0cik7CisJCW12d3ByaW50dyhtYWluX3dpbmRvdywgbGluZXMtMywKKwkJCQlvZmZzZXQsICIl
cyIsCisJCQkJZnVuY3Rpb25fa2V5c1tpXS5mdW5jKTsKKwkJb2Zmc2V0ICs9IHN0cmxlbihmdW5j
dGlvbl9rZXlzW2ldLmZ1bmMpICsgc2tpcDsKKwl9CisJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2lu
ZG93LCBhdHRyaWJ1dGVzW05PUk1BTF0pOworfQorCisvKiBoZWxwICovCitzdGF0aWMgdm9pZCBo
YW5kbGVfZjEoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJc2hvd19z
Y3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJIkdsb2JhbCBoZWxwIiwgbmNvbmZfZ2xvYmFsX2hl
bHApOworCXJldHVybjsKK30KKworLyogc3ltYm9sZSBoZWxwICovCitzdGF0aWMgdm9pZCBoYW5k
bGVfZjIoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJc2hvd19oZWxw
KGN1cnJlbnRfaXRlbSk7CisJcmV0dXJuOworfQorCisvKiBpbnN0cnVjdGlvbnMgKi8KK3N0YXRp
YyB2b2lkIGhhbmRsZV9mMyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sK
KwlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkiU2hvcnQgaGVscCIsCisJCQljdXJy
ZW50X2luc3RydWN0aW9ucyk7CisJcmV0dXJuOworfQorCisvKiBjb25maWcgKi8KK3N0YXRpYyB2
b2lkIGhhbmRsZV9mNChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlp
bnQgcmVzID0gYnRuX2RpYWxvZyhtYWluX3dpbmRvdywKKwkJCSJTaG93IGFsbCBzeW1ib2xzPyIs
CisJCQkyLAorCQkJIiAgIDxTaG93IEFsbD4gICAiLAorCQkJIjxEb24ndCBzaG93IGFsbD4iKTsK
KwlpZiAocmVzID09IDApCisJCXNob3dfYWxsX2l0ZW1zID0gMTsKKwllbHNlIGlmIChyZXMgPT0g
MSkKKwkJc2hvd19hbGxfaXRlbXMgPSAwOworCisJcmV0dXJuOworfQorCisvKiBiYWNrICovCitz
dGF0aWMgdm9pZCBoYW5kbGVfZjUoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0p
Cit7CisJKmtleSA9IEtFWV9MRUZUOworCXJldHVybjsKK30KKworLyogc2F2ZSAqLworc3RhdGlj
IHZvaWQgaGFuZGxlX2Y2KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQorewor
CWNvbmZfc2F2ZSgpOworCXJldHVybjsKK30KKworLyogbG9hZCAqLworc3RhdGljIHZvaWQgaGFu
ZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCWNvbmZfbG9h
ZCgpOworCXJldHVybjsKK30KKworLyogc2VhcmNoICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZjgo
aW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJc2VhcmNoX2NvbmYoKTsK
KwlyZXR1cm47Cit9CisKKy8qIGV4aXQgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9mOShpbnQgKmtl
eSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlkb19leGl0KCk7CisJcmV0dXJuOwor
fQorCisvKiByZXR1cm4gIT0gMCB0byBpbmRpY2F0ZSB0aGUga2V5IHdhcyBoYW5kbGVzICovCitz
dGF0aWMgaW50IHByb2Nlc3Nfc3BlY2lhbF9rZXlzKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqbWVu
dSkKK3sKKwlpbnQgaTsKKworCWlmICgqa2V5ID09IEtFWV9SRVNJWkUpIHsKKwkJc2V0dXBfd2lu
ZG93cygpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZnVuY3Rpb25fa2V5
c19udW07IGkrKykgeworCQlpZiAoKmtleSA9PSBLRVlfRihmdW5jdGlvbl9rZXlzW2ldLmtleSkg
fHwKKwkJICAgICprZXkgPT0gJzAnICsgZnVuY3Rpb25fa2V5c1tpXS5rZXkpeworCQkJZnVuY3Rp
b25fa2V5c1tpXS5oYW5kbGVyKGtleSwgbWVudSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwor
CXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9pdGVtcyh2b2lkKQoreworCWludCBp
OworCWZvciAoaSA9IDA7IGN1cnNlc19tZW51X2l0ZW1zW2ldOyBpKyspCisJCWZyZWVfaXRlbShj
dXJzZXNfbWVudV9pdGVtc1tpXSk7CisJYnplcm8oY3Vyc2VzX21lbnVfaXRlbXMsIHNpemVvZihj
dXJzZXNfbWVudV9pdGVtcykpOworCWJ6ZXJvKGtfbWVudV9pdGVtcywgc2l6ZW9mKGtfbWVudV9p
dGVtcykpOworCWl0ZW1zX251bSA9IDA7Cit9CisKK3R5cGVkZWYgZW51bSB7TUFUQ0hfVElOS0VS
X1BBVFRFUk5fVVAsIE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sCisJRklORF9ORVhUX01BVENI
X0RPV04sIEZJTkRfTkVYVF9NQVRDSF9VUH0gbWF0Y2hfZjsKKworLyogcmV0dXJuIHRoZSBpbmRl
eCBvZiB0aGUgbWF0Y2hlZCBpdGVtLCBvciAtMSBpZiBubyBzdWNoIGl0ZW0gZXhpc3RzICovCitz
dGF0aWMgaW50IGdldF9tZXh0X21hdGNoKGNvbnN0IGNoYXIgKm1hdGNoX3N0ciwgbWF0Y2hfZiBm
bGFnKQoreworCWludCBtYXRjaF9zdGFydCA9IGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKGN1cnNl
c19tZW51KSk7CisJaW50IGluZGV4OworCisJaWYgKGZsYWcgPT0gRklORF9ORVhUX01BVENIX0RP
V04pCisJCSsrbWF0Y2hfc3RhcnQ7CisJZWxzZSBpZiAoZmxhZyA9PSBGSU5EX05FWFRfTUFUQ0hf
VVApCisJCS0tbWF0Y2hfc3RhcnQ7CisKKwlpbmRleCA9IG1hdGNoX3N0YXJ0OworCWluZGV4ID0g
KGluZGV4ICsgaXRlbXNfbnVtKSAlIGl0ZW1zX251bTsKKwl3aGlsZSAodHJ1ZSkgeworCQljaGFy
ICpzdHIgPSBrX21lbnVfaXRlbXNbaW5kZXhdLnN0cjsKKwkJaWYgKHN0cmNhc2VzdHIoc3RyLCBt
YXRjaF9zdHIpICE9IE5VTEwpCisJCQlyZXR1cm4gaW5kZXg7CisJCWlmIChmbGFnID09IEZJTkRf
TkVYVF9NQVRDSF9VUCB8fAorCQkgICAgZmxhZyA9PSBNQVRDSF9USU5LRVJfUEFUVEVSTl9VUCkK
KwkJCS0taW5kZXg7CisJCWVsc2UKKwkJCSsraW5kZXg7CisJCWluZGV4ID0gKGluZGV4ICsgaXRl
bXNfbnVtKSAlIGl0ZW1zX251bTsKKwkJaWYgKGluZGV4ID09IG1hdGNoX3N0YXJ0KQorCQkJcmV0
dXJuIC0xOworCX0KK30KKworLyogTWFrZSBhIG5ldyBpdGVtLiAqLworc3RhdGljIHZvaWQgaXRl
bV9tYWtlKHN0cnVjdCBtZW51ICptZW51LCBjaGFyIHRhZywgY29uc3QgY2hhciAqZm10LCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKworCWlmIChpdGVtc19udW0gPiBNQVhfTUVOVV9JVEVNUy0xKQor
CQlyZXR1cm47CisKKwliemVybygma19tZW51X2l0ZW1zW2l0ZW1zX251bV0sIHNpemVvZihrX21l
bnVfaXRlbXNbMF0pKTsKKwlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS50YWcgPSB0YWc7CisJa19t
ZW51X2l0ZW1zW2l0ZW1zX251bV0udXNycHRyID0gbWVudTsKKwlpZiAobWVudSAhPSBOVUxMKQor
CQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNpYmxlID0KKwkJCW1lbnVfaXNfdmlzaWJs
ZShtZW51KTsKKwllbHNlCisJCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLmlzX3Zpc2libGUgPSAx
OworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKGtfbWVudV9pdGVtc1tpdGVtc19u
dW1dLnN0ciwKKwkJICBzaXplb2Yoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyKSwKKwkJICBm
bXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJaWYgKCFrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5p
c192aXNpYmxlKQorCQltZW1jcHkoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyLCAiWFhYIiwg
Myk7CisKKwljdXJzZXNfbWVudV9pdGVtc1tpdGVtc19udW1dID0gbmV3X2l0ZW0oCisJCQlrX21l
bnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIsCisJCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIp
OworCXNldF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSwKKwkJCSZr
X21lbnVfaXRlbXNbaXRlbXNfbnVtXSk7CisJLyoKKwlpZiAoIWtfbWVudV9pdGVtc1tpdGVtc19u
dW1dLmlzX3Zpc2libGUpCisJCWl0ZW1fb3B0c19vZmYoY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNf
bnVtXSwgT19TRUxFQ1RBQkxFKTsKKwkqLworCisJaXRlbXNfbnVtKys7CisJY3Vyc2VzX21lbnVf
aXRlbXNbaXRlbXNfbnVtXSA9IE5VTEw7Cit9CisKKy8qIHZlcnkgaGFja2lzaC4gYWRkcyBhIHN0
cmluZyB0byB0aGUgbGFzdCBpdGVtIGFkZGVkICovCitzdGF0aWMgdm9pZCBpdGVtX2FkZF9zdHIo
Y29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQgaW5kZXggPSBpdGVt
c19udW0tMTsKKwljaGFyIG5ld19zdHJbMjU2XTsKKwljaGFyIHRtcF9zdHJbMjU2XTsKKworCWlm
IChpbmRleCA8IDApCisJCXJldHVybjsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50
ZihuZXdfc3RyLCBzaXplb2YobmV3X3N0ciksIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJc25w
cmludGYodG1wX3N0ciwgc2l6ZW9mKHRtcF9zdHIpLCAiJXMlcyIsCisJCQlrX21lbnVfaXRlbXNb
aW5kZXhdLnN0ciwgbmV3X3N0cik7CisJc3RybmNweShrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwK
KwkJdG1wX3N0ciwKKwkJc2l6ZW9mKGtfbWVudV9pdGVtc1tpbmRleF0uc3RyKSk7CisKKwlmcmVl
X2l0ZW0oY3Vyc2VzX21lbnVfaXRlbXNbaW5kZXhdKTsKKwljdXJzZXNfbWVudV9pdGVtc1tpbmRl
eF0gPSBuZXdfaXRlbSgKKwkJCWtfbWVudV9pdGVtc1tpbmRleF0uc3RyLAorCQkJa19tZW51X2l0
ZW1zW2luZGV4XS5zdHIpOworCXNldF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21lbnVfaXRlbXNbaW5k
ZXhdLAorCQkJJmtfbWVudV9pdGVtc1tpbmRleF0pOworfQorCisvKiBnZXQgdGhlIHRhZyBvZiB0
aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0gKi8KK3N0YXRpYyBjaGFyIGl0ZW1fdGFnKHZvaWQp
Cit7CisJSVRFTSAqY3VyOworCXN0cnVjdCBtaXRlbSAqbWN1cjsKKworCWN1ciA9IGN1cnJlbnRf
aXRlbShjdXJzZXNfbWVudSk7CisJaWYgKGN1ciA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwltY3Vy
ID0gKHN0cnVjdCBtaXRlbSAqKSBpdGVtX3VzZXJwdHIoY3VyKTsKKwlyZXR1cm4gbWN1ci0+dGFn
OworfQorCitzdGF0aWMgaW50IGN1cnNlc19pdGVtX2luZGV4KHZvaWQpCit7CisJcmV0dXJuICBp
dGVtX2luZGV4KGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSkpOworfQorCitzdGF0aWMgdm9pZCAq
aXRlbV9kYXRhKHZvaWQpCit7CisJSVRFTSAqY3VyOworCXN0cnVjdCBtaXRlbSAqbWN1cjsKKwor
CWN1ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7CisJaWYgKCFjdXIpCisJCXJldHVybiBO
VUxMOworCW1jdXIgPSAoc3RydWN0IG1pdGVtICopIGl0ZW1fdXNlcnB0cihjdXIpOworCXJldHVy
biBtY3VyLT51c3JwdHI7CisKK30KKworc3RhdGljIGludCBpdGVtX2lzX3RhZyhjaGFyIHRhZykK
K3sKKwlyZXR1cm4gaXRlbV90YWcoKSA9PSB0YWc7Cit9CisKK3N0YXRpYyBjaGFyIGZpbGVuYW1l
W1BBVEhfTUFYKzFdOworc3RhdGljIGNoYXIgbWVudV9iYWNrdGl0bGVbUEFUSF9NQVgrMTI4XTsK
K3N0YXRpYyBjb25zdCBjaGFyICpzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZp
Z19maWxlbmFtZSkKK3sKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzbnByaW50ZihtZW51X2JhY2t0
aXRsZSwgc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSwKKwkJCSIlcyAtICVzIiwgY29uZmlnX2ZpbGVu
YW1lLCByb290bWVudS5wcm9tcHQtPnRleHQpOworCWlmIChzaXplID49IHNpemVvZihtZW51X2Jh
Y2t0aXRsZSkpCisJCW1lbnVfYmFja3RpdGxlW3NpemVvZihtZW51X2JhY2t0aXRsZSktMV0gPSAn
XDAnOworCisJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMi
LCBjb25maWdfZmlsZW5hbWUpOworCWlmIChzaXplID49IHNpemVvZihmaWxlbmFtZSkpCisJCWZp
bGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAnXDAnOworCXJldHVybiBtZW51X2JhY2t0aXRs
ZTsKK30KKworLyogcmV0dXJuID0gMCBtZWFucyB3ZSBhcmUgc3VjY2Vzc2Z1bC4KKyAqIC0xIG1l
YW5zIGdvIG9uIGRvaW5nIHdoYXQgeW91IHdlcmUgZG9pbmcKKyAqLworc3RhdGljIGludCBkb19l
eGl0KHZvaWQpCit7CisJaW50IHJlczsKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkgeworCQln
bG9iYWxfZXhpdCA9IDE7CisJCXJldHVybiAwOworCX0KKwlyZXMgPSBidG5fZGlhbG9nKG1haW5f
d2luZG93LAorCQkJIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29uZmlndXJhdGlvbj9c
biIKKwkJCQkiPEVTQz4gdG8gY2FuY2VsIGFuZCByZXN1bWUgbmNvbmZpZy4iLAorCQkJMiwKKwkJ
CSIgICA8c2F2ZT4gICAiLAorCQkJIjxkb24ndCBzYXZlPiIpOworCWlmIChyZXMgPT0gS0VZX0VY
SVQpIHsKKwkJZ2xvYmFsX2V4aXQgPSAwOworCQlyZXR1cm4gLTE7CisJfQorCisJLyogaWYgd2Ug
Z290IGhlcmUsIHRoZSB1c2VyIHJlYWxseSB3YW50cyB0byBleGl0ICovCisJc3dpdGNoIChyZXMp
IHsKKwljYXNlIDA6CisJCXJlcyA9IGNvbmZfd3JpdGUoZmlsZW5hbWUpOworCQlpZiAocmVzKQor
CQkJYnRuX2RpYWxvZygKKwkJCQltYWluX3dpbmRvdywKKwkJCQkiRXJyb3IgZHVyaW5nIHdyaXRp
bmcgb2YgY29uZmlndXJhdGlvbi5cbiIKKwkJCQkgICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdl
cyB3ZXJlIE5PVCBzYXZlZC4iLAorCQkJCSAgMSwKKwkJCQkgICI8T0s+Iik7CisJCWNvbmZfd3Jp
dGVfYXV0b2NvbmYoMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJ0bl9kaWFsb2coCisJCQlt
YWluX3dpbmRvdywKKwkJCSJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZl
ZC4iLAorCQkJMSwKKwkJCSI8T0s+Iik7CisJCWJyZWFrOworCX0KKwlnbG9iYWxfZXhpdCA9IDE7
CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKK3sKKwlz
dHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsKKwlzdHJ1Y3QgZ3N0ciByZXM7CisJc3RydWN0IGdzdHIg
dGl0bGU7CisJY2hhciAqZGlhbG9nX2lucHV0OworCWludCBkcmVzOworCisJdGl0bGUgPSBzdHJf
bmV3KCk7CisJc3RyX3ByaW50ZiggJnRpdGxlLCAiRW50ZXIgKHN1YilzdHJpbmcgb3IgcmVnZXhw
IHRvIHNlYXJjaCBmb3IgIgorCQkJICAgICAgIih3aXRoIG9yIHdpdGhvdXQgXCIlc1wiKSIsIENP
TkZJR18pOworCithZ2FpbjoKKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LAor
CQkJIlNlYXJjaCBDb25maWd1cmF0aW9uIFBhcmFtZXRlciIsCisJCQlzdHJfZ2V0KCZ0aXRsZSks
CisJCQkiIiwgJmRpYWxvZ19pbnB1dF9yZXN1bHQsICZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7
CisJc3dpdGNoIChkcmVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCXNob3df
c2Nyb2xsX3dpbihtYWluX3dpbmRvdywKKwkJCQkiU2VhcmNoIENvbmZpZ3VyYXRpb24iLCBzZWFy
Y2hfaGVscCk7CisJCWdvdG8gYWdhaW47CisJZGVmYXVsdDoKKwkJc3RyX2ZyZWUoJnRpdGxlKTsK
KwkJcmV0dXJuOworCX0KKworCS8qIHN0cmlwIHRoZSBwcmVmaXggaWYgbmVjZXNzYXJ5ICovCisJ
ZGlhbG9nX2lucHV0ID0gZGlhbG9nX2lucHV0X3Jlc3VsdDsKKwlpZiAoc3RybmNhc2VjbXAoZGlh
bG9nX2lucHV0X3Jlc3VsdCwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSA9PSAwKQorCQlkaWFs
b2dfaW5wdXQgKz0gc3RybGVuKENPTkZJR18pOworCisJc3ltX2FyciA9IHN5bV9yZV9zZWFyY2go
ZGlhbG9nX2lucHV0KTsKKwlyZXMgPSBnZXRfcmVsYXRpb25zX3N0cihzeW1fYXJyLCBOVUxMKTsK
KwlmcmVlKHN5bV9hcnIpOworCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywKKwkJCSJTZWFy
Y2ggUmVzdWx0cyIsIHN0cl9nZXQoJnJlcykpOworCXN0cl9mcmVlKCZyZXMpOworCXN0cl9mcmVl
KCZ0aXRsZSk7Cit9CisKKworc3RhdGljIHZvaWQgYnVpbGRfY29uZihzdHJ1Y3QgbWVudSAqbWVu
dSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0
cnVjdCBtZW51ICpjaGlsZDsKKwlpbnQgdHlwZSwgdG1wLCBkb2ludCA9IDI7CisJdHJpc3RhdGUg
dmFsOworCWNoYXIgY2g7CisKKwlpZiAoIW1lbnUgfHwgKCFzaG93X2FsbF9pdGVtcyAmJiAhbWVu
dV9pc192aXNpYmxlKG1lbnUpKSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCXBy
b3AgPSBtZW51LT5wcm9tcHQ7CisJaWYgKCFzeW0pIHsKKwkJaWYgKHByb3AgJiYgbWVudSAhPSBj
dXJyZW50X21lbnUpIHsKKwkJCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdCht
ZW51KTsKKwkJCWVudW0gcHJvcF90eXBlIHB0eXBlOworCQkJcHR5cGUgPSBtZW51LT5wcm9tcHQg
PyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJCQlzd2l0Y2ggKHB0eXBlKSB7CisJ
CQljYXNlIFBfTUVOVToKKwkJCQljaGlsZF9jb3VudCsrOworCQkJCXByb21wdCA9IHByb21wdDsK
KwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkgeworCQkJCQlpdGVtX21ha2UobWVudSwgJ20nLAor
CQkJCQkJIiVzJSpjJXMiLAorCQkJCQkJbWVudS0+ZGF0YSA/ICItLT4iIDogIisrPiIsCisJCQkJ
CQlpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJfSBlbHNlCisJCQkJCWl0ZW1fbWFrZSht
ZW51LCAnbScsCisJCQkJCQkgICIgICAlKmMlcyAgJXMiLAorCQkJCQkJICBpbmRlbnQgKyAxLCAn
ICcsIHByb21wdCwKKwkJCQkJCSAgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+
Iik7CisKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSAmJiBtZW51LT5kYXRhKQorCQkJCQlnb3Rv
IGNvbmZfY2hpbGRzOworCQkJCXJldHVybjsKKwkJCWNhc2UgUF9DT01NRU5UOgorCQkJCWlmIChw
cm9tcHQpIHsKKwkJCQkJY2hpbGRfY291bnQrKzsKKwkJCQkJaXRlbV9tYWtlKG1lbnUsICc6JywK
KwkJCQkJCSIgICAlKmMqKiogJXMgKioqIiwKKwkJCQkJCWluZGVudCArIDEsICcgJywKKwkJCQkJ
CXByb21wdCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAocHJvbXB0
KSB7CisJCQkJCWNoaWxkX2NvdW50Kys7CisJCQkJCWl0ZW1fbWFrZShtZW51LCAnOicsICItLS0l
KmMlcyIsCisJCQkJCQlpbmRlbnQgKyAxLCAnICcsCisJCQkJCQlwcm9tcHQpOworCQkJCX0KKwkJ
CX0KKwkJfSBlbHNlCisJCQlkb2ludCA9IDA7CisJCWdvdG8gY29uZl9jaGlsZHM7CisJfQorCisJ
dHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJ
c3RydWN0IHN5bWJvbCAqZGVmX3N5bSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN5bSk7CisJCXN0
cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7CisKKwkJY2hpbGRfY291bnQrKzsKKwkJZm9yIChj
aGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAo
bWVudV9pc192aXNpYmxlKGNoaWxkKSAmJiBjaGlsZC0+c3ltID09IGRlZl9zeW0pCisJCQkJZGVm
X21lbnUgPSBjaGlsZDsKKwkJfQorCisJCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3lt
KTsKKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQkJc3dpdGNoICh0eXBlKSB7CisJ
CQljYXNlIFNfQk9PTEVBTjoKKwkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAiWyVjXSIsCisJCQkJ
CQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOworCQkJCWJyZWFrOworCQkJY2FzZSBTX1RSSVNUQVRF
OgorCQkJCXN3aXRjaCAodmFsKSB7CisJCQkJY2FzZSB5ZXM6CisJCQkJCWNoID0gJyonOworCQkJ
CQlicmVhazsKKwkJCQljYXNlIG1vZDoKKwkJCQkJY2ggPSAnTSc7CisJCQkJCWJyZWFrOworCQkJ
CWRlZmF1bHQ6CisJCQkJCWNoID0gJyAnOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaXRlbV9t
YWtlKG1lbnUsICd0JywgIjwlYz4iLCBjaCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7
CisJCQlpdGVtX21ha2UobWVudSwgZGVmX21lbnUgPyAndCcgOiAnOicsICIgICAiKTsKKwkJfQor
CisJCWl0ZW1fYWRkX3N0cigiJSpjJXMiLCBpbmRlbnQgKyAxLAorCQkJCScgJywgbWVudV9nZXRf
cHJvbXB0KG1lbnUpKTsKKwkJaWYgKHZhbCA9PSB5ZXMpIHsKKwkJCWlmIChkZWZfbWVudSkgewor
CQkJCWl0ZW1fYWRkX3N0cigiICglcykiLAorCQkJCQltZW51X2dldF9wcm9tcHQoZGVmX21lbnUp
KTsKKwkJCQlpdGVtX2FkZF9zdHIoIiAgLS0tPiIpOworCQkJCWlmIChkZWZfbWVudS0+bGlzdCkg
eworCQkJCQlpbmRlbnQgKz0gMjsKKwkJCQkJYnVpbGRfY29uZihkZWZfbWVudSk7CisJCQkJCWlu
ZGVudCAtPSAyOworCQkJCX0KKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSB7CisJCWlm
IChtZW51ID09IGN1cnJlbnRfbWVudSkgeworCQkJaXRlbV9tYWtlKG1lbnUsICc6JywKKwkJCQki
LS0tJSpjJXMiLCBpbmRlbnQgKyAxLAorCQkJCScgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsK
KwkJCWdvdG8gY29uZl9jaGlsZHM7CisJCX0KKwkJY2hpbGRfY291bnQrKzsKKwkJdmFsID0gc3lt
X2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0p
ICYmIHZhbCA9PSB5ZXMpIHsKKwkJCWl0ZW1fbWFrZShtZW51LCAnOicsICIgICAiKTsKKwkJfSBl
bHNlIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQkJaWYgKHN5
bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIlslY10iLAor
CQkJCQkJdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQllbHNlCisJCQkJCWl0ZW1fbWFrZSht
ZW51LCAndCcsICItJWMtIiwKKwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJYnJl
YWs7CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3dpdGNoICh2YWwpIHsKKwkJCQljYXNlIHll
czoKKwkJCQkJY2ggPSAnKic7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgbW9kOgorCQkJCQljaCA9
ICdNJzsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJY2ggPSAnICc7CisJCQkJCWJy
ZWFrOworCQkJCX0KKwkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCQkJCWlmIChz
eW0tPnJldl9kZXAudHJpID09IG1vZCkKKwkJCQkJCWl0ZW1fbWFrZShtZW51LAorCQkJCQkJCSd0
JywgInslY30iLCBjaCk7CisJCQkJCWVsc2UKKwkJCQkJCWl0ZW1fbWFrZShtZW51LAorCQkJCQkJ
CSd0JywgIjwlYz4iLCBjaCk7CisJCQkJfSBlbHNlCisJCQkJCWl0ZW1fbWFrZShtZW51LCAndCcs
ICItJWMtIiwgY2gpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0bXAgPSAyICsgc3Ry
bGVuKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOworCQkJCWl0ZW1fbWFrZShtZW51LCAncycs
ICIgICAgKCVzKSIsCisJCQkJCQlzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKKwkJCQl0bXAg
PSBpbmRlbnQgLSB0bXAgKyA0OworCQkJCWlmICh0bXAgPCAwKQorCQkJCQl0bXAgPSAwOworCQkJ
CWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIHRtcCwgJyAnLAorCQkJCQkJbWVudV9nZXRfcHJvbXB0
KG1lbnUpLAorCQkJCQkJKHN5bV9oYXNfdmFsdWUoc3ltKSB8fAorCQkJCQkJICFzeW1faXNfY2hh
bmdhYmxlKHN5bSkpID8gIiIgOgorCQkJCQkJIiAoTkVXKSIpOworCQkJCWdvdG8gY29uZl9jaGls
ZHM7CisJCQl9CisJCX0KKwkJaXRlbV9hZGRfc3RyKCIlKmMlcyVzIiwgaW5kZW50ICsgMSwgJyAn
LAorCQkJCW1lbnVfZ2V0X3Byb21wdChtZW51KSwKKwkJCQkoc3ltX2hhc192YWx1ZShzeW0pIHx8
ICFzeW1faXNfY2hhbmdhYmxlKHN5bSkpID8KKwkJCQkiIiA6ICIgKE5FVykiKTsKKwkJaWYgKG1l
bnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7CisJCQlpdGVtX2Fk
ZF9zdHIoIiAgJXMiLCBtZW51X2lzX2VtcHR5KG1lbnUpID8gIi0tLS0iIDogIi0tLT4iKTsKKwkJ
CXJldHVybjsKKwkJfQorCX0KKworY29uZl9jaGlsZHM6CisJaW5kZW50ICs9IGRvaW50OworCWZv
ciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkKKwkJYnVp
bGRfY29uZihjaGlsZCk7CisJaW5kZW50IC09IGRvaW50OworfQorCitzdGF0aWMgdm9pZCByZXNl
dF9tZW51KHZvaWQpCit7CisJdW5wb3N0X21lbnUoY3Vyc2VzX21lbnUpOworCWNsZWFuX2l0ZW1z
KCk7Cit9CisKKy8qIGFkanVzdCB0aGUgbWVudSB0byBzaG93IHRoaXMgaXRlbS4KKyAqIHByZWZl
ciBub3QgdG8gc2Nyb2xsIHRoZSBtZW51IGlmIHBvc3NpYmxlKi8KK3N0YXRpYyB2b2lkIGNlbnRl
cl9pdGVtKGludCBzZWxlY3RlZF9pbmRleCwgaW50ICpsYXN0X3RvcF9yb3cpCit7CisJaW50IHRv
cHJvdzsKKworCXNldF90b3Bfcm93KGN1cnNlc19tZW51LCAqbGFzdF90b3Bfcm93KTsKKwl0b3By
b3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKKwlpZiAoc2VsZWN0ZWRfaW5kZXggPCB0b3Byb3cg
fHwKKwkgICAgc2VsZWN0ZWRfaW5kZXggPj0gdG9wcm93K213aW5fbWF4X2xpbmVzKSB7CisJCXRv
cHJvdyA9IG1heChzZWxlY3RlZF9pbmRleC1td2luX21heF9saW5lcy8yLCAwKTsKKwkJaWYgKHRv
cHJvdyA+PSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1td2luX21heF9saW5lcykKKwkJCXRvcHJv
dyA9IGl0ZW1fY291bnQoY3Vyc2VzX21lbnUpLW13aW5fbWF4X2xpbmVzOworCQlzZXRfdG9wX3Jv
dyhjdXJzZXNfbWVudSwgdG9wcm93KTsKKwl9CisJc2V0X2N1cnJlbnRfaXRlbShjdXJzZXNfbWVu
dSwKKwkJCWN1cnNlc19tZW51X2l0ZW1zW3NlbGVjdGVkX2luZGV4XSk7CisJKmxhc3RfdG9wX3Jv
dyA9IHRvcHJvdzsKKwlwb3N0X21lbnUoY3Vyc2VzX21lbnUpOworCXJlZnJlc2hfYWxsX3dpbmRv
d3MobWFpbl93aW5kb3cpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgcmVzZXRfbWVu
dSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlICovCitzdGF0aWMgdm9pZCBzaG93X21lbnUoY29uc3Qg
Y2hhciAqcHJvbXB0LCBjb25zdCBjaGFyICppbnN0cnVjdGlvbnMsCisJCWludCBzZWxlY3RlZF9p
bmRleCwgaW50ICpsYXN0X3RvcF9yb3cpCit7CisJaW50IG1heHgsIG1heHk7CisJV0lORE9XICpt
ZW51X3dpbmRvdzsKKworCWN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zOworCisJ
Y2xlYXIoKTsKKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJpYnV0ZXNbTk9STUFM
XSk7CisJcHJpbnRfaW5fbWlkZGxlKHN0ZHNjciwgMSwgMCwgZ2V0bWF4eChzdGRzY3IpLAorCQkJ
bWVudV9iYWNrdGl0bGUsCisJCQlhdHRyaWJ1dGVzW01BSU5fSEVBRElOR10pOworCisJKHZvaWQp
IHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9CT1hdKTsKKwlib3go
bWFpbl93aW5kb3csIDAsIDApOworCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmli
dXRlc1tNQUlOX01FTlVfSEVBRElOR10pOworCW12d3ByaW50dyhtYWluX3dpbmRvdywgMCwgMywg
IiAlcyAiLCBwcm9tcHQpOworCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRl
c1tOT1JNQUxdKTsKKworCXNldF9tZW51X2l0ZW1zKGN1cnNlc19tZW51LCBjdXJzZXNfbWVudV9p
dGVtcyk7CisKKwkvKiBwb3NpdGlvbiB0aGUgbWVudSBhdCB0aGUgbWlkZGxlIG9mIHRoZSBzY3Jl
ZW4gKi8KKwlzY2FsZV9tZW51KGN1cnNlc19tZW51LCAmbWF4eSwgJm1heHgpOworCW1heHggPSBt
aW4obWF4eCwgbXdpbl9tYXhfY29scy0yKTsKKwltYXh5ID0gbXdpbl9tYXhfbGluZXM7CisJbWVu
dV93aW5kb3cgPSBkZXJ3aW4obWFpbl93aW5kb3csCisJCQltYXh5LAorCQkJbWF4eCwKKwkJCTIs
CisJCQkobXdpbl9tYXhfY29scy1tYXh4KS8yKTsKKwlrZXlwYWQobWVudV93aW5kb3csIFRSVUUp
OworCXNldF9tZW51X3dpbihjdXJzZXNfbWVudSwgbWVudV93aW5kb3cpOworCXNldF9tZW51X3N1
YihjdXJzZXNfbWVudSwgbWVudV93aW5kb3cpOworCisJLyogbXVzdCByZWFzc2VydCB0aGlzIGFm
dGVyIGNoYW5naW5nIGl0ZW1zLCBvdGhlcndpc2UgcmV0dXJucyB0byBhCisJICogZGVmYXVsdCBv
ZiAxNgorCSAqLworCXNldF9tZW51X2Zvcm1hdChjdXJzZXNfbWVudSwgbWF4eSwgMSk7CisJY2Vu
dGVyX2l0ZW0oc2VsZWN0ZWRfaW5kZXgsIGxhc3RfdG9wX3Jvdyk7CisJc2V0X21lbnVfZm9ybWF0
KGN1cnNlc19tZW51LCBtYXh5LCAxKTsKKworCXByaW50X2Z1bmN0aW9uX2xpbmUoKTsKKworCS8q
IFBvc3QgdGhlIG1lbnUgKi8KKwlwb3N0X21lbnUoY3Vyc2VzX21lbnUpOworCXJlZnJlc2hfYWxs
X3dpbmRvd3MobWFpbl93aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCBhZGpfbWF0Y2hfZGlyKG1h
dGNoX2YgKm1hdGNoX2RpcmVjdGlvbikKK3sKKwlpZiAoKm1hdGNoX2RpcmVjdGlvbiA9PSBGSU5E
X05FWFRfTUFUQ0hfRE9XTikKKwkJKm1hdGNoX2RpcmVjdGlvbiA9CisJCQlNQVRDSF9USU5LRVJf
UEFUVEVSTl9ET1dOOworCWVsc2UgaWYgKCptYXRjaF9kaXJlY3Rpb24gPT0gRklORF9ORVhUX01B
VENIX1VQKQorCQkqbWF0Y2hfZGlyZWN0aW9uID0KKwkJCU1BVENIX1RJTktFUl9QQVRURVJOX1VQ
OworCS8qIGVsc2UsIGRvIG5vIGNoYW5nZS4uICovCit9CisKK3N0cnVjdCBtYXRjaF9zdGF0ZQor
eworCWludCBpbl9zZWFyY2g7CisJbWF0Y2hfZiBtYXRjaF9kaXJlY3Rpb247CisJY2hhciBwYXR0
ZXJuWzI1Nl07Cit9OworCisvKiBSZXR1cm4gMCBtZWFucyBJIGhhdmUgaGFuZGxlZCB0aGUga2V5
LiBJbiBzdWNoIGEgY2FzZSwgYW5zIHNob3VsZCBob2xkIHRoZQorICogaXRlbSB0byBjZW50ZXIs
IG9yIC0xIG90aGVyd2lzZS4KKyAqIEVsc2UgcmV0dXJuIC0xIC4KKyAqLworc3RhdGljIGludCBk
b19tYXRjaChpbnQga2V5LCBzdHJ1Y3QgbWF0Y2hfc3RhdGUgKnN0YXRlLCBpbnQgKmFucykKK3sK
KwljaGFyIGMgPSAoY2hhcikga2V5OworCWludCB0ZXJtaW5hdGVfc2VhcmNoID0gMDsKKwkqYW5z
ID0gLTE7CisJaWYgKGtleSA9PSAnLycgfHwgKHN0YXRlLT5pbl9zZWFyY2ggJiYga2V5ID09IDI3
KSkgeworCQltb3ZlKDAsIDApOworCQlyZWZyZXNoKCk7CisJCWNscnRvZW9sKCk7CisJCXN0YXRl
LT5pbl9zZWFyY2ggPSAxLXN0YXRlLT5pbl9zZWFyY2g7CisJCWJ6ZXJvKHN0YXRlLT5wYXR0ZXJu
LCBzaXplb2Yoc3RhdGUtPnBhdHRlcm4pKTsKKwkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbiA9IE1B
VENIX1RJTktFUl9QQVRURVJOX0RPV047CisJCXJldHVybiAwOworCX0gZWxzZSBpZiAoIXN0YXRl
LT5pbl9zZWFyY2gpCisJCXJldHVybiAxOworCisJaWYgKGlzYWxudW0oYykgfHwgaXNncmFwaChj
KSB8fCBjID09ICcgJykgeworCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4p
XSA9IGM7CisJCXN0YXRlLT5wYXR0ZXJuW3N0cmxlbihzdGF0ZS0+cGF0dGVybildID0gJ1wwJzsK
KwkJYWRqX21hdGNoX2Rpcigmc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7CisJCSphbnMgPSBnZXRf
bWV4dF9tYXRjaChzdGF0ZS0+cGF0dGVybiwKKwkJCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsK
Kwl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTikgeworCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9u
ID0gRklORF9ORVhUX01BVENIX0RPV047CisJCSphbnMgPSBnZXRfbWV4dF9tYXRjaChzdGF0ZS0+
cGF0dGVybiwKKwkJCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsKKwl9IGVsc2UgaWYgKGtleSA9
PSBLRVlfVVApIHsKKwkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbiA9IEZJTkRfTkVYVF9NQVRDSF9V
UDsKKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLAorCQkJCXN0YXRlLT5t
YXRjaF9kaXJlY3Rpb24pOworCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9CQUNLU1BBQ0UgfHwga2V5
ID09IDggfHwga2V5ID09IDEyNykgeworCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBh
dHRlcm4pLTFdID0gJ1wwJzsKKwkJYWRqX21hdGNoX2Rpcigmc3RhdGUtPm1hdGNoX2RpcmVjdGlv
bik7CisJfSBlbHNlCisJCXRlcm1pbmF0ZV9zZWFyY2ggPSAxOworCisJaWYgKHRlcm1pbmF0ZV9z
ZWFyY2gpIHsKKwkJc3RhdGUtPmluX3NlYXJjaCA9IDA7CisJCWJ6ZXJvKHN0YXRlLT5wYXR0ZXJu
LCBzaXplb2Yoc3RhdGUtPnBhdHRlcm4pKTsKKwkJbW92ZSgwLCAwKTsKKwkJcmVmcmVzaCgpOwor
CQljbHJ0b2VvbCgpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMg
dm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBtZW51ICpzdWJtZW51ID0g
TlVMTDsKKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJc3Ry
dWN0IHN5bWJvbCAqc3ltOworCWludCByZXM7CisJaW50IGN1cnJlbnRfaW5kZXggPSAwOworCWlu
dCBsYXN0X3RvcF9yb3cgPSAwOworCXN0cnVjdCBtYXRjaF9zdGF0ZSBtYXRjaF9zdGF0ZSA9IHsK
KwkJLmluX3NlYXJjaCA9IDAsCisJCS5tYXRjaF9kaXJlY3Rpb24gPSBNQVRDSF9USU5LRVJfUEFU
VEVSTl9ET1dOLAorCQkucGF0dGVybiA9ICIiLAorCX07CisKKwl3aGlsZSAoIWdsb2JhbF9leGl0
KSB7CisJCXJlc2V0X21lbnUoKTsKKwkJY3VycmVudF9tZW51ID0gbWVudTsKKwkJYnVpbGRfY29u
ZihtZW51KTsKKwkJaWYgKCFjaGlsZF9jb3VudCkKKwkJCWJyZWFrOworCisJCXNob3dfbWVudShw
cm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKKwkJCQltZW51X2luc3RydWN0aW9ucywKKwkJ
CQljdXJyZW50X2luZGV4LCAmbGFzdF90b3Bfcm93KTsKKwkJa2V5cGFkKChtZW51X3dpbihjdXJz
ZXNfbWVudSkpLCBUUlVFKTsKKwkJd2hpbGUgKCFnbG9iYWxfZXhpdCkgeworCQkJaWYgKG1hdGNo
X3N0YXRlLmluX3NlYXJjaCkgeworCQkJCW12cHJpbnR3KDAsIDAsCisJCQkJCSJzZWFyY2hpbmc6
ICVzIiwgbWF0Y2hfc3RhdGUucGF0dGVybik7CisJCQkJY2xydG9lb2woKTsKKwkJCX0KKwkJCXJl
ZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQkJcmVzID0gd2dldGNoKG1lbnVfd2lu
KGN1cnNlc19tZW51KSk7CisJCQlpZiAoIXJlcykKKwkJCQlicmVhazsKKwkJCWlmIChkb19tYXRj
aChyZXMsICZtYXRjaF9zdGF0ZSwgJmN1cnJlbnRfaW5kZXgpID09IDApIHsKKwkJCQlpZiAoY3Vy
cmVudF9pbmRleCAhPSAtMSkKKwkJCQkJY2VudGVyX2l0ZW0oY3VycmVudF9pbmRleCwKKwkJCQkJ
CSAgICAmbGFzdF90b3Bfcm93KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChwcm9jZXNz
X3NwZWNpYWxfa2V5cygmcmVzLAorCQkJCQkJKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKSkK
KwkJCQlicmVhazsKKwkJCXN3aXRjaCAocmVzKSB7CisJCQljYXNlIEtFWV9ET1dOOgorCQkJCW1l
bnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfRE9XTl9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNh
c2UgS0VZX1VQOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfVVBfSVRFTSk7CisJ
CQkJYnJlYWs7CisJCQljYXNlIEtFWV9OUEFHRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVu
dSwgUkVRX1NDUl9EUEFHRSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9QUEFHRToKKwkJCQlt
ZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1NDUl9VUEFHRSk7CisJCQkJYnJlYWs7CisJCQlj
YXNlIEtFWV9IT01FOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfRklSU1RfSVRF
TSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9FTkQ6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2Vz
X21lbnUsIFJFUV9MQVNUX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSAnaCc6CisJCQljYXNl
ICc/JzoKKwkJCQlzaG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKTsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8CisJCQkJcmVzID09
IDMyIHx8IHJlcyA9PSAnbicgfHwgcmVzID09ICd5JyB8fAorCQkJCXJlcyA9PSBLRVlfTEVGVCB8
fCByZXMgPT0gS0VZX1JJR0hUIHx8CisJCQkJcmVzID09ICdtJykKKwkJCQlicmVhazsKKwkJCXJl
ZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQl9CisKKwkJcmVmcmVzaF9hbGxfd2lu
ZG93cyhtYWluX3dpbmRvdyk7CisJCS8qIGlmIEVTQyBvciBsZWZ0Ki8KKwkJaWYgKHJlcyA9PSAy
NyB8fCAobWVudSAhPSAmcm9vdG1lbnUgJiYgcmVzID09IEtFWV9MRUZUKSkKKwkJCWJyZWFrOwor
CisJCS8qIHJlbWVtYmVyIGxvY2F0aW9uIGluIHRoZSBtZW51ICovCisJCWxhc3RfdG9wX3JvdyA9
IHRvcF9yb3coY3Vyc2VzX21lbnUpOworCQljdXJyZW50X2luZGV4ID0gY3Vyc2VzX2l0ZW1faW5k
ZXgoKTsKKworCQlpZiAoIWl0ZW1fdGFnKCkpCisJCQljb250aW51ZTsKKworCQlzdWJtZW51ID0g
KHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpOworCQlpZiAoIXN1Ym1lbnUgfHwgIW1lbnVfaXNf
dmlzaWJsZShzdWJtZW51KSkKKwkJCWNvbnRpbnVlOworCQlzeW0gPSBzdWJtZW51LT5zeW07CisK
KwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAnICc6CisJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkK
KwkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCQllbHNlIGlmIChpdGVtX2lz
X3RhZygnbScpKQorCQkJCWNvbmYoc3VibWVudSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUklH
SFQ6CisJCWNhc2UgMTA6IC8qIEVOVEVSIFdBUyBQUkVTU0VEICovCisJCQlzd2l0Y2ggKGl0ZW1f
dGFnKCkpIHsKKwkJCWNhc2UgJ20nOgorCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlKQorCQkJCQlz
dWJtZW51LT5kYXRhID0KKwkJCQkJCSh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKKwkJ
CQllbHNlCisJCQkJCWNvbmYoc3VibWVudSk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoKKwkJ
CQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmCisJCQkJICAgIHN5bV9nZXRfdHJpc3RhdGVfdmFs
dWUoc3ltKSA9PSB5ZXMpCisJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOworCQkJCWVsc2UgaWYg
KHN1Ym1lbnUtPnByb21wdCAmJgorCQkJCQkgc3VibWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVO
VSkKKwkJCQkJY29uZihzdWJtZW51KTsKKwkJCQllbHNlIGlmIChyZXMgPT0gMTApCisJCQkJCXN5
bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgor
CQkJCWNvbmZfc3RyaW5nKHN1Ym1lbnUpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJ
CWNhc2UgJ3knOgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpIHsKKwkJCQlpZiAoc3ltX3NldF90
cmlzdGF0ZV92YWx1ZShzeW0sIHllcykpCisJCQkJCWJyZWFrOworCQkJCWlmIChzeW1fc2V0X3Ry
aXN0YXRlX3ZhbHVlKHN5bSwgbW9kKSkKKwkJCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywgc2V0
bW9kX3RleHQsIDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ24nOgorCQkJaWYgKGl0ZW1f
aXNfdGFnKCd0JykpCisJCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsKKwkJCWJy
ZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRf
dHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRp
YyB2b2lkIGNvbmZfbWVzc2FnZV9jYWxsYmFjayhjb25zdCBjaGFyICpzKQoreworCWJ0bl9kaWFs
b2cobWFpbl93aW5kb3csIHMsIDEsICI8T0s+Iik7Cit9CisKK3N0YXRpYyB2b2lkIHNob3dfaGVs
cChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwOworCisJaWYgKCFtZW51
KQorCQlyZXR1cm47CisKKwloZWxwID0gc3RyX25ldygpOworCW1lbnVfZ2V0X2V4dF9oZWxwKG1l
bnUsICZoZWxwKTsKKwlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csIG1lbnVfZ2V0X3Byb21w
dChtZW51KSwgc3RyX2dldCgmaGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsKK30KKworc3RhdGlj
IHZvaWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJY29uc3QgY2hhciAqcHJv
bXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCXN0cnVjdCBtZW51ICpjaGlsZCA9IE5VTEw7
CisJc3RydWN0IHN5bWJvbCAqYWN0aXZlOworCWludCBzZWxlY3RlZF9pbmRleCA9IDA7CisJaW50
IGxhc3RfdG9wX3JvdyA9IDA7CisJaW50IHJlcywgaSA9IDA7CisJc3RydWN0IG1hdGNoX3N0YXRl
IG1hdGNoX3N0YXRlID0geworCQkuaW5fc2VhcmNoID0gMCwKKwkJLm1hdGNoX2RpcmVjdGlvbiA9
IE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sCisJCS5wYXR0ZXJuID0gIiIsCisJfTsKKworCWFj
dGl2ZSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSk7CisJLyogdGhpcyBpcyBtb3N0
bHkgZHVwbGljYXRlZCBmcm9tIHRoZSBjb25mKCkgZnVuY3Rpb24uICovCisJd2hpbGUgKCFnbG9i
YWxfZXhpdCkgeworCQlyZXNldF9tZW51KCk7CisKKwkJZm9yIChpID0gMCwgY2hpbGQgPSBtZW51
LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKCFzaG93X2FsbF9p
dGVtcyAmJiAhbWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYg
KGNoaWxkLT5zeW0gPT0gc3ltX2dldF9jaG9pY2VfdmFsdWUobWVudS0+c3ltKSkKKwkJCQlpdGVt
X21ha2UoY2hpbGQsICc6JywgIjxYPiAlcyIsCisJCQkJCQltZW51X2dldF9wcm9tcHQoY2hpbGQp
KTsKKwkJCWVsc2UgaWYgKGNoaWxkLT5zeW0pCisJCQkJaXRlbV9tYWtlKGNoaWxkLCAnOicsICIg
ICAgJXMiLAorCQkJCQkJbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQllbHNlCisJCQkJaXRl
bV9tYWtlKGNoaWxkLCAnOicsICIqKiogJXMgKioqIiwKKwkJCQkJCW1lbnVfZ2V0X3Byb21wdChj
aGlsZCkpOworCisJCQlpZiAoY2hpbGQtPnN5bSA9PSBhY3RpdmUpeworCQkJCWxhc3RfdG9wX3Jv
dyA9IHRvcF9yb3coY3Vyc2VzX21lbnUpOworCQkJCXNlbGVjdGVkX2luZGV4ID0gaTsKKwkJCX0K
KwkJCWkrKzsKKwkJfQorCQlzaG93X21lbnUocHJvbXB0ID8gcHJvbXB0IDogIkNob2ljZSBNZW51
IiwKKwkJCQlyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zLAorCQkJCXNlbGVjdGVkX2luZGV4LAorCQkJ
CSZsYXN0X3RvcF9yb3cpOworCQl3aGlsZSAoIWdsb2JhbF9leGl0KSB7CisJCQlpZiAobWF0Y2hf
c3RhdGUuaW5fc2VhcmNoKSB7CisJCQkJbXZwcmludHcoMCwgMCwgInNlYXJjaGluZzogJXMiLAor
CQkJCQkgbWF0Y2hfc3RhdGUucGF0dGVybik7CisJCQkJY2xydG9lb2woKTsKKwkJCX0KKwkJCXJl
ZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQkJcmVzID0gd2dldGNoKG1lbnVfd2lu
KGN1cnNlc19tZW51KSk7CisJCQlpZiAoIXJlcykKKwkJCQlicmVhazsKKwkJCWlmIChkb19tYXRj
aChyZXMsICZtYXRjaF9zdGF0ZSwgJnNlbGVjdGVkX2luZGV4KSA9PSAwKSB7CisJCQkJaWYgKHNl
bGVjdGVkX2luZGV4ICE9IC0xKQorCQkJCQljZW50ZXJfaXRlbShzZWxlY3RlZF9pbmRleCwKKwkJ
CQkJCSAgICAmbGFzdF90b3Bfcm93KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChwcm9j
ZXNzX3NwZWNpYWxfa2V5cygKKwkJCQkJCSZyZXMsCisJCQkJCQkoc3RydWN0IG1lbnUgKikgaXRl
bV9kYXRhKCkpKQorCQkJCWJyZWFrOworCQkJc3dpdGNoIChyZXMpIHsKKwkJCWNhc2UgS0VZX0RP
V046CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9ET1dOX0lURU0pOworCQkJCWJy
ZWFrOworCQkJY2FzZSBLRVlfVVA6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9V
UF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX05QQUdFOgorCQkJCW1lbnVfZHJpdmVy
KGN1cnNlc19tZW51LCBSRVFfU0NSX0RQQUdFKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX1BQ
QUdFOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfU0NSX1VQQUdFKTsKKwkJCQli
cmVhazsKKwkJCWNhc2UgS0VZX0hPTUU6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJF
UV9GSVJTVF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX0VORDoKKwkJCQltZW51X2Ry
aXZlcihjdXJzZXNfbWVudSwgUkVRX0xBU1RfSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlICdo
JzoKKwkJCWNhc2UgJz8nOgorCQkJCXNob3dfaGVscCgoc3RydWN0IG1lbnUgKikgaXRlbV9kYXRh
KCkpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0gMjcgfHwg
cmVzID09ICcgJyB8fAorCQkJCQlyZXMgPT0gS0VZX0xFRlQpeworCQkJCWJyZWFrOworCQkJfQor
CQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisJCX0KKwkJLyogaWYgRVNDIG9y
IGxlZnQgKi8KKwkJaWYgKHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0xFRlQpCisJCQlicmVhazsK
KworCQljaGlsZCA9IGl0ZW1fZGF0YSgpOworCQlpZiAoIWNoaWxkIHx8ICFtZW51X2lzX3Zpc2li
bGUoY2hpbGQpIHx8ICFjaGlsZC0+c3ltKQorCQkJY29udGludWU7CisJCXN3aXRjaCAocmVzKSB7
CisJCWNhc2UgJyAnOgorCQljYXNlICAxMDoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlzeW1fc2V0
X3RyaXN0YXRlX3ZhbHVlKGNoaWxkLT5zeW0sIHllcyk7CisJCQlyZXR1cm47CisJCWNhc2UgJ2gn
OgorCQljYXNlICc/JzoKKwkJCXNob3dfaGVscChjaGlsZCk7CisJCQlhY3RpdmUgPSBjaGlsZC0+
c3ltOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VYSVQ6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9
CisKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KQoreworCWNvbnN0
IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKworCXdoaWxlICgxKSB7CisJ
CWludCByZXM7CisJCWNvbnN0IGNoYXIgKmhlYWRpbmc7CisKKwkJc3dpdGNoIChzeW1fZ2V0X3R5
cGUobWVudS0+c3ltKSkgeworCQljYXNlIFNfSU5UOgorCQkJaGVhZGluZyA9IGlucHV0Ym94X2lu
c3RydWN0aW9uc19pbnQ7CisJCQlicmVhazsKKwkJY2FzZSBTX0hFWDoKKwkJCWhlYWRpbmcgPSBp
bnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4OworCQkJYnJlYWs7CisJCWNhc2UgU19TVFJJTkc6CisJ
CQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsKKwkJCWJyZWFrOworCQlk
ZWZhdWx0OgorCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBuY29uZiBlcnJvciEiOworCQl9CisJCXJl
cyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywKKwkJCQlwcm9tcHQgPyBwcm9tcHQgOiAi
TWFpbiBNZW51IiwKKwkJCQloZWFkaW5nLAorCQkJCXN5bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUt
PnN5bSksCisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHQsCisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1
bHRfbGVuKTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKHN5bV9zZXRfc3Ry
aW5nX3ZhbHVlKG1lbnUtPnN5bSwKKwkJCQkJCWRpYWxvZ19pbnB1dF9yZXN1bHQpKQorCQkJCXJl
dHVybjsKKwkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csCisJCQkJIllvdSBoYXZlIG1hZGUgYW4g
aW52YWxpZCBlbnRyeS4iLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X2hlbHAo
bWVudSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVhJVDoKKwkJCXJldHVybjsKKwkJfQorCX0K
K30KKworc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpCit7CisJd2hpbGUgKDEpIHsKKwkJaW50
IHJlczsKKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LAorCQkJCU5VTEwsIGxv
YWRfY29uZmlnX3RleHQsCisJCQkJZmlsZW5hbWUsCisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHQs
CisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2Fz
ZSAwOgorCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJCXJldHVybjsKKwkJCWlm
ICghY29uZl9yZWFkKGRpYWxvZ19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxl
bmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKKwkJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsK
KwkJCQlyZXR1cm47CisJCQl9CisJCQlidG5fZGlhbG9nKG1haW5fd2luZG93LCAiRmlsZSBkb2Vz
IG5vdCBleGlzdCEiLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X3Njcm9sbF93
aW4obWFpbl93aW5kb3csCisJCQkJCSJMb2FkIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiwKKwkJ
CQkJbG9hZF9jb25maWdfaGVscCk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVhJVDoKKwkJCXJl
dHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9zYXZlKHZvaWQpCit7CisJd2hp
bGUgKDEpIHsKKwkJaW50IHJlczsKKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93
LAorCQkJCU5VTEwsIHNhdmVfY29uZmlnX3RleHQsCisJCQkJZmlsZW5hbWUsCisJCQkJJmRpYWxv
Z19pbnB1dF9yZXN1bHQsCisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsKKwkJc3dpdGNo
IChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJ
CXJldHVybjsKKwkJCXJlcyA9IGNvbmZfd3JpdGUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7CisJCQlp
ZiAoIXJlcykgeworCQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7
CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywgIkNhbid0IGNy
ZWF0ZSBmaWxlISIsCisJCQkJMSwgIjxPSz4iKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlz
aG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJIlNhdmUgQWx0ZXJuYXRlIENvbmZpZ3Vy
YXRpb24iLAorCQkJCXNhdmVfY29uZmlnX2hlbHApOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VY
SVQ6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3dpbmRvd3Mo
dm9pZCkKK3sKKwlpbnQgbGluZXMsIGNvbHVtbnM7CisKKwlnZXRtYXh5eChzdGRzY3IsIGxpbmVz
LCBjb2x1bW5zKTsKKworCWlmIChtYWluX3dpbmRvdyAhPSBOVUxMKQorCQlkZWx3aW4obWFpbl93
aW5kb3cpOworCisJLyogc2V0IHVwIHRoZSBtZW51IGFuZCBtZW51IHdpbmRvdyAqLworCW1haW5f
d2luZG93ID0gbmV3d2luKGxpbmVzLTIsIGNvbHVtbnMtMiwgMiwgMSk7CisJa2V5cGFkKG1haW5f
d2luZG93LCBUUlVFKTsKKwltd2luX21heF9saW5lcyA9IGxpbmVzLTc7CisJbXdpbl9tYXhfY29s
cyA9IGNvbHVtbnMtNjsKKworCS8qIHBhbmVscyBvcmRlciBpcyBmcm9tIGJvdHRvbSB0byB0b3Ag
Ki8KKwluZXdfcGFuZWwobWFpbl93aW5kb3cpOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIg
KiphdikKK3sKKwlpbnQgbGluZXMsIGNvbHVtbnM7CisJY2hhciAqbW9kZTsKKworCWlmIChhYyA+
IDEgJiYgc3RyY21wKGF2WzFdLCAiLXMiKSA9PSAwKSB7CisJCS8qIFNpbGVuY2UgY29uZl9yZWFk
KCkgdW50aWwgdGhlIHJlYWwgY2FsbGJhY2sgaXMgc2V0IHVwICovCisJCWNvbmZfc2V0X21lc3Nh
Z2VfY2FsbGJhY2soTlVMTCk7CisJCWF2Kys7CisJfQorCWNvbmZfcGFyc2UoYXZbMV0pOworCWNv
bmZfcmVhZChOVUxMKTsKKworCW1vZGUgPSBnZXRlbnYoIk5DT05GSUdfTU9ERSIpOworCWlmICht
b2RlKSB7CisJCWlmICghc3RyY2FzZWNtcChtb2RlLCAic2luZ2xlX21lbnUiKSkKKwkJCXNpbmds
ZV9tZW51X21vZGUgPSAxOworCX0KKworCS8qIEluaXRpYWxpemUgY3Vyc2VzICovCisJaW5pdHNj
cigpOworCS8qIHNldCBjb2xvciB0aGVtZSAqLworCXNldF9jb2xvcnMoKTsKKworCWNicmVhaygp
OworCW5vZWNobygpOworCWtleXBhZChzdGRzY3IsIFRSVUUpOworCWN1cnNfc2V0KDApOworCisJ
Z2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7CisJaWYgKGNvbHVtbnMgPCA3NSB8fCBs
aW5lcyA8IDIwKSB7CisJCWVuZHdpbigpOworCQlwcmludGYoIllvdXIgdGVybWluYWwgc2hvdWxk
IGhhdmUgYXQgIgorCQkJImxlYXN0IDIwIGxpbmVzIGFuZCA3NSBjb2x1bW5zXG4iKTsKKwkJcmV0
dXJuIDE7CisJfQorCisJbm90aW1lb3V0KHN0ZHNjciwgRkFMU0UpOworI2lmIE5DVVJTRVNfUkVF
TlRSQU5UCisJc2V0X2VzY2RlbGF5KDEpOworI2Vsc2UKKwlFU0NERUxBWSA9IDE7CisjZW5kaWYK
KworCS8qIHNldCBidG5zIG1lbnUgKi8KKwljdXJzZXNfbWVudSA9IG5ld19tZW51KGN1cnNlc19t
ZW51X2l0ZW1zKTsKKwltZW51X29wdHNfb2ZmKGN1cnNlc19tZW51LCBPX1NIT1dERVNDKTsKKwlt
ZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fU0hPV01BVENIKTsKKwltZW51X29wdHNfb24oY3Vy
c2VzX21lbnUsIE9fT05FVkFMVUUpOworCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19OT05D
WUNMSUMpOworCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19JR05PUkVDQVNFKTsKKwlzZXRf
bWVudV9tYXJrKGN1cnNlc19tZW51LCAiICIpOworCXNldF9tZW51X2ZvcmUoY3Vyc2VzX21lbnUs
IGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0ZPUkVdKTsKKwlzZXRfbWVudV9iYWNrKGN1cnNlc19tZW51
LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9CQUNLXSk7CisJc2V0X21lbnVfZ3JleShjdXJzZXNfbWVu
dSwgYXR0cmlidXRlc1tNQUlOX01FTlVfR1JFWV0pOworCisJc2V0X2NvbmZpZ19maWxlbmFtZShj
b25mX2dldF9jb25maWduYW1lKCkpOworCXNldHVwX3dpbmRvd3MoKTsKKworCS8qIGNoZWNrIGZv
ciBLRVlfRlVOQygxKSAqLworCWlmIChoYXNfa2V5KEtFWV9GKDEpKSA9PSBGQUxTRSkgeworCQlz
aG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJIkluc3RydWN0aW9ucyIsCisJCQkJbWVu
dV9ub19mX2luc3RydWN0aW9ucyk7CisJfQorCisJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhj
b25mX21lc3NhZ2VfY2FsbGJhY2spOworCS8qIGRvIHRoZSB3b3JrICovCisJd2hpbGUgKCFnbG9i
YWxfZXhpdCkgeworCQljb25mKCZyb290bWVudSk7CisJCWlmICghZ2xvYmFsX2V4aXQgJiYgZG9f
ZXhpdCgpID09IDApCisJCQlicmVhazsKKwl9CisJLyogb2ssIHdlIGFyZSBkb25lICovCisJdW5w
b3N0X21lbnUoY3Vyc2VzX21lbnUpOworCWZyZWVfbWVudShjdXJzZXNfbWVudSk7CisJZGVsd2lu
KG1haW5fd2luZG93KTsKKwljbGVhcigpOworCXJlZnJlc2goKTsKKwllbmR3aW4oKTsKKwlyZXR1
cm4gMDsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuZ3VpLmMgYi9z
dXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1aS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwLi43N2Y1MjVhOAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbmNvbmYuZ3VpLmMKQEAgLTAsMCArMSw2NjQgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IE5pciBUemFjaGFyIDxuaXIu
dHphY2hhckBnbWFpbC5jb20+CisgKgorICogRGVyaXZlZCBmcm9tIG1lbnVjb25maWcuCisgKi8K
KyNpbmNsdWRlICJuY29uZi5oIgorI2luY2x1ZGUgImxrYy5oIgorCisvKiBhIGxpc3Qgb2YgYWxs
IHRoZSBkaWZmZXJlbnQgd2lkZ2V0cyB3ZSB1c2UgKi8KK2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVz
W0FUVFJfTUFYKzFdID0gezB9OworCisvKiBhdmFpbGFibGUgY29sb3JzOgorICAgQ09MT1JfQkxB
Q0sgICAwCisgICBDT0xPUl9SRUQgICAgIDEKKyAgIENPTE9SX0dSRUVOICAgMgorICAgQ09MT1Jf
WUVMTE9XICAzCisgICBDT0xPUl9CTFVFICAgIDQKKyAgIENPTE9SX01BR0VOVEEgNQorICAgQ09M
T1JfQ1lBTiAgICA2CisgICBDT0xPUl9XSElURSAgIDcKKyAgICovCitzdGF0aWMgdm9pZCBzZXRf
bm9ybWFsX2NvbG9ycyh2b2lkKQoreworCWluaXRfcGFpcihOT1JNQUwsIC0xLCAtMSk7CisJaW5p
dF9wYWlyKE1BSU5fSEVBRElORywgQ09MT1JfTUFHRU5UQSwgLTEpOworCisJLyogRk9SRSBpcyBm
b3IgdGhlIHNlbGVjdGVkIGl0ZW0gKi8KKwlpbml0X3BhaXIoTUFJTl9NRU5VX0ZPUkUsIC0xLCAt
MSk7CisJLyogQkFDSyBmb3IgYWxsIHRoZSByZXN0ICovCisJaW5pdF9wYWlyKE1BSU5fTUVOVV9C
QUNLLCAtMSwgLTEpOworCWluaXRfcGFpcihNQUlOX01FTlVfR1JFWSwgLTEsIC0xKTsKKwlpbml0
X3BhaXIoTUFJTl9NRU5VX0hFQURJTkcsIENPTE9SX0dSRUVOLCAtMSk7CisJaW5pdF9wYWlyKE1B
SU5fTUVOVV9CT1gsIENPTE9SX1lFTExPVywgLTEpOworCisJaW5pdF9wYWlyKFNDUk9MTFdJTl9U
RVhULCAtMSwgLTEpOworCWluaXRfcGFpcihTQ1JPTExXSU5fSEVBRElORywgQ09MT1JfR1JFRU4s
IC0xKTsKKwlpbml0X3BhaXIoU0NST0xMV0lOX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7CisKKwlp
bml0X3BhaXIoRElBTE9HX1RFWFQsIC0xLCAtMSk7CisJaW5pdF9wYWlyKERJQUxPR19CT1gsIENP
TE9SX1lFTExPVywgLTEpOworCWluaXRfcGFpcihESUFMT0dfTUVOVV9CQUNLLCBDT0xPUl9ZRUxM
T1csIC0xKTsKKwlpbml0X3BhaXIoRElBTE9HX01FTlVfRk9SRSwgQ09MT1JfUkVELCAtMSk7CisK
Kwlpbml0X3BhaXIoSU5QVVRfQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsKKwlpbml0X3BhaXIoSU5Q
VVRfSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsKKwlpbml0X3BhaXIoSU5QVVRfVEVYVCwgLTEs
IC0xKTsKKwlpbml0X3BhaXIoSU5QVVRfRklFTEQsIC0xLCAtMSk7CisKKwlpbml0X3BhaXIoRlVO
Q1RJT05fSElHSExJR0hULCAtMSwgLTEpOworCWluaXRfcGFpcihGVU5DVElPTl9URVhULCBDT0xP
Ul9ZRUxMT1csIC0xKTsKK30KKworLyogYXZhaWxhYmxlIGF0dHJpYnV0ZXM6CisgICBBX05PUk1B
TCAgICAgICAgTm9ybWFsIGRpc3BsYXkgKG5vIGhpZ2hsaWdodCkKKyAgIEFfU1RBTkRPVVQgICAg
ICBCZXN0IGhpZ2hsaWdodGluZyBtb2RlIG9mIHRoZSB0ZXJtaW5hbC4KKyAgIEFfVU5ERVJMSU5F
ICAgICBVbmRlcmxpbmluZworICAgQV9SRVZFUlNFICAgICAgIFJldmVyc2UgdmlkZW8KKyAgIEFf
QkxJTksgICAgICAgICBCbGlua2luZworICAgQV9ESU0gICAgICAgICAgIEhhbGYgYnJpZ2h0Cisg
ICBBX0JPTEQgICAgICAgICAgRXh0cmEgYnJpZ2h0IG9yIGJvbGQKKyAgIEFfUFJPVEVDVCAgICAg
ICBQcm90ZWN0ZWQgbW9kZQorICAgQV9JTlZJUyAgICAgICAgIEludmlzaWJsZSBvciBibGFuayBt
b2RlCisgICBBX0FMVENIQVJTRVQgICAgQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKKyAgIEFfQ0hB
UlRFWFQgICAgICBCaXQtbWFzayB0byBleHRyYWN0IGEgY2hhcmFjdGVyCisgICBDT0xPUl9QQUlS
KG4pICAgQ29sb3ItcGFpciBudW1iZXIgbgorICAgKi8KK3N0YXRpYyB2b2lkIG5vcm1hbF9jb2xv
cl90aGVtZSh2b2lkKQoreworCS8qIGF1dG9tYXRpY2FsbHkgYWRkIGNvbG9yLi4uICovCisjZGVm
aW5lIG1rYXR0cihuYW1lLCBhdHRyKSBkbyB7IFwKK2F0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyIHwg
Q09MT1JfUEFJUihuYW1lKTsgfSB3aGlsZSAoMCkKKwlta2F0dHIoTk9STUFMLCBOT1JNQUwpOwor
CW1rYXR0cihNQUlOX0hFQURJTkcsIEFfQk9MRCB8IEFfVU5ERVJMSU5FKTsKKworCW1rYXR0cihN
QUlOX01FTlVfRk9SRSwgQV9SRVZFUlNFKTsKKwlta2F0dHIoTUFJTl9NRU5VX0JBQ0ssIEFfTk9S
TUFMKTsKKwlta2F0dHIoTUFJTl9NRU5VX0dSRVksIEFfTk9STUFMKTsKKwlta2F0dHIoTUFJTl9N
RU5VX0hFQURJTkcsIEFfQk9MRCk7CisJbWthdHRyKE1BSU5fTUVOVV9CT1gsIEFfTk9STUFMKTsK
KworCW1rYXR0cihTQ1JPTExXSU5fVEVYVCwgQV9OT1JNQUwpOworCW1rYXR0cihTQ1JPTExXSU5f
SEVBRElORywgQV9CT0xEKTsKKwlta2F0dHIoU0NST0xMV0lOX0JPWCwgQV9CT0xEKTsKKworCW1r
YXR0cihESUFMT0dfVEVYVCwgQV9CT0xEKTsKKwlta2F0dHIoRElBTE9HX0JPWCwgQV9CT0xEKTsK
Kwlta2F0dHIoRElBTE9HX01FTlVfRk9SRSwgQV9TVEFORE9VVCk7CisJbWthdHRyKERJQUxPR19N
RU5VX0JBQ0ssIEFfTk9STUFMKTsKKworCW1rYXR0cihJTlBVVF9CT1gsIEFfTk9STUFMKTsKKwlt
a2F0dHIoSU5QVVRfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHIoSU5QVVRfVEVYVCwgQV9OT1JN
QUwpOworCW1rYXR0cihJTlBVVF9GSUVMRCwgQV9VTkRFUkxJTkUpOworCisJbWthdHRyKEZVTkNU
SU9OX0hJR0hMSUdIVCwgQV9CT0xEKTsKKwlta2F0dHIoRlVOQ1RJT05fVEVYVCwgQV9SRVZFUlNF
KTsKK30KKworc3RhdGljIHZvaWQgbm9fY29sb3JzX3RoZW1lKHZvaWQpCit7CisJLyogYXV0b21h
dGljYWxseSBhZGQgaGlnaGxpZ2h0LCBubyBjb2xvciAqLworI2RlZmluZSBta2F0dHJuKG5hbWUs
IGF0dHIpIHsgYXR0cmlidXRlc1tuYW1lXSA9IGF0dHI7IH0KKworCW1rYXR0cm4oTk9STUFMLCBO
T1JNQUwpOworCW1rYXR0cm4oTUFJTl9IRUFESU5HLCBBX0JPTEQgfCBBX1VOREVSTElORSk7CisK
Kwlta2F0dHJuKE1BSU5fTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsKKwlta2F0dHJuKE1BSU5fTUVO
VV9CQUNLLCBBX05PUk1BTCk7CisJbWthdHRybihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOwor
CW1rYXR0cm4oTUFJTl9NRU5VX0hFQURJTkcsIEFfQk9MRCk7CisJbWthdHRybihNQUlOX01FTlVf
Qk9YLCBBX05PUk1BTCk7CisKKwlta2F0dHJuKFNDUk9MTFdJTl9URVhULCBBX05PUk1BTCk7CisJ
bWthdHRybihTQ1JPTExXSU5fSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHJuKFNDUk9MTFdJTl9C
T1gsIEFfQk9MRCk7CisKKwlta2F0dHJuKERJQUxPR19URVhULCBBX05PUk1BTCk7CisJbWthdHRy
bihESUFMT0dfQk9YLCBBX0JPTEQpOworCW1rYXR0cm4oRElBTE9HX01FTlVfRk9SRSwgQV9TVEFO
RE9VVCk7CisJbWthdHRybihESUFMT0dfTUVOVV9CQUNLLCBBX05PUk1BTCk7CisKKwlta2F0dHJu
KElOUFVUX0JPWCwgQV9CT0xEKTsKKwlta2F0dHJuKElOUFVUX0hFQURJTkcsIEFfQk9MRCk7CisJ
bWthdHRybihJTlBVVF9URVhULCBBX05PUk1BTCk7CisJbWthdHRybihJTlBVVF9GSUVMRCwgQV9V
TkRFUkxJTkUpOworCisJbWthdHRybihGVU5DVElPTl9ISUdITElHSFQsIEFfQk9MRCk7CisJbWth
dHRybihGVU5DVElPTl9URVhULCBBX1JFVkVSU0UpOworfQorCit2b2lkIHNldF9jb2xvcnModm9p
ZCkKK3sKKwlzdGFydF9jb2xvcigpOworCXVzZV9kZWZhdWx0X2NvbG9ycygpOworCXNldF9ub3Jt
YWxfY29sb3JzKCk7CisJaWYgKGhhc19jb2xvcnMoKSkgeworCQlub3JtYWxfY29sb3JfdGhlbWUo
KTsKKwl9IGVsc2UgeworCQkvKiBnaXZlIGRlZmF1bHRzICovCisJCW5vX2NvbG9yc190aGVtZSgp
OworCX0KK30KKworCisvKiB0aGlzIGNoYW5nZXMgdGhlIHdpbmRvd3MgYXR0cmlidXRlcyAhISEg
Ki8KK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLAorCQlpbnQgc3RhcnR5LAorCQlp
bnQgc3RhcnR4LAorCQlpbnQgd2lkdGgsCisJCWNvbnN0IGNoYXIgKnN0cmluZywKKwkJY2h0eXBl
IGNvbG9yKQoreyAgICAgIGludCBsZW5ndGgsIHgsIHk7CisJZmxvYXQgdGVtcDsKKworCisJaWYg
KHdpbiA9PSBOVUxMKQorCQl3aW4gPSBzdGRzY3I7CisJZ2V0eXgod2luLCB5LCB4KTsKKwlpZiAo
c3RhcnR4ICE9IDApCisJCXggPSBzdGFydHg7CisJaWYgKHN0YXJ0eSAhPSAwKQorCQl5ID0gc3Rh
cnR5OworCWlmICh3aWR0aCA9PSAwKQorCQl3aWR0aCA9IDgwOworCisJbGVuZ3RoID0gc3RybGVu
KHN0cmluZyk7CisJdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkgLyAyOworCXggPSBzdGFydHggKyAo
aW50KXRlbXA7CisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgY29sb3IpOworCW12d3ByaW50dyh3aW4s
IHksIHgsICIlcyIsIHN0cmluZyk7CisJcmVmcmVzaCgpOworfQorCitpbnQgZ2V0X2xpbmVfbm8o
Y29uc3QgY2hhciAqdGV4dCkKK3sKKwlpbnQgaTsKKwlpbnQgdG90YWwgPSAxOworCisJaWYgKCF0
ZXh0KQorCQlyZXR1cm4gMDsKKworCWZvciAoaSA9IDA7IHRleHRbaV0gIT0gJ1wwJzsgaSsrKQor
CQlpZiAodGV4dFtpXSA9PSAnXG4nKQorCQkJdG90YWwrKzsKKwlyZXR1cm4gdG90YWw7Cit9CisK
K2NvbnN0IGNoYXIgKmdldF9saW5lKGNvbnN0IGNoYXIgKnRleHQsIGludCBsaW5lX25vKQorewor
CWludCBpOworCWludCBsaW5lcyA9IDA7CisKKwlpZiAoIXRleHQpCisJCXJldHVybiBOVUxMOwor
CisJZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAnICYmIGxpbmVzIDwgbGluZV9ubzsgaSsrKQor
CQlpZiAodGV4dFtpXSA9PSAnXG4nKQorCQkJbGluZXMrKzsKKwlyZXR1cm4gdGV4dCtpOworfQor
CitpbnQgZ2V0X2xpbmVfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmUpCit7CisJaW50IHJlcyA9IDA7
CisJd2hpbGUgKCpsaW5lICE9ICdcMCcgJiYgKmxpbmUgIT0gJ1xuJykgeworCQlsaW5lKys7CisJ
CXJlcysrOworCX0KKwlyZXR1cm4gcmVzOworfQorCisvKiBwcmludCBhbGwgbGluZXMgdG8gdGhl
IHdpbmRvdy4gKi8KK3ZvaWQgZmlsbF93aW5kb3coV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKnRl
eHQpCit7CisJaW50IHgsIHk7CisJaW50IHRvdGFsX2xpbmVzID0gZ2V0X2xpbmVfbm8odGV4dCk7
CisJaW50IGk7CisKKwlnZXRtYXh5eCh3aW4sIHksIHgpOworCS8qIGRvIG5vdCBnbyBvdmVyIGVu
ZCBvZiBsaW5lICovCisJdG90YWxfbGluZXMgPSBtaW4odG90YWxfbGluZXMsIHkpOworCWZvciAo
aSA9IDA7IGkgPCB0b3RhbF9saW5lczsgaSsrKSB7CisJCWNoYXIgdG1wW3grMTBdOworCQljb25z
dCBjaGFyICpsaW5lID0gZ2V0X2xpbmUodGV4dCwgaSk7CisJCWludCBsZW4gPSBnZXRfbGluZV9s
ZW5ndGgobGluZSk7CisJCXN0cm5jcHkodG1wLCBsaW5lLCBtaW4obGVuLCB4KSk7CisJCXRtcFts
ZW5dID0gJ1wwJzsKKwkJbXZ3cHJpbnR3KHdpbiwgaSwgMCwgIiVzIiwgdG1wKTsKKwl9Cit9CisK
Ky8qIGdldCB0aGUgbWVzc2FnZSwgYW5kIGJ1dHRvbnMuCisgKiBlYWNoIGJ1dHRvbiBtdXN0IGJl
IGEgY2hhcioKKyAqIHJldHVybiB0aGUgc2VsZWN0ZWQgYnV0dG9uCisgKgorICogdGhpcyBkaWFs
b2cgaXMgdXNlZCBmb3IgMiBkaWZmZXJlbnQgdGhpbmdzOgorICogMSkgc2hvdyBhIHRleHQgYm94
LCBubyBidXR0b25zLgorICogMikgc2hvdyBhIGRpYWxvZywgd2l0aCBob3Jpem9udGFsIGJ1dHRv
bnMKKyAqLworaW50IGJ0bl9kaWFsb2coV0lORE9XICptYWluX3dpbmRvdywgY29uc3QgY2hhciAq
bXNnLCBpbnQgYnRuX251bSwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciAqYnRuOworCWlu
dCBidG5zX3dpZHRoID0gMDsKKwlpbnQgbXNnX2xpbmVzID0gMDsKKwlpbnQgbXNnX3dpZHRoID0g
MDsKKwlpbnQgdG90YWxfd2lkdGg7CisJaW50IHdpbl9yb3dzID0gMDsKKwlXSU5ET1cgKndpbjsK
KwlXSU5ET1cgKm1zZ193aW47CisJV0lORE9XICptZW51X3dpbjsKKwlNRU5VICptZW51OworCUlU
RU0gKmJ0bnNbYnRuX251bSsxXTsKKwlpbnQgaSwgeCwgeTsKKwlpbnQgcmVzID0gLTE7CisKKwor
CXZhX3N0YXJ0KGFwLCBidG5fbnVtKTsKKwlmb3IgKGkgPSAwOyBpIDwgYnRuX251bTsgaSsrKSB7
CisJCWJ0biA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkJYnRuc1tpXSA9IG5ld19pdGVtKGJ0biwg
IiIpOworCQlidG5zX3dpZHRoICs9IHN0cmxlbihidG4pKzE7CisJfQorCXZhX2VuZChhcCk7CisJ
YnRuc1tidG5fbnVtXSA9IE5VTEw7CisKKwkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6
ICovCisJbXNnX2xpbmVzID0gZ2V0X2xpbmVfbm8obXNnKTsKKwlmb3IgKGkgPSAwOyBpIDwgbXNn
X2xpbmVzOyBpKyspIHsKKwkJY29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKG1zZywgaSk7CisJ
CWludCBsZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7CisJCWlmIChtc2dfd2lkdGggPCBsZW4p
CisJCQltc2dfd2lkdGggPSBsZW47CisJfQorCisJdG90YWxfd2lkdGggPSBtYXgobXNnX3dpZHRo
LCBidG5zX3dpZHRoKTsKKwkvKiBwbGFjZSBkaWFsb2cgaW4gbWlkZGxlIG9mIHNjcmVlbiAqLwor
CXkgPSAoZ2V0bWF4eShzdGRzY3IpLShtc2dfbGluZXMrNCkpLzI7CisJeCA9IChnZXRtYXh4KHN0
ZHNjciktKHRvdGFsX3dpZHRoKzQpKS8yOworCisKKwkvKiBjcmVhdGUgdGhlIHdpbmRvd3MgKi8K
KwlpZiAoYnRuX251bSA+IDApCisJCXdpbl9yb3dzID0gbXNnX2xpbmVzKzQ7CisJZWxzZQorCQl3
aW5fcm93cyA9IG1zZ19saW5lcysyOworCisJd2luID0gbmV3d2luKHdpbl9yb3dzLCB0b3RhbF93
aWR0aCs0LCB5LCB4KTsKKwlrZXlwYWQod2luLCBUUlVFKTsKKwltZW51X3dpbiA9IGRlcndpbih3
aW4sIDEsIGJ0bnNfd2lkdGgsIHdpbl9yb3dzLTIsCisJCQkxKyh0b3RhbF93aWR0aCsyLWJ0bnNf
d2lkdGgpLzIpOworCW1lbnUgPSBuZXdfbWVudShidG5zKTsKKwltc2dfd2luID0gZGVyd2luKHdp
biwgd2luX3Jvd3MtMiwgbXNnX3dpZHRoLCAxLAorCQkJMSsodG90YWxfd2lkdGgrMi1tc2dfd2lk
dGgpLzIpOworCisJc2V0X21lbnVfZm9yZShtZW51LCBhdHRyaWJ1dGVzW0RJQUxPR19NRU5VX0ZP
UkVdKTsKKwlzZXRfbWVudV9iYWNrKG1lbnUsIGF0dHJpYnV0ZXNbRElBTE9HX01FTlVfQkFDS10p
OworCisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tESUFMT0dfQk9YXSk7CisJYm94
KHdpbiwgMCwgMCk7CisKKwkvKiBwcmludCBtZXNzYWdlICovCisJKHZvaWQpIHdhdHRyc2V0KG1z
Z193aW4sIGF0dHJpYnV0ZXNbRElBTE9HX1RFWFRdKTsKKwlmaWxsX3dpbmRvdyhtc2dfd2luLCBt
c2cpOworCisJc2V0X21lbnVfd2luKG1lbnUsIHdpbik7CisJc2V0X21lbnVfc3ViKG1lbnUsIG1l
bnVfd2luKTsKKwlzZXRfbWVudV9mb3JtYXQobWVudSwgMSwgYnRuX251bSk7CisJbWVudV9vcHRz
X29mZihtZW51LCBPX1NIT1dERVNDKTsKKwltZW51X29wdHNfb2ZmKG1lbnUsIE9fU0hPV01BVENI
KTsKKwltZW51X29wdHNfb24obWVudSwgT19PTkVWQUxVRSk7CisJbWVudV9vcHRzX29uKG1lbnUs
IE9fTk9OQ1lDTElDKTsKKwlzZXRfbWVudV9tYXJrKG1lbnUsICIiKTsKKwlwb3N0X21lbnUobWVu
dSk7CisKKworCXRvdWNod2luKHdpbik7CisJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRv
dyk7CisJd2hpbGUgKChyZXMgPSB3Z2V0Y2god2luKSkpIHsKKwkJc3dpdGNoIChyZXMpIHsKKwkJ
Y2FzZSBLRVlfTEVGVDoKKwkJCW1lbnVfZHJpdmVyKG1lbnUsIFJFUV9MRUZUX0lURU0pOworCQkJ
YnJlYWs7CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJbWVudV9kcml2ZXIobWVudSwgUkVRX1JJR0hU
X0lURU0pOworCQkJYnJlYWs7CisJCWNhc2UgMTA6IC8qIEVOVEVSICovCisJCWNhc2UgMjc6IC8q
IEVTQ0FQRSAqLworCQljYXNlICcgJzoKKwkJY2FzZSBLRVlfRihGX0JBQ0spOgorCQljYXNlIEtF
WV9GKEZfRVhJVCk6CisJCQlicmVhazsKKwkJfQorCQl0b3VjaHdpbih3aW4pOworCQlyZWZyZXNo
X2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKworCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAn
ICcpIHsKKwkJCXJlcyA9IGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKG1lbnUpKTsKKwkJCWJyZWFr
OworCQl9IGVsc2UgaWYgKHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0YoRl9CQUNLKSB8fAorCQkJ
CXJlcyA9PSBLRVlfRihGX0VYSVQpKSB7CisJCQlyZXMgPSBLRVlfRVhJVDsKKwkJCWJyZWFrOwor
CQl9CisJfQorCisJdW5wb3N0X21lbnUobWVudSk7CisJZnJlZV9tZW51KG1lbnUpOworCWZvciAo
aSA9IDA7IGkgPCBidG5fbnVtOyBpKyspCisJCWZyZWVfaXRlbShidG5zW2ldKTsKKworCWRlbHdp
bih3aW4pOworCXJldHVybiByZXM7Cit9CisKK2ludCBkaWFsb2dfaW5wdXRib3goV0lORE9XICpt
YWluX3dpbmRvdywKKwkJY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwKKwkJ
Y29uc3QgY2hhciAqaW5pdCwgY2hhciAqKnJlc3VsdHAsIGludCAqcmVzdWx0X2xlbikKK3sKKwlp
bnQgcHJvbXB0X2xpbmVzID0gMDsKKwlpbnQgcHJvbXB0X3dpZHRoID0gMDsKKwlXSU5ET1cgKndp
bjsKKwlXSU5ET1cgKnByb21wdF93aW47CisJV0lORE9XICpmb3JtX3dpbjsKKwlQQU5FTCAqcGFu
ZWw7CisJaW50IGksIHgsIHksIGxpbmVzLCBjb2x1bW5zLCB3aW5fbGluZXMsIHdpbl9jb2xzOwor
CWludCByZXMgPSAtMTsKKwlpbnQgY3Vyc29yX3Bvc2l0aW9uID0gc3RybGVuKGluaXQpOworCWlu
dCBjdXJzb3JfZm9ybV93aW47CisJY2hhciAqcmVzdWx0ID0gKnJlc3VsdHA7CisKKwlnZXRtYXh5
eChzdGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsKKworCWlmIChzdHJsZW4oaW5pdCkrMSA+ICpyZXN1
bHRfbGVuKSB7CisJCSpyZXN1bHRfbGVuID0gc3RybGVuKGluaXQpKzE7CisJCSpyZXN1bHRwID0g
cmVzdWx0ID0geHJlYWxsb2MocmVzdWx0LCAqcmVzdWx0X2xlbik7CisJfQorCisJLyogZmluZCB0
aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLworCXByb21wdF9saW5lcyA9IGdldF9saW5lX25vKHBy
b21wdCk7CisJZm9yIChpID0gMDsgaSA8IHByb21wdF9saW5lczsgaSsrKSB7CisJCWNvbnN0IGNo
YXIgKmxpbmUgPSBnZXRfbGluZShwcm9tcHQsIGkpOworCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVu
Z3RoKGxpbmUpOworCQlwcm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBsZW4pOworCX0K
KworCWlmICh0aXRsZSkKKwkJcHJvbXB0X3dpZHRoID0gbWF4KHByb21wdF93aWR0aCwgc3RybGVu
KHRpdGxlKSk7CisKKwl3aW5fbGluZXMgPSBtaW4ocHJvbXB0X2xpbmVzKzYsIGxpbmVzLTIpOwor
CXdpbl9jb2xzID0gbWluKHByb21wdF93aWR0aCs3LCBjb2x1bW5zLTIpOworCXByb21wdF9saW5l
cyA9IG1heCh3aW5fbGluZXMtNiwgMCk7CisJcHJvbXB0X3dpZHRoID0gbWF4KHdpbl9jb2xzLTcs
IDApOworCisJLyogcGxhY2UgZGlhbG9nIGluIG1pZGRsZSBvZiBzY3JlZW4gKi8KKwl5ID0gKGxp
bmVzLXdpbl9saW5lcykvMjsKKwl4ID0gKGNvbHVtbnMtd2luX2NvbHMpLzI7CisKKwlzdHJuY3B5
KHJlc3VsdCwgaW5pdCwgKnJlc3VsdF9sZW4pOworCisJLyogY3JlYXRlIHRoZSB3aW5kb3dzICov
CisJd2luID0gbmV3d2luKHdpbl9saW5lcywgd2luX2NvbHMsIHksIHgpOworCXByb21wdF93aW4g
PSBkZXJ3aW4od2luLCBwcm9tcHRfbGluZXMrMSwgcHJvbXB0X3dpZHRoLCAyLCAyKTsKKwlmb3Jt
X3dpbiA9IGRlcndpbih3aW4sIDEsIHByb21wdF93aWR0aCwgcHJvbXB0X2xpbmVzKzMsIDIpOwor
CWtleXBhZChmb3JtX3dpbiwgVFJVRSk7CisKKwkodm9pZCkgd2F0dHJzZXQoZm9ybV93aW4sIGF0
dHJpYnV0ZXNbSU5QVVRfRklFTERdKTsKKworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJpYnV0
ZXNbSU5QVVRfQk9YXSk7CisJYm94KHdpbiwgMCwgMCk7CisJKHZvaWQpIHdhdHRyc2V0KHdpbiwg
YXR0cmlidXRlc1tJTlBVVF9IRUFESU5HXSk7CisJaWYgKHRpdGxlKQorCQltdndwcmludHcod2lu
LCAwLCAzLCAiJXMiLCB0aXRsZSk7CisKKwkvKiBwcmludCBtZXNzYWdlICovCisJKHZvaWQpIHdh
dHRyc2V0KHByb21wdF93aW4sIGF0dHJpYnV0ZXNbSU5QVVRfVEVYVF0pOworCWZpbGxfd2luZG93
KHByb21wdF93aW4sIHByb21wdCk7CisKKwltdndwcmludHcoZm9ybV93aW4sIDAsIDAsICIlKnMi
LCBwcm9tcHRfd2lkdGgsICIgIik7CisJY3Vyc29yX2Zvcm1fd2luID0gbWluKGN1cnNvcl9wb3Np
dGlvbiwgcHJvbXB0X3dpZHRoLTEpOworCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiVzIiwK
KwkJICByZXN1bHQgKyBjdXJzb3JfcG9zaXRpb24tY3Vyc29yX2Zvcm1fd2luKTsKKworCS8qIGNy
ZWF0ZSBwYW5lbHMgKi8KKwlwYW5lbCA9IG5ld19wYW5lbCh3aW4pOworCisJLyogc2hvdyB0aGUg
Y3Vyc29yICovCisJY3Vyc19zZXQoMSk7CisKKwl0b3VjaHdpbih3aW4pOworCXJlZnJlc2hfYWxs
X3dpbmRvd3MobWFpbl93aW5kb3cpOworCXdoaWxlICgocmVzID0gd2dldGNoKGZvcm1fd2luKSkp
IHsKKwkJaW50IGxlbiA9IHN0cmxlbihyZXN1bHQpOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNl
IDEwOiAvKiBFTlRFUiAqLworCQljYXNlIDI3OiAvKiBFU0NBUEUgKi8KKwkJY2FzZSBLRVlfRihG
X0hFTFApOgorCQljYXNlIEtFWV9GKEZfRVhJVCk6CisJCWNhc2UgS0VZX0YoRl9CQUNLKToKKwkJ
CWJyZWFrOworCQljYXNlIDg6ICAgLyogXkggKi8KKwkJY2FzZSAxMjc6IC8qIF4/ICovCisJCWNh
c2UgS0VZX0JBQ0tTUEFDRToKKwkJCWlmIChjdXJzb3JfcG9zaXRpb24gPiAwKSB7CisJCQkJbWVt
bW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbi0xXSwKKwkJCQkJCSZyZXN1bHRbY3Vyc29yX3Bv
c2l0aW9uXSwKKwkJCQkJCWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7CisJCQkJY3Vyc29yX3Bvc2l0
aW9uLS07CisJCQkJY3Vyc29yX2Zvcm1fd2luLS07CisJCQkJbGVuLS07CisJCQl9CisJCQlicmVh
azsKKwkJY2FzZSBLRVlfREM6CisJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID49IDAgJiYgY3Vyc29y
X3Bvc2l0aW9uIDwgbGVuKSB7CisJCQkJbWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0s
CisJCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbisxXSwKKwkJCQkJCWxlbi1jdXJzb3JfcG9z
aXRpb24rMSk7CisJCQkJbGVuLS07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBLRVlfVVA6CisJ
CWNhc2UgS0VZX1JJR0hUOgorCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA8IGxlbikgeworCQkJCWN1
cnNvcl9wb3NpdGlvbisrOworCQkJCWN1cnNvcl9mb3JtX3dpbisrOworCQkJfQorCQkJYnJlYWs7
CisJCWNhc2UgS0VZX0RPV046CisJCWNhc2UgS0VZX0xFRlQ6CisJCQlpZiAoY3Vyc29yX3Bvc2l0
aW9uID4gMCkgeworCQkJCWN1cnNvcl9wb3NpdGlvbi0tOworCQkJCWN1cnNvcl9mb3JtX3dpbi0t
OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgS0VZX0hPTUU6CisJCQljdXJzb3JfcG9zaXRpb24g
PSAwOworCQkJY3Vyc29yX2Zvcm1fd2luID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FTkQ6
CisJCQljdXJzb3JfcG9zaXRpb24gPSBsZW47CisJCQljdXJzb3JfZm9ybV93aW4gPSBtaW4oY3Vy
c29yX3Bvc2l0aW9uLCBwcm9tcHRfd2lkdGgtMSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ
CWlmICgoaXNncmFwaChyZXMpIHx8IGlzc3BhY2UocmVzKSkpIHsKKwkJCQkvKiBvbmUgZm9yIG5l
dyBjaGFyLCBvbmUgZm9yICdcMCcgKi8KKwkJCQlpZiAobGVuKzIgPiAqcmVzdWx0X2xlbikgewor
CQkJCQkqcmVzdWx0X2xlbiA9IGxlbisyOworCQkJCQkqcmVzdWx0cCA9IHJlc3VsdCA9IHJlYWxs
b2MocmVzdWx0LAorCQkJCQkJCQkqcmVzdWx0X2xlbik7CisJCQkJfQorCQkJCS8qIGluc2VydCB0
aGUgY2hhciBhdCB0aGUgcHJvcGVyIHBvc2l0aW9uICovCisJCQkJbWVtbW92ZSgmcmVzdWx0W2N1
cnNvcl9wb3NpdGlvbisxXSwKKwkJCQkJCSZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uXSwKKwkJCQkJ
CWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7CisJCQkJcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0gPSBy
ZXM7CisJCQkJY3Vyc29yX3Bvc2l0aW9uKys7CisJCQkJY3Vyc29yX2Zvcm1fd2luKys7CisJCQkJ
bGVuKys7CisJCQl9IGVsc2UgeworCQkJCW12cHJpbnR3KDAsIDAsICJ1bmtub3duIGtleTogJWRc
biIsIHJlcyk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlpZiAoY3Vyc29yX2Zvcm1fd2luIDwg
MCkKKwkJCWN1cnNvcl9mb3JtX3dpbiA9IDA7CisJCWVsc2UgaWYgKGN1cnNvcl9mb3JtX3dpbiA+
IHByb21wdF93aWR0aC0xKQorCQkJY3Vyc29yX2Zvcm1fd2luID0gcHJvbXB0X3dpZHRoLTE7CisK
KwkJd21vdmUoZm9ybV93aW4sIDAsIDApOworCQl3Y2xydG9lb2woZm9ybV93aW4pOworCQltdndw
cmludHcoZm9ybV93aW4sIDAsIDAsICIlKnMiLCBwcm9tcHRfd2lkdGgsICIgIik7CisJCW12d3By
aW50dyhmb3JtX3dpbiwgMCwgMCwgIiVzIiwKKwkJCXJlc3VsdCArIGN1cnNvcl9wb3NpdGlvbi1j
dXJzb3JfZm9ybV93aW4pOworCQl3bW92ZShmb3JtX3dpbiwgMCwgY3Vyc29yX2Zvcm1fd2luKTsK
KwkJdG91Y2h3aW4od2luKTsKKwkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisK
KwkJaWYgKHJlcyA9PSAxMCkgeworCQkJcmVzID0gMDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYg
KHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0YoRl9CQUNLKSB8fAorCQkJCXJlcyA9PSBLRVlfRihG
X0VYSVQpKSB7CisJCQlyZXMgPSBLRVlfRVhJVDsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHJl
cyA9PSBLRVlfRihGX0hFTFApKSB7CisJCQlyZXMgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisK
KwkvKiBoaWRlIHRoZSBjdXJzb3IgKi8KKwljdXJzX3NldCgwKTsKKwlkZWxfcGFuZWwocGFuZWwp
OworCWRlbHdpbihwcm9tcHRfd2luKTsKKwlkZWx3aW4oZm9ybV93aW4pOworCWRlbHdpbih3aW4p
OworCXJldHVybiByZXM7Cit9CisKKy8qIHJlZnJlc2ggYWxsIHdpbmRvd3MgaW4gdGhlIGNvcnJl
Y3Qgb3JkZXIgKi8KK3ZvaWQgcmVmcmVzaF9hbGxfd2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93
KQoreworCXVwZGF0ZV9wYW5lbHMoKTsKKwl0b3VjaHdpbihtYWluX3dpbmRvdyk7CisJcmVmcmVz
aCgpOworfQorCisvKiBsYXltYW4ncyBzY3JvbGxhYmxlIHdpbmRvdy4uLiAqLwordm9pZCBzaG93
X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywKKwkJY29uc3QgY2hhciAqdGl0bGUsCisJ
CWNvbnN0IGNoYXIgKnRleHQpCit7CisJaW50IHJlczsKKwlpbnQgdG90YWxfbGluZXMgPSBnZXRf
bGluZV9ubyh0ZXh0KTsKKwlpbnQgeCwgeSwgbGluZXMsIGNvbHVtbnM7CisJaW50IHN0YXJ0X3gg
PSAwLCBzdGFydF95ID0gMDsKKwlpbnQgdGV4dF9saW5lcyA9IDAsIHRleHRfY29scyA9IDA7CisJ
aW50IHRvdGFsX2NvbHMgPSAwOworCWludCB3aW5fY29scyA9IDA7CisJaW50IHdpbl9saW5lcyA9
IDA7CisJaW50IGkgPSAwOworCVdJTkRPVyAqd2luOworCVdJTkRPVyAqcGFkOworCVBBTkVMICpw
YW5lbDsKKworCWdldG1heHl4KHN0ZHNjciwgbGluZXMsIGNvbHVtbnMpOworCisJLyogZmluZCB0
aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLworCXRvdGFsX2xpbmVzID0gZ2V0X2xpbmVfbm8odGV4
dCk7CisJZm9yIChpID0gMDsgaSA8IHRvdGFsX2xpbmVzOyBpKyspIHsKKwkJY29uc3QgY2hhciAq
bGluZSA9IGdldF9saW5lKHRleHQsIGkpOworCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3RoKGxp
bmUpOworCQl0b3RhbF9jb2xzID0gbWF4KHRvdGFsX2NvbHMsIGxlbisyKTsKKwl9CisKKwkvKiBj
cmVhdGUgdGhlIHBhZCAqLworCXBhZCA9IG5ld3BhZCh0b3RhbF9saW5lcysxMCwgdG90YWxfY29s
cysxMCk7CisJKHZvaWQpIHdhdHRyc2V0KHBhZCwgYXR0cmlidXRlc1tTQ1JPTExXSU5fVEVYVF0p
OworCWZpbGxfd2luZG93KHBhZCwgdGV4dCk7CisKKwl3aW5fbGluZXMgPSBtaW4odG90YWxfbGlu
ZXMrNCwgbGluZXMtMik7CisJd2luX2NvbHMgPSBtaW4odG90YWxfY29scysyLCBjb2x1bW5zLTIp
OworCXRleHRfbGluZXMgPSBtYXgod2luX2xpbmVzLTQsIDApOworCXRleHRfY29scyA9IG1heCh3
aW5fY29scy0yLCAwKTsKKworCS8qIHBsYWNlIHdpbmRvdyBpbiBtaWRkbGUgb2Ygc2NyZWVuICov
CisJeSA9IChsaW5lcy13aW5fbGluZXMpLzI7CisJeCA9IChjb2x1bW5zLXdpbl9jb2xzKS8yOwor
CisJd2luID0gbmV3d2luKHdpbl9saW5lcywgd2luX2NvbHMsIHksIHgpOworCWtleXBhZCh3aW4s
IFRSVUUpOworCS8qIHNob3cgdGhlIGhlbHAgaW4gdGhlIGhlbHAgd2luZG93LCBhbmQgc2hvdyB0
aGUgaGVscCBwYW5lbCAqLworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJpYnV0ZXNbU0NST0xM
V0lOX0JPWF0pOworCWJveCh3aW4sIDAsIDApOworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJp
YnV0ZXNbU0NST0xMV0lOX0hFQURJTkddKTsKKwltdndwcmludHcod2luLCAwLCAzLCAiICVzICIs
IHRpdGxlKTsKKwlwYW5lbCA9IG5ld19wYW5lbCh3aW4pOworCisJLyogaGFuZGxlIHNjcm9sbGlu
ZyAqLworCWRvIHsKKworCQljb3B5d2luKHBhZCwgd2luLCBzdGFydF95LCBzdGFydF94LCAyLCAy
LCB0ZXh0X2xpbmVzLAorCQkJCXRleHRfY29scywgMCk7CisJCXByaW50X2luX21pZGRsZSh3aW4s
CisJCQkJdGV4dF9saW5lcysyLAorCQkJCTAsCisJCQkJdGV4dF9jb2xzLAorCQkJCSI8T0s+IiwK
KwkJCQlhdHRyaWJ1dGVzW0RJQUxPR19NRU5VX0ZPUkVdKTsKKwkJd3JlZnJlc2god2luKTsKKwor
CQlyZXMgPSB3Z2V0Y2god2luKTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSBLRVlfTlBBR0U6
CisJCWNhc2UgJyAnOgorCQljYXNlICdkJzoKKwkJCXN0YXJ0X3kgKz0gdGV4dF9saW5lcy0yOwor
CQkJYnJlYWs7CisJCWNhc2UgS0VZX1BQQUdFOgorCQljYXNlICd1JzoKKwkJCXN0YXJ0X3kgLT0g
dGV4dF9saW5lcysyOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0hPTUU6CisJCQlzdGFydF95ID0g
MDsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FTkQ6CisJCQlzdGFydF95ID0gdG90YWxfbGluZXMt
dGV4dF9saW5lczsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9ET1dOOgorCQljYXNlICdqJzoKKwkJ
CXN0YXJ0X3krKzsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9VUDoKKwkJY2FzZSAnayc6CisJCQlz
dGFydF95LS07CisJCQlicmVhazsKKwkJY2FzZSBLRVlfTEVGVDoKKwkJY2FzZSAnaCc6CisJCQlz
dGFydF94LS07CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUklHSFQ6CisJCWNhc2UgJ2wnOgorCQkJ
c3RhcnRfeCsrOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0gMjcg
fHwgcmVzID09ICdxJyB8fAorCQkJcmVzID09IEtFWV9GKEZfSEVMUCkgfHwgcmVzID09IEtFWV9G
KEZfQkFDSykgfHwKKwkJCXJlcyA9PSBLRVlfRihGX0VYSVQpKQorCQkJYnJlYWs7CisJCWlmIChz
dGFydF95IDwgMCkKKwkJCXN0YXJ0X3kgPSAwOworCQlpZiAoc3RhcnRfeSA+PSB0b3RhbF9saW5l
cy10ZXh0X2xpbmVzKQorCQkJc3RhcnRfeSA9IHRvdGFsX2xpbmVzLXRleHRfbGluZXM7CisJCWlm
IChzdGFydF94IDwgMCkKKwkJCXN0YXJ0X3ggPSAwOworCQlpZiAoc3RhcnRfeCA+PSB0b3RhbF9j
b2xzLXRleHRfY29scykKKwkJCXN0YXJ0X3ggPSB0b3RhbF9jb2xzLXRleHRfY29sczsKKwl9IHdo
aWxlIChyZXMpOworCisJZGVsX3BhbmVsKHBhbmVsKTsKKwlkZWx3aW4od2luKTsKKwlyZWZyZXNo
X2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbmNvbmYuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZmE1MjQ1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBw
b3J0L2tjb25maWcubmV3L25jb25mLmgKQEAgLTAsMCArMSw5MiBAQAorLyogU1BEWC1MaWNlbnNl
LUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlyIFR6
YWNoYXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gbWVudWNv
bmZpZy4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lu
Y2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5p
c3RkLmg+CisjaW5jbHVkZSA8bmN1cnNlcy5oPgorI2luY2x1ZGUgPG1lbnUuaD4KKyNpbmNsdWRl
IDxwYW5lbC5oPgorI2luY2x1ZGUgPGZvcm0uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNkZWZpbmUgbWF4KGEsIGIp
ICh7XAorCQl0eXBlb2YoYSkgX2EgPSBhO1wKKwkJdHlwZW9mKGIpIF9iID0gYjtcCisJCV9hID4g
X2IgPyBfYSA6IF9iOyB9KQorCisjZGVmaW5lIG1pbihhLCBiKSAoe1wKKwkJdHlwZW9mKGEpIF9h
ID0gYTtcCisJCXR5cGVvZihiKSBfYiA9IGI7XAorCQlfYSA8IF9iID8gX2EgOiBfYjsgfSkKKwor
dHlwZWRlZiBlbnVtIHsKKwlOT1JNQUwgPSAxLAorCU1BSU5fSEVBRElORywKKwlNQUlOX01FTlVf
Qk9YLAorCU1BSU5fTUVOVV9GT1JFLAorCU1BSU5fTUVOVV9CQUNLLAorCU1BSU5fTUVOVV9HUkVZ
LAorCU1BSU5fTUVOVV9IRUFESU5HLAorCVNDUk9MTFdJTl9URVhULAorCVNDUk9MTFdJTl9IRUFE
SU5HLAorCVNDUk9MTFdJTl9CT1gsCisJRElBTE9HX1RFWFQsCisJRElBTE9HX01FTlVfRk9SRSwK
KwlESUFMT0dfTUVOVV9CQUNLLAorCURJQUxPR19CT1gsCisJSU5QVVRfQk9YLAorCUlOUFVUX0hF
QURJTkcsCisJSU5QVVRfVEVYVCwKKwlJTlBVVF9GSUVMRCwKKwlGVU5DVElPTl9URVhULAorCUZV
TkNUSU9OX0hJR0hMSUdIVCwKKwlBVFRSX01BWAorfSBhdHRyaWJ1dGVzX3Q7CitleHRlcm4gYXR0
cmlidXRlc190IGF0dHJpYnV0ZXNbXTsKKwordHlwZWRlZiBlbnVtIHsKKwlGX0hFTFAgPSAxLAor
CUZfU1lNQk9MID0gMiwKKwlGX0lOU1RTID0gMywKKwlGX0NPTkYgPSA0LAorCUZfQkFDSyA9IDUs
CisJRl9TQVZFID0gNiwKKwlGX0xPQUQgPSA3LAorCUZfU0VBUkNIID0gOCwKKwlGX0VYSVQgPSA5
LAorfSBmdW5jdGlvbl9rZXk7CisKK3ZvaWQgc2V0X2NvbG9ycyh2b2lkKTsKKworLyogdGhpcyBj
aGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICovCit2b2lkIHByaW50X2luX21pZGRs
ZShXSU5ET1cgKndpbiwKKwkJaW50IHN0YXJ0eSwKKwkJaW50IHN0YXJ0eCwKKwkJaW50IHdpZHRo
LAorCQljb25zdCBjaGFyICpzdHJpbmcsCisJCWNodHlwZSBjb2xvcik7CitpbnQgZ2V0X2xpbmVf
bGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmUpOworaW50IGdldF9saW5lX25vKGNvbnN0IGNoYXIgKnRl
eHQpOworY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVfbm8p
Owordm9pZCBmaWxsX3dpbmRvdyhXSU5ET1cgKndpbiwgY29uc3QgY2hhciAqdGV4dCk7CitpbnQg
YnRuX2RpYWxvZyhXSU5ET1cgKm1haW5fd2luZG93LCBjb25zdCBjaGFyICptc2csIGludCBidG5f
bnVtLCAuLi4pOworaW50IGRpYWxvZ19pbnB1dGJveChXSU5ET1cgKm1haW5fd2luZG93LAorCQlj
b25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LAorCQljb25zdCBjaGFyICppbml0
LCBjaGFyICoqcmVzdWx0cCwgaW50ICpyZXN1bHRfbGVuKTsKK3ZvaWQgcmVmcmVzaF9hbGxfd2lu
ZG93cyhXSU5ET1cgKm1haW5fd2luZG93KTsKK3ZvaWQgc2hvd19zY3JvbGxfd2luKFdJTkRPVyAq
bWFpbl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxlLAorCQljb25zdCBjaGFyICp0ZXh0KTsK
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3BhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi42MDkz
NmM3NgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkKQEAg
LTAsMCArMSw3MzEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsu
b3JnPgorICovCisleworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5l
IHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCisK
KyNkZWZpbmUgUFJJTlRECQkweDAwMDEKKyNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyCisKK2lu
dCBjZGVidWcgPSBQUklOVEQ7CisKK3N0YXRpYyB2b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqZXJy
KTsKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGlj
IHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIGJvb2wgemNv
bmZfZW5kdG9rZW4oY29uc3QgY2hhciAqdG9rZW5uYW1lLAorCQkJICAgY29uc3QgY2hhciAqZXhw
ZWN0ZWRfdG9rZW5uYW1lKTsKKworc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbU1lNQk9MX0hB
U0hTSVpFXTsKKworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2Vu
dHJ5OworCislfQorCisldW5pb24KK3sKKwljaGFyICpzdHJpbmc7CisJc3RydWN0IHN5bWJvbCAq
c3ltYm9sOworCXN0cnVjdCBleHByICpleHByOworCXN0cnVjdCBtZW51ICptZW51OworCWVudW0g
c3ltYm9sX3R5cGUgdHlwZTsKKwllbnVtIHZhcmlhYmxlX2ZsYXZvciBmbGF2b3I7Cit9CisKKyV0
b2tlbiA8c3RyaW5nPiBUX0hFTFBURVhUCisldG9rZW4gPHN0cmluZz4gVF9XT1JECisldG9rZW4g
PHN0cmluZz4gVF9XT1JEX1FVT1RFCisldG9rZW4gVF9BTExOT0NPTkZJR19ZCisldG9rZW4gVF9C
T09MCisldG9rZW4gVF9DSE9JQ0UKKyV0b2tlbiBUX0NMT1NFX1BBUkVOCisldG9rZW4gVF9DT0xP
Tl9FUVVBTAorJXRva2VuIFRfQ09NTUVOVAorJXRva2VuIFRfQ09ORklHCisldG9rZW4gVF9ERUZB
VUxUCisldG9rZW4gVF9ERUZDT05GSUdfTElTVAorJXRva2VuIFRfREVGX0JPT0wKKyV0b2tlbiBU
X0RFRl9UUklTVEFURQorJXRva2VuIFRfREVQRU5EUworJXRva2VuIFRfRU5EQ0hPSUNFCisldG9r
ZW4gVF9FTkRJRgorJXRva2VuIFRfRU5ETUVOVQorJXRva2VuIFRfSEVMUAorJXRva2VuIFRfSEVY
CisldG9rZW4gVF9JRgorJXRva2VuIFRfSU1QTFkKKyV0b2tlbiBUX0lOVAorJXRva2VuIFRfTUFJ
Tk1FTlUKKyV0b2tlbiBUX01FTlUKKyV0b2tlbiBUX01FTlVDT05GSUcKKyV0b2tlbiBUX01PRFVM
RVMKKyV0b2tlbiBUX09OCisldG9rZW4gVF9PUEVOX1BBUkVOCisldG9rZW4gVF9PUFRJT04KKyV0
b2tlbiBUX09QVElPTkFMCisldG9rZW4gVF9QTFVTX0VRVUFMCisldG9rZW4gVF9QUk9NUFQKKyV0
b2tlbiBUX1JBTkdFCisldG9rZW4gVF9TRUxFQ1QKKyV0b2tlbiBUX1NPVVJDRQorJXRva2VuIFRf
U1RSSU5HCisldG9rZW4gVF9UUklTVEFURQorJXRva2VuIFRfVklTSUJMRQorJXRva2VuIFRfRU9M
CisldG9rZW4gPHN0cmluZz4gVF9BU1NJR05fVkFMCisKKyVsZWZ0IFRfT1IKKyVsZWZ0IFRfQU5E
CislbGVmdCBUX0VRVUFMIFRfVU5FUVVBTAorJWxlZnQgVF9MRVNTIFRfTEVTU19FUVVBTCBUX0dS
RUFURVIgVF9HUkVBVEVSX0VRVUFMCislbm9uYXNzb2MgVF9OT1QKKworJXR5cGUgPHN0cmluZz4g
cHJvbXB0CisldHlwZSA8c3ltYm9sPiBub25jb25zdF9zeW1ib2wKKyV0eXBlIDxzeW1ib2w+IHN5
bWJvbAorJXR5cGUgPHR5cGU+IHR5cGUgbG9naWNfdHlwZSBkZWZhdWx0CisldHlwZSA8ZXhwcj4g
ZXhwcgorJXR5cGUgPGV4cHI+IGlmX2V4cHIKKyV0eXBlIDxzdHJpbmc+IGVuZAorJXR5cGUgPG1l
bnU+IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5CisldHlwZSA8c3RyaW5nPiB3b3Jk
X29wdCBhc3NpZ25fdmFsCisldHlwZSA8Zmxhdm9yPiBhc3NpZ25fb3AKKworJWRlc3RydWN0b3Ig
eworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhp
cyBlbnRyeVxuIiwKKwkJJCQtPmZpbGUtPm5hbWUsICQkLT5saW5lbm8pOworCWlmIChjdXJyZW50
X21lbnUgPT0gJCQpCisJCW1lbnVfZW5kX21lbnUoKTsKK30gaWZfZW50cnkgbWVudV9lbnRyeSBj
aG9pY2VfZW50cnkKKworJSUKK2lucHV0OiBtYWlubWVudV9zdG10IHN0bXRfbGlzdCB8IHN0bXRf
bGlzdDsKKworLyogbWFpbm1lbnUgZW50cnkgKi8KKworbWFpbm1lbnVfc3RtdDogVF9NQUlOTUVO
VSBwcm9tcHQgVF9FT0wKK3sKKwltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAkMiwgTlVMTCk7Cit9
OworCitzdG10X2xpc3Q6CisJICAvKiBlbXB0eSAqLworCXwgc3RtdF9saXN0IGNvbW1vbl9zdG10
CisJfCBzdG10X2xpc3QgY2hvaWNlX3N0bXQKKwl8IHN0bXRfbGlzdCBtZW51X3N0bXQKKwl8IHN0
bXRfbGlzdCBUX1dPUkQgZXJyb3IgVF9FT0wJeyB6Y29uZl9lcnJvcigidW5rbm93biBzdGF0ZW1l
bnQgXCIlc1wiIiwgJDIpOyB9CisJfCBzdG10X2xpc3QgZXJyb3IgVF9FT0wJCXsgemNvbmZfZXJy
b3IoImludmFsaWQgc3RhdGVtZW50Iik7IH0KKzsKKworY29tbW9uX3N0bXQ6CisJICBpZl9zdG10
CisJfCBjb21tZW50X3N0bXQKKwl8IGNvbmZpZ19zdG10CisJfCBtZW51Y29uZmlnX3N0bXQKKwl8
IHNvdXJjZV9zdG10CisJfCBhc3NpZ25tZW50X3N0bXQKKzsKKworLyogY29uZmlnL21lbnVjb25m
aWcgZW50cnkgKi8KKworY29uZmlnX2VudHJ5X3N0YXJ0OiBUX0NPTkZJRyBub25jb25zdF9zeW1i
b2wgVF9FT0wKK3sKKwkkMi0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRkX2Vu
dHJ5KCQyKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyLT5uYW1lKTsKK307CisKK2NvbmZpZ19zdG10
OiBjb25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0Cit7CisJcHJpbnRkKERFQlVH
X1BBUlNFLCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsKK307CisKK21lbnVjb25maWdfZW50cnlfc3RhcnQ6IFRfTUVOVUNPTkZJRyBub25jb25z
dF9zeW1ib2wgVF9FT0wKK3sKKwkkMi0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVf
YWRkX2VudHJ5KCQyKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVz
XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7Cit9OworCitt
ZW51Y29uZmlnX3N0bXQ6IG1lbnVjb25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0
Cit7CisJaWYgKGN1cnJlbnRfZW50cnktPnByb21wdCkKKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0
LT50eXBlID0gUF9NRU5VOworCWVsc2UKKwkJemNvbmZwcmludCgid2FybmluZzogbWVudWNvbmZp
ZyBzdGF0ZW1lbnQgd2l0aG91dCBwcm9tcHQiKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczol
ZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKwor
Y29uZmlnX29wdGlvbl9saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IGNvbmZpZ19vcHRpb25fbGlz
dCBjb25maWdfb3B0aW9uCisJfCBjb25maWdfb3B0aW9uX2xpc3QgZGVwZW5kcworCXwgY29uZmln
X29wdGlvbl9saXN0IGhlbHAKKzsKKworY29uZmlnX29wdGlvbjogdHlwZSBwcm9tcHRfc3RtdF9v
cHQgVF9FT0wKK3sKKwltZW51X3NldF90eXBlKCQxKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIl
czolZDp0eXBlKCV1KVxuIiwKKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJ
JDEpOworfTsKKworY29uZmlnX29wdGlvbjogVF9QUk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wK
K3sKKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQyLCAkMyk7CisJcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
K307CisKK2NvbmZpZ19vcHRpb246IGRlZmF1bHQgZXhwciBpZl9leHByIFRfRU9MCit7CisJbWVu
dV9hZGRfZXhwcihQX0RFRkFVTFQsICQyLCAkMyk7CisJaWYgKCQxICE9IFNfVU5LTk9XTikKKwkJ
bWVudV9zZXRfdHlwZSgkMSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdCgl
dSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCSQxKTsKK307CisK
K2NvbmZpZ19vcHRpb246IFRfU0VMRUNUIG5vbmNvbnN0X3N5bWJvbCBpZl9leHByIFRfRU9MCit7
CisJbWVudV9hZGRfc3ltYm9sKFBfU0VMRUNULCAkMiwgJDMpOworCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9
OworCitjb25maWdfb3B0aW9uOiBUX0lNUExZIG5vbmNvbnN0X3N5bWJvbCBpZl9leHByIFRfRU9M
Cit7CisJbWVudV9hZGRfc3ltYm9sKFBfSU1QTFksICQyLCAkMyk7CisJcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6aW1wbHlcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwor
fTsKKworY29uZmlnX29wdGlvbjogVF9SQU5HRSBzeW1ib2wgc3ltYm9sIGlmX2V4cHIgVF9FT0wK
K3sKKwltZW51X2FkZF9leHByKFBfUkFOR0UsIGV4cHJfYWxsb2NfY29tcChFX1JBTkdFLCQyLCAk
MyksICQ0KTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpyYW5nZVxuIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjb25maWdfb3B0aW9uOiBUX09QVElPTiBU
X01PRFVMRVMgVF9FT0wKK3sKKwltZW51X2FkZF9vcHRpb25fbW9kdWxlcygpOworfTsKKworY29u
ZmlnX29wdGlvbjogVF9PUFRJT04gVF9ERUZDT05GSUdfTElTVCBUX0VPTAoreworCW1lbnVfYWRk
X29wdGlvbl9kZWZjb25maWdfbGlzdCgpOworfTsKKworY29uZmlnX29wdGlvbjogVF9PUFRJT04g
VF9BTExOT0NPTkZJR19ZIFRfRU9MCit7CisJbWVudV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3ko
KTsKK307CisKKy8qIGNob2ljZSBlbnRyeSAqLworCitjaG9pY2U6IFRfQ0hPSUNFIHdvcmRfb3B0
IFRfRU9MCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgkMiwgU1lNQk9MX0NI
T0lDRSk7CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7CisJbWVudV9hZGRfZW50cnko
c3ltKTsKKwltZW51X2FkZF9leHByKFBfQ0hPSUNFLCBOVUxMLCBOVUxMKTsKKwlmcmVlKCQyKTsK
KwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjaG9pY2VcbiIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOworfTsKKworY2hvaWNlX2VudHJ5OiBjaG9pY2UgY2hvaWNlX29wdGlv
bl9saXN0Cit7CisJJCQgPSBtZW51X2FkZF9tZW51KCk7Cit9OworCitjaG9pY2VfZW5kOiBlbmQK
K3sKKwlpZiAoemNvbmZfZW5kdG9rZW4oJDEsICJjaG9pY2UiKSkgeworCQltZW51X2VuZF9tZW51
KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNob2ljZVxuIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQorfTsKKworY2hvaWNlX3N0bXQ6IGNob2ljZV9l
bnRyeSBjaG9pY2VfYmxvY2sgY2hvaWNlX2VuZAorOworCitjaG9pY2Vfb3B0aW9uX2xpc3Q6CisJ
ICAvKiBlbXB0eSAqLworCXwgY2hvaWNlX29wdGlvbl9saXN0IGNob2ljZV9vcHRpb24KKwl8IGNo
b2ljZV9vcHRpb25fbGlzdCBkZXBlbmRzCisJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgaGVscAorOwor
CitjaG9pY2Vfb3B0aW9uOiBUX1BST01QVCBwcm9tcHQgaWZfZXhwciBUX0VPTAoreworCW1lbnVf
YWRkX3Byb21wdChQX1BST01QVCwgJDIsICQzKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczol
ZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY2hv
aWNlX29wdGlvbjogbG9naWNfdHlwZSBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKK3sKKwltZW51X3Nl
dF90eXBlKCQxKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkg
ICAgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDEpOworfTsKKworY2hvaWNl
X29wdGlvbjogVF9PUFRJT05BTCBUX0VPTAoreworCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX09QVElPTkFMOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm9wdGlvbmFs
XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK2Nob2ljZV9vcHRp
b246IFRfREVGQVVMVCBub25jb25zdF9zeW1ib2wgaWZfZXhwciBUX0VPTAoreworCW1lbnVfYWRk
X3N5bWJvbChQX0RFRkFVTFQsICQyLCAkMyk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6
ZGVmYXVsdFxuIiwKKwkgICAgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9
OworCit0eXBlOgorCSAgbG9naWNfdHlwZQorCXwgVF9JTlQJCQl7ICQkID0gU19JTlQ7IH0KKwl8
IFRfSEVYCQkJeyAkJCA9IFNfSEVYOyB9CisJfCBUX1NUUklORwkJeyAkJCA9IFNfU1RSSU5HOyB9
CisKK2xvZ2ljX3R5cGU6CisJICBUX0JPT0wJCXsgJCQgPSBTX0JPT0xFQU47IH0KKwl8IFRfVFJJ
U1RBVEUJCXsgJCQgPSBTX1RSSVNUQVRFOyB9CisKK2RlZmF1bHQ6CisJICBUX0RFRkFVTFQJCXsg
JCQgPSBTX1VOS05PV047IH0KKwl8IFRfREVGX0JPT0wJCXsgJCQgPSBTX0JPT0xFQU47IH0KKwl8
IFRfREVGX1RSSVNUQVRFCXsgJCQgPSBTX1RSSVNUQVRFOyB9CisKK2Nob2ljZV9ibG9jazoKKwkg
IC8qIGVtcHR5ICovCisJfCBjaG9pY2VfYmxvY2sgY29tbW9uX3N0bXQKKzsKKworLyogaWYgZW50
cnkgKi8KKworaWZfZW50cnk6IFRfSUYgZXhwciBUX0VPTAoreworCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwltZW51
X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9kZXAoJDIpOworCSQkID0gbWVudV9hZGRfbWVu
dSgpOworfTsKKworaWZfZW5kOiBlbmQKK3sKKwlpZiAoemNvbmZfZW5kdG9rZW4oJDEsICJpZiIp
KSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5k
aWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK307CisKK2lmX3N0
bXQ6IGlmX2VudHJ5IHN0bXRfbGlzdCBpZl9lbmQKKzsKKworLyogbWVudSBlbnRyeSAqLworCitt
ZW51OiBUX01FTlUgcHJvbXB0IFRfRU9MCit7CisJbWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVu
dV9hZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5VTEwpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworbWVu
dV9lbnRyeTogbWVudSBtZW51X29wdGlvbl9saXN0Cit7CisJJCQgPSBtZW51X2FkZF9tZW51KCk7
Cit9OworCittZW51X2VuZDogZW5kCit7CisJaWYgKHpjb25mX2VuZHRva2VuKCQxLCAibWVudSIp
KSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5k
bWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQorfTsKKworbWVu
dV9zdG10OiBtZW51X2VudHJ5IHN0bXRfbGlzdCBtZW51X2VuZAorOworCittZW51X29wdGlvbl9s
aXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IG1lbnVfb3B0aW9uX2xpc3QgdmlzaWJsZQorCXwgbWVu
dV9vcHRpb25fbGlzdCBkZXBlbmRzCis7CisKK3NvdXJjZV9zdG10OiBUX1NPVVJDRSBwcm9tcHQg
VF9FT0wKK3sKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsKKwl6Y29uZl9uZXh0ZmlsZSgkMik7CisJ
ZnJlZSgkMik7Cit9OworCisvKiBjb21tZW50IGVudHJ5ICovCisKK2NvbW1lbnQ6IFRfQ09NTUVO
VCBwcm9tcHQgVF9FT0wKK3sKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9wcm9t
cHQoUF9DT01NRU5ULCAkMiwgTlVMTCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29t
bWVudFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjb21tZW50
X3N0bXQ6IGNvbW1lbnQgY29tbWVudF9vcHRpb25fbGlzdAorOworCitjb21tZW50X29wdGlvbl9s
aXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IGNvbW1lbnRfb3B0aW9uX2xpc3QgZGVwZW5kcworOwor
CisvKiBoZWxwIG9wdGlvbiAqLworCitoZWxwX3N0YXJ0OiBUX0hFTFAgVF9FT0wKK3sKKwlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDpoZWxwXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpKTsKKwl6Y29uZl9zdGFydGhlbHAoKTsKK307CisKK2hlbHA6IGhlbHBfc3RhcnQgVF9I
RUxQVEVYVAoreworCWlmIChjdXJyZW50X2VudHJ5LT5oZWxwKSB7CisJCWZyZWUoY3VycmVudF9l
bnRyeS0+aGVscCk7CisJCXpjb25mcHJpbnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIG1v
cmUgdGhhbiBvbmUgaGVscCB0ZXh0IC0tIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCIs
CisJCQkgICBjdXJyZW50X2VudHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7CisJfQorCisJ
LyogSXMgdGhlIGhlbHAgdGV4dCBlbXB0eSBvciBhbGwgd2hpdGVzcGFjZT8gKi8KKwlpZiAoJDJb
c3Ryc3BuKCQyLCAiIFxmXG5cclx0XHYiKV0gPT0gJ1wwJykKKwkJemNvbmZwcmludCgid2Fybmlu
ZzogJyVzJyBkZWZpbmVkIHdpdGggYmxhbmsgaGVscCB0ZXh0IiwKKwkJCSAgIGN1cnJlbnRfZW50
cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsKKworCWN1cnJlbnRfZW50cnktPmhlbHAgPSAk
MjsKK307CisKKy8qIGRlcGVuZHMgb3B0aW9uICovCisKK2RlcGVuZHM6IFRfREVQRU5EUyBUX09O
IGV4cHIgVF9FT0wKK3sKKwltZW51X2FkZF9kZXAoJDMpOworCXByaW50ZChERUJVR19QQVJTRSwg
IiVzOiVkOmRlcGVuZHMgb25cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwor
fTsKKworLyogdmlzaWJpbGl0eSBvcHRpb24gKi8KK3Zpc2libGU6IFRfVklTSUJMRSBpZl9leHBy
IFRfRU9MCit7CisJbWVudV9hZGRfdmlzaWJpbGl0eSgkMik7Cit9OworCisvKiBwcm9tcHQgc3Rh
dGVtZW50ICovCisKK3Byb21wdF9zdG10X29wdDoKKwkgIC8qIGVtcHR5ICovCisJfCBwcm9tcHQg
aWZfZXhwcgoreworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgJDEsICQyKTsKK307CisKK3By
b21wdDoJICBUX1dPUkQKKwl8IFRfV09SRF9RVU9URQorOworCitlbmQ6CSAgVF9FTkRNRU5VIFRf
RU9MCXsgJCQgPSAibWVudSI7IH0KKwl8IFRfRU5EQ0hPSUNFIFRfRU9MCXsgJCQgPSAiY2hvaWNl
IjsgfQorCXwgVF9FTkRJRiBUX0VPTAkJeyAkJCA9ICJpZiI7IH0KKzsKKworaWZfZXhwcjogIC8q
IGVtcHR5ICovCQkJeyAkJCA9IE5VTEw7IH0KKwl8IFRfSUYgZXhwcgkJCXsgJCQgPSAkMjsgfQor
OworCitleHByOgkgIHN5bWJvbAkJCQl7ICQkID0gZXhwcl9hbGxvY19zeW1ib2woJDEpOyB9CisJ
fCBzeW1ib2wgVF9MRVNTIHN5bWJvbAkJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9MVEgsICQx
LCAkMyk7IH0KKwl8IHN5bWJvbCBUX0xFU1NfRVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9hbGxv
Y19jb21wKEVfTEVRLCAkMSwgJDMpOyB9CisJfCBzeW1ib2wgVF9HUkVBVEVSIHN5bWJvbAkJeyAk
JCA9IGV4cHJfYWxsb2NfY29tcChFX0dUSCwgJDEsICQzKTsgfQorCXwgc3ltYm9sIFRfR1JFQVRF
Ul9FUVVBTCBzeW1ib2wJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9HRVEsICQxLCAkMyk7IH0K
Kwl8IHN5bWJvbCBUX0VRVUFMIHN5bWJvbAkJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVB
TCwgJDEsICQzKTsgfQorCXwgc3ltYm9sIFRfVU5FUVVBTCBzeW1ib2wJCXsgJCQgPSBleHByX2Fs
bG9jX2NvbXAoRV9VTkVRVUFMLCAkMSwgJDMpOyB9CisJfCBUX09QRU5fUEFSRU4gZXhwciBUX0NM
T1NFX1BBUkVOCXsgJCQgPSAkMjsgfQorCXwgVF9OT1QgZXhwcgkJCQl7ICQkID0gZXhwcl9hbGxv
Y19vbmUoRV9OT1QsICQyKTsgfQorCXwgZXhwciBUX09SIGV4cHIJCQl7ICQkID0gZXhwcl9hbGxv
Y190d28oRV9PUiwgJDEsICQzKTsgfQorCXwgZXhwciBUX0FORCBleHByCQkJeyAkJCA9IGV4cHJf
YWxsb2NfdHdvKEVfQU5ELCAkMSwgJDMpOyB9Cis7CisKKy8qIEZvciBzeW1ib2wgZGVmaW5pdGlv
bnMsIHNlbGVjdHMsIGV0Yy4sIHdoZXJlIHF1b3RlcyBhcmUgbm90IGFjY2VwdGVkICovCitub25j
b25zdF9zeW1ib2w6IFRfV09SRCB7ICQkID0gc3ltX2xvb2t1cCgkMSwgMCk7IGZyZWUoJDEpOyB9
OworCitzeW1ib2w6CSAgbm9uY29uc3Rfc3ltYm9sCisJfCBUX1dPUkRfUVVPVEUJeyAkJCA9IHN5
bV9sb29rdXAoJDEsIFNZTUJPTF9DT05TVCk7IGZyZWUoJDEpOyB9Cis7CisKK3dvcmRfb3B0OiAv
KiBlbXB0eSAqLwkJCXsgJCQgPSBOVUxMOyB9CisJfCBUX1dPUkQKKworLyogYXNzaWdubWVudCBz
dGF0ZW1lbnQgKi8KKworYXNzaWdubWVudF9zdG10OiAgVF9XT1JEIGFzc2lnbl9vcCBhc3NpZ25f
dmFsIFRfRU9MCXsgdmFyaWFibGVfYWRkKCQxLCAkMywgJDIpOyBmcmVlKCQxKTsgZnJlZSgkMyk7
IH0KKworYXNzaWduX29wOgorCSAgVF9FUVVBTAl7ICQkID0gVkFSX1JFQ1VSU0lWRTsgfQorCXwg
VF9DT0xPTl9FUVVBTAl7ICQkID0gVkFSX1NJTVBMRTsgfQorCXwgVF9QTFVTX0VRVUFMCXsgJCQg
PSBWQVJfQVBQRU5EOyB9Cis7CisKK2Fzc2lnbl92YWw6CisJLyogZW1wdHkgKi8JCXsgJCQgPSB4
c3RyZHVwKCIiKTsgfTsKKwl8IFRfQVNTSUdOX1ZBTAorOworCislJQorCit2b2lkIGNvbmZfcGFy
c2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50IGk7CisK
Kwl6Y29uZl9pbml0c2NhbihuYW1lKTsKKworCV9tZW51X2luaXQoKTsKKworCWlmIChnZXRlbnYo
IlpDT05GX0RFQlVHIikpCisJCXl5ZGVidWcgPSAxOworCXl5cGFyc2UoKTsKKworCS8qIFZhcmlh
YmxlcyBhcmUgZXhwYW5kZWQgaW4gdGhlIHBhcnNlIHBoYXNlLiBXZSBjYW4gZnJlZSB0aGVtIGhl
cmUuICovCisJdmFyaWFibGVfYWxsX2RlbCgpOworCisJaWYgKHl5bmVycnMpCisJCWV4aXQoMSk7
CisJaWYgKCFtb2R1bGVzX3N5bSkKKwkJbW9kdWxlc19zeW0gPSBzeW1fZmluZCggIm4iICk7CisK
KwlpZiAoIW1lbnVfaGFzX3Byb21wdCgmcm9vdG1lbnUpKSB7CisJCWN1cnJlbnRfZW50cnkgPSAm
cm9vdG1lbnU7CisJCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICJNYWluIG1lbnUiLCBOVUxMKTsK
Kwl9CisKKwltZW51X2ZpbmFsaXplKCZyb290bWVudSk7CisJZm9yX2FsbF9zeW1ib2xzKGksIHN5
bSkgeworCQlpZiAoc3ltX2NoZWNrX2RlcHMoc3ltKSkKKwkJCXl5bmVycnMrKzsKKwl9CisJaWYg
KHl5bmVycnMpCisJCWV4aXQoMSk7CisJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7Cit9CisKK3N0
YXRpYyBib29sIHpjb25mX2VuZHRva2VuKGNvbnN0IGNoYXIgKnRva2VubmFtZSwKKwkJCSAgIGNv
bnN0IGNoYXIgKmV4cGVjdGVkX3Rva2VubmFtZSkKK3sKKwlpZiAoc3RyY21wKHRva2VubmFtZSwg
ZXhwZWN0ZWRfdG9rZW5uYW1lKSkgeworCQl6Y29uZl9lcnJvcigidW5leHBlY3RlZCAnJXMnIHdp
dGhpbiAlcyBibG9jayIsCisJCQkgICAgdG9rZW5uYW1lLCBleHBlY3RlZF90b2tlbm5hbWUpOwor
CQl5eW5lcnJzKys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJaWYgKGN1cnJlbnRfbWVudS0+Zmls
ZSAhPSBjdXJyZW50X2ZpbGUpIHsKKwkJemNvbmZfZXJyb3IoIiclcycgaW4gZGlmZmVyZW50IGZp
bGUgdGhhbiAnJXMnIiwKKwkJCSAgICB0b2tlbm5hbWUsIGV4cGVjdGVkX3Rva2VubmFtZSk7CisJ
CWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9mIHRoZSAnJXMnXG4iLAorCQkJY3Vy
cmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubywKKwkJCWV4cGVjdGVk
X3Rva2VubmFtZSk7CisJCXl5bmVycnMrKzsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4g
dHJ1ZTsKK30KKworc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLikK
K3sKKwl2YV9saXN0IGFwOworCisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJdmZwcmludGYo
c3RkZXJyLCBlcnIsIGFwKTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsK
K30KKworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJ
dmFfbGlzdCBhcDsKKworCXl5bmVycnMrKzsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl2YV9zdGFydChhcCwgZXJyKTsKKwl2
ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOworCXZhX2VuZChhcCk7CisJZnByaW50ZihzdGRlcnIs
ICJcbiIpOworfQorCitzdGF0aWMgdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKmVycikKK3sKKwlm
cHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSArIDEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklM
RSAqb3V0LCBjb25zdCBjaGFyICpzdHIpCit7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgbGVuOwor
CisJcHV0YygnIicsIG91dCk7CisJd2hpbGUgKChwID0gc3RyY2hyKHN0ciwgJyInKSkpIHsKKwkJ
bGVuID0gcCAtIHN0cjsKKwkJaWYgKGxlbikKKwkJCWZwcmludGYob3V0LCAiJS4qcyIsIGxlbiwg
c3RyKTsKKwkJZnB1dHMoIlxcXCIiLCBvdXQpOworCQlzdHIgPSBwICsgMTsKKwl9CisJZnB1dHMo
c3RyLCBvdXQpOworCXB1dGMoJyInLCBvdXQpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zeW1i
b2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0g
PSBtZW51LT5zeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJaWYgKHN5bV9pc19jaG9p
Y2Uoc3ltKSkKKwkJZnByaW50ZihvdXQsICJcbmNob2ljZVxuIik7CisJZWxzZQorCQlmcHJpbnRm
KG91dCwgIlxuY29uZmlnICVzXG4iLCBzeW0tPm5hbWUpOworCXN3aXRjaCAoc3ltLT50eXBlKSB7
CisJY2FzZSBTX0JPT0xFQU46CisJCWZwdXRzKCIgIGJvb2xcbiIsIG91dCk7CisJCWJyZWFrOwor
CWNhc2UgU19UUklTVEFURToKKwkJZnB1dHMoIiAgdHJpc3RhdGVcbiIsIG91dCk7CisJCWJyZWFr
OworCWNhc2UgU19TVFJJTkc6CisJCWZwdXRzKCIgIHN0cmluZ1xuIiwgb3V0KTsKKwkJYnJlYWs7
CisJY2FzZSBTX0lOVDoKKwkJZnB1dHMoIiAgaW50ZWdlclxuIiwgb3V0KTsKKwkJYnJlYWs7CisJ
Y2FzZSBTX0hFWDoKKwkJZnB1dHMoIiAgaGV4XG4iLCBvdXQpOworCQlicmVhazsKKwlkZWZhdWx0
OgorCQlmcHV0cygiICA/Pz9cbiIsIG91dCk7CisJCWJyZWFrOworCX0KKwlmb3IgKHByb3AgPSBz
eW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCWlmIChwcm9wLT5tZW51ICE9
IG1lbnUpCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChwcm9wLT50eXBlKSB7CisJCWNhc2UgUF9Q
Uk9NUFQ6CisJCQlmcHV0cygiICBwcm9tcHQgIiwgb3V0KTsKKwkJCXByaW50X3F1b3RlZF9zdHJp
bmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5l
eHByKSkgeworCQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52
aXNpYmxlLmV4cHIsIG91dCk7CisJCQl9CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7
CisJCWNhc2UgUF9ERUZBVUxUOgorCQkJZnB1dHMoICIgIGRlZmF1bHQgIiwgb3V0KTsKKwkJCWV4
cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZp
c2libGUuZXhwcikpIHsKKwkJCQlmcHV0cygiIGlmICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQo
cHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOworCQkJfQorCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJ
CWJyZWFrOworCQljYXNlIFBfQ0hPSUNFOgorCQkJZnB1dHMoIiAgI2Nob2ljZSB2YWx1ZVxuIiwg
b3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfU0VMRUNUOgorCQkJZnB1dHMoICIgIHNlbGVjdCAi
LCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbics
IG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0lNUExZOgorCQkJZnB1dHMoICIgIGltcGx5ICIs
IG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywg
b3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfUkFOR0U6CisJCQlmcHV0cyggIiAgcmFuZ2UgIiwg
b3V0KTsKKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBv
dXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9NRU5VOgorCQkJZnB1dHMoICIgIG1lbnUgIiwgb3V0
KTsKKwkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCWZwdXRjKCdc
bicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1NZTUJPTDoKKwkJCWZwdXRzKCAiICBzeW1i
b2wgIiwgb3V0KTsKKwkJCWZwcmludGYob3V0LCAiJXNcbiIsIHByb3AtPnN5bS0+bmFtZSk7CisJ
CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYob3V0LCAiICB1bmtub3duIHByb3AgJWQh
XG4iLCBwcm9wLT50eXBlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChtZW51LT5oZWxwKSB7
CisJCWludCBsZW4gPSBzdHJsZW4obWVudS0+aGVscCk7CisJCXdoaWxlIChtZW51LT5oZWxwWy0t
bGVuXSA9PSAnXG4nKQorCQkJbWVudS0+aGVscFtsZW5dID0gMDsKKwkJZnByaW50ZihvdXQsICIg
IGhlbHBcbiVzXG4iLCBtZW51LT5oZWxwKTsKKwl9Cit9CisKK3ZvaWQgemNvbmZkdW1wKEZJTEUg
Km91dCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltOwor
CXN0cnVjdCBtZW51ICptZW51OworCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisJd2hpbGUgKG1l
bnUpIHsKKwkJaWYgKChzeW0gPSBtZW51LT5zeW0pKQorCQkJcHJpbnRfc3ltYm9sKG91dCwgbWVu
dSk7CisJCWVsc2UgaWYgKChwcm9wID0gbWVudS0+cHJvbXB0KSkgeworCQkJc3dpdGNoIChwcm9w
LT50eXBlKSB7CisJCQljYXNlIFBfQ09NTUVOVDoKKwkJCQlmcHV0cygiXG5jb21tZW50ICIsIG91
dCk7CisJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJCWZwdXRz
KCJcbiIsIG91dCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBfTUVOVToKKwkJCQlmcHV0cygiXG5t
ZW51ICIsIG91dCk7CisJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOwor
CQkJCWZwdXRzKCJcbiIsIG91dCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCTsKKwkJ
CX0KKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJCWZwdXRz
KCIgIGRlcGVuZHMgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIs
IG91dCk7CisJCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCX0KKwkJfQorCisJCWlmIChtZW51LT5s
aXN0KQorCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCWVsc2UgaWYgKG1lbnUtPm5leHQpCisJCQlt
ZW51ID0gbWVudS0+bmV4dDsKKwkJZWxzZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7
CisJCQlpZiAobWVudS0+cHJvbXB0ICYmIG1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCisJ
CQkJZnB1dHMoIlxuZW5kbWVudVxuIiwgb3V0KTsKKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJ
bWVudSA9IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKyNpbmNs
dWRlICJ1dGlsLmMiCisjaW5jbHVkZSAibWVudS5jIgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9wcmVwcm9jZXNzLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L3ByZXByb2Nlc3MuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNTkyZGZiZmEKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3ByZXByb2Nlc3MuYwpAQCAtMCwwICsxLDU3MyBA
QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8vCisvLyBDb3B5cmlnaHQg
KEMpIDIwMTggTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9uZXh0LmNvbT4K
KworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3Rk
Ym9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsaXN0LmgiCisjaW5jbHVkZSAibGtjLmgiCisKKyNk
ZWZpbmUgQVJSQVlfU0laRShhcnIpCQkoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQor
CitzdGF0aWMgY2hhciAqZXhwYW5kX3N0cmluZ193aXRoX2FyZ3MoY29uc3QgY2hhciAqaW4sIGlu
dCBhcmdjLCBjaGFyICphcmd2W10pOworCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub3Jl
dHVybikpIHBwZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsK
KworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIGN1cnJlbnRfZmlsZS0+bmFtZSwgeXlsaW5l
bm8pOworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBh
cCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisKKwlleGl0KDEpOwor
fQorCisvKgorICogRW52aXJvbm1lbnQgdmFyaWFibGVzCisgKi8KK3N0YXRpYyBMSVNUX0hFQUQo
ZW52X2xpc3QpOworCitzdHJ1Y3QgZW52IHsKKwljaGFyICpuYW1lOworCWNoYXIgKnZhbHVlOwor
CXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKK307CisKK3N0YXRpYyB2b2lkIGVudl9hZGQoY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisJc3RydWN0IGVudiAqZTsKKworCWUg
PSB4bWFsbG9jKHNpemVvZigqZSkpOworCWUtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWUtPnZh
bHVlID0geHN0cmR1cCh2YWx1ZSk7CisKKwlsaXN0X2FkZF90YWlsKCZlLT5ub2RlLCAmZW52X2xp
c3QpOworfQorCitzdGF0aWMgdm9pZCBlbnZfZGVsKHN0cnVjdCBlbnYgKmUpCit7CisJbGlzdF9k
ZWwoJmUtPm5vZGUpOworCWZyZWUoZS0+bmFtZSk7CisJZnJlZShlLT52YWx1ZSk7CisJZnJlZShl
KTsKK30KKworLyogVGhlIHJldHVybmVkIHBvaW50ZXIgbXVzdCBiZSBmcmVlZCB3aGVuIGRvbmUg
Ki8KK3N0YXRpYyBjaGFyICplbnZfZXhwYW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0
IGVudiAqZTsKKwljb25zdCBjaGFyICp2YWx1ZTsKKworCWlmICghKm5hbWUpCisJCXJldHVybiBO
VUxMOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlLCAmZW52X2xpc3QsIG5vZGUpIHsKKwkJaWYg
KCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpCisJCQlyZXR1cm4geHN0cmR1cChlLT52YWx1ZSk7CisJ
fQorCisJdmFsdWUgPSBnZXRlbnYobmFtZSk7CisJaWYgKCF2YWx1ZSkKKwkJcmV0dXJuIE5VTEw7
CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gcmVtZW1iZXIgYWxsIHJlZmVyZW5jZWQgZW52aXJvbm1l
bnQgdmFyaWFibGVzLgorCSAqIFRoZXkgd2lsbCBiZSB3cml0dGVuIG91dCB0byBpbmNsdWRlL2Nv
bmZpZy9hdXRvLmNvbmYuY21kCisJICovCisJZW52X2FkZChuYW1lLCB2YWx1ZSk7CisKKwlyZXR1
cm4geHN0cmR1cCh2YWx1ZSk7Cit9CisKK3ZvaWQgZW52X3dyaXRlX2RlcChGSUxFICpmLCBjb25z
dCBjaGFyICphdXRvY29uZmlnX25hbWUpCit7CisJc3RydWN0IGVudiAqZSwgKnRtcDsKKworCWxp
c3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCB0bXAsICZlbnZfbGlzdCwgbm9kZSkgeworCQlmcHJp
bnRmKGYsICJpZm5lcSBcIiQoJXMpXCIgXCIlc1wiXG4iLCBlLT5uYW1lLCBlLT52YWx1ZSk7CisJ
CWZwcmludGYoZiwgIiVzOiBGT1JDRVxuIiwgYXV0b2NvbmZpZ19uYW1lKTsKKwkJZnByaW50Zihm
LCAiZW5kaWZcbiIpOworCQllbnZfZGVsKGUpOworCX0KK30KKworLyoKKyAqIEJ1aWx0LWluIGZ1
bmN0aW9ucworICovCitzdHJ1Y3QgZnVuY3Rpb24geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5z
aWduZWQgaW50IG1pbl9hcmdzOworCXVuc2lnbmVkIGludCBtYXhfYXJnczsKKwljaGFyICooKmZ1
bmMpKGludCBhcmdjLCBjaGFyICphcmd2W10pOworfTsKKworc3RhdGljIGNoYXIgKmRvX2Vycm9y
X2lmKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKCFzdHJjbXAoYXJndlswXSwgInki
KSkKKwkJcHBlcnJvcigiJXMiLCBhcmd2WzFdKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0
aWMgY2hhciAqZG9fZmlsZW5hbWUoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlyZXR1cm4g
eHN0cmR1cChjdXJyZW50X2ZpbGUtPm5hbWUpOworfQorCitzdGF0aWMgY2hhciAqZG9faW5mbyhp
bnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXByaW50ZigiJXNcbiIsIGFyZ3ZbMF0pOworCisJ
cmV0dXJuIHhzdHJkdXAoIiIpOworfQorCitzdGF0aWMgY2hhciAqZG9fbGluZW5vKGludCBhcmdj
LCBjaGFyICphcmd2W10pCit7CisJY2hhciBidWZbMTZdOworCisJc3ByaW50ZihidWYsICIlZCIs
IHl5bGluZW5vKTsKKworCXJldHVybiB4c3RyZHVwKGJ1Zik7Cit9CisKK3N0YXRpYyBjaGFyICpk
b19zaGVsbChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCUZJTEUgKnA7CisJY2hhciBidWZb
MjU2XTsKKwljaGFyICpjbWQ7CisJc2l6ZV90IG5yZWFkOworCWludCBpOworCisJY21kID0gYXJn
dlswXTsKKworCXAgPSBwb3BlbihjbWQsICJyIik7CisJaWYgKCFwKSB7CisJCXBlcnJvcihjbWQp
OworCQlleGl0KDEpOworCX0KKworCW5yZWFkID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwg
cCk7CisJaWYgKG5yZWFkID09IHNpemVvZihidWYpKQorCQlucmVhZC0tOworCisJLyogcmVtb3Zl
IHRyYWlsaW5nIG5ldyBsaW5lcyAqLworCXdoaWxlIChucmVhZCA+IDAgJiYgYnVmW25yZWFkIC0g
MV0gPT0gJ1xuJykKKwkJbnJlYWQtLTsKKworCWJ1ZltucmVhZF0gPSAwOworCisJLyogcmVwbGFj
ZSBhIG5ldyBsaW5lIHdpdGggYSBzcGFjZSAqLworCWZvciAoaSA9IDA7IGkgPCBucmVhZDsgaSsr
KSB7CisJCWlmIChidWZbaV0gPT0gJ1xuJykKKwkJCWJ1ZltpXSA9ICcgJzsKKwl9CisKKwlpZiAo
cGNsb3NlKHApID09IC0xKSB7CisJCXBlcnJvcihjbWQpOworCQlleGl0KDEpOworCX0KKworCXJl
dHVybiB4c3RyZHVwKGJ1Zik7Cit9CisKK3N0YXRpYyBjaGFyICpkb193YXJuaW5nX2lmKGludCBh
cmdjLCBjaGFyICphcmd2W10pCit7CisJaWYgKCFzdHJjbXAoYXJndlswXSwgInkiKSkKKwkJZnBy
aW50ZihzdGRlcnIsICIlczolZDogJXNcbiIsCisJCQljdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGlu
ZW5vLCBhcmd2WzFdKTsKKworCXJldHVybiB4c3RyZHVwKCIiKTsKK30KKworc3RhdGljIGNvbnN0
IHN0cnVjdCBmdW5jdGlvbiBmdW5jdGlvbl90YWJsZVtdID0geworCS8qIE5hbWUJCU1JTglNQVgJ
RnVuY3Rpb24gKi8KKwl7ICJlcnJvci1pZiIsCTIsCTIsCWRvX2Vycm9yX2lmIH0sCisJeyAiZmls
ZW5hbWUiLAkwLAkwLAlkb19maWxlbmFtZSB9LAorCXsgImluZm8iLAkxLAkxLAlkb19pbmZvIH0s
CisJeyAibGluZW5vIiwJMCwJMCwJZG9fbGluZW5vIH0sCisJeyAic2hlbGwiLAkxLAkxLAlkb19z
aGVsbCB9LAorCXsgIndhcm5pbmctaWYiLAkyLAkyLAlkb193YXJuaW5nX2lmIH0sCit9OworCisj
ZGVmaW5lIEZVTkNUSU9OX01BWF9BUkdTCQkxNgorCitzdGF0aWMgY2hhciAqZnVuY3Rpb25fZXhw
YW5kKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3Qg
c3RydWN0IGZ1bmN0aW9uICpmOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ
WkUoZnVuY3Rpb25fdGFibGUpOyBpKyspIHsKKwkJZiA9ICZmdW5jdGlvbl90YWJsZVtpXTsKKwkJ
aWYgKHN0cmNtcChmLT5uYW1lLCBuYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChhcmdjIDwg
Zi0+bWluX2FyZ3MpCisJCQlwcGVycm9yKCJ0b28gZmV3IGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNz
ZWQgdG8gJyVzJyIsCisJCQkJbmFtZSk7CisKKwkJaWYgKGFyZ2MgPiBmLT5tYXhfYXJncykKKwkJ
CXBwZXJyb3IoInRvbyBtYW55IGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gJyVzJyIsCisJ
CQkJbmFtZSk7CisKKwkJcmV0dXJuIGYtPmZ1bmMoYXJnYywgYXJndik7CisJfQorCisJcmV0dXJu
IE5VTEw7Cit9CisKKy8qCisgKiBWYXJpYWJsZXMgKGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25z
KQorICovCitzdGF0aWMgTElTVF9IRUFEKHZhcmlhYmxlX2xpc3QpOworCitzdHJ1Y3QgdmFyaWFi
bGUgeworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsdWU7CisJZW51bSB2YXJpYWJsZV9mbGF2b3Ig
Zmxhdm9yOworCWludCBleHBfY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKwor
c3RhdGljIHN0cnVjdCB2YXJpYWJsZSAqdmFyaWFibGVfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUp
Cit7CisJc3RydWN0IHZhcmlhYmxlICp2OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh2LCAmdmFy
aWFibGVfbGlzdCwgbm9kZSkgeworCQlpZiAoIXN0cmNtcChuYW1lLCB2LT5uYW1lKSkKKwkJCXJl
dHVybiB2OworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgY2hhciAqdmFyaWFibGVf
ZXhwYW5kKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3Ry
dWN0IHZhcmlhYmxlICp2OworCWNoYXIgKnJlczsKKworCXYgPSB2YXJpYWJsZV9sb29rdXAobmFt
ZSk7CisJaWYgKCF2KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChhcmdjID09IDAgJiYgdi0+ZXhw
X2NvdW50KQorCQlwcGVycm9yKCJSZWN1cnNpdmUgdmFyaWFibGUgJyVzJyByZWZlcmVuY2VzIGl0
c2VsZiAoZXZlbnR1YWxseSkiLAorCQkJbmFtZSk7CisKKwlpZiAodi0+ZXhwX2NvdW50ID4gMTAw
MCkKKwkJcHBlcnJvcigiVG9vIGRlZXAgcmVjdXJzaXZlIGV4cGFuc2lvbiIpOworCisJdi0+ZXhw
X2NvdW50Kys7CisKKwlpZiAodi0+Zmxhdm9yID09IFZBUl9SRUNVUlNJVkUpCisJCXJlcyA9IGV4
cGFuZF9zdHJpbmdfd2l0aF9hcmdzKHYtPnZhbHVlLCBhcmdjLCBhcmd2KTsKKwllbHNlCisJCXJl
cyA9IHhzdHJkdXAodi0+dmFsdWUpOworCisJdi0+ZXhwX2NvdW50LS07CisKKwlyZXR1cm4gcmVz
OworfQorCit2b2lkIHZhcmlhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2
YWx1ZSwKKwkJICBlbnVtIHZhcmlhYmxlX2ZsYXZvciBmbGF2b3IpCit7CisJc3RydWN0IHZhcmlh
YmxlICp2OworCWNoYXIgKm5ld192YWx1ZTsKKwlib29sIGFwcGVuZCA9IGZhbHNlOworCisJdiA9
IHZhcmlhYmxlX2xvb2t1cChuYW1lKTsKKwlpZiAodikgeworCQkvKiBGb3IgZGVmaW5lZCB2YXJp
YWJsZXMsICs9IGluaGVyaXRzIHRoZSBleGlzdGluZyBmbGF2b3IgKi8KKwkJaWYgKGZsYXZvciA9
PSBWQVJfQVBQRU5EKSB7CisJCQlmbGF2b3IgPSB2LT5mbGF2b3I7CisJCQlhcHBlbmQgPSB0cnVl
OworCQl9IGVsc2UgeworCQkJZnJlZSh2LT52YWx1ZSk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBG
b3IgdW5kZWZpbmVkIHZhcmlhYmxlcywgKz0gYXNzdW1lcyB0aGUgcmVjdXJzaXZlIGZsYXZvciAq
LworCQlpZiAoZmxhdm9yID09IFZBUl9BUFBFTkQpCisJCQlmbGF2b3IgPSBWQVJfUkVDVVJTSVZF
OworCisJCXYgPSB4bWFsbG9jKHNpemVvZigqdikpOworCQl2LT5uYW1lID0geHN0cmR1cChuYW1l
KTsKKwkJdi0+ZXhwX2NvdW50ID0gMDsKKwkJbGlzdF9hZGRfdGFpbCgmdi0+bm9kZSwgJnZhcmlh
YmxlX2xpc3QpOworCX0KKworCXYtPmZsYXZvciA9IGZsYXZvcjsKKworCWlmIChmbGF2b3IgPT0g
VkFSX1NJTVBMRSkKKwkJbmV3X3ZhbHVlID0gZXhwYW5kX3N0cmluZyh2YWx1ZSk7CisJZWxzZQor
CQluZXdfdmFsdWUgPSB4c3RyZHVwKHZhbHVlKTsKKworCWlmIChhcHBlbmQpIHsKKwkJdi0+dmFs
dWUgPSB4cmVhbGxvYyh2LT52YWx1ZSwKKwkJCQkgICAgc3RybGVuKHYtPnZhbHVlKSArIHN0cmxl
bihuZXdfdmFsdWUpICsgMik7CisJCXN0cmNhdCh2LT52YWx1ZSwgIiAiKTsKKwkJc3RyY2F0KHYt
PnZhbHVlLCBuZXdfdmFsdWUpOworCQlmcmVlKG5ld192YWx1ZSk7CisJfSBlbHNlIHsKKwkJdi0+
dmFsdWUgPSBuZXdfdmFsdWU7CisJfQorfQorCitzdGF0aWMgdm9pZCB2YXJpYWJsZV9kZWwoc3Ry
dWN0IHZhcmlhYmxlICp2KQoreworCWxpc3RfZGVsKCZ2LT5ub2RlKTsKKwlmcmVlKHYtPm5hbWUp
OworCWZyZWUodi0+dmFsdWUpOworCWZyZWUodik7Cit9CisKK3ZvaWQgdmFyaWFibGVfYWxsX2Rl
bCh2b2lkKQoreworCXN0cnVjdCB2YXJpYWJsZSAqdiwgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hf
ZW50cnlfc2FmZSh2LCB0bXAsICZ2YXJpYWJsZV9saXN0LCBub2RlKQorCQl2YXJpYWJsZV9kZWwo
dik7Cit9CisKKy8qCisgKiBFdmFsdWF0ZSBhIGNsYXVzZSB3aXRoIGFyZ3VtZW50cy4gIGFyZ2Mv
YXJndiBhcmUgYXJndW1lbnRzIGZyb20gdGhlIHVwcGVyCisgKiBmdW5jdGlvbiBjYWxsLgorICoK
KyAqIFJldHVybmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZQorICovCitzdGF0aWMg
Y2hhciAqZXZhbF9jbGF1c2UoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBpbnQgYXJnYywg
Y2hhciAqYXJndltdKQoreworCWNoYXIgKnRtcCwgKm5hbWUsICpyZXMsICplbmRwdHIsICpwcmV2
LCAqcDsKKwlpbnQgbmV3X2FyZ2MgPSAwOworCWNoYXIgKm5ld19hcmd2W0ZVTkNUSU9OX01BWF9B
UkdTXTsKKwlpbnQgbmVzdCA9IDA7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBuOworCisJdG1w
ID0geHN0cm5kdXAoc3RyLCBsZW4pOworCisJLyoKKwkgKiBJZiB2YXJpYWJsZSBuYW1lIGlzICcx
JywgJzInLCBldGMuICBJdCBpcyBnZW5lcmFsbHkgYW4gYXJndW1lbnQKKwkgKiBmcm9tIGEgdXNl
ci1mdW5jdGlvbiBjYWxsIChpLmUuIGxvY2FsLXNjb3BlIHZhcmlhYmxlKS4gIElmIG5vdAorCSAq
IGF2YWlsYWJsZSwgdGhlbiBsb29rLXVwIGdsb2JhbC1zY29wZSB2YXJpYWJsZXMuCisJICovCisJ
biA9IHN0cnRvdWwodG1wLCAmZW5kcHRyLCAxMCk7CisJaWYgKCEqZW5kcHRyICYmIG4gPiAwICYm
IG4gPD0gYXJnYykgeworCQlyZXMgPSB4c3RyZHVwKGFyZ3ZbbiAtIDFdKTsKKwkJZ290byBmcmVl
X3RtcDsKKwl9CisKKwlwcmV2ID0gcCA9IHRtcDsKKworCS8qCisJICogU3BsaXQgaW50byB0b2tl
bnMKKwkgKiBUaGUgZnVuY3Rpb24gbmFtZSBhbmQgYXJndW1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkg
YSBjb21tYS4KKwkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgbGlrZSB0
aGlzOgorCSAqICAgJChmb28sJCh4KSwkKHkpKQorCSAqCisJICogVGhlIGlucHV0IHN0cmluZyBm
b3IgdGhpcyBoZWxwZXIgc2hvdWxkIGJlOgorCSAqICAgZm9vLCQoeCksJCh5KQorCSAqCisJICog
YW5kIHNwbGl0IGludG86CisJICogICBuZXdfYXJndlswXSA9ICdmb28nCisJICogICBuZXdfYXJn
dlsxXSA9ICckKHgpJworCSAqICAgbmV3X2FyZ3ZbMl0gPSAnJCh5KScKKwkgKi8KKwl3aGlsZSAo
KnApIHsKKwkJaWYgKG5lc3QgPT0gMCAmJiAqcCA9PSAnLCcpIHsKKwkJCSpwID0gMDsKKwkJCWlm
IChuZXdfYXJnYyA+PSBGVU5DVElPTl9NQVhfQVJHUykKKwkJCQlwcGVycm9yKCJ0b28gbWFueSBm
dW5jdGlvbiBhcmd1bWVudHMiKTsKKwkJCW5ld19hcmd2W25ld19hcmdjKytdID0gcHJldjsKKwkJ
CXByZXYgPSBwICsgMTsKKwkJfSBlbHNlIGlmICgqcCA9PSAnKCcpIHsKKwkJCW5lc3QrKzsKKwkJ
fSBlbHNlIGlmICgqcCA9PSAnKScpIHsKKwkJCW5lc3QtLTsKKwkJfQorCisJCXArKzsKKwl9CisJ
bmV3X2FyZ3ZbbmV3X2FyZ2MrK10gPSBwcmV2OworCisJLyoKKwkgKiBTaGlmdCBhcmd1bWVudHMK
KwkgKiBuZXdfYXJndlswXSByZXByZXNlbnRzIGEgZnVuY3Rpb24gbmFtZSBvciBhIHZhcmlhYmxl
IG5hbWUuICBQdXQgaXQKKwkgKiBpbnRvICduYW1lJywgdGhlbiBzaGlmdCB0aGUgcmVzdCBvZiB0
aGUgYXJndW1lbnRzLiAgVGhpcyBzaW1wbGlmaWVzCisJICogJ2NvbnN0JyBoYW5kbGluZy4KKwkg
Ki8KKwluYW1lID0gZXhwYW5kX3N0cmluZ193aXRoX2FyZ3MobmV3X2FyZ3ZbMF0sIGFyZ2MsIGFy
Z3YpOworCW5ld19hcmdjLS07CisJZm9yIChpID0gMDsgaSA8IG5ld19hcmdjOyBpKyspCisJCW5l
d19hcmd2W2ldID0gZXhwYW5kX3N0cmluZ193aXRoX2FyZ3MobmV3X2FyZ3ZbaSArIDFdLAorCQkJ
CQkJICAgICAgYXJnYywgYXJndik7CisKKwkvKiBTZWFyY2ggZm9yIHZhcmlhYmxlcyAqLworCXJl
cyA9IHZhcmlhYmxlX2V4cGFuZChuYW1lLCBuZXdfYXJnYywgbmV3X2FyZ3YpOworCWlmIChyZXMp
CisJCWdvdG8gZnJlZTsKKworCS8qIExvb2sgZm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyAqLworCXJl
cyA9IGZ1bmN0aW9uX2V4cGFuZChuYW1lLCBuZXdfYXJnYywgbmV3X2FyZ3YpOworCWlmIChyZXMp
CisJCWdvdG8gZnJlZTsKKworCS8qIExhc3QsIHRyeSBlbnZpcm9ubWVudCB2YXJpYWJsZSAqLwor
CWlmIChuZXdfYXJnYyA9PSAwKSB7CisJCXJlcyA9IGVudl9leHBhbmQobmFtZSk7CisJCWlmIChy
ZXMpCisJCQlnb3RvIGZyZWU7CisJfQorCisJcmVzID0geHN0cmR1cCgiIik7CitmcmVlOgorCWZv
ciAoaSA9IDA7IGkgPCBuZXdfYXJnYzsgaSsrKQorCQlmcmVlKG5ld19hcmd2W2ldKTsKKwlmcmVl
KG5hbWUpOworZnJlZV90bXA6CisJZnJlZSh0bXApOworCisJcmV0dXJuIHJlczsKK30KKworLyoK
KyAqIEV4cGFuZCBhIHN0cmluZyB0aGF0IGZvbGxvd3MgJyQnCisgKgorICogRm9yIGV4YW1wbGUs
IGlmIHRoZSBpbnB1dCBzdHJpbmcgaXMKKyAqICAgICAoJChGT08pJCgkKEJBUikpKSQoQkFaKQor
ICogdGhpcyBoZWxwZXIgZXZhbHVhdGVzCisgKiAgICAgJCgkKEZPTykkKCQoQkFSKSkpCisgKiBh
bmQgcmV0dXJucyBhIG5ldyBzdHJpbmcgY29udGFpbmluZyB0aGUgZXhwYW5zaW9uIChub3RlIHRo
YXQgdGhlIHN0cmluZyBpcworICogcmVjdXJzaXZlbHkgZXhwYW5kZWQpLCBhbHNvIGFkdmFuY2lu
ZyAnc3RyJyB0byBwb2ludCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIKKyAqIGFmdGVyIHRoZSBjb3Jy
ZXNwb25kaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMsIGluIHRoaXMgY2FzZSwgKnN0ciB3aWxsIGJl
CisgKiAgICAgJChCQVIpCisgKi8KK3N0YXRpYyBjaGFyICpleHBhbmRfZG9sbGFyX3dpdGhfYXJn
cyhjb25zdCBjaGFyICoqc3RyLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNo
YXIgKnAgPSAqc3RyOworCWNvbnN0IGNoYXIgKnE7CisJaW50IG5lc3QgPSAwOworCisJLyoKKwkg
KiBJbiBLY29uZmlnLCB2YXJpYWJsZS9mdW5jdGlvbiByZWZlcmVuY2VzIGFsd2F5cyBzdGFydCB3
aXRoICIkKCIuCisJICogTmVpdGhlciBzaW5nbGUtbGV0dGVyIHZhcmlhYmxlcyBhcyBpbiAkQSBu
b3IgY3VybHkgYnJhY2VzIGFzIGluICR7Q0N9CisJICogYXJlIHN1cHBvcnRlZC4gICckJyBub3Qg
Zm9sbG93ZWQgYnkgJygnIGxvc2VzIGl0cyBzcGVjaWFsIG1lYW5pbmcuCisJICovCisJaWYgKCpw
ICE9ICcoJykgeworCQkqc3RyID0gcDsKKwkJcmV0dXJuIHhzdHJkdXAoIiQiKTsKKwl9CisKKwlw
Kys7CisJcSA9IHA7CisJd2hpbGUgKCpxKSB7CisJCWlmICgqcSA9PSAnKCcpIHsKKwkJCW5lc3Qr
KzsKKwkJfSBlbHNlIGlmICgqcSA9PSAnKScpIHsKKwkJCWlmIChuZXN0LS0gPT0gMCkKKwkJCQli
cmVhazsKKwkJfQorCQlxKys7CisJfQorCisJaWYgKCEqcSkKKwkJcHBlcnJvcigidW50ZXJtaW5h
dGVkIHJlZmVyZW5jZSB0byAnJXMnOiBtaXNzaW5nICcpJyIsIHApOworCisJLyogQWR2YW5jZSAn
c3RyJyB0byBhZnRlciB0aGUgZXhwYW5kZWQgaW5pdGlhbCBwb3J0aW9uIG9mIHRoZSBzdHJpbmcg
Ki8KKwkqc3RyID0gcSArIDE7CisKKwlyZXR1cm4gZXZhbF9jbGF1c2UocCwgcSAtIHAsIGFyZ2Ms
IGFyZ3YpOworfQorCitjaGFyICpleHBhbmRfZG9sbGFyKGNvbnN0IGNoYXIgKipzdHIpCit7CisJ
cmV0dXJuIGV4cGFuZF9kb2xsYXJfd2l0aF9hcmdzKHN0ciwgMCwgTlVMTCk7Cit9CisKK3N0YXRp
YyBjaGFyICpfX2V4cGFuZF9zdHJpbmcoY29uc3QgY2hhciAqKnN0ciwgYm9vbCAoKmlzX2VuZCko
Y2hhciBjKSwKKwkJCSAgICAgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFy
ICppbiwgKnA7CisJY2hhciAqZXhwYW5zaW9uLCAqb3V0OworCXNpemVfdCBpbl9sZW4sIG91dF9s
ZW47CisKKwlvdXQgPSB4bWFsbG9jKDEpOworCSpvdXQgPSAwOworCW91dF9sZW4gPSAxOworCisJ
cCA9IGluID0gKnN0cjsKKworCXdoaWxlICgxKSB7CisJCWlmICgqcCA9PSAnJCcpIHsKKwkJCWlu
X2xlbiA9IHAgLSBpbjsKKwkJCXArKzsKKwkJCWV4cGFuc2lvbiA9IGV4cGFuZF9kb2xsYXJfd2l0
aF9hcmdzKCZwLCBhcmdjLCBhcmd2KTsKKwkJCW91dF9sZW4gKz0gaW5fbGVuICsgc3RybGVuKGV4
cGFuc2lvbik7CisJCQlvdXQgPSB4cmVhbGxvYyhvdXQsIG91dF9sZW4pOworCQkJc3RybmNhdChv
dXQsIGluLCBpbl9sZW4pOworCQkJc3RyY2F0KG91dCwgZXhwYW5zaW9uKTsKKwkJCWZyZWUoZXhw
YW5zaW9uKTsKKwkJCWluID0gcDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGlzX2VuZCgq
cCkpCisJCQlicmVhazsKKworCQlwKys7CisJfQorCisJaW5fbGVuID0gcCAtIGluOworCW91dF9s
ZW4gKz0gaW5fbGVuOworCW91dCA9IHhyZWFsbG9jKG91dCwgb3V0X2xlbik7CisJc3RybmNhdChv
dXQsIGluLCBpbl9sZW4pOworCisJLyogQWR2YW5jZSAnc3RyJyB0byB0aGUgZW5kIGNoYXJhY3Rl
ciAqLworCSpzdHIgPSBwOworCisJcmV0dXJuIG91dDsKK30KKworc3RhdGljIGJvb2wgaXNfZW5k
X29mX3N0cihjaGFyIGMpCit7CisJcmV0dXJuICFjOworfQorCisvKgorICogRXhwYW5kIHZhcmlh
YmxlcyBhbmQgZnVuY3Rpb25zIGluIHRoZSBnaXZlbiBzdHJpbmcuICBVbmRlZmluZWQgdmFyaWFi
bGVzCisgKiBleHBhbmQgdG8gYW4gZW1wdHkgc3RyaW5nLgorICogVGhlIHJldHVybmVkIHN0cmlu
ZyBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZS4KKyAqLworc3RhdGljIGNoYXIgKmV4cGFuZF9zdHJp
bmdfd2l0aF9hcmdzKGNvbnN0IGNoYXIgKmluLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQorewor
CXJldHVybiBfX2V4cGFuZF9zdHJpbmcoJmluLCBpc19lbmRfb2Zfc3RyLCBhcmdjLCBhcmd2KTsK
K30KKworY2hhciAqZXhwYW5kX3N0cmluZyhjb25zdCBjaGFyICppbikKK3sKKwlyZXR1cm4gZXhw
YW5kX3N0cmluZ193aXRoX2FyZ3MoaW4sIDAsIE5VTEwpOworfQorCitzdGF0aWMgYm9vbCBpc19l
bmRfb2ZfdG9rZW4oY2hhciBjKQoreworCXJldHVybiAhKGlzYWxudW0oYykgfHwgYyA9PSAnXycg
fHwgYyA9PSAnLScpOworfQorCisvKgorICogRXhwYW5kIHZhcmlhYmxlcyBpbiBhIHRva2VuLiAg
VGhlIHBhcnNpbmcgc3RvcHMgd2hlbiBhIHRva2VuIHNlcGFyYXRlcgorICogKGluIG1vc3QgY2Fz
ZXMsIGl0IGlzIGEgd2hpdGVzcGFjZSkgaXMgZW5jb3VudGVyZWQuICAnc3RyJyBpcyB1cGRhdGVk
IHRvCisgKiBwb2ludCB0byB0aGUgbmV4dCBjaGFyYWN0ZXIuCisgKgorICogVGhlIHJldHVybmVk
IHN0cmluZyBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZS4KKyAqLworY2hhciAqZXhwYW5kX29uZV90
b2tlbihjb25zdCBjaGFyICoqc3RyKQoreworCXJldHVybiBfX2V4cGFuZF9zdHJpbmcoc3RyLCBp
c19lbmRfb2ZfdG9rZW4sIDAsIE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9xY29uZi1jZmcuc2ggYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLWNmZy5zaApuZXcg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMC4uMDJjY2MwYWUKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLWNmZy5zaApAQCAtMCwwICsxLDMyIEBACisj
IS9iaW4vc2gKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJRdDVD
b3JlIFF0NUd1aSBRdDVXaWRnZXRzIgorUEtHMj0iUXRDb3JlIFF0R3VpIgorCitpZiBbIC16ICIk
KGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4KKwllY2hvID4mMiAiKiIKKwllY2hvID4m
MiAiKiAnbWFrZSB4Y29uZmlnJyByZXF1aXJlcyAncGtnLWNvbmZpZycuIFBsZWFzZSBpbnN0YWxs
IGl0LiIKKwllY2hvID4mMiAiKiIKKwlleGl0IDEKK2ZpCisKK2lmIHBrZy1jb25maWcgLS1leGlz
dHMgJFBLRzsgdGhlbgorCWVjaG8gY2ZsYWdzPVwiLXN0ZD1jKysxMSAtZlBJQyAkKHBrZy1jb25m
aWcgLS1jZmxhZ3MgUXQ1Q29yZSBRdDVHdWkgUXQ1V2lkZ2V0cylcIgorCWVjaG8gbGlicz1cIiQo
cGtnLWNvbmZpZyAtLWxpYnMgJFBLRylcIgorCWVjaG8gbW9jPVwiJChwa2ctY29uZmlnIC0tdmFy
aWFibGU9aG9zdF9iaW5zIFF0NUNvcmUpL21vY1wiCisJZXhpdCAwCitmaQorCitpZiBwa2ctY29u
ZmlnIC0tZXhpc3RzICRQS0cyOyB0aGVuCisJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1j
ZmxhZ3MgJFBLRzIpXCIKKwllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cyKVwi
CisJZWNobyBtb2M9XCIkKHBrZy1jb25maWcgLS12YXJpYWJsZT1tb2NfbG9jYXRpb24gUXRDb3Jl
KVwiCisJZXhpdCAwCitmaQorCitlY2hvID4mMiAiKiIKK2VjaG8gPiYyICIqIENvdWxkIG5vdCBm
aW5kIFF0IHZpYSBwa2ctY29uZmlnLiIKK2VjaG8gPiYyICIqIFBsZWFzZSBpbnN0YWxsIGVpdGhl
ciBRdCA0Ljggb3IgNS54LiBhbmQgbWFrZSBzdXJlIGl0J3MgaW4gUEtHX0NPTkZJR19QQVRIIgor
ZWNobyA+JjIgIioiCitleGl0IDEKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNv
bmYuY2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwLi5jZTdmYzg3YQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvcWNvbmYuY2MKQEAgLTAsMCArMSwxODk2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwg
PHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBCb3JpcyBCYXJi
dWxvdnNraSA8YmJhcmJ1bG92c2tpQGdtYWlsLmNvbT4KKyAqLworCisjaW5jbHVkZSA8cWdsb2Jh
bC5oPgorCisjaW5jbHVkZSA8UU1haW5XaW5kb3c+CisjaW5jbHVkZSA8UUxpc3Q+CisjaW5jbHVk
ZSA8cXRleHRicm93c2VyLmg+CisjaW5jbHVkZSA8UUFjdGlvbj4KKyNpbmNsdWRlIDxRRmlsZURp
YWxvZz4KKyNpbmNsdWRlIDxRTWVudT4KKworI2luY2x1ZGUgPHFhcHBsaWNhdGlvbi5oPgorI2lu
Y2x1ZGUgPHFkZXNrdG9wd2lkZ2V0Lmg+CisjaW5jbHVkZSA8cXRvb2xiYXIuaD4KKyNpbmNsdWRl
IDxxbGF5b3V0Lmg+CisjaW5jbHVkZSA8cXNwbGl0dGVyLmg+CisjaW5jbHVkZSA8cWxpbmVlZGl0
Lmg+CisjaW5jbHVkZSA8cWxhYmVsLmg+CisjaW5jbHVkZSA8cXB1c2hidXR0b24uaD4KKyNpbmNs
dWRlIDxxbWVudWJhci5oPgorI2luY2x1ZGUgPHFtZXNzYWdlYm94Lmg+CisjaW5jbHVkZSA8cXJl
Z2V4cC5oPgorI2luY2x1ZGUgPHFldmVudC5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNp
bmNsdWRlICJsa2MuaCIKKyNpbmNsdWRlICJxY29uZi5oIgorCisjaW5jbHVkZSAicWNvbmYubW9j
IgorI2luY2x1ZGUgImltYWdlcy5oIgorCisKK3N0YXRpYyBRQXBwbGljYXRpb24gKmNvbmZpZ0Fw
cDsKK3N0YXRpYyBDb25maWdTZXR0aW5ncyAqY29uZmlnU2V0dGluZ3M7CisKK1FBY3Rpb24gKkNv
bmZpZ01haW5XaW5kb3c6OnNhdmVBY3Rpb247CisKK3N0YXRpYyBpbmxpbmUgUVN0cmluZyBxZ2V0
dGV4dChjb25zdCBjaGFyKiBzdHIpCit7CisJcmV0dXJuIFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQo
c3RyKTsKK30KKworQ29uZmlnU2V0dGluZ3M6OkNvbmZpZ1NldHRpbmdzKCkKKwk6IFFTZXR0aW5n
cygia2VybmVsLm9yZyIsICJxY29uZiIpCit7Cit9CisKKy8qKgorICogUmVhZHMgYSBsaXN0IG9m
IGludGVnZXIgdmFsdWVzIGZyb20gdGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzLgorICovCitRTGlz
dDxpbnQ+IENvbmZpZ1NldHRpbmdzOjpyZWFkU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBib29s
ICpvaykKK3sKKwlRTGlzdDxpbnQ+IHJlc3VsdDsKKworCWlmIChjb250YWlucyhrZXkpKQorCXsK
KwkJUVN0cmluZ0xpc3QgZW50cnlMaXN0ID0gdmFsdWUoa2V5KS50b1N0cmluZ0xpc3QoKTsKKwkJ
UVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0OworCisJCWZvciAoaXQgPSBlbnRyeUxpc3QuYmVnaW4o
KTsgaXQgIT0gZW50cnlMaXN0LmVuZCgpOyArK2l0KQorCQkJcmVzdWx0LnB1c2hfYmFjaygoKml0
KS50b0ludCgpKTsKKworCQkqb2sgPSB0cnVlOworCX0KKwllbHNlCisJCSpvayA9IGZhbHNlOwor
CisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBXcml0ZXMgYSBsaXN0IG9mIGludGVnZXIg
dmFsdWVzIHRvIHRoZSBhcHBsaWNhdGlvbiBzZXR0aW5ncy4KKyAqLworYm9vbCBDb25maWdTZXR0
aW5nczo6d3JpdGVTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGNvbnN0IFFMaXN0PGludD4mIHZh
bHVlKQoreworCVFTdHJpbmdMaXN0IHN0cmluZ0xpc3Q7CisJUUxpc3Q8aW50Pjo6Q29uc3RJdGVy
YXRvciBpdDsKKworCWZvciAoaXQgPSB2YWx1ZS5iZWdpbigpOyBpdCAhPSB2YWx1ZS5lbmQoKTsg
KytpdCkKKwkJc3RyaW5nTGlzdC5wdXNoX2JhY2soUVN0cmluZzo6bnVtYmVyKCppdCkpOworCXNl
dFZhbHVlKGtleSwgc3RyaW5nTGlzdCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworCisvKgorICog
c2V0IHRoZSBuZXcgZGF0YQorICogVE9ETyBjaGVjayB0aGUgdmFsdWUKKyAqLwordm9pZCBDb25m
aWdJdGVtOjpva1JlbmFtZShpbnQgY29sKQoreworfQorCisvKgorICogdXBkYXRlIHRoZSBkaXNw
bGF5ZWQgb2YgYSBtZW51IGVudHJ5CisgKi8KK3ZvaWQgQ29uZmlnSXRlbTo6dXBkYXRlTWVudSh2
b2lkKQoreworCUNvbmZpZ0xpc3QqIGxpc3Q7CisJc3RydWN0IHN5bWJvbCogc3ltOworCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsKKwlRU3RyaW5nIHByb21wdDsKKwlpbnQgdHlwZTsKKwl0cmlzdGF0
ZSBleHByOworCisJbGlzdCA9IGxpc3RWaWV3KCk7CisJaWYgKGdvUGFyZW50KSB7CisJCXNldFBp
eG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPm1lbnVCYWNrUGl4KTsKKwkJcHJvbXB0ID0gIi4uIjsK
KwkJZ290byBzZXRfcHJvbXB0OworCX0KKworCXN5bSA9IG1lbnUtPnN5bTsKKwlwcm9wID0gbWVu
dS0+cHJvbXB0OworCXByb21wdCA9IHFnZXR0ZXh0KG1lbnVfZ2V0X3Byb21wdChtZW51KSk7CisK
KwlpZiAocHJvcCkgc3dpdGNoIChwcm9wLT50eXBlKSB7CisJY2FzZSBQX01FTlU6CisJCWlmIChs
aXN0LT5tb2RlID09IHNpbmdsZU1vZGUgfHwgbGlzdC0+bW9kZSA9PSBzeW1ib2xNb2RlKSB7CisJ
CQkvKiBhIG1lbnVjb25maWcgZW50cnkgaXMgZGlzcGxheWVkIGRpZmZlcmVudGx5CisJCQkgKiBk
ZXBlbmRpbmcgd2hldGhlciBpdCdzIGF0IHRoZSB2aWV3IHJvb3Qgb3IgYSBjaGlsZC4KKwkJCSAq
LworCQkJaWYgKHN5bSAmJiBsaXN0LT5yb290RW50cnkgPT0gbWVudSkKKwkJCQlicmVhazsKKwkJ
CXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPm1lbnVQaXgpOworCQl9IGVsc2UgeworCQkJ
aWYgKHN5bSkKKwkJCQlicmVhazsKKwkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIFFJY29uKCkp
OworCQl9CisJCWdvdG8gc2V0X3Byb21wdDsKKwljYXNlIFBfQ09NTUVOVDoKKwkJc2V0UGl4bWFw
KHByb21wdENvbElkeCwgUUljb24oKSk7CisJCWdvdG8gc2V0X3Byb21wdDsKKwlkZWZhdWx0Ogor
CQk7CisJfQorCWlmICghc3ltKQorCQlnb3RvIHNldF9wcm9tcHQ7CisKKwlzZXRUZXh0KG5hbWVD
b2xJZHgsIFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3ltLT5uYW1lKSk7CisKKwl0eXBlID0gc3lt
X2dldF90eXBlKHN5bSk7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2Fz
ZSBTX1RSSVNUQVRFOgorCQljaGFyIGNoOworCisJCWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0p
ICYmIGxpc3QtPm9wdE1vZGUgPT0gbm9ybWFsT3B0KSB7CisJCQlzZXRQaXhtYXAocHJvbXB0Q29s
SWR4LCBRSWNvbigpKTsKKwkJCXNldFRleHQobm9Db2xJZHgsIFFTdHJpbmc6Om51bGwpOworCQkJ
c2V0VGV4dChtb2RDb2xJZHgsIFFTdHJpbmc6Om51bGwpOworCQkJc2V0VGV4dCh5ZXNDb2xJZHgs
IFFTdHJpbmc6Om51bGwpOworCQkJYnJlYWs7CisJCX0KKwkJZXhwciA9IHN5bV9nZXRfdHJpc3Rh
dGVfdmFsdWUoc3ltKTsKKwkJc3dpdGNoIChleHByKSB7CisJCWNhc2UgeWVzOgorCQkJaWYgKHN5
bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB0eXBlID09IFNfQk9PTEVBTikKKwkJCQlzZXRQaXht
YXAocHJvbXB0Q29sSWR4LCBsaXN0LT5jaG9pY2VZZXNQaXgpOworCQkJZWxzZQorCQkJCXNldFBp
eG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbFllc1BpeCk7CisJCQlzZXRUZXh0KHllc0Nv
bElkeCwgIlkiKTsKKwkJCWNoID0gJ1knOworCQkJYnJlYWs7CisJCWNhc2UgbW9kOgorCQkJc2V0
UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+c3ltYm9sTW9kUGl4KTsKKwkJCXNldFRleHQobW9k
Q29sSWR4LCAiTSIpOworCQkJY2ggPSAnTSc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlm
IChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdHlwZSA9PSBTX0JPT0xFQU4pCisJCQkJc2V0
UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+Y2hvaWNlTm9QaXgpOworCQkJZWxzZQorCQkJCXNl
dFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbE5vUGl4KTsKKwkJCXNldFRleHQobm9D
b2xJZHgsICJOIik7CisJCQljaCA9ICdOJzsKKwkJCWJyZWFrOworCQl9CisJCWlmIChleHByICE9
IG5vKQorCQkJc2V0VGV4dChub0NvbElkeCwgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0s
IG5vKSA/ICJfIiA6IDApOworCQlpZiAoZXhwciAhPSBtb2QpCisJCQlzZXRUZXh0KG1vZENvbElk
eCwgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1vZCkgPyAiXyIgOiAwKTsKKwkJaWYg
KGV4cHIgIT0geWVzKQorCQkJc2V0VGV4dCh5ZXNDb2xJZHgsIHN5bV90cmlzdGF0ZV93aXRoaW5f
cmFuZ2Uoc3ltLCB5ZXMpID8gIl8iIDogMCk7CisKKwkJc2V0VGV4dChkYXRhQ29sSWR4LCBRQ2hh
cihjaCkpOworCQlicmVhazsKKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NU
UklORzoKKwkJY29uc3QgY2hhciogZGF0YTsKKworCQlkYXRhID0gc3ltX2dldF9zdHJpbmdfdmFs
dWUoc3ltKTsKKworCQlzZXRUZXh0KGRhdGFDb2xJZHgsIGRhdGEpOworCQlpZiAodHlwZSA9PSBT
X1NUUklORykKKwkJCXByb21wdCA9IFFTdHJpbmcoIiUxOiAlMiIpLmFyZyhwcm9tcHQpLmFyZyhk
YXRhKTsKKwkJZWxzZQorCQkJcHJvbXB0ID0gUVN0cmluZygiKCUyKSAlMSIpLmFyZyhwcm9tcHQp
LmFyZyhkYXRhKTsKKwkJYnJlYWs7CisJfQorCWlmICghc3ltX2hhc192YWx1ZShzeW0pICYmIHZp
c2libGUpCisJCXByb21wdCArPSAiIChORVcpIjsKK3NldF9wcm9tcHQ6CisJc2V0VGV4dChwcm9t
cHRDb2xJZHgsIHByb21wdCk7Cit9CisKK3ZvaWQgQ29uZmlnSXRlbTo6dGVzdFVwZGF0ZU1lbnUo
Ym9vbCB2KQoreworCUNvbmZpZ0l0ZW0qIGk7CisKKwl2aXNpYmxlID0gdjsKKwlpZiAoIW1lbnUp
CisJCXJldHVybjsKKworCXN5bV9jYWxjX3ZhbHVlKG1lbnUtPnN5bSk7CisJaWYgKG1lbnUtPmZs
YWdzICYgTUVOVV9DSEFOR0VEKSB7CisJCS8qIHRoZSBtZW51IGVudHJ5IGNoYW5nZWQsIHNvIHVw
ZGF0ZSBhbGwgbGlzdCBpdGVtcyAqLworCQltZW51LT5mbGFncyAmPSB+TUVOVV9DSEFOR0VEOwor
CQlmb3IgKGkgPSAoQ29uZmlnSXRlbSopbWVudS0+ZGF0YTsgaTsgaSA9IGktPm5leHRJdGVtKQor
CQkJaS0+dXBkYXRlTWVudSgpOworCX0gZWxzZSBpZiAobGlzdFZpZXcoKS0+dXBkYXRlQWxsKQor
CQl1cGRhdGVNZW51KCk7Cit9CisKKworLyoKKyAqIGNvbnN0cnVjdCBhIG1lbnUgZW50cnkKKyAq
Lwordm9pZCBDb25maWdJdGVtOjppbml0KHZvaWQpCit7CisJaWYgKG1lbnUpIHsKKwkJQ29uZmln
TGlzdCogbGlzdCA9IGxpc3RWaWV3KCk7CisJCW5leHRJdGVtID0gKENvbmZpZ0l0ZW0qKW1lbnUt
PmRhdGE7CisJCW1lbnUtPmRhdGEgPSB0aGlzOworCisJCWlmIChsaXN0LT5tb2RlICE9IGZ1bGxN
b2RlKQorCQkJc2V0RXhwYW5kZWQodHJ1ZSk7CisJCXN5bV9jYWxjX3ZhbHVlKG1lbnUtPnN5bSk7
CisJfQorCXVwZGF0ZU1lbnUoKTsKK30KKworLyoKKyAqIGRlc3RydWN0IGEgbWVudSBlbnRyeQor
ICovCitDb25maWdJdGVtOjp+Q29uZmlnSXRlbSh2b2lkKQoreworCWlmIChtZW51KSB7CisJCUNv
bmZpZ0l0ZW0qKiBpcCA9IChDb25maWdJdGVtKiopJm1lbnUtPmRhdGE7CisJCWZvciAoOyAqaXA7
IGlwID0gJigqaXApLT5uZXh0SXRlbSkgeworCQkJaWYgKCppcCA9PSB0aGlzKSB7CisJCQkJKmlw
ID0gbmV4dEl0ZW07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK0NvbmZpZ0xpbmVF
ZGl0OjpDb25maWdMaW5lRWRpdChDb25maWdWaWV3KiBwYXJlbnQpCisJOiBQYXJlbnQocGFyZW50
KQoreworCWNvbm5lY3QodGhpcywgU0lHTkFMKGVkaXRpbmdGaW5pc2hlZCgpKSwgU0xPVChoaWRl
KCkpKTsKK30KKwordm9pZCBDb25maWdMaW5lRWRpdDo6c2hvdyhDb25maWdJdGVtKiBpKQorewor
CWl0ZW0gPSBpOworCWlmIChzeW1fZ2V0X3N0cmluZ192YWx1ZShpdGVtLT5tZW51LT5zeW0pKQor
CQlzZXRUZXh0KFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3ltX2dldF9zdHJpbmdfdmFsdWUoaXRl
bS0+bWVudS0+c3ltKSkpOworCWVsc2UKKwkJc2V0VGV4dChRU3RyaW5nOjpudWxsKTsKKwlQYXJl
bnQ6OnNob3coKTsKKwlzZXRGb2N1cygpOworfQorCit2b2lkIENvbmZpZ0xpbmVFZGl0OjprZXlQ
cmVzc0V2ZW50KFFLZXlFdmVudCogZSkKK3sKKwlzd2l0Y2ggKGUtPmtleSgpKSB7CisJY2FzZSBR
dDo6S2V5X0VzY2FwZToKKwkJYnJlYWs7CisJY2FzZSBRdDo6S2V5X1JldHVybjoKKwljYXNlIFF0
OjpLZXlfRW50ZXI6CisJCXN5bV9zZXRfc3RyaW5nX3ZhbHVlKGl0ZW0tPm1lbnUtPnN5bSwgdGV4
dCgpLnRvTGF0aW4xKCkpOworCQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVtKTsKKwkJYnJlYWs7
CisJZGVmYXVsdDoKKwkJUGFyZW50OjprZXlQcmVzc0V2ZW50KGUpOworCQlyZXR1cm47CisJfQor
CWUtPmFjY2VwdCgpOworCXBhcmVudCgpLT5saXN0LT5zZXRGb2N1cygpOworCWhpZGUoKTsKK30K
KworQ29uZmlnTGlzdDo6Q29uZmlnTGlzdChDb25maWdWaWV3KiBwLCBjb25zdCBjaGFyICpuYW1l
KQorCTogUGFyZW50KHApLAorCSAgdXBkYXRlQWxsKGZhbHNlKSwKKwkgIHN5bWJvbFllc1BpeCh4
cG1fc3ltYm9sX3llcyksIHN5bWJvbE1vZFBpeCh4cG1fc3ltYm9sX21vZCksIHN5bWJvbE5vUGl4
KHhwbV9zeW1ib2xfbm8pLAorCSAgY2hvaWNlWWVzUGl4KHhwbV9jaG9pY2VfeWVzKSwgY2hvaWNl
Tm9QaXgoeHBtX2Nob2ljZV9ubyksCisJICBtZW51UGl4KHhwbV9tZW51KSwgbWVudUludlBpeCh4
cG1fbWVudV9pbnYpLCBtZW51QmFja1BpeCh4cG1fbWVudWJhY2spLCB2b2lkUGl4KHhwbV92b2lk
KSwKKwkgIHNob3dOYW1lKGZhbHNlKSwgc2hvd1JhbmdlKGZhbHNlKSwgc2hvd0RhdGEoZmFsc2Up
LCBtb2RlKHNpbmdsZU1vZGUpLCBvcHRNb2RlKG5vcm1hbE9wdCksCisJICByb290RW50cnkoMCks
IGhlYWRlclBvcHVwKDApCit7CisJaW50IGk7CisKKwlzZXRPYmplY3ROYW1lKG5hbWUpOworCXNl
dFNvcnRpbmdFbmFibGVkKGZhbHNlKTsKKwlzZXRSb290SXNEZWNvcmF0ZWQodHJ1ZSk7CisKKwlz
ZXRWZXJ0aWNhbFNjcm9sbE1vZGUoU2Nyb2xsUGVyUGl4ZWwpOworCXNldEhvcml6b250YWxTY3Jv
bGxNb2RlKFNjcm9sbFBlclBpeGVsKTsKKworCXNldEhlYWRlckxhYmVscyhRU3RyaW5nTGlzdCgp
IDw8ICJPcHRpb24iIDw8ICJOYW1lIiA8PCAiTiIgPDwgIk0iIDw8ICJZIiA8PCAiVmFsdWUiKTsK
KworCWNvbm5lY3QodGhpcywgU0lHTkFMKGl0ZW1TZWxlY3Rpb25DaGFuZ2VkKHZvaWQpKSwKKwkJ
U0xPVCh1cGRhdGVTZWxlY3Rpb24odm9pZCkpKTsKKworCWlmIChuYW1lKSB7CisJCWNvbmZpZ1Nl
dHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUpOworCQlzaG93TmFtZSA9IGNvbmZpZ1NldHRpbmdzLT52
YWx1ZSgiL3Nob3dOYW1lIiwgZmFsc2UpLnRvQm9vbCgpOworCQlzaG93UmFuZ2UgPSBjb25maWdT
ZXR0aW5ncy0+dmFsdWUoIi9zaG93UmFuZ2UiLCBmYWxzZSkudG9Cb29sKCk7CisJCXNob3dEYXRh
ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RhdGEiLCBmYWxzZSkudG9Cb29sKCk7CisJ
CW9wdE1vZGUgPSAoZW51bSBvcHRpb25Nb2RlKWNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL29wdGlv
bk1vZGUiLCAwKS50b0ludCgpOworCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwkJY29u
bmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChzYXZlU2V0dGluZ3Mo
KSkpOworCX0KKworCWFkZENvbHVtbihwcm9tcHRDb2xJZHgpOworCisJcmVpbml0KCk7Cit9CisK
K2Jvb2wgQ29uZmlnTGlzdDo6bWVudVNraXAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJaWYgKG9w
dE1vZGUgPT0gbm9ybWFsT3B0ICYmIG1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJcmV0dXJuIGZh
bHNlOworCWlmIChvcHRNb2RlID09IHByb21wdE9wdCAmJiBtZW51X2hhc19wcm9tcHQobWVudSkp
CisJCXJldHVybiBmYWxzZTsKKwlpZiAob3B0TW9kZSA9PSBhbGxPcHQpCisJCXJldHVybiBmYWxz
ZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb25maWdMaXN0OjpyZWluaXQodm9pZCkKK3sK
KwlyZW1vdmVDb2x1bW4oZGF0YUNvbElkeCk7CisJcmVtb3ZlQ29sdW1uKHllc0NvbElkeCk7CisJ
cmVtb3ZlQ29sdW1uKG1vZENvbElkeCk7CisJcmVtb3ZlQ29sdW1uKG5vQ29sSWR4KTsKKwlyZW1v
dmVDb2x1bW4obmFtZUNvbElkeCk7CisKKwlpZiAoc2hvd05hbWUpCisJCWFkZENvbHVtbihuYW1l
Q29sSWR4KTsKKwlpZiAoc2hvd1JhbmdlKSB7CisJCWFkZENvbHVtbihub0NvbElkeCk7CisJCWFk
ZENvbHVtbihtb2RDb2xJZHgpOworCQlhZGRDb2x1bW4oeWVzQ29sSWR4KTsKKwl9CisJaWYgKHNo
b3dEYXRhKQorCQlhZGRDb2x1bW4oZGF0YUNvbElkeCk7CisKKwl1cGRhdGVMaXN0QWxsKCk7Cit9
CisKK3ZvaWQgQ29uZmlnTGlzdDo6c2F2ZVNldHRpbmdzKHZvaWQpCit7CisJaWYgKCFvYmplY3RO
YW1lKCkuaXNFbXB0eSgpKSB7CisJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG9iamVjdE5h
bWUoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dOYW1lIiwgc2hvd05hbWUp
OworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93UmFuZ2UiLCBzaG93UmFuZ2UpOwor
CQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93RGF0YSIsIHNob3dEYXRhKTsKKwkJY29u
ZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvb3B0aW9uTW9kZSIsIChpbnQpb3B0TW9kZSk7CisJCWNv
bmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOworCX0KK30KKworQ29uZmlnSXRlbSogQ29uZmlnTGlz
dDo6ZmluZENvbmZpZ0l0ZW0oc3RydWN0IG1lbnUgKm1lbnUpCit7CisJQ29uZmlnSXRlbSogaXRl
bSA9IChDb25maWdJdGVtKiltZW51LT5kYXRhOworCisJZm9yICg7IGl0ZW07IGl0ZW0gPSBpdGVt
LT5uZXh0SXRlbSkgeworCQlpZiAodGhpcyA9PSBpdGVtLT5saXN0VmlldygpKQorCQkJYnJlYWs7
CisJfQorCisJcmV0dXJuIGl0ZW07Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6dXBkYXRlU2VsZWN0
aW9uKHZvaWQpCit7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJZW51bSBwcm9wX3R5cGUgdHlwZTsK
KworCWlmIChzZWxlY3RlZEl0ZW1zKCkuY291bnQoKSA9PSAwKQorCQlyZXR1cm47CisKKwlDb25m
aWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0qKXNlbGVjdGVkSXRlbXMoKS5maXJzdCgpOworCWlm
ICghaXRlbSkKKwkJcmV0dXJuOworCisJbWVudSA9IGl0ZW0tPm1lbnU7CisJZW1pdCBtZW51Q2hh
bmdlZChtZW51KTsKKwlpZiAoIW1lbnUpCisJCXJldHVybjsKKwl0eXBlID0gbWVudS0+cHJvbXB0
ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCWlmIChtb2RlID09IG1lbnVNb2Rl
ICYmIHR5cGUgPT0gUF9NRU5VKQorCQllbWl0IG1lbnVTZWxlY3RlZChtZW51KTsKK30KKwordm9p
ZCBDb25maWdMaXN0Ojp1cGRhdGVMaXN0KENvbmZpZ0l0ZW0qIGl0ZW0pCit7CisJQ29uZmlnSXRl
bSogbGFzdCA9IDA7CisKKwlpZiAoIXJvb3RFbnRyeSkgeworCQlpZiAobW9kZSAhPSBsaXN0TW9k
ZSkKKwkJCWdvdG8gdXBkYXRlOworCQlRVHJlZVdpZGdldEl0ZW1JdGVyYXRvciBpdCh0aGlzKTsK
KwkJQ29uZmlnSXRlbSogaXRlbTsKKworCQl3aGlsZSAoKml0KSB7CisJCQlpdGVtID0gKENvbmZp
Z0l0ZW0qKSgqaXQpOworCQkJaWYgKCFpdGVtLT5tZW51KQorCQkJCWNvbnRpbnVlOworCQkJaXRl
bS0+dGVzdFVwZGF0ZU1lbnUobWVudV9pc192aXNpYmxlKGl0ZW0tPm1lbnUpKTsKKworCQkJKytp
dDsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKHJvb3RFbnRyeSAhPSAmcm9vdG1lbnUgJiYg
KG1vZGUgPT0gc2luZ2xlTW9kZSB8fAorCSAgICAobW9kZSA9PSBzeW1ib2xNb2RlICYmIHJvb3RF
bnRyeS0+cGFyZW50ICE9ICZyb290bWVudSkpKSB7CisJCWl0ZW0gPSAoQ29uZmlnSXRlbSAqKXRv
cExldmVsSXRlbSgwKTsKKwkJaWYgKCFpdGVtKQorCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHRo
aXMsIDAsIHRydWUpOworCQlsYXN0ID0gaXRlbTsKKwl9CisJaWYgKChtb2RlID09IHNpbmdsZU1v
ZGUgfHwgKG1vZGUgPT0gc3ltYm9sTW9kZSAmJiAhKHJvb3RFbnRyeS0+ZmxhZ3MgJiBNRU5VX1JP
T1QpKSkgJiYKKwkgICAgcm9vdEVudHJ5LT5zeW0gJiYgcm9vdEVudHJ5LT5wcm9tcHQpIHsKKwkJ
aXRlbSA9IGxhc3QgPyBsYXN0LT5uZXh0U2libGluZygpIDogZmlyc3RDaGlsZCgpOworCQlpZiAo
IWl0ZW0pCisJCQlpdGVtID0gbmV3IENvbmZpZ0l0ZW0odGhpcywgbGFzdCwgcm9vdEVudHJ5LCB0
cnVlKTsKKwkJZWxzZQorCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUodHJ1ZSk7CisKKwkJdXBkYXRl
TWVudUxpc3QoaXRlbSwgcm9vdEVudHJ5KTsKKwkJdXBkYXRlKCk7CisJCXJlc2l6ZUNvbHVtblRv
Q29udGVudHMoMCk7CisJCXJldHVybjsKKwl9Cit1cGRhdGU6CisJdXBkYXRlTWVudUxpc3QodGhp
cywgcm9vdEVudHJ5KTsKKwl1cGRhdGUoKTsKKwlyZXNpemVDb2x1bW5Ub0NvbnRlbnRzKDApOwor
fQorCit2b2lkIENvbmZpZ0xpc3Q6OnNldFZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0sIHRyaXN0YXRl
IHZhbCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07CisJaW50IHR5cGU7CisJdHJpc3RhdGUgb2xk
dmFsOworCisJc3ltID0gaXRlbS0+bWVudSA/IGl0ZW0tPm1lbnUtPnN5bSA6IDA7CisJaWYgKCFz
eW0pCisJCXJldHVybjsKKworCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlzd2l0Y2ggKHR5
cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCW9sZHZhbCA9IHN5
bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKworCQlpZiAoIXN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCB2YWwpKQorCQkJcmV0dXJuOworCQlpZiAob2xkdmFsID09IG5vICYmIGl0ZW0tPm1l
bnUtPmxpc3QpCisJCQlpdGVtLT5zZXRFeHBhbmRlZCh0cnVlKTsKKwkJcGFyZW50KCktPnVwZGF0
ZUxpc3QoaXRlbSk7CisJCWJyZWFrOworCX0KK30KKwordm9pZCBDb25maWdMaXN0OjpjaGFuZ2VW
YWx1ZShDb25maWdJdGVtKiBpdGVtKQoreworCXN0cnVjdCBzeW1ib2wqIHN5bTsKKwlzdHJ1Y3Qg
bWVudSogbWVudTsKKwlpbnQgdHlwZSwgb2xkZXhwciwgbmV3ZXhwcjsKKworCW1lbnUgPSBpdGVt
LT5tZW51OworCWlmICghbWVudSkKKwkJcmV0dXJuOworCXN5bSA9IG1lbnUtPnN5bTsKKwlpZiAo
IXN5bSkgeworCQlpZiAoaXRlbS0+bWVudS0+bGlzdCkKKwkJCWl0ZW0tPnNldEV4cGFuZGVkKCFp
dGVtLT5pc0V4cGFuZGVkKCkpOworCQlyZXR1cm47CisJfQorCisJdHlwZSA9IHN5bV9nZXRfdHlw
ZShzeW0pOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklT
VEFURToKKwkJb2xkZXhwciA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJbmV3ZXhw
ciA9IHN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJaWYgKGl0ZW0tPm1lbnUtPmxp
c3QpIHsKKwkJCWlmIChvbGRleHByID09IG5ld2V4cHIpCisJCQkJaXRlbS0+c2V0RXhwYW5kZWQo
IWl0ZW0tPmlzRXhwYW5kZWQoKSk7CisJCQllbHNlIGlmIChvbGRleHByID09IG5vKQorCQkJCWl0
ZW0tPnNldEV4cGFuZGVkKHRydWUpOworCQl9CisJCWlmIChvbGRleHByICE9IG5ld2V4cHIpCisJ
CQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVtKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lOVDoKKwlj
YXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6CisJCXBhcmVudCgpLT5saW5lRWRpdC0+c2hvdyhp
dGVtKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIENvbmZpZ0xpc3Q6OnNldFJvb3RNZW51KHN0
cnVjdCBtZW51ICptZW51KQoreworCWVudW0gcHJvcF90eXBlIHR5cGU7CisKKwlpZiAocm9vdEVu
dHJ5ID09IG1lbnUpCisJCXJldHVybjsKKwl0eXBlID0gbWVudSAmJiBtZW51LT5wcm9tcHQgPyBt
ZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJaWYgKHR5cGUgIT0gUF9NRU5VKQorCQly
ZXR1cm47CisJdXBkYXRlTWVudUxpc3QodGhpcywgMCk7CisJcm9vdEVudHJ5ID0gbWVudTsKKwl1
cGRhdGVMaXN0QWxsKCk7CisJaWYgKGN1cnJlbnRJdGVtKCkpIHsKKwkJY3VycmVudEl0ZW0oKS0+
c2V0U2VsZWN0ZWQoaGFzRm9jdXMoKSk7CisJCXNjcm9sbFRvSXRlbShjdXJyZW50SXRlbSgpKTsK
Kwl9Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6c2V0UGFyZW50TWVudSh2b2lkKQoreworCUNvbmZp
Z0l0ZW0qIGl0ZW07CisJc3RydWN0IG1lbnUgKm9sZHJvb3Q7CisKKwlvbGRyb290ID0gcm9vdEVu
dHJ5OworCWlmIChyb290RW50cnkgPT0gJnJvb3RtZW51KQorCQlyZXR1cm47CisJc2V0Um9vdE1l
bnUobWVudV9nZXRfcGFyZW50X21lbnUocm9vdEVudHJ5LT5wYXJlbnQpKTsKKworCVFUcmVlV2lk
Z2V0SXRlbUl0ZXJhdG9yIGl0KHRoaXMpOworCXdoaWxlICgqaXQpIHsKKwkJaXRlbSA9IChDb25m
aWdJdGVtICopKCppdCk7CisJCWlmIChpdGVtLT5tZW51ID09IG9sZHJvb3QpIHsKKwkJCXNldEN1
cnJlbnRJdGVtKGl0ZW0pOworCQkJc2Nyb2xsVG9JdGVtKGl0ZW0pOworCQkJYnJlYWs7CisJCX0K
KworCQkrK2l0OworCX0KK30KKworLyoKKyAqIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIGEg
bWVudSBlbnRyeQorICogICByZW1vdmVzL2FkZHMgdGhlIGVudHJpZXMgZnJvbSB0aGUgcGFyZW50
IHdpZGdldCBhcyBuZWNlc3NhcnkKKyAqCisgKiBwYXJlbnQ6IGVpdGhlciB0aGUgbWVudSBsaXN0
IHdpZGdldCBvciBhIG1lbnUgZW50cnkgd2lkZ2V0CisgKiBtZW51OiBlbnRyeSB0byBiZSB1cGRh
dGVkCisgKi8KK3ZvaWQgQ29uZmlnTGlzdDo6dXBkYXRlTWVudUxpc3QoQ29uZmlnSXRlbSAqcGFy
ZW50LCBzdHJ1Y3QgbWVudSogbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSogY2hpbGQ7CisJQ29uZmln
SXRlbSogaXRlbTsKKwlDb25maWdJdGVtKiBsYXN0OworCWJvb2wgdmlzaWJsZTsKKwllbnVtIHBy
b3BfdHlwZSB0eXBlOworCisJaWYgKCFtZW51KSB7CisJCXdoaWxlIChwYXJlbnQtPmNoaWxkQ291
bnQoKSA+IDApCisJCXsKKwkJCWRlbGV0ZSBwYXJlbnQtPnRha2VDaGlsZCgwKTsKKwkJfQorCisJ
CXJldHVybjsKKwl9CisKKwlsYXN0ID0gcGFyZW50LT5maXJzdENoaWxkKCk7CisJaWYgKGxhc3Qg
JiYgIWxhc3QtPmdvUGFyZW50KQorCQlsYXN0ID0gMDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlz
dDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaXRlbSA9IGxhc3QgPyBsYXN0LT5u
ZXh0U2libGluZygpIDogcGFyZW50LT5maXJzdENoaWxkKCk7CisJCXR5cGUgPSBjaGlsZC0+cHJv
bXB0ID8gY2hpbGQtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKworCQlzd2l0Y2ggKG1vZGUp
IHsKKwkJY2FzZSBtZW51TW9kZToKKwkJCWlmICghKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkp
CisJCQkJZ290byBoaWRlOworCQkJYnJlYWs7CisJCWNhc2Ugc3ltYm9sTW9kZToKKwkJCWlmIChj
aGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpCisJCQkJZ290byBoaWRlOworCQkJYnJlYWs7CisJCWRl
ZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCXZpc2libGUgPSBtZW51X2lzX3Zpc2libGUoY2hp
bGQpOworCQlpZiAoIW1lbnVTa2lwKGNoaWxkKSkgeworCQkJaWYgKCFjaGlsZC0+c3ltICYmICFj
aGlsZC0+bGlzdCAmJiAhY2hpbGQtPnByb21wdCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghaXRl
bSB8fCBpdGVtLT5tZW51ICE9IGNoaWxkKQorCQkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbShwYXJl
bnQsIGxhc3QsIGNoaWxkLCB2aXNpYmxlKTsKKwkJCWVsc2UKKwkJCQlpdGVtLT50ZXN0VXBkYXRl
TWVudSh2aXNpYmxlKTsKKworCQkJaWYgKG1vZGUgPT0gZnVsbE1vZGUgfHwgbW9kZSA9PSBtZW51
TW9kZSB8fCB0eXBlICE9IFBfTUVOVSkKKwkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCBjaGlsZCk7
CisJCQllbHNlCisJCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgMCk7CisJCQlsYXN0ID0gaXRlbTsK
KwkJCWNvbnRpbnVlOworCQl9CisJaGlkZToKKwkJaWYgKGl0ZW0gJiYgaXRlbS0+bWVudSA9PSBj
aGlsZCkgeworCQkJbGFzdCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworCQkJaWYgKGxhc3QgPT0g
aXRlbSkKKwkJCQlsYXN0ID0gMDsKKwkJCWVsc2Ugd2hpbGUgKGxhc3QtPm5leHRTaWJsaW5nKCkg
IT0gaXRlbSkKKwkJCQlsYXN0ID0gbGFzdC0+bmV4dFNpYmxpbmcoKTsKKwkJCWRlbGV0ZSBpdGVt
OworCQl9CisJfQorfQorCit2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZU1lbnVMaXN0KENvbmZpZ0xp
c3QgKnBhcmVudCwgc3RydWN0IG1lbnUqIG1lbnUpCit7CisJc3RydWN0IG1lbnUqIGNoaWxkOwor
CUNvbmZpZ0l0ZW0qIGl0ZW07CisJQ29uZmlnSXRlbSogbGFzdDsKKwlib29sIHZpc2libGU7CisJ
ZW51bSBwcm9wX3R5cGUgdHlwZTsKKworCWlmICghbWVudSkgeworCQl3aGlsZSAocGFyZW50LT50
b3BMZXZlbEl0ZW1Db3VudCgpID4gMCkKKwkJeworCQkJZGVsZXRlIHBhcmVudC0+dGFrZVRvcExl
dmVsSXRlbSgwKTsKKwkJfQorCisJCXJldHVybjsKKwl9CisKKwlsYXN0ID0gKENvbmZpZ0l0ZW0q
KXBhcmVudC0+dG9wTGV2ZWxJdGVtKDApOworCWlmIChsYXN0ICYmICFsYXN0LT5nb1BhcmVudCkK
KwkJbGFzdCA9IDA7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0KSB7CisJCWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmcoKSA6IChDb25m
aWdJdGVtKilwYXJlbnQtPnRvcExldmVsSXRlbSgwKTsKKwkJdHlwZSA9IGNoaWxkLT5wcm9tcHQg
PyBjaGlsZC0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCisJCXN3aXRjaCAobW9kZSkgewor
CQljYXNlIG1lbnVNb2RlOgorCQkJaWYgKCEoY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UKSkKKwkJ
CQlnb3RvIGhpZGU7CisJCQlicmVhazsKKwkJY2FzZSBzeW1ib2xNb2RlOgorCQkJaWYgKGNoaWxk
LT5mbGFncyAmIE1FTlVfUk9PVCkKKwkJCQlnb3RvIGhpZGU7CisJCQlicmVhazsKKwkJZGVmYXVs
dDoKKwkJCWJyZWFrOworCQl9CisKKwkJdmlzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShjaGlsZCk7
CisJCWlmICghbWVudVNraXAoY2hpbGQpKSB7CisJCQlpZiAoIWNoaWxkLT5zeW0gJiYgIWNoaWxk
LT5saXN0ICYmICFjaGlsZC0+cHJvbXB0KQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpdGVtIHx8
IGl0ZW0tPm1lbnUgIT0gY2hpbGQpCisJCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHBhcmVudCwg
bGFzdCwgY2hpbGQsIHZpc2libGUpOworCQkJZWxzZQorCQkJCWl0ZW0tPnRlc3RVcGRhdGVNZW51
KHZpc2libGUpOworCisJCQlpZiAobW9kZSA9PSBmdWxsTW9kZSB8fCBtb2RlID09IG1lbnVNb2Rl
IHx8IHR5cGUgIT0gUF9NRU5VKQorCQkJCXVwZGF0ZU1lbnVMaXN0KGl0ZW0sIGNoaWxkKTsKKwkJ
CWVsc2UKKwkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCAwKTsKKwkJCWxhc3QgPSBpdGVtOworCQkJ
Y29udGludWU7CisJCX0KKwloaWRlOgorCQlpZiAoaXRlbSAmJiBpdGVtLT5tZW51ID09IGNoaWxk
KSB7CisJCQlsYXN0ID0gKENvbmZpZ0l0ZW0qKXBhcmVudC0+dG9wTGV2ZWxJdGVtKDApOworCQkJ
aWYgKGxhc3QgPT0gaXRlbSkKKwkJCQlsYXN0ID0gMDsKKwkJCWVsc2Ugd2hpbGUgKGxhc3QtPm5l
eHRTaWJsaW5nKCkgIT0gaXRlbSkKKwkJCQlsYXN0ID0gbGFzdC0+bmV4dFNpYmxpbmcoKTsKKwkJ
CWRlbGV0ZSBpdGVtOworCQl9CisJfQorfQorCit2b2lkIENvbmZpZ0xpc3Q6OmtleVByZXNzRXZl
bnQoUUtleUV2ZW50KiBldikKK3sKKwlRVHJlZVdpZGdldEl0ZW0qIGkgPSBjdXJyZW50SXRlbSgp
OworCUNvbmZpZ0l0ZW0qIGl0ZW07CisJc3RydWN0IG1lbnUgKm1lbnU7CisJZW51bSBwcm9wX3R5
cGUgdHlwZTsKKworCWlmIChldi0+a2V5KCkgPT0gUXQ6OktleV9Fc2NhcGUgJiYgbW9kZSAhPSBm
dWxsTW9kZSAmJiBtb2RlICE9IGxpc3RNb2RlKSB7CisJCWVtaXQgcGFyZW50U2VsZWN0ZWQoKTsK
KwkJZXYtPmFjY2VwdCgpOworCQlyZXR1cm47CisJfQorCisJaWYgKCFpKSB7CisJCVBhcmVudDo6
a2V5UHJlc3NFdmVudChldik7CisJCXJldHVybjsKKwl9CisJaXRlbSA9IChDb25maWdJdGVtKilp
OworCisJc3dpdGNoIChldi0+a2V5KCkpIHsKKwljYXNlIFF0OjpLZXlfUmV0dXJuOgorCWNhc2Ug
UXQ6OktleV9FbnRlcjoKKwkJaWYgKGl0ZW0tPmdvUGFyZW50KSB7CisJCQllbWl0IHBhcmVudFNl
bGVjdGVkKCk7CisJCQlicmVhazsKKwkJfQorCQltZW51ID0gaXRlbS0+bWVudTsKKwkJaWYgKCFt
ZW51KQorCQkJYnJlYWs7CisJCXR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5
cGUgOiBQX1VOS05PV047CisJCWlmICh0eXBlID09IFBfTUVOVSAmJiByb290RW50cnkgIT0gbWVu
dSAmJgorCQkgICAgbW9kZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IG1lbnVNb2RlKSB7CisJCQll
bWl0IG1lbnVTZWxlY3RlZChtZW51KTsKKwkJCWJyZWFrOworCQl9CisJY2FzZSBRdDo6S2V5X1Nw
YWNlOgorCQljaGFuZ2VWYWx1ZShpdGVtKTsKKwkJYnJlYWs7CisJY2FzZSBRdDo6S2V5X046CisJ
CXNldFZhbHVlKGl0ZW0sIG5vKTsKKwkJYnJlYWs7CisJY2FzZSBRdDo6S2V5X006CisJCXNldFZh
bHVlKGl0ZW0sIG1vZCk7CisJCWJyZWFrOworCWNhc2UgUXQ6OktleV9ZOgorCQlzZXRWYWx1ZShp
dGVtLCB5ZXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQYXJlbnQ6OmtleVByZXNzRXZlbnQo
ZXYpOworCQlyZXR1cm47CisJfQorCWV2LT5hY2NlcHQoKTsKK30KKwordm9pZCBDb25maWdMaXN0
Ojptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqIGUpCit7CisJLy9RUG9pbnQgcChjb250ZW50
c1RvVmlld3BvcnQoZS0+cG9zKCkpKTsKKwkvL3ByaW50ZigiY29udGVudHNNb3VzZVByZXNzRXZl
bnQ6ICVkLCVkXG4iLCBwLngoKSwgcC55KCkpOworCVBhcmVudDo6bW91c2VQcmVzc0V2ZW50KGUp
OworfQorCit2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50KiBl
KQoreworCVFQb2ludCBwID0gZS0+cG9zKCk7CisJQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJ
dGVtKilpdGVtQXQocCk7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJZW51bSBwcm9wX3R5cGUgcHR5
cGU7CisJUUljb24gaWNvbjsKKwlpbnQgaWR4LCB4OworCisJaWYgKCFpdGVtKQorCQlnb3RvIHNr
aXA7CisKKwltZW51ID0gaXRlbS0+bWVudTsKKwl4ID0gaGVhZGVyKCktPm9mZnNldCgpICsgcC54
KCk7CisJaWR4ID0gaGVhZGVyKCktPmxvZ2ljYWxJbmRleEF0KHgpOworCXN3aXRjaCAoaWR4KSB7
CisJY2FzZSBwcm9tcHRDb2xJZHg6CisJCWljb24gPSBpdGVtLT5waXhtYXAocHJvbXB0Q29sSWR4
KTsKKwkJaWYgKCFpY29uLmlzTnVsbCgpKSB7CisJCQlpbnQgb2ZmID0gaGVhZGVyKCktPnNlY3Rp
b25Qb3NpdGlvbigwKSArIHZpc3VhbFJlY3QoaW5kZXhBdChwKSkueCgpICsgNDsgLy8gNCBpcyBI
YXJkY29kZWQgaW1hZ2Ugb2Zmc2V0LiBUaGVyZSBtaWdodCBiZSBhIHdheSB0byBkbyBpdCBwcm9w
ZXJseS4KKwkJCWlmICh4ID49IG9mZiAmJiB4IDwgb2ZmICsgaWNvbi5hdmFpbGFibGVTaXplcygp
LmZpcnN0KCkud2lkdGgoKSkgeworCQkJCWlmIChpdGVtLT5nb1BhcmVudCkgeworCQkJCQllbWl0
IHBhcmVudFNlbGVjdGVkKCk7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSBpZiAoIW1lbnUpCisJ
CQkJCWJyZWFrOworCQkJCXB0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBl
IDogUF9VTktOT1dOOworCQkJCWlmIChwdHlwZSA9PSBQX01FTlUgJiYgcm9vdEVudHJ5ICE9IG1l
bnUgJiYKKwkJCQkgICAgbW9kZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IG1lbnVNb2RlKQorCQkJ
CQllbWl0IG1lbnVTZWxlY3RlZChtZW51KTsKKwkJCQllbHNlCisJCQkJCWNoYW5nZVZhbHVlKGl0
ZW0pOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2Ugbm9Db2xJZHg6CisJCXNldFZhbHVlKGl0
ZW0sIG5vKTsKKwkJYnJlYWs7CisJY2FzZSBtb2RDb2xJZHg6CisJCXNldFZhbHVlKGl0ZW0sIG1v
ZCk7CisJCWJyZWFrOworCWNhc2UgeWVzQ29sSWR4OgorCQlzZXRWYWx1ZShpdGVtLCB5ZXMpOwor
CQlicmVhazsKKwljYXNlIGRhdGFDb2xJZHg6CisJCWNoYW5nZVZhbHVlKGl0ZW0pOworCQlicmVh
azsKKwl9CisKK3NraXA6CisJLy9wcmludGYoImNvbnRlbnRzTW91c2VSZWxlYXNlRXZlbnQ6ICVk
LCVkXG4iLCBwLngoKSwgcC55KCkpOworCVBhcmVudDo6bW91c2VSZWxlYXNlRXZlbnQoZSk7Cit9
CisKK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGUpCit7CisJ
Ly9RUG9pbnQgcChjb250ZW50c1RvVmlld3BvcnQoZS0+cG9zKCkpKTsKKwkvL3ByaW50ZigiY29u
dGVudHNNb3VzZU1vdmVFdmVudDogJWQsJWRcbiIsIHAueCgpLCBwLnkoKSk7CisJUGFyZW50Ojpt
b3VzZU1vdmVFdmVudChlKTsKK30KKwordm9pZCBDb25maWdMaXN0Ojptb3VzZURvdWJsZUNsaWNr
RXZlbnQoUU1vdXNlRXZlbnQqIGUpCit7CisJUVBvaW50IHAgPSBlLT5wb3MoKTsgLy8gVE9ETzog
Q2hlY2sgaWYgdGhpcyB3b3Jrcyh3YXMgY29udGVudHNUb1ZpZXdwb3J0KS4KKwlDb25maWdJdGVt
KiBpdGVtID0gKENvbmZpZ0l0ZW0qKWl0ZW1BdChwKTsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwll
bnVtIHByb3BfdHlwZSBwdHlwZTsKKworCWlmICghaXRlbSkKKwkJZ290byBza2lwOworCWlmIChp
dGVtLT5nb1BhcmVudCkgeworCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7CisJCWdvdG8gc2tpcDsK
Kwl9CisJbWVudSA9IGl0ZW0tPm1lbnU7CisJaWYgKCFtZW51KQorCQlnb3RvIHNraXA7CisJcHR5
cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJaWYg
KHB0eXBlID09IFBfTUVOVSAmJiAobW9kZSA9PSBzaW5nbGVNb2RlIHx8IG1vZGUgPT0gc3ltYm9s
TW9kZSkpCisJCWVtaXQgbWVudVNlbGVjdGVkKG1lbnUpOworCWVsc2UgaWYgKG1lbnUtPnN5bSkK
KwkJY2hhbmdlVmFsdWUoaXRlbSk7CisKK3NraXA6CisJLy9wcmludGYoImNvbnRlbnRzTW91c2VE
b3VibGVDbGlja0V2ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsKKwlQYXJlbnQ6Om1vdXNl
RG91YmxlQ2xpY2tFdmVudChlKTsKK30KKwordm9pZCBDb25maWdMaXN0Ojpmb2N1c0luRXZlbnQo
UUZvY3VzRXZlbnQgKmUpCit7CisJc3RydWN0IG1lbnUgKm1lbnUgPSBOVUxMOworCisJUGFyZW50
Ojpmb2N1c0luRXZlbnQoZSk7CisKKwlDb25maWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0gKilj
dXJyZW50SXRlbSgpOworCWlmIChpdGVtKSB7CisJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOwor
CQltZW51ID0gaXRlbS0+bWVudTsKKwl9CisJZW1pdCBnb3RGb2N1cyhtZW51KTsKK30KKwordm9p
ZCBDb25maWdMaXN0Ojpjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKQorewor
CWlmIChlLT55KCkgPD0gaGVhZGVyKCktPmdlb21ldHJ5KCkuYm90dG9tKCkpIHsKKwkJaWYgKCFo
ZWFkZXJQb3B1cCkgeworCQkJUUFjdGlvbiAqYWN0aW9uOworCisJCQloZWFkZXJQb3B1cCA9IG5l
dyBRTWVudSh0aGlzKTsKKwkJCWFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IE5hbWUiLCB0aGlz
KTsKKwkJCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJCQkgIGNvbm5lY3QoYWN0aW9u
LCBTSUdOQUwodG9nZ2xlZChib29sKSksCisJCQkJICBwYXJlbnQoKSwgU0xPVChzZXRTaG93TmFt
ZShib29sKSkpOworCQkJICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hvd05hbWVDaGFuZ2Vk
KGJvb2wpKSwKKwkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkpOworCQkJICBhY3Rpb24t
PnNldENoZWNrZWQoc2hvd05hbWUpOworCQkJICBoZWFkZXJQb3B1cC0+YWRkQWN0aW9uKGFjdGlv
bik7CisJCQlhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBSYW5nZSIsIHRoaXMpOworCQkJICBh
Y3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKwkJCSAgY29ubmVjdChhY3Rpb24sIFNJR05BTCh0
b2dnbGVkKGJvb2wpKSwKKwkJCQkgIHBhcmVudCgpLCBTTE9UKHNldFNob3dSYW5nZShib29sKSkp
OworCQkJICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hvd1JhbmdlQ2hhbmdlZChib29sKSks
CisJCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsKKwkJCSAgYWN0aW9uLT5zZXRDaGVj
a2VkKHNob3dSYW5nZSk7CisJCQkgIGhlYWRlclBvcHVwLT5hZGRBY3Rpb24oYWN0aW9uKTsKKwkJ
CWFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IERhdGEiLCB0aGlzKTsKKwkJCSAgYWN0aW9uLT5z
ZXRDaGVja2FibGUodHJ1ZSk7CisJCQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xlZChi
b29sKSksCisJCQkJICBwYXJlbnQoKSwgU0xPVChzZXRTaG93RGF0YShib29sKSkpOworCQkJICBj
b25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hvd0RhdGFDaGFuZ2VkKGJvb2wpKSwKKwkJCQkgIGFj
dGlvbiwgU0xPVChzZXRPbihib29sKSkpOworCQkJICBhY3Rpb24tPnNldENoZWNrZWQoc2hvd0Rh
dGEpOworCQkJICBoZWFkZXJQb3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7CisJCX0KKwkJaGVhZGVy
UG9wdXAtPmV4ZWMoZS0+Z2xvYmFsUG9zKCkpOworCQllLT5hY2NlcHQoKTsKKwl9IGVsc2UKKwkJ
ZS0+aWdub3JlKCk7Cit9CisKK0NvbmZpZ1ZpZXcqQ29uZmlnVmlldzo6dmlld0xpc3Q7CitRQWN0
aW9uICpDb25maWdWaWV3OjpzaG93Tm9ybWFsQWN0aW9uOworUUFjdGlvbiAqQ29uZmlnVmlldzo6
c2hvd0FsbEFjdGlvbjsKK1FBY3Rpb24gKkNvbmZpZ1ZpZXc6OnNob3dQcm9tcHRBY3Rpb247CisK
K0NvbmZpZ1ZpZXc6OkNvbmZpZ1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1l
KQorCTogUGFyZW50KHBhcmVudCkKK3sKKwlzZXRPYmplY3ROYW1lKG5hbWUpOworCVFWQm94TGF5
b3V0ICp2ZXJ0aWNhbExheW91dCA9IG5ldyBRVkJveExheW91dCh0aGlzKTsKKwl2ZXJ0aWNhbExh
eW91dC0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAsIDApOworCisJbGlzdCA9IG5ldyBDb25m
aWdMaXN0KHRoaXMpOworCXZlcnRpY2FsTGF5b3V0LT5hZGRXaWRnZXQobGlzdCk7CisJbGluZUVk
aXQgPSBuZXcgQ29uZmlnTGluZUVkaXQodGhpcyk7CisJbGluZUVkaXQtPmhpZGUoKTsKKwl2ZXJ0
aWNhbExheW91dC0+YWRkV2lkZ2V0KGxpbmVFZGl0KTsKKworCXRoaXMtPm5leHRWaWV3ID0gdmll
d0xpc3Q7CisJdmlld0xpc3QgPSB0aGlzOworfQorCitDb25maWdWaWV3Ojp+Q29uZmlnVmlldyh2
b2lkKQoreworCUNvbmZpZ1ZpZXcqKiB2cDsKKworCWZvciAodnAgPSAmdmlld0xpc3Q7ICp2cDsg
dnAgPSAmKCp2cCktPm5leHRWaWV3KSB7CisJCWlmICgqdnAgPT0gdGhpcykgeworCQkJKnZwID0g
bmV4dFZpZXc7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwordm9pZCBDb25maWdWaWV3OjpzZXRP
cHRpb25Nb2RlKFFBY3Rpb24gKmFjdCkKK3sKKwlpZiAoYWN0ID09IHNob3dOb3JtYWxBY3Rpb24p
CisJCWxpc3QtPm9wdE1vZGUgPSBub3JtYWxPcHQ7CisJZWxzZSBpZiAoYWN0ID09IHNob3dBbGxB
Y3Rpb24pCisJCWxpc3QtPm9wdE1vZGUgPSBhbGxPcHQ7CisJZWxzZQorCQlsaXN0LT5vcHRNb2Rl
ID0gcHJvbXB0T3B0OworCisJbGlzdC0+dXBkYXRlTGlzdEFsbCgpOworfQorCit2b2lkIENvbmZp
Z1ZpZXc6OnNldFNob3dOYW1lKGJvb2wgYikKK3sKKwlpZiAobGlzdC0+c2hvd05hbWUgIT0gYikg
eworCQlsaXN0LT5zaG93TmFtZSA9IGI7CisJCWxpc3QtPnJlaW5pdCgpOworCQllbWl0IHNob3dO
YW1lQ2hhbmdlZChiKTsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnVmlldzo6c2V0U2hvd1JhbmdlKGJv
b2wgYikKK3sKKwlpZiAobGlzdC0+c2hvd1JhbmdlICE9IGIpIHsKKwkJbGlzdC0+c2hvd1Jhbmdl
ID0gYjsKKwkJbGlzdC0+cmVpbml0KCk7CisJCWVtaXQgc2hvd1JhbmdlQ2hhbmdlZChiKTsKKwl9
Cit9CisKK3ZvaWQgQ29uZmlnVmlldzo6c2V0U2hvd0RhdGEoYm9vbCBiKQoreworCWlmIChsaXN0
LT5zaG93RGF0YSAhPSBiKSB7CisJCWxpc3QtPnNob3dEYXRhID0gYjsKKwkJbGlzdC0+cmVpbml0
KCk7CisJCWVtaXQgc2hvd0RhdGFDaGFuZ2VkKGIpOworCX0KK30KKwordm9pZCBDb25maWdMaXN0
OjpzZXRBbGxPcGVuKGJvb2wgb3BlbikKK3sKKwlRVHJlZVdpZGdldEl0ZW1JdGVyYXRvciBpdCh0
aGlzKTsKKworCXdoaWxlICgqaXQpIHsKKwkJKCppdCktPnNldEV4cGFuZGVkKG9wZW4pOworCisJ
CSsraXQ7CisJfQorfQorCit2b2lkIENvbmZpZ1ZpZXc6OnVwZGF0ZUxpc3QoQ29uZmlnSXRlbSog
aXRlbSkKK3sKKwlDb25maWdWaWV3KiB2OworCisJZm9yICh2ID0gdmlld0xpc3Q7IHY7IHYgPSB2
LT5uZXh0VmlldykKKwkJdi0+bGlzdC0+dXBkYXRlTGlzdChpdGVtKTsKK30KKwordm9pZCBDb25m
aWdWaWV3Ojp1cGRhdGVMaXN0QWxsKHZvaWQpCit7CisJQ29uZmlnVmlldyogdjsKKworCWZvciAo
diA9IHZpZXdMaXN0OyB2OyB2ID0gdi0+bmV4dFZpZXcpCisJCXYtPmxpc3QtPnVwZGF0ZUxpc3RB
bGwoKTsKK30KKworQ29uZmlnSW5mb1ZpZXc6OkNvbmZpZ0luZm9WaWV3KFFXaWRnZXQqIHBhcmVu
dCwgY29uc3QgY2hhciAqbmFtZSkKKwk6IFBhcmVudChwYXJlbnQpLCBzeW0oMCksIF9tZW51KDAp
Cit7CisJc2V0T2JqZWN0TmFtZShuYW1lKTsKKworCisJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0
eSgpKSB7CisJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG9iamVjdE5hbWUoKSk7CisJCXNl
dFNob3dEZWJ1Zyhjb25maWdTZXR0aW5ncy0+dmFsdWUoIi9zaG93RGVidWciLCBmYWxzZSkudG9C
b29sKCkpOworCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwkJY29ubmVjdChjb25maWdB
cHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChzYXZlU2V0dGluZ3MoKSkpOworCX0KK30K
Kwordm9pZCBDb25maWdJbmZvVmlldzo6c2F2ZVNldHRpbmdzKHZvaWQpCit7CisJaWYgKCFvYmpl
Y3ROYW1lKCkuaXNFbXB0eSgpKSB7CisJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG9iamVj
dE5hbWUoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dEZWJ1ZyIsIHNob3dE
ZWJ1ZygpKTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CisJfQorfQorCit2b2lkIENv
bmZpZ0luZm9WaWV3OjpzZXRTaG93RGVidWcoYm9vbCBiKQoreworCWlmIChfc2hvd0RlYnVnICE9
IGIpIHsKKwkJX3Nob3dEZWJ1ZyA9IGI7CisJCWlmIChfbWVudSkKKwkJCW1lbnVJbmZvKCk7CisJ
CWVsc2UgaWYgKHN5bSkKKwkJCXN5bWJvbEluZm8oKTsKKwkJZW1pdCBzaG93RGVidWdDaGFuZ2Vk
KGIpOworCX0KK30KKwordm9pZCBDb25maWdJbmZvVmlldzo6c2V0SW5mbyhzdHJ1Y3QgbWVudSAq
bSkKK3sKKwlpZiAoX21lbnUgPT0gbSkKKwkJcmV0dXJuOworCV9tZW51ID0gbTsKKwlzeW0gPSBO
VUxMOworCWlmICghX21lbnUpCisJCWNsZWFyKCk7CisJZWxzZQorCQltZW51SW5mbygpOworfQor
Cit2b2lkIENvbmZpZ0luZm9WaWV3OjpzeW1ib2xJbmZvKHZvaWQpCit7CisJUVN0cmluZyBzdHI7
CisKKwlzdHIgKz0gIjxiaWc+U3ltYm9sOiA8Yj4iOworCXN0ciArPSBwcmludF9maWx0ZXIoc3lt
LT5uYW1lKTsKKwlzdHIgKz0gIjwvYj48L2JpZz48YnI+PGJyPnZhbHVlOiAiOworCXN0ciArPSBw
cmludF9maWx0ZXIoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJc3RyICs9ICI8YnI+dmlz
aWJpbGl0eTogIjsKKwlzdHIgKz0gc3ltLT52aXNpYmxlID09IHllcyA/ICJ5IiA6IHN5bS0+dmlz
aWJsZSA9PSBtb2QgPyAibSIgOiAibiI7CisJc3RyICs9ICI8YnI+IjsKKwlzdHIgKz0gZGVidWdf
aW5mbyhzeW0pOworCisJc2V0VGV4dChzdHIpOworfQorCit2b2lkIENvbmZpZ0luZm9WaWV3Ojpt
ZW51SW5mbyh2b2lkKQoreworCXN0cnVjdCBzeW1ib2wqIHN5bTsKKwlRU3RyaW5nIGhlYWQsIGRl
YnVnLCBoZWxwOworCisJc3ltID0gX21lbnUtPnN5bTsKKwlpZiAoc3ltKSB7CisJCWlmIChfbWVu
dS0+cHJvbXB0KSB7CisJCQloZWFkICs9ICI8YmlnPjxiPiI7CisJCQloZWFkICs9IHByaW50X2Zp
bHRlcihfbWVudS0+cHJvbXB0LT50ZXh0KTsKKwkJCWhlYWQgKz0gIjwvYj48L2JpZz4iOworCQkJ
aWYgKHN5bS0+bmFtZSkgeworCQkJCWhlYWQgKz0gIiAoIjsKKwkJCQlpZiAoc2hvd0RlYnVnKCkp
CisJCQkJCWhlYWQgKz0gUVN0cmluZygpLnNwcmludGYoIjxhIGhyZWY9XCJzJXBcIj4iLCBzeW0p
OworCQkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFtZSk7CisJCQkJaWYgKHNob3dEZWJ1
ZygpKQorCQkJCQloZWFkICs9ICI8L2E+IjsKKwkJCQloZWFkICs9ICIpIjsKKwkJCX0KKwkJfSBl
bHNlIGlmIChzeW0tPm5hbWUpIHsKKwkJCWhlYWQgKz0gIjxiaWc+PGI+IjsKKwkJCWlmIChzaG93
RGVidWcoKSkKKwkJCQloZWFkICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+
Iiwgc3ltKTsKKwkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFtZSk7CisJCQlpZiAoc2hv
d0RlYnVnKCkpCisJCQkJaGVhZCArPSAiPC9hPiI7CisJCQloZWFkICs9ICI8L2I+PC9iaWc+IjsK
KwkJfQorCQloZWFkICs9ICI8YnI+PGJyPiI7CisKKwkJaWYgKHNob3dEZWJ1ZygpKQorCQkJZGVi
dWcgPSBkZWJ1Z19pbmZvKHN5bSk7CisKKwkJc3RydWN0IGdzdHIgaGVscF9nc3RyID0gc3RyX25l
dygpOworCQltZW51X2dldF9leHRfaGVscChfbWVudSwgJmhlbHBfZ3N0cik7CisJCWhlbHAgPSBw
cmludF9maWx0ZXIoc3RyX2dldCgmaGVscF9nc3RyKSk7CisJCXN0cl9mcmVlKCZoZWxwX2dzdHIp
OworCX0gZWxzZSBpZiAoX21lbnUtPnByb21wdCkgeworCQloZWFkICs9ICI8YmlnPjxiPiI7CisJ
CWhlYWQgKz0gcHJpbnRfZmlsdGVyKF9tZW51LT5wcm9tcHQtPnRleHQpOworCQloZWFkICs9ICI8
L2I+PC9iaWc+PGJyPjxicj4iOworCQlpZiAoc2hvd0RlYnVnKCkpIHsKKwkJCWlmIChfbWVudS0+
cHJvbXB0LT52aXNpYmxlLmV4cHIpIHsKKwkJCQlkZWJ1ZyArPSAiJm5ic3A7Jm5ic3A7ZGVwOiAi
OworCQkJCWV4cHJfcHJpbnQoX21lbnUtPnByb21wdC0+dmlzaWJsZS5leHByLCBleHByX3ByaW50
X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsKKwkJCQlkZWJ1ZyArPSAiPGJyPjxicj4iOworCQkJfQor
CQl9CisJfQorCWlmIChzaG93RGVidWcoKSkKKwkJZGVidWcgKz0gUVN0cmluZygpLnNwcmludGYo
ImRlZmluZWQgYXQgJXM6JWQ8YnI+PGJyPiIsIF9tZW51LT5maWxlLT5uYW1lLCBfbWVudS0+bGlu
ZW5vKTsKKworCXNldFRleHQoaGVhZCArIGRlYnVnICsgaGVscCk7Cit9CisKK1FTdHJpbmcgQ29u
ZmlnSW5mb1ZpZXc6OmRlYnVnX2luZm8oc3RydWN0IHN5bWJvbCAqc3ltKQoreworCVFTdHJpbmcg
ZGVidWc7CisKKwlkZWJ1ZyArPSAidHlwZTogIjsKKwlkZWJ1ZyArPSBwcmludF9maWx0ZXIoc3lt
X3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKQorCQlkZWJ1
ZyArPSAiIChjaG9pY2UpIjsKKwlkZWJ1ZyArPSAiPGJyPiI7CisJaWYgKHN5bS0+cmV2X2RlcC5l
eHByKSB7CisJCWRlYnVnICs9ICJyZXZlcnNlIGRlcDogIjsKKwkJZXhwcl9wcmludChzeW0tPnJl
dl9kZXAuZXhwciwgZXhwcl9wcmludF9oZWxwLCAmZGVidWcsIEVfTk9ORSk7CisJCWRlYnVnICs9
ICI8YnI+IjsKKwl9CisJZm9yIChzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBzeW0tPnByb3A7IHBy
b3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNl
IFBfUFJPTVBUOgorCQljYXNlIFBfTUVOVToKKwkJCWRlYnVnICs9IFFTdHJpbmcoKS5zcHJpbnRm
KCJwcm9tcHQ6IDxhIGhyZWY9XCJtJXBcIj4iLCBwcm9wLT5tZW51KTsKKwkJCWRlYnVnICs9IHBy
aW50X2ZpbHRlcihwcm9wLT50ZXh0KTsKKwkJCWRlYnVnICs9ICI8L2E+PGJyPiI7CisJCQlicmVh
azsKKwkJY2FzZSBQX0RFRkFVTFQ6CisJCWNhc2UgUF9TRUxFQ1Q6CisJCWNhc2UgUF9SQU5HRToK
KwkJCWRlYnVnICs9IHByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKTsKKwkJCWRlYnVnICs9
ICI6ICI7CisJCQlleHByX3ByaW50KHByb3AtPmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVn
LCBFX05PTkUpOworCQkJZGVidWcgKz0gIjxicj4iOworCQkJYnJlYWs7CisJCWNhc2UgUF9DSE9J
Q0U6CisJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCQkJZGVidWcgKz0gImNob2ljZTog
IjsKKwkJCQlleHByX3ByaW50KHByb3AtPmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVnLCBF
X05PTkUpOworCQkJCWRlYnVnICs9ICI8YnI+IjsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJZGVidWcgKz0gInVua25vd24gcHJvcGVydHk6ICI7CisJCQlkZWJ1ZyArPSBwcm9wX2dl
dF90eXBlX25hbWUocHJvcC0+dHlwZSk7CisJCQlkZWJ1ZyArPSAiPGJyPiI7CisJCX0KKwkJaWYg
KHByb3AtPnZpc2libGUuZXhwcikgeworCQkJZGVidWcgKz0gIiZuYnNwOyZuYnNwOyZuYnNwOyZu
YnNwO2RlcDogIjsKKwkJCWV4cHJfcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBleHByX3ByaW50
X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsKKwkJCWRlYnVnICs9ICI8YnI+IjsKKwkJfQorCX0KKwlk
ZWJ1ZyArPSAiPGJyPiI7CisKKwlyZXR1cm4gZGVidWc7Cit9CisKK1FTdHJpbmcgQ29uZmlnSW5m
b1ZpZXc6OnByaW50X2ZpbHRlcihjb25zdCBRU3RyaW5nICZzdHIpCit7CisJUVJlZ0V4cCByZSgi
Wzw+JlwiXFxuXSIpOworCVFTdHJpbmcgcmVzID0gc3RyOworCWZvciAoaW50IGkgPSAwOyAoaSA9
IHJlcy5pbmRleE9mKHJlLCBpKSkgPj0gMDspIHsKKwkJc3dpdGNoIChyZXNbaV0udG9MYXRpbjEo
KSkgeworCQljYXNlICc8JzoKKwkJCXJlcy5yZXBsYWNlKGksIDEsICImbHQ7Iik7CisJCQlpICs9
IDQ7CisJCQlicmVhazsKKwkJY2FzZSAnPic6CisJCQlyZXMucmVwbGFjZShpLCAxLCAiJmd0OyIp
OworCQkJaSArPSA0OworCQkJYnJlYWs7CisJCWNhc2UgJyYnOgorCQkJcmVzLnJlcGxhY2UoaSwg
MSwgIiZhbXA7Iik7CisJCQlpICs9IDU7CisJCQlicmVhazsKKwkJY2FzZSAnIic6CisJCQlyZXMu
cmVwbGFjZShpLCAxLCAiJnF1b3Q7Iik7CisJCQlpICs9IDY7CisJCQlicmVhazsKKwkJY2FzZSAn
XG4nOgorCQkJcmVzLnJlcGxhY2UoaSwgMSwgIjxicj4iKTsKKwkJCWkgKz0gNDsKKwkJCWJyZWFr
OworCQl9CisJfQorCXJldHVybiByZXM7Cit9CisKK3ZvaWQgQ29uZmlnSW5mb1ZpZXc6OmV4cHJf
cHJpbnRfaGVscCh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0
cikKK3sKKwlRU3RyaW5nKiB0ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxRU3RyaW5nKj4oZGF0YSk7
CisJUVN0cmluZyBzdHIyID0gcHJpbnRfZmlsdGVyKHN0cik7CisKKwlpZiAoc3ltICYmIHN5bS0+
bmFtZSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpKSB7CisJCSp0ZXh0ICs9IFFTdHJp
bmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+Iiwgc3ltKTsKKwkJKnRleHQgKz0gc3RyMjsK
KwkJKnRleHQgKz0gIjwvYT4iOworCX0gZWxzZQorCQkqdGV4dCArPSBzdHIyOworfQorCitRTWVu
dSogQ29uZmlnSW5mb1ZpZXc6OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoY29uc3QgUVBvaW50
ICYgcG9zKQoreworCVFNZW51KiBwb3B1cCA9IFBhcmVudDo6Y3JlYXRlU3RhbmRhcmRDb250ZXh0
TWVudShwb3MpOworCVFBY3Rpb24qIGFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IERlYnVnIElu
Zm8iLCBwb3B1cCk7CisJICBhY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKwkgIGNvbm5lY3Qo
YWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIFNMT1Qoc2V0U2hvd0RlYnVnKGJvb2wpKSk7
CisJICBjb25uZWN0KHRoaXMsIFNJR05BTChzaG93RGVidWdDaGFuZ2VkKGJvb2wpKSwgYWN0aW9u
LCBTTE9UKHNldE9uKGJvb2wpKSk7CisJICBhY3Rpb24tPnNldENoZWNrZWQoc2hvd0RlYnVnKCkp
OworCXBvcHVwLT5hZGRTZXBhcmF0b3IoKTsKKwlwb3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7CisJ
cmV0dXJuIHBvcHVwOworfQorCit2b2lkIENvbmZpZ0luZm9WaWV3Ojpjb250ZXh0TWVudUV2ZW50
KFFDb250ZXh0TWVudUV2ZW50ICplKQoreworCVBhcmVudDo6Y29udGV4dE1lbnVFdmVudChlKTsK
K30KKworQ29uZmlnU2VhcmNoV2luZG93OjpDb25maWdTZWFyY2hXaW5kb3coQ29uZmlnTWFpbldp
bmRvdyogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQorCTogUGFyZW50KHBhcmVudCksIHJlc3Vs
dChOVUxMKQoreworCXNldE9iamVjdE5hbWUobmFtZSk7CisJc2V0V2luZG93VGl0bGUoIlNlYXJj
aCBDb25maWciKTsKKworCVFWQm94TGF5b3V0KiBsYXlvdXQxID0gbmV3IFFWQm94TGF5b3V0KHRo
aXMpOworCWxheW91dDEtPnNldENvbnRlbnRzTWFyZ2lucygxMSwgMTEsIDExLCAxMSk7CisJbGF5
b3V0MS0+c2V0U3BhY2luZyg2KTsKKwlRSEJveExheW91dCogbGF5b3V0MiA9IG5ldyBRSEJveExh
eW91dCgwKTsKKwlsYXlvdXQyLT5zZXRDb250ZW50c01hcmdpbnMoMCwgMCwgMCwgMCk7CisJbGF5
b3V0Mi0+c2V0U3BhY2luZyg2KTsKKwlsYXlvdXQyLT5hZGRXaWRnZXQobmV3IFFMYWJlbCgiRmlu
ZDoiLCB0aGlzKSk7CisJZWRpdEZpZWxkID0gbmV3IFFMaW5lRWRpdCh0aGlzKTsKKwljb25uZWN0
KGVkaXRGaWVsZCwgU0lHTkFMKHJldHVyblByZXNzZWQoKSksIFNMT1Qoc2VhcmNoKCkpKTsKKwls
YXlvdXQyLT5hZGRXaWRnZXQoZWRpdEZpZWxkKTsKKwlzZWFyY2hCdXR0b24gPSBuZXcgUVB1c2hC
dXR0b24oIlNlYXJjaCIsIHRoaXMpOworCXNlYXJjaEJ1dHRvbi0+c2V0QXV0b0RlZmF1bHQoZmFs
c2UpOworCWNvbm5lY3Qoc2VhcmNoQnV0dG9uLCBTSUdOQUwoY2xpY2tlZCgpKSwgU0xPVChzZWFy
Y2goKSkpOworCWxheW91dDItPmFkZFdpZGdldChzZWFyY2hCdXR0b24pOworCWxheW91dDEtPmFk
ZExheW91dChsYXlvdXQyKTsKKworCXNwbGl0ID0gbmV3IFFTcGxpdHRlcih0aGlzKTsKKwlzcGxp
dC0+c2V0T3JpZW50YXRpb24oUXQ6OlZlcnRpY2FsKTsKKwlsaXN0ID0gbmV3IENvbmZpZ1ZpZXco
c3BsaXQsIG5hbWUpOworCWxpc3QtPmxpc3QtPm1vZGUgPSBsaXN0TW9kZTsKKwlpbmZvID0gbmV3
IENvbmZpZ0luZm9WaWV3KHNwbGl0LCBuYW1lKTsKKwljb25uZWN0KGxpc3QtPmxpc3QsIFNJR05B
TChtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqKSksCisJCWluZm8sIFNMT1Qoc2V0SW5mbyhzdHJ1
Y3QgbWVudSAqKSkpOworCWNvbm5lY3QobGlzdC0+bGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0
cnVjdCBtZW51ICopKSwKKwkJcGFyZW50LCBTTE9UKHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICop
KSk7CisKKwlsYXlvdXQxLT5hZGRXaWRnZXQoc3BsaXQpOworCisJaWYgKG5hbWUpIHsKKwkJUVZh
cmlhbnQgeCwgeTsKKwkJaW50IHdpZHRoLCBoZWlnaHQ7CisJCWJvb2wgb2s7CisKKwkJY29uZmln
U2V0dGluZ3MtPmJlZ2luR3JvdXAobmFtZSk7CisJCXdpZHRoID0gY29uZmlnU2V0dGluZ3MtPnZh
bHVlKCIvd2luZG93IHdpZHRoIiwgcGFyZW50LT53aWR0aCgpIC8gMikudG9JbnQoKTsKKwkJaGVp
Z2h0ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IGhlaWdodCIsIHBhcmVudC0+aGVp
Z2h0KCkgLyAyKS50b0ludCgpOworCQlyZXNpemUod2lkdGgsIGhlaWdodCk7CisJCXggPSBjb25m
aWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgeCIpOworCQl5ID0gY29uZmlnU2V0dGluZ3MtPnZh
bHVlKCIvd2luZG93IHkiKTsKKwkJaWYgKCh4LmlzVmFsaWQoKSkmJih5LmlzVmFsaWQoKSkpCisJ
CQltb3ZlKHgudG9JbnQoKSwgeS50b0ludCgpKTsKKwkJUUxpc3Q8aW50PiBzaXplcyA9IGNvbmZp
Z1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxpdCIsICZvayk7CisJCWlmIChvaykKKwkJCXNwbGl0
LT5zZXRTaXplcyhzaXplcyk7CisJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOworCQljb25u
ZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCBTTE9UKHNhdmVTZXR0aW5ncygp
KSk7CisJfQorfQorCit2b2lkIENvbmZpZ1NlYXJjaFdpbmRvdzo6c2F2ZVNldHRpbmdzKHZvaWQp
Cit7CisJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7CisJCWNvbmZpZ1NldHRpbmdzLT5i
ZWdpbkdyb3VwKG9iamVjdE5hbWUoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dp
bmRvdyB4IiwgcG9zKCkueCgpKTsKKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93
IHkiLCBwb3MoKS55KCkpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgd2lk
dGgiLCBzaXplKCkud2lkdGgoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRv
dyBoZWlnaHQiLCBzaXplKCkuaGVpZ2h0KCkpOworCQljb25maWdTZXR0aW5ncy0+d3JpdGVTaXpl
cygiL3NwbGl0Iiwgc3BsaXQtPnNpemVzKCkpOworCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAo
KTsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnU2VhcmNoV2luZG93OjpzZWFyY2godm9pZCkKK3sKKwlz
dHJ1Y3Qgc3ltYm9sICoqcDsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJQ29uZmlnSXRlbSAq
bGFzdEl0ZW0gPSBOVUxMOworCisJZnJlZShyZXN1bHQpOworCWxpc3QtPmxpc3QtPmNsZWFyKCk7
CisJaW5mby0+Y2xlYXIoKTsKKworCXJlc3VsdCA9IHN5bV9yZV9zZWFyY2goZWRpdEZpZWxkLT50
ZXh0KCkudG9MYXRpbjEoKSk7CisJaWYgKCFyZXN1bHQpCisJCXJldHVybjsKKwlmb3IgKHAgPSBy
ZXN1bHQ7ICpwOyBwKyspIHsKKwkJZm9yX2FsbF9wcm9tcHRzKCgqcCksIHByb3ApCisJCQlsYXN0
SXRlbSA9IG5ldyBDb25maWdJdGVtKGxpc3QtPmxpc3QsIGxhc3RJdGVtLCBwcm9wLT5tZW51LAor
CQkJCQkJICBtZW51X2lzX3Zpc2libGUocHJvcC0+bWVudSkpOworCX0KK30KKworLyoKKyAqIENv
bnN0cnVjdCB0aGUgY29tcGxldGUgY29uZmlnIHdpZGdldAorICovCitDb25maWdNYWluV2luZG93
OjpDb25maWdNYWluV2luZG93KHZvaWQpCisJOiBzZWFyY2hXaW5kb3coMCkKK3sKKwlRTWVudUJh
ciogbWVudTsKKwlib29sIG9rID0gdHJ1ZTsKKwlRVmFyaWFudCB4LCB5OworCWludCB3aWR0aCwg
aGVpZ2h0OworCWNoYXIgdGl0bGVbMjU2XTsKKworCVFEZXNrdG9wV2lkZ2V0ICpkID0gY29uZmln
QXBwLT5kZXNrdG9wKCk7CisJc25wcmludGYodGl0bGUsIHNpemVvZih0aXRsZSksICIlcyVzIiwK
KwkJcm9vdG1lbnUucHJvbXB0LT50ZXh0LAorCQkiIgorCQkpOworCXNldFdpbmRvd1RpdGxlKHRp
dGxlKTsKKworCXdpZHRoID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHdpZHRoIiwg
ZC0+d2lkdGgoKSAtIDY0KS50b0ludCgpOworCWhlaWdodCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1
ZSgiL3dpbmRvdyBoZWlnaHQiLCBkLT5oZWlnaHQoKSAtIDY0KS50b0ludCgpOworCXJlc2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKKwl4ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHgiKTsK
Kwl5ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHkiKTsKKwlpZiAoKHguaXNWYWxp
ZCgpKSYmKHkuaXNWYWxpZCgpKSkKKwkJbW92ZSh4LnRvSW50KCksIHkudG9JbnQoKSk7CisKKwlz
cGxpdDEgPSBuZXcgUVNwbGl0dGVyKHRoaXMpOworCXNwbGl0MS0+c2V0T3JpZW50YXRpb24oUXQ6
Okhvcml6b250YWwpOworCXNldENlbnRyYWxXaWRnZXQoc3BsaXQxKTsKKworCW1lbnVWaWV3ID0g
bmV3IENvbmZpZ1ZpZXcoc3BsaXQxLCAibWVudSIpOworCW1lbnVMaXN0ID0gbWVudVZpZXctPmxp
c3Q7CisKKwlzcGxpdDIgPSBuZXcgUVNwbGl0dGVyKHNwbGl0MSk7CisJc3BsaXQyLT5zZXRPcmll
bnRhdGlvbihRdDo6VmVydGljYWwpOworCisJLy8gY3JlYXRlIGNvbmZpZyB0cmVlCisJY29uZmln
VmlldyA9IG5ldyBDb25maWdWaWV3KHNwbGl0MiwgImNvbmZpZyIpOworCWNvbmZpZ0xpc3QgPSBj
b25maWdWaWV3LT5saXN0OworCisJaGVscFRleHQgPSBuZXcgQ29uZmlnSW5mb1ZpZXcoc3BsaXQy
LCAiaGVscCIpOworCisJc2V0VGFiT3JkZXIoY29uZmlnTGlzdCwgaGVscFRleHQpOworCWNvbmZp
Z0xpc3QtPnNldEZvY3VzKCk7CisKKwltZW51ID0gbWVudUJhcigpOworCXRvb2xCYXIgPSBuZXcg
UVRvb2xCYXIoIlRvb2xzIiwgdGhpcyk7CisJYWRkVG9vbEJhcih0b29sQmFyKTsKKworCWJhY2tB
Y3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9iYWNrKSwgIkJhY2siLCB0aGlzKTsKKwkg
IGNvbm5lY3QoYmFja0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1QoZ29CYWNr
KCkpKTsKKwkgIGJhY2tBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOworCVFBY3Rpb24gKnF1aXRB
Y3Rpb24gPSBuZXcgUUFjdGlvbigiJlF1aXQiLCB0aGlzKTsKKwlxdWl0QWN0aW9uLT5zZXRTaG9y
dGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfUSk7CisJICBjb25uZWN0KHF1aXRBY3Rpb24sIFNJR05B
TCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKGNsb3NlKCkpKTsKKwlRQWN0aW9uICpsb2FkQWN0aW9u
ID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fbG9hZCksICImTG9hZCIsIHRoaXMpOworCWxvYWRB
Y3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6OktleV9MKTsKKwkgIGNvbm5lY3QobG9h
ZEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1QobG9hZENvbmZpZygpKSk7CisJ
c2F2ZUFjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NhdmUpLCAiJlNhdmUiLCB0aGlz
KTsKKwlzYXZlQWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfUyk7CisJICBj
b25uZWN0KHNhdmVBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNhdmVDb25m
aWcoKSkpOworCWNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsKKwkvLyBT
ZXQgc2F2ZUFjdGlvbidzIGluaXRpYWwgc3RhdGUKKwljb25mX2NoYW5nZWQoKTsKKwljb25maWdu
YW1lID0geHN0cmR1cChjb25mX2dldF9jb25maWduYW1lKCkpOworCisJUUFjdGlvbiAqc2F2ZUFz
QWN0aW9uID0gbmV3IFFBY3Rpb24oIlNhdmUgJkFzLi4uIiwgdGhpcyk7CisJICBjb25uZWN0KHNh
dmVBc0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2F2ZUNvbmZpZ0FzKCkp
KTsKKwlRQWN0aW9uICpzZWFyY2hBY3Rpb24gPSBuZXcgUUFjdGlvbigiJkZpbmQiLCB0aGlzKTsK
KwlzZWFyY2hBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6OktleV9GKTsKKwkgIGNv
bm5lY3Qoc2VhcmNoQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzZWFyY2hD
b25maWcoKSkpOworCXNpbmdsZVZpZXdBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9z
aW5nbGVfdmlldyksICJTaW5nbGUgVmlldyIsIHRoaXMpOworCXNpbmdsZVZpZXdBY3Rpb24tPnNl
dENoZWNrYWJsZSh0cnVlKTsKKwkgIGNvbm5lY3Qoc2luZ2xlVmlld0FjdGlvbiwgU0lHTkFMKHRy
aWdnZXJlZChib29sKSksIFNMT1Qoc2hvd1NpbmdsZVZpZXcoKSkpOworCXNwbGl0Vmlld0FjdGlv
biA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NwbGl0X3ZpZXcpLCAiU3BsaXQgVmlldyIsIHRo
aXMpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCSAgY29ubmVjdChz
cGxpdFZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNob3dTcGxpdFZp
ZXcoKSkpOworCWZ1bGxWaWV3QWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fdHJlZV92
aWV3KSwgIkZ1bGwgVmlldyIsIHRoaXMpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRDaGVja2FibGUo
dHJ1ZSk7CisJICBjb25uZWN0KGZ1bGxWaWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wp
KSwgU0xPVChzaG93RnVsbFZpZXcoKSkpOworCisJUUFjdGlvbiAqc2hvd05hbWVBY3Rpb24gPSBu
ZXcgUUFjdGlvbigiU2hvdyBOYW1lIiwgdGhpcyk7CisJICBzaG93TmFtZUFjdGlvbi0+c2V0Q2hl
Y2thYmxlKHRydWUpOworCSAgY29ubmVjdChzaG93TmFtZUFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQo
Ym9vbCkpLCBjb25maWdWaWV3LCBTTE9UKHNldFNob3dOYW1lKGJvb2wpKSk7CisJICBzaG93TmFt
ZUFjdGlvbi0+c2V0Q2hlY2tlZChjb25maWdWaWV3LT5zaG93TmFtZSgpKTsKKwlRQWN0aW9uICpz
aG93UmFuZ2VBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBSYW5nZSIsIHRoaXMpOworCSAgc2hv
d1JhbmdlQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJICBjb25uZWN0KHNob3dSYW5nZUFj
dGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBjb25maWdWaWV3LCBTTE9UKHNldFNob3dSYW5n
ZShib29sKSkpOworCVFBY3Rpb24gKnNob3dEYXRhQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cg
RGF0YSIsIHRoaXMpOworCSAgc2hvd0RhdGFBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKwkg
IGNvbm5lY3Qoc2hvd0RhdGFBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmlnVmll
dywgU0xPVChzZXRTaG93RGF0YShib29sKSkpOworCisJUUFjdGlvbkdyb3VwICpvcHRHcm91cCA9
IG5ldyBRQWN0aW9uR3JvdXAodGhpcyk7CisJb3B0R3JvdXAtPnNldEV4Y2x1c2l2ZSh0cnVlKTsK
Kwljb25uZWN0KG9wdEdyb3VwLCBTSUdOQUwodHJpZ2dlcmVkKFFBY3Rpb24qKSksIGNvbmZpZ1Zp
ZXcsCisJCVNMT1Qoc2V0T3B0aW9uTW9kZShRQWN0aW9uICopKSk7CisJY29ubmVjdChvcHRHcm91
cCwgU0lHTkFMKHRyaWdnZXJlZChRQWN0aW9uICopKSwgbWVudVZpZXcsCisJCVNMT1Qoc2V0T3B0
aW9uTW9kZShRQWN0aW9uICopKSk7CisKKwljb25maWdWaWV3LT5zaG93Tm9ybWFsQWN0aW9uID0g
bmV3IFFBY3Rpb24oIlNob3cgTm9ybWFsIE9wdGlvbnMiLCBvcHRHcm91cCk7CisJY29uZmlnVmll
dy0+c2hvd0FsbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IEFsbCBPcHRpb25zIiwgb3B0R3Jv
dXApOworCWNvbmZpZ1ZpZXctPnNob3dQcm9tcHRBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBQ
cm9tcHQgT3B0aW9ucyIsIG9wdEdyb3VwKTsKKwljb25maWdWaWV3LT5zaG93Tm9ybWFsQWN0aW9u
LT5zZXRDaGVja2FibGUodHJ1ZSk7CisJY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbi0+c2V0Q2hl
Y2thYmxlKHRydWUpOworCWNvbmZpZ1ZpZXctPnNob3dQcm9tcHRBY3Rpb24tPnNldENoZWNrYWJs
ZSh0cnVlKTsKKworCVFBY3Rpb24gKnNob3dEZWJ1Z0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93
IERlYnVnIEluZm8iLCB0aGlzKTsKKwkgIHNob3dEZWJ1Z0FjdGlvbi0+c2V0Q2hlY2thYmxlKHRy
dWUpOworCSAgY29ubmVjdChzaG93RGVidWdBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwg
aGVscFRleHQsIFNMT1Qoc2V0U2hvd0RlYnVnKGJvb2wpKSk7CisJICBzaG93RGVidWdBY3Rpb24t
PnNldENoZWNrZWQoaGVscFRleHQtPnNob3dEZWJ1ZygpKTsKKworCVFBY3Rpb24gKnNob3dJbnRy
b0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJJbnRyb2R1Y3Rpb24iLCB0aGlzKTsKKwkgIGNvbm5lY3Qo
c2hvd0ludHJvQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93SW50cm8o
KSkpOworCVFBY3Rpb24gKnNob3dBYm91dEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJBYm91dCIsIHRo
aXMpOworCSAgY29ubmVjdChzaG93QWJvdXRBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkp
LCBTTE9UKHNob3dBYm91dCgpKSk7CisKKwkvLyBpbml0IHRvb2wgYmFyCisJdG9vbEJhci0+YWRk
QWN0aW9uKGJhY2tBY3Rpb24pOworCXRvb2xCYXItPmFkZFNlcGFyYXRvcigpOworCXRvb2xCYXIt
PmFkZEFjdGlvbihsb2FkQWN0aW9uKTsKKwl0b29sQmFyLT5hZGRBY3Rpb24oc2F2ZUFjdGlvbik7
CisJdG9vbEJhci0+YWRkU2VwYXJhdG9yKCk7CisJdG9vbEJhci0+YWRkQWN0aW9uKHNpbmdsZVZp
ZXdBY3Rpb24pOworCXRvb2xCYXItPmFkZEFjdGlvbihzcGxpdFZpZXdBY3Rpb24pOworCXRvb2xC
YXItPmFkZEFjdGlvbihmdWxsVmlld0FjdGlvbik7CisKKwkvLyBjcmVhdGUgY29uZmlnIG1lbnUK
KwlRTWVudSogY29uZmlnID0gbWVudS0+YWRkTWVudSgiJkZpbGUiKTsKKwljb25maWctPmFkZEFj
dGlvbihsb2FkQWN0aW9uKTsKKwljb25maWctPmFkZEFjdGlvbihzYXZlQWN0aW9uKTsKKwljb25m
aWctPmFkZEFjdGlvbihzYXZlQXNBY3Rpb24pOworCWNvbmZpZy0+YWRkU2VwYXJhdG9yKCk7CisJ
Y29uZmlnLT5hZGRBY3Rpb24ocXVpdEFjdGlvbik7CisKKwkvLyBjcmVhdGUgZWRpdCBtZW51CisJ
UU1lbnUqIGVkaXRNZW51ID0gbWVudS0+YWRkTWVudSgiJkVkaXQiKTsKKwllZGl0TWVudS0+YWRk
QWN0aW9uKHNlYXJjaEFjdGlvbik7CisKKwkvLyBjcmVhdGUgb3B0aW9ucyBtZW51CisJUU1lbnUq
IG9wdGlvbk1lbnUgPSBtZW51LT5hZGRNZW51KCImT3B0aW9uIik7CisJb3B0aW9uTWVudS0+YWRk
QWN0aW9uKHNob3dOYW1lQWN0aW9uKTsKKwlvcHRpb25NZW51LT5hZGRBY3Rpb24oc2hvd1Jhbmdl
QWN0aW9uKTsKKwlvcHRpb25NZW51LT5hZGRBY3Rpb24oc2hvd0RhdGFBY3Rpb24pOworCW9wdGlv
bk1lbnUtPmFkZFNlcGFyYXRvcigpOworCW9wdGlvbk1lbnUtPmFkZEFjdGlvbnMob3B0R3JvdXAt
PmFjdGlvbnMoKSk7CisJb3B0aW9uTWVudS0+YWRkU2VwYXJhdG9yKCk7CisJb3B0aW9uTWVudS0+
YWRkQWN0aW9uKHNob3dEZWJ1Z0FjdGlvbik7CisKKwkvLyBjcmVhdGUgaGVscCBtZW51CisJbWVu
dS0+YWRkU2VwYXJhdG9yKCk7CisJUU1lbnUqIGhlbHBNZW51ID0gbWVudS0+YWRkTWVudSgiJkhl
bHAiKTsKKwloZWxwTWVudS0+YWRkQWN0aW9uKHNob3dJbnRyb0FjdGlvbik7CisJaGVscE1lbnUt
PmFkZEFjdGlvbihzaG93QWJvdXRBY3Rpb24pOworCisJY29ubmVjdChjb25maWdMaXN0LCBTSUdO
QUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLAorCQloZWxwVGV4dCwgU0xPVChzZXRJbmZv
KHN0cnVjdCBtZW51ICopKSk7CisJY29ubmVjdChjb25maWdMaXN0LCBTSUdOQUwobWVudVNlbGVj
dGVkKHN0cnVjdCBtZW51ICopKSwKKwkJU0xPVChjaGFuZ2VNZW51KHN0cnVjdCBtZW51ICopKSk7
CisJY29ubmVjdChjb25maWdMaXN0LCBTSUdOQUwocGFyZW50U2VsZWN0ZWQoKSksCisJCVNMT1Qo
Z29CYWNrKCkpKTsKKwljb25uZWN0KG1lbnVMaXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0
IG1lbnUgKikpLAorCQloZWxwVGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7CisJ
Y29ubmVjdChtZW51TGlzdCwgU0lHTkFMKG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqKSksCisJ
CVNMT1QoY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOworCisJY29ubmVjdChjb25maWdMaXN0
LCBTSUdOQUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLAorCQloZWxwVGV4dCwgU0xPVChzZXRJ
bmZvKHN0cnVjdCBtZW51ICopKSk7CisJY29ubmVjdChtZW51TGlzdCwgU0lHTkFMKGdvdEZvY3Vz
KHN0cnVjdCBtZW51ICopKSwKKwkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAq
KSkpOworCWNvbm5lY3QobWVudUxpc3QsIFNJR05BTChnb3RGb2N1cyhzdHJ1Y3QgbWVudSAqKSks
CisJCVNMT1QobGlzdEZvY3VzQ2hhbmdlZCh2b2lkKSkpOworCWNvbm5lY3QoaGVscFRleHQsIFNJ
R05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLAorCQlTTE9UKHNldE1lbnVMaW5rKHN0
cnVjdCBtZW51ICopKSk7CisKKwlRU3RyaW5nIGxpc3RNb2RlID0gY29uZmlnU2V0dGluZ3MtPnZh
bHVlKCIvbGlzdE1vZGUiLCAic3ltYm9sIikudG9TdHJpbmcoKTsKKwlpZiAobGlzdE1vZGUgPT0g
InNpbmdsZSIpCisJCXNob3dTaW5nbGVWaWV3KCk7CisJZWxzZSBpZiAobGlzdE1vZGUgPT0gImZ1
bGwiKQorCQlzaG93RnVsbFZpZXcoKTsKKwllbHNlIC8qaWYgKGxpc3RNb2RlID09ICJzcGxpdCIp
Ki8KKwkJc2hvd1NwbGl0VmlldygpOworCisJLy8gVUkgc2V0dXAgZG9uZSwgcmVzdG9yZSBzcGxp
dHRlciBwb3NpdGlvbnMKKwlRTGlzdDxpbnQ+IHNpemVzID0gY29uZmlnU2V0dGluZ3MtPnJlYWRT
aXplcygiL3NwbGl0MSIsICZvayk7CisJaWYgKG9rKQorCQlzcGxpdDEtPnNldFNpemVzKHNpemVz
KTsKKworCXNpemVzID0gY29uZmlnU2V0dGluZ3MtPnJlYWRTaXplcygiL3NwbGl0MiIsICZvayk7
CisJaWYgKG9rKQorCQlzcGxpdDItPnNldFNpemVzKHNpemVzKTsKK30KKwordm9pZCBDb25maWdN
YWluV2luZG93Ojpsb2FkQ29uZmlnKHZvaWQpCit7CisJUVN0cmluZyBzdHI7CisJUUJ5dGVBcnJh
eSBiYTsKKwljb25zdCBjaGFyICpuYW1lOworCisJc3RyID0gUUZpbGVEaWFsb2c6OmdldE9wZW5G
aWxlTmFtZSh0aGlzLCAiIiwgY29uZmlnbmFtZSk7CisJaWYgKHN0ci5pc051bGwoKSkKKwkJcmV0
dXJuOworCisJYmEgPSBzdHIudG9Mb2NhbDhCaXQoKTsKKwluYW1lID0gYmEuZGF0YSgpOworCisJ
aWYgKGNvbmZfcmVhZChuYW1lKSkKKwkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJx
Y29uZiIsICJVbmFibGUgdG8gbG9hZCBjb25maWd1cmF0aW9uISIpOworCisJZnJlZShjb25maWdu
YW1lKTsKKwljb25maWduYW1lID0geHN0cmR1cChuYW1lKTsKKworCUNvbmZpZ1ZpZXc6OnVwZGF0
ZUxpc3RBbGwoKTsKK30KKworYm9vbCBDb25maWdNYWluV2luZG93OjpzYXZlQ29uZmlnKHZvaWQp
Cit7CisJaWYgKGNvbmZfd3JpdGUoY29uZmlnbmFtZSkpIHsKKwkJUU1lc3NhZ2VCb3g6OmluZm9y
bWF0aW9uKHRoaXMsICJxY29uZiIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uISIpOwor
CQlyZXR1cm4gZmFsc2U7CisJfQorCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7CisKKwlyZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzYXZlQ29uZmlnQXModm9pZCkKK3sK
KwlRU3RyaW5nIHN0cjsKKwlRQnl0ZUFycmF5IGJhOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlz
dHIgPSBRRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVOYW1lKHRoaXMsICIiLCBjb25maWduYW1lKTsK
KwlpZiAoc3RyLmlzTnVsbCgpKQorCQlyZXR1cm47CisKKwliYSA9IHN0ci50b0xvY2FsOEJpdCgp
OworCW5hbWUgPSBiYS5kYXRhKCk7CisKKwlpZiAoY29uZl93cml0ZShuYW1lKSkgeworCQlRTWVz
c2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwgIlVuYWJsZSB0byBzYXZlIGNvbmZp
Z3VyYXRpb24hIik7CisJfQorCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7CisKKwlmcmVlKGNvbmZp
Z25hbWUpOworCWNvbmZpZ25hbWUgPSB4c3RyZHVwKG5hbWUpOworfQorCit2b2lkIENvbmZpZ01h
aW5XaW5kb3c6OnNlYXJjaENvbmZpZyh2b2lkKQoreworCWlmICghc2VhcmNoV2luZG93KQorCQlz
ZWFyY2hXaW5kb3cgPSBuZXcgQ29uZmlnU2VhcmNoV2luZG93KHRoaXMsICJzZWFyY2giKTsKKwlz
ZWFyY2hXaW5kb3ctPnNob3coKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpjaGFuZ2VN
ZW51KHN0cnVjdCBtZW51ICptZW51KQoreworCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KG1lbnUp
OworCWlmIChjb25maWdMaXN0LT5yb290RW50cnktPnBhcmVudCA9PSAmcm9vdG1lbnUpCisJCWJh
Y2tBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOworCWVsc2UKKwkJYmFja0FjdGlvbi0+c2V0RW5h
YmxlZCh0cnVlKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzZXRNZW51TGluayhzdHJ1
Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqcGFyZW50OworCUNvbmZpZ0xpc3QqIGxp
c3QgPSBOVUxMOworCUNvbmZpZ0l0ZW0qIGl0ZW07CisKKwlpZiAoY29uZmlnTGlzdC0+bWVudVNr
aXAobWVudSkpCisJCXJldHVybjsKKworCXN3aXRjaCAoY29uZmlnTGlzdC0+bW9kZSkgeworCWNh
c2Ugc2luZ2xlTW9kZToKKwkJbGlzdCA9IGNvbmZpZ0xpc3Q7CisJCXBhcmVudCA9IG1lbnVfZ2V0
X3BhcmVudF9tZW51KG1lbnUpOworCQlpZiAoIXBhcmVudCkKKwkJCXJldHVybjsKKwkJbGlzdC0+
c2V0Um9vdE1lbnUocGFyZW50KTsKKwkJYnJlYWs7CisJY2FzZSBzeW1ib2xNb2RlOgorCQlpZiAo
bWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpIHsKKwkJCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KG1l
bnUpOworCQkJY29uZmlnTGlzdC0+Y2xlYXJTZWxlY3Rpb24oKTsKKwkJCWxpc3QgPSBtZW51TGlz
dDsKKwkJfSBlbHNlIHsKKwkJCWxpc3QgPSBjb25maWdMaXN0OworCQkJcGFyZW50ID0gbWVudV9n
ZXRfcGFyZW50X21lbnUobWVudS0+cGFyZW50KTsKKwkJCWlmICghcGFyZW50KQorCQkJCXJldHVy
bjsKKwkJCWl0ZW0gPSBtZW51TGlzdC0+ZmluZENvbmZpZ0l0ZW0ocGFyZW50KTsKKwkJCWlmIChp
dGVtKSB7CisJCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisJCQkJbWVudUxpc3QtPnNjcm9s
bFRvSXRlbShpdGVtKTsKKwkJCX0KKwkJCWxpc3QtPnNldFJvb3RNZW51KHBhcmVudCk7CisJCX0K
KwkJYnJlYWs7CisJY2FzZSBmdWxsTW9kZToKKwkJbGlzdCA9IGNvbmZpZ0xpc3Q7CisJCWJyZWFr
OworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChsaXN0KSB7CisJCWl0ZW0gPSBsaXN0
LT5maW5kQ29uZmlnSXRlbShtZW51KTsKKwkJaWYgKGl0ZW0pIHsKKwkJCWl0ZW0tPnNldFNlbGVj
dGVkKHRydWUpOworCQkJbGlzdC0+c2Nyb2xsVG9JdGVtKGl0ZW0pOworCQkJbGlzdC0+c2V0Rm9j
dXMoKTsKKwkJfQorCX0KK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpsaXN0Rm9jdXNDaGFu
Z2VkKHZvaWQpCit7CisJaWYgKG1lbnVMaXN0LT5tb2RlID09IG1lbnVNb2RlKQorCQljb25maWdM
aXN0LT5jbGVhclNlbGVjdGlvbigpOworfQorCit2b2lkIENvbmZpZ01haW5XaW5kb3c6OmdvQmFj
ayh2b2lkKQoreworCUNvbmZpZ0l0ZW0qIGl0ZW0sICpvbGRTZWxlY3Rpb247CisKKwljb25maWdM
aXN0LT5zZXRQYXJlbnRNZW51KCk7CisJaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeSA9PSAmcm9v
dG1lbnUpCisJCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOworCisJaWYgKG1lbnVMaXN0
LT5zZWxlY3RlZEl0ZW1zKCkuY291bnQoKSA9PSAwKQorCQlyZXR1cm47CisKKwlpdGVtID0gKENv
bmZpZ0l0ZW0qKW1lbnVMaXN0LT5zZWxlY3RlZEl0ZW1zKCkuZmlyc3QoKTsKKwlvbGRTZWxlY3Rp
b24gPSBpdGVtOworCXdoaWxlIChpdGVtKSB7CisJCWlmIChpdGVtLT5tZW51ID09IGNvbmZpZ0xp
c3QtPnJvb3RFbnRyeSkgeworCQkJb2xkU2VsZWN0aW9uLT5zZXRTZWxlY3RlZChmYWxzZSk7CisJ
CQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKKwkJCWJyZWFrOworCQl9CisJCWl0ZW0gPSAoQ29u
ZmlnSXRlbSopaXRlbS0+cGFyZW50KCk7CisJfQorfQorCit2b2lkIENvbmZpZ01haW5XaW5kb3c6
OnNob3dTaW5nbGVWaWV3KHZvaWQpCit7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0RW5hYmxlZChm
YWxzZSk7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0Q2hlY2tlZCh0cnVlKTsKKwlzcGxpdFZpZXdB
Y3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7CisJc3BsaXRWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZh
bHNlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKKwlmdWxsVmlld0FjdGlv
bi0+c2V0Q2hlY2tlZChmYWxzZSk7CisKKwltZW51Vmlldy0+aGlkZSgpOworCW1lbnVMaXN0LT5z
ZXRSb290TWVudSgwKTsKKwljb25maWdMaXN0LT5tb2RlID0gc2luZ2xlTW9kZTsKKwlpZiAoY29u
ZmlnTGlzdC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJY29uZmlnTGlzdC0+dXBkYXRlTGlz
dEFsbCgpOworCWVsc2UKKwkJY29uZmlnTGlzdC0+c2V0Um9vdE1lbnUoJnJvb3RtZW51KTsKKwlj
b25maWdMaXN0LT5zZXRGb2N1cygpOworfQorCit2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dT
cGxpdFZpZXcodm9pZCkKK3sKKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwor
CXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOworCXNwbGl0Vmlld0FjdGlvbi0+
c2V0RW5hYmxlZChmYWxzZSk7CisJc3BsaXRWaWV3QWN0aW9uLT5zZXRDaGVja2VkKHRydWUpOwor
CWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRD
aGVja2VkKGZhbHNlKTsKKworCWNvbmZpZ0xpc3QtPm1vZGUgPSBzeW1ib2xNb2RlOworCWlmIChj
b25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQorCQljb25maWdMaXN0LT51cGRhdGVM
aXN0QWxsKCk7CisJZWxzZQorCQljb25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOwor
CWNvbmZpZ0xpc3QtPnNldEFsbE9wZW4odHJ1ZSk7CisJY29uZmlnQXBwLT5wcm9jZXNzRXZlbnRz
KCk7CisJbWVudUxpc3QtPm1vZGUgPSBtZW51TW9kZTsKKwltZW51TGlzdC0+c2V0Um9vdE1lbnUo
JnJvb3RtZW51KTsKKwltZW51TGlzdC0+c2V0QWxsT3Blbih0cnVlKTsKKwltZW51Vmlldy0+c2hv
dygpOworCW1lbnVMaXN0LT5zZXRGb2N1cygpOworfQorCit2b2lkIENvbmZpZ01haW5XaW5kb3c6
OnNob3dGdWxsVmlldyh2b2lkKQoreworCXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1
ZSk7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7CisJc3BsaXRWaWV3QWN0
aW9uLT5zZXRFbmFibGVkKHRydWUpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxz
ZSk7CisJZnVsbFZpZXdBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOworCWZ1bGxWaWV3QWN0aW9u
LT5zZXRDaGVja2VkKHRydWUpOworCisJbWVudVZpZXctPmhpZGUoKTsKKwltZW51TGlzdC0+c2V0
Um9vdE1lbnUoMCk7CisJY29uZmlnTGlzdC0+bW9kZSA9IGZ1bGxNb2RlOworCWlmIChjb25maWdM
aXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQorCQljb25maWdMaXN0LT51cGRhdGVMaXN0QWxs
KCk7CisJZWxzZQorCQljb25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOworCWNvbmZp
Z0xpc3QtPnNldEZvY3VzKCk7Cit9CisKKy8qCisgKiBhc2sgZm9yIHNhdmluZyBjb25maWd1cmF0
aW9uIGJlZm9yZSBxdWl0dGluZworICogVE9ETyBhc2sgb25seSB3aGVuIHNvbWV0aGluZyBjaGFu
Z2VkCisgKi8KK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Y2xvc2VFdmVudChRQ2xvc2VFdmVudCog
ZSkKK3sKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkgeworCQllLT5hY2NlcHQoKTsKKwkJcmV0
dXJuOworCX0KKwlRTWVzc2FnZUJveCBtYigicWNvbmYiLCAiU2F2ZSBjb25maWd1cmF0aW9uPyIs
IFFNZXNzYWdlQm94OjpXYXJuaW5nLAorCQkJUU1lc3NhZ2VCb3g6OlllcyB8IFFNZXNzYWdlQm94
OjpEZWZhdWx0LCBRTWVzc2FnZUJveDo6Tm8sIFFNZXNzYWdlQm94OjpDYW5jZWwgfCBRTWVzc2Fn
ZUJveDo6RXNjYXBlKTsKKwltYi5zZXRCdXR0b25UZXh0KFFNZXNzYWdlQm94OjpZZXMsICImU2F2
ZSBDaGFuZ2VzIik7CisJbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJveDo6Tm8sICImRGlzY2Fy
ZCBDaGFuZ2VzIik7CisJbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJveDo6Q2FuY2VsLCAiQ2Fu
Y2VsIEV4aXQiKTsKKwlzd2l0Y2ggKG1iLmV4ZWMoKSkgeworCWNhc2UgUU1lc3NhZ2VCb3g6Olll
czoKKwkJaWYgKHNhdmVDb25maWcoKSkKKwkJCWUtPmFjY2VwdCgpOworCQllbHNlCisJCQllLT5p
Z25vcmUoKTsKKwkJYnJlYWs7CisJY2FzZSBRTWVzc2FnZUJveDo6Tm86CisJCWUtPmFjY2VwdCgp
OworCQlicmVhazsKKwljYXNlIFFNZXNzYWdlQm94OjpDYW5jZWw6CisJCWUtPmlnbm9yZSgpOwor
CQlicmVhazsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0ludHJvKHZvaWQp
Cit7CisJc3RhdGljIGNvbnN0IFFTdHJpbmcgc3RyID0gIldlbGNvbWUgdG8gdGhlIHFjb25mIGdy
YXBoaWNhbCBjb25maWd1cmF0aW9uIHRvb2wuXG5cbiIKKwkJIkZvciBlYWNoIG9wdGlvbiwgYSBi
bGFuayBib3ggaW5kaWNhdGVzIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLCBhIGNoZWNrXG4iCisJ
CSJpbmRpY2F0ZXMgaXQgaXMgZW5hYmxlZCwgYW5kIGEgZG90IGluZGljYXRlcyB0aGF0IGl0IGlz
IHRvIGJlIGNvbXBpbGVkXG4iCisJCSJhcyBhIG1vZHVsZS4gIENsaWNraW5nIG9uIHRoZSBib3gg
d2lsbCBjeWNsZSB0aHJvdWdoIHRoZSB0aHJlZSBzdGF0ZXMuXG5cbiIKKwkJIklmIHlvdSBkbyBu
b3Qgc2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBkZXZpY2UgZHJpdmVyKSB0aGF0IHlvdSBiZWxpZXZl
XG4iCisJCSJzaG91bGQgYmUgcHJlc2VudCwgdHJ5IHR1cm5pbmcgb24gU2hvdyBBbGwgT3B0aW9u
cyB1bmRlciB0aGUgT3B0aW9ucyBtZW51LlxuIgorCQkiQWx0aG91Z2ggdGhlcmUgaXMgbm8gY3Jv
c3MgcmVmZXJlbmNlIHlldCB0byBoZWxwIHlvdSBmaWd1cmUgb3V0IHdoYXQgb3RoZXJcbiIKKwkJ
Im9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIHRvIHN1cHBvcnQgdGhlIG9wdGlvbiB5b3UgYXJlIGlu
dGVyZXN0ZWQgaW4sIHlvdSBjYW5cbiIKKwkJInN0aWxsIHZpZXcgdGhlIGhlbHAgb2YgYSBncmF5
ZWQtb3V0IG9wdGlvbi5cblxuIgorCQkiVG9nZ2xpbmcgU2hvdyBEZWJ1ZyBJbmZvIHVuZGVyIHRo
ZSBPcHRpb25zIG1lbnUgd2lsbCBzaG93IHRoZSBkZXBlbmRlbmNpZXMsXG4iCisJCSJ3aGljaCB5
b3UgY2FuIHRoZW4gbWF0Y2ggYnkgZXhhbWluaW5nIG90aGVyIG9wdGlvbnMuXG5cbiI7CisKKwlR
TWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwgc3RyKTsKK30KKwordm9pZCBD
b25maWdNYWluV2luZG93OjpzaG93QWJvdXQodm9pZCkKK3sKKwlzdGF0aWMgY29uc3QgUVN0cmlu
ZyBzdHIgPSAicWNvbmYgaXMgQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVs
QGxpbnV4LW02OGsub3JnPi5cbiIKKwkJIkNvcHlyaWdodCAoQykgMjAxNSBCb3JpcyBCYXJidWxv
dnNraSA8YmJhcmJ1bG92c2tpQGdtYWlsLmNvbT4uXG5cbiIKKwkJIkJ1ZyByZXBvcnRzIGFuZCBm
ZWF0dXJlIHJlcXVlc3QgY2FuIGFsc28gYmUgZW50ZXJlZCBhdCBodHRwOi8vYnVnemlsbGEua2Vy
bmVsLm9yZy9cbiI7CisKKwlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwg
c3RyKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzYXZlU2V0dGluZ3Modm9pZCkKK3sK
Kwljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgeCIsIHBvcygpLngoKSk7CisJY29u
ZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHkiLCBwb3MoKS55KCkpOworCWNvbmZpZ1Nl
dHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB3aWR0aCIsIHNpemUoKS53aWR0aCgpKTsKKwljb25m
aWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgaGVpZ2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsK
KworCVFTdHJpbmcgZW50cnk7CisJc3dpdGNoKGNvbmZpZ0xpc3QtPm1vZGUpIHsKKwljYXNlIHNp
bmdsZU1vZGUgOgorCQllbnRyeSA9ICJzaW5nbGUiOworCQlicmVhazsKKworCWNhc2Ugc3ltYm9s
TW9kZSA6CisJCWVudHJ5ID0gInNwbGl0IjsKKwkJYnJlYWs7CisKKwljYXNlIGZ1bGxNb2RlIDoK
KwkJZW50cnkgPSAiZnVsbCI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQor
CWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL2xpc3RNb2RlIiwgZW50cnkpOworCisJY29uZmln
U2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxpdDEiLCBzcGxpdDEtPnNpemVzKCkpOworCWNvbmZp
Z1NldHRpbmdzLT53cml0ZVNpemVzKCIvc3BsaXQyIiwgc3BsaXQyLT5zaXplcygpKTsKK30KKwor
dm9pZCBDb25maWdNYWluV2luZG93Ojpjb25mX2NoYW5nZWQodm9pZCkKK3sKKwlpZiAoc2F2ZUFj
dGlvbikKKwkJc2F2ZUFjdGlvbi0+c2V0RW5hYmxlZChjb25mX2dldF9jaGFuZ2VkKCkpOworfQor
Cit2b2lkIGZpeHVwX3Jvb3RtZW51KHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBtZW51
ICpjaGlsZDsKKwlzdGF0aWMgaW50IG1lbnVfY250ID0gMDsKKworCW1lbnUtPmZsYWdzIHw9IE1F
TlVfUk9PVDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHQpIHsKKwkJaWYgKGNoaWxkLT5wcm9tcHQgJiYgY2hpbGQtPnByb21wdC0+dHlwZSA9PSBQ
X01FTlUpIHsKKwkJCW1lbnVfY250Kys7CisJCQlmaXh1cF9yb290bWVudShjaGlsZCk7CisJCQlt
ZW51X2NudC0tOworCQl9IGVsc2UgaWYgKCFtZW51X2NudCkKKwkJCWZpeHVwX3Jvb3RtZW51KGNo
aWxkKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsKKworc3RhdGljIHZv
aWQgdXNhZ2Uodm9pZCkKK3sKKwlwcmludGYoIiVzIFstc10gPGNvbmZpZz5cbiIsIHByb2duYW1l
KTsKKwlleGl0KDApOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIqKiBhdikKK3sKKwlDb25m
aWdNYWluV2luZG93KiB2OworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwlwcm9nbmFtZSA9IGF2WzBd
OworCWNvbmZpZ0FwcCA9IG5ldyBRQXBwbGljYXRpb24oYWMsIGF2KTsKKwlpZiAoYWMgPiAxICYm
IGF2WzFdWzBdID09ICctJykgeworCQlzd2l0Y2ggKGF2WzFdWzFdKSB7CisJCWNhc2UgJ3MnOgor
CQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlICdo
JzoKKwkJY2FzZSAnPyc6CisJCQl1c2FnZSgpOworCQl9CisJCW5hbWUgPSBhdlsyXTsKKwl9IGVs
c2UKKwkJbmFtZSA9IGF2WzFdOworCWlmICghbmFtZSkKKwkJdXNhZ2UoKTsKKworCWNvbmZfcGFy
c2UobmFtZSk7CisJZml4dXBfcm9vdG1lbnUoJnJvb3RtZW51KTsKKwljb25mX3JlYWQoTlVMTCk7
CisJLy96Y29uZmR1bXAoc3Rkb3V0KTsKKworCWNvbmZpZ1NldHRpbmdzID0gbmV3IENvbmZpZ1Nl
dHRpbmdzKCk7CisJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAoIi9rY29uZmlnL3Fjb25mIik7
CisJdiA9IG5ldyBDb25maWdNYWluV2luZG93KCk7CisKKwkvL3pjb25mZHVtcChzdGRvdXQpOwor
CWNvbmZpZ0FwcC0+Y29ubmVjdChjb25maWdBcHAsIFNJR05BTChsYXN0V2luZG93Q2xvc2VkKCkp
LCBTTE9UKHF1aXQoKSkpOworCWNvbmZpZ0FwcC0+Y29ubmVjdChjb25maWdBcHAsIFNJR05BTChh
Ym91dFRvUXVpdCgpKSwgdiwgU0xPVChzYXZlU2V0dGluZ3MoKSkpOworCXYtPnNob3coKTsKKwlj
b25maWdBcHAtPmV4ZWMoKTsKKworCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOworCWRlbGV0
ZSBjb25maWdTZXR0aW5nczsKKwlkZWxldGUgdjsKKwlkZWxldGUgY29uZmlnQXBwOworCisJcmV0
dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmggYi9zdXBw
b3J0L2tjb25maWcubmV3L3Fjb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjQ1YmZlOWIyCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29u
Zi5oCkBAIC0wLDAgKzEsMzMxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu
MCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51
eC1tNjhrLm9yZz4KKyAqLworCisjaW5jbHVkZSA8UVRleHRCcm93c2VyPgorI2luY2x1ZGUgPFFU
cmVlV2lkZ2V0PgorI2luY2x1ZGUgPFFNYWluV2luZG93PgorI2luY2x1ZGUgPFFIZWFkZXJWaWV3
PgorI2luY2x1ZGUgPHFzZXR0aW5ncy5oPgorI2luY2x1ZGUgPFFQdXNoQnV0dG9uPgorI2luY2x1
ZGUgPFFTZXR0aW5ncz4KKyNpbmNsdWRlIDxRTGluZUVkaXQ+CisjaW5jbHVkZSA8UVNwbGl0dGVy
PgorI2luY2x1ZGUgPFFDaGVja0JveD4KKyNpbmNsdWRlIDxRRGlhbG9nPgorI2luY2x1ZGUgImV4
cHIuaCIKKworY2xhc3MgQ29uZmlnVmlldzsKK2NsYXNzIENvbmZpZ0xpc3Q7CitjbGFzcyBDb25m
aWdJdGVtOworY2xhc3MgQ29uZmlnTGluZUVkaXQ7CitjbGFzcyBDb25maWdNYWluV2luZG93Owor
CitjbGFzcyBDb25maWdTZXR0aW5ncyA6IHB1YmxpYyBRU2V0dGluZ3MgeworcHVibGljOgorCUNv
bmZpZ1NldHRpbmdzKCk7CisJUUxpc3Q8aW50PiByZWFkU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5
LCBib29sICpvayk7CisJYm9vbCB3cml0ZVNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgY29uc3Qg
UUxpc3Q8aW50PiYgdmFsdWUpOworfTsKKworZW51bSBjb2xJZHggeworCXByb21wdENvbElkeCwg
bmFtZUNvbElkeCwgbm9Db2xJZHgsIG1vZENvbElkeCwgeWVzQ29sSWR4LCBkYXRhQ29sSWR4LCBj
b2xOcgorfTsKK2VudW0gbGlzdE1vZGUgeworCXNpbmdsZU1vZGUsIG1lbnVNb2RlLCBzeW1ib2xN
b2RlLCBmdWxsTW9kZSwgbGlzdE1vZGUKK307CitlbnVtIG9wdGlvbk1vZGUgeworCW5vcm1hbE9w
dCA9IDAsIGFsbE9wdCwgcHJvbXB0T3B0Cit9OworCitjbGFzcyBDb25maWdMaXN0IDogcHVibGlj
IFFUcmVlV2lkZ2V0IHsKKwlRX09CSkVDVAorCXR5cGVkZWYgY2xhc3MgUVRyZWVXaWRnZXQgUGFy
ZW50OworcHVibGljOgorCUNvbmZpZ0xpc3QoQ29uZmlnVmlldyogcCwgY29uc3QgY2hhciAqbmFt
ZSA9IDApOworCXZvaWQgcmVpbml0KHZvaWQpOworCUNvbmZpZ1ZpZXcqIHBhcmVudCh2b2lkKSBj
b25zdAorCXsKKwkJcmV0dXJuIChDb25maWdWaWV3KilQYXJlbnQ6OnBhcmVudCgpOworCX0KKwlD
b25maWdJdGVtKiBmaW5kQ29uZmlnSXRlbShzdHJ1Y3QgbWVudSAqKTsKKworcHJvdGVjdGVkOgor
CXZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKmUpOworCXZvaWQgbW91c2VQcmVzc0V2ZW50
KFFNb3VzZUV2ZW50ICplKTsKKwl2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50ICpl
KTsKKwl2b2lkIG1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50ICplKTsKKwl2b2lkIG1vdXNlRG91
YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCAqZSk7CisJdm9pZCBmb2N1c0luRXZlbnQoUUZvY3Vz
RXZlbnQgKmUpOworCXZvaWQgY29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSk7
CisKK3B1YmxpYyBzbG90czoKKwl2b2lkIHNldFJvb3RNZW51KHN0cnVjdCBtZW51ICptZW51KTsK
KworCXZvaWQgdXBkYXRlTGlzdChDb25maWdJdGVtICppdGVtKTsKKwl2b2lkIHNldFZhbHVlKENv
bmZpZ0l0ZW0qIGl0ZW0sIHRyaXN0YXRlIHZhbCk7CisJdm9pZCBjaGFuZ2VWYWx1ZShDb25maWdJ
dGVtKiBpdGVtKTsKKwl2b2lkIHVwZGF0ZVNlbGVjdGlvbih2b2lkKTsKKwl2b2lkIHNhdmVTZXR0
aW5ncyh2b2lkKTsKK3NpZ25hbHM6CisJdm9pZCBtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqbWVu
dSk7CisJdm9pZCBtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKm1lbnUpOworCXZvaWQgcGFyZW50
U2VsZWN0ZWQodm9pZCk7CisJdm9pZCBnb3RGb2N1cyhzdHJ1Y3QgbWVudSAqKTsKKworcHVibGlj
OgorCXZvaWQgdXBkYXRlTGlzdEFsbCh2b2lkKQorCXsKKwkJdXBkYXRlQWxsID0gdHJ1ZTsKKwkJ
dXBkYXRlTGlzdChOVUxMKTsKKwkJdXBkYXRlQWxsID0gZmFsc2U7CisJfQorCUNvbmZpZ0xpc3Qq
IGxpc3RWaWV3KCkKKwl7CisJCXJldHVybiB0aGlzOworCX0KKwlDb25maWdJdGVtKiBmaXJzdENo
aWxkKCkgY29uc3QKKwl7CisJCXJldHVybiAoQ29uZmlnSXRlbSAqKWNoaWxkcmVuKCkuZmlyc3Qo
KTsKKwl9CisJdm9pZCBhZGRDb2x1bW4oY29sSWR4IGlkeCkKKwl7CisJCXNob3dDb2x1bW4oaWR4
KTsKKwl9CisJdm9pZCByZW1vdmVDb2x1bW4oY29sSWR4IGlkeCkKKwl7CisJCWhpZGVDb2x1bW4o
aWR4KTsKKwl9CisJdm9pZCBzZXRBbGxPcGVuKGJvb2wgb3Blbik7CisJdm9pZCBzZXRQYXJlbnRN
ZW51KHZvaWQpOworCisJYm9vbCBtZW51U2tpcChzdHJ1Y3QgbWVudSAqKTsKKworCXZvaWQgdXBk
YXRlTWVudUxpc3QoQ29uZmlnSXRlbSAqcGFyZW50LCBzdHJ1Y3QgbWVudSopOworCXZvaWQgdXBk
YXRlTWVudUxpc3QoQ29uZmlnTGlzdCAqcGFyZW50LCBzdHJ1Y3QgbWVudSopOworCisJYm9vbCB1
cGRhdGVBbGw7CisKKwlRUGl4bWFwIHN5bWJvbFllc1BpeCwgc3ltYm9sTW9kUGl4LCBzeW1ib2xO
b1BpeDsKKwlRUGl4bWFwIGNob2ljZVllc1BpeCwgY2hvaWNlTm9QaXg7CisJUVBpeG1hcCBtZW51
UGl4LCBtZW51SW52UGl4LCBtZW51QmFja1BpeCwgdm9pZFBpeDsKKworCWJvb2wgc2hvd05hbWUs
IHNob3dSYW5nZSwgc2hvd0RhdGE7CisJZW51bSBsaXN0TW9kZSBtb2RlOworCWVudW0gb3B0aW9u
TW9kZSBvcHRNb2RlOworCXN0cnVjdCBtZW51ICpyb290RW50cnk7CisJUVBhbGV0dGUgZGlzYWJs
ZWRDb2xvckdyb3VwOworCVFQYWxldHRlIGluYWN0aXZlZENvbG9yR3JvdXA7CisJUU1lbnUqIGhl
YWRlclBvcHVwOworfTsKKworY2xhc3MgQ29uZmlnSXRlbSA6IHB1YmxpYyBRVHJlZVdpZGdldEl0
ZW0geworCXR5cGVkZWYgY2xhc3MgUVRyZWVXaWRnZXRJdGVtIFBhcmVudDsKK3B1YmxpYzoKKwlD
b25maWdJdGVtKENvbmZpZ0xpc3QgKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIHN0cnVjdCBt
ZW51ICptLCBib29sIHYpCisJOiBQYXJlbnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBt
ZW51KG0pLCB2aXNpYmxlKHYpLCBnb1BhcmVudChmYWxzZSkKKwl7CisJCWluaXQoKTsKKwl9CisJ
Q29uZmlnSXRlbShDb25maWdJdGVtICpwYXJlbnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBzdHJ1Y3Qg
bWVudSAqbSwgYm9vbCB2KQorCTogUGFyZW50KHBhcmVudCwgYWZ0ZXIpLCBuZXh0SXRlbSgwKSwg
bWVudShtKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQoZmFsc2UpCisJeworCQlpbml0KCk7CisJfQor
CUNvbmZpZ0l0ZW0oQ29uZmlnTGlzdCAqcGFyZW50LCBDb25maWdJdGVtICphZnRlciwgYm9vbCB2
KQorCTogUGFyZW50KHBhcmVudCwgYWZ0ZXIpLCBuZXh0SXRlbSgwKSwgbWVudSgwKSwgdmlzaWJs
ZSh2KSwgZ29QYXJlbnQodHJ1ZSkKKwl7CisJCWluaXQoKTsKKwl9CisJfkNvbmZpZ0l0ZW0odm9p
ZCk7CisJdm9pZCBpbml0KHZvaWQpOworCXZvaWQgb2tSZW5hbWUoaW50IGNvbCk7CisJdm9pZCB1
cGRhdGVNZW51KHZvaWQpOworCXZvaWQgdGVzdFVwZGF0ZU1lbnUoYm9vbCB2KTsKKwlDb25maWdM
aXN0KiBsaXN0VmlldygpIGNvbnN0CisJeworCQlyZXR1cm4gKENvbmZpZ0xpc3QqKVBhcmVudDo6
dHJlZVdpZGdldCgpOworCX0KKwlDb25maWdJdGVtKiBmaXJzdENoaWxkKCkgY29uc3QKKwl7CisJ
CXJldHVybiAoQ29uZmlnSXRlbSAqKVBhcmVudDo6Y2hpbGQoMCk7CisJfQorCUNvbmZpZ0l0ZW0q
IG5leHRTaWJsaW5nKCkKKwl7CisJCUNvbmZpZ0l0ZW0gKnJldCA9IE5VTEw7CisJCUNvbmZpZ0l0
ZW0gKl9wYXJlbnQgPSAoQ29uZmlnSXRlbSAqKXBhcmVudCgpOworCisJCWlmKF9wYXJlbnQpIHsK
KwkJCXJldCA9IChDb25maWdJdGVtICopX3BhcmVudC0+Y2hpbGQoX3BhcmVudC0+aW5kZXhPZkNo
aWxkKHRoaXMpKzEpOworCQl9IGVsc2UgeworCQkJUVRyZWVXaWRnZXQgKl90cmVlV2lkZ2V0ID0g
dHJlZVdpZGdldCgpOworCQkJcmV0ID0gKENvbmZpZ0l0ZW0gKilfdHJlZVdpZGdldC0+dG9wTGV2
ZWxJdGVtKF90cmVlV2lkZ2V0LT5pbmRleE9mVG9wTGV2ZWxJdGVtKHRoaXMpKzEpOworCQl9CisK
KwkJcmV0dXJuIHJldDsKKwl9CisJdm9pZCBzZXRUZXh0KGNvbElkeCBpZHgsIGNvbnN0IFFTdHJp
bmcmIHRleHQpCisJeworCQlQYXJlbnQ6OnNldFRleHQoaWR4LCB0ZXh0KTsKKwl9CisJUVN0cmlu
ZyB0ZXh0KGNvbElkeCBpZHgpIGNvbnN0CisJeworCQlyZXR1cm4gUGFyZW50Ojp0ZXh0KGlkeCk7
CisJfQorCXZvaWQgc2V0UGl4bWFwKGNvbElkeCBpZHgsIGNvbnN0IFFJY29uICZpY29uKQorCXsK
KwkJUGFyZW50OjpzZXRJY29uKGlkeCwgaWNvbik7CisJfQorCWNvbnN0IFFJY29uIHBpeG1hcChj
b2xJZHggaWR4KSBjb25zdAorCXsKKwkJcmV0dXJuIGljb24oaWR4KTsKKwl9CisJLy8gVE9ETzog
SW1wbGVtZW50IHBhaW50Q2VsbAorCisJQ29uZmlnSXRlbSogbmV4dEl0ZW07CisJc3RydWN0IG1l
bnUgKm1lbnU7CisJYm9vbCB2aXNpYmxlOworCWJvb2wgZ29QYXJlbnQ7Cit9OworCitjbGFzcyBD
b25maWdMaW5lRWRpdCA6IHB1YmxpYyBRTGluZUVkaXQgeworCVFfT0JKRUNUCisJdHlwZWRlZiBj
bGFzcyBRTGluZUVkaXQgUGFyZW50OworcHVibGljOgorCUNvbmZpZ0xpbmVFZGl0KENvbmZpZ1Zp
ZXcqIHBhcmVudCk7CisJQ29uZmlnVmlldyogcGFyZW50KHZvaWQpIGNvbnN0CisJeworCQlyZXR1
cm4gKENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50KCk7CisJfQorCXZvaWQgc2hvdyhDb25maWdJ
dGVtICppKTsKKwl2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50ICplKTsKKworcHVibGljOgor
CUNvbmZpZ0l0ZW0gKml0ZW07Cit9OworCitjbGFzcyBDb25maWdWaWV3IDogcHVibGljIFFXaWRn
ZXQgeworCVFfT0JKRUNUCisJdHlwZWRlZiBjbGFzcyBRV2lkZ2V0IFBhcmVudDsKK3B1YmxpYzoK
KwlDb25maWdWaWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSA9IDApOworCX5D
b25maWdWaWV3KHZvaWQpOworCXN0YXRpYyB2b2lkIHVwZGF0ZUxpc3QoQ29uZmlnSXRlbSogaXRl
bSk7CisJc3RhdGljIHZvaWQgdXBkYXRlTGlzdEFsbCh2b2lkKTsKKworCWJvb2wgc2hvd05hbWUo
dm9pZCkgY29uc3QgeyByZXR1cm4gbGlzdC0+c2hvd05hbWU7IH0KKwlib29sIHNob3dSYW5nZSh2
b2lkKSBjb25zdCB7IHJldHVybiBsaXN0LT5zaG93UmFuZ2U7IH0KKwlib29sIHNob3dEYXRhKHZv
aWQpIGNvbnN0IHsgcmV0dXJuIGxpc3QtPnNob3dEYXRhOyB9CitwdWJsaWMgc2xvdHM6CisJdm9p
ZCBzZXRTaG93TmFtZShib29sKTsKKwl2b2lkIHNldFNob3dSYW5nZShib29sKTsKKwl2b2lkIHNl
dFNob3dEYXRhKGJvb2wpOworCXZvaWQgc2V0T3B0aW9uTW9kZShRQWN0aW9uICopOworc2lnbmFs
czoKKwl2b2lkIHNob3dOYW1lQ2hhbmdlZChib29sKTsKKwl2b2lkIHNob3dSYW5nZUNoYW5nZWQo
Ym9vbCk7CisJdm9pZCBzaG93RGF0YUNoYW5nZWQoYm9vbCk7CitwdWJsaWM6CisJQ29uZmlnTGlz
dCogbGlzdDsKKwlDb25maWdMaW5lRWRpdCogbGluZUVkaXQ7CisKKwlzdGF0aWMgQ29uZmlnVmll
dyogdmlld0xpc3Q7CisJQ29uZmlnVmlldyogbmV4dFZpZXc7CisKKwlzdGF0aWMgUUFjdGlvbiAq
c2hvd05vcm1hbEFjdGlvbjsKKwlzdGF0aWMgUUFjdGlvbiAqc2hvd0FsbEFjdGlvbjsKKwlzdGF0
aWMgUUFjdGlvbiAqc2hvd1Byb21wdEFjdGlvbjsKK307CisKK2NsYXNzIENvbmZpZ0luZm9WaWV3
IDogcHVibGljIFFUZXh0QnJvd3NlciB7CisJUV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFUZXh0
QnJvd3NlciBQYXJlbnQ7CitwdWJsaWM6CisJQ29uZmlnSW5mb1ZpZXcoUVdpZGdldCogcGFyZW50
LCBjb25zdCBjaGFyICpuYW1lID0gMCk7CisJYm9vbCBzaG93RGVidWcodm9pZCkgY29uc3QgeyBy
ZXR1cm4gX3Nob3dEZWJ1ZzsgfQorCitwdWJsaWMgc2xvdHM6CisJdm9pZCBzZXRJbmZvKHN0cnVj
dCBtZW51ICptZW51KTsKKwl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsKKwl2b2lkIHNldFNob3dE
ZWJ1Zyhib29sKTsKKworc2lnbmFsczoKKwl2b2lkIHNob3dEZWJ1Z0NoYW5nZWQoYm9vbCk7CisJ
dm9pZCBtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKik7CisKK3Byb3RlY3RlZDoKKwl2b2lkIHN5
bWJvbEluZm8odm9pZCk7CisJdm9pZCBtZW51SW5mbyh2b2lkKTsKKwlRU3RyaW5nIGRlYnVnX2lu
Zm8oc3RydWN0IHN5bWJvbCAqc3ltKTsKKwlzdGF0aWMgUVN0cmluZyBwcmludF9maWx0ZXIoY29u
c3QgUVN0cmluZyAmc3RyKTsKKwlzdGF0aWMgdm9pZCBleHByX3ByaW50X2hlbHAodm9pZCAqZGF0
YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpOworCVFNZW51ICpjcmVhdGVT
dGFuZGFyZENvbnRleHRNZW51KGNvbnN0IFFQb2ludCAmIHBvcyk7CisJdm9pZCBjb250ZXh0TWVu
dUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKTsKKworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlz
dHJ1Y3QgbWVudSAqX21lbnU7CisJYm9vbCBfc2hvd0RlYnVnOworfTsKKworY2xhc3MgQ29uZmln
U2VhcmNoV2luZG93IDogcHVibGljIFFEaWFsb2cgeworCVFfT0JKRUNUCisJdHlwZWRlZiBjbGFz
cyBRRGlhbG9nIFBhcmVudDsKK3B1YmxpYzoKKwlDb25maWdTZWFyY2hXaW5kb3coQ29uZmlnTWFp
bldpbmRvdyogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCk7CisKK3B1YmxpYyBzbG90czoK
Kwl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsKKwl2b2lkIHNlYXJjaCh2b2lkKTsKKworcHJvdGVj
dGVkOgorCVFMaW5lRWRpdCogZWRpdEZpZWxkOworCVFQdXNoQnV0dG9uKiBzZWFyY2hCdXR0b247
CisJUVNwbGl0dGVyKiBzcGxpdDsKKwlDb25maWdWaWV3KiBsaXN0OworCUNvbmZpZ0luZm9WaWV3
KiBpbmZvOworCisJc3RydWN0IHN5bWJvbCAqKnJlc3VsdDsKK307CisKK2NsYXNzIENvbmZpZ01h
aW5XaW5kb3cgOiBwdWJsaWMgUU1haW5XaW5kb3cgeworCVFfT0JKRUNUCisKKwljaGFyICpjb25m
aWduYW1lOworCXN0YXRpYyBRQWN0aW9uICpzYXZlQWN0aW9uOworCXN0YXRpYyB2b2lkIGNvbmZf
Y2hhbmdlZCh2b2lkKTsKK3B1YmxpYzoKKwlDb25maWdNYWluV2luZG93KHZvaWQpOworcHVibGlj
IHNsb3RzOgorCXZvaWQgY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKTsKKwl2b2lkIHNldE1lbnVM
aW5rKHN0cnVjdCBtZW51ICopOworCXZvaWQgbGlzdEZvY3VzQ2hhbmdlZCh2b2lkKTsKKwl2b2lk
IGdvQmFjayh2b2lkKTsKKwl2b2lkIGxvYWRDb25maWcodm9pZCk7CisJYm9vbCBzYXZlQ29uZmln
KHZvaWQpOworCXZvaWQgc2F2ZUNvbmZpZ0FzKHZvaWQpOworCXZvaWQgc2VhcmNoQ29uZmlnKHZv
aWQpOworCXZvaWQgc2hvd1NpbmdsZVZpZXcodm9pZCk7CisJdm9pZCBzaG93U3BsaXRWaWV3KHZv
aWQpOworCXZvaWQgc2hvd0Z1bGxWaWV3KHZvaWQpOworCXZvaWQgc2hvd0ludHJvKHZvaWQpOwor
CXZvaWQgc2hvd0Fib3V0KHZvaWQpOworCXZvaWQgc2F2ZVNldHRpbmdzKHZvaWQpOworCitwcm90
ZWN0ZWQ6CisJdm9pZCBjbG9zZUV2ZW50KFFDbG9zZUV2ZW50ICplKTsKKworCUNvbmZpZ1NlYXJj
aFdpbmRvdyAqc2VhcmNoV2luZG93OworCUNvbmZpZ1ZpZXcgKm1lbnVWaWV3OworCUNvbmZpZ0xp
c3QgKm1lbnVMaXN0OworCUNvbmZpZ1ZpZXcgKmNvbmZpZ1ZpZXc7CisJQ29uZmlnTGlzdCAqY29u
ZmlnTGlzdDsKKwlDb25maWdJbmZvVmlldyAqaGVscFRleHQ7CisJUVRvb2xCYXIgKnRvb2xCYXI7
CisJUUFjdGlvbiAqYmFja0FjdGlvbjsKKwlRQWN0aW9uICpzaW5nbGVWaWV3QWN0aW9uOworCVFB
Y3Rpb24gKnNwbGl0Vmlld0FjdGlvbjsKKwlRQWN0aW9uICpmdWxsVmlld0FjdGlvbjsKKwlRU3Bs
aXR0ZXIgKnNwbGl0MTsKKwlRU3BsaXR0ZXIgKnNwbGl0MjsKK307CmRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L3N0cmVhbWxpbmVfY29uZmlnLnBsIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9zdHJlYW1saW5lX2NvbmZpZy5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAw
MC4uMDhkNzZkN2IKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3N0cmVh
bWxpbmVfY29uZmlnLnBsCkBAIC0wLDAgKzEsNjgyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisj
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjCisjIENvcHlyaWdodCAyMDA1LTIw
MDkgLSBTdGV2ZW4gUm9zdGVkdAorIworIyAgSXQncyBzaW1wbGUgZW5vdWdoIHRvIGZpZ3VyZSBv
dXQgaG93IHRoaXMgd29ya3MuCisjICBJZiBub3QsIHRoZW4geW91IGNhbiBhc2sgbWUgYXQgc3Ry
aXBjb25maWdAZ29vZG1pcy5vcmcKKyMKKyMgV2hhdCBpdCBkb2VzPworIworIyAgIElmIHlvdSBo
YXZlIGluc3RhbGxlZCBhIExpbnV4IGtlcm5lbCBmcm9tIGEgZGlzdHJpYnV0aW9uCisjICAgdGhh
dCB0dXJucyBvbiB3YXkgdG9vIG1hbnkgbW9kdWxlcyB0aGFuIHlvdSBuZWVkLCBhbmQKKyMgICB5
b3Ugb25seSB3YW50IHRoZSBtb2R1bGVzIHlvdSB1c2UsIHRoZW4gdGhpcyBwcm9ncmFtCisjICAg
aXMgcGVyZmVjdCBmb3IgeW91LgorIworIyAgIEl0IGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byB0
dXJuIG9mZiBhbGwgdGhlIG1vZHVsZXMgdGhhdCBhcmUKKyMgICBub3QgbG9hZGVkIG9uIHlvdXIg
c3lzdGVtLgorIworIyBIb3d0bzoKKyMKKyMgIDEuIEJvb3QgdXAgdGhlIGtlcm5lbCB0aGF0IHlv
dSB3YW50IHRvIHN0cmVhbSBsaW5lIHRoZSBjb25maWcgb24uCisjICAyLiBDaGFuZ2UgZGlyZWN0
b3J5IHRvIHRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc291cmNlIG9mIHRoZQorIyAgICAgICBr
ZXJuZWwgdGhhdCB5b3UganVzdCBib290ZWQuCisjICAzLiBDb3B5IHRoZSBjb25maWd1cmF0b24g
ZmlsZSB0byB0aGlzIGRpcmVjdG9yeSBhcyAuY29uZmlnCisjICA0LiBIYXZlIGFsbCB5b3VyIGRl
dmljZXMgdGhhdCB5b3UgbmVlZCBtb2R1bGVzIGZvciBjb25uZWN0ZWQgYW5kCisjICAgICAgb3Bl
cmF0aW9uYWwgKG1ha2Ugc3VyZSB0aGF0IHRoZWlyIGNvcnJlc3BvbmRpbmcgbW9kdWxlcyBhcmUg
bG9hZGVkKQorIyAgNS4gUnVuIHRoaXMgc2NyaXB0IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8g
c29tZSBvdGhlciBmaWxlCisjICAgICAgIGxpa2UgY29uZmlnX3N0cmlwLgorIyAgNi4gQmFjayB1
cCB5b3VyIG9sZCBjb25maWcgKGlmIHlvdSB3YW50IHRvbykuCisjICA3LiBjb3B5IHRoZSBjb25m
aWdfc3RyaXAgZmlsZSB0byAuY29uZmlnCisjICA4LiBSdW4gIm1ha2Ugb2xkY29uZmlnIgorIwor
IyAgTm93IHlvdXIga2VybmVsIGlzIHJlYWR5IHRvIGJlIGJ1aWx0IHdpdGggb25seSB0aGUgbW9k
dWxlcyB0aGF0CisjICBhcmUgbG9hZGVkLgorIworIyBIZXJlJ3Mgd2hhdCBJIGRpZCB3aXRoIG15
IERlYmlhbiBkaXN0cmlidXRpb24uCisjCisjICAgIGNkIC91c3Ivc3JjL2xpbnV4LTIuNi4xMAor
IyAgICBjcCAvYm9vdC9jb25maWctMi42LjEwLTEtNjg2LXNtcCAuY29uZmlnCisjICAgIH4vYmlu
L3N0cmVhbWxpbmVfY29uZmlnID4gY29uZmlnX3N0cmlwCisjICAgIG12IC5jb25maWcgY29uZmln
X3NhdgorIyAgICBtdiBjb25maWdfc3RyaXAgLmNvbmZpZworIyAgICBtYWtlIG9sZGNvbmZpZwor
IwordXNlIHdhcm5pbmdzOwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKKyMgc2V0
IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMT0NBTE1PRENPTkZJR19ERUJVRyB0byBnZXQKKyMg
ZGVidWcgb3V0cHV0LgorbXkgJGRlYnVncHJpbnQgPSAwOworJGRlYnVncHJpbnQgPSAxIGlmIChk
ZWZpbmVkKCRFTlZ7TE9DQUxNT0RDT05GSUdfREVCVUd9KSk7CisKK3N1YiBkcHJpbnQgeworICAg
IHJldHVybiBpZiAoISRkZWJ1Z3ByaW50KTsKKyAgICBwcmludCBTVERFUlIgQF87Cit9CisKK215
ICRjb25maWcgPSAiLmNvbmZpZyI7CisKK215ICR1bmFtZSA9IGB1bmFtZSAtcmA7CitjaG9tcCAk
dW5hbWU7CisKK215IEBzZWFyY2hjb25maWdzID0gKAorCXsKKwkgICAgImZpbGUiID0+ICIuY29u
ZmlnIiwKKwkgICAgImV4ZWMiID0+ICJjYXQiLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gIi9w
cm9jL2NvbmZpZy5neiIsCisJICAgICJleGVjIiA9PiAiemNhdCIsCisJfSwKKwl7CisJICAgICJm
aWxlIiA9PiAiL2Jvb3QvY29uZmlnLSR1bmFtZSIsCisJICAgICJleGVjIiA9PiAiY2F0IiwKKwl9
LAorCXsKKwkgICAgImZpbGUiID0+ICIvYm9vdC92bWxpbnV6LSR1bmFtZSIsCisJICAgICJleGVj
IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRz
L2V4dHJhY3QtaWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gInZtbGludXgiLAor
CSAgICAiZXhlYyIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJICAgICJ0ZXN0IiA9
PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+ICIv
bGliL21vZHVsZXMvJHVuYW1lL2tlcm5lbC9rZXJuZWwvY29uZmlncy5rbyIsCisJICAgICJleGVj
IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRz
L2V4dHJhY3QtaWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gImtlcm5lbC9jb25m
aWdzLmtvIiwKKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAg
ICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJm
aWxlIiA9PiAia2VybmVsL2NvbmZpZ3MubyIsCisJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRy
YWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWci
LAorCX0sCispOworCitzdWIgcmVhZF9jb25maWcgeworICAgIGZvcmVhY2ggbXkgJGNvbmYgKEBz
ZWFyY2hjb25maWdzKSB7CisJbXkgJGZpbGUgPSAkY29uZi0+eyJmaWxlIn07CisKKwluZXh0IGlm
ICggISAtZiAiJGZpbGUiKTsKKworCWlmIChkZWZpbmVkKCRjb25mLT57InRlc3QifSkpIHsKKwkg
ICAgYCRjb25mLT57InRlc3QifSAkY29uZi0+eyJmaWxlIn0gMj4vZGV2L251bGxgOworCSAgICBu
ZXh0IGlmICgkPyk7CisJfQorCisJbXkgJGV4ZWMgPSAkY29uZi0+eyJleGVjIn07CisKKwlwcmlu
dCBTVERFUlIgInVzaW5nIGNvbmZpZzogJyRmaWxlJ1xuIjsKKworCW9wZW4obXkgJGluZmlsZSwg
Jy18JywgIiRleGVjICRmaWxlIikgfHwgZGllICJGYWlsZWQgdG8gcnVuICRleGVjICRmaWxlIjsK
KwlteSBAeCA9IDwkaW5maWxlPjsKKwljbG9zZSAkaW5maWxlOworCXJldHVybiBAeDsKKyAgICB9
CisgICAgZGllICJObyBjb25maWcgZmlsZSBmb3VuZCI7Cit9CisKK215IEBjb25maWdfZmlsZSA9
IHJlYWRfY29uZmlnOworCisjIFBhcnNlIG9wdGlvbnMKK215ICRsb2NhbG1vZGNvbmZpZyA9IDA7
CitteSAkbG9jYWx5ZXNjb25maWcgPSAwOworCitHZXRPcHRpb25zKCJsb2NhbG1vZGNvbmZpZyIg
PT4gXCRsb2NhbG1vZGNvbmZpZywKKwkgICAibG9jYWx5ZXNjb25maWciID0+IFwkbG9jYWx5ZXNj
b25maWcpOworCisjIEdldCB0aGUgYnVpbGQgc291cmNlIGFuZCB0b3AgbGV2ZWwgS2NvbmZpZyBm
aWxlIChwYXNzZWQgaW4pCitteSAka3NvdXJjZSA9ICgkQVJHVlswXSA/ICRBUkdWWzBdIDogJy4n
KTsKK215ICRrY29uZmlnID0gJEFSR1ZbMV07CitteSAkbHNtb2RfZmlsZSA9ICRFTlZ7J0xTTU9E
J307CisKK215IEBtYWtlZmlsZXMgPSBgZmluZCAka3NvdXJjZSAtbmFtZSBNYWtlZmlsZSAtb3Ig
LW5hbWUgS2J1aWxkIDI+L2Rldi9udWxsYDsKK2Nob21wIEBtYWtlZmlsZXM7CisKK215ICVkZXBl
bmRzOworbXkgJXNlbGVjdHM7CitteSAlcHJvbXB0czsKK215ICVvYmplY3RzOworbXkgJHZhcjsK
K215ICRpZmxldmVsID0gMDsKK215IEBpZmRlcHM7CisKKyMgcHJldmVudCByZWN1cnNpb24KK215
ICVyZWFkX2tjb25maWdzOworCitzdWIgcmVhZF9rY29uZmlnIHsKKyAgICBteSAoJGtjb25maWcp
ID0gQF87CisKKyAgICBteSAkc3RhdGUgPSAiTk9ORSI7CisgICAgbXkgJGNvbmZpZzsKKworICAg
IG15ICRjb250ID0gMDsKKyAgICBteSAkbGluZTsKKworICAgIG15ICRzb3VyY2UgPSAiJGtzb3Vy
Y2UvJGtjb25maWciOworICAgIG15ICRsYXN0X3NvdXJjZSA9ICIiOworCisgICAgIyBDaGVjayBm
b3IgYW55IGVudmlyb25tZW50IHZhcmlhYmxlcyB1c2VkCisgICAgd2hpbGUgKCRzb3VyY2UgPX4g
L1wkXCgoXHcrKVwpLyAmJiAkbGFzdF9zb3VyY2UgbmUgJHNvdXJjZSkgeworCW15ICRlbnYgPSAk
MTsKKwkkbGFzdF9zb3VyY2UgPSAkc291cmNlOworCSRzb3VyY2UgPX4gcy9cJFwoJGVudlwpLyRF
TlZ7JGVudn0vOworICAgIH0KKworICAgIG9wZW4obXkgJGtpbmZpbGUsICc8JywgJHNvdXJjZSkg
fHwgZGllICJDYW4ndCBvcGVuICRrY29uZmlnIjsKKyAgICB3aGlsZSAoPCRraW5maWxlPikgewor
CWNob21wOworCisJIyBNYWtlIHN1cmUgdGhhdCBsaW5lcyBlbmRpbmcgd2l0aCBcIGNvbnRpbnVl
CisJaWYgKCRjb250KSB7CisJICAgICRfID0gJGxpbmUgLiAiICIgLiAkXzsKKwl9CisKKwlpZiAo
cy9cXCQvLykgeworCSAgICAkY29udCA9IDE7CisJICAgICRsaW5lID0gJF87CisJICAgIG5leHQ7
CisJfQorCisJJGNvbnQgPSAwOworCisJIyBjb2xsZWN0IGFueSBLY29uZmlnIHNvdXJjZXMKKwlp
ZiAoL15zb3VyY2VccysiPyhbXiJdKykvKSB7CisJICAgIG15ICRrY29uZmlnID0gJDE7CisJICAg
ICMgcHJldmVudCByZWFkaW5nIHR3aWNlLgorCSAgICBpZiAoIWRlZmluZWQoJHJlYWRfa2NvbmZp
Z3N7JGtjb25maWd9KSkgeworCQkkcmVhZF9rY29uZmlnc3ska2NvbmZpZ30gPSAxOworCQlyZWFk
X2tjb25maWcoJGtjb25maWcpOworCSAgICB9CisJICAgIG5leHQ7CisJfQorCisJIyBjb25maWdz
IGZvdW5kCisJaWYgKC9eXHMqKG1lbnUpP2NvbmZpZ1xzKyhcUyspXHMqJC8pIHsKKwkgICAgJHN0
YXRlID0gIk5FVyI7CisJICAgICRjb25maWcgPSAkMjsKKworCSAgICAjIEFkZCBkZXBlbmRzIGZv
ciAnaWYnIG5lc3RpbmcKKwkgICAgZm9yIChteSAkaSA9IDA7ICRpIDwgJGlmbGV2ZWw7ICRpKysp
IHsKKwkJaWYgKCRpKSB7CisJCSAgICAkZGVwZW5kc3skY29uZmlnfSAuPSAiICIgLiAkaWZkZXBz
WyRpXTsKKwkJfSBlbHNlIHsKKwkJICAgICRkZXBlbmRzeyRjb25maWd9ID0gJGlmZGVwc1skaV07
CisJCX0KKwkJJHN0YXRlID0gIkRFUCI7CisJICAgIH0KKworCSMgY29sbGVjdCB0aGUgZGVwZW5k
cyBmb3IgdGhlIGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBlcSAiTkVXIiAmJiAvXlxzKmRlcGVu
ZHNccytvblxzKyguKikkLykgeworCSAgICAkc3RhdGUgPSAiREVQIjsKKwkgICAgJGRlcGVuZHN7
JGNvbmZpZ30gPSAkMTsKKwl9IGVsc2lmICgkc3RhdGUgZXEgIkRFUCIgJiYgL15ccypkZXBlbmRz
XHMrb25ccysoLiopJC8pIHsKKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJDE7CisJ
fSBlbHNpZiAoJHN0YXRlIGVxICJERVAiICYmIC9eXHMqZGVmKF8oYm9vbHx0cmlzdGF0ZSl8YXVs
dClccysoXFMuKikkLykgeworCSAgICBteSAkZGVwID0gJDM7CisJICAgIGlmICgkZGVwICF+IC9e
XHMqKHl8bXxuKVxzKiQvKSB7CisJCSRkZXAgPX4gcy8uKlxzaWZccysvLzsKKwkJJGRlcGVuZHN7
JGNvbmZpZ30gLj0gIiAiIC4gJGRlcDsKKwkJZHByaW50ICJBZGRlZCBkZWZhdWx0IGRlcGVuZHMg
JGRlcCB0byAkY29uZmlnXG4iOworCSAgICB9CisKKwkjIEdldCB0aGUgY29uZmlncyB0aGF0IHNl
bGVjdCB0aGlzIGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYgL15ccypzZWxl
Y3RccysoXFMrKS8pIHsKKwkgICAgbXkgJGNvbmYgPSAkMTsKKwkgICAgaWYgKGRlZmluZWQoJHNl
bGVjdHN7JGNvbmZ9KSkgeworCQkkc2VsZWN0c3skY29uZn0gLj0gIiAiIC4gJGNvbmZpZzsKKwkg
ICAgfSBlbHNlIHsKKwkJJHNlbGVjdHN7JGNvbmZ9ID0gJGNvbmZpZzsKKwkgICAgfQorCisJIyBj
b25maWdzIHdpdGhvdXQgcHJvbXB0cyBtdXN0IGJlIHNlbGVjdGVkCisJfSBlbHNpZiAoJHN0YXRl
IG5lICJOT05FIiAmJiAvXlxzKih0cmlzdGF0ZVxzK1xTfHByb21wdFxiKS8pIHsKKwkgICAgIyBu
b3RlIGlmIHRoZSBjb25maWcgaGFzIGEgcHJvbXB0CisJICAgICRwcm9tcHRzeyRjb25maWd9ID0g
MTsKKworCSMgQ2hlY2sgZm9yIGlmIHN0YXRlbWVudHMKKwl9IGVsc2lmICgvXmlmXHMrKC4qXFMp
XHMqJC8pIHsKKwkgICAgbXkgJGRlcHMgPSAkMTsKKwkgICAgIyByZW1vdmUgYmVnaW5uaW5nIGFu
ZCBlbmRpbmcgbm9uIHRleHQKKwkgICAgJGRlcHMgPX4gcy9eW15hLXpBLVowLTlfXSovLzsKKwkg
ICAgJGRlcHMgPX4gcy9bXmEtekEtWjAtOV9dKiQvLzsKKworCSAgICBteSBAZGVwcyA9IHNwbGl0
IC9bXmEtekEtWjAtOV9dKy8sICRkZXBzOworCisJICAgICRpZmRlcHNbJGlmbGV2ZWwrK10gPSBq
b2luICc6JywgQGRlcHM7CisKKwl9IGVsc2lmICgvXmVuZGlmLykgeworCisJICAgICRpZmxldmVs
LS0gaWYgKCRpZmxldmVsKTsKKworCSMgc3RvcCBvbiAiaGVscCIgYW5kIGtleXdvcmRzIHRoYXQg
ZW5kIGEgbWVudSBlbnRyeQorCX0gZWxzaWYgKC9eXHMqKC0tLSk/aGVscCgtLS0pP1xzKiQvIHx8
IC9eKGNvbW1lbnR8Y2hvaWNlfG1lbnUpXGIvKSB7CisJICAgICRzdGF0ZSA9ICJOT05FIjsKKwl9
CisgICAgfQorICAgIGNsb3NlKCRraW5maWxlKTsKK30KKworaWYgKCRrY29uZmlnKSB7CisgICAg
cmVhZF9rY29uZmlnKCRrY29uZmlnKTsKK30KKworIyBNYWtlZmlsZXMgY2FuIHVzZSB2YXJpYWJs
ZXMgdG8gZGVmaW5lIHRoZWlyIGRlcGVuZGVuY2llcworc3ViIGNvbnZlcnRfdmFycyB7CisgICAg
bXkgKCRsaW5lLCAldmFycykgPSBAXzsKKworICAgIG15ICRwcm9jZXNzID0gIiI7CisKKyAgICB3
aGlsZSAoJGxpbmUgPX4gcy9eKC4qPykoXCRcKCguKj8pXCkpLy8pIHsKKwlteSAkc3RhcnQgPSAk
MTsKKwlteSAkdmFyaWFibGUgPSAkMjsKKwlteSAkdmFyID0gJDM7CisKKwlpZiAoZGVmaW5lZCgk
dmFyc3skdmFyfSkpIHsKKwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcnN7JHZhcn07CisJ
fSBlbHNlIHsKKwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcmlhYmxlOworCX0KKyAgICB9
CisKKyAgICAkcHJvY2VzcyAuPSAkbGluZTsKKworICAgIHJldHVybiAkcHJvY2VzczsKK30KKwor
IyBSZWFkIGFsbCBNYWtlZmlsZXMgdG8gbWFwIHRoZSBjb25maWdzIHRvIHRoZSBvYmplY3RzCitm
b3JlYWNoIG15ICRtYWtlZmlsZSAoQG1ha2VmaWxlcykgeworCisgICAgbXkgJGxpbmUgPSAiIjsK
KyAgICBteSAlbWFrZV92YXJzOworCisgICAgb3BlbihteSAkaW5maWxlLCAnPCcsICRtYWtlZmls
ZSkgfHwgZGllICJDYW4ndCBvcGVuICRtYWtlZmlsZSI7CisgICAgd2hpbGUgKDwkaW5maWxlPikg
eworCSMgaWYgdGhpcyBsaW5lIGVuZHMgd2l0aCBhIGJhY2tzbGFzaCwgY29udGludWUKKwljaG9t
cDsKKwlpZiAoL14oLiopXFwkLykgeworCSAgICAkbGluZSAuPSAkMTsKKwkgICAgbmV4dDsKKwl9
CisKKwkkbGluZSAuPSAkXzsKKwkkXyA9ICRsaW5lOworCSRsaW5lID0gIiI7CisKKwlteSAkb2Jq
czsKKworCSMgQ29udmVydCB2YXJpYWJsZXMgaW4gYSBsaW5lIChjb3VsZCBkZWZpbmUgY29uZmln
cykKKwkkXyA9IGNvbnZlcnRfdmFycygkXywgJW1ha2VfdmFycyk7CisKKwkjIGNvbGxlY3Qgb2Jq
ZWN0cyBhZnRlciBvYmotJChDT05GSUdfRk9PX0JBUikKKwlpZiAoL29iai1cJFwoKENPTkZJR19b
XlwpXSopXClccypbKzpdPz1ccyooLiopLykgeworCSAgICAkdmFyID0gJDE7CisJICAgICRvYmpz
ID0gJDI7CisKKwkjIGNoZWNrIGlmIHZhcmlhYmxlcyBhcmUgc2V0CisJfSBlbHNpZiAoL15ccyoo
XFMrKVxzKls6XT89XHMqKC4qXFMpLykgeworCSAgICAkbWFrZV92YXJzeyQxfSA9ICQyOworCX0K
KwlpZiAoZGVmaW5lZCgkb2JqcykpIHsKKwkgICAgZm9yZWFjaCBteSAkb2JqIChzcGxpdCAvXHMr
Lywkb2JqcykgeworCQkkb2JqID1+IHMvLS9fL2c7CisJCWlmICgkb2JqID1+IC8oLiopXC5vJC8p
IHsKKwkJICAgICMgT2JqZWN0cyBtYXkgYmUgZW5hYmxlZCBieSBtb3JlIHRoYW4gb25lIGNvbmZp
Zy4KKwkJICAgICMgU3RvcmUgY29uZmlncyBpbiBhbiBhcnJheS4KKwkJICAgIG15IEBhcnI7CisK
KwkJICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyQxfSkpIHsKKwkJCUBhcnIgPSBAeyRvYmplY3Rz
eyQxfX07CisJCSAgICB9CisKKwkJICAgICRhcnJbJCNhcnIrMV0gPSAkdmFyOworCisJCSAgICAj
IFRoZSBvYmplY3RzIGhhdmUgYSBoYXNoIG1hcHBpbmcgdG8gYSByZWZlcmVuY2UKKwkJICAgICMg
b2YgYW4gYXJyYXkgb2YgY29uZmlncy4KKwkJICAgICRvYmplY3RzeyQxfSA9IFxAYXJyOworCQl9
CisJICAgIH0KKwl9CisgICAgfQorICAgIGNsb3NlKCRpbmZpbGUpOworfQorCitteSAlbW9kdWxl
czsKK215ICRsaW5maWxlOworCitpZiAoZGVmaW5lZCgkbHNtb2RfZmlsZSkpIHsKKyAgICBpZiAo
ICEgLWYgJGxzbW9kX2ZpbGUpIHsKKwlpZiAoIC1mICRFTlZ7J29ianRyZWUnfS4iLyIuJGxzbW9k
X2ZpbGUpIHsKKwkgICAgJGxzbW9kX2ZpbGUgPSAkRU5WeydvYmp0cmVlJ30uIi8iLiRsc21vZF9m
aWxlOworCX0gZWxzZSB7CisJCWRpZSAiJGxzbW9kX2ZpbGUgbm90IGZvdW5kIjsKKwl9CisgICAg
fQorCisgICAgbXkgJG90eXBlID0gKCAteCAkbHNtb2RfZmlsZSkgPyAnLXwnIDogJzwnOworICAg
IG9wZW4oJGxpbmZpbGUsICRvdHlwZSwgJGxzbW9kX2ZpbGUpOworCit9IGVsc2UgeworCisgICAg
IyBzZWUgd2hhdCBtb2R1bGVzIGFyZSBsb2FkZWQgb24gdGhpcyBzeXN0ZW0KKyAgICBteSAkbHNt
b2Q7CisKKyAgICBmb3JlYWNoIG15ICRkaXIgKCAoIi9zYmluIiwgIi9iaW4iLCAiL3Vzci9zYmlu
IiwgIi91c3IvYmluIikgKSB7CisJaWYgKCAteCAiJGRpci9sc21vZCIgKSB7CisJICAgICRsc21v
ZCA9ICIkZGlyL2xzbW9kIjsKKwkgICAgbGFzdDsKKwl9Cit9CisgICAgaWYgKCFkZWZpbmVkKCRs
c21vZCkpIHsKKwkjIHRyeSBqdXN0IHRoZSBwYXRoCisJJGxzbW9kID0gImxzbW9kIjsKKyAgICB9
CisKKyAgICBvcGVuKCRsaW5maWxlLCAnLXwnLCAkbHNtb2QpIHx8IGRpZSAiQ2FuIG5vdCBjYWxs
IGxzbW9kIHdpdGggJGxzbW9kIjsKK30KKword2hpbGUgKDwkbGluZmlsZT4pIHsKKwluZXh0IGlm
ICgvXk1vZHVsZS8pOyAgIyBTa2lwIHRoZSBmaXJzdCBsaW5lLgorCWlmICgvXihcUyspLykgewor
CQkkbW9kdWxlc3skMX0gPSAxOworCX0KK30KK2Nsb3NlICgkbGluZmlsZSk7CisKKyMgYWRkIHRv
IHRoZSBjb25maWdzIGhhc2ggYWxsIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkIHRvIGVuYWJsZQor
IyBhIGxvYWRlZCBtb2R1bGUuIFRoaXMgaXMgYSBkaXJlY3Qgb2JqLSR7Q09ORklHX0ZPT30gKz0g
YmFyLm8KKyMgd2hlcmUgd2Uga25vdyB3ZSBuZWVkIGJhci5vIHNvIHdlIGFkZCBGT08gdG8gdGhl
IGxpc3QuCitteSAlY29uZmlnczsKK2ZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cyglbW9kdWxlcykp
IHsKKyAgICBpZiAoZGVmaW5lZCgkb2JqZWN0c3skbW9kdWxlfSkpIHsKKwlteSBAYXJyID0gQHsk
b2JqZWN0c3skbW9kdWxlfX07CisJZm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICAkY29u
Zmlnc3skY29uZn0gPSAkbW9kdWxlOworCSAgICBkcHJpbnQgIiRjb25mIGFkZGVkIGJ5IGRpcmVj
dCAoJG1vZHVsZSlcbiI7CisJICAgIGlmICgkZGVidWdwcmludCkgeworCQlteSAkYz0kY29uZjsK
KwkJJGMgPX4gcy9eQ09ORklHXy8vOworCQlpZiAoZGVmaW5lZCgkZGVwZW5kc3skY30pKSB7CisJ
CSAgICBkcHJpbnQgIiBkZXBzID0gJGRlcGVuZHN7JGN9XG4iOworCQl9IGVsc2UgeworCQkgICAg
ZHByaW50ICIgbm8gZGVwc1xuIjsKKwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJIyBN
b3N0IGxpa2VseSwgc29tZW9uZSBoYXMgYSBjdXN0b20gKGJpbmFyeT8pIG1vZHVsZSBsb2FkZWQu
CisJcHJpbnQgU1RERVJSICIkbW9kdWxlIGNvbmZpZyBub3QgZm91bmQhIVxuIjsKKyAgICB9Cit9
CisKKyMgUmVhZCB0aGUgY3VycmVudCBjb25maWcsIGFuZCBzZWUgd2hhdCBpcyBlbmFibGVkLiBX
ZSB3YW50IHRvCisjIGlnbm9yZSBjb25maWdzIHRoYXQgd2Ugd291bGQgbm90IGVuYWJsZSBhbnl3
YXkuCisKK215ICVvcmlnX2NvbmZpZ3M7CitteSAkdmFsaWQgPSAiQS1aYS16XzAtOSI7CisKK2Zv
cmVhY2ggbXkgJGxpbmUgKEBjb25maWdfZmlsZSkgeworICAgICRfID0gJGxpbmU7CisKKyAgICBp
ZiAoLyhDT05GSUdfWyR2YWxpZF0qKT0obXx5KS8pIHsKKwkkb3JpZ19jb25maWdzeyQxfSA9ICQy
OworICAgIH0KK30KKworbXkgJHJlcGVhdCA9IDE7CisKK215ICRkZXBjb25maWc7CisKKyMKKyMg
Tm90ZSwgd2UgZG8gbm90IGNhcmUgYWJvdXQgb3BlcmFuZHMgKGxpa2U6ICYmLCB8fCwgISkgd2Ug
d2FudCB0byBhZGQgYW55CisjIGNvbmZpZyB0aGF0IGlzIGluIHRoZSBkZXBlbmQgbGlzdCBvZiBh
bm90aGVyIGNvbmZpZy4gVGhpcyBzY3JpcHQgZG9lcworIyBub3QgZW5hYmxlIGNvbmZpZ3MgdGhh
dCBhcmUgbm90IGFscmVhZHkgZW5hYmxlZC4gSWYgd2UgY29tZSBhY3Jvc3MgYQorIyBjb25maWcg
QSB0aGF0IGRlcGVuZHMgb24gIUIsIHdlIGNhbiBzdGlsbCBhZGQgQiB0byB0aGUgbGlzdCBvZiBk
ZXBlbmRzCisjIHRvIGtlZXAgb24uIElmIEEgd2FzIG9uIGluIHRoZSBvcmlnaW5hbCBjb25maWcs
IEIgd291bGQgbm90IGhhdmUgYmVlbgorIyBhbmQgQiB3b3VsZCBub3QgYmUgdHVybmVkIG9uIGJ5
IHRoaXMgc2NyaXB0LgorIworc3ViIHBhcnNlX2NvbmZpZ19kZXBlbmRzCit7CisgICAgbXkgKCRw
KSA9IEBfOworCisgICAgd2hpbGUgKCRwID1+IC9bJHZhbGlkXS8pIHsKKworCWlmICgkcCA9fiAv
XlteJHZhbGlkXSooWyR2YWxpZF0rKS8pIHsKKwkgICAgbXkgJGNvbmYgPSAiQ09ORklHXyIgLiAk
MTsKKworCSAgICAkcCA9fiBzL15bXiR2YWxpZF0qWyR2YWxpZF0rLy87CisKKwkgICAgIyBXZSBv
bmx5IG5lZWQgdG8gcHJvY2VzcyBpZiB0aGUgZGVwZW5kIGNvbmZpZyBpcyBhIG1vZHVsZQorCSAg
ICBpZiAoIWRlZmluZWQoJG9yaWdfY29uZmlnc3skY29uZn0pIHx8ICRvcmlnX2NvbmZpZ3N7JGNv
bmZ9IGVxICJ5IikgeworCQluZXh0OworCSAgICB9CisKKwkgICAgaWYgKCFkZWZpbmVkKCRjb25m
aWdzeyRjb25mfSkpIHsKKwkJIyBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGhh
cyBpdHMKKwkJIyBkZXBlbmRlbmNpZXMgbWV0LgorCQkkcmVwZWF0ID0gMTsgIyBkbyBhZ2Fpbgor
CQlkcHJpbnQgIiRjb25mIHNlbGVjdGVkIGJ5IGRlcGVuZCAkZGVwY29uZmlnXG4iOworCQkkY29u
Zmlnc3skY29uZn0gPSAxOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZGllICJ0aGlzIHNob3Vs
ZCBuZXZlciBoYXBwZW4iOworCX0KKyAgICB9Cit9CisKKyMgU2VsZWN0IGlzIHRyZWF0ZWQgYSBi
aXQgZGlmZmVyZW50bHkgdGhhbiBkZXBlbmRzLiBXZSBjYWxsIHRoaXMKKyMgd2hlbiBhIGNvbmZp
ZyBoYXMgbm8gcHJvbXB0IGFuZCByZXF1aXJlcyBhbm90aGVyIGNvbmZpZyB0byBiZQorIyBzZWxl
Y3RlZC4gV2UgdXNlIHRvIGp1c3Qgc2VsZWN0IGFsbCBjb25maWdzIHRoYXQgc2VsZWN0ZWQgdGhp
cworIyBjb25maWcsIGJ1dCBmb3VuZCB0aGF0IHRoYXQgY2FuIGJhbGxvb24gaW50byBlbmFibGlu
ZyBodW5kcmVkcworIyBvZiBjb25maWdzIHRoYXQgd2UgZG8gbm90IGNhcmUgYWJvdXQuCisjCisj
IFRoZSBpZGVhIGlzIHdlIGxvb2sgYXQgYWxsIHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IGl0LiBJ
ZiBvbmUKKyMgaXMgYWxyZWFkeSBpbiBvdXIgbGlzdCBvZiBjb25maWdzIHRvIGVuYWJsZSwgdGhl
biB0aGVyZSdzIG5vdGhpbmcKKyMgZWxzZSB0byBkby4gSWYgdGhlcmUgaXNuJ3QsIHdlIHBpY2sg
dGhlIGZpcnN0IGNvbmZpZyB0aGF0IHdhcworIyBlbmFibGVkIGluIHRoZSBvcmlnbmFsIGNvbmZp
ZyBhbmQgdXNlIHRoYXQuCitzdWIgcGFyc2VfY29uZmlnX3NlbGVjdHMKK3sKKyAgICBteSAoJGNv
bmZpZywgJHApID0gQF87CisKKyAgICBteSAkbmV4dF9jb25maWc7CisKKyAgICB3aGlsZSAoJHAg
PX4gL1skdmFsaWRdLykgeworCisJaWYgKCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykg
eworCSAgICBteSAkY29uZiA9ICJDT05GSUdfIiAuICQxOworCisJICAgICRwID1+IHMvXlteJHZh
bGlkXSpbJHZhbGlkXSsvLzsKKworCSAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGV4
aXN0cyBpbiB0aGUgY3VycmVudCAuY29uZmlnIGZpbGUKKwkgICAgaWYgKCFkZWZpbmVkKCRvcmln
X2NvbmZpZ3N7JGNvbmZ9KSkgeworCQlkcHJpbnQgIiRjb25mIG5vdCBzZXQgZm9yICRjb25maWcg
c2VsZWN0XG4iOworCQluZXh0OworCSAgICB9CisKKwkgICAgIyBDaGVjayBpZiBzb21ldGhpbmcg
b3RoZXIgdGhhbiBhIG1vZHVsZSBzZWxlY3RzIHRoaXMgY29uZmlnCisJICAgIGlmIChkZWZpbmVk
KCRvcmlnX2NvbmZpZ3N7JGNvbmZ9KSAmJiAkb3JpZ19jb25maWdzeyRjb25mfSBuZSAibSIpIHsK
KwkJZHByaW50ICIkY29uZiAobm9uIG1vZHVsZSkgc2VsZWN0cyBjb25maWcsIHdlIGFyZSBnb29k
XG4iOworCQkjIHdlIGFyZSBnb29kIHdpdGggdGhpcworCQlyZXR1cm47CisJICAgIH0KKwkgICAg
aWYgKGRlZmluZWQoJGNvbmZpZ3N7JGNvbmZ9KSkgeworCQlkcHJpbnQgIiRjb25mIHNlbGVjdHMg
JGNvbmZpZyBzbyB3ZSBhcmUgZ29vZFxuIjsKKwkJIyBBIHNldCBjb25maWcgc2VsZWN0cyB0aGlz
IGNvbmZpZywgd2UgYXJlIGdvb2QKKwkJcmV0dXJuOworCSAgICB9CisJICAgICMgU2V0IHRoaXMg
Y29uZmlnIHRvIGJlIHNlbGVjdGVkCisJICAgIGlmICghZGVmaW5lZCgkbmV4dF9jb25maWcpKSB7
CisJCSRuZXh0X2NvbmZpZyA9ICRjb25mOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZGllICJ0
aGlzIHNob3VsZCBuZXZlciBoYXBwZW4iOworCX0KKyAgICB9CisKKyAgICAjIElmIG5vIHBvc3Np
YmxlIGNvbmZpZyBzZWxlY3RlZCB0aGlzLCB0aGVuIHNvbWV0aGluZyBoYXBwZW5lZC4KKyAgICBp
ZiAoIWRlZmluZWQoJG5leHRfY29uZmlnKSkgeworCXByaW50IFNUREVSUiAiV0FSTklORzogJGNv
bmZpZyBpcyByZXF1aXJlZCwgYnV0IG5vdGhpbmcgaW4gdGhlXG4iOworCXByaW50IFNUREVSUiAi
ICBjdXJyZW50IGNvbmZpZyBzZWxlY3RzIGl0LlxuIjsKKwlyZXR1cm47CisgICAgfQorCisgICAg
IyBJZiB3ZSBhcmUgaGVyZSwgdGhlbiB3ZSBmb3VuZCBubyBjb25maWcgdGhhdCBpcyBzZXQgYW5k
CisgICAgIyBzZWxlY3RzIHRoaXMgY29uZmlnLiBSZXBlYXQuCisgICAgJHJlcGVhdCA9IDE7Cisg
ICAgIyBNYWtlIHRoaXMgY29uZmlnIG5lZWQgdG8gYmUgc2VsZWN0ZWQKKyAgICAkY29uZmlnc3sk
bmV4dF9jb25maWd9ID0gMTsKKyAgICBkcHJpbnQgIiRuZXh0X2NvbmZpZyBzZWxlY3RlZCBieSBz
ZWxlY3QgJGNvbmZpZ1xuIjsKK30KKworbXkgJXByb2Nlc3Nfc2VsZWN0czsKKworIyBsb29wIHRo
cm91Z2ggYWxsIGNvbmZpZ3MsIHNlbGVjdCB0aGVpciBkZXBlbmRlbmNpZXMuCitzdWIgbG9vcF9k
ZXBlbmQgeworICAgICRyZXBlYXQgPSAxOworCisgICAgd2hpbGUgKCRyZXBlYXQpIHsKKwkkcmVw
ZWF0ID0gMDsKKworICAgICAgZm9ybG9vcDoKKwlmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJWNv
bmZpZ3MpIHsKKworCSAgICAjIElmIHRoaXMgY29uZmlnIGlzIG5vdCBhIG1vZHVsZSwgd2UgZG8g
bm90IG5lZWQgdG8gcHJvY2VzcyBpdAorCSAgICBpZiAoZGVmaW5lZCgkb3JpZ19jb25maWdzeyRj
b25maWd9KSAmJiAkb3JpZ19jb25maWdzeyRjb25maWd9IG5lICJtIikgeworCQluZXh0IGZvcmxv
b3A7CisJICAgIH0KKworCSAgICAkY29uZmlnID1+IHMvXkNPTkZJR18vLzsKKwkgICAgJGRlcGNv
bmZpZyA9ICRjb25maWc7CisKKwkgICAgaWYgKGRlZmluZWQoJGRlcGVuZHN7JGNvbmZpZ30pKSB7
CisJCSMgVGhpcyBjb25maWcgaGFzIGRlcGVuZGVuY2llcy4gTWFrZSBzdXJlIHRoZXkgYXJlIGFs
c28gaW5jbHVkZWQKKwkJcGFyc2VfY29uZmlnX2RlcGVuZHMgJGRlcGVuZHN7JGNvbmZpZ307CisJ
ICAgIH0KKworCSAgICAjIElmIHRoZSBjb25maWcgaGFzIG5vIHByb21wdCwgdGhlbiB3ZSBuZWVk
IHRvIGNoZWNrIGlmIGEgY29uZmlnCisJICAgICMgdGhhdCBpcyBlbmFibGVkIHNlbGVjdGVkIGl0
LiBPciBpZiB3ZSBuZWVkIHRvIGVuYWJsZSBvbmUuCisJICAgIGlmICghZGVmaW5lZCgkcHJvbXB0
c3skY29uZmlnfSkgJiYgZGVmaW5lZCgkc2VsZWN0c3skY29uZmlnfSkpIHsKKwkJJHByb2Nlc3Nf
c2VsZWN0c3skY29uZmlnfSA9IDE7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgbG9vcF9z
ZWxlY3QgeworCisgICAgZm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVwcm9jZXNzX3NlbGVjdHMp
IHsKKwkkY29uZmlnID1+IHMvXkNPTkZJR18vLzsKKworCWRwcmludCAiUHJvY2VzcyBzZWxlY3Qg
JGNvbmZpZ1xuIjsKKworCSMgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIG11c3QgYmUgc2VsZWN0
ZWQuCisJcGFyc2VfY29uZmlnX3NlbGVjdHMgJGNvbmZpZywgJHNlbGVjdHN7JGNvbmZpZ307Cisg
ICAgfQorfQorCit3aGlsZSAoJHJlcGVhdCkgeworICAgICMgR2V0IHRoZSBmaXJzdCBzZXQgb2Yg
Y29uZmlncyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLgorICAgIGxvb3BfZGVwZW5kOworCisgICAg
JHJlcGVhdCA9IDA7CisKKyAgICAjIE5vdyB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSBoYXZlIHRvIGNo
ZWNrIHNlbGVjdHM7CisgICAgbG9vcF9zZWxlY3Q7Cit9CisKK215ICVzZXRjb25maWdzOworCisj
IEZpbmFsbHksIHJlYWQgdGhlIC5jb25maWcgZmlsZSBhbmQgdHVybiBvZmYgYW55IG1vZHVsZSBl
bmFibGVkIHRoYXQKKyMgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb24gdG8ga2VlcCBlbmFibGVk
LgorZm9yZWFjaCBteSAkbGluZSAoQGNvbmZpZ19maWxlKSB7CisgICAgJF8gPSAkbGluZTsKKwor
ICAgIGlmICgvQ09ORklHX0lLQ09ORklHLykgeworCWlmICgvIyBDT05GSUdfSUtDT05GSUcgaXMg
bm90IHNldC8pIHsKKwkgICAgIyBlbmFibGUgSUtDT05GSUcgYXQgbGVhc3QgYXMgYSBtb2R1bGUK
KwkgICAgcHJpbnQgIkNPTkZJR19JS0NPTkZJRz1tXG4iOworCSAgICAjIGRvbid0IGFzayBhYm91
dCBQUk9DCisJICAgIHByaW50ICIjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXRcbiI7
CisJfSBlbHNlIHsKKwkgICAgcHJpbnQ7CisJfQorCW5leHQ7CisgICAgfQorCisgICAgaWYgKC9D
T05GSUdfTU9EVUxFX1NJR19LRVk9IiguKykiLykgeworICAgICAgICBteSAkb3JpZ19jZXJ0ID0g
JDE7CisgICAgICAgIG15ICRkZWZhdWx0X2NlcnQgPSAiY2VydHMvc2lnbmluZ19rZXkucGVtIjsK
KworICAgICAgICAjIENoZWNrIHRoYXQgdGhlIGxvZ2ljIGluIHRoaXMgc2NyaXB0IHN0aWxsIG1h
dGNoZXMgdGhlIG9uZSBpbiBLY29uZmlnCisgICAgICAgIGlmICghZGVmaW5lZCgkZGVwZW5kc3si
TU9EVUxFX1NJR19LRVkifSkgfHwKKyAgICAgICAgICAgICRkZXBlbmRzeyJNT0RVTEVfU0lHX0tF
WSJ9ICF+IC8iXFEkZGVmYXVsdF9jZXJ0XEUiLykgeworICAgICAgICAgICAgcHJpbnQgU1RERVJS
ICJXQVJOSU5HOiBNT0RVTEVfU0lHX0tFWSBhc3NlcnRpb24gZmFpbHVyZSwgIiwKKyAgICAgICAg
ICAgICAgICAidXBkYXRlIG5lZWRlZCB0byAiLCBfX0ZJTEVfXywgIiBsaW5lICIsIF9fTElORV9f
LCAiXG4iOworICAgICAgICAgICAgcHJpbnQ7CisgICAgICAgIH0gZWxzaWYgKCRvcmlnX2NlcnQg
bmUgJGRlZmF1bHRfY2VydCAmJiAhIC1mICRvcmlnX2NlcnQpIHsKKyAgICAgICAgICAgIHByaW50
IFNUREVSUiAiTW9kdWxlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZW5hYmxlZCBidXQgIiwKKyAg
ICAgICAgICAgICAgICAibW9kdWxlIHNpZ25pbmcga2V5IFwiJG9yaWdfY2VydFwiIG5vdCBmb3Vu
ZC4gUmVzZXR0aW5nICIsCisgICAgICAgICAgICAgICAgInNpZ25pbmcga2V5IHRvIGRlZmF1bHQg
dmFsdWUuXG4iOworICAgICAgICAgICAgcHJpbnQgIkNPTkZJR19NT0RVTEVfU0lHX0tFWT1cIiRk
ZWZhdWx0X2NlcnRcIlxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50Owor
ICAgICAgICB9CisgICAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKC9DT05GSUdfU1lTVEVN
X1RSVVNURURfS0VZUz0iKC4rKSIvKSB7CisgICAgICAgIG15ICRvcmlnX2tleXMgPSAkMTsKKwor
ICAgICAgICBpZiAoISAtZiAkb3JpZ19rZXlzKSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIg
IlN5c3RlbSBrZXlyaW5nIGVuYWJsZWQgYnV0IGtleXMgXCIkb3JpZ19rZXlzXCIgIiwKKyAgICAg
ICAgICAgICAgICAibm90IGZvdW5kLiBSZXNldHRpbmcga2V5cyB0byBkZWZhdWx0IHZhbHVlLlxu
IjsKKyAgICAgICAgICAgIHByaW50ICJDT05GSUdfU1lTVEVNX1RSVVNURURfS0VZUz1cIlwiXG4i
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoL14oQ09ORklHLiopPShtfHkpLykgeworCWlmIChk
ZWZpbmVkKCRjb25maWdzeyQxfSkpIHsKKwkgICAgaWYgKCRsb2NhbHllc2NvbmZpZykgeworCSAg
ICAgICAgJHNldGNvbmZpZ3N7JDF9ID0gJ3knOworCQlwcmludCAiJDE9eVxuIjsKKwkJbmV4dDsK
KwkgICAgfSBlbHNlIHsKKwkgICAgICAgICRzZXRjb25maWdzeyQxfSA9ICQyOworCSAgICB9CisJ
fSBlbHNpZiAoJDIgZXEgIm0iKSB7CisJICAgIHByaW50ICIjICQxIGlzIG5vdCBzZXRcbiI7CisJ
ICAgIG5leHQ7CisJfQorICAgIH0KKyAgICBwcmludDsKK30KKworIyBJbnRlZ3JpdHkgY2hlY2ss
IG1ha2Ugc3VyZSBhbGwgbW9kdWxlcyB0aGF0IHdlIHdhbnQgZW5hYmxlZCBkbworIyBpbmRlZWQg
aGF2ZSB0aGVpciBjb25maWdzIHNldC4KK2xvb3A6Citmb3JlYWNoIG15ICRtb2R1bGUgKGtleXMo
JW1vZHVsZXMpKSB7CisgICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JG1vZHVsZX0pKSB7CisJbXkg
QGFyciA9IEB7JG9iamVjdHN7JG1vZHVsZX19OworCWZvcmVhY2ggbXkgJGNvbmYgKEBhcnIpIHsK
KwkgICAgaWYgKGRlZmluZWQoJHNldGNvbmZpZ3N7JGNvbmZ9KSkgeworCQluZXh0IGxvb3A7CisJ
ICAgIH0KKwl9CisJcHJpbnQgU1RERVJSICJtb2R1bGUgJG1vZHVsZSBkaWQgbm90IGhhdmUgY29u
ZmlncyI7CisJZm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICBwcmludCBTVERFUlIgIiAi
ICwgJGNvbmY7CisJfQorCXByaW50IFNUREVSUiAiXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvc3ltYm9sLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L3N5bWJv
bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xZjkyNjZkYQotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvc3ltYm9sLmMKQEAgLTAsMCArMSwxMzMx
IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworCisj
aW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxyZWdleC5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisKKyNpbmNs
dWRlICJsa2MuaCIKKworc3RydWN0IHN5bWJvbCBzeW1ib2xfeWVzID0geworCS5uYW1lID0gInki
LAorCS5jdXJyID0geyAieSIsIHllcyB9LAorCS5mbGFncyA9IFNZTUJPTF9DT05TVHxTWU1CT0xf
VkFMSUQsCit9LCBzeW1ib2xfbW9kID0geworCS5uYW1lID0gIm0iLAorCS5jdXJyID0geyAibSIs
IG1vZCB9LAorCS5mbGFncyA9IFNZTUJPTF9DT05TVHxTWU1CT0xfVkFMSUQsCit9LCBzeW1ib2xf
bm8gPSB7CisJLm5hbWUgPSAibiIsCisJLmN1cnIgPSB7ICJuIiwgbm8gfSwKKwkuZmxhZ3MgPSBT
WU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAorfSwgc3ltYm9sX2VtcHR5ID0geworCS5uYW1lID0g
IiIsCisJLmN1cnIgPSB7ICIiLCBubyB9LAorCS5mbGFncyA9IFNZTUJPTF9WQUxJRCwKK307CisK
K3N0cnVjdCBzeW1ib2wgKnN5bV9kZWZjb25maWdfbGlzdDsKK3N0cnVjdCBzeW1ib2wgKm1vZHVs
ZXNfc3ltOwordHJpc3RhdGUgbW9kdWxlc192YWw7CisKK2VudW0gc3ltYm9sX3R5cGUgc3ltX2dl
dF90eXBlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBz
eW0tPnR5cGU7CisKKwlpZiAodHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCWlmIChzeW1faXNfY2hv
aWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykKKwkJCXR5cGUgPSBTX0JPT0xF
QU47CisJCWVsc2UgaWYgKG1vZHVsZXNfdmFsID09IG5vKQorCQkJdHlwZSA9IFNfQk9PTEVBTjsK
Kwl9CisJcmV0dXJuIHR5cGU7Cit9CisKK2NvbnN0IGNoYXIgKnN5bV90eXBlX25hbWUoZW51bSBz
eW1ib2xfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgor
CQlyZXR1cm4gImJvb2wiOworCWNhc2UgU19UUklTVEFURToKKwkJcmV0dXJuICJ0cmlzdGF0ZSI7
CisJY2FzZSBTX0lOVDoKKwkJcmV0dXJuICJpbnRlZ2VyIjsKKwljYXNlIFNfSEVYOgorCQlyZXR1
cm4gImhleCI7CisJY2FzZSBTX1NUUklORzoKKwkJcmV0dXJuICJzdHJpbmciOworCWNhc2UgU19V
TktOT1dOOgorCQlyZXR1cm4gInVua25vd24iOworCX0KKwlyZXR1cm4gIj8/PyI7Cit9CisKK3N0
cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9jaG9pY2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7
CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJZm9yX2FsbF9jaG9pY2VzKHN5bSwgcHJvcCkK
KwkJcmV0dXJuIHByb3A7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvcGVy
dHkgKnN5bV9nZXRfZGVmYXVsdF9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qg
cHJvcGVydHkgKnByb3A7CisKKwlmb3JfYWxsX2RlZmF1bHRzKHN5bSwgcHJvcCkgeworCQlwcm9w
LT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQlp
ZiAocHJvcC0+dmlzaWJsZS50cmkgIT0gbm8pCisJCQlyZXR1cm4gcHJvcDsKKwl9CisJcmV0dXJu
IE5VTEw7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVjdCBz
eW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlmb3JfYWxsX3Byb3Bl
cnRpZXMoc3ltLCBwcm9wLCBQX1JBTkdFKSB7CisJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9j
YWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7CisJCWlmIChwcm9wLT52aXNpYmxlLnRyaSAh
PSBubykKKwkJCXJldHVybiBwcm9wOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGxv
bmcgbG9uZyBzeW1fZ2V0X3JhbmdlX3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBiYXNlKQor
eworCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNf
SU5UOgorCQliYXNlID0gMTA7CisJCWJyZWFrOworCWNhc2UgU19IRVg6CisJCWJhc2UgPSAxNjsK
KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBzdHJ0b2xsKHN5bS0+
Y3Vyci52YWwsIE5VTEwsIGJhc2UpOworfQorCitzdGF0aWMgdm9pZCBzeW1fdmFsaWRhdGVfcmFu
Z2Uoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlpbnQg
YmFzZTsKKwlsb25nIGxvbmcgdmFsLCB2YWwyOworCWNoYXIgc3RyWzY0XTsKKworCXN3aXRjaCAo
c3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwkJYmFzZSA9IDEwOworCQlicmVhazsKKwljYXNl
IFNfSEVYOgorCQliYXNlID0gMTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9
CisJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOworCWlmICghcHJvcCkKKwkJcmV0dXJu
OworCXZhbCA9IHN0cnRvbGwoc3ltLT5jdXJyLnZhbCwgTlVMTCwgYmFzZSk7CisJdmFsMiA9IHN5
bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCBiYXNlKTsKKwlpZiAodmFsID49
IHZhbDIpIHsKKwkJdmFsMiA9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJpZ2h0LnN5
bSwgYmFzZSk7CisJCWlmICh2YWwgPD0gdmFsMikKKwkJCXJldHVybjsKKwl9CisJaWYgKHN5bS0+
dHlwZSA9PSBTX0lOVCkKKwkJc3ByaW50ZihzdHIsICIlbGxkIiwgdmFsMik7CisJZWxzZQorCQlz
cHJpbnRmKHN0ciwgIjB4JWxseCIsIHZhbDIpOworCXN5bS0+Y3Vyci52YWwgPSB4c3RyZHVwKHN0
cik7Cit9CisKK3N0YXRpYyB2b2lkIHN5bV9zZXRfY2hhbmdlZChzdHJ1Y3Qgc3ltYm9sICpzeW0p
Cit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJc3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hB
TkdFRDsKKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7
CisJCWlmIChwcm9wLT5tZW51KQorCQkJcHJvcC0+bWVudS0+ZmxhZ3MgfD0gTUVOVV9DSEFOR0VE
OworCX0KK30KKworc3RhdGljIHZvaWQgc3ltX3NldF9hbGxfY2hhbmdlZCh2b2lkKQoreworCXN0
cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgaTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pCisJ
CXN5bV9zZXRfY2hhbmdlZChzeW0pOworfQorCitzdGF0aWMgdm9pZCBzeW1fY2FsY192aXNpYmls
aXR5KHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3Ry
dWN0IHN5bWJvbCAqY2hvaWNlX3N5bSA9IE5VTEw7CisJdHJpc3RhdGUgdHJpOworCisJLyogYW55
IHByb21wdCB2aXNpYmxlPyAqLworCXRyaSA9IG5vOworCisJaWYgKHN5bV9pc19jaG9pY2VfdmFs
dWUoc3ltKSkKKwkJY2hvaWNlX3N5bSA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9w
cm9wKHN5bSkpOworCisJZm9yX2FsbF9wcm9tcHRzKHN5bSwgcHJvcCkgeworCQlwcm9wLT52aXNp
YmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQkvKgorCQkg
KiBUcmlzdGF0ZSBjaG9pY2VfdmFsdWVzIHdpdGggdmlzaWJpbGl0eSAnbW9kJyBhcmUKKwkJICog
bm90IHZpc2libGUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgY2hvaWNlJ3MgdmFsdWUgaXMKKwkJICog
J3llcycuCisJCSAqLworCQlpZiAoY2hvaWNlX3N5bSAmJiBzeW0tPnR5cGUgPT0gU19UUklTVEFU
RSAmJgorCQkgICAgcHJvcC0+dmlzaWJsZS50cmkgPT0gbW9kICYmIGNob2ljZV9zeW0tPmN1cnIu
dHJpID09IHllcykKKwkJCXByb3AtPnZpc2libGUudHJpID0gbm87CisKKwkJdHJpID0gRVhQUl9P
Uih0cmksIHByb3AtPnZpc2libGUudHJpKTsKKwl9CisJaWYgKHRyaSA9PSBtb2QgJiYgKHN5bS0+
dHlwZSAhPSBTX1RSSVNUQVRFIHx8IG1vZHVsZXNfdmFsID09IG5vKSkKKwkJdHJpID0geWVzOwor
CWlmIChzeW0tPnZpc2libGUgIT0gdHJpKSB7CisJCXN5bS0+dmlzaWJsZSA9IHRyaTsKKwkJc3lt
X3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpCisJ
CXJldHVybjsKKwkvKiBkZWZhdWx0aW5nIHRvICJ5ZXMiIGlmIG5vIGV4cGxpY2l0ICJkZXBlbmRz
IG9uIiBhcmUgZ2l2ZW4gKi8KKwl0cmkgPSB5ZXM7CisJaWYgKHN5bS0+ZGlyX2RlcC5leHByKQor
CQl0cmkgPSBleHByX2NhbGNfdmFsdWUoc3ltLT5kaXJfZGVwLmV4cHIpOworCWlmICh0cmkgPT0g
bW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikKKwkJdHJpID0geWVzOworCWlm
IChzeW0tPmRpcl9kZXAudHJpICE9IHRyaSkgeworCQlzeW0tPmRpcl9kZXAudHJpID0gdHJpOwor
CQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwl9CisJdHJpID0gbm87CisJaWYgKHN5bS0+cmV2X2Rl
cC5leHByKQorCQl0cmkgPSBleHByX2NhbGNfdmFsdWUoc3ltLT5yZXZfZGVwLmV4cHIpOworCWlm
ICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikKKwkJdHJpID0g
eWVzOworCWlmIChzeW0tPnJldl9kZXAudHJpICE9IHRyaSkgeworCQlzeW0tPnJldl9kZXAudHJp
ID0gdHJpOworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwl9CisJdHJpID0gbm87CisJaWYgKHN5
bS0+aW1wbGllZC5leHByICYmIHN5bS0+ZGlyX2RlcC50cmkgIT0gbm8pCisJCXRyaSA9IGV4cHJf
Y2FsY192YWx1ZShzeW0tPmltcGxpZWQuZXhwcik7CisJaWYgKHRyaSA9PSBtb2QgJiYgc3ltX2dl
dF90eXBlKHN5bSkgPT0gU19CT09MRUFOKQorCQl0cmkgPSB5ZXM7CisJaWYgKHN5bS0+aW1wbGll
ZC50cmkgIT0gdHJpKSB7CisJCXN5bS0+aW1wbGllZC50cmkgPSB0cmk7CisJCXN5bV9zZXRfY2hh
bmdlZChzeW0pOworCX0KK30KKworLyoKKyAqIEZpbmQgdGhlIGRlZmF1bHQgc3ltYm9sIGZvciBh
IGNob2ljZS4KKyAqIEZpcnN0IHRyeSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjaG9pY2Ug
c3ltYm9sCisgKiBOZXh0IGxvY2F0ZSB0aGUgZmlyc3QgdmlzaWJsZSBjaG9pY2UgdmFsdWUKKyAq
IFJldHVybiBOVUxMIGlmIG5vbmUgd2FzIGZvdW5kCisgKi8KK3N0cnVjdCBzeW1ib2wgKnN5bV9j
aG9pY2VfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbCAqZGVm
X3N5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisKKwkvKiBh
bnkgb2YgdGhlIGRlZmF1bHRzIHZpc2libGU/ICovCisJZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHBy
b3ApIHsKKwkJcHJvcC0+dmlzaWJsZS50cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJs
ZS5leHByKTsKKwkJaWYgKHByb3AtPnZpc2libGUudHJpID09IG5vKQorCQkJY29udGludWU7CisJ
CWRlZl9zeW0gPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCWlmIChkZWZfc3ltLT52aXNpYmxl
ICE9IG5vKQorCQkJcmV0dXJuIGRlZl9zeW07CisJfQorCisJLyoganVzdCBnZXQgdGhlIGZpcnN0
IHZpc2libGUgdmFsdWUgKi8KKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCWV4
cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkKKwkJaWYgKGRlZl9z
eW0tPnZpc2libGUgIT0gbm8pCisJCQlyZXR1cm4gZGVmX3N5bTsKKworCS8qIGZhaWxlZCB0byBs
b2NhdGUgYW55IGRlZmF1bHRzICovCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg
c3ltYm9sICpzeW1fY2FsY19jaG9pY2Uoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBz
eW1ib2wgKmRlZl9zeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICpl
OworCWludCBmbGFnczsKKworCS8qIGZpcnN0IGNhbGN1bGF0ZSBhbGwgY2hvaWNlIHZhbHVlcycg
dmlzaWJpbGl0aWVzICovCisJZmxhZ3MgPSBzeW0tPmZsYWdzOworCXByb3AgPSBzeW1fZ2V0X2No
b2ljZV9wcm9wKHN5bSk7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBk
ZWZfc3ltKSB7CisJCXN5bV9jYWxjX3Zpc2liaWxpdHkoZGVmX3N5bSk7CisJCWlmIChkZWZfc3lt
LT52aXNpYmxlICE9IG5vKQorCQkJZmxhZ3MgJj0gZGVmX3N5bS0+ZmxhZ3M7CisJfQorCisJc3lt
LT5mbGFncyAmPSBmbGFncyB8IH5TWU1CT0xfREVGX1VTRVI7CisKKwkvKiBpcyB0aGUgdXNlciBj
aG9pY2UgdmlzaWJsZT8gKi8KKwlkZWZfc3ltID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOwor
CWlmIChkZWZfc3ltICYmIGRlZl9zeW0tPnZpc2libGUgIT0gbm8pCisJCXJldHVybiBkZWZfc3lt
OworCisJZGVmX3N5bSA9IHN5bV9jaG9pY2VfZGVmYXVsdChzeW0pOworCisJaWYgKGRlZl9zeW0g
PT0gTlVMTCkKKwkJLyogbm8gY2hvaWNlPyByZXNldCB0cmlzdGF0ZSB2YWx1ZSAqLworCQlzeW0t
PmN1cnIudHJpID0gbm87CisKKwlyZXR1cm4gZGVmX3N5bTsKK30KKworc3RhdGljIHZvaWQgc3lt
X3dhcm5fdW5tZXRfZGVwKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgZ3N0ciBncyA9
IHN0cl9uZXcoKTsKKworCXN0cl9wcmludGYoJmdzLAorCQkgICAiXG5XQVJOSU5HOiB1bm1ldCBk
aXJlY3QgZGVwZW5kZW5jaWVzIGRldGVjdGVkIGZvciAlc1xuIiwKKwkJICAgc3ltLT5uYW1lKTsK
KwlzdHJfcHJpbnRmKCZncywKKwkJICAgIiAgRGVwZW5kcyBvbiBbJWNdOiAiLAorCQkgICBzeW0t
PmRpcl9kZXAudHJpID09IG1vZCA/ICdtJyA6ICduJyk7CisJZXhwcl9nc3RyX3ByaW50KHN5bS0+
ZGlyX2RlcC5leHByLCAmZ3MpOworCXN0cl9wcmludGYoJmdzLCAiXG4iKTsKKworCWV4cHJfZ3N0
cl9wcmludF9yZXZkZXAoc3ltLT5yZXZfZGVwLmV4cHIsICZncywgeWVzLAorCQkJICAgICAgICIg
IFNlbGVjdGVkIGJ5IFt5XTpcbiIpOworCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5yZXZf
ZGVwLmV4cHIsICZncywgbW9kLAorCQkJICAgICAgICIgIFNlbGVjdGVkIGJ5IFttXTpcbiIpOwor
CisJZnB1dHMoc3RyX2dldCgmZ3MpLCBzdGRlcnIpOworfQorCit2b2lkIHN5bV9jYWxjX3ZhbHVl
KHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIG5ld3ZhbCwgb2xk
dmFsOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKworCWlmICgh
c3ltKQorCQlyZXR1cm47CisKKwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9WQUxJRCkKKwkJcmV0
dXJuOworCisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJgorCSAgICBzeW0tPmZsYWdz
ICYgU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMpIHsKKwkJc3ltLT5mbGFncyAmPSB+U1lN
Qk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVM7CisJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9w
KHN5bSk7CisJCXN5bV9jYWxjX3ZhbHVlKHByb3BfZ2V0X3N5bWJvbChwcm9wKSk7CisJfQorCisJ
c3ltLT5mbGFncyB8PSBTWU1CT0xfVkFMSUQ7CisKKwlvbGR2YWwgPSBzeW0tPmN1cnI7CisKKwlz
d2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNf
U1RSSU5HOgorCQluZXd2YWwgPSBzeW1ib2xfZW1wdHkuY3VycjsKKwkJYnJlYWs7CisJY2FzZSBT
X0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQluZXd2YWwgPSBzeW1ib2xfbm8uY3VycjsK
KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3ltLT5jdXJyLnZhbCA9IHN5bS0+bmFtZTsKKwkJc3lt
LT5jdXJyLnRyaSA9IG5vOworCQlyZXR1cm47CisJfQorCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9X
UklURTsKKworCXN5bV9jYWxjX3Zpc2liaWxpdHkoc3ltKTsKKworCWlmIChzeW0tPnZpc2libGUg
IT0gbm8pCisJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOworCisJLyogc2V0IGRlZmF1bHQg
aWYgcmVjdXJzaXZlbHkgY2FsbGVkICovCisJc3ltLT5jdXJyID0gbmV3dmFsOworCisJc3dpdGNo
IChzeW1fZ2V0X3R5cGUoc3ltKSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklTVEFU
RToKKwkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBzeW0tPnZpc2libGUgPT0geWVz
KSB7CisJCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCQkJbmV3dmFsLnRyaSA9
IChwcm9wX2dldF9zeW1ib2wocHJvcCktPmN1cnIudmFsID09IHN5bSkgPyB5ZXMgOiBubzsKKwkJ
fSBlbHNlIHsKKwkJCWlmIChzeW0tPnZpc2libGUgIT0gbm8pIHsKKwkJCQkvKiBpZiB0aGUgc3lt
Ym9sIGlzIHZpc2libGUgdXNlIHRoZSB1c2VyIHZhbHVlCisJCQkJICogaWYgYXZhaWxhYmxlLCBv
dGhlcndpc2UgdHJ5IHRoZSBkZWZhdWx0IHZhbHVlCisJCQkJICovCisJCQkJaWYgKHN5bV9oYXNf
dmFsdWUoc3ltKSkgeworCQkJCQluZXd2YWwudHJpID0gRVhQUl9BTkQoc3ltLT5kZWZbU19ERUZf
VVNFUl0udHJpLAorCQkJCQkJCSAgICAgIHN5bS0+dmlzaWJsZSk7CisJCQkJCWdvdG8gY2FsY19u
ZXd2YWw7CisJCQkJfQorCQkJfQorCQkJaWYgKHN5bS0+cmV2X2RlcC50cmkgIT0gbm8pCisJCQkJ
c3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkg
eworCQkJCXByb3AgPSBzeW1fZ2V0X2RlZmF1bHRfcHJvcChzeW0pOworCQkJCWlmIChwcm9wKSB7
CisJCQkJCW5ld3ZhbC50cmkgPSBFWFBSX0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwciks
CisJCQkJCQkJICAgICAgcHJvcC0+dmlzaWJsZS50cmkpOworCQkJCQlpZiAobmV3dmFsLnRyaSAh
PSBubykKKwkJCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOworCQkJCX0KKwkJCQlpZiAo
c3ltLT5pbXBsaWVkLnRyaSAhPSBubykgeworCQkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklU
RTsKKwkJCQkJbmV3dmFsLnRyaSA9IEVYUFJfT1IobmV3dmFsLnRyaSwgc3ltLT5pbXBsaWVkLnRy
aSk7CisJCQkJfQorCQkJfQorCQljYWxjX25ld3ZhbDoKKwkJCWlmIChzeW0tPmRpcl9kZXAudHJp
IDwgc3ltLT5yZXZfZGVwLnRyaSkKKwkJCQlzeW1fd2Fybl91bm1ldF9kZXAoc3ltKTsKKwkJCW5l
d3ZhbC50cmkgPSBFWFBSX09SKG5ld3ZhbC50cmksIHN5bS0+cmV2X2RlcC50cmkpOworCQl9CisJ
CWlmIChuZXd2YWwudHJpID09IG1vZCAmJgorCQkgICAgKHN5bV9nZXRfdHlwZShzeW0pID09IFNf
Qk9PTEVBTiB8fCBzeW0tPmltcGxpZWQudHJpID09IHllcykpCisJCQluZXd2YWwudHJpID0geWVz
OworCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX0lOVDoK
KwkJaWYgKHN5bS0+dmlzaWJsZSAhPSBubyAmJiBzeW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJCW5l
d3ZhbC52YWwgPSBzeW0tPmRlZltTX0RFRl9VU0VSXS52YWw7CisJCQlicmVhazsKKwkJfQorCQlw
cm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKKwkJaWYgKHByb3ApIHsKKwkJCXN0cnVj
dCBzeW1ib2wgKmRzID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKGRzKSB7CisJCQkJ
c3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMpOworCQkJ
CW5ld3ZhbC52YWwgPSBkcy0+Y3Vyci52YWw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJOworCX0KKworCXN5bS0+Y3VyciA9IG5ld3ZhbDsKKwlpZiAoc3ltX2lzX2Nob2ljZShz
eW0pICYmIG5ld3ZhbC50cmkgPT0geWVzKQorCQlzeW0tPmN1cnIudmFsID0gc3ltX2NhbGNfY2hv
aWNlKHN5bSk7CisJc3ltX3ZhbGlkYXRlX3JhbmdlKHN5bSk7CisKKwlpZiAobWVtY21wKCZvbGR2
YWwsICZzeW0tPmN1cnIsIHNpemVvZihvbGR2YWwpKSkgeworCQlzeW1fc2V0X2NoYW5nZWQoc3lt
KTsKKwkJaWYgKG1vZHVsZXNfc3ltID09IHN5bSkgeworCQkJc3ltX3NldF9hbGxfY2hhbmdlZCgp
OworCQkJbW9kdWxlc192YWwgPSBtb2R1bGVzX3N5bS0+Y3Vyci50cmk7CisJCX0KKwl9CisKKwlp
ZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW07CisK
KwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJZXhwcl9saXN0X2Zvcl9lYWNo
X3N5bShwcm9wLT5leHByLCBlLCBjaG9pY2Vfc3ltKSB7CisJCQlpZiAoKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfV1JJVEUpICYmCisJCQkgICAgY2hvaWNlX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCQlj
aG9pY2Vfc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZ
TUJPTF9DSEFOR0VEKQorCQkJCXN5bV9zZXRfY2hhbmdlZChjaG9pY2Vfc3ltKTsKKwkJfQorCX0K
KworCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX05PX1dSSVRFKQorCQlzeW0tPmZsYWdzICY9IH5T
WU1CT0xfV1JJVEU7CisKKwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0Vf
VkFMVUVTKQorCQlzZXRfYWxsX2Nob2ljZV92YWx1ZXMoc3ltKTsKK30KKwordm9pZCBzeW1fY2xl
YXJfYWxsX3ZhbGlkKHZvaWQpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOworCisJ
Zm9yX2FsbF9zeW1ib2xzKGksIHN5bSkKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1ZBTElEOwor
CXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOworCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsK
K30KKworYm9vbCBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSwg
dHJpc3RhdGUgdmFsKQoreworCWludCB0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisKKwlpZiAo
c3ltLT52aXNpYmxlID09IG5vKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodHlwZSAhPSBTX0JP
T0xFQU4gJiYgdHlwZSAhPSBTX1RSSVNUQVRFKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodHlw
ZSA9PSBTX0JPT0xFQU4gJiYgdmFsID09IG1vZCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzeW0t
PnZpc2libGUgPD0gc3ltLT5yZXZfZGVwLnRyaSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzeW0t
PmltcGxpZWQudHJpID09IHllcyAmJiB2YWwgPT0gbW9kKQorCQlyZXR1cm4gZmFsc2U7CisJaWYg
KHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBzeW0tPnZpc2libGUgPT0geWVzKQorCQlyZXR1
cm4gdmFsID09IHllczsKKwlyZXR1cm4gdmFsID49IHN5bS0+cmV2X2RlcC50cmkgJiYgdmFsIDw9
IHN5bS0+dmlzaWJsZTsKK30KKworYm9vbCBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBz
eW1ib2wgKnN5bSwgdHJpc3RhdGUgdmFsKQoreworCXRyaXN0YXRlIG9sZHZhbCA9IHN5bV9nZXRf
dHJpc3RhdGVfdmFsdWUoc3ltKTsKKworCWlmIChvbGR2YWwgIT0gdmFsICYmICFzeW1fdHJpc3Rh
dGVfd2l0aGluX3JhbmdlKHN5bSwgdmFsKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCEoc3lt
LT5mbGFncyAmIFNZTUJPTF9ERUZfVVNFUikpIHsKKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVG
X1VTRVI7CisJCXN5bV9zZXRfY2hhbmdlZChzeW0pOworCX0KKwkvKgorCSAqIHNldHRpbmcgYSBj
aG9pY2UgdmFsdWUgYWxzbyByZXNldHMgdGhlIG5ldyBmbGFnIG9mIHRoZSBjaG9pY2UKKwkgKiBz
eW1ib2wgYW5kIGFsbCBvdGhlciBjaG9pY2UgdmFsdWVzLgorCSAqLworCWlmIChzeW1faXNfY2hv
aWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgeworCQlzdHJ1Y3Qgc3ltYm9sICpjcyA9IHBy
b3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOworCQlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7CisJCXN0cnVjdCBleHByICplOworCisJCWNzLT5kZWZbU19ERUZfVVNFUl0udmFs
ID0gc3ltOworCQljcy0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQlwcm9wID0gc3ltX2dl
dF9jaG9pY2VfcHJvcChjcyk7CisJCWZvciAoZSA9IHByb3AtPmV4cHI7IGU7IGUgPSBlLT5sZWZ0
LmV4cHIpIHsKKwkJCWlmIChlLT5yaWdodC5zeW0tPnZpc2libGUgIT0gbm8pCisJCQkJZS0+cmln
aHQuc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCX0KKwl9CisKKwlzeW0tPmRlZltT
X0RFRl9VU0VSXS50cmkgPSB2YWw7CisJaWYgKG9sZHZhbCAhPSB2YWwpCisJCXN5bV9jbGVhcl9h
bGxfdmFsaWQoKTsKKworCXJldHVybiB0cnVlOworfQorCit0cmlzdGF0ZSBzeW1fdG9nZ2xlX3Ry
aXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwl0cmlzdGF0ZSBvbGR2YWwsIG5l
d3ZhbDsKKworCW9sZHZhbCA9IG5ld3ZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsK
KwlkbyB7CisJCXN3aXRjaCAobmV3dmFsKSB7CisJCWNhc2Ugbm86CisJCQluZXd2YWwgPSBtb2Q7
CisJCQlicmVhazsKKwkJY2FzZSBtb2Q6CisJCQluZXd2YWwgPSB5ZXM7CisJCQlicmVhazsKKwkJ
Y2FzZSB5ZXM6CisJCQluZXd2YWwgPSBubzsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzeW1fc2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbmV3dmFsKSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKG9sZHZh
bCAhPSBuZXd2YWwpOworCXJldHVybiBuZXd2YWw7Cit9CisKK2Jvb2wgc3ltX3N0cmluZ192YWxp
ZChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzaWduZWQgY2hhciBj
aDsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX1NUUklORzoKKwkJcmV0dXJuIHRy
dWU7CisJY2FzZSBTX0lOVDoKKwkJY2ggPSAqc3RyKys7CisJCWlmIChjaCA9PSAnLScpCisJCQlj
aCA9ICpzdHIrKzsKKwkJaWYgKCFpc2RpZ2l0KGNoKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYg
KGNoID09ICcwJyAmJiAqc3RyICE9IDApCisJCQlyZXR1cm4gZmFsc2U7CisJCXdoaWxlICgoY2gg
PSAqc3RyKyspKSB7CisJCQlpZiAoIWlzZGlnaXQoY2gpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJ
fQorCQlyZXR1cm4gdHJ1ZTsKKwljYXNlIFNfSEVYOgorCQlpZiAoc3RyWzBdID09ICcwJyAmJiAo
c3RyWzFdID09ICd4JyB8fCBzdHJbMV0gPT0gJ1gnKSkKKwkJCXN0ciArPSAyOworCQljaCA9ICpz
dHIrKzsKKwkJZG8geworCQkJaWYgKCFpc3hkaWdpdChjaCkpCisJCQkJcmV0dXJuIGZhbHNlOwor
CQl9IHdoaWxlICgoY2ggPSAqc3RyKyspKTsKKwkJcmV0dXJuIHRydWU7CisJY2FzZSBTX0JPT0xF
QU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlzd2l0Y2ggKHN0clswXSkgeworCQljYXNlICd5Jzog
Y2FzZSAnWSc6CisJCWNhc2UgJ20nOiBjYXNlICdNJzoKKwkJY2FzZSAnbic6IGNhc2UgJ04nOgor
CQkJcmV0dXJuIHRydWU7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCXJldHVy
biBmYWxzZTsKKwl9Cit9CisKK2Jvb2wgc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3RydWN0IHN5
bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOwor
CWxvbmcgbG9uZyB2YWw7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19TVFJJTkc6
CisJCXJldHVybiBzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3RyKTsKKwljYXNlIFNfSU5UOgorCQlp
ZiAoIXN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzdHIpKQorCQkJcmV0dXJuIGZhbHNlOworCQlwcm9w
ID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7CisJCWlmICghcHJvcCkKKwkJCXJldHVybiB0cnVl
OworCQl2YWwgPSBzdHJ0b2xsKHN0ciwgTlVMTCwgMTApOworCQlyZXR1cm4gdmFsID49IHN5bV9n
ZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxMCkgJiYKKwkJICAgICAgIHZhbCA8
PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIDEwKTsKKwljYXNlIFNf
SEVYOgorCQlpZiAoIXN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzdHIpKQorCQkJcmV0dXJuIGZhbHNl
OworCQlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7CisJCWlmICghcHJvcCkKKwkJCXJl
dHVybiB0cnVlOworCQl2YWwgPSBzdHJ0b2xsKHN0ciwgTlVMTCwgMTYpOworCQlyZXR1cm4gdmFs
ID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxNikgJiYKKwkJICAg
ICAgIHZhbCA8PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIDE2KTsK
KwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAoc3RyWzBdKSB7
CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3Jh
bmdlKHN5bSwgeWVzKTsKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQkJcmV0dXJuIHN5bV90cmlz
dGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQly
ZXR1cm4gc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKTsKKwkJfQorCQlyZXR1cm4g
ZmFsc2U7CisJZGVmYXVsdDoKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworYm9vbCBzeW1fc2V0
X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCkKK3sK
Kwljb25zdCBjaGFyICpvbGR2YWw7CisJY2hhciAqdmFsOworCWludCBzaXplOworCisJc3dpdGNo
IChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3
aXRjaCAobmV3dmFsWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJCXJldHVybiBzeW1f
c2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgeWVzKTsKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQkJ
cmV0dXJuIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpOworCQljYXNlICduJzogY2Fz
ZSAnTic6CisJCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsKKwkJfQor
CQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJOworCX0KKworCWlmICghc3ltX3N0cmluZ193
aXRoaW5fcmFuZ2Uoc3ltLCBuZXd2YWwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShzeW0t
PmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSKSkgeworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZf
VVNFUjsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCisJb2xkdmFsID0gc3ltLT5kZWZb
U19ERUZfVVNFUl0udmFsOworCXNpemUgPSBzdHJsZW4obmV3dmFsKSArIDE7CisJaWYgKHN5bS0+
dHlwZSA9PSBTX0hFWCAmJiAobmV3dmFsWzBdICE9ICcwJyB8fCAobmV3dmFsWzFdICE9ICd4JyAm
JiBuZXd2YWxbMV0gIT0gJ1gnKSkpIHsKKwkJc2l6ZSArPSAyOworCQlzeW0tPmRlZltTX0RFRl9V
U0VSXS52YWwgPSB2YWwgPSB4bWFsbG9jKHNpemUpOworCQkqdmFsKysgPSAnMCc7CisJCSp2YWwr
KyA9ICd4JzsKKwl9IGVsc2UgaWYgKCFvbGR2YWwgfHwgc3RyY21wKG9sZHZhbCwgbmV3dmFsKSkK
KwkJc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gdmFsID0geG1hbGxvYyhzaXplKTsKKwllbHNl
CisJCXJldHVybiB0cnVlOworCisJc3RyY3B5KHZhbCwgbmV3dmFsKTsKKwlmcmVlKCh2b2lkICop
b2xkdmFsKTsKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwor
LyoKKyAqIEZpbmQgdGhlIGRlZmF1bHQgdmFsdWUgYXNzb2NpYXRlZCB0byBhIHN5bWJvbC4KKyAq
IEZvciB0cmlzdGF0ZSBzeW1ib2wgaGFuZGxlIHRoZSBtb2R1bGVzPW4gY2FzZQorICogaW4gd2hp
Y2ggY2FzZSAibSIgYmVjb21lcyAieSIuCisgKiBJZiB0aGUgc3ltYm9sIGRvZXMgbm90IGhhdmUg
YW55IGRlZmF1bHQgdGhlbiBmYWxsYmFjaworICogdG8gdGhlIGZpeGVkIGRlZmF1bHQgdmFsdWVz
LgorICovCitjb25zdCBjaGFyICpzeW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN0cnVjdCBzeW1ib2wg
KnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqZHM7CisJ
Y29uc3QgY2hhciAqc3RyOworCXRyaXN0YXRlIHZhbDsKKworCXN5bV9jYWxjX3Zpc2liaWxpdHko
c3ltKTsKKwlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CisJdmFsID0gc3ltYm9sX25vLmN1
cnIudHJpOworCXN0ciA9IHN5bWJvbF9lbXB0eS5jdXJyLnZhbDsKKworCS8qIElmIHN5bWJvbCBo
YXMgYSBkZWZhdWx0IHZhbHVlIGxvb2sgaXQgdXAgKi8KKwlwcm9wID0gc3ltX2dldF9kZWZhdWx0
X3Byb3Aoc3ltKTsKKwlpZiAocHJvcCAhPSBOVUxMKSB7CisJCXN3aXRjaCAoc3ltLT50eXBlKSB7
CisJCWNhc2UgU19CT09MRUFOOgorCQljYXNlIFNfVFJJU1RBVEU6CisJCQkvKiBUaGUgdmlzaWJp
bGl0eSBtYXkgbGltaXQgdGhlIHZhbHVlIGZyb20geWVzID0+IG1vZCAqLworCQkJdmFsID0gRVhQ
Ul9BTkQoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLCBwcm9wLT52aXNpYmxlLnRyaSk7CisJ
CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBUaGUgZm9sbG93aW5nIGZhaWxzIHRv
IGhhbmRsZSB0aGUgc2l0dWF0aW9uCisJCQkgKiB3aGVyZSBhIGRlZmF1bHQgdmFsdWUgaXMgZnVy
dGhlciBsaW1pdGVkIGJ5CisJCQkgKiB0aGUgdmFsaWQgcmFuZ2UuCisJCQkgKi8KKwkJCWRzID0g
cHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKGRzICE9IE5VTEwpIHsKKwkJCQlzeW1fY2Fs
Y192YWx1ZShkcyk7CisJCQkJc3RyID0gKGNvbnN0IGNoYXIgKilkcy0+Y3Vyci52YWw7CisJCQl9
CisJCX0KKwl9CisKKwkvKiBIYW5kbGUgc2VsZWN0IHN0YXRlbWVudHMgKi8KKwl2YWwgPSBFWFBS
X09SKHZhbCwgc3ltLT5yZXZfZGVwLnRyaSk7CisKKwkvKiB0cmFuc3Bvc2UgbW9kIHRvIHllcyBp
ZiBtb2R1bGVzIGFyZSBub3QgZW5hYmxlZCAqLworCWlmICh2YWwgPT0gbW9kKQorCQlpZiAoIXN5
bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBtb2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pCisJ
CQl2YWwgPSB5ZXM7CisKKwkvKiB0cmFuc3Bvc2UgbW9kIHRvIHllcyBpZiB0eXBlIGlzIGJvb2wg
Ki8KKwlpZiAoc3ltLT50eXBlID09IFNfQk9PTEVBTiAmJiB2YWwgPT0gbW9kKQorCQl2YWwgPSB5
ZXM7CisKKwkvKiBhZGp1c3QgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhpcyBzeW1ib2wgaXMgaW1w
bGllZCBieSBhbm90aGVyICovCisJaWYgKHZhbCA8IHN5bS0+aW1wbGllZC50cmkpCisJCXZhbCA9
IHN5bS0+aW1wbGllZC50cmk7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09M
RUFOOgorCWNhc2UgU19UUklTVEFURToKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSBubzogcmV0
dXJuICJuIjsKKwkJY2FzZSBtb2Q6IHJldHVybiAibSI7CisJCWNhc2UgeWVzOiByZXR1cm4gInki
OworCQl9CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCQlyZXR1cm4gc3RyOworCWNhc2Ug
U19TVFJJTkc6CisJCXJldHVybiBzdHI7CisJY2FzZSBTX1VOS05PV046CisJCWJyZWFrOworCX0K
KwlyZXR1cm4gIiI7Cit9CisKK2NvbnN0IGNoYXIgKnN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN0cnVj
dCBzeW1ib2wgKnN5bSkKK3sKKwl0cmlzdGF0ZSB2YWw7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklTVEFURToKKwkJdmFsID0gc3ltX2dldF90
cmlzdGF0ZV92YWx1ZShzeW0pOworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIG5vOgorCQkJcmV0
dXJuICJuIjsKKwkJY2FzZSBtb2Q6CisJCQlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CisJ
CQlyZXR1cm4gKG1vZHVsZXNfc3ltLT5jdXJyLnRyaSA9PSBubykgPyAibiIgOiAibSI7CisJCWNh
c2UgeWVzOgorCQkJcmV0dXJuICJ5IjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJ
fQorCXJldHVybiAoY29uc3QgY2hhciAqKXN5bS0+Y3Vyci52YWw7Cit9CisKK2Jvb2wgc3ltX2lz
X2NoYW5nYWJsZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+dmlzaWJsZSA+
IHN5bS0+cmV2X2RlcC50cmk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBzdHJoYXNoKGNvbnN0IGNo
YXIgKnMpCit7CisJLyogZm52MzIgaGFzaCAqLworCXVuc2lnbmVkIGhhc2ggPSAyMTY2MTM2MjYx
VTsKKwlmb3IgKDsgKnM7IHMrKykKKwkJaGFzaCA9IChoYXNoIF4gKnMpICogMHgwMTAwMDE5MzsK
KwlyZXR1cm4gaGFzaDsKK30KKworc3RydWN0IHN5bWJvbCAqc3ltX2xvb2t1cChjb25zdCBjaGFy
ICpuYW1lLCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltYm9sOworCWNoYXIgKm5l
d19uYW1lOworCWludCBoYXNoOworCisJaWYgKG5hbWUpIHsKKwkJaWYgKG5hbWVbMF0gJiYgIW5h
bWVbMV0pIHsKKwkJCXN3aXRjaCAobmFtZVswXSkgeworCQkJY2FzZSAneSc6IHJldHVybiAmc3lt
Ym9sX3llczsKKwkJCWNhc2UgJ20nOiByZXR1cm4gJnN5bWJvbF9tb2Q7CisJCQljYXNlICduJzog
cmV0dXJuICZzeW1ib2xfbm87CisJCQl9CisJCX0KKwkJaGFzaCA9IHN0cmhhc2gobmFtZSkgJSBT
WU1CT0xfSEFTSFNJWkU7CisKKwkJZm9yIChzeW1ib2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3lt
Ym9sOyBzeW1ib2wgPSBzeW1ib2wtPm5leHQpIHsKKwkJCWlmIChzeW1ib2wtPm5hbWUgJiYKKwkJ
CSAgICAhc3RyY21wKHN5bWJvbC0+bmFtZSwgbmFtZSkgJiYKKwkJCSAgICAoZmxhZ3MgPyBzeW1i
b2wtPmZsYWdzICYgZmxhZ3MKKwkJCQkgICA6ICEoc3ltYm9sLT5mbGFncyAmIChTWU1CT0xfQ09O
U1R8U1lNQk9MX0NIT0lDRSkpKSkKKwkJCQlyZXR1cm4gc3ltYm9sOworCQl9CisJCW5ld19uYW1l
ID0geHN0cmR1cChuYW1lKTsKKwl9IGVsc2UgeworCQluZXdfbmFtZSA9IE5VTEw7CisJCWhhc2gg
PSAwOworCX0KKworCXN5bWJvbCA9IHhtYWxsb2Moc2l6ZW9mKCpzeW1ib2wpKTsKKwltZW1zZXQo
c3ltYm9sLCAwLCBzaXplb2YoKnN5bWJvbCkpOworCXN5bWJvbC0+bmFtZSA9IG5ld19uYW1lOwor
CXN5bWJvbC0+dHlwZSA9IFNfVU5LTk9XTjsKKwlzeW1ib2wtPmZsYWdzIHw9IGZsYWdzOworCisJ
c3ltYm9sLT5uZXh0ID0gc3ltYm9sX2hhc2hbaGFzaF07CisJc3ltYm9sX2hhc2hbaGFzaF0gPSBz
eW1ib2w7CisKKwlyZXR1cm4gc3ltYm9sOworfQorCitzdHJ1Y3Qgc3ltYm9sICpzeW1fZmluZChj
b25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IE5VTEw7CisJaW50
IGhhc2ggPSAwOworCisJaWYgKCFuYW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChuYW1lWzBd
ICYmICFuYW1lWzFdKSB7CisJCXN3aXRjaCAobmFtZVswXSkgeworCQljYXNlICd5JzogcmV0dXJu
ICZzeW1ib2xfeWVzOworCQljYXNlICdtJzogcmV0dXJuICZzeW1ib2xfbW9kOworCQljYXNlICdu
JzogcmV0dXJuICZzeW1ib2xfbm87CisJCX0KKwl9CisJaGFzaCA9IHN0cmhhc2gobmFtZSkgJSBT
WU1CT0xfSEFTSFNJWkU7CisKKwlmb3IgKHN5bWJvbCA9IHN5bWJvbF9oYXNoW2hhc2hdOyBzeW1i
b2w7IHN5bWJvbCA9IHN5bWJvbC0+bmV4dCkgeworCQlpZiAoc3ltYm9sLT5uYW1lICYmCisJCSAg
ICAhc3RyY21wKHN5bWJvbC0+bmFtZSwgbmFtZSkgJiYKKwkJICAgICEoc3ltYm9sLT5mbGFncyAm
IFNZTUJPTF9DT05TVCkpCisJCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHN5bWJvbDsKK30KKwor
Y29uc3QgY2hhciAqc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciAqaW4pCit7CisJ
Y29uc3QgY2hhciAqcDsKKwlzaXplX3QgcmVzbGVuOworCWNoYXIgKnJlczsKKwlzaXplX3QgbDsK
KworCXJlc2xlbiA9IHN0cmxlbihpbikgKyBzdHJsZW4oIlwiXCIiKSArIDE7CisKKwlwID0gaW47
CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOworCQlwICs9IGw7CisKKwkJ
aWYgKHBbMF0gPT0gJ1wwJykKKwkJCWJyZWFrOworCisJCXJlc2xlbisrOworCQlwKys7CisJfQor
CisJcmVzID0geG1hbGxvYyhyZXNsZW4pOworCXJlc1swXSA9ICdcMCc7CisKKwlzdHJjYXQocmVz
LCAiXCIiKTsKKworCXAgPSBpbjsKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcIlxc
Iik7CisJCXN0cm5jYXQocmVzLCBwLCBsKTsKKwkJcCArPSBsOworCisJCWlmIChwWzBdID09ICdc
MCcpCisJCQlicmVhazsKKworCQlzdHJjYXQocmVzLCAiXFwiKTsKKwkJc3RybmNhdChyZXMsIHAr
KywgMSk7CisJfQorCisJc3RyY2F0KHJlcywgIlwiIik7CisJcmV0dXJuIHJlczsKK30KKworc3Ry
dWN0IHN5bV9tYXRjaCB7CisJc3RydWN0IHN5bWJvbAkqc3ltOworCW9mZl90CQlzbywgZW87Cit9
OworCisvKiBDb21wYXJlIG1hdGNoZWQgc3ltYm9scyBhcyB0aHVzOgorICogLSBmaXJzdCwgc3lt
Ym9scyB0aGF0IG1hdGNoIGV4YWN0bHkKKyAqIC0gdGhlbiwgYWxwaGFiZXRpY2FsIHNvcnQKKyAq
Lworc3RhdGljIGludCBzeW1fcmVsX2NvbXAoY29uc3Qgdm9pZCAqc3ltMSwgY29uc3Qgdm9pZCAq
c3ltMikKK3sKKwljb25zdCBzdHJ1Y3Qgc3ltX21hdGNoICpzMSA9IHN5bTE7CisJY29uc3Qgc3Ry
dWN0IHN5bV9tYXRjaCAqczIgPSBzeW0yOworCWludCBleGFjdDEsIGV4YWN0MjsKKworCS8qIEV4
YWN0IG1hdGNoOgorCSAqIC0gaWYgbWF0Y2hlZCBsZW5ndGggb24gc3ltYm9sIHMxIGlzIHRoZSBs
ZW5ndGggb2YgdGhhdCBzeW1ib2wsCisJICogICB0aGVuIHRoaXMgc3ltYm9sIHNob3VsZCBjb21l
IGZpcnN0OworCSAqIC0gaWYgbWF0Y2hlZCBsZW5ndGggb24gc3ltYm9sIHMyIGlzIHRoZSBsZW5n
dGggb2YgdGhhdCBzeW1ib2wsCisJICogICB0aGVuIHRoaXMgc3ltYm9sIHNob3VsZCBjb21lIGZp
cnN0LgorCSAqIE5vdGU6IHNpbmNlIHRoZSBzZWFyY2ggY2FuIGJlIGEgcmVnZXhwLCBib3RoIHN5
bWJvbHMgbWF5IG1hdGNoCisJICogZXhhY3RseTsgaWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgY2Fu
J3QgZGVjaWRlIHdoaWNoIGNvbWVzIGZpcnN0LAorCSAqIGFuZCB3ZSBmYWxsYmFjayB0byBzb3J0
aW5nIGFscGhhYmV0aWNhbGx5LgorCSAqLworCWV4YWN0MSA9IChzMS0+ZW8gLSBzMS0+c28pID09
IHN0cmxlbihzMS0+c3ltLT5uYW1lKTsKKwlleGFjdDIgPSAoczItPmVvIC0gczItPnNvKSA9PSBz
dHJsZW4oczItPnN5bS0+bmFtZSk7CisJaWYgKGV4YWN0MSAmJiAhZXhhY3QyKQorCQlyZXR1cm4g
LTE7CisJaWYgKCFleGFjdDEgJiYgZXhhY3QyKQorCQlyZXR1cm4gMTsKKworCS8qIEFzIGEgZmFs
bGJhY2ssIHNvcnQgc3ltYm9scyBhbHBoYWJldGljYWxseSAqLworCXJldHVybiBzdHJjbXAoczEt
PnN5bS0+bmFtZSwgczItPnN5bS0+bmFtZSk7Cit9CisKK3N0cnVjdCBzeW1ib2wgKipzeW1fcmVf
c2VhcmNoKGNvbnN0IGNoYXIgKnBhdHRlcm4pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqKnN5
bV9hcnIgPSBOVUxMOworCXN0cnVjdCBzeW1fbWF0Y2ggKnN5bV9tYXRjaF9hcnIgPSBOVUxMOwor
CWludCBpLCBjbnQsIHNpemU7CisJcmVnZXhfdCByZTsKKwlyZWdtYXRjaF90IG1hdGNoWzFdOwor
CisJY250ID0gc2l6ZSA9IDA7CisJLyogU2tpcCBpZiBlbXB0eSAqLworCWlmIChzdHJsZW4ocGF0
dGVybikgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKHJlZ2NvbXAoJnJlLCBwYXR0ZXJuLCBS
RUdfRVhURU5ERUR8UkVHX0lDQVNFKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3JfYWxsX3N5bWJv
bHMoaSwgc3ltKSB7CisJCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUIHx8ICFzeW0tPm5h
bWUpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZ2V4ZWMoJnJlLCBzeW0tPm5hbWUsIDEsIG1hdGNo
LCAwKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY250ID49IHNpemUpIHsKKwkJCXZvaWQgKnRtcDsK
KwkJCXNpemUgKz0gMTY7CisJCQl0bXAgPSByZWFsbG9jKHN5bV9tYXRjaF9hcnIsIHNpemUgKiBz
aXplb2Yoc3RydWN0IHN5bV9tYXRjaCkpOworCQkJaWYgKCF0bXApCisJCQkJZ290byBzeW1fcmVf
c2VhcmNoX2ZyZWU7CisJCQlzeW1fbWF0Y2hfYXJyID0gdG1wOworCQl9CisJCXN5bV9jYWxjX3Zh
bHVlKHN5bSk7CisJCS8qIEFzIHJlZ2V4ZWMgcmV0dXJuZWQgMCwgd2Uga25vdyB3ZSBoYXZlIGEg
bWF0Y2gsIHNvCisJCSAqIHdlIGNhbiB1c2UgbWF0Y2hbMF0ucm1fW3NlXW8gd2l0aG91dCBmdXJ0
aGVyIGNoZWNrcworCQkgKi8KKwkJc3ltX21hdGNoX2FycltjbnRdLnNvID0gbWF0Y2hbMF0ucm1f
c287CisJCXN5bV9tYXRjaF9hcnJbY250XS5lbyA9IG1hdGNoWzBdLnJtX2VvOworCQlzeW1fbWF0
Y2hfYXJyW2NudCsrXS5zeW0gPSBzeW07CisJfQorCWlmIChzeW1fbWF0Y2hfYXJyKSB7CisJCXFz
b3J0KHN5bV9tYXRjaF9hcnIsIGNudCwgc2l6ZW9mKHN0cnVjdCBzeW1fbWF0Y2gpLCBzeW1fcmVs
X2NvbXApOworCQlzeW1fYXJyID0gbWFsbG9jKChjbnQrMSkgKiBzaXplb2Yoc3RydWN0IHN5bWJv
bCAqKSk7CisJCWlmICghc3ltX2FycikKKwkJCWdvdG8gc3ltX3JlX3NlYXJjaF9mcmVlOworCQlm
b3IgKGkgPSAwOyBpIDwgY250OyBpKyspCisJCQlzeW1fYXJyW2ldID0gc3ltX21hdGNoX2Fycltp
XS5zeW07CisJCXN5bV9hcnJbY250XSA9IE5VTEw7CisJfQorc3ltX3JlX3NlYXJjaF9mcmVlOgor
CS8qIHN5bV9tYXRjaF9hcnIgY2FuIGJlIE5VTEwgaWYgbm8gbWF0Y2gsIGJ1dCBmcmVlKE5VTEwp
IGlzIE9LICovCisJZnJlZShzeW1fbWF0Y2hfYXJyKTsKKwlyZWdmcmVlKCZyZSk7CisKKwlyZXR1
cm4gc3ltX2FycjsKK30KKworLyoKKyAqIFdoZW4gd2UgY2hlY2sgZm9yIHJlY3Vyc2l2ZSBkZXBl
bmRlbmNpZXMgd2UgdXNlIGEgc3RhY2sgdG8gc2F2ZQorICogY3VycmVudCBzdGF0ZSBzbyB3ZSBj
YW4gcHJpbnQgb3V0IHJlbGV2YW50IGluZm8gdG8gdXNlci4KKyAqIFRoZSBlbnRyaWVzIGFyZSBs
b2NhdGVkIG9uIHRoZSBjYWxsIHN0YWNrIHNvIG5vIG5lZWQgdG8gZnJlZSBtZW1vcnkuCisgKiBO
b3RlIGluc2VydCgpIHJlbW92ZSgpIG11c3QgYWx3YXlzIG1hdGNoIHRvIHByb3Blcmx5IGNsZWFy
IHRoZSBzdGFjay4KKyAqLworc3RhdGljIHN0cnVjdCBkZXBfc3RhY2sgeworCXN0cnVjdCBkZXBf
c3RhY2sgKnByZXYsICpuZXh0OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7CisJc3RydWN0IGV4cHIgKipleHByOworfSAqY2hlY2tfdG9wOworCitzdGF0aWMg
dm9pZCBkZXBfc3RhY2tfaW5zZXJ0KHN0cnVjdCBkZXBfc3RhY2sgKnN0YWNrLCBzdHJ1Y3Qgc3lt
Ym9sICpzeW0pCit7CisJbWVtc2V0KHN0YWNrLCAwLCBzaXplb2YoKnN0YWNrKSk7CisJaWYgKGNo
ZWNrX3RvcCkKKwkJY2hlY2tfdG9wLT5uZXh0ID0gc3RhY2s7CisJc3RhY2stPnByZXYgPSBjaGVj
a190b3A7CisJc3RhY2stPnN5bSA9IHN5bTsKKwljaGVja190b3AgPSBzdGFjazsKK30KKworc3Rh
dGljIHZvaWQgZGVwX3N0YWNrX3JlbW92ZSh2b2lkKQoreworCWNoZWNrX3RvcCA9IGNoZWNrX3Rv
cC0+cHJldjsKKwlpZiAoY2hlY2tfdG9wKQorCQljaGVja190b3AtPm5leHQgPSBOVUxMOworfQor
CisvKgorICogQ2FsbGVkIHdoZW4gd2UgaGF2ZSBkZXRlY3RlZCBhIHJlY3Vyc2l2ZSBkZXBlbmRl
bmN5LgorICogY2hlY2tfdG9wIHBvaW50IHRvIHRoZSB0b3Agb2YgdGhlIHN0YWN0IHNvIHdlIHVz
ZQorICogdGhlIC0+cHJldiBwb2ludGVyIHRvIGxvY2F0ZSB0aGUgYm90dG9tIG9mIHRoZSBzdGFj
ay4KKyAqLworc3RhdGljIHZvaWQgc3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2ZShzdHJ1Y3Qgc3lt
Ym9sICpsYXN0X3N5bSkKK3sKKwlzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjazsKKwlzdHJ1Y3Qgc3lt
Ym9sICpzeW0sICpuZXh0X3N5bTsKKwlzdHJ1Y3QgbWVudSAqbWVudSA9IE5VTEw7CisJc3RydWN0
IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBkZXBfc3RhY2sgY3Zfc3RhY2s7CisKKwlpZiAoc3lt
X2lzX2Nob2ljZV92YWx1ZShsYXN0X3N5bSkpIHsKKwkJZGVwX3N0YWNrX2luc2VydCgmY3Zfc3Rh
Y2ssIGxhc3Rfc3ltKTsKKwkJbGFzdF9zeW0gPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9p
Y2VfcHJvcChsYXN0X3N5bSkpOworCX0KKworCWZvciAoc3RhY2sgPSBjaGVja190b3A7IHN0YWNr
ICE9IE5VTEw7IHN0YWNrID0gc3RhY2stPnByZXYpCisJCWlmIChzdGFjay0+c3ltID09IGxhc3Rf
c3ltKQorCQkJYnJlYWs7CisJaWYgKCFzdGFjaykgeworCQlmcHJpbnRmKHN0ZGVyciwgInVuZXhw
ZWN0ZWQgcmVjdXJzaXZlIGRlcGVuZGVuY3kgZXJyb3JcbiIpOworCQlyZXR1cm47CisJfQorCisJ
Zm9yICg7IHN0YWNrOyBzdGFjayA9IHN0YWNrLT5uZXh0KSB7CisJCXN5bSA9IHN0YWNrLT5zeW07
CisJCW5leHRfc3ltID0gc3RhY2stPm5leHQgPyBzdGFjay0+bmV4dC0+c3ltIDogbGFzdF9zeW07
CisJCXByb3AgPSBzdGFjay0+cHJvcDsKKwkJaWYgKHByb3AgPT0gTlVMTCkKKwkJCXByb3AgPSBz
dGFjay0+c3ltLT5wcm9wOworCisJCS8qIGZvciBjaG9pY2UgdmFsdWVzIGZpbmQgdGhlIG1lbnUg
ZW50cnkgKHVzZWQgYmVsb3cpICovCisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkgfHwgc3ltX2lz
X2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHBy
b3AgPSBwcm9wLT5uZXh0KSB7CisJCQkJbWVudSA9IHByb3AtPm1lbnU7CisJCQkJaWYgKHByb3At
Pm1lbnUpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChzdGFjay0+c3ltID09IGxhc3Rf
c3ltKQorCQkJZnByaW50ZihzdGRlcnIsICIlczolZDplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVu
Y3kgZGV0ZWN0ZWQhXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7CisK
KwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpc
dGNob2ljZSAlcyBjb250YWlucyBzeW1ib2wgJXNcbiIsCisJCQkJbWVudS0+ZmlsZS0+bmFtZSwg
bWVudS0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJ
CQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVs
c2UgaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJZnByaW50ZihzdGRlcnIsICIl
czolZDpcdHN5bWJvbCAlcyBpcyBwYXJ0IG9mIGNob2ljZSAlc1xuIiwKKwkJCQltZW51LT5maWxl
LT5uYW1lLCBtZW51LT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9p
Y2U+IiwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7
CisJCX0gZWxzZSBpZiAoc3RhY2stPmV4cHIgPT0gJnN5bS0+ZGlyX2RlcC5leHByKSB7CisJCQlm
cHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGRlcGVuZHMgb24gJXNcbiIsCisJCQkJ
cHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFt
ZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8
Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN0YWNrLT5leHByID09ICZzeW0tPnJldl9kZXAuZXhw
cikgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBzZWxlY3RlZCBi
eSAlc1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCisJCQkJc3ltLT5u
YW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRf
c3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0gZWxzZSBpZiAoc3RhY2stPmV4cHIgPT0gJnN5
bS0+aW1wbGllZC5leHByKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVz
IGlzIGltcGxpZWQgYnkgJXNcbiIsCisJCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5v
LAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0t
Pm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN0YWNr
LT5leHByKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzICVzIHZhbHVl
IGNvbnRhaW5zICVzXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKKwkJ
CQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCXByb3BfZ2V0X3R5cGVf
bmFtZShwcm9wLT50eXBlKSwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDog
IjxjaG9pY2U+Iik7CisJCX0gZWxzZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3lt
Ym9sICVzICVzIGlzIHZpc2libGUgZGVwZW5kaW5nIG9uICVzXG4iLAorCQkJCXByb3AtPmZpbGUt
Pm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2lj
ZT4iLAorCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKSwKKwkJCQluZXh0X3N5bS0+
bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0KKwl9CisKKwlmcHJpbnRm
KHN0ZGVyciwKKwkJIkZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVp
bGQva2NvbmZpZy1sYW5ndWFnZS50eHRcbiIKKwkJInN1YnNlY3Rpb24gXCJLY29uZmlnIHJlY3Vy
c2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zXCJcbiIKKwkJIlxuIik7CisKKwlpZiAoY2hlY2tf
dG9wID09ICZjdl9zdGFjaykKKwkJZGVwX3N0YWNrX3JlbW92ZSgpOworfQorCitzdGF0aWMgc3Ry
dWN0IHN5bWJvbCAqc3ltX2NoZWNrX2V4cHJfZGVwcyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlzdHJ1
Y3Qgc3ltYm9sICpzeW07CisKKwlpZiAoIWUpCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAoZS0+
dHlwZSkgeworCWNhc2UgRV9PUjoKKwljYXNlIEVfQU5EOgorCQlzeW0gPSBzeW1fY2hlY2tfZXhw
cl9kZXBzKGUtPmxlZnQuZXhwcik7CisJCWlmIChzeW0pCisJCQlyZXR1cm4gc3ltOworCQlyZXR1
cm4gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5yaWdodC5leHByKTsKKwljYXNlIEVfTk9UOgorCQly
ZXR1cm4gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5sZWZ0LmV4cHIpOworCWNhc2UgRV9FUVVBTDoK
KwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRIOgor
CWNhc2UgRV9VTkVRVUFMOgorCQlzeW0gPSBzeW1fY2hlY2tfZGVwcyhlLT5sZWZ0LnN5bSk7CisJ
CWlmIChzeW0pCisJCQlyZXR1cm4gc3ltOworCQlyZXR1cm4gc3ltX2NoZWNrX2RlcHMoZS0+cmln
aHQuc3ltKTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gc3ltX2NoZWNrX2RlcHMoZS0+bGVm
dC5zeW0pOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlmcHJpbnRmKHN0ZGVyciwgIk9vcHMh
IEhvdyB0byBjaGVjayAlZD9cbiIsIGUtPnR5cGUpOworCXJldHVybiBOVUxMOworfQorCisvKiBy
ZXR1cm4gTlVMTCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgT0sgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3lt
Ym9sICpzeW1fY2hlY2tfc3ltX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBz
eW1ib2wgKnN5bTI7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBkZXBfc3RhY2sg
c3RhY2s7CisKKwlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgc3ltKTsKKworCXN0YWNrLmV4cHIg
PSAmc3ltLT5kaXJfZGVwLmV4cHI7CisJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5k
aXJfZGVwLmV4cHIpOworCWlmIChzeW0yKQorCQlnb3RvIG91dDsKKworCXN0YWNrLmV4cHIgPSAm
c3ltLT5yZXZfZGVwLmV4cHI7CisJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5yZXZf
ZGVwLmV4cHIpOworCWlmIChzeW0yKQorCQlnb3RvIG91dDsKKworCXN0YWNrLmV4cHIgPSAmc3lt
LT5pbXBsaWVkLmV4cHI7CisJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5pbXBsaWVk
LmV4cHIpOworCWlmIChzeW0yKQorCQlnb3RvIG91dDsKKworCXN0YWNrLmV4cHIgPSBOVUxMOwor
CisJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlp
ZiAocHJvcC0+dHlwZSA9PSBQX0NIT0lDRSB8fCBwcm9wLT50eXBlID09IFBfU0VMRUNUIHx8CisJ
CSAgICBwcm9wLT50eXBlID09IFBfSU1QTFkpCisJCQljb250aW51ZTsKKwkJc3RhY2sucHJvcCA9
IHByb3A7CisJCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHByb3AtPnZpc2libGUuZXhwcik7
CisJCWlmIChzeW0yKQorCQkJYnJlYWs7CisJCWlmIChwcm9wLT50eXBlICE9IFBfREVGQVVMVCB8
fCBzeW1faXNfY2hvaWNlKHN5bSkpCisJCQljb250aW51ZTsKKwkJc3RhY2suZXhwciA9ICZwcm9w
LT5leHByOworCQlzeW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhwcm9wLT5leHByKTsKKwkJaWYg
KHN5bTIpCisJCQlicmVhazsKKwkJc3RhY2suZXhwciA9IE5VTEw7CisJfQorCitvdXQ6CisJZGVw
X3N0YWNrX3JlbW92ZSgpOworCisJcmV0dXJuIHN5bTI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lt
Ym9sICpzeW1fY2hlY2tfY2hvaWNlX2RlcHMoc3RydWN0IHN5bWJvbCAqY2hvaWNlKQoreworCXN0
cnVjdCBzeW1ib2wgKnN5bSwgKnN5bTI7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVj
dCBleHByICplOworCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7CisKKwlkZXBfc3RhY2tfaW5zZXJ0
KCZzdGFjaywgY2hvaWNlKTsKKworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNob2ljZSk7
CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCXN5bS0+Zmxh
Z3MgfD0gKFNZTUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsKKworCWNob2ljZS0+ZmxhZ3Mg
fD0gKFNZTUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsKKwlzeW0yID0gc3ltX2NoZWNrX3N5
bV9kZXBzKGNob2ljZSk7CisJY2hvaWNlLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOworCWlmIChz
eW0yKQorCQlnb3RvIG91dDsKKworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwg
ZSwgc3ltKSB7CisJCXN5bTIgPSBzeW1fY2hlY2tfc3ltX2RlcHMoc3ltKTsKKwkJaWYgKHN5bTIp
CisJCQlicmVhazsKKwl9CitvdXQ6CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHBy
LCBlLCBzeW0pCisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsKKworCWlmIChzeW0yICYm
IHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltMikgJiYKKwkgICAgcHJvcF9nZXRfc3ltYm9sKHN5bV9n
ZXRfY2hvaWNlX3Byb3Aoc3ltMikpID09IGNob2ljZSkKKwkJc3ltMiA9IGNob2ljZTsKKworCWRl
cF9zdGFja19yZW1vdmUoKTsKKworCXJldHVybiBzeW0yOworfQorCitzdHJ1Y3Qgc3ltYm9sICpz
eW1fY2hlY2tfZGVwcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbCAqc3lt
MjsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9D
SEVDSykgeworCQlzeW1fY2hlY2tfcHJpbnRfcmVjdXJzaXZlKHN5bSk7CisJCXJldHVybiBzeW07
CisJfQorCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLRUQpCisJCXJldHVybiBOVUxMOwor
CisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQlzdHJ1Y3QgZGVwX3N0YWNrIHN0
YWNrOworCisJCS8qIGZvciBjaG9pY2UgZ3JvdXBzIHN0YXJ0IHRoZSBjaGVjayB3aXRoIG1haW4g
Y2hvaWNlIHN5bWJvbCAqLworCQlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgc3ltKTsKKwkJcHJv
cCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJc3ltMiA9IHN5bV9jaGVja19kZXBzKHBy
b3BfZ2V0X3N5bWJvbChwcm9wKSk7CisJCWRlcF9zdGFja19yZW1vdmUoKTsKKwl9IGVsc2UgaWYg
KHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQlzeW0yID0gc3ltX2NoZWNrX2Nob2ljZV9kZXBzKHN5
bSk7CisJfSBlbHNlIHsKKwkJc3ltLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NI
RUNLRUQpOworCQlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKHN5bSk7CisJCXN5bS0+ZmxhZ3Mg
Jj0gflNZTUJPTF9DSEVDSzsKKwl9CisKKwlyZXR1cm4gc3ltMjsKK30KKworc3RydWN0IHByb3Bl
cnR5ICpwcm9wX2FsbG9jKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSkK
K3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHByb3BlcnR5ICoqcHJvcHA7CisK
Kwlwcm9wID0geG1hbGxvYyhzaXplb2YoKnByb3ApKTsKKwltZW1zZXQocHJvcCwgMCwgc2l6ZW9m
KCpwcm9wKSk7CisJcHJvcC0+dHlwZSA9IHR5cGU7CisJcHJvcC0+c3ltID0gc3ltOworCXByb3At
PmZpbGUgPSBjdXJyZW50X2ZpbGU7CisJcHJvcC0+bGluZW5vID0gemNvbmZfbGluZW5vKCk7CisK
KwkvKiBhcHBlbmQgcHJvcGVydHkgdG8gdGhlIHByb3AgbGlzdCBvZiBzeW1ib2wgKi8KKwlpZiAo
c3ltKSB7CisJCWZvciAocHJvcHAgPSAmc3ltLT5wcm9wOyAqcHJvcHA7IHByb3BwID0gJigqcHJv
cHApLT5uZXh0KQorCQkJOworCQkqcHJvcHAgPSBwcm9wOworCX0KKworCXJldHVybiBwcm9wOwor
fQorCitzdHJ1Y3Qgc3ltYm9sICpwcm9wX2dldF9zeW1ib2woc3RydWN0IHByb3BlcnR5ICpwcm9w
KQoreworCWlmIChwcm9wLT5leHByICYmIChwcm9wLT5leHByLT50eXBlID09IEVfU1lNQk9MIHx8
CisJCQkgICBwcm9wLT5leHByLT50eXBlID09IEVfTElTVCkpCisJCXJldHVybiBwcm9wLT5leHBy
LT5sZWZ0LnN5bTsKKwlyZXR1cm4gTlVMTDsKK30KKworY29uc3QgY2hhciAqcHJvcF9nZXRfdHlw
ZV9uYW1lKGVudW0gcHJvcF90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQ
X1BST01QVDoKKwkJcmV0dXJuICJwcm9tcHQiOworCWNhc2UgUF9DT01NRU5UOgorCQlyZXR1cm4g
ImNvbW1lbnQiOworCWNhc2UgUF9NRU5VOgorCQlyZXR1cm4gIm1lbnUiOworCWNhc2UgUF9ERUZB
VUxUOgorCQlyZXR1cm4gImRlZmF1bHQiOworCWNhc2UgUF9DSE9JQ0U6CisJCXJldHVybiAiY2hv
aWNlIjsKKwljYXNlIFBfU0VMRUNUOgorCQlyZXR1cm4gInNlbGVjdCI7CisJY2FzZSBQX0lNUExZ
OgorCQlyZXR1cm4gImltcGx5IjsKKwljYXNlIFBfUkFOR0U6CisJCXJldHVybiAicmFuZ2UiOwor
CWNhc2UgUF9TWU1CT0w6CisJCXJldHVybiAic3ltYm9sIjsKKwljYXNlIFBfVU5LTk9XTjoKKwkJ
YnJlYWs7CisJfQorCXJldHVybiAidW5rbm93biI7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uYjIwNzYxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnCkBAIC0wLDAgKzEsNTIgQEAKKyMgU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworY29uZmlnIEEKKwlib29sICJBIgorCWRlZmF1bHQg
eQorCitjb25maWcgQTAKKwlib29sICJBMCIKKwlkZXBlbmRzIG9uIEEKKwlkZWZhdWx0IHkKKwlo
ZWxwCisJICBUaGlzIGRlcGVuZHMgb24gQSwgc28gc2hvdWxkIGJlIGEgc3VibWVudSBvZiBBLgor
Citjb25maWcgQTBfMAorCWJvb2wgIkExXzAiCisJZGVwZW5kcyBvbiBBMAorCWhlbHAKKwkgIFN1
Ym1lbnVzIGFyZSBjcmVhdGVkIHJlY3Vyc2l2ZWx5LgorCSAgVGhpcyBzaG91bGQgYmUgYSBzdWJt
ZW51IG9mIEEwLgorCitjb25maWcgQTEKKwlib29sICJBMSIKKwlkZXBlbmRzIG9uIEEKKwlkZWZh
dWx0IHkKKwloZWxwCisJICBUaGlzIHNob3VsZCBsaW5lIHVwIHdpdGggQTAuCisKK2Nob2ljZQor
CXByb21wdCAiY2hvaWNlIgorCWRlcGVuZHMgb24gQTEKKwloZWxwCisJICBDaG9pY2Ugc2hvdWxk
IGJlY29tZSBhIHN1Ym1lbnUgYXMgd2VsbC4KKworY29uZmlnIEExXzAKKwlib29sICJBMV8wIgor
Citjb25maWcgQTFfMQorCWJvb2wgIkExXzEiCisKK2VuZGNob2ljZQorCitjb25maWcgQgorCWJv
b2wgIkIiCisJaGVscAorCSAgVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBBLgorCitjb25maWcgQwor
CWJvb2wgIkMiCisJZGVwZW5kcyBvbiBBCisJaGVscAorCSAgVGhpcyBkZXBlbmRzIG9uIEEsIGJ1
dCBub3QgYSBjb25zZWN1dGl2ZSBpdGVtLCBzbyBjYW4vc2hvdWxkIG5vdAorCSAgYmUgYSBzdWJt
ZW51LgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUv
X19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2lu
aXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMjVhYmQ5MjcKLS0t
IC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9f
X2luaXRfXy5weQpAQCAtMCwwICsxLDEzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wCisiIiIKK0NyZWF0ZSBzdWJtZW51IGZvciBzeW1ib2xzIHRoYXQgZGVwZW5kIG9uIHRo
ZSBwcmVjZWRpbmcgb25lLgorCitJZiBhIHN5bWJvbHMgaGFzIGRlcGVuZGVuY3kgb24gdGhlIHBy
ZWNlZGluZyBzeW1ib2wsIHRoZSBtZW51IGVudHJ5CitzaG91bGQgYmVjb21lIHRoZSBzdWJtZW51
IG9mIHRoZSBwcmVjZWRpbmcgb25lLCBhbmQgZGlzcGxheWVkIHdpdGgKK2RlZXBlciBpbmRlbnRh
dGlvbi4KKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFza2Nv
bmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0
ZG91dCcpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVu
dS9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVu
dS9leHBlY3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmJm
NTIzNmYzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRv
X3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0CkBAIC0wLDAgKzEsMTAgQEAKK0EgKEEpIFtZL24vP10g
KE5FVykgCisgIEEwIChBMCkgW1kvbi8/XSAoTkVXKSAKKyAgICBBMV8wIChBMF8wKSBbTi95Lz9d
IChORVcpIAorICBBMSAoQTEpIFtZL24vP10gKE5FVykgCisgICAgY2hvaWNlCisgICAgPiAxLiBB
MV8wIChBMV8wKSAoTkVXKQorICAgICAgMi4gQTFfMSAoQTFfMSkgKE5FVykKKyAgICBjaG9pY2Vb
MS0yP106IAorQiAoQikgW04veS8/XSAoTkVXKSAKK0MgKEMpIFtOL3kvP10gKE5FVykgCmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9LY29uZmlnIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMC4uYTQxMjIwNWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9LY29uZmlnCkBAIC0wLDAgKzEsNTYgQEAKKyMgU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworY29uZmlnIE1PRFVMRVMKKwlib29sICJFbmFibGUg
bG9hZGFibGUgbW9kdWxlIHN1cHBvcnQiCisJb3B0aW9uIG1vZHVsZXMKKwlkZWZhdWx0IHkKKwor
Y2hvaWNlCisJcHJvbXB0ICJib29sZWFuIGNob2ljZSIKKwlkZWZhdWx0IEJPT0xfQ0hPSUNFMQor
Citjb25maWcgQk9PTF9DSE9JQ0UwCisJYm9vbCAiY2hvaWNlIDAiCisKK2NvbmZpZyBCT09MX0NI
T0lDRTEKKwlib29sICJjaG9pY2UgMSIKKworZW5kY2hvaWNlCisKK2Nob2ljZQorCXByb21wdCAi
b3B0aW9uYWwgYm9vbGVhbiBjaG9pY2UiCisJb3B0aW9uYWwKKwlkZWZhdWx0IE9QVF9CT09MX0NI
T0lDRTEKKworY29uZmlnIE9QVF9CT09MX0NIT0lDRTAKKwlib29sICJjaG9pY2UgMCIKKworY29u
ZmlnIE9QVF9CT09MX0NIT0lDRTEKKwlib29sICJjaG9pY2UgMSIKKworZW5kY2hvaWNlCisKK2No
b2ljZQorCXByb21wdCAidHJpc3RhdGUgY2hvaWNlIgorCWRlZmF1bHQgVFJJX0NIT0lDRTEKKwor
Y29uZmlnIFRSSV9DSE9JQ0UwCisJdHJpc3RhdGUgImNob2ljZSAwIgorCitjb25maWcgVFJJX0NI
T0lDRTEKKwl0cmlzdGF0ZSAiY2hvaWNlIDEiCisKK2VuZGNob2ljZQorCitjaG9pY2UKKwlwcm9t
cHQgIm9wdGlvbmFsIHRyaXN0YXRlIGNob2ljZSIKKwlvcHRpb25hbAorCWRlZmF1bHQgT1BUX1RS
SV9DSE9JQ0UxCisKK2NvbmZpZyBPUFRfVFJJX0NIT0lDRTAKKwl0cmlzdGF0ZSAiY2hvaWNlIDAi
CisKK2NvbmZpZyBPUFRfVFJJX0NIT0lDRTEKKwl0cmlzdGF0ZSAiY2hvaWNlIDEiCisKK2VuZGNo
b2ljZQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvX19pbml0
X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNDMxOGZjZTAKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weQpAQCAtMCww
ICsxLDQxIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0Jhc2lj
IGNob2ljZSB0ZXN0cy4KKworVGhlIGhhbmRsaW5nIG9mICdjaG9pY2UnIGlzIGEgYml0IGNvbXBs
aWNhdGVkIHBhcnQgaW4gS2NvbmZpZy4KKworVGhlIGJlaGF2aW9yIG9mICd5JyBjaG9pY2UgaXMg
aW50dWl0aXZlLiAgSWYgY2hvaWNlIHZhbHVlcyBhcmUgdHJpc3RhdGUsCit0aGUgY2hvaWNlIGNh
biBiZSAnbScgd2hlcmUgZWFjaCB2YWx1ZSBjYW4gYmUgZW5hYmxlZCBpbmRlcGVuZGVudGx5Lgor
QWxzbywgaWYgYSBjaG9pY2UgaXMgbWFya2VkIGFzICdvcHRpb25hbCcsIHRoZSB3aG9sZSBjaG9p
Y2UgY2FuIGJlCitpbnZpc2libGUuCisiIiIKKworCitkZWYgdGVzdF9vbGRhc2swKGNvbmYpOgor
ICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRv
dXRfY29udGFpbnMoJ29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0JykKKworCitkZWYgdGVzdF9vbGRh
c2sxKGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygnb2xkYXNrMV9jb25maWcn
KSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdvbGRhc2sxX2V4cGVjdGVk
X3N0ZG91dCcpCisKKworZGVmIHRlc3RfYWxseWVzKGNvbmYpOgorICAgIGFzc2VydCBjb25mLmFs
bHllc2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbHll
c19leHBlY3RlZF9jb25maWcnKQorCisKK2RlZiB0ZXN0X2FsbG1vZChjb25mKToKKyAgICBhc3Nl
cnQgY29uZi5hbGxtb2Rjb25maWcoKSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRh
aW5zKCdhbGxtb2RfZXhwZWN0ZWRfY29uZmlnJykKKworCitkZWYgdGVzdF9hbGxubyhjb25mKToK
KyAgICBhc3NlcnQgY29uZi5hbGxub2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25m
aWdfY29udGFpbnMoJ2FsbG5vX2V4cGVjdGVkX2NvbmZpZycpCisKKworZGVmIHRlc3RfYWxsZGVm
KGNvbmYpOgorICAgIGFzc2VydCBjb25mLmFsbGRlZmNvbmZpZygpID09IDAKKyAgICBhc3NlcnQg
Y29uZi5jb25maWdfY29udGFpbnMoJ2FsbGRlZl9leHBlY3RlZF9jb25maWcnKQpkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZp
ZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25m
aWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjdhNzU0YmY0Ci0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVj
dGVkX2NvbmZpZwpAQCAtMCwwICsxLDUgQEAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX0JP
T0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdfQk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklHX1RS
SV9DSE9JQ0UwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSV9DSE9JQ0UxIGlzIG5vdCBzZXQKZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3Rl
ZF9jb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0
ZWRfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5mMWY1ZGNkYgot
LS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG1v
ZF9leHBlY3RlZF9jb25maWcKQEAgLTAsMCArMSw5IEBACitDT05GSUdfTU9EVUxFUz15CisjIENP
TkZJR19CT09MX0NIT0lDRTAgaXMgbm90IHNldAorQ09ORklHX0JPT0xfQ0hPSUNFMT15CisjIENP
TkZJR19PUFRfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NPTkZJR19PUFRfQk9PTF9DSE9JQ0Ux
PXkKK0NPTkZJR19UUklfQ0hPSUNFMD1tCitDT05GSUdfVFJJX0NIT0lDRTE9bQorQ09ORklHX09Q
VF9UUklfQ0hPSUNFMD1tCitDT05GSUdfT1BUX1RSSV9DSE9JQ0UxPW0KZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjg4ZWU3YTQKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25m
aWcKQEAgLTAsMCArMSw1IEBACisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklH
X0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdfQk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklH
X1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NPTkZJR19UUklfQ0hPSUNFMT15CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmln
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZp
ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZTVhMDYyYTEKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0
ZWRfY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdfQk9P
TF9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NPTkZJR19CT09MX0NIT0lDRTE9eQorIyBDT05GSUdfT1BU
X0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMT15CisjIENP
TkZJR19UUklfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdfVFJJX0NIT0lDRTE9eQorIyBDT05G
SUdfT1BUX1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NPTkZJR19PUFRfVFJJX0NIT0lDRTE9eQpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBl
Y3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4
cGVjdGVkX3N0ZG91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjI1MWJi
YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9v
bGRhc2swX2V4cGVjdGVkX3N0ZG91dApAQCAtMCwwICsxLDEwIEBACitFbmFibGUgbG9hZGFibGUg
bW9kdWxlIHN1cHBvcnQgKE1PRFVMRVMpIFtZL24vP10gKE5FVykgCitib29sZWFuIGNob2ljZQor
ICAxLiBjaG9pY2UgMCAoQk9PTF9DSE9JQ0UwKSAoTkVXKQorPiAyLiBjaG9pY2UgMSAoQk9PTF9D
SE9JQ0UxKSAoTkVXKQorY2hvaWNlWzEtMj9dOiAKK29wdGlvbmFsIGJvb2xlYW4gY2hvaWNlIFtO
L3kvP10gKE5FVykgCit0cmlzdGF0ZSBjaG9pY2UgW00veS8/XSAoTkVXKSAKKyAgY2hvaWNlIDAg
KFRSSV9DSE9JQ0UwKSBbTi9tLz9dIChORVcpIAorICBjaG9pY2UgMSAoVFJJX0NIT0lDRTEpIFtO
L20vP10gKE5FVykgCitvcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2UgW04vbS95Lz9dIChORVcpIApk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25m
aWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYjY3YmZlM2MKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZwpAQCAt
MCwwICsxLDIgQEAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX09QVF9CT09M
X0NIT0lDRTA9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
b2xkYXNrMV9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2lj
ZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMC4uYzIxMjVlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Nob2ljZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91dApAQCAtMCwwICsxLDE1IEBACitFbmFi
bGUgbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgKE1PRFVMRVMpIFtOL3kvP10gCitib29sZWFuIGNo
b2ljZQorICAxLiBjaG9pY2UgMCAoQk9PTF9DSE9JQ0UwKSAoTkVXKQorPiAyLiBjaG9pY2UgMSAo
Qk9PTF9DSE9JQ0UxKSAoTkVXKQorY2hvaWNlWzEtMj9dOiAKK29wdGlvbmFsIGJvb2xlYW4gY2hv
aWNlIFtZL24vP10gKE5FVykgCitvcHRpb25hbCBib29sZWFuIGNob2ljZQorPiAxLiBjaG9pY2Ug
MCAoT1BUX0JPT0xfQ0hPSUNFMCkKKyAgMi4gY2hvaWNlIDEgKE9QVF9CT09MX0NIT0lDRTEpIChO
RVcpCitjaG9pY2VbMS0yP106IAordHJpc3RhdGUgY2hvaWNlCisgIDEuIGNob2ljZSAwIChUUklf
Q0hPSUNFMCkgKE5FVykKKz4gMi4gY2hvaWNlIDEgKFRSSV9DSE9JQ0UxKSAoTkVXKQorY2hvaWNl
WzEtMj9dOiAKK29wdGlvbmFsIHRyaXN0YXRlIGNob2ljZSBbTi95Lz9dIApkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmln
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29u
ZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi43MTA2YzI2YgotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhf
bV9kZXAvS2NvbmZpZwpAQCAtMCwwICsxLDIxIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCisKK2NvbmZpZyBNT0RVTEVTCisJZGVmX2Jvb2wgeQorCW9wdGlvbiBtb2R1bGVz
CisKK2NvbmZpZyBERVAKKwl0cmlzdGF0ZQorCWRlZmF1bHQgbQorCitjaG9pY2UKKwlwcm9tcHQg
IlRyaXN0YXRlIENob2ljZSIKKworY29uZmlnIENIT0lDRTAKKwl0cmlzdGF0ZSAiQ2hvaWNlIDAi
CisKK2NvbmZpZyBDSE9JQ0UxCisJdHJpc3RhdGUgIkNob2ljZSAxIgorCWRlcGVuZHMgb24gREVQ
CisKK2VuZGNob2ljZQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9p
Y2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAuLjA3NWI0ZTA4Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weQpAQCAt
MCwwICsxLDE2IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0hp
ZGUgdHJpc3RhdGUgY2hvaWNlIHZhbHVlcyB3aXRoIG1vZCBkZXBlbmRlbmN5IGluIHkgY2hvaWNl
LgorCitJZiB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIGRlcGVuZCBvbiBzeW1ib2xzIHNldCB0byAn
bScsIHRoZXkgc2hvdWxkIGJlCitoaWRkZW4gd2hlbiB0aGUgY2hvaWNlIGNvbnRhaW5pbmcgdGhl
bSBpcyBjaGFuZ2VkIGZyb20gJ20nIHRvICd5JworKGkuZS4gZXhjbHVzaXZlIGNob2ljZSkuCisK
K1JlbGF0ZWQgTGludXggY29tbWl0OiBmYTY0ZTVmNmEzNWVmZDVlNzdkNjM5MTI1ZDk3MzA3N2Nh
NTA2MDc0CisiIiIKKworCitkZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5vbGRhc2tj
b25maWcoJ2NvbmZpZycsICd5JykgPT0gMAorICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlu
cygnZXhwZWN0ZWRfY29uZmlnJykKKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4
cGVjdGVkX3N0ZG91dCcpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwLi4zYTEyNmI3YQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCkBAIC0wLDAgKzEsMiBAQAor
Q09ORklHX0NIT0lDRTA9bQorQ09ORklHX0NIT0lDRTE9bQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVj
dGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGQwN2I0NDkK
LS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1
ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZwpAQCAtMCwwICsxLDMgQEAKK0NPTkZJR19NT0RV
TEVTPXkKK0NPTkZJR19ERVA9bQorQ09ORklHX0NIT0lDRTA9eQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRv
dXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4
cGVjdGVkX3N0ZG91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMmI1MGFi
NjUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92
YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dApAQCAtMCwwICsxLDQgQEAKK1RyaXN0YXRl
IENob2ljZSBbTS95Lz9dIHkKK1RyaXN0YXRlIENob2ljZQorPiAxLiBDaG9pY2UgMCAoQ0hPSUNF
MCkKK2Nob2ljZVsxXTogMQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9j
b25mdGVzdC5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjAzNDVlZjZlCi0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQpAQCAtMCwwICsxLDI5MSBA
QAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIworIyBDb3B5cmlnaHQgKEMp
IDIwMTggTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9uZXh0LmNvbT4KKyMK
KworIiIiCitLY29uZmlnIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsuCisKK1RoaXMgcHJvdmlkZXMg
Zml4dHVyZSBmdW5jdGlvbnMgY29tbW9ubHkgdXNlZCBmcm9tIHRlc3QgZmlsZXMuCisiIiIKKwor
aW1wb3J0IG9zCitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2Vz
cworaW1wb3J0IHRlbXBmaWxlCisKK0NPTkZfUEFUSCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRo
LmpvaW4oJ3NjcmlwdHMnLCAna2NvbmZpZycsICdjb25mJykpCisKKworY2xhc3MgQ29uZjoKKyAg
ICAiIiJLY29uZmlnIHJ1bm5lciBhbmQgcmVzdWx0IGNoZWNrZXIuCisKKyAgICBUaGlzIGNsYXNz
IHByb3ZpZGVzIG1ldGhvZHMgdG8gcnVuIHRleHQtYmFzZWQgaW50ZXJmYWNlIG9mIEtjb25maWcK
KyAgICAoc2NyaXB0cy9rY29uZmlnL2NvbmYpIGFuZCByZXRyaWV2ZSB0aGUgcmVzdWx0ZWQgY29u
ZmlndXJhdGlvbiwKKyAgICBzdGRvdXQsIGFuZCBzdGRlcnIuICBJdCBhbHNvIHByb3ZpZGVzIG1l
dGhvZHMgdG8gY29tcGFyZSB0aG9zZQorICAgIHJlc3VsdHMgd2l0aCBleHBlY3RhdGlvbnMuCisg
ICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCk6CisgICAgICAgICIiIkNy
ZWF0ZSBhIG5ldyBDb25mIGluc3RhbmNlLgorCisgICAgICAgIHJlcXVlc3Q6IG9iamVjdCB0byBp
bnRyb3NwZWN0IHRoZSByZXF1ZXN0aW5nIHRlc3QgbW9kdWxlCisgICAgICAgICIiIgorICAgICAg
ICAjIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHRlc3QgYmVpbmcgcnVuCisgICAgICAgIHNlbGYuX3Rl
c3RfZGlyID0gb3MucGF0aC5kaXJuYW1lKHN0cihyZXF1ZXN0LmZzcGF0aCkpCisKKyAgICAjIHJ1
bm5lcnMKKyAgICBkZWYgX3J1bl9jb25mKHNlbGYsIG1vZGUsIGRvdF9jb25maWc9Tm9uZSwgb3V0
X2ZpbGU9Jy5jb25maWcnLAorICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmU9RmFsc2UsIGlu
X2tleXM9Tm9uZSwgZXh0cmFfZW52PXt9KToKKyAgICAgICAgIiIiUnVuIHRleHQtYmFzZWQgS2Nv
bmZpZyBleGVjdXRhYmxlIGFuZCBzYXZlIHRoZSByZXN1bHQuCisKKyAgICAgICAgbW9kZTogaW5w
dXQgbW9kZSBvcHRpb24gKC0tb2xkYXNrY29uZmlnLCAtLWRlZmNvbmZpZz08ZmlsZT4gZXRjLikK
KyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlv
biBiYXNlCisgICAgICAgIG91dF9maWxlOiBmaWxlIG5hbWUgdG8gY29udGFpbiB0aGUgb3V0cHV0
IGNvbmZpZyBkYXRhCisgICAgICAgIGludGVyYWN0aXZlOiBmbGFnIHRvIHNwZWNpZnkgdGhlIGlu
dGVyYWN0aXZlIG1vZGUKKyAgICAgICAgaW5fa2V5czoga2V5IGlucHV0cyBmb3IgaW50ZXJhY3Rp
dmUgbW9kZXMKKyAgICAgICAgZXh0cmFfZW52OiBhZGRpdGlvbmFsIGVudmlyb25tZW50cworICAg
ICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisg
ICAgICAgICIiIgorICAgICAgICBjb21tYW5kID0gW0NPTkZfUEFUSCwgbW9kZSwgJ0tjb25maWcn
XQorCisgICAgICAgICMgT3ZlcnJpZGUgJ3NyY3RyZWUnIGVudmlyb25tZW50IHRvIG1ha2UgdGhl
IHRlc3QgYXMgdGhlIHRvcCBkaXJlY3RvcnkKKyAgICAgICAgZXh0cmFfZW52WydzcmN0cmVlJ10g
PSBzZWxmLl90ZXN0X2RpcgorCisgICAgICAgICMgUnVuIEtjb25maWcgaW4gYSB0ZW1wb3Jhcnkg
ZGlyZWN0b3J5LgorICAgICAgICAjIFRoaXMgZGlyZWN0b3J5IGlzIGF1dG9tYXRpY2FsbHkgcmVt
b3ZlZCB3aGVuIGRvbmUuCisgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5
KCkgYXMgdGVtcF9kaXI6CisKKyAgICAgICAgICAgICMgaWYgLmNvbmZpZyBpcyBnaXZlbiwgY29w
eSBpdCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlmIGRvdF9jb25maWc6
CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLl90ZXN0
X2RpciwgZG90X2NvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBh
dGguam9pbih0ZW1wX2RpciwgJy5jb25maWcnKSkKKworICAgICAgICAgICAgcHMgPSBzdWJwcm9j
ZXNzLlBvcGVuKGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
aW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjd2Q9dGVtcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWRp
Y3Qob3MuZW52aXJvbiwgKipleHRyYV9lbnYpKQorCisgICAgICAgICAgICAjIElmIGlucHV0IGtl
eSBzZXF1ZW5jZSBpcyBnaXZlbiwgZmVlZCBpdCB0byBzdGRpbi4KKyAgICAgICAgICAgIGlmIGlu
X2tleXM6CisgICAgICAgICAgICAgICAgcHMuc3RkaW4ud3JpdGUoaW5fa2V5cy5lbmNvZGUoJ3V0
Zi04JykpCisKKyAgICAgICAgICAgIHdoaWxlIHBzLnBvbGwoKSBpcyBOb25lOgorICAgICAgICAg
ICAgICAgICMgRm9yIGludGVyYWN0aXZlIG1vZGVzIHN1Y2ggYXMgb2xkYXNrY29uZmlnLCBvbGRj
b25maWcsCisgICAgICAgICAgICAgICAgIyBzZW5kICdFbnRlcicga2V5IHVudGlsIHRoZSBwcm9n
cmFtIGZpbmlzaGVzLgorICAgICAgICAgICAgICAgIGlmIGludGVyYWN0aXZlOgorICAgICAgICAg
ICAgICAgICAgICBwcy5zdGRpbi53cml0ZShiJ1xuJykKKworICAgICAgICAgICAgc2VsZi5yZXRj
b2RlID0gcHMucmV0dXJuY29kZQorICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBwcy5zdGRvdXQu
cmVhZCgpLmRlY29kZSgpCisgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IHBzLnN0ZGVyci5yZWFk
KCkuZGVjb2RlKCkKKworICAgICAgICAgICAgIyBSZXRyaWV2ZSB0aGUgcmVzdWx0ZWQgY29uZmln
IGRhdGEgb25seSB3aGVuIC5jb25maWcgaXMgc3VwcG9zZWQKKyAgICAgICAgICAgICMgdG8gZXhp
c3QuICBJZiB0aGUgY29tbWFuZCBmYWlscywgdGhlIC5jb25maWcgZG9lcyBub3QgZXhpc3QuCisg
ICAgICAgICAgICAjICdsaXN0bmV3Y29uZmlnJyBkb2VzIG5vdCBwcm9kdWNlIC5jb25maWcgaW4g
dGhlIGZpcnN0IHBsYWNlLgorICAgICAgICAgICAgaWYgc2VsZi5yZXRjb2RlID09IDAgYW5kIG91
dF9maWxlOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4odGVtcF9kaXIs
IG91dF9maWxlKSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcgPSBmLnJl
YWQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZyA9IE5v
bmUKKworICAgICAgICAjIExvZ2dpbmc6CisgICAgICAgICMgUHl0ZXN0IGNhcHR1cmVzIHRoZSBm
b2xsb3dpbmcgaW5mb3JtYXRpb24gYnkgZGVmYXVsdC4gIEluIGZhaWx1cmUKKyAgICAgICAgIyBv
ZiB0ZXN0cywgdGhlIGNhcHR1cmVkIGxvZyB3aWxsIGJlIGRpc3BsYXllZC4gIFRoaXMgd2lsbCBi
ZSB1c2VmdWwgdG8KKyAgICAgICAgIyBmaWd1cmUgb3V0IHdoYXQgaGFzIGhhcHBlbmVkLgorCisg
ICAgICAgIHByaW50KCJbY29tbWFuZF1cbnt9XG4iLmZvcm1hdCgnICcuam9pbihjb21tYW5kKSkp
CisKKyAgICAgICAgcHJpbnQoIltyZXRjb2RlXVxue31cbiIuZm9ybWF0KHNlbGYucmV0Y29kZSkp
CisKKyAgICAgICAgcHJpbnQoIltzdGRvdXRdIikKKyAgICAgICAgcHJpbnQoc2VsZi5zdGRvdXQp
CisKKyAgICAgICAgcHJpbnQoIltzdGRlcnJdIikKKyAgICAgICAgcHJpbnQoc2VsZi5zdGRlcnIp
CisKKyAgICAgICAgaWYgc2VsZi5jb25maWcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwcmlu
dCgiW291dHB1dCBmb3IgJ3t9J10iLmZvcm1hdChvdXRfZmlsZSkpCisgICAgICAgICAgICBwcmlu
dChzZWxmLmNvbmZpZykKKworICAgICAgICByZXR1cm4gc2VsZi5yZXRjb2RlCisKKyAgICBkZWYg
b2xkYXNrY29uZmlnKHNlbGYsIGRvdF9jb25maWc9Tm9uZSwgaW5fa2V5cz1Ob25lKToKKyAgICAg
ICAgIiIiUnVuIG9sZGFza2NvbmZpZy4KKworICAgICAgICBkb3RfY29uZmlnOiAuY29uZmlnIGZp
bGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2UgKG9wdGlvbmFsKQorICAgICAgICBpbl9r
ZXk6IGtleSBpbnB1dHMgKG9wdGlvbmFsKQorICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1
cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX2NvbmYoJy0tb2xkYXNrY29uZmlnJywgZG90X2NvbmZpZz1kb3RfY29uZmlnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmU9VHJ1ZSwgaW5fa2V5cz1p
bl9rZXlzKQorCisgICAgZGVmIG9sZGNvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUsIGluX2tl
eXM9Tm9uZSk6CisgICAgICAgICIiIlJ1biBvbGRjb25maWcuCisKKyAgICAgICAgZG90X2NvbmZp
ZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25hbCkK
KyAgICAgICAgaW5fa2V5OiBrZXkgaW5wdXRzIChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29k
ZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLW9sZGNvbmZpZycsIGRvdF9jb25maWc9ZG90
X2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPVRydWUs
IGluX2tleXM9aW5fa2V5cykKKworICAgIGRlZiBvbGRkZWZjb25maWcoc2VsZiwgZG90X2NvbmZp
Zz1Ob25lKToKKyAgICAgICAgIiIiUnVuIG9sZGRlZmNvbmZpZy4KKworICAgICAgICBkb3RfY29u
ZmlnOiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2UgKG9wdGlvbmFs
KQorICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRh
YmxlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tb2xkZGVm
Y29uZmlnJywgZG90X2NvbmZpZz1kb3RfY29uZmlnKQorCisgICAgZGVmIGRlZmNvbmZpZyhzZWxm
LCBkZWZjb25maWcpOgorICAgICAgICAiIiJSdW4gZGVmY29uZmlnLgorCisgICAgICAgIGRlZmNv
bmZpZzogZGVmY29uZmlnIGZpbGUgZm9yIGlucHV0CisgICAgICAgIHJldHVybmNvZGU6IGV4aXQg
c3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIiCisgICAgICAgIGRl
ZmNvbmZpZ19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3Rlc3RfZGlyLCBkZWZjb25maWcpCisg
ICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1kZWZjb25maWc9e30nLmZvcm1hdChkZWZj
b25maWdfcGF0aCkpCisKKyAgICBkZWYgX2FsbGNvbmZpZyhzZWxmLCBtb2RlLCBhbGxfY29uZmln
KToKKyAgICAgICAgaWYgYWxsX2NvbmZpZzoKKyAgICAgICAgICAgIGFsbF9jb25maWdfcGF0aCA9
IG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgYWxsX2NvbmZpZykKKyAgICAgICAgICAgIGV4
dHJhX2VudiA9IHsnS0NPTkZJR19BTExDT05GSUcnOiBhbGxfY29uZmlnX3BhdGh9CisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBleHRyYV9lbnYgPSB7fQorCisgICAgICAgIHJldHVybiBzZWxm
Ll9ydW5fY29uZignLS17fWNvbmZpZycuZm9ybWF0KG1vZGUpLCBleHRyYV9lbnY9ZXh0cmFfZW52
KQorCisgICAgZGVmIGFsbHllc2NvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgorICAgICAg
ICAiIiJSdW4gYWxseWVzY29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNv
bmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisgICAgICAgIHJldHVy
bmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIi
CisgICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbHllcycsIGFsbF9jb25maWcpCisK
KyAgICBkZWYgYWxsbW9kY29uZmlnKHNlbGYsIGFsbF9jb25maWc9Tm9uZSk6CisgICAgICAgICIi
IlJ1biBhbGxtb2Rjb25maWcuCisKKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmln
IGZpbGUgZm9yIEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29k
ZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxsbW9kJywgYWxsX2NvbmZpZykKKworICAg
IGRlZiBhbGxub2NvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgorICAgICAgICAiIiJSdW4g
YWxsbm9jb25maWcuCisKKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUg
Zm9yIEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29kZTogZXhp
dCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAg
cmV0dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxsbm8nLCBhbGxfY29uZmlnKQorCisgICAgZGVmIGFs
bGRlZmNvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgorICAgICAgICAiIiJSdW4gYWxsZGVm
Y29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNvbmZpZyBmaWxlIGZvciBL
Q09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisgICAgICAgIHJldHVybmNvZGU6IGV4aXQgc3Rh
dHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVy
biBzZWxmLl9hbGxjb25maWcoJ2FsbGRlZicsIGFsbF9jb25maWcpCisKKyAgICBkZWYgcmFuZGNv
bmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgorICAgICAgICAiIiJSdW4gcmFuZGNvbmZpZy4K
KworICAgICAgICBhbGxfY29uZmlnOiBmcmFnbWVudCBjb25maWcgZmlsZSBmb3IgS0NPTkZJR19B
TExDT05GSUcgKG9wdGlvbmFsKQorICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0
aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5f
YWxsY29uZmlnKCdyYW5kJywgYWxsX2NvbmZpZykKKworICAgIGRlZiBzYXZlZGVmY29uZmlnKHNl
bGYsIGRvdF9jb25maWcpOgorICAgICAgICAiIiJSdW4gc2F2ZWRlZmNvbmZpZy4KKworICAgICAg
ICBkb3RfY29uZmlnOiAuY29uZmlnIGZpbGUgZm9yIGlucHV0CisgICAgICAgIHJldHVybmNvZGU6
IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIiCisgICAg
ICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1zYXZlZGVmY29uZmlnJywgb3V0X2ZpbGU9J2Rl
ZmNvbmZpZycpCisKKyAgICBkZWYgbGlzdG5ld2NvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUp
OgorICAgICAgICAiIiJSdW4gbGlzdG5ld2NvbmZpZy4KKworICAgICAgICBkb3RfY29uZmlnOiAu
Y29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2UgKG9wdGlvbmFsKQorICAg
ICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisg
ICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tbGlzdG5ld2NvbmZp
ZycsIGRvdF9jb25maWc9ZG90X2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dF9maWxlPU5vbmUpCisKKyAgICAjIGNoZWNrZXJzCisgICAgZGVmIF9yZWFkX2FuZF9jb21w
YXJlKHNlbGYsIGNvbXBhcmUsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ29tcGFyZSB0aGUgcmVz
dWx0IHdpdGggZXhwZWN0YXRpb24uCisKKyAgICAgICAgY29tcGFyZTogZnVuY3Rpb24gdG8gY29t
cGFyZSB0aGUgcmVzdWx0IHdpdGggZXhwZWN0YXRpb24KKyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUg
dGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQorICAgICAgICAiIiIKKyAgICAgICAgd2l0
aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgZXhwZWN0ZWQpKSBhcyBmOgorICAg
ICAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGYucmVhZCgpCisgICAgICAgIHJldHVybiBjb21wYXJl
KHNlbGYsIGV4cGVjdGVkX2RhdGEpCisKKyAgICBkZWYgX2NvbnRhaW5zKHNlbGYsIGF0dHIsIGV4
cGVjdGVkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYW5kX2NvbXBhcmUoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgcywgZTogZ2V0YXR0cihzLCBhdHRy
KS5maW5kKGUpID49IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBl
Y3RlZCkKKworICAgIGRlZiBfbWF0Y2hlcyhzZWxmLCBhdHRyLCBleHBlY3RlZCk6CisgICAgICAg
IHJldHVybiBzZWxmLl9yZWFkX2FuZF9jb21wYXJlKGxhbWJkYSBzLCBlOiBnZXRhdHRyKHMsIGF0
dHIpID09IGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVk
KQorCisgICAgZGVmIGNvbmZpZ19jb250YWlucyhzZWxmLCBleHBlY3RlZCk6CisgICAgICAgICIi
IkNoZWNrIGlmIHJlc3VsdGVkIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgZXhwZWN0ZWQgZGF0YS4K
KworICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRh
CisgICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IGNvbnRhaW5zIHRoZSBleHBlY3Rl
ZCBkYXRhLCBGYWxzZSBvdGhlcndpc2UKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxm
Ll9jb250YWlucygnY29uZmlnJywgZXhwZWN0ZWQpCisKKyAgICBkZWYgY29uZmlnX21hdGNoZXMo
c2VsZiwgZXhwZWN0ZWQpOgorICAgICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBjb25maWd1cmF0
aW9uIGV4YWN0bHkgbWF0Y2hlcyBleHBlY3RlZCBkYXRhLgorCisgICAgICAgIGV4cGVjdGVkOiBm
aWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgcmV0dXJuY29kZTog
VHJ1ZSBpZiByZXN1bHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNl
CisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlcygnY29uZmlnJywgZXhw
ZWN0ZWQpCisKKyAgICBkZWYgc3Rkb3V0X2NvbnRhaW5zKHNlbGYsIGV4cGVjdGVkKToKKyAgICAg
ICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3Rkb3V0IGNvbnRhaW5zIGV4cGVjdGVkIGRhdGEuCisK
KyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQor
ICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0aGUgZXhwZWN0ZWQg
ZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5f
Y29udGFpbnMoJ3N0ZG91dCcsIGV4cGVjdGVkKQorCisgICAgZGVmIHN0ZG91dF9tYXRjaGVzKHNl
bGYsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3Rkb3V0IGV4YWN0
bHkgbWF0Y2hlcyBleHBlY3RlZCBkYXRhLgorCisgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQg
Y29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiBy
ZXN1bHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAg
ICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlcygnc3Rkb3V0JywgZXhwZWN0ZWQpCisK
KyAgICBkZWYgc3RkZXJyX2NvbnRhaW5zKHNlbGYsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ2hl
Y2sgaWYgcmVzdWx0ZWQgc3RkZXJyIGNvbnRhaW5zIGV4cGVjdGVkIGRhdGEuCisKKyAgICAgICAg
ZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQorICAgICAgICBy
ZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFs
c2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fY29udGFpbnMo
J3N0ZGVycicsIGV4cGVjdGVkKQorCisgICAgZGVmIHN0ZGVycl9tYXRjaGVzKHNlbGYsIGV4cGVj
dGVkKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3RkZXJyIGV4YWN0bHkgbWF0Y2hl
cyBleHBlY3RlZCBkYXRhLgorCisgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMg
dGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgbWF0
Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlcygnc3RkZXJyJywgZXhwZWN0ZWQpCisKKworQHB5dGVz
dC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIGNvbmYocmVxdWVzdCk6CisgICAgIiIiQ3Jl
YXRlIGEgQ29uZiBpbnN0YW5jZSBhbmQgcHJvdmlkZSBpdCB0byB0ZXN0IGZ1bmN0aW9ucy4iIiIK
KyAgICByZXR1cm4gQ29uZihyZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwLi5lYmRiM2ZmZAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwpAQCAtMCwwICsxLDYzIEBACisjIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgZGVwZW5kcyBvbiBpdHNlbGYKKwor
Y29uZmlnIEEKKwlib29sICJBIgorCWRlcGVuZHMgb24gQQorCisjIHNlbGVjdCBpdHNlbGYKKwor
Y29uZmlnIEIKKwlib29sCisJc2VsZWN0IEIKKworIyBkZXBlbmRzIG9uIGVhY2ggb3RoZXIKKwor
Y29uZmlnIEMxCisJYm9vbCAiQzEiCisJZGVwZW5kcyBvbiBDMgorCitjb25maWcgQzIKKwlib29s
ICJDMiIKKwlkZXBlbmRzIG9uIEMxCisKKyMgZGVwZW5kcyBvbiBhbmQgc2VsZWN0CisKK2NvbmZp
ZyBEMQorCWJvb2wgIkQxIgorCWRlcGVuZHMgb24gRDIKKwlzZWxlY3QgRDIKKworY29uZmlnIEQy
CisJYm9vbAorCisjIGRlcGVuZHMgb24gYW5kIGltcGx5CisKK2NvbmZpZyBFMQorCWJvb2wgIkUx
IgorCWRlcGVuZHMgb24gRTIKKwlpbXBseSBFMgorCitjb25maWcgRTIKKwlib29sICJFMiIKKwor
IyBwcm9wZXJ0eQorCitjb25maWcgRjEKKwlib29sICJGMSIKKwlkZWZhdWx0IEYyCisKK2NvbmZp
ZyBGMgorCWJvb2wgIkYyIgorCWRlcGVuZHMgb24gRjEKKworIyBtZW51CisKK21lbnUgIm1lbnUg
ZGVwZW5kaW5nIG9uIGl0cyBjb250ZW50IgorCWRlcGVuZHMgb24gRworCitjb25maWcgRworCWJv
b2wgIkciCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwLi41ZjM4MjFiNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKQEAgLTAsMCArMSwxMCBAQAor
IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitEZXRlY3QgcmVjdXJzaXZl
IGRlcGVuZGVuY3kgZXJyb3IuCisKK1JlY3Vyc2l2ZSBkZXBlbmRlbmN5IHNob3VsZCBiZSB0cmVh
dGVkIGFzIGFuIGVycm9yLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25m
Lm9sZGFza2NvbmZpZygpID09IDEKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFpbnMoJ2V4
cGVjdGVkX3N0ZGVycicpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwLi44NDY3OWIxMAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyCkBAIC0wLDAg
KzEsMzggQEAKK0tjb25maWc6MTE6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVk
IQorS2NvbmZpZzoxMToJc3ltYm9sIEIgaXMgc2VsZWN0ZWQgYnkgQgorRm9yIGEgcmVzb2x1dGlv
biByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vi
c2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2Nv
bmZpZzo1OmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCEKK0tjb25maWc6NToJ
c3ltYm9sIEEgZGVwZW5kcyBvbiBBCitGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50
YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CitzdWJzZWN0aW9uICJLY29uZmlnIHJl
Y3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIgorCitLY29uZmlnOjE3OmVycm9yOiByZWN1
cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCEKK0tjb25maWc6MTc6CXN5bWJvbCBDMSBkZXBlbmRz
IG9uIEMyCitLY29uZmlnOjIxOglzeW1ib2wgQzIgZGVwZW5kcyBvbiBDMQorRm9yIGEgcmVzb2x1
dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAor
c3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKwor
S2NvbmZpZzozMjplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmln
OjMyOglzeW1ib2wgRDIgaXMgc2VsZWN0ZWQgYnkgRDEKK0tjb25maWc6Mjc6CXN5bWJvbCBEMSBk
ZXBlbmRzIG9uIEQyCitGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1
aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CitzdWJzZWN0aW9uICJLY29uZmlnIHJlY3Vyc2l2ZSBk
ZXBlbmRlbmN5IGxpbWl0YXRpb25zIgorCitLY29uZmlnOjM3OmVycm9yOiByZWN1cnNpdmUgZGVw
ZW5kZW5jeSBkZXRlY3RlZCEKK0tjb25maWc6Mzc6CXN5bWJvbCBFMSBkZXBlbmRzIG9uIEUyCitL
Y29uZmlnOjQyOglzeW1ib2wgRTIgaXMgaW1wbGllZCBieSBFMQorRm9yIGEgcmVzb2x1dGlvbiBy
ZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2Vj
dGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZp
Zzo2MDplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmlnOjYwOglz
eW1ib2wgRyBkZXBlbmRzIG9uIEcKK0ZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRh
dGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQKK3N1YnNlY3Rpb24gIktjb25maWcgcmVj
dXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiCisKK0tjb25maWc6NTE6ZXJyb3I6IHJlY3Vy
c2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQorS2NvbmZpZzo1MToJc3ltYm9sIEYyIGRlcGVuZHMg
b24gRjEKK0tjb25maWc6NDk6CXN5bWJvbCBGMSBkZWZhdWx0IHZhbHVlIGNvbnRhaW5zIEYyCitG
b3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFu
Z3VhZ2UudHh0CitzdWJzZWN0aW9uICJLY29uZmlnIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0
YXRpb25zIgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJz
aXZlX2luYy9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZl
X2luYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5jNmY0YWRl
YwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZwpAQCAtMCwwICsxLDIgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAtb25seQorc291cmNlICJLY29uZmlnLmluYzEiCmRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMSBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wMWNiZjBkNgotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
Zy5pbmMxCkBAIC0wLDAgKzEsNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu
MC1vbmx5CisKKworCitzb3VyY2UgIktjb25maWcuaW5jMiIKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjgyMzUxMDc1Ci0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmlu
YzIKQEAgLTAsMCArMSw0IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u
bHkKKworCitzb3VyY2UgIktjb25maWcuaW5jMyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmM2ZjRhZGVjCi0tLSAvZGV2L251bGwKKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMKQEAg
LTAsMCArMSwyIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKK3Nv
dXJjZSAiS2NvbmZpZy5pbmMxIgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAuLjI3YWExODk1Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDExIEBA
CisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0RldGVjdCByZWN1cnNp
dmUgaW5jbHVzaW9uIGVycm9yLgorCitJZiByZWN1cnNpdmUgaW5jbHVzaW9uIGlzIGRldGVjdGVk
LCBpdCBzaG91bGQgZmFpbCB3aXRoIGVycm9yIG1lc3NhZ2VzLgorIiIiCisKKworZGVmIHRlc3Qo
Y29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgIT0gMAorICAgIGFzc2VydCBj
b25mLnN0ZGVycl9jb250YWlucygnZXhwZWN0ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRl
cnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmIwNzBhMzFmCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9l
eHBlY3RlZF9zdGRlcnIKQEAgLTAsMCArMSw2IEBACitSZWN1cnNpdmUgaW5jbHVzaW9uIGRldGVj
dGVkLgorSW5jbHVzaW9uIHBhdGg6CisgIGN1cnJlbnQgZmlsZSA6IEtjb25maWcuaW5jMQorICBp
bmNsdWRlZCBmcm9tOiBLY29uZmlnLmluYzM6MgorICBpbmNsdWRlZCBmcm9tOiBLY29uZmlnLmlu
YzI6NAorICBpbmNsdWRlZCBmcm9tOiBLY29uZmlnLmluYzE6NQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAuLjU2OThhNDAxCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZwpAQCAtMCwwICsxLDI1IEBACisjIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK2NvbmZpZyBNT0RVTEVTCisJZGVmX2Jvb2wg
eQorCW9wdGlvbiBtb2R1bGVzCisKK2Nob2ljZQorCXByb21wdCAiQ2hvaWNlIgorCitjb25maWcg
Q0hPSUNFX1ZBTDAKKwl0cmlzdGF0ZSAiQ2hvaWNlIDAiCisKK2NvbmZpZyBDSE9JVkVfVkFMMQor
CXRyaXN0YXRlICJDaG9pY2UgMSIKKworZW5kY2hvaWNlCisKK2Nob2ljZQorCXByb21wdCAiQW5v
dGhlciBjaG9pY2UiCisJZGVwZW5kcyBvbiBDSE9JQ0VfVkFMMAorCitjb25maWcgRFVNTVkKKwli
b29sICJkdW1teSIKKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwLi5mZmVhNmIxMQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgorRG8gbm90IGFmZmVjdCB1c2VyLWFzc2ln
bmVkIGNob2ljZSB2YWx1ZSBieSBhbm90aGVyIGNob2ljZS4KKworSGFuZGxpbmcgb2Ygc3RhdGUg
ZmxhZ3MgZm9yIGNob2ljZXMgaXMgY29tcGxlY2F0ZWQuICBJbiBvbGQgZGF5cywKK3RoZSBkZWZj
b25maWcgcmVzdWx0IG9mIGEgY2hvaWNlIGNvdWxkIGJlIGFmZmVjdGVkIGJ5IGFub3RoZXIgY2hv
aWNlCitpZiB0aG9zZSBjaG9pY2VzIGludGVyYWN0IGJ5ICdkZXBlbmRzIG9uJywgJ3NlbGVjdCcs
IGV0Yy4KKworUmVsYXRlZCBMaW51eCBjb21taXQ6IGZiZTk4YmI5ZWQzZGFlMjNlMzIwYzZiMTEz
ZTM1ZjEyOTUzOGQxNGEKKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25m
LmRlZmNvbmZpZygnZGVmY29uZmlnJykgPT0gMAorICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250
YWlucygnZXhwZWN0ZWRfY29uZmlnJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
aW50ZXJfY2hvaWNlL2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MC4uMTYyYzQxNDgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2ludGVyX2Nob2ljZS9kZWZjb25maWcKQEAgLTAsMCArMSBAQAorQ09ORklHX0NIT0lDRV9WQUww
PXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4
cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4
cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNWRjZWVm
YjAKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2No
b2ljZS9leHBlY3RlZF9jb25maWcKQEAgLTAsMCArMSw0IEBACitDT05GSUdfTU9EVUxFUz15CitD
T05GSUdfQ0hPSUNFX1ZBTDA9eQorIyBDT05GSUdfQ0hPSVZFX1ZBTDEgaXMgbm90IHNldAorQ09O
RklHX0RVTU1ZPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2No
b2ljZV93aXRoX2RlcC9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hv
aWNlX3dpdGhfZGVwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu
LjEyNzczMWMwCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9u
ZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcKQEAgLTAsMCArMSwzOSBAQAorIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitjb25maWcgQQorCWJvb2wgIkEiCisJaGVscAorCSAg
VGhpcyBpcyBhIG5ldyBzeW1ib2wuCisKK2Nob2ljZQorCXByb21wdCAiQ2hvaWNlID8iCisJZGVw
ZW5kcyBvbiBBCisJaGVscAorCSAgImRlcGVuZHMgb24gQSIgaGFzIGJlZW4gbmV3bHkgYWRkZWQu
CisKK2NvbmZpZyBDSE9JQ0VfQgorCWJvb2wgIkNob2ljZSBCIgorCitjb25maWcgQ0hPSUNFX0MK
Kwlib29sICJDaG9pY2UgQyIKKwloZWxwCisJICBUaGlzIGlzIGEgbmV3IHN5bWJvbCwgc28gc2hv
dWxkIGJlIGFza2VkLgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UyID8i
CisKK2NvbmZpZyBDSE9JQ0VfRAorCWJvb2wgIkNob2ljZSBEIgorCitjb25maWcgQ0hPSUNFX0UK
Kwlib29sICJDaG9pY2UgRSIKKworY29uZmlnIENIT0lDRV9GCisJYm9vbCAiQ2hvaWNlIEYiCisJ
ZGVwZW5kcyBvbiBBCisJaGVscAorCSAgVGhpcyBpcyBhIG5ldyBzeW1ib2wsIHNvIHNob3VsZCBi
ZSBhc2tlZC4KKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAuLmZlOWQzMjI1Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5CkBAIC0wLDAg
KzEsMTUgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgorQXNrIG5l
dyBjaG9pY2UgdmFsdWVzIHdoZW4gdGhleSBiZWNvbWUgdmlzaWJsZS4KKworSWYgbmV3IGNob2lj
ZSB2YWx1ZXMgYXJlIGFkZGVkIHdpdGggbmV3IGRlcGVuZGVuY3ksIGFuZCB0aGV5IGJlY29tZQor
dmlzaWJsZSBkdXJpbmcgdXNlciBjb25maWd1cmF0aW9uLCBvbGRjb25maWcgc2hvdWxkIHJlY29n
bml6ZSB0aGVtCithcyAoTkVXKSwgYW5kIGFzayB0aGUgdXNlciBmb3IgY2hvaWNlLgorCitSZWxh
dGVkIExpbnV4IGNvbW1pdDogNWQwOTU5OGQ0ODhmMDgxZTNiZTIzZjg4NWVkNjVjYmJlMmQwNzNi
NQorIiIiCisKKworZGVmIHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkY29uZmlnKCdj
b25maWcnLCAneScpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4cGVj
dGVkX3N0ZG91dCcpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19j
aG9pY2Vfd2l0aF9kZXAvY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hv
aWNlX3dpdGhfZGVwL2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4u
NDdlZjk1ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25l
d19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnCkBAIC0wLDAgKzEsMyBAQAorQ09ORklHX0NIT0lDRV9C
PXkKKyMgQ09ORklHX0NIT0lDRV9EIGlzIG5vdCBzZXQKK0NPTkZJR19DSE9JQ0VfRT15CmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhw
ZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhf
ZGVwL2V4cGVjdGVkX3N0ZG91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4u
NzRkYzBiY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25l
d19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0CkBAIC0wLDAgKzEsMTAgQEAKK0EgKEEp
IFtOL3kvP10gKE5FVykgeQorICBDaG9pY2UgPworICA+IDEuIENob2ljZSBCIChDSE9JQ0VfQikK
KyAgICAyLiBDaG9pY2UgQyAoQ0hPSUNFX0MpIChORVcpCisgIGNob2ljZVsxLTI/XTogCitDaG9p
Y2UyID8KKyAgMS4gQ2hvaWNlIEQgKENIT0lDRV9EKQorPiAyLiBDaG9pY2UgRSAoQ0hPSUNFX0Up
CisgIDMuIENob2ljZSBGIChDSE9JQ0VfRikgKE5FVykKK2Nob2ljZVsxLTM/XTogCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29u
ZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2Nv
bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNDc2N2FhYjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91
bm1ldC9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEdQTC0yLjAKKworY29uZmlnIEEKKwlib29sICJBIgorCitjaG9pY2UKKwlwcm9tcHQgIkNob2lj
ZSA/IgorCWRlcGVuZHMgb24gQQorCitjb25maWcgQ0hPSUNFX0IKKwlib29sICJDaG9pY2UgQiIK
KworY29uZmlnIENIT0lDRV9DCisJYm9vbCAiQ2hvaWNlIEMiCisKK2VuZGNob2ljZQpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19p
bml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1l
dC9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uZmZkNDY5
ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRl
X2lmX2RlcF91bm1ldC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDIwIEBACisjIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0RvIG5vdCB3cml0ZSBjaG9pY2UgdmFsdWVzIHRv
IC5jb25maWcgaWYgdGhlIGRlcGVuZGVuY3kgaXMgdW5tZXQuCisKKyIjIENPTkZJR18uLi4gaXMg
bm90IHNldCIgc2hvdWxkIG5vdCBiZSB3cml0dGVuIGludG8gdGhlIC5jb25maWcgZmlsZQorZm9y
IHN5bWJvbHMgd2l0aCB1bm1ldCBkZXBlbmRlbmN5LgorCitUaGlzIHdhcyBub3Qgd29ya2luZyBj
b3JyZWN0bHkgZm9yIGNob2ljZSB2YWx1ZXMgYmVjYXVzZSBjaG9pY2UgbmVlZHMKK2EgYml0IGRp
ZmZlcmVudCBzeW1ib2wgY29tcHV0YXRpb24uCisKK1RoaXMgY2hlY2tzIHRoYXQgbm8gdW5uZWVk
ZWQgIiMgQ09GSUdfLi4uIGlzIG5vdCBzZXQiIGlzIGNvbnRhaW5lZCBpbgordGhlIC5jb25maWcg
ZmlsZS4KKworUmVsYXRlZCBMaW51eCBjb21taXQ6IGNiNjdhYjJjZDJiOGFiZDk2NTAyOTJjOTg2
Yzc5OTAxZTMwNzNhNTkKKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25m
Lm9sZGFza2NvbmZpZygnY29uZmlnJywgJ24nKSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuY29uZmln
X21hdGNoZXMoJ2V4cGVjdGVkX2NvbmZpZycpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAuLmFiZDI4MGUyCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvY29uZmlnCkBAIC0wLDAgKzEg
QEAKK0NPTkZJR19BPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9f
d3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNDczMjI4ODEKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25m
aWcKQEAgLTAsMCArMSw1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERP
IE5PVCBFRElULgorIyBNYWluIG1lbnUKKyMKKyMgQ09ORklHX0EgaXMgbm90IHNldApkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9L
Y29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVu
Yy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5iYWEzMjg4Mgot
LS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9i
dWlsdGluX2Z1bmMvS2NvbmZpZwpAQCAtMCwwICsxLDI3IEBACisjIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wCisKKyMgJ2luZm8nIHByaW50cyB0aGUgYXJndW1lbnQgdG8gc3Rkb3V0
LgorJChpbmZvLGhlbGxvIHdvcmxkIDApCisKKyMgJ3dhcm5pbmctaWYnLCBpZiB0aGUgZmlyc3Qg
YXJndW1lbnQgaXMgeSwgc2VuZHMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzdGRlcnIsCisjIGFu
ZCB0aGUgbWVzc2FnZSBpcyBwcmVmaXhlZCB3aXRoIHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQg
bGluZSBudW1iZXIuCiskKHdhcm5pbmctaWYseSxoZWxsbyB3b3JsZCAxKQorCisjICdlcnJvci1p
ZicgaXMgc2ltaWxhciwgYnV0IGl0IHRlcm1pbmF0ZXMgdGhlIHBhcnNpbmcgaW1tZWRpYXRlbHku
CisjIFRoZSBmb2xsb3dpbmcgaXMganVzdCBuby1vcCBzaW5jZSB0aGUgZmlyc3QgYXJndW1lbnQg
aXMgbm90IHkuCiskKGVycm9yLWlmLG4sdGhpcyBzaG91bGQgbm90IGJlIHByaW50ZWQpCisKKyMg
U2hvcnRoYW5kCit3YXJuaW5nID0gJCh3YXJuaW5nLWlmLHksJCgxKSkKKworIyAnc2hlbGwnIGV4
ZWN1dGVzIGEgY29tbWFuZCwgYW5kIHJldHVybnMgaXRzIHN0ZG91dC4KKyQod2FybmluZywkKHNo
ZWxsLGVjaG8gaGVsbG8gd29ybGQgMykpCisKKyMgRXZlcnkgbmV3bGluZSBpbiB0aGUgb3V0cHV0
IGlzIHJlcGxhY2VkIHdpdGggYSBzcGFjZSwKKyMgYnV0IGFueSB0cmFpbGluZyBuZXdsaW5lcyBh
cmUgZGVsZXRlZC4KKyQod2FybmluZywkKHNoZWxsLHByaW50ZiAnaGVsbG9cbndvcmxkXG5cbjRc
blxuXG4nKSkKKworIyAnZmlsZW5hbWUnIGlzIGV4cGFuZGVkIHRvIHRoZSBjdXJyZW50bHkgcGFy
c2VkIGZpbGUgbmFtZSwKKyMgJ2xpbmVubycgdG8gdGhlIGxpbmUgbnVtYmVyLgorJCh3YXJuaW5n
LGZpbGVuYW1lPSQoZmlsZW5hbWUpKQorJCh3YXJuaW5nLGxpbmVubz0kKGxpbmVubykpCmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5j
L19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0
aW5fZnVuYy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4u
MmU1M2JhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3By
ZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOSBAQAorIyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitCdWlsdC1pbiBmdW5jdGlvbiB0ZXN0
cy4KKyIiIgorCitkZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWco
KSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQn
KQorICAgIGFzc2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVu
Yy9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3Mv
YnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uMzNlYTljYTMKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgpAQCAtMCwwICsx
LDUgQEAKK0tjb25maWc6ODogaGVsbG8gd29ybGQgMQorS2NvbmZpZzoxODogaGVsbG8gd29ybGQg
MworS2NvbmZpZzoyMjogaGVsbG8gd29ybGQgIDQKK0tjb25maWc6MjY6IGZpbGVuYW1lPUtjb25m
aWcKK0tjb25maWc6Mjc6IGxpbmVubz0yNwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uODJkZTNhN2UKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9m
dW5jL2V4cGVjdGVkX3N0ZG91dApAQCAtMCwwICsxIEBACitoZWxsbyB3b3JsZCAwCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5z
aW9uL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3Vs
YXJfZXhwYW5zaW9uL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu
LjY4Mzg5OTdjCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9w
cmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorIyBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitYID0gJChZKQorWSA9ICQoWCkKKyQo
aW5mbyAkKFgpKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjQxOWJkYTNlCi0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9f
X2luaXRfXy5weQpAQCAtMCwwICsxLDExIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wCisiIiIKK0RldGVjdCBjaXJjdWxhciB2YXJpYWJsZSBleHBhbnNpb24uCisKK0lmIGEg
cmVjdXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUgcmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFs
bHkpLAoraXQgc2hvdWxkIGZhaWwgd2l0aCBhbiBlcnJvciBtZXNzYWdlLgorIiIiCisKK2RlZiB0
ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpICE9IDAKKyAgICBhc3Nl
cnQgY29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhw
ZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1
bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAuLmNkZTY4ZmE5Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIKQEAg
LTAsMCArMSBAQAorS2NvbmZpZzo1OiBSZWN1cnNpdmUgdmFyaWFibGUgJ1gnIHJlZmVyZW5jZXMg
aXRzZWxmIChldmVudHVhbGx5KQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9w
cmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwLi40ZTNmNDQ0NAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZwpAQCAtMCwwICsxLDQ0IEBACisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgU2hvcnRoYW5kCit3YXJuaW5nID0gJCh3YXJu
aW5nLWlmLHksJCgxKSkKKworIyBZb3UgY2FuIG5vdCBwYXNzIGNvbW1hcyBkaXJlY3RseSB0byBh
IGZ1bmN0aW9uIHNpbmNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMKKyMgZGVsaW1pdGVycy4gWW91IGNh
biB1c2UgdGhlIGZvbGxvd2luZyB0cmljayB0byBkbyBzby4KK2NvbW1hICAgOj0gLAorJCh3YXJu
aW5nLGhlbGxvJChjb21tYSkgd29ybGQpCisKKyMgTGlrZSBNYWtlLCBzaW5nbGUgcXVvdGVzLCBk
b3VibGUgcXVvdGVzLCBzcGFjZXMgYXJlIHRyZWF0ZWQgdmVyYmF0aW0uCisjIFRoZSBmb2xsb3dp
bmcgcHJpbnRzIHRoZSB0ZXh0IGFzLWlzLgorJCh3YXJuaW5nLCAgJyAiICciICAgJyAnJycgIici
KQorCisjIFVubGlrZSBNYWtlLCAnJCcgaGFzIHNwZWNpYWwgbWVhbmluZyBvbmx5IHdoZW4gaXQg
aXMgZm9sbG93ZWQgYnkgJygnLgorIyBObyBuZWVkIHRvIGVzY2FwZSAnJCcgaXRzZWxmLgorJCh3
YXJuaW5nLCQpCiskKHdhcm5pbmcsJCQpCiskIDo9IDEKKyQod2FybmluZywkKCQpKQorCisjIFlv
dSBuZWVkIGEgdHJpY2sgdG8gZXNjYXBlICckJyBmb2xsb3dlZCBieSAnKCcKKyMgVGhlIGZvbGxv
d2luZyBzaG91bGQgcHJpbnQgIiQoWCkiLiBJdCBzaG91bGQgbm90IGJlIGV4cGFuZGVkIGZ1cnRo
ZXIuCitkb2xsYXIgOj0gJAorJCh3YXJuaW5nLCQoZG9sbGFyKShYKSkKKworIyBZb3UgbmVlZCBh
IHRyaWNrIHRvIHRyZWF0IHVuYmFsYW5jZWQgcGFyZW50aGVzZXMuCisjIFRoZSBmb2xsb3dpbmcg
c2hvdWxkIHByaW50ICIoIi4KK2xlZnRfcGFyZW4gOj0gKAorJCh3YXJuaW5nLCQobGVmdF9wYXJl
bikpCisKKyMgQSBzaW1wbGUgZXhwYW5kZWQgc2hvdWxkIG5vdCBiZSBleHBhbmRlZCBtdWx0aXBs
ZSB0aW1lcy4KKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiLiBJdCBzaG91bGQg
bm90IGJlIGV4cGFuZGVkIGZ1cnRoZXIuCitZIDo9ICQoZG9sbGFyKShYKQorJCh3YXJuaW5nLCQo
WSkpCisKKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiIGFzIHdlbGwuCitZID0g
JChkb2xsYXIpKFgpCiskKHdhcm5pbmcsJChZKSkKKworIyBUaGUgZm9sbG93aW5nIHNob3VsZCBw
cmludCAiJCgiLgorIyBJdCBzaG91bGQgbm90IGJlIGVtaXQgInVudGVybWluYXRlZCByZWZlcmVu
Y2UiIGVycm9yLgordW50ZXJtaW5hdGVkIDo9ICQoZG9sbGFyKSgKKyQod2FybmluZywkKHVudGVy
bWluYXRlZCkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nl
c3MvZXNjYXBlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL2VzY2FwZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MC4uN2VlOGU3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOCBAQAorIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitFc2NhcGUgc2VxdWVuY2UgdGVzdHMuCisi
IiIKKworZGVmIHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0g
MAorICAgIGFzc2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBl
Y3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBl
L2V4cGVjdGVkX3N0ZGVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMWMw
MDk1N2QKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycgpAQCAtMCwwICsxLDEwIEBACitLY29uZmlnOjk6
IGhlbGxvLCB3b3JsZAorS2NvbmZpZzoxMzogICAnICIgJyIgICAnICcnJyAiJyIKK0tjb25maWc6
MTc6ICQKK0tjb25maWc6MTg6ICQkCitLY29uZmlnOjIwOiAxCitLY29uZmlnOjI1OiAkKFgpCitL
Y29uZmlnOjMwOiAoCitLY29uZmlnOjM1OiAkKFgpCitLY29uZmlnOjM5OiAkKFgpCitLY29uZmln
OjQ0OiAkKApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNz
L3ZhcmlhYmxlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3Mv
dmFyaWFibGUvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uOWNl
MmY5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvS2NvbmZpZwpAQCAtMCwwICsxLDUzIEBACisjIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgU2hvcnRoYW5kCit3YXJuaW5nID0gJCh3YXJuaW5nLWlm
LHksJCgxKSkKKworIyBTaW1wbHkgZXhwYW5kZWQgdmFyaWFibGUuCitYIDo9IDEKK1NJTVBMRSA6
PSAkKFgpCitYIDo9IDIKKyQod2FybmluZyxTSU1QTEUgPSAkKFNJTVBMRSkpCisKKyMgUmVjdXJz
aXZlbHkgZXhwYW5kZWQgdmFyaWFibGUuCitYIDo9IDEKK1JFQ1VSU0lWRSA9ICQoWCkKK1ggOj0g
MgorJCh3YXJuaW5nLFJFQ1VSU0lWRSA9ICQoUkVDVVJTSVZFKSkKKworIyBBcHBlbmQgc29tZXRo
aW5nIHRvIGEgc2ltcGx5IGV4cGFuZGVkIHZhcmlhYmxlLgorWSA6PSAzCitTSU1QTEUgKz0gJChZ
KQorWSA6PSA0CiskKHdhcm5pbmcsU0lNUExFID0gJChTSU1QTEUpKQorCisjIEFwcGVuZCBzb21l
dGhpbmcgdG8gYSByZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJsZS4KK1kgOj0gMworUkVDVVJT
SVZFICs9ICQoWSkKK1kgOj0gNAorJCh3YXJuaW5nLFJFQ1VSU0lWRSA9ICQoUkVDVVJTSVZFKSkK
KworIyBVc2UgKz0gb3BlcmF0b3IgdG8gYW4gdW5kZWZpbmVkIHZhcmlhYmxlLgorIyBUaGlzIHdv
cmtzIGFzIGEgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUuCitZIDo9IDMKK1VOREVGSU5F
RF9WQVJJQUJMRSArPSAkKFkpCitZIDo9IDQKKyQod2FybmluZyxVTkRFRklORURfVkFSSUFCTEUg
PSAkKFVOREVGSU5FRF9WQVJJQUJMRSkpCisKKyMgWW91IGNhbiB1c2UgdmFyaWFibGUgcmVmZXJl
bmNlcyBmb3IgdGhlIGxlZnRoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQuCitYIDo9
IEEKK1kgOj0gQgorJChYKSQoWSkgOj0gNQorJCh3YXJuaW5nLEFCID0gJChBQikpCisKKyMgVXNl
ci1kZWZpbmVkIGZ1bmN0aW9uLgorZ3JlZXRpbmcgPSAkKDEpLCBteSBuYW1lIGlzICQoMikuCisk
KHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2huKSkKKworIyBUaGUgbnVtYmVyIG9mIGFyZ3Vt
ZW50cyBpcyBub3QgY2hlY2tlZCBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4KKyMgSWYgc29t
ZSBhcmd1bWVudHMgYXJlIG9wdGlvbmFsLCBpdCBpcyB1c2VmdWwgdG8gcGFzcyBmZXdlciBwYXJh
bWV0ZXJzLgorIyAkKDIpIHdpbGwgYmUgYmxhbmsgaW4gdGhpcyBjYXNlLgorJCh3YXJuaW5nLCQo
Z3JlZXRpbmcsSGVsbG8pKQorCisjIFVucmVmZXJlbmNlZCBwYXJhbWV0ZXJzIGFyZSBqdXN0IGln
bm9yZWQuCiskKHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2huLGlnbm9yZWQsaWdub3JlZCkp
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFi
bGUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFy
aWFibGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmU4
OGIxNzA4Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVw
cm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOCBAQAorIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitWYXJpYWJsZSBhbmQgdXNlci1kZWZpbmVkIGZ1
bmN0aW9uIHRlc3RzLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9s
ZGFza2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0
ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJv
Y2Vzcy92YXJpYWJsZS9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwLi5hNDg0MWMzZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBlY3RlZF9zdGRlcnIKQEAgLTAs
MCArMSw5IEBACitLY29uZmlnOjEwOiBTSU1QTEUgPSAxCitLY29uZmlnOjE2OiBSRUNVUlNJVkUg
PSAyCitLY29uZmlnOjIyOiBTSU1QTEUgPSAxIDMKK0tjb25maWc6Mjg6IFJFQ1VSU0lWRSA9IDIg
NAorS2NvbmZpZzozNTogVU5ERUZJTkVEX1ZBUklBQkxFID0gNAorS2NvbmZpZzo0MTogQUIgPSA1
CitLY29uZmlnOjQ1OiBIZWxsbywgbXkgbmFtZSBpcyBKb2huLgorS2NvbmZpZzo1MDogSGVsbG8s
IG15IG5hbWUgaXMgLgorS2NvbmZpZzo1MzogSGVsbG8sIG15IG5hbWUgaXMgSm9obi4KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0LmluaSBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvcHl0ZXN0LmluaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMC4uODVkN2NlOGUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL3B5dGVzdC5pbmkKQEAgLTAsMCArMSw3IEBACitbcHl0ZXN0XQorYWRkb3B0cyA9IC0tdmVy
Ym9zZQorCisjIFB5dGVzdCByZXF1aXJlcyB0aGF0IHRlc3QgZmlsZXMgaGF2ZSB1bmlxdWUgbmFt
ZXMsIGJlY2F1c2UgcHl0ZXN0IGltcG9ydHMKKyMgdGhlbSBhcyB0b3AtbGV2ZWwgbW9kdWxlcy4g
IEl0IGlzIHNpbGx5IHRvIHByZWZpeCBvciBzdWZmaXggYSB0ZXN0IGZpbGUgd2l0aAorIyB0aGUg
ZGlyZWN0b3J5IG5hbWUgdGhhdCBjb250YWlucyBpdC4gIFVzZSBfX2luaXRfXy5weSBmb3IgYWxs
IHRlc3QgZmlsZXMuCitweXRob25fZmlsZXMgPSBfX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjgzNTBkZTdmCi0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZwpAQCAt
MCwwICsxLDM1IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK2Nob2lj
ZQorCXByb21wdCAiY2hvaWNlIgorCitjb25maWcgQQorCWJvb2wgIkEiCisKK2NvbmZpZyBCCisJ
Ym9vbCAiQiIKKworaWYgQgorY2hvaWNlCisJcHJvbXB0ICJzdWIgY2hvaWNlIgorCitjb25maWcg
QworCWJvb2wgIkMiCisKK2NvbmZpZyBECisJYm9vbCAiRCIKKworaWYgRAorY2hvaWNlCisJcHJv
bXB0ICJzdWJzdWIgY2hvaWNlIgorCitjb25maWcgRQorCWJvb2wgIkUiCisKK2VuZGNob2ljZQor
ZW5kaWYgIyBECisKK2VuZGNob2ljZQorZW5kaWYgIyBCCisKK2VuZGNob2ljZQpkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18u
cHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRf
Xy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uOWU0YjJkYjUKLS0tIC9k
ZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2lj
ZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE3IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCisiIiIKK1NldCByYW5kb20gdmFsdWVzIHJlY3Vyc2l2ZWx5IGluIG5lc3RlZCBj
aG9pY2VzLgorCitLY29uZmlnIGNhbiBjcmVhdGUgYSBjaG9pY2UtaW4tY2hvaWNlIHN0cnVjdHVy
ZSBieSB1c2luZyAnaWYnIHN0YXRlbWVudC4KK3JhbmRjb25maWcgc2hvdWxkIGNvcnJlY3RseSBz
ZXQgcmFuZG9tIGNob2ljZSB2YWx1ZXMuCisKK1JlbGF0ZWQgTGludXggY29tbWl0OiAzYjlhMTll
MDg5NjBlNWNkYWQ1MjUzOTk4NjM3NjUzZTU5MmEzYzI5CisiIiIKKworCitkZWYgdGVzdChjb25m
KToKKyAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgIGFzc2VydCBjb25mLnJhbmRjb25m
aWcoKSA9PSAwCisgICAgICAgIGFzc2VydCAoY29uZi5jb25maWdfY29udGFpbnMoJ2V4cGVjdGVk
X3N0ZG91dDAnKSBvcgorICAgICAgICAgICAgICAgIGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBl
Y3RlZF9zdGRvdXQxJykgb3IKKyAgICAgICAgICAgICAgICBjb25mLmNvbmZpZ19jb250YWlucygn
ZXhwZWN0ZWRfc3Rkb3V0MicpKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjA1NDUwZjNkCi0tLSAvZGV2L251bGwKKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0
MApAQCAtMCwwICsxLDIgQEAKK0NPTkZJR19BPXkKKyMgQ09ORklHX0IgaXMgbm90IHNldApkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhw
ZWN0ZWRfc3Rkb3V0MSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hv
aWNlL2V4cGVjdGVkX3N0ZG91dDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu
LjM3YWIyOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9y
YW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MQpAQCAtMCwwICsxLDQgQEAKKyMgQ09O
RklHX0EgaXMgbm90IHNldAorQ09ORklHX0I9eQorQ09ORklHX0M9eQorIyBDT05GSUdfRCBpcyBu
b3Qgc2V0CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVk
X2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMC4uODQ5ZmY0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyCkBAIC0wLDAgKzEs
NSBAQAorIyBDT05GSUdfQSBpcyBub3Qgc2V0CitDT05GSUdfQj15CisjIENPTkZJR19DIGlzIG5v
dCBzZXQKK0NPTkZJR19EPXkKK0NPTkZJR19FPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAuLjI5NTg1Mzk0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy91dGlsLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8vIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgUm9tYW4g
WmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAw
NSBTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+CisgKi8KKworI2luY2x1ZGUgPHN0ZGFy
Zy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
ImxrYy5oIgorCisvKiBmaWxlIGFscmVhZHkgcHJlc2VudCBpbiBsaXN0PyBJZiBub3QgYWRkIGl0
ICovCitzdHJ1Y3QgZmlsZSAqZmlsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1
Y3QgZmlsZSAqZmlsZTsKKworCWZvciAoZmlsZSA9IGZpbGVfbGlzdDsgZmlsZTsgZmlsZSA9IGZp
bGUtPm5leHQpIHsKKwkJaWYgKCFzdHJjbXAobmFtZSwgZmlsZS0+bmFtZSkpIHsKKwkJCXJldHVy
biBmaWxlOworCQl9CisJfQorCisJZmlsZSA9IHhtYWxsb2Moc2l6ZW9mKCpmaWxlKSk7CisJbWVt
c2V0KGZpbGUsIDAsIHNpemVvZigqZmlsZSkpOworCWZpbGUtPm5hbWUgPSB4c3RyZHVwKG5hbWUp
OworCWZpbGUtPm5leHQgPSBmaWxlX2xpc3Q7CisJZmlsZV9saXN0ID0gZmlsZTsKKwlyZXR1cm4g
ZmlsZTsKK30KKworLyogQWxsb2NhdGUgaW5pdGlhbCBncm93YWJsZSBzdHJpbmcgKi8KK3N0cnVj
dCBnc3RyIHN0cl9uZXcodm9pZCkKK3sKKwlzdHJ1Y3QgZ3N0ciBnczsKKwlncy5zID0geG1hbGxv
YyhzaXplb2YoY2hhcikgKiA2NCk7CisJZ3MubGVuID0gNjQ7CisJZ3MubWF4X3dpZHRoID0gMDsK
KwlzdHJjcHkoZ3MucywgIlwwIik7CisJcmV0dXJuIGdzOworfQorCisvKiBGcmVlIHN0b3JhZ2Ug
Zm9yIGdyb3dhYmxlIHN0cmluZyAqLwordm9pZCBzdHJfZnJlZShzdHJ1Y3QgZ3N0ciAqZ3MpCit7
CisJaWYgKGdzLT5zKQorCQlmcmVlKGdzLT5zKTsKKwlncy0+cyA9IE5VTEw7CisJZ3MtPmxlbiA9
IDA7Cit9CisKKy8qIEFwcGVuZCB0byBncm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX2FwcGVu
ZChzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKnMpCit7CisJc2l6ZV90IGw7CisJaWYgKHMp
IHsKKwkJbCA9IHN0cmxlbihncy0+cykgKyBzdHJsZW4ocykgKyAxOworCQlpZiAobCA+IGdzLT5s
ZW4pIHsKKwkJCWdzLT5zID0geHJlYWxsb2MoZ3MtPnMsIGwpOworCQkJZ3MtPmxlbiA9IGw7CisJ
CX0KKwkJc3RyY2F0KGdzLT5zLCBzKTsKKwl9Cit9CisKKy8qIEFwcGVuZCBwcmludGYgZm9ybWF0
dGVkIHN0cmluZyB0byBncm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3Qg
Z3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciBz
WzEwMDAwXTsgLyogYmlnIGVub3VnaC4uLiAqLworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnBy
aW50ZihzLCBzaXplb2YocyksIGZtdCwgYXApOworCXN0cl9hcHBlbmQoZ3MsIHMpOworCXZhX2Vu
ZChhcCk7Cit9CisKKy8qIFJldHJpZXZlIHZhbHVlIG9mIGdyb3dhYmxlIHN0cmluZyAqLworY29u
c3QgY2hhciAqc3RyX2dldChzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJcmV0dXJuIGdzLT5zOworfQor
Cit2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKQoreworCXZvaWQgKnAgPSBtYWxsb2Moc2l6ZSk7
CisJaWYgKHApCisJCXJldHVybiBwOworCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5c
biIpOworCWV4aXQoMSk7Cit9CisKK3ZvaWQgKnhjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qg
c2l6ZSkKK3sKKwl2b2lkICpwID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKKwlpZiAocCkKKwkJcmV0
dXJuIHA7CisJZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisJZXhpdCgxKTsK
K30KKwordm9pZCAqeHJlYWxsb2Modm9pZCAqcCwgc2l6ZV90IHNpemUpCit7CisJcCA9IHJlYWxs
b2MocCwgc2l6ZSk7CisJaWYgKHApCisJCXJldHVybiBwOworCWZwcmludGYoc3RkZXJyLCAiT3V0
IG9mIG1lbW9yeS5cbiIpOworCWV4aXQoMSk7Cit9CisKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hh
ciAqcykKK3sKKwljaGFyICpwOworCisJcCA9IHN0cmR1cChzKTsKKwlpZiAocCkKKwkJcmV0dXJu
IHA7CisJZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisJZXhpdCgxKTsKK30K
KworY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pCit7CisJY2hhciAqcDsK
KworCXAgPSBzdHJuZHVwKHMsIG4pOworCWlmIChwKQorCQlyZXR1cm4gcDsKKwlmcHJpbnRmKHN0
ZGVyciwgIk91dCBvZiBtZW1vcnkuXG4iKTsKKwlleGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYu
bGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmIyNTg3NzYzCi0tLSAv
ZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYwpAQCAtMCwwICsx
LDI4MjAgQEAKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEgbGV4
aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVS
CisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1Jf
VkVSU0lPTiA2CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAxCisjaWYgWVlfRkxF
WF9TVUJNSU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBG
aXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZp
YyBpc3N1ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZs
ZXggaW50ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVm
aW5lIEZMRVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5
OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJ
T05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRl
ZmluZSBfX1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBp
ZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAq
LworI2lmbmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNS
T1MgMQorI2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxl
eF9pbnQ4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90
IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYg
aW50MzJfdCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7Cisj
ZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50
IGZsZXhfaW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWdu
ZWQgY2hhciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91
aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisKKy8qIExpbWl0
cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9N
SU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZp
bmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5U
MzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisj
ZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAo
MTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAg
ICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJf
TUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgK
KyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBV
SU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRp
ZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQy
OTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEM5OSAqLworCisjZW5kaWYgLyogISBG
TEVYSU5UX0ggKi8KKworLyogVE9ETzogdGhpcyBpcyBhbHdheXMgZGVmaW5lZCwgc28gaW5saW5l
IGl0ICovCisjZGVmaW5lIHl5Y29uc3QgY29uc3QKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYm
IF9fR05VQ19fID49IDMKKyNkZWZpbmUgeXlub3JldHVybiBfX2F0dHJpYnV0ZV9fKChfX25vcmV0
dXJuX18pKQorI2Vsc2UKKyNkZWZpbmUgeXlub3JldHVybgorI2VuZGlmCisKKy8qIFJldHVybmVk
IHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBh
IHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAor
ICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFy
IGlzIG5lZ2F0aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0
IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUg
WVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBF
bnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2Ug
YSBwYXJhbWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBm
b3JjZWQgb24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uCisgKi8K
KyNkZWZpbmUgQkVHSU4gKHl5X3N0YXJ0KSA9IDEgKyAyICoKKworLyogVHJhbnNsYXRlIHRoZSBj
dXJyZW50IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQK
KyAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBp
cyBmb3IgbGV4CisgKiBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5lIFlZX1NUQVJUICgoKHl5
X3N0YXJ0KSAtIDEpIC8gMikKKyNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAorCisvKiBBY3Rpb24g
bnVtYmVyIGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLworI2RlZmluZSBZ
WV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQorCisvKiBT
cGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLwor
I2RlZmluZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoeXlpbiAgKQorCisjZGVmaW5lIFlZX0VORF9P
Rl9CVUZGRVJfQ0hBUiAwCisKKy8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisj
aWZuZGVmIFlZX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVm
ZmVyIHNpemUgaXMgMTZrLCBub3QgOGsuCisgKiBNb3Jlb3ZlciwgWVlfQlVGX1NJWkUgaXMgMipZ
WV9SRUFEX0JVRl9TSVpFIGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiBEaXR0byBmb3IgdGhlIF9f
aWE2NF9fIGNhc2UgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgWVlfQlVGX1NJWkUgMzI3NjgK
KyNlbHNlCisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYgLyogX19pYTY0X18gKi8K
KyNlbmRpZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQg
b25lIHN0YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5l
IFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRl
X3R5cGUpKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZ
X1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUg
KllZX0JVRkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9U
CisjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7
CisjZW5kaWYKKworZXh0ZXJuIGludCB5eWxlbmc7CisKK2V4dGVybiBGSUxFICp5eWluLCAqeXlv
dXQ7CisKKyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9F
TkRfT0ZfRklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAvKiBOb3Rl
OiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9s
IGJlY2F1c2UgaXQgcmVxdWlyZXMKKyAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZh
cmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsK
KyAgICAgKiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBP
VVRTSURFIHl5bGV4LgorICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1h
a2UgeXlfYWN0IGEgZ2xvYmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKKyAgICAgKiAgICAgICBh
IDUlIHBlcmZvcm1hbmNlIGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5
X2FjdCBpcworICAgICAqICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFy
aWFibGUtLSBzbyBpdCBpcyBub3Qgd29ydGggaXQuCisgICAgICovCisgICAgI2RlZmluZSAgWVlf
TEVTU19MSU5FTk8obikgXAorICAgICAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgaW50
IHl5bDtcCisgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5
bCApXAorICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XAorICAgICAgICAgICAgfXdoaWxlKDAp
CisgICAgI2RlZmluZSBZWV9MSU5FTk9fUkVXSU5EX1RPKGRzdCkgXAorICAgICAgICAgICAgZG8g
e1wKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwO1wKKyAgICAgICAgICAgICAgICBmb3Ig
KCBwID0geXlfY3AtMTsgcCA+PSAoZHN0KTsgLS1wKVwKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCAqcCA9PSAnXG4nIClcCisgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKKyAg
ICAgICAgICAgIH13aGlsZSgwKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJu
IiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmlu
ZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5n
IHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAor
ICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9ICh5
eV9ob2xkX2NoYXIpOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQkoeXlfY19i
dWZfcCkgPSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBc
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRf
cHRyKSAgKQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlf
U1RSVUNUX1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxF
ICp5eV9pbnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICov
CisJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVy
ICovCisKKwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyBy
b29tIGZvciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9idWZfc2l6ZTsKKwor
CS8qIE51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRp
bmcgRU9CCisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsKKworCS8qIFdo
ZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwK
KwkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBp
dCB0bworCSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8q
IFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFu
ZAorCSAqIGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVz
ZSBnZXRjKCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZl
dGNoaW5nIGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19p
bnRlcmFjdGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUg
YmVnaW5uaW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZl
IG9uIHRoZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0
X2JvbDsKKworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisg
ICAgaW50IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworCisJLyogV2hl
dGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJ
ICogZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZm
ZXJfc3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJf
Tk9STUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBz
b21lIHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VP
Rl9QRU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5n
IGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2
ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9z
c2libGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0Ys
IHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNv
IHRoYXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGlu
ZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0Zf
UEVORElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICov
CisKKy8qIFN0YWNrIG9mIGlucHV0IGJ1ZmZlcnMuICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZl
cl9zdGFja190b3AgPSAwOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KK3N0YXRpYyBz
aXplX3QgeXlfYnVmZmVyX3N0YWNrX21heCA9IDA7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICov
CitzdGF0aWMgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrID0gTlVMTDsgLyoqPCBT
dGFjayBhcyBhbiBhcnJheS4gKi8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2lu
ZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQg
dGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4K
KyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVm
aW5lIFlZX0NVUlJFTlRfQlVGRkVSICggKHl5X2J1ZmZlcl9zdGFjaykgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICA/ICh5eV9idWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0g
XAorICAgICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlv
dXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBp
cyBub3QKKyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVz
ZSBvbmx5LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSAoeXlfYnVmZmVy
X3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldCisKKy8qIHl5X2hvbGRfY2hhciBob2xkcyB0
aGUgY2hhcmFjdGVyIGxvc3Qgd2hlbiB5eXRleHQgaXMgZm9ybWVkLiAqLworc3RhdGljIGNoYXIg
eXlfaG9sZF9jaGFyOworc3RhdGljIGludCB5eV9uX2NoYXJzOwkJLyogbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1ZiAqLworaW50IHl5bGVuZzsKKworLyogUG9pbnRzIHRv
IGN1cnJlbnQgY2hhcmFjdGVyIGluIGJ1ZmZlci4gKi8KK3N0YXRpYyBjaGFyICp5eV9jX2J1Zl9w
ID0gTlVMTDsKK3N0YXRpYyBpbnQgeXlfaW5pdCA9IDA7CQkvKiB3aGV0aGVyIHdlIG5lZWQgdG8g
aW5pdGlhbGl6ZSAqLworc3RhdGljIGludCB5eV9zdGFydCA9IDA7CS8qIHN0YXJ0IHN0YXRlIG51
bWJlciAqLworCisvKiBGbGFnIHdoaWNoIGlzIHVzZWQgdG8gYWxsb3cgeXl3cmFwKCkncyB0byBk
byBidWZmZXIgc3dpdGNoZXMKKyAqIGluc3RlYWQgb2Ygc2V0dGluZyB1cCBhIGZyZXNoIHl5aW4u
ICBBIGJpdCBvZiBhIGhhY2sgLi4uCisgKi8KK3N0YXRpYyBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mOworCit2b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAgKTsKK3ZvaWQg
eXlfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgICk7CitZWV9C
VUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAgKTsKK3Zv
aWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5X2ZsdXNo
X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUg
KFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUg
KHZvaWQgKTsKKworc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkICk7Citz
dGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAodm9pZCApOworc3RhdGljIHZvaWQgeXlf
aW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgICk7CisKKyNkZWZpbmUg
WVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApCisKK1lZ
X0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAg
KTsKK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIg
ICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxp
bnQgbGVuICApOworCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgICk7Cit2b2lkICp5eXJlYWxs
b2MgKHZvaWQgKix5eV9zaXplX3QgICk7Cit2b2lkIHl5ZnJlZSAodm9pZCAqICApOworCisjZGVm
aW5lIHl5X25ld19idWZmZXIgeXlfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRl
cmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZF
UiApeyBcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4s
WVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNf
aW50ZXJhY3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9s
KGF0X2JvbCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAg
eXllbnN1cmVfYnVmZmVyX3N0YWNrICgpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
ICAgIFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOyBc
CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwK
Kwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgeXl3cmFwKCkgKC8q
Q09OU1RDT05EKi8xKQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgWVlfQ0hBUjsKKworRklMRSAqeXlpbiA9IE5VTEwsICp5eW91dCA9IE5VTEw7CisKK3R5
cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKK2V4dGVybiBpbnQgeXlsaW5lbm87CisKK2ludCB5
eWxpbmVubyA9IDE7CisKK2V4dGVybiBjaGFyICp5eXRleHQ7CisjaWZkZWYgeXl0ZXh0X3B0cgor
I3VuZGVmIHl5dGV4dF9wdHIKKyNlbmRpZgorI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dAorCitz
dGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0W11bMjFdID0KKyAgICB7CisgICAgewor
ICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLAorICAgICAgICAwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywg
ICAxNCwgICAxNSwgICAxNiwgICAxNCwgICAxNCwgICAxNywgICAxNCwgICAxNCwgICAxNCwKKyAg
ICAgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwg
ICAxNCwKKyAgICAgICAxNAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgMTQsICAgMTUs
ICAgMTYsICAgMTQsICAgMTQsICAgMTcsICAgMTQsICAgMTQsICAgMTQsCisgICAgICAgMTQsICAg
MTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCisgICAg
ICAgMTQKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDE4LCAgIDE5LCAgIDIwLCAgIDE4
LCAgIDE4LCAgIDE4LCAgIDIxLCAgIDE4LCAgIDE4LAorCisgICAgICAgMTgsICAgMTgsICAgMjIs
ICAgMjMsICAgMTgsICAgMjQsICAgMTgsICAgMjUsICAgMTgsICAgMTgsCisgICAgICAgMTgKKyAg
ICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDE4LCAgIDE5LCAgIDIwLCAgIDE4LCAgIDE4LCAg
IDE4LCAgIDIxLCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDIyLCAgIDIzLCAgIDE4
LCAgIDI0LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDE4LAorICAgICAgIDE4CisgICAgfSwKKworICAg
IHsKKyAgICAgICAxMywgICAyNiwgICAyNywgICAyOCwgICAyNiwgICAyNiwgICAyNiwgICAyNiwg
ICAyNiwgICAyNiwKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAy
NiwgICAyNiwgICAyNiwgICAyNiwKKyAgICAgICAyNgorICAgIH0sCisKKyAgICB7CisgICAgICAg
MTMsICAgMjYsICAgMjcsICAgMjgsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYs
CisgICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsICAgMjYsCisKKyAgICAgICAyNgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgMjks
ICAgMjksICAgMzAsICAgMjksICAgMzEsICAgMjksICAgMzIsICAgMjksICAgMzEsCisgICAgICAg
MjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMzMs
CisgICAgICAgMjkKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDI5LCAgIDI5LCAgIDMw
LCAgIDI5LCAgIDMxLCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMxLAorICAgICAgIDI5LCAgIDI5LCAg
IDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDMzLAorICAgICAgIDI5
CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAz
OCwgICAzOSwgICA0MCwgICA0MSwgICAzOCwKKyAgICAgICA0MiwgICA0MywgICAzNCwgICA0NCwg
ICA0NCwgICAzNCwgICA0NSwgICA0NiwgICA0NywgICA0OCwKKyAgICAgICA0OQorCisgICAgfSwK
KworICAgIHsKKyAgICAgICAxMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAzOSwg
ICA0MCwgICA0MSwgICAzOCwKKyAgICAgICA0MiwgICA0MywgICAzNCwgICA0NCwgICA0NCwgICAz
NCwgICA0NSwgICA0NiwgICA0NywgICA0OCwKKyAgICAgICA0OQorICAgIH0sCisKKyAgICB7Cisg
ICAgICAgMTMsICAgNTAsICAgNTEsICAgNTIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAs
ICAgNTAsCisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAg
NTAsICAgNTAsICAgNTAsCisgICAgICAgNTAKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAg
IDUwLCAgIDUxLCAgIDUyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorICAg
ICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAg
IDUwLAorICAgICAgIDUwCisgICAgfSwKKworICAgIHsKKyAgICAgIC0xMywgIC0xMywgIC0xMywg
IC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywKKworICAgICAgLTEzLCAg
LTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLAorICAg
ICAgLTEzCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0xNCwgIC0xNCwgIC0xNCwgIC0x
NCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwKKyAgICAgIC0xNCwgIC0xNCwgIC0xNCwg
IC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwKKyAgICAgIC0xNAorICAg
IH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMTUsICAgNTMsICAgNTQsICAtMTUsICAtMTUsICAg
NTUsICAtMTUsICAtMTUsICAtMTUsCisgICAgICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUs
ICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsCisgICAgICAtMTUKKyAgICB9LAorCisgICAg
eworICAgICAgIDEzLCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAg
LTE2LCAgLTE2LAorICAgICAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2
LCAgLTE2LCAgLTE2LCAgLTE2LAorCisgICAgICAtMTYKKyAgICB9LAorCisgICAgeworICAgICAg
IDEzLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2
LAorICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAg
IDU2LCAgIDU2LAorICAgICAgIDU2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0xOCwg
IC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwKKyAgICAgIC0x
OCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwK
KyAgICAgIC0xOAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMTksICAgNTgsICAtMTks
ICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksCisgICAgICAtMTksICAtMTksICAt
MTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksCisgICAgICAtMTkK
KworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAt
MjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsCisgICAgICAtMjAsICAtMjAsICAtMjAsICAtMjAs
ICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsCisgICAgICAtMjAKKyAgICB9LAor
CisgICAgeworICAgICAgIDEzLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAg
IDU5LCAgLTIxLCAgLTIxLAorICAgICAgLTIxLCAgLTIxLCAgLTIxLCAgIDU5LCAgLTIxLCAgLTIx
LCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLAorICAgICAgLTIxCisgICAgfSwKKworICAgIHsKKyAg
ICAgICAxMywgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwg
IC0yMiwKKyAgICAgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgICA2
MCwgIC0yMiwgIC0yMiwKKyAgICAgIC0yMgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAt
MjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAgNTksICAtMjMsICAtMjMsCisKKyAg
ICAgIC0yMywgIC0yMywgIC0yMywgICA2MSwgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywg
IC0yMywKKyAgICAgIC0yMworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMjQsICAtMjQs
ICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsCisgICAgICAtMjQsICAt
MjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAgNjIsICAtMjQsICAtMjQsCisgICAg
ICAtMjQKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1
LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LAorICAgICAgLTI1LCAgLTI1LCAgLTI1LCAg
LTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LAorICAgICAgLTI1CisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgICA2MywgICA2MywgIC0yNiwgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKKworICAgICAgIDYzCisgICAgfSwKKworICAg
IHsKKyAgICAgICAxMywgIC0yNywgICA2NCwgICA2NSwgIC0yNywgIC0yNywgIC0yNywgIC0yNywg
IC0yNywgIC0yNywKKyAgICAgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0y
NywgIC0yNywgIC0yNywgIC0yNywKKyAgICAgIC0yNworICAgIH0sCisKKyAgICB7CisgICAgICAg
MTMsICAgNjYsICAtMjgsICAtMjgsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYs
CisgICAgICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAg
NjYsICAgNjYsCisgICAgICAgNjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDY3LCAg
IDY3LCAgIDY4LCAgIDY3LCAgLTI5LCAgIDY3LCAgLTI5LCAgIDY3LCAgLTI5LAorICAgICAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgLTI5LAor
ICAgICAgIDY3CisKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTMwLCAgLTMwLCAgLTMw
LCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLAorICAgICAgLTMwLCAgLTMwLCAg
LTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLAorICAgICAgLTMw
CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0z
MSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwKKyAgICAgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwg
IC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwKKyAgICAgIC0zMQorICAgIH0sCisK
KyAgICB7CisgICAgICAgMTMsICAgNjksICAgNjksICAtMzIsICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksCisgICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjksICAgNjksICAgNjksCisgICAgICAgNjkKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgIDcwLCAgIDcwLCAgIDcxLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAg
IDcwLAorCisgICAgICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAg
NzAsICAgNzAsICAgNzAsCisgICAgICAgNzAKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAg
LTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LAorICAg
ICAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAg
LTM0LAorICAgICAgLTM0CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0zNSwgICA3Miwg
IC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwKKyAgICAgIC0zNSwgIC0z
NSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwKKyAgICAg
IC0zNQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMzYsICAtMzYsICAtMzYsICAtMzYs
ICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsCisgICAgICAtMzYsICAtMzYsICAtMzYsICAt
MzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsCisKKyAgICAgIC0zNgorICAg
IH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAt
MzcsICAtMzcsICAtMzcsICAtMzcsCisgICAgICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcs
ICAtMzcsICAtMzcsICAgNzMsICAtMzcsICAtMzcsCisgICAgICAtMzcKKyAgICB9LAorCisgICAg
eworICAgICAgIDEzLCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAg
LTM4LCAgLTM4LAorICAgICAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4
LCAgLTM4LCAgLTM4LCAgLTM4LAorICAgICAgLTM4CisgICAgfSwKKworICAgIHsKKyAgICAgICAx
MywgICA3NCwgICA3NCwgIC0zOSwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwK
KyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwgICA3NCwKKyAgICAgICA3NAorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC00MCwg
IC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgICA3NSwgIC00MCwgIC00MCwKKyAgICAgIC00
MCwgIC00MCwgIC00MCwgICA3NSwgICA3NSwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwK
KyAgICAgIC00MAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNDEsICAtNDEsICAtNDEs
ICAtNDEsICAtNDEsICAtNDEsICAtNDEsICAgNzYsICAtNDEsCisgICAgICAtNDEsICAtNDEsICAt
NDEsICAtNDEsICAtNDEsICAtNDEsICAtNDEsICAtNDEsICAtNDEsICAtNDEsCisgICAgICAtNDEK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQy
LCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLAorICAgICAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAg
LTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLAorICAgICAgLTQyCisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00
MywgIC00MywgIC00MywKKworICAgICAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQz
LCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLAorICAgICAgLTQzCisgICAgfSwKKworICAgIHsKKyAg
ICAgICAxMywgIC00NCwgIC00NCwgIC00NCwgIC00NCwgIC00NCwgIC00NCwgICA3NSwgIC00NCwg
IC00NCwKKyAgICAgIC00NCwgIC00NCwgIC00NCwgICA3NywgICA3NywgIC00NCwgIC00NCwgIC00
NCwgIC00NCwgIC00NCwKKyAgICAgIC00NAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAt
NDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsCisgICAg
ICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAgNzgsICAtNDUsICAt
NDUsCisgICAgICAtNDUKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ2LCAgLTQ2LCAg
LTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LAorICAgICAgLTQ2LCAgLTQ2
LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LAorCisgICAg
ICAtNDYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3
LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LAorICAgICAgLTQ3LCAgLTQ3LCAgLTQ3LCAg
LTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgIDc5LCAgLTQ3LCAgLTQ3LAorICAgICAgLTQ3CisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgIC00OCwgIC00OCwgICA4MCwgIC00OCwgIC00OCwgIC00
OCwgIC00OCwgIC00OCwgIC00OCwKKyAgICAgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwg
IC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwKKyAgICAgIC00OAorICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAt
NDksICAtNDksCisgICAgICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDks
ICAtNDksICAtNDksICAtNDksCisgICAgICAgODEKKworICAgIH0sCisKKyAgICB7CisgICAgICAg
MTMsICAgODIsICAgODMsICAtNTAsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIs
CisgICAgICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAg
ODIsICAgODIsCisgICAgICAgODIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTUxLCAg
LTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLAorICAgICAgLTUx
LCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLAor
ICAgICAgLTUxCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC01MiwgIC01MiwgIC01Miwg
IC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwKKyAgICAgIC01MiwgIC01MiwgIC01
MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwKKyAgICAgIC01Mgor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNTMsICAgNTMsICAgNTQsICAtNTMsICAtNTMs
ICAgNTUsICAtNTMsICAtNTMsICAtNTMsCisKKyAgICAgIC01MywgIC01MywgIC01MywgIC01Mywg
IC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywKKyAgICAgIC01MworICAgIH0sCisK
KyAgICB7CisgICAgICAgMTMsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAt
NTQsICAtNTQsICAtNTQsCisgICAgICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQs
ICAtNTQsICAtNTQsICAtNTQsICAtNTQsCisgICAgICAtNTQKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAg
IDU2LAorICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2
LCAgIDU2LCAgIDU2LAorICAgICAgIDU2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1
NiwgICA1NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1
NiwKKworICAgICAgIDU2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC01NywgIC01Nywg
IC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywKKyAgICAgIC01NywgIC01
NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywKKyAgICAg
IC01NworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNTgsICAgNTgsICAtNTgsICAtNTgs
ICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsCisgICAgICAtNTgsICAtNTgsICAtNTgsICAt
NTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsCisgICAgICAtNTgKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5
LCAgIDU5LCAgLTU5LCAgLTU5LAorICAgICAgLTU5LCAgLTU5LCAgLTU5LCAgIDU5LCAgLTU5LCAg
LTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LAorICAgICAgLTU5CisKKyAgICB9LAorCisgICAg
eworICAgICAgIDEzLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAg
LTYwLCAgLTYwLAorICAgICAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYw
LCAgLTYwLCAgLTYwLCAgLTYwLAorICAgICAgLTYwCisgICAgfSwKKworICAgIHsKKyAgICAgICAx
MywgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgICA1OSwgIC02MSwgIC02MSwK
KyAgICAgIC02MSwgIC02MSwgIC02MSwgICA2MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02
MSwgIC02MSwKKyAgICAgIC02MQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNjIsICAt
NjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsCisgICAgICAtNjIs
ICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsCisg
ICAgICAtNjIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDYzLCAgIDYzLCAgLTYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLAorCisgICAgICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisgICAgICAgNjMK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTY0LCAgIDY0LCAgIDY1LCAgLTY0LCAgLTY0
LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LAorICAgICAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAg
LTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LAorICAgICAgLTY0CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgICA2NiwgIC02NSwgIC02NSwgICA2NiwgICA2NiwgICA2NiwgICA2
NiwgICA2NiwgICA2NiwKKyAgICAgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2Niwg
ICA2NiwgICA2NiwgICA2NiwgICA2NiwKKyAgICAgICA2NgorICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAt
NjYsCisgICAgICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYs
ICAtNjYsICAtNjYsCisKKyAgICAgIC02NgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAg
NjcsICAgNjcsICAgNjgsICAgNjcsICAtNjcsICAgNjcsICAtNjcsICAgNjcsICAtNjcsCisgICAg
ICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAt
NjcsCisgICAgICAgNjcKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTY4LCAgLTY4LCAg
LTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LAorICAgICAgLTY4LCAgLTY4
LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LAorICAgICAg
LTY4CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA2OSwgICA2OSwgIC02OSwgICA2OSwg
ICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwKKyAgICAgICA2OSwgICA2OSwgICA2OSwgICA2
OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwKKyAgICAgICA2OQorCisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgIC03MCwgIC03MCwgICA3MSwgIC03MCwgIC03MCwgIC03
MCwgIC03MCwgIC03MCwgIC03MCwKKyAgICAgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwg
IC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwKKyAgICAgIC03MAorICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAt
NzEsICAtNzEsCisgICAgICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEs
ICAtNzEsICAtNzEsICAtNzEsCisgICAgICAtNzEKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgLTcyLCAgIDcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLAor
ICAgICAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcy
LCAgLTcyLAorICAgICAgLTcyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03MywgIC03
MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywKKworICAgICAgLTcz
LCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLAor
ICAgICAgLTczCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA3NCwgICA3NCwgIC03NCwg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA3
NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwKKyAgICAgICA3NAor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUs
ICAtNzUsICAgNzUsICAtNzUsICAtNzUsCisgICAgICAtNzUsICAtNzUsICAtNzUsICAgNzUsICAg
NzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsCisgICAgICAtNzUKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2
LCAgLTc2LCAgLTc2LAorICAgICAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAg
LTc2LCAgLTc2LCAgLTc2LCAgLTc2LAorCisgICAgICAtNzYKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgIDc1LCAgLTc3LCAg
LTc3LAorICAgICAgLTc3LCAgLTc3LCAgLTc3LCAgIDc3LCAgIDc3LCAgLTc3LCAgLTc3LCAgLTc3
LCAgLTc3LCAgLTc3LAorICAgICAgLTc3CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03
OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwKKyAgICAg
IC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03
OCwKKyAgICAgIC03OAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNzksICAtNzksICAt
NzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksCisgICAgICAtNzksICAtNzks
ICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksCisgICAgICAt
NzkKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtODAsICAtODAsICAtODAsICAtODAs
ICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsCisgICAgICAtODAsICAtODAsICAtODAsICAt
ODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsCisgICAgICAtODAKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgx
LCAgLTgxLCAgLTgxLCAgLTgxLAorICAgICAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAg
LTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLAorICAgICAgLTgxCisgICAgfSwKKworICAgIHsK
KyAgICAgICAxMywgICA4MiwgICA4MywgIC04MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4
MiwgICA4MiwKKyAgICAgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4Miwg
ICA4MiwgICA4MiwgICA4MiwKKyAgICAgICA4MgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMs
ICAgODMsICAgODMsICAtODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisK
KyAgICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywgICA4MywKKyAgICAgICA4MworICAgIH0sCisKKyAgICB9IDsKKworc3RhdGljIHl5X3N0YXRl
X3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2b2lkICk7CitzdGF0aWMgeXlfc3RhdGVfdHlw
ZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICk7CitzdGF0
aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCApOworc3RhdGljIHZvaWQgeXlub3JldHVy
biB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgICk7CisKKy8qIERvbmUgYWZ0ZXIg
dGhlIGN1cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBj
b3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RP
X0JFRk9SRV9BQ1RJT04gXAorCSh5eXRleHRfcHRyKSA9IHl5X2JwOyBcCisJeXlsZW5nID0gKGlu
dCkgKHl5X2NwIC0geXlfYnApOyBcCisJKHl5X2hvbGRfY2hhcikgPSAqeXlfY3A7IFwKKwkqeXlf
Y3AgPSAnXDAnOyBcCisJKHl5X2NfYnVmX3ApID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JV
TEVTIDQ3CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgNDgKKy8qIFRoaXMgc3RydWN0IGlzIG5v
dCB1c2VkIGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5
LiAqLworc3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsK
KwlmbGV4X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3Qg
eXlfYWNjZXB0Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAg
NDgsICAgIDUsICAgIDQsICAgIDIsICAgIDMsICAgMTIsICAgMTEsICAgMTMsCisgICAgICAgIDcs
ICAgMTIsICAgIDYsICAgMTIsICAgIDgsICAgNDYsICAgNDMsICAgNDUsICAgMzgsICAgNDIsCisg
ICAgICAgNDEsICAgMzYsICAgNDAsICAgMzUsICAgMzQsICAgMjksICAgMjEsICAgMjgsICAgMzIs
ICAgMzEsCisgICAgICAgMzUsICAgMTksICAgMjAsICAgMzAsICAgMjYsICAgMjIsICAgMjcsICAg
MzUsICAgMzUsICAgMTQsCisgICAgICAgMTYsICAgMTUsICAgIDQsICAgIDIsICAgIDMsICAgIDMs
ICAgIDEsICAgMTEsICAgIDcsICAgMTAsCisgICAgICAgIDYsICAgIDksICAgNDYsICAgNDMsICAg
NDUsICAgNDQsICAgMzgsICAgMzcsICAgMzYsICAgNDAsCisgICAgICAgMzksICAgMzQsICAgMjMs
ICAgMzIsICAgMzEsICAgMTcsICAgMzAsICAgMjQsICAgMjUsICAgMzMsCisgICAgICAgMTgsICAg
MTQsICAgMTQKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgWVlfQ0hBUiB5eV9lY1syNTZdID0K
KyAgICB7ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMiwgICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwg
ICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgMSwgICAgOCwgICAgOSwgICAxMCwKKyAgICAgICAx
MSwgICAgMSwgICAxMiwgICAgMSwgICAxMywgICAxNCwgICAxNCwgICAxMywgICAxMywgICAxMywK
KyAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxNSwgICAg
MSwgICAxNiwKKyAgICAgICAxNywgICAxOCwgICAgMSwgICAgMSwgICAxMywgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywKKyAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAx
MywgICAxMywgICAxMywgICAxMywgICAxMywKKyAgICAgICAxMywgICAxMywgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKKyAgICAgICAgMSwgICAxOSwgICAg
MSwgICAgMSwgICAxMywgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywKKworICAgICAgIDEz
LCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAor
ICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEz
LCAgIDEzLAorICAgICAgIDEzLCAgIDEzLCAgICAxLCAgIDIwLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsK
KworLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICov
CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzQ4XSA9
CisgICAgeyAgIDAsCisxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAx
LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAw
LCAxLCAwLCAwLCAwLCAxLCAwLCAxLCAKKyAgICAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAgICAg
fTsKKworZXh0ZXJuIGludCB5eV9mbGV4X2RlYnVnOworaW50IHl5X2ZsZXhfZGVidWcgPSAwOwor
CisvKiBUaGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRj
aAorICogYW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisjZGVmaW5l
IFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5
bW9yZV91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmlu
ZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCitjaGFyICp5eXRleHQ7CisKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBS
ZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5j
bHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlz
dGQuaD4KKworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5lIFNUQVJUX1NUUlNJWkUJMTYKKwor
c3RhdGljIHN0cnVjdCB7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IGxpbmVubzsKK30gY3Vy
cmVudF9wb3M7CisKK3N0YXRpYyBjaGFyICp0ZXh0Oworc3RhdGljIGludCB0ZXh0X3NpemUsIHRl
eHRfYXNpemU7CisKK3N0cnVjdCBidWZmZXIgeworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKwlZ
WV9CVUZGRVJfU1RBVEUgc3RhdGU7Cit9OworCitzdHJ1Y3QgYnVmZmVyICpjdXJyZW50X2J1ZjsK
Kworc3RhdGljIGludCBsYXN0X3RzLCBmaXJzdF90czsKKworc3RhdGljIGNoYXIgKmV4cGFuZF90
b2tlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IG4pOworc3RhdGljIHZvaWQgYXBwZW5kX2V4cGFu
ZGVkX3N0cmluZyhjb25zdCBjaGFyICppbik7CitzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZv
aWQpOworc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKKworc3RhdGljIHZvaWQgbmV3
X3N0cmluZyh2b2lkKQoreworCXRleHQgPSB4bWFsbG9jKFNUQVJUX1NUUlNJWkUpOworCXRleHRf
YXNpemUgPSBTVEFSVF9TVFJTSVpFOworCXRleHRfc2l6ZSA9IDA7CisJKnRleHQgPSAwOworfQor
CitzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7
CisJaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CisJaWYgKG5ld19zaXplID4g
dGV4dF9hc2l6ZSkgeworCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKKwkJbmV3X3Np
emUgJj0gLVNUQVJUX1NUUlNJWkU7CisJCXRleHQgPSB4cmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7
CisJCXRleHRfYXNpemUgPSBuZXdfc2l6ZTsKKwl9CisJbWVtY3B5KHRleHQgKyB0ZXh0X3NpemUs
IHN0ciwgc2l6ZSk7CisJdGV4dF9zaXplICs9IHNpemU7CisJdGV4dFt0ZXh0X3NpemVdID0gMDsK
K30KKworc3RhdGljIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUp
Cit7CisJdGV4dCA9IHhtYWxsb2Moc2l6ZSArIDEpOworCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUp
OworCXRleHRbc2l6ZV0gPSAwOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2lnbm9yZWRfY2hhcmFj
dGVyKGNoYXIgY2hyKQoreworCWZwcmludGYoc3RkZXJyLAorCSAgICAgICAgIiVzOiVkOndhcm5p
bmc6IGlnbm9yaW5nIHVuc3VwcG9ydGVkIGNoYXJhY3RlciAnJWMnXG4iLAorCSAgICAgICAgemNv
bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgY2hyKTsKK30KKworI2RlZmluZSBJTklUSUFM
IDAKKyNkZWZpbmUgQ09NTUFORCAxCisjZGVmaW5lIEhFTFAgMgorI2RlZmluZSBTVFJJTkcgMwor
I2RlZmluZSBQQVJBTSA0CisjZGVmaW5lIEFTU0lHTl9WQUwgNQorCisjaWZuZGVmIFlZX05PX1VO
SVNURF9ICisvKiBTcGVjaWFsIGNhc2UgZm9yICJ1bmlzdGQuaCIsIHNpbmNlIGl0IGlzIG5vbi1B
TlNJLiBXZSBpbmNsdWRlIGl0IHdheQorICogZG93biBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUg
dXNlcidzIHNlY3Rpb24gMSB0byBoYXZlIGJlZW4gc2Nhbm5lZCBmaXJzdC4KKyAqIFRoZSB1c2Vy
IGhhcyBhIGNoYW5jZSB0byBvdmVycmlkZSBpdCB3aXRoIGFuIG9wdGlvbi4KKyAqLworI2luY2x1
ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZm5kZWYgWVlfRVhUUkFfVFlQRQorI2RlZmluZSBZ
WV9FWFRSQV9UWVBFIHZvaWQgKgorI2VuZGlmCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxz
ICh2b2lkICk7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFy
ZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2Uu
ICovCisKK2ludCB5eWxleF9kZXN0cm95ICh2b2lkICk7CisKK2ludCB5eWdldF9kZWJ1ZyAodm9p
ZCApOworCit2b2lkIHl5c2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAgKTsKKworWVlfRVhUUkFf
VFlQRSB5eWdldF9leHRyYSAodm9pZCApOworCit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9U
WVBFIHVzZXJfZGVmaW5lZCAgKTsKKworRklMRSAqeXlnZXRfaW4gKHZvaWQgKTsKKwordm9pZCB5
eXNldF9pbiAgKEZJTEUgKiBfaW5fc3RyICApOworCitGSUxFICp5eWdldF9vdXQgKHZvaWQgKTsK
Kwordm9pZCB5eXNldF9vdXQgIChGSUxFICogX291dF9zdHIgICk7CisKKwkJCWludCB5eWdldF9s
ZW5nICh2b2lkICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0X2xp
bmVubyAodm9pZCApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IF9saW5lX251bWJlciAgKTsK
KworLyogTWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVz
ZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBf
WVlXUkFQCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAodm9pZCAp
OworI2Vsc2UKK2V4dGVybiBpbnQgeXl3cmFwICh2b2lkICk7CisjZW5kaWYKKyNlbmRpZgorCisj
aWZuZGVmIFlZX05PX1VOUFVUCisgICAgCisgICAgc3RhdGljIHZvaWQgeXl1bnB1dCAoaW50IGMs
Y2hhciAqYnVmX3B0ciAgKTsKKyAgICAKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0
YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCApOwor
I2VuZGlmCisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxl
biAoeXljb25zdCBjaGFyICogKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh2b2lkICk7CisjZWxzZQorc3Rh
dGljIGludCBpbnB1dCAodm9pZCApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Yg
c3R1ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVG
X1NJWkUKKyNpZmRlZiBfX2lhNjRfXworLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAx
NmssIG5vdCA4ayAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0CisjZWxzZQorI2Rl
ZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZiAvKiBfX2lhNjRfXyAqLworI2VuZGlm
CisKKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFy
ZCBvdXRwdXQuICovCisjaWZuZGVmIEVDSE8KKy8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygp
LCBidXQgc2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAorICogd2Ugbm93IHVz
ZSBmd3JpdGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGRvIHsgaWYgKGZ3cml0ZSggeXl0ZXh0LCAo
c2l6ZV90KSB5eWxlbmcsIDEsIHl5b3V0ICkpIHt9IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyog
R2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVy
cyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8KKyNp
Zm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAor
CWVycm5vPTA7IFwKKwl3aGlsZSAoIChyZXN1bHQgPSAoaW50KSByZWFkKCBmaWxlbm8oeXlpbiks
IGJ1ZiwgbWF4X3NpemUgKSkgPCAwICkgXAorCXsgXAorCQlpZiggZXJybm8gIT0gRUlOVFIpIFwK
KwkJeyBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQi
ICk7IFwKKwkJCWJyZWFrOyBcCisJCX0gXAorCQllcnJubz0wOyBcCisJCWNsZWFyZXJyKHl5aW4p
OyBcCisJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBj
b3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qg
d2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNh
dXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0
ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkg
cmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBz
dGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lO
Q1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBh
IGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRB
TF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgKQorI2VuZGlmCisKKy8qIGVuZCB0YWJs
ZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1
bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNl
ciBjYW4KKyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisj
ZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgeXlsZXggKHZvaWQpOworCisj
ZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4ICh2b2lkKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisK
Ky8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5
dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VT
RVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVj
dXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZp
bmUgWVlfQlJFQUsgLypMSU5URUQqL2JyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9T
RVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24g
d2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwl5eV9zdGF0ZV90eXBl
IHl5X2N1cnJlbnRfc3RhdGU7CisJY2hhciAqeXlfY3AsICp5eV9icDsKKwlpbnQgeXlfYWN0Owor
ICAgIAorCWlmICggISh5eV9pbml0KSApCisJCXsKKwkJKHl5X2luaXQpID0gMTsKKworI2lmZGVm
IFlZX1VTRVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgKHl5X3N0
YXJ0KSApCisJCQkoeXlfc3RhcnQpID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlp
ZiAoICEgeXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5
b3V0ID0gc3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXl5ZW5z
dXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCQkJ
eXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7CisJCX0KKworCQl5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSggKTsKKwkJfQorCisJeworCisJaW50IHN0ciA9IDA7CisJaW50IHRzLCBpOwor
CisJd2hpbGUgKCAvKkNPTlNUQ09ORCovMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBp
cyByZWFjaGVkICovCisJCXsKKwkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwkJLyogU3VwcG9y
dCBvZiB5eXRleHQuICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOworCisJCS8qIHl5X2Jw
IHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkg
KiB0aGUgY3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJl
bnRfc3RhdGUgPSAoeXlfc3RhcnQpOworeXlfbWF0Y2g6CisJCXdoaWxlICggKHl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9zdGF0ZV1bIHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldICBdKSA+IDAgKQorCQkJKyt5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0gLXl5X2N1
cnJlbnRfc3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlf
Y3VycmVudF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworCQlpZiAoIHl5X2Fj
dCAhPSBZWV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkK
KwkJCXsKKwkJCWludCB5eWw7CisJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXls
ICkKKwkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQorCQkJCQkKKyAgICB5eWxpbmVubysr
OworOworCQkJfQorCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFj
Y2VzcyBFT0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5u
aW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KK2Nhc2UgMToKKy8qIHJ1bGUgMSBjYW4gbWF0Y2ggZW9s
ICovCitjYXNlIDI6CisvKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAor
eworCXJldHVybiBUX0VPTDsKK30KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAor
CisJWVlfQlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKK3sKKwlCRUdJTihDT01NQU5EKTsK
K30KKwlZWV9CUkVBSworY2FzZSA1OgorWVlfUlVMRV9TRVRVUAoreworCXVucHV0KHl5dGV4dFsw
XSk7CisJQkVHSU4oQ09NTUFORCk7Cit9CisJWVlfQlJFQUsKKworY2FzZSA2OgorWVlfUlVMRV9T
RVRVUAoreworCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5
dGV4dCwgeXlsZW5nKTsKKwkJY3VycmVudF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwkJY3Vy
cmVudF9wb3MubGluZW5vID0geXlsaW5lbm87CisJCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9D
T01NQU5EKSB7CisJCQlCRUdJTihQQVJBTSk7CisJCQl5eWx2YWwuaWQgPSBpZDsKKwkJCXJldHVy
biBpZC0+dG9rZW47CisJCX0KKwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKKwkJeXls
dmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1ZBUklBQkxFOworCX0KKwlZWV9CUkVBSwor
Y2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreworCQkvKiB0aGlzIHRva2VuIGluY2x1ZGVzIGF0IGxl
YXN0IG9uZSAnJCcgKi8KKwkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRleHQsIHl5
bGVuZyk7CisJCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpCisJCQlyZXR1cm4gVF9WQVJJQUJM
RTsKKwkJZnJlZSh5eWx2YWwuc3RyaW5nKTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JV
TEVfU0VUVVAKK3sgQkVHSU4oQVNTSUdOX1ZBTCk7IHl5bHZhbC5mbGF2b3IgPSBWQVJfUkVDVVJT
SVZFOyByZXR1cm4gVF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRV
UAoreyBCRUdJTihBU1NJR05fVkFMKTsgeXlsdmFsLmZsYXZvciA9IFZBUl9TSU1QTEU7IHJldHVy
biBUX0FTU0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreyBCRUdJ
TihBU1NJR05fVkFMKTsgeXlsdmFsLmZsYXZvciA9IFZBUl9BUFBFTkQ7IHJldHVybiBUX0FTU0lH
TjsgfQorCVlZX0JSRUFLCitjYXNlIDExOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nh
c2UgMTI6CitZWV9SVUxFX1NFVFVQCit3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOwor
CVlZX0JSRUFLCitjYXNlIDEzOgorLyogcnVsZSAxMyBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxF
X1NFVFVQCit7CisJCUJFR0lOKElOSVRJQUwpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCVlZX0JS
RUFLCisKK2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisJCWFsbG9jX3N0cmluZyh5eXRleHQs
IHl5bGVuZyk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9BU1NJR05fVkFM
OworCX0KKwlZWV9CUkVBSworY2FzZSAxNToKKy8qIHJ1bGUgMTUgY2FuIG1hdGNoIGVvbCAqLwor
WVlfUlVMRV9TRVRVUAoreyBCRUdJTihJTklUSUFMKTsgcmV0dXJuIFRfRU9MOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTY6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworCitjYXNlIDE3OgorWVlf
UlVMRV9TRVRVUAorcmV0dXJuIFRfQU5EOworCVlZX0JSRUFLCitjYXNlIDE4OgorWVlfUlVMRV9T
RVRVUAorcmV0dXJuIFRfT1I7CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCity
ZXR1cm4gVF9PUEVOX1BBUkVOOworCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAor
cmV0dXJuIFRfQ0xPU0VfUEFSRU47CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQ
CityZXR1cm4gVF9OT1Q7CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCityZXR1
cm4gVF9FUVVBTDsKKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBU
X1VORVFVQUw7CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9M
RVNTX0VRVUFMOworCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRf
R1JFQVRFUl9FUVVBTDsKKwlZWV9CUkVBSworY2FzZSAyNjoKK1lZX1JVTEVfU0VUVVAKK3JldHVy
biBUX0xFU1M7CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9H
UkVBVEVSOworCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreworCQlzdHIgPSB5
eXRleHRbMF07CisJCW5ld19zdHJpbmcoKTsKKwkJQkVHSU4oU1RSSU5HKTsKKwl9CisJWVlfQlJF
QUsKK2Nhc2UgMjk6CisvKiBydWxlIDI5IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAK
K0JFR0lOKElOSVRJQUwpOyByZXR1cm4gVF9FT0w7CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9S
VUxFX1NFVFVQCit7CisJCWNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29r
dXAoeXl0ZXh0LCB5eWxlbmcpOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfUEFSQU0pIHsK
KwkJCXl5bHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQorCQlhbGxvY19z
dHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJu
IFRfV09SRDsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisJCS8q
IHRoaXMgdG9rZW4gaW5jbHVkZXMgYXQgbGVhc3Qgb25lICckJyAqLworCQl5eWx2YWwuc3RyaW5n
ID0gZXhwYW5kX3Rva2VuKHl5dGV4dCwgeXlsZW5nKTsKKwkJaWYgKHN0cmxlbih5eWx2YWwuc3Ry
aW5nKSkKKwkJCXJldHVybiBUX1dPUkQ7CisJCWZyZWUoeXlsdmFsLnN0cmluZyk7CisJfQorCVlZ
X0JSRUFLCitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAorLyogY29tbWVudCAqLworCVlZX0JSRUFL
CitjYXNlIDMzOgorLyogcnVsZSAzMyBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCis7
CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSAz
NToKK1lZX1JVTEVfU0VUVVAKK3dhcm5faWdub3JlZF9jaGFyYWN0ZXIoKnl5dGV4dCk7CisJWVlf
QlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKFBBUkFNKToKK3sKKwkJQkVHSU4oSU5JVElBTCk7CisJ
fQorCVlZX0JSRUFLCisKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCithcHBlbmRfZXhwYW5kZWRf
c3RyaW5nKHl5dGV4dCk7CisJWVlfQlJFQUsKK2Nhc2UgMzc6CisvKiBydWxlIDM3IGNhbiBtYXRj
aCBlb2wgKi8KKyp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0
dGluZyB1cCB5eXRleHQgKi8KK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKKyh5eV9j
X2J1Zl9wKSA9IHl5X2NwIC09IDE7CitZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0
ZXh0IGFnYWluICovCitZWV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5
eWxlbmcpOworCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfV09SRF9RVU9URTsK
Kwl9CisJWVlfQlJFQUsKK2Nhc2UgMzg6CitZWV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpOworCX0KKwlZWV9CUkVBSworY2FzZSAzOToKKy8qIHJ1bGUgMzkg
Y2FuIG1hdGNoIGVvbCAqLworKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0
cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLworWVlfTElORU5PX1JFV0lORF9UTyh5eV9jcCAtIDEp
OworKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsKK1lZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNl
dCB1cCB5eXRleHQgYWdhaW4gKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmluZyh5
eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVy
biBUX1dPUkRfUVVPVEU7CisJfQorCVlZX0JSRUFLCitjYXNlIDQwOgorWVlfUlVMRV9TRVRVUAor
eworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOworCX0KKwlZWV9CUkVB
SworY2FzZSA0MToKK1lZX1JVTEVfU0VUVVAKK3sKKwkJaWYgKHN0ciA9PSB5eXRleHRbMF0pIHsK
KwkJCUJFR0lOKFBBUkFNKTsKKwkJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQkJcmV0dXJuIFRf
V09SRF9RVU9URTsKKwkJfSBlbHNlCisJCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgMSk7CisJfQor
CVlZX0JSRUFLCitjYXNlIDQyOgorLyogcnVsZSA0MiBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxF
X1NFVFVQCit7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiVzOiVkOndhcm5pbmc6IG11bHRpLWxp
bmUgc3RyaW5ncyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSk7CisJCUJFR0lOKElOSVRJQUwpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCVlZX0JS
RUFLCitjYXNlIFlZX1NUQVRFX0VPRihTVFJJTkcpOgoreworCQlCRUdJTihJTklUSUFMKTsKKwl9
CisJWVlfQlJFQUsKKworY2FzZSA0MzoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJdHMgPSAwOworCQlm
b3IgKGkgPSAwOyBpIDwgeXlsZW5nOyBpKyspIHsKKwkJCWlmICh5eXRleHRbaV0gPT0gJ1x0JykK
KwkJCQl0cyA9ICh0cyAmIH43KSArIDg7CisJCQllbHNlCisJCQkJdHMrKzsKKwkJfQorCQlsYXN0
X3RzID0gdHM7CisJCWlmIChmaXJzdF90cykgeworCQkJaWYgKHRzIDwgZmlyc3RfdHMpIHsKKwkJ
CQl6Y29uZl9lbmRoZWxwKCk7CisJCQkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJCQl9CisJCQl0cyAt
PSBmaXJzdF90czsKKwkJCXdoaWxlICh0cyA+IDgpIHsKKwkJCQlhcHBlbmRfc3RyaW5nKCIgICAg
ICAgICIsIDgpOworCQkJCXRzIC09IDg7CisJCQl9CisJCQlhcHBlbmRfc3RyaW5nKCIgICAgICAg
ICIsIHRzKTsKKwkJfQorCX0KKwlZWV9CUkVBSworY2FzZSA0NDoKKy8qIHJ1bGUgNDQgY2FuIG1h
dGNoIGVvbCAqLworKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dCAqLworWVlfTElORU5PX1JFV0lORF9UTyh5eV9jcCAtIDEpOworKHl5
X2NfYnVmX3ApID0geXlfY3AgLT0gMTsKK1lZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5
eXRleHQgYWdhaW4gKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJemNvbmZfZW5kaGVscCgpOworCQly
ZXR1cm4gVF9IRUxQVEVYVDsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNDU6CisvKiBydWxlIDQ1IGNh
biBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmluZygiXG4iLCAx
KTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNDY6CitZWV9SVUxFX1NFVFVQCit7CisJCXdoaWxlICh5
eWxlbmcpIHsKKwkJCWlmICgoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnICcpICYmICh5eXRleHRbeXls
ZW5nLTFdICE9ICdcdCcpKQorCQkJCWJyZWFrOworCQkJeXlsZW5nLS07CisJCX0KKwkJYXBwZW5k
X3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCWlmICghZmlyc3RfdHMpCisJCQlmaXJzdF90cyA9
IGxhc3RfdHM7CisJfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihIRUxQKToKK3sKKwkJ
emNvbmZfZW5kaGVscCgpOworCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwl9CisJWVlfQlJFQUsKKwor
Y2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NQU5EKToK
K2Nhc2UgWVlfU1RBVEVfRU9GKEFTU0lHTl9WQUwpOgoreworCWlmIChjdXJyZW50X2ZpbGUpIHsK
KwkJemNvbmZfZW5kZmlsZSgpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCWZjbG9zZSh5eWluKTsK
Kwl5eXRlcm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDQ3OgorWVlfUlVMRV9TRVRVUAor
WVlfRkFUQUxfRVJST1IoICJmbGV4IHNjYW5uZXIgamFtbWVkIiApOworCVlZX0JSRUFLCisKKwlj
YXNlIFlZX0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBu
b3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVk
X3RleHQgPSAoaW50KSAoeXlfY3AgLSAoeXl0ZXh0X3B0cikpIC0gMTsKKworCQkvKiBVbmRvIHRo
ZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9ICh5eV9ob2xk
X2NoYXIpOworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7
CisJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MK
KwkJCSAqIHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkg
KiBqdXN0IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogeXls
ZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBi
ZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlz
IHRoZSByaWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmly
c3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2ls
bCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCSh5eV9uX2NoYXJz
KSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJ
CS8qIE5vdGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9z
aXRpb24KKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1
Zl9wIHdpbGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVM
IGNoYXJhY3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVP
QiB0byB0aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGgg
dGhlIHRlc3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggKHl5X2NfYnVmX3ApIDw9
ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJ
CXsgLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0
X3N0YXRlOworCisJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2Zf
bWF0Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0
YXRlKCAgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUg
TlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3By
ZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBp
dCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9m
IGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8g
aXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8K
KworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUg
KTsKKworCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5
eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5
X2NwID0gKysoeXlfY19idWZfcCk7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3Rh
dGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlf
Y3AgPSAoeXlfY19idWZfcCk7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9
CisKKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkKKwkJCXsKKwkJCWNh
c2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJKHl5X2RpZF9idWZmZXJfc3dpdGNo
X29uX2VvZikgPSAwOworCisJCQkJaWYgKCB5eXdyYXAoICkgKQorCQkJCQl7CisJCQkJCS8qIE5v
dGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZm
ZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJ
CQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChs
aWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVy
IHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3Ro
ZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCSh5
eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9
IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisK
KwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9l
b2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJ
CQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCQko
eXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCQl5eV9jcCA9ICh5eV9j
X2J1Zl9wKTsKKwkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCQkJCWdv
dG8geXlfbWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCSh5eV9jX2J1
Zl9wKSA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2No
YXJzKV07CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAg
KTsKKworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIp
ICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7
CisJCX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nh
bm5lciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFj
dGlvbiBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCisJfSAv
KiBlbmQgb2YgdXNlcidzIGRlY2xhcmF0aW9ucyAqLworfSAvKiBlbmQgb2YgeXlsZXggKi8KKwor
LyogeXlfZ2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCisgKgor
ICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAqCUVPQl9BQ1RfTEFT
VF9NQVRDSCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBm
cm9tIGN1cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmls
ZQorICovCitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCkKK3sKKyAgICAJY2hh
ciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCWNoYXIgKnNv
dXJjZSA9ICh5eXRleHRfcHRyKTsKKwlpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92
YWw7CisKKwlpZiAoICh5eV9jX2J1Zl9wKSA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwg
ZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKwor
CWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJ
eyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8K
KwkJaWYgKCAoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cikgLSBZWV9NT1JFX0FESiA9PSAxICkK
KwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbwor
CQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9B
Q1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBz
b21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkg
Ki8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0
byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFy
dCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoKHl5X2NfYnVmX3ApIC0g
KHl5dGV4dF9wdHIpIC0gMSk7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyAr
K2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJ
CS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBF
T0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycykgPSAwOworCisJZWxzZQorCQl7CisJCQlp
bnQgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6
ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQor
CQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJ
CS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlf
QlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5eV9j
X2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKCh5eV9jX2J1Zl9wKSAtIGItPnl5X2NoX2J1Zik7
CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCWludCBuZXdfc2l6
ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJ
CWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWIt
Pnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkv
KiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxsb2MoKHZv
aWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAgKTsKKwkJCQl9CisJCQllbHNl
CisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2No
X2J1ZiA9IE5VTEw7CisKKwkJCWlmICggISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VS
Uk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiAp
OworCisJCQkoeXlfY19idWZfcCkgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsK
KworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXpl
IC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJfQorCisJCWlmICggbnVtX3RvX3Jl
YWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0la
RTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKKwkJCSh5eV9uX2No
YXJzKSwgbnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25f
Y2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCWlmICggKHl5X25fY2hhcnMpID09IDAgKQor
CQl7CisJCWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0
X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5eXJlc3RhcnQoeXlpbiAgKTsKKwkJCX0K
KworCQllbHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJf
RU9GX1BFTkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09O
VElOVUVfU0NBTjsKKworCWlmICgoKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUpID4gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQgdGhlIGFy
cmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQlpbnQgbmV3
X3NpemUgPSAoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSArICgoeXlfbl9jaGFycykgPj4g
MSk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXly
ZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19z
aXplICApOworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQor
CQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRf
YnVmZmVyKCkiICk7CisJfQorCisJKHl5X25fY2hhcnMpICs9IG51bWJlcl90b19tb3ZlOworCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5
X25fY2hhcnMpICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwkoeXl0ZXh0X3B0cikg
PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0
X3ZhbDsKK30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0
IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0
ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAodm9pZCkKK3sKKwl5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGU7CisJY2hhciAqeXlfY3A7CisgICAgCisJeXlfY3VycmVudF9zdGF0ZSA9
ICh5eV9zdGFydCk7CisKKwlmb3IgKCB5eV9jcCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURK
OyB5eV9jcCA8ICh5eV9jX2J1Zl9wKTsgKyt5eV9jcCApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5X254dFt5eV9jdXJyZW50X3N0YXRlXVsoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUko
Knl5X2NwKV0gOiAxKV07CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisv
KiB5eV90cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwg
Y2hhcmFjdGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3Ry
YW5zKCBjdXJyZW50X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90
cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICkKK3sKKwlpbnQg
eXlfaXNfamFtOworICAgIAorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9z
dGF0ZV1bMV07CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPD0gMCk7CisKKwkJcmV0
dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05P
X1VOUFVUCisKKyAgICBzdGF0aWMgdm9pZCB5eXVucHV0IChpbnQgYywgY2hhciAqIHl5X2JwICkK
K3sKKwljaGFyICp5eV9jcDsKKyAgICAKKyAgICB5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKworCS8q
IHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLworCSp5eV9jcCA9ICh5eV9ob2xk
X2NoYXIpOworCisJaWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmICsgMiApCisJCXsgLyogbmVlZCB0byBzaGlmdCB0aGluZ3MgdXAgdG8gbWFrZSByb29tICov
CisJCS8qICsyIGZvciBFT0IgY2hhcnMuICovCisJCWludCBudW1iZXJfdG9fbW92ZSA9ICh5eV9u
X2NoYXJzKSArIDI7CisJCWNoYXIgKmRlc3QgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWZbCisJCQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgKyAy
XTsKKwkJY2hhciAqc291cmNlID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9j
aF9idWZbbnVtYmVyX3RvX21vdmVdOworCisJCXdoaWxlICggc291cmNlID4gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJKi0tZGVzdCA9ICotLXNvdXJjZTsKKworCQl5
eV9jcCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7CisJCXl5X2JwICs9IChpbnQpIChkZXN0IC0g
c291cmNlKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0KKwkJCSh5
eV9uX2NoYXJzKSA9IChpbnQpIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemU7
CisKKwkJaWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICsg
MiApCisJCQlZWV9GQVRBTF9FUlJPUiggImZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3ci
ICk7CisJCX0KKworCSotLXl5X2NwID0gKGNoYXIpIGM7CisKKyAgICBpZiAoIGMgPT0gJ1xuJyAp
eworICAgICAgICAtLXl5bGluZW5vOworICAgIH0KKworCSh5eXRleHRfcHRyKSA9IHl5X2JwOwor
CSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOworCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOworfQorCisj
ZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3Rh
dGljIGludCB5eWlucHV0ICh2b2lkKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAodm9p
ZCkKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgCisJKih5eV9jX2J1Zl9wKSA9ICh5eV9ob2xk
X2NoYXIpOworCisJaWYgKCAqKHl5X2NfYnVmX3ApID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAp
CisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2Fu
dCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFj
dGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggKHl5X2NfYnVmX3ApIDwgJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gKQorCQkJLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CisKKwkJ
ZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCWludCBvZmZzZXQgPSAoeXlfY19i
dWZfcCkgLSAoeXl0ZXh0X3B0cik7CisJCQkrKyh5eV9jX2J1Zl9wKTsKKworCQkJc3dpdGNoICgg
eXlfZ2V0X25leHRfYnVmZmVyKCAgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01B
VENIOgorCQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNl
ZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0
IHdlIG5lZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJ
ICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRj
aGluZyB0byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01B
VENICisJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8q
IFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICk7CisKKwkJCQkJ
LypGQUxMVEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsK
KwkJCQkJaWYgKCB5eXdyYXAoICkgKQorCQkJCQkJcmV0dXJuIDA7CisKKwkJCQkJaWYgKCAhICh5
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVm
IF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KCk7CisjZWxzZQorCQkJCQlyZXR1cm4g
aW5wdXQoKTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TjoKKwkJCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgb2Zmc2V0OworCQkJCQlicmVh
azsKKwkJCQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHl5X2NfYnVm
X3ApOwkvKiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqKHl5X2NfYnVmX3ApID0gJ1wwJzsJ
LyogcHJlc2VydmUgeXl0ZXh0ICovCisJKHl5X2hvbGRfY2hhcikgPSAqKysoeXlfY19idWZfcCk7
CisKKwlpZiAoIGMgPT0gJ1xuJyApCisJCQorICAgIHl5bGluZW5vKys7Cis7CisKKwlyZXR1cm4g
YzsKK30KKyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5
IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmls
ZSBBIHJlYWRhYmxlIHN0cmVhbS4KKyAqIAorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5v
dCByZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9p
ZCB5eXJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSApCit7CisgICAgCisJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSICl7CisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlp
bixZWV9CVUZfU0laRSApOworCX0KKworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVS
LGlucHV0X2ZpbGUgKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyoqIFN3aXRj
aCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUg
bmV3IGlucHV0IGJ1ZmZlci4KKyAqIAorICovCisgICAgdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVy
ICAoWVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICkKK3sKKyAgICAKKwkvKiBUT0RPLiBXZSBz
aG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3
aXRoCisJICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQl5eXB1c2hfYnVmZmVyX3N0YXRl
KG5ld19idWZmZXIpOworICAgICAqLworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwlpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9s
ZCBidWZmZXIuICovCisJCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3Rh
dGUoICk7CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMg
c3dpdGNoIGR1cmluZworCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25s
eSB0aW1lIHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBj
YWxsZWQsIHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0Lgor
CSAqLworCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKworc3RhdGljIHZv
aWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgICh2b2lkKQoreworICAgIAkoeXlfbl9jaGFycykgPSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJKHl5dGV4dF9wdHIpID0gKHl5
X2NfYnVmX3ApID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4g
PSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJKHl5X2hvbGRfY2hh
cikgPSAqKHl5X2NfYnVmX3ApOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4g
aW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisg
KiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGlu
IGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiAKKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRl
ZCBidWZmZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZl
ciAgKEZJTEUgKiBmaWxlLCBpbnQgIHNpemUgKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAg
IAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSApICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHlu
YW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUg
PSAoeXlfc2l6ZV90KXNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVy
cyBsb25nZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQg
aW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0gKGNo
YXIgKikgeXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgICk7CisJaWYgKCAhIGItPnl5X2NoX2J1
ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0
ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJeXlfaW5pdF9i
dWZmZXIoYixmaWxlICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZl
ci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVhdGVfYnVmZmVyKCkK
KyAqIAorICovCisgICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIg
KQoreworICAgIAorCWlmICggISBiICkKKwkJcmV0dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJF
TlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55
eV9pc19vdXJfYnVmZmVyICkKKwkJeXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAgKTsKKwor
CXl5ZnJlZSgodm9pZCAqKSBiICApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxp
emVzIGEgYnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUg
dGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0
YXJ0KCkgb3IgYXQgRU9GLgorICovCisgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZ
WV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICkKKworeworCWludCBvZXJybm8gPSBlcnJu
bzsKKyAgICAKKwl5eV9mbHVzaF9idWZmZXIoYiApOworCisJYi0+eXlfaW5wdXRfZmlsZSA9IGZp
bGU7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBpcyB0aGUgY3VycmVu
dCBidWZmZXIsIHRoZW4geXlfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KKyAgICAgKiBjYWxs
ZWQgZnJvbSB5eXJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAg
KiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1
bW4uCisgICAgICovCisgICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpeworICAgICAgICBi
LT55eV9ic19saW5lbm8gPSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOworICAgIH0K
KworICAgICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJZXJybm8gPSBvZXJy
bm87Cit9CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4
dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIg
c3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIAor
ICovCisgICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiApCit7Cisg
ICAgCWlmICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBX
ZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNh
dXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBz
ZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9i
dWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisK
KwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVX
OworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeXlfbG9hZF9idWZmZXJfc3Rh
dGUoICk7Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhl
IG5ldyBzdGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24g
d2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5l
d19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICAKKyAqLwordm9pZCB5eXB1c2hfYnVmZmVyX3N0
YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciApCit7CisgICAgCWlmIChuZXdfYnVmZmVy
ID09IE5VTEwpCisJCXJldHVybjsKKworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpOworCisJLyog
VGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Ig
b2xkIGJ1ZmZlci4gKi8KKwkJKih5eV9jX2J1Zl9wKSA9ICh5eV9ob2xkX2NoYXIpOworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSAoeXlfY19idWZfcCk7CisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2NoYXJzKTsKKwkJfQorCisJ
LyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJ
aWYgKFlZX0NVUlJFTlRfQlVGRkVSKQorCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkrKzsKKwlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20geXlf
c3dpdGNoX3RvX2J1ZmZlci4gKi8KKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKKwkoeXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVz
IHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQg
YmVjb21lcyB0aGUgbmV3IHRvcC4KKyAqICAKKyAqLwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUg
KHZvaWQpCit7CisgICAgCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCXl5
X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBOVUxMOworCWlmICgoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPiAwKQorCQktLSh5eV9i
dWZmZXJfc3RhY2tfdG9wKTsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2Fk
X2J1ZmZlcl9zdGF0ZSggKTsKKwkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAxOwor
CX0KK30KKworLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAq
ICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KKyAqLworc3RhdGljIHZv
aWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkKQoreworCWludCBudW1fdG9fYWxsb2M7Cisg
ICAgCisJaWYgKCEoeXlfYnVmZmVyX3N0YWNrKSkgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24g
aXMganVzdCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAq
IHNjYW5uZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRv
IGF2b2lkIGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAg
ICAgICAqLworICAgICAgbnVtX3RvX2FsbG9jID0gMTsgLyogQWZ0ZXIgYWxsIHRoYXQgdGFsaywg
dGhpcyB3YXMgc2V0IHRvIDEgYW55d2F5cy4uLiAqLworCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQkpOworCQlpZiAoICEgKHl5
X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJbWVtc2V0KCh5eV9idWZmZXJf
c3RhY2spLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSop
KTsKKworCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CisJCSh5eV9idWZm
ZXJfc3RhY2tfdG9wKSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHl5X2J1ZmZlcl9zdGFj
a190b3ApID49ICgoeXlfYnVmZmVyX3N0YWNrX21heCkpIC0gMSl7CisKKwkJLyogSW5jcmVhc2Ug
dGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCXl5X3NpemVf
dCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVtX3RvX2Fs
bG9jID0gKHl5X2J1ZmZlcl9zdGFja19tYXgpICsgZ3Jvd19zaXplOworCQkoeXlfYnVmZmVyX3N0
YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jCisJCQkJCQkJCSgoeXlf
YnVmZmVyX3N0YWNrKSwKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKQorCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQor
CQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVm
ZmVyX3N0YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVt
c2V0KCh5eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFja19tYXgpLCAwLCBncm93X3Np
emUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJKHl5X2J1ZmZlcl9zdGFj
a19tYXgpID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZm
ZXIgc3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVy
IGJ1ZmZlci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0g
c2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogCisgKiBA
cmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlf
QlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6
ZSApCit7CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAg
ICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtz
aXplLTFdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxl
YXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIE5VTEw7CisKKwliID0gKFlZX0JV
RkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsK
KwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGlu
IHl5X3NjYW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAi
LSAyIiB0byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hf
YnVmID0gYmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxl
ID0gTlVMTDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50
ZXJhY3RpdmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAw
OworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJeXlfc3dpdGNoX3Rv
X2J1ZmZlcihiICApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVm
ZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxs
CisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5V
TC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiAKKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFs
bG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2Nh
biBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICB5
eV9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3Ry
aW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciApCit7CisgICAgCisJcmV0dXJuIHl5X3NjYW5fYnl0
ZXMoeXlzdHIsKGludCkgc3RybGVuKHl5c3RyKSApOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0
IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5
eWxleCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFy
YW0geXlieXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xl
biB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRl
cy4KKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmpl
Y3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNo
YXIgKmJ1ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZv
ciBmdWxsIGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwlu
ID0gKHl5X3NpemVfdCkgKF95eWJ5dGVzX2xlbiArIDIpOworCWJ1ZiA9IChjaGFyICopIHl5YWxs
b2MobiAgKTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1p
YyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXli
eXRlc19sZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNf
bGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwli
ID0geXlfc2Nhbl9idWZmZXIoYnVmLG4gKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9S
KCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8g
Z3JvdyBldGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3
aGVuIHdlJ3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1
cm4gYjsKK30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlM
VVJFIDIKKyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eW5vcmV0dXJuIHl5X2ZhdGFsX2Vycm9yICh5
eWNvbnN0IGNoYXIqIG1zZyApCit7CisJCQkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIs
IG1zZyApOworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxl
c3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcwor
I2RlZmluZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChu
KTsgXAorICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4
dFt5eWxlbmddID0gKHl5X2hvbGRfY2hhcik7IFwKKwkJKHl5X2NfYnVmX3ApID0geXl0ZXh0ICsg
eXlsZXNzX21hY3JvX2FyZzsgXAorCQkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19idWZfcCk7IFwK
KwkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsg
XAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBm
dW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSBjdXJyZW50IGxp
bmUgbnVtYmVyLgorICogCisgKi8KK2ludCB5eWdldF9saW5lbm8gICh2b2lkKQoreworICAgIAor
ICAgIHJldHVybiB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICog
CisgKi8KK0ZJTEUgKnl5Z2V0X2luICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5aW47Cit9
CisKKy8qKiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisgKiAKKyAqLworRklMRSAqeXlnZXRfb3V0
ICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiogR2V0IHRoZSBsZW5n
dGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uCisgKiAKKyAqLworaW50IHl5Z2V0X2xlbmcgICh2b2lk
KQoreworICAgICAgICByZXR1cm4geXlsZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRv
a2VuLgorICogCisgKi8KKworY2hhciAqeXlnZXRfdGV4dCAgKHZvaWQpCit7CisgICAgICAgIHJl
dHVybiB5eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBA
cGFyYW0gX2xpbmVfbnVtYmVyIGxpbmUgbnVtYmVyCisgKiAKKyAqLwordm9pZCB5eXNldF9saW5l
bm8gKGludCAgX2xpbmVfbnVtYmVyICkKK3sKKyAgICAKKyAgICB5eWxpbmVubyA9IF9saW5lX251
bWJlcjsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2Nh
cmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBfaW5fc3RyIEEgcmVh
ZGFibGUgc3RyZWFtLgorICogCisgKiBAc2VlIHl5X3N3aXRjaF90b19idWZmZXIKKyAqLwordm9p
ZCB5eXNldF9pbiAoRklMRSAqICBfaW5fc3RyICkKK3sKKyAgICAgICAgeXlpbiA9IF9pbl9zdHIg
OworfQorCit2b2lkIHl5c2V0X291dCAoRklMRSAqICBfb3V0X3N0ciApCit7CisgICAgICAgIHl5
b3V0ID0gX291dF9zdHIgOworfQorCitpbnQgeXlnZXRfZGVidWcgICh2b2lkKQoreworICAgICAg
ICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBfYmRl
YnVnICkKK3sKKyAgICAgICAgeXlfZmxleF9kZWJ1ZyA9IF9iZGVidWcgOworfQorCitzdGF0aWMg
aW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCkKK3sKKyAgICAgICAgLyogSW5pdGlhbGl6YXRpb24g
aXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhp
cyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9j
YXRlIGhlcmUuCisgICAgICovCisKKyAgICAvKiBXZSBkbyBub3QgdG91Y2ggeXlsaW5lbm8gdW5s
ZXNzIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gKi8KKyAgICB5eWxpbmVubyA9ICAxOworICAgIAor
ICAgICh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsKKyAgICAoeXlfYnVmZmVyX3N0YWNrX3RvcCkg
PSAwOworICAgICh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IDA7CisgICAgKHl5X2NfYnVmX3ApID0g
TlVMTDsKKyAgICAoeXlfaW5pdCkgPSAwOworICAgICh5eV9zdGFydCkgPSAwOworCisvKiBEZWZp
bmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47Cisg
ICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSBOVUxMOworICAgIHl5b3V0ID0g
TlVMTDsKKyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBv
biBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHl5bGV4X2luaXQoKQorICAg
ICAqLworICAgIHJldHVybiAwOworfQorCisvKiB5eWxleF9kZXN0cm95IGlzIGZvciBib3RoIHJl
ZW50cmFudCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCB5eWxleF9kZXN0cm95
ICAodm9pZCkKK3sKKyAgICAKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWlu
ZyBlYWNoIGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxl
dGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwl9CisKKwkvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKCh5eV9idWZmZXJfc3RhY2spICk7CisJKHl5X2J1
ZmZlcl9zdGFjaykgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMg
aW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAg
ICAgKiB5eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAg
ICB5eV9pbml0X2dsb2JhbHMoICk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVy
bmFsIHV0aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMg
dm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4g
KQoreworCQkKKwlpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0g
czJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5
X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICkKK3sKKwlpbnQgbjsKKwlmb3IgKCBuID0g
MDsgc1tuXTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqeXlh
bGxvYyAoeXlfc2l6ZV90ICBzaXplICkKK3sKKwkJCXJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisK
K3ZvaWQgKnl5cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSApCit7CisJCQor
CS8qIFRoZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJv
dGgKKwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywg
YW5kIHRob3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtz
IHdpdGggdGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBj
YXN0bGVzcyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBh
bmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFu
IGFzc2lnbm1lbnQuCisJICovCisJcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKwordm9p
ZCB5eWZyZWUgKHZvaWQgKiBwdHIgKQoreworCQkJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNl
ZSB5eXJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZVEFCTEVT
X05BTUUgInl5dGFibGVzIgorCitzdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIg
KmluLCBzaXplX3QgbikKK3sKKwljaGFyICpvdXQ7CisJaW50IGM7CisJY2hhciBjMjsKKwljb25z
dCBjaGFyICpyZXN0LCAqZW5kOworCisJbmV3X3N0cmluZygpOworCWFwcGVuZF9zdHJpbmcoaW4s
IG4pOworCisJLyogZ2V0IHRoZSB3aG9sZSBsaW5lIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgdGhl
IGVuZCBvZiB0b2tlbi4gKi8KKwl3aGlsZSAoKGMgPSBpbnB1dCgpKSAhPSBFT0YpIHsKKwkJaWYg
KGMgPT0gJ1xuJykgeworCQkJdW5wdXQoYyk7CisJCQlicmVhazsKKwkJfQorCQljMiA9IGM7CisJ
CWFwcGVuZF9zdHJpbmcoJmMyLCAxKTsKKwl9CisKKwlyZXN0ID0gdGV4dDsKKwlvdXQgPSBleHBh
bmRfb25lX3Rva2VuKCZyZXN0KTsKKworCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0
byB0aGUgaW5wdXQgc3RyZWFtICovCisJZW5kID0gcmVzdCArIHN0cmxlbihyZXN0KTsKKwl3aGls
ZSAoZW5kID4gcmVzdCkKKwkJdW5wdXQoKi0tZW5kKTsKKworCWZyZWUodGV4dCk7CisKKwlyZXR1
cm4gb3V0OworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNo
YXIgKnN0cikKK3sKKwljb25zdCBjaGFyICplbmQ7CisJY2hhciAqcmVzOworCisJc3RyKys7CisK
KwlyZXMgPSBleHBhbmRfZG9sbGFyKCZzdHIpOworCisJLyogcHVzaCBiYWNrIHVudXNlZCBjaGFy
YWN0ZXJzIHRvIHRoZSBpbnB1dCBzdHJlYW0gKi8KKwllbmQgPSBzdHIgKyBzdHJsZW4oc3RyKTsK
Kwl3aGlsZSAoZW5kID4gc3RyKQorCQl1bnB1dCgqLS1lbmQpOworCisJYXBwZW5kX3N0cmluZyhy
ZXMsIHN0cmxlbihyZXMpKTsKKworCWZyZWUocmVzKTsKK30KKwordm9pZCB6Y29uZl9zdGFydGhl
bHAodm9pZCkKK3sKKwluZXdfc3RyaW5nKCk7CisJbGFzdF90cyA9IGZpcnN0X3RzID0gMDsKKwlC
RUdJTihIRUxQKTsKK30KKworc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKQoreworCXl5
bHZhbC5zdHJpbmcgPSB0ZXh0OworCUJFR0lOKElOSVRJQUwpOworfQorCisvKgorICogVHJ5IHRv
IG9wZW4gc3BlY2lmaWVkIGZpbGUgd2l0aCBmb2xsb3dpbmcgbmFtZXM6CisgKiAuL25hbWUKKyAq
ICQoc3JjdHJlZSkvbmFtZQorICogVGhlIGxhdHRlciBpcyB1c2VkIHdoZW4gc3JjdHJlZSBpcyBz
ZXBhcmF0ZSBmcm9tIG9ianRyZWUKKyAqIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuCisgKiBS
ZXR1cm4gTlVMTCBpZiBmaWxlIGlzIG5vdCBmb3VuZC4KKyAqLworRklMRSAqemNvbmZfZm9wZW4o
Y29uc3QgY2hhciAqbmFtZSkKK3sKKwljaGFyICplbnYsIGZ1bGxuYW1lW1BBVEhfTUFYKzFdOwor
CUZJTEUgKmY7CisKKwlmID0gZm9wZW4obmFtZSwgInIiKTsKKwlpZiAoIWYgJiYgbmFtZSAhPSBO
VUxMICYmIG5hbWVbMF0gIT0gJy8nKSB7CisJCWVudiA9IGdldGVudihTUkNUUkVFKTsKKwkJaWYg
KGVudikgeworCQkJc3ByaW50ZihmdWxsbmFtZSwgIiVzLyVzIiwgZW52LCBuYW1lKTsKKwkJCWYg
PSBmb3BlbihmdWxsbmFtZSwgInIiKTsKKwkJfQorCX0KKwlyZXR1cm4gZjsKK30KKwordm9pZCB6
Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKQoreworCXl5aW4gPSB6Y29uZl9mb3Blbihu
YW1lKTsKKwlpZiAoIXl5aW4pIHsKKwkJZnByaW50ZihzdGRlcnIsICJjYW4ndCBmaW5kIGZpbGUg
JXNcbiIsIG5hbWUpOworCQlleGl0KDEpOworCX0KKworCWN1cnJlbnRfYnVmID0geG1hbGxvYyhz
aXplb2YoKmN1cnJlbnRfYnVmKSk7CisJbWVtc2V0KGN1cnJlbnRfYnVmLCAwLCBzaXplb2YoKmN1
cnJlbnRfYnVmKSk7CisKKwljdXJyZW50X2ZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKKwl5eWxp
bmVubyA9IDE7Cit9CisKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSkKK3sK
KwlzdHJ1Y3QgZmlsZSAqaXRlcjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZpbGVfbG9va3VwKG5h
bWUpOworCXN0cnVjdCBidWZmZXIgKmJ1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwltZW1z
ZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCisJY3VycmVudF9idWYtPnN0YXRlID0gWVlfQ1VS
UkVOVF9CVUZGRVI7CisJeXlpbiA9IHpjb25mX2ZvcGVuKGZpbGUtPm5hbWUpOworCWlmICgheXlp
bikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjYW4ndCBvcGVuIGZpbGUgXCIlc1wiXG4i
LAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgZmlsZS0+bmFtZSk7CisJCWV4
aXQoMSk7CisJfQorCXl5X3N3aXRjaF90b19idWZmZXIoeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZ
X0JVRl9TSVpFKSk7CisJYnVmLT5wYXJlbnQgPSBjdXJyZW50X2J1ZjsKKwljdXJyZW50X2J1ZiA9
IGJ1ZjsKKworCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5lbm87CisJZmlsZS0+cGFyZW50
ID0gY3VycmVudF9maWxlOworCisJZm9yIChpdGVyID0gY3VycmVudF9maWxlOyBpdGVyOyBpdGVy
ID0gaXRlci0+cGFyZW50KSB7CisJCWlmICghc3RyY21wKGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUp
KSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3Rl
ZC5cbiIKKwkJCQkiSW5jbHVzaW9uIHBhdGg6XG4iCisJCQkJIiAgY3VycmVudCBmaWxlIDogJXNc
biIsIGZpbGUtPm5hbWUpOworCQkJaXRlciA9IGZpbGU7CisJCQlkbyB7CisJCQkJaXRlciA9IGl0
ZXItPnBhcmVudDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgaW5jbHVkZWQgZnJvbTogJXM6JWRc
biIsCisJCQkJCWl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubyAtIDEpOworCQkJfSB3aGlsZSAoc3Ry
Y21wKGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwl5
eWxpbmVubyA9IDE7CisJY3VycmVudF9maWxlID0gZmlsZTsKK30KKworc3RhdGljIHZvaWQgemNv
bmZfZW5kZmlsZSh2b2lkKQoreworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKworCWN1cnJlbnRf
ZmlsZSA9IGN1cnJlbnRfZmlsZS0+cGFyZW50OworCWlmIChjdXJyZW50X2ZpbGUpCisJCXl5bGlu
ZW5vID0gY3VycmVudF9maWxlLT5saW5lbm87CisKKwlwYXJlbnQgPSBjdXJyZW50X2J1Zi0+cGFy
ZW50OworCWlmIChwYXJlbnQpIHsKKwkJZmNsb3NlKHl5aW4pOworCQl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSKTsKKwkJeXlfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQtPnN0YXRl
KTsKKwl9CisJZnJlZShjdXJyZW50X2J1Zik7CisJY3VycmVudF9idWYgPSBwYXJlbnQ7Cit9CisK
K2ludCB6Y29uZl9saW5lbm8odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9wb3MubGluZW5vOwor
fQorCitjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRf
cG9zLmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7Cit9CisKZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3pjb25mLnRhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5kMWNm
YmNiNgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMK
QEAgLTAsMCArMSwyNTA0IEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24g
My4wLjQuICAqLworCisvKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNl
cnMgaW4gQworCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDE1IEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMg
b2YgdGhlIExpY2Vuc2UsIG9yCisgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u
ICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdl
ciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIg
c2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3Vy
IGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBn
ZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9m
CisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkg
b3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAo
YXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2gg
d2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1
dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBM
aWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKworICAgVGhpcyBzcGVjaWFs
IGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgor
ICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxl
dG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBv
cmlnaW5hbCBzby1jYWxsZWQgInNlbWFudGljIiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9s
cyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAg
aW5mcmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4g
Zm9yIGxvY2FsCisgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFu
ZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0
aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxlcyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5
IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFD
RSIgYmVsb3cuICAqLworCisvKiBJZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZ
WUJJU09OIDEKKworLyogQmlzb24gdmVyc2lvbi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lP
TiAiMy4wLjQiCisKKy8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05B
TUUgInlhY2MuYyIKKworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDAKKwor
LyogUHVzaCBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVNIIDAKKworLyogUHVsbCBwYXJzZXJz
LiAgKi8KKyNkZWZpbmUgWVlQVUxMIDEKKworCisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBv
ZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBS
b21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIFJlbGVhc2VkIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgor
I2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCisjaW5jbHVk
ZSAibGtjLmgiCisKKyNkZWZpbmUgcHJpbnRkKG1hc2ssIGZtdC4uLikgaWYgKGNkZWJ1ZyAmICht
YXNrKSkgcHJpbnRmKGZtdCkKKworI2RlZmluZSBQUklOVEQJCTB4MDAwMQorI2RlZmluZSBERUJV
R19QQVJTRQkweDAwMDIKKworaW50IGNkZWJ1ZyA9IFBSSU5URDsKKworaW50IHl5bGV4KHZvaWQp
Oworc3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICplcnIpOworc3RhdGljIHZvaWQgemNv
bmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihj
b25zdCBjaGFyICplcnIsIC4uLik7CitzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBz
dHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKKworc3Ry
dWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hbU1lNQk9MX0hBU0hTSVpFXTsKKworc3RhdGljIHN0cnVj
dCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OworCisKKworCisjIGlmbmRlZiBZ
WV9OVUxMUFRSCisjICBpZiBkZWZpbmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1
c3BsdXMKKyMgICBkZWZpbmUgWVlfTlVMTFBUUiBudWxscHRyCisjICBlbHNlCisjICAgZGVmaW5l
IFlZX05VTExQVFIgMAorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBl
cnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJS
T1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZ
WUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKworLyogRGVidWcgdHJhY2VzLiAgKi8KKyNpZm5k
ZWYgWVlERUJVRworIyBkZWZpbmUgWVlERUJVRyAxCisjZW5kaWYKKyNpZiBZWURFQlVHCitleHRl
cm4gaW50IHl5ZGVidWc7CisjZW5kaWYKKworLyogVG9rZW4gdHlwZS4gICovCisjaWZuZGVmIFlZ
VE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICBlbnVtIHl5dG9rZW50eXBlCisgIHsK
KyAgICBUX01BSU5NRU5VID0gMjU4LAorICAgIFRfTUVOVSA9IDI1OSwKKyAgICBUX0VORE1FTlUg
PSAyNjAsCisgICAgVF9TT1VSQ0UgPSAyNjEsCisgICAgVF9DSE9JQ0UgPSAyNjIsCisgICAgVF9F
TkRDSE9JQ0UgPSAyNjMsCisgICAgVF9DT01NRU5UID0gMjY0LAorICAgIFRfQ09ORklHID0gMjY1
LAorICAgIFRfTUVOVUNPTkZJRyA9IDI2NiwKKyAgICBUX0hFTFAgPSAyNjcsCisgICAgVF9IRUxQ
VEVYVCA9IDI2OCwKKyAgICBUX0lGID0gMjY5LAorICAgIFRfRU5ESUYgPSAyNzAsCisgICAgVF9E
RVBFTkRTID0gMjcxLAorICAgIFRfT1BUSU9OQUwgPSAyNzIsCisgICAgVF9QUk9NUFQgPSAyNzMs
CisgICAgVF9UWVBFID0gMjc0LAorICAgIFRfREVGQVVMVCA9IDI3NSwKKyAgICBUX1NFTEVDVCA9
IDI3NiwKKyAgICBUX0lNUExZID0gMjc3LAorICAgIFRfUkFOR0UgPSAyNzgsCisgICAgVF9WSVNJ
QkxFID0gMjc5LAorICAgIFRfT1BUSU9OID0gMjgwLAorICAgIFRfT04gPSAyODEsCisgICAgVF9X
T1JEID0gMjgyLAorICAgIFRfV09SRF9RVU9URSA9IDI4MywKKyAgICBUX1VORVFVQUwgPSAyODQs
CisgICAgVF9MRVNTID0gMjg1LAorICAgIFRfTEVTU19FUVVBTCA9IDI4NiwKKyAgICBUX0dSRUFU
RVIgPSAyODcsCisgICAgVF9HUkVBVEVSX0VRVUFMID0gMjg4LAorICAgIFRfQ0xPU0VfUEFSRU4g
PSAyODksCisgICAgVF9PUEVOX1BBUkVOID0gMjkwLAorICAgIFRfRU9MID0gMjkxLAorICAgIFRf
VkFSSUFCTEUgPSAyOTIsCisgICAgVF9BU1NJR04gPSAyOTMsCisgICAgVF9BU1NJR05fVkFMID0g
Mjk0LAorICAgIFRfT1IgPSAyOTUsCisgICAgVF9BTkQgPSAyOTYsCisgICAgVF9FUVVBTCA9IDI5
NywKKyAgICBUX05PVCA9IDI5OAorICB9OworI2VuZGlmCisKKy8qIFZhbHVlIHR5cGUuICAqLwor
I2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECisK
K3VuaW9uIFlZU1RZUEUKK3sKKworCisJY2hhciAqc3RyaW5nOworCXN0cnVjdCBmaWxlICpmaWxl
OworCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKKwlzdHJ1Y3Qg
bWVudSAqbWVudTsKKwljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkOworCWVudW0gdmFyaWFibGVf
Zmxhdm9yIGZsYXZvcjsKKworCit9OworCit0eXBlZGVmIHVuaW9uIFlZU1RZUEUgWVlTVFlQRTsK
KyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCisjIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xB
UkVEIDEKKyNlbmRpZgorCisKK2V4dGVybiBZWVNUWVBFIHl5bHZhbDsKKworaW50IHl5cGFyc2Ug
KHZvaWQpOworCisKKworLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlv
bnMuICAqLworCisKKy8qIEluY2x1ZGUga2NvbmZfaWQuYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhl
IHRva2VuIGNvbnN0YW50cy4gKi8KKyNpbmNsdWRlICJrY29uZl9pZC5jIgorCisKKworI2lmZGVm
IHNob3J0CisjIHVuZGVmIHNob3J0CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UOAordHlw
ZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQg
Y2hhciB5eXR5cGVfdWludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQ4Cit0eXBlZGVm
IFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0
eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBF
X1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50
IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKworI2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZ
WVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2OworI2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlw
ZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVmIFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBF
X18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXpl
X3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QK
KyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1
bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgo
WVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAm
JiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVOQUJMRV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlfKE1zZ2lk
KSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBNc2dpZCkKKyMgIGVuZGlmCisjIGVuZGlmCisj
IGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZWV8oTXNnaWQpIE1zZ2lkCisjIGVuZGlmCisjZW5kaWYK
KworI2lmbmRlZiBZWV9BVFRSSUJVVEUKKyMgaWYgKGRlZmluZWQgX19HTlVDX18gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICYmICgyIDwgX19H
TlVDX18gfHwgKF9fR05VQ19fID09IDIgJiYgOTYgPD0gX19HTlVDX01JTk9SX18pKSkgIFwKKyAg
ICAgfHwgZGVmaW5lZCBfX1NVTlBST19DICYmIDB4NTExMCA8PSBfX1NVTlBST19DCisjICBkZWZp
bmUgWVlfQVRUUklCVVRFKFNwZWMpIF9fYXR0cmlidXRlX18oU3BlYykKKyMgZWxzZQorIyAgZGVm
aW5lIFlZX0FUVFJJQlVURShTcGVjKSAvKiBlbXB0eSAqLworIyBlbmRpZgorI2VuZGlmCisKKyNp
Zm5kZWYgWVlfQVRUUklCVVRFX1BVUkUKKyMgZGVmaW5lIFlZX0FUVFJJQlVURV9QVVJFICAgWVlf
QVRUUklCVVRFICgoX19wdXJlX18pKQorI2VuZGlmCisKKyNpZm5kZWYgWVlfQVRUUklCVVRFX1VO
VVNFRAorIyBkZWZpbmUgWVlfQVRUUklCVVRFX1VOVVNFRCBZWV9BVFRSSUJVVEUgKChfX3VudXNl
ZF9fKSkKKyNlbmRpZgorCisjaWYgIWRlZmluZWQgX05vcmV0dXJuIFwKKyAgICAgJiYgKCFkZWZp
bmVkIF9fU1REQ19WRVJTSU9OX18gfHwgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMikKKyMgaWYg
ZGVmaW5lZCBfTVNDX1ZFUiAmJiAxMjAwIDw9IF9NU0NfVkVSCisjICBkZWZpbmUgX05vcmV0dXJu
IF9fZGVjbHNwZWMgKG5vcmV0dXJuKQorIyBlbHNlCisjICBkZWZpbmUgX05vcmV0dXJuIFlZX0FU
VFJJQlVURSAoKF9fbm9yZXR1cm5fXykpCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3Mg
dW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVk
IGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkp
CisjZWxzZQorIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisjaWYgZGVm
aW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXwor
LyogU3VwcHJlc3MgYW4gaW5jb3JyZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJlaW5nIHVu
aW5pdGlhbGl6ZWQuICAqLworIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURf
QkVHSU4gXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAorICAgIF9QcmFn
bWEgKCJHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwKKyAgICBf
UHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwi
IikKKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCisgICAgX1By
YWdtYSAoIkdDQyBkaWFnbm9zdGljIHBvcCIpCisjZWxzZQorIyBkZWZpbmUgWVlfSU5JVElBTF9W
QUxVRShWYWx1ZSkgVmFsdWUKKyNlbmRpZgorI2lmbmRlZiBZWV9JR05PUkVfTUFZQkVfVU5JTklU
SUFMSVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVH
SU4KKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorI2VuZGlmCisj
aWZuZGVmIFlZX0lOSVRJQUxfVkFMVUUKKyMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUp
IC8qIE5vdGhpbmcuICovCisjZW5kaWYKKworCisjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwg
WVlFUlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9j
OyBkZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VT
RV9BTExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisj
ICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmlu
ZWQgX19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZS
SU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAg
ZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIK
KyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8KKyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlT
VEFDS19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmlu
ZWQgRVhJVF9TVUNDRVNTCisjICAgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworICAgICAgLyogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdpdG5l
c3MgZm9yIHN0ZGxpYi5oLiAgKi8KKyMgICAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKKyMgICAgICBk
ZWZpbmUgRVhJVF9TVUNDRVNTIDAKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYK
KyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5
IEdDQydzICdlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZS
RUUoUHRyKSBkbyB7IC8qIGVtcHR5ICovOyB9IHdoaWxlICgwKQorIyAgaWZuZGVmIFlZU1RBQ0tf
QUxMT0NfTUFYSU1VTQorICAgIC8qIFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3Vh
cmQgcGFnZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBzdGFjaywKKyAgICAgICBhbmQgYSBwYWdlIHNp
emUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5Cisg
ICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRs
eSBzbWFsbGVyIG51bWJlcgorICAgICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxv
Y2F0ZWQgdGVtcG9yYXJ5IHN0YWNrIHNsb3RzLiAgKi8KKyMgICBkZWZpbmUgWVlTVEFDS19BTExP
Q19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovCisjICBlbmRpZgorIyBl
bHNlCisjICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQworIyAgZGVmaW5lIFlZU1RBQ0tf
RlJFRSBZWUZSRUUKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyMgICBkZWZpbmUg
WVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNCisjICBlbmRpZgorIyAgaWYgKGRl
ZmluZWQgX19jcGx1c3BsdXMgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCisgICAgICAgJiYg
ISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKKyAgICAgICAgICAgICAm
JiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGli
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgRVhJVF9T
VUNDRVNTCisjICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMAorIyAgIGVuZGlmCisjICBlbmRpZgor
IyAgaWZuZGVmIFlZTUFMTE9DCisjICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEg
ZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUwordm9pZCAqbWFsbG9jIChZ
WVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgor
IyAgZW5kaWYKKyMgIGlmbmRlZiBZWUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBp
ZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTCit2b2lkIGZyZWUgKHZv
aWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgorIyAg
ZW5kaWYKKyMgZW5kaWYKKyNlbmRpZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9S
X1ZFUkJPU0UgKi8KKworCisjaWYgKCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKKyAgICAgJiYgKCEg
ZGVmaW5lZCBfX2NwbHVzcGx1cyBcCisgICAgICAgICB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RS
SVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Bl
cmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworewor
ICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsKKyAgWVlTVFlQRSB5eXZzX2FsbG9jOworfTsKKwor
LyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sg
YW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAo
dW5pb24geXlhbGxvYykgLSAxKQorCisvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBl
bm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgKKyAgIE4gZWxlbWVudHMuICAqLwor
IyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVf
aW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVN
KQorCisjIGRlZmluZSBZWUNPUFlfTkVFREVEIDEKKworLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBp
dHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisgICBsb2NhbCB2YXJpYWJsZXMg
WVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKKyAg
IGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24g
b2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxv
Y2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBkZWZpbmUgWVlTVEFDS19SRUxP
Q0FURShTdGFja19hbGxvYywgU3RhY2spICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBZWVNJWkVfVCB5eW5ld2J5
dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBZWUNPUFkgKCZ5eXB0ci0+U3RhY2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5eW5ld2J5dGVzID0geXlzdGFj
a3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisgICAgICAg
IHl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgd2hpbGUgKDApCisKKyNlbmRpZgorCisj
aWYgZGVmaW5lZCBZWUNPUFlfTkVFREVEICYmIFlZQ09QWV9ORUVERUQKKy8qIENvcHkgQ09VTlQg
b2JqZWN0cyBmcm9tIFNSQyB0byBEU1QuICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwor
ICAgbm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05V
Q19fICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBc
CisgICAgICBfX2J1aWx0aW5fbWVtY3B5IChEc3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihT
cmMpKSkKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAg
ICAgICAgIFwKKyAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgICBZWVNJWkVfVCB5eWk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7IHl5aSsrKSAgIFwKKyAgICAgICAgICAgIChE
c3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHdoaWxlICgwKQorIyAgZW5kaWYK
KyMgZW5kaWYKKyNlbmRpZiAvKiAhWVlDT1BZX05FRURFRCAqLworCisvKiBZWUZJTkFMIC0tIFN0
YXRlIG51bWJlciBvZiB0aGUgdGVybWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFM
ICAxMQorLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZ
TEFTVCAgIDMzMgorCisvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCisj
ZGVmaW5lIFlZTlRPS0VOUyAgNDQKKy8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxz
LiAgKi8KKyNkZWZpbmUgWVlOTlRTICA1MworLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVz
LiAgKi8KKyNkZWZpbmUgWVlOUlVMRVMgIDEyOQorLyogWVlOU1RBVEVTIC0tIE51bWJlciBvZiBz
dGF0ZXMuICAqLworI2RlZmluZSBZWU5TVEFURVMgIDIxMQorCisvKiBZWVRSQU5TTEFURVtZWVhd
IC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWVggYXMgcmV0dXJuZWQKKyAgIGJ5
IHl5bGV4LCB3aXRoIG91dC1vZi1ib3VuZHMgY2hlY2tpbmcuICAqLworI2RlZmluZSBZWVVOREVG
VE9LICAyCisjZGVmaW5lIFlZTUFYVVRPSyAgIDI5OAorCisjZGVmaW5lIFlZVFJBTlNMQVRFKFlZ
WCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICgo
dW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlV
TkRFRlRPSykKKworLyogWVlUUkFOU0xBVEVbVE9LRU4tTlVNXSAtLSBTeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gVE9LRU4tTlVNCisgICBhcyByZXR1cm5lZCBieSB5eWxleCwgd2l0aG91
dCBvdXQtb2YtYm91bmRzIGNoZWNraW5nLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDgg
eXl0cmFuc2xhdGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAor
ICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQy
LCAgICA0MworfTsKKworI2lmIFlZREVCVUcKKyAgLyogWVlSTElORVtZWU5dIC0tIFNvdXJjZSBs
aW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQxNiB5eXJsaW5lW10gPQoreworICAgICAgIDAsICAgMTE0LCAgIDExNCwgICAx
MTQsICAgMTE2LCAgIDExNiwgICAxMjAsICAgMTI1LCAgIDEyNywgICAxMjgsCisgICAgIDEyOSwg
ICAxMzAsICAgMTMxLCAgIDEzMiwgICAxMzYsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAg
IDE0MCwKKyAgICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0NCwgICAxNDUsICAgMTQ2
LCAgIDE0NywgICAxNDgsICAgMTQ5LAorICAgICAxNTAsICAgMTU0LCAgIDE1NSwgICAxNjEsICAg
MTY4LCAgIDE3MywgICAxODAsICAgMTg5LCAgIDE5MSwgICAxOTIsCisgICAgIDE5MywgICAxOTQs
ICAgMTk1LCAgIDE5NiwgICAxOTksICAgMjA3LCAgIDIxMywgICAyMjMsICAgMjI5LCAgIDIzNSwK
KyAgICAgMjQxLCAgIDI0NCwgICAyNDYsICAgMjU5LCAgIDI2MCwgICAyNjUsICAgMjc1LCAgIDI4
MCwgICAyODgsICAgMjkxLAorICAgICAyOTMsICAgMjk0LCAgIDI5NSwgICAyOTYsICAgMjk3LCAg
IDMwMCwgICAzMDYsICAgMzE3LCAgIDMyMywgICAzMzMsCisgICAgIDMzNSwgICAzNDAsICAgMzQ4
LCAgIDM1NiwgICAzNTksICAgMzYxLCAgIDM2MiwgICAzNjMsICAgMzY4LCAgIDM3NSwKKyAgICAg
MzgwLCAgIDM4OCwgICAzOTEsICAgMzkzLCAgIDM5NCwgICAzOTUsICAgMzk4LCAgIDQwNywgICA0
MTQsICAgNDE5LAorICAgICA0MjUsICAgNDQzLCAgIDQ0NSwgICA0NDYsICAgNDQ3LCAgIDQ1MCwg
ICA0NTgsICAgNDYwLCAgIDQ2MSwgICA0NjQsCisgICAgIDQ3MSwgICA0NzMsICAgNDc4LCAgIDQ3
OSwgICA0ODIsICAgNDgzLCAgIDQ4NCwgICA0ODgsICAgNDg5LCAgIDQ5MiwKKyAgICAgNDkzLCAg
IDQ5NiwgICA0OTcsICAgNDk4LCAgIDQ5OSwgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsICAg
NTA0LAorICAgICA1MDUsICAgNTA2LCAgIDUxMCwgICA1MTIsICAgNTEzLCAgIDUxNiwgICA1MTcs
ICAgNTIxLCAgIDUyNCwgICA1MjUKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwgWVlFUlJP
Ul9WRVJCT1NFIHx8IDAKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2Yg
dGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0
YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8KK3N0YXRpYyBjb25zdCBjaGFy
ICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwg
IlRfTUFJTk1FTlUiLCAiVF9NRU5VIiwgIlRfRU5ETUVOVSIsCisgICJUX1NPVVJDRSIsICJUX0NI
T0lDRSIsICJUX0VORENIT0lDRSIsICJUX0NPTU1FTlQiLCAiVF9DT05GSUciLAorICAiVF9NRU5V
Q09ORklHIiwgIlRfSEVMUCIsICJUX0hFTFBURVhUIiwgIlRfSUYiLCAiVF9FTkRJRiIsICJUX0RF
UEVORFMiLAorICAiVF9PUFRJT05BTCIsICJUX1BST01QVCIsICJUX1RZUEUiLCAiVF9ERUZBVUxU
IiwgIlRfU0VMRUNUIiwgIlRfSU1QTFkiLAorICAiVF9SQU5HRSIsICJUX1ZJU0lCTEUiLCAiVF9P
UFRJT04iLCAiVF9PTiIsICJUX1dPUkQiLCAiVF9XT1JEX1FVT1RFIiwKKyAgIlRfVU5FUVVBTCIs
ICJUX0xFU1MiLCAiVF9MRVNTX0VRVUFMIiwgIlRfR1JFQVRFUiIsICJUX0dSRUFURVJfRVFVQUwi
LAorICAiVF9DTE9TRV9QQVJFTiIsICJUX09QRU5fUEFSRU4iLCAiVF9FT0wiLCAiVF9WQVJJQUJM
RSIsICJUX0FTU0lHTiIsCisgICJUX0FTU0lHTl9WQUwiLCAiVF9PUiIsICJUX0FORCIsICJUX0VR
VUFMIiwgIlRfTk9UIiwgIiRhY2NlcHQiLCAiaW5wdXQiLAorICAic3RhcnQiLCAibWFpbm1lbnVf
c3RtdCIsICJzdG10X2xpc3QiLCAib3B0aW9uX25hbWUiLCAiY29tbW9uX3N0bXQiLAorICAib3B0
aW9uX2Vycm9yIiwgImNvbmZpZ19lbnRyeV9zdGFydCIsICJjb25maWdfc3RtdCIsCisgICJtZW51
Y29uZmlnX2VudHJ5X3N0YXJ0IiwgIm1lbnVjb25maWdfc3RtdCIsICJjb25maWdfb3B0aW9uX2xp
c3QiLAorICAiY29uZmlnX29wdGlvbiIsICJzeW1ib2xfb3B0aW9uIiwgInN5bWJvbF9vcHRpb25f
bGlzdCIsCisgICJzeW1ib2xfb3B0aW9uX2FyZyIsICJjaG9pY2UiLCAiY2hvaWNlX2VudHJ5Iiwg
ImNob2ljZV9lbmQiLAorICAiY2hvaWNlX3N0bXQiLCAiY2hvaWNlX29wdGlvbl9saXN0IiwgImNo
b2ljZV9vcHRpb24iLCAiY2hvaWNlX2Jsb2NrIiwKKyAgImlmX2VudHJ5IiwgImlmX2VuZCIsICJp
Zl9zdG10IiwgImlmX2Jsb2NrIiwgIm1lbnUiLCAibWVudV9lbnRyeSIsCisgICJtZW51X2VuZCIs
ICJtZW51X3N0bXQiLCAibWVudV9ibG9jayIsICJzb3VyY2Vfc3RtdCIsICJjb21tZW50IiwKKyAg
ImNvbW1lbnRfc3RtdCIsICJoZWxwX3N0YXJ0IiwgImhlbHAiLCAiZGVwZW5kc19saXN0IiwgImRl
cGVuZHMiLAorICAidmlzaWJpbGl0eV9saXN0IiwgInZpc2libGUiLCAicHJvbXB0X3N0bXRfb3B0
IiwgInByb21wdCIsICJlbmQiLCAibmwiLAorICAiaWZfZXhwciIsICJleHByIiwgIm5vbmNvbnN0
X3N5bWJvbCIsICJzeW1ib2wiLCAid29yZF9vcHQiLAorICAiYXNzaWdubWVudF9zdG10IiwgImFz
c2lnbl92YWwiLCBZWV9OVUxMUFRSCit9OworI2VuZGlmCisKKyMgaWZkZWYgWVlQUklOVAorLyog
WVlUT0tOVU1bTlVNXSAtLSAoRXh0ZXJuYWwpIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRv
IHRoZQorICAgKGludGVybmFsKSBzeW1ib2wgbnVtYmVyIE5VTSAod2hpY2ggbXVzdCBiZSB0aGF0
IG9mIGEgdG9rZW4pLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10g
PQoreworICAgICAgIDAsICAgMjU2LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEs
ICAgMjYyLCAgIDI2MywgICAyNjQsCisgICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAy
NjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwKKyAgICAgMjc1LCAgIDI3Niwg
ICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAor
ICAgICAyODUsICAgMjg2LCAgIDI4NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjky
LCAgIDI5MywgICAyOTQsCisgICAgIDI5NSwgICAyOTYsICAgMjk3LCAgIDI5OAorfTsKKyMgZW5k
aWYKKworI2RlZmluZSBZWVBBQ1RfTklORiAtOTIKKworI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNf
ZGVmYXVsdChZeXN0YXRlKSBcCisgICghISgoWXlzdGF0ZSkgPT0gKC05MikpKQorCisjZGVmaW5l
IFlZVEFCTEVfTklORiAtODkKKworI2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFi
bGVfdmFsdWUpIFwKKyAgMAorCisgIC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZ
VEFCTEUgb2YgdGhlIHBvcnRpb24gZGVzY3JpYmluZworICAgICBTVEFURS1OVU0uICAqLworc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9Cit7CisgICAgICAyMSwgICAgMzgsICAg
LTkyLCAgICAgNCwgICAtOTIsICAgLTkyLCAgIDE1NywgICAgMjMsICAgLTkyLCAgIC05MiwKKyAg
ICAgLTE5LCAgIC05MiwgICAxOTEsICAgLTE2LCAgICAzOCwgICAtMTMsICAgIDM4LCAgICAgNiwg
ICAgMjQsICAgIDM4LAorICAgICAgNDgsICAgIDQ4LCAgICAzNCwgICAgNDMsICAgLTkyLCAgIC05
MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAg
ICA5NiwgICAtOTIsICAgIDQ0LCAgIDExMSwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTky
LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIs
ICAgLTkyLAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAgODMsCisgICAgIC05MiwgICAgODksICAgLTkyLCAgIDExNiwg
ICAtOTIsICAgMTMzLCAgIC05MiwgICAxMzQsICAgMTQ2LCAgIC05MiwKKyAgICAgIDM0LCAgICAz
NCwgICAxMTMsICAgLTkyLCAgICA3MywgICAtOTIsICAgMTUwLCAgICA2MiwgICAxNTEsICAgIDMx
LAorICAgICAxMjMsICAgMjU4LCAgIDI5MywgICAyODIsICAgIC0yLCAgIDI4MiwgICAyMjUsICAg
LTkyLCAgIC05MiwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgICAzMCwgICAtOTIs
ICAgLTkyLCAgICAzNCwgICAgMzQsICAgIDY1LCAgICA2NSwKKyAgICAgIDY1LCAgICA2NSwgICAg
NjUsICAgIDY1LCAgIC05MiwgICAtOTIsICAgMTUyLCAgIC05MiwgICAxNTMsICAgMTU0LAorICAg
ICAxMTAsICAgIDM4LCAgICAzOCwgICAgMzQsICAgIDQ4LCAgICA0OCwgICAgNjUsICAgLTkyLCAg
IDIwMiwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIDIwMywgICAtOTIsICAgLTky
LCAgIDE4MSwgICAgMzgsICAgIDM4LCAgICA0OCwKKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLAorICAgICAtOTIs
ICAgLTkyLCAgIC05MiwgICAyMDUsICAgLTkyLCAgICA4MCwgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDE3
OSwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgICAzNCwgICAyMDUsICAgMTg1LAorICAgICAyMDUsICAgLTEx
LCAgIDIwNSwgICAyMDUsICAgIDY1LCAgICAzNiwgICAxODYsICAgLTkyLCAgIC05MiwgICAyMDUs
CisgICAgIDE4NywgICAyMDUsICAgIDM0LCAgIC05MiwgICAxMTUsICAgMTg4LCAgIC05MiwgICAt
OTIsICAgMjAxLCAgIDIxNCwKKyAgICAgMjE1LCAgIDIwNSwgICAxOTYsICAgLTkyLCAgIC05Miwg
ICAyMTcsICAgLTkyLCAgIDIxOCwgICAgODEsICAgLTkyLAorICAgICAtOTIsICAgLTkyLCAgIC05
MiwgICAtOTIsICAgMjE5LCAgICAzOCwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCisgICAg
IC05MgorfTsKKworICAvKiBZWURFRkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9u
IG51bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uCisgICAgIFBlcmZvcm1lZCB3aGVuIFlZVEFCTEUg
ZG9lcyBub3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8KKyAgICAgbWVhbnMg
dGhlIGRlZmF1bHQgaXMgYW4gZXJyb3IuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5
eWRlZmFjdFtdID0KK3sKKyAgICAgICA3LCAgICAgMCwgICAxMDcsICAgICAwLCAgICAgMywgICAg
IDcsICAgICAwLCAgICAgNywgICAxMDIsICAgMTAzLAorICAgICAgIDAsICAgICAxLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTI1LCAgICAgMCwgICAgIDAsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTUsICAgIDIwLCAgICAxNiwgICAgMTcsICAgIDIy
LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMSwgICAgMjMsICAgICAwLCAgICAyNCwgICAgIDAsICAg
ICAwLCAgICAgOCwgICAgMzcsICAgIDI3LAorICAgICAgMzcsICAgIDI4LCAgICA1OSwgICAgNjks
ICAgICA5LCAgICA3NCwgICAgMjUsICAgIDk2LCAgICA4MiwgICAgMTAsCisgICAgICAyOSwgICAg
OTEsICAgIDI2LCAgICAxMSwgICAgMzAsICAgMTA4LCAgICAgMiwgICAgIDYsICAgIDE0LCAgICAg
MCwKKyAgICAgMTA0LCAgICAgMCwgICAxMjYsICAgICAwLCAgIDEwNSwgICAgIDAsICAgMTIyLCAg
ICAgMCwgICAgIDAsICAgMTI0LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjMsICAgMTEx
LCAgIDEwNiwgICAgIDAsICAgMTI4LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgOTEsICAgICAwLCAgICAgMCwgICAgNzgsICAgIDg2LCAgICA1NSwKKyAg
ICAgIDg3LCAgICAzMywgICAgMzUsICAgICAwLCAgIDExOSwgICAgNzEsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgIDEy
OSwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgMTAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNTEsICAgICAwLCAgICA0MywKKyAgICAgIDQy
LCAgICAzOCwgICAgMzksICAgICAwLCAgICA0MSwgICAgNDAsICAgICAwLCAgICAgMCwgICAxMDAs
ICAgICAwLAorICAgICAgNjMsICAgIDY0LCAgICA2MCwgICAgNjIsICAgIDYxLCAgICA3MCwgICAg
NTgsICAgIDU3LCAgICA3NSwgICAgNzcsCisgICAgICA3MywgICAgNzYsICAgIDcyLCAgIDEwOSwg
ICAgOTgsICAgICAwLCAgICA5NywgICAgODMsICAgIDg1LCAgICA4MSwKKyAgICAgIDg0LCAgICA4
MCwgICAgOTMsICAgIDk0LCAgICA5MiwgICAxMTgsICAgMTIwLCAgIDEyMSwgICAxMTcsICAgMTEy
LAorICAgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTI3LCAgICAzMiwgICAgODksICAg
ICAwLCAgIDEwOSwgICAgIDAsCisgICAgIDEwOSwgICAxMDksICAgMTA5LCAgIDEwOSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgOTAsICAgIDY3LCAgIDEwOSwKKyAgICAgICAwLCAgIDEwOSwgICAg
IDAsICAgIDk5LCAgICAgMCwgICAgIDAsICAgIDQ0LCAgIDEwMSwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgMTA5LCAgICA1MywgICAgNTAsICAgIDMxLCAgICAgMCwgICAgNjYsICAgICAwLCAg
IDExMCwgICAgOTUsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgIDAsICAgICAw
LCAgICA1MiwgICAgNjUsICAgIDY4LCAgICA0OSwKKyAgICAgIDU0Cit9OworCisgIC8qIFlZUEdP
VE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9
Cit7CisgICAgIC05MiwgICAtOTIsICAgMjQ5LCAgIC05MiwgICAyNTIsICAgLTkyLCAgICAtOSwg
ICAtNjcsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAgIC05MiwgICAyMjAsICAgLTkyLCAgIC05
MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLAorICAgICAgMzUsICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCisg
ICAgIC05MiwgICAxMDAsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAxNzcs
ICAgMTk1LCAgIC02NSwKKyAgICAgLTkyLCAgIC05MiwgICAxMzcsICAgIC0xLCAgICAyNiwgICAt
OTIsICAgMTQxLCAgIC02OSwgICAtMTUsICAgLTkxLAorICAgICAtOTIsICAgLTkyLCAgIC05Mgor
fTsKKworICAvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgMzYsICAgIDM3LCAgIDEyMCwgICAgMzgsICAgIDM5LAorICAgICAgNDAsICAgIDQx
LCAgICA3OSwgICAxMjEsICAgMTIyLCAgIDE3NSwgICAyMDYsICAgIDQyLCAgICA0MywgICAxMzYs
CisgICAgICA0NCwgICAgODEsICAgMTMyLCAgICA4MiwgICAgNDUsICAgMTQwLCAgICA0NiwgICAg
ODMsICAgIDQ3LCAgICA0OCwKKyAgICAgMTQ5LCAgICA0OSwgICAgODUsICAgIDUwLCAgICA1MSwg
ICAgNTIsICAgMTIzLCAgIDEyNCwgICAgODYsICAgMTI1LAorICAgICAgODQsICAgMTQ2LCAgIDE2
OSwgICAxNzAsICAgIDUzLCAgICAgNywgICAxODMsICAgIDcyLCAgICA3MywgICAgNzQsCisgICAg
ICA2MywgICAgNTQsICAgMTA2Cit9OworCisgIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1d
IC0tIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYKKyAgICAgcG9zaXRpdmUsIHNo
aWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdob3NlCisgICAg
IG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4g
ICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7CisgICAgICAxMCwg
ICAgOTMsICAgIDk0LCAgIDE4MiwgICAgMTEsICAgIDY3LCAgICA2OCwgICAxNTgsICAgMTU5LCAg
IDE2MCwKKyAgICAgMTYxLCAgIDE2MiwgICAxNjMsICAgIDU5LCAgIDEzMSwgICAgNjEsICAgMTM0
LCAgICA1NywgICAgNjUsICAgMTUzLAorICAgICAgNTgsICAgMTU0LCAgIDE0MywgICAgNjAsICAg
ICAxLCAgIDE3NCwgICAgIDEsICAgMTU2LCAgIDE1NywgICAgOTYsCisgICAgICA5NywgICAtMzQs
ICAgMTA4LCAgICA2MiwgICAxNDQsICAgLTM0LCAgIC0zNCwgICAtMzQsICAgLTM0LCAgIC0zNCwK
KyAgICAgLTM0LCAgIC0zNCwgICAtMzQsICAgMTA5LCAgIDE3MSwgICAtMzQsICAgLTM0LCAgIDEx
MCwgICAtMzQsICAgMTExLAorICAgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAg
IC0zNCwgICAxMTcsICAgICAyLCAgIDExOCwgICAgNTUsCisgICAgICA2NCwgICAgNjYsICAgIDY5
LCAgIDE5MiwgICAxNTUsICAgICA4LCAgICAgOSwgICAxMTksICAgLTM0LCAgICA3MCwKKyAgICAg
IDk2LCAgICA5NywgICAxOTMsICAgMTM1LCAgIDEzOCwgICAgNjYsICAgMTQ3LCAgICA3MSwgICAx
NTMsICAgIDc1LAorICAgICAxNTQsICAgMTA4LCAgICA3NywgICAxOTEsICAgLTc5LCAgIC03OSwg
ICAtNzksICAgLTc5LCAgIC03OSwgICAtNzksCisgICAgIC03OSwgICAtNzksICAgIDY2LCAgICA2
OSwgICAtNzksICAgLTc5LCAgIDExMCwgICAgNzYsICAgMTg0LCAgIDE3MiwKKyAgICAgMTczLCAg
IDEwNSwgICAgOTgsICAgIDk5LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDExOCwgICAxMzcsICAg
MTQyLAorICAgICAxNjgsICAgMTUxLCAgICA3OCwgICAxOTgsICAgMTgxLCAgIDEwMywgICAxNTIs
ICAgLTc5LCAgIDEzOSwgICAgODcsCisgICAgIDE0OCwgICAgOTYsICAgIDk3LCAgIC0zNiwgICAx
MDgsICAgIDg4LCAgIDE3OSwgICAtMzYsICAgLTM2LCAgIC0zNiwKKyAgICAgLTM2LCAgIC0zNiwg
ICAtMzYsICAgLTM2LCAgIC0zNiwgICAxMDksICAgMTY3LCAgIC0zNiwgICAtMzYsICAgMTEwLAor
ICAgICAtMzYsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgLTM2
LCAgIDExNywgICAgOTUsCisgICAgIDExOCwgICAxOTksICAgIDg5LCAgICA5NiwgICAgOTcsICAg
IDk2LCAgICA5NywgICAgLTUsICAgIDEzLCAgIDExOSwKKyAgICAgLTM2LCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDkwLAorICAgICAg
OTEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAy
OSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDkyLCAgIDE0MSwgICAgMzMsICAgMTUwLCAg
IDEwNCwgICAxMDcsICAgMTY0LCAgIDE2NSwKKyAgICAgMTY2LCAgICAtNCwgICAgMTMsICAgIDM0
LCAgICAzNSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAg
IDIwLCAgICAyMSwgICAxNzYsICAgMjEwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgIDE3Nywg
ICAxNzgsICAgIDMzLCAgIDE4MiwKKyAgICAgIDk3LCAgIDE4NiwgICAxOTQsICAgMTk2LCAgIDIw
MCwgICAtODgsICAgMTA4LCAgICAzNCwgICAgMzUsICAgLTg4LAorICAgICAtODgsICAgLTg4LCAg
IC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgMjAxLCAgIDIwNSwgICAtODgsCisg
ICAgIC04OCwgICAxMTAsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgs
ICAgLTg4LCAgIC04OCwKKyAgICAgMjAyLCAgIDIwMywgICAxMTgsICAgMjA3LCAgIDIwOCwgICAy
MDksICAgIDU2LCAgICAxMiwgICAxMzMsICAgMTA4LAorICAgICAgODAsICAgMTUyLCAgIC04OCwg
ICAtNTYsICAgLTU2LCAgIDE4MCwgICAtNTYsICAgLTU2LCAgIC01NiwgICAtNTYsCisgICAgIDEw
OSwgICAgIDAsICAgLTU2LCAgIC01NiwgICAxMTAsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5
LCAgIDE0NSwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTgsICAg
IDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgMTMwLCAgIC01NiwgICAgMjIsICAgIDIzLCAgICAxNSwgICAgMTYsCisgICAgICAgMCwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgICAwLCAgICAgMCwgICAgMjIsICAgIDIzLCAgIDE4
NSwKKyAgICAgICAwLCAgIDE4NywgICAxODgsICAgMTg5LCAgIDE5MCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgMzQsICAgIDM1LAorICAgICAxOTUsICAgICAwLCAgIDE5NywgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzQsCisgICAgICAzNSwgICAgIDAsICAg
MjA0Cit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9Cit7CisgICAg
ICAgMSwgICAgNzAsICAgIDcxLCAgICAxNCwgICAgIDAsICAgIDIwLCAgICAyMSwgICAgOTgsICAg
IDk5LCAgIDEwMCwKKyAgICAgMTAxLCAgIDEwMiwgICAxMDMsICAgIDE0LCAgICA4MSwgICAgMTYs
ICAgIDgxLCAgICAzNiwgICAgMTksICAgIDg2LAorICAgICAgMzYsICAgIDg2LCAgICAyNCwgICAg
MzYsICAgICAzLCAgIDExNiwgICAgIDMsICAgIDk2LCAgICA5NywgICAgNDAsCisgICAgICA0MSwg
ICAgIDAsICAgICAxLCAgICAyNywgICAgMzYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgIDExMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDM2LCAgICAyNywgICAgMzYsCisgICAgICAzNiwgICAgMjcs
ICAgIDI4LCAgICAyNywgICAgMzQsICAgIDI3LCAgICAyOCwgICAgMzYsICAgIDM3LCAgICAzNSwK
KyAgICAgIDQwLCAgICA0MSwgICAgMzYsICAgIDgyLCAgICA4MywgICAgMjcsICAgIDg1LCAgICA0
MywgICAxNDUsICAgIDM2LAorICAgICAxNDUsICAgICAxLCAgICAzOCwgICAxNzQsICAgICA0LCAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgMTEsICAgIDI3
LCAgICAyOCwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgIDEsICAgMTY3LCAgIDExNCwKKyAgICAg
MTE1LCAgICAzOSwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAyNywgICAg
ODIsICAgIDgzLAorICAgICAxMTEsICAgIDg1LCAgICAgMSwgICAxODIsICAgMTI5LCAgICA0Miwg
ICAgMzYsICAgIDM3LCAgICA4MywgICAgMzYsCisgICAgICA4NSwgICAgNDAsICAgIDQxLCAgICAg
MCwgICAgIDEsICAgIDM2LCAgIDEyNywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDI2LCAgICAxNCwgICAgMTUsICAg
IDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNSwgICAgMzYsCisgICAgICAyNywgICAgMzYsICAgIDM2LCAgICA0MCwgICAg
NDEsICAgIDQwLCAgICA0MSwgICAgIDAsICAgICAxLCAgICAzNiwKKyAgICAgIDM3LCAgICAgNCwg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDM2LAor
ICAgICAgMzYsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDM2LCAgICA4MywgICAgMjcsICAg
IDg1LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwKKyAgICAgIDM2LCAgICAgMCwgICAgIDEs
ICAgIDM2LCAgICAzNywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAg
IDksICAgIDEwLCAgICAxMSwgICAgIDEsICAgMjA1LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAx
NywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAxMywgICAgMzYsICAgIDI3LCAgICAxNCwKKyAgICAgIDQxLCAgICAzNiwgICAgMzYsICAgIDM2
LCAgICAzNiwgICAgIDAsICAgICAxLCAgICAzNiwgICAgMzcsICAgICA0LAorICAgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDM2LCAgICA0MiwgICAg
MTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDM2LCAgICAzNiwgICAgMjcsICAgIDM2LCAgICAz
NiwgICAgMzYsICAgICA3LCAgICAgNSwgICAgODEsICAgICAxLAorICAgICAgNDAsICAgIDM2LCAg
ICAzNywgICAgIDUsICAgICA2LCAgIDEyOCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCisg
ICAgICAxMiwgICAgLTEsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICA4NCwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
MjcsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LAorICAgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgIDM2LCAgICAzNywgICAgMTQsICAgIDE1LCAgICAgNSwgICAgIDYsCisgICAgICAt
MSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgMTQsICAgIDE1
LCAgIDE2OCwKKyAgICAgIC0xLCAgIDE3MCwgICAxNzEsICAgMTcyLCAgIDE3MywgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzYsICAgIDM3LAorICAgICAxNzksICAgIC0xLCAgIDE4MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAgICAzNywgICAg
LTEsICAgMTkxCit9OworCisgIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwg
bnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0u
ICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cit7CisgICAgICAgMCwg
ICAgIDMsICAgIDM2LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgODksICAgIDI3LCAg
ICAyOCwKKyAgICAgIDg3LCAgICAgMCwgICAgNDgsICAgICAxLCAgICAgNCwgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAxNCwgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAgMjMs
ICAgIDI0LCAgICAyNywgICAgMzYsICAgIDM3LCAgICA0OSwgICAgNTAsICAgIDUyLCAgICA1MywK
KyAgICAgIDU0LCAgICA1NSwgICAgNjEsICAgIDYyLCAgICA2NCwgICAgNjgsICAgIDcwLCAgICA3
MiwgICAgNzMsICAgIDc1LAorICAgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODgsICAgIDk1LCAg
ICAzNiwgICAgNDYsICAgIDM2LCAgICAzNiwgICAgODcsCisgICAgICAzNiwgICAgODcsICAgIDI3
LCAgICA5NCwgICAgMzYsICAgIDg3LCAgICAyNywgICAgOTIsICAgIDkyLCAgICAyOCwKKyAgICAg
IDM1LCAgICA0MywgICAgOTEsICAgIDkyLCAgICA5MywgICAgMzYsICAgICAxLCAgICAzOCwgICAg
IDEsICAgIDU2LAorICAgICAgNTYsICAgIDY1LCAgICA2NywgICAgNzEsICAgIDg0LCAgICA3Niwg
ICAgODIsICAgIDM2LCAgICAzNiwgICAgMzYsCisgICAgICAzNiwgICAgMzYsICAgIDM2LCAgICA5
MSwgICAgOTEsICAgIDM2LCAgICA0MCwgICAgNDEsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAg
ICAzMiwgICAgMzMsICAgIDQyLCAgICAzNiwgICAgMzksICAgIDk2LCAgICAzNiwgICAgIDEsICAg
IDEyLAorICAgICAgMTYsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMs
ICAgIDI1LCAgICAyNywgICAgMzYsCisgICAgICA1MSwgICAgNTcsICAgIDU4LCAgICA4MCwgICAg
ODEsICAgIDgzLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDM2LCAgICA1MSwg
ICAgNjYsICAgIDgxLCAgICA4MywgICAgNTAsICAgIDYzLCAgICA4OCwgICAgNTAsICAgIDY0LAor
ICAgICAgNjksICAgIDc1LCAgICA4OCwgICAgMjQsICAgIDM2LCAgICA4MiwgICAgODUsICAgIDUw
LCAgICA2NCwgICAgNzQsCisgICAgICA3NSwgICAgODgsICAgIDM2LCAgICA1MSwgICAgODMsICAg
IDM0LCAgICA5MSwgICAgOTEsICAgIDkzLCAgICA5MywKKyAgICAgIDkzLCAgICA5MywgICAgOTMs
ICAgIDkzLCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAyNiwgICAgODcsICAgIDg2LAorICAgICAg
ODcsICAgIDkxLCAgICA5MiwgICAgOTIsICAgIDkzLCAgICA1OSwgICAgIDEsICAgIDEzLCAgICAz
NiwgICAgODcsCisgICAgICA4NiwgICAgOTIsICAgIDE0LCAgICA5MCwgICAgOTEsICAgIDkwLCAg
ICAzNiwgICAgOTAsICAgIDkwLCAgICA5MCwKKyAgICAgIDkwLCAgICA5MywgICAgMjcsICAgIDM2
LCAgICAzNiwgICAgOTAsICAgIDM2LCAgICA5MCwgICAgOTEsICAgIDM2LAorICAgICAgMzYsICAg
IDM2LCAgICAzNiwgICAgMzYsICAgIDkwLCAgICA0MiwgICAgNjAsICAgIDM2LCAgICAzNiwgICAg
MzYsCisgICAgICA4NworfTsKKworICAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBz
eW1ib2wgdGhhdCBydWxlIFlZTiBkZXJpdmVzLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlyMVtdID0KK3sKKyAgICAgICAwLCAgICA0NCwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAg
NDYsICAgIDQ3LCAgICA0OCwgICAgNDgsICAgIDQ4LAorICAgICAgNDgsICAgIDQ4LCAgICA0OCwg
ICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDksICAgIDQ5LCAgICA0OSwgICAgNDksCisgICAgICA0
OSwgICAgNDksICAgIDQ5LCAgICA0OSwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUw
LCAgICA1MCwKKyAgICAgIDUwLCAgICA1MSwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAg
IDU1LCAgICA1NiwgICAgNTYsICAgIDU2LAorICAgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTYs
ICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcsCisgICAgICA1OCwgICAg
NTksICAgIDU5LCAgICA2MCwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2
NSwKKyAgICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjYsICAgIDY2LCAg
ICA2NiwgICAgNjYsICAgIDY3LAorICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcx
LCAgICA3MSwgICAgNzEsICAgIDcxLCAgICA3MiwgICAgNzMsCisgICAgICA3NCwgICAgNzUsICAg
IDc2LCAgICA3NiwgICAgNzYsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKKyAg
ICAgIDgxLCAgICA4MiwgICAgODIsICAgIDgyLCAgICA4MiwgICAgODMsICAgIDg0LCAgICA4NCwg
ICAgODQsICAgIDg1LAorICAgICAgODYsICAgIDg2LCAgICA4NywgICAgODcsICAgIDg4LCAgICA4
OCwgICAgODgsICAgIDg5LCAgICA4OSwgICAgOTAsCisgICAgICA5MCwgICAgOTEsICAgIDkxLCAg
ICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwKKyAgICAgIDkx
LCAgICA5MSwgICAgOTIsICAgIDkzLCAgICA5MywgICAgOTQsICAgIDk0LCAgICA5NSwgICAgOTYs
ICAgIDk2Cit9OworCisgIC8qIFlZUjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUg
cmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWlu
dDggeXlyMltdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDEsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgNCwg
ICAgIDQsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwKKyAgICAgICAxLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDMsICAg
ICAyLCAgICAgMCwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgNCwgICAgIDUsCisgICAgICAgMywgICAg
IDAsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAg
MCwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAzLCAg
ICAgMiwgICAgIDQsICAgICAwLAorICAgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAw
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsCisgICAgICAgMSwgICAgIDMsICAg
ICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAwLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDAsCisgICAgICAgMiwgICAgIDEsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKKyAgICAgICAz
LCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDAsICAgICAxLCAgICAgNCwgICAgIDAs
ICAgICAxCit9OworCisKKyNkZWZpbmUgeXllcnJvayAgICAgICAgICh5eWVycnN0YXR1cyA9IDAp
CisjZGVmaW5lIHl5Y2xlYXJpbiAgICAgICAoeXljaGFyID0gWVlFTVBUWSkKKyNkZWZpbmUgWVlF
TVBUWSAgICAgICAgICgtMikKKyNkZWZpbmUgWVlFT0YgICAgICAgICAgIDAKKworI2RlZmluZSBZ
WUFDQ0VQVCAgICAgICAgZ290byB5eWFjY2VwdGxhYgorI2RlZmluZSBZWUFCT1JUICAgICAgICAg
Z290byB5eWFib3J0bGFiCisjZGVmaW5lIFlZRVJST1IgICAgICAgICBnb3RvIHl5ZXJyb3JsYWIK
KworCisjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZ
WUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
K2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eWx2YWwgPSAo
VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
WVlQT1BTVEFDSyAoeXlsZW4pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICBnb3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZWxzZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCisgICAg
ICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK3doaWxlICgwKQorCisvKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KKyNk
ZWZpbmUgWVlURVJST1IgICAgICAgIDEKKyNkZWZpbmUgWVlFUlJDT0RFICAgICAgIDI1NgorCisK
KworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQuICAqLworI2lmIFlZREVCVUcKKwor
IyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKKyMgZW5kaWYK
KworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoeXlk
ZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFlZRlBSSU5URiBB
cmdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworLyogVGhp
cyBtYWNybyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KKyNpZm5k
ZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExv
YykgKCh2b2lkKSAwKQorI2VuZGlmCisKKworIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxl
LCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiVzICIsIFRpdGxlKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgVHlwZSwg
VmFsdWUpOyBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGls
ZSAoMCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IFByaW50IHRoaXMgc3ltYm9sJ3MgdmFsdWUgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
dmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXApCit7CisgIEZJTEUgKnl5byA9IHl5b3V0cHV0OworICBZWVVTRSAoeXlv
KTsKKyAgaWYgKCF5eXZhbHVlcCkKKyAgICByZXR1cm47CisjIGlmZGVmIFlZUFJJTlQKKyAgaWYg
KHl5dHlwZSA8IFlZTlRPS0VOUykKKyAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0
eXBlXSwgKnl5dmFsdWVwKTsKKyMgZW5kaWYKKyAgWVlVU0UgKHl5dHlwZSk7Cit9CisKKworLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24g
WVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0
aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlT
VFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwKQoreworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAi
JXMgJXMgKCIsCisgICAgICAgICAgICAgeXl0eXBlIDwgWVlOVE9LRU5TID8gInRva2VuIiA6ICJu
dGVybSIsIHl5dG5hbWVbeXl0eXBlXSk7CisKKyAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91
dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCk7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Cit9
CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgorfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3Rh
Y2sgZnJvbSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8Cit8IFRPUCAoaW5jbHVkZWQpLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK2AtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20s
IHl5dHlwZV9pbnQxNiAqeXl0b3ApCit7CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93
Iik7CisgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykKKyAgICB7CisgICAg
ICBpbnQgeXlib3QgPSAqeXlib3R0b207CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIs
IHl5Ym90KTsKKyAgICB9CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZp
bmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRv
cCkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKworLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFJlcG9ydCB0
aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAoreXlf
cmVkdWNlX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5c3NwLCBZWVNUWVBFICp5eXZzcCwgaW50IHl5
cnVsZSkKK3sKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07Cisg
IGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5eWk7CisgIFlZRlBSSU5URiAoc3Rk
ZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKKyAgICAgICAg
ICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQu
ICAqLworICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAgICAg
WVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsKKyAgICAgIHl5X3N5bWJv
bF9wcmludCAoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICB5eXN0b3NbeXlzc3BbeXlp
ICsgMSAtIHl5bnJoc11dLAorICAgICAgICAgICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAx
KSAtICh5eW5yaHMpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICApOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworICAgIH0KK30KKworIyBk
ZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIHl5X3JlZHVjZV9wcmludCAoeXlzc3AsIHl5dnNwLCBSdWxlKTsgXAor
fSB3aGlsZSAoMCkKKworLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlz
IGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4
aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2UgLyogIVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZ
RFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1
ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKKyMgZGVm
aW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2VuZGlmIC8qICFZWURFQlVHICovCisKKworLyog
WVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwor
I2lmbmRlZiBZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKwor
LyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZm
ZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlz
IHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3Vs
dHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19C
WVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBp
bnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZuZGVmIFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZ
TUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBpZm5k
ZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19I
CisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorIyAgZWxzZQorLyogUmV0dXJuIHRoZSBsZW5n
dGggb2YgWVlTVFIuICAqLworc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hhciAq
eXlzdHIpCit7CisgIFlZU0laRV9UIHl5bGVuOworICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXls
ZW5dOyB5eWxlbisrKQorICAgIGNvbnRpbnVlOworICByZXR1cm4geXlsZW47Cit9CisjICBlbmRp
ZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXN0cGNweQorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18g
JiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQorIyAgIGRlZmluZSB5
eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5p
bmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKyAgIFlZREVTVC4gICov
CitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNy
YykKK3sKKyAgY2hhciAqeXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsK
KworICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKwor
ICByZXR1cm4geXlkIC0gMTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5h
bWVycgorLyogQ29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBw
aW5nIGF3YXkgdW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQg
aXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91
YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5z
IGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFj
a3NsYXNoLWJhY2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJF
UyBpcworICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9m
IHdoYXQgdGhlIHJlc3VsdAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVf
VAoreXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgq
eXlzdHIgPT0gJyInKQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFy
IGNvbnN0ICp5eXAgPSB5eXN0cjsKKworICAgICAgZm9yICg7OykKKyAgICAgICAgc3dpdGNoICgq
Kyt5eXApCisgICAgICAgICAgeworICAgICAgICAgIGNhc2UgJ1wnJzoKKyAgICAgICAgICBjYXNl
ICcsJzoKKyAgICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsKKworICAgICAgICAg
IGNhc2UgJ1xcJzoKKyAgICAgICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKyAgICAgICAgICAg
ICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdo
LiAgKi8KKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKHl5cmVzKQorICAgICAg
ICAgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKyAgICAgICAgICAgIHl5bisrOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgIGlmICh5eXJlcykK
KyAgICAgICAgICAgICAgeXlyZXNbeXluXSA9ICdcMCc7CisgICAgICAgICAgICByZXR1cm4geXlu
OworICAgICAgICAgIH0KKyAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7CisgICAgfQorCisgIGlm
ICghIHl5cmVzKQorICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOworCisgIHJldHVybiB5eXN0
cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOworfQorIyBlbmRpZgorCisvKiBDb3B5IGludG8g
KllZTVNHLCB3aGljaCBpcyBvZiBzaXplICpZWU1TR19BTExPQywgYW4gZXJyb3IgbWVzc2FnZQor
ICAgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4gWVlUT0tFTiBmb3IgdGhlIHN0YXRlIHN0YWNr
IHdob3NlIHRvcCBpcworICAgWVlTU1AuCisKKyAgIFJldHVybiAwIGlmICpZWU1TRyB3YXMgc3Vj
Y2Vzc2Z1bGx5IHdyaXR0ZW4uICBSZXR1cm4gMSBpZiAqWVlNU0cgaXMKKyAgIG5vdCBsYXJnZSBl
bm91Z2ggdG8gaG9sZCB0aGUgbWVzc2FnZS4gIEluIHRoYXQgY2FzZSwgYWxzbyBzZXQKKyAgICpZ
WU1TR19BTExPQyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJuIDIgaWYg
dGhlCisgICByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMgaXMgdG9vIGxhcmdlIHRvIHN0b3JlLiAg
Ki8KK3N0YXRpYyBpbnQKK3l5c3ludGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNo
YXIgKip5eW1zZywKKyAgICAgICAgICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3NwLCBpbnQgeXl0
b2tlbikKK3sKKyAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoWVlfTlVMTFBUUiwgeXl0
bmFtZVt5eXRva2VuXSk7CisgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7CisgIGVudW0geyBZ
WUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9OworICAvKiBJbnRlcm5hdGlvbmFsaXpl
ZCBmb3JtYXQgc3RyaW5nLiAqLworICBjb25zdCBjaGFyICp5eWZvcm1hdCA9IFlZX05VTExQVFI7
CisgIC8qIEFyZ3VtZW50cyBvZiB5eWZvcm1hdC4gKi8KKyAgY2hhciBjb25zdCAqeXlhcmdbWVlF
UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07CisgIC8qIE51bWJlciBvZiByZXBvcnRlZCB0b2tl
bnMgKG9uZSBmb3IgdGhlICJ1bmV4cGVjdGVkIiwgb25lIHBlcgorICAgICAiZXhwZWN0ZWQiKS4g
Ki8KKyAgaW50IHl5Y291bnQgPSAwOworCisgIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRp
ZXMgaGVyZSB0byBjb25zaWRlcjoKKyAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVu
dCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4KKyAgICAgICB0aGUgb25seSB3YXkg
dGhpcyBmdW5jdGlvbiB3YXMgaW52b2tlZCBpcyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KKyAgICAg
ICBpcyBhbiBlcnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBl
Y3RlZAorICAgICAgIHRva2VucyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLgorICAgICAtIFRoZSBv
bmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9va2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMg
aWYKKyAgICAgICB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVs
dCBhY3Rpb24uICBUaHVzLAorICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2th
aGVhZCBpcyBzdWZmaWNpZW50IHRvIGRldGVybWluZQorICAgICAgIHRoYXQgdGhlcmUgaXMgbm8g
dW5leHBlY3RlZCBvciBleHBlY3RlZCB0b2tlbiB0byByZXBvcnQuICBJbiB0aGF0CisgICAgICAg
Y2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUgInN5bnRheCBlcnJvciIuCisgICAgIC0gRG9uJ3Qg
YXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlz
IGEKKyAgICAgICBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJl
IG1pZ2h0IGhhdmUgYmVlbiBhCisgICAgICAgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBj
b25zaXN0ZW50IHN0YXRlIHdpdGggYSBub24tZGVmYXVsdAorICAgICAgIGFjdGlvbiwgb3IgdXNl
ciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZCB5eWNoYXIuCisgICAgIC0gT2YgY291
cnNlLCB0aGUgZXhwZWN0ZWQgdG9rZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCisg
ICAgICAgY29ycmVjdCBsb29rYWhlYWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRo
ZSBwYXJzZXIgbm90CisgICAgICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZl
dGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhlCisgICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRl
dGVjdGluZyBhIHN5bnRheCBlcnJvci4gIFRodXMsIHN0YXRlIG1lcmdpbmcKKyAgICAgICAoZnJv
bSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0
ZWQKKyAgICAgICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3Ig
Y2Fub25pY2FsIExSIHdpdGgKKyAgICAgICBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNv
bnRhaW4gYW55IHRva2VuIHRoYXQgd2lsbCBub3QgYmUKKyAgICAgICBhY2NlcHRlZCBkdWUgdG8g
YW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuCisgICovCisgIGlmICh5eXRva2VuICE9
IFlZRU1QVFkpCisgICAgeworICAgICAgaW50IHl5biA9IHl5cGFjdFsqeXlzc3BdOworICAgICAg
eXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07CisgICAgICBpZiAoIXl5cGFjdF92
YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgICAgICB7CisgICAgICAgICAgLyogU3RhcnQgWVlY
IGF0IC1ZWU4gaWYgbmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgorICAgICAg
ICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rp
b25zIGZvcgorICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0
IGFjdGlvbnMuICAqLworICAgICAgICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDog
MDsKKyAgICAgICAgICAvKiBTdGF5IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5
eXRuYW1lLiAgKi8KKyAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7
CisgICAgICAgICAgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNr
bGltIDogWVlOVE9LRU5TOworICAgICAgICAgIGludCB5eXg7CisKKyAgICAgICAgICBmb3IgKHl5
eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorICAgICAgICAgICAgaWYgKHl5Y2hl
Y2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SCisgICAgICAgICAgICAgICAg
JiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCisgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0Vf
QVJHU19NQVhJTVVNKQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB5
eWNvdW50ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgeXlzaXplID0geXlzaXplMDsKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKKyAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZ
WV9OVUxMUFRSLCB5eXRuYW1lW3l5eF0pOworICAgICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6
ZSA8PSB5eXNpemUxCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNU
QUNLX0FMTE9DX01BWElNVU0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAg
ICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgc3dpdGNoICh5eWNvdW50KQorICAgIHsK
KyMgZGVmaW5lIFlZQ0FTRV8oTiwgUykgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgY2Fz
ZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHl5Zm9ybWF0ID0g
UzsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGJyZWFrCisgICAgICBZWUNBU0VfKDAs
IFlZXygic3ludGF4IGVycm9yIikpOworICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJv
ciwgdW5leHBlY3RlZCAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3Is
IHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oMywgWVlfKCJz
eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKKyAgICAg
IFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAl
cyBvciAlcyBvciAlcyIpKTsKKyAgICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpKTsKKyMgdW5kZWYg
WVlDQVNFXworICAgIH0KKworICB7CisgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5
c3RybGVuICh5eWZvcm1hdCk7CisgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6
ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAgIHJldHVybiAyOworICAgIHl5c2l6
ZSA9IHl5c2l6ZTE7CisgIH0KKworICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQorICAgIHsK
KyAgICAgICp5eW1zZ19hbGxvYyA9IDIgKiB5eXNpemU7CisgICAgICBpZiAoISAoeXlzaXplIDw9
ICp5eW1zZ19hbGxvYworICAgICAgICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FM
TE9DX01BWElNVU0pKQorICAgICAgICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElN
VU07CisgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhh
dCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgorICAgICBEb24ndCBoYXZlIHVu
ZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgorICAgICBwcm9kdWNlZCBh
IHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworICB7CisgICAgY2hh
ciAqeXlwID0gKnl5bXNnOworICAgIGludCB5eWkgPSAwOworICAgIHdoaWxlICgoKnl5cCA9ICp5
eWZvcm1hdCkgIT0gJ1wwJykKKyAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9
PSAncycgJiYgeXlpIDwgeXljb3VudCkKKyAgICAgICAgeworICAgICAgICAgIHl5cCArPSB5eXRu
YW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsKKyAgICAgICAgICB5eWZvcm1hdCArPSAyOworICAg
ICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICB5eXArKzsKKyAgICAgICAg
ICB5eWZvcm1hdCsrOworICAgICAgICB9CisgIH0KKyAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyog
WVlFUlJPUl9WRVJCT1NFICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0uCit8IFJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMg
c3ltYm9sLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQg
eXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgaWYg
KCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJPTF9QUklOVCAoeXlt
c2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBZWV9JR05PUkVfTUFZQkVf
VU5JTklUSUFMSVpFRF9CRUdJTgorICBzd2l0Y2ggKHl5dHlwZSkKKyAgICB7CisgICAgICAgICAg
Y2FzZSA2MjogLyogY2hvaWNlX2VudHJ5ICAqLworCisgICAgICB7CisJZnByaW50ZihzdGRlcnIs
ICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAorCQkoKCp5
eXZhbHVlcCkubWVudSktPmZpbGUtPm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+bGluZW5vKTsK
KwlpZiAoY3VycmVudF9tZW51ID09ICgoKnl5dmFsdWVwKS5tZW51KSkKKwkJbWVudV9lbmRfbWVu
dSgpOworfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSA2ODogLyogaWZfZW50cnkgICov
CisKKyAgICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1l
bnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSgoKnl5dmFsdWVwKS5tZW51KS0+ZmlsZS0+bmFtZSwg
KCgqeXl2YWx1ZXApLm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUgPT0gKCgqeXl2
YWx1ZXApLm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9CisKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIDczOiAvKiBtZW51X2VudHJ5ICAqLworCisgICAgICB7CisJZnByaW50ZihzdGRl
cnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAorCQko
KCp5eXZhbHVlcCkubWVudSktPmZpbGUtPm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+bGluZW5v
KTsKKwlpZiAoY3VycmVudF9tZW51ID09ICgoKnl5dmFsdWVwKS5tZW51KSkKKwkJbWVudV9lbmRf
bWVudSgpOworfQorCisgICAgICAgIGJyZWFrOworCisKKyAgICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECit9CisK
KworCisKKy8qIFRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRo
ZSBzZW1hbnRpYyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCitZWVNUWVBFIHl5
bHZhbDsKKy8qIE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCitpbnQgeXluZXJy
czsKKworCisvKi0tLS0tLS0tLS0uCit8IHl5cGFyc2UuICB8CitgLS0tLS0tLS0tLSovCisKK2lu
dAoreXlwYXJzZSAodm9pZCkKK3sKKyAgICBpbnQgeXlzdGF0ZTsKKyAgICAvKiBOdW1iZXIgb2Yg
dG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgICBp
bnQgeXllcnJzdGF0dXM7CisKKyAgICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAg
ICAgICAneXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLgorICAgICAgICd5eXZzJzogcmVsYXRlZCB0
byBzZW1hbnRpYyB2YWx1ZXMuCisKKyAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocm91Z2gg
c2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAgICB0byByZWFsbG9j
YXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8KKworICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisg
ICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgICB5eXR5cGVfaW50MTYgKnl5
c3M7CisgICAgeXl0eXBlX2ludDE2ICp5eXNzcDsKKworICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1
ZSBzdGFjay4gICovCisgICAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgICAgWVlTVFlQ
RSAqeXl2czsKKyAgICBZWVNUWVBFICp5eXZzcDsKKworICAgIFlZU0laRV9UIHl5c3RhY2tzaXpl
OworCisgIGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTG9va2FoZWFkIHRva2VuIGFz
IGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tl
biA9IDA7CisgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUg
YW5kIGxvY2F0aW9uIGZyb20gdGhlCisgICAgIGFjdGlvbiByb3V0aW5lcy4gICovCisgIFlZU1RZ
UEUgeXl2YWw7CisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKyAgLyogQnVmZmVyIGZvciBlcnJvciBt
ZXNzYWdlcywgYW5kIGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovCisgIGNoYXIgeXltc2didWZbMTI4
XTsKKyAgY2hhciAqeXltc2cgPSB5eW1zZ2J1ZjsKKyAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBz
aXplb2YgeXltc2didWY7CisjZW5kaWYKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNw
IC09IChOKSwgeXlzc3AgLT0gKE4pKQorCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0
aGUgUkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5
bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICB5eXNzcCA9
IHl5c3MgPSB5eXNzYTsKKyAgeXl2c3AgPSB5eXZzID0geXl2c2E7CisgIHl5c3RhY2tzaXplID0g
WVlJTklUREVQVEg7CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIp
KTsKKworICB5eXN0YXRlID0gMDsKKyAgeXllcnJzdGF0dXMgPSAwOworICB5eW5lcnJzID0gMDsK
KyAgeXljaGFyID0gWVlFTVBUWTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKyAg
Z290byB5eXNldHN0YXRlOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0
YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToK
KyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2Nh
dGlvbiBzdGFja3MKKyAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0
YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRl
OgorICAqeXlzc3AgPSB5eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9
IHl5c3NwKQorICAgIHsKKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhl
IHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0g
eXlzc3AgLSB5eXNzICsgMTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKyAgICAgICAg
LyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGll
cyBvZgorICAgICAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJl
YWwgb25lcyBpbnRvCisgICAgICAgICAgIG1lbW9yeS4gICovCisgICAgICAgIFlZU1RZUEUgKnl5
dnMxID0geXl2czsKKyAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisKKyAgICAg
ICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUg
b2YgdGhlCisgICAgICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAg
VGhpcyB1c2VkIHRvIGJlIGEKKyAgICAgICAgICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhl
IHR3byBleHRyYSBhcmdzLCBidXQgdGhhdCBtaWdodAorICAgICAgICAgICBiZSB1bmRlZmluZWQg
aWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8KKyAgICAgICAgeXlvdmVyZmxvdyAoWVlfKCJt
ZW1vcnkgZXhoYXVzdGVkIiksCisgICAgICAgICAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICog
c2l6ZW9mICgqeXlzc3ApLAorICAgICAgICAgICAgICAgICAgICAmeXl2czEsIHl5c2l6ZSAqIHNp
emVvZiAoKnl5dnNwKSwKKyAgICAgICAgICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKKworICAg
ICAgICB5eXNzID0geXlzczE7CisgICAgICAgIHl5dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNlbHNl
IC8qIG5vIHl5b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdv
dG8geXlleGhhdXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3Vy
IG93biB3YXkuICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCisgICAg
ICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisgICAgICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAg
aWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkKKyAgICAgICAgeXlzdGFja3NpemUgPSBZWU1B
WERFUFRIOworCisgICAgICB7CisgICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwor
ICAgICAgICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisgICAgICAgICAgKHVuaW9uIHl5YWxsb2Mg
KikgWVlTVEFDS19BTExPQyAoWVlTVEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKKyAgICAgICAg
aWYgKCEgeXlwdHIpCisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgICAgWVlT
VEFDS19SRUxPQ0FURSAoeXlzc19hbGxvYywgeXlzcyk7CisgICAgICAgIFlZU1RBQ0tfUkVMT0NB
VEUgKHl5dnNfYWxsb2MsIHl5dnMpOworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAg
ICBpZiAoeXlzczEgIT0geXlzc2EpCisgICAgICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Cisg
ICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAgICB5eXNz
cCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsK
KworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1
XG4iLAorICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkp
OworCisgICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICAgICAg
WVlBQk9SVDsKKyAgICB9CisKKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUg
JWRcbiIsIHl5c3RhdGUpKTsKKworICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQorICAgIFlZQUND
RVBUOworCisgIGdvdG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAg
fAorYC0tLS0tLS0tLS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nl
c3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAgbG9va2FoZWFkIHRv
a2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KKworICAv
KiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9v
a2FoZWFkIHRva2VuLiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXlwYWN0
X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90
IGtub3duID0+IGdldCBhIGxvb2thaGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25l
LiAgKi8KKworICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxp
ZCBsb29rYWhlYWQgc3ltYm9sLiAgKi8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsK
KyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAg
eXljaGFyID0geXlsZXggKCk7CisgICAgfQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAg
eworICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3Rk
ZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7Cisg
ICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJ
TlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQor
CisgIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRv
IHJlZHVjZSBvciB0bworICAgICBkZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAq
LworICB5eW4gKz0geXl0b2tlbjsKKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5
Y2hlY2tbeXluXSAhPSB5eXRva2VuKQorICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRh
YmxlW3l5bl07CisgIGlmICh5eW4gPD0gMCkKKyAgICB7CisgICAgICBpZiAoeXl0YWJsZV92YWx1
ZV9pc19lcnJvciAoeXluKSkKKyAgICAgICAgZ290byB5eWVycmxhYjsKKyAgICAgIHl5biA9IC15
eW47CisgICAgICBnb3RvIHl5cmVkdWNlOworICAgIH0KKworICAvKiBDb3VudCB0b2tlbnMgc2hp
ZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCisgICAgIHN0YXR1
cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0tOworCisgIC8qIFNo
aWZ0IHRoZSBsb29rYWhlYWQgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGlu
ZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworCisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0
ZWQgdG9rZW4uICAqLworICB5eWNoYXIgPSBZWUVNUFRZOworCisgIHl5c3RhdGUgPSB5eW47Cisg
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisgICorK3l5dnNwID0geXlsdmFs
OworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKworICBnb3RvIHl5bmV3c3Rh
dGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3Ig
dGhlIGN1cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFj
dFt5eXN0YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8g
eXlyZWR1Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1
Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LworeXlyZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ug
d2l0aC4gICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnpl
cm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICAnJCQg
PSAkMScuCisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0
byBnYXJiYWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24K
KyAgICAgdXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwK
KyAgICAgdW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5k
IGl0IGF2b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5p
bml0aWFsaXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9SRURV
Q0VfUFJJTlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSA2Ogor
CisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVM
TCk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisgICAgeyB6Y29uZl9lcnJvcigi
dW5leHBlY3RlZCBlbmQgc3RhdGVtZW50Iik7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTI6
CisKKyAgICB7IHpjb25mX2Vycm9yKCJ1bmtub3duIHN0YXRlbWVudCBcIiVzXCIiLCAoeXl2c3Bb
LTJdLnN0cmluZykpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAgeworCXpj
b25mX2Vycm9yKCJ1bmV4cGVjdGVkIG9wdGlvbiBcIiVzXCIiLCAoeXl2c3BbLTJdLmlkKS0+bmFt
ZSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDE0OgorCisgICAgeyB6Y29uZl9lcnJvcigi
aW52YWxpZCBzdGF0ZW1lbnQiKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAzMToKKworICAg
IHsgemNvbmZfZXJyb3IoInVua25vd24gb3B0aW9uIFwiJXNcIiIsICh5eXZzcFstMl0uc3RyaW5n
KSk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMzI6CisKKyAgICB7IHpjb25mX2Vycm9yKCJp
bnZhbGlkIG9wdGlvbiIpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDMzOgorCisgICAgewor
CSh5eXZzcFstMV0uc3ltYm9sKS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRk
X2VudHJ5KCh5eXZzcFstMV0uc3ltYm9sKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6
Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbLTFd
LnN5bWJvbCktPm5hbWUpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAzNDoKKworICAgIHsK
KwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUo
KSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAzNToKKworICAg
IHsKKwkoeXl2c3BbLTFdLnN5bWJvbCktPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwltZW51
X2FkZF9lbnRyeSgoeXl2c3BbLTFdLnN5bWJvbCkpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOm1lbnVjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5
eXZzcFstMV0uc3ltYm9sKS0+bmFtZSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDM2Ogor
CisgICAgeworCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCisJCWN1cnJlbnRfZW50cnktPnBy
b21wdC0+dHlwZSA9IFBfTUVOVTsKKwllbHNlCisJCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVj
b25maWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAi
JXM6JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30K
KworICAgIGJyZWFrOworCisgIGNhc2UgNDQ6CisKKyAgICB7CisJbWVudV9zZXRfdHlwZSgoeXl2
c3BbLTJdLmlkKS0+c3R5cGUpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnR5cGUoJXUp
XG4iLAorCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkoeXl2c3BbLTJdLmlk
KS0+c3R5cGUpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA0NToKKworICAgIHsKKwltZW51
X2FkZF9wcm9tcHQoUF9QUk9NUFQsICh5eXZzcFstMl0uc3RyaW5nKSwgKHl5dnNwWy0xXS5leHBy
KSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNDY6CisKKyAg
ICB7CisJbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFst
MV0uZXhwcikpOworCWlmICgoeXl2c3BbLTNdLmlkKS0+c3R5cGUgIT0gU19VTktOT1dOKQorCQlt
ZW51X3NldF90eXBlKCh5eXZzcFstM10uaWQpLT5zdHlwZSk7CisJcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6ZGVmYXVsdCgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCksCisJCSh5eXZzcFstM10uaWQpLT5zdHlwZSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNl
IDQ3OgorCisgICAgeworCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgKHl5dnNwWy0yXS5zeW1i
b2wpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzZWxl
Y3RcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSA0ODoKKworICAgIHsKKwltZW51X2FkZF9zeW1ib2woUF9JTVBMWSwgKHl5dnNw
Wy0yXS5zeW1ib2wpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIl
czolZDppbXBseVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAg
ICBicmVhazsKKworICBjYXNlIDQ5OgorCisgICAgeworCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwg
ZXhwcl9hbGxvY19jb21wKEVfUkFOR0UsKHl5dnNwWy0zXS5zeW1ib2wpLCAoeXl2c3BbLTJdLnN5
bWJvbCkpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpy
YW5nZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVh
azsKKworICBjYXNlIDUyOgorCisgICAgeworCWNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBr
Y29uZl9pZF9sb29rdXAoKHl5dnNwWy0xXS5zdHJpbmcpLCBzdHJsZW4oKHl5dnNwWy0xXS5zdHJp
bmcpKSk7CisJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX09QVElPTikgeworCQltZW51X2FkZF9v
cHRpb24oaWQtPnRva2VuLCAoeXl2c3BbMF0uc3RyaW5nKSk7CisJCWZyZWUoKHl5dnNwWzBdLnN0
cmluZykpOworCX0KKwllbHNlCisJCXpjb25mcHJpbnQoIndhcm5pbmc6IGlnbm9yaW5nIHVua25v
d24gb3B0aW9uICVzIiwgKHl5dnNwWy0xXS5zdHJpbmcpKTsKKwlmcmVlKCh5eXZzcFstMV0uc3Ry
aW5nKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDUzOgorCisgICAgeyAoeXl2YWwuc3Ry
aW5nKSA9IE5VTEw7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgNTQ6CisKKyAgICB7ICh5eXZh
bC5zdHJpbmcpID0gKHl5dnNwWzBdLnN0cmluZyk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2Ug
NTU6CisKKyAgICB7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgoeXl2c3BbLTFd
LnN0cmluZyksIFNZTUJPTF9DSE9JQ0UpOworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX05PX1dSSVRF
OworCW1lbnVfYWRkX2VudHJ5KHN5bSk7CisJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwg
TlVMTCk7CisJZnJlZSgoeXl2c3BbLTFdLnN0cmluZykpOworCXByaW50ZChERUJVR19QQVJTRSwg
IiVzOiVkOmNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisK
KyAgICBicmVhazsKKworICBjYXNlIDU2OgorCisgICAgeworCSh5eXZhbC5tZW51KSA9IG1lbnVf
YWRkX21lbnUoKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNTc6CisKKyAgICB7CisJaWYg
KHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsK
KwkJbWVudV9lbmRfbWVudSgpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9p
Y2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK30KKworICAgIGJy
ZWFrOworCisgIGNhc2UgNjU6CisKKyAgICB7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAo
eXl2c3BbLTJdLnN0cmluZyksICh5eXZzcFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9
CisKKyAgICBicmVhazsKKworICBjYXNlIDY2OgorCisgICAgeworCWlmICgoeXl2c3BbLTJdLmlk
KS0+c3R5cGUgPT0gU19CT09MRUFOIHx8ICh5eXZzcFstMl0uaWQpLT5zdHlwZSA9PSBTX1RSSVNU
QVRFKSB7CisJCW1lbnVfc2V0X3R5cGUoKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsKKwkJcHJpbnRk
KERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCQl6Y29uZl9jdXJuYW1lKCksIHpj
b25mX2xpbmVubygpLAorCQkJKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsKKwl9IGVsc2UKKwkJWVlF
UlJPUjsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNjc6CisKKyAgICB7CisJY3VycmVudF9l
bnRyeS0+c3ltLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7CisJcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6b3B0aW9uYWxcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwor
fQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA2ODoKKworICAgIHsKKwlpZiAoKHl5dnNwWy0zXS5p
ZCktPnN0eXBlID09IFNfVU5LTk9XTikgeworCQltZW51X2FkZF9zeW1ib2woUF9ERUZBVUxULCAo
eXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFstMV0uZXhwcikpOworCQlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDpkZWZhdWx0XG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7CisJfSBlbHNlCisJCVlZRVJST1I7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDcxOgor
CisgICAgeworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9k
ZXAoKHl5dnNwWy0xXS5leHByKSk7CisJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOwor
fQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA3MjoKKworICAgIHsKKwlpZiAoemNvbmZfZW5kdG9r
ZW4oKHl5dnNwWzBdLmlkKSwgVF9JRiwgVF9FTkRJRikpIHsKKwkJbWVudV9lbmRfbWVudSgpOwor
CQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRpZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6
Y29uZl9saW5lbm8oKSk7CisJfQorfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA3ODoKKworICAg
IHsKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAoeXl2
c3BbLTFdLnN0cmluZyksIE5VTEwpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVc
biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisK
KyAgY2FzZSA3OToKKworICAgIHsKKwkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7Cit9
CisKKyAgICBicmVhazsKKworICBjYXNlIDgwOgorCisgICAgeworCWlmICh6Y29uZl9lbmR0b2tl
bigoeXl2c3BbMF0uaWQpLCBUX01FTlUsIFRfRU5ETUVOVSkpIHsKKwkJbWVudV9lbmRfbWVudSgp
OworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRtZW51XG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsKKwl9Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDg2Ogor
CisgICAgeworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zdHJpbmcpKTsKKwl6Y29uZl9u
ZXh0ZmlsZSgoeXl2c3BbLTFdLnN0cmluZykpOworCWZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsK
K30KKworICAgIGJyZWFrOworCisgIGNhc2UgODc6CisKKyAgICB7CisJbWVudV9hZGRfZW50cnko
TlVMTCk7CisJbWVudV9hZGRfcHJvbXB0KFBfQ09NTUVOVCwgKHl5dnNwWy0xXS5zdHJpbmcpLCBO
VUxMKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21tZW50XG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgODk6CisK
KyAgICB7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJemNvbmZfc3RhcnRoZWxwKCk7Cit9CisKKyAgICBicmVh
azsKKworICBjYXNlIDkwOgorCisgICAgeworCWlmIChjdXJyZW50X2VudHJ5LT5oZWxwKSB7CisJ
CWZyZWUoY3VycmVudF9lbnRyeS0+aGVscCk7CisJCXpjb25mcHJpbnQoIndhcm5pbmc6ICclcycg
ZGVmaW5lZCB3aXRoIG1vcmUgdGhhbiBvbmUgaGVscCB0ZXh0IC0tIG9ubHkgdGhlIGxhc3Qgb25l
IHdpbGwgYmUgdXNlZCIsCisJCQkgICBjdXJyZW50X2VudHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9p
Y2U+Iik7CisJfQorCisJLyogSXMgdGhlIGhlbHAgdGV4dCBlbXB0eSBvciBhbGwgd2hpdGVzcGFj
ZT8gKi8KKwlpZiAoKHl5dnNwWzBdLnN0cmluZylbc3Ryc3BuKCh5eXZzcFswXS5zdHJpbmcpLCAi
IFxmXG5cclx0XHYiKV0gPT0gJ1wwJykKKwkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZp
bmVkIHdpdGggYmxhbmsgaGVscCB0ZXh0IiwKKwkJCSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFt
ZSA/OiAiPGNob2ljZT4iKTsKKworCWN1cnJlbnRfZW50cnktPmhlbHAgPSAoeXl2c3BbMF0uc3Ry
aW5nKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgOTU6CisKKyAgICB7CisJbWVudV9hZGRf
ZGVwKCh5eXZzcFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlcGVu
ZHMgb25cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSA5OToKKworICAgIHsKKwltZW51X2FkZF92aXNpYmlsaXR5KCh5eXZzcFsw
XS5leHByKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDEwMToKKworICAgIHsKKwltZW51
X2FkZF9wcm9tcHQoUF9QUk9NUFQsICh5eXZzcFstMV0uc3RyaW5nKSwgKHl5dnNwWzBdLmV4cHIp
KTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgMTA0OgorCisgICAgeyAoeXl2YWwuaWQpID0g
KHl5dnNwWy0xXS5pZCk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTA1OgorCisgICAgeyAo
eXl2YWwuaWQpID0gKHl5dnNwWy0xXS5pZCk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTA2
OgorCisgICAgeyAoeXl2YWwuaWQpID0gKHl5dnNwWy0xXS5pZCk7IH0KKworICAgIGJyZWFrOwor
CisgIGNhc2UgMTA5OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBOVUxMOyB9CisKKyAgICBicmVh
azsKKworICBjYXNlIDExMDoKKworICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWzBdLmV4cHIp
OyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDExMToKKworICAgIHsgKHl5dmFsLmV4cHIpID0g
ZXhwcl9hbGxvY19zeW1ib2woKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsKKwor
ICBjYXNlIDExMjoKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfTFRI
LCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMTM6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChF
X0xFUSwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJy
ZWFrOworCisgIGNhc2UgMTE0OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2Nv
bXAoRV9HVEgsICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAg
ICBicmVhazsKKworICBjYXNlIDExNToKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxv
Y19jb21wKEVfR0VRLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQor
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTY6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJf
YWxsb2NfY29tcChFX0VRVUFMLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wp
KTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTc6CisKKyAgICB7ICh5eXZhbC5leHByKSA9
IGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWzBd
LnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDExODoKKworICAgIHsgKHl5dmFs
LmV4cHIpID0gKHl5dnNwWy0xXS5leHByKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTk6
CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCAoeXl2c3BbMF0u
ZXhwcikpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEyMDoKKworICAgIHsgKHl5dmFsLmV4
cHIpID0gZXhwcl9hbGxvY190d28oRV9PUiwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWzBdLmV4
cHIpKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjE6CisKKyAgICB7ICh5eXZhbC5leHBy
KSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbMF0uZXhw
cikpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEyMjoKKworICAgIHsgKHl5dmFsLnN5bWJv
bCkgPSBzeW1fbG9va3VwKCh5eXZzcFswXS5zdHJpbmcpLCAwKTsgZnJlZSgoeXl2c3BbMF0uc3Ry
aW5nKSk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTI0OgorCisgICAgeyAoeXl2YWwuc3lt
Ym9sKSA9IHN5bV9sb29rdXAoKHl5dnNwWzBdLnN0cmluZyksIFNZTUJPTF9DT05TVCk7IGZyZWUo
KHl5dnNwWzBdLnN0cmluZykpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEyNToKKworICAg
IHsgKHl5dmFsLnN0cmluZykgPSBOVUxMOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEyNzoK
KworICAgIHsgdmFyaWFibGVfYWRkKCh5eXZzcFstM10uc3RyaW5nKSwgKHl5dnNwWy0xXS5zdHJp
bmcpLCAoeXl2c3BbLTJdLmZsYXZvcikpOyBmcmVlKCh5eXZzcFstM10uc3RyaW5nKSk7IGZyZWUo
KHl5dnNwWy0xXS5zdHJpbmcpKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjg6CisKKyAg
ICB7ICh5eXZhbC5zdHJpbmcpID0geHN0cmR1cCgiIik7IH0KKworICAgIGJyZWFrOworCisKKwor
ICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMg
c29tZXRpbWVzIGFsdGVyIHl5Y2hhciwgYW5kIHRoYXQgcmVxdWlyZXMKKyAgICAgdGhhdCB5eXRv
a2VuIGJlIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IHRyYW5zbGF0aW9uLiAgV2UgdGFrZSB0aGUKKyAg
ICAgYXBwcm9hY2ggb2YgdHJhbnNsYXRpbmcgaW1tZWRpYXRlbHkgYmVmb3JlIGV2ZXJ5IHVzZSBv
ZiB5eXRva2VuLgorICAgICBPbmUgYWx0ZXJuYXRpdmUgaXMgdHJhbnNsYXRpbmcgaGVyZSBhZnRl
ciBldmVyeSBzZW1hbnRpYyBhY3Rpb24sCisgICAgIGJ1dCB0aGF0IHRyYW5zbGF0aW9uIHdvdWxk
IGJlIG1pc3NlZCBpZiB0aGUgc2VtYW50aWMgYWN0aW9uIGludm9rZXMKKyAgICAgWVlBQk9SVCwg
WVlBQ0NFUFQsIG9yIFlZRVJST1IgaW1tZWRpYXRlbHkgYWZ0ZXIgYWx0ZXJpbmcgeXljaGFyIG9y
CisgICAgIGlmIGl0IGludm9rZXMgWVlCQUNLVVAuICBJbiB0aGUgY2FzZSBvZiBZWUFCT1JUIG9y
IFlZQUNDRVBULCBhbgorICAgICBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBtaWdodCB0aGVuIGJlIGlu
dm9rZWQgaW1tZWRpYXRlbHkuICBJbiB0aGUKKyAgICAgY2FzZSBvZiBZWUVSUk9SIG9yIFlZQkFD
S1VQLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQKKyAgICAgdG8gYW4gaW5j
b3JyZWN0IGRlc3RydWN0b3IgY2FsbCBvciB2ZXJib3NlIHN5bnRheCBlcnJvciBtZXNzYWdlCisg
ICAgIGJlZm9yZSB0aGUgbG9va2FoZWFkIGlzIHRyYW5zbGF0ZWQuICAqLworICBZWV9TWU1CT0xf
UFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7CisKKyAgWVlQT1BT
VEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNz
cCk7CisKKyAgKisreXl2c3AgPSB5eXZhbDsKKworICAvKiBOb3cgJ3NoaWZ0JyB0aGUgcmVzdWx0
IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQorICAgICB0aGF0IGdvZXMg
dG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKKyAg
ICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5biA9IHl5cjFbeXluXTsKKworICB5eXN0
YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOworICBpZiAoMCA8PSB5eXN0
YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQor
ICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOworICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5
ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycmxhYiAtLSBoZXJl
IG9uIGRldGVjdGluZyBlcnJvci4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2th
aGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAorICAgICB1c2VyIHNlbWFudGljIGFj
dGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCisgIHl5dG9rZW4gPSB5eWNoYXIg
PT0gWVlFTVBUWSA/IFlZRU1QVFkgOiBZWVRSQU5TTEFURSAoeXljaGFyKTsKKworICAvKiBJZiBu
b3QgYWxyZWFkeSByZWNvdmVyaW5nIGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAg
Ki8KKyAgaWYgKCF5eWVycnN0YXR1cykKKyAgICB7CisgICAgICArK3l5bmVycnM7CisjaWYgISBZ
WUVSUk9SX1ZFUkJPU0UKKyAgICAgIHl5ZXJyb3IgKFlZXygic3ludGF4IGVycm9yIikpOworI2Vs
c2UKKyMgZGVmaW5lIFlZU1lOVEFYX0VSUk9SIHl5c3ludGF4X2Vycm9yICgmeXltc2dfYWxsb2Ms
ICZ5eW1zZywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3Nw
LCB5eXRva2VuKQorICAgICAgeworICAgICAgICBjaGFyIGNvbnN0ICp5eW1zZ3AgPSBZWV8oInN5
bnRheCBlcnJvciIpOworICAgICAgICBpbnQgeXlzeW50YXhfZXJyb3Jfc3RhdHVzOworICAgICAg
ICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsKKyAgICAgICAgaWYgKHl5
c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAwKQorICAgICAgICAgIHl5bXNncCA9IHl5bXNnOworICAg
ICAgICBlbHNlIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMSkKKyAgICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisgICAgICAgICAgICAgIFlZU1RBQ0tf
RlJFRSAoeXltc2cpOworICAgICAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9D
ICh5eW1zZ19hbGxvYyk7CisgICAgICAgICAgICBpZiAoIXl5bXNnKQorICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsKKyAgICAgICAgICAgICAgICB5eW1z
Z19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyAgICAgICAgICAgICAgICB5eXN5bnRheF9lcnJv
cl9zdGF0dXMgPSAyOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRB
WF9FUlJPUjsKKyAgICAgICAgICAgICAgICB5eW1zZ3AgPSB5eW1zZzsKKyAgICAgICAgICAgICAg
fQorICAgICAgICAgIH0KKyAgICAgICAgeXllcnJvciAoeXltc2dwKTsKKyAgICAgICAgaWYgKHl5
c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAyKQorICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7
CisgICAgICB9CisjIHVuZGVmIFlZU1lOVEFYX0VSUk9SCisjZW5kaWYKKyAgICB9CisKKworCisg
IGlmICh5eWVycnN0YXR1cyA9PSAzKQorICAgIHsKKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5k
IGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4KKyAgICAgICAgIGVycm9y
LCBkaXNjYXJkIGl0LiAgKi8KKworICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICAgICAg
eworICAgICAgICAgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisg
ICAgICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikKKyAgICAgICAgICAgIFlZQUJPUlQ7CisgICAg
ICAgIH0KKyAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJv
cjogZGlzY2FyZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCk7
CisgICAgICAgICAgeXljaGFyID0gWVlFTVBUWTsKKyAgICAgICAgfQorICAgIH0KKworICAvKiBF
bHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUg
ZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJvcmxh
YiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfAorYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycm9ybGFiOgor
CisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVy
IGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3Jl
IG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAgaWYgKC8qQ09OU1RDT05E
Ki8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBz
eW1ib2xzIG9mIHRoZSBydWxlIHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUVS
Uk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9IDA7CisgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7CisgIGdvdG8geXllcnJs
YWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5
bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFiMToKKyAgeXllcnJz
dGF0dXMgPSAzOyAgICAgIC8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhp
cy4gICovCisKKyAgZm9yICg7OykKKyAgICB7CisgICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07
CisgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQorICAgICAgICB7Cisg
ICAgICAgICAgeXluICs9IFlZVEVSUk9SOworICAgICAgICAgIGlmICgwIDw9IHl5biAmJiB5eW4g
PD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOworICAgICAgICAgICAgICBpZiAoMCA8IHl5
bikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRo
ZSBlcnJvciB0b2tlbi4gICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKyAgICAgICAgWVlB
Qk9SVDsKKworCisgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAorICAgICAgICAg
ICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsK
KyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7CisgICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlz
c3ApOworICAgIH0KKworICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorICAq
Kyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisK
KworICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJT
aGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47
CisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXly
ZXN1bHQgPSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJl
c3VsdCA9IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZiAhZGVmaW5lZCB5eW92ZXJmbG93IHx8
IFlZRVJST1JfVkVSQk9TRQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21l
cyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5ZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1c3Rl
ZCIpKTsKKyAgeXlyZXN1bHQgPSAyOworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisK
K3l5cmV0dXJuOgorICBpZiAoeXljaGFyICE9IFlZRU1QVFkpCisgICAgeworICAgICAgLyogTWFr
ZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50
cyBhdAorICAgICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNl
c3NhcnkuICAqLworICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOworICAgICAg
eXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKKyAgICAgICAgICAg
ICAgICAgIHl5dG9rZW4sICZ5eWx2YWwpOworICAgIH0KKyAgLyogRG8gbm90IHJlY2xhaW0gdGhl
IHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hvc2UgYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZ
QUJPUlQgb3IgWVlBQ0NFUFQuICAqLworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIFlZX1NUQUNL
X1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQorICAgIHsKKyAg
ICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwKKyAgICAgICAgICAgICAgICAgIHl5
c3Rvc1sqeXlzc3BdLCB5eXZzcCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICB9CisjaWZu
ZGVmIHl5b3ZlcmZsb3cKKyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFDS19GUkVFICh5
eXNzKTsKKyNlbmRpZgorI2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cgIT0geXltc2di
dWYpCisgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgcmV0dXJuIHl5cmVzdWx0
OworfQorCisKKwordm9pZCBjb25mX3BhcnNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0
IHN5bWJvbCAqc3ltOworCWludCBpOworCisJemNvbmZfaW5pdHNjYW4obmFtZSk7CisKKwlfbWVu
dV9pbml0KCk7CisKKwlpZiAoZ2V0ZW52KCJaQ09ORl9ERUJVRyIpKQorCQl5eWRlYnVnID0gMTsK
Kwl5eXBhcnNlKCk7CisKKwkvKiBWYXJpYWJsZXMgYXJlIGV4cGFuZGVkIGluIHRoZSBwYXJzZSBw
aGFzZS4gV2UgY2FuIGZyZWUgdGhlbSBoZXJlLiAqLworCXZhcmlhYmxlX2FsbF9kZWwoKTsKKwor
CWlmICh5eW5lcnJzKQorCQlleGl0KDEpOworCWlmICghbW9kdWxlc19zeW0pCisJCW1vZHVsZXNf
c3ltID0gc3ltX2ZpbmQoICJuIiApOworCisJaWYgKCFtZW51X2hhc19wcm9tcHQoJnJvb3RtZW51
KSkgeworCQljdXJyZW50X2VudHJ5ID0gJnJvb3RtZW51OworCQltZW51X2FkZF9wcm9tcHQoUF9N
RU5VLCAiTWFpbiBtZW51IiwgTlVMTCk7CisJfQorCisJbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUp
OworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJaWYgKHN5bV9jaGVja19kZXBzKHN5bSkp
CisJCQl5eW5lcnJzKys7CisJfQorCWlmICh5eW5lcnJzKQorCQlleGl0KDEpOworCXN5bV9zZXRf
Y2hhbmdlX2NvdW50KDEpOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1l
KGludCB0b2tlbikKK3sKKwlzd2l0Y2ggKHRva2VuKSB7CisJY2FzZSBUX01FTlU6CQlyZXR1cm4g
Im1lbnUiOworCWNhc2UgVF9FTkRNRU5VOgkJcmV0dXJuICJlbmRtZW51IjsKKwljYXNlIFRfQ0hP
SUNFOgkJcmV0dXJuICJjaG9pY2UiOworCWNhc2UgVF9FTkRDSE9JQ0U6CXJldHVybiAiZW5kY2hv
aWNlIjsKKwljYXNlIFRfSUY6CQlyZXR1cm4gImlmIjsKKwljYXNlIFRfRU5ESUY6CQlyZXR1cm4g
ImVuZGlmIjsKKwljYXNlIFRfREVQRU5EUzoJCXJldHVybiAiZGVwZW5kcyI7CisJY2FzZSBUX1ZJ
U0lCTEU6CQlyZXR1cm4gInZpc2libGUiOworCX0KKwlyZXR1cm4gIjx0b2tlbj4iOworfQorCitz
dGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQg
c3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKQoreworCWlmIChpZC0+dG9rZW4gIT0gZW5kdG9rZW4p
IHsKKwkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxvY2siLAorCQkJ
aWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CisJCXl5bmVycnMrKzsKKwkJ
cmV0dXJuIGZhbHNlOworCX0KKwlpZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1cnJlbnRfZmls
ZSkgeworCQl6Y29uZl9lcnJvcigiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLAor
CQkJaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7CisJCWZwcmludGYoc3Rk
ZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9mIHRoZSAnJXMnXG4iLAorCQkJY3VycmVudF9tZW51LT5m
aWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVubywKKwkJCXpjb25mX3Rva2VubmFtZShzdGFy
dHRva2VuKSk7CisJCXl5bmVycnMrKzsKKwkJcmV0dXJuIGZhbHNlOworCX0KKwlyZXR1cm4gdHJ1
ZTsKK30KKworc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLikKK3sK
Kwl2YV9saXN0IGFwOworCisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJdmZwcmludGYoc3Rk
ZXJyLCBlcnIsIGFwKTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30K
Kworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFf
bGlzdCBhcDsKKworCXl5bmVycnMrKzsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl2YV9zdGFydChhcCwgZXJyKTsKKwl2ZnBy
aW50ZihzdGRlcnIsIGVyciwgYXApOworCXZhX2VuZChhcCk7CisJZnByaW50ZihzdGRlcnIsICJc
biIpOworfQorCitzdGF0aWMgdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKmVycikKK3sKKwlmcHJp
bnRmKHN0ZGVyciwgIiVzOiVkOiAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSArIDEsIGVycik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAq
b3V0LCBjb25zdCBjaGFyICpzdHIpCit7CisJY29uc3QgY2hhciAqcDsKKwlpbnQgbGVuOworCisJ
cHV0YygnIicsIG91dCk7CisJd2hpbGUgKChwID0gc3RyY2hyKHN0ciwgJyInKSkpIHsKKwkJbGVu
ID0gcCAtIHN0cjsKKwkJaWYgKGxlbikKKwkJCWZwcmludGYob3V0LCAiJS4qcyIsIGxlbiwgc3Ry
KTsKKwkJZnB1dHMoIlxcXCIiLCBvdXQpOworCQlzdHIgPSBwICsgMTsKKwl9CisJZnB1dHMoc3Ry
LCBvdXQpOworCXB1dGMoJyInLCBvdXQpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9zeW1ib2wo
RklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBt
ZW51LT5zeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJaWYgKHN5bV9pc19jaG9pY2Uo
c3ltKSkKKwkJZnByaW50ZihvdXQsICJcbmNob2ljZVxuIik7CisJZWxzZQorCQlmcHJpbnRmKG91
dCwgIlxuY29uZmlnICVzXG4iLCBzeW0tPm5hbWUpOworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJ
Y2FzZSBTX0JPT0xFQU46CisJCWZwdXRzKCIgIGJvb2xcbiIsIG91dCk7CisJCWJyZWFrOworCWNh
c2UgU19UUklTVEFURToKKwkJZnB1dHMoIiAgdHJpc3RhdGVcbiIsIG91dCk7CisJCWJyZWFrOwor
CWNhc2UgU19TVFJJTkc6CisJCWZwdXRzKCIgIHN0cmluZ1xuIiwgb3V0KTsKKwkJYnJlYWs7CisJ
Y2FzZSBTX0lOVDoKKwkJZnB1dHMoIiAgaW50ZWdlclxuIiwgb3V0KTsKKwkJYnJlYWs7CisJY2Fz
ZSBTX0hFWDoKKwkJZnB1dHMoIiAgaGV4XG4iLCBvdXQpOworCQlicmVhazsKKwlkZWZhdWx0Ogor
CQlmcHV0cygiICA/Pz9cbiIsIG91dCk7CisJCWJyZWFrOworCX0KKwlmb3IgKHByb3AgPSBzeW0t
PnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCWlmIChwcm9wLT5tZW51ICE9IG1l
bnUpCisJCQljb250aW51ZTsKKwkJc3dpdGNoIChwcm9wLT50eXBlKSB7CisJCWNhc2UgUF9QUk9N
UFQ6CisJCQlmcHV0cygiICBwcm9tcHQgIiwgb3V0KTsKKwkJCXByaW50X3F1b3RlZF9zdHJpbmco
b3V0LCBwcm9wLT50ZXh0KTsKKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHBy
KSkgeworCQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52aXNp
YmxlLmV4cHIsIG91dCk7CisJCQl9CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJ
CWNhc2UgUF9ERUZBVUxUOgorCQkJZnB1dHMoICIgIGRlZmF1bHQgIiwgb3V0KTsKKwkJCWV4cHJf
ZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2li
bGUuZXhwcikpIHsKKwkJCQlmcHV0cygiIGlmICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQocHJv
cC0+dmlzaWJsZS5leHByLCBvdXQpOworCQkJfQorCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJy
ZWFrOworCQljYXNlIFBfQ0hPSUNFOgorCQkJZnB1dHMoIiAgI2Nob2ljZSB2YWx1ZVxuIiwgb3V0
KTsKKwkJCWJyZWFrOworCQljYXNlIFBfU0VMRUNUOgorCQkJZnB1dHMoICIgIHNlbGVjdCAiLCBv
dXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbicsIG91
dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0lNUExZOgorCQkJZnB1dHMoICIgIGltcGx5ICIsIG91
dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywgb3V0
KTsKKwkJCWJyZWFrOworCQljYXNlIFBfUkFOR0U6CisJCQlmcHV0cyggIiAgcmFuZ2UgIiwgb3V0
KTsKKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBvdXQp
OworCQkJYnJlYWs7CisJCWNhc2UgUF9NRU5VOgorCQkJZnB1dHMoICIgIG1lbnUgIiwgb3V0KTsK
KwkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCWZwdXRjKCdcbics
IG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1NZTUJPTDoKKwkJCWZwdXRzKCAiICBzeW1ib2wg
Iiwgb3V0KTsKKwkJCWZwcmludGYob3V0LCAiJXNcbiIsIHByb3AtPnN5bS0+bmFtZSk7CisJCQli
cmVhazsKKwkJZGVmYXVsdDoKKwkJCWZwcmludGYob3V0LCAiICB1bmtub3duIHByb3AgJWQhXG4i
LCBwcm9wLT50eXBlKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChtZW51LT5oZWxwKSB7CisJ
CWludCBsZW4gPSBzdHJsZW4obWVudS0+aGVscCk7CisJCXdoaWxlIChtZW51LT5oZWxwWy0tbGVu
XSA9PSAnXG4nKQorCQkJbWVudS0+aGVscFtsZW5dID0gMDsKKwkJZnByaW50ZihvdXQsICIgIGhl
bHBcbiVzXG4iLCBtZW51LT5oZWxwKTsKKwl9Cit9CisKK3ZvaWQgemNvbmZkdW1wKEZJTEUgKm91
dCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0
cnVjdCBtZW51ICptZW51OworCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisJd2hpbGUgKG1lbnUp
IHsKKwkJaWYgKChzeW0gPSBtZW51LT5zeW0pKQorCQkJcHJpbnRfc3ltYm9sKG91dCwgbWVudSk7
CisJCWVsc2UgaWYgKChwcm9wID0gbWVudS0+cHJvbXB0KSkgeworCQkJc3dpdGNoIChwcm9wLT50
eXBlKSB7CisJCQljYXNlIFBfQ09NTUVOVDoKKwkJCQlmcHV0cygiXG5jb21tZW50ICIsIG91dCk7
CisJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJCWZwdXRzKCJc
biIsIG91dCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFBfTUVOVToKKwkJCQlmcHV0cygiXG5tZW51
ICIsIG91dCk7CisJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJ
CWZwdXRzKCJcbiIsIG91dCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCTsKKwkJCX0K
KwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJCWZwdXRzKCIg
IGRlcGVuZHMgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91
dCk7CisJCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCX0KKwkJfQorCisJCWlmIChtZW51LT5saXN0
KQorCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCWVsc2UgaWYgKG1lbnUtPm5leHQpCisJCQltZW51
ID0gbWVudS0+bmV4dDsKKwkJZWxzZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7CisJ
CQlpZiAobWVudS0+cHJvbXB0ICYmIG1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCisJCQkJ
ZnB1dHMoIlxuZW5kbWVudVxuIiwgb3V0KTsKKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJbWVu
dSA9IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKKyNpbmNsdWRl
ICJ6Y29uZi5sZXguYyIKKyNpbmNsdWRlICJ1dGlsLmMiCisjaW5jbHVkZSAiY29uZmRhdGEuYyIK
KyNpbmNsdWRlICJleHByLmMiCisjaW5jbHVkZSAic3ltYm9sLmMiCisjaW5jbHVkZSAibWVudS5j
IgorI2luY2x1ZGUgInByZXByb2Nlc3MuYyIKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:35:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:35:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7agZ-00020x-5Z; Tue, 10 Sep 2019 07:35:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NyU-0003r3-Ad
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:01:14 +0000
X-Inumbo-ID: cd655ba0-d32b-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id cd655ba0-d32b-11e9-978d-bc764e2007e4;
 Mon, 09 Sep 2019 18:01:10 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 16CF7105698;
 Mon,  9 Sep 2019 20:01:09 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id OLRfNkpln0Rd; Mon,  9 Sep 2019 20:01:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id AB0A810569D
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:01:03 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:01:01 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:38 +0200
Message-ID: <20190909175939.23936-23-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Tue, 10 Sep 2019 07:35:32 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH v2 22/23] kconfig: Remove the old
 kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: multipart/mixed; boundary="===============4509792558724785496=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============4509792558724785496==
Content-Type: text/plain; charset="y"
Content-Transfer-Encoding: 8bit

Signed-off-by: Sharan Santhanam <sharan.santhanam@neclab.eu>
---
 support/kconfig/Makefile                      |  321 ---
 support/kconfig/Makefile.br                   |   53 -
 support/kconfig/POTFILES.in                   |   12 -
 support/kconfig/README.unikraft               |   21 -
 support/kconfig/check.sh                      |   14 -
 support/kconfig/conf.c                        |  717 -----
 support/kconfig/confdata.c                    | 1279 ---------
 support/kconfig/expr.c                        | 1168 --------
 support/kconfig/expr.h                        |  238 --
 support/kconfig/fixdep.c                      |  409 ---
 support/kconfig/foo.h                         |   12 -
 support/kconfig/gconf.c                       | 1542 ----------
 support/kconfig/gconf.glade                   |  661 -----
 support/kconfig/images.c                      |  326 ---
 support/kconfig/kxgettext.c                   |  235 --
 support/kconfig/list.h                        |  131 -
 support/kconfig/lkc.h                         |  199 --
 support/kconfig/lkc_proto.h                   |   57 -
 support/kconfig/lxdialog/.gitignore           |    4 -
 support/kconfig/lxdialog/BIG.FAT.WARNING      |    4 -
 support/kconfig/lxdialog/check-lxdialog.sh    |   91 -
 support/kconfig/lxdialog/checklist.c          |  332 ---
 support/kconfig/lxdialog/dialog.h             |  257 --
 support/kconfig/lxdialog/inputbox.c           |  301 --
 support/kconfig/lxdialog/menubox.c            |  437 ---
 support/kconfig/lxdialog/textbox.c            |  408 ---
 support/kconfig/lxdialog/util.c               |  713 -----
 support/kconfig/lxdialog/yesno.c              |  114 -
 support/kconfig/mconf.c                       | 1037 -------
 support/kconfig/menu.c                        |  694 -----
 support/kconfig/merge_config.sh               |  150 -
 support/kconfig/nconf.c                       | 1557 ----------
 support/kconfig/nconf.gui.c                   |  656 -----
 support/kconfig/nconf.h                       |   96 -
 ...-kconfig-kernel-to-buildroot-unikore.patch |   98 -
 .../06-br-build-system-integration.patch      |   35 -
 .../kconfig/patches/10-br-build-system.patch  |   80 -
 .../patches/11-use-mktemp-for-lxdialog.patch  |   17 -
 .../patches/12-fix-glade-file-path.patch      |   17 -
 .../14-support-out-of-tree-config.patch       |  207 --
 .../patches/15-fix-qconf-moc-rule.patch       |   24 -
 ...g-get-ncurses-CFLAGS-with-pkg-config.patch |   50 -
 support/kconfig/patches/series                |    8 -
 support/kconfig/qconf.cc                      | 1795 ------------
 support/kconfig/qconf.h                       |  338 ---
 support/kconfig/streamline_config.pl          |  640 -----
 support/kconfig/symbol.c                      | 1373 ---------
 support/kconfig/util.c                        |  171 --
 support/kconfig/zconf.gperf                   |   47 -
 support/kconfig/zconf.hash.c_shipped          |  286 --
 support/kconfig/zconf.l                       |  363 ---
 support/kconfig/zconf.lex.c_shipped           | 2420 ----------------
 support/kconfig/zconf.tab.c_shipped           | 2538 -----------------
 support/kconfig/zconf.y                       |  733 -----
 54 files changed, 25486 deletions(-)
 delete mode 100644 support/kconfig/Makefile
 delete mode 100644 support/kconfig/Makefile.br
 delete mode 100644 support/kconfig/POTFILES.in
 delete mode 100644 support/kconfig/README.unikraft
 delete mode 100755 support/kconfig/check.sh
 delete mode 100644 support/kconfig/conf.c
 delete mode 100644 support/kconfig/confdata.c
 delete mode 100644 support/kconfig/expr.c
 delete mode 100644 support/kconfig/expr.h
 delete mode 100644 support/kconfig/fixdep.c
 delete mode 100644 support/kconfig/foo.h
 delete mode 100644 support/kconfig/gconf.c
 delete mode 100644 support/kconfig/gconf.glade
 delete mode 100644 support/kconfig/images.c
 delete mode 100644 support/kconfig/kxgettext.c
 delete mode 100644 support/kconfig/list.h
 delete mode 100644 support/kconfig/lkc.h
 delete mode 100644 support/kconfig/lkc_proto.h
 delete mode 100644 support/kconfig/lxdialog/.gitignore
 delete mode 100644 support/kconfig/lxdialog/BIG.FAT.WARNING
 delete mode 100755 support/kconfig/lxdialog/check-lxdialog.sh
 delete mode 100644 support/kconfig/lxdialog/checklist.c
 delete mode 100644 support/kconfig/lxdialog/dialog.h
 delete mode 100644 support/kconfig/lxdialog/inputbox.c
 delete mode 100644 support/kconfig/lxdialog/menubox.c
 delete mode 100644 support/kconfig/lxdialog/textbox.c
 delete mode 100644 support/kconfig/lxdialog/util.c
 delete mode 100644 support/kconfig/lxdialog/yesno.c
 delete mode 100644 support/kconfig/mconf.c
 delete mode 100644 support/kconfig/menu.c
 delete mode 100755 support/kconfig/merge_config.sh
 delete mode 100644 support/kconfig/nconf.c
 delete mode 100644 support/kconfig/nconf.gui.c
 delete mode 100644 support/kconfig/nconf.h
 delete mode 100644 support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch
 delete mode 100644 support/kconfig/patches/06-br-build-system-integration.patch
 delete mode 100644 support/kconfig/patches/10-br-build-system.patch
 delete mode 100644 support/kconfig/patches/11-use-mktemp-for-lxdialog.patch
 delete mode 100644 support/kconfig/patches/12-fix-glade-file-path.patch
 delete mode 100644 support/kconfig/patches/14-support-out-of-tree-config.patch
 delete mode 100644 support/kconfig/patches/15-fix-qconf-moc-rule.patch
 delete mode 100644 support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
 delete mode 100644 support/kconfig/patches/series
 delete mode 100644 support/kconfig/qconf.cc
 delete mode 100644 support/kconfig/qconf.h
 delete mode 100644 support/kconfig/streamline_config.pl
 delete mode 100644 support/kconfig/symbol.c
 delete mode 100644 support/kconfig/util.c
 delete mode 100644 support/kconfig/zconf.gperf
 delete mode 100644 support/kconfig/zconf.hash.c_shipped
 delete mode 100644 support/kconfig/zconf.l
 delete mode 100644 support/kconfig/zconf.lex.c_shipped
 delete mode 100644 support/kconfig/zconf.tab.c_shipped
 delete mode 100644 support/kconfig/zconf.y

diff --git a/support/kconfig/Makefile b/support/kconfig/Makefile
deleted file mode 100644
index 6d5b6111..00000000
--- a/support/kconfig/Makefile
+++ /dev/null
@@ -1,321 +0,0 @@
-# ===========================================================================
-# Kernel configuration targets
-# These targets are used from top-level makefile
-
-PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
-	localmodconfig localyesconfig
-
-ifdef KBUILD_KCONFIG
-Kconfig := $(KBUILD_KCONFIG)
-else
-Kconfig := Kconfig
-endif
-
-# We need this, in case the user has it in its environment
-unexport CONFIG_
-
-xconfig: $(obj)/qconf
-	$< $(Kconfig)
-
-gconfig: $(obj)/gconf
-	$< $(Kconfig)
-
-menuconfig: $(obj)/mconf
-	$< $(Kconfig)
-
-config: $(obj)/conf
-	$< --oldaskconfig $(Kconfig)
-
-nconfig: $(obj)/nconf
-	$< $(Kconfig)
-
-oldconfig: $(obj)/conf
-	$< --$@ $(Kconfig)
-
-silentoldconfig: $(obj)/conf
-	$(Q)mkdir -p include/generated
-	$< --$@ $(Kconfig)
-
-localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
-	$(Q)mkdir -p include/generated
-	$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
-	$(Q)if [ -f .config ]; then 					\
-			cmp -s .tmp.config .config ||			\
-			(mv -f .config .config.old.1;			\
-			 mv -f .tmp.config .config;			\
-			 $(obj)/conf --silentoldconfig $(Kconfig);	\
-			 mv -f .config.old.1 .config.old)		\
-	else								\
-			mv -f .tmp.config .config;			\
-			$(obj)/conf --silentoldconfig $(Kconfig);	\
-	fi
-	$(Q)rm -f .tmp.config
-
-# Create new linux.pot file
-# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
-update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
-	$(Q)echo "  GEN     config.pot"
-	$(Q)xgettext --default-domain=linux                         \
-	    --add-comments --keyword=_ --keyword=N_                 \
-	    --from-code=UTF-8                                       \
-	    --files-from=$(srctree)/scripts/kconfig/POTFILES.in     \
-	    --directory=$(srctree) --directory=$(objtree)           \
-	    --output $(obj)/config.pot
-	$(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
-	$(Q)(for i in `ls $(srctree)/arch/*/Kconfig      \
-	    $(srctree)/arch/*/um/Kconfig`;               \
-	    do                                           \
-		echo "  GEN     $$i";                    \
-		$(obj)/kxgettext $$i                     \
-		     >> $(obj)/config.pot;               \
-	    done )
-	$(Q)echo "  GEN     linux.pot"
-	$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
-	    --output $(obj)/linux.pot
-	$(Q)rm -f $(obj)/config.pot
-
-PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
-
-allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
-	$< --$@ $(Kconfig)
-
-PHONY += listnewconfig olddefconfig oldnoconfig savedefconfig defconfig
-
-listnewconfig olddefconfig: $(obj)/conf
-	$< --$@ $(Kconfig)
-
-# oldnoconfig is an alias of olddefconfig, because people already are dependent
-# on its behavior(sets new symbols to their default value but not 'n') with the
-# counter-intuitive name.
-oldnoconfig: $(obj)/conf
-	$< --olddefconfig $(Kconfig)
-
-savedefconfig: $(obj)/conf
-	$< --$@=defconfig $(Kconfig)
-
-defconfig: $(obj)/conf
-ifeq ($(KBUILD_DEFCONFIG),)
-	$< --defconfig $(Kconfig)
-else
-	@echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
-	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
-endif
-
-%_defconfig: $(obj)/conf
-	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
-
-# Help text used by make help
-help:
-	@echo  '  config	  - Update current config utilising a line-oriented program'
-	@echo  '  nconfig         - Update current config utilising a ncurses menu based program'
-	@echo  '  menuconfig	  - Update current config utilising a menu based program'
-	@echo  '  xconfig	  - Update current config utilising a QT based front-end'
-	@echo  '  gconfig	  - Update current config utilising a GTK based front-end'
-	@echo  '  oldconfig	  - Update current config utilising a provided .config as base'
-	@echo  '  localmodconfig  - Update current config disabling modules not loaded'
-	@echo  '  localyesconfig  - Update current config converting local mods to core'
-	@echo  '  silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
-	@echo  '  defconfig	  - New config with default from ARCH supplied defconfig'
-	@echo  '  savedefconfig   - Save current config as ./defconfig (minimal config)'
-	@echo  '  allnoconfig	  - New config where all options are answered with no'
-	@echo  '  allyesconfig	  - New config where all options are accepted with yes'
-	@echo  '  allmodconfig	  - New config selecting modules when possible'
-	@echo  '  alldefconfig    - New config with all symbols set to default'
-	@echo  '  randconfig	  - New config with random answer to all options'
-	@echo  '  listnewconfig   - List new options'
-	@echo  '  olddefconfig	  - Same as silentoldconfig but sets new symbols to their default value'
-
-# lxdialog stuff
-check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
-
-# Use recursively expanded variables so we do not call gcc unless
-# we really need to do so. (Do not call gcc as part of make mrproper)
-HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
-                    -DLOCALE
-
-# ===========================================================================
-# Shared Makefile for the various kconfig executables:
-# conf:	  Used for defconfig, oldconfig and related targets
-# nconf:  Used for the nconfig target.
-#         Utilizes ncurses
-# mconf:  Used for the menuconfig target
-#         Utilizes the lxdialog package
-# qconf:  Used for the xconfig target
-#         Based on QT which needs to be installed to compile it
-# gconf:  Used for the gconfig target
-#         Based on GTK which needs to be installed to compile it
-# object files used by all kconfig flavours
-
-lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
-lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
-
-conf-objs	:= conf.o  zconf.tab.o
-mconf-objs     := mconf.o zconf.tab.o $(lxdialog)
-nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
-kxgettext-objs	:= kxgettext.o zconf.tab.o
-qconf-cxxobjs	:= qconf.o
-qconf-objs	:= zconf.tab.o
-gconf-objs	:= gconf.o zconf.tab.o
-fixdep-obj	:= fixdep.o
-
-hostprogs-y := conf
-hostprogs-y += fixdep
-
-ifeq ($(MAKECMDGOALS),nconf)
-	hostprogs-y += nconf
-endif
-
-ifeq ($(MAKECMDGOALS),mconf)
-	hostprogs-y += mconf
-endif
-
-ifeq ($(MAKECMDGOALS),update-po-config)
-	hostprogs-y += kxgettext
-endif
-
-ifeq ($(MAKECMDGOALS),qconf)
-	qconf-target := 1
-endif
-ifeq ($(MAKECMDGOALS),gconf)
-	gconf-target := 1
-endif
-
-
-ifeq ($(qconf-target),1)
-	hostprogs-y += qconf
-endif
-
-ifeq ($(gconf-target),1)
-	hostprogs-y += gconf
-endif
-
-clean-files	:= qconf.moc .tmp_qtcheck .tmp_gtkcheck
-clean-files	+= zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
-clean-files     += mconf qconf gconf nconf
-clean-files     += config.pot linux.pot
-
-# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
-PHONY += $(obj)/dochecklxdialog
-$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
-$(obj)/dochecklxdialog:
-	$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
-
-always := dochecklxdialog
-
-# Add environment specific flags
-HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
-
-# generated files seem to need this to find local include files
-HOSTCFLAGS_zconf.lex.o	:= -I$(src)
-HOSTCFLAGS_zconf.tab.o	:= -I$(src)
-
-LEX_PREFIX_zconf	:= zconf
-YACC_PREFIX_zconf	:= zconf
-
-HOSTLOADLIBES_qconf	= $(KC_QT_LIBS)
-HOSTCXXFLAGS_qconf.o	= $(KC_QT_CFLAGS)
-
-HOSTLOADLIBES_gconf	= `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
-HOSTCFLAGS_gconf.o	= `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
-                          -Wno-missing-prototypes
-
-HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
-
-HOSTLOADLIBES_nconf	= $(shell \
-				pkg-config --libs menu panel ncurses 2>/dev/null \
-				|| echo "-lmenu -lpanel -lncurses"  )
-$(obj)/qconf.o: $(obj)/.tmp_qtcheck
-
-ifeq ($(qconf-target),1)
-$(obj)/.tmp_qtcheck: $(src)/Makefile
--include $(obj)/.tmp_qtcheck
-
-# QT needs some extra effort...
-$(obj)/.tmp_qtcheck:
-	@set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
-	if ! pkg-config --exists QtCore 2> /dev/null; then \
-	    echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
-	    pkg-config --exists qt 2> /dev/null && pkg=qt; \
-	    pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
-	    if [ -n "$$pkg" ]; then \
-	      cflags="\$$(shell pkg-config $$pkg --cflags)"; \
-	      libs="\$$(shell pkg-config $$pkg --libs)"; \
-	      moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
-	      dir="$$(pkg-config $$pkg --variable=prefix)"; \
-	    else \
-	      for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
-	        if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
-	      done; \
-	      if [ -z "$$dir" ]; then \
-	        echo >&2 "*"; \
-	        echo >&2 "* Unable to find any QT installation. Please make sure that"; \
-	        echo >&2 "* the QT4 or QT3 development package is correctly installed and"; \
-	        echo >&2 "* either qmake can be found or install pkg-config or set"; \
-	        echo >&2 "* the QTDIR environment variable to the correct location."; \
-	        echo >&2 "*"; \
-	        false; \
-	      fi; \
-	      libpath=$$dir/lib; lib=qt; osdir=""; \
-	      $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
-	        osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
-	      test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
-	      test -f $$libpath/libqt-mt.so && lib=qt-mt; \
-	      cflags="-I$$dir/include"; \
-	      libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
-	      moc="$$dir/bin/moc"; \
-	    fi; \
-	    if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
-	      echo "*"; \
-	      echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
-	      echo "*"; \
-	      moc="/usr/bin/moc"; \
-	    fi; \
-	else \
-	  cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
-	  libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
-	  moc="\$$(shell pkg-config QtCore --variable=moc_location)"; \
-	  [ -n "$$moc" ] || moc="\$$(shell pkg-config QtCore --variable=prefix)/bin/moc"; \
-	fi; \
-	echo "KC_QT_CFLAGS=$$cflags" > $@; \
-	echo "KC_QT_LIBS=$$libs" >> $@; \
-	echo "KC_QT_MOC=$$moc" >> $@
-endif
-
-$(obj)/gconf.o: $(obj)/.tmp_gtkcheck
-
-ifeq ($(gconf-target),1)
--include $(obj)/.tmp_gtkcheck
-
-# GTK needs some extra effort, too...
-$(obj)/.tmp_gtkcheck:
-	@if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then		\
-		if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then			\
-			touch $@;								\
-		else									\
-			echo >&2 "*"; 							\
-			echo >&2 "* GTK+ is present but version >= 2.0.0 is required.";	\
-			echo >&2 "*";							\
-			false;								\
-		fi									\
-	else										\
-		echo >&2 "*"; 								\
-		echo >&2 "* Unable to find the GTK+ installation. Please make sure that"; 	\
-		echo >&2 "* the GTK+ 2.0 development package is correctly installed..."; 	\
-		echo >&2 "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; 		\
-		echo >&2 "*"; 								\
-		false;									\
-	fi
-endif
-
-$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
-
-$(obj)/qconf.o: $(obj)/qconf.moc
-
-$(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
-	$(KC_QT_MOC) -i $< -o $@
-
-# Extract gconf menu items for I18N support
-$(obj)/gconf.glade.h: $(obj)/gconf.glade
-	$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
-	$(obj)/gconf.glade
-
diff --git a/support/kconfig/Makefile.br b/support/kconfig/Makefile.br
deleted file mode 100644
index 41c5ce16..00000000
--- a/support/kconfig/Makefile.br
+++ /dev/null
@@ -1,53 +0,0 @@
-src := .
-top_srcdir=../../
-top_builddir=../../
-srctree := .
-obj ?= .
-
-include Makefile
-#HOSTCFLAGS+=-Dinline="" -include foo.h
--include $(obj)/.depend
-$(obj)/.depend: $(wildcard *.h *.c)
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) -MM *.c > $@ 2>/dev/null || :
-
-__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
-host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
-host-cmulti := $(foreach m,$(__hostprogs),\
-           $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
-host-cxxmulti := $(foreach m,$(__hostprogs),\
-           $(if $($(m)-cxxobjs),$(m),$(if $($(m)-objs),)))
-host-cobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-objs))))
-host-cxxobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-cxxobjs))))
-
-HOST_EXTRACFLAGS += -I$(obj) -DCONFIG_=\"\"
-
-$(host-csingle): %: %.c
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $< -o $(obj)/$@
-
-$(host-cmulti): %: $(host-cobjs) $(host-cshlib)
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-
-$(host-cxxmulti): %: $(host-cxxobjs) $(host-cobjs) $(host-cshlib)
-	$(HOSTCXX) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs) $($(@F)-cxxobjs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-
-$(obj)/%.o: %.c
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-
-$(obj)/%.o: $(obj)/%.c
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-
-$(obj)/%.o: %.cc
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$(@F)) -c $< -o $@
-
-$(obj)/%:: $(src)/%_shipped
-	$(Q)cat $< > $@
-
-clean:
-	$(Q)rm -f $(addprefix $(obj)/,$(clean-files))
-distclean: clean
-	$(Q)rm -f $(addprefix $(obj)/,$(lxdialog) $(conf-objs) $(mconf-objs) $(kxgettext-objs) \
-		$(hostprogs-y) $(qconf-cxxobjs) $(qconf-objs) $(gconf-objs) \
-		mconf .depend)
-
-FORCE:
-.PHONY: FORCE clean distclean
diff --git a/support/kconfig/POTFILES.in b/support/kconfig/POTFILES.in
deleted file mode 100644
index 96745739..00000000
--- a/support/kconfig/POTFILES.in
+++ /dev/null
@@ -1,12 +0,0 @@
-scripts/kconfig/lxdialog/checklist.c
-scripts/kconfig/lxdialog/inputbox.c
-scripts/kconfig/lxdialog/menubox.c
-scripts/kconfig/lxdialog/textbox.c
-scripts/kconfig/lxdialog/util.c
-scripts/kconfig/lxdialog/yesno.c
-scripts/kconfig/mconf.c
-scripts/kconfig/conf.c
-scripts/kconfig/confdata.c
-scripts/kconfig/gconf.c
-scripts/kconfig/gconf.glade.h
-scripts/kconfig/qconf.cc
diff --git a/support/kconfig/README.unikraft b/support/kconfig/README.unikraft
deleted file mode 100644
index ee8a31fc..00000000
--- a/support/kconfig/README.unikraft
+++ /dev/null
@@ -1,21 +0,0 @@
-This is a copy of the kconfig code in the kernel (currently 3.13-rc5) tweaked
-to suit Unikraft. It was retrieved and modified from buildroot 2016.05-git
-(c0293c3).
-
-To update (from linux):
-	cp -r /usr/src/linux/scripts/kconfig support/kconfig.new
-	cd support/kconfig.new
-	cp -a ../kconfig/patches ../kconfig/README.unikraft ../kconfig/.gitignore .
-	quilt push -a
-	# Fix any conflict
-	cd ..
-	rm -rf kconfig
-	mv kconfig.new kconfig
-
-Then verify the toplevel targets work:
-	config
-	defconfig
-	menuconfig
-	xconfig
-	gconfig
-	oldconfig
diff --git a/support/kconfig/check.sh b/support/kconfig/check.sh
deleted file mode 100755
index 854d9c7c..00000000
--- a/support/kconfig/check.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-# Needed for systems without gettext
-$* -x c -o /dev/null - > /dev/null 2>&1 << EOF
-#include <libintl.h>
-int main()
-{
-	gettext("");
-	return 0;
-}
-EOF
-if [ ! "$?" -eq "0"  ]; then
-	echo -DKBUILD_NO_NLS;
-fi
-
diff --git a/support/kconfig/conf.c b/support/kconfig/conf.c
deleted file mode 100644
index 553fc76d..00000000
--- a/support/kconfig/conf.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <locale.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <errno.h>
-
-#include "lkc.h"
-
-static void conf(struct menu *menu);
-static void check_conf(struct menu *menu);
-static void xfgets(char *str, int size, FILE *in);
-
-enum input_mode {
-	oldaskconfig,
-	silentoldconfig,
-	oldconfig,
-	allnoconfig,
-	allyesconfig,
-	allmodconfig,
-	alldefconfig,
-	randconfig,
-	defconfig,
-	savedefconfig,
-	listnewconfig,
-	olddefconfig,
-} input_mode = oldaskconfig;
-
-static int indent = 1;
-static int tty_stdio;
-static int valid_stdin = 1;
-static int sync_kconfig;
-static int conf_cnt;
-static char line[128];
-static struct menu *rootEntry;
-
-static void print_help(struct menu *menu)
-{
-	struct gstr help = str_new();
-
-	menu_get_ext_help(menu, &help);
-
-	printf("\n%s\n", str_get(&help));
-	str_free(&help);
-}
-
-static void strip(char *str)
-{
-	char *p = str;
-	int l;
-
-	while ((isspace(*p)))
-		p++;
-	l = strlen(p);
-	if (p != str)
-		memmove(str, p, l + 1);
-	if (!l)
-		return;
-	p = str + l - 1;
-	while ((isspace(*p)))
-		*p-- = 0;
-}
-
-static void check_stdin(void)
-{
-	if (!valid_stdin) {
-		printf(_("aborted!\n\n"));
-		printf(_("Console input/output is redirected. "));
-		printf(_("Run 'make oldconfig' to update configuration.\n\n"));
-		exit(1);
-	}
-}
-
-static int conf_askvalue(struct symbol *sym, const char *def)
-{
-	enum symbol_type type = sym_get_type(sym);
-
-	if (!sym_has_value(sym))
-		printf(_("(NEW) "));
-
-	line[0] = '\n';
-	line[1] = 0;
-
-	if (!sym_is_changable(sym)) {
-		printf("%s\n", def);
-		line[0] = '\n';
-		line[1] = 0;
-		return 0;
-	}
-
-	switch (input_mode) {
-	case oldconfig:
-	case silentoldconfig:
-		if (sym_has_value(sym)) {
-			printf("%s\n", def);
-			return 0;
-		}
-		check_stdin();
-		/* fall through */
-	case oldaskconfig:
-		fflush(stdout);
-		xfgets(line, 128, stdin);
-		if (!tty_stdio)
-			printf("\n");
-		return 1;
-	default:
-		break;
-	}
-
-	switch (type) {
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		printf("%s\n", def);
-		return 1;
-	default:
-		;
-	}
-	printf("%s", line);
-	return 1;
-}
-
-static int conf_string(struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	const char *def;
-
-	while (1) {
-		printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
-		printf("(%s) ", sym->name);
-		def = sym_get_string_value(sym);
-		if (sym_get_string_value(sym))
-			printf("[%s] ", def);
-		if (!conf_askvalue(sym, def))
-			return 0;
-		switch (line[0]) {
-		case '\n':
-			break;
-		case '?':
-			/* print help */
-			if (line[1] == '\n') {
-				print_help(menu);
-				def = NULL;
-				break;
-			}
-			/* fall through */
-		default:
-			line[strlen(line)-1] = 0;
-			def = line;
-		}
-		if (def && sym_set_string_value(sym, def))
-			return 0;
-	}
-}
-
-static int conf_sym(struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	tristate oldval, newval;
-
-	while (1) {
-		printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
-		if (sym->name)
-			printf("(%s) ", sym->name);
-		putchar('[');
-		oldval = sym_get_tristate_value(sym);
-		switch (oldval) {
-		case no:
-			putchar('N');
-			break;
-		case mod:
-			putchar('M');
-			break;
-		case yes:
-			putchar('Y');
-			break;
-		}
-		if (oldval != no && sym_tristate_within_range(sym, no))
-			printf("/n");
-		if (oldval != mod && sym_tristate_within_range(sym, mod))
-			printf("/m");
-		if (oldval != yes && sym_tristate_within_range(sym, yes))
-			printf("/y");
-		if (menu_has_help(menu))
-			printf("/?");
-		printf("] ");
-		if (!conf_askvalue(sym, sym_get_string_value(sym)))
-			return 0;
-		strip(line);
-
-		switch (line[0]) {
-		case 'n':
-		case 'N':
-			newval = no;
-			if (!line[1] || !strcmp(&line[1], "o"))
-				break;
-			continue;
-		case 'm':
-		case 'M':
-			newval = mod;
-			if (!line[1])
-				break;
-			continue;
-		case 'y':
-		case 'Y':
-			newval = yes;
-			if (!line[1] || !strcmp(&line[1], "es"))
-				break;
-			continue;
-		case 0:
-			newval = oldval;
-			break;
-		case '?':
-			goto help;
-		default:
-			continue;
-		}
-		if (sym_set_tristate_value(sym, newval))
-			return 0;
-help:
-		print_help(menu);
-	}
-}
-
-static int conf_choice(struct menu *menu)
-{
-	struct symbol *sym, *def_sym;
-	struct menu *child;
-	bool is_new;
-
-	sym = menu->sym;
-	is_new = !sym_has_value(sym);
-	if (sym_is_changable(sym)) {
-		conf_sym(menu);
-		sym_calc_value(sym);
-		switch (sym_get_tristate_value(sym)) {
-		case no:
-			return 1;
-		case mod:
-			return 0;
-		case yes:
-			break;
-		}
-	} else {
-		switch (sym_get_tristate_value(sym)) {
-		case no:
-			return 1;
-		case mod:
-			printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
-			return 0;
-		case yes:
-			break;
-		}
-	}
-
-	while (1) {
-		int cnt, def;
-
-		printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
-		def_sym = sym_get_choice_value(sym);
-		cnt = def = 0;
-		line[0] = 0;
-		for (child = menu->list; child; child = child->next) {
-			if (!menu_is_visible(child))
-				continue;
-			if (!child->sym) {
-				printf("%*c %s\n", indent, '*', _(menu_get_prompt(child)));
-				continue;
-			}
-			cnt++;
-			if (child->sym == def_sym) {
-				def = cnt;
-				printf("%*c", indent, '>');
-			} else
-				printf("%*c", indent, ' ');
-			printf(" %d. %s", cnt, _(menu_get_prompt(child)));
-			if (child->sym->name)
-				printf(" (%s)", child->sym->name);
-			if (!sym_has_value(child->sym))
-				printf(_(" (NEW)"));
-			printf("\n");
-		}
-		printf(_("%*schoice"), indent - 1, "");
-		if (cnt == 1) {
-			printf("[1]: 1\n");
-			goto conf_childs;
-		}
-		printf("[1-%d", cnt);
-		if (menu_has_help(menu))
-			printf("?");
-		printf("]: ");
-		switch (input_mode) {
-		case oldconfig:
-		case silentoldconfig:
-			if (!is_new) {
-				cnt = def;
-				printf("%d\n", cnt);
-				break;
-			}
-			check_stdin();
-			/* fall through */
-		case oldaskconfig:
-			fflush(stdout);
-			xfgets(line, 128, stdin);
-			strip(line);
-			if (line[0] == '?') {
-				print_help(menu);
-				continue;
-			}
-			if (!line[0])
-				cnt = def;
-			else if (isdigit(line[0]))
-				cnt = atoi(line);
-			else
-				continue;
-			break;
-		default:
-			break;
-		}
-
-	conf_childs:
-		for (child = menu->list; child; child = child->next) {
-			if (!child->sym || !menu_is_visible(child))
-				continue;
-			if (!--cnt)
-				break;
-		}
-		if (!child)
-			continue;
-		if (line[0] && line[strlen(line) - 1] == '?') {
-			print_help(child);
-			continue;
-		}
-		sym_set_choice_value(sym, child->sym);
-		for (child = child->list; child; child = child->next) {
-			indent += 2;
-			conf(child);
-			indent -= 2;
-		}
-		return 1;
-	}
-}
-
-static void conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-
-	if (!menu_is_visible(menu))
-		return;
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	if (prop) {
-		const char *prompt;
-
-		switch (prop->type) {
-		case P_MENU:
-			if ((input_mode == silentoldconfig ||
-			     input_mode == listnewconfig ||
-			     input_mode == olddefconfig) &&
-			    rootEntry != menu) {
-				check_conf(menu);
-				return;
-			}
-			/* fall through */
-		case P_COMMENT:
-			prompt = menu_get_prompt(menu);
-			if (prompt)
-				printf("%*c\n%*c %s\n%*c\n",
-					indent, '*',
-					indent, '*', _(prompt),
-					indent, '*');
-		default:
-			;
-		}
-	}
-
-	if (!sym)
-		goto conf_childs;
-
-	if (sym_is_choice(sym)) {
-		conf_choice(menu);
-		if (sym->curr.tri != mod)
-			return;
-		goto conf_childs;
-	}
-
-	switch (sym->type) {
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		conf_string(menu);
-		break;
-	default:
-		conf_sym(menu);
-		break;
-	}
-
-conf_childs:
-	if (sym)
-		indent += 2;
-	for (child = menu->list; child; child = child->next)
-		conf(child);
-	if (sym)
-		indent -= 2;
-}
-
-static void check_conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct menu *child;
-
-	if (!menu_is_visible(menu))
-		return;
-
-	sym = menu->sym;
-	if (sym && !sym_has_value(sym)) {
-		if (sym_is_changable(sym) ||
-		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
-			if (input_mode == listnewconfig) {
-				if (sym->name && !sym_is_choice_value(sym)) {
-					printf("%s%s\n", CONFIG_, sym->name);
-				}
-			} else if (input_mode != olddefconfig) {
-				if (!conf_cnt++)
-					printf(_("*\n* Restart config...\n*\n"));
-				rootEntry = menu_get_parent_menu(menu);
-				conf(rootEntry);
-			}
-		}
-	}
-
-	for (child = menu->list; child; child = child->next)
-		check_conf(child);
-}
-
-static struct option long_opts[] = {
-	{"oldaskconfig",    no_argument,       NULL, oldaskconfig},
-	{"oldconfig",       no_argument,       NULL, oldconfig},
-	{"silentoldconfig", no_argument,       NULL, silentoldconfig},
-	{"defconfig",       optional_argument, NULL, defconfig},
-	{"savedefconfig",   required_argument, NULL, savedefconfig},
-	{"allnoconfig",     no_argument,       NULL, allnoconfig},
-	{"allyesconfig",    no_argument,       NULL, allyesconfig},
-	{"allmodconfig",    no_argument,       NULL, allmodconfig},
-	{"alldefconfig",    no_argument,       NULL, alldefconfig},
-	{"randconfig",      no_argument,       NULL, randconfig},
-	{"listnewconfig",   no_argument,       NULL, listnewconfig},
-	{"olddefconfig",    no_argument,       NULL, olddefconfig},
-	/*
-	 * oldnoconfig is an alias of olddefconfig, because people already
-	 * are dependent on its behavior(sets new symbols to their default
-	 * value but not 'n') with the counter-intuitive name.
-	 */
-	{"oldnoconfig",     no_argument,       NULL, olddefconfig},
-	{NULL, 0, NULL, 0}
-};
-
-static void conf_usage(const char *progname)
-{
-
-	printf("Usage: %s [option] <kconfig-file>\n", progname);
-	printf("[option] is _one_ of the following:\n");
-	printf("  --listnewconfig         List new options\n");
-	printf("  --oldaskconfig          Start a new configuration using a line-oriented program\n");
-	printf("  --oldconfig             Update a configuration using a provided .config as base\n");
-	printf("  --silentoldconfig       Same as oldconfig, but quietly, additionally update deps\n");
-	printf("  --olddefconfig          Same as silentoldconfig but sets new symbols to their default value\n");
-	printf("  --oldnoconfig           An alias of olddefconfig\n");
-	printf("  --defconfig <file>      New config with default defined in <file>\n");
-	printf("  --savedefconfig <file>  Save the minimal current configuration to <file>\n");
-	printf("  --allnoconfig           New config where all options are answered with no\n");
-	printf("  --allyesconfig          New config where all options are answered with yes\n");
-	printf("  --allmodconfig          New config where all options are answered with mod\n");
-	printf("  --alldefconfig          New config with all symbols set to default\n");
-	printf("  --randconfig            New config with random answer to all options\n");
-}
-
-int main(int ac, char **av)
-{
-	const char *progname = av[0];
-	int opt;
-	const char *name, *defconfig_file = NULL /* gcc uninit */;
-	struct stat tmpstat;
-
-	setlocale(LC_ALL, "");
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	tty_stdio = isatty(0) && isatty(1) && isatty(2);
-
-	while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
-		input_mode = (enum input_mode)opt;
-		switch (opt) {
-		case silentoldconfig:
-			sync_kconfig = 1;
-			break;
-		case defconfig:
-		case savedefconfig:
-			defconfig_file = optarg;
-			break;
-		case randconfig:
-		{
-			struct timeval now;
-			unsigned int seed;
-			char *seed_env;
-
-			/*
-			 * Use microseconds derived seed,
-			 * compensate for systems where it may be zero
-			 */
-			gettimeofday(&now, NULL);
-			seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
-
-			seed_env = getenv("KCONFIG_SEED");
-			if( seed_env && *seed_env ) {
-				char *endp;
-				int tmp = (int)strtol(seed_env, &endp, 0);
-				if (*endp == '\0') {
-					seed = tmp;
-				}
-			}
-			fprintf( stderr, "KCONFIG_SEED=0x%X\n", seed );
-			srand(seed);
-			break;
-		}
-		case oldaskconfig:
-		case oldconfig:
-		case allnoconfig:
-		case allyesconfig:
-		case allmodconfig:
-		case alldefconfig:
-		case listnewconfig:
-		case olddefconfig:
-			break;
-		case '?':
-			conf_usage(progname);
-			exit(1);
-			break;
-		}
-	}
-	if (ac == optind) {
-		printf(_("%s: Kconfig file missing\n"), av[0]);
-		conf_usage(progname);
-		exit(1);
-	}
-	name = av[optind];
-	conf_parse(name);
-	if (sync_kconfig) {
-		name = conf_get_configname();
-		if (stat(name, &tmpstat)) {
-			fprintf(stderr, _("***\n"
-				"*** Configuration file \"%s\" not found!\n"
-				"***\n"
-				"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
-				"*** \"make menuconfig\" or \"make xconfig\").\n"
-				"***\n"), name);
-			exit(1);
-		}
-	}
-
-	switch (input_mode) {
-	case defconfig:
-		if (!defconfig_file)
-			defconfig_file = conf_get_default_confname();
-		if (conf_read(defconfig_file)) {
-			printf(_("***\n"
-				"*** Can't find default configuration \"%s\"!\n"
-				"***\n"), defconfig_file);
-			exit(1);
-		}
-		break;
-	case savedefconfig:
-	case silentoldconfig:
-	case oldaskconfig:
-	case oldconfig:
-	case listnewconfig:
-	case olddefconfig:
-		conf_read(NULL);
-		break;
-	case allnoconfig:
-	case allyesconfig:
-	case allmodconfig:
-	case alldefconfig:
-	case randconfig:
-		name = getenv("KCONFIG_ALLCONFIG");
-		if (!name)
-			break;
-		if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) {
-			if (conf_read_simple(name, S_DEF_USER)) {
-				fprintf(stderr,
-					_("*** Can't read seed configuration \"%s\"!\n"),
-					name);
-				exit(1);
-			}
-			break;
-		}
-		switch (input_mode) {
-		case allnoconfig:	name = "allno.config"; break;
-		case allyesconfig:	name = "allyes.config"; break;
-		case allmodconfig:	name = "allmod.config"; break;
-		case alldefconfig:	name = "alldef.config"; break;
-		case randconfig:	name = "allrandom.config"; break;
-		default: break;
-		}
-		if (conf_read_simple(name, S_DEF_USER) &&
-		    conf_read_simple("all.config", S_DEF_USER)) {
-			fprintf(stderr,
-				_("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"),
-				name);
-			exit(1);
-		}
-		break;
-	default:
-		break;
-	}
-
-	if (sync_kconfig) {
-		if (conf_get_changed()) {
-			name = getenv("KCONFIG_NOSILENTUPDATE");
-			if (name && *name) {
-				fprintf(stderr,
-					_("\n*** The configuration requires explicit update.\n\n"));
-				return 1;
-			}
-		}
-		valid_stdin = tty_stdio;
-	}
-
-	switch (input_mode) {
-	case allnoconfig:
-		conf_set_all_new_symbols(def_no);
-		break;
-	case allyesconfig:
-		conf_set_all_new_symbols(def_yes);
-		break;
-	case allmodconfig:
-		conf_set_all_new_symbols(def_mod);
-		break;
-	case alldefconfig:
-		conf_set_all_new_symbols(def_default);
-		break;
-	case randconfig:
-		/* Really nothing to do in this loop */
-		while (conf_set_all_new_symbols(def_random)) ;
-		break;
-	case defconfig:
-		conf_set_all_new_symbols(def_default);
-		break;
-	case savedefconfig:
-		break;
-	case oldaskconfig:
-		rootEntry = &rootmenu;
-		conf(&rootmenu);
-		input_mode = silentoldconfig;
-		/* fall through */
-	case oldconfig:
-	case listnewconfig:
-	case olddefconfig:
-	case silentoldconfig:
-		/* Update until a loop caused no more changes */
-		do {
-			conf_cnt = 0;
-			check_conf(&rootmenu);
-		} while (conf_cnt &&
-			 (input_mode != listnewconfig &&
-			  input_mode != olddefconfig));
-		break;
-	}
-
-	if (sync_kconfig) {
-		/* silentoldconfig is used during the build so we shall update autoconf.
-		 * All other commands are only used to generate a config.
-		 */
-		if (conf_get_changed() && conf_write(NULL)) {
-			fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
-			exit(1);
-		}
-		if (conf_write_autoconf()) {
-			fprintf(stderr, _("\n*** Error during update of the configuration.\n\n"));
-			return 1;
-		}
-	} else if (input_mode == savedefconfig) {
-		if (conf_write_defconfig(defconfig_file)) {
-			fprintf(stderr, _("n*** Error while saving defconfig to: %s\n\n"),
-			        defconfig_file);
-			return 1;
-		}
-	} else if (input_mode != listnewconfig) {
-		if (conf_write(NULL)) {
-			fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
-			exit(1);
-		}
-	}
-	return 0;
-}
-
-/*
- * Helper function to facilitate fgets() by Jean Sacren.
- */
-void xfgets(char *str, int size, FILE *in)
-{
-	if (fgets(str, size, in) == NULL)
-		fprintf(stderr, "\nError in reading or end of file.\n");
-}
diff --git a/support/kconfig/confdata.c b/support/kconfig/confdata.c
deleted file mode 100644
index 4d8c9ac7..00000000
--- a/support/kconfig/confdata.c
+++ /dev/null
@@ -1,1279 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <sys/stat.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <libgen.h>
-
-#include "lkc.h"
-
-static void conf_warning(const char *fmt, ...)
-	__attribute__ ((format (printf, 1, 2)));
-
-static void conf_message(const char *fmt, ...)
-	__attribute__ ((format (printf, 1, 2)));
-
-static const char *conf_filename;
-static int conf_lineno, conf_warnings, conf_unsaved;
-
-const char conf_defname[] = ".defconfig";
-
-static void conf_warning(const char *fmt, ...)
-{
-	va_list ap;
-	va_start(ap, fmt);
-	fprintf(stderr, "%s:%d:warning: ", conf_filename, conf_lineno);
-	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-	conf_warnings++;
-}
-
-static void conf_default_message_callback(const char *fmt, va_list ap)
-{
-	printf("#\n# ");
-	vprintf(fmt, ap);
-	printf("\n#\n");
-}
-
-static void (*conf_message_callback) (const char *fmt, va_list ap) =
-	conf_default_message_callback;
-void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap))
-{
-	conf_message_callback = fn;
-}
-
-static void conf_message(const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-	if (conf_message_callback)
-		conf_message_callback(fmt, ap);
-}
-
-const char *conf_get_configname(void)
-{
-	char *name = getenv("BR2_CONFIG");
-
-	return name ? name : ".config";
-}
-
-const char *conf_get_autoconfig_name(void)
-{
-	return getenv("KCONFIG_AUTOCONFIG");
-}
-
-static char *conf_expand_value(const char *in)
-{
-	struct symbol *sym;
-	const char *src;
-	static char res_value[SYMBOL_MAXLENGTH];
-	char *dst, name[SYMBOL_MAXLENGTH];
-
-	res_value[0] = 0;
-	dst = name;
-	while ((src = strchr(in, '$'))) {
-		strncat(res_value, in, src - in);
-		src++;
-		dst = name;
-		while (isalnum(*src) || *src == '_')
-			*dst++ = *src++;
-		*dst = 0;
-		sym = sym_lookup(name, 0);
-		sym_calc_value(sym);
-		strcat(res_value, sym_get_string_value(sym));
-		in = src;
-	}
-	strcat(res_value, in);
-
-	return res_value;
-}
-
-char *conf_get_default_confname(void)
-{
-	struct stat buf;
-	static char fullname[PATH_MAX+1];
-	char *env, *name;
-
-	name = conf_expand_value(conf_defname);
-	env = getenv(SRCTREE);
-	if (env) {
-		sprintf(fullname, "%s/%s", env, name);
-		if (!stat(fullname, &buf))
-			return fullname;
-	}
-	return name;
-}
-
-static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
-{
-	char *p2;
-
-	switch (sym->type) {
-	case S_TRISTATE:
-		if (p[0] == 'm') {
-			sym->def[def].tri = mod;
-			sym->flags |= def_flags;
-			break;
-		}
-		/* fall through */
-	case S_BOOLEAN:
-		if (p[0] == 'y') {
-			sym->def[def].tri = yes;
-			sym->flags |= def_flags;
-			break;
-		}
-		if (p[0] == 'n') {
-			sym->def[def].tri = no;
-			sym->flags |= def_flags;
-			break;
-		}
-		if (def != S_DEF_AUTO)
-			conf_warning("symbol value '%s' invalid for %s",
-				     p, sym->name);
-		return 1;
-	case S_OTHER:
-		if (*p != '"') {
-			for (p2 = p; *p2 && !isspace(*p2); p2++)
-				;
-			sym->type = S_STRING;
-			goto done;
-		}
-		/* fall through */
-	case S_STRING:
-		if (*p++ != '"')
-			break;
-		for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
-			if (*p2 == '"') {
-				*p2 = 0;
-				break;
-			}
-			memmove(p2, p2 + 1, strlen(p2));
-		}
-		if (!p2) {
-			if (def != S_DEF_AUTO)
-				conf_warning("invalid string found");
-			return 1;
-		}
-		/* fall through */
-	case S_INT:
-	case S_HEX:
-	done:
-		if (sym_string_valid(sym, p)) {
-			sym->def[def].val = strdup(p);
-			sym->flags |= def_flags;
-		} else {
-			if (def != S_DEF_AUTO)
-				conf_warning("symbol value '%s' invalid for %s",
-					     p, sym->name);
-			return 1;
-		}
-		break;
-	default:
-		;
-	}
-	return 0;
-}
-
-#define LINE_GROWTH 16
-static int add_byte(int c, char **lineptr, size_t slen, size_t *n)
-{
-	char *nline;
-	size_t new_size = slen + 1;
-	if (new_size > *n) {
-		new_size += LINE_GROWTH - 1;
-		new_size *= 2;
-		nline = realloc(*lineptr, new_size);
-		if (!nline)
-			return -1;
-
-		*lineptr = nline;
-		*n = new_size;
-	}
-
-	(*lineptr)[slen] = c;
-
-	return 0;
-}
-
-static ssize_t compat_getline(char **lineptr, size_t *n, FILE *stream)
-{
-	char *line = *lineptr;
-	size_t slen = 0;
-
-	for (;;) {
-		int c = getc(stream);
-
-		switch (c) {
-		case '\n':
-			if (add_byte(c, &line, slen, n) < 0)
-				goto e_out;
-			slen++;
-			/* fall through */
-		case EOF:
-			if (add_byte('\0', &line, slen, n) < 0)
-				goto e_out;
-			*lineptr = line;
-			if (slen == 0)
-				return -1;
-			return slen;
-		default:
-			if (add_byte(c, &line, slen, n) < 0)
-				goto e_out;
-			slen++;
-		}
-	}
-
-e_out:
-	line[slen-1] = '\0';
-	*lineptr = line;
-	return -1;
-}
-
-int conf_read_simple(const char *name, int def)
-{
-	FILE *in = NULL;
-	char   *line = NULL;
-	size_t  line_asize = 0;
-	char *p, *p2;
-	struct symbol *sym;
-	int i, def_flags;
-
-	if (name) {
-		in = zconf_fopen(name);
-	} else {
-		struct property *prop;
-
-		name = conf_get_configname();
-		in = zconf_fopen(name);
-		if (in)
-			goto load;
-		sym_add_change_count(1);
-		if (!sym_defconfig_list) {
-			if (modules_sym)
-				sym_calc_value(modules_sym);
-			return 1;
-		}
-
-		for_all_defaults(sym_defconfig_list, prop) {
-			if (expr_calc_value(prop->visible.expr) == no ||
-			    prop->expr->type != E_SYMBOL)
-				continue;
-			name = conf_expand_value(prop->expr->left.sym->name);
-			in = zconf_fopen(name);
-			if (in) {
-				conf_message(_("using defaults found in %s"),
-					 name);
-				goto load;
-			}
-		}
-	}
-	if (!in)
-		return 1;
-
-load:
-	conf_filename = name;
-	conf_lineno = 0;
-	conf_warnings = 0;
-	conf_unsaved = 0;
-
-	def_flags = SYMBOL_DEF << def;
-	for_all_symbols(i, sym) {
-		sym->flags |= SYMBOL_CHANGED;
-		sym->flags &= ~(def_flags|SYMBOL_VALID);
-		if (sym_is_choice(sym))
-			sym->flags |= def_flags;
-		switch (sym->type) {
-		case S_INT:
-		case S_HEX:
-		case S_STRING:
-			if (sym->def[def].val)
-				free(sym->def[def].val);
-			/* fall through */
-		default:
-			sym->def[def].val = NULL;
-			sym->def[def].tri = no;
-		}
-	}
-
-	while (compat_getline(&line, &line_asize, in) != -1) {
-		conf_lineno++;
-		sym = NULL;
-		if (line[0] == '#') {
-			if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
-				continue;
-			p = strchr(line + 2 + strlen(CONFIG_), ' ');
-			if (!p)
-				continue;
-			*p++ = 0;
-			if (strncmp(p, "is not set", 10))
-				continue;
-			if (def == S_DEF_USER) {
-				sym = sym_find(line + 2 + strlen(CONFIG_));
-				if (!sym) {
-					sym_add_change_count(1);
-					goto setsym;
-				}
-			} else {
-				sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
-				if (sym->type == S_UNKNOWN)
-					sym->type = S_BOOLEAN;
-			}
-			if (sym->flags & def_flags) {
-				conf_warning("override: reassigning to symbol %s", sym->name);
-			}
-			switch (sym->type) {
-			case S_BOOLEAN:
-			case S_TRISTATE:
-				sym->def[def].tri = no;
-				sym->flags |= def_flags;
-				break;
-			default:
-				;
-			}
-		} else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) {
-			p = strchr(line + strlen(CONFIG_), '=');
-			if (!p)
-				continue;
-			*p++ = 0;
-			p2 = strchr(p, '\n');
-			if (p2) {
-				*p2-- = 0;
-				if (*p2 == '\r')
-					*p2 = 0;
-			}
-			if (def == S_DEF_USER) {
-				sym = sym_find(line + strlen(CONFIG_));
-				if (!sym) {
-					sym_add_change_count(1);
-					goto setsym;
-				}
-			} else {
-				sym = sym_lookup(line + strlen(CONFIG_), 0);
-				if (sym->type == S_UNKNOWN)
-					sym->type = S_OTHER;
-			}
-			if (sym->flags & def_flags) {
-				conf_warning("override: reassigning to symbol %s", sym->name);
-			}
-			if (conf_set_sym_val(sym, def, def_flags, p))
-				continue;
-		} else {
-			if (line[0] != '\r' && line[0] != '\n')
-				conf_warning("unexpected data");
-			continue;
-		}
-setsym:
-		if (sym && sym_is_choice_value(sym)) {
-			struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
-			switch (sym->def[def].tri) {
-			case no:
-				break;
-			case mod:
-				if (cs->def[def].tri == yes) {
-					conf_warning("%s creates inconsistent choice state", sym->name);
-					cs->flags &= ~def_flags;
-				}
-				break;
-			case yes:
-				if (cs->def[def].tri != no)
-					conf_warning("override: %s changes choice state", sym->name);
-				cs->def[def].val = sym;
-				break;
-			}
-			cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri);
-		}
-	}
-	free(line);
-	fclose(in);
-
-	if (modules_sym)
-		sym_calc_value(modules_sym);
-	return 0;
-}
-
-int conf_read(const char *name)
-{
-	struct symbol *sym;
-	int i;
-
-	sym_set_change_count(0);
-
-	if (conf_read_simple(name, S_DEF_USER))
-		return 1;
-
-	for_all_symbols(i, sym) {
-		sym_calc_value(sym);
-		if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
-			continue;
-		if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
-			/* check that calculated value agrees with saved value */
-			switch (sym->type) {
-			case S_BOOLEAN:
-			case S_TRISTATE:
-				if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
-					break;
-				if (!sym_is_choice(sym))
-					continue;
-				/* fall through */
-			default:
-				if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
-					continue;
-				break;
-			}
-		} else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
-			/* no previous value and not saved */
-			continue;
-		conf_unsaved++;
-		/* maybe print value in verbose mode... */
-	}
-
-	for_all_symbols(i, sym) {
-		if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
-			/* Reset values of generates values, so they'll appear
-			 * as new, if they should become visible, but that
-			 * doesn't quite work if the Kconfig and the saved
-			 * configuration disagree.
-			 */
-			if (sym->visible == no && !conf_unsaved)
-				sym->flags &= ~SYMBOL_DEF_USER;
-			switch (sym->type) {
-			case S_STRING:
-			case S_INT:
-			case S_HEX:
-				/* Reset a string value if it's out of range */
-				if (sym_string_within_range(sym, sym->def[S_DEF_USER].val))
-					break;
-				sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER);
-				conf_unsaved++;
-				break;
-			default:
-				break;
-			}
-		}
-	}
-
-	sym_add_change_count(conf_warnings || conf_unsaved);
-
-	return 0;
-}
-
-/*
- * Kconfig configuration printer
- *
- * This printer is used when generating the resulting configuration after
- * kconfig invocation and `defconfig' files. Unset symbol might be omitted by
- * passing a non-NULL argument to the printer.
- *
- */
-static void
-kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		if (*value == 'n') {
-			bool skip_unset = (arg != NULL);
-
-			if (!skip_unset)
-				fprintf(fp, "# %s%s is not set\n",
-				    CONFIG_, sym->name);
-			return;
-		}
-		break;
-	default:
-		break;
-	}
-
-	fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value);
-}
-
-static void
-kconfig_print_comment(FILE *fp, const char *value, void *arg)
-{
-	const char *p = value;
-	size_t l;
-
-	for (;;) {
-		l = strcspn(p, "\n");
-		fprintf(fp, "#");
-		if (l) {
-			fprintf(fp, " ");
-			xfwrite(p, l, 1, fp);
-			p += l;
-		}
-		fprintf(fp, "\n");
-		if (*p++ == '\0')
-			break;
-	}
-}
-
-static struct conf_printer kconfig_printer_cb =
-{
-	.print_symbol = kconfig_print_symbol,
-	.print_comment = kconfig_print_comment,
-};
-
-/*
- * Header printer
- *
- * This printer is used when generating the `include/generated/autoconf.h' file.
- */
-static void
-header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE: {
-		const char *suffix = "";
-
-		switch (*value) {
-		case 'n':
-			break;
-		case 'm':
-			suffix = "_MODULE";
-			/* fall through */
-		default:
-			fprintf(fp, "#define %s%s%s 1\n",
-			    CONFIG_, sym->name, suffix);
-		}
-		break;
-	}
-	case S_HEX: {
-		const char *prefix = "";
-
-		if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
-			prefix = "0x";
-		fprintf(fp, "#define %s%s %s%s\n",
-		    CONFIG_, sym->name, prefix, value);
-		break;
-	}
-	case S_STRING:
-	case S_INT:
-		fprintf(fp, "#define %s%s %s\n",
-		    CONFIG_, sym->name, value);
-		break;
-	default:
-		break;
-	}
-
-}
-
-static void
-header_print_comment(FILE *fp, const char *value, void *arg)
-{
-	const char *p = value;
-	size_t l;
-
-	fprintf(fp, "/*\n");
-	for (;;) {
-		l = strcspn(p, "\n");
-		fprintf(fp, " *");
-		if (l) {
-			fprintf(fp, " ");
-			xfwrite(p, l, 1, fp);
-			p += l;
-		}
-		fprintf(fp, "\n");
-		if (*p++ == '\0')
-			break;
-	}
-	fprintf(fp, " */\n");
-}
-
-static struct conf_printer header_printer_cb =
-{
-	.print_symbol = header_print_symbol,
-	.print_comment = header_print_comment,
-};
-
-/*
- * Tristate printer
- *
- * This printer is used when generating the `include/config/tristate.conf' file.
- */
-static void
-tristate_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-	if (sym->type == S_TRISTATE && *value != 'n')
-		fprintf(fp, "%s%s=%c\n", CONFIG_, sym->name, (char)toupper(*value));
-}
-
-static struct conf_printer tristate_printer_cb =
-{
-	.print_symbol = tristate_print_symbol,
-	.print_comment = kconfig_print_comment,
-};
-
-static void conf_write_symbol(FILE *fp, struct symbol *sym,
-			      struct conf_printer *printer, void *printer_arg)
-{
-	const char *str;
-
-	switch (sym->type) {
-	case S_OTHER:
-	case S_UNKNOWN:
-		break;
-	case S_STRING:
-		str = sym_get_string_value(sym);
-		str = sym_escape_string_value(str);
-		printer->print_symbol(fp, sym, str, printer_arg);
-		free((void *)str);
-		break;
-	default:
-		str = sym_get_string_value(sym);
-		printer->print_symbol(fp, sym, str, printer_arg);
-	}
-}
-
-static void
-conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg)
-{
-	char buf[256];
-
-	snprintf(buf, sizeof(buf),
-	    "\n"
-	    "Automatically generated file; DO NOT EDIT.\n"
-	    "%s\n",
-	    rootmenu.prompt->text);
-
-	printer->print_comment(fp, buf, printer_arg);
-}
-
-/*
- * Write out a minimal config.
- * All values that has default values are skipped as this is redundant.
- */
-int conf_write_defconfig(const char *filename)
-{
-	struct symbol *sym;
-	struct menu *menu;
-	FILE *out;
-
-	out = fopen(filename, "w");
-	if (!out)
-		return 1;
-
-	sym_clear_all_valid();
-
-	/* Traverse all menus to find all relevant symbols */
-	menu = rootmenu.list;
-
-	while (menu != NULL)
-	{
-		sym = menu->sym;
-		if (sym == NULL) {
-			if (!menu_is_visible(menu))
-				goto next_menu;
-		} else if (!sym_is_choice(sym)) {
-			sym_calc_value(sym);
-			if (!(sym->flags & SYMBOL_WRITE))
-				goto next_menu;
-			sym->flags &= ~SYMBOL_WRITE;
-			/* If we cannot change the symbol - skip */
-			if (!sym_is_changable(sym))
-				goto next_menu;
-			/* If symbol equals to default value - skip */
-			if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0)
-				goto next_menu;
-
-			/*
-			 * If symbol is a choice value and equals to the
-			 * default for a choice - skip.
-			 * But only if value is bool and equal to "y" and
-			 * choice is not "optional".
-			 * (If choice is "optional" then all values can be "n")
-			 */
-			if (sym_is_choice_value(sym)) {
-				struct symbol *cs;
-				struct symbol *ds;
-
-				cs = prop_get_symbol(sym_get_choice_prop(sym));
-				ds = sym_choice_default(cs);
-				if (!sym_is_optional(cs) && sym == ds) {
-					if ((sym->type == S_BOOLEAN) &&
-					    sym_get_tristate_value(sym) == yes)
-						goto next_menu;
-				}
-			}
-			conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
-		}
-next_menu:
-		if (menu->list != NULL) {
-			menu = menu->list;
-		}
-		else if (menu->next != NULL) {
-			menu = menu->next;
-		} else {
-			while ((menu = menu->parent)) {
-				if (menu->next != NULL) {
-					menu = menu->next;
-					break;
-				}
-			}
-		}
-	}
-	fclose(out);
-	return 0;
-}
-
-int conf_write(const char *name)
-{
-	FILE *out;
-	struct symbol *sym;
-	struct menu *menu;
-	const char *basename;
-	const char *str;
-	char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
-	char *env;
-
-	if (!name)
-		name = conf_get_configname();
-
-	dirname[0] = 0;
-	if (name && name[0]) {
-		struct stat st;
-		char *slash;
-
-		if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
-			strcpy(dirname, name);
-			strcat(dirname, "/");
-			basename = conf_get_configname();
-		} else if ((slash = strrchr(name, '/'))) {
-			int size = slash - name + 1;
-			memcpy(dirname, name, size);
-			dirname[size] = 0;
-			if (slash[1])
-				basename = slash + 1;
-			else
-				basename = conf_get_configname();
-		} else
-			basename = name;
-	} else
-		basename = conf_get_configname();
-
-	sprintf(newname, "%s%s", dirname, basename);
-	env = getenv("KCONFIG_OVERWRITECONFIG");
-	if (!env || !*env) {
-		sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid());
-		out = fopen(tmpname, "w");
-	} else {
-		*tmpname = 0;
-		out = fopen(newname, "w");
-	}
-	if (!out)
-		return 1;
-
-	conf_write_heading(out, &kconfig_printer_cb, NULL);
-
-	if (!conf_get_changed())
-		sym_clear_all_valid();
-
-	menu = rootmenu.list;
-	while (menu) {
-		sym = menu->sym;
-		if (!sym) {
-			if (!menu_is_visible(menu))
-				goto next;
-			str = menu_get_prompt(menu);
-			fprintf(out, "\n"
-				     "#\n"
-				     "# %s\n"
-				     "#\n", str);
-		} else if (!(sym->flags & SYMBOL_CHOICE)) {
-			sym_calc_value(sym);
-			if (!(sym->flags & SYMBOL_WRITE))
-				goto next;
-			sym->flags &= ~SYMBOL_WRITE;
-
-			conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
-		}
-
-next:
-		if (menu->list) {
-			menu = menu->list;
-			continue;
-		}
-		if (menu->next)
-			menu = menu->next;
-		else while ((menu = menu->parent)) {
-			if (menu->next) {
-				menu = menu->next;
-				break;
-			}
-		}
-	}
-	fclose(out);
-
-	if (*tmpname) {
-		strcat(dirname, basename);
-		strcat(dirname, ".old");
-		rename(newname, dirname);
-		if (rename(tmpname, newname))
-			return 1;
-	}
-
-	conf_message(_("configuration written to %s"), newname);
-
-	sym_set_change_count(0);
-
-	return 0;
-}
-
-static int conf_split_config(void)
-{
-	const char *name;
-	char path[PATH_MAX+1];
-	char *opwd, *dir, *_name;
-	char *s, *d, c;
-	struct symbol *sym;
-	struct stat sb;
-	int res, i, fd;
-
-	name = conf_get_autoconfig_name();
-	conf_read_simple(name, S_DEF_AUTO);
-
-	opwd = malloc(256);
-	_name = strdup(name);
-	if (opwd == NULL || _name == NULL)
- 		return 1;
-	opwd = getcwd(opwd, 256);
-	dir = dirname(_name);
-	if (dir == NULL) {
-		res = 1;
-		goto err;
-	}
-
-	snprintf(path, sizeof(path), "%s/%s", dir, "depinclude");
-	if (stat(path, &sb) && mkdir(path, 0755)) {
-		res = 1;
-		goto err;
-	}
-
-	if (chdir(path)) {
-		res = 1;
-		goto err;
-	}
-
-	res = 0;
-	for_all_symbols(i, sym) {
-		sym_calc_value(sym);
-		if ((sym->flags & SYMBOL_AUTO) || !sym->name)
-			continue;
-		if (sym->flags & SYMBOL_WRITE) {
-			if (sym->flags & SYMBOL_DEF_AUTO) {
-				/*
-				 * symbol has old and new value,
-				 * so compare them...
-				 */
-				switch (sym->type) {
-				case S_BOOLEAN:
-				case S_TRISTATE:
-					if (sym_get_tristate_value(sym) ==
-					    sym->def[S_DEF_AUTO].tri)
-						continue;
-					break;
-				case S_STRING:
-				case S_HEX:
-				case S_INT:
-					if (!strcmp(sym_get_string_value(sym),
-						    sym->def[S_DEF_AUTO].val))
-						continue;
-					break;
-				default:
-					break;
-				}
-			} else {
-				/*
-				 * If there is no old value, only 'no' (unset)
-				 * is allowed as new value.
-				 */
-				switch (sym->type) {
-				case S_BOOLEAN:
-				case S_TRISTATE:
-					if (sym_get_tristate_value(sym) == no)
-						continue;
-					break;
-				default:
-					break;
-				}
-			}
-		} else if (!(sym->flags & SYMBOL_DEF_AUTO))
-			/* There is neither an old nor a new value. */
-			continue;
-		/* else
-		 *	There is an old value, but no new value ('no' (unset)
-		 *	isn't saved in auto.conf, so the old value is always
-		 *	different from 'no').
-		 */
-
-		/* Replace all '_' and append ".h" */
-		s = sym->name;
-		d = path;
-		while ((c = *s++)) {
-			c = tolower(c);
-			*d++ = (c == '_') ? '/' : c;
-		}
-		strcpy(d, ".h");
-
-		/* Assume directory path already exists. */
-		fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-		if (fd == -1) {
-			if (errno != ENOENT) {
-				res = 1;
-				break;
-			}
-			/*
-			 * Create directory components,
-			 * unless they exist already.
-			 */
-			d = path;
-			while ((d = strchr(d, '/'))) {
-				*d = 0;
-				if (stat(path, &sb) && mkdir(path, 0755)) {
-					res = 1;
-					goto out;
-				}
-				*d++ = '/';
-			}
-			/* Try it again. */
-			fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-			if (fd == -1) {
-				res = 1;
-				break;
-			}
-		}
-		close(fd);
-	}
-out:
-	if (chdir(opwd))
-		res = 1;
-err:
-	free(opwd);
-	free(_name);
-	return res;
-}
-
-int conf_write_autoconf(void)
-{
-	struct symbol *sym;
-	const char *name;
-	FILE *out, *tristate, *out_h;
-	int i;
-	char dir[PATH_MAX+1], buf[PATH_MAX+1];
-	char *s;
-
-	strcpy(dir, conf_get_configname());
-	s = strrchr(dir, '/');
-	if (s)
-		s[1] = 0;
-	else
-		dir[0] = 0;
-
-	sym_clear_all_valid();
-
-	sprintf(buf, "%s.config.cmd", dir);
-	file_write_dep(buf);
-
-	if (conf_split_config())
-		return 1;
-
-	sprintf(buf, "%s.tmpconfig", dir);
-	out = fopen(buf, "w");
-	if (!out)
-		return 1;
-
-	sprintf(buf, "%s.tmpconfig_tristate", dir);
-	tristate = fopen(buf, "w");
-	if (!tristate) {
-		fclose(out);
-		return 1;
-	}
-
-	sprintf(buf, "%s.tmpconfig.h", dir);
-	out_h = fopen(buf, "w");
-	if (!out_h) {
-		fclose(out);
-		fclose(tristate);
-		return 1;
-	}
-
-	conf_write_heading(out, &kconfig_printer_cb, NULL);
-
-	conf_write_heading(tristate, &tristate_printer_cb, NULL);
-
-	conf_write_heading(out_h, &header_printer_cb, NULL);
-
-	for_all_symbols(i, sym) {
-		sym_calc_value(sym);
-		if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
-			continue;
-
-		/* write symbol to auto.conf, tristate and header files */
-		conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
-
-		conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
-
-		conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
-	}
-	fclose(out);
-	fclose(tristate);
-	fclose(out_h);
-
-	name = getenv("KCONFIG_AUTOHEADER");
-	if (!name)
-		name = "include/generated/autoconf.h";
-	sprintf(buf, "%s.tmpconfig.h", dir);
-	if (rename(buf, name))
-		return 1;
-	name = getenv("KCONFIG_TRISTATE");
-	if (!name)
-		name = "include/config/tristate.conf";
-	sprintf(buf, "%s.tmpconfig_tristate", dir);
-	if (rename(buf, name))
-		return 1;
-	name = conf_get_autoconfig_name();
-	/*
-	 * This must be the last step, kbuild has a dependency on auto.conf
-	 * and this marks the successful completion of the previous steps.
-	 */
-	sprintf(buf, "%s.tmpconfig", dir);
-	if (rename(buf, name))
-		return 1;
-
-	return 0;
-}
-
-static int sym_change_count;
-static void (*conf_changed_callback)(void);
-
-void sym_set_change_count(int count)
-{
-	int _sym_change_count = sym_change_count;
-	sym_change_count = count;
-	if (conf_changed_callback &&
-	    (bool)_sym_change_count != (bool)count)
-		conf_changed_callback();
-}
-
-void sym_add_change_count(int count)
-{
-	sym_set_change_count(count + sym_change_count);
-}
-
-bool conf_get_changed(void)
-{
-	return sym_change_count;
-}
-
-void conf_set_changed_callback(void (*fn)(void))
-{
-	conf_changed_callback = fn;
-}
-
-static bool randomize_choice_values(struct symbol *csym)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct expr *e;
-	int cnt, def;
-
-	/*
-	 * If choice is mod then we may have more items selected
-	 * and if no then no-one.
-	 * In both cases stop.
-	 */
-	if (csym->curr.tri != yes)
-		return false;
-
-	prop = sym_get_choice_prop(csym);
-
-	/* count entries in choice block */
-	cnt = 0;
-	expr_list_for_each_sym(prop->expr, e, sym)
-		cnt++;
-
-	/*
-	 * find a random value and set it to yes,
-	 * set the rest to no so we have only one set
-	 */
-	def = (rand() % cnt);
-
-	cnt = 0;
-	expr_list_for_each_sym(prop->expr, e, sym) {
-		if (def == cnt++) {
-			sym->def[S_DEF_USER].tri = yes;
-			csym->def[S_DEF_USER].val = sym;
-		}
-		else {
-			sym->def[S_DEF_USER].tri = no;
-		}
-		sym->flags |= SYMBOL_DEF_USER;
-		/* clear VALID to get value calculated */
-		sym->flags &= ~SYMBOL_VALID;
-	}
-	csym->flags |= SYMBOL_DEF_USER;
-	/* clear VALID to get value calculated */
-	csym->flags &= ~(SYMBOL_VALID);
-
-	return true;
-}
-
-void set_all_choice_values(struct symbol *csym)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct expr *e;
-
-	prop = sym_get_choice_prop(csym);
-
-	/*
-	 * Set all non-assinged choice values to no
-	 */
-	expr_list_for_each_sym(prop->expr, e, sym) {
-		if (!sym_has_value(sym))
-			sym->def[S_DEF_USER].tri = no;
-	}
-	csym->flags |= SYMBOL_DEF_USER;
-	/* clear VALID to get value calculated */
-	csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES);
-}
-
-bool conf_set_all_new_symbols(enum conf_def_mode mode)
-{
-	struct symbol *sym, *csym;
-	int i, cnt, pby, pty, ptm;	/* pby: probability of boolean  = y
-					 * pty: probability of tristate = y
-					 * ptm: probability of tristate = m
-					 */
-
-	pby = 50; pty = ptm = 33; /* can't go as the default in switch-case
-				   * below, otherwise gcc whines about
-				   * -Wmaybe-uninitialized */
-	if (mode == def_random) {
-		int n, p[3];
-		char *env = getenv("KCONFIG_PROBABILITY");
-		n = 0;
-		while( env && *env ) {
-			char *endp;
-			int tmp = strtol( env, &endp, 10 );
-			if( tmp >= 0 && tmp <= 100 ) {
-				p[n++] = tmp;
-			} else {
-				errno = ERANGE;
-				perror( "KCONFIG_PROBABILITY" );
-				exit( 1 );
-			}
-			env = (*endp == ':') ? endp+1 : endp;
-			if( n >=3 ) {
-				break;
-			}
-		}
-		switch( n ) {
-		case 1:
-			pby = p[0]; ptm = pby/2; pty = pby-ptm;
-			break;
-		case 2:
-			pty = p[0]; ptm = p[1]; pby = pty + ptm;
-			break;
-		case 3:
-			pby = p[0]; pty = p[1]; ptm = p[2];
-			break;
-		}
-
-		if( pty+ptm > 100 ) {
-			errno = ERANGE;
-			perror( "KCONFIG_PROBABILITY" );
-			exit( 1 );
-		}
-	}
-	bool has_changed = false;
-
-	for_all_symbols(i, sym) {
-		if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID))
-			continue;
-		switch (sym_get_type(sym)) {
-		case S_BOOLEAN:
-		case S_TRISTATE:
-			has_changed = true;
-			switch (mode) {
-			case def_yes:
-				sym->def[S_DEF_USER].tri = yes;
-				break;
-			case def_mod:
-				sym->def[S_DEF_USER].tri = mod;
-				break;
-			case def_no:
-				sym->def[S_DEF_USER].tri = no;
-				break;
-			case def_random:
-				sym->def[S_DEF_USER].tri = no;
-				cnt = rand() % 100;
-				if (sym->type == S_TRISTATE) {
-					if (cnt < pty)
-						sym->def[S_DEF_USER].tri = yes;
-					else if (cnt < (pty+ptm))
-						sym->def[S_DEF_USER].tri = mod;
-				} else if (cnt < pby)
-					sym->def[S_DEF_USER].tri = yes;
-				break;
-			default:
-				continue;
-			}
-			if (!(sym_is_choice(sym) && mode == def_random))
-				sym->flags |= SYMBOL_DEF_USER;
-			break;
-		default:
-			break;
-		}
-
-	}
-
-	sym_clear_all_valid();
-
-	/*
-	 * We have different type of choice blocks.
-	 * If curr.tri equals to mod then we can select several
-	 * choice symbols in one block.
-	 * In this case we do nothing.
-	 * If curr.tri equals yes then only one symbol can be
-	 * selected in a choice block and we set it to yes,
-	 * and the rest to no.
-	 */
-	if (mode != def_random) {
-		for_all_symbols(i, csym) {
-			if ((sym_is_choice(csym) && !sym_has_value(csym)) ||
-			    sym_is_choice_value(csym))
-				csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES;
-		}
-	}
-
-	for_all_symbols(i, csym) {
-		if (sym_has_value(csym) || !sym_is_choice(csym))
-			continue;
-
-		sym_calc_value(csym);
-		if (mode == def_random)
-			has_changed = randomize_choice_values(csym);
-		else {
-			set_all_choice_values(csym);
-			has_changed = true;
-		}
-	}
-
-	return has_changed;
-}
diff --git a/support/kconfig/expr.c b/support/kconfig/expr.c
deleted file mode 100644
index d6626521..00000000
--- a/support/kconfig/expr.c
+++ /dev/null
@@ -1,1168 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "lkc.h"
-
-#define DEBUG_EXPR	0
-
-struct expr *expr_alloc_symbol(struct symbol *sym)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = E_SYMBOL;
-	e->left.sym = sym;
-	return e;
-}
-
-struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = type;
-	e->left.expr = ce;
-	return e;
-}
-
-struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = type;
-	e->left.expr = e1;
-	e->right.expr = e2;
-	return e;
-}
-
-struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = type;
-	e->left.sym = s1;
-	e->right.sym = s2;
-	return e;
-}
-
-struct expr *expr_alloc_and(struct expr *e1, struct expr *e2)
-{
-	if (!e1)
-		return e2;
-	return e2 ? expr_alloc_two(E_AND, e1, e2) : e1;
-}
-
-struct expr *expr_alloc_or(struct expr *e1, struct expr *e2)
-{
-	if (!e1)
-		return e2;
-	return e2 ? expr_alloc_two(E_OR, e1, e2) : e1;
-}
-
-struct expr *expr_copy(const struct expr *org)
-{
-	struct expr *e;
-
-	if (!org)
-		return NULL;
-
-	e = xmalloc(sizeof(*org));
-	memcpy(e, org, sizeof(*org));
-	switch (org->type) {
-	case E_SYMBOL:
-		e->left = org->left;
-		break;
-	case E_NOT:
-		e->left.expr = expr_copy(org->left.expr);
-		break;
-	case E_EQUAL:
-	case E_UNEQUAL:
-		e->left.sym = org->left.sym;
-		e->right.sym = org->right.sym;
-		break;
-	case E_AND:
-	case E_OR:
-	case E_LIST:
-		e->left.expr = expr_copy(org->left.expr);
-		e->right.expr = expr_copy(org->right.expr);
-		break;
-	default:
-		printf("can't copy type %d\n", e->type);
-		free(e);
-		e = NULL;
-		break;
-	}
-
-	return e;
-}
-
-void expr_free(struct expr *e)
-{
-	if (!e)
-		return;
-
-	switch (e->type) {
-	case E_SYMBOL:
-		break;
-	case E_NOT:
-		expr_free(e->left.expr);
-		return;
-	case E_EQUAL:
-	case E_UNEQUAL:
-		break;
-	case E_OR:
-	case E_AND:
-		expr_free(e->left.expr);
-		expr_free(e->right.expr);
-		break;
-	default:
-		printf("how to free type %d?\n", e->type);
-		break;
-	}
-	free(e);
-}
-
-static int trans_count;
-
-#define e1 (*ep1)
-#define e2 (*ep2)
-
-static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2)
-{
-	if (e1->type == type) {
-		__expr_eliminate_eq(type, &e1->left.expr, &e2);
-		__expr_eliminate_eq(type, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		__expr_eliminate_eq(type, &e1, &e2->left.expr);
-		__expr_eliminate_eq(type, &e1, &e2->right.expr);
-		return;
-	}
-	if (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
-	    e1->left.sym == e2->left.sym &&
-	    (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no))
-		return;
-	if (!expr_eq(e1, e2))
-		return;
-	trans_count++;
-	expr_free(e1); expr_free(e2);
-	switch (type) {
-	case E_OR:
-		e1 = expr_alloc_symbol(&symbol_no);
-		e2 = expr_alloc_symbol(&symbol_no);
-		break;
-	case E_AND:
-		e1 = expr_alloc_symbol(&symbol_yes);
-		e2 = expr_alloc_symbol(&symbol_yes);
-		break;
-	default:
-		;
-	}
-}
-
-void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
-{
-	if (!e1 || !e2)
-		return;
-	switch (e1->type) {
-	case E_OR:
-	case E_AND:
-		__expr_eliminate_eq(e1->type, ep1, ep2);
-	default:
-		;
-	}
-	if (e1->type != e2->type) switch (e2->type) {
-	case E_OR:
-	case E_AND:
-		__expr_eliminate_eq(e2->type, ep1, ep2);
-	default:
-		;
-	}
-	e1 = expr_eliminate_yn(e1);
-	e2 = expr_eliminate_yn(e2);
-}
-
-#undef e1
-#undef e2
-
-int expr_eq(struct expr *e1, struct expr *e2)
-{
-	int res, old_count;
-
-	if (e1->type != e2->type)
-		return 0;
-	switch (e1->type) {
-	case E_EQUAL:
-	case E_UNEQUAL:
-		return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym;
-	case E_SYMBOL:
-		return e1->left.sym == e2->left.sym;
-	case E_NOT:
-		return expr_eq(e1->left.expr, e2->left.expr);
-	case E_AND:
-	case E_OR:
-		e1 = expr_copy(e1);
-		e2 = expr_copy(e2);
-		old_count = trans_count;
-		expr_eliminate_eq(&e1, &e2);
-		res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
-		       e1->left.sym == e2->left.sym);
-		expr_free(e1);
-		expr_free(e2);
-		trans_count = old_count;
-		return res;
-	case E_LIST:
-	case E_RANGE:
-	case E_NONE:
-		/* panic */;
-	}
-
-	if (DEBUG_EXPR) {
-		expr_fprint(e1, stdout);
-		printf(" = ");
-		expr_fprint(e2, stdout);
-		printf(" ?\n");
-	}
-
-	return 0;
-}
-
-struct expr *expr_eliminate_yn(struct expr *e)
-{
-	struct expr *tmp;
-
-	if (e) switch (e->type) {
-	case E_AND:
-		e->left.expr = expr_eliminate_yn(e->left.expr);
-		e->right.expr = expr_eliminate_yn(e->right.expr);
-		if (e->left.expr->type == E_SYMBOL) {
-			if (e->left.expr->left.sym == &symbol_no) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_no;
-				e->right.expr = NULL;
-				return e;
-			} else if (e->left.expr->left.sym == &symbol_yes) {
-				free(e->left.expr);
-				tmp = e->right.expr;
-				*e = *(e->right.expr);
-				free(tmp);
-				return e;
-			}
-		}
-		if (e->right.expr->type == E_SYMBOL) {
-			if (e->right.expr->left.sym == &symbol_no) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_no;
-				e->right.expr = NULL;
-				return e;
-			} else if (e->right.expr->left.sym == &symbol_yes) {
-				free(e->right.expr);
-				tmp = e->left.expr;
-				*e = *(e->left.expr);
-				free(tmp);
-				return e;
-			}
-		}
-		break;
-	case E_OR:
-		e->left.expr = expr_eliminate_yn(e->left.expr);
-		e->right.expr = expr_eliminate_yn(e->right.expr);
-		if (e->left.expr->type == E_SYMBOL) {
-			if (e->left.expr->left.sym == &symbol_no) {
-				free(e->left.expr);
-				tmp = e->right.expr;
-				*e = *(e->right.expr);
-				free(tmp);
-				return e;
-			} else if (e->left.expr->left.sym == &symbol_yes) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_yes;
-				e->right.expr = NULL;
-				return e;
-			}
-		}
-		if (e->right.expr->type == E_SYMBOL) {
-			if (e->right.expr->left.sym == &symbol_no) {
-				free(e->right.expr);
-				tmp = e->left.expr;
-				*e = *(e->left.expr);
-				free(tmp);
-				return e;
-			} else if (e->right.expr->left.sym == &symbol_yes) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_yes;
-				e->right.expr = NULL;
-				return e;
-			}
-		}
-		break;
-	default:
-		;
-	}
-	return e;
-}
-
-/*
- * bool FOO!=n => FOO
- */
-struct expr *expr_trans_bool(struct expr *e)
-{
-	if (!e)
-		return NULL;
-	switch (e->type) {
-	case E_AND:
-	case E_OR:
-	case E_NOT:
-		e->left.expr = expr_trans_bool(e->left.expr);
-		e->right.expr = expr_trans_bool(e->right.expr);
-		break;
-	case E_UNEQUAL:
-		// FOO!=n -> FOO
-		if (e->left.sym->type == S_TRISTATE) {
-			if (e->right.sym == &symbol_no) {
-				e->type = E_SYMBOL;
-				e->right.sym = NULL;
-			}
-		}
-		break;
-	default:
-		;
-	}
-	return e;
-}
-
-/*
- * e1 || e2 -> ?
- */
-static struct expr *expr_join_or(struct expr *e1, struct expr *e2)
-{
-	struct expr *tmp;
-	struct symbol *sym1, *sym2;
-
-	if (expr_eq(e1, e2))
-		return expr_copy(e1);
-	if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT)
-		return NULL;
-	if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
-		return NULL;
-	if (e1->type == E_NOT) {
-		tmp = e1->left.expr;
-		if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL)
-			return NULL;
-		sym1 = tmp->left.sym;
-	} else
-		sym1 = e1->left.sym;
-	if (e2->type == E_NOT) {
-		if (e2->left.expr->type != E_SYMBOL)
-			return NULL;
-		sym2 = e2->left.expr->left.sym;
-	} else
-		sym2 = e2->left.sym;
-	if (sym1 != sym2)
-		return NULL;
-	if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE)
-		return NULL;
-	if (sym1->type == S_TRISTATE) {
-		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
-		    ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
-		     (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) {
-			// (a='y') || (a='m') -> (a!='n')
-			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no);
-		}
-		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
-		    ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
-		     (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) {
-			// (a='y') || (a='n') -> (a!='m')
-			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod);
-		}
-		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
-		    ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
-		     (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) {
-			// (a='m') || (a='n') -> (a!='y')
-			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes);
-		}
-	}
-	if (sym1->type == S_BOOLEAN && sym1 == sym2) {
-		if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) ||
-		    (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL))
-			return expr_alloc_symbol(&symbol_yes);
-	}
-
-	if (DEBUG_EXPR) {
-		printf("optimize (");
-		expr_fprint(e1, stdout);
-		printf(") || (");
-		expr_fprint(e2, stdout);
-		printf(")?\n");
-	}
-	return NULL;
-}
-
-static struct expr *expr_join_and(struct expr *e1, struct expr *e2)
-{
-	struct expr *tmp;
-	struct symbol *sym1, *sym2;
-
-	if (expr_eq(e1, e2))
-		return expr_copy(e1);
-	if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT)
-		return NULL;
-	if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
-		return NULL;
-	if (e1->type == E_NOT) {
-		tmp = e1->left.expr;
-		if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL)
-			return NULL;
-		sym1 = tmp->left.sym;
-	} else
-		sym1 = e1->left.sym;
-	if (e2->type == E_NOT) {
-		if (e2->left.expr->type != E_SYMBOL)
-			return NULL;
-		sym2 = e2->left.expr->left.sym;
-	} else
-		sym2 = e2->left.sym;
-	if (sym1 != sym2)
-		return NULL;
-	if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE)
-		return NULL;
-
-	if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) ||
-	    (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes))
-		// (a) && (a='y') -> (a='y')
-		return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
-
-	if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) ||
-	    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no))
-		// (a) && (a!='n') -> (a)
-		return expr_alloc_symbol(sym1);
-
-	if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) ||
-	    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod))
-		// (a) && (a!='m') -> (a='y')
-		return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
-
-	if (sym1->type == S_TRISTATE) {
-		if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) {
-			// (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
-			sym2 = e1->right.sym;
-			if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
-				return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
-							     : expr_alloc_symbol(&symbol_no);
-		}
-		if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) {
-			// (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
-			sym2 = e2->right.sym;
-			if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
-				return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
-							     : expr_alloc_symbol(&symbol_no);
-		}
-		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
-			   ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
-			    (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes)))
-			// (a!='y') && (a!='n') -> (a='m')
-			return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod);
-
-		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
-			   ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
-			    (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes)))
-			// (a!='y') && (a!='m') -> (a='n')
-			return expr_alloc_comp(E_EQUAL, sym1, &symbol_no);
-
-		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
-			   ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
-			    (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod)))
-			// (a!='m') && (a!='n') -> (a='m')
-			return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
-
-		if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) ||
-		    (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) ||
-		    (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) ||
-		    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes))
-			return NULL;
-	}
-
-	if (DEBUG_EXPR) {
-		printf("optimize (");
-		expr_fprint(e1, stdout);
-		printf(") && (");
-		expr_fprint(e2, stdout);
-		printf(")?\n");
-	}
-	return NULL;
-}
-
-static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2)
-{
-#define e1 (*ep1)
-#define e2 (*ep2)
-	struct expr *tmp;
-
-	if (e1->type == type) {
-		expr_eliminate_dups1(type, &e1->left.expr, &e2);
-		expr_eliminate_dups1(type, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		expr_eliminate_dups1(type, &e1, &e2->left.expr);
-		expr_eliminate_dups1(type, &e1, &e2->right.expr);
-		return;
-	}
-	if (e1 == e2)
-		return;
-
-	switch (e1->type) {
-	case E_OR: case E_AND:
-		expr_eliminate_dups1(e1->type, &e1, &e1);
-	default:
-		;
-	}
-
-	switch (type) {
-	case E_OR:
-		tmp = expr_join_or(e1, e2);
-		if (tmp) {
-			expr_free(e1); expr_free(e2);
-			e1 = expr_alloc_symbol(&symbol_no);
-			e2 = tmp;
-			trans_count++;
-		}
-		break;
-	case E_AND:
-		tmp = expr_join_and(e1, e2);
-		if (tmp) {
-			expr_free(e1); expr_free(e2);
-			e1 = expr_alloc_symbol(&symbol_yes);
-			e2 = tmp;
-			trans_count++;
-		}
-		break;
-	default:
-		;
-	}
-#undef e1
-#undef e2
-}
-
-static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2)
-{
-#define e1 (*ep1)
-#define e2 (*ep2)
-	struct expr *tmp, *tmp1, *tmp2;
-
-	if (e1->type == type) {
-		expr_eliminate_dups2(type, &e1->left.expr, &e2);
-		expr_eliminate_dups2(type, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		expr_eliminate_dups2(type, &e1, &e2->left.expr);
-		expr_eliminate_dups2(type, &e1, &e2->right.expr);
-	}
-	if (e1 == e2)
-		return;
-
-	switch (e1->type) {
-	case E_OR:
-		expr_eliminate_dups2(e1->type, &e1, &e1);
-		// (FOO || BAR) && (!FOO && !BAR) -> n
-		tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
-		tmp2 = expr_copy(e2);
-		tmp = expr_extract_eq_and(&tmp1, &tmp2);
-		if (expr_is_yes(tmp1)) {
-			expr_free(e1);
-			e1 = expr_alloc_symbol(&symbol_no);
-			trans_count++;
-		}
-		expr_free(tmp2);
-		expr_free(tmp1);
-		expr_free(tmp);
-		break;
-	case E_AND:
-		expr_eliminate_dups2(e1->type, &e1, &e1);
-		// (FOO && BAR) || (!FOO || !BAR) -> y
-		tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
-		tmp2 = expr_copy(e2);
-		tmp = expr_extract_eq_or(&tmp1, &tmp2);
-		if (expr_is_no(tmp1)) {
-			expr_free(e1);
-			e1 = expr_alloc_symbol(&symbol_yes);
-			trans_count++;
-		}
-		expr_free(tmp2);
-		expr_free(tmp1);
-		expr_free(tmp);
-		break;
-	default:
-		;
-	}
-#undef e1
-#undef e2
-}
-
-struct expr *expr_eliminate_dups(struct expr *e)
-{
-	int oldcount;
-	if (!e)
-		return e;
-
-	oldcount = trans_count;
-	while (1) {
-		trans_count = 0;
-		switch (e->type) {
-		case E_OR: case E_AND:
-			expr_eliminate_dups1(e->type, &e, &e);
-			expr_eliminate_dups2(e->type, &e, &e);
-		default:
-			;
-		}
-		if (!trans_count)
-			break;
-		e = expr_eliminate_yn(e);
-	}
-	trans_count = oldcount;
-	return e;
-}
-
-struct expr *expr_transform(struct expr *e)
-{
-	struct expr *tmp;
-
-	if (!e)
-		return NULL;
-	switch (e->type) {
-	case E_EQUAL:
-	case E_UNEQUAL:
-	case E_SYMBOL:
-	case E_LIST:
-		break;
-	default:
-		e->left.expr = expr_transform(e->left.expr);
-		e->right.expr = expr_transform(e->right.expr);
-	}
-
-	switch (e->type) {
-	case E_EQUAL:
-		if (e->left.sym->type != S_BOOLEAN)
-			break;
-		if (e->right.sym == &symbol_no) {
-			e->type = E_NOT;
-			e->left.expr = expr_alloc_symbol(e->left.sym);
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_mod) {
-			printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name);
-			e->type = E_SYMBOL;
-			e->left.sym = &symbol_no;
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_yes) {
-			e->type = E_SYMBOL;
-			e->right.sym = NULL;
-			break;
-		}
-		break;
-	case E_UNEQUAL:
-		if (e->left.sym->type != S_BOOLEAN)
-			break;
-		if (e->right.sym == &symbol_no) {
-			e->type = E_SYMBOL;
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_mod) {
-			printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name);
-			e->type = E_SYMBOL;
-			e->left.sym = &symbol_yes;
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_yes) {
-			e->type = E_NOT;
-			e->left.expr = expr_alloc_symbol(e->left.sym);
-			e->right.sym = NULL;
-			break;
-		}
-		break;
-	case E_NOT:
-		switch (e->left.expr->type) {
-		case E_NOT:
-			// !!a -> a
-			tmp = e->left.expr->left.expr;
-			free(e->left.expr);
-			free(e);
-			e = tmp;
-			e = expr_transform(e);
-			break;
-		case E_EQUAL:
-		case E_UNEQUAL:
-			// !a='x' -> a!='x'
-			tmp = e->left.expr;
-			free(e);
-			e = tmp;
-			e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL;
-			break;
-		case E_OR:
-			// !(a || b) -> !a && !b
-			tmp = e->left.expr;
-			e->type = E_AND;
-			e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
-			tmp->type = E_NOT;
-			tmp->right.expr = NULL;
-			e = expr_transform(e);
-			break;
-		case E_AND:
-			// !(a && b) -> !a || !b
-			tmp = e->left.expr;
-			e->type = E_OR;
-			e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
-			tmp->type = E_NOT;
-			tmp->right.expr = NULL;
-			e = expr_transform(e);
-			break;
-		case E_SYMBOL:
-			if (e->left.expr->left.sym == &symbol_yes) {
-				// !'y' -> 'n'
-				tmp = e->left.expr;
-				free(e);
-				e = tmp;
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_no;
-				break;
-			}
-			if (e->left.expr->left.sym == &symbol_mod) {
-				// !'m' -> 'm'
-				tmp = e->left.expr;
-				free(e);
-				e = tmp;
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_mod;
-				break;
-			}
-			if (e->left.expr->left.sym == &symbol_no) {
-				// !'n' -> 'y'
-				tmp = e->left.expr;
-				free(e);
-				e = tmp;
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_yes;
-				break;
-			}
-			break;
-		default:
-			;
-		}
-		break;
-	default:
-		;
-	}
-	return e;
-}
-
-int expr_contains_symbol(struct expr *dep, struct symbol *sym)
-{
-	if (!dep)
-		return 0;
-
-	switch (dep->type) {
-	case E_AND:
-	case E_OR:
-		return expr_contains_symbol(dep->left.expr, sym) ||
-		       expr_contains_symbol(dep->right.expr, sym);
-	case E_SYMBOL:
-		return dep->left.sym == sym;
-	case E_EQUAL:
-	case E_UNEQUAL:
-		return dep->left.sym == sym ||
-		       dep->right.sym == sym;
-	case E_NOT:
-		return expr_contains_symbol(dep->left.expr, sym);
-	default:
-		;
-	}
-	return 0;
-}
-
-bool expr_depends_symbol(struct expr *dep, struct symbol *sym)
-{
-	if (!dep)
-		return false;
-
-	switch (dep->type) {
-	case E_AND:
-		return expr_depends_symbol(dep->left.expr, sym) ||
-		       expr_depends_symbol(dep->right.expr, sym);
-	case E_SYMBOL:
-		return dep->left.sym == sym;
-	case E_EQUAL:
-		if (dep->left.sym == sym) {
-			if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod)
-				return true;
-		}
-		break;
-	case E_UNEQUAL:
-		if (dep->left.sym == sym) {
-			if (dep->right.sym == &symbol_no)
-				return true;
-		}
-		break;
-	default:
-		;
-	}
- 	return false;
-}
-
-struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2)
-{
-	struct expr *tmp = NULL;
-	expr_extract_eq(E_AND, &tmp, ep1, ep2);
-	if (tmp) {
-		*ep1 = expr_eliminate_yn(*ep1);
-		*ep2 = expr_eliminate_yn(*ep2);
-	}
-	return tmp;
-}
-
-struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2)
-{
-	struct expr *tmp = NULL;
-	expr_extract_eq(E_OR, &tmp, ep1, ep2);
-	if (tmp) {
-		*ep1 = expr_eliminate_yn(*ep1);
-		*ep2 = expr_eliminate_yn(*ep2);
-	}
-	return tmp;
-}
-
-void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2)
-{
-#define e1 (*ep1)
-#define e2 (*ep2)
-	if (e1->type == type) {
-		expr_extract_eq(type, ep, &e1->left.expr, &e2);
-		expr_extract_eq(type, ep, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		expr_extract_eq(type, ep, ep1, &e2->left.expr);
-		expr_extract_eq(type, ep, ep1, &e2->right.expr);
-		return;
-	}
-	if (expr_eq(e1, e2)) {
-		*ep = *ep ? expr_alloc_two(type, *ep, e1) : e1;
-		expr_free(e2);
-		if (type == E_AND) {
-			e1 = expr_alloc_symbol(&symbol_yes);
-			e2 = expr_alloc_symbol(&symbol_yes);
-		} else if (type == E_OR) {
-			e1 = expr_alloc_symbol(&symbol_no);
-			e2 = expr_alloc_symbol(&symbol_no);
-		}
-	}
-#undef e1
-#undef e2
-}
-
-struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym)
-{
-	struct expr *e1, *e2;
-
-	if (!e) {
-		e = expr_alloc_symbol(sym);
-		if (type == E_UNEQUAL)
-			e = expr_alloc_one(E_NOT, e);
-		return e;
-	}
-	switch (e->type) {
-	case E_AND:
-		e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
-		e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
-		if (sym == &symbol_yes)
-			e = expr_alloc_two(E_AND, e1, e2);
-		if (sym == &symbol_no)
-			e = expr_alloc_two(E_OR, e1, e2);
-		if (type == E_UNEQUAL)
-			e = expr_alloc_one(E_NOT, e);
-		return e;
-	case E_OR:
-		e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
-		e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
-		if (sym == &symbol_yes)
-			e = expr_alloc_two(E_OR, e1, e2);
-		if (sym == &symbol_no)
-			e = expr_alloc_two(E_AND, e1, e2);
-		if (type == E_UNEQUAL)
-			e = expr_alloc_one(E_NOT, e);
-		return e;
-	case E_NOT:
-		return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym);
-	case E_UNEQUAL:
-	case E_EQUAL:
-		if (type == E_EQUAL) {
-			if (sym == &symbol_yes)
-				return expr_copy(e);
-			if (sym == &symbol_mod)
-				return expr_alloc_symbol(&symbol_no);
-			if (sym == &symbol_no)
-				return expr_alloc_one(E_NOT, expr_copy(e));
-		} else {
-			if (sym == &symbol_yes)
-				return expr_alloc_one(E_NOT, expr_copy(e));
-			if (sym == &symbol_mod)
-				return expr_alloc_symbol(&symbol_yes);
-			if (sym == &symbol_no)
-				return expr_copy(e);
-		}
-		break;
-	case E_SYMBOL:
-		return expr_alloc_comp(type, e->left.sym, sym);
-	case E_LIST:
-	case E_RANGE:
-	case E_NONE:
-		/* panic */;
-	}
-	return NULL;
-}
-
-tristate expr_calc_value(struct expr *e)
-{
-	tristate val1, val2;
-	const char *str1, *str2;
-
-	if (!e)
-		return yes;
-
-	switch (e->type) {
-	case E_SYMBOL:
-		sym_calc_value(e->left.sym);
-		return e->left.sym->curr.tri;
-	case E_AND:
-		val1 = expr_calc_value(e->left.expr);
-		val2 = expr_calc_value(e->right.expr);
-		return EXPR_AND(val1, val2);
-	case E_OR:
-		val1 = expr_calc_value(e->left.expr);
-		val2 = expr_calc_value(e->right.expr);
-		return EXPR_OR(val1, val2);
-	case E_NOT:
-		val1 = expr_calc_value(e->left.expr);
-		return EXPR_NOT(val1);
-	case E_EQUAL:
-		sym_calc_value(e->left.sym);
-		sym_calc_value(e->right.sym);
-		str1 = sym_get_string_value(e->left.sym);
-		str2 = sym_get_string_value(e->right.sym);
-		return !strcmp(str1, str2) ? yes : no;
-	case E_UNEQUAL:
-		sym_calc_value(e->left.sym);
-		sym_calc_value(e->right.sym);
-		str1 = sym_get_string_value(e->left.sym);
-		str2 = sym_get_string_value(e->right.sym);
-		return !strcmp(str1, str2) ? no : yes;
-	default:
-		printf("expr_calc_value: %d?\n", e->type);
-		return no;
-	}
-}
-
-int expr_compare_type(enum expr_type t1, enum expr_type t2)
-{
-#if 0
-	return 1;
-#else
-	if (t1 == t2)
-		return 0;
-	switch (t1) {
-	case E_EQUAL:
-	case E_UNEQUAL:
-		if (t2 == E_NOT)
-			return 1;
-	case E_NOT:
-		if (t2 == E_AND)
-			return 1;
-	case E_AND:
-		if (t2 == E_OR)
-			return 1;
-	case E_OR:
-		if (t2 == E_LIST)
-			return 1;
-	case E_LIST:
-		if (t2 == 0)
-			return 1;
-	default:
-		return -1;
-	}
-	printf("[%dgt%d?]", t1, t2);
-	return 0;
-#endif
-}
-
-static inline struct expr *
-expr_get_leftmost_symbol(const struct expr *e)
-{
-
-	if (e == NULL)
-		return NULL;
-
-	while (e->type != E_SYMBOL)
-		e = e->left.expr;
-
-	return expr_copy(e);
-}
-
-/*
- * Given expression `e1' and `e2', returns the leaf of the longest
- * sub-expression of `e1' not containing 'e2.
- */
-struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2)
-{
-	struct expr *ret;
-
-	switch (e1->type) {
-	case E_OR:
-		return expr_alloc_and(
-		    expr_simplify_unmet_dep(e1->left.expr, e2),
-		    expr_simplify_unmet_dep(e1->right.expr, e2));
-	case E_AND: {
-		struct expr *e;
-		e = expr_alloc_and(expr_copy(e1), expr_copy(e2));
-		e = expr_eliminate_dups(e);
-		ret = (!expr_eq(e, e1)) ? e1 : NULL;
-		expr_free(e);
-		break;
-		}
-	default:
-		ret = e1;
-		break;
-	}
-
-	return expr_get_leftmost_symbol(ret);
-}
-
-void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken)
-{
-	if (!e) {
-		fn(data, NULL, "y");
-		return;
-	}
-
-	if (expr_compare_type(prevtoken, e->type) > 0)
-		fn(data, NULL, "(");
-	switch (e->type) {
-	case E_SYMBOL:
-		if (e->left.sym->name)
-			fn(data, e->left.sym, e->left.sym->name);
-		else
-			fn(data, NULL, "<choice>");
-		break;
-	case E_NOT:
-		fn(data, NULL, "!");
-		expr_print(e->left.expr, fn, data, E_NOT);
-		break;
-	case E_EQUAL:
-		if (e->left.sym->name)
-			fn(data, e->left.sym, e->left.sym->name);
-		else
-			fn(data, NULL, "<choice>");
-		fn(data, NULL, "=");
-		fn(data, e->right.sym, e->right.sym->name);
-		break;
-	case E_UNEQUAL:
-		if (e->left.sym->name)
-			fn(data, e->left.sym, e->left.sym->name);
-		else
-			fn(data, NULL, "<choice>");
-		fn(data, NULL, "!=");
-		fn(data, e->right.sym, e->right.sym->name);
-		break;
-	case E_OR:
-		expr_print(e->left.expr, fn, data, E_OR);
-		fn(data, NULL, " || ");
-		expr_print(e->right.expr, fn, data, E_OR);
-		break;
-	case E_AND:
-		expr_print(e->left.expr, fn, data, E_AND);
-		fn(data, NULL, " && ");
-		expr_print(e->right.expr, fn, data, E_AND);
-		break;
-	case E_LIST:
-		fn(data, e->right.sym, e->right.sym->name);
-		if (e->left.expr) {
-			fn(data, NULL, " ^ ");
-			expr_print(e->left.expr, fn, data, E_LIST);
-		}
-		break;
-	case E_RANGE:
-		fn(data, NULL, "[");
-		fn(data, e->left.sym, e->left.sym->name);
-		fn(data, NULL, " ");
-		fn(data, e->right.sym, e->right.sym->name);
-		fn(data, NULL, "]");
-		break;
-	default:
-	  {
-		char buf[32];
-		sprintf(buf, "<unknown type %d>", e->type);
-		fn(data, NULL, buf);
-		break;
-	  }
-	}
-	if (expr_compare_type(prevtoken, e->type) > 0)
-		fn(data, NULL, ")");
-}
-
-static void expr_print_file_helper(void *data, struct symbol *sym, const char *str)
-{
-	xfwrite(str, strlen(str), 1, data);
-}
-
-void expr_fprint(struct expr *e, FILE *out)
-{
-	expr_print(e, expr_print_file_helper, out, E_NONE);
-}
-
-static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str)
-{
-	struct gstr *gs = (struct gstr*)data;
-	const char *sym_str = NULL;
-
-	if (sym)
-		sym_str = sym_get_string_value(sym);
-
-	if (gs->max_width) {
-		unsigned extra_length = strlen(str);
-		const char *last_cr = strrchr(gs->s, '\n');
-		unsigned last_line_length;
-
-		if (sym_str)
-			extra_length += 4 + strlen(sym_str);
-
-		if (!last_cr)
-			last_cr = gs->s;
-
-		last_line_length = strlen(gs->s) - (last_cr - gs->s);
-
-		if ((last_line_length + extra_length) > gs->max_width)
-			str_append(gs, "\\\n");
-	}
-
-	str_append(gs, str);
-	if (sym && sym->type != S_UNKNOWN)
-		str_printf(gs, " [=%s]", sym_str);
-}
-
-void expr_gstr_print(struct expr *e, struct gstr *gs)
-{
-	expr_print(e, expr_print_gstr_helper, gs, E_NONE);
-}
diff --git a/support/kconfig/expr.h b/support/kconfig/expr.h
deleted file mode 100644
index ba663e1d..00000000
--- a/support/kconfig/expr.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#ifndef EXPR_H
-#define EXPR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <assert.h>
-#include <stdio.h>
-#include "list.h"
-#ifndef __cplusplus
-#include <stdbool.h>
-#endif
-
-struct file {
-	struct file *next;
-	struct file *parent;
-	const char *name;
-	int lineno;
-};
-
-typedef enum tristate {
-	no, mod, yes
-} tristate;
-
-enum expr_type {
-	E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_LIST, E_SYMBOL, E_RANGE
-};
-
-union expr_data {
-	struct expr *expr;
-	struct symbol *sym;
-};
-
-struct expr {
-	enum expr_type type;
-	union expr_data left, right;
-};
-
-#define EXPR_OR(dep1, dep2)	(((dep1)>(dep2))?(dep1):(dep2))
-#define EXPR_AND(dep1, dep2)	(((dep1)<(dep2))?(dep1):(dep2))
-#define EXPR_NOT(dep)		(2-(dep))
-
-#define expr_list_for_each_sym(l, e, s) \
-	for (e = (l); e && (s = e->right.sym); e = e->left.expr)
-
-struct expr_value {
-	struct expr *expr;
-	tristate tri;
-};
-
-struct symbol_value {
-	void *val;
-	tristate tri;
-};
-
-enum symbol_type {
-	S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
-};
-
-/* enum values are used as index to symbol.def[] */
-enum {
-	S_DEF_USER,		/* main user value */
-	S_DEF_AUTO,		/* values read from auto.conf */
-	S_DEF_DEF3,		/* Reserved for UI usage */
-	S_DEF_DEF4,		/* Reserved for UI usage */
-	S_DEF_COUNT
-};
-
-struct symbol {
-	struct symbol *next;
-	char *name;
-	enum symbol_type type;
-	struct symbol_value curr;
-	struct symbol_value def[S_DEF_COUNT];
-	tristate visible;
-	int flags;
-	struct property *prop;
-	struct expr_value dir_dep;
-	struct expr_value rev_dep;
-};
-
-#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
-
-#define SYMBOL_CONST      0x0001  /* symbol is const */
-#define SYMBOL_CHECK      0x0008  /* used during dependency checking */
-#define SYMBOL_CHOICE     0x0010  /* start of a choice block (null name) */
-#define SYMBOL_CHOICEVAL  0x0020  /* used as a value in a choice block */
-#define SYMBOL_VALID      0x0080  /* set when symbol.curr is calculated */
-#define SYMBOL_OPTIONAL   0x0100  /* choice is optional - values can be 'n' */
-#define SYMBOL_WRITE      0x0200  /* write symbol to file (KCONFIG_CONFIG) */
-#define SYMBOL_CHANGED    0x0400  /* ? */
-#define SYMBOL_AUTO       0x1000  /* value from environment variable */
-#define SYMBOL_CHECKED    0x2000  /* used during dependency checking */
-#define SYMBOL_WARNED     0x8000  /* warning has been issued */
-
-/* Set when symbol.def[] is used */
-#define SYMBOL_DEF        0x10000  /* First bit of SYMBOL_DEF */
-#define SYMBOL_DEF_USER   0x10000  /* symbol.def[S_DEF_USER] is valid */
-#define SYMBOL_DEF_AUTO   0x20000  /* symbol.def[S_DEF_AUTO] is valid */
-#define SYMBOL_DEF3       0x40000  /* symbol.def[S_DEF_3] is valid */
-#define SYMBOL_DEF4       0x80000  /* symbol.def[S_DEF_4] is valid */
-
-/* choice values need to be set before calculating this symbol value */
-#define SYMBOL_NEED_SET_CHOICE_VALUES  0x100000
-
-#define SYMBOL_MAXLENGTH	256
-#define SYMBOL_HASHSIZE		9973
-
-/* A property represent the config options that can be associated
- * with a config "symbol".
- * Sample:
- * config FOO
- *         default y
- *         prompt "foo prompt"
- *         select BAR
- * config BAZ
- *         int "BAZ Value"
- *         range 1..255
- */
-enum prop_type {
-	P_UNKNOWN,
-	P_PROMPT,   /* prompt "foo prompt" or "BAZ Value" */
-	P_COMMENT,  /* text associated with a comment */
-	P_MENU,     /* prompt associated with a menuconfig option */
-	P_DEFAULT,  /* default y */
-	P_CHOICE,   /* choice value */
-	P_SELECT,   /* select BAR */
-	P_RANGE,    /* range 7..100 (for a symbol) */
-	P_ENV,      /* value from environment variable */
-	P_SYMBOL,   /* where a symbol is defined */
-};
-
-struct property {
-	struct property *next;     /* next property - null if last */
-	struct symbol *sym;        /* the symbol for which the property is associated */
-	enum prop_type type;       /* type of property */
-	const char *text;          /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */
-	struct expr_value visible;
-	struct expr *expr;         /* the optional conditional part of the property */
-	struct menu *menu;         /* the menu the property are associated with
-	                            * valid for: P_SELECT, P_RANGE, P_CHOICE,
-	                            * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */
-	struct file *file;         /* what file was this property defined */
-	int lineno;                /* what lineno was this property defined */
-};
-
-#define for_all_properties(sym, st, tok) \
-	for (st = sym->prop; st; st = st->next) \
-		if (st->type == (tok))
-#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT)
-#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE)
-#define for_all_prompts(sym, st) \
-	for (st = sym->prop; st; st = st->next) \
-		if (st->text)
-
-struct menu {
-	struct menu *next;
-	struct menu *parent;
-	struct menu *list;
-	struct symbol *sym;
-	struct property *prompt;
-	struct expr *visibility;
-	struct expr *dep;
-	unsigned int flags;
-	char *help;
-	struct file *file;
-	int lineno;
-	void *data;
-};
-
-#define MENU_CHANGED		0x0001
-#define MENU_ROOT		0x0002
-
-struct jump_key {
-	struct list_head entries;
-	size_t offset;
-	struct menu *target;
-	int index;
-};
-
-#define JUMP_NB			9
-
-extern struct file *file_list;
-extern struct file *current_file;
-struct file *lookup_file(const char *name);
-
-extern struct symbol symbol_yes, symbol_no, symbol_mod;
-extern struct symbol *modules_sym;
-extern struct symbol *sym_defconfig_list;
-extern int cdebug;
-struct expr *expr_alloc_symbol(struct symbol *sym);
-struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
-struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2);
-struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2);
-struct expr *expr_alloc_and(struct expr *e1, struct expr *e2);
-struct expr *expr_alloc_or(struct expr *e1, struct expr *e2);
-struct expr *expr_copy(const struct expr *org);
-void expr_free(struct expr *e);
-int expr_eq(struct expr *e1, struct expr *e2);
-void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
-tristate expr_calc_value(struct expr *e);
-struct expr *expr_eliminate_yn(struct expr *e);
-struct expr *expr_trans_bool(struct expr *e);
-struct expr *expr_eliminate_dups(struct expr *e);
-struct expr *expr_transform(struct expr *e);
-int expr_contains_symbol(struct expr *dep, struct symbol *sym);
-bool expr_depends_symbol(struct expr *dep, struct symbol *sym);
-struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2);
-struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
-void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2);
-struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
-struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2);
-
-void expr_fprint(struct expr *e, FILE *out);
-struct gstr; /* forward */
-void expr_gstr_print(struct expr *e, struct gstr *gs);
-
-static inline int expr_is_yes(struct expr *e)
-{
-	return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes);
-}
-
-static inline int expr_is_no(struct expr *e)
-{
-	return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* EXPR_H */
diff --git a/support/kconfig/fixdep.c b/support/kconfig/fixdep.c
deleted file mode 100644
index f80a0c49..00000000
--- a/support/kconfig/fixdep.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * "Optimize" a list of dependencies as spit out by gcc -MD
- * for the kernel build
- * ===========================================================================
- *
- * Author       Kai Germaschewski
- * Copyright    2002 by Kai Germaschewski  <kai.germaschewski@gmx.de>
- *
- * This software may be used and distributed according to the terms
- * of the GNU General Public License, incorporated herein by reference.
- *
- *
- * Introduction:
- *
- * gcc produces a very nice and correct list of dependencies which
- * tells make when to remake a file.
- *
- * To use this list as-is however has the drawback that virtually
- * every file in the kernel includes autoconf.h.
- *
- * If the user re-runs make *config, autoconf.h will be
- * regenerated.  make notices that and will rebuild every file which
- * includes autoconf.h, i.e. basically all files. This is extremely
- * annoying if the user just changed CONFIG_HIS_DRIVER from n to m.
- *
- * So we play the same trick that "mkdep" played before. We replace
- * the dependency on autoconf.h by a dependency on every config
- * option which is mentioned in any of the listed prerequisites.
- *
- * kconfig populates a tree in include/config/ with an empty file
- * for each config symbol and when the configuration is updated
- * the files representing changed config options are touched
- * which then let make pick up the changes and the files that use
- * the config symbols are rebuilt.
- *
- * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
- * which depend on "include/config/his/driver.h" will be rebuilt,
- * so most likely only his driver ;-)
- *
- * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
- *
- * So to get dependencies right, there are two issues:
- * o if any of the files the compiler read changed, we need to rebuild
- * o if the command line given to the compile the file changed, we
- *   better rebuild as well.
- *
- * The former is handled by using the -MD output, the later by saving
- * the command line used to compile the old object and comparing it
- * to the one we would now use.
- *
- * Again, also this idea is pretty old and has been discussed on
- * kbuild-devel a long time ago. I don't have a sensibly working
- * internet connection right now, so I rather don't mention names
- * without double checking.
- *
- * This code here has been based partially based on mkdep.c, which
- * says the following about its history:
- *
- *   Copyright abandoned, Michael Chastain, <mailto:mec@shout.net>.
- *   This is a C version of syncdep.pl by Werner Almesberger.
- *
- *
- * It is invoked as
- *
- *   fixdep <depfile> <target> <cmdline>
- *
- * and will read the dependency file <depfile>
- *
- * The transformed dependency snipped is written to stdout.
- *
- * It first generates a line
- *
- *   cmd_<target> = <cmdline>
- *
- * and then basically copies the .<target>.d file to stdout, in the
- * process filtering out the dependency on autoconf.h and adding
- * dependencies on include/config/my/option.h for every
- * CONFIG_MY_OPTION encountered in any of the prerequisites.
- *
- * It will also filter out all the dependencies on *.ver. We need
- * to make sure that the generated version checksum are globally up
- * to date before even starting the recursive build, so it's too late
- * at this point anyway.
- *
- * We don't even try to really parse the header files, but
- * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will
- * be picked up as well. It's not a problem with respect to
- * correctness, since that can only give too many dependencies, thus
- * we cannot miss a rebuild. Since people tend to not mention totally
- * unrelated CONFIG_ options all over the place, it's not an
- * efficiency problem either.
- *
- * (Note: it'd be easy to port over the complete mkdep state machine,
- *  but I don't think the added complexity is worth it)
- *
- * This source is copied from linux kernel
- * (scripts/basic/fixdep.c). Tag 4.17-rc1, commit
- * 60cc43fc888428bb2f18f08997432d426a243338
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-
-/* The global variable is a bit against the style of fixdep. But this
- * reduces number of changed lines significantly. Which hopefully will
- * make it easier to merge with newer version from linux source tree.
- */
-static const char *builddir;
-
-static void usage(void)
-{
-	fprintf(stderr, "Usage: fixdep [-e] <depfile> <target> <cmdline> <builddir>\n");
-	fprintf(stderr, " -e  insert extra dependencies given on stdin\n");
-	exit(1);
-}
-
-/*
- * Print out a dependency path from a symbol name
- */
-static void print_dep(const char *m, int slen, const char *dir)
-{
-	int c, i;
-
-	printf("    $(wildcard %s/%s/", builddir, dir);
-	for (i = 0; i < slen; i++) {
-		c = m[i];
-		if (c == '_')
-			c = '/';
-		else
-			c = tolower(c);
-		putchar(c);
-	}
-	printf(".h) \\\n");
-}
-
-static void do_extra_deps(void)
-{
-	char buf[80];
-
-	while (fgets(buf, sizeof(buf), stdin)) {
-		int len = strlen(buf);
-
-		if (len < 2 || buf[len - 1] != '\n') {
-			fprintf(stderr, "fixdep: bad data on stdin\n");
-			exit(1);
-		}
-		print_dep(buf, len - 1, "include/ksym");
-	}
-}
-
-struct item {
-	struct item	*next;
-	unsigned int	len;
-	unsigned int	hash;
-	char		name[0];
-};
-
-#define HASHSZ 256
-static struct item *hashtab[HASHSZ];
-
-static unsigned int strhash(const char *str, unsigned int sz)
-{
-	/* fnv32 hash */
-	unsigned int i, hash = 2166136261U;
-
-	for (i = 0; i < sz; i++)
-		hash = (hash ^ str[i]) * 0x01000193;
-	return hash;
-}
-
-/*
- * Lookup a value in the configuration string.
- */
-static int is_defined_config(const char *name, int len, unsigned int hash)
-{
-	struct item *aux;
-
-	for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) {
-		if (aux->hash == hash && aux->len == len &&
-		    memcmp(aux->name, name, len) == 0)
-			return 1;
-	}
-	return 0;
-}
-
-/*
- * Add a new value to the configuration string.
- */
-static void define_config(const char *name, int len, unsigned int hash)
-{
-	struct item *aux = malloc(sizeof(*aux) + len);
-
-	if (!aux) {
-		perror("fixdep:malloc");
-		exit(1);
-	}
-	memcpy(aux->name, name, len);
-	aux->len = len;
-	aux->hash = hash;
-	aux->next = hashtab[hash % HASHSZ];
-	hashtab[hash % HASHSZ] = aux;
-}
-
-/*
- * Record the use of a CONFIG_* word.
- */
-static void use_config(const char *m, int slen)
-{
-	unsigned int hash = strhash(m, slen);
-
-	if (is_defined_config(m, slen, hash))
-		return;
-
-	define_config(m, slen, hash);
-	print_dep(m, slen, "kconfig/depinclude");
-}
-
-/* test if s ends in sub */
-static int str_ends_with(const char *s, int slen, const char *sub)
-{
-	int sublen = strlen(sub);
-
-	if (sublen > slen)
-		return 0;
-
-	return !memcmp(s + slen - sublen, sub, sublen);
-}
-
-static void parse_config_file(const char *p)
-{
-	const char *q, *r;
-	const char *start = p;
-
-	while ((p = strstr(p, "CONFIG_"))) {
-		if (p > start && (isalnum(p[-1]) || p[-1] == '_')) {
-			p += 7;
-			continue;
-		}
-		p += 7;
-		q = p;
-		while (*q && (isalnum(*q) || *q == '_'))
-			q++;
-		if (str_ends_with(p, q - p, "_MODULE"))
-			r = q - 7;
-		else
-			r = q;
-		if (r > p)
-			use_config(p, r - p);
-		p = q;
-	}
-}
-
-static void *read_file(const char *filename)
-{
-	struct stat st;
-	int fd;
-	char *buf;
-
-	fd = open(filename, O_RDONLY);
-	if (fd < 0) {
-		fprintf(stderr, "fixdep: error opening file: ");
-		perror(filename);
-		exit(2);
-	}
-	if (fstat(fd, &st) < 0) {
-		fprintf(stderr, "fixdep: error fstat'ing file: ");
-		perror(filename);
-		exit(2);
-	}
-	buf = malloc(st.st_size + 1);
-	if (!buf) {
-		perror("fixdep: malloc");
-		exit(2);
-	}
-	if (read(fd, buf, st.st_size) != st.st_size) {
-		perror("fixdep: read");
-		exit(2);
-	}
-	buf[st.st_size] = '\0';
-	close(fd);
-
-	return buf;
-}
-
-/* Ignore certain dependencies */
-static int is_ignored_file(const char *s, int len)
-{
-	return str_ends_with(s, len, "build/include/uk/_config.h");
-}
-
-/*
- * Important: The below generated source_foo.o and deps_foo.o variable
- * assignments are parsed not only by make, but also by the rather simple
- * parser in scripts/mod/sumversion.c.
- */
-static void parse_dep_file(char *m, const char *target, int insert_extra_deps)
-{
-	char *p;
-	int is_last, is_target;
-	int saw_any_target = 0;
-	int is_first_dep = 0;
-	void *buf;
-
-	while (1) {
-		/* Skip any "white space" */
-		while (*m == ' ' || *m == '\\' || *m == '\n')
-			m++;
-
-		if (!*m)
-			break;
-
-		/* Find next "white space" */
-		p = m;
-		while (*p && *p != ' ' && *p != '\\' && *p != '\n')
-			p++;
-		is_last = (*p == '\0');
-		/* Is the token we found a target name? */
-		is_target = (*(p-1) == ':');
-		/* Don't write any target names into the dependency file */
-		if (is_target) {
-			/* The /next/ file is the first dependency */
-			is_first_dep = 1;
-		} else if (!is_ignored_file(m, p - m)) {
-			*p = '\0';
-
-			/*
-			 * Do not list the source file as dependency, so that
-			 * kbuild is not confused if a .c file is rewritten
-			 * into .S or vice versa. Storing it in source_* is
-			 * needed for modpost to compute srcversions.
-			 */
-			if (is_first_dep) {
-				/*
-				 * If processing the concatenation of multiple
-				 * dependency files, only process the first
-				 * target name, which will be the original
-				 * source name, and ignore any other target
-				 * names, which will be intermediate temporary
-				 * files.
-				 */
-				if (!saw_any_target) {
-					saw_any_target = 1;
-					printf("source_%s := %s\n\n",
-					       target, m);
-					printf("deps_%s := \\\n", target);
-				}
-				is_first_dep = 0;
-			} else {
-				printf("  %s \\\n", m);
-			}
-
-			buf = read_file(m);
-			parse_config_file(buf);
-			free(buf);
-		}
-
-		if (is_last)
-			break;
-
-		/*
-		 * Start searching for next token immediately after the first
-		 * "whitespace" character that follows this token.
-		 */
-		m = p + 1;
-	}
-
-	if (!saw_any_target) {
-		fprintf(stderr, "fixdep: parse error; no targets found\n");
-		exit(1);
-	}
-
-	if (insert_extra_deps)
-		do_extra_deps();
-
-	printf("\n%s: $(deps_%s)\n\n", target, target);
-	printf("$(deps_%s):\n", target);
-}
-
-int main(int argc, char *argv[])
-{
-	const char *depfile, *target, *cmdline;
-	int insert_extra_deps = 0;
-	void *buf;
-
-	if (argc == 6 && !strcmp(argv[1], "-e")) {
-		insert_extra_deps = 1;
-		argv++;
-	} else if (argc != 5)
-		usage();
-
-	depfile = argv[1];
-	target = argv[2];
-	cmdline = argv[3];
-	builddir = argv[4];
-
-	printf("cmd_%s := %s\n\n", target, cmdline);
-
-	buf = read_file(depfile);
-	parse_dep_file(buf, target, insert_extra_deps);
-	free(buf);
-
-	return 0;
-}
diff --git a/support/kconfig/foo.h b/support/kconfig/foo.h
deleted file mode 100644
index b9cfdf83..00000000
--- a/support/kconfig/foo.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __KCONFIG_FOO_H
-#define __KCONFIG_FOO_H
-
-#ifndef __APPLE__
-#include <features.h>
-#endif
-#include <limits.h>
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-#endif /* __KCONFIG_FOO_H */
diff --git a/support/kconfig/gconf.c b/support/kconfig/gconf.c
deleted file mode 100644
index 7cbe68eb..00000000
--- a/support/kconfig/gconf.c
+++ /dev/null
@@ -1,1542 +0,0 @@
-/* Hey EMACS -*- linux-c -*- */
-/*
- *
- * Copyright (C) 2002-2003 Romain Lievin <roms@tilp.info>
- * Released under the terms of the GNU GPL v2.0.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include "lkc.h"
-#include "images.c"
-
-#include <glade/glade.h>
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <gdk/gdkkeysyms.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <time.h>
-
-//#define DEBUG
-
-enum {
-	SINGLE_VIEW, SPLIT_VIEW, FULL_VIEW
-};
-
-enum {
-	OPT_NORMAL, OPT_ALL, OPT_PROMPT
-};
-
-static gint view_mode = FULL_VIEW;
-static gboolean show_name = TRUE;
-static gboolean show_range = TRUE;
-static gboolean show_value = TRUE;
-static gboolean resizeable = FALSE;
-static int opt_mode = OPT_NORMAL;
-
-GtkWidget *main_wnd = NULL;
-GtkWidget *tree1_w = NULL;	// left  frame
-GtkWidget *tree2_w = NULL;	// right frame
-GtkWidget *text_w = NULL;
-GtkWidget *hpaned = NULL;
-GtkWidget *vpaned = NULL;
-GtkWidget *back_btn = NULL;
-GtkWidget *save_btn = NULL;
-GtkWidget *save_menu_item = NULL;
-
-GtkTextTag *tag1, *tag2;
-GdkColor color;
-
-GtkTreeStore *tree1, *tree2, *tree;
-GtkTreeModel *model1, *model2;
-static GtkTreeIter *parents[256];
-static gint indent;
-
-static struct menu *current; // current node for SINGLE view
-static struct menu *browsed; // browsed node for SPLIT view
-
-enum {
-	COL_OPTION, COL_NAME, COL_NO, COL_MOD, COL_YES, COL_VALUE,
-	COL_MENU, COL_COLOR, COL_EDIT, COL_PIXBUF,
-	COL_PIXVIS, COL_BTNVIS, COL_BTNACT, COL_BTNINC, COL_BTNRAD,
-	COL_NUMBER
-};
-
-static void display_list(void);
-static void display_tree(struct menu *menu);
-static void display_tree_part(void);
-static void update_tree(struct menu *src, GtkTreeIter * dst);
-static void set_node(GtkTreeIter * node, struct menu *menu, gchar ** row);
-static gchar **fill_row(struct menu *menu);
-static void conf_changed(void);
-
-/* Helping/Debugging Functions */
-
-const char *dbg_sym_flags(int val)
-{
-	static char buf[256];
-
-	bzero(buf, 256);
-
-	if (val & SYMBOL_CONST)
-		strcat(buf, "const/");
-	if (val & SYMBOL_CHECK)
-		strcat(buf, "check/");
-	if (val & SYMBOL_CHOICE)
-		strcat(buf, "choice/");
-	if (val & SYMBOL_CHOICEVAL)
-		strcat(buf, "choiceval/");
-	if (val & SYMBOL_VALID)
-		strcat(buf, "valid/");
-	if (val & SYMBOL_OPTIONAL)
-		strcat(buf, "optional/");
-	if (val & SYMBOL_WRITE)
-		strcat(buf, "write/");
-	if (val & SYMBOL_CHANGED)
-		strcat(buf, "changed/");
-	if (val & SYMBOL_AUTO)
-		strcat(buf, "auto/");
-
-	buf[strlen(buf) - 1] = '\0';
-
-	return buf;
-}
-
-void replace_button_icon(GladeXML * xml, GdkDrawable * window,
-			 GtkStyle * style, gchar * btn_name, gchar ** xpm)
-{
-	GdkPixmap *pixmap;
-	GdkBitmap *mask;
-	GtkToolButton *button;
-	GtkWidget *image;
-
-	pixmap = gdk_pixmap_create_from_xpm_d(window, &mask,
-					      &style->bg[GTK_STATE_NORMAL],
-					      xpm);
-
-	button = GTK_TOOL_BUTTON(glade_xml_get_widget(xml, btn_name));
-	image = gtk_image_new_from_pixmap(pixmap, mask);
-	gtk_widget_show(image);
-	gtk_tool_button_set_icon_widget(button, image);
-}
-
-/* Main Window Initialization */
-void init_main_window(const gchar * glade_file)
-{
-	GladeXML *xml;
-	GtkWidget *widget;
-	GtkTextBuffer *txtbuf;
-	GtkStyle *style;
-
-	xml = glade_xml_new(glade_file, "window1", NULL);
-	if (!xml)
-		g_error(_("GUI loading failed !\n"));
-	glade_xml_signal_autoconnect(xml);
-
-	main_wnd = glade_xml_get_widget(xml, "window1");
-	hpaned = glade_xml_get_widget(xml, "hpaned1");
-	vpaned = glade_xml_get_widget(xml, "vpaned1");
-	tree1_w = glade_xml_get_widget(xml, "treeview1");
-	tree2_w = glade_xml_get_widget(xml, "treeview2");
-	text_w = glade_xml_get_widget(xml, "textview3");
-
-	back_btn = glade_xml_get_widget(xml, "button1");
-	gtk_widget_set_sensitive(back_btn, FALSE);
-
-	widget = glade_xml_get_widget(xml, "show_name1");
-	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,
-				       show_name);
-
-	widget = glade_xml_get_widget(xml, "show_range1");
-	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,
-				       show_range);
-
-	widget = glade_xml_get_widget(xml, "show_data1");
-	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,
-				       show_value);
-
-	save_btn = glade_xml_get_widget(xml, "button3");
-	save_menu_item = glade_xml_get_widget(xml, "save1");
-	conf_set_changed_callback(conf_changed);
-
-	style = gtk_widget_get_style(main_wnd);
-	widget = glade_xml_get_widget(xml, "toolbar1");
-
-#if 0	/* Use stock Gtk icons instead */
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button1", (gchar **) xpm_back);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button2", (gchar **) xpm_load);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button3", (gchar **) xpm_save);
-#endif
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button4", (gchar **) xpm_single_view);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button5", (gchar **) xpm_split_view);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button6", (gchar **) xpm_tree_view);
-
-#if 0
-	switch (view_mode) {
-	case SINGLE_VIEW:
-		widget = glade_xml_get_widget(xml, "button4");
-		g_signal_emit_by_name(widget, "clicked");
-		break;
-	case SPLIT_VIEW:
-		widget = glade_xml_get_widget(xml, "button5");
-		g_signal_emit_by_name(widget, "clicked");
-		break;
-	case FULL_VIEW:
-		widget = glade_xml_get_widget(xml, "button6");
-		g_signal_emit_by_name(widget, "clicked");
-		break;
-	}
-#endif
-	txtbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));
-	tag1 = gtk_text_buffer_create_tag(txtbuf, "mytag1",
-					  "foreground", "red",
-					  "weight", PANGO_WEIGHT_BOLD,
-					  NULL);
-	tag2 = gtk_text_buffer_create_tag(txtbuf, "mytag2",
-					  /*"style", PANGO_STYLE_OBLIQUE, */
-					  NULL);
-
-	gtk_window_set_title(GTK_WINDOW(main_wnd), rootmenu.prompt->text);
-
-	gtk_widget_show(main_wnd);
-}
-
-void init_tree_model(void)
-{
-	gint i;
-
-	tree = tree2 = gtk_tree_store_new(COL_NUMBER,
-					  G_TYPE_STRING, G_TYPE_STRING,
-					  G_TYPE_STRING, G_TYPE_STRING,
-					  G_TYPE_STRING, G_TYPE_STRING,
-					  G_TYPE_POINTER, GDK_TYPE_COLOR,
-					  G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF,
-					  G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-					  G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-					  G_TYPE_BOOLEAN);
-	model2 = GTK_TREE_MODEL(tree2);
-
-	for (parents[0] = NULL, i = 1; i < 256; i++)
-		parents[i] = (GtkTreeIter *) g_malloc(sizeof(GtkTreeIter));
-
-	tree1 = gtk_tree_store_new(COL_NUMBER,
-				   G_TYPE_STRING, G_TYPE_STRING,
-				   G_TYPE_STRING, G_TYPE_STRING,
-				   G_TYPE_STRING, G_TYPE_STRING,
-				   G_TYPE_POINTER, GDK_TYPE_COLOR,
-				   G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF,
-				   G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-				   G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-				   G_TYPE_BOOLEAN);
-	model1 = GTK_TREE_MODEL(tree1);
-}
-
-void init_left_tree(void)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(tree1_w);
-	GtkCellRenderer *renderer;
-	GtkTreeSelection *sel;
-	GtkTreeViewColumn *column;
-
-	gtk_tree_view_set_model(view, model1);
-	gtk_tree_view_set_headers_visible(view, TRUE);
-	gtk_tree_view_set_rules_hint(view, TRUE);
-
-	column = gtk_tree_view_column_new();
-	gtk_tree_view_append_column(view, column);
-	gtk_tree_view_column_set_title(column, _("Options"));
-
-	renderer = gtk_cell_renderer_toggle_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "active", COL_BTNACT,
-					    "inconsistent", COL_BTNINC,
-					    "visible", COL_BTNVIS,
-					    "radio", COL_BTNRAD, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "text", COL_OPTION,
-					    "foreground-gdk",
-					    COL_COLOR, NULL);
-
-	sel = gtk_tree_view_get_selection(view);
-	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
-	gtk_widget_realize(tree1_w);
-}
-
-static void renderer_edited(GtkCellRendererText * cell,
-			    const gchar * path_string,
-			    const gchar * new_text, gpointer user_data);
-
-void init_right_tree(void)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(tree2_w);
-	GtkCellRenderer *renderer;
-	GtkTreeSelection *sel;
-	GtkTreeViewColumn *column;
-	gint i;
-
-	gtk_tree_view_set_model(view, model2);
-	gtk_tree_view_set_headers_visible(view, TRUE);
-	gtk_tree_view_set_rules_hint(view, TRUE);
-
-	column = gtk_tree_view_column_new();
-	gtk_tree_view_append_column(view, column);
-	gtk_tree_view_column_set_title(column, _("Options"));
-
-	renderer = gtk_cell_renderer_pixbuf_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "pixbuf", COL_PIXBUF,
-					    "visible", COL_PIXVIS, NULL);
-	renderer = gtk_cell_renderer_toggle_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "active", COL_BTNACT,
-					    "inconsistent", COL_BTNINC,
-					    "visible", COL_BTNVIS,
-					    "radio", COL_BTNRAD, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "text", COL_OPTION,
-					    "foreground-gdk",
-					    COL_COLOR, NULL);
-
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    _("Name"), renderer,
-						    "text", COL_NAME,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    "N", renderer,
-						    "text", COL_NO,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    "M", renderer,
-						    "text", COL_MOD,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    "Y", renderer,
-						    "text", COL_YES,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    _("Value"), renderer,
-						    "text", COL_VALUE,
-						    "editable",
-						    COL_EDIT,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	g_signal_connect(G_OBJECT(renderer), "edited",
-			 G_CALLBACK(renderer_edited), NULL);
-
-	column = gtk_tree_view_get_column(view, COL_NAME);
-	gtk_tree_view_column_set_visible(column, show_name);
-	column = gtk_tree_view_get_column(view, COL_NO);
-	gtk_tree_view_column_set_visible(column, show_range);
-	column = gtk_tree_view_get_column(view, COL_MOD);
-	gtk_tree_view_column_set_visible(column, show_range);
-	column = gtk_tree_view_get_column(view, COL_YES);
-	gtk_tree_view_column_set_visible(column, show_range);
-	column = gtk_tree_view_get_column(view, COL_VALUE);
-	gtk_tree_view_column_set_visible(column, show_value);
-
-	if (resizeable) {
-		for (i = 0; i < COL_VALUE; i++) {
-			column = gtk_tree_view_get_column(view, i);
-			gtk_tree_view_column_set_resizable(column, TRUE);
-		}
-	}
-
-	sel = gtk_tree_view_get_selection(view);
-	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
-}
-
-
-/* Utility Functions */
-
-
-static void text_insert_help(struct menu *menu)
-{
-	GtkTextBuffer *buffer;
-	GtkTextIter start, end;
-	const char *prompt = _(menu_get_prompt(menu));
-	struct gstr help = str_new();
-
-	menu_get_ext_help(menu, &help);
-
-	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));
-	gtk_text_buffer_get_bounds(buffer, &start, &end);
-	gtk_text_buffer_delete(buffer, &start, &end);
-	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15);
-
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, prompt, -1, tag1,
-					 NULL);
-	gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2);
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, str_get(&help), -1, tag2,
-					 NULL);
-	str_free(&help);
-}
-
-
-static void text_insert_msg(const char *title, const char *message)
-{
-	GtkTextBuffer *buffer;
-	GtkTextIter start, end;
-	const char *msg = message;
-
-	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));
-	gtk_text_buffer_get_bounds(buffer, &start, &end);
-	gtk_text_buffer_delete(buffer, &start, &end);
-	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15);
-
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, title, -1, tag1,
-					 NULL);
-	gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2);
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, msg, -1, tag2,
-					 NULL);
-}
-
-
-/* Main Windows Callbacks */
-
-void on_save_activate(GtkMenuItem * menuitem, gpointer user_data);
-gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event,
-				 gpointer user_data)
-{
-	GtkWidget *dialog, *label;
-	gint result;
-
-	if (!conf_get_changed())
-		return FALSE;
-
-	dialog = gtk_dialog_new_with_buttons(_("Warning !"),
-					     GTK_WINDOW(main_wnd),
-					     (GtkDialogFlags)
-					     (GTK_DIALOG_MODAL |
-					      GTK_DIALOG_DESTROY_WITH_PARENT),
-					     GTK_STOCK_OK,
-					     GTK_RESPONSE_YES,
-					     GTK_STOCK_NO,
-					     GTK_RESPONSE_NO,
-					     GTK_STOCK_CANCEL,
-					     GTK_RESPONSE_CANCEL, NULL);
-	gtk_dialog_set_default_response(GTK_DIALOG(dialog),
-					GTK_RESPONSE_CANCEL);
-
-	label = gtk_label_new(_("\nSave configuration ?\n"));
-	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
-	gtk_widget_show(label);
-
-	result = gtk_dialog_run(GTK_DIALOG(dialog));
-	switch (result) {
-	case GTK_RESPONSE_YES:
-		on_save_activate(NULL, NULL);
-		return FALSE;
-	case GTK_RESPONSE_NO:
-		return FALSE;
-	case GTK_RESPONSE_CANCEL:
-	case GTK_RESPONSE_DELETE_EVENT:
-	default:
-		gtk_widget_destroy(dialog);
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-
-void on_window1_destroy(GtkObject * object, gpointer user_data)
-{
-	gtk_main_quit();
-}
-
-
-void
-on_window1_size_request(GtkWidget * widget,
-			GtkRequisition * requisition, gpointer user_data)
-{
-	static gint old_h;
-	gint w, h;
-
-	if (widget->window == NULL)
-		gtk_window_get_default_size(GTK_WINDOW(main_wnd), &w, &h);
-	else
-		gdk_window_get_size(widget->window, &w, &h);
-
-	if (h == old_h)
-		return;
-	old_h = h;
-
-	gtk_paned_set_position(GTK_PANED(vpaned), 2 * h / 3);
-}
-
-
-/* Menu & Toolbar Callbacks */
-
-
-static void
-load_filename(GtkFileSelection * file_selector, gpointer user_data)
-{
-	const gchar *fn;
-
-	fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION
-					     (user_data));
-
-	if (conf_read(fn))
-		text_insert_msg(_("Error"), _("Unable to load configuration !"));
-	else
-		display_tree(&rootmenu);
-}
-
-void on_load1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *fs;
-
-	fs = gtk_file_selection_new(_("Load file..."));
-	g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
-			 "clicked",
-			 G_CALLBACK(load_filename), (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->ok_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->cancel_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	gtk_widget_show(fs);
-}
-
-
-void on_save_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	if (conf_write(NULL))
-		text_insert_msg(_("Error"), _("Unable to save configuration !"));
-}
-
-
-static void
-store_filename(GtkFileSelection * file_selector, gpointer user_data)
-{
-	const gchar *fn;
-
-	fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION
-					     (user_data));
-
-	if (conf_write(fn))
-		text_insert_msg(_("Error"), _("Unable to save configuration !"));
-
-	gtk_widget_destroy(GTK_WIDGET(user_data));
-}
-
-void on_save_as1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *fs;
-
-	fs = gtk_file_selection_new(_("Save file as..."));
-	g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
-			 "clicked",
-			 G_CALLBACK(store_filename), (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->ok_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->cancel_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	gtk_widget_show(fs);
-}
-
-
-void on_quit1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	if (!on_window1_delete_event(NULL, NULL, NULL))
-		gtk_widget_destroy(GTK_WIDGET(main_wnd));
-}
-
-
-void on_show_name1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkTreeViewColumn *col;
-
-	show_name = GTK_CHECK_MENU_ITEM(menuitem)->active;
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_NAME);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_name);
-}
-
-
-void on_show_range1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkTreeViewColumn *col;
-
-	show_range = GTK_CHECK_MENU_ITEM(menuitem)->active;
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_NO);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_range);
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_MOD);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_range);
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_YES);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_range);
-
-}
-
-
-void on_show_data1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkTreeViewColumn *col;
-
-	show_value = GTK_CHECK_MENU_ITEM(menuitem)->active;
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_VALUE);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_value);
-}
-
-
-void
-on_set_option_mode1_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
-	opt_mode = OPT_NORMAL;
-	gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);	/* instead of update_tree to speed-up */
-}
-
-
-void
-on_set_option_mode2_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
-	opt_mode = OPT_ALL;
-	gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);	/* instead of update_tree to speed-up */
-}
-
-
-void
-on_set_option_mode3_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
-	opt_mode = OPT_PROMPT;
-	gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);	/* instead of update_tree to speed-up */
-}
-
-
-void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *dialog;
-	const gchar *intro_text = _(
-	    "Welcome to gkc, the GTK+ graphical configuration tool\n"
-	    "For each option, a blank box indicates the feature is disabled, a\n"
-	    "check indicates it is enabled, and a dot indicates that it is to\n"
-	    "be compiled as a module.  Clicking on the box will cycle through the three states.\n"
-	    "\n"
-	    "If you do not see an option (e.g., a device driver) that you\n"
-	    "believe should be present, try turning on Show All Options\n"
-	    "under the Options menu.\n"
-	    "Although there is no cross reference yet to help you figure out\n"
-	    "what other options must be enabled to support the option you\n"
-	    "are interested in, you can still view the help of a grayed-out\n"
-	    "option.\n"
-	    "\n"
-	    "Toggling Show Debug Info under the Options menu will show \n"
-	    "the dependencies, which you can then match by examining other options.");
-
-	dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_INFO,
-					GTK_BUTTONS_CLOSE, "%s", intro_text);
-	g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
-				 G_CALLBACK(gtk_widget_destroy),
-				 GTK_OBJECT(dialog));
-	gtk_widget_show_all(dialog);
-}
-
-
-void on_about1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *dialog;
-	const gchar *about_text =
-	    _("gkc is copyright (c) 2002 Romain Lievin <roms@lpg.ticalc.org>.\n"
-	      "Based on the source code from Roman Zippel.\n");
-
-	dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_INFO,
-					GTK_BUTTONS_CLOSE, "%s", about_text);
-	g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
-				 G_CALLBACK(gtk_widget_destroy),
-				 GTK_OBJECT(dialog));
-	gtk_widget_show_all(dialog);
-}
-
-
-void on_license1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *dialog;
-	const gchar *license_text =
-	    _("gkc is released under the terms of the GNU GPL v2.\n"
-	      "For more information, please see the source code or\n"
-	      "visit http://www.fsf.org/licenses/licenses.html\n");
-
-	dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_INFO,
-					GTK_BUTTONS_CLOSE, "%s", license_text);
-	g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
-				 G_CALLBACK(gtk_widget_destroy),
-				 GTK_OBJECT(dialog));
-	gtk_widget_show_all(dialog);
-}
-
-
-void on_back_clicked(GtkButton * button, gpointer user_data)
-{
-	enum prop_type ptype;
-
-	current = current->parent;
-	ptype = current->prompt ? current->prompt->type : P_UNKNOWN;
-	if (ptype != P_MENU)
-		current = current->parent;
-	display_tree_part();
-
-	if (current == &rootmenu)
-		gtk_widget_set_sensitive(back_btn, FALSE);
-}
-
-
-void on_load_clicked(GtkButton * button, gpointer user_data)
-{
-	on_load1_activate(NULL, user_data);
-}
-
-
-void on_single_clicked(GtkButton * button, gpointer user_data)
-{
-	view_mode = SINGLE_VIEW;
-	gtk_widget_hide(tree1_w);
-	current = &rootmenu;
-	display_tree_part();
-}
-
-
-void on_split_clicked(GtkButton * button, gpointer user_data)
-{
-	gint w, h;
-	view_mode = SPLIT_VIEW;
-	gtk_widget_show(tree1_w);
-	gtk_window_get_default_size(GTK_WINDOW(main_wnd), &w, &h);
-	gtk_paned_set_position(GTK_PANED(hpaned), w / 2);
-	if (tree2)
-		gtk_tree_store_clear(tree2);
-	display_list();
-
-	/* Disable back btn, like in full mode. */
-	gtk_widget_set_sensitive(back_btn, FALSE);
-}
-
-
-void on_full_clicked(GtkButton * button, gpointer user_data)
-{
-	view_mode = FULL_VIEW;
-	gtk_widget_hide(tree1_w);
-	if (tree2)
-		gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);
-	gtk_widget_set_sensitive(back_btn, FALSE);
-}
-
-
-void on_collapse_clicked(GtkButton * button, gpointer user_data)
-{
-	gtk_tree_view_collapse_all(GTK_TREE_VIEW(tree2_w));
-}
-
-
-void on_expand_clicked(GtkButton * button, gpointer user_data)
-{
-	gtk_tree_view_expand_all(GTK_TREE_VIEW(tree2_w));
-}
-
-
-/* CTree Callbacks */
-
-/* Change hex/int/string value in the cell */
-static void renderer_edited(GtkCellRendererText * cell,
-			    const gchar * path_string,
-			    const gchar * new_text, gpointer user_data)
-{
-	GtkTreePath *path = gtk_tree_path_new_from_string(path_string);
-	GtkTreeIter iter;
-	const char *old_def, *new_def;
-	struct menu *menu;
-	struct symbol *sym;
-
-	if (!gtk_tree_model_get_iter(model2, &iter, path))
-		return;
-
-	gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-	sym = menu->sym;
-
-	gtk_tree_model_get(model2, &iter, COL_VALUE, &old_def, -1);
-	new_def = new_text;
-
-	sym_set_string_value(sym, new_def);
-
-	update_tree(&rootmenu, NULL);
-
-	gtk_tree_path_free(path);
-}
-
-/* Change the value of a symbol and update the tree */
-static void change_sym_value(struct menu *menu, gint col)
-{
-	struct symbol *sym = menu->sym;
-	tristate newval;
-
-	if (!sym)
-		return;
-
-	if (col == COL_NO)
-		newval = no;
-	else if (col == COL_MOD)
-		newval = mod;
-	else if (col == COL_YES)
-		newval = yes;
-	else
-		return;
-
-	switch (sym_get_type(sym)) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		if (!sym_tristate_within_range(sym, newval))
-			newval = yes;
-		sym_set_tristate_value(sym, newval);
-		if (view_mode == FULL_VIEW)
-			update_tree(&rootmenu, NULL);
-		else if (view_mode == SPLIT_VIEW) {
-			update_tree(browsed, NULL);
-			display_list();
-		}
-		else if (view_mode == SINGLE_VIEW)
-			display_tree_part();	//fixme: keep exp/coll
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-	default:
-		break;
-	}
-}
-
-static void toggle_sym_value(struct menu *menu)
-{
-	if (!menu->sym)
-		return;
-
-	sym_toggle_tristate_value(menu->sym);
-	if (view_mode == FULL_VIEW)
-		update_tree(&rootmenu, NULL);
-	else if (view_mode == SPLIT_VIEW) {
-		update_tree(browsed, NULL);
-		display_list();
-	}
-	else if (view_mode == SINGLE_VIEW)
-		display_tree_part();	//fixme: keep exp/coll
-}
-
-static gint column2index(GtkTreeViewColumn * column)
-{
-	gint i;
-
-	for (i = 0; i < COL_NUMBER; i++) {
-		GtkTreeViewColumn *col;
-
-		col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), i);
-		if (col == column)
-			return i;
-	}
-
-	return -1;
-}
-
-
-/* User click: update choice (full) or goes down (single) */
-gboolean
-on_treeview2_button_press_event(GtkWidget * widget,
-				GdkEventButton * event, gpointer user_data)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(widget);
-	GtkTreePath *path;
-	GtkTreeViewColumn *column;
-	GtkTreeIter iter;
-	struct menu *menu;
-	gint col;
-
-#if GTK_CHECK_VERSION(2,1,4) // bug in ctree with earlier version of GTK
-	gint tx = (gint) event->x;
-	gint ty = (gint) event->y;
-	gint cx, cy;
-
-	gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx,
-				      &cy);
-#else
-	gtk_tree_view_get_cursor(view, &path, &column);
-#endif
-	if (path == NULL)
-		return FALSE;
-
-	if (!gtk_tree_model_get_iter(model2, &iter, path))
-		return FALSE;
-	gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-
-	col = column2index(column);
-	if (event->type == GDK_2BUTTON_PRESS) {
-		enum prop_type ptype;
-		ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-
-		if (ptype == P_MENU && view_mode != FULL_VIEW && col == COL_OPTION) {
-			// goes down into menu
-			current = menu;
-			display_tree_part();
-			gtk_widget_set_sensitive(back_btn, TRUE);
-		} else if ((col == COL_OPTION)) {
-			toggle_sym_value(menu);
-			gtk_tree_view_expand_row(view, path, TRUE);
-		}
-	} else {
-		if (col == COL_VALUE) {
-			toggle_sym_value(menu);
-			gtk_tree_view_expand_row(view, path, TRUE);
-		} else if (col == COL_NO || col == COL_MOD
-			   || col == COL_YES) {
-			change_sym_value(menu, col);
-			gtk_tree_view_expand_row(view, path, TRUE);
-		}
-	}
-
-	return FALSE;
-}
-
-/* Key pressed: update choice */
-gboolean
-on_treeview2_key_press_event(GtkWidget * widget,
-			     GdkEventKey * event, gpointer user_data)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(widget);
-	GtkTreePath *path;
-	GtkTreeViewColumn *column;
-	GtkTreeIter iter;
-	struct menu *menu;
-	gint col;
-
-	gtk_tree_view_get_cursor(view, &path, &column);
-	if (path == NULL)
-		return FALSE;
-
-	if (event->keyval == GDK_space) {
-		if (gtk_tree_view_row_expanded(view, path))
-			gtk_tree_view_collapse_row(view, path);
-		else
-			gtk_tree_view_expand_row(view, path, FALSE);
-		return TRUE;
-	}
-	if (event->keyval == GDK_KP_Enter) {
-	}
-	if (widget == tree1_w)
-		return FALSE;
-
-	gtk_tree_model_get_iter(model2, &iter, path);
-	gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-
-	if (!strcasecmp(event->string, "n"))
-		col = COL_NO;
-	else if (!strcasecmp(event->string, "m"))
-		col = COL_MOD;
-	else if (!strcasecmp(event->string, "y"))
-		col = COL_YES;
-	else
-		col = -1;
-	change_sym_value(menu, col);
-
-	return FALSE;
-}
-
-
-/* Row selection changed: update help */
-void
-on_treeview2_cursor_changed(GtkTreeView * treeview, gpointer user_data)
-{
-	GtkTreeSelection *selection;
-	GtkTreeIter iter;
-	struct menu *menu;
-
-	selection = gtk_tree_view_get_selection(treeview);
-	if (gtk_tree_selection_get_selected(selection, &model2, &iter)) {
-		gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-		text_insert_help(menu);
-	}
-}
-
-
-/* User click: display sub-tree in the right frame. */
-gboolean
-on_treeview1_button_press_event(GtkWidget * widget,
-				GdkEventButton * event, gpointer user_data)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(widget);
-	GtkTreePath *path;
-	GtkTreeViewColumn *column;
-	GtkTreeIter iter;
-	struct menu *menu;
-
-	gint tx = (gint) event->x;
-	gint ty = (gint) event->y;
-	gint cx, cy;
-
-	gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx,
-				      &cy);
-	if (path == NULL)
-		return FALSE;
-
-	gtk_tree_model_get_iter(model1, &iter, path);
-	gtk_tree_model_get(model1, &iter, COL_MENU, &menu, -1);
-
-	if (event->type == GDK_2BUTTON_PRESS) {
-		toggle_sym_value(menu);
-		current = menu;
-		display_tree_part();
-	} else {
-		browsed = menu;
-		display_tree_part();
-	}
-
-	gtk_widget_realize(tree2_w);
-	gtk_tree_view_set_cursor(view, path, NULL, FALSE);
-	gtk_widget_grab_focus(tree2_w);
-
-	return FALSE;
-}
-
-
-/* Fill a row of strings */
-static gchar **fill_row(struct menu *menu)
-{
-	static gchar *row[COL_NUMBER];
-	struct symbol *sym = menu->sym;
-	const char *def;
-	int stype;
-	tristate val;
-	enum prop_type ptype;
-	int i;
-
-	for (i = COL_OPTION; i <= COL_COLOR; i++)
-		g_free(row[i]);
-	bzero(row, sizeof(row));
-
-	row[COL_OPTION] =
-	    g_strdup_printf("%s %s", _(menu_get_prompt(menu)),
-			    sym && !sym_has_value(sym) ? "(NEW)" : "");
-
-	if (opt_mode == OPT_ALL && !menu_is_visible(menu))
-		row[COL_COLOR] = g_strdup("DarkGray");
-	else if (opt_mode == OPT_PROMPT &&
-			menu_has_prompt(menu) && !menu_is_visible(menu))
-		row[COL_COLOR] = g_strdup("DarkGray");
-	else
-		row[COL_COLOR] = g_strdup("Black");
-
-	ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	switch (ptype) {
-	case P_MENU:
-		row[COL_PIXBUF] = (gchar *) xpm_menu;
-		if (view_mode == SINGLE_VIEW)
-			row[COL_PIXVIS] = GINT_TO_POINTER(TRUE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-		break;
-	case P_COMMENT:
-		row[COL_PIXBUF] = (gchar *) xpm_void;
-		row[COL_PIXVIS] = GINT_TO_POINTER(FALSE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-		break;
-	default:
-		row[COL_PIXBUF] = (gchar *) xpm_void;
-		row[COL_PIXVIS] = GINT_TO_POINTER(FALSE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
-		break;
-	}
-
-	if (!sym)
-		return row;
-	row[COL_NAME] = g_strdup(sym->name);
-
-	sym_calc_value(sym);
-	sym->flags &= ~SYMBOL_CHANGED;
-
-	if (sym_is_choice(sym)) {	// parse childs for getting final value
-		struct menu *child;
-		struct symbol *def_sym = sym_get_choice_value(sym);
-		struct menu *def_menu = NULL;
-
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-
-		for (child = menu->list; child; child = child->next) {
-			if (menu_is_visible(child)
-			    && child->sym == def_sym)
-				def_menu = child;
-		}
-
-		if (def_menu)
-			row[COL_VALUE] =
-			    g_strdup(_(menu_get_prompt(def_menu)));
-	}
-	if (sym->flags & SYMBOL_CHOICEVAL)
-		row[COL_BTNRAD] = GINT_TO_POINTER(TRUE);
-
-	stype = sym_get_type(sym);
-	switch (stype) {
-	case S_BOOLEAN:
-		if (GPOINTER_TO_INT(row[COL_PIXVIS]) == FALSE)
-			row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
-		if (sym_is_choice(sym))
-			break;
-		/* fall through */
-	case S_TRISTATE:
-		val = sym_get_tristate_value(sym);
-		switch (val) {
-		case no:
-			row[COL_NO] = g_strdup("N");
-			row[COL_VALUE] = g_strdup("N");
-			row[COL_BTNACT] = GINT_TO_POINTER(FALSE);
-			row[COL_BTNINC] = GINT_TO_POINTER(FALSE);
-			break;
-		case mod:
-			row[COL_MOD] = g_strdup("M");
-			row[COL_VALUE] = g_strdup("M");
-			row[COL_BTNINC] = GINT_TO_POINTER(TRUE);
-			break;
-		case yes:
-			row[COL_YES] = g_strdup("Y");
-			row[COL_VALUE] = g_strdup("Y");
-			row[COL_BTNACT] = GINT_TO_POINTER(TRUE);
-			row[COL_BTNINC] = GINT_TO_POINTER(FALSE);
-			break;
-		}
-
-		if (val != no && sym_tristate_within_range(sym, no))
-			row[COL_NO] = g_strdup("_");
-		if (val != mod && sym_tristate_within_range(sym, mod))
-			row[COL_MOD] = g_strdup("_");
-		if (val != yes && sym_tristate_within_range(sym, yes))
-			row[COL_YES] = g_strdup("_");
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		def = sym_get_string_value(sym);
-		row[COL_VALUE] = g_strdup(def);
-		row[COL_EDIT] = GINT_TO_POINTER(TRUE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-		break;
-	}
-
-	return row;
-}
-
-
-/* Set the node content with a row of strings */
-static void set_node(GtkTreeIter * node, struct menu *menu, gchar ** row)
-{
-	GdkColor color;
-	gboolean success;
-	GdkPixbuf *pix;
-
-	pix = gdk_pixbuf_new_from_xpm_data((const char **)
-					   row[COL_PIXBUF]);
-
-	gdk_color_parse(row[COL_COLOR], &color);
-	gdk_colormap_alloc_colors(gdk_colormap_get_system(), &color, 1,
-				  FALSE, FALSE, &success);
-
-	gtk_tree_store_set(tree, node,
-			   COL_OPTION, row[COL_OPTION],
-			   COL_NAME, row[COL_NAME],
-			   COL_NO, row[COL_NO],
-			   COL_MOD, row[COL_MOD],
-			   COL_YES, row[COL_YES],
-			   COL_VALUE, row[COL_VALUE],
-			   COL_MENU, (gpointer) menu,
-			   COL_COLOR, &color,
-			   COL_EDIT, GPOINTER_TO_INT(row[COL_EDIT]),
-			   COL_PIXBUF, pix,
-			   COL_PIXVIS, GPOINTER_TO_INT(row[COL_PIXVIS]),
-			   COL_BTNVIS, GPOINTER_TO_INT(row[COL_BTNVIS]),
-			   COL_BTNACT, GPOINTER_TO_INT(row[COL_BTNACT]),
-			   COL_BTNINC, GPOINTER_TO_INT(row[COL_BTNINC]),
-			   COL_BTNRAD, GPOINTER_TO_INT(row[COL_BTNRAD]),
-			   -1);
-
-	g_object_unref(pix);
-}
-
-
-/* Add a node to the tree */
-static void place_node(struct menu *menu, char **row)
-{
-	GtkTreeIter *parent = parents[indent - 1];
-	GtkTreeIter *node = parents[indent];
-
-	gtk_tree_store_append(tree, node, parent);
-	set_node(node, menu, row);
-}
-
-
-/* Find a node in the GTK+ tree */
-static GtkTreeIter found;
-
-/*
- * Find a menu in the GtkTree starting at parent.
- */
-GtkTreeIter *gtktree_iter_find_node(GtkTreeIter * parent,
-				    struct menu *tofind)
-{
-	GtkTreeIter iter;
-	GtkTreeIter *child = &iter;
-	gboolean valid;
-	GtkTreeIter *ret;
-
-	valid = gtk_tree_model_iter_children(model2, child, parent);
-	while (valid) {
-		struct menu *menu;
-
-		gtk_tree_model_get(model2, child, 6, &menu, -1);
-
-		if (menu == tofind) {
-			memcpy(&found, child, sizeof(GtkTreeIter));
-			return &found;
-		}
-
-		ret = gtktree_iter_find_node(child, tofind);
-		if (ret)
-			return ret;
-
-		valid = gtk_tree_model_iter_next(model2, child);
-	}
-
-	return NULL;
-}
-
-
-/*
- * Update the tree by adding/removing entries
- * Does not change other nodes
- */
-static void update_tree(struct menu *src, GtkTreeIter * dst)
-{
-	struct menu *child1;
-	GtkTreeIter iter, tmp;
-	GtkTreeIter *child2 = &iter;
-	gboolean valid;
-	GtkTreeIter *sibling;
-	struct symbol *sym;
-	struct menu *menu1, *menu2;
-
-	if (src == &rootmenu)
-		indent = 1;
-
-	valid = gtk_tree_model_iter_children(model2, child2, dst);
-	for (child1 = src->list; child1; child1 = child1->next) {
-
-		sym = child1->sym;
-
-	      reparse:
-		menu1 = child1;
-		if (valid)
-			gtk_tree_model_get(model2, child2, COL_MENU,
-					   &menu2, -1);
-		else
-			menu2 = NULL;	// force adding of a first child
-
-#ifdef DEBUG
-		printf("%*c%s | %s\n", indent, ' ',
-		       menu1 ? menu_get_prompt(menu1) : "nil",
-		       menu2 ? menu_get_prompt(menu2) : "nil");
-#endif
-
-		if ((opt_mode == OPT_NORMAL && !menu_is_visible(child1)) ||
-		    (opt_mode == OPT_PROMPT && !menu_has_prompt(child1)) ||
-		    (opt_mode == OPT_ALL    && !menu_get_prompt(child1))) {
-
-			/* remove node */
-			if (gtktree_iter_find_node(dst, menu1) != NULL) {
-				memcpy(&tmp, child2, sizeof(GtkTreeIter));
-				valid = gtk_tree_model_iter_next(model2,
-								 child2);
-				gtk_tree_store_remove(tree2, &tmp);
-				if (!valid)
-					return;		/* next parent */
-				else
-					goto reparse;	/* next child */
-			} else
-				continue;
-		}
-
-		if (menu1 != menu2) {
-			if (gtktree_iter_find_node(dst, menu1) == NULL) {	// add node
-				if (!valid && !menu2)
-					sibling = NULL;
-				else
-					sibling = child2;
-				gtk_tree_store_insert_before(tree2,
-							     child2,
-							     dst, sibling);
-				set_node(child2, menu1, fill_row(menu1));
-				if (menu2 == NULL)
-					valid = TRUE;
-			} else {	// remove node
-				memcpy(&tmp, child2, sizeof(GtkTreeIter));
-				valid = gtk_tree_model_iter_next(model2,
-								 child2);
-				gtk_tree_store_remove(tree2, &tmp);
-				if (!valid)
-					return;	// next parent
-				else
-					goto reparse;	// next child
-			}
-		} else if (sym && (sym->flags & SYMBOL_CHANGED)) {
-			set_node(child2, menu1, fill_row(menu1));
-		}
-
-		indent++;
-		update_tree(child1, child2);
-		indent--;
-
-		valid = gtk_tree_model_iter_next(model2, child2);
-	}
-}
-
-
-/* Display the whole tree (single/split/full view) */
-static void display_tree(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-	enum prop_type ptype;
-
-	if (menu == &rootmenu) {
-		indent = 1;
-		current = &rootmenu;
-	}
-
-	for (child = menu->list; child; child = child->next) {
-		prop = child->prompt;
-		sym = child->sym;
-		ptype = prop ? prop->type : P_UNKNOWN;
-
-		if (sym)
-			sym->flags &= ~SYMBOL_CHANGED;
-
-		if ((view_mode == SPLIT_VIEW)
-		    && !(child->flags & MENU_ROOT) && (tree == tree1))
-			continue;
-
-		if ((view_mode == SPLIT_VIEW) && (child->flags & MENU_ROOT)
-		    && (tree == tree2))
-			continue;
-
-		if ((opt_mode == OPT_NORMAL && menu_is_visible(child)) ||
-		    (opt_mode == OPT_PROMPT && menu_has_prompt(child)) ||
-		    (opt_mode == OPT_ALL    && menu_get_prompt(child)))
-			place_node(child, fill_row(child));
-#ifdef DEBUG
-		printf("%*c%s: ", indent, ' ', menu_get_prompt(child));
-		printf("%s", child->flags & MENU_ROOT ? "rootmenu | " : "");
-		printf("%s", prop_get_type_name(ptype));
-		printf(" | ");
-		if (sym) {
-			printf("%s", sym_type_name(sym->type));
-			printf(" | ");
-			printf("%s", dbg_sym_flags(sym->flags));
-			printf("\n");
-		} else
-			printf("\n");
-#endif
-		if ((view_mode != FULL_VIEW) && (ptype == P_MENU)
-		    && (tree == tree2))
-			continue;
-/*
-                if (((menu != &rootmenu) && !(menu->flags & MENU_ROOT))
-		    || (view_mode == FULL_VIEW)
-		    || (view_mode == SPLIT_VIEW))*/
-
-		/* Change paned position if the view is not in 'split mode' */
-		if (view_mode == SINGLE_VIEW || view_mode == FULL_VIEW) {
-			gtk_paned_set_position(GTK_PANED(hpaned), 0);
-		}
-
-		if (((view_mode == SINGLE_VIEW) && (menu->flags & MENU_ROOT))
-		    || (view_mode == FULL_VIEW)
-		    || (view_mode == SPLIT_VIEW)) {
-			indent++;
-			display_tree(child);
-			indent--;
-		}
-	}
-}
-
-/* Display a part of the tree starting at current node (single/split view) */
-static void display_tree_part(void)
-{
-	if (tree2)
-		gtk_tree_store_clear(tree2);
-	if (view_mode == SINGLE_VIEW)
-		display_tree(current);
-	else if (view_mode == SPLIT_VIEW)
-		display_tree(browsed);
-	gtk_tree_view_expand_all(GTK_TREE_VIEW(tree2_w));
-}
-
-/* Display the list in the left frame (split view) */
-static void display_list(void)
-{
-	if (tree1)
-		gtk_tree_store_clear(tree1);
-
-	tree = tree1;
-	display_tree(&rootmenu);
-	gtk_tree_view_expand_all(GTK_TREE_VIEW(tree1_w));
-	tree = tree2;
-}
-
-void fixup_rootmenu(struct menu *menu)
-{
-	struct menu *child;
-	static int menu_cnt = 0;
-
-	menu->flags |= MENU_ROOT;
-	for (child = menu->list; child; child = child->next) {
-		if (child->prompt && child->prompt->type == P_MENU) {
-			menu_cnt++;
-			fixup_rootmenu(child);
-			menu_cnt--;
-		} else if (!menu_cnt)
-			fixup_rootmenu(child);
-	}
-}
-
-
-/* Main */
-int main(int ac, char *av[])
-{
-	const char *name;
-	char *env;
-	gchar *glade_file;
-
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	bind_textdomain_codeset(PACKAGE, "UTF-8");
-	textdomain(PACKAGE);
-
-	/* GTK stuffs */
-	gtk_set_locale();
-	gtk_init(&ac, &av);
-	glade_init();
-
-	//add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");
-	//add_pixmap_directory (PACKAGE_SOURCE_DIR "/pixmaps");
-
-	/* Determine GUI path */
-	env = getenv(SRCTREE);
-	if (env)
-		glade_file = g_strconcat(env, "/support/kconfig/gconf.glade", NULL);
-	else if (av[0][0] == '/')
-		glade_file = g_strconcat(av[0], ".glade", NULL);
-	else
-		glade_file = g_strconcat(g_get_current_dir(), "/", av[0], ".glade", NULL);
-
-	/* Conf stuffs */
-	if (ac > 1 && av[1][0] == '-') {
-		switch (av[1][1]) {
-		case 'a':
-			//showAll = 1;
-			break;
-		case 'h':
-		case '?':
-			printf("%s <config>\n", av[0]);
-			exit(0);
-		}
-		name = av[2];
-	} else
-		name = av[1];
-
-	conf_parse(name);
-	fixup_rootmenu(&rootmenu);
-	conf_read(NULL);
-
-	/* Load the interface and connect signals */
-	init_main_window(glade_file);
-	init_tree_model();
-	init_left_tree();
-	init_right_tree();
-
-	switch (view_mode) {
-	case SINGLE_VIEW:
-		display_tree_part();
-		break;
-	case SPLIT_VIEW:
-		display_list();
-		break;
-	case FULL_VIEW:
-		display_tree(&rootmenu);
-		break;
-	}
-
-	gtk_main();
-
-	return 0;
-}
-
-static void conf_changed(void)
-{
-	bool changed = conf_get_changed();
-	gtk_widget_set_sensitive(save_btn, changed);
-	gtk_widget_set_sensitive(save_menu_item, changed);
-}
diff --git a/support/kconfig/gconf.glade b/support/kconfig/gconf.glade
deleted file mode 100644
index 03e97d74..00000000
--- a/support/kconfig/gconf.glade
+++ /dev/null
@@ -1,661 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-
-<glade-interface>
-
-<widget class="GtkWindow" id="window1">
-  <property name="visible">True</property>
-  <property name="title" translatable="yes">Gtk Unikraft Configurator</property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="default_width">640</property>
-  <property name="default_height">480</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <signal name="destroy" handler="on_window1_destroy" object="window1"/>
-  <signal name="size_request" handler="on_window1_size_request" object="vpaned1" last_modification_time="Fri, 11 Jan 2002 16:17:11 GMT"/>
-  <signal name="delete_event" handler="on_window1_delete_event" object="window1" last_modification_time="Sun, 09 Mar 2003 19:42:46 GMT"/>
-
-  <child>
-    <widget class="GtkVBox" id="vbox1">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">0</property>
-
-      <child>
-	<widget class="GtkMenuBar" id="menubar1">
-	  <property name="visible">True</property>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="file1">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_File</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="file1_menu">
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="load1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Load a config file</property>
-		      <property name="label" translatable="yes">_Load</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_load1_activate"/>
-		      <accelerator key="L" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image39">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-open</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="save1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Save the config in .config</property>
-		      <property name="label" translatable="yes">_Save</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_save_activate"/>
-		      <accelerator key="S" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image40">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-save</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="save_as1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Save the config in a file</property>
-		      <property name="label" translatable="yes">Save _as</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_save_as1_activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image41">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-save-as</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkSeparatorMenuItem" id="separator1">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="quit1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_Quit</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_quit1_activate"/>
-		      <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image42">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-quit</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="options1">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_Options</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="options1_menu">
-
-		  <child>
-		    <widget class="GtkCheckMenuItem" id="show_name1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show name</property>
-		      <property name="label" translatable="yes">Show _name</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <signal name="activate" handler="on_show_name1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkCheckMenuItem" id="show_range1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show range (Y/M/N)</property>
-		      <property name="label" translatable="yes">Show _range</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <signal name="activate" handler="on_show_range1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkCheckMenuItem" id="show_data1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show value of the option</property>
-		      <property name="label" translatable="yes">Show _data</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <signal name="activate" handler="on_show_data1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkSeparatorMenuItem" id="separator2">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkRadioMenuItem" id="set_option_mode1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show normal options</property>
-		      <property name="label" translatable="yes">Show normal options</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">True</property>
-		      <signal name="activate" handler="on_set_option_mode1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkRadioMenuItem" id="set_option_mode2">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show all options</property>
-		      <property name="label" translatable="yes">Show all _options</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <property name="group">set_option_mode1</property>
-		      <signal name="activate" handler="on_set_option_mode2_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkRadioMenuItem" id="set_option_mode3">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show all options with prompts</property>
-		      <property name="label" translatable="yes">Show all prompt options</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <property name="group">set_option_mode1</property>
-		      <signal name="activate" handler="on_set_option_mode3_activate"/>
-		    </widget>
-		  </child>
-
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="help1">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_Help</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="help1_menu">
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="introduction1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_Introduction</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_introduction1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/>
-		      <accelerator key="I" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image43">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-dialog-question</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="about1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_About</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_about1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/>
-		      <accelerator key="A" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image44">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-properties</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="license1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_License</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_license1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image45">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-justify-fill</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">False</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkHandleBox" id="handlebox1">
-	  <property name="visible">True</property>
-	  <property name="shadow_type">GTK_SHADOW_OUT</property>
-	  <property name="handle_position">GTK_POS_LEFT</property>
-	  <property name="snap_edge">GTK_POS_TOP</property>
-
-	  <child>
-	    <widget class="GtkToolbar" id="toolbar1">
-	      <property name="visible">True</property>
-	      <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
-	      <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
-	      <property name="tooltips">True</property>
-	      <property name="show_arrow">True</property>
-
-	      <child>
-		<widget class="GtkToolButton" id="button1">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Goes up of one level (single view)</property>
-		  <property name="label" translatable="yes">Back</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-undo</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_back_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolItem" id="toolitem1">
-		  <property name="visible">True</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-
-		  <child>
-		    <widget class="GtkVSeparator" id="vseparator1">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button2">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Load a config file</property>
-		  <property name="label" translatable="yes">Load</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-open</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_load_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button3">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Save a config file</property>
-		  <property name="label" translatable="yes">Save</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-save</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_save_activate"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolItem" id="toolitem2">
-		  <property name="visible">True</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-
-		  <child>
-		    <widget class="GtkVSeparator" id="vseparator2">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button4">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Single view</property>
-		  <property name="label" translatable="yes">Single</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-missing-image</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_single_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:39 GMT"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button5">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Split view</property>
-		  <property name="label" translatable="yes">Split</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-missing-image</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_split_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:45 GMT"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button6">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Full view</property>
-		  <property name="label" translatable="yes">Full</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-missing-image</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_full_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:50 GMT"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolItem" id="toolitem3">
-		  <property name="visible">True</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-
-		  <child>
-		    <widget class="GtkVSeparator" id="vseparator3">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button7">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Collapse the whole tree in the right frame</property>
-		  <property name="label" translatable="yes">Collapse</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-remove</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_collapse_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button8">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Expand the whole tree in the right frame</property>
-		  <property name="label" translatable="yes">Expand</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-add</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_expand_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">False</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkHPaned" id="hpaned1">
-	  <property name="width_request">1</property>
-	  <property name="visible">True</property>
-	  <property name="can_focus">True</property>
-	  <property name="position">0</property>
-
-	  <child>
-	    <widget class="GtkScrolledWindow" id="scrolledwindow1">
-	      <property name="visible">True</property>
-	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	      <property name="shadow_type">GTK_SHADOW_IN</property>
-	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-	      <child>
-		<widget class="GtkTreeView" id="treeview1">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:58:22 GMT"/>
-		  <signal name="button_press_event" handler="on_treeview1_button_press_event" last_modification_time="Sun, 12 Jan 2003 16:03:52 GMT"/>
-		  <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 16:11:44 GMT"/>
-		</widget>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="shrink">True</property>
-	      <property name="resize">False</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkVPaned" id="vpaned1">
-	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="position">0</property>
-
-	      <child>
-		<widget class="GtkScrolledWindow" id="scrolledwindow2">
-		  <property name="visible">True</property>
-		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="shadow_type">GTK_SHADOW_IN</property>
-		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-		  <child>
-		    <widget class="GtkTreeView" id="treeview2">
-		      <property name="visible">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="has_focus">True</property>
-		      <property name="headers_visible">True</property>
-		      <property name="rules_hint">False</property>
-		      <property name="reorderable">False</property>
-		      <property name="enable_search">False</property>
-		      <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:57:55 GMT"/>
-		      <signal name="button_press_event" handler="on_treeview2_button_press_event" last_modification_time="Sun, 12 Jan 2003 15:57:58 GMT"/>
-		      <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 15:58:01 GMT"/>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="shrink">True</property>
-		  <property name="resize">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkScrolledWindow" id="scrolledwindow3">
-		  <property name="visible">True</property>
-		  <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="shadow_type">GTK_SHADOW_IN</property>
-		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-		  <child>
-		    <widget class="GtkTextView" id="textview3">
-		      <property name="visible">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="editable">False</property>
-		      <property name="overwrite">False</property>
-		      <property name="accepts_tab">True</property>
-		      <property name="justification">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap_mode">GTK_WRAP_WORD</property>
-		      <property name="cursor_visible">True</property>
-		      <property name="pixels_above_lines">0</property>
-		      <property name="pixels_below_lines">0</property>
-		      <property name="pixels_inside_wrap">0</property>
-		      <property name="left_margin">0</property>
-		      <property name="right_margin">0</property>
-		      <property name="indent">0</property>
-		      <property name="text" translatable="yes">Sorry, no help available for this option yet.</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="shrink">True</property>
-		  <property name="resize">True</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="shrink">True</property>
-	      <property name="resize">True</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">True</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-</glade-interface>
diff --git a/support/kconfig/images.c b/support/kconfig/images.c
deleted file mode 100644
index d4f84bd4..00000000
--- a/support/kconfig/images.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-static const char *xpm_load[] = {
-"22 22 5 1",
-". c None",
-"# c #000000",
-"c c #838100",
-"a c #ffff00",
-"b c #ffffff",
-"......................",
-"......................",
-"......................",
-"............####....#.",
-"...........#....##.##.",
-"..................###.",
-".................####.",
-".####...........#####.",
-"#abab##########.......",
-"#babababababab#.......",
-"#ababababababa#.......",
-"#babababababab#.......",
-"#ababab###############",
-"#babab##cccccccccccc##",
-"#abab##cccccccccccc##.",
-"#bab##cccccccccccc##..",
-"#ab##cccccccccccc##...",
-"#b##cccccccccccc##....",
-"###cccccccccccc##.....",
-"##cccccccccccc##......",
-"###############.......",
-"......................"};
-
-static const char *xpm_save[] = {
-"22 22 5 1",
-". c None",
-"# c #000000",
-"a c #838100",
-"b c #c5c2c5",
-"c c #cdb6d5",
-"......................",
-".####################.",
-".#aa#bbbbbbbbbbbb#bb#.",
-".#aa#bbbbbbbbbbbb#bb#.",
-".#aa#bbbbbbbbbcbb####.",
-".#aa#bbbccbbbbbbb#aa#.",
-".#aa#bbbccbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aaa############aaa#.",
-".#aaaaaaaaaaaaaaaaaa#.",
-".#aaaaaaaaaaaaaaaaaa#.",
-".#aaa#############aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-"..##################..",
-"......................"};
-
-static const char *xpm_back[] = {
-"22 22 3 1",
-". c None",
-"# c #000083",
-"a c #838183",
-"......................",
-"......................",
-"......................",
-"......................",
-"......................",
-"...........######a....",
-"..#......##########...",
-"..##...####......##a..",
-"..###.###.........##..",
-"..######..........##..",
-"..#####...........##..",
-"..######..........##..",
-"..#######.........##..",
-"..########.......##a..",
-"...............a###...",
-"...............###....",
-"......................",
-"......................",
-"......................",
-"......................",
-"......................",
-"......................"};
-
-static const char *xpm_tree_view[] = {
-"22 22 2 1",
-". c None",
-"# c #000000",
-"......................",
-"......................",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......########........",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......########........",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......########........",
-"......................",
-"......................"};
-
-static const char *xpm_single_view[] = {
-"22 22 2 1",
-". c None",
-"# c #000000",
-"......................",
-"......................",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"......................",
-"......................"};
-
-static const char *xpm_split_view[] = {
-"22 22 2 1",
-". c None",
-"# c #000000",
-"......................",
-"......................",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......................",
-"......................"};
-
-static const char *xpm_symbol_no[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_symbol_mod[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .        . ",
-" .   ..   . ",
-" .  ....  . ",
-" .  ....  . ",
-" .   ..   . ",
-" .        . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_symbol_yes[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .        . ",
-" .      . . ",
-" .     .. . ",
-" . .  ..  . ",
-" . ....   . ",
-" .  ..    . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_choice_no[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-"    ....    ",
-"  ..    ..  ",
-"  .      .  ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-"  .      .  ",
-"  ..    ..  ",
-"    ....    ",
-"            "};
-
-static const char *xpm_choice_yes[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-"    ....    ",
-"  ..    ..  ",
-"  .      .  ",
-" .   ..   . ",
-" .  ....  . ",
-" .  ....  . ",
-" .   ..   . ",
-"  .      .  ",
-"  ..    ..  ",
-"    ....    ",
-"            "};
-
-static const char *xpm_menu[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" . ..     . ",
-" . ....   . ",
-" . ...... . ",
-" . ...... . ",
-" . ....   . ",
-" . ..     . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_menu_inv[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .......... ",
-" ..  ...... ",
-" ..    .... ",
-" ..      .. ",
-" ..      .. ",
-" ..    .... ",
-" ..  ...... ",
-" .......... ",
-" .......... ",
-"            "};
-
-static const char *xpm_menuback[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .     .. . ",
-" .   .... . ",
-" . ...... . ",
-" . ...... . ",
-" .   .... . ",
-" .     .. . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_void[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            "};
diff --git a/support/kconfig/kxgettext.c b/support/kconfig/kxgettext.c
deleted file mode 100644
index 2858738b..00000000
--- a/support/kconfig/kxgettext.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Arnaldo Carvalho de Melo <acme@conectiva.com.br>, 2005
- *
- * Released under the terms of the GNU GPL v2.0
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "lkc.h"
-
-static char *escape(const char* text, char *bf, int len)
-{
-	char *bfp = bf;
-	int multiline = strchr(text, '\n') != NULL;
-	int eol = 0;
-	int textlen = strlen(text);
-
-	if ((textlen > 0) && (text[textlen-1] == '\n'))
-		eol = 1;
-
-	*bfp++ = '"';
-	--len;
-
-	if (multiline) {
-		*bfp++ = '"';
-		*bfp++ = '\n';
-		*bfp++ = '"';
-		len -= 3;
-	}
-
-	while (*text != '\0' && len > 1) {
-		if (*text == '"')
-			*bfp++ = '\\';
-		else if (*text == '\n') {
-			*bfp++ = '\\';
-			*bfp++ = 'n';
-			*bfp++ = '"';
-			*bfp++ = '\n';
-			*bfp++ = '"';
-			len -= 5;
-			++text;
-			goto next;
-		}
-		else if (*text == '\\') {
-			*bfp++ = '\\';
-			len--;
-		}
-		*bfp++ = *text++;
-next:
-		--len;
-	}
-
-	if (multiline && eol)
-		bfp -= 3;
-
-	*bfp++ = '"';
-	*bfp = '\0';
-
-	return bf;
-}
-
-struct file_line {
-	struct file_line *next;
-	const char *file;
-	int lineno;
-};
-
-static struct file_line *file_line__new(const char *file, int lineno)
-{
-	struct file_line *self = malloc(sizeof(*self));
-
-	if (self == NULL)
-		goto out;
-
-	self->file   = file;
-	self->lineno = lineno;
-	self->next   = NULL;
-out:
-	return self;
-}
-
-struct message {
-	const char	 *msg;
-	const char	 *option;
-	struct message	 *next;
-	struct file_line *files;
-};
-
-static struct message *message__list;
-
-static struct message *message__new(const char *msg, char *option,
-				    const char *file, int lineno)
-{
-	struct message *self = malloc(sizeof(*self));
-
-	if (self == NULL)
-		goto out;
-
-	self->files = file_line__new(file, lineno);
-	if (self->files == NULL)
-		goto out_fail;
-
-	self->msg = strdup(msg);
-	if (self->msg == NULL)
-		goto out_fail_msg;
-
-	self->option = option;
-	self->next = NULL;
-out:
-	return self;
-out_fail_msg:
-	free(self->files);
-out_fail:
-	free(self);
-	self = NULL;
-	goto out;
-}
-
-static struct message *mesage__find(const char *msg)
-{
-	struct message *m = message__list;
-
-	while (m != NULL) {
-		if (strcmp(m->msg, msg) == 0)
-			break;
-		m = m->next;
-	}
-
-	return m;
-}
-
-static int message__add_file_line(struct message *self, const char *file,
-				  int lineno)
-{
-	int rc = -1;
-	struct file_line *fl = file_line__new(file, lineno);
-
-	if (fl == NULL)
-		goto out;
-
-	fl->next    = self->files;
-	self->files = fl;
-	rc = 0;
-out:
-	return rc;
-}
-
-static int message__add(const char *msg, char *option, const char *file,
-			int lineno)
-{
-	int rc = 0;
-	char bf[16384];
-	char *escaped = escape(msg, bf, sizeof(bf));
-	struct message *m = mesage__find(escaped);
-
-	if (m != NULL)
-		rc = message__add_file_line(m, file, lineno);
-	else {
-		m = message__new(escaped, option, file, lineno);
-
-		if (m != NULL) {
-			m->next	      = message__list;
-			message__list = m;
-		} else
-			rc = -1;
-	}
-	return rc;
-}
-
-static void menu_build_message_list(struct menu *menu)
-{
-	struct menu *child;
-
-	message__add(menu_get_prompt(menu), NULL,
-		     menu->file == NULL ? "Root Menu" : menu->file->name,
-		     menu->lineno);
-
-	if (menu->sym != NULL && menu_has_help(menu))
-		message__add(menu_get_help(menu), menu->sym->name,
-			     menu->file == NULL ? "Root Menu" : menu->file->name,
-			     menu->lineno);
-
-	for (child = menu->list; child != NULL; child = child->next)
-		if (child->prompt != NULL)
-			menu_build_message_list(child);
-}
-
-static void message__print_file_lineno(struct message *self)
-{
-	struct file_line *fl = self->files;
-
-	putchar('\n');
-	if (self->option != NULL)
-		printf("# %s:00000\n", self->option);
-
-	printf("#: %s:%d", fl->file, fl->lineno);
-	fl = fl->next;
-
-	while (fl != NULL) {
-		printf(", %s:%d", fl->file, fl->lineno);
-		fl = fl->next;
-	}
-
-	putchar('\n');
-}
-
-static void message__print_gettext_msgid_msgstr(struct message *self)
-{
-	message__print_file_lineno(self);
-
-	printf("msgid %s\n"
-	       "msgstr \"\"\n", self->msg);
-}
-
-static void menu__xgettext(void)
-{
-	struct message *m = message__list;
-
-	while (m != NULL) {
-		/* skip empty lines ("") */
-		if (strlen(m->msg) > sizeof("\"\""))
-			message__print_gettext_msgid_msgstr(m);
-		m = m->next;
-	}
-}
-
-int main(int ac, char **av)
-{
-	conf_parse(av[1]);
-
-	menu_build_message_list(menu_get_root_menu(NULL));
-	menu__xgettext();
-	return 0;
-}
diff --git a/support/kconfig/list.h b/support/kconfig/list.h
deleted file mode 100644
index 685d80e1..00000000
--- a/support/kconfig/list.h
+++ /dev/null
@@ -1,131 +0,0 @@
-#ifndef LIST_H
-#define LIST_H
-
-/*
- * Copied from include/linux/...
- */
-
-#undef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-
-/**
- * container_of - cast a member of a structure out to the containing structure
- * @ptr:        the pointer to the member.
- * @type:       the type of the container struct this is embedded in.
- * @member:     the name of the member within the struct.
- *
- */
-#define container_of(ptr, type, member) ({                      \
-	const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-	(type *)( (char *)__mptr - offsetof(type,member) );})
-
-
-struct list_head {
-	struct list_head *next, *prev;
-};
-
-
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
-#define LIST_HEAD(name) \
-	struct list_head name = LIST_HEAD_INIT(name)
-
-/**
- * list_entry - get the struct for this entry
- * @ptr:	the &struct list_head pointer.
- * @type:	the type of the struct this is embedded in.
- * @member:	the name of the list_struct within the struct.
- */
-#define list_entry(ptr, type, member) \
-	container_of(ptr, type, member)
-
-/**
- * list_for_each_entry	-	iterate over list of given type
- * @pos:	the type * to use as a loop cursor.
- * @head:	the head for your list.
- * @member:	the name of the list_struct within the struct.
- */
-#define list_for_each_entry(pos, head, member)				\
-	for (pos = list_entry((head)->next, typeof(*pos), member);	\
-	     &pos->member != (head); 	\
-	     pos = list_entry(pos->member.next, typeof(*pos), member))
-
-/**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @pos:	the type * to use as a loop cursor.
- * @n:		another type * to use as temporary storage
- * @head:	the head for your list.
- * @member:	the name of the list_struct within the struct.
- */
-#define list_for_each_entry_safe(pos, n, head, member)			\
-	for (pos = list_entry((head)->next, typeof(*pos), member),	\
-		n = list_entry(pos->member.next, typeof(*pos), member);	\
-	     &pos->member != (head);					\
-	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
-
-/**
- * list_empty - tests whether a list is empty
- * @head: the list to test.
- */
-static inline int list_empty(const struct list_head *head)
-{
-	return head->next == head;
-}
-
-/*
- * Insert a new entry between two known consecutive entries.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_add(struct list_head *_new,
-			      struct list_head *prev,
-			      struct list_head *next)
-{
-	next->prev = _new;
-	_new->next = next;
-	_new->prev = prev;
-	prev->next = _new;
-}
-
-/**
- * list_add_tail - add a new entry
- * @new: new entry to be added
- * @head: list head to add it before
- *
- * Insert a new entry before the specified head.
- * This is useful for implementing queues.
- */
-static inline void list_add_tail(struct list_head *_new, struct list_head *head)
-{
-	__list_add(_new, head->prev, head);
-}
-
-/*
- * Delete a list entry by making the prev/next entries
- * point to each other.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_del(struct list_head *prev, struct list_head *next)
-{
-	next->prev = prev;
-	prev->next = next;
-}
-
-#define LIST_POISON1  ((void *) 0x00100100)
-#define LIST_POISON2  ((void *) 0x00200200)
-/**
- * list_del - deletes entry from list.
- * @entry: the element to delete from the list.
- * Note: list_empty() on entry does not return true after this, the entry is
- * in an undefined state.
- */
-static inline void list_del(struct list_head *entry)
-{
-	__list_del(entry->prev, entry->next);
-	entry->next = (struct list_head*)LIST_POISON1;
-	entry->prev = (struct list_head*)LIST_POISON2;
-}
-#endif
diff --git a/support/kconfig/lkc.h b/support/kconfig/lkc.h
deleted file mode 100644
index 09f4edfd..00000000
--- a/support/kconfig/lkc.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#ifndef LKC_H
-#define LKC_H
-
-#include "expr.h"
-
-#ifndef KBUILD_NO_NLS
-# include <libintl.h>
-#else
-static inline const char *gettext(const char *txt) { return txt; }
-static inline void textdomain(const char *domainname) {}
-static inline void bindtextdomain(const char *name, const char *dir) {}
-static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c; }
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define P(name,type,arg)	extern type name arg
-#include "lkc_proto.h"
-#undef P
-
-#define SRCTREE "srctree"
-
-#ifndef PACKAGE
-#define PACKAGE "linux"
-#endif
-
-#define LOCALEDIR "/usr/share/locale"
-
-#define _(text) gettext(text)
-#define N_(text) (text)
-
-#ifndef CONFIG_
-#define CONFIG_ "CONFIG_"
-#endif
-static inline const char *CONFIG_prefix(void)
-{
-	return getenv( "CONFIG_" ) ?: CONFIG_;
-}
-#undef CONFIG_
-#define CONFIG_ CONFIG_prefix()
-
-#define TF_COMMAND	0x0001
-#define TF_PARAM	0x0002
-#define TF_OPTION	0x0004
-
-enum conf_def_mode {
-	def_default,
-	def_yes,
-	def_mod,
-	def_no,
-	def_random
-};
-
-#define T_OPT_MODULES		1
-#define T_OPT_DEFCONFIG_LIST	2
-#define T_OPT_ENV		3
-
-struct kconf_id {
-	int name;
-	int token;
-	unsigned int flags;
-	enum symbol_type stype;
-};
-
-extern int zconfdebug;
-
-int zconfparse(void);
-void zconfdump(FILE *out);
-void zconf_starthelp(void);
-FILE *zconf_fopen(const char *name);
-void zconf_initscan(const char *name);
-void zconf_nextfile(const char *name);
-int zconf_lineno(void);
-const char *zconf_curname(void);
-
-/* confdata.c */
-const char *conf_get_configname(void);
-const char *conf_get_autoconfig_name(void);
-char *conf_get_default_confname(void);
-void sym_set_change_count(int count);
-void sym_add_change_count(int count);
-bool conf_set_all_new_symbols(enum conf_def_mode mode);
-void set_all_choice_values(struct symbol *csym);
-
-struct conf_printer {
-	void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
-	void (*print_comment)(FILE *, const char *, void *);
-};
-
-/* confdata.c and expr.c */
-static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
-{
-	assert(len != 0);
-
-	if (fwrite(str, len, count, out) != count)
-		fprintf(stderr, "Error in writing or end of file.\n");
-}
-
-/* menu.c */
-void _menu_init(void);
-void menu_warn(struct menu *menu, const char *fmt, ...);
-struct menu *menu_add_menu(void);
-void menu_end_menu(void);
-void menu_add_entry(struct symbol *sym);
-void menu_end_entry(void);
-void menu_add_dep(struct expr *dep);
-void menu_add_visibility(struct expr *dep);
-struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep);
-struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
-void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
-void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
-void menu_add_option(int token, char *arg);
-void menu_finalize(struct menu *parent);
-void menu_set_type(int type);
-
-/* util.c */
-struct file *file_lookup(const char *name);
-int file_write_dep(const char *name);
-void *xmalloc(size_t size);
-void *xcalloc(size_t nmemb, size_t size);
-
-struct gstr {
-	size_t len;
-	char  *s;
-	/*
-	* when max_width is not zero long lines in string s (if any) get
-	* wrapped not to exceed the max_width value
-	*/
-	int max_width;
-};
-struct gstr str_new(void);
-struct gstr str_assign(const char *s);
-void str_free(struct gstr *gs);
-void str_append(struct gstr *gs, const char *s);
-void str_printf(struct gstr *gs, const char *fmt, ...);
-const char *str_get(struct gstr *gs);
-
-/* symbol.c */
-extern struct expr *sym_env_list;
-
-void sym_init(void);
-void sym_clear_all_valid(void);
-void sym_set_all_changed(void);
-void sym_set_changed(struct symbol *sym);
-struct symbol *sym_choice_default(struct symbol *sym);
-const char *sym_get_string_default(struct symbol *sym);
-struct symbol *sym_check_deps(struct symbol *sym);
-struct property *prop_alloc(enum prop_type type, struct symbol *sym);
-struct symbol *prop_get_symbol(struct property *prop);
-struct property *sym_get_env_prop(struct symbol *sym);
-
-static inline tristate sym_get_tristate_value(struct symbol *sym)
-{
-	return sym->curr.tri;
-}
-
-
-static inline struct symbol *sym_get_choice_value(struct symbol *sym)
-{
-	return (struct symbol *)sym->curr.val;
-}
-
-static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval)
-{
-	return sym_set_tristate_value(chval, yes);
-}
-
-static inline bool sym_is_choice(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_CHOICE ? true : false;
-}
-
-static inline bool sym_is_choice_value(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_CHOICEVAL ? true : false;
-}
-
-static inline bool sym_is_optional(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_OPTIONAL ? true : false;
-}
-
-static inline bool sym_has_value(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_DEF_USER ? true : false;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LKC_H */
diff --git a/support/kconfig/lkc_proto.h b/support/kconfig/lkc_proto.h
deleted file mode 100644
index ecdb9659..00000000
--- a/support/kconfig/lkc_proto.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <stdarg.h>
-
-/* confdata.c */
-P(conf_parse,void,(const char *name));
-P(conf_read,int,(const char *name));
-P(conf_read_simple,int,(const char *name, int));
-P(conf_write_defconfig,int,(const char *name));
-P(conf_write,int,(const char *name));
-P(conf_write_autoconf,int,(void));
-P(conf_get_changed,bool,(void));
-P(conf_set_changed_callback, void,(void (*fn)(void)));
-P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));
-
-/* menu.c */
-P(rootmenu,struct menu,);
-
-P(menu_is_empty, bool, (struct menu *menu));
-P(menu_is_visible, bool, (struct menu *menu));
-P(menu_has_prompt, bool, (struct menu *menu));
-P(menu_get_prompt,const char *,(struct menu *menu));
-P(menu_get_root_menu,struct menu *,(struct menu *menu));
-P(menu_get_parent_menu,struct menu *,(struct menu *menu));
-P(menu_has_help,bool,(struct menu *menu));
-P(menu_get_help,const char *,(struct menu *menu));
-P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct list_head
-			 *head));
-P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct list_head
-				   *head));
-P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
-
-/* symbol.c */
-P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
-
-P(sym_lookup,struct symbol *,(const char *name, int flags));
-P(sym_find,struct symbol *,(const char *name));
-P(sym_expand_string_value,const char *,(const char *in));
-P(sym_escape_string_value, const char *,(const char *in));
-P(sym_re_search,struct symbol **,(const char *pattern));
-P(sym_type_name,const char *,(enum symbol_type type));
-P(sym_calc_value,void,(struct symbol *sym));
-P(sym_get_type,enum symbol_type,(struct symbol *sym));
-P(sym_tristate_within_range,bool,(struct symbol *sym,tristate tri));
-P(sym_set_tristate_value,bool,(struct symbol *sym,tristate tri));
-P(sym_toggle_tristate_value,tristate,(struct symbol *sym));
-P(sym_string_valid,bool,(struct symbol *sym, const char *newval));
-P(sym_string_within_range,bool,(struct symbol *sym, const char *str));
-P(sym_set_string_value,bool,(struct symbol *sym, const char *newval));
-P(sym_is_changable,bool,(struct symbol *sym));
-P(sym_get_choice_prop,struct property *,(struct symbol *sym));
-P(sym_get_default_prop,struct property *,(struct symbol *sym));
-P(sym_get_string_value,const char *,(struct symbol *sym));
-
-P(prop_get_type_name,const char *,(enum prop_type type));
-
-/* expr.c */
-P(expr_compare_type,int,(enum expr_type t1, enum expr_type t2));
-P(expr_print,void,(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken));
diff --git a/support/kconfig/lxdialog/.gitignore b/support/kconfig/lxdialog/.gitignore
deleted file mode 100644
index 90b08ff0..00000000
--- a/support/kconfig/lxdialog/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-# Generated files
-#
-lxdialog
diff --git a/support/kconfig/lxdialog/BIG.FAT.WARNING b/support/kconfig/lxdialog/BIG.FAT.WARNING
deleted file mode 100644
index a8999d82..00000000
--- a/support/kconfig/lxdialog/BIG.FAT.WARNING
+++ /dev/null
@@ -1,4 +0,0 @@
-This is NOT the official version of dialog.  This version has been
-significantly modified from the original.  It is for use by the Linux
-kernel configuration script.  Please do not bother Savio Lam with 
-questions about this program.
diff --git a/support/kconfig/lxdialog/check-lxdialog.sh b/support/kconfig/lxdialog/check-lxdialog.sh
deleted file mode 100755
index 3ce0a233..00000000
--- a/support/kconfig/lxdialog/check-lxdialog.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-# Check ncurses compatibility
-
-# What library to link
-ldflags()
-{
-	pkg-config --libs ncursesw 2>/dev/null && exit
-	pkg-config --libs ncurses 2>/dev/null && exit
-	for ext in so a dll.a dylib ; do
-		for lib in ncursesw ncurses curses ; do
-			$cc -print-file-name=lib${lib}.${ext} | grep -q /
-			if [ $? -eq 0 ]; then
-				echo "-l${lib}"
-				exit
-			fi
-		done
-	done
-	exit 1
-}
-
-# Where is ncurses.h?
-ccflags()
-{
-	if pkg-config --cflags ncursesw 2>/dev/null; then
-		echo '-DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1'
-	elif pkg-config --cflags ncurses 2>/dev/null; then
-		echo '-DCURSES_LOC="<ncurses.h>"'
-	elif [ -f /usr/include/ncursesw/curses.h ]; then
-		echo '-I/usr/include/ncursesw -DCURSES_LOC="<curses.h>"'
-		echo ' -DNCURSES_WIDECHAR=1'
-	elif [ -f /usr/include/ncurses/ncurses.h ]; then
-		echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
-	elif [ -f /usr/include/ncurses/curses.h ]; then
-		echo '-I/usr/include/ncurses -DCURSES_LOC="<curses.h>"'
-	elif [ -f /usr/include/ncurses.h ]; then
-		echo '-DCURSES_LOC="<ncurses.h>"'
-	else
-		echo '-DCURSES_LOC="<curses.h>"'
-	fi
-}
-
-# Temp file, try to clean up after us
-tmp=$(mktemp)
-trap "rm -f $tmp" 0 1 2 3 15
-
-# Check if we can link to ncurses
-check() {
-        $cc -x c - -o $tmp 2>/dev/null <<'EOF'
-#include CURSES_LOC
-main() {}
-EOF
-	if [ $? != 0 ]; then
-	    echo " *** Unable to find the ncurses libraries or the"       1>&2
-	    echo " *** required header files."                            1>&2
-	    echo " *** 'make menuconfig' requires the ncurses libraries." 1>&2
-	    echo " *** "                                                  1>&2
-	    echo " *** Install ncurses (ncurses-devel) and try again."    1>&2
-	    echo " *** "                                                  1>&2
-	    exit 1
-	fi
-}
-
-usage() {
-	printf "Usage: $0 [-check compiler options|-ccflags|-ldflags compiler options]\n"
-}
-
-if [ $# -eq 0 ]; then
-	usage
-	exit 1
-fi
-
-cc=""
-case "$1" in
-	"-check")
-		shift
-		cc="$@"
-		check
-		;;
-	"-ccflags")
-		ccflags
-		;;
-	"-ldflags")
-		shift
-		cc="$@"
-		ldflags
-		;;
-	"*")
-		usage
-		exit 1
-		;;
-esac
diff --git a/support/kconfig/lxdialog/checklist.c b/support/kconfig/lxdialog/checklist.c
deleted file mode 100644
index 3b15c08e..00000000
--- a/support/kconfig/lxdialog/checklist.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- *  checklist.c -- implements the checklist box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *     Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
- *     Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-static int list_width, check_x, item_x;
-
-/*
- * Print list item
- */
-static void print_item(WINDOW * win, int choice, int selected)
-{
-	int i;
-	char *list_item = malloc(list_width + 1);
-
-	strncpy(list_item, item_str(), list_width - item_x);
-	list_item[list_width - item_x] = '\0';
-
-	/* Clear 'residue' of last item */
-	wattrset(win, dlg.menubox.atr);
-	wmove(win, choice, 0);
-	for (i = 0; i < list_width; i++)
-		waddch(win, ' ');
-
-	wmove(win, choice, check_x);
-	wattrset(win, selected ? dlg.check_selected.atr
-		 : dlg.check.atr);
-	if (!item_is_tag(':'))
-		wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
-
-	wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
-	mvwaddch(win, choice, item_x, list_item[0]);
-	wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
-	waddstr(win, list_item + 1);
-	if (selected) {
-		wmove(win, choice, check_x + 1);
-		wrefresh(win);
-	}
-	free(list_item);
-}
-
-/*
- * Print the scroll indicators.
- */
-static void print_arrows(WINDOW * win, int choice, int item_no, int scroll,
-	     int y, int x, int height)
-{
-	wmove(win, y, x);
-
-	if (scroll > 0) {
-		wattrset(win, dlg.uarrow.atr);
-		waddch(win, ACS_UARROW);
-		waddstr(win, "(-)");
-	} else {
-		wattrset(win, dlg.menubox.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-
-	y = y + height + 1;
-	wmove(win, y, x);
-
-	if ((height < item_no) && (scroll + choice < item_no - 1)) {
-		wattrset(win, dlg.darrow.atr);
-		waddch(win, ACS_DARROW);
-		waddstr(win, "(+)");
-	} else {
-		wattrset(win, dlg.menubox_border.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-}
-
-/*
- *  Display the termination buttons
- */
-static void print_buttons(WINDOW * dialog, int height, int width, int selected)
-{
-	int x = width / 2 - 11;
-	int y = height - 2;
-
-	print_button(dialog, gettext("Select"), y, x, selected == 0);
-	print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
-
-	wmove(dialog, y, x + 1 + 14 * selected);
-	wrefresh(dialog);
-}
-
-/*
- * Display a dialog box with a list of options that can be turned on or off
- * in the style of radiolist (only one option turned on at a time).
- */
-int dialog_checklist(const char *title, const char *prompt, int height,
-		     int width, int list_height)
-{
-	int i, x, y, box_x, box_y;
-	int key = 0, button = 0, choice = 0, scroll = 0, max_choice;
-	WINDOW *dialog, *list;
-
-	/* which item to highlight */
-	item_foreach() {
-		if (item_is_tag('X'))
-			choice = item_n();
-		if (item_is_selected()) {
-			choice = item_n();
-			break;
-		}
-	}
-
-do_resize:
-	if (getmaxy(stdscr) < (height + CHECKLIST_HEIGTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-	if (getmaxx(stdscr) < (width + CHECKLIST_WIDTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-
-	max_choice = MIN(list_height, item_count());
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	list_width = width - 6;
-	box_y = height - list_height - 5;
-	box_x = (width - list_width) / 2 - 1;
-
-	/* create new window for the list */
-	list = subwin(dialog, list_height, list_width, y + box_y + 1,
-	              x + box_x + 1);
-
-	keypad(list, TRUE);
-
-	/* draw a box around the list items */
-	draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2,
-	         dlg.menubox_border.atr, dlg.menubox.atr);
-
-	/* Find length of longest item in order to center checklist */
-	check_x = 0;
-	item_foreach()
-		check_x = MAX(check_x, strlen(item_str()) + 4);
-	check_x = MIN(check_x, list_width);
-
-	check_x = (list_width - check_x) / 2;
-	item_x = check_x + 4;
-
-	if (choice >= list_height) {
-		scroll = choice - list_height + 1;
-		choice -= scroll;
-	}
-
-	/* Print the list */
-	for (i = 0; i < max_choice; i++) {
-		item_set(scroll + i);
-		print_item(list, i, i == choice);
-	}
-
-	print_arrows(dialog, choice, item_count(), scroll,
-		     box_y, box_x + check_x + 5, list_height);
-
-	print_buttons(dialog, height, width, 0);
-
-	wnoutrefresh(dialog);
-	wnoutrefresh(list);
-	doupdate();
-
-	while (key != KEY_ESC) {
-		key = wgetch(dialog);
-
-		for (i = 0; i < max_choice; i++) {
-			item_set(i + scroll);
-			if (toupper(key) == toupper(item_str()[0]))
-				break;
-		}
-
-		if (i < max_choice || key == KEY_UP || key == KEY_DOWN ||
-		    key == '+' || key == '-') {
-			if (key == KEY_UP || key == '-') {
-				if (!choice) {
-					if (!scroll)
-						continue;
-					/* Scroll list down */
-					if (list_height > 1) {
-						/* De-highlight current first item */
-						item_set(scroll);
-						print_item(list, 0, FALSE);
-						scrollok(list, TRUE);
-						wscrl(list, -1);
-						scrollok(list, FALSE);
-					}
-					scroll--;
-					item_set(scroll);
-					print_item(list, 0, TRUE);
-					print_arrows(dialog, choice, item_count(),
-						     scroll, box_y, box_x + check_x + 5, list_height);
-
-					wnoutrefresh(dialog);
-					wrefresh(list);
-
-					continue;	/* wait for another key press */
-				} else
-					i = choice - 1;
-			} else if (key == KEY_DOWN || key == '+') {
-				if (choice == max_choice - 1) {
-					if (scroll + choice >= item_count() - 1)
-						continue;
-					/* Scroll list up */
-					if (list_height > 1) {
-						/* De-highlight current last item before scrolling up */
-						item_set(scroll + max_choice - 1);
-						print_item(list,
-							    max_choice - 1,
-							    FALSE);
-						scrollok(list, TRUE);
-						wscrl(list, 1);
-						scrollok(list, FALSE);
-					}
-					scroll++;
-					item_set(scroll + max_choice - 1);
-					print_item(list, max_choice - 1, TRUE);
-
-					print_arrows(dialog, choice, item_count(),
-						     scroll, box_y, box_x + check_x + 5, list_height);
-
-					wnoutrefresh(dialog);
-					wrefresh(list);
-
-					continue;	/* wait for another key press */
-				} else
-					i = choice + 1;
-			}
-			if (i != choice) {
-				/* De-highlight current item */
-				item_set(scroll + choice);
-				print_item(list, choice, FALSE);
-				/* Highlight new item */
-				choice = i;
-				item_set(scroll + choice);
-				print_item(list, choice, TRUE);
-				wnoutrefresh(dialog);
-				wrefresh(list);
-			}
-			continue;	/* wait for another key press */
-		}
-		switch (key) {
-		case 'H':
-		case 'h':
-		case '?':
-			button = 1;
-			/* fall-through */
-		case 'S':
-		case 's':
-		case ' ':
-		case '\n':
-			item_foreach()
-				item_set_selected(0);
-			item_set(scroll + choice);
-			item_set_selected(1);
-			delwin(list);
-			delwin(dialog);
-			return button;
-		case TAB:
-		case KEY_LEFT:
-		case KEY_RIGHT:
-			button = ((key == KEY_LEFT ? --button : ++button) < 0)
-			    ? 1 : (button > 1 ? 0 : button);
-
-			print_buttons(dialog, height, width, button);
-			wrefresh(dialog);
-			break;
-		case 'X':
-		case 'x':
-			key = KEY_ESC;
-			break;
-		case KEY_ESC:
-			key = on_key_esc(dialog);
-			break;
-		case KEY_RESIZE:
-			delwin(list);
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		}
-
-		/* Now, update everything... */
-		doupdate();
-	}
-	delwin(list);
-	delwin(dialog);
-	return key;		/* ESC pressed */
-}
diff --git a/support/kconfig/lxdialog/dialog.h b/support/kconfig/lxdialog/dialog.h
deleted file mode 100644
index b4343d38..00000000
--- a/support/kconfig/lxdialog/dialog.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- *  dialog.h -- common declarations for all dialog modules
- *
- *  AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#ifndef KBUILD_NO_NLS
-# include <libintl.h>
-#else
-# define gettext(Msgid) ((const char *) (Msgid))
-#endif
-
-#ifdef __sun__
-#define CURS_MACROS
-#endif
-#include CURSES_LOC
-
-/*
- * Colors in ncurses 1.9.9e do not work properly since foreground and
- * background colors are OR'd rather than separately masked.  This version
- * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
- * with standard curses.  The simplest fix (to make this work with standard
- * curses) uses the wbkgdset() function, not used in the original hack.
- * Turn it off if we're building with 1.9.9e, since it just confuses things.
- */
-#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
-#define OLD_NCURSES 1
-#undef  wbkgdset
-#define wbkgdset(w,p)		/*nothing */
-#else
-#define OLD_NCURSES 0
-#endif
-
-#define TR(params) _tracef params
-
-#define KEY_ESC 27
-#define TAB 9
-#define MAX_LEN 2048
-#define BUF_SIZE (10*1024)
-#define MIN(x,y) (x < y ? x : y)
-#define MAX(x,y) (x > y ? x : y)
-
-#ifndef ACS_ULCORNER
-#define ACS_ULCORNER '+'
-#endif
-#ifndef ACS_LLCORNER
-#define ACS_LLCORNER '+'
-#endif
-#ifndef ACS_URCORNER
-#define ACS_URCORNER '+'
-#endif
-#ifndef ACS_LRCORNER
-#define ACS_LRCORNER '+'
-#endif
-#ifndef ACS_HLINE
-#define ACS_HLINE '-'
-#endif
-#ifndef ACS_VLINE
-#define ACS_VLINE '|'
-#endif
-#ifndef ACS_LTEE
-#define ACS_LTEE '+'
-#endif
-#ifndef ACS_RTEE
-#define ACS_RTEE '+'
-#endif
-#ifndef ACS_UARROW
-#define ACS_UARROW '^'
-#endif
-#ifndef ACS_DARROW
-#define ACS_DARROW 'v'
-#endif
-
-/* error return codes */
-#define ERRDISPLAYTOOSMALL (KEY_MAX + 1)
-
-/*
- *   Color definitions
- */
-struct dialog_color {
-	chtype atr;	/* Color attribute */
-	int fg;		/* foreground */
-	int bg;		/* background */
-	int hl;		/* highlight this item */
-};
-
-struct subtitle_list {
-	struct subtitle_list *next;
-	const char *text;
-};
-
-struct dialog_info {
-	const char *backtitle;
-	struct subtitle_list *subtitles;
-	struct dialog_color screen;
-	struct dialog_color shadow;
-	struct dialog_color dialog;
-	struct dialog_color title;
-	struct dialog_color border;
-	struct dialog_color button_active;
-	struct dialog_color button_inactive;
-	struct dialog_color button_key_active;
-	struct dialog_color button_key_inactive;
-	struct dialog_color button_label_active;
-	struct dialog_color button_label_inactive;
-	struct dialog_color inputbox;
-	struct dialog_color inputbox_border;
-	struct dialog_color searchbox;
-	struct dialog_color searchbox_title;
-	struct dialog_color searchbox_border;
-	struct dialog_color position_indicator;
-	struct dialog_color menubox;
-	struct dialog_color menubox_border;
-	struct dialog_color item;
-	struct dialog_color item_selected;
-	struct dialog_color tag;
-	struct dialog_color tag_selected;
-	struct dialog_color tag_key;
-	struct dialog_color tag_key_selected;
-	struct dialog_color check;
-	struct dialog_color check_selected;
-	struct dialog_color uarrow;
-	struct dialog_color darrow;
-};
-
-/*
- * Global variables
- */
-extern struct dialog_info dlg;
-extern char dialog_input_result[];
-extern int saved_x, saved_y;		/* Needed in signal handler in mconf.c */
-
-/*
- * Function prototypes
- */
-
-/* item list as used by checklist and menubox */
-void item_reset(void);
-void item_make(const char *fmt, ...);
-void item_add_str(const char *fmt, ...);
-void item_set_tag(char tag);
-void item_set_data(void *p);
-void item_set_selected(int val);
-int item_activate_selected(void);
-void *item_data(void);
-char item_tag(void);
-
-/* item list manipulation for lxdialog use */
-#define MAXITEMSTR 200
-struct dialog_item {
-	char str[MAXITEMSTR];	/* promtp displayed */
-	char tag;
-	void *data;	/* pointer to menu item - used by menubox+checklist */
-	int selected;	/* Set to 1 by dialog_*() function if selected. */
-};
-
-/* list of lialog_items */
-struct dialog_list {
-	struct dialog_item node;
-	struct dialog_list *next;
-};
-
-extern struct dialog_list *item_cur;
-extern struct dialog_list item_nil;
-extern struct dialog_list *item_head;
-
-int item_count(void);
-void item_set(int n);
-int item_n(void);
-const char *item_str(void);
-int item_is_selected(void);
-int item_is_tag(char tag);
-#define item_foreach() \
-	for (item_cur = item_head ? item_head: item_cur; \
-	     item_cur && (item_cur != &item_nil); item_cur = item_cur->next)
-
-/* generic key handlers */
-int on_key_esc(WINDOW *win);
-int on_key_resize(void);
-
-/* minimum (re)size values */
-#define CHECKLIST_HEIGTH_MIN 6	/* For dialog_checklist() */
-#define CHECKLIST_WIDTH_MIN 6
-#define INPUTBOX_HEIGTH_MIN 2	/* For dialog_inputbox() */
-#define INPUTBOX_WIDTH_MIN 2
-#define MENUBOX_HEIGTH_MIN 15	/* For dialog_menu() */
-#define MENUBOX_WIDTH_MIN 65
-#define TEXTBOX_HEIGTH_MIN 8	/* For dialog_textbox() */
-#define TEXTBOX_WIDTH_MIN 8
-#define YESNO_HEIGTH_MIN 4	/* For dialog_yesno() */
-#define YESNO_WIDTH_MIN 4
-#define WINDOW_HEIGTH_MIN 19	/* For init_dialog() */
-#define WINDOW_WIDTH_MIN 80
-
-int init_dialog(const char *backtitle);
-void set_dialog_backtitle(const char *backtitle);
-void set_dialog_subtitles(struct subtitle_list *subtitles);
-void end_dialog(int x, int y);
-void attr_clear(WINDOW * win, int height, int width, chtype attr);
-void dialog_clear(void);
-void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
-void print_button(WINDOW * win, const char *label, int y, int x, int selected);
-void print_title(WINDOW *dialog, const char *title, int width);
-void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
-	      chtype border);
-void draw_shadow(WINDOW * win, int y, int x, int height, int width);
-
-int first_alpha(const char *string, const char *exempt);
-int dialog_yesno(const char *title, const char *prompt, int height, int width);
-int dialog_msgbox(const char *title, const char *prompt, int height,
-		  int width, int pause);
-
-
-typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void
-			       *_data);
-int dialog_textbox(const char *title, char *tbuf, int initial_height,
-		   int initial_width, int *keys, int *_vscroll, int *_hscroll,
-		   update_text_fn update_text, void *data);
-int dialog_menu(const char *title, const char *prompt,
-		const void *selected, int *s_scroll);
-int dialog_checklist(const char *title, const char *prompt, int height,
-		     int width, int list_height);
-int dialog_inputbox(const char *title, const char *prompt, int height,
-		    int width, const char *init);
-
-/*
- * This is the base for fictitious keys, which activate
- * the buttons.
- *
- * Mouse-generated keys are the following:
- *   -- the first 32 are used as numbers, in addition to '0'-'9'
- *   -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
- *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
- */
-#define M_EVENT (KEY_MAX+1)
diff --git a/support/kconfig/lxdialog/inputbox.c b/support/kconfig/lxdialog/inputbox.c
deleted file mode 100644
index 447a5821..00000000
--- a/support/kconfig/lxdialog/inputbox.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- *  inputbox.c -- implements the input box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-char dialog_input_result[MAX_LEN + 1];
-
-/*
- *  Print the termination buttons
- */
-static void print_buttons(WINDOW * dialog, int height, int width, int selected)
-{
-	int x = width / 2 - 11;
-	int y = height - 2;
-
-	print_button(dialog, gettext("  Ok  "), y, x, selected == 0);
-	print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
-
-	wmove(dialog, y, x + 1 + 14 * selected);
-	wrefresh(dialog);
-}
-
-/*
- * Display a dialog box for inputing a string
- */
-int dialog_inputbox(const char *title, const char *prompt, int height, int width,
-                    const char *init)
-{
-	int i, x, y, box_y, box_x, box_width;
-	int input_x = 0, key = 0, button = -1;
-	int show_x, len, pos;
-	char *instr = dialog_input_result;
-	WINDOW *dialog;
-
-	if (!init)
-		instr[0] = '\0';
-	else
-		strcpy(instr, init);
-
-do_resize:
-	if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-	if (getmaxx(stdscr) <= (width - INPUTBOX_WIDTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	/* Draw the input field box */
-	box_width = width - 6;
-	getyx(dialog, y, x);
-	box_y = y + 2;
-	box_x = (width - box_width) / 2;
-	draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2,
-		 dlg.dialog.atr, dlg.border.atr);
-
-	print_buttons(dialog, height, width, 0);
-
-	/* Set up the initial value */
-	wmove(dialog, box_y, box_x);
-	wattrset(dialog, dlg.inputbox.atr);
-
-	len = strlen(instr);
-	pos = len;
-
-	if (len >= box_width) {
-		show_x = len - box_width + 1;
-		input_x = box_width - 1;
-		for (i = 0; i < box_width - 1; i++)
-			waddch(dialog, instr[show_x + i]);
-	} else {
-		show_x = 0;
-		input_x = len;
-		waddstr(dialog, instr);
-	}
-
-	wmove(dialog, box_y, box_x + input_x);
-
-	wrefresh(dialog);
-
-	while (key != KEY_ESC) {
-		key = wgetch(dialog);
-
-		if (button == -1) {	/* Input box selected */
-			switch (key) {
-			case TAB:
-			case KEY_UP:
-			case KEY_DOWN:
-				break;
-			case KEY_BACKSPACE:
-			case 127:
-				if (pos) {
-					wattrset(dialog, dlg.inputbox.atr);
-					if (input_x == 0) {
-						show_x--;
-					} else
-						input_x--;
-
-					if (pos < len) {
-						for (i = pos - 1; i < len; i++) {
-							instr[i] = instr[i+1];
-						}
-					}
-
-					pos--;
-					len--;
-					instr[len] = '\0';
-					wmove(dialog, box_y, box_x);
-					for (i = 0; i < box_width; i++) {
-						if (!instr[show_x + i]) {
-							waddch(dialog, ' ');
-							break;
-						}
-						waddch(dialog, instr[show_x + i]);
-					}
-					wmove(dialog, box_y, input_x + box_x);
-					wrefresh(dialog);
-				}
-				continue;
-			case KEY_LEFT:
-				if (pos > 0) {
-					if (input_x > 0) {
-						wmove(dialog, box_y, --input_x + box_x);
-					} else if (input_x == 0) {
-						show_x--;
-						wmove(dialog, box_y, box_x);
-						for (i = 0; i < box_width; i++) {
-							if (!instr[show_x + i]) {
-								waddch(dialog, ' ');
-								break;
-							}
-							waddch(dialog, instr[show_x + i]);
-						}
-						wmove(dialog, box_y, box_x);
-					}
-					pos--;
-				}
-				continue;
-			case KEY_RIGHT:
-				if (pos < len) {
-					if (input_x < box_width - 1) {
-						wmove(dialog, box_y, ++input_x + box_x);
-					} else if (input_x == box_width - 1) {
-						show_x++;
-						wmove(dialog, box_y, box_x);
-						for (i = 0; i < box_width; i++) {
-							if (!instr[show_x + i]) {
-								waddch(dialog, ' ');
-								break;
-							}
-							waddch(dialog, instr[show_x + i]);
-						}
-						wmove(dialog, box_y, input_x + box_x);
-					}
-					pos++;
-				}
-				continue;
-			default:
-				if (key < 0x100 && isprint(key)) {
-					if (len < MAX_LEN) {
-						wattrset(dialog, dlg.inputbox.atr);
-						if (pos < len) {
-							for (i = len; i > pos; i--)
-								instr[i] = instr[i-1];
-							instr[pos] = key;
-						} else {
-							instr[len] = key;
-						}
-						pos++;
-						len++;
-						instr[len] = '\0';
-
-						if (input_x == box_width - 1) {
-							show_x++;
-						} else {
-							input_x++;
-						}
-
-						wmove(dialog, box_y, box_x);
-						for (i = 0; i < box_width; i++) {
-							if (!instr[show_x + i]) {
-								waddch(dialog, ' ');
-								break;
-							}
-							waddch(dialog, instr[show_x + i]);
-						}
-						wmove(dialog, box_y, input_x + box_x);
-						wrefresh(dialog);
-					} else
-						flash();	/* Alarm user about overflow */
-					continue;
-				}
-			}
-		}
-		switch (key) {
-		case 'O':
-		case 'o':
-			delwin(dialog);
-			return 0;
-		case 'H':
-		case 'h':
-			delwin(dialog);
-			return 1;
-		case KEY_UP:
-		case KEY_LEFT:
-			switch (button) {
-			case -1:
-				button = 1;	/* Indicates "Help" button is selected */
-				print_buttons(dialog, height, width, 1);
-				break;
-			case 0:
-				button = -1;	/* Indicates input box is selected */
-				print_buttons(dialog, height, width, 0);
-				wmove(dialog, box_y, box_x + input_x);
-				wrefresh(dialog);
-				break;
-			case 1:
-				button = 0;	/* Indicates "OK" button is selected */
-				print_buttons(dialog, height, width, 0);
-				break;
-			}
-			break;
-		case TAB:
-		case KEY_DOWN:
-		case KEY_RIGHT:
-			switch (button) {
-			case -1:
-				button = 0;	/* Indicates "OK" button is selected */
-				print_buttons(dialog, height, width, 0);
-				break;
-			case 0:
-				button = 1;	/* Indicates "Help" button is selected */
-				print_buttons(dialog, height, width, 1);
-				break;
-			case 1:
-				button = -1;	/* Indicates input box is selected */
-				print_buttons(dialog, height, width, 0);
-				wmove(dialog, box_y, box_x + input_x);
-				wrefresh(dialog);
-				break;
-			}
-			break;
-		case ' ':
-		case '\n':
-			delwin(dialog);
-			return (button == -1 ? 0 : button);
-		case 'X':
-		case 'x':
-			key = KEY_ESC;
-			break;
-		case KEY_ESC:
-			key = on_key_esc(dialog);
-			break;
-		case KEY_RESIZE:
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		}
-	}
-
-	delwin(dialog);
-	return KEY_ESC;		/* ESC pressed */
-}
diff --git a/support/kconfig/lxdialog/menubox.c b/support/kconfig/lxdialog/menubox.c
deleted file mode 100644
index c93de0b2..00000000
--- a/support/kconfig/lxdialog/menubox.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- *  menubox.c -- implements the menu box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- *  Changes by Clifford Wolf (god@clifford.at)
- *
- *  [ 1998-06-13 ]
- *
- *    *)  A bugfix for the Page-Down problem
- *
- *    *)  Formerly when I used Page Down and Page Up, the cursor would be set
- *        to the first position in the menu box.  Now lxdialog is a bit
- *        smarter and works more like other menu systems (just have a look at
- *        it).
- *
- *    *)  Formerly if I selected something my scrolling would be broken because
- *        lxdialog is re-invoked by the Menuconfig shell script, can't
- *        remember the last scrolling position, and just sets it so that the
- *        cursor is at the bottom of the box.  Now it writes the temporary file
- *        lxdialog.scrltmp which contains this information. The file is
- *        deleted by lxdialog if the user leaves a submenu or enters a new
- *        one, but it would be nice if Menuconfig could make another "rm -f"
- *        just to be sure.  Just try it out - you will recognise a difference!
- *
- *  [ 1998-06-14 ]
- *
- *    *)  Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files
- *        and menus change their size on the fly.
- *
- *    *)  If for some reason the last scrolling position is not saved by
- *        lxdialog, it sets the scrolling so that the selected item is in the
- *        middle of the menu box, not at the bottom.
- *
- * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net)
- * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus.
- * This fixes a bug in Menuconfig where using ' ' to descend into menus
- * would leave mis-synchronized lxdialog.scrltmp files lying around,
- * fscanf would read in 'scroll', and eventually that value would get used.
- */
-
-#include "dialog.h"
-
-static int menu_width, item_x;
-
-/*
- * Print menu item
- */
-static void do_print_item(WINDOW * win, const char *item, int line_y,
-                          int selected, int hotkey)
-{
-	int j;
-	char *menu_item = malloc(menu_width + 1);
-
-	strncpy(menu_item, item, menu_width - item_x);
-	menu_item[menu_width - item_x] = '\0';
-	j = first_alpha(menu_item, "YyNnMmHh");
-
-	/* Clear 'residue' of last item */
-	wattrset(win, dlg.menubox.atr);
-	wmove(win, line_y, 0);
-#if OLD_NCURSES
-	{
-		int i;
-		for (i = 0; i < menu_width; i++)
-			waddch(win, ' ');
-	}
-#else
-	wclrtoeol(win);
-#endif
-	wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
-	mvwaddstr(win, line_y, item_x, menu_item);
-	if (hotkey) {
-		wattrset(win, selected ? dlg.tag_key_selected.atr
-			 : dlg.tag_key.atr);
-		mvwaddch(win, line_y, item_x + j, menu_item[j]);
-	}
-	if (selected) {
-		wmove(win, line_y, item_x + 1);
-	}
-	free(menu_item);
-	wrefresh(win);
-}
-
-#define print_item(index, choice, selected)				\
-do {									\
-	item_set(index);						\
-	do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \
-} while (0)
-
-/*
- * Print the scroll indicators.
- */
-static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x,
-			 int height)
-{
-	int cur_y, cur_x;
-
-	getyx(win, cur_y, cur_x);
-
-	wmove(win, y, x);
-
-	if (scroll > 0) {
-		wattrset(win, dlg.uarrow.atr);
-		waddch(win, ACS_UARROW);
-		waddstr(win, "(-)");
-	} else {
-		wattrset(win, dlg.menubox.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-
-	y = y + height + 1;
-	wmove(win, y, x);
-	wrefresh(win);
-
-	if ((height < item_no) && (scroll + height < item_no)) {
-		wattrset(win, dlg.darrow.atr);
-		waddch(win, ACS_DARROW);
-		waddstr(win, "(+)");
-	} else {
-		wattrset(win, dlg.menubox_border.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-
-	wmove(win, cur_y, cur_x);
-	wrefresh(win);
-}
-
-/*
- * Display the termination buttons.
- */
-static void print_buttons(WINDOW * win, int height, int width, int selected)
-{
-	int x = width / 2 - 28;
-	int y = height - 2;
-
-	print_button(win, gettext("Select"), y, x, selected == 0);
-	print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
-	print_button(win, gettext(" Help "), y, x + 24, selected == 2);
-	print_button(win, gettext(" Save "), y, x + 36, selected == 3);
-	print_button(win, gettext(" Load "), y, x + 48, selected == 4);
-
-	wmove(win, y, x + 1 + 12 * selected);
-	wrefresh(win);
-}
-
-/* scroll up n lines (n may be negative) */
-static void do_scroll(WINDOW *win, int *scroll, int n)
-{
-	/* Scroll menu up */
-	scrollok(win, TRUE);
-	wscrl(win, n);
-	scrollok(win, FALSE);
-	*scroll = *scroll + n;
-	wrefresh(win);
-}
-
-/*
- * Display a menu for choosing among a number of options
- */
-int dialog_menu(const char *title, const char *prompt,
-                const void *selected, int *s_scroll)
-{
-	int i, j, x, y, box_x, box_y;
-	int height, width, menu_height;
-	int key = 0, button = 0, scroll = 0, choice = 0;
-	int first_item =  0, max_choice;
-	WINDOW *dialog, *menu;
-
-do_resize:
-	height = getmaxy(stdscr);
-	width = getmaxx(stdscr);
-	if (height < MENUBOX_HEIGTH_MIN || width < MENUBOX_WIDTH_MIN)
-		return -ERRDISPLAYTOOSMALL;
-
-	height -= 4;
-	width  -= 5;
-	menu_height = height - 10;
-
-	max_choice = MIN(menu_height, item_count());
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	wbkgdset(dialog, dlg.dialog.atr & A_COLOR);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	menu_width = width - 6;
-	box_y = height - menu_height - 5;
-	box_x = (width - menu_width) / 2 - 1;
-
-	/* create new window for the menu */
-	menu = subwin(dialog, menu_height, menu_width,
-		      y + box_y + 1, x + box_x + 1);
-	keypad(menu, TRUE);
-
-	/* draw a box around the menu items */
-	draw_box(dialog, box_y, box_x, menu_height + 2, menu_width + 2,
-		 dlg.menubox_border.atr, dlg.menubox.atr);
-
-	if (menu_width >= 80)
-		item_x = (menu_width - 70) / 2;
-	else
-		item_x = 4;
-
-	/* Set choice to default item */
-	item_foreach()
-		if (selected && (selected == item_data()))
-			choice = item_n();
-	/* get the saved scroll info */
-	scroll = *s_scroll;
-	if ((scroll <= choice) && (scroll + max_choice > choice) &&
-	   (scroll >= 0) && (scroll + max_choice <= item_count())) {
-		first_item = scroll;
-		choice = choice - scroll;
-	} else {
-		scroll = 0;
-	}
-	if ((choice >= max_choice)) {
-		if (choice >= item_count() - max_choice / 2)
-			scroll = first_item = item_count() - max_choice;
-		else
-			scroll = first_item = choice - max_choice / 2;
-		choice = choice - scroll;
-	}
-
-	/* Print the menu */
-	for (i = 0; i < max_choice; i++) {
-		print_item(first_item + i, i, i == choice);
-	}
-
-	wnoutrefresh(menu);
-
-	print_arrows(dialog, item_count(), scroll,
-		     box_y, box_x + item_x + 1, menu_height);
-
-	print_buttons(dialog, height, width, 0);
-	wmove(menu, choice, item_x + 1);
-	wrefresh(menu);
-
-	while (key != KEY_ESC) {
-		key = wgetch(menu);
-
-		if (key < 256 && isalpha(key))
-			key = tolower(key);
-
-		if (strchr("ynmh", key))
-			i = max_choice;
-		else {
-			for (i = choice + 1; i < max_choice; i++) {
-				item_set(scroll + i);
-				j = first_alpha(item_str(), "YyNnMmHh");
-				if (key == tolower(item_str()[j]))
-					break;
-			}
-			if (i == max_choice)
-				for (i = 0; i < max_choice; i++) {
-					item_set(scroll + i);
-					j = first_alpha(item_str(), "YyNnMmHh");
-					if (key == tolower(item_str()[j]))
-						break;
-				}
-		}
-
-		if (item_count() != 0 &&
-		    (i < max_choice ||
-		     key == KEY_UP || key == KEY_DOWN ||
-		     key == '-' || key == '+' ||
-		     key == KEY_PPAGE || key == KEY_NPAGE)) {
-			/* Remove highligt of current item */
-			print_item(scroll + choice, choice, FALSE);
-
-			if (key == KEY_UP || key == '-') {
-				if (choice < 2 && scroll) {
-					/* Scroll menu down */
-					do_scroll(menu, &scroll, -1);
-
-					print_item(scroll, 0, FALSE);
-				} else
-					choice = MAX(choice - 1, 0);
-
-			} else if (key == KEY_DOWN || key == '+') {
-				print_item(scroll+choice, choice, FALSE);
-
-				if ((choice > max_choice - 3) &&
-				    (scroll + max_choice < item_count())) {
-					/* Scroll menu up */
-					do_scroll(menu, &scroll, 1);
-
-					print_item(scroll+max_choice - 1,
-						   max_choice - 1, FALSE);
-				} else
-					choice = MIN(choice + 1, max_choice - 1);
-
-			} else if (key == KEY_PPAGE) {
-				scrollok(menu, TRUE);
-				for (i = 0; (i < max_choice); i++) {
-					if (scroll > 0) {
-						do_scroll(menu, &scroll, -1);
-						print_item(scroll, 0, FALSE);
-					} else {
-						if (choice > 0)
-							choice--;
-					}
-				}
-
-			} else if (key == KEY_NPAGE) {
-				for (i = 0; (i < max_choice); i++) {
-					if (scroll + max_choice < item_count()) {
-						do_scroll(menu, &scroll, 1);
-						print_item(scroll+max_choice-1,
-							   max_choice - 1, FALSE);
-					} else {
-						if (choice + 1 < max_choice)
-							choice++;
-					}
-				}
-			} else
-				choice = i;
-
-			print_item(scroll + choice, choice, TRUE);
-
-			print_arrows(dialog, item_count(), scroll,
-				     box_y, box_x + item_x + 1, menu_height);
-
-			wnoutrefresh(dialog);
-			wrefresh(menu);
-
-			continue;	/* wait for another key press */
-		}
-
-		switch (key) {
-		case KEY_LEFT:
-		case TAB:
-		case KEY_RIGHT:
-			button = ((key == KEY_LEFT ? --button : ++button) < 0)
-			    ? 4 : (button > 4 ? 0 : button);
-
-			print_buttons(dialog, height, width, button);
-			wrefresh(menu);
-			break;
-		case ' ':
-		case 's':
-		case 'y':
-		case 'n':
-		case 'm':
-		case '/':
-		case 'h':
-		case '?':
-		case 'z':
-		case '\n':
-			/* save scroll info */
-			*s_scroll = scroll;
-			delwin(menu);
-			delwin(dialog);
-			item_set(scroll + choice);
-			item_set_selected(1);
-			switch (key) {
-			case 'h':
-			case '?':
-				return 2;
-			case 's':
-			case 'y':
-				return 5;
-			case 'n':
-				return 6;
-			case 'm':
-				return 7;
-			case ' ':
-				return 8;
-			case '/':
-				return 9;
-			case 'z':
-				return 10;
-			case '\n':
-				return button;
-			}
-			return 0;
-		case 'e':
-		case 'x':
-			key = KEY_ESC;
-			break;
-		case KEY_ESC:
-			key = on_key_esc(menu);
-			break;
-		case KEY_RESIZE:
-			on_key_resize();
-			delwin(menu);
-			delwin(dialog);
-			goto do_resize;
-		}
-	}
-	delwin(menu);
-	delwin(dialog);
-	return key;		/* ESC pressed */
-}
diff --git a/support/kconfig/lxdialog/textbox.c b/support/kconfig/lxdialog/textbox.c
deleted file mode 100644
index 1773319b..00000000
--- a/support/kconfig/lxdialog/textbox.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- *  textbox.c -- implements the text box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-static void back_lines(int n);
-static void print_page(WINDOW *win, int height, int width, update_text_fn
-		       update_text, void *data);
-static void print_line(WINDOW *win, int row, int width);
-static char *get_line(void);
-static void print_position(WINDOW * win);
-
-static int hscroll;
-static int begin_reached, end_reached, page_length;
-static char *buf;
-static char *page;
-
-/*
- * refresh window content
- */
-static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
-			     int cur_y, int cur_x, update_text_fn update_text,
-			     void *data)
-{
-	print_page(box, boxh, boxw, update_text, data);
-	print_position(dialog);
-	wmove(dialog, cur_y, cur_x);	/* Restore cursor position */
-	wrefresh(dialog);
-}
-
-
-/*
- * Display text from a file in a dialog box.
- *
- * keys is a null-terminated array
- * update_text() may not add or remove any '\n' or '\0' in tbuf
- */
-int dialog_textbox(const char *title, char *tbuf, int initial_height,
-		   int initial_width, int *keys, int *_vscroll, int *_hscroll,
-		   update_text_fn update_text, void *data)
-{
-	int i, x, y, cur_x, cur_y, key = 0;
-	int height, width, boxh, boxw;
-	WINDOW *dialog, *box;
-	bool done = false;
-
-	begin_reached = 1;
-	end_reached = 0;
-	page_length = 0;
-	hscroll = 0;
-	buf = tbuf;
-	page = buf;	/* page is pointer to start of page to be displayed */
-
-	if (_vscroll && *_vscroll) {
-		begin_reached = 0;
-
-		for (i = 0; i < *_vscroll; i++)
-			get_line();
-	}
-	if (_hscroll)
-		hscroll = *_hscroll;
-
-do_resize:
-	getmaxyx(stdscr, height, width);
-	if (height < TEXTBOX_HEIGTH_MIN || width < TEXTBOX_WIDTH_MIN)
-		return -ERRDISPLAYTOOSMALL;
-	if (initial_height != 0)
-		height = initial_height;
-	else
-		if (height > 4)
-			height -= 4;
-		else
-			height = 0;
-	if (initial_width != 0)
-		width = initial_width;
-	else
-		if (width > 5)
-			width -= 5;
-		else
-			width = 0;
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	/* Create window for box region, used for scrolling text */
-	boxh = height - 4;
-	boxw = width - 2;
-	box = subwin(dialog, boxh, boxw, y + 1, x + 1);
-	wattrset(box, dlg.dialog.atr);
-	wbkgdset(box, dlg.dialog.atr & A_COLOR);
-
-	keypad(box, TRUE);
-
-	/* register the new window, along with its borders */
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	wbkgdset(dialog, dlg.dialog.atr & A_COLOR);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	print_button(dialog, gettext(" Exit "), height - 2, width / 2 - 4, TRUE);
-	wnoutrefresh(dialog);
-	getyx(dialog, cur_y, cur_x);	/* Save cursor position */
-
-	/* Print first page of text */
-	attr_clear(box, boxh, boxw, dlg.dialog.atr);
-	refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text,
-			 data);
-
-	while (!done) {
-		key = wgetch(dialog);
-		switch (key) {
-		case 'E':	/* Exit */
-		case 'e':
-		case 'X':
-		case 'x':
-		case 'q':
-		case '\n':
-			done = true;
-			break;
-		case 'g':	/* First page */
-		case KEY_HOME:
-			if (!begin_reached) {
-				begin_reached = 1;
-				page = buf;
-				refresh_text_box(dialog, box, boxh, boxw,
-						 cur_y, cur_x, update_text,
-						 data);
-			}
-			break;
-		case 'G':	/* Last page */
-		case KEY_END:
-
-			end_reached = 1;
-			/* point to last char in buf */
-			page = buf + strlen(buf);
-			back_lines(boxh);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'K':	/* Previous line */
-		case 'k':
-		case KEY_UP:
-			if (begin_reached)
-				break;
-
-			back_lines(page_length + 1);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'B':	/* Previous page */
-		case 'b':
-		case 'u':
-		case KEY_PPAGE:
-			if (begin_reached)
-				break;
-			back_lines(page_length + boxh);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'J':	/* Next line */
-		case 'j':
-		case KEY_DOWN:
-			if (end_reached)
-				break;
-
-			back_lines(page_length - 1);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case KEY_NPAGE:	/* Next page */
-		case ' ':
-		case 'd':
-			if (end_reached)
-				break;
-
-			begin_reached = 0;
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case '0':	/* Beginning of line */
-		case 'H':	/* Scroll left */
-		case 'h':
-		case KEY_LEFT:
-			if (hscroll <= 0)
-				break;
-
-			if (key == '0')
-				hscroll = 0;
-			else
-				hscroll--;
-			/* Reprint current page to scroll horizontally */
-			back_lines(page_length);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'L':	/* Scroll right */
-		case 'l':
-		case KEY_RIGHT:
-			if (hscroll >= MAX_LEN)
-				break;
-			hscroll++;
-			/* Reprint current page to scroll horizontally */
-			back_lines(page_length);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case KEY_ESC:
-			if (on_key_esc(dialog) == KEY_ESC)
-				done = true;
-			break;
-		case KEY_RESIZE:
-			back_lines(height);
-			delwin(box);
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		default:
-			for (i = 0; keys[i]; i++) {
-				if (key == keys[i]) {
-					done = true;
-					break;
-				}
-			}
-		}
-	}
-	delwin(box);
-	delwin(dialog);
-	if (_vscroll) {
-		const char *s;
-
-		s = buf;
-		*_vscroll = 0;
-		back_lines(page_length);
-		while (s < page && (s = strchr(s, '\n'))) {
-			(*_vscroll)++;
-			s++;
-		}
-	}
-	if (_hscroll)
-		*_hscroll = hscroll;
-	return key;
-}
-
-/*
- * Go back 'n' lines in text. Called by dialog_textbox().
- * 'page' will be updated to point to the desired line in 'buf'.
- */
-static void back_lines(int n)
-{
-	int i;
-
-	begin_reached = 0;
-	/* Go back 'n' lines */
-	for (i = 0; i < n; i++) {
-		if (*page == '\0') {
-			if (end_reached) {
-				end_reached = 0;
-				continue;
-			}
-		}
-		if (page == buf) {
-			begin_reached = 1;
-			return;
-		}
-		page--;
-		do {
-			if (page == buf) {
-				begin_reached = 1;
-				return;
-			}
-			page--;
-		} while (*page != '\n');
-		page++;
-	}
-}
-
-/*
- * Print a new page of text.
- */
-static void print_page(WINDOW *win, int height, int width, update_text_fn
-		       update_text, void *data)
-{
-	int i, passed_end = 0;
-
-	if (update_text) {
-		char *end;
-
-		for (i = 0; i < height; i++)
-			get_line();
-		end = page;
-		back_lines(height);
-		update_text(buf, page - buf, end - buf, data);
-	}
-
-	page_length = 0;
-	for (i = 0; i < height; i++) {
-		print_line(win, i, width);
-		if (!passed_end)
-			page_length++;
-		if (end_reached && !passed_end)
-			passed_end = 1;
-	}
-	wnoutrefresh(win);
-}
-
-/*
- * Print a new line of text.
- */
-static void print_line(WINDOW * win, int row, int width)
-{
-	char *line;
-
-	line = get_line();
-	line += MIN(strlen(line), hscroll);	/* Scroll horizontally */
-	wmove(win, row, 0);	/* move cursor to correct line */
-	waddch(win, ' ');
-	waddnstr(win, line, MIN(strlen(line), width - 2));
-
-	/* Clear 'residue' of previous line */
-#if OLD_NCURSES
-	{
-		int x = getcurx(win);
-		int i;
-		for (i = 0; i < width - x; i++)
-			waddch(win, ' ');
-	}
-#else
-	wclrtoeol(win);
-#endif
-}
-
-/*
- * Return current line of text. Called by dialog_textbox() and print_line().
- * 'page' should point to start of current line before calling, and will be
- * updated to point to start of next line.
- */
-static char *get_line(void)
-{
-	int i = 0;
-	static char line[MAX_LEN + 1];
-
-	end_reached = 0;
-	while (*page != '\n') {
-		if (*page == '\0') {
-			end_reached = 1;
-			break;
-		} else if (i < MAX_LEN)
-			line[i++] = *(page++);
-		else {
-			/* Truncate lines longer than MAX_LEN characters */
-			if (i == MAX_LEN)
-				line[i++] = '\0';
-			page++;
-		}
-	}
-	if (i <= MAX_LEN)
-		line[i] = '\0';
-	if (!end_reached)
-		page++;		/* move past '\n' */
-
-	return line;
-}
-
-/*
- * Print current position
- */
-static void print_position(WINDOW * win)
-{
-	int percent;
-
-	wattrset(win, dlg.position_indicator.atr);
-	wbkgdset(win, dlg.position_indicator.atr & A_COLOR);
-	percent = (page - buf) * 100 / strlen(buf);
-	wmove(win, getmaxy(win) - 3, getmaxx(win) - 9);
-	wprintw(win, "(%3d%%)", percent);
-}
diff --git a/support/kconfig/lxdialog/util.c b/support/kconfig/lxdialog/util.c
deleted file mode 100644
index 58a8289d..00000000
--- a/support/kconfig/lxdialog/util.c
+++ /dev/null
@@ -1,713 +0,0 @@
-/*
- *  util.c
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdarg.h>
-
-#include "dialog.h"
-
-/* Needed in signal handler in mconf.c */
-int saved_x, saved_y;
-
-struct dialog_info dlg;
-
-static void set_mono_theme(void)
-{
-	dlg.screen.atr = A_NORMAL;
-	dlg.shadow.atr = A_NORMAL;
-	dlg.dialog.atr = A_NORMAL;
-	dlg.title.atr = A_BOLD;
-	dlg.border.atr = A_NORMAL;
-	dlg.button_active.atr = A_REVERSE;
-	dlg.button_inactive.atr = A_DIM;
-	dlg.button_key_active.atr = A_REVERSE;
-	dlg.button_key_inactive.atr = A_BOLD;
-	dlg.button_label_active.atr = A_REVERSE;
-	dlg.button_label_inactive.atr = A_NORMAL;
-	dlg.inputbox.atr = A_NORMAL;
-	dlg.inputbox_border.atr = A_NORMAL;
-	dlg.searchbox.atr = A_NORMAL;
-	dlg.searchbox_title.atr = A_BOLD;
-	dlg.searchbox_border.atr = A_NORMAL;
-	dlg.position_indicator.atr = A_BOLD;
-	dlg.menubox.atr = A_NORMAL;
-	dlg.menubox_border.atr = A_NORMAL;
-	dlg.item.atr = A_NORMAL;
-	dlg.item_selected.atr = A_REVERSE;
-	dlg.tag.atr = A_BOLD;
-	dlg.tag_selected.atr = A_REVERSE;
-	dlg.tag_key.atr = A_BOLD;
-	dlg.tag_key_selected.atr = A_REVERSE;
-	dlg.check.atr = A_BOLD;
-	dlg.check_selected.atr = A_REVERSE;
-	dlg.uarrow.atr = A_BOLD;
-	dlg.darrow.atr = A_BOLD;
-}
-
-#define DLG_COLOR(dialog, f, b, h) \
-do {                               \
-	dlg.dialog.fg = (f);       \
-	dlg.dialog.bg = (b);       \
-	dlg.dialog.hl = (h);       \
-} while (0)
-
-static void set_classic_theme(void)
-{
-	DLG_COLOR(screen,                COLOR_CYAN,   COLOR_BLUE,   true);
-	DLG_COLOR(shadow,                COLOR_BLACK,  COLOR_BLACK,  true);
-	DLG_COLOR(dialog,                COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(title,                 COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(border,                COLOR_WHITE,  COLOR_WHITE,  true);
-	DLG_COLOR(button_active,         COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(button_inactive,       COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(button_key_active,     COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(button_key_inactive,   COLOR_RED,    COLOR_WHITE,  false);
-	DLG_COLOR(button_label_active,   COLOR_YELLOW, COLOR_BLUE,   true);
-	DLG_COLOR(button_label_inactive, COLOR_BLACK,  COLOR_WHITE,  true);
-	DLG_COLOR(inputbox,              COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(inputbox_border,       COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(searchbox,             COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(searchbox_title,       COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(searchbox_border,      COLOR_WHITE,  COLOR_WHITE,  true);
-	DLG_COLOR(position_indicator,    COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(menubox,               COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(menubox_border,        COLOR_WHITE,  COLOR_WHITE,  true);
-	DLG_COLOR(item,                  COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(item_selected,         COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(tag,                   COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(tag_selected,          COLOR_YELLOW, COLOR_BLUE,   true);
-	DLG_COLOR(tag_key,               COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(tag_key_selected,      COLOR_YELLOW, COLOR_BLUE,   true);
-	DLG_COLOR(check,                 COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(check_selected,        COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(uarrow,                COLOR_GREEN,  COLOR_WHITE,  true);
-	DLG_COLOR(darrow,                COLOR_GREEN,  COLOR_WHITE,  true);
-}
-
-static void set_blackbg_theme(void)
-{
-	DLG_COLOR(screen, COLOR_RED,   COLOR_BLACK, true);
-	DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, false);
-	DLG_COLOR(dialog, COLOR_WHITE, COLOR_BLACK, false);
-	DLG_COLOR(title,  COLOR_RED,   COLOR_BLACK, false);
-	DLG_COLOR(border, COLOR_BLACK, COLOR_BLACK, true);
-
-	DLG_COLOR(button_active,         COLOR_YELLOW, COLOR_RED,   false);
-	DLG_COLOR(button_inactive,       COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(button_key_active,     COLOR_YELLOW, COLOR_RED,   true);
-	DLG_COLOR(button_key_inactive,   COLOR_RED,    COLOR_BLACK, false);
-	DLG_COLOR(button_label_active,   COLOR_WHITE,  COLOR_RED,   false);
-	DLG_COLOR(button_label_inactive, COLOR_BLACK,  COLOR_BLACK, true);
-
-	DLG_COLOR(inputbox,         COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(inputbox_border,  COLOR_YELLOW, COLOR_BLACK, false);
-
-	DLG_COLOR(searchbox,        COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(searchbox_title,  COLOR_YELLOW, COLOR_BLACK, true);
-	DLG_COLOR(searchbox_border, COLOR_BLACK,  COLOR_BLACK, true);
-
-	DLG_COLOR(position_indicator, COLOR_RED, COLOR_BLACK,  false);
-
-	DLG_COLOR(menubox,          COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(menubox_border,   COLOR_BLACK,  COLOR_BLACK, true);
-
-	DLG_COLOR(item,             COLOR_WHITE, COLOR_BLACK, false);
-	DLG_COLOR(item_selected,    COLOR_WHITE, COLOR_RED,   false);
-
-	DLG_COLOR(tag,              COLOR_RED,    COLOR_BLACK, false);
-	DLG_COLOR(tag_selected,     COLOR_YELLOW, COLOR_RED,   true);
-	DLG_COLOR(tag_key,          COLOR_RED,    COLOR_BLACK, false);
-	DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_RED,   true);
-
-	DLG_COLOR(check,            COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(check_selected,   COLOR_YELLOW, COLOR_RED,   true);
-
-	DLG_COLOR(uarrow, COLOR_RED, COLOR_BLACK, false);
-	DLG_COLOR(darrow, COLOR_RED, COLOR_BLACK, false);
-}
-
-static void set_bluetitle_theme(void)
-{
-	set_classic_theme();
-	DLG_COLOR(title,               COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(button_key_active,   COLOR_YELLOW, COLOR_BLUE,  true);
-	DLG_COLOR(button_label_active, COLOR_WHITE,  COLOR_BLUE,  true);
-	DLG_COLOR(searchbox_title,     COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(position_indicator,  COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(tag,                 COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(tag_key,             COLOR_BLUE,   COLOR_WHITE, true);
-
-}
-
-/*
- * Select color theme
- */
-static int set_theme(const char *theme)
-{
-	int use_color = 1;
-	if (!theme)
-		set_bluetitle_theme();
-	else if (strcmp(theme, "classic") == 0)
-		set_classic_theme();
-	else if (strcmp(theme, "bluetitle") == 0)
-		set_bluetitle_theme();
-	else if (strcmp(theme, "blackbg") == 0)
-		set_blackbg_theme();
-	else if (strcmp(theme, "mono") == 0)
-		use_color = 0;
-
-	return use_color;
-}
-
-static void init_one_color(struct dialog_color *color)
-{
-	static int pair = 0;
-
-	pair++;
-	init_pair(pair, color->fg, color->bg);
-	if (color->hl)
-		color->atr = A_BOLD | COLOR_PAIR(pair);
-	else
-		color->atr = COLOR_PAIR(pair);
-}
-
-static void init_dialog_colors(void)
-{
-	init_one_color(&dlg.screen);
-	init_one_color(&dlg.shadow);
-	init_one_color(&dlg.dialog);
-	init_one_color(&dlg.title);
-	init_one_color(&dlg.border);
-	init_one_color(&dlg.button_active);
-	init_one_color(&dlg.button_inactive);
-	init_one_color(&dlg.button_key_active);
-	init_one_color(&dlg.button_key_inactive);
-	init_one_color(&dlg.button_label_active);
-	init_one_color(&dlg.button_label_inactive);
-	init_one_color(&dlg.inputbox);
-	init_one_color(&dlg.inputbox_border);
-	init_one_color(&dlg.searchbox);
-	init_one_color(&dlg.searchbox_title);
-	init_one_color(&dlg.searchbox_border);
-	init_one_color(&dlg.position_indicator);
-	init_one_color(&dlg.menubox);
-	init_one_color(&dlg.menubox_border);
-	init_one_color(&dlg.item);
-	init_one_color(&dlg.item_selected);
-	init_one_color(&dlg.tag);
-	init_one_color(&dlg.tag_selected);
-	init_one_color(&dlg.tag_key);
-	init_one_color(&dlg.tag_key_selected);
-	init_one_color(&dlg.check);
-	init_one_color(&dlg.check_selected);
-	init_one_color(&dlg.uarrow);
-	init_one_color(&dlg.darrow);
-}
-
-/*
- * Setup for color display
- */
-static void color_setup(const char *theme)
-{
-	int use_color;
-
-	use_color = set_theme(theme);
-	if (use_color && has_colors()) {
-		start_color();
-		init_dialog_colors();
-	} else
-		set_mono_theme();
-}
-
-/*
- * Set window to attribute 'attr'
- */
-void attr_clear(WINDOW * win, int height, int width, chtype attr)
-{
-	int i, j;
-
-	wattrset(win, attr);
-	for (i = 0; i < height; i++) {
-		wmove(win, i, 0);
-		for (j = 0; j < width; j++)
-			waddch(win, ' ');
-	}
-	touchwin(win);
-}
-
-void dialog_clear(void)
-{
-	int lines, columns;
-
-	lines = getmaxy(stdscr);
-	columns = getmaxx(stdscr);
-
-	attr_clear(stdscr, lines, columns, dlg.screen.atr);
-	/* Display background title if it exists ... - SLH */
-	if (dlg.backtitle != NULL) {
-		int i, len = 0, skip = 0;
-		struct subtitle_list *pos;
-
-		wattrset(stdscr, dlg.screen.atr);
-		mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle);
-
-		for (pos = dlg.subtitles; pos != NULL; pos = pos->next) {
-			/* 3 is for the arrow and spaces */
-			len += strlen(pos->text) + 3;
-		}
-
-		wmove(stdscr, 1, 1);
-		if (len > columns - 2) {
-			const char *ellipsis = "[...] ";
-			waddstr(stdscr, ellipsis);
-			skip = len - (columns - 2 - strlen(ellipsis));
-		}
-
-		for (pos = dlg.subtitles; pos != NULL; pos = pos->next) {
-			if (skip == 0)
-				waddch(stdscr, ACS_RARROW);
-			else
-				skip--;
-
-			if (skip == 0)
-				waddch(stdscr, ' ');
-			else
-				skip--;
-
-			if (skip < strlen(pos->text)) {
-				waddstr(stdscr, pos->text + skip);
-				skip = 0;
-			} else
-				skip -= strlen(pos->text);
-
-			if (skip == 0)
-				waddch(stdscr, ' ');
-			else
-				skip--;
-		}
-
-		for (i = len + 1; i < columns - 1; i++)
-			waddch(stdscr, ACS_HLINE);
-	}
-	wnoutrefresh(stdscr);
-}
-
-/*
- * Do some initialization for dialog
- */
-int init_dialog(const char *backtitle)
-{
-	int height, width;
-
-	initscr();		/* Init curses */
-
-	/* Get current cursor position for signal handler in mconf.c */
-	getyx(stdscr, saved_y, saved_x);
-
-	getmaxyx(stdscr, height, width);
-	if (height < WINDOW_HEIGTH_MIN || width < WINDOW_WIDTH_MIN) {
-		endwin();
-		return -ERRDISPLAYTOOSMALL;
-	}
-
-	dlg.backtitle = backtitle;
-	color_setup(getenv("MENUCONFIG_COLOR"));
-
-	keypad(stdscr, TRUE);
-	cbreak();
-	noecho();
-	dialog_clear();
-
-	return 0;
-}
-
-void set_dialog_backtitle(const char *backtitle)
-{
-	dlg.backtitle = backtitle;
-}
-
-void set_dialog_subtitles(struct subtitle_list *subtitles)
-{
-	dlg.subtitles = subtitles;
-}
-
-/*
- * End using dialog functions.
- */
-void end_dialog(int x, int y)
-{
-	/* move cursor back to original position */
-	move(y, x);
-	refresh();
-	endwin();
-}
-
-/* Print the title of the dialog. Center the title and truncate
- * tile if wider than dialog (- 2 chars).
- **/
-void print_title(WINDOW *dialog, const char *title, int width)
-{
-	if (title) {
-		int tlen = MIN(width - 2, strlen(title));
-		wattrset(dialog, dlg.title.atr);
-		mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' ');
-		mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen);
-		waddch(dialog, ' ');
-	}
-}
-
-/*
- * Print a string of text in a window, automatically wrap around to the
- * next line if the string is too long to fit on one line. Newline
- * characters '\n' are propperly processed.  We start on a new line
- * if there is no room for at least 4 nonblanks following a double-space.
- */
-void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x)
-{
-	int newl, cur_x, cur_y;
-	int prompt_len, room, wlen;
-	char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *newline_separator = 0;
-
-	strcpy(tempstr, prompt);
-
-	prompt_len = strlen(tempstr);
-
-	if (prompt_len <= width - x * 2) {	/* If prompt is short */
-		wmove(win, y, (width - prompt_len) / 2);
-		waddstr(win, tempstr);
-	} else {
-		cur_x = x;
-		cur_y = y;
-		newl = 1;
-		word = tempstr;
-		while (word && *word) {
-			sp = strpbrk(word, "\n ");
-			if (sp && *sp == '\n')
-				newline_separator = sp;
-
-			if (sp)
-				*sp++ = 0;
-
-			/* Wrap to next line if either the word does not fit,
-			   or it is the first word of a new sentence, and it is
-			   short, and the next word does not fit. */
-			room = width - cur_x;
-			wlen = strlen(word);
-			if (wlen > room ||
-			    (newl && wlen < 4 && sp
-			     && wlen + 1 + strlen(sp) > room
-			     && (!(sp2 = strpbrk(sp, "\n "))
-				 || wlen + 1 + (sp2 - sp) > room))) {
-				cur_y++;
-				cur_x = x;
-			}
-			wmove(win, cur_y, cur_x);
-			waddstr(win, word);
-			getyx(win, cur_y, cur_x);
-
-			/* Move to the next line if the word separator was a newline */
-			if (newline_separator) {
-				cur_y++;
-				cur_x = x;
-				newline_separator = 0;
-			} else
-				cur_x++;
-
-			if (sp && *sp == ' ') {
-				cur_x++;	/* double space */
-				while (*++sp == ' ') ;
-				newl = 1;
-			} else
-				newl = 0;
-			word = sp;
-		}
-	}
-}
-
-/*
- * Print a button
- */
-void print_button(WINDOW * win, const char *label, int y, int x, int selected)
-{
-	int i, temp;
-
-	wmove(win, y, x);
-	wattrset(win, selected ? dlg.button_active.atr
-		 : dlg.button_inactive.atr);
-	waddstr(win, "<");
-	temp = strspn(label, " ");
-	label += temp;
-	wattrset(win, selected ? dlg.button_label_active.atr
-		 : dlg.button_label_inactive.atr);
-	for (i = 0; i < temp; i++)
-		waddch(win, ' ');
-	wattrset(win, selected ? dlg.button_key_active.atr
-		 : dlg.button_key_inactive.atr);
-	waddch(win, label[0]);
-	wattrset(win, selected ? dlg.button_label_active.atr
-		 : dlg.button_label_inactive.atr);
-	waddstr(win, (char *)label + 1);
-	wattrset(win, selected ? dlg.button_active.atr
-		 : dlg.button_inactive.atr);
-	waddstr(win, ">");
-	wmove(win, y, x + temp + 1);
-}
-
-/*
- * Draw a rectangular box with line drawing characters
- */
-void
-draw_box(WINDOW * win, int y, int x, int height, int width,
-	 chtype box, chtype border)
-{
-	int i, j;
-
-	wattrset(win, 0);
-	for (i = 0; i < height; i++) {
-		wmove(win, y + i, x);
-		for (j = 0; j < width; j++)
-			if (!i && !j)
-				waddch(win, border | ACS_ULCORNER);
-			else if (i == height - 1 && !j)
-				waddch(win, border | ACS_LLCORNER);
-			else if (!i && j == width - 1)
-				waddch(win, box | ACS_URCORNER);
-			else if (i == height - 1 && j == width - 1)
-				waddch(win, box | ACS_LRCORNER);
-			else if (!i)
-				waddch(win, border | ACS_HLINE);
-			else if (i == height - 1)
-				waddch(win, box | ACS_HLINE);
-			else if (!j)
-				waddch(win, border | ACS_VLINE);
-			else if (j == width - 1)
-				waddch(win, box | ACS_VLINE);
-			else
-				waddch(win, box | ' ');
-	}
-}
-
-/*
- * Draw shadows along the right and bottom edge to give a more 3D look
- * to the boxes
- */
-void draw_shadow(WINDOW * win, int y, int x, int height, int width)
-{
-	int i;
-
-	if (has_colors()) {	/* Whether terminal supports color? */
-		wattrset(win, dlg.shadow.atr);
-		wmove(win, y + height, x + 2);
-		for (i = 0; i < width; i++)
-			waddch(win, winch(win) & A_CHARTEXT);
-		for (i = y + 1; i < y + height + 1; i++) {
-			wmove(win, i, x + width);
-			waddch(win, winch(win) & A_CHARTEXT);
-			waddch(win, winch(win) & A_CHARTEXT);
-		}
-		wnoutrefresh(win);
-	}
-}
-
-/*
- *  Return the position of the first alphabetic character in a string.
- */
-int first_alpha(const char *string, const char *exempt)
-{
-	int i, in_paren = 0, c;
-
-	for (i = 0; i < strlen(string); i++) {
-		c = tolower(string[i]);
-
-		if (strchr("<[(", c))
-			++in_paren;
-		if (strchr(">])", c) && in_paren > 0)
-			--in_paren;
-
-		if ((!in_paren) && isalpha(c) && strchr(exempt, c) == 0)
-			return i;
-	}
-
-	return 0;
-}
-
-/*
- * ncurses uses ESC to detect escaped char sequences. This resutl in
- * a small timeout before ESC is actually delivered to the application.
- * lxdialog suggest <ESC> <ESC> which is correctly translated to two
- * times esc. But then we need to ignore the second esc to avoid stepping
- * out one menu too much. Filter away all escaped key sequences since
- * keypad(FALSE) turn off ncurses support for escape sequences - and thats
- * needed to make notimeout() do as expected.
- */
-int on_key_esc(WINDOW *win)
-{
-	int key;
-	int key2;
-	int key3;
-
-	nodelay(win, TRUE);
-	keypad(win, FALSE);
-	key = wgetch(win);
-	key2 = wgetch(win);
-	do {
-		key3 = wgetch(win);
-	} while (key3 != ERR);
-	nodelay(win, FALSE);
-	keypad(win, TRUE);
-	if (key == KEY_ESC && key2 == ERR)
-		return KEY_ESC;
-	else if (key != ERR && key != KEY_ESC && key2 == ERR)
-		ungetch(key);
-
-	return -1;
-}
-
-/* redraw screen in new size */
-int on_key_resize(void)
-{
-	dialog_clear();
-	return KEY_RESIZE;
-}
-
-struct dialog_list *item_cur;
-struct dialog_list item_nil;
-struct dialog_list *item_head;
-
-void item_reset(void)
-{
-	struct dialog_list *p, *next;
-
-	for (p = item_head; p; p = next) {
-		next = p->next;
-		free(p);
-	}
-	item_head = NULL;
-	item_cur = &item_nil;
-}
-
-void item_make(const char *fmt, ...)
-{
-	va_list ap;
-	struct dialog_list *p = malloc(sizeof(*p));
-
-	if (item_head)
-		item_cur->next = p;
-	else
-		item_head = p;
-	item_cur = p;
-	memset(p, 0, sizeof(*p));
-
-	va_start(ap, fmt);
-	vsnprintf(item_cur->node.str, sizeof(item_cur->node.str), fmt, ap);
-	va_end(ap);
-}
-
-void item_add_str(const char *fmt, ...)
-{
-	va_list ap;
-        size_t avail;
-
-	avail = sizeof(item_cur->node.str) - strlen(item_cur->node.str);
-
-	va_start(ap, fmt);
-	vsnprintf(item_cur->node.str + strlen(item_cur->node.str),
-		  avail, fmt, ap);
-	item_cur->node.str[sizeof(item_cur->node.str) - 1] = '\0';
-	va_end(ap);
-}
-
-void item_set_tag(char tag)
-{
-	item_cur->node.tag = tag;
-}
-void item_set_data(void *ptr)
-{
-	item_cur->node.data = ptr;
-}
-
-void item_set_selected(int val)
-{
-	item_cur->node.selected = val;
-}
-
-int item_activate_selected(void)
-{
-	item_foreach()
-		if (item_is_selected())
-			return 1;
-	return 0;
-}
-
-void *item_data(void)
-{
-	return item_cur->node.data;
-}
-
-char item_tag(void)
-{
-	return item_cur->node.tag;
-}
-
-int item_count(void)
-{
-	int n = 0;
-	struct dialog_list *p;
-
-	for (p = item_head; p; p = p->next)
-		n++;
-	return n;
-}
-
-void item_set(int n)
-{
-	int i = 0;
-	item_foreach()
-		if (i++ == n)
-			return;
-}
-
-int item_n(void)
-{
-	int n = 0;
-	struct dialog_list *p;
-
-	for (p = item_head; p; p = p->next) {
-		if (p == item_cur)
-			return n;
-		n++;
-	}
-	return 0;
-}
-
-const char *item_str(void)
-{
-	return item_cur->node.str;
-}
-
-int item_is_selected(void)
-{
-	return (item_cur->node.selected != 0);
-}
-
-int item_is_tag(char tag)
-{
-	return (item_cur->node.tag == tag);
-}
diff --git a/support/kconfig/lxdialog/yesno.c b/support/kconfig/lxdialog/yesno.c
deleted file mode 100644
index 676fb2f8..00000000
--- a/support/kconfig/lxdialog/yesno.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *  yesno.c -- implements the yes/no box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-/*
- * Display termination buttons
- */
-static void print_buttons(WINDOW * dialog, int height, int width, int selected)
-{
-	int x = width / 2 - 10;
-	int y = height - 2;
-
-	print_button(dialog, gettext(" Yes "), y, x, selected == 0);
-	print_button(dialog, gettext("  No  "), y, x + 13, selected == 1);
-
-	wmove(dialog, y, x + 1 + 13 * selected);
-	wrefresh(dialog);
-}
-
-/*
- * Display a dialog box with two buttons - Yes and No
- */
-int dialog_yesno(const char *title, const char *prompt, int height, int width)
-{
-	int i, x, y, key = 0, button = 0;
-	WINDOW *dialog;
-
-do_resize:
-	if (getmaxy(stdscr) < (height + YESNO_HEIGTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-	if (getmaxx(stdscr) < (width + YESNO_WIDTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	print_buttons(dialog, height, width, 0);
-
-	while (key != KEY_ESC) {
-		key = wgetch(dialog);
-		switch (key) {
-		case 'Y':
-		case 'y':
-			delwin(dialog);
-			return 0;
-		case 'N':
-		case 'n':
-			delwin(dialog);
-			return 1;
-
-		case TAB:
-		case KEY_LEFT:
-		case KEY_RIGHT:
-			button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button);
-
-			print_buttons(dialog, height, width, button);
-			wrefresh(dialog);
-			break;
-		case ' ':
-		case '\n':
-			delwin(dialog);
-			return button;
-		case KEY_ESC:
-			key = on_key_esc(dialog);
-			break;
-		case KEY_RESIZE:
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		}
-	}
-
-	delwin(dialog);
-	return key;		/* ESC pressed */
-}
diff --git a/support/kconfig/mconf.c b/support/kconfig/mconf.c
deleted file mode 100644
index 12f8c6c4..00000000
--- a/support/kconfig/mconf.c
+++ /dev/null
@@ -1,1037 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- *
- * Introduced single menu mode (show all sub-menus in one large tree).
- * 2002-11-06 Petr Baudis <pasky@ucw.cz>
- *
- * i18n, 2005, Arnaldo Carvalho de Melo <acme@conectiva.com.br>
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <locale.h>
-
-#include "lkc.h"
-#include "lxdialog/dialog.h"
-
-static const char mconf_readme[] = N_(
-"Overview\n"
-"--------\n"
-"This interface lets you select features and parameters for the build.\n"
-"Features can either be built-in, modularized, or ignored. Parameters\n"
-"must be entered in as decimal or hexadecimal numbers or text.\n"
-"\n"
-"Menu items beginning with following braces represent features that\n"
-"  [ ] can be built in or removed\n"
-"  < > can be built in, modularized or removed\n"
-"  { } can be built in or modularized (selected by other feature)\n"
-"  - - are selected by other feature,\n"
-"while *, M or whitespace inside braces means to build in, build as\n"
-"a module or to exclude the feature respectively.\n"
-"\n"
-"To change any of these features, highlight it with the cursor\n"
-"keys and press <Y> to build it in, <M> to make it a module or\n"
-"<N> to remove it.  You may also press the <Space Bar> to cycle\n"
-"through the available options (i.e. Y->N->M->Y).\n"
-"\n"
-"Some additional keyboard hints:\n"
-"\n"
-"Menus\n"
-"----------\n"
-"o  Use the Up/Down arrow keys (cursor keys) to highlight the item you\n"
-"   wish to change or the submenu you wish to select and press <Enter>.\n"
-"   Submenus are designated by \"--->\", empty ones by \"----\".\n"
-"\n"
-"   Shortcut: Press the option's highlighted letter (hotkey).\n"
-"             Pressing a hotkey more than once will sequence\n"
-"             through all visible items which use that hotkey.\n"
-"\n"
-"   You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
-"   unseen options into view.\n"
-"\n"
-"o  To exit a menu use the cursor keys to highlight the <Exit> button\n"
-"   and press <ENTER>.\n"
-"\n"
-"   Shortcut: Press <ESC><ESC> or <E> or <X> if there is no hotkey\n"
-"             using those letters.  You may press a single <ESC>, but\n"
-"             there is a delayed response which you may find annoying.\n"
-"\n"
-"   Also, the <TAB> and cursor keys will cycle between <Select>,\n"
-"   <Exit>, <Help>, <Save>, and <Load>.\n"
-"\n"
-"o  To get help with an item, use the cursor keys to highlight <Help>\n"
-"   and press <ENTER>.\n"
-"\n"
-"   Shortcut: Press <H> or <?>.\n"
-"\n"
-"o  To toggle the display of hidden options, press <Z>.\n"
-"\n"
-"\n"
-"Radiolists  (Choice lists)\n"
-"-----------\n"
-"o  Use the cursor keys to select the option you wish to set and press\n"
-"   <S> or the <SPACE BAR>.\n"
-"\n"
-"   Shortcut: Press the first letter of the option you wish to set then\n"
-"             press <S> or <SPACE BAR>.\n"
-"\n"
-"o  To see available help for the item, use the cursor keys to highlight\n"
-"   <Help> and Press <ENTER>.\n"
-"\n"
-"   Shortcut: Press <H> or <?>.\n"
-"\n"
-"   Also, the <TAB> and cursor keys will cycle between <Select> and\n"
-"   <Help>\n"
-"\n"
-"\n"
-"Data Entry\n"
-"-----------\n"
-"o  Enter the requested information and press <ENTER>\n"
-"   If you are entering hexadecimal values, it is not necessary to\n"
-"   add the '0x' prefix to the entry.\n"
-"\n"
-"o  For help, use the <TAB> or cursor keys to highlight the help option\n"
-"   and press <ENTER>.  You can try <TAB><H> as well.\n"
-"\n"
-"\n"
-"Text Box    (Help Window)\n"
-"--------\n"
-"o  Use the cursor keys to scroll up/down/left/right.  The VI editor\n"
-"   keys h,j,k,l function here as do <u>, <d>, <SPACE BAR> and <B> for\n"
-"   those who are familiar with less and lynx.\n"
-"\n"
-"o  Press <E>, <X>, <q>, <Enter> or <Esc><Esc> to exit.\n"
-"\n"
-"\n"
-"Alternate Configuration Files\n"
-"-----------------------------\n"
-"Menuconfig supports the use of alternate configuration files for\n"
-"those who, for various reasons, find it necessary to switch\n"
-"between different configurations.\n"
-"\n"
-"The <Save> button will let you save the current configuration to\n"
-"a file of your choosing.  Use the <Load> button to load a previously\n"
-"saved alternate configuration.\n"
-"\n"
-"Even if you don't use alternate configuration files, but you find\n"
-"during a Menuconfig session that you have completely messed up your\n"
-"settings, you may use the <Load> button to restore your previously\n"
-"saved settings from \".config\" without restarting Menuconfig.\n"
-"\n"
-"Other information\n"
-"-----------------\n"
-"If you use Menuconfig in an XTERM window, make sure you have your\n"
-"$TERM variable set to point to an xterm definition which supports\n"
-"color.  Otherwise, Menuconfig will look rather bad.  Menuconfig will\n"
-"not display correctly in an RXVT window because rxvt displays only one\n"
-"intensity of color, bright.\n"
-"\n"
-"Menuconfig will display larger menus on screens or xterms which are\n"
-"set to display more than the standard 25 row by 80 column geometry.\n"
-"In order for this to work, the \"stty size\" command must be able to\n"
-"display the screen's current row and column geometry.  I STRONGLY\n"
-"RECOMMEND that you make sure you do NOT have the shell variables\n"
-"LINES and COLUMNS exported into your environment.  Some distributions\n"
-"export those variables via /etc/profile.  Some ncurses programs can\n"
-"become confused when those variables (LINES & COLUMNS) don't reflect\n"
-"the true screen size.\n"
-"\n"
-"Optional personality available\n"
-"------------------------------\n"
-"If you prefer to have all of the options listed in a single menu,\n"
-"rather than the default multimenu hierarchy, run the menuconfig with\n"
-"MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
-"\n"
-"make MENUCONFIG_MODE=single_menu menuconfig\n"
-"\n"
-"<Enter> will then unroll the appropriate category, or enfold it if it\n"
-"is already unrolled.\n"
-"\n"
-"Note that this mode can eventually be a little more CPU expensive\n"
-"(especially with a larger number of unrolled categories) than the\n"
-"default mode.\n"
-"\n"
-"Different color themes available\n"
-"--------------------------------\n"
-"It is possible to select different color themes using the variable\n"
-"MENUCONFIG_COLOR. To select a theme use:\n"
-"\n"
-"make MENUCONFIG_COLOR=<theme> menuconfig\n"
-"\n"
-"Available themes are\n"
-" mono       => selects colors suitable for monochrome displays\n"
-" blackbg    => selects a color scheme with black background\n"
-" classic    => theme with blue background. The classic look\n"
-" bluetitle  => an LCD friendly version of classic. (default)\n"
-"\n"),
-menu_instructions[] = N_(
-	"Arrow keys navigate the menu.  "
-	"<Enter> selects submenus ---> (or empty submenus ----).  "
-	"Highlighted letters are hotkeys.  "
-	"Pressing <Y> selectes a feature, while <N> will exclude a feature.  "
-	"Press <Esc><Esc> to exit, <?> for Help, </> for Search.  "
-	"Legend: [*] feature is selected  [ ] feature is excluded"),
-radiolist_instructions[] = N_(
-	"Use the arrow keys to navigate this window or "
-	"press the hotkey of the item you wish to select "
-	"followed by the <SPACE BAR>. "
-	"Press <?> for additional information about this option."),
-inputbox_instructions_int[] = N_(
-	"Please enter a decimal value. "
-	"Fractions will not be accepted.  "
-	"Use the <TAB> key to move from the input field to the buttons below it."),
-inputbox_instructions_hex[] = N_(
-	"Please enter a hexadecimal value. "
-	"Use the <TAB> key to move from the input field to the buttons below it."),
-inputbox_instructions_string[] = N_(
-	"Please enter a string value. "
-	"Use the <TAB> key to move from the input field to the buttons below it."),
-setmod_text[] = N_(
-	"This feature depends on another which has been configured as a module.\n"
-	"As a result, this feature will be built as a module."),
-load_config_text[] = N_(
-	"Enter the name of the configuration file you wish to load.  "
-	"Accept the name shown to restore the configuration you "
-	"last retrieved.  Leave blank to abort."),
-load_config_help[] = N_(
-	"\n"
-	"For various reasons, one may wish to keep several different\n"
-	"configurations available on a single machine.\n"
-	"\n"
-	"If you have saved a previous configuration in a file other than the\n"
-	"default one, entering its name here will allow you to modify that\n"
-	"configuration.\n"
-	"\n"
-	"If you are uncertain, then you have probably never used alternate\n"
-	"configuration files. You should therefore leave this blank to abort.\n"),
-save_config_text[] = N_(
-	"Enter a filename to which this configuration should be saved "
-	"as an alternate.  Leave blank to abort."),
-save_config_help[] = N_(
-	"\n"
-	"For various reasons, one may wish to keep different configurations\n"
-	"available on a single machine.\n"
-	"\n"
-	"Entering a file name here will allow you to later retrieve, modify\n"
-	"and use the current configuration as an alternate to whatever\n"
-	"configuration options you have selected at that time.\n"
-	"\n"
-	"If you are uncertain what all this means then you should probably\n"
-	"leave this blank.\n"),
-search_help[] = N_(
-	"\n"
-	"Search for symbols and display their relations.\n"
-	"Regular expressions are allowed.\n"
-	"Example: search for \"^FOO\"\n"
-	"Result:\n"
-	"-----------------------------------------------------------------\n"
-	"Symbol: FOO [=m]\n"
-	"Type  : tristate\n"
-	"Prompt: Foo bus is used to drive the bar HW\n"
-	"  Location:\n"
-	"    -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
-	"      -> PCI support (PCI [=y])\n"
-	"(1)     -> PCI access mode (<choice> [=y])\n"
-	"  Defined at drivers/pci/Kconfig:47\n"
-	"  Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
-	"  Selects: LIBCRC32\n"
-	"  Selected by: BAR [=n]\n"
-	"-----------------------------------------------------------------\n"
-	"o The line 'Type:' shows the type of the configuration option for\n"
-	"  this symbol (boolean, tristate, string, ...)\n"
-	"o The line 'Prompt:' shows the text used in the menu structure for\n"
-	"  this symbol\n"
-	"o The 'Defined at' line tells at what file / line number the symbol\n"
-	"  is defined\n"
-	"o The 'Depends on:' line tells what symbols need to be defined for\n"
-	"  this symbol to be visible in the menu (selectable)\n"
-	"o The 'Location:' lines tells where in the menu structure this symbol\n"
-	"  is located\n"
-	"    A location followed by a [=y] indicates that this is a\n"
-	"    selectable menu item - and the current value is displayed inside\n"
-	"    brackets.\n"
-	"    Press the key in the (#) prefix to jump directly to that\n"
-	"    location. You will be returned to the current search results\n"
-	"    after exiting this new menu.\n"
-	"o The 'Selects:' line tells what symbols will be automatically\n"
-	"  selected if this symbol is selected (y or m)\n"
-	"o The 'Selected by' line tells what symbol has selected this symbol\n"
-	"\n"
-	"Only relevant lines are shown.\n"
-	"\n\n"
-	"Search examples:\n"
-	"Examples: USB	=> find all symbols containing USB\n"
-	"          ^USB => find all symbols starting with USB\n"
-	"          USB$ => find all symbols ending with USB\n"
-	"\n");
-
-static int indent;
-static struct menu *current_menu;
-static int child_count;
-static int single_menu_mode;
-static int show_all_options;
-static int save_and_exit;
-
-static void conf(struct menu *menu, struct menu *active_menu);
-static void conf_choice(struct menu *menu);
-static void conf_string(struct menu *menu);
-static void conf_load(void);
-static void conf_save(void);
-static int show_textbox_ext(const char *title, char *text, int r, int c,
-			    int *keys, int *vscroll, int *hscroll,
-			    update_text_fn update_text, void *data);
-static void show_textbox(const char *title, const char *text, int r, int c);
-static void show_helptext(const char *title, const char *text);
-static void show_help(struct menu *menu);
-
-static char filename[PATH_MAX+1];
-static void set_config_filename(const char *config_filename)
-{
-	static char menu_backtitle[PATH_MAX+128];
-	int size;
-
-	size = snprintf(menu_backtitle, sizeof(menu_backtitle),
-	                "%s - %s", config_filename, rootmenu.prompt->text);
-	if (size >= sizeof(menu_backtitle))
-		menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
-	set_dialog_backtitle(menu_backtitle);
-
-	size = snprintf(filename, sizeof(filename), "%s", config_filename);
-	if (size >= sizeof(filename))
-		filename[sizeof(filename)-1] = '\0';
-}
-
-struct subtitle_part {
-	struct list_head entries;
-	const char *text;
-};
-static LIST_HEAD(trail);
-
-static struct subtitle_list *subtitles;
-static void set_subtitle(void)
-{
-	struct subtitle_part *sp;
-	struct subtitle_list *pos, *tmp;
-
-	for (pos = subtitles; pos != NULL; pos = tmp) {
-		tmp = pos->next;
-		free(pos);
-	}
-
-	subtitles = NULL;
-	list_for_each_entry(sp, &trail, entries) {
-		if (sp->text) {
-			if (pos) {
-				pos->next = xcalloc(sizeof(*pos), 1);
-				pos = pos->next;
-			} else {
-				subtitles = pos = xcalloc(sizeof(*pos), 1);
-			}
-			pos->text = sp->text;
-		}
-	}
-
-	set_dialog_subtitles(subtitles);
-}
-
-static void reset_subtitle(void)
-{
-	struct subtitle_list *pos, *tmp;
-
-	for (pos = subtitles; pos != NULL; pos = tmp) {
-		tmp = pos->next;
-		free(pos);
-	}
-	subtitles = NULL;
-	set_dialog_subtitles(subtitles);
-}
-
-struct search_data {
-	struct list_head *head;
-	struct menu **targets;
-	int *keys;
-};
-
-static void update_text(char *buf, size_t start, size_t end, void *_data)
-{
-	struct search_data *data = _data;
-	struct jump_key *pos;
-	int k = 0;
-
-	list_for_each_entry(pos, data->head, entries) {
-		if (pos->offset >= start && pos->offset < end) {
-			char header[4];
-
-			if (k < JUMP_NB) {
-				int key = '0' + (pos->index % JUMP_NB) + 1;
-
-				sprintf(header, "(%c)", key);
-				data->keys[k] = key;
-				data->targets[k] = pos->target;
-				k++;
-			} else {
-				sprintf(header, "   ");
-			}
-
-			memcpy(buf + pos->offset, header, sizeof(header) - 1);
-		}
-	}
-	data->keys[k] = 0;
-}
-
-static void search_conf(void)
-{
-	struct symbol **sym_arr;
-	struct gstr res;
-	struct gstr title;
-	char *dialog_input;
-	int dres, vscroll = 0, hscroll = 0;
-	bool again;
-	struct gstr sttext;
-	struct subtitle_part stpart;
-
-	title = str_new();
-	str_printf( &title, _("Enter (sub)string or regexp to search for "
-			      "(with or without \"%s\")"), CONFIG_);
-
-again:
-	dialog_clear();
-	dres = dialog_inputbox(_("Search Configuration Parameter"),
-			      str_get(&title),
-			      10, 75, "");
-	switch (dres) {
-	case 0:
-		break;
-	case 1:
-		show_helptext(_("Search Configuration"), search_help);
-		goto again;
-	default:
-		str_free(&title);
-		return;
-	}
-
-	/* strip the prefix if necessary */
-	dialog_input = dialog_input_result;
-	if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
-		dialog_input += strlen(CONFIG_);
-
-	sttext = str_new();
-	str_printf(&sttext, "Search (%s)", dialog_input_result);
-	stpart.text = str_get(&sttext);
-	list_add_tail(&stpart.entries, &trail);
-
-	sym_arr = sym_re_search(dialog_input);
-	do {
-		LIST_HEAD(head);
-		struct menu *targets[JUMP_NB];
-		int keys[JUMP_NB + 1], i;
-		struct search_data data = {
-			.head = &head,
-			.targets = targets,
-			.keys = keys,
-		};
-		struct jump_key *pos, *tmp;
-
-		res = get_relations_str(sym_arr, &head);
-		set_subtitle();
-		dres = show_textbox_ext(_("Search Results"), (char *)
-					str_get(&res), 0, 0, keys, &vscroll,
-					&hscroll, &update_text, (void *)
-					&data);
-		again = false;
-		for (i = 0; i < JUMP_NB && keys[i]; i++)
-			if (dres == keys[i]) {
-				conf(targets[i]->parent, targets[i]);
-				again = true;
-			}
-		str_free(&res);
-		list_for_each_entry_safe(pos, tmp, &head, entries)
-			free(pos);
-	} while (again);
-	free(sym_arr);
-	str_free(&title);
-	list_del(trail.prev);
-	str_free(&sttext);
-}
-
-static void build_conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-	int type, tmp, doint = 2;
-	tristate val;
-	char ch;
-	bool visible;
-
-	/*
-	 * note: menu_is_visible() has side effect that it will
-	 * recalc the value of the symbol.
-	 */
-	visible = menu_is_visible(menu);
-	if (show_all_options && !menu_has_prompt(menu))
-		return;
-	else if (!show_all_options && !visible)
-		return;
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	if (!sym) {
-		if (prop && menu != current_menu) {
-			const char *prompt = menu_get_prompt(menu);
-			switch (prop->type) {
-			case P_MENU:
-				child_count++;
-				prompt = _(prompt);
-				if (single_menu_mode) {
-					item_make("%s%*c%s",
-						  menu->data ? "-->" : "++>",
-						  indent + 1, ' ', prompt);
-				} else
-					item_make("   %*c%s  %s",
-						  indent + 1, ' ', prompt,
-						  menu_is_empty(menu) ? "----" : "--->");
-				item_set_tag('m');
-				item_set_data(menu);
-				if (single_menu_mode && menu->data)
-					goto conf_childs;
-				return;
-			case P_COMMENT:
-				if (prompt) {
-					child_count++;
-					item_make("   %*c*** %s ***", indent + 1, ' ', _(prompt));
-					item_set_tag(':');
-					item_set_data(menu);
-				}
-				break;
-			default:
-				if (prompt) {
-					child_count++;
-					item_make("---%*c%s", indent + 1, ' ', _(prompt));
-					item_set_tag(':');
-					item_set_data(menu);
-				}
-			}
-		} else
-			doint = 0;
-		goto conf_childs;
-	}
-
-	type = sym_get_type(sym);
-	if (sym_is_choice(sym)) {
-		struct symbol *def_sym = sym_get_choice_value(sym);
-		struct menu *def_menu = NULL;
-
-		child_count++;
-		for (child = menu->list; child; child = child->next) {
-			if (menu_is_visible(child) && child->sym == def_sym)
-				def_menu = child;
-		}
-
-		val = sym_get_tristate_value(sym);
-		if (sym_is_changable(sym)) {
-			switch (type) {
-			case S_BOOLEAN:
-				item_make("[%c]", val == no ? ' ' : '*');
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes: ch = '*'; break;
-				case mod: ch = 'M'; break;
-				default:  ch = ' '; break;
-				}
-				item_make("<%c>", ch);
-				break;
-			}
-			item_set_tag('t');
-			item_set_data(menu);
-		} else {
-			item_make("   ");
-			item_set_tag(def_menu ? 't' : ':');
-			item_set_data(menu);
-		}
-
-		item_add_str("%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
-		if (val == yes) {
-			if (def_menu) {
-				item_add_str(" (%s)", _(menu_get_prompt(def_menu)));
-				item_add_str("  --->");
-				if (def_menu->list) {
-					indent += 2;
-					build_conf(def_menu);
-					indent -= 2;
-				}
-			}
-			return;
-		}
-	} else {
-		if (menu == current_menu) {
-			item_make("---%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
-			item_set_tag(':');
-			item_set_data(menu);
-			goto conf_childs;
-		}
-		child_count++;
-		val = sym_get_tristate_value(sym);
-		if (sym_is_choice_value(sym) && val == yes) {
-			item_make("   ");
-			item_set_tag(':');
-			item_set_data(menu);
-		} else {
-			switch (type) {
-			case S_BOOLEAN:
-				if (sym_is_changable(sym))
-					item_make("[%c]", val == no ? ' ' : '*');
-				else
-					item_make("-%c-", val == no ? ' ' : '*');
-				item_set_tag('t');
-				item_set_data(menu);
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes: ch = '*'; break;
-				case mod: ch = 'M'; break;
-				default:  ch = ' '; break;
-				}
-				if (sym_is_changable(sym)) {
-					if (sym->rev_dep.tri == mod)
-						item_make("{%c}", ch);
-					else
-						item_make("<%c>", ch);
-				} else
-					item_make("-%c-", ch);
-				item_set_tag('t');
-				item_set_data(menu);
-				break;
-			default:
-				tmp = 2 + strlen(sym_get_string_value(sym)); /* () = 2 */
-				item_make("(%s)", sym_get_string_value(sym));
-				tmp = indent - tmp + 4;
-				if (tmp < 0)
-					tmp = 0;
-				item_add_str("%*c%s%s", tmp, ' ', _(menu_get_prompt(menu)),
-					     (sym_has_value(sym) || !sym_is_changable(sym)) ?
-					     "" : _(" (NEW)"));
-				item_set_tag('s');
-				item_set_data(menu);
-				goto conf_childs;
-			}
-		}
-		item_add_str("%*c%s%s", indent + 1, ' ', _(menu_get_prompt(menu)),
-			  (sym_has_value(sym) || !sym_is_changable(sym)) ?
-			  "" : _(" (NEW)"));
-		if (menu->prompt->type == P_MENU) {
-			item_add_str("  %s", menu_is_empty(menu) ? "----" : "--->");
-			return;
-		}
-	}
-
-conf_childs:
-	indent += doint;
-	for (child = menu->list; child; child = child->next)
-		build_conf(child);
-	indent -= doint;
-}
-
-static void conf(struct menu *menu, struct menu *active_menu)
-{
-	struct menu *submenu;
-	const char *prompt = menu_get_prompt(menu);
-	struct subtitle_part stpart;
-	struct symbol *sym;
-	int res;
-	int s_scroll = 0;
-
-	if (menu != &rootmenu)
-		stpart.text = menu_get_prompt(menu);
-	else
-		stpart.text = NULL;
-	list_add_tail(&stpart.entries, &trail);
-
-	while (1) {
-		item_reset();
-		current_menu = menu;
-		build_conf(menu);
-		if (!child_count)
-			break;
-		set_subtitle();
-		dialog_clear();
-		res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
-				  _(menu_instructions),
-				  active_menu, &s_scroll);
-		if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL)
-			break;
-		if (item_count() != 0) {
-			if (!item_activate_selected())
-				continue;
-			if (!item_tag())
-				continue;
-		}
-		submenu = item_data();
-		active_menu = item_data();
-		if (submenu)
-			sym = submenu->sym;
-		else
-			sym = NULL;
-
-		switch (res) {
-		case 0:
-			switch (item_tag()) {
-			case 'm':
-				if (single_menu_mode)
-					submenu->data = (void *) (long) !submenu->data;
-				else
-					conf(submenu, NULL);
-				break;
-			case 't':
-				if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
-					conf_choice(submenu);
-				else if (submenu->prompt->type == P_MENU)
-					conf(submenu, NULL);
-				break;
-			case 's':
-				conf_string(submenu);
-				break;
-			}
-			break;
-		case 2:
-			if (sym)
-				show_help(submenu);
-			else {
-				reset_subtitle();
-				show_helptext(_("README"), _(mconf_readme));
-			}
-			break;
-		case 3:
-			reset_subtitle();
-			conf_save();
-			break;
-		case 4:
-			reset_subtitle();
-			conf_load();
-			break;
-		case 5:
-			if (item_is_tag('t')) {
-				if (sym_set_tristate_value(sym, yes))
-					break;
-				if (sym_set_tristate_value(sym, mod))
-					show_textbox(NULL, setmod_text, 6, 74);
-			}
-			break;
-		case 6:
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, no);
-			break;
-		case 7:
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, mod);
-			break;
-		case 8:
-			if (item_is_tag('t'))
-				sym_toggle_tristate_value(sym);
-			else if (item_is_tag('m'))
-				conf(submenu, NULL);
-			break;
-		case 9:
-			search_conf();
-			break;
-		case 10:
-			show_all_options = !show_all_options;
-			break;
-		}
-	}
-
-	list_del(trail.prev);
-}
-
-static int show_textbox_ext(const char *title, char *text, int r, int c, int
-			    *keys, int *vscroll, int *hscroll, update_text_fn
-			    update_text, void *data)
-{
-	dialog_clear();
-	return dialog_textbox(title, text, r, c, keys, vscroll, hscroll,
-			      update_text, data);
-}
-
-static void show_textbox(const char *title, const char *text, int r, int c)
-{
-	show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL,
-			 NULL, NULL);
-}
-
-static void show_helptext(const char *title, const char *text)
-{
-	show_textbox(title, text, 0, 0);
-}
-
-static void conf_message_callback(const char *fmt, va_list ap)
-{
-	char buf[PATH_MAX+1];
-
-	vsnprintf(buf, sizeof(buf), fmt, ap);
-	if (save_and_exit)
-		printf("%s", buf);
-	else
-		show_textbox(NULL, buf, 6, 60);
-}
-
-static void show_help(struct menu *menu)
-{
-	struct gstr help = str_new();
-
-	help.max_width = getmaxx(stdscr) - 10;
-	menu_get_ext_help(menu, &help);
-
-	show_helptext(_(menu_get_prompt(menu)), str_get(&help));
-	str_free(&help);
-}
-
-static void conf_choice(struct menu *menu)
-{
-	const char *prompt = _(menu_get_prompt(menu));
-	struct menu *child;
-	struct symbol *active;
-
-	active = sym_get_choice_value(menu->sym);
-	while (1) {
-		int res;
-		int selected;
-		item_reset();
-
-		current_menu = menu;
-		for (child = menu->list; child; child = child->next) {
-			if (!menu_is_visible(child))
-				continue;
-			if (child->sym)
-				item_make("%s", _(menu_get_prompt(child)));
-			else {
-				item_make("*** %s ***", _(menu_get_prompt(child)));
-				item_set_tag(':');
-			}
-			item_set_data(child);
-			if (child->sym == active)
-				item_set_selected(1);
-			if (child->sym == sym_get_choice_value(menu->sym))
-				item_set_tag('X');
-		}
-		dialog_clear();
-		res = dialog_checklist(prompt ? _(prompt) : _("Main Menu"),
-					_(radiolist_instructions),
-					MENUBOX_HEIGTH_MIN,
-					MENUBOX_WIDTH_MIN,
-					CHECKLIST_HEIGTH_MIN);
-		selected = item_activate_selected();
-		switch (res) {
-		case 0:
-			if (selected) {
-				child = item_data();
-				if (!child->sym)
-					break;
-
-				sym_set_tristate_value(child->sym, yes);
-			}
-			return;
-		case 1:
-			if (selected) {
-				child = item_data();
-				show_help(child);
-				active = child->sym;
-			} else
-				show_help(menu);
-			break;
-		case KEY_ESC:
-			return;
-		case -ERRDISPLAYTOOSMALL:
-			return;
-		}
-	}
-}
-
-static void conf_string(struct menu *menu)
-{
-	const char *prompt = menu_get_prompt(menu);
-
-	while (1) {
-		int res;
-		const char *heading;
-
-		switch (sym_get_type(menu->sym)) {
-		case S_INT:
-			heading = _(inputbox_instructions_int);
-			break;
-		case S_HEX:
-			heading = _(inputbox_instructions_hex);
-			break;
-		case S_STRING:
-			heading = _(inputbox_instructions_string);
-			break;
-		default:
-			heading = _("Internal mconf error!");
-		}
-		dialog_clear();
-		res = dialog_inputbox(prompt ? _(prompt) : _("Main Menu"),
-				      heading, 10, 75,
-				      sym_get_string_value(menu->sym));
-		switch (res) {
-		case 0:
-			if (sym_set_string_value(menu->sym, dialog_input_result))
-				return;
-			show_textbox(NULL, _("You have made an invalid entry."), 5, 43);
-			break;
-		case 1:
-			show_help(menu);
-			break;
-		case KEY_ESC:
-			return;
-		}
-	}
-}
-
-static void conf_load(void)
-{
-
-	while (1) {
-		int res;
-		dialog_clear();
-		res = dialog_inputbox(NULL, load_config_text,
-				      11, 55, filename);
-		switch(res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			if (!conf_read(dialog_input_result)) {
-				set_config_filename(dialog_input_result);
-				sym_set_change_count(1);
-				return;
-			}
-			show_textbox(NULL, _("File does not exist!"), 5, 38);
-			break;
-		case 1:
-			show_helptext(_("Load Alternate Configuration"), load_config_help);
-			break;
-		case KEY_ESC:
-			return;
-		}
-	}
-}
-
-static void conf_save(void)
-{
-	while (1) {
-		int res;
-		dialog_clear();
-		res = dialog_inputbox(NULL, save_config_text,
-				      11, 55, filename);
-		switch(res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			if (!conf_write(dialog_input_result)) {
-				set_config_filename(dialog_input_result);
-				return;
-			}
-			show_textbox(NULL, _("Can't create file!  Probably a nonexistent directory."), 5, 60);
-			break;
-		case 1:
-			show_helptext(_("Save Alternate Configuration"), save_config_help);
-			break;
-		case KEY_ESC:
-			return;
-		}
-	}
-}
-
-static int handle_exit(void)
-{
-	int res;
-
-	save_and_exit = 1;
-	reset_subtitle();
-	dialog_clear();
-	if (conf_get_changed())
-		res = dialog_yesno(NULL,
-				   _("Do you wish to save your new configuration?\n"
-				     "(Press <ESC><ESC> to continue Unikraft configuration.)"),
-				   6, 60);
-	else
-		res = -1;
-
-	end_dialog(saved_x, saved_y);
-
-	switch (res) {
-	case 0:
-		if (conf_write(filename)) {
-			fprintf(stderr, _("\n\n"
-					  "Error while writing of the configuration.\n"
-					  "Your configuration changes were NOT saved."
-					  "\n\n"));
-			return 1;
-		}
-		/* fall through */
-	case -1:
-		printf(_("\n\n"
-			 "*** End of the configuration.\n"
-			 "*** Execute 'make' to start the build or try 'make help'."
-			 "\n\n"));
-		res = 0;
-		break;
-	default:
-		fprintf(stderr, _("\n\n"
-				  "Your configuration changes were NOT saved."
-				  "\n\n"));
-		if (res != KEY_ESC)
-			res = 0;
-	}
-
-	return res;
-}
-
-static void sig_handler(int signo)
-{
-	exit(handle_exit());
-}
-
-int main(int ac, char **av)
-{
-	char *mode;
-	int res;
-
-	setlocale(LC_ALL, "");
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	signal(SIGINT, sig_handler);
-
-	conf_parse(av[1]);
-	conf_read(NULL);
-
-	mode = getenv("MENUCONFIG_MODE");
-	if (mode) {
-		if (!strcasecmp(mode, "single_menu"))
-			single_menu_mode = 1;
-	}
-
-	if (init_dialog(NULL)) {
-		fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
-		fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
-		return 1;
-	}
-
-	set_config_filename(conf_get_configname());
-	conf_set_message_callback(conf_message_callback);
-	do {
-		conf(&rootmenu, NULL);
-		res = handle_exit();
-	} while (res == KEY_ESC);
-
-	return res;
-}
-
diff --git a/support/kconfig/menu.c b/support/kconfig/menu.c
deleted file mode 100644
index db1512ae..00000000
--- a/support/kconfig/menu.c
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "lkc.h"
-
-static const char nohelp_text[] = "There is no help available for this option.";
-
-struct menu rootmenu;
-static struct menu **last_entry_ptr;
-
-struct file *file_list;
-struct file *current_file;
-
-void menu_warn(struct menu *menu, const char *fmt, ...)
-{
-	va_list ap;
-	va_start(ap, fmt);
-	fprintf(stderr, "%s:%d:warning: ", menu->file->name, menu->lineno);
-	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-}
-
-static void prop_warn(struct property *prop, const char *fmt, ...)
-{
-	va_list ap;
-	va_start(ap, fmt);
-	fprintf(stderr, "%s:%d:warning: ", prop->file->name, prop->lineno);
-	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-}
-
-void _menu_init(void)
-{
-	current_entry = current_menu = &rootmenu;
-	last_entry_ptr = &rootmenu.list;
-}
-
-void menu_add_entry(struct symbol *sym)
-{
-	struct menu *menu;
-
-	menu = xmalloc(sizeof(*menu));
-	memset(menu, 0, sizeof(*menu));
-	menu->sym = sym;
-	menu->parent = current_menu;
-	menu->file = current_file;
-	menu->lineno = zconf_lineno();
-
-	*last_entry_ptr = menu;
-	last_entry_ptr = &menu->next;
-	current_entry = menu;
-	if (sym)
-		menu_add_symbol(P_SYMBOL, sym, NULL);
-}
-
-void menu_end_entry(void)
-{
-}
-
-struct menu *menu_add_menu(void)
-{
-	menu_end_entry();
-	last_entry_ptr = &current_entry->list;
-	return current_menu = current_entry;
-}
-
-void menu_end_menu(void)
-{
-	last_entry_ptr = &current_menu->next;
-	current_menu = current_menu->parent;
-}
-
-static struct expr *menu_check_dep(struct expr *e)
-{
-	if (!e)
-		return e;
-
-	switch (e->type) {
-	case E_NOT:
-		e->left.expr = menu_check_dep(e->left.expr);
-		break;
-	case E_OR:
-	case E_AND:
-		e->left.expr = menu_check_dep(e->left.expr);
-		e->right.expr = menu_check_dep(e->right.expr);
-		break;
-	case E_SYMBOL:
-		/* change 'm' into 'm' && MODULES */
-		if (e->left.sym == &symbol_mod)
-			return expr_alloc_and(e, expr_alloc_symbol(modules_sym));
-		break;
-	default:
-		break;
-	}
-	return e;
-}
-
-void menu_add_dep(struct expr *dep)
-{
-	current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
-}
-
-void menu_set_type(int type)
-{
-	struct symbol *sym = current_entry->sym;
-
-	if (sym->type == type)
-		return;
-	if (sym->type == S_UNKNOWN) {
-		sym->type = type;
-		return;
-	}
-	menu_warn(current_entry,
-		"ignoring type redefinition of '%s' from '%s' to '%s'",
-		sym->name ? sym->name : "<choice>",
-		sym_type_name(sym->type), sym_type_name(type));
-}
-
-struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep)
-{
-	struct property *prop = prop_alloc(type, current_entry->sym);
-
-	prop->menu = current_entry;
-	prop->expr = expr;
-	prop->visible.expr = menu_check_dep(dep);
-
-	if (prompt) {
-		if (isspace(*prompt)) {
-			prop_warn(prop, "leading whitespace ignored");
-			while (isspace(*prompt))
-				prompt++;
-		}
-		if (current_entry->prompt && current_entry != &rootmenu)
-			prop_warn(prop, "prompt redefined");
-
-		/* Apply all upper menus' visibilities to actual prompts. */
-		if(type == P_PROMPT) {
-			struct menu *menu = current_entry;
-
-			while ((menu = menu->parent) != NULL) {
-				struct expr *dup_expr;
-
-				if (!menu->visibility)
-					continue;
-				/*
-				 * Do not add a reference to the
-				 * menu's visibility expression but
-				 * use a copy of it.  Otherwise the
-				 * expression reduction functions
-				 * will modify expressions that have
-				 * multiple references which can
-				 * cause unwanted side effects.
-				 */
-				dup_expr = expr_copy(menu->visibility);
-
-				prop->visible.expr
-					= expr_alloc_and(prop->visible.expr,
-							 dup_expr);
-			}
-		}
-
-		current_entry->prompt = prop;
-	}
-	prop->text = prompt;
-
-	return prop;
-}
-
-struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep)
-{
-	return menu_add_prop(type, prompt, NULL, dep);
-}
-
-void menu_add_visibility(struct expr *expr)
-{
-	current_entry->visibility = expr_alloc_and(current_entry->visibility,
-	    expr);
-}
-
-void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep)
-{
-	menu_add_prop(type, NULL, expr, dep);
-}
-
-void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
-{
-	menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
-}
-
-void menu_add_option(int token, char *arg)
-{
-	switch (token) {
-	case T_OPT_MODULES:
-		if (modules_sym)
-			zconf_error("symbol '%s' redefines option 'modules'"
-				    " already defined by symbol '%s'",
-				    current_entry->sym->name,
-				    modules_sym->name
-				    );
-		modules_sym = current_entry->sym;
-		break;
-	case T_OPT_DEFCONFIG_LIST:
-		if (!sym_defconfig_list)
-			sym_defconfig_list = current_entry->sym;
-		else if (sym_defconfig_list != current_entry->sym)
-			zconf_error("trying to redefine defconfig symbol");
-		break;
-	case T_OPT_ENV:
-		prop_add_env(arg);
-		break;
-	}
-}
-
-static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
-{
-	return sym2->type == S_INT || sym2->type == S_HEX ||
-	       (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name));
-}
-
-static void sym_check_prop(struct symbol *sym)
-{
-	struct property *prop;
-	struct symbol *sym2;
-	for (prop = sym->prop; prop; prop = prop->next) {
-		switch (prop->type) {
-		case P_DEFAULT:
-			if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) &&
-			    prop->expr->type != E_SYMBOL)
-				prop_warn(prop,
-				    "default for config symbol '%s'"
-				    " must be a single symbol", sym->name);
-			if (prop->expr->type != E_SYMBOL)
-				break;
-			sym2 = prop_get_symbol(prop);
-			if (sym->type == S_HEX || sym->type == S_INT) {
-				if (!menu_validate_number(sym, sym2))
-					prop_warn(prop,
-					    "'%s': number is invalid",
-					    sym->name);
-			}
-			break;
-		case P_SELECT:
-			sym2 = prop_get_symbol(prop);
-			if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE)
-				prop_warn(prop,
-				    "config symbol '%s' uses select, but is "
-				    "not boolean or tristate", sym->name);
-			else if (sym2->type != S_UNKNOWN &&
-			         sym2->type != S_BOOLEAN &&
-			         sym2->type != S_TRISTATE)
-				prop_warn(prop,
-				    "'%s' has wrong type. 'select' only "
-				    "accept arguments of boolean and "
-				    "tristate type", sym2->name);
-			break;
-		case P_RANGE:
-			if (sym->type != S_INT && sym->type != S_HEX)
-				prop_warn(prop, "range is only allowed "
-				                "for int or hex symbols");
-			if (!menu_validate_number(sym, prop->expr->left.sym) ||
-			    !menu_validate_number(sym, prop->expr->right.sym))
-				prop_warn(prop, "range is invalid");
-			break;
-		default:
-			;
-		}
-	}
-}
-
-void menu_finalize(struct menu *parent)
-{
-	struct menu *menu, *last_menu;
-	struct symbol *sym;
-	struct property *prop;
-	struct expr *parentdep, *basedep, *dep, *dep2, **ep;
-
-	sym = parent->sym;
-	if (parent->list) {
-		if (sym && sym_is_choice(sym)) {
-			if (sym->type == S_UNKNOWN) {
-				/* find the first choice value to find out choice type */
-				current_entry = parent;
-				for (menu = parent->list; menu; menu = menu->next) {
-					if (menu->sym && menu->sym->type != S_UNKNOWN) {
-						menu_set_type(menu->sym->type);
-						break;
-					}
-				}
-			}
-			/* set the type of the remaining choice values */
-			for (menu = parent->list; menu; menu = menu->next) {
-				current_entry = menu;
-				if (menu->sym && menu->sym->type == S_UNKNOWN)
-					menu_set_type(sym->type);
-			}
-			parentdep = expr_alloc_symbol(sym);
-		} else if (parent->prompt)
-			parentdep = parent->prompt->visible.expr;
-		else
-			parentdep = parent->dep;
-
-		for (menu = parent->list; menu; menu = menu->next) {
-			basedep = expr_transform(menu->dep);
-			basedep = expr_alloc_and(expr_copy(parentdep), basedep);
-			basedep = expr_eliminate_dups(basedep);
-			menu->dep = basedep;
-			if (menu->sym)
-				prop = menu->sym->prop;
-			else
-				prop = menu->prompt;
-			for (; prop; prop = prop->next) {
-				if (prop->menu != menu)
-					continue;
-				dep = expr_transform(prop->visible.expr);
-				dep = expr_alloc_and(expr_copy(basedep), dep);
-				dep = expr_eliminate_dups(dep);
-				if (menu->sym && menu->sym->type != S_TRISTATE)
-					dep = expr_trans_bool(dep);
-				prop->visible.expr = dep;
-				if (prop->type == P_SELECT) {
-					struct symbol *es = prop_get_symbol(prop);
-					es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,
-							expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));
-				}
-			}
-		}
-		for (menu = parent->list; menu; menu = menu->next)
-			menu_finalize(menu);
-	} else if (sym) {
-		basedep = parent->prompt ? parent->prompt->visible.expr : NULL;
-		basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
-		basedep = expr_eliminate_dups(expr_transform(basedep));
-		last_menu = NULL;
-		for (menu = parent->next; menu; menu = menu->next) {
-			dep = menu->prompt ? menu->prompt->visible.expr : menu->dep;
-			if (!expr_contains_symbol(dep, sym))
-				break;
-			if (expr_depends_symbol(dep, sym))
-				goto next;
-			dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);
-			dep = expr_eliminate_dups(expr_transform(dep));
-			dep2 = expr_copy(basedep);
-			expr_eliminate_eq(&dep, &dep2);
-			expr_free(dep);
-			if (!expr_is_yes(dep2)) {
-				expr_free(dep2);
-				break;
-			}
-			expr_free(dep2);
-		next:
-			menu_finalize(menu);
-			menu->parent = parent;
-			last_menu = menu;
-		}
-		if (last_menu) {
-			parent->list = parent->next;
-			parent->next = last_menu->next;
-			last_menu->next = NULL;
-		}
-
-		sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep);
-	}
-	for (menu = parent->list; menu; menu = menu->next) {
-		if (sym && sym_is_choice(sym) &&
-		    menu->sym && !sym_is_choice_value(menu->sym)) {
-			current_entry = menu;
-			menu->sym->flags |= SYMBOL_CHOICEVAL;
-			if (!menu->prompt)
-				menu_warn(menu, "choice value must have a prompt");
-			for (prop = menu->sym->prop; prop; prop = prop->next) {
-				if (prop->type == P_DEFAULT)
-					prop_warn(prop, "defaults for choice "
-						  "values not supported");
-				if (prop->menu == menu)
-					continue;
-				if (prop->type == P_PROMPT &&
-				    prop->menu->parent->sym != sym)
-					prop_warn(prop, "choice value used outside its choice group");
-			}
-			/* Non-tristate choice values of tristate choices must
-			 * depend on the choice being set to Y. The choice
-			 * values' dependencies were propagated to their
-			 * properties above, so the change here must be re-
-			 * propagated.
-			 */
-			if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
-				basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
-				menu->dep = expr_alloc_and(basedep, menu->dep);
-				for (prop = menu->sym->prop; prop; prop = prop->next) {
-					if (prop->menu != menu)
-						continue;
-					prop->visible.expr = expr_alloc_and(expr_copy(basedep),
-									    prop->visible.expr);
-				}
-			}
-			menu_add_symbol(P_CHOICE, sym, NULL);
-			prop = sym_get_choice_prop(sym);
-			for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
-				;
-			*ep = expr_alloc_one(E_LIST, NULL);
-			(*ep)->right.sym = menu->sym;
-		}
-		if (menu->list && (!menu->prompt || !menu->prompt->text)) {
-			for (last_menu = menu->list; ; last_menu = last_menu->next) {
-				last_menu->parent = parent;
-				if (!last_menu->next)
-					break;
-			}
-			last_menu->next = menu->next;
-			menu->next = menu->list;
-			menu->list = NULL;
-		}
-	}
-
-	if (sym && !(sym->flags & SYMBOL_WARNED)) {
-		if (sym->type == S_UNKNOWN)
-			menu_warn(parent, "config symbol defined without type");
-
-		if (sym_is_choice(sym) && !parent->prompt)
-			menu_warn(parent, "choice must have a prompt");
-
-		/* Check properties connected to this symbol */
-		sym_check_prop(sym);
-		sym->flags |= SYMBOL_WARNED;
-	}
-
-	if (sym && !sym_is_optional(sym) && parent->prompt) {
-		sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr,
-				expr_alloc_and(parent->prompt->visible.expr,
-					expr_alloc_symbol(&symbol_mod)));
-	}
-}
-
-bool menu_has_prompt(struct menu *menu)
-{
-	if (!menu->prompt)
-		return false;
-	return true;
-}
-
-/*
- * Determine if a menu is empty.
- * A menu is considered empty if it contains no or only
- * invisible entries.
- */
-bool menu_is_empty(struct menu *menu)
-{
-	struct menu *child;
-
-	for (child = menu->list; child; child = child->next) {
-		if (menu_is_visible(child))
-			return(false);
-	}
-	return(true);
-}
-
-bool menu_is_visible(struct menu *menu)
-{
-	struct menu *child;
-	struct symbol *sym;
-	tristate visible;
-
-	if (!menu->prompt)
-		return false;
-
-	if (menu->visibility) {
-		if (expr_calc_value(menu->visibility) == no)
-			return no;
-	}
-
-	sym = menu->sym;
-	if (sym) {
-		sym_calc_value(sym);
-		visible = menu->prompt->visible.tri;
-	} else
-		visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr);
-
-	if (visible != no)
-		return true;
-
-	if (!sym || sym_get_tristate_value(menu->sym) == no)
-		return false;
-
-	for (child = menu->list; child; child = child->next) {
-		if (menu_is_visible(child)) {
-			if (sym)
-				sym->flags |= SYMBOL_DEF_USER;
-			return true;
-		}
-	}
-
-	return false;
-}
-
-const char *menu_get_prompt(struct menu *menu)
-{
-	if (menu->prompt)
-		return menu->prompt->text;
-	else if (menu->sym)
-		return menu->sym->name;
-	return NULL;
-}
-
-struct menu *menu_get_root_menu(struct menu *menu)
-{
-	return &rootmenu;
-}
-
-struct menu *menu_get_parent_menu(struct menu *menu)
-{
-	enum prop_type type;
-
-	for (; menu != &rootmenu; menu = menu->parent) {
-		type = menu->prompt ? menu->prompt->type : 0;
-		if (type == P_MENU)
-			break;
-	}
-	return menu;
-}
-
-bool menu_has_help(struct menu *menu)
-{
-	return menu->help != NULL;
-}
-
-const char *menu_get_help(struct menu *menu)
-{
-	if (menu->help)
-		return menu->help;
-	else
-		return "";
-}
-
-static void get_prompt_str(struct gstr *r, struct property *prop,
-			   struct list_head *head)
-{
-	int i, j;
-	struct menu *submenu[8], *menu, *location = NULL;
-	struct jump_key *jump;
-
-	str_printf(r, _("Prompt: %s\n"), _(prop->text));
-	menu = prop->menu->parent;
-	for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
-		bool accessible = menu_is_visible(menu);
-
-		submenu[i++] = menu;
-		if (location == NULL && accessible)
-			location = menu;
-	}
-	if (head && location) {
-		jump = xmalloc(sizeof(struct jump_key));
-
-		if (menu_is_visible(prop->menu)) {
-			/*
-			 * There is not enough room to put the hint at the
-			 * beginning of the "Prompt" line. Put the hint on the
-			 * last "Location" line even when it would belong on
-			 * the former.
-			 */
-			jump->target = prop->menu;
-		} else
-			jump->target = location;
-
-		if (list_empty(head))
-			jump->index = 0;
-		else
-			jump->index = list_entry(head->prev, struct jump_key,
-						 entries)->index + 1;
-
-		list_add_tail(&jump->entries, head);
-	}
-
-	if (i > 0) {
-		str_printf(r, _("  Location:\n"));
-		for (j = 4; --i >= 0; j += 2) {
-			menu = submenu[i];
-			if (head && location && menu == location)
-				jump->offset = strlen(r->s);
-			str_printf(r, "%*c-> %s", j, ' ',
-				   _(menu_get_prompt(menu)));
-			if (menu->sym) {
-				str_printf(r, " (%s [=%s])", menu->sym->name ?
-					menu->sym->name : _("<choice>"),
-					sym_get_string_value(menu->sym));
-			}
-			str_append(r, "\n");
-		}
-	}
-}
-
-/*
- * get property of type P_SYMBOL
- */
-static struct property *get_symbol_prop(struct symbol *sym)
-{
-	struct property *prop = NULL;
-
-	for_all_properties(sym, prop, P_SYMBOL)
-		break;
-	return prop;
-}
-
-/*
- * head is optional and may be NULL
- */
-void get_symbol_str(struct gstr *r, struct symbol *sym,
-		    struct list_head *head)
-{
-	bool hit;
-	struct property *prop;
-
-	if (sym && sym->name) {
-		str_printf(r, "Symbol: %s [=%s]\n", sym->name,
-			   sym_get_string_value(sym));
-		str_printf(r, "Type  : %s\n", sym_type_name(sym->type));
-		if (sym->type == S_INT || sym->type == S_HEX) {
-			prop = sym_get_range_prop(sym);
-			if (prop) {
-				str_printf(r, "Range : ");
-				expr_gstr_print(prop->expr, r);
-				str_append(r, "\n");
-			}
-		}
-	}
-	for_all_prompts(sym, prop)
-		get_prompt_str(r, prop, head);
-
-	prop = get_symbol_prop(sym);
-	if (prop) {
-		str_printf(r, _("  Defined at %s:%d\n"), prop->menu->file->name,
-			prop->menu->lineno);
-		if (!expr_is_yes(prop->visible.expr)) {
-			str_append(r, _("  Depends on: "));
-			expr_gstr_print(prop->visible.expr, r);
-			str_append(r, "\n");
-		}
-	}
-
-	hit = false;
-	for_all_properties(sym, prop, P_SELECT) {
-		if (!hit) {
-			str_append(r, "  Selects: ");
-			hit = true;
-		} else
-			str_printf(r, " && ");
-		expr_gstr_print(prop->expr, r);
-	}
-	if (hit)
-		str_append(r, "\n");
-	if (sym->rev_dep.expr) {
-		str_append(r, _("  Selected by: "));
-		expr_gstr_print(sym->rev_dep.expr, r);
-		str_append(r, "\n");
-	}
-	str_append(r, "\n\n");
-}
-
-struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head)
-{
-	struct symbol *sym;
-	struct gstr res = str_new();
-	int i;
-
-	for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
-		get_symbol_str(&res, sym, head);
-	if (!i)
-		str_append(&res, _("No matches found.\n"));
-	return res;
-}
-
-
-void menu_get_ext_help(struct menu *menu, struct gstr *help)
-{
-	struct symbol *sym = menu->sym;
-	const char *help_text = nohelp_text;
-
-	if (menu_has_help(menu)) {
-		if (sym->name)
-			str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
-		help_text = menu_get_help(menu);
-	}
-	str_printf(help, "%s\n", _(help_text));
-	if (sym)
-		get_symbol_str(help, sym, NULL);
-}
diff --git a/support/kconfig/merge_config.sh b/support/kconfig/merge_config.sh
deleted file mode 100755
index 8a1708b5..00000000
--- a/support/kconfig/merge_config.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/bin/sh
-#  merge_config.sh - Takes a list of config fragment values, and merges
-#  them one by one. Provides warnings on overridden values, and specified
-#  values that did not make it to the resulting .config file (due to missed
-#  dependencies or config symbol removal).
-#
-#  Portions reused from kconf_check and generate_cfg:
-#  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
-#  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
-#
-#  Copyright (c) 2009-2010 Wind River Systems, Inc.
-#  Copyright 2011 Linaro
-#
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License version 2 as
-#  published by the Free Software Foundation.
-#
-#  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.
-
-clean_up() {
-	rm -f $TMP_FILE
-	exit
-}
-trap clean_up HUP INT TERM
-
-usage() {
-	echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
-	echo "  -h    display this help text"
-	echo "  -m    only merge the fragments, do not execute the make command"
-	echo "  -n    use allnoconfig instead of alldefconfig"
-	echo "  -r    list redundant entries when merging fragments"
-	echo "  -O    dir to put generated output files"
-}
-
-MAKE=true
-ALLTARGET=alldefconfig
-WARNREDUN=false
-OUTPUT=.
-
-while true; do
-	case $1 in
-	"-n")
-		ALLTARGET=allnoconfig
-		shift
-		continue
-		;;
-	"-m")
-		MAKE=false
-		shift
-		continue
-		;;
-	"-h")
-		usage
-		exit
-		;;
-	"-r")
-		WARNREDUN=true
-		shift
-		continue
-		;;
-	"-O")
-		if [ -d $2 ];then
-			OUTPUT=$(echo $2 | sed 's/\/*$//')
-		else
-			echo "output directory $2 does not exist" 1>&2
-			exit 1
-		fi
-		shift 2
-		continue
-		;;
-	*)
-		break
-		;;
-	esac
-done
-
-INITFILE=$1
-shift;
-
-MERGE_LIST=$*
-SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
-TMP_FILE=$(mktemp -t .tmp.config.XXXXXXXXXX)
-
-echo "Using $INITFILE as base"
-cat $INITFILE > $TMP_FILE
-
-# Merge files, printing warnings on overrided values
-for MERGE_FILE in $MERGE_LIST ; do
-	echo "Merging $MERGE_FILE"
-	CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
-
-	for CFG in $CFG_LIST ; do
-		grep -q -w $CFG $TMP_FILE
-		if [ $? -eq 0 ] ; then
-			PREV_VAL=$(grep -w $CFG $TMP_FILE)
-			NEW_VAL=$(grep -w $CFG $MERGE_FILE)
-			if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
-			echo Value of $CFG is redefined by fragment $MERGE_FILE:
-			echo Previous  value: $PREV_VAL
-			echo New value:       $NEW_VAL
-			echo
-			elif [ "$WARNREDUN" = "true" ]; then
-			echo Value of $CFG is redundant by fragment $MERGE_FILE:
-			fi
-			sed -i "/$CFG[ =]/d" $TMP_FILE
-		fi
-	done
-	cat $MERGE_FILE >> $TMP_FILE
-done
-
-if [ "$MAKE" = "false" ]; then
-	cp $TMP_FILE $OUTPUT/.config
-	echo "#"
-	echo "# merged configuration written to $OUTPUT/.config (needs make)"
-	echo "#"
-	clean_up
-	exit
-fi
-
-# If we have an output dir, setup the O= argument, otherwise leave
-# it blank, since O=. will create an unnecessary ./source softlink
-OUTPUT_ARG=""
-if [ "$OUTPUT" != "." ] ; then
-	OUTPUT_ARG="O=$OUTPUT"
-fi
-
-
-# Use the merged file as the starting point for:
-# alldefconfig: Fills in any missing symbols with Kconfig default
-# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
-make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
-
-
-# Check all specified config values took (might have missed-dependency issues)
-for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
-
-	REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
-	ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config)
-	if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
-		echo "Value requested for $CFG not in final .config"
-		echo "Requested value:  $REQUESTED_VAL"
-		echo "Actual value:     $ACTUAL_VAL"
-		echo ""
-	fi
-done
-
-clean_up
diff --git a/support/kconfig/nconf.c b/support/kconfig/nconf.c
deleted file mode 100644
index 4fbecd24..00000000
--- a/support/kconfig/nconf.c
+++ /dev/null
@@ -1,1557 +0,0 @@
-/*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
- *
- * Derived from menuconfig.
- *
- */
-#define _GNU_SOURCE
-#include <string.h>
-#include <stdlib.h>
-
-#include "lkc.h"
-#include "nconf.h"
-#include <ctype.h>
-
-static const char nconf_global_help[] = N_(
-"Help windows\n"
-"------------\n"
-"o  Global help:  Unless in a data entry window, pressing <F1> will give \n"
-"   you the global help window, which you are just reading.\n"
-"\n"
-"o  A short version of the global help is available by pressing <F3>.\n"
-"\n"
-"o  Local help:  To get help related to the current menu entry, use any\n"
-"   of <?> <h>, or if in a data entry window then press <F1>.\n"
-"\n"
-"\n"
-"Menu entries\n"
-"------------\n"
-"This interface lets you select features and parameters for the kernel\n"
-"build.  Kernel features can either be built-in, modularized, or removed.\n"
-"Parameters must be entered as text or decimal or hexadecimal numbers.\n"
-"\n"
-"Menu entries beginning with following braces represent features that\n"
-"  [ ]  can be built in or removed\n"
-"  < >  can be built in, modularized or removed\n"
-"  { }  can be built in or modularized, are selected by another feature\n"
-"  - -  are selected by another feature\n"
-"  XXX  cannot be selected.  Symbol Info <F2> tells you why.\n"
-"*, M or whitespace inside braces means to build in, build as a module\n"
-"or to exclude the feature respectively.\n"
-"\n"
-"To change any of these features, highlight it with the movement keys\n"
-"listed below and press <y> to build it in, <m> to make it a module or\n"
-"<n> to remove it.  You may press the <Space> key to cycle through the\n"
-"available options.\n"
-"\n"
-"A trailing \"--->\" designates a submenu, a trailing \"----\" an\n"
-"empty submenu.\n"
-"\n"
-"Menu navigation keys\n"
-"----------------------------------------------------------------------\n"
-"Linewise up                 <Up>\n"
-"Linewise down               <Down>\n"
-"Pagewise up                 <Page Up>\n"
-"Pagewise down               <Page Down>\n"
-"First entry                 <Home>\n"
-"Last entry                  <End>\n"
-"Enter a submenu             <Right>  <Enter>\n"
-"Go back to parent menu      <Left>   <Esc>  <F5>\n"
-"Close a help window         <Enter>  <Esc>  <F5>\n"
-"Close entry window, apply   <Enter>\n"
-"Close entry window, forget  <Esc>  <F5>\n"
-"Start incremental, case-insensitive search for STRING in menu entries,\n"
-"    no regex support, STRING is displayed in upper left corner\n"
-"                            </>STRING\n"
-"    Remove last character   <Backspace>\n"
-"    Jump to next hit        <Down>\n"
-"    Jump to previous hit    <Up>\n"
-"Exit menu search mode       </>  <Esc>\n"
-"Search for configuration variables with or without leading CONFIG_\n"
-"                            <F8>RegExpr<Enter>\n"
-"Verbose search help         <F8><F1>\n"
-"----------------------------------------------------------------------\n"
-"\n"
-"Unless in a data entry window, key <1> may be used instead of <F1>,\n"
-"<2> instead of <F2>, etc.\n"
-"\n"
-"\n"
-"Radiolist (Choice list)\n"
-"-----------------------\n"
-"Use the movement keys listed above to select the option you wish to set\n"
-"and press <Space>.\n"
-"\n"
-"\n"
-"Data entry\n"
-"----------\n"
-"Enter the requested information and press <Enter>.  Hexadecimal values\n"
-"may be entered without the \"0x\" prefix.\n"
-"\n"
-"\n"
-"Text Box (Help Window)\n"
-"----------------------\n"
-"Use movement keys as listed in table above.\n"
-"\n"
-"Press any of <Enter> <Esc> <q> <F5> <F9> to exit.\n"
-"\n"
-"\n"
-"Alternate configuration files\n"
-"-----------------------------\n"
-"nconfig supports switching between different configurations.\n"
-"Press <F6> to save your current configuration.  Press <F7> and enter\n"
-"a file name to load a previously saved configuration.\n"
-"\n"
-"\n"
-"Terminal configuration\n"
-"----------------------\n"
-"If you use nconfig in a xterm window, make sure your TERM environment\n"
-"variable specifies a terminal configuration which supports at least\n"
-"16 colors.  Otherwise nconfig will look rather bad.\n"
-"\n"
-"If the \"stty size\" command reports the current terminalsize correctly,\n"
-"nconfig will adapt to sizes larger than the traditional 80x25 \"standard\"\n"
-"and display longer menus properly.\n"
-"\n"
-"\n"
-"Single menu mode\n"
-"----------------\n"
-"If you prefer to have all of the menu entries listed in a single menu,\n"
-"rather than the default multimenu hierarchy, run nconfig with\n"
-"NCONFIG_MODE environment variable set to single_menu.  Example:\n"
-"\n"
-"make NCONFIG_MODE=single_menu nconfig\n"
-"\n"
-"<Enter> will then unfold the appropriate category, or fold it if it\n"
-"is already unfolded.  Folded menu entries will be designated by a\n"
-"leading \"++>\" and unfolded entries by a leading \"-->\".\n"
-"\n"
-"Note that this mode can eventually be a little more CPU expensive than\n"
-"the default mode, especially with a larger number of unfolded submenus.\n"
-"\n"),
-menu_no_f_instructions[] = N_(
-"Legend:  [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
-"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n"
-"\n"
-"Use the following keys to navigate the menus:\n"
-"Move up or down with <Up> and <Down>.\n"
-"Enter a submenu with <Enter> or <Right>.\n"
-"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
-"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
-"Pressing <Space> cycles through the available options.\n"
-"To search for menu entries press </>.\n"
-"<Esc> always leaves the current window.\n"
-"\n"
-"You do not have function keys support.\n"
-"Press <1> instead of <F1>, <2> instead of <F2>, etc.\n"
-"For verbose global help use key <1>.\n"
-"For help related to the current menu entry press <?> or <h>.\n"),
-menu_instructions[] = N_(
-"Legend:  [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
-"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n"
-"\n"
-"Use the following keys to navigate the menus:\n"
-"Move up or down with <Up> or <Down>.\n"
-"Enter a submenu with <Enter> or <Right>.\n"
-"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
-"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
-"Pressing <Space> cycles through the available options.\n"
-"To search for menu entries press </>.\n"
-"<Esc> always leaves the current window.\n"
-"\n"
-"Pressing <1> may be used instead of <F1>, <2> instead of <F2>, etc.\n"
-"For verbose global help press <F1>.\n"
-"For help related to the current menu entry press <?> or <h>.\n"),
-radiolist_instructions[] = N_(
-"Press <Up>, <Down>, <Home> or <End> to navigate a radiolist, select\n"
-"with <Space>.\n"
-"For help related to the current entry press <?> or <h>.\n"
-"For global help press <F1>.\n"),
-inputbox_instructions_int[] = N_(
-"Please enter a decimal value.\n"
-"Fractions will not be accepted.\n"
-"Press <Enter> to apply, <Esc> to cancel."),
-inputbox_instructions_hex[] = N_(
-"Please enter a hexadecimal value.\n"
-"Press <Enter> to apply, <Esc> to cancel."),
-inputbox_instructions_string[] = N_(
-"Please enter a string value.\n"
-"Press <Enter> to apply, <Esc> to cancel."),
-setmod_text[] = N_(
-"This feature depends on another feature which has been configured as a\n"
-"module.  As a result, the current feature will be built as a module too."),
-load_config_text[] = N_(
-"Enter the name of the configuration file you wish to load.\n"
-"Accept the name shown to restore the configuration you last\n"
-"retrieved.  Leave empty to abort."),
-load_config_help[] = N_(
-"For various reasons, one may wish to keep several different\n"
-"configurations available on a single machine.\n"
-"\n"
-"If you have saved a previous configuration in a file other than the\n"
-"default one, entering its name here will allow you to load and modify\n"
-"that configuration.\n"
-"\n"
-"Leave empty to abort.\n"),
-save_config_text[] = N_(
-"Enter a filename to which this configuration should be saved\n"
-"as an alternate.  Leave empty to abort."),
-save_config_help[] = N_(
-"For various reasons, one may wish to keep several different\n"
-"configurations available on a single machine.\n"
-"\n"
-"Entering a file name here will allow you to later retrieve, modify\n"
-"and use the current configuration as an alternate to whatever\n"
-"configuration options you have selected at that time.\n"
-"\n"
-"Leave empty to abort.\n"),
-search_help[] = N_(
-"Search for symbols (configuration variable names CONFIG_*) and display\n"
-"their relations.  Regular expressions are supported.\n"
-"Example:  Search for \"^FOO\".\n"
-"Result:\n"
-"-----------------------------------------------------------------\n"
-"Symbol: FOO [ = m]\n"
-"Prompt: Foo bus is used to drive the bar HW\n"
-"Defined at drivers/pci/Kconfig:47\n"
-"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
-"Location:\n"
-"  -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
-"    -> PCI support (PCI [ = y])\n"
-"      -> PCI access mode (<choice> [ = y])\n"
-"Selects: LIBCRC32\n"
-"Selected by: BAR\n"
-"-----------------------------------------------------------------\n"
-"o  The line 'Prompt:' shows the text displayed for this symbol in\n"
-"   the menu hierarchy.\n"
-"o  The 'Defined at' line tells at what file / line number the symbol is\n"
-"   defined.\n"
-"o  The 'Depends on:' line lists symbols that need to be defined for\n"
-"   this symbol to be visible and selectable in the menu.\n"
-"o  The 'Location:' lines tell, where in the menu structure this symbol\n"
-"   is located.  A location followed by a [ = y] indicates that this is\n"
-"   a selectable menu item, and the current value is displayed inside\n"
-"   brackets.\n"
-"o  The 'Selects:' line tells, what symbol will be automatically selected\n"
-"   if this symbol is selected (y or m).\n"
-"o  The 'Selected by' line tells what symbol has selected this symbol.\n"
-"\n"
-"Only relevant lines are shown.\n"
-"\n\n"
-"Search examples:\n"
-"USB  => find all symbols containing USB\n"
-"^USB => find all symbols starting with USB\n"
-"USB$ => find all symbols ending with USB\n"
-"\n");
-
-struct mitem {
-	char str[256];
-	char tag;
-	void *usrptr;
-	int is_visible;
-};
-
-#define MAX_MENU_ITEMS 4096
-static int show_all_items;
-static int indent;
-static struct menu *current_menu;
-static int child_count;
-static int single_menu_mode;
-/* the window in which all information appears */
-static WINDOW *main_window;
-/* the largest size of the menu window */
-static int mwin_max_lines;
-static int mwin_max_cols;
-/* the window in which we show option buttons */
-static MENU *curses_menu;
-static ITEM *curses_menu_items[MAX_MENU_ITEMS];
-static struct mitem k_menu_items[MAX_MENU_ITEMS];
-static int items_num;
-static int global_exit;
-/* the currently selected button */
-const char *current_instructions = menu_instructions;
-
-static char *dialog_input_result;
-static int dialog_input_result_len;
-
-static void conf(struct menu *menu);
-static void conf_choice(struct menu *menu);
-static void conf_string(struct menu *menu);
-static void conf_load(void);
-static void conf_save(void);
-static void show_help(struct menu *menu);
-static int do_exit(void);
-static void setup_windows(void);
-static void search_conf(void);
-
-typedef void (*function_key_handler_t)(int *key, struct menu *menu);
-static void handle_f1(int *key, struct menu *current_item);
-static void handle_f2(int *key, struct menu *current_item);
-static void handle_f3(int *key, struct menu *current_item);
-static void handle_f4(int *key, struct menu *current_item);
-static void handle_f5(int *key, struct menu *current_item);
-static void handle_f6(int *key, struct menu *current_item);
-static void handle_f7(int *key, struct menu *current_item);
-static void handle_f8(int *key, struct menu *current_item);
-static void handle_f9(int *key, struct menu *current_item);
-
-struct function_keys {
-	const char *key_str;
-	const char *func;
-	function_key key;
-	function_key_handler_t handler;
-};
-
-static const int function_keys_num = 9;
-struct function_keys function_keys[] = {
-	{
-		.key_str = "F1",
-		.func = "Help",
-		.key = F_HELP,
-		.handler = handle_f1,
-	},
-	{
-		.key_str = "F2",
-		.func = "SymInfo",
-		.key = F_SYMBOL,
-		.handler = handle_f2,
-	},
-	{
-		.key_str = "F3",
-		.func = "Help 2",
-		.key = F_INSTS,
-		.handler = handle_f3,
-	},
-	{
-		.key_str = "F4",
-		.func = "ShowAll",
-		.key = F_CONF,
-		.handler = handle_f4,
-	},
-	{
-		.key_str = "F5",
-		.func = "Back",
-		.key = F_BACK,
-		.handler = handle_f5,
-	},
-	{
-		.key_str = "F6",
-		.func = "Save",
-		.key = F_SAVE,
-		.handler = handle_f6,
-	},
-	{
-		.key_str = "F7",
-		.func = "Load",
-		.key = F_LOAD,
-		.handler = handle_f7,
-	},
-	{
-		.key_str = "F8",
-		.func = "SymSearch",
-		.key = F_SEARCH,
-		.handler = handle_f8,
-	},
-	{
-		.key_str = "F9",
-		.func = "Exit",
-		.key = F_EXIT,
-		.handler = handle_f9,
-	},
-};
-
-static void print_function_line(void)
-{
-	int i;
-	int offset = 1;
-	const int skip = 1;
-	int lines = getmaxy(stdscr);
-
-	for (i = 0; i < function_keys_num; i++) {
-		(void) wattrset(main_window, attributes[FUNCTION_HIGHLIGHT]);
-		mvwprintw(main_window, lines-3, offset,
-				"%s",
-				function_keys[i].key_str);
-		(void) wattrset(main_window, attributes[FUNCTION_TEXT]);
-		offset += strlen(function_keys[i].key_str);
-		mvwprintw(main_window, lines-3,
-				offset, "%s",
-				function_keys[i].func);
-		offset += strlen(function_keys[i].func) + skip;
-	}
-	(void) wattrset(main_window, attributes[NORMAL]);
-}
-
-/* help */
-static void handle_f1(int *key, struct menu *current_item)
-{
-	show_scroll_win(main_window,
-			_("Global help"), _(nconf_global_help));
-	return;
-}
-
-/* symbole help */
-static void handle_f2(int *key, struct menu *current_item)
-{
-	show_help(current_item);
-	return;
-}
-
-/* instructions */
-static void handle_f3(int *key, struct menu *current_item)
-{
-	show_scroll_win(main_window,
-			_("Short help"),
-			_(current_instructions));
-	return;
-}
-
-/* config */
-static void handle_f4(int *key, struct menu *current_item)
-{
-	int res = btn_dialog(main_window,
-			_("Show all symbols?"),
-			2,
-			"   <Show All>   ",
-			"<Don't show all>");
-	if (res == 0)
-		show_all_items = 1;
-	else if (res == 1)
-		show_all_items = 0;
-
-	return;
-}
-
-/* back */
-static void handle_f5(int *key, struct menu *current_item)
-{
-	*key = KEY_LEFT;
-	return;
-}
-
-/* save */
-static void handle_f6(int *key, struct menu *current_item)
-{
-	conf_save();
-	return;
-}
-
-/* load */
-static void handle_f7(int *key, struct menu *current_item)
-{
-	conf_load();
-	return;
-}
-
-/* search */
-static void handle_f8(int *key, struct menu *current_item)
-{
-	search_conf();
-	return;
-}
-
-/* exit */
-static void handle_f9(int *key, struct menu *current_item)
-{
-	do_exit();
-	return;
-}
-
-/* return != 0 to indicate the key was handles */
-static int process_special_keys(int *key, struct menu *menu)
-{
-	int i;
-
-	if (*key == KEY_RESIZE) {
-		setup_windows();
-		return 1;
-	}
-
-	for (i = 0; i < function_keys_num; i++) {
-		if (*key == KEY_F(function_keys[i].key) ||
-		    *key == '0' + function_keys[i].key){
-			function_keys[i].handler(key, menu);
-			return 1;
-		}
-	}
-
-	return 0;
-}
-
-static void clean_items(void)
-{
-	int i;
-	for (i = 0; curses_menu_items[i]; i++)
-		free_item(curses_menu_items[i]);
-	bzero(curses_menu_items, sizeof(curses_menu_items));
-	bzero(k_menu_items, sizeof(k_menu_items));
-	items_num = 0;
-}
-
-typedef enum {MATCH_TINKER_PATTERN_UP, MATCH_TINKER_PATTERN_DOWN,
-	FIND_NEXT_MATCH_DOWN, FIND_NEXT_MATCH_UP} match_f;
-
-/* return the index of the matched item, or -1 if no such item exists */
-static int get_mext_match(const char *match_str, match_f flag)
-{
-	int match_start = item_index(current_item(curses_menu));
-	int index;
-
-	if (flag == FIND_NEXT_MATCH_DOWN)
-		++match_start;
-	else if (flag == FIND_NEXT_MATCH_UP)
-		--match_start;
-
-	index = match_start;
-	index = (index + items_num) % items_num;
-	while (true) {
-		char *str = k_menu_items[index].str;
-		if (strcasestr(str, match_str) != 0)
-			return index;
-		if (flag == FIND_NEXT_MATCH_UP ||
-		    flag == MATCH_TINKER_PATTERN_UP)
-			--index;
-		else
-			++index;
-		index = (index + items_num) % items_num;
-		if (index == match_start)
-			return -1;
-	}
-}
-
-/* Make a new item. */
-static void item_make(struct menu *menu, char tag, const char *fmt, ...)
-{
-	va_list ap;
-
-	if (items_num > MAX_MENU_ITEMS-1)
-		return;
-
-	bzero(&k_menu_items[items_num], sizeof(k_menu_items[0]));
-	k_menu_items[items_num].tag = tag;
-	k_menu_items[items_num].usrptr = menu;
-	if (menu != NULL)
-		k_menu_items[items_num].is_visible =
-			menu_is_visible(menu);
-	else
-		k_menu_items[items_num].is_visible = 1;
-
-	va_start(ap, fmt);
-	vsnprintf(k_menu_items[items_num].str,
-		  sizeof(k_menu_items[items_num].str),
-		  fmt, ap);
-	va_end(ap);
-
-	if (!k_menu_items[items_num].is_visible)
-		memcpy(k_menu_items[items_num].str, "XXX", 3);
-
-	curses_menu_items[items_num] = new_item(
-			k_menu_items[items_num].str,
-			k_menu_items[items_num].str);
-	set_item_userptr(curses_menu_items[items_num],
-			&k_menu_items[items_num]);
-	/*
-	if (!k_menu_items[items_num].is_visible)
-		item_opts_off(curses_menu_items[items_num], O_SELECTABLE);
-	*/
-
-	items_num++;
-	curses_menu_items[items_num] = NULL;
-}
-
-/* very hackish. adds a string to the last item added */
-static void item_add_str(const char *fmt, ...)
-{
-	va_list ap;
-	int index = items_num-1;
-	char new_str[256];
-	char tmp_str[256];
-
-	if (index < 0)
-		return;
-
-	va_start(ap, fmt);
-	vsnprintf(new_str, sizeof(new_str), fmt, ap);
-	va_end(ap);
-	snprintf(tmp_str, sizeof(tmp_str), "%s%s",
-			k_menu_items[index].str, new_str);
-	strncpy(k_menu_items[index].str,
-		tmp_str,
-		sizeof(k_menu_items[index].str));
-
-	free_item(curses_menu_items[index]);
-	curses_menu_items[index] = new_item(
-			k_menu_items[index].str,
-			k_menu_items[index].str);
-	set_item_userptr(curses_menu_items[index],
-			&k_menu_items[index]);
-}
-
-/* get the tag of the currently selected item */
-static char item_tag(void)
-{
-	ITEM *cur;
-	struct mitem *mcur;
-
-	cur = current_item(curses_menu);
-	if (cur == NULL)
-		return 0;
-	mcur = (struct mitem *) item_userptr(cur);
-	return mcur->tag;
-}
-
-static int curses_item_index(void)
-{
-	return  item_index(current_item(curses_menu));
-}
-
-static void *item_data(void)
-{
-	ITEM *cur;
-	struct mitem *mcur;
-
-	cur = current_item(curses_menu);
-	if (!cur)
-		return NULL;
-	mcur = (struct mitem *) item_userptr(cur);
-	return mcur->usrptr;
-
-}
-
-static int item_is_tag(char tag)
-{
-	return item_tag() == tag;
-}
-
-static char filename[PATH_MAX+1];
-static char menu_backtitle[PATH_MAX+128];
-static const char *set_config_filename(const char *config_filename)
-{
-	int size;
-
-	size = snprintf(menu_backtitle, sizeof(menu_backtitle),
-			"%s - %s", config_filename, rootmenu.prompt->text);
-	if (size >= sizeof(menu_backtitle))
-		menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
-
-	size = snprintf(filename, sizeof(filename), "%s", config_filename);
-	if (size >= sizeof(filename))
-		filename[sizeof(filename)-1] = '\0';
-	return menu_backtitle;
-}
-
-/* return = 0 means we are successful.
- * -1 means go on doing what you were doing
- */
-static int do_exit(void)
-{
-	int res;
-	if (!conf_get_changed()) {
-		global_exit = 1;
-		return 0;
-	}
-	res = btn_dialog(main_window,
-			_("Do you wish to save your new configuration?\n"
-				"<ESC> to cancel and resume nconfig."),
-			2,
-			"   <save>   ",
-			"<don't save>");
-	if (res == KEY_EXIT) {
-		global_exit = 0;
-		return -1;
-	}
-
-	/* if we got here, the user really wants to exit */
-	switch (res) {
-	case 0:
-		res = conf_write(filename);
-		if (res)
-			btn_dialog(
-				main_window,
-				_("Error during writing of configuration.\n"
-				  "Your configuration changes were NOT saved."),
-				  1,
-				  "<OK>");
-		break;
-	default:
-		btn_dialog(
-			main_window,
-			_("Your configuration changes were NOT saved."),
-			1,
-			"<OK>");
-		break;
-	}
-	global_exit = 1;
-	return 0;
-}
-
-
-static void search_conf(void)
-{
-	struct symbol **sym_arr;
-	struct gstr res;
-	struct gstr title;
-	char *dialog_input;
-	int dres;
-
-	title = str_new();
-	str_printf( &title, _("Enter (sub)string or regexp to search for "
-			      "(with or without \"%s\")"), CONFIG_);
-
-again:
-	dres = dialog_inputbox(main_window,
-			_("Search Configuration Parameter"),
-			str_get(&title),
-			"", &dialog_input_result, &dialog_input_result_len);
-	switch (dres) {
-	case 0:
-		break;
-	case 1:
-		show_scroll_win(main_window,
-				_("Search Configuration"), search_help);
-		goto again;
-	default:
-		str_free(&title);
-		return;
-	}
-
-	/* strip the prefix if necessary */
-	dialog_input = dialog_input_result;
-	if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
-		dialog_input += strlen(CONFIG_);
-
-	sym_arr = sym_re_search(dialog_input);
-	res = get_relations_str(sym_arr, NULL);
-	free(sym_arr);
-	show_scroll_win(main_window,
-			_("Search Results"), str_get(&res));
-	str_free(&res);
-	str_free(&title);
-}
-
-
-static void build_conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-	int type, tmp, doint = 2;
-	tristate val;
-	char ch;
-
-	if (!menu || (!show_all_items && !menu_is_visible(menu)))
-		return;
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	if (!sym) {
-		if (prop && menu != current_menu) {
-			const char *prompt = menu_get_prompt(menu);
-			enum prop_type ptype;
-			ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-			switch (ptype) {
-			case P_MENU:
-				child_count++;
-				prompt = _(prompt);
-				if (single_menu_mode) {
-					item_make(menu, 'm',
-						"%s%*c%s",
-						menu->data ? "-->" : "++>",
-						indent + 1, ' ', prompt);
-				} else
-					item_make(menu, 'm',
-						  "   %*c%s  %s",
-						  indent + 1, ' ', prompt,
-						  menu_is_empty(menu) ? "----" : "--->");
-
-				if (single_menu_mode && menu->data)
-					goto conf_childs;
-				return;
-			case P_COMMENT:
-				if (prompt) {
-					child_count++;
-					item_make(menu, ':',
-						"   %*c*** %s ***",
-						indent + 1, ' ',
-						_(prompt));
-				}
-				break;
-			default:
-				if (prompt) {
-					child_count++;
-					item_make(menu, ':', "---%*c%s",
-						indent + 1, ' ',
-						_(prompt));
-				}
-			}
-		} else
-			doint = 0;
-		goto conf_childs;
-	}
-
-	type = sym_get_type(sym);
-	if (sym_is_choice(sym)) {
-		struct symbol *def_sym = sym_get_choice_value(sym);
-		struct menu *def_menu = NULL;
-
-		child_count++;
-		for (child = menu->list; child; child = child->next) {
-			if (menu_is_visible(child) && child->sym == def_sym)
-				def_menu = child;
-		}
-
-		val = sym_get_tristate_value(sym);
-		if (sym_is_changable(sym)) {
-			switch (type) {
-			case S_BOOLEAN:
-				item_make(menu, 't', "[%c]",
-						val == no ? ' ' : '*');
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes:
-					ch = '*';
-					break;
-				case mod:
-					ch = 'M';
-					break;
-				default:
-					ch = ' ';
-					break;
-				}
-				item_make(menu, 't', "<%c>", ch);
-				break;
-			}
-		} else {
-			item_make(menu, def_menu ? 't' : ':', "   ");
-		}
-
-		item_add_str("%*c%s", indent + 1,
-				' ', _(menu_get_prompt(menu)));
-		if (val == yes) {
-			if (def_menu) {
-				item_add_str(" (%s)",
-					_(menu_get_prompt(def_menu)));
-				item_add_str("  --->");
-				if (def_menu->list) {
-					indent += 2;
-					build_conf(def_menu);
-					indent -= 2;
-				}
-			}
-			return;
-		}
-	} else {
-		if (menu == current_menu) {
-			item_make(menu, ':',
-				"---%*c%s", indent + 1,
-				' ', _(menu_get_prompt(menu)));
-			goto conf_childs;
-		}
-		child_count++;
-		val = sym_get_tristate_value(sym);
-		if (sym_is_choice_value(sym) && val == yes) {
-			item_make(menu, ':', "   ");
-		} else {
-			switch (type) {
-			case S_BOOLEAN:
-				if (sym_is_changable(sym))
-					item_make(menu, 't', "[%c]",
-						val == no ? ' ' : '*');
-				else
-					item_make(menu, 't', "-%c-",
-						val == no ? ' ' : '*');
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes:
-					ch = '*';
-					break;
-				case mod:
-					ch = 'M';
-					break;
-				default:
-					ch = ' ';
-					break;
-				}
-				if (sym_is_changable(sym)) {
-					if (sym->rev_dep.tri == mod)
-						item_make(menu,
-							't', "{%c}", ch);
-					else
-						item_make(menu,
-							't', "<%c>", ch);
-				} else
-					item_make(menu, 't', "-%c-", ch);
-				break;
-			default:
-				tmp = 2 + strlen(sym_get_string_value(sym));
-				item_make(menu, 's', "    (%s)",
-						sym_get_string_value(sym));
-				tmp = indent - tmp + 4;
-				if (tmp < 0)
-					tmp = 0;
-				item_add_str("%*c%s%s", tmp, ' ',
-						_(menu_get_prompt(menu)),
-						(sym_has_value(sym) ||
-						 !sym_is_changable(sym)) ? "" :
-						_(" (NEW)"));
-				goto conf_childs;
-			}
-		}
-		item_add_str("%*c%s%s", indent + 1, ' ',
-				_(menu_get_prompt(menu)),
-				(sym_has_value(sym) || !sym_is_changable(sym)) ?
-				"" : _(" (NEW)"));
-		if (menu->prompt && menu->prompt->type == P_MENU) {
-			item_add_str("  %s", menu_is_empty(menu) ? "----" : "--->");
-			return;
-		}
-	}
-
-conf_childs:
-	indent += doint;
-	for (child = menu->list; child; child = child->next)
-		build_conf(child);
-	indent -= doint;
-}
-
-static void reset_menu(void)
-{
-	unpost_menu(curses_menu);
-	clean_items();
-}
-
-/* adjust the menu to show this item.
- * prefer not to scroll the menu if possible*/
-static void center_item(int selected_index, int *last_top_row)
-{
-	int toprow;
-
-	set_top_row(curses_menu, *last_top_row);
-	toprow = top_row(curses_menu);
-	if (selected_index < toprow ||
-	    selected_index >= toprow+mwin_max_lines) {
-		toprow = max(selected_index-mwin_max_lines/2, 0);
-		if (toprow >= item_count(curses_menu)-mwin_max_lines)
-			toprow = item_count(curses_menu)-mwin_max_lines;
-		set_top_row(curses_menu, toprow);
-	}
-	set_current_item(curses_menu,
-			curses_menu_items[selected_index]);
-	*last_top_row = toprow;
-	post_menu(curses_menu);
-	refresh_all_windows(main_window);
-}
-
-/* this function assumes reset_menu has been called before */
-static void show_menu(const char *prompt, const char *instructions,
-		int selected_index, int *last_top_row)
-{
-	int maxx, maxy;
-	WINDOW *menu_window;
-
-	current_instructions = instructions;
-
-	clear();
-	(void) wattrset(main_window, attributes[NORMAL]);
-	print_in_middle(stdscr, 1, 0, getmaxx(stdscr),
-			menu_backtitle,
-			attributes[MAIN_HEADING]);
-
-	(void) wattrset(main_window, attributes[MAIN_MENU_BOX]);
-	box(main_window, 0, 0);
-	(void) wattrset(main_window, attributes[MAIN_MENU_HEADING]);
-	mvwprintw(main_window, 0, 3, " %s ", prompt);
-	(void) wattrset(main_window, attributes[NORMAL]);
-
-	set_menu_items(curses_menu, curses_menu_items);
-
-	/* position the menu at the middle of the screen */
-	scale_menu(curses_menu, &maxy, &maxx);
-	maxx = min(maxx, mwin_max_cols-2);
-	maxy = mwin_max_lines;
-	menu_window = derwin(main_window,
-			maxy,
-			maxx,
-			2,
-			(mwin_max_cols-maxx)/2);
-	keypad(menu_window, TRUE);
-	set_menu_win(curses_menu, menu_window);
-	set_menu_sub(curses_menu, menu_window);
-
-	/* must reassert this after changing items, otherwise returns to a
-	 * default of 16
-	 */
-	set_menu_format(curses_menu, maxy, 1);
-	center_item(selected_index, last_top_row);
-	set_menu_format(curses_menu, maxy, 1);
-
-	print_function_line();
-
-	/* Post the menu */
-	post_menu(curses_menu);
-	refresh_all_windows(main_window);
-}
-
-static void adj_match_dir(match_f *match_direction)
-{
-	if (*match_direction == FIND_NEXT_MATCH_DOWN)
-		*match_direction =
-			MATCH_TINKER_PATTERN_DOWN;
-	else if (*match_direction == FIND_NEXT_MATCH_UP)
-		*match_direction =
-			MATCH_TINKER_PATTERN_UP;
-	/* else, do no change.. */
-}
-
-struct match_state
-{
-	int in_search;
-	match_f match_direction;
-	char pattern[256];
-};
-
-/* Return 0 means I have handled the key. In such a case, ans should hold the
- * item to center, or -1 otherwise.
- * Else return -1 .
- */
-static int do_match(int key, struct match_state *state, int *ans)
-{
-	char c = (char) key;
-	int terminate_search = 0;
-	*ans = -1;
-	if (key == '/' || (state->in_search && key == 27)) {
-		move(0, 0);
-		refresh();
-		clrtoeol();
-		state->in_search = 1-state->in_search;
-		bzero(state->pattern, sizeof(state->pattern));
-		state->match_direction = MATCH_TINKER_PATTERN_DOWN;
-		return 0;
-	} else if (!state->in_search)
-		return 1;
-
-	if (isalnum(c) || isgraph(c) || c == ' ') {
-		state->pattern[strlen(state->pattern)] = c;
-		state->pattern[strlen(state->pattern)] = '\0';
-		adj_match_dir(&state->match_direction);
-		*ans = get_mext_match(state->pattern,
-				state->match_direction);
-	} else if (key == KEY_DOWN) {
-		state->match_direction = FIND_NEXT_MATCH_DOWN;
-		*ans = get_mext_match(state->pattern,
-				state->match_direction);
-	} else if (key == KEY_UP) {
-		state->match_direction = FIND_NEXT_MATCH_UP;
-		*ans = get_mext_match(state->pattern,
-				state->match_direction);
-	} else if (key == KEY_BACKSPACE || key == 127) {
-		state->pattern[strlen(state->pattern)-1] = '\0';
-		adj_match_dir(&state->match_direction);
-	} else
-		terminate_search = 1;
-
-	if (terminate_search) {
-		state->in_search = 0;
-		bzero(state->pattern, sizeof(state->pattern));
-		move(0, 0);
-		refresh();
-		clrtoeol();
-		return -1;
-	}
-	return 0;
-}
-
-static void conf(struct menu *menu)
-{
-	struct menu *submenu = 0;
-	const char *prompt = menu_get_prompt(menu);
-	struct symbol *sym;
-	int res;
-	int current_index = 0;
-	int last_top_row = 0;
-	struct match_state match_state = {
-		.in_search = 0,
-		.match_direction = MATCH_TINKER_PATTERN_DOWN,
-		.pattern = "",
-	};
-
-	while (!global_exit) {
-		reset_menu();
-		current_menu = menu;
-		build_conf(menu);
-		if (!child_count)
-			break;
-
-		show_menu(prompt ? _(prompt) : _("Main Menu"),
-				_(menu_instructions),
-				current_index, &last_top_row);
-		keypad((menu_win(curses_menu)), TRUE);
-		while (!global_exit) {
-			if (match_state.in_search) {
-				mvprintw(0, 0,
-					"searching: %s", match_state.pattern);
-				clrtoeol();
-			}
-			refresh_all_windows(main_window);
-			res = wgetch(menu_win(curses_menu));
-			if (!res)
-				break;
-			if (do_match(res, &match_state, &current_index) == 0) {
-				if (current_index != -1)
-					center_item(current_index,
-						    &last_top_row);
-				continue;
-			}
-			if (process_special_keys(&res,
-						(struct menu *) item_data()))
-				break;
-			switch (res) {
-			case KEY_DOWN:
-				menu_driver(curses_menu, REQ_DOWN_ITEM);
-				break;
-			case KEY_UP:
-				menu_driver(curses_menu, REQ_UP_ITEM);
-				break;
-			case KEY_NPAGE:
-				menu_driver(curses_menu, REQ_SCR_DPAGE);
-				break;
-			case KEY_PPAGE:
-				menu_driver(curses_menu, REQ_SCR_UPAGE);
-				break;
-			case KEY_HOME:
-				menu_driver(curses_menu, REQ_FIRST_ITEM);
-				break;
-			case KEY_END:
-				menu_driver(curses_menu, REQ_LAST_ITEM);
-				break;
-			case 'h':
-			case '?':
-				show_help((struct menu *) item_data());
-				break;
-			}
-			if (res == 10 || res == 27 ||
-				res == 32 || res == 'n' || res == 'y' ||
-				res == KEY_LEFT || res == KEY_RIGHT ||
-				res == 'm')
-				break;
-			refresh_all_windows(main_window);
-		}
-
-		refresh_all_windows(main_window);
-		/* if ESC or left*/
-		if (res == 27 || (menu != &rootmenu && res == KEY_LEFT))
-			break;
-
-		/* remember location in the menu */
-		last_top_row = top_row(curses_menu);
-		current_index = curses_item_index();
-
-		if (!item_tag())
-			continue;
-
-		submenu = (struct menu *) item_data();
-		if (!submenu || !menu_is_visible(submenu))
-			continue;
-		sym = submenu->sym;
-
-		switch (res) {
-		case ' ':
-			if (item_is_tag('t'))
-				sym_toggle_tristate_value(sym);
-			else if (item_is_tag('m'))
-				conf(submenu);
-			break;
-		case KEY_RIGHT:
-		case 10: /* ENTER WAS PRESSED */
-			switch (item_tag()) {
-			case 'm':
-				if (single_menu_mode)
-					submenu->data =
-						(void *) (long) !submenu->data;
-				else
-					conf(submenu);
-				break;
-			case 't':
-				if (sym_is_choice(sym) &&
-				    sym_get_tristate_value(sym) == yes)
-					conf_choice(submenu);
-				else if (submenu->prompt &&
-					 submenu->prompt->type == P_MENU)
-					conf(submenu);
-				else if (res == 10)
-					sym_toggle_tristate_value(sym);
-				break;
-			case 's':
-				conf_string(submenu);
-				break;
-			}
-			break;
-		case 'y':
-			if (item_is_tag('t')) {
-				if (sym_set_tristate_value(sym, yes))
-					break;
-				if (sym_set_tristate_value(sym, mod))
-					btn_dialog(main_window, setmod_text, 0);
-			}
-			break;
-		case 'n':
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, no);
-			break;
-		case 'm':
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, mod);
-			break;
-		}
-	}
-}
-
-static void conf_message_callback(const char *fmt, va_list ap)
-{
-	char buf[1024];
-
-	vsnprintf(buf, sizeof(buf), fmt, ap);
-	btn_dialog(main_window, buf, 1, "<OK>");
-}
-
-static void show_help(struct menu *menu)
-{
-	struct gstr help;
-
-	if (!menu)
-		return;
-
-	help = str_new();
-	menu_get_ext_help(menu, &help);
-	show_scroll_win(main_window, _(menu_get_prompt(menu)), str_get(&help));
-	str_free(&help);
-}
-
-static void conf_choice(struct menu *menu)
-{
-	const char *prompt = _(menu_get_prompt(menu));
-	struct menu *child = 0;
-	struct symbol *active;
-	int selected_index = 0;
-	int last_top_row = 0;
-	int res, i = 0;
-	struct match_state match_state = {
-		.in_search = 0,
-		.match_direction = MATCH_TINKER_PATTERN_DOWN,
-		.pattern = "",
-	};
-
-	active = sym_get_choice_value(menu->sym);
-	/* this is mostly duplicated from the conf() function. */
-	while (!global_exit) {
-		reset_menu();
-
-		for (i = 0, child = menu->list; child; child = child->next) {
-			if (!show_all_items && !menu_is_visible(child))
-				continue;
-
-			if (child->sym == sym_get_choice_value(menu->sym))
-				item_make(child, ':', "<X> %s",
-						_(menu_get_prompt(child)));
-			else if (child->sym)
-				item_make(child, ':', "    %s",
-						_(menu_get_prompt(child)));
-			else
-				item_make(child, ':', "*** %s ***",
-						_(menu_get_prompt(child)));
-
-			if (child->sym == active){
-				last_top_row = top_row(curses_menu);
-				selected_index = i;
-			}
-			i++;
-		}
-		show_menu(prompt ? _(prompt) : _("Choice Menu"),
-				_(radiolist_instructions),
-				selected_index,
-				&last_top_row);
-		while (!global_exit) {
-			if (match_state.in_search) {
-				mvprintw(0, 0, "searching: %s",
-					 match_state.pattern);
-				clrtoeol();
-			}
-			refresh_all_windows(main_window);
-			res = wgetch(menu_win(curses_menu));
-			if (!res)
-				break;
-			if (do_match(res, &match_state, &selected_index) == 0) {
-				if (selected_index != -1)
-					center_item(selected_index,
-						    &last_top_row);
-				continue;
-			}
-			if (process_special_keys(
-						&res,
-						(struct menu *) item_data()))
-				break;
-			switch (res) {
-			case KEY_DOWN:
-				menu_driver(curses_menu, REQ_DOWN_ITEM);
-				break;
-			case KEY_UP:
-				menu_driver(curses_menu, REQ_UP_ITEM);
-				break;
-			case KEY_NPAGE:
-				menu_driver(curses_menu, REQ_SCR_DPAGE);
-				break;
-			case KEY_PPAGE:
-				menu_driver(curses_menu, REQ_SCR_UPAGE);
-				break;
-			case KEY_HOME:
-				menu_driver(curses_menu, REQ_FIRST_ITEM);
-				break;
-			case KEY_END:
-				menu_driver(curses_menu, REQ_LAST_ITEM);
-				break;
-			case 'h':
-			case '?':
-				show_help((struct menu *) item_data());
-				break;
-			}
-			if (res == 10 || res == 27 || res == ' ' ||
-					res == KEY_LEFT){
-				break;
-			}
-			refresh_all_windows(main_window);
-		}
-		/* if ESC or left */
-		if (res == 27 || res == KEY_LEFT)
-			break;
-
-		child = item_data();
-		if (!child || !menu_is_visible(child) || !child->sym)
-			continue;
-		switch (res) {
-		case ' ':
-		case  10:
-		case KEY_RIGHT:
-			sym_set_tristate_value(child->sym, yes);
-			return;
-		case 'h':
-		case '?':
-			show_help(child);
-			active = child->sym;
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-static void conf_string(struct menu *menu)
-{
-	const char *prompt = menu_get_prompt(menu);
-
-	while (1) {
-		int res;
-		const char *heading;
-
-		switch (sym_get_type(menu->sym)) {
-		case S_INT:
-			heading = _(inputbox_instructions_int);
-			break;
-		case S_HEX:
-			heading = _(inputbox_instructions_hex);
-			break;
-		case S_STRING:
-			heading = _(inputbox_instructions_string);
-			break;
-		default:
-			heading = _("Internal nconf error!");
-		}
-		res = dialog_inputbox(main_window,
-				prompt ? _(prompt) : _("Main Menu"),
-				heading,
-				sym_get_string_value(menu->sym),
-				&dialog_input_result,
-				&dialog_input_result_len);
-		switch (res) {
-		case 0:
-			if (sym_set_string_value(menu->sym,
-						dialog_input_result))
-				return;
-			btn_dialog(main_window,
-				_("You have made an invalid entry."), 0);
-			break;
-		case 1:
-			show_help(menu);
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-static void conf_load(void)
-{
-	while (1) {
-		int res;
-		res = dialog_inputbox(main_window,
-				NULL, load_config_text,
-				filename,
-				&dialog_input_result,
-				&dialog_input_result_len);
-		switch (res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			if (!conf_read(dialog_input_result)) {
-				set_config_filename(dialog_input_result);
-				sym_set_change_count(1);
-				return;
-			}
-			btn_dialog(main_window, _("File does not exist!"), 0);
-			break;
-		case 1:
-			show_scroll_win(main_window,
-					_("Load Alternate Configuration"),
-					load_config_help);
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-static void conf_save(void)
-{
-	while (1) {
-		int res;
-		res = dialog_inputbox(main_window,
-				NULL, save_config_text,
-				filename,
-				&dialog_input_result,
-				&dialog_input_result_len);
-		switch (res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			res = conf_write(dialog_input_result);
-			if (!res) {
-				set_config_filename(dialog_input_result);
-				return;
-			}
-			btn_dialog(main_window, _("Can't create file! "
-				"Probably a nonexistent directory."),
-				1, "<OK>");
-			break;
-		case 1:
-			show_scroll_win(main_window,
-				_("Save Alternate Configuration"),
-				save_config_help);
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-void setup_windows(void)
-{
-	int lines, columns;
-
-	getmaxyx(stdscr, lines, columns);
-
-	if (main_window != NULL)
-		delwin(main_window);
-
-	/* set up the menu and menu window */
-	main_window = newwin(lines-2, columns-2, 2, 1);
-	keypad(main_window, TRUE);
-	mwin_max_lines = lines-7;
-	mwin_max_cols = columns-6;
-
-	/* panels order is from bottom to top */
-	new_panel(main_window);
-}
-
-int main(int ac, char **av)
-{
-	int lines, columns;
-	char *mode;
-
-	setlocale(LC_ALL, "");
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	conf_parse(av[1]);
-	conf_read(NULL);
-
-	mode = getenv("NCONFIG_MODE");
-	if (mode) {
-		if (!strcasecmp(mode, "single_menu"))
-			single_menu_mode = 1;
-	}
-
-	/* Initialize curses */
-	initscr();
-	/* set color theme */
-	set_colors();
-
-	cbreak();
-	noecho();
-	keypad(stdscr, TRUE);
-	curs_set(0);
-
-	getmaxyx(stdscr, lines, columns);
-	if (columns < 75 || lines < 20) {
-		endwin();
-		printf("Your terminal should have at "
-			"least 20 lines and 75 columns\n");
-		return 1;
-	}
-
-	notimeout(stdscr, FALSE);
-#if NCURSES_REENTRANT
-	set_escdelay(1);
-#else
-	ESCDELAY = 1;
-#endif
-
-	/* set btns menu */
-	curses_menu = new_menu(curses_menu_items);
-	menu_opts_off(curses_menu, O_SHOWDESC);
-	menu_opts_on(curses_menu, O_SHOWMATCH);
-	menu_opts_on(curses_menu, O_ONEVALUE);
-	menu_opts_on(curses_menu, O_NONCYCLIC);
-	menu_opts_on(curses_menu, O_IGNORECASE);
-	set_menu_mark(curses_menu, " ");
-	set_menu_fore(curses_menu, attributes[MAIN_MENU_FORE]);
-	set_menu_back(curses_menu, attributes[MAIN_MENU_BACK]);
-	set_menu_grey(curses_menu, attributes[MAIN_MENU_GREY]);
-
-	set_config_filename(conf_get_configname());
-	setup_windows();
-
-	/* check for KEY_FUNC(1) */
-	if (has_key(KEY_F(1)) == FALSE) {
-		show_scroll_win(main_window,
-				_("Instructions"),
-				_(menu_no_f_instructions));
-	}
-
-	conf_set_message_callback(conf_message_callback);
-	/* do the work */
-	while (!global_exit) {
-		conf(&rootmenu);
-		if (!global_exit && do_exit() == 0)
-			break;
-	}
-	/* ok, we are done */
-	unpost_menu(curses_menu);
-	free_menu(curses_menu);
-	delwin(main_window);
-	clear();
-	refresh();
-	endwin();
-	return 0;
-}
-
diff --git a/support/kconfig/nconf.gui.c b/support/kconfig/nconf.gui.c
deleted file mode 100644
index 8275f0e5..00000000
--- a/support/kconfig/nconf.gui.c
+++ /dev/null
@@ -1,656 +0,0 @@
-/*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
- *
- * Derived from menuconfig.
- *
- */
-#include "nconf.h"
-
-/* a list of all the different widgets we use */
-attributes_t attributes[ATTR_MAX+1] = {0};
-
-/* available colors:
-   COLOR_BLACK   0
-   COLOR_RED     1
-   COLOR_GREEN   2
-   COLOR_YELLOW  3
-   COLOR_BLUE    4
-   COLOR_MAGENTA 5
-   COLOR_CYAN    6
-   COLOR_WHITE   7
-   */
-static void set_normal_colors(void)
-{
-	init_pair(NORMAL, -1, -1);
-	init_pair(MAIN_HEADING, COLOR_MAGENTA, -1);
-
-	/* FORE is for the selected item */
-	init_pair(MAIN_MENU_FORE, -1, -1);
-	/* BACK for all the rest */
-	init_pair(MAIN_MENU_BACK, -1, -1);
-	init_pair(MAIN_MENU_GREY, -1, -1);
-	init_pair(MAIN_MENU_HEADING, COLOR_GREEN, -1);
-	init_pair(MAIN_MENU_BOX, COLOR_YELLOW, -1);
-
-	init_pair(SCROLLWIN_TEXT, -1, -1);
-	init_pair(SCROLLWIN_HEADING, COLOR_GREEN, -1);
-	init_pair(SCROLLWIN_BOX, COLOR_YELLOW, -1);
-
-	init_pair(DIALOG_TEXT, -1, -1);
-	init_pair(DIALOG_BOX, COLOR_YELLOW, -1);
-	init_pair(DIALOG_MENU_BACK, COLOR_YELLOW, -1);
-	init_pair(DIALOG_MENU_FORE, COLOR_RED, -1);
-
-	init_pair(INPUT_BOX, COLOR_YELLOW, -1);
-	init_pair(INPUT_HEADING, COLOR_GREEN, -1);
-	init_pair(INPUT_TEXT, -1, -1);
-	init_pair(INPUT_FIELD, -1, -1);
-
-	init_pair(FUNCTION_HIGHLIGHT, -1, -1);
-	init_pair(FUNCTION_TEXT, COLOR_YELLOW, -1);
-}
-
-/* available attributes:
-   A_NORMAL        Normal display (no highlight)
-   A_STANDOUT      Best highlighting mode of the terminal.
-   A_UNDERLINE     Underlining
-   A_REVERSE       Reverse video
-   A_BLINK         Blinking
-   A_DIM           Half bright
-   A_BOLD          Extra bright or bold
-   A_PROTECT       Protected mode
-   A_INVIS         Invisible or blank mode
-   A_ALTCHARSET    Alternate character set
-   A_CHARTEXT      Bit-mask to extract a character
-   COLOR_PAIR(n)   Color-pair number n
-   */
-static void normal_color_theme(void)
-{
-	/* automatically add color... */
-#define mkattr(name, attr) do { \
-attributes[name] = attr | COLOR_PAIR(name); } while (0)
-	mkattr(NORMAL, NORMAL);
-	mkattr(MAIN_HEADING, A_BOLD | A_UNDERLINE);
-
-	mkattr(MAIN_MENU_FORE, A_REVERSE);
-	mkattr(MAIN_MENU_BACK, A_NORMAL);
-	mkattr(MAIN_MENU_GREY, A_NORMAL);
-	mkattr(MAIN_MENU_HEADING, A_BOLD);
-	mkattr(MAIN_MENU_BOX, A_NORMAL);
-
-	mkattr(SCROLLWIN_TEXT, A_NORMAL);
-	mkattr(SCROLLWIN_HEADING, A_BOLD);
-	mkattr(SCROLLWIN_BOX, A_BOLD);
-
-	mkattr(DIALOG_TEXT, A_BOLD);
-	mkattr(DIALOG_BOX, A_BOLD);
-	mkattr(DIALOG_MENU_FORE, A_STANDOUT);
-	mkattr(DIALOG_MENU_BACK, A_NORMAL);
-
-	mkattr(INPUT_BOX, A_NORMAL);
-	mkattr(INPUT_HEADING, A_BOLD);
-	mkattr(INPUT_TEXT, A_NORMAL);
-	mkattr(INPUT_FIELD, A_UNDERLINE);
-
-	mkattr(FUNCTION_HIGHLIGHT, A_BOLD);
-	mkattr(FUNCTION_TEXT, A_REVERSE);
-}
-
-static void no_colors_theme(void)
-{
-	/* automatically add highlight, no color */
-#define mkattrn(name, attr) { attributes[name] = attr; }
-
-	mkattrn(NORMAL, NORMAL);
-	mkattrn(MAIN_HEADING, A_BOLD | A_UNDERLINE);
-
-	mkattrn(MAIN_MENU_FORE, A_STANDOUT);
-	mkattrn(MAIN_MENU_BACK, A_NORMAL);
-	mkattrn(MAIN_MENU_GREY, A_NORMAL);
-	mkattrn(MAIN_MENU_HEADING, A_BOLD);
-	mkattrn(MAIN_MENU_BOX, A_NORMAL);
-
-	mkattrn(SCROLLWIN_TEXT, A_NORMAL);
-	mkattrn(SCROLLWIN_HEADING, A_BOLD);
-	mkattrn(SCROLLWIN_BOX, A_BOLD);
-
-	mkattrn(DIALOG_TEXT, A_NORMAL);
-	mkattrn(DIALOG_BOX, A_BOLD);
-	mkattrn(DIALOG_MENU_FORE, A_STANDOUT);
-	mkattrn(DIALOG_MENU_BACK, A_NORMAL);
-
-	mkattrn(INPUT_BOX, A_BOLD);
-	mkattrn(INPUT_HEADING, A_BOLD);
-	mkattrn(INPUT_TEXT, A_NORMAL);
-	mkattrn(INPUT_FIELD, A_UNDERLINE);
-
-	mkattrn(FUNCTION_HIGHLIGHT, A_BOLD);
-	mkattrn(FUNCTION_TEXT, A_REVERSE);
-}
-
-void set_colors()
-{
-	start_color();
-	use_default_colors();
-	set_normal_colors();
-	if (has_colors()) {
-		normal_color_theme();
-	} else {
-		/* give defaults */
-		no_colors_theme();
-	}
-}
-
-
-/* this changes the windows attributes !!! */
-void print_in_middle(WINDOW *win,
-		int starty,
-		int startx,
-		int width,
-		const char *string,
-		chtype color)
-{      int length, x, y;
-	float temp;
-
-
-	if (win == NULL)
-		win = stdscr;
-	getyx(win, y, x);
-	if (startx != 0)
-		x = startx;
-	if (starty != 0)
-		y = starty;
-	if (width == 0)
-		width = 80;
-
-	length = strlen(string);
-	temp = (width - length) / 2;
-	x = startx + (int)temp;
-	(void) wattrset(win, color);
-	mvwprintw(win, y, x, "%s", string);
-	refresh();
-}
-
-int get_line_no(const char *text)
-{
-	int i;
-	int total = 1;
-
-	if (!text)
-		return 0;
-
-	for (i = 0; text[i] != '\0'; i++)
-		if (text[i] == '\n')
-			total++;
-	return total;
-}
-
-const char *get_line(const char *text, int line_no)
-{
-	int i;
-	int lines = 0;
-
-	if (!text)
-		return 0;
-
-	for (i = 0; text[i] != '\0' && lines < line_no; i++)
-		if (text[i] == '\n')
-			lines++;
-	return text+i;
-}
-
-int get_line_length(const char *line)
-{
-	int res = 0;
-	while (*line != '\0' && *line != '\n') {
-		line++;
-		res++;
-	}
-	return res;
-}
-
-/* print all lines to the window. */
-void fill_window(WINDOW *win, const char *text)
-{
-	int x, y;
-	int total_lines = get_line_no(text);
-	int i;
-
-	getmaxyx(win, y, x);
-	/* do not go over end of line */
-	total_lines = min(total_lines, y);
-	for (i = 0; i < total_lines; i++) {
-		char tmp[x+10];
-		const char *line = get_line(text, i);
-		int len = get_line_length(line);
-		strncpy(tmp, line, min(len, x));
-		tmp[len] = '\0';
-		mvwprintw(win, i, 0, "%s", tmp);
-	}
-}
-
-/* get the message, and buttons.
- * each button must be a char*
- * return the selected button
- *
- * this dialog is used for 2 different things:
- * 1) show a text box, no buttons.
- * 2) show a dialog, with horizontal buttons
- */
-int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
-{
-	va_list ap;
-	char *btn;
-	int btns_width = 0;
-	int msg_lines = 0;
-	int msg_width = 0;
-	int total_width;
-	int win_rows = 0;
-	WINDOW *win;
-	WINDOW *msg_win;
-	WINDOW *menu_win;
-	MENU *menu;
-	ITEM *btns[btn_num+1];
-	int i, x, y;
-	int res = -1;
-
-
-	va_start(ap, btn_num);
-	for (i = 0; i < btn_num; i++) {
-		btn = va_arg(ap, char *);
-		btns[i] = new_item(btn, "");
-		btns_width += strlen(btn)+1;
-	}
-	va_end(ap);
-	btns[btn_num] = NULL;
-
-	/* find the widest line of msg: */
-	msg_lines = get_line_no(msg);
-	for (i = 0; i < msg_lines; i++) {
-		const char *line = get_line(msg, i);
-		int len = get_line_length(line);
-		if (msg_width < len)
-			msg_width = len;
-	}
-
-	total_width = max(msg_width, btns_width);
-	/* place dialog in middle of screen */
-	y = (getmaxy(stdscr)-(msg_lines+4))/2;
-	x = (getmaxx(stdscr)-(total_width+4))/2;
-
-
-	/* create the windows */
-	if (btn_num > 0)
-		win_rows = msg_lines+4;
-	else
-		win_rows = msg_lines+2;
-
-	win = newwin(win_rows, total_width+4, y, x);
-	keypad(win, TRUE);
-	menu_win = derwin(win, 1, btns_width, win_rows-2,
-			1+(total_width+2-btns_width)/2);
-	menu = new_menu(btns);
-	msg_win = derwin(win, win_rows-2, msg_width, 1,
-			1+(total_width+2-msg_width)/2);
-
-	set_menu_fore(menu, attributes[DIALOG_MENU_FORE]);
-	set_menu_back(menu, attributes[DIALOG_MENU_BACK]);
-
-	(void) wattrset(win, attributes[DIALOG_BOX]);
-	box(win, 0, 0);
-
-	/* print message */
-	(void) wattrset(msg_win, attributes[DIALOG_TEXT]);
-	fill_window(msg_win, msg);
-
-	set_menu_win(menu, win);
-	set_menu_sub(menu, menu_win);
-	set_menu_format(menu, 1, btn_num);
-	menu_opts_off(menu, O_SHOWDESC);
-	menu_opts_off(menu, O_SHOWMATCH);
-	menu_opts_on(menu, O_ONEVALUE);
-	menu_opts_on(menu, O_NONCYCLIC);
-	set_menu_mark(menu, "");
-	post_menu(menu);
-
-
-	touchwin(win);
-	refresh_all_windows(main_window);
-	while ((res = wgetch(win))) {
-		switch (res) {
-		case KEY_LEFT:
-			menu_driver(menu, REQ_LEFT_ITEM);
-			break;
-		case KEY_RIGHT:
-			menu_driver(menu, REQ_RIGHT_ITEM);
-			break;
-		case 10: /* ENTER */
-		case 27: /* ESCAPE */
-		case ' ':
-		case KEY_F(F_BACK):
-		case KEY_F(F_EXIT):
-			break;
-		}
-		touchwin(win);
-		refresh_all_windows(main_window);
-
-		if (res == 10 || res == ' ') {
-			res = item_index(current_item(menu));
-			break;
-		} else if (res == 27 || res == KEY_F(F_BACK) ||
-				res == KEY_F(F_EXIT)) {
-			res = KEY_EXIT;
-			break;
-		}
-	}
-
-	unpost_menu(menu);
-	free_menu(menu);
-	for (i = 0; i < btn_num; i++)
-		free_item(btns[i]);
-
-	delwin(win);
-	return res;
-}
-
-int dialog_inputbox(WINDOW *main_window,
-		const char *title, const char *prompt,
-		const char *init, char **resultp, int *result_len)
-{
-	int prompt_lines = 0;
-	int prompt_width = 0;
-	WINDOW *win;
-	WINDOW *prompt_win;
-	WINDOW *form_win;
-	PANEL *panel;
-	int i, x, y;
-	int res = -1;
-	int cursor_position = strlen(init);
-	int cursor_form_win;
-	char *result = *resultp;
-
-	if (strlen(init)+1 > *result_len) {
-		*result_len = strlen(init)+1;
-		*resultp = result = realloc(result, *result_len);
-	}
-
-	/* find the widest line of msg: */
-	prompt_lines = get_line_no(prompt);
-	for (i = 0; i < prompt_lines; i++) {
-		const char *line = get_line(prompt, i);
-		int len = get_line_length(line);
-		prompt_width = max(prompt_width, len);
-	}
-
-	if (title)
-		prompt_width = max(prompt_width, strlen(title));
-
-	/* place dialog in middle of screen */
-	y = (getmaxy(stdscr)-(prompt_lines+4))/2;
-	x = (getmaxx(stdscr)-(prompt_width+4))/2;
-
-	strncpy(result, init, *result_len);
-
-	/* create the windows */
-	win = newwin(prompt_lines+6, prompt_width+7, y, x);
-	prompt_win = derwin(win, prompt_lines+1, prompt_width, 2, 2);
-	form_win = derwin(win, 1, prompt_width, prompt_lines+3, 2);
-	keypad(form_win, TRUE);
-
-	(void) wattrset(form_win, attributes[INPUT_FIELD]);
-
-	(void) wattrset(win, attributes[INPUT_BOX]);
-	box(win, 0, 0);
-	(void) wattrset(win, attributes[INPUT_HEADING]);
-	if (title)
-		mvwprintw(win, 0, 3, "%s", title);
-
-	/* print message */
-	(void) wattrset(prompt_win, attributes[INPUT_TEXT]);
-	fill_window(prompt_win, prompt);
-
-	mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
-	cursor_form_win = min(cursor_position, prompt_width-1);
-	mvwprintw(form_win, 0, 0, "%s",
-		  result + cursor_position-cursor_form_win);
-
-	/* create panels */
-	panel = new_panel(win);
-
-	/* show the cursor */
-	curs_set(1);
-
-	touchwin(win);
-	refresh_all_windows(main_window);
-	while ((res = wgetch(form_win))) {
-		int len = strlen(result);
-		switch (res) {
-		case 10: /* ENTER */
-		case 27: /* ESCAPE */
-		case KEY_F(F_HELP):
-		case KEY_F(F_EXIT):
-		case KEY_F(F_BACK):
-			break;
-		case 127:
-		case KEY_BACKSPACE:
-			if (cursor_position > 0) {
-				memmove(&result[cursor_position-1],
-						&result[cursor_position],
-						len-cursor_position+1);
-				cursor_position--;
-				cursor_form_win--;
-				len--;
-			}
-			break;
-		case KEY_DC:
-			if (cursor_position >= 0 && cursor_position < len) {
-				memmove(&result[cursor_position],
-						&result[cursor_position+1],
-						len-cursor_position+1);
-				len--;
-			}
-			break;
-		case KEY_UP:
-		case KEY_RIGHT:
-			if (cursor_position < len) {
-				cursor_position++;
-				cursor_form_win++;
-			}
-			break;
-		case KEY_DOWN:
-		case KEY_LEFT:
-			if (cursor_position > 0) {
-				cursor_position--;
-				cursor_form_win--;
-			}
-			break;
-		case KEY_HOME:
-			cursor_position = 0;
-			cursor_form_win = 0;
-			break;
-		case KEY_END:
-			cursor_position = len;
-			cursor_form_win = min(cursor_position, prompt_width-1);
-			break;
-		default:
-			if ((isgraph(res) || isspace(res))) {
-				/* one for new char, one for '\0' */
-				if (len+2 > *result_len) {
-					*result_len = len+2;
-					*resultp = result = realloc(result,
-								*result_len);
-				}
-				/* insert the char at the proper position */
-				memmove(&result[cursor_position+1],
-						&result[cursor_position],
-						len-cursor_position+1);
-				result[cursor_position] = res;
-				cursor_position++;
-				cursor_form_win++;
-				len++;
-			} else {
-				mvprintw(0, 0, "unknown key: %d\n", res);
-			}
-			break;
-		}
-		if (cursor_form_win < 0)
-			cursor_form_win = 0;
-		else if (cursor_form_win > prompt_width-1)
-			cursor_form_win = prompt_width-1;
-
-		wmove(form_win, 0, 0);
-		wclrtoeol(form_win);
-		mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
-		mvwprintw(form_win, 0, 0, "%s",
-			result + cursor_position-cursor_form_win);
-		wmove(form_win, 0, cursor_form_win);
-		touchwin(win);
-		refresh_all_windows(main_window);
-
-		if (res == 10) {
-			res = 0;
-			break;
-		} else if (res == 27 || res == KEY_F(F_BACK) ||
-				res == KEY_F(F_EXIT)) {
-			res = KEY_EXIT;
-			break;
-		} else if (res == KEY_F(F_HELP)) {
-			res = 1;
-			break;
-		}
-	}
-
-	/* hide the cursor */
-	curs_set(0);
-	del_panel(panel);
-	delwin(prompt_win);
-	delwin(form_win);
-	delwin(win);
-	return res;
-}
-
-/* refresh all windows in the correct order */
-void refresh_all_windows(WINDOW *main_window)
-{
-	update_panels();
-	touchwin(main_window);
-	refresh();
-}
-
-/* layman's scrollable window... */
-void show_scroll_win(WINDOW *main_window,
-		const char *title,
-		const char *text)
-{
-	int res;
-	int total_lines = get_line_no(text);
-	int x, y, lines, columns;
-	int start_x = 0, start_y = 0;
-	int text_lines = 0, text_cols = 0;
-	int total_cols = 0;
-	int win_cols = 0;
-	int win_lines = 0;
-	int i = 0;
-	WINDOW *win;
-	WINDOW *pad;
-	PANEL *panel;
-
-	getmaxyx(stdscr, lines, columns);
-
-	/* find the widest line of msg: */
-	total_lines = get_line_no(text);
-	for (i = 0; i < total_lines; i++) {
-		const char *line = get_line(text, i);
-		int len = get_line_length(line);
-		total_cols = max(total_cols, len+2);
-	}
-
-	/* create the pad */
-	pad = newpad(total_lines+10, total_cols+10);
-	(void) wattrset(pad, attributes[SCROLLWIN_TEXT]);
-	fill_window(pad, text);
-
-	win_lines = min(total_lines+4, lines-2);
-	win_cols = min(total_cols+2, columns-2);
-	text_lines = max(win_lines-4, 0);
-	text_cols = max(win_cols-2, 0);
-
-	/* place window in middle of screen */
-	y = (lines-win_lines)/2;
-	x = (columns-win_cols)/2;
-
-	win = newwin(win_lines, win_cols, y, x);
-	keypad(win, TRUE);
-	/* show the help in the help window, and show the help panel */
-	(void) wattrset(win, attributes[SCROLLWIN_BOX]);
-	box(win, 0, 0);
-	(void) wattrset(win, attributes[SCROLLWIN_HEADING]);
-	mvwprintw(win, 0, 3, " %s ", title);
-	panel = new_panel(win);
-
-	/* handle scrolling */
-	do {
-
-		copywin(pad, win, start_y, start_x, 2, 2, text_lines,
-				text_cols, 0);
-		print_in_middle(win,
-				text_lines+2,
-				0,
-				text_cols,
-				"<OK>",
-				attributes[DIALOG_MENU_FORE]);
-		wrefresh(win);
-
-		res = wgetch(win);
-		switch (res) {
-		case KEY_NPAGE:
-		case ' ':
-		case 'd':
-			start_y += text_lines-2;
-			break;
-		case KEY_PPAGE:
-		case 'u':
-			start_y -= text_lines+2;
-			break;
-		case KEY_HOME:
-			start_y = 0;
-			break;
-		case KEY_END:
-			start_y = total_lines-text_lines;
-			break;
-		case KEY_DOWN:
-		case 'j':
-			start_y++;
-			break;
-		case KEY_UP:
-		case 'k':
-			start_y--;
-			break;
-		case KEY_LEFT:
-		case 'h':
-			start_x--;
-			break;
-		case KEY_RIGHT:
-		case 'l':
-			start_x++;
-			break;
-		}
-		if (res == 10 || res == 27 || res == 'q' ||
-			res == KEY_F(F_HELP) || res == KEY_F(F_BACK) ||
-			res == KEY_F(F_EXIT))
-			break;
-		if (start_y < 0)
-			start_y = 0;
-		if (start_y >= total_lines-text_lines)
-			start_y = total_lines-text_lines;
-		if (start_x < 0)
-			start_x = 0;
-		if (start_x >= total_cols-text_cols)
-			start_x = total_cols-text_cols;
-	} while (res);
-
-	del_panel(panel);
-	delwin(win);
-	refresh_all_windows(main_window);
-}
diff --git a/support/kconfig/nconf.h b/support/kconfig/nconf.h
deleted file mode 100644
index 0d526170..00000000
--- a/support/kconfig/nconf.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
- *
- * Derived from menuconfig.
- *
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <locale.h>
-#include <curses.h>
-#include <menu.h>
-#include <panel.h>
-#include <form.h>
-
-#include <stdio.h>
-#include <time.h>
-#include <sys/time.h>
-
-#include "ncurses.h"
-
-#define max(a, b) ({\
-		typeof(a) _a = a;\
-		typeof(b) _b = b;\
-		_a > _b ? _a : _b; })
-
-#define min(a, b) ({\
-		typeof(a) _a = a;\
-		typeof(b) _b = b;\
-		_a < _b ? _a : _b; })
-
-typedef enum {
-	NORMAL = 1,
-	MAIN_HEADING,
-	MAIN_MENU_BOX,
-	MAIN_MENU_FORE,
-	MAIN_MENU_BACK,
-	MAIN_MENU_GREY,
-	MAIN_MENU_HEADING,
-	SCROLLWIN_TEXT,
-	SCROLLWIN_HEADING,
-	SCROLLWIN_BOX,
-	DIALOG_TEXT,
-	DIALOG_MENU_FORE,
-	DIALOG_MENU_BACK,
-	DIALOG_BOX,
-	INPUT_BOX,
-	INPUT_HEADING,
-	INPUT_TEXT,
-	INPUT_FIELD,
-	FUNCTION_TEXT,
-	FUNCTION_HIGHLIGHT,
-	ATTR_MAX
-} attributes_t;
-extern attributes_t attributes[];
-
-typedef enum {
-	F_HELP = 1,
-	F_SYMBOL = 2,
-	F_INSTS = 3,
-	F_CONF = 4,
-	F_BACK = 5,
-	F_SAVE = 6,
-	F_LOAD = 7,
-	F_SEARCH = 8,
-	F_EXIT = 9,
-} function_key;
-
-void set_colors(void);
-
-/* this changes the windows attributes !!! */
-void print_in_middle(WINDOW *win,
-		int starty,
-		int startx,
-		int width,
-		const char *string,
-		chtype color);
-int get_line_length(const char *line);
-int get_line_no(const char *text);
-const char *get_line(const char *text, int line_no);
-void fill_window(WINDOW *win, const char *text);
-int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...);
-int dialog_inputbox(WINDOW *main_window,
-		const char *title, const char *prompt,
-		const char *init, char **resultp, int *result_len);
-void refresh_all_windows(WINDOW *main_window);
-void show_scroll_win(WINDOW *main_window,
-		const char *title,
-		const char *text);
diff --git a/support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch b/support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch
deleted file mode 100644
index eccc68cf..00000000
--- a/support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch
+++ /dev/null
@@ -1,98 +0,0 @@
----
- confdata.c          |    4 ++--
- gconf.glade         |    2 +-
- mconf.c             |    4 ++--
- zconf.tab.c_shipped |    2 +-
- zconf.y             |    2 +-
- 5 files changed, 7 insertions(+), 7 deletions(-)
-
-Index: kconfig/gconf.glade
-===================================================================
---- kconfig.orig/gconf.glade	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/gconf.glade	2013-12-27 22:14:32.387630158 +0100
-@@ -4,7 +4,7 @@
- 
- <widget class="GtkWindow" id="window1">
-   <property name="visible">True</property>
--  <property name="title" translatable="yes">Gtk Kernel Configurator</property>
-+  <property name="title" translatable="yes">Gtk Unikraft Configurator</property>
-   <property name="type">GTK_WINDOW_TOPLEVEL</property>
-   <property name="window_position">GTK_WIN_POS_NONE</property>
-   <property name="modal">False</property>
-Index: kconfig/mconf.c
-===================================================================
---- kconfig.orig/mconf.c	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/mconf.c	2013-12-27 22:14:42.179244153 +0100
-@@ -176,9 +176,9 @@
- 	"Arrow keys navigate the menu.  "
- 	"<Enter> selects submenus ---> (or empty submenus ----).  "
- 	"Highlighted letters are hotkeys.  "
--	"Pressing <Y> includes, <N> excludes, <M> modularizes features.  "
-+	"Pressing <Y> selectes a feature, while <N> will exclude a feature.  "
- 	"Press <Esc><Esc> to exit, <?> for Help, </> for Search.  "
--	"Legend: [*] built-in  [ ] excluded  <M> module  < > module capable"),
-+	"Legend: [*] feature is selected  [ ] feature is excluded"),
- radiolist_instructions[] = N_(
- 	"Use the arrow keys to navigate this window or "
- 	"press the hotkey of the item you wish to select "
-@@ -959,7 +959,7 @@
- 	if (conf_get_changed())
- 		res = dialog_yesno(NULL,
- 				   _("Do you wish to save your new configuration?\n"
--				     "(Press <ESC><ESC> to continue kernel configuration.)"),
-+				     "(Press <ESC><ESC> to continue Unikraft configuration.)"),
- 				   6, 60);
- 	else
- 		res = -1;
-Index: kconfig/zconf.tab.c_shipped
-===================================================================
---- kconfig.orig/zconf.tab.c_shipped	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/zconf.tab.c_shipped	2013-12-27 22:14:32.391630000 +0100
-@@ -2297,7 +2297,7 @@
- 
- 	sym_init();
- 	_menu_init();
--	rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
-+	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
- 
- 	if (getenv("ZCONF_DEBUG"))
- 		zconfdebug = 1;
-Index: kconfig/zconf.y
-===================================================================
---- kconfig.orig/zconf.y	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/zconf.y	2013-12-27 22:14:32.391630000 +0100
-@@ -493,7 +493,7 @@
- 
- 	sym_init();
- 	_menu_init();
--	rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
-+	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
- 
- 	if (getenv("ZCONF_DEBUG"))
- 		zconfdebug = 1;
-Index: kconfig/confdata.c
-===================================================================
---- kconfig.orig/confdata.c	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/confdata.c	2013-12-27 22:14:32.391630000 +0100
-@@ -63,7 +63,7 @@
- 
- const char *conf_get_configname(void)
- {
--	char *name = getenv("KCONFIG_CONFIG");
-+	char *name = getenv("UC_CONFIG");
- 
- 	return name ? name : ".config";
- }
-Index: kconfig/qconf.cc
-===================================================================
---- kconfig.orig/qconf.cc	2013-12-27 22:12:15.825013567 +0100
-+++ kconfig/qconf.cc	2013-12-27 22:14:57.826627300 +0100
-@@ -70,7 +70,7 @@
- }
- 
- ConfigSettings::ConfigSettings()
--	: QSettings("kernel.org", "qconf")
-+	: QSettings("cnp.neclab.eu", "qconf")
- {
- }
- 
diff --git a/support/kconfig/patches/06-br-build-system-integration.patch b/support/kconfig/patches/06-br-build-system-integration.patch
deleted file mode 100644
index 3faa39ed..00000000
--- a/support/kconfig/patches/06-br-build-system-integration.patch
+++ /dev/null
@@ -1,35 +0,0 @@
----
- Makefile |    8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-Index: b/Makefile
-===================================================================
---- a/Makefile
-+++ b/Makefile
-@@ -159,11 +159,11 @@
- 
- hostprogs-y := conf
- 
--ifeq ($(MAKECMDGOALS),nconfig)
-+ifeq ($(MAKECMDGOALS),nconf)
- 	hostprogs-y += nconf
- endif
- 
--ifeq ($(MAKECMDGOALS),menuconfig)
-+ifeq ($(MAKECMDGOALS),mconf)
- 	hostprogs-y += mconf
- endif
- 
-@@ -171,10 +171,10 @@
- 	hostprogs-y += kxgettext
- endif
- 
--ifeq ($(MAKECMDGOALS),xconfig)
-+ifeq ($(MAKECMDGOALS),qconf)
- 	qconf-target := 1
- endif
--ifeq ($(MAKECMDGOALS),gconfig)
-+ifeq ($(MAKECMDGOALS),gconf)
- 	gconf-target := 1
- endif
- 
diff --git a/support/kconfig/patches/10-br-build-system.patch b/support/kconfig/patches/10-br-build-system.patch
deleted file mode 100644
index be6fda07..00000000
--- a/support/kconfig/patches/10-br-build-system.patch
+++ /dev/null
@@ -1,80 +0,0 @@
----
- Makefile.br |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- foo.h       |   12 ++++++++++++
- 2 files changed, 65 insertions(+)
-
-Index: b/Makefile.br
-===================================================================
---- /dev/null
-+++ b/Makefile.br
-@@ -0,0 +1,53 @@
-+src := .
-+top_srcdir=../../
-+top_builddir=../../
-+srctree := .
-+obj ?= .
-+
-+include Makefile
-+#HOSTCFLAGS+=-Dinline="" -include foo.h
-+-include $(obj)/.depend
-+$(obj)/.depend: $(wildcard *.h *.c)
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) -MM *.c > $@ 2>/dev/null || :
-+
-+__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
-+host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
-+host-cmulti := $(foreach m,$(__hostprogs),\
-+           $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
-+host-cxxmulti := $(foreach m,$(__hostprogs),\
-+           $(if $($(m)-cxxobjs),$(m),$(if $($(m)-objs),)))
-+host-cobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-objs))))
-+host-cxxobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-cxxobjs))))
-+
-+HOST_EXTRACFLAGS += -I$(obj) -DCONFIG_=\"\"
-+
-+$(host-csingle): %: %.c
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $< -o $(obj)/$@
-+
-+$(host-cmulti): %: $(host-cobjs) $(host-cshlib)
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-+
-+$(host-cxxmulti): %: $(host-cxxobjs) $(host-cobjs) $(host-cshlib)
-+	$(HOSTCXX) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs) $($(@F)-cxxobjs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-+
-+$(obj)/%.o: %.c
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-+
-+$(obj)/%.o: $(obj)/%.c
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-+
-+$(obj)/%.o: %.cc
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$(@F)) -c $< -o $@
-+
-+$(obj)/%:: $(src)/%_shipped
-+	$(Q)cat $< > $@
-+
-+clean:
-+	$(Q)rm -f $(addprefix $(obj)/,$(clean-files))
-+distclean: clean
-+	$(Q)rm -f $(addprefix $(obj)/,$(lxdialog) $(conf-objs) $(mconf-objs) $(kxgettext-objs) \
-+		$(hostprogs-y) $(qconf-cxxobjs) $(qconf-objs) $(gconf-objs) \
-+		mconf .depend)
-+
-+FORCE:
-+.PHONY: FORCE clean distclean
-Index: b/foo.h
-===================================================================
---- /dev/null
-+++ b/foo.h
-@@ -0,0 +1,12 @@
-+#ifndef __KCONFIG_FOO_H
-+#define __KCONFIG_FOO_H
-+
-+#ifndef __APPLE__
-+#include <features.h>
-+#endif
-+#include <limits.h>
-+
-+#ifndef PATH_MAX
-+#define PATH_MAX 1024
-+#endif
-+#endif /* __KCONFIG_FOO_H */
diff --git a/support/kconfig/patches/11-use-mktemp-for-lxdialog.patch b/support/kconfig/patches/11-use-mktemp-for-lxdialog.patch
deleted file mode 100644
index b38af262..00000000
--- a/support/kconfig/patches/11-use-mktemp-for-lxdialog.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- lxdialog/check-lxdialog.sh |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: b/lxdialog/check-lxdialog.sh
-===================================================================
---- a/lxdialog/check-lxdialog.sh
-+++ b/lxdialog/check-lxdialog.sh
-@@ -36,7 +36,7 @@
- }
- 
- # Temp file, try to clean up after us
--tmp=.lxdialog.tmp
-+tmp=$(mktemp)
- trap "rm -f $tmp" 0 1 2 3 15
- 
- # Check if we can link to ncurses
diff --git a/support/kconfig/patches/12-fix-glade-file-path.patch b/support/kconfig/patches/12-fix-glade-file-path.patch
deleted file mode 100644
index a5777da3..00000000
--- a/support/kconfig/patches/12-fix-glade-file-path.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- gconf.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: b/gconf.c
-===================================================================
---- a/gconf.c
-+++ b/gconf.c
-@@ -1486,7 +1486,7 @@
- 	/* Determine GUI path */
- 	env = getenv(SRCTREE);
- 	if (env)
--		glade_file = g_strconcat(env, "/scripts/kconfig/gconf.glade", NULL);
-+		glade_file = g_strconcat(env, "/support/kconfig/gconf.glade", NULL);
- 	else if (av[0][0] == '/')
- 		glade_file = g_strconcat(av[0], ".glade", NULL);
- 	else
diff --git a/support/kconfig/patches/14-support-out-of-tree-config.patch b/support/kconfig/patches/14-support-out-of-tree-config.patch
deleted file mode 100644
index ec3134f9..00000000
--- a/support/kconfig/patches/14-support-out-of-tree-config.patch
+++ /dev/null
@@ -1,207 +0,0 @@
----
- conf.c     |    1 
- confdata.c |   62 ++++++++++++++++++++++++++++++++++++++++++++++---------------
- util.c     |   16 +++++++++++++--
- 3 files changed, 61 insertions(+), 18 deletions(-)
-
-Index: b/conf.c
-===================================================================
---- a/conf.c
-+++ b/conf.c
-@@ -558,7 +558,6 @@
- 	}
- 	name = av[optind];
- 	conf_parse(name);
--	//zconfdump(stdout);
- 	if (sync_kconfig) {
- 		name = conf_get_configname();
- 		if (stat(name, &tmpstat)) {
-Index: b/confdata.c
-===================================================================
---- a/confdata.c
-+++ b/confdata.c
-@@ -13,6 +13,7 @@
- #include <string.h>
- #include <time.h>
- #include <unistd.h>
-+#include <libgen.h>
- 
- #include "lkc.h"
- 
-@@ -70,9 +71,7 @@
- 
- const char *conf_get_autoconfig_name(void)
- {
--	char *name = getenv("KCONFIG_AUTOCONFIG");
--
--	return name ? name : "include/config/auto.conf";
-+	return getenv("KCONFIG_AUTOCONFIG");
- }
- 
- static char *conf_expand_value(const char *in)
-@@ -742,6 +741,9 @@
- 	char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
- 	char *env;
- 
-+	if (!name)
-+		name = conf_get_configname();
-+
- 	dirname[0] = 0;
- 	if (name && name[0]) {
- 		struct stat st;
-@@ -836,6 +838,7 @@
- {
- 	const char *name;
- 	char path[PATH_MAX+1];
-+	char *opwd, *dir, *_name;
- 	char *s, *d, c;
- 	struct symbol *sym;
- 	struct stat sb;
-@@ -844,8 +847,20 @@
- 	name = conf_get_autoconfig_name();
- 	conf_read_simple(name, S_DEF_AUTO);
- 
--	if (chdir("include/config"))
--		return 1;
-+	opwd = malloc(256);
-+	_name = strdup(name);
-+	if (opwd == NULL || _name == NULL)
-+ 		return 1;
-+	opwd = getcwd(opwd, 256);
-+	dir = dirname(_name);
-+	if (dir == NULL) {
-+		res = 1;
-+		goto err;
-+	}
-+	if (chdir(dir)) {
-+		res = 1;
-+		goto err;
-+	}
- 
- 	res = 0;
- 	for_all_symbols(i, sym) {
-@@ -938,9 +953,11 @@
- 		close(fd);
- 	}
- out:
--	if (chdir("../.."))
--		return 1;
--
-+	if (chdir(opwd))
-+		res = 1;
-+err:
-+	free(opwd);
-+	free(_name);
- 	return res;
- }
- 
-@@ -950,25 +967,38 @@
- 	const char *name;
- 	FILE *out, *tristate, *out_h;
- 	int i;
-+	char dir[PATH_MAX+1], buf[PATH_MAX+1];
-+	char *s;
-+
-+	strcpy(dir, conf_get_configname());
-+	s = strrchr(dir, '/');
-+	if (s)
-+		s[1] = 0;
-+	else
-+		dir[0] = 0;
- 
- 	sym_clear_all_valid();
- 
--	file_write_dep("include/config/auto.conf.cmd");
-+	sprintf(buf, "%s.config.cmd", dir);
-+	file_write_dep(buf);
- 
- 	if (conf_split_config())
- 		return 1;
- 
--	out = fopen(".tmpconfig", "w");
-+	sprintf(buf, "%s.tmpconfig", dir);
-+	out = fopen(buf, "w");
- 	if (!out)
- 		return 1;
- 
--	tristate = fopen(".tmpconfig_tristate", "w");
-+	sprintf(buf, "%s.tmpconfig_tristate", dir);
-+	tristate = fopen(buf, "w");
- 	if (!tristate) {
- 		fclose(out);
- 		return 1;
- 	}
- 
--	out_h = fopen(".tmpconfig.h", "w");
-+	sprintf(buf, "%s.tmpconfig.h", dir);
-+	out_h = fopen(buf, "w");
- 	if (!out_h) {
- 		fclose(out);
- 		fclose(tristate);
-@@ -1000,19 +1030,22 @@
- 	name = getenv("KCONFIG_AUTOHEADER");
- 	if (!name)
- 		name = "include/generated/autoconf.h";
--	if (rename(".tmpconfig.h", name))
-+	sprintf(buf, "%s.tmpconfig.h", dir);
-+	if (rename(buf, name))
- 		return 1;
- 	name = getenv("KCONFIG_TRISTATE");
- 	if (!name)
- 		name = "include/config/tristate.conf";
--	if (rename(".tmpconfig_tristate", name))
-+	sprintf(buf, "%s.tmpconfig_tristate", dir);
-+	if (rename(buf, name))
- 		return 1;
- 	name = conf_get_autoconfig_name();
- 	/*
- 	 * This must be the last step, kbuild has a dependency on auto.conf
- 	 * and this marks the successful completion of the previous steps.
- 	 */
--	if (rename(".tmpconfig", name))
-+	sprintf(buf, "%s.tmpconfig", dir);
-+	if (rename(buf, name))
- 		return 1;
- 
- 	return 0;
-Index: b/util.c
-===================================================================
---- a/util.c
-+++ b/util.c
-@@ -34,6 +34,8 @@
- /* write a dependency file as used by kbuild to track dependencies */
- int file_write_dep(const char *name)
- {
-+	char *str;
-+	char buf[PATH_MAX+1], buf2[PATH_MAX+1], dir[PATH_MAX+1];
- 	struct symbol *sym, *env_sym;
- 	struct expr *e;
- 	struct file *file;
-@@ -41,7 +43,16 @@
- 
- 	if (!name)
- 		name = ".kconfig.d";
--	out = fopen("..config.tmp", "w");
-+
-+	strcpy(dir, conf_get_configname());
-+	str = strrchr(dir, '/');
-+	if (str)
-+		str[1] = 0;
-+	else
-+		dir[0] = 0;
-+
-+	sprintf(buf, "%s..config.tmp", dir);
-+	out = fopen(buf, "w");
- 	if (!out)
- 		return 1;
- 	fprintf(out, "deps_config := \\\n");
-@@ -72,7 +83,8 @@
- 
- 	fprintf(out, "\n$(deps_config): ;\n");
- 	fclose(out);
--	rename("..config.tmp", name);
-+	sprintf(buf2, "%s%s", dir, name);
-+	rename(buf, buf2);
- 	return 0;
- }
- 
diff --git a/support/kconfig/patches/15-fix-qconf-moc-rule.patch b/support/kconfig/patches/15-fix-qconf-moc-rule.patch
deleted file mode 100644
index c1848d76..00000000
--- a/support/kconfig/patches/15-fix-qconf-moc-rule.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Fix the rule that generates the .moc file
-
-The Linux kernel has a "cmd" make function, but we don't have it in
-Buildroot, so we need to adjust this rule.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
-Index: b/Makefile
-===================================================================
---- a/Makefile
-+++ b/Makefile
-@@ -309,11 +309,8 @@
- 
- $(obj)/qconf.o: $(obj)/qconf.moc
- 
--quiet_cmd_moc = MOC     $@
--      cmd_moc = $(KC_QT_MOC) -i $< -o $@
--
- $(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
--	$(call cmd,moc)
-+	$(KC_QT_MOC) -i $< -o $@
- 
- # Extract gconf menu items for I18N support
- $(obj)/gconf.glade.h: $(obj)/gconf.glade
diff --git a/support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch b/support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
deleted file mode 100644
index 1eb48ef9..00000000
--- a/support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From be8af2d54a66911693eddc556e4f7a866670082b Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= <bjorn.forsman@gmail.com>
-Date: Sun, 14 Sep 2014 12:57:50 +0200
-Subject: [PATCH] kconfig/lxdialog: get ncurses CFLAGS with pkg-config
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This makes "make menuconfig" also work on systems where ncurses is not
-installed in a standard location (such as on NixOS).
-
-This patch changes ccflags() so that it tries pkg-config first, and only
-if pkg-config fails does it go back to the fallback/manual checks. This
-is the same algorithm that ldflags() already uses.
-
-Signed-off-by: Bjørn Forsman <bjorn.forsman@gmail.com>
-Signed-off-by: Michal Marek <mmarek@suse.cz>
----
-[This patch is already applied upstream (is part of linux v3.18):
-https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=be8af2d54a66911693eddc556e4f7a866670082b
-
-I'm adding this instead of doing a full upstream kconfig sync because
-there was a conflict in one of the Buildroot kconfig patches (against
-linux 3.18-rc1), which I was unable to resolve. Just drop this patch next time
-Buildroot kconfig is synced against upstream.
-]
-
- scripts/kconfig/lxdialog/check-lxdialog.sh | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
-index 9d2a4c5..5075ebf 100755
---- a/lxdialog/check-lxdialog.sh
-+++ b/lxdialog/check-lxdialog.sh
-@@ -21,7 +21,11 @@ ldflags()
- # Where is ncurses.h?
- ccflags()
- {
--	if [ -f /usr/include/ncursesw/curses.h ]; then
-+	if pkg-config --cflags ncursesw 2>/dev/null; then
-+		echo '-DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1'
-+	elif pkg-config --cflags ncurses 2>/dev/null; then
-+		echo '-DCURSES_LOC="<ncurses.h>"'
-+	elif [ -f /usr/include/ncursesw/curses.h ]; then
- 		echo '-I/usr/include/ncursesw -DCURSES_LOC="<curses.h>"'
- 		echo ' -DNCURSES_WIDECHAR=1'
- 	elif [ -f /usr/include/ncurses/ncurses.h ]; then
--- 
-2.1.3
-
diff --git a/support/kconfig/patches/series b/support/kconfig/patches/series
deleted file mode 100644
index 47f1b8e0..00000000
--- a/support/kconfig/patches/series
+++ /dev/null
@@ -1,8 +0,0 @@
-01-kconfig-kernel-to-buildroot.patch
-06-br-build-system-integration.patch
-10-br-build-system.patch
-11-use-mktemp-for-lxdialog.patch
-12-fix-glade-file-path.patch
-14-support-out-of-tree-config.patch
-15-fix-qconf-moc-rule.patch
-17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
diff --git a/support/kconfig/qconf.cc b/support/kconfig/qconf.cc
deleted file mode 100644
index 70ef5c06..00000000
--- a/support/kconfig/qconf.cc
+++ /dev/null
@@ -1,1795 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <qglobal.h>
-
-#if QT_VERSION < 0x040000
-#include <stddef.h>
-#include <qmainwindow.h>
-#include <qvbox.h>
-#include <qvaluelist.h>
-#include <qtextbrowser.h>
-#include <qaction.h>
-#include <qheader.h>
-#include <qfiledialog.h>
-#include <qdragobject.h>
-#include <qpopupmenu.h>
-#else
-#include <q3mainwindow.h>
-#include <q3vbox.h>
-#include <q3valuelist.h>
-#include <q3textbrowser.h>
-#include <q3action.h>
-#include <q3header.h>
-#include <q3filedialog.h>
-#include <q3dragobject.h>
-#include <q3popupmenu.h>
-#endif
-
-#include <qapplication.h>
-#include <qdesktopwidget.h>
-#include <qtoolbar.h>
-#include <qlayout.h>
-#include <qsplitter.h>
-#include <qlineedit.h>
-#include <qlabel.h>
-#include <qpushbutton.h>
-#include <qmenubar.h>
-#include <qmessagebox.h>
-#include <qregexp.h>
-#include <qevent.h>
-
-#include <stdlib.h>
-
-#include "lkc.h"
-#include "qconf.h"
-
-#include "qconf.moc"
-#include "images.c"
-
-#ifdef _
-# undef _
-# define _ qgettext
-#endif
-
-static QApplication *configApp;
-static ConfigSettings *configSettings;
-
-Q3Action *ConfigMainWindow::saveAction;
-
-static inline QString qgettext(const char* str)
-{
-	return QString::fromLocal8Bit(gettext(str));
-}
-
-static inline QString qgettext(const QString& str)
-{
-	return QString::fromLocal8Bit(gettext(str.latin1()));
-}
-
-ConfigSettings::ConfigSettings()
-	: QSettings("cnp.neclab.eu", "qconf")
-{
-}
-
-/**
- * Reads a list of integer values from the application settings.
- */
-Q3ValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
-{
-	Q3ValueList<int> result;
-	QStringList entryList = readListEntry(key, ok);
-	QStringList::Iterator it;
-
-	for (it = entryList.begin(); it != entryList.end(); ++it)
-		result.push_back((*it).toInt());
-
-	return result;
-}
-
-/**
- * Writes a list of integer values to the application settings.
- */
-bool ConfigSettings::writeSizes(const QString& key, const Q3ValueList<int>& value)
-{
-	QStringList stringList;
-	Q3ValueList<int>::ConstIterator it;
-
-	for (it = value.begin(); it != value.end(); ++it)
-		stringList.push_back(QString::number(*it));
-	return writeEntry(key, stringList);
-}
-
-
-/*
- * set the new data
- * TODO check the value
- */
-void ConfigItem::okRename(int col)
-{
-	Parent::okRename(col);
-	sym_set_string_value(menu->sym, text(dataColIdx).latin1());
-	listView()->updateList(this);
-}
-
-/*
- * update the displayed of a menu entry
- */
-void ConfigItem::updateMenu(void)
-{
-	ConfigList* list;
-	struct symbol* sym;
-	struct property *prop;
-	QString prompt;
-	int type;
-	tristate expr;
-
-	list = listView();
-	if (goParent) {
-		setPixmap(promptColIdx, list->menuBackPix);
-		prompt = "..";
-		goto set_prompt;
-	}
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	prompt = _(menu_get_prompt(menu));
-
-	if (prop) switch (prop->type) {
-	case P_MENU:
-		if (list->mode == singleMode || list->mode == symbolMode) {
-			/* a menuconfig entry is displayed differently
-			 * depending whether it's at the view root or a child.
-			 */
-			if (sym && list->rootEntry == menu)
-				break;
-			setPixmap(promptColIdx, list->menuPix);
-		} else {
-			if (sym)
-				break;
-			setPixmap(promptColIdx, 0);
-		}
-		goto set_prompt;
-	case P_COMMENT:
-		setPixmap(promptColIdx, 0);
-		goto set_prompt;
-	default:
-		;
-	}
-	if (!sym)
-		goto set_prompt;
-
-	setText(nameColIdx, QString::fromLocal8Bit(sym->name));
-
-	type = sym_get_type(sym);
-	switch (type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		char ch;
-
-		if (!sym_is_changable(sym) && list->optMode == normalOpt) {
-			setPixmap(promptColIdx, 0);
-			setText(noColIdx, QString::null);
-			setText(modColIdx, QString::null);
-			setText(yesColIdx, QString::null);
-			break;
-		}
-		expr = sym_get_tristate_value(sym);
-		switch (expr) {
-		case yes:
-			if (sym_is_choice_value(sym) && type == S_BOOLEAN)
-				setPixmap(promptColIdx, list->choiceYesPix);
-			else
-				setPixmap(promptColIdx, list->symbolYesPix);
-			setText(yesColIdx, "Y");
-			ch = 'Y';
-			break;
-		case mod:
-			setPixmap(promptColIdx, list->symbolModPix);
-			setText(modColIdx, "M");
-			ch = 'M';
-			break;
-		default:
-			if (sym_is_choice_value(sym) && type == S_BOOLEAN)
-				setPixmap(promptColIdx, list->choiceNoPix);
-			else
-				setPixmap(promptColIdx, list->symbolNoPix);
-			setText(noColIdx, "N");
-			ch = 'N';
-			break;
-		}
-		if (expr != no)
-			setText(noColIdx, sym_tristate_within_range(sym, no) ? "_" : 0);
-		if (expr != mod)
-			setText(modColIdx, sym_tristate_within_range(sym, mod) ? "_" : 0);
-		if (expr != yes)
-			setText(yesColIdx, sym_tristate_within_range(sym, yes) ? "_" : 0);
-
-		setText(dataColIdx, QChar(ch));
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		const char* data;
-
-		data = sym_get_string_value(sym);
-
-		int i = list->mapIdx(dataColIdx);
-		if (i >= 0)
-			setRenameEnabled(i, TRUE);
-		setText(dataColIdx, data);
-		if (type == S_STRING)
-			prompt = QString("%1: %2").arg(prompt).arg(data);
-		else
-			prompt = QString("(%2) %1").arg(prompt).arg(data);
-		break;
-	}
-	if (!sym_has_value(sym) && visible)
-		prompt += _(" (NEW)");
-set_prompt:
-	setText(promptColIdx, prompt);
-}
-
-void ConfigItem::testUpdateMenu(bool v)
-{
-	ConfigItem* i;
-
-	visible = v;
-	if (!menu)
-		return;
-
-	sym_calc_value(menu->sym);
-	if (menu->flags & MENU_CHANGED) {
-		/* the menu entry changed, so update all list items */
-		menu->flags &= ~MENU_CHANGED;
-		for (i = (ConfigItem*)menu->data; i; i = i->nextItem)
-			i->updateMenu();
-	} else if (listView()->updateAll)
-		updateMenu();
-}
-
-void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align)
-{
-	ConfigList* list = listView();
-
-	if (visible) {
-		if (isSelected() && !list->hasFocus() && list->mode == menuMode)
-			Parent::paintCell(p, list->inactivedColorGroup, column, width, align);
-		else
-			Parent::paintCell(p, cg, column, width, align);
-	} else
-		Parent::paintCell(p, list->disabledColorGroup, column, width, align);
-}
-
-/*
- * construct a menu entry
- */
-void ConfigItem::init(void)
-{
-	if (menu) {
-		ConfigList* list = listView();
-		nextItem = (ConfigItem*)menu->data;
-		menu->data = this;
-
-		if (list->mode != fullMode)
-			setOpen(TRUE);
-		sym_calc_value(menu->sym);
-	}
-	updateMenu();
-}
-
-/*
- * destruct a menu entry
- */
-ConfigItem::~ConfigItem(void)
-{
-	if (menu) {
-		ConfigItem** ip = (ConfigItem**)&menu->data;
-		for (; *ip; ip = &(*ip)->nextItem) {
-			if (*ip == this) {
-				*ip = nextItem;
-				break;
-			}
-		}
-	}
-}
-
-ConfigLineEdit::ConfigLineEdit(ConfigView* parent)
-	: Parent(parent)
-{
-	connect(this, SIGNAL(lostFocus()), SLOT(hide()));
-}
-
-void ConfigLineEdit::show(ConfigItem* i)
-{
-	item = i;
-	if (sym_get_string_value(item->menu->sym))
-		setText(QString::fromLocal8Bit(sym_get_string_value(item->menu->sym)));
-	else
-		setText(QString::null);
-	Parent::show();
-	setFocus();
-}
-
-void ConfigLineEdit::keyPressEvent(QKeyEvent* e)
-{
-	switch (e->key()) {
-	case Qt::Key_Escape:
-		break;
-	case Qt::Key_Return:
-	case Qt::Key_Enter:
-		sym_set_string_value(item->menu->sym, text().latin1());
-		parent()->updateList(item);
-		break;
-	default:
-		Parent::keyPressEvent(e);
-		return;
-	}
-	e->accept();
-	parent()->list->setFocus();
-	hide();
-}
-
-ConfigList::ConfigList(ConfigView* p, const char *name)
-	: Parent(p, name),
-	  updateAll(false),
-	  symbolYesPix(xpm_symbol_yes), symbolModPix(xpm_symbol_mod), symbolNoPix(xpm_symbol_no),
-	  choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no),
-	  menuPix(xpm_menu), menuInvPix(xpm_menu_inv), menuBackPix(xpm_menuback), voidPix(xpm_void),
-	  showName(false), showRange(false), showData(false), optMode(normalOpt),
-	  rootEntry(0), headerPopup(0)
-{
-	int i;
-
-	setSorting(-1);
-	setRootIsDecorated(TRUE);
-	disabledColorGroup = palette().active();
-	disabledColorGroup.setColor(QColorGroup::Text, palette().disabled().text());
-	inactivedColorGroup = palette().active();
-	inactivedColorGroup.setColor(QColorGroup::Highlight, palette().disabled().highlight());
-
-	connect(this, SIGNAL(selectionChanged(void)),
-		SLOT(updateSelection(void)));
-
-	if (name) {
-		configSettings->beginGroup(name);
-		showName = configSettings->readBoolEntry("/showName", false);
-		showRange = configSettings->readBoolEntry("/showRange", false);
-		showData = configSettings->readBoolEntry("/showData", false);
-		optMode = (enum optionMode)configSettings->readNumEntry("/optionMode", false);
-		configSettings->endGroup();
-		connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
-	}
-
-	for (i = 0; i < colNr; i++)
-		colMap[i] = colRevMap[i] = -1;
-	addColumn(promptColIdx, _("Option"));
-
-	reinit();
-}
-
-bool ConfigList::menuSkip(struct menu *menu)
-{
-	if (optMode == normalOpt && menu_is_visible(menu))
-		return false;
-	if (optMode == promptOpt && menu_has_prompt(menu))
-		return false;
-	if (optMode == allOpt)
-		return false;
-	return true;
-}
-
-void ConfigList::reinit(void)
-{
-	removeColumn(dataColIdx);
-	removeColumn(yesColIdx);
-	removeColumn(modColIdx);
-	removeColumn(noColIdx);
-	removeColumn(nameColIdx);
-
-	if (showName)
-		addColumn(nameColIdx, _("Name"));
-	if (showRange) {
-		addColumn(noColIdx, "N");
-		addColumn(modColIdx, "M");
-		addColumn(yesColIdx, "Y");
-	}
-	if (showData)
-		addColumn(dataColIdx, _("Value"));
-
-	updateListAll();
-}
-
-void ConfigList::saveSettings(void)
-{
-	if (name()) {
-		configSettings->beginGroup(name());
-		configSettings->writeEntry("/showName", showName);
-		configSettings->writeEntry("/showRange", showRange);
-		configSettings->writeEntry("/showData", showData);
-		configSettings->writeEntry("/optionMode", (int)optMode);
-		configSettings->endGroup();
-	}
-}
-
-ConfigItem* ConfigList::findConfigItem(struct menu *menu)
-{
-	ConfigItem* item = (ConfigItem*)menu->data;
-
-	for (; item; item = item->nextItem) {
-		if (this == item->listView())
-			break;
-	}
-
-	return item;
-}
-
-void ConfigList::updateSelection(void)
-{
-	struct menu *menu;
-	enum prop_type type;
-
-	ConfigItem* item = (ConfigItem*)selectedItem();
-	if (!item)
-		return;
-
-	menu = item->menu;
-	emit menuChanged(menu);
-	if (!menu)
-		return;
-	type = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	if (mode == menuMode && type == P_MENU)
-		emit menuSelected(menu);
-}
-
-void ConfigList::updateList(ConfigItem* item)
-{
-	ConfigItem* last = 0;
-
-	if (!rootEntry) {
-		if (mode != listMode)
-			goto update;
-		Q3ListViewItemIterator it(this);
-		ConfigItem* item;
-
-		for (; it.current(); ++it) {
-			item = (ConfigItem*)it.current();
-			if (!item->menu)
-				continue;
-			item->testUpdateMenu(menu_is_visible(item->menu));
-		}
-		return;
-	}
-
-	if (rootEntry != &rootmenu && (mode == singleMode ||
-	    (mode == symbolMode && rootEntry->parent != &rootmenu))) {
-		item = firstChild();
-		if (!item)
-			item = new ConfigItem(this, 0, true);
-		last = item;
-	}
-	if ((mode == singleMode || (mode == symbolMode && !(rootEntry->flags & MENU_ROOT))) &&
-	    rootEntry->sym && rootEntry->prompt) {
-		item = last ? last->nextSibling() : firstChild();
-		if (!item)
-			item = new ConfigItem(this, last, rootEntry, true);
-		else
-			item->testUpdateMenu(true);
-
-		updateMenuList(item, rootEntry);
-		triggerUpdate();
-		return;
-	}
-update:
-	updateMenuList(this, rootEntry);
-	triggerUpdate();
-}
-
-void ConfigList::setValue(ConfigItem* item, tristate val)
-{
-	struct symbol* sym;
-	int type;
-	tristate oldval;
-
-	sym = item->menu ? item->menu->sym : 0;
-	if (!sym)
-		return;
-
-	type = sym_get_type(sym);
-	switch (type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		oldval = sym_get_tristate_value(sym);
-
-		if (!sym_set_tristate_value(sym, val))
-			return;
-		if (oldval == no && item->menu->list)
-			item->setOpen(TRUE);
-		parent()->updateList(item);
-		break;
-	}
-}
-
-void ConfigList::changeValue(ConfigItem* item)
-{
-	struct symbol* sym;
-	struct menu* menu;
-	int type, oldexpr, newexpr;
-
-	menu = item->menu;
-	if (!menu)
-		return;
-	sym = menu->sym;
-	if (!sym) {
-		if (item->menu->list)
-			item->setOpen(!item->isOpen());
-		return;
-	}
-
-	type = sym_get_type(sym);
-	switch (type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		oldexpr = sym_get_tristate_value(sym);
-		newexpr = sym_toggle_tristate_value(sym);
-		if (item->menu->list) {
-			if (oldexpr == newexpr)
-				item->setOpen(!item->isOpen());
-			else if (oldexpr == no)
-				item->setOpen(TRUE);
-		}
-		if (oldexpr != newexpr)
-			parent()->updateList(item);
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		if (colMap[dataColIdx] >= 0)
-			item->startRename(colMap[dataColIdx]);
-		else
-			parent()->lineEdit->show(item);
-		break;
-	}
-}
-
-void ConfigList::setRootMenu(struct menu *menu)
-{
-	enum prop_type type;
-
-	if (rootEntry == menu)
-		return;
-	type = menu && menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	if (type != P_MENU)
-		return;
-	updateMenuList(this, 0);
-	rootEntry = menu;
-	updateListAll();
-	setSelected(currentItem(), hasFocus());
-	ensureItemVisible(currentItem());
-}
-
-void ConfigList::setParentMenu(void)
-{
-	ConfigItem* item;
-	struct menu *oldroot;
-
-	oldroot = rootEntry;
-	if (rootEntry == &rootmenu)
-		return;
-	setRootMenu(menu_get_parent_menu(rootEntry->parent));
-
-	Q3ListViewItemIterator it(this);
-	for (; (item = (ConfigItem*)it.current()); it++) {
-		if (item->menu == oldroot) {
-			setCurrentItem(item);
-			ensureItemVisible(item);
-			break;
-		}
-	}
-}
-
-/*
- * update all the children of a menu entry
- *   removes/adds the entries from the parent widget as necessary
- *
- * parent: either the menu list widget or a menu entry widget
- * menu: entry to be updated
- */
-template <class P>
-void ConfigList::updateMenuList(P* parent, struct menu* menu)
-{
-	struct menu* child;
-	ConfigItem* item;
-	ConfigItem* last;
-	bool visible;
-	enum prop_type type;
-
-	if (!menu) {
-		while ((item = parent->firstChild()))
-			delete item;
-		return;
-	}
-
-	last = parent->firstChild();
-	if (last && !last->goParent)
-		last = 0;
-	for (child = menu->list; child; child = child->next) {
-		item = last ? last->nextSibling() : parent->firstChild();
-		type = child->prompt ? child->prompt->type : P_UNKNOWN;
-
-		switch (mode) {
-		case menuMode:
-			if (!(child->flags & MENU_ROOT))
-				goto hide;
-			break;
-		case symbolMode:
-			if (child->flags & MENU_ROOT)
-				goto hide;
-			break;
-		default:
-			break;
-		}
-
-		visible = menu_is_visible(child);
-		if (!menuSkip(child)) {
-			if (!child->sym && !child->list && !child->prompt)
-				continue;
-			if (!item || item->menu != child)
-				item = new ConfigItem(parent, last, child, visible);
-			else
-				item->testUpdateMenu(visible);
-
-			if (mode == fullMode || mode == menuMode || type != P_MENU)
-				updateMenuList(item, child);
-			else
-				updateMenuList(item, 0);
-			last = item;
-			continue;
-		}
-	hide:
-		if (item && item->menu == child) {
-			last = parent->firstChild();
-			if (last == item)
-				last = 0;
-			else while (last->nextSibling() != item)
-				last = last->nextSibling();
-			delete item;
-		}
-	}
-}
-
-void ConfigList::keyPressEvent(QKeyEvent* ev)
-{
-	Q3ListViewItem* i = currentItem();
-	ConfigItem* item;
-	struct menu *menu;
-	enum prop_type type;
-
-	if (ev->key() == Qt::Key_Escape && mode != fullMode && mode != listMode) {
-		emit parentSelected();
-		ev->accept();
-		return;
-	}
-
-	if (!i) {
-		Parent::keyPressEvent(ev);
-		return;
-	}
-	item = (ConfigItem*)i;
-
-	switch (ev->key()) {
-	case Qt::Key_Return:
-	case Qt::Key_Enter:
-		if (item->goParent) {
-			emit parentSelected();
-			break;
-		}
-		menu = item->menu;
-		if (!menu)
-			break;
-		type = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-		if (type == P_MENU && rootEntry != menu &&
-		    mode != fullMode && mode != menuMode) {
-			emit menuSelected(menu);
-			break;
-		}
-	case Qt::Key_Space:
-		changeValue(item);
-		break;
-	case Qt::Key_N:
-		setValue(item, no);
-		break;
-	case Qt::Key_M:
-		setValue(item, mod);
-		break;
-	case Qt::Key_Y:
-		setValue(item, yes);
-		break;
-	default:
-		Parent::keyPressEvent(ev);
-		return;
-	}
-	ev->accept();
-}
-
-void ConfigList::contentsMousePressEvent(QMouseEvent* e)
-{
-	//QPoint p(contentsToViewport(e->pos()));
-	//printf("contentsMousePressEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMousePressEvent(e);
-}
-
-void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e)
-{
-	QPoint p(contentsToViewport(e->pos()));
-	ConfigItem* item = (ConfigItem*)itemAt(p);
-	struct menu *menu;
-	enum prop_type ptype;
-	const QPixmap* pm;
-	int idx, x;
-
-	if (!item)
-		goto skip;
-
-	menu = item->menu;
-	x = header()->offset() + p.x();
-	idx = colRevMap[header()->sectionAt(x)];
-	switch (idx) {
-	case promptColIdx:
-		pm = item->pixmap(promptColIdx);
-		if (pm) {
-			int off = header()->sectionPos(0) + itemMargin() +
-				treeStepSize() * (item->depth() + (rootIsDecorated() ? 1 : 0));
-			if (x >= off && x < off + pm->width()) {
-				if (item->goParent) {
-					emit parentSelected();
-					break;
-				} else if (!menu)
-					break;
-				ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-				if (ptype == P_MENU && rootEntry != menu &&
-				    mode != fullMode && mode != menuMode)
-					emit menuSelected(menu);
-				else
-					changeValue(item);
-			}
-		}
-		break;
-	case noColIdx:
-		setValue(item, no);
-		break;
-	case modColIdx:
-		setValue(item, mod);
-		break;
-	case yesColIdx:
-		setValue(item, yes);
-		break;
-	case dataColIdx:
-		changeValue(item);
-		break;
-	}
-
-skip:
-	//printf("contentsMouseReleaseEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMouseReleaseEvent(e);
-}
-
-void ConfigList::contentsMouseMoveEvent(QMouseEvent* e)
-{
-	//QPoint p(contentsToViewport(e->pos()));
-	//printf("contentsMouseMoveEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMouseMoveEvent(e);
-}
-
-void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e)
-{
-	QPoint p(contentsToViewport(e->pos()));
-	ConfigItem* item = (ConfigItem*)itemAt(p);
-	struct menu *menu;
-	enum prop_type ptype;
-
-	if (!item)
-		goto skip;
-	if (item->goParent) {
-		emit parentSelected();
-		goto skip;
-	}
-	menu = item->menu;
-	if (!menu)
-		goto skip;
-	ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	if (ptype == P_MENU && (mode == singleMode || mode == symbolMode))
-		emit menuSelected(menu);
-	else if (menu->sym)
-		changeValue(item);
-
-skip:
-	//printf("contentsMouseDoubleClickEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMouseDoubleClickEvent(e);
-}
-
-void ConfigList::focusInEvent(QFocusEvent *e)
-{
-	struct menu *menu = NULL;
-
-	Parent::focusInEvent(e);
-
-	ConfigItem* item = (ConfigItem *)currentItem();
-	if (item) {
-		setSelected(item, TRUE);
-		menu = item->menu;
-	}
-	emit gotFocus(menu);
-}
-
-void ConfigList::contextMenuEvent(QContextMenuEvent *e)
-{
-	if (e->y() <= header()->geometry().bottom()) {
-		if (!headerPopup) {
-			Q3Action *action;
-
-			headerPopup = new Q3PopupMenu(this);
-			action = new Q3Action(NULL, _("Show Name"), 0, this);
-			  action->setToggleAction(TRUE);
-			  connect(action, SIGNAL(toggled(bool)),
-				  parent(), SLOT(setShowName(bool)));
-			  connect(parent(), SIGNAL(showNameChanged(bool)),
-				  action, SLOT(setOn(bool)));
-			  action->setOn(showName);
-			  action->addTo(headerPopup);
-			action = new Q3Action(NULL, _("Show Range"), 0, this);
-			  action->setToggleAction(TRUE);
-			  connect(action, SIGNAL(toggled(bool)),
-				  parent(), SLOT(setShowRange(bool)));
-			  connect(parent(), SIGNAL(showRangeChanged(bool)),
-				  action, SLOT(setOn(bool)));
-			  action->setOn(showRange);
-			  action->addTo(headerPopup);
-			action = new Q3Action(NULL, _("Show Data"), 0, this);
-			  action->setToggleAction(TRUE);
-			  connect(action, SIGNAL(toggled(bool)),
-				  parent(), SLOT(setShowData(bool)));
-			  connect(parent(), SIGNAL(showDataChanged(bool)),
-				  action, SLOT(setOn(bool)));
-			  action->setOn(showData);
-			  action->addTo(headerPopup);
-		}
-		headerPopup->exec(e->globalPos());
-		e->accept();
-	} else
-		e->ignore();
-}
-
-ConfigView*ConfigView::viewList;
-QAction *ConfigView::showNormalAction;
-QAction *ConfigView::showAllAction;
-QAction *ConfigView::showPromptAction;
-
-ConfigView::ConfigView(QWidget* parent, const char *name)
-	: Parent(parent, name)
-{
-	list = new ConfigList(this, name);
-	lineEdit = new ConfigLineEdit(this);
-	lineEdit->hide();
-
-	this->nextView = viewList;
-	viewList = this;
-}
-
-ConfigView::~ConfigView(void)
-{
-	ConfigView** vp;
-
-	for (vp = &viewList; *vp; vp = &(*vp)->nextView) {
-		if (*vp == this) {
-			*vp = nextView;
-			break;
-		}
-	}
-}
-
-void ConfigView::setOptionMode(QAction *act)
-{
-	if (act == showNormalAction)
-		list->optMode = normalOpt;
-	else if (act == showAllAction)
-		list->optMode = allOpt;
-	else
-		list->optMode = promptOpt;
-
-	list->updateListAll();
-}
-
-void ConfigView::setShowName(bool b)
-{
-	if (list->showName != b) {
-		list->showName = b;
-		list->reinit();
-		emit showNameChanged(b);
-	}
-}
-
-void ConfigView::setShowRange(bool b)
-{
-	if (list->showRange != b) {
-		list->showRange = b;
-		list->reinit();
-		emit showRangeChanged(b);
-	}
-}
-
-void ConfigView::setShowData(bool b)
-{
-	if (list->showData != b) {
-		list->showData = b;
-		list->reinit();
-		emit showDataChanged(b);
-	}
-}
-
-void ConfigList::setAllOpen(bool open)
-{
-	Q3ListViewItemIterator it(this);
-
-	for (; it.current(); it++)
-		it.current()->setOpen(open);
-}
-
-void ConfigView::updateList(ConfigItem* item)
-{
-	ConfigView* v;
-
-	for (v = viewList; v; v = v->nextView)
-		v->list->updateList(item);
-}
-
-void ConfigView::updateListAll(void)
-{
-	ConfigView* v;
-
-	for (v = viewList; v; v = v->nextView)
-		v->list->updateListAll();
-}
-
-ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
-	: Parent(parent, name), sym(0), _menu(0)
-{
-	if (name) {
-		configSettings->beginGroup(name);
-		_showDebug = configSettings->readBoolEntry("/showDebug", false);
-		configSettings->endGroup();
-		connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
-	}
-}
-
-void ConfigInfoView::saveSettings(void)
-{
-	if (name()) {
-		configSettings->beginGroup(name());
-		configSettings->writeEntry("/showDebug", showDebug());
-		configSettings->endGroup();
-	}
-}
-
-void ConfigInfoView::setShowDebug(bool b)
-{
-	if (_showDebug != b) {
-		_showDebug = b;
-		if (_menu)
-			menuInfo();
-		else if (sym)
-			symbolInfo();
-		emit showDebugChanged(b);
-	}
-}
-
-void ConfigInfoView::setInfo(struct menu *m)
-{
-	if (_menu == m)
-		return;
-	_menu = m;
-	sym = NULL;
-	if (!_menu)
-		clear();
-	else
-		menuInfo();
-}
-
-void ConfigInfoView::symbolInfo(void)
-{
-	QString str;
-
-	str += "<big>Symbol: <b>";
-	str += print_filter(sym->name);
-	str += "</b></big><br><br>value: ";
-	str += print_filter(sym_get_string_value(sym));
-	str += "<br>visibility: ";
-	str += sym->visible == yes ? "y" : sym->visible == mod ? "m" : "n";
-	str += "<br>";
-	str += debug_info(sym);
-
-	setText(str);
-}
-
-void ConfigInfoView::menuInfo(void)
-{
-	struct symbol* sym;
-	QString head, debug, help;
-
-	sym = _menu->sym;
-	if (sym) {
-		if (_menu->prompt) {
-			head += "<big><b>";
-			head += print_filter(_(_menu->prompt->text));
-			head += "</b></big>";
-			if (sym->name) {
-				head += " (";
-				if (showDebug())
-					head += QString().sprintf("<a href=\"s%p\">", sym);
-				head += print_filter(sym->name);
-				if (showDebug())
-					head += "</a>";
-				head += ")";
-			}
-		} else if (sym->name) {
-			head += "<big><b>";
-			if (showDebug())
-				head += QString().sprintf("<a href=\"s%p\">", sym);
-			head += print_filter(sym->name);
-			if (showDebug())
-				head += "</a>";
-			head += "</b></big>";
-		}
-		head += "<br><br>";
-
-		if (showDebug())
-			debug = debug_info(sym);
-
-		struct gstr help_gstr = str_new();
-		menu_get_ext_help(_menu, &help_gstr);
-		help = print_filter(str_get(&help_gstr));
-		str_free(&help_gstr);
-	} else if (_menu->prompt) {
-		head += "<big><b>";
-		head += print_filter(_(_menu->prompt->text));
-		head += "</b></big><br><br>";
-		if (showDebug()) {
-			if (_menu->prompt->visible.expr) {
-				debug += "&nbsp;&nbsp;dep: ";
-				expr_print(_menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
-				debug += "<br><br>";
-			}
-		}
-	}
-	if (showDebug())
-		debug += QString().sprintf("defined at %s:%d<br><br>", _menu->file->name, _menu->lineno);
-
-	setText(head + debug + help);
-}
-
-QString ConfigInfoView::debug_info(struct symbol *sym)
-{
-	QString debug;
-
-	debug += "type: ";
-	debug += print_filter(sym_type_name(sym->type));
-	if (sym_is_choice(sym))
-		debug += " (choice)";
-	debug += "<br>";
-	if (sym->rev_dep.expr) {
-		debug += "reverse dep: ";
-		expr_print(sym->rev_dep.expr, expr_print_help, &debug, E_NONE);
-		debug += "<br>";
-	}
-	for (struct property *prop = sym->prop; prop; prop = prop->next) {
-		switch (prop->type) {
-		case P_PROMPT:
-		case P_MENU:
-			debug += QString().sprintf("prompt: <a href=\"m%p\">", prop->menu);
-			debug += print_filter(_(prop->text));
-			debug += "</a><br>";
-			break;
-		case P_DEFAULT:
-		case P_SELECT:
-		case P_RANGE:
-		case P_ENV:
-			debug += prop_get_type_name(prop->type);
-			debug += ": ";
-			expr_print(prop->expr, expr_print_help, &debug, E_NONE);
-			debug += "<br>";
-			break;
-		case P_CHOICE:
-			if (sym_is_choice(sym)) {
-				debug += "choice: ";
-				expr_print(prop->expr, expr_print_help, &debug, E_NONE);
-				debug += "<br>";
-			}
-			break;
-		default:
-			debug += "unknown property: ";
-			debug += prop_get_type_name(prop->type);
-			debug += "<br>";
-		}
-		if (prop->visible.expr) {
-			debug += "&nbsp;&nbsp;&nbsp;&nbsp;dep: ";
-			expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE);
-			debug += "<br>";
-		}
-	}
-	debug += "<br>";
-
-	return debug;
-}
-
-QString ConfigInfoView::print_filter(const QString &str)
-{
-	QRegExp re("[<>&\"\\n]");
-	QString res = str;
-	for (int i = 0; (i = res.find(re, i)) >= 0;) {
-		switch (res[i].latin1()) {
-		case '<':
-			res.replace(i, 1, "&lt;");
-			i += 4;
-			break;
-		case '>':
-			res.replace(i, 1, "&gt;");
-			i += 4;
-			break;
-		case '&':
-			res.replace(i, 1, "&amp;");
-			i += 5;
-			break;
-		case '"':
-			res.replace(i, 1, "&quot;");
-			i += 6;
-			break;
-		case '\n':
-			res.replace(i, 1, "<br>");
-			i += 4;
-			break;
-		}
-	}
-	return res;
-}
-
-void ConfigInfoView::expr_print_help(void *data, struct symbol *sym, const char *str)
-{
-	QString* text = reinterpret_cast<QString*>(data);
-	QString str2 = print_filter(str);
-
-	if (sym && sym->name && !(sym->flags & SYMBOL_CONST)) {
-		*text += QString().sprintf("<a href=\"s%p\">", sym);
-		*text += str2;
-		*text += "</a>";
-	} else
-		*text += str2;
-}
-
-Q3PopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
-{
-	Q3PopupMenu* popup = Parent::createPopupMenu(pos);
-	Q3Action* action = new Q3Action(NULL, _("Show Debug Info"), 0, popup);
-	  action->setToggleAction(TRUE);
-	  connect(action, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool)));
-	  connect(this, SIGNAL(showDebugChanged(bool)), action, SLOT(setOn(bool)));
-	  action->setOn(showDebug());
-	popup->insertSeparator();
-	action->addTo(popup);
-	return popup;
-}
-
-void ConfigInfoView::contentsContextMenuEvent(QContextMenuEvent *e)
-{
-	Parent::contentsContextMenuEvent(e);
-}
-
-ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *name)
-	: Parent(parent, name), result(NULL)
-{
-	setCaption("Search Config");
-
-	QVBoxLayout* layout1 = new QVBoxLayout(this, 11, 6);
-	QHBoxLayout* layout2 = new QHBoxLayout(0, 0, 6);
-	layout2->addWidget(new QLabel(_("Find:"), this));
-	editField = new QLineEdit(this);
-	connect(editField, SIGNAL(returnPressed()), SLOT(search()));
-	layout2->addWidget(editField);
-	searchButton = new QPushButton(_("Search"), this);
-	searchButton->setAutoDefault(FALSE);
-	connect(searchButton, SIGNAL(clicked()), SLOT(search()));
-	layout2->addWidget(searchButton);
-	layout1->addLayout(layout2);
-
-	split = new QSplitter(this);
-	split->setOrientation(Qt::Vertical);
-	list = new ConfigView(split, name);
-	list->list->mode = listMode;
-	info = new ConfigInfoView(split, name);
-	connect(list->list, SIGNAL(menuChanged(struct menu *)),
-		info, SLOT(setInfo(struct menu *)));
-	connect(list->list, SIGNAL(menuChanged(struct menu *)),
-		parent, SLOT(setMenuLink(struct menu *)));
-
-	layout1->addWidget(split);
-
-	if (name) {
-		int x, y, width, height;
-		bool ok;
-
-		configSettings->beginGroup(name);
-		width = configSettings->readNumEntry("/window width", parent->width() / 2);
-		height = configSettings->readNumEntry("/window height", parent->height() / 2);
-		resize(width, height);
-		x = configSettings->readNumEntry("/window x", 0, &ok);
-		if (ok)
-			y = configSettings->readNumEntry("/window y", 0, &ok);
-		if (ok)
-			move(x, y);
-		Q3ValueList<int> sizes = configSettings->readSizes("/split", &ok);
-		if (ok)
-			split->setSizes(sizes);
-		configSettings->endGroup();
-		connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
-	}
-}
-
-void ConfigSearchWindow::saveSettings(void)
-{
-	if (name()) {
-		configSettings->beginGroup(name());
-		configSettings->writeEntry("/window x", pos().x());
-		configSettings->writeEntry("/window y", pos().y());
-		configSettings->writeEntry("/window width", size().width());
-		configSettings->writeEntry("/window height", size().height());
-		configSettings->writeSizes("/split", split->sizes());
-		configSettings->endGroup();
-	}
-}
-
-void ConfigSearchWindow::search(void)
-{
-	struct symbol **p;
-	struct property *prop;
-	ConfigItem *lastItem = NULL;
-
-	free(result);
-	list->list->clear();
-	info->clear();
-
-	result = sym_re_search(editField->text().latin1());
-	if (!result)
-		return;
-	for (p = result; *p; p++) {
-		for_all_prompts((*p), prop)
-			lastItem = new ConfigItem(list->list, lastItem, prop->menu,
-						  menu_is_visible(prop->menu));
-	}
-}
-
-/*
- * Construct the complete config widget
- */
-ConfigMainWindow::ConfigMainWindow(void)
-	: searchWindow(0)
-{
-	QMenuBar* menu;
-	bool ok;
-	int x, y, width, height;
-	char title[256];
-
-	QDesktopWidget *d = configApp->desktop();
-	snprintf(title, sizeof(title), "%s%s",
-		rootmenu.prompt->text,
-#if QT_VERSION < 0x040000
-		" (Qt3)"
-#else
-		""
-#endif
-		);
-	setCaption(title);
-
-	width = configSettings->readNumEntry("/window width", d->width() - 64);
-	height = configSettings->readNumEntry("/window height", d->height() - 64);
-	resize(width, height);
-	x = configSettings->readNumEntry("/window x", 0, &ok);
-	if (ok)
-		y = configSettings->readNumEntry("/window y", 0, &ok);
-	if (ok)
-		move(x, y);
-
-	split1 = new QSplitter(this);
-	split1->setOrientation(Qt::Horizontal);
-	setCentralWidget(split1);
-
-	menuView = new ConfigView(split1, "menu");
-	menuList = menuView->list;
-
-	split2 = new QSplitter(split1);
-	split2->setOrientation(Qt::Vertical);
-
-	// create config tree
-	configView = new ConfigView(split2, "config");
-	configList = configView->list;
-
-	helpText = new ConfigInfoView(split2, "help");
-	helpText->setTextFormat(Qt::RichText);
-
-	setTabOrder(configList, helpText);
-	configList->setFocus();
-
-	menu = menuBar();
-	toolBar = new Q3ToolBar("Tools", this);
-
-	backAction = new Q3Action("Back", QPixmap(xpm_back), _("Back"), 0, this);
-	  connect(backAction, SIGNAL(activated()), SLOT(goBack()));
-	  backAction->setEnabled(FALSE);
-	Q3Action *quitAction = new Q3Action("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
-	  connect(quitAction, SIGNAL(activated()), SLOT(close()));
-	Q3Action *loadAction = new Q3Action("Load", QPixmap(xpm_load), _("&Load"), Qt::CTRL + Qt::Key_L, this);
-	  connect(loadAction, SIGNAL(activated()), SLOT(loadConfig()));
-	saveAction = new Q3Action("Save", QPixmap(xpm_save), _("&Save"), Qt::CTRL + Qt::Key_S, this);
-	  connect(saveAction, SIGNAL(activated()), SLOT(saveConfig()));
-	conf_set_changed_callback(conf_changed);
-	// Set saveAction's initial state
-	conf_changed();
-	Q3Action *saveAsAction = new Q3Action("Save As...", _("Save &As..."), 0, this);
-	  connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs()));
-	Q3Action *searchAction = new Q3Action("Find", _("&Find"), Qt::CTRL + Qt::Key_F, this);
-	  connect(searchAction, SIGNAL(activated()), SLOT(searchConfig()));
-	Q3Action *singleViewAction = new Q3Action("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
-	  connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView()));
-	Q3Action *splitViewAction = new Q3Action("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
-	  connect(splitViewAction, SIGNAL(activated()), SLOT(showSplitView()));
-	Q3Action *fullViewAction = new Q3Action("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
-	  connect(fullViewAction, SIGNAL(activated()), SLOT(showFullView()));
-
-	Q3Action *showNameAction = new Q3Action(NULL, _("Show Name"), 0, this);
-	  showNameAction->setToggleAction(TRUE);
-	  connect(showNameAction, SIGNAL(toggled(bool)), configView, SLOT(setShowName(bool)));
-	  connect(configView, SIGNAL(showNameChanged(bool)), showNameAction, SLOT(setOn(bool)));
-	  showNameAction->setOn(configView->showName());
-	Q3Action *showRangeAction = new Q3Action(NULL, _("Show Range"), 0, this);
-	  showRangeAction->setToggleAction(TRUE);
-	  connect(showRangeAction, SIGNAL(toggled(bool)), configView, SLOT(setShowRange(bool)));
-	  connect(configView, SIGNAL(showRangeChanged(bool)), showRangeAction, SLOT(setOn(bool)));
-	  showRangeAction->setOn(configList->showRange);
-	Q3Action *showDataAction = new Q3Action(NULL, _("Show Data"), 0, this);
-	  showDataAction->setToggleAction(TRUE);
-	  connect(showDataAction, SIGNAL(toggled(bool)), configView, SLOT(setShowData(bool)));
-	  connect(configView, SIGNAL(showDataChanged(bool)), showDataAction, SLOT(setOn(bool)));
-	  showDataAction->setOn(configList->showData);
-
-	QActionGroup *optGroup = new QActionGroup(this);
-	optGroup->setExclusive(TRUE);
-	connect(optGroup, SIGNAL(selected(QAction *)), configView,
-		SLOT(setOptionMode(QAction *)));
-	connect(optGroup, SIGNAL(selected(QAction *)), menuView,
-		SLOT(setOptionMode(QAction *)));
-
-#if QT_VERSION >= 0x040000
-	configView->showNormalAction = new QAction(_("Show Normal Options"), optGroup);
-	configView->showAllAction = new QAction(_("Show All Options"), optGroup);
-	configView->showPromptAction = new QAction(_("Show Prompt Options"), optGroup);
-#else
-	configView->showNormalAction = new QAction(_("Show Normal Options"), 0, optGroup);
-	configView->showAllAction = new QAction(_("Show All Options"), 0, optGroup);
-	configView->showPromptAction = new QAction(_("Show Prompt Options"), 0, optGroup);
-#endif
-	configView->showNormalAction->setToggleAction(TRUE);
-	configView->showNormalAction->setOn(configList->optMode == normalOpt);
-	configView->showAllAction->setToggleAction(TRUE);
-	configView->showAllAction->setOn(configList->optMode == allOpt);
-	configView->showPromptAction->setToggleAction(TRUE);
-	configView->showPromptAction->setOn(configList->optMode == promptOpt);
-
-	Q3Action *showDebugAction = new Q3Action(NULL, _("Show Debug Info"), 0, this);
-	  showDebugAction->setToggleAction(TRUE);
-	  connect(showDebugAction, SIGNAL(toggled(bool)), helpText, SLOT(setShowDebug(bool)));
-	  connect(helpText, SIGNAL(showDebugChanged(bool)), showDebugAction, SLOT(setOn(bool)));
-	  showDebugAction->setOn(helpText->showDebug());
-
-	Q3Action *showIntroAction = new Q3Action(NULL, _("Introduction"), 0, this);
-	  connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro()));
-	Q3Action *showAboutAction = new Q3Action(NULL, _("About"), 0, this);
-	  connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout()));
-
-	// init tool bar
-	backAction->addTo(toolBar);
-	toolBar->addSeparator();
-	loadAction->addTo(toolBar);
-	saveAction->addTo(toolBar);
-	toolBar->addSeparator();
-	singleViewAction->addTo(toolBar);
-	splitViewAction->addTo(toolBar);
-	fullViewAction->addTo(toolBar);
-
-	// create config menu
-	Q3PopupMenu* config = new Q3PopupMenu(this);
-	menu->insertItem(_("&File"), config);
-	loadAction->addTo(config);
-	saveAction->addTo(config);
-	saveAsAction->addTo(config);
-	config->insertSeparator();
-	quitAction->addTo(config);
-
-	// create edit menu
-	Q3PopupMenu* editMenu = new Q3PopupMenu(this);
-	menu->insertItem(_("&Edit"), editMenu);
-	searchAction->addTo(editMenu);
-
-	// create options menu
-	Q3PopupMenu* optionMenu = new Q3PopupMenu(this);
-	menu->insertItem(_("&Option"), optionMenu);
-	showNameAction->addTo(optionMenu);
-	showRangeAction->addTo(optionMenu);
-	showDataAction->addTo(optionMenu);
-	optionMenu->insertSeparator();
-	optGroup->addTo(optionMenu);
-	optionMenu->insertSeparator();
-
-	// create help menu
-	Q3PopupMenu* helpMenu = new Q3PopupMenu(this);
-	menu->insertSeparator();
-	menu->insertItem(_("&Help"), helpMenu);
-	showIntroAction->addTo(helpMenu);
-	showAboutAction->addTo(helpMenu);
-
-	connect(configList, SIGNAL(menuChanged(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(configList, SIGNAL(menuSelected(struct menu *)),
-		SLOT(changeMenu(struct menu *)));
-	connect(configList, SIGNAL(parentSelected()),
-		SLOT(goBack()));
-	connect(menuList, SIGNAL(menuChanged(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(menuList, SIGNAL(menuSelected(struct menu *)),
-		SLOT(changeMenu(struct menu *)));
-
-	connect(configList, SIGNAL(gotFocus(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(menuList, SIGNAL(gotFocus(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(menuList, SIGNAL(gotFocus(struct menu *)),
-		SLOT(listFocusChanged(void)));
-	connect(helpText, SIGNAL(menuSelected(struct menu *)),
-		SLOT(setMenuLink(struct menu *)));
-
-	QString listMode = configSettings->readEntry("/listMode", "symbol");
-	if (listMode == "single")
-		showSingleView();
-	else if (listMode == "full")
-		showFullView();
-	else /*if (listMode == "split")*/
-		showSplitView();
-
-	// UI setup done, restore splitter positions
-	Q3ValueList<int> sizes = configSettings->readSizes("/split1", &ok);
-	if (ok)
-		split1->setSizes(sizes);
-
-	sizes = configSettings->readSizes("/split2", &ok);
-	if (ok)
-		split2->setSizes(sizes);
-}
-
-void ConfigMainWindow::loadConfig(void)
-{
-	QString s = Q3FileDialog::getOpenFileName(conf_get_configname(), NULL, this);
-	if (s.isNull())
-		return;
-	if (conf_read(QFile::encodeName(s)))
-		QMessageBox::information(this, "qconf", _("Unable to load configuration!"));
-	ConfigView::updateListAll();
-}
-
-bool ConfigMainWindow::saveConfig(void)
-{
-	if (conf_write(NULL)) {
-		QMessageBox::information(this, "qconf", _("Unable to save configuration!"));
-		return false;
-	}
-	return true;
-}
-
-void ConfigMainWindow::saveConfigAs(void)
-{
-	QString s = Q3FileDialog::getSaveFileName(conf_get_configname(), NULL, this);
-	if (s.isNull())
-		return;
-	saveConfig();
-}
-
-void ConfigMainWindow::searchConfig(void)
-{
-	if (!searchWindow)
-		searchWindow = new ConfigSearchWindow(this, "search");
-	searchWindow->show();
-}
-
-void ConfigMainWindow::changeMenu(struct menu *menu)
-{
-	configList->setRootMenu(menu);
-	if (configList->rootEntry->parent == &rootmenu)
-		backAction->setEnabled(FALSE);
-	else
-		backAction->setEnabled(TRUE);
-}
-
-void ConfigMainWindow::setMenuLink(struct menu *menu)
-{
-	struct menu *parent;
-	ConfigList* list = NULL;
-	ConfigItem* item;
-
-	if (configList->menuSkip(menu))
-		return;
-
-	switch (configList->mode) {
-	case singleMode:
-		list = configList;
-		parent = menu_get_parent_menu(menu);
-		if (!parent)
-			return;
-		list->setRootMenu(parent);
-		break;
-	case symbolMode:
-		if (menu->flags & MENU_ROOT) {
-			configList->setRootMenu(menu);
-			configList->clearSelection();
-			list = menuList;
-		} else {
-			list = configList;
-			parent = menu_get_parent_menu(menu->parent);
-			if (!parent)
-				return;
-			item = menuList->findConfigItem(parent);
-			if (item) {
-				menuList->setSelected(item, TRUE);
-				menuList->ensureItemVisible(item);
-			}
-			list->setRootMenu(parent);
-		}
-		break;
-	case fullMode:
-		list = configList;
-		break;
-	default:
-		break;
-	}
-
-	if (list) {
-		item = list->findConfigItem(menu);
-		if (item) {
-			list->setSelected(item, TRUE);
-			list->ensureItemVisible(item);
-			list->setFocus();
-		}
-	}
-}
-
-void ConfigMainWindow::listFocusChanged(void)
-{
-	if (menuList->mode == menuMode)
-		configList->clearSelection();
-}
-
-void ConfigMainWindow::goBack(void)
-{
-	ConfigItem* item;
-
-	configList->setParentMenu();
-	if (configList->rootEntry == &rootmenu)
-		backAction->setEnabled(FALSE);
-	item = (ConfigItem*)menuList->selectedItem();
-	while (item) {
-		if (item->menu == configList->rootEntry) {
-			menuList->setSelected(item, TRUE);
-			break;
-		}
-		item = (ConfigItem*)item->parent();
-	}
-}
-
-void ConfigMainWindow::showSingleView(void)
-{
-	menuView->hide();
-	menuList->setRootMenu(0);
-	configList->mode = singleMode;
-	if (configList->rootEntry == &rootmenu)
-		configList->updateListAll();
-	else
-		configList->setRootMenu(&rootmenu);
-	configList->setAllOpen(TRUE);
-	configList->setFocus();
-}
-
-void ConfigMainWindow::showSplitView(void)
-{
-	configList->mode = symbolMode;
-	if (configList->rootEntry == &rootmenu)
-		configList->updateListAll();
-	else
-		configList->setRootMenu(&rootmenu);
-	configList->setAllOpen(TRUE);
-	configApp->processEvents();
-	menuList->mode = menuMode;
-	menuList->setRootMenu(&rootmenu);
-	menuList->setAllOpen(TRUE);
-	menuView->show();
-	menuList->setFocus();
-}
-
-void ConfigMainWindow::showFullView(void)
-{
-	menuView->hide();
-	menuList->setRootMenu(0);
-	configList->mode = fullMode;
-	if (configList->rootEntry == &rootmenu)
-		configList->updateListAll();
-	else
-		configList->setRootMenu(&rootmenu);
-	configList->setAllOpen(FALSE);
-	configList->setFocus();
-}
-
-/*
- * ask for saving configuration before quitting
- * TODO ask only when something changed
- */
-void ConfigMainWindow::closeEvent(QCloseEvent* e)
-{
-	if (!conf_get_changed()) {
-		e->accept();
-		return;
-	}
-	QMessageBox mb("qconf", _("Save configuration?"), QMessageBox::Warning,
-			QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape);
-	mb.setButtonText(QMessageBox::Yes, _("&Save Changes"));
-	mb.setButtonText(QMessageBox::No, _("&Discard Changes"));
-	mb.setButtonText(QMessageBox::Cancel, _("Cancel Exit"));
-	switch (mb.exec()) {
-	case QMessageBox::Yes:
-		if (saveConfig())
-			e->accept();
-		else
-			e->ignore();
-		break;
-	case QMessageBox::No:
-		e->accept();
-		break;
-	case QMessageBox::Cancel:
-		e->ignore();
-		break;
-	}
-}
-
-void ConfigMainWindow::showIntro(void)
-{
-	static const QString str = _("Welcome to the qconf graphical configuration tool.\n\n"
-		"For each option, a blank box indicates the feature is disabled, a check\n"
-		"indicates it is enabled, and a dot indicates that it is to be compiled\n"
-		"as a module.  Clicking on the box will cycle through the three states.\n\n"
-		"If you do not see an option (e.g., a device driver) that you believe\n"
-		"should be present, try turning on Show All Options under the Options menu.\n"
-		"Although there is no cross reference yet to help you figure out what other\n"
-		"options must be enabled to support the option you are interested in, you can\n"
-		"still view the help of a grayed-out option.\n\n"
-		"Toggling Show Debug Info under the Options menu will show the dependencies,\n"
-		"which you can then match by examining other options.\n\n");
-
-	QMessageBox::information(this, "qconf", str);
-}
-
-void ConfigMainWindow::showAbout(void)
-{
-	static const QString str = _("qconf is Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>.\n\n"
-		"Bug reports and feature request can also be entered at http://bugzilla.kernel.org/\n");
-
-	QMessageBox::information(this, "qconf", str);
-}
-
-void ConfigMainWindow::saveSettings(void)
-{
-	configSettings->writeEntry("/window x", pos().x());
-	configSettings->writeEntry("/window y", pos().y());
-	configSettings->writeEntry("/window width", size().width());
-	configSettings->writeEntry("/window height", size().height());
-
-	QString entry;
-	switch(configList->mode) {
-	case singleMode :
-		entry = "single";
-		break;
-
-	case symbolMode :
-		entry = "split";
-		break;
-
-	case fullMode :
-		entry = "full";
-		break;
-
-	default:
-		break;
-	}
-	configSettings->writeEntry("/listMode", entry);
-
-	configSettings->writeSizes("/split1", split1->sizes());
-	configSettings->writeSizes("/split2", split2->sizes());
-}
-
-void ConfigMainWindow::conf_changed(void)
-{
-	if (saveAction)
-		saveAction->setEnabled(conf_get_changed());
-}
-
-void fixup_rootmenu(struct menu *menu)
-{
-	struct menu *child;
-	static int menu_cnt = 0;
-
-	menu->flags |= MENU_ROOT;
-	for (child = menu->list; child; child = child->next) {
-		if (child->prompt && child->prompt->type == P_MENU) {
-			menu_cnt++;
-			fixup_rootmenu(child);
-			menu_cnt--;
-		} else if (!menu_cnt)
-			fixup_rootmenu(child);
-	}
-}
-
-static const char *progname;
-
-static void usage(void)
-{
-	printf(_("%s <config>\n"), progname);
-	exit(0);
-}
-
-int main(int ac, char** av)
-{
-	ConfigMainWindow* v;
-	const char *name;
-
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	progname = av[0];
-	configApp = new QApplication(ac, av);
-	if (ac > 1 && av[1][0] == '-') {
-		switch (av[1][1]) {
-		case 'h':
-		case '?':
-			usage();
-		}
-		name = av[2];
-	} else
-		name = av[1];
-	if (!name)
-		usage();
-
-	conf_parse(name);
-	fixup_rootmenu(&rootmenu);
-	conf_read(NULL);
-	//zconfdump(stdout);
-
-	configSettings = new ConfigSettings();
-	configSettings->beginGroup("/kconfig/qconf");
-	v = new ConfigMainWindow();
-
-	//zconfdump(stdout);
-	configApp->setMainWidget(v);
-	configApp->connect(configApp, SIGNAL(lastWindowClosed()), SLOT(quit()));
-	configApp->connect(configApp, SIGNAL(aboutToQuit()), v, SLOT(saveSettings()));
-	v->show();
-	configApp->exec();
-
-	configSettings->endGroup();
-	delete configSettings;
-
-	return 0;
-}
diff --git a/support/kconfig/qconf.h b/support/kconfig/qconf.h
deleted file mode 100644
index bde0c6b6..00000000
--- a/support/kconfig/qconf.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#if QT_VERSION < 0x040000
-#include <qlistview.h>
-#else
-#include <q3listview.h>
-#endif
-#include <qsettings.h>
-
-#if QT_VERSION < 0x040000
-#define Q3ValueList             QValueList
-#define Q3PopupMenu             QPopupMenu
-#define Q3ListView              QListView
-#define Q3ListViewItem          QListViewItem
-#define Q3VBox                  QVBox
-#define Q3TextBrowser           QTextBrowser
-#define Q3MainWindow            QMainWindow
-#define Q3Action                QAction
-#define Q3ToolBar               QToolBar
-#define Q3ListViewItemIterator  QListViewItemIterator
-#define Q3FileDialog            QFileDialog
-#endif
-
-class ConfigView;
-class ConfigList;
-class ConfigItem;
-class ConfigLineEdit;
-class ConfigMainWindow;
-
-class ConfigSettings : public QSettings {
-public:
-	ConfigSettings();
-	Q3ValueList<int> readSizes(const QString& key, bool *ok);
-	bool writeSizes(const QString& key, const Q3ValueList<int>& value);
-};
-
-enum colIdx {
-	promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr
-};
-enum listMode {
-	singleMode, menuMode, symbolMode, fullMode, listMode
-};
-enum optionMode {
-	normalOpt = 0, allOpt, promptOpt
-};
-
-class ConfigList : public Q3ListView {
-	Q_OBJECT
-	typedef class Q3ListView Parent;
-public:
-	ConfigList(ConfigView* p, const char *name = 0);
-	void reinit(void);
-	ConfigView* parent(void) const
-	{
-		return (ConfigView*)Parent::parent();
-	}
-	ConfigItem* findConfigItem(struct menu *);
-
-protected:
-	void keyPressEvent(QKeyEvent *e);
-	void contentsMousePressEvent(QMouseEvent *e);
-	void contentsMouseReleaseEvent(QMouseEvent *e);
-	void contentsMouseMoveEvent(QMouseEvent *e);
-	void contentsMouseDoubleClickEvent(QMouseEvent *e);
-	void focusInEvent(QFocusEvent *e);
-	void contextMenuEvent(QContextMenuEvent *e);
-
-public slots:
-	void setRootMenu(struct menu *menu);
-
-	void updateList(ConfigItem *item);
-	void setValue(ConfigItem* item, tristate val);
-	void changeValue(ConfigItem* item);
-	void updateSelection(void);
-	void saveSettings(void);
-signals:
-	void menuChanged(struct menu *menu);
-	void menuSelected(struct menu *menu);
-	void parentSelected(void);
-	void gotFocus(struct menu *);
-
-public:
-	void updateListAll(void)
-	{
-		updateAll = true;
-		updateList(NULL);
-		updateAll = false;
-	}
-	ConfigList* listView()
-	{
-		return this;
-	}
-	ConfigItem* firstChild() const
-	{
-		return (ConfigItem *)Parent::firstChild();
-	}
-	int mapIdx(colIdx idx)
-	{
-		return colMap[idx];
-	}
-	void addColumn(colIdx idx, const QString& label)
-	{
-		colMap[idx] = Parent::addColumn(label);
-		colRevMap[colMap[idx]] = idx;
-	}
-	void removeColumn(colIdx idx)
-	{
-		int col = colMap[idx];
-		if (col >= 0) {
-			Parent::removeColumn(col);
-			colRevMap[col] = colMap[idx] = -1;
-		}
-	}
-	void setAllOpen(bool open);
-	void setParentMenu(void);
-
-	bool menuSkip(struct menu *);
-
-	template <class P>
-	void updateMenuList(P*, struct menu*);
-
-	bool updateAll;
-
-	QPixmap symbolYesPix, symbolModPix, symbolNoPix;
-	QPixmap choiceYesPix, choiceNoPix;
-	QPixmap menuPix, menuInvPix, menuBackPix, voidPix;
-
-	bool showName, showRange, showData;
-	enum listMode mode;
-	enum optionMode optMode;
-	struct menu *rootEntry;
-	QColorGroup disabledColorGroup;
-	QColorGroup inactivedColorGroup;
-	Q3PopupMenu* headerPopup;
-
-private:
-	int colMap[colNr];
-	int colRevMap[colNr];
-};
-
-class ConfigItem : public Q3ListViewItem {
-	typedef class Q3ListViewItem Parent;
-public:
-	ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v)
-	: Parent(parent, after), menu(m), visible(v), goParent(false)
-	{
-		init();
-	}
-	ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v)
-	: Parent(parent, after), menu(m), visible(v), goParent(false)
-	{
-		init();
-	}
-	ConfigItem(Q3ListView *parent, ConfigItem *after, bool v)
-	: Parent(parent, after), menu(0), visible(v), goParent(true)
-	{
-		init();
-	}
-	~ConfigItem(void);
-	void init(void);
-	void okRename(int col);
-	void updateMenu(void);
-	void testUpdateMenu(bool v);
-	ConfigList* listView() const
-	{
-		return (ConfigList*)Parent::listView();
-	}
-	ConfigItem* firstChild() const
-	{
-		return (ConfigItem *)Parent::firstChild();
-	}
-	ConfigItem* nextSibling() const
-	{
-		return (ConfigItem *)Parent::nextSibling();
-	}
-	void setText(colIdx idx, const QString& text)
-	{
-		Parent::setText(listView()->mapIdx(idx), text);
-	}
-	QString text(colIdx idx) const
-	{
-		return Parent::text(listView()->mapIdx(idx));
-	}
-	void setPixmap(colIdx idx, const QPixmap& pm)
-	{
-		Parent::setPixmap(listView()->mapIdx(idx), pm);
-	}
-	const QPixmap* pixmap(colIdx idx) const
-	{
-		return Parent::pixmap(listView()->mapIdx(idx));
-	}
-	void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align);
-
-	ConfigItem* nextItem;
-	struct menu *menu;
-	bool visible;
-	bool goParent;
-};
-
-class ConfigLineEdit : public QLineEdit {
-	Q_OBJECT
-	typedef class QLineEdit Parent;
-public:
-	ConfigLineEdit(ConfigView* parent);
-	ConfigView* parent(void) const
-	{
-		return (ConfigView*)Parent::parent();
-	}
-	void show(ConfigItem *i);
-	void keyPressEvent(QKeyEvent *e);
-
-public:
-	ConfigItem *item;
-};
-
-class ConfigView : public Q3VBox {
-	Q_OBJECT
-	typedef class Q3VBox Parent;
-public:
-	ConfigView(QWidget* parent, const char *name = 0);
-	~ConfigView(void);
-	static void updateList(ConfigItem* item);
-	static void updateListAll(void);
-
-	bool showName(void) const { return list->showName; }
-	bool showRange(void) const { return list->showRange; }
-	bool showData(void) const { return list->showData; }
-public slots:
-	void setShowName(bool);
-	void setShowRange(bool);
-	void setShowData(bool);
-	void setOptionMode(QAction *);
-signals:
-	void showNameChanged(bool);
-	void showRangeChanged(bool);
-	void showDataChanged(bool);
-public:
-	ConfigList* list;
-	ConfigLineEdit* lineEdit;
-
-	static ConfigView* viewList;
-	ConfigView* nextView;
-
-	static QAction *showNormalAction;
-	static QAction *showAllAction;
-	static QAction *showPromptAction;
-};
-
-class ConfigInfoView : public Q3TextBrowser {
-	Q_OBJECT
-	typedef class Q3TextBrowser Parent;
-public:
-	ConfigInfoView(QWidget* parent, const char *name = 0);
-	bool showDebug(void) const { return _showDebug; }
-
-public slots:
-	void setInfo(struct menu *menu);
-	void saveSettings(void);
-	void setShowDebug(bool);
-
-signals:
-	void showDebugChanged(bool);
-	void menuSelected(struct menu *);
-
-protected:
-	void symbolInfo(void);
-	void menuInfo(void);
-	QString debug_info(struct symbol *sym);
-	static QString print_filter(const QString &str);
-	static void expr_print_help(void *data, struct symbol *sym, const char *str);
-	Q3PopupMenu* createPopupMenu(const QPoint& pos);
-	void contentsContextMenuEvent(QContextMenuEvent *e);
-
-	struct symbol *sym;
-	struct menu *_menu;
-	bool _showDebug;
-};
-
-class ConfigSearchWindow : public QDialog {
-	Q_OBJECT
-	typedef class QDialog Parent;
-public:
-	ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0);
-
-public slots:
-	void saveSettings(void);
-	void search(void);
-
-protected:
-	QLineEdit* editField;
-	QPushButton* searchButton;
-	QSplitter* split;
-	ConfigView* list;
-	ConfigInfoView* info;
-
-	struct symbol **result;
-};
-
-class ConfigMainWindow : public Q3MainWindow {
-	Q_OBJECT
-
-	static Q3Action *saveAction;
-	static void conf_changed(void);
-public:
-	ConfigMainWindow(void);
-public slots:
-	void changeMenu(struct menu *);
-	void setMenuLink(struct menu *);
-	void listFocusChanged(void);
-	void goBack(void);
-	void loadConfig(void);
-	bool saveConfig(void);
-	void saveConfigAs(void);
-	void searchConfig(void);
-	void showSingleView(void);
-	void showSplitView(void);
-	void showFullView(void);
-	void showIntro(void);
-	void showAbout(void);
-	void saveSettings(void);
-
-protected:
-	void closeEvent(QCloseEvent *e);
-
-	ConfigSearchWindow *searchWindow;
-	ConfigView *menuView;
-	ConfigList *menuList;
-	ConfigView *configView;
-	ConfigList *configList;
-	ConfigInfoView *helpText;
-	Q3ToolBar *toolBar;
-	Q3Action *backAction;
-	QSplitter* split1;
-	QSplitter* split2;
-};
diff --git a/support/kconfig/streamline_config.pl b/support/kconfig/streamline_config.pl
deleted file mode 100644
index 4606cdfb..00000000
--- a/support/kconfig/streamline_config.pl
+++ /dev/null
@@ -1,640 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright 2005-2009 - Steven Rostedt
-# Licensed under the terms of the GNU GPL License version 2
-#
-#  It's simple enough to figure out how this works.
-#  If not, then you can ask me at stripconfig@goodmis.org
-#
-# What it does?
-#
-#   If you have installed a Linux kernel from a distribution
-#   that turns on way too many modules than you need, and
-#   you only want the modules you use, then this program
-#   is perfect for you.
-#
-#   It gives you the ability to turn off all the modules that are
-#   not loaded on your system.
-#
-# Howto:
-#
-#  1. Boot up the kernel that you want to stream line the config on.
-#  2. Change directory to the directory holding the source of the
-#       kernel that you just booted.
-#  3. Copy the configuraton file to this directory as .config
-#  4. Have all your devices that you need modules for connected and
-#      operational (make sure that their corresponding modules are loaded)
-#  5. Run this script redirecting the output to some other file
-#       like config_strip.
-#  6. Back up your old config (if you want too).
-#  7. copy the config_strip file to .config
-#  8. Run "make oldconfig"
-#
-#  Now your kernel is ready to be built with only the modules that
-#  are loaded.
-#
-# Here's what I did with my Debian distribution.
-#
-#    cd /usr/src/linux-2.6.10
-#    cp /boot/config-2.6.10-1-686-smp .config
-#    ~/bin/streamline_config > config_strip
-#    mv .config config_sav
-#    mv config_strip .config
-#    make oldconfig
-#
-use strict;
-use Getopt::Long;
-
-# set the environment variable LOCALMODCONFIG_DEBUG to get
-# debug output.
-my $debugprint = 0;
-$debugprint = 1 if (defined($ENV{LOCALMODCONFIG_DEBUG}));
-
-sub dprint {
-    return if (!$debugprint);
-    print STDERR @_;
-}
-
-my $config = ".config";
-
-my $uname = `uname -r`;
-chomp $uname;
-
-my @searchconfigs = (
-	{
-	    "file" => ".config",
-	    "exec" => "cat",
-	},
-	{
-	    "file" => "/proc/config.gz",
-	    "exec" => "zcat",
-	},
-	{
-	    "file" => "/boot/config-$uname",
-	    "exec" => "cat",
-	},
-	{
-	    "file" => "/boot/vmlinuz-$uname",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "vmlinux",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "/lib/modules/$uname/kernel/kernel/configs.ko",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "kernel/configs.ko",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "kernel/configs.o",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-);
-
-sub read_config {
-    foreach my $conf (@searchconfigs) {
-	my $file = $conf->{"file"};
-
-	next if ( ! -f "$file");
-
-	if (defined($conf->{"test"})) {
-	    `$conf->{"test"} $conf->{"file"} 2>/dev/null`;
-	    next if ($?);
-	}
-
-	my $exec = $conf->{"exec"};
-
-	print STDERR "using config: '$file'\n";
-
-	open(my $infile, '-|', "$exec $file") || die "Failed to run $exec $file";
-	my @x = <$infile>;
-	close $infile;
-	return @x;
-    }
-    die "No config file found";
-}
-
-my @config_file = read_config;
-
-# Parse options
-my $localmodconfig = 0;
-my $localyesconfig = 0;
-
-GetOptions("localmodconfig" => \$localmodconfig,
-	   "localyesconfig" => \$localyesconfig);
-
-# Get the build source and top level Kconfig file (passed in)
-my $ksource = ($ARGV[0] ? $ARGV[0] : '.');
-my $kconfig = $ARGV[1];
-my $lsmod_file = $ENV{'LSMOD'};
-
-my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
-chomp @makefiles;
-
-my %depends;
-my %selects;
-my %prompts;
-my %objects;
-my $var;
-my $iflevel = 0;
-my @ifdeps;
-
-# prevent recursion
-my %read_kconfigs;
-
-sub read_kconfig {
-    my ($kconfig) = @_;
-
-    my $state = "NONE";
-    my $config;
-
-    my $cont = 0;
-    my $line;
-
-    my $source = "$ksource/$kconfig";
-    my $last_source = "";
-
-    # Check for any environment variables used
-    while ($source =~ /\$(\w+)/ && $last_source ne $source) {
-	my $env = $1;
-	$last_source = $source;
-	$source =~ s/\$$env/$ENV{$env}/;
-    }
-
-    open(my $kinfile, '<', $source) || die "Can't open $kconfig";
-    while (<$kinfile>) {
-	chomp;
-
-	# Make sure that lines ending with \ continue
-	if ($cont) {
-	    $_ = $line . " " . $_;
-	}
-
-	if (s/\\$//) {
-	    $cont = 1;
-	    $line = $_;
-	    next;
-	}
-
-	$cont = 0;
-
-	# collect any Kconfig sources
-	if (/^source\s*"(.*)"/) {
-	    my $kconfig = $1;
-	    # prevent reading twice.
-	    if (!defined($read_kconfigs{$kconfig})) {
-		$read_kconfigs{$kconfig} = 1;
-		read_kconfig($kconfig);
-	    }
-	    next;
-	}
-
-	# configs found
-	if (/^\s*(menu)?config\s+(\S+)\s*$/) {
-	    $state = "NEW";
-	    $config = $2;
-
-	    # Add depends for 'if' nesting
-	    for (my $i = 0; $i < $iflevel; $i++) {
-		if ($i) {
-		    $depends{$config} .= " " . $ifdeps[$i];
-		} else {
-		    $depends{$config} = $ifdeps[$i];
-		}
-		$state = "DEP";
-	    }
-
-	# collect the depends for the config
-	} elsif ($state eq "NEW" && /^\s*depends\s+on\s+(.*)$/) {
-	    $state = "DEP";
-	    $depends{$config} = $1;
-	} elsif ($state eq "DEP" && /^\s*depends\s+on\s+(.*)$/) {
-	    $depends{$config} .= " " . $1;
-
-	# Get the configs that select this config
-	} elsif ($state ne "NONE" && /^\s*select\s+(\S+)/) {
-	    my $conf = $1;
-	    if (defined($selects{$conf})) {
-		$selects{$conf} .= " " . $config;
-	    } else {
-		$selects{$conf} = $config;
-	    }
-
-	# configs without prompts must be selected
-	} elsif ($state ne "NONE" && /^\s*tristate\s\S/) {
-	    # note if the config has a prompt
-	    $prompts{$config} = 1;
-
-	# Check for if statements
-	} elsif (/^if\s+(.*\S)\s*$/) {
-	    my $deps = $1;
-	    # remove beginning and ending non text
-	    $deps =~ s/^[^a-zA-Z0-9_]*//;
-	    $deps =~ s/[^a-zA-Z0-9_]*$//;
-
-	    my @deps = split /[^a-zA-Z0-9_]+/, $deps;
-
-	    $ifdeps[$iflevel++] = join ':', @deps;
-
-	} elsif (/^endif/) {
-
-	    $iflevel-- if ($iflevel);
-
-	# stop on "help"
-	} elsif (/^\s*help\s*$/) {
-	    $state = "NONE";
-	}
-    }
-    close($kinfile);
-}
-
-if ($kconfig) {
-    read_kconfig($kconfig);
-}
-
-# Makefiles can use variables to define their dependencies
-sub convert_vars {
-    my ($line, %vars) = @_;
-
-    my $process = "";
-
-    while ($line =~ s/^(.*?)(\$\((.*?)\))//) {
-	my $start = $1;
-	my $variable = $2;
-	my $var = $3;
-
-	if (defined($vars{$var})) {
-	    $process .= $start . $vars{$var};
-	} else {
-	    $process .= $start . $variable;
-	}
-    }
-
-    $process .= $line;
-
-    return $process;
-}
-
-# Read all Makefiles to map the configs to the objects
-foreach my $makefile (@makefiles) {
-
-    my $line = "";
-    my %make_vars;
-
-    open(my $infile, '<', $makefile) || die "Can't open $makefile";
-    while (<$infile>) {
-	# if this line ends with a backslash, continue
-	chomp;
-	if (/^(.*)\\$/) {
-	    $line .= $1;
-	    next;
-	}
-
-	$line .= $_;
-	$_ = $line;
-	$line = "";
-
-	my $objs;
-
-	# Convert variables in a line (could define configs)
-	$_ = convert_vars($_, %make_vars);
-
-	# collect objects after obj-$(CONFIG_FOO_BAR)
-	if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
-	    $var = $1;
-	    $objs = $2;
-
-	# check if variables are set
-	} elsif (/^\s*(\S+)\s*[:]?=\s*(.*\S)/) {
-	    $make_vars{$1} = $2;
-	}
-	if (defined($objs)) {
-	    foreach my $obj (split /\s+/,$objs) {
-		$obj =~ s/-/_/g;
-		if ($obj =~ /(.*)\.o$/) {
-		    # Objects may be enabled by more than one config.
-		    # Store configs in an array.
-		    my @arr;
-
-		    if (defined($objects{$1})) {
-			@arr = @{$objects{$1}};
-		    }
-
-		    $arr[$#arr+1] = $var;
-
-		    # The objects have a hash mapping to a reference
-		    # of an array of configs.
-		    $objects{$1} = \@arr;
-		}
-	    }
-	}
-    }
-    close($infile);
-}
-
-my %modules;
-my $linfile;
-
-if (defined($lsmod_file)) {
-    if ( ! -f $lsmod_file) {
-	if ( -f $ENV{'objtree'}."/".$lsmod_file) {
-	    $lsmod_file = $ENV{'objtree'}."/".$lsmod_file;
-	} else {
-		die "$lsmod_file not found";
-	}
-    }
-
-    my $otype = ( -x $lsmod_file) ? '-|' : '<';
-    open($linfile, $otype, $lsmod_file);
-
-} else {
-
-    # see what modules are loaded on this system
-    my $lsmod;
-
-    foreach my $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
-	if ( -x "$dir/lsmod" ) {
-	    $lsmod = "$dir/lsmod";
-	    last;
-	}
-}
-    if (!defined($lsmod)) {
-	# try just the path
-	$lsmod = "lsmod";
-    }
-
-    open($linfile, '-|', $lsmod) || die "Can not call lsmod with $lsmod";
-}
-
-while (<$linfile>) {
-	next if (/^Module/);  # Skip the first line.
-	if (/^(\S+)/) {
-		$modules{$1} = 1;
-	}
-}
-close ($linfile);
-
-# add to the configs hash all configs that are needed to enable
-# a loaded module. This is a direct obj-${CONFIG_FOO} += bar.o
-# where we know we need bar.o so we add FOO to the list.
-my %configs;
-foreach my $module (keys(%modules)) {
-    if (defined($objects{$module})) {
-	my @arr = @{$objects{$module}};
-	foreach my $conf (@arr) {
-	    $configs{$conf} = $module;
-	    dprint "$conf added by direct ($module)\n";
-	    if ($debugprint) {
-		my $c=$conf;
-		$c =~ s/^CONFIG_//;
-		if (defined($depends{$c})) {
-		    dprint " deps = $depends{$c}\n";
-		} else {
-		    dprint " no deps\n";
-		}
-	    }
-	}
-    } else {
-	# Most likely, someone has a custom (binary?) module loaded.
-	print STDERR "$module config not found!!\n";
-    }
-}
-
-# Read the current config, and see what is enabled. We want to
-# ignore configs that we would not enable anyway.
-
-my %orig_configs;
-my $valid = "A-Za-z_0-9";
-
-foreach my $line (@config_file) {
-    $_ = $line;
-
-    if (/(CONFIG_[$valid]*)=(m|y)/) {
-	$orig_configs{$1} = $2;
-    }
-}
-
-my $repeat = 1;
-
-my $depconfig;
-
-#
-# Note, we do not care about operands (like: &&, ||, !) we want to add any
-# config that is in the depend list of another config. This script does
-# not enable configs that are not already enabled. If we come across a
-# config A that depends on !B, we can still add B to the list of depends
-# to keep on. If A was on in the original config, B would not have been
-# and B would not be turned on by this script.
-#
-sub parse_config_depends
-{
-    my ($p) = @_;
-
-    while ($p =~ /[$valid]/) {
-
-	if ($p =~ /^[^$valid]*([$valid]+)/) {
-	    my $conf = "CONFIG_" . $1;
-
-	    $p =~ s/^[^$valid]*[$valid]+//;
-
-	    # We only need to process if the depend config is a module
-	    if (!defined($orig_configs{$conf}) || !$orig_configs{conf} eq "m") {
-		next;
-	    }
-
-	    if (!defined($configs{$conf})) {
-		# We must make sure that this config has its
-		# dependencies met.
-		$repeat = 1; # do again
-		dprint "$conf selected by depend $depconfig\n";
-		$configs{$conf} = 1;
-	    }
-	} else {
-	    die "this should never happen";
-	}
-    }
-}
-
-# Select is treated a bit differently than depends. We call this
-# when a config has no prompt and requires another config to be
-# selected. We use to just select all configs that selected this
-# config, but found that that can balloon into enabling hundreds
-# of configs that we do not care about.
-#
-# The idea is we look at all the configs that select it. If one
-# is already in our list of configs to enable, then there's nothing
-# else to do. If there isn't, we pick the first config that was
-# enabled in the orignal config and use that.
-sub parse_config_selects
-{
-    my ($config, $p) = @_;
-
-    my $next_config;
-
-    while ($p =~ /[$valid]/) {
-
-	if ($p =~ /^[^$valid]*([$valid]+)/) {
-	    my $conf = "CONFIG_" . $1;
-
-	    $p =~ s/^[^$valid]*[$valid]+//;
-
-	    # Make sure that this config exists in the current .config file
-	    if (!defined($orig_configs{$conf})) {
-		dprint "$conf not set for $config select\n";
-		next;
-	    }
-
-	    # Check if something other than a module selects this config
-	    if (defined($orig_configs{$conf}) && $orig_configs{$conf} ne "m") {
-		dprint "$conf (non module) selects config, we are good\n";
-		# we are good with this
-		return;
-	    }
-	    if (defined($configs{$conf})) {
-		dprint "$conf selects $config so we are good\n";
-		# A set config selects this config, we are good
-		return;
-	    }
-	    # Set this config to be selected
-	    if (!defined($next_config)) {
-		$next_config = $conf;
-	    }
-	} else {
-	    die "this should never happen";
-	}
-    }
-
-    # If no possible config selected this, then something happened.
-    if (!defined($next_config)) {
-	print STDERR "WARNING: $config is required, but nothing in the\n";
-	print STDERR "  current config selects it.\n";
-	return;
-    }
-
-    # If we are here, then we found no config that is set and
-    # selects this config. Repeat.
-    $repeat = 1;
-    # Make this config need to be selected
-    $configs{$next_config} = 1;
-    dprint "$next_config selected by select $config\n";
-}
-
-my %process_selects;
-
-# loop through all configs, select their dependencies.
-sub loop_depend {
-    $repeat = 1;
-
-    while ($repeat) {
-	$repeat = 0;
-
-      forloop:
-	foreach my $config (keys %configs) {
-
-	    # If this config is not a module, we do not need to process it
-	    if (defined($orig_configs{$config}) && $orig_configs{$config} ne "m") {
-		next forloop;
-	    }
-
-	    $config =~ s/^CONFIG_//;
-	    $depconfig = $config;
-
-	    if (defined($depends{$config})) {
-		# This config has dependencies. Make sure they are also included
-		parse_config_depends $depends{$config};
-	    }
-
-	    # If the config has no prompt, then we need to check if a config
-	    # that is enabled selected it. Or if we need to enable one.
-	    if (!defined($prompts{$config}) && defined($selects{$config})) {
-		$process_selects{$config} = 1;
-	    }
-	}
-    }
-}
-
-sub loop_select {
-
-    foreach my $config (keys %process_selects) {
-	$config =~ s/^CONFIG_//;
-
-	dprint "Process select $config\n";
-
-	# config has no prompt and must be selected.
-	parse_config_selects $config, $selects{$config};
-    }
-}
-
-while ($repeat) {
-    # Get the first set of configs and their dependencies.
-    loop_depend;
-
-    $repeat = 0;
-
-    # Now we need to see if we have to check selects;
-    loop_select;
-}	    
-
-my %setconfigs;
-
-# Finally, read the .config file and turn off any module enabled that
-# we could not find a reason to keep enabled.
-foreach my $line (@config_file) {
-    $_ = $line;
-
-    if (/CONFIG_IKCONFIG/) {
-	if (/# CONFIG_IKCONFIG is not set/) {
-	    # enable IKCONFIG at least as a module
-	    print "CONFIG_IKCONFIG=m\n";
-	    # don't ask about PROC
-	    print "# CONFIG_IKCONFIG_PROC is not set\n";
-	} else {
-	    print;
-	}
-	next;
-    }
-
-    if (/^(CONFIG.*)=(m|y)/) {
-	if (defined($configs{$1})) {
-	    if ($localyesconfig) {
-	        $setconfigs{$1} = 'y';
-		print "$1=y\n";
-		next;
-	    } else {
-	        $setconfigs{$1} = $2;
-	    }
-	} elsif ($2 eq "m") {
-	    print "# $1 is not set\n";
-	    next;
-	}
-    }
-    print;
-}
-
-# Integrity check, make sure all modules that we want enabled do
-# indeed have their configs set.
-loop:
-foreach my $module (keys(%modules)) {
-    if (defined($objects{$module})) {
-	my @arr = @{$objects{$module}};
-	foreach my $conf (@arr) {
-	    if (defined($setconfigs{$conf})) {
-		next loop;
-	    }
-	}
-	print STDERR "module $module did not have configs";
-	foreach my $conf (@arr) {
-	    print STDERR " " , $conf;
-	}
-	print STDERR "\n";
-    }
-}
diff --git a/support/kconfig/symbol.c b/support/kconfig/symbol.c
deleted file mode 100644
index 7caabdb5..00000000
--- a/support/kconfig/symbol.c
+++ /dev/null
@@ -1,1373 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <regex.h>
-#include <sys/utsname.h>
-
-#include "lkc.h"
-
-struct symbol symbol_yes = {
-	.name = "y",
-	.curr = { "y", yes },
-	.flags = SYMBOL_CONST|SYMBOL_VALID,
-}, symbol_mod = {
-	.name = "m",
-	.curr = { "m", mod },
-	.flags = SYMBOL_CONST|SYMBOL_VALID,
-}, symbol_no = {
-	.name = "n",
-	.curr = { "n", no },
-	.flags = SYMBOL_CONST|SYMBOL_VALID,
-}, symbol_empty = {
-	.name = "",
-	.curr = { "", no },
-	.flags = SYMBOL_VALID,
-};
-
-struct symbol *sym_defconfig_list;
-struct symbol *modules_sym;
-tristate modules_val;
-
-struct expr *sym_env_list;
-
-static void sym_add_default(struct symbol *sym, const char *def)
-{
-	struct property *prop = prop_alloc(P_DEFAULT, sym);
-
-	prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
-}
-
-void sym_init(void)
-{
-	struct symbol *sym;
-	struct utsname uts;
-	static bool inited = false;
-
-	if (inited)
-		return;
-	inited = true;
-
-	uname(&uts);
-
-	sym = sym_lookup("UNAME_RELEASE", 0);
-	sym->type = S_STRING;
-	sym->flags |= SYMBOL_AUTO;
-	sym_add_default(sym, uts.release);
-}
-
-enum symbol_type sym_get_type(struct symbol *sym)
-{
-	enum symbol_type type = sym->type;
-
-	if (type == S_TRISTATE) {
-		if (sym_is_choice_value(sym) && sym->visible == yes)
-			type = S_BOOLEAN;
-		else if (modules_val == no)
-			type = S_BOOLEAN;
-	}
-	return type;
-}
-
-const char *sym_type_name(enum symbol_type type)
-{
-	switch (type) {
-	case S_BOOLEAN:
-		return "boolean";
-	case S_TRISTATE:
-		return "tristate";
-	case S_INT:
-		return "integer";
-	case S_HEX:
-		return "hex";
-	case S_STRING:
-		return "string";
-	case S_UNKNOWN:
-		return "unknown";
-	case S_OTHER:
-		break;
-	}
-	return "???";
-}
-
-struct property *sym_get_choice_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_choices(sym, prop)
-		return prop;
-	return NULL;
-}
-
-struct property *sym_get_env_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_properties(sym, prop, P_ENV)
-		return prop;
-	return NULL;
-}
-
-struct property *sym_get_default_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_defaults(sym, prop) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		if (prop->visible.tri != no)
-			return prop;
-	}
-	return NULL;
-}
-
-static struct property *sym_get_range_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_properties(sym, prop, P_RANGE) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		if (prop->visible.tri != no)
-			return prop;
-	}
-	return NULL;
-}
-
-static long long sym_get_range_val(struct symbol *sym, int base)
-{
-	sym_calc_value(sym);
-	switch (sym->type) {
-	case S_INT:
-		base = 10;
-		break;
-	case S_HEX:
-		base = 16;
-		break;
-	default:
-		break;
-	}
-	return strtoll(sym->curr.val, NULL, base);
-}
-
-static void sym_validate_range(struct symbol *sym)
-{
-	struct property *prop;
-	int base;
-	long long val, val2;
-	char str[64];
-
-	switch (sym->type) {
-	case S_INT:
-		base = 10;
-		break;
-	case S_HEX:
-		base = 16;
-		break;
-	default:
-		return;
-	}
-	prop = sym_get_range_prop(sym);
-	if (!prop)
-		return;
-	val = strtoll(sym->curr.val, NULL, base);
-	val2 = sym_get_range_val(prop->expr->left.sym, base);
-	if (val >= val2) {
-		val2 = sym_get_range_val(prop->expr->right.sym, base);
-		if (val <= val2)
-			return;
-	}
-	if (sym->type == S_INT)
-		sprintf(str, "%lld", val2);
-	else
-		sprintf(str, "0x%llx", val2);
-	sym->curr.val = strdup(str);
-}
-
-static void sym_calc_visibility(struct symbol *sym)
-{
-	struct property *prop;
-	tristate tri;
-
-	/* any prompt visible? */
-	tri = no;
-	for_all_prompts(sym, prop) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		tri = EXPR_OR(tri, prop->visible.tri);
-	}
-	if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
-		tri = yes;
-	if (sym->visible != tri) {
-		sym->visible = tri;
-		sym_set_changed(sym);
-	}
-	if (sym_is_choice_value(sym))
-		return;
-	/* defaulting to "yes" if no explicit "depends on" are given */
-	tri = yes;
-	if (sym->dir_dep.expr)
-		tri = expr_calc_value(sym->dir_dep.expr);
-	if (tri == mod)
-		tri = yes;
-	if (sym->dir_dep.tri != tri) {
-		sym->dir_dep.tri = tri;
-		sym_set_changed(sym);
-	}
-	tri = no;
-	if (sym->rev_dep.expr)
-		tri = expr_calc_value(sym->rev_dep.expr);
-	if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
-		tri = yes;
-	if (sym->rev_dep.tri != tri) {
-		sym->rev_dep.tri = tri;
-		sym_set_changed(sym);
-	}
-}
-
-/*
- * Find the default symbol for a choice.
- * First try the default values for the choice symbol
- * Next locate the first visible choice value
- * Return NULL if none was found
- */
-struct symbol *sym_choice_default(struct symbol *sym)
-{
-	struct symbol *def_sym;
-	struct property *prop;
-	struct expr *e;
-
-	/* any of the defaults visible? */
-	for_all_defaults(sym, prop) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		if (prop->visible.tri == no)
-			continue;
-		def_sym = prop_get_symbol(prop);
-		if (def_sym->visible != no)
-			return def_sym;
-	}
-
-	/* just get the first visible value */
-	prop = sym_get_choice_prop(sym);
-	expr_list_for_each_sym(prop->expr, e, def_sym)
-		if (def_sym->visible != no)
-			return def_sym;
-
-	/* failed to locate any defaults */
-	return NULL;
-}
-
-static struct symbol *sym_calc_choice(struct symbol *sym)
-{
-	struct symbol *def_sym;
-	struct property *prop;
-	struct expr *e;
-	int flags;
-
-	/* first calculate all choice values' visibilities */
-	flags = sym->flags;
-	prop = sym_get_choice_prop(sym);
-	expr_list_for_each_sym(prop->expr, e, def_sym) {
-		sym_calc_visibility(def_sym);
-		if (def_sym->visible != no)
-			flags &= def_sym->flags;
-	}
-
-	sym->flags &= flags | ~SYMBOL_DEF_USER;
-
-	/* is the user choice visible? */
-	def_sym = sym->def[S_DEF_USER].val;
-	if (def_sym && def_sym->visible != no)
-		return def_sym;
-
-	def_sym = sym_choice_default(sym);
-
-	if (def_sym == NULL)
-		/* no choice? reset tristate value */
-		sym->curr.tri = no;
-
-	return def_sym;
-}
-
-void sym_calc_value(struct symbol *sym)
-{
-	struct symbol_value newval, oldval;
-	struct property *prop;
-	struct expr *e;
-
-	if (!sym)
-		return;
-
-	if (sym->flags & SYMBOL_VALID)
-		return;
-
-	if (sym_is_choice_value(sym) &&
-	    sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) {
-		sym->flags &= ~SYMBOL_NEED_SET_CHOICE_VALUES;
-		prop = sym_get_choice_prop(sym);
-		sym_calc_value(prop_get_symbol(prop));
-	}
-
-	sym->flags |= SYMBOL_VALID;
-
-	oldval = sym->curr;
-
-	switch (sym->type) {
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		newval = symbol_empty.curr;
-		break;
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		newval = symbol_no.curr;
-		break;
-	default:
-		sym->curr.val = sym->name;
-		sym->curr.tri = no;
-		return;
-	}
-	if (!sym_is_choice_value(sym))
-		sym->flags &= ~SYMBOL_WRITE;
-
-	sym_calc_visibility(sym);
-
-	/* set default if recursively called */
-	sym->curr = newval;
-
-	switch (sym_get_type(sym)) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		if (sym_is_choice_value(sym) && sym->visible == yes) {
-			prop = sym_get_choice_prop(sym);
-			newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
-		} else {
-			if (sym->visible != no) {
-				/* if the symbol is visible use the user value
-				 * if available, otherwise try the default value
-				 */
-				sym->flags |= SYMBOL_WRITE;
-				if (sym_has_value(sym)) {
-					newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
-							      sym->visible);
-					goto calc_newval;
-				}
-			}
-			if (sym->rev_dep.tri != no)
-				sym->flags |= SYMBOL_WRITE;
-			if (!sym_is_choice(sym)) {
-				prop = sym_get_default_prop(sym);
-				if (prop) {
-					sym->flags |= SYMBOL_WRITE;
-					newval.tri = EXPR_AND(expr_calc_value(prop->expr),
-							      prop->visible.tri);
-				}
-			}
-		calc_newval:
-			if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) {
-				struct expr *e;
-				e = expr_simplify_unmet_dep(sym->rev_dep.expr,
-				    sym->dir_dep.expr);
-				fprintf(stderr, "warning: (");
-				expr_fprint(e, stderr);
-				fprintf(stderr, ") selects %s which has unmet direct dependencies (",
-					sym->name);
-				expr_fprint(sym->dir_dep.expr, stderr);
-				fprintf(stderr, ")\n");
-				expr_free(e);
-			}
-			newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
-		}
-		if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
-			newval.tri = yes;
-		break;
-	case S_STRING:
-	case S_HEX:
-	case S_INT:
-		if (sym->visible != no) {
-			sym->flags |= SYMBOL_WRITE;
-			if (sym_has_value(sym)) {
-				newval.val = sym->def[S_DEF_USER].val;
-				break;
-			}
-		}
-		prop = sym_get_default_prop(sym);
-		if (prop) {
-			struct symbol *ds = prop_get_symbol(prop);
-			if (ds) {
-				sym->flags |= SYMBOL_WRITE;
-				sym_calc_value(ds);
-				newval.val = ds->curr.val;
-			}
-		}
-		break;
-	default:
-		;
-	}
-
-	sym->curr = newval;
-	if (sym_is_choice(sym) && newval.tri == yes)
-		sym->curr.val = sym_calc_choice(sym);
-	sym_validate_range(sym);
-
-	if (memcmp(&oldval, &sym->curr, sizeof(oldval))) {
-		sym_set_changed(sym);
-		if (modules_sym == sym) {
-			sym_set_all_changed();
-			modules_val = modules_sym->curr.tri;
-		}
-	}
-
-	if (sym_is_choice(sym)) {
-		struct symbol *choice_sym;
-
-		prop = sym_get_choice_prop(sym);
-		expr_list_for_each_sym(prop->expr, e, choice_sym) {
-			if ((sym->flags & SYMBOL_WRITE) &&
-			    choice_sym->visible != no)
-				choice_sym->flags |= SYMBOL_WRITE;
-			if (sym->flags & SYMBOL_CHANGED)
-				sym_set_changed(choice_sym);
-		}
-	}
-
-	if (sym->flags & SYMBOL_AUTO)
-		sym->flags &= ~SYMBOL_WRITE;
-
-	if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES)
-		set_all_choice_values(sym);
-}
-
-void sym_clear_all_valid(void)
-{
-	struct symbol *sym;
-	int i;
-
-	for_all_symbols(i, sym)
-		sym->flags &= ~SYMBOL_VALID;
-	sym_add_change_count(1);
-	if (modules_sym)
-		sym_calc_value(modules_sym);
-}
-
-void sym_set_changed(struct symbol *sym)
-{
-	struct property *prop;
-
-	sym->flags |= SYMBOL_CHANGED;
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->menu)
-			prop->menu->flags |= MENU_CHANGED;
-	}
-}
-
-void sym_set_all_changed(void)
-{
-	struct symbol *sym;
-	int i;
-
-	for_all_symbols(i, sym)
-		sym_set_changed(sym);
-}
-
-bool sym_tristate_within_range(struct symbol *sym, tristate val)
-{
-	int type = sym_get_type(sym);
-
-	if (sym->visible == no)
-		return false;
-
-	if (type != S_BOOLEAN && type != S_TRISTATE)
-		return false;
-
-	if (type == S_BOOLEAN && val == mod)
-		return false;
-	if (sym->visible <= sym->rev_dep.tri)
-		return false;
-	if (sym_is_choice_value(sym) && sym->visible == yes)
-		return val == yes;
-	return val >= sym->rev_dep.tri && val <= sym->visible;
-}
-
-bool sym_set_tristate_value(struct symbol *sym, tristate val)
-{
-	tristate oldval = sym_get_tristate_value(sym);
-
-	if (oldval != val && !sym_tristate_within_range(sym, val))
-		return false;
-
-	if (!(sym->flags & SYMBOL_DEF_USER)) {
-		sym->flags |= SYMBOL_DEF_USER;
-		sym_set_changed(sym);
-	}
-	/*
-	 * setting a choice value also resets the new flag of the choice
-	 * symbol and all other choice values.
-	 */
-	if (sym_is_choice_value(sym) && val == yes) {
-		struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
-		struct property *prop;
-		struct expr *e;
-
-		cs->def[S_DEF_USER].val = sym;
-		cs->flags |= SYMBOL_DEF_USER;
-		prop = sym_get_choice_prop(cs);
-		for (e = prop->expr; e; e = e->left.expr) {
-			if (e->right.sym->visible != no)
-				e->right.sym->flags |= SYMBOL_DEF_USER;
-		}
-	}
-
-	sym->def[S_DEF_USER].tri = val;
-	if (oldval != val)
-		sym_clear_all_valid();
-
-	return true;
-}
-
-tristate sym_toggle_tristate_value(struct symbol *sym)
-{
-	tristate oldval, newval;
-
-	oldval = newval = sym_get_tristate_value(sym);
-	do {
-		switch (newval) {
-		case no:
-			newval = mod;
-			break;
-		case mod:
-			newval = yes;
-			break;
-		case yes:
-			newval = no;
-			break;
-		}
-		if (sym_set_tristate_value(sym, newval))
-			break;
-	} while (oldval != newval);
-	return newval;
-}
-
-bool sym_string_valid(struct symbol *sym, const char *str)
-{
-	signed char ch;
-
-	switch (sym->type) {
-	case S_STRING:
-		return true;
-	case S_INT:
-		ch = *str++;
-		if (ch == '-')
-			ch = *str++;
-		if (!isdigit(ch))
-			return false;
-		if (ch == '0' && *str != 0)
-			return false;
-		while ((ch = *str++)) {
-			if (!isdigit(ch))
-				return false;
-		}
-		return true;
-	case S_HEX:
-		if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
-			str += 2;
-		ch = *str++;
-		do {
-			if (!isxdigit(ch))
-				return false;
-		} while ((ch = *str++));
-		return true;
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (str[0]) {
-		case 'y': case 'Y':
-		case 'm': case 'M':
-		case 'n': case 'N':
-			return true;
-		}
-		return false;
-	default:
-		return false;
-	}
-}
-
-bool sym_string_within_range(struct symbol *sym, const char *str)
-{
-	struct property *prop;
-	long long val;
-
-	switch (sym->type) {
-	case S_STRING:
-		return sym_string_valid(sym, str);
-	case S_INT:
-		if (!sym_string_valid(sym, str))
-			return false;
-		prop = sym_get_range_prop(sym);
-		if (!prop)
-			return true;
-		val = strtoll(str, NULL, 10);
-		return val >= sym_get_range_val(prop->expr->left.sym, 10) &&
-		       val <= sym_get_range_val(prop->expr->right.sym, 10);
-	case S_HEX:
-		if (!sym_string_valid(sym, str))
-			return false;
-		prop = sym_get_range_prop(sym);
-		if (!prop)
-			return true;
-		val = strtoll(str, NULL, 16);
-		return val >= sym_get_range_val(prop->expr->left.sym, 16) &&
-		       val <= sym_get_range_val(prop->expr->right.sym, 16);
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (str[0]) {
-		case 'y': case 'Y':
-			return sym_tristate_within_range(sym, yes);
-		case 'm': case 'M':
-			return sym_tristate_within_range(sym, mod);
-		case 'n': case 'N':
-			return sym_tristate_within_range(sym, no);
-		}
-		return false;
-	default:
-		return false;
-	}
-}
-
-bool sym_set_string_value(struct symbol *sym, const char *newval)
-{
-	const char *oldval;
-	char *val;
-	int size;
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (newval[0]) {
-		case 'y': case 'Y':
-			return sym_set_tristate_value(sym, yes);
-		case 'm': case 'M':
-			return sym_set_tristate_value(sym, mod);
-		case 'n': case 'N':
-			return sym_set_tristate_value(sym, no);
-		}
-		return false;
-	default:
-		;
-	}
-
-	if (!sym_string_within_range(sym, newval))
-		return false;
-
-	if (!(sym->flags & SYMBOL_DEF_USER)) {
-		sym->flags |= SYMBOL_DEF_USER;
-		sym_set_changed(sym);
-	}
-
-	oldval = sym->def[S_DEF_USER].val;
-	size = strlen(newval) + 1;
-	if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
-		size += 2;
-		sym->def[S_DEF_USER].val = val = xmalloc(size);
-		*val++ = '0';
-		*val++ = 'x';
-	} else if (!oldval || strcmp(oldval, newval))
-		sym->def[S_DEF_USER].val = val = xmalloc(size);
-	else
-		return true;
-
-	strcpy(val, newval);
-	free((void *)oldval);
-	sym_clear_all_valid();
-
-	return true;
-}
-
-/*
- * Find the default value associated to a symbol.
- * For tristate symbol handle the modules=n case
- * in which case "m" becomes "y".
- * If the symbol does not have any default then fallback
- * to the fixed default values.
- */
-const char *sym_get_string_default(struct symbol *sym)
-{
-	struct property *prop;
-	struct symbol *ds;
-	const char *str;
-	tristate val;
-
-	sym_calc_visibility(sym);
-	sym_calc_value(modules_sym);
-	val = symbol_no.curr.tri;
-	str = symbol_empty.curr.val;
-
-	/* If symbol has a default value look it up */
-	prop = sym_get_default_prop(sym);
-	if (prop != NULL) {
-		switch (sym->type) {
-		case S_BOOLEAN:
-		case S_TRISTATE:
-			/* The visibility may limit the value from yes => mod */
-			val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri);
-			break;
-		default:
-			/*
-			 * The following fails to handle the situation
-			 * where a default value is further limited by
-			 * the valid range.
-			 */
-			ds = prop_get_symbol(prop);
-			if (ds != NULL) {
-				sym_calc_value(ds);
-				str = (const char *)ds->curr.val;
-			}
-		}
-	}
-
-	/* Handle select statements */
-	val = EXPR_OR(val, sym->rev_dep.tri);
-
-	/* transpose mod to yes if modules are not enabled */
-	if (val == mod)
-		if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no)
-			val = yes;
-
-	/* transpose mod to yes if type is bool */
-	if (sym->type == S_BOOLEAN && val == mod)
-		val = yes;
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (val) {
-		case no: return "n";
-		case mod: return "m";
-		case yes: return "y";
-		}
-	case S_INT:
-	case S_HEX:
-		return str;
-	case S_STRING:
-		return str;
-	case S_OTHER:
-	case S_UNKNOWN:
-		break;
-	}
-	return "";
-}
-
-const char *sym_get_string_value(struct symbol *sym)
-{
-	tristate val;
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		val = sym_get_tristate_value(sym);
-		switch (val) {
-		case no:
-			return "n";
-		case mod:
-			sym_calc_value(modules_sym);
-			return (modules_sym->curr.tri == no) ? "n" : "m";
-		case yes:
-			return "y";
-		}
-		break;
-	default:
-		;
-	}
-	return (const char *)sym->curr.val;
-}
-
-bool sym_is_changable(struct symbol *sym)
-{
-	return sym->visible > sym->rev_dep.tri;
-}
-
-static unsigned strhash(const char *s)
-{
-	/* fnv32 hash */
-	unsigned hash = 2166136261U;
-	for (; *s; s++)
-		hash = (hash ^ *s) * 0x01000193;
-	return hash;
-}
-
-struct symbol *sym_lookup(const char *name, int flags)
-{
-	struct symbol *symbol;
-	char *new_name;
-	int hash;
-
-	if (name) {
-		if (name[0] && !name[1]) {
-			switch (name[0]) {
-			case 'y': return &symbol_yes;
-			case 'm': return &symbol_mod;
-			case 'n': return &symbol_no;
-			}
-		}
-		hash = strhash(name) % SYMBOL_HASHSIZE;
-
-		for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
-			if (symbol->name &&
-			    !strcmp(symbol->name, name) &&
-			    (flags ? symbol->flags & flags
-				   : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
-				return symbol;
-		}
-		new_name = strdup(name);
-	} else {
-		new_name = NULL;
-		hash = 0;
-	}
-
-	symbol = xmalloc(sizeof(*symbol));
-	memset(symbol, 0, sizeof(*symbol));
-	symbol->name = new_name;
-	symbol->type = S_UNKNOWN;
-	symbol->flags |= flags;
-
-	symbol->next = symbol_hash[hash];
-	symbol_hash[hash] = symbol;
-
-	return symbol;
-}
-
-struct symbol *sym_find(const char *name)
-{
-	struct symbol *symbol = NULL;
-	int hash = 0;
-
-	if (!name)
-		return NULL;
-
-	if (name[0] && !name[1]) {
-		switch (name[0]) {
-		case 'y': return &symbol_yes;
-		case 'm': return &symbol_mod;
-		case 'n': return &symbol_no;
-		}
-	}
-	hash = strhash(name) % SYMBOL_HASHSIZE;
-
-	for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
-		if (symbol->name &&
-		    !strcmp(symbol->name, name) &&
-		    !(symbol->flags & SYMBOL_CONST))
-				break;
-	}
-
-	return symbol;
-}
-
-/*
- * Expand symbol's names embedded in the string given in argument. Symbols'
- * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
- * the empty string.
- */
-const char *sym_expand_string_value(const char *in)
-{
-	const char *src;
-	char *res;
-	size_t reslen;
-
-	reslen = strlen(in) + 1;
-	res = xmalloc(reslen);
-	res[0] = '\0';
-
-	while ((src = strchr(in, '$'))) {
-		char *p, name[SYMBOL_MAXLENGTH];
-		const char *symval = "";
-		struct symbol *sym;
-		size_t newlen;
-
-		strncat(res, in, src - in);
-		src++;
-
-		p = name;
-		while (isalnum(*src) || *src == '_')
-			*p++ = *src++;
-		*p = '\0';
-
-		sym = sym_find(name);
-		if (sym != NULL) {
-			sym_calc_value(sym);
-			symval = sym_get_string_value(sym);
-		}
-
-		newlen = strlen(res) + strlen(symval) + strlen(src) + 1;
-		if (newlen > reslen) {
-			reslen = newlen;
-			res = realloc(res, reslen);
-		}
-
-		strcat(res, symval);
-		in = src;
-	}
-	strcat(res, in);
-
-	return res;
-}
-
-const char *sym_escape_string_value(const char *in)
-{
-	const char *p;
-	size_t reslen;
-	char *res;
-	size_t l;
-
-	reslen = strlen(in) + strlen("\"\"") + 1;
-
-	p = in;
-	for (;;) {
-		l = strcspn(p, "\"\\");
-		p += l;
-
-		if (p[0] == '\0')
-			break;
-
-		reslen++;
-		p++;
-	}
-
-	res = xmalloc(reslen);
-	res[0] = '\0';
-
-	strcat(res, "\"");
-
-	p = in;
-	for (;;) {
-		l = strcspn(p, "\"\\");
-		strncat(res, p, l);
-		p += l;
-
-		if (p[0] == '\0')
-			break;
-
-		strcat(res, "\\");
-		strncat(res, p++, 1);
-	}
-
-	strcat(res, "\"");
-	return res;
-}
-
-struct sym_match {
-	struct symbol	*sym;
-	off_t		so, eo;
-};
-
-/* Compare matched symbols as thus:
- * - first, symbols that match exactly
- * - then, alphabetical sort
- */
-static int sym_rel_comp(const void *sym1, const void *sym2)
-{
-	const struct sym_match *s1 = sym1;
-	const struct sym_match *s2 = sym2;
-	int exact1, exact2;
-
-	/* Exact match:
-	 * - if matched length on symbol s1 is the length of that symbol,
-	 *   then this symbol should come first;
-	 * - if matched length on symbol s2 is the length of that symbol,
-	 *   then this symbol should come first.
-	 * Note: since the search can be a regexp, both symbols may match
-	 * exactly; if this is the case, we can't decide which comes first,
-	 * and we fallback to sorting alphabetically.
-	 */
-	exact1 = (s1->eo - s1->so) == strlen(s1->sym->name);
-	exact2 = (s2->eo - s2->so) == strlen(s2->sym->name);
-	if (exact1 && !exact2)
-		return -1;
-	if (!exact1 && exact2)
-		return 1;
-
-	/* As a fallback, sort symbols alphabetically */
-	return strcmp(s1->sym->name, s2->sym->name);
-}
-
-struct symbol **sym_re_search(const char *pattern)
-{
-	struct symbol *sym, **sym_arr = NULL;
-	struct sym_match *sym_match_arr = NULL;
-	int i, cnt, size;
-	regex_t re;
-	regmatch_t match[1];
-
-	cnt = size = 0;
-	/* Skip if empty */
-	if (strlen(pattern) == 0)
-		return NULL;
-	if (regcomp(&re, pattern, REG_EXTENDED|REG_ICASE))
-		return NULL;
-
-	for_all_symbols(i, sym) {
-		if (sym->flags & SYMBOL_CONST || !sym->name)
-			continue;
-		if (regexec(&re, sym->name, 1, match, 0))
-			continue;
-		if (cnt >= size) {
-			void *tmp;
-			size += 16;
-			tmp = realloc(sym_match_arr, size * sizeof(struct sym_match));
-			if (!tmp)
-				goto sym_re_search_free;
-			sym_match_arr = tmp;
-		}
-		sym_calc_value(sym);
-		/* As regexec returned 0, we know we have a match, so
-		 * we can use match[0].rm_[se]o without further checks
-		 */
-		sym_match_arr[cnt].so = match[0].rm_so;
-		sym_match_arr[cnt].eo = match[0].rm_eo;
-		sym_match_arr[cnt++].sym = sym;
-	}
-	if (sym_match_arr) {
-		qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp);
-		sym_arr = malloc((cnt+1) * sizeof(struct symbol));
-		if (!sym_arr)
-			goto sym_re_search_free;
-		for (i = 0; i < cnt; i++)
-			sym_arr[i] = sym_match_arr[i].sym;
-		sym_arr[cnt] = NULL;
-	}
-sym_re_search_free:
-	/* sym_match_arr can be NULL if no match, but free(NULL) is OK */
-	free(sym_match_arr);
-	regfree(&re);
-
-	return sym_arr;
-}
-
-/*
- * When we check for recursive dependencies we use a stack to save
- * current state so we can print out relevant info to user.
- * The entries are located on the call stack so no need to free memory.
- * Note insert() remove() must always match to properly clear the stack.
- */
-static struct dep_stack {
-	struct dep_stack *prev, *next;
-	struct symbol *sym;
-	struct property *prop;
-	struct expr *expr;
-} *check_top;
-
-static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym)
-{
-	memset(stack, 0, sizeof(*stack));
-	if (check_top)
-		check_top->next = stack;
-	stack->prev = check_top;
-	stack->sym = sym;
-	check_top = stack;
-}
-
-static void dep_stack_remove(void)
-{
-	check_top = check_top->prev;
-	if (check_top)
-		check_top->next = NULL;
-}
-
-/*
- * Called when we have detected a recursive dependency.
- * check_top point to the top of the stact so we use
- * the ->prev pointer to locate the bottom of the stack.
- */
-static void sym_check_print_recursive(struct symbol *last_sym)
-{
-	struct dep_stack *stack;
-	struct symbol *sym, *next_sym;
-	struct menu *menu = NULL;
-	struct property *prop;
-	struct dep_stack cv_stack;
-
-	if (sym_is_choice_value(last_sym)) {
-		dep_stack_insert(&cv_stack, last_sym);
-		last_sym = prop_get_symbol(sym_get_choice_prop(last_sym));
-	}
-
-	for (stack = check_top; stack != NULL; stack = stack->prev)
-		if (stack->sym == last_sym)
-			break;
-	if (!stack) {
-		fprintf(stderr, "unexpected recursive dependency error\n");
-		return;
-	}
-
-	for (; stack; stack = stack->next) {
-		sym = stack->sym;
-		next_sym = stack->next ? stack->next->sym : last_sym;
-		prop = stack->prop;
-		if (prop == NULL)
-			prop = stack->sym->prop;
-
-		/* for choice values find the menu entry (used below) */
-		if (sym_is_choice(sym) || sym_is_choice_value(sym)) {
-			for (prop = sym->prop; prop; prop = prop->next) {
-				menu = prop->menu;
-				if (prop->menu)
-					break;
-			}
-		}
-		if (stack->sym == last_sym)
-			fprintf(stderr, "%s:%d:error: recursive dependency detected!\n",
-				prop->file->name, prop->lineno);
-		if (stack->expr) {
-			fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
-				prop->file->name, prop->lineno,
-				sym->name ? sym->name : "<choice>",
-				prop_get_type_name(prop->type),
-				next_sym->name ? next_sym->name : "<choice>");
-		} else if (stack->prop) {
-			fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n",
-				prop->file->name, prop->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		} else if (sym_is_choice(sym)) {
-			fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n",
-				menu->file->name, menu->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		} else if (sym_is_choice_value(sym)) {
-			fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
-				menu->file->name, menu->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		} else {
-			fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n",
-				prop->file->name, prop->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		}
-	}
-
-	if (check_top == &cv_stack)
-		dep_stack_remove();
-}
-
-static struct symbol *sym_check_expr_deps(struct expr *e)
-{
-	struct symbol *sym;
-
-	if (!e)
-		return NULL;
-	switch (e->type) {
-	case E_OR:
-	case E_AND:
-		sym = sym_check_expr_deps(e->left.expr);
-		if (sym)
-			return sym;
-		return sym_check_expr_deps(e->right.expr);
-	case E_NOT:
-		return sym_check_expr_deps(e->left.expr);
-	case E_EQUAL:
-	case E_UNEQUAL:
-		sym = sym_check_deps(e->left.sym);
-		if (sym)
-			return sym;
-		return sym_check_deps(e->right.sym);
-	case E_SYMBOL:
-		return sym_check_deps(e->left.sym);
-	default:
-		break;
-	}
-	printf("Oops! How to check %d?\n", e->type);
-	return NULL;
-}
-
-/* return NULL when dependencies are OK */
-static struct symbol *sym_check_sym_deps(struct symbol *sym)
-{
-	struct symbol *sym2;
-	struct property *prop;
-	struct dep_stack stack;
-
-	dep_stack_insert(&stack, sym);
-
-	sym2 = sym_check_expr_deps(sym->rev_dep.expr);
-	if (sym2)
-		goto out;
-
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->type == P_CHOICE || prop->type == P_SELECT)
-			continue;
-		stack.prop = prop;
-		sym2 = sym_check_expr_deps(prop->visible.expr);
-		if (sym2)
-			break;
-		if (prop->type != P_DEFAULT || sym_is_choice(sym))
-			continue;
-		stack.expr = prop->expr;
-		sym2 = sym_check_expr_deps(prop->expr);
-		if (sym2)
-			break;
-		stack.expr = NULL;
-	}
-
-out:
-	dep_stack_remove();
-
-	return sym2;
-}
-
-static struct symbol *sym_check_choice_deps(struct symbol *choice)
-{
-	struct symbol *sym, *sym2;
-	struct property *prop;
-	struct expr *e;
-	struct dep_stack stack;
-
-	dep_stack_insert(&stack, choice);
-
-	prop = sym_get_choice_prop(choice);
-	expr_list_for_each_sym(prop->expr, e, sym)
-		sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
-
-	choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
-	sym2 = sym_check_sym_deps(choice);
-	choice->flags &= ~SYMBOL_CHECK;
-	if (sym2)
-		goto out;
-
-	expr_list_for_each_sym(prop->expr, e, sym) {
-		sym2 = sym_check_sym_deps(sym);
-		if (sym2)
-			break;
-	}
-out:
-	expr_list_for_each_sym(prop->expr, e, sym)
-		sym->flags &= ~SYMBOL_CHECK;
-
-	if (sym2 && sym_is_choice_value(sym2) &&
-	    prop_get_symbol(sym_get_choice_prop(sym2)) == choice)
-		sym2 = choice;
-
-	dep_stack_remove();
-
-	return sym2;
-}
-
-struct symbol *sym_check_deps(struct symbol *sym)
-{
-	struct symbol *sym2;
-	struct property *prop;
-
-	if (sym->flags & SYMBOL_CHECK) {
-		sym_check_print_recursive(sym);
-		return sym;
-	}
-	if (sym->flags & SYMBOL_CHECKED)
-		return NULL;
-
-	if (sym_is_choice_value(sym)) {
-		struct dep_stack stack;
-
-		/* for choice groups start the check with main choice symbol */
-		dep_stack_insert(&stack, sym);
-		prop = sym_get_choice_prop(sym);
-		sym2 = sym_check_deps(prop_get_symbol(prop));
-		dep_stack_remove();
-	} else if (sym_is_choice(sym)) {
-		sym2 = sym_check_choice_deps(sym);
-	} else {
-		sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
-		sym2 = sym_check_sym_deps(sym);
-		sym->flags &= ~SYMBOL_CHECK;
-	}
-
-	if (sym2 && sym2 == sym)
-		sym2 = NULL;
-
-	return sym2;
-}
-
-struct property *prop_alloc(enum prop_type type, struct symbol *sym)
-{
-	struct property *prop;
-	struct property **propp;
-
-	prop = xmalloc(sizeof(*prop));
-	memset(prop, 0, sizeof(*prop));
-	prop->type = type;
-	prop->sym = sym;
-	prop->file = current_file;
-	prop->lineno = zconf_lineno();
-
-	/* append property to the prop list of symbol */
-	if (sym) {
-		for (propp = &sym->prop; *propp; propp = &(*propp)->next)
-			;
-		*propp = prop;
-	}
-
-	return prop;
-}
-
-struct symbol *prop_get_symbol(struct property *prop)
-{
-	if (prop->expr && (prop->expr->type == E_SYMBOL ||
-			   prop->expr->type == E_LIST))
-		return prop->expr->left.sym;
-	return NULL;
-}
-
-const char *prop_get_type_name(enum prop_type type)
-{
-	switch (type) {
-	case P_PROMPT:
-		return "prompt";
-	case P_ENV:
-		return "env";
-	case P_COMMENT:
-		return "comment";
-	case P_MENU:
-		return "menu";
-	case P_DEFAULT:
-		return "default";
-	case P_CHOICE:
-		return "choice";
-	case P_SELECT:
-		return "select";
-	case P_RANGE:
-		return "range";
-	case P_SYMBOL:
-		return "symbol";
-	case P_UNKNOWN:
-		break;
-	}
-	return "unknown";
-}
-
-static void prop_add_env(const char *env)
-{
-	struct symbol *sym, *sym2;
-	struct property *prop;
-	char *p;
-
-	sym = current_entry->sym;
-	sym->flags |= SYMBOL_AUTO;
-	for_all_properties(sym, prop, P_ENV) {
-		sym2 = prop_get_symbol(prop);
-		if (strcmp(sym2->name, env))
-			menu_warn(current_entry, "redefining environment symbol from %s",
-				  sym2->name);
-		return;
-	}
-
-	prop = prop_alloc(P_ENV, sym);
-	prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
-
-	sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
-	sym_env_list->right.sym = sym;
-
-	p = getenv(env);
-	if (p)
-		sym_add_default(sym, p);
-	else
-		menu_warn(current_entry, "environment variable %s undefined", env);
-}
diff --git a/support/kconfig/util.c b/support/kconfig/util.c
deleted file mode 100644
index 60eb5661..00000000
--- a/support/kconfig/util.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2002-2005 Roman Zippel <zippel@linux-m68k.org>
- * Copyright (C) 2002-2005 Sam Ravnborg <sam@ravnborg.org>
- *
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include "lkc.h"
-
-/* file already present in list? If not add it */
-struct file *file_lookup(const char *name)
-{
-	struct file *file;
-	const char *file_name = sym_expand_string_value(name);
-
-	for (file = file_list; file; file = file->next) {
-		if (!strcmp(name, file->name)) {
-			free((void *)file_name);
-			return file;
-		}
-	}
-
-	file = xmalloc(sizeof(*file));
-	memset(file, 0, sizeof(*file));
-	file->name = file_name;
-	file->next = file_list;
-	file_list = file;
-	return file;
-}
-
-/* write a dependency file as used by kbuild to track dependencies */
-int file_write_dep(const char *name)
-{
-	char *str;
-	char buf[PATH_MAX+1], buf2[PATH_MAX+1], dir[PATH_MAX+1];
-	struct symbol *sym, *env_sym;
-	struct expr *e;
-	struct file *file;
-	FILE *out;
-
-	if (!name)
-		name = ".kconfig.d";
-
-	strcpy(dir, conf_get_configname());
-	str = strrchr(dir, '/');
-	if (str)
-		str[1] = 0;
-	else
-		dir[0] = 0;
-
-	sprintf(buf, "%s..config.tmp", dir);
-	out = fopen(buf, "w");
-	if (!out)
-		return 1;
-	fprintf(out, "deps_config := \\\n");
-	for (file = file_list; file; file = file->next) {
-		if (file->next)
-			fprintf(out, "\t%s \\\n", file->name);
-		else
-			fprintf(out, "\t%s\n", file->name);
-	}
-	fprintf(out, "\n%s: \\\n"
-		     "\t$(deps_config)\n\n", conf_get_autoconfig_name());
-
-	expr_list_for_each_sym(sym_env_list, e, sym) {
-		struct property *prop;
-		const char *value;
-
-		prop = sym_get_env_prop(sym);
-		env_sym = prop_get_symbol(prop);
-		if (!env_sym)
-			continue;
-		value = getenv(env_sym->name);
-		if (!value)
-			value = "";
-		fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value);
-		fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name());
-		fprintf(out, "endif\n");
-	}
-
-	fprintf(out, "\n$(deps_config): ;\n");
-	fclose(out);
-	sprintf(buf2, "%s%s", dir, name);
-	rename(buf, buf2);
-	return 0;
-}
-
-
-/* Allocate initial growable string */
-struct gstr str_new(void)
-{
-	struct gstr gs;
-	gs.s = xmalloc(sizeof(char) * 64);
-	gs.len = 64;
-	gs.max_width = 0;
-	strcpy(gs.s, "\0");
-	return gs;
-}
-
-/* Allocate and assign growable string */
-struct gstr str_assign(const char *s)
-{
-	struct gstr gs;
-	gs.s = strdup(s);
-	gs.len = strlen(s) + 1;
-	gs.max_width = 0;
-	return gs;
-}
-
-/* Free storage for growable string */
-void str_free(struct gstr *gs)
-{
-	if (gs->s)
-		free(gs->s);
-	gs->s = NULL;
-	gs->len = 0;
-}
-
-/* Append to growable string */
-void str_append(struct gstr *gs, const char *s)
-{
-	size_t l;
-	if (s) {
-		l = strlen(gs->s) + strlen(s) + 1;
-		if (l > gs->len) {
-			gs->s   = realloc(gs->s, l);
-			gs->len = l;
-		}
-		strcat(gs->s, s);
-	}
-}
-
-/* Append printf formatted string to growable string */
-void str_printf(struct gstr *gs, const char *fmt, ...)
-{
-	va_list ap;
-	char s[10000]; /* big enough... */
-	va_start(ap, fmt);
-	vsnprintf(s, sizeof(s), fmt, ap);
-	str_append(gs, s);
-	va_end(ap);
-}
-
-/* Retrieve value of growable string */
-const char *str_get(struct gstr *gs)
-{
-	return gs->s;
-}
-
-void *xmalloc(size_t size)
-{
-	void *p = malloc(size);
-	if (p)
-		return p;
-	fprintf(stderr, "Out of memory.\n");
-	exit(1);
-}
-
-void *xcalloc(size_t nmemb, size_t size)
-{
-	void *p = calloc(nmemb, size);
-	if (p)
-		return p;
-	fprintf(stderr, "Out of memory.\n");
-	exit(1);
-}
-
-
diff --git a/support/kconfig/zconf.gperf b/support/kconfig/zconf.gperf
deleted file mode 100644
index f14ab411..00000000
--- a/support/kconfig/zconf.gperf
+++ /dev/null
@@ -1,47 +0,0 @@
-%language=ANSI-C
-%define hash-function-name kconf_id_hash
-%define lookup-function-name kconf_id_lookup
-%define string-pool-name kconf_id_strings
-%compare-strncmp
-%enum
-%pic
-%struct-type
-
-struct kconf_id;
-
-static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
-
-%%
-mainmenu,	T_MAINMENU,	TF_COMMAND
-menu,		T_MENU,		TF_COMMAND
-endmenu,	T_ENDMENU,	TF_COMMAND
-source,		T_SOURCE,	TF_COMMAND
-choice,		T_CHOICE,	TF_COMMAND
-endchoice,	T_ENDCHOICE,	TF_COMMAND
-comment,	T_COMMENT,	TF_COMMAND
-config,		T_CONFIG,	TF_COMMAND
-menuconfig,	T_MENUCONFIG,	TF_COMMAND
-help,		T_HELP,		TF_COMMAND
-if,		T_IF,		TF_COMMAND|TF_PARAM
-endif,		T_ENDIF,	TF_COMMAND
-depends,	T_DEPENDS,	TF_COMMAND
-optional,	T_OPTIONAL,	TF_COMMAND
-default,	T_DEFAULT,	TF_COMMAND, S_UNKNOWN
-prompt,		T_PROMPT,	TF_COMMAND
-tristate,	T_TYPE,		TF_COMMAND, S_TRISTATE
-def_tristate,	T_DEFAULT,	TF_COMMAND, S_TRISTATE
-bool,		T_TYPE,		TF_COMMAND, S_BOOLEAN
-boolean,	T_TYPE,		TF_COMMAND, S_BOOLEAN
-def_bool,	T_DEFAULT,	TF_COMMAND, S_BOOLEAN
-int,		T_TYPE,		TF_COMMAND, S_INT
-hex,		T_TYPE,		TF_COMMAND, S_HEX
-string,		T_TYPE,		TF_COMMAND, S_STRING
-select,		T_SELECT,	TF_COMMAND
-range,		T_RANGE,	TF_COMMAND
-visible,	T_VISIBLE,	TF_COMMAND
-option,		T_OPTION,	TF_COMMAND
-on,		T_ON,		TF_PARAM
-modules,	T_OPT_MODULES,	TF_OPTION
-defconfig_list,	T_OPT_DEFCONFIG_LIST,TF_OPTION
-env,		T_OPT_ENV,	TF_OPTION
-%%
diff --git a/support/kconfig/zconf.hash.c_shipped b/support/kconfig/zconf.hash.c_shipped
deleted file mode 100644
index 40df0005..00000000
--- a/support/kconfig/zconf.hash.c_shipped
+++ /dev/null
@@ -1,286 +0,0 @@
-/* ANSI-C code produced by gperf version 3.0.4 */
-/* Command-line: gperf -t --output-file scripts/kconfig/zconf.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/kconfig/zconf.gperf  */
-
-#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
-/* The character set is not based on ISO-646.  */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
-#endif
-
-#line 10 "scripts/kconfig/zconf.gperf"
-struct kconf_id;
-
-static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
-/* maximum key range = 71, duplicates = 0 */
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static unsigned int
-kconf_id_hash (register const char *str, register unsigned int len)
-{
-  static const unsigned char asso_values[] =
-    {
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 25, 25,
-       0,  0,  0,  5,  0,  0, 73, 73,  5,  0,
-      10,  5, 45, 73, 20, 20,  0, 15, 15, 73,
-      20, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73
-    };
-  register int hval = len;
-
-  switch (hval)
-    {
-      default:
-        hval += asso_values[(unsigned char)str[2]];
-      /*FALLTHROUGH*/
-      case 2:
-      case 1:
-        hval += asso_values[(unsigned char)str[0]];
-        break;
-    }
-  return hval + asso_values[(unsigned char)str[len - 1]];
-}
-
-struct kconf_id_strings_t
-  {
-    char kconf_id_strings_str2[sizeof("if")];
-    char kconf_id_strings_str3[sizeof("int")];
-    char kconf_id_strings_str5[sizeof("endif")];
-    char kconf_id_strings_str7[sizeof("default")];
-    char kconf_id_strings_str8[sizeof("tristate")];
-    char kconf_id_strings_str9[sizeof("endchoice")];
-    char kconf_id_strings_str12[sizeof("def_tristate")];
-    char kconf_id_strings_str13[sizeof("def_bool")];
-    char kconf_id_strings_str14[sizeof("defconfig_list")];
-    char kconf_id_strings_str17[sizeof("on")];
-    char kconf_id_strings_str18[sizeof("optional")];
-    char kconf_id_strings_str21[sizeof("option")];
-    char kconf_id_strings_str22[sizeof("endmenu")];
-    char kconf_id_strings_str23[sizeof("mainmenu")];
-    char kconf_id_strings_str25[sizeof("menuconfig")];
-    char kconf_id_strings_str27[sizeof("modules")];
-    char kconf_id_strings_str29[sizeof("menu")];
-    char kconf_id_strings_str31[sizeof("select")];
-    char kconf_id_strings_str32[sizeof("comment")];
-    char kconf_id_strings_str33[sizeof("env")];
-    char kconf_id_strings_str35[sizeof("range")];
-    char kconf_id_strings_str36[sizeof("choice")];
-    char kconf_id_strings_str39[sizeof("bool")];
-    char kconf_id_strings_str41[sizeof("source")];
-    char kconf_id_strings_str42[sizeof("visible")];
-    char kconf_id_strings_str43[sizeof("hex")];
-    char kconf_id_strings_str46[sizeof("config")];
-    char kconf_id_strings_str47[sizeof("boolean")];
-    char kconf_id_strings_str51[sizeof("string")];
-    char kconf_id_strings_str54[sizeof("help")];
-    char kconf_id_strings_str56[sizeof("prompt")];
-    char kconf_id_strings_str72[sizeof("depends")];
-  };
-static const struct kconf_id_strings_t kconf_id_strings_contents =
-  {
-    "if",
-    "int",
-    "endif",
-    "default",
-    "tristate",
-    "endchoice",
-    "def_tristate",
-    "def_bool",
-    "defconfig_list",
-    "on",
-    "optional",
-    "option",
-    "endmenu",
-    "mainmenu",
-    "menuconfig",
-    "modules",
-    "menu",
-    "select",
-    "comment",
-    "env",
-    "range",
-    "choice",
-    "bool",
-    "source",
-    "visible",
-    "hex",
-    "config",
-    "boolean",
-    "string",
-    "help",
-    "prompt",
-    "depends"
-  };
-#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
-#ifdef __GNUC__
-__inline
-#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
-const struct kconf_id *
-kconf_id_lookup (register const char *str, register unsigned int len)
-{
-  enum
-    {
-      TOTAL_KEYWORDS = 32,
-      MIN_WORD_LENGTH = 2,
-      MAX_WORD_LENGTH = 14,
-      MIN_HASH_VALUE = 2,
-      MAX_HASH_VALUE = 72
-    };
-
-  static const struct kconf_id wordlist[] =
-    {
-      {-1}, {-1},
-#line 25 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2,		T_IF,		TF_COMMAND|TF_PARAM},
-#line 36 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3,		T_TYPE,		TF_COMMAND, S_INT},
-      {-1},
-#line 26 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5,		T_ENDIF,	TF_COMMAND},
-      {-1},
-#line 29 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7,	T_DEFAULT,	TF_COMMAND, S_UNKNOWN},
-#line 31 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8,	T_TYPE,		TF_COMMAND, S_TRISTATE},
-#line 20 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9,	T_ENDCHOICE,	TF_COMMAND},
-      {-1}, {-1},
-#line 32 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12,	T_DEFAULT,	TF_COMMAND, S_TRISTATE},
-#line 35 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13,	T_DEFAULT,	TF_COMMAND, S_BOOLEAN},
-#line 45 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14,	T_OPT_DEFCONFIG_LIST,TF_OPTION},
-      {-1}, {-1},
-#line 43 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17,		T_ON,		TF_PARAM},
-#line 28 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18,	T_OPTIONAL,	TF_COMMAND},
-      {-1}, {-1},
-#line 42 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21,		T_OPTION,	TF_COMMAND},
-#line 17 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22,	T_ENDMENU,	TF_COMMAND},
-#line 15 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23,	T_MAINMENU,	TF_COMMAND},
-      {-1},
-#line 23 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25,	T_MENUCONFIG,	TF_COMMAND},
-      {-1},
-#line 44 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27,	T_OPT_MODULES,	TF_OPTION},
-      {-1},
-#line 16 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29,		T_MENU,		TF_COMMAND},
-      {-1},
-#line 39 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31,		T_SELECT,	TF_COMMAND},
-#line 21 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32,	T_COMMENT,	TF_COMMAND},
-#line 46 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33,		T_OPT_ENV,	TF_OPTION},
-      {-1},
-#line 40 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35,		T_RANGE,	TF_COMMAND},
-#line 19 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36,		T_CHOICE,	TF_COMMAND},
-      {-1}, {-1},
-#line 33 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39,		T_TYPE,		TF_COMMAND, S_BOOLEAN},
-      {-1},
-#line 18 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41,		T_SOURCE,	TF_COMMAND},
-#line 41 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42,	T_VISIBLE,	TF_COMMAND},
-#line 37 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str43,		T_TYPE,		TF_COMMAND, S_HEX},
-      {-1}, {-1},
-#line 22 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46,		T_CONFIG,	TF_COMMAND},
-#line 34 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47,	T_TYPE,		TF_COMMAND, S_BOOLEAN},
-      {-1}, {-1}, {-1},
-#line 38 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51,		T_TYPE,		TF_COMMAND, S_STRING},
-      {-1}, {-1},
-#line 24 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str54,		T_HELP,		TF_COMMAND},
-      {-1},
-#line 30 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str56,		T_PROMPT,	TF_COMMAND},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-#line 27 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str72,	T_DEPENDS,	TF_COMMAND}
-    };
-
-  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
-    {
-      register int key = kconf_id_hash (str, len);
-
-      if (key <= MAX_HASH_VALUE && key >= 0)
-        {
-          register int o = wordlist[key].name;
-          if (o >= 0)
-            {
-              register const char *s = o + kconf_id_strings;
-
-              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
-                return &wordlist[key];
-            }
-        }
-    }
-  return 0;
-}
-#line 47 "scripts/kconfig/zconf.gperf"
-
diff --git a/support/kconfig/zconf.l b/support/kconfig/zconf.l
deleted file mode 100644
index 1a9f53e5..00000000
--- a/support/kconfig/zconf.l
+++ /dev/null
@@ -1,363 +0,0 @@
-%option nostdinit noyywrap never-interactive full ecs
-%option 8bit nodefault perf-report perf-report
-%option noinput
-%x COMMAND HELP STRING PARAM
-%{
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "lkc.h"
-
-#define START_STRSIZE	16
-
-static struct {
-	struct file *file;
-	int lineno;
-} current_pos;
-
-static char *text;
-static int text_size, text_asize;
-
-struct buffer {
-        struct buffer *parent;
-        YY_BUFFER_STATE state;
-};
-
-struct buffer *current_buf;
-
-static int last_ts, first_ts;
-
-static void zconf_endhelp(void);
-static void zconf_endfile(void);
-
-static void new_string(void)
-{
-	text = xmalloc(START_STRSIZE);
-	text_asize = START_STRSIZE;
-	text_size = 0;
-	*text = 0;
-}
-
-static void append_string(const char *str, int size)
-{
-	int new_size = text_size + size + 1;
-	if (new_size > text_asize) {
-		new_size += START_STRSIZE - 1;
-		new_size &= -START_STRSIZE;
-		text = realloc(text, new_size);
-		text_asize = new_size;
-	}
-	memcpy(text + text_size, str, size);
-	text_size += size;
-	text[text_size] = 0;
-}
-
-static void alloc_string(const char *str, int size)
-{
-	text = xmalloc(size + 1);
-	memcpy(text, str, size);
-	text[size] = 0;
-}
-%}
-
-n	[A-Za-z0-9_]
-
-%%
-	int str = 0;
-	int ts, i;
-
-[ \t]*#.*\n	|
-[ \t]*\n	{
-	current_file->lineno++;
-	return T_EOL;
-}
-[ \t]*#.*
-
-
-[ \t]+	{
-	BEGIN(COMMAND);
-}
-
-.	{
-	unput(yytext[0]);
-	BEGIN(COMMAND);
-}
-
-
-<COMMAND>{
-	{n}+	{
-		const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
-		BEGIN(PARAM);
-		current_pos.file = current_file;
-		current_pos.lineno = current_file->lineno;
-		if (id && id->flags & TF_COMMAND) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(yytext, yyleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	.
-	\n	{
-		BEGIN(INITIAL);
-		current_file->lineno++;
-		return T_EOL;
-	}
-}
-
-<PARAM>{
-	"&&"	return T_AND;
-	"||"	return T_OR;
-	"("	return T_OPEN_PAREN;
-	")"	return T_CLOSE_PAREN;
-	"!"	return T_NOT;
-	"="	return T_EQUAL;
-	"!="	return T_UNEQUAL;
-	\"|\'	{
-		str = yytext[0];
-		new_string();
-		BEGIN(STRING);
-	}
-	\n	BEGIN(INITIAL); current_file->lineno++; return T_EOL;
-	---	/* ignore */
-	({n}|[-/.])+	{
-		const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
-		if (id && id->flags & TF_PARAM) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(yytext, yyleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	#.*	/* comment */
-	\\\n	current_file->lineno++;
-	.
-	<<EOF>> {
-		BEGIN(INITIAL);
-	}
-}
-
-<STRING>{
-	[^'"\\\n]+/\n	{
-		append_string(yytext, yyleng);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	[^'"\\\n]+	{
-		append_string(yytext, yyleng);
-	}
-	\\.?/\n	{
-		append_string(yytext + 1, yyleng - 1);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	\\.?	{
-		append_string(yytext + 1, yyleng - 1);
-	}
-	\'|\"	{
-		if (str == yytext[0]) {
-			BEGIN(PARAM);
-			zconflval.string = text;
-			return T_WORD_QUOTE;
-		} else
-			append_string(yytext, 1);
-	}
-	\n	{
-		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
-		current_file->lineno++;
-		BEGIN(INITIAL);
-		return T_EOL;
-	}
-	<<EOF>>	{
-		BEGIN(INITIAL);
-	}
-}
-
-<HELP>{
-	[ \t]+	{
-		ts = 0;
-		for (i = 0; i < yyleng; i++) {
-			if (yytext[i] == '\t')
-				ts = (ts & ~7) + 8;
-			else
-				ts++;
-		}
-		last_ts = ts;
-		if (first_ts) {
-			if (ts < first_ts) {
-				zconf_endhelp();
-				return T_HELPTEXT;
-			}
-			ts -= first_ts;
-			while (ts > 8) {
-				append_string("        ", 8);
-				ts -= 8;
-			}
-			append_string("        ", ts);
-		}
-	}
-	[ \t]*\n/[^ \t\n] {
-		current_file->lineno++;
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-	[ \t]*\n	{
-		current_file->lineno++;
-		append_string("\n", 1);
-	}
-	[^ \t\n].* {
-		while (yyleng) {
-			if ((yytext[yyleng-1] != ' ') && (yytext[yyleng-1] != '\t'))
-				break;
-			yyleng--;
-		}
-		append_string(yytext, yyleng);
-		if (!first_ts)
-			first_ts = last_ts;
-	}
-	<<EOF>>	{
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-}
-
-<<EOF>>	{
-	if (current_file) {
-		zconf_endfile();
-		return T_EOL;
-	}
-	fclose(yyin);
-	yyterminate();
-}
-
-%%
-void zconf_starthelp(void)
-{
-	new_string();
-	last_ts = first_ts = 0;
-	BEGIN(HELP);
-}
-
-static void zconf_endhelp(void)
-{
-	zconflval.string = text;
-	BEGIN(INITIAL);
-}
-
-
-/*
- * Try to open specified file with following names:
- * ./name
- * $(srctree)/name
- * The latter is used when srctree is separate from objtree
- * when compiling the kernel.
- * Return NULL if file is not found.
- */
-FILE *zconf_fopen(const char *name)
-{
-	char *env, fullname[PATH_MAX+1];
-	FILE *f;
-
-	f = fopen(name, "r");
-	if (!f && name != NULL && name[0] != '/') {
-		env = getenv(SRCTREE);
-		if (env) {
-			sprintf(fullname, "%s/%s", env, name);
-			f = fopen(fullname, "r");
-		}
-	}
-	return f;
-}
-
-void zconf_initscan(const char *name)
-{
-	yyin = zconf_fopen(name);
-	if (!yyin) {
-		printf("can't find file %s\n", name);
-		exit(1);
-	}
-
-	current_buf = xmalloc(sizeof(*current_buf));
-	memset(current_buf, 0, sizeof(*current_buf));
-
-	current_file = file_lookup(name);
-	current_file->lineno = 1;
-}
-
-void zconf_nextfile(const char *name)
-{
-	struct file *iter;
-	struct file *file = file_lookup(name);
-	struct buffer *buf = xmalloc(sizeof(*buf));
-	memset(buf, 0, sizeof(*buf));
-
-	current_buf->state = YY_CURRENT_BUFFER;
-	yyin = zconf_fopen(file->name);
-	if (!yyin) {
-		printf("%s:%d: can't open file \"%s\"\n",
-		    zconf_curname(), zconf_lineno(), file->name);
-		exit(1);
-	}
-	yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
-	buf->parent = current_buf;
-	current_buf = buf;
-
-	for (iter = current_file->parent; iter; iter = iter->parent ) {
-		if (!strcmp(current_file->name,iter->name) ) {
-			printf("%s:%d: recursive inclusion detected. "
-			       "Inclusion path:\n  current file : '%s'\n",
-			       zconf_curname(), zconf_lineno(),
-			       zconf_curname());
-			iter = current_file->parent;
-			while (iter && \
-			       strcmp(iter->name,current_file->name)) {
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno-1);
-				iter = iter->parent;
-			}
-			if (iter)
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno+1);
-			exit(1);
-		}
-	}
-	file->lineno = 1;
-	file->parent = current_file;
-	current_file = file;
-}
-
-static void zconf_endfile(void)
-{
-	struct buffer *parent;
-
-	current_file = current_file->parent;
-
-	parent = current_buf->parent;
-	if (parent) {
-		fclose(yyin);
-		yy_delete_buffer(YY_CURRENT_BUFFER);
-		yy_switch_to_buffer(parent->state);
-	}
-	free(current_buf);
-	current_buf = parent;
-}
-
-int zconf_lineno(void)
-{
-	return current_pos.lineno;
-}
-
-const char *zconf_curname(void)
-{
-	return current_pos.file ? current_pos.file->name : "<none>";
-}
diff --git a/support/kconfig/zconf.lex.c_shipped b/support/kconfig/zconf.lex.c_shipped
deleted file mode 100644
index a0521aa5..00000000
--- a/support/kconfig/zconf.lex.c_shipped
+++ /dev/null
@@ -1,2420 +0,0 @@
-
-#line 3 "scripts/kconfig/zconf.lex.c_shipped"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define yy_create_buffer zconf_create_buffer
-#define yy_delete_buffer zconf_delete_buffer
-#define yy_flex_debug zconf_flex_debug
-#define yy_init_buffer zconf_init_buffer
-#define yy_flush_buffer zconf_flush_buffer
-#define yy_load_buffer_state zconf_load_buffer_state
-#define yy_switch_to_buffer zconf_switch_to_buffer
-#define yyin zconfin
-#define yyleng zconfleng
-#define yylex zconflex
-#define yylineno zconflineno
-#define yyout zconfout
-#define yyrestart zconfrestart
-#define yytext zconftext
-#define yywrap zconfwrap
-#define yyalloc zconfalloc
-#define yyrealloc zconfrealloc
-#define yyfree zconffree
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE zconfrestart(zconfin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-extern int zconfleng;
-
-extern FILE *zconfin, *zconfout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    #define YY_LESS_LINENO(n)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up zconftext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up zconftext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-	FILE *yy_input_file;
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	int yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via zconfrestart()), so that the user can continue scanning by
-	 * just pointing zconfin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when zconftext is formed. */
-static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int zconfleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0;		/* whether we need to initialize */
-static int yy_start = 0;	/* start state number */
-
-/* Flag which is used to allow zconfwrap()'s to do buffer switches
- * instead of setting up a fresh zconfin.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void zconfrestart (FILE *input_file  );
-void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size  );
-void zconf_delete_buffer (YY_BUFFER_STATE b  );
-void zconf_flush_buffer (YY_BUFFER_STATE b  );
-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer  );
-void zconfpop_buffer_state (void );
-
-static void zconfensure_buffer_stack (void );
-static void zconf_load_buffer_state (void );
-static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file  );
-
-#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len  );
-
-void *zconfalloc (yy_size_t  );
-void *zconfrealloc (void *,yy_size_t  );
-void zconffree (void *  );
-
-#define yy_new_buffer zconf_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        zconfensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        zconfensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-#define zconfwrap(n) 1
-#define YY_SKIP_YYWRAP
-
-typedef unsigned char YY_CHAR;
-
-FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int zconflineno;
-
-int zconflineno = 1;
-
-extern char *zconftext;
-#define yytext_ptr zconftext
-static yyconst flex_int16_t yy_nxt[][17] =
-    {
-    {
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0
-    },
-
-    {
-       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12
-    },
-
-    {
-       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12
-    },
-
-    {
-       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   18,   16,   16,   16
-    },
-
-    {
-       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   18,   16,   16,   16
-
-    },
-
-    {
-       11,   19,   20,   21,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   19,   19,   19
-    },
-
-    {
-       11,   19,   20,   21,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   19,   19,   19
-    },
-
-    {
-       11,   22,   22,   23,   22,   24,   22,   22,   24,   22,
-       22,   22,   22,   22,   22,   25,   22
-    },
-
-    {
-       11,   22,   22,   23,   22,   24,   22,   22,   24,   22,
-       22,   22,   22,   22,   22,   25,   22
-    },
-
-    {
-       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
-       33,   34,   35,   35,   36,   37,   38
-
-    },
-
-    {
-       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
-       33,   34,   35,   35,   36,   37,   38
-    },
-
-    {
-      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
-      -11,  -11,  -11,  -11,  -11,  -11,  -11
-    },
-
-    {
-       11,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
-      -12,  -12,  -12,  -12,  -12,  -12,  -12
-    },
-
-    {
-       11,  -13,   39,   40,  -13,  -13,   41,  -13,  -13,  -13,
-      -13,  -13,  -13,  -13,  -13,  -13,  -13
-    },
-
-    {
-       11,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
-      -14,  -14,  -14,  -14,  -14,  -14,  -14
-
-    },
-
-    {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
-    },
-
-    {
-       11,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
-      -16,  -16,  -16,  -16,  -16,  -16,  -16
-    },
-
-    {
-       11,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
-      -17,  -17,  -17,  -17,  -17,  -17,  -17
-    },
-
-    {
-       11,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
-      -18,  -18,  -18,   44,  -18,  -18,  -18
-    },
-
-    {
-       11,   45,   45,  -19,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45
-
-    },
-
-    {
-       11,  -20,   46,   47,  -20,  -20,  -20,  -20,  -20,  -20,
-      -20,  -20,  -20,  -20,  -20,  -20,  -20
-    },
-
-    {
-       11,   48,  -21,  -21,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   48
-    },
-
-    {
-       11,   49,   49,   50,   49,  -22,   49,   49,  -22,   49,
-       49,   49,   49,   49,   49,  -22,   49
-    },
-
-    {
-       11,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
-      -23,  -23,  -23,  -23,  -23,  -23,  -23
-    },
-
-    {
-       11,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
-      -24,  -24,  -24,  -24,  -24,  -24,  -24
-
-    },
-
-    {
-       11,   51,   51,   52,   51,   51,   51,   51,   51,   51,
-       51,   51,   51,   51,   51,   51,   51
-    },
-
-    {
-       11,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
-      -26,  -26,  -26,  -26,  -26,  -26,  -26
-    },
-
-    {
-       11,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
-      -27,  -27,  -27,  -27,  -27,  -27,  -27
-    },
-
-    {
-       11,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
-      -28,  -28,  -28,  -28,   53,  -28,  -28
-    },
-
-    {
-       11,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
-      -29,  -29,  -29,  -29,  -29,  -29,  -29
-
-    },
-
-    {
-       11,   54,   54,  -30,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54
-    },
-
-    {
-       11,  -31,  -31,  -31,  -31,  -31,  -31,   55,  -31,  -31,
-      -31,  -31,  -31,  -31,  -31,  -31,  -31
-    },
-
-    {
-       11,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
-      -32,  -32,  -32,  -32,  -32,  -32,  -32
-    },
-
-    {
-       11,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,
-      -33,  -33,  -33,  -33,  -33,  -33,  -33
-    },
-
-    {
-       11,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
-      -34,   56,   57,   57,  -34,  -34,  -34
-
-    },
-
-    {
-       11,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
-      -35,   57,   57,   57,  -35,  -35,  -35
-    },
-
-    {
-       11,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-      -36,  -36,  -36,  -36,  -36,  -36,  -36
-    },
-
-    {
-       11,  -37,  -37,   58,  -37,  -37,  -37,  -37,  -37,  -37,
-      -37,  -37,  -37,  -37,  -37,  -37,  -37
-    },
-
-    {
-       11,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
-      -38,  -38,  -38,  -38,  -38,  -38,   59
-    },
-
-    {
-       11,  -39,   39,   40,  -39,  -39,   41,  -39,  -39,  -39,
-      -39,  -39,  -39,  -39,  -39,  -39,  -39
-
-    },
-
-    {
-       11,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
-      -40,  -40,  -40,  -40,  -40,  -40,  -40
-    },
-
-    {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
-    },
-
-    {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
-    },
-
-    {
-       11,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
-      -43,  -43,  -43,  -43,  -43,  -43,  -43
-    },
-
-    {
-       11,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
-      -44,  -44,  -44,   44,  -44,  -44,  -44
-
-    },
-
-    {
-       11,   45,   45,  -45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45
-    },
-
-    {
-       11,  -46,   46,   47,  -46,  -46,  -46,  -46,  -46,  -46,
-      -46,  -46,  -46,  -46,  -46,  -46,  -46
-    },
-
-    {
-       11,   48,  -47,  -47,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   48
-    },
-
-    {
-       11,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
-      -48,  -48,  -48,  -48,  -48,  -48,  -48
-    },
-
-    {
-       11,   49,   49,   50,   49,  -49,   49,   49,  -49,   49,
-       49,   49,   49,   49,   49,  -49,   49
-
-    },
-
-    {
-       11,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
-      -50,  -50,  -50,  -50,  -50,  -50,  -50
-    },
-
-    {
-       11,  -51,  -51,   52,  -51,  -51,  -51,  -51,  -51,  -51,
-      -51,  -51,  -51,  -51,  -51,  -51,  -51
-    },
-
-    {
-       11,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
-      -52,  -52,  -52,  -52,  -52,  -52,  -52
-    },
-
-    {
-       11,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
-      -53,  -53,  -53,  -53,  -53,  -53,  -53
-    },
-
-    {
-       11,   54,   54,  -54,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54
-
-    },
-
-    {
-       11,  -55,  -55,  -55,  -55,  -55,  -55,  -55,  -55,  -55,
-      -55,  -55,  -55,  -55,  -55,  -55,  -55
-    },
-
-    {
-       11,  -56,  -56,  -56,  -56,  -56,  -56,  -56,  -56,  -56,
-      -56,   60,   57,   57,  -56,  -56,  -56
-    },
-
-    {
-       11,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
-      -57,   57,   57,   57,  -57,  -57,  -57
-    },
-
-    {
-       11,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,
-      -58,  -58,  -58,  -58,  -58,  -58,  -58
-    },
-
-    {
-       11,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,
-      -59,  -59,  -59,  -59,  -59,  -59,  -59
-
-    },
-
-    {
-       11,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,
-      -60,   57,   57,   57,  -60,  -60,  -60
-    },
-
-    } ;
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up zconftext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-	zconfleng = (size_t) (yy_cp - yy_bp); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-	(yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 33
-#define YY_END_OF_BUFFER 34
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[61] =
-    {   0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       34,    5,    4,    2,    3,    7,    8,    6,   32,   29,
-       31,   24,   28,   27,   26,   22,   17,   13,   16,   20,
-       22,   11,   12,   19,   19,   14,   22,   22,    4,    2,
-        3,    3,    1,    6,   32,   29,   31,   30,   24,   23,
-       26,   25,   15,   20,    9,   19,   19,   21,   10,   18
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    4,    5,    6,    1,    1,    7,    8,    9,
-       10,    1,    1,    1,   11,   12,   12,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,    1,    1,    1,
-       14,    1,    1,    1,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-        1,   15,    1,    1,   13,    1,   13,   13,   13,   13,
-
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,    1,   16,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-extern int zconf_flex_debug;
-int zconf_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *zconftext;
-#define YY_NO_INPUT 1
-
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "lkc.h"
-
-#define START_STRSIZE	16
-
-static struct {
-	struct file *file;
-	int lineno;
-} current_pos;
-
-static char *text;
-static int text_size, text_asize;
-
-struct buffer {
-        struct buffer *parent;
-        YY_BUFFER_STATE state;
-};
-
-struct buffer *current_buf;
-
-static int last_ts, first_ts;
-
-static void zconf_endhelp(void);
-static void zconf_endfile(void);
-
-static void new_string(void)
-{
-	text = xmalloc(START_STRSIZE);
-	text_asize = START_STRSIZE;
-	text_size = 0;
-	*text = 0;
-}
-
-static void append_string(const char *str, int size)
-{
-	int new_size = text_size + size + 1;
-	if (new_size > text_asize) {
-		new_size += START_STRSIZE - 1;
-		new_size &= -START_STRSIZE;
-		text = realloc(text, new_size);
-		text_asize = new_size;
-	}
-	memcpy(text + text_size, str, size);
-	text_size += size;
-	text[text_size] = 0;
-}
-
-static void alloc_string(const char *str, int size)
-{
-	text = xmalloc(size + 1);
-	memcpy(text, str, size);
-	text[size] = 0;
-}
-
-#define INITIAL 0
-#define COMMAND 1
-#define HELP 2
-#define STRING 3
-#define PARAM 4
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
-   These are made visible to non-reentrant scanners for convenience. */
-
-int zconflex_destroy (void );
-
-int zconfget_debug (void );
-
-void zconfset_debug (int debug_flag  );
-
-YY_EXTRA_TYPE zconfget_extra (void );
-
-void zconfset_extra (YY_EXTRA_TYPE user_defined  );
-
-FILE *zconfget_in (void );
-
-void zconfset_in  (FILE * in_str  );
-
-FILE *zconfget_out (void );
-
-void zconfset_out  (FILE * out_str  );
-
-int zconfget_leng (void );
-
-char *zconfget_text (void );
-
-int zconfget_lineno (void );
-
-void zconfset_lineno (int line_number  );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int zconfwrap (void );
-#else
-extern int zconfwrap (void );
-#endif
-#endif
-
-    static void yyunput (int c,char *buf_ptr  );
-    
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-	errno=0; \
-	while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \
-	{ \
-		if( errno != EINTR) \
-		{ \
-			YY_FATAL_ERROR( "input in flex scanner failed" ); \
-			break; \
-		} \
-		errno=0; \
-		clearerr(zconfin); \
-	}\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int zconflex (void);
-
-#define YY_DECL int zconflex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after zconftext and zconfleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-	int str = 0;
-	int ts, i;
-
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! zconfin )
-			zconfin = stdin;
-
-		if ( ! zconfout )
-			zconfout = stdout;
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			zconfensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				zconf_create_buffer(zconfin,YY_BUF_SIZE );
-		}
-
-		zconf_load_buffer_state( );
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of zconftext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-		yy_current_state = (yy_start);
-yy_match:
-		while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)]  ]) > 0 )
-			++yy_cp;
-
-		yy_current_state = -yy_current_state;
-
-yy_find_action:
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-do_action:	/* This label is used only to access EOF actions. */
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-case 1:
-/* rule 1 can match eol */
-case 2:
-/* rule 2 can match eol */
-YY_RULE_SETUP
-{
-	current_file->lineno++;
-	return T_EOL;
-}
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-{
-	BEGIN(COMMAND);
-}
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-{
-	unput(zconftext[0]);
-	BEGIN(COMMAND);
-}
-	YY_BREAK
-
-case 6:
-YY_RULE_SETUP
-{
-		const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
-		BEGIN(PARAM);
-		current_pos.file = current_file;
-		current_pos.lineno = current_file->lineno;
-		if (id && id->flags & TF_COMMAND) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(zconftext, zconfleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-
-	YY_BREAK
-case 8:
-/* rule 8 can match eol */
-YY_RULE_SETUP
-{
-		BEGIN(INITIAL);
-		current_file->lineno++;
-		return T_EOL;
-	}
-	YY_BREAK
-
-case 9:
-YY_RULE_SETUP
-return T_AND;
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-return T_OR;
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-return T_OPEN_PAREN;
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-return T_CLOSE_PAREN;
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-return T_NOT;
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-return T_EQUAL;
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-return T_UNEQUAL;
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-{
-		str = zconftext[0];
-		new_string();
-		BEGIN(STRING);
-	}
-	YY_BREAK
-case 17:
-/* rule 17 can match eol */
-YY_RULE_SETUP
-BEGIN(INITIAL); current_file->lineno++; return T_EOL;
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-/* ignore */
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-{
-		const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
-		if (id && id->flags & TF_PARAM) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(zconftext, zconfleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-/* comment */
-	YY_BREAK
-case 21:
-/* rule 21 can match eol */
-YY_RULE_SETUP
-current_file->lineno++;
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-
-	YY_BREAK
-case YY_STATE_EOF(PARAM):
-{
-		BEGIN(INITIAL);
-	}
-	YY_BREAK
-
-case 23:
-/* rule 23 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-		append_string(zconftext, zconfleng);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-{
-		append_string(zconftext, zconfleng);
-	}
-	YY_BREAK
-case 25:
-/* rule 25 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-		append_string(zconftext + 1, zconfleng - 1);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-{
-		append_string(zconftext + 1, zconfleng - 1);
-	}
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-{
-		if (str == zconftext[0]) {
-			BEGIN(PARAM);
-			zconflval.string = text;
-			return T_WORD_QUOTE;
-		} else
-			append_string(zconftext, 1);
-	}
-	YY_BREAK
-case 28:
-/* rule 28 can match eol */
-YY_RULE_SETUP
-{
-		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
-		current_file->lineno++;
-		BEGIN(INITIAL);
-		return T_EOL;
-	}
-	YY_BREAK
-case YY_STATE_EOF(STRING):
-{
-		BEGIN(INITIAL);
-	}
-	YY_BREAK
-
-case 29:
-YY_RULE_SETUP
-{
-		ts = 0;
-		for (i = 0; i < zconfleng; i++) {
-			if (zconftext[i] == '\t')
-				ts = (ts & ~7) + 8;
-			else
-				ts++;
-		}
-		last_ts = ts;
-		if (first_ts) {
-			if (ts < first_ts) {
-				zconf_endhelp();
-				return T_HELPTEXT;
-			}
-			ts -= first_ts;
-			while (ts > 8) {
-				append_string("        ", 8);
-				ts -= 8;
-			}
-			append_string("        ", ts);
-		}
-	}
-	YY_BREAK
-case 30:
-/* rule 30 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-		current_file->lineno++;
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-	YY_BREAK
-case 31:
-/* rule 31 can match eol */
-YY_RULE_SETUP
-{
-		current_file->lineno++;
-		append_string("\n", 1);
-	}
-	YY_BREAK
-case 32:
-YY_RULE_SETUP
-{
-		while (zconfleng) {
-			if ((zconftext[zconfleng-1] != ' ') && (zconftext[zconfleng-1] != '\t'))
-				break;
-			zconfleng--;
-		}
-		append_string(zconftext, zconfleng);
-		if (!first_ts)
-			first_ts = last_ts;
-	}
-	YY_BREAK
-case YY_STATE_EOF(HELP):
-{
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-	YY_BREAK
-
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(COMMAND):
-{
-	if (current_file) {
-		zconf_endfile();
-		return T_EOL;
-	}
-	fclose(zconfin);
-	yyterminate();
-}
-	YY_BREAK
-case 33:
-YY_RULE_SETUP
-YY_FATAL_ERROR( "flex scanner jammed" );
-	YY_BREAK
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed zconfin at a new source and called
-			 * zconflex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-				yy_cp = (yy_c_buf_p);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( zconfwrap( ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * zconftext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-} /* end of zconflex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			int num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				int new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), (size_t) num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			zconfrestart(zconfin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) zconfrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-    static yy_state_type yy_get_previous_state (void)
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-	yy_current_state = (yy_start);
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-		yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
-{
-	register int yy_is_jam;
-    
-	yy_current_state = yy_nxt[yy_current_state][1];
-	yy_is_jam = (yy_current_state <= 0);
-
-	return yy_is_jam ? 0 : yy_current_state;
-}
-
-    static void yyunput (int c, register char * yy_bp )
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up zconftext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register int number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-    static int yyinput (void)
-#else
-    static int input  (void)
-#endif
-
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					zconfrestart(zconfin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( zconfwrap( ) )
-						return EOF;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve zconftext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-	return c;
-}
-#endif	/* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-    void zconfrestart  (FILE * input_file )
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        zconfensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            zconf_create_buffer(zconfin,YY_BUF_SIZE );
-	}
-
-	zconf_init_buffer(YY_CURRENT_BUFFER,input_file );
-	zconf_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-    void zconf_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		zconfpop_buffer_state();
-	 *		zconfpush_buffer_state(new_buffer);
-     */
-	zconfensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	zconf_load_buffer_state( );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (zconfwrap()) processing, but the only time this flag
-	 * is looked at is after zconfwrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void zconf_load_buffer_state  (void)
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-    YY_BUFFER_STATE zconf_create_buffer  (FILE * file, int  size )
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	zconf_init_buffer(b,file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with zconf_create_buffer()
- * 
- */
-    void zconf_delete_buffer (YY_BUFFER_STATE  b )
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		zconffree((void *) b->yy_ch_buf  );
-
-	zconffree((void *) b  );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a zconfrestart() or at EOF.
- */
-    static void zconf_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
-
-{
-	int oerrno = errno;
-    
-	zconf_flush_buffer(b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then zconf_init_buffer was _probably_
-     * called from zconfrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-        b->yy_is_interactive = 0;
-    
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-    void zconf_flush_buffer (YY_BUFFER_STATE  b )
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		zconf_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
-    	if (new_buffer == NULL)
-		return;
-
-	zconfensure_buffer_stack();
-
-	/* This block is copied from zconf_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from zconf_switch_to_buffer. */
-	zconf_load_buffer_state( );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-void zconfpop_buffer_state (void)
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	zconf_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		zconf_load_buffer_state( );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-static void zconfensure_buffer_stack (void)
-{
-	int num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
-								  
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- * 
- * @return the newly allocated buffer state object. 
- */
-YY_BUFFER_STATE zconf_scan_buffer  (char * base, yy_size_t  size )
-{
-	YY_BUFFER_STATE b;
-    
-	if ( size < 2 ||
-	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
-	     base[size-1] != YY_END_OF_BUFFER_CHAR )
-		/* They forgot to leave room for the EOB's. */
-		return 0;
-
-	b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" );
-
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
-	b->yy_buf_pos = b->yy_ch_buf = base;
-	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
-	b->yy_n_chars = b->yy_buf_size;
-	b->yy_is_interactive = 0;
-	b->yy_at_bol = 1;
-	b->yy_fill_buffer = 0;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	zconf_switch_to_buffer(b  );
-
-	return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to zconflex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- * 
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- *       zconf_scan_bytes() instead.
- */
-YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr )
-{
-    
-	return zconf_scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- * 
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE zconf_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
-{
-	YY_BUFFER_STATE b;
-	char *buf;
-	yy_size_t n;
-	int i;
-    
-	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) zconfalloc(n  );
-	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" );
-
-	for ( i = 0; i < _yybytes_len; ++i )
-		buf[i] = yybytes[i];
-
-	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
-	b = zconf_scan_buffer(buf,n );
-	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" );
-
-	/* It's okay to grow etc. this buffer, and we should throw it
-	 * away when we're done.
-	 */
-	b->yy_is_our_buffer = 1;
-
-	return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
-    	(void) fprintf( stderr, "%s\n", msg );
-	exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up zconftext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		zconftext[zconfleng] = (yy_hold_char); \
-		(yy_c_buf_p) = zconftext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		zconfleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- * 
- */
-int zconfget_lineno  (void)
-{
-        
-    return zconflineno;
-}
-
-/** Get the input stream.
- * 
- */
-FILE *zconfget_in  (void)
-{
-        return zconfin;
-}
-
-/** Get the output stream.
- * 
- */
-FILE *zconfget_out  (void)
-{
-        return zconfout;
-}
-
-/** Get the length of the current token.
- * 
- */
-int zconfget_leng  (void)
-{
-        return zconfleng;
-}
-
-/** Get the current token.
- * 
- */
-
-char *zconfget_text  (void)
-{
-        return zconftext;
-}
-
-/** Set the current line number.
- * @param line_number
- * 
- */
-void zconfset_lineno (int  line_number )
-{
-    
-    zconflineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- * 
- * @see zconf_switch_to_buffer
- */
-void zconfset_in (FILE *  in_str )
-{
-        zconfin = in_str ;
-}
-
-void zconfset_out (FILE *  out_str )
-{
-        zconfout = out_str ;
-}
-
-int zconfget_debug  (void)
-{
-        return zconf_flex_debug;
-}
-
-void zconfset_debug (int  bdebug )
-{
-        zconf_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
-        /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from zconflex_destroy(), so don't allocate here.
-     */
-
-    (yy_buffer_stack) = 0;
-    (yy_buffer_stack_top) = 0;
-    (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
-    (yy_init) = 0;
-    (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
-    zconfin = stdin;
-    zconfout = stdout;
-#else
-    zconfin = (FILE *) 0;
-    zconfout = (FILE *) 0;
-#endif
-
-    /* For future reference: Set errno on error, since we are called by
-     * zconflex_init()
-     */
-    return 0;
-}
-
-/* zconflex_destroy is for both reentrant and non-reentrant scanners. */
-int zconflex_destroy  (void)
-{
-    
-    /* Pop the buffer stack, destroying each element. */
-	while(YY_CURRENT_BUFFER){
-		zconf_delete_buffer(YY_CURRENT_BUFFER  );
-		YY_CURRENT_BUFFER_LVALUE = NULL;
-		zconfpop_buffer_state();
-	}
-
-	/* Destroy the stack itself. */
-	zconffree((yy_buffer_stack) );
-	(yy_buffer_stack) = NULL;
-
-    /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * zconflex() is called, initialization will occur. */
-    yy_init_globals( );
-
-    return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *zconfalloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *zconfrealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void zconffree (void * ptr )
-{
-	free( (char *) ptr );	/* see zconfrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-void zconf_starthelp(void)
-{
-	new_string();
-	last_ts = first_ts = 0;
-	BEGIN(HELP);
-}
-
-static void zconf_endhelp(void)
-{
-	zconflval.string = text;
-	BEGIN(INITIAL);
-}
-
-/*
- * Try to open specified file with following names:
- * ./name
- * $(srctree)/name
- * The latter is used when srctree is separate from objtree
- * when compiling the kernel.
- * Return NULL if file is not found.
- */
-FILE *zconf_fopen(const char *name)
-{
-	char *env, fullname[PATH_MAX+1];
-	FILE *f;
-
-	f = fopen(name, "r");
-	if (!f && name != NULL && name[0] != '/') {
-		env = getenv(SRCTREE);
-		if (env) {
-			sprintf(fullname, "%s/%s", env, name);
-			f = fopen(fullname, "r");
-		}
-	}
-	return f;
-}
-
-void zconf_initscan(const char *name)
-{
-	zconfin = zconf_fopen(name);
-	if (!zconfin) {
-		printf("can't find file %s\n", name);
-		exit(1);
-	}
-
-	current_buf = xmalloc(sizeof(*current_buf));
-	memset(current_buf, 0, sizeof(*current_buf));
-
-	current_file = file_lookup(name);
-	current_file->lineno = 1;
-}
-
-void zconf_nextfile(const char *name)
-{
-	struct file *iter;
-	struct file *file = file_lookup(name);
-	struct buffer *buf = xmalloc(sizeof(*buf));
-	memset(buf, 0, sizeof(*buf));
-
-	current_buf->state = YY_CURRENT_BUFFER;
-	zconfin = zconf_fopen(file->name);
-	if (!zconfin) {
-		printf("%s:%d: can't open file \"%s\"\n",
-		    zconf_curname(), zconf_lineno(), file->name);
-		exit(1);
-	}
-	zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
-	buf->parent = current_buf;
-	current_buf = buf;
-
-	for (iter = current_file->parent; iter; iter = iter->parent ) {
-		if (!strcmp(current_file->name,iter->name) ) {
-			printf("%s:%d: recursive inclusion detected. "
-			       "Inclusion path:\n  current file : '%s'\n",
-			       zconf_curname(), zconf_lineno(),
-			       zconf_curname());
-			iter = current_file->parent;
-			while (iter && \
-			       strcmp(iter->name,current_file->name)) {
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno-1);
-				iter = iter->parent;
-			}
-			if (iter)
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno+1);
-			exit(1);
-		}
-	}
-	file->lineno = 1;
-	file->parent = current_file;
-	current_file = file;
-}
-
-static void zconf_endfile(void)
-{
-	struct buffer *parent;
-
-	current_file = current_file->parent;
-
-	parent = current_buf->parent;
-	if (parent) {
-		fclose(zconfin);
-		zconf_delete_buffer(YY_CURRENT_BUFFER);
-		zconf_switch_to_buffer(parent->state);
-	}
-	free(current_buf);
-	current_buf = parent;
-}
-
-int zconf_lineno(void)
-{
-	return current_pos.lineno;
-}
-
-const char *zconf_curname(void)
-{
-	return current_pos.file ? current_pos.file->name : "<none>";
-}
-
diff --git a/support/kconfig/zconf.tab.c_shipped b/support/kconfig/zconf.tab.c_shipped
deleted file mode 100644
index 73d92500..00000000
--- a/support/kconfig/zconf.tab.c_shipped
+++ /dev/null
@@ -1,2538 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.5.  */
-
-/* Bison implementation for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
-   
-   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 <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-   
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.5"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names.  */
-#define yyparse         zconfparse
-#define yylex           zconflex
-#define yyerror         zconferror
-#define yylval          zconflval
-#define yychar          zconfchar
-#define yydebug         zconfdebug
-#define yynerrs         zconfnerrs
-
-
-/* Copy the first part of user declarations.  */
-
-
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#include "lkc.h"
-
-#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
-
-#define PRINTD		0x0001
-#define DEBUG_PARSE	0x0002
-
-int cdebug = PRINTD;
-
-extern int zconflex(void);
-static void zconfprint(const char *err, ...);
-static void zconf_error(const char *err, ...);
-static void zconferror(const char *err);
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
-
-struct symbol *symbol_hash[SYMBOL_HASHSIZE];
-
-static struct menu *current_menu, *current_entry;
-
-
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     T_MAINMENU = 258,
-     T_MENU = 259,
-     T_ENDMENU = 260,
-     T_SOURCE = 261,
-     T_CHOICE = 262,
-     T_ENDCHOICE = 263,
-     T_COMMENT = 264,
-     T_CONFIG = 265,
-     T_MENUCONFIG = 266,
-     T_HELP = 267,
-     T_HELPTEXT = 268,
-     T_IF = 269,
-     T_ENDIF = 270,
-     T_DEPENDS = 271,
-     T_OPTIONAL = 272,
-     T_PROMPT = 273,
-     T_TYPE = 274,
-     T_DEFAULT = 275,
-     T_SELECT = 276,
-     T_RANGE = 277,
-     T_VISIBLE = 278,
-     T_OPTION = 279,
-     T_ON = 280,
-     T_WORD = 281,
-     T_WORD_QUOTE = 282,
-     T_UNEQUAL = 283,
-     T_CLOSE_PAREN = 284,
-     T_OPEN_PAREN = 285,
-     T_EOL = 286,
-     T_OR = 287,
-     T_AND = 288,
-     T_EQUAL = 289,
-     T_NOT = 290
-   };
-#endif
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-{
-
-
-	char *string;
-	struct file *file;
-	struct symbol *symbol;
-	struct expr *expr;
-	struct menu *menu;
-	const struct kconf_id *id;
-
-
-
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-/* Copy the second part of user declarations.  */
-
-
-/* Include zconf.hash.c here so it can see the token constants. */
-#include "zconf.hash.c"
-
-
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
-    int yyi;
-#endif
-{
-  return yyi;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-	     && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  11
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   290
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  36
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  50
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  118
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  191
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   290
-
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     6,     8,    11,    13,    14,    17,    20,
-      23,    26,    31,    36,    40,    42,    44,    46,    48,    50,
-      52,    54,    56,    58,    60,    62,    64,    66,    68,    72,
-      75,    79,    82,    86,    89,    90,    93,    96,    99,   102,
-     105,   108,   112,   117,   122,   127,   133,   137,   138,   142,
-     143,   146,   150,   153,   155,   159,   160,   163,   166,   169,
-     172,   175,   180,   184,   187,   192,   193,   196,   200,   202,
-     206,   207,   210,   213,   216,   220,   224,   228,   230,   234,
-     235,   238,   241,   244,   248,   252,   255,   258,   261,   262,
-     265,   268,   271,   276,   277,   280,   283,   286,   287,   290,
-     292,   294,   297,   300,   303,   305,   308,   309,   312,   314,
-     318,   322,   326,   329,   333,   337,   339,   341,   342
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      37,     0,    -1,    81,    38,    -1,    38,    -1,    63,    39,
-      -1,    39,    -1,    -1,    39,    41,    -1,    39,    55,    -1,
-      39,    67,    -1,    39,    80,    -1,    39,    26,     1,    31,
-      -1,    39,    40,     1,    31,    -1,    39,     1,    31,    -1,
-      16,    -1,    18,    -1,    19,    -1,    21,    -1,    17,    -1,
-      22,    -1,    20,    -1,    23,    -1,    31,    -1,    61,    -1,
-      71,    -1,    44,    -1,    46,    -1,    69,    -1,    26,     1,
-      31,    -1,     1,    31,    -1,    10,    26,    31,    -1,    43,
-      47,    -1,    11,    26,    31,    -1,    45,    47,    -1,    -1,
-      47,    48,    -1,    47,    49,    -1,    47,    75,    -1,    47,
-      73,    -1,    47,    42,    -1,    47,    31,    -1,    19,    78,
-      31,    -1,    18,    79,    82,    31,    -1,    20,    83,    82,
-      31,    -1,    21,    26,    82,    31,    -1,    22,    84,    84,
-      82,    31,    -1,    24,    50,    31,    -1,    -1,    50,    26,
-      51,    -1,    -1,    34,    79,    -1,     7,    85,    31,    -1,
-      52,    56,    -1,    80,    -1,    53,    58,    54,    -1,    -1,
-      56,    57,    -1,    56,    75,    -1,    56,    73,    -1,    56,
-      31,    -1,    56,    42,    -1,    18,    79,    82,    31,    -1,
-      19,    78,    31,    -1,    17,    31,    -1,    20,    26,    82,
-      31,    -1,    -1,    58,    41,    -1,    14,    83,    81,    -1,
-      80,    -1,    59,    62,    60,    -1,    -1,    62,    41,    -1,
-      62,    67,    -1,    62,    55,    -1,     3,    79,    81,    -1,
-       4,    79,    31,    -1,    64,    76,    74,    -1,    80,    -1,
-      65,    68,    66,    -1,    -1,    68,    41,    -1,    68,    67,
-      -1,    68,    55,    -1,     6,    79,    31,    -1,     9,    79,
-      31,    -1,    70,    74,    -1,    12,    31,    -1,    72,    13,
-      -1,    -1,    74,    75,    -1,    74,    31,    -1,    74,    42,
-      -1,    16,    25,    83,    31,    -1,    -1,    76,    77,    -1,
-      76,    31,    -1,    23,    82,    -1,    -1,    79,    82,    -1,
-      26,    -1,    27,    -1,     5,    31,    -1,     8,    31,    -1,
-      15,    31,    -1,    31,    -1,    81,    31,    -1,    -1,    14,
-      83,    -1,    84,    -1,    84,    34,    84,    -1,    84,    28,
-      84,    -1,    30,    83,    29,    -1,    35,    83,    -1,    83,
-      32,    83,    -1,    83,    33,    83,    -1,    26,    -1,    27,
-      -1,    -1,    26,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   103,   103,   103,   105,   105,   107,   109,   110,   111,
-     112,   113,   114,   118,   122,   122,   122,   122,   122,   122,
-     122,   122,   126,   127,   128,   129,   130,   131,   135,   136,
-     142,   150,   156,   164,   174,   176,   177,   178,   179,   180,
-     181,   184,   192,   198,   208,   214,   220,   223,   225,   236,
-     237,   242,   251,   256,   264,   267,   269,   270,   271,   272,
-     273,   276,   282,   293,   299,   309,   311,   316,   324,   332,
-     335,   337,   338,   339,   344,   351,   358,   363,   371,   374,
-     376,   377,   378,   381,   389,   396,   403,   409,   416,   418,
-     419,   420,   423,   431,   433,   434,   437,   444,   446,   451,
-     452,   455,   456,   457,   461,   462,   465,   466,   469,   470,
-     471,   472,   473,   474,   475,   478,   479,   482,   483
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
-  "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
-  "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
-  "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT", "T_RANGE",
-  "T_VISIBLE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
-  "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
-  "T_NOT", "$accept", "input", "start", "stmt_list", "option_name",
-  "common_stmt", "option_error", "config_entry_start", "config_stmt",
-  "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
-  "config_option", "symbol_option", "symbol_option_list",
-  "symbol_option_arg", "choice", "choice_entry", "choice_end",
-  "choice_stmt", "choice_option_list", "choice_option", "choice_block",
-  "if_entry", "if_end", "if_stmt", "if_block", "mainmenu_stmt", "menu",
-  "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
-  "comment", "comment_stmt", "help_start", "help", "depends_list",
-  "depends", "visibility_list", "visible", "prompt_stmt_opt", "prompt",
-  "end", "nl", "if_expr", "expr", "symbol", "word_opt", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    36,    37,    37,    38,    38,    39,    39,    39,    39,
-      39,    39,    39,    39,    40,    40,    40,    40,    40,    40,
-      40,    40,    41,    41,    41,    41,    41,    41,    42,    42,
-      43,    44,    45,    46,    47,    47,    47,    47,    47,    47,
-      47,    48,    48,    48,    48,    48,    49,    50,    50,    51,
-      51,    52,    53,    54,    55,    56,    56,    56,    56,    56,
-      56,    57,    57,    57,    57,    58,    58,    59,    60,    61,
-      62,    62,    62,    62,    63,    64,    65,    66,    67,    68,
-      68,    68,    68,    69,    70,    71,    72,    73,    74,    74,
-      74,    74,    75,    76,    76,    76,    77,    78,    78,    79,
-      79,    80,    80,    80,    81,    81,    82,    82,    83,    83,
-      83,    83,    83,    83,    83,    84,    84,    85,    85
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     2,     1,     2,     1,     0,     2,     2,     2,
-       2,     4,     4,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     2,
-       3,     2,     3,     2,     0,     2,     2,     2,     2,     2,
-       2,     3,     4,     4,     4,     5,     3,     0,     3,     0,
-       2,     3,     2,     1,     3,     0,     2,     2,     2,     2,
-       2,     4,     3,     2,     4,     0,     2,     3,     1,     3,
-       0,     2,     2,     2,     3,     3,     3,     1,     3,     0,
-       2,     2,     2,     3,     3,     2,     2,     2,     0,     2,
-       2,     2,     4,     0,     2,     2,     2,     0,     2,     1,
-       1,     2,     2,     2,     1,     2,     0,     2,     1,     3,
-       3,     3,     2,     3,     3,     1,     1,     0,     1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
-   Performed when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       6,     0,   104,     0,     3,     0,     6,     6,    99,   100,
-       0,     1,     0,     0,     0,     0,   117,     0,     0,     0,
-       0,     0,     0,    14,    18,    15,    16,    20,    17,    19,
-      21,     0,    22,     0,     7,    34,    25,    34,    26,    55,
-      65,     8,    70,    23,    93,    79,     9,    27,    88,    24,
-      10,     0,   105,     2,    74,    13,     0,   101,     0,   118,
-       0,   102,     0,     0,     0,   115,   116,     0,     0,     0,
-     108,   103,     0,     0,     0,     0,     0,     0,     0,    88,
-       0,     0,    75,    83,    51,    84,    30,    32,     0,   112,
-       0,     0,    67,     0,     0,    11,    12,     0,     0,     0,
-       0,    97,     0,     0,     0,    47,     0,    40,    39,    35,
-      36,     0,    38,    37,     0,     0,    97,     0,    59,    60,
-      56,    58,    57,    66,    54,    53,    71,    73,    69,    72,
-      68,   106,    95,     0,    94,    80,    82,    78,    81,    77,
-      90,    91,    89,   111,   113,   114,   110,   109,    29,    86,
-       0,   106,     0,   106,   106,   106,     0,     0,     0,    87,
-      63,   106,     0,   106,     0,    96,     0,     0,    41,    98,
-       0,     0,   106,    49,    46,    28,     0,    62,     0,   107,
-      92,    42,    43,    44,     0,     0,    48,    61,    64,    45,
-      50
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     3,     4,     5,    33,    34,   108,    35,    36,    37,
-      38,    74,   109,   110,   157,   186,    39,    40,   124,    41,
-      76,   120,    77,    42,   128,    43,    78,     6,    44,    45,
-     137,    46,    80,    47,    48,    49,   111,   112,    81,   113,
-      79,   134,   152,   153,    50,     7,   165,    69,    70,    60
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -90
-static const yytype_int16 yypact[] =
-{
-       4,    42,   -90,    96,   -90,   111,   -90,    15,   -90,   -90,
-      75,   -90,    82,    42,   104,    42,   110,   107,    42,   115,
-     125,    -4,   121,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   162,   -90,   163,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   139,   -90,   -90,   138,   -90,   142,   -90,   143,   -90,
-     152,   -90,   164,   167,   168,   -90,   -90,    -4,    -4,    77,
-     -18,   -90,   177,   185,    33,    71,   195,   247,   236,    -2,
-     236,   171,   -90,   -90,   -90,   -90,   -90,   -90,    41,   -90,
-      -4,    -4,   138,    97,    97,   -90,   -90,   186,   187,   194,
-      42,    42,    -4,   196,    97,   -90,   219,   -90,   -90,   -90,
-     -90,   210,   -90,   -90,   204,    42,    42,   199,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   222,   -90,   223,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   215,   -90,   -90,   -90,   -90,   -90,
-      -4,   222,   228,   222,    -5,   222,    97,    35,   229,   -90,
-     -90,   222,   232,   222,    -4,   -90,   135,   233,   -90,   -90,
-     234,   235,   222,   240,   -90,   -90,   237,   -90,   239,   -13,
-     -90,   -90,   -90,   -90,   244,    42,   -90,   -90,   -90,   -90,
-     -90
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-     -90,   -90,   269,   271,   -90,    23,   -70,   -90,   -90,   -90,
-     -90,   243,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -48,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -20,   -90,   -90,   -90,   -90,   -90,   206,   205,   -68,
-     -90,   -90,   169,    -1,    27,    -7,   118,   -66,   -89,   -90
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -86
-static const yytype_int16 yytable[] =
-{
-      10,    88,    89,    54,   146,   147,   119,     1,   122,   164,
-      93,   141,    56,   142,    58,   156,    94,    62,     1,    90,
-      91,   131,    65,    66,   144,   145,    67,    90,    91,   132,
-     127,    68,   136,   -31,    97,     2,   154,   -31,   -31,   -31,
-     -31,   -31,   -31,   -31,   -31,    98,    52,   -31,   -31,    99,
-     -31,   100,   101,   102,   103,   104,   -31,   105,   129,   106,
-     138,   173,    92,   141,   107,   142,   174,   172,     8,     9,
-     143,   -33,    97,    90,    91,   -33,   -33,   -33,   -33,   -33,
-     -33,   -33,   -33,    98,   166,   -33,   -33,    99,   -33,   100,
-     101,   102,   103,   104,   -33,   105,    11,   106,   179,   151,
-     123,   126,   107,   135,   125,   130,     2,   139,     2,    90,
-      91,    -5,    12,    55,   161,    13,    14,    15,    16,    17,
-      18,    19,    20,    65,    66,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    57,    59,    31,    61,    -4,
-      12,    63,    32,    13,    14,    15,    16,    17,    18,    19,
-      20,    64,    71,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    72,    73,    31,   180,    90,    91,    52,
-      32,   -85,    97,    82,    83,   -85,   -85,   -85,   -85,   -85,
-     -85,   -85,   -85,    84,   190,   -85,   -85,    99,   -85,   -85,
-     -85,   -85,   -85,   -85,   -85,    85,    97,   106,    86,    87,
-     -52,   -52,   140,   -52,   -52,   -52,   -52,    98,    95,   -52,
-     -52,    99,   114,   115,   116,   117,    96,   148,   149,   150,
-     158,   106,   155,   159,    97,   163,   118,   -76,   -76,   -76,
-     -76,   -76,   -76,   -76,   -76,   160,   164,   -76,   -76,    99,
-      13,    14,    15,    16,    17,    18,    19,    20,    91,   106,
-      21,    22,    14,    15,   140,    17,    18,    19,    20,   168,
-     175,    21,    22,   177,   181,   182,   183,    32,   187,   167,
-     188,   169,   170,   171,   185,   189,    53,    51,    32,   176,
-      75,   178,   121,     0,   133,   162,     0,     0,     0,     0,
-     184
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-90))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       1,    67,    68,    10,    93,    94,    76,     3,    76,    14,
-      28,    81,    13,    81,    15,   104,    34,    18,     3,    32,
-      33,    23,    26,    27,    90,    91,    30,    32,    33,    31,
-      78,    35,    80,     0,     1,    31,   102,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    31,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    78,    26,
-      80,    26,    69,   133,    31,   133,    31,   156,    26,    27,
-      29,     0,     1,    32,    33,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,   150,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,    26,   164,   100,
-      77,    78,    31,    80,    77,    78,    31,    80,    31,    32,
-      33,     0,     1,    31,   115,     4,     5,     6,     7,     8,
-       9,    10,    11,    26,    27,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    31,    26,    26,    31,     0,
-       1,    26,    31,     4,     5,     6,     7,     8,     9,    10,
-      11,    26,    31,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,     1,     1,    26,    31,    32,    33,    31,
-      31,     0,     1,    31,    31,     4,     5,     6,     7,     8,
-       9,    10,    11,    31,   185,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    31,     1,    26,    31,    31,
-       5,     6,    31,     8,     9,    10,    11,    12,    31,    14,
-      15,    16,    17,    18,    19,    20,    31,    31,    31,    25,
-       1,    26,    26,    13,     1,    26,    31,     4,     5,     6,
-       7,     8,     9,    10,    11,    31,    14,    14,    15,    16,
-       4,     5,     6,     7,     8,     9,    10,    11,    33,    26,
-      14,    15,     5,     6,    31,     8,     9,    10,    11,    31,
-      31,    14,    15,    31,    31,    31,    31,    31,    31,   151,
-      31,   153,   154,   155,    34,    31,     7,     6,    31,   161,
-      37,   163,    76,    -1,    79,   116,    -1,    -1,    -1,    -1,
-     172
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,     3,    31,    37,    38,    39,    63,    81,    26,    27,
-      79,     0,     1,     4,     5,     6,     7,     8,     9,    10,
-      11,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    26,    31,    40,    41,    43,    44,    45,    46,    52,
-      53,    55,    59,    61,    64,    65,    67,    69,    70,    71,
-      80,    39,    31,    38,    81,    31,    79,    31,    79,    26,
-      85,    31,    79,    26,    26,    26,    27,    30,    35,    83,
-      84,    31,     1,     1,    47,    47,    56,    58,    62,    76,
-      68,    74,    31,    31,    31,    31,    31,    31,    83,    83,
-      32,    33,    81,    28,    34,    31,    31,     1,    12,    16,
-      18,    19,    20,    21,    22,    24,    26,    31,    42,    48,
-      49,    72,    73,    75,    17,    18,    19,    20,    31,    42,
-      57,    73,    75,    41,    54,    80,    41,    55,    60,    67,
-      80,    23,    31,    74,    77,    41,    55,    66,    67,    80,
-      31,    42,    75,    29,    83,    83,    84,    84,    31,    31,
-      25,    79,    78,    79,    83,    26,    84,    50,     1,    13,
-      31,    79,    78,    26,    14,    82,    83,    82,    31,    82,
-      82,    82,    84,    26,    31,    31,    82,    31,    82,    83,
-      31,    31,    31,    31,    82,    34,    51,    31,    31,    31,
-      79
-};
-
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
-
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  However,
-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
-   discussed.  */
-
-#define YYFAIL		goto yyerrlab
-#if defined YYFAIL
-  /* This is here to suppress warnings from the GCC cpp's
-     -Wunused-macros.  Normally we don't worry about that warning, but
-     some users do, and we want to make it easy for users to remove
-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
-#endif
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
-
-
-#define YYTERROR	1
-#define YYERRCODE	256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-#endif
-
-
-/* This macro is provided for backward compatibility. */
-
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
-{
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
-# endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
-{
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
-{
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       );
-      YYFPRINTF (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
-{
-  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
-  YYSIZE_T yysize1;
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = 0;
-  /* Arguments of yyformat. */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
-  int yycount = 0;
-
-  /* There are many possibilities here to consider:
-     - Assume YYFAIL is not used.  It's too flawed to consider.  See
-       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
-       for details.  YYERROR is fine as it does not invoke this
-       function.
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[*yyssp];
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-                if (! (yysize <= yysize1
-                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                  return 2;
-                yysize = yysize1;
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  yysize1 = yysize + yystrlen (yyformat);
-  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-    return 2;
-  yysize = yysize1;
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* Avoid sprintf, as that infringes on the user's name space.
-     Don't have undefined behavior even if the translation
-     produced a string with the wrong number of "%s"s.  */
-  {
-    char *yyp = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          yyp++;
-          yyformat++;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
-{
-  YYUSE (yyvaluep);
-
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-      case 53: /* "choice_entry" */
-
-	{
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		(yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
-	if (current_menu == (yyvaluep->menu))
-		menu_end_menu();
-};
-
-	break;
-      case 59: /* "if_entry" */
-
-	{
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		(yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
-	if (current_menu == (yyvaluep->menu))
-		menu_end_menu();
-};
-
-	break;
-      case 65: /* "menu_entry" */
-
-	{
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		(yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
-	if (current_menu == (yyvaluep->menu))
-		menu_end_menu();
-};
-
-	break;
-
-      default:
-	break;
-    }
-}
-
-
-/* Prevent warnings from -Wmissing-prototypes.  */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-    int yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
-
-       Refer to the stacks thru separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
-
-  int yyn;
-  int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-  yyssp = yyss;
-  yyvsp = yyvs;
-
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-	/* Give user a chance to reallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yystacksize);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
-
-      {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
-  yystate = yyn;
-  *++yyvsp = yylval;
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 10:
-
-    { zconf_error("unexpected end statement"); }
-    break;
-
-  case 11:
-
-    { zconf_error("unknown statement \"%s\"", (yyvsp[(2) - (4)].string)); }
-    break;
-
-  case 12:
-
-    {
-	zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[(2) - (4)].id)->name);
-}
-    break;
-
-  case 13:
-
-    { zconf_error("invalid statement"); }
-    break;
-
-  case 28:
-
-    { zconf_error("unknown option \"%s\"", (yyvsp[(1) - (3)].string)); }
-    break;
-
-  case 29:
-
-    { zconf_error("invalid option"); }
-    break;
-
-  case 30:
-
-    {
-	struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 31:
-
-    {
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 32:
-
-    {
-	struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 33:
-
-    {
-	if (current_entry->prompt)
-		current_entry->prompt->type = P_MENU;
-	else
-		zconfprint("warning: menuconfig statement without prompt");
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 41:
-
-    {
-	menu_set_type((yyvsp[(1) - (3)].id)->stype);
-	printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		(yyvsp[(1) - (3)].id)->stype);
-}
-    break;
-
-  case 42:
-
-    {
-	menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 43:
-
-    {
-	menu_add_expr(P_DEFAULT, (yyvsp[(2) - (4)].expr), (yyvsp[(3) - (4)].expr));
-	if ((yyvsp[(1) - (4)].id)->stype != S_UNKNOWN)
-		menu_set_type((yyvsp[(1) - (4)].id)->stype);
-	printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		(yyvsp[(1) - (4)].id)->stype);
-}
-    break;
-
-  case 44:
-
-    {
-	menu_add_symbol(P_SELECT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 45:
-
-    {
-	menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[(2) - (5)].symbol), (yyvsp[(3) - (5)].symbol)), (yyvsp[(4) - (5)].expr));
-	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 48:
-
-    {
-	const struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
-	if (id && id->flags & TF_OPTION)
-		menu_add_option(id->token, (yyvsp[(3) - (3)].string));
-	else
-		zconfprint("warning: ignoring unknown option %s", (yyvsp[(2) - (3)].string));
-	free((yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 49:
-
-    { (yyval.string) = NULL; }
-    break;
-
-  case 50:
-
-    { (yyval.string) = (yyvsp[(2) - (2)].string); }
-    break;
-
-  case 51:
-
-    {
-	struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
-	sym->flags |= SYMBOL_AUTO;
-	menu_add_entry(sym);
-	menu_add_expr(P_CHOICE, NULL, NULL);
-	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 52:
-
-    {
-	(yyval.menu) = menu_add_menu();
-}
-    break;
-
-  case 53:
-
-    {
-	if (zconf_endtoken((yyvsp[(1) - (1)].id), T_CHOICE, T_ENDCHOICE)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
-	}
-}
-    break;
-
-  case 61:
-
-    {
-	menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 62:
-
-    {
-	if ((yyvsp[(1) - (3)].id)->stype == S_BOOLEAN || (yyvsp[(1) - (3)].id)->stype == S_TRISTATE) {
-		menu_set_type((yyvsp[(1) - (3)].id)->stype);
-		printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-			zconf_curname(), zconf_lineno(),
-			(yyvsp[(1) - (3)].id)->stype);
-	} else
-		YYERROR;
-}
-    break;
-
-  case 63:
-
-    {
-	current_entry->sym->flags |= SYMBOL_OPTIONAL;
-	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 64:
-
-    {
-	if ((yyvsp[(1) - (4)].id)->stype == S_UNKNOWN) {
-		menu_add_symbol(P_DEFAULT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
-		printd(DEBUG_PARSE, "%s:%d:default\n",
-			zconf_curname(), zconf_lineno());
-	} else
-		YYERROR;
-}
-    break;
-
-  case 67:
-
-    {
-	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
-	menu_add_entry(NULL);
-	menu_add_dep((yyvsp[(2) - (3)].expr));
-	(yyval.menu) = menu_add_menu();
-}
-    break;
-
-  case 68:
-
-    {
-	if (zconf_endtoken((yyvsp[(1) - (1)].id), T_IF, T_ENDIF)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
-	}
-}
-    break;
-
-  case 74:
-
-    {
-	menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
-}
-    break;
-
-  case 75:
-
-    {
-	menu_add_entry(NULL);
-	menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
-	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 76:
-
-    {
-	(yyval.menu) = menu_add_menu();
-}
-    break;
-
-  case 77:
-
-    {
-	if (zconf_endtoken((yyvsp[(1) - (1)].id), T_MENU, T_ENDMENU)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
-	}
-}
-    break;
-
-  case 83:
-
-    {
-	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
-	zconf_nextfile((yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 84:
-
-    {
-	menu_add_entry(NULL);
-	menu_add_prompt(P_COMMENT, (yyvsp[(2) - (3)].string), NULL);
-	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 85:
-
-    {
-	menu_end_entry();
-}
-    break;
-
-  case 86:
-
-    {
-	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
-	zconf_starthelp();
-}
-    break;
-
-  case 87:
-
-    {
-	current_entry->help = (yyvsp[(2) - (2)].string);
-}
-    break;
-
-  case 92:
-
-    {
-	menu_add_dep((yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 96:
-
-    {
-	menu_add_visibility((yyvsp[(2) - (2)].expr));
-}
-    break;
-
-  case 98:
-
-    {
-	menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
-}
-    break;
-
-  case 101:
-
-    { (yyval.id) = (yyvsp[(1) - (2)].id); }
-    break;
-
-  case 102:
-
-    { (yyval.id) = (yyvsp[(1) - (2)].id); }
-    break;
-
-  case 103:
-
-    { (yyval.id) = (yyvsp[(1) - (2)].id); }
-    break;
-
-  case 106:
-
-    { (yyval.expr) = NULL; }
-    break;
-
-  case 107:
-
-    { (yyval.expr) = (yyvsp[(2) - (2)].expr); }
-    break;
-
-  case 108:
-
-    { (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); }
-    break;
-
-  case 109:
-
-    { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); }
-    break;
-
-  case 110:
-
-    { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); }
-    break;
-
-  case 111:
-
-    { (yyval.expr) = (yyvsp[(2) - (3)].expr); }
-    break;
-
-  case 112:
-
-    { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); }
-    break;
-
-  case 113:
-
-    { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
-    break;
-
-  case 114:
-
-    { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
-    break;
-
-  case 115:
-
-    { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); }
-    break;
-
-  case 116:
-
-    { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); }
-    break;
-
-  case 117:
-
-    { (yyval.string) = NULL; }
-    break;
-
-
-
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
-
-      if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
-      else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-	YYABORT;
-
-
-      yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  *++yyvsp = yylval;
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#if !defined(yyoverflow) || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEMPTY)
-    {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval);
-    }
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
-
-
-
-
-void conf_parse(const char *name)
-{
-	struct symbol *sym;
-	int i;
-
-	zconf_initscan(name);
-
-	sym_init();
-	_menu_init();
-	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
-
-	if (getenv("ZCONF_DEBUG"))
-		zconfdebug = 1;
-	zconfparse();
-	if (zconfnerrs)
-		exit(1);
-	if (!modules_sym)
-		modules_sym = sym_find( "n" );
-
-	rootmenu.prompt->text = _(rootmenu.prompt->text);
-	rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
-
-	menu_finalize(&rootmenu);
-	for_all_symbols(i, sym) {
-		if (sym_check_deps(sym))
-			zconfnerrs++;
-        }
-	if (zconfnerrs)
-		exit(1);
-	sym_set_change_count(1);
-}
-
-static const char *zconf_tokenname(int token)
-{
-	switch (token) {
-	case T_MENU:		return "menu";
-	case T_ENDMENU:		return "endmenu";
-	case T_CHOICE:		return "choice";
-	case T_ENDCHOICE:	return "endchoice";
-	case T_IF:		return "if";
-	case T_ENDIF:		return "endif";
-	case T_DEPENDS:		return "depends";
-	case T_VISIBLE:		return "visible";
-	}
-	return "<token>";
-}
-
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
-{
-	if (id->token != endtoken) {
-		zconf_error("unexpected '%s' within %s block",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	if (current_menu->file != current_file) {
-		zconf_error("'%s' in different file than '%s'",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		fprintf(stderr, "%s:%d: location of the '%s'\n",
-			current_menu->file->name, current_menu->lineno,
-			zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	return true;
-}
-
-static void zconfprint(const char *err, ...)
-{
-	va_list ap;
-
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconf_error(const char *err, ...)
-{
-	va_list ap;
-
-	zconfnerrs++;
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconferror(const char *err)
-{
-	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
-}
-
-static void print_quoted_string(FILE *out, const char *str)
-{
-	const char *p;
-	int len;
-
-	putc('"', out);
-	while ((p = strchr(str, '"'))) {
-		len = p - str;
-		if (len)
-			fprintf(out, "%.*s", len, str);
-		fputs("\\\"", out);
-		str = p + 1;
-	}
-	fputs(str, out);
-	putc('"', out);
-}
-
-static void print_symbol(FILE *out, struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	struct property *prop;
-
-	if (sym_is_choice(sym))
-		fprintf(out, "\nchoice\n");
-	else
-		fprintf(out, "\nconfig %s\n", sym->name);
-	switch (sym->type) {
-	case S_BOOLEAN:
-		fputs("  boolean\n", out);
-		break;
-	case S_TRISTATE:
-		fputs("  tristate\n", out);
-		break;
-	case S_STRING:
-		fputs("  string\n", out);
-		break;
-	case S_INT:
-		fputs("  integer\n", out);
-		break;
-	case S_HEX:
-		fputs("  hex\n", out);
-		break;
-	default:
-		fputs("  ???\n", out);
-		break;
-	}
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->menu != menu)
-			continue;
-		switch (prop->type) {
-		case P_PROMPT:
-			fputs("  prompt ", out);
-			print_quoted_string(out, prop->text);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_DEFAULT:
-			fputs( "  default ", out);
-			expr_fprint(prop->expr, out);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_CHOICE:
-			fputs("  #choice value\n", out);
-			break;
-		case P_SELECT:
-			fputs( "  select ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_RANGE:
-			fputs( "  range ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_MENU:
-			fputs( "  menu ", out);
-			print_quoted_string(out, prop->text);
-			fputc('\n', out);
-			break;
-		default:
-			fprintf(out, "  unknown prop %d!\n", prop->type);
-			break;
-		}
-	}
-	if (menu->help) {
-		int len = strlen(menu->help);
-		while (menu->help[--len] == '\n')
-			menu->help[len] = 0;
-		fprintf(out, "  help\n%s\n", menu->help);
-	}
-}
-
-void zconfdump(FILE *out)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct menu *menu;
-
-	menu = rootmenu.list;
-	while (menu) {
-		if ((sym = menu->sym))
-			print_symbol(out, menu);
-		else if ((prop = menu->prompt)) {
-			switch (prop->type) {
-			case P_COMMENT:
-				fputs("\ncomment ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			case P_MENU:
-				fputs("\nmenu ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			default:
-				;
-			}
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs("  depends ", out);
-				expr_fprint(prop->visible.expr, out);
-				fputc('\n', out);
-			}
-		}
-
-		if (menu->list)
-			menu = menu->list;
-		else if (menu->next)
-			menu = menu->next;
-		else while ((menu = menu->parent)) {
-			if (menu->prompt && menu->prompt->type == P_MENU)
-				fputs("\nendmenu\n", out);
-			if (menu->next) {
-				menu = menu->next;
-				break;
-			}
-		}
-	}
-}
-
-#include "zconf.lex.c"
-#include "util.c"
-#include "confdata.c"
-#include "expr.c"
-#include "symbol.c"
-#include "menu.c"
-
diff --git a/support/kconfig/zconf.y b/support/kconfig/zconf.y
deleted file mode 100644
index 9b02d02f..00000000
--- a/support/kconfig/zconf.y
+++ /dev/null
@@ -1,733 +0,0 @@
-%{
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#include "lkc.h"
-
-#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
-
-#define PRINTD		0x0001
-#define DEBUG_PARSE	0x0002
-
-int cdebug = PRINTD;
-
-extern int zconflex(void);
-static void zconfprint(const char *err, ...);
-static void zconf_error(const char *err, ...);
-static void zconferror(const char *err);
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
-
-struct symbol *symbol_hash[SYMBOL_HASHSIZE];
-
-static struct menu *current_menu, *current_entry;
-
-%}
-%expect 30
-
-%union
-{
-	char *string;
-	struct file *file;
-	struct symbol *symbol;
-	struct expr *expr;
-	struct menu *menu;
-	const struct kconf_id *id;
-}
-
-%token <id>T_MAINMENU
-%token <id>T_MENU
-%token <id>T_ENDMENU
-%token <id>T_SOURCE
-%token <id>T_CHOICE
-%token <id>T_ENDCHOICE
-%token <id>T_COMMENT
-%token <id>T_CONFIG
-%token <id>T_MENUCONFIG
-%token <id>T_HELP
-%token <string> T_HELPTEXT
-%token <id>T_IF
-%token <id>T_ENDIF
-%token <id>T_DEPENDS
-%token <id>T_OPTIONAL
-%token <id>T_PROMPT
-%token <id>T_TYPE
-%token <id>T_DEFAULT
-%token <id>T_SELECT
-%token <id>T_RANGE
-%token <id>T_VISIBLE
-%token <id>T_OPTION
-%token <id>T_ON
-%token <string> T_WORD
-%token <string> T_WORD_QUOTE
-%token T_UNEQUAL
-%token T_CLOSE_PAREN
-%token T_OPEN_PAREN
-%token T_EOL
-
-%left T_OR
-%left T_AND
-%left T_EQUAL T_UNEQUAL
-%nonassoc T_NOT
-
-%type <string> prompt
-%type <symbol> symbol
-%type <expr> expr
-%type <expr> if_expr
-%type <id> end
-%type <id> option_name
-%type <menu> if_entry menu_entry choice_entry
-%type <string> symbol_option_arg word_opt
-
-%destructor {
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		$$->file->name, $$->lineno);
-	if (current_menu == $$)
-		menu_end_menu();
-} if_entry menu_entry choice_entry
-
-%{
-/* Include zconf.hash.c here so it can see the token constants. */
-#include "zconf.hash.c"
-%}
-
-%%
-input: nl start | start;
-
-start: mainmenu_stmt stmt_list | stmt_list;
-
-stmt_list:
-	  /* empty */
-	| stmt_list common_stmt
-	| stmt_list choice_stmt
-	| stmt_list menu_stmt
-	| stmt_list end			{ zconf_error("unexpected end statement"); }
-	| stmt_list T_WORD error T_EOL	{ zconf_error("unknown statement \"%s\"", $2); }
-	| stmt_list option_name error T_EOL
-{
-	zconf_error("unexpected option \"%s\"", kconf_id_strings + $2->name);
-}
-	| stmt_list error T_EOL		{ zconf_error("invalid statement"); }
-;
-
-option_name:
-	T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT | T_VISIBLE
-;
-
-common_stmt:
-	  T_EOL
-	| if_stmt
-	| comment_stmt
-	| config_stmt
-	| menuconfig_stmt
-	| source_stmt
-;
-
-option_error:
-	  T_WORD error T_EOL		{ zconf_error("unknown option \"%s\"", $1); }
-	| error T_EOL			{ zconf_error("invalid option"); }
-;
-
-
-/* config/menuconfig entry */
-
-config_entry_start: T_CONFIG T_WORD T_EOL
-{
-	struct symbol *sym = sym_lookup($2, 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2);
-};
-
-config_stmt: config_entry_start config_option_list
-{
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-};
-
-menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL
-{
-	struct symbol *sym = sym_lookup($2, 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2);
-};
-
-menuconfig_stmt: menuconfig_entry_start config_option_list
-{
-	if (current_entry->prompt)
-		current_entry->prompt->type = P_MENU;
-	else
-		zconfprint("warning: menuconfig statement without prompt");
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-};
-
-config_option_list:
-	  /* empty */
-	| config_option_list config_option
-	| config_option_list symbol_option
-	| config_option_list depends
-	| config_option_list help
-	| config_option_list option_error
-	| config_option_list T_EOL
-;
-
-config_option: T_TYPE prompt_stmt_opt T_EOL
-{
-	menu_set_type($1->stype);
-	printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		$1->stype);
-};
-
-config_option: T_PROMPT prompt if_expr T_EOL
-{
-	menu_add_prompt(P_PROMPT, $2, $3);
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_DEFAULT expr if_expr T_EOL
-{
-	menu_add_expr(P_DEFAULT, $2, $3);
-	if ($1->stype != S_UNKNOWN)
-		menu_set_type($1->stype);
-	printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		$1->stype);
-};
-
-config_option: T_SELECT T_WORD if_expr T_EOL
-{
-	menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3);
-	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_RANGE symbol symbol if_expr T_EOL
-{
-	menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4);
-	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
-};
-
-symbol_option: T_OPTION symbol_option_list T_EOL
-;
-
-symbol_option_list:
-	  /* empty */
-	| symbol_option_list T_WORD symbol_option_arg
-{
-	const struct kconf_id *id = kconf_id_lookup($2, strlen($2));
-	if (id && id->flags & TF_OPTION)
-		menu_add_option(id->token, $3);
-	else
-		zconfprint("warning: ignoring unknown option %s", $2);
-	free($2);
-};
-
-symbol_option_arg:
-	  /* empty */		{ $$ = NULL; }
-	| T_EQUAL prompt	{ $$ = $2; }
-;
-
-/* choice entry */
-
-choice: T_CHOICE word_opt T_EOL
-{
-	struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
-	sym->flags |= SYMBOL_AUTO;
-	menu_add_entry(sym);
-	menu_add_expr(P_CHOICE, NULL, NULL);
-	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
-};
-
-choice_entry: choice choice_option_list
-{
-	$$ = menu_add_menu();
-};
-
-choice_end: end
-{
-	if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
-	}
-};
-
-choice_stmt: choice_entry choice_block choice_end
-;
-
-choice_option_list:
-	  /* empty */
-	| choice_option_list choice_option
-	| choice_option_list depends
-	| choice_option_list help
-	| choice_option_list T_EOL
-	| choice_option_list option_error
-;
-
-choice_option: T_PROMPT prompt if_expr T_EOL
-{
-	menu_add_prompt(P_PROMPT, $2, $3);
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-};
-
-choice_option: T_TYPE prompt_stmt_opt T_EOL
-{
-	if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) {
-		menu_set_type($1->stype);
-		printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-			zconf_curname(), zconf_lineno(),
-			$1->stype);
-	} else
-		YYERROR;
-};
-
-choice_option: T_OPTIONAL T_EOL
-{
-	current_entry->sym->flags |= SYMBOL_OPTIONAL;
-	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
-};
-
-choice_option: T_DEFAULT T_WORD if_expr T_EOL
-{
-	if ($1->stype == S_UNKNOWN) {
-		menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
-		printd(DEBUG_PARSE, "%s:%d:default\n",
-			zconf_curname(), zconf_lineno());
-	} else
-		YYERROR;
-};
-
-choice_block:
-	  /* empty */
-	| choice_block common_stmt
-;
-
-/* if entry */
-
-if_entry: T_IF expr nl
-{
-	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
-	menu_add_entry(NULL);
-	menu_add_dep($2);
-	$$ = menu_add_menu();
-};
-
-if_end: end
-{
-	if (zconf_endtoken($1, T_IF, T_ENDIF)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
-	}
-};
-
-if_stmt: if_entry if_block if_end
-;
-
-if_block:
-	  /* empty */
-	| if_block common_stmt
-	| if_block menu_stmt
-	| if_block choice_stmt
-;
-
-/* mainmenu entry */
-
-mainmenu_stmt: T_MAINMENU prompt nl
-{
-	menu_add_prompt(P_MENU, $2, NULL);
-};
-
-/* menu entry */
-
-menu: T_MENU prompt T_EOL
-{
-	menu_add_entry(NULL);
-	menu_add_prompt(P_MENU, $2, NULL);
-	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
-};
-
-menu_entry: menu visibility_list depends_list
-{
-	$$ = menu_add_menu();
-};
-
-menu_end: end
-{
-	if (zconf_endtoken($1, T_MENU, T_ENDMENU)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
-	}
-};
-
-menu_stmt: menu_entry menu_block menu_end
-;
-
-menu_block:
-	  /* empty */
-	| menu_block common_stmt
-	| menu_block menu_stmt
-	| menu_block choice_stmt
-;
-
-source_stmt: T_SOURCE prompt T_EOL
-{
-	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
-	zconf_nextfile($2);
-};
-
-/* comment entry */
-
-comment: T_COMMENT prompt T_EOL
-{
-	menu_add_entry(NULL);
-	menu_add_prompt(P_COMMENT, $2, NULL);
-	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
-};
-
-comment_stmt: comment depends_list
-{
-	menu_end_entry();
-};
-
-/* help option */
-
-help_start: T_HELP T_EOL
-{
-	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
-	zconf_starthelp();
-};
-
-help: help_start T_HELPTEXT
-{
-	current_entry->help = $2;
-};
-
-/* depends option */
-
-depends_list:
-	  /* empty */
-	| depends_list depends
-	| depends_list T_EOL
-	| depends_list option_error
-;
-
-depends: T_DEPENDS T_ON expr T_EOL
-{
-	menu_add_dep($3);
-	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
-};
-
-/* visibility option */
-
-visibility_list:
-	  /* empty */
-	| visibility_list visible
-	| visibility_list T_EOL
-;
-
-visible: T_VISIBLE if_expr
-{
-	menu_add_visibility($2);
-};
-
-/* prompt statement */
-
-prompt_stmt_opt:
-	  /* empty */
-	| prompt if_expr
-{
-	menu_add_prompt(P_PROMPT, $1, $2);
-};
-
-prompt:	  T_WORD
-	| T_WORD_QUOTE
-;
-
-end:	  T_ENDMENU T_EOL	{ $$ = $1; }
-	| T_ENDCHOICE T_EOL	{ $$ = $1; }
-	| T_ENDIF T_EOL		{ $$ = $1; }
-;
-
-nl:
-	  T_EOL
-	| nl T_EOL
-;
-
-if_expr:  /* empty */			{ $$ = NULL; }
-	| T_IF expr			{ $$ = $2; }
-;
-
-expr:	  symbol				{ $$ = expr_alloc_symbol($1); }
-	| symbol T_EQUAL symbol			{ $$ = expr_alloc_comp(E_EQUAL, $1, $3); }
-	| symbol T_UNEQUAL symbol		{ $$ = expr_alloc_comp(E_UNEQUAL, $1, $3); }
-	| T_OPEN_PAREN expr T_CLOSE_PAREN	{ $$ = $2; }
-	| T_NOT expr				{ $$ = expr_alloc_one(E_NOT, $2); }
-	| expr T_OR expr			{ $$ = expr_alloc_two(E_OR, $1, $3); }
-	| expr T_AND expr			{ $$ = expr_alloc_two(E_AND, $1, $3); }
-;
-
-symbol:	  T_WORD	{ $$ = sym_lookup($1, 0); free($1); }
-	| T_WORD_QUOTE	{ $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
-;
-
-word_opt: /* empty */			{ $$ = NULL; }
-	| T_WORD
-
-%%
-
-void conf_parse(const char *name)
-{
-	struct symbol *sym;
-	int i;
-
-	zconf_initscan(name);
-
-	sym_init();
-	_menu_init();
-	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
-
-	if (getenv("ZCONF_DEBUG"))
-		zconfdebug = 1;
-	zconfparse();
-	if (zconfnerrs)
-		exit(1);
-	if (!modules_sym)
-		modules_sym = sym_find( "n" );
-
-	rootmenu.prompt->text = _(rootmenu.prompt->text);
-	rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
-
-	menu_finalize(&rootmenu);
-	for_all_symbols(i, sym) {
-		if (sym_check_deps(sym))
-			zconfnerrs++;
-        }
-	if (zconfnerrs)
-		exit(1);
-	sym_set_change_count(1);
-}
-
-static const char *zconf_tokenname(int token)
-{
-	switch (token) {
-	case T_MENU:		return "menu";
-	case T_ENDMENU:		return "endmenu";
-	case T_CHOICE:		return "choice";
-	case T_ENDCHOICE:	return "endchoice";
-	case T_IF:		return "if";
-	case T_ENDIF:		return "endif";
-	case T_DEPENDS:		return "depends";
-	case T_VISIBLE:		return "visible";
-	}
-	return "<token>";
-}
-
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
-{
-	if (id->token != endtoken) {
-		zconf_error("unexpected '%s' within %s block",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	if (current_menu->file != current_file) {
-		zconf_error("'%s' in different file than '%s'",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		fprintf(stderr, "%s:%d: location of the '%s'\n",
-			current_menu->file->name, current_menu->lineno,
-			zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	return true;
-}
-
-static void zconfprint(const char *err, ...)
-{
-	va_list ap;
-
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconf_error(const char *err, ...)
-{
-	va_list ap;
-
-	zconfnerrs++;
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconferror(const char *err)
-{
-	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
-}
-
-static void print_quoted_string(FILE *out, const char *str)
-{
-	const char *p;
-	int len;
-
-	putc('"', out);
-	while ((p = strchr(str, '"'))) {
-		len = p - str;
-		if (len)
-			fprintf(out, "%.*s", len, str);
-		fputs("\\\"", out);
-		str = p + 1;
-	}
-	fputs(str, out);
-	putc('"', out);
-}
-
-static void print_symbol(FILE *out, struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	struct property *prop;
-
-	if (sym_is_choice(sym))
-		fprintf(out, "\nchoice\n");
-	else
-		fprintf(out, "\nconfig %s\n", sym->name);
-	switch (sym->type) {
-	case S_BOOLEAN:
-		fputs("  boolean\n", out);
-		break;
-	case S_TRISTATE:
-		fputs("  tristate\n", out);
-		break;
-	case S_STRING:
-		fputs("  string\n", out);
-		break;
-	case S_INT:
-		fputs("  integer\n", out);
-		break;
-	case S_HEX:
-		fputs("  hex\n", out);
-		break;
-	default:
-		fputs("  ???\n", out);
-		break;
-	}
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->menu != menu)
-			continue;
-		switch (prop->type) {
-		case P_PROMPT:
-			fputs("  prompt ", out);
-			print_quoted_string(out, prop->text);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_DEFAULT:
-			fputs( "  default ", out);
-			expr_fprint(prop->expr, out);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_CHOICE:
-			fputs("  #choice value\n", out);
-			break;
-		case P_SELECT:
-			fputs( "  select ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_RANGE:
-			fputs( "  range ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_MENU:
-			fputs( "  menu ", out);
-			print_quoted_string(out, prop->text);
-			fputc('\n', out);
-			break;
-		default:
-			fprintf(out, "  unknown prop %d!\n", prop->type);
-			break;
-		}
-	}
-	if (menu->help) {
-		int len = strlen(menu->help);
-		while (menu->help[--len] == '\n')
-			menu->help[len] = 0;
-		fprintf(out, "  help\n%s\n", menu->help);
-	}
-}
-
-void zconfdump(FILE *out)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct menu *menu;
-
-	menu = rootmenu.list;
-	while (menu) {
-		if ((sym = menu->sym))
-			print_symbol(out, menu);
-		else if ((prop = menu->prompt)) {
-			switch (prop->type) {
-			case P_COMMENT:
-				fputs("\ncomment ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			case P_MENU:
-				fputs("\nmenu ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			default:
-				;
-			}
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs("  depends ", out);
-				expr_fprint(prop->visible.expr, out);
-				fputc('\n', out);
-			}
-		}
-
-		if (menu->list)
-			menu = menu->list;
-		else if (menu->next)
-			menu = menu->next;
-		else while ((menu = menu->parent)) {
-			if (menu->prompt && menu->prompt->type == P_MENU)
-				fputs("\nendmenu\n", out);
-			if (menu->next) {
-				menu = menu->next;
-				break;
-			}
-		}
-	}
-}
-
-#include "zconf.lex.c"
-#include "util.c"
-#include "confdata.c"
-#include "expr.c"
-#include "symbol.c"
-#include "menu.c"
-- 
2.20.1



--===============4509792558724785496==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============4509792558724785496==--

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:35:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:35:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7agY-000209-Dt; Tue, 10 Sep 2019 07:35:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7NOT-0000Xi-A7
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 17:24:01 +0000
X-Inumbo-ID: 9bcef650-d326-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9bcef650-d326-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 17:23:59 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 56AA2F2027;
 Mon,  9 Sep 2019 19:23:58 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 30X50EG_udzG; Mon,  9 Sep 2019 19:23:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B0741F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 19:23:54 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 19:23:41 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:22:38 +0200
Message-ID: <20190909172300.21502-2-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
References: <20190909172300.21502-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Tue, 10 Sep 2019 07:35:32 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH 01/23] kconfig: Import kconfig from
 Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0aW5nIHRoZSBrY29uZmlnIGZyb20gdGhlIExpbnV4IGtlcm5lbApLZXJuZWwgVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlICAgICAgICAgICAgICAg
ICAgICAgICB8ICAyMDggKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZi5jICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDcwMiArKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5j
ICAgICAgICAgICAgICAgICAgICAgfCAxMzgwICsrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvZXhwci5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTI5NyArKysrKysrKysKIHN1cHBv
cnQva2NvbmZpZy5uZXcvZXhwci5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMzMSArKysK
IHN1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2ZnLnNoICAgICAgICAgICAgICAgICAgIHwgICAz
MCArCiBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLmMgICAgICAgICAgICAgICAgICAgICAgICB8
IDE1MTYgKysrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUgICAgICAg
ICAgICAgICAgICAgIHwgIDY2MSArKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuYyAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMzI4ICsrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICsKIHN1cHBvcnQva2NvbmZpZy5uZXcv
bGV4ZXIubCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ3MSArKysrCiBzdXBwb3J0L2tjb25m
aWcubmV3L2xpc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMzIgKwogc3VwcG9ydC9r
Y29uZmlnLm5ldy9sa2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU5ICsrCiBzdXBw
b3J0L2tjb25maWcubmV3L2xrY19wcm90by5oICAgICAgICAgICAgICAgICAgICB8ICAgNjYgKwog
c3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcgICAgICAgfCAgICA0
ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgICAgICAgICAgIHwg
IDMxOSArKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmggICAgICAgICAg
ICAgIHwgIDIzOCArKwogc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jICAg
ICAgICAgICAgfCAgMjg5ICsrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL21lbnVib3gu
YyAgICAgICAgICAgICB8ICA0MjQgKysrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3Rl
eHRib3guYyAgICAgICAgICAgICB8ICAzOTUgKysrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL3V0aWwuYyAgICAgICAgICAgICAgICB8ICA3MDAgKysrKysKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvbHhkaWFsb2cveWVzbm8uYyAgICAgICAgICAgICAgIHwgIDEwMSArCiBzdXBwb3J0L2tjb25m
aWcubmV3L21jb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICB8ICAgNDcgKwogc3VwcG9ydC9r
Y29uZmlnLm5ldy9tY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAxMDM5ICsrKysrKysr
CiBzdXBwb3J0L2tjb25maWcubmV3L21lbnUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4
NjcgKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L21lcmdlX2NvbmZpZy5zaCAgICAgICAgICAg
ICAgICB8ICAxODkgKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoICAgICAgICAg
ICAgICAgICAgIHwgICA0NyArCiBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMgICAgICAgICAg
ICAgICAgICAgICAgICB8IDE1NTUgKysrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvbmNv
bmYuZ3VpLmMgICAgICAgICAgICAgICAgICAgIHwgIDY2NCArKysrKwogc3VwcG9ydC9rY29uZmln
Lm5ldy9uY29uZi5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDkyICsKIHN1cHBvcnQva2Nv
bmZpZy5uZXcvcGFyc2VyLnkgICAgICAgICAgICAgICAgICAgICAgIHwgIDczMSArKysrKwogc3Vw
cG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMgICAgICAgICAgICAgICAgICAgfCAgNTczICsr
KysKIHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoICAgICAgICAgICAgICAgICAgIHwg
ICAzMiArCiBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjICAgICAgICAgICAgICAgICAgICAg
ICB8IDE4OTYgKysrKysrKysrKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5oICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMzMxICsrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9zdHJlYW1s
aW5lX2NvbmZpZy5wbCAgICAgICAgICAgfCAgNjgyICsrKysrCiBzdXBwb3J0L2tjb25maWcubmV3
L3N5bWJvbC5jICAgICAgICAgICAgICAgICAgICAgICB8IDEzMzEgKysrKysrKysrCiBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnICAgICB8ICAgNTIgKwogc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkgfCAgIDEzICsK
IC4uLi9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IHwgICAx
MCArCiBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9LY29uZmlnICAgICAgICAgICB8
ICAgNTYgKwogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkgICAg
ICAgfCAgIDQxICsKIC4uLi90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZyAgICAg
ICAgICAgIHwgICAgNSArCiAuLi4vdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25maWcg
ICAgICAgICAgICB8ICAgIDkgKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxub19l
eHBlY3RlZF9jb25maWcgfCAgICA1ICsKIC4uLi90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVk
X2NvbmZpZyAgICAgICAgICAgIHwgICAgOSArCiAuLi4vdGVzdHMvY2hvaWNlL29sZGFzazBfZXhw
ZWN0ZWRfc3Rkb3V0ICAgICAgICAgICB8ICAgMTAgKwogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcgICAgfCAgICAyICsKIC4uLi90ZXN0cy9jaG9pY2Uvb2xk
YXNrMV9leHBlY3RlZF9zdGRvdXQgICAgICAgICAgIHwgICAxNSArCiAuLi4vdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZyAgICAgICAgICB8ICAgMjEgKwogLi4uL3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5ICAgICAgfCAgIDE2ICsKIC4uLi90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcgICAgICAgICAgIHwgICAgMiArCiAuLi4v
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnICB8ICAgIDMgKwog
Li4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dCAgfCAgICA0
ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkgICAgICAgICAgICAgIHwg
IDI5MSArKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcg
ICAgfCAgIDYzICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weSAgICAg
ICAgICAgIHwgICAxMCArCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3Rk
ZXJyICAgICAgICB8ICAgMzggKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcgICAgfCAgICAyICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29u
ZmlnLmluYzEgICAgICAgICAgIHwgICAgNSArCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMyICAgICAgICAgICB8ICAgIDQgKwogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcuaW5jMyAgICAgICAgICAgfCAgICAyICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJz
aXZlX2luYy9fX2luaXRfXy5weSAgICAgICAgICAgIHwgICAxMSArCiAuLi4vdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyICAgICAgICB8ICAgIDYgKwogc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZyAgICAgfCAgIDI1ICsKIHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5IHwgICAxNSArCiBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9kZWZjb25maWcgICB8ICAgIDEgKwog
Li4uL2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcgfCAgICA0
ICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcgIHwg
ICAzOSArCiAuLi4vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weSAgICAgICAg
ICB8ICAgMTUgKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29u
ZmlnICAgfCAgICAzICsKIC4uLi90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0
ZG91dCAgICAgIHwgICAxMCArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25m
aWcgICAgICAgICAgICB8ICAgMTYgKwogLi4uL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9f
X2luaXRfXy5weSAgICAgICAgfCAgIDIwICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0
ZV9pZl9kZXBfdW5tZXQvY29uZmlnIHwgICAgMSArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVw
X3VubWV0L2V4cGVjdGVkX2NvbmZpZyAgICB8ICAgIDUgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3Mv
YnVpbHRpbl9mdW5jL0tjb25maWcgICAgICAgICAgfCAgIDI3ICsKIC4uLi90ZXN0cy9wcmVwcm9j
ZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weSAgICAgIHwgICAgOSArCiAuLi4vdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyICB8ICAgIDUgKwogLi4uL3Rlc3Rz
L3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91dCAgfCAgICAxICsKIC4uLi90
ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnICAgIHwgICAgNSArCiAu
Li4vcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkgICAgICB8ICAgMTEg
KwogLi4uL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVyciAgfCAg
ICAxICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnICAg
IHwgICA0NCArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkgICAgICAg
ICAgICB8ICAgIDggKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVy
ciAgICAgICAgfCAgIDEwICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3Zhcmlh
YmxlL0tjb25maWcgIHwgICA1MyArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2lu
aXRfXy5weSAgICAgICAgICB8ICAgIDggKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUv
ZXhwZWN0ZWRfc3RkZXJyICAgICAgfCAgICA5ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHl0ZXN0LmluaSAgICAgICAgICAgICAgIHwgICAgNyArCiAuLi4va2NvbmZpZy5uZXcvdGVzdHMv
cmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcgICB8ICAgMzUgKwogLi4uL3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9fX2luaXRfXy5weSAgICAgICAgICAgfCAgIDE3ICsKIC4uLi90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCAgICAgIHwgICAgMiArCiAuLi4vdGVzdHMv
cmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDEgICAgICB8ICAgIDQgKwogLi4uL3Rl
c3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyICAgICAgfCAgICA1ICsKIHN1
cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyOSAr
CiBzdXBwb3J0L2tjb25maWcubmV3L3pjb25mLmxleC5jICAgICAgICAgICAgICAgICAgICB8IDI4
MjAgKysrKysrKysrKysrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMg
ICAgICAgICAgICAgICAgICAgIHwgMjUwNCArKysrKysrKysrKysrKysrKwogOTggZmlsZXMgY2hh
bmdlZCwgMjY0MzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L2NvbmYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmgKIGNyZWF0ZSBtb2RlIDEwMDc1
NSBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvZ2NvbmYuZ2xhZGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L2ltYWdlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvbGtjX3Byb3RvLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2RpYWxvZy5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3guYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNuby5jCiBjcmVhdGUgbW9k
ZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L21lbnUuYwogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZp
Zy5uZXcvbWVyZ2VfY29uZmlnLnNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmln
Lm5ldy9uY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L25jb25mLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1
aS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJvY2Vzcy5jCiBjcmVhdGUgbW9kZSAxMDA3
NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9xY29uZi5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5l
dy9zdHJlYW1saW5lX2NvbmZpZy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy5uZXcvc3ltYm9sLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2F1dG9fc3VibWVudS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9LY29u
ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
X19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVj
dGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dAogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29u
ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
b2xkYXNrMV9leHBlY3RlZF9zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2Nv
bmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAv
X19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZwogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9p
bmMvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRf
Xy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJf
Y2hvaWNlL2RlZmNvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhf
ZGVwL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25m
aWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRl
X2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRp
bl9mdW5jL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9m
dW5jL2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9l
eHBhbnNpb24vX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVycgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9l
c2NhcGUvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92
YXJpYWJsZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0
ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0
LmluaQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9u
ZXN0ZWRfY2hvaWNlL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVk
X3N0ZG91dDAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3Jh
bmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0
MgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMKCmRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L01ha2VmaWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyN2UyCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQpAQCAtMCwwICsxLDIwOCBAQAorIyBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMg
S2VybmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZy
b20gdG9wLWxldmVsIG1ha2VmaWxlCisKK1BIT05ZICs9IHhjb25maWcgZ2NvbmZpZyBtZW51Y29u
ZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZyBcCisJYnVpbGRfbWVudWNv
bmZpZyBidWlsZF9uY29uZmlnIGJ1aWxkX2djb25maWcgYnVpbGRfeGNvbmZpZworCitpZmRlZiBL
QlVJTERfS0NPTkZJRworS2NvbmZpZyA6PSAkKEtCVUlMRF9LQ09ORklHKQorZWxzZQorS2NvbmZp
ZyA6PSBLY29uZmlnCitlbmRpZgorCitpZmVxICgkKHF1aWV0KSxzaWxlbnRfKQorc2lsZW50IDo9
IC1zCitlbmRpZgorCisjIFdlIG5lZWQgdGhpcywgaW4gY2FzZSB0aGUgdXNlciBoYXMgaXQgaW4g
aXRzIGVudmlyb25tZW50Cit1bmV4cG9ydCBDT05GSUdfCisKK3hjb25maWc6ICQob2JqKS9xY29u
ZgorCSQ8ICQoc2lsZW50KSAkKEtjb25maWcpCisKK2djb25maWc6ICQob2JqKS9nY29uZgorCSQ8
ICQoc2lsZW50KSAkKEtjb25maWcpCisKK21lbnVjb25maWc6ICQob2JqKS9tY29uZgorCSQ8ICQo
c2lsZW50KSAkKEtjb25maWcpCisKK2NvbmZpZzogJChvYmopL2NvbmYKKwkkPCAkKHNpbGVudCkg
LS1vbGRhc2tjb25maWcgJChLY29uZmlnKQorCituY29uZmlnOiAkKG9iaikvbmNvbmYKKwkkPCAk
KHNpbGVudCkgJChLY29uZmlnKQorCitidWlsZF9tZW51Y29uZmlnOiAkKG9iaikvbWNvbmYKKwor
YnVpbGRfbmNvbmZpZzogJChvYmopL25jb25mCisKK2J1aWxkX2djb25maWc6ICQob2JqKS9nY29u
ZgorCitidWlsZF94Y29uZmlnOiAkKG9iaikvcWNvbmYKKworbG9jYWx5ZXNjb25maWcgbG9jYWxt
b2Rjb25maWc6ICQob2JqKS9jb25mCisJJChRKXBlcmwgJChzcmN0cmVlKS8kKHNyYykvc3RyZWFt
bGluZV9jb25maWcucGwgLS0kQCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZwor
CSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJCVwKKwkJCWNtcCAtcyAudG1wLmNvbmZp
ZyAuY29uZmlnIHx8CQkJXAorCQkJKG12IC1mIC5jb25maWcgLmNvbmZpZy5vbGQuMTsJCQlcCisJ
CQkgbXYgLWYgLnRtcC5jb25maWcgLmNvbmZpZzsJCQlcCisJCQkgJDwgJChzaWxlbnQpIC0tb2xk
Y29uZmlnICQoS2NvbmZpZyk7CQlcCisJCQkgbXYgLWYgLmNvbmZpZy5vbGQuMSAuY29uZmlnLm9s
ZCkJCVwKKwllbHNlCQkJCQkJCQlcCisJCQltdiAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJCVwK
KwkJCSQ8ICQoc2lsZW50KSAtLW9sZGNvbmZpZyAkKEtjb25maWcpOwkJXAorCWZpCisJJChRKXJt
IC1mIC50bXAuY29uZmlnCisKKyMgVGhlc2UgdGFyZ2V0cyBtYXAgMToxIHRvIHRoZSBjb21tYW5k
bGluZSBvcHRpb25zIG9mICdjb25mJworIworIyBOb3RlOgorIyAgc3luY2NvbmZpZyBoYXMgYmVj
b21lIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgaXMgbm93CisjICBkZXBy
ZWNhdGVkIGZvciBleHRlcm5hbCB1c2UKK3NpbXBsZS10YXJnZXRzIDo9IG9sZGNvbmZpZyBhbGxu
b2NvbmZpZyBhbGx5ZXNjb25maWcgYWxsbW9kY29uZmlnIFwKKwlhbGxkZWZjb25maWcgcmFuZGNv
bmZpZyBsaXN0bmV3Y29uZmlnIG9sZGRlZmNvbmZpZyBzeW5jY29uZmlnCitQSE9OWSArPSAkKHNp
bXBsZS10YXJnZXRzKQorCiskKHNpbXBsZS10YXJnZXRzKTogJChvYmopL2NvbmYKKwkkPCAkKHNp
bGVudCkgLS0kQCAkKEtjb25maWcpCisKK1BIT05ZICs9IHNhdmVkZWZjb25maWcgZGVmY29uZmln
CisKK3NhdmVkZWZjb25maWc6ICQob2JqKS9jb25mCisJJDwgJChzaWxlbnQpIC0tJEA9ZGVmY29u
ZmlnICQoS2NvbmZpZykKKworZGVmY29uZmlnOiAkKG9iaikvY29uZgoraWZlcSAoJChLQlVJTERf
REVGQ09ORklHKSwpCisJJDwgJChzaWxlbnQpIC0tZGVmY29uZmlnICQoS2NvbmZpZykKK2Vsc2Ug
aWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kKEtC
VUlMRF9ERUZDT05GSUcpKSwpCisJQCQoa2VjaG8pICIqKiogRGVmYXVsdCBjb25maWd1cmF0aW9u
IGlzIGJhc2VkIG9uICckKEtCVUlMRF9ERUZDT05GSUcpJyIKKwkkKFEpJDwgJChzaWxlbnQpIC0t
ZGVmY29uZmlnPWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChL
Y29uZmlnKQorZWxzZQorCUAkKGtlY2hvKSAiKioqIERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBi
YXNlZCBvbiB0YXJnZXQgJyQoS0JVSUxEX0RFRkNPTkZJRyknIgorCSQoUSkkKE1BS0UpIC1mICQo
c3JjdHJlZSkvTWFrZWZpbGUgJChLQlVJTERfREVGQ09ORklHKQorZW5kaWYKKworJV9kZWZjb25m
aWc6ICQob2JqKS9jb25mCisJJChRKSQ8ICQoc2lsZW50KSAtLWRlZmNvbmZpZz1hcmNoLyQoU1JD
QVJDSCkvY29uZmlncy8kQCAkKEtjb25maWcpCisKK2NvbmZpZ2ZpbGVzPSQod2lsZGNhcmQgJChz
cmN0cmVlKS9rZXJuZWwvY29uZmlncy8kQCAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9jb25m
aWdzLyRAKQorCislLmNvbmZpZzogJChvYmopL2NvbmYKKwkkKGlmICQoY2FsbCBjb25maWdmaWxl
cyksLCAkKGVycm9yIE5vIGNvbmZpZ3VyYXRpb24gZXhpc3RzIGZvciB0aGlzIHRhcmdldCBvbiB0
aGlzIGFyY2hpdGVjdHVyZSkpCisJJChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3Njcmlw
dHMva2NvbmZpZy9tZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZyAkKGNvbmZpZ2ZpbGVzKQorCSsk
KFEpeWVzICIiIHwgJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2VmaWxlIG9sZGNvbmZpZworCitQ
SE9OWSArPSBrdm1jb25maWcKK2t2bWNvbmZpZzoga3ZtX2d1ZXN0LmNvbmZpZworCUA6CisKK1BI
T05ZICs9IHhlbmNvbmZpZworeGVuY29uZmlnOiB4ZW4uY29uZmlnCisJQDoKKworUEhPTlkgKz0g
dGlueWNvbmZpZwordGlueWNvbmZpZzoKKwkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2Vm
aWxlIGFsbG5vY29uZmlnIHRpbnkuY29uZmlnCisKKyMgQ0hFQ0s6IC1vIGNhY2hlX2Rpcj08cGF0
aD4gd29ya2luZz8KK1BIT05ZICs9IHRlc3Rjb25maWcKK3Rlc3Rjb25maWc6ICQob2JqKS9jb25m
CisJJChQWVRIT04zKSAtQiAtbSBweXRlc3QgJChzcmN0cmVlKS8kKHNyYykvdGVzdHMgXAorCS1v
IGNhY2hlX2Rpcj0kKGFic3BhdGggJChvYmopL3Rlc3RzLy5jYWNoZSkgXAorCSQoaWYgJChmaW5k
c3RyaW5nIDEsJChLQlVJTERfVkVSQk9TRSkpLC0tY2FwdHVyZT1ubykKK2NsZWFuLWRpcnMgKz0g
dGVzdHMvLmNhY2hlCisKKyMgSGVscCB0ZXh0IHVzZWQgYnkgbWFrZSBoZWxwCitoZWxwOgorCUBl
Y2hvICAnICBjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBsaW5l
LW9yaWVudGVkIHByb2dyYW0nCisJQGVjaG8gICcgIG5jb25maWcgICAgICAgICAtIFVwZGF0ZSBj
dXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBuY3Vyc2VzIG1lbnUgYmFzZWQgcHJvZ3JhbScKKwlA
ZWNobyAgJyAgbWVudWNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBh
IG1lbnUgYmFzZWQgcHJvZ3JhbScKKwlAZWNobyAgJyAgeGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJl
bnQgY29uZmlnIHV0aWxpc2luZyBhIFF0IGJhc2VkIGZyb250LWVuZCcKKwlAZWNobyAgJyAgZ2Nv
bmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIEdUSysgYmFzZWQgZnJv
bnQtZW5kJworCUBlY2hvICAnICBvbGRjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1
dGlsaXNpbmcgYSBwcm92aWRlZCAuY29uZmlnIGFzIGJhc2UnCisJQGVjaG8gICcgIGxvY2FsbW9k
Y29uZmlnICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyBkaXNhYmxpbmcgbW9kdWxlcyBub3QgbG9h
ZGVkJworCUBlY2hvICAnICBsb2NhbHllc2NvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcg
Y29udmVydGluZyBsb2NhbCBtb2RzIHRvIGNvcmUnCisJQGVjaG8gICcgIGRlZmNvbmZpZwkgIC0g
TmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZnJvbSBBUkNIIHN1cHBsaWVkIGRlZmNvbmZpZycKKwlA
ZWNobyAgJyAgc2F2ZWRlZmNvbmZpZyAgIC0gU2F2ZSBjdXJyZW50IGNvbmZpZyBhcyAuL2RlZmNv
bmZpZyAobWluaW1hbCBjb25maWcpJworCUBlY2hvICAnICBhbGxub2NvbmZpZwkgIC0gTmV3IGNv
bmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCBubycKKwlAZWNobyAgJyAg
YWxseWVzY29uZmlnCSAgLSBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhY2NlcHRl
ZCB3aXRoIHllcycKKwlAZWNobyAgJyAgYWxsbW9kY29uZmlnCSAgLSBOZXcgY29uZmlnIHNlbGVj
dGluZyBtb2R1bGVzIHdoZW4gcG9zc2libGUnCisJQGVjaG8gICcgIGFsbGRlZmNvbmZpZyAgICAt
IE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdCcKKwlAZWNobyAgJyAg
cmFuZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIgdG8gYWxsIG9wdGlv
bnMnCisJQGVjaG8gICcgIGxpc3RuZXdjb25maWcgICAtIExpc3QgbmV3IG9wdGlvbnMnCisJQGVj
aG8gICcgIG9sZGRlZmNvbmZpZwkgIC0gU2FtZSBhcyBvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5
bWJvbHMgdG8gdGhlaXInCisJQGVjaG8gICcgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFs
dWUgd2l0aG91dCBwcm9tcHRpbmcnCisJQGVjaG8gICcgIGt2bWNvbmZpZwkgIC0gRW5hYmxlIGFk
ZGl0aW9uYWwgb3B0aW9ucyBmb3Iga3ZtIGd1ZXN0IGtlcm5lbCBzdXBwb3J0JworCUBlY2hvICAn
ICB4ZW5jb25maWcgICAgICAgLSBFbmFibGUgYWRkaXRpb25hbCBvcHRpb25zIGZvciB4ZW4gZG9t
MCBhbmQgZ3Vlc3Qga2VybmVsIHN1cHBvcnQnCisJQGVjaG8gICcgIHRpbnljb25maWcJICAtIENv
bmZpZ3VyZSB0aGUgdGluaWVzdCBwb3NzaWJsZSBrZXJuZWwnCisJQGVjaG8gICcgIHRlc3Rjb25m
aWcJICAtIFJ1biBLY29uZmlnIHVuaXQgdGVzdHMgKHJlcXVpcmVzIHB5dGhvbjMgYW5kIHB5dGVz
dCknCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIG9iamVjdCBmaWxlcyB1c2VkIGJ5IGFsbCBr
Y29uZmlnIGZsYXZvdXJzCitjb21tb24tb2Jqcwk6PSBjb25mZGF0YS5vIGV4cHIubyBsZXhlci5s
ZXgubyBwYXJzZXIudGFiLm8gcHJlcHJvY2Vzcy5vIFwKKwkJICAgc3ltYm9sLm8KKworJChvYmop
L2xleGVyLmxleC5vOiAkKG9iaikvcGFyc2VyLnRhYi5oCitIT1NUQ0ZMQUdTX2xleGVyLmxleC5v
CTo9IC1JICQoc3JjdHJlZSkvJChzcmMpCitIT1NUQ0ZMQUdTX3BhcnNlci50YWIubwk6PSAtSSAk
KHNyY3RyZWUpLyQoc3JjKQorCisjIGNvbmY6IFVzZWQgZm9yIGRlZmNvbmZpZywgb2xkY29uZmln
IGFuZCByZWxhdGVkIHRhcmdldHMKK2hvc3Rwcm9ncy15CSs9IGNvbmYKK2NvbmYtb2Jqcwk6PSBj
b25mLm8gJChjb21tb24tb2JqcykKKworIyBuY29uZjogVXNlZCBmb3IgdGhlIG5jb25maWcgdGFy
Z2V0IGJhc2VkIG9uIG5jdXJzZXMKK2hvc3Rwcm9ncy15CSs9IG5jb25mCituY29uZi1vYmpzCTo9
IG5jb25mLm8gbmNvbmYuZ3VpLm8gJChjb21tb24tb2JqcykKKworSE9TVExETElCU19uY29uZgk9
ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2ZnICYmIGVjaG8gJCRsaWJzKQorSE9TVENGTEFHU19u
Y29uZi5vCT0gJChzaGVsbCAuICQob2JqKS9uY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykKK0hP
U1RDRkxBR1NfbmNvbmYuZ3VpLm8JPSAkKHNoZWxsIC4gJChvYmopL25jb25mLWNmZyAmJiBlY2hv
ICQkY2ZsYWdzKQorCiskKG9iaikvbmNvbmYubyAkKG9iaikvbmNvbmYuZ3VpLm86ICQob2JqKS9u
Y29uZi1jZmcKKworIyBtY29uZjogVXNlZCBmb3IgdGhlIG1lbnVjb25maWcgdGFyZ2V0IGJhc2Vk
IG9uIGx4ZGlhbG9nCitob3N0cHJvZ3MteQkrPSBtY29uZgorbHhkaWFsb2cJOj0gY2hlY2tsaXN0
Lm8gaW5wdXRib3gubyBtZW51Ym94Lm8gdGV4dGJveC5vIHV0aWwubyB5ZXNuby5vCittY29uZi1v
YmpzCTo9IG1jb25mLm8gJChhZGRwcmVmaXggbHhkaWFsb2cvLCAkKGx4ZGlhbG9nKSkgJChjb21t
b24tb2JqcykKKworSE9TVExETElCU19tY29uZiA9ICQoc2hlbGwgLiAkKG9iaikvbWNvbmYtY2Zn
ICYmIGVjaG8gJCRsaWJzKQorJChmb3JlYWNoIGYsIG1jb25mLm8gJChseGRpYWxvZyksIFwKKyAg
JChldmFsIEhPU1RDRkxBR1NfJGYgPSAkJChzaGVsbCAuICQob2JqKS9tY29uZi1jZmcgJiYgZWNo
byAkJCQkY2ZsYWdzKSkpCisKKyQob2JqKS9tY29uZi5vOiAkKG9iaikvbWNvbmYtY2ZnCiskKGFk
ZHByZWZpeCAkKG9iaikvbHhkaWFsb2cvLCAkKGx4ZGlhbG9nKSk6ICQob2JqKS9tY29uZi1jZmcK
KworIyBxY29uZjogVXNlZCBmb3IgdGhlIHhjb25maWcgdGFyZ2V0IGJhc2VkIG9uIFF0Citob3N0
cHJvZ3MteQkrPSBxY29uZgorcWNvbmYtY3h4b2Jqcwk6PSBxY29uZi5vCitxY29uZi1vYmpzCTo9
IGltYWdlcy5vICQoY29tbW9uLW9ianMpCisKK0hPU1RMRExJQlNfcWNvbmYJPSAkKHNoZWxsIC4g
JChvYmopL3Fjb25mLWNmZyAmJiBlY2hvICQkbGlicykKK0hPU1RDWFhGTEFHU19xY29uZi5vCT0g
JChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykKKworJChvYmopL3Fj
b25mLm86ICQob2JqKS9xY29uZi1jZmcgJChvYmopL3Fjb25mLm1vYworCitxdWlldF9jbWRfbW9j
ID0gTU9DICAgICAkQAorICAgICAgY21kX21vYyA9ICQoc2hlbGwgLiAkKG9iaikvcWNvbmYtY2Zn
ICYmIGVjaG8gJCRtb2MpIC1pICQ8IC1vICRACisKKyQob2JqKS8lLm1vYzogJChzcmMpLyUuaCAk
KG9iaikvcWNvbmYtY2ZnCisJJChjYWxsIGNtZCxtb2MpCisKKyMgZ2NvbmY6IFVzZWQgZm9yIHRo
ZSBnY29uZmlnIHRhcmdldCBiYXNlZCBvbiBHVEsrCitob3N0cHJvZ3MteQkrPSBnY29uZgorZ2Nv
bmYtb2Jqcwk6PSBnY29uZi5vIGltYWdlcy5vICQoY29tbW9uLW9ianMpCisKK0hPU1RMRExJQlNf
Z2NvbmYgICAgPSAkKHNoZWxsIC4gJChvYmopL2djb25mLWNmZyAmJiBlY2hvICQkbGlicykKK0hP
U1RDRkxBR1NfZ2NvbmYubyAgPSAkKHNoZWxsIC4gJChvYmopL2djb25mLWNmZyAmJiBlY2hvICQk
Y2ZsYWdzKQorCiskKG9iaikvZ2NvbmYubzogJChvYmopL2djb25mLWNmZworCisjIGNoZWNrIGlm
IG5lY2Vzc2FyeSBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlLCBhbmQgY29uZmlndXJlIGJ1aWxkIGZs
YWdzCitmaWxlY2hrX2NvbmZfY2ZnID0gJChDT05GSUdfU0hFTEwpICQ8CisKKyQob2JqKS8lY29u
Zi1jZmc6ICQoc3JjKS8lY29uZi1jZmcuc2ggRk9SQ0UKKwkkKGNhbGwgZmlsZWNoayxjb25mX2Nm
ZykKKworY2xlYW4tZmlsZXMgKz0gKmNvbmYtY2ZnCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L2NvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvY29uZi5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzY3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L2NvbmYuYwpAQCAtMCwwICsxLDcwMiBAQAorLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVs
IDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5j
bHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRl
IDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKwor
c3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjaGVja19j
b25mKHN0cnVjdCBtZW51ICptZW51KTsKKworZW51bSBpbnB1dF9tb2RlIHsKKwlvbGRhc2tjb25m
aWcsCisJc3luY2NvbmZpZywKKwlvbGRjb25maWcsCisJYWxsbm9jb25maWcsCisJYWxseWVzY29u
ZmlnLAorCWFsbG1vZGNvbmZpZywKKwlhbGxkZWZjb25maWcsCisJcmFuZGNvbmZpZywKKwlkZWZj
b25maWcsCisJc2F2ZWRlZmNvbmZpZywKKwlsaXN0bmV3Y29uZmlnLAorCW9sZGRlZmNvbmZpZywK
K307CitzdGF0aWMgZW51bSBpbnB1dF9tb2RlIGlucHV0X21vZGUgPSBvbGRhc2tjb25maWc7CisK
K3N0YXRpYyBpbnQgaW5kZW50ID0gMTsKK3N0YXRpYyBpbnQgdHR5X3N0ZGlvOworc3RhdGljIGlu
dCBzeW5jX2tjb25maWc7CitzdGF0aWMgaW50IGNvbmZfY250Oworc3RhdGljIGNoYXIgbGluZVtQ
QVRIX01BWF07CitzdGF0aWMgc3RydWN0IG1lbnUgKnJvb3RFbnRyeTsKKworc3RhdGljIHZvaWQg
cHJpbnRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3Ry
X25ldygpOworCisJbWVudV9nZXRfZXh0X2hlbHAobWVudSwgJmhlbHApOworCisJcHJpbnRmKCJc
biVzXG4iLCBzdHJfZ2V0KCZoZWxwKSk7CisJc3RyX2ZyZWUoJmhlbHApOworfQorCitzdGF0aWMg
dm9pZCBzdHJpcChjaGFyICpzdHIpCit7CisJY2hhciAqcCA9IHN0cjsKKwlpbnQgbDsKKworCXdo
aWxlICgoaXNzcGFjZSgqcCkpKQorCQlwKys7CisJbCA9IHN0cmxlbihwKTsKKwlpZiAocCAhPSBz
dHIpCisJCW1lbW1vdmUoc3RyLCBwLCBsICsgMSk7CisJaWYgKCFsKQorCQlyZXR1cm47CisJcCA9
IHN0ciArIGwgLSAxOworCXdoaWxlICgoaXNzcGFjZSgqcCkpKQorCQkqcC0tID0gMDsKK30KKwor
LyogSGVscGVyIGZ1bmN0aW9uIHRvIGZhY2lsaXRhdGUgZmdldHMoKSBieSBKZWFuIFNhY3Jlbi4g
Ki8KK3N0YXRpYyB2b2lkIHhmZ2V0cyhjaGFyICpzdHIsIGludCBzaXplLCBGSUxFICppbikKK3sK
KwlpZiAoIWZnZXRzKHN0ciwgc2l6ZSwgaW4pKQorCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3Ig
aW4gcmVhZGluZyBvciBlbmQgb2YgZmlsZS5cbiIpOworCisJaWYgKCF0dHlfc3RkaW8pCisJCXBy
aW50ZigiJXMiLCBzdHIpOworfQorCitzdGF0aWMgaW50IGNvbmZfYXNrdmFsdWUoc3RydWN0IHN5
bWJvbCAqc3ltLCBjb25zdCBjaGFyICpkZWYpCit7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0g
c3ltX2dldF90eXBlKHN5bSk7CisKKwlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkKKwkJcHJpbnRm
KCIoTkVXKSAiKTsKKworCWxpbmVbMF0gPSAnXG4nOworCWxpbmVbMV0gPSAwOworCisJaWYgKCFz
eW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJbGluZVsw
XSA9ICdcbic7CisJCWxpbmVbMV0gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGlu
cHV0X21vZGUpIHsKKwljYXNlIG9sZGNvbmZpZzoKKwljYXNlIHN5bmNjb25maWc6CisJCWlmIChz
eW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJCXByaW50ZigiJXNcbiIsIGRlZik7CisJCQlyZXR1cm4g
MDsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIG9sZGFza2NvbmZpZzoKKwkJZmZs
dXNoKHN0ZG91dCk7CisJCXhmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKTsKKwkJcmV0
dXJuIDE7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2Fz
ZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6CisJCXByaW50ZigiJXNcbiIs
IGRlZik7CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcHJpbnRmKCIlcyIsIGxp
bmUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51
ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwljb25zdCBjaGFy
ICpkZWY7CisKKwl3aGlsZSAoMSkgeworCQlwcmludGYoIiUqcyVzICIsIGluZGVudCAtIDEsICIi
LCBtZW51LT5wcm9tcHQtPnRleHQpOworCQlwcmludGYoIiglcykgIiwgc3ltLT5uYW1lKTsKKwkJ
ZGVmID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKHN5bSkpCisJCQlwcmludGYoIlslc10gIiwgZGVmKTsKKwkJaWYgKCFjb25mX2Fza3ZhbHVl
KHN5bSwgZGVmKSkKKwkJCXJldHVybiAwOworCQlzd2l0Y2ggKGxpbmVbMF0pIHsKKwkJY2FzZSAn
XG4nOgorCQkJYnJlYWs7CisJCWNhc2UgJz8nOgorCQkJLyogcHJpbnQgaGVscCAqLworCQkJaWYg
KGxpbmVbMV0gPT0gJ1xuJykgeworCQkJCXByaW50X2hlbHAobWVudSk7CisJCQkJZGVmID0gTlVM
TDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0Ogor
CQkJbGluZVtzdHJsZW4obGluZSktMV0gPSAwOworCQkJZGVmID0gbGluZTsKKwkJfQorCQlpZiAo
ZGVmICYmIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN5bSwgZGVmKSkKKwkJCXJldHVybiAwOworCX0K
K30KKworc3RhdGljIGludCBjb25mX3N5bShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qg
c3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7CisKKwl3
aGlsZSAoMSkgeworCQlwcmludGYoIiUqcyVzICIsIGluZGVudCAtIDEsICIiLCBtZW51LT5wcm9t
cHQtPnRleHQpOworCQlpZiAoc3ltLT5uYW1lKQorCQkJcHJpbnRmKCIoJXMpICIsIHN5bS0+bmFt
ZSk7CisJCXB1dGNoYXIoJ1snKTsKKwkJb2xkdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShz
eW0pOworCQlzd2l0Y2ggKG9sZHZhbCkgeworCQljYXNlIG5vOgorCQkJcHV0Y2hhcignTicpOwor
CQkJYnJlYWs7CisJCWNhc2UgbW9kOgorCQkJcHV0Y2hhcignTScpOworCQkJYnJlYWs7CisJCWNh
c2UgeWVzOgorCQkJcHV0Y2hhcignWScpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9sZHZhbCAh
PSBubyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbm8pKQorCQkJcHJpbnRmKCIv
biIpOworCQlpZiAob2xkdmFsICE9IG1vZCAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5
bSwgbW9kKSkKKwkJCXByaW50ZigiL20iKTsKKwkJaWYgKG9sZHZhbCAhPSB5ZXMgJiYgc3ltX3Ry
aXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHllcykpCisJCQlwcmludGYoIi95Iik7CisJCXByaW50
ZigiLz9dICIpOworCQlpZiAoIWNvbmZfYXNrdmFsdWUoc3ltLCBzeW1fZ2V0X3N0cmluZ192YWx1
ZShzeW0pKSkKKwkJCXJldHVybiAwOworCQlzdHJpcChsaW5lKTsKKworCQlzd2l0Y2ggKGxpbmVb
MF0pIHsKKwkJY2FzZSAnbic6CisJCWNhc2UgJ04nOgorCQkJbmV3dmFsID0gbm87CisJCQlpZiAo
IWxpbmVbMV0gfHwgIXN0cmNtcCgmbGluZVsxXSwgIm8iKSkKKwkJCQlicmVhazsKKwkJCWNvbnRp
bnVlOworCQljYXNlICdtJzoKKwkJY2FzZSAnTSc6CisJCQluZXd2YWwgPSBtb2Q7CisJCQlpZiAo
IWxpbmVbMV0pCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJY2FzZSAneSc6CisJCWNhc2Ug
J1knOgorCQkJbmV3dmFsID0geWVzOworCQkJaWYgKCFsaW5lWzFdIHx8ICFzdHJjbXAoJmxpbmVb
MV0sICJlcyIpKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCWNhc2UgMDoKKwkJCW5ld3Zh
bCA9IG9sZHZhbDsKKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWdvdG8gaGVscDsKKwkJZGVm
YXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSwgbmV3dmFsKSkKKwkJCXJldHVybiAwOworaGVscDoKKwkJcHJpbnRfaGVscChtZW51KTsKKwl9
Cit9CisKK3N0YXRpYyBpbnQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3Ry
dWN0IHN5bWJvbCAqc3ltLCAqZGVmX3N5bTsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJYm9vbCBp
c19uZXc7CisKKwlzeW0gPSBtZW51LT5zeW07CisJaXNfbmV3ID0gIXN5bV9oYXNfdmFsdWUoc3lt
KTsKKwlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCWNvbmZfc3ltKG1lbnUpOworCQlz
eW1fY2FsY192YWx1ZShzeW0pOworCQlzd2l0Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3lt
KSkgeworCQljYXNlIG5vOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgbW9kOgorCQkJcmV0dXJuIDA7
CisJCWNhc2UgeWVzOgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHN5bV9n
ZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgeworCQljYXNlIG5vOgorCQkJcmV0dXJuIDE7CisJCWNh
c2UgbW9kOgorCQkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0gMSwgIiIsIG1lbnVfZ2V0X3By
b21wdChtZW51KSk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSB5ZXM6CisJCQlicmVhazsKKwkJfQor
CX0KKworCXdoaWxlICgxKSB7CisJCWludCBjbnQsIGRlZjsKKworCQlwcmludGYoIiUqcyVzXG4i
LCBpbmRlbnQgLSAxLCAiIiwgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsKKwkJZGVmX3N5bSA9IHN5
bV9nZXRfY2hvaWNlX3ZhbHVlKHN5bSk7CisJCWNudCA9IGRlZiA9IDA7CisJCWxpbmVbMF0gPSAw
OworCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQp
IHsKKwkJCWlmICghbWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwkJCQljb250aW51ZTsKKwkJCWlm
ICghY2hpbGQtPnN5bSkgeworCQkJCXByaW50ZigiJSpjICVzXG4iLCBpbmRlbnQsICcqJywgbWVu
dV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQljbnQrKzsKKwkJ
CWlmIChjaGlsZC0+c3ltID09IGRlZl9zeW0pIHsKKwkJCQlkZWYgPSBjbnQ7CisJCQkJcHJpbnRm
KCIlKmMiLCBpbmRlbnQsICc+Jyk7CisJCQl9IGVsc2UKKwkJCQlwcmludGYoIiUqYyIsIGluZGVu
dCwgJyAnKTsKKwkJCXByaW50ZigiICVkLiAlcyIsIGNudCwgbWVudV9nZXRfcHJvbXB0KGNoaWxk
KSk7CisJCQlpZiAoY2hpbGQtPnN5bS0+bmFtZSkKKwkJCQlwcmludGYoIiAoJXMpIiwgY2hpbGQt
PnN5bS0+bmFtZSk7CisJCQlpZiAoIXN5bV9oYXNfdmFsdWUoY2hpbGQtPnN5bSkpCisJCQkJcHJp
bnRmKCIgKE5FVykiKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJfQorCQlwcmludGYoIiUqc2Nob2lj
ZSIsIGluZGVudCAtIDEsICIiKTsKKwkJaWYgKGNudCA9PSAxKSB7CisJCQlwcmludGYoIlsxXTog
MVxuIik7CisJCQlnb3RvIGNvbmZfY2hpbGRzOworCQl9CisJCXByaW50ZigiWzEtJWQ/XTogIiwg
Y250KTsKKwkJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJCWNhc2Ugb2xkY29uZmlnOgorCQljYXNl
IHN5bmNjb25maWc6CisJCQlpZiAoIWlzX25ldykgeworCQkJCWNudCA9IGRlZjsKKwkJCQlwcmlu
dGYoIiVkXG4iLCBjbnQpOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICov
CisJCWNhc2Ugb2xkYXNrY29uZmlnOgorCQkJZmZsdXNoKHN0ZG91dCk7CisJCQl4ZmdldHMobGlu
ZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbik7CisJCQlzdHJpcChsaW5lKTsKKwkJCWlmIChsaW5lWzBd
ID09ICc/JykgeworCQkJCXByaW50X2hlbHAobWVudSk7CisJCQkJY29udGludWU7CisJCQl9CisJ
CQlpZiAoIWxpbmVbMF0pCisJCQkJY250ID0gZGVmOworCQkJZWxzZSBpZiAoaXNkaWdpdChsaW5l
WzBdKSkKKwkJCQljbnQgPSBhdG9pKGxpbmUpOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQkJ
YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJY29uZl9jaGlsZHM6CisJCWZv
ciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJ
aWYgKCFjaGlsZC0+c3ltIHx8ICFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQorCQkJCWNvbnRpbnVl
OworCQkJaWYgKCEtLWNudCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIWNoaWxkKQorCQkJY29u
dGludWU7CisJCWlmIChsaW5lWzBdICYmIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJz8nKSB7
CisJCQlwcmludF9oZWxwKGNoaWxkKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN5bV9zZXRfY2hv
aWNlX3ZhbHVlKHN5bSwgY2hpbGQtPnN5bSk7CisJCWZvciAoY2hpbGQgPSBjaGlsZC0+bGlzdDsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWluZGVudCArPSAyOworCQkJY29uZihj
aGlsZCk7CisJCQlpbmRlbnQgLT0gMjsKKwkJfQorCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRp
YyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOwor
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisKKwlpZiAoIW1l
bnVfaXNfdmlzaWJsZShtZW51KSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCXBy
b3AgPSBtZW51LT5wcm9tcHQ7CisJaWYgKHByb3ApIHsKKwkJY29uc3QgY2hhciAqcHJvbXB0Owor
CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfTUVOVToKKwkJCS8qCisJCQkgKiBF
eGNlcHQgaW4gb2xkYXNrY29uZmlnIG1vZGUsIHdlIHNob3cgb25seSBtZW51cyB0aGF0CisJCQkg
KiBjb250YWluIG5ldyBzeW1ib2xzLgorCQkJICovCisJCQlpZiAoaW5wdXRfbW9kZSAhPSBvbGRh
c2tjb25maWcgJiYgcm9vdEVudHJ5ICE9IG1lbnUpIHsKKwkJCQljaGVja19jb25mKG1lbnUpOwor
CQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFBfQ09NTUVO
VDoKKwkJCXByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCWlmIChwcm9tcHQpCisJ
CQkJcHJpbnRmKCIlKmNcbiUqYyAlc1xuJSpjXG4iLAorCQkJCQlpbmRlbnQsICcqJywKKwkJCQkJ
aW5kZW50LCAnKicsIHByb21wdCwKKwkJCQkJaW5kZW50LCAnKicpOworCQlkZWZhdWx0OgorCQkJ
OworCQl9CisJfQorCisJaWYgKCFzeW0pCisJCWdvdG8gY29uZl9jaGlsZHM7CisKKwlpZiAoc3lt
X2lzX2Nob2ljZShzeW0pKSB7CisJCWNvbmZfY2hvaWNlKG1lbnUpOworCQlpZiAoc3ltLT5jdXJy
LnRyaSAhPSBtb2QpCisJCQlyZXR1cm47CisJCWdvdG8gY29uZl9jaGlsZHM7CisJfQorCisJc3dp
dGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NU
UklORzoKKwkJY29uZl9zdHJpbmcobWVudSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbmZf
c3ltKG1lbnUpOworCQlicmVhazsKKwl9CisKK2NvbmZfY2hpbGRzOgorCWlmIChzeW0pCisJCWlu
ZGVudCArPSAyOworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dCkKKwkJY29uZihjaGlsZCk7CisJaWYgKHN5bSkKKwkJaW5kZW50IC09IDI7Cit9CisK
K3N0YXRpYyB2b2lkIGNoZWNrX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5
bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKworCWlmICghbWVudV9pc192aXNpYmxl
KG1lbnUpKQorCQlyZXR1cm47CisKKwlzeW0gPSBtZW51LT5zeW07CisJaWYgKHN5bSAmJiAhc3lt
X2hhc192YWx1ZShzeW0pKSB7CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkgfHwKKwkJICAg
IChzeW1faXNfY2hvaWNlKHN5bSkgJiYgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHll
cykpIHsKKwkJCWlmIChpbnB1dF9tb2RlID09IGxpc3RuZXdjb25maWcpIHsKKwkJCQlpZiAoc3lt
LT5uYW1lKSB7CisJCQkJCWNvbnN0IGNoYXIgKnN0cjsKKworCQkJCQlpZiAoc3ltLT50eXBlID09
IFNfU1RSSU5HKSB7CisJCQkJCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQkJ
CQkJc3RyID0gc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoc3RyKTsKKwkJCQkJCXByaW50ZigiJXMl
cz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQkJCQkJZnJlZSgodm9pZCAqKXN0
cik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0p
OworCQkJCQkJcHJpbnRmKCIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIHN0cik7CisJ
CQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICghY29uZl9jbnQrKykKKwkJCQkJcHJp
bnRmKCIqXG4qIFJlc3RhcnQgY29uZmlnLi4uXG4qXG4iKTsKKwkJCQlyb290RW50cnkgPSBtZW51
X2dldF9wYXJlbnRfbWVudShtZW51KTsKKwkJCQljb25mKHJvb3RFbnRyeSk7CisJCQl9CisJCX0K
Kwl9CisKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHQpCisJCWNoZWNrX2NvbmYoY2hpbGQpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25n
X29wdHNbXSA9IHsKKwl7Im9sZGFza2NvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxM
LCBvbGRhc2tjb25maWd9LAorCXsib2xkY29uZmlnIiwgICAgICAgbm9fYXJndW1lbnQsICAgICAg
IE5VTEwsIG9sZGNvbmZpZ30sCisJeyJzeW5jY29uZmlnIiwgICAgICBub19hcmd1bWVudCwgICAg
ICAgTlVMTCwgc3luY2NvbmZpZ30sCisJeyJkZWZjb25maWciLCAgICAgICBvcHRpb25hbF9hcmd1
bWVudCwgTlVMTCwgZGVmY29uZmlnfSwKKwl7InNhdmVkZWZjb25maWciLCAgIHJlcXVpcmVkX2Fy
Z3VtZW50LCBOVUxMLCBzYXZlZGVmY29uZmlnfSwKKwl7ImFsbG5vY29uZmlnIiwgICAgIG5vX2Fy
Z3VtZW50LCAgICAgICBOVUxMLCBhbGxub2NvbmZpZ30sCisJeyJhbGx5ZXNjb25maWciLCAgICBu
b19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxseWVzY29uZmlnfSwKKwl7ImFsbG1vZGNvbmZpZyIs
ICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxtb2Rjb25maWd9LAorCXsiYWxsZGVmY29u
ZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbGRlZmNvbmZpZ30sCisJeyJyYW5k
Y29uZmlnIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgcmFuZGNvbmZpZ30sCisJeyJs
aXN0bmV3Y29uZmlnIiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgbGlzdG5ld2NvbmZpZ30s
CisJeyJvbGRkZWZjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkZGVmY29u
ZmlnfSwKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK3N0YXRpYyB2b2lkIGNvbmZfdXNhZ2Uo
Y29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisKKwlwcmludGYoIlVzYWdlOiAlcyBbLXNdIFtvcHRp
b25dIDxrY29uZmlnLWZpbGU+XG4iLCBwcm9nbmFtZSk7CisJcHJpbnRmKCJbb3B0aW9uXSBpcyBf
b25lXyBvZiB0aGUgZm9sbG93aW5nOlxuIik7CisJcHJpbnRmKCIgIC0tbGlzdG5ld2NvbmZpZyAg
ICAgICAgIExpc3QgbmV3IG9wdGlvbnNcbiIpOworCXByaW50ZigiICAtLW9sZGFza2NvbmZpZyAg
ICAgICAgICBTdGFydCBhIG5ldyBjb25maWd1cmF0aW9uIHVzaW5nIGEgbGluZS1vcmllbnRlZCBw
cm9ncmFtXG4iKTsKKwlwcmludGYoIiAgLS1vbGRjb25maWcgICAgICAgICAgICAgVXBkYXRlIGEg
Y29uZmlndXJhdGlvbiB1c2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMgYmFzZVxuIik7CisJcHJp
bnRmKCIgIC0tc3luY2NvbmZpZyAgICAgICAgICAgIFNpbWlsYXIgdG8gb2xkY29uZmlnIGJ1dCBn
ZW5lcmF0ZXMgY29uZmlndXJhdGlvbiBpblxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlL3tnZW5lcmF0ZWQvLGNvbmZpZy99XG4iKTsKKwlwcmludGYoIiAgLS1v
bGRkZWZjb25maWcgICAgICAgICAgU2FtZSBhcyBvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJv
bHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZVxuIik7CisJcHJpbnRmKCIgIC0tZGVmY29uZmlnIDxm
aWxlPiAgICAgIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGRlZmluZWQgaW4gPGZpbGU+XG4iKTsK
KwlwcmludGYoIiAgLS1zYXZlZGVmY29uZmlnIDxmaWxlPiAgU2F2ZSB0aGUgbWluaW1hbCBjdXJy
ZW50IGNvbmZpZ3VyYXRpb24gdG8gPGZpbGU+XG4iKTsKKwlwcmludGYoIiAgLS1hbGxub2NvbmZp
ZyAgICAgICAgICAgTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0
aCBub1xuIik7CisJcHJpbnRmKCIgIC0tYWxseWVzY29uZmlnICAgICAgICAgIE5ldyBjb25maWcg
d2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggeWVzXG4iKTsKKwlwcmludGYoIiAg
LS1hbGxtb2Rjb25maWcgICAgICAgICAgTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUg
YW5zd2VyZWQgd2l0aCBtb2RcbiIpOworCXByaW50ZigiICAtLWFsbGRlZmNvbmZpZyAgICAgICAg
ICBOZXcgY29uZmlnIHdpdGggYWxsIHN5bWJvbHMgc2V0IHRvIGRlZmF1bHRcbiIpOworCXByaW50
ZigiICAtLXJhbmRjb25maWcgICAgICAgICAgICBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dl
ciB0byBhbGwgb3B0aW9uc1xuIik7Cit9CisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQor
eworCWNvbnN0IGNoYXIgKnByb2duYW1lID0gYXZbMF07CisJaW50IG9wdDsKKwljb25zdCBjaGFy
ICpuYW1lLCAqZGVmY29uZmlnX2ZpbGUgPSBOVUxMIC8qIGdjYyB1bmluaXQgKi87CisJaW50IG5v
X2NvbmZfd3JpdGUgPSAwOworCisJdHR5X3N0ZGlvID0gaXNhdHR5KDApICYmIGlzYXR0eSgxKTsK
KworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYWMsIGF2LCAicyIsIGxvbmdfb3B0cywgTlVM
TCkpICE9IC0xKSB7CisJCWlmIChvcHQgPT0gJ3MnKSB7CisJCQljb25mX3NldF9tZXNzYWdlX2Nh
bGxiYWNrKE5VTEwpOworCQkJY29udGludWU7CisJCX0KKwkJaW5wdXRfbW9kZSA9IChlbnVtIGlu
cHV0X21vZGUpb3B0OworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlIHN5bmNjb25maWc6CisJCQkv
KgorCQkJICogc3luY2NvbmZpZyBpcyBpbnZva2VkIGR1cmluZyB0aGUgYnVpbGQgc3RhZ2UuCisJ
CQkgKiBTdXBwcmVzcyBkaXN0cmFjdGluZyAiY29uZmlndXJhdGlvbiB3cml0dGVuIHRvIC4uLiIK
KwkJCSAqLworCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsKKwkJCXN5bmNfa2Nv
bmZpZyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBkZWZjb25maWc6CisJCWNhc2Ugc2F2ZWRlZmNv
bmZpZzoKKwkJCWRlZmNvbmZpZ19maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgcmFu
ZGNvbmZpZzoKKwkJeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCQkJdW5zaWduZWQgaW50IHNl
ZWQ7CisJCQljaGFyICpzZWVkX2VudjsKKworCQkJLyoKKwkJCSAqIFVzZSBtaWNyb3NlY29uZHMg
ZGVyaXZlZCBzZWVkLAorCQkJICogY29tcGVuc2F0ZSBmb3Igc3lzdGVtcyB3aGVyZSBpdCBtYXkg
YmUgemVybworCQkJICovCisJCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJCQlzZWVkID0g
KHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChub3cudHZfdXNlYyArIDEpKTsKKwor
CQkJc2VlZF9lbnYgPSBnZXRlbnYoIktDT05GSUdfU0VFRCIpOworCQkJaWYoIHNlZWRfZW52ICYm
ICpzZWVkX2VudiApIHsKKwkJCQljaGFyICplbmRwOworCQkJCWludCB0bXAgPSAoaW50KXN0cnRv
bChzZWVkX2VudiwgJmVuZHAsIDApOworCQkJCWlmICgqZW5kcCA9PSAnXDAnKSB7CisJCQkJCXNl
ZWQgPSB0bXA7CisJCQkJfQorCQkJfQorCQkJZnByaW50Ziggc3RkZXJyLCAiS0NPTkZJR19TRUVE
PTB4JVhcbiIsIHNlZWQgKTsKKwkJCXNyYW5kKHNlZWQpOworCQkJYnJlYWs7CisJCX0KKwkJY2Fz
ZSBvbGRhc2tjb25maWc6CisJCWNhc2Ugb2xkY29uZmlnOgorCQljYXNlIGFsbG5vY29uZmlnOgor
CQljYXNlIGFsbHllc2NvbmZpZzoKKwkJY2FzZSBhbGxtb2Rjb25maWc6CisJCWNhc2UgYWxsZGVm
Y29uZmlnOgorCQljYXNlIGxpc3RuZXdjb25maWc6CisJCWNhc2Ugb2xkZGVmY29uZmlnOgorCQkJ
YnJlYWs7CisJCWNhc2UgJz8nOgorCQkJY29uZl91c2FnZShwcm9nbmFtZSk7CisJCQlleGl0KDEp
OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGFjID09IG9wdGluZCkgeworCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xuIiwgYXZbMF0pOworCQljb25mX3VzYWdl
KHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJbmFtZSA9IGF2W29wdGluZF07CisJY29uZl9w
YXJzZShuYW1lKTsKKwkvL3pjb25mZHVtcChzdGRvdXQpOworCisJc3dpdGNoIChpbnB1dF9tb2Rl
KSB7CisJY2FzZSBkZWZjb25maWc6CisJCWlmICghZGVmY29uZmlnX2ZpbGUpCisJCQlkZWZjb25m
aWdfZmlsZSA9IGNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUoKTsKKwkJaWYgKGNvbmZfcmVhZChk
ZWZjb25maWdfZmlsZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSIqKipcbiIKKwkJCQkg
ICIqKiogQ2FuJ3QgZmluZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gXCIlc1wiIVxuIgorCQkJCSAg
IioqKlxuIiwKKwkJCQlkZWZjb25maWdfZmlsZSk7CisJCQlleGl0KDEpOworCQl9CisJCWJyZWFr
OworCWNhc2Ugc2F2ZWRlZmNvbmZpZzoKKwljYXNlIHN5bmNjb25maWc6CisJY2FzZSBvbGRhc2tj
b25maWc6CisJY2FzZSBvbGRjb25maWc6CisJY2FzZSBsaXN0bmV3Y29uZmlnOgorCWNhc2Ugb2xk
ZGVmY29uZmlnOgorCQljb25mX3JlYWQoTlVMTCk7CisJCWJyZWFrOworCWNhc2UgYWxsbm9jb25m
aWc6CisJY2FzZSBhbGx5ZXNjb25maWc6CisJY2FzZSBhbGxtb2Rjb25maWc6CisJY2FzZSBhbGxk
ZWZjb25maWc6CisJY2FzZSByYW5kY29uZmlnOgorCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FM
TENPTkZJRyIpOworCQlpZiAoIW5hbWUpCisJCQlicmVhazsKKwkJaWYgKChzdHJjbXAobmFtZSwg
IiIpICE9IDApICYmIChzdHJjbXAobmFtZSwgIjEiKSAhPSAwKSkgeworCQkJaWYgKGNvbmZfcmVh
ZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJ
IioqKiBDYW4ndCByZWFkIHNlZWQgY29uZmlndXJhdGlvbiBcIiVzXCIhXG4iLAorCQkJCQluYW1l
KTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChpbnB1dF9t
b2RlKSB7CisJCWNhc2UgYWxsbm9jb25maWc6CW5hbWUgPSAiYWxsbm8uY29uZmlnIjsgYnJlYWs7
CisJCWNhc2UgYWxseWVzY29uZmlnOgluYW1lID0gImFsbHllcy5jb25maWciOyBicmVhazsKKwkJ
Y2FzZSBhbGxtb2Rjb25maWc6CW5hbWUgPSAiYWxsbW9kLmNvbmZpZyI7IGJyZWFrOworCQljYXNl
IGFsbGRlZmNvbmZpZzoJbmFtZSA9ICJhbGxkZWYuY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgcmFu
ZGNvbmZpZzoJbmFtZSA9ICJhbGxyYW5kb20uY29uZmlnIjsgYnJlYWs7CisJCWRlZmF1bHQ6IGJy
ZWFrOworCQl9CisJCWlmIChjb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpICYmCisJ
CSAgICBjb25mX3JlYWRfc2ltcGxlKCJhbGwuY29uZmlnIiwgU19ERUZfVVNFUikpIHsKKwkJCWZw
cmludGYoc3RkZXJyLAorCQkJCSIqKiogS0NPTkZJR19BTExDT05GSUcgc2V0LCBidXQgbm8gXCIl
c1wiIG9yIFwiYWxsLmNvbmZpZ1wiIGZpbGUgZm91bmRcbiIsCisJCQkJbmFtZSk7CisJCQlleGl0
KDEpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChzeW5j
X2tjb25maWcpIHsKKwkJbmFtZSA9IGdldGVudigiS0NPTkZJR19OT1NJTEVOVFVQREFURSIpOwor
CQlpZiAobmFtZSAmJiAqbmFtZSkgeworCQkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkgeworCQkJ
CWZwcmludGYoc3RkZXJyLAorCQkJCQkiXG4qKiogVGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMg
ZXhwbGljaXQgdXBkYXRlLlxuXG4iKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCW5vX2NvbmZf
d3JpdGUgPSAxOworCQl9CisJfQorCisJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJY2FzZSBhbGxu
b2NvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9ubyk7CisJCWJyZWFrOwor
CWNhc2UgYWxseWVzY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX3llcyk7
CisJCWJyZWFrOworCWNhc2UgYWxsbW9kY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJv
bHMoZGVmX21vZCk7CisJCWJyZWFrOworCWNhc2UgYWxsZGVmY29uZmlnOgorCQljb25mX3NldF9h
bGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOworCQlicmVhazsKKwljYXNlIHJhbmRjb25maWc6
CisJCS8qIFJlYWxseSBub3RoaW5nIHRvIGRvIGluIHRoaXMgbG9vcCAqLworCQl3aGlsZSAoY29u
Zl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9yYW5kb20pKSA7CisJCWJyZWFrOworCWNhc2UgZGVm
Y29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOworCQlicmVh
azsKKwljYXNlIHNhdmVkZWZjb25maWc6CisJCWJyZWFrOworCWNhc2Ugb2xkYXNrY29uZmlnOgor
CQlyb290RW50cnkgPSAmcm9vdG1lbnU7CisJCWNvbmYoJnJvb3RtZW51KTsKKwkJaW5wdXRfbW9k
ZSA9IG9sZGNvbmZpZzsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBvbGRjb25maWc6CisJ
Y2FzZSBsaXN0bmV3Y29uZmlnOgorCWNhc2Ugc3luY2NvbmZpZzoKKwkJLyogVXBkYXRlIHVudGls
IGEgbG9vcCBjYXVzZWQgbm8gbW9yZSBjaGFuZ2VzICovCisJCWRvIHsKKwkJCWNvbmZfY250ID0g
MDsKKwkJCWNoZWNrX2NvbmYoJnJvb3RtZW51KTsKKwkJfSB3aGlsZSAoY29uZl9jbnQpOworCQli
cmVhazsKKwljYXNlIG9sZGRlZmNvbmZpZzoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlp
ZiAoaW5wdXRfbW9kZSA9PSBzYXZlZGVmY29uZmlnKSB7CisJCWlmIChjb25mX3dyaXRlX2RlZmNv
bmZpZyhkZWZjb25maWdfZmlsZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAibioqKiBFcnJvciB3
aGlsZSBzYXZpbmcgZGVmY29uZmlnIHRvOiAlc1xuXG4iLAorCQkJCWRlZmNvbmZpZ19maWxlKTsK
KwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIGlmIChpbnB1dF9tb2RlICE9IGxpc3RuZXdjb25m
aWcpIHsKKwkJaWYgKCFub19jb25mX3dyaXRlICYmIGNvbmZfd3JpdGUoTlVMTCkpIHsKKwkJCWZw
cmludGYoc3RkZXJyLCAiXG4qKiogRXJyb3IgZHVyaW5nIHdyaXRpbmcgb2YgdGhlIGNvbmZpZ3Vy
YXRpb24uXG5cbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCS8qCisJCSAqIENyZWF0ZSBhdXRv
LmNvbmYgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisJCSAqIFRoaXMgcHJldmVudHMgR05VIE1ha2Ug
NC4xIG9yIG9sZGVyIGZyb20gZW1pdHRpbmcKKwkJICogImluY2x1ZGUvY29uZmlnL2F1dG8uY29u
ZjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKwkJICogaW4gdGhlIHRvcC1sZXZlbCBNYWtl
ZmlsZQorCQkgKgorCQkgKiBzeW5jY29uZmlnIGFsd2F5cyBjcmVhdGVzIG9yIHVwZGF0ZXMgYXV0
by5jb25mIGJlY2F1c2UgaXQgaXMKKwkJICogdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLgorCQkgKi8K
KwkJaWYgKGNvbmZfd3JpdGVfYXV0b2NvbmYoc3luY19rY29uZmlnKSAmJiBzeW5jX2tjb25maWcp
IHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJcbioqKiBFcnJvciBkdXJpbmcgc3luYyBvZiB0
aGUgY29uZmlndXJhdGlvbi5cblxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4g
MDsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42MDA2MTU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25m
ZGF0YS5jCkBAIC0wLDAgKzEsMTM4MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGlu
dXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxr
Yy5oIgorCisvKiByZXR1cm4gdHJ1ZSBpZiAncGF0aCcgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2Ug
Ki8KK3N0YXRpYyBib29sIGlzX3ByZXNlbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qg
c3RhdCBzdDsKKworCXJldHVybiAhc3RhdChwYXRoLCAmc3QpOworfQorCisvKiByZXR1cm4gdHJ1
ZSBpZiAncGF0aCcgZXhpc3RzIGFuZCBpdCBpcyBhIGRpcmVjdG9yeSwgZmFsc2Ugb3RoZXJ3aXNl
ICovCitzdGF0aWMgYm9vbCBpc19kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3Rh
dCBzdDsKKworCWlmIChzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIFNf
SVNESVIoc3Quc3RfbW9kZSk7Cit9CisKKy8qIHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB0d28g
ZmlsZXMgYXJlIHRoZSBzYW1lLCBmYWxzZSBvdGhlcndpc2UgKi8KK3N0YXRpYyBib29sIGlzX3Nh
bWUoY29uc3QgY2hhciAqZmlsZTEsIGNvbnN0IGNoYXIgKmZpbGUyKQoreworCWludCBmZDEsIGZk
MjsKKwlzdHJ1Y3Qgc3RhdCBzdDEsIHN0MjsKKwl2b2lkICptYXAxLCAqbWFwMjsKKwlib29sIHJl
dCA9IGZhbHNlOworCisJZmQxID0gb3BlbihmaWxlMSwgT19SRE9OTFkpOworCWlmIChmZDEgPCAw
KQorCQlyZXR1cm4gcmV0OworCisJZmQyID0gb3BlbihmaWxlMiwgT19SRE9OTFkpOworCWlmIChm
ZDIgPCAwKQorCQlnb3RvIGNsb3NlMTsKKworCXJldCA9IGZzdGF0KGZkMSwgJnN0MSk7CisJaWYg
KHJldCkKKwkJZ290byBjbG9zZTI7CisJcmV0ID0gZnN0YXQoZmQyLCAmc3QyKTsKKwlpZiAocmV0
KQorCQlnb3RvIGNsb3NlMjsKKworCWlmIChzdDEuc3Rfc2l6ZSAhPSBzdDIuc3Rfc2l6ZSkKKwkJ
Z290byBjbG9zZTI7CisKKwltYXAxID0gbW1hcChOVUxMLCBzdDEuc3Rfc2l6ZSwgUFJPVF9SRUFE
LCBNQVBfUFJJVkFURSwgZmQxLCAwKTsKKwlpZiAobWFwMSA9PSBNQVBfRkFJTEVEKQorCQlnb3Rv
IGNsb3NlMjsKKworCW1hcDIgPSBtbWFwKE5VTEwsIHN0Mi5zdF9zaXplLCBQUk9UX1JFQUQsIE1B
UF9QUklWQVRFLCBmZDIsIDApOworCWlmIChtYXAyID09IE1BUF9GQUlMRUQpCisJCWdvdG8gY2xv
c2UyOworCisJaWYgKGJjbXAobWFwMSwgbWFwMiwgc3QxLnN0X3NpemUpKQorCQlnb3RvIGNsb3Nl
MjsKKworCXJldCA9IHRydWU7CitjbG9zZTI6CisJY2xvc2UoZmQyKTsKK2Nsb3NlMToKKwljbG9z
ZShmZDEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENyZWF0ZSB0aGUgcGFyZW50IGRp
cmVjdG9yeSBvZiB0aGUgZ2l2ZW4gcGF0aC4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgJ2luY2x1
ZGUvY29uZmlnL2F1dG8uY29uZicgaXMgZ2l2ZW4sIGNyZWF0ZSAnaW5jbHVkZS9jb25maWcnLgor
ICovCitzdGF0aWMgaW50IG1ha2VfcGFyZW50X2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCWNo
YXIgdG1wW1BBVEhfTUFYICsgMV07CisJY2hhciAqcDsKKworCXN0cm5jcHkodG1wLCBwYXRoLCBz
aXplb2YodG1wKSk7CisJdG1wW3NpemVvZih0bXApIC0gMV0gPSAwOworCisJLyogUmVtb3ZlIHRo
ZSBiYXNlIG5hbWUuIEp1c3QgcmV0dXJuIGlmIG5vdGhpbmcgaXMgbGVmdCAqLworCXAgPSBzdHJy
Y2hyKHRtcCwgJy8nKTsKKwlpZiAoIXApCisJCXJldHVybiAwOworCSoocCArIDEpID0gMDsKKwor
CS8qIEp1c3QgaW4gY2FzZSBpdCBpcyBhbiBhYnNvbHV0ZSBwYXRoICovCisJcCA9IHRtcDsKKwl3
aGlsZSAoKnAgPT0gJy8nKQorCQlwKys7CisKKwl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJy8nKSkp
IHsKKwkJKnAgPSAwOworCisJCS8qIHNraXAgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgKi8KKwkJ
aWYgKCFpc19kaXIodG1wKSAmJiBta2Rpcih0bXAsIDA3NTUpKQorCQkJcmV0dXJuIC0xOworCisJ
CSpwID0gJy8nOworCQl3aGlsZSAoKnAgPT0gJy8nKQorCQkJcCsrOworCX0KKworCXJldHVybiAw
OworfQorCitzdGF0aWMgY2hhciBkZXBmaWxlX3BhdGhbUEFUSF9NQVhdOworc3RhdGljIHNpemVf
dCBkZXBmaWxlX3ByZWZpeF9sZW47CisKKy8qIHRvdWNoIGRlcGZpbGUgZm9yIHN5bWJvbCAnbmFt
ZScgKi8KK3N0YXRpYyBpbnQgY29uZl90b3VjaF9kZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlp
bnQgZmQsIHJldDsKKwljb25zdCBjaGFyICpzOworCWNoYXIgKmQsIGM7CisKKwkvKiBjaGVjayBv
dmVyZmxvdzogcHJlZml4ICsgbmFtZSArICIuaCIgKyAnXDAnIG11c3QgZml0IGluIGJ1ZmZlci4g
Ki8KKwlpZiAoZGVwZmlsZV9wcmVmaXhfbGVuICsgc3RybGVuKG5hbWUpICsgMyA+IHNpemVvZihk
ZXBmaWxlX3BhdGgpKQorCQlyZXR1cm4gLTE7CisKKwlkID0gZGVwZmlsZV9wYXRoICsgZGVwZmls
ZV9wcmVmaXhfbGVuOworCXMgPSBuYW1lOworCisJd2hpbGUgKChjID0gKnMrKykpCisJCSpkKysg
PSAoYyA9PSAnXycpID8gJy8nIDogdG9sb3dlcihjKTsKKwlzdHJjcHkoZCwgIi5oIik7CisKKwkv
KiBBc3N1bWUgZGlyZWN0b3J5IHBhdGggYWxyZWFkeSBleGlzdHMuICovCisJZmQgPSBvcGVuKGRl
cGZpbGVfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJaWYgKGZk
ID09IC0xKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gLTE7CisKKwkJcmV0
ID0gbWFrZV9wYXJlbnRfZGlyKGRlcGZpbGVfcGF0aCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g
cmV0OworCisJCS8qIFRyeSBpdCBhZ2Fpbi4gKi8KKwkJZmQgPSBvcGVuKGRlcGZpbGVfcGF0aCwg
T19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJCWlmIChmZCA9PSAtMSkKKwkJ
CXJldHVybiAtMTsKKwl9CisJY2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBj
b25mX3ByaW50ZXIgeworCXZvaWQgKCpwcmludF9zeW1ib2wpKEZJTEUgKiwgc3RydWN0IHN5bWJv
bCAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisJdm9pZCAoKnByaW50X2NvbW1lbnQpKEZJTEUg
KiwgY29uc3QgY2hhciAqLCB2b2lkICopOworfTsKKworc3RhdGljIHZvaWQgY29uZl93YXJuaW5n
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50Ziwg
MSwgMikpKTsKKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4u
KQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIGNv
bnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7CitzdGF0aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dh
cm5pbmdzOworCitjb25zdCBjaGFyIGNvbmZfZGVmbmFtZVtdID0gImFyY2gvJChBUkNIKS9kZWZj
b25maWciOworCitzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10LCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwg
IiVzOiVkOndhcm5pbmc6ICIsIGNvbmZfZmlsZW5hbWUsIGNvbmZfbGluZW5vKTsKKwl2ZnByaW50
ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXAp
OworCWNvbmZfd2FybmluZ3MrKzsKK30KKworc3RhdGljIHZvaWQgY29uZl9kZWZhdWx0X21lc3Nh
Z2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykKK3sKKwlwcmludGYoIiNcbiMgIik7CisJcHJpbnRm
KCIlcyIsIHMpOworCXByaW50ZigiXG4jXG4iKTsKK30KKworc3RhdGljIHZvaWQgKCpjb25mX21l
c3NhZ2VfY2FsbGJhY2spKGNvbnN0IGNoYXIgKnMpID0KKwljb25mX2RlZmF1bHRfbWVzc2FnZV9j
YWxsYmFjazsKK3ZvaWQgY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayh2b2lkICgqZm4pKGNvbnN0
IGNoYXIgKnMpKQoreworCWNvbmZfbWVzc2FnZV9jYWxsYmFjayA9IGZuOworfQorCitzdGF0aWMg
dm9pZCBjb25mX21lc3NhZ2UoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsK
KwljaGFyIGJ1Zls0MDk2XTsKKworCWlmICghY29uZl9tZXNzYWdlX2NhbGxiYWNrKQorCQlyZXR1
cm47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKworCXZzbnByaW50ZihidWYsIHNpemVvZihidWYp
LCBmbXQsIGFwKTsKKwljb25mX21lc3NhZ2VfY2FsbGJhY2soYnVmKTsKKwl2YV9lbmQoYXApOwor
fQorCitjb25zdCBjaGFyICpjb25mX2dldF9jb25maWduYW1lKHZvaWQpCit7CisJY2hhciAqbmFt
ZSA9IGdldGVudigiS0NPTkZJR19DT05GSUciKTsKKworCXJldHVybiBuYW1lID8gbmFtZSA6ICIu
Y29uZmlnIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZ2V0X2F1dG9jb25maWdfbmFt
ZSh2b2lkKQoreworCWNoYXIgKm5hbWUgPSBnZXRlbnYoIktDT05GSUdfQVVUT0NPTkZJRyIpOwor
CisJcmV0dXJuIG5hbWUgPyBuYW1lIDogImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZiI7Cit9CisK
K2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBm
dWxsbmFtZVtQQVRIX01BWCsxXTsKKwljaGFyICplbnYsICpuYW1lOworCisJbmFtZSA9IGV4cGFu
ZF9zdHJpbmcoY29uZl9kZWZuYW1lKTsKKwllbnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJaWYgKGVu
dikgeworCQlzbnByaW50ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwgIiVzLyVzIiwgZW52
LCBuYW1lKTsKKwkJaWYgKGlzX3ByZXNlbnQoZnVsbG5hbWUpKQorCQkJcmV0dXJuIGZ1bGxuYW1l
OworCX0KKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGludCBjb25mX3NldF9zeW1fdmFsKHN0
cnVjdCBzeW1ib2wgKnN5bSwgaW50IGRlZiwgaW50IGRlZl9mbGFncywgY2hhciAqcCkKK3sKKwlj
aGFyICpwMjsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX1RSSVNUQVRFOgorCQlp
ZiAocFswXSA9PSAnbScpIHsKKwkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbW9kOworCQkJc3ltLT5m
bGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8K
KwljYXNlIFNfQk9PTEVBTjoKKwkJaWYgKHBbMF0gPT0gJ3knKSB7CisJCQlzeW0tPmRlZltkZWZd
LnRyaSA9IHllczsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQkJYnJlYWs7CisJCX0K
KwkJaWYgKHBbMF0gPT0gJ24nKSB7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQkJc3lt
LT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGVmICE9IFNfREVG
X0FVVE8pCisJCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVz
IiwKKwkJCQkgICAgIHAsIHN5bS0+bmFtZSk7CisJCXJldHVybiAxOworCWNhc2UgU19TVFJJTkc6
CisJCWlmICgqcCsrICE9ICciJykKKwkJCWJyZWFrOworCQlmb3IgKHAyID0gcDsgKHAyID0gc3Ry
cGJyayhwMiwgIlwiXFwiKSk7IHAyKyspIHsKKwkJCWlmICgqcDIgPT0gJyInKSB7CisJCQkJKnAy
ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1lbW1vdmUocDIsIHAyICsgMSwgc3RybGVuKHAy
KSk7CisJCX0KKwkJaWYgKCFwMikgeworCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQorCQkJCWNv
bmZfd2FybmluZygiaW52YWxpZCBzdHJpbmcgZm91bmQiKTsKKwkJCXJldHVybiAxOworCQl9CisJ
CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwkJaWYgKHN5
bV9zdHJpbmdfdmFsaWQoc3ltLCBwKSkgeworCQkJc3ltLT5kZWZbZGVmXS52YWwgPSB4c3RyZHVw
KHApOworCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVm
ICE9IFNfREVGX0FVVE8pCisJCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZh
bGlkIGZvciAlcyIsCisJCQkJCSAgICAgcCwgc3ltLT5uYW1lKTsKKwkJCXJldHVybiAxOworCQl9
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUg
TElORV9HUk9XVEggMTYKK3N0YXRpYyBpbnQgYWRkX2J5dGUoaW50IGMsIGNoYXIgKipsaW5lcHRy
LCBzaXplX3Qgc2xlbiwgc2l6ZV90ICpuKQoreworCWNoYXIgKm5saW5lOworCXNpemVfdCBuZXdf
c2l6ZSA9IHNsZW4gKyAxOworCWlmIChuZXdfc2l6ZSA+ICpuKSB7CisJCW5ld19zaXplICs9IExJ
TkVfR1JPV1RIIC0gMTsKKwkJbmV3X3NpemUgKj0gMjsKKwkJbmxpbmUgPSB4cmVhbGxvYygqbGlu
ZXB0ciwgbmV3X3NpemUpOworCQlpZiAoIW5saW5lKQorCQkJcmV0dXJuIC0xOworCisJCSpsaW5l
cHRyID0gbmxpbmU7CisJCSpuID0gbmV3X3NpemU7CisJfQorCisJKCpsaW5lcHRyKVtzbGVuXSA9
IGM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY29tcGF0X2dldGxpbmUoY2hh
ciAqKmxpbmVwdHIsIHNpemVfdCAqbiwgRklMRSAqc3RyZWFtKQoreworCWNoYXIgKmxpbmUgPSAq
bGluZXB0cjsKKwlzaXplX3Qgc2xlbiA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0
YyhzdHJlYW0pOworCisJCXN3aXRjaCAoYykgeworCQljYXNlICdcbic6CisJCQlpZiAoYWRkX2J5
dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkKKwkJCQlnb3RvIGVfb3V0OworCQkJc2xlbisrOwor
CQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgRU9GOgorCQkJaWYgKGFkZF9ieXRlKCdcMCcs
ICZsaW5lLCBzbGVuLCBuKSA8IDApCisJCQkJZ290byBlX291dDsKKwkJCSpsaW5lcHRyID0gbGlu
ZTsKKwkJCWlmIChzbGVuID09IDApCisJCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIHNsZW47CisJ
CWRlZmF1bHQ6CisJCQlpZiAoYWRkX2J5dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkKKwkJCQln
b3RvIGVfb3V0OworCQkJc2xlbisrOworCQl9CisJfQorCitlX291dDoKKwlsaW5lW3NsZW4tMV0g
PSAnXDAnOworCSpsaW5lcHRyID0gbGluZTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBjb25mX3Jl
YWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZWYpCit7CisJRklMRSAqaW4gPSBOVUxM
OworCWNoYXIgICAqbGluZSA9IE5VTEw7CisJc2l6ZV90ICBsaW5lX2FzaXplID0gMDsKKwljaGFy
ICpwLCAqcDI7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpLCBkZWZfZmxhZ3M7CisKKwlp
ZiAobmFtZSkgeworCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOworCX0gZWxzZSB7CisJCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsKKworCQluYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgpOworCQlp
biA9IHpjb25mX2ZvcGVuKG5hbWUpOworCQlpZiAoaW4pCisJCQlnb3RvIGxvYWQ7CisJCXN5bV9h
ZGRfY2hhbmdlX2NvdW50KDEpOworCQlpZiAoIXN5bV9kZWZjb25maWdfbGlzdCkKKwkJCXJldHVy
biAxOworCisJCWZvcl9hbGxfZGVmYXVsdHMoc3ltX2RlZmNvbmZpZ19saXN0LCBwcm9wKSB7CisJ
CQlpZiAoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcikgPT0gbm8gfHwKKwkJCSAg
ICBwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJCWNvbnRpbnVlOworCQkJc3ltX2Nh
bGNfdmFsdWUocHJvcC0+ZXhwci0+bGVmdC5zeW0pOworCQkJbmFtZSA9IHN5bV9nZXRfc3RyaW5n
X3ZhbHVlKHByb3AtPmV4cHItPmxlZnQuc3ltKTsKKwkJCWluID0gemNvbmZfZm9wZW4obmFtZSk7
CisJCQlpZiAoaW4pIHsKKwkJCQljb25mX21lc3NhZ2UoInVzaW5nIGRlZmF1bHRzIGZvdW5kIGlu
ICVzIiwKKwkJCQkJIG5hbWUpOworCQkJCWdvdG8gbG9hZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAo
IWluKQorCQlyZXR1cm4gMTsKKworbG9hZDoKKwljb25mX2ZpbGVuYW1lID0gbmFtZTsKKwljb25m
X2xpbmVubyA9IDA7CisJY29uZl93YXJuaW5ncyA9IDA7CisKKwlkZWZfZmxhZ3MgPSBTWU1CT0xf
REVGIDw8IGRlZjsKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bS0+ZmxhZ3MgfD0g
U1lNQk9MX0NIQU5HRUQ7CisJCXN5bS0+ZmxhZ3MgJj0gfihkZWZfZmxhZ3N8U1lNQk9MX1ZBTElE
KTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdz
OworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNfSU5UOgorCQljYXNlIFNfSEVYOgor
CQljYXNlIFNfU1RSSU5HOgorCQkJaWYgKHN5bS0+ZGVmW2RlZl0udmFsKQorCQkJCWZyZWUoc3lt
LT5kZWZbZGVmXS52YWwpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlz
eW0tPmRlZltkZWZdLnZhbCA9IE5VTEw7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQl9
CisJfQorCisJd2hpbGUgKGNvbXBhdF9nZXRsaW5lKCZsaW5lLCAmbGluZV9hc2l6ZSwgaW4pICE9
IC0xKSB7CisJCWNvbmZfbGluZW5vKys7CisJCXN5bSA9IE5VTEw7CisJCWlmIChsaW5lWzBdID09
ICcjJykgeworCQkJaWYgKG1lbWNtcChsaW5lICsgMiwgQ09ORklHXywgc3RybGVuKENPTkZJR18p
KSkKKwkJCQljb250aW51ZTsKKwkJCXAgPSBzdHJjaHIobGluZSArIDIgKyBzdHJsZW4oQ09ORklH
XyksICcgJyk7CisJCQlpZiAoIXApCisJCQkJY29udGludWU7CisJCQkqcCsrID0gMDsKKwkJCWlm
IChzdHJuY21wKHAsICJpcyBub3Qgc2V0IiwgMTApKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRl
ZiA9PSBTX0RFRl9VU0VSKSB7CisJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDIgKyBzdHJsZW4o
Q09ORklHXykpOworCQkJCWlmICghc3ltKSB7CisJCQkJCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEp
OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN5bSA9IHN5bV9sb29r
dXAobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksIDApOworCQkJCWlmIChzeW0tPnR5cGUgPT0g
U19VTktOT1dOKQorCQkJCQlzeW0tPnR5cGUgPSBTX0JPT0xFQU47CisJCQl9CisJCQlpZiAoc3lt
LT5mbGFncyAmIGRlZl9mbGFncykgeworCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6IHJlYXNz
aWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7CisJCQl9CisJCQlzd2l0Y2ggKHN5bS0+
dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3lt
LT5kZWZbZGVmXS50cmkgPSBubzsKKwkJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQl9IGVsc2UgaWYgKG1lbWNtcChsaW5l
LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsKKwkJCXAgPSBzdHJjaHIobGluZSAr
IHN0cmxlbihDT05GSUdfKSwgJz0nKTsKKwkJCWlmICghcCkKKwkJCQljb250aW51ZTsKKwkJCSpw
KysgPSAwOworCQkJcDIgPSBzdHJjaHIocCwgJ1xuJyk7CisJCQlpZiAocDIpIHsKKwkJCQkqcDIt
LSA9IDA7CisJCQkJaWYgKCpwMiA9PSAnXHInKQorCQkJCQkqcDIgPSAwOworCQkJfQorCisJCQlz
eW0gPSBzeW1fZmluZChsaW5lICsgc3RybGVuKENPTkZJR18pKTsKKwkJCWlmICghc3ltKSB7CisJ
CQkJaWYgKGRlZiA9PSBTX0RFRl9BVVRPKQorCQkJCQkvKgorCQkJCQkgKiBSZWFkaW5nIGZyb20g
aW5jbHVkZS9jb25maWcvYXV0by5jb25mCisJCQkJCSAqIElmIENPTkZJR19GT08gcHJldmlvdXNs
eSBleGlzdGVkIGluCisJCQkJCSAqIGF1dG8uY29uZiBidXQgaXQgaXMgbWlzc2luZyBub3csCisJ
CQkJCSAqIGluY2x1ZGUvY29uZmlnL2Zvby5oIG11c3QgYmUgdG91Y2hlZC4KKwkJCQkJICovCisJ
CQkJCWNvbmZfdG91Y2hfZGVwKGxpbmUgKyBzdHJsZW4oQ09ORklHXykpOworCQkJCWVsc2UKKwkJ
CQkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlm
IChzeW0tPmZsYWdzICYgZGVmX2ZsYWdzKSB7CisJCQkJY29uZl93YXJuaW5nKCJvdmVycmlkZTog
cmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWlmIChjb25m
X3NldF9zeW1fdmFsKHN5bSwgZGVmLCBkZWZfZmxhZ3MsIHApKQorCQkJCWNvbnRpbnVlOworCQl9
IGVsc2UgeworCQkJaWYgKGxpbmVbMF0gIT0gJ1xyJyAmJiBsaW5lWzBdICE9ICdcbicpCisJCQkJ
Y29uZl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGE6ICUuKnMiLAorCQkJCQkgICAgIChpbnQpc3Ry
Y3NwbihsaW5lLCAiXHJcbiIpLCBsaW5lKTsKKworCQkJY29udGludWU7CisJCX0KKworCQlpZiAo
c3ltICYmIHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJc3RydWN0IHN5bWJvbCAqY3Mg
PSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJCXN3aXRjaCAo
c3ltLT5kZWZbZGVmXS50cmkpIHsKKwkJCWNhc2Ugbm86CisJCQkJYnJlYWs7CisJCQljYXNlIG1v
ZDoKKwkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSA9PSB5ZXMpIHsKKwkJCQkJY29uZl93YXJuaW5n
KCIlcyBjcmVhdGVzIGluY29uc2lzdGVudCBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJ
CQljcy0+ZmxhZ3MgJj0gfmRlZl9mbGFnczsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIHll
czoKKwkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSAhPSBubykKKwkJCQkJY29uZl93YXJuaW5nKCJv
dmVycmlkZTogJXMgY2hhbmdlcyBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJCWNzLT5k
ZWZbZGVmXS52YWwgPSBzeW07CisJCQkJYnJlYWs7CisJCQl9CisJCQljcy0+ZGVmW2RlZl0udHJp
ID0gRVhQUl9PUihjcy0+ZGVmW2RlZl0udHJpLCBzeW0tPmRlZltkZWZdLnRyaSk7CisJCX0KKwl9
CisJZnJlZShsaW5lKTsKKwlmY2xvc2UoaW4pOworCXJldHVybiAwOworfQorCitpbnQgY29uZl9y
ZWFkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBjb25m
X3Vuc2F2ZWQgPSAwOworCWludCBpOworCisJc3ltX3NldF9jaGFuZ2VfY291bnQoMCk7CisKKwlp
ZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VSKSkgeworCQlzeW1fY2FsY192YWx1
ZShtb2R1bGVzX3N5bSk7CisJCXJldHVybiAxOworCX0KKworCXN5bV9jYWxjX3ZhbHVlKG1vZHVs
ZXNfc3ltKTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUo
c3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9O
T19XUklURSkpCisJCQljb250aW51ZTsKKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSAmJiAoc3lt
LT5mbGFncyAmIFNZTUJPTF9XUklURSkpIHsKKwkJCS8qIGNoZWNrIHRoYXQgY2FsY3VsYXRlZCB2
YWx1ZSBhZ3JlZXMgd2l0aCBzYXZlZCB2YWx1ZSAqLworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsK
KwkJCWNhc2UgU19CT09MRUFOOgorCQkJY2FzZSBTX1RSSVNUQVRFOgorCQkJCWlmIChzeW0tPmRl
ZltTX0RFRl9VU0VSXS50cmkgIT0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKQorCQkJCQli
cmVhazsKKwkJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCQkJY29udGludWU7CisJCQkJ
LyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCWlmICghc3RyY21wKHN5bS0+Y3Vy
ci52YWwsIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJy
ZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIShzeW0tPmZs
YWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCS8qIG5vIHByZXZpb3VzIHZhbHVlIGFuZCBub3Qgc2F2
ZWQgKi8KKwkJCWNvbnRpbnVlOworCQljb25mX3Vuc2F2ZWQrKzsKKwkJLyogbWF5YmUgcHJpbnQg
dmFsdWUgaW4gdmVyYm9zZSBtb2RlLi4uICovCisJfQorCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5
bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5
bSkpIHsKKwkJCS8qIFJlc2V0IHZhbHVlcyBvZiBnZW5lcmF0ZXMgdmFsdWVzLCBzbyB0aGV5J2xs
IGFwcGVhcgorCQkJICogYXMgbmV3LCBpZiB0aGV5IHNob3VsZCBiZWNvbWUgdmlzaWJsZSwgYnV0
IHRoYXQKKwkJCSAqIGRvZXNuJ3QgcXVpdGUgd29yayBpZiB0aGUgS2NvbmZpZyBhbmQgdGhlIHNh
dmVkCisJCQkgKiBjb25maWd1cmF0aW9uIGRpc2FncmVlLgorCQkJICovCisJCQlpZiAoc3ltLT52
aXNpYmxlID09IG5vICYmICFjb25mX3Vuc2F2ZWQpCisJCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9M
X0RFRl9VU0VSOworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCWNhc2UgU19TVFJJTkc6CisJ
CQljYXNlIFNfSU5UOgorCQkJY2FzZSBTX0hFWDoKKwkJCQkvKiBSZXNldCBhIHN0cmluZyB2YWx1
ZSBpZiBpdCdzIG91dCBvZiByYW5nZSAqLworCQkJCWlmIChzeW1fc3RyaW5nX3dpdGhpbl9yYW5n
ZShzeW0sIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCisJCQkJCWJyZWFrOworCQkJCXN5bS0+
ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUR8U1lNQk9MX0RFRl9VU0VSKTsKKwkJCQljb25mX3Vuc2F2
ZWQrKzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9
CisKKwlzeW1fYWRkX2NoYW5nZV9jb3VudChjb25mX3dhcm5pbmdzIHx8IGNvbmZfdW5zYXZlZCk7
CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEtjb25maWcgY29uZmlndXJhdGlvbiBwcmludGVy
CisgKgorICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSByZXN1bHRp
bmcgY29uZmlndXJhdGlvbiBhZnRlcgorICoga2NvbmZpZyBpbnZvY2F0aW9uIGFuZCBgZGVmY29u
ZmlnJyBmaWxlcy4gVW5zZXQgc3ltYm9sIG1pZ2h0IGJlIG9taXR0ZWQgYnkKKyAqIHBhc3Npbmcg
YSBub24tTlVMTCBhcmd1bWVudCB0byB0aGUgcHJpbnRlci4KKyAqCisgKi8KK3N0YXRpYyB2b2lk
CitrY29uZmlnX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25z
dCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwlj
YXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmICgqdmFsdWUgPT0gJ24nKSB7
CisJCQlib29sIHNraXBfdW5zZXQgPSAoYXJnICE9IE5VTEwpOworCisJCQlpZiAoIXNraXBfdW5z
ZXQpCisJCQkJZnByaW50ZihmcCwgIiMgJXMlcyBpcyBub3Qgc2V0XG4iLAorCQkJCSAgICBDT05G
SUdfLCBzeW0tPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CWJyZWFrOworCX0KKworCWZwcmludGYoZnAsICIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5h
bWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQKK2tjb25maWdfcHJpbnRfY29tbWVudChGSUxF
ICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBjaGFyICpwID0g
dmFsdWU7CisJc2l6ZV90IGw7CisKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcbiIp
OworCQlmcHJpbnRmKGZwLCAiIyIpOworCQlpZiAobCkgeworCQkJZnByaW50ZihmcCwgIiAiKTsK
KwkJCXhmd3JpdGUocCwgbCwgMSwgZnApOworCQkJcCArPSBsOworCQl9CisJCWZwcmludGYoZnAs
ICJcbiIpOworCQlpZiAoKnArKyA9PSAnXDAnKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMg
c3RydWN0IGNvbmZfcHJpbnRlciBrY29uZmlnX3ByaW50ZXJfY2IgPQoreworCS5wcmludF9zeW1i
b2wgPSBrY29uZmlnX3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJp
bnRfY29tbWVudCwKK307CisKKy8qCisgKiBIZWFkZXIgcHJpbnRlcgorICoKKyAqIFRoaXMgcHJp
bnRlciBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgYGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9j
b25mLmgnIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFkZXJfcHJpbnRfc3ltYm9sKEZJTEUg
KmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpCit7
CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklT
VEFURTogeworCQljb25zdCBjaGFyICpzdWZmaXggPSAiIjsKKworCQlzd2l0Y2ggKCp2YWx1ZSkg
eworCQljYXNlICduJzoKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN1ZmZpeCA9ICJfTU9E
VUxFIjsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJZnByaW50ZihmcCwg
IiNkZWZpbmUgJXMlcyVzIDFcbiIsCisJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBzdWZmaXgp
OworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNfSEVYOiB7CisJCWNvbnN0IGNoYXIgKnByZWZp
eCA9ICIiOworCisJCWlmICh2YWx1ZVswXSAhPSAnMCcgfHwgKHZhbHVlWzFdICE9ICd4JyAmJiB2
YWx1ZVsxXSAhPSAnWCcpKQorCQkJcHJlZml4ID0gIjB4IjsKKwkJZnByaW50ZihmcCwgIiNkZWZp
bmUgJXMlcyAlcyVzXG4iLAorCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBwcmVmaXgsIHZhbHVl
KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU19TVFJJTkc6CisJY2FzZSBTX0lOVDoKKwkJZnByaW50
ZihmcCwgIiNkZWZpbmUgJXMlcyAlc1xuIiwKKwkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgdmFs
dWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK30KKworc3RhdGljIHZv
aWQKK2hlYWRlcl9wcmludF9jb21tZW50KEZJTEUgKmZwLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9p
ZCAqYXJnKQoreworCWNvbnN0IGNoYXIgKnAgPSB2YWx1ZTsKKwlzaXplX3QgbDsKKworCWZwcmlu
dGYoZnAsICIvKlxuIik7CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXG4iKTsKKwkJ
ZnByaW50ZihmcCwgIiAqIik7CisJCWlmIChsKSB7CisJCQlmcHJpbnRmKGZwLCAiICIpOworCQkJ
eGZ3cml0ZShwLCBsLCAxLCBmcCk7CisJCQlwICs9IGw7CisJCX0KKwkJZnByaW50ZihmcCwgIlxu
Iik7CisJCWlmICgqcCsrID09ICdcMCcpCisJCQlicmVhazsKKwl9CisJZnByaW50ZihmcCwgIiAq
L1xuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGhlYWRlcl9wcmludGVyX2Ni
ID0KK3sKKwkucHJpbnRfc3ltYm9sID0gaGVhZGVyX3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29t
bWVudCA9IGhlYWRlcl9wcmludF9jb21tZW50LAorfTsKKworLyoKKyAqIFRyaXN0YXRlIHByaW50
ZXIKKyAqCisgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIGBpbmNs
dWRlL2NvbmZpZy90cmlzdGF0ZS5jb25mJyBmaWxlLgorICovCitzdGF0aWMgdm9pZAordHJpc3Rh
dGVfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIg
KnZhbHVlLCB2b2lkICphcmcpCit7CisKKwlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYg
KnZhbHVlICE9ICduJykKKwkJZnByaW50ZihmcCwgIiVzJXM9JWNcbiIsIENPTkZJR18sIHN5bS0+
bmFtZSwgKGNoYXIpdG91cHBlcigqdmFsdWUpKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25mX3By
aW50ZXIgdHJpc3RhdGVfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9IHRyaXN0YXRl
X3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJpbnRfY29tbWVudCwK
K307CisKK3N0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3lt
Ym9sICpzeW0sCisJCQkgICAgICBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpw
cmludGVyX2FyZykKK3sKKwljb25zdCBjaGFyICpzdHI7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19VTktOT1dOOgorCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCQlzdHIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlzdHIgPSBzeW1fZXNjYXBlX3N0cmluZ192YWx1
ZShzdHIpOworCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5bSwgc3RyLCBwcmludGVyX2Fy
Zyk7CisJCWZyZWUoKHZvaWQgKilzdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdHIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5
bSwgc3RyLCBwcmludGVyX2FyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorY29uZl93cml0ZV9o
ZWFkaW5nKEZJTEUgKmZwLCBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpwcmlu
dGVyX2FyZykKK3sKKwljaGFyIGJ1ZlsyNTZdOworCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwKKwkgICAgIlxuIgorCSAgICAiQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZTsgRE8gTk9U
IEVESVQuXG4iCisJICAgICIlc1xuIiwKKwkgICAgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKwor
CXByaW50ZXItPnByaW50X2NvbW1lbnQoZnAsIGJ1ZiwgcHJpbnRlcl9hcmcpOworfQorCisvKgor
ICogV3JpdGUgb3V0IGEgbWluaW1hbCBjb25maWcuCisgKiBBbGwgdmFsdWVzIHRoYXQgaGFzIGRl
ZmF1bHQgdmFsdWVzIGFyZSBza2lwcGVkIGFzIHRoaXMgaXMgcmVkdW5kYW50LgorICovCitpbnQg
Y29uZl93cml0ZV9kZWZjb25maWcoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN5
bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICptZW51OworCUZJTEUgKm91dDsKKworCW91dCA9IGZv
cGVuKGZpbGVuYW1lLCAidyIpOworCWlmICghb3V0KQorCQlyZXR1cm4gMTsKKworCXN5bV9jbGVh
cl9hbGxfdmFsaWQoKTsKKworCS8qIFRyYXZlcnNlIGFsbCBtZW51cyB0byBmaW5kIGFsbCByZWxl
dmFudCBzeW1ib2xzICovCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisKKwl3aGlsZSAobWVudSAh
PSBOVUxMKQorCXsKKwkJc3ltID0gbWVudS0+c3ltOworCQlpZiAoc3ltID09IE5VTEwpIHsKKwkJ
CWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQorCQkJCWdvdG8gbmV4dF9tZW51OworCQl9IGVs
c2UgaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJ
CQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCQlnb3RvIG5leHRfbWVudTsK
KwkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKKwkJCS8qIElmIHdlIGNhbm5vdCBjaGFu
Z2UgdGhlIHN5bWJvbCAtIHNraXAgKi8KKwkJCWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0pKQor
CQkJCWdvdG8gbmV4dF9tZW51OworCQkJLyogSWYgc3ltYm9sIGVxdWFscyB0byBkZWZhdWx0IHZh
bHVlIC0gc2tpcCAqLworCQkJaWYgKHN0cmNtcChzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLCBz
eW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN5bSkpID09IDApCisJCQkJZ290byBuZXh0X21lbnU7CisK
KwkJCS8qCisJCQkgKiBJZiBzeW1ib2wgaXMgYSBjaG9pY2UgdmFsdWUgYW5kIGVxdWFscyB0byB0
aGUKKwkJCSAqIGRlZmF1bHQgZm9yIGEgY2hvaWNlIC0gc2tpcC4KKwkJCSAqIEJ1dCBvbmx5IGlm
IHZhbHVlIGlzIGJvb2wgYW5kIGVxdWFsIHRvICJ5IiBhbmQKKwkJCSAqIGNob2ljZSBpcyBub3Qg
Im9wdGlvbmFsIi4KKwkJCSAqIChJZiBjaG9pY2UgaXMgIm9wdGlvbmFsIiB0aGVuIGFsbCB2YWx1
ZXMgY2FuIGJlICJuIikKKwkJCSAqLworCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkg
eworCQkJCXN0cnVjdCBzeW1ib2wgKmNzOworCQkJCXN0cnVjdCBzeW1ib2wgKmRzOworCisJCQkJ
Y3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJCQlkcyA9
IHN5bV9jaG9pY2VfZGVmYXVsdChjcyk7CisJCQkJaWYgKCFzeW1faXNfb3B0aW9uYWwoY3MpICYm
IHN5bSA9PSBkcykgeworCQkJCQlpZiAoKHN5bS0+dHlwZSA9PSBTX0JPT0xFQU4pICYmCisJCQkJ
CSAgICBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQorCQkJCQkJZ290byBuZXh0
X21lbnU7CisJCQkJfQorCQkJfQorCQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29u
ZmlnX3ByaW50ZXJfY2IsIE5VTEwpOworCQl9CituZXh0X21lbnU6CisJCWlmIChtZW51LT5saXN0
ICE9IE5VTEwpIHsKKwkJCW1lbnUgPSBtZW51LT5saXN0OworCQl9CisJCWVsc2UgaWYgKG1lbnUt
Pm5leHQgIT0gTlVMTCkgeworCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCX0gZWxzZSB7CisJCQl3
aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7CisJCQkJaWYgKG1lbnUtPm5leHQgIT0gTlVM
TCkgeworCQkJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisJfQorCWZjbG9zZShvdXQpOworCXJldHVybiAwOworfQorCitpbnQgY29uZl93cml0ZShj
b25zdCBjaGFyICpuYW1lKQoreworCUZJTEUgKm91dDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJ
c3RydWN0IG1lbnUgKm1lbnU7CisJY29uc3QgY2hhciAqc3RyOworCWNoYXIgdG1wbmFtZVtQQVRI
X01BWCArIDFdLCBvbGRuYW1lW1BBVEhfTUFYICsgMV07CisJY2hhciAqZW52OworCWJvb2wgbmVl
ZF9uZXdsaW5lID0gZmFsc2U7CisKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSBjb25mX2dldF9jb25m
aWduYW1lKCk7CisKKwlpZiAoISpuYW1lKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY29uZmlnIG5h
bWUgaXMgZW1wdHlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlzX2RpcihuYW1lKSkg
eworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJcyBhIGRpcmVjdG9yeVxuIiwgbmFtZSk7CisJCXJl
dHVybiAtMTsKKwl9CisKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQorCQlyZXR1cm4gLTE7
CisKKwllbnYgPSBnZXRlbnYoIktDT05GSUdfT1ZFUldSSVRFQ09ORklHIik7CisJaWYgKGVudiAm
JiAqZW52KSB7CisJCSp0bXBuYW1lID0gMDsKKwkJb3V0ID0gZm9wZW4obmFtZSwgInciKTsKKwl9
IGVsc2UgeworCQlzbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICIlcy4lZC50bXAi
LAorCQkJIG5hbWUsIChpbnQpZ2V0cGlkKCkpOworCQlvdXQgPSBmb3Blbih0bXBuYW1lLCAidyIp
OworCX0KKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0
LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKworCWlmICghY29uZl9nZXRfY2hhbmdlZCgp
KQorCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwltZW51ID0gcm9vdG1lbnUubGlzdDsKKwl3
aGlsZSAobWVudSkgeworCQlzeW0gPSBtZW51LT5zeW07CisJCWlmICghc3ltKSB7CisJCQlpZiAo
IW1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJCQlnb3RvIG5leHQ7CisJCQlzdHIgPSBtZW51X2dl
dF9wcm9tcHQobWVudSk7CisJCQlmcHJpbnRmKG91dCwgIlxuIgorCQkJCSAgICAgIiNcbiIKKwkJ
CQkgICAgICIjICVzXG4iCisJCQkJICAgICAiI1xuIiwgc3RyKTsKKwkJCW5lZWRfbmV3bGluZSA9
IGZhbHNlOworCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0UpKSB7CisJ
CQlzeW1fY2FsY192YWx1ZShzeW0pOworCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklU
RSkpCisJCQkJZ290byBuZXh0OworCQkJaWYgKG5lZWRfbmV3bGluZSkgeworCQkJCWZwcmludGYo
b3V0LCAiXG4iKTsKKwkJCQluZWVkX25ld2xpbmUgPSBmYWxzZTsKKwkJCX0KKwkJCXN5bS0+Zmxh
Z3MgJj0gflNZTUJPTF9XUklURTsKKwkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2Nv
bmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKwkJfQorCituZXh0OgorCQlpZiAobWVudS0+bGlzdCkg
eworCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobWVudS0+
bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUt
PnBhcmVudCkpIHsKKwkJCWlmICghbWVudS0+c3ltICYmIG1lbnVfaXNfdmlzaWJsZShtZW51KSAm
JgorCQkJICAgIG1lbnUgIT0gJnJvb3RtZW51KSB7CisJCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0
KG1lbnUpOworCQkJCWZwcmludGYob3V0LCAiIyBlbmQgb2YgJXNcbiIsIHN0cik7CisJCQkJbmVl
ZF9uZXdsaW5lID0gdHJ1ZTsKKwkJCX0KKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJbWVudSA9
IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZmNsb3NlKG91dCk7CisK
KwlpZiAoKnRtcG5hbWUpIHsKKwkJaWYgKGlzX3NhbWUobmFtZSwgdG1wbmFtZSkpIHsKKwkJCWNv
bmZfbWVzc2FnZSgiTm8gY2hhbmdlIHRvICVzIiwgbmFtZSk7CisJCQl1bmxpbmsodG1wbmFtZSk7
CisJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc25w
cmludGYob2xkbmFtZSwgc2l6ZW9mKG9sZG5hbWUpLCAiJXMub2xkIiwgbmFtZSk7CisJCXJlbmFt
ZShuYW1lLCBvbGRuYW1lKTsKKwkJaWYgKHJlbmFtZSh0bXBuYW1lLCBuYW1lKSkKKwkJCXJldHVy
biAxOworCX0KKworCWNvbmZfbWVzc2FnZSgiY29uZmlndXJhdGlvbiB3cml0dGVuIHRvICVzIiwg
bmFtZSk7CisKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKworCXJldHVybiAwOworfQorCisv
KiB3cml0ZSBhIGRlcGVuZGVuY3kgZmlsZSBhcyB1c2VkIGJ5IGtidWlsZCB0byB0cmFjayBkZXBl
bmRlbmNpZXMgKi8KK3N0YXRpYyBpbnQgY29uZl93cml0ZV9kZXAoY29uc3QgY2hhciAqbmFtZSkK
K3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlGSUxFICpvdXQ7CisKKwlvdXQgPSBmb3BlbigiLi5j
b25maWcudG1wIiwgInciKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisJZnByaW50ZihvdXQs
ICJkZXBzX2NvbmZpZyA6PSBcXFxuIik7CisJZm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBm
aWxlID0gZmlsZS0+bmV4dCkgeworCQlpZiAoZmlsZS0+bmV4dCkKKwkJCWZwcmludGYob3V0LCAi
XHQlcyBcXFxuIiwgZmlsZS0+bmFtZSk7CisJCWVsc2UKKwkJCWZwcmludGYob3V0LCAiXHQlc1xu
IiwgZmlsZS0+bmFtZSk7CisJfQorCWZwcmludGYob3V0LCAiXG4lczogXFxcbiIKKwkJICAgICAi
XHQkKGRlcHNfY29uZmlnKVxuXG4iLCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7CisKKwll
bnZfd3JpdGVfZGVwKG91dCwgY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCkpOworCisJZnByaW50
ZihvdXQsICJcbiQoZGVwc19jb25maWcpOiA7XG4iKTsKKwlmY2xvc2Uob3V0KTsKKworCWlmICht
YWtlX3BhcmVudF9kaXIobmFtZSkpCisJCXJldHVybiAxOworCXJlbmFtZSgiLi5jb25maWcudG1w
IiwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29uZl90b3VjaF9kZXBzKHZv
aWQpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50IHJl
cywgaTsKKworCXN0cmNweShkZXBmaWxlX3BhdGgsICJpbmNsdWRlL2NvbmZpZy8iKTsKKwlkZXBm
aWxlX3ByZWZpeF9sZW4gPSBzdHJsZW4oZGVwZmlsZV9wYXRoKTsKKworCW5hbWUgPSBjb25mX2dl
dF9hdXRvY29uZmlnX25hbWUoKTsKKwljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX0FVVE8p
OworCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBz
eW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9M
X05PX1dSSVRFKSB8fCAhc3ltLT5uYW1lKQorCQkJY29udGludWU7CisJCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX1dSSVRFKSB7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykg
eworCQkJCS8qCisJCQkJICogc3ltYm9sIGhhcyBvbGQgYW5kIG5ldyB2YWx1ZSwKKwkJCQkgKiBz
byBjb21wYXJlIHRoZW0uLi4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJ
CWNhc2UgU19CT09MRUFOOgorCQkJCWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRf
dHJpc3RhdGVfdmFsdWUoc3ltKSA9PQorCQkJCQkgICAgc3ltLT5kZWZbU19ERUZfQVVUT10udHJp
KQorCQkJCQkJY29udGludWU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU19TVFJJTkc6CisJCQkJ
Y2FzZSBTX0hFWDoKKwkJCQljYXNlIFNfSU5UOgorCQkJCQlpZiAoIXN0cmNtcChzeW1fZ2V0X3N0
cmluZ192YWx1ZShzeW0pLAorCQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnZhbCkpCisJ
CQkJCQljb250aW51ZTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZXJlIGlzIG5vIG9sZCB2YWx1
ZSwgb25seSAnbm8nICh1bnNldCkKKwkJCQkgKiBpcyBhbGxvd2VkIGFzIG5ldyB2YWx1ZS4KKwkJ
CQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJCWNhc2UgU19CT09MRUFOOgorCQkJ
CWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9
PSBubykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RF
Rl9BVVRPKSkKKwkJCS8qIFRoZXJlIGlzIG5laXRoZXIgYW4gb2xkIG5vciBhIG5ldyB2YWx1ZS4g
Ki8KKwkJCWNvbnRpbnVlOworCQkvKiBlbHNlCisJCSAqCVRoZXJlIGlzIGFuIG9sZCB2YWx1ZSwg
YnV0IG5vIG5ldyB2YWx1ZSAoJ25vJyAodW5zZXQpCisJCSAqCWlzbid0IHNhdmVkIGluIGF1dG8u
Y29uZiwgc28gdGhlIG9sZCB2YWx1ZSBpcyBhbHdheXMKKwkJICoJZGlmZmVyZW50IGZyb20gJ25v
JykuCisJCSAqLworCisJCXJlcyA9IGNvbmZfdG91Y2hfZGVwKHN5bS0+bmFtZSk7CisJCWlmIChy
ZXMpCisJCQlyZXR1cm4gcmVzOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY29uZl93cml0
ZV9hdXRvY29uZihpbnQgb3ZlcndyaXRlKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwljb25z
dCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmF1dG9jb25mX25hbWUgPSBjb25mX2dldF9hdXRv
Y29uZmlnX25hbWUoKTsKKwlGSUxFICpvdXQsICp0cmlzdGF0ZSwgKm91dF9oOworCWludCBpOwor
CisJaWYgKCFvdmVyd3JpdGUgJiYgaXNfcHJlc2VudChhdXRvY29uZl9uYW1lKSkKKwkJcmV0dXJu
IDA7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwljb25mX3dyaXRlX2RlcCgiaW5jbHVk
ZS9jb25maWcvYXV0by5jb25mLmNtZCIpOworCisJaWYgKGNvbmZfdG91Y2hfZGVwcygpKQorCQly
ZXR1cm4gMTsKKworCW91dCA9IGZvcGVuKCIudG1wY29uZmlnIiwgInciKTsKKwlpZiAoIW91dCkK
KwkJcmV0dXJuIDE7CisKKwl0cmlzdGF0ZSA9IGZvcGVuKCIudG1wY29uZmlnX3RyaXN0YXRlIiwg
InciKTsKKwlpZiAoIXRyaXN0YXRlKSB7CisJCWZjbG9zZShvdXQpOworCQlyZXR1cm4gMTsKKwl9
CisKKwlvdXRfaCA9IGZvcGVuKCIudG1wY29uZmlnLmgiLCAidyIpOworCWlmICghb3V0X2gpIHsK
KwkJZmNsb3NlKG91dCk7CisJCWZjbG9zZSh0cmlzdGF0ZSk7CisJCXJldHVybiAxOworCX0KKwor
CWNvbmZfd3JpdGVfaGVhZGluZyhvdXQsICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwpOworCisJ
Y29uZl93cml0ZV9oZWFkaW5nKHRyaXN0YXRlLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwgTlVMTCk7
CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0X2gsICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7
CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJ
CWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8ICFzeW0tPm5hbWUpCisJCQljb250
aW51ZTsKKworCQkvKiB3cml0ZSBzeW1ib2wgdG8gYXV0by5jb25mLCB0cmlzdGF0ZSBhbmQgaGVh
ZGVyIGZpbGVzICovCisJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZpZ19wcmlu
dGVyX2NiLCAodm9pZCAqKTEpOworCisJCWNvbmZfd3JpdGVfc3ltYm9sKHRyaXN0YXRlLCBzeW0s
ICZ0cmlzdGF0ZV9wcmludGVyX2NiLCAodm9pZCAqKTEpOworCisJCWNvbmZfd3JpdGVfc3ltYm9s
KG91dF9oLCBzeW0sICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7CisJfQorCWZjbG9zZShvdXQp
OworCWZjbG9zZSh0cmlzdGF0ZSk7CisJZmNsb3NlKG91dF9oKTsKKworCW5hbWUgPSBnZXRlbnYo
IktDT05GSUdfQVVUT0hFQURFUiIpOworCWlmICghbmFtZSkKKwkJbmFtZSA9ICJpbmNsdWRlL2dl
bmVyYXRlZC9hdXRvY29uZi5oIjsKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQorCQlyZXR1
cm4gMTsKKwlpZiAocmVuYW1lKCIudG1wY29uZmlnLmgiLCBuYW1lKSkKKwkJcmV0dXJuIDE7CisK
KwluYW1lID0gZ2V0ZW52KCJLQ09ORklHX1RSSVNUQVRFIik7CisJaWYgKCFuYW1lKQorCQluYW1l
ID0gImluY2x1ZGUvY29uZmlnL3RyaXN0YXRlLmNvbmYiOworCWlmIChtYWtlX3BhcmVudF9kaXIo
bmFtZSkpCisJCXJldHVybiAxOworCWlmIChyZW5hbWUoIi50bXBjb25maWdfdHJpc3RhdGUiLCBu
YW1lKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWFrZV9wYXJlbnRfZGlyKGF1dG9jb25mX25hbWUp
KQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzdGVwLCBrYnVp
bGQgaGFzIGEgZGVwZW5kZW5jeSBvbiBhdXRvLmNvbmYKKwkgKiBhbmQgdGhpcyBtYXJrcyB0aGUg
c3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBzdGVwcy4KKwkgKi8KKwlpZiAo
cmVuYW1lKCIudG1wY29uZmlnIiwgYXV0b2NvbmZfbmFtZSkpCisJCXJldHVybiAxOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ltX2NoYW5nZV9jb3VudDsKK3N0YXRpYyB2b2lkICgq
Y29uZl9jaGFuZ2VkX2NhbGxiYWNrKSh2b2lkKTsKKwordm9pZCBzeW1fc2V0X2NoYW5nZV9jb3Vu
dChpbnQgY291bnQpCit7CisJaW50IF9zeW1fY2hhbmdlX2NvdW50ID0gc3ltX2NoYW5nZV9jb3Vu
dDsKKwlzeW1fY2hhbmdlX2NvdW50ID0gY291bnQ7CisJaWYgKGNvbmZfY2hhbmdlZF9jYWxsYmFj
ayAmJgorCSAgICAoYm9vbClfc3ltX2NoYW5nZV9jb3VudCAhPSAoYm9vbCljb3VudCkKKwkJY29u
Zl9jaGFuZ2VkX2NhbGxiYWNrKCk7Cit9CisKK3ZvaWQgc3ltX2FkZF9jaGFuZ2VfY291bnQoaW50
IGNvdW50KQoreworCXN5bV9zZXRfY2hhbmdlX2NvdW50KGNvdW50ICsgc3ltX2NoYW5nZV9jb3Vu
dCk7Cit9CisKK2Jvb2wgY29uZl9nZXRfY2hhbmdlZCh2b2lkKQoreworCXJldHVybiBzeW1fY2hh
bmdlX2NvdW50OworfQorCit2b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZu
KSh2b2lkKSkKK3sKKwljb25mX2NoYW5nZWRfY2FsbGJhY2sgPSBmbjsKK30KKworc3RhdGljIGJv
b2wgcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoc3RydWN0IHN5bWJvbCAqY3N5bSkKK3sKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBleHByICpl
OworCWludCBjbnQsIGRlZjsKKworCS8qCisJICogSWYgY2hvaWNlIGlzIG1vZCB0aGVuIHdlIG1h
eSBoYXZlIG1vcmUgaXRlbXMgc2VsZWN0ZWQKKwkgKiBhbmQgaWYgbm8gdGhlbiBuby1vbmUuCisJ
ICogSW4gYm90aCBjYXNlcyBzdG9wLgorCSAqLworCWlmIChjc3ltLT5jdXJyLnRyaSAhPSB5ZXMp
CisJCXJldHVybiBmYWxzZTsKKworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNzeW0pOwor
CisJLyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8KKwljbnQgPSAwOworCWV4cHJf
bGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQorCQljbnQrKzsKKworCS8qCisJ
ICogZmluZCBhIHJhbmRvbSB2YWx1ZSBhbmQgc2V0IGl0IHRvIHllcywKKwkgKiBzZXQgdGhlIHJl
c3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9uZSBzZXQKKwkgKi8KKwlkZWYgPSAocmFuZCgpICUg
Y250KTsKKworCWNudCA9IDA7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBl
LCBzeW0pIHsKKwkJaWYgKGRlZiA9PSBjbnQrKykgeworCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0u
dHJpID0geWVzOworCQkJY3N5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsKKwkJfQorCQll
bHNlIHsKKwkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOworCQl9CisJCXN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2Fs
Y3VsYXRlZCAqLworCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfVkFMSUQ7CisJfQorCWNzeW0tPmZs
YWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2Fs
Y3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsKKworCXJldHVybiB0
cnVlOworfQorCit2b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpjc3lt
KQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3Ry
dWN0IGV4cHIgKmU7CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8q
CisJICogU2V0IGFsbCBub24tYXNzaW5nZWQgY2hvaWNlIHZhbHVlcyB0byBubworCSAqLworCWV4
cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmICghc3ltX2hh
c192YWx1ZShzeW0pKQorCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87CisJfQorCWNz
eW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFs
dWUgY2FsY3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEIHwgU1lNQk9M
X05FRURfU0VUX0NIT0lDRV9WQUxVRVMpOworfQorCitib29sIGNvbmZfc2V0X2FsbF9uZXdfc3lt
Ym9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpj
c3ltOworCWludCBpLCBjbnQsIHBieSwgcHR5LCBwdG07CS8qIHBieTogcHJvYmFiaWxpdHkgb2Yg
Ym9vbCAgICAgPSB5CisJCQkJCSAqIHB0eTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSB5CisJ
CQkJCSAqIHB0bTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSBtCisJCQkJCSAqLworCisJcGJ5
ID0gNTA7IHB0eSA9IHB0bSA9IDMzOyAvKiBjYW4ndCBnbyBhcyB0aGUgZGVmYXVsdCBpbiBzd2l0
Y2gtY2FzZQorCQkJCSAgICogYmVsb3csIG90aGVyd2lzZSBnY2Mgd2hpbmVzIGFib3V0CisJCQkJ
ICAgKiAtV21heWJlLXVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKSB7
CisJCWludCBuLCBwWzNdOworCQljaGFyICplbnYgPSBnZXRlbnYoIktDT05GSUdfUFJPQkFCSUxJ
VFkiKTsKKwkJbiA9IDA7CisJCXdoaWxlKCBlbnYgJiYgKmVudiApIHsKKwkJCWNoYXIgKmVuZHA7
CisJCQlpbnQgdG1wID0gc3RydG9sKCBlbnYsICZlbmRwLCAxMCApOworCQkJaWYoIHRtcCA+PSAw
ICYmIHRtcCA8PSAxMDAgKSB7CisJCQkJcFtuKytdID0gdG1wOworCQkJfSBlbHNlIHsKKwkJCQll
cnJubyA9IEVSQU5HRTsKKwkJCQlwZXJyb3IoICJLQ09ORklHX1BST0JBQklMSVRZIiApOworCQkJ
CWV4aXQoIDEgKTsKKwkJCX0KKwkJCWVudiA9ICgqZW5kcCA9PSAnOicpID8gZW5kcCsxIDogZW5k
cDsKKwkJCWlmKCBuID49MyApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzd2l0Y2goIG4g
KSB7CisJCWNhc2UgMToKKwkJCXBieSA9IHBbMF07IHB0bSA9IHBieS8yOyBwdHkgPSBwYnktcHRt
OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXB0eSA9IHBbMF07IHB0bSA9IHBbMV07IHBieSA9
IHB0eSArIHB0bTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYnkgPSBwWzBdOyBwdHkgPSBw
WzFdOyBwdG0gPSBwWzJdOworCQkJYnJlYWs7CisJCX0KKworCQlpZiggcHR5K3B0bSA+IDEwMCAp
IHsKKwkJCWVycm5vID0gRVJBTkdFOworCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIg
KTsKKwkJCWV4aXQoIDEgKTsKKwkJfQorCX0KKwlib29sIGhhc19jaGFuZ2VkID0gZmFsc2U7CisK
Kwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwg
KHN5bS0+ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoc3lt
X2dldF90eXBlKHN5bSkpIHsKKwkJY2FzZSBTX0JPT0xFQU46CisJCWNhc2UgU19UUklTVEFURToK
KwkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsKKwkJCXN3aXRjaCAobW9kZSkgeworCQkJY2FzZSBkZWZf
eWVzOgorCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgZGVmX21vZDoKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7CisJCQkJ
YnJlYWs7CisJCQljYXNlIGRlZl9ubzoKKwkJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9BTExO
T0NPTkZJR19ZKQorCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7CisJCQkJZWxz
ZQorCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlicmVhazsKKwkJCWNh
c2UgZGVmX3JhbmRvbToKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlj
bnQgPSByYW5kKCkgJSAxMDA7CisJCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJ
CQkJCWlmIChjbnQgPCBwdHkpCisJCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7
CisJCQkJCWVsc2UgaWYgKGNudCA8IChwdHkrcHRtKSkKKwkJCQkJCXN5bS0+ZGVmW1NfREVGX1VT
RVJdLnRyaSA9IG1vZDsKKwkJCQl9IGVsc2UgaWYgKGNudCA8IHBieSkKKwkJCQkJc3ltLT5kZWZb
U19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb250
aW51ZTsKKwkJCX0KKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9y
YW5kb20pKQorCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkJYnJlYWs7CisJ
CWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJfQorCisJc3ltX2NsZWFyX2FsbF92YWxpZCgp
OworCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJ
ICogSWYgY3Vyci50cmkgZXF1YWxzIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2ZXJhbAor
CSAqIGNob2ljZSBzeW1ib2xzIGluIG9uZSBibG9jay4KKwkgKiBJbiB0aGlzIGNhc2Ugd2UgZG8g
bm90aGluZy4KKwkgKiBJZiBjdXJyLnRyaSBlcXVhbHMgeWVzIHRoZW4gb25seSBvbmUgc3ltYm9s
IGNhbiBiZQorCSAqIHNlbGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQgaXQgdG8g
eWVzLAorCSAqIGFuZCB0aGUgcmVzdCB0byBuby4KKwkgKi8KKwlpZiAobW9kZSAhPSBkZWZfcmFu
ZG9tKSB7CisJCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7CisJCQlpZiAoKHN5bV9pc19jaG9p
Y2UoY3N5bSkgJiYgIXN5bV9oYXNfdmFsdWUoY3N5bSkpIHx8CisJCQkgICAgc3ltX2lzX2Nob2lj
ZV92YWx1ZShjc3ltKSkKKwkJCQljc3ltLT5mbGFncyB8PSBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNF
X1ZBTFVFUzsKKwkJfQorCX0KKworCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7CisJCWlmIChz
eW1faGFzX3ZhbHVlKGNzeW0pIHx8ICFzeW1faXNfY2hvaWNlKGNzeW0pKQorCQkJY29udGludWU7
CisKKwkJc3ltX2NhbGNfdmFsdWUoY3N5bSk7CisJCWlmIChtb2RlID09IGRlZl9yYW5kb20pCisJ
CQloYXNfY2hhbmdlZCA9IHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKGNzeW0pOworCQllbHNlIHsK
KwkJCXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhjc3ltKTsKKwkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsK
KwkJfQorCX0KKworCXJldHVybiBoYXNfY2hhbmdlZDsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZXhwci5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZmZmMwotLS0gL2Rldi9udWxsCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jCkBAIC0wLDAgKzEsMTI5NyBAQAorLy8gU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4g
WmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKKyNkZWZpbmUg
REVCVUdfRVhQUgkwCisKK3N0YXRpYyBpbnQgZXhwcl9lcShzdHJ1Y3QgZXhwciAqZTEsIHN0cnVj
dCBleHByICplMik7CitzdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX3luKHN0cnVj
dCBleHByICplKTsKKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfc3ltYm9sKHN0cnVjdCBzeW1i
b2wgKnN5bSkKK3sKKwlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7CisJ
ZS0+dHlwZSA9IEVfU1lNQk9MOworCWUtPmxlZnQuc3ltID0gc3ltOworCXJldHVybiBlOworfQor
CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKmNlKQoreworCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsK
KwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LmV4cHIgPSBjZTsKKwlyZXR1cm4gZTsKK30KKwor
c3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBl
eHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBleHByICplID0geGNhbGxvYygx
LCBzaXplb2YoKmUpKTsKKwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LmV4cHIgPSBlMTsKKwll
LT5yaWdodC5leHByID0gZTI7CisJcmV0dXJuIGU7Cit9CisKK3N0cnVjdCBleHByICpleHByX2Fs
bG9jX2NvbXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBz
eW1ib2wgKnMyKQoreworCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsK
KwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LnN5bSA9IHMxOworCWUtPnJpZ2h0LnN5bSA9IHMy
OworCXJldHVybiBlOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4
cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJaWYgKCFlMSkKKwkJcmV0dXJuIGUyOworCXJl
dHVybiBlMiA/IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpIDogZTE7Cit9CisKK3N0cnVj
dCBleHByICpleHByX2FsbG9jX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQor
eworCWlmICghZTEpCisJCXJldHVybiBlMjsKKwlyZXR1cm4gZTIgPyBleHByX2FsbG9jX3R3byhF
X09SLCBlMSwgZTIpIDogZTE7Cit9CisKK3N0cnVjdCBleHByICpleHByX2NvcHkoY29uc3Qgc3Ry
dWN0IGV4cHIgKm9yZykKK3sKKwlzdHJ1Y3QgZXhwciAqZTsKKworCWlmICghb3JnKQorCQlyZXR1
cm4gTlVMTDsKKworCWUgPSB4bWFsbG9jKHNpemVvZigqb3JnKSk7CisJbWVtY3B5KGUsIG9yZywg
c2l6ZW9mKCpvcmcpKTsKKwlzd2l0Y2ggKG9yZy0+dHlwZSkgeworCWNhc2UgRV9TWU1CT0w6CisJ
CWUtPmxlZnQgPSBvcmctPmxlZnQ7CisJCWJyZWFrOworCWNhc2UgRV9OT1Q6CisJCWUtPmxlZnQu
ZXhwciA9IGV4cHJfY29weShvcmctPmxlZnQuZXhwcik7CisJCWJyZWFrOworCWNhc2UgRV9FUVVB
TDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRI
OgorCWNhc2UgRV9VTkVRVUFMOgorCQllLT5sZWZ0LnN5bSA9IG9yZy0+bGVmdC5zeW07CisJCWUt
PnJpZ2h0LnN5bSA9IG9yZy0+cmlnaHQuc3ltOworCQlicmVhazsKKwljYXNlIEVfQU5EOgorCWNh
c2UgRV9PUjoKKwljYXNlIEVfTElTVDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+
bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfY29weShvcmctPnJpZ2h0LmV4cHIp
OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcHJpbnRmKHN0ZGVyciwgImNhbid0IGNvcHkgdHlw
ZSAlZFxuIiwgZS0+dHlwZSk7CisJCWZyZWUoZSk7CisJCWUgPSBOVUxMOworCQlicmVhazsKKwl9
CisKKwlyZXR1cm4gZTsKK30KKwordm9pZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpCit7CisJ
aWYgKCFlKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfU1lNQk9M
OgorCQlicmVhazsKKwljYXNlIEVfTk9UOgorCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJ
YnJlYWs7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0dUSDoKKwljYXNl
IEVfTEVROgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX1VORVFVQUw6CisJCWJyZWFrOworCWNhc2Ug
RV9PUjoKKwljYXNlIEVfQU5EOgorCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJZXhwcl9m
cmVlKGUtPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcHJpbnRmKHN0ZGVy
ciwgImhvdyB0byBmcmVlIHR5cGUgJWQ/XG4iLCBlLT50eXBlKTsKKwkJYnJlYWs7CisJfQorCWZy
ZWUoZSk7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNfY291bnQ7CisKKyNkZWZpbmUgZTEgKCplcDEp
CisjZGVmaW5lIGUyICgqZXAyKQorCisvKgorICogZXhwcl9lbGltaW5hdGVfZXEoKSBoZWxwZXIu
CisgKgorICogV2Fsa3MgdGhlIHR3byBleHByZXNzaW9uIHRyZWVzIGdpdmVuIGluICdlcDEnIGFu
ZCAnZXAyJy4gQW55IG5vZGUgdGhhdCBkb2VzCisgKiBub3QgaGF2ZSB0eXBlICd0eXBlJyAoRV9P
Ui9FX0FORCkgaXMgY29uc2lkZXJlZCBhIGxlYWYsIGFuZCBpcyBjb21wYXJlZAorICogYWdhaW5z
dCBhbGwgb3RoZXIgbGVhdmVzLiBUd28gZXF1YWwgbGVhdmVzIGFyZSBib3RoIHJlcGxhY2VkIHdp
dGggZWl0aGVyICd5JworICogb3IgJ24nIGFzIGFwcHJvcHJpYXRlIGZvciAndHlwZScsIHRvIGJl
IGVsaW1pbmF0ZWQgbGF0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhwcl9lbGltaW5hdGVfZXEo
ZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAy
KQoreworCS8qIFJlY3Vyc2UgZG93biB0byBsZWF2ZXMgKi8KKworCWlmIChlMS0+dHlwZSA9PSB0
eXBlKSB7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLT5sZWZ0LmV4cHIsICZlMik7
CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOworCQly
ZXR1cm47CisJfQorCWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7CisJCV9fZXhwcl9lbGltaW5hdGVf
ZXEodHlwZSwgJmUxLCAmZTItPmxlZnQuZXhwcik7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlw
ZSwgJmUxLCAmZTItPnJpZ2h0LmV4cHIpOworCQlyZXR1cm47CisJfQorCisJLyogZTEgYW5kIGUy
IGFyZSBsZWF2ZXMuIENvbXBhcmUgdGhlbS4gKi8KKworCWlmIChlMS0+dHlwZSA9PSBFX1NZTUJP
TCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJgorCSAgICBlMS0+bGVmdC5zeW0gPT0gZTItPmxl
ZnQuc3ltICYmCisJICAgIChlMS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMgfHwgZTEtPmxlZnQu
c3ltID09ICZzeW1ib2xfbm8pKQorCQlyZXR1cm47CisJaWYgKCFleHByX2VxKGUxLCBlMikpCisJ
CXJldHVybjsKKworCS8qIGUxIGFuZCBlMiBhcmUgZXF1YWwgbGVhdmVzLiBQcmVwYXJlIHRoZW0g
Zm9yIGVsaW1pbmF0aW9uLiAqLworCisJdHJhbnNfY291bnQrKzsKKwlleHByX2ZyZWUoZTEpOyBl
eHByX2ZyZWUoZTIpOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRV9PUjoKKwkJZTEgPSBleHBy
X2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3lt
Ym9sX25vKTsKKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwkJZTEgPSBleHByX2FsbG9jX3N5bWJv
bCgmc3ltYm9sX3llcyk7CisJCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOwor
CQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorfQorCisvKgorICogUmV3cml0ZXMgdGhlIGV4
cHJlc3Npb25zICdlcDEnIGFuZCAnZXAyJyB0byByZW1vdmUgb3BlcmFuZHMgY29tbW9uIHRvIGJv
dGguCisgKiBFeGFtcGxlIHJlZHVjdGlvbnM6CisgKgorICoJZXAxOiBBICYmIEIgICAgICAgICAg
IC0+ICBlcDE6IHkKKyAqCWVwMjogQSAmJiBCICYmIEMgICAgICAtPiAgZXAyOiBDCisgKgorICoJ
ZXAxOiBBIHx8IEIgICAgICAgICAgIC0+ICBlcDE6IG4KKyAqCWVwMjogQSB8fCBCIHx8IEMgICAg
ICAtPiAgZXAyOiBDCisgKgorICoJZXAxOiBBICYmIChCICYmIEZPTykgIC0+ICBlcDE6IEZPTwor
ICoJZXAyOiAoQkFSICYmIEIpICYmIEEgIC0+ICBlcDI6IEJBUgorICoKKyAqCWVwMTogQSAmJiAo
QiB8fCBDKSAgICAtPiAgZXAxOiB5CisgKgllcDI6IChDIHx8IEIpICYmIEEgICAgLT4gIGVwMjog
eQorICoKKyAqIENvbXBhcmlzb25zIGFyZSBkb25lIGJldHdlZW4gYWxsIG9wZXJhbmRzIGF0IHRo
ZSBzYW1lICJsZXZlbCIgb2YgJiYgb3IgfHwuCisgKiBGb3IgZXhhbXBsZSwgaW4gdGhlIGV4cHJl
c3Npb24gJ2UxICYmIChlMiB8fCBlMykgJiYgKGU0IHx8IGU1KScsIHRoZQorICogZm9sbG93aW5n
IG9wZXJhbmRzIHdpbGwgYmUgY29tcGFyZWQ6CisgKgorICoJLSAnZTEnLCAnZTIgfHwgZTMnLCBh
bmQgJ2U0IHx8IGU1JywgYWdhaW5zdCBlYWNoIG90aGVyCisgKgktIGUyIGFnYWluc3QgZTMKKyAq
CS0gZTQgYWdhaW5zdCBlNQorICoKKyAqIFBhcmVudGhlc2VzIGFyZSBpcnJlbGV2YW50IHdpdGhp
biBhIHNpbmdsZSBsZXZlbC4gJ2UxICYmIChlMiAmJiBlMyknIGFuZAorICogJyhlMSAmJiBlMikg
JiYgZTMnIGFyZSBib3RoIGEgc2luZ2xlIGxldmVsLgorICoKKyAqIFNlZSBfX2V4cHJfZWxpbWlu
YXRlX2VxKCkgYXMgd2VsbC4KKyAqLwordm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhw
ciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisJaWYgKCFlMSB8fCAhZTIpCisJCXJldHVy
bjsKKwlzd2l0Y2ggKGUxLT50eXBlKSB7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCV9f
ZXhwcl9lbGltaW5hdGVfZXEoZTEtPnR5cGUsIGVwMSwgZXAyKTsKKwlkZWZhdWx0OgorCQk7CisJ
fQorCWlmIChlMS0+dHlwZSAhPSBlMi0+dHlwZSkgc3dpdGNoIChlMi0+dHlwZSkgeworCWNhc2Ug
RV9PUjoKKwljYXNlIEVfQU5EOgorCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUyLT50eXBlLCBlcDEs
IGVwMik7CisJZGVmYXVsdDoKKwkJOworCX0KKwllMSA9IGV4cHJfZWxpbWluYXRlX3luKGUxKTsK
KwllMiA9IGV4cHJfZWxpbWluYXRlX3luKGUyKTsKK30KKworI3VuZGVmIGUxCisjdW5kZWYgZTIK
KworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiAnZTEnIGFuZCAnZTInIGFyZSBlcXVhbCwgYWZ0ZXIg
bWlub3Igc2ltcGxpZmljYXRpb24uIFR3bworICogJiYvfHwgZXhwcmVzc2lvbnMgYXJlIGNvbnNp
ZGVyZWQgZXF1YWwgaWYgZXZlcnkgb3BlcmFuZCBpbiBvbmUgZXhwcmVzc2lvbgorICogZXF1YWxz
IHNvbWUgb3BlcmFuZCBpbiB0aGUgb3RoZXIgKG9wZXJhbmRzIGRvIG5vdCBuZWVkIHRvIGFwcGVh
ciBpbiB0aGUgc2FtZQorICogb3JkZXIpLCByZWN1cnNpdmVseS4KKyAqLworc3RhdGljIGludCBl
eHByX2VxKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCWludCByZXMsIG9s
ZF9jb3VudDsKKworCWlmIChlMS0+dHlwZSAhPSBlMi0+dHlwZSkKKwkJcmV0dXJuIDA7CisJc3dp
dGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9H
VEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRIOgorCWNhc2UgRV9VTkVRVUFMOgorCQlyZXR1
cm4gZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSAmJiBlMS0+cmlnaHQuc3ltID09IGUyLT5y
aWdodC5zeW07CisJY2FzZSBFX1NZTUJPTDoKKwkJcmV0dXJuIGUxLT5sZWZ0LnN5bSA9PSBlMi0+
bGVmdC5zeW07CisJY2FzZSBFX05PVDoKKwkJcmV0dXJuIGV4cHJfZXEoZTEtPmxlZnQuZXhwciwg
ZTItPmxlZnQuZXhwcik7CisJY2FzZSBFX0FORDoKKwljYXNlIEVfT1I6CisJCWUxID0gZXhwcl9j
b3B5KGUxKTsKKwkJZTIgPSBleHByX2NvcHkoZTIpOworCQlvbGRfY291bnQgPSB0cmFuc19jb3Vu
dDsKKwkJZXhwcl9lbGltaW5hdGVfZXEoJmUxLCAmZTIpOworCQlyZXMgPSAoZTEtPnR5cGUgPT0g
RV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYKKwkJICAgICAgIGUxLT5sZWZ0LnN5
bSA9PSBlMi0+bGVmdC5zeW0pOworCQlleHByX2ZyZWUoZTEpOworCQlleHByX2ZyZWUoZTIpOwor
CQl0cmFuc19jb3VudCA9IG9sZF9jb3VudDsKKwkJcmV0dXJuIHJlczsKKwljYXNlIEVfTElTVDoK
KwljYXNlIEVfUkFOR0U6CisJY2FzZSBFX05PTkU6CisJCS8qIHBhbmljICovOworCX0KKworCWlm
IChERUJVR19FWFBSKSB7CisJCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOworCQlwcmludGYoIiA9
ICIpOworCQlleHByX2ZwcmludChlMiwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIgP1xuIik7CisJfQor
CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWN1cnNpdmVseSBwZXJmb3JtcyB0aGUgZm9sbG93
aW5nIHNpbXBsaWZpY2F0aW9ucyBpbi1wbGFjZSAoYXMgd2VsbCBhcyB0aGUKKyAqIGNvcnJlc3Bv
bmRpbmcgc2ltcGxpZmljYXRpb25zIHdpdGggc3dhcHBlZCBvcGVyYW5kcyk6CisgKgorICoJZXhw
ciAmJiBuICAtPiAgbgorICoJZXhwciAmJiB5ICAtPiAgZXhwcgorICoJZXhwciB8fCBuICAtPiAg
ZXhwcgorICoJZXhwciB8fCB5ICAtPiAgeQorICoKKyAqIFJldHVybnMgdGhlIG9wdGltaXplZCBl
eHByZXNzaW9uLgorICovCitzdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX3luKHN0
cnVjdCBleHByICplKQoreworCXN0cnVjdCBleHByICp0bXA7CisKKwlpZiAoZSkgc3dpdGNoIChl
LT50eXBlKSB7CisJY2FzZSBFX0FORDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9lbGltaW5hdGVf
eW4oZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUt
PnJpZ2h0LmV4cHIpOworCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7CisJ
CQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZXhwcl9m
cmVlKGUtPmxlZnQuZXhwcik7CisJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUt
PnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQkJZS0+
cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPmxlZnQu
ZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQlmcmVlKGUtPmxlZnQuZXhwcik7
CisJCQkJdG1wID0gZS0+cmlnaHQuZXhwcjsKKwkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7CisJ
CQkJZnJlZSh0bXApOworCQkJCXJldHVybiBlOworCQkJfQorCQl9CisJCWlmIChlLT5yaWdodC5l
eHByLT50eXBlID09IEVfU1lNQk9MKSB7CisJCQlpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0g
PT0gJnN5bWJvbF9ubykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCWV4cHJf
ZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVm
dC5zeW0gPSAmc3ltYm9sX25vOworCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJCXJldHVy
biBlOworCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3ll
cykgeworCQkJCWZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJdG1wID0gZS0+bGVmdC5leHByOwor
CQkJCSplID0gKihlLT5sZWZ0LmV4cHIpOworCQkJCWZyZWUodG1wKTsKKwkJCQlyZXR1cm4gZTsK
KwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIEVfT1I6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJf
ZWxpbWluYXRlX3luKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2VsaW1p
bmF0ZV95bihlLT5yaWdodC5leHByKTsKKwkJaWYgKGUtPmxlZnQuZXhwci0+dHlwZSA9PSBFX1NZ
TUJPTCkgeworCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgewor
CQkJCWZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQl0bXAgPSBlLT5yaWdodC5leHByOworCQkJCSpl
ID0gKihlLT5yaWdodC5leHByKTsKKwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9
IGVsc2UgaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQll
eHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJ
CQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJ
CQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9CisJCX0KKwkJaWYg
KGUtPnJpZ2h0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsKKwkJCWlmIChlLT5yaWdodC5leHBy
LT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZnJlZShlLT5yaWdodC5leHByKTsKKwkJ
CQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7CisJCQkJZnJl
ZSh0bXApOworCQkJCXJldHVybiBlOworCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0
LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJ
CWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJ
ZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsKKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsKKwkJ
CQlyZXR1cm4gZTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJl
dHVybiBlOworfQorCisvKgorICogYm9vbCBGT08hPW4gPT4gRk9PCisgKi8KK3N0cnVjdCBleHBy
ICpleHByX3RyYW5zX2Jvb2woc3RydWN0IGV4cHIgKmUpCit7CisJaWYgKCFlKQorCQlyZXR1cm4g
TlVMTDsKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgorCWNhc2UgRV9PUjoKKwlj
YXNlIEVfTk9UOgorCQllLT5sZWZ0LmV4cHIgPSBleHByX3RyYW5zX2Jvb2woZS0+bGVmdC5leHBy
KTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfdHJhbnNfYm9vbChlLT5yaWdodC5leHByKTsKKwkJ
YnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJCS8vIEZPTyE9biAtPiBGT08KKwkJaWYgKGUtPmxl
ZnQuc3ltLT50eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5
bWJvbF9ubykgeworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5yaWdodC5zeW0gPSBO
VUxMOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIGU7
Cit9CisKKy8qCisgKiBlMSB8fCBlMiAtPiA/CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhw
cl9qb2luX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBl
eHByICp0bXA7CisJc3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7CisKKwlpZiAoZXhwcl9lcShl
MSwgZTIpKQorCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsKKwlpZiAoZTEtPnR5cGUgIT0gRV9FUVVB
TCAmJiBlMS0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTEt
PnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOworCWlmIChlMi0+dHlwZSAhPSBFX0VRVUFM
ICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMi0+
dHlwZSAhPSBFX05PVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUxLT50eXBlID09IEVfTk9UKSB7
CisJCXRtcCA9IGUxLT5sZWZ0LmV4cHI7CisJCWlmICh0bXAtPnR5cGUgIT0gRV9FUVVBTCAmJiB0
bXAtPnR5cGUgIT0gRV9VTkVRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCXJldHVy
biBOVUxMOworCQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMSA9IGUxLT5s
ZWZ0LnN5bTsKKwlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsKKwkJaWYgKGUyLT5sZWZ0LmV4cHIt
PnR5cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMiA9IGUyLT5sZWZ0LmV4
cHItPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0yID0gZTItPmxlZnQuc3ltOworCWlmIChzeW0x
ICE9IHN5bTIpCisJCXJldHVybiBOVUxMOworCWlmIChzeW0xLT50eXBlICE9IFNfQk9PTEVBTiAm
JiBzeW0xLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCXJldHVybiBOVUxMOworCWlmIChzeW0xLT50
eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5
cGUgPT0gRV9FUVVBTCAmJgorCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYm
IGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJCSAgICAgKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKSB7CisJCQkv
LyAoYT0neScpIHx8IChhPSdtJykgLT4gKGEhPSduJykKKwkJCXJldHVybiBleHByX2FsbG9jX2Nv
bXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX25vKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0g
RV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmCisJCSAgICAoKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkgICAg
IChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X3llcykpKSB7CisJCQkvLyAoYT0neScpIHx8IChhPSduJykgLT4gKGEhPSdtJykKKwkJCXJldHVy
biBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7CisJCX0KKwkJ
aWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJgorCQkgICAg
KChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJv
bF9ubykgfHwKKwkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5yaWdo
dC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkgeworCQkJLy8gKGE9J20nKSB8fCAoYT0nbicpIC0+IChh
IT0neScpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJv
bF95ZXMpOworCQl9CisJfQorCWlmIChzeW0xLT50eXBlID09IFNfQk9PTEVBTiAmJiBzeW0xID09
IHN5bTIpIHsKKwkJaWYgKChlMS0+dHlwZSA9PSBFX05PVCAmJiBlMS0+bGVmdC5leHByLT50eXBl
ID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MKSB8fAorCQkgICAgKGUyLT50eXBl
ID09IEVfTk9UICYmIGUyLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUg
PT0gRV9TWU1CT0wpKQorCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsK
Kwl9CisKKwlpZiAoREVCVUdfRVhQUikgeworCQlwcmludGYoIm9wdGltaXplICgiKTsKKwkJZXhw
cl9mcHJpbnQoZTEsIHN0ZG91dCk7CisJCXByaW50ZigiKSB8fCAoIik7CisJCWV4cHJfZnByaW50
KGUyLCBzdGRvdXQpOworCQlwcmludGYoIik/XG4iKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisK
K3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVj
dCBleHByICplMikKK3sKKwlzdHJ1Y3QgZXhwciAqdG1wOworCXN0cnVjdCBzeW1ib2wgKnN5bTEs
ICpzeW0yOworCisJaWYgKGV4cHJfZXEoZTEsIGUyKSkKKwkJcmV0dXJuIGV4cHJfY29weShlMSk7
CisJaWYgKGUxLT50eXBlICE9IEVfRVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9VTkVRVUFMICYmIGUx
LT50eXBlICE9IEVfU1lNQk9MICYmIGUxLT50eXBlICE9IEVfTk9UKQorCQlyZXR1cm4gTlVMTDsK
KwlpZiAoZTItPnR5cGUgIT0gRV9FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTIt
PnR5cGUgIT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOwor
CWlmIChlMS0+dHlwZSA9PSBFX05PVCkgeworCQl0bXAgPSBlMS0+bGVmdC5leHByOworCQlpZiAo
dG1wLT50eXBlICE9IEVfRVFVQUwgJiYgdG1wLT50eXBlICE9IEVfVU5FUVVBTCAmJiB0bXAtPnR5
cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMSA9IHRtcC0+bGVmdC5zeW07
CisJfSBlbHNlCisJCXN5bTEgPSBlMS0+bGVmdC5zeW07CisJaWYgKGUyLT50eXBlID09IEVfTk9U
KSB7CisJCWlmIChlMi0+bGVmdC5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJcmV0dXJuIE5V
TEw7CisJCXN5bTIgPSBlMi0+bGVmdC5leHByLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMiA9
IGUyLT5sZWZ0LnN5bTsKKwlpZiAoc3ltMSAhPSBzeW0yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAo
c3ltMS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNUQVRFKQorCQly
ZXR1cm4gTlVMTDsKKworCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0g
RV9FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fAorCSAgICAoZTItPnR5
cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09
ICZzeW1ib2xfeWVzKSkKKwkJLy8gKGEpICYmIChhPSd5JykgLT4gKGE9J3knKQorCQlyZXR1cm4g
ZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsKKworCWlmICgoZTEt
PnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9ubykgfHwKKwkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50
eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pKQorCQkvLyAo
YSkgJiYgKGEhPSduJykgLT4gKGEpCisJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbChzeW0xKTsK
KworCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYm
IGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJICAgIChlMi0+dHlwZSA9PSBFX1NZ
TUJPTCAmJiBlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X21vZCkpCisJCS8vIChhKSAmJiAoYSE9J20nKSAtPiAoYT0neScpCisJCXJldHVybiBleHByX2Fs
bG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOworCisJaWYgKHN5bTEtPnR5cGUg
PT0gU19UUklTVEFURSkgeworCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9
PSBFX1VORVFVQUwpIHsKKwkJCS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICdu
JyA6IGE9J2InCisJCQlzeW0yID0gZTEtPnJpZ2h0LnN5bTsKKwkJCWlmICgoZTItPnJpZ2h0LnN5
bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpICYmIChzeW0yLT5mbGFncyAmIFNZTUJPTF9DT05TVCkp
CisJCQkJcmV0dXJuIHN5bTIgIT0gZTItPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VR
VUFMLCBzeW0xLCBzeW0yKQorCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9s
X25vKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVf
RVFVQUwpIHsKKwkJCS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICduJyA6IGE9
J2InCisJCQlzeW0yID0gZTItPnJpZ2h0LnN5bTsKKwkJCWlmICgoZTEtPnJpZ2h0LnN5bS0+Zmxh
Z3MgJiBTWU1CT0xfQ09OU1QpICYmIChzeW0yLT5mbGFncyAmIFNZTUJPTF9DT05TVCkpCisJCQkJ
cmV0dXJuIHN5bTIgIT0gZTEtPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBz
eW0xLCBzeW0yKQorCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsK
KwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVB
TCAmJgorCQkJICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9ubykgfHwKKwkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25v
ICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKSkKKwkJCS8vIChhIT0neScpICYmIChh
IT0nbicpIC0+IChhPSdtJykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3lt
MSwgJnN5bWJvbF9tb2QpOworCisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5
cGUgPT0gRV9VTkVRVUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMg
JiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkJCSAgICAoZTEtPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpCisJCQkv
LyAoYSE9J3knKSAmJiAoYSE9J20nKSAtPiAoYT0nbicpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19j
b21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfbm8pOworCisJCWlmIChlMS0+dHlwZSA9PSBFX1VO
RVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkJICAg
IChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X21vZCkpKQorCQkJLy8gKGEhPSdtJykgJiYgKGEhPSduJykgLT4gKGE9J20nKQorCQkJcmV0dXJu
IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7CisKKwkJaWYgKChl
MS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEt
PnR5cGUgPT0gRV9FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAorCQkg
ICAgKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+
cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fAorCQkgICAgKGUyLT50eXBlID09IEVfU1lNQk9M
ICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVz
KSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWlmIChERUJVR19FWFBSKSB7CisJCXByaW50Zigi
b3B0aW1pemUgKCIpOworCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpICYm
ICgiKTsKKwkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7CisJCXByaW50ZigiKT9cbiIpOworCX0K
KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGV4cHJfZWxpbWluYXRlX2R1cHMoKSBoZWxwZXIu
CisgKgorICogV2Fsa3MgdGhlIHR3byBleHByZXNzaW9uIHRyZWVzIGdpdmVuIGluICdlcDEnIGFu
ZCAnZXAyJy4gQW55IG5vZGUgdGhhdCBkb2VzCisgKiBub3QgaGF2ZSB0eXBlICd0eXBlJyAoRV9P
Ui9FX0FORCkgaXMgY29uc2lkZXJlZCBhIGxlYWYsIGFuZCBpcyBjb21wYXJlZAorICogYWdhaW5z
dCBhbGwgb3RoZXIgbGVhdmVzIHRvIGxvb2sgZm9yIHNpbXBsaWZpY2F0aW9ucy4KKyAqLworc3Rh
dGljIHZvaWQgZXhwcl9lbGltaW5hdGVfZHVwczEoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQoreworI2RlZmluZSBlMSAoKmVwMSkKKyNk
ZWZpbmUgZTIgKCplcDIpCisJc3RydWN0IGV4cHIgKnRtcDsKKworCS8qIFJlY3Vyc2UgZG93biB0
byBsZWF2ZXMgKi8KKworCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZWxpbWluYXRl
X2R1cHMxKHR5cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOworCQlleHByX2VsaW1pbmF0ZV9kdXBz
MSh0eXBlLCAmZTEtPnJpZ2h0LmV4cHIsICZlMik7CisJCXJldHVybjsKKwl9CisJaWYgKGUyLT50
eXBlID09IHR5cGUpIHsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLCAmZTItPmxl
ZnQuZXhwcik7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5l
eHByKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGUxIGFuZCBlMiBhcmUgbGVhdmVzLiBDb21wYXJl
IGFuZCBwcm9jZXNzIHRoZW0uICovCisKKwlpZiAoZTEgPT0gZTIpCisJCXJldHVybjsKKworCXN3
aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfT1I6IGNhc2UgRV9BTkQ6CisJCWV4cHJfZWxpbWlu
YXRlX2R1cHMxKGUxLT50eXBlLCAmZTEsICZlMSk7CisJZGVmYXVsdDoKKwkJOworCX0KKworCXN3
aXRjaCAodHlwZSkgeworCWNhc2UgRV9PUjoKKwkJdG1wID0gZXhwcl9qb2luX29yKGUxLCBlMik7
CisJCWlmICh0bXApIHsKKwkJCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7CisJCQllMSA9
IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQkJZTIgPSB0bXA7CisJCQl0cmFuc19j
b3VudCsrOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9BTkQ6CisJCXRtcCA9IGV4cHJfam9pbl9h
bmQoZTEsIGUyKTsKKwkJaWYgKHRtcCkgeworCQkJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUy
KTsKKwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQkJZTIgPSB0bXA7
CisJCQl0cmFuc19jb3VudCsrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9Cisj
dW5kZWYgZTEKKyN1bmRlZiBlMgorfQorCisvKgorICogUmV3cml0ZXMgJ2UnIGluLXBsYWNlIHRv
IHJlbW92ZSAoImpvaW4iKSBkdXBsaWNhdGUgYW5kIG90aGVyIHJlZHVuZGFudAorICogb3BlcmFu
ZHMuCisgKgorICogRXhhbXBsZSBzaW1wbGlmaWNhdGlvbnM6CisgKgorICoJQSB8fCBCIHx8IEEg
ICAgLT4gIEEgfHwgQgorICoJQSAmJiBCICYmIEE9eSAgLT4gIEE9eSAmJiBCCisgKgorICogUmV0
dXJucyB0aGUgZGVkdXBsaWNhdGVkIGV4cHJlc3Npb24uCisgKi8KK3N0cnVjdCBleHByICpleHBy
X2VsaW1pbmF0ZV9kdXBzKHN0cnVjdCBleHByICplKQoreworCWludCBvbGRjb3VudDsKKwlpZiAo
IWUpCisJCXJldHVybiBlOworCisJb2xkY291bnQgPSB0cmFuc19jb3VudDsKKwl3aGlsZSAoMSkg
eworCQl0cmFuc19jb3VudCA9IDA7CisJCXN3aXRjaCAoZS0+dHlwZSkgeworCQljYXNlIEVfT1I6
IGNhc2UgRV9BTkQ6CisJCQlleHByX2VsaW1pbmF0ZV9kdXBzMShlLT50eXBlLCAmZSwgJmUpOwor
CQlkZWZhdWx0OgorCQkJOworCQl9CisJCWlmICghdHJhbnNfY291bnQpCisJCQkvKiBObyBzaW1w
bGlmaWNhdGlvbnMgZG9uZSBpbiB0aGlzIHBhc3MuIFdlJ3JlIGRvbmUgKi8KKwkJCWJyZWFrOwor
CQllID0gZXhwcl9lbGltaW5hdGVfeW4oZSk7CisJfQorCXRyYW5zX2NvdW50ID0gb2xkY291bnQ7
CisJcmV0dXJuIGU7Cit9CisKKy8qCisgKiBQZXJmb3JtcyB2YXJpb3VzIHNpbXBsaWZpY2F0aW9u
cyBpbnZvbHZpbmcgbG9naWNhbCBvcGVyYXRvcnMgYW5kCisgKiBjb21wYXJpc29ucy4KKyAqCisg
KiBBbGxvY2F0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXhwcmVzc2lvbi4KKyAqLworc3RydWN0IGV4
cHIgKmV4cHJfdHJhbnNmb3JtKHN0cnVjdCBleHByICplKQoreworCXN0cnVjdCBleHByICp0bXA7
CisKKwlpZiAoIWUpCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2Ug
RV9FUVVBTDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNl
IEVfTFRIOgorCWNhc2UgRV9VTkVRVUFMOgorCWNhc2UgRV9TWU1CT0w6CisJY2FzZSBFX0xJU1Q6
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfdHJhbnNmb3JtKGUt
PmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX3RyYW5zZm9ybShlLT5yaWdodC5l
eHByKTsKKwl9CisKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJCWlmIChl
LT5sZWZ0LnN5bS0+dHlwZSAhPSBTX0JPT0xFQU4pCisJCQlicmVhazsKKwkJaWYgKGUtPnJpZ2h0
LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQllLT50eXBlID0gRV9OT1Q7CisJCQllLT5sZWZ0LmV4
cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5bSk7CisJCQllLT5yaWdodC5zeW0gPSBO
VUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkg
eworCQkJcHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVzdCBmb3Jj
ZWQgdG8gJ24nXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCQllLT50eXBlID0gRV9TWU1CT0w7
CisJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOwor
CQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJ
ZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJyZWFrOwor
CQl9CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPnR5cGUg
IT0gU19CT09MRUFOKQorCQkJYnJlYWs7CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9u
bykgeworCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJ
CWJyZWFrOworCQl9CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsKKwkJCXBy
aW50ZigiYm9vbGVhbiBzeW1ib2wgJXMgdGVzdGVkIGZvciAnbSc/IHRlc3QgZm9yY2VkIHRvICd5
J1xuIiwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+
bGVmdC5zeW0gPSAmc3ltYm9sX3llczsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVh
azsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQllLT50eXBl
ID0gRV9OT1Q7CisJCQllLT5sZWZ0LmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5
bSk7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJ
Y2FzZSBFX05PVDoKKwkJc3dpdGNoIChlLT5sZWZ0LmV4cHItPnR5cGUpIHsKKwkJY2FzZSBFX05P
VDoKKwkJCS8vICEhYSAtPiBhCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHItPmxlZnQuZXhwcjsKKwkJ
CWZyZWUoZS0+bGVmdC5leHByKTsKKwkJCWZyZWUoZSk7CisJCQllID0gdG1wOworCQkJZSA9IGV4
cHJfdHJhbnNmb3JtKGUpOworCQkJYnJlYWs7CisJCWNhc2UgRV9FUVVBTDoKKwkJY2FzZSBFX1VO
RVFVQUw6CisJCQkvLyAhYT0neCcgLT4gYSE9J3gnCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJ
CQlmcmVlKGUpOworCQkJZSA9IHRtcDsKKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfRVFVQUwg
PyBFX1VORVFVQUwgOiBFX0VRVUFMOworCQkJYnJlYWs7CisJCWNhc2UgRV9MRVE6CisJCWNhc2Ug
RV9HRVE6CisJCQkvLyAhYTw9J3gnIC0+IGE+J3gnCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJ
CQlmcmVlKGUpOworCQkJZSA9IHRtcDsKKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfTEVRID8g
RV9HVEggOiBFX0xUSDsKKwkJCWJyZWFrOworCQljYXNlIEVfTFRIOgorCQljYXNlIEVfR1RIOgor
CQkJLy8gIWE8J3gnIC0+IGE+PSd4JworCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJZnJlZShl
KTsKKwkJCWUgPSB0bXA7CisJCQllLT50eXBlID0gZS0+dHlwZSA9PSBFX0xUSCA/IEVfR0VRIDog
RV9MRVE7CisJCQlicmVhazsKKwkJY2FzZSBFX09SOgorCQkJLy8gIShhIHx8IGIpIC0+ICFhICYm
ICFiCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQllLT50eXBlID0gRV9BTkQ7CisJCQllLT5y
aWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIHRtcC0+cmlnaHQuZXhwcik7CisJCQl0
bXAtPnR5cGUgPSBFX05PVDsKKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQllID0gZXhw
cl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX0FORDoKKwkJCS8vICEoYSAmJiBi
KSAtPiAhYSB8fCAhYgorCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJZS0+dHlwZSA9IEVfT1I7
CisJCQllLT5yaWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIHRtcC0+cmlnaHQuZXhw
cik7CisJCQl0bXAtPnR5cGUgPSBFX05PVDsKKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7CisJ
CQllID0gZXhwcl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX1NZTUJPTDoKKwkJ
CWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQkJLy8gISd5
JyAtPiAnbicKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJZnJlZShlKTsKKwkJCQllID0g
dG1wOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xf
bm87CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAm
c3ltYm9sX21vZCkgeworCQkJCS8vICEnbScgLT4gJ20nCisJCQkJdG1wID0gZS0+bGVmdC5leHBy
OworCQkJCWZyZWUoZSk7CisJCQkJZSA9IHRtcDsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJ
CQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX21vZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChl
LT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQkvLyAhJ24nIC0+ICd5
JworCQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQlmcmVlKGUpOworCQkJCWUgPSB0bXA7CisJ
CQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJ
CQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCQlicmVh
azsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiBlOworfQorCitpbnQgZXhwcl9jb250YWlu
c19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCWlmICgh
ZGVwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZGVwLT50eXBlKSB7CisJY2FzZSBFX0FORDoK
KwljYXNlIEVfT1I6CisJCXJldHVybiBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAtPmxlZnQuZXhw
ciwgc3ltKSB8fAorCQkgICAgICAgZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5yaWdodC5leHBy
LCBzeW0pOworCWNhc2UgRV9TWU1CT0w6CisJCXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bTsK
KwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgorCWNhc2UgRV9MRVE6
CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0g
PT0gc3ltIHx8CisJCSAgICAgICBkZXAtPnJpZ2h0LnN5bSA9PSBzeW07CisJY2FzZSBFX05PVDoK
KwkJcmV0dXJuIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+bGVmdC5leHByLCBzeW0pOworCWRl
ZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgZXhwcl9kZXBlbmRzX3N5bWJv
bChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJaWYgKCFkZXApCisJ
CXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAoZGVwLT50eXBlKSB7CisJY2FzZSBFX0FORDoKKwkJ
cmV0dXJuIGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSkgfHwKKwkJICAg
ICAgIGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLT5yaWdodC5leHByLCBzeW0pOworCWNhc2UgRV9T
WU1CT0w6CisJCXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bTsKKwljYXNlIEVfRVFVQUw6CisJ
CWlmIChkZXAtPmxlZnQuc3ltID09IHN5bSkgeworCQkJaWYgKGRlcC0+cmlnaHQuc3ltID09ICZz
eW1ib2xfeWVzIHx8IGRlcC0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKQorCQkJCXJldHVybiB0
cnVlOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlpZiAoZGVwLT5sZWZ0LnN5
bSA9PSBzeW0pIHsKKwkJCWlmIChkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKQorCQkJCXJl
dHVybiB0cnVlOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisgCXJldHVybiBm
YWxzZTsKK30KKworLyoKKyAqIEluc2VydHMgZXhwbGljaXQgY29tcGFyaXNvbnMgb2YgdHlwZSAn
dHlwZScgdG8gc3ltYm9sICdzeW0nIGludG8gdGhlCisgKiBleHByZXNzaW9uICdlJy4KKyAqCisg
KiBFeGFtcGxlcyB0cmFuc2Zvcm1hdGlvbnMgZm9yIHR5cGUgPT0gRV9VTkVRVUFMLCBzeW0gPT0g
JnN5bWJvbF9ubzoKKyAqCisgKglBICAgICAgICAgICAgICAtPiAgQSE9bgorICoJIUEgICAgICAg
ICAgICAgLT4gIEE9bgorICoJQSAmJiBCICAgICAgICAgLT4gICEoQT1uIHx8IEI9bikKKyAqCUEg
fHwgQiAgICAgICAgIC0+ICAhKEE9biAmJiBCPW4pCisgKglBICYmIChCIHx8IEMpICAtPiAgIShB
PW4gfHwgKEI9biAmJiBDPW4pKQorICoKKyAqIEFsbG9jYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBl
eHByZXNzaW9uLgorICovCitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBl
eHByICplLCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3Ry
dWN0IGV4cHIgKmUxLCAqZTI7CisKKwlpZiAoIWUpIHsKKwkJZSA9IGV4cHJfYWxsb2Nfc3ltYm9s
KHN5bSk7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBleHByX2FsbG9jX29uZShF
X05PVCwgZSk7CisJCXJldHVybiBlOworCX0KKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVf
QU5EOgorCQllMSA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIEVfRVFVQUwsIHN5
bSk7CisJCWUyID0gZXhwcl90cmFuc19jb21wYXJlKGUtPnJpZ2h0LmV4cHIsIEVfRVFVQUwsIHN5
bSk7CisJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpCisJCQllID0gZXhwcl9hbGxvY190d28oRV9B
TkQsIGUxLCBlMik7CisJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCWUgPSBleHByX2FsbG9j
X3R3byhFX09SLCBlMSwgZTIpOworCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpCisJCQllID0gZXhw
cl9hbGxvY19vbmUoRV9OT1QsIGUpOworCQlyZXR1cm4gZTsKKwljYXNlIEVfT1I6CisJCWUxID0g
ZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJZTIgPSBl
eHByX3RyYW5zX2NvbXBhcmUoZS0+cmlnaHQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJaWYgKHN5
bSA9PSAmc3ltYm9sX3llcykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX09SLCBlMSwgZTIpOwor
CQlpZiAoc3ltID09ICZzeW1ib2xfbm8pCisJCQllID0gZXhwcl9hbGxvY190d28oRV9BTkQsIGUx
LCBlMik7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBleHByX2FsbG9jX29uZShF
X05PVCwgZSk7CisJCXJldHVybiBlOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBleHByX3RyYW5z
X2NvbXBhcmUoZS0+bGVmdC5leHByLCB0eXBlID09IEVfRVFVQUwgPyBFX1VORVFVQUwgOiBFX0VR
VUFMLCBzeW0pOworCWNhc2UgRV9VTkVRVUFMOgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX0xFUToK
KwljYXNlIEVfR1RIOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0VRVUFMOgorCQlpZiAodHlwZSA9
PSBFX0VRVUFMKSB7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJCXJldHVybiBleHBy
X2NvcHkoZSk7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfbW9kKQorCQkJCXJldHVybiBleHByX2Fs
bG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCQly
ZXR1cm4gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlKSk7CisJCX0gZWxzZSB7CisJ
CQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJCXJldHVybiBleHByX2FsbG9jX29uZShFX05P
VCwgZXhwcl9jb3B5KGUpKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpCisJCQkJcmV0dXJu
IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9u
bykKKwkJCQlyZXR1cm4gZXhwcl9jb3B5KGUpOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9TWU1C
T0w6CisJCXJldHVybiBleHByX2FsbG9jX2NvbXAodHlwZSwgZS0+bGVmdC5zeW0sIHN5bSk7CisJ
Y2FzZSBFX0xJU1Q6CisJY2FzZSBFX1JBTkdFOgorCWNhc2UgRV9OT05FOgorCQkvKiBwYW5pYyAq
LzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2VudW0gc3RyaW5nX3ZhbHVlX2tpbmQgeworCWtf
c3RyaW5nLAorCWtfc2lnbmVkLAorCWtfdW5zaWduZWQsCit9OworCit1bmlvbiBzdHJpbmdfdmFs
dWUgeworCXVuc2lnbmVkIGxvbmcgbG9uZyB1OworCXNpZ25lZCBsb25nIGxvbmcgczsKK307CisK
K3N0YXRpYyBlbnVtIHN0cmluZ192YWx1ZV9raW5kIGV4cHJfcGFyc2Vfc3RyaW5nKGNvbnN0IGNo
YXIgKnN0ciwKKwkJCQkJCWVudW0gc3ltYm9sX3R5cGUgdHlwZSwKKwkJCQkJCXVuaW9uIHN0cmlu
Z192YWx1ZSAqdmFsKQoreworCWNoYXIgKnRhaWw7CisJZW51bSBzdHJpbmdfdmFsdWVfa2luZCBr
aW5kOworCisJZXJybm8gPSAwOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgor
CWNhc2UgU19UUklTVEFURToKKwkJdmFsLT5zID0gIXN0cmNtcChzdHIsICJuIikgPyAwIDoKKwkJ
CSAhc3RyY21wKHN0ciwgIm0iKSA/IDEgOgorCQkJICFzdHJjbXAoc3RyLCAieSIpID8gMiA6IC0x
OworCQlyZXR1cm4ga19zaWduZWQ7CisJY2FzZSBTX0lOVDoKKwkJdmFsLT5zID0gc3RydG9sbChz
dHIsICZ0YWlsLCAxMCk7CisJCWtpbmQgPSBrX3NpZ25lZDsKKwkJYnJlYWs7CisJY2FzZSBTX0hF
WDoKKwkJdmFsLT51ID0gc3RydG91bGwoc3RyLCAmdGFpbCwgMTYpOworCQlraW5kID0ga191bnNp
Z25lZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsLT5zID0gc3RydG9sbChzdHIsICZ0YWls
LCAwKTsKKwkJa2luZCA9IGtfc2lnbmVkOworCQlicmVhazsKKwl9CisJcmV0dXJuICFlcnJubyAm
JiAhKnRhaWwgJiYgdGFpbCA+IHN0ciAmJiBpc3hkaWdpdCh0YWlsWy0xXSkKKwkgICAgICAgPyBr
aW5kIDoga19zdHJpbmc7Cit9CisKK3RyaXN0YXRlIGV4cHJfY2FsY192YWx1ZShzdHJ1Y3QgZXhw
ciAqZSkKK3sKKwl0cmlzdGF0ZSB2YWwxLCB2YWwyOworCWNvbnN0IGNoYXIgKnN0cjEsICpzdHIy
OworCWVudW0gc3RyaW5nX3ZhbHVlX2tpbmQgazEgPSBrX3N0cmluZywgazIgPSBrX3N0cmluZzsK
Kwl1bmlvbiBzdHJpbmdfdmFsdWUgbHZhbCA9IHt9LCBydmFsID0ge307CisJaW50IHJlczsKKwor
CWlmICghZSkKKwkJcmV0dXJuIHllczsKKworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9T
WU1CT0w6CisJCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsKKwkJcmV0dXJuIGUtPmxlZnQu
c3ltLT5jdXJyLnRyaTsKKwljYXNlIEVfQU5EOgorCQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUt
PmxlZnQuZXhwcik7CisJCXZhbDIgPSBleHByX2NhbGNfdmFsdWUoZS0+cmlnaHQuZXhwcik7CisJ
CXJldHVybiBFWFBSX0FORCh2YWwxLCB2YWwyKTsKKwljYXNlIEVfT1I6CisJCXZhbDEgPSBleHBy
X2NhbGNfdmFsdWUoZS0+bGVmdC5leHByKTsKKwkJdmFsMiA9IGV4cHJfY2FsY192YWx1ZShlLT5y
aWdodC5leHByKTsKKwkJcmV0dXJuIEVYUFJfT1IodmFsMSwgdmFsMik7CisJY2FzZSBFX05PVDoK
KwkJdmFsMSA9IGV4cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOworCQlyZXR1cm4gRVhQUl9O
T1QodmFsMSk7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0dUSDoKKwlj
YXNlIEVfTEVROgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX1VORVFVQUw6CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiAlZD9cbiIsIGUtPnR5cGUpOworCQly
ZXR1cm4gbm87CisJfQorCisJc3ltX2NhbGNfdmFsdWUoZS0+bGVmdC5zeW0pOworCXN5bV9jYWxj
X3ZhbHVlKGUtPnJpZ2h0LnN5bSk7CisJc3RyMSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPmxl
ZnQuc3ltKTsKKwlzdHIyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoZS0+cmlnaHQuc3ltKTsKKwor
CWlmIChlLT5sZWZ0LnN5bS0+dHlwZSAhPSBTX1NUUklORyB8fCBlLT5yaWdodC5zeW0tPnR5cGUg
IT0gU19TVFJJTkcpIHsKKwkJazEgPSBleHByX3BhcnNlX3N0cmluZyhzdHIxLCBlLT5sZWZ0LnN5
bS0+dHlwZSwgJmx2YWwpOworCQlrMiA9IGV4cHJfcGFyc2Vfc3RyaW5nKHN0cjIsIGUtPnJpZ2h0
LnN5bS0+dHlwZSwgJnJ2YWwpOworCX0KKworCWlmIChrMSA9PSBrX3N0cmluZyB8fCBrMiA9PSBr
X3N0cmluZykKKwkJcmVzID0gc3RyY21wKHN0cjEsIHN0cjIpOworCWVsc2UgaWYgKGsxID09IGtf
dW5zaWduZWQgfHwgazIgPT0ga191bnNpZ25lZCkKKwkJcmVzID0gKGx2YWwudSA+IHJ2YWwudSkg
LSAobHZhbC51IDwgcnZhbC51KTsKKwllbHNlIC8qIGlmIChrMSA9PSBrX3NpZ25lZCAmJiBrMiA9
PSBrX3NpZ25lZCkgKi8KKwkJcmVzID0gKGx2YWwucyA+IHJ2YWwucykgLSAobHZhbC5zIDwgcnZh
bC5zKTsKKworCXN3aXRjaChlLT50eXBlKSB7CisJY2FzZSBFX0VRVUFMOgorCQlyZXR1cm4gcmVz
ID8gbm8gOiB5ZXM7CisJY2FzZSBFX0dFUToKKwkJcmV0dXJuIHJlcyA+PSAwID8geWVzIDogbm87
CisJY2FzZSBFX0dUSDoKKwkJcmV0dXJuIHJlcyA+IDAgPyB5ZXMgOiBubzsKKwljYXNlIEVfTEVR
OgorCQlyZXR1cm4gcmVzIDw9IDAgPyB5ZXMgOiBubzsKKwljYXNlIEVfTFRIOgorCQlyZXR1cm4g
cmVzIDwgMCA/IHllcyA6IG5vOworCWNhc2UgRV9VTkVRVUFMOgorCQlyZXR1cm4gcmVzID8geWVz
IDogbm87CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJleHByX2NhbGNfdmFsdWU6IHJlbGF0aW9uICVk
P1xuIiwgZS0+dHlwZSk7CisJCXJldHVybiBubzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXhwcl9j
b21wYXJlX3R5cGUoZW51bSBleHByX3R5cGUgdDEsIGVudW0gZXhwcl90eXBlIHQyKQoreworCWlm
ICh0MSA9PSB0MikKKwkJcmV0dXJuIDA7CisJc3dpdGNoICh0MSkgeworCWNhc2UgRV9MRVE6CisJ
Y2FzZSBFX0xUSDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJCWlmICh0MiA9PSBFX0VR
VUFMIHx8IHQyID09IEVfVU5FUVVBTCkKKwkJCXJldHVybiAxOworCWNhc2UgRV9FUVVBTDoKKwlj
YXNlIEVfVU5FUVVBTDoKKwkJaWYgKHQyID09IEVfTk9UKQorCQkJcmV0dXJuIDE7CisJY2FzZSBF
X05PVDoKKwkJaWYgKHQyID09IEVfQU5EKQorCQkJcmV0dXJuIDE7CisJY2FzZSBFX0FORDoKKwkJ
aWYgKHQyID09IEVfT1IpCisJCQlyZXR1cm4gMTsKKwljYXNlIEVfT1I6CisJCWlmICh0MiA9PSBF
X0xJU1QpCisJCQlyZXR1cm4gMTsKKwljYXNlIEVfTElTVDoKKwkJaWYgKHQyID09IDApCisJCQly
ZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCXByaW50ZigiWyVkZ3QlZD9d
IiwgdDEsIHQyKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBleHByX3ByaW50KHN0cnVjdCBleHBy
ICplLAorCQl2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICop
LAorCQl2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKQoreworCWlmICghZSkgeworCQlmbihkYXRh
LCBOVUxMLCAieSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGV4cHJfY29tcGFyZV90eXBlKHBy
ZXZ0b2tlbiwgZS0+dHlwZSkgPiAwKQorCQlmbihkYXRhLCBOVUxMLCAiKCIpOworCXN3aXRjaCAo
ZS0+dHlwZSkgeworCWNhc2UgRV9TWU1CT0w6CisJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkKKwkJ
CWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCWZu
KGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlicmVhazsKKwljYXNlIEVfTk9UOgorCQlmbihk
YXRhLCBOVUxMLCAiISIpOworCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIEVf
Tk9UKTsKKwkJYnJlYWs7CisJY2FzZSBFX0VRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPm5hbWUp
CisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQllbHNlCisJ
CQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4oZGF0YSwgTlVMTCwgIj0iKTsKKwkJ
Zm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOworCQlicmVhazsKKwlj
YXNlIEVfTEVROgorCWNhc2UgRV9MVEg6CisJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkKKwkJCWZu
KGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCWZuKGRh
dGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlmbihkYXRhLCBOVUxMLCBlLT50eXBlID09IEVfTEVR
ID8gIjw9IiA6ICI8Iik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5u
YW1lKTsKKwkJYnJlYWs7CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgorCQlpZiAoZS0+bGVm
dC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUp
OworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4oZGF0YSwgTlVM
TCwgZS0+dHlwZSA9PSBFX0dFUSA/ICI+PSIgOiAiPiIpOworCQlmbihkYXRhLCBlLT5yaWdodC5z
eW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlp
ZiAoZS0+bGVmdC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5z
eW0tPm5hbWUpOworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4o
ZGF0YSwgTlVMTCwgIiE9Iik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3lt
LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBFX09SOgorCQlleHByX3ByaW50KGUtPmxlZnQuZXhw
ciwgZm4sIGRhdGEsIEVfT1IpOworCQlmbihkYXRhLCBOVUxMLCAiIHx8ICIpOworCQlleHByX3By
aW50KGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsKKwkJYnJlYWs7CisJY2FzZSBFX0FO
RDoKKwkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX0FORCk7CisJCWZuKGRh
dGEsIE5VTEwsICIgJiYgIik7CisJCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEs
IEVfQU5EKTsKKwkJYnJlYWs7CisJY2FzZSBFX0xJU1Q6CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5
bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKKwkJaWYgKGUtPmxlZnQuZXhwcikgeworCQkJZm4oZGF0
YSwgTlVMTCwgIiBeICIpOworCQkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBF
X0xJU1QpOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9SQU5HRToKKwkJZm4oZGF0YSwgTlVMTCwg
IlsiKTsKKwkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZm4o
ZGF0YSwgTlVMTCwgIiAiKTsKKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0t
Pm5hbWUpOworCQlmbihkYXRhLCBOVUxMLCAiXSIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCSAg
eworCQljaGFyIGJ1ZlszMl07CisJCXNwcmludGYoYnVmLCAiPHVua25vd24gdHlwZSAlZD4iLCBl
LT50eXBlKTsKKwkJZm4oZGF0YSwgTlVMTCwgYnVmKTsKKwkJYnJlYWs7CisJICB9CisJfQorCWlm
IChleHByX2NvbXBhcmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkKKwkJZm4oZGF0YSwg
TlVMTCwgIikiKTsKK30KKworc3RhdGljIHZvaWQgZXhwcl9wcmludF9maWxlX2hlbHBlcih2b2lk
ICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl4ZndyaXRl
KHN0ciwgc3RybGVuKHN0ciksIDEsIGRhdGEpOworfQorCit2b2lkIGV4cHJfZnByaW50KHN0cnVj
dCBleHByICplLCBGSUxFICpvdXQpCit7CisJZXhwcl9wcmludChlLCBleHByX3ByaW50X2ZpbGVf
aGVscGVyLCBvdXQsIEVfTk9ORSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cHJfcHJpbnRfZ3N0cl9o
ZWxwZXIodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7
CisJc3RydWN0IGdzdHIgKmdzID0gKHN0cnVjdCBnc3RyKilkYXRhOworCWNvbnN0IGNoYXIgKnN5
bV9zdHIgPSBOVUxMOworCisJaWYgKHN5bSkKKwkJc3ltX3N0ciA9IHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKHN5bSk7CisKKwlpZiAoZ3MtPm1heF93aWR0aCkgeworCQl1bnNpZ25lZCBleHRyYV9sZW5n
dGggPSBzdHJsZW4oc3RyKTsKKwkJY29uc3QgY2hhciAqbGFzdF9jciA9IHN0cnJjaHIoZ3MtPnMs
ICdcbicpOworCQl1bnNpZ25lZCBsYXN0X2xpbmVfbGVuZ3RoOworCisJCWlmIChzeW1fc3RyKQor
CQkJZXh0cmFfbGVuZ3RoICs9IDQgKyBzdHJsZW4oc3ltX3N0cik7CisKKwkJaWYgKCFsYXN0X2Ny
KQorCQkJbGFzdF9jciA9IGdzLT5zOworCisJCWxhc3RfbGluZV9sZW5ndGggPSBzdHJsZW4oZ3Mt
PnMpIC0gKGxhc3RfY3IgLSBncy0+cyk7CisKKwkJaWYgKChsYXN0X2xpbmVfbGVuZ3RoICsgZXh0
cmFfbGVuZ3RoKSA+IGdzLT5tYXhfd2lkdGgpCisJCQlzdHJfYXBwZW5kKGdzLCAiXFxcbiIpOwor
CX0KKworCXN0cl9hcHBlbmQoZ3MsIHN0cik7CisJaWYgKHN5bSAmJiBzeW0tPnR5cGUgIT0gU19V
TktOT1dOKQorCQlzdHJfcHJpbnRmKGdzLCAiIFs9JXNdIiwgc3ltX3N0cik7Cit9CisKK3ZvaWQg
ZXhwcl9nc3RyX3ByaW50KHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJZXhw
cl9wcmludChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywgRV9OT05FKTsKK30KKworLyoK
KyAqIFRyYW5zZm9ybSB0aGUgdG9wIGxldmVsICJ8fCIgdG9rZW5zIGludG8gbmV3bGluZXMgYW5k
IHByZXBlbmQgZWFjaAorICogbGluZSB3aXRoIGEgbWludXMuIFRoaXMgbWFrZXMgZXhwcmVzc2lv
bnMgbXVjaCBlYXNpZXIgdG8gcmVhZC4KKyAqIFN1aXRhYmxlIGZvciByZXZlcnNlIGRlcGVuZGVu
Y3kgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyB2b2lkIGV4cHJfcHJpbnRfcmV2ZGVwKHN0cnVj
dCBleHByICplLAorCQkJICAgICAgdm9pZCAoKmZuKSh2b2lkICosIHN0cnVjdCBzeW1ib2wgKiwg
Y29uc3QgY2hhciAqKSwKKwkJCSAgICAgIHZvaWQgKmRhdGEsIHRyaXN0YXRlIHByX3R5cGUsIGNv
bnN0IGNoYXIgKip0aXRsZSkKK3sKKwlpZiAoZS0+dHlwZSA9PSBFX09SKSB7CisJCWV4cHJfcHJp
bnRfcmV2ZGVwKGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIHByX3R5cGUsIHRpdGxlKTsKKwkJZXhw
cl9wcmludF9yZXZkZXAoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEsIHByX3R5cGUsIHRpdGxlKTsK
Kwl9IGVsc2UgaWYgKGV4cHJfY2FsY192YWx1ZShlKSA9PSBwcl90eXBlKSB7CisJCWlmICgqdGl0
bGUpIHsKKwkJCWZuKGRhdGEsIE5VTEwsICp0aXRsZSk7CisJCQkqdGl0bGUgPSBOVUxMOworCQl9
CisKKwkJZm4oZGF0YSwgTlVMTCwgIiAgLSAiKTsKKwkJZXhwcl9wcmludChlLCBmbiwgZGF0YSwg
RV9OT05FKTsKKwkJZm4oZGF0YSwgTlVMTCwgIlxuIik7CisJfQorfQorCit2b2lkIGV4cHJfZ3N0
cl9wcmludF9yZXZkZXAoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBnc3RyICpncywKKwkJCSAgICB0
cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBjaGFyICp0aXRsZSkKK3sKKwlleHByX3ByaW50X3JldmRl
cChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywgcHJfdHlwZSwgJnRpdGxlKTsKK30KZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9leHByLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkZTY1YgotLS0g
L2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oCkBAIC0wLDAgKzEsMzMx
IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLwor
CisjaWZuZGVmIEVYUFJfSAorI2RlZmluZSBFWFBSX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitl
eHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlICJsaXN0LmgiCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8
c3RkYm9vbC5oPgorI2VuZGlmCisKK3N0cnVjdCBmaWxlIHsKKwlzdHJ1Y3QgZmlsZSAqbmV4dDsK
KwlzdHJ1Y3QgZmlsZSAqcGFyZW50OworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGxpbmVubzsK
K307CisKK3R5cGVkZWYgZW51bSB0cmlzdGF0ZSB7CisJbm8sIG1vZCwgeWVzCit9IHRyaXN0YXRl
OworCitlbnVtIGV4cHJfdHlwZSB7CisJRV9OT05FLCBFX09SLCBFX0FORCwgRV9OT1QsCisJRV9F
UVVBTCwgRV9VTkVRVUFMLCBFX0xUSCwgRV9MRVEsIEVfR1RILCBFX0dFUSwKKwlFX0xJU1QsIEVf
U1lNQk9MLCBFX1JBTkdFCit9OworCit1bmlvbiBleHByX2RhdGEgeworCXN0cnVjdCBleHByICpl
eHByOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKK307CisKK3N0cnVjdCBleHByIHsKKwllbnVtIGV4
cHJfdHlwZSB0eXBlOworCXVuaW9uIGV4cHJfZGF0YSBsZWZ0LCByaWdodDsKK307CisKKyNkZWZp
bmUgRVhQUl9PUihkZXAxLCBkZXAyKQkoKChkZXAxKT4oZGVwMikpPyhkZXAxKTooZGVwMikpCisj
ZGVmaW5lIEVYUFJfQU5EKGRlcDEsIGRlcDIpCSgoKGRlcDEpPChkZXAyKSk/KGRlcDEpOihkZXAy
KSkKKyNkZWZpbmUgRVhQUl9OT1QoZGVwKQkJKDItKGRlcCkpCisKKyNkZWZpbmUgZXhwcl9saXN0
X2Zvcl9lYWNoX3N5bShsLCBlLCBzKSBcCisJZm9yIChlID0gKGwpOyBlICYmIChzID0gZS0+cmln
aHQuc3ltKTsgZSA9IGUtPmxlZnQuZXhwcikKKworc3RydWN0IGV4cHJfdmFsdWUgeworCXN0cnVj
dCBleHByICpleHByOworCXRyaXN0YXRlIHRyaTsKK307CisKK3N0cnVjdCBzeW1ib2xfdmFsdWUg
eworCXZvaWQgKnZhbDsKKwl0cmlzdGF0ZSB0cmk7Cit9OworCitlbnVtIHN5bWJvbF90eXBlIHsK
KwlTX1VOS05PV04sIFNfQk9PTEVBTiwgU19UUklTVEFURSwgU19JTlQsIFNfSEVYLCBTX1NUUklO
RworfTsKKworLyogZW51bSB2YWx1ZXMgYXJlIHVzZWQgYXMgaW5kZXggdG8gc3ltYm9sLmRlZltd
ICovCitlbnVtIHsKKwlTX0RFRl9VU0VSLAkJLyogbWFpbiB1c2VyIHZhbHVlICovCisJU19ERUZf
QVVUTywJCS8qIHZhbHVlcyByZWFkIGZyb20gYXV0by5jb25mICovCisJU19ERUZfREVGMywJCS8q
IFJlc2VydmVkIGZvciBVSSB1c2FnZSAqLworCVNfREVGX0RFRjQsCQkvKiBSZXNlcnZlZCBmb3Ig
VUkgdXNhZ2UgKi8KKwlTX0RFRl9DT1VOVAorfTsKKworLyoKKyAqIFJlcHJlc2VudHMgYSBjb25m
aWd1cmF0aW9uIHN5bWJvbC4KKyAqCisgKiBDaG9pY2VzIGFyZSByZXByZXNlbnRlZCBhcyBhIHNw
ZWNpYWwga2luZCBvZiBzeW1ib2wgYW5kIGhhdmUgdGhlCisgKiBTWU1CT0xfQ0hPSUNFIGJpdCBz
ZXQgaW4gJ2ZsYWdzJy4KKyAqLworc3RydWN0IHN5bWJvbCB7CisJLyogVGhlIG5leHQgc3ltYm9s
IGluIHRoZSBzYW1lIGJ1Y2tldCBpbiB0aGUgc3ltYm9sIGhhc2ggdGFibGUgKi8KKwlzdHJ1Y3Qg
c3ltYm9sICpuZXh0OworCisJLyogVGhlIG5hbWUgb2YgdGhlIHN5bWJvbCwgZS5nLiAiRk9PIiBm
b3IgJ2NvbmZpZyBGT08nICovCisJY2hhciAqbmFtZTsKKworCS8qIFNfQk9PTEVBTiwgU19UUklT
VEFURSwgLi4uICovCisJZW51bSBzeW1ib2xfdHlwZSB0eXBlOworCisJLyoKKwkgKiBUaGUgY2Fs
Y3VsYXRlZCB2YWx1ZSBvZiB0aGUgc3ltYm9sLiBUaGUgU1lNQk9MX1ZBTElEIGJpdCBpcyBzZXQg
aW4KKwkgKiAnZmxhZ3MnIHdoZW4gdGhpcyBpcyB1cCB0byBkYXRlLiBOb3RlIHRoYXQgdGhpcyB2
YWx1ZSBtaWdodCBkaWZmZXIKKwkgKiBmcm9tIHRoZSB1c2VyIHZhbHVlIHNldCBpbiBlLmcuIGEg
LmNvbmZpZyBmaWxlLCBkdWUgdG8gdmlzaWJpbGl0eS4KKwkgKi8KKwlzdHJ1Y3Qgc3ltYm9sX3Zh
bHVlIGN1cnI7CisKKwkvKgorCSAqIFZhbHVlcyBmb3IgdGhlIHN5bWJvbCBwcm92aWRlZCBmcm9t
IG91dHNpZGUuIGRlZltTX0RFRl9VU0VSXSBob2xkcworCSAqIHRoZSAuY29uZmlnIHZhbHVlLgor
CSAqLworCXN0cnVjdCBzeW1ib2xfdmFsdWUgZGVmW1NfREVGX0NPVU5UXTsKKworCS8qCisJICog
QW4gdXBwZXIgYm91bmQgb24gdGhlIHRyaXN0YXRlIHZhbHVlIHRoZSB1c2VyIGNhbiBzZXQgZm9y
IHRoZSBzeW1ib2wKKwkgKiBpZiBpdCBpcyBhIGJvb2xlYW4gb3IgdHJpc3RhdGUuIENhbGN1bGF0
ZWQgZnJvbSBwcm9tcHQgZGVwZW5kZW5jaWVzLAorCSAqIHdoaWNoIGFsc28gaW5oZXJpdCBkZXBl
bmRlbmNpZXMgZnJvbSBlbmNsb3NpbmcgbWVudXMsIGNob2ljZXMsIGFuZAorCSAqIGlmcy4gSWYg
J24nLCB0aGUgdXNlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuCisJICoKKwkgKiBTeW1ib2xzIGxh
Y2tpbmcgcHJvbXB0cyBhbHdheXMgaGF2ZSB2aXNpYmlsaXR5ICduJy4KKwkgKi8KKwl0cmlzdGF0
ZSB2aXNpYmxlOworCisJLyogU1lNQk9MXyogZmxhZ3MgKi8KKwlpbnQgZmxhZ3M7CisKKwkvKiBM
aXN0IG9mIHByb3BlcnRpZXMuIFNlZSBwcm9wX3R5cGUuICovCisJc3RydWN0IHByb3BlcnR5ICpw
cm9wOworCisJLyogRGVwZW5kZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9pY2VzLCBh
bmQgaWZzICovCisJc3RydWN0IGV4cHJfdmFsdWUgZGlyX2RlcDsKKworCS8qIFJldmVyc2UgZGVw
ZW5kZW5jaWVzIHRocm91Z2ggYmVpbmcgc2VsZWN0ZWQgYnkgb3RoZXIgc3ltYm9scyAqLworCXN0
cnVjdCBleHByX3ZhbHVlIHJldl9kZXA7CisKKwkvKgorCSAqICJXZWFrIiByZXZlcnNlIGRlcGVu
ZGVuY2llcyB0aHJvdWdoIGJlaW5nIGltcGxpZWQgYnkgb3RoZXIgc3ltYm9scworCSAqLworCXN0
cnVjdCBleHByX3ZhbHVlIGltcGxpZWQ7Cit9OworCisjZGVmaW5lIGZvcl9hbGxfc3ltYm9scyhp
LCBzeW0pIGZvciAoaSA9IDA7IGkgPCBTWU1CT0xfSEFTSFNJWkU7IGkrKykgZm9yIChzeW0gPSBz
eW1ib2xfaGFzaFtpXTsgc3ltOyBzeW0gPSBzeW0tPm5leHQpCisKKyNkZWZpbmUgU1lNQk9MX0NP
TlNUICAgICAgMHgwMDAxICAvKiBzeW1ib2wgaXMgY29uc3QgKi8KKyNkZWZpbmUgU1lNQk9MX0NI
RUNLICAgICAgMHgwMDA4ICAvKiB1c2VkIGR1cmluZyBkZXBlbmRlbmN5IGNoZWNraW5nICovCisj
ZGVmaW5lIFNZTUJPTF9DSE9JQ0UgICAgIDB4MDAxMCAgLyogc3RhcnQgb2YgYSBjaG9pY2UgYmxv
Y2sgKG51bGwgbmFtZSkgKi8KKyNkZWZpbmUgU1lNQk9MX0NIT0lDRVZBTCAgMHgwMDIwICAvKiB1
c2VkIGFzIGEgdmFsdWUgaW4gYSBjaG9pY2UgYmxvY2sgKi8KKyNkZWZpbmUgU1lNQk9MX1ZBTElE
ICAgICAgMHgwMDgwICAvKiBzZXQgd2hlbiBzeW1ib2wuY3VyciBpcyBjYWxjdWxhdGVkICovCisj
ZGVmaW5lIFNZTUJPTF9PUFRJT05BTCAgIDB4MDEwMCAgLyogY2hvaWNlIGlzIG9wdGlvbmFsIC0g
dmFsdWVzIGNhbiBiZSAnbicgKi8KKyNkZWZpbmUgU1lNQk9MX1dSSVRFICAgICAgMHgwMjAwICAv
KiB3cml0ZSBzeW1ib2wgdG8gZmlsZSAoS0NPTkZJR19DT05GSUcpICovCisjZGVmaW5lIFNZTUJP
TF9DSEFOR0VEICAgIDB4MDQwMCAgLyogPyAqLworI2RlZmluZSBTWU1CT0xfTk9fV1JJVEUgICAw
eDEwMDAgIC8qIFN5bWJvbCBmb3IgaW50ZXJuYWwgdXNlIG9ubHk7IGl0IHdpbGwgbm90IGJlIHdy
aXR0ZW4gKi8KKyNkZWZpbmUgU1lNQk9MX0NIRUNLRUQgICAgMHgyMDAwICAvKiB1c2VkIGR1cmlu
ZyBkZXBlbmRlbmN5IGNoZWNraW5nICovCisjZGVmaW5lIFNZTUJPTF9XQVJORUQgICAgIDB4ODAw
MCAgLyogd2FybmluZyBoYXMgYmVlbiBpc3N1ZWQgKi8KKworLyogU2V0IHdoZW4gc3ltYm9sLmRl
ZltdIGlzIHVzZWQgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRiAgICAgICAgMHgxMDAwMCAgLyogRmly
c3QgYml0IG9mIFNZTUJPTF9ERUYgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRl9VU0VSICAgMHgxMDAw
MCAgLyogc3ltYm9sLmRlZltTX0RFRl9VU0VSXSBpcyB2YWxpZCAqLworI2RlZmluZSBTWU1CT0xf
REVGX0FVVE8gICAweDIwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGX0FVVE9dIGlzIHZhbGlkICov
CisjZGVmaW5lIFNZTUJPTF9ERUYzICAgICAgIDB4NDAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZf
M10gaXMgdmFsaWQgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRjQgICAgICAgMHg4MDAwMCAgLyogc3lt
Ym9sLmRlZltTX0RFRl80XSBpcyB2YWxpZCAqLworCisvKiBjaG9pY2UgdmFsdWVzIG5lZWQgdG8g
YmUgc2V0IGJlZm9yZSBjYWxjdWxhdGluZyB0aGlzIHN5bWJvbCB2YWx1ZSAqLworI2RlZmluZSBT
WU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUyAgMHgxMDAwMDAKKworLyogU2V0IHN5bWJvbCB0
byB5IGlmIGFsbG5vY29uZmlnOyB1c2VkIGZvciBzeW1ib2xzIHRoYXQgaGlkZSBvdGhlcnMgKi8K
KyNkZWZpbmUgU1lNQk9MX0FMTE5PQ09ORklHX1kgMHgyMDAwMDAKKworI2RlZmluZSBTWU1CT0xf
TUFYTEVOR1RICTI1NgorI2RlZmluZSBTWU1CT0xfSEFTSFNJWkUJCTk5NzMKKworLyogQSBwcm9w
ZXJ0eSByZXByZXNlbnQgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQK
KyAqIHdpdGggYSBjb25maWcgInN5bWJvbCIuCisgKiBTYW1wbGU6CisgKiBjb25maWcgRk9PCisg
KiAgICAgICAgIGRlZmF1bHQgeQorICogICAgICAgICBwcm9tcHQgImZvbyBwcm9tcHQiCisgKiAg
ICAgICAgIHNlbGVjdCBCQVIKKyAqIGNvbmZpZyBCQVoKKyAqICAgICAgICAgaW50ICJCQVogVmFs
dWUiCisgKiAgICAgICAgIHJhbmdlIDEuLjI1NQorICoKKyAqIFBsZWFzZSwgYWxzbyBjaGVjayBw
YXJzZXIueTpwcmludF9zeW1ib2woKSB3aGVuIG1vZGlmeWluZyB0aGUKKyAqIGxpc3Qgb2YgcHJv
cGVydHkgdHlwZXMhCisgKi8KK2VudW0gcHJvcF90eXBlIHsKKwlQX1VOS05PV04sCisJUF9QUk9N
UFQsICAgLyogcHJvbXB0ICJmb28gcHJvbXB0IiBvciAiQkFaIFZhbHVlIiAqLworCVBfQ09NTUVO
VCwgIC8qIHRleHQgYXNzb2NpYXRlZCB3aXRoIGEgY29tbWVudCAqLworCVBfTUVOVSwgICAgIC8q
IHByb21wdCBhc3NvY2lhdGVkIHdpdGggYSBtZW51IG9yIG1lbnVjb25maWcgc3ltYm9sICovCisJ
UF9ERUZBVUxULCAgLyogZGVmYXVsdCB5ICovCisJUF9DSE9JQ0UsICAgLyogY2hvaWNlIHZhbHVl
ICovCisJUF9TRUxFQ1QsICAgLyogc2VsZWN0IEJBUiAqLworCVBfSU1QTFksICAgIC8qIGltcGx5
IEJBUiAqLworCVBfUkFOR0UsICAgIC8qIHJhbmdlIDcuLjEwMCAoZm9yIGEgc3ltYm9sKSAqLwor
CVBfU1lNQk9MLCAgIC8qIHdoZXJlIGEgc3ltYm9sIGlzIGRlZmluZWQgKi8KK307CisKK3N0cnVj
dCBwcm9wZXJ0eSB7CisJc3RydWN0IHByb3BlcnR5ICpuZXh0OyAgICAgLyogbmV4dCBwcm9wZXJ0
eSAtIG51bGwgaWYgbGFzdCAqLworCXN0cnVjdCBzeW1ib2wgKnN5bTsgICAgICAgIC8qIHRoZSBz
eW1ib2wgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhc3NvY2lhdGVkICovCisJZW51bSBwcm9w
X3R5cGUgdHlwZTsgICAgICAgLyogdHlwZSBvZiBwcm9wZXJ0eSAqLworCWNvbnN0IGNoYXIgKnRl
eHQ7ICAgICAgICAgIC8qIHRoZSBwcm9tcHQgdmFsdWUgLSBQX1BST01QVCwgUF9NRU5VLCBQX0NP
TU1FTlQgKi8KKwlzdHJ1Y3QgZXhwcl92YWx1ZSB2aXNpYmxlOworCXN0cnVjdCBleHByICpleHBy
OyAgICAgICAgIC8qIHRoZSBvcHRpb25hbCBjb25kaXRpb25hbCBwYXJ0IG9mIHRoZSBwcm9wZXJ0
eSAqLworCXN0cnVjdCBtZW51ICptZW51OyAgICAgICAgIC8qIHRoZSBtZW51IHRoZSBwcm9wZXJ0
eSBhcmUgYXNzb2NpYXRlZCB3aXRoCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdmFs
aWQgZm9yOiBQX1NFTEVDVCwgUF9SQU5HRSwgUF9DSE9JQ0UsCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogUF9QUk9NUFQsIFBfREVGQVVMVCwgUF9NRU5VLCBQX0NPTU1FTlQgKi8KKwlz
dHJ1Y3QgZmlsZSAqZmlsZTsgICAgICAgICAvKiB3aGF0IGZpbGUgd2FzIHRoaXMgcHJvcGVydHkg
ZGVmaW5lZCAqLworCWludCBsaW5lbm87ICAgICAgICAgICAgICAgIC8qIHdoYXQgbGluZW5vIHdh
cyB0aGlzIHByb3BlcnR5IGRlZmluZWQgKi8KK307CisKKyNkZWZpbmUgZm9yX2FsbF9wcm9wZXJ0
aWVzKHN5bSwgc3QsIHRvaykgXAorCWZvciAoc3QgPSBzeW0tPnByb3A7IHN0OyBzdCA9IHN0LT5u
ZXh0KSBcCisJCWlmIChzdC0+dHlwZSA9PSAodG9rKSkKKyNkZWZpbmUgZm9yX2FsbF9kZWZhdWx0
cyhzeW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgUF9ERUZBVUxUKQorI2RlZmlu
ZSBmb3JfYWxsX2Nob2ljZXMoc3ltLCBzdCkgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIFBf
Q0hPSUNFKQorI2RlZmluZSBmb3JfYWxsX3Byb21wdHMoc3ltLCBzdCkgXAorCWZvciAoc3QgPSBz
eW0tPnByb3A7IHN0OyBzdCA9IHN0LT5uZXh0KSBcCisJCWlmIChzdC0+dGV4dCkKKworLyoKKyAq
IFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBtZW51IHRyZWUsIGFzIHNlZW4gaW4gZS5nLiBtZW51
Y29uZmlnICh0aG91Z2ggdXNlZAorICogZm9yIGFsbCBmcm9udCBlbmRzKS4gRWFjaCBzeW1ib2ws
IG1lbnUsIGV0Yy4gZGVmaW5lZCBpbiB0aGUgS2NvbmZpZyBmaWxlcworICogZ2V0cyBhIG5vZGUu
IEEgc3ltYm9sIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGdldHMgb25lIG5vZGUgYXQg
ZWFjaAorICogbG9jYXRpb24uCisgKi8KK3N0cnVjdCBtZW51IHsKKwkvKiBUaGUgbmV4dCBtZW51
IG5vZGUgYXQgdGhlIHNhbWUgbGV2ZWwgKi8KKwlzdHJ1Y3QgbWVudSAqbmV4dDsKKworCS8qIFRo
ZSBwYXJlbnQgbWVudSBub2RlLCBjb3JyZXNwb25kaW5nIHRvIGUuZy4gYSBtZW51IG9yIGNob2lj
ZSAqLworCXN0cnVjdCBtZW51ICpwYXJlbnQ7CisKKwkvKiBUaGUgZmlyc3QgY2hpbGQgbWVudSBu
b2RlLCBmb3IgZS5nLiBtZW51cyBhbmQgY2hvaWNlcyAqLworCXN0cnVjdCBtZW51ICpsaXN0Owor
CisJLyoKKwkgKiBUaGUgc3ltYm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudSBub2RlLiBDaG9p
Y2VzIGFyZSBpbXBsZW1lbnRlZCBhcworCSAqIGEgc3BlY2lhbCBraW5kIG9mIHN5bWJvbC4gTlVM
TCBmb3IgbWVudXMsIGNvbW1lbnRzLCBhbmQgaWZzLgorCSAqLworCXN0cnVjdCBzeW1ib2wgKnN5
bTsKKworCS8qCisJICogVGhlIHByb21wdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuIFRoaXMg
aG9sZHMgdGhlIHByb21wdCBmb3IgYQorCSAqIHN5bWJvbCBhcyB3ZWxsIGFzIHRoZSB0ZXh0IGZv
ciBhIG1lbnUgb3IgY29tbWVudCwgYWxvbmcgd2l0aCB0aGUKKwkgKiB0eXBlIChQX1BST01QVCwg
UF9NRU5VLCBldGMuKQorCSAqLworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvbXB0OworCisJLyoKKwkg
KiAndmlzaWJsZSBpZicgZGVwZW5kZW5jaWVzLiBJZiBtb3JlIHRoYW4gb25lIGlzIGdpdmVuLCB0
aGV5IHdpbGwgYmUKKwkgKiBBTkRlZCB0b2dldGhlci4KKwkgKi8KKwlzdHJ1Y3QgZXhwciAqdmlz
aWJpbGl0eTsKKworCS8qCisJICogT3JkaW5hcnkgZGVwZW5kZW5jaWVzIGZyb20gZS5nLiAnZGVw
ZW5kcyBvbicgYW5kICdpZicsIEFORGVkCisJICogdG9nZXRoZXIKKwkgKi8KKwlzdHJ1Y3QgZXhw
ciAqZGVwOworCisJLyogTUVOVV8qIGZsYWdzICovCisJdW5zaWduZWQgaW50IGZsYWdzOworCisJ
LyogQW55IGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUgKi8KKwljaGFyICpoZWxw
OworCisJLyogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBtZW51IG5vZGUgYXBwZWFycyBpbiB0aGUg
S2NvbmZpZyBmaWxlcyAqLworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBsaW5lbm87CisKKwkv
KiBGb3IgdXNlIGJ5IGZyb250IGVuZHMgdGhhdCBuZWVkIHRvIHN0b3JlIGF1eGlsaWFyeSBkYXRh
ICovCisJdm9pZCAqZGF0YTsKK307CisKKy8qCisgKiBTZXQgb24gYSBtZW51IG5vZGUgd2hlbiB0
aGUgY29ycmVzcG9uZGluZyBzeW1ib2wgY2hhbmdlcyBzdGF0ZSBpbiBzb21lIHdheS4KKyAqIENh
biBiZSBjaGVja2VkIGJ5IGZyb250IGVuZHMuCisgKi8KKyNkZWZpbmUgTUVOVV9DSEFOR0VECQkw
eDAwMDEKKworI2RlZmluZSBNRU5VX1JPT1QJCTB4MDAwMgorCitzdHJ1Y3QganVtcF9rZXkgewor
CXN0cnVjdCBsaXN0X2hlYWQgZW50cmllczsKKwlzaXplX3Qgb2Zmc2V0OworCXN0cnVjdCBtZW51
ICp0YXJnZXQ7CisJaW50IGluZGV4OworfTsKKworI2RlZmluZSBKVU1QX05CCQkJOQorCitleHRl
cm4gc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqY3VycmVudF9m
aWxlOworc3RydWN0IGZpbGUgKmxvb2t1cF9maWxlKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRl
cm4gc3RydWN0IHN5bWJvbCBzeW1ib2xfeWVzLCBzeW1ib2xfbm8sIHN5bWJvbF9tb2Q7CitleHRl
cm4gc3RydWN0IHN5bWJvbCAqbW9kdWxlc19zeW07CitleHRlcm4gc3RydWN0IHN5bWJvbCAqc3lt
X2RlZmNvbmZpZ19saXN0OworZXh0ZXJuIGludCBjZGVidWc7CitzdHJ1Y3QgZXhwciAqZXhwcl9h
bGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9j
X29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpOworc3RydWN0IGV4cHIg
KmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICplMSwgc3Ry
dWN0IGV4cHIgKmUyKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2NvbXAoZW51bSBleHByX3R5
cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBzeW1ib2wgKnMyKTsKK3N0cnVjdCBl
eHByICpleHByX2FsbG9jX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7Citz
dHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICpl
Mik7CitzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBleHByICpvcmcpOwordm9p
ZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpOwordm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1
Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpOwordHJpc3RhdGUgZXhwcl9jYWxjX3Zh
bHVlKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX3RyYW5zX2Jvb2woc3RydWN0
IGV4cHIgKmUpOworc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX2R1cHMoc3RydWN0IGV4cHIg
KmUpOworc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNmb3JtKHN0cnVjdCBleHByICplKTsKK2ludCBl
eHByX2NvbnRhaW5zX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0p
OworYm9vbCBleHByX2RlcGVuZHNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBzeW1i
b2wgKnN5bSk7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBleHByICpl
LCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCit2b2lkIGV4cHJf
ZnByaW50KHN0cnVjdCBleHByICplLCBGSUxFICpvdXQpOworc3RydWN0IGdzdHI7IC8qIGZvcndh
cmQgKi8KK3ZvaWQgZXhwcl9nc3RyX3ByaW50KHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAq
Z3MpOwordm9pZCBleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLCBzdHJ1Y3Qg
Z3N0ciAqZ3MsCisJCQkgICAgdHJpc3RhdGUgcHJfdHlwZSwgY29uc3QgY2hhciAqdGl0bGUpOwor
CitzdGF0aWMgaW5saW5lIGludCBleHByX2lzX3llcyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlyZXR1
cm4gIWUgfHwgKGUtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95
ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHByX2lzX25vKHN0cnVjdCBleHByICplKQor
eworCXJldHVybiBlICYmIChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQuc3ltID09ICZz
eW1ib2xfbm8pOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYg
LyogRVhQUl9IICovCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5z
aCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2ZnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLjQ4MGVjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25m
aWcubmV3L2djb25mLWNmZy5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKyMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJndGsrLTIuMCBnbW9kdWxlLTIuMCBs
aWJnbGFkZS0yLjAiCisKK2lmIFsgLXogIiQoY29tbWFuZCAtdiBwa2ctY29uZmlnKSIgXTsgdGhl
bgorCWVjaG8gPiYyICIqIgorCWVjaG8gPiYyICIqICdtYWtlIGdjb25maWcnIHJlcXVpcmVzICdw
a2ctY29uZmlnJy4gUGxlYXNlIGluc3RhbGwgaXQuIgorCWVjaG8gPiYyICIqIgorCWV4aXQgMQor
ZmkKKworaWYgISBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0c7IHRoZW4KKwllY2hvID4mMiAiKiIK
KwllY2hvID4mMiAiKiBVbmFibGUgdG8gZmluZCB0aGUgR1RLKyBpbnN0YWxsYXRpb24uIFBsZWFz
ZSBtYWtlIHN1cmUgdGhhdCIKKwllY2hvID4mMiAiKiB0aGUgR1RLKyAyLjAgZGV2ZWxvcG1lbnQg
cGFja2FnZSBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkLiIKKwllY2hvID4mMiAiKiBZb3UgbmVlZCAk
UEtHIgorCWVjaG8gPiYyICIqIgorCWV4aXQgMQorZmkKKworaWYgISBwa2ctY29uZmlnIC0tYXRs
ZWFzdC12ZXJzaW9uPTIuMC4wIGd0aystMi4wOyB0aGVuCisJZWNobyA+JjIgIioiCisJZWNobyA+
JjIgIiogR1RLKyBpcyBwcmVzZW50IGJ1dCB2ZXJzaW9uID49IDIuMC4wIGlzIHJlcXVpcmVkLiIK
KwllY2hvID4mMiAiKiIKKwlleGl0IDEKK2ZpCisKK2VjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmln
IC0tY2ZsYWdzICRQS0cpXCIKK2VjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRylc
IgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9nY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmIz
NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmMKQEAgLTAs
MCArMSwxNTE2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMi0yMDAzIFJvbWFpbiBMaWV2aW4gPHJvbXNAdGlscC5pbmZvPgor
ICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAiaW1h
Z2VzLmgiCisKKyNpbmNsdWRlIDxnbGFkZS9nbGFkZS5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKworI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8dGltZS5oPgorCisvLyNkZWZpbmUgREVCVUcKKworZW51bSB7CisJU0lOR0xFX1ZJ
RVcsIFNQTElUX1ZJRVcsIEZVTExfVklFVworfTsKKworZW51bSB7CisJT1BUX05PUk1BTCwgT1BU
X0FMTCwgT1BUX1BST01QVAorfTsKKworc3RhdGljIGdpbnQgdmlld19tb2RlID0gRlVMTF9WSUVX
Oworc3RhdGljIGdib29sZWFuIHNob3dfbmFtZSA9IFRSVUU7CitzdGF0aWMgZ2Jvb2xlYW4gc2hv
d19yYW5nZSA9IFRSVUU7CitzdGF0aWMgZ2Jvb2xlYW4gc2hvd192YWx1ZSA9IFRSVUU7CitzdGF0
aWMgZ2Jvb2xlYW4gcmVzaXplYWJsZSA9IEZBTFNFOworc3RhdGljIGludCBvcHRfbW9kZSA9IE9Q
VF9OT1JNQUw7CisKK0d0a1dpZGdldCAqbWFpbl93bmQgPSBOVUxMOworR3RrV2lkZ2V0ICp0cmVl
MV93ID0gTlVMTDsJLy8gbGVmdCAgZnJhbWUKK0d0a1dpZGdldCAqdHJlZTJfdyA9IE5VTEw7CS8v
IHJpZ2h0IGZyYW1lCitHdGtXaWRnZXQgKnRleHRfdyA9IE5VTEw7CitHdGtXaWRnZXQgKmhwYW5l
ZCA9IE5VTEw7CitHdGtXaWRnZXQgKnZwYW5lZCA9IE5VTEw7CitHdGtXaWRnZXQgKmJhY2tfYnRu
ID0gTlVMTDsKK0d0a1dpZGdldCAqc2F2ZV9idG4gPSBOVUxMOworR3RrV2lkZ2V0ICpzYXZlX21l
bnVfaXRlbSA9IE5VTEw7CisKK0d0a1RleHRUYWcgKnRhZzEsICp0YWcyOworR2RrQ29sb3IgY29s
b3I7CisKK0d0a1RyZWVTdG9yZSAqdHJlZTEsICp0cmVlMiwgKnRyZWU7CitHdGtUcmVlTW9kZWwg
Km1vZGVsMSwgKm1vZGVsMjsKK3N0YXRpYyBHdGtUcmVlSXRlciAqcGFyZW50c1syNTZdOworc3Rh
dGljIGdpbnQgaW5kZW50OworCitzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnQ7IC8vIGN1cnJl
bnQgbm9kZSBmb3IgU0lOR0xFIHZpZXcKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqYnJvd3NlZDsgLy8g
YnJvd3NlZCBub2RlIGZvciBTUExJVCB2aWV3CisKK2VudW0geworCUNPTF9PUFRJT04sIENPTF9O
QU1FLCBDT0xfTk8sIENPTF9NT0QsIENPTF9ZRVMsIENPTF9WQUxVRSwKKwlDT0xfTUVOVSwgQ09M
X0NPTE9SLCBDT0xfRURJVCwgQ09MX1BJWEJVRiwKKwlDT0xfUElYVklTLCBDT0xfQlROVklTLCBD
T0xfQlROQUNULCBDT0xfQlROSU5DLCBDT0xfQlROUkFELAorCUNPTF9OVU1CRVIKK307CisKK3N0
YXRpYyB2b2lkIGRpc3BsYXlfbGlzdCh2b2lkKTsKK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZShz
dHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lkKTsK
K3N0YXRpYyB2b2lkIHVwZGF0ZV90cmVlKHN0cnVjdCBtZW51ICpzcmMsIEd0a1RyZWVJdGVyICog
ZHN0KTsKK3N0YXRpYyB2b2lkIHNldF9ub2RlKEd0a1RyZWVJdGVyICogbm9kZSwgc3RydWN0IG1l
bnUgKm1lbnUsIGdjaGFyICoqIHJvdyk7CitzdGF0aWMgZ2NoYXIgKipmaWxsX3JvdyhzdHJ1Y3Qg
bWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2NoYW5nZWQodm9pZCk7CisKKy8qIEhlbHBp
bmcvRGVidWdnaW5nIEZ1bmN0aW9ucyAqLworI2lmZGVmIERFQlVHCitzdGF0aWMgY29uc3QgY2hh
ciAqZGJnX3N5bV9mbGFncyhpbnQgdmFsKQoreworCXN0YXRpYyBjaGFyIGJ1ZlsyNTZdOworCisJ
Ynplcm8oYnVmLCAyNTYpOworCisJaWYgKHZhbCAmIFNZTUJPTF9DT05TVCkKKwkJc3RyY2F0KGJ1
ZiwgImNvbnN0LyIpOworCWlmICh2YWwgJiBTWU1CT0xfQ0hFQ0spCisJCXN0cmNhdChidWYsICJj
aGVjay8iKTsKKwlpZiAodmFsICYgU1lNQk9MX0NIT0lDRSkKKwkJc3RyY2F0KGJ1ZiwgImNob2lj
ZS8iKTsKKwlpZiAodmFsICYgU1lNQk9MX0NIT0lDRVZBTCkKKwkJc3RyY2F0KGJ1ZiwgImNob2lj
ZXZhbC8iKTsKKwlpZiAodmFsICYgU1lNQk9MX1ZBTElEKQorCQlzdHJjYXQoYnVmLCAidmFsaWQv
Iik7CisJaWYgKHZhbCAmIFNZTUJPTF9PUFRJT05BTCkKKwkJc3RyY2F0KGJ1ZiwgIm9wdGlvbmFs
LyIpOworCWlmICh2YWwgJiBTWU1CT0xfV1JJVEUpCisJCXN0cmNhdChidWYsICJ3cml0ZS8iKTsK
KwlpZiAodmFsICYgU1lNQk9MX0NIQU5HRUQpCisJCXN0cmNhdChidWYsICJjaGFuZ2VkLyIpOwor
CWlmICh2YWwgJiBTWU1CT0xfTk9fV1JJVEUpCisJCXN0cmNhdChidWYsICJub193cml0ZS8iKTsK
KworCWJ1ZltzdHJsZW4oYnVmKSAtIDFdID0gJ1wwJzsKKworCXJldHVybiBidWY7Cit9CisjZW5k
aWYKKworc3RhdGljIHZvaWQgcmVwbGFjZV9idXR0b25faWNvbihHbGFkZVhNTCAqeG1sLCBHZGtE
cmF3YWJsZSAqd2luZG93LAorCQkJCUd0a1N0eWxlICpzdHlsZSwgZ2NoYXIgKmJ0bl9uYW1lLCBn
Y2hhciAqKnhwbSkKK3sKKwlHZGtQaXhtYXAgKnBpeG1hcDsKKwlHZGtCaXRtYXAgKm1hc2s7CisJ
R3RrVG9vbEJ1dHRvbiAqYnV0dG9uOworCUd0a1dpZGdldCAqaW1hZ2U7CisKKwlwaXhtYXAgPSBn
ZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbV9kKHdpbmRvdywgJm1hc2ssCisJCQkJCSAgICAgICZz
dHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF0sCisJCQkJCSAgICAgIHhwbSk7CisKKwlidXR0b24g
PSBHVEtfVE9PTF9CVVRUT04oZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCBidG5fbmFtZSkpOwor
CWltYWdlID0gZ3RrX2ltYWdlX25ld19mcm9tX3BpeG1hcChwaXhtYXAsIG1hc2spOworCWd0a193
aWRnZXRfc2hvdyhpbWFnZSk7CisJZ3RrX3Rvb2xfYnV0dG9uX3NldF9pY29uX3dpZGdldChidXR0
b24sIGltYWdlKTsKK30KKworLyogTWFpbiBXaW5kb3cgSW5pdGlhbGl6YXRpb24gKi8KK3N0YXRp
YyB2b2lkIGluaXRfbWFpbl93aW5kb3coY29uc3QgZ2NoYXIgKmdsYWRlX2ZpbGUpCit7CisJR2xh
ZGVYTUwgKnhtbDsKKwlHdGtXaWRnZXQgKndpZGdldDsKKwlHdGtUZXh0QnVmZmVyICp0eHRidWY7
CisJR3RrU3R5bGUgKnN0eWxlOworCisJeG1sID0gZ2xhZGVfeG1sX25ldyhnbGFkZV9maWxlLCAi
d2luZG93MSIsIE5VTEwpOworCWlmICgheG1sKQorCQlnX2Vycm9yKCJHVUkgbG9hZGluZyBmYWls
ZWQgIVxuIik7CisJZ2xhZGVfeG1sX3NpZ25hbF9hdXRvY29ubmVjdCh4bWwpOworCisJbWFpbl93
bmQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ3aW5kb3cxIik7CisJaHBhbmVkID0gZ2xh
ZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiaHBhbmVkMSIpOworCXZwYW5lZCA9IGdsYWRlX3htbF9n
ZXRfd2lkZ2V0KHhtbCwgInZwYW5lZDEiKTsKKwl0cmVlMV93ID0gZ2xhZGVfeG1sX2dldF93aWRn
ZXQoeG1sLCAidHJlZXZpZXcxIik7CisJdHJlZTJfdyA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgInRyZWV2aWV3MiIpOworCXRleHRfdyA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRl
eHR2aWV3MyIpOworCisJYmFja19idG4gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJidXR0
b24xIik7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7CisKKwl3
aWRnZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzaG93X25hbWUxIik7CisJZ3RrX2No
ZWNrX21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtDaGVja01lbnVJdGVtICopIHdpZGdldCwKKwkJ
CQkgICAgICAgc2hvd19uYW1lKTsKKworCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgInNob3dfcmFuZ2UxIik7CisJZ3RrX2NoZWNrX21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtD
aGVja01lbnVJdGVtICopIHdpZGdldCwKKwkJCQkgICAgICAgc2hvd19yYW5nZSk7CisKKwl3aWRn
ZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzaG93X2RhdGExIik7CisJZ3RrX2NoZWNr
X21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtDaGVja01lbnVJdGVtICopIHdpZGdldCwKKwkJCQkg
ICAgICAgc2hvd192YWx1ZSk7CisKKwlzYXZlX2J0biA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgImJ1dHRvbjMiKTsKKwlzYXZlX21lbnVfaXRlbSA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgInNhdmUxIik7CisJY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjayhjb25mX2NoYW5nZWQpOwor
CisJc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShtYWluX3duZCk7CisJd2lkZ2V0ID0gZ2xh
ZGVfeG1sX2dldF93aWRnZXQoeG1sLCAidG9vbGJhcjEiKTsKKworCXJlcGxhY2VfYnV0dG9uX2lj
b24oeG1sLCBtYWluX3duZC0+d2luZG93LCBzdHlsZSwKKwkJCSAgICAiYnV0dG9uNCIsIChnY2hh
ciAqKikgeHBtX3NpbmdsZV92aWV3KTsKKwlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwgbWFpbl93
bmQtPndpbmRvdywgc3R5bGUsCisJCQkgICAgImJ1dHRvbjUiLCAoZ2NoYXIgKiopIHhwbV9zcGxp
dF92aWV3KTsKKwlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwgbWFpbl93bmQtPndpbmRvdywgc3R5
bGUsCisJCQkgICAgImJ1dHRvbjYiLCAoZ2NoYXIgKiopIHhwbV90cmVlX3ZpZXcpOworCisJdHh0
YnVmID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVyKEdUS19URVhUX1ZJRVcodGV4dF93KSk7CisJ
dGFnMSA9IGd0a190ZXh0X2J1ZmZlcl9jcmVhdGVfdGFnKHR4dGJ1ZiwgIm15dGFnMSIsCisJCQkJ
CSAgImZvcmVncm91bmQiLCAicmVkIiwKKwkJCQkJICAid2VpZ2h0IiwgUEFOR09fV0VJR0hUX0JP
TEQsCisJCQkJCSAgTlVMTCk7CisJdGFnMiA9IGd0a190ZXh0X2J1ZmZlcl9jcmVhdGVfdGFnKHR4
dGJ1ZiwgIm15dGFnMiIsCisJCQkJCSAgLyoic3R5bGUiLCBQQU5HT19TVFlMRV9PQkxJUVVFLCAq
LworCQkJCQkgIE5VTEwpOworCisJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhtYWlu
X3duZCksIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisKKwlndGtfd2lkZ2V0X3Nob3cobWFpbl93
bmQpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3RyZWVfbW9kZWwodm9pZCkKK3sKKwlnaW50IGk7
CisKKwl0cmVlID0gdHJlZTIgPSBndGtfdHJlZV9zdG9yZV9uZXcoQ09MX05VTUJFUiwKKwkJCQkJ
ICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLAorCQkJCQkgIEdfVFlQRV9TVFJJTkcsIEdf
VFlQRV9TVFJJTkcsCisJCQkJCSAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywKKwkJCQkJ
ICBHX1RZUEVfUE9JTlRFUiwgR0RLX1RZUEVfQ09MT1IsCisJCQkJCSAgR19UWVBFX0JPT0xFQU4s
IEdES19UWVBFX1BJWEJVRiwKKwkJCQkJICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4s
CisJCQkJCSAgR19UWVBFX0JPT0xFQU4sIEdfVFlQRV9CT09MRUFOLAorCQkJCQkgIEdfVFlQRV9C
T09MRUFOKTsKKwltb2RlbDIgPSBHVEtfVFJFRV9NT0RFTCh0cmVlMik7CisKKwlmb3IgKHBhcmVu
dHNbMF0gPSBOVUxMLCBpID0gMTsgaSA8IDI1NjsgaSsrKQorCQlwYXJlbnRzW2ldID0gKEd0a1Ry
ZWVJdGVyICopIGdfbWFsbG9jKHNpemVvZihHdGtUcmVlSXRlcikpOworCisJdHJlZTEgPSBndGtf
dHJlZV9zdG9yZV9uZXcoQ09MX05VTUJFUiwKKwkJCQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVf
U1RSSU5HLAorCQkJCSAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsCisJCQkJICAgR19U
WVBFX1NUUklORywgR19UWVBFX1NUUklORywKKwkJCQkgICBHX1RZUEVfUE9JTlRFUiwgR0RLX1RZ
UEVfQ09MT1IsCisJCQkJICAgR19UWVBFX0JPT0xFQU4sIEdES19UWVBFX1BJWEJVRiwKKwkJCQkg
ICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sCisJCQkJICAgR19UWVBFX0JPT0xFQU4s
IEdfVFlQRV9CT09MRUFOLAorCQkJCSAgIEdfVFlQRV9CT09MRUFOKTsKKwltb2RlbDEgPSBHVEtf
VFJFRV9NT0RFTCh0cmVlMSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfbGVmdF90cmVlKHZvaWQp
Cit7CisJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHRyZWUxX3cpOworCUd0a0Nl
bGxSZW5kZXJlciAqcmVuZGVyZXI7CisJR3RrVHJlZVNlbGVjdGlvbiAqc2VsOworCUd0a1RyZWVW
aWV3Q29sdW1uICpjb2x1bW47CisKKwlndGtfdHJlZV92aWV3X3NldF9tb2RlbCh2aWV3LCBtb2Rl
bDEpOworCWd0a190cmVlX3ZpZXdfc2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVFKTsKKwln
dGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KHZpZXcsIFRSVUUpOworCisJY29sdW1uID0gZ3Rr
X3RyZWVfdmlld19jb2x1bW5fbmV3KCk7CisJZ3RrX3RyZWVfdmlld19hcHBlbmRfY29sdW1uKHZp
ZXcsIGNvbHVtbik7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3RpdGxlKGNvbHVtbiwgIk9w
dGlvbnMiKTsKKworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdG9nZ2xlX25ldygpOwor
CWd0a190cmVlX3ZpZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29s
dW1uKSwKKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRf
YXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJCQkgICAgcmVuZGVy
ZXIsCisJCQkJCSAgICAiYWN0aXZlIiwgQ09MX0JUTkFDVCwKKwkJCQkJICAgICJpbmNvbnNpc3Rl
bnQiLCBDT0xfQlROSU5DLAorCQkJCQkgICAgInZpc2libGUiLCBDT0xfQlROVklTLAorCQkJCQkg
ICAgInJhZGlvIiwgQ09MX0JUTlJBRCwgTlVMTCk7CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5k
ZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RS
RUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsKKwlndGtfdHJl
ZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4p
LAorCQkJCQkgICAgcmVuZGVyZXIsCisJCQkJCSAgICAidGV4dCIsIENPTF9PUFRJT04sCisJCQkJ
CSAgICAiZm9yZWdyb3VuZC1nZGsiLAorCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKKworCXNl
bCA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbih2aWV3KTsKKwlndGtfdHJlZV9zZWxlY3Rp
b25fc2V0X21vZGUoc2VsLCBHVEtfU0VMRUNUSU9OX1NJTkdMRSk7CisJZ3RrX3dpZGdldF9yZWFs
aXplKHRyZWUxX3cpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJlcl9lZGl0ZWQoR3RrQ2VsbFJl
bmRlcmVyVGV4dCAqIGNlbGwsCisJCQkgICAgY29uc3QgZ2NoYXIgKiBwYXRoX3N0cmluZywKKwkJ
CSAgICBjb25zdCBnY2hhciAqIG5ld190ZXh0LCBncG9pbnRlciB1c2VyX2RhdGEpOworCitzdGF0
aWMgdm9pZCBpbml0X3JpZ2h0X3RyZWUodm9pZCkKK3sKKwlHdGtUcmVlVmlldyAqdmlldyA9IEdU
S19UUkVFX1ZJRVcodHJlZTJfdyk7CisJR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsKKwlHdGtU
cmVlU2VsZWN0aW9uICpzZWw7CisJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKKwlnaW50IGk7
CisKKwlndGtfdHJlZV92aWV3X3NldF9tb2RlbCh2aWV3LCBtb2RlbDIpOworCWd0a190cmVlX3Zp
ZXdfc2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVFKTsKKwlndGtfdHJlZV92aWV3X3NldF9y
dWxlc19oaW50KHZpZXcsIFRSVUUpOworCisJY29sdW1uID0gZ3RrX3RyZWVfdmlld19jb2x1bW5f
bmV3KCk7CisJZ3RrX3RyZWVfdmlld19hcHBlbmRfY29sdW1uKHZpZXcsIGNvbHVtbik7CisJZ3Rr
X3RyZWVfdmlld19jb2x1bW5fc2V0X3RpdGxlKGNvbHVtbiwgIk9wdGlvbnMiKTsKKworCXJlbmRl
cmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfcGl4YnVmX25ldygpOworCWd0a190cmVlX3ZpZXdfY29s
dW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJcmVuZGVy
ZXIsIEZBTFNFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJF
RV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJCQkgICAgcmVuZGVyZXIsCisJCQkJCSAgICAicGl4
YnVmIiwgQ09MX1BJWEJVRiwKKwkJCQkJICAgICJ2aXNpYmxlIiwgQ09MX1BJWFZJUywgTlVMTCk7
CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVfbmV3KCk7CisJZ3RrX3RyZWVf
dmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJ
CQlyZW5kZXJlciwgRkFMU0UpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVz
KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCSAgICByZW5kZXJlciwKKwkJCQkJ
ICAgICJhY3RpdmUiLCBDT0xfQlROQUNULAorCQkJCQkgICAgImluY29uc2lzdGVudCIsIENPTF9C
VE5JTkMsCisJCQkJCSAgICAidmlzaWJsZSIsIENPTF9CVE5WSVMsCisJCQkJCSAgICAicmFkaW8i
LCBDT0xfQlROUkFELCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRf
bmV3KCk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NP
TFVNTihjb2x1bW4pLAorCQkJCQlyZW5kZXJlciwgRkFMU0UpOworCWd0a190cmVlX3ZpZXdfY29s
dW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCSAg
ICByZW5kZXJlciwKKwkJCQkJICAgICJ0ZXh0IiwgQ09MX09QVElPTiwKKwkJCQkJICAgICJmb3Jl
Z3JvdW5kLWdkayIsCisJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOworCisJcmVuZGVyZXIgPSBn
dGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVt
bl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsCisJCQkJCQkgICAgIk5hbWUiLCByZW5kZXJlciwK
KwkJCQkJCSAgICAidGV4dCIsIENPTF9OQU1FLAorCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIs
CisJCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRl
cmVyX3RleHRfbmV3KCk7CisJZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmli
dXRlcyh2aWV3LCAtMSwKKwkJCQkJCSAgICAiTiIsIHJlbmRlcmVyLAorCQkJCQkJICAgICJ0ZXh0
IiwgQ09MX05PLAorCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsCisJCQkJCQkgICAgQ09MX0NP
TE9SLCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7CisJ
Z3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwKKwkJ
CQkJCSAgICAiTSIsIHJlbmRlcmVyLAorCQkJCQkJICAgICJ0ZXh0IiwgQ09MX01PRCwKKwkJCQkJ
CSAgICAiZm9yZWdyb3VuZC1nZGsiLAorCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7CisJcmVu
ZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3ZpZXdfaW5z
ZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsCisJCQkJCQkgICAgIlkiLCByZW5k
ZXJlciwKKwkJCQkJCSAgICAidGV4dCIsIENPTF9ZRVMsCisJCQkJCQkgICAgImZvcmVncm91bmQt
Z2RrIiwKKwkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOworCXJlbmRlcmVyID0gZ3RrX2NlbGxf
cmVuZGVyZXJfdGV4dF9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9h
dHRyaWJ1dGVzKHZpZXcsIC0xLAorCQkJCQkJICAgICJWYWx1ZSIsIHJlbmRlcmVyLAorCQkJCQkJ
ICAgICJ0ZXh0IiwgQ09MX1ZBTFVFLAorCQkJCQkJICAgICJlZGl0YWJsZSIsCisJCQkJCQkgICAg
Q09MX0VESVQsCisJCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwKKwkJCQkJCSAgICBDT0xfQ09M
T1IsIE5VTEwpOworCWdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QocmVuZGVyZXIpLCAiZWRpdGVk
IiwKKwkJCSBHX0NBTExCQUNLKHJlbmRlcmVyX2VkaXRlZCksIE5VTEwpOworCisJY29sdW1uID0g
Z3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9OQU1FKTsKKwlndGtfdHJlZV92aWV3
X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfbmFtZSk7CisJY29sdW1uID0gZ3RrX3Ry
ZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9OTyk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5f
c2V0X3Zpc2libGUoY29sdW1uLCBzaG93X3JhbmdlKTsKKwljb2x1bW4gPSBndGtfdHJlZV92aWV3
X2dldF9jb2x1bW4odmlldywgQ09MX01PRCk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zp
c2libGUoY29sdW1uLCBzaG93X3JhbmdlKTsKKwljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9j
b2x1bW4odmlldywgQ09MX1lFUyk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUo
Y29sdW1uLCBzaG93X3JhbmdlKTsKKwljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4o
dmlldywgQ09MX1ZBTFVFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1
bW4sIHNob3dfdmFsdWUpOworCisJaWYgKHJlc2l6ZWFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8
IENPTF9WQUxVRTsgaSsrKSB7CisJCQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4o
dmlldywgaSk7CisJCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfcmVzaXphYmxlKGNvbHVtbiwg
VFJVRSk7CisJCX0KKwl9CisKKwlzZWwgPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24odmll
dyk7CisJZ3RrX3RyZWVfc2VsZWN0aW9uX3NldF9tb2RlKHNlbCwgR1RLX1NFTEVDVElPTl9TSU5H
TEUpOworfQorCisKKy8qIFV0aWxpdHkgRnVuY3Rpb25zICovCisKKworc3RhdGljIHZvaWQgdGV4
dF9pbnNlcnRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlHdGtUZXh0QnVmZmVyICpidWZm
ZXI7CisJR3RrVGV4dEl0ZXIgc3RhcnQsIGVuZDsKKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51
X2dldF9wcm9tcHQobWVudSk7CisJc3RydWN0IGdzdHIgaGVscCA9IHN0cl9uZXcoKTsKKworCW1l
bnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsKKworCWJ1ZmZlciA9IGd0a190ZXh0X3ZpZXdf
Z2V0X2J1ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykpOworCWd0a190ZXh0X2J1ZmZlcl9nZXRf
Ym91bmRzKGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsKKwlndGtfdGV4dF9idWZmZXJfZGVsZXRlKGJ1
ZmZlciwgJnN0YXJ0LCAmZW5kKTsKKwlndGtfdGV4dF92aWV3X3NldF9sZWZ0X21hcmdpbihHVEtf
VEVYVF9WSUVXKHRleHRfdyksIDE1KTsKKworCWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIo
YnVmZmVyLCAmZW5kKTsKKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIs
ICZlbmQsIHByb21wdCwgLTEsIHRhZzEsCisJCQkJCSBOVUxMKTsKKwlndGtfdGV4dF9idWZmZXJf
aW5zZXJ0X2F0X2N1cnNvcihidWZmZXIsICJcblxuIiwgMik7CisJZ3RrX3RleHRfYnVmZmVyX2dl
dF9lbmRfaXRlcihidWZmZXIsICZlbmQpOworCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90
YWdzKGJ1ZmZlciwgJmVuZCwgc3RyX2dldCgmaGVscCksIC0xLCB0YWcyLAorCQkJCQkgTlVMTCk7
CisJc3RyX2ZyZWUoJmhlbHApOworfQorCisKK3N0YXRpYyB2b2lkIHRleHRfaW5zZXJ0X21zZyhj
b25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlHdGtUZXh0QnVmZmVy
ICpidWZmZXI7CisJR3RrVGV4dEl0ZXIgc3RhcnQsIGVuZDsKKwljb25zdCBjaGFyICptc2cgPSBt
ZXNzYWdlOworCisJYnVmZmVyID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVyKEdUS19URVhUX1ZJ
RVcodGV4dF93KSk7CisJZ3RrX3RleHRfYnVmZmVyX2dldF9ib3VuZHMoYnVmZmVyLCAmc3RhcnQs
ICZlbmQpOworCWd0a190ZXh0X2J1ZmZlcl9kZWxldGUoYnVmZmVyLCAmc3RhcnQsICZlbmQpOwor
CWd0a190ZXh0X3ZpZXdfc2V0X2xlZnRfbWFyZ2luKEdUS19URVhUX1ZJRVcodGV4dF93KSwgMTUp
OworCisJZ3RrX3RleHRfYnVmZmVyX2dldF9lbmRfaXRlcihidWZmZXIsICZlbmQpOworCWd0a190
ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwgdGl0bGUsIC0xLCB0YWcx
LAorCQkJCQkgTlVMTCk7CisJZ3RrX3RleHRfYnVmZmVyX2luc2VydF9hdF9jdXJzb3IoYnVmZmVy
LCAiXG5cbiIsIDIpOworCWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIoYnVmZmVyLCAmZW5k
KTsKKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQsIG1zZywg
LTEsIHRhZzIsCisJCQkJCSBOVUxMKTsKK30KKworCisvKiBNYWluIFdpbmRvd3MgQ2FsbGJhY2tz
ICovCisKK3ZvaWQgb25fc2F2ZV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9p
bnRlciB1c2VyX2RhdGEpOworZ2Jvb2xlYW4gb25fd2luZG93MV9kZWxldGVfZXZlbnQoR3RrV2lk
Z2V0ICogd2lkZ2V0LCBHZGtFdmVudCAqIGV2ZW50LAorCQkJCSBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJR3RrV2lkZ2V0ICpkaWFsb2csICpsYWJlbDsKKwlnaW50IHJlc3VsdDsKKworCWlmICgh
Y29uZl9nZXRfY2hhbmdlZCgpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlkaWFsb2cgPSBndGtfZGlh
bG9nX25ld193aXRoX2J1dHRvbnMoIldhcm5pbmcgISIsCisJCQkJCSAgICAgR1RLX1dJTkRPVyht
YWluX3duZCksCisJCQkJCSAgICAgKEd0a0RpYWxvZ0ZsYWdzKQorCQkJCQkgICAgIChHVEtfRElB
TE9HX01PREFMIHwKKwkJCQkJICAgICAgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKSwK
KwkJCQkJICAgICBHVEtfU1RPQ0tfT0ssCisJCQkJCSAgICAgR1RLX1JFU1BPTlNFX1lFUywKKwkJ
CQkJICAgICBHVEtfU1RPQ0tfTk8sCisJCQkJCSAgICAgR1RLX1JFU1BPTlNFX05PLAorCQkJCQkg
ICAgIEdUS19TVE9DS19DQU5DRUwsCisJCQkJCSAgICAgR1RLX1JFU1BPTlNFX0NBTkNFTCwgTlVM
TCk7CisJZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShHVEtfRElBTE9HKGRpYWxvZyks
CisJCQkJCUdUS19SRVNQT05TRV9DQU5DRUwpOworCisJbGFiZWwgPSBndGtfbGFiZWxfbmV3KCJc
blNhdmUgY29uZmlndXJhdGlvbiA/XG4iKTsKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKEdUS19ESUFMT0coZGlhbG9nKS0+dmJveCksIGxhYmVsKTsKKwlndGtfd2lkZ2V0X3Nob3co
bGFiZWwpOworCisJcmVzdWx0ID0gZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsK
Kwlzd2l0Y2ggKHJlc3VsdCkgeworCWNhc2UgR1RLX1JFU1BPTlNFX1lFUzoKKwkJb25fc2F2ZV9h
Y3RpdmF0ZShOVUxMLCBOVUxMKTsKKwkJcmV0dXJuIEZBTFNFOworCWNhc2UgR1RLX1JFU1BPTlNF
X05POgorCQlyZXR1cm4gRkFMU0U7CisJY2FzZSBHVEtfUkVTUE9OU0VfQ0FOQ0VMOgorCWNhc2Ug
R1RLX1JFU1BPTlNFX0RFTEVURV9FVkVOVDoKKwlkZWZhdWx0OgorCQlndGtfd2lkZ2V0X2Rlc3Ry
b3koZGlhbG9nKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCisK
K3ZvaWQgb25fd2luZG93MV9kZXN0cm95KEd0a09iamVjdCAqIG9iamVjdCwgZ3BvaW50ZXIgdXNl
cl9kYXRhKQoreworCWd0a19tYWluX3F1aXQoKTsKK30KKworCit2b2lkCitvbl93aW5kb3cxX3Np
emVfcmVxdWVzdChHdGtXaWRnZXQgKiB3aWRnZXQsCisJCQlHdGtSZXF1aXNpdGlvbiAqIHJlcXVp
c2l0aW9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJc3RhdGljIGdpbnQgb2xkX2g7CisJZ2lu
dCB3LCBoOworCisJaWYgKHdpZGdldC0+d2luZG93ID09IE5VTEwpCisJCWd0a193aW5kb3dfZ2V0
X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKG1haW5fd25kKSwgJncsICZoKTsKKwllbHNlCisJCWdk
a193aW5kb3dfZ2V0X3NpemUod2lkZ2V0LT53aW5kb3csICZ3LCAmaCk7CisKKwlpZiAoaCA9PSBv
bGRfaCkKKwkJcmV0dXJuOworCW9sZF9oID0gaDsKKworCWd0a19wYW5lZF9zZXRfcG9zaXRpb24o
R1RLX1BBTkVEKHZwYW5lZCksIDIgKiBoIC8gMyk7Cit9CisKKworLyogTWVudSAmIFRvb2xiYXIg
Q2FsbGJhY2tzICovCisKKworc3RhdGljIHZvaWQKK2xvYWRfZmlsZW5hbWUoR3RrRmlsZVNlbGVj
dGlvbiAqIGZpbGVfc2VsZWN0b3IsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwljb25zdCBnY2hh
ciAqZm47CisKKwlmbiA9IGd0a19maWxlX3NlbGVjdGlvbl9nZXRfZmlsZW5hbWUoR1RLX0ZJTEVf
U0VMRUNUSU9OCisJCQkJCSAgICAgKHVzZXJfZGF0YSkpOworCisJaWYgKGNvbmZfcmVhZChmbikp
CisJCXRleHRfaW5zZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlv
biAhIik7CisJZWxzZQorCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsKK30KKwordm9pZCBvbl9s
b2FkMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJR3RrV2lkZ2V0ICpmczsKKworCWZzID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX25ldygiTG9h
ZCBmaWxlLi4uIik7CisJZ19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVD
VElPTihmcyktPm9rX2J1dHRvbiksCisJCQkgImNsaWNrZWQiLAorCQkJIEdfQ0FMTEJBQ0sobG9h
ZF9maWxlbmFtZSksIChncG9pbnRlcikgZnMpOworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChH
VEtfT0JKRUNUCisJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLAorCQkJ
CSAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2lu
dGVyKSBmcyk7CisJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QKKwkJCQkgKEdU
S19GSUxFX1NFTEVDVElPTihmcyktPmNhbmNlbF9idXR0b24pLAorCQkJCSAiY2xpY2tlZCIsIEdf
Q0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2ludGVyKSBmcyk7CisJZ3Rr
X3dpZGdldF9zaG93KGZzKTsKK30KKworCit2b2lkIG9uX3NhdmVfYWN0aXZhdGUoR3RrTWVudUl0
ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWlmIChjb25mX3dyaXRlKE5V
TEwpKQorCQl0ZXh0X2luc2VydF9tc2coIkVycm9yIiwgIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3Vy
YXRpb24gISIpOworCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7Cit9CisKKworc3RhdGljIHZvaWQK
K3N0b3JlX2ZpbGVuYW1lKEd0a0ZpbGVTZWxlY3Rpb24gKiBmaWxlX3NlbGVjdG9yLCBncG9pbnRl
ciB1c2VyX2RhdGEpCit7CisJY29uc3QgZ2NoYXIgKmZuOworCisJZm4gPSBndGtfZmlsZV9zZWxl
Y3Rpb25fZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX1NFTEVDVElPTgorCQkJCQkgICAgICh1c2VyX2Rh
dGEpKTsKKworCWlmIChjb25mX3dyaXRlKGZuKSkKKwkJdGV4dF9pbnNlcnRfbXNnKCJFcnJvciIs
ICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uICEiKTsKKworCWd0a193aWRnZXRfZGVzdHJv
eShHVEtfV0lER0VUKHVzZXJfZGF0YSkpOworfQorCit2b2lkIG9uX3NhdmVfYXMxX2FjdGl2YXRl
KEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtXaWRn
ZXQgKmZzOworCisJZnMgPSBndGtfZmlsZV9zZWxlY3Rpb25fbmV3KCJTYXZlIGZpbGUgYXMuLi4i
KTsKKwlnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+
b2tfYnV0dG9uKSwKKwkJCSAiY2xpY2tlZCIsCisJCQkgR19DQUxMQkFDSyhzdG9yZV9maWxlbmFt
ZSksIChncG9pbnRlcikgZnMpOworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNU
CisJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLAorCQkJCSAiY2xpY2tl
ZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2ludGVyKSBmcyk7
CisJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QKKwkJCQkgKEdUS19GSUxFX1NF
TEVDVElPTihmcyktPmNhbmNlbF9idXR0b24pLAorCQkJCSAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0so
Z3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2ludGVyKSBmcyk7CisJZ3RrX3dpZGdldF9z
aG93KGZzKTsKK30KKworCit2b2lkIG9uX3F1aXQxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVu
dWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlpZiAoIW9uX3dpbmRvdzFfZGVsZXRlX2V2
ZW50KE5VTEwsIE5VTEwsIE5VTEwpKQorCQlndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVCht
YWluX3duZCkpOworfQorCisKK3ZvaWQgb25fc2hvd19uYW1lMV9hY3RpdmF0ZShHdGtNZW51SXRl
bSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrVHJlZVZpZXdDb2x1bW4g
KmNvbDsKKworCXNob3dfbmFtZSA9IEdUS19DSEVDS19NRU5VX0lURU0obWVudWl0ZW0pLT5hY3Rp
dmU7CisJY29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJf
dyksIENPTF9OQU1FKTsKKwlpZiAoY29sKQorCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlz
aWJsZShjb2wsIHNob3dfbmFtZSk7Cit9CisKKwordm9pZCBvbl9zaG93X3JhbmdlMV9hY3RpdmF0
ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrVHJl
ZVZpZXdDb2x1bW4gKmNvbDsKKworCXNob3dfcmFuZ2UgPSBHVEtfQ0hFQ0tfTUVOVV9JVEVNKG1l
bnVpdGVtKS0+YWN0aXZlOworCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJF
RV9WSUVXKHRyZWUyX3cpLCBDT0xfTk8pOworCWlmIChjb2wpCisJCWd0a190cmVlX3ZpZXdfY29s
dW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7CisJY29sID0gZ3RrX3RyZWVfdmlld19n
ZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9NT0QpOworCWlmIChjb2wpCisJ
CWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7CisJY29s
ID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9Z
RVMpOworCWlmIChjb2wpCisJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwg
c2hvd19yYW5nZSk7CisKK30KKworCit2b2lkIG9uX3Nob3dfZGF0YTFfYWN0aXZhdGUoR3RrTWVu
dUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1RyZWVWaWV3Q29s
dW1uICpjb2w7CisKKwlzaG93X3ZhbHVlID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSkt
PmFjdGl2ZTsKKwljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0
cmVlMl93KSwgQ09MX1ZBTFVFKTsKKwlpZiAoY29sKQorCQlndGtfdHJlZV92aWV3X2NvbHVtbl9z
ZXRfdmlzaWJsZShjb2wsIHNob3dfdmFsdWUpOworfQorCisKK3ZvaWQKK29uX3NldF9vcHRpb25f
bW9kZTFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKm1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJb3B0X21vZGUgPSBPUFRfTk9STUFMOworCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUy
KTsKKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0
byBzcGVlZC11cCAqLworfQorCisKK3ZvaWQKK29uX3NldF9vcHRpb25fbW9kZTJfYWN0aXZhdGUo
R3RrTWVudUl0ZW0gKm1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJb3B0X21vZGUg
PSBPUFRfQUxMOworCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlkaXNwbGF5X3RyZWUo
JnJvb3RtZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0byBzcGVlZC11cCAqLworfQor
CisKK3ZvaWQKK29uX3NldF9vcHRpb25fbW9kZTNfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKm1lbnVp
dGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJb3B0X21vZGUgPSBPUFRfUFJPTVBUOworCWd0
a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsJLyog
aW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0byBzcGVlZC11cCAqLworfQorCisKK3ZvaWQgb25faW50
cm9kdWN0aW9uMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJR3RrV2lkZ2V0ICpkaWFsb2c7CisJY29uc3QgZ2NoYXIgKmludHJvX3RleHQg
PQorCSAgICAiV2VsY29tZSB0byBna2MsIHRoZSBHVEsrIGdyYXBoaWNhbCBjb25maWd1cmF0aW9u
IHRvb2xcbiIKKwkgICAgIkZvciBlYWNoIG9wdGlvbiwgYSBibGFuayBib3ggaW5kaWNhdGVzIHRo
ZSBmZWF0dXJlIGlzIGRpc2FibGVkLCBhXG4iCisJICAgICJjaGVjayBpbmRpY2F0ZXMgaXQgaXMg
ZW5hYmxlZCwgYW5kIGEgZG90IGluZGljYXRlcyB0aGF0IGl0IGlzIHRvXG4iCisJICAgICJiZSBj
b21waWxlZCBhcyBhIG1vZHVsZS4gIENsaWNraW5nIG9uIHRoZSBib3ggd2lsbCBjeWNsZSB0aHJv
dWdoIHRoZSB0aHJlZSBzdGF0ZXMuXG4iCisJICAgICJcbiIKKwkgICAgIklmIHlvdSBkbyBub3Qg
c2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBkZXZpY2UgZHJpdmVyKSB0aGF0IHlvdVxuIgorCSAgICAi
YmVsaWV2ZSBzaG91bGQgYmUgcHJlc2VudCwgdHJ5IHR1cm5pbmcgb24gU2hvdyBBbGwgT3B0aW9u
c1xuIgorCSAgICAidW5kZXIgdGhlIE9wdGlvbnMgbWVudS5cbiIKKwkgICAgIkFsdGhvdWdoIHRo
ZXJlIGlzIG5vIGNyb3NzIHJlZmVyZW5jZSB5ZXQgdG8gaGVscCB5b3UgZmlndXJlIG91dFxuIgor
CSAgICAid2hhdCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoZSBv
cHRpb24geW91XG4iCisJICAgICJhcmUgaW50ZXJlc3RlZCBpbiwgeW91IGNhbiBzdGlsbCB2aWV3
IHRoZSBoZWxwIG9mIGEgZ3JheWVkLW91dFxuIgorCSAgICAib3B0aW9uLlxuIgorCSAgICAiXG4i
CisJICAgICJUb2dnbGluZyBTaG93IERlYnVnIEluZm8gdW5kZXIgdGhlIE9wdGlvbnMgbWVudSB3
aWxsIHNob3cgXG4iCisJICAgICJ0aGUgZGVwZW5kZW5jaWVzLCB3aGljaCB5b3UgY2FuIHRoZW4g
bWF0Y2ggYnkgZXhhbWluaW5nIG90aGVyIG9wdGlvbnMuIjsKKworCWRpYWxvZyA9IGd0a19tZXNz
YWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksCisJCQkJCUdUS19ESUFMT0dfREVT
VFJPWV9XSVRIX1BBUkVOVCwKKwkJCQkJR1RLX01FU1NBR0VfSU5GTywKKwkJCQkJR1RLX0JVVFRP
TlNfQ0xPU0UsICIlcyIsIGludHJvX3RleHQpOworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChH
VEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25zZSIsCisJCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdl
dF9kZXN0cm95KSwKKwkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsKKwlndGtfd2lkZ2V0X3Nob3df
YWxsKGRpYWxvZyk7Cit9CisKKwordm9pZCBvbl9hYm91dDFfYWN0aXZhdGUoR3RrTWVudUl0ZW0g
KiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1dpZGdldCAqZGlhbG9nOwor
CWNvbnN0IGdjaGFyICphYm91dF90ZXh0ID0KKwkgICAgImdrYyBpcyBjb3B5cmlnaHQgKGMpIDIw
MDIgUm9tYWluIExpZXZpbiA8cm9tc0BscGcudGljYWxjLm9yZz4uXG4iCisJICAgICAgIkJhc2Vk
IG9uIHRoZSBzb3VyY2UgY29kZSBmcm9tIFJvbWFuIFppcHBlbC5cbiI7CisKKwlkaWFsb2cgPSBn
dGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93bmQpLAorCQkJCQlHVEtfRElB
TE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCisJCQkJCUdUS19NRVNTQUdFX0lORk8sCisJCQkJCUdU
S19CVVRUT05TX0NMT1NFLCAiJXMiLCBhYm91dF90ZXh0KTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQoR1RLX09CSkVDVChkaWFsb2cpLCAicmVzcG9uc2UiLAorCQkJCSBHX0NBTExCQUNLKGd0
a193aWRnZXRfZGVzdHJveSksCisJCQkJIEdUS19PQkpFQ1QoZGlhbG9nKSk7CisJZ3RrX3dpZGdl
dF9zaG93X2FsbChkaWFsb2cpOworfQorCisKK3ZvaWQgb25fbGljZW5zZTFfYWN0aXZhdGUoR3Rr
TWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1dpZGdldCAq
ZGlhbG9nOworCWNvbnN0IGdjaGFyICpsaWNlbnNlX3RleHQgPQorCSAgICAiZ2tjIGlzIHJlbGVh
c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi5cbiIKKwkgICAgICAiRm9yIG1v
cmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHNvdXJjZSBjb2RlIG9yXG4iCisJICAgICAg
InZpc2l0IGh0dHA6Ly93d3cuZnNmLm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sXG4iOworCisJ
ZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKG1haW5fd25kKSwKKwkJ
CQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorCQkJCQlHVEtfTUVTU0FHRV9JTkZP
LAorCQkJCQlHVEtfQlVUVE9OU19DTE9TRSwgIiVzIiwgbGljZW5zZV90ZXh0KTsKKwlnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVChkaWFsb2cpLCAicmVzcG9uc2UiLAorCQkJCSBH
X0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksCisJCQkJIEdUS19PQkpFQ1QoZGlhbG9nKSk7
CisJZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpOworfQorCisKK3ZvaWQgb25fYmFja19jbGlj
a2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWVudW0gcHJv
cF90eXBlIHB0eXBlOworCisJY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudDsKKwlwdHlwZSA9IGN1
cnJlbnQtPnByb21wdCA/IGN1cnJlbnQtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKwlpZiAo
cHR5cGUgIT0gUF9NRU5VKQorCQljdXJyZW50ID0gY3VycmVudC0+cGFyZW50OworCWRpc3BsYXlf
dHJlZV9wYXJ0KCk7CisKKwlpZiAoY3VycmVudCA9PSAmcm9vdG1lbnUpCisJCWd0a193aWRnZXRf
c2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOworfQorCisKK3ZvaWQgb25fbG9hZF9jbGlj
a2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCW9uX2xvYWQx
X2FjdGl2YXRlKE5VTEwsIHVzZXJfZGF0YSk7Cit9CisKKwordm9pZCBvbl9zaW5nbGVfY2xpY2tl
ZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwl2aWV3X21vZGUg
PSBTSU5HTEVfVklFVzsKKwlndGtfd2lkZ2V0X2hpZGUodHJlZTFfdyk7CisJY3VycmVudCA9ICZy
b290bWVudTsKKwlkaXNwbGF5X3RyZWVfcGFydCgpOworfQorCisKK3ZvaWQgb25fc3BsaXRfY2xp
Y2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlnaW50IHcs
IGg7CisJdmlld19tb2RlID0gU1BMSVRfVklFVzsKKwlndGtfd2lkZ2V0X3Nob3codHJlZTFfdyk7
CisJZ3RrX3dpbmRvd19nZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cobWFpbl93bmQpLCAmdywg
JmgpOworCWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKGhwYW5lZCksIHcgLyAyKTsK
KwlpZiAodHJlZTIpCisJCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlkaXNwbGF5X2xp
c3QoKTsKKworCS8qIERpc2FibGUgYmFjayBidG4sIGxpa2UgaW4gZnVsbCBtb2RlLiAqLworCWd0
a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOworfQorCisKK3ZvaWQgb25f
ZnVsbF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CXZpZXdfbW9kZSA9IEZVTExfVklFVzsKKwlndGtfd2lkZ2V0X2hpZGUodHJlZTFfdyk7CisJaWYg
KHRyZWUyKQorCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7CisJZGlzcGxheV90cmVlKCZy
b290bWVudSk7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7Cit9
CisKKwordm9pZCBvbl9jb2xsYXBzZV9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQoreworCWd0a190cmVlX3ZpZXdfY29sbGFwc2VfYWxsKEdUS19UUkVFX1ZJ
RVcodHJlZTJfdykpOworfQorCisKK3ZvaWQgb25fZXhwYW5kX2NsaWNrZWQoR3RrQnV0dG9uICog
YnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJZ3RrX3RyZWVfdmlld19leHBhbmRfYWxs
KEdUS19UUkVFX1ZJRVcodHJlZTJfdykpOworfQorCisKKy8qIENUcmVlIENhbGxiYWNrcyAqLwor
CisvKiBDaGFuZ2UgaGV4L2ludC9zdHJpbmcgdmFsdWUgaW4gdGhlIGNlbGwgKi8KK3N0YXRpYyB2
b2lkIHJlbmRlcmVyX2VkaXRlZChHdGtDZWxsUmVuZGVyZXJUZXh0ICogY2VsbCwKKwkJCSAgICBj
b25zdCBnY2hhciAqIHBhdGhfc3RyaW5nLAorCQkJICAgIGNvbnN0IGdjaGFyICogbmV3X3RleHQs
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtUcmVlUGF0aCAqcGF0aCA9IGd0a190cmVlX3Bh
dGhfbmV3X2Zyb21fc3RyaW5nKHBhdGhfc3RyaW5nKTsKKwlHdGtUcmVlSXRlciBpdGVyOworCWNv
bnN0IGNoYXIgKm9sZF9kZWYsICpuZXdfZGVmOworCXN0cnVjdCBtZW51ICptZW51OworCXN0cnVj
dCBzeW1ib2wgKnN5bTsKKworCWlmICghZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAm
aXRlciwgcGF0aCkpCisJCXJldHVybjsKKworCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZp
dGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsKKwlzeW0gPSBtZW51LT5zeW07CisKKwlndGtfdHJl
ZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX1ZBTFVFLCAmb2xkX2RlZiwgLTEpOworCW5l
d19kZWYgPSBuZXdfdGV4dDsKKworCXN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN5bSwgbmV3X2RlZik7
CisKKwl1cGRhdGVfdHJlZSgmcm9vdG1lbnUsIE5VTEwpOworCisJZ3RrX3RyZWVfcGF0aF9mcmVl
KHBhdGgpOworfQorCisvKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIGEgc3ltYm9sIGFuZCB1cGRhdGUg
dGhlIHRyZWUgKi8KK3N0YXRpYyB2b2lkIGNoYW5nZV9zeW1fdmFsdWUoc3RydWN0IG1lbnUgKm1l
bnUsIGdpbnQgY29sKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwl0cmlz
dGF0ZSBuZXd2YWw7CisKKwlpZiAoIXN5bSkKKwkJcmV0dXJuOworCisJaWYgKGNvbCA9PSBDT0xf
Tk8pCisJCW5ld3ZhbCA9IG5vOworCWVsc2UgaWYgKGNvbCA9PSBDT0xfTU9EKQorCQluZXd2YWwg
PSBtb2Q7CisJZWxzZSBpZiAoY29sID09IENPTF9ZRVMpCisJCW5ld3ZhbCA9IHllczsKKwllbHNl
CisJCXJldHVybjsKKworCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkpIHsKKwljYXNlIFNfQk9P
TEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmICghc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5n
ZShzeW0sIG5ld3ZhbCkpCisJCQluZXd2YWwgPSB5ZXM7CisJCXN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCBuZXd2YWwpOworCQlpZiAodmlld19tb2RlID09IEZVTExfVklFVykKKwkJCXVwZGF0
ZV90cmVlKCZyb290bWVudSwgTlVMTCk7CisJCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTUExJVF9W
SUVXKSB7CisJCQl1cGRhdGVfdHJlZShicm93c2VkLCBOVUxMKTsKKwkJCWRpc3BsYXlfbGlzdCgp
OworCQl9CisJCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykKKwkJCWRpc3BsYXlf
dHJlZV9wYXJ0KCk7CS8vZml4bWU6IGtlZXAgZXhwL2NvbGwKKwkJYnJlYWs7CisJY2FzZSBTX0lO
VDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJ
fQorfQorCitzdGF0aWMgdm9pZCB0b2dnbGVfc3ltX3ZhbHVlKHN0cnVjdCBtZW51ICptZW51KQor
eworCWlmICghbWVudS0+c3ltKQorCQlyZXR1cm47CisKKwlzeW1fdG9nZ2xlX3RyaXN0YXRlX3Zh
bHVlKG1lbnUtPnN5bSk7CisJaWYgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpCisJCXVwZGF0ZV90
cmVlKCZyb290bWVudSwgTlVMTCk7CisJZWxzZSBpZiAodmlld19tb2RlID09IFNQTElUX1ZJRVcp
IHsKKwkJdXBkYXRlX3RyZWUoYnJvd3NlZCwgTlVMTCk7CisJCWRpc3BsYXlfbGlzdCgpOworCX0K
KwllbHNlIGlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcpCisJCWRpc3BsYXlfdHJlZV9wYXJ0
KCk7CS8vZml4bWU6IGtlZXAgZXhwL2NvbGwKK30KKworc3RhdGljIGdpbnQgY29sdW1uMmluZGV4
KEd0a1RyZWVWaWV3Q29sdW1uICogY29sdW1uKQoreworCWdpbnQgaTsKKworCWZvciAoaSA9IDA7
IGkgPCBDT0xfTlVNQkVSOyBpKyspIHsKKwkJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbDsKKworCQlj
b2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgaSk7
CisJCWlmIChjb2wgPT0gY29sdW1uKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC0xOwor
fQorCisKKy8qIFVzZXIgY2xpY2s6IHVwZGF0ZSBjaG9pY2UgKGZ1bGwpIG9yIGdvZXMgZG93biAo
c2luZ2xlKSAqLworZ2Jvb2xlYW4KK29uX3RyZWV2aWV3Ml9idXR0b25fcHJlc3NfZXZlbnQoR3Rr
V2lkZ2V0ICogd2lkZ2V0LAorCQkJCUdka0V2ZW50QnV0dG9uICogZXZlbnQsIGdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKwlHdGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVcod2lkZ2V0KTsK
KwlHdGtUcmVlUGF0aCAqcGF0aDsKKwlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOworCUd0a1Ry
ZWVJdGVyIGl0ZXI7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJZ2ludCBjb2w7CisKKyNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigyLDEsNCkgLy8gYnVnIGluIGN0cmVlIHdpdGggZWFybGllciB2ZXJzaW9u
IG9mIEdUSworCWdpbnQgdHggPSAoZ2ludCkgZXZlbnQtPng7CisJZ2ludCB0eSA9IChnaW50KSBl
dmVudC0+eTsKKwlnaW50IGN4LCBjeTsKKworCWd0a190cmVlX3ZpZXdfZ2V0X3BhdGhfYXRfcG9z
KHZpZXcsIHR4LCB0eSwgJnBhdGgsICZjb2x1bW4sICZjeCwKKwkJCQkgICAgICAmY3kpOworI2Vs
c2UKKwlndGtfdHJlZV92aWV3X2dldF9jdXJzb3IodmlldywgJnBhdGgsICZjb2x1bW4pOworI2Vu
ZGlmCisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKCFndGtfdHJl
ZV9tb2RlbF9nZXRfaXRlcihtb2RlbDIsICZpdGVyLCBwYXRoKSkKKwkJcmV0dXJuIEZBTFNFOwor
CWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsK
KworCWNvbCA9IGNvbHVtbjJpbmRleChjb2x1bW4pOworCWlmIChldmVudC0+dHlwZSA9PSBHREtf
MkJVVFRPTl9QUkVTUykgeworCQllbnVtIHByb3BfdHlwZSBwdHlwZTsKKwkJcHR5cGUgPSBtZW51
LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisKKwkJaWYgKHB0eXBl
ID09IFBfTUVOVSAmJiB2aWV3X21vZGUgIT0gRlVMTF9WSUVXICYmIGNvbCA9PSBDT0xfT1BUSU9O
KSB7CisJCQkvLyBnb2VzIGRvd24gaW50byBtZW51CisJCQljdXJyZW50ID0gbWVudTsKKwkJCWRp
c3BsYXlfdHJlZV9wYXJ0KCk7CisJCQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4s
IFRSVUUpOworCQl9IGVsc2UgaWYgKGNvbCA9PSBDT0xfT1BUSU9OKSB7CisJCQl0b2dnbGVfc3lt
X3ZhbHVlKG1lbnUpOworCQkJZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgsIFRS
VUUpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNvbCA9PSBDT0xfVkFMVUUpIHsKKwkJCXRvZ2ds
ZV9zeW1fdmFsdWUobWVudSk7CisJCQlndGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywgcGF0
aCwgVFJVRSk7CisJCX0gZWxzZSBpZiAoY29sID09IENPTF9OTyB8fCBjb2wgPT0gQ09MX01PRAor
CQkJICAgfHwgY29sID09IENPTF9ZRVMpIHsKKwkJCWNoYW5nZV9zeW1fdmFsdWUobWVudSwgY29s
KTsKKwkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBUUlVFKTsKKwkJfQor
CX0KKworCXJldHVybiBGQUxTRTsKK30KKworLyogS2V5IHByZXNzZWQ6IHVwZGF0ZSBjaG9pY2Ug
Ki8KK2dib29sZWFuCitvbl90cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdp
ZGdldCwKKwkJCSAgICAgR2RrRXZlbnRLZXkgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQor
eworCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh3aWRnZXQpOworCUd0a1RyZWVQ
YXRoICpwYXRoOworCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47CisJR3RrVHJlZUl0ZXIgaXRl
cjsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwlnaW50IGNvbDsKKworCWd0a190cmVlX3ZpZXdfZ2V0
X2N1cnNvcih2aWV3LCAmcGF0aCwgJmNvbHVtbik7CisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0
dXJuIEZBTFNFOworCisJaWYgKGV2ZW50LT5rZXl2YWwgPT0gR0RLX3NwYWNlKSB7CisJCWlmIChn
dGtfdHJlZV92aWV3X3Jvd19leHBhbmRlZCh2aWV3LCBwYXRoKSkKKwkJCWd0a190cmVlX3ZpZXdf
Y29sbGFwc2Vfcm93KHZpZXcsIHBhdGgpOworCQllbHNlCisJCQlndGtfdHJlZV92aWV3X2V4cGFu
ZF9yb3codmlldywgcGF0aCwgRkFMU0UpOworCQlyZXR1cm4gVFJVRTsKKwl9CisJaWYgKGV2ZW50
LT5rZXl2YWwgPT0gR0RLX0tQX0VudGVyKSB7CisJfQorCWlmICh3aWRnZXQgPT0gdHJlZTFfdykK
KwkJcmV0dXJuIEZBTFNFOworCisJZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAmaXRl
ciwgcGF0aCk7CisJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAm
bWVudSwgLTEpOworCisJaWYgKCFzdHJjYXNlY21wKGV2ZW50LT5zdHJpbmcsICJuIikpCisJCWNv
bCA9IENPTF9OTzsKKwllbHNlIGlmICghc3RyY2FzZWNtcChldmVudC0+c3RyaW5nLCAibSIpKQor
CQljb2wgPSBDT0xfTU9EOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGV2ZW50LT5zdHJpbmcsICJ5
IikpCisJCWNvbCA9IENPTF9ZRVM7CisJZWxzZQorCQljb2wgPSAtMTsKKwljaGFuZ2Vfc3ltX3Zh
bHVlKG1lbnUsIGNvbCk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKworLyogUm93IHNlbGVjdGlv
biBjaGFuZ2VkOiB1cGRhdGUgaGVscCAqLwordm9pZAorb25fdHJlZXZpZXcyX2N1cnNvcl9jaGFu
Z2VkKEd0a1RyZWVWaWV3ICogdHJlZXZpZXcsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtU
cmVlU2VsZWN0aW9uICpzZWxlY3Rpb247CisJR3RrVHJlZUl0ZXIgaXRlcjsKKwlzdHJ1Y3QgbWVu
dSAqbWVudTsKKworCXNlbGVjdGlvbiA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbih0cmVl
dmlldyk7CisJaWYgKGd0a190cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQoc2VsZWN0aW9uLCAm
bW9kZWwyLCAmaXRlcikpIHsKKwkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENP
TF9NRU5VLCAmbWVudSwgLTEpOworCQl0ZXh0X2luc2VydF9oZWxwKG1lbnUpOworCX0KK30KKwor
CisvKiBVc2VyIGNsaWNrOiBkaXNwbGF5IHN1Yi10cmVlIGluIHRoZSByaWdodCBmcmFtZS4gKi8K
K2dib29sZWFuCitvbl90cmVldmlldzFfYnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdp
ZGdldCwKKwkJCQlHZGtFdmVudEJ1dHRvbiAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7CisJR3RrVHJlZVBh
dGggKnBhdGg7CisJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKKwlHdGtUcmVlSXRlciBpdGVy
OworCXN0cnVjdCBtZW51ICptZW51OworCisJZ2ludCB0eCA9IChnaW50KSBldmVudC0+eDsKKwln
aW50IHR5ID0gKGdpbnQpIGV2ZW50LT55OworCWdpbnQgY3gsIGN5OworCisJZ3RrX3RyZWVfdmll
d19nZXRfcGF0aF9hdF9wb3ModmlldywgdHgsIHR5LCAmcGF0aCwgJmNvbHVtbiwgJmN4LAorCQkJ
CSAgICAgICZjeSk7CisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIEZBTFNFOworCisJZ3Rr
X3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwxLCAmaXRlciwgcGF0aCk7CisJZ3RrX3RyZWVfbW9k
ZWxfZ2V0KG1vZGVsMSwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOworCisJaWYgKGV2ZW50
LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKSB7CisJCXRvZ2dsZV9zeW1fdmFsdWUobWVudSk7
CisJCWN1cnJlbnQgPSBtZW51OworCQlkaXNwbGF5X3RyZWVfcGFydCgpOworCX0gZWxzZSB7CisJ
CWJyb3dzZWQgPSBtZW51OworCQlkaXNwbGF5X3RyZWVfcGFydCgpOworCX0KKworCWd0a193aWRn
ZXRfcmVhbGl6ZSh0cmVlMl93KTsKKwlndGtfdHJlZV92aWV3X3NldF9jdXJzb3IodmlldywgcGF0
aCwgTlVMTCwgRkFMU0UpOworCWd0a193aWRnZXRfZ3JhYl9mb2N1cyh0cmVlMl93KTsKKworCXJl
dHVybiBGQUxTRTsKK30KKworCisvKiBGaWxsIGEgcm93IG9mIHN0cmluZ3MgKi8KK3N0YXRpYyBn
Y2hhciAqKmZpbGxfcm93KHN0cnVjdCBtZW51ICptZW51KQoreworCXN0YXRpYyBnY2hhciAqcm93
W0NPTF9OVU1CRVJdOworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwljb25zdCBj
aGFyICpkZWY7CisJaW50IHN0eXBlOworCXRyaXN0YXRlIHZhbDsKKwllbnVtIHByb3BfdHlwZSBw
dHlwZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IENPTF9PUFRJT047IGkgPD0gQ09MX0NPTE9SOyBp
KyspCisJCWdfZnJlZShyb3dbaV0pOworCWJ6ZXJvKHJvdywgc2l6ZW9mKHJvdykpOworCisJcm93
W0NPTF9PUFRJT05dID0KKwkgICAgZ19zdHJkdXBfcHJpbnRmKCIlcyAlcyIsIG1lbnVfZ2V0X3By
b21wdChtZW51KSwKKwkJCSAgICBzeW0gJiYgIXN5bV9oYXNfdmFsdWUoc3ltKSA/ICIoTkVXKSIg
OiAiIik7CisKKwlpZiAob3B0X21vZGUgPT0gT1BUX0FMTCAmJiAhbWVudV9pc192aXNpYmxlKG1l
bnUpKQorCQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJEYXJrR3JheSIpOworCWVsc2UgaWYg
KG9wdF9tb2RlID09IE9QVF9QUk9NUFQgJiYKKwkJCW1lbnVfaGFzX3Byb21wdChtZW51KSAmJiAh
bWVudV9pc192aXNpYmxlKG1lbnUpKQorCQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJEYXJr
R3JheSIpOworCWVsc2UKKwkJcm93W0NPTF9DT0xPUl0gPSBnX3N0cmR1cCgiQmxhY2siKTsKKwor
CXB0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwor
CXN3aXRjaCAocHR5cGUpIHsKKwljYXNlIFBfTUVOVToKKwkJcm93W0NPTF9QSVhCVUZdID0gKGdj
aGFyICopIHhwbV9tZW51OworCQlpZiAodmlld19tb2RlID09IFNJTkdMRV9WSUVXKQorCQkJcm93
W0NPTF9QSVhWSVNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCQlyb3dbQ09MX0JUTlZJU10g
PSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQlicmVhazsKKwljYXNlIFBfQ09NTUVOVDoKKwkJ
cm93W0NPTF9QSVhCVUZdID0gKGdjaGFyICopIHhwbV92b2lkOworCQlyb3dbQ09MX1BJWFZJU10g
PSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BP
SU5URVIoRkFMU0UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyb3dbQ09MX1BJWEJVRl0gPSAo
Z2NoYXIgKikgeHBtX3ZvaWQ7CisJCXJvd1tDT0xfUElYVklTXSA9IEdJTlRfVE9fUE9JTlRFUihG
QUxTRSk7CisJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKKwkJYnJl
YWs7CisJfQorCisJaWYgKCFzeW0pCisJCXJldHVybiByb3c7CisJcm93W0NPTF9OQU1FXSA9IGdf
c3RyZHVwKHN5bS0+bmFtZSk7CisKKwlzeW1fY2FsY192YWx1ZShzeW0pOworCXN5bS0+ZmxhZ3Mg
Jj0gflNZTUJPTF9DSEFOR0VEOworCisJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgewkvLyBwYXJz
ZSBjaGlsZHMgZm9yIGdldHRpbmcgZmluYWwgdmFsdWUKKwkJc3RydWN0IG1lbnUgKmNoaWxkOwor
CQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsKKwkJ
c3RydWN0IG1lbnUgKmRlZl9tZW51ID0gTlVMTDsKKworCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5U
X1RPX1BPSU5URVIoRkFMU0UpOworCisJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkKKwkJ
CSAgICAmJiBjaGlsZC0+c3ltID09IGRlZl9zeW0pCisJCQkJZGVmX21lbnUgPSBjaGlsZDsKKwkJ
fQorCisJCWlmIChkZWZfbWVudSkKKwkJCXJvd1tDT0xfVkFMVUVdID0KKwkJCSAgICBnX3N0cmR1
cChtZW51X2dldF9wcm9tcHQoZGVmX21lbnUpKTsKKwl9CisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1C
T0xfQ0hPSUNFVkFMKQorCQlyb3dbQ09MX0JUTlJBRF0gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7
CisKKwlzdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCXN3aXRjaCAoc3R5cGUpIHsKKwljYXNl
IFNfQk9PTEVBTjoKKwkJaWYgKEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX1BJWFZJU10pID09IEZB
TFNFKQorCQkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCQlpZiAo
c3ltX2lzX2Nob2ljZShzeW0pKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNh
c2UgU19UUklTVEFURToKKwkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCQlz
d2l0Y2ggKHZhbCkgeworCQljYXNlIG5vOgorCQkJcm93W0NPTF9OT10gPSBnX3N0cmR1cCgiTiIp
OworCQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cCgiTiIpOworCQkJcm93W0NPTF9CVE5BQ1Rd
ID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsKKwkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9f
UE9JTlRFUihGQUxTRSk7CisJCQlicmVhazsKKwkJY2FzZSBtb2Q6CisJCQlyb3dbQ09MX01PRF0g
PSBnX3N0cmR1cCgiTSIpOworCQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cCgiTSIpOworCQkJ
cm93W0NPTF9CVE5JTkNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCQkJYnJlYWs7CisJCWNh
c2UgeWVzOgorCQkJcm93W0NPTF9ZRVNdID0gZ19zdHJkdXAoIlkiKTsKKwkJCXJvd1tDT0xfVkFM
VUVdID0gZ19zdHJkdXAoIlkiKTsKKwkJCXJvd1tDT0xfQlROQUNUXSA9IEdJTlRfVE9fUE9JTlRF
UihUUlVFKTsKKwkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7CisJ
CQlicmVhazsKKwkJfQorCisJCWlmICh2YWwgIT0gbm8gJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9y
YW5nZShzeW0sIG5vKSkKKwkJCXJvd1tDT0xfTk9dID0gZ19zdHJkdXAoIl8iKTsKKwkJaWYgKHZh
bCAhPSBtb2QgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1vZCkpCisJCQlyb3db
Q09MX01PRF0gPSBnX3N0cmR1cCgiXyIpOworCQlpZiAodmFsICE9IHllcyAmJiBzeW1fdHJpc3Rh
dGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKSkKKwkJCXJvd1tDT0xfWUVTXSA9IGdfc3RyZHVwKCJf
Iik7CisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5H
OgorCQlkZWYgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlyb3dbQ09MX1ZBTFVFXSA9
IGdfc3RyZHVwKGRlZik7CisJCXJvd1tDT0xfRURJVF0gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7
CisJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7CisJCWJyZWFrOwor
CX0KKworCXJldHVybiByb3c7Cit9CisKKworLyogU2V0IHRoZSBub2RlIGNvbnRlbnQgd2l0aCBh
IHJvdyBvZiBzdHJpbmdzICovCitzdGF0aWMgdm9pZCBzZXRfbm9kZShHdGtUcmVlSXRlciAqIG5v
ZGUsIHN0cnVjdCBtZW51ICptZW51LCBnY2hhciAqKiByb3cpCit7CisJR2RrQ29sb3IgY29sb3I7
CisJZ2Jvb2xlYW4gc3VjY2VzczsKKwlHZGtQaXhidWYgKnBpeDsKKworCXBpeCA9IGdka19waXhi
dWZfbmV3X2Zyb21feHBtX2RhdGEoKGNvbnN0IGNoYXIgKiopCisJCQkJCSAgIHJvd1tDT0xfUElY
QlVGXSk7CisKKwlnZGtfY29sb3JfcGFyc2Uocm93W0NPTF9DT0xPUl0sICZjb2xvcik7CisJZ2Rr
X2NvbG9ybWFwX2FsbG9jX2NvbG9ycyhnZGtfY29sb3JtYXBfZ2V0X3N5c3RlbSgpLCAmY29sb3Is
IDEsCisJCQkJICBGQUxTRSwgRkFMU0UsICZzdWNjZXNzKTsKKworCWd0a190cmVlX3N0b3JlX3Nl
dCh0cmVlLCBub2RlLAorCQkJICAgQ09MX09QVElPTiwgcm93W0NPTF9PUFRJT05dLAorCQkJICAg
Q09MX05BTUUsIHJvd1tDT0xfTkFNRV0sCisJCQkgICBDT0xfTk8sIHJvd1tDT0xfTk9dLAorCQkJ
ICAgQ09MX01PRCwgcm93W0NPTF9NT0RdLAorCQkJICAgQ09MX1lFUywgcm93W0NPTF9ZRVNdLAor
CQkJICAgQ09MX1ZBTFVFLCByb3dbQ09MX1ZBTFVFXSwKKwkJCSAgIENPTF9NRU5VLCAoZ3BvaW50
ZXIpIG1lbnUsCisJCQkgICBDT0xfQ09MT1IsICZjb2xvciwKKwkJCSAgIENPTF9FRElULCBHUE9J
TlRFUl9UT19JTlQocm93W0NPTF9FRElUXSksCisJCQkgICBDT0xfUElYQlVGLCBwaXgsCisJCQkg
ICBDT0xfUElYVklTLCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9QSVhWSVNdKSwKKwkJCSAgIENP
TF9CVE5WSVMsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTlZJU10pLAorCQkJICAgQ09MX0JU
TkFDVCwgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfQlROQUNUXSksCisJCQkgICBDT0xfQlROSU5D
LCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9CVE5JTkNdKSwKKwkJCSAgIENPTF9CVE5SQUQsIEdQ
T0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTlJBRF0pLAorCQkJICAgLTEpOworCisJZ19vYmplY3Rf
dW5yZWYocGl4KTsKK30KKworCisvKiBBZGQgYSBub2RlIHRvIHRoZSB0cmVlICovCitzdGF0aWMg
dm9pZCBwbGFjZV9ub2RlKHN0cnVjdCBtZW51ICptZW51LCBjaGFyICoqcm93KQoreworCUd0a1Ry
ZWVJdGVyICpwYXJlbnQgPSBwYXJlbnRzW2luZGVudCAtIDFdOworCUd0a1RyZWVJdGVyICpub2Rl
ID0gcGFyZW50c1tpbmRlbnRdOworCisJZ3RrX3RyZWVfc3RvcmVfYXBwZW5kKHRyZWUsIG5vZGUs
IHBhcmVudCk7CisJc2V0X25vZGUobm9kZSwgbWVudSwgcm93KTsKK30KKworCisvKiBGaW5kIGEg
bm9kZSBpbiB0aGUgR1RLKyB0cmVlICovCitzdGF0aWMgR3RrVHJlZUl0ZXIgZm91bmQ7CisKKy8q
CisgKiBGaW5kIGEgbWVudSBpbiB0aGUgR3RrVHJlZSBzdGFydGluZyBhdCBwYXJlbnQuCisgKi8K
K3N0YXRpYyBHdGtUcmVlSXRlciAqZ3RrdHJlZV9pdGVyX2ZpbmRfbm9kZShHdGtUcmVlSXRlciAq
cGFyZW50LAorCQkJCQkgICBzdHJ1Y3QgbWVudSAqdG9maW5kKQoreworCUd0a1RyZWVJdGVyIGl0
ZXI7CisJR3RrVHJlZUl0ZXIgKmNoaWxkID0gJml0ZXI7CisJZ2Jvb2xlYW4gdmFsaWQ7CisJR3Rr
VHJlZUl0ZXIgKnJldDsKKworCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9jaGlsZHJlbiht
b2RlbDIsIGNoaWxkLCBwYXJlbnQpOworCXdoaWxlICh2YWxpZCkgeworCQlzdHJ1Y3QgbWVudSAq
bWVudTsKKworCQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCBjaGlsZCwgNiwgJm1lbnUsIC0x
KTsKKworCQlpZiAobWVudSA9PSB0b2ZpbmQpIHsKKwkJCW1lbWNweSgmZm91bmQsIGNoaWxkLCBz
aXplb2YoR3RrVHJlZUl0ZXIpKTsKKwkJCXJldHVybiAmZm91bmQ7CisJCX0KKworCQlyZXQgPSBn
dGt0cmVlX2l0ZXJfZmluZF9ub2RlKGNoaWxkLCB0b2ZpbmQpOworCQlpZiAocmV0KQorCQkJcmV0
dXJuIHJldDsKKworCQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChtb2RlbDIsIGNo
aWxkKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworCisvKgorICogVXBkYXRlIHRoZSB0cmVl
IGJ5IGFkZGluZy9yZW1vdmluZyBlbnRyaWVzCisgKiBEb2VzIG5vdCBjaGFuZ2Ugb3RoZXIgbm9k
ZXMKKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJl
ZUl0ZXIgKiBkc3QpCit7CisJc3RydWN0IG1lbnUgKmNoaWxkMTsKKwlHdGtUcmVlSXRlciBpdGVy
LCB0bXA7CisJR3RrVHJlZUl0ZXIgKmNoaWxkMiA9ICZpdGVyOworCWdib29sZWFuIHZhbGlkOwor
CUd0a1RyZWVJdGVyICpzaWJsaW5nOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVu
dSAqbWVudTEsICptZW51MjsKKworCWlmIChzcmMgPT0gJnJvb3RtZW51KQorCQlpbmRlbnQgPSAx
OworCisJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX2NoaWxkcmVuKG1vZGVsMiwgY2hpbGQy
LCBkc3QpOworCWZvciAoY2hpbGQxID0gc3JjLT5saXN0OyBjaGlsZDE7IGNoaWxkMSA9IGNoaWxk
MS0+bmV4dCkgeworCisJCXN5bSA9IGNoaWxkMS0+c3ltOworCisJICAgICAgcmVwYXJzZToKKwkJ
bWVudTEgPSBjaGlsZDE7CisJCWlmICh2YWxpZCkKKwkJCWd0a190cmVlX21vZGVsX2dldChtb2Rl
bDIsIGNoaWxkMiwgQ09MX01FTlUsCisJCQkJCSAgICZtZW51MiwgLTEpOworCQllbHNlCisJCQlt
ZW51MiA9IE5VTEw7CS8vIGZvcmNlIGFkZGluZyBvZiBhIGZpcnN0IGNoaWxkCisKKyNpZmRlZiBE
RUJVRworCQlwcmludGYoIiUqYyVzIHwgJXNcbiIsIGluZGVudCwgJyAnLAorCQkgICAgICAgbWVu
dTEgPyBtZW51X2dldF9wcm9tcHQobWVudTEpIDogIm5pbCIsCisJCSAgICAgICBtZW51MiA/IG1l
bnVfZ2V0X3Byb21wdChtZW51MikgOiAibmlsIik7CisjZW5kaWYKKworCQlpZiAoKG9wdF9tb2Rl
ID09IE9QVF9OT1JNQUwgJiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZDEpKSB8fAorCQkgICAgKG9w
dF9tb2RlID09IE9QVF9QUk9NUFQgJiYgIW1lbnVfaGFzX3Byb21wdChjaGlsZDEpKSB8fAorCQkg
ICAgKG9wdF9tb2RlID09IE9QVF9BTEwgICAgJiYgIW1lbnVfZ2V0X3Byb21wdChjaGlsZDEpKSkg
eworCisJCQkvKiByZW1vdmUgbm9kZSAqLworCQkJaWYgKGd0a3RyZWVfaXRlcl9maW5kX25vZGUo
ZHN0LCBtZW51MSkgIT0gTlVMTCkgeworCQkJCW1lbWNweSgmdG1wLCBjaGlsZDIsIHNpemVvZihH
dGtUcmVlSXRlcikpOworCQkJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVs
MiwKKwkJCQkJCQkJIGNoaWxkMik7CisJCQkJZ3RrX3RyZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAm
dG1wKTsKKwkJCQlpZiAoIXZhbGlkKQorCQkJCQlyZXR1cm47CQkvKiBuZXh0IHBhcmVudCAqLwor
CQkJCWVsc2UKKwkJCQkJZ290byByZXBhcnNlOwkvKiBuZXh0IGNoaWxkICovCisJCQl9IGVsc2UK
KwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtZW51MSAhPSBtZW51MikgeworCQkJaWYgKGd0
a3RyZWVfaXRlcl9maW5kX25vZGUoZHN0LCBtZW51MSkgPT0gTlVMTCkgewkvLyBhZGQgbm9kZQor
CQkJCWlmICghdmFsaWQgJiYgIW1lbnUyKQorCQkJCQlzaWJsaW5nID0gTlVMTDsKKwkJCQllbHNl
CisJCQkJCXNpYmxpbmcgPSBjaGlsZDI7CisJCQkJZ3RrX3RyZWVfc3RvcmVfaW5zZXJ0X2JlZm9y
ZSh0cmVlMiwKKwkJCQkJCQkgICAgIGNoaWxkMiwKKwkJCQkJCQkgICAgIGRzdCwgc2libGluZyk7
CisJCQkJc2V0X25vZGUoY2hpbGQyLCBtZW51MSwgZmlsbF9yb3cobWVudTEpKTsKKwkJCQlpZiAo
bWVudTIgPT0gTlVMTCkKKwkJCQkJdmFsaWQgPSBUUlVFOworCQkJfSBlbHNlIHsJLy8gcmVtb3Zl
IG5vZGUKKwkJCQltZW1jcHkoJnRtcCwgY2hpbGQyLCBzaXplb2YoR3RrVHJlZUl0ZXIpKTsKKwkJ
CQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChtb2RlbDIsCisJCQkJCQkJCSBjaGls
ZDIpOworCQkJCWd0a190cmVlX3N0b3JlX3JlbW92ZSh0cmVlMiwgJnRtcCk7CisJCQkJaWYgKCF2
YWxpZCkKKwkJCQkJcmV0dXJuOwkvLyBuZXh0IHBhcmVudAorCQkJCWVsc2UKKwkJCQkJZ290byBy
ZXBhcnNlOwkvLyBuZXh0IGNoaWxkCisJCQl9CisJCX0gZWxzZSBpZiAoc3ltICYmIChzeW0tPmZs
YWdzICYgU1lNQk9MX0NIQU5HRUQpKSB7CisJCQlzZXRfbm9kZShjaGlsZDIsIG1lbnUxLCBmaWxs
X3JvdyhtZW51MSkpOworCQl9CisKKwkJaW5kZW50Kys7CisJCXVwZGF0ZV90cmVlKGNoaWxkMSwg
Y2hpbGQyKTsKKwkJaW5kZW50LS07CisKKwkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25l
eHQobW9kZWwyLCBjaGlsZDIpOworCX0KK30KKworCisvKiBEaXNwbGF5IHRoZSB3aG9sZSB0cmVl
IChzaW5nbGUvc3BsaXQvZnVsbCB2aWV3KSAqLworc3RhdGljIHZvaWQgZGlzcGxheV90cmVlKHN0
cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCWVudW0gcHJvcF90eXBlIHB0eXBlOwor
CisJaWYgKG1lbnUgPT0gJnJvb3RtZW51KSB7CisJCWluZGVudCA9IDE7CisJCWN1cnJlbnQgPSAm
cm9vdG1lbnU7CisJfQorCisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0KSB7CisJCXByb3AgPSBjaGlsZC0+cHJvbXB0OworCQlzeW0gPSBjaGlsZC0+
c3ltOworCQlwdHlwZSA9IHByb3AgPyBwcm9wLT50eXBlIDogUF9VTktOT1dOOworCisJCWlmIChz
eW0pCisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hBTkdFRDsKKworCQlpZiAoKHZpZXdfbW9k
ZSA9PSBTUExJVF9WSUVXKQorCQkgICAgJiYgIShjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpICYm
ICh0cmVlID09IHRyZWUxKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgodmlld19tb2RlID09IFNQ
TElUX1ZJRVcpICYmIChjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpCisJCSAgICAmJiAodHJlZSA9
PSB0cmVlMikpCisJCQljb250aW51ZTsKKworCQlpZiAoKG9wdF9tb2RlID09IE9QVF9OT1JNQUwg
JiYgbWVudV9pc192aXNpYmxlKGNoaWxkKSkgfHwKKwkJICAgIChvcHRfbW9kZSA9PSBPUFRfUFJP
TVBUICYmIG1lbnVfaGFzX3Byb21wdChjaGlsZCkpIHx8CisJCSAgICAob3B0X21vZGUgPT0gT1BU
X0FMTCAgICAmJiBtZW51X2dldF9wcm9tcHQoY2hpbGQpKSkKKwkJCXBsYWNlX25vZGUoY2hpbGQs
IGZpbGxfcm93KGNoaWxkKSk7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCIlKmMlczogIiwgaW5k
ZW50LCAnICcsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQlwcmludGYoIiVzIiwgY2hpbGQt
PmZsYWdzICYgTUVOVV9ST09UID8gInJvb3RtZW51IHwgIiA6ICIiKTsKKwkJcHJpbnRmKCIlcyIs
IHByb3BfZ2V0X3R5cGVfbmFtZShwdHlwZSkpOworCQlwcmludGYoIiB8ICIpOworCQlpZiAoc3lt
KSB7CisJCQlwcmludGYoIiVzIiwgc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKKwkJCXByaW50
ZigiIHwgIik7CisJCQlwcmludGYoIiVzIiwgZGJnX3N5bV9mbGFncyhzeW0tPmZsYWdzKSk7CisJ
CQlwcmludGYoIlxuIik7CisJCX0gZWxzZQorCQkJcHJpbnRmKCJcbiIpOworI2VuZGlmCisJCWlm
ICgodmlld19tb2RlICE9IEZVTExfVklFVykgJiYgKHB0eXBlID09IFBfTUVOVSkKKwkJICAgICYm
ICh0cmVlID09IHRyZWUyKSkKKwkJCWNvbnRpbnVlOworLyoKKwkJaWYgKCgobWVudSAhPSAmcm9v
dG1lbnUpICYmICEobWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQorCQkgICAgfHwgKHZpZXdfbW9k
ZSA9PSBGVUxMX1ZJRVcpCisJCSAgICB8fCAodmlld19tb2RlID09IFNQTElUX1ZJRVcpKSovCisK
KwkJLyogQ2hhbmdlIHBhbmVkIHBvc2l0aW9uIGlmIHRoZSB2aWV3IGlzIG5vdCBpbiAnc3BsaXQg
bW9kZScgKi8KKwkJaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVyB8fCB2aWV3X21vZGUgPT0g
RlVMTF9WSUVXKSB7CisJCQlndGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRChocGFuZWQp
LCAwKTsKKwkJfQorCisJCWlmICgoKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykgJiYgKG1lbnUt
PmZsYWdzICYgTUVOVV9ST09UKSkKKwkJICAgIHx8ICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQor
CQkgICAgfHwgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSkgeworCQkJaW5kZW50Kys7CisJCQlk
aXNwbGF5X3RyZWUoY2hpbGQpOworCQkJaW5kZW50LS07CisJCX0KKwl9Cit9CisKKy8qIERpc3Bs
YXkgYSBwYXJ0IG9mIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IGN1cnJlbnQgbm9kZSAoc2luZ2xlL3Nw
bGl0IHZpZXcpICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lkKQoreworCWlm
ICh0cmVlMikKKwkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOworCWlmICh2aWV3X21vZGUg
PT0gU0lOR0xFX1ZJRVcpCisJCWRpc3BsYXlfdHJlZShjdXJyZW50KTsKKwllbHNlIGlmICh2aWV3
X21vZGUgPT0gU1BMSVRfVklFVykKKwkJZGlzcGxheV90cmVlKGJyb3dzZWQpOworCWd0a190cmVl
X3ZpZXdfZXhwYW5kX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUyX3cpKTsKK30KKworLyogRGlzcGxh
eSB0aGUgbGlzdCBpbiB0aGUgbGVmdCBmcmFtZSAoc3BsaXQgdmlldykgKi8KK3N0YXRpYyB2b2lk
IGRpc3BsYXlfbGlzdCh2b2lkKQoreworCWlmICh0cmVlMSkKKwkJZ3RrX3RyZWVfc3RvcmVfY2xl
YXIodHJlZTEpOworCisJdHJlZSA9IHRyZWUxOworCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOwor
CWd0a190cmVlX3ZpZXdfZXhwYW5kX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUxX3cpKTsKKwl0cmVl
ID0gdHJlZTI7Cit9CisKK3N0YXRpYyB2b2lkIGZpeHVwX3Jvb3RtZW51KHN0cnVjdCBtZW51ICpt
ZW51KQoreworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlzdGF0aWMgaW50IG1lbnVfY250ID0gMDsK
KworCW1lbnUtPmZsYWdzIHw9IE1FTlVfUk9PVDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaWYgKGNoaWxkLT5wcm9tcHQgJiYgY2hp
bGQtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpIHsKKwkJCW1lbnVfY250Kys7CisJCQlmaXh1cF9y
b290bWVudShjaGlsZCk7CisJCQltZW51X2NudC0tOworCQl9IGVsc2UgaWYgKCFtZW51X2NudCkK
KwkJCWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsKKwl9Cit9CisKKworLyogTWFpbiAqLworaW50IG1h
aW4oaW50IGFjLCBjaGFyICphdltdKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY2hhciAqZW52
OworCWdjaGFyICpnbGFkZV9maWxlOworCisJLyogR1RLIHN0dWZmcyAqLworCWd0a19zZXRfbG9j
YWxlKCk7CisJZ3RrX2luaXQoJmFjLCAmYXYpOworCWdsYWRlX2luaXQoKTsKKworCS8vYWRkX3Bp
eG1hcF9kaXJlY3RvcnkgKFBBQ0tBR0VfREFUQV9ESVIgIi8iIFBBQ0tBR0UgIi9waXhtYXBzIik7
CisJLy9hZGRfcGl4bWFwX2RpcmVjdG9yeSAoUEFDS0FHRV9TT1VSQ0VfRElSICIvcGl4bWFwcyIp
OworCisJLyogRGV0ZXJtaW5lIEdVSSBwYXRoICovCisJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOwor
CWlmIChlbnYpCisJCWdsYWRlX2ZpbGUgPSBnX3N0cmNvbmNhdChlbnYsICIvc2NyaXB0cy9rY29u
ZmlnL2djb25mLmdsYWRlIiwgTlVMTCk7CisJZWxzZSBpZiAoYXZbMF1bMF0gPT0gJy8nKQorCQln
bGFkZV9maWxlID0gZ19zdHJjb25jYXQoYXZbMF0sICIuZ2xhZGUiLCBOVUxMKTsKKwllbHNlCisJ
CWdsYWRlX2ZpbGUgPSBnX3N0cmNvbmNhdChnX2dldF9jdXJyZW50X2RpcigpLCAiLyIsIGF2WzBd
LCAiLmdsYWRlIiwgTlVMTCk7CisKKwkvKiBDb25mIHN0dWZmcyAqLworCWlmIChhYyA+IDEgJiYg
YXZbMV1bMF0gPT0gJy0nKSB7CisJCXN3aXRjaCAoYXZbMV1bMV0pIHsKKwkJY2FzZSAnYSc6CisJ
CQkvL3Nob3dBbGwgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJY29uZl9zZXRfbWVz
c2FnZV9jYWxsYmFjayhOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJY2FzZSAnPyc6
CisJCQlwcmludGYoIiVzIFstc10gPGNvbmZpZz5cbiIsIGF2WzBdKTsKKwkJCWV4aXQoMCk7CisJ
CX0KKwkJbmFtZSA9IGF2WzJdOworCX0gZWxzZQorCQluYW1lID0gYXZbMV07CisKKwljb25mX3Bh
cnNlKG5hbWUpOworCWZpeHVwX3Jvb3RtZW51KCZyb290bWVudSk7CisJY29uZl9yZWFkKE5VTEwp
OworCisJLyogTG9hZCB0aGUgaW50ZXJmYWNlIGFuZCBjb25uZWN0IHNpZ25hbHMgKi8KKwlpbml0
X21haW5fd2luZG93KGdsYWRlX2ZpbGUpOworCWluaXRfdHJlZV9tb2RlbCgpOworCWluaXRfbGVm
dF90cmVlKCk7CisJaW5pdF9yaWdodF90cmVlKCk7CisKKwlzd2l0Y2ggKHZpZXdfbW9kZSkgewor
CWNhc2UgU0lOR0xFX1ZJRVc6CisJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7CisJCWJyZWFrOworCWNh
c2UgU1BMSVRfVklFVzoKKwkJZGlzcGxheV9saXN0KCk7CisJCWJyZWFrOworCWNhc2UgRlVMTF9W
SUVXOgorCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsKKwkJYnJlYWs7CisJfQorCisJZ3RrX21h
aW4oKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb25mX2NoYW5nZWQodm9pZCkK
K3sKKwlib29sIGNoYW5nZWQgPSBjb25mX2dldF9jaGFuZ2VkKCk7CisJZ3RrX3dpZGdldF9zZXRf
c2Vuc2l0aXZlKHNhdmVfYnRuLCBjaGFuZ2VkKTsKKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUo
c2F2ZV9tZW51X2l0ZW0sIGNoYW5nZWQpOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ODNjYgotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUKQEAgLTAsMCArMSw2NjEgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4gPCEtLSotIG1vZGU6IHhtbCAtKi0tPgor
Cis8Z2xhZGUtaW50ZXJmYWNlPgorCis8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5k
b3cxIj4KKyAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICA8cHJv
cGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVsIENvbmZpZ3Vy
YXRvcjwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lORE9XX1RPUExF
VkVMPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJ
Tl9QT1NfTk9ORTwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+RmFsc2U8L3By
b3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdF93aWR0aCI+NjQwPC9wcm9wZXJ0eT4K
KyAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHRfaGVpZ2h0Ij40ODA8L3Byb3BlcnR5PgorICA8cHJv
cGVydHkgbmFtZT0icmVzaXphYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9
ImRlc3Ryb3lfd2l0aF9wYXJlbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9
ImRlY29yYXRlZCI+VHJ1ZTwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJza2lwX3Rhc2ti
YXJfaGludCI+RmFsc2U8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0ic2tpcF9wYWdlcl9o
aW50Ij5GYWxzZTwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQiPkdES19X
SU5ET1dfVFlQRV9ISU5UX05PUk1BTDwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJncmF2
aXR5Ij5HREtfR1JBVklUWV9OT1JUSF9XRVNUPC9wcm9wZXJ0eT4KKyAgPHNpZ25hbCBuYW1lPSJk
ZXN0cm95IiBoYW5kbGVyPSJvbl93aW5kb3cxX2Rlc3Ryb3kiIG9iamVjdD0id2luZG93MSIvPgor
ICA8c2lnbmFsIG5hbWU9InNpemVfcmVxdWVzdCIgaGFuZGxlcj0ib25fd2luZG93MV9zaXplX3Jl
cXVlc3QiIG9iamVjdD0idnBhbmVkMSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxMSBK
YW4gMjAwMiAxNjoxNzoxMSBHTVQiLz4KKyAgPHNpZ25hbCBuYW1lPSJkZWxldGVfZXZlbnQiIGhh
bmRsZXI9Im9uX3dpbmRvdzFfZGVsZXRlX2V2ZW50IiBvYmplY3Q9IndpbmRvdzEiIGxhc3RfbW9k
aWZpY2F0aW9uX3RpbWU9IlN1biwgMDkgTWFyIDIwMDMgMTk6NDI6NDYgR01UIi8+CisKKyAgPGNo
aWxkPgorICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJ2Ym94MSI+CisgICAgICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICA8cHJvcGVydHkgbmFt
ZT0iaG9tb2dlbmVvdXMiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJz
cGFjaW5nIj4wPC9wcm9wZXJ0eT4KKworICAgICAgPGNoaWxkPgorCTx3aWRnZXQgY2xhc3M9Ikd0
a01lbnVCYXIiIGlkPSJtZW51YmFyMSI+CisJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+CisKKwkgIDxjaGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrTWVudUl0
ZW0iIGlkPSJmaWxlMSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3By
b3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
Pl9GaWxlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+
VHJ1ZTwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a01l
bnUiIGlkPSJmaWxlMV9tZW51Ij4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJsb2FkMSI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAi
IHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2FkIGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fTG9hZDwvcHJvcGVy
dHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fbG9hZDFfYWN0
aXZhdGUiLz4KKwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iTCIgbW9kaWZpZXJzPSJHREtfQ09O
VFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFs
LWNoaWxkPSJpbWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlMzki
PgorCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLW9wZW48L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkg
bmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGln
biI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9w
ZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJv
cGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9j
aGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ic2F2ZTEiPgorCQkgICAgICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZSB0aGUgY29uZmlnIGluIC5j
b25maWc8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0
YWJsZT0ieWVzIj5fU2F2ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vf
dW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0
ZSIgaGFuZGxlcj0ib25fc2F2ZV9hY3RpdmF0ZSIvPgorCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5
PSJTIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4KKwor
CQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4KKwkJCTx3aWRnZXQgY2xhc3M9
Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0MCI+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstc2F2ZTwvcHJv
cGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5PgorCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkg
bmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+
MDwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KKwkJ
CTwvd2lkZ2V0PgorCQkgICAgICA8L2NoaWxkPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGls
ZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0i
IGlkPSJzYXZlX2FzMSI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0i
eWVzIj5TYXZlIHRoZSBjb25maWcgaW4gYSBmaWxlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZSBfYXM8L3Byb3BlcnR5Pgor
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJ
CSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmVfYXMxX2FjdGl2
YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8d2lk
Z2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDEiPgorCQkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3Rr
LXNhdmUtYXM8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9w
cm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJ
CSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5
IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwv
cHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0
PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtT
ZXBhcmF0b3JNZW51SXRlbSIgaWQ9InNlcGFyYXRvcjEiPgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxk
PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIg
aWQ9InF1aXQxIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5f
UXVpdDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0i
b25fcXVpdDFfYWN0aXZhdGUiLz4KKwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iUSIgbW9kaWZp
ZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+CisKKwkJICAgICAgPGNo
aWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIg
aWQ9ImltYWdlNDIiPgorCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXF1aXQ8L3Byb3BlcnR5PgorCQkJ
ICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5
IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGln
biI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5
PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4K
KwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisJCTwvd2lk
Z2V0PgorCSAgICAgIDwvY2hpbGQ+CisJICAgIDwvd2lkZ2V0PgorCSAgPC9jaGlsZD4KKworCSAg
PGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9Im9wdGlvbnMxIj4K
KwkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAg
PHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X09wdGlvbnM8L3Byb3Bl
cnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0
eT4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9Im9wdGlv
bnMxX21lbnUiPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tN
ZW51SXRlbSIgaWQ9InNob3dfbmFtZTEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFu
c2xhdGFibGU9InllcyI+U2hvdyBuYW1lPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfbmFtZTwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAg
ICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8c2ln
bmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zaG93X25hbWUxX2FjdGl2YXRlIi8+CisJ
CSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdl
dCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIgaWQ9InNob3dfcmFuZ2UxIj4KKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkg
bmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgcmFuZ2UgKFkvTS9OKTwvcHJv
cGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
PlNob3cgX3JhbmdlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRl
cmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5G
YWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9
Im9uX3Nob3dfcmFuZ2UxX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxk
PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIg
aWQ9InNob3dfZGF0YTEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwv
cHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9
InllcyI+U2hvdyB2YWx1ZSBvZiB0aGUgb3B0aW9uPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfZGF0YTwvcHJvcGVydHk+
CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAg
ICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zaG93X2RhdGExX2FjdGl2YXRl
Ii8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkgICAg
PHdpZGdldCBjbGFzcz0iR3RrU2VwYXJhdG9yTWVudUl0ZW0iIGlkPSJzZXBhcmF0b3IyIj4KKwkJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgPC93
aWRnZXQ+CisJCSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a1JhZGlvTWVudUl0ZW0iIGlkPSJzZXRfb3B0aW9uX21vZGUxIj4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgbm9ybWFsIG9wdGlvbnM8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5T
aG93IG5vcm1hbCBvcHRpb25zPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVz
ZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0
aXZlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFu
ZGxlcj0ib25fc2V0X29wdGlvbl9tb2RlMV9hY3RpdmF0ZSIvPgorCQkgICAgPC93aWRnZXQ+CisJ
CSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1JhZGlv
TWVudUl0ZW0iIGlkPSJzZXRfb3B0aW9uX21vZGUyIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgYWxsIG9wdGlvbnM8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBfb3B0
aW9uczwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3By
b3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZ3JvdXAiPnNldF9vcHRpb25fbW9kZTE8
L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9z
ZXRfb3B0aW9uX21vZGUyX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxk
PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9NZW51SXRlbSIg
aWQ9InNldF9vcHRpb25fbW9kZTMiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xh
dGFibGU9InllcyI+U2hvdyBhbGwgb3B0aW9ucyB3aXRoIHByb21wdHM8L3Byb3BlcnR5PgorCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBw
cm9tcHQgb3B0aW9uczwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5k
ZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+
RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZ3JvdXAiPnNldF9vcHRp
b25fbW9kZTE8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5k
bGVyPSJvbl9zZXRfb3B0aW9uX21vZGUzX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJ
ICA8L2NoaWxkPgorCisJCTwvd2lkZ2V0PgorCSAgICAgIDwvY2hpbGQ+CisJICAgIDwvd2lkZ2V0
PgorCSAgPC9jaGlsZD4KKworCSAgPGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51
SXRlbSIgaWQ9ImhlbHAxIj4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwv
cHJvcGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9Inll
cyI+X0hlbHA8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5l
Ij5UcnVlPC9wcm9wZXJ0eT4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3Rr
TWVudSIgaWQ9ImhlbHAxX21lbnUiPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFz
cz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9ImludHJvZHVjdGlvbjEiPgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9JbnRyb2R1Y3Rpb248L3Byb3BlcnR5PgorCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAg
ICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2ludHJvZHVjdGlvbjFfYWN0
aXZhdGUiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZyaSwgMTUgTm92IDIwMDIgMjA6MjY6MzAg
R01UIi8+CisJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IkkiIG1vZGlmaWVycz0iR0RLX0NPTlRS
T0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPgorCisJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1j
aGlsZD0iaW1hZ2UiPgorCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQzIj4K
KwkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkJICA8cHJv
cGVydHkgbmFtZT0ic3RvY2siPmd0ay1kaWFsb2ctcXVlc3Rpb248L3Byb3BlcnR5PgorCQkJICA8
cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5h
bWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+
MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5Pgor
CQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJ
ICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hp
bGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0iYWJvdXQxIj4K
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fQWJvdXQ8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2Fib3V0MV9h
Y3RpdmF0ZSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjoz
MCBHTVQiLz4KKwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iQSIgbW9kaWZpZXJzPSJHREtfQ09O
VFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFs
LWNoaWxkPSJpbWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDQi
PgorCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXByb3BlcnRpZXM8L3Byb3BlcnR5PgorCQkJICA8cHJv
cGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9
InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41
PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAg
ICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+
CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ibGljZW5zZTEiPgor
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9MaWNlbnNlPC9wcm9w
ZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9saWNlbnNl
MV9hY3RpdmF0ZSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoy
NjozMCBHTVQiLz4KKworCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4KKwkJ
CTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0NSI+CisJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2Nr
Ij5ndGstanVzdGlmeS1maWxsPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25f
c2l6ZSI+MTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJv
cGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9
InlwYWQiPjA8L3Byb3BlcnR5PgorCQkJPC93aWRnZXQ+CisJCSAgICAgIDwvY2hpbGQ+CisJCSAg
ICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4KKwkgICAgICA8L2NoaWxkPgor
CSAgICA8L3dpZGdldD4KKwkgIDwvY2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tpbmc+CisJICA8
cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0i
ZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8
L3Byb3BlcnR5PgorCTwvcGFja2luZz4KKyAgICAgIDwvY2hpbGQ+CisKKyAgICAgIDxjaGlsZD4K
Kwk8d2lkZ2V0IGNsYXNzPSJHdGtIYW5kbGVCb3giIGlkPSJoYW5kbGVib3gxIj4KKwkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJz
aGFkb3dfdHlwZSI+R1RLX1NIQURPV19PVVQ8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5IG5hbWU9
ImhhbmRsZV9wb3NpdGlvbiI+R1RLX1BPU19MRUZUPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBu
YW1lPSJzbmFwX2VkZ2UiPkdUS19QT1NfVE9QPC9wcm9wZXJ0eT4KKworCSAgPGNoaWxkPgorCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtUb29sYmFyIiBpZD0idG9vbGJhcjEiPgorCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFt
ZT0ib3JpZW50YXRpb24iPkdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMPC9wcm9wZXJ0eT4KKwkg
ICAgICA8cHJvcGVydHkgbmFtZT0idG9vbGJhcl9zdHlsZSI+R1RLX1RPT0xCQVJfQk9USDwvcHJv
cGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXBzIj5UcnVlPC9wcm9wZXJ0eT4K
KwkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hvd19hcnJvdyI+VHJ1ZTwvcHJvcGVydHk+CisKKwkg
ICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b24x
Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHBy
b3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5Hb2VzIHVwIG9mIG9uZSBs
ZXZlbCAoc2luZ2xlIHZpZXcpPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwi
IHRyYW5zbGF0YWJsZT0ieWVzIj5CYWNrPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0i
dXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InN0b2Nr
X2lkIj5ndGstdW5kbzwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9y
aXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVy
dGljYWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQi
PkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9u
X2JhY2tfY2xpY2tlZCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5
IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21v
Z2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgor
CisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xp
dGVtMSI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisKKwkJICA8Y2hp
bGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjEi
PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAg
ICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAg
PHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAg
PC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRv
biIgaWQ9ImJ1dHRvbjIiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxv
YWQgYSBjb25maWcgZmlsZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0
cmFuc2xhdGFibGU9InllcyI+TG9hZDwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVz
ZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19p
ZCI+Z3RrLW9wZW48L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6
b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRp
Y2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5G
YWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9s
b2FkX2NsaWNrZWQiLz4KKwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dl
bmVvdXMiPlRydWU8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKwor
CSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRv
bjMiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgYSBjb25maWcg
ZmlsZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9
InllcyI+U2F2ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLXNhdmU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVy
dHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zYXZlX2FjdGl2YXRl
Ii8+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5k
Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVl
PC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hp
bGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0ZW0yIj4KKwkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3
aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2c2VwYXJhdG9yMiI+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgIDwvd2lkZ2V0Pgor
CQkgIDwvY2hpbGQ+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFt
ZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5l
b3VzIj5GYWxzZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgorCisJ
ICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9u
NCI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2luZ2xlIHZpZXc8L3By
b3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNp
bmdsZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW1pc3NpbmctaW1h
Z2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRy
dWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVl
PC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJv
cGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zaW5nbGVfY2xp
Y2tlZCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODozOSBH
TVQiLz4KKwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBh
bmQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRy
dWU8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxj
aGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjUiPgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkg
bmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNwbGl0IHZpZXc8L3Byb3BlcnR5Pgor
CQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNwbGl0PC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJ
ICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX3NwbGl0X2NsaWNrZWQiIGxhc3Rf
bW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTQ6Mjg6NDUgR01UIi8+CisJCTwv
d2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwv
cHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3
aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b242Ij4KKwkJICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0
aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5GdWxsIHZpZXc8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkZ1bGw8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVy
dHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1taXNzaW5nLWltYWdlPC9wcm9wZXJ0eT4KKwkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3Bl
cnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFt
ZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fZnVsbF9jbGlja2VkIiBsYXN0X21vZGlmaWNhdGlvbl90
aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE0OjI4OjUwIEdNVCIvPgorCQk8L3dpZGdldD4KKwkJPHBh
Y2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2lu
Zz4KKwkgICAgICA8L2NoaWxkPgorCisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJH
dGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMyI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwv
cHJvcGVydHk+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJh
dG9yIiBpZD0idnNlcGFyYXRvcjMiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdl
dD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5Pgor
CQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdl
dCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjciPgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIg
dHJhbnNsYXRhYmxlPSJ5ZXMiPkNvbGxhcHNlIHRoZSB3aG9sZSB0cmVlIGluIHRoZSByaWdodCBm
cmFtZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9
InllcyI+Q29sbGFwc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJs
aW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1y
ZW1vdmU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwv
cHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9jb2xsYXBz
ZV9jbGlja2VkIi8+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFt
ZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5l
b3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkg
ICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b244
Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHBy
b3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5FeHBhbmQgdGhlIHdob2xl
IHRyZWUgaW4gdGhlIHJpZ2h0IGZyYW1lPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0i
bGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5FeHBhbmQ8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFt
ZT0ic3RvY2tfaWQiPmd0ay1hZGQ8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1w
b3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5k
bGVyPSJvbl9leHBhbmRfY2xpY2tlZCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAg
PHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8
L2NoaWxkPgorCSAgICA8L3dpZGdldD4KKwkgIDwvY2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tp
bmc+CisJICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVy
dHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZmls
bCI+RmFsc2U8L3Byb3BlcnR5PgorCTwvcGFja2luZz4KKyAgICAgIDwvY2hpbGQ+CisKKyAgICAg
IDxjaGlsZD4KKwk8d2lkZ2V0IGNsYXNzPSJHdGtIUGFuZWQiIGlkPSJocGFuZWQxIj4KKwkgIDxw
cm9wZXJ0eSBuYW1lPSJ3aWR0aF9yZXF1ZXN0Ij4xPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9j
dXMiPlRydWU8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4wPC9wcm9w
ZXJ0eT4KKworCSAgPGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRv
dyIgaWQ9InNjcm9sbGVkd2luZG93MSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGlj
eSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJzaGFkb3dfdHlwZSI+R1RLX1NIQURPV19JTjwvcHJvcGVydHk+
CisJICAgICAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9Q
X0xFRlQ8L3Byb3BlcnR5PgorCisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtU
cmVlVmlldyIgaWQ9InRyZWV2aWV3MSI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJoZWFkZXJzX3Zpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJydWxlc19oaW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAg
PHByb3BlcnR5IG5hbWU9InJlb3JkZXJhYmxlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3Bl
cnR5IG5hbWU9ImVuYWJsZV9zZWFyY2giPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8c2lnbmFsIG5h
bWU9ImN1cnNvcl9jaGFuZ2VkIiBoYW5kbGVyPSJvbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQi
IGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTg6MjIgR01UIi8+
CisJCSAgPHNpZ25hbCBuYW1lPSJidXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2
aWV3MV9idXR0b25fcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIg
SmFuIDIwMDMgMTY6MDM6NTIgR01UIi8+CisJCSAgPHNpZ25hbCBuYW1lPSJrZXlfcHJlc3NfZXZl
bnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9rZXlfcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0
aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTY6MTE6NDQgR01UIi8+CisJCTwvd2lkZ2V0Pgor
CSAgICAgIDwvY2hpbGQ+CisJICAgIDwvd2lkZ2V0PgorCSAgICA8cGFja2luZz4KKwkgICAgICA8
cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkg
bmFtZT0icmVzaXplIj5GYWxzZTwvcHJvcGVydHk+CisJICAgIDwvcGFja2luZz4KKwkgIDwvY2hp
bGQ+CisKKwkgIDxjaGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlBhbmVkIiBpZD0idnBh
bmVkMSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pgor
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MDwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+
CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cy
Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHBy
b3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJv
cGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZ
X0FVVE9NQVRJQzwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBlIj5H
VEtfU0hBRE9XX0lOPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0id2luZG93X3BsYWNl
bWVudCI+R1RLX0NPUk5FUl9UT1BfTEVGVDwvcHJvcGVydHk+CisKKwkJICA8Y2hpbGQ+CisJCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtUcmVlVmlldyIgaWQ9InRyZWV2aWV3MiI+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJoYXNfZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iaGVh
ZGVyc192aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJ1
bGVzX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJlb3Jk
ZXJhYmxlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVf
c2VhcmNoIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iY3Vyc29yX2No
YW5nZWQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9jdXJzb3JfY2hhbmdlZCIgbGFzdF9tb2RpZmlj
YXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNTo1Nzo1NSBHTVQiLz4KKwkJICAgICAgPHNp
Z25hbCBuYW1lPSJidXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9idXR0
b25fcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMg
MTU6NTc6NTggR01UIi8+CisJCSAgICAgIDxzaWduYWwgbmFtZT0ia2V5X3ByZXNzX2V2ZW50IiBo
YW5kbGVyPSJvbl90cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90
aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE1OjU4OjAxIEdNVCIvPgorCQkgICAgPC93aWRnZXQ+CisJ
CSAgPC9jaGlsZD4KKwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJzaHJpbmsiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPkZh
bHNlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8
Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3
aW5kb3czIj4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJ
CSAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX05FVkVSPC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJ
Q1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUi
PkdUS19TSEFET1dfSU48L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxh
Y2VtZW50Ij5HVEtfQ09STkVSX1RPUF9MRUZUPC9wcm9wZXJ0eT4KKworCQkgIDxjaGlsZD4KKwkJ
ICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RleHRWaWV3IiBpZD0idGV4dHZpZXczIj4KKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9ImVkaXRhYmxlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJv
dmVyd3JpdGUiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjY2Vw
dHNfdGFiIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imp1c3RpZmlj
YXRpb24iPkdUS19KVVNUSUZZX0xFRlQ8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0id3JhcF9tb2RlIj5HVEtfV1JBUF9XT1JEPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImN1cnNvcl92aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9InBpeGVsc19hYm92ZV9saW5lcyI+MDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJwaXhlbHNfYmVsb3dfbGluZXMiPjA8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0icGl4ZWxzX2luc2lkZV93cmFwIj4wPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9ImxlZnRfbWFyZ2luIj4wPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9InJpZ2h0X21hcmdpbiI+MDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJp
bmRlbnQiPjA8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPlNvcnJ5LCBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRpb24geWV0
LjwvcHJvcGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4K
KwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2lu
Zz4KKwkgICAgICA8L2NoaWxkPgorCSAgICA8L3dpZGdldD4KKwkgICAgPHBhY2tpbmc+CisJICAg
ICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAgPHByb3Bl
cnR5IG5hbWU9InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+CisJICAgIDwvcGFja2luZz4KKwkgIDwv
Y2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tpbmc+CisJICA8cHJvcGVydHkgbmFtZT0icGFkZGlu
ZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5UcnVlPC9wcm9wZXJ0
eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5UcnVlPC9wcm9wZXJ0eT4KKwk8L3BhY2tpbmc+
CisgICAgICA8L2NoaWxkPgorICAgIDwvd2lkZ2V0PgorICA8L2NoaWxkPgorPC93aWRnZXQ+CisK
KzwvZ2xhZGUtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjRmYTBlNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvaW1hZ2VzLmMKQEAgLTAsMCArMSwzMjggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlw
cGVsQGxpbnV4LW02OGsub3JnPgorICovCisKKyNpbmNsdWRlICJpbWFnZXMuaCIKKworY29uc3Qg
Y2hhciAqeHBtX2xvYWRbXSA9IHsKKyIyMiAyMiA1IDEiLAorIi4gYyBOb25lIiwKKyIjIGMgIzAw
MDAwMCIsCisiYyBjICM4MzgxMDAiLAorImEgYyAjZmZmZjAwIiwKKyJiIGMgI2ZmZmZmZiIsCisi
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uIyMjIy4uLi4jLiIsCisiLi4uLi4u
Li4uLi4jLi4uLiMjLiMjLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uIyMjLiIsCisiLi4uLi4uLi4u
Li4uLi4uLi4jIyMjLiIsCisiLiMjIyMuLi4uLi4uLi4uLiMjIyMjLiIsCisiI2FiYWIjIyMjIyMj
IyMjLi4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCisiI2FiYWJhYmFiYWJhYmEj
Li4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCisiI2FiYWJhYiMjIyMjIyMjIyMj
IyMjIyIsCisiI2JhYmFiIyNjY2NjY2NjY2NjY2MjIyIsCisiI2FiYWIjI2NjY2NjY2NjY2NjYyMj
LiIsCisiI2JhYiMjY2NjY2NjY2NjY2NjIyMuLiIsCisiI2FiIyNjY2NjY2NjY2NjY2MjIy4uLiIs
CisiI2IjI2NjY2NjY2NjY2NjYyMjLi4uLiIsCisiIyMjY2NjY2NjY2NjY2NjIyMuLi4uLiIsCisi
IyNjY2NjY2NjY2NjY2MjIy4uLi4uLiIsCisiIyMjIyMjIyMjIyMjIyMjLi4uLi4uLiIsCisiLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBjaGFyICp4cG1fc2F2ZVtdID0geworIjIy
IDIyIDUgMSIsCisiLiBjIE5vbmUiLAorIiMgYyAjMDAwMDAwIiwKKyJhIGMgIzgzODEwMCIsCisi
YiBjICNjNWMyYzUiLAorImMgYyAjY2RiNmQ1IiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwK
KyIuIyMjIyMjIyMjIyMjIyMjIyMjIyMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNiYiMuIiwKKyIu
I2FhI2JiYmJiYmJiYmJiYiNiYiMuIiwKKyIuI2FhI2JiYmJiYmJiYmNiYiMjIyMuIiwKKyIuI2Fh
I2JiYmNjYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmNjYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2Ji
YmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJi
YmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMj
IyMjI2FhYSMuIiwKKyIuI2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwKKyIuI2FhYWFhYWFhYWFhYWFh
YWFhYSMuIiwKKyIuI2FhYSMjIyMjIyMjIyMjIyNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNh
YSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMu
IiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwK
KyIuLiMjIyMjIyMjIyMjIyMjIyMjIy4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisK
K2NvbnN0IGNoYXIgKnhwbV9iYWNrW10gPSB7CisiMjIgMjIgMyAxIiwKKyIuIGMgTm9uZSIsCisi
IyBjICMwMDAwODMiLAorImEgYyAjODM4MTgzIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwK
KyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4u
Li4uLi4uLiMjIyMjI2EuLi4uIiwKKyIuLiMuLi4uLi4jIyMjIyMjIyMjLi4uIiwKKyIuLiMjLi4u
IyMjIy4uLi4uLiMjYS4uIiwKKyIuLiMjIy4jIyMuLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIy4u
Li4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjLi4uLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIy4uLi4u
Li4uLi4jIy4uIiwKKyIuLiMjIyMjIyMuLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIyMjLi4uLi4u
LiMjYS4uIiwKKyIuLi4uLi4uLi4uLi4uLi5hIyMjLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4jIyMu
Li4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwK
KyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisK
K2NvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXSA9IHsKKyIyMiAyMiAyIDEiLAorIi4gYyBOb25l
IiwKKyIjIGMgIzAwMDAwMCIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4u
Li4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4u
Li4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMuLi4u
Li4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4u
LiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIs
CisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsCisi
Li4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4u
Li4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4u
Iy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsCisiLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBjaGFy
ICp4cG1fc2luZ2xlX3ZpZXdbXSA9IHsKKyIyMiAyMiAyIDEiLAorIi4gYyBOb25lIiwKKyIjIGMg
IzAwMDAwMCIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIs
CisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisi
Li4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4u
Li4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4u
Li4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4u
LiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMu
Li4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4u
Li4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBjaGFyICp4cG1fc3Bs
aXRfdmlld1tdID0geworIjIyIDIyIDIgMSIsCisiLiBjIE5vbmUiLAorIiMgYyAjMDAwMDAwIiwK
KyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIu
Li4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4u
Li4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4u
Iy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4u
Li4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4u
Li4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4u
IiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwK
KyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisKK2NvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXSA9
IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAg
ICAiLAorIiAuLi4uLi4uLi4uICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAor
IiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAg
ICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuLi4uLi4uLi4u
ICIsCisiICAgICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbW9kW10gPSB7
CisiMTIgMTIgMiAxIiwKKyIgIGMgd2hpdGUiLAorIi4gYyBibGFjayIsCisiICAgICAgICAgICAg
IiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIg
LiAgIC4uICAgLiAiLAorIiAuICAuLi4uICAuICIsCisiIC4gIC4uLi4gIC4gIiwKKyIgLiAgIC4u
ICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLi4uLi4uLi4uLiAi
LAorIiAgICAgICAgICAgICJ9OworCitjb25zdCBjaGFyICp4cG1fc3ltYm9sX3llc1tdID0gewor
IjEyIDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAgICIs
CisiIC4uLi4uLi4uLi4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4g
ICAgICAuIC4gIiwKKyIgLiAgICAgLi4gLiAiLAorIiAuIC4gIC4uICAuICIsCisiIC4gLi4uLiAg
IC4gIiwKKyIgLiAgLi4gICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4uLi4uLi4uLi4gIiwK
KyIgICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdID0geworIjEy
IDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAgICIsCisi
ICAgIC4uLi4gICAgIiwKKyIgIC4uICAgIC4uICAiLAorIiAgLiAgICAgIC4gICIsCisiIC4gICAg
ICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4g
IiwKKyIgIC4gICAgICAuICAiLAorIiAgLi4gICAgLi4gICIsCisiICAgIC4uLi4gICAgIiwKKyIg
ICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX2Nob2ljZV95ZXNbXSA9IHsKKyIxMiAx
MiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAg
ICAuLi4uICAgICIsCisiICAuLiAgICAuLiAgIiwKKyIgIC4gICAgICAuICAiLAorIiAuICAgLi4g
ICAuICIsCisiIC4gIC4uLi4gIC4gIiwKKyIgLiAgLi4uLiAgLiAiLAorIiAuICAgLi4gICAuICIs
CisiICAuICAgICAgLiAgIiwKKyIgIC4uICAgIC4uICAiLAorIiAgICAuLi4uICAgICIsCisiICAg
ICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9tZW51W10gPSB7CisiMTIgMTIgMiAxIiwK
KyIgIGMgd2hpdGUiLAorIi4gYyBibGFjayIsCisiICAgICAgICAgICAgIiwKKyIgLi4uLi4uLi4u
LiAiLAorIiAuICAgICAgICAuICIsCisiIC4gLi4gICAgIC4gIiwKKyIgLiAuLi4uICAgLiAiLAor
IiAuIC4uLi4uLiAuICIsCisiIC4gLi4uLi4uIC4gIiwKKyIgLiAuLi4uICAgLiAiLAorIiAuIC4u
ICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAgICAgICAgICAg
ICJ9OworCitjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAg
YyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAuLi4uLi4uLi4uICIs
CisiIC4uLi4uLi4uLi4gIiwKKyIgLi4gIC4uLi4uLiAiLAorIiAuLiAgICAuLi4uICIsCisiIC4u
ICAgICAgLi4gIiwKKyIgLi4gICAgICAuLiAiLAorIiAuLiAgICAuLi4uICIsCisiIC4uICAuLi4u
Li4gIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuLi4uLi4uLi4uICIsCisiICAgICAgICAgICAgIn07
CisKK2NvbnN0IGNoYXIgKnhwbV9tZW51YmFja1tdID0geworIjEyIDEyIDIgMSIsCisiICBjIHdo
aXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAgICIsCisiIC4uLi4uLi4uLi4gIiwKKyIg
LiAgICAgICAgLiAiLAorIiAuICAgICAuLiAuICIsCisiIC4gICAuLi4uIC4gIiwKKyIgLiAuLi4u
Li4gLiAiLAorIiAuIC4uLi4uLiAuICIsCisiIC4gICAuLi4uIC4gIiwKKyIgLiAgICAgLi4gLiAi
LAorIiAuICAgICAgICAuICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgICAgICAgICAgICAifTsKKwor
Y29uc3QgY2hhciAqeHBtX3ZvaWRbXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisi
LiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAg
ICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIiwK
KyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIiwKKyIgICAg
ICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIn07CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGZmNjE0Ci0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuaApAQCAtMCwwICsxLDMzIEBA
CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworCisj
aWZuZGVmIElNQUdFU19ICisjZGVmaW5lIElNQUdFU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9sb2FkW107Citl
eHRlcm4gY29uc3QgY2hhciAqeHBtX3NhdmVbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fYmFj
a1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXTsKK2V4dGVybiBjb25zdCBj
aGFyICp4cG1fc2luZ2xlX3ZpZXdbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fc3BsaXRfdmll
d1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXTsKK2V4dGVybiBjb25zdCBj
aGFyICp4cG1fc3ltYm9sX21vZFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfeWVz
W107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdOworZXh0ZXJuIGNvbnN0IGNo
YXIgKnhwbV9jaG9pY2VfeWVzW107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX21lbnVbXTsKK2V4
dGVybiBjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1f
bWVudWJhY2tbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fdm9pZFtdOworCisjaWZkZWYgX19j
cGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogSU1BR0VTX0ggKi8KZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIu
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU0YzkwCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sCkBAIC0wLDAgKzEsNDcxIEBACisv
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworJW9wdGlv
biBub3N0ZGluaXQgbm95eXdyYXAgbmV2ZXItaW50ZXJhY3RpdmUgZnVsbCBlY3MKKyVvcHRpb24g
OGJpdCBub2RlZmF1bHQgeXlsaW5lbm8KKyV4IEFTU0lHTl9WQUwgSEVMUCBTVFJJTkcKKyV7CisK
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorCisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAicGFyc2VyLnRhYi5oIgor
CisjZGVmaW5lIFlZX0RFQ0wJCXN0YXRpYyBpbnQgeXlsZXgxKHZvaWQpCisKKyNkZWZpbmUgU1RB
UlRfU1RSU0laRQkxNgorCitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlp
bnQgbGluZW5vOworfSBjdXJyZW50X3BvczsKKworc3RhdGljIGludCBwcmV2X3ByZXZfdG9rZW4g
PSBUX0VPTDsKK3N0YXRpYyBpbnQgcHJldl90b2tlbiA9IFRfRU9MOworc3RhdGljIGNoYXIgKnRl
eHQ7CitzdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6ZTsKKworc3RydWN0IGJ1ZmZlciB7
CisJc3RydWN0IGJ1ZmZlciAqcGFyZW50OworCVlZX0JVRkZFUl9TVEFURSBzdGF0ZTsKK307CisK
K3N0cnVjdCBidWZmZXIgKmN1cnJlbnRfYnVmOworCitzdGF0aWMgaW50IGxhc3RfdHMsIGZpcnN0
X3RzOworCitzdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIgKmluLCBzaXplX3Qg
bik7CitzdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKTsK
K3N0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCk7CitzdGF0aWMgdm9pZCB6Y29uZl9lbmRm
aWxlKHZvaWQpOworCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCit7CisJdGV4dCA9IHht
YWxsb2MoU1RBUlRfU1RSU0laRSk7CisJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7CisJdGV4
dF9zaXplID0gMDsKKwkqdGV4dCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmco
Y29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgbmV3X3NpemUgPSB0ZXh0X3NpemUg
KyBzaXplICsgMTsKKwlpZiAobmV3X3NpemUgPiB0ZXh0X2FzaXplKSB7CisJCW5ld19zaXplICs9
IFNUQVJUX1NUUlNJWkUgLSAxOworCQluZXdfc2l6ZSAmPSAtU1RBUlRfU1RSU0laRTsKKwkJdGV4
dCA9IHhyZWFsbG9jKHRleHQsIG5ld19zaXplKTsKKwkJdGV4dF9hc2l6ZSA9IG5ld19zaXplOwor
CX0KKwltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBzaXplKTsKKwl0ZXh0X3NpemUgKz0g
c2l6ZTsKKwl0ZXh0W3RleHRfc2l6ZV0gPSAwOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19zdHJp
bmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwl0ZXh0ID0geG1hbGxvYyhzaXplICsg
MSk7CisJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7CisJdGV4dFtzaXplXSA9IDA7Cit9CisKK3N0
YXRpYyB2b2lkIHdhcm5faWdub3JlZF9jaGFyYWN0ZXIoY2hhciBjaHIpCit7CisJZnByaW50Zihz
dGRlcnIsCisJICAgICAgICAiJXM6JWQ6d2FybmluZzogaWdub3JpbmcgdW5zdXBwb3J0ZWQgY2hh
cmFjdGVyICclYydcbiIsCisJICAgICAgICBjdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vLCBj
aHIpOworfQorJX0KKworbglbQS1aYS16MC05Xy1dCisKKyUlCisJaW50IHN0ciA9IDA7CisJaW50
IHRzLCBpOworCisjLioJCQkvKiBpZ25vcmUgY29tbWVudCAqLworWyBcdF0qCQkJLyogd2hpdGVz
cGFjZXMgKi8KK1xcXG4JCQkvKiBlc2NhcGVkIG5ldyBsaW5lICovCitcbgkJCXJldHVybiBUX0VP
TDsKKyJhbGxub2NvbmZpZ195IgkJcmV0dXJuIFRfQUxMTk9DT05GSUdfWTsKKyJib29sIgkJCXJl
dHVybiBUX0JPT0w7CisiY2hvaWNlIgkJcmV0dXJuIFRfQ0hPSUNFOworImNvbW1lbnQiCQlyZXR1
cm4gVF9DT01NRU5UOworImNvbmZpZyIJCXJldHVybiBUX0NPTkZJRzsKKyJkZWZfYm9vbCIJCXJl
dHVybiBUX0RFRl9CT09MOworImRlZl90cmlzdGF0ZSIJCXJldHVybiBUX0RFRl9UUklTVEFURTsK
KyJkZWZhdWx0IgkJcmV0dXJuIFRfREVGQVVMVDsKKyJkZWZjb25maWdfbGlzdCIJcmV0dXJuIFRf
REVGQ09ORklHX0xJU1Q7CisiZGVwZW5kcyIJCXJldHVybiBUX0RFUEVORFM7CisiZW5kY2hvaWNl
IgkJcmV0dXJuIFRfRU5EQ0hPSUNFOworImVuZGlmIgkJCXJldHVybiBUX0VORElGOworImVuZG1l
bnUiCQlyZXR1cm4gVF9FTkRNRU5VOworImhlbHAifCItLS1oZWxwLS0tIglyZXR1cm4gVF9IRUxQ
OworImhleCIJCQlyZXR1cm4gVF9IRVg7CisiaWYiCQkJcmV0dXJuIFRfSUY7CisiaW1wbHkiCQkJ
cmV0dXJuIFRfSU1QTFk7CisiaW50IgkJCXJldHVybiBUX0lOVDsKKyJtYWlubWVudSIJCXJldHVy
biBUX01BSU5NRU5VOworIm1lbnUiCQkJcmV0dXJuIFRfTUVOVTsKKyJtZW51Y29uZmlnIgkJcmV0
dXJuIFRfTUVOVUNPTkZJRzsKKyJtb2R1bGVzIgkJcmV0dXJuIFRfTU9EVUxFUzsKKyJvbiIJCQly
ZXR1cm4gVF9PTjsKKyJvcHRpb24iCQlyZXR1cm4gVF9PUFRJT047Cisib3B0aW9uYWwiCQlyZXR1
cm4gVF9PUFRJT05BTDsKKyJwcm9tcHQiCQlyZXR1cm4gVF9QUk9NUFQ7CisicmFuZ2UiCQkJcmV0
dXJuIFRfUkFOR0U7Cisic2VsZWN0IgkJcmV0dXJuIFRfU0VMRUNUOworInNvdXJjZSIJCXJldHVy
biBUX1NPVVJDRTsKKyJzdHJpbmciCQlyZXR1cm4gVF9TVFJJTkc7CisidHJpc3RhdGUiCQlyZXR1
cm4gVF9UUklTVEFURTsKKyJ2aXNpYmxlIgkJcmV0dXJuIFRfVklTSUJMRTsKKyJ8fCIJCQlyZXR1
cm4gVF9PUjsKKyImJiIJCQlyZXR1cm4gVF9BTkQ7CisiPSIJCQlyZXR1cm4gVF9FUVVBTDsKKyIh
PSIJCQlyZXR1cm4gVF9VTkVRVUFMOworIjwiCQkJcmV0dXJuIFRfTEVTUzsKKyI8PSIJCQlyZXR1
cm4gVF9MRVNTX0VRVUFMOworIj4iCQkJcmV0dXJuIFRfR1JFQVRFUjsKKyI+PSIJCQlyZXR1cm4g
VF9HUkVBVEVSX0VRVUFMOworIiEiCQkJcmV0dXJuIFRfTk9UOworIigiCQkJcmV0dXJuIFRfT1BF
Tl9QQVJFTjsKKyIpIgkJCXJldHVybiBUX0NMT1NFX1BBUkVOOworIjo9IgkJCXJldHVybiBUX0NP
TE9OX0VRVUFMOworIis9IgkJCXJldHVybiBUX1BMVVNfRVFVQUw7CitcInxcJwkJCXsKKwkJCQlz
dHIgPSB5eXRleHRbMF07CisJCQkJbmV3X3N0cmluZygpOworCQkJCUJFR0lOKFNUUklORyk7CisJ
CQl9Cit7bn0rCQkJeworCQkJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCQkJeXls
dmFsLnN0cmluZyA9IHRleHQ7CisJCQkJcmV0dXJuIFRfV09SRDsKKwkJCX0KKyh7bn18JCkrCQl7
CisJCQkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgJyQnICovCisJCQkJeXls
dmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRleHQsIHl5bGVuZyk7CisJCQkJaWYgKHN0cmxl
bih5eWx2YWwuc3RyaW5nKSkKKwkJCQkJcmV0dXJuIFRfV09SRDsKKwkJCQlmcmVlKHl5bHZhbC5z
dHJpbmcpOworCQkJfQorLgkJCXdhcm5faWdub3JlZF9jaGFyYWN0ZXIoKnl5dGV4dCk7CisKKzxB
U1NJR05fVkFMPnsKKwlbXls6Ymxhbms6XVxuXSsuKgl7CisJCWFsbG9jX3N0cmluZyh5eXRleHQs
IHl5bGVuZyk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9BU1NJR05fVkFM
OworCX0KKwlcbgl7IEJFR0lOKElOSVRJQUwpOyByZXR1cm4gVF9FT0w7IH0KKwkuCit9CisKKzxT
VFJJTkc+eworCSIkIi4qCWFwcGVuZF9leHBhbmRlZF9zdHJpbmcoeXl0ZXh0KTsKKwlbXiQnIlxc
XG5dKwl7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCX0KKwlcXC4/CXsKKwkJ
YXBwZW5kX3N0cmluZyh5eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsKKwl9CisJXCd8XCIJeworCQlp
ZiAoc3RyID09IHl5dGV4dFswXSkgeworCQkJQkVHSU4oSU5JVElBTCk7CisJCQl5eWx2YWwuc3Ry
aW5nID0gdGV4dDsKKwkJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJCX0gZWxzZQorCQkJYXBwZW5k
X3N0cmluZyh5eXRleHQsIDEpOworCX0KKwlcbgl7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiVz
OiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5ncyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJemNv
bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJCXVucHV0KCdcbicpOworCQlCRUdJTihJ
TklUSUFMKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkRfUVVPVEU7
CisJfQorCTw8RU9GPj4JeworCQlCRUdJTihJTklUSUFMKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRl
eHQ7CisJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJfQorfQorCis8SEVMUD57CisJWyBcdF0rCXsK
KwkJdHMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgeXlsZW5nOyBpKyspIHsKKwkJCWlmICh5eXRl
eHRbaV0gPT0gJ1x0JykKKwkJCQl0cyA9ICh0cyAmIH43KSArIDg7CisJCQllbHNlCisJCQkJdHMr
KzsKKwkJfQorCQlsYXN0X3RzID0gdHM7CisJCWlmIChmaXJzdF90cykgeworCQkJaWYgKHRzIDwg
Zmlyc3RfdHMpIHsKKwkJCQl6Y29uZl9lbmRoZWxwKCk7CisJCQkJcmV0dXJuIFRfSEVMUFRFWFQ7
CisJCQl9CisJCQl0cyAtPSBmaXJzdF90czsKKwkJCXdoaWxlICh0cyA+IDgpIHsKKwkJCQlhcHBl
bmRfc3RyaW5nKCIgICAgICAgICIsIDgpOworCQkJCXRzIC09IDg7CisJCQl9CisJCQlhcHBlbmRf
c3RyaW5nKCIgICAgICAgICIsIHRzKTsKKwkJfQorCX0KKwlbIFx0XSpcbi9bXiBcdFxuXSB7CisJ
CXpjb25mX2VuZGhlbHAoKTsKKwkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJfQorCVsgXHRdKlxuCXsK
KwkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsKKwl9CisJW14gXHRcbl0uKiB7CisJCXdoaWxlICh5
eWxlbmcpIHsKKwkJCWlmICgoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnICcpICYmICh5eXRleHRbeXls
ZW5nLTFdICE9ICdcdCcpKQorCQkJCWJyZWFrOworCQkJeXlsZW5nLS07CisJCX0KKwkJYXBwZW5k
X3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCWlmICghZmlyc3RfdHMpCisJCQlmaXJzdF90cyA9
IGxhc3RfdHM7CisJfQorCTw8RU9GPj4JeworCQl6Y29uZl9lbmRoZWxwKCk7CisJCXJldHVybiBU
X0hFTFBURVhUOworCX0KK30KKworPDxFT0Y+Pgl7CisJQkVHSU4oSU5JVElBTCk7CisKKwlpZiAo
cHJldl90b2tlbiAhPSBUX0VPTCAmJiBwcmV2X3Rva2VuICE9IFRfSEVMUFRFWFQpCisJCWZwcmlu
dGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogbm8gbmV3IGxpbmUgYXQgZW5kIG9mIGZpbGVcbiIs
CisJCQljdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vKTsKKworCWlmIChjdXJyZW50X2ZpbGUp
IHsKKwkJemNvbmZfZW5kZmlsZSgpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCWZjbG9zZSh5eWlu
KTsKKwl5eXRlcm1pbmF0ZSgpOworfQorCislJQorCisvKiBzZWNvbmQgc3RhZ2UgbGV4ZXIgKi8K
K2ludCB5eWxleCh2b2lkKQoreworCWludCB0b2tlbjsKKworcmVwZWF0OgorCXRva2VuID0geXls
ZXgxKCk7CisKKwlpZiAocHJldl90b2tlbiA9PSBUX0VPTCB8fCBwcmV2X3Rva2VuID09IFRfSEVM
UFRFWFQpIHsKKwkJaWYgKHRva2VuID09IFRfRU9MKSB7CisJCQkvKiBEbyBub3QgcGFzcyB1bm5l
ZWRlZCBUX0VPTCB0byB0aGUgcGFyc2VyLiAqLworCQkJZ290byByZXBlYXQ7CisJCX0gZWxzZSB7
CisJCQkvKgorCQkJICogRm9yIHRoZSBwYXJzZXIsIHVwZGF0ZSBmaWxlL2xpbmVubyBhdCB0aGUg
Zmlyc3QgdG9rZW4KKwkJCSAqIG9mIGVhY2ggc3RhdGVtZW50LiBHZW5lcmFsbHksIFxuIGlzIGEg
c3RhdGVtZW50CisJCQkgKiB0ZXJtaW5hdG9yIGluIEtjb25maWcsIGJ1dCBpdCBpcyBub3QgYWx3
YXlzIHRydWUKKwkJCSAqIGJlY2F1c2UgXG4gY291bGQgYmUgZXNjYXBlZCBieSBhIGJhY2tzbGFz
aC4KKwkJCSAqLworCQkJY3VycmVudF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwkJCWN1cnJl
bnRfcG9zLmxpbmVubyA9IHl5bGluZW5vOworCQl9CisJfQorCisJaWYgKHByZXZfcHJldl90b2tl
biA9PSBUX0VPTCAmJiBwcmV2X3Rva2VuID09IFRfV09SRCAmJgorCSAgICAodG9rZW4gPT0gVF9F
UVVBTCB8fCB0b2tlbiA9PSBUX0NPTE9OX0VRVUFMIHx8IHRva2VuID09IFRfUExVU19FUVVBTCkp
CisJCUJFR0lOKEFTU0lHTl9WQUwpOworCisJcHJldl9wcmV2X3Rva2VuID0gcHJldl90b2tlbjsK
KwlwcmV2X3Rva2VuID0gdG9rZW47CisKKwlyZXR1cm4gdG9rZW47Cit9CisKK3N0YXRpYyBjaGFy
ICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNpemVfdCBuKQoreworCWNoYXIgKm91dDsK
KwlpbnQgYzsKKwljaGFyIGMyOworCWNvbnN0IGNoYXIgKnJlc3QsICplbmQ7CisKKwluZXdfc3Ry
aW5nKCk7CisJYXBwZW5kX3N0cmluZyhpbiwgbik7CisKKwkvKiBnZXQgdGhlIHdob2xlIGxpbmUg
YmVjYXVzZSB3ZSBkbyBub3Qga25vdyB0aGUgZW5kIG9mIHRva2VuLiAqLworCXdoaWxlICgoYyA9
IGlucHV0KCkpICE9IEVPRikgeworCQlpZiAoYyA9PSAnXG4nKSB7CisJCQl1bnB1dChjKTsKKwkJ
CWJyZWFrOworCQl9CisJCWMyID0gYzsKKwkJYXBwZW5kX3N0cmluZygmYzIsIDEpOworCX0KKwor
CXJlc3QgPSB0ZXh0OworCW91dCA9IGV4cGFuZF9vbmVfdG9rZW4oJnJlc3QpOworCisJLyogcHVz
aCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRoZSBpbnB1dCBzdHJlYW0gKi8KKwllbmQgPSBy
ZXN0ICsgc3RybGVuKHJlc3QpOworCXdoaWxlIChlbmQgPiByZXN0KQorCQl1bnB1dCgqLS1lbmQp
OworCisJZnJlZSh0ZXh0KTsKKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZF9leHBhbmRlZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKmVuZDsK
KwljaGFyICpyZXM7CisKKwlzdHIrKzsKKworCXJlcyA9IGV4cGFuZF9kb2xsYXIoJnN0cik7CisK
KwkvKiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLwor
CWVuZCA9IHN0ciArIHN0cmxlbihzdHIpOworCXdoaWxlIChlbmQgPiBzdHIpCisJCXVucHV0KCot
LWVuZCk7CisKKwlhcHBlbmRfc3RyaW5nKHJlcywgc3RybGVuKHJlcykpOworCisJZnJlZShyZXMp
OworfQorCit2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKQoreworCW5ld19zdHJpbmcoKTsKKwls
YXN0X3RzID0gZmlyc3RfdHMgPSAwOworCUJFR0lOKEhFTFApOworfQorCitzdGF0aWMgdm9pZCB6
Y29uZl9lbmRoZWxwKHZvaWQpCit7CisJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJQkVHSU4oSU5J
VElBTCk7Cit9CisKKworLyoKKyAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBmaWxlIHdpdGggZm9s
bG93aW5nIG5hbWVzOgorICogLi9uYW1lCisgKiAkKHNyY3RyZWUpL25hbWUKKyAqIFRoZSBsYXR0
ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0cmVlCisgKiB3aGVu
IGNvbXBpbGluZyB0aGUga2VybmVsLgorICogUmV0dXJuIE5VTEwgaWYgZmlsZSBpcyBub3QgZm91
bmQuCisgKi8KK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAq
ZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKKwlGSUxFICpmOworCisJZiA9IGZvcGVuKG5hbWUs
ICJyIik7CisJaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcvJykgeworCQll
bnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJCWlmIChlbnYpIHsKKwkJCXNucHJpbnRmKGZ1bGxuYW1l
LCBzaXplb2YoZnVsbG5hbWUpLAorCQkJCSAiJXMvJXMiLCBlbnYsIG5hbWUpOworCQkJZiA9IGZv
cGVuKGZ1bGxuYW1lLCAiciIpOworCQl9CisJfQorCXJldHVybiBmOworfQorCit2b2lkIHpjb25m
X2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJeXlpbiA9IHpjb25mX2ZvcGVuKG5hbWUp
OworCWlmICgheXlpbikgeworCQlmcHJpbnRmKHN0ZGVyciwgImNhbid0IGZpbmQgZmlsZSAlc1xu
IiwgbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJY3VycmVudF9idWYgPSB4bWFsbG9jKHNpemVv
ZigqY3VycmVudF9idWYpKTsKKwltZW1zZXQoY3VycmVudF9idWYsIDAsIHNpemVvZigqY3VycmVu
dF9idWYpKTsKKworCWN1cnJlbnRfZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOworCXl5bGluZW5v
ID0gMTsKK30KKwordm9pZCB6Y29uZl9uZXh0ZmlsZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0
cnVjdCBmaWxlICppdGVyOworCXN0cnVjdCBmaWxlICpmaWxlID0gZmlsZV9sb29rdXAobmFtZSk7
CisJc3RydWN0IGJ1ZmZlciAqYnVmID0geG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCW1lbXNldChi
dWYsIDAsIHNpemVvZigqYnVmKSk7CisKKwljdXJyZW50X2J1Zi0+c3RhdGUgPSBZWV9DVVJSRU5U
X0JVRkZFUjsKKwl5eWluID0gemNvbmZfZm9wZW4oZmlsZS0+bmFtZSk7CisJaWYgKCF5eWluKSB7
CisJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGNhbid0IG9wZW4gZmlsZSBcIiVzXCJcbiIsCisJ
CQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBmaWxlLT5uYW1lKTsKKwkJZXhpdCgx
KTsKKwl9CisJeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9jcmVhdGVfYnVmZmVyKHl5aW4sIFlZX0JV
Rl9TSVpFKSk7CisJYnVmLT5wYXJlbnQgPSBjdXJyZW50X2J1ZjsKKwljdXJyZW50X2J1ZiA9IGJ1
ZjsKKworCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5lbm87CisJZmlsZS0+cGFyZW50ID0g
Y3VycmVudF9maWxlOworCisJZm9yIChpdGVyID0gY3VycmVudF9maWxlOyBpdGVyOyBpdGVyID0g
aXRlci0+cGFyZW50KSB7CisJCWlmICghc3RyY21wKGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKSB7
CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC5c
biIKKwkJCQkiSW5jbHVzaW9uIHBhdGg6XG4iCisJCQkJIiAgY3VycmVudCBmaWxlIDogJXNcbiIs
IGZpbGUtPm5hbWUpOworCQkJaXRlciA9IGZpbGU7CisJCQlkbyB7CisJCQkJaXRlciA9IGl0ZXIt
PnBhcmVudDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgaW5jbHVkZWQgZnJvbTogJXM6JWRcbiIs
CisJCQkJCWl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubyAtIDEpOworCQkJfSB3aGlsZSAoc3RyY21w
KGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwl5eWxp
bmVubyA9IDE7CisJY3VycmVudF9maWxlID0gZmlsZTsKK30KKworc3RhdGljIHZvaWQgemNvbmZf
ZW5kZmlsZSh2b2lkKQoreworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKworCWN1cnJlbnRfZmls
ZSA9IGN1cnJlbnRfZmlsZS0+cGFyZW50OworCWlmIChjdXJyZW50X2ZpbGUpCisJCXl5bGluZW5v
ID0gY3VycmVudF9maWxlLT5saW5lbm87CisKKwlwYXJlbnQgPSBjdXJyZW50X2J1Zi0+cGFyZW50
OworCWlmIChwYXJlbnQpIHsKKwkJZmNsb3NlKHl5aW4pOworCQl5eV9kZWxldGVfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSKTsKKwkJeXlfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQtPnN0YXRlKTsK
Kwl9CisJZnJlZShjdXJyZW50X2J1Zik7CisJY3VycmVudF9idWYgPSBwYXJlbnQ7Cit9CisKK2lu
dCB6Y29uZl9saW5lbm8odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9wb3MubGluZW5vOworfQor
Citjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfcG9z
LmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7Cit9CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2IyMzcKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaApAQCAtMCwwICsxLDEzMiBAQAorLyog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNpZm5kZWYgTElTVF9ICisjZGVm
aW5lIExJU1RfSAorCisvKgorICogQ29waWVkIGZyb20gaW5jbHVkZS9saW51eC8uLi4KKyAqLwor
CisjdW5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVf
dCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCisKKy8qKgorICogY29udGFpbmVyX29mIC0gY2FzdCBh
IG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvdXQgdG8gdGhlIGNvbnRhaW5pbmcgc3RydWN0dXJlCisg
KiBAcHRyOiAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4KKyAqIEB0eXBlOiAgICAg
ICB0aGUgdHlwZSBvZiB0aGUgY29udGFpbmVyIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLgor
ICogQG1lbWJlcjogICAgIHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIgd2l0aGluIHRoZSBzdHJ1Y3Qu
CisgKgorICovCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsgICAg
ICAgICAgICAgICAgICAgICAgXAorCWNvbnN0IHR5cGVvZiggKCh0eXBlICopMCktPm1lbWJlciAp
ICpfX21wdHIgPSAocHRyKTsgICAgXAorCSh0eXBlICopKCAoY2hhciAqKV9fbXB0ciAtIG9mZnNl
dG9mKHR5cGUsbWVtYmVyKSApO30pCisKKworc3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxp
c3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9OworCisKKyNkZWZpbmUgTElTVF9IRUFEX0lOSVQobmFt
ZSkgeyAmKG5hbWUpLCAmKG5hbWUpIH0KKworI2RlZmluZSBMSVNUX0hFQUQobmFtZSkgXAorCXN0
cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5hbWUpCisKKy8qKgorICogbGlz
dF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5CisgKiBAcHRyOgl0aGUgJnN0
cnVjdCBsaXN0X2hlYWQgcG9pbnRlci4KKyAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgc3RydWN0
IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9o
ZWFkIHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxpc3RfZW50cnkocHRyLCB0eXBl
LCBtZW1iZXIpIFwKKwljb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpCisKKy8qKgorICog
bGlzdF9mb3JfZWFjaF9lbnRyeQktCWl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKKyAq
IEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhl
IGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X2hl
YWQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeShw
b3MsIGhlYWQsIG1lbWJlcikJCQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5l
eHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFk
KTsgCVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpw
b3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAtIGl0ZXJh
dGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBl
bnRyeQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBu
OgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJ
dGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0
X2hlYWQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRy
eV9zYWZlKHBvcywgbiwgaGVhZCwgbWVtYmVyKQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnko
KGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlciksCVwKKwkJbiA9IGxpc3RfZW50cnko
cG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJICAgICAmcG9zLT5t
ZW1iZXIgIT0gKGhlYWQpOwkJCQkJXAorCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+
bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9lbXB0eSAt
IHRlc3RzIHdoZXRoZXIgYSBsaXN0IGlzIGVtcHR5CisgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVz
dC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShjb25zdCBzdHJ1Y3QgbGlzdF9o
ZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cit9CisKKy8qCisgKiBJ
bnNlcnQgYSBuZXcgZW50cnkgYmV0d2VlbiB0d28ga25vd24gY29uc2VjdXRpdmUgZW50cmllcy4K
KyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJl
IHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQorICovCitzdGF0aWMg
aW5saW5lIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpfbmV3LAorCQkJICAgICAg
c3RydWN0IGxpc3RfaGVhZCAqcHJldiwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQp
Cit7CisJbmV4dC0+cHJldiA9IF9uZXc7CisJX25ldy0+bmV4dCA9IG5leHQ7CisJX25ldy0+cHJl
diA9IHByZXY7CisJcHJldi0+bmV4dCA9IF9uZXc7Cit9CisKKy8qKgorICogbGlzdF9hZGRfdGFp
bCAtIGFkZCBhIG5ldyBlbnRyeQorICogQG5ldzogbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBA
aGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBiZWZvcmUKKyAqCisgKiBJbnNlcnQgYSBuZXcgZW50
cnkgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBs
ZW1lbnRpbmcgcXVldWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfdGFpbChz
dHJ1Y3QgbGlzdF9oZWFkICpfbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCV9fbGlz
dF9hZGQoX25ldywgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKKy8qCisgKiBEZWxldGUgYSBsaXN0
IGVudHJ5IGJ5IG1ha2luZyB0aGUgcHJldi9uZXh0IGVudHJpZXMKKyAqIHBvaW50IHRvIGVhY2gg
b3RoZXIuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlv
biB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSEKKyAqLwor
c3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqcHJldiwgc3Ry
dWN0IGxpc3RfaGVhZCAqbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0
ID0gbmV4dDsKK30KKworI2RlZmluZSBMSVNUX1BPSVNPTjEgICgodm9pZCAqKSAweDAwMTAwMTAw
KQorI2RlZmluZSBMSVNUX1BPSVNPTjIgICgodm9pZCAqKSAweDAwMjAwMjAwKQorLyoqCisgKiBs
aXN0X2RlbCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0LgorICogQGVudHJ5OiB0aGUgZWxlbWVu
dCB0byBkZWxldGUgZnJvbSB0aGUgbGlzdC4KKyAqIE5vdGU6IGxpc3RfZW1wdHkoKSBvbiBlbnRy
eSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLCB0aGUgZW50cnkgaXMKKyAqIGluIGFu
IHVuZGVmaW5lZCBzdGF0ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVj
dCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5u
ZXh0KTsKKwllbnRyeS0+bmV4dCA9IChzdHJ1Y3QgbGlzdF9oZWFkKilMSVNUX1BPSVNPTjE7CisJ
ZW50cnktPnByZXYgPSAoc3RydWN0IGxpc3RfaGVhZCopTElTVF9QT0lTT04yOworfQorI2VuZGlm
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9sa2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM3NjU4Ci0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaApAQCAtMCwwICsxLDE1
OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8K
KworI2lmbmRlZiBMS0NfSAorI2RlZmluZSBMS0NfSAorCisjaW5jbHVkZSAiZXhwci5oIgorCisj
aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlICJsa2Nf
cHJvdG8uaCIKKworI2RlZmluZSBTUkNUUkVFICJzcmN0cmVlIgorCisjaWZuZGVmIFBBQ0tBR0UK
KyNkZWZpbmUgUEFDS0FHRSAibGludXgiCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfCisjZGVm
aW5lIENPTkZJR18gIkNPTkZJR18iCisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAq
Q09ORklHX3ByZWZpeCh2b2lkKQoreworCXJldHVybiBnZXRlbnYoICJDT05GSUdfIiApID86IENP
TkZJR187Cit9CisjdW5kZWYgQ09ORklHXworI2RlZmluZSBDT05GSUdfIENPTkZJR19wcmVmaXgo
KQorCitlbnVtIGNvbmZfZGVmX21vZGUgeworCWRlZl9kZWZhdWx0LAorCWRlZl95ZXMsCisJZGVm
X21vZCwKKwlkZWZfbm8sCisJZGVmX3JhbmRvbQorfTsKKworZXh0ZXJuIGludCB5eWxpbmVubzsK
K3ZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCk7Cit2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKTsK
K0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB6Y29uZl9pbml0c2Nh
bihjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFt
ZSk7CitpbnQgemNvbmZfbGluZW5vKHZvaWQpOworY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2
b2lkKTsKKworLyogY29uZmRhdGEuYyAqLworY29uc3QgY2hhciAqY29uZl9nZXRfY29uZmlnbmFt
ZSh2b2lkKTsKK2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCk7Cit2b2lkIHN5
bV9zZXRfY2hhbmdlX2NvdW50KGludCBjb3VudCk7Cit2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50
KGludCBjb3VudCk7Citib29sIGNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVm
X21vZGUgbW9kZSk7Cit2b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpj
c3ltKTsKKworLyogY29uZmRhdGEuYyBhbmQgZXhwci5jICovCitzdGF0aWMgaW5saW5lIHZvaWQg
eGZ3cml0ZShjb25zdCB2b2lkICpzdHIsIHNpemVfdCBsZW4sIHNpemVfdCBjb3VudCwgRklMRSAq
b3V0KQoreworCWFzc2VydChsZW4gIT0gMCk7CisKKwlpZiAoZndyaXRlKHN0ciwgbGVuLCBjb3Vu
dCwgb3V0KSAhPSBjb3VudCkKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbiB3cml0aW5nIG9y
IGVuZCBvZiBmaWxlLlxuIik7Cit9CisKKy8qIG1lbnUuYyAqLwordm9pZCBfbWVudV9pbml0KHZv
aWQpOwordm9pZCBtZW51X3dhcm4oc3RydWN0IG1lbnUgKm1lbnUsIGNvbnN0IGNoYXIgKmZtdCwg
Li4uKTsKK3N0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOwordm9pZCBtZW51X2VuZF9t
ZW51KHZvaWQpOwordm9pZCBtZW51X2FkZF9lbnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwordm9p
ZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVfYWRkX3Zpc2liaWxp
dHkoc3RydWN0IGV4cHIgKmRlcCk7CitzdHJ1Y3QgcHJvcGVydHkgKm1lbnVfYWRkX3Byb21wdChl
bnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHByICpkZXApOwordm9p
ZCBtZW51X2FkZF9leHByKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBleHByICpleHByLCBz
dHJ1Y3QgZXhwciAqZGVwKTsKK3ZvaWQgbWVudV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5
cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVfYWRk
X29wdGlvbl9tb2R1bGVzKHZvaWQpOwordm9pZCBtZW51X2FkZF9vcHRpb25fZGVmY29uZmlnX2xp
c3Qodm9pZCk7Cit2b2lkIG1lbnVfYWRkX29wdGlvbl9hbGxub2NvbmZpZ195KHZvaWQpOwordm9p
ZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQpOwordm9pZCBtZW51X3NldF90eXBl
KGludCB0eXBlKTsKKworLyogdXRpbC5jICovCitzdHJ1Y3QgZmlsZSAqZmlsZV9sb29rdXAoY29u
c3QgY2hhciAqbmFtZSk7Cit2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgKnhjYWxs
b2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7Cit2b2lkICp4cmVhbGxvYyh2b2lkICpwLCBz
aXplX3Qgc2l6ZSk7CitjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnMpOworY2hhciAqeHN0cm5k
dXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pOworCisvKiBsZXhlci5sICovCitpbnQgeXlsZXgo
dm9pZCk7CisKK3N0cnVjdCBnc3RyIHsKKwlzaXplX3QgbGVuOworCWNoYXIgICpzOworCS8qCisJ
KiB3aGVuIG1heF93aWR0aCBpcyBub3QgemVybyBsb25nIGxpbmVzIGluIHN0cmluZyBzIChpZiBh
bnkpIGdldAorCSogd3JhcHBlZCBub3QgdG8gZXhjZWVkIHRoZSBtYXhfd2lkdGggdmFsdWUKKwkq
LworCWludCBtYXhfd2lkdGg7Cit9Oworc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKTsKK3ZvaWQg
c3RyX2ZyZWUoc3RydWN0IGdzdHIgKmdzKTsKK3ZvaWQgc3RyX2FwcGVuZChzdHJ1Y3QgZ3N0ciAq
Z3MsIGNvbnN0IGNoYXIgKnMpOwordm9pZCBzdHJfcHJpbnRmKHN0cnVjdCBnc3RyICpncywgY29u
c3QgY2hhciAqZm10LCAuLi4pOworY29uc3QgY2hhciAqc3RyX2dldChzdHJ1Y3QgZ3N0ciAqZ3Mp
OworCisvKiBzeW1ib2wuYyAqLwordm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpOworc3Ry
dWN0IHN5bWJvbCAqc3ltX2Nob2ljZV9kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSk7CitzdHJ1
Y3QgcHJvcGVydHkgKnN5bV9nZXRfcmFuZ2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworY29u
c3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3Ry
dWN0IHN5bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBw
cm9wZXJ0eSAqcHJvcF9hbGxvYyhlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpz
eW0pOworc3RydWN0IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJv
cCk7CisKK3N0YXRpYyBpbmxpbmUgdHJpc3RhdGUgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzdHJ1
Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+Y3Vyci50cmk7Cit9CisKKworc3RhdGlj
IGlubGluZSBzdHJ1Y3Qgc3ltYm9sICpzeW1fZ2V0X2Nob2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9s
ICpzeW0pCit7CisJcmV0dXJuIChzdHJ1Y3Qgc3ltYm9sICopc3ltLT5jdXJyLnZhbDsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHN5bV9zZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKmNo
LCBzdHJ1Y3Qgc3ltYm9sICpjaHZhbCkKK3sKKwlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1
ZShjaHZhbCwgeWVzKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9pc19jaG9pY2Uoc3Ry
dWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRSA/
IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9pc19jaG9pY2VfdmFs
dWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0NI
T0lDRVZBTCA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9pc19v
cHRpb25hbChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1C
T0xfT1BUSU9OQUwgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzeW1f
aGFzX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT5mbGFncyAmIFNZ
TUJPTF9ERUZfVVNFUiA/IHRydWUgOiBmYWxzZTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKworI2VuZGlmIC8qIExLQ19IICovCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L2xrY19wcm90by5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmMyNjc1Ci0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaApAQCAtMCwwICsxLDY2IEBACisvKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgor
CisvKiBjb25mZGF0YS5jICovCit2b2lkIGNvbmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSk7Citp
bnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGNvbmZfcmVhZF9zaW1wbGUoY29u
c3QgY2hhciAqbmFtZSwgaW50KTsKK2ludCBjb25mX3dyaXRlX2RlZmNvbmZpZyhjb25zdCBjaGFy
ICpuYW1lKTsKK2ludCBjb25mX3dyaXRlKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGNvbmZfd3Jp
dGVfYXV0b2NvbmYoaW50IG92ZXJ3cml0ZSk7Citib29sIGNvbmZfZ2V0X2NoYW5nZWQodm9pZCk7
Cit2b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZuKSh2b2lkKSk7Cit2b2lk
IGNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2sodm9pZCAoKmZuKShjb25zdCBjaGFyICpzKSk7CisK
Ky8qIG1lbnUuYyAqLworZXh0ZXJuIHN0cnVjdCBtZW51IHJvb3RtZW51OworCitib29sIG1lbnVf
aXNfZW1wdHkoc3RydWN0IG1lbnUgKm1lbnUpOworYm9vbCBtZW51X2lzX3Zpc2libGUoc3RydWN0
IG1lbnUgKm1lbnUpOworYm9vbCBtZW51X2hhc19wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpOwor
Y29uc3QgY2hhciAqIG1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSk7CitzdHJ1Y3Qg
bWVudSAqIG1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSk7CitzdHJ1Y3QgbWVu
dSAqIG1lbnVfZ2V0X3BhcmVudF9tZW51KHN0cnVjdCBtZW51ICptZW51KTsKK2Jvb2wgbWVudV9o
YXNfaGVscChzdHJ1Y3QgbWVudSAqbWVudSk7Citjb25zdCBjaGFyICogbWVudV9nZXRfaGVscChz
dHJ1Y3QgbWVudSAqbWVudSk7CitzdHJ1Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0cihzdHJ1Y3Qg
c3ltYm9sICoqc3ltX2Fyciwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7Cit2b2lkIG1lbnVfZ2V0
X2V4dF9oZWxwKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCk7CisKKy8qIHN5
bWJvbC5jICovCitleHRlcm4gc3RydWN0IHN5bWJvbCAqIHN5bWJvbF9oYXNoW1NZTUJPTF9IQVNI
U0laRV07CisKK3N0cnVjdCBzeW1ib2wgKiBzeW1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBmbGFncyk7CitzdHJ1Y3Qgc3ltYm9sICogc3ltX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7Citj
b25zdCBjaGFyICogc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciAqaW4pOworc3Ry
dWN0IHN5bWJvbCAqKiBzeW1fcmVfc2VhcmNoKGNvbnN0IGNoYXIgKnBhdHRlcm4pOworY29uc3Qg
Y2hhciAqIHN5bV90eXBlX25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlKTsKK3ZvaWQgc3ltX2Nh
bGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKTsKK2VudW0gc3ltYm9sX3R5cGUgc3ltX2dldF90
eXBlKHN0cnVjdCBzeW1ib2wgKnN5bSk7Citib29sIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uo
c3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSk7Citib29sIHN5bV9zZXRfdHJpc3RhdGVf
dmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSk7Cit0cmlzdGF0ZSBzeW1fdG9n
Z2xlX3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7Citib29sIHN5bV9zdHJpbmdf
dmFsaWQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpOworYm9vbCBzeW1f
c3RyaW5nX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cik7
Citib29sIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hh
ciAqbmV3dmFsKTsKK2Jvb2wgc3ltX2lzX2NoYW5nYWJsZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwor
c3RydWN0IHByb3BlcnR5ICogc3ltX2dldF9jaG9pY2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0p
OworY29uc3QgY2hhciAqIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7
CisKK2NvbnN0IGNoYXIgKiBwcm9wX2dldF90eXBlX25hbWUoZW51bSBwcm9wX3R5cGUgdHlwZSk7
CisKKy8qIHByZXByb2Nlc3MuYyAqLworZW51bSB2YXJpYWJsZV9mbGF2b3IgeworCVZBUl9TSU1Q
TEUsCisJVkFSX1JFQ1VSU0lWRSwKKwlWQVJfQVBQRU5ELAorfTsKK3ZvaWQgZW52X3dyaXRlX2Rl
cChGSUxFICpmLCBjb25zdCBjaGFyICphdXRvX2NvbmZfbmFtZSk7Cit2b2lkIHZhcmlhYmxlX2Fk
ZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJICBlbnVtIHZhcmlhYmxl
X2ZsYXZvciBmbGF2b3IpOwordm9pZCB2YXJpYWJsZV9hbGxfZGVsKHZvaWQpOworY2hhciAqZXhw
YW5kX3N0cmluZyhjb25zdCBjaGFyICppbik7CitjaGFyICpleHBhbmRfZG9sbGFyKGNvbnN0IGNo
YXIgKipzdHIpOworY2hhciAqZXhwYW5kX29uZV90b2tlbihjb25zdCBjaGFyICoqc3RyKTsKKwor
LyogZXhwci5jICovCit2b2lkIGV4cHJfcHJpbnQoc3RydWN0IGV4cHIgKmUsIHZvaWQgKCpmbiko
dm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKmRhdGEsIGludCBw
cmV2dG9rZW4pOwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcu
RkFULldBUk5JTkcgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklO
RwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2I1YTdlCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcKQEAg
LTAsMCArMSw0IEBACitUaGlzIGlzIE5PVCB0aGUgb2ZmaWNpYWwgdmVyc2lvbiBvZiBkaWFsb2cu
ICBUaGlzIHZlcnNpb24gaGFzIGJlZW4KK3NpZ25pZmljYW50bHkgbW9kaWZpZWQgZnJvbSB0aGUg
b3JpZ2luYWwuICBJdCBpcyBmb3IgdXNlIGJ5IHRoZSBMaW51eAora2VybmVsIGNvbmZpZ3VyYXRp
b24gc2NyaXB0LiAgUGxlYXNlIGRvIG5vdCBib3RoZXIgU2F2aW8gTGFtIHdpdGgKK3F1ZXN0aW9u
cyBhYm91dCB0aGlzIHByb2dyYW0uCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4
ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9jaGVja2xp
c3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDE2MWNmCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9jaGVja2xpc3QuYwpAQCAt
MCwwICsxLDMxOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgor
ICogIGNoZWNrbGlzdC5jIC0tIGltcGxlbWVudHMgdGhlIGNoZWNrbGlzdCBib3gKKyAqCisgKiAg
T1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogICAgIFN0
dWFydCBIZXJiZXJ0IC0gUy5IZXJiZXJ0QHNoZWZmaWVsZC5hYy51azogcmFkaW9saXN0IGV4dGVu
c2lvbgorICogICAgIEFsZXNzYW5kcm8gUnViaW5pIC0gcnViaW5pQGlwdnZpcy51bmlwdi5pdDog
bWVyZ2VkIHRoZSB0d28KKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTog
V2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1ZGUgImRpYWxv
Zy5oIgorCitzdGF0aWMgaW50IGxpc3Rfd2lkdGgsIGNoZWNrX3gsIGl0ZW1feDsKKworLyoKKyAq
IFByaW50IGxpc3QgaXRlbQorICovCitzdGF0aWMgdm9pZCBwcmludF9pdGVtKFdJTkRPVyAqIHdp
biwgaW50IGNob2ljZSwgaW50IHNlbGVjdGVkKQoreworCWludCBpOworCWNoYXIgKmxpc3RfaXRl
bSA9IG1hbGxvYyhsaXN0X3dpZHRoICsgMSk7CisKKwlzdHJuY3B5KGxpc3RfaXRlbSwgaXRlbV9z
dHIoKSwgbGlzdF93aWR0aCAtIGl0ZW1feCk7CisJbGlzdF9pdGVtW2xpc3Rfd2lkdGggLSBpdGVt
X3hdID0gJ1wwJzsKKworCS8qIENsZWFyICdyZXNpZHVlJyBvZiBsYXN0IGl0ZW0gKi8KKwl3YXR0
cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7CisJd21vdmUod2luLCBjaG9pY2UsIDApOworCWZv
ciAoaSA9IDA7IGkgPCBsaXN0X3dpZHRoOyBpKyspCisJCXdhZGRjaCh3aW4sICcgJyk7CisKKwl3
bW92ZSh3aW4sIGNob2ljZSwgY2hlY2tfeCk7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRs
Zy5jaGVja19zZWxlY3RlZC5hdHIKKwkJIDogZGxnLmNoZWNrLmF0cik7CisJaWYgKCFpdGVtX2lz
X3RhZygnOicpKQorCQl3cHJpbnR3KHdpbiwgIiglYykiLCBpdGVtX2lzX3RhZygnWCcpID8gJ1gn
IDogJyAnKTsKKworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX3NlbGVjdGVkLmF0
ciA6IGRsZy50YWcuYXRyKTsKKwltdndhZGRjaCh3aW4sIGNob2ljZSwgaXRlbV94LCBsaXN0X2l0
ZW1bMF0pOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuaXRlbV9zZWxlY3RlZC5hdHIg
OiBkbGcuaXRlbS5hdHIpOworCXdhZGRzdHIod2luLCBsaXN0X2l0ZW0gKyAxKTsKKwlpZiAoc2Vs
ZWN0ZWQpIHsKKwkJd21vdmUod2luLCBjaG9pY2UsIGNoZWNrX3ggKyAxKTsKKwkJd3JlZnJlc2go
d2luKTsKKwl9CisJZnJlZShsaXN0X2l0ZW0pOworfQorCisvKgorICogUHJpbnQgdGhlIHNjcm9s
bCBpbmRpY2F0b3JzLgorICovCitzdGF0aWMgdm9pZCBwcmludF9hcnJvd3MoV0lORE9XICogd2lu
LCBpbnQgY2hvaWNlLCBpbnQgaXRlbV9ubywgaW50IHNjcm9sbCwKKwkgICAgIGludCB5LCBpbnQg
eCwgaW50IGhlaWdodCkKK3sKKwl3bW92ZSh3aW4sIHksIHgpOworCisJaWYgKHNjcm9sbCA+IDAp
IHsKKwkJd2F0dHJzZXQod2luLCBkbGcudWFycm93LmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19V
QVJST1cpOworCQl3YWRkc3RyKHdpbiwgIigtKSIpOworCX0gZWxzZSB7CisJCXdhdHRyc2V0KHdp
biwgZGxnLm1lbnVib3guYXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNo
KHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdp
biwgQUNTX0hMSU5FKTsKKwl9CisKKwl5ID0geSArIGhlaWdodCArIDE7CisJd21vdmUod2luLCB5
LCB4KTsKKworCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGNob2ljZSA8IGl0
ZW1fbm8gLSAxKSkgeworCQl3YXR0cnNldCh3aW4sIGRsZy5kYXJyb3cuYXRyKTsKKwkJd2FkZGNo
KHdpbiwgQUNTX0RBUlJPVyk7CisJCXdhZGRzdHIod2luLCAiKCspIik7CisJfSBlbHNlIHsKKwkJ
d2F0dHJzZXQod2luLCBkbGcubWVudWJveF9ib3JkZXIuYXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNT
X0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hM
SU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwl9Cit9CisKKy8qCisgKiAgRGlzcGxh
eSB0aGUgdGVybWluYXRpb24gYnV0dG9ucworICovCitzdGF0aWMgdm9pZCBwcmludF9idXR0b25z
KFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0ZWQpCit7
CisJaW50IHggPSB3aWR0aCAvIDIgLSAxMTsKKwlpbnQgeSA9IGhlaWdodCAtIDI7CisKKwlwcmlu
dF9idXR0b24oZGlhbG9nLCAiU2VsZWN0IiwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7CisJcHJpbnRf
YnV0dG9uKGRpYWxvZywgIiBIZWxwICIsIHksIHggKyAxNCwgc2VsZWN0ZWQgPT0gMSk7CisKKwl3
bW92ZShkaWFsb2csIHksIHggKyAxICsgMTQgKiBzZWxlY3RlZCk7CisJd3JlZnJlc2goZGlhbG9n
KTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBkaWFsb2cgYm94IHdpdGggYSBsaXN0IG9mIG9wdGlv
bnMgdGhhdCBjYW4gYmUgdHVybmVkIG9uIG9yIG9mZgorICogaW4gdGhlIHN0eWxlIG9mIHJhZGlv
bGlzdCAob25seSBvbmUgb3B0aW9uIHR1cm5lZCBvbiBhdCBhIHRpbWUpLgorICovCitpbnQgZGlh
bG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQg
aGVpZ2h0LAorCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0KQoreworCWludCBpLCB4
LCB5LCBib3hfeCwgYm94X3k7CisJaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAsIGNob2ljZSA9IDAs
IHNjcm9sbCA9IDAsIG1heF9jaG9pY2U7CisJV0lORE9XICpkaWFsb2csICpsaXN0OworCisJLyog
d2hpY2ggaXRlbSB0byBoaWdobGlnaHQgKi8KKwlpdGVtX2ZvcmVhY2goKSB7CisJCWlmIChpdGVt
X2lzX3RhZygnWCcpKQorCQkJY2hvaWNlID0gaXRlbV9uKCk7CisJCWlmIChpdGVtX2lzX3NlbGVj
dGVkKCkpIHsKKwkJCWNob2ljZSA9IGl0ZW1fbigpOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2Rv
X3Jlc2l6ZToKKwlpZiAoZ2V0bWF4eShzdGRzY3IpIDwgKGhlaWdodCArIENIRUNLTElTVF9IRUlH
VEhfTUlOKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1heHgoc3Rk
c2NyKSA8ICh3aWR0aCArIENIRUNLTElTVF9XSURUSF9NSU4pKQorCQlyZXR1cm4gLUVSUkRJU1BM
QVlUT09TTUFMTDsKKworCW1heF9jaG9pY2UgPSBNSU4obGlzdF9oZWlnaHQsIGl0ZW1fY291bnQo
KSk7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKGdldG1heHgo
c3Rkc2NyKSAtIHdpZHRoKSAvIDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8g
MjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFs
b2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7
CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9n
LmF0ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIp
OworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9
IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3
YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRF
RSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChk
aWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwg
d2lkdGggLSAyLCAxLCAzKTsKKworCWxpc3Rfd2lkdGggPSB3aWR0aCAtIDY7CisJYm94X3kgPSBo
ZWlnaHQgLSBsaXN0X2hlaWdodCAtIDU7CisJYm94X3ggPSAod2lkdGggLSBsaXN0X3dpZHRoKSAv
IDIgLSAxOworCisJLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBsaXN0ICovCisJbGlzdCA9
IHN1YndpbihkaWFsb2csIGxpc3RfaGVpZ2h0LCBsaXN0X3dpZHRoLCB5ICsgYm94X3kgKyAxLAor
CQkgICAgICB4ICsgYm94X3ggKyAxKTsKKworCWtleXBhZChsaXN0LCBUUlVFKTsKKworCS8qIGRy
YXcgYSBib3ggYXJvdW5kIHRoZSBsaXN0IGl0ZW1zICovCisJZHJhd19ib3goZGlhbG9nLCBib3hf
eSwgYm94X3gsIGxpc3RfaGVpZ2h0ICsgMiwgbGlzdF93aWR0aCArIDIsCisJCSBkbGcubWVudWJv
eF9ib3JkZXIuYXRyLCBkbGcubWVudWJveC5hdHIpOworCisJLyogRmluZCBsZW5ndGggb2YgbG9u
Z2VzdCBpdGVtIGluIG9yZGVyIHRvIGNlbnRlciBjaGVja2xpc3QgKi8KKwljaGVja194ID0gMDsK
KwlpdGVtX2ZvcmVhY2goKQorCQljaGVja194ID0gTUFYKGNoZWNrX3gsIHN0cmxlbihpdGVtX3N0
cigpKSArIDQpOworCWNoZWNrX3ggPSBNSU4oY2hlY2tfeCwgbGlzdF93aWR0aCk7CisKKwljaGVj
a194ID0gKGxpc3Rfd2lkdGggLSBjaGVja194KSAvIDI7CisJaXRlbV94ID0gY2hlY2tfeCArIDQ7
CisKKwlpZiAoY2hvaWNlID49IGxpc3RfaGVpZ2h0KSB7CisJCXNjcm9sbCA9IGNob2ljZSAtIGxp
c3RfaGVpZ2h0ICsgMTsKKwkJY2hvaWNlIC09IHNjcm9sbDsKKwl9CisKKwkvKiBQcmludCB0aGUg
bGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsKKwkJaXRlbV9zZXQo
c2Nyb2xsICsgaSk7CisJCXByaW50X2l0ZW0obGlzdCwgaSwgaSA9PSBjaG9pY2UpOworCX0KKwor
CXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9jb3VudCgpLCBzY3JvbGwsCisJCSAg
ICAgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKKworCXByaW50X2J1
dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKworCXdub3V0cmVmcmVzaChkaWFsb2cp
OworCXdub3V0cmVmcmVzaChsaXN0KTsKKwlkb3VwZGF0ZSgpOworCisJd2hpbGUgKGtleSAhPSBL
RVlfRVNDKSB7CisJCWtleSA9IHdnZXRjaChkaWFsb2cpOworCisJCWZvciAoaSA9IDA7IGkgPCBt
YXhfY2hvaWNlOyBpKyspIHsKKwkJCWl0ZW1fc2V0KGkgKyBzY3JvbGwpOworCQkJaWYgKHRvdXBw
ZXIoa2V5KSA9PSB0b3VwcGVyKGl0ZW1fc3RyKClbMF0pKQorCQkJCWJyZWFrOworCQl9CisKKwkJ
aWYgKGkgPCBtYXhfY2hvaWNlIHx8IGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dOIHx8
CisJCSAgICBrZXkgPT0gJysnIHx8IGtleSA9PSAnLScpIHsKKwkJCWlmIChrZXkgPT0gS0VZX1VQ
IHx8IGtleSA9PSAnLScpIHsKKwkJCQlpZiAoIWNob2ljZSkgeworCQkJCQlpZiAoIXNjcm9sbCkK
KwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBTY3JvbGwgbGlzdCBkb3duICovCisJCQkJCWlmIChs
aXN0X2hlaWdodCA+IDEpIHsKKwkJCQkJCS8qIERlLWhpZ2hsaWdodCBjdXJyZW50IGZpcnN0IGl0
ZW0gKi8KKwkJCQkJCWl0ZW1fc2V0KHNjcm9sbCk7CisJCQkJCQlwcmludF9pdGVtKGxpc3QsIDAs
IEZBTFNFKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIFRSVUUpOworCQkJCQkJd3NjcmwobGlzdCwg
LTEpOworCQkJCQkJc2Nyb2xsb2sobGlzdCwgRkFMU0UpOworCQkJCQl9CisJCQkJCXNjcm9sbC0t
OworCQkJCQlpdGVtX3NldChzY3JvbGwpOworCQkJCQlwcmludF9pdGVtKGxpc3QsIDAsIFRSVUUp
OworCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwKKwkJCQkJ
CSAgICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOwor
CisJCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCQl3cmVmcmVzaChsaXN0KTsKKworCQkJ
CQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJCQl9IGVsc2UK
KwkJCQkJaSA9IGNob2ljZSAtIDE7CisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBr
ZXkgPT0gJysnKSB7CisJCQkJaWYgKGNob2ljZSA9PSBtYXhfY2hvaWNlIC0gMSkgeworCQkJCQlp
ZiAoc2Nyb2xsICsgY2hvaWNlID49IGl0ZW1fY291bnQoKSAtIDEpCisJCQkJCQljb250aW51ZTsK
KwkJCQkJLyogU2Nyb2xsIGxpc3QgdXAgKi8KKwkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4gMSkgewor
CQkJCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgbGFzdCBpdGVtIGJlZm9yZSBzY3JvbGxpbmcg
dXAgKi8KKwkJCQkJCWl0ZW1fc2V0KHNjcm9sbCArIG1heF9jaG9pY2UgLSAxKTsKKwkJCQkJCXBy
aW50X2l0ZW0obGlzdCwKKwkJCQkJCQkgICAgbWF4X2Nob2ljZSAtIDEsCisJCQkJCQkJICAgIEZB
TFNFKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIFRSVUUpOworCQkJCQkJd3NjcmwobGlzdCwgMSk7
CisJCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7CisJCQkJCX0KKwkJCQkJc2Nyb2xsKys7CisJ
CQkJCWl0ZW1fc2V0KHNjcm9sbCArIG1heF9jaG9pY2UgLSAxKTsKKwkJCQkJcHJpbnRfaXRlbShs
aXN0LCBtYXhfY2hvaWNlIC0gMSwgVFJVRSk7CisKKwkJCQkJcHJpbnRfYXJyb3dzKGRpYWxvZywg
Y2hvaWNlLCBpdGVtX2NvdW50KCksCisJCQkJCQkgICAgIHNjcm9sbCwgYm94X3ksIGJveF94ICsg
Y2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKKworCQkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsK
KwkJCQkJd3JlZnJlc2gobGlzdCk7CisKKwkJCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3Ro
ZXIga2V5IHByZXNzICovCisJCQkJfSBlbHNlCisJCQkJCWkgPSBjaG9pY2UgKyAxOworCQkJfQor
CQkJaWYgKGkgIT0gY2hvaWNlKSB7CisJCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgaXRlbSAq
LworCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGNob2ljZSk7CisJCQkJcHJpbnRfaXRlbShsaXN0LCBj
aG9pY2UsIEZBTFNFKTsKKwkJCQkvKiBIaWdobGlnaHQgbmV3IGl0ZW0gKi8KKwkJCQljaG9pY2Ug
PSBpOworCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGNob2ljZSk7CisJCQkJcHJpbnRfaXRlbShsaXN0
LCBjaG9pY2UsIFRSVUUpOworCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCXdyZWZyZXNo
KGxpc3QpOworCQkJfQorCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNz
ICovCisJCX0KKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAnSCc6CisJCWNhc2UgJ2gnOgorCQlj
YXNlICc/JzoKKwkJCWJ1dHRvbiA9IDE7CisJCQkvKiBmYWxsLXRocm91Z2ggKi8KKwkJY2FzZSAn
Uyc6CisJCWNhc2UgJ3MnOgorCQljYXNlICcgJzoKKwkJY2FzZSAnXG4nOgorCQkJaXRlbV9mb3Jl
YWNoKCkKKwkJCQlpdGVtX3NldF9zZWxlY3RlZCgwKTsKKwkJCWl0ZW1fc2V0KHNjcm9sbCArIGNo
b2ljZSk7CisJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKKwkJCWRlbHdpbihsaXN0KTsKKwkJCWRl
bHdpbihkaWFsb2cpOworCQkJcmV0dXJuIGJ1dHRvbjsKKwkJY2FzZSBUQUI6CisJCWNhc2UgS0VZ
X0xFRlQ6CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQg
PyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApCisJCQkgICAgPyAxIDogKGJ1dHRvbiA+IDEgPyAw
IDogYnV0dG9uKTsKKworCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIGJ1
dHRvbik7CisJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQlj
YXNlICd4JzoKKwkJCWtleSA9IEtFWV9FU0M7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgor
CQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1JFU0la
RToKKwkJCWRlbHdpbihsaXN0KTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJb25fa2V5X3Jlc2l6
ZSgpOworCQkJZ290byBkb19yZXNpemU7CisJCX0KKworCQkvKiBOb3csIHVwZGF0ZSBldmVyeXRo
aW5nLi4uICovCisJCWRvdXBkYXRlKCk7CisJfQorCWRlbHdpbihsaXN0KTsKKwlkZWx3aW4oZGlh
bG9nKTsKKwlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmggYi9zdXBwb3J0L2tjb25maWcubmV3
L2x4ZGlhbG9nL2RpYWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4
YjU2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2Rp
YWxvZy5oCkBAIC0wLDAgKzEsMjM4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMCsgKi8KKy8qCisgKiAgZGlhbG9nLmggLS0gY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgYWxs
IGRpYWxvZyBtb2R1bGVzCisgKgorICogIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Vo
ay5oaykKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2lmZGVm
IF9fc3VuX18KKyNkZWZpbmUgQ1VSU19NQUNST1MKKyNlbmRpZgorI2luY2x1ZGUgPG5jdXJzZXMu
aD4KKworLyoKKyAqIENvbG9ycyBpbiBuY3Vyc2VzIDEuOS45ZSBkbyBub3Qgd29yayBwcm9wZXJs
eSBzaW5jZSBmb3JlZ3JvdW5kIGFuZAorICogYmFja2dyb3VuZCBjb2xvcnMgYXJlIE9SJ2QgcmF0
aGVyIHRoYW4gc2VwYXJhdGVseSBtYXNrZWQuICBUaGlzIHZlcnNpb24KKyAqIG9mIGRpYWxvZyB3
YXMgaGFja2VkIHRvIHdvcmsgd2l0aCBuY3Vyc2VzIDEuOS45ZSwgbWFraW5nIGl0IGluY29tcGF0
aWJsZQorICogd2l0aCBzdGFuZGFyZCBjdXJzZXMuICBUaGUgc2ltcGxlc3QgZml4ICh0byBtYWtl
IHRoaXMgd29yayB3aXRoIHN0YW5kYXJkCisgKiBjdXJzZXMpIHVzZXMgdGhlIHdia2dkc2V0KCkg
ZnVuY3Rpb24sIG5vdCB1c2VkIGluIHRoZSBvcmlnaW5hbCBoYWNrLgorICogVHVybiBpdCBvZmYg
aWYgd2UncmUgYnVpbGRpbmcgd2l0aCAxLjkuOWUsIHNpbmNlIGl0IGp1c3QgY29uZnVzZXMgdGhp
bmdzLgorICovCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoX05FRURf
V1JBUCkgJiYgIWRlZmluZWQoR0NDX1BSSU5URkxJS0UpCisjZGVmaW5lIE9MRF9OQ1VSU0VTIDEK
KyN1bmRlZiAgd2JrZ2RzZXQKKyNkZWZpbmUgd2JrZ2RzZXQodyxwKQkJLypub3RoaW5nICovCisj
ZWxzZQorI2RlZmluZSBPTERfTkNVUlNFUyAwCisjZW5kaWYKKworI2RlZmluZSBUUihwYXJhbXMp
IF90cmFjZWYgcGFyYW1zCisKKyNkZWZpbmUgS0VZX0VTQyAyNworI2RlZmluZSBUQUIgOQorI2Rl
ZmluZSBNQVhfTEVOIDIwNDgKKyNkZWZpbmUgQlVGX1NJWkUgKDEwKjEwMjQpCisjZGVmaW5lIE1J
Tih4LHkpICh4IDwgeSA/IHggOiB5KQorI2RlZmluZSBNQVgoeCx5KSAoeCA+IHkgPyB4IDogeSkK
KworI2lmbmRlZiBBQ1NfVUxDT1JORVIKKyNkZWZpbmUgQUNTX1VMQ09STkVSICcrJworI2VuZGlm
CisjaWZuZGVmIEFDU19MTENPUk5FUgorI2RlZmluZSBBQ1NfTExDT1JORVIgJysnCisjZW5kaWYK
KyNpZm5kZWYgQUNTX1VSQ09STkVSCisjZGVmaW5lIEFDU19VUkNPUk5FUiAnKycKKyNlbmRpZgor
I2lmbmRlZiBBQ1NfTFJDT1JORVIKKyNkZWZpbmUgQUNTX0xSQ09STkVSICcrJworI2VuZGlmCisj
aWZuZGVmIEFDU19ITElORQorI2RlZmluZSBBQ1NfSExJTkUgJy0nCisjZW5kaWYKKyNpZm5kZWYg
QUNTX1ZMSU5FCisjZGVmaW5lIEFDU19WTElORSAnfCcKKyNlbmRpZgorI2lmbmRlZiBBQ1NfTFRF
RQorI2RlZmluZSBBQ1NfTFRFRSAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfUlRFRQorI2RlZmlu
ZSBBQ1NfUlRFRSAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfVUFSUk9XCisjZGVmaW5lIEFDU19V
QVJST1cgJ14nCisjZW5kaWYKKyNpZm5kZWYgQUNTX0RBUlJPVworI2RlZmluZSBBQ1NfREFSUk9X
ICd2JworI2VuZGlmCisKKy8qIGVycm9yIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBFUlJESVNQ
TEFZVE9PU01BTEwgKEtFWV9NQVggKyAxKQorCisvKgorICogICBDb2xvciBkZWZpbml0aW9ucwor
ICovCitzdHJ1Y3QgZGlhbG9nX2NvbG9yIHsKKwljaHR5cGUgYXRyOwkvKiBDb2xvciBhdHRyaWJ1
dGUgKi8KKwlpbnQgZmc7CQkvKiBmb3JlZ3JvdW5kICovCisJaW50IGJnOwkJLyogYmFja2dyb3Vu
ZCAqLworCWludCBobDsJCS8qIGhpZ2hsaWdodCB0aGlzIGl0ZW0gKi8KK307CisKK3N0cnVjdCBz
dWJ0aXRsZV9saXN0IHsKKwlzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqbmV4dDsKKwljb25zdCBjaGFy
ICp0ZXh0OworfTsKKworc3RydWN0IGRpYWxvZ19pbmZvIHsKKwljb25zdCBjaGFyICpiYWNrdGl0
bGU7CisJc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlczsKKwlzdHJ1Y3QgZGlhbG9nX2Nv
bG9yIHNjcmVlbjsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNoYWRvdzsKKwlzdHJ1Y3QgZGlhbG9n
X2NvbG9yIGRpYWxvZzsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRpdGxlOworCXN0cnVjdCBkaWFs
b2dfY29sb3IgYm9yZGVyOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2FjdGl2ZTsKKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9pbmFjdGl2ZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9y
IGJ1dHRvbl9rZXlfYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2tleV9pbmFj
dGl2ZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9sYWJlbF9hY3RpdmU7CisJc3RydWN0
IGRpYWxvZ19jb2xvciBidXR0b25fbGFiZWxfaW5hY3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xv
ciBpbnB1dGJveDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGlucHV0Ym94X2JvcmRlcjsKKwlzdHJ1
Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJv
eF90aXRsZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveF9ib3JkZXI7CisJc3RydWN0
IGRpYWxvZ19jb2xvciBwb3NpdGlvbl9pbmRpY2F0b3I7CisJc3RydWN0IGRpYWxvZ19jb2xvciBt
ZW51Ym94OworCXN0cnVjdCBkaWFsb2dfY29sb3IgbWVudWJveF9ib3JkZXI7CisJc3RydWN0IGRp
YWxvZ19jb2xvciBpdGVtOworCXN0cnVjdCBkaWFsb2dfY29sb3IgaXRlbV9zZWxlY3RlZDsKKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZzsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19zZWxlY3Rl
ZDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19rZXk7CisJc3RydWN0IGRpYWxvZ19jb2xvciB0
YWdfa2V5X3NlbGVjdGVkOworCXN0cnVjdCBkaWFsb2dfY29sb3IgY2hlY2s7CisJc3RydWN0IGRp
YWxvZ19jb2xvciBjaGVja19zZWxlY3RlZDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHVhcnJvdzsK
KwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGRhcnJvdzsKK307CisKKy8qCisgKiBHbG9iYWwgdmFyaWFi
bGVzCisgKi8KK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2luZm8gZGxnOworZXh0ZXJuIGNoYXIgZGlh
bG9nX2lucHV0X3Jlc3VsdFtdOworZXh0ZXJuIGludCBzYXZlZF94LCBzYXZlZF95OwkJLyogTmVl
ZGVkIGluIHNpZ25hbCBoYW5kbGVyIGluIG1jb25mLmMgKi8KKworLyoKKyAqIEZ1bmN0aW9uIHBy
b3RvdHlwZXMKKyAqLworCisvKiBpdGVtIGxpc3QgYXMgdXNlZCBieSBjaGVja2xpc3QgYW5kIG1l
bnVib3ggKi8KK3ZvaWQgaXRlbV9yZXNldCh2b2lkKTsKK3ZvaWQgaXRlbV9tYWtlKGNvbnN0IGNo
YXIgKmZtdCwgLi4uKTsKK3ZvaWQgaXRlbV9hZGRfc3RyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsK
K3ZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKTsKK3ZvaWQgaXRlbV9zZXRfZGF0YSh2b2lkICpw
KTsKK3ZvaWQgaXRlbV9zZXRfc2VsZWN0ZWQoaW50IHZhbCk7CitpbnQgaXRlbV9hY3RpdmF0ZV9z
ZWxlY3RlZCh2b2lkKTsKK3ZvaWQgKml0ZW1fZGF0YSh2b2lkKTsKK2NoYXIgaXRlbV90YWcodm9p
ZCk7CisKKy8qIGl0ZW0gbGlzdCBtYW5pcHVsYXRpb24gZm9yIGx4ZGlhbG9nIHVzZSAqLworI2Rl
ZmluZSBNQVhJVEVNU1RSIDIwMAorc3RydWN0IGRpYWxvZ19pdGVtIHsKKwljaGFyIHN0cltNQVhJ
VEVNU1RSXTsJLyogcHJvbXB0IGRpc3BsYXllZCAqLworCWNoYXIgdGFnOworCXZvaWQgKmRhdGE7
CS8qIHBvaW50ZXIgdG8gbWVudSBpdGVtIC0gdXNlZCBieSBtZW51Ym94K2NoZWNrbGlzdCAqLwor
CWludCBzZWxlY3RlZDsJLyogU2V0IHRvIDEgYnkgZGlhbG9nXyooKSBmdW5jdGlvbiBpZiBzZWxl
Y3RlZC4gKi8KK307CisKKy8qIGxpc3Qgb2YgbGlhbG9nX2l0ZW1zICovCitzdHJ1Y3QgZGlhbG9n
X2xpc3QgeworCXN0cnVjdCBkaWFsb2dfaXRlbSBub2RlOworCXN0cnVjdCBkaWFsb2dfbGlzdCAq
bmV4dDsKK307CisKK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1fY3VyOworZXh0ZXJu
IHN0cnVjdCBkaWFsb2dfbGlzdCBpdGVtX25pbDsKK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3Qg
Kml0ZW1faGVhZDsKKworaW50IGl0ZW1fY291bnQodm9pZCk7Cit2b2lkIGl0ZW1fc2V0KGludCBu
KTsKK2ludCBpdGVtX24odm9pZCk7Citjb25zdCBjaGFyICppdGVtX3N0cih2b2lkKTsKK2ludCBp
dGVtX2lzX3NlbGVjdGVkKHZvaWQpOworaW50IGl0ZW1faXNfdGFnKGNoYXIgdGFnKTsKKyNkZWZp
bmUgaXRlbV9mb3JlYWNoKCkgXAorCWZvciAoaXRlbV9jdXIgPSBpdGVtX2hlYWQgPyBpdGVtX2hl
YWQ6IGl0ZW1fY3VyOyBcCisJICAgICBpdGVtX2N1ciAmJiAoaXRlbV9jdXIgIT0gJml0ZW1fbmls
KTsgaXRlbV9jdXIgPSBpdGVtX2N1ci0+bmV4dCkKKworLyogZ2VuZXJpYyBrZXkgaGFuZGxlcnMg
Ki8KK2ludCBvbl9rZXlfZXNjKFdJTkRPVyAqd2luKTsKK2ludCBvbl9rZXlfcmVzaXplKHZvaWQp
OworCisvKiBtaW5pbXVtIChyZSlzaXplIHZhbHVlcyAqLworI2RlZmluZSBDSEVDS0xJU1RfSEVJ
R1RIX01JTiA2CS8qIEZvciBkaWFsb2dfY2hlY2tsaXN0KCkgKi8KKyNkZWZpbmUgQ0hFQ0tMSVNU
X1dJRFRIX01JTiA2CisjZGVmaW5lIElOUFVUQk9YX0hFSUdUSF9NSU4gMgkvKiBGb3IgZGlhbG9n
X2lucHV0Ym94KCkgKi8KKyNkZWZpbmUgSU5QVVRCT1hfV0lEVEhfTUlOIDIKKyNkZWZpbmUgTUVO
VUJPWF9IRUlHVEhfTUlOIDE1CS8qIEZvciBkaWFsb2dfbWVudSgpICovCisjZGVmaW5lIE1FTlVC
T1hfV0lEVEhfTUlOIDY1CisjZGVmaW5lIFRFWFRCT1hfSEVJR1RIX01JTiA4CS8qIEZvciBkaWFs
b2dfdGV4dGJveCgpICovCisjZGVmaW5lIFRFWFRCT1hfV0lEVEhfTUlOIDgKKyNkZWZpbmUgWUVT
Tk9fSEVJR1RIX01JTiA0CS8qIEZvciBkaWFsb2dfeWVzbm8oKSAqLworI2RlZmluZSBZRVNOT19X
SURUSF9NSU4gNAorI2RlZmluZSBXSU5ET1dfSEVJR1RIX01JTiAxOQkvKiBGb3IgaW5pdF9kaWFs
b2coKSAqLworI2RlZmluZSBXSU5ET1dfV0lEVEhfTUlOIDgwCisKK2ludCBpbml0X2RpYWxvZyhj
b25zdCBjaGFyICpiYWNrdGl0bGUpOwordm9pZCBzZXRfZGlhbG9nX2JhY2t0aXRsZShjb25zdCBj
aGFyICpiYWNrdGl0bGUpOwordm9pZCBzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdHJ1Y3Qgc3VidGl0
bGVfbGlzdCAqc3VidGl0bGVzKTsKK3ZvaWQgZW5kX2RpYWxvZyhpbnQgeCwgaW50IHkpOwordm9p
ZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUg
YXR0cik7Cit2b2lkIGRpYWxvZ19jbGVhcih2b2lkKTsKK3ZvaWQgcHJpbnRfYXV0b3dyYXAoV0lO
RE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0aCwgaW50IHksIGludCB4KTsK
K3ZvaWQgcHJpbnRfYnV0dG9uKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5
LCBpbnQgeCwgaW50IHNlbGVjdGVkKTsKK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2cs
IGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpOwordm9pZCBkcmF3X2JveChXSU5ET1cgKiB3
aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYm94LAorCSAg
ICAgIGNodHlwZSBib3JkZXIpOwordm9pZCBkcmF3X3NoYWRvdyhXSU5ET1cgKiB3aW4sIGludCB5
LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKKworaW50IGZpcnN0X2FscGhhKGNvbnN0
IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZXhlbXB0KTsKK2ludCBkaWFsb2dfeWVzbm8oY29u
c3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRo
KTsKK2ludCBkaWFsb2dfbXNnYm94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9t
cHQsIGludCBoZWlnaHQsCisJCSAgaW50IHdpZHRoLCBpbnQgcGF1c2UpOworCisKK3R5cGVkZWYg
dm9pZCAoKnVwZGF0ZV90ZXh0X2ZuKShjaGFyICpidWYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVu
ZCwgdm9pZAorCQkJICAgICAgICpfZGF0YSk7CitpbnQgZGlhbG9nX3RleHRib3goY29uc3QgY2hh
ciAqdGl0bGUsIGNoYXIgKnRidWYsIGludCBpbml0aWFsX2hlaWdodCwKKwkJICAgaW50IGluaXRp
YWxfd2lkdGgsIGludCAqa2V5cywgaW50ICpfdnNjcm9sbCwgaW50ICpfaHNjcm9sbCwKKwkJICAg
dXBkYXRlX3RleHRfZm4gdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpOworaW50IGRpYWxvZ19tZW51
KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCisJCWNvbnN0IHZvaWQgKnNl
bGVjdGVkLCBpbnQgKnNfc2Nyb2xsKTsKK2ludCBkaWFsb2dfY2hlY2tsaXN0KGNvbnN0IGNoYXIg
KnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsCisJCSAgICAgaW50IHdpZHRo
LCBpbnQgbGlzdF9oZWlnaHQpOworaW50IGRpYWxvZ19pbnB1dGJveChjb25zdCBjaGFyICp0aXRs
ZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkgICAgaW50IHdpZHRoLCBjb25z
dCBjaGFyICppbml0KTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGJhc2UgZm9yIGZpY3RpdGlvdXMg
a2V5cywgd2hpY2ggYWN0aXZhdGUKKyAqIHRoZSBidXR0b25zLgorICoKKyAqIE1vdXNlLWdlbmVy
YXRlZCBrZXlzIGFyZSB0aGUgZm9sbG93aW5nOgorICogICAtLSB0aGUgZmlyc3QgMzIgYXJlIHVz
ZWQgYXMgbnVtYmVycywgaW4gYWRkaXRpb24gdG8gJzAnLSc5JworICogICAtLSB0aGUgbG93ZXJj
YXNlIGFyZSB1c2VkIHRvIHNpZ25hbCBtb3VzZS1lbnRlciBldmVudHMgKE1fRVZFTlQgKyAnbycp
CisgKiAgIC0tIHVwcGVyY2FzZSBjaGFycyBhcmUgdXNlZCB0byBpbnZva2UgdGhlIGJ1dHRvbiAo
TV9FVkVOVCArICdPJykKKyAqLworI2RlZmluZSBNX0VWRU5UIChLRVlfTUFYKzEpCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2lucHV0Ym94LmMgYi9zdXBwb3J0L2tj
b25maWcubmV3L2x4ZGlhbG9nL2lucHV0Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWRjZmIyOAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bHhkaWFsb2cvaW5wdXRib3guYwpAQCAtMCwwICsxLDI4OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjArCisvKgorICogIGlucHV0Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUg
aW5wdXQgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3Mu
Y3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlh
bSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1ZGUgImRpYWxvZy5oIgor
CitjaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbTUFYX0xFTiArIDFdOworCisvKgorICogIFByaW50
IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMo
V0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKK3sK
KwlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOworCWludCB5ID0gaGVpZ2h0IC0gMjsKKworCXByaW50
X2J1dHRvbihkaWFsb2csICIgIE9rICAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsKKwlwcmludF9i
dXR0b24oZGlhbG9nLCAiIEhlbHAgIiwgeSwgeCArIDE0LCBzZWxlY3RlZCA9PSAxKTsKKworCXdt
b3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxNCAqIHNlbGVjdGVkKTsKKwl3cmVmcmVzaChkaWFsb2cp
OworfQorCisvKgorICogRGlzcGxheSBhIGRpYWxvZyBib3ggZm9yIGlucHV0aW5nIGEgc3RyaW5n
CisgKi8KK2ludCBkaWFsb2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIg
KnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLAorCQkgICAgY29uc3QgY2hhciAqaW5pdCkK
K3sKKwlpbnQgaSwgeCwgeSwgYm94X3ksIGJveF94LCBib3hfd2lkdGg7CisJaW50IGlucHV0X3gg
PSAwLCBrZXkgPSAwLCBidXR0b24gPSAtMTsKKwlpbnQgc2hvd194LCBsZW4sIHBvczsKKwljaGFy
ICppbnN0ciA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7CisJV0lORE9XICpkaWFsb2c7CisKKwlpZiAo
IWluaXQpCisJCWluc3RyWzBdID0gJ1wwJzsKKwllbHNlCisJCXN0cmNweShpbnN0ciwgaW5pdCk7
CisKK2RvX3Jlc2l6ZToKKwlpZiAoZ2V0bWF4eShzdGRzY3IpIDw9IChoZWlnaHQgLSBJTlBVVEJP
WF9IRUlHVEhfTUlOKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1h
eHgoc3Rkc2NyKSA8PSAod2lkdGggLSBJTlBVVEJPWF9XSURUSF9NSU4pKQorCQlyZXR1cm4gLUVS
UkRJU1BMQVlUT09TTUFMTDsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLwor
CXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKKwl5ID0gKGdldG1heHkoc3Rkc2Ny
KSAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdp
ZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsKKwlrZXlwYWQo
ZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwK
KwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisJd2F0dHJzZXQoZGlhbG9nLCBk
bGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRF
RSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBB
Q1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXdhZGRjaChk
aWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsK
KworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXByaW50X2F1dG93cmFwKGRp
YWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOworCisJLyogRHJhdyB0aGUgaW5wdXQgZmll
bGQgYm94ICovCisJYm94X3dpZHRoID0gd2lkdGggLSA2OworCWdldHl4KGRpYWxvZywgeSwgeCk7
CisJYm94X3kgPSB5ICsgMjsKKwlib3hfeCA9ICh3aWR0aCAtIGJveF93aWR0aCkgLyAyOworCWRy
YXdfYm94KGRpYWxvZywgeSArIDEsIGJveF94IC0gMSwgMywgYm94X3dpZHRoICsgMiwKKwkJIGRs
Zy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisKKwlwcmludF9idXR0b25zKGRpYWxvZywg
aGVpZ2h0LCB3aWR0aCwgMCk7CisKKwkvKiBTZXQgdXAgdGhlIGluaXRpYWwgdmFsdWUgKi8KKwl3
bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuaW5wdXRi
b3guYXRyKTsKKworCWxlbiA9IHN0cmxlbihpbnN0cik7CisJcG9zID0gbGVuOworCisJaWYgKGxl
biA+PSBib3hfd2lkdGgpIHsKKwkJc2hvd194ID0gbGVuIC0gYm94X3dpZHRoICsgMTsKKwkJaW5w
dXRfeCA9IGJveF93aWR0aCAtIDE7CisJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGggLSAxOyBp
KyspCisJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7CisJfSBlbHNlIHsKKwkJ
c2hvd194ID0gMDsKKwkJaW5wdXRfeCA9IGxlbjsKKwkJd2FkZHN0cihkaWFsb2csIGluc3RyKTsK
Kwl9CisKKwl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOworCisJd3JlZnJl
c2goZGlhbG9nKTsKKworCXdoaWxlIChrZXkgIT0gS0VZX0VTQykgeworCQlrZXkgPSB3Z2V0Y2go
ZGlhbG9nKTsKKworCQlpZiAoYnV0dG9uID09IC0xKSB7CS8qIElucHV0IGJveCBzZWxlY3RlZCAq
LworCQkJc3dpdGNoIChrZXkpIHsKKwkJCWNhc2UgVEFCOgorCQkJY2FzZSBLRVlfVVA6CisJCQlj
YXNlIEtFWV9ET1dOOgorCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfQkFDS1NQQUNFOgorCQkJY2Fz
ZSA4OiAgIC8qIF5IICovCisJCQljYXNlIDEyNzogLyogXj8gKi8KKwkJCQlpZiAocG9zKSB7CisJ
CQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7CisJCQkJCWlmIChpbnB1dF94
ID09IDApIHsKKwkJCQkJCXNob3dfeC0tOworCQkJCQl9IGVsc2UKKwkJCQkJCWlucHV0X3gtLTsK
KworCQkJCQlpZiAocG9zIDwgbGVuKSB7CisJCQkJCQlmb3IgKGkgPSBwb3MgLSAxOyBpIDwgbGVu
OyBpKyspIHsKKwkJCQkJCQlpbnN0cltpXSA9IGluc3RyW2krMV07CisJCQkJCQl9CisJCQkJCX0K
KworCQkJCQlwb3MtLTsKKwkJCQkJbGVuLS07CisJCQkJCWluc3RyW2xlbl0gPSAnXDAnOworCQkJ
CQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hf
d2lkdGg7IGkrKykgeworCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJCXdh
ZGRjaChkaWFsb2csICcgJyk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQl3YWRkY2go
ZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7CisJCQkJCX0KKwkJCQkJd21vdmUoZGlhbG9nLCBi
b3hfeSwgaW5wdXRfeCArIGJveF94KTsKKwkJCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQl9CisJ
CQkJY29udGludWU7CisJCQljYXNlIEtFWV9MRUZUOgorCQkJCWlmIChwb3MgPiAwKSB7CisJCQkJ
CWlmIChpbnB1dF94ID4gMCkgeworCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgLS1pbnB1dF94
ICsgYm94X3gpOworCQkJCQl9IGVsc2UgaWYgKGlucHV0X3ggPT0gMCkgeworCQkJCQkJc2hvd194
LS07CisJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCQlmb3IgKGkgPSAw
OyBpIDwgYm94X3dpZHRoOyBpKyspIHsKKwkJCQkJCQlpZiAoIWluc3RyW3Nob3dfeCArIGldKSB7
CisJCQkJCQkJCXdhZGRjaChkaWFsb2csICcgJyk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0K
KwkJCQkJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7CisJCQkJCQl9CisJCQkJ
CQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCX0KKwkJCQkJcG9zLS07CisJCQkJ
fQorCQkJCWNvbnRpbnVlOworCQkJY2FzZSBLRVlfUklHSFQ6CisJCQkJaWYgKHBvcyA8IGxlbikg
eworCQkJCQlpZiAoaW5wdXRfeCA8IGJveF93aWR0aCAtIDEpIHsKKwkJCQkJCXdtb3ZlKGRpYWxv
ZywgYm94X3ksICsraW5wdXRfeCArIGJveF94KTsKKwkJCQkJfSBlbHNlIGlmIChpbnB1dF94ID09
IGJveF93aWR0aCAtIDEpIHsKKwkJCQkJCXNob3dfeCsrOworCQkJCQkJd21vdmUoZGlhbG9nLCBi
b3hfeSwgYm94X3gpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aDsgaSsrKSB7CisJ
CQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAn
ICcpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5z
dHJbc2hvd194ICsgaV0pOworCQkJCQkJfQorCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5w
dXRfeCArIGJveF94KTsKKwkJCQkJfQorCQkJCQlwb3MrKzsKKwkJCQl9CisJCQkJY29udGludWU7
CisJCQlkZWZhdWx0OgorCQkJCWlmIChrZXkgPCAweDEwMCAmJiBpc3ByaW50KGtleSkpIHsKKwkJ
CQkJaWYgKGxlbiA8IE1BWF9MRU4pIHsKKwkJCQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0
Ym94LmF0cik7CisJCQkJCQlpZiAocG9zIDwgbGVuKSB7CisJCQkJCQkJZm9yIChpID0gbGVuOyBp
ID4gcG9zOyBpLS0pCisJCQkJCQkJCWluc3RyW2ldID0gaW5zdHJbaS0xXTsKKwkJCQkJCQlpbnN0
cltwb3NdID0ga2V5OworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpbnN0cltsZW5dID0ga2V5Owor
CQkJCQkJfQorCQkJCQkJcG9zKys7CisJCQkJCQlsZW4rKzsKKwkJCQkJCWluc3RyW2xlbl0gPSAn
XDAnOworCisJCQkJCQlpZiAoaW5wdXRfeCA9PSBib3hfd2lkdGggLSAxKSB7CisJCQkJCQkJc2hv
d194Kys7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWlucHV0X3grKzsKKwkJCQkJCX0KKworCQkJ
CQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IGJv
eF93aWR0aDsgaSsrKSB7CisJCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJ
CQl3YWRkY2goZGlhbG9nLCAnICcpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJ
d2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOworCQkJCQkJfQorCQkJCQkJd21vdmUo
ZGlhbG9nLCBib3hfeSwgaW5wdXRfeCArIGJveF94KTsKKwkJCQkJCXdyZWZyZXNoKGRpYWxvZyk7
CisJCQkJCX0gZWxzZQorCQkJCQkJZmxhc2goKTsJLyogQWxhcm0gdXNlciBhYm91dCBvdmVyZmxv
dyAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJc3dpdGNoIChrZXkpIHsK
KwkJY2FzZSAnTyc6CisJCWNhc2UgJ28nOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4g
MDsKKwkJY2FzZSAnSCc6CisJCWNhc2UgJ2gnOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1
cm4gMTsKKwkJY2FzZSBLRVlfVVA6CisJCWNhc2UgS0VZX0xFRlQ6CisJCQlzd2l0Y2ggKGJ1dHRv
bikgeworCQkJY2FzZSAtMToKKwkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1
dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdp
ZHRoLCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQlidXR0b24gPSAtMTsJLyogSW5k
aWNhdGVzIGlucHV0IGJveCBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9n
LCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlu
cHV0X3gpOworCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJ
CQkJYnV0dG9uID0gMDsJLyogSW5kaWNhdGVzICJPSyIgYnV0dG9uIGlzIHNlbGVjdGVkICovCisJ
CQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCQkJCWJyZWFrOwor
CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVEFCOgorCQljYXNlIEtFWV9ET1dOOgorCQljYXNlIEtF
WV9SSUdIVDoKKwkJCXN3aXRjaCAoYnV0dG9uKSB7CisJCQljYXNlIC0xOgorCQkJCWJ1dHRvbiA9
IDA7CS8qIEluZGljYXRlcyAiT0siIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1
dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoK
KwkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAq
LworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAxKTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgMToKKwkJCQlidXR0b24gPSAtMTsJLyogSW5kaWNhdGVzIGlucHV0IGJveCBp
cyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAw
KTsKKwkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOworCQkJCXdyZWZy
ZXNoKGRpYWxvZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJ
CWNhc2UgJ1xuJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIChidXR0b24gPT0gLTEg
PyAwIDogYnV0dG9uKTsKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gS0VZX0VT
QzsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxv
Zyk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUkVTSVpFOgorCQkJZGVsd2luKGRpYWxvZyk7CisJ
CQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3RvIGRvX3Jlc2l6ZTsKKwkJfQorCX0KKworCWRlbHdp
bihkaWFsb2cpOworCXJldHVybiBLRVlfRVNDOwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNThjMmY4YQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bHhkaWFsb2cvbWVudWJveC5jCkBAIC0wLDAgKzEsNDI0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgbWVudWJveC5jIC0tIGltcGxlbWVudHMgdGhlIG1l
bnUgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Vo
ay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBS
b2FkY2FwIChyb2FkY2Fwd0BjZncuY29tKQorICovCisKKy8qCisgKiAgQ2hhbmdlcyBieSBDbGlm
Zm9yZCBXb2xmIChnb2RAY2xpZmZvcmQuYXQpCisgKgorICogIFsgMTk5OC0wNi0xMyBdCisgKgor
ICogICAgKikgIEEgYnVnZml4IGZvciB0aGUgUGFnZS1Eb3duIHByb2JsZW0KKyAqCisgKiAgICAq
KSAgRm9ybWVybHkgd2hlbiBJIHVzZWQgUGFnZSBEb3duIGFuZCBQYWdlIFVwLCB0aGUgY3Vyc29y
IHdvdWxkIGJlIHNldAorICogICAgICAgIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgbWVu
dSBib3guICBOb3cgbHhkaWFsb2cgaXMgYSBiaXQKKyAqICAgICAgICBzbWFydGVyIGFuZCB3b3Jr
cyBtb3JlIGxpa2Ugb3RoZXIgbWVudSBzeXN0ZW1zIChqdXN0IGhhdmUgYSBsb29rIGF0CisgKiAg
ICAgICAgaXQpLgorICoKKyAqICAgICopICBGb3JtZXJseSBpZiBJIHNlbGVjdGVkIHNvbWV0aGlu
ZyBteSBzY3JvbGxpbmcgd291bGQgYmUgYnJva2VuIGJlY2F1c2UKKyAqICAgICAgICBseGRpYWxv
ZyBpcyByZS1pbnZva2VkIGJ5IHRoZSBNZW51Y29uZmlnIHNoZWxsIHNjcmlwdCwgY2FuJ3QKKyAq
ICAgICAgICByZW1lbWJlciB0aGUgbGFzdCBzY3JvbGxpbmcgcG9zaXRpb24sIGFuZCBqdXN0IHNl
dHMgaXQgc28gdGhhdCB0aGUKKyAqICAgICAgICBjdXJzb3IgaXMgYXQgdGhlIGJvdHRvbSBvZiB0
aGUgYm94LiAgTm93IGl0IHdyaXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUKKyAqICAgICAgICBseGRp
YWxvZy5zY3JsdG1wIHdoaWNoIGNvbnRhaW5zIHRoaXMgaW5mb3JtYXRpb24uIFRoZSBmaWxlIGlz
CisgKiAgICAgICAgZGVsZXRlZCBieSBseGRpYWxvZyBpZiB0aGUgdXNlciBsZWF2ZXMgYSBzdWJt
ZW51IG9yIGVudGVycyBhIG5ldworICogICAgICAgIG9uZSwgYnV0IGl0IHdvdWxkIGJlIG5pY2Ug
aWYgTWVudWNvbmZpZyBjb3VsZCBtYWtlIGFub3RoZXIgInJtIC1mIgorICogICAgICAgIGp1c3Qg
dG8gYmUgc3VyZS4gIEp1c3QgdHJ5IGl0IG91dCAtIHlvdSB3aWxsIHJlY29nbmlzZSBhIGRpZmZl
cmVuY2UhCisgKgorICogIFsgMTk5OC0wNi0xNCBdCisgKgorICogICAgKikgIE5vdyBseGRpYWxv
ZyBpcyBjcmFzaC1zYWZlIGFnYWluc3QgYnJva2VuICJseGRpYWxvZy5zY3JsdG1wIiBmaWxlcwor
ICogICAgICAgIGFuZCBtZW51cyBjaGFuZ2UgdGhlaXIgc2l6ZSBvbiB0aGUgZmx5LgorICoKKyAq
ICAgICopICBJZiBmb3Igc29tZSByZWFzb24gdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9uIGlz
IG5vdCBzYXZlZCBieQorICogICAgICAgIGx4ZGlhbG9nLCBpdCBzZXRzIHRoZSBzY3JvbGxpbmcg
c28gdGhhdCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBpbiB0aGUKKyAqICAgICAgICBtaWRkbGUgb2Yg
dGhlIG1lbnUgYm94LCBub3QgYXQgdGhlIGJvdHRvbS4KKyAqCisgKiAwMiBKYW51YXJ5IDE5OTks
IE1pY2hhZWwgRWxpemFiZXRoIENoYXN0YWluIChtZWNAc2hvdXQubmV0KQorICogUmVzZXQgJ3Nj
cm9sbCcgdG8gMCBpZiB0aGUgdmFsdWUgZnJvbSBseGRpYWxvZy5zY3JsdG1wIGlzIGJvZ3VzLgor
ICogVGhpcyBmaXhlcyBhIGJ1ZyBpbiBNZW51Y29uZmlnIHdoZXJlIHVzaW5nICcgJyB0byBkZXNj
ZW5kIGludG8gbWVudXMKKyAqIHdvdWxkIGxlYXZlIG1pcy1zeW5jaHJvbml6ZWQgbHhkaWFsb2cu
c2NybHRtcCBmaWxlcyBseWluZyBhcm91bmQsCisgKiBmc2NhbmYgd291bGQgcmVhZCBpbiAnc2Ny
b2xsJywgYW5kIGV2ZW50dWFsbHkgdGhhdCB2YWx1ZSB3b3VsZCBnZXQgdXNlZC4KKyAqLworCisj
aW5jbHVkZSAiZGlhbG9nLmgiCisKK3N0YXRpYyBpbnQgbWVudV93aWR0aCwgaXRlbV94OworCisv
KgorICogUHJpbnQgbWVudSBpdGVtCisgKi8KK3N0YXRpYyB2b2lkIGRvX3ByaW50X2l0ZW0oV0lO
RE9XICogd2luLCBjb25zdCBjaGFyICppdGVtLCBpbnQgbGluZV95LAorCQkJICBpbnQgc2VsZWN0
ZWQsIGludCBob3RrZXkpCit7CisJaW50IGo7CisJY2hhciAqbWVudV9pdGVtID0gbWFsbG9jKG1l
bnVfd2lkdGggKyAxKTsKKworCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0g
aXRlbV94KTsKKwltZW51X2l0ZW1bbWVudV93aWR0aCAtIGl0ZW1feF0gPSAnXDAnOworCWogPSBm
aXJzdF9hbHBoYShtZW51X2l0ZW0sICJZeU5uTW1IaCIpOworCisJLyogQ2xlYXIgJ3Jlc2lkdWUn
IG9mIGxhc3QgaXRlbSAqLworCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsKKwl3bW92
ZSh3aW4sIGxpbmVfeSwgMCk7CisjaWYgT0xEX05DVVJTRVMKKwl7CisJCWludCBpOworCQlmb3Ig
KGkgPSAwOyBpIDwgbWVudV93aWR0aDsgaSsrKQorCQkJd2FkZGNoKHdpbiwgJyAnKTsKKwl9Cisj
ZWxzZQorCXdjbHJ0b2VvbCh3aW4pOworI2VuZGlmCisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/
IGRsZy5pdGVtX3NlbGVjdGVkLmF0ciA6IGRsZy5pdGVtLmF0cik7CisJbXZ3YWRkc3RyKHdpbiwg
bGluZV95LCBpdGVtX3gsIG1lbnVfaXRlbSk7CisJaWYgKGhvdGtleSkgeworCQl3YXR0cnNldCh3
aW4sIHNlbGVjdGVkID8gZGxnLnRhZ19rZXlfc2VsZWN0ZWQuYXRyCisJCQkgOiBkbGcudGFnX2tl
eS5hdHIpOworCQltdndhZGRjaCh3aW4sIGxpbmVfeSwgaXRlbV94ICsgaiwgbWVudV9pdGVtW2pd
KTsKKwl9CisJaWYgKHNlbGVjdGVkKSB7CisJCXdtb3ZlKHdpbiwgbGluZV95LCBpdGVtX3ggKyAx
KTsKKwl9CisJZnJlZShtZW51X2l0ZW0pOworCXdyZWZyZXNoKHdpbik7Cit9CisKKyNkZWZpbmUg
cHJpbnRfaXRlbShpbmRleCwgY2hvaWNlLCBzZWxlY3RlZCkJCQkJXAorZG8gewkJCQkJCQkJCVwK
KwlpdGVtX3NldChpbmRleCk7CQkJCQkJXAorCWRvX3ByaW50X2l0ZW0obWVudSwgaXRlbV9zdHIo
KSwgY2hvaWNlLCBzZWxlY3RlZCwgIWl0ZW1faXNfdGFnKCc6JykpOyBcCit9IHdoaWxlICgwKQor
CisvKgorICogUHJpbnQgdGhlIHNjcm9sbCBpbmRpY2F0b3JzLgorICovCitzdGF0aWMgdm9pZCBw
cmludF9hcnJvd3MoV0lORE9XICogd2luLCBpbnQgaXRlbV9ubywgaW50IHNjcm9sbCwgaW50IHks
IGludCB4LAorCQkJIGludCBoZWlnaHQpCit7CisJaW50IGN1cl95LCBjdXJfeDsKKworCWdldHl4
KHdpbiwgY3VyX3ksIGN1cl94KTsKKworCXdtb3ZlKHdpbiwgeSwgeCk7CisKKwlpZiAoc2Nyb2xs
ID4gMCkgeworCQl3YXR0cnNldCh3aW4sIGRsZy51YXJyb3cuYXRyKTsKKwkJd2FkZGNoKHdpbiwg
QUNTX1VBUlJPVyk7CisJCXdhZGRzdHIod2luLCAiKC0pIik7CisJfSBlbHNlIHsKKwkJd2F0dHJz
ZXQod2luLCBkbGcubWVudWJveC5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3
YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRk
Y2god2luLCBBQ1NfSExJTkUpOworCX0KKworCXkgPSB5ICsgaGVpZ2h0ICsgMTsKKwl3bW92ZSh3
aW4sIHksIHgpOworCXdyZWZyZXNoKHdpbik7CisKKwlpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYm
IChzY3JvbGwgKyBoZWlnaHQgPCBpdGVtX25vKSkgeworCQl3YXR0cnNldCh3aW4sIGRsZy5kYXJy
b3cuYXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0RBUlJPVyk7CisJCXdhZGRzdHIod2luLCAiKCsp
Iik7CisJfSBlbHNlIHsKKwkJd2F0dHJzZXQod2luLCBkbGcubWVudWJveF9ib3JkZXIuYXRyKTsK
KwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJ
d2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwl9CisK
Kwl3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7CisJd3JlZnJlc2god2luKTsKK30KKworLyoKKyAq
IERpc3BsYXkgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50
X2J1dHRvbnMoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3Rl
ZCkKK3sKKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDI4OworCWludCB5ID0gaGVpZ2h0IC0gMjsKKwor
CXByaW50X2J1dHRvbih3aW4sICJTZWxlY3QiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIEV4aXQgIiwgeSwgeCArIDEyLCBzZWxlY3RlZCA9PSAxKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIEhlbHAgIiwgeSwgeCArIDI0LCBzZWxlY3RlZCA9PSAyKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIFNhdmUgIiwgeSwgeCArIDM2LCBzZWxlY3RlZCA9PSAzKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIExvYWQgIiwgeSwgeCArIDQ4LCBzZWxlY3RlZCA9PSA0KTsKKworCXdt
b3ZlKHdpbiwgeSwgeCArIDEgKyAxMiAqIHNlbGVjdGVkKTsKKwl3cmVmcmVzaCh3aW4pOworfQor
CisvKiBzY3JvbGwgdXAgbiBsaW5lcyAobiBtYXkgYmUgbmVnYXRpdmUpICovCitzdGF0aWMgdm9p
ZCBkb19zY3JvbGwoV0lORE9XICp3aW4sIGludCAqc2Nyb2xsLCBpbnQgbikKK3sKKwkvKiBTY3Jv
bGwgbWVudSB1cCAqLworCXNjcm9sbG9rKHdpbiwgVFJVRSk7CisJd3Njcmwod2luLCBuKTsKKwlz
Y3JvbGxvayh3aW4sIEZBTFNFKTsKKwkqc2Nyb2xsID0gKnNjcm9sbCArIG47CisJd3JlZnJlc2go
d2luKTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBtZW51IGZvciBjaG9vc2luZyBhbW9uZyBhIG51
bWJlciBvZiBvcHRpb25zCisgKi8KK2ludCBkaWFsb2dfbWVudShjb25zdCBjaGFyICp0aXRsZSwg
Y29uc3QgY2hhciAqcHJvbXB0LAorCQljb25zdCB2b2lkICpzZWxlY3RlZCwgaW50ICpzX3Njcm9s
bCkKK3sKKwlpbnQgaSwgaiwgeCwgeSwgYm94X3gsIGJveF95OworCWludCBoZWlnaHQsIHdpZHRo
LCBtZW51X2hlaWdodDsKKwlpbnQga2V5ID0gMCwgYnV0dG9uID0gMCwgc2Nyb2xsID0gMCwgY2hv
aWNlID0gMDsKKwlpbnQgZmlyc3RfaXRlbSA9ICAwLCBtYXhfY2hvaWNlOworCVdJTkRPVyAqZGlh
bG9nLCAqbWVudTsKKworZG9fcmVzaXplOgorCWhlaWdodCA9IGdldG1heHkoc3Rkc2NyKTsKKwl3
aWR0aCA9IGdldG1heHgoc3Rkc2NyKTsKKwlpZiAoaGVpZ2h0IDwgTUVOVUJPWF9IRUlHVEhfTUlO
IHx8IHdpZHRoIDwgTUVOVUJPWF9XSURUSF9NSU4pCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NN
QUxMOworCisJaGVpZ2h0IC09IDQ7CisJd2lkdGggIC09IDU7CisJbWVudV9oZWlnaHQgPSBoZWln
aHQgLSAxMDsKKworCW1heF9jaG9pY2UgPSBNSU4obWVudV9oZWlnaHQsIGl0ZW1fY291bnQoKSk7
CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKGdldG1heHgoc3Rk
c2NyKSAtIHdpZHRoKSAvIDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsK
KworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cg
PSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisK
KwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0
ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOwor
CW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7
IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0
cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YmtnZHNldChkaWFsb2csIGRsZy5kaWFs
b2cuYXRyICYgQV9DT0xPUik7CisJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOworCisJcHJpbnRf
dGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOworCisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlh
bG9nLmF0cik7CisJcHJpbnRfYXV0b3dyYXAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwg
Myk7CisKKwltZW51X3dpZHRoID0gd2lkdGggLSA2OworCWJveF95ID0gaGVpZ2h0IC0gbWVudV9o
ZWlnaHQgLSA1OworCWJveF94ID0gKHdpZHRoIC0gbWVudV93aWR0aCkgLyAyIC0gMTsKKworCS8q
IGNyZWF0ZSBuZXcgd2luZG93IGZvciB0aGUgbWVudSAqLworCW1lbnUgPSBzdWJ3aW4oZGlhbG9n
LCBtZW51X2hlaWdodCwgbWVudV93aWR0aCwKKwkJICAgICAgeSArIGJveF95ICsgMSwgeCArIGJv
eF94ICsgMSk7CisJa2V5cGFkKG1lbnUsIFRSVUUpOworCisJLyogZHJhdyBhIGJveCBhcm91bmQg
dGhlIG1lbnUgaXRlbXMgKi8KKwlkcmF3X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbWVudV9o
ZWlnaHQgKyAyLCBtZW51X3dpZHRoICsgMiwKKwkJIGRsZy5tZW51Ym94X2JvcmRlci5hdHIsIGRs
Zy5tZW51Ym94LmF0cik7CisKKwlpZiAobWVudV93aWR0aCA+PSA4MCkKKwkJaXRlbV94ID0gKG1l
bnVfd2lkdGggLSA3MCkgLyAyOworCWVsc2UKKwkJaXRlbV94ID0gNDsKKworCS8qIFNldCBjaG9p
Y2UgdG8gZGVmYXVsdCBpdGVtICovCisJaXRlbV9mb3JlYWNoKCkKKwkJaWYgKHNlbGVjdGVkICYm
IChzZWxlY3RlZCA9PSBpdGVtX2RhdGEoKSkpCisJCQljaG9pY2UgPSBpdGVtX24oKTsKKwkvKiBn
ZXQgdGhlIHNhdmVkIHNjcm9sbCBpbmZvICovCisJc2Nyb2xsID0gKnNfc2Nyb2xsOworCWlmICgo
c2Nyb2xsIDw9IGNob2ljZSkgJiYgKHNjcm9sbCArIG1heF9jaG9pY2UgPiBjaG9pY2UpICYmCisJ
ICAgKHNjcm9sbCA+PSAwKSAmJiAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8PSBpdGVtX2NvdW50KCkp
KSB7CisJCWZpcnN0X2l0ZW0gPSBzY3JvbGw7CisJCWNob2ljZSA9IGNob2ljZSAtIHNjcm9sbDsK
Kwl9IGVsc2UgeworCQlzY3JvbGwgPSAwOworCX0KKwlpZiAoKGNob2ljZSA+PSBtYXhfY2hvaWNl
KSkgeworCQlpZiAoY2hvaWNlID49IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2UgLyAyKQorCQkJ
c2Nyb2xsID0gZmlyc3RfaXRlbSA9IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2U7CisJCWVsc2UK
KwkJCXNjcm9sbCA9IGZpcnN0X2l0ZW0gPSBjaG9pY2UgLSBtYXhfY2hvaWNlIC8gMjsKKwkJY2hv
aWNlID0gY2hvaWNlIC0gc2Nyb2xsOworCX0KKworCS8qIFByaW50IHRoZSBtZW51ICovCisJZm9y
IChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQlwcmludF9pdGVtKGZpcnN0X2l0ZW0g
KyBpLCBpLCBpID09IGNob2ljZSk7CisJfQorCisJd25vdXRyZWZyZXNoKG1lbnUpOworCisJcHJp
bnRfYXJyb3dzKGRpYWxvZywgaXRlbV9jb3VudCgpLCBzY3JvbGwsCisJCSAgICAgYm94X3ksIGJv
eF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2cs
IGhlaWdodCwgd2lkdGgsIDApOworCXdtb3ZlKG1lbnUsIGNob2ljZSwgaXRlbV94ICsgMSk7CisJ
d3JlZnJlc2gobWVudSk7CisKKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKKwkJa2V5ID0gd2dl
dGNoKG1lbnUpOworCisJCWlmIChrZXkgPCAyNTYgJiYgaXNhbHBoYShrZXkpKQorCQkJa2V5ID0g
dG9sb3dlcihrZXkpOworCisJCWlmIChzdHJjaHIoInlubWgiLCBrZXkpKQorCQkJaSA9IG1heF9j
aG9pY2U7CisJCWVsc2UgeworCQkJZm9yIChpID0gY2hvaWNlICsgMTsgaSA8IG1heF9jaG9pY2U7
IGkrKykgeworCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGkpOworCQkJCWogPSBmaXJzdF9hbHBoYShp
dGVtX3N0cigpLCAiWXlObk1tSGgiKTsKKwkJCQlpZiAoa2V5ID09IHRvbG93ZXIoaXRlbV9zdHIo
KVtqXSkpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPT0gbWF4X2Nob2ljZSkKKwkJCQlm
b3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7CisJCQkJCWl0ZW1fc2V0KHNjcm9sbCAr
IGkpOworCQkJCQlqID0gZmlyc3RfYWxwaGEoaXRlbV9zdHIoKSwgIll5Tm5NbUhoIik7CisJCQkJ
CWlmIChrZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pdKSkKKwkJCQkJCWJyZWFrOworCQkJCX0K
KwkJfQorCisJCWlmIChpdGVtX2NvdW50KCkgIT0gMCAmJgorCQkgICAgKGkgPCBtYXhfY2hvaWNl
IHx8CisJCSAgICAga2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gS0VZX0RPV04gfHwKKwkJICAgICBr
ZXkgPT0gJy0nIHx8IGtleSA9PSAnKycgfHwKKwkJICAgICBrZXkgPT0gS0VZX1BQQUdFIHx8IGtl
eSA9PSBLRVlfTlBBR0UpKSB7CisJCQkvKiBSZW1vdmUgaGlnaGxpZ3Qgb2YgY3VycmVudCBpdGVt
ICovCisJCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBGQUxTRSk7CisKKwkJ
CWlmIChrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSAnLScpIHsKKwkJCQlpZiAoY2hvaWNlIDwgMiAm
JiBzY3JvbGwpIHsKKwkJCQkJLyogU2Nyb2xsIG1lbnUgZG93biAqLworCQkJCQlkb19zY3JvbGwo
bWVudSwgJnNjcm9sbCwgLTEpOworCisJCQkJCXByaW50X2l0ZW0oc2Nyb2xsLCAwLCBGQUxTRSk7
CisJCQkJfSBlbHNlCisJCQkJCWNob2ljZSA9IE1BWChjaG9pY2UgLSAxLCAwKTsKKworCQkJfSBl
bHNlIGlmIChrZXkgPT0gS0VZX0RPV04gfHwga2V5ID09ICcrJykgeworCQkJCXByaW50X2l0ZW0o
c2Nyb2xsK2Nob2ljZSwgY2hvaWNlLCBGQUxTRSk7CisKKwkJCQlpZiAoKGNob2ljZSA+IG1heF9j
aG9pY2UgLSAzKSAmJgorCQkJCSAgICAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8IGl0ZW1fY291bnQo
KSkpIHsKKwkJCQkJLyogU2Nyb2xsIG1lbnUgdXAgKi8KKwkJCQkJZG9fc2Nyb2xsKG1lbnUsICZz
Y3JvbGwsIDEpOworCisJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UgLSAxLAorCQkJ
CQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsKKwkJCQl9IGVsc2UKKwkJCQkJY2hvaWNlID0g
TUlOKGNob2ljZSArIDEsIG1heF9jaG9pY2UgLSAxKTsKKworCQkJfSBlbHNlIGlmIChrZXkgPT0g
S0VZX1BQQUdFKSB7CisJCQkJc2Nyb2xsb2sobWVudSwgVFJVRSk7CisJCQkJZm9yIChpID0gMDsg
KGkgPCBtYXhfY2hvaWNlKTsgaSsrKSB7CisJCQkJCWlmIChzY3JvbGwgPiAwKSB7CisJCQkJCQlk
b19zY3JvbGwobWVudSwgJnNjcm9sbCwgLTEpOworCQkJCQkJcHJpbnRfaXRlbShzY3JvbGwsIDAs
IEZBTFNFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmIChjaG9pY2UgPiAwKQorCQkJCQkJCWNo
b2ljZS0tOworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfTlBBR0Up
IHsKKwkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsKKwkJCQkJaWYgKHNj
cm9sbCArIG1heF9jaG9pY2UgPCBpdGVtX2NvdW50KCkpIHsKKwkJCQkJCWRvX3Njcm9sbChtZW51
LCAmc2Nyb2xsLCAxKTsKKwkJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UtMSwKKwkJ
CQkJCQkgICBtYXhfY2hvaWNlIC0gMSwgRkFMU0UpOworCQkJCQl9IGVsc2UgeworCQkJCQkJaWYg
KGNob2ljZSArIDEgPCBtYXhfY2hvaWNlKQorCQkJCQkJCWNob2ljZSsrOworCQkJCQl9CisJCQkJ
fQorCQkJfSBlbHNlCisJCQkJY2hvaWNlID0gaTsKKworCQkJcHJpbnRfaXRlbShzY3JvbGwgKyBj
aG9pY2UsIGNob2ljZSwgVFJVRSk7CisKKwkJCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fY291
bnQoKSwgc2Nyb2xsLAorCQkJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9o
ZWlnaHQpOworCisJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCXdyZWZyZXNoKG1lbnUpOwor
CisJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJfQorCisJ
CXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgS0VZX0xFRlQ6CisJCWNhc2UgVEFCOgorCQljYXNlIEtF
WV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1
dHRvbikgPCAwKQorCQkJICAgID8gNCA6IChidXR0b24gPiA0ID8gMCA6IGJ1dHRvbik7CisKKwkJ
CXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOworCQkJd3JlZnJl
c2gobWVudSk7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCWNhc2UgJ3MnOgorCQljYXNlICd5
JzoKKwkJY2FzZSAnbic6CisJCWNhc2UgJ20nOgorCQljYXNlICcvJzoKKwkJY2FzZSAnaCc6CisJ
CWNhc2UgJz8nOgorCQljYXNlICd6JzoKKwkJY2FzZSAnXG4nOgorCQkJLyogc2F2ZSBzY3JvbGwg
aW5mbyAqLworCQkJKnNfc2Nyb2xsID0gc2Nyb2xsOworCQkJZGVsd2luKG1lbnUpOworCQkJZGVs
d2luKGRpYWxvZyk7CisJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOworCQkJaXRlbV9zZXRf
c2VsZWN0ZWQoMSk7CisJCQlzd2l0Y2ggKGtleSkgeworCQkJY2FzZSAnaCc6CisJCQljYXNlICc/
JzoKKwkJCQlyZXR1cm4gMjsKKwkJCWNhc2UgJ3MnOgorCQkJY2FzZSAneSc6CisJCQkJcmV0dXJu
IDU7CisJCQljYXNlICduJzoKKwkJCQlyZXR1cm4gNjsKKwkJCWNhc2UgJ20nOgorCQkJCXJldHVy
biA3OworCQkJY2FzZSAnICc6CisJCQkJcmV0dXJuIDg7CisJCQljYXNlICcvJzoKKwkJCQlyZXR1
cm4gOTsKKwkJCWNhc2UgJ3onOgorCQkJCXJldHVybiAxMDsKKwkJCWNhc2UgJ1xuJzoKKwkJCQly
ZXR1cm4gYnV0dG9uOworCQkJfQorCQkJcmV0dXJuIDA7CisJCWNhc2UgJ2UnOgorCQljYXNlICd4
JzoKKwkJCWtleSA9IEtFWV9FU0M7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJa2V5
ID0gb25fa2V5X2VzYyhtZW51KTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SRVNJWkU6CisJCQlv
bl9rZXlfcmVzaXplKCk7CisJCQlkZWx3aW4obWVudSk7CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJ
CWdvdG8gZG9fcmVzaXplOworCQl9CisJfQorCWRlbHdpbihtZW51KTsKKwlkZWx3aW4oZGlhbG9n
KTsKKwlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9s
eGRpYWxvZy90ZXh0Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUz
MzliMQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4
dGJveC5jCkBAIC0wLDAgKzEsMzk1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMCsKKy8qCisgKiAgdGV4dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIHRleHQgYm94CisgKgor
ICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBN
T0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2Fk
Y2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1ZGUgImRpYWxvZy5oIgorCitzdGF0aWMgdm9pZCBi
YWNrX2xpbmVzKGludCBuKTsKK3N0YXRpYyB2b2lkIHByaW50X3BhZ2UoV0lORE9XICp3aW4sIGlu
dCBoZWlnaHQsIGludCB3aWR0aCwgdXBkYXRlX3RleHRfZm4KKwkJICAgICAgIHVwZGF0ZV90ZXh0
LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoV0lORE9XICp3aW4sIGludCBy
b3csIGludCB3aWR0aCk7CitzdGF0aWMgY2hhciAqZ2V0X2xpbmUodm9pZCk7CitzdGF0aWMgdm9p
ZCBwcmludF9wb3NpdGlvbihXSU5ET1cgKiB3aW4pOworCitzdGF0aWMgaW50IGhzY3JvbGw7Citz
dGF0aWMgaW50IGJlZ2luX3JlYWNoZWQsIGVuZF9yZWFjaGVkLCBwYWdlX2xlbmd0aDsKK3N0YXRp
YyBjaGFyICpidWY7CitzdGF0aWMgY2hhciAqcGFnZTsKKworLyoKKyAqIHJlZnJlc2ggd2luZG93
IGNvbnRlbnQKKyAqLworc3RhdGljIHZvaWQgcmVmcmVzaF90ZXh0X2JveChXSU5ET1cgKmRpYWxv
ZywgV0lORE9XICpib3gsIGludCBib3hoLCBpbnQgYm94dywKKwkJCSAgICAgaW50IGN1cl95LCBp
bnQgY3VyX3gsIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LAorCQkJICAgICB2b2lkICpkYXRh
KQoreworCXByaW50X3BhZ2UoYm94LCBib3hoLCBib3h3LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJ
cHJpbnRfcG9zaXRpb24oZGlhbG9nKTsKKwl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8q
IFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCisJd3JlZnJlc2goZGlhbG9nKTsKK30KKworCisv
KgorICogRGlzcGxheSB0ZXh0IGZyb20gYSBmaWxlIGluIGEgZGlhbG9nIGJveC4KKyAqCisgKiBr
ZXlzIGlzIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5CisgKiB1cGRhdGVfdGV4dCgpIG1heSBub3Qg
YWRkIG9yIHJlbW92ZSBhbnkgJ1xuJyBvciAnXDAnIGluIHRidWYKKyAqLworaW50IGRpYWxvZ190
ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjaGFyICp0YnVmLCBpbnQgaW5pdGlhbF9oZWlnaHQs
CisJCSAgIGludCBpbml0aWFsX3dpZHRoLCBpbnQgKmtleXMsIGludCAqX3ZzY3JvbGwsIGludCAq
X2hzY3JvbGwsCisJCSAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKQor
eworCWludCBpLCB4LCB5LCBjdXJfeCwgY3VyX3ksIGtleSA9IDA7CisJaW50IGhlaWdodCwgd2lk
dGgsIGJveGgsIGJveHc7CisJV0lORE9XICpkaWFsb2csICpib3g7CisJYm9vbCBkb25lID0gZmFs
c2U7CisKKwliZWdpbl9yZWFjaGVkID0gMTsKKwllbmRfcmVhY2hlZCA9IDA7CisJcGFnZV9sZW5n
dGggPSAwOworCWhzY3JvbGwgPSAwOworCWJ1ZiA9IHRidWY7CisJcGFnZSA9IGJ1ZjsJLyogcGFn
ZSBpcyBwb2ludGVyIHRvIHN0YXJ0IG9mIHBhZ2UgdG8gYmUgZGlzcGxheWVkICovCisKKwlpZiAo
X3ZzY3JvbGwgJiYgKl92c2Nyb2xsKSB7CisJCWJlZ2luX3JlYWNoZWQgPSAwOworCisJCWZvciAo
aSA9IDA7IGkgPCAqX3ZzY3JvbGw7IGkrKykKKwkJCWdldF9saW5lKCk7CisJfQorCWlmIChfaHNj
cm9sbCkKKwkJaHNjcm9sbCA9ICpfaHNjcm9sbDsKKworZG9fcmVzaXplOgorCWdldG1heHl4KHN0
ZHNjciwgaGVpZ2h0LCB3aWR0aCk7CisJaWYgKGhlaWdodCA8IFRFWFRCT1hfSEVJR1RIX01JTiB8
fCB3aWR0aCA8IFRFWFRCT1hfV0lEVEhfTUlOKQorCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFM
TDsKKwlpZiAoaW5pdGlhbF9oZWlnaHQgIT0gMCkKKwkJaGVpZ2h0ID0gaW5pdGlhbF9oZWlnaHQ7
CisJZWxzZQorCQlpZiAoaGVpZ2h0ID4gNCkKKwkJCWhlaWdodCAtPSA0OworCQllbHNlCisJCQlo
ZWlnaHQgPSAwOworCWlmIChpbml0aWFsX3dpZHRoICE9IDApCisJCXdpZHRoID0gaW5pdGlhbF93
aWR0aDsKKwllbHNlCisJCWlmICh3aWR0aCA+IDUpCisJCQl3aWR0aCAtPSA1OworCQllbHNlCisJ
CQl3aWR0aCA9IDA7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0g
KGdldG1heHgoc3Rkc2NyKSAtIHdpZHRoKSAvIDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBo
ZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7
CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxv
ZywgVFJVRSk7CisKKwkvKiBDcmVhdGUgd2luZG93IGZvciBib3ggcmVnaW9uLCB1c2VkIGZvciBz
Y3JvbGxpbmcgdGV4dCAqLworCWJveGggPSBoZWlnaHQgLSA0OworCWJveHcgPSB3aWR0aCAtIDI7
CisJYm94ID0gc3Vid2luKGRpYWxvZywgYm94aCwgYm94dywgeSArIDEsIHggKyAxKTsKKwl3YXR0
cnNldChib3gsIGRsZy5kaWFsb2cuYXRyKTsKKwl3YmtnZHNldChib3gsIGRsZy5kaWFsb2cuYXRy
ICYgQV9DT0xPUik7CisKKwlrZXlwYWQoYm94LCBUUlVFKTsKKworCS8qIHJlZ2lzdGVyIHRoZSBu
ZXcgd2luZG93LCBhbG9uZyB3aXRoIGl0cyBib3JkZXJzICovCisJZHJhd19ib3goZGlhbG9nLCAw
LCAwLCBoZWlnaHQsIHdpZHRoLAorCQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsK
KworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2FkZGNoKGRpYWxvZywg
aGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkr
KykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5k
aWFsb2cuYXRyKTsKKwl3YmtnZHNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7
CisJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOworCisJcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRs
ZSwgd2lkdGgpOworCisJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiBFeGl0ICIsIGhlaWdodCAtIDIs
IHdpZHRoIC8gMiAtIDQsIFRSVUUpOworCXdub3V0cmVmcmVzaChkaWFsb2cpOworCWdldHl4KGRp
YWxvZywgY3VyX3ksIGN1cl94KTsJLyogU2F2ZSBjdXJzb3IgcG9zaXRpb24gKi8KKworCS8qIFBy
aW50IGZpcnN0IHBhZ2Ugb2YgdGV4dCAqLworCWF0dHJfY2xlYXIoYm94LCBib3hoLCBib3h3LCBk
bGcuZGlhbG9nLmF0cik7CisJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94
dywgY3VyX3ksIGN1cl94LCB1cGRhdGVfdGV4dCwKKwkJCSBkYXRhKTsKKworCXdoaWxlICghZG9u
ZSkgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAn
RSc6CS8qIEV4aXQgKi8KKwkJY2FzZSAnZSc6CisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJ
Y2FzZSAncSc6CisJCWNhc2UgJ1xuJzoKKwkJCWRvbmUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNh
c2UgJ2cnOgkvKiBGaXJzdCBwYWdlICovCisJCWNhc2UgS0VZX0hPTUU6CisJCQlpZiAoIWJlZ2lu
X3JlYWNoZWQpIHsKKwkJCQliZWdpbl9yZWFjaGVkID0gMTsKKwkJCQlwYWdlID0gYnVmOworCQkJ
CXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsCisJCQkJCQkgY3VyX3ks
IGN1cl94LCB1cGRhdGVfdGV4dCwKKwkJCQkJCSBkYXRhKTsKKwkJCX0KKwkJCWJyZWFrOworCQlj
YXNlICdHJzoJLyogTGFzdCBwYWdlICovCisJCWNhc2UgS0VZX0VORDoKKworCQkJZW5kX3JlYWNo
ZWQgPSAxOworCQkJLyogcG9pbnQgdG8gbGFzdCBjaGFyIGluIGJ1ZiAqLworCQkJcGFnZSA9IGJ1
ZiArIHN0cmxlbihidWYpOworCQkJYmFja19saW5lcyhib3hoKTsKKwkJCXJlZnJlc2hfdGV4dF9i
b3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0ZV90
ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICdLJzoJLyogUHJldmlvdXMgbGluZSAqLwor
CQljYXNlICdrJzoKKwkJY2FzZSBLRVlfVVA6CisJCQlpZiAoYmVnaW5fcmVhY2hlZCkKKwkJCQli
cmVhazsKKworCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCArIDEpOworCQkJcmVmcmVzaF90ZXh0
X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksCisJCQkJCSBjdXJfeCwgdXBkYXRl
X3RleHQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgJ0InOgkvKiBQcmV2aW91cyBwYWdlICov
CisJCWNhc2UgJ2InOgorCQljYXNlICd1JzoKKwkJY2FzZSBLRVlfUFBBR0U6CisJCQlpZiAoYmVn
aW5fcmVhY2hlZCkKKwkJCQlicmVhazsKKwkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGggKyBib3ho
KTsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAor
CQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICdKJzoJ
LyogTmV4dCBsaW5lICovCisJCWNhc2UgJ2onOgorCQljYXNlIEtFWV9ET1dOOgorCQkJaWYgKGVu
ZF9yZWFjaGVkKQorCQkJCWJyZWFrOworCisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoIC0gMSk7
CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwKKwkJ
CQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfTlBB
R0U6CS8qIE5leHQgcGFnZSAqLworCQljYXNlICcgJzoKKwkJY2FzZSAnZCc6CisJCQlpZiAoZW5k
X3JlYWNoZWQpCisJCQkJYnJlYWs7CisKKwkJCWJlZ2luX3JlYWNoZWQgPSAwOworCQkJcmVmcmVz
aF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksCisJCQkJCSBjdXJfeCwg
dXBkYXRlX3RleHQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgJzAnOgkvKiBCZWdpbm5pbmcg
b2YgbGluZSAqLworCQljYXNlICdIJzoJLyogU2Nyb2xsIGxlZnQgKi8KKwkJY2FzZSAnaCc6CisJ
CWNhc2UgS0VZX0xFRlQ6CisJCQlpZiAoaHNjcm9sbCA8PSAwKQorCQkJCWJyZWFrOworCisJCQlp
ZiAoa2V5ID09ICcwJykKKwkJCQloc2Nyb2xsID0gMDsKKwkJCWVsc2UKKwkJCQloc2Nyb2xsLS07
CisJCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovCisJ
CQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBi
b3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsK
KwkJCWJyZWFrOworCQljYXNlICdMJzoJLyogU2Nyb2xsIHJpZ2h0ICovCisJCWNhc2UgJ2wnOgor
CQljYXNlIEtFWV9SSUdIVDoKKwkJCWlmIChoc2Nyb2xsID49IE1BWF9MRU4pCisJCQkJYnJlYWs7
CisJCQloc2Nyb2xsKys7CisJCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9y
aXpvbnRhbGx5ICovCisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsKKwkJCXJlZnJlc2hfdGV4
dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0
ZV90ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlpZiAob25fa2V5
X2VzYyhkaWFsb2cpID09IEtFWV9FU0MpCisJCQkJZG9uZSA9IHRydWU7CisJCQlicmVhazsKKwkJ
Y2FzZSBLRVlfUkVTSVpFOgorCQkJYmFja19saW5lcyhoZWlnaHQpOworCQkJZGVsd2luKGJveCk7
CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCW9uX2tleV9yZXNpemUoKTsKKwkJCWdvdG8gZG9fcmVz
aXplOworCQlkZWZhdWx0OgorCQkJZm9yIChpID0gMDsga2V5c1tpXTsgaSsrKSB7CisJCQkJaWYg
KGtleSA9PSBrZXlzW2ldKSB7CisJCQkJCWRvbmUgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9
CisJCQl9CisJCX0KKwl9CisJZGVsd2luKGJveCk7CisJZGVsd2luKGRpYWxvZyk7CisJaWYgKF92
c2Nyb2xsKSB7CisJCWNvbnN0IGNoYXIgKnM7CisKKwkJcyA9IGJ1ZjsKKwkJKl92c2Nyb2xsID0g
MDsKKwkJYmFja19saW5lcyhwYWdlX2xlbmd0aCk7CisJCXdoaWxlIChzIDwgcGFnZSAmJiAocyA9
IHN0cmNocihzLCAnXG4nKSkpIHsKKwkJCSgqX3ZzY3JvbGwpKys7CisJCQlzKys7CisJCX0KKwl9
CisJaWYgKF9oc2Nyb2xsKQorCQkqX2hzY3JvbGwgPSBoc2Nyb2xsOworCXJldHVybiBrZXk7Cit9
CisKKy8qCisgKiBHbyBiYWNrICduJyBsaW5lcyBpbiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3Rl
eHRib3goKS4KKyAqICdwYWdlJyB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGRlc2ly
ZWQgbGluZSBpbiAnYnVmJy4KKyAqLworc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbikKK3sK
KwlpbnQgaTsKKworCWJlZ2luX3JlYWNoZWQgPSAwOworCS8qIEdvIGJhY2sgJ24nIGxpbmVzICov
CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoKnBhZ2UgPT0gJ1wwJykgeworCQkJ
aWYgKGVuZF9yZWFjaGVkKSB7CisJCQkJZW5kX3JlYWNoZWQgPSAwOworCQkJCWNvbnRpbnVlOwor
CQkJfQorCQl9CisJCWlmIChwYWdlID09IGJ1ZikgeworCQkJYmVnaW5fcmVhY2hlZCA9IDE7CisJ
CQlyZXR1cm47CisJCX0KKwkJcGFnZS0tOworCQlkbyB7CisJCQlpZiAocGFnZSA9PSBidWYpIHsK
KwkJCQliZWdpbl9yZWFjaGVkID0gMTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlwYWdlLS07CisJ
CX0gd2hpbGUgKCpwYWdlICE9ICdcbicpOworCQlwYWdlKys7CisJfQorfQorCisvKgorICogUHJp
bnQgYSBuZXcgcGFnZSBvZiB0ZXh0LgorICovCitzdGF0aWMgdm9pZCBwcmludF9wYWdlKFdJTkRP
VyAqd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIHVwZGF0ZV90ZXh0X2ZuCisJCSAgICAgICB1
cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgcGFzc2VkX2VuZCA9IDA7CisKKwlp
ZiAodXBkYXRlX3RleHQpIHsKKwkJY2hhciAqZW5kOworCisJCWZvciAoaSA9IDA7IGkgPCBoZWln
aHQ7IGkrKykKKwkJCWdldF9saW5lKCk7CisJCWVuZCA9IHBhZ2U7CisJCWJhY2tfbGluZXMoaGVp
Z2h0KTsKKwkJdXBkYXRlX3RleHQoYnVmLCBwYWdlIC0gYnVmLCBlbmQgLSBidWYsIGRhdGEpOwor
CX0KKworCXBhZ2VfbGVuZ3RoID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsK
KwkJcHJpbnRfbGluZSh3aW4sIGksIHdpZHRoKTsKKwkJaWYgKCFwYXNzZWRfZW5kKQorCQkJcGFn
ZV9sZW5ndGgrKzsKKwkJaWYgKGVuZF9yZWFjaGVkICYmICFwYXNzZWRfZW5kKQorCQkJcGFzc2Vk
X2VuZCA9IDE7CisJfQorCXdub3V0cmVmcmVzaCh3aW4pOworfQorCisvKgorICogUHJpbnQgYSBu
ZXcgbGluZSBvZiB0ZXh0LgorICovCitzdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqIHdp
biwgaW50IHJvdywgaW50IHdpZHRoKQoreworCWNoYXIgKmxpbmU7CisKKwlsaW5lID0gZ2V0X2xp
bmUoKTsKKwlsaW5lICs9IE1JTihzdHJsZW4obGluZSksIGhzY3JvbGwpOwkvKiBTY3JvbGwgaG9y
aXpvbnRhbGx5ICovCisJd21vdmUod2luLCByb3csIDApOwkvKiBtb3ZlIGN1cnNvciB0byBjb3Jy
ZWN0IGxpbmUgKi8KKwl3YWRkY2god2luLCAnICcpOworCXdhZGRuc3RyKHdpbiwgbGluZSwgTUlO
KHN0cmxlbihsaW5lKSwgd2lkdGggLSAyKSk7CisKKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgcHJl
dmlvdXMgbGluZSAqLworI2lmIE9MRF9OQ1VSU0VTCisJeworCQlpbnQgeCA9IGdldGN1cngod2lu
KTsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIHg7IGkrKykKKwkJCXdhZGRj
aCh3aW4sICcgJyk7CisJfQorI2Vsc2UKKwl3Y2xydG9lb2wod2luKTsKKyNlbmRpZgorfQorCisv
KgorICogUmV0dXJuIGN1cnJlbnQgbGluZSBvZiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRi
b3goKSBhbmQgcHJpbnRfbGluZSgpLgorICogJ3BhZ2UnIHNob3VsZCBwb2ludCB0byBzdGFydCBv
ZiBjdXJyZW50IGxpbmUgYmVmb3JlIGNhbGxpbmcsIGFuZCB3aWxsIGJlCisgKiB1cGRhdGVkIHRv
IHBvaW50IHRvIHN0YXJ0IG9mIG5leHQgbGluZS4KKyAqLworc3RhdGljIGNoYXIgKmdldF9saW5l
KHZvaWQpCit7CisJaW50IGkgPSAwOworCXN0YXRpYyBjaGFyIGxpbmVbTUFYX0xFTiArIDFdOwor
CisJZW5kX3JlYWNoZWQgPSAwOworCXdoaWxlICgqcGFnZSAhPSAnXG4nKSB7CisJCWlmICgqcGFn
ZSA9PSAnXDAnKSB7CisJCQllbmRfcmVhY2hlZCA9IDE7CisJCQlicmVhazsKKwkJfSBlbHNlIGlm
IChpIDwgTUFYX0xFTikKKwkJCWxpbmVbaSsrXSA9ICoocGFnZSsrKTsKKwkJZWxzZSB7CisJCQkv
KiBUcnVuY2F0ZSBsaW5lcyBsb25nZXIgdGhhbiBNQVhfTEVOIGNoYXJhY3RlcnMgKi8KKwkJCWlm
IChpID09IE1BWF9MRU4pCisJCQkJbGluZVtpKytdID0gJ1wwJzsKKwkJCXBhZ2UrKzsKKwkJfQor
CX0KKwlpZiAoaSA8PSBNQVhfTEVOKQorCQlsaW5lW2ldID0gJ1wwJzsKKwlpZiAoIWVuZF9yZWFj
aGVkKQorCQlwYWdlKys7CQkvKiBtb3ZlIHBhc3QgJ1xuJyAqLworCisJcmV0dXJuIGxpbmU7Cit9
CisKKy8qCisgKiBQcmludCBjdXJyZW50IHBvc2l0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHByaW50
X3Bvc2l0aW9uKFdJTkRPVyAqIHdpbikKK3sKKwlpbnQgcGVyY2VudDsKKworCXdhdHRyc2V0KHdp
biwgZGxnLnBvc2l0aW9uX2luZGljYXRvci5hdHIpOworCXdia2dkc2V0KHdpbiwgZGxnLnBvc2l0
aW9uX2luZGljYXRvci5hdHIgJiBBX0NPTE9SKTsKKwlwZXJjZW50ID0gKHBhZ2UgLSBidWYpICog
MTAwIC8gc3RybGVuKGJ1Zik7CisJd21vdmUod2luLCBnZXRtYXh5KHdpbikgLSAzLCBnZXRtYXh4
KHdpbikgLSA5KTsKKwl3cHJpbnR3KHdpbiwgIiglM2QlJSkiLCBwZXJjZW50KTsKK30KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9seGRpYWxvZy91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWI0OTBkNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFs
b2cvdXRpbC5jCkBAIC0wLDAgKzEsNzAwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog
R1BMLTIuMCsKKy8qCisgKiAgdXRpbC5jCisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8g
TGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENP
TkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1
ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKKy8qIE5lZWRlZCBpbiBzaWdu
YWwgaGFuZGxlciBpbiBtY29uZi5jICovCitpbnQgc2F2ZWRfeCwgc2F2ZWRfeTsKKworc3RydWN0
IGRpYWxvZ19pbmZvIGRsZzsKKworc3RhdGljIHZvaWQgc2V0X21vbm9fdGhlbWUodm9pZCkKK3sK
KwlkbGcuc2NyZWVuLmF0ciA9IEFfTk9STUFMOworCWRsZy5zaGFkb3cuYXRyID0gQV9OT1JNQUw7
CisJZGxnLmRpYWxvZy5hdHIgPSBBX05PUk1BTDsKKwlkbGcudGl0bGUuYXRyID0gQV9CT0xEOwor
CWRsZy5ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxnLmJ1dHRvbl9hY3RpdmUuYXRyID0gQV9S
RVZFUlNFOworCWRsZy5idXR0b25faW5hY3RpdmUuYXRyID0gQV9ESU07CisJZGxnLmJ1dHRvbl9r
ZXlfYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsKKwlkbGcuYnV0dG9uX2tleV9pbmFjdGl2ZS5hdHIg
PSBBX0JPTEQ7CisJZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOworCWRs
Zy5idXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyID0gQV9OT1JNQUw7CisJZGxnLmlucHV0Ym94LmF0
ciA9IEFfTk9STUFMOworCWRsZy5pbnB1dGJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxn
LnNlYXJjaGJveC5hdHIgPSBBX05PUk1BTDsKKwlkbGcuc2VhcmNoYm94X3RpdGxlLmF0ciA9IEFf
Qk9MRDsKKwlkbGcuc2VhcmNoYm94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsKKwlkbGcucG9zaXRp
b25faW5kaWNhdG9yLmF0ciA9IEFfQk9MRDsKKwlkbGcubWVudWJveC5hdHIgPSBBX05PUk1BTDsK
KwlkbGcubWVudWJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxnLml0ZW0uYXRyID0gQV9O
T1JNQUw7CisJZGxnLml0ZW1fc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy50YWcuYXRy
ID0gQV9CT0xEOworCWRsZy50YWdfc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy50YWdf
a2V5LmF0ciA9IEFfQk9MRDsKKwlkbGcudGFnX2tleV9zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7
CisJZGxnLmNoZWNrLmF0ciA9IEFfQk9MRDsKKwlkbGcuY2hlY2tfc2VsZWN0ZWQuYXRyID0gQV9S
RVZFUlNFOworCWRsZy51YXJyb3cuYXRyID0gQV9CT0xEOworCWRsZy5kYXJyb3cuYXRyID0gQV9C
T0xEOworfQorCisjZGVmaW5lIERMR19DT0xPUihkaWFsb2csIGYsIGIsIGgpIFwKK2RvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRsZy5kaWFsb2cuZmcgPSAoZik7ICAgICAg
IFwKKwlkbGcuZGlhbG9nLmJnID0gKGIpOyAgICAgICBcCisJZGxnLmRpYWxvZy5obCA9IChoKTsg
ICAgICAgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgc2V0X2NsYXNzaWNfdGhlbWUodm9p
ZCkKK3sKKwlETEdfQ09MT1Ioc2NyZWVuLCAgICAgICAgICAgICAgICBDT0xPUl9DWUFOLCAgIENP
TE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKHNoYWRvdywgICAgICAgICAgICAgICAgQ09M
T1JfQkxBQ0ssICBDT0xPUl9CTEFDSywgIHRydWUpOworCURMR19DT0xPUihkaWFsb2csICAgICAg
ICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9S
KHRpdGxlLCAgICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUp
OworCURMR19DT0xPUihib3JkZXIsICAgICAgICAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1Jf
V0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9X
SElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwg
ICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0
dG9uX2tleV9hY3RpdmUsICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJ
RExHX0NPTE9SKGJ1dHRvbl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xPUl9XSElU
RSwgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBDT0xPUl9ZRUxM
T1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9pbmFjdGl2
ZSwgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihpbnB1dGJv
eCwgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExH
X0NPTE9SKGlucHV0Ym94X2JvcmRlciwgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwg
IGZhbHNlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94LCAgICAgICAgICAgICBDT0xPUl9CTEFDSywg
IENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUihzZWFyY2hib3hfdGl0bGUsICAgICAg
IENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94
X2JvcmRlciwgICAgICBDT0xPUl9XSElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NP
TE9SKHBvc2l0aW9uX2luZGljYXRvciwgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRy
dWUpOworCURMR19DT0xPUihtZW51Ym94LCAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09M
T1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKG1lbnVib3hfYm9yZGVyLCAgICAgICAgQ09M
T1JfV0hJVEUsICBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihpdGVtLCAgICAgICAg
ICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9S
KGl0ZW1fc2VsZWN0ZWQsICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUp
OworCURMR19DT0xPUih0YWcsICAgICAgICAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1Jf
V0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IodGFnX3NlbGVjdGVkLCAgICAgICAgICBDT0xPUl9Z
RUxMT1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAg
ICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUih0YWdf
a2V5X3NlbGVjdGVkLCAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlE
TEdfQ09MT1IoY2hlY2ssICAgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRF
LCAgZmFsc2UpOworCURMR19DT0xPUihjaGVja19zZWxlY3RlZCwgICAgICAgIENPTE9SX1dISVRF
LCAgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1IodWFycm93LCAgICAgICAgICAgICAg
ICBDT0xPUl9HUkVFTiwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGRhcnJvdywg
ICAgICAgICAgICAgICAgQ09MT1JfR1JFRU4sICBDT0xPUl9XSElURSwgIHRydWUpOworfQorCitz
dGF0aWMgdm9pZCBzZXRfYmxhY2tiZ190aGVtZSh2b2lkKQoreworCURMR19DT0xPUihzY3JlZW4s
IENPTE9SX1JFRCwgICBDT0xPUl9CTEFDSywgdHJ1ZSk7CisJRExHX0NPTE9SKHNoYWRvdywgQ09M
T1JfQkxBQ0ssIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGRpYWxvZywgQ09MT1Jf
V0hJVEUsIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKHRpdGxlLCAgQ09MT1JfUkVE
LCAgIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGJvcmRlciwgQ09MT1JfQkxBQ0ss
IENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihidXR0b25fYWN0aXZlLCAgICAgICAg
IENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2lu
YWN0aXZlLCAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NP
TE9SKGJ1dHRvbl9rZXlfYWN0aXZlLCAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1
ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xP
Ul9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCAgIENPTE9S
X1dISVRFLCAgQ09MT1JfUkVELCAgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2lu
YWN0aXZlLCBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihp
bnB1dGJveCwgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExH
X0NPTE9SKGlucHV0Ym94X2JvcmRlciwgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNl
KTsKKworCURMR19DT0xPUihzZWFyY2hib3gsICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JM
QUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKHNlYXJjaGJveF90aXRsZSwgIENPTE9SX1lFTExPVywg
Q09MT1JfQkxBQ0ssIHRydWUpOworCURMR19DT0xPUihzZWFyY2hib3hfYm9yZGVyLCBDT0xPUl9C
TEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0
b3IsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssICBmYWxzZSk7CisKKwlETEdfQ09MT1IobWVudWJv
eCwgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xP
UihtZW51Ym94X2JvcmRlciwgICBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsKKwor
CURMR19DT0xPUihpdGVtLCAgICAgICAgICAgICBDT0xPUl9XSElURSwgQ09MT1JfQkxBQ0ssIGZh
bHNlKTsKKwlETEdfQ09MT1IoaXRlbV9zZWxlY3RlZCwgICAgQ09MT1JfV0hJVEUsIENPTE9SX1JF
RCwgICBmYWxzZSk7CisKKwlETEdfQ09MT1IodGFnLCAgICAgICAgICAgICAgQ09MT1JfUkVELCAg
ICBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUih0YWdfc2VsZWN0ZWQsICAgICBDT0xP
Ul9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsKKwlETEdfQ09MT1IodGFnX2tleSwgICAgICAg
ICAgQ09MT1JfUkVELCAgICBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUih0YWdfa2V5
X3NlbGVjdGVkLCBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsKKworCURMR19DT0xP
UihjaGVjaywgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJ
RExHX0NPTE9SKGNoZWNrX3NlbGVjdGVkLCAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRy
dWUpOworCisJRExHX0NPTE9SKHVhcnJvdywgQ09MT1JfUkVELCBDT0xPUl9CTEFDSywgZmFsc2Up
OworCURMR19DT0xPUihkYXJyb3csIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKK30K
Kworc3RhdGljIHZvaWQgc2V0X2JsdWV0aXRsZV90aGVtZSh2b2lkKQoreworCXNldF9jbGFzc2lj
X3RoZW1lKCk7CisJRExHX0NPTE9SKHRpdGxlLCAgICAgICAgICAgICAgIENPTE9SX0JMVUUsICAg
Q09MT1JfV0hJVEUsIHRydWUpOworCURMR19DT0xPUihidXR0b25fa2V5X2FjdGl2ZSwgICBDT0xP
Ul9ZRUxMT1csIENPTE9SX0JMVUUsICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2Fj
dGl2ZSwgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKHNlYXJj
aGJveF90aXRsZSwgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOworCURMR19D
T0xPUihwb3NpdGlvbl9pbmRpY2F0b3IsICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVl
KTsKKwlETEdfQ09MT1IodGFnLCAgICAgICAgICAgICAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9X
SElURSwgdHJ1ZSk7CisJRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAgICAgIENPTE9SX0JMVUUs
ICAgQ09MT1JfV0hJVEUsIHRydWUpOworCit9CisKKy8qCisgKiBTZWxlY3QgY29sb3IgdGhlbWUK
KyAqLworc3RhdGljIGludCBzZXRfdGhlbWUoY29uc3QgY2hhciAqdGhlbWUpCit7CisJaW50IHVz
ZV9jb2xvciA9IDE7CisJaWYgKCF0aGVtZSkKKwkJc2V0X2JsdWV0aXRsZV90aGVtZSgpOworCWVs
c2UgaWYgKHN0cmNtcCh0aGVtZSwgImNsYXNzaWMiKSA9PSAwKQorCQlzZXRfY2xhc3NpY190aGVt
ZSgpOworCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwgImJsdWV0aXRsZSIpID09IDApCisJCXNldF9i
bHVldGl0bGVfdGhlbWUoKTsKKwllbHNlIGlmIChzdHJjbXAodGhlbWUsICJibGFja2JnIikgPT0g
MCkKKwkJc2V0X2JsYWNrYmdfdGhlbWUoKTsKKwllbHNlIGlmIChzdHJjbXAodGhlbWUsICJtb25v
IikgPT0gMCkKKwkJdXNlX2NvbG9yID0gMDsKKworCXJldHVybiB1c2VfY29sb3I7Cit9CisKK3N0
YXRpYyB2b2lkIGluaXRfb25lX2NvbG9yKHN0cnVjdCBkaWFsb2dfY29sb3IgKmNvbG9yKQorewor
CXN0YXRpYyBpbnQgcGFpciA9IDA7CisKKwlwYWlyKys7CisJaW5pdF9wYWlyKHBhaXIsIGNvbG9y
LT5mZywgY29sb3ItPmJnKTsKKwlpZiAoY29sb3ItPmhsKQorCQljb2xvci0+YXRyID0gQV9CT0xE
IHwgQ09MT1JfUEFJUihwYWlyKTsKKwllbHNlCisJCWNvbG9yLT5hdHIgPSBDT0xPUl9QQUlSKHBh
aXIpOworfQorCitzdGF0aWMgdm9pZCBpbml0X2RpYWxvZ19jb2xvcnModm9pZCkKK3sKKwlpbml0
X29uZV9jb2xvcigmZGxnLnNjcmVlbik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5zaGFkb3cpOwor
CWluaXRfb25lX2NvbG9yKCZkbGcuZGlhbG9nKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRpdGxl
KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJvcmRlcik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5i
dXR0b25fYWN0aXZlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9pbmFjdGl2ZSk7CisJ
aW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fa2V5X2FjdGl2ZSk7CisJaW5pdF9vbmVfY29sb3Io
JmRsZy5idXR0b25fa2V5X2luYWN0aXZlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9s
YWJlbF9hY3RpdmUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZl
KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmlucHV0Ym94KTsKKwlpbml0X29uZV9jb2xvcigmZGxn
LmlucHV0Ym94X2JvcmRlcik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5zZWFyY2hib3gpOworCWlu
aXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94X3RpdGxlKTsKKwlpbml0X29uZV9jb2xvcigmZGxn
LnNlYXJjaGJveF9ib3JkZXIpOworCWluaXRfb25lX2NvbG9yKCZkbGcucG9zaXRpb25faW5kaWNh
dG9yKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLm1lbnVib3gpOworCWluaXRfb25lX2NvbG9yKCZk
bGcubWVudWJveF9ib3JkZXIpOworCWluaXRfb25lX2NvbG9yKCZkbGcuaXRlbSk7CisJaW5pdF9v
bmVfY29sb3IoJmRsZy5pdGVtX3NlbGVjdGVkKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZyk7
CisJaW5pdF9vbmVfY29sb3IoJmRsZy50YWdfc2VsZWN0ZWQpOworCWluaXRfb25lX2NvbG9yKCZk
bGcudGFnX2tleSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy50YWdfa2V5X3NlbGVjdGVkKTsKKwlp
bml0X29uZV9jb2xvcigmZGxnLmNoZWNrKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmNoZWNrX3Nl
bGVjdGVkKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnVhcnJvdyk7CisJaW5pdF9vbmVfY29sb3Io
JmRsZy5kYXJyb3cpOworfQorCisvKgorICogU2V0dXAgZm9yIGNvbG9yIGRpc3BsYXkKKyAqLwor
c3RhdGljIHZvaWQgY29sb3Jfc2V0dXAoY29uc3QgY2hhciAqdGhlbWUpCit7CisJaW50IHVzZV9j
b2xvcjsKKworCXVzZV9jb2xvciA9IHNldF90aGVtZSh0aGVtZSk7CisJaWYgKHVzZV9jb2xvciAm
JiBoYXNfY29sb3JzKCkpIHsKKwkJc3RhcnRfY29sb3IoKTsKKwkJaW5pdF9kaWFsb2dfY29sb3Jz
KCk7CisJfSBlbHNlCisJCXNldF9tb25vX3RoZW1lKCk7Cit9CisKKy8qCisgKiBTZXQgd2luZG93
IHRvIGF0dHJpYnV0ZSAnYXR0cicKKyAqLwordm9pZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwg
aW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYXR0cikKK3sKKwlpbnQgaSwgajsKKworCXdh
dHRyc2V0KHdpbiwgYXR0cik7CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXdt
b3ZlKHdpbiwgaSwgMCk7CisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQorCQkJd2FkZGNo
KHdpbiwgJyAnKTsKKwl9CisJdG91Y2h3aW4od2luKTsKK30KKwordm9pZCBkaWFsb2dfY2xlYXIo
dm9pZCkKK3sKKwlpbnQgbGluZXMsIGNvbHVtbnM7CisKKwlsaW5lcyA9IGdldG1heHkoc3Rkc2Ny
KTsKKwljb2x1bW5zID0gZ2V0bWF4eChzdGRzY3IpOworCisJYXR0cl9jbGVhcihzdGRzY3IsIGxp
bmVzLCBjb2x1bW5zLCBkbGcuc2NyZWVuLmF0cik7CisJLyogRGlzcGxheSBiYWNrZ3JvdW5kIHRp
dGxlIGlmIGl0IGV4aXN0cyAuLi4gLSBTTEggKi8KKwlpZiAoZGxnLmJhY2t0aXRsZSAhPSBOVUxM
KSB7CisJCWludCBpLCBsZW4gPSAwLCBza2lwID0gMDsKKwkJc3RydWN0IHN1YnRpdGxlX2xpc3Qg
KnBvczsKKworCQl3YXR0cnNldChzdGRzY3IsIGRsZy5zY3JlZW4uYXRyKTsKKwkJbXZ3YWRkc3Ry
KHN0ZHNjciwgMCwgMSwgKGNoYXIgKilkbGcuYmFja3RpdGxlKTsKKworCQlmb3IgKHBvcyA9IGRs
Zy5zdWJ0aXRsZXM7IHBvcyAhPSBOVUxMOyBwb3MgPSBwb3MtPm5leHQpIHsKKwkJCS8qIDMgaXMg
Zm9yIHRoZSBhcnJvdyBhbmQgc3BhY2VzICovCisJCQlsZW4gKz0gc3RybGVuKHBvcy0+dGV4dCkg
KyAzOworCQl9CisKKwkJd21vdmUoc3Rkc2NyLCAxLCAxKTsKKwkJaWYgKGxlbiA+IGNvbHVtbnMg
LSAyKSB7CisJCQljb25zdCBjaGFyICplbGxpcHNpcyA9ICJbLi4uXSAiOworCQkJd2FkZHN0cihz
dGRzY3IsIGVsbGlwc2lzKTsKKwkJCXNraXAgPSBsZW4gLSAoY29sdW1ucyAtIDIgLSBzdHJsZW4o
ZWxsaXBzaXMpKTsKKwkJfQorCisJCWZvciAocG9zID0gZGxnLnN1YnRpdGxlczsgcG9zICE9IE5V
TEw7IHBvcyA9IHBvcy0+bmV4dCkgeworCQkJaWYgKHNraXAgPT0gMCkKKwkJCQl3YWRkY2goc3Rk
c2NyLCBBQ1NfUkFSUk9XKTsKKwkJCWVsc2UKKwkJCQlza2lwLS07CisKKwkJCWlmIChza2lwID09
IDApCisJCQkJd2FkZGNoKHN0ZHNjciwgJyAnKTsKKwkJCWVsc2UKKwkJCQlza2lwLS07CisKKwkJ
CWlmIChza2lwIDwgc3RybGVuKHBvcy0+dGV4dCkpIHsKKwkJCQl3YWRkc3RyKHN0ZHNjciwgcG9z
LT50ZXh0ICsgc2tpcCk7CisJCQkJc2tpcCA9IDA7CisJCQl9IGVsc2UKKwkJCQlza2lwIC09IHN0
cmxlbihwb3MtPnRleHQpOworCisJCQlpZiAoc2tpcCA9PSAwKQorCQkJCXdhZGRjaChzdGRzY3Is
ICcgJyk7CisJCQllbHNlCisJCQkJc2tpcC0tOworCQl9CisKKwkJZm9yIChpID0gbGVuICsgMTsg
aSA8IGNvbHVtbnMgLSAxOyBpKyspCisJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfSExJTkUpOworCX0K
Kwl3bm91dHJlZnJlc2goc3Rkc2NyKTsKK30KKworLyoKKyAqIERvIHNvbWUgaW5pdGlhbGl6YXRp
b24gZm9yIGRpYWxvZworICovCitpbnQgaW5pdF9kaWFsb2coY29uc3QgY2hhciAqYmFja3RpdGxl
KQoreworCWludCBoZWlnaHQsIHdpZHRoOworCisJaW5pdHNjcigpOwkJLyogSW5pdCBjdXJzZXMg
Ki8KKworCS8qIEdldCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBmb3Igc2lnbmFsIGhhbmRsZXIg
aW4gbWNvbmYuYyAqLworCWdldHl4KHN0ZHNjciwgc2F2ZWRfeSwgc2F2ZWRfeCk7CisKKwlnZXRt
YXh5eChzdGRzY3IsIGhlaWdodCwgd2lkdGgpOworCWlmIChoZWlnaHQgPCBXSU5ET1dfSEVJR1RI
X01JTiB8fCB3aWR0aCA8IFdJTkRPV19XSURUSF9NSU4pIHsKKwkJZW5kd2luKCk7CisJCXJldHVy
biAtRVJSRElTUExBWVRPT1NNQUxMOworCX0KKworCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7
CisJY29sb3Jfc2V0dXAoZ2V0ZW52KCJNRU5VQ09ORklHX0NPTE9SIikpOworCisJa2V5cGFkKHN0
ZHNjciwgVFJVRSk7CisJY2JyZWFrKCk7CisJbm9lY2hvKCk7CisJZGlhbG9nX2NsZWFyKCk7CisK
KwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXRfZGlhbG9nX2JhY2t0aXRsZShjb25zdCBjaGFyICpi
YWNrdGl0bGUpCit7CisJZGxnLmJhY2t0aXRsZSA9IGJhY2t0aXRsZTsKK30KKwordm9pZCBzZXRf
ZGlhbG9nX3N1YnRpdGxlcyhzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0bGVzKQoreworCWRs
Zy5zdWJ0aXRsZXMgPSBzdWJ0aXRsZXM7Cit9CisKKy8qCisgKiBFbmQgdXNpbmcgZGlhbG9nIGZ1
bmN0aW9ucy4KKyAqLwordm9pZCBlbmRfZGlhbG9nKGludCB4LCBpbnQgeSkKK3sKKwkvKiBtb3Zl
IGN1cnNvciBiYWNrIHRvIG9yaWdpbmFsIHBvc2l0aW9uICovCisJbW92ZSh5LCB4KTsKKwlyZWZy
ZXNoKCk7CisJZW5kd2luKCk7Cit9CisKKy8qIFByaW50IHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9n
LiBDZW50ZXIgdGhlIHRpdGxlIGFuZCB0cnVuY2F0ZQorICogdGlsZSBpZiB3aWRlciB0aGFuIGRp
YWxvZyAoLSAyIGNoYXJzKS4KKyAqKi8KK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2cs
IGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpCit7CisJaWYgKHRpdGxlKSB7CisJCWludCB0
bGVuID0gTUlOKHdpZHRoIC0gMiwgc3RybGVuKHRpdGxlKSk7CisJCXdhdHRyc2V0KGRpYWxvZywg
ZGxnLnRpdGxlLmF0cik7CisJCW12d2FkZGNoKGRpYWxvZywgMCwgKHdpZHRoIC0gdGxlbikgLyAy
IC0gMSwgJyAnKTsKKwkJbXZ3YWRkbnN0cihkaWFsb2csIDAsICh3aWR0aCAtIHRsZW4pLzIsIHRp
dGxlLCB0bGVuKTsKKwkJd2FkZGNoKGRpYWxvZywgJyAnKTsKKwl9Cit9CisKKy8qCisgKiBQcmlu
dCBhIHN0cmluZyBvZiB0ZXh0IGluIGEgd2luZG93LCBhdXRvbWF0aWNhbGx5IHdyYXAgYXJvdW5k
IHRvIHRoZQorICogbmV4dCBsaW5lIGlmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcgdG8gZml0IG9u
IG9uZSBsaW5lLiBOZXdsaW5lCisgKiBjaGFyYWN0ZXJzICdcbicgYXJlIHByb3BwZXJseSBwcm9j
ZXNzZWQuICBXZSBzdGFydCBvbiBhIG5ldyBsaW5lCisgKiBpZiB0aGVyZSBpcyBubyByb29tIGZv
ciBhdCBsZWFzdCA0IG5vbmJsYW5rcyBmb2xsb3dpbmcgYSBkb3VibGUtc3BhY2UuCisgKi8KK3Zv
aWQgcHJpbnRfYXV0b3dyYXAoV0lORE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3
aWR0aCwgaW50IHksIGludCB4KQoreworCWludCBuZXdsLCBjdXJfeCwgY3VyX3k7CisJaW50IHBy
b21wdF9sZW4sIHJvb20sIHdsZW47CisJY2hhciB0ZW1wc3RyW01BWF9MRU4gKyAxXSwgKndvcmQs
ICpzcCwgKnNwMiwgKm5ld2xpbmVfc2VwYXJhdG9yID0gMDsKKworCXN0cmNweSh0ZW1wc3RyLCBw
cm9tcHQpOworCisJcHJvbXB0X2xlbiA9IHN0cmxlbih0ZW1wc3RyKTsKKworCWlmIChwcm9tcHRf
bGVuIDw9IHdpZHRoIC0geCAqIDIpIHsJLyogSWYgcHJvbXB0IGlzIHNob3J0ICovCisJCXdtb3Zl
KHdpbiwgeSwgKHdpZHRoIC0gcHJvbXB0X2xlbikgLyAyKTsKKwkJd2FkZHN0cih3aW4sIHRlbXBz
dHIpOworCX0gZWxzZSB7CisJCWN1cl94ID0geDsKKwkJY3VyX3kgPSB5OworCQluZXdsID0gMTsK
KwkJd29yZCA9IHRlbXBzdHI7CisJCXdoaWxlICh3b3JkICYmICp3b3JkKSB7CisJCQlzcCA9IHN0
cnBicmsod29yZCwgIlxuICIpOworCQkJaWYgKHNwICYmICpzcCA9PSAnXG4nKQorCQkJCW5ld2xp
bmVfc2VwYXJhdG9yID0gc3A7CisKKwkJCWlmIChzcCkKKwkJCQkqc3ArKyA9IDA7CisKKwkJCS8q
IFdyYXAgdG8gbmV4dCBsaW5lIGlmIGVpdGhlciB0aGUgd29yZCBkb2VzIG5vdCBmaXQsCisJCQkg
ICBvciBpdCBpcyB0aGUgZmlyc3Qgd29yZCBvZiBhIG5ldyBzZW50ZW5jZSwgYW5kIGl0IGlzCisJ
CQkgICBzaG9ydCwgYW5kIHRoZSBuZXh0IHdvcmQgZG9lcyBub3QgZml0LiAqLworCQkJcm9vbSA9
IHdpZHRoIC0gY3VyX3g7CisJCQl3bGVuID0gc3RybGVuKHdvcmQpOworCQkJaWYgKHdsZW4gPiBy
b29tIHx8CisJCQkgICAgKG5ld2wgJiYgd2xlbiA8IDQgJiYgc3AKKwkJCSAgICAgJiYgd2xlbiAr
IDEgKyBzdHJsZW4oc3ApID4gcm9vbQorCQkJICAgICAmJiAoIShzcDIgPSBzdHJwYnJrKHNwLCAi
XG4gIikpCisJCQkJIHx8IHdsZW4gKyAxICsgKHNwMiAtIHNwKSA+IHJvb20pKSkgeworCQkJCWN1
cl95Kys7CisJCQkJY3VyX3ggPSB4OworCQkJfQorCQkJd21vdmUod2luLCBjdXJfeSwgY3VyX3gp
OworCQkJd2FkZHN0cih3aW4sIHdvcmQpOworCQkJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOwor
CisJCQkvKiBNb3ZlIHRvIHRoZSBuZXh0IGxpbmUgaWYgdGhlIHdvcmQgc2VwYXJhdG9yIHdhcyBh
IG5ld2xpbmUgKi8KKwkJCWlmIChuZXdsaW5lX3NlcGFyYXRvcikgeworCQkJCWN1cl95Kys7CisJ
CQkJY3VyX3ggPSB4OworCQkJCW5ld2xpbmVfc2VwYXJhdG9yID0gMDsKKwkJCX0gZWxzZQorCQkJ
CWN1cl94Kys7CisKKwkJCWlmIChzcCAmJiAqc3AgPT0gJyAnKSB7CisJCQkJY3VyX3grKzsJLyog
ZG91YmxlIHNwYWNlICovCisJCQkJd2hpbGUgKCorK3NwID09ICcgJykgOworCQkJCW5ld2wgPSAx
OworCQkJfSBlbHNlCisJCQkJbmV3bCA9IDA7CisJCQl3b3JkID0gc3A7CisJCX0KKwl9Cit9CisK
Ky8qCisgKiBQcmludCBhIGJ1dHRvbgorICovCit2b2lkIHByaW50X2J1dHRvbihXSU5ET1cgKiB3
aW4sIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3RlZCkKK3sKKwlp
bnQgaSwgdGVtcDsKKworCXdtb3ZlKHdpbiwgeSwgeCk7CisJd2F0dHJzZXQod2luLCBzZWxlY3Rl
ZCA/IGRsZy5idXR0b25fYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2luYWN0aXZlLmF0cik7
CisJd2FkZHN0cih3aW4sICI8Iik7CisJdGVtcCA9IHN0cnNwbihsYWJlbCwgIiAiKTsKKwlsYWJl
bCArPSB0ZW1wOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2xhYmVsX2Fj
dGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIpOworCWZvciAoaSA9
IDA7IGkgPCB0ZW1wOyBpKyspCisJCXdhZGRjaCh3aW4sICcgJyk7CisJd2F0dHJzZXQod2luLCBz
ZWxlY3RlZCA/IGRsZy5idXR0b25fa2V5X2FjdGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9rZXlf
aW5hY3RpdmUuYXRyKTsKKwl3YWRkY2god2luLCBsYWJlbFswXSk7CisJd2F0dHJzZXQod2luLCBz
ZWxlY3RlZCA/IGRsZy5idXR0b25fbGFiZWxfYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2xh
YmVsX2luYWN0aXZlLmF0cik7CisJd2FkZHN0cih3aW4sIChjaGFyICopbGFiZWwgKyAxKTsKKwl3
YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9hY3RpdmUuYXRyCisJCSA6IGRsZy5i
dXR0b25faW5hY3RpdmUuYXRyKTsKKwl3YWRkc3RyKHdpbiwgIj4iKTsKKwl3bW92ZSh3aW4sIHks
IHggKyB0ZW1wICsgMSk7Cit9CisKKy8qCisgKiBEcmF3IGEgcmVjdGFuZ3VsYXIgYm94IHdpdGgg
bGluZSBkcmF3aW5nIGNoYXJhY3RlcnMKKyAqLwordm9pZAorZHJhd19ib3goV0lORE9XICogd2lu
LCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCwKKwkgY2h0eXBlIGJveCwgY2h0
eXBlIGJvcmRlcikKK3sKKwlpbnQgaSwgajsKKworCXdhdHRyc2V0KHdpbiwgMCk7CisJZm9yIChp
ID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXdtb3ZlKHdpbiwgeSArIGksIHgpOworCQlmb3Ig
KGogPSAwOyBqIDwgd2lkdGg7IGorKykKKwkJCWlmICghaSAmJiAhaikKKwkJCQl3YWRkY2god2lu
LCBib3JkZXIgfCBBQ1NfVUxDT1JORVIpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYm
ICFqKQorCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19MTENPUk5FUik7CisJCQllbHNlIGlm
ICghaSAmJiBqID09IHdpZHRoIC0gMSkKKwkJCQl3YWRkY2god2luLCBib3ggfCBBQ1NfVVJDT1JO
RVIpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmIGogPT0gd2lkdGggLSAxKQorCQkJ
CXdhZGRjaCh3aW4sIGJveCB8IEFDU19MUkNPUk5FUik7CisJCQllbHNlIGlmICghaSkKKwkJCQl3
YWRkY2god2luLCBib3JkZXIgfCBBQ1NfSExJTkUpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQg
LSAxKQorCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19ITElORSk7CisJCQllbHNlIGlmICghaikK
KwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfVkxJTkUpOworCQkJZWxzZSBpZiAoaiA9PSB3
aWR0aCAtIDEpCisJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1ZMSU5FKTsKKwkJCWVsc2UKKwkJ
CQl3YWRkY2god2luLCBib3ggfCAnICcpOworCX0KK30KKworLyoKKyAqIERyYXcgc2hhZG93cyBh
bG9uZyB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlIHRvIGdpdmUgYSBtb3JlIDNEIGxvb2sKKyAq
IHRvIHRoZSBib3hlcworICovCit2b2lkIGRyYXdfc2hhZG93KFdJTkRPVyAqIHdpbiwgaW50IHks
IGludCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGk7CisKKwlpZiAoaGFzX2Nv
bG9ycygpKSB7CS8qIFdoZXRoZXIgdGVybWluYWwgc3VwcG9ydHMgY29sb3I/ICovCisJCXdhdHRy
c2V0KHdpbiwgZGxnLnNoYWRvdy5hdHIpOworCQl3bW92ZSh3aW4sIHkgKyBoZWlnaHQsIHggKyAy
KTsKKwkJZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCisJCQl3YWRkY2god2luLCB3aW5jaCh3
aW4pICYgQV9DSEFSVEVYVCk7CisJCWZvciAoaSA9IHkgKyAxOyBpIDwgeSArIGhlaWdodCArIDE7
IGkrKykgeworCQkJd21vdmUod2luLCBpLCB4ICsgd2lkdGgpOworCQkJd2FkZGNoKHdpbiwgd2lu
Y2god2luKSAmIEFfQ0hBUlRFWFQpOworCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hB
UlRFWFQpOworCQl9CisJCXdub3V0cmVmcmVzaCh3aW4pOworCX0KK30KKworLyoKKyAqICBSZXR1
cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBhbHBoYWJldGljIGNoYXJhY3RlciBpbiBhIHN0
cmluZy4KKyAqLworaW50IGZpcnN0X2FscGhhKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hh
ciAqZXhlbXB0KQoreworCWludCBpLCBpbl9wYXJlbiA9IDAsIGM7CisKKwlmb3IgKGkgPSAwOyBp
IDwgc3RybGVuKHN0cmluZyk7IGkrKykgeworCQljID0gdG9sb3dlcihzdHJpbmdbaV0pOworCisJ
CWlmIChzdHJjaHIoIjxbKCIsIGMpKQorCQkJKytpbl9wYXJlbjsKKwkJaWYgKHN0cmNocigiPl0p
IiwgYykgJiYgaW5fcGFyZW4gPiAwKQorCQkJLS1pbl9wYXJlbjsKKworCQlpZiAoKCFpbl9wYXJl
bikgJiYgaXNhbHBoYShjKSAmJiBzdHJjaHIoZXhlbXB0LCBjKSA9PSAwKQorCQkJcmV0dXJuIGk7
CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBuY3Vyc2VzIHVzZXMgRVNDIHRvIGRldGVj
dCBlc2NhcGVkIGNoYXIgc2VxdWVuY2VzLiBUaGlzIHJlc3V0bCBpbgorICogYSBzbWFsbCB0aW1l
b3V0IGJlZm9yZSBFU0MgaXMgYWN0dWFsbHkgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbi4K
KyAqIGx4ZGlhbG9nIHN1Z2dlc3QgPEVTQz4gPEVTQz4gd2hpY2ggaXMgY29ycmVjdGx5IHRyYW5z
bGF0ZWQgdG8gdHdvCisgKiB0aW1lcyBlc2MuIEJ1dCB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIHRo
ZSBzZWNvbmQgZXNjIHRvIGF2b2lkIHN0ZXBwaW5nCisgKiBvdXQgb25lIG1lbnUgdG9vIG11Y2gu
IEZpbHRlciBhd2F5IGFsbCBlc2NhcGVkIGtleSBzZXF1ZW5jZXMgc2luY2UKKyAqIGtleXBhZChG
QUxTRSkgdHVybiBvZmYgbmN1cnNlcyBzdXBwb3J0IGZvciBlc2NhcGUgc2VxdWVuY2VzIC0gYW5k
IHRoYXRzCisgKiBuZWVkZWQgdG8gbWFrZSBub3RpbWVvdXQoKSBkbyBhcyBleHBlY3RlZC4KKyAq
LworaW50IG9uX2tleV9lc2MoV0lORE9XICp3aW4pCit7CisJaW50IGtleTsKKwlpbnQga2V5MjsK
KwlpbnQga2V5MzsKKworCW5vZGVsYXkod2luLCBUUlVFKTsKKwlrZXlwYWQod2luLCBGQUxTRSk7
CisJa2V5ID0gd2dldGNoKHdpbik7CisJa2V5MiA9IHdnZXRjaCh3aW4pOworCWRvIHsKKwkJa2V5
MyA9IHdnZXRjaCh3aW4pOworCX0gd2hpbGUgKGtleTMgIT0gRVJSKTsKKwlub2RlbGF5KHdpbiwg
RkFMU0UpOworCWtleXBhZCh3aW4sIFRSVUUpOworCWlmIChrZXkgPT0gS0VZX0VTQyAmJiBrZXky
ID09IEVSUikKKwkJcmV0dXJuIEtFWV9FU0M7CisJZWxzZSBpZiAoa2V5ICE9IEVSUiAmJiBrZXkg
IT0gS0VZX0VTQyAmJiBrZXkyID09IEVSUikKKwkJdW5nZXRjaChrZXkpOworCisJcmV0dXJuIC0x
OworfQorCisvKiByZWRyYXcgc2NyZWVuIGluIG5ldyBzaXplICovCitpbnQgb25fa2V5X3Jlc2l6
ZSh2b2lkKQoreworCWRpYWxvZ19jbGVhcigpOworCXJldHVybiBLRVlfUkVTSVpFOworfQorCitz
dHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1fY3VyOworc3RydWN0IGRpYWxvZ19saXN0IGl0ZW1fbmls
Oworc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2hlYWQ7CisKK3ZvaWQgaXRlbV9yZXNldCh2b2lk
KQoreworCXN0cnVjdCBkaWFsb2dfbGlzdCAqcCwgKm5leHQ7CisKKwlmb3IgKHAgPSBpdGVtX2hl
YWQ7IHA7IHAgPSBuZXh0KSB7CisJCW5leHQgPSBwLT5uZXh0OworCQlmcmVlKHApOworCX0KKwlp
dGVtX2hlYWQgPSBOVUxMOworCWl0ZW1fY3VyID0gJml0ZW1fbmlsOworfQorCit2b2lkIGl0ZW1f
bWFrZShjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBkaWFs
b2dfbGlzdCAqcCA9IG1hbGxvYyhzaXplb2YoKnApKTsKKworCWlmIChpdGVtX2hlYWQpCisJCWl0
ZW1fY3VyLT5uZXh0ID0gcDsKKwllbHNlCisJCWl0ZW1faGVhZCA9IHA7CisJaXRlbV9jdXIgPSBw
OworCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZz
bnByaW50ZihpdGVtX2N1ci0+bm9kZS5zdHIsIHNpemVvZihpdGVtX2N1ci0+bm9kZS5zdHIpLCBm
bXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIGl0ZW1fYWRkX3N0cihjb25zdCBjaGFy
ICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXNpemVfdCBhdmFpbDsKKworCWF2YWlsID0g
c2l6ZW9mKGl0ZW1fY3VyLT5ub2RlLnN0cikgLSBzdHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKTsK
KworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihpdGVtX2N1ci0+bm9kZS5zdHIgKyBz
dHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKSwKKwkJICBhdmFpbCwgZm10LCBhcCk7CisJaXRlbV9j
dXItPm5vZGUuc3RyW3NpemVvZihpdGVtX2N1ci0+bm9kZS5zdHIpIC0gMV0gPSAnXDAnOworCXZh
X2VuZChhcCk7Cit9CisKK3ZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKQoreworCWl0ZW1fY3Vy
LT5ub2RlLnRhZyA9IHRhZzsKK30KK3ZvaWQgaXRlbV9zZXRfZGF0YSh2b2lkICpwdHIpCit7CisJ
aXRlbV9jdXItPm5vZGUuZGF0YSA9IHB0cjsKK30KKwordm9pZCBpdGVtX3NldF9zZWxlY3RlZChp
bnQgdmFsKQoreworCWl0ZW1fY3VyLT5ub2RlLnNlbGVjdGVkID0gdmFsOworfQorCitpbnQgaXRl
bV9hY3RpdmF0ZV9zZWxlY3RlZCh2b2lkKQoreworCWl0ZW1fZm9yZWFjaCgpCisJCWlmIChpdGVt
X2lzX3NlbGVjdGVkKCkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqaXRl
bV9kYXRhKHZvaWQpCit7CisJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLmRhdGE7Cit9CisKK2NoYXIg
aXRlbV90YWcodm9pZCkKK3sKKwlyZXR1cm4gaXRlbV9jdXItPm5vZGUudGFnOworfQorCitpbnQg
aXRlbV9jb3VudCh2b2lkKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7
CisKKwlmb3IgKHAgPSBpdGVtX2hlYWQ7IHA7IHAgPSBwLT5uZXh0KQorCQluKys7CisJcmV0dXJu
IG47Cit9CisKK3ZvaWQgaXRlbV9zZXQoaW50IG4pCit7CisJaW50IGkgPSAwOworCWl0ZW1fZm9y
ZWFjaCgpCisJCWlmIChpKysgPT0gbikKKwkJCXJldHVybjsKK30KKworaW50IGl0ZW1fbih2b2lk
KQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7CisKKwlmb3IgKHAgPSBp
dGVtX2hlYWQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwID09IGl0ZW1fY3VyKQorCQkJcmV0
dXJuIG47CisJCW4rKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKml0ZW1fc3Ry
KHZvaWQpCit7CisJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLnN0cjsKK30KKworaW50IGl0ZW1faXNf
c2VsZWN0ZWQodm9pZCkKK3sKKwlyZXR1cm4gKGl0ZW1fY3VyLT5ub2RlLnNlbGVjdGVkICE9IDAp
OworfQorCitpbnQgaXRlbV9pc190YWcoY2hhciB0YWcpCit7CisJcmV0dXJuIChpdGVtX2N1ci0+
bm9kZS50YWcgPT0gdGFnKTsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhk
aWFsb2cveWVzbm8uYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cveWVzbm8uYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhYzliCi0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNuby5jCkBAIC0wLDAgKzEsMTAxIEBA
CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgeWVzbm8uYyAt
LSBpbXBsZW1lbnRzIHRoZSB5ZXMvbm8gYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2
aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVM
IENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2lu
Y2x1ZGUgImRpYWxvZy5oIgorCisvKgorICogRGlzcGxheSB0ZXJtaW5hdGlvbiBidXR0b25zCisg
Ki8KK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0
LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDEwOwor
CWludCB5ID0gaGVpZ2h0IC0gMjsKKworCXByaW50X2J1dHRvbihkaWFsb2csICIgWWVzICIsIHks
IHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbihkaWFsb2csICIgIE5vICAiLCB5LCB4
ICsgMTMsIHNlbGVjdGVkID09IDEpOworCisJd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDEzICog
c2VsZWN0ZWQpOworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgZGlh
bG9nIGJveCB3aXRoIHR3byBidXR0b25zIC0gWWVzIGFuZCBObworICovCitpbnQgZGlhbG9nX3ll
c25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGlu
dCB3aWR0aCkKK3sKKwlpbnQgaSwgeCwgeSwga2V5ID0gMCwgYnV0dG9uID0gMDsKKwlXSU5ET1cg
KmRpYWxvZzsKKworZG9fcmVzaXplOgorCWlmIChnZXRtYXh5KHN0ZHNjcikgPCAoaGVpZ2h0ICsg
WUVTTk9fSEVJR1RIX01JTikpCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOworCWlmIChn
ZXRtYXh4KHN0ZHNjcikgPCAod2lkdGggKyBZRVNOT19XSURUSF9NSU4pKQorCQlyZXR1cm4gLUVS
UkRJU1BMQVlUT09TTUFMTDsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLwor
CXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKKwl5ID0gKGdldG1heHkoc3Rkc2Ny
KSAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdp
ZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsKKwlrZXlwYWQo
ZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwK
KwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisJd2F0dHJzZXQoZGlhbG9nLCBk
bGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRF
RSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBB
Q1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXdhZGRjaChk
aWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsK
KworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXByaW50X2F1dG93cmFwKGRp
YWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2cs
IGhlaWdodCwgd2lkdGgsIDApOworCisJd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7CisJCWtleSA9
IHdnZXRjaChkaWFsb2cpOworCQlzd2l0Y2ggKGtleSkgeworCQljYXNlICdZJzoKKwkJY2FzZSAn
eSc6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiAwOworCQljYXNlICdOJzoKKwkJY2Fz
ZSAnbic6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiAxOworCisJCWNhc2UgVEFCOgor
CQljYXNlIEtFWV9MRUZUOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09
IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKSA/IDEgOiAoYnV0dG9uID4gMSA/
IDAgOiBidXR0b24pOworCisJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwg
YnV0dG9uKTsKKwkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJ
CWNhc2UgJ1xuJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIGJ1dHRvbjsKKwkJY2Fz
ZSBLRVlfRVNDOgorCQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOworCQkJYnJlYWs7CisJCWNh
c2UgS0VZX1JFU0laRToKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJb25fa2V5X3Jlc2l6ZSgpOwor
CQkJZ290byBkb19yZXNpemU7CisJCX0KKwl9CisKKwlkZWx3aW4oZGlhbG9nKTsKKwlyZXR1cm4g
a2V5OwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbWNvbmYtY2ZnLnNoIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1jZmcuc2gKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzgxMjg3MgotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYtY2ZnLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jp
bi9zaAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitQS0c9Im5jdXJzZXN3
IgorUEtHMj0ibmN1cnNlcyIKKworaWYgWyAtbiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBd
OyB0aGVuCisJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHOyB0aGVuCisJCWVjaG8gY2ZsYWdz
PVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cpXCIKKwkJZWNobyBsaWJzPVwiJChwa2ctY29u
ZmlnIC0tbGlicyAkUEtHKVwiCisJCWV4aXQgMAorCWZpCisKKwlpZiBwa2ctY29uZmlnIC0tZXhp
c3RzICRQS0cyOyB0aGVuCisJCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQ
S0cyKVwiCisJCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCIKKwkJZXhp
dCAwCisJZmkKK2ZpCisKKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4gY2FzZSBwa2ctY29u
ZmlnIGlzIG5vdCBpbnN0YWxsZWQuCisjIChFdmVuIGlmIGl0IGlzIGluc3RhbGxlZCwgc29tZSBk
aXN0cmlidXRpb25zIHN1Y2ggYXMgb3BlblNVU0UgY2Fubm90CisjIGZpbmQgbmN1cnNlcyBieSBw
a2ctY29uZmlnLikKK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0
aGVuCisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3
XCIKKwllY2hvIGxpYnM9XCItbG5jdXJzZXN3XCIKKwlleGl0IDAKK2ZpCisKK2lmIFsgLWYgL3Vz
ci9pbmNsdWRlL25jdXJzZXMvbmN1cnNlcy5oIF07IHRoZW4KKwllY2hvIGNmbGFncz1cIi1EX0dO
VV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc1wiCisJZWNobyBsaWJzPVwiLWxuY3Vyc2Vz
XCIKKwlleGl0IDAKK2ZpCisKK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXMuaCBdOyB0aGVu
CisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFXCIKKwllY2hvIGxpYnM9XCItbG5jdXJzZXNc
IgorCWV4aXQgMAorZmkKKworZWNobyA+JjIgIioiCitlY2hvID4mMiAiKiBVbmFibGUgdG8gZmlu
ZCB0aGUgbmN1cnNlcyBwYWNrYWdlLiIKK2VjaG8gPiYyICIqIEluc3RhbGwgbmN1cnNlcyAobmN1
cnNlcy1kZXZlbCBvciBsaWJuY3Vyc2VzLWRldiIKK2VjaG8gPiYyICIqIGRlcGVuZGluZyBvbiB5
b3VyIGRpc3RyaWJ1dGlvbikuIgorZWNobyA+JjIgIioiCitleGl0IDEKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTQwOTFmCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCkBAIC0wLDAgKzEsMTAzOSBAQAorLy8g
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKgorICogSW50cm9kdWNl
ZCBzaW5nbGUgbWVudSBtb2RlIChzaG93IGFsbCBzdWItbWVudXMgaW4gb25lIGxhcmdlIHRyZWUp
LgorICogMjAwMi0xMS0wNiBQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6PgorICoKKyAqIGkxOG4s
IDIwMDUsIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgor
ICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxrYy5oIgorI2luY2x1ZGUgImx4ZGlh
bG9nL2RpYWxvZy5oIgorCitzdGF0aWMgY29uc3QgY2hhciBtY29uZl9yZWFkbWVbXSA9CisiT3Zl
cnZpZXdcbiIKKyItLS0tLS0tLVxuIgorIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBm
ZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkLlxuIgorIkZlYXR1cmVzIGNhbiBl
aXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBpZ25vcmVkLiBQYXJhbWV0ZXJzXG4i
CisibXVzdCBiZSBlbnRlcmVkIGluIGFzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycyBv
ciB0ZXh0LlxuIgorIlxuIgorIk1lbnUgaXRlbXMgYmVnaW5uaW5nIHdpdGggZm9sbG93aW5nIGJy
YWNlcyByZXByZXNlbnQgZmVhdHVyZXMgdGhhdFxuIgorIiAgWyBdIGNhbiBiZSBidWlsdCBpbiBv
ciByZW1vdmVkXG4iCisiICA8ID4gY2FuIGJlIGJ1aWx0IGluLCBtb2R1bGFyaXplZCBvciByZW1v
dmVkXG4iCisiICB7IH0gY2FuIGJlIGJ1aWx0IGluIG9yIG1vZHVsYXJpemVkIChzZWxlY3RlZCBi
eSBvdGhlciBmZWF0dXJlKVxuIgorIiAgLSAtIGFyZSBzZWxlY3RlZCBieSBvdGhlciBmZWF0dXJl
LFxuIgorIndoaWxlICosIE0gb3Igd2hpdGVzcGFjZSBpbnNpZGUgYnJhY2VzIG1lYW5zIHRvIGJ1
aWxkIGluLCBidWlsZCBhc1xuIgorImEgbW9kdWxlIG9yIHRvIGV4Y2x1ZGUgdGhlIGZlYXR1cmUg
cmVzcGVjdGl2ZWx5LlxuIgorIlxuIgorIlRvIGNoYW5nZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXMs
IGhpZ2hsaWdodCBpdCB3aXRoIHRoZSBjdXJzb3JcbiIKKyJrZXlzIGFuZCBwcmVzcyA8WT4gdG8g
YnVpbGQgaXQgaW4sIDxNPiB0byBtYWtlIGl0IGEgbW9kdWxlIG9yXG4iCisiPE4+IHRvIHJlbW92
ZSBpdC4gIFlvdSBtYXkgYWxzbyBwcmVzcyB0aGUgPFNwYWNlIEJhcj4gdG8gY3ljbGVcbiIKKyJ0
aHJvdWdoIHRoZSBhdmFpbGFibGUgb3B0aW9ucyAoaS5lLiBZLT5OLT5NLT5ZKS5cbiIKKyJcbiIK
KyJTb21lIGFkZGl0aW9uYWwga2V5Ym9hcmQgaGludHM6XG4iCisiXG4iCisiTWVudXNcbiIKKyIt
LS0tLS0tLS0tXG4iCisibyAgVXNlIHRoZSBVcC9Eb3duIGFycm93IGtleXMgKGN1cnNvciBrZXlz
KSB0byBoaWdobGlnaHQgdGhlIGl0ZW0geW91XG4iCisiICAgd2lzaCB0byBjaGFuZ2Ugb3IgdGhl
IHN1Ym1lbnUgeW91IHdpc2ggdG8gc2VsZWN0IGFuZCBwcmVzcyA8RW50ZXI+LlxuIgorIiAgIFN1
Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IFwiLS0tPlwiLCBlbXB0eSBvbmVzIGJ5IFwiLS0tLVwi
LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyB0aGUgb3B0aW9uJ3MgaGlnaGxpZ2h0ZWQg
bGV0dGVyIChob3RrZXkpLlxuIgorIiAgICAgICAgICAgICBQcmVzc2luZyBhIGhvdGtleSBtb3Jl
IHRoYW4gb25jZSB3aWxsIHNlcXVlbmNlXG4iCisiICAgICAgICAgICAgIHRocm91Z2ggYWxsIHZp
c2libGUgaXRlbXMgd2hpY2ggdXNlIHRoYXQgaG90a2V5LlxuIgorIlxuIgorIiAgIFlvdSBtYXkg
YWxzbyB1c2UgdGhlIDxQQUdFIFVQPiBhbmQgPFBBR0UgRE9XTj4ga2V5cyB0byBzY3JvbGxcbiIK
KyIgICB1bnNlZW4gb3B0aW9ucyBpbnRvIHZpZXcuXG4iCisiXG4iCisibyAgVG8gZXhpdCBhIG1l
bnUgdXNlIHRoZSBjdXJzb3Iga2V5cyB0byBoaWdobGlnaHQgdGhlIDxFeGl0PiBidXR0b25cbiIK
KyIgICBhbmQgcHJlc3MgPEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgPEVT
Qz48RVNDPiBvciA8RT4gb3IgPFg+IGlmIHRoZXJlIGlzIG5vIGhvdGtleVxuIgorIiAgICAgICAg
ICAgICB1c2luZyB0aG9zZSBsZXR0ZXJzLiAgWW91IG1heSBwcmVzcyBhIHNpbmdsZSA8RVNDPiwg
YnV0XG4iCisiICAgICAgICAgICAgIHRoZXJlIGlzIGEgZGVsYXllZCByZXNwb25zZSB3aGljaCB5
b3UgbWF5IGZpbmQgYW5ub3lpbmcuXG4iCisiXG4iCisiICAgQWxzbywgdGhlIDxUQUI+IGFuZCBj
dXJzb3Iga2V5cyB3aWxsIGN5Y2xlIGJldHdlZW4gPFNlbGVjdD4sXG4iCisiICAgPEV4aXQ+LCA8
SGVscD4sIDxTYXZlPiwgYW5kIDxMb2FkPi5cbiIKKyJcbiIKKyJvICBUbyBnZXQgaGVscCB3aXRo
IGFuIGl0ZW0sIHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IDxIZWxwPlxuIgorIiAg
IGFuZCBwcmVzcyA8RU5URVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyA8SD4gb3Ig
PD8+LlxuIgorIlxuIgorIm8gIFRvIHRvZ2dsZSB0aGUgZGlzcGxheSBvZiBoaWRkZW4gb3B0aW9u
cywgcHJlc3MgPFo+LlxuIgorIlxuIgorIlxuIgorIlJhZGlvbGlzdHMgIChDaG9pY2UgbGlzdHMp
XG4iCisiLS0tLS0tLS0tLS1cbiIKKyJvICBVc2UgdGhlIGN1cnNvciBrZXlzIHRvIHNlbGVjdCB0
aGUgb3B0aW9uIHlvdSB3aXNoIHRvIHNldCBhbmQgcHJlc3NcbiIKKyIgICA8Uz4gb3IgdGhlIDxT
UEFDRSBCQVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyB0aGUgZmlyc3QgbGV0dGVy
IG9mIHRoZSBvcHRpb24geW91IHdpc2ggdG8gc2V0IHRoZW5cbiIKKyIgICAgICAgICAgICAgcHJl
c3MgPFM+IG9yIDxTUEFDRSBCQVI+LlxuIgorIlxuIgorIm8gIFRvIHNlZSBhdmFpbGFibGUgaGVs
cCBmb3IgdGhlIGl0ZW0sIHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0XG4iCisiICAg
PEhlbHA+IGFuZCBQcmVzcyA8RU5URVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyA8
SD4gb3IgPD8+LlxuIgorIlxuIgorIiAgIEFsc28sIHRoZSA8VEFCPiBhbmQgY3Vyc29yIGtleXMg
d2lsbCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+IGFuZFxuIgorIiAgIDxIZWxwPlxuIgorIlxuIgor
IlxuIgorIkRhdGEgRW50cnlcbiIKKyItLS0tLS0tLS0tLVxuIgorIm8gIEVudGVyIHRoZSByZXF1
ZXN0ZWQgaW5mb3JtYXRpb24gYW5kIHByZXNzIDxFTlRFUj5cbiIKKyIgICBJZiB5b3UgYXJlIGVu
dGVyaW5nIGhleGFkZWNpbWFsIHZhbHVlcywgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuIgorIiAg
IGFkZCB0aGUgJzB4JyBwcmVmaXggdG8gdGhlIGVudHJ5LlxuIgorIlxuIgorIm8gIEZvciBoZWxw
LCB1c2UgdGhlIDxUQUI+IG9yIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCB0aGUgaGVscCBvcHRp
b25cbiIKKyIgICBhbmQgcHJlc3MgPEVOVEVSPi4gIFlvdSBjYW4gdHJ5IDxUQUI+PEg+IGFzIHdl
bGwuXG4iCisiXG4iCisiXG4iCisiVGV4dCBCb3ggICAgKEhlbHAgV2luZG93KVxuIgorIi0tLS0t
LS0tXG4iCisibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzY3JvbGwgdXAvZG93bi9sZWZ0L3Jp
Z2h0LiAgVGhlIFZJIGVkaXRvclxuIgorIiAgIGtleXMgaCxqLGssbCBmdW5jdGlvbiBoZXJlIGFz
IGRvIDx1PiwgPGQ+LCA8U1BBQ0UgQkFSPiBhbmQgPEI+IGZvclxuIgorIiAgIHRob3NlIHdobyBh
cmUgZmFtaWxpYXIgd2l0aCBsZXNzIGFuZCBseW54LlxuIgorIlxuIgorIm8gIFByZXNzIDxFPiwg
PFg+LCA8cT4sIDxFbnRlcj4gb3IgPEVzYz48RXNjPiB0byBleGl0LlxuIgorIlxuIgorIlxuIgor
IkFsdGVybmF0ZSBDb25maWd1cmF0aW9uIEZpbGVzXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS1cbiIKKyJNZW51Y29uZmlnIHN1cHBvcnRzIHRoZSB1c2Ugb2YgYWx0ZXJuYXRlIGNv
bmZpZ3VyYXRpb24gZmlsZXMgZm9yXG4iCisidGhvc2Ugd2hvLCBmb3IgdmFyaW91cyByZWFzb25z
LCBmaW5kIGl0IG5lY2Vzc2FyeSB0byBzd2l0Y2hcbiIKKyJiZXR3ZWVuIGRpZmZlcmVudCBjb25m
aWd1cmF0aW9ucy5cbiIKKyJcbiIKKyJUaGUgPFNhdmU+IGJ1dHRvbiB3aWxsIGxldCB5b3Ugc2F2
ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvXG4iCisiYSBmaWxlIG9mIHlvdXIgY2hvb3Np
bmcuICBVc2UgdGhlIDxMb2FkPiBidXR0b24gdG8gbG9hZCBhIHByZXZpb3VzbHlcbiIKKyJzYXZl
ZCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbi5cbiIKKyJcbiIKKyJFdmVuIGlmIHlvdSBkb24ndCB1
c2UgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJ1dCB5b3UgZmluZFxuIgorImR1cmlu
ZyBhIE1lbnVjb25maWcgc2Vzc2lvbiB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgbWVzc2VkIHVw
IHlvdXJcbiIKKyJzZXR0aW5ncywgeW91IG1heSB1c2UgdGhlIDxMb2FkPiBidXR0b24gdG8gcmVz
dG9yZSB5b3VyIHByZXZpb3VzbHlcbiIKKyJzYXZlZCBzZXR0aW5ncyBmcm9tIFwiLmNvbmZpZ1wi
IHdpdGhvdXQgcmVzdGFydGluZyBNZW51Y29uZmlnLlxuIgorIlxuIgorIk90aGVyIGluZm9ybWF0
aW9uXG4iCisiLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJJZiB5b3UgdXNlIE1lbnVjb25maWcgaW4g
YW4gWFRFUk0gd2luZG93LCBtYWtlIHN1cmUgeW91IGhhdmUgeW91clxuIgorIiRURVJNIHZhcmlh
YmxlIHNldCB0byBwb2ludCB0byBhbiB4dGVybSBkZWZpbml0aW9uIHdoaWNoIHN1cHBvcnRzXG4i
CisiY29sb3IuICBPdGhlcndpc2UsIE1lbnVjb25maWcgd2lsbCBsb29rIHJhdGhlciBiYWQuICBN
ZW51Y29uZmlnIHdpbGxcbiIKKyJub3QgZGlzcGxheSBjb3JyZWN0bHkgaW4gYW4gUlhWVCB3aW5k
b3cgYmVjYXVzZSByeHZ0IGRpc3BsYXlzIG9ubHkgb25lXG4iCisiaW50ZW5zaXR5IG9mIGNvbG9y
LCBicmlnaHQuXG4iCisiXG4iCisiTWVudWNvbmZpZyB3aWxsIGRpc3BsYXkgbGFyZ2VyIG1lbnVz
IG9uIHNjcmVlbnMgb3IgeHRlcm1zIHdoaWNoIGFyZVxuIgorInNldCB0byBkaXNwbGF5IG1vcmUg
dGhhbiB0aGUgc3RhbmRhcmQgMjUgcm93IGJ5IDgwIGNvbHVtbiBnZW9tZXRyeS5cbiIKKyJJbiBv
cmRlciBmb3IgdGhpcyB0byB3b3JrLCB0aGUgXCJzdHR5IHNpemVcIiBjb21tYW5kIG11c3QgYmUg
YWJsZSB0b1xuIgorImRpc3BsYXkgdGhlIHNjcmVlbidzIGN1cnJlbnQgcm93IGFuZCBjb2x1bW4g
Z2VvbWV0cnkuICBJIFNUUk9OR0xZXG4iCisiUkVDT01NRU5EIHRoYXQgeW91IG1ha2Ugc3VyZSB5
b3UgZG8gTk9UIGhhdmUgdGhlIHNoZWxsIHZhcmlhYmxlc1xuIgorIkxJTkVTIGFuZCBDT0xVTU5T
IGV4cG9ydGVkIGludG8geW91ciBlbnZpcm9ubWVudC4gIFNvbWUgZGlzdHJpYnV0aW9uc1xuIgor
ImV4cG9ydCB0aG9zZSB2YXJpYWJsZXMgdmlhIC9ldGMvcHJvZmlsZS4gIFNvbWUgbmN1cnNlcyBw
cm9ncmFtcyBjYW5cbiIKKyJiZWNvbWUgY29uZnVzZWQgd2hlbiB0aG9zZSB2YXJpYWJsZXMgKExJ
TkVTICYgQ09MVU1OUykgZG9uJ3QgcmVmbGVjdFxuIgorInRoZSB0cnVlIHNjcmVlbiBzaXplLlxu
IgorIlxuIgorIk9wdGlvbmFsIHBlcnNvbmFsaXR5IGF2YWlsYWJsZVxuIgorIi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2YgdGhl
IG9wdGlvbnMgbGlzdGVkIGluIGEgc2luZ2xlIG1lbnUsXG4iCisicmF0aGVyIHRoYW4gdGhlIGRl
ZmF1bHQgbXVsdGltZW51IGhpZXJhcmNoeSwgcnVuIHRoZSBtZW51Y29uZmlnIHdpdGhcbiIKKyJN
RU5VQ09ORklHX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiBF
eGFtcGxlOlxuIgorIlxuIgorIm1ha2UgTUVOVUNPTkZJR19NT0RFPXNpbmdsZV9tZW51IG1lbnVj
b25maWdcbiIKKyJcbiIKKyI8RW50ZXI+IHdpbGwgdGhlbiB1bnJvbGwgdGhlIGFwcHJvcHJpYXRl
IGNhdGVnb3J5LCBvciBlbmZvbGQgaXQgaWYgaXRcbiIKKyJpcyBhbHJlYWR5IHVucm9sbGVkLlxu
IgorIlxuIgorIk5vdGUgdGhhdCB0aGlzIG1vZGUgY2FuIGV2ZW50dWFsbHkgYmUgYSBsaXR0bGUg
bW9yZSBDUFUgZXhwZW5zaXZlXG4iCisiKGVzcGVjaWFsbHkgd2l0aCBhIGxhcmdlciBudW1iZXIg
b2YgdW5yb2xsZWQgY2F0ZWdvcmllcykgdGhhbiB0aGVcbiIKKyJkZWZhdWx0IG1vZGUuXG4iCisi
XG4iCisiRGlmZmVyZW50IGNvbG9yIHRoZW1lcyBhdmFpbGFibGVcbiIKKyItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIkl0IGlzIHBvc3NpYmxlIHRvIHNlbGVjdCBkaWZmZXJl
bnQgY29sb3IgdGhlbWVzIHVzaW5nIHRoZSB2YXJpYWJsZVxuIgorIk1FTlVDT05GSUdfQ09MT1Iu
IFRvIHNlbGVjdCBhIHRoZW1lIHVzZTpcbiIKKyJcbiIKKyJtYWtlIE1FTlVDT05GSUdfQ09MT1I9
PHRoZW1lPiBtZW51Y29uZmlnXG4iCisiXG4iCisiQXZhaWxhYmxlIHRoZW1lcyBhcmVcbiIKKyIg
bW9ubyAgICAgICA9PiBzZWxlY3RzIGNvbG9ycyBzdWl0YWJsZSBmb3IgbW9ub2Nocm9tZSBkaXNw
bGF5c1xuIgorIiBibGFja2JnICAgID0+IHNlbGVjdHMgYSBjb2xvciBzY2hlbWUgd2l0aCBibGFj
ayBiYWNrZ3JvdW5kXG4iCisiIGNsYXNzaWMgICAgPT4gdGhlbWUgd2l0aCBibHVlIGJhY2tncm91
bmQuIFRoZSBjbGFzc2ljIGxvb2tcbiIKKyIgYmx1ZXRpdGxlICA9PiBhbiBMQ0QgZnJpZW5kbHkg
dmVyc2lvbiBvZiBjbGFzc2ljLiAoZGVmYXVsdClcbiIKKyJcbiIsCittZW51X2luc3RydWN0aW9u
c1tdID0KKwkiQXJyb3cga2V5cyBuYXZpZ2F0ZSB0aGUgbWVudS4gICIKKwkiPEVudGVyPiBzZWxl
Y3RzIHN1Ym1lbnVzIC0tLT4gKG9yIGVtcHR5IHN1Ym1lbnVzIC0tLS0pLiAgIgorCSJIaWdobGln
aHRlZCBsZXR0ZXJzIGFyZSBob3RrZXlzLiAgIgorCSJQcmVzc2luZyA8WT4gaW5jbHVkZXMsIDxO
PiBleGNsdWRlcywgPE0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLiAgIgorCSJQcmVzcyA8RXNjPjxF
c2M+IHRvIGV4aXQsIDw/PiBmb3IgSGVscCwgPC8+IGZvciBTZWFyY2guICAiCisJIkxlZ2VuZDog
WypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJs
ZSIsCityYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQorCSJVc2UgdGhlIGFycm93IGtleXMgdG8g
bmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgorCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVt
IHlvdSB3aXNoIHRvIHNlbGVjdCAiCisJImZvbGxvd2VkIGJ5IHRoZSA8U1BBQ0UgQkFSPi4gIgor
CSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24u
IiwKK2lucHV0Ym94X2luc3RydWN0aW9uc19pbnRbXSA9CisJIlBsZWFzZSBlbnRlciBhIGRlY2lt
YWwgdmFsdWUuICIKKwkiRnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgIgorCSJVc2Ug
dGhlIDxUQUI+IGtleSB0byBtb3ZlIGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25z
IGJlbG93IGl0LiIsCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQorCSJQbGVhc2UgZW50
ZXIgYSBoZXhhZGVjaW1hbCB2YWx1ZS4gIgorCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3ZlIGZy
b20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsCitpbnB1dGJveF9p
bnN0cnVjdGlvbnNfc3RyaW5nW10gPQorCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuICIK
KwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUg
YnV0dG9ucyBiZWxvdyBpdC4iLAorc2V0bW9kX3RleHRbXSA9CisJIlRoaXMgZmVhdHVyZSBkZXBl
bmRzIG9uIGFub3RoZXIgd2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhIG1vZHVsZS5cbiIK
KwkiQXMgYSByZXN1bHQsIHRoaXMgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiIs
Citsb2FkX2NvbmZpZ190ZXh0W10gPQorCSJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJh
dGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuICAiCisJIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0
byByZXN0b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdSAiCisJImxhc3QgcmV0cmlldmVkLiAgTGVh
dmUgYmxhbmsgdG8gYWJvcnQuIiwKK2xvYWRfY29uZmlnX2hlbHBbXSA9CisJIlxuIgorCSJGb3Ig
dmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxu
IgorCSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKKwki
XG4iCisJIklmIHlvdSBoYXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZp
bGUgb3RoZXIgdGhhbiB0aGVcbiIKKwkiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhl
cmUgd2lsbCBhbGxvdyB5b3UgdG8gbW9kaWZ5IHRoYXRcbiIKKwkiY29uZmlndXJhdGlvbi5cbiIK
KwkiXG4iCisJIklmIHlvdSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5IG5l
dmVyIHVzZWQgYWx0ZXJuYXRlXG4iCisJImNvbmZpZ3VyYXRpb24gZmlsZXMuIFlvdSBzaG91bGQg
dGhlcmVmb3JlIGxlYXZlIHRoaXMgYmxhbmsgdG8gYWJvcnQuXG4iLAorc2F2ZV9jb25maWdfdGV4
dFtdID0KKwkiRW50ZXIgYSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hv
dWxkIGJlIHNhdmVkICIKKwkiYXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQu
IiwKK3NhdmVfY29uZmlnX2hlbHBbXSA9CisJIlxuIgorCSJGb3IgdmFyaW91cyByZWFzb25zLCBv
bmUgbWF5IHdpc2ggdG8ga2VlcCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiIKKwkiYXZhaWxh
YmxlIG9uIGEgc2luZ2xlIG1hY2hpbmUuXG4iCisJIlxuIgorCSJFbnRlcmluZyBhIGZpbGUgbmFt
ZSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIGxhdGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKKwkiYW5k
IHVzZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0ZXZl
clxuIgorCSJjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0
aW1lLlxuIgorCSJcbiIKKwkiSWYgeW91IGFyZSB1bmNlcnRhaW4gd2hhdCBhbGwgdGhpcyBtZWFu
cyB0aGVuIHlvdSBzaG91bGQgcHJvYmFibHlcbiIKKwkibGVhdmUgdGhpcyBibGFuay5cbiIsCitz
ZWFyY2hfaGVscFtdID0KKwkiXG4iCisJIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlzcGxheSB0
aGVpciByZWxhdGlvbnMuXG4iCisJIlJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuXG4i
CisJIkV4YW1wbGU6IHNlYXJjaCBmb3IgXCJeRk9PXCJcbiIKKwkiUmVzdWx0OlxuIgorCSItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIgorCSJTeW1ib2w6IEZPTyBbPW1dXG4iCisJIlR5cGUgIDogdHJpc3RhdGVcbiIKKwki
UHJvbXB0OiBGb28gYnVzIGlzIHVzZWQgdG8gZHJpdmUgdGhlIGJhciBIV1xuIgorCSIgIExvY2F0
aW9uOlxuIgorCSIgICAgLT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EpXG4i
CisJIiAgICAgIC0+IFBDSSBzdXBwb3J0IChQQ0kgWz15XSlcbiIKKwkiKDEpICAgICAtPiBQQ0kg
YWNjZXNzIG1vZGUgKDxjaG9pY2U+IFs9eV0pXG4iCisJIiAgRGVmaW5lZCBhdCBkcml2ZXJzL3Bj
aS9LY29uZmlnOjQ3XG4iCisJIiAgRGVwZW5kcyBvbjogWDg2X0xPQ0FMX0FQSUMgJiYgWDg2X0lP
X0FQSUMgfHwgSUE2NFxuIgorCSIgIFNlbGVjdHM6IExJQkNSQzMyXG4iCisJIiAgU2VsZWN0ZWQg
Ynk6IEJBUiBbPW5dXG4iCisJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJIm8gVGhlIGxpbmUgJ1R5cGU6JyBzaG93
cyB0aGUgdHlwZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yXG4iCisJIiAgdGhpcyBz
eW1ib2wgKGJvb2wsIHRyaXN0YXRlLCBzdHJpbmcsIC4uLilcbiIKKwkibyBUaGUgbGluZSAnUHJv
bXB0Oicgc2hvd3MgdGhlIHRleHQgdXNlZCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgZm9yXG4iCisJ
IiAgdGhpcyBzeW1ib2xcbiIKKwkibyBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQgd2hh
dCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIgorCSIgIGlzIGRlZmluZWRcbiIKKwki
byBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyBuZWVkIHRvIGJlIGRl
ZmluZWQgZm9yXG4iCisJIiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVudSAo
c2VsZWN0YWJsZSlcbiIKKwkibyBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVsbHMgd2hlcmUgaW4g
dGhlIG1lbnUgc3RydWN0dXJlIHRoaXMgc3ltYm9sXG4iCisJIiAgaXMgbG9jYXRlZFxuIgorCSIg
ICAgQSBsb2NhdGlvbiBmb2xsb3dlZCBieSBhIFs9eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBh
XG4iCisJIiAgICBzZWxlY3RhYmxlIG1lbnUgaXRlbSAtIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBp
cyBkaXNwbGF5ZWQgaW5zaWRlXG4iCisJIiAgICBicmFja2V0cy5cbiIKKwkiICAgIFByZXNzIHRo
ZSBrZXkgaW4gdGhlICgjKSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iCisJIiAg
ICBsb2NhdGlvbi4gWW91IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGN1cnJlbnQgc2VhcmNoIHJl
c3VsdHNcbiIKKwkiICAgIGFmdGVyIGV4aXRpbmcgdGhpcyBuZXcgbWVudS5cbiIKKwkibyBUaGUg
J1NlbGVjdHM6JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyB3aWxsIGJlIGF1dG9tYXRpY2FsbHlc
biIKKwkiICBzZWxlY3RlZCBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKVxuIgor
CSJvIFRoZSAnU2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVk
IHRoaXMgc3ltYm9sXG4iCisJIlxuIgorCSJPbmx5IHJlbGV2YW50IGxpbmVzIGFyZSBzaG93bi5c
biIKKwkiXG5cbiIKKwkiU2VhcmNoIGV4YW1wbGVzOlxuIgorCSJFeGFtcGxlczogVVNCCT0+IGZp
bmQgYWxsIHN5bWJvbHMgY29udGFpbmluZyBVU0JcbiIKKwkiICAgICAgICAgIF5VU0IgPT4gZmlu
ZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxuIgorCSIgICAgICAgICAgVVNCJCA9PiBm
aW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIgorCSJcbiI7CisKK3N0YXRpYyBpbnQg
aW5kZW50Oworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7CitzdGF0aWMgaW50IGNo
aWxkX2NvdW50Oworc3RhdGljIGludCBzaW5nbGVfbWVudV9tb2RlOworc3RhdGljIGludCBzaG93
X2FsbF9vcHRpb25zOworc3RhdGljIGludCBzYXZlX2FuZF9leGl0Oworc3RhdGljIGludCBzaWxl
bnQ7CisKK3N0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBtZW51ICph
Y3RpdmVfbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7
CitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9p
ZCBjb25mX2xvYWQodm9pZCk7CitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7CitzdGF0aWMg
aW50IHNob3dfdGV4dGJveF9leHQoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRleHQsIGludCBy
LCBpbnQgYywKKwkJCSAgICBpbnQgKmtleXMsIGludCAqdnNjcm9sbCwgaW50ICpoc2Nyb2xsLAor
CQkJICAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2
b2lkIHNob3dfdGV4dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdGV4dCwgaW50
IHIsIGludCBjKTsKK3N0YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUs
IGNvbnN0IGNoYXIgKnRleHQpOworc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICpt
ZW51KTsKKworc3RhdGljIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07CitzdGF0aWMgdm9pZCBz
ZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKK3sKKwlzdGF0
aWMgY2hhciBtZW51X2JhY2t0aXRsZVtQQVRIX01BWCsxMjhdOworCWludCBzaXplOworCisJc2l6
ZSA9IHNucHJpbnRmKG1lbnVfYmFja3RpdGxlLCBzaXplb2YobWVudV9iYWNrdGl0bGUpLAorCQkJ
IiVzIC0gJXMiLCBjb25maWdfZmlsZW5hbWUsIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisJaWYg
KHNpemUgPj0gc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSkKKwkJbWVudV9iYWNrdGl0bGVbc2l6ZW9m
KG1lbnVfYmFja3RpdGxlKS0xXSA9ICdcMCc7CisJc2V0X2RpYWxvZ19iYWNrdGl0bGUobWVudV9i
YWNrdGl0bGUpOworCisJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUp
LCAiJXMiLCBjb25maWdfZmlsZW5hbWUpOworCWlmIChzaXplID49IHNpemVvZihmaWxlbmFtZSkp
CisJCWZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAnXDAnOworfQorCitzdHJ1Y3Qgc3Vi
dGl0bGVfcGFydCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOworCWNvbnN0IGNoYXIgKnRl
eHQ7Cit9Oworc3RhdGljIExJU1RfSEVBRCh0cmFpbCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3VidGl0
bGVfbGlzdCAqc3VidGl0bGVzOworc3RhdGljIHZvaWQgc2V0X3N1YnRpdGxlKHZvaWQpCit7CisJ
c3RydWN0IHN1YnRpdGxlX3BhcnQgKnNwOworCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3MsICp0
bXA7CisKKwlmb3IgKHBvcyA9IHN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHRtcCkgewor
CQl0bXAgPSBwb3MtPm5leHQ7CisJCWZyZWUocG9zKTsKKwl9CisKKwlzdWJ0aXRsZXMgPSBOVUxM
OworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3AsICZ0cmFpbCwgZW50cmllcykgeworCQlpZiAoc3At
PnRleHQpIHsKKwkJCWlmIChwb3MpIHsKKwkJCQlwb3MtPm5leHQgPSB4Y2FsbG9jKDEsIHNpemVv
ZigqcG9zKSk7CisJCQkJcG9zID0gcG9zLT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlzdWJ0aXRs
ZXMgPSBwb3MgPSB4Y2FsbG9jKDEsIHNpemVvZigqcG9zKSk7CisJCQl9CisJCQlwb3MtPnRleHQg
PSBzcC0+dGV4dDsKKwkJfQorCX0KKworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7
Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X3N1YnRpdGxlKHZvaWQpCit7CisJc3RydWN0IHN1YnRp
dGxlX2xpc3QgKnBvcywgKnRtcDsKKworCWZvciAocG9zID0gc3VidGl0bGVzOyBwb3MgIT0gTlVM
TDsgcG9zID0gdG1wKSB7CisJCXRtcCA9IHBvcy0+bmV4dDsKKwkJZnJlZShwb3MpOworCX0KKwlz
dWJ0aXRsZXMgPSBOVUxMOworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7Cit9CisK
K3N0cnVjdCBzZWFyY2hfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3Qg
bWVudSAqKnRhcmdldHM7CisJaW50ICprZXlzOworfTsKKworc3RhdGljIHZvaWQgdXBkYXRlX3Rl
eHQoY2hhciAqYnVmLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZvaWQgKl9kYXRhKQorewor
CXN0cnVjdCBzZWFyY2hfZGF0YSAqZGF0YSA9IF9kYXRhOworCXN0cnVjdCBqdW1wX2tleSAqcG9z
OworCWludCBrID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBkYXRhLT5oZWFkLCBl
bnRyaWVzKSB7CisJCWlmIChwb3MtPm9mZnNldCA+PSBzdGFydCAmJiBwb3MtPm9mZnNldCA8IGVu
ZCkgeworCQkJY2hhciBoZWFkZXJbNF07CisKKwkJCWlmIChrIDwgSlVNUF9OQikgeworCQkJCWlu
dCBrZXkgPSAnMCcgKyAocG9zLT5pbmRleCAlIEpVTVBfTkIpICsgMTsKKworCQkJCXNwcmludGYo
aGVhZGVyLCAiKCVjKSIsIGtleSk7CisJCQkJZGF0YS0+a2V5c1trXSA9IGtleTsKKwkJCQlkYXRh
LT50YXJnZXRzW2tdID0gcG9zLT50YXJnZXQ7CisJCQkJaysrOworCQkJfSBlbHNlIHsKKwkJCQlz
cHJpbnRmKGhlYWRlciwgIiAgICIpOworCQkJfQorCisJCQltZW1jcHkoYnVmICsgcG9zLT5vZmZz
ZXQsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikgLSAxKTsKKwkJfQorCX0KKwlkYXRhLT5rZXlzW2td
ID0gMDsKK30KKworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lt
Ym9sICoqc3ltX2FycjsKKwlzdHJ1Y3QgZ3N0ciByZXM7CisJc3RydWN0IGdzdHIgdGl0bGU7CisJ
Y2hhciAqZGlhbG9nX2lucHV0OworCWludCBkcmVzLCB2c2Nyb2xsID0gMCwgaHNjcm9sbCA9IDA7
CisJYm9vbCBhZ2FpbjsKKwlzdHJ1Y3QgZ3N0ciBzdHRleHQ7CisJc3RydWN0IHN1YnRpdGxlX3Bh
cnQgc3RwYXJ0OworCisJdGl0bGUgPSBzdHJfbmV3KCk7CisJc3RyX3ByaW50ZiggJnRpdGxlLCAi
RW50ZXIgKHN1YilzdHJpbmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIgorCQkJICAgICAgIih3
aXRoIG9yIHdpdGhvdXQgXCIlc1wiKSIsIENPTkZJR18pOworCithZ2FpbjoKKwlkaWFsb2dfY2xl
YXIoKTsKKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJh
bWV0ZXIiLAorCQkJICAgICAgc3RyX2dldCgmdGl0bGUpLAorCQkJICAgICAgMTAsIDc1LCAiIik7
CisJc3dpdGNoIChkcmVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCXNob3df
aGVscHRleHQoIlNlYXJjaCBDb25maWd1cmF0aW9uIiwgc2VhcmNoX2hlbHApOworCQlnb3RvIGFn
YWluOworCWRlZmF1bHQ6CisJCXN0cl9mcmVlKCZ0aXRsZSk7CisJCXJldHVybjsKKwl9CisKKwkv
KiBzdHJpcCB0aGUgcHJlZml4IGlmIG5lY2Vzc2FyeSAqLworCWRpYWxvZ19pbnB1dCA9IGRpYWxv
Z19pbnB1dF9yZXN1bHQ7CisJaWYgKHN0cm5jYXNlY21wKGRpYWxvZ19pbnB1dF9yZXN1bHQsIENP
TkZJR18sIHN0cmxlbihDT05GSUdfKSkgPT0gMCkKKwkJZGlhbG9nX2lucHV0ICs9IHN0cmxlbihD
T05GSUdfKTsKKworCXN0dGV4dCA9IHN0cl9uZXcoKTsKKwlzdHJfcHJpbnRmKCZzdHRleHQsICJT
ZWFyY2ggKCVzKSIsIGRpYWxvZ19pbnB1dF9yZXN1bHQpOworCXN0cGFydC50ZXh0ID0gc3RyX2dl
dCgmc3R0ZXh0KTsKKwlsaXN0X2FkZF90YWlsKCZzdHBhcnQuZW50cmllcywgJnRyYWlsKTsKKwor
CXN5bV9hcnIgPSBzeW1fcmVfc2VhcmNoKGRpYWxvZ19pbnB1dCk7CisJZG8geworCQlMSVNUX0hF
QUQoaGVhZCk7CisJCXN0cnVjdCBtZW51ICp0YXJnZXRzW0pVTVBfTkJdOworCQlpbnQga2V5c1tK
VU1QX05CICsgMV0sIGk7CisJCXN0cnVjdCBzZWFyY2hfZGF0YSBkYXRhID0geworCQkJLmhlYWQg
PSAmaGVhZCwKKwkJCS50YXJnZXRzID0gdGFyZ2V0cywKKwkJCS5rZXlzID0ga2V5cywKKwkJfTsK
KwkJc3RydWN0IGp1bXBfa2V5ICpwb3MsICp0bXA7CisKKwkJcmVzID0gZ2V0X3JlbGF0aW9uc19z
dHIoc3ltX2FyciwgJmhlYWQpOworCQlzZXRfc3VidGl0bGUoKTsKKwkJZHJlcyA9IHNob3dfdGV4
dGJveF9leHQoIlNlYXJjaCBSZXN1bHRzIiwgKGNoYXIgKikKKwkJCQkJc3RyX2dldCgmcmVzKSwg
MCwgMCwga2V5cywgJnZzY3JvbGwsCisJCQkJCSZoc2Nyb2xsLCAmdXBkYXRlX3RleHQsICh2b2lk
ICopCisJCQkJCSZkYXRhKTsKKwkJYWdhaW4gPSBmYWxzZTsKKwkJZm9yIChpID0gMDsgaSA8IEpV
TVBfTkIgJiYga2V5c1tpXTsgaSsrKQorCQkJaWYgKGRyZXMgPT0ga2V5c1tpXSkgeworCQkJCWNv
bmYodGFyZ2V0c1tpXS0+cGFyZW50LCB0YXJnZXRzW2ldKTsKKwkJCQlhZ2FpbiA9IHRydWU7CisJ
CQl9CisJCXN0cl9mcmVlKCZyZXMpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0
bXAsICZoZWFkLCBlbnRyaWVzKQorCQkJZnJlZShwb3MpOworCX0gd2hpbGUgKGFnYWluKTsKKwlm
cmVlKHN5bV9hcnIpOworCXN0cl9mcmVlKCZ0aXRsZSk7CisJbGlzdF9kZWwodHJhaWwucHJldik7
CisJc3RyX2ZyZWUoJnN0dGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3RydWN0
IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAq
cHJvcDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOwor
CXRyaXN0YXRlIHZhbDsKKwljaGFyIGNoOworCWJvb2wgdmlzaWJsZTsKKworCS8qCisJICogbm90
ZTogbWVudV9pc192aXNpYmxlKCkgaGFzIHNpZGUgZWZmZWN0IHRoYXQgaXQgd2lsbAorCSAqIHJl
Y2FsYyB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbC4KKwkgKi8KKwl2aXNpYmxlID0gbWVudV9pc192
aXNpYmxlKG1lbnUpOworCWlmIChzaG93X2FsbF9vcHRpb25zICYmICFtZW51X2hhc19wcm9tcHQo
bWVudSkpCisJCXJldHVybjsKKwllbHNlIGlmICghc2hvd19hbGxfb3B0aW9ucyAmJiAhdmlzaWJs
ZSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCXByb3AgPSBtZW51LT5wcm9tcHQ7
CisJaWYgKCFzeW0pIHsKKwkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsKKwkJ
CWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCXN3aXRjaCAo
cHJvcC0+dHlwZSkgeworCQkJY2FzZSBQX01FTlU6CisJCQkJY2hpbGRfY291bnQrKzsKKwkJCQlp
ZiAoc2luZ2xlX21lbnVfbW9kZSkgeworCQkJCQlpdGVtX21ha2UoIiVzJSpjJXMiLAorCQkJCQkJ
ICBtZW51LT5kYXRhID8gIi0tPiIgOiAiKys+IiwKKwkJCQkJCSAgaW5kZW50ICsgMSwgJyAnLCBw
cm9tcHQpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21ha2UoIiAgICUqYyVzICAlcyIsCisJCQkJ
CQkgIGluZGVudCArIDEsICcgJywgcHJvbXB0LAorCQkJCQkJICBtZW51X2lzX2VtcHR5KG1lbnUp
ID8gIi0tLS0iIDogIi0tLT4iKTsKKwkJCQlpdGVtX3NldF90YWcoJ20nKTsKKwkJCQlpdGVtX3Nl
dF9kYXRhKG1lbnUpOworCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEpCisJ
CQkJCWdvdG8gY29uZl9jaGlsZHM7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQX0NPTU1FTlQ6CisJ
CQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UoIiAg
ICUqYyoqKiAlcyAqKioiLCBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJCWl0ZW1fc2V0
X3RhZygnOicpOworCQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJCX0KKwkJCQlicmVhazsK
KwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJ
CQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOworCQkJCQlp
dGVtX3NldF90YWcoJzonKTsKKwkJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQl9CisJCQl9
CisJCX0gZWxzZQorCQkJZG9pbnQgPSAwOworCQlnb3RvIGNvbmZfY2hpbGRzOworCX0KKworCXR5
cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN0
cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQlzdHJ1
Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOworCisJCWNoaWxkX2NvdW50Kys7CisJCWZvciAoY2hp
bGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKG1l
bnVfaXNfdmlzaWJsZShjaGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQorCQkJCWRlZl9t
ZW51ID0gY2hpbGQ7CisJCX0KKworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7
CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJ
Y2FzZSBTX0JPT0xFQU46CisJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDog
JyonKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkg
eworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2FzZSBtb2Q6IGNoID0gJ00n
OyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOworCQkJCX0KKwkJCQlpdGVt
X21ha2UoIjwlYz4iLCBjaCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpdGVtX3NldF90YWcoJ3Qn
KTsKKwkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJCX0gZWxzZSB7CisJCQlpdGVtX21ha2UoIiAg
ICIpOworCQkJaXRlbV9zZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsKKwkJCWl0ZW1fc2V0
X2RhdGEobWVudSk7CisJCX0KKworCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwg
JyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQlpZiAodmFsID09IHllcykgeworCQkJaWYg
KGRlZl9tZW51KSB7CisJCQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsIG1lbnVfZ2V0X3Byb21wdChk
ZWZfbWVudSkpOworCQkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7CisJCQkJaWYgKGRlZl9tZW51
LT5saXN0KSB7CisJCQkJCWluZGVudCArPSAyOworCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsK
KwkJCQkJaW5kZW50IC09IDI7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuOworCQl9CisJfSBlbHNl
IHsKKwkJaWYgKG1lbnUgPT0gY3VycmVudF9tZW51KSB7CisJCQlpdGVtX21ha2UoIi0tLSUqYyVz
IiwgaW5kZW50ICsgMSwgJyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQkJaXRlbV9zZXRf
dGFnKCc6Jyk7CisJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJZ290byBjb25mX2NoaWxkczsK
KwkJfQorCQljaGlsZF9jb3VudCsrOworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSk7CisJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgeworCQkJ
aXRlbV9tYWtlKCIgICAiKTsKKwkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJaXRlbV9zZXRfZGF0
YShtZW51KTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xF
QU46CisJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQkJaXRlbV9tYWtlKCJbJWNd
IiwgdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQllbHNlCisJCQkJCWl0ZW1fbWFrZSgiLSVj
LSIsIHZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJ
aXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJ
CQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2Fz
ZSBtb2Q6IGNoID0gJ00nOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOwor
CQkJCX0KKwkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCQkJCWlmIChzeW0tPnJl
dl9kZXAudHJpID09IG1vZCkKKwkJCQkJCWl0ZW1fbWFrZSgieyVjfSIsIGNoKTsKKwkJCQkJZWxz
ZQorCQkJCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21h
a2UoIi0lYy0iLCBjaCk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJaXRlbV9zZXRfZGF0
YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wID0gMiArIHN0cmxlbihz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsgLyogKCkgPSAyICovCisJCQkJaXRlbV9tYWtlKCIo
JXMpIiwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCQkJdG1wID0gaW5kZW50IC0gdG1w
ICsgNDsKKwkJCQlpZiAodG1wIDwgMCkKKwkJCQkJdG1wID0gMDsKKwkJCQlpdGVtX2FkZF9zdHIo
IiUqYyVzJXMiLCB0bXAsICcgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpLAorCQkJCQkgICAgIChz
eW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPworCQkJCQkgICAg
ICIiIDogIiAoTkVXKSIpOworCQkJCWl0ZW1fc2V0X3RhZygncycpOworCQkJCWl0ZW1fc2V0X2Rh
dGEobWVudSk7CisJCQkJZ290byBjb25mX2NoaWxkczsKKwkJCX0KKwkJfQorCQlpdGVtX2FkZF9z
dHIoIiUqYyVzJXMiLCBpbmRlbnQgKyAxLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSwKKwkJ
CSAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/CisJCQkg
ICIiIDogIiAoTkVXKSIpOworCQlpZiAobWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgewor
CQkJaXRlbV9hZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICIt
LS0+Iik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKK2NvbmZfY2hpbGRzOgorCWluZGVudCArPSBk
b2ludDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHQpCisJCWJ1aWxkX2NvbmYoY2hpbGQpOworCWluZGVudCAtPSBkb2ludDsKK30KKworc3RhdGlj
IHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IG1lbnUgKmFjdGl2ZV9tZW51KQor
eworCXN0cnVjdCBtZW51ICpzdWJtZW51OworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0
X3Byb21wdChtZW51KTsKKwlzdHJ1Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7CisJc3RydWN0IHN5
bWJvbCAqc3ltOworCWludCByZXM7CisJaW50IHNfc2Nyb2xsID0gMDsKKworCWlmIChtZW51ICE9
ICZyb290bWVudSkKKwkJc3RwYXJ0LnRleHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJZWxz
ZQorCQlzdHBhcnQudGV4dCA9IE5VTEw7CisJbGlzdF9hZGRfdGFpbCgmc3RwYXJ0LmVudHJpZXMs
ICZ0cmFpbCk7CisKKwl3aGlsZSAoMSkgeworCQlpdGVtX3Jlc2V0KCk7CisJCWN1cnJlbnRfbWVu
dSA9IG1lbnU7CisJCWJ1aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJCQli
cmVhazsKKwkJc2V0X3N1YnRpdGxlKCk7CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFs
b2dfbWVudShwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKKwkJCQkgIG1lbnVfaW5zdHJ1
Y3Rpb25zLAorCQkJCSAgYWN0aXZlX21lbnUsICZzX3Njcm9sbCk7CisJCWlmIChyZXMgPT0gMSB8
fCByZXMgPT0gS0VZX0VTQyB8fCByZXMgPT0gLUVSUkRJU1BMQVlUT09TTUFMTCkKKwkJCWJyZWFr
OworCQlpZiAoaXRlbV9jb3VudCgpICE9IDApIHsKKwkJCWlmICghaXRlbV9hY3RpdmF0ZV9zZWxl
Y3RlZCgpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpdGVtX3RhZygpKQorCQkJCWNvbnRpbnVl
OworCQl9CisJCXN1Ym1lbnUgPSBpdGVtX2RhdGEoKTsKKwkJYWN0aXZlX21lbnUgPSBpdGVtX2Rh
dGEoKTsKKwkJaWYgKHN1Ym1lbnUpCisJCQlzeW0gPSBzdWJtZW51LT5zeW07CisJCWVsc2UKKwkJ
CXN5bSA9IE5VTEw7CisKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJc3dpdGNoIChp
dGVtX3RhZygpKSB7CisJCQljYXNlICdtJzoKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkKKwkJ
CQkJc3VibWVudS0+ZGF0YSA9ICh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKKwkJCQll
bHNlCisJCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoK
KwkJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3lt
KSA9PSB5ZXMpCisJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOworCQkJCWVsc2UgaWYgKHN1Ym1l
bnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCisJCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7CisJ
CQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoc3ltKQorCQkJCXNob3df
aGVscChzdWJtZW51KTsKKwkJCWVsc2UgeworCQkJCXJlc2V0X3N1YnRpdGxlKCk7CisJCQkJc2hv
d19oZWxwdGV4dCgiUkVBRE1FIiwgbWNvbmZfcmVhZG1lKTsKKwkJCX0KKwkJCWJyZWFrOworCQlj
YXNlIDM6CisJCQlyZXNldF9zdWJ0aXRsZSgpOworCQkJY29uZl9zYXZlKCk7CisJCQlicmVhazsK
KwkJY2FzZSA0OgorCQkJcmVzZXRfc3VidGl0bGUoKTsKKwkJCWNvbmZfbG9hZCgpOworCQkJYnJl
YWs7CisJCWNhc2UgNToKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7CisJCQkJaWYgKHN5bV9z
ZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc3ltX3Nl
dF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCkpCisJCQkJCXNob3dfdGV4dGJveChOVUxMLCBzZXRt
b2RfdGV4dCwgNiwgNzQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmIChpdGVt
X2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7CisJCQli
cmVhazsKKwkJY2FzZSA3OgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3NldF90
cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCk7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJaWYgKGl0
ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOworCQkJ
ZWxzZSBpZiAoaXRlbV9pc190YWcoJ20nKSkKKwkJCQljb25mKHN1Ym1lbnUsIE5VTEwpOworCQkJ
YnJlYWs7CisJCWNhc2UgOToKKwkJCXNlYXJjaF9jb25mKCk7CisJCQlicmVhazsKKwkJY2FzZSAx
MDoKKwkJCXNob3dfYWxsX29wdGlvbnMgPSAhc2hvd19hbGxfb3B0aW9uczsKKwkJCWJyZWFrOwor
CQl9CisJfQorCisJbGlzdF9kZWwodHJhaWwucHJldik7Cit9CisKK3N0YXRpYyBpbnQgc2hvd190
ZXh0Ym94X2V4dChjb25zdCBjaGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIsIGludCBjLCBp
bnQKKwkJCSAgICAqa2V5cywgaW50ICp2c2Nyb2xsLCBpbnQgKmhzY3JvbGwsIHVwZGF0ZV90ZXh0
X2ZuCisJCQkgICAgdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpCit7CisJZGlhbG9nX2NsZWFyKCk7
CisJcmV0dXJuIGRpYWxvZ190ZXh0Ym94KHRpdGxlLCB0ZXh0LCByLCBjLCBrZXlzLCB2c2Nyb2xs
LCBoc2Nyb2xsLAorCQkJICAgICAgdXBkYXRlX3RleHQsIGRhdGEpOworfQorCitzdGF0aWMgdm9p
ZCBzaG93X3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCBy
LCBpbnQgYykKK3sKKwlzaG93X3RleHRib3hfZXh0KHRpdGxlLCAoY2hhciAqKSB0ZXh0LCByLCBj
LCAoaW50IFtdKSB7MH0sIE5VTEwsIE5VTEwsCisJCQkgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRp
YyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQp
Cit7CisJc2hvd190ZXh0Ym94KHRpdGxlLCB0ZXh0LCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQg
Y29uZl9tZXNzYWdlX2NhbGxiYWNrKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKHNhdmVfYW5kX2V4
aXQpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlwcmludGYoIiVzIiwgcyk7CisJfSBlbHNlIHsKKwkJ
c2hvd190ZXh0Ym94KE5VTEwsIHMsIDYsIDYwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3df
aGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygp
OworCisJaGVscC5tYXhfd2lkdGggPSBnZXRtYXh4KHN0ZHNjcikgLSAxMDsKKwltZW51X2dldF9l
eHRfaGVscChtZW51LCAmaGVscCk7CisKKwlzaG93X2hlbHB0ZXh0KG1lbnVfZ2V0X3Byb21wdCht
ZW51KSwgc3RyX2dldCgmaGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsKK30KKworc3RhdGljIHZv
aWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJY29uc3QgY2hhciAqcHJvbXB0
ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlzdHJ1Y3Qg
c3ltYm9sICphY3RpdmU7CisKKwlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5z
eW0pOworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWludCBzZWxlY3RlZDsKKwkJaXRlbV9y
ZXNldCgpOworCisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWZvciAoY2hpbGQgPSBtZW51LT5s
aXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKCFtZW51X2lzX3Zpc2li
bGUoY2hpbGQpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNoaWxkLT5zeW0pCisJCQkJaXRlbV9t
YWtlKCIlcyIsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQkJZWxzZSB7CisJCQkJaXRlbV9t
YWtlKCIqKiogJXMgKioqIiwgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQkJaXRlbV9zZXRf
dGFnKCc6Jyk7CisJCQl9CisJCQlpdGVtX3NldF9kYXRhKGNoaWxkKTsKKwkJCWlmIChjaGlsZC0+
c3ltID09IGFjdGl2ZSkKKwkJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKKwkJCWlmIChjaGlsZC0+
c3ltID09IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCisJCQkJaXRlbV9zZXRfdGFn
KCdYJyk7CisJCX0KKwkJZGlhbG9nX2NsZWFyKCk7CisJCXJlcyA9IGRpYWxvZ19jaGVja2xpc3Qo
cHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJCXJhZGlvbGlzdF9pbnN0cnVjdGlv
bnMsCisJCQkJCU1FTlVCT1hfSEVJR1RIX01JTiwKKwkJCQkJTUVOVUJPWF9XSURUSF9NSU4sCisJ
CQkJCUNIRUNLTElTVF9IRUlHVEhfTUlOKTsKKwkJc2VsZWN0ZWQgPSBpdGVtX2FjdGl2YXRlX3Nl
bGVjdGVkKCk7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmIChzZWxlY3RlZCkg
eworCQkJCWNoaWxkID0gaXRlbV9kYXRhKCk7CisJCQkJaWYgKCFjaGlsZC0+c3ltKQorCQkJCQli
cmVhazsKKworCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwgeWVzKTsKKwkJ
CX0KKwkJCXJldHVybjsKKwkJY2FzZSAxOgorCQkJaWYgKHNlbGVjdGVkKSB7CisJCQkJY2hpbGQg
PSBpdGVtX2RhdGEoKTsKKwkJCQlzaG93X2hlbHAoY2hpbGQpOworCQkJCWFjdGl2ZSA9IGNoaWxk
LT5zeW07CisJCQl9IGVsc2UKKwkJCQlzaG93X2hlbHAobWVudSk7CisJCQlicmVhazsKKwkJY2Fz
ZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQljYXNlIC1FUlJESVNQTEFZVE9PU01BTEw6CisJCQly
ZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51
ICptZW51KQoreworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsK
KworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWNvbnN0IGNoYXIgKmhlYWRpbmc7CisKKwkJ
c3dpdGNoIChzeW1fZ2V0X3R5cGUobWVudS0+c3ltKSkgeworCQljYXNlIFNfSU5UOgorCQkJaGVh
ZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7CisJCQlicmVhazsKKwkJY2FzZSBTX0hF
WDoKKwkJCWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4OworCQkJYnJlYWs7CisJ
CWNhc2UgU19TVFJJTkc6CisJCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmlu
ZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBtY29uZiBl
cnJvciEiOworCQl9CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFsb2dfaW5wdXRib3go
cHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJICAgICAgaGVhZGluZywgMTAsIDc1
LAorCQkJCSAgICAgIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkpOworCQlzd2l0Y2gg
KHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoc3ltX3NldF9zdHJpbmdfdmFsdWUobWVudS0+c3lt
LCBkaWFsb2dfaW5wdXRfcmVzdWx0KSkKKwkJCQlyZXR1cm47CisJCQlzaG93X3RleHRib3goTlVM
TCwgIllvdSBoYXZlIG1hZGUgYW4gaW52YWxpZCBlbnRyeS4iLCA1LCA0Myk7CisJCQlicmVhazsK
KwkJY2FzZSAxOgorCQkJc2hvd19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VT
QzoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQp
Cit7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgcmVzOworCQlkaWFsb2dfY2xlYXIoKTsKKwkJcmVz
ID0gZGlhbG9nX2lucHV0Ym94KE5VTEwsIGxvYWRfY29uZmlnX3RleHQsCisJCQkJICAgICAgMTEs
IDU1LCBmaWxlbmFtZSk7CisJCXN3aXRjaChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFs
b2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJCXJldHVybjsKKwkJCWlmICghY29uZl9yZWFkKGRpYWxv
Z19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRf
cmVzdWx0KTsKKwkJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKKwkJCQlyZXR1cm47CisJCQl9
CisJCQlzaG93X3RleHRib3goTlVMTCwgIkZpbGUgZG9lcyBub3QgZXhpc3QhIiwgNSwgMzgpOwor
CQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNob3dfaGVscHRleHQoIkxvYWQgQWx0ZXJuYXRlIENv
bmZpZ3VyYXRpb24iLCBsb2FkX2NvbmZpZ19oZWxwKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9F
U0M6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lk
KQoreworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMg
PSBkaWFsb2dfaW5wdXRib3goTlVMTCwgc2F2ZV9jb25maWdfdGV4dCwKKwkJCQkgICAgICAxMSwg
NTUsIGZpbGVuYW1lKTsKKwkJc3dpdGNoKHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoIWRpYWxv
Z19pbnB1dF9yZXN1bHRbMF0pCisJCQkJcmV0dXJuOworCQkJaWYgKCFjb25mX3dyaXRlKGRpYWxv
Z19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRf
cmVzdWx0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlzaG93X3RleHRib3goTlVMTCwgIkNhbid0
IGNyZWF0ZSBmaWxlISIsIDUsIDYwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X2hl
bHB0ZXh0KCJTYXZlIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiwgc2F2ZV9jb25maWdfaGVscCk7
CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitz
dGF0aWMgaW50IGhhbmRsZV9leGl0KHZvaWQpCit7CisJaW50IHJlczsKKworCXNhdmVfYW5kX2V4
aXQgPSAxOworCXJlc2V0X3N1YnRpdGxlKCk7CisJZGlhbG9nX2NsZWFyKCk7CisJaWYgKGNvbmZf
Z2V0X2NoYW5nZWQoKSkKKwkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsCisJCQkJICAgIkRvIHlv
dSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29uZmlndXJhdGlvbj9cbiIKKwkJCQkgICAgICIoUHJl
c3MgPEVTQz48RVNDPiB0byBjb250aW51ZSBrZXJuZWwgY29uZmlndXJhdGlvbi4pIiwKKwkJCQkg
ICA2LCA2MCk7CisJZWxzZQorCQlyZXMgPSAtMTsKKworCWVuZF9kaWFsb2coc2F2ZWRfeCwgc2F2
ZWRfeSk7CisKKwlzd2l0Y2ggKHJlcykgeworCWNhc2UgMDoKKwkJaWYgKGNvbmZfd3JpdGUoZmls
ZW5hbWUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuXG4iCisJCQkJCSAgIkVycm9yIHdoaWxl
IHdyaXRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4iCisJCQkJCSAgIllvdXIgY29uZmlndXJh
dGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIKKwkJCQkJICAiXG5cbiIpOworCQkJcmV0dXJu
IDE7CisJCX0KKwkJY29uZl93cml0ZV9hdXRvY29uZigwKTsKKwkJLyogZmFsbCB0aHJvdWdoICov
CisJY2FzZSAtMToKKwkJaWYgKCFzaWxlbnQpCisJCQlwcmludGYoIlxuXG4iCisJCQkJICIqKiog
RW5kIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuIgorCQkJCSAiKioqIEV4ZWN1dGUgJ21ha2UnIHRv
IHN0YXJ0IHRoZSBidWlsZCBvciB0cnkgJ21ha2UgaGVscCcuIgorCQkJCSAiXG5cbiIpOworCQly
ZXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoIXNpbGVudCkKKwkJCWZwcmludGYo
c3RkZXJyLCAiXG5cbiIKKwkJCQkJICAiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBO
T1Qgc2F2ZWQuIgorCQkJCQkgICJcblxuIik7CisJCWlmIChyZXMgIT0gS0VZX0VTQykKKwkJCXJl
cyA9IDA7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgc2lnX2hhbmRsZXIo
aW50IHNpZ25vKQoreworCWV4aXQoaGFuZGxlX2V4aXQoKSk7Cit9CisKK2ludCBtYWluKGludCBh
YywgY2hhciAqKmF2KQoreworCWNoYXIgKm1vZGU7CisJaW50IHJlczsKKworCXNpZ25hbChTSUdJ
TlQsIHNpZ19oYW5kbGVyKTsKKworCWlmIChhYyA+IDEgJiYgc3RyY21wKGF2WzFdLCAiLXMiKSA9
PSAwKSB7CisJCXNpbGVudCA9IDE7CisJCS8qIFNpbGVuY2UgY29uZl9yZWFkKCkgdW50aWwgdGhl
IHJlYWwgY2FsbGJhY2sgaXMgc2V0IHVwICovCisJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2so
TlVMTCk7CisJCWF2Kys7CisJfQorCWNvbmZfcGFyc2UoYXZbMV0pOworCWNvbmZfcmVhZChOVUxM
KTsKKworCW1vZGUgPSBnZXRlbnYoIk1FTlVDT05GSUdfTU9ERSIpOworCWlmIChtb2RlKSB7CisJ
CWlmICghc3RyY2FzZWNtcChtb2RlLCAic2luZ2xlX21lbnUiKSkKKwkJCXNpbmdsZV9tZW51X21v
ZGUgPSAxOworCX0KKworCWlmIChpbml0X2RpYWxvZyhOVUxMKSkgeworCQlmcHJpbnRmKHN0ZGVy
ciwgIllvdXIgZGlzcGxheSBpcyB0b28gc21hbGwgdG8gcnVuIE1lbnVjb25maWchXG4iKTsKKwkJ
ZnByaW50ZihzdGRlcnIsICJJdCBtdXN0IGJlIGF0IGxlYXN0IDE5IGxpbmVzIGJ5IDgwIGNvbHVt
bnMuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc2V0X2NvbmZpZ19maWxlbmFtZShjb25mX2dl
dF9jb25maWduYW1lKCkpOworCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soY29uZl9tZXNzYWdl
X2NhbGxiYWNrKTsKKwlkbyB7CisJCWNvbmYoJnJvb3RtZW51LCBOVUxMKTsKKwkJcmVzID0gaGFu
ZGxlX2V4aXQoKTsKKwl9IHdoaWxlIChyZXMgPT0gS0VZX0VTQyk7CisKKwlyZXR1cm4gcmVzOwor
fQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMgYi9zdXBwb3J0L2tjb25m
aWcubmV3L21lbnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQxNjQ2
Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMKQEAgLTAsMCAr
MSw4NjcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICov
CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKK3N0YXRp
YyBjb25zdCBjaGFyIG5vaGVscF90ZXh0W10gPSAiVGhlcmUgaXMgbm8gaGVscCBhdmFpbGFibGUg
Zm9yIHRoaXMgb3B0aW9uLiI7CisKK3N0cnVjdCBtZW51IHJvb3RtZW51Oworc3RhdGljIHN0cnVj
dCBtZW51ICoqbGFzdF9lbnRyeV9wdHI7CisKK3N0cnVjdCBmaWxlICpmaWxlX2xpc3Q7CitzdHJ1
Y3QgZmlsZSAqY3VycmVudF9maWxlOworCit2b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVu
dSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwg
Zm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIG1lbnUtPmZpbGUtPm5h
bWUsIG1lbnUtPmxpbmVubyk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlmcHJpbnRm
KHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIHZvaWQgcHJvcF93YXJu
KHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlz
dCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5p
bmc6ICIsIHByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7CisJdmZwcmludGYoc3RkZXJy
LCBmbXQsIGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKwor
dm9pZCBfbWVudV9pbml0KHZvaWQpCit7CisJY3VycmVudF9lbnRyeSA9IGN1cnJlbnRfbWVudSA9
ICZyb290bWVudTsKKwlsYXN0X2VudHJ5X3B0ciA9ICZyb290bWVudS5saXN0OworfQorCit2b2lk
IG1lbnVfYWRkX2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgbWVudSAqbWVu
dTsKKworCW1lbnUgPSB4bWFsbG9jKHNpemVvZigqbWVudSkpOworCW1lbXNldChtZW51LCAwLCBz
aXplb2YoKm1lbnUpKTsKKwltZW51LT5zeW0gPSBzeW07CisJbWVudS0+cGFyZW50ID0gY3VycmVu
dF9tZW51OworCW1lbnUtPmZpbGUgPSBjdXJyZW50X2ZpbGU7CisJbWVudS0+bGluZW5vID0gemNv
bmZfbGluZW5vKCk7CisKKwkqbGFzdF9lbnRyeV9wdHIgPSBtZW51OworCWxhc3RfZW50cnlfcHRy
ID0gJm1lbnUtPm5leHQ7CisJY3VycmVudF9lbnRyeSA9IG1lbnU7CisJaWYgKHN5bSkKKwkJbWVu
dV9hZGRfc3ltYm9sKFBfU1lNQk9MLCBzeW0sIE5VTEwpOworfQorCitzdHJ1Y3QgbWVudSAqbWVu
dV9hZGRfbWVudSh2b2lkKQoreworCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfZW50cnktPmxp
c3Q7CisJcmV0dXJuIGN1cnJlbnRfbWVudSA9IGN1cnJlbnRfZW50cnk7Cit9CisKK3ZvaWQgbWVu
dV9lbmRfbWVudSh2b2lkKQoreworCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfbWVudS0+bmV4
dDsKKwljdXJyZW50X21lbnUgPSBjdXJyZW50X21lbnUtPnBhcmVudDsKK30KKworLyoKKyAqIFJl
d3JpdGVzICdtJyB0byAnbScgJiYgTU9EVUxFUywgc28gdGhhdCBpdCBldmFsdWF0ZXMgdG8gJ24n
IHdoZW4gcnVubmluZworICogd2l0aG91dCBtb2R1bGVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXhw
ciAqcmV3cml0ZV9tKHN0cnVjdCBleHByICplKQoreworCWlmICghZSkKKwkJcmV0dXJuIGU7CisK
Kwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfTk9UOgorCQllLT5sZWZ0LmV4cHIgPSByZXdy
aXRlX20oZS0+bGVmdC5leHByKTsKKwkJYnJlYWs7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6
CisJCWUtPmxlZnQuZXhwciA9IHJld3JpdGVfbShlLT5sZWZ0LmV4cHIpOworCQllLT5yaWdodC5l
eHByID0gcmV3cml0ZV9tKGUtPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwljYXNlIEVfU1lNQk9M
OgorCQkvKiBjaGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8KKwkJaWYgKGUtPmxlZnQu
c3ltID09ICZzeW1ib2xfbW9kKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfYW5kKGUsIGV4cHJfYWxs
b2Nfc3ltYm9sKG1vZHVsZXNfc3ltKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwor
CX0KKwlyZXR1cm4gZTsKK30KKwordm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCkK
K3sKKwljdXJyZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJyZW50X2VudHJ5LT5k
ZXAsIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9zZXRfdHlwZShpbnQgdHlwZSkKK3sKKwlzdHJ1Y3Qg
c3ltYm9sICpzeW0gPSBjdXJyZW50X2VudHJ5LT5zeW07CisKKwlpZiAoc3ltLT50eXBlID09IHR5
cGUpCisJCXJldHVybjsKKwlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgeworCQlzeW0tPnR5
cGUgPSB0eXBlOworCQlyZXR1cm47CisJfQorCW1lbnVfd2FybihjdXJyZW50X2VudHJ5LAorCQki
aWdub3JpbmcgdHlwZSByZWRlZmluaXRpb24gb2YgJyVzJyBmcm9tICclcycgdG8gJyVzJyIsCisJ
CXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCXN5bV90eXBlX25hbWUoc3lt
LT50eXBlKSwgc3ltX3R5cGVfbmFtZSh0eXBlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvcGVy
dHkgKm1lbnVfYWRkX3Byb3AoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1
Y3QgZXhwciAqZXhwciwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnBy
b3AgPSBwcm9wX2FsbG9jKHR5cGUsIGN1cnJlbnRfZW50cnktPnN5bSk7CisKKwlwcm9wLT5tZW51
ID0gY3VycmVudF9lbnRyeTsKKwlwcm9wLT5leHByID0gZXhwcjsKKwlwcm9wLT52aXNpYmxlLmV4
cHIgPSBkZXA7CisKKwlpZiAocHJvbXB0KSB7CisJCWlmIChpc3NwYWNlKCpwcm9tcHQpKSB7CisJ
CQlwcm9wX3dhcm4ocHJvcCwgImxlYWRpbmcgd2hpdGVzcGFjZSBpZ25vcmVkIik7CisJCQl3aGls
ZSAoaXNzcGFjZSgqcHJvbXB0KSkKKwkJCQlwcm9tcHQrKzsKKwkJfQorCQlpZiAoY3VycmVudF9l
bnRyeS0+cHJvbXB0ICYmIGN1cnJlbnRfZW50cnkgIT0gJnJvb3RtZW51KQorCQkJcHJvcF93YXJu
KHByb3AsICJwcm9tcHQgcmVkZWZpbmVkIik7CisKKwkJLyogQXBwbHkgYWxsIHVwcGVyIG1lbnVz
JyB2aXNpYmlsaXRpZXMgdG8gYWN0dWFsIHByb21wdHMuICovCisJCWlmKHR5cGUgPT0gUF9QUk9N
UFQpIHsKKwkJCXN0cnVjdCBtZW51ICptZW51ID0gY3VycmVudF9lbnRyeTsKKworCQkJd2hpbGUg
KChtZW51ID0gbWVudS0+cGFyZW50KSAhPSBOVUxMKSB7CisJCQkJc3RydWN0IGV4cHIgKmR1cF9l
eHByOworCisJCQkJaWYgKCFtZW51LT52aXNpYmlsaXR5KQorCQkJCQljb250aW51ZTsKKwkJCQkv
KgorCQkJCSAqIERvIG5vdCBhZGQgYSByZWZlcmVuY2UgdG8gdGhlCisJCQkJICogbWVudSdzIHZp
c2liaWxpdHkgZXhwcmVzc2lvbiBidXQKKwkJCQkgKiB1c2UgYSBjb3B5IG9mIGl0LiAgT3RoZXJ3
aXNlIHRoZQorCQkJCSAqIGV4cHJlc3Npb24gcmVkdWN0aW9uIGZ1bmN0aW9ucworCQkJCSAqIHdp
bGwgbW9kaWZ5IGV4cHJlc3Npb25zIHRoYXQgaGF2ZQorCQkJCSAqIG11bHRpcGxlIHJlZmVyZW5j
ZXMgd2hpY2ggY2FuCisJCQkJICogY2F1c2UgdW53YW50ZWQgc2lkZSBlZmZlY3RzLgorCQkJCSAq
LworCQkJCWR1cF9leHByID0gZXhwcl9jb3B5KG1lbnUtPnZpc2liaWxpdHkpOworCisJCQkJcHJv
cC0+dmlzaWJsZS5leHByCisJCQkJCT0gZXhwcl9hbGxvY19hbmQocHJvcC0+dmlzaWJsZS5leHBy
LAorCQkJCQkJCSBkdXBfZXhwcik7CisJCQl9CisJCX0KKworCQljdXJyZW50X2VudHJ5LT5wcm9t
cHQgPSBwcm9wOworCX0KKwlwcm9wLT50ZXh0ID0gcHJvbXB0OworCisJcmV0dXJuIHByb3A7Cit9
CisKK3N0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRfcHJvbXB0KGVudW0gcHJvcF90eXBlIHR5cGUs
IGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwlyZXR1cm4gbWVudV9hZGRfcHJv
cCh0eXBlLCBwcm9tcHQsIE5VTEwsIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9hZGRfdmlzaWJpbGl0
eShzdHJ1Y3QgZXhwciAqZXhwcikKK3sKKwljdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5ID0gZXhw
cl9hbGxvY19hbmQoY3VycmVudF9lbnRyeS0+dmlzaWJpbGl0eSwKKwkgICAgZXhwcik7Cit9CisK
K3ZvaWQgbWVudV9hZGRfZXhwcihlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZXhw
ciwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4cHIs
IGRlcCk7Cit9CisKK3ZvaWQgbWVudV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0
cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwltZW51X2FkZF9wcm9wKHR5
cGUsIE5VTEwsIGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSksIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9h
ZGRfb3B0aW9uX21vZHVsZXModm9pZCkKK3sKKwlpZiAobW9kdWxlc19zeW0pCisJCXpjb25mX2Vy
cm9yKCJzeW1ib2wgJyVzJyByZWRlZmluZXMgb3B0aW9uICdtb2R1bGVzJyBhbHJlYWR5IGRlZmlu
ZWQgYnkgc3ltYm9sICclcyciLAorCQkJICAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSwgbW9k
dWxlc19zeW0tPm5hbWUpOworCW1vZHVsZXNfc3ltID0gY3VycmVudF9lbnRyeS0+c3ltOworfQor
Cit2b2lkIG1lbnVfYWRkX29wdGlvbl9kZWZjb25maWdfbGlzdCh2b2lkKQoreworCWlmICghc3lt
X2RlZmNvbmZpZ19saXN0KQorCQlzeW1fZGVmY29uZmlnX2xpc3QgPSBjdXJyZW50X2VudHJ5LT5z
eW07CisJZWxzZSBpZiAoc3ltX2RlZmNvbmZpZ19saXN0ICE9IGN1cnJlbnRfZW50cnktPnN5bSkK
KwkJemNvbmZfZXJyb3IoInRyeWluZyB0byByZWRlZmluZSBkZWZjb25maWcgc3ltYm9sIik7CisJ
c3ltX2RlZmNvbmZpZ19saXN0LT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7Cit9CisKK3ZvaWQg
bWVudV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3kodm9pZCkKK3sKKwljdXJyZW50X2VudHJ5LT5z
eW0tPmZsYWdzIHw9IFNZTUJPTF9BTExOT0NPTkZJR19ZOworfQorCitzdGF0aWMgaW50IG1lbnVf
dmFsaWRhdGVfbnVtYmVyKHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IHN5bWJvbCAqc3ltMikK
K3sKKwlyZXR1cm4gc3ltMi0+dHlwZSA9PSBTX0lOVCB8fCBzeW0yLT50eXBlID09IFNfSEVYIHx8
CisJICAgICAgIChzeW0yLT50eXBlID09IFNfVU5LTk9XTiAmJiBzeW1fc3RyaW5nX3ZhbGlkKHN5
bSwgc3ltMi0+bmFtZSkpOworfQorCitzdGF0aWMgdm9pZCBzeW1fY2hlY2tfcHJvcChzdHJ1Y3Qg
c3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wg
KnN5bTI7CisJY2hhciAqdXNlOworCisJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9w
ID0gcHJvcC0+bmV4dCkgeworCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX0RFRkFV
TFQ6CisJCQlpZiAoKHN5bS0+dHlwZSA9PSBTX1NUUklORyB8fCBzeW0tPnR5cGUgPT0gU19JTlQg
fHwgc3ltLT50eXBlID09IFNfSEVYKSAmJgorCQkJICAgIHByb3AtPmV4cHItPnR5cGUgIT0gRV9T
WU1CT0wpCisJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICJkZWZhdWx0IGZvciBjb25maWcg
c3ltYm9sICclcyciCisJCQkJICAgICIgbXVzdCBiZSBhIHNpbmdsZSBzeW1ib2wiLCBzeW0tPm5h
bWUpOworCQkJaWYgKHByb3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCisJCQkJYnJlYWs7CisJ
CQlzeW0yID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX0hF
WCB8fCBzeW0tPnR5cGUgPT0gU19JTlQpIHsKKwkJCQlpZiAoIW1lbnVfdmFsaWRhdGVfbnVtYmVy
KHN5bSwgc3ltMikpCisJCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJCQkgICAgIiclcyc6IG51bWJl
ciBpcyBpbnZhbGlkIiwKKwkJCQkJICAgIHN5bS0+bmFtZSk7CisJCQl9CisJCQlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pKSB7CisJCQkJc3RydWN0IHByb3BlcnR5ICpjaG9pY2VfcHJvcCA9CisJCQkJ
CXN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltMik7CisKKwkJCQlpZiAoIWNob2ljZV9wcm9wIHx8CisJ
CQkJICAgIHByb3BfZ2V0X3N5bWJvbChjaG9pY2VfcHJvcCkgIT0gc3ltKQorCQkJCQlwcm9wX3dh
cm4ocHJvcCwKKwkJCQkJCSAgImNob2ljZSBkZWZhdWx0IHN5bWJvbCAnJXMnIGlzIG5vdCBjb250
YWluZWQgaW4gdGhlIGNob2ljZSIsCisJCQkJCQkgIHN5bTItPm5hbWUpOworCQkJfQorCQkJYnJl
YWs7CisJCWNhc2UgUF9TRUxFQ1Q6CisJCWNhc2UgUF9JTVBMWToKKwkJCXVzZSA9IHByb3AtPnR5
cGUgPT0gUF9TRUxFQ1QgPyAic2VsZWN0IiA6ICJpbXBseSI7CisJCQlzeW0yID0gcHJvcF9nZXRf
c3ltYm9sKHByb3ApOworCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltLT50eXBl
ICE9IFNfVFJJU1RBVEUpCisJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICJjb25maWcgc3lt
Ym9sICclcycgdXNlcyAlcywgYnV0IGlzICIKKwkJCQkgICAgIm5vdCBib29sIG9yIHRyaXN0YXRl
Iiwgc3ltLT5uYW1lLCB1c2UpOworCQkJZWxzZSBpZiAoc3ltMi0+dHlwZSAhPSBTX1VOS05PV04g
JiYKKwkJCQkgc3ltMi0+dHlwZSAhPSBTX0JPT0xFQU4gJiYKKwkJCQkgc3ltMi0+dHlwZSAhPSBT
X1RSSVNUQVRFKQorCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJCSAgICAiJyVzJyBoYXMgd3Jvbmcg
dHlwZS4gJyVzJyBvbmx5ICIKKwkJCQkgICAgImFjY2VwdCBhcmd1bWVudHMgb2YgYm9vbCBhbmQg
IgorCQkJCSAgICAidHJpc3RhdGUgdHlwZSIsIHN5bTItPm5hbWUsIHVzZSk7CisJCQlicmVhazsK
KwkJY2FzZSBQX1JBTkdFOgorCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0lOVCAmJiBzeW0tPnR5cGUg
IT0gU19IRVgpCisJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBvbmx5IGFsbG93ZWQgIgor
CQkJCQkJImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsKKwkJCWlmICghbWVudV92YWxpZGF0ZV9u
dW1iZXIoc3ltLCBwcm9wLT5leHByLT5sZWZ0LnN5bSkgfHwKKwkJCSAgICAhbWVudV92YWxpZGF0
ZV9udW1iZXIoc3ltLCBwcm9wLT5leHByLT5yaWdodC5zeW0pKQorCQkJCXByb3Bfd2Fybihwcm9w
LCAicmFuZ2UgaXMgaW52YWxpZCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQk7CisJCX0K
Kwl9Cit9CisKK3ZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KQoreworCXN0
cnVjdCBtZW51ICptZW51LCAqbGFzdF9tZW51OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKnBhcmVudGRlcCwgKmJhc2VkZXAsICpk
ZXAsICpkZXAyLCAqKmVwOworCisJc3ltID0gcGFyZW50LT5zeW07CisJaWYgKHBhcmVudC0+bGlz
dCkgeworCQkvKgorCQkgKiBUaGlzIG1lbnUgbm9kZSBoYXMgY2hpbGRyZW4uIFdlIChyZWN1cnNp
dmVseSkgcHJvY2VzcyB0aGVtCisJCSAqIGFuZCBwcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2ll
cyBiZWZvcmUgbW92aW5nIG9uLgorCQkgKi8KKworCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uo
c3ltKSkgeworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pIHsKKwkJCQkvKiBmaW5kIHRo
ZSBmaXJzdCBjaG9pY2UgdmFsdWUgdG8gZmluZCBvdXQgY2hvaWNlIHR5cGUgKi8KKwkJCQljdXJy
ZW50X2VudHJ5ID0gcGFyZW50OworCQkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsg
bWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCQkJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5zeW0tPnR5
cGUgIT0gU19VTktOT1dOKSB7CisJCQkJCQltZW51X3NldF90eXBlKG1lbnUtPnN5bS0+dHlwZSk7
CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS8qIHNldCB0aGUgdHlwZSBv
ZiB0aGUgcmVtYWluaW5nIGNob2ljZSB2YWx1ZXMgKi8KKwkJCWZvciAobWVudSA9IHBhcmVudC0+
bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCQljdXJyZW50X2VudHJ5ID0gbWVu
dTsKKwkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSA9PSBTX1VOS05PV04pCisJ
CQkJCW1lbnVfc2V0X3R5cGUoc3ltLT50eXBlKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFVzZSB0
aGUgY2hvaWNlIGl0c2VsZiBhcyB0aGUgcGFyZW50IGRlcGVuZGVuY3kgb2YKKwkJCSAqIHRoZSBj
b250YWluZWQgaXRlbXMuIFRoaXMgdHVybnMgdGhlIG1vZGUgb2YgdGhlCisJCQkgKiBjaG9pY2Ug
aW50byBhbiB1cHBlciBib3VuZCBvbiB0aGUgdmlzaWJpbGl0eSBvZiB0aGUKKwkJCSAqIGNob2lj
ZSB2YWx1ZSBzeW1ib2xzLgorCQkJICovCisJCQlwYXJlbnRkZXAgPSBleHByX2FsbG9jX3N5bWJv
bChzeW0pOworCQl9IGVsc2UgaWYgKHBhcmVudC0+cHJvbXB0KQorCQkJLyogTWVudSBub2RlIGZv
ciAnbWVudScgKi8KKwkJCXBhcmVudGRlcCA9IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHI7
CisJCWVsc2UKKwkJCS8qIE1lbnUgbm9kZSBmb3IgJ2lmJyAqLworCQkJcGFyZW50ZGVwID0gcGFy
ZW50LT5kZXA7CisKKwkJLyogRm9yIGVhY2ggY2hpbGQgbWVudSBub2RlLi4uICovCisJCWZvciAo
bWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCS8qCisJ
CQkgKiBQcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2llcyB0byB0aGUgY2hpbGQgbWVudQorCQkJ
ICogbm9kZSwgYWxzbyByZXdyaXRpbmcgYW5kIHNpbXBsaWZ5aW5nIGV4cHJlc3Npb25zCisJCQkg
Ki8KKwkJCWJhc2VkZXAgPSByZXdyaXRlX20obWVudS0+ZGVwKTsKKwkJCWJhc2VkZXAgPSBleHBy
X3RyYW5zZm9ybShiYXNlZGVwKTsKKwkJCWJhc2VkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2Nv
cHkocGFyZW50ZGVwKSwgYmFzZWRlcCk7CisJCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVw
cyhiYXNlZGVwKTsKKwkJCW1lbnUtPmRlcCA9IGJhc2VkZXA7CisKKwkJCWlmIChtZW51LT5zeW0p
CisJCQkJLyoKKwkJCQkgKiBOb3RlOiBGb3Igc3ltYm9scywgYWxsIHByb21wdHMgYXJlIGluY2x1
ZGVkCisJCQkJICogdG9vIGluIHRoZSBzeW1ib2wncyBvd24gcHJvcGVydHkgbGlzdAorCQkJCSAq
LworCQkJCXByb3AgPSBtZW51LT5zeW0tPnByb3A7CisJCQllbHNlCisJCQkJLyoKKwkJCQkgKiBG
b3Igbm9uLXN5bWJvbCBtZW51IG5vZGVzLCB3ZSBqdXN0IG5lZWQgdG8KKwkJCQkgKiBoYW5kbGUg
dGhlIHByb21wdAorCQkJCSAqLworCQkJCXByb3AgPSBtZW51LT5wcm9tcHQ7CisKKwkJCS8qIEZv
ciBlYWNoIHByb3BlcnR5Li4uICovCisJCQlmb3IgKDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQp
IHsKKwkJCQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQorCQkJCQkvKgorCQkJCQkgKiBUd28gcG9z
c2liaWxpdGllczoKKwkJCQkJICoKKwkJCQkJICogMS4gVGhlIHByb3BlcnR5IGxhY2tzIGRlcGVu
ZGVuY2llcworCQkJCQkgKiAgICBhbmQgc28gaXNuJ3QgbG9jYXRpb24tc3BlY2lmaWMsCisJCQkJ
CSAqICAgIGUuZy4gYW4gJ29wdGlvbicKKwkJCQkJICoKKwkJCQkJICogMi4gVGhlIHByb3BlcnR5
IGJlbG9uZ3MgdG8gYSBzeW1ib2wKKwkJCQkJICogICAgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2Nh
dGlvbnMgYW5kCisJCQkJCSAqICAgIGlzIGZyb20gc29tZSBvdGhlciBsb2NhdGlvbi4gSXQKKwkJ
CQkJICogICAgd2lsbCBiZSBoYW5kbGVkIHRoZXJlIGluIHRoYXQKKwkJCQkJICogICAgY2FzZS4K
KwkJCQkJICoKKwkJCQkJICogU2tpcCB0aGUgcHJvcGVydHkuCisJCQkJCSAqLworCQkJCQljb250
aW51ZTsKKworCQkJCS8qCisJCQkJICogUHJvcGFnYXRlIHBhcmVudCBkZXBlbmRlbmNpZXMgdG8g
dGhlCisJCQkJICogcHJvcGVydHkncyBjb25kaXRpb24sIHJld3JpdGluZyBhbmQKKwkJCQkgKiBz
aW1wbGlmeWluZyBleHByZXNzaW9ucyBhdCB0aGUgc2FtZSB0aW1lCisJCQkJICovCisJCQkJZGVw
ID0gcmV3cml0ZV9tKHByb3AtPnZpc2libGUuZXhwcik7CisJCQkJZGVwID0gZXhwcl90cmFuc2Zv
cm0oZGVwKTsKKwkJCQlkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksIGRl
cCk7CisJCQkJZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhkZXApOworCQkJCWlmIChtZW51LT5z
eW0gJiYgbWVudS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCQkJCWRlcCA9IGV4cHJfdHJh
bnNfYm9vbChkZXApOworCQkJCXByb3AtPnZpc2libGUuZXhwciA9IGRlcDsKKworCQkJCS8qCisJ
CQkJICogSGFuZGxlIHNlbGVjdHMgYW5kIGltcGxpZXMsIHdoaWNoIG1vZGlmeSB0aGUKKwkJCQkg
KiBkZXBlbmRlbmNpZXMgb2YgdGhlIHNlbGVjdGVkL2ltcGxpZWQgc3ltYm9sCisJCQkJICovCisJ
CQkJaWYgKHByb3AtPnR5cGUgPT0gUF9TRUxFQ1QpIHsKKwkJCQkJc3RydWN0IHN5bWJvbCAqZXMg
PSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCQkJCWVzLT5yZXZfZGVwLmV4cHIgPSBleHByX2Fs
bG9jX29yKGVzLT5yZXZfZGVwLmV4cHIsCisJCQkJCQkJZXhwcl9hbGxvY19hbmQoZXhwcl9hbGxv
Y19zeW1ib2wobWVudS0+c3ltKSwgZXhwcl9jb3B5KGRlcCkpKTsKKwkJCQl9IGVsc2UgaWYgKHBy
b3AtPnR5cGUgPT0gUF9JTVBMWSkgeworCQkJCQlzdHJ1Y3Qgc3ltYm9sICplcyA9IHByb3BfZ2V0
X3N5bWJvbChwcm9wKTsKKwkJCQkJZXMtPmltcGxpZWQuZXhwciA9IGV4cHJfYWxsb2Nfb3IoZXMt
PmltcGxpZWQuZXhwciwKKwkJCQkJCQlleHByX2FsbG9jX2FuZChleHByX2FsbG9jX3N5bWJvbCht
ZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChz
eW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJZXhwcl9mcmVlKHBhcmVudGRlcCk7CisKKwkJ
LyoKKwkJICogUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlbiBpbiB0aGUgc2FtZSBmYXNoaW9u
IGJlZm9yZQorCQkgKiBtb3Zpbmcgb24KKwkJICovCisJCWZvciAobWVudSA9IHBhcmVudC0+bGlz
dDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpCisJCQltZW51X2ZpbmFsaXplKG1lbnUpOworCX0g
ZWxzZSBpZiAoc3ltKSB7CisJCS8qCisJCSAqIEF1dG9tYXRpYyBzdWJtZW51IGNyZWF0aW9uLiBJ
ZiBzeW0gaXMgYSBzeW1ib2wgYW5kIEEsIEIsIEMsCisJCSAqIC4uLiBhcmUgY29uc2VjdXRpdmUg
aXRlbXMgKHN5bWJvbHMsIG1lbnVzLCBpZnMsIGV0Yy4pIHRoYXQKKwkJICogYWxsIGRlcGVuZCBv
biBzeW0sIHRoZW4gdGhlIGZvbGxvd2luZyBtZW51IHN0cnVjdHVyZSBpcworCQkgKiBjcmVhdGVk
OgorCQkgKgorCQkgKglzeW0KKwkJICoJICstQQorCQkgKgkgKy1CCisJCSAqCSArLUMKKwkJICoJ
IC4uLgorCQkgKgorCQkgKiBUaGlzIGFsc28gd29ya3MgcmVjdXJzaXZlbHksIGdpdmluZyB0aGUg
Zm9sbG93aW5nIHN0cnVjdHVyZQorCQkgKiBpZiBBIGlzIGEgc3ltYm9sIGFuZCBCIGRlcGVuZHMg
b24gQToKKwkJICoKKwkJICoJc3ltCisJCSAqCSArLUEKKwkJICoJIHwgKy1CCisJCSAqCSArLUMK
KwkJICoJIC4uLgorCQkgKi8KKworCQliYXNlZGVwID0gcGFyZW50LT5wcm9tcHQgPyBwYXJlbnQt
PnByb21wdC0+dmlzaWJsZS5leHByIDogTlVMTDsKKwkJYmFzZWRlcCA9IGV4cHJfdHJhbnNfY29t
cGFyZShiYXNlZGVwLCBFX1VORVFVQUwsICZzeW1ib2xfbm8pOworCQliYXNlZGVwID0gZXhwcl9l
bGltaW5hdGVfZHVwcyhleHByX3RyYW5zZm9ybShiYXNlZGVwKSk7CisKKwkJLyogRXhhbWluZSBj
b25zZWN1dGl2ZSBlbGVtZW50cyBhZnRlciBzeW0gKi8KKwkJbGFzdF9tZW51ID0gTlVMTDsKKwkJ
Zm9yIChtZW51ID0gcGFyZW50LT5uZXh0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQkJ
ZGVwID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIgOiBtZW51LT5k
ZXA7CisJCQlpZiAoIWV4cHJfY29udGFpbnNfc3ltYm9sKGRlcCwgc3ltKSkKKwkJCQkvKiBObyBk
ZXBlbmRlbmN5LCBxdWl0ICovCisJCQkJYnJlYWs7CisJCQlpZiAoZXhwcl9kZXBlbmRzX3N5bWJv
bChkZXAsIHN5bSkpCisJCQkJLyogQWJzb2x1dGUgZGVwZW5kZW5jeSwgcHV0IGluIHN1Ym1lbnUg
Ki8KKwkJCQlnb3RvIG5leHQ7CisKKwkJCS8qCisJCQkgKiBBbHNvIGNvbnNpZGVyIGl0IGEgZGVw
ZW5kZW5jeSBvbiBzeW0gaWYgb3VyCisJCQkgKiBkZXBlbmRlbmNpZXMgY29udGFpbiBzeW0gYW5k
IGFyZSBhICJzdXBlcnNldCIgb2YKKwkJCSAqIHN5bSdzIGRlcGVuZGVuY2llcywgZS5nLiAnKHN5
bSB8fCBRKSAmJiBSJyB3aGVuIHN5bQorCQkJICogZGVwZW5kcyBvbiBSLgorCQkJICoKKwkJCSAq
IE5vdGUgdGhhdCAnUicgbWlnaHQgYmUgZnJvbSBhbiBlbmNsb3NpbmcgbWVudSBvciBpZiwKKwkJ
CSAqIG1ha2luZyB0aGlzIGEgbW9yZSBjb21tb24gY2FzZSB0aGFuIGl0IG1pZ2h0IHNlZW0uCisJ
CQkgKi8KKwkJCWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShkZXAsIEVfVU5FUVVBTCwgJnN5bWJv
bF9ubyk7CisJCQlkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGV4cHJfdHJhbnNmb3JtKGRlcCkp
OworCQkJZGVwMiA9IGV4cHJfY29weShiYXNlZGVwKTsKKwkJCWV4cHJfZWxpbWluYXRlX2VxKCZk
ZXAsICZkZXAyKTsKKwkJCWV4cHJfZnJlZShkZXApOworCQkJaWYgKCFleHByX2lzX3llcyhkZXAy
KSkgeworCQkJCS8qIE5vdCBzdXBlcnNldCwgcXVpdCAqLworCQkJCWV4cHJfZnJlZShkZXAyKTsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIFN1cGVyc2V0LCBwdXQgaW4gc3VibWVudSAqLworCQkJ
ZXhwcl9mcmVlKGRlcDIpOworCQluZXh0OgorCQkJbWVudV9maW5hbGl6ZShtZW51KTsKKwkJCW1l
bnUtPnBhcmVudCA9IHBhcmVudDsKKwkJCWxhc3RfbWVudSA9IG1lbnU7CisJCX0KKwkJZXhwcl9m
cmVlKGJhc2VkZXApOworCQlpZiAobGFzdF9tZW51KSB7CisJCQlwYXJlbnQtPmxpc3QgPSBwYXJl
bnQtPm5leHQ7CisJCQlwYXJlbnQtPm5leHQgPSBsYXN0X21lbnUtPm5leHQ7CisJCQlsYXN0X21l
bnUtPm5leHQgPSBOVUxMOworCQl9CisKKwkJc3ltLT5kaXJfZGVwLmV4cHIgPSBleHByX2FsbG9j
X29yKHN5bS0+ZGlyX2RlcC5leHByLCBwYXJlbnQtPmRlcCk7CisJfQorCWZvciAobWVudSA9IHBh
cmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJaWYgKHN5bSAmJiBzeW1f
aXNfY2hvaWNlKHN5bSkgJiYKKwkJICAgIG1lbnUtPnN5bSAmJiAhc3ltX2lzX2Nob2ljZV92YWx1
ZShtZW51LT5zeW0pKSB7CisJCQljdXJyZW50X2VudHJ5ID0gbWVudTsKKwkJCW1lbnUtPnN5bS0+
ZmxhZ3MgfD0gU1lNQk9MX0NIT0lDRVZBTDsKKwkJCWlmICghbWVudS0+cHJvbXB0KQorCQkJCW1l
bnVfd2FybihtZW51LCAiY2hvaWNlIHZhbHVlIG11c3QgaGF2ZSBhIHByb21wdCIpOworCQkJZm9y
IChwcm9wID0gbWVudS0+c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQkJ
CWlmIChwcm9wLT50eXBlID09IFBfREVGQVVMVCkKKwkJCQkJcHJvcF93YXJuKHByb3AsICJkZWZh
dWx0cyBmb3IgY2hvaWNlICIKKwkJCQkJCSAgInZhbHVlcyBub3Qgc3VwcG9ydGVkIik7CisJCQkJ
aWYgKHByb3AtPm1lbnUgPT0gbWVudSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHByb3AtPnR5
cGUgPT0gUF9QUk9NUFQgJiYKKwkJCQkgICAgcHJvcC0+bWVudS0+cGFyZW50LT5zeW0gIT0gc3lt
KQorCQkJCQlwcm9wX3dhcm4ocHJvcCwgImNob2ljZSB2YWx1ZSB1c2VkIG91dHNpZGUgaXRzIGNo
b2ljZSBncm91cCIpOworCQkJfQorCQkJLyogTm9uLXRyaXN0YXRlIGNob2ljZSB2YWx1ZXMgb2Yg
dHJpc3RhdGUgY2hvaWNlcyBtdXN0CisJCQkgKiBkZXBlbmQgb24gdGhlIGNob2ljZSBiZWluZyBz
ZXQgdG8gWS4gVGhlIGNob2ljZQorCQkJICogdmFsdWVzJyBkZXBlbmRlbmNpZXMgd2VyZSBwcm9w
YWdhdGVkIHRvIHRoZWlyCisJCQkgKiBwcm9wZXJ0aWVzIGFib3ZlLCBzbyB0aGUgY2hhbmdlIGhl
cmUgbXVzdCBiZSByZS0KKwkJCSAqIHByb3BhZ2F0ZWQuCisJCQkgKi8KKwkJCWlmIChzeW0tPnR5
cGUgPT0gU19UUklTVEFURSAmJiBtZW51LT5zeW0tPnR5cGUgIT0gU19UUklTVEFURSkgeworCQkJ
CWJhc2VkZXAgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltLCAmc3ltYm9sX3llcyk7CisJ
CQkJbWVudS0+ZGVwID0gZXhwcl9hbGxvY19hbmQoYmFzZWRlcCwgbWVudS0+ZGVwKTsKKwkJCQlm
b3IgKHByb3AgPSBtZW51LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJ
CQkJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpCisJCQkJCQljb250aW51ZTsKKwkJCQkJcHJvcC0+
dmlzaWJsZS5leHByID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KGJhc2VkZXApLAorCQkJCQkJ
CQkJICAgIHByb3AtPnZpc2libGUuZXhwcik7CisJCQkJfQorCQkJfQorCQkJbWVudV9hZGRfc3lt
Ym9sKFBfQ0hPSUNFLCBzeW0sIE5VTEwpOworCQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Ao
c3ltKTsKKwkJCWZvciAoZXAgPSAmcHJvcC0+ZXhwcjsgKmVwOyBlcCA9ICYoKmVwKS0+bGVmdC5l
eHByKQorCQkJCTsKKwkJCSplcCA9IGV4cHJfYWxsb2Nfb25lKEVfTElTVCwgTlVMTCk7CisJCQko
KmVwKS0+cmlnaHQuc3ltID0gbWVudS0+c3ltOworCQl9CisKKwkJLyoKKwkJICogVGhpcyBjb2Rl
IHNlcnZlcyB0d28gcHVycG9zZXM6CisJCSAqCisJCSAqICgxKSBGbGF0dGVuaW5nICdpZicgYmxv
Y2tzLCB3aGljaCBkbyBub3Qgc3BlY2lmeSBhIHN1Ym1lbnUKKwkJICogICAgIGFuZCBvbmx5IGFk
ZCBkZXBlbmRlbmNpZXMuCisJCSAqCisJCSAqICAgICAoQXV0b21hdGljIHN1Ym1lbnUgY3JlYXRp
b24gbWlnaHQgc3RpbGwgY3JlYXRlIGEgc3VibWVudQorCQkgKiAgICAgZnJvbSBhbiAnaWYnIGJl
Zm9yZSB0aGlzIGNvZGUgcnVucy4pCisJCSAqCisJCSAqICgyKSAiVW5kb2luZyIgYW55IGF1dG9t
YXRpYyBzdWJtZW51cyBjcmVhdGVkIGVhcmxpZXIgYmVsb3cKKwkJICogICAgIHByb21wdGxlc3Mg
c3ltYm9scy4KKwkJICoKKwkJICogQmVmb3JlOgorCQkgKgorCQkgKglBCisJCSAqCWlmIC4uLiAo
b3IgcHJvbXB0bGVzcyBzeW1ib2wpCisJCSAqCSArLUIKKwkJICoJICstQworCQkgKglECisJCSAq
CisJCSAqIEFmdGVyOgorCQkgKgorCQkgKglBCisJCSAqCWlmIC4uLiAob3IgcHJvbXB0bGVzcyBz
eW1ib2wpCisJCSAqCUIKKwkJICoJQworCQkgKglECisJCSAqLworCQlpZiAobWVudS0+bGlzdCAm
JiAoIW1lbnUtPnByb21wdCB8fCAhbWVudS0+cHJvbXB0LT50ZXh0KSkgeworCQkJZm9yIChsYXN0
X21lbnUgPSBtZW51LT5saXN0OyA7IGxhc3RfbWVudSA9IGxhc3RfbWVudS0+bmV4dCkgeworCQkJ
CWxhc3RfbWVudS0+cGFyZW50ID0gcGFyZW50OworCQkJCWlmICghbGFzdF9tZW51LT5uZXh0KQor
CQkJCQlicmVhazsKKwkJCX0KKwkJCWxhc3RfbWVudS0+bmV4dCA9IG1lbnUtPm5leHQ7CisJCQlt
ZW51LT5uZXh0ID0gbWVudS0+bGlzdDsKKwkJCW1lbnUtPmxpc3QgPSBOVUxMOworCQl9CisJfQor
CisJaWYgKHN5bSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV0FSTkVEKSkgeworCQlpZiAoc3lt
LT50eXBlID09IFNfVU5LTk9XTikKKwkJCW1lbnVfd2FybihwYXJlbnQsICJjb25maWcgc3ltYm9s
IGRlZmluZWQgd2l0aG91dCB0eXBlIik7CisKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiAh
cGFyZW50LT5wcm9tcHQpCisJCQltZW51X3dhcm4ocGFyZW50LCAiY2hvaWNlIG11c3QgaGF2ZSBh
IHByb21wdCIpOworCisJCS8qIENoZWNrIHByb3BlcnRpZXMgY29ubmVjdGVkIHRvIHRoaXMgc3lt
Ym9sICovCisJCXN5bV9jaGVja19wcm9wKHN5bSk7CisJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dB
Uk5FRDsKKwl9CisKKwkvKgorCSAqIEZvciBub24tb3B0aW9uYWwgY2hvaWNlcywgYWRkIGEgcmV2
ZXJzZSBkZXBlbmRlbmN5IChjb3JyZXNwb25kaW5nIHRvCisJICogYSBzZWxlY3QpIG9mICc8dmlz
aWJpbGl0eT4gJiYgbScuIFRoaXMgcHJldmVudHMgdGhlIHVzZXIgZnJvbQorCSAqIHNldHRpbmcg
dGhlIGNob2ljZSBtb2RlIHRvICduJyB3aGVuIHRoZSBjaG9pY2UgaXMgdmlzaWJsZS4KKwkgKgor
CSAqIFRoaXMgd291bGQgYWxzbyB3b3JrIGZvciBub24tY2hvaWNlIHN5bWJvbHMsIGJ1dCBvbmx5
IG5vbi1vcHRpb25hbAorCSAqIGNob2ljZXMgY2xlYXIgU1lNQk9MX09QVElPTkFMIGFzIG9mIHdy
aXRpbmcuIENob2ljZXMgYXJlIGltcGxlbWVudGVkCisJICogYXMgYSB0eXBlIG9mIHN5bWJvbC4K
KwkgKi8KKwlpZiAoc3ltICYmICFzeW1faXNfb3B0aW9uYWwoc3ltKSAmJiBwYXJlbnQtPnByb21w
dCkgeworCQlzeW0tPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5yZXZfZGVwLmV4
cHIsCisJCQkJZXhwcl9hbGxvY19hbmQocGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwciwKKwkJ
CQkJZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9tb2QpKSk7CisJfQorfQorCitib29sIG1lbnVf
aGFzX3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpZiAoIW1lbnUtPnByb21wdCkKKwkJ
cmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCisvKgorICogRGV0ZXJtaW5lIGlmIGEg
bWVudSBpcyBlbXB0eS4KKyAqIEEgbWVudSBpcyBjb25zaWRlcmVkIGVtcHR5IGlmIGl0IGNvbnRh
aW5zIG5vIG9yIG9ubHkKKyAqIGludmlzaWJsZSBlbnRyaWVzLgorICovCitib29sIG1lbnVfaXNf
ZW1wdHkoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCisJZm9y
IChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCWlm
IChtZW51X2lzX3Zpc2libGUoY2hpbGQpKQorCQkJcmV0dXJuKGZhbHNlKTsKKwl9CisJcmV0dXJu
KHRydWUpOworfQorCitib29sIG1lbnVfaXNfdmlzaWJsZShzdHJ1Y3QgbWVudSAqbWVudSkKK3sK
KwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXRyaXN0YXRlIHZp
c2libGU7CisKKwlpZiAoIW1lbnUtPnByb21wdCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG1l
bnUtPnZpc2liaWxpdHkpIHsKKwkJaWYgKGV4cHJfY2FsY192YWx1ZShtZW51LT52aXNpYmlsaXR5
KSA9PSBubykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzeW0gPSBtZW51LT5zeW07CisJaWYg
KHN5bSkgeworCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQl2aXNpYmxlID0gbWVudS0+cHJvbXB0
LT52aXNpYmxlLnRyaTsKKwl9IGVsc2UKKwkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+dmlzaWJs
ZS50cmkgPSBleHByX2NhbGNfdmFsdWUobWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIpOworCisJ
aWYgKHZpc2libGUgIT0gbm8pCisJCXJldHVybiB0cnVlOworCisJaWYgKCFzeW0gfHwgc3ltX2dl
dF90cmlzdGF0ZV92YWx1ZShtZW51LT5zeW0pID09IG5vKQorCQlyZXR1cm4gZmFsc2U7CisKKwlm
b3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJ
aWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkpIHsKKwkJCWlmIChzeW0pCisJCQkJc3ltLT5mbGFn
cyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVy
biBmYWxzZTsKK30KKworY29uc3QgY2hhciAqbWVudV9nZXRfcHJvbXB0KHN0cnVjdCBtZW51ICpt
ZW51KQoreworCWlmIChtZW51LT5wcm9tcHQpCisJCXJldHVybiBtZW51LT5wcm9tcHQtPnRleHQ7
CisJZWxzZSBpZiAobWVudS0+c3ltKQorCQlyZXR1cm4gbWVudS0+c3ltLT5uYW1lOworCXJldHVy
biBOVUxMOworfQorCitzdHJ1Y3QgbWVudSAqbWVudV9nZXRfcm9vdF9tZW51KHN0cnVjdCBtZW51
ICptZW51KQoreworCXJldHVybiAmcm9vdG1lbnU7Cit9CisKK3N0cnVjdCBtZW51ICptZW51X2dl
dF9wYXJlbnRfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwllbnVtIHByb3BfdHlwZSB0eXBl
OworCisJZm9yICg7IG1lbnUgIT0gJnJvb3RtZW51OyBtZW51ID0gbWVudS0+cGFyZW50KSB7CisJ
CXR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiAwOworCQlpZiAodHlw
ZSA9PSBQX01FTlUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG1lbnU7Cit9CisKK2Jvb2wgbWVu
dV9oYXNfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlyZXR1cm4gbWVudS0+aGVscCAhPSBO
VUxMOworfQorCitjb25zdCBjaGFyICptZW51X2dldF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQor
eworCWlmIChtZW51LT5oZWxwKQorCQlyZXR1cm4gbWVudS0+aGVscDsKKwllbHNlCisJCXJldHVy
biAiIjsKK30KKworc3RhdGljIHZvaWQgZ2V0X3Byb21wdF9zdHIoc3RydWN0IGdzdHIgKnIsIHN0
cnVjdCBwcm9wZXJ0eSAqcHJvcCwKKwkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJ
aW50IGksIGo7CisJc3RydWN0IG1lbnUgKnN1Ym1lbnVbOF0sICptZW51LCAqbG9jYXRpb24gPSBO
VUxMOworCXN0cnVjdCBqdW1wX2tleSAqanVtcCA9IE5VTEw7CisKKwlzdHJfcHJpbnRmKHIsICJQ
cm9tcHQ6ICVzXG4iLCBwcm9wLT50ZXh0KTsKKwltZW51ID0gcHJvcC0+bWVudS0+cGFyZW50Owor
CWZvciAoaSA9IDA7IG1lbnUgIT0gJnJvb3RtZW51ICYmIGkgPCA4OyBtZW51ID0gbWVudS0+cGFy
ZW50KSB7CisJCWJvb2wgYWNjZXNzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShtZW51KTsKKworCQlz
dWJtZW51W2krK10gPSBtZW51OworCQlpZiAobG9jYXRpb24gPT0gTlVMTCAmJiBhY2Nlc3NpYmxl
KQorCQkJbG9jYXRpb24gPSBtZW51OworCX0KKwlpZiAoaGVhZCAmJiBsb2NhdGlvbikgeworCQlq
dW1wID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGp1bXBfa2V5KSk7CisKKwkJaWYgKG1lbnVfaXNf
dmlzaWJsZShwcm9wLT5tZW51KSkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIG5vdCBlbm91Z2gg
cm9vbSB0byBwdXQgdGhlIGhpbnQgYXQgdGhlCisJCQkgKiBiZWdpbm5pbmcgb2YgdGhlICJQcm9t
cHQiIGxpbmUuIFB1dCB0aGUgaGludCBvbiB0aGUKKwkJCSAqIGxhc3QgIkxvY2F0aW9uIiBsaW5l
IGV2ZW4gd2hlbiBpdCB3b3VsZCBiZWxvbmcgb24KKwkJCSAqIHRoZSBmb3JtZXIuCisJCQkgKi8K
KwkJCWp1bXAtPnRhcmdldCA9IHByb3AtPm1lbnU7CisJCX0gZWxzZQorCQkJanVtcC0+dGFyZ2V0
ID0gbG9jYXRpb247CisKKwkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCQlqdW1wLT5pbmRleCA9
IDA7CisJCWVsc2UKKwkJCWp1bXAtPmluZGV4ID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1
Y3QganVtcF9rZXksCisJCQkJCQkgZW50cmllcyktPmluZGV4ICsgMTsKKworCQlsaXN0X2FkZF90
YWlsKCZqdW1wLT5lbnRyaWVzLCBoZWFkKTsKKwl9CisKKwlpZiAoaSA+IDApIHsKKwkJc3RyX3By
aW50ZihyLCAiICBMb2NhdGlvbjpcbiIpOworCQlmb3IgKGogPSA0OyAtLWkgPj0gMDsgaiArPSAy
KSB7CisJCQltZW51ID0gc3VibWVudVtpXTsKKwkJCWlmIChqdW1wICYmIG1lbnUgPT0gbG9jYXRp
b24pCisJCQkJanVtcC0+b2Zmc2V0ID0gc3RybGVuKHItPnMpOworCQkJc3RyX3ByaW50ZihyLCAi
JSpjLT4gJXMiLCBqLCAnICcsCisJCQkJICAgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsKKwkJCWlm
IChtZW51LT5zeW0pIHsKKwkJCQlzdHJfcHJpbnRmKHIsICIgKCVzIFs9JXNdKSIsIG1lbnUtPnN5
bS0+bmFtZSA/CisJCQkJCW1lbnUtPnN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJCXN5bV9n
ZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkpOworCQkJfQorCQkJc3RyX2FwcGVuZChyLCAiXG4i
KTsKKwkJfQorCX0KK30KKworLyoKKyAqIGdldCBwcm9wZXJ0eSBvZiB0eXBlIFBfU1lNQk9MCisg
Ki8KK3N0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKmdldF9zeW1ib2xfcHJvcChzdHJ1Y3Qgc3ltYm9s
ICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wID0gTlVMTDsKKworCWZvcl9hbGxfcHJv
cGVydGllcyhzeW0sIHByb3AsIFBfU1lNQk9MKQorCQlicmVhazsKKwlyZXR1cm4gcHJvcDsKK30K
Kworc3RhdGljIHZvaWQgZ2V0X3N5bWJvbF9wcm9wc19zdHIoc3RydWN0IGdzdHIgKnIsIHN0cnVj
dCBzeW1ib2wgKnN5bSwKKwkJCQkgZW51bSBwcm9wX3R5cGUgdG9rLCBjb25zdCBjaGFyICpwcmVm
aXgpCit7CisJYm9vbCBoaXQgPSBmYWxzZTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlm
b3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBwcm9wLCB0b2spIHsKKwkJaWYgKCFoaXQpIHsKKwkJCXN0
cl9hcHBlbmQociwgcHJlZml4KTsKKwkJCWhpdCA9IHRydWU7CisJCX0gZWxzZQorCQkJc3RyX3By
aW50ZihyLCAiICYmICIpOworCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7CisJfQor
CWlmIChoaXQpCisJCXN0cl9hcHBlbmQociwgIlxuIik7Cit9CisKKy8qCisgKiBoZWFkIGlzIG9w
dGlvbmFsIGFuZCBtYXkgYmUgTlVMTAorICovCitzdGF0aWMgdm9pZCBnZXRfc3ltYm9sX3N0cihz
dHJ1Y3QgZ3N0ciAqciwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkgICAgc3RydWN0IGxpc3RfaGVh
ZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlpZiAoc3ltICYmIHN5bS0+
bmFtZSkgeworCQlzdHJfcHJpbnRmKHIsICJTeW1ib2w6ICVzIFs9JXNdXG4iLCBzeW0tPm5hbWUs
CisJCQkgICBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKKwkJc3RyX3ByaW50ZihyLCAiVHlw
ZSAgOiAlc1xuIiwgc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKKwkJaWYgKHN5bS0+dHlwZSA9
PSBTX0lOVCB8fCBzeW0tPnR5cGUgPT0gU19IRVgpIHsKKwkJCXByb3AgPSBzeW1fZ2V0X3Jhbmdl
X3Byb3Aoc3ltKTsKKwkJCWlmIChwcm9wKSB7CisJCQkJc3RyX3ByaW50ZihyLCAiUmFuZ2UgOiAi
KTsKKwkJCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7CisJCQkJc3RyX2FwcGVuZChy
LCAiXG4iKTsKKwkJCX0KKwkJfQorCX0KKwlmb3JfYWxsX3Byb21wdHMoc3ltLCBwcm9wKQorCQln
ZXRfcHJvbXB0X3N0cihyLCBwcm9wLCBoZWFkKTsKKworCXByb3AgPSBnZXRfc3ltYm9sX3Byb3Ao
c3ltKTsKKwlpZiAocHJvcCkgeworCQlzdHJfcHJpbnRmKHIsICIgIERlZmluZWQgYXQgJXM6JWRc
biIsIHByb3AtPm1lbnUtPmZpbGUtPm5hbWUsCisJCQlwcm9wLT5tZW51LT5saW5lbm8pOworCQlp
ZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCXN0cl9hcHBlbmQociwg
IiAgRGVwZW5kcyBvbjogIik7CisJCQlleHByX2dzdHJfcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCByKTsKKwkJCXN0cl9hcHBlbmQociwgIlxuIik7CisJCX0KKwl9CisKKwlnZXRfc3ltYm9sX3By
b3BzX3N0cihyLCBzeW0sIFBfU0VMRUNULCAiICBTZWxlY3RzOiAiKTsKKwlpZiAoc3ltLT5yZXZf
ZGVwLmV4cHIpIHsKKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwg
ciwgeWVzLCAiICBTZWxlY3RlZCBieSBbeV06XG4iKTsKKwkJZXhwcl9nc3RyX3ByaW50X3JldmRl
cChzeW0tPnJldl9kZXAuZXhwciwgciwgbW9kLCAiICBTZWxlY3RlZCBieSBbbV06XG4iKTsKKwkJ
ZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwgciwgbm8sICIgIFNlbGVj
dGVkIGJ5IFtuXTpcbiIpOworCX0KKworCWdldF9zeW1ib2xfcHJvcHNfc3RyKHIsIHN5bSwgUF9J
TVBMWSwgIiAgSW1wbGllczogIik7CisJaWYgKHN5bS0+aW1wbGllZC5leHByKSB7CisJCWV4cHJf
Z3N0cl9wcmludF9yZXZkZXAoc3ltLT5pbXBsaWVkLmV4cHIsIHIsIHllcywgIiAgSW1wbGllZCBi
eSBbeV06XG4iKTsKKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPmltcGxpZWQuZXhwciwg
ciwgbW9kLCAiICBJbXBsaWVkIGJ5IFttXTpcbiIpOworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVw
KHN5bS0+aW1wbGllZC5leHByLCByLCBubywgIiAgSW1wbGllZCBieSBbbl06XG4iKTsKKwl9CisK
KwlzdHJfYXBwZW5kKHIsICJcblxuIik7Cit9CisKK3N0cnVjdCBnc3RyIGdldF9yZWxhdGlvbnNf
c3RyKHN0cnVjdCBzeW1ib2wgKipzeW1fYXJyLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQorewor
CXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgZ3N0ciByZXMgPSBzdHJfbmV3KCk7CisJaW50
IGk7CisKKwlmb3IgKGkgPSAwOyBzeW1fYXJyICYmIChzeW0gPSBzeW1fYXJyW2ldKTsgaSsrKQor
CQlnZXRfc3ltYm9sX3N0cigmcmVzLCBzeW0sIGhlYWQpOworCWlmICghaSkKKwkJc3RyX2FwcGVu
ZCgmcmVzLCAiTm8gbWF0Y2hlcyBmb3VuZC5cbiIpOworCXJldHVybiByZXM7Cit9CisKKwordm9p
ZCBtZW51X2dldF9leHRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IGdzdHIgKmhlbHAp
Cit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOworCWNvbnN0IGNoYXIgKmhlbHBf
dGV4dCA9IG5vaGVscF90ZXh0OworCisJaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpIHsKKwkJaWYg
KHN5bS0+bmFtZSkKKwkJCXN0cl9wcmludGYoaGVscCwgIiVzJXM6XG5cbiIsIENPTkZJR18sIHN5
bS0+bmFtZSk7CisJCWhlbHBfdGV4dCA9IG1lbnVfZ2V0X2hlbHAobWVudSk7CisJfQorCXN0cl9w
cmludGYoaGVscCwgIiVzXG4iLCBoZWxwX3RleHQpOworCWlmIChzeW0pCisJCWdldF9zeW1ib2xf
c3RyKGhlbHAsIHN5bSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L21lcmdlX2NvbmZpZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29uZmlnLnNoCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5MjRjNTEKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L21lcmdlX2NvbmZpZy5zaApAQCAtMCwwICsxLDE4OSBA
QAorIyEvYmluL3NoCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjCisjICBt
ZXJnZV9jb25maWcuc2ggLSBUYWtlcyBhIGxpc3Qgb2YgY29uZmlnIGZyYWdtZW50IHZhbHVlcywg
YW5kIG1lcmdlcworIyAgdGhlbSBvbmUgYnkgb25lLiBQcm92aWRlcyB3YXJuaW5ncyBvbiBvdmVy
cmlkZGVuIHZhbHVlcywgYW5kIHNwZWNpZmllZAorIyAgdmFsdWVzIHRoYXQgZGlkIG5vdCBtYWtl
IGl0IHRvIHRoZSByZXN1bHRpbmcgLmNvbmZpZyBmaWxlIChkdWUgdG8gbWlzc2VkCisjICBkZXBl
bmRlbmNpZXMgb3IgY29uZmlnIHN5bWJvbCByZW1vdmFsKS4KKyMKKyMgIFBvcnRpb25zIHJldXNl
ZCBmcm9tIGtjb25mX2NoZWNrIGFuZCBnZW5lcmF0ZV9jZmc6CisjICBodHRwOi8vZ2l0LnlvY3Rv
cHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1rZXJuZWwtdG9vbHMvdHJlZS90b29scy9r
Y29uZl9jaGVjaworIyAgaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kv
eW9jdG8ta2VybmVsLXRvb2xzL3RyZWUvdG9vbHMvZ2VuZXJhdGVfY2ZnCisjCisjICBDb3B5cmln
aHQgKGMpIDIwMDktMjAxMCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMgIENvcHlyaWdodCAy
MDExIExpbmFybworCitjbGVhbl91cCgpIHsKKwlybSAtZiAkVE1QX0ZJTEUKKwlybSAtZiAkTUVS
R0VfRklMRQorCWV4aXQKK30KK3RyYXAgY2xlYW5fdXAgSFVQIElOVCBURVJNCisKK3VzYWdlKCkg
eworCWVjaG8gIlVzYWdlOiAkMCBbT1BUSU9OU10gW0NPTkZJRyBbLi4uXV0iCisJZWNobyAiICAt
aCAgICBkaXNwbGF5IHRoaXMgaGVscCB0ZXh0IgorCWVjaG8gIiAgLW0gICAgb25seSBtZXJnZSB0
aGUgZnJhZ21lbnRzLCBkbyBub3QgZXhlY3V0ZSB0aGUgbWFrZSBjb21tYW5kIgorCWVjaG8gIiAg
LW4gICAgdXNlIGFsbG5vY29uZmlnIGluc3RlYWQgb2YgYWxsZGVmY29uZmlnIgorCWVjaG8gIiAg
LXIgICAgbGlzdCByZWR1bmRhbnQgZW50cmllcyB3aGVuIG1lcmdpbmcgZnJhZ21lbnRzIgorCWVj
aG8gIiAgLXkgICAgbWFrZSBidWlsdGluIGhhdmUgcHJlY2VkZW5jZSBvdmVyIG1vZHVsZXMiCisJ
ZWNobyAiICAtTyAgICBkaXIgdG8gcHV0IGdlbmVyYXRlZCBvdXRwdXQgZmlsZXMuICBDb25zaWRl
ciBzZXR0aW5nIFwkS0NPTkZJR19DT05GSUcgaW5zdGVhZC4iCisJZWNobworCWVjaG8gIlVzZWQg
cHJlZml4OiAnJENPTkZJR19QUkVGSVgnLiBZb3UgY2FuIHJlZGVmaW5lIGl0IHdpdGggXCRDT05G
SUdfIGVudmlyb25tZW50IHZhcmlhYmxlLiIKK30KKworUlVOTUFLRT10cnVlCitBTExUQVJHRVQ9
YWxsZGVmY29uZmlnCitXQVJOUkVEVU49ZmFsc2UKK0JVSUxUSU49ZmFsc2UKK09VVFBVVD0uCitD
T05GSUdfUFJFRklYPSR7Q09ORklHXy1DT05GSUdffQorCit3aGlsZSB0cnVlOyBkbworCWNhc2Ug
JDEgaW4KKwkiLW4iKQorCQlBTExUQVJHRVQ9YWxsbm9jb25maWcKKwkJc2hpZnQKKwkJY29udGlu
dWUKKwkJOzsKKwkiLW0iKQorCQlSVU5NQUtFPWZhbHNlCisJCXNoaWZ0CisJCWNvbnRpbnVlCisJ
CTs7CisJIi1oIikKKwkJdXNhZ2UKKwkJZXhpdAorCQk7OworCSItciIpCisJCVdBUk5SRURVTj10
cnVlCisJCXNoaWZ0CisJCWNvbnRpbnVlCisJCTs7CisJIi15IikKKwkJQlVJTFRJTj10cnVlCisJ
CXNoaWZ0CisJCWNvbnRpbnVlCisJCTs7CisJIi1PIikKKwkJaWYgWyAtZCAkMiBdO3RoZW4KKwkJ
CU9VVFBVVD0kKGVjaG8gJDIgfCBzZWQgJ3MvXC8qJC8vJykKKwkJZWxzZQorCQkJZWNobyAib3V0
cHV0IGRpcmVjdG9yeSAkMiBkb2VzIG5vdCBleGlzdCIgMT4mMgorCQkJZXhpdCAxCisJCWZpCisJ
CXNoaWZ0IDIKKwkJY29udGludWUKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKK2Rv
bmUKKworaWYgWyAiJCMiIC1sdCAxIF0gOyB0aGVuCisJdXNhZ2UKKwlleGl0CitmaQorCitpZiBb
IC16ICIkS0NPTkZJR19DT05GSUciIF07IHRoZW4KKwlpZiBbICIkT1VUUFVUIiAhPSAuIF07IHRo
ZW4KKwkJS0NPTkZJR19DT05GSUc9JChyZWFkbGluayAtbSAtLSAiJE9VVFBVVC8uY29uZmlnIikK
KwllbHNlCisJCUtDT05GSUdfQ09ORklHPS5jb25maWcKKwlmaQorZmkKKworSU5JVEZJTEU9JDEK
K3NoaWZ0OworCitpZiBbICEgLXIgIiRJTklURklMRSIgXTsgdGhlbgorCWVjaG8gIlRoZSBiYXNl
IGZpbGUgJyRJTklURklMRScgZG9lcyBub3QgZXhpc3QuICBFeGl0LiIgPiYyCisJZXhpdCAxCitm
aQorCitNRVJHRV9MSVNUPSQqCitTRURfQ09ORklHX0VYUDE9InMvXlwoJHtDT05GSUdfUFJFRklY
fVthLXpBLVowLTlfXSpcKT0uKi9cMS9wIgorU0VEX0NPTkZJR19FWFAyPSJzL14jIFwoJHtDT05G
SUdfUFJFRklYfVthLXpBLVowLTlfXSpcKSBpcyBub3Qgc2V0JC9cMS9wIgorCitUTVBfRklMRT0k
KG1rdGVtcCAuLy50bXAuY29uZmlnLlhYWFhYWFhYWFgpCitNRVJHRV9GSUxFPSQobWt0ZW1wIC4v
Lm1lcmdlX3RtcC5jb25maWcuWFhYWFhYWFhYWCkKKworZWNobyAiVXNpbmcgJElOSVRGSUxFIGFz
IGJhc2UiCitjYXQgJElOSVRGSUxFID4gJFRNUF9GSUxFCisKKyMgTWVyZ2UgZmlsZXMsIHByaW50
aW5nIHdhcm5pbmdzIG9uIG92ZXJyaWRkZW4gdmFsdWVzCitmb3IgT1JJR19NRVJHRV9GSUxFIGlu
ICRNRVJHRV9MSVNUIDsgZG8KKwllY2hvICJNZXJnaW5nICRPUklHX01FUkdFX0ZJTEUiCisJaWYg
WyAhIC1yICIkT1JJR19NRVJHRV9GSUxFIiBdOyB0aGVuCisJCWVjaG8gIlRoZSBtZXJnZSBmaWxl
ICckT1JJR19NRVJHRV9GSUxFJyBkb2VzIG5vdCBleGlzdC4gIEV4aXQuIiA+JjIKKwkJZXhpdCAx
CisJZmkKKwljYXQgJE9SSUdfTUVSR0VfRklMRSA+ICRNRVJHRV9GSUxFCisJQ0ZHX0xJU1Q9JChz
ZWQgLW4gLWUgIiRTRURfQ09ORklHX0VYUDEiIC1lICIkU0VEX0NPTkZJR19FWFAyIiAkTUVSR0Vf
RklMRSkKKworCWZvciBDRkcgaW4gJENGR19MSVNUIDsgZG8KKwkJZ3JlcCAtcSAtdyAkQ0ZHICRU
TVBfRklMRSB8fCBjb250aW51ZQorCQlQUkVWX1ZBTD0kKGdyZXAgLXcgJENGRyAkVE1QX0ZJTEUp
CisJCU5FV19WQUw9JChncmVwIC13ICRDRkcgJE1FUkdFX0ZJTEUpCisJCUJVSUxUSU5fRkxBRz1m
YWxzZQorCQlpZiBbICIkQlVJTFRJTiIgPSAidHJ1ZSIgXSAmJiBbICIke05FV19WQUwjQ09ORklH
Xyo9fSIgPSAibSIgXSAmJiBbICIke1BSRVZfVkFMI0NPTkZJR18qPX0iID0gInkiIF07IHRoZW4K
KwkJCWVjaG8gUHJldmlvdXMgIHZhbHVlOiAkUFJFVl9WQUwKKwkJCWVjaG8gTmV3IHZhbHVlOiAg
ICAgICAkTkVXX1ZBTAorCQkJZWNobyAteSBwYXNzZWQsIHdpbGwgbm90IGRlbW90ZSB5IHRvIG0K
KwkJCWVjaG8KKwkJCUJVSUxUSU5fRkxBRz10cnVlCisJCWVsaWYgWyAieCRQUkVWX1ZBTCIgIT0g
IngkTkVXX1ZBTCIgXSA7IHRoZW4KKwkJCWVjaG8gVmFsdWUgb2YgJENGRyBpcyByZWRlZmluZWQg
YnkgZnJhZ21lbnQgJE9SSUdfTUVSR0VfRklMRToKKwkJCWVjaG8gUHJldmlvdXMgIHZhbHVlOiAk
UFJFVl9WQUwKKwkJCWVjaG8gTmV3IHZhbHVlOiAgICAgICAkTkVXX1ZBTAorCQkJZWNobworCQll
bGlmIFsgIiRXQVJOUkVEVU4iID0gInRydWUiIF07IHRoZW4KKwkJCWVjaG8gVmFsdWUgb2YgJENG
RyBpcyByZWR1bmRhbnQgYnkgZnJhZ21lbnQgJE9SSUdfTUVSR0VfRklMRToKKwkJZmkKKwkJaWYg
WyAiJEJVSUxUSU5fRkxBRyIgPSAiZmFsc2UiIF07IHRoZW4KKwkJCXNlZCAtaSAiLyRDRkdbID1d
L2QiICRUTVBfRklMRQorCQllbHNlCisJCQlzZWQgLWkgIi8kQ0ZHWyA9XS9kIiAkTUVSR0VfRklM
RQorCQlmaQorCWRvbmUKKwljYXQgJE1FUkdFX0ZJTEUgPj4gJFRNUF9GSUxFCitkb25lCisKK2lm
IFsgIiRSVU5NQUtFIiA9ICJmYWxzZSIgXTsgdGhlbgorCWNwIC1UIC0tICIkVE1QX0ZJTEUiICIk
S0NPTkZJR19DT05GSUciCisJZWNobyAiIyIKKwllY2hvICIjIG1lcmdlZCBjb25maWd1cmF0aW9u
IHdyaXR0ZW4gdG8gJEtDT05GSUdfQ09ORklHIChuZWVkcyBtYWtlKSIKKwllY2hvICIjIgorCWNs
ZWFuX3VwCisJZXhpdAorZmkKKworIyBJZiB3ZSBoYXZlIGFuIG91dHB1dCBkaXIsIHNldHVwIHRo
ZSBPPSBhcmd1bWVudCwgb3RoZXJ3aXNlIGxlYXZlCisjIGl0IGJsYW5rLCBzaW5jZSBPPS4gd2ls
bCBjcmVhdGUgYW4gdW5uZWNlc3NhcnkgLi9zb3VyY2Ugc29mdGxpbmsKK09VVFBVVF9BUkc9IiIK
K2lmIFsgIiRPVVRQVVQiICE9ICIuIiBdIDsgdGhlbgorCU9VVFBVVF9BUkc9Ik89JE9VVFBVVCIK
K2ZpCisKKworIyBVc2UgdGhlIG1lcmdlZCBmaWxlIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3I6
CisjIGFsbGRlZmNvbmZpZzogRmlsbHMgaW4gYW55IG1pc3Npbmcgc3ltYm9scyB3aXRoIEtjb25m
aWcgZGVmYXVsdAorIyBhbGxub2NvbmZpZzogRmlsbHMgaW4gYW55IG1pc3Npbmcgc3ltYm9scyB3
aXRoICMgQ09ORklHXyogaXMgbm90IHNldAorbWFrZSBLQ09ORklHX0FMTENPTkZJRz0kVE1QX0ZJ
TEUgJE9VVFBVVF9BUkcgJEFMTFRBUkdFVAorCisKKyMgQ2hlY2sgYWxsIHNwZWNpZmllZCBjb25m
aWcgdmFsdWVzIHRvb2sgKG1pZ2h0IGhhdmUgbWlzc2VkLWRlcGVuZGVuY3kgaXNzdWVzKQorZm9y
IENGRyBpbiAkKHNlZCAtbiAtZSAiJFNFRF9DT05GSUdfRVhQMSIgLWUgIiRTRURfQ09ORklHX0VY
UDIiICRUTVBfRklMRSk7IGRvCisKKwlSRVFVRVNURURfVkFMPSQoZ3JlcCAtdyAtZSAiJENGRyIg
JFRNUF9GSUxFKQorCUFDVFVBTF9WQUw9JChncmVwIC13IC1lICIkQ0ZHIiAiJEtDT05GSUdfQ09O
RklHIikKKwlpZiBbICJ4JFJFUVVFU1RFRF9WQUwiICE9ICJ4JEFDVFVBTF9WQUwiIF0gOyB0aGVu
CisJCWVjaG8gIlZhbHVlIHJlcXVlc3RlZCBmb3IgJENGRyBub3QgaW4gZmluYWwgLmNvbmZpZyIK
KwkJZWNobyAiUmVxdWVzdGVkIHZhbHVlOiAgJFJFUVVFU1RFRF9WQUwiCisJCWVjaG8gIkFjdHVh
bCB2YWx1ZTogICAgICRBQ1RVQUxfVkFMIgorCQllY2hvICIiCisJZmkKK2RvbmUKKworY2xlYW5f
dXAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9uY29uZi1jZmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMC4uMDAxNTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNv
bmYtY2ZnLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMAorCitQS0c9Im5jdXJzZXN3IG1lbnV3IHBhbmVsdyIKK1BLRzI9Im5j
dXJzZXMgbWVudSBwYW5lbCIKKworaWYgWyAtbiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBd
OyB0aGVuCisJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHOyB0aGVuCisJCWVjaG8gY2ZsYWdz
PVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cpXCIKKwkJZWNobyBsaWJzPVwiJChwa2ctY29u
ZmlnIC0tbGlicyAkUEtHKVwiCisJCWV4aXQgMAorCWZpCisKKwlpZiBwa2ctY29uZmlnIC0tZXhp
c3RzICRQS0cyOyB0aGVuCisJCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQ
S0cyKVwiCisJCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCIKKwkJZXhp
dCAwCisJZmkKK2ZpCisKKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4gY2FzZSBwa2ctY29u
ZmlnIGlzIG5vdCBpbnN0YWxsZWQuCisjIChFdmVuIGlmIGl0IGlzIGluc3RhbGxlZCwgc29tZSBk
aXN0cmlidXRpb25zIHN1Y2ggYXMgb3BlblNVU0UgY2Fubm90CisjIGZpbmQgbmN1cnNlcyBieSBw
a2ctY29uZmlnLikKK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0
aGVuCisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3
XCIKKwllY2hvIGxpYnM9XCItbG5jdXJzZXN3IC1sbWVudXcgLWxwYW5lbHdcIgorCWV4aXQgMAor
ZmkKKworaWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy9uY3Vyc2VzLmggXTsgdGhlbgorCWVj
aG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzXCIKKwllY2hv
IGxpYnM9XCItbG5jdXJzZXMgLWxtZW51IC1scGFuZWxcIgorCWV4aXQgMAorZmkKKworaWYgWyAt
ZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy5oIF07IHRoZW4KKwllY2hvIGNmbGFncz1cIi1EX0dOVV9T
T1VSQ0VcIgorCWVjaG8gbGlicz1cIi1sbmN1cnNlcyAtbG1lbnUgLWxwYW5lbFwiCisJZXhpdCAw
CitmaQorCitlY2hvID4mMiAiKiIKK2VjaG8gPiYyICIqIFVuYWJsZSB0byBmaW5kIHRoZSBuY3Vy
c2VzIHBhY2thZ2UuIgorZWNobyA+JjIgIiogSW5zdGFsbCBuY3Vyc2VzIChuY3Vyc2VzLWRldmVs
IG9yIGxpYm5jdXJzZXMtZGV2IgorZWNobyA+JjIgIiogZGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJp
YnV0aW9uKS4iCitlY2hvID4mMiAiKiIKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9uY29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWZlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBw
b3J0L2tjb25maWcubmV3L25jb25mLmMKQEAgLTAsMCArMSwxNTU1IEBACisvLyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIgVHph
Y2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBtZW51Y29u
ZmlnLgorICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5k
aWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUg
ImxrYy5oIgorI2luY2x1ZGUgIm5jb25mLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworc3RhdGlj
IGNvbnN0IGNoYXIgbmNvbmZfZ2xvYmFsX2hlbHBbXSA9CisiSGVscCB3aW5kb3dzXG4iCisiLS0t
LS0tLS0tLS0tXG4iCisibyAgR2xvYmFsIGhlbHA6ICBVbmxlc3MgaW4gYSBkYXRhIGVudHJ5IHdp
bmRvdywgcHJlc3NpbmcgPEYxPiB3aWxsIGdpdmUgXG4iCisiICAgeW91IHRoZSBnbG9iYWwgaGVs
cCB3aW5kb3csIHdoaWNoIHlvdSBhcmUganVzdCByZWFkaW5nLlxuIgorIlxuIgorIm8gIEEgc2hv
cnQgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIGhlbHAgaXMgYXZhaWxhYmxlIGJ5IHByZXNzaW5nIDxG
Mz4uXG4iCisiXG4iCisibyAgTG9jYWwgaGVscDogIFRvIGdldCBoZWxwIHJlbGF0ZWQgdG8gdGhl
IGN1cnJlbnQgbWVudSBlbnRyeSwgdXNlIGFueVxuIgorIiAgIG9mIDw/PiA8aD4sIG9yIGlmIGlu
IGEgZGF0YSBlbnRyeSB3aW5kb3cgdGhlbiBwcmVzcyA8RjE+LlxuIgorIlxuIgorIlxuIgorIk1l
bnUgZW50cmllc1xuIgorIi0tLS0tLS0tLS0tLVxuIgorIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91
IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIgorImJ1aWxk
LiAgS2VybmVsIGZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBv
ciByZW1vdmVkLlxuIgorIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVj
aW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzLlxuIgorIlxuIgorIk1lbnUgZW50cmllcyBiZWdp
bm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iCisi
ICBbIF0gIGNhbiBiZSBidWlsdCBpbiBvciByZW1vdmVkXG4iCisiICA8ID4gIGNhbiBiZSBidWls
dCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3ZlZFxuIgorIiAgeyB9ICBjYW4gYmUgYnVpbHQgaW4g
b3IgbW9kdWxhcml6ZWQsIGFyZSBzZWxlY3RlZCBieSBhbm90aGVyIGZlYXR1cmVcbiIKKyIgIC0g
LSAgYXJlIHNlbGVjdGVkIGJ5IGFub3RoZXIgZmVhdHVyZVxuIgorIiAgWFhYICBjYW5ub3QgYmUg
c2VsZWN0ZWQuICBTeW1ib2wgSW5mbyA8RjI+IHRlbGxzIHlvdSB3aHkuXG4iCisiKiwgTSBvciB3
aGl0ZXNwYWNlIGluc2lkZSBicmFjZXMgbWVhbnMgdG8gYnVpbGQgaW4sIGJ1aWxkIGFzIGEgbW9k
dWxlXG4iCisib3IgdG8gZXhjbHVkZSB0aGUgZmVhdHVyZSByZXNwZWN0aXZlbHkuXG4iCisiXG4i
CisiVG8gY2hhbmdlIGFueSBvZiB0aGVzZSBmZWF0dXJlcywgaGlnaGxpZ2h0IGl0IHdpdGggdGhl
IG1vdmVtZW50IGtleXNcbiIKKyJsaXN0ZWQgYmVsb3cgYW5kIHByZXNzIDx5PiB0byBidWlsZCBp
dCBpbiwgPG0+IHRvIG1ha2UgaXQgYSBtb2R1bGUgb3JcbiIKKyI8bj4gdG8gcmVtb3ZlIGl0LiAg
WW91IG1heSBwcmVzcyB0aGUgPFNwYWNlPiBrZXkgdG8gY3ljbGUgdGhyb3VnaCB0aGVcbiIKKyJh
dmFpbGFibGUgb3B0aW9ucy5cbiIKKyJcbiIKKyJBIHRyYWlsaW5nIFwiLS0tPlwiIGRlc2lnbmF0
ZXMgYSBzdWJtZW51LCBhIHRyYWlsaW5nIFwiLS0tLVwiIGFuXG4iCisiZW1wdHkgc3VibWVudS5c
biIKKyJcbiIKKyJNZW51IG5hdmlnYXRpb24ga2V5c1xuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJM
aW5ld2lzZSB1cCAgICAgICAgICAgICAgICAgPFVwPlxuIgorIkxpbmV3aXNlIGRvd24gICAgICAg
ICAgICAgICA8RG93bj5cbiIKKyJQYWdld2lzZSB1cCAgICAgICAgICAgICAgICAgPFBhZ2UgVXA+
XG4iCisiUGFnZXdpc2UgZG93biAgICAgICAgICAgICAgIDxQYWdlIERvd24+XG4iCisiRmlyc3Qg
ZW50cnkgICAgICAgICAgICAgICAgIDxIb21lPlxuIgorIkxhc3QgZW50cnkgICAgICAgICAgICAg
ICAgICA8RW5kPlxuIgorIkVudGVyIGEgc3VibWVudSAgICAgICAgICAgICA8UmlnaHQ+ICA8RW50
ZXI+XG4iCisiR28gYmFjayB0byBwYXJlbnQgbWVudSAgICAgIDxMZWZ0PiAgIDxFc2M+ICA8RjU+
XG4iCisiQ2xvc2UgYSBoZWxwIHdpbmRvdyAgICAgICAgIDxFbnRlcj4gIDxFc2M+ICA8RjU+XG4i
CisiQ2xvc2UgZW50cnkgd2luZG93LCBhcHBseSAgIDxFbnRlcj5cbiIKKyJDbG9zZSBlbnRyeSB3
aW5kb3csIGZvcmdldCAgPEVzYz4gIDxGNT5cbiIKKyJTdGFydCBpbmNyZW1lbnRhbCwgY2FzZS1p
bnNlbnNpdGl2ZSBzZWFyY2ggZm9yIFNUUklORyBpbiBtZW51IGVudHJpZXMsXG4iCisiICAgIG5v
IHJlZ2V4IHN1cHBvcnQsIFNUUklORyBpcyBkaXNwbGF5ZWQgaW4gdXBwZXIgbGVmdCBjb3JuZXJc
biIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+U1RSSU5HXG4iCisiICAgIFJlbW92
ZSBsYXN0IGNoYXJhY3RlciAgIDxCYWNrc3BhY2U+XG4iCisiICAgIEp1bXAgdG8gbmV4dCBoaXQg
ICAgICAgIDxEb3duPlxuIgorIiAgICBKdW1wIHRvIHByZXZpb3VzIGhpdCAgICA8VXA+XG4iCisi
RXhpdCBtZW51IHNlYXJjaCBtb2RlICAgICAgIDwvPiAgPEVzYz5cbiIKKyJTZWFyY2ggZm9yIGNv
bmZpZ3VyYXRpb24gdmFyaWFibGVzIHdpdGggb3Igd2l0aG91dCBsZWFkaW5nIENPTkZJR19cbiIK
KyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEY4PlJlZ0V4cHI8RW50ZXI+XG4iCisiVmVy
Ym9zZSBzZWFyY2ggaGVscCAgICAgICAgIDxGOD48RjE+XG4iCisiLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgor
IlxuIgorIlVubGVzcyBpbiBhIGRhdGEgZW50cnkgd2luZG93LCBrZXkgPDE+IG1heSBiZSB1c2Vk
IGluc3RlYWQgb2YgPEYxPixcbiIKKyI8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4iCisiXG4i
CisiXG4iCisiUmFkaW9saXN0IChDaG9pY2UgbGlzdClcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIgorIlVzZSB0aGUgbW92ZW1lbnQga2V5cyBsaXN0ZWQgYWJvdmUgdG8gc2VsZWN0IHRo
ZSBvcHRpb24geW91IHdpc2ggdG8gc2V0XG4iCisiYW5kIHByZXNzIDxTcGFjZT4uXG4iCisiXG4i
CisiXG4iCisiRGF0YSBlbnRyeVxuIgorIi0tLS0tLS0tLS1cbiIKKyJFbnRlciB0aGUgcmVxdWVz
dGVkIGluZm9ybWF0aW9uIGFuZCBwcmVzcyA8RW50ZXI+LiAgSGV4YWRlY2ltYWwgdmFsdWVzXG4i
CisibWF5IGJlIGVudGVyZWQgd2l0aG91dCB0aGUgXCIweFwiIHByZWZpeC5cbiIKKyJcbiIKKyJc
biIKKyJUZXh0IEJveCAoSGVscCBXaW5kb3cpXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
IgorIlVzZSBtb3ZlbWVudCBrZXlzIGFzIGxpc3RlZCBpbiB0YWJsZSBhYm92ZS5cbiIKKyJcbiIK
KyJQcmVzcyBhbnkgb2YgPEVudGVyPiA8RXNjPiA8cT4gPEY1PiA8Rjk+IHRvIGV4aXQuXG4iCisi
XG4iCisiXG4iCisiQWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXNcbiIKKyItLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIm5jb25maWcgc3VwcG9ydHMgc3dpdGNoaW5nIGJldHdl
ZW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxuIgorIlByZXNzIDxGNj4gdG8gc2F2ZSB5b3Vy
IGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFByZXNzIDxGNz4gYW5kIGVudGVyXG4iCisiYSBmaWxl
IG5hbWUgdG8gbG9hZCBhIHByZXZpb3VzbHkgc2F2ZWQgY29uZmlndXJhdGlvbi5cbiIKKyJcbiIK
KyJcbiIKKyJUZXJtaW5hbCBjb25maWd1cmF0aW9uXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIgorIklmIHlvdSB1c2UgbmNvbmZpZyBpbiBhIHh0ZXJtIHdpbmRvdywgbWFrZSBzdXJlIHlv
dXIgVEVSTSBlbnZpcm9ubWVudFxuIgorInZhcmlhYmxlIHNwZWNpZmllcyBhIHRlcm1pbmFsIGNv
bmZpZ3VyYXRpb24gd2hpY2ggc3VwcG9ydHMgYXQgbGVhc3RcbiIKKyIxNiBjb2xvcnMuICBPdGhl
cndpc2UgbmNvbmZpZyB3aWxsIGxvb2sgcmF0aGVyIGJhZC5cbiIKKyJcbiIKKyJJZiB0aGUgXCJz
dHR5IHNpemVcIiBjb21tYW5kIHJlcG9ydHMgdGhlIGN1cnJlbnQgdGVybWluYWxzaXplIGNvcnJl
Y3RseSxcbiIKKyJuY29uZmlnIHdpbGwgYWRhcHQgdG8gc2l6ZXMgbGFyZ2VyIHRoYW4gdGhlIHRy
YWRpdGlvbmFsIDgweDI1IFwic3RhbmRhcmRcIlxuIgorImFuZCBkaXNwbGF5IGxvbmdlciBtZW51
cyBwcm9wZXJseS5cbiIKKyJcbiIKKyJcbiIKKyJTaW5nbGUgbWVudSBtb2RlXG4iCisiLS0tLS0t
LS0tLS0tLS0tLVxuIgorIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2YgdGhlIG1lbnUgZW50
cmllcyBsaXN0ZWQgaW4gYSBzaW5nbGUgbWVudSxcbiIKKyJyYXRoZXIgdGhhbiB0aGUgZGVmYXVs
dCBtdWx0aW1lbnUgaGllcmFyY2h5LCBydW4gbmNvbmZpZyB3aXRoXG4iCisiTkNPTkZJR19NT0RF
IGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5nbGVfbWVudS4gIEV4YW1wbGU6XG4iCisi
XG4iCisibWFrZSBOQ09ORklHX01PREU9c2luZ2xlX21lbnUgbmNvbmZpZ1xuIgorIlxuIgorIjxF
bnRlcj4gd2lsbCB0aGVuIHVuZm9sZCB0aGUgYXBwcm9wcmlhdGUgY2F0ZWdvcnksIG9yIGZvbGQg
aXQgaWYgaXRcbiIKKyJpcyBhbHJlYWR5IHVuZm9sZGVkLiAgRm9sZGVkIG1lbnUgZW50cmllcyB3
aWxsIGJlIGRlc2lnbmF0ZWQgYnkgYVxuIgorImxlYWRpbmcgXCIrKz5cIiBhbmQgdW5mb2xkZWQg
ZW50cmllcyBieSBhIGxlYWRpbmcgXCItLT5cIi5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgdGhpcyBt
b2RlIGNhbiBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZSB0aGFuXG4i
CisidGhlIGRlZmF1bHQgbW9kZSwgZXNwZWNpYWxseSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiB1
bmZvbGRlZCBzdWJtZW51cy5cbiIKKyJcbiIsCittZW51X25vX2ZfaW5zdHJ1Y3Rpb25zW10gPQor
IkxlZ2VuZDogIFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9k
dWxlIGNhcGFibGUuXG4iCisiU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgYSB0cmFpbGluZyBc
Ii0tLT5cIiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiIKKyJcbiIKKyJVc2UgdGhlIGZvbGxv
d2luZyBrZXlzIHRvIG5hdmlnYXRlIHRoZSBtZW51czpcbiIKKyJNb3ZlIHVwIG9yIGRvd24gd2l0
aCA8VXA+IGFuZCA8RG93bj4uXG4iCisiRW50ZXIgYSBzdWJtZW51IHdpdGggPEVudGVyPiBvciA8
UmlnaHQ+LlxuIgorIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJlbnQgbWVudSB3aXRoIDxFc2M+
IG9yIDxMZWZ0Pi5cbiIKKyJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxuPiBleGNsdWRlcywgPG0+
IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxuIgorIlByZXNzaW5nIDxTcGFjZT4gY3ljbGVzIHRocm91
Z2ggdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuIgorIlRvIHNlYXJjaCBmb3IgbWVudSBlbnRyaWVz
IHByZXNzIDwvPi5cbiIKKyI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBjdXJyZW50IHdpbmRvdy5c
biIKKyJcbiIKKyJZb3UgZG8gbm90IGhhdmUgZnVuY3Rpb24ga2V5cyBzdXBwb3J0LlxuIgorIlBy
ZXNzIDwxPiBpbnN0ZWFkIG9mIDxGMT4sIDwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiIKKyJG
b3IgdmVyYm9zZSBnbG9iYWwgaGVscCB1c2Uga2V5IDwxPi5cbiIKKyJGb3IgaGVscCByZWxhdGVk
IHRvIHRoZSBjdXJyZW50IG1lbnUgZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiIsCittZW51X2lu
c3RydWN0aW9uc1tdID0KKyJMZWdlbmQ6ICBbKl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+
IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxlLlxuIgorIlN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVk
IGJ5IGEgdHJhaWxpbmcgXCItLS0+XCIsIGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iCisiXG4i
CisiVXNlIHRoZSBmb2xsb3dpbmcga2V5cyB0byBuYXZpZ2F0ZSB0aGUgbWVudXM6XG4iCisiTW92
ZSB1cCBvciBkb3duIHdpdGggPFVwPiBvciA8RG93bj4uXG4iCisiRW50ZXIgYSBzdWJtZW51IHdp
dGggPEVudGVyPiBvciA8UmlnaHQ+LlxuIgorIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJlbnQg
bWVudSB3aXRoIDxFc2M+IG9yIDxMZWZ0Pi5cbiIKKyJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxu
PiBleGNsdWRlcywgPG0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxuIgorIlByZXNzaW5nIDxTcGFj
ZT4gY3ljbGVzIHRocm91Z2ggdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuIgorIlRvIHNlYXJjaCBm
b3IgbWVudSBlbnRyaWVzIHByZXNzIDwvPi5cbiIKKyI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBj
dXJyZW50IHdpbmRvdy5cbiIKKyJcbiIKKyJQcmVzc2luZyA8MT4gbWF5IGJlIHVzZWQgaW5zdGVh
ZCBvZiA8RjE+LCA8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4iCisiRm9yIHZlcmJvc2UgZ2xv
YmFsIGhlbHAgcHJlc3MgPEYxPi5cbiIKKyJGb3IgaGVscCByZWxhdGVkIHRvIHRoZSBjdXJyZW50
IG1lbnUgZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiIsCityYWRpb2xpc3RfaW5zdHJ1Y3Rpb25z
W10gPQorIlByZXNzIDxVcD4sIDxEb3duPiwgPEhvbWU+IG9yIDxFbmQ+IHRvIG5hdmlnYXRlIGEg
cmFkaW9saXN0LCBzZWxlY3RcbiIKKyJ3aXRoIDxTcGFjZT4uXG4iCisiRm9yIGhlbHAgcmVsYXRl
ZCB0byB0aGUgY3VycmVudCBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIgorIkZvciBnbG9iYWwg
aGVscCBwcmVzcyA8RjE+LlxuIiwKK2lucHV0Ym94X2luc3RydWN0aW9uc19pbnRbXSA9CisiUGxl
YXNlIGVudGVyIGEgZGVjaW1hbCB2YWx1ZS5cbiIKKyJGcmFjdGlvbnMgd2lsbCBub3QgYmUgYWNj
ZXB0ZWQuXG4iCisiUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsCitp
bnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQorIlBsZWFzZSBlbnRlciBhIGhleGFkZWNpbWFs
IHZhbHVlLlxuIgorIlByZXNzIDxFbnRlcj4gdG8gYXBwbHksIDxFc2M+IHRvIGNhbmNlbC4iLAor
aW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZ1tdID0KKyJQbGVhc2UgZW50ZXIgYSBzdHJpbmcg
dmFsdWUuXG4iCisiUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsCitz
ZXRtb2RfdGV4dFtdID0KKyJUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiBhbm90aGVyIGZlYXR1cmUg
d2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhXG4iCisibW9kdWxlLiAgQXMgYSByZXN1bHQs
IHRoZSBjdXJyZW50IGZlYXR1cmUgd2lsbCBiZSBidWlsdCBhcyBhIG1vZHVsZSB0b28uIiwKK2xv
YWRfY29uZmlnX3RleHRbXSA9CisiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24g
ZmlsZSB5b3Ugd2lzaCB0byBsb2FkLlxuIgorIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0byByZXN0
b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdSBsYXN0XG4iCisicmV0cmlldmVkLiAgTGVhdmUgZW1w
dHkgdG8gYWJvcnQuIiwKK2xvYWRfY29uZmlnX2hlbHBbXSA9CisiRm9yIHZhcmlvdXMgcmVhc29u
cywgb25lIG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJhbCBkaWZmZXJlbnRcbiIKKyJjb25maWd1cmF0
aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKKyJcbiIKKyJJZiB5b3UgaGF2
ZSBzYXZlZCBhIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gaW4gYSBmaWxlIG90aGVyIHRoYW4gdGhl
XG4iCisiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3Ug
dG8gbG9hZCBhbmQgbW9kaWZ5XG4iCisidGhhdCBjb25maWd1cmF0aW9uLlxuIgorIlxuIgorIkxl
YXZlIGVtcHR5IHRvIGFib3J0LlxuIiwKK3NhdmVfY29uZmlnX3RleHRbXSA9CisiRW50ZXIgYSBm
aWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNhdmVkXG4iCisi
YXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgZW1wdHkgdG8gYWJvcnQuIiwKK3NhdmVfY29uZmlnX2hl
bHBbXSA9CisiRm9yIHZhcmlvdXMgcmVhc29ucywgb25lIG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJh
bCBkaWZmZXJlbnRcbiIKKyJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFj
aGluZS5cbiIKKyJcbiIKKyJFbnRlcmluZyBhIGZpbGUgbmFtZSBoZXJlIHdpbGwgYWxsb3cgeW91
IHRvIGxhdGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKKyJhbmQgdXNlIHRoZSBjdXJyZW50IGNvbmZp
Z3VyYXRpb24gYXMgYW4gYWx0ZXJuYXRlIHRvIHdoYXRldmVyXG4iCisiY29uZmlndXJhdGlvbiBv
cHRpb25zIHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5cbiIKKyJcbiIKKyJMZWF2ZSBl
bXB0eSB0byBhYm9ydC5cbiIsCitzZWFyY2hfaGVscFtdID0KKyJTZWFyY2ggZm9yIHN5bWJvbHMg
KGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMgQ09ORklHXyopIGFuZCBkaXNwbGF5XG4iCisi
dGhlaXIgcmVsYXRpb25zLiAgUmVndWxhciBleHByZXNzaW9ucyBhcmUgc3VwcG9ydGVkLlxuIgor
IkV4YW1wbGU6ICBTZWFyY2ggZm9yIFwiXkZPT1wiLlxuIgorIlJlc3VsdDpcbiIKKyItLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIgorIlN5bWJvbDogRk9PIFsgPSBtXVxuIgorIlByb21wdDogRm9vIGJ1cyBpcyB1c2VkIHRv
IGRyaXZlIHRoZSBiYXIgSFdcbiIKKyJEZWZpbmVkIGF0IGRyaXZlcnMvcGNpL0tjb25maWc6NDdc
biIKKyJEZXBlbmRzIG9uOiBYODZfTE9DQUxfQVBJQyAmJiBYODZfSU9fQVBJQyB8fCBJQTY0XG4i
CisiTG9jYXRpb246XG4iCisiICAtPiBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElT
QSlcbiIKKyIgICAgLT4gUENJIHN1cHBvcnQgKFBDSSBbID0geV0pXG4iCisiICAgICAgLT4gUENJ
IGFjY2VzcyBtb2RlICg8Y2hvaWNlPiBbID0geV0pXG4iCisiU2VsZWN0czogTElCQ1JDMzJcbiIK
KyJTZWxlY3RlZCBieTogQkFSXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJvICBUaGUgbGluZSAnUHJvbXB0
Oicgc2hvd3MgdGhlIHRleHQgZGlzcGxheWVkIGZvciB0aGlzIHN5bWJvbCBpblxuIgorIiAgIHRo
ZSBtZW51IGhpZXJhcmNoeS5cbiIKKyJvICBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQg
d2hhdCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbCBpc1xuIgorIiAgIGRlZmluZWQuXG4i
CisibyAgVGhlICdEZXBlbmRzIG9uOicgbGluZSBsaXN0cyBzeW1ib2xzIHRoYXQgbmVlZCB0byBi
ZSBkZWZpbmVkIGZvclxuIgorIiAgIHRoaXMgc3ltYm9sIHRvIGJlIHZpc2libGUgYW5kIHNlbGVj
dGFibGUgaW4gdGhlIG1lbnUuXG4iCisibyAgVGhlICdMb2NhdGlvbjonIGxpbmVzIHRlbGwsIHdo
ZXJlIGluIHRoZSBtZW51IHN0cnVjdHVyZSB0aGlzIHN5bWJvbFxuIgorIiAgIGlzIGxvY2F0ZWQu
ICBBIGxvY2F0aW9uIGZvbGxvd2VkIGJ5IGEgWyA9IHldIGluZGljYXRlcyB0aGF0IHRoaXMgaXNc
biIKKyIgICBhIHNlbGVjdGFibGUgbWVudSBpdGVtLCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMg
ZGlzcGxheWVkIGluc2lkZVxuIgorIiAgIGJyYWNrZXRzLlxuIgorIm8gIFRoZSAnU2VsZWN0czon
IGxpbmUgdGVsbHMsIHdoYXQgc3ltYm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZFxu
IgorIiAgIGlmIHRoaXMgc3ltYm9sIGlzIHNlbGVjdGVkICh5IG9yIG0pLlxuIgorIm8gIFRoZSAn
U2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVkIHRoaXMgc3lt
Ym9sLlxuIgorIlxuIgorIk9ubHkgcmVsZXZhbnQgbGluZXMgYXJlIHNob3duLlxuIgorIlxuXG4i
CisiU2VhcmNoIGV4YW1wbGVzOlxuIgorIlVTQiAgPT4gZmluZCBhbGwgc3ltYm9scyBjb250YWlu
aW5nIFVTQlxuIgorIl5VU0IgPT4gZmluZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxu
IgorIlVTQiQgPT4gZmluZCBhbGwgc3ltYm9scyBlbmRpbmcgd2l0aCBVU0JcbiIKKyJcbiI7CisK
K3N0cnVjdCBtaXRlbSB7CisJY2hhciBzdHJbMjU2XTsKKwljaGFyIHRhZzsKKwl2b2lkICp1c3Jw
dHI7CisJaW50IGlzX3Zpc2libGU7Cit9OworCisjZGVmaW5lIE1BWF9NRU5VX0lURU1TIDQwOTYK
K3N0YXRpYyBpbnQgc2hvd19hbGxfaXRlbXM7CitzdGF0aWMgaW50IGluZGVudDsKK3N0YXRpYyBz
dHJ1Y3QgbWVudSAqY3VycmVudF9tZW51Oworc3RhdGljIGludCBjaGlsZF9jb3VudDsKK3N0YXRp
YyBpbnQgc2luZ2xlX21lbnVfbW9kZTsKKy8qIHRoZSB3aW5kb3cgaW4gd2hpY2ggYWxsIGluZm9y
bWF0aW9uIGFwcGVhcnMgKi8KK3N0YXRpYyBXSU5ET1cgKm1haW5fd2luZG93OworLyogdGhlIGxh
cmdlc3Qgc2l6ZSBvZiB0aGUgbWVudSB3aW5kb3cgKi8KK3N0YXRpYyBpbnQgbXdpbl9tYXhfbGlu
ZXM7CitzdGF0aWMgaW50IG13aW5fbWF4X2NvbHM7CisvKiB0aGUgd2luZG93IGluIHdoaWNoIHdl
IHNob3cgb3B0aW9uIGJ1dHRvbnMgKi8KK3N0YXRpYyBNRU5VICpjdXJzZXNfbWVudTsKK3N0YXRp
YyBJVEVNICpjdXJzZXNfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107CitzdGF0aWMgc3RydWN0
IG1pdGVtIGtfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107CitzdGF0aWMgaW50IGl0ZW1zX251
bTsKK3N0YXRpYyBpbnQgZ2xvYmFsX2V4aXQ7CisvKiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJ1
dHRvbiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gbWVudV9p
bnN0cnVjdGlvbnM7CisKK3N0YXRpYyBjaGFyICpkaWFsb2dfaW5wdXRfcmVzdWx0Oworc3RhdGlj
IGludCBkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbjsKKworc3RhdGljIHZvaWQgY29uZihzdHJ1Y3Qg
bWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7
CitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9p
ZCBjb25mX2xvYWQodm9pZCk7CitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7CitzdGF0aWMg
dm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIGludCBkb19leGl0KHZv
aWQpOworc3RhdGljIHZvaWQgc2V0dXBfd2luZG93cyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNlYXJj
aF9jb25mKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKCpmdW5jdGlvbl9rZXlfaGFuZGxlcl90KShp
bnQgKmtleSwgc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIHZvaWQgaGFuZGxlX2YxKGludCAq
a2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mMihp
bnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9pZCBoYW5kbGVf
ZjMoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGljIHZvaWQgaGFu
ZGxlX2Y0KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lk
IGhhbmRsZV9mNShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMg
dm9pZCBoYW5kbGVfZjYoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3Rh
dGljIHZvaWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsK
K3N0YXRpYyB2b2lkIGhhbmRsZV9mOChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRl
bSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjkoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50
X2l0ZW0pOworCitzdHJ1Y3QgZnVuY3Rpb25fa2V5cyB7CisJY29uc3QgY2hhciAqa2V5X3N0cjsK
Kwljb25zdCBjaGFyICpmdW5jOworCWZ1bmN0aW9uX2tleSBrZXk7CisJZnVuY3Rpb25fa2V5X2hh
bmRsZXJfdCBoYW5kbGVyOworfTsKKworc3RhdGljIGNvbnN0IGludCBmdW5jdGlvbl9rZXlzX251
bSA9IDk7CitzdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2tleXMgZnVuY3Rpb25fa2V5c1tdID0gewor
CXsKKwkJLmtleV9zdHIgPSAiRjEiLAorCQkuZnVuYyA9ICJIZWxwIiwKKwkJLmtleSA9IEZfSEVM
UCwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjEsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkYyIiwK
KwkJLmZ1bmMgPSAiU3ltSW5mbyIsCisJCS5rZXkgPSBGX1NZTUJPTCwKKwkJLmhhbmRsZXIgPSBo
YW5kbGVfZjIsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkYzIiwKKwkJLmZ1bmMgPSAiSGVscCAy
IiwKKwkJLmtleSA9IEZfSU5TVFMsCisJCS5oYW5kbGVyID0gaGFuZGxlX2YzLAorCX0sCisJewor
CQkua2V5X3N0ciA9ICJGNCIsCisJCS5mdW5jID0gIlNob3dBbGwiLAorCQkua2V5ID0gRl9DT05G
LAorCQkuaGFuZGxlciA9IGhhbmRsZV9mNCwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjUiLAor
CQkuZnVuYyA9ICJCYWNrIiwKKwkJLmtleSA9IEZfQkFDSywKKwkJLmhhbmRsZXIgPSBoYW5kbGVf
ZjUsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY2IiwKKwkJLmZ1bmMgPSAiU2F2ZSIsCisJCS5r
ZXkgPSBGX1NBVkUsCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y2LAorCX0sCisJeworCQkua2V5X3N0
ciA9ICJGNyIsCisJCS5mdW5jID0gIkxvYWQiLAorCQkua2V5ID0gRl9MT0FELAorCQkuaGFuZGxl
ciA9IGhhbmRsZV9mNywKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjgiLAorCQkuZnVuYyA9ICJT
eW1TZWFyY2giLAorCQkua2V5ID0gRl9TRUFSQ0gsCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y4LAor
CX0sCisJeworCQkua2V5X3N0ciA9ICJGOSIsCisJCS5mdW5jID0gIkV4aXQiLAorCQkua2V5ID0g
Rl9FWElULAorCQkuaGFuZGxlciA9IGhhbmRsZV9mOSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQg
cHJpbnRfZnVuY3Rpb25fbGluZSh2b2lkKQoreworCWludCBpOworCWludCBvZmZzZXQgPSAxOwor
CWNvbnN0IGludCBza2lwID0gMTsKKwlpbnQgbGluZXMgPSBnZXRtYXh5KHN0ZHNjcik7CisKKwlm
b3IgKGkgPSAwOyBpIDwgZnVuY3Rpb25fa2V5c19udW07IGkrKykgeworCQkodm9pZCkgd2F0dHJz
ZXQobWFpbl93aW5kb3csIGF0dHJpYnV0ZXNbRlVOQ1RJT05fSElHSExJR0hUXSk7CisJCW12d3By
aW50dyhtYWluX3dpbmRvdywgbGluZXMtMywgb2Zmc2V0LAorCQkJCSIlcyIsCisJCQkJZnVuY3Rp
b25fa2V5c1tpXS5rZXlfc3RyKTsKKwkJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRy
aWJ1dGVzW0ZVTkNUSU9OX1RFWFRdKTsKKwkJb2Zmc2V0ICs9IHN0cmxlbihmdW5jdGlvbl9rZXlz
W2ldLmtleV9zdHIpOworCQltdndwcmludHcobWFpbl93aW5kb3csIGxpbmVzLTMsCisJCQkJb2Zm
c2V0LCAiJXMiLAorCQkJCWZ1bmN0aW9uX2tleXNbaV0uZnVuYyk7CisJCW9mZnNldCArPSBzdHJs
ZW4oZnVuY3Rpb25fa2V5c1tpXS5mdW5jKSArIHNraXA7CisJfQorCSh2b2lkKSB3YXR0cnNldCht
YWluX3dpbmRvdywgYXR0cmlidXRlc1tOT1JNQUxdKTsKK30KKworLyogaGVscCAqLworc3RhdGlj
IHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQorewor
CXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywKKwkJCSJHbG9iYWwgaGVscCIsIG5jb25mX2ds
b2JhbF9oZWxwKTsKKwlyZXR1cm47Cit9CisKKy8qIHN5bWJvbGUgaGVscCAqLworc3RhdGljIHZv
aWQgaGFuZGxlX2YyKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCXNo
b3dfaGVscChjdXJyZW50X2l0ZW0pOworCXJldHVybjsKK30KKworLyogaW5zdHJ1Y3Rpb25zICov
CitzdGF0aWMgdm9pZCBoYW5kbGVfZjMoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0
ZW0pCit7CisJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJIlNob3J0IGhlbHAiLAor
CQkJY3VycmVudF9pbnN0cnVjdGlvbnMpOworCXJldHVybjsKK30KKworLyogY29uZmlnICovCitz
dGF0aWMgdm9pZCBoYW5kbGVfZjQoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0p
Cit7CisJaW50IHJlcyA9IGJ0bl9kaWFsb2cobWFpbl93aW5kb3csCisJCQkiU2hvdyBhbGwgc3lt
Ym9scz8iLAorCQkJMiwKKwkJCSIgICA8U2hvdyBBbGw+ICAgIiwKKwkJCSI8RG9uJ3Qgc2hvdyBh
bGw+Iik7CisJaWYgKHJlcyA9PSAwKQorCQlzaG93X2FsbF9pdGVtcyA9IDE7CisJZWxzZSBpZiAo
cmVzID09IDEpCisJCXNob3dfYWxsX2l0ZW1zID0gMDsKKworCXJldHVybjsKK30KKworLyogYmFj
ayAqLworc3RhdGljIHZvaWQgaGFuZGxlX2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9pdGVtKQoreworCSprZXkgPSBLRVlfTEVGVDsKKwlyZXR1cm47Cit9CisKKy8qIHNhdmUgKi8K
K3N0YXRpYyB2b2lkIGhhbmRsZV9mNihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRl
bSkKK3sKKwljb25mX3NhdmUoKTsKKwlyZXR1cm47Cit9CisKKy8qIGxvYWQgKi8KK3N0YXRpYyB2
b2lkIGhhbmRsZV9mNyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlj
b25mX2xvYWQoKTsKKwlyZXR1cm47Cit9CisKKy8qIHNlYXJjaCAqLworc3RhdGljIHZvaWQgaGFu
ZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCXNlYXJjaF9j
b25mKCk7CisJcmV0dXJuOworfQorCisvKiBleGl0ICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZjko
aW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJZG9fZXhpdCgpOworCXJl
dHVybjsKK30KKworLyogcmV0dXJuICE9IDAgdG8gaW5kaWNhdGUgdGhlIGtleSB3YXMgaGFuZGxl
cyAqLworc3RhdGljIGludCBwcm9jZXNzX3NwZWNpYWxfa2V5cyhpbnQgKmtleSwgc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJaW50IGk7CisKKwlpZiAoKmtleSA9PSBLRVlfUkVTSVpFKSB7CisJCXNl
dHVwX3dpbmRvd3MoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZ1bmN0
aW9uX2tleXNfbnVtOyBpKyspIHsKKwkJaWYgKCprZXkgPT0gS0VZX0YoZnVuY3Rpb25fa2V5c1tp
XS5rZXkpIHx8CisJCSAgICAqa2V5ID09ICcwJyArIGZ1bmN0aW9uX2tleXNbaV0ua2V5KXsKKwkJ
CWZ1bmN0aW9uX2tleXNbaV0uaGFuZGxlcihrZXksIG1lbnUpOworCQkJcmV0dXJuIDE7CisJCX0K
Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xlYW5faXRlbXModm9pZCkKK3sK
KwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBjdXJzZXNfbWVudV9pdGVtc1tpXTsgaSsrKQorCQlmcmVl
X2l0ZW0oY3Vyc2VzX21lbnVfaXRlbXNbaV0pOworCWJ6ZXJvKGN1cnNlc19tZW51X2l0ZW1zLCBz
aXplb2YoY3Vyc2VzX21lbnVfaXRlbXMpKTsKKwliemVybyhrX21lbnVfaXRlbXMsIHNpemVvZihr
X21lbnVfaXRlbXMpKTsKKwlpdGVtc19udW0gPSAwOworfQorCit0eXBlZGVmIGVudW0ge01BVENI
X1RJTktFUl9QQVRURVJOX1VQLCBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLAorCUZJTkRfTkVY
VF9NQVRDSF9ET1dOLCBGSU5EX05FWFRfTUFUQ0hfVVB9IG1hdGNoX2Y7CisKKy8qIHJldHVybiB0
aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgaXRlbSwgb3IgLTEgaWYgbm8gc3VjaCBpdGVtIGV4aXN0
cyAqLworc3RhdGljIGludCBnZXRfbWV4dF9tYXRjaChjb25zdCBjaGFyICptYXRjaF9zdHIsIG1h
dGNoX2YgZmxhZykKK3sKKwlpbnQgbWF0Y2hfc3RhcnQgPSBpdGVtX2luZGV4KGN1cnJlbnRfaXRl
bShjdXJzZXNfbWVudSkpOworCWludCBpbmRleDsKKworCWlmIChmbGFnID09IEZJTkRfTkVYVF9N
QVRDSF9ET1dOKQorCQkrK21hdGNoX3N0YXJ0OworCWVsc2UgaWYgKGZsYWcgPT0gRklORF9ORVhU
X01BVENIX1VQKQorCQktLW1hdGNoX3N0YXJ0OworCisJaW5kZXggPSBtYXRjaF9zdGFydDsKKwlp
bmRleCA9IChpbmRleCArIGl0ZW1zX251bSkgJSBpdGVtc19udW07CisJd2hpbGUgKHRydWUpIHsK
KwkJY2hhciAqc3RyID0ga19tZW51X2l0ZW1zW2luZGV4XS5zdHI7CisJCWlmIChzdHJjYXNlc3Ry
KHN0ciwgbWF0Y2hfc3RyKSAhPSBOVUxMKQorCQkJcmV0dXJuIGluZGV4OworCQlpZiAoZmxhZyA9
PSBGSU5EX05FWFRfTUFUQ0hfVVAgfHwKKwkJICAgIGZsYWcgPT0gTUFUQ0hfVElOS0VSX1BBVFRF
Uk5fVVApCisJCQktLWluZGV4OworCQllbHNlCisJCQkrK2luZGV4OworCQlpbmRleCA9IChpbmRl
eCArIGl0ZW1zX251bSkgJSBpdGVtc19udW07CisJCWlmIChpbmRleCA9PSBtYXRjaF9zdGFydCkK
KwkJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qIE1ha2UgYSBuZXcgaXRlbS4gKi8KK3N0YXRpYyB2
b2lkIGl0ZW1fbWFrZShzdHJ1Y3QgbWVudSAqbWVudSwgY2hhciB0YWcsIGNvbnN0IGNoYXIgKmZt
dCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlpZiAoaXRlbXNfbnVtID4gTUFYX01FTlVfSVRF
TVMtMSkKKwkJcmV0dXJuOworCisJYnplcm8oJmtfbWVudV9pdGVtc1tpdGVtc19udW1dLCBzaXpl
b2Yoa19tZW51X2l0ZW1zWzBdKSk7CisJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0udGFnID0gdGFn
OworCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLnVzcnB0ciA9IG1lbnU7CisJaWYgKG1lbnUgIT0g
TlVMTCkKKwkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uaXNfdmlzaWJsZSA9CisJCQltZW51X2lz
X3Zpc2libGUobWVudSk7CisJZWxzZQorCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNp
YmxlID0gMTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihrX21lbnVfaXRlbXNb
aXRlbXNfbnVtXS5zdHIsCisJCSAgc2l6ZW9mKGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciks
CisJCSAgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmICgha19tZW51X2l0ZW1zW2l0ZW1z
X251bV0uaXNfdmlzaWJsZSkKKwkJbWVtY3B5KGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciwg
IlhYWCIsIDMpOworCisJY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSA9IG5ld19pdGVtKAor
CQkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyLAorCQkJa19tZW51X2l0ZW1zW2l0ZW1zX251
bV0uc3RyKTsKKwlzZXRfaXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0ZW1zW2l0ZW1zX251bV0s
CisJCQkma19tZW51X2l0ZW1zW2l0ZW1zX251bV0pOworCS8qCisJaWYgKCFrX21lbnVfaXRlbXNb
aXRlbXNfbnVtXS5pc192aXNpYmxlKQorCQlpdGVtX29wdHNfb2ZmKGN1cnNlc19tZW51X2l0ZW1z
W2l0ZW1zX251bV0sIE9fU0VMRUNUQUJMRSk7CisJKi8KKworCWl0ZW1zX251bSsrOworCWN1cnNl
c19tZW51X2l0ZW1zW2l0ZW1zX251bV0gPSBOVUxMOworfQorCisvKiB2ZXJ5IGhhY2tpc2guIGFk
ZHMgYSBzdHJpbmcgdG8gdGhlIGxhc3QgaXRlbSBhZGRlZCAqLworc3RhdGljIHZvaWQgaXRlbV9h
ZGRfc3RyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJaW50IGluZGV4
ID0gaXRlbXNfbnVtLTE7CisJY2hhciBuZXdfc3RyWzI1Nl07CisJY2hhciB0bXBfc3RyWzI1Nl07
CisKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2
c25wcmludGYobmV3X3N0ciwgc2l6ZW9mKG5ld19zdHIpLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXAp
OworCXNucHJpbnRmKHRtcF9zdHIsIHNpemVvZih0bXBfc3RyKSwgIiVzJXMiLAorCQkJa19tZW51
X2l0ZW1zW2luZGV4XS5zdHIsIG5ld19zdHIpOworCXN0cm5jcHkoa19tZW51X2l0ZW1zW2luZGV4
XS5zdHIsCisJCXRtcF9zdHIsCisJCXNpemVvZihrX21lbnVfaXRlbXNbaW5kZXhdLnN0cikpOwor
CisJZnJlZV9pdGVtKGN1cnNlc19tZW51X2l0ZW1zW2luZGV4XSk7CisJY3Vyc2VzX21lbnVfaXRl
bXNbaW5kZXhdID0gbmV3X2l0ZW0oCisJCQlrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwKKwkJCWtf
bWVudV9pdGVtc1tpbmRleF0uc3RyKTsKKwlzZXRfaXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0
ZW1zW2luZGV4XSwKKwkJCSZrX21lbnVfaXRlbXNbaW5kZXhdKTsKK30KKworLyogZ2V0IHRoZSB0
YWcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtICovCitzdGF0aWMgY2hhciBpdGVtX3Rh
Zyh2b2lkKQoreworCUlURU0gKmN1cjsKKwlzdHJ1Y3QgbWl0ZW0gKm1jdXI7CisKKwljdXIgPSBj
dXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpOworCWlmIChjdXIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7
CisJbWN1ciA9IChzdHJ1Y3QgbWl0ZW0gKikgaXRlbV91c2VycHRyKGN1cik7CisJcmV0dXJuIG1j
dXItPnRhZzsKK30KKworc3RhdGljIGludCBjdXJzZXNfaXRlbV9pbmRleCh2b2lkKQoreworCXJl
dHVybiAgaXRlbV9pbmRleChjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpKTsKK30KKworc3RhdGlj
IHZvaWQgKml0ZW1fZGF0YSh2b2lkKQoreworCUlURU0gKmN1cjsKKwlzdHJ1Y3QgbWl0ZW0gKm1j
dXI7CisKKwljdXIgPSBjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpOworCWlmICghY3VyKQorCQly
ZXR1cm4gTlVMTDsKKwltY3VyID0gKHN0cnVjdCBtaXRlbSAqKSBpdGVtX3VzZXJwdHIoY3VyKTsK
KwlyZXR1cm4gbWN1ci0+dXNycHRyOworCit9CisKK3N0YXRpYyBpbnQgaXRlbV9pc190YWcoY2hh
ciB0YWcpCit7CisJcmV0dXJuIGl0ZW1fdGFnKCkgPT0gdGFnOworfQorCitzdGF0aWMgY2hhciBm
aWxlbmFtZVtQQVRIX01BWCsxXTsKK3N0YXRpYyBjaGFyIG1lbnVfYmFja3RpdGxlW1BBVEhfTUFY
KzEyOF07CitzdGF0aWMgY29uc3QgY2hhciAqc2V0X2NvbmZpZ19maWxlbmFtZShjb25zdCBjaGFy
ICpjb25maWdfZmlsZW5hbWUpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc25wcmludGYobWVu
dV9iYWNrdGl0bGUsIHNpemVvZihtZW51X2JhY2t0aXRsZSksCisJCQkiJXMgLSAlcyIsIGNvbmZp
Z19maWxlbmFtZSwgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKwlpZiAoc2l6ZSA+PSBzaXplb2Yo
bWVudV9iYWNrdGl0bGUpKQorCQltZW51X2JhY2t0aXRsZVtzaXplb2YobWVudV9iYWNrdGl0bGUp
LTFdID0gJ1wwJzsKKworCXNpemUgPSBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1l
KSwgIiVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKKwlpZiAoc2l6ZSA+PSBzaXplb2YoZmlsZW5hbWUp
KQorCQlmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gJ1wwJzsKKwlyZXR1cm4gbWVudV9i
YWNrdGl0bGU7Cit9CisKKy8qIHJldHVybiA9IDAgbWVhbnMgd2UgYXJlIHN1Y2Nlc3NmdWwuCisg
KiAtMSBtZWFucyBnbyBvbiBkb2luZyB3aGF0IHlvdSB3ZXJlIGRvaW5nCisgKi8KK3N0YXRpYyBp
bnQgZG9fZXhpdCh2b2lkKQoreworCWludCByZXM7CisJaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkp
IHsKKwkJZ2xvYmFsX2V4aXQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmVzID0gYnRuX2RpYWxv
ZyhtYWluX3dpbmRvdywKKwkJCSJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3Vy
YXRpb24/XG4iCisJCQkJIjxFU0M+IHRvIGNhbmNlbCBhbmQgcmVzdW1lIG5jb25maWcuIiwKKwkJ
CTIsCisJCQkiICAgPHNhdmU+ICAgIiwKKwkJCSI8ZG9uJ3Qgc2F2ZT4iKTsKKwlpZiAocmVzID09
IEtFWV9FWElUKSB7CisJCWdsb2JhbF9leGl0ID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8q
IGlmIHdlIGdvdCBoZXJlLCB0aGUgdXNlciByZWFsbHkgd2FudHMgdG8gZXhpdCAqLworCXN3aXRj
aCAocmVzKSB7CisJY2FzZSAwOgorCQlyZXMgPSBjb25mX3dyaXRlKGZpbGVuYW1lKTsKKwkJaWYg
KHJlcykKKwkJCWJ0bl9kaWFsb2coCisJCQkJbWFpbl93aW5kb3csCisJCQkJIkVycm9yIGR1cmlu
ZyB3cml0aW5nIG9mIGNvbmZpZ3VyYXRpb24uXG4iCisJCQkJICAiWW91ciBjb25maWd1cmF0aW9u
IGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIiwKKwkJCQkgIDEsCisJCQkJICAiPE9LPiIpOworCQlj
b25mX3dyaXRlX2F1dG9jb25mKDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlidG5fZGlhbG9n
KAorCQkJbWFpbl93aW5kb3csCisJCQkiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBO
T1Qgc2F2ZWQuIiwKKwkJCTEsCisJCQkiPE9LPiIpOworCQlicmVhazsKKwl9CisJZ2xvYmFsX2V4
aXQgPSAxOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQp
Cit7CisJc3RydWN0IHN5bWJvbCAqKnN5bV9hcnI7CisJc3RydWN0IGdzdHIgcmVzOworCXN0cnVj
dCBnc3RyIHRpdGxlOworCWNoYXIgKmRpYWxvZ19pbnB1dDsKKwlpbnQgZHJlczsKKworCXRpdGxl
ID0gc3RyX25ldygpOworCXN0cl9wcmludGYoICZ0aXRsZSwgIkVudGVyIChzdWIpc3RyaW5nIG9y
IHJlZ2V4cCB0byBzZWFyY2ggZm9yICIKKwkJCSAgICAgICIod2l0aCBvciB3aXRob3V0IFwiJXNc
IikiLCBDT05GSUdfKTsKKworYWdhaW46CisJZHJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dp
bmRvdywKKwkJCSJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiLAorCQkJc3RyX2dldCgm
dGl0bGUpLAorCQkJIiIsICZkaWFsb2dfaW5wdXRfcmVzdWx0LCAmZGlhbG9nX2lucHV0X3Jlc3Vs
dF9sZW4pOworCXN3aXRjaCAoZHJlcykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgor
CQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJIlNlYXJjaCBDb25maWd1cmF0aW9u
Iiwgc2VhcmNoX2hlbHApOworCQlnb3RvIGFnYWluOworCWRlZmF1bHQ6CisJCXN0cl9mcmVlKCZ0
aXRsZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzdHJpcCB0aGUgcHJlZml4IGlmIG5lY2Vzc2Fy
eSAqLworCWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7CisJaWYgKHN0cm5jYXNl
Y21wKGRpYWxvZ19pbnB1dF9yZXN1bHQsIENPTkZJR18sIHN0cmxlbihDT05GSUdfKSkgPT0gMCkK
KwkJZGlhbG9nX2lucHV0ICs9IHN0cmxlbihDT05GSUdfKTsKKworCXN5bV9hcnIgPSBzeW1fcmVf
c2VhcmNoKGRpYWxvZ19pbnB1dCk7CisJcmVzID0gZ2V0X3JlbGF0aW9uc19zdHIoc3ltX2Fyciwg
TlVMTCk7CisJZnJlZShzeW1fYXJyKTsKKwlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJ
CQkiU2VhcmNoIFJlc3VsdHMiLCBzdHJfZ2V0KCZyZXMpKTsKKwlzdHJfZnJlZSgmcmVzKTsKKwlz
dHJfZnJlZSgmdGl0bGUpOworfQorCisKK3N0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJv
cDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOworCXRy
aXN0YXRlIHZhbDsKKwljaGFyIGNoOworCisJaWYgKCFtZW51IHx8ICghc2hvd19hbGxfaXRlbXMg
JiYgIW1lbnVfaXNfdmlzaWJsZShtZW51KSkpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5
bTsKKwlwcm9wID0gbWVudS0+cHJvbXB0OworCWlmICghc3ltKSB7CisJCWlmIChwcm9wICYmIG1l
bnUgIT0gY3VycmVudF9tZW51KSB7CisJCQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9w
cm9tcHQobWVudSk7CisJCQllbnVtIHByb3BfdHlwZSBwdHlwZTsKKwkJCXB0eXBlID0gbWVudS0+
cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCQkJc3dpdGNoIChwdHlw
ZSkgeworCQkJY2FzZSBQX01FTlU6CisJCQkJY2hpbGRfY291bnQrKzsKKwkJCQlwcm9tcHQgPSBw
cm9tcHQ7CisJCQkJaWYgKHNpbmdsZV9tZW51X21vZGUpIHsKKwkJCQkJaXRlbV9tYWtlKG1lbnUs
ICdtJywKKwkJCQkJCSIlcyUqYyVzIiwKKwkJCQkJCW1lbnUtPmRhdGEgPyAiLS0+IiA6ICIrKz4i
LAorCQkJCQkJaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOworCQkJCX0gZWxzZQorCQkJCQlpdGVt
X21ha2UobWVudSwgJ20nLAorCQkJCQkJICAiICAgJSpjJXMgICVzIiwKKwkJCQkJCSAgaW5kZW50
ICsgMSwgJyAnLCBwcm9tcHQsCisJCQkJCQkgIG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0tLSIg
OiAiLS0tPiIpOworCisJCQkJaWYgKHNpbmdsZV9tZW51X21vZGUgJiYgbWVudS0+ZGF0YSkKKwkJ
CQkJZ290byBjb25mX2NoaWxkczsKKwkJCQlyZXR1cm47CisJCQljYXNlIFBfQ09NTUVOVDoKKwkJ
CQlpZiAocHJvbXB0KSB7CisJCQkJCWNoaWxkX2NvdW50Kys7CisJCQkJCWl0ZW1fbWFrZShtZW51
LCAnOicsCisJCQkJCQkiICAgJSpjKioqICVzICoqKiIsCisJCQkJCQlpbmRlbnQgKyAxLCAnICcs
CisJCQkJCQlwcm9tcHQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYg
KHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UobWVudSwgJzon
LCAiLS0tJSpjJXMiLAorCQkJCQkJaW5kZW50ICsgMSwgJyAnLAorCQkJCQkJcHJvbXB0KTsKKwkJ
CQl9CisJCQl9CisJCX0gZWxzZQorCQkJZG9pbnQgPSAwOworCQlnb3RvIGNvbmZfY2hpbGRzOwor
CX0KKworCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0p
KSB7CisJCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0p
OworCQlzdHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOworCisJCWNoaWxkX2NvdW50Kys7CisJ
CWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgewor
CQkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQor
CQkJCWRlZl9tZW51ID0gY2hpbGQ7CisJCX0KKworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSk7CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJCXN3aXRjaCAodHlw
ZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIlslY10i
LAorCQkJCQkJdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19U
UklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOgorCQkJCQljaCA9ICcq
JzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBtb2Q6CisJCQkJCWNoID0gJ00nOworCQkJCQlicmVh
azsKKwkJCQlkZWZhdWx0OgorCQkJCQljaCA9ICcgJzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
CWl0ZW1fbWFrZShtZW51LCAndCcsICI8JWM+IiwgY2gpOworCQkJCWJyZWFrOworCQkJfQorCQl9
IGVsc2UgeworCQkJaXRlbV9tYWtlKG1lbnUsIGRlZl9tZW51ID8gJ3QnIDogJzonLCAiICAgIik7
CisJCX0KKworCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwKKwkJCQknICcsIG1l
bnVfZ2V0X3Byb21wdChtZW51KSk7CisJCWlmICh2YWwgPT0geWVzKSB7CisJCQlpZiAoZGVmX21l
bnUpIHsKKwkJCQlpdGVtX2FkZF9zdHIoIiAoJXMpIiwKKwkJCQkJbWVudV9nZXRfcHJvbXB0KGRl
Zl9tZW51KSk7CisJCQkJaXRlbV9hZGRfc3RyKCIgIC0tLT4iKTsKKwkJCQlpZiAoZGVmX21lbnUt
Pmxpc3QpIHsKKwkJCQkJaW5kZW50ICs9IDI7CisJCQkJCWJ1aWxkX2NvbmYoZGVmX21lbnUpOwor
CQkJCQlpbmRlbnQgLT0gMjsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2Ug
eworCQlpZiAobWVudSA9PSBjdXJyZW50X21lbnUpIHsKKwkJCWl0ZW1fbWFrZShtZW51LCAnOics
CisJCQkJIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwKKwkJCQknICcsIG1lbnVfZ2V0X3Byb21wdCht
ZW51KSk7CisJCQlnb3RvIGNvbmZfY2hpbGRzOworCQl9CisJCWNoaWxkX2NvdW50Kys7CisJCXZh
bCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2VfdmFs
dWUoc3ltKSAmJiB2YWwgPT0geWVzKSB7CisJCQlpdGVtX21ha2UobWVudSwgJzonLCAiICAgIik7
CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKHR5cGUpIHsKKwkJCWNhc2UgU19CT09MRUFOOgorCQkJ
CWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpCisJCQkJCWl0ZW1fbWFrZShtZW51LCAndCcsICJb
JWNdIiwKKwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJZWxzZQorCQkJCQlpdGVt
X21ha2UobWVudSwgJ3QnLCAiLSVjLSIsCisJCQkJCQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOwor
CQkJCWJyZWFrOworCQkJY2FzZSBTX1RSSVNUQVRFOgorCQkJCXN3aXRjaCAodmFsKSB7CisJCQkJ
Y2FzZSB5ZXM6CisJCQkJCWNoID0gJyonOworCQkJCQlicmVhazsKKwkJCQljYXNlIG1vZDoKKwkJ
CQkJY2ggPSAnTSc7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNoID0gJyAnOwor
CQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQkJ
CQlpZiAoc3ltLT5yZXZfZGVwLnRyaSA9PSBtb2QpCisJCQkJCQlpdGVtX21ha2UobWVudSwKKwkJ
CQkJCQkndCcsICJ7JWN9IiwgY2gpOworCQkJCQllbHNlCisJCQkJCQlpdGVtX21ha2UobWVudSwK
KwkJCQkJCQkndCcsICI8JWM+IiwgY2gpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21ha2UobWVu
dSwgJ3QnLCAiLSVjLSIsIGNoKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wID0g
MiArIHN0cmxlbihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKKwkJCQlpdGVtX21ha2UobWVu
dSwgJ3MnLCAiICAgICglcykiLAorCQkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJ
CQkJdG1wID0gaW5kZW50IC0gdG1wICsgNDsKKwkJCQlpZiAodG1wIDwgMCkKKwkJCQkJdG1wID0g
MDsKKwkJCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCB0bXAsICcgJywKKwkJCQkJCW1lbnVfZ2V0
X3Byb21wdChtZW51KSwKKwkJCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwKKwkJCQkJCSAhc3lt
X2lzX2NoYW5nYWJsZShzeW0pKSA/ICIiIDoKKwkJCQkJCSIgKE5FVykiKTsKKwkJCQlnb3RvIGNv
bmZfY2hpbGRzOworCQkJfQorCQl9CisJCWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIGluZGVudCAr
IDEsICcgJywKKwkJCQltZW51X2dldF9wcm9tcHQobWVudSksCisJCQkJKHN5bV9oYXNfdmFsdWUo
c3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/CisJCQkJIiIgOiAiIChORVcpIik7CisJ
CWlmIChtZW51LT5wcm9tcHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgeworCQkJ
aXRlbV9hZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+
Iik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKK2NvbmZfY2hpbGRzOgorCWluZGVudCArPSBkb2lu
dDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQp
CisJCWJ1aWxkX2NvbmYoY2hpbGQpOworCWluZGVudCAtPSBkb2ludDsKK30KKworc3RhdGljIHZv
aWQgcmVzZXRfbWVudSh2b2lkKQoreworCXVucG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwljbGVh
bl9pdGVtcygpOworfQorCisvKiBhZGp1c3QgdGhlIG1lbnUgdG8gc2hvdyB0aGlzIGl0ZW0uCisg
KiBwcmVmZXIgbm90IHRvIHNjcm9sbCB0aGUgbWVudSBpZiBwb3NzaWJsZSovCitzdGF0aWMgdm9p
ZCBjZW50ZXJfaXRlbShpbnQgc2VsZWN0ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQorewor
CWludCB0b3Byb3c7CisKKwlzZXRfdG9wX3JvdyhjdXJzZXNfbWVudSwgKmxhc3RfdG9wX3Jvdyk7
CisJdG9wcm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7CisJaWYgKHNlbGVjdGVkX2luZGV4IDwg
dG9wcm93IHx8CisJICAgIHNlbGVjdGVkX2luZGV4ID49IHRvcHJvdyttd2luX21heF9saW5lcykg
eworCQl0b3Byb3cgPSBtYXgoc2VsZWN0ZWRfaW5kZXgtbXdpbl9tYXhfbGluZXMvMiwgMCk7CisJ
CWlmICh0b3Byb3cgPj0gaXRlbV9jb3VudChjdXJzZXNfbWVudSktbXdpbl9tYXhfbGluZXMpCisJ
CQl0b3Byb3cgPSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1td2luX21heF9saW5lczsKKwkJc2V0
X3RvcF9yb3coY3Vyc2VzX21lbnUsIHRvcHJvdyk7CisJfQorCXNldF9jdXJyZW50X2l0ZW0oY3Vy
c2VzX21lbnUsCisJCQljdXJzZXNfbWVudV9pdGVtc1tzZWxlY3RlZF9pbmRleF0pOworCSpsYXN0
X3RvcF9yb3cgPSB0b3Byb3c7CisJcG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwlyZWZyZXNoX2Fs
bF93aW5kb3dzKG1haW5fd2luZG93KTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHJl
c2V0X21lbnUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSAqLworc3RhdGljIHZvaWQgc2hvd19tZW51
KGNvbnN0IGNoYXIgKnByb21wdCwgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zLAorCQlpbnQgc2Vs
ZWN0ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQoreworCWludCBtYXh4LCBtYXh5OworCVdJ
TkRPVyAqbWVudV93aW5kb3c7CisKKwljdXJyZW50X2luc3RydWN0aW9ucyA9IGluc3RydWN0aW9u
czsKKworCWNsZWFyKCk7CisJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVz
W05PUk1BTF0pOworCXByaW50X2luX21pZGRsZShzdGRzY3IsIDEsIDAsIGdldG1heHgoc3Rkc2Ny
KSwKKwkJCW1lbnVfYmFja3RpdGxlLAorCQkJYXR0cmlidXRlc1tNQUlOX0hFQURJTkddKTsKKwor
CSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tNQUlOX01FTlVfQk9YXSk7
CisJYm94KG1haW5fd2luZG93LCAwLCAwKTsKKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3cs
IGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0hFQURJTkddKTsKKwltdndwcmludHcobWFpbl93aW5kb3cs
IDAsIDMsICIgJXMgIiwgcHJvbXB0KTsKKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0
dHJpYnV0ZXNbTk9STUFMXSk7CisKKwlzZXRfbWVudV9pdGVtcyhjdXJzZXNfbWVudSwgY3Vyc2Vz
X21lbnVfaXRlbXMpOworCisJLyogcG9zaXRpb24gdGhlIG1lbnUgYXQgdGhlIG1pZGRsZSBvZiB0
aGUgc2NyZWVuICovCisJc2NhbGVfbWVudShjdXJzZXNfbWVudSwgJm1heHksICZtYXh4KTsKKwlt
YXh4ID0gbWluKG1heHgsIG13aW5fbWF4X2NvbHMtMik7CisJbWF4eSA9IG13aW5fbWF4X2xpbmVz
OworCW1lbnVfd2luZG93ID0gZGVyd2luKG1haW5fd2luZG93LAorCQkJbWF4eSwKKwkJCW1heHgs
CisJCQkyLAorCQkJKG13aW5fbWF4X2NvbHMtbWF4eCkvMik7CisJa2V5cGFkKG1lbnVfd2luZG93
LCBUUlVFKTsKKwlzZXRfbWVudV93aW4oY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsKKwlzZXRf
bWVudV9zdWIoY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsKKworCS8qIG11c3QgcmVhc3NlcnQg
dGhpcyBhZnRlciBjaGFuZ2luZyBpdGVtcywgb3RoZXJ3aXNlIHJldHVybnMgdG8gYQorCSAqIGRl
ZmF1bHQgb2YgMTYKKwkgKi8KKwlzZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEp
OworCWNlbnRlcl9pdGVtKHNlbGVjdGVkX2luZGV4LCBsYXN0X3RvcF9yb3cpOworCXNldF9tZW51
X2Zvcm1hdChjdXJzZXNfbWVudSwgbWF4eSwgMSk7CisKKwlwcmludF9mdW5jdGlvbl9saW5lKCk7
CisKKwkvKiBQb3N0IHRoZSBtZW51ICovCisJcG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwlyZWZy
ZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKK30KKworc3RhdGljIHZvaWQgYWRqX21hdGNo
X2RpcihtYXRjaF9mICptYXRjaF9kaXJlY3Rpb24pCit7CisJaWYgKCptYXRjaF9kaXJlY3Rpb24g
PT0gRklORF9ORVhUX01BVENIX0RPV04pCisJCSptYXRjaF9kaXJlY3Rpb24gPQorCQkJTUFUQ0hf
VElOS0VSX1BBVFRFUk5fRE9XTjsKKwllbHNlIGlmICgqbWF0Y2hfZGlyZWN0aW9uID09IEZJTkRf
TkVYVF9NQVRDSF9VUCkKKwkJKm1hdGNoX2RpcmVjdGlvbiA9CisJCQlNQVRDSF9USU5LRVJfUEFU
VEVSTl9VUDsKKwkvKiBlbHNlLCBkbyBubyBjaGFuZ2UuLiAqLworfQorCitzdHJ1Y3QgbWF0Y2hf
c3RhdGUKK3sKKwlpbnQgaW5fc2VhcmNoOworCW1hdGNoX2YgbWF0Y2hfZGlyZWN0aW9uOworCWNo
YXIgcGF0dGVyblsyNTZdOworfTsKKworLyogUmV0dXJuIDAgbWVhbnMgSSBoYXZlIGhhbmRsZWQg
dGhlIGtleS4gSW4gc3VjaCBhIGNhc2UsIGFucyBzaG91bGQgaG9sZCB0aGUKKyAqIGl0ZW0gdG8g
Y2VudGVyLCBvciAtMSBvdGhlcndpc2UuCisgKiBFbHNlIHJldHVybiAtMSAuCisgKi8KK3N0YXRp
YyBpbnQgZG9fbWF0Y2goaW50IGtleSwgc3RydWN0IG1hdGNoX3N0YXRlICpzdGF0ZSwgaW50ICph
bnMpCit7CisJY2hhciBjID0gKGNoYXIpIGtleTsKKwlpbnQgdGVybWluYXRlX3NlYXJjaCA9IDA7
CisJKmFucyA9IC0xOworCWlmIChrZXkgPT0gJy8nIHx8IChzdGF0ZS0+aW5fc2VhcmNoICYmIGtl
eSA9PSAyNykpIHsKKwkJbW92ZSgwLCAwKTsKKwkJcmVmcmVzaCgpOworCQljbHJ0b2VvbCgpOwor
CQlzdGF0ZS0+aW5fc2VhcmNoID0gMS1zdGF0ZS0+aW5fc2VhcmNoOworCQliemVybyhzdGF0ZS0+
cGF0dGVybiwgc2l6ZW9mKHN0YXRlLT5wYXR0ZXJuKSk7CisJCXN0YXRlLT5tYXRjaF9kaXJlY3Rp
b24gPSBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYg
KCFzdGF0ZS0+aW5fc2VhcmNoKQorCQlyZXR1cm4gMTsKKworCWlmIChpc2FsbnVtKGMpIHx8IGlz
Z3JhcGgoYykgfHwgYyA9PSAnICcpIHsKKwkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0YXRlLT5w
YXR0ZXJuKV0gPSBjOworCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4pXSA9
ICdcMCc7CisJCWFkal9tYXRjaF9kaXIoJnN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOworCQkqYW5z
ID0gZ2V0X21leHRfbWF0Y2goc3RhdGUtPnBhdHRlcm4sCisJCQkJc3RhdGUtPm1hdGNoX2RpcmVj
dGlvbik7CisJfSBlbHNlIGlmIChrZXkgPT0gS0VZX0RPV04pIHsKKwkJc3RhdGUtPm1hdGNoX2Rp
cmVjdGlvbiA9IEZJTkRfTkVYVF9NQVRDSF9ET1dOOworCQkqYW5zID0gZ2V0X21leHRfbWF0Y2go
c3RhdGUtPnBhdHRlcm4sCisJCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7CisJfSBlbHNlIGlm
IChrZXkgPT0gS0VZX1VQKSB7CisJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRf
TUFUQ0hfVVA7CisJCSphbnMgPSBnZXRfbWV4dF9tYXRjaChzdGF0ZS0+cGF0dGVybiwKKwkJCQlz
dGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsKKwl9IGVsc2UgaWYgKGtleSA9PSBLRVlfQkFDS1NQQUNF
IHx8IGtleSA9PSA4IHx8IGtleSA9PSAxMjcpIHsKKwkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0
YXRlLT5wYXR0ZXJuKS0xXSA9ICdcMCc7CisJCWFkal9tYXRjaF9kaXIoJnN0YXRlLT5tYXRjaF9k
aXJlY3Rpb24pOworCX0gZWxzZQorCQl0ZXJtaW5hdGVfc2VhcmNoID0gMTsKKworCWlmICh0ZXJt
aW5hdGVfc2VhcmNoKSB7CisJCXN0YXRlLT5pbl9zZWFyY2ggPSAwOworCQliemVybyhzdGF0ZS0+
cGF0dGVybiwgc2l6ZW9mKHN0YXRlLT5wYXR0ZXJuKSk7CisJCW1vdmUoMCwgMCk7CisJCXJlZnJl
c2goKTsKKwkJY2xydG9lb2woKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqc3Vi
bWVudSA9IE5VTEw7CisJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUp
OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgcmVzOworCWludCBjdXJyZW50X2luZGV4ID0g
MDsKKwlpbnQgbGFzdF90b3Bfcm93ID0gMDsKKwlzdHJ1Y3QgbWF0Y2hfc3RhdGUgbWF0Y2hfc3Rh
dGUgPSB7CisJCS5pbl9zZWFyY2ggPSAwLAorCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElO
S0VSX1BBVFRFUk5fRE9XTiwKKwkJLnBhdHRlcm4gPSAiIiwKKwl9OworCisJd2hpbGUgKCFnbG9i
YWxfZXhpdCkgeworCQlyZXNldF9tZW51KCk7CisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWJ1
aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJCQlicmVhazsKKworCQlzaG93
X21lbnUocHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJbWVudV9pbnN0cnVjdGlv
bnMsCisJCQkJY3VycmVudF9pbmRleCwgJmxhc3RfdG9wX3Jvdyk7CisJCWtleXBhZCgobWVudV93
aW4oY3Vyc2VzX21lbnUpKSwgVFJVRSk7CisJCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsKKwkJCWlm
IChtYXRjaF9zdGF0ZS5pbl9zZWFyY2gpIHsKKwkJCQltdnByaW50dygwLCAwLAorCQkJCQkic2Vh
cmNoaW5nOiAlcyIsIG1hdGNoX3N0YXRlLnBhdHRlcm4pOworCQkJCWNscnRvZW9sKCk7CisJCQl9
CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJCXJlcyA9IHdnZXRjaCht
ZW51X3dpbihjdXJzZXNfbWVudSkpOworCQkJaWYgKCFyZXMpCisJCQkJYnJlYWs7CisJCQlpZiAo
ZG9fbWF0Y2gocmVzLCAmbWF0Y2hfc3RhdGUsICZjdXJyZW50X2luZGV4KSA9PSAwKSB7CisJCQkJ
aWYgKGN1cnJlbnRfaW5kZXggIT0gLTEpCisJCQkJCWNlbnRlcl9pdGVtKGN1cnJlbnRfaW5kZXgs
CisJCQkJCQkgICAgJmxhc3RfdG9wX3Jvdyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAo
cHJvY2Vzc19zcGVjaWFsX2tleXMoJnJlcywKKwkJCQkJCShzdHJ1Y3QgbWVudSAqKSBpdGVtX2Rh
dGEoKSkpCisJCQkJYnJlYWs7CisJCQlzd2l0Y2ggKHJlcykgeworCQkJY2FzZSBLRVlfRE9XTjoK
KwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7CisJCQkJYnJlYWs7
CisJCQljYXNlIEtFWV9VUDoKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1VQX0lU
RU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfTlBBR0U6CisJCQkJbWVudV9kcml2ZXIoY3Vy
c2VzX21lbnUsIFJFUV9TQ1JfRFBBR0UpOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfUFBBR0U6
CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOworCQkJCWJyZWFr
OworCQkJY2FzZSBLRVlfSE9NRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0ZJ
UlNUX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfRU5EOgorCQkJCW1lbnVfZHJpdmVy
KGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2gnOgor
CQkJY2FzZSAnPyc6CisJCQkJc2hvd19oZWxwKChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSk7
CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fAorCQkJ
CXJlcyA9PSAzMiB8fCByZXMgPT0gJ24nIHx8IHJlcyA9PSAneScgfHwKKwkJCQlyZXMgPT0gS0VZ
X0xFRlQgfHwgcmVzID09IEtFWV9SSUdIVCB8fAorCQkJCXJlcyA9PSAnbScpCisJCQkJYnJlYWs7
CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJfQorCisJCXJlZnJlc2hf
YWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQkvKiBpZiBFU0Mgb3IgbGVmdCovCisJCWlmIChy
ZXMgPT0gMjcgfHwgKG1lbnUgIT0gJnJvb3RtZW51ICYmIHJlcyA9PSBLRVlfTEVGVCkpCisJCQli
cmVhazsKKworCQkvKiByZW1lbWJlciBsb2NhdGlvbiBpbiB0aGUgbWVudSAqLworCQlsYXN0X3Rv
cF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKKwkJY3VycmVudF9pbmRleCA9IGN1cnNlc19p
dGVtX2luZGV4KCk7CisKKwkJaWYgKCFpdGVtX3RhZygpKQorCQkJY29udGludWU7CisKKwkJc3Vi
bWVudSA9IChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKTsKKwkJaWYgKCFzdWJtZW51IHx8ICFt
ZW51X2lzX3Zpc2libGUoc3VibWVudSkpCisJCQljb250aW51ZTsKKwkJc3ltID0gc3VibWVudS0+
c3ltOworCisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgJyAnOgorCQkJaWYgKGl0ZW1faXNfdGFn
KCd0JykpCisJCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOworCQkJZWxzZSBpZiAo
aXRlbV9pc190YWcoJ20nKSkKKwkJCQljb25mKHN1Ym1lbnUpOworCQkJYnJlYWs7CisJCWNhc2Ug
S0VZX1JJR0hUOgorCQljYXNlIDEwOiAvKiBFTlRFUiBXQVMgUFJFU1NFRCAqLworCQkJc3dpdGNo
IChpdGVtX3RhZygpKSB7CisJCQljYXNlICdtJzoKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkK
KwkJCQkJc3VibWVudS0+ZGF0YSA9CisJCQkJCQkodm9pZCAqKSAobG9uZykgIXN1Ym1lbnUtPmRh
dGE7CisJCQkJZWxzZQorCQkJCQljb25mKHN1Ym1lbnUpOworCQkJCWJyZWFrOworCQkJY2FzZSAn
dCc6CisJCQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJgorCQkJCSAgICBzeW1fZ2V0X3RyaXN0
YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQorCQkJCQljb25mX2Nob2ljZShzdWJtZW51KTsKKwkJCQll
bHNlIGlmIChzdWJtZW51LT5wcm9tcHQgJiYKKwkJCQkJIHN1Ym1lbnUtPnByb21wdC0+dHlwZSA9
PSBQX01FTlUpCisJCQkJCWNvbmYoc3VibWVudSk7CisJCQkJZWxzZSBpZiAocmVzID09IDEwKQor
CQkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCQkJYnJlYWs7CisJCQljYXNl
ICdzJzoKKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJy
ZWFrOworCQljYXNlICd5JzoKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7CisJCQkJaWYgKHN5
bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc3lt
X3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCkpCisJCQkJCWJ0bl9kaWFsb2cobWFpbl93aW5k
b3csIHNldG1vZF90ZXh0LCAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWlm
IChpdGVtX2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7
CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkKKwkJCQlz
eW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQor
CitzdGF0aWMgdm9pZCBjb25mX21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykKK3sKKwli
dG5fZGlhbG9nKG1haW5fd2luZG93LCBzLCAxLCAiPE9LPiIpOworfQorCitzdGF0aWMgdm9pZCBz
aG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IGdzdHIgaGVscDsKKworCWlm
ICghbWVudSkKKwkJcmV0dXJuOworCisJaGVscCA9IHN0cl9uZXcoKTsKKwltZW51X2dldF9leHRf
aGVscChtZW51LCAmaGVscCk7CisJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LCBtZW51X2dl
dF9wcm9tcHQobWVudSksIHN0cl9nZXQoJmhlbHApKTsKKwlzdHJfZnJlZSgmaGVscCk7Cit9CisK
K3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQoreworCWNvbnN0IGNo
YXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQg
PSBOVUxMOworCXN0cnVjdCBzeW1ib2wgKmFjdGl2ZTsKKwlpbnQgc2VsZWN0ZWRfaW5kZXggPSAw
OworCWludCBsYXN0X3RvcF9yb3cgPSAwOworCWludCByZXMsIGkgPSAwOworCXN0cnVjdCBtYXRj
aF9zdGF0ZSBtYXRjaF9zdGF0ZSA9IHsKKwkJLmluX3NlYXJjaCA9IDAsCisJCS5tYXRjaF9kaXJl
Y3Rpb24gPSBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLAorCQkucGF0dGVybiA9ICIiLAorCX07
CisKKwlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pOworCS8qIHRoaXMg
aXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSB0aGUgY29uZigpIGZ1bmN0aW9uLiAqLworCXdoaWxl
ICghZ2xvYmFsX2V4aXQpIHsKKwkJcmVzZXRfbWVudSgpOworCisJCWZvciAoaSA9IDAsIGNoaWxk
ID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWlmICghc2hv
d19hbGxfaXRlbXMgJiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisK
KwkJCWlmIChjaGlsZC0+c3ltID09IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCisJ
CQkJaXRlbV9tYWtlKGNoaWxkLCAnOicsICI8WD4gJXMiLAorCQkJCQkJbWVudV9nZXRfcHJvbXB0
KGNoaWxkKSk7CisJCQllbHNlIGlmIChjaGlsZC0+c3ltKQorCQkJCWl0ZW1fbWFrZShjaGlsZCwg
JzonLCAiICAgICVzIiwKKwkJCQkJCW1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQkJZWxzZQor
CQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiKioqICVzICoqKiIsCisJCQkJCQltZW51X2dldF9w
cm9tcHQoY2hpbGQpKTsKKworCQkJaWYgKGNoaWxkLT5zeW0gPT0gYWN0aXZlKXsKKwkJCQlsYXN0
X3RvcF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKKwkJCQlzZWxlY3RlZF9pbmRleCA9IGk7
CisJCQl9CisJCQlpKys7CisJCX0KKwkJc2hvd19tZW51KHByb21wdCA/IHByb21wdCA6ICJDaG9p
Y2UgTWVudSIsCisJCQkJcmFkaW9saXN0X2luc3RydWN0aW9ucywKKwkJCQlzZWxlY3RlZF9pbmRl
eCwKKwkJCQkmbGFzdF90b3Bfcm93KTsKKwkJd2hpbGUgKCFnbG9iYWxfZXhpdCkgeworCQkJaWYg
KG1hdGNoX3N0YXRlLmluX3NlYXJjaCkgeworCQkJCW12cHJpbnR3KDAsIDAsICJzZWFyY2hpbmc6
ICVzIiwKKwkJCQkJIG1hdGNoX3N0YXRlLnBhdHRlcm4pOworCQkJCWNscnRvZW9sKCk7CisJCQl9
CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJCXJlcyA9IHdnZXRjaCht
ZW51X3dpbihjdXJzZXNfbWVudSkpOworCQkJaWYgKCFyZXMpCisJCQkJYnJlYWs7CisJCQlpZiAo
ZG9fbWF0Y2gocmVzLCAmbWF0Y2hfc3RhdGUsICZzZWxlY3RlZF9pbmRleCkgPT0gMCkgeworCQkJ
CWlmIChzZWxlY3RlZF9pbmRleCAhPSAtMSkKKwkJCQkJY2VudGVyX2l0ZW0oc2VsZWN0ZWRfaW5k
ZXgsCisJCQkJCQkgICAgJmxhc3RfdG9wX3Jvdyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlp
ZiAocHJvY2Vzc19zcGVjaWFsX2tleXMoCisJCQkJCQkmcmVzLAorCQkJCQkJKHN0cnVjdCBtZW51
ICopIGl0ZW1fZGF0YSgpKSkKKwkJCQlicmVhazsKKwkJCXN3aXRjaCAocmVzKSB7CisJCQljYXNl
IEtFWV9ET1dOOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfRE9XTl9JVEVNKTsK
KwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX1VQOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51
LCBSRVFfVVBfSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9OUEFHRToKKwkJCQltZW51
X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1NDUl9EUEFHRSk7CisJCQkJYnJlYWs7CisJCQljYXNl
IEtFWV9QUEFHRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1NDUl9VUEFHRSk7
CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9IT01FOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19t
ZW51LCBSRVFfRklSU1RfSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9FTkQ6CisJCQkJ
bWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9MQVNUX0lURU0pOworCQkJCWJyZWFrOworCQkJ
Y2FzZSAnaCc6CisJCQljYXNlICc/JzoKKwkJCQlzaG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0
ZW1fZGF0YSgpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09
IDI3IHx8IHJlcyA9PSAnICcgfHwKKwkJCQkJcmVzID09IEtFWV9MRUZUKXsKKwkJCQlicmVhazsK
KwkJCX0KKwkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQl9CisJCS8qIGlm
IEVTQyBvciBsZWZ0ICovCisJCWlmIChyZXMgPT0gMjcgfHwgcmVzID09IEtFWV9MRUZUKQorCQkJ
YnJlYWs7CisKKwkJY2hpbGQgPSBpdGVtX2RhdGEoKTsKKwkJaWYgKCFjaGlsZCB8fCAhbWVudV9p
c192aXNpYmxlKGNoaWxkKSB8fCAhY2hpbGQtPnN5bSkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2gg
KHJlcykgeworCQljYXNlICcgJzoKKwkJY2FzZSAgMTA6CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJ
c3ltX3NldF90cmlzdGF0ZV92YWx1ZShjaGlsZC0+c3ltLCB5ZXMpOworCQkJcmV0dXJuOworCQlj
YXNlICdoJzoKKwkJY2FzZSAnPyc6CisJCQlzaG93X2hlbHAoY2hpbGQpOworCQkJYWN0aXZlID0g
Y2hpbGQtPnN5bTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FWElUOgorCQkJcmV0dXJuOworCQl9
CisJfQorfQorCitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkKK3sK
Kwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisKKwl3aGlsZSAo
MSkgeworCQlpbnQgcmVzOworCQljb25zdCBjaGFyICpoZWFkaW5nOworCisJCXN3aXRjaCAoc3lt
X2dldF90eXBlKG1lbnUtPnN5bSkpIHsKKwkJY2FzZSBTX0lOVDoKKwkJCWhlYWRpbmcgPSBpbnB1
dGJveF9pbnN0cnVjdGlvbnNfaW50OworCQkJYnJlYWs7CisJCWNhc2UgU19IRVg6CisJCQloZWFk
aW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleDsKKwkJCWJyZWFrOworCQljYXNlIFNfU1RS
SU5HOgorCQkJaGVhZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19zdHJpbmc7CisJCQlicmVh
azsKKwkJZGVmYXVsdDoKKwkJCWhlYWRpbmcgPSAiSW50ZXJuYWwgbmNvbmYgZXJyb3IhIjsKKwkJ
fQorCQlyZXMgPSBkaWFsb2dfaW5wdXRib3gobWFpbl93aW5kb3csCisJCQkJcHJvbXB0ID8gcHJv
bXB0IDogIk1haW4gTWVudSIsCisJCQkJaGVhZGluZywKKwkJCQlzeW1fZ2V0X3N0cmluZ192YWx1
ZShtZW51LT5zeW0pLAorCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0LAorCQkJCSZkaWFsb2dfaW5w
dXRfcmVzdWx0X2xlbik7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmIChzeW1f
c2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0sCisJCQkJCQlkaWFsb2dfaW5wdXRfcmVzdWx0KSkK
KwkJCQlyZXR1cm47CisJCQlidG5fZGlhbG9nKG1haW5fd2luZG93LAorCQkJCSJZb3UgaGF2ZSBt
YWRlIGFuIGludmFsaWQgZW50cnkuIiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc2hv
d19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VYSVQ6CisJCQlyZXR1cm47CisJ
CX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKQoreworCXdoaWxlICgxKSB7
CisJCWludCByZXM7CisJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywKKwkJCQlO
VUxMLCBsb2FkX2NvbmZpZ190ZXh0LAorCQkJCWZpbGVuYW1lLAorCQkJCSZkaWFsb2dfaW5wdXRf
cmVzdWx0LAorCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7CisJCXN3aXRjaCAocmVzKSB7
CisJCWNhc2UgMDoKKwkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkKKwkJCQlyZXR1cm47
CisJCQlpZiAoIWNvbmZfcmVhZChkaWFsb2dfaW5wdXRfcmVzdWx0KSkgeworCQkJCXNldF9jb25m
aWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7CisJCQkJc3ltX3NldF9jaGFuZ2VfY291
bnQoMSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywgIkZp
bGUgZG9lcyBub3QgZXhpc3QhIiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc2hvd19z
Y3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJCQkiTG9hZCBBbHRlcm5hdGUgQ29uZmlndXJhdGlv
biIsCisJCQkJCWxvYWRfY29uZmlnX2hlbHApOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VYSVQ6
CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKQor
eworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWlu
X3dpbmRvdywKKwkJCQlOVUxMLCBzYXZlX2NvbmZpZ190ZXh0LAorCQkJCWZpbGVuYW1lLAorCQkJ
CSZkaWFsb2dfaW5wdXRfcmVzdWx0LAorCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7CisJ
CXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFsw
XSkKKwkJCQlyZXR1cm47CisJCQlyZXMgPSBjb25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1bHQp
OworCQkJaWYgKCFyZXMpIHsKKwkJCQlzZXRfY29uZmlnX2ZpbGVuYW1lKGRpYWxvZ19pbnB1dF9y
ZXN1bHQpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csICJD
YW4ndCBjcmVhdGUgZmlsZSEiLAorCQkJCTEsICI8T0s+Iik7CisJCQlicmVhazsKKwkJY2FzZSAx
OgorCQkJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJCSJTYXZlIEFsdGVybmF0ZSBD
b25maWd1cmF0aW9uIiwKKwkJCQlzYXZlX2NvbmZpZ19oZWxwKTsKKwkJCWJyZWFrOworCQljYXNl
IEtFWV9FWElUOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXR1cF93
aW5kb3dzKHZvaWQpCit7CisJaW50IGxpbmVzLCBjb2x1bW5zOworCisJZ2V0bWF4eXgoc3Rkc2Ny
LCBsaW5lcywgY29sdW1ucyk7CisKKwlpZiAobWFpbl93aW5kb3cgIT0gTlVMTCkKKwkJZGVsd2lu
KG1haW5fd2luZG93KTsKKworCS8qIHNldCB1cCB0aGUgbWVudSBhbmQgbWVudSB3aW5kb3cgKi8K
KwltYWluX3dpbmRvdyA9IG5ld3dpbihsaW5lcy0yLCBjb2x1bW5zLTIsIDIsIDEpOworCWtleXBh
ZChtYWluX3dpbmRvdywgVFJVRSk7CisJbXdpbl9tYXhfbGluZXMgPSBsaW5lcy03OworCW13aW5f
bWF4X2NvbHMgPSBjb2x1bW5zLTY7CisKKwkvKiBwYW5lbHMgb3JkZXIgaXMgZnJvbSBib3R0b20g
dG8gdG9wICovCisJbmV3X3BhbmVsKG1haW5fd2luZG93KTsKK30KKworaW50IG1haW4oaW50IGFj
LCBjaGFyICoqYXYpCit7CisJaW50IGxpbmVzLCBjb2x1bW5zOworCWNoYXIgKm1vZGU7CisKKwlp
ZiAoYWMgPiAxICYmIHN0cmNtcChhdlsxXSwgIi1zIikgPT0gMCkgeworCQkvKiBTaWxlbmNlIGNv
bmZfcmVhZCgpIHVudGlsIHRoZSByZWFsIGNhbGxiYWNrIGlzIHNldCB1cCAqLworCQljb25mX3Nl
dF9tZXNzYWdlX2NhbGxiYWNrKE5VTEwpOworCQlhdisrOworCX0KKwljb25mX3BhcnNlKGF2WzFd
KTsKKwljb25mX3JlYWQoTlVMTCk7CisKKwltb2RlID0gZ2V0ZW52KCJOQ09ORklHX01PREUiKTsK
KwlpZiAobW9kZSkgeworCQlpZiAoIXN0cmNhc2VjbXAobW9kZSwgInNpbmdsZV9tZW51IikpCisJ
CQlzaW5nbGVfbWVudV9tb2RlID0gMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGN1cnNlcyAqLwor
CWluaXRzY3IoKTsKKwkvKiBzZXQgY29sb3IgdGhlbWUgKi8KKwlzZXRfY29sb3JzKCk7CisKKwlj
YnJlYWsoKTsKKwlub2VjaG8oKTsKKwlrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKwljdXJzX3NldCgw
KTsKKworCWdldG1heHl4KHN0ZHNjciwgbGluZXMsIGNvbHVtbnMpOworCWlmIChjb2x1bW5zIDwg
NzUgfHwgbGluZXMgPCAyMCkgeworCQllbmR3aW4oKTsKKwkJcHJpbnRmKCJZb3VyIHRlcm1pbmFs
IHNob3VsZCBoYXZlIGF0ICIKKwkJCSJsZWFzdCAyMCBsaW5lcyBhbmQgNzUgY29sdW1uc1xuIik7
CisJCXJldHVybiAxOworCX0KKworCW5vdGltZW91dChzdGRzY3IsIEZBTFNFKTsKKyNpZiBOQ1VS
U0VTX1JFRU5UUkFOVAorCXNldF9lc2NkZWxheSgxKTsKKyNlbHNlCisJRVNDREVMQVkgPSAxOwor
I2VuZGlmCisKKwkvKiBzZXQgYnRucyBtZW51ICovCisJY3Vyc2VzX21lbnUgPSBuZXdfbWVudShj
dXJzZXNfbWVudV9pdGVtcyk7CisJbWVudV9vcHRzX29mZihjdXJzZXNfbWVudSwgT19TSE9XREVT
Qyk7CisJbWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX1NIT1dNQVRDSCk7CisJbWVudV9vcHRz
X29uKGN1cnNlc19tZW51LCBPX09ORVZBTFVFKTsKKwltZW51X29wdHNfb24oY3Vyc2VzX21lbnUs
IE9fTk9OQ1lDTElDKTsKKwltZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fSUdOT1JFQ0FTRSk7
CisJc2V0X21lbnVfbWFyayhjdXJzZXNfbWVudSwgIiAiKTsKKwlzZXRfbWVudV9mb3JlKGN1cnNl
c19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9GT1JFXSk7CisJc2V0X21lbnVfYmFjayhjdXJz
ZXNfbWVudSwgYXR0cmlidXRlc1tNQUlOX01FTlVfQkFDS10pOworCXNldF9tZW51X2dyZXkoY3Vy
c2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0dSRVldKTsKKworCXNldF9jb25maWdfZmls
ZW5hbWUoY29uZl9nZXRfY29uZmlnbmFtZSgpKTsKKwlzZXR1cF93aW5kb3dzKCk7CisKKwkvKiBj
aGVjayBmb3IgS0VZX0ZVTkMoMSkgKi8KKwlpZiAoaGFzX2tleShLRVlfRigxKSkgPT0gRkFMU0Up
IHsKKwkJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJCSJJbnN0cnVjdGlvbnMiLAor
CQkJCW1lbnVfbm9fZl9pbnN0cnVjdGlvbnMpOworCX0KKworCWNvbmZfc2V0X21lc3NhZ2VfY2Fs
bGJhY2soY29uZl9tZXNzYWdlX2NhbGxiYWNrKTsKKwkvKiBkbyB0aGUgd29yayAqLworCXdoaWxl
ICghZ2xvYmFsX2V4aXQpIHsKKwkJY29uZigmcm9vdG1lbnUpOworCQlpZiAoIWdsb2JhbF9leGl0
ICYmIGRvX2V4aXQoKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCS8qIG9rLCB3ZSBhcmUgZG9uZSAq
LworCXVucG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwlmcmVlX21lbnUoY3Vyc2VzX21lbnUpOwor
CWRlbHdpbihtYWluX3dpbmRvdyk7CisJY2xlYXIoKTsKKwlyZWZyZXNoKCk7CisJZW5kd2luKCk7
CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1
aS5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5ndWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43N2Y1MjVhCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9uY29uZi5ndWkuYwpAQCAtMCwwICsxLDY2NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlyIFR6YWNoYXIg
PG5pci50emFjaGFyQGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gbWVudWNvbmZpZy4K
KyAqLworI2luY2x1ZGUgIm5jb25mLmgiCisjaW5jbHVkZSAibGtjLmgiCisKKy8qIGEgbGlzdCBv
ZiBhbGwgdGhlIGRpZmZlcmVudCB3aWRnZXRzIHdlIHVzZSAqLworYXR0cmlidXRlc190IGF0dHJp
YnV0ZXNbQVRUUl9NQVgrMV0gPSB7MH07CisKKy8qIGF2YWlsYWJsZSBjb2xvcnM6CisgICBDT0xP
Ul9CTEFDSyAgIDAKKyAgIENPTE9SX1JFRCAgICAgMQorICAgQ09MT1JfR1JFRU4gICAyCisgICBD
T0xPUl9ZRUxMT1cgIDMKKyAgIENPTE9SX0JMVUUgICAgNAorICAgQ09MT1JfTUFHRU5UQSA1Cisg
ICBDT0xPUl9DWUFOICAgIDYKKyAgIENPTE9SX1dISVRFICAgNworICAgKi8KK3N0YXRpYyB2b2lk
IHNldF9ub3JtYWxfY29sb3JzKHZvaWQpCit7CisJaW5pdF9wYWlyKE5PUk1BTCwgLTEsIC0xKTsK
Kwlpbml0X3BhaXIoTUFJTl9IRUFESU5HLCBDT0xPUl9NQUdFTlRBLCAtMSk7CisKKwkvKiBGT1JF
IGlzIGZvciB0aGUgc2VsZWN0ZWQgaXRlbSAqLworCWluaXRfcGFpcihNQUlOX01FTlVfRk9SRSwg
LTEsIC0xKTsKKwkvKiBCQUNLIGZvciBhbGwgdGhlIHJlc3QgKi8KKwlpbml0X3BhaXIoTUFJTl9N
RU5VX0JBQ0ssIC0xLCAtMSk7CisJaW5pdF9wYWlyKE1BSU5fTUVOVV9HUkVZLCAtMSwgLTEpOwor
CWluaXRfcGFpcihNQUlOX01FTlVfSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsKKwlpbml0X3Bh
aXIoTUFJTl9NRU5VX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7CisKKwlpbml0X3BhaXIoU0NST0xM
V0lOX1RFWFQsIC0xLCAtMSk7CisJaW5pdF9wYWlyKFNDUk9MTFdJTl9IRUFESU5HLCBDT0xPUl9H
UkVFTiwgLTEpOworCWluaXRfcGFpcihTQ1JPTExXSU5fQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsK
KworCWluaXRfcGFpcihESUFMT0dfVEVYVCwgLTEsIC0xKTsKKwlpbml0X3BhaXIoRElBTE9HX0JP
WCwgQ09MT1JfWUVMTE9XLCAtMSk7CisJaW5pdF9wYWlyKERJQUxPR19NRU5VX0JBQ0ssIENPTE9S
X1lFTExPVywgLTEpOworCWluaXRfcGFpcihESUFMT0dfTUVOVV9GT1JFLCBDT0xPUl9SRUQsIC0x
KTsKKworCWluaXRfcGFpcihJTlBVVF9CT1gsIENPTE9SX1lFTExPVywgLTEpOworCWluaXRfcGFp
cihJTlBVVF9IRUFESU5HLCBDT0xPUl9HUkVFTiwgLTEpOworCWluaXRfcGFpcihJTlBVVF9URVhU
LCAtMSwgLTEpOworCWluaXRfcGFpcihJTlBVVF9GSUVMRCwgLTEsIC0xKTsKKworCWluaXRfcGFp
cihGVU5DVElPTl9ISUdITElHSFQsIC0xLCAtMSk7CisJaW5pdF9wYWlyKEZVTkNUSU9OX1RFWFQs
IENPTE9SX1lFTExPVywgLTEpOworfQorCisvKiBhdmFpbGFibGUgYXR0cmlidXRlczoKKyAgIEFf
Tk9STUFMICAgICAgICBOb3JtYWwgZGlzcGxheSAobm8gaGlnaGxpZ2h0KQorICAgQV9TVEFORE9V
VCAgICAgIEJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2YgdGhlIHRlcm1pbmFsLgorICAgQV9VTkRF
UkxJTkUgICAgIFVuZGVybGluaW5nCisgICBBX1JFVkVSU0UgICAgICAgUmV2ZXJzZSB2aWRlbwor
ICAgQV9CTElOSyAgICAgICAgIEJsaW5raW5nCisgICBBX0RJTSAgICAgICAgICAgSGFsZiBicmln
aHQKKyAgIEFfQk9MRCAgICAgICAgICBFeHRyYSBicmlnaHQgb3IgYm9sZAorICAgQV9QUk9URUNU
ICAgICAgIFByb3RlY3RlZCBtb2RlCisgICBBX0lOVklTICAgICAgICAgSW52aXNpYmxlIG9yIGJs
YW5rIG1vZGUKKyAgIEFfQUxUQ0hBUlNFVCAgICBBbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorICAg
QV9DSEFSVEVYVCAgICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgYSBjaGFyYWN0ZXIKKyAgIENPTE9S
X1BBSVIobikgICBDb2xvci1wYWlyIG51bWJlciBuCisgICAqLworc3RhdGljIHZvaWQgbm9ybWFs
X2NvbG9yX3RoZW1lKHZvaWQpCit7CisJLyogYXV0b21hdGljYWxseSBhZGQgY29sb3IuLi4gKi8K
KyNkZWZpbmUgbWthdHRyKG5hbWUsIGF0dHIpIGRvIHsgXAorYXR0cmlidXRlc1tuYW1lXSA9IGF0
dHIgfCBDT0xPUl9QQUlSKG5hbWUpOyB9IHdoaWxlICgwKQorCW1rYXR0cihOT1JNQUwsIE5PUk1B
TCk7CisJbWthdHRyKE1BSU5fSEVBRElORywgQV9CT0xEIHwgQV9VTkRFUkxJTkUpOworCisJbWth
dHRyKE1BSU5fTUVOVV9GT1JFLCBBX1JFVkVSU0UpOworCW1rYXR0cihNQUlOX01FTlVfQkFDSywg
QV9OT1JNQUwpOworCW1rYXR0cihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOworCW1rYXR0cihN
QUlOX01FTlVfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHIoTUFJTl9NRU5VX0JPWCwgQV9OT1JN
QUwpOworCisJbWthdHRyKFNDUk9MTFdJTl9URVhULCBBX05PUk1BTCk7CisJbWthdHRyKFNDUk9M
TFdJTl9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cihTQ1JPTExXSU5fQk9YLCBBX0JPTEQpOwor
CisJbWthdHRyKERJQUxPR19URVhULCBBX0JPTEQpOworCW1rYXR0cihESUFMT0dfQk9YLCBBX0JP
TEQpOworCW1rYXR0cihESUFMT0dfTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsKKwlta2F0dHIoRElB
TE9HX01FTlVfQkFDSywgQV9OT1JNQUwpOworCisJbWthdHRyKElOUFVUX0JPWCwgQV9OT1JNQUwp
OworCW1rYXR0cihJTlBVVF9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cihJTlBVVF9URVhULCBB
X05PUk1BTCk7CisJbWthdHRyKElOUFVUX0ZJRUxELCBBX1VOREVSTElORSk7CisKKwlta2F0dHIo
RlVOQ1RJT05fSElHSExJR0hULCBBX0JPTEQpOworCW1rYXR0cihGVU5DVElPTl9URVhULCBBX1JF
VkVSU0UpOworfQorCitzdGF0aWMgdm9pZCBub19jb2xvcnNfdGhlbWUodm9pZCkKK3sKKwkvKiBh
dXRvbWF0aWNhbGx5IGFkZCBoaWdobGlnaHQsIG5vIGNvbG9yICovCisjZGVmaW5lIG1rYXR0cm4o
bmFtZSwgYXR0cikgeyBhdHRyaWJ1dGVzW25hbWVdID0gYXR0cjsgfQorCisJbWthdHRybihOT1JN
QUwsIE5PUk1BTCk7CisJbWthdHRybihNQUlOX0hFQURJTkcsIEFfQk9MRCB8IEFfVU5ERVJMSU5F
KTsKKworCW1rYXR0cm4oTUFJTl9NRU5VX0ZPUkUsIEFfU1RBTkRPVVQpOworCW1rYXR0cm4oTUFJ
Tl9NRU5VX0JBQ0ssIEFfTk9STUFMKTsKKwlta2F0dHJuKE1BSU5fTUVOVV9HUkVZLCBBX05PUk1B
TCk7CisJbWthdHRybihNQUlOX01FTlVfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHJuKE1BSU5f
TUVOVV9CT1gsIEFfTk9STUFMKTsKKworCW1rYXR0cm4oU0NST0xMV0lOX1RFWFQsIEFfTk9STUFM
KTsKKwlta2F0dHJuKFNDUk9MTFdJTl9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cm4oU0NST0xM
V0lOX0JPWCwgQV9CT0xEKTsKKworCW1rYXR0cm4oRElBTE9HX1RFWFQsIEFfTk9STUFMKTsKKwlt
a2F0dHJuKERJQUxPR19CT1gsIEFfQk9MRCk7CisJbWthdHRybihESUFMT0dfTUVOVV9GT1JFLCBB
X1NUQU5ET1VUKTsKKwlta2F0dHJuKERJQUxPR19NRU5VX0JBQ0ssIEFfTk9STUFMKTsKKworCW1r
YXR0cm4oSU5QVVRfQk9YLCBBX0JPTEQpOworCW1rYXR0cm4oSU5QVVRfSEVBRElORywgQV9CT0xE
KTsKKwlta2F0dHJuKElOUFVUX1RFWFQsIEFfTk9STUFMKTsKKwlta2F0dHJuKElOUFVUX0ZJRUxE
LCBBX1VOREVSTElORSk7CisKKwlta2F0dHJuKEZVTkNUSU9OX0hJR0hMSUdIVCwgQV9CT0xEKTsK
Kwlta2F0dHJuKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7Cit9CisKK3ZvaWQgc2V0X2NvbG9y
cyh2b2lkKQoreworCXN0YXJ0X2NvbG9yKCk7CisJdXNlX2RlZmF1bHRfY29sb3JzKCk7CisJc2V0
X25vcm1hbF9jb2xvcnMoKTsKKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJCW5vcm1hbF9jb2xvcl90
aGVtZSgpOworCX0gZWxzZSB7CisJCS8qIGdpdmUgZGVmYXVsdHMgKi8KKwkJbm9fY29sb3JzX3Ro
ZW1lKCk7CisJfQorfQorCisKKy8qIHRoaXMgY2hhbmdlcyB0aGUgd2luZG93cyBhdHRyaWJ1dGVz
ICEhISAqLwordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sCisJCWludCBzdGFydHks
CisJCWludCBzdGFydHgsCisJCWludCB3aWR0aCwKKwkJY29uc3QgY2hhciAqc3RyaW5nLAorCQlj
aHR5cGUgY29sb3IpCit7ICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKwlmbG9hdCB0ZW1wOworCisK
KwlpZiAod2luID09IE5VTEwpCisJCXdpbiA9IHN0ZHNjcjsKKwlnZXR5eCh3aW4sIHksIHgpOwor
CWlmIChzdGFydHggIT0gMCkKKwkJeCA9IHN0YXJ0eDsKKwlpZiAoc3RhcnR5ICE9IDApCisJCXkg
PSBzdGFydHk7CisJaWYgKHdpZHRoID09IDApCisJCXdpZHRoID0gODA7CisKKwlsZW5ndGggPSBz
dHJsZW4oc3RyaW5nKTsKKwl0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKSAvIDI7CisJeCA9IHN0YXJ0
eCArIChpbnQpdGVtcDsKKwkodm9pZCkgd2F0dHJzZXQod2luLCBjb2xvcik7CisJbXZ3cHJpbnR3
KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsKKwlyZWZyZXNoKCk7Cit9CisKK2ludCBnZXRfbGlu
ZV9ubyhjb25zdCBjaGFyICp0ZXh0KQoreworCWludCBpOworCWludCB0b3RhbCA9IDE7CisKKwlp
ZiAoIXRleHQpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAnOyBp
KyspCisJCWlmICh0ZXh0W2ldID09ICdcbicpCisJCQl0b3RhbCsrOworCXJldHVybiB0b3RhbDsK
K30KKworY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVfbm8p
Cit7CisJaW50IGk7CisJaW50IGxpbmVzID0gMDsKKworCWlmICghdGV4dCkKKwkJcmV0dXJuIE5V
TEw7CisKKwlmb3IgKGkgPSAwOyB0ZXh0W2ldICE9ICdcMCcgJiYgbGluZXMgPCBsaW5lX25vOyBp
KyspCisJCWlmICh0ZXh0W2ldID09ICdcbicpCisJCQlsaW5lcysrOworCXJldHVybiB0ZXh0K2k7
Cit9CisKK2ludCBnZXRfbGluZV9sZW5ndGgoY29uc3QgY2hhciAqbGluZSkKK3sKKwlpbnQgcmVz
ID0gMDsKKwl3aGlsZSAoKmxpbmUgIT0gJ1wwJyAmJiAqbGluZSAhPSAnXG4nKSB7CisJCWxpbmUr
KzsKKwkJcmVzKys7CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qIHByaW50IGFsbCBsaW5lcyB0
byB0aGUgd2luZG93LiAqLwordm9pZCBmaWxsX3dpbmRvdyhXSU5ET1cgKndpbiwgY29uc3QgY2hh
ciAqdGV4dCkKK3sKKwlpbnQgeCwgeTsKKwlpbnQgdG90YWxfbGluZXMgPSBnZXRfbGluZV9ubyh0
ZXh0KTsKKwlpbnQgaTsKKworCWdldG1heHl4KHdpbiwgeSwgeCk7CisJLyogZG8gbm90IGdvIG92
ZXIgZW5kIG9mIGxpbmUgKi8KKwl0b3RhbF9saW5lcyA9IG1pbih0b3RhbF9saW5lcywgeSk7CisJ
Zm9yIChpID0gMDsgaSA8IHRvdGFsX2xpbmVzOyBpKyspIHsKKwkJY2hhciB0bXBbeCsxMF07CisJ
CWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGluZSh0ZXh0LCBpKTsKKwkJaW50IGxlbiA9IGdldF9s
aW5lX2xlbmd0aChsaW5lKTsKKwkJc3RybmNweSh0bXAsIGxpbmUsIG1pbihsZW4sIHgpKTsKKwkJ
dG1wW2xlbl0gPSAnXDAnOworCQltdndwcmludHcod2luLCBpLCAwLCAiJXMiLCB0bXApOworCX0K
K30KKworLyogZ2V0IHRoZSBtZXNzYWdlLCBhbmQgYnV0dG9ucy4KKyAqIGVhY2ggYnV0dG9uIG11
c3QgYmUgYSBjaGFyKgorICogcmV0dXJuIHRoZSBzZWxlY3RlZCBidXR0b24KKyAqCisgKiB0aGlz
IGRpYWxvZyBpcyB1c2VkIGZvciAyIGRpZmZlcmVudCB0aGluZ3M6CisgKiAxKSBzaG93IGEgdGV4
dCBib3gsIG5vIGJ1dHRvbnMuCisgKiAyKSBzaG93IGEgZGlhbG9nLCB3aXRoIGhvcml6b250YWwg
YnV0dG9ucworICovCitpbnQgYnRuX2RpYWxvZyhXSU5ET1cgKm1haW5fd2luZG93LCBjb25zdCBj
aGFyICptc2csIGludCBidG5fbnVtLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljaGFyICpidG47
CisJaW50IGJ0bnNfd2lkdGggPSAwOworCWludCBtc2dfbGluZXMgPSAwOworCWludCBtc2dfd2lk
dGggPSAwOworCWludCB0b3RhbF93aWR0aDsKKwlpbnQgd2luX3Jvd3MgPSAwOworCVdJTkRPVyAq
d2luOworCVdJTkRPVyAqbXNnX3dpbjsKKwlXSU5ET1cgKm1lbnVfd2luOworCU1FTlUgKm1lbnU7
CisJSVRFTSAqYnRuc1tidG5fbnVtKzFdOworCWludCBpLCB4LCB5OworCWludCByZXMgPSAtMTsK
KworCisJdmFfc3RhcnQoYXAsIGJ0bl9udW0pOworCWZvciAoaSA9IDA7IGkgPCBidG5fbnVtOyBp
KyspIHsKKwkJYnRuID0gdmFfYXJnKGFwLCBjaGFyICopOworCQlidG5zW2ldID0gbmV3X2l0ZW0o
YnRuLCAiIik7CisJCWJ0bnNfd2lkdGggKz0gc3RybGVuKGJ0bikrMTsKKwl9CisJdmFfZW5kKGFw
KTsKKwlidG5zW2J0bl9udW1dID0gTlVMTDsKKworCS8qIGZpbmQgdGhlIHdpZGVzdCBsaW5lIG9m
IG1zZzogKi8KKwltc2dfbGluZXMgPSBnZXRfbGluZV9ubyhtc2cpOworCWZvciAoaSA9IDA7IGkg
PCBtc2dfbGluZXM7IGkrKykgeworCQljb25zdCBjaGFyICpsaW5lID0gZ2V0X2xpbmUobXNnLCBp
KTsKKwkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5lKTsKKwkJaWYgKG1zZ193aWR0aCA8
IGxlbikKKwkJCW1zZ193aWR0aCA9IGxlbjsKKwl9CisKKwl0b3RhbF93aWR0aCA9IG1heChtc2df
d2lkdGgsIGJ0bnNfd2lkdGgpOworCS8qIHBsYWNlIGRpYWxvZyBpbiBtaWRkbGUgb2Ygc2NyZWVu
ICovCisJeSA9IChnZXRtYXh5KHN0ZHNjciktKG1zZ19saW5lcys0KSkvMjsKKwl4ID0gKGdldG1h
eHgoc3Rkc2NyKS0odG90YWxfd2lkdGgrNCkpLzI7CisKKworCS8qIGNyZWF0ZSB0aGUgd2luZG93
cyAqLworCWlmIChidG5fbnVtID4gMCkKKwkJd2luX3Jvd3MgPSBtc2dfbGluZXMrNDsKKwllbHNl
CisJCXdpbl9yb3dzID0gbXNnX2xpbmVzKzI7CisKKwl3aW4gPSBuZXd3aW4od2luX3Jvd3MsIHRv
dGFsX3dpZHRoKzQsIHksIHgpOworCWtleXBhZCh3aW4sIFRSVUUpOworCW1lbnVfd2luID0gZGVy
d2luKHdpbiwgMSwgYnRuc193aWR0aCwgd2luX3Jvd3MtMiwKKwkJCTErKHRvdGFsX3dpZHRoKzIt
YnRuc193aWR0aCkvMik7CisJbWVudSA9IG5ld19tZW51KGJ0bnMpOworCW1zZ193aW4gPSBkZXJ3
aW4od2luLCB3aW5fcm93cy0yLCBtc2dfd2lkdGgsIDEsCisJCQkxKyh0b3RhbF93aWR0aCsyLW1z
Z193aWR0aCkvMik7CisKKwlzZXRfbWVudV9mb3JlKG1lbnUsIGF0dHJpYnV0ZXNbRElBTE9HX01F
TlVfRk9SRV0pOworCXNldF9tZW51X2JhY2sobWVudSwgYXR0cmlidXRlc1tESUFMT0dfTUVOVV9C
QUNLXSk7CisKKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1dGVzW0RJQUxPR19CT1hdKTsK
Kwlib3god2luLCAwLCAwKTsKKworCS8qIHByaW50IG1lc3NhZ2UgKi8KKwkodm9pZCkgd2F0dHJz
ZXQobXNnX3dpbiwgYXR0cmlidXRlc1tESUFMT0dfVEVYVF0pOworCWZpbGxfd2luZG93KG1zZ193
aW4sIG1zZyk7CisKKwlzZXRfbWVudV93aW4obWVudSwgd2luKTsKKwlzZXRfbWVudV9zdWIobWVu
dSwgbWVudV93aW4pOworCXNldF9tZW51X2Zvcm1hdChtZW51LCAxLCBidG5fbnVtKTsKKwltZW51
X29wdHNfb2ZmKG1lbnUsIE9fU0hPV0RFU0MpOworCW1lbnVfb3B0c19vZmYobWVudSwgT19TSE9X
TUFUQ0gpOworCW1lbnVfb3B0c19vbihtZW51LCBPX09ORVZBTFVFKTsKKwltZW51X29wdHNfb24o
bWVudSwgT19OT05DWUNMSUMpOworCXNldF9tZW51X21hcmsobWVudSwgIiIpOworCXBvc3RfbWVu
dShtZW51KTsKKworCisJdG91Y2h3aW4od2luKTsKKwlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5f
d2luZG93KTsKKwl3aGlsZSAoKHJlcyA9IHdnZXRjaCh3aW4pKSkgeworCQlzd2l0Y2ggKHJlcykg
eworCQljYXNlIEtFWV9MRUZUOgorCQkJbWVudV9kcml2ZXIobWVudSwgUkVRX0xFRlRfSVRFTSk7
CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQltZW51X2RyaXZlcihtZW51LCBSRVFf
UklHSFRfSVRFTSk7CisJCQlicmVhazsKKwkJY2FzZSAxMDogLyogRU5URVIgKi8KKwkJY2FzZSAy
NzogLyogRVNDQVBFICovCisJCWNhc2UgJyAnOgorCQljYXNlIEtFWV9GKEZfQkFDSyk6CisJCWNh
c2UgS0VZX0YoRl9FWElUKToKKwkJCWJyZWFrOworCQl9CisJCXRvdWNod2luKHdpbik7CisJCXJl
ZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCisJCWlmIChyZXMgPT0gMTAgfHwgcmVz
ID09ICcgJykgeworCQkJcmVzID0gaXRlbV9pbmRleChjdXJyZW50X2l0ZW0obWVudSkpOworCQkJ
YnJlYWs7CisJCX0gZWxzZSBpZiAocmVzID09IDI3IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8
CisJCQkJcmVzID09IEtFWV9GKEZfRVhJVCkpIHsKKwkJCXJlcyA9IEtFWV9FWElUOworCQkJYnJl
YWs7CisJCX0KKwl9CisKKwl1bnBvc3RfbWVudShtZW51KTsKKwlmcmVlX21lbnUobWVudSk7CisJ
Zm9yIChpID0gMDsgaSA8IGJ0bl9udW07IGkrKykKKwkJZnJlZV9pdGVtKGJ0bnNbaV0pOworCisJ
ZGVsd2luKHdpbik7CisJcmV0dXJuIHJlczsKK30KKworaW50IGRpYWxvZ19pbnB1dGJveChXSU5E
T1cgKm1haW5fd2luZG93LAorCQljb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0
LAorCQljb25zdCBjaGFyICppbml0LCBjaGFyICoqcmVzdWx0cCwgaW50ICpyZXN1bHRfbGVuKQor
eworCWludCBwcm9tcHRfbGluZXMgPSAwOworCWludCBwcm9tcHRfd2lkdGggPSAwOworCVdJTkRP
VyAqd2luOworCVdJTkRPVyAqcHJvbXB0X3dpbjsKKwlXSU5ET1cgKmZvcm1fd2luOworCVBBTkVM
ICpwYW5lbDsKKwlpbnQgaSwgeCwgeSwgbGluZXMsIGNvbHVtbnMsIHdpbl9saW5lcywgd2luX2Nv
bHM7CisJaW50IHJlcyA9IC0xOworCWludCBjdXJzb3JfcG9zaXRpb24gPSBzdHJsZW4oaW5pdCk7
CisJaW50IGN1cnNvcl9mb3JtX3dpbjsKKwljaGFyICpyZXN1bHQgPSAqcmVzdWx0cDsKKworCWdl
dG1heHl4KHN0ZHNjciwgbGluZXMsIGNvbHVtbnMpOworCisJaWYgKHN0cmxlbihpbml0KSsxID4g
KnJlc3VsdF9sZW4pIHsKKwkJKnJlc3VsdF9sZW4gPSBzdHJsZW4oaW5pdCkrMTsKKwkJKnJlc3Vs
dHAgPSByZXN1bHQgPSB4cmVhbGxvYyhyZXN1bHQsICpyZXN1bHRfbGVuKTsKKwl9CisKKwkvKiBm
aW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovCisJcHJvbXB0X2xpbmVzID0gZ2V0X2xpbmVf
bm8ocHJvbXB0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvbXB0X2xpbmVzOyBpKyspIHsKKwkJY29u
c3QgY2hhciAqbGluZSA9IGdldF9saW5lKHByb21wdCwgaSk7CisJCWludCBsZW4gPSBnZXRfbGlu
ZV9sZW5ndGgobGluZSk7CisJCXByb21wdF93aWR0aCA9IG1heChwcm9tcHRfd2lkdGgsIGxlbik7
CisJfQorCisJaWYgKHRpdGxlKQorCQlwcm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBz
dHJsZW4odGl0bGUpKTsKKworCXdpbl9saW5lcyA9IG1pbihwcm9tcHRfbGluZXMrNiwgbGluZXMt
Mik7CisJd2luX2NvbHMgPSBtaW4ocHJvbXB0X3dpZHRoKzcsIGNvbHVtbnMtMik7CisJcHJvbXB0
X2xpbmVzID0gbWF4KHdpbl9saW5lcy02LCAwKTsKKwlwcm9tcHRfd2lkdGggPSBtYXgod2luX2Nv
bHMtNywgMCk7CisKKwkvKiBwbGFjZSBkaWFsb2cgaW4gbWlkZGxlIG9mIHNjcmVlbiAqLworCXkg
PSAobGluZXMtd2luX2xpbmVzKS8yOworCXggPSAoY29sdW1ucy13aW5fY29scykvMjsKKworCXN0
cm5jcHkocmVzdWx0LCBpbml0LCAqcmVzdWx0X2xlbik7CisKKwkvKiBjcmVhdGUgdGhlIHdpbmRv
d3MgKi8KKwl3aW4gPSBuZXd3aW4od2luX2xpbmVzLCB3aW5fY29scywgeSwgeCk7CisJcHJvbXB0
X3dpbiA9IGRlcndpbih3aW4sIHByb21wdF9saW5lcysxLCBwcm9tcHRfd2lkdGgsIDIsIDIpOwor
CWZvcm1fd2luID0gZGVyd2luKHdpbiwgMSwgcHJvbXB0X3dpZHRoLCBwcm9tcHRfbGluZXMrMywg
Mik7CisJa2V5cGFkKGZvcm1fd2luLCBUUlVFKTsKKworCSh2b2lkKSB3YXR0cnNldChmb3JtX3dp
biwgYXR0cmlidXRlc1tJTlBVVF9GSUVMRF0pOworCisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0
cmlidXRlc1tJTlBVVF9CT1hdKTsKKwlib3god2luLCAwLCAwKTsKKwkodm9pZCkgd2F0dHJzZXQo
d2luLCBhdHRyaWJ1dGVzW0lOUFVUX0hFQURJTkddKTsKKwlpZiAodGl0bGUpCisJCW12d3ByaW50
dyh3aW4sIDAsIDMsICIlcyIsIHRpdGxlKTsKKworCS8qIHByaW50IG1lc3NhZ2UgKi8KKwkodm9p
ZCkgd2F0dHJzZXQocHJvbXB0X3dpbiwgYXR0cmlidXRlc1tJTlBVVF9URVhUXSk7CisJZmlsbF93
aW5kb3cocHJvbXB0X3dpbiwgcHJvbXB0KTsKKworCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwg
IiUqcyIsIHByb21wdF93aWR0aCwgIiAiKTsKKwljdXJzb3JfZm9ybV93aW4gPSBtaW4oY3Vyc29y
X3Bvc2l0aW9uLCBwcm9tcHRfd2lkdGgtMSk7CisJbXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAi
JXMiLAorCQkgIHJlc3VsdCArIGN1cnNvcl9wb3NpdGlvbi1jdXJzb3JfZm9ybV93aW4pOworCisJ
LyogY3JlYXRlIHBhbmVscyAqLworCXBhbmVsID0gbmV3X3BhbmVsKHdpbik7CisKKwkvKiBzaG93
IHRoZSBjdXJzb3IgKi8KKwljdXJzX3NldCgxKTsKKworCXRvdWNod2luKHdpbik7CisJcmVmcmVz
aF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisJd2hpbGUgKChyZXMgPSB3Z2V0Y2goZm9ybV93
aW4pKSkgeworCQlpbnQgbGVuID0gc3RybGVuKHJlc3VsdCk7CisJCXN3aXRjaCAocmVzKSB7CisJ
CWNhc2UgMTA6IC8qIEVOVEVSICovCisJCWNhc2UgMjc6IC8qIEVTQ0FQRSAqLworCQljYXNlIEtF
WV9GKEZfSEVMUCk6CisJCWNhc2UgS0VZX0YoRl9FWElUKToKKwkJY2FzZSBLRVlfRihGX0JBQ0sp
OgorCQkJYnJlYWs7CisJCWNhc2UgODogICAvKiBeSCAqLworCQljYXNlIDEyNzogLyogXj8gKi8K
KwkJY2FzZSBLRVlfQkFDS1NQQUNFOgorCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA+IDApIHsKKwkJ
CQltZW1tb3ZlKCZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uLTFdLAorCQkJCQkJJnJlc3VsdFtjdXJz
b3JfcG9zaXRpb25dLAorCQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlvbisxKTsKKwkJCQljdXJzb3Jf
cG9zaXRpb24tLTsKKwkJCQljdXJzb3JfZm9ybV93aW4tLTsKKwkJCQlsZW4tLTsKKwkJCX0KKwkJ
CWJyZWFrOworCQljYXNlIEtFWV9EQzoKKwkJCWlmIChjdXJzb3JfcG9zaXRpb24gPj0gMCAmJiBj
dXJzb3JfcG9zaXRpb24gPCBsZW4pIHsKKwkJCQltZW1tb3ZlKCZyZXN1bHRbY3Vyc29yX3Bvc2l0
aW9uXSwKKwkJCQkJCSZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uKzFdLAorCQkJCQkJbGVuLWN1cnNv
cl9wb3NpdGlvbisxKTsKKwkJCQlsZW4tLTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEtFWV9V
UDoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uIDwgbGVuKSB7CisJ
CQkJY3Vyc29yX3Bvc2l0aW9uKys7CisJCQkJY3Vyc29yX2Zvcm1fd2luKys7CisJCQl9CisJCQli
cmVhazsKKwkJY2FzZSBLRVlfRE9XTjoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJCWlmIChjdXJzb3Jf
cG9zaXRpb24gPiAwKSB7CisJCQkJY3Vyc29yX3Bvc2l0aW9uLS07CisJCQkJY3Vyc29yX2Zvcm1f
d2luLS07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBLRVlfSE9NRToKKwkJCWN1cnNvcl9wb3Np
dGlvbiA9IDA7CisJCQljdXJzb3JfZm9ybV93aW4gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgS0VZ
X0VORDoKKwkJCWN1cnNvcl9wb3NpdGlvbiA9IGxlbjsKKwkJCWN1cnNvcl9mb3JtX3dpbiA9IG1p
bihjdXJzb3JfcG9zaXRpb24sIHByb21wdF93aWR0aC0xKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJaWYgKChpc2dyYXBoKHJlcykgfHwgaXNzcGFjZShyZXMpKSkgeworCQkJCS8qIG9uZSBm
b3IgbmV3IGNoYXIsIG9uZSBmb3IgJ1wwJyAqLworCQkJCWlmIChsZW4rMiA+ICpyZXN1bHRfbGVu
KSB7CisJCQkJCSpyZXN1bHRfbGVuID0gbGVuKzI7CisJCQkJCSpyZXN1bHRwID0gcmVzdWx0ID0g
cmVhbGxvYyhyZXN1bHQsCisJCQkJCQkJCSpyZXN1bHRfbGVuKTsKKwkJCQl9CisJCQkJLyogaW5z
ZXJ0IHRoZSBjaGFyIGF0IHRoZSBwcm9wZXIgcG9zaXRpb24gKi8KKwkJCQltZW1tb3ZlKCZyZXN1
bHRbY3Vyc29yX3Bvc2l0aW9uKzFdLAorCQkJCQkJJnJlc3VsdFtjdXJzb3JfcG9zaXRpb25dLAor
CQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlvbisxKTsKKwkJCQlyZXN1bHRbY3Vyc29yX3Bvc2l0aW9u
XSA9IHJlczsKKwkJCQljdXJzb3JfcG9zaXRpb24rKzsKKwkJCQljdXJzb3JfZm9ybV93aW4rKzsK
KwkJCQlsZW4rKzsKKwkJCX0gZWxzZSB7CisJCQkJbXZwcmludHcoMCwgMCwgInVua25vd24ga2V5
OiAlZFxuIiwgcmVzKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChjdXJzb3JfZm9ybV93
aW4gPCAwKQorCQkJY3Vyc29yX2Zvcm1fd2luID0gMDsKKwkJZWxzZSBpZiAoY3Vyc29yX2Zvcm1f
d2luID4gcHJvbXB0X3dpZHRoLTEpCisJCQljdXJzb3JfZm9ybV93aW4gPSBwcm9tcHRfd2lkdGgt
MTsKKworCQl3bW92ZShmb3JtX3dpbiwgMCwgMCk7CisJCXdjbHJ0b2VvbChmb3JtX3dpbik7CisJ
CW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiUqcyIsIHByb21wdF93aWR0aCwgIiAiKTsKKwkJ
bXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAiJXMiLAorCQkJcmVzdWx0ICsgY3Vyc29yX3Bvc2l0
aW9uLWN1cnNvcl9mb3JtX3dpbik7CisJCXdtb3ZlKGZvcm1fd2luLCAwLCBjdXJzb3JfZm9ybV93
aW4pOworCQl0b3VjaHdpbih3aW4pOworCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93
KTsKKworCQlpZiAocmVzID09IDEwKSB7CisJCQlyZXMgPSAwOworCQkJYnJlYWs7CisJCX0gZWxz
ZSBpZiAocmVzID09IDI3IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8CisJCQkJcmVzID09IEtF
WV9GKEZfRVhJVCkpIHsKKwkJCXJlcyA9IEtFWV9FWElUOworCQkJYnJlYWs7CisJCX0gZWxzZSBp
ZiAocmVzID09IEtFWV9GKEZfSEVMUCkpIHsKKwkJCXJlcyA9IDE7CisJCQlicmVhazsKKwkJfQor
CX0KKworCS8qIGhpZGUgdGhlIGN1cnNvciAqLworCWN1cnNfc2V0KDApOworCWRlbF9wYW5lbChw
YW5lbCk7CisJZGVsd2luKHByb21wdF93aW4pOworCWRlbHdpbihmb3JtX3dpbik7CisJZGVsd2lu
KHdpbik7CisJcmV0dXJuIHJlczsKK30KKworLyogcmVmcmVzaCBhbGwgd2luZG93cyBpbiB0aGUg
Y29ycmVjdCBvcmRlciAqLwordm9pZCByZWZyZXNoX2FsbF93aW5kb3dzKFdJTkRPVyAqbWFpbl93
aW5kb3cpCit7CisJdXBkYXRlX3BhbmVscygpOworCXRvdWNod2luKG1haW5fd2luZG93KTsKKwly
ZWZyZXNoKCk7Cit9CisKKy8qIGxheW1hbidzIHNjcm9sbGFibGUgd2luZG93Li4uICovCit2b2lk
IHNob3dfc2Nyb2xsX3dpbihXSU5ET1cgKm1haW5fd2luZG93LAorCQljb25zdCBjaGFyICp0aXRs
ZSwKKwkJY29uc3QgY2hhciAqdGV4dCkKK3sKKwlpbnQgcmVzOworCWludCB0b3RhbF9saW5lcyA9
IGdldF9saW5lX25vKHRleHQpOworCWludCB4LCB5LCBsaW5lcywgY29sdW1uczsKKwlpbnQgc3Rh
cnRfeCA9IDAsIHN0YXJ0X3kgPSAwOworCWludCB0ZXh0X2xpbmVzID0gMCwgdGV4dF9jb2xzID0g
MDsKKwlpbnQgdG90YWxfY29scyA9IDA7CisJaW50IHdpbl9jb2xzID0gMDsKKwlpbnQgd2luX2xp
bmVzID0gMDsKKwlpbnQgaSA9IDA7CisJV0lORE9XICp3aW47CisJV0lORE9XICpwYWQ7CisJUEFO
RUwgKnBhbmVsOworCisJZ2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7CisKKwkvKiBm
aW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovCisJdG90YWxfbGluZXMgPSBnZXRfbGluZV9u
byh0ZXh0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbGluZXM7IGkrKykgeworCQljb25zdCBj
aGFyICpsaW5lID0gZ2V0X2xpbmUodGV4dCwgaSk7CisJCWludCBsZW4gPSBnZXRfbGluZV9sZW5n
dGgobGluZSk7CisJCXRvdGFsX2NvbHMgPSBtYXgodG90YWxfY29scywgbGVuKzIpOworCX0KKwor
CS8qIGNyZWF0ZSB0aGUgcGFkICovCisJcGFkID0gbmV3cGFkKHRvdGFsX2xpbmVzKzEwLCB0b3Rh
bF9jb2xzKzEwKTsKKwkodm9pZCkgd2F0dHJzZXQocGFkLCBhdHRyaWJ1dGVzW1NDUk9MTFdJTl9U
RVhUXSk7CisJZmlsbF93aW5kb3cocGFkLCB0ZXh0KTsKKworCXdpbl9saW5lcyA9IG1pbih0b3Rh
bF9saW5lcys0LCBsaW5lcy0yKTsKKwl3aW5fY29scyA9IG1pbih0b3RhbF9jb2xzKzIsIGNvbHVt
bnMtMik7CisJdGV4dF9saW5lcyA9IG1heCh3aW5fbGluZXMtNCwgMCk7CisJdGV4dF9jb2xzID0g
bWF4KHdpbl9jb2xzLTIsIDApOworCisJLyogcGxhY2Ugd2luZG93IGluIG1pZGRsZSBvZiBzY3Jl
ZW4gKi8KKwl5ID0gKGxpbmVzLXdpbl9saW5lcykvMjsKKwl4ID0gKGNvbHVtbnMtd2luX2NvbHMp
LzI7CisKKwl3aW4gPSBuZXd3aW4od2luX2xpbmVzLCB3aW5fY29scywgeSwgeCk7CisJa2V5cGFk
KHdpbiwgVFJVRSk7CisJLyogc2hvdyB0aGUgaGVscCBpbiB0aGUgaGVscCB3aW5kb3csIGFuZCBz
aG93IHRoZSBoZWxwIHBhbmVsICovCisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tT
Q1JPTExXSU5fQk9YXSk7CisJYm94KHdpbiwgMCwgMCk7CisJKHZvaWQpIHdhdHRyc2V0KHdpbiwg
YXR0cmlidXRlc1tTQ1JPTExXSU5fSEVBRElOR10pOworCW12d3ByaW50dyh3aW4sIDAsIDMsICIg
JXMgIiwgdGl0bGUpOworCXBhbmVsID0gbmV3X3BhbmVsKHdpbik7CisKKwkvKiBoYW5kbGUgc2Ny
b2xsaW5nICovCisJZG8geworCisJCWNvcHl3aW4ocGFkLCB3aW4sIHN0YXJ0X3ksIHN0YXJ0X3gs
IDIsIDIsIHRleHRfbGluZXMsCisJCQkJdGV4dF9jb2xzLCAwKTsKKwkJcHJpbnRfaW5fbWlkZGxl
KHdpbiwKKwkJCQl0ZXh0X2xpbmVzKzIsCisJCQkJMCwKKwkJCQl0ZXh0X2NvbHMsCisJCQkJIjxP
Sz4iLAorCQkJCWF0dHJpYnV0ZXNbRElBTE9HX01FTlVfRk9SRV0pOworCQl3cmVmcmVzaCh3aW4p
OworCisJCXJlcyA9IHdnZXRjaCh3aW4pOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNlIEtFWV9O
UEFHRToKKwkJY2FzZSAnICc6CisJCWNhc2UgJ2QnOgorCQkJc3RhcnRfeSArPSB0ZXh0X2xpbmVz
LTI7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUFBBR0U6CisJCWNhc2UgJ3UnOgorCQkJc3RhcnRf
eSAtPSB0ZXh0X2xpbmVzKzI7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfSE9NRToKKwkJCXN0YXJ0
X3kgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VORDoKKwkJCXN0YXJ0X3kgPSB0b3RhbF9s
aW5lcy10ZXh0X2xpbmVzOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0RPV046CisJCWNhc2UgJ2on
OgorCQkJc3RhcnRfeSsrOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1VQOgorCQljYXNlICdrJzoK
KwkJCXN0YXJ0X3ktLTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9MRUZUOgorCQljYXNlICdoJzoK
KwkJCXN0YXJ0X3gtLTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SSUdIVDoKKwkJY2FzZSAnbCc6
CisJCQlzdGFydF94Kys7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmVzID09IDEwIHx8IHJlcyA9
PSAyNyB8fCByZXMgPT0gJ3EnIHx8CisJCQlyZXMgPT0gS0VZX0YoRl9IRUxQKSB8fCByZXMgPT0g
S0VZX0YoRl9CQUNLKSB8fAorCQkJcmVzID09IEtFWV9GKEZfRVhJVCkpCisJCQlicmVhazsKKwkJ
aWYgKHN0YXJ0X3kgPCAwKQorCQkJc3RhcnRfeSA9IDA7CisJCWlmIChzdGFydF95ID49IHRvdGFs
X2xpbmVzLXRleHRfbGluZXMpCisJCQlzdGFydF95ID0gdG90YWxfbGluZXMtdGV4dF9saW5lczsK
KwkJaWYgKHN0YXJ0X3ggPCAwKQorCQkJc3RhcnRfeCA9IDA7CisJCWlmIChzdGFydF94ID49IHRv
dGFsX2NvbHMtdGV4dF9jb2xzKQorCQkJc3RhcnRfeCA9IHRvdGFsX2NvbHMtdGV4dF9jb2xzOwor
CX0gd2hpbGUgKHJlcyk7CisKKwlkZWxfcGFuZWwocGFuZWwpOworCWRlbHdpbih3aW4pOworCXJl
ZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9uY29uZi5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTI0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L25jb25mLmgKQEAgLTAsMCArMSw5MiBAQAorLyogU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmly
IFR6YWNoYXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gbWVu
dWNvbmZpZy4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8bmN1cnNlcy5oPgorI2luY2x1ZGUgPG1lbnUuaD4KKyNpbmNs
dWRlIDxwYW5lbC5oPgorI2luY2x1ZGUgPGZvcm0uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNkZWZpbmUgbWF4KGEs
IGIpICh7XAorCQl0eXBlb2YoYSkgX2EgPSBhO1wKKwkJdHlwZW9mKGIpIF9iID0gYjtcCisJCV9h
ID4gX2IgPyBfYSA6IF9iOyB9KQorCisjZGVmaW5lIG1pbihhLCBiKSAoe1wKKwkJdHlwZW9mKGEp
IF9hID0gYTtcCisJCXR5cGVvZihiKSBfYiA9IGI7XAorCQlfYSA8IF9iID8gX2EgOiBfYjsgfSkK
KwordHlwZWRlZiBlbnVtIHsKKwlOT1JNQUwgPSAxLAorCU1BSU5fSEVBRElORywKKwlNQUlOX01F
TlVfQk9YLAorCU1BSU5fTUVOVV9GT1JFLAorCU1BSU5fTUVOVV9CQUNLLAorCU1BSU5fTUVOVV9H
UkVZLAorCU1BSU5fTUVOVV9IRUFESU5HLAorCVNDUk9MTFdJTl9URVhULAorCVNDUk9MTFdJTl9I
RUFESU5HLAorCVNDUk9MTFdJTl9CT1gsCisJRElBTE9HX1RFWFQsCisJRElBTE9HX01FTlVfRk9S
RSwKKwlESUFMT0dfTUVOVV9CQUNLLAorCURJQUxPR19CT1gsCisJSU5QVVRfQk9YLAorCUlOUFVU
X0hFQURJTkcsCisJSU5QVVRfVEVYVCwKKwlJTlBVVF9GSUVMRCwKKwlGVU5DVElPTl9URVhULAor
CUZVTkNUSU9OX0hJR0hMSUdIVCwKKwlBVFRSX01BWAorfSBhdHRyaWJ1dGVzX3Q7CitleHRlcm4g
YXR0cmlidXRlc190IGF0dHJpYnV0ZXNbXTsKKwordHlwZWRlZiBlbnVtIHsKKwlGX0hFTFAgPSAx
LAorCUZfU1lNQk9MID0gMiwKKwlGX0lOU1RTID0gMywKKwlGX0NPTkYgPSA0LAorCUZfQkFDSyA9
IDUsCisJRl9TQVZFID0gNiwKKwlGX0xPQUQgPSA3LAorCUZfU0VBUkNIID0gOCwKKwlGX0VYSVQg
PSA5LAorfSBmdW5jdGlvbl9rZXk7CisKK3ZvaWQgc2V0X2NvbG9ycyh2b2lkKTsKKworLyogdGhp
cyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICovCit2b2lkIHByaW50X2luX21p
ZGRsZShXSU5ET1cgKndpbiwKKwkJaW50IHN0YXJ0eSwKKwkJaW50IHN0YXJ0eCwKKwkJaW50IHdp
ZHRoLAorCQljb25zdCBjaGFyICpzdHJpbmcsCisJCWNodHlwZSBjb2xvcik7CitpbnQgZ2V0X2xp
bmVfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmUpOworaW50IGdldF9saW5lX25vKGNvbnN0IGNoYXIg
KnRleHQpOworY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVf
bm8pOwordm9pZCBmaWxsX3dpbmRvdyhXSU5ET1cgKndpbiwgY29uc3QgY2hhciAqdGV4dCk7Citp
bnQgYnRuX2RpYWxvZyhXSU5ET1cgKm1haW5fd2luZG93LCBjb25zdCBjaGFyICptc2csIGludCBi
dG5fbnVtLCAuLi4pOworaW50IGRpYWxvZ19pbnB1dGJveChXSU5ET1cgKm1haW5fd2luZG93LAor
CQljb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LAorCQljb25zdCBjaGFyICpp
bml0LCBjaGFyICoqcmVzdWx0cCwgaW50ICpyZXN1bHRfbGVuKTsKK3ZvaWQgcmVmcmVzaF9hbGxf
d2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93KTsKK3ZvaWQgc2hvd19zY3JvbGxfd2luKFdJTkRP
VyAqbWFpbl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxlLAorCQljb25zdCBjaGFyICp0ZXh0
KTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkgYi9zdXBwb3J0L2tj
b25maWcubmV3L3BhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYw
OTM2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55CkBA
IC0wLDAgKzEsNzMxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhr
Lm9yZz4KKyAqLworJXsKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmlu
ZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQor
CisjZGVmaW5lIFBSSU5URAkJMHgwMDAxCisjZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgorCitp
bnQgY2RlYnVnID0gUFJJTlREOworCitzdGF0aWMgdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKmVy
cik7CitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRp
YyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyBib29sIHpj
b25mX2VuZHRva2VuKGNvbnN0IGNoYXIgKnRva2VubmFtZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmV4
cGVjdGVkX3Rva2VubmFtZSk7CisKK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZTUJPTF9I
QVNIU0laRV07CisKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9l
bnRyeTsKKworJX0KKworJXVuaW9uCit7CisJY2hhciAqc3RyaW5nOworCXN0cnVjdCBzeW1ib2wg
KnN5bWJvbDsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwllbnVt
IHN5bWJvbF90eXBlIHR5cGU7CisJZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOworfQorCisl
dG9rZW4gPHN0cmluZz4gVF9IRUxQVEVYVAorJXRva2VuIDxzdHJpbmc+IFRfV09SRAorJXRva2Vu
IDxzdHJpbmc+IFRfV09SRF9RVU9URQorJXRva2VuIFRfQUxMTk9DT05GSUdfWQorJXRva2VuIFRf
Qk9PTAorJXRva2VuIFRfQ0hPSUNFCisldG9rZW4gVF9DTE9TRV9QQVJFTgorJXRva2VuIFRfQ09M
T05fRVFVQUwKKyV0b2tlbiBUX0NPTU1FTlQKKyV0b2tlbiBUX0NPTkZJRworJXRva2VuIFRfREVG
QVVMVAorJXRva2VuIFRfREVGQ09ORklHX0xJU1QKKyV0b2tlbiBUX0RFRl9CT09MCisldG9rZW4g
VF9ERUZfVFJJU1RBVEUKKyV0b2tlbiBUX0RFUEVORFMKKyV0b2tlbiBUX0VORENIT0lDRQorJXRv
a2VuIFRfRU5ESUYKKyV0b2tlbiBUX0VORE1FTlUKKyV0b2tlbiBUX0hFTFAKKyV0b2tlbiBUX0hF
WAorJXRva2VuIFRfSUYKKyV0b2tlbiBUX0lNUExZCisldG9rZW4gVF9JTlQKKyV0b2tlbiBUX01B
SU5NRU5VCisldG9rZW4gVF9NRU5VCisldG9rZW4gVF9NRU5VQ09ORklHCisldG9rZW4gVF9NT0RV
TEVTCisldG9rZW4gVF9PTgorJXRva2VuIFRfT1BFTl9QQVJFTgorJXRva2VuIFRfT1BUSU9OCisl
dG9rZW4gVF9PUFRJT05BTAorJXRva2VuIFRfUExVU19FUVVBTAorJXRva2VuIFRfUFJPTVBUCisl
dG9rZW4gVF9SQU5HRQorJXRva2VuIFRfU0VMRUNUCisldG9rZW4gVF9TT1VSQ0UKKyV0b2tlbiBU
X1NUUklORworJXRva2VuIFRfVFJJU1RBVEUKKyV0b2tlbiBUX1ZJU0lCTEUKKyV0b2tlbiBUX0VP
TAorJXRva2VuIDxzdHJpbmc+IFRfQVNTSUdOX1ZBTAorCislbGVmdCBUX09SCislbGVmdCBUX0FO
RAorJWxlZnQgVF9FUVVBTCBUX1VORVFVQUwKKyVsZWZ0IFRfTEVTUyBUX0xFU1NfRVFVQUwgVF9H
UkVBVEVSIFRfR1JFQVRFUl9FUVVBTAorJW5vbmFzc29jIFRfTk9UCisKKyV0eXBlIDxzdHJpbmc+
IHByb21wdAorJXR5cGUgPHN5bWJvbD4gbm9uY29uc3Rfc3ltYm9sCisldHlwZSA8c3ltYm9sPiBz
eW1ib2wKKyV0eXBlIDx0eXBlPiB0eXBlIGxvZ2ljX3R5cGUgZGVmYXVsdAorJXR5cGUgPGV4cHI+
IGV4cHIKKyV0eXBlIDxleHByPiBpZl9leHByCisldHlwZSA8c3RyaW5nPiBlbmQKKyV0eXBlIDxt
ZW51PiBpZl9lbnRyeSBtZW51X2VudHJ5IGNob2ljZV9lbnRyeQorJXR5cGUgPHN0cmluZz4gd29y
ZF9vcHQgYXNzaWduX3ZhbAorJXR5cGUgPGZsYXZvcj4gYXNzaWduX29wCisKKyVkZXN0cnVjdG9y
IHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRo
aXMgZW50cnlcbiIsCisJCSQkLT5maWxlLT5uYW1lLCAkJC0+bGluZW5vKTsKKwlpZiAoY3VycmVu
dF9tZW51ID09ICQkKQorCQltZW51X2VuZF9tZW51KCk7Cit9IGlmX2VudHJ5IG1lbnVfZW50cnkg
Y2hvaWNlX2VudHJ5CisKKyUlCitpbnB1dDogbWFpbm1lbnVfc3RtdCBzdG10X2xpc3QgfCBzdG10
X2xpc3Q7CisKKy8qIG1haW5tZW51IGVudHJ5ICovCisKK21haW5tZW51X3N0bXQ6IFRfTUFJTk1F
TlUgcHJvbXB0IFRfRU9MCit7CisJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5VTEwpOwor
fTsKKworc3RtdF9saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IHN0bXRfbGlzdCBjb21tb25fc3Rt
dAorCXwgc3RtdF9saXN0IGNob2ljZV9zdG10CisJfCBzdG10X2xpc3QgbWVudV9zdG10CisJfCBz
dG10X2xpc3QgVF9XT1JEIGVycm9yIFRfRU9MCXsgemNvbmZfZXJyb3IoInVua25vd24gc3RhdGVt
ZW50IFwiJXNcIiIsICQyKTsgfQorCXwgc3RtdF9saXN0IGVycm9yIFRfRU9MCQl7IHpjb25mX2Vy
cm9yKCJpbnZhbGlkIHN0YXRlbWVudCIpOyB9Cis7CisKK2NvbW1vbl9zdG10OgorCSAgaWZfc3Rt
dAorCXwgY29tbWVudF9zdG10CisJfCBjb25maWdfc3RtdAorCXwgbWVudWNvbmZpZ19zdG10CisJ
fCBzb3VyY2Vfc3RtdAorCXwgYXNzaWdubWVudF9zdG10Cis7CisKKy8qIGNvbmZpZy9tZW51Y29u
ZmlnIGVudHJ5ICovCisKK2NvbmZpZ19lbnRyeV9zdGFydDogVF9DT05GSUcgbm9uY29uc3Rfc3lt
Ym9sIFRfRU9MCit7CisJJDItPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwltZW51X2FkZF9l
bnRyeSgkMik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7Cit9OworCitjb25maWdfc3Rt
dDogY29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlzdAoreworCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSk7Cit9OworCittZW51Y29uZmlnX2VudHJ5X3N0YXJ0OiBUX01FTlVDT05GSUcgbm9uY29u
c3Rfc3ltYm9sIFRfRU9MCit7CisJJDItPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwltZW51
X2FkZF9lbnRyeSgkMik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudWNvbmZpZyAl
c1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDItPm5hbWUpOworfTsKKwor
bWVudWNvbmZpZ19zdG10OiBtZW51Y29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlz
dAoreworCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCisJCWN1cnJlbnRfZW50cnktPnByb21w
dC0+dHlwZSA9IFBfTUVOVTsKKwllbHNlCisJCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25m
aWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisK
K2NvbmZpZ19vcHRpb25fbGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBjb25maWdfb3B0aW9uX2xp
c3QgY29uZmlnX29wdGlvbgorCXwgY29uZmlnX29wdGlvbl9saXN0IGRlcGVuZHMKKwl8IGNvbmZp
Z19vcHRpb25fbGlzdCBoZWxwCis7CisKK2NvbmZpZ19vcHRpb246IHR5cGUgcHJvbXB0X3N0bXRf
b3B0IFRfRU9MCit7CisJbWVudV9zZXRfdHlwZSgkMSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAi
JXM6JWQ6dHlwZSgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJ
CSQxKTsKK307CisKK2NvbmZpZ19vcHRpb246IFRfUFJPTVBUIHByb21wdCBpZl9leHByIFRfRU9M
Cit7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMiwgJDMpOworCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Cit9OworCitjb25maWdfb3B0aW9uOiBkZWZhdWx0IGV4cHIgaWZfZXhwciBUX0VPTAoreworCW1l
bnVfYWRkX2V4cHIoUF9ERUZBVUxULCAkMiwgJDMpOworCWlmICgkMSAhPSBTX1VOS05PV04pCisJ
CW1lbnVfc2V0X3R5cGUoJDEpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHQo
JXUpXG4iLAorCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkkMSk7Cit9Owor
Citjb25maWdfb3B0aW9uOiBUX1NFTEVDVCBub25jb25zdF9zeW1ib2wgaWZfZXhwciBUX0VPTAor
eworCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgJDIsICQzKTsKKwlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDpzZWxlY3RcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwor
fTsKKworY29uZmlnX29wdGlvbjogVF9JTVBMWSBub25jb25zdF9zeW1ib2wgaWZfZXhwciBUX0VP
TAoreworCW1lbnVfYWRkX3N5bWJvbChQX0lNUExZLCAkMiwgJDMpOworCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOmltcGx5XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
K307CisKK2NvbmZpZ19vcHRpb246IFRfUkFOR0Ugc3ltYm9sIHN5bWJvbCBpZl9leHByIFRfRU9M
Cit7CisJbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9SQU5HRSwkMiwg
JDMpLCAkNCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cmFuZ2VcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY29uZmlnX29wdGlvbjogVF9PUFRJT04g
VF9NT0RVTEVTIFRfRU9MCit7CisJbWVudV9hZGRfb3B0aW9uX21vZHVsZXMoKTsKK307CisKK2Nv
bmZpZ19vcHRpb246IFRfT1BUSU9OIFRfREVGQ09ORklHX0xJU1QgVF9FT0wKK3sKKwltZW51X2Fk
ZF9vcHRpb25fZGVmY29uZmlnX2xpc3QoKTsKK307CisKK2NvbmZpZ19vcHRpb246IFRfT1BUSU9O
IFRfQUxMTk9DT05GSUdfWSBUX0VPTAoreworCW1lbnVfYWRkX29wdGlvbl9hbGxub2NvbmZpZ195
KCk7Cit9OworCisvKiBjaG9pY2UgZW50cnkgKi8KKworY2hvaWNlOiBUX0NIT0lDRSB3b3JkX29w
dCBUX0VPTAoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIFNZTUJPTF9D
SE9JQ0UpOworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX05PX1dSSVRFOworCW1lbnVfYWRkX2VudHJ5
KHN5bSk7CisJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7CisJZnJlZSgkMik7
CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1lKCks
IHpjb25mX2xpbmVubygpKTsKK307CisKK2Nob2ljZV9lbnRyeTogY2hvaWNlIGNob2ljZV9vcHRp
b25fbGlzdAoreworCSQkID0gbWVudV9hZGRfbWVudSgpOworfTsKKworY2hvaWNlX2VuZDogZW5k
Cit7CisJaWYgKHpjb25mX2VuZHRva2VuKCQxLCAiY2hvaWNlIikpIHsKKwkJbWVudV9lbmRfbWVu
dSgpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2VcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK307CisKK2Nob2ljZV9zdG10OiBjaG9pY2Vf
ZW50cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQKKzsKKworY2hvaWNlX29wdGlvbl9saXN0Ogor
CSAgLyogZW1wdHkgKi8KKwl8IGNob2ljZV9vcHRpb25fbGlzdCBjaG9pY2Vfb3B0aW9uCisJfCBj
aG9pY2Vfb3B0aW9uX2xpc3QgZGVwZW5kcworCXwgY2hvaWNlX29wdGlvbl9saXN0IGhlbHAKKzsK
KworY2hvaWNlX29wdGlvbjogVF9QUk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wKK3sKKwltZW51
X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQyLCAkMyk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK2No
b2ljZV9vcHRpb246IGxvZ2ljX3R5cGUgcHJvbXB0X3N0bXRfb3B0IFRfRU9MCit7CisJbWVudV9z
ZXRfdHlwZSgkMSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJ
ICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQxKTsKK307CisKK2Nob2lj
ZV9vcHRpb246IFRfT1BUSU9OQUwgVF9FT0wKK3sKKwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdz
IHw9IFNZTUJPTF9PUFRJT05BTDsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpvcHRpb25h
bFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjaG9pY2Vfb3B0
aW9uOiBUX0RFRkFVTFQgbm9uY29uc3Rfc3ltYm9sIGlmX2V4cHIgVF9FT0wKK3sKKwltZW51X2Fk
ZF9zeW1ib2woUF9ERUZBVUxULCAkMiwgJDMpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk
OmRlZmF1bHRcbiIsCisJICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwor
fTsKKwordHlwZToKKwkgIGxvZ2ljX3R5cGUKKwl8IFRfSU5UCQkJeyAkJCA9IFNfSU5UOyB9CisJ
fCBUX0hFWAkJCXsgJCQgPSBTX0hFWDsgfQorCXwgVF9TVFJJTkcJCXsgJCQgPSBTX1NUUklORzsg
fQorCitsb2dpY190eXBlOgorCSAgVF9CT09MCQl7ICQkID0gU19CT09MRUFOOyB9CisJfCBUX1RS
SVNUQVRFCQl7ICQkID0gU19UUklTVEFURTsgfQorCitkZWZhdWx0OgorCSAgVF9ERUZBVUxUCQl7
ICQkID0gU19VTktOT1dOOyB9CisJfCBUX0RFRl9CT09MCQl7ICQkID0gU19CT09MRUFOOyB9CisJ
fCBUX0RFRl9UUklTVEFURQl7ICQkID0gU19UUklTVEFURTsgfQorCitjaG9pY2VfYmxvY2s6CisJ
ICAvKiBlbXB0eSAqLworCXwgY2hvaWNlX2Jsb2NrIGNvbW1vbl9zdG10Cis7CisKKy8qIGlmIGVu
dHJ5ICovCisKK2lmX2VudHJ5OiBUX0lGIGV4cHIgVF9FT0wKK3sKKwlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJbWVu
dV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfZGVwKCQyKTsKKwkkJCA9IG1lbnVfYWRkX21l
bnUoKTsKK307CisKK2lmX2VuZDogZW5kCit7CisJaWYgKHpjb25mX2VuZHRva2VuKCQxLCAiaWYi
KSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVu
ZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9Cit9OworCitpZl9z
dG10OiBpZl9lbnRyeSBzdG10X2xpc3QgaWZfZW5kCis7CisKKy8qIG1lbnUgZW50cnkgKi8KKwor
bWVudTogVF9NRU5VIHByb21wdCBUX0VPTAoreworCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1l
bnVfYWRkX3Byb21wdChQX01FTlUsICQyLCBOVUxMKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIl
czolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK21l
bnVfZW50cnk6IG1lbnUgbWVudV9vcHRpb25fbGlzdAoreworCSQkID0gbWVudV9hZGRfbWVudSgp
OworfTsKKworbWVudV9lbmQ6IGVuZAoreworCWlmICh6Y29uZl9lbmR0b2tlbigkMSwgIm1lbnUi
KSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVu
ZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK307CisKK21l
bnVfc3RtdDogbWVudV9lbnRyeSBzdG10X2xpc3QgbWVudV9lbmQKKzsKKworbWVudV9vcHRpb25f
bGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBtZW51X29wdGlvbl9saXN0IHZpc2libGUKKwl8IG1l
bnVfb3B0aW9uX2xpc3QgZGVwZW5kcworOworCitzb3VyY2Vfc3RtdDogVF9TT1VSQ0UgcHJvbXB0
IFRfRU9MCit7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c291cmNlICVzXG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMik7CisJemNvbmZfbmV4dGZpbGUoJDIpOwor
CWZyZWUoJDIpOworfTsKKworLyogY29tbWVudCBlbnRyeSAqLworCitjb21tZW50OiBUX0NPTU1F
TlQgcHJvbXB0IFRfRU9MCit7CisJbWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfcHJv
bXB0KFBfQ09NTUVOVCwgJDIsIE5VTEwpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNv
bW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY29tbWVu
dF9zdG10OiBjb21tZW50IGNvbW1lbnRfb3B0aW9uX2xpc3QKKzsKKworY29tbWVudF9vcHRpb25f
bGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBjb21tZW50X29wdGlvbl9saXN0IGRlcGVuZHMKKzsK
KworLyogaGVscCBvcHRpb24gKi8KKworaGVscF9zdGFydDogVF9IRUxQIFRfRU9MCit7CisJcHJp
bnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSk7CisJemNvbmZfc3RhcnRoZWxwKCk7Cit9OworCitoZWxwOiBoZWxwX3N0YXJ0IFRf
SEVMUFRFWFQKK3sKKwlpZiAoY3VycmVudF9lbnRyeS0+aGVscCkgeworCQlmcmVlKGN1cnJlbnRf
ZW50cnktPmhlbHApOworCQl6Y29uZnByaW50KCJ3YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBt
b3JlIHRoYW4gb25lIGhlbHAgdGV4dCAtLSBvbmx5IHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQi
LAorCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOworCX0KKwor
CS8qIElzIHRoZSBoZWxwIHRleHQgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2U/ICovCisJaWYgKCQy
W3N0cnNwbigkMiwgIiBcZlxuXHJcdFx2IildID09ICdcMCcpCisJCXpjb25mcHJpbnQoIndhcm5p
bmc6ICclcycgZGVmaW5lZCB3aXRoIGJsYW5rIGhlbHAgdGV4dCIsCisJCQkgICBjdXJyZW50X2Vu
dHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7CisKKwljdXJyZW50X2VudHJ5LT5oZWxwID0g
JDI7Cit9OworCisvKiBkZXBlbmRzIG9wdGlvbiAqLworCitkZXBlbmRzOiBUX0RFUEVORFMgVF9P
TiBleHByIFRfRU9MCit7CisJbWVudV9hZGRfZGVwKCQzKTsKKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
K307CisKKy8qIHZpc2liaWxpdHkgb3B0aW9uICovCit2aXNpYmxlOiBUX1ZJU0lCTEUgaWZfZXhw
ciBUX0VPTAoreworCW1lbnVfYWRkX3Zpc2liaWxpdHkoJDIpOworfTsKKworLyogcHJvbXB0IHN0
YXRlbWVudCAqLworCitwcm9tcHRfc3RtdF9vcHQ6CisJICAvKiBlbXB0eSAqLworCXwgcHJvbXB0
IGlmX2V4cHIKK3sKKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQxLCAkMik7Cit9OworCitw
cm9tcHQ6CSAgVF9XT1JECisJfCBUX1dPUkRfUVVPVEUKKzsKKworZW5kOgkgIFRfRU5ETUVOVSBU
X0VPTAl7ICQkID0gIm1lbnUiOyB9CisJfCBUX0VORENIT0lDRSBUX0VPTAl7ICQkID0gImNob2lj
ZSI7IH0KKwl8IFRfRU5ESUYgVF9FT0wJCXsgJCQgPSAiaWYiOyB9Cis7CisKK2lmX2V4cHI6ICAv
KiBlbXB0eSAqLwkJCXsgJCQgPSBOVUxMOyB9CisJfCBUX0lGIGV4cHIJCQl7ICQkID0gJDI7IH0K
KzsKKworZXhwcjoJICBzeW1ib2wJCQkJeyAkJCA9IGV4cHJfYWxsb2Nfc3ltYm9sKCQxKTsgfQor
CXwgc3ltYm9sIFRfTEVTUyBzeW1ib2wJCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfTFRILCAk
MSwgJDMpOyB9CisJfCBzeW1ib2wgVF9MRVNTX0VRVUFMIHN5bWJvbAkJeyAkJCA9IGV4cHJfYWxs
b2NfY29tcChFX0xFUSwgJDEsICQzKTsgfQorCXwgc3ltYm9sIFRfR1JFQVRFUiBzeW1ib2wJCXsg
JCQgPSBleHByX2FsbG9jX2NvbXAoRV9HVEgsICQxLCAkMyk7IH0KKwl8IHN5bWJvbCBUX0dSRUFU
RVJfRVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfR0VRLCAkMSwgJDMpOyB9
CisJfCBzeW1ib2wgVF9FUVVBTCBzeW1ib2wJCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfRVFV
QUwsICQxLCAkMyk7IH0KKwl8IHN5bWJvbCBUX1VORVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9h
bGxvY19jb21wKEVfVU5FUVVBTCwgJDEsICQzKTsgfQorCXwgVF9PUEVOX1BBUkVOIGV4cHIgVF9D
TE9TRV9QQVJFTgl7ICQkID0gJDI7IH0KKwl8IFRfTk9UIGV4cHIJCQkJeyAkJCA9IGV4cHJfYWxs
b2Nfb25lKEVfTk9ULCAkMik7IH0KKwl8IGV4cHIgVF9PUiBleHByCQkJeyAkJCA9IGV4cHJfYWxs
b2NfdHdvKEVfT1IsICQxLCAkMyk7IH0KKwl8IGV4cHIgVF9BTkQgZXhwcgkJCXsgJCQgPSBleHBy
X2FsbG9jX3R3byhFX0FORCwgJDEsICQzKTsgfQorOworCisvKiBGb3Igc3ltYm9sIGRlZmluaXRp
b25zLCBzZWxlY3RzLCBldGMuLCB3aGVyZSBxdW90ZXMgYXJlIG5vdCBhY2NlcHRlZCAqLworbm9u
Y29uc3Rfc3ltYm9sOiBUX1dPUkQgeyAkJCA9IHN5bV9sb29rdXAoJDEsIDApOyBmcmVlKCQxKTsg
fTsKKworc3ltYm9sOgkgIG5vbmNvbnN0X3N5bWJvbAorCXwgVF9XT1JEX1FVT1RFCXsgJCQgPSBz
eW1fbG9va3VwKCQxLCBTWU1CT0xfQ09OU1QpOyBmcmVlKCQxKTsgfQorOworCit3b3JkX29wdDog
LyogZW1wdHkgKi8JCQl7ICQkID0gTlVMTDsgfQorCXwgVF9XT1JECisKKy8qIGFzc2lnbm1lbnQg
c3RhdGVtZW50ICovCisKK2Fzc2lnbm1lbnRfc3RtdDogIFRfV09SRCBhc3NpZ25fb3AgYXNzaWdu
X3ZhbCBUX0VPTAl7IHZhcmlhYmxlX2FkZCgkMSwgJDMsICQyKTsgZnJlZSgkMSk7IGZyZWUoJDMp
OyB9CisKK2Fzc2lnbl9vcDoKKwkgIFRfRVFVQUwJeyAkJCA9IFZBUl9SRUNVUlNJVkU7IH0KKwl8
IFRfQ09MT05fRVFVQUwJeyAkJCA9IFZBUl9TSU1QTEU7IH0KKwl8IFRfUExVU19FUVVBTAl7ICQk
ID0gVkFSX0FQUEVORDsgfQorOworCithc3NpZ25fdmFsOgorCS8qIGVtcHR5ICovCQl7ICQkID0g
eHN0cmR1cCgiIik7IH07CisJfCBUX0FTU0lHTl9WQUwKKzsKKworJSUKKwordm9pZCBjb25mX3Bh
cnNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOwor
CisJemNvbmZfaW5pdHNjYW4obmFtZSk7CisKKwlfbWVudV9pbml0KCk7CisKKwlpZiAoZ2V0ZW52
KCJaQ09ORl9ERUJVRyIpKQorCQl5eWRlYnVnID0gMTsKKwl5eXBhcnNlKCk7CisKKwkvKiBWYXJp
YWJsZXMgYXJlIGV4cGFuZGVkIGluIHRoZSBwYXJzZSBwaGFzZS4gV2UgY2FuIGZyZWUgdGhlbSBo
ZXJlLiAqLworCXZhcmlhYmxlX2FsbF9kZWwoKTsKKworCWlmICh5eW5lcnJzKQorCQlleGl0KDEp
OworCWlmICghbW9kdWxlc19zeW0pCisJCW1vZHVsZXNfc3ltID0gc3ltX2ZpbmQoICJuIiApOwor
CisJaWYgKCFtZW51X2hhc19wcm9tcHQoJnJvb3RtZW51KSkgeworCQljdXJyZW50X2VudHJ5ID0g
JnJvb3RtZW51OworCQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAiTWFpbiBtZW51IiwgTlVMTCk7
CisJfQorCisJbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOworCWZvcl9hbGxfc3ltYm9scyhpLCBz
eW0pIHsKKwkJaWYgKHN5bV9jaGVja19kZXBzKHN5bSkpCisJCQl5eW5lcnJzKys7CisJfQorCWlm
ICh5eW5lcnJzKQorCQlleGl0KDEpOworCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOworfQorCitz
dGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBjaGFyICp0b2tlbm5hbWUsCisJCQkgICBj
b25zdCBjaGFyICpleHBlY3RlZF90b2tlbm5hbWUpCit7CisJaWYgKHN0cmNtcCh0b2tlbm5hbWUs
IGV4cGVjdGVkX3Rva2VubmFtZSkpIHsKKwkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3
aXRoaW4gJXMgYmxvY2siLAorCQkJICAgIHRva2VubmFtZSwgZXhwZWN0ZWRfdG9rZW5uYW1lKTsK
KwkJeXluZXJycysrOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChjdXJyZW50X21lbnUtPmZp
bGUgIT0gY3VycmVudF9maWxlKSB7CisJCXpjb25mX2Vycm9yKCInJXMnIGluIGRpZmZlcmVudCBm
aWxlIHRoYW4gJyVzJyIsCisJCQkgICAgdG9rZW5uYW1lLCBleHBlY3RlZF90b2tlbm5hbWUpOwor
CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlvbiBvZiB0aGUgJyVzJ1xuIiwKKwkJCWN1
cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sCisJCQlleHBlY3Rl
ZF90b2tlbm5hbWUpOworCQl5eW5lcnJzKys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRm
KHN0ZGVyciwgZXJyLCBhcCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7
Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQorewor
CXZhX2xpc3QgYXA7CisKKwl5eW5lcnJzKys7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJ
dmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJy
LCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICplcnIpCit7CisJ
ZnByaW50ZihzdGRlcnIsICIlczolZDogJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCkgKyAxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJ
TEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnA7CisJaW50IGxlbjsK
KworCXB1dGMoJyInLCBvdXQpOworCXdoaWxlICgocCA9IHN0cmNocihzdHIsICciJykpKSB7CisJ
CWxlbiA9IHAgLSBzdHI7CisJCWlmIChsZW4pCisJCQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4s
IHN0cik7CisJCWZwdXRzKCJcXFwiIiwgb3V0KTsKKwkJc3RyID0gcCArIDE7CisJfQorCWZwdXRz
KHN0ciwgb3V0KTsKKwlwdXRjKCciJywgb3V0KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3lt
Ym9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3lt
ID0gbWVudS0+c3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWlmIChzeW1faXNfY2hv
aWNlKHN5bSkpCisJCWZwcmludGYob3V0LCAiXG5jaG9pY2VcbiIpOworCWVsc2UKKwkJZnByaW50
ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19CT09MRUFOOgorCQlmcHV0cygiICBib29sXG4iLCBvdXQpOworCQlicmVhazsK
KwljYXNlIFNfVFJJU1RBVEU6CisJCWZwdXRzKCIgIHRyaXN0YXRlXG4iLCBvdXQpOworCQlicmVh
azsKKwljYXNlIFNfU1RSSU5HOgorCQlmcHV0cygiICBzdHJpbmdcbiIsIG91dCk7CisJCWJyZWFr
OworCWNhc2UgU19JTlQ6CisJCWZwdXRzKCIgIGludGVnZXJcbiIsIG91dCk7CisJCWJyZWFrOwor
CWNhc2UgU19IRVg6CisJCWZwdXRzKCIgIGhleFxuIiwgb3V0KTsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJZnB1dHMoIiAgPz8/XG4iLCBvdXQpOworCQlicmVhazsKKwl9CisJZm9yIChwcm9wID0g
c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlpZiAocHJvcC0+bWVudSAh
PSBtZW51KQorCQkJY29udGludWU7CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBf
UFJPTVBUOgorCQkJZnB1dHMoIiAgcHJvbXB0ICIsIG91dCk7CisJCQlwcmludF9xdW90ZWRfc3Ry
aW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUu
ZXhwcikpIHsKKwkJCQlmcHV0cygiIGlmICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQocHJvcC0+
dmlzaWJsZS5leHByLCBvdXQpOworCQkJfQorCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFr
OworCQljYXNlIFBfREVGQVVMVDoKKwkJCWZwdXRzKCAiICBkZWZhdWx0ICIsIG91dCk7CisJCQll
eHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52
aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiBpZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50
KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJCX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJ
CQlicmVhazsKKwkJY2FzZSBQX0NIT0lDRToKKwkJCWZwdXRzKCIgICNjaG9pY2UgdmFsdWVcbiIs
IG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1NFTEVDVDoKKwkJCWZwdXRzKCAiICBzZWxlY3Qg
Iiwgb3V0KTsKKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4n
LCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9JTVBMWToKKwkJCWZwdXRzKCAiICBpbXBseSAi
LCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbics
IG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1JBTkdFOgorCQkJZnB1dHMoICIgIHJhbmdlICIs
IG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywg
b3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfTUVOVToKKwkJCWZwdXRzKCAiICBtZW51ICIsIG91
dCk7CisJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQlmcHV0Yygn
XG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9TWU1CT0w6CisJCQlmcHV0cyggIiAgc3lt
Ym9sICIsIG91dCk7CisJCQlmcHJpbnRmKG91dCwgIiVzXG4iLCBwcm9wLT5zeW0tPm5hbWUpOwor
CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKG91dCwgIiAgdW5rbm93biBwcm9wICVk
IVxuIiwgcHJvcC0+dHlwZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAobWVudS0+aGVscCkg
eworCQlpbnQgbGVuID0gc3RybGVuKG1lbnUtPmhlbHApOworCQl3aGlsZSAobWVudS0+aGVscFst
LWxlbl0gPT0gJ1xuJykKKwkJCW1lbnUtPmhlbHBbbGVuXSA9IDA7CisJCWZwcmludGYob3V0LCAi
ICBoZWxwXG4lc1xuIiwgbWVudS0+aGVscCk7CisJfQorfQorCit2b2lkIHpjb25mZHVtcChGSUxF
ICpvdXQpCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKnN5bTsK
KwlzdHJ1Y3QgbWVudSAqbWVudTsKKworCW1lbnUgPSByb290bWVudS5saXN0OworCXdoaWxlICht
ZW51KSB7CisJCWlmICgoc3ltID0gbWVudS0+c3ltKSkKKwkJCXByaW50X3N5bWJvbChvdXQsIG1l
bnUpOworCQllbHNlIGlmICgocHJvcCA9IG1lbnUtPnByb21wdCkpIHsKKwkJCXN3aXRjaCAocHJv
cC0+dHlwZSkgeworCQkJY2FzZSBQX0NPTU1FTlQ6CisJCQkJZnB1dHMoIlxuY29tbWVudCAiLCBv
dXQpOworCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCQlmcHV0
cygiXG4iLCBvdXQpOworCQkJCWJyZWFrOworCQkJY2FzZSBQX01FTlU6CisJCQkJZnB1dHMoIlxu
bWVudSAiLCBvdXQpOworCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsK
KwkJCQlmcHV0cygiXG4iLCBvdXQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQk7CisJ
CQl9CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCQlmcHV0
cygiICBkZXBlbmRzICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCBvdXQpOworCQkJCWZwdXRjKCdcbicsIG91dCk7CisJCQl9CisJCX0KKworCQlpZiAobWVudS0+
bGlzdCkKKwkJCW1lbnUgPSBtZW51LT5saXN0OworCQllbHNlIGlmIChtZW51LT5uZXh0KQorCQkJ
bWVudSA9IG1lbnUtPm5leHQ7CisJCWVsc2Ugd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkg
eworCQkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQor
CQkJCWZwdXRzKCJcbmVuZG1lbnVcbiIsIG91dCk7CisJCQlpZiAobWVudS0+bmV4dCkgeworCQkJ
CW1lbnUgPSBtZW51LT5uZXh0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisjaW5j
bHVkZSAidXRpbC5jIgorI2luY2x1ZGUgIm1lbnUuYyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvcHJlcHJvY2Vzcy5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyZGZiZgotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNTczIEBA
CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8KKy8vIENvcHlyaWdodCAo
QykgMjAxOCBNYXNhaGlybyBZYW1hZGEgPHlhbWFkYS5tYXNhaGlyb0Bzb2Npb25leHQuY29tPgor
CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRi
b29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl
IDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJsa2MuaCIKKworI2Rl
ZmluZSBBUlJBWV9TSVpFKGFycikJCShzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCisK
K3N0YXRpYyBjaGFyICpleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhjb25zdCBjaGFyICppbiwgaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0
dXJuKSkgcHBlcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOwor
CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgY3VycmVudF9maWxlLT5uYW1lLCB5eWxpbmVu
byk7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFw
KTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCWV4aXQoMSk7Cit9
CisKKy8qCisgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqLworc3RhdGljIExJU1RfSEVBRChl
bnZfbGlzdCk7CisKK3N0cnVjdCBlbnYgeworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsdWU7CisJ
c3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworc3RhdGljIHZvaWQgZW52X2FkZChjb25zdCBj
aGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgZW52ICplOworCisJZSA9
IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJZS0+bmFtZSA9IHhzdHJkdXAobmFtZSk7CisJZS0+dmFs
dWUgPSB4c3RyZHVwKHZhbHVlKTsKKworCWxpc3RfYWRkX3RhaWwoJmUtPm5vZGUsICZlbnZfbGlz
dCk7Cit9CisKK3N0YXRpYyB2b2lkIGVudl9kZWwoc3RydWN0IGVudiAqZSkKK3sKKwlsaXN0X2Rl
bCgmZS0+bm9kZSk7CisJZnJlZShlLT5uYW1lKTsKKwlmcmVlKGUtPnZhbHVlKTsKKwlmcmVlKGUp
OworfQorCisvKiBUaGUgcmV0dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZSAq
Lworc3RhdGljIGNoYXIgKmVudl9leHBhbmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qg
ZW52ICplOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCEqbmFtZSkKKwkJcmV0dXJuIE5V
TEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZlbnZfbGlzdCwgbm9kZSkgeworCQlpZiAo
IXN0cmNtcChuYW1lLCBlLT5uYW1lKSkKKwkJCXJldHVybiB4c3RyZHVwKGUtPnZhbHVlKTsKKwl9
CisKKwl2YWx1ZSA9IGdldGVudihuYW1lKTsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gTlVMTDsK
KworCS8qCisJICogV2UgbmVlZCB0byByZW1lbWJlciBhbGwgcmVmZXJlbmNlZCBlbnZpcm9ubWVu
dCB2YXJpYWJsZXMuCisJICogVGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IHRvIGluY2x1ZGUvY29u
ZmlnL2F1dG8uY29uZi5jbWQKKwkgKi8KKwllbnZfYWRkKG5hbWUsIHZhbHVlKTsKKworCXJldHVy
biB4c3RyZHVwKHZhbHVlKTsKK30KKwordm9pZCBlbnZfd3JpdGVfZGVwKEZJTEUgKmYsIGNvbnN0
IGNoYXIgKmF1dG9jb25maWdfbmFtZSkKK3sKKwlzdHJ1Y3QgZW52ICplLCAqdG1wOworCisJbGlz
dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcCwgJmVudl9saXN0LCBub2RlKSB7CisJCWZwcmlu
dGYoZiwgImlmbmVxIFwiJCglcylcIiBcIiVzXCJcbiIsIGUtPm5hbWUsIGUtPnZhbHVlKTsKKwkJ
ZnByaW50ZihmLCAiJXM6IEZPUkNFXG4iLCBhdXRvY29uZmlnX25hbWUpOworCQlmcHJpbnRmKGYs
ICJlbmRpZlxuIik7CisJCWVudl9kZWwoZSk7CisJfQorfQorCisvKgorICogQnVpbHQtaW4gZnVu
Y3Rpb25zCisgKi8KK3N0cnVjdCBmdW5jdGlvbiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNp
Z25lZCBpbnQgbWluX2FyZ3M7CisJdW5zaWduZWQgaW50IG1heF9hcmdzOworCWNoYXIgKigqZnVu
YykoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Cit9OworCitzdGF0aWMgY2hhciAqZG9fZXJyb3Jf
aWYoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAieSIp
KQorCQlwcGVycm9yKCIlcyIsIGFyZ3ZbMV0pOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp
YyBjaGFyICpkb19maWxlbmFtZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXJldHVybiB4
c3RyZHVwKGN1cnJlbnRfZmlsZS0+bmFtZSk7Cit9CisKK3N0YXRpYyBjaGFyICpkb19pbmZvKGlu
dCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJcHJpbnRmKCIlc1xuIiwgYXJndlswXSk7CisKKwly
ZXR1cm4geHN0cmR1cCgiIik7Cit9CisKK3N0YXRpYyBjaGFyICpkb19saW5lbm8oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyIGJ1ZlsxNl07CisKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwg
eXlsaW5lbm8pOworCisJcmV0dXJuIHhzdHJkdXAoYnVmKTsKK30KKworc3RhdGljIGNoYXIgKmRv
X3NoZWxsKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJRklMRSAqcDsKKwljaGFyIGJ1Zlsy
NTZdOworCWNoYXIgKmNtZDsKKwlzaXplX3QgbnJlYWQ7CisJaW50IGk7CisKKwljbWQgPSBhcmd2
WzBdOworCisJcCA9IHBvcGVuKGNtZCwgInIiKTsKKwlpZiAoIXApIHsKKwkJcGVycm9yKGNtZCk7
CisJCWV4aXQoMSk7CisJfQorCisJbnJlYWQgPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBw
KTsKKwlpZiAobnJlYWQgPT0gc2l6ZW9mKGJ1ZikpCisJCW5yZWFkLS07CisKKwkvKiByZW1vdmUg
dHJhaWxpbmcgbmV3IGxpbmVzICovCisJd2hpbGUgKG5yZWFkID4gMCAmJiBidWZbbnJlYWQgLSAx
XSA9PSAnXG4nKQorCQlucmVhZC0tOworCisJYnVmW25yZWFkXSA9IDA7CisKKwkvKiByZXBsYWNl
IGEgbmV3IGxpbmUgd2l0aCBhIHNwYWNlICovCisJZm9yIChpID0gMDsgaSA8IG5yZWFkOyBpKysp
IHsKKwkJaWYgKGJ1ZltpXSA9PSAnXG4nKQorCQkJYnVmW2ldID0gJyAnOworCX0KKworCWlmIChw
Y2xvc2UocCkgPT0gLTEpIHsKKwkJcGVycm9yKGNtZCk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0
dXJuIHhzdHJkdXAoYnVmKTsKK30KKworc3RhdGljIGNoYXIgKmRvX3dhcm5pbmdfaWYoaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAieSIpKQorCQlmcHJp
bnRmKHN0ZGVyciwgIiVzOiVkOiAlc1xuIiwKKwkJCWN1cnJlbnRfZmlsZS0+bmFtZSwgeXlsaW5l
bm8sIGFyZ3ZbMV0pOworCisJcmV0dXJuIHhzdHJkdXAoIiIpOworfQorCitzdGF0aWMgY29uc3Qg
c3RydWN0IGZ1bmN0aW9uIGZ1bmN0aW9uX3RhYmxlW10gPSB7CisJLyogTmFtZQkJTUlOCU1BWAlG
dW5jdGlvbiAqLworCXsgImVycm9yLWlmIiwJMiwJMiwJZG9fZXJyb3JfaWYgfSwKKwl7ICJmaWxl
bmFtZSIsCTAsCTAsCWRvX2ZpbGVuYW1lIH0sCisJeyAiaW5mbyIsCTEsCTEsCWRvX2luZm8gfSwK
Kwl7ICJsaW5lbm8iLAkwLAkwLAlkb19saW5lbm8gfSwKKwl7ICJzaGVsbCIsCTEsCTEsCWRvX3No
ZWxsIH0sCisJeyAid2FybmluZy1pZiIsCTIsCTIsCWRvX3dhcm5pbmdfaWYgfSwKK307CisKKyNk
ZWZpbmUgRlVOQ1RJT05fTUFYX0FSR1MJCTE2CisKK3N0YXRpYyBjaGFyICpmdW5jdGlvbl9leHBh
bmQoY29uc3QgY2hhciAqbmFtZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBz
dHJ1Y3QgZnVuY3Rpb24gKmY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la
RShmdW5jdGlvbl90YWJsZSk7IGkrKykgeworCQlmID0gJmZ1bmN0aW9uX3RhYmxlW2ldOworCQlp
ZiAoc3RyY21wKGYtPm5hbWUsIG5hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGFyZ2MgPCBm
LT5taW5fYXJncykKKwkJCXBwZXJyb3IoInRvbyBmZXcgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3Nl
ZCB0byAnJXMnIiwKKwkJCQluYW1lKTsKKworCQlpZiAoYXJnYyA+IGYtPm1heF9hcmdzKQorCQkJ
cHBlcnJvcigidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCB0byAnJXMnIiwKKwkJ
CQluYW1lKTsKKworCQlyZXR1cm4gZi0+ZnVuYyhhcmdjLCBhcmd2KTsKKwl9CisKKwlyZXR1cm4g
TlVMTDsKK30KKworLyoKKyAqIFZhcmlhYmxlcyAoYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMp
CisgKi8KK3N0YXRpYyBMSVNUX0hFQUQodmFyaWFibGVfbGlzdCk7CisKK3N0cnVjdCB2YXJpYWJs
ZSB7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKwllbnVtIHZhcmlhYmxlX2ZsYXZvciBm
bGF2b3I7CisJaW50IGV4cF9jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCitz
dGF0aWMgc3RydWN0IHZhcmlhYmxlICp2YXJpYWJsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkK
K3sKKwlzdHJ1Y3QgdmFyaWFibGUgKnY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHYsICZ2YXJp
YWJsZV9saXN0LCBub2RlKSB7CisJCWlmICghc3RyY21wKG5hbWUsIHYtPm5hbWUpKQorCQkJcmV0
dXJuIHY7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICp2YXJpYWJsZV9l
eHBhbmQoY29uc3QgY2hhciAqbmFtZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1
Y3QgdmFyaWFibGUgKnY7CisJY2hhciAqcmVzOworCisJdiA9IHZhcmlhYmxlX2xvb2t1cChuYW1l
KTsKKwlpZiAoIXYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGFyZ2MgPT0gMCAmJiB2LT5leHBf
Y291bnQpCisJCXBwZXJyb3IoIlJlY3Vyc2l2ZSB2YXJpYWJsZSAnJXMnIHJlZmVyZW5jZXMgaXRz
ZWxmIChldmVudHVhbGx5KSIsCisJCQluYW1lKTsKKworCWlmICh2LT5leHBfY291bnQgPiAxMDAw
KQorCQlwcGVycm9yKCJUb28gZGVlcCByZWN1cnNpdmUgZXhwYW5zaW9uIik7CisKKwl2LT5leHBf
Y291bnQrKzsKKworCWlmICh2LT5mbGF2b3IgPT0gVkFSX1JFQ1VSU0lWRSkKKwkJcmVzID0gZXhw
YW5kX3N0cmluZ193aXRoX2FyZ3Modi0+dmFsdWUsIGFyZ2MsIGFyZ3YpOworCWVsc2UKKwkJcmVz
ID0geHN0cmR1cCh2LT52YWx1ZSk7CisKKwl2LT5leHBfY291bnQtLTsKKworCXJldHVybiByZXM7
Cit9CisKK3ZvaWQgdmFyaWFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZh
bHVlLAorCQkgIGVudW0gdmFyaWFibGVfZmxhdm9yIGZsYXZvcikKK3sKKwlzdHJ1Y3QgdmFyaWFi
bGUgKnY7CisJY2hhciAqbmV3X3ZhbHVlOworCWJvb2wgYXBwZW5kID0gZmFsc2U7CisKKwl2ID0g
dmFyaWFibGVfbG9va3VwKG5hbWUpOworCWlmICh2KSB7CisJCS8qIEZvciBkZWZpbmVkIHZhcmlh
YmxlcywgKz0gaW5oZXJpdHMgdGhlIGV4aXN0aW5nIGZsYXZvciAqLworCQlpZiAoZmxhdm9yID09
IFZBUl9BUFBFTkQpIHsKKwkJCWZsYXZvciA9IHYtPmZsYXZvcjsKKwkJCWFwcGVuZCA9IHRydWU7
CisJCX0gZWxzZSB7CisJCQlmcmVlKHYtPnZhbHVlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZv
ciB1bmRlZmluZWQgdmFyaWFibGVzLCArPSBhc3N1bWVzIHRoZSByZWN1cnNpdmUgZmxhdm9yICov
CisJCWlmIChmbGF2b3IgPT0gVkFSX0FQUEVORCkKKwkJCWZsYXZvciA9IFZBUl9SRUNVUlNJVkU7
CisKKwkJdiA9IHhtYWxsb2Moc2l6ZW9mKCp2KSk7CisJCXYtPm5hbWUgPSB4c3RyZHVwKG5hbWUp
OworCQl2LT5leHBfY291bnQgPSAwOworCQlsaXN0X2FkZF90YWlsKCZ2LT5ub2RlLCAmdmFyaWFi
bGVfbGlzdCk7CisJfQorCisJdi0+Zmxhdm9yID0gZmxhdm9yOworCisJaWYgKGZsYXZvciA9PSBW
QVJfU0lNUExFKQorCQluZXdfdmFsdWUgPSBleHBhbmRfc3RyaW5nKHZhbHVlKTsKKwllbHNlCisJ
CW5ld192YWx1ZSA9IHhzdHJkdXAodmFsdWUpOworCisJaWYgKGFwcGVuZCkgeworCQl2LT52YWx1
ZSA9IHhyZWFsbG9jKHYtPnZhbHVlLAorCQkJCSAgICBzdHJsZW4odi0+dmFsdWUpICsgc3RybGVu
KG5ld192YWx1ZSkgKyAyKTsKKwkJc3RyY2F0KHYtPnZhbHVlLCAiICIpOworCQlzdHJjYXQodi0+
dmFsdWUsIG5ld192YWx1ZSk7CisJCWZyZWUobmV3X3ZhbHVlKTsKKwl9IGVsc2UgeworCQl2LT52
YWx1ZSA9IG5ld192YWx1ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZhcmlhYmxlX2RlbChzdHJ1
Y3QgdmFyaWFibGUgKnYpCit7CisJbGlzdF9kZWwoJnYtPm5vZGUpOworCWZyZWUodi0+bmFtZSk7
CisJZnJlZSh2LT52YWx1ZSk7CisJZnJlZSh2KTsKK30KKwordm9pZCB2YXJpYWJsZV9hbGxfZGVs
KHZvaWQpCit7CisJc3RydWN0IHZhcmlhYmxlICp2LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9l
bnRyeV9zYWZlKHYsIHRtcCwgJnZhcmlhYmxlX2xpc3QsIG5vZGUpCisJCXZhcmlhYmxlX2RlbCh2
KTsKK30KKworLyoKKyAqIEV2YWx1YXRlIGEgY2xhdXNlIHdpdGggYXJndW1lbnRzLiAgYXJnYy9h
cmd2IGFyZSBhcmd1bWVudHMgZnJvbSB0aGUgdXBwZXIKKyAqIGZ1bmN0aW9uIGNhbGwuCisgKgor
ICogUmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBkb25lCisgKi8KK3N0YXRpYyBj
aGFyICpldmFsX2NsYXVzZShjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGludCBhcmdjLCBj
aGFyICphcmd2W10pCit7CisJY2hhciAqdG1wLCAqbmFtZSwgKnJlcywgKmVuZHB0ciwgKnByZXYs
ICpwOworCWludCBuZXdfYXJnYyA9IDA7CisJY2hhciAqbmV3X2FyZ3ZbRlVOQ1RJT05fTUFYX0FS
R1NdOworCWludCBuZXN0ID0gMDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG47CisKKwl0bXAg
PSB4c3RybmR1cChzdHIsIGxlbik7CisKKwkvKgorCSAqIElmIHZhcmlhYmxlIG5hbWUgaXMgJzEn
LCAnMicsIGV0Yy4gIEl0IGlzIGdlbmVyYWxseSBhbiBhcmd1bWVudAorCSAqIGZyb20gYSB1c2Vy
LWZ1bmN0aW9uIGNhbGwgKGkuZS4gbG9jYWwtc2NvcGUgdmFyaWFibGUpLiAgSWYgbm90CisJICog
YXZhaWxhYmxlLCB0aGVuIGxvb2stdXAgZ2xvYmFsLXNjb3BlIHZhcmlhYmxlcy4KKwkgKi8KKwlu
ID0gc3RydG91bCh0bXAsICZlbmRwdHIsIDEwKTsKKwlpZiAoISplbmRwdHIgJiYgbiA+IDAgJiYg
biA8PSBhcmdjKSB7CisJCXJlcyA9IHhzdHJkdXAoYXJndltuIC0gMV0pOworCQlnb3RvIGZyZWVf
dG1wOworCX0KKworCXByZXYgPSBwID0gdG1wOworCisJLyoKKwkgKiBTcGxpdCBpbnRvIHRva2Vu
cworCSAqIFRoZSBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBh
IGNvbW1hLgorCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBsaWtlIHRo
aXM6CisJICogICAkKGZvbywkKHgpLCQoeSkpCisJICoKKwkgKiBUaGUgaW5wdXQgc3RyaW5nIGZv
ciB0aGlzIGhlbHBlciBzaG91bGQgYmU6CisJICogICBmb28sJCh4KSwkKHkpCisJICoKKwkgKiBh
bmQgc3BsaXQgaW50bzoKKwkgKiAgIG5ld19hcmd2WzBdID0gJ2ZvbycKKwkgKiAgIG5ld19hcmd2
WzFdID0gJyQoeCknCisJICogICBuZXdfYXJndlsyXSA9ICckKHkpJworCSAqLworCXdoaWxlICgq
cCkgeworCQlpZiAobmVzdCA9PSAwICYmICpwID09ICcsJykgeworCQkJKnAgPSAwOworCQkJaWYg
KG5ld19hcmdjID49IEZVTkNUSU9OX01BWF9BUkdTKQorCQkJCXBwZXJyb3IoInRvbyBtYW55IGZ1
bmN0aW9uIGFyZ3VtZW50cyIpOworCQkJbmV3X2FyZ3ZbbmV3X2FyZ2MrK10gPSBwcmV2OworCQkJ
cHJldiA9IHAgKyAxOworCQl9IGVsc2UgaWYgKCpwID09ICcoJykgeworCQkJbmVzdCsrOworCQl9
IGVsc2UgaWYgKCpwID09ICcpJykgeworCQkJbmVzdC0tOworCQl9CisKKwkJcCsrOworCX0KKwlu
ZXdfYXJndltuZXdfYXJnYysrXSA9IHByZXY7CisKKwkvKgorCSAqIFNoaWZ0IGFyZ3VtZW50cwor
CSAqIG5ld19hcmd2WzBdIHJlcHJlc2VudHMgYSBmdW5jdGlvbiBuYW1lIG9yIGEgdmFyaWFibGUg
bmFtZS4gIFB1dCBpdAorCSAqIGludG8gJ25hbWUnLCB0aGVuIHNoaWZ0IHRoZSByZXN0IG9mIHRo
ZSBhcmd1bWVudHMuICBUaGlzIHNpbXBsaWZpZXMKKwkgKiAnY29uc3QnIGhhbmRsaW5nLgorCSAq
LworCW5hbWUgPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdfYXJndlswXSwgYXJnYywgYXJn
dik7CisJbmV3X2FyZ2MtLTsKKwlmb3IgKGkgPSAwOyBpIDwgbmV3X2FyZ2M7IGkrKykKKwkJbmV3
X2FyZ3ZbaV0gPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdfYXJndltpICsgMV0sCisJCQkJ
CQkgICAgICBhcmdjLCBhcmd2KTsKKworCS8qIFNlYXJjaCBmb3IgdmFyaWFibGVzICovCisJcmVz
ID0gdmFyaWFibGVfZXhwYW5kKG5hbWUsIG5ld19hcmdjLCBuZXdfYXJndik7CisJaWYgKHJlcykK
KwkJZ290byBmcmVlOworCisJLyogTG9vayBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zICovCisJcmVz
ID0gZnVuY3Rpb25fZXhwYW5kKG5hbWUsIG5ld19hcmdjLCBuZXdfYXJndik7CisJaWYgKHJlcykK
KwkJZ290byBmcmVlOworCisJLyogTGFzdCwgdHJ5IGVudmlyb25tZW50IHZhcmlhYmxlICovCisJ
aWYgKG5ld19hcmdjID09IDApIHsKKwkJcmVzID0gZW52X2V4cGFuZChuYW1lKTsKKwkJaWYgKHJl
cykKKwkJCWdvdG8gZnJlZTsKKwl9CisKKwlyZXMgPSB4c3RyZHVwKCIiKTsKK2ZyZWU6CisJZm9y
IChpID0gMDsgaSA8IG5ld19hcmdjOyBpKyspCisJCWZyZWUobmV3X2FyZ3ZbaV0pOworCWZyZWUo
bmFtZSk7CitmcmVlX3RtcDoKKwlmcmVlKHRtcCk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgor
ICogRXhwYW5kIGEgc3RyaW5nIHRoYXQgZm9sbG93cyAnJCcKKyAqCisgKiBGb3IgZXhhbXBsZSwg
aWYgdGhlIGlucHV0IHN0cmluZyBpcworICogICAgICgkKEZPTykkKCQoQkFSKSkpJChCQVopCisg
KiB0aGlzIGhlbHBlciBldmFsdWF0ZXMKKyAqICAgICAkKCQoRk9PKSQoJChCQVIpKSkKKyAqIGFu
ZCByZXR1cm5zIGEgbmV3IHN0cmluZyBjb250YWluaW5nIHRoZSBleHBhbnNpb24gKG5vdGUgdGhh
dCB0aGUgc3RyaW5nIGlzCisgKiByZWN1cnNpdmVseSBleHBhbmRlZCksIGFsc28gYWR2YW5jaW5n
ICdzdHInIHRvIHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3RlcgorICogYWZ0ZXIgdGhlIGNvcnJl
c3BvbmRpbmcgY2xvc2luZyBwYXJlbnRoZXNpcywgaW4gdGhpcyBjYXNlLCAqc3RyIHdpbGwgYmUK
KyAqICAgICAkKEJBUikKKyAqLworc3RhdGljIGNoYXIgKmV4cGFuZF9kb2xsYXJfd2l0aF9hcmdz
KGNvbnN0IGNoYXIgKipzdHIsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hh
ciAqcCA9ICpzdHI7CisJY29uc3QgY2hhciAqcTsKKwlpbnQgbmVzdCA9IDA7CisKKwkvKgorCSAq
IEluIEtjb25maWcsIHZhcmlhYmxlL2Z1bmN0aW9uIHJlZmVyZW5jZXMgYWx3YXlzIHN0YXJ0IHdp
dGggIiQoIi4KKwkgKiBOZWl0aGVyIHNpbmdsZS1sZXR0ZXIgdmFyaWFibGVzIGFzIGluICRBIG5v
ciBjdXJseSBicmFjZXMgYXMgaW4gJHtDQ30KKwkgKiBhcmUgc3VwcG9ydGVkLiAgJyQnIG5vdCBm
b2xsb3dlZCBieSAnKCcgbG9zZXMgaXRzIHNwZWNpYWwgbWVhbmluZy4KKwkgKi8KKwlpZiAoKnAg
IT0gJygnKSB7CisJCSpzdHIgPSBwOworCQlyZXR1cm4geHN0cmR1cCgiJCIpOworCX0KKworCXAr
KzsKKwlxID0gcDsKKwl3aGlsZSAoKnEpIHsKKwkJaWYgKCpxID09ICcoJykgeworCQkJbmVzdCsr
OworCQl9IGVsc2UgaWYgKCpxID09ICcpJykgeworCQkJaWYgKG5lc3QtLSA9PSAwKQorCQkJCWJy
ZWFrOworCQl9CisJCXErKzsKKwl9CisKKwlpZiAoISpxKQorCQlwcGVycm9yKCJ1bnRlcm1pbmF0
ZWQgcmVmZXJlbmNlIHRvICclcyc6IG1pc3NpbmcgJyknIiwgcCk7CisKKwkvKiBBZHZhbmNlICdz
dHInIHRvIGFmdGVyIHRoZSBleHBhbmRlZCBpbml0aWFsIHBvcnRpb24gb2YgdGhlIHN0cmluZyAq
LworCSpzdHIgPSBxICsgMTsKKworCXJldHVybiBldmFsX2NsYXVzZShwLCBxIC0gcCwgYXJnYywg
YXJndik7Cit9CisKK2NoYXIgKmV4cGFuZF9kb2xsYXIoY29uc3QgY2hhciAqKnN0cikKK3sKKwly
ZXR1cm4gZXhwYW5kX2RvbGxhcl93aXRoX2FyZ3Moc3RyLCAwLCBOVUxMKTsKK30KKworc3RhdGlj
IGNoYXIgKl9fZXhwYW5kX3N0cmluZyhjb25zdCBjaGFyICoqc3RyLCBib29sICgqaXNfZW5kKShj
aGFyIGMpLAorCQkJICAgICBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIg
KmluLCAqcDsKKwljaGFyICpleHBhbnNpb24sICpvdXQ7CisJc2l6ZV90IGluX2xlbiwgb3V0X2xl
bjsKKworCW91dCA9IHhtYWxsb2MoMSk7CisJKm91dCA9IDA7CisJb3V0X2xlbiA9IDE7CisKKwlw
ID0gaW4gPSAqc3RyOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKCpwID09ICckJykgeworCQkJaW5f
bGVuID0gcCAtIGluOworCQkJcCsrOworCQkJZXhwYW5zaW9uID0gZXhwYW5kX2RvbGxhcl93aXRo
X2FyZ3MoJnAsIGFyZ2MsIGFyZ3YpOworCQkJb3V0X2xlbiArPSBpbl9sZW4gKyBzdHJsZW4oZXhw
YW5zaW9uKTsKKwkJCW91dCA9IHhyZWFsbG9jKG91dCwgb3V0X2xlbik7CisJCQlzdHJuY2F0KG91
dCwgaW4sIGluX2xlbik7CisJCQlzdHJjYXQob3V0LCBleHBhbnNpb24pOworCQkJZnJlZShleHBh
bnNpb24pOworCQkJaW4gPSBwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaXNfZW5kKCpw
KSkKKwkJCWJyZWFrOworCisJCXArKzsKKwl9CisKKwlpbl9sZW4gPSBwIC0gaW47CisJb3V0X2xl
biArPSBpbl9sZW47CisJb3V0ID0geHJlYWxsb2Mob3V0LCBvdXRfbGVuKTsKKwlzdHJuY2F0KG91
dCwgaW4sIGluX2xlbik7CisKKwkvKiBBZHZhbmNlICdzdHInIHRvIHRoZSBlbmQgY2hhcmFjdGVy
ICovCisJKnN0ciA9IHA7CisKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgYm9vbCBpc19lbmRf
b2Zfc3RyKGNoYXIgYykKK3sKKwlyZXR1cm4gIWM7Cit9CisKKy8qCisgKiBFeHBhbmQgdmFyaWFi
bGVzIGFuZCBmdW5jdGlvbnMgaW4gdGhlIGdpdmVuIHN0cmluZy4gIFVuZGVmaW5lZCB2YXJpYWJs
ZXMKKyAqIGV4cGFuZCB0byBhbiBlbXB0eSBzdHJpbmcuCisgKiBUaGUgcmV0dXJuZWQgc3RyaW5n
IG11c3QgYmUgZnJlZWQgd2hlbiBkb25lLgorICovCitzdGF0aWMgY2hhciAqZXhwYW5kX3N0cmlu
Z193aXRoX2FyZ3MoY29uc3QgY2hhciAqaW4sIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJ
cmV0dXJuIF9fZXhwYW5kX3N0cmluZygmaW4sIGlzX2VuZF9vZl9zdHIsIGFyZ2MsIGFyZ3YpOwor
fQorCitjaGFyICpleHBhbmRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKQoreworCXJldHVybiBleHBh
bmRfc3RyaW5nX3dpdGhfYXJncyhpbiwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBib29sIGlzX2Vu
ZF9vZl90b2tlbihjaGFyIGMpCit7CisJcmV0dXJuICEoaXNhbG51bShjKSB8fCBjID09ICdfJyB8
fCBjID09ICctJyk7Cit9CisKKy8qCisgKiBFeHBhbmQgdmFyaWFibGVzIGluIGEgdG9rZW4uICBU
aGUgcGFyc2luZyBzdG9wcyB3aGVuIGEgdG9rZW4gc2VwYXJhdGVyCisgKiAoaW4gbW9zdCBjYXNl
cywgaXQgaXMgYSB3aGl0ZXNwYWNlKSBpcyBlbmNvdW50ZXJlZC4gICdzdHInIGlzIHVwZGF0ZWQg
dG8KKyAqIHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAqCisgKiBUaGUgcmV0dXJuZWQg
c3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBkb25lLgorICovCitjaGFyICpleHBhbmRfb25lX3Rv
a2VuKGNvbnN0IGNoYXIgKipzdHIpCit7CisJcmV0dXJuIF9fZXhwYW5kX3N0cmluZyhzdHIsIGlz
X2VuZF9vZl90b2tlbiwgMCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyY2NjMGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLWNmZy5zaApAQCAtMCwwICsxLDMyIEBACisjIS9i
aW4vc2gKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJRdDVDb3Jl
IFF0NUd1aSBRdDVXaWRnZXRzIgorUEtHMj0iUXRDb3JlIFF0R3VpIgorCitpZiBbIC16ICIkKGNv
bW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4KKwllY2hvID4mMiAiKiIKKwllY2hvID4mMiAi
KiAnbWFrZSB4Y29uZmlnJyByZXF1aXJlcyAncGtnLWNvbmZpZycuIFBsZWFzZSBpbnN0YWxsIGl0
LiIKKwllY2hvID4mMiAiKiIKKwlleGl0IDEKK2ZpCisKK2lmIHBrZy1jb25maWcgLS1leGlzdHMg
JFBLRzsgdGhlbgorCWVjaG8gY2ZsYWdzPVwiLXN0ZD1jKysxMSAtZlBJQyAkKHBrZy1jb25maWcg
LS1jZmxhZ3MgUXQ1Q29yZSBRdDVHdWkgUXQ1V2lkZ2V0cylcIgorCWVjaG8gbGlicz1cIiQocGtn
LWNvbmZpZyAtLWxpYnMgJFBLRylcIgorCWVjaG8gbW9jPVwiJChwa2ctY29uZmlnIC0tdmFyaWFi
bGU9aG9zdF9iaW5zIFF0NUNvcmUpL21vY1wiCisJZXhpdCAwCitmaQorCitpZiBwa2ctY29uZmln
IC0tZXhpc3RzICRQS0cyOyB0aGVuCisJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxh
Z3MgJFBLRzIpXCIKKwllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cyKVwiCisJ
ZWNobyBtb2M9XCIkKHBrZy1jb25maWcgLS12YXJpYWJsZT1tb2NfbG9jYXRpb24gUXRDb3JlKVwi
CisJZXhpdCAwCitmaQorCitlY2hvID4mMiAiKiIKK2VjaG8gPiYyICIqIENvdWxkIG5vdCBmaW5k
IFF0IHZpYSBwa2ctY29uZmlnLiIKK2VjaG8gPiYyICIqIFBsZWFzZSBpbnN0YWxsIGVpdGhlciBR
dCA0Ljggb3IgNS54LiBhbmQgbWFrZSBzdXJlIGl0J3MgaW4gUEtHX0NPTkZJR19QQVRIIgorZWNo
byA+JjIgIioiCitleGl0IDEKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYu
Y2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNlN2ZjODcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLmNjCkBAIC0wLDAgKzEsMTg5NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBw
ZWxAbGludXgtbTY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zz
a2kgPGJiYXJidWxvdnNraUBnbWFpbC5jb20+CisgKi8KKworI2luY2x1ZGUgPHFnbG9iYWwuaD4K
KworI2luY2x1ZGUgPFFNYWluV2luZG93PgorI2luY2x1ZGUgPFFMaXN0PgorI2luY2x1ZGUgPHF0
ZXh0YnJvd3Nlci5oPgorI2luY2x1ZGUgPFFBY3Rpb24+CisjaW5jbHVkZSA8UUZpbGVEaWFsb2c+
CisjaW5jbHVkZSA8UU1lbnU+CisKKyNpbmNsdWRlIDxxYXBwbGljYXRpb24uaD4KKyNpbmNsdWRl
IDxxZGVza3RvcHdpZGdldC5oPgorI2luY2x1ZGUgPHF0b29sYmFyLmg+CisjaW5jbHVkZSA8cWxh
eW91dC5oPgorI2luY2x1ZGUgPHFzcGxpdHRlci5oPgorI2luY2x1ZGUgPHFsaW5lZWRpdC5oPgor
I2luY2x1ZGUgPHFsYWJlbC5oPgorI2luY2x1ZGUgPHFwdXNoYnV0dG9uLmg+CisjaW5jbHVkZSA8
cW1lbnViYXIuaD4KKyNpbmNsdWRlIDxxbWVzc2FnZWJveC5oPgorI2luY2x1ZGUgPHFyZWdleHAu
aD4KKyNpbmNsdWRlIDxxZXZlbnQuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVk
ZSAibGtjLmgiCisjaW5jbHVkZSAicWNvbmYuaCIKKworI2luY2x1ZGUgInFjb25mLm1vYyIKKyNp
bmNsdWRlICJpbWFnZXMuaCIKKworCitzdGF0aWMgUUFwcGxpY2F0aW9uICpjb25maWdBcHA7Citz
dGF0aWMgQ29uZmlnU2V0dGluZ3MgKmNvbmZpZ1NldHRpbmdzOworCitRQWN0aW9uICpDb25maWdN
YWluV2luZG93OjpzYXZlQWN0aW9uOworCitzdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQo
Y29uc3QgY2hhciogc3RyKQoreworCXJldHVybiBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN0cik7
Cit9CisKK0NvbmZpZ1NldHRpbmdzOjpDb25maWdTZXR0aW5ncygpCisJOiBRU2V0dGluZ3MoImtl
cm5lbC5vcmciLCAicWNvbmYiKQoreworfQorCisvKioKKyAqIFJlYWRzIGEgbGlzdCBvZiBpbnRl
Z2VyIHZhbHVlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBzZXR0aW5ncy4KKyAqLworUUxpc3Q8aW50
PiBDb25maWdTZXR0aW5nczo6cmVhZFNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2sp
Cit7CisJUUxpc3Q8aW50PiByZXN1bHQ7CisKKwlpZiAoY29udGFpbnMoa2V5KSkKKwl7CisJCVFT
dHJpbmdMaXN0IGVudHJ5TGlzdCA9IHZhbHVlKGtleSkudG9TdHJpbmdMaXN0KCk7CisJCVFTdHJp
bmdMaXN0OjpJdGVyYXRvciBpdDsKKworCQlmb3IgKGl0ID0gZW50cnlMaXN0LmJlZ2luKCk7IGl0
ICE9IGVudHJ5TGlzdC5lbmQoKTsgKytpdCkKKwkJCXJlc3VsdC5wdXNoX2JhY2soKCppdCkudG9J
bnQoKSk7CisKKwkJKm9rID0gdHJ1ZTsKKwl9CisJZWxzZQorCQkqb2sgPSBmYWxzZTsKKworCXJl
dHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogV3JpdGVzIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVl
cyB0byB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3MuCisgKi8KK2Jvb2wgQ29uZmlnU2V0dGluZ3M6
OndyaXRlU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBjb25zdCBRTGlzdDxpbnQ+JiB2YWx1ZSkK
K3sKKwlRU3RyaW5nTGlzdCBzdHJpbmdMaXN0OworCVFMaXN0PGludD46OkNvbnN0SXRlcmF0b3Ig
aXQ7CisKKwlmb3IgKGl0ID0gdmFsdWUuYmVnaW4oKTsgaXQgIT0gdmFsdWUuZW5kKCk7ICsraXQp
CisJCXN0cmluZ0xpc3QucHVzaF9iYWNrKFFTdHJpbmc6Om51bWJlcigqaXQpKTsKKwlzZXRWYWx1
ZShrZXksIHN0cmluZ0xpc3QpOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIHNldCB0
aGUgbmV3IGRhdGEKKyAqIFRPRE8gY2hlY2sgdGhlIHZhbHVlCisgKi8KK3ZvaWQgQ29uZmlnSXRl
bTo6b2tSZW5hbWUoaW50IGNvbCkKK3sKK30KKworLyoKKyAqIHVwZGF0ZSB0aGUgZGlzcGxheWVk
IG9mIGEgbWVudSBlbnRyeQorICovCit2b2lkIENvbmZpZ0l0ZW06OnVwZGF0ZU1lbnUodm9pZCkK
K3sKKwlDb25maWdMaXN0KiBsaXN0OworCXN0cnVjdCBzeW1ib2wqIHN5bTsKKwlzdHJ1Y3QgcHJv
cGVydHkgKnByb3A7CisJUVN0cmluZyBwcm9tcHQ7CisJaW50IHR5cGU7CisJdHJpc3RhdGUgZXhw
cjsKKworCWxpc3QgPSBsaXN0VmlldygpOworCWlmIChnb1BhcmVudCkgeworCQlzZXRQaXhtYXAo
cHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51QmFja1BpeCk7CisJCXByb21wdCA9ICIuLiI7CisJCWdv
dG8gc2V0X3Byb21wdDsKKwl9CisKKwlzeW0gPSBtZW51LT5zeW07CisJcHJvcCA9IG1lbnUtPnBy
b21wdDsKKwlwcm9tcHQgPSBxZ2V0dGV4dChtZW51X2dldF9wcm9tcHQobWVudSkpOworCisJaWYg
KHByb3ApIHN3aXRjaCAocHJvcC0+dHlwZSkgeworCWNhc2UgUF9NRU5VOgorCQlpZiAobGlzdC0+
bW9kZSA9PSBzaW5nbGVNb2RlIHx8IGxpc3QtPm1vZGUgPT0gc3ltYm9sTW9kZSkgeworCQkJLyog
YSBtZW51Y29uZmlnIGVudHJ5IGlzIGRpc3BsYXllZCBkaWZmZXJlbnRseQorCQkJICogZGVwZW5k
aW5nIHdoZXRoZXIgaXQncyBhdCB0aGUgdmlldyByb290IG9yIGEgY2hpbGQuCisJCQkgKi8KKwkJ
CWlmIChzeW0gJiYgbGlzdC0+cm9vdEVudHJ5ID09IG1lbnUpCisJCQkJYnJlYWs7CisJCQlzZXRQ
aXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51UGl4KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChz
eW0pCisJCQkJYnJlYWs7CisJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsKKwkJ
fQorCQlnb3RvIHNldF9wcm9tcHQ7CisJY2FzZSBQX0NPTU1FTlQ6CisJCXNldFBpeG1hcChwcm9t
cHRDb2xJZHgsIFFJY29uKCkpOworCQlnb3RvIHNldF9wcm9tcHQ7CisJZGVmYXVsdDoKKwkJOwor
CX0KKwlpZiAoIXN5bSkKKwkJZ290byBzZXRfcHJvbXB0OworCisJc2V0VGV4dChuYW1lQ29sSWR4
LCBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN5bS0+bmFtZSkpOworCisJdHlwZSA9IHN5bV9nZXRf
dHlwZShzeW0pOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19U
UklTVEFURToKKwkJY2hhciBjaDsKKworCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiBs
aXN0LT5vcHRNb2RlID09IG5vcm1hbE9wdCkgeworCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwg
UUljb24oKSk7CisJCQlzZXRUZXh0KG5vQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsKKwkJCXNldFRl
eHQobW9kQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsKKwkJCXNldFRleHQoeWVzQ29sSWR4LCBRU3Ry
aW5nOjpudWxsKTsKKwkJCWJyZWFrOworCQl9CisJCWV4cHIgPSBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSk7CisJCXN3aXRjaCAoZXhwcikgeworCQljYXNlIHllczoKKwkJCWlmIChzeW1faXNf
Y2hvaWNlX3ZhbHVlKHN5bSkgJiYgdHlwZSA9PSBTX0JPT0xFQU4pCisJCQkJc2V0UGl4bWFwKHBy
b21wdENvbElkeCwgbGlzdC0+Y2hvaWNlWWVzUGl4KTsKKwkJCWVsc2UKKwkJCQlzZXRQaXhtYXAo
cHJvbXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xZZXNQaXgpOworCQkJc2V0VGV4dCh5ZXNDb2xJZHgs
ICJZIik7CisJCQljaCA9ICdZJzsKKwkJCWJyZWFrOworCQljYXNlIG1vZDoKKwkJCXNldFBpeG1h
cChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbE1vZFBpeCk7CisJCQlzZXRUZXh0KG1vZENvbElk
eCwgIk0iKTsKKwkJCWNoID0gJ00nOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoc3lt
X2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHR5cGUgPT0gU19CT09MRUFOKQorCQkJCXNldFBpeG1h
cChwcm9tcHRDb2xJZHgsIGxpc3QtPmNob2ljZU5vUGl4KTsKKwkJCWVsc2UKKwkJCQlzZXRQaXht
YXAocHJvbXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xOb1BpeCk7CisJCQlzZXRUZXh0KG5vQ29sSWR4
LCAiTiIpOworCQkJY2ggPSAnTic7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZXhwciAhPSBubykK
KwkJCXNldFRleHQobm9Db2xJZHgsIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubykg
PyAiXyIgOiAwKTsKKwkJaWYgKGV4cHIgIT0gbW9kKQorCQkJc2V0VGV4dChtb2RDb2xJZHgsIHN5
bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpID8gIl8iIDogMCk7CisJCWlmIChleHBy
ICE9IHllcykKKwkJCXNldFRleHQoeWVzQ29sSWR4LCBzeW1fdHJpc3RhdGVfd2l0aGluX3Jhbmdl
KHN5bSwgeWVzKSA/ICJfIiA6IDApOworCisJCXNldFRleHQoZGF0YUNvbElkeCwgUUNoYXIoY2gp
KTsKKwkJYnJlYWs7CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6
CisJCWNvbnN0IGNoYXIqIGRhdGE7CisKKwkJZGF0YSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5
bSk7CisKKwkJc2V0VGV4dChkYXRhQ29sSWR4LCBkYXRhKTsKKwkJaWYgKHR5cGUgPT0gU19TVFJJ
TkcpCisJCQlwcm9tcHQgPSBRU3RyaW5nKCIlMTogJTIiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7
CisJCWVsc2UKKwkJCXByb21wdCA9IFFTdHJpbmcoIiglMikgJTEiKS5hcmcocHJvbXB0KS5hcmco
ZGF0YSk7CisJCWJyZWFrOworCX0KKwlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSAmJiB2aXNpYmxl
KQorCQlwcm9tcHQgKz0gIiAoTkVXKSI7CitzZXRfcHJvbXB0OgorCXNldFRleHQocHJvbXB0Q29s
SWR4LCBwcm9tcHQpOworfQorCit2b2lkIENvbmZpZ0l0ZW06OnRlc3RVcGRhdGVNZW51KGJvb2wg
dikKK3sKKwlDb25maWdJdGVtKiBpOworCisJdmlzaWJsZSA9IHY7CisJaWYgKCFtZW51KQorCQly
ZXR1cm47CisKKwlzeW1fY2FsY192YWx1ZShtZW51LT5zeW0pOworCWlmIChtZW51LT5mbGFncyAm
IE1FTlVfQ0hBTkdFRCkgeworCQkvKiB0aGUgbWVudSBlbnRyeSBjaGFuZ2VkLCBzbyB1cGRhdGUg
YWxsIGxpc3QgaXRlbXMgKi8KKwkJbWVudS0+ZmxhZ3MgJj0gfk1FTlVfQ0hBTkdFRDsKKwkJZm9y
IChpID0gKENvbmZpZ0l0ZW0qKW1lbnUtPmRhdGE7IGk7IGkgPSBpLT5uZXh0SXRlbSkKKwkJCWkt
PnVwZGF0ZU1lbnUoKTsKKwl9IGVsc2UgaWYgKGxpc3RWaWV3KCktPnVwZGF0ZUFsbCkKKwkJdXBk
YXRlTWVudSgpOworfQorCisKKy8qCisgKiBjb25zdHJ1Y3QgYSBtZW51IGVudHJ5CisgKi8KK3Zv
aWQgQ29uZmlnSXRlbTo6aW5pdCh2b2lkKQoreworCWlmIChtZW51KSB7CisJCUNvbmZpZ0xpc3Qq
IGxpc3QgPSBsaXN0VmlldygpOworCQluZXh0SXRlbSA9IChDb25maWdJdGVtKiltZW51LT5kYXRh
OworCQltZW51LT5kYXRhID0gdGhpczsKKworCQlpZiAobGlzdC0+bW9kZSAhPSBmdWxsTW9kZSkK
KwkJCXNldEV4cGFuZGVkKHRydWUpOworCQlzeW1fY2FsY192YWx1ZShtZW51LT5zeW0pOworCX0K
Kwl1cGRhdGVNZW51KCk7Cit9CisKKy8qCisgKiBkZXN0cnVjdCBhIG1lbnUgZW50cnkKKyAqLwor
Q29uZmlnSXRlbTo6fkNvbmZpZ0l0ZW0odm9pZCkKK3sKKwlpZiAobWVudSkgeworCQlDb25maWdJ
dGVtKiogaXAgPSAoQ29uZmlnSXRlbSoqKSZtZW51LT5kYXRhOworCQlmb3IgKDsgKmlwOyBpcCA9
ICYoKmlwKS0+bmV4dEl0ZW0pIHsKKwkJCWlmICgqaXAgPT0gdGhpcykgeworCQkJCSppcCA9IG5l
eHRJdGVtOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCitDb25maWdMaW5lRWRpdDo6
Q29uZmlnTGluZUVkaXQoQ29uZmlnVmlldyogcGFyZW50KQorCTogUGFyZW50KHBhcmVudCkKK3sK
Kwljb25uZWN0KHRoaXMsIFNJR05BTChlZGl0aW5nRmluaXNoZWQoKSksIFNMT1QoaGlkZSgpKSk7
Cit9CisKK3ZvaWQgQ29uZmlnTGluZUVkaXQ6OnNob3coQ29uZmlnSXRlbSogaSkKK3sKKwlpdGVt
ID0gaTsKKwlpZiAoc3ltX2dldF9zdHJpbmdfdmFsdWUoaXRlbS0+bWVudS0+c3ltKSkKKwkJc2V0
VGV4dChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGl0ZW0tPm1l
bnUtPnN5bSkpKTsKKwllbHNlCisJCXNldFRleHQoUVN0cmluZzo6bnVsbCk7CisJUGFyZW50Ojpz
aG93KCk7CisJc2V0Rm9jdXMoKTsKK30KKwordm9pZCBDb25maWdMaW5lRWRpdDo6a2V5UHJlc3NF
dmVudChRS2V5RXZlbnQqIGUpCit7CisJc3dpdGNoIChlLT5rZXkoKSkgeworCWNhc2UgUXQ6Oktl
eV9Fc2NhcGU6CisJCWJyZWFrOworCWNhc2UgUXQ6OktleV9SZXR1cm46CisJY2FzZSBRdDo6S2V5
X0VudGVyOgorCQlzeW1fc2V0X3N0cmluZ192YWx1ZShpdGVtLT5tZW51LT5zeW0sIHRleHQoKS50
b0xhdGluMSgpKTsKKwkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCVBhcmVudDo6a2V5UHJlc3NFdmVudChlKTsKKwkJcmV0dXJuOworCX0KKwllLT5h
Y2NlcHQoKTsKKwlwYXJlbnQoKS0+bGlzdC0+c2V0Rm9jdXMoKTsKKwloaWRlKCk7Cit9CisKK0Nv
bmZpZ0xpc3Q6OkNvbmZpZ0xpc3QoQ29uZmlnVmlldyogcCwgY29uc3QgY2hhciAqbmFtZSkKKwk6
IFBhcmVudChwKSwKKwkgIHVwZGF0ZUFsbChmYWxzZSksCisJICBzeW1ib2xZZXNQaXgoeHBtX3N5
bWJvbF95ZXMpLCBzeW1ib2xNb2RQaXgoeHBtX3N5bWJvbF9tb2QpLCBzeW1ib2xOb1BpeCh4cG1f
c3ltYm9sX25vKSwKKwkgIGNob2ljZVllc1BpeCh4cG1fY2hvaWNlX3llcyksIGNob2ljZU5vUGl4
KHhwbV9jaG9pY2Vfbm8pLAorCSAgbWVudVBpeCh4cG1fbWVudSksIG1lbnVJbnZQaXgoeHBtX21l
bnVfaW52KSwgbWVudUJhY2tQaXgoeHBtX21lbnViYWNrKSwgdm9pZFBpeCh4cG1fdm9pZCksCisJ
ICBzaG93TmFtZShmYWxzZSksIHNob3dSYW5nZShmYWxzZSksIHNob3dEYXRhKGZhbHNlKSwgbW9k
ZShzaW5nbGVNb2RlKSwgb3B0TW9kZShub3JtYWxPcHQpLAorCSAgcm9vdEVudHJ5KDApLCBoZWFk
ZXJQb3B1cCgwKQoreworCWludCBpOworCisJc2V0T2JqZWN0TmFtZShuYW1lKTsKKwlzZXRTb3J0
aW5nRW5hYmxlZChmYWxzZSk7CisJc2V0Um9vdElzRGVjb3JhdGVkKHRydWUpOworCisJc2V0VmVy
dGljYWxTY3JvbGxNb2RlKFNjcm9sbFBlclBpeGVsKTsKKwlzZXRIb3Jpem9udGFsU2Nyb2xsTW9k
ZShTY3JvbGxQZXJQaXhlbCk7CisKKwlzZXRIZWFkZXJMYWJlbHMoUVN0cmluZ0xpc3QoKSA8PCAi
T3B0aW9uIiA8PCAiTmFtZSIgPDwgIk4iIDw8ICJNIiA8PCAiWSIgPDwgIlZhbHVlIik7CisKKwlj
b25uZWN0KHRoaXMsIFNJR05BTChpdGVtU2VsZWN0aW9uQ2hhbmdlZCh2b2lkKSksCisJCVNMT1Qo
dXBkYXRlU2VsZWN0aW9uKHZvaWQpKSk7CisKKwlpZiAobmFtZSkgeworCQljb25maWdTZXR0aW5n
cy0+YmVnaW5Hcm91cChuYW1lKTsKKwkJc2hvd05hbWUgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUo
Ii9zaG93TmFtZSIsIGZhbHNlKS50b0Jvb2woKTsKKwkJc2hvd1JhbmdlID0gY29uZmlnU2V0dGlu
Z3MtPnZhbHVlKCIvc2hvd1JhbmdlIiwgZmFsc2UpLnRvQm9vbCgpOworCQlzaG93RGF0YSA9IGNv
bmZpZ1NldHRpbmdzLT52YWx1ZSgiL3Nob3dEYXRhIiwgZmFsc2UpLnRvQm9vbCgpOworCQlvcHRN
b2RlID0gKGVudW0gb3B0aW9uTW9kZSljb25maWdTZXR0aW5ncy0+dmFsdWUoIi9vcHRpb25Nb2Rl
IiwgMCkudG9JbnQoKTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CisJCWNvbm5lY3Qo
Y29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsK
Kwl9CisKKwlhZGRDb2x1bW4ocHJvbXB0Q29sSWR4KTsKKworCXJlaW5pdCgpOworfQorCitib29s
IENvbmZpZ0xpc3Q6Om1lbnVTa2lwKHN0cnVjdCBtZW51ICptZW51KQoreworCWlmIChvcHRNb2Rl
ID09IG5vcm1hbE9wdCAmJiBtZW51X2lzX3Zpc2libGUobWVudSkpCisJCXJldHVybiBmYWxzZTsK
KwlpZiAob3B0TW9kZSA9PSBwcm9tcHRPcHQgJiYgbWVudV9oYXNfcHJvbXB0KG1lbnUpKQorCQly
ZXR1cm4gZmFsc2U7CisJaWYgKG9wdE1vZGUgPT0gYWxsT3B0KQorCQlyZXR1cm4gZmFsc2U7CisJ
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6cmVpbml0KHZvaWQpCit7CisJcmVt
b3ZlQ29sdW1uKGRhdGFDb2xJZHgpOworCXJlbW92ZUNvbHVtbih5ZXNDb2xJZHgpOworCXJlbW92
ZUNvbHVtbihtb2RDb2xJZHgpOworCXJlbW92ZUNvbHVtbihub0NvbElkeCk7CisJcmVtb3ZlQ29s
dW1uKG5hbWVDb2xJZHgpOworCisJaWYgKHNob3dOYW1lKQorCQlhZGRDb2x1bW4obmFtZUNvbElk
eCk7CisJaWYgKHNob3dSYW5nZSkgeworCQlhZGRDb2x1bW4obm9Db2xJZHgpOworCQlhZGRDb2x1
bW4obW9kQ29sSWR4KTsKKwkJYWRkQ29sdW1uKHllc0NvbElkeCk7CisJfQorCWlmIChzaG93RGF0
YSkKKwkJYWRkQ29sdW1uKGRhdGFDb2xJZHgpOworCisJdXBkYXRlTGlzdEFsbCgpOworfQorCit2
b2lkIENvbmZpZ0xpc3Q6OnNhdmVTZXR0aW5ncyh2b2lkKQoreworCWlmICghb2JqZWN0TmFtZSgp
LmlzRW1wdHkoKSkgeworCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkp
OworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93TmFtZSIsIHNob3dOYW1lKTsKKwkJ
Y29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd1JhbmdlIiwgc2hvd1JhbmdlKTsKKwkJY29u
ZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd0RhdGEiLCBzaG93RGF0YSk7CisJCWNvbmZpZ1Nl
dHRpbmdzLT5zZXRWYWx1ZSgiL29wdGlvbk1vZGUiLCAoaW50KW9wdE1vZGUpOworCQljb25maWdT
ZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwl9Cit9CisKK0NvbmZpZ0l0ZW0qIENvbmZpZ0xpc3Q6OmZp
bmRDb25maWdJdGVtKHN0cnVjdCBtZW51ICptZW51KQoreworCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAo
Q29uZmlnSXRlbSopbWVudS0+ZGF0YTsKKworCWZvciAoOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4
dEl0ZW0pIHsKKwkJaWYgKHRoaXMgPT0gaXRlbS0+bGlzdFZpZXcoKSkKKwkJCWJyZWFrOworCX0K
KworCXJldHVybiBpdGVtOworfQorCit2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZVNlbGVjdGlvbih2
b2lkKQoreworCXN0cnVjdCBtZW51ICptZW51OworCWVudW0gcHJvcF90eXBlIHR5cGU7CisKKwlp
ZiAoc2VsZWN0ZWRJdGVtcygpLmNvdW50KCkgPT0gMCkKKwkJcmV0dXJuOworCisJQ29uZmlnSXRl
bSogaXRlbSA9IChDb25maWdJdGVtKilzZWxlY3RlZEl0ZW1zKCkuZmlyc3QoKTsKKwlpZiAoIWl0
ZW0pCisJCXJldHVybjsKKworCW1lbnUgPSBpdGVtLT5tZW51OworCWVtaXQgbWVudUNoYW5nZWQo
bWVudSk7CisJaWYgKCFtZW51KQorCQlyZXR1cm47CisJdHlwZSA9IG1lbnUtPnByb21wdCA/IG1l
bnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKwlpZiAobW9kZSA9PSBtZW51TW9kZSAmJiB0
eXBlID09IFBfTUVOVSkKKwkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7Cit9CisKK3ZvaWQgQ29u
ZmlnTGlzdDo6dXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKQoreworCUNvbmZpZ0l0ZW0qIGxh
c3QgPSAwOworCisJaWYgKCFyb290RW50cnkpIHsKKwkJaWYgKG1vZGUgIT0gbGlzdE1vZGUpCisJ
CQlnb3RvIHVwZGF0ZTsKKwkJUVRyZWVXaWRnZXRJdGVtSXRlcmF0b3IgaXQodGhpcyk7CisJCUNv
bmZpZ0l0ZW0qIGl0ZW07CisKKwkJd2hpbGUgKCppdCkgeworCQkJaXRlbSA9IChDb25maWdJdGVt
KikoKml0KTsKKwkJCWlmICghaXRlbS0+bWVudSkKKwkJCQljb250aW51ZTsKKwkJCWl0ZW0tPnRl
c3RVcGRhdGVNZW51KG1lbnVfaXNfdmlzaWJsZShpdGVtLT5tZW51KSk7CisKKwkJCSsraXQ7CisJ
CX0KKwkJcmV0dXJuOworCX0KKworCWlmIChyb290RW50cnkgIT0gJnJvb3RtZW51ICYmIChtb2Rl
ID09IHNpbmdsZU1vZGUgfHwKKwkgICAgKG1vZGUgPT0gc3ltYm9sTW9kZSAmJiByb290RW50cnkt
PnBhcmVudCAhPSAmcm9vdG1lbnUpKSkgeworCQlpdGVtID0gKENvbmZpZ0l0ZW0gKil0b3BMZXZl
bEl0ZW0oMCk7CisJCWlmICghaXRlbSkKKwkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbSh0aGlzLCAw
LCB0cnVlKTsKKwkJbGFzdCA9IGl0ZW07CisJfQorCWlmICgobW9kZSA9PSBzaW5nbGVNb2RlIHx8
IChtb2RlID09IHN5bWJvbE1vZGUgJiYgIShyb290RW50cnktPmZsYWdzICYgTUVOVV9ST09UKSkp
ICYmCisJICAgIHJvb3RFbnRyeS0+c3ltICYmIHJvb3RFbnRyeS0+cHJvbXB0KSB7CisJCWl0ZW0g
PSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmcoKSA6IGZpcnN0Q2hpbGQoKTsKKwkJaWYgKCFpdGVt
KQorCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHRoaXMsIGxhc3QsIHJvb3RFbnRyeSwgdHJ1ZSk7
CisJCWVsc2UKKwkJCWl0ZW0tPnRlc3RVcGRhdGVNZW51KHRydWUpOworCisJCXVwZGF0ZU1lbnVM
aXN0KGl0ZW0sIHJvb3RFbnRyeSk7CisJCXVwZGF0ZSgpOworCQlyZXNpemVDb2x1bW5Ub0NvbnRl
bnRzKDApOworCQlyZXR1cm47CisJfQordXBkYXRlOgorCXVwZGF0ZU1lbnVMaXN0KHRoaXMsIHJv
b3RFbnRyeSk7CisJdXBkYXRlKCk7CisJcmVzaXplQ29sdW1uVG9Db250ZW50cygwKTsKK30KKwor
dm9pZCBDb25maWdMaXN0OjpzZXRWYWx1ZShDb25maWdJdGVtKiBpdGVtLCB0cmlzdGF0ZSB2YWwp
Cit7CisJc3RydWN0IHN5bWJvbCogc3ltOworCWludCB0eXBlOworCXRyaXN0YXRlIG9sZHZhbDsK
KworCXN5bSA9IGl0ZW0tPm1lbnUgPyBpdGVtLT5tZW51LT5zeW0gOiAwOworCWlmICghc3ltKQor
CQlyZXR1cm47CisKKwl0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisJc3dpdGNoICh0eXBlKSB7
CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlvbGR2YWwgPSBzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisKKwkJaWYgKCFzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSwgdmFsKSkKKwkJCXJldHVybjsKKwkJaWYgKG9sZHZhbCA9PSBubyAmJiBpdGVtLT5tZW51LT5s
aXN0KQorCQkJaXRlbS0+c2V0RXhwYW5kZWQodHJ1ZSk7CisJCXBhcmVudCgpLT51cGRhdGVMaXN0
KGl0ZW0pOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6Y2hhbmdlVmFsdWUo
Q29uZmlnSXRlbSogaXRlbSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07CisJc3RydWN0IG1lbnUq
IG1lbnU7CisJaW50IHR5cGUsIG9sZGV4cHIsIG5ld2V4cHI7CisKKwltZW51ID0gaXRlbS0+bWVu
dTsKKwlpZiAoIW1lbnUpCisJCXJldHVybjsKKwlzeW0gPSBtZW51LT5zeW07CisJaWYgKCFzeW0p
IHsKKwkJaWYgKGl0ZW0tPm1lbnUtPmxpc3QpCisJCQlpdGVtLT5zZXRFeHBhbmRlZCghaXRlbS0+
aXNFeHBhbmRlZCgpKTsKKwkJcmV0dXJuOworCX0KKworCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3lt
KTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6
CisJCW9sZGV4cHIgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCW5ld2V4cHIgPSBz
eW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCWlmIChpdGVtLT5tZW51LT5saXN0KSB7
CisJCQlpZiAob2xkZXhwciA9PSBuZXdleHByKQorCQkJCWl0ZW0tPnNldEV4cGFuZGVkKCFpdGVt
LT5pc0V4cGFuZGVkKCkpOworCQkJZWxzZSBpZiAob2xkZXhwciA9PSBubykKKwkJCQlpdGVtLT5z
ZXRFeHBhbmRlZCh0cnVlKTsKKwkJfQorCQlpZiAob2xkZXhwciAhPSBuZXdleHByKQorCQkJcGFy
ZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7CisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJY2FzZSBT
X0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQlwYXJlbnQoKS0+bGluZUVkaXQtPnNob3coaXRlbSk7
CisJCWJyZWFrOworCX0KK30KKwordm9pZCBDb25maWdMaXN0OjpzZXRSb290TWVudShzdHJ1Y3Qg
bWVudSAqbWVudSkKK3sKKwllbnVtIHByb3BfdHlwZSB0eXBlOworCisJaWYgKHJvb3RFbnRyeSA9
PSBtZW51KQorCQlyZXR1cm47CisJdHlwZSA9IG1lbnUgJiYgbWVudS0+cHJvbXB0ID8gbWVudS0+
cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCWlmICh0eXBlICE9IFBfTUVOVSkKKwkJcmV0dXJu
OworCXVwZGF0ZU1lbnVMaXN0KHRoaXMsIDApOworCXJvb3RFbnRyeSA9IG1lbnU7CisJdXBkYXRl
TGlzdEFsbCgpOworCWlmIChjdXJyZW50SXRlbSgpKSB7CisJCWN1cnJlbnRJdGVtKCktPnNldFNl
bGVjdGVkKGhhc0ZvY3VzKCkpOworCQlzY3JvbGxUb0l0ZW0oY3VycmVudEl0ZW0oKSk7CisJfQor
fQorCit2b2lkIENvbmZpZ0xpc3Q6OnNldFBhcmVudE1lbnUodm9pZCkKK3sKKwlDb25maWdJdGVt
KiBpdGVtOworCXN0cnVjdCBtZW51ICpvbGRyb290OworCisJb2xkcm9vdCA9IHJvb3RFbnRyeTsK
KwlpZiAocm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJcmV0dXJuOworCXNldFJvb3RNZW51KG1l
bnVfZ2V0X3BhcmVudF9tZW51KHJvb3RFbnRyeS0+cGFyZW50KSk7CisKKwlRVHJlZVdpZGdldEl0
ZW1JdGVyYXRvciBpdCh0aGlzKTsKKwl3aGlsZSAoKml0KSB7CisJCWl0ZW0gPSAoQ29uZmlnSXRl
bSAqKSgqaXQpOworCQlpZiAoaXRlbS0+bWVudSA9PSBvbGRyb290KSB7CisJCQlzZXRDdXJyZW50
SXRlbShpdGVtKTsKKwkJCXNjcm9sbFRvSXRlbShpdGVtKTsKKwkJCWJyZWFrOworCQl9CisKKwkJ
KytpdDsKKwl9Cit9CisKKy8qCisgKiB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiBhIG1lbnUg
ZW50cnkKKyAqICAgcmVtb3Zlcy9hZGRzIHRoZSBlbnRyaWVzIGZyb20gdGhlIHBhcmVudCB3aWRn
ZXQgYXMgbmVjZXNzYXJ5CisgKgorICogcGFyZW50OiBlaXRoZXIgdGhlIG1lbnUgbGlzdCB3aWRn
ZXQgb3IgYSBtZW51IGVudHJ5IHdpZGdldAorICogbWVudTogZW50cnkgdG8gYmUgdXBkYXRlZAor
ICovCit2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZU1lbnVMaXN0KENvbmZpZ0l0ZW0gKnBhcmVudCwg
c3RydWN0IG1lbnUqIG1lbnUpCit7CisJc3RydWN0IG1lbnUqIGNoaWxkOworCUNvbmZpZ0l0ZW0q
IGl0ZW07CisJQ29uZmlnSXRlbSogbGFzdDsKKwlib29sIHZpc2libGU7CisJZW51bSBwcm9wX3R5
cGUgdHlwZTsKKworCWlmICghbWVudSkgeworCQl3aGlsZSAocGFyZW50LT5jaGlsZENvdW50KCkg
PiAwKQorCQl7CisJCQlkZWxldGUgcGFyZW50LT50YWtlQ2hpbGQoMCk7CisJCX0KKworCQlyZXR1
cm47CisJfQorCisJbGFzdCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworCWlmIChsYXN0ICYmICFs
YXN0LT5nb1BhcmVudCkKKwkJbGFzdCA9IDA7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNp
YmxpbmcoKSA6IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworCQl0eXBlID0gY2hpbGQtPnByb21wdCA/
IGNoaWxkLT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisKKwkJc3dpdGNoIChtb2RlKSB7CisJ
CWNhc2UgbWVudU1vZGU6CisJCQlpZiAoIShjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQorCQkJ
CWdvdG8gaGlkZTsKKwkJCWJyZWFrOworCQljYXNlIHN5bWJvbE1vZGU6CisJCQlpZiAoY2hpbGQt
PmZsYWdzICYgTUVOVV9ST09UKQorCQkJCWdvdG8gaGlkZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJCX0KKworCQl2aXNpYmxlID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsK
KwkJaWYgKCFtZW51U2tpcChjaGlsZCkpIHsKKwkJCWlmICghY2hpbGQtPnN5bSAmJiAhY2hpbGQt
Pmxpc3QgJiYgIWNoaWxkLT5wcm9tcHQpCisJCQkJY29udGludWU7CisJCQlpZiAoIWl0ZW0gfHwg
aXRlbS0+bWVudSAhPSBjaGlsZCkKKwkJCQlpdGVtID0gbmV3IENvbmZpZ0l0ZW0ocGFyZW50LCBs
YXN0LCBjaGlsZCwgdmlzaWJsZSk7CisJCQllbHNlCisJCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUo
dmlzaWJsZSk7CisKKwkJCWlmIChtb2RlID09IGZ1bGxNb2RlIHx8IG1vZGUgPT0gbWVudU1vZGUg
fHwgdHlwZSAhPSBQX01FTlUpCisJCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgY2hpbGQpOworCQkJ
ZWxzZQorCQkJCXVwZGF0ZU1lbnVMaXN0KGl0ZW0sIDApOworCQkJbGFzdCA9IGl0ZW07CisJCQlj
b250aW51ZTsKKwkJfQorCWhpZGU6CisJCWlmIChpdGVtICYmIGl0ZW0tPm1lbnUgPT0gY2hpbGQp
IHsKKwkJCWxhc3QgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsKKwkJCWlmIChsYXN0ID09IGl0ZW0p
CisJCQkJbGFzdCA9IDA7CisJCQllbHNlIHdoaWxlIChsYXN0LT5uZXh0U2libGluZygpICE9IGl0
ZW0pCisJCQkJbGFzdCA9IGxhc3QtPm5leHRTaWJsaW5nKCk7CisJCQlkZWxldGUgaXRlbTsKKwkJ
fQorCX0KK30KKwordm9pZCBDb25maWdMaXN0Ojp1cGRhdGVNZW51TGlzdChDb25maWdMaXN0ICpw
YXJlbnQsIHN0cnVjdCBtZW51KiBtZW51KQoreworCXN0cnVjdCBtZW51KiBjaGlsZDsKKwlDb25m
aWdJdGVtKiBpdGVtOworCUNvbmZpZ0l0ZW0qIGxhc3Q7CisJYm9vbCB2aXNpYmxlOworCWVudW0g
cHJvcF90eXBlIHR5cGU7CisKKwlpZiAoIW1lbnUpIHsKKwkJd2hpbGUgKHBhcmVudC0+dG9wTGV2
ZWxJdGVtQ291bnQoKSA+IDApCisJCXsKKwkJCWRlbGV0ZSBwYXJlbnQtPnRha2VUb3BMZXZlbEl0
ZW0oMCk7CisJCX0KKworCQlyZXR1cm47CisJfQorCisJbGFzdCA9IChDb25maWdJdGVtKilwYXJl
bnQtPnRvcExldmVsSXRlbSgwKTsKKwlpZiAobGFzdCAmJiAhbGFzdC0+Z29QYXJlbnQpCisJCWxh
c3QgPSAwOworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dCkgeworCQlpdGVtID0gbGFzdCA/IGxhc3QtPm5leHRTaWJsaW5nKCkgOiAoQ29uZmlnSXRl
bSopcGFyZW50LT50b3BMZXZlbEl0ZW0oMCk7CisJCXR5cGUgPSBjaGlsZC0+cHJvbXB0ID8gY2hp
bGQtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2Fz
ZSBtZW51TW9kZToKKwkJCWlmICghKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkpCisJCQkJZ290
byBoaWRlOworCQkJYnJlYWs7CisJCWNhc2Ugc3ltYm9sTW9kZToKKwkJCWlmIChjaGlsZC0+Zmxh
Z3MgJiBNRU5VX1JPT1QpCisJCQkJZ290byBoaWRlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ
CQlicmVhazsKKwkJfQorCisJCXZpc2libGUgPSBtZW51X2lzX3Zpc2libGUoY2hpbGQpOworCQlp
ZiAoIW1lbnVTa2lwKGNoaWxkKSkgeworCQkJaWYgKCFjaGlsZC0+c3ltICYmICFjaGlsZC0+bGlz
dCAmJiAhY2hpbGQtPnByb21wdCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghaXRlbSB8fCBpdGVt
LT5tZW51ICE9IGNoaWxkKQorCQkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbShwYXJlbnQsIGxhc3Qs
IGNoaWxkLCB2aXNpYmxlKTsKKwkJCWVsc2UKKwkJCQlpdGVtLT50ZXN0VXBkYXRlTWVudSh2aXNp
YmxlKTsKKworCQkJaWYgKG1vZGUgPT0gZnVsbE1vZGUgfHwgbW9kZSA9PSBtZW51TW9kZSB8fCB0
eXBlICE9IFBfTUVOVSkKKwkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCBjaGlsZCk7CisJCQllbHNl
CisJCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgMCk7CisJCQlsYXN0ID0gaXRlbTsKKwkJCWNvbnRp
bnVlOworCQl9CisJaGlkZToKKwkJaWYgKGl0ZW0gJiYgaXRlbS0+bWVudSA9PSBjaGlsZCkgewor
CQkJbGFzdCA9IChDb25maWdJdGVtKilwYXJlbnQtPnRvcExldmVsSXRlbSgwKTsKKwkJCWlmIChs
YXN0ID09IGl0ZW0pCisJCQkJbGFzdCA9IDA7CisJCQllbHNlIHdoaWxlIChsYXN0LT5uZXh0U2li
bGluZygpICE9IGl0ZW0pCisJCQkJbGFzdCA9IGxhc3QtPm5leHRTaWJsaW5nKCk7CisJCQlkZWxl
dGUgaXRlbTsKKwkJfQorCX0KK30KKwordm9pZCBDb25maWdMaXN0OjprZXlQcmVzc0V2ZW50KFFL
ZXlFdmVudCogZXYpCit7CisJUVRyZWVXaWRnZXRJdGVtKiBpID0gY3VycmVudEl0ZW0oKTsKKwlD
b25maWdJdGVtKiBpdGVtOworCXN0cnVjdCBtZW51ICptZW51OworCWVudW0gcHJvcF90eXBlIHR5
cGU7CisKKwlpZiAoZXYtPmtleSgpID09IFF0OjpLZXlfRXNjYXBlICYmIG1vZGUgIT0gZnVsbE1v
ZGUgJiYgbW9kZSAhPSBsaXN0TW9kZSkgeworCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7CisJCWV2
LT5hY2NlcHQoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghaSkgeworCQlQYXJlbnQ6OmtleVBy
ZXNzRXZlbnQoZXYpOworCQlyZXR1cm47CisJfQorCWl0ZW0gPSAoQ29uZmlnSXRlbSopaTsKKwor
CXN3aXRjaCAoZXYtPmtleSgpKSB7CisJY2FzZSBRdDo6S2V5X1JldHVybjoKKwljYXNlIFF0OjpL
ZXlfRW50ZXI6CisJCWlmIChpdGVtLT5nb1BhcmVudCkgeworCQkJZW1pdCBwYXJlbnRTZWxlY3Rl
ZCgpOworCQkJYnJlYWs7CisJCX0KKwkJbWVudSA9IGl0ZW0tPm1lbnU7CisJCWlmICghbWVudSkK
KwkJCWJyZWFrOworCQl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDog
UF9VTktOT1dOOworCQlpZiAodHlwZSA9PSBQX01FTlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYK
KwkJICAgIG1vZGUgIT0gZnVsbE1vZGUgJiYgbW9kZSAhPSBtZW51TW9kZSkgeworCQkJZW1pdCBt
ZW51U2VsZWN0ZWQobWVudSk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgUXQ6OktleV9TcGFjZToK
KwkJY2hhbmdlVmFsdWUoaXRlbSk7CisJCWJyZWFrOworCWNhc2UgUXQ6OktleV9OOgorCQlzZXRW
YWx1ZShpdGVtLCBubyk7CisJCWJyZWFrOworCWNhc2UgUXQ6OktleV9NOgorCQlzZXRWYWx1ZShp
dGVtLCBtb2QpOworCQlicmVhazsKKwljYXNlIFF0OjpLZXlfWToKKwkJc2V0VmFsdWUoaXRlbSwg
eWVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUGFyZW50OjprZXlQcmVzc0V2ZW50KGV2KTsK
KwkJcmV0dXJuOworCX0KKwlldi0+YWNjZXB0KCk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6bW91
c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBlKQoreworCS8vUVBvaW50IHAoY29udGVudHNUb1Zp
ZXdwb3J0KGUtPnBvcygpKSk7CisJLy9wcmludGYoImNvbnRlbnRzTW91c2VQcmVzc0V2ZW50OiAl
ZCwlZFxuIiwgcC54KCksIHAueSgpKTsKKwlQYXJlbnQ6Om1vdXNlUHJlc3NFdmVudChlKTsKK30K
Kwordm9pZCBDb25maWdMaXN0Ojptb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCogZSkKK3sK
KwlRUG9pbnQgcCA9IGUtPnBvcygpOworCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSop
aXRlbUF0KHApOworCXN0cnVjdCBtZW51ICptZW51OworCWVudW0gcHJvcF90eXBlIHB0eXBlOwor
CVFJY29uIGljb247CisJaW50IGlkeCwgeDsKKworCWlmICghaXRlbSkKKwkJZ290byBza2lwOwor
CisJbWVudSA9IGl0ZW0tPm1lbnU7CisJeCA9IGhlYWRlcigpLT5vZmZzZXQoKSArIHAueCgpOwor
CWlkeCA9IGhlYWRlcigpLT5sb2dpY2FsSW5kZXhBdCh4KTsKKwlzd2l0Y2ggKGlkeCkgeworCWNh
c2UgcHJvbXB0Q29sSWR4OgorCQlpY29uID0gaXRlbS0+cGl4bWFwKHByb21wdENvbElkeCk7CisJ
CWlmICghaWNvbi5pc051bGwoKSkgeworCQkJaW50IG9mZiA9IGhlYWRlcigpLT5zZWN0aW9uUG9z
aXRpb24oMCkgKyB2aXN1YWxSZWN0KGluZGV4QXQocCkpLngoKSArIDQ7IC8vIDQgaXMgSGFyZGNv
ZGVkIGltYWdlIG9mZnNldC4gVGhlcmUgbWlnaHQgYmUgYSB3YXkgdG8gZG8gaXQgcHJvcGVybHku
CisJCQlpZiAoeCA+PSBvZmYgJiYgeCA8IG9mZiArIGljb24uYXZhaWxhYmxlU2l6ZXMoKS5maXJz
dCgpLndpZHRoKCkpIHsKKwkJCQlpZiAoaXRlbS0+Z29QYXJlbnQpIHsKKwkJCQkJZW1pdCBwYXJl
bnRTZWxlY3RlZCgpOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgaWYgKCFtZW51KQorCQkJCQli
cmVhazsKKwkJCQlwdHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBf
VU5LTk9XTjsKKwkJCQlpZiAocHR5cGUgPT0gUF9NRU5VICYmIHJvb3RFbnRyeSAhPSBtZW51ICYm
CisJCQkJICAgIG1vZGUgIT0gZnVsbE1vZGUgJiYgbW9kZSAhPSBtZW51TW9kZSkKKwkJCQkJZW1p
dCBtZW51U2VsZWN0ZWQobWVudSk7CisJCQkJZWxzZQorCQkJCQljaGFuZ2VWYWx1ZShpdGVtKTsK
KwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIG5vQ29sSWR4OgorCQlzZXRWYWx1ZShpdGVtLCBu
byk7CisJCWJyZWFrOworCWNhc2UgbW9kQ29sSWR4OgorCQlzZXRWYWx1ZShpdGVtLCBtb2QpOwor
CQlicmVhazsKKwljYXNlIHllc0NvbElkeDoKKwkJc2V0VmFsdWUoaXRlbSwgeWVzKTsKKwkJYnJl
YWs7CisJY2FzZSBkYXRhQ29sSWR4OgorCQljaGFuZ2VWYWx1ZShpdGVtKTsKKwkJYnJlYWs7CisJ
fQorCitza2lwOgorCS8vcHJpbnRmKCJjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50OiAlZCwlZFxu
IiwgcC54KCksIHAueSgpKTsKKwlQYXJlbnQ6Om1vdXNlUmVsZWFzZUV2ZW50KGUpOworfQorCit2
b2lkIENvbmZpZ0xpc3Q6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiBlKQoreworCS8vUVBv
aW50IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBvcygpKSk7CisJLy9wcmludGYoImNvbnRlbnRz
TW91c2VNb3ZlRXZlbnQ6ICVkLCVkXG4iLCBwLngoKSwgcC55KCkpOworCVBhcmVudDo6bW91c2VN
b3ZlRXZlbnQoZSk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VEb3VibGVDbGlja0V2ZW50
KFFNb3VzZUV2ZW50KiBlKQoreworCVFQb2ludCBwID0gZS0+cG9zKCk7IC8vIFRPRE86IENoZWNr
IGlmIHRoaXMgd29ya3Mod2FzIGNvbnRlbnRzVG9WaWV3cG9ydCkuCisJQ29uZmlnSXRlbSogaXRl
bSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJZW51bSBw
cm9wX3R5cGUgcHR5cGU7CisKKwlpZiAoIWl0ZW0pCisJCWdvdG8gc2tpcDsKKwlpZiAoaXRlbS0+
Z29QYXJlbnQpIHsKKwkJZW1pdCBwYXJlbnRTZWxlY3RlZCgpOworCQlnb3RvIHNraXA7CisJfQor
CW1lbnUgPSBpdGVtLT5tZW51OworCWlmICghbWVudSkKKwkJZ290byBza2lwOworCXB0eXBlID0g
bWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCWlmIChwdHlw
ZSA9PSBQX01FTlUgJiYgKG1vZGUgPT0gc2luZ2xlTW9kZSB8fCBtb2RlID09IHN5bWJvbE1vZGUp
KQorCQllbWl0IG1lbnVTZWxlY3RlZChtZW51KTsKKwllbHNlIGlmIChtZW51LT5zeW0pCisJCWNo
YW5nZVZhbHVlKGl0ZW0pOworCitza2lwOgorCS8vcHJpbnRmKCJjb250ZW50c01vdXNlRG91Ymxl
Q2xpY2tFdmVudDogJWQsJWRcbiIsIHAueCgpLCBwLnkoKSk7CisJUGFyZW50Ojptb3VzZURvdWJs
ZUNsaWNrRXZlbnQoZSk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6Zm9jdXNJbkV2ZW50KFFGb2N1
c0V2ZW50ICplKQoreworCXN0cnVjdCBtZW51ICptZW51ID0gTlVMTDsKKworCVBhcmVudDo6Zm9j
dXNJbkV2ZW50KGUpOworCisJQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtICopY3VycmVu
dEl0ZW0oKTsKKwlpZiAoaXRlbSkgeworCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKKwkJbWVu
dSA9IGl0ZW0tPm1lbnU7CisJfQorCWVtaXQgZ290Rm9jdXMobWVudSk7Cit9CisKK3ZvaWQgQ29u
ZmlnTGlzdDo6Y29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSkKK3sKKwlpZiAo
ZS0+eSgpIDw9IGhlYWRlcigpLT5nZW9tZXRyeSgpLmJvdHRvbSgpKSB7CisJCWlmICghaGVhZGVy
UG9wdXApIHsKKwkJCVFBY3Rpb24gKmFjdGlvbjsKKworCQkJaGVhZGVyUG9wdXAgPSBuZXcgUU1l
bnUodGhpcyk7CisJCQlhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBOYW1lIiwgdGhpcyk7CisJ
CQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCQkJICBjb25uZWN0KGFjdGlvbiwgU0lH
TkFMKHRvZ2dsZWQoYm9vbCkpLAorCQkJCSAgcGFyZW50KCksIFNMT1Qoc2V0U2hvd05hbWUoYm9v
bCkpKTsKKwkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dOYW1lQ2hhbmdlZChib29s
KSksCisJCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsKKwkJCSAgYWN0aW9uLT5zZXRD
aGVja2VkKHNob3dOYW1lKTsKKwkJCSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOwor
CQkJYWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgUmFuZ2UiLCB0aGlzKTsKKwkJCSAgYWN0aW9u
LT5zZXRDaGVja2FibGUodHJ1ZSk7CisJCQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xl
ZChib29sKSksCisJCQkJICBwYXJlbnQoKSwgU0xPVChzZXRTaG93UmFuZ2UoYm9vbCkpKTsKKwkJ
CSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dSYW5nZUNoYW5nZWQoYm9vbCkpLAorCQkJ
CSAgYWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7CisJCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChz
aG93UmFuZ2UpOworCQkJICBoZWFkZXJQb3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7CisJCQlhY3Rp
b24gPSBuZXcgUUFjdGlvbigiU2hvdyBEYXRhIiwgdGhpcyk7CisJCQkgIGFjdGlvbi0+c2V0Q2hl
Y2thYmxlKHRydWUpOworCQkJICBjb25uZWN0KGFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkp
LAorCQkJCSAgcGFyZW50KCksIFNMT1Qoc2V0U2hvd0RhdGEoYm9vbCkpKTsKKwkJCSAgY29ubmVj
dChwYXJlbnQoKSwgU0lHTkFMKHNob3dEYXRhQ2hhbmdlZChib29sKSksCisJCQkJICBhY3Rpb24s
IFNMT1Qoc2V0T24oYm9vbCkpKTsKKwkJCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dEYXRhKTsK
KwkJCSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOworCQl9CisJCWhlYWRlclBvcHVw
LT5leGVjKGUtPmdsb2JhbFBvcygpKTsKKwkJZS0+YWNjZXB0KCk7CisJfSBlbHNlCisJCWUtPmln
bm9yZSgpOworfQorCitDb25maWdWaWV3KkNvbmZpZ1ZpZXc6OnZpZXdMaXN0OworUUFjdGlvbiAq
Q29uZmlnVmlldzo6c2hvd05vcm1hbEFjdGlvbjsKK1FBY3Rpb24gKkNvbmZpZ1ZpZXc6OnNob3dB
bGxBY3Rpb247CitRQWN0aW9uICpDb25maWdWaWV3OjpzaG93UHJvbXB0QWN0aW9uOworCitDb25m
aWdWaWV3OjpDb25maWdWaWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKKwk6
IFBhcmVudChwYXJlbnQpCit7CisJc2V0T2JqZWN0TmFtZShuYW1lKTsKKwlRVkJveExheW91dCAq
dmVydGljYWxMYXlvdXQgPSBuZXcgUVZCb3hMYXlvdXQodGhpcyk7CisJdmVydGljYWxMYXlvdXQt
PnNldENvbnRlbnRzTWFyZ2lucygwLCAwLCAwLCAwKTsKKworCWxpc3QgPSBuZXcgQ29uZmlnTGlz
dCh0aGlzKTsKKwl2ZXJ0aWNhbExheW91dC0+YWRkV2lkZ2V0KGxpc3QpOworCWxpbmVFZGl0ID0g
bmV3IENvbmZpZ0xpbmVFZGl0KHRoaXMpOworCWxpbmVFZGl0LT5oaWRlKCk7CisJdmVydGljYWxM
YXlvdXQtPmFkZFdpZGdldChsaW5lRWRpdCk7CisKKwl0aGlzLT5uZXh0VmlldyA9IHZpZXdMaXN0
OworCXZpZXdMaXN0ID0gdGhpczsKK30KKworQ29uZmlnVmlldzo6fkNvbmZpZ1ZpZXcodm9pZCkK
K3sKKwlDb25maWdWaWV3KiogdnA7CisKKwlmb3IgKHZwID0gJnZpZXdMaXN0OyAqdnA7IHZwID0g
JigqdnApLT5uZXh0VmlldykgeworCQlpZiAoKnZwID09IHRoaXMpIHsKKwkJCSp2cCA9IG5leHRW
aWV3OworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ29uZmlnVmlldzo6c2V0T3B0aW9u
TW9kZShRQWN0aW9uICphY3QpCit7CisJaWYgKGFjdCA9PSBzaG93Tm9ybWFsQWN0aW9uKQorCQls
aXN0LT5vcHRNb2RlID0gbm9ybWFsT3B0OworCWVsc2UgaWYgKGFjdCA9PSBzaG93QWxsQWN0aW9u
KQorCQlsaXN0LT5vcHRNb2RlID0gYWxsT3B0OworCWVsc2UKKwkJbGlzdC0+b3B0TW9kZSA9IHBy
b21wdE9wdDsKKworCWxpc3QtPnVwZGF0ZUxpc3RBbGwoKTsKK30KKwordm9pZCBDb25maWdWaWV3
OjpzZXRTaG93TmFtZShib29sIGIpCit7CisJaWYgKGxpc3QtPnNob3dOYW1lICE9IGIpIHsKKwkJ
bGlzdC0+c2hvd05hbWUgPSBiOworCQlsaXN0LT5yZWluaXQoKTsKKwkJZW1pdCBzaG93TmFtZUNo
YW5nZWQoYik7CisJfQorfQorCit2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dSYW5nZShib29sIGIp
Cit7CisJaWYgKGxpc3QtPnNob3dSYW5nZSAhPSBiKSB7CisJCWxpc3QtPnNob3dSYW5nZSA9IGI7
CisJCWxpc3QtPnJlaW5pdCgpOworCQllbWl0IHNob3dSYW5nZUNoYW5nZWQoYik7CisJfQorfQor
Cit2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dEYXRhKGJvb2wgYikKK3sKKwlpZiAobGlzdC0+c2hv
d0RhdGEgIT0gYikgeworCQlsaXN0LT5zaG93RGF0YSA9IGI7CisJCWxpc3QtPnJlaW5pdCgpOwor
CQllbWl0IHNob3dEYXRhQ2hhbmdlZChiKTsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6c2V0
QWxsT3Blbihib29sIG9wZW4pCit7CisJUVRyZWVXaWRnZXRJdGVtSXRlcmF0b3IgaXQodGhpcyk7
CisKKwl3aGlsZSAoKml0KSB7CisJCSgqaXQpLT5zZXRFeHBhbmRlZChvcGVuKTsKKworCQkrK2l0
OworCX0KK30KKwordm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0KENvbmZpZ0l0ZW0qIGl0ZW0p
Cit7CisJQ29uZmlnVmlldyogdjsKKworCWZvciAodiA9IHZpZXdMaXN0OyB2OyB2ID0gdi0+bmV4
dFZpZXcpCisJCXYtPmxpc3QtPnVwZGF0ZUxpc3QoaXRlbSk7Cit9CisKK3ZvaWQgQ29uZmlnVmll
dzo6dXBkYXRlTGlzdEFsbCh2b2lkKQoreworCUNvbmZpZ1ZpZXcqIHY7CisKKwlmb3IgKHYgPSB2
aWV3TGlzdDsgdjsgdiA9IHYtPm5leHRWaWV3KQorCQl2LT5saXN0LT51cGRhdGVMaXN0QWxsKCk7
Cit9CisKK0NvbmZpZ0luZm9WaWV3OjpDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNv
bnN0IGNoYXIgKm5hbWUpCisJOiBQYXJlbnQocGFyZW50KSwgc3ltKDApLCBfbWVudSgwKQorewor
CXNldE9iamVjdE5hbWUobmFtZSk7CisKKworCWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkg
eworCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkpOworCQlzZXRTaG93
RGVidWcoY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RlYnVnIiwgZmFsc2UpLnRvQm9vbCgp
KTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CisJCWNvbm5lY3QoY29uZmlnQXBwLCBT
SUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsKKwl9Cit9CisKK3Zv
aWQgQ29uZmlnSW5mb1ZpZXc6OnNhdmVTZXR0aW5ncyh2b2lkKQoreworCWlmICghb2JqZWN0TmFt
ZSgpLmlzRW1wdHkoKSkgeworCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1l
KCkpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93RGVidWciLCBzaG93RGVidWco
KSk7CisJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOworCX0KK30KKwordm9pZCBDb25maWdJ
bmZvVmlldzo6c2V0U2hvd0RlYnVnKGJvb2wgYikKK3sKKwlpZiAoX3Nob3dEZWJ1ZyAhPSBiKSB7
CisJCV9zaG93RGVidWcgPSBiOworCQlpZiAoX21lbnUpCisJCQltZW51SW5mbygpOworCQllbHNl
IGlmIChzeW0pCisJCQlzeW1ib2xJbmZvKCk7CisJCWVtaXQgc2hvd0RlYnVnQ2hhbmdlZChiKTsK
Kwl9Cit9CisKK3ZvaWQgQ29uZmlnSW5mb1ZpZXc6OnNldEluZm8oc3RydWN0IG1lbnUgKm0pCit7
CisJaWYgKF9tZW51ID09IG0pCisJCXJldHVybjsKKwlfbWVudSA9IG07CisJc3ltID0gTlVMTDsK
KwlpZiAoIV9tZW51KQorCQljbGVhcigpOworCWVsc2UKKwkJbWVudUluZm8oKTsKK30KKwordm9p
ZCBDb25maWdJbmZvVmlldzo6c3ltYm9sSW5mbyh2b2lkKQoreworCVFTdHJpbmcgc3RyOworCisJ
c3RyICs9ICI8YmlnPlN5bWJvbDogPGI+IjsKKwlzdHIgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFt
ZSk7CisJc3RyICs9ICI8L2I+PC9iaWc+PGJyPjxicj52YWx1ZTogIjsKKwlzdHIgKz0gcHJpbnRf
ZmlsdGVyKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOworCXN0ciArPSAiPGJyPnZpc2liaWxp
dHk6ICI7CisJc3RyICs9IHN5bS0+dmlzaWJsZSA9PSB5ZXMgPyAieSIgOiBzeW0tPnZpc2libGUg
PT0gbW9kID8gIm0iIDogIm4iOworCXN0ciArPSAiPGJyPiI7CisJc3RyICs9IGRlYnVnX2luZm8o
c3ltKTsKKworCXNldFRleHQoc3RyKTsKK30KKwordm9pZCBDb25maWdJbmZvVmlldzo6bWVudUlu
Zm8odm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07CisJUVN0cmluZyBoZWFkLCBkZWJ1Zywg
aGVscDsKKworCXN5bSA9IF9tZW51LT5zeW07CisJaWYgKHN5bSkgeworCQlpZiAoX21lbnUtPnBy
b21wdCkgeworCQkJaGVhZCArPSAiPGJpZz48Yj4iOworCQkJaGVhZCArPSBwcmludF9maWx0ZXIo
X21lbnUtPnByb21wdC0+dGV4dCk7CisJCQloZWFkICs9ICI8L2I+PC9iaWc+IjsKKwkJCWlmIChz
eW0tPm5hbWUpIHsKKwkJCQloZWFkICs9ICIgKCI7CisJCQkJaWYgKHNob3dEZWJ1ZygpKQorCQkJ
CQloZWFkICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+Iiwgc3ltKTsKKwkJ
CQloZWFkICs9IHByaW50X2ZpbHRlcihzeW0tPm5hbWUpOworCQkJCWlmIChzaG93RGVidWcoKSkK
KwkJCQkJaGVhZCArPSAiPC9hPiI7CisJCQkJaGVhZCArPSAiKSI7CisJCQl9CisJCX0gZWxzZSBp
ZiAoc3ltLT5uYW1lKSB7CisJCQloZWFkICs9ICI8YmlnPjxiPiI7CisJCQlpZiAoc2hvd0RlYnVn
KCkpCisJCQkJaGVhZCArPSBRU3RyaW5nKCkuc3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIsIHN5
bSk7CisJCQloZWFkICs9IHByaW50X2ZpbHRlcihzeW0tPm5hbWUpOworCQkJaWYgKHNob3dEZWJ1
ZygpKQorCQkJCWhlYWQgKz0gIjwvYT4iOworCQkJaGVhZCArPSAiPC9iPjwvYmlnPiI7CisJCX0K
KwkJaGVhZCArPSAiPGJyPjxicj4iOworCisJCWlmIChzaG93RGVidWcoKSkKKwkJCWRlYnVnID0g
ZGVidWdfaW5mbyhzeW0pOworCisJCXN0cnVjdCBnc3RyIGhlbHBfZ3N0ciA9IHN0cl9uZXcoKTsK
KwkJbWVudV9nZXRfZXh0X2hlbHAoX21lbnUsICZoZWxwX2dzdHIpOworCQloZWxwID0gcHJpbnRf
ZmlsdGVyKHN0cl9nZXQoJmhlbHBfZ3N0cikpOworCQlzdHJfZnJlZSgmaGVscF9nc3RyKTsKKwl9
IGVsc2UgaWYgKF9tZW51LT5wcm9tcHQpIHsKKwkJaGVhZCArPSAiPGJpZz48Yj4iOworCQloZWFk
ICs9IHByaW50X2ZpbHRlcihfbWVudS0+cHJvbXB0LT50ZXh0KTsKKwkJaGVhZCArPSAiPC9iPjwv
YmlnPjxicj48YnI+IjsKKwkJaWYgKHNob3dEZWJ1ZygpKSB7CisJCQlpZiAoX21lbnUtPnByb21w
dC0+dmlzaWJsZS5leHByKSB7CisJCQkJZGVidWcgKz0gIiZuYnNwOyZuYnNwO2RlcDogIjsKKwkJ
CQlleHByX3ByaW50KF9tZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciwgZXhwcl9wcmludF9oZWxw
LCAmZGVidWcsIEVfTk9ORSk7CisJCQkJZGVidWcgKz0gIjxicj48YnI+IjsKKwkJCX0KKwkJfQor
CX0KKwlpZiAoc2hvd0RlYnVnKCkpCisJCWRlYnVnICs9IFFTdHJpbmcoKS5zcHJpbnRmKCJkZWZp
bmVkIGF0ICVzOiVkPGJyPjxicj4iLCBfbWVudS0+ZmlsZS0+bmFtZSwgX21lbnUtPmxpbmVubyk7
CisKKwlzZXRUZXh0KGhlYWQgKyBkZWJ1ZyArIGhlbHApOworfQorCitRU3RyaW5nIENvbmZpZ0lu
Zm9WaWV3OjpkZWJ1Z19pbmZvKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlRU3RyaW5nIGRlYnVn
OworCisJZGVidWcgKz0gInR5cGU6ICI7CisJZGVidWcgKz0gcHJpbnRfZmlsdGVyKHN5bV90eXBl
X25hbWUoc3ltLT50eXBlKSk7CisJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJZGVidWcgKz0g
IiAoY2hvaWNlKSI7CisJZGVidWcgKz0gIjxicj4iOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikg
eworCQlkZWJ1ZyArPSAicmV2ZXJzZSBkZXA6ICI7CisJCWV4cHJfcHJpbnQoc3ltLT5yZXZfZGVw
LmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVnLCBFX05PTkUpOworCQlkZWJ1ZyArPSAiPGJy
PiI7CisJfQorCWZvciAoc3RydWN0IHByb3BlcnR5ICpwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBw
cm9wID0gcHJvcC0+bmV4dCkgeworCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX1BS
T01QVDoKKwkJY2FzZSBQX01FTlU6CisJCQlkZWJ1ZyArPSBRU3RyaW5nKCkuc3ByaW50ZigicHJv
bXB0OiA8YSBocmVmPVwibSVwXCI+IiwgcHJvcC0+bWVudSk7CisJCQlkZWJ1ZyArPSBwcmludF9m
aWx0ZXIocHJvcC0+dGV4dCk7CisJCQlkZWJ1ZyArPSAiPC9hPjxicj4iOworCQkJYnJlYWs7CisJ
CWNhc2UgUF9ERUZBVUxUOgorCQljYXNlIFBfU0VMRUNUOgorCQljYXNlIFBfUkFOR0U6CisJCQlk
ZWJ1ZyArPSBwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSk7CisJCQlkZWJ1ZyArPSAiOiAi
OworCQkJZXhwcl9wcmludChwcm9wLT5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9O
T05FKTsKKwkJCWRlYnVnICs9ICI8YnI+IjsKKwkJCWJyZWFrOworCQljYXNlIFBfQ0hPSUNFOgor
CQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJCWRlYnVnICs9ICJjaG9pY2U6ICI7CisJ
CQkJZXhwcl9wcmludChwcm9wLT5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05F
KTsKKwkJCQlkZWJ1ZyArPSAiPGJyPiI7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ
CWRlYnVnICs9ICJ1bmtub3duIHByb3BlcnR5OiAiOworCQkJZGVidWcgKz0gcHJvcF9nZXRfdHlw
ZV9uYW1lKHByb3AtPnR5cGUpOworCQkJZGVidWcgKz0gIjxicj4iOworCQl9CisJCWlmIChwcm9w
LT52aXNpYmxlLmV4cHIpIHsKKwkJCWRlYnVnICs9ICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtk
ZXA6ICI7CisJCQlleHByX3ByaW50KHByb3AtPnZpc2libGUuZXhwciwgZXhwcl9wcmludF9oZWxw
LCAmZGVidWcsIEVfTk9ORSk7CisJCQlkZWJ1ZyArPSAiPGJyPiI7CisJCX0KKwl9CisJZGVidWcg
Kz0gIjxicj4iOworCisJcmV0dXJuIGRlYnVnOworfQorCitRU3RyaW5nIENvbmZpZ0luZm9WaWV3
OjpwcmludF9maWx0ZXIoY29uc3QgUVN0cmluZyAmc3RyKQoreworCVFSZWdFeHAgcmUoIls8PiZc
Ilxcbl0iKTsKKwlRU3RyaW5nIHJlcyA9IHN0cjsKKwlmb3IgKGludCBpID0gMDsgKGkgPSByZXMu
aW5kZXhPZihyZSwgaSkpID49IDA7KSB7CisJCXN3aXRjaCAocmVzW2ldLnRvTGF0aW4xKCkpIHsK
KwkJY2FzZSAnPCc6CisJCQlyZXMucmVwbGFjZShpLCAxLCAiJmx0OyIpOworCQkJaSArPSA0Owor
CQkJYnJlYWs7CisJCWNhc2UgJz4nOgorCQkJcmVzLnJlcGxhY2UoaSwgMSwgIiZndDsiKTsKKwkJ
CWkgKz0gNDsKKwkJCWJyZWFrOworCQljYXNlICcmJzoKKwkJCXJlcy5yZXBsYWNlKGksIDEsICIm
YW1wOyIpOworCQkJaSArPSA1OworCQkJYnJlYWs7CisJCWNhc2UgJyInOgorCQkJcmVzLnJlcGxh
Y2UoaSwgMSwgIiZxdW90OyIpOworCQkJaSArPSA2OworCQkJYnJlYWs7CisJCWNhc2UgJ1xuJzoK
KwkJCXJlcy5yZXBsYWNlKGksIDEsICI8YnI+Iik7CisJCQlpICs9IDQ7CisJCQlicmVhazsKKwkJ
fQorCX0KKwlyZXR1cm4gcmVzOworfQorCit2b2lkIENvbmZpZ0luZm9WaWV3OjpleHByX3ByaW50
X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7
CisJUVN0cmluZyogdGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVN0cmluZyo+KGRhdGEpOworCVFT
dHJpbmcgc3RyMiA9IHByaW50X2ZpbHRlcihzdHIpOworCisJaWYgKHN5bSAmJiBzeW0tPm5hbWUg
JiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkgeworCQkqdGV4dCArPSBRU3RyaW5nKCku
c3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIsIHN5bSk7CisJCSp0ZXh0ICs9IHN0cjI7CisJCSp0
ZXh0ICs9ICI8L2E+IjsKKwl9IGVsc2UKKwkJKnRleHQgKz0gc3RyMjsKK30KKworUU1lbnUqIENv
bmZpZ0luZm9WaWV3OjpjcmVhdGVTdGFuZGFyZENvbnRleHRNZW51KGNvbnN0IFFQb2ludCAmIHBv
cykKK3sKKwlRTWVudSogcG9wdXAgPSBQYXJlbnQ6OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUo
cG9zKTsKKwlRQWN0aW9uKiBhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBEZWJ1ZyBJbmZvIiwg
cG9wdXApOworCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJICBjb25uZWN0KGFjdGlv
biwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOworCSAg
Y29ubmVjdCh0aGlzLCBTSUdOQUwoc2hvd0RlYnVnQ2hhbmdlZChib29sKSksIGFjdGlvbiwgU0xP
VChzZXRPbihib29sKSkpOworCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dEZWJ1ZygpKTsKKwlw
b3B1cC0+YWRkU2VwYXJhdG9yKCk7CisJcG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOworCXJldHVy
biBwb3B1cDsKK30KKwordm9pZCBDb25maWdJbmZvVmlldzo6Y29udGV4dE1lbnVFdmVudChRQ29u
dGV4dE1lbnVFdmVudCAqZSkKK3sKKwlQYXJlbnQ6OmNvbnRleHRNZW51RXZlbnQoZSk7Cit9CisK
K0NvbmZpZ1NlYXJjaFdpbmRvdzo6Q29uZmlnU2VhcmNoV2luZG93KENvbmZpZ01haW5XaW5kb3cq
IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKKwk6IFBhcmVudChwYXJlbnQpLCByZXN1bHQoTlVM
TCkKK3sKKwlzZXRPYmplY3ROYW1lKG5hbWUpOworCXNldFdpbmRvd1RpdGxlKCJTZWFyY2ggQ29u
ZmlnIik7CisKKwlRVkJveExheW91dCogbGF5b3V0MSA9IG5ldyBRVkJveExheW91dCh0aGlzKTsK
KwlsYXlvdXQxLT5zZXRDb250ZW50c01hcmdpbnMoMTEsIDExLCAxMSwgMTEpOworCWxheW91dDEt
PnNldFNwYWNpbmcoNik7CisJUUhCb3hMYXlvdXQqIGxheW91dDIgPSBuZXcgUUhCb3hMYXlvdXQo
MCk7CisJbGF5b3V0Mi0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAsIDApOworCWxheW91dDIt
PnNldFNwYWNpbmcoNik7CisJbGF5b3V0Mi0+YWRkV2lkZ2V0KG5ldyBRTGFiZWwoIkZpbmQ6Iiwg
dGhpcykpOworCWVkaXRGaWVsZCA9IG5ldyBRTGluZUVkaXQodGhpcyk7CisJY29ubmVjdChlZGl0
RmllbGQsIFNJR05BTChyZXR1cm5QcmVzc2VkKCkpLCBTTE9UKHNlYXJjaCgpKSk7CisJbGF5b3V0
Mi0+YWRkV2lkZ2V0KGVkaXRGaWVsZCk7CisJc2VhcmNoQnV0dG9uID0gbmV3IFFQdXNoQnV0dG9u
KCJTZWFyY2giLCB0aGlzKTsKKwlzZWFyY2hCdXR0b24tPnNldEF1dG9EZWZhdWx0KGZhbHNlKTsK
Kwljb25uZWN0KHNlYXJjaEJ1dHRvbiwgU0lHTkFMKGNsaWNrZWQoKSksIFNMT1Qoc2VhcmNoKCkp
KTsKKwlsYXlvdXQyLT5hZGRXaWRnZXQoc2VhcmNoQnV0dG9uKTsKKwlsYXlvdXQxLT5hZGRMYXlv
dXQobGF5b3V0Mik7CisKKwlzcGxpdCA9IG5ldyBRU3BsaXR0ZXIodGhpcyk7CisJc3BsaXQtPnNl
dE9yaWVudGF0aW9uKFF0OjpWZXJ0aWNhbCk7CisJbGlzdCA9IG5ldyBDb25maWdWaWV3KHNwbGl0
LCBuYW1lKTsKKwlsaXN0LT5saXN0LT5tb2RlID0gbGlzdE1vZGU7CisJaW5mbyA9IG5ldyBDb25m
aWdJbmZvVmlldyhzcGxpdCwgbmFtZSk7CisJY29ubmVjdChsaXN0LT5saXN0LCBTSUdOQUwobWVu
dUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLAorCQlpbmZvLCBTTE9UKHNldEluZm8oc3RydWN0IG1l
bnUgKikpKTsKKwljb25uZWN0KGxpc3QtPmxpc3QsIFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3Qg
bWVudSAqKSksCisJCXBhcmVudCwgU0xPVChzZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqKSkpOwor
CisJbGF5b3V0MS0+YWRkV2lkZ2V0KHNwbGl0KTsKKworCWlmIChuYW1lKSB7CisJCVFWYXJpYW50
IHgsIHk7CisJCWludCB3aWR0aCwgaGVpZ2h0OworCQlib29sIG9rOworCisJCWNvbmZpZ1NldHRp
bmdzLT5iZWdpbkdyb3VwKG5hbWUpOworCQl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgi
L3dpbmRvdyB3aWR0aCIsIHBhcmVudC0+d2lkdGgoKSAvIDIpLnRvSW50KCk7CisJCWhlaWdodCA9
IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBwYXJlbnQtPmhlaWdodCgp
IC8gMikudG9JbnQoKTsKKwkJcmVzaXplKHdpZHRoLCBoZWlnaHQpOworCQl4ID0gY29uZmlnU2V0
dGluZ3MtPnZhbHVlKCIvd2luZG93IHgiKTsKKwkJeSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgi
L3dpbmRvdyB5Iik7CisJCWlmICgoeC5pc1ZhbGlkKCkpJiYoeS5pc1ZhbGlkKCkpKQorCQkJbW92
ZSh4LnRvSW50KCksIHkudG9JbnQoKSk7CisJCVFMaXN0PGludD4gc2l6ZXMgPSBjb25maWdTZXR0
aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQiLCAmb2spOworCQlpZiAob2spCisJCQlzcGxpdC0+c2V0
U2l6ZXMoc2l6ZXMpOworCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwkJY29ubmVjdChj
b25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChzYXZlU2V0dGluZ3MoKSkpOwor
CX0KK30KKwordm9pZCBDb25maWdTZWFyY2hXaW5kb3c6OnNhdmVTZXR0aW5ncyh2b2lkKQorewor
CWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgeworCQljb25maWdTZXR0aW5ncy0+YmVnaW5H
cm91cChvYmplY3ROYW1lKCkpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cg
eCIsIHBvcygpLngoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5Iiwg
cG9zKCkueSgpKTsKKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHdpZHRoIiwg
c2l6ZSgpLndpZHRoKCkpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgaGVp
Z2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsKKwkJY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9z
cGxpdCIsIHNwbGl0LT5zaXplcygpKTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CisJ
fQorfQorCit2b2lkIENvbmZpZ1NlYXJjaFdpbmRvdzo6c2VhcmNoKHZvaWQpCit7CisJc3RydWN0
IHN5bWJvbCAqKnA7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCUNvbmZpZ0l0ZW0gKmxhc3RJ
dGVtID0gTlVMTDsKKworCWZyZWUocmVzdWx0KTsKKwlsaXN0LT5saXN0LT5jbGVhcigpOworCWlu
Zm8tPmNsZWFyKCk7CisKKwlyZXN1bHQgPSBzeW1fcmVfc2VhcmNoKGVkaXRGaWVsZC0+dGV4dCgp
LnRvTGF0aW4xKCkpOworCWlmICghcmVzdWx0KQorCQlyZXR1cm47CisJZm9yIChwID0gcmVzdWx0
OyAqcDsgcCsrKSB7CisJCWZvcl9hbGxfcHJvbXB0cygoKnApLCBwcm9wKQorCQkJbGFzdEl0ZW0g
PSBuZXcgQ29uZmlnSXRlbShsaXN0LT5saXN0LCBsYXN0SXRlbSwgcHJvcC0+bWVudSwKKwkJCQkJ
CSAgbWVudV9pc192aXNpYmxlKHByb3AtPm1lbnUpKTsKKwl9Cit9CisKKy8qCisgKiBDb25zdHJ1
Y3QgdGhlIGNvbXBsZXRlIGNvbmZpZyB3aWRnZXQKKyAqLworQ29uZmlnTWFpbldpbmRvdzo6Q29u
ZmlnTWFpbldpbmRvdyh2b2lkKQorCTogc2VhcmNoV2luZG93KDApCit7CisJUU1lbnVCYXIqIG1l
bnU7CisJYm9vbCBvayA9IHRydWU7CisJUVZhcmlhbnQgeCwgeTsKKwlpbnQgd2lkdGgsIGhlaWdo
dDsKKwljaGFyIHRpdGxlWzI1Nl07CisKKwlRRGVza3RvcFdpZGdldCAqZCA9IGNvbmZpZ0FwcC0+
ZGVza3RvcCgpOworCXNucHJpbnRmKHRpdGxlLCBzaXplb2YodGl0bGUpLCAiJXMlcyIsCisJCXJv
b3RtZW51LnByb21wdC0+dGV4dCwKKwkJIiIKKwkJKTsKKwlzZXRXaW5kb3dUaXRsZSh0aXRsZSk7
CisKKwl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB3aWR0aCIsIGQtPndp
ZHRoKCkgLSA2NCkudG9JbnQoKTsKKwloZWlnaHQgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93
aW5kb3cgaGVpZ2h0IiwgZC0+aGVpZ2h0KCkgLSA2NCkudG9JbnQoKTsKKwlyZXNpemUod2lkdGgs
IGhlaWdodCk7CisJeCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB4Iik7CisJeSA9
IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB5Iik7CisJaWYgKCh4LmlzVmFsaWQoKSkm
Jih5LmlzVmFsaWQoKSkpCisJCW1vdmUoeC50b0ludCgpLCB5LnRvSW50KCkpOworCisJc3BsaXQx
ID0gbmV3IFFTcGxpdHRlcih0aGlzKTsKKwlzcGxpdDEtPnNldE9yaWVudGF0aW9uKFF0OjpIb3Jp
em9udGFsKTsKKwlzZXRDZW50cmFsV2lkZ2V0KHNwbGl0MSk7CisKKwltZW51VmlldyA9IG5ldyBD
b25maWdWaWV3KHNwbGl0MSwgIm1lbnUiKTsKKwltZW51TGlzdCA9IG1lbnVWaWV3LT5saXN0Owor
CisJc3BsaXQyID0gbmV3IFFTcGxpdHRlcihzcGxpdDEpOworCXNwbGl0Mi0+c2V0T3JpZW50YXRp
b24oUXQ6OlZlcnRpY2FsKTsKKworCS8vIGNyZWF0ZSBjb25maWcgdHJlZQorCWNvbmZpZ1ZpZXcg
PSBuZXcgQ29uZmlnVmlldyhzcGxpdDIsICJjb25maWciKTsKKwljb25maWdMaXN0ID0gY29uZmln
Vmlldy0+bGlzdDsKKworCWhlbHBUZXh0ID0gbmV3IENvbmZpZ0luZm9WaWV3KHNwbGl0MiwgImhl
bHAiKTsKKworCXNldFRhYk9yZGVyKGNvbmZpZ0xpc3QsIGhlbHBUZXh0KTsKKwljb25maWdMaXN0
LT5zZXRGb2N1cygpOworCisJbWVudSA9IG1lbnVCYXIoKTsKKwl0b29sQmFyID0gbmV3IFFUb29s
QmFyKCJUb29scyIsIHRoaXMpOworCWFkZFRvb2xCYXIodG9vbEJhcik7CisKKwliYWNrQWN0aW9u
ID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fYmFjayksICJCYWNrIiwgdGhpcyk7CisJICBjb25u
ZWN0KGJhY2tBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKGdvQmFjaygpKSk7
CisJICBiYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKwlRQWN0aW9uICpxdWl0QWN0aW9u
ID0gbmV3IFFBY3Rpb24oIiZRdWl0IiwgdGhpcyk7CisJcXVpdEFjdGlvbi0+c2V0U2hvcnRjdXQo
UXQ6OkNUUkwgKyBRdDo6S2V5X1EpOworCSAgY29ubmVjdChxdWl0QWN0aW9uLCBTSUdOQUwodHJp
Z2dlcmVkKGJvb2wpKSwgU0xPVChjbG9zZSgpKSk7CisJUUFjdGlvbiAqbG9hZEFjdGlvbiA9IG5l
dyBRQWN0aW9uKFFQaXhtYXAoeHBtX2xvYWQpLCAiJkxvYWQiLCB0aGlzKTsKKwlsb2FkQWN0aW9u
LT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfTCk7CisJICBjb25uZWN0KGxvYWRBY3Rp
b24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKGxvYWRDb25maWcoKSkpOworCXNhdmVB
Y3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9zYXZlKSwgIiZTYXZlIiwgdGhpcyk7CisJ
c2F2ZUFjdGlvbi0+c2V0U2hvcnRjdXQoUXQ6OkNUUkwgKyBRdDo6S2V5X1MpOworCSAgY29ubmVj
dChzYXZlQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzYXZlQ29uZmlnKCkp
KTsKKwljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZfY2hhbmdlZCk7CisJLy8gU2V0IHNh
dmVBY3Rpb24ncyBpbml0aWFsIHN0YXRlCisJY29uZl9jaGFuZ2VkKCk7CisJY29uZmlnbmFtZSA9
IHhzdHJkdXAoY29uZl9nZXRfY29uZmlnbmFtZSgpKTsKKworCVFBY3Rpb24gKnNhdmVBc0FjdGlv
biA9IG5ldyBRQWN0aW9uKCJTYXZlICZBcy4uLiIsIHRoaXMpOworCSAgY29ubmVjdChzYXZlQXNB
Y3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNhdmVDb25maWdBcygpKSk7CisJ
UUFjdGlvbiAqc2VhcmNoQWN0aW9uID0gbmV3IFFBY3Rpb24oIiZGaW5kIiwgdGhpcyk7CisJc2Vh
cmNoQWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfRik7CisJICBjb25uZWN0
KHNlYXJjaEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2VhcmNoQ29uZmln
KCkpKTsKKwlzaW5nbGVWaWV3QWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fc2luZ2xl
X3ZpZXcpLCAiU2luZ2xlIFZpZXciLCB0aGlzKTsKKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRDaGVj
a2FibGUodHJ1ZSk7CisJICBjb25uZWN0KHNpbmdsZVZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2Vy
ZWQoYm9vbCkpLCBTTE9UKHNob3dTaW5nbGVWaWV3KCkpKTsKKwlzcGxpdFZpZXdBY3Rpb24gPSBu
ZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9zcGxpdF92aWV3KSwgIlNwbGl0IFZpZXciLCB0aGlzKTsK
KwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKwkgIGNvbm5lY3Qoc3BsaXRW
aWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93U3BsaXRWaWV3KCkp
KTsKKwlmdWxsVmlld0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3RyZWVfdmlldyks
ICJGdWxsIFZpZXciLCB0aGlzKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUp
OworCSAgY29ubmVjdChmdWxsVmlld0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNM
T1Qoc2hvd0Z1bGxWaWV3KCkpKTsKKworCVFBY3Rpb24gKnNob3dOYW1lQWN0aW9uID0gbmV3IFFB
Y3Rpb24oIlNob3cgTmFtZSIsIHRoaXMpOworCSAgc2hvd05hbWVBY3Rpb24tPnNldENoZWNrYWJs
ZSh0cnVlKTsKKwkgIGNvbm5lY3Qoc2hvd05hbWVBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wp
KSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93TmFtZShib29sKSkpOworCSAgc2hvd05hbWVBY3Rp
b24tPnNldENoZWNrZWQoY29uZmlnVmlldy0+c2hvd05hbWUoKSk7CisJUUFjdGlvbiAqc2hvd1Jh
bmdlQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgUmFuZ2UiLCB0aGlzKTsKKwkgIHNob3dSYW5n
ZUFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCSAgY29ubmVjdChzaG93UmFuZ2VBY3Rpb24s
IFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93UmFuZ2UoYm9v
bCkpKTsKKwlRQWN0aW9uICpzaG93RGF0YUFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IERhdGEi
LCB0aGlzKTsKKwkgIHNob3dEYXRhQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJICBjb25u
ZWN0KHNob3dEYXRhQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGNvbmZpZ1ZpZXcsIFNM
T1Qoc2V0U2hvd0RhdGEoYm9vbCkpKTsKKworCVFBY3Rpb25Hcm91cCAqb3B0R3JvdXAgPSBuZXcg
UUFjdGlvbkdyb3VwKHRoaXMpOworCW9wdEdyb3VwLT5zZXRFeGNsdXNpdmUodHJ1ZSk7CisJY29u
bmVjdChvcHRHcm91cCwgU0lHTkFMKHRyaWdnZXJlZChRQWN0aW9uKikpLCBjb25maWdWaWV3LAor
CQlTTE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKSkpOworCWNvbm5lY3Qob3B0R3JvdXAsIFNJ
R05BTCh0cmlnZ2VyZWQoUUFjdGlvbiAqKSksIG1lbnVWaWV3LAorCQlTTE9UKHNldE9wdGlvbk1v
ZGUoUUFjdGlvbiAqKSkpOworCisJY29uZmlnVmlldy0+c2hvd05vcm1hbEFjdGlvbiA9IG5ldyBR
QWN0aW9uKCJTaG93IE5vcm1hbCBPcHRpb25zIiwgb3B0R3JvdXApOworCWNvbmZpZ1ZpZXctPnNo
b3dBbGxBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBBbGwgT3B0aW9ucyIsIG9wdEdyb3VwKTsK
Kwljb25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgUHJvbXB0
IE9wdGlvbnMiLCBvcHRHcm91cCk7CisJY29uZmlnVmlldy0+c2hvd05vcm1hbEFjdGlvbi0+c2V0
Q2hlY2thYmxlKHRydWUpOworCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24tPnNldENoZWNrYWJs
ZSh0cnVlKTsKKwljb25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9uLT5zZXRDaGVja2FibGUodHJ1
ZSk7CisKKwlRQWN0aW9uICpzaG93RGVidWdBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBEZWJ1
ZyBJbmZvIiwgdGhpcyk7CisJICBzaG93RGVidWdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsK
KwkgIGNvbm5lY3Qoc2hvd0RlYnVnQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGhlbHBU
ZXh0LCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOworCSAgc2hvd0RlYnVnQWN0aW9uLT5zZXRD
aGVja2VkKGhlbHBUZXh0LT5zaG93RGVidWcoKSk7CisKKwlRQWN0aW9uICpzaG93SW50cm9BY3Rp
b24gPSBuZXcgUUFjdGlvbigiSW50cm9kdWN0aW9uIiwgdGhpcyk7CisJICBjb25uZWN0KHNob3dJ
bnRyb0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd0ludHJvKCkpKTsK
KwlRQWN0aW9uICpzaG93QWJvdXRBY3Rpb24gPSBuZXcgUUFjdGlvbigiQWJvdXQiLCB0aGlzKTsK
KwkgIGNvbm5lY3Qoc2hvd0Fib3V0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xP
VChzaG93QWJvdXQoKSkpOworCisJLy8gaW5pdCB0b29sIGJhcgorCXRvb2xCYXItPmFkZEFjdGlv
bihiYWNrQWN0aW9uKTsKKwl0b29sQmFyLT5hZGRTZXBhcmF0b3IoKTsKKwl0b29sQmFyLT5hZGRB
Y3Rpb24obG9hZEFjdGlvbik7CisJdG9vbEJhci0+YWRkQWN0aW9uKHNhdmVBY3Rpb24pOworCXRv
b2xCYXItPmFkZFNlcGFyYXRvcigpOworCXRvb2xCYXItPmFkZEFjdGlvbihzaW5nbGVWaWV3QWN0
aW9uKTsKKwl0b29sQmFyLT5hZGRBY3Rpb24oc3BsaXRWaWV3QWN0aW9uKTsKKwl0b29sQmFyLT5h
ZGRBY3Rpb24oZnVsbFZpZXdBY3Rpb24pOworCisJLy8gY3JlYXRlIGNvbmZpZyBtZW51CisJUU1l
bnUqIGNvbmZpZyA9IG1lbnUtPmFkZE1lbnUoIiZGaWxlIik7CisJY29uZmlnLT5hZGRBY3Rpb24o
bG9hZEFjdGlvbik7CisJY29uZmlnLT5hZGRBY3Rpb24oc2F2ZUFjdGlvbik7CisJY29uZmlnLT5h
ZGRBY3Rpb24oc2F2ZUFzQWN0aW9uKTsKKwljb25maWctPmFkZFNlcGFyYXRvcigpOworCWNvbmZp
Zy0+YWRkQWN0aW9uKHF1aXRBY3Rpb24pOworCisJLy8gY3JlYXRlIGVkaXQgbWVudQorCVFNZW51
KiBlZGl0TWVudSA9IG1lbnUtPmFkZE1lbnUoIiZFZGl0Iik7CisJZWRpdE1lbnUtPmFkZEFjdGlv
bihzZWFyY2hBY3Rpb24pOworCisJLy8gY3JlYXRlIG9wdGlvbnMgbWVudQorCVFNZW51KiBvcHRp
b25NZW51ID0gbWVudS0+YWRkTWVudSgiJk9wdGlvbiIpOworCW9wdGlvbk1lbnUtPmFkZEFjdGlv
bihzaG93TmFtZUFjdGlvbik7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dSYW5nZUFjdGlv
bik7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dEYXRhQWN0aW9uKTsKKwlvcHRpb25NZW51
LT5hZGRTZXBhcmF0b3IoKTsKKwlvcHRpb25NZW51LT5hZGRBY3Rpb25zKG9wdEdyb3VwLT5hY3Rp
b25zKCkpOworCW9wdGlvbk1lbnUtPmFkZFNlcGFyYXRvcigpOworCW9wdGlvbk1lbnUtPmFkZEFj
dGlvbihzaG93RGVidWdBY3Rpb24pOworCisJLy8gY3JlYXRlIGhlbHAgbWVudQorCW1lbnUtPmFk
ZFNlcGFyYXRvcigpOworCVFNZW51KiBoZWxwTWVudSA9IG1lbnUtPmFkZE1lbnUoIiZIZWxwIik7
CisJaGVscE1lbnUtPmFkZEFjdGlvbihzaG93SW50cm9BY3Rpb24pOworCWhlbHBNZW51LT5hZGRB
Y3Rpb24oc2hvd0Fib3V0QWN0aW9uKTsKKworCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKG1l
bnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwKKwkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1
Y3QgbWVudSAqKSkpOworCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKG1lbnVTZWxlY3RlZChz
dHJ1Y3QgbWVudSAqKSksCisJCVNMT1QoY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOworCWNv
bm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKHBhcmVudFNlbGVjdGVkKCkpLAorCQlTTE9UKGdvQmFj
aygpKSk7CisJY29ubmVjdChtZW51TGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51
ICopKSwKKwkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOworCWNvbm5l
Y3QobWVudUxpc3QsIFNJR05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLAorCQlTTE9U
KGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKikpKTsKKworCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lH
TkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwKKwkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhz
dHJ1Y3QgbWVudSAqKSkpOworCWNvbm5lY3QobWVudUxpc3QsIFNJR05BTChnb3RGb2N1cyhzdHJ1
Y3QgbWVudSAqKSksCisJCWhlbHBUZXh0LCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsK
Kwljb25uZWN0KG1lbnVMaXN0LCBTSUdOQUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLAorCQlT
TE9UKGxpc3RGb2N1c0NoYW5nZWQodm9pZCkpKTsKKwljb25uZWN0KGhlbHBUZXh0LCBTSUdOQUwo
bWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopKSwKKwkJU0xPVChzZXRNZW51TGluayhzdHJ1Y3Qg
bWVudSAqKSkpOworCisJUVN0cmluZyBsaXN0TW9kZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgi
L2xpc3RNb2RlIiwgInN5bWJvbCIpLnRvU3RyaW5nKCk7CisJaWYgKGxpc3RNb2RlID09ICJzaW5n
bGUiKQorCQlzaG93U2luZ2xlVmlldygpOworCWVsc2UgaWYgKGxpc3RNb2RlID09ICJmdWxsIikK
KwkJc2hvd0Z1bGxWaWV3KCk7CisJZWxzZSAvKmlmIChsaXN0TW9kZSA9PSAic3BsaXQiKSovCisJ
CXNob3dTcGxpdFZpZXcoKTsKKworCS8vIFVJIHNldHVwIGRvbmUsIHJlc3RvcmUgc3BsaXR0ZXIg
cG9zaXRpb25zCisJUUxpc3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMo
Ii9zcGxpdDEiLCAmb2spOworCWlmIChvaykKKwkJc3BsaXQxLT5zZXRTaXplcyhzaXplcyk7CisK
KwlzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxpdDIiLCAmb2spOworCWlm
IChvaykKKwkJc3BsaXQyLT5zZXRTaXplcyhzaXplcyk7Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldp
bmRvdzo6bG9hZENvbmZpZyh2b2lkKQoreworCVFTdHJpbmcgc3RyOworCVFCeXRlQXJyYXkgYmE7
CisJY29uc3QgY2hhciAqbmFtZTsKKworCXN0ciA9IFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5h
bWUodGhpcywgIiIsIGNvbmZpZ25hbWUpOworCWlmIChzdHIuaXNOdWxsKCkpCisJCXJldHVybjsK
KworCWJhID0gc3RyLnRvTG9jYWw4Qml0KCk7CisJbmFtZSA9IGJhLmRhdGEoKTsKKworCWlmIChj
b25mX3JlYWQobmFtZSkpCisJCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCAicWNvbmYi
LCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlvbiEiKTsKKworCWZyZWUoY29uZmlnbmFtZSk7
CisJY29uZmlnbmFtZSA9IHhzdHJkdXAobmFtZSk7CisKKwlDb25maWdWaWV3Ojp1cGRhdGVMaXN0
QWxsKCk7Cit9CisKK2Jvb2wgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUNvbmZpZyh2b2lkKQorewor
CWlmIChjb25mX3dyaXRlKGNvbmZpZ25hbWUpKSB7CisJCVFNZXNzYWdlQm94OjppbmZvcm1hdGlv
bih0aGlzLCAicWNvbmYiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiEiKTsKKwkJcmV0
dXJuIGZhbHNlOworCX0KKwljb25mX3dyaXRlX2F1dG9jb25mKDApOworCisJcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUNvbmZpZ0FzKHZvaWQpCit7CisJUVN0
cmluZyBzdHI7CisJUUJ5dGVBcnJheSBiYTsKKwljb25zdCBjaGFyICpuYW1lOworCisJc3RyID0g
UUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSh0aGlzLCAiIiwgY29uZmlnbmFtZSk7CisJaWYg
KHN0ci5pc051bGwoKSkKKwkJcmV0dXJuOworCisJYmEgPSBzdHIudG9Mb2NhbDhCaXQoKTsKKwlu
YW1lID0gYmEuZGF0YSgpOworCisJaWYgKGNvbmZfd3JpdGUobmFtZSkpIHsKKwkJUU1lc3NhZ2VC
b3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0
aW9uISIpOworCX0KKwljb25mX3dyaXRlX2F1dG9jb25mKDApOworCisJZnJlZShjb25maWduYW1l
KTsKKwljb25maWduYW1lID0geHN0cmR1cChuYW1lKTsKK30KKwordm9pZCBDb25maWdNYWluV2lu
ZG93OjpzZWFyY2hDb25maWcodm9pZCkKK3sKKwlpZiAoIXNlYXJjaFdpbmRvdykKKwkJc2VhcmNo
V2luZG93ID0gbmV3IENvbmZpZ1NlYXJjaFdpbmRvdyh0aGlzLCAic2VhcmNoIik7CisJc2VhcmNo
V2luZG93LT5zaG93KCk7Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Y2hhbmdlTWVudShz
dHJ1Y3QgbWVudSAqbWVudSkKK3sKKwljb25maWdMaXN0LT5zZXRSb290TWVudShtZW51KTsKKwlp
ZiAoY29uZmlnTGlzdC0+cm9vdEVudHJ5LT5wYXJlbnQgPT0gJnJvb3RtZW51KQorCQliYWNrQWN0
aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKwllbHNlCisJCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQo
dHJ1ZSk7Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2V0TWVudUxpbmsoc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKnBhcmVudDsKKwlDb25maWdMaXN0KiBsaXN0ID0g
TlVMTDsKKwlDb25maWdJdGVtKiBpdGVtOworCisJaWYgKGNvbmZpZ0xpc3QtPm1lbnVTa2lwKG1l
bnUpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGNvbmZpZ0xpc3QtPm1vZGUpIHsKKwljYXNlIHNp
bmdsZU1vZGU6CisJCWxpc3QgPSBjb25maWdMaXN0OworCQlwYXJlbnQgPSBtZW51X2dldF9wYXJl
bnRfbWVudShtZW51KTsKKwkJaWYgKCFwYXJlbnQpCisJCQlyZXR1cm47CisJCWxpc3QtPnNldFJv
b3RNZW51KHBhcmVudCk7CisJCWJyZWFrOworCWNhc2Ugc3ltYm9sTW9kZToKKwkJaWYgKG1lbnUt
PmZsYWdzICYgTUVOVV9ST09UKSB7CisJCQljb25maWdMaXN0LT5zZXRSb290TWVudShtZW51KTsK
KwkJCWNvbmZpZ0xpc3QtPmNsZWFyU2VsZWN0aW9uKCk7CisJCQlsaXN0ID0gbWVudUxpc3Q7CisJ
CX0gZWxzZSB7CisJCQlsaXN0ID0gY29uZmlnTGlzdDsKKwkJCXBhcmVudCA9IG1lbnVfZ2V0X3Bh
cmVudF9tZW51KG1lbnUtPnBhcmVudCk7CisJCQlpZiAoIXBhcmVudCkKKwkJCQlyZXR1cm47CisJ
CQlpdGVtID0gbWVudUxpc3QtPmZpbmRDb25maWdJdGVtKHBhcmVudCk7CisJCQlpZiAoaXRlbSkg
eworCQkJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOworCQkJCW1lbnVMaXN0LT5zY3JvbGxUb0l0
ZW0oaXRlbSk7CisJCQl9CisJCQlsaXN0LT5zZXRSb290TWVudShwYXJlbnQpOworCQl9CisJCWJy
ZWFrOworCWNhc2UgZnVsbE1vZGU6CisJCWxpc3QgPSBjb25maWdMaXN0OworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAobGlzdCkgeworCQlpdGVtID0gbGlzdC0+Zmlu
ZENvbmZpZ0l0ZW0obWVudSk7CisJCWlmIChpdGVtKSB7CisJCQlpdGVtLT5zZXRTZWxlY3RlZCh0
cnVlKTsKKwkJCWxpc3QtPnNjcm9sbFRvSXRlbShpdGVtKTsKKwkJCWxpc3QtPnNldEZvY3VzKCk7
CisJCX0KKwl9Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6bGlzdEZvY3VzQ2hhbmdlZCh2
b2lkKQoreworCWlmIChtZW51TGlzdC0+bW9kZSA9PSBtZW51TW9kZSkKKwkJY29uZmlnTGlzdC0+
Y2xlYXJTZWxlY3Rpb24oKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93Ojpnb0JhY2sodm9p
ZCkKK3sKKwlDb25maWdJdGVtKiBpdGVtLCAqb2xkU2VsZWN0aW9uOworCisJY29uZmlnTGlzdC0+
c2V0UGFyZW50TWVudSgpOworCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51
KQorCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKworCWlmIChtZW51TGlzdC0+c2Vs
ZWN0ZWRJdGVtcygpLmNvdW50KCkgPT0gMCkKKwkJcmV0dXJuOworCisJaXRlbSA9IChDb25maWdJ
dGVtKiltZW51TGlzdC0+c2VsZWN0ZWRJdGVtcygpLmZpcnN0KCk7CisJb2xkU2VsZWN0aW9uID0g
aXRlbTsKKwl3aGlsZSAoaXRlbSkgeworCQlpZiAoaXRlbS0+bWVudSA9PSBjb25maWdMaXN0LT5y
b290RW50cnkpIHsKKwkJCW9sZFNlbGVjdGlvbi0+c2V0U2VsZWN0ZWQoZmFsc2UpOworCQkJaXRl
bS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisJCQlicmVhazsKKwkJfQorCQlpdGVtID0gKENvbmZpZ0l0
ZW0qKWl0ZW0tPnBhcmVudCgpOworCX0KK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzaG93
U2luZ2xlVmlldyh2b2lkKQoreworCXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2Up
OworCXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQodHJ1ZSk7CisJc3BsaXRWaWV3QWN0aW9u
LT5zZXRFbmFibGVkKHRydWUpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7
CisJZnVsbFZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7CisJZnVsbFZpZXdBY3Rpb24tPnNl
dENoZWNrZWQoZmFsc2UpOworCisJbWVudVZpZXctPmhpZGUoKTsKKwltZW51TGlzdC0+c2V0Um9v
dE1lbnUoMCk7CisJY29uZmlnTGlzdC0+bW9kZSA9IHNpbmdsZU1vZGU7CisJaWYgKGNvbmZpZ0xp
c3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpCisJCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwo
KTsKKwllbHNlCisJCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7CisJY29uZmln
TGlzdC0+c2V0Rm9jdXMoKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzaG93U3BsaXRW
aWV3KHZvaWQpCit7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKKwlzaW5n
bGVWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsKKwlzcGxpdFZpZXdBY3Rpb24tPnNldEVu
YWJsZWQoZmFsc2UpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZCh0cnVlKTsKKwlmdWxs
Vmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2tl
ZChmYWxzZSk7CisKKwljb25maWdMaXN0LT5tb2RlID0gc3ltYm9sTW9kZTsKKwlpZiAoY29uZmln
TGlzdC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFs
bCgpOworCWVsc2UKKwkJY29uZmlnTGlzdC0+c2V0Um9vdE1lbnUoJnJvb3RtZW51KTsKKwljb25m
aWdMaXN0LT5zZXRBbGxPcGVuKHRydWUpOworCWNvbmZpZ0FwcC0+cHJvY2Vzc0V2ZW50cygpOwor
CW1lbnVMaXN0LT5tb2RlID0gbWVudU1vZGU7CisJbWVudUxpc3QtPnNldFJvb3RNZW51KCZyb290
bWVudSk7CisJbWVudUxpc3QtPnNldEFsbE9wZW4odHJ1ZSk7CisJbWVudVZpZXctPnNob3coKTsK
KwltZW51TGlzdC0+c2V0Rm9jdXMoKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzaG93
RnVsbFZpZXcodm9pZCkKK3sKKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwor
CXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOworCXNwbGl0Vmlld0FjdGlvbi0+
c2V0RW5hYmxlZCh0cnVlKTsKKwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOwor
CWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0
Q2hlY2tlZCh0cnVlKTsKKworCW1lbnVWaWV3LT5oaWRlKCk7CisJbWVudUxpc3QtPnNldFJvb3RN
ZW51KDApOworCWNvbmZpZ0xpc3QtPm1vZGUgPSBmdWxsTW9kZTsKKwlpZiAoY29uZmlnTGlzdC0+
cm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOwor
CWVsc2UKKwkJY29uZmlnTGlzdC0+c2V0Um9vdE1lbnUoJnJvb3RtZW51KTsKKwljb25maWdMaXN0
LT5zZXRGb2N1cygpOworfQorCisvKgorICogYXNrIGZvciBzYXZpbmcgY29uZmlndXJhdGlvbiBi
ZWZvcmUgcXVpdHRpbmcKKyAqIFRPRE8gYXNrIG9ubHkgd2hlbiBzb21ldGhpbmcgY2hhbmdlZAor
ICovCit2b2lkIENvbmZpZ01haW5XaW5kb3c6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQqIGUpCit7
CisJaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpIHsKKwkJZS0+YWNjZXB0KCk7CisJCXJldHVybjsK
Kwl9CisJUU1lc3NhZ2VCb3ggbWIoInFjb25mIiwgIlNhdmUgY29uZmlndXJhdGlvbj8iLCBRTWVz
c2FnZUJveDo6V2FybmluZywKKwkJCVFNZXNzYWdlQm94OjpZZXMgfCBRTWVzc2FnZUJveDo6RGVm
YXVsdCwgUU1lc3NhZ2VCb3g6Ok5vLCBRTWVzc2FnZUJveDo6Q2FuY2VsIHwgUU1lc3NhZ2VCb3g6
OkVzY2FwZSk7CisJbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJveDo6WWVzLCAiJlNhdmUgQ2hh
bmdlcyIpOworCW1iLnNldEJ1dHRvblRleHQoUU1lc3NhZ2VCb3g6Ok5vLCAiJkRpc2NhcmQgQ2hh
bmdlcyIpOworCW1iLnNldEJ1dHRvblRleHQoUU1lc3NhZ2VCb3g6OkNhbmNlbCwgIkNhbmNlbCBF
eGl0Iik7CisJc3dpdGNoIChtYi5leGVjKCkpIHsKKwljYXNlIFFNZXNzYWdlQm94OjpZZXM6CisJ
CWlmIChzYXZlQ29uZmlnKCkpCisJCQllLT5hY2NlcHQoKTsKKwkJZWxzZQorCQkJZS0+aWdub3Jl
KCk7CisJCWJyZWFrOworCWNhc2UgUU1lc3NhZ2VCb3g6Ok5vOgorCQllLT5hY2NlcHQoKTsKKwkJ
YnJlYWs7CisJY2FzZSBRTWVzc2FnZUJveDo6Q2FuY2VsOgorCQllLT5pZ25vcmUoKTsKKwkJYnJl
YWs7CisJfQorfQorCit2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dJbnRybyh2b2lkKQorewor
CXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9ICJXZWxjb21lIHRvIHRoZSBxY29uZiBncmFwaGlj
YWwgY29uZmlndXJhdGlvbiB0b29sLlxuXG4iCisJCSJGb3IgZWFjaCBvcHRpb24sIGEgYmxhbmsg
Ym94IGluZGljYXRlcyB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCwgYSBjaGVja1xuIgorCQkiaW5k
aWNhdGVzIGl0IGlzIGVuYWJsZWQsIGFuZCBhIGRvdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyB0byBi
ZSBjb21waWxlZFxuIgorCQkiYXMgYSBtb2R1bGUuICBDbGlja2luZyBvbiB0aGUgYm94IHdpbGwg
Y3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc3RhdGVzLlxuXG4iCisJCSJJZiB5b3UgZG8gbm90IHNl
ZSBhbiBvcHRpb24gKGUuZy4sIGEgZGV2aWNlIGRyaXZlcikgdGhhdCB5b3UgYmVsaWV2ZVxuIgor
CQkic2hvdWxkIGJlIHByZXNlbnQsIHRyeSB0dXJuaW5nIG9uIFNob3cgQWxsIE9wdGlvbnMgdW5k
ZXIgdGhlIE9wdGlvbnMgbWVudS5cbiIKKwkJIkFsdGhvdWdoIHRoZXJlIGlzIG5vIGNyb3NzIHJl
ZmVyZW5jZSB5ZXQgdG8gaGVscCB5b3UgZmlndXJlIG91dCB3aGF0IG90aGVyXG4iCisJCSJvcHRp
b25zIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoZSBvcHRpb24geW91IGFyZSBpbnRlcmVz
dGVkIGluLCB5b3UgY2FuXG4iCisJCSJzdGlsbCB2aWV3IHRoZSBoZWxwIG9mIGEgZ3JheWVkLW91
dCBvcHRpb24uXG5cbiIKKwkJIlRvZ2dsaW5nIFNob3cgRGVidWcgSW5mbyB1bmRlciB0aGUgT3B0
aW9ucyBtZW51IHdpbGwgc2hvdyB0aGUgZGVwZW5kZW5jaWVzLFxuIgorCQkid2hpY2ggeW91IGNh
biB0aGVuIG1hdGNoIGJ5IGV4YW1pbmluZyBvdGhlciBvcHRpb25zLlxuXG4iOworCisJUU1lc3Nh
Z2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7Cit9CisKK3ZvaWQgQ29uZmln
TWFpbldpbmRvdzo6c2hvd0Fib3V0KHZvaWQpCit7CisJc3RhdGljIGNvbnN0IFFTdHJpbmcgc3Ry
ID0gInFjb25mIGlzIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51
eC1tNjhrLm9yZz4uXG4iCisJCSJDb3B5cmlnaHQgKEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zza2kg
PGJiYXJidWxvdnNraUBnbWFpbC5jb20+LlxuXG4iCisJCSJCdWcgcmVwb3J0cyBhbmQgZmVhdHVy
ZSByZXF1ZXN0IGNhbiBhbHNvIGJlIGVudGVyZWQgYXQgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5v
cmcvXG4iOworCisJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7
Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZVNldHRpbmdzKHZvaWQpCit7CisJY29u
ZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHgiLCBwb3MoKS54KCkpOworCWNvbmZpZ1Nl
dHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5IiwgcG9zKCkueSgpKTsKKwljb25maWdTZXR0aW5n
cy0+c2V0VmFsdWUoIi93aW5kb3cgd2lkdGgiLCBzaXplKCkud2lkdGgoKSk7CisJY29uZmlnU2V0
dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IGhlaWdodCIsIHNpemUoKS5oZWlnaHQoKSk7CisKKwlR
U3RyaW5nIGVudHJ5OworCXN3aXRjaChjb25maWdMaXN0LT5tb2RlKSB7CisJY2FzZSBzaW5nbGVN
b2RlIDoKKwkJZW50cnkgPSAic2luZ2xlIjsKKwkJYnJlYWs7CisKKwljYXNlIHN5bWJvbE1vZGUg
OgorCQllbnRyeSA9ICJzcGxpdCI7CisJCWJyZWFrOworCisJY2FzZSBmdWxsTW9kZSA6CisJCWVu
dHJ5ID0gImZ1bGwiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwljb25m
aWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9saXN0TW9kZSIsIGVudHJ5KTsKKworCWNvbmZpZ1NldHRp
bmdzLT53cml0ZVNpemVzKCIvc3BsaXQxIiwgc3BsaXQxLT5zaXplcygpKTsKKwljb25maWdTZXR0
aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0MiIsIHNwbGl0Mi0+c2l6ZXMoKSk7Cit9CisKK3ZvaWQg
Q29uZmlnTWFpbldpbmRvdzo6Y29uZl9jaGFuZ2VkKHZvaWQpCit7CisJaWYgKHNhdmVBY3Rpb24p
CisJCXNhdmVBY3Rpb24tPnNldEVuYWJsZWQoY29uZl9nZXRfY2hhbmdlZCgpKTsKK30KKwordm9p
ZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqY2hp
bGQ7CisJc3RhdGljIGludCBtZW51X2NudCA9IDA7CisKKwltZW51LT5mbGFncyB8PSBNRU5VX1JP
T1Q7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
KSB7CisJCWlmIChjaGlsZC0+cHJvbXB0ICYmIGNoaWxkLT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5V
KSB7CisJCQltZW51X2NudCsrOworCQkJZml4dXBfcm9vdG1lbnUoY2hpbGQpOworCQkJbWVudV9j
bnQtLTsKKwkJfSBlbHNlIGlmICghbWVudV9jbnQpCisJCQlmaXh1cF9yb290bWVudShjaGlsZCk7
CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CisKK3N0YXRpYyB2b2lkIHVz
YWdlKHZvaWQpCit7CisJcHJpbnRmKCIlcyBbLXNdIDxjb25maWc+XG4iLCBwcm9nbmFtZSk7CisJ
ZXhpdCgwKTsKK30KKworaW50IG1haW4oaW50IGFjLCBjaGFyKiogYXYpCit7CisJQ29uZmlnTWFp
bldpbmRvdyogdjsKKwljb25zdCBjaGFyICpuYW1lOworCisJcHJvZ25hbWUgPSBhdlswXTsKKwlj
b25maWdBcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFjLCBhdik7CisJaWYgKGFjID4gMSAmJiBhdlsx
XVswXSA9PSAnLScpIHsKKwkJc3dpdGNoIChhdlsxXVsxXSkgeworCQljYXNlICdzJzoKKwkJCWNv
bmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJ
CWNhc2UgJz8nOgorCQkJdXNhZ2UoKTsKKwkJfQorCQluYW1lID0gYXZbMl07CisJfSBlbHNlCisJ
CW5hbWUgPSBhdlsxXTsKKwlpZiAoIW5hbWUpCisJCXVzYWdlKCk7CisKKwljb25mX3BhcnNlKG5h
bWUpOworCWZpeHVwX3Jvb3RtZW51KCZyb290bWVudSk7CisJY29uZl9yZWFkKE5VTEwpOworCS8v
emNvbmZkdW1wKHN0ZG91dCk7CisKKwljb25maWdTZXR0aW5ncyA9IG5ldyBDb25maWdTZXR0aW5n
cygpOworCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKCIva2NvbmZpZy9xY29uZiIpOworCXYg
PSBuZXcgQ29uZmlnTWFpbldpbmRvdygpOworCisJLy96Y29uZmR1bXAoc3Rkb3V0KTsKKwljb25m
aWdBcHAtPmNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwobGFzdFdpbmRvd0Nsb3NlZCgpKSwgU0xP
VChxdWl0KCkpKTsKKwljb25maWdBcHAtPmNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRU
b1F1aXQoKSksIHYsIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsKKwl2LT5zaG93KCk7CisJY29uZmln
QXBwLT5leGVjKCk7CisKKwljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwlkZWxldGUgY29u
ZmlnU2V0dGluZ3M7CisJZGVsZXRlIHY7CisJZGVsZXRlIGNvbmZpZ0FwcDsKKworCXJldHVybiAw
OworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5oIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9xY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1
YmZlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmgKQEAg
LTAsMCArMSwzMzEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsu
b3JnPgorICovCisKKyNpbmNsdWRlIDxRVGV4dEJyb3dzZXI+CisjaW5jbHVkZSA8UVRyZWVXaWRn
ZXQ+CisjaW5jbHVkZSA8UU1haW5XaW5kb3c+CisjaW5jbHVkZSA8UUhlYWRlclZpZXc+CisjaW5j
bHVkZSA8cXNldHRpbmdzLmg+CisjaW5jbHVkZSA8UVB1c2hCdXR0b24+CisjaW5jbHVkZSA8UVNl
dHRpbmdzPgorI2luY2x1ZGUgPFFMaW5lRWRpdD4KKyNpbmNsdWRlIDxRU3BsaXR0ZXI+CisjaW5j
bHVkZSA8UUNoZWNrQm94PgorI2luY2x1ZGUgPFFEaWFsb2c+CisjaW5jbHVkZSAiZXhwci5oIgor
CitjbGFzcyBDb25maWdWaWV3OworY2xhc3MgQ29uZmlnTGlzdDsKK2NsYXNzIENvbmZpZ0l0ZW07
CitjbGFzcyBDb25maWdMaW5lRWRpdDsKK2NsYXNzIENvbmZpZ01haW5XaW5kb3c7CisKK2NsYXNz
IENvbmZpZ1NldHRpbmdzIDogcHVibGljIFFTZXR0aW5ncyB7CitwdWJsaWM6CisJQ29uZmlnU2V0
dGluZ3MoKTsKKwlRTGlzdDxpbnQ+IHJlYWRTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGJvb2wg
Km9rKTsKKwlib29sIHdyaXRlU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBjb25zdCBRTGlzdDxp
bnQ+JiB2YWx1ZSk7Cit9OworCitlbnVtIGNvbElkeCB7CisJcHJvbXB0Q29sSWR4LCBuYW1lQ29s
SWR4LCBub0NvbElkeCwgbW9kQ29sSWR4LCB5ZXNDb2xJZHgsIGRhdGFDb2xJZHgsIGNvbE5yCit9
OworZW51bSBsaXN0TW9kZSB7CisJc2luZ2xlTW9kZSwgbWVudU1vZGUsIHN5bWJvbE1vZGUsIGZ1
bGxNb2RlLCBsaXN0TW9kZQorfTsKK2VudW0gb3B0aW9uTW9kZSB7CisJbm9ybWFsT3B0ID0gMCwg
YWxsT3B0LCBwcm9tcHRPcHQKK307CisKK2NsYXNzIENvbmZpZ0xpc3QgOiBwdWJsaWMgUVRyZWVX
aWRnZXQgeworCVFfT0JKRUNUCisJdHlwZWRlZiBjbGFzcyBRVHJlZVdpZGdldCBQYXJlbnQ7Citw
dWJsaWM6CisJQ29uZmlnTGlzdChDb25maWdWaWV3KiBwLCBjb25zdCBjaGFyICpuYW1lID0gMCk7
CisJdm9pZCByZWluaXQodm9pZCk7CisJQ29uZmlnVmlldyogcGFyZW50KHZvaWQpIGNvbnN0CisJ
eworCQlyZXR1cm4gKENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50KCk7CisJfQorCUNvbmZpZ0l0
ZW0qIGZpbmRDb25maWdJdGVtKHN0cnVjdCBtZW51ICopOworCitwcm90ZWN0ZWQ6CisJdm9pZCBr
ZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZSk7CisJdm9pZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNl
RXZlbnQgKmUpOworCXZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQgKmUpOworCXZv
aWQgbW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQgKmUpOworCXZvaWQgbW91c2VEb3VibGVDbGlj
a0V2ZW50KFFNb3VzZUV2ZW50ICplKTsKKwl2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCAq
ZSk7CisJdm9pZCBjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKTsKKworcHVi
bGljIHNsb3RzOgorCXZvaWQgc2V0Um9vdE1lbnUoc3RydWN0IG1lbnUgKm1lbnUpOworCisJdm9p
ZCB1cGRhdGVMaXN0KENvbmZpZ0l0ZW0gKml0ZW0pOworCXZvaWQgc2V0VmFsdWUoQ29uZmlnSXRl
bSogaXRlbSwgdHJpc3RhdGUgdmFsKTsKKwl2b2lkIGNoYW5nZVZhbHVlKENvbmZpZ0l0ZW0qIGl0
ZW0pOworCXZvaWQgdXBkYXRlU2VsZWN0aW9uKHZvaWQpOworCXZvaWQgc2F2ZVNldHRpbmdzKHZv
aWQpOworc2lnbmFsczoKKwl2b2lkIG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICptZW51KTsKKwl2
b2lkIG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqbWVudSk7CisJdm9pZCBwYXJlbnRTZWxlY3Rl
ZCh2b2lkKTsKKwl2b2lkIGdvdEZvY3VzKHN0cnVjdCBtZW51ICopOworCitwdWJsaWM6CisJdm9p
ZCB1cGRhdGVMaXN0QWxsKHZvaWQpCisJeworCQl1cGRhdGVBbGwgPSB0cnVlOworCQl1cGRhdGVM
aXN0KE5VTEwpOworCQl1cGRhdGVBbGwgPSBmYWxzZTsKKwl9CisJQ29uZmlnTGlzdCogbGlzdFZp
ZXcoKQorCXsKKwkJcmV0dXJuIHRoaXM7CisJfQorCUNvbmZpZ0l0ZW0qIGZpcnN0Q2hpbGQoKSBj
b25zdAorCXsKKwkJcmV0dXJuIChDb25maWdJdGVtICopY2hpbGRyZW4oKS5maXJzdCgpOworCX0K
Kwl2b2lkIGFkZENvbHVtbihjb2xJZHggaWR4KQorCXsKKwkJc2hvd0NvbHVtbihpZHgpOworCX0K
Kwl2b2lkIHJlbW92ZUNvbHVtbihjb2xJZHggaWR4KQorCXsKKwkJaGlkZUNvbHVtbihpZHgpOwor
CX0KKwl2b2lkIHNldEFsbE9wZW4oYm9vbCBvcGVuKTsKKwl2b2lkIHNldFBhcmVudE1lbnUodm9p
ZCk7CisKKwlib29sIG1lbnVTa2lwKHN0cnVjdCBtZW51ICopOworCisJdm9pZCB1cGRhdGVNZW51
TGlzdChDb25maWdJdGVtICpwYXJlbnQsIHN0cnVjdCBtZW51Kik7CisJdm9pZCB1cGRhdGVNZW51
TGlzdChDb25maWdMaXN0ICpwYXJlbnQsIHN0cnVjdCBtZW51Kik7CisKKwlib29sIHVwZGF0ZUFs
bDsKKworCVFQaXhtYXAgc3ltYm9sWWVzUGl4LCBzeW1ib2xNb2RQaXgsIHN5bWJvbE5vUGl4Owor
CVFQaXhtYXAgY2hvaWNlWWVzUGl4LCBjaG9pY2VOb1BpeDsKKwlRUGl4bWFwIG1lbnVQaXgsIG1l
bnVJbnZQaXgsIG1lbnVCYWNrUGl4LCB2b2lkUGl4OworCisJYm9vbCBzaG93TmFtZSwgc2hvd1Jh
bmdlLCBzaG93RGF0YTsKKwllbnVtIGxpc3RNb2RlIG1vZGU7CisJZW51bSBvcHRpb25Nb2RlIG9w
dE1vZGU7CisJc3RydWN0IG1lbnUgKnJvb3RFbnRyeTsKKwlRUGFsZXR0ZSBkaXNhYmxlZENvbG9y
R3JvdXA7CisJUVBhbGV0dGUgaW5hY3RpdmVkQ29sb3JHcm91cDsKKwlRTWVudSogaGVhZGVyUG9w
dXA7Cit9OworCitjbGFzcyBDb25maWdJdGVtIDogcHVibGljIFFUcmVlV2lkZ2V0SXRlbSB7CisJ
dHlwZWRlZiBjbGFzcyBRVHJlZVdpZGdldEl0ZW0gUGFyZW50OworcHVibGljOgorCUNvbmZpZ0l0
ZW0oQ29uZmlnTGlzdCAqcGFyZW50LCBDb25maWdJdGVtICphZnRlciwgc3RydWN0IG1lbnUgKm0s
IGJvb2wgdikKKwk6IFBhcmVudChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUobSks
IHZpc2libGUodiksIGdvUGFyZW50KGZhbHNlKQorCXsKKwkJaW5pdCgpOworCX0KKwlDb25maWdJ
dGVtKENvbmZpZ0l0ZW0gKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIHN0cnVjdCBtZW51ICpt
LCBib29sIHYpCisJOiBQYXJlbnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KG0p
LCB2aXNpYmxlKHYpLCBnb1BhcmVudChmYWxzZSkKKwl7CisJCWluaXQoKTsKKwl9CisJQ29uZmln
SXRlbShDb25maWdMaXN0ICpwYXJlbnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBib29sIHYpCisJOiBQ
YXJlbnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KDApLCB2aXNpYmxlKHYpLCBn
b1BhcmVudCh0cnVlKQorCXsKKwkJaW5pdCgpOworCX0KKwl+Q29uZmlnSXRlbSh2b2lkKTsKKwl2
b2lkIGluaXQodm9pZCk7CisJdm9pZCBva1JlbmFtZShpbnQgY29sKTsKKwl2b2lkIHVwZGF0ZU1l
bnUodm9pZCk7CisJdm9pZCB0ZXN0VXBkYXRlTWVudShib29sIHYpOworCUNvbmZpZ0xpc3QqIGxp
c3RWaWV3KCkgY29uc3QKKwl7CisJCXJldHVybiAoQ29uZmlnTGlzdCopUGFyZW50Ojp0cmVlV2lk
Z2V0KCk7CisJfQorCUNvbmZpZ0l0ZW0qIGZpcnN0Q2hpbGQoKSBjb25zdAorCXsKKwkJcmV0dXJu
IChDb25maWdJdGVtICopUGFyZW50OjpjaGlsZCgwKTsKKwl9CisJQ29uZmlnSXRlbSogbmV4dFNp
YmxpbmcoKQorCXsKKwkJQ29uZmlnSXRlbSAqcmV0ID0gTlVMTDsKKwkJQ29uZmlnSXRlbSAqX3Bh
cmVudCA9IChDb25maWdJdGVtICopcGFyZW50KCk7CisKKwkJaWYoX3BhcmVudCkgeworCQkJcmV0
ID0gKENvbmZpZ0l0ZW0gKilfcGFyZW50LT5jaGlsZChfcGFyZW50LT5pbmRleE9mQ2hpbGQodGhp
cykrMSk7CisJCX0gZWxzZSB7CisJCQlRVHJlZVdpZGdldCAqX3RyZWVXaWRnZXQgPSB0cmVlV2lk
Z2V0KCk7CisJCQlyZXQgPSAoQ29uZmlnSXRlbSAqKV90cmVlV2lkZ2V0LT50b3BMZXZlbEl0ZW0o
X3RyZWVXaWRnZXQtPmluZGV4T2ZUb3BMZXZlbEl0ZW0odGhpcykrMSk7CisJCX0KKworCQlyZXR1
cm4gcmV0OworCX0KKwl2b2lkIHNldFRleHQoY29sSWR4IGlkeCwgY29uc3QgUVN0cmluZyYgdGV4
dCkKKwl7CisJCVBhcmVudDo6c2V0VGV4dChpZHgsIHRleHQpOworCX0KKwlRU3RyaW5nIHRleHQo
Y29sSWR4IGlkeCkgY29uc3QKKwl7CisJCXJldHVybiBQYXJlbnQ6OnRleHQoaWR4KTsKKwl9CisJ
dm9pZCBzZXRQaXhtYXAoY29sSWR4IGlkeCwgY29uc3QgUUljb24gJmljb24pCisJeworCQlQYXJl
bnQ6OnNldEljb24oaWR4LCBpY29uKTsKKwl9CisJY29uc3QgUUljb24gcGl4bWFwKGNvbElkeCBp
ZHgpIGNvbnN0CisJeworCQlyZXR1cm4gaWNvbihpZHgpOworCX0KKwkvLyBUT0RPOiBJbXBsZW1l
bnQgcGFpbnRDZWxsCisKKwlDb25maWdJdGVtKiBuZXh0SXRlbTsKKwlzdHJ1Y3QgbWVudSAqbWVu
dTsKKwlib29sIHZpc2libGU7CisJYm9vbCBnb1BhcmVudDsKK307CisKK2NsYXNzIENvbmZpZ0xp
bmVFZGl0IDogcHVibGljIFFMaW5lRWRpdCB7CisJUV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFM
aW5lRWRpdCBQYXJlbnQ7CitwdWJsaWM6CisJQ29uZmlnTGluZUVkaXQoQ29uZmlnVmlldyogcGFy
ZW50KTsKKwlDb25maWdWaWV3KiBwYXJlbnQodm9pZCkgY29uc3QKKwl7CisJCXJldHVybiAoQ29u
ZmlnVmlldyopUGFyZW50OjpwYXJlbnQoKTsKKwl9CisJdm9pZCBzaG93KENvbmZpZ0l0ZW0gKmkp
OworCXZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKmUpOworCitwdWJsaWM6CisJQ29uZmln
SXRlbSAqaXRlbTsKK307CisKK2NsYXNzIENvbmZpZ1ZpZXcgOiBwdWJsaWMgUVdpZGdldCB7CisJ
UV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFXaWRnZXQgUGFyZW50OworcHVibGljOgorCUNvbmZp
Z1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCk7CisJfkNvbmZpZ1Zp
ZXcodm9pZCk7CisJc3RhdGljIHZvaWQgdXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKTsKKwlz
dGF0aWMgdm9pZCB1cGRhdGVMaXN0QWxsKHZvaWQpOworCisJYm9vbCBzaG93TmFtZSh2b2lkKSBj
b25zdCB7IHJldHVybiBsaXN0LT5zaG93TmFtZTsgfQorCWJvb2wgc2hvd1JhbmdlKHZvaWQpIGNv
bnN0IHsgcmV0dXJuIGxpc3QtPnNob3dSYW5nZTsgfQorCWJvb2wgc2hvd0RhdGEodm9pZCkgY29u
c3QgeyByZXR1cm4gbGlzdC0+c2hvd0RhdGE7IH0KK3B1YmxpYyBzbG90czoKKwl2b2lkIHNldFNo
b3dOYW1lKGJvb2wpOworCXZvaWQgc2V0U2hvd1JhbmdlKGJvb2wpOworCXZvaWQgc2V0U2hvd0Rh
dGEoYm9vbCk7CisJdm9pZCBzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKik7CitzaWduYWxzOgorCXZv
aWQgc2hvd05hbWVDaGFuZ2VkKGJvb2wpOworCXZvaWQgc2hvd1JhbmdlQ2hhbmdlZChib29sKTsK
Kwl2b2lkIHNob3dEYXRhQ2hhbmdlZChib29sKTsKK3B1YmxpYzoKKwlDb25maWdMaXN0KiBsaXN0
OworCUNvbmZpZ0xpbmVFZGl0KiBsaW5lRWRpdDsKKworCXN0YXRpYyBDb25maWdWaWV3KiB2aWV3
TGlzdDsKKwlDb25maWdWaWV3KiBuZXh0VmlldzsKKworCXN0YXRpYyBRQWN0aW9uICpzaG93Tm9y
bWFsQWN0aW9uOworCXN0YXRpYyBRQWN0aW9uICpzaG93QWxsQWN0aW9uOworCXN0YXRpYyBRQWN0
aW9uICpzaG93UHJvbXB0QWN0aW9uOworfTsKKworY2xhc3MgQ29uZmlnSW5mb1ZpZXcgOiBwdWJs
aWMgUVRleHRCcm93c2VyIHsKKwlRX09CSkVDVAorCXR5cGVkZWYgY2xhc3MgUVRleHRCcm93c2Vy
IFBhcmVudDsKK3B1YmxpYzoKKwlDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0
IGNoYXIgKm5hbWUgPSAwKTsKKwlib29sIHNob3dEZWJ1Zyh2b2lkKSBjb25zdCB7IHJldHVybiBf
c2hvd0RlYnVnOyB9CisKK3B1YmxpYyBzbG90czoKKwl2b2lkIHNldEluZm8oc3RydWN0IG1lbnUg
Km1lbnUpOworCXZvaWQgc2F2ZVNldHRpbmdzKHZvaWQpOworCXZvaWQgc2V0U2hvd0RlYnVnKGJv
b2wpOworCitzaWduYWxzOgorCXZvaWQgc2hvd0RlYnVnQ2hhbmdlZChib29sKTsKKwl2b2lkIG1l
bnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqKTsKKworcHJvdGVjdGVkOgorCXZvaWQgc3ltYm9sSW5m
byh2b2lkKTsKKwl2b2lkIG1lbnVJbmZvKHZvaWQpOworCVFTdHJpbmcgZGVidWdfaW5mbyhzdHJ1
Y3Qgc3ltYm9sICpzeW0pOworCXN0YXRpYyBRU3RyaW5nIHByaW50X2ZpbHRlcihjb25zdCBRU3Ry
aW5nICZzdHIpOworCXN0YXRpYyB2b2lkIGV4cHJfcHJpbnRfaGVscCh2b2lkICpkYXRhLCBzdHJ1
Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cik7CisJUU1lbnUgKmNyZWF0ZVN0YW5kYXJk
Q29udGV4dE1lbnUoY29uc3QgUVBvaW50ICYgcG9zKTsKKwl2b2lkIGNvbnRleHRNZW51RXZlbnQo
UUNvbnRleHRNZW51RXZlbnQgKmUpOworCisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBt
ZW51ICpfbWVudTsKKwlib29sIF9zaG93RGVidWc7Cit9OworCitjbGFzcyBDb25maWdTZWFyY2hX
aW5kb3cgOiBwdWJsaWMgUURpYWxvZyB7CisJUV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFEaWFs
b2cgUGFyZW50OworcHVibGljOgorCUNvbmZpZ1NlYXJjaFdpbmRvdyhDb25maWdNYWluV2luZG93
KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsKKworcHVibGljIHNsb3RzOgorCXZvaWQg
c2F2ZVNldHRpbmdzKHZvaWQpOworCXZvaWQgc2VhcmNoKHZvaWQpOworCitwcm90ZWN0ZWQ6CisJ
UUxpbmVFZGl0KiBlZGl0RmllbGQ7CisJUVB1c2hCdXR0b24qIHNlYXJjaEJ1dHRvbjsKKwlRU3Bs
aXR0ZXIqIHNwbGl0OworCUNvbmZpZ1ZpZXcqIGxpc3Q7CisJQ29uZmlnSW5mb1ZpZXcqIGluZm87
CisKKwlzdHJ1Y3Qgc3ltYm9sICoqcmVzdWx0OworfTsKKworY2xhc3MgQ29uZmlnTWFpbldpbmRv
dyA6IHB1YmxpYyBRTWFpbldpbmRvdyB7CisJUV9PQkpFQ1QKKworCWNoYXIgKmNvbmZpZ25hbWU7
CisJc3RhdGljIFFBY3Rpb24gKnNhdmVBY3Rpb247CisJc3RhdGljIHZvaWQgY29uZl9jaGFuZ2Vk
KHZvaWQpOworcHVibGljOgorCUNvbmZpZ01haW5XaW5kb3codm9pZCk7CitwdWJsaWMgc2xvdHM6
CisJdm9pZCBjaGFuZ2VNZW51KHN0cnVjdCBtZW51ICopOworCXZvaWQgc2V0TWVudUxpbmsoc3Ry
dWN0IG1lbnUgKik7CisJdm9pZCBsaXN0Rm9jdXNDaGFuZ2VkKHZvaWQpOworCXZvaWQgZ29CYWNr
KHZvaWQpOworCXZvaWQgbG9hZENvbmZpZyh2b2lkKTsKKwlib29sIHNhdmVDb25maWcodm9pZCk7
CisJdm9pZCBzYXZlQ29uZmlnQXModm9pZCk7CisJdm9pZCBzZWFyY2hDb25maWcodm9pZCk7CisJ
dm9pZCBzaG93U2luZ2xlVmlldyh2b2lkKTsKKwl2b2lkIHNob3dTcGxpdFZpZXcodm9pZCk7CisJ
dm9pZCBzaG93RnVsbFZpZXcodm9pZCk7CisJdm9pZCBzaG93SW50cm8odm9pZCk7CisJdm9pZCBz
aG93QWJvdXQodm9pZCk7CisJdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7CisKK3Byb3RlY3RlZDoK
Kwl2b2lkIGNsb3NlRXZlbnQoUUNsb3NlRXZlbnQgKmUpOworCisJQ29uZmlnU2VhcmNoV2luZG93
ICpzZWFyY2hXaW5kb3c7CisJQ29uZmlnVmlldyAqbWVudVZpZXc7CisJQ29uZmlnTGlzdCAqbWVu
dUxpc3Q7CisJQ29uZmlnVmlldyAqY29uZmlnVmlldzsKKwlDb25maWdMaXN0ICpjb25maWdMaXN0
OworCUNvbmZpZ0luZm9WaWV3ICpoZWxwVGV4dDsKKwlRVG9vbEJhciAqdG9vbEJhcjsKKwlRQWN0
aW9uICpiYWNrQWN0aW9uOworCVFBY3Rpb24gKnNpbmdsZVZpZXdBY3Rpb247CisJUUFjdGlvbiAq
c3BsaXRWaWV3QWN0aW9uOworCVFBY3Rpb24gKmZ1bGxWaWV3QWN0aW9uOworCVFTcGxpdHRlciAq
c3BsaXQxOworCVFTcGxpdHRlciAqc3BsaXQyOworfTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwgYi9zdXBwb3J0L2tjb25maWcubmV3L3N0cmVh
bWxpbmVfY29uZmlnLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4ZDc2
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3N0cmVhbWxpbmVfY29u
ZmlnLnBsCkBAIC0wLDAgKzEsNjgyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjCisjIENvcHlyaWdodCAyMDA1LTIwMDkgLSBTdGV2
ZW4gUm9zdGVkdAorIworIyAgSXQncyBzaW1wbGUgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgaG93IHRo
aXMgd29ya3MuCisjICBJZiBub3QsIHRoZW4geW91IGNhbiBhc2sgbWUgYXQgc3RyaXBjb25maWdA
Z29vZG1pcy5vcmcKKyMKKyMgV2hhdCBpdCBkb2VzPworIworIyAgIElmIHlvdSBoYXZlIGluc3Rh
bGxlZCBhIExpbnV4IGtlcm5lbCBmcm9tIGEgZGlzdHJpYnV0aW9uCisjICAgdGhhdCB0dXJucyBv
biB3YXkgdG9vIG1hbnkgbW9kdWxlcyB0aGFuIHlvdSBuZWVkLCBhbmQKKyMgICB5b3Ugb25seSB3
YW50IHRoZSBtb2R1bGVzIHlvdSB1c2UsIHRoZW4gdGhpcyBwcm9ncmFtCisjICAgaXMgcGVyZmVj
dCBmb3IgeW91LgorIworIyAgIEl0IGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byB0dXJuIG9mZiBh
bGwgdGhlIG1vZHVsZXMgdGhhdCBhcmUKKyMgICBub3QgbG9hZGVkIG9uIHlvdXIgc3lzdGVtLgor
IworIyBIb3d0bzoKKyMKKyMgIDEuIEJvb3QgdXAgdGhlIGtlcm5lbCB0aGF0IHlvdSB3YW50IHRv
IHN0cmVhbSBsaW5lIHRoZSBjb25maWcgb24uCisjICAyLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRo
ZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc291cmNlIG9mIHRoZQorIyAgICAgICBrZXJuZWwgdGhh
dCB5b3UganVzdCBib290ZWQuCisjICAzLiBDb3B5IHRoZSBjb25maWd1cmF0b24gZmlsZSB0byB0
aGlzIGRpcmVjdG9yeSBhcyAuY29uZmlnCisjICA0LiBIYXZlIGFsbCB5b3VyIGRldmljZXMgdGhh
dCB5b3UgbmVlZCBtb2R1bGVzIGZvciBjb25uZWN0ZWQgYW5kCisjICAgICAgb3BlcmF0aW9uYWwg
KG1ha2Ugc3VyZSB0aGF0IHRoZWlyIGNvcnJlc3BvbmRpbmcgbW9kdWxlcyBhcmUgbG9hZGVkKQor
IyAgNS4gUnVuIHRoaXMgc2NyaXB0IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8gc29tZSBvdGhl
ciBmaWxlCisjICAgICAgIGxpa2UgY29uZmlnX3N0cmlwLgorIyAgNi4gQmFjayB1cCB5b3VyIG9s
ZCBjb25maWcgKGlmIHlvdSB3YW50IHRvbykuCisjICA3LiBjb3B5IHRoZSBjb25maWdfc3RyaXAg
ZmlsZSB0byAuY29uZmlnCisjICA4LiBSdW4gIm1ha2Ugb2xkY29uZmlnIgorIworIyAgTm93IHlv
dXIga2VybmVsIGlzIHJlYWR5IHRvIGJlIGJ1aWx0IHdpdGggb25seSB0aGUgbW9kdWxlcyB0aGF0
CisjICBhcmUgbG9hZGVkLgorIworIyBIZXJlJ3Mgd2hhdCBJIGRpZCB3aXRoIG15IERlYmlhbiBk
aXN0cmlidXRpb24uCisjCisjICAgIGNkIC91c3Ivc3JjL2xpbnV4LTIuNi4xMAorIyAgICBjcCAv
Ym9vdC9jb25maWctMi42LjEwLTEtNjg2LXNtcCAuY29uZmlnCisjICAgIH4vYmluL3N0cmVhbWxp
bmVfY29uZmlnID4gY29uZmlnX3N0cmlwCisjICAgIG12IC5jb25maWcgY29uZmlnX3NhdgorIyAg
ICBtdiBjb25maWdfc3RyaXAgLmNvbmZpZworIyAgICBtYWtlIG9sZGNvbmZpZworIwordXNlIHdh
cm5pbmdzOwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKKyMgc2V0IHRoZSBlbnZp
cm9ubWVudCB2YXJpYWJsZSBMT0NBTE1PRENPTkZJR19ERUJVRyB0byBnZXQKKyMgZGVidWcgb3V0
cHV0LgorbXkgJGRlYnVncHJpbnQgPSAwOworJGRlYnVncHJpbnQgPSAxIGlmIChkZWZpbmVkKCRF
TlZ7TE9DQUxNT0RDT05GSUdfREVCVUd9KSk7CisKK3N1YiBkcHJpbnQgeworICAgIHJldHVybiBp
ZiAoISRkZWJ1Z3ByaW50KTsKKyAgICBwcmludCBTVERFUlIgQF87Cit9CisKK215ICRjb25maWcg
PSAiLmNvbmZpZyI7CisKK215ICR1bmFtZSA9IGB1bmFtZSAtcmA7CitjaG9tcCAkdW5hbWU7CisK
K215IEBzZWFyY2hjb25maWdzID0gKAorCXsKKwkgICAgImZpbGUiID0+ICIuY29uZmlnIiwKKwkg
ICAgImV4ZWMiID0+ICJjYXQiLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gIi9wcm9jL2NvbmZp
Zy5neiIsCisJICAgICJleGVjIiA9PiAiemNhdCIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAi
L2Jvb3QvY29uZmlnLSR1bmFtZSIsCisJICAgICJleGVjIiA9PiAiY2F0IiwKKwl9LAorCXsKKwkg
ICAgImZpbGUiID0+ICIvYm9vdC92bWxpbnV6LSR1bmFtZSIsCisJICAgICJleGVjIiA9PiAic2Ny
aXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3Qt
aWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gInZtbGludXgiLAorCSAgICAiZXhl
YyIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJICAgICJ0ZXN0IiA9PiAic2NyaXB0
cy9leHRyYWN0LWlrY29uZmlnIiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+ICIvbGliL21vZHVs
ZXMvJHVuYW1lL2tlcm5lbC9rZXJuZWwvY29uZmlncy5rbyIsCisJICAgICJleGVjIiA9PiAic2Ny
aXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3Qt
aWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gImtlcm5lbC9jb25maWdzLmtvIiwK
KwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIg
PT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAi
a2VybmVsL2NvbmZpZ3MubyIsCisJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29u
ZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCX0sCisp
OworCitzdWIgcmVhZF9jb25maWcgeworICAgIGZvcmVhY2ggbXkgJGNvbmYgKEBzZWFyY2hjb25m
aWdzKSB7CisJbXkgJGZpbGUgPSAkY29uZi0+eyJmaWxlIn07CisKKwluZXh0IGlmICggISAtZiAi
JGZpbGUiKTsKKworCWlmIChkZWZpbmVkKCRjb25mLT57InRlc3QifSkpIHsKKwkgICAgYCRjb25m
LT57InRlc3QifSAkY29uZi0+eyJmaWxlIn0gMj4vZGV2L251bGxgOworCSAgICBuZXh0IGlmICgk
Pyk7CisJfQorCisJbXkgJGV4ZWMgPSAkY29uZi0+eyJleGVjIn07CisKKwlwcmludCBTVERFUlIg
InVzaW5nIGNvbmZpZzogJyRmaWxlJ1xuIjsKKworCW9wZW4obXkgJGluZmlsZSwgJy18JywgIiRl
eGVjICRmaWxlIikgfHwgZGllICJGYWlsZWQgdG8gcnVuICRleGVjICRmaWxlIjsKKwlteSBAeCA9
IDwkaW5maWxlPjsKKwljbG9zZSAkaW5maWxlOworCXJldHVybiBAeDsKKyAgICB9CisgICAgZGll
ICJObyBjb25maWcgZmlsZSBmb3VuZCI7Cit9CisKK215IEBjb25maWdfZmlsZSA9IHJlYWRfY29u
ZmlnOworCisjIFBhcnNlIG9wdGlvbnMKK215ICRsb2NhbG1vZGNvbmZpZyA9IDA7CitteSAkbG9j
YWx5ZXNjb25maWcgPSAwOworCitHZXRPcHRpb25zKCJsb2NhbG1vZGNvbmZpZyIgPT4gXCRsb2Nh
bG1vZGNvbmZpZywKKwkgICAibG9jYWx5ZXNjb25maWciID0+IFwkbG9jYWx5ZXNjb25maWcpOwor
CisjIEdldCB0aGUgYnVpbGQgc291cmNlIGFuZCB0b3AgbGV2ZWwgS2NvbmZpZyBmaWxlIChwYXNz
ZWQgaW4pCitteSAka3NvdXJjZSA9ICgkQVJHVlswXSA/ICRBUkdWWzBdIDogJy4nKTsKK215ICRr
Y29uZmlnID0gJEFSR1ZbMV07CitteSAkbHNtb2RfZmlsZSA9ICRFTlZ7J0xTTU9EJ307CisKK215
IEBtYWtlZmlsZXMgPSBgZmluZCAka3NvdXJjZSAtbmFtZSBNYWtlZmlsZSAtb3IgLW5hbWUgS2J1
aWxkIDI+L2Rldi9udWxsYDsKK2Nob21wIEBtYWtlZmlsZXM7CisKK215ICVkZXBlbmRzOworbXkg
JXNlbGVjdHM7CitteSAlcHJvbXB0czsKK215ICVvYmplY3RzOworbXkgJHZhcjsKK215ICRpZmxl
dmVsID0gMDsKK215IEBpZmRlcHM7CisKKyMgcHJldmVudCByZWN1cnNpb24KK215ICVyZWFkX2tj
b25maWdzOworCitzdWIgcmVhZF9rY29uZmlnIHsKKyAgICBteSAoJGtjb25maWcpID0gQF87CisK
KyAgICBteSAkc3RhdGUgPSAiTk9ORSI7CisgICAgbXkgJGNvbmZpZzsKKworICAgIG15ICRjb250
ID0gMDsKKyAgICBteSAkbGluZTsKKworICAgIG15ICRzb3VyY2UgPSAiJGtzb3VyY2UvJGtjb25m
aWciOworICAgIG15ICRsYXN0X3NvdXJjZSA9ICIiOworCisgICAgIyBDaGVjayBmb3IgYW55IGVu
dmlyb25tZW50IHZhcmlhYmxlcyB1c2VkCisgICAgd2hpbGUgKCRzb3VyY2UgPX4gL1wkXCgoXHcr
KVwpLyAmJiAkbGFzdF9zb3VyY2UgbmUgJHNvdXJjZSkgeworCW15ICRlbnYgPSAkMTsKKwkkbGFz
dF9zb3VyY2UgPSAkc291cmNlOworCSRzb3VyY2UgPX4gcy9cJFwoJGVudlwpLyRFTlZ7JGVudn0v
OworICAgIH0KKworICAgIG9wZW4obXkgJGtpbmZpbGUsICc8JywgJHNvdXJjZSkgfHwgZGllICJD
YW4ndCBvcGVuICRrY29uZmlnIjsKKyAgICB3aGlsZSAoPCRraW5maWxlPikgeworCWNob21wOwor
CisJIyBNYWtlIHN1cmUgdGhhdCBsaW5lcyBlbmRpbmcgd2l0aCBcIGNvbnRpbnVlCisJaWYgKCRj
b250KSB7CisJICAgICRfID0gJGxpbmUgLiAiICIgLiAkXzsKKwl9CisKKwlpZiAocy9cXCQvLykg
eworCSAgICAkY29udCA9IDE7CisJICAgICRsaW5lID0gJF87CisJICAgIG5leHQ7CisJfQorCisJ
JGNvbnQgPSAwOworCisJIyBjb2xsZWN0IGFueSBLY29uZmlnIHNvdXJjZXMKKwlpZiAoL15zb3Vy
Y2VccysiPyhbXiJdKykvKSB7CisJICAgIG15ICRrY29uZmlnID0gJDE7CisJICAgICMgcHJldmVu
dCByZWFkaW5nIHR3aWNlLgorCSAgICBpZiAoIWRlZmluZWQoJHJlYWRfa2NvbmZpZ3N7JGtjb25m
aWd9KSkgeworCQkkcmVhZF9rY29uZmlnc3ska2NvbmZpZ30gPSAxOworCQlyZWFkX2tjb25maWco
JGtjb25maWcpOworCSAgICB9CisJICAgIG5leHQ7CisJfQorCisJIyBjb25maWdzIGZvdW5kCisJ
aWYgKC9eXHMqKG1lbnUpP2NvbmZpZ1xzKyhcUyspXHMqJC8pIHsKKwkgICAgJHN0YXRlID0gIk5F
VyI7CisJICAgICRjb25maWcgPSAkMjsKKworCSAgICAjIEFkZCBkZXBlbmRzIGZvciAnaWYnIG5l
c3RpbmcKKwkgICAgZm9yIChteSAkaSA9IDA7ICRpIDwgJGlmbGV2ZWw7ICRpKyspIHsKKwkJaWYg
KCRpKSB7CisJCSAgICAkZGVwZW5kc3skY29uZmlnfSAuPSAiICIgLiAkaWZkZXBzWyRpXTsKKwkJ
fSBlbHNlIHsKKwkJICAgICRkZXBlbmRzeyRjb25maWd9ID0gJGlmZGVwc1skaV07CisJCX0KKwkJ
JHN0YXRlID0gIkRFUCI7CisJICAgIH0KKworCSMgY29sbGVjdCB0aGUgZGVwZW5kcyBmb3IgdGhl
IGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBlcSAiTkVXIiAmJiAvXlxzKmRlcGVuZHNccytvblxz
KyguKikkLykgeworCSAgICAkc3RhdGUgPSAiREVQIjsKKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30g
PSAkMTsKKwl9IGVsc2lmICgkc3RhdGUgZXEgIkRFUCIgJiYgL15ccypkZXBlbmRzXHMrb25ccyso
LiopJC8pIHsKKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJDE7CisJfSBlbHNpZiAo
JHN0YXRlIGVxICJERVAiICYmIC9eXHMqZGVmKF8oYm9vbHx0cmlzdGF0ZSl8YXVsdClccysoXFMu
KikkLykgeworCSAgICBteSAkZGVwID0gJDM7CisJICAgIGlmICgkZGVwICF+IC9eXHMqKHl8bXxu
KVxzKiQvKSB7CisJCSRkZXAgPX4gcy8uKlxzaWZccysvLzsKKwkJJGRlcGVuZHN7JGNvbmZpZ30g
Lj0gIiAiIC4gJGRlcDsKKwkJZHByaW50ICJBZGRlZCBkZWZhdWx0IGRlcGVuZHMgJGRlcCB0byAk
Y29uZmlnXG4iOworCSAgICB9CisKKwkjIEdldCB0aGUgY29uZmlncyB0aGF0IHNlbGVjdCB0aGlz
IGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYgL15ccypzZWxlY3RccysoXFMr
KS8pIHsKKwkgICAgbXkgJGNvbmYgPSAkMTsKKwkgICAgaWYgKGRlZmluZWQoJHNlbGVjdHN7JGNv
bmZ9KSkgeworCQkkc2VsZWN0c3skY29uZn0gLj0gIiAiIC4gJGNvbmZpZzsKKwkgICAgfSBlbHNl
IHsKKwkJJHNlbGVjdHN7JGNvbmZ9ID0gJGNvbmZpZzsKKwkgICAgfQorCisJIyBjb25maWdzIHdp
dGhvdXQgcHJvbXB0cyBtdXN0IGJlIHNlbGVjdGVkCisJfSBlbHNpZiAoJHN0YXRlIG5lICJOT05F
IiAmJiAvXlxzKih0cmlzdGF0ZVxzK1xTfHByb21wdFxiKS8pIHsKKwkgICAgIyBub3RlIGlmIHRo
ZSBjb25maWcgaGFzIGEgcHJvbXB0CisJICAgICRwcm9tcHRzeyRjb25maWd9ID0gMTsKKworCSMg
Q2hlY2sgZm9yIGlmIHN0YXRlbWVudHMKKwl9IGVsc2lmICgvXmlmXHMrKC4qXFMpXHMqJC8pIHsK
KwkgICAgbXkgJGRlcHMgPSAkMTsKKwkgICAgIyByZW1vdmUgYmVnaW5uaW5nIGFuZCBlbmRpbmcg
bm9uIHRleHQKKwkgICAgJGRlcHMgPX4gcy9eW15hLXpBLVowLTlfXSovLzsKKwkgICAgJGRlcHMg
PX4gcy9bXmEtekEtWjAtOV9dKiQvLzsKKworCSAgICBteSBAZGVwcyA9IHNwbGl0IC9bXmEtekEt
WjAtOV9dKy8sICRkZXBzOworCisJICAgICRpZmRlcHNbJGlmbGV2ZWwrK10gPSBqb2luICc6Jywg
QGRlcHM7CisKKwl9IGVsc2lmICgvXmVuZGlmLykgeworCisJICAgICRpZmxldmVsLS0gaWYgKCRp
ZmxldmVsKTsKKworCSMgc3RvcCBvbiAiaGVscCIgYW5kIGtleXdvcmRzIHRoYXQgZW5kIGEgbWVu
dSBlbnRyeQorCX0gZWxzaWYgKC9eXHMqKC0tLSk/aGVscCgtLS0pP1xzKiQvIHx8IC9eKGNvbW1l
bnR8Y2hvaWNlfG1lbnUpXGIvKSB7CisJICAgICRzdGF0ZSA9ICJOT05FIjsKKwl9CisgICAgfQor
ICAgIGNsb3NlKCRraW5maWxlKTsKK30KKworaWYgKCRrY29uZmlnKSB7CisgICAgcmVhZF9rY29u
ZmlnKCRrY29uZmlnKTsKK30KKworIyBNYWtlZmlsZXMgY2FuIHVzZSB2YXJpYWJsZXMgdG8gZGVm
aW5lIHRoZWlyIGRlcGVuZGVuY2llcworc3ViIGNvbnZlcnRfdmFycyB7CisgICAgbXkgKCRsaW5l
LCAldmFycykgPSBAXzsKKworICAgIG15ICRwcm9jZXNzID0gIiI7CisKKyAgICB3aGlsZSAoJGxp
bmUgPX4gcy9eKC4qPykoXCRcKCguKj8pXCkpLy8pIHsKKwlteSAkc3RhcnQgPSAkMTsKKwlteSAk
dmFyaWFibGUgPSAkMjsKKwlteSAkdmFyID0gJDM7CisKKwlpZiAoZGVmaW5lZCgkdmFyc3skdmFy
fSkpIHsKKwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcnN7JHZhcn07CisJfSBlbHNlIHsK
KwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcmlhYmxlOworCX0KKyAgICB9CisKKyAgICAk
cHJvY2VzcyAuPSAkbGluZTsKKworICAgIHJldHVybiAkcHJvY2VzczsKK30KKworIyBSZWFkIGFs
bCBNYWtlZmlsZXMgdG8gbWFwIHRoZSBjb25maWdzIHRvIHRoZSBvYmplY3RzCitmb3JlYWNoIG15
ICRtYWtlZmlsZSAoQG1ha2VmaWxlcykgeworCisgICAgbXkgJGxpbmUgPSAiIjsKKyAgICBteSAl
bWFrZV92YXJzOworCisgICAgb3BlbihteSAkaW5maWxlLCAnPCcsICRtYWtlZmlsZSkgfHwgZGll
ICJDYW4ndCBvcGVuICRtYWtlZmlsZSI7CisgICAgd2hpbGUgKDwkaW5maWxlPikgeworCSMgaWYg
dGhpcyBsaW5lIGVuZHMgd2l0aCBhIGJhY2tzbGFzaCwgY29udGludWUKKwljaG9tcDsKKwlpZiAo
L14oLiopXFwkLykgeworCSAgICAkbGluZSAuPSAkMTsKKwkgICAgbmV4dDsKKwl9CisKKwkkbGlu
ZSAuPSAkXzsKKwkkXyA9ICRsaW5lOworCSRsaW5lID0gIiI7CisKKwlteSAkb2JqczsKKworCSMg
Q29udmVydCB2YXJpYWJsZXMgaW4gYSBsaW5lIChjb3VsZCBkZWZpbmUgY29uZmlncykKKwkkXyA9
IGNvbnZlcnRfdmFycygkXywgJW1ha2VfdmFycyk7CisKKwkjIGNvbGxlY3Qgb2JqZWN0cyBhZnRl
ciBvYmotJChDT05GSUdfRk9PX0JBUikKKwlpZiAoL29iai1cJFwoKENPTkZJR19bXlwpXSopXClc
cypbKzpdPz1ccyooLiopLykgeworCSAgICAkdmFyID0gJDE7CisJICAgICRvYmpzID0gJDI7CisK
KwkjIGNoZWNrIGlmIHZhcmlhYmxlcyBhcmUgc2V0CisJfSBlbHNpZiAoL15ccyooXFMrKVxzKls6
XT89XHMqKC4qXFMpLykgeworCSAgICAkbWFrZV92YXJzeyQxfSA9ICQyOworCX0KKwlpZiAoZGVm
aW5lZCgkb2JqcykpIHsKKwkgICAgZm9yZWFjaCBteSAkb2JqIChzcGxpdCAvXHMrLywkb2Jqcykg
eworCQkkb2JqID1+IHMvLS9fL2c7CisJCWlmICgkb2JqID1+IC8oLiopXC5vJC8pIHsKKwkJICAg
ICMgT2JqZWN0cyBtYXkgYmUgZW5hYmxlZCBieSBtb3JlIHRoYW4gb25lIGNvbmZpZy4KKwkJICAg
ICMgU3RvcmUgY29uZmlncyBpbiBhbiBhcnJheS4KKwkJICAgIG15IEBhcnI7CisKKwkJICAgIGlm
IChkZWZpbmVkKCRvYmplY3RzeyQxfSkpIHsKKwkJCUBhcnIgPSBAeyRvYmplY3RzeyQxfX07CisJ
CSAgICB9CisKKwkJICAgICRhcnJbJCNhcnIrMV0gPSAkdmFyOworCisJCSAgICAjIFRoZSBvYmpl
Y3RzIGhhdmUgYSBoYXNoIG1hcHBpbmcgdG8gYSByZWZlcmVuY2UKKwkJICAgICMgb2YgYW4gYXJy
YXkgb2YgY29uZmlncy4KKwkJICAgICRvYmplY3RzeyQxfSA9IFxAYXJyOworCQl9CisJICAgIH0K
Kwl9CisgICAgfQorICAgIGNsb3NlKCRpbmZpbGUpOworfQorCitteSAlbW9kdWxlczsKK215ICRs
aW5maWxlOworCitpZiAoZGVmaW5lZCgkbHNtb2RfZmlsZSkpIHsKKyAgICBpZiAoICEgLWYgJGxz
bW9kX2ZpbGUpIHsKKwlpZiAoIC1mICRFTlZ7J29ianRyZWUnfS4iLyIuJGxzbW9kX2ZpbGUpIHsK
KwkgICAgJGxzbW9kX2ZpbGUgPSAkRU5WeydvYmp0cmVlJ30uIi8iLiRsc21vZF9maWxlOworCX0g
ZWxzZSB7CisJCWRpZSAiJGxzbW9kX2ZpbGUgbm90IGZvdW5kIjsKKwl9CisgICAgfQorCisgICAg
bXkgJG90eXBlID0gKCAteCAkbHNtb2RfZmlsZSkgPyAnLXwnIDogJzwnOworICAgIG9wZW4oJGxp
bmZpbGUsICRvdHlwZSwgJGxzbW9kX2ZpbGUpOworCit9IGVsc2UgeworCisgICAgIyBzZWUgd2hh
dCBtb2R1bGVzIGFyZSBsb2FkZWQgb24gdGhpcyBzeXN0ZW0KKyAgICBteSAkbHNtb2Q7CisKKyAg
ICBmb3JlYWNoIG15ICRkaXIgKCAoIi9zYmluIiwgIi9iaW4iLCAiL3Vzci9zYmluIiwgIi91c3Iv
YmluIikgKSB7CisJaWYgKCAteCAiJGRpci9sc21vZCIgKSB7CisJICAgICRsc21vZCA9ICIkZGly
L2xzbW9kIjsKKwkgICAgbGFzdDsKKwl9Cit9CisgICAgaWYgKCFkZWZpbmVkKCRsc21vZCkpIHsK
KwkjIHRyeSBqdXN0IHRoZSBwYXRoCisJJGxzbW9kID0gImxzbW9kIjsKKyAgICB9CisKKyAgICBv
cGVuKCRsaW5maWxlLCAnLXwnLCAkbHNtb2QpIHx8IGRpZSAiQ2FuIG5vdCBjYWxsIGxzbW9kIHdp
dGggJGxzbW9kIjsKK30KKword2hpbGUgKDwkbGluZmlsZT4pIHsKKwluZXh0IGlmICgvXk1vZHVs
ZS8pOyAgIyBTa2lwIHRoZSBmaXJzdCBsaW5lLgorCWlmICgvXihcUyspLykgeworCQkkbW9kdWxl
c3skMX0gPSAxOworCX0KK30KK2Nsb3NlICgkbGluZmlsZSk7CisKKyMgYWRkIHRvIHRoZSBjb25m
aWdzIGhhc2ggYWxsIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkIHRvIGVuYWJsZQorIyBhIGxvYWRl
ZCBtb2R1bGUuIFRoaXMgaXMgYSBkaXJlY3Qgb2JqLSR7Q09ORklHX0ZPT30gKz0gYmFyLm8KKyMg
d2hlcmUgd2Uga25vdyB3ZSBuZWVkIGJhci5vIHNvIHdlIGFkZCBGT08gdG8gdGhlIGxpc3QuCitt
eSAlY29uZmlnczsKK2ZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cyglbW9kdWxlcykpIHsKKyAgICBp
ZiAoZGVmaW5lZCgkb2JqZWN0c3skbW9kdWxlfSkpIHsKKwlteSBAYXJyID0gQHskb2JqZWN0c3sk
bW9kdWxlfX07CisJZm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICAkY29uZmlnc3skY29u
Zn0gPSAkbW9kdWxlOworCSAgICBkcHJpbnQgIiRjb25mIGFkZGVkIGJ5IGRpcmVjdCAoJG1vZHVs
ZSlcbiI7CisJICAgIGlmICgkZGVidWdwcmludCkgeworCQlteSAkYz0kY29uZjsKKwkJJGMgPX4g
cy9eQ09ORklHXy8vOworCQlpZiAoZGVmaW5lZCgkZGVwZW5kc3skY30pKSB7CisJCSAgICBkcHJp
bnQgIiBkZXBzID0gJGRlcGVuZHN7JGN9XG4iOworCQl9IGVsc2UgeworCQkgICAgZHByaW50ICIg
bm8gZGVwc1xuIjsKKwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJIyBNb3N0IGxpa2Vs
eSwgc29tZW9uZSBoYXMgYSBjdXN0b20gKGJpbmFyeT8pIG1vZHVsZSBsb2FkZWQuCisJcHJpbnQg
U1RERVJSICIkbW9kdWxlIGNvbmZpZyBub3QgZm91bmQhIVxuIjsKKyAgICB9Cit9CisKKyMgUmVh
ZCB0aGUgY3VycmVudCBjb25maWcsIGFuZCBzZWUgd2hhdCBpcyBlbmFibGVkLiBXZSB3YW50IHRv
CisjIGlnbm9yZSBjb25maWdzIHRoYXQgd2Ugd291bGQgbm90IGVuYWJsZSBhbnl3YXkuCisKK215
ICVvcmlnX2NvbmZpZ3M7CitteSAkdmFsaWQgPSAiQS1aYS16XzAtOSI7CisKK2ZvcmVhY2ggbXkg
JGxpbmUgKEBjb25maWdfZmlsZSkgeworICAgICRfID0gJGxpbmU7CisKKyAgICBpZiAoLyhDT05G
SUdfWyR2YWxpZF0qKT0obXx5KS8pIHsKKwkkb3JpZ19jb25maWdzeyQxfSA9ICQyOworICAgIH0K
K30KKworbXkgJHJlcGVhdCA9IDE7CisKK215ICRkZXBjb25maWc7CisKKyMKKyMgTm90ZSwgd2Ug
ZG8gbm90IGNhcmUgYWJvdXQgb3BlcmFuZHMgKGxpa2U6ICYmLCB8fCwgISkgd2Ugd2FudCB0byBh
ZGQgYW55CisjIGNvbmZpZyB0aGF0IGlzIGluIHRoZSBkZXBlbmQgbGlzdCBvZiBhbm90aGVyIGNv
bmZpZy4gVGhpcyBzY3JpcHQgZG9lcworIyBub3QgZW5hYmxlIGNvbmZpZ3MgdGhhdCBhcmUgbm90
IGFscmVhZHkgZW5hYmxlZC4gSWYgd2UgY29tZSBhY3Jvc3MgYQorIyBjb25maWcgQSB0aGF0IGRl
cGVuZHMgb24gIUIsIHdlIGNhbiBzdGlsbCBhZGQgQiB0byB0aGUgbGlzdCBvZiBkZXBlbmRzCisj
IHRvIGtlZXAgb24uIElmIEEgd2FzIG9uIGluIHRoZSBvcmlnaW5hbCBjb25maWcsIEIgd291bGQg
bm90IGhhdmUgYmVlbgorIyBhbmQgQiB3b3VsZCBub3QgYmUgdHVybmVkIG9uIGJ5IHRoaXMgc2Ny
aXB0LgorIworc3ViIHBhcnNlX2NvbmZpZ19kZXBlbmRzCit7CisgICAgbXkgKCRwKSA9IEBfOwor
CisgICAgd2hpbGUgKCRwID1+IC9bJHZhbGlkXS8pIHsKKworCWlmICgkcCA9fiAvXlteJHZhbGlk
XSooWyR2YWxpZF0rKS8pIHsKKwkgICAgbXkgJGNvbmYgPSAiQ09ORklHXyIgLiAkMTsKKworCSAg
ICAkcCA9fiBzL15bXiR2YWxpZF0qWyR2YWxpZF0rLy87CisKKwkgICAgIyBXZSBvbmx5IG5lZWQg
dG8gcHJvY2VzcyBpZiB0aGUgZGVwZW5kIGNvbmZpZyBpcyBhIG1vZHVsZQorCSAgICBpZiAoIWRl
ZmluZWQoJG9yaWdfY29uZmlnc3skY29uZn0pIHx8ICRvcmlnX2NvbmZpZ3N7JGNvbmZ9IGVxICJ5
IikgeworCQluZXh0OworCSAgICB9CisKKwkgICAgaWYgKCFkZWZpbmVkKCRjb25maWdzeyRjb25m
fSkpIHsKKwkJIyBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGhhcyBpdHMKKwkJ
IyBkZXBlbmRlbmNpZXMgbWV0LgorCQkkcmVwZWF0ID0gMTsgIyBkbyBhZ2FpbgorCQlkcHJpbnQg
IiRjb25mIHNlbGVjdGVkIGJ5IGRlcGVuZCAkZGVwY29uZmlnXG4iOworCQkkY29uZmlnc3skY29u
Zn0gPSAxOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZGllICJ0aGlzIHNob3VsZCBuZXZlciBo
YXBwZW4iOworCX0KKyAgICB9Cit9CisKKyMgU2VsZWN0IGlzIHRyZWF0ZWQgYSBiaXQgZGlmZmVy
ZW50bHkgdGhhbiBkZXBlbmRzLiBXZSBjYWxsIHRoaXMKKyMgd2hlbiBhIGNvbmZpZyBoYXMgbm8g
cHJvbXB0IGFuZCByZXF1aXJlcyBhbm90aGVyIGNvbmZpZyB0byBiZQorIyBzZWxlY3RlZC4gV2Ug
dXNlIHRvIGp1c3Qgc2VsZWN0IGFsbCBjb25maWdzIHRoYXQgc2VsZWN0ZWQgdGhpcworIyBjb25m
aWcsIGJ1dCBmb3VuZCB0aGF0IHRoYXQgY2FuIGJhbGxvb24gaW50byBlbmFibGluZyBodW5kcmVk
cworIyBvZiBjb25maWdzIHRoYXQgd2UgZG8gbm90IGNhcmUgYWJvdXQuCisjCisjIFRoZSBpZGVh
IGlzIHdlIGxvb2sgYXQgYWxsIHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IGl0LiBJZiBvbmUKKyMg
aXMgYWxyZWFkeSBpbiBvdXIgbGlzdCBvZiBjb25maWdzIHRvIGVuYWJsZSwgdGhlbiB0aGVyZSdz
IG5vdGhpbmcKKyMgZWxzZSB0byBkby4gSWYgdGhlcmUgaXNuJ3QsIHdlIHBpY2sgdGhlIGZpcnN0
IGNvbmZpZyB0aGF0IHdhcworIyBlbmFibGVkIGluIHRoZSBvcmlnbmFsIGNvbmZpZyBhbmQgdXNl
IHRoYXQuCitzdWIgcGFyc2VfY29uZmlnX3NlbGVjdHMKK3sKKyAgICBteSAoJGNvbmZpZywgJHAp
ID0gQF87CisKKyAgICBteSAkbmV4dF9jb25maWc7CisKKyAgICB3aGlsZSAoJHAgPX4gL1skdmFs
aWRdLykgeworCisJaWYgKCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykgeworCSAgICBt
eSAkY29uZiA9ICJDT05GSUdfIiAuICQxOworCisJICAgICRwID1+IHMvXlteJHZhbGlkXSpbJHZh
bGlkXSsvLzsKKworCSAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGV4aXN0cyBpbiB0
aGUgY3VycmVudCAuY29uZmlnIGZpbGUKKwkgICAgaWYgKCFkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7
JGNvbmZ9KSkgeworCQlkcHJpbnQgIiRjb25mIG5vdCBzZXQgZm9yICRjb25maWcgc2VsZWN0XG4i
OworCQluZXh0OworCSAgICB9CisKKwkgICAgIyBDaGVjayBpZiBzb21ldGhpbmcgb3RoZXIgdGhh
biBhIG1vZHVsZSBzZWxlY3RzIHRoaXMgY29uZmlnCisJICAgIGlmIChkZWZpbmVkKCRvcmlnX2Nv
bmZpZ3N7JGNvbmZ9KSAmJiAkb3JpZ19jb25maWdzeyRjb25mfSBuZSAibSIpIHsKKwkJZHByaW50
ICIkY29uZiAobm9uIG1vZHVsZSkgc2VsZWN0cyBjb25maWcsIHdlIGFyZSBnb29kXG4iOworCQkj
IHdlIGFyZSBnb29kIHdpdGggdGhpcworCQlyZXR1cm47CisJICAgIH0KKwkgICAgaWYgKGRlZmlu
ZWQoJGNvbmZpZ3N7JGNvbmZ9KSkgeworCQlkcHJpbnQgIiRjb25mIHNlbGVjdHMgJGNvbmZpZyBz
byB3ZSBhcmUgZ29vZFxuIjsKKwkJIyBBIHNldCBjb25maWcgc2VsZWN0cyB0aGlzIGNvbmZpZywg
d2UgYXJlIGdvb2QKKwkJcmV0dXJuOworCSAgICB9CisJICAgICMgU2V0IHRoaXMgY29uZmlnIHRv
IGJlIHNlbGVjdGVkCisJICAgIGlmICghZGVmaW5lZCgkbmV4dF9jb25maWcpKSB7CisJCSRuZXh0
X2NvbmZpZyA9ICRjb25mOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZGllICJ0aGlzIHNob3Vs
ZCBuZXZlciBoYXBwZW4iOworCX0KKyAgICB9CisKKyAgICAjIElmIG5vIHBvc3NpYmxlIGNvbmZp
ZyBzZWxlY3RlZCB0aGlzLCB0aGVuIHNvbWV0aGluZyBoYXBwZW5lZC4KKyAgICBpZiAoIWRlZmlu
ZWQoJG5leHRfY29uZmlnKSkgeworCXByaW50IFNUREVSUiAiV0FSTklORzogJGNvbmZpZyBpcyBy
ZXF1aXJlZCwgYnV0IG5vdGhpbmcgaW4gdGhlXG4iOworCXByaW50IFNUREVSUiAiICBjdXJyZW50
IGNvbmZpZyBzZWxlY3RzIGl0LlxuIjsKKwlyZXR1cm47CisgICAgfQorCisgICAgIyBJZiB3ZSBh
cmUgaGVyZSwgdGhlbiB3ZSBmb3VuZCBubyBjb25maWcgdGhhdCBpcyBzZXQgYW5kCisgICAgIyBz
ZWxlY3RzIHRoaXMgY29uZmlnLiBSZXBlYXQuCisgICAgJHJlcGVhdCA9IDE7CisgICAgIyBNYWtl
IHRoaXMgY29uZmlnIG5lZWQgdG8gYmUgc2VsZWN0ZWQKKyAgICAkY29uZmlnc3skbmV4dF9jb25m
aWd9ID0gMTsKKyAgICBkcHJpbnQgIiRuZXh0X2NvbmZpZyBzZWxlY3RlZCBieSBzZWxlY3QgJGNv
bmZpZ1xuIjsKK30KKworbXkgJXByb2Nlc3Nfc2VsZWN0czsKKworIyBsb29wIHRocm91Z2ggYWxs
IGNvbmZpZ3MsIHNlbGVjdCB0aGVpciBkZXBlbmRlbmNpZXMuCitzdWIgbG9vcF9kZXBlbmQgewor
ICAgICRyZXBlYXQgPSAxOworCisgICAgd2hpbGUgKCRyZXBlYXQpIHsKKwkkcmVwZWF0ID0gMDsK
KworICAgICAgZm9ybG9vcDoKKwlmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJWNvbmZpZ3MpIHsK
KworCSAgICAjIElmIHRoaXMgY29uZmlnIGlzIG5vdCBhIG1vZHVsZSwgd2UgZG8gbm90IG5lZWQg
dG8gcHJvY2VzcyBpdAorCSAgICBpZiAoZGVmaW5lZCgkb3JpZ19jb25maWdzeyRjb25maWd9KSAm
JiAkb3JpZ19jb25maWdzeyRjb25maWd9IG5lICJtIikgeworCQluZXh0IGZvcmxvb3A7CisJICAg
IH0KKworCSAgICAkY29uZmlnID1+IHMvXkNPTkZJR18vLzsKKwkgICAgJGRlcGNvbmZpZyA9ICRj
b25maWc7CisKKwkgICAgaWYgKGRlZmluZWQoJGRlcGVuZHN7JGNvbmZpZ30pKSB7CisJCSMgVGhp
cyBjb25maWcgaGFzIGRlcGVuZGVuY2llcy4gTWFrZSBzdXJlIHRoZXkgYXJlIGFsc28gaW5jbHVk
ZWQKKwkJcGFyc2VfY29uZmlnX2RlcGVuZHMgJGRlcGVuZHN7JGNvbmZpZ307CisJICAgIH0KKwor
CSAgICAjIElmIHRoZSBjb25maWcgaGFzIG5vIHByb21wdCwgdGhlbiB3ZSBuZWVkIHRvIGNoZWNr
IGlmIGEgY29uZmlnCisJICAgICMgdGhhdCBpcyBlbmFibGVkIHNlbGVjdGVkIGl0LiBPciBpZiB3
ZSBuZWVkIHRvIGVuYWJsZSBvbmUuCisJICAgIGlmICghZGVmaW5lZCgkcHJvbXB0c3skY29uZmln
fSkgJiYgZGVmaW5lZCgkc2VsZWN0c3skY29uZmlnfSkpIHsKKwkJJHByb2Nlc3Nfc2VsZWN0c3sk
Y29uZmlnfSA9IDE7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgbG9vcF9zZWxlY3Qgewor
CisgICAgZm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVwcm9jZXNzX3NlbGVjdHMpIHsKKwkkY29u
ZmlnID1+IHMvXkNPTkZJR18vLzsKKworCWRwcmludCAiUHJvY2VzcyBzZWxlY3QgJGNvbmZpZ1xu
IjsKKworCSMgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIG11c3QgYmUgc2VsZWN0ZWQuCisJcGFy
c2VfY29uZmlnX3NlbGVjdHMgJGNvbmZpZywgJHNlbGVjdHN7JGNvbmZpZ307CisgICAgfQorfQor
Cit3aGlsZSAoJHJlcGVhdCkgeworICAgICMgR2V0IHRoZSBmaXJzdCBzZXQgb2YgY29uZmlncyBh
bmQgdGhlaXIgZGVwZW5kZW5jaWVzLgorICAgIGxvb3BfZGVwZW5kOworCisgICAgJHJlcGVhdCA9
IDA7CisKKyAgICAjIE5vdyB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSBoYXZlIHRvIGNoZWNrIHNlbGVj
dHM7CisgICAgbG9vcF9zZWxlY3Q7Cit9CisKK215ICVzZXRjb25maWdzOworCisjIEZpbmFsbHks
IHJlYWQgdGhlIC5jb25maWcgZmlsZSBhbmQgdHVybiBvZmYgYW55IG1vZHVsZSBlbmFibGVkIHRo
YXQKKyMgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb24gdG8ga2VlcCBlbmFibGVkLgorZm9yZWFj
aCBteSAkbGluZSAoQGNvbmZpZ19maWxlKSB7CisgICAgJF8gPSAkbGluZTsKKworICAgIGlmICgv
Q09ORklHX0lLQ09ORklHLykgeworCWlmICgvIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldC8p
IHsKKwkgICAgIyBlbmFibGUgSUtDT05GSUcgYXQgbGVhc3QgYXMgYSBtb2R1bGUKKwkgICAgcHJp
bnQgIkNPTkZJR19JS0NPTkZJRz1tXG4iOworCSAgICAjIGRvbid0IGFzayBhYm91dCBQUk9DCisJ
ICAgIHByaW50ICIjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXRcbiI7CisJfSBlbHNl
IHsKKwkgICAgcHJpbnQ7CisJfQorCW5leHQ7CisgICAgfQorCisgICAgaWYgKC9DT05GSUdfTU9E
VUxFX1NJR19LRVk9IiguKykiLykgeworICAgICAgICBteSAkb3JpZ19jZXJ0ID0gJDE7CisgICAg
ICAgIG15ICRkZWZhdWx0X2NlcnQgPSAiY2VydHMvc2lnbmluZ19rZXkucGVtIjsKKworICAgICAg
ICAjIENoZWNrIHRoYXQgdGhlIGxvZ2ljIGluIHRoaXMgc2NyaXB0IHN0aWxsIG1hdGNoZXMgdGhl
IG9uZSBpbiBLY29uZmlnCisgICAgICAgIGlmICghZGVmaW5lZCgkZGVwZW5kc3siTU9EVUxFX1NJ
R19LRVkifSkgfHwKKyAgICAgICAgICAgICRkZXBlbmRzeyJNT0RVTEVfU0lHX0tFWSJ9ICF+IC8i
XFEkZGVmYXVsdF9jZXJ0XEUiLykgeworICAgICAgICAgICAgcHJpbnQgU1RERVJSICJXQVJOSU5H
OiBNT0RVTEVfU0lHX0tFWSBhc3NlcnRpb24gZmFpbHVyZSwgIiwKKyAgICAgICAgICAgICAgICAi
dXBkYXRlIG5lZWRlZCB0byAiLCBfX0ZJTEVfXywgIiBsaW5lICIsIF9fTElORV9fLCAiXG4iOwor
ICAgICAgICAgICAgcHJpbnQ7CisgICAgICAgIH0gZWxzaWYgKCRvcmlnX2NlcnQgbmUgJGRlZmF1
bHRfY2VydCAmJiAhIC1mICRvcmlnX2NlcnQpIHsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAi
TW9kdWxlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZW5hYmxlZCBidXQgIiwKKyAgICAgICAgICAg
ICAgICAibW9kdWxlIHNpZ25pbmcga2V5IFwiJG9yaWdfY2VydFwiIG5vdCBmb3VuZC4gUmVzZXR0
aW5nICIsCisgICAgICAgICAgICAgICAgInNpZ25pbmcga2V5IHRvIGRlZmF1bHQgdmFsdWUuXG4i
OworICAgICAgICAgICAgcHJpbnQgIkNPTkZJR19NT0RVTEVfU0lHX0tFWT1cIiRkZWZhdWx0X2Nl
cnRcIlxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50OworICAgICAgICB9
CisgICAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKC9DT05GSUdfU1lTVEVNX1RSVVNURURf
S0VZUz0iKC4rKSIvKSB7CisgICAgICAgIG15ICRvcmlnX2tleXMgPSAkMTsKKworICAgICAgICBp
ZiAoISAtZiAkb3JpZ19rZXlzKSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIlN5c3RlbSBr
ZXlyaW5nIGVuYWJsZWQgYnV0IGtleXMgXCIkb3JpZ19rZXlzXCIgIiwKKyAgICAgICAgICAgICAg
ICAibm90IGZvdW5kLiBSZXNldHRpbmcga2V5cyB0byBkZWZhdWx0IHZhbHVlLlxuIjsKKyAgICAg
ICAgICAgIHByaW50ICJDT05GSUdfU1lTVEVNX1RSVVNURURfS0VZUz1cIlwiXG4iOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQ7CisgICAgICAgIH0KKyAgICAgICAgbmV4dDsK
KyAgICB9CisKKyAgICBpZiAoL14oQ09ORklHLiopPShtfHkpLykgeworCWlmIChkZWZpbmVkKCRj
b25maWdzeyQxfSkpIHsKKwkgICAgaWYgKCRsb2NhbHllc2NvbmZpZykgeworCSAgICAgICAgJHNl
dGNvbmZpZ3N7JDF9ID0gJ3knOworCQlwcmludCAiJDE9eVxuIjsKKwkJbmV4dDsKKwkgICAgfSBl
bHNlIHsKKwkgICAgICAgICRzZXRjb25maWdzeyQxfSA9ICQyOworCSAgICB9CisJfSBlbHNpZiAo
JDIgZXEgIm0iKSB7CisJICAgIHByaW50ICIjICQxIGlzIG5vdCBzZXRcbiI7CisJICAgIG5leHQ7
CisJfQorICAgIH0KKyAgICBwcmludDsKK30KKworIyBJbnRlZ3JpdHkgY2hlY2ssIG1ha2Ugc3Vy
ZSBhbGwgbW9kdWxlcyB0aGF0IHdlIHdhbnQgZW5hYmxlZCBkbworIyBpbmRlZWQgaGF2ZSB0aGVp
ciBjb25maWdzIHNldC4KK2xvb3A6Citmb3JlYWNoIG15ICRtb2R1bGUgKGtleXMoJW1vZHVsZXMp
KSB7CisgICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JG1vZHVsZX0pKSB7CisJbXkgQGFyciA9IEB7
JG9iamVjdHN7JG1vZHVsZX19OworCWZvcmVhY2ggbXkgJGNvbmYgKEBhcnIpIHsKKwkgICAgaWYg
KGRlZmluZWQoJHNldGNvbmZpZ3N7JGNvbmZ9KSkgeworCQluZXh0IGxvb3A7CisJICAgIH0KKwl9
CisJcHJpbnQgU1RERVJSICJtb2R1bGUgJG1vZHVsZSBkaWQgbm90IGhhdmUgY29uZmlncyI7CisJ
Zm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICBwcmludCBTVERFUlIgIiAiICwgJGNvbmY7
CisJfQorCXByaW50IFNUREVSUiAiXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvc3ltYm9sLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L3N5bWJvbC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTI2NmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3N5bWJvbC5jCkBAIC0wLDAgKzEsMTMzMSBAQAorLy8gU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIg
Um9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPGN0
eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk
ZSA8cmVnZXguaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorCisjaW5jbHVkZSAibGtjLmgi
CisKK3N0cnVjdCBzeW1ib2wgc3ltYm9sX3llcyA9IHsKKwkubmFtZSA9ICJ5IiwKKwkuY3VyciA9
IHsgInkiLCB5ZXMgfSwKKwkuZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAorfSwg
c3ltYm9sX21vZCA9IHsKKwkubmFtZSA9ICJtIiwKKwkuY3VyciA9IHsgIm0iLCBtb2QgfSwKKwku
ZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAorfSwgc3ltYm9sX25vID0geworCS5u
YW1lID0gIm4iLAorCS5jdXJyID0geyAibiIsIG5vIH0sCisJLmZsYWdzID0gU1lNQk9MX0NPTlNU
fFNZTUJPTF9WQUxJRCwKK30sIHN5bWJvbF9lbXB0eSA9IHsKKwkubmFtZSA9ICIiLAorCS5jdXJy
ID0geyAiIiwgbm8gfSwKKwkuZmxhZ3MgPSBTWU1CT0xfVkFMSUQsCit9OworCitzdHJ1Y3Qgc3lt
Ym9sICpzeW1fZGVmY29uZmlnX2xpc3Q7CitzdHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsKK3Ry
aXN0YXRlIG1vZHVsZXNfdmFsOworCitlbnVtIHN5bWJvbF90eXBlIHN5bV9nZXRfdHlwZShzdHJ1
Y3Qgc3ltYm9sICpzeW0pCit7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltLT50eXBlOwor
CisJaWYgKHR5cGUgPT0gU19UUklTVEFURSkgeworCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShz
eW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpCisJCQl0eXBlID0gU19CT09MRUFOOworCQllbHNl
IGlmIChtb2R1bGVzX3ZhbCA9PSBubykKKwkJCXR5cGUgPSBTX0JPT0xFQU47CisJfQorCXJldHVy
biB0eXBlOworfQorCitjb25zdCBjaGFyICpzeW1fdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5cGUg
dHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwkJcmV0dXJuICJi
b29sIjsKKwljYXNlIFNfVFJJU1RBVEU6CisJCXJldHVybiAidHJpc3RhdGUiOworCWNhc2UgU19J
TlQ6CisJCXJldHVybiAiaW50ZWdlciI7CisJY2FzZSBTX0hFWDoKKwkJcmV0dXJuICJoZXgiOwor
CWNhc2UgU19TVFJJTkc6CisJCXJldHVybiAic3RyaW5nIjsKKwljYXNlIFNfVU5LTk9XTjoKKwkJ
cmV0dXJuICJ1bmtub3duIjsKKwl9CisJcmV0dXJuICI/Pz8iOworfQorCitzdHJ1Y3QgcHJvcGVy
dHkgKnN5bV9nZXRfY2hvaWNlX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBw
cm9wZXJ0eSAqcHJvcDsKKworCWZvcl9hbGxfY2hvaWNlcyhzeW0sIHByb3ApCisJCXJldHVybiBw
cm9wOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0
X2RlZmF1bHRfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpw
cm9wOworCisJZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHByb3ApIHsKKwkJcHJvcC0+dmlzaWJsZS50
cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsKKwkJaWYgKHByb3AtPnZp
c2libGUudHJpICE9IG5vKQorCQkJcmV0dXJuIHByb3A7CisJfQorCXJldHVybiBOVUxMOworfQor
CitzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfcmFuZ2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0p
Cit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwg
cHJvcCwgUF9SQU5HRSkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShw
cm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAocHJvcC0+dmlzaWJsZS50cmkgIT0gbm8pCisJCQly
ZXR1cm4gcHJvcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBsb25nIGxvbmcgc3lt
X2dldF9yYW5nZV92YWwoc3RydWN0IHN5bWJvbCAqc3ltLCBpbnQgYmFzZSkKK3sKKwlzeW1fY2Fs
Y192YWx1ZShzeW0pOworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwkJYmFz
ZSA9IDEwOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQliYXNlID0gMTY7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RydG9sbChzeW0tPmN1cnIudmFsLCBO
VUxMLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgc3ltX3ZhbGlkYXRlX3JhbmdlKHN0cnVjdCBz
eW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJaW50IGJhc2U7CisJbG9u
ZyBsb25nIHZhbCwgdmFsMjsKKwljaGFyIHN0cls2NF07CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19JTlQ6CisJCWJhc2UgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBTX0hFWDoKKwkJ
YmFzZSA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCXByb3AgPSBz
eW1fZ2V0X3JhbmdlX3Byb3Aoc3ltKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKwl2YWwgPSBz
dHJ0b2xsKHN5bS0+Y3Vyci52YWwsIE5VTEwsIGJhc2UpOworCXZhbDIgPSBzeW1fZ2V0X3Jhbmdl
X3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgYmFzZSk7CisJaWYgKHZhbCA+PSB2YWwyKSB7CisJ
CXZhbDIgPSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIGJhc2UpOwor
CQlpZiAodmFsIDw9IHZhbDIpCisJCQlyZXR1cm47CisJfQorCWlmIChzeW0tPnR5cGUgPT0gU19J
TlQpCisJCXNwcmludGYoc3RyLCAiJWxsZCIsIHZhbDIpOworCWVsc2UKKwkJc3ByaW50ZihzdHIs
ICIweCVsbHgiLCB2YWwyKTsKKwlzeW0tPmN1cnIudmFsID0geHN0cmR1cChzdHIpOworfQorCitz
dGF0aWMgdm9pZCBzeW1fc2V0X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsKKworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIQU5HRUQ7CisJZm9y
IChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlpZiAocHJv
cC0+bWVudSkKKwkJCXByb3AtPm1lbnUtPmZsYWdzIHw9IE1FTlVfQ0hBTkdFRDsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkIHN5bV9zZXRfYWxsX2NoYW5nZWQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9s
ICpzeW07CisJaW50IGk7CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKQorCQlzeW1fc2V0X2No
YW5nZWQoc3ltKTsKK30KKworc3RhdGljIHZvaWQgc3ltX2NhbGNfdmlzaWJpbGl0eShzdHJ1Y3Qg
c3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wg
KmNob2ljZV9zeW0gPSBOVUxMOworCXRyaXN0YXRlIHRyaTsKKworCS8qIGFueSBwcm9tcHQgdmlz
aWJsZT8gKi8KKwl0cmkgPSBubzsKKworCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpCisJ
CWNob2ljZV9zeW0gPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsK
KworCWZvcl9hbGxfcHJvbXB0cyhzeW0sIHByb3ApIHsKKwkJcHJvcC0+dmlzaWJsZS50cmkgPSBl
eHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsKKwkJLyoKKwkJICogVHJpc3RhdGUg
Y2hvaWNlX3ZhbHVlcyB3aXRoIHZpc2liaWxpdHkgJ21vZCcgYXJlCisJCSAqIG5vdCB2aXNpYmxl
IGlmIHRoZSBjb3JyZXNwb25kaW5nIGNob2ljZSdzIHZhbHVlIGlzCisJCSAqICd5ZXMnLgorCQkg
Ki8KKwkJaWYgKGNob2ljZV9zeW0gJiYgc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYKKwkJICAg
IHByb3AtPnZpc2libGUudHJpID09IG1vZCAmJiBjaG9pY2Vfc3ltLT5jdXJyLnRyaSA9PSB5ZXMp
CisJCQlwcm9wLT52aXNpYmxlLnRyaSA9IG5vOworCisJCXRyaSA9IEVYUFJfT1IodHJpLCBwcm9w
LT52aXNpYmxlLnRyaSk7CisJfQorCWlmICh0cmkgPT0gbW9kICYmIChzeW0tPnR5cGUgIT0gU19U
UklTVEFURSB8fCBtb2R1bGVzX3ZhbCA9PSBubykpCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT52
aXNpYmxlICE9IHRyaSkgeworCQlzeW0tPnZpc2libGUgPSB0cmk7CisJCXN5bV9zZXRfY2hhbmdl
ZChzeW0pOworCX0KKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQorCQlyZXR1cm47CisJ
LyogZGVmYXVsdGluZyB0byAieWVzIiBpZiBubyBleHBsaWNpdCAiZGVwZW5kcyBvbiIgYXJlIGdp
dmVuICovCisJdHJpID0geWVzOworCWlmIChzeW0tPmRpcl9kZXAuZXhwcikKKwkJdHJpID0gZXhw
cl9jYWxjX3ZhbHVlKHN5bS0+ZGlyX2RlcC5leHByKTsKKwlpZiAodHJpID09IG1vZCAmJiBzeW1f
Z2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT5kaXJf
ZGVwLnRyaSAhPSB0cmkpIHsKKwkJc3ltLT5kaXJfZGVwLnRyaSA9IHRyaTsKKwkJc3ltX3NldF9j
aGFuZ2VkKHN5bSk7CisJfQorCXRyaSA9IG5vOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikKKwkJ
dHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+cmV2X2RlcC5leHByKTsKKwlpZiAodHJpID09IG1v
ZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pCisJCXRyaSA9IHllczsKKwlpZiAo
c3ltLT5yZXZfZGVwLnRyaSAhPSB0cmkpIHsKKwkJc3ltLT5yZXZfZGVwLnRyaSA9IHRyaTsKKwkJ
c3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCXRyaSA9IG5vOworCWlmIChzeW0tPmltcGxpZWQu
ZXhwciAmJiBzeW0tPmRpcl9kZXAudHJpICE9IG5vKQorCQl0cmkgPSBleHByX2NhbGNfdmFsdWUo
c3ltLT5pbXBsaWVkLmV4cHIpOworCWlmICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0p
ID09IFNfQk9PTEVBTikKKwkJdHJpID0geWVzOworCWlmIChzeW0tPmltcGxpZWQudHJpICE9IHRy
aSkgeworCQlzeW0tPmltcGxpZWQudHJpID0gdHJpOworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsK
Kwl9Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkZWZhdWx0IHN5bWJvbCBmb3IgYSBjaG9pY2UuCisg
KiBGaXJzdCB0cnkgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY2hvaWNlIHN5bWJvbAorICog
TmV4dCBsb2NhdGUgdGhlIGZpcnN0IHZpc2libGUgY2hvaWNlIHZhbHVlCisgKiBSZXR1cm4gTlVM
TCBpZiBub25lIHdhcyBmb3VuZAorICovCitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1
bHQoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07CisJc3Ry
dWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCisJLyogYW55IG9mIHRoZSBk
ZWZhdWx0cyB2aXNpYmxlPyAqLworCWZvcl9hbGxfZGVmYXVsdHMoc3ltLCBwcm9wKSB7CisJCXBy
b3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7CisJ
CWlmIChwcm9wLT52aXNpYmxlLnRyaSA9PSBubykKKwkJCWNvbnRpbnVlOworCQlkZWZfc3ltID0g
cHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJ
CXJldHVybiBkZWZfc3ltOworCX0KKworCS8qIGp1c3QgZ2V0IHRoZSBmaXJzdCB2aXNpYmxlIHZh
bHVlICovCisJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwlleHByX2xpc3RfZm9y
X2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIGRlZl9zeW0pCisJCWlmIChkZWZfc3ltLT52aXNpYmxl
ICE9IG5vKQorCQkJcmV0dXJuIGRlZl9zeW07CisKKwkvKiBmYWlsZWQgdG8gbG9jYXRlIGFueSBk
ZWZhdWx0cyAqLworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3lt
X2NhbGNfY2hvaWNlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpkZWZf
c3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgZmxh
Z3M7CisKKwkvKiBmaXJzdCBjYWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGll
cyAqLworCWZsYWdzID0gc3ltLT5mbGFnczsKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChz
eW0pOworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkgewor
CQlzeW1fY2FsY192aXNpYmlsaXR5KGRlZl9zeW0pOworCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAh
PSBubykKKwkJCWZsYWdzICY9IGRlZl9zeW0tPmZsYWdzOworCX0KKworCXN5bS0+ZmxhZ3MgJj0g
ZmxhZ3MgfCB+U1lNQk9MX0RFRl9VU0VSOworCisJLyogaXMgdGhlIHVzZXIgY2hvaWNlIHZpc2li
bGU/ICovCisJZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKKwlpZiAoZGVmX3N5
bSAmJiBkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQlyZXR1cm4gZGVmX3N5bTsKKworCWRlZl9z
eW0gPSBzeW1fY2hvaWNlX2RlZmF1bHQoc3ltKTsKKworCWlmIChkZWZfc3ltID09IE5VTEwpCisJ
CS8qIG5vIGNob2ljZT8gcmVzZXQgdHJpc3RhdGUgdmFsdWUgKi8KKwkJc3ltLT5jdXJyLnRyaSA9
IG5vOworCisJcmV0dXJuIGRlZl9zeW07Cit9CisKK3N0YXRpYyB2b2lkIHN5bV93YXJuX3VubWV0
X2RlcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IGdzdHIgZ3MgPSBzdHJfbmV3KCk7
CisKKwlzdHJfcHJpbnRmKCZncywKKwkJICAgIlxuV0FSTklORzogdW5tZXQgZGlyZWN0IGRlcGVu
ZGVuY2llcyBkZXRlY3RlZCBmb3IgJXNcbiIsCisJCSAgIHN5bS0+bmFtZSk7CisJc3RyX3ByaW50
ZigmZ3MsCisJCSAgICIgIERlcGVuZHMgb24gWyVjXTogIiwKKwkJICAgc3ltLT5kaXJfZGVwLnRy
aSA9PSBtb2QgPyAnbScgOiAnbicpOworCWV4cHJfZ3N0cl9wcmludChzeW0tPmRpcl9kZXAuZXhw
ciwgJmdzKTsKKwlzdHJfcHJpbnRmKCZncywgIlxuIik7CisKKwlleHByX2dzdHJfcHJpbnRfcmV2
ZGVwKHN5bS0+cmV2X2RlcC5leHByLCAmZ3MsIHllcywKKwkJCSAgICAgICAiICBTZWxlY3RlZCBi
eSBbeV06XG4iKTsKKwlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCAm
Z3MsIG1vZCwKKwkJCSAgICAgICAiICBTZWxlY3RlZCBieSBbbV06XG4iKTsKKworCWZwdXRzKHN0
cl9nZXQoJmdzKSwgc3RkZXJyKTsKK30KKwordm9pZCBzeW1fY2FsY192YWx1ZShzdHJ1Y3Qgc3lt
Ym9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbF92YWx1ZSBuZXd2YWwsIG9sZHZhbDsKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisKKwlpZiAoIXN5bSkKKwkJcmV0
dXJuOworCisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpCisJCXJldHVybjsKKworCWlm
IChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYKKwkgICAgc3ltLT5mbGFncyAmIFNZTUJPTF9O
RUVEX1NFVF9DSE9JQ0VfVkFMVUVTKSB7CisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORUVEX1NF
VF9DSE9JQ0VfVkFMVUVTOworCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCQlz
eW1fY2FsY192YWx1ZShwcm9wX2dldF9zeW1ib2wocHJvcCkpOworCX0KKworCXN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX1ZBTElEOworCisJb2xkdmFsID0gc3ltLT5jdXJyOworCisJc3dpdGNoIChzeW0t
PnR5cGUpIHsKKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NUUklORzoKKwkJ
bmV3dmFsID0gc3ltYm9sX2VtcHR5LmN1cnI7CisJCWJyZWFrOworCWNhc2UgU19CT09MRUFOOgor
CWNhc2UgU19UUklTVEFURToKKwkJbmV3dmFsID0gc3ltYm9sX25vLmN1cnI7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCXN5bS0+Y3Vyci52YWwgPSBzeW0tPm5hbWU7CisJCXN5bS0+Y3Vyci50cmkg
PSBubzsKKwkJcmV0dXJuOworCX0KKwlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisKKwlz
eW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisKKwlpZiAoc3ltLT52aXNpYmxlICE9IG5vKQorCQlz
eW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKworCS8qIHNldCBkZWZhdWx0IGlmIHJlY3Vyc2l2
ZWx5IGNhbGxlZCAqLworCXN5bS0+Y3VyciA9IG5ld3ZhbDsKKworCXN3aXRjaCAoc3ltX2dldF90
eXBlKHN5bSkpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmIChz
eW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykgeworCQkJcHJv
cCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJCW5ld3ZhbC50cmkgPSAocHJvcF9nZXRf
c3ltYm9sKHByb3ApLT5jdXJyLnZhbCA9PSBzeW0pID8geWVzIDogbm87CisJCX0gZWxzZSB7CisJ
CQlpZiAoc3ltLT52aXNpYmxlICE9IG5vKSB7CisJCQkJLyogaWYgdGhlIHN5bWJvbCBpcyB2aXNp
YmxlIHVzZSB0aGUgdXNlciB2YWx1ZQorCQkJCSAqIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRy
eSB0aGUgZGVmYXVsdCB2YWx1ZQorCQkJCSAqLworCQkJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkp
IHsKKwkJCQkJbmV3dmFsLnRyaSA9IEVYUFJfQU5EKHN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSwK
KwkJCQkJCQkgICAgICBzeW0tPnZpc2libGUpOworCQkJCQlnb3RvIGNhbGNfbmV3dmFsOworCQkJ
CX0KKwkJCX0KKwkJCWlmIChzeW0tPnJldl9kZXAudHJpICE9IG5vKQorCQkJCXN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX1dSSVRFOworCQkJaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJCQlwcm9w
ID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKKwkJCQlpZiAocHJvcCkgeworCQkJCQluZXd2
YWwudHJpID0gRVhQUl9BTkQoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLAorCQkJCQkJCSAg
ICAgIHByb3AtPnZpc2libGUudHJpKTsKKwkJCQkJaWYgKG5ld3ZhbC50cmkgIT0gbm8pCisJCQkJ
CQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCQl9CisJCQkJaWYgKHN5bS0+aW1wbGll
ZC50cmkgIT0gbm8pIHsKKwkJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJCW5l
d3ZhbC50cmkgPSBFWFBSX09SKG5ld3ZhbC50cmksIHN5bS0+aW1wbGllZC50cmkpOworCQkJCX0K
KwkJCX0KKwkJY2FsY19uZXd2YWw6CisJCQlpZiAoc3ltLT5kaXJfZGVwLnRyaSA8IHN5bS0+cmV2
X2RlcC50cmkpCisJCQkJc3ltX3dhcm5fdW5tZXRfZGVwKHN5bSk7CisJCQluZXd2YWwudHJpID0g
RVhQUl9PUihuZXd2YWwudHJpLCBzeW0tPnJldl9kZXAudHJpKTsKKwkJfQorCQlpZiAobmV3dmFs
LnRyaSA9PSBtb2QgJiYKKwkJICAgIChzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4gfHwg
c3ltLT5pbXBsaWVkLnRyaSA9PSB5ZXMpKQorCQkJbmV3dmFsLnRyaSA9IHllczsKKwkJYnJlYWs7
CisJY2FzZSBTX1NUUklORzoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19JTlQ6CisJCWlmIChzeW0t
PnZpc2libGUgIT0gbm8gJiYgc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCQluZXd2YWwudmFsID0g
c3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOworCQkJYnJlYWs7CisJCX0KKwkJcHJvcCA9IHN5bV9n
ZXRfZGVmYXVsdF9wcm9wKHN5bSk7CisJCWlmIChwcm9wKSB7CisJCQlzdHJ1Y3Qgc3ltYm9sICpk
cyA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJCWlmIChkcykgeworCQkJCXN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX1dSSVRFOworCQkJCXN5bV9jYWxjX3ZhbHVlKGRzKTsKKwkJCQluZXd2YWwudmFs
ID0gZHMtPmN1cnIudmFsOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9
CisKKwlzeW0tPmN1cnIgPSBuZXd2YWw7CisJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBuZXd2
YWwudHJpID09IHllcykKKwkJc3ltLT5jdXJyLnZhbCA9IHN5bV9jYWxjX2Nob2ljZShzeW0pOwor
CXN5bV92YWxpZGF0ZV9yYW5nZShzeW0pOworCisJaWYgKG1lbWNtcCgmb2xkdmFsLCAmc3ltLT5j
dXJyLCBzaXplb2Yob2xkdmFsKSkpIHsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJCWlmICht
b2R1bGVzX3N5bSA9PSBzeW0pIHsKKwkJCXN5bV9zZXRfYWxsX2NoYW5nZWQoKTsKKwkJCW1vZHVs
ZXNfdmFsID0gbW9kdWxlc19zeW0tPmN1cnIudHJpOworCQl9CisJfQorCisJaWYgKHN5bV9pc19j
aG9pY2Uoc3ltKSkgeworCQlzdHJ1Y3Qgc3ltYm9sICpjaG9pY2Vfc3ltOworCisJCXByb3AgPSBz
eW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+
ZXhwciwgZSwgY2hvaWNlX3N5bSkgeworCQkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRF
KSAmJgorCQkJICAgIGNob2ljZV9zeW0tPnZpc2libGUgIT0gbm8pCisJCQkJY2hvaWNlX3N5bS0+
ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOworCQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hBTkdF
RCkKKwkJCQlzeW1fc2V0X2NoYW5nZWQoY2hvaWNlX3N5bSk7CisJCX0KKwl9CisKKwlpZiAoc3lt
LT5mbGFncyAmIFNZTUJPTF9OT19XUklURSkKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRF
OworCisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUykKKwkJ
c2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN5bSk7Cit9CisKK3ZvaWQgc3ltX2NsZWFyX2FsbF92YWxp
ZCh2b2lkKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgaTsKKworCWZvcl9hbGxfc3lt
Ym9scyhpLCBzeW0pCisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsKKwlzeW1fYWRkX2No
YW5nZV9jb3VudCgxKTsKKwlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7Cit9CisKK2Jvb2wg
c3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIHRyaXN0YXRlIHZh
bCkKK3sKKwlpbnQgdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCisJaWYgKHN5bS0+dmlzaWJs
ZSA9PSBubykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgIT0gU19CT09MRUFOICYmIHR5
cGUgIT0gU19UUklTVEFURSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgPT0gU19CT09M
RUFOICYmIHZhbCA9PSBtb2QpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltLT52aXNpYmxlIDw9
IHN5bS0+cmV2X2RlcC50cmkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltLT5pbXBsaWVkLnRy
aSA9PSB5ZXMgJiYgdmFsID09IG1vZCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzeW1faXNfY2hv
aWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykKKwkJcmV0dXJuIHZhbCA9PSB5
ZXM7CisJcmV0dXJuIHZhbCA+PSBzeW0tPnJldl9kZXAudHJpICYmIHZhbCA8PSBzeW0tPnZpc2li
bGU7Cit9CisKK2Jvb2wgc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0s
IHRyaXN0YXRlIHZhbCkKK3sKKwl0cmlzdGF0ZSBvbGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSk7CisKKwlpZiAob2xkdmFsICE9IHZhbCAmJiAhc3ltX3RyaXN0YXRlX3dpdGhpbl9y
YW5nZShzeW0sIHZhbCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfREVGX1VTRVIpKSB7CisJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQlz
eW1fc2V0X2NoYW5nZWQoc3ltKTsKKwl9CisJLyoKKwkgKiBzZXR0aW5nIGEgY2hvaWNlIHZhbHVl
IGFsc28gcmVzZXRzIHRoZSBuZXcgZmxhZyBvZiB0aGUgY2hvaWNlCisJICogc3ltYm9sIGFuZCBh
bGwgb3RoZXIgY2hvaWNlIHZhbHVlcy4KKwkgKi8KKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShz
eW0pICYmIHZhbCA9PSB5ZXMpIHsKKwkJc3RydWN0IHN5bWJvbCAqY3MgPSBwcm9wX2dldF9zeW1i
b2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJc3RydWN0IHByb3BlcnR5ICpwcm9wOwor
CQlzdHJ1Y3QgZXhwciAqZTsKKworCQljcy0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsKKwkJ
Y3MtPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3By
b3AoY3MpOworCQlmb3IgKGUgPSBwcm9wLT5leHByOyBlOyBlID0gZS0+bGVmdC5leHByKSB7CisJ
CQlpZiAoZS0+cmlnaHQuc3ltLT52aXNpYmxlICE9IG5vKQorCQkJCWUtPnJpZ2h0LnN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQl9CisJfQorCisJc3ltLT5kZWZbU19ERUZfVVNFUl0u
dHJpID0gdmFsOworCWlmIChvbGR2YWwgIT0gdmFsKQorCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7
CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordHJpc3RhdGUgc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7CisKKwlv
bGR2YWwgPSBuZXd2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJZG8geworCQlz
d2l0Y2ggKG5ld3ZhbCkgeworCQljYXNlIG5vOgorCQkJbmV3dmFsID0gbW9kOworCQkJYnJlYWs7
CisJCWNhc2UgbW9kOgorCQkJbmV3dmFsID0geWVzOworCQkJYnJlYWs7CisJCWNhc2UgeWVzOgor
CQkJbmV3dmFsID0gbm87CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92
YWx1ZShzeW0sIG5ld3ZhbCkpCisJCQlicmVhazsKKwl9IHdoaWxlIChvbGR2YWwgIT0gbmV3dmFs
KTsKKwlyZXR1cm4gbmV3dmFsOworfQorCitib29sIHN5bV9zdHJpbmdfdmFsaWQoc3RydWN0IHN5
bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7CisJc2lnbmVkIGNoYXIgY2g7CisKKwlzd2l0
Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19TVFJJTkc6CisJCXJldHVybiB0cnVlOworCWNhc2Ug
U19JTlQ6CisJCWNoID0gKnN0cisrOworCQlpZiAoY2ggPT0gJy0nKQorCQkJY2ggPSAqc3RyKys7
CisJCWlmICghaXNkaWdpdChjaCkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmIChjaCA9PSAnMCcg
JiYgKnN0ciAhPSAwKQorCQkJcmV0dXJuIGZhbHNlOworCQl3aGlsZSAoKGNoID0gKnN0cisrKSkg
eworCQkJaWYgKCFpc2RpZ2l0KGNoKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJu
IHRydWU7CisJY2FzZSBTX0hFWDoKKwkJaWYgKHN0clswXSA9PSAnMCcgJiYgKHN0clsxXSA9PSAn
eCcgfHwgc3RyWzFdID09ICdYJykpCisJCQlzdHIgKz0gMjsKKwkJY2ggPSAqc3RyKys7CisJCWRv
IHsKKwkJCWlmICghaXN4ZGlnaXQoY2gpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfSB3aGlsZSAo
KGNoID0gKnN0cisrKSk7CisJCXJldHVybiB0cnVlOworCWNhc2UgU19CT09MRUFOOgorCWNhc2Ug
U19UUklTVEFURToKKwkJc3dpdGNoIChzdHJbMF0pIHsKKwkJY2FzZSAneSc6IGNhc2UgJ1knOgor
CQljYXNlICdtJzogY2FzZSAnTSc6CisJCWNhc2UgJ24nOiBjYXNlICdOJzoKKwkJCXJldHVybiB0
cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJ
fQorfQorCitib29sIHN5bV9zdHJpbmdfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSwg
Y29uc3QgY2hhciAqc3RyKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlsb25nIGxvbmcg
dmFsOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfU1RSSU5HOgorCQlyZXR1cm4g
c3ltX3N0cmluZ192YWxpZChzeW0sIHN0cik7CisJY2FzZSBTX0lOVDoKKwkJaWYgKCFzeW1fc3Ry
aW5nX3ZhbGlkKHN5bSwgc3RyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcHJvcCA9IHN5bV9nZXRf
cmFuZ2VfcHJvcChzeW0pOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gdHJ1ZTsKKwkJdmFsID0g
c3RydG9sbChzdHIsIE5VTEwsIDEwKTsKKwkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0X3JhbmdlX3Zh
bChwcm9wLT5leHByLT5sZWZ0LnN5bSwgMTApICYmCisJCSAgICAgICB2YWwgPD0gc3ltX2dldF9y
YW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxMCk7CisJY2FzZSBTX0hFWDoKKwkJaWYg
KCFzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3RyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcHJvcCA9
IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gdHJ1ZTsK
KwkJdmFsID0gc3RydG9sbChzdHIsIE5VTEwsIDE2KTsKKwkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0
X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgMTYpICYmCisJCSAgICAgICB2YWwgPD0g
c3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxNik7CisJY2FzZSBTX0JP
T0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlzd2l0Y2ggKHN0clswXSkgeworCQljYXNlICd5
JzogY2FzZSAnWSc6CisJCQlyZXR1cm4gc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHll
cyk7CisJCWNhc2UgJ20nOiBjYXNlICdNJzoKKwkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGlu
X3JhbmdlKHN5bSwgbW9kKTsKKwkJY2FzZSAnbic6IGNhc2UgJ04nOgorCQkJcmV0dXJuIHN5bV90
cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubyk7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCWRl
ZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK2Jvb2wgc3ltX3NldF9zdHJpbmdfdmFs
dWUoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpCit7CisJY29uc3QgY2hh
ciAqb2xkdmFsOworCWNoYXIgKnZhbDsKKwlpbnQgc2l6ZTsKKworCXN3aXRjaCAoc3ltLT50eXBl
KSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlzd2l0Y2ggKG5ld3Zh
bFswXSkgeworCQljYXNlICd5JzogY2FzZSAnWSc6CisJCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0
ZV92YWx1ZShzeW0sIHllcyk7CisJCWNhc2UgJ20nOiBjYXNlICdNJzoKKwkJCXJldHVybiBzeW1f
c2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsKKwkJY2FzZSAnbic6IGNhc2UgJ04nOgorCQkJ
cmV0dXJuIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7CisJCX0KKwkJcmV0dXJuIGZh
bHNlOworCWRlZmF1bHQ6CisJCTsKKwl9CisKKwlpZiAoIXN5bV9zdHJpbmdfd2l0aGluX3Jhbmdl
KHN5bSwgbmV3dmFsKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCEoc3ltLT5mbGFncyAmIFNZ
TUJPTF9ERUZfVVNFUikpIHsKKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCXN5
bV9zZXRfY2hhbmdlZChzeW0pOworCX0KKworCW9sZHZhbCA9IHN5bS0+ZGVmW1NfREVGX1VTRVJd
LnZhbDsKKwlzaXplID0gc3RybGVuKG5ld3ZhbCkgKyAxOworCWlmIChzeW0tPnR5cGUgPT0gU19I
RVggJiYgKG5ld3ZhbFswXSAhPSAnMCcgfHwgKG5ld3ZhbFsxXSAhPSAneCcgJiYgbmV3dmFsWzFd
ICE9ICdYJykpKSB7CisJCXNpemUgKz0gMjsKKwkJc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0g
dmFsID0geG1hbGxvYyhzaXplKTsKKwkJKnZhbCsrID0gJzAnOworCQkqdmFsKysgPSAneCc7CisJ
fSBlbHNlIGlmICghb2xkdmFsIHx8IHN0cmNtcChvbGR2YWwsIG5ld3ZhbCkpCisJCXN5bS0+ZGVm
W1NfREVGX1VTRVJdLnZhbCA9IHZhbCA9IHhtYWxsb2Moc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4g
dHJ1ZTsKKworCXN0cmNweSh2YWwsIG5ld3ZhbCk7CisJZnJlZSgodm9pZCAqKW9sZHZhbCk7CisJ
c3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBGaW5k
IHRoZSBkZWZhdWx0IHZhbHVlIGFzc29jaWF0ZWQgdG8gYSBzeW1ib2wuCisgKiBGb3IgdHJpc3Rh
dGUgc3ltYm9sIGhhbmRsZSB0aGUgbW9kdWxlcz1uIGNhc2UKKyAqIGluIHdoaWNoIGNhc2UgIm0i
IGJlY29tZXMgInkiLgorICogSWYgdGhlIHN5bWJvbCBkb2VzIG5vdCBoYXZlIGFueSBkZWZhdWx0
IHRoZW4gZmFsbGJhY2sKKyAqIHRvIHRoZSBmaXhlZCBkZWZhdWx0IHZhbHVlcy4KKyAqLworY29u
c3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJ
c3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKmRzOworCWNvbnN0IGNoYXIg
KnN0cjsKKwl0cmlzdGF0ZSB2YWw7CisKKwlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisJc3lt
X2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCXZhbCA9IHN5bWJvbF9uby5jdXJyLnRyaTsKKwlz
dHIgPSBzeW1ib2xfZW1wdHkuY3Vyci52YWw7CisKKwkvKiBJZiBzeW1ib2wgaGFzIGEgZGVmYXVs
dCB2YWx1ZSBsb29rIGl0IHVwICovCisJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7
CisJaWYgKHByb3AgIT0gTlVMTCkgeworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNf
Qk9PTEVBTjoKKwkJY2FzZSBTX1RSSVNUQVRFOgorCQkJLyogVGhlIHZpc2liaWxpdHkgbWF5IGxp
bWl0IHRoZSB2YWx1ZSBmcm9tIHllcyA9PiBtb2QgKi8KKwkJCXZhbCA9IEVYUFJfQU5EKGV4cHJf
Y2FsY192YWx1ZShwcm9wLT5leHByKSwgcHJvcC0+dmlzaWJsZS50cmkpOworCQkJYnJlYWs7CisJ
CWRlZmF1bHQ6CisJCQkvKgorCQkJICogVGhlIGZvbGxvd2luZyBmYWlscyB0byBoYW5kbGUgdGhl
IHNpdHVhdGlvbgorCQkJICogd2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGZ1cnRoZXIgbGltaXRl
ZCBieQorCQkJICogdGhlIHZhbGlkIHJhbmdlLgorCQkJICovCisJCQlkcyA9IHByb3BfZ2V0X3N5
bWJvbChwcm9wKTsKKwkJCWlmIChkcyAhPSBOVUxMKSB7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMp
OworCQkJCXN0ciA9IChjb25zdCBjaGFyICopZHMtPmN1cnIudmFsOworCQkJfQorCQl9CisJfQor
CisJLyogSGFuZGxlIHNlbGVjdCBzdGF0ZW1lbnRzICovCisJdmFsID0gRVhQUl9PUih2YWwsIHN5
bS0+cmV2X2RlcC50cmkpOworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgbW9kdWxlcyBh
cmUgbm90IGVuYWJsZWQgKi8KKwlpZiAodmFsID09IG1vZCkKKwkJaWYgKCFzeW1faXNfY2hvaWNl
X3ZhbHVlKHN5bSkgJiYgbW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKQorCQkJdmFsID0geWVz
OworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgdHlwZSBpcyBib29sICovCisJaWYgKHN5
bS0+dHlwZSA9PSBTX0JPT0xFQU4gJiYgdmFsID09IG1vZCkKKwkJdmFsID0geWVzOworCisJLyog
YWRqdXN0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoaXMgc3ltYm9sIGlzIGltcGxpZWQgYnkgYW5v
dGhlciAqLworCWlmICh2YWwgPCBzeW0tPmltcGxpZWQudHJpKQorCQl2YWwgPSBzeW0tPmltcGxp
ZWQudHJpOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNl
IFNfVFJJU1RBVEU6CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2Ugbm86IHJldHVybiAibiI7CisJ
CWNhc2UgbW9kOiByZXR1cm4gIm0iOworCQljYXNlIHllczogcmV0dXJuICJ5IjsKKwkJfQorCWNh
c2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwkJcmV0dXJuIHN0cjsKKwljYXNlIFNfU1RSSU5HOgor
CQlyZXR1cm4gc3RyOworCWNhc2UgU19VTktOT1dOOgorCQlicmVhazsKKwl9CisJcmV0dXJuICIi
OworfQorCitjb25zdCBjaGFyICpzeW1fZ2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpz
eW0pCit7CisJdHJpc3RhdGUgdmFsOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNf
Qk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFs
dWUoc3ltKTsKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAibiI7CisJ
CWNhc2UgbW9kOgorCQkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCQkJcmV0dXJuICht
b2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pID8gIm4iIDogIm0iOworCQljYXNlIHllczoKKwkJ
CXJldHVybiAieSI7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4g
KGNvbnN0IGNoYXIgKilzeW0tPmN1cnIudmFsOworfQorCitib29sIHN5bV9pc19jaGFuZ2FibGUo
c3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPnZpc2libGUgPiBzeW0tPnJldl9k
ZXAudHJpOworfQorCitzdGF0aWMgdW5zaWduZWQgc3RyaGFzaChjb25zdCBjaGFyICpzKQorewor
CS8qIGZudjMyIGhhc2ggKi8KKwl1bnNpZ25lZCBoYXNoID0gMjE2NjEzNjI2MVU7CisJZm9yICg7
ICpzOyBzKyspCisJCWhhc2ggPSAoaGFzaCBeICpzKSAqIDB4MDEwMDAxOTM7CisJcmV0dXJuIGhh
c2g7Cit9CisKK3N0cnVjdCBzeW1ib2wgKnN5bV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgaW50
IGZsYWdzKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsKKwljaGFyICpuZXdfbmFtZTsKKwlp
bnQgaGFzaDsKKworCWlmIChuYW1lKSB7CisJCWlmIChuYW1lWzBdICYmICFuYW1lWzFdKSB7CisJ
CQlzd2l0Y2ggKG5hbWVbMF0pIHsKKwkJCWNhc2UgJ3knOiByZXR1cm4gJnN5bWJvbF95ZXM7CisJ
CQljYXNlICdtJzogcmV0dXJuICZzeW1ib2xfbW9kOworCQkJY2FzZSAnbic6IHJldHVybiAmc3lt
Ym9sX25vOworCQkJfQorCQl9CisJCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hT
SVpFOworCisJCWZvciAoc3ltYm9sID0gc3ltYm9sX2hhc2hbaGFzaF07IHN5bWJvbDsgc3ltYm9s
ID0gc3ltYm9sLT5uZXh0KSB7CisJCQlpZiAoc3ltYm9sLT5uYW1lICYmCisJCQkgICAgIXN0cmNt
cChzeW1ib2wtPm5hbWUsIG5hbWUpICYmCisJCQkgICAgKGZsYWdzID8gc3ltYm9sLT5mbGFncyAm
IGZsYWdzCisJCQkJICAgOiAhKHN5bWJvbC0+ZmxhZ3MgJiAoU1lNQk9MX0NPTlNUfFNZTUJPTF9D
SE9JQ0UpKSkpCisJCQkJcmV0dXJuIHN5bWJvbDsKKwkJfQorCQluZXdfbmFtZSA9IHhzdHJkdXAo
bmFtZSk7CisJfSBlbHNlIHsKKwkJbmV3X25hbWUgPSBOVUxMOworCQloYXNoID0gMDsKKwl9CisK
KwlzeW1ib2wgPSB4bWFsbG9jKHNpemVvZigqc3ltYm9sKSk7CisJbWVtc2V0KHN5bWJvbCwgMCwg
c2l6ZW9mKCpzeW1ib2wpKTsKKwlzeW1ib2wtPm5hbWUgPSBuZXdfbmFtZTsKKwlzeW1ib2wtPnR5
cGUgPSBTX1VOS05PV047CisJc3ltYm9sLT5mbGFncyB8PSBmbGFnczsKKworCXN5bWJvbC0+bmV4
dCA9IHN5bWJvbF9oYXNoW2hhc2hdOworCXN5bWJvbF9oYXNoW2hhc2hdID0gc3ltYm9sOworCisJ
cmV0dXJuIHN5bWJvbDsKK30KKworc3RydWN0IHN5bWJvbCAqc3ltX2ZpbmQoY29uc3QgY2hhciAq
bmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2wgPSBOVUxMOworCWludCBoYXNoID0gMDsK
KworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobmFtZVswXSAmJiAhbmFtZVsx
XSkgeworCQlzd2l0Y2ggKG5hbWVbMF0pIHsKKwkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3ll
czsKKwkJY2FzZSAnbSc6IHJldHVybiAmc3ltYm9sX21vZDsKKwkJY2FzZSAnbic6IHJldHVybiAm
c3ltYm9sX25vOworCQl9CisJfQorCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hT
SVpFOworCisJZm9yIChzeW1ib2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3ltYm9sOyBzeW1ib2wg
PSBzeW1ib2wtPm5leHQpIHsKKwkJaWYgKHN5bWJvbC0+bmFtZSAmJgorCQkgICAgIXN0cmNtcChz
eW1ib2wtPm5hbWUsIG5hbWUpICYmCisJCSAgICAhKHN5bWJvbC0+ZmxhZ3MgJiBTWU1CT0xfQ09O
U1QpKQorCQkJCWJyZWFrOworCX0KKworCXJldHVybiBzeW1ib2w7Cit9CisKK2NvbnN0IGNoYXIg
KnN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIgKmluKQoreworCWNvbnN0IGNoYXIg
KnA7CisJc2l6ZV90IHJlc2xlbjsKKwljaGFyICpyZXM7CisJc2l6ZV90IGw7CisKKwlyZXNsZW4g
PSBzdHJsZW4oaW4pICsgc3RybGVuKCJcIlwiIikgKyAxOworCisJcCA9IGluOworCWZvciAoOzsp
IHsKKwkJbCA9IHN0cmNzcG4ocCwgIlwiXFwiKTsKKwkJcCArPSBsOworCisJCWlmIChwWzBdID09
ICdcMCcpCisJCQlicmVhazsKKworCQlyZXNsZW4rKzsKKwkJcCsrOworCX0KKworCXJlcyA9IHht
YWxsb2MocmVzbGVuKTsKKwlyZXNbMF0gPSAnXDAnOworCisJc3RyY2F0KHJlcywgIlwiIik7CisK
KwlwID0gaW47CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOworCQlzdHJu
Y2F0KHJlcywgcCwgbCk7CisJCXAgKz0gbDsKKworCQlpZiAocFswXSA9PSAnXDAnKQorCQkJYnJl
YWs7CisKKwkJc3RyY2F0KHJlcywgIlxcIik7CisJCXN0cm5jYXQocmVzLCBwKyssIDEpOworCX0K
KworCXN0cmNhdChyZXMsICJcIiIpOworCXJldHVybiByZXM7Cit9CisKK3N0cnVjdCBzeW1fbWF0
Y2ggeworCXN0cnVjdCBzeW1ib2wJKnN5bTsKKwlvZmZfdAkJc28sIGVvOworfTsKKworLyogQ29t
cGFyZSBtYXRjaGVkIHN5bWJvbHMgYXMgdGh1czoKKyAqIC0gZmlyc3QsIHN5bWJvbHMgdGhhdCBt
YXRjaCBleGFjdGx5CisgKiAtIHRoZW4sIGFscGhhYmV0aWNhbCBzb3J0CisgKi8KK3N0YXRpYyBp
bnQgc3ltX3JlbF9jb21wKGNvbnN0IHZvaWQgKnN5bTEsIGNvbnN0IHZvaWQgKnN5bTIpCit7CisJ
Y29uc3Qgc3RydWN0IHN5bV9tYXRjaCAqczEgPSBzeW0xOworCWNvbnN0IHN0cnVjdCBzeW1fbWF0
Y2ggKnMyID0gc3ltMjsKKwlpbnQgZXhhY3QxLCBleGFjdDI7CisKKwkvKiBFeGFjdCBtYXRjaDoK
KwkgKiAtIGlmIG1hdGNoZWQgbGVuZ3RoIG9uIHN5bWJvbCBzMSBpcyB0aGUgbGVuZ3RoIG9mIHRo
YXQgc3ltYm9sLAorCSAqICAgdGhlbiB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdDsKKwkg
KiAtIGlmIG1hdGNoZWQgbGVuZ3RoIG9uIHN5bWJvbCBzMiBpcyB0aGUgbGVuZ3RoIG9mIHRoYXQg
c3ltYm9sLAorCSAqICAgdGhlbiB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdC4KKwkgKiBO
b3RlOiBzaW5jZSB0aGUgc2VhcmNoIGNhbiBiZSBhIHJlZ2V4cCwgYm90aCBzeW1ib2xzIG1heSBt
YXRjaAorCSAqIGV4YWN0bHk7IGlmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGNhbid0IGRlY2lkZSB3
aGljaCBjb21lcyBmaXJzdCwKKwkgKiBhbmQgd2UgZmFsbGJhY2sgdG8gc29ydGluZyBhbHBoYWJl
dGljYWxseS4KKwkgKi8KKwlleGFjdDEgPSAoczEtPmVvIC0gczEtPnNvKSA9PSBzdHJsZW4oczEt
PnN5bS0+bmFtZSk7CisJZXhhY3QyID0gKHMyLT5lbyAtIHMyLT5zbykgPT0gc3RybGVuKHMyLT5z
eW0tPm5hbWUpOworCWlmIChleGFjdDEgJiYgIWV4YWN0MikKKwkJcmV0dXJuIC0xOworCWlmICgh
ZXhhY3QxICYmIGV4YWN0MikKKwkJcmV0dXJuIDE7CisKKwkvKiBBcyBhIGZhbGxiYWNrLCBzb3J0
IHN5bWJvbHMgYWxwaGFiZXRpY2FsbHkgKi8KKwlyZXR1cm4gc3RyY21wKHMxLT5zeW0tPm5hbWUs
IHMyLT5zeW0tPm5hbWUpOworfQorCitzdHJ1Y3Qgc3ltYm9sICoqc3ltX3JlX3NlYXJjaChjb25z
dCBjaGFyICpwYXR0ZXJuKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKipzeW1fYXJyID0gTlVM
TDsKKwlzdHJ1Y3Qgc3ltX21hdGNoICpzeW1fbWF0Y2hfYXJyID0gTlVMTDsKKwlpbnQgaSwgY250
LCBzaXplOworCXJlZ2V4X3QgcmU7CisJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKworCWNudCA9IHNp
emUgPSAwOworCS8qIFNraXAgaWYgZW1wdHkgKi8KKwlpZiAoc3RybGVuKHBhdHRlcm4pID09IDAp
CisJCXJldHVybiBOVUxMOworCWlmIChyZWdjb21wKCZyZSwgcGF0dGVybiwgUkVHX0VYVEVOREVE
fFJFR19JQ0FTRSkpCisJCXJldHVybiBOVUxMOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkg
eworCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCB8fCAhc3ltLT5uYW1lKQorCQkJY29u
dGludWU7CisJCWlmIChyZWdleGVjKCZyZSwgc3ltLT5uYW1lLCAxLCBtYXRjaCwgMCkpCisJCQlj
b250aW51ZTsKKwkJaWYgKGNudCA+PSBzaXplKSB7CisJCQl2b2lkICp0bXA7CisJCQlzaXplICs9
IDE2OworCQkJdG1wID0gcmVhbGxvYyhzeW1fbWF0Y2hfYXJyLCBzaXplICogc2l6ZW9mKHN0cnVj
dCBzeW1fbWF0Y2gpKTsKKwkJCWlmICghdG1wKQorCQkJCWdvdG8gc3ltX3JlX3NlYXJjaF9mcmVl
OworCQkJc3ltX21hdGNoX2FyciA9IHRtcDsKKwkJfQorCQlzeW1fY2FsY192YWx1ZShzeW0pOwor
CQkvKiBBcyByZWdleGVjIHJldHVybmVkIDAsIHdlIGtub3cgd2UgaGF2ZSBhIG1hdGNoLCBzbwor
CQkgKiB3ZSBjYW4gdXNlIG1hdGNoWzBdLnJtX1tzZV1vIHdpdGhvdXQgZnVydGhlciBjaGVja3MK
KwkJICovCisJCXN5bV9tYXRjaF9hcnJbY250XS5zbyA9IG1hdGNoWzBdLnJtX3NvOworCQlzeW1f
bWF0Y2hfYXJyW2NudF0uZW8gPSBtYXRjaFswXS5ybV9lbzsKKwkJc3ltX21hdGNoX2FycltjbnQr
K10uc3ltID0gc3ltOworCX0KKwlpZiAoc3ltX21hdGNoX2FycikgeworCQlxc29ydChzeW1fbWF0
Y2hfYXJyLCBjbnQsIHNpemVvZihzdHJ1Y3Qgc3ltX21hdGNoKSwgc3ltX3JlbF9jb21wKTsKKwkJ
c3ltX2FyciA9IG1hbGxvYygoY250KzEpICogc2l6ZW9mKHN0cnVjdCBzeW1ib2wgKikpOworCQlp
ZiAoIXN5bV9hcnIpCisJCQlnb3RvIHN5bV9yZV9zZWFyY2hfZnJlZTsKKwkJZm9yIChpID0gMDsg
aSA8IGNudDsgaSsrKQorCQkJc3ltX2FycltpXSA9IHN5bV9tYXRjaF9hcnJbaV0uc3ltOworCQlz
eW1fYXJyW2NudF0gPSBOVUxMOworCX0KK3N5bV9yZV9zZWFyY2hfZnJlZToKKwkvKiBzeW1fbWF0
Y2hfYXJyIGNhbiBiZSBOVUxMIGlmIG5vIG1hdGNoLCBidXQgZnJlZShOVUxMKSBpcyBPSyAqLwor
CWZyZWUoc3ltX21hdGNoX2Fycik7CisJcmVnZnJlZSgmcmUpOworCisJcmV0dXJuIHN5bV9hcnI7
Cit9CisKKy8qCisgKiBXaGVuIHdlIGNoZWNrIGZvciByZWN1cnNpdmUgZGVwZW5kZW5jaWVzIHdl
IHVzZSBhIHN0YWNrIHRvIHNhdmUKKyAqIGN1cnJlbnQgc3RhdGUgc28gd2UgY2FuIHByaW50IG91
dCByZWxldmFudCBpbmZvIHRvIHVzZXIuCisgKiBUaGUgZW50cmllcyBhcmUgbG9jYXRlZCBvbiB0
aGUgY2FsbCBzdGFjayBzbyBubyBuZWVkIHRvIGZyZWUgbWVtb3J5LgorICogTm90ZSBpbnNlcnQo
KSByZW1vdmUoKSBtdXN0IGFsd2F5cyBtYXRjaCB0byBwcm9wZXJseSBjbGVhciB0aGUgc3RhY2su
CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVwX3N0YWNrIHsKKwlzdHJ1Y3QgZGVwX3N0YWNrICpwcmV2
LCAqbmV4dDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOwor
CXN0cnVjdCBleHByICoqZXhwcjsKK30gKmNoZWNrX3RvcDsKKworc3RhdGljIHZvaWQgZGVwX3N0
YWNrX2luc2VydChzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAqc3ltKQor
eworCW1lbXNldChzdGFjaywgMCwgc2l6ZW9mKCpzdGFjaykpOworCWlmIChjaGVja190b3ApCisJ
CWNoZWNrX3RvcC0+bmV4dCA9IHN0YWNrOworCXN0YWNrLT5wcmV2ID0gY2hlY2tfdG9wOworCXN0
YWNrLT5zeW0gPSBzeW07CisJY2hlY2tfdG9wID0gc3RhY2s7Cit9CisKK3N0YXRpYyB2b2lkIGRl
cF9zdGFja19yZW1vdmUodm9pZCkKK3sKKwljaGVja190b3AgPSBjaGVja190b3AtPnByZXY7CisJ
aWYgKGNoZWNrX3RvcCkKKwkJY2hlY2tfdG9wLT5uZXh0ID0gTlVMTDsKK30KKworLyoKKyAqIENh
bGxlZCB3aGVuIHdlIGhhdmUgZGV0ZWN0ZWQgYSByZWN1cnNpdmUgZGVwZW5kZW5jeS4KKyAqIGNo
ZWNrX3RvcCBwb2ludCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjdCBzbyB3ZSB1c2UKKyAqIHRoZSAt
PnByZXYgcG9pbnRlciB0byBsb2NhdGUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCisgKi8KK3N0
YXRpYyB2b2lkIHN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3RydWN0IHN5bWJvbCAqbGFzdF9z
eW0pCit7CisJc3RydWN0IGRlcF9zdGFjayAqc3RhY2s7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAq
bmV4dF9zeW07CisJc3RydWN0IG1lbnUgKm1lbnUgPSBOVUxMOworCXN0cnVjdCBwcm9wZXJ0eSAq
cHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIGN2X3N0YWNrOworCisJaWYgKHN5bV9pc19jaG9pY2Vf
dmFsdWUobGFzdF9zeW0pKSB7CisJCWRlcF9zdGFja19pbnNlcnQoJmN2X3N0YWNrLCBsYXN0X3N5
bSk7CisJCWxhc3Rfc3ltID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3AobGFz
dF9zeW0pKTsKKwl9CisKKwlmb3IgKHN0YWNrID0gY2hlY2tfdG9wOyBzdGFjayAhPSBOVUxMOyBz
dGFjayA9IHN0YWNrLT5wcmV2KQorCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKKwkJCWJy
ZWFrOworCWlmICghc3RhY2spIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHJlY3Vy
c2l2ZSBkZXBlbmRlbmN5IGVycm9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOyBzdGFj
azsgc3RhY2sgPSBzdGFjay0+bmV4dCkgeworCQlzeW0gPSBzdGFjay0+c3ltOworCQluZXh0X3N5
bSA9IHN0YWNrLT5uZXh0ID8gc3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOworCQlwcm9wID0g
c3RhY2stPnByb3A7CisJCWlmIChwcm9wID09IE5VTEwpCisJCQlwcm9wID0gc3RhY2stPnN5bS0+
cHJvcDsKKworCQkvKiBmb3IgY2hvaWNlIHZhbHVlcyBmaW5kIHRoZSBtZW51IGVudHJ5ICh1c2Vk
IGJlbG93KSAqLworCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pIHx8IHN5bV9pc19jaG9pY2VfdmFs
dWUoc3ltKSkgeworCQkJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+
bmV4dCkgeworCQkJCW1lbnUgPSBwcm9wLT5tZW51OworCQkJCWlmIChwcm9wLT5tZW51KQorCQkJ
CQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKKwkJCWZw
cmludGYoc3RkZXJyLCAiJXM6JWQ6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVk
IVxuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8pOworCisJCWlmIChzeW1f
aXNfY2hvaWNlKHN5bSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRjaG9pY2UgJXMg
Y29udGFpbnMgc3ltYm9sICVzXG4iLAorCQkJCW1lbnUtPmZpbGUtPm5hbWUsIG1lbnUtPmxpbmVu
bywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3lt
LT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIGlmIChzeW1f
aXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1i
b2wgJXMgaXMgcGFydCBvZiBjaG9pY2UgJXNcbiIsCisJCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVu
dS0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJ
bmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2Ug
aWYgKHN0YWNrLT5leHByID09ICZzeW0tPmRpcl9kZXAuZXhwcikgeworCQkJZnByaW50ZihzdGRl
cnIsICIlczolZDpcdHN5bWJvbCAlcyBkZXBlbmRzIG9uICVzXG4iLAorCQkJCXByb3AtPmZpbGUt
Pm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2lj
ZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsK
KwkJfSBlbHNlIGlmIChzdGFjay0+ZXhwciA9PSAmc3ltLT5yZXZfZGVwLmV4cHIpIHsKKwkJCWZw
cmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgc2VsZWN0ZWQgYnkgJXNcbiIsCisJ
CQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+
bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6
ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN0YWNrLT5leHByID09ICZzeW0tPmltcGxpZWQu
ZXhwcikgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBpbXBsaWVk
IGJ5ICVzXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0t
Pm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4
dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIGlmIChzdGFjay0+ZXhwcikgewor
CQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyAlcyB2YWx1ZSBjb250YWlucyAl
c1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCisJCQkJc3ltLT5uYW1l
ID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQlwcm9wX2dldF90eXBlX25hbWUocHJvcC0+
dHlwZSksCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIp
OworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyAlcyBp
cyB2aXNpYmxlIGRlcGVuZGluZyBvbiAlc1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9w
LT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQlw
cm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSksCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0
X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9CisJfQorCisJZnByaW50ZihzdGRlcnIsCisJ
CSJGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWct
bGFuZ3VhZ2UudHh0XG4iCisJCSJzdWJzZWN0aW9uIFwiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5k
ZW5jeSBsaW1pdGF0aW9uc1wiXG4iCisJCSJcbiIpOworCisJaWYgKGNoZWNrX3RvcCA9PSAmY3Zf
c3RhY2spCisJCWRlcF9zdGFja19yZW1vdmUoKTsKK30KKworc3RhdGljIHN0cnVjdCBzeW1ib2wg
KnN5bV9jaGVja19leHByX2RlcHMoc3RydWN0IGV4cHIgKmUpCit7CisJc3RydWN0IHN5bWJvbCAq
c3ltOworCisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwlj
YXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJc3ltID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5s
ZWZ0LmV4cHIpOworCQlpZiAoc3ltKQorCQkJcmV0dXJuIHN5bTsKKwkJcmV0dXJuIHN5bV9jaGVj
a19leHByX2RlcHMoZS0+cmlnaHQuZXhwcik7CisJY2FzZSBFX05PVDoKKwkJcmV0dXJuIHN5bV9j
aGVja19leHByX2RlcHMoZS0+bGVmdC5leHByKTsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dF
UToKKwljYXNlIEVfR1RIOgorCWNhc2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5F
UVVBTDoKKwkJc3ltID0gc3ltX2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOworCQlpZiAoc3ltKQor
CQkJcmV0dXJuIHN5bTsKKwkJcmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPnJpZ2h0LnN5bSk7CisJ
Y2FzZSBFX1NZTUJPTDoKKwkJcmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPmxlZnQuc3ltKTsKKwlk
ZWZhdWx0OgorCQlicmVhazsKKwl9CisJZnByaW50ZihzdGRlcnIsICJPb3BzISBIb3cgdG8gY2hl
Y2sgJWQ/XG4iLCBlLT50eXBlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJuIE5VTEwg
d2hlbiBkZXBlbmRlbmNpZXMgYXJlIE9LICovCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2No
ZWNrX3N5bV9kZXBzKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0y
OworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJ
ZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIHN5bSk7CisKKwlzdGFjay5leHByID0gJnN5bS0+ZGly
X2RlcC5leHByOworCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+ZGlyX2RlcC5leHBy
KTsKKwlpZiAoc3ltMikKKwkJZ290byBvdXQ7CisKKwlzdGFjay5leHByID0gJnN5bS0+cmV2X2Rl
cC5leHByOworCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+cmV2X2RlcC5leHByKTsK
KwlpZiAoc3ltMikKKwkJZ290byBvdXQ7CisKKwlzdGFjay5leHByID0gJnN5bS0+aW1wbGllZC5l
eHByOworCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+aW1wbGllZC5leHByKTsKKwlp
ZiAoc3ltMikKKwkJZ290byBvdXQ7CisKKwlzdGFjay5leHByID0gTlVMTDsKKworCWZvciAocHJv
cCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJaWYgKHByb3AtPnR5
cGUgPT0gUF9DSE9JQ0UgfHwgcHJvcC0+dHlwZSA9PSBQX1NFTEVDVCB8fAorCQkgICAgcHJvcC0+
dHlwZSA9PSBQX0lNUExZKQorCQkJY29udGludWU7CisJCXN0YWNrLnByb3AgPSBwcm9wOworCQlz
eW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhwcm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAoc3lt
MikKKwkJCWJyZWFrOworCQlpZiAocHJvcC0+dHlwZSAhPSBQX0RFRkFVTFQgfHwgc3ltX2lzX2No
b2ljZShzeW0pKQorCQkJY29udGludWU7CisJCXN0YWNrLmV4cHIgPSAmcHJvcC0+ZXhwcjsKKwkJ
c3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMocHJvcC0+ZXhwcik7CisJCWlmIChzeW0yKQorCQkJ
YnJlYWs7CisJCXN0YWNrLmV4cHIgPSBOVUxMOworCX0KKworb3V0OgorCWRlcF9zdGFja19yZW1v
dmUoKTsKKworCXJldHVybiBzeW0yOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2No
ZWNrX2Nob2ljZV9kZXBzKHN0cnVjdCBzeW1ib2wgKmNob2ljZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9s
ICpzeW0sICpzeW0yOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsK
KwlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIGNo
b2ljZSk7CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjaG9pY2UpOworCWV4cHJfbGlz
dF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQorCQlzeW0tPmZsYWdzIHw9IChTWU1C
T0xfQ0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7CisKKwljaG9pY2UtPmZsYWdzIHw9IChTWU1CT0xf
Q0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7CisJc3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhjaG9p
Y2UpOworCWNob2ljZS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsKKwlpZiAoc3ltMikKKwkJZ290
byBvdXQ7CisKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgewor
CQlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKHN5bSk7CisJCWlmIChzeW0yKQorCQkJYnJlYWs7
CisJfQorb3V0OgorCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQor
CQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7CisKKwlpZiAoc3ltMiAmJiBzeW1faXNfY2hv
aWNlX3ZhbHVlKHN5bTIpICYmCisJICAgIHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9w
cm9wKHN5bTIpKSA9PSBjaG9pY2UpCisJCXN5bTIgPSBjaG9pY2U7CisKKwlkZXBfc3RhY2tfcmVt
b3ZlKCk7CisKKwlyZXR1cm4gc3ltMjsKK30KKworc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2Rl
cHMoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTI7CisJc3RydWN0
IHByb3BlcnR5ICpwcm9wOworCisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0spIHsKKwkJ
c3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2ZShzeW0pOworCQlyZXR1cm4gc3ltOworCX0KKwlpZiAo
c3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDS0VEKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChzeW1f
aXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJc3RydWN0IGRlcF9zdGFjayBzdGFjazsKKworCQkv
KiBmb3IgY2hvaWNlIGdyb3VwcyBzdGFydCB0aGUgY2hlY2sgd2l0aCBtYWluIGNob2ljZSBzeW1i
b2wgKi8KKwkJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIHN5bSk7CisJCXByb3AgPSBzeW1fZ2V0
X2Nob2ljZV9wcm9wKHN5bSk7CisJCXN5bTIgPSBzeW1fY2hlY2tfZGVwcyhwcm9wX2dldF9zeW1i
b2wocHJvcCkpOworCQlkZXBfc3RhY2tfcmVtb3ZlKCk7CisJfSBlbHNlIGlmIChzeW1faXNfY2hv
aWNlKHN5bSkpIHsKKwkJc3ltMiA9IHN5bV9jaGVja19jaG9pY2VfZGVwcyhzeW0pOworCX0gZWxz
ZSB7CisJCXN5bS0+ZmxhZ3MgfD0gKFNZTUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsKKwkJ
c3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhzeW0pOworCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xf
Q0hFQ0s7CisJfQorCisJcmV0dXJuIHN5bTI7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqcHJvcF9h
bGxvYyhlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0
IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBwcm9wZXJ0eSAqKnByb3BwOworCisJcHJvcCA9IHht
YWxsb2Moc2l6ZW9mKCpwcm9wKSk7CisJbWVtc2V0KHByb3AsIDAsIHNpemVvZigqcHJvcCkpOwor
CXByb3AtPnR5cGUgPSB0eXBlOworCXByb3AtPnN5bSA9IHN5bTsKKwlwcm9wLT5maWxlID0gY3Vy
cmVudF9maWxlOworCXByb3AtPmxpbmVubyA9IHpjb25mX2xpbmVubygpOworCisJLyogYXBwZW5k
IHByb3BlcnR5IHRvIHRoZSBwcm9wIGxpc3Qgb2Ygc3ltYm9sICovCisJaWYgKHN5bSkgeworCQlm
b3IgKHByb3BwID0gJnN5bS0+cHJvcDsgKnByb3BwOyBwcm9wcCA9ICYoKnByb3BwKS0+bmV4dCkK
KwkJCTsKKwkJKnByb3BwID0gcHJvcDsKKwl9CisKKwlyZXR1cm4gcHJvcDsKK30KKworc3RydWN0
IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlpZiAo
cHJvcC0+ZXhwciAmJiAocHJvcC0+ZXhwci0+dHlwZSA9PSBFX1NZTUJPTCB8fAorCQkJICAgcHJv
cC0+ZXhwci0+dHlwZSA9PSBFX0xJU1QpKQorCQlyZXR1cm4gcHJvcC0+ZXhwci0+bGVmdC5zeW07
CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKnByb3BfZ2V0X3R5cGVfbmFtZShlbnVt
IHByb3BfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUF9QUk9NUFQ6CisJ
CXJldHVybiAicHJvbXB0IjsKKwljYXNlIFBfQ09NTUVOVDoKKwkJcmV0dXJuICJjb21tZW50IjsK
KwljYXNlIFBfTUVOVToKKwkJcmV0dXJuICJtZW51IjsKKwljYXNlIFBfREVGQVVMVDoKKwkJcmV0
dXJuICJkZWZhdWx0IjsKKwljYXNlIFBfQ0hPSUNFOgorCQlyZXR1cm4gImNob2ljZSI7CisJY2Fz
ZSBQX1NFTEVDVDoKKwkJcmV0dXJuICJzZWxlY3QiOworCWNhc2UgUF9JTVBMWToKKwkJcmV0dXJu
ICJpbXBseSI7CisJY2FzZSBQX1JBTkdFOgorCQlyZXR1cm4gInJhbmdlIjsKKwljYXNlIFBfU1lN
Qk9MOgorCQlyZXR1cm4gInN5bWJvbCI7CisJY2FzZSBQX1VOS05PV046CisJCWJyZWFrOworCX0K
KwlyZXR1cm4gInVua25vd24iOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0
b19zdWJtZW51L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIw
NzYxZQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19z
dWJtZW51L0tjb25maWcKQEAgLTAsMCArMSw1MiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMAorCitjb25maWcgQQorCWJvb2wgIkEiCisJZGVmYXVsdCB5CisKK2NvbmZpZyBB
MAorCWJvb2wgIkEwIgorCWRlcGVuZHMgb24gQQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMg
ZGVwZW5kcyBvbiBBLCBzbyBzaG91bGQgYmUgYSBzdWJtZW51IG9mIEEuCisKK2NvbmZpZyBBMF8w
CisJYm9vbCAiQTFfMCIKKwlkZXBlbmRzIG9uIEEwCisJaGVscAorCSAgU3VibWVudXMgYXJlIGNy
ZWF0ZWQgcmVjdXJzaXZlbHkuCisJICBUaGlzIHNob3VsZCBiZSBhIHN1Ym1lbnUgb2YgQTAuCisK
K2NvbmZpZyBBMQorCWJvb2wgIkExIgorCWRlcGVuZHMgb24gQQorCWRlZmF1bHQgeQorCWhlbHAK
KwkgIFRoaXMgc2hvdWxkIGxpbmUgdXAgd2l0aCBBMC4KKworY2hvaWNlCisJcHJvbXB0ICJjaG9p
Y2UiCisJZGVwZW5kcyBvbiBBMQorCWhlbHAKKwkgIENob2ljZSBzaG91bGQgYmVjb21lIGEgc3Vi
bWVudSBhcyB3ZWxsLgorCitjb25maWcgQTFfMAorCWJvb2wgIkExXzAiCisKK2NvbmZpZyBBMV8x
CisJYm9vbCAiQTFfMSIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBCCisJYm9vbCAiQiIKKwloZWxw
CisJICBUaGlzIGlzIGluZGVwZW5kZW50IG9mIEEuCisKK2NvbmZpZyBDCisJYm9vbCAiQyIKKwlk
ZXBlbmRzIG9uIEEKKwloZWxwCisJICBUaGlzIGRlcGVuZHMgb24gQSwgYnV0IG5vdCBhIGNvbnNl
Y3V0aXZlIGl0ZW0sIHNvIGNhbi9zaG91bGQgbm90CisJICBiZSBhIHN1Ym1lbnUuCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weSBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YWJkOTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQpAQCAt
MCwwICsxLDEzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0Ny
ZWF0ZSBzdWJtZW51IGZvciBzeW1ib2xzIHRoYXQgZGVwZW5kIG9uIHRoZSBwcmVjZWRpbmcgb25l
LgorCitJZiBhIHN5bWJvbHMgaGFzIGRlcGVuZGVuY3kgb24gdGhlIHByZWNlZGluZyBzeW1ib2ws
IHRoZSBtZW51IGVudHJ5CitzaG91bGQgYmVjb21lIHRoZSBzdWJtZW51IG9mIHRoZSBwcmVjZWRp
bmcgb25lLCBhbmQgZGlzcGxheWVkIHdpdGgKK2RlZXBlciBpbmRlbnRhdGlvbi4KKyIiIgorCisK
K2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDAKKyAg
ICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRv
dXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRv
dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1MjM2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVjdGVk
X3N0ZG91dApAQCAtMCwwICsxLDEwIEBACitBIChBKSBbWS9uLz9dIChORVcpIAorICBBMCAoQTAp
IFtZL24vP10gKE5FVykgCisgICAgQTFfMCAoQTBfMCkgW04veS8/XSAoTkVXKSAKKyAgQTEgKEEx
KSBbWS9uLz9dIChORVcpIAorICAgIGNob2ljZQorICAgID4gMS4gQTFfMCAoQTFfMCkgKE5FVykK
KyAgICAgIDIuIEExXzEgKEExXzEpIChORVcpCisgICAgY2hvaWNlWzEtMj9dOiAKK0IgKEIpIFtO
L3kvP10gKE5FVykgCitDIChDKSBbTi95Lz9dIChORVcpIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvY2hvaWNlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQx
MjIwNQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
L0tjb25maWcKQEAgLTAsMCArMSw1NiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMAorCitjb25maWcgTU9EVUxFUworCWJvb2wgIkVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3Vw
cG9ydCIKKwlvcHRpb24gbW9kdWxlcworCWRlZmF1bHQgeQorCitjaG9pY2UKKwlwcm9tcHQgImJv
b2xlYW4gY2hvaWNlIgorCWRlZmF1bHQgQk9PTF9DSE9JQ0UxCisKK2NvbmZpZyBCT09MX0NIT0lD
RTAKKwlib29sICJjaG9pY2UgMCIKKworY29uZmlnIEJPT0xfQ0hPSUNFMQorCWJvb2wgImNob2lj
ZSAxIgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJvcHRpb25hbCBib29sZWFuIGNo
b2ljZSIKKwlvcHRpb25hbAorCWRlZmF1bHQgT1BUX0JPT0xfQ0hPSUNFMQorCitjb25maWcgT1BU
X0JPT0xfQ0hPSUNFMAorCWJvb2wgImNob2ljZSAwIgorCitjb25maWcgT1BUX0JPT0xfQ0hPSUNF
MQorCWJvb2wgImNob2ljZSAxIgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJ0cmlz
dGF0ZSBjaG9pY2UiCisJZGVmYXVsdCBUUklfQ0hPSUNFMQorCitjb25maWcgVFJJX0NIT0lDRTAK
Kwl0cmlzdGF0ZSAiY2hvaWNlIDAiCisKK2NvbmZpZyBUUklfQ0hPSUNFMQorCXRyaXN0YXRlICJj
aG9pY2UgMSIKKworZW5kY2hvaWNlCisKK2Nob2ljZQorCXByb21wdCAib3B0aW9uYWwgdHJpc3Rh
dGUgY2hvaWNlIgorCW9wdGlvbmFsCisJZGVmYXVsdCBPUFRfVFJJX0NIT0lDRTEKKworY29uZmln
IE9QVF9UUklfQ0hPSUNFMAorCXRyaXN0YXRlICJjaG9pY2UgMCIKKworY29uZmlnIE9QVF9UUklf
Q0hPSUNFMQorCXRyaXN0YXRlICJjaG9pY2UgMSIKKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQzMThmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQxIEBACisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0Jhc2ljIGNob2ljZSB0ZXN0cy4KKworVGhl
IGhhbmRsaW5nIG9mICdjaG9pY2UnIGlzIGEgYml0IGNvbXBsaWNhdGVkIHBhcnQgaW4gS2NvbmZp
Zy4KKworVGhlIGJlaGF2aW9yIG9mICd5JyBjaG9pY2UgaXMgaW50dWl0aXZlLiAgSWYgY2hvaWNl
IHZhbHVlcyBhcmUgdHJpc3RhdGUsCit0aGUgY2hvaWNlIGNhbiBiZSAnbScgd2hlcmUgZWFjaCB2
YWx1ZSBjYW4gYmUgZW5hYmxlZCBpbmRlcGVuZGVudGx5LgorQWxzbywgaWYgYSBjaG9pY2UgaXMg
bWFya2VkIGFzICdvcHRpb25hbCcsIHRoZSB3aG9sZSBjaG9pY2UgY2FuIGJlCitpbnZpc2libGUu
CisiIiIKKworCitkZWYgdGVzdF9vbGRhc2swKGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFz
a2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ29sZGFzazBf
ZXhwZWN0ZWRfc3Rkb3V0JykKKworCitkZWYgdGVzdF9vbGRhc2sxKGNvbmYpOgorICAgIGFzc2Vy
dCBjb25mLm9sZGFza2NvbmZpZygnb2xkYXNrMV9jb25maWcnKSA9PSAwCisgICAgYXNzZXJ0IGNv
bmYuc3Rkb3V0X2NvbnRhaW5zKCdvbGRhc2sxX2V4cGVjdGVkX3N0ZG91dCcpCisKKworZGVmIHRl
c3RfYWxseWVzKGNvbmYpOgorICAgIGFzc2VydCBjb25mLmFsbHllc2NvbmZpZygpID09IDAKKyAg
ICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbHllc19leHBlY3RlZF9jb25maWcnKQor
CisKK2RlZiB0ZXN0X2FsbG1vZChjb25mKToKKyAgICBhc3NlcnQgY29uZi5hbGxtb2Rjb25maWco
KSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRhaW5zKCdhbGxtb2RfZXhwZWN0ZWRf
Y29uZmlnJykKKworCitkZWYgdGVzdF9hbGxubyhjb25mKToKKyAgICBhc3NlcnQgY29uZi5hbGxu
b2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbG5vX2V4
cGVjdGVkX2NvbmZpZycpCisKKworZGVmIHRlc3RfYWxsZGVmKGNvbmYpOgorICAgIGFzc2VydCBj
b25mLmFsbGRlZmNvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMo
J2FsbGRlZl9leHBlY3RlZF9jb25maWcnKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2E3NTRiZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcKQEAgLTAsMCArMSw1
IEBACitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19CT09MX0NIT0lDRTAgaXMgbm90IHNldAor
Q09ORklHX0JPT0xfQ0hPSUNFMT15CisjIENPTkZJR19UUklfQ0hPSUNFMCBpcyBub3Qgc2V0Cisj
IENPTkZJR19UUklfQ0hPSUNFMSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWY1ZGNkCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwpAQCAtMCww
ICsxLDkgQEAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qg
c2V0CitDT05GSUdfQk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklHX09QVF9CT09MX0NIT0lDRTAgaXMg
bm90IHNldAorQ09ORklHX09QVF9CT09MX0NIT0lDRTE9eQorQ09ORklHX1RSSV9DSE9JQ0UwPW0K
K0NPTkZJR19UUklfQ0hPSUNFMT1tCitDT05GSUdfT1BUX1RSSV9DSE9JQ0UwPW0KK0NPTkZJR19P
UFRfVFJJX0NIT0lDRTE9bQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9j
aG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9j
aG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI4OGVlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcKQEAgLTAsMCArMSw1IEBACisjIENPTkZJ
R19NT0RVTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitD
T05GSUdfQk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklHX1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NP
TkZJR19UUklfQ0hPSUNFMT15CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNWEwNjJhCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK0NP
TkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdf
Qk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklHX09QVF9CT09MX0NIT0lDRTAgaXMgbm90IHNldAorQ09O
RklHX09QVF9CT09MX0NIT0lDRTE9eQorIyBDT05GSUdfVFJJX0NIT0lDRTAgaXMgbm90IHNldAor
Q09ORklHX1RSSV9DSE9JQ0UxPXkKKyMgQ09ORklHX09QVF9UUklfQ0hPSUNFMCBpcyBub3Qgc2V0
CitDT05GSUdfT1BUX1RSSV9DSE9JQ0UxPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MWJiYQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0CkBAIC0wLDAg
KzEsMTAgQEAKK0VuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAoTU9EVUxFUykgW1kvbi8/
XSAoTkVXKSAKK2Jvb2xlYW4gY2hvaWNlCisgIDEuIGNob2ljZSAwIChCT09MX0NIT0lDRTApIChO
RVcpCis+IDIuIGNob2ljZSAxIChCT09MX0NIT0lDRTEpIChORVcpCitjaG9pY2VbMS0yP106IAor
b3B0aW9uYWwgYm9vbGVhbiBjaG9pY2UgW04veS8/XSAoTkVXKSAKK3RyaXN0YXRlIGNob2ljZSBb
TS95Lz9dIChORVcpIAorICBjaG9pY2UgMCAoVFJJX0NIT0lDRTApIFtOL20vP10gKE5FVykgCisg
IGNob2ljZSAxIChUUklfQ0hPSUNFMSkgW04vbS8/XSAoTkVXKSAKK29wdGlvbmFsIHRyaXN0YXRl
IGNob2ljZSBbTi9tL3kvP10gKE5FVykgCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlL29sZGFzazFfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmI2N2JmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZS9vbGRhc2sxX2NvbmZpZwpAQCAtMCwwICsxLDIgQEAKKyMgQ09ORklHX01PRFVMRVMgaXMg
bm90IHNldAorQ09ORklHX09QVF9CT09MX0NIT0lDRTA9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjEyNWU5Ci0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQK
QEAgLTAsMCArMSwxNSBAQAorRW5hYmxlIGxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0IChNT0RVTEVT
KSBbTi95Lz9dIAorYm9vbGVhbiBjaG9pY2UKKyAgMS4gY2hvaWNlIDAgKEJPT0xfQ0hPSUNFMCkg
KE5FVykKKz4gMi4gY2hvaWNlIDEgKEJPT0xfQ0hPSUNFMSkgKE5FVykKK2Nob2ljZVsxLTI/XTog
CitvcHRpb25hbCBib29sZWFuIGNob2ljZSBbWS9uLz9dIChORVcpIAorb3B0aW9uYWwgYm9vbGVh
biBjaG9pY2UKKz4gMS4gY2hvaWNlIDAgKE9QVF9CT09MX0NIT0lDRTApCisgIDIuIGNob2ljZSAx
IChPUFRfQk9PTF9DSE9JQ0UxKSAoTkVXKQorY2hvaWNlWzEtMj9dOiAKK3RyaXN0YXRlIGNob2lj
ZQorICAxLiBjaG9pY2UgMCAoVFJJX0NIT0lDRTApIChORVcpCis+IDIuIGNob2ljZSAxIChUUklf
Q0hPSUNFMSkgKE5FVykKK2Nob2ljZVsxLTI/XTogCitvcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2Ug
W04veS8/XSAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3Zh
bHVlX3dpdGhfbV9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MTA2YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnCkBAIC0wLDAgKzEsMjEgQEAKKyMgU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworY29uZmlnIE1PRFVMRVMKKwlkZWZfYm9v
bCB5CisJb3B0aW9uIG1vZHVsZXMKKworY29uZmlnIERFUAorCXRyaXN0YXRlCisJZGVmYXVsdCBt
CisKK2Nob2ljZQorCXByb21wdCAiVHJpc3RhdGUgQ2hvaWNlIgorCitjb25maWcgQ0hPSUNFMAor
CXRyaXN0YXRlICJDaG9pY2UgMCIKKworY29uZmlnIENIT0lDRTEKKwl0cmlzdGF0ZSAiQ2hvaWNl
IDEiCisJZGVwZW5kcyBvbiBERVAKKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5IGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzViNGUwCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2Rl
cC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE2IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCisiIiIKK0hpZGUgdHJpc3RhdGUgY2hvaWNlIHZhbHVlcyB3aXRoIG1vZCBkZXBl
bmRlbmN5IGluIHkgY2hvaWNlLgorCitJZiB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIGRlcGVuZCBv
biBzeW1ib2xzIHNldCB0byAnbScsIHRoZXkgc2hvdWxkIGJlCitoaWRkZW4gd2hlbiB0aGUgY2hv
aWNlIGNvbnRhaW5pbmcgdGhlbSBpcyBjaGFuZ2VkIGZyb20gJ20nIHRvICd5JworKGkuZS4gZXhj
bHVzaXZlIGNob2ljZSkuCisKK1JlbGF0ZWQgTGludXggY29tbWl0OiBmYTY0ZTVmNmEzNWVmZDVl
NzdkNjM5MTI1ZDk3MzA3N2NhNTA2MDc0CisiIiIKKworCitkZWYgdGVzdChjb25mKToKKyAgICBh
c3NlcnQgY29uZi5vbGRhc2tjb25maWcoJ2NvbmZpZycsICd5JykgPT0gMAorICAgIGFzc2VydCBj
b25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfY29uZmlnJykKKyAgICBhc3NlcnQgY29uZi5z
dGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTI2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZwpA
QCAtMCwwICsxLDIgQEAKK0NPTkZJR19DSE9JQ0UwPW0KK0NPTkZJR19DSE9JQ0UxPW0KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAv
ZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVf
d2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNGQwN2I0NAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnCkBAIC0wLDAgKzEsMyBA
QAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX0RFUD1tCitDT05GSUdfQ0hPSUNFMD15CmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVl
X3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJiNTBhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dApAQCAtMCwwICsxLDQg
QEAKK1RyaXN0YXRlIENob2ljZSBbTS95Lz9dIHkKK1RyaXN0YXRlIENob2ljZQorPiAxLiBDaG9p
Y2UgMCAoQ0hPSUNFMCkKK2Nob2ljZVsxXTogMQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9jb25mdGVzdC5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRl
c3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0NWVmNgotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkKQEAgLTAs
MCArMSwyOTEgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyMKKyMgQ29w
eXJpZ2h0IChDKSAyMDE4IE1hc2FoaXJvIFlhbWFkYSA8eWFtYWRhLm1hc2FoaXJvQHNvY2lvbmV4
dC5jb20+CisjCisKKyIiIgorS2NvbmZpZyB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLgorCitUaGlz
IHByb3ZpZGVzIGZpeHR1cmUgZnVuY3Rpb25zIGNvbW1vbmx5IHVzZWQgZnJvbSB0ZXN0IGZpbGVz
LgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHB5dGVzdAoraW1wb3J0IHNodXRpbAoraW1wb3J0
IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQorCitDT05GX1BBVEggPSBvcy5wYXRoLmFic3Bh
dGgob3MucGF0aC5qb2luKCdzY3JpcHRzJywgJ2tjb25maWcnLCAnY29uZicpKQorCisKK2NsYXNz
IENvbmY6CisgICAgIiIiS2NvbmZpZyBydW5uZXIgYW5kIHJlc3VsdCBjaGVja2VyLgorCisgICAg
VGhpcyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIHRvIHJ1biB0ZXh0LWJhc2VkIGludGVyZmFjZSBv
ZiBLY29uZmlnCisgICAgKHNjcmlwdHMva2NvbmZpZy9jb25mKSBhbmQgcmV0cmlldmUgdGhlIHJl
c3VsdGVkIGNvbmZpZ3VyYXRpb24sCisgICAgc3Rkb3V0LCBhbmQgc3RkZXJyLiAgSXQgYWxzbyBw
cm92aWRlcyBtZXRob2RzIHRvIGNvbXBhcmUgdGhvc2UKKyAgICByZXN1bHRzIHdpdGggZXhwZWN0
YXRpb25zLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QpOgorICAg
ICAgICAiIiJDcmVhdGUgYSBuZXcgQ29uZiBpbnN0YW5jZS4KKworICAgICAgICByZXF1ZXN0OiBv
YmplY3QgdG8gaW50cm9zcGVjdCB0aGUgcmVxdWVzdGluZyB0ZXN0IG1vZHVsZQorICAgICAgICAi
IiIKKyAgICAgICAgIyB0aGUgZGlyZWN0b3J5IG9mIHRoZSB0ZXN0IGJlaW5nIHJ1bgorICAgICAg
ICBzZWxmLl90ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShzdHIocmVxdWVzdC5mc3BhdGgpKQor
CisgICAgIyBydW5uZXJzCisgICAgZGVmIF9ydW5fY29uZihzZWxmLCBtb2RlLCBkb3RfY29uZmln
PU5vbmUsIG91dF9maWxlPScuY29uZmlnJywKKyAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZl
PUZhbHNlLCBpbl9rZXlzPU5vbmUsIGV4dHJhX2Vudj17fSk6CisgICAgICAgICIiIlJ1biB0ZXh0
LWJhc2VkIEtjb25maWcgZXhlY3V0YWJsZSBhbmQgc2F2ZSB0aGUgcmVzdWx0LgorCisgICAgICAg
IG1vZGU6IGlucHV0IG1vZGUgb3B0aW9uICgtLW9sZGFza2NvbmZpZywgLS1kZWZjb25maWc9PGZp
bGU+IGV0Yy4pCisgICAgICAgIGRvdF9jb25maWc6IC5jb25maWcgZmlsZSB0byB1c2UgZm9yIGNv
bmZpZ3VyYXRpb24gYmFzZQorICAgICAgICBvdXRfZmlsZTogZmlsZSBuYW1lIHRvIGNvbnRhaW4g
dGhlIG91dHB1dCBjb25maWcgZGF0YQorICAgICAgICBpbnRlcmFjdGl2ZTogZmxhZyB0byBzcGVj
aWZ5IHRoZSBpbnRlcmFjdGl2ZSBtb2RlCisgICAgICAgIGluX2tleXM6IGtleSBpbnB1dHMgZm9y
IGludGVyYWN0aXZlIG1vZGVzCisgICAgICAgIGV4dHJhX2VudjogYWRkaXRpb25hbCBlbnZpcm9u
bWVudHMKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhl
Y3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZCA9IFtDT05GX1BBVEgsIG1vZGUs
ICdLY29uZmlnJ10KKworICAgICAgICAjIE92ZXJyaWRlICdzcmN0cmVlJyBlbnZpcm9ubWVudCB0
byBtYWtlIHRoZSB0ZXN0IGFzIHRoZSB0b3AgZGlyZWN0b3J5CisgICAgICAgIGV4dHJhX2Vudlsn
c3JjdHJlZSddID0gc2VsZi5fdGVzdF9kaXIKKworICAgICAgICAjIFJ1biBLY29uZmlnIGluIGEg
dGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAgICAgICAgIyBUaGlzIGRpcmVjdG9yeSBpcyBhdXRvbWF0
aWNhbGx5IHJlbW92ZWQgd2hlbiBkb25lLgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFy
eURpcmVjdG9yeSgpIGFzIHRlbXBfZGlyOgorCisgICAgICAgICAgICAjIGlmIC5jb25maWcgaXMg
Z2l2ZW4sIGNvcHkgaXQgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICBpZiBk
b3RfY29uZmlnOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4o
c2VsZi5fdGVzdF9kaXIsIGRvdF9jb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4odGVtcF9kaXIsICcuY29uZmlnJykpCisKKyAgICAgICAgICAgIHBz
ID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3dkPXRlbXBfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudj1kaWN0KG9zLmVudmlyb24sICoqZXh0cmFfZW52KSkKKworICAgICAgICAgICAgIyBJ
ZiBpbnB1dCBrZXkgc2VxdWVuY2UgaXMgZ2l2ZW4sIGZlZWQgaXQgdG8gc3RkaW4uCisgICAgICAg
ICAgICBpZiBpbl9rZXlzOgorICAgICAgICAgICAgICAgIHBzLnN0ZGluLndyaXRlKGluX2tleXMu
ZW5jb2RlKCd1dGYtOCcpKQorCisgICAgICAgICAgICB3aGlsZSBwcy5wb2xsKCkgaXMgTm9uZToK
KyAgICAgICAgICAgICAgICAjIEZvciBpbnRlcmFjdGl2ZSBtb2RlcyBzdWNoIGFzIG9sZGFza2Nv
bmZpZywgb2xkY29uZmlnLAorICAgICAgICAgICAgICAgICMgc2VuZCAnRW50ZXInIGtleSB1bnRp
bCB0aGUgcHJvZ3JhbSBmaW5pc2hlcy4KKyAgICAgICAgICAgICAgICBpZiBpbnRlcmFjdGl2ZToK
KyAgICAgICAgICAgICAgICAgICAgcHMuc3RkaW4ud3JpdGUoYidcbicpCisKKyAgICAgICAgICAg
IHNlbGYucmV0Y29kZSA9IHBzLnJldHVybmNvZGUKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0g
cHMuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoKQorICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBwcy5z
dGRlcnIucmVhZCgpLmRlY29kZSgpCisKKyAgICAgICAgICAgICMgUmV0cmlldmUgdGhlIHJlc3Vs
dGVkIGNvbmZpZyBkYXRhIG9ubHkgd2hlbiAuY29uZmlnIGlzIHN1cHBvc2VkCisgICAgICAgICAg
ICAjIHRvIGV4aXN0LiAgSWYgdGhlIGNvbW1hbmQgZmFpbHMsIHRoZSAuY29uZmlnIGRvZXMgbm90
IGV4aXN0LgorICAgICAgICAgICAgIyAnbGlzdG5ld2NvbmZpZycgZG9lcyBub3QgcHJvZHVjZSAu
Y29uZmlnIGluIHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAgICAgIGlmIHNlbGYucmV0Y29kZSA9
PSAwIGFuZCBvdXRfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2lu
KHRlbXBfZGlyLCBvdXRfZmlsZSkpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29u
ZmlnID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5j
b25maWcgPSBOb25lCisKKyAgICAgICAgIyBMb2dnaW5nOgorICAgICAgICAjIFB5dGVzdCBjYXB0
dXJlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGJ5IGRlZmF1bHQuICBJbiBmYWlsdXJlCisg
ICAgICAgICMgb2YgdGVzdHMsIHRoZSBjYXB0dXJlZCBsb2cgd2lsbCBiZSBkaXNwbGF5ZWQuICBU
aGlzIHdpbGwgYmUgdXNlZnVsIHRvCisgICAgICAgICMgZmlndXJlIG91dCB3aGF0IGhhcyBoYXBw
ZW5lZC4KKworICAgICAgICBwcmludCgiW2NvbW1hbmRdXG57fVxuIi5mb3JtYXQoJyAnLmpvaW4o
Y29tbWFuZCkpKQorCisgICAgICAgIHByaW50KCJbcmV0Y29kZV1cbnt9XG4iLmZvcm1hdChzZWxm
LnJldGNvZGUpKQorCisgICAgICAgIHByaW50KCJbc3Rkb3V0XSIpCisgICAgICAgIHByaW50KHNl
bGYuc3Rkb3V0KQorCisgICAgICAgIHByaW50KCJbc3RkZXJyXSIpCisgICAgICAgIHByaW50KHNl
bGYuc3RkZXJyKQorCisgICAgICAgIGlmIHNlbGYuY29uZmlnIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgcHJpbnQoIltvdXRwdXQgZm9yICd7fSddIi5mb3JtYXQob3V0X2ZpbGUpKQorICAgICAg
ICAgICAgcHJpbnQoc2VsZi5jb25maWcpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0Y29kZQor
CisgICAgZGVmIG9sZGFza2NvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUsIGluX2tleXM9Tm9u
ZSk6CisgICAgICAgICIiIlJ1biBvbGRhc2tjb25maWcuCisKKyAgICAgICAgZG90X2NvbmZpZzog
LmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25hbCkKKyAg
ICAgICAgaW5fa2V5OiBrZXkgaW5wdXRzIChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29kZTog
ZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLW9sZGFza2NvbmZpZycsIGRvdF9jb25maWc9ZG90
X2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPVRydWUs
IGluX2tleXM9aW5fa2V5cykKKworICAgIGRlZiBvbGRjb25maWcoc2VsZiwgZG90X2NvbmZpZz1O
b25lLCBpbl9rZXlzPU5vbmUpOgorICAgICAgICAiIiJSdW4gb2xkY29uZmlnLgorCisgICAgICAg
IGRvdF9jb25maWc6IC5jb25maWcgZmlsZSB0byB1c2UgZm9yIGNvbmZpZ3VyYXRpb24gYmFzZSAo
b3B0aW9uYWwpCisgICAgICAgIGluX2tleToga2V5IGlucHV0cyAob3B0aW9uYWwpCisgICAgICAg
IHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1vbGRjb25maWcnLCBkb3Rf
Y29uZmlnPWRvdF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFj
dGl2ZT1UcnVlLCBpbl9rZXlzPWluX2tleXMpCisKKyAgICBkZWYgb2xkZGVmY29uZmlnKHNlbGYs
IGRvdF9jb25maWc9Tm9uZSk6CisgICAgICAgICIiIlJ1biBvbGRkZWZjb25maWcuCisKKyAgICAg
ICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNl
IChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25m
aWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25m
KCctLW9sZGRlZmNvbmZpZycsIGRvdF9jb25maWc9ZG90X2NvbmZpZykKKworICAgIGRlZiBkZWZj
b25maWcoc2VsZiwgZGVmY29uZmlnKToKKyAgICAgICAgIiIiUnVuIGRlZmNvbmZpZy4KKworICAg
ICAgICBkZWZjb25maWc6IGRlZmNvbmZpZyBmaWxlIGZvciBpbnB1dAorICAgICAgICByZXR1cm5j
b2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgor
ICAgICAgICBkZWZjb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgZGVm
Y29uZmlnKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tZGVmY29uZmlnPXt9Jy5m
b3JtYXQoZGVmY29uZmlnX3BhdGgpKQorCisgICAgZGVmIF9hbGxjb25maWcoc2VsZiwgbW9kZSwg
YWxsX2NvbmZpZyk6CisgICAgICAgIGlmIGFsbF9jb25maWc6CisgICAgICAgICAgICBhbGxfY29u
ZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGFsbF9jb25maWcpCisgICAg
ICAgICAgICBleHRyYV9lbnYgPSB7J0tDT05GSUdfQUxMQ09ORklHJzogYWxsX2NvbmZpZ19wYXRo
fQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0cmFfZW52ID0ge30KKworICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0te31jb25maWcnLmZvcm1hdChtb2RlKSwgZXh0cmFfZW52
PWV4dHJhX2VudikKKworICAgIGRlZiBhbGx5ZXNjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25l
KToKKyAgICAgICAgIiIiUnVuIGFsbHllc2NvbmZpZy4KKworICAgICAgICBhbGxfY29uZmlnOiBm
cmFnbWVudCBjb25maWcgZmlsZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQorICAg
ICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisg
ICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdhbGx5ZXMnLCBhbGxf
Y29uZmlnKQorCisgICAgZGVmIGFsbG1vZGNvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgor
ICAgICAgICAiIiJSdW4gYWxsbW9kY29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6IGZyYWdt
ZW50IGNvbmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisgICAgICAg
IHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG1vZCcsIGFsbF9jb25m
aWcpCisKKyAgICBkZWYgYWxsbm9jb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKKyAgICAg
ICAgIiIiUnVuIGFsbG5vY29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNv
bmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisgICAgICAgIHJldHVy
bmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIi
CisgICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG5vJywgYWxsX2NvbmZpZykKKwor
ICAgIGRlZiBhbGxkZWZjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKKyAgICAgICAgIiIi
UnVuIGFsbGRlZmNvbmZpZy4KKworICAgICAgICBhbGxfY29uZmlnOiBmcmFnbWVudCBjb25maWcg
ZmlsZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQorICAgICAgICByZXR1cm5jb2Rl
OiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdhbGxkZWYnLCBhbGxfY29uZmlnKQorCisgICAg
ZGVmIHJhbmRjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKKyAgICAgICAgIiIiUnVuIHJh
bmRjb25maWcuCisKKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9y
IEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBz
dGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2FsbGNvbmZpZygncmFuZCcsIGFsbF9jb25maWcpCisKKyAgICBkZWYgc2F2ZWRl
ZmNvbmZpZyhzZWxmLCBkb3RfY29uZmlnKToKKyAgICAgICAgIiIiUnVuIHNhdmVkZWZjb25maWcu
CisKKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIGZvciBpbnB1dAorICAgICAgICBy
ZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAg
ICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tc2F2ZWRlZmNvbmZpZycsIG91
dF9maWxlPSdkZWZjb25maWcnKQorCisgICAgZGVmIGxpc3RuZXdjb25maWcoc2VsZiwgZG90X2Nv
bmZpZz1Ob25lKToKKyAgICAgICAgIiIiUnVuIGxpc3RuZXdjb25maWcuCisKKyAgICAgICAgZG90
X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRp
b25hbCkKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhl
Y3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLWxp
c3RuZXdjb25maWcnLCBkb3RfY29uZmlnPWRvdF9jb25maWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRfZmlsZT1Ob25lKQorCisgICAgIyBjaGVja2VycworICAgIGRlZiBfcmVh
ZF9hbmRfY29tcGFyZShzZWxmLCBjb21wYXJlLCBleHBlY3RlZCk6CisgICAgICAgICIiIkNvbXBh
cmUgdGhlIHJlc3VsdCB3aXRoIGV4cGVjdGF0aW9uLgorCisgICAgICAgIGNvbXBhcmU6IGZ1bmN0
aW9uIHRvIGNvbXBhcmUgdGhlIHJlc3VsdCB3aXRoIGV4cGVjdGF0aW9uCisgICAgICAgIGV4cGVj
dGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgIiIiCisg
ICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGV4cGVjdGVkKSkg
YXMgZjoKKyAgICAgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBmLnJlYWQoKQorICAgICAgICByZXR1
cm4gY29tcGFyZShzZWxmLCBleHBlY3RlZF9kYXRhKQorCisgICAgZGVmIF9jb250YWlucyhzZWxm
LCBhdHRyLCBleHBlY3RlZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FuZF9jb21wYXJl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHMsIGU6IGdldGF0
dHIocywgYXR0cikuZmluZChlKSA+PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWQpCisKKyAgICBkZWYgX21hdGNoZXMoc2VsZiwgYXR0ciwgZXhwZWN0ZWQp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbmRfY29tcGFyZShsYW1iZGEgcywgZTogZ2V0
YXR0cihzLCBhdHRyKSA9PSBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZCkKKworICAgIGRlZiBjb25maWdfY29udGFpbnMoc2VsZiwgZXhwZWN0ZWQpOgor
ICAgICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGV4cGVj
dGVkIGRhdGEuCisKKyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhw
ZWN0ZWQgZGF0YQorICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0
aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fY29udGFpbnMoJ2NvbmZpZycsIGV4cGVjdGVkKQorCisgICAgZGVmIGNvbmZp
Z19tYXRjaGVzKHNlbGYsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQg
Y29uZmlndXJhdGlvbiBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KKworICAgICAgICBl
eHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCisgICAgICAgIHJl
dHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNl
IG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ2Nv
bmZpZycsIGV4cGVjdGVkKQorCisgICAgZGVmIHN0ZG91dF9jb250YWlucyhzZWxmLCBleHBlY3Rl
ZCk6CisgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZG91dCBjb250YWlucyBleHBlY3Rl
ZCBkYXRhLgorCisgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVj
dGVkIGRhdGEKKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhl
IGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2NvbnRhaW5zKCdzdGRvdXQnLCBleHBlY3RlZCkKKworICAgIGRlZiBzdGRvdXRf
bWF0Y2hlcyhzZWxmLCBleHBlY3RlZCk6CisgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0
ZG91dCBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KKworICAgICAgICBleHBlY3RlZDog
ZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCisgICAgICAgIHJldHVybmNvZGU6
IFRydWUgaWYgcmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lz
ZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ3N0ZG91dCcsIGV4
cGVjdGVkKQorCisgICAgZGVmIHN0ZGVycl9jb250YWlucyhzZWxmLCBleHBlY3RlZCk6CisgICAg
ICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBjb250YWlucyBleHBlY3RlZCBkYXRhLgor
CisgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEK
KyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhlIGV4cGVjdGVk
IGRhdGEsIEZhbHNlIG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2NvbnRhaW5zKCdzdGRlcnInLCBleHBlY3RlZCkKKworICAgIGRlZiBzdGRlcnJfbWF0Y2hlcyhz
ZWxmLCBleHBlY3RlZCk6CisgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBleGFj
dGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KKworICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0
IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCisgICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYg
cmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQorICAgICAg
ICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ3N0ZGVycicsIGV4cGVjdGVkKQor
CisKK0BweXRlc3QuZml4dHVyZShzY29wZT0ibW9kdWxlIikKK2RlZiBjb25mKHJlcXVlc3QpOgor
ICAgICIiIkNyZWF0ZSBhIENvbmYgaW5zdGFuY2UgYW5kIHByb3ZpZGUgaXQgdG8gdGVzdCBmdW5j
dGlvbnMuIiIiCisgICAgcmV0dXJuIENvbmYocmVxdWVzdCkKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lYmRiM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnCkBAIC0wLDAgKzEsNjMg
QEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworIyBkZXBlbmRzIG9uIGl0
c2VsZgorCitjb25maWcgQQorCWJvb2wgIkEiCisJZGVwZW5kcyBvbiBBCisKKyMgc2VsZWN0IGl0
c2VsZgorCitjb25maWcgQgorCWJvb2wKKwlzZWxlY3QgQgorCisjIGRlcGVuZHMgb24gZWFjaCBv
dGhlcgorCitjb25maWcgQzEKKwlib29sICJDMSIKKwlkZXBlbmRzIG9uIEMyCisKK2NvbmZpZyBD
MgorCWJvb2wgIkMyIgorCWRlcGVuZHMgb24gQzEKKworIyBkZXBlbmRzIG9uIGFuZCBzZWxlY3QK
KworY29uZmlnIEQxCisJYm9vbCAiRDEiCisJZGVwZW5kcyBvbiBEMgorCXNlbGVjdCBEMgorCitj
b25maWcgRDIKKwlib29sCisKKyMgZGVwZW5kcyBvbiBhbmQgaW1wbHkKKworY29uZmlnIEUxCisJ
Ym9vbCAiRTEiCisJZGVwZW5kcyBvbiBFMgorCWltcGx5IEUyCisKK2NvbmZpZyBFMgorCWJvb2wg
IkUyIgorCisjIHByb3BlcnR5CisKK2NvbmZpZyBGMQorCWJvb2wgIkYxIgorCWRlZmF1bHQgRjIK
KworY29uZmlnIEYyCisJYm9vbCAiRjIiCisJZGVwZW5kcyBvbiBGMQorCisjIG1lbnUKKworbWVu
dSAibWVudSBkZXBlbmRpbmcgb24gaXRzIGNvbnRlbnQiCisJZGVwZW5kcyBvbiBHCisKK2NvbmZp
ZyBHCisJYm9vbCAiRyIKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNWYzODIxYgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKQEAgLTAsMCArMSwx
MCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitEZXRlY3QgcmVj
dXJzaXZlIGRlcGVuZGVuY3kgZXJyb3IuCisKK1JlY3Vyc2l2ZSBkZXBlbmRlbmN5IHNob3VsZCBi
ZSB0cmVhdGVkIGFzIGFuIGVycm9yLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2Vy
dCBjb25mLm9sZGFza2NvbmZpZygpID09IDEKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFp
bnMoJ2V4cGVjdGVkX3N0ZGVycicpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Njc5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycgpAQCAt
MCwwICsxLDM4IEBACitLY29uZmlnOjExOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRl
Y3RlZCEKK0tjb25maWc6MTE6CXN5bWJvbCBCIGlzIHNlbGVjdGVkIGJ5IEIKK0ZvciBhIHJlc29s
dXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQK
K3N1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiCisK
K0tjb25maWc6NTplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmln
OjU6CXN5bWJvbCBBIGRlcGVuZHMgb24gQQorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1
bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZp
ZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZpZzoxNzplcnJvcjog
cmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmlnOjE3OglzeW1ib2wgQzEgZGVw
ZW5kcyBvbiBDMgorS2NvbmZpZzoyMToJc3ltYm9sIEMyIGRlcGVuZHMgb24gQzEKK0ZvciBhIHJl
c29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50
eHQKK3N1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMi
CisKK0tjb25maWc6MzI6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQorS2Nv
bmZpZzozMjoJc3ltYm9sIEQyIGlzIHNlbGVjdGVkIGJ5IEQxCitLY29uZmlnOjI3OglzeW1ib2wg
RDEgZGVwZW5kcyBvbiBEMgorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9u
L2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNp
dmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZpZzozNzplcnJvcjogcmVjdXJzaXZl
IGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmlnOjM3OglzeW1ib2wgRTEgZGVwZW5kcyBvbiBF
MgorS2NvbmZpZzo0MjoJc3ltYm9sIEUyIGlzIGltcGxpZWQgYnkgRTEKK0ZvciBhIHJlc29sdXRp
b24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQKK3N1
YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiCisKK0tj
b25maWc6NjA6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQorS2NvbmZpZzo2
MDoJc3ltYm9sIEcgZGVwZW5kcyBvbiBHCitGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3Vt
ZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CitzdWJzZWN0aW9uICJLY29uZmln
IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIgorCitLY29uZmlnOjUxOmVycm9yOiBy
ZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCEKK0tjb25maWc6NTE6CXN5bWJvbCBGMiBkZXBl
bmRzIG9uIEYxCitLY29uZmlnOjQ5OglzeW1ib2wgRjEgZGVmYXVsdCB2YWx1ZSBjb250YWlucyBG
MgorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmln
LWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBs
aW1pdGF0aW9ucyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmY0
YWRlCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVj
dXJzaXZlX2luYy9LY29uZmlnCkBAIC0wLDAgKzEsMiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMC1vbmx5Citzb3VyY2UgIktjb25maWcuaW5jMSIKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzEK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjYmYwZAotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
Zy5pbmMxCkBAIC0wLDAgKzEsNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu
MC1vbmx5CisKKworCitzb3VyY2UgIktjb25maWcuaW5jMiIKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNTEwNwotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMy
CkBAIC0wLDAgKzEsNCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5
CisKKworc291cmNlICJLY29uZmlnLmluYzMiCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZjRhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMwpAQCAtMCww
ICsxLDIgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorc291cmNl
ICJLY29uZmlnLmluYzEiCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9l
cnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yN2FhMTg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDExIEBACisjIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0RldGVjdCByZWN1cnNpdmUgaW5j
bHVzaW9uIGVycm9yLgorCitJZiByZWN1cnNpdmUgaW5jbHVzaW9uIGlzIGRldGVjdGVkLCBpdCBz
aG91bGQgZmFpbCB3aXRoIGVycm9yIG1lc3NhZ2VzLgorIiIiCisKKworZGVmIHRlc3QoY29uZik6
CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgIT0gMAorICAgIGFzc2VydCBjb25mLnN0
ZGVycl9jb250YWlucygnZXhwZWN0ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnIKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3MGEzMQotLS0gL2Rldi9udWxsCisr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRf
c3RkZXJyCkBAIC0wLDAgKzEsNiBAQAorUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC4KK0lu
Y2x1c2lvbiBwYXRoOgorICBjdXJyZW50IGZpbGUgOiBLY29uZmlnLmluYzEKKyAgaW5jbHVkZWQg
ZnJvbTogS2NvbmZpZy5pbmMzOjIKKyAgaW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMyOjQKKyAg
aW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMxOjUKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2ludGVyX2Nob2ljZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjU2OThhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2ludGVyX2Nob2ljZS9LY29uZmlnCkBAIC0wLDAgKzEsMjUgQEAKKyMgU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKworY29uZmlnIE1PRFVMRVMKKwlkZWZfYm9vbCB5CisJb3B0aW9u
IG1vZHVsZXMKKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UiCisKK2NvbmZpZyBDSE9JQ0VfVkFM
MAorCXRyaXN0YXRlICJDaG9pY2UgMCIKKworY29uZmlnIENIT0lWRV9WQUwxCisJdHJpc3RhdGUg
IkNob2ljZSAxIgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJBbm90aGVyIGNob2lj
ZSIKKwlkZXBlbmRzIG9uIENIT0lDRV9WQUwwCisKK2NvbmZpZyBEVU1NWQorCWJvb2wgImR1bW15
IgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50
ZXJfY2hvaWNlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9j
aG9pY2UvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZl
YTZiMQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJf
Y2hvaWNlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjAKKyIiIgorRG8gbm90IGFmZmVjdCB1c2VyLWFzc2lnbmVkIGNob2ljZSB2
YWx1ZSBieSBhbm90aGVyIGNob2ljZS4KKworSGFuZGxpbmcgb2Ygc3RhdGUgZmxhZ3MgZm9yIGNo
b2ljZXMgaXMgY29tcGxlY2F0ZWQuICBJbiBvbGQgZGF5cywKK3RoZSBkZWZjb25maWcgcmVzdWx0
IG9mIGEgY2hvaWNlIGNvdWxkIGJlIGFmZmVjdGVkIGJ5IGFub3RoZXIgY2hvaWNlCitpZiB0aG9z
ZSBjaG9pY2VzIGludGVyYWN0IGJ5ICdkZXBlbmRzIG9uJywgJ3NlbGVjdCcsIGV0Yy4KKworUmVs
YXRlZCBMaW51eCBjb21taXQ6IGZiZTk4YmI5ZWQzZGFlMjNlMzIwYzZiMTEzZTM1ZjEyOTUzOGQx
NGEKKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLmRlZmNvbmZpZygn
ZGVmY29uZmlnJykgPT0gMAorICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0
ZWRfY29uZmlnJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJf
Y2hvaWNlL2RlZmNvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNl
L2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJjNDE0Ci0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2Uv
ZGVmY29uZmlnCkBAIC0wLDAgKzEgQEAKK0NPTkZJR19DSE9JQ0VfVkFMMD15CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjZWVmYgotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2Nv
bmZpZwpAQCAtMCwwICsxLDQgQEAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19DSE9JQ0VfVkFM
MD15CisjIENPTkZJR19DSE9JVkVfVkFMMSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9eQpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tj
b25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2Nv
bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjc3MzFjCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVw
L0tjb25maWcKQEAgLTAsMCArMSwzOSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMAorCitjb25maWcgQQorCWJvb2wgIkEiCisJaGVscAorCSAgVGhpcyBpcyBhIG5ldyBzeW1i
b2wuCisKK2Nob2ljZQorCXByb21wdCAiQ2hvaWNlID8iCisJZGVwZW5kcyBvbiBBCisJaGVscAor
CSAgImRlcGVuZHMgb24gQSIgaGFzIGJlZW4gbmV3bHkgYWRkZWQuCisKK2NvbmZpZyBDSE9JQ0Vf
QgorCWJvb2wgIkNob2ljZSBCIgorCitjb25maWcgQ0hPSUNFX0MKKwlib29sICJDaG9pY2UgQyIK
KwloZWxwCisJICBUaGlzIGlzIGEgbmV3IHN5bWJvbCwgc28gc2hvdWxkIGJlIGFza2VkLgorCitl
bmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UyID8iCisKK2NvbmZpZyBDSE9JQ0Vf
RAorCWJvb2wgIkNob2ljZSBEIgorCitjb25maWcgQ0hPSUNFX0UKKwlib29sICJDaG9pY2UgRSIK
KworY29uZmlnIENIT0lDRV9GCisJYm9vbCAiQ2hvaWNlIEYiCisJZGVwZW5kcyBvbiBBCisJaGVs
cAorCSAgVGhpcyBpcyBhIG5ldyBzeW1ib2wsIHNvIHNob3VsZCBiZSBhc2tlZC4KKworZW5kY2hv
aWNlCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0
aF9kZXAvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZmU5ZDMyMgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3
X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE1IEBACisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0FzayBuZXcgY2hvaWNlIHZhbHVlcyB3aGVu
IHRoZXkgYmVjb21lIHZpc2libGUuCisKK0lmIG5ldyBjaG9pY2UgdmFsdWVzIGFyZSBhZGRlZCB3
aXRoIG5ldyBkZXBlbmRlbmN5LCBhbmQgdGhleSBiZWNvbWUKK3Zpc2libGUgZHVyaW5nIHVzZXIg
Y29uZmlndXJhdGlvbiwgb2xkY29uZmlnIHNob3VsZCByZWNvZ25pemUgdGhlbQorYXMgKE5FVyks
IGFuZCBhc2sgdGhlIHVzZXIgZm9yIGNob2ljZS4KKworUmVsYXRlZCBMaW51eCBjb21taXQ6IDVk
MDk1OThkNDg4ZjA4MWUzYmUyM2Y4ODVlZDY1Y2JiZTJkMDczYjUKKyIiIgorCisKK2RlZiB0ZXN0
KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGNvbmZpZygnY29uZmlnJywgJ3knKSA9PSAwCisg
ICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQnKQpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZp
ZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZjk1ZAotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25m
aWcKQEAgLTAsMCArMSwzIEBACitDT05GSUdfQ0hPSUNFX0I9eQorIyBDT05GSUdfQ0hPSUNFX0Qg
aXMgbm90IHNldAorQ09ORklHX0NIT0lDRV9FPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZGMwYmMKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0
ZWRfc3Rkb3V0CkBAIC0wLDAgKzEsMTAgQEAKK0EgKEEpIFtOL3kvP10gKE5FVykgeQorICBDaG9p
Y2UgPworICA+IDEuIENob2ljZSBCIChDSE9JQ0VfQikKKyAgICAyLiBDaG9pY2UgQyAoQ0hPSUNF
X0MpIChORVcpCisgIGNob2ljZVsxLTI/XTogCitDaG9pY2UyID8KKyAgMS4gQ2hvaWNlIEQgKENI
T0lDRV9EKQorPiAyLiBDaG9pY2UgRSAoQ0hPSUNFX0UpCisgIDMuIENob2ljZSBGIChDSE9JQ0Vf
RikgKE5FVykKK2Nob2ljZVsxLTM/XTogCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40NzY3YWFiCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwpAQCAtMCwwICsxLDE2
IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK2NvbmZpZyBBCisJYm9v
bCAiQSIKKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UgPyIKKwlkZXBlbmRzIG9uIEEKKworY29u
ZmlnIENIT0lDRV9CCisJYm9vbCAiQ2hvaWNlIEIiCisKK2NvbmZpZyBDSE9JQ0VfQworCWJvb2wg
IkNob2ljZSBDIgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkNDY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5CkBA
IC0wLDAgKzEsMjAgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgor
RG8gbm90IHdyaXRlIGNob2ljZSB2YWx1ZXMgdG8gLmNvbmZpZyBpZiB0aGUgZGVwZW5kZW5jeSBp
cyB1bm1ldC4KKworIiMgQ09ORklHXy4uLiBpcyBub3Qgc2V0IiBzaG91bGQgbm90IGJlIHdyaXR0
ZW4gaW50byB0aGUgLmNvbmZpZyBmaWxlCitmb3Igc3ltYm9scyB3aXRoIHVubWV0IGRlcGVuZGVu
Y3kuCisKK1RoaXMgd2FzIG5vdCB3b3JraW5nIGNvcnJlY3RseSBmb3IgY2hvaWNlIHZhbHVlcyBi
ZWNhdXNlIGNob2ljZSBuZWVkcworYSBiaXQgZGlmZmVyZW50IHN5bWJvbCBjb21wdXRhdGlvbi4K
KworVGhpcyBjaGVja3MgdGhhdCBubyB1bm5lZWRlZCAiIyBDT0ZJR18uLi4gaXMgbm90IHNldCIg
aXMgY29udGFpbmVkIGluCit0aGUgLmNvbmZpZyBmaWxlLgorCitSZWxhdGVkIExpbnV4IGNvbW1p
dDogY2I2N2FiMmNkMmI4YWJkOTY1MDI5MmM5ODZjNzk5MDFlMzA3M2E1OQorIiIiCisKKworZGVm
IHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCdjb25maWcnLCAnbicp
ID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25maWdfbWF0Y2hlcygnZXhwZWN0ZWRfY29uZmlnJykK
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3Vu
bWV0L2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3Vu
bWV0L2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQyODBlCi0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvY29uZmlnCkBAIC0wLDAgKzEgQEAKK0NPTkZJR19BPXkKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2Nv
bmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4
cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMyMjg4
Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9p
Zl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorIworIyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJVC4KKyMgTWFpbiBtZW51CisjCisjIENP
TkZJR19BIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iYWEzMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnCkBAIC0wLDAgKzEsMjcg
QEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworIyAnaW5mbycgcHJpbnRz
IHRoZSBhcmd1bWVudCB0byBzdGRvdXQuCiskKGluZm8saGVsbG8gd29ybGQgMCkKKworIyAnd2Fy
bmluZy1pZicsIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB5LCBzZW5kcyB0aGUgc2Vjb25kIGFy
Z3VtZW50IHRvIHN0ZGVyciwKKyMgYW5kIHRoZSBtZXNzYWdlIGlzIHByZWZpeGVkIHdpdGggdGhl
IGN1cnJlbnQgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci4KKyQod2FybmluZy1pZix5LGhlbGxv
IHdvcmxkIDEpCisKKyMgJ2Vycm9yLWlmJyBpcyBzaW1pbGFyLCBidXQgaXQgdGVybWluYXRlcyB0
aGUgcGFyc2luZyBpbW1lZGlhdGVseS4KKyMgVGhlIGZvbGxvd2luZyBpcyBqdXN0IG5vLW9wIHNp
bmNlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgeS4KKyQoZXJyb3ItaWYsbix0aGlzIHNob3Vs
ZCBub3QgYmUgcHJpbnRlZCkKKworIyBTaG9ydGhhbmQKK3dhcm5pbmcgPSAkKHdhcm5pbmctaWYs
eSwkKDEpKQorCisjICdzaGVsbCcgZXhlY3V0ZXMgYSBjb21tYW5kLCBhbmQgcmV0dXJucyBpdHMg
c3Rkb3V0LgorJCh3YXJuaW5nLCQoc2hlbGwsZWNobyBoZWxsbyB3b3JsZCAzKSkKKworIyBFdmVy
eSBuZXdsaW5lIGluIHRoZSBvdXRwdXQgaXMgcmVwbGFjZWQgd2l0aCBhIHNwYWNlLAorIyBidXQg
YW55IHRyYWlsaW5nIG5ld2xpbmVzIGFyZSBkZWxldGVkLgorJCh3YXJuaW5nLCQoc2hlbGwscHJp
bnRmICdoZWxsb1xud29ybGRcblxuNFxuXG5cbicpKQorCisjICdmaWxlbmFtZScgaXMgZXhwYW5k
ZWQgdG8gdGhlIGN1cnJlbnRseSBwYXJzZWQgZmlsZSBuYW1lLAorIyAnbGluZW5vJyB0byB0aGUg
bGluZSBudW1iZXIuCiskKHdhcm5pbmcsZmlsZW5hbWU9JChmaWxlbmFtZSkpCiskKHdhcm5pbmcs
bGluZW5vPSQobGluZW5vKSkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTNiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5CkBA
IC0wLDAgKzEsOSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitC
dWlsdC1pbiBmdW5jdGlvbiB0ZXN0cy4KKyIiIgorCitkZWYgdGVzdChjb25mKToKKyAgICBhc3Nl
cnQgY29uZi5vbGRhc2tjb25maWcoKSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRh
aW5zKCdleHBlY3RlZF9zdGRvdXQnKQorICAgIGFzc2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdl
eHBlY3RlZF9zdGRlcnInKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9w
cmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VhOWNhCi0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3Rl
ZF9zdGRlcnIKQEAgLTAsMCArMSw1IEBACitLY29uZmlnOjg6IGhlbGxvIHdvcmxkIDEKK0tjb25m
aWc6MTg6IGhlbGxvIHdvcmxkIDMKK0tjb25maWc6MjI6IGhlbGxvIHdvcmxkICA0CitLY29uZmln
OjI2OiBmaWxlbmFtZT1LY29uZmlnCitLY29uZmlnOjI3OiBsaW5lbm89MjcKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0
ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5f
ZnVuYy9leHBlY3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODJkZTNhNwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0CkBAIC0wLDAgKzEgQEAKK2hlbGxv
IHdvcmxkIDAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vz
cy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42ODM4OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnCkBAIC0w
LDAgKzEsNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitYID0gJChZ
KQorWSA9ICQoWCkKKyQoaW5mbyAkKFgpKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weSBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0
X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5YmRhMwotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxh
cl9leHBhbnNpb24vX19pbml0X18ucHkKQEAgLTAsMCArMSwxMSBAQAorIyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitEZXRlY3QgY2lyY3VsYXIgdmFyaWFibGUgZXhwYW5z
aW9uLgorCitJZiBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlIHJlZmVyZW5jZXMgaXRz
ZWxmIChldmVudHVhbGx5KSwKK2l0IHNob3VsZCBmYWlsIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4K
KyIiIgorCitkZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSAh
PSAwCisgICAgYXNzZXJ0IGNvbmYuc3RkZXJyX21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJf
ZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZTY4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVk
X3N0ZGVycgpAQCAtMCwwICsxIEBACitLY29uZmlnOjU6IFJlY3Vyc2l2ZSB2YXJpYWJsZSAnWCcg
cmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGUzZjQ0NAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZwpAQCAtMCwwICsxLDQ0IEBACisj
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgU2hvcnRoYW5kCit3YXJuaW5n
ID0gJCh3YXJuaW5nLWlmLHksJCgxKSkKKworIyBZb3UgY2FuIG5vdCBwYXNzIGNvbW1hcyBkaXJl
Y3RseSB0byBhIGZ1bmN0aW9uIHNpbmNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMKKyMgZGVsaW1pdGVy
cy4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0cmljayB0byBkbyBzby4KK2NvbW1hICAgOj0g
LAorJCh3YXJuaW5nLGhlbGxvJChjb21tYSkgd29ybGQpCisKKyMgTGlrZSBNYWtlLCBzaW5nbGUg
cXVvdGVzLCBkb3VibGUgcXVvdGVzLCBzcGFjZXMgYXJlIHRyZWF0ZWQgdmVyYmF0aW0uCisjIFRo
ZSBmb2xsb3dpbmcgcHJpbnRzIHRoZSB0ZXh0IGFzLWlzLgorJCh3YXJuaW5nLCAgJyAiICciICAg
JyAnJycgIiciKQorCisjIFVubGlrZSBNYWtlLCAnJCcgaGFzIHNwZWNpYWwgbWVhbmluZyBvbmx5
IHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgJygnLgorIyBObyBuZWVkIHRvIGVzY2FwZSAnJCcgaXRz
ZWxmLgorJCh3YXJuaW5nLCQpCiskKHdhcm5pbmcsJCQpCiskIDo9IDEKKyQod2FybmluZywkKCQp
KQorCisjIFlvdSBuZWVkIGEgdHJpY2sgdG8gZXNjYXBlICckJyBmb2xsb3dlZCBieSAnKCcKKyMg
VGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiLiBJdCBzaG91bGQgbm90IGJlIGV4cGFu
ZGVkIGZ1cnRoZXIuCitkb2xsYXIgOj0gJAorJCh3YXJuaW5nLCQoZG9sbGFyKShYKSkKKworIyBZ
b3UgbmVlZCBhIHRyaWNrIHRvIHRyZWF0IHVuYmFsYW5jZWQgcGFyZW50aGVzZXMuCisjIFRoZSBm
b2xsb3dpbmcgc2hvdWxkIHByaW50ICIoIi4KK2xlZnRfcGFyZW4gOj0gKAorJCh3YXJuaW5nLCQo
bGVmdF9wYXJlbikpCisKKyMgQSBzaW1wbGUgZXhwYW5kZWQgc2hvdWxkIG5vdCBiZSBleHBhbmRl
ZCBtdWx0aXBsZSB0aW1lcy4KKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiLiBJ
dCBzaG91bGQgbm90IGJlIGV4cGFuZGVkIGZ1cnRoZXIuCitZIDo9ICQoZG9sbGFyKShYKQorJCh3
YXJuaW5nLCQoWSkpCisKKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiIGFzIHdl
bGwuCitZID0gJChkb2xsYXIpKFgpCiskKHdhcm5pbmcsJChZKSkKKworIyBUaGUgZm9sbG93aW5n
IHNob3VsZCBwcmludCAiJCgiLgorIyBJdCBzaG91bGQgbm90IGJlIGVtaXQgInVudGVybWluYXRl
ZCByZWZlcmVuY2UiIGVycm9yLgordW50ZXJtaW5hdGVkIDo9ICQoZG9sbGFyKSgKKyQod2Fybmlu
ZywkKHVudGVybWluYXRlZCkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43ZWU4ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDggQEAKKyMg
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgorRXNjYXBlIHNlcXVlbmNlIHRl
c3RzLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZp
ZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRfc3RkZXJy
JykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2Nh
cGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNz
L2VzY2FwZS9leHBlY3RlZF9zdGRlcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWMwMDk1NwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3RkZXJyCkBAIC0wLDAgKzEsMTAgQEAKK0tjb25m
aWc6OTogaGVsbG8sIHdvcmxkCitLY29uZmlnOjEzOiAgICcgIiAnIiAgICcgJycnICInIgorS2Nv
bmZpZzoxNzogJAorS2NvbmZpZzoxODogJCQKK0tjb25maWc6MjA6IDEKK0tjb25maWc6MjU6ICQo
WCkKK0tjb25maWc6MzA6ICgKK0tjb25maWc6MzU6ICQoWCkKK0tjb25maWc6Mzk6ICQoWCkKK0tj
b25maWc6NDQ6ICQoCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJv
Y2Vzcy92YXJpYWJsZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjljZTJmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3By
ZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZwpAQCAtMCwwICsxLDUzIEBACisjIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgU2hvcnRoYW5kCit3YXJuaW5nID0gJCh3YXJuaW5n
LWlmLHksJCgxKSkKKworIyBTaW1wbHkgZXhwYW5kZWQgdmFyaWFibGUuCitYIDo9IDEKK1NJTVBM
RSA6PSAkKFgpCitYIDo9IDIKKyQod2FybmluZyxTSU1QTEUgPSAkKFNJTVBMRSkpCisKKyMgUmVj
dXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUuCitYIDo9IDEKK1JFQ1VSU0lWRSA9ICQoWCkKK1gg
Oj0gMgorJCh3YXJuaW5nLFJFQ1VSU0lWRSA9ICQoUkVDVVJTSVZFKSkKKworIyBBcHBlbmQgc29t
ZXRoaW5nIHRvIGEgc2ltcGx5IGV4cGFuZGVkIHZhcmlhYmxlLgorWSA6PSAzCitTSU1QTEUgKz0g
JChZKQorWSA6PSA0CiskKHdhcm5pbmcsU0lNUExFID0gJChTSU1QTEUpKQorCisjIEFwcGVuZCBz
b21ldGhpbmcgdG8gYSByZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJsZS4KK1kgOj0gMworUkVD
VVJTSVZFICs9ICQoWSkKK1kgOj0gNAorJCh3YXJuaW5nLFJFQ1VSU0lWRSA9ICQoUkVDVVJTSVZF
KSkKKworIyBVc2UgKz0gb3BlcmF0b3IgdG8gYW4gdW5kZWZpbmVkIHZhcmlhYmxlLgorIyBUaGlz
IHdvcmtzIGFzIGEgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUuCitZIDo9IDMKK1VOREVG
SU5FRF9WQVJJQUJMRSArPSAkKFkpCitZIDo9IDQKKyQod2FybmluZyxVTkRFRklORURfVkFSSUFC
TEUgPSAkKFVOREVGSU5FRF9WQVJJQUJMRSkpCisKKyMgWW91IGNhbiB1c2UgdmFyaWFibGUgcmVm
ZXJlbmNlcyBmb3IgdGhlIGxlZnRoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQuCitY
IDo9IEEKK1kgOj0gQgorJChYKSQoWSkgOj0gNQorJCh3YXJuaW5nLEFCID0gJChBQikpCisKKyMg
VXNlci1kZWZpbmVkIGZ1bmN0aW9uLgorZ3JlZXRpbmcgPSAkKDEpLCBteSBuYW1lIGlzICQoMiku
CiskKHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2huKSkKKworIyBUaGUgbnVtYmVyIG9mIGFy
Z3VtZW50cyBpcyBub3QgY2hlY2tlZCBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4KKyMgSWYg
c29tZSBhcmd1bWVudHMgYXJlIG9wdGlvbmFsLCBpdCBpcyB1c2VmdWwgdG8gcGFzcyBmZXdlciBw
YXJhbWV0ZXJzLgorIyAkKDIpIHdpbGwgYmUgYmxhbmsgaW4gdGhpcyBjYXNlLgorJCh3YXJuaW5n
LCQoZ3JlZXRpbmcsSGVsbG8pKQorCisjIFVucmVmZXJlbmNlZCBwYXJhbWV0ZXJzIGFyZSBqdXN0
IGlnbm9yZWQuCiskKHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2huLGlnbm9yZWQsaWdub3Jl
ZCkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFy
aWFibGUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3Mv
dmFyaWFibGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTg4YjE3MAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDggQEAKKyMgU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgorVmFyaWFibGUgYW5kIHVzZXItZGVmaW5lZCBm
dW5jdGlvbiB0ZXN0cy4KKyIiIgorCitkZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5v
bGRhc2tjb25maWcoKSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuc3RkZXJyX21hdGNoZXMoJ2V4cGVj
dGVkX3N0ZGVycicpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hNDg0MWMzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgpAQCAtMCww
ICsxLDkgQEAKK0tjb25maWc6MTA6IFNJTVBMRSA9IDEKK0tjb25maWc6MTY6IFJFQ1VSU0lWRSA9
IDIKK0tjb25maWc6MjI6IFNJTVBMRSA9IDEgMworS2NvbmZpZzoyODogUkVDVVJTSVZFID0gMiA0
CitLY29uZmlnOjM1OiBVTkRFRklORURfVkFSSUFCTEUgPSA0CitLY29uZmlnOjQxOiBBQiA9IDUK
K0tjb25maWc6NDU6IEhlbGxvLCBteSBuYW1lIGlzIEpvaG4uCitLY29uZmlnOjUwOiBIZWxsbywg
bXkgbmFtZSBpcyAuCitLY29uZmlnOjUzOiBIZWxsbywgbXkgbmFtZSBpcyBKb2huLgpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjg1ZDdjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3B5dGVzdC5pbmkKQEAgLTAsMCArMSw3IEBACitbcHl0ZXN0XQorYWRkb3B0cyA9IC0tdmVyYm9z
ZQorCisjIFB5dGVzdCByZXF1aXJlcyB0aGF0IHRlc3QgZmlsZXMgaGF2ZSB1bmlxdWUgbmFtZXMs
IGJlY2F1c2UgcHl0ZXN0IGltcG9ydHMKKyMgdGhlbSBhcyB0b3AtbGV2ZWwgbW9kdWxlcy4gIEl0
IGlzIHNpbGx5IHRvIHByZWZpeCBvciBzdWZmaXggYSB0ZXN0IGZpbGUgd2l0aAorIyB0aGUgZGly
ZWN0b3J5IG5hbWUgdGhhdCBjb250YWlucyBpdC4gIFVzZSBfX2luaXRfXy5weSBmb3IgYWxsIHRl
c3QgZmlsZXMuCitweXRob25fZmlsZXMgPSBfX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1MGRlNwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcKQEAgLTAsMCAr
MSwzNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitjaG9pY2UKKwlw
cm9tcHQgImNob2ljZSIKKworY29uZmlnIEEKKwlib29sICJBIgorCitjb25maWcgQgorCWJvb2wg
IkIiCisKK2lmIEIKK2Nob2ljZQorCXByb21wdCAic3ViIGNob2ljZSIKKworY29uZmlnIEMKKwli
b29sICJDIgorCitjb25maWcgRAorCWJvb2wgIkQiCisKK2lmIEQKK2Nob2ljZQorCXByb21wdCAi
c3Vic3ViIGNob2ljZSIKKworY29uZmlnIEUKKwlib29sICJFIgorCitlbmRjaG9pY2UKK2VuZGlm
ICMgRAorCitlbmRjaG9pY2UKK2VuZGlmICMgQgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5IGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0YjJkYgotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5p
dF9fLnB5CkBAIC0wLDAgKzEsMTcgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjAKKyIiIgorU2V0IHJhbmRvbSB2YWx1ZXMgcmVjdXJzaXZlbHkgaW4gbmVzdGVkIGNob2ljZXMu
CisKK0tjb25maWcgY2FuIGNyZWF0ZSBhIGNob2ljZS1pbi1jaG9pY2Ugc3RydWN0dXJlIGJ5IHVz
aW5nICdpZicgc3RhdGVtZW50LgorcmFuZGNvbmZpZyBzaG91bGQgY29ycmVjdGx5IHNldCByYW5k
b20gY2hvaWNlIHZhbHVlcy4KKworUmVsYXRlZCBMaW51eCBjb21taXQ6IDNiOWExOWUwODk2MGU1
Y2RhZDUyNTM5OTg2Mzc2NTNlNTkyYTNjMjkKKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAg
IGZvciBpIGluIHJhbmdlKDIwKToKKyAgICAgICAgYXNzZXJ0IGNvbmYucmFuZGNvbmZpZygpID09
IDAKKyAgICAgICAgYXNzZXJ0IChjb25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0
MCcpIG9yCisgICAgICAgICAgICAgICAgY29uZi5jb25maWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0
ZG91dDEnKSBvcgorICAgICAgICAgICAgICAgIGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3Rl
ZF9zdGRvdXQyJykpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRf
bmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wNTQ1MGYzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MApAQCAtMCww
ICsxLDIgQEAKK0NPTkZJR19BPXkKKyMgQ09ORklHX0IgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVj
dGVkX3N0ZG91dDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhYjI5NQot
LS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRf
Y2hvaWNlL2V4cGVjdGVkX3N0ZG91dDEKQEAgLTAsMCArMSw0IEBACisjIENPTkZJR19BIGlzIG5v
dCBzZXQKK0NPTkZJR19CPXkKK0NPTkZJR19DPXkKKyMgQ09ORklHX0QgaXMgbm90IHNldApkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhw
ZWN0ZWRfc3Rkb3V0MiBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hv
aWNlL2V4cGVjdGVkX3N0ZG91dDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODQ5ZmY0NwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFu
ZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIKQEAgLTAsMCArMSw1IEBACisjIENPTkZJ
R19BIGlzIG5vdCBzZXQKK0NPTkZJR19CPXkKKyMgQ09ORklHX0MgaXMgbm90IHNldAorQ09ORklH
X0Q9eQorQ09ORklHX0U9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yOTU4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy91
dGlsLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgUm9tYW4gWmlwcGVsIDx6aXBwZWxA
bGludXgtbTY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBTYW0gUmF2bmJvcmcg
PHNhbUByYXZuYm9yZy5vcmc+CisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxrYy5oIgorCisvKiBm
aWxlIGFscmVhZHkgcHJlc2VudCBpbiBsaXN0PyBJZiBub3QgYWRkIGl0ICovCitzdHJ1Y3QgZmls
ZSAqZmlsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsK
KworCWZvciAoZmlsZSA9IGZpbGVfbGlzdDsgZmlsZTsgZmlsZSA9IGZpbGUtPm5leHQpIHsKKwkJ
aWYgKCFzdHJjbXAobmFtZSwgZmlsZS0+bmFtZSkpIHsKKwkJCXJldHVybiBmaWxlOworCQl9CisJ
fQorCisJZmlsZSA9IHhtYWxsb2Moc2l6ZW9mKCpmaWxlKSk7CisJbWVtc2V0KGZpbGUsIDAsIHNp
emVvZigqZmlsZSkpOworCWZpbGUtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWZpbGUtPm5leHQg
PSBmaWxlX2xpc3Q7CisJZmlsZV9saXN0ID0gZmlsZTsKKwlyZXR1cm4gZmlsZTsKK30KKworLyog
QWxsb2NhdGUgaW5pdGlhbCBncm93YWJsZSBzdHJpbmcgKi8KK3N0cnVjdCBnc3RyIHN0cl9uZXco
dm9pZCkKK3sKKwlzdHJ1Y3QgZ3N0ciBnczsKKwlncy5zID0geG1hbGxvYyhzaXplb2YoY2hhcikg
KiA2NCk7CisJZ3MubGVuID0gNjQ7CisJZ3MubWF4X3dpZHRoID0gMDsKKwlzdHJjcHkoZ3Mucywg
IlwwIik7CisJcmV0dXJuIGdzOworfQorCisvKiBGcmVlIHN0b3JhZ2UgZm9yIGdyb3dhYmxlIHN0
cmluZyAqLwordm9pZCBzdHJfZnJlZShzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJaWYgKGdzLT5zKQor
CQlmcmVlKGdzLT5zKTsKKwlncy0+cyA9IE5VTEw7CisJZ3MtPmxlbiA9IDA7Cit9CisKKy8qIEFw
cGVuZCB0byBncm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX2FwcGVuZChzdHJ1Y3QgZ3N0ciAq
Z3MsIGNvbnN0IGNoYXIgKnMpCit7CisJc2l6ZV90IGw7CisJaWYgKHMpIHsKKwkJbCA9IHN0cmxl
bihncy0+cykgKyBzdHJsZW4ocykgKyAxOworCQlpZiAobCA+IGdzLT5sZW4pIHsKKwkJCWdzLT5z
ID0geHJlYWxsb2MoZ3MtPnMsIGwpOworCQkJZ3MtPmxlbiA9IGw7CisJCX0KKwkJc3RyY2F0KGdz
LT5zLCBzKTsKKwl9Cit9CisKKy8qIEFwcGVuZCBwcmludGYgZm9ybWF0dGVkIHN0cmluZyB0byBn
cm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0
IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciBzWzEwMDAwXTsgLyogYmln
IGVub3VnaC4uLiAqLworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihzLCBzaXplb2Yo
cyksIGZtdCwgYXApOworCXN0cl9hcHBlbmQoZ3MsIHMpOworCXZhX2VuZChhcCk7Cit9CisKKy8q
IFJldHJpZXZlIHZhbHVlIG9mIGdyb3dhYmxlIHN0cmluZyAqLworY29uc3QgY2hhciAqc3RyX2dl
dChzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJcmV0dXJuIGdzLT5zOworfQorCit2b2lkICp4bWFsbG9j
KHNpemVfdCBzaXplKQoreworCXZvaWQgKnAgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKHApCisJCXJl
dHVybiBwOworCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOworCWV4aXQoMSk7
Cit9CisKK3ZvaWQgKnhjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkKK3sKKwl2b2lk
ICpwID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKKwlpZiAocCkKKwkJcmV0dXJuIHA7CisJZnByaW50
ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisJZXhpdCgxKTsKK30KKwordm9pZCAqeHJl
YWxsb2Modm9pZCAqcCwgc2l6ZV90IHNpemUpCit7CisJcCA9IHJlYWxsb2MocCwgc2l6ZSk7CisJ
aWYgKHApCisJCXJldHVybiBwOworCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIp
OworCWV4aXQoMSk7Cit9CisKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwljaGFy
ICpwOworCisJcCA9IHN0cmR1cChzKTsKKwlpZiAocCkKKwkJcmV0dXJuIHA7CisJZnByaW50Zihz
dGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisJZXhpdCgxKTsKK30KKworY2hhciAqeHN0cm5k
dXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pCit7CisJY2hhciAqcDsKKworCXAgPSBzdHJuZHVw
KHMsIG4pOworCWlmIChwKQorCQlyZXR1cm4gcDsKKwlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBt
ZW1vcnkuXG4iKTsKKwlleGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy96Y29uZi5sZXguYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYubGV4LmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1ODc3NgotLS0gL2Rldi9udWxsCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvemNvbmYubGV4LmMKQEAgLTAsMCArMSwyODIwIEBACisKKyNkZWZp
bmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5l
cmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVY
X01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNgorI2RlZmlu
ZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lP
TiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0
aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisv
KiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
CisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBk
ZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKwor
LyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3Ig
bWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19W
RVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlU
X01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxp
bWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERD
X0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisj
aW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRl
ZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0
eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQz
Ml90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2ln
bmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0
eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50
OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlw
ZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAg
KC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAg
ICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJ
TlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElO
VDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lm
bmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisj
ZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAg
KDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01B
WCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmlu
ZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMy
X01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRp
ZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8q
IFRPRE86IHRoaXMgaXMgYWx3YXlzIGRlZmluZWQsIHNvIGlubGluZSBpdCAqLworI2RlZmluZSB5
eWNvbnN0IGNvbnN0CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisj
ZGVmaW5lIHl5bm9yZXR1cm4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNlbHNlCisj
ZGVmaW5lIHl5bm9yZXR1cm4KKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxl
LiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2
ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIgZm9yIHVz
ZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKKyAq
IHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBo
ZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgo
dW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogRW50ZXIgYSBzdGFydCBjb25k
aXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICog
YnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRo
ZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOICh5
eV9zdGFydCkgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0
ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byBy
ZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29t
cGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKCh5eV9zdGFydCkgLSAxKSAvIDIp
CisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1
bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRl
KSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVh
bmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJ
TEUgeXlyZXN0YXJ0KHl5aW4gICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAor
CisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0la
RQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywg
bm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBp
biB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29y
ZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQorI2RlZmluZSBZ
WV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworLyogVGhl
IHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hh
cmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0la
RSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRl
ZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZF
Ul9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7
CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBF
REVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKK2V4dGVy
biBpbnQgeXlsZW5nOworCitleHRlcm4gRklMRSAqeXlpbiwgKnl5b3V0OworCisjZGVmaW5lIEVP
Ql9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQorI2Rl
ZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5
IG9taXQgdGhlIHRlc3QgZm9yIHl5X3J1bGVfY2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVp
cmVzCisgICAgICogICAgICAgYWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNp
bmNlIHl5bGVzcygpIGlzIGEgbWFjcm8sIGl0IHdvdWxkIGJyZWFrCisgICAgICogICAgICAgZXhp
c3Rpbmcgc2Nhbm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSB5eWxleC4KKyAg
ICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2Jh
bC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3CisgICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBo
aXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKKyAgICAgKiAg
ICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMg
bm90IHdvcnRoIGl0LgorICAgICAqLworICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwK
KyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGludCB5eWw7XAorICAgICAgICAg
ICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisgICAgICAgICAgICAgICAgICAg
ICAgICAtLXl5bGluZW5vO1wKKyAgICAgICAgICAgIH13aGlsZSgwKQorICAgICNkZWZpbmUgWVlf
TElORU5PX1JFV0lORF9UTyhkc3QpIFwKKyAgICAgICAgICAgIGRvIHtcCisgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcDtcCisgICAgICAgICAgICAgICAgZm9yICggcCA9IHl5X2NwLTE7IHAg
Pj0gKGRzdCk7IC0tcClcCisgICAgICAgICAgICAgICAgICAgIGlmICggKnAgPT0gJ1xuJyApXAor
ICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCisgICAgICAgICAgICB9d2hpbGUo
MCkKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0
ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlk
byBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwK
KyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19M
SU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgXAor
CQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJKHl5X2NfYnVmX3ApID0geXlfY3AgPSB5
eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZPUkVf
QUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAwICkK
KworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCAoeXl0ZXh0X3B0cikgICkKKworI2lmbmRl
ZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsK
KworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9w
b3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBv
ZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICog
Y2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2YgY2hh
cmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNoYXJh
Y3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRo
ZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFs
bG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUg
aXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMg
YW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1
c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5z
dGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRl
cgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkv
KiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxp
bmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRj
aCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisKKyAgICBpbnQg
eXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5eV9ic19jb2x1
bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKworCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZp
bGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkg
Ki8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2Rl
ZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hl
biBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nl
c3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5k
aWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBz
b3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tl
bnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAu
CisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0
YXR1cyB0byAibmV3IgorCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNh
biBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBp
bnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsK
KyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBTdGFjayBvZiBp
bnB1dCBidWZmZXJzLiAqLworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wID0gMDsg
LyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9z
dGFja19tYXggPSAwOyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworc3RhdGljIFlZX0JVRkZF
Ul9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXku
ICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBp
biBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVz
IGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0
aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JV
RkZFUiAoICh5eV9idWZmZXJfc3RhY2spIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyAo
eXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNl
ZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9y
IHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2Rl
ZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgKHl5X2J1ZmZlcl9zdGFjaylbKHl5X2J1ZmZl
cl9zdGFja190b3ApXQorCisvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0
IHdoZW4geXl0ZXh0IGlzIGZvcm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKK3N0
YXRpYyBpbnQgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5
eV9jaF9idWYgKi8KK2ludCB5eWxlbmc7CisKKy8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3Rl
ciBpbiBidWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IE5VTEw7CitzdGF0aWMg
aW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KK3N0
YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KKworLyogRmxh
ZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHl5d3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVz
CisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCB5eWluLiAgQSBiaXQgb2YgYSBoYWNr
IC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKwordm9p
ZCB5eXJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7Cit2b2lkIHl5X3N3aXRjaF90b19idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOworWVlfQlVGRkVSX1NUQVRFIHl5X2Ny
ZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7Cit2b2lkIHl5X2RlbGV0ZV9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBiICApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUg
bmV3X2J1ZmZlciAgKTsKK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkICk7CisKK3N0YXRp
YyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCApOworc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5
eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKQorCitZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgICk7CitZWV9CVUZGRVJfU1RB
VEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICApOworWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAgKTsKKwordm9p
ZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICApOwordm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6
ZV90ICApOwordm9pZCB5eWZyZWUgKHZvaWQgKiAgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVy
IHl5X2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJh
Y3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
ICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7IFwK
Kwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNf
aW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwK
KwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAg
ICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZ
X0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVn
aW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHl5d3JhcCgpICgvKkNPTlNUQ09ORCovMSkKKyNk
ZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisK
K0ZJTEUgKnl5aW4gPSBOVUxMLCAqeXlvdXQgPSBOVUxMOworCit0eXBlZGVmIGludCB5eV9zdGF0
ZV90eXBlOworCitleHRlcm4gaW50IHl5bGluZW5vOworCitpbnQgeXlsaW5lbm8gPSAxOworCitl
eHRlcm4gY2hhciAqeXl0ZXh0OworI2lmZGVmIHl5dGV4dF9wdHIKKyN1bmRlZiB5eXRleHRfcHRy
CisjZW5kaWYKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHQKKworc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X254dFtdWzIxXSA9CisgICAgeworICAgIHsKKyAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwK
KyAgICAgICAgMAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgMTQsICAgMTUsICAgMTYs
ICAgMTQsICAgMTQsICAgMTcsICAgMTQsICAgMTQsICAgMTQsCisgICAgICAgMTQsICAgMTQsICAg
MTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCisgICAgICAgMTQK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE0LCAgIDE0
LCAgIDE3LCAgIDE0LCAgIDE0LCAgIDE0LAorICAgICAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAg
IDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LAorICAgICAgIDE0CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgICAxOCwgICAxOSwgICAyMCwgICAxOCwgICAxOCwgICAxOCwgICAy
MSwgICAxOCwgICAxOCwKKworICAgICAgIDE4LCAgIDE4LCAgIDIyLCAgIDIzLCAgIDE4LCAgIDI0
LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDE4LAorICAgICAgIDE4CisgICAgfSwKKworICAgIHsKKyAg
ICAgICAxMywgICAxOCwgICAxOSwgICAyMCwgICAxOCwgICAxOCwgICAxOCwgICAyMSwgICAxOCwg
ICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAyMiwgICAyMywgICAxOCwgICAyNCwgICAxOCwgICAy
NSwgICAxOCwgICAxOCwKKyAgICAgICAxOAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAg
MjYsICAgMjcsICAgMjgsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsCisgICAg
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsCisgICAgICAgMjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorICAgICAgIDI2LCAgIDI2
LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorCisgICAg
ICAgMjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDI5LCAgIDI5LCAgIDMwLCAgIDI5
LCAgIDMxLCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMxLAorICAgICAgIDI5LCAgIDI5LCAgIDI5LCAg
IDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDMzLAorICAgICAgIDI5CisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgICAyOSwgICAyOSwgICAzMCwgICAyOSwgICAzMSwgICAy
OSwgICAzMiwgICAyOSwgICAzMSwKKyAgICAgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwg
ICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAzMywKKyAgICAgICAyOQorICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAg
NDEsICAgMzgsCisgICAgICAgNDIsICAgNDMsICAgMzQsICAgNDQsICAgNDQsICAgMzQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsCisgICAgICAgNDkKKworICAgIH0sCisKKyAgICB7CisgICAgICAg
MTMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgMzgs
CisgICAgICAgNDIsICAgNDMsICAgMzQsICAgNDQsICAgNDQsICAgMzQsICAgNDUsICAgNDYsICAg
NDcsICAgNDgsCisgICAgICAgNDkKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDUwLCAg
IDUxLCAgIDUyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorICAgICAgIDUw
LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAor
ICAgICAgIDUwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1MCwgICA1MSwgICA1Miwg
ICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKKyAgICAgICA1MCwgICA1MCwgICA1
MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKKyAgICAgICA1MAor
ICAgIH0sCisKKyAgICB7CisgICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMs
ICAtMTMsICAtMTMsICAtMTMsICAtMTMsCisKKyAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywg
IC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywKKyAgICAgIC0xMworICAgIH0sCisK
KyAgICB7CisgICAgICAgMTMsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAt
MTQsICAtMTQsICAtMTQsCisgICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQs
ICAtMTQsICAtMTQsICAtMTQsICAtMTQsCisgICAgICAtMTQKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTE1LCAgIDUzLCAgIDU0LCAgLTE1LCAgLTE1LCAgIDU1LCAgLTE1LCAgLTE1LCAg
LTE1LAorICAgICAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1
LCAgLTE1LCAgLTE1LAorICAgICAgLTE1CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0x
NiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKKyAgICAg
IC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0x
NiwKKworICAgICAgLTE2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1NiwgICA1Niwg
ICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAgICA1NiwgICA1
NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAg
ICA1NgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMTgsICAtMTgsICAtMTgsICAtMTgs
ICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsCisgICAgICAtMTgsICAtMTgsICAtMTgsICAt
MTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsCisgICAgICAtMTgKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTE5LCAgIDU4LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5
LCAgLTE5LCAgLTE5LCAgLTE5LAorICAgICAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAg
LTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LAorICAgICAgLTE5CisKKyAgICB9LAorCisgICAg
eworICAgICAgIDEzLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAg
LTIwLCAgLTIwLAorICAgICAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIw
LCAgLTIwLCAgLTIwLCAgLTIwLAorICAgICAgLTIwCisgICAgfSwKKworICAgIHsKKyAgICAgICAx
MywgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgICA1OSwgIC0yMSwgIC0yMSwK
KyAgICAgIC0yMSwgIC0yMSwgIC0yMSwgICA1OSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0y
MSwgIC0yMSwKKyAgICAgIC0yMQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMjIsICAt
MjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsCisgICAgICAtMjIs
ICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAgNjAsICAtMjIsICAtMjIsCisg
ICAgICAtMjIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTIzLCAgLTIzLCAgLTIzLCAg
LTIzLCAgLTIzLCAgLTIzLCAgIDU5LCAgLTIzLCAgLTIzLAorCisgICAgICAtMjMsICAtMjMsICAt
MjMsICAgNjEsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsCisgICAgICAtMjMK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0
LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LAorICAgICAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAg
LTI0LCAgLTI0LCAgLTI0LCAgIDYyLCAgLTI0LCAgLTI0LAorICAgICAgLTI0CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0y
NSwgIC0yNSwgIC0yNSwKKyAgICAgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwg
IC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwKKyAgICAgIC0yNQorICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAgNjMsICAgNjMsICAtMjYsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsCisgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsCisKKyAgICAgICA2MworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAt
MjcsICAgNjQsICAgNjUsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsCisgICAg
ICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAt
MjcsCisgICAgICAtMjcKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDY2LCAgLTI4LCAg
LTI4LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAorICAgICAgIDY2LCAgIDY2
LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAorICAgICAg
IDY2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA2NywgICA2NywgICA2OCwgICA2Nywg
IC0yOSwgICA2NywgIC0yOSwgICA2NywgIC0yOSwKKyAgICAgICA2NywgICA2NywgICA2NywgICA2
NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgIC0yOSwKKyAgICAgICA2NworCisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0z
MCwgIC0zMCwgIC0zMCwgIC0zMCwKKyAgICAgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwg
IC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwKKyAgICAgIC0zMAorICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAt
MzEsICAtMzEsCisgICAgICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEs
ICAtMzEsICAtMzEsICAtMzEsCisgICAgICAtMzEKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgIDY5LCAgIDY5LCAgLTMyLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LAor
ICAgICAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5
LCAgIDY5LAorICAgICAgIDY5CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA3MCwgICA3
MCwgICA3MSwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwKKworICAgICAgIDcw
LCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLAor
ICAgICAgIDcwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0zNCwgIC0zNCwgIC0zNCwg
IC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwKKyAgICAgIC0zNCwgIC0zNCwgIC0z
NCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwKKyAgICAgIC0zNAor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMzUsICAgNzIsICAtMzUsICAtMzUsICAtMzUs
ICAtMzUsICAtMzUsICAtMzUsICAtMzUsCisgICAgICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAt
MzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsCisgICAgICAtMzUKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2
LCAgLTM2LCAgLTM2LAorICAgICAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAg
LTM2LCAgLTM2LCAgLTM2LCAgLTM2LAorCisgICAgICAtMzYKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAg
LTM3LAorICAgICAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgIDcz
LCAgLTM3LCAgLTM3LAorICAgICAgLTM3CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0z
OCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKKyAgICAg
IC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0z
OCwKKyAgICAgIC0zOAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgNzQsICAgNzQsICAt
MzksICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCisgICAgICAg
NzQKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNDAsICAtNDAsICAtNDAsICAtNDAs
ICAtNDAsICAtNDAsICAgNzUsICAtNDAsICAtNDAsCisgICAgICAtNDAsICAtNDAsICAtNDAsICAg
NzUsICAgNzUsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAsCisgICAgICAtNDAKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQx
LCAgLTQxLCAgIDc2LCAgLTQxLAorICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAg
LTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLAorICAgICAgLTQxCisgICAgfSwKKworICAgIHsK
KyAgICAgICAxMywgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00
MiwgIC00MiwKKyAgICAgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00Miwg
IC00MiwgIC00MiwgIC00MiwKKyAgICAgIC00MgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMs
ICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsCisK
KyAgICAgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00
MywgIC00MywKKyAgICAgIC00MworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNDQsICAt
NDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAgNzUsICAtNDQsICAtNDQsCisgICAgICAtNDQs
ICAtNDQsICAtNDQsICAgNzcsICAgNzcsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsCisg
ICAgICAtNDQKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ1LCAgLTQ1LCAgLTQ1LCAg
LTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LAorICAgICAgLTQ1LCAgLTQ1LCAgLTQ1
LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgIDc4LCAgLTQ1LCAgLTQ1LAorICAgICAgLTQ1Cisg
ICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00Niwg
IC00NiwgIC00NiwgIC00NiwgIC00NiwKKyAgICAgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00
NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwKKworICAgICAgLTQ2CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00
NywgIC00NywgIC00NywKKyAgICAgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00Nywg
IC00NywgICA3OSwgIC00NywgIC00NywKKyAgICAgIC00NworICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAtNDgsICAtNDgsICAgODAsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAt
NDgsCisgICAgICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgs
ICAtNDgsICAtNDgsCisgICAgICAtNDgKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ5
LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LAorICAgICAg
LTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5
LAorICAgICAgIDgxCisKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDgyLCAgIDgzLCAg
LTUwLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDgyLCAgIDgy
LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAg
IDgyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC01MSwgIC01MSwgIC01MSwgIC01MSwg
IC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwKKyAgICAgIC01MSwgIC01MSwgIC01MSwgIC01
MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwKKyAgICAgIC01MQorICAgIH0s
CisKKyAgICB7CisgICAgICAgMTMsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIs
ICAtNTIsICAtNTIsICAtNTIsCisgICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAt
NTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsCisgICAgICAtNTIKKyAgICB9LAorCisgICAgewor
ICAgICAgIDEzLCAgLTUzLCAgIDUzLCAgIDU0LCAgLTUzLCAgLTUzLCAgIDU1LCAgLTUzLCAgLTUz
LCAgLTUzLAorCisgICAgICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMs
ICAtNTMsICAtNTMsICAtNTMsCisgICAgICAtNTMKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LAor
ICAgICAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0
LCAgLTU0LAorICAgICAgLTU0CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1NiwgICA1
NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAgICA1Niwg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAg
ICAgICA1NgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgNTYsICAgNTYsICAgNTcsICAg
NTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCisgICAgICAgNTYsICAgNTYsICAgNTYs
ICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCisKKyAgICAgICA1Ngor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcs
ICAtNTcsICAtNTcsICAtNTcsICAtNTcsCisgICAgICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAt
NTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsCisgICAgICAtNTcKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTU4LCAgIDU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4
LCAgLTU4LCAgLTU4LAorICAgICAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAg
LTU4LCAgLTU4LCAgLTU4LCAgLTU4LAorICAgICAgLTU4CisgICAgfSwKKworICAgIHsKKyAgICAg
ICAxMywgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgICA1OSwgIC01OSwgIC01
OSwKKyAgICAgIC01OSwgIC01OSwgIC01OSwgICA1OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwg
IC01OSwgIC01OSwKKyAgICAgIC01OQorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC02
MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwKKyAgICAg
IC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02
MCwKKyAgICAgIC02MAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNjEsICAtNjEsICAt
NjEsICAtNjEsICAtNjEsICAtNjEsICAgNTksICAtNjEsICAtNjEsCisgICAgICAtNjEsICAtNjEs
ICAtNjEsICAgNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsCisgICAgICAt
NjEKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAg
LTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLAorICAgICAgLTYyLCAgLTYyLCAgLTYyLCAgLTYy
LCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLAorICAgICAgLTYyCisgICAgfSwK
KworICAgIHsKKyAgICAgICAxMywgICA2MywgICA2MywgIC02MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywKKworICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLAorICAgICAgIDYzCisgICAgfSwKKworICAgIHsK
KyAgICAgICAxMywgIC02NCwgICA2NCwgICA2NSwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02
NCwgIC02NCwKKyAgICAgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwg
IC02NCwgIC02NCwgIC02NCwKKyAgICAgIC02NAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMs
ICAgNjYsICAtNjUsICAtNjUsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsCisg
ICAgICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYs
ICAgNjYsCisgICAgICAgNjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTY2LCAgLTY2
LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LAorICAgICAgLTY2LCAg
LTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LAorCisg
ICAgICAtNjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDY3LCAgIDY3LCAgIDY4LCAg
IDY3LCAgLTY3LCAgIDY3LCAgLTY3LCAgIDY3LCAgLTY3LAorICAgICAgIDY3LCAgIDY3LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgLTY3LAorICAgICAgIDY3Cisg
ICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwg
IC02OCwgIC02OCwgIC02OCwgIC02OCwKKyAgICAgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02
OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwKKyAgICAgIC02OAorICAgIH0sCisKKyAg
ICB7CisgICAgICAgMTMsICAgNjksICAgNjksICAtNjksICAgNjksICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjksCisgICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksICAgNjksCisgICAgICAgNjkKKworICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAtNzAsICAtNzAsICAgNzEsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAt
NzAsCisgICAgICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAs
ICAtNzAsICAtNzAsCisgICAgICAtNzAKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTcx
LCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLAorICAgICAg
LTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcx
LAorICAgICAgLTcxCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03MiwgICA3MiwgIC03
MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwKKyAgICAgIC03MiwgIC03Miwg
IC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwKKyAgICAgIC03
MgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNzMsICAtNzMsICAtNzMsICAtNzMsICAt
NzMsICAtNzMsICAtNzMsICAtNzMsICAtNzMsCisKKyAgICAgIC03MywgIC03MywgIC03MywgIC03
MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywKKyAgICAgIC03MworICAgIH0s
CisKKyAgICB7CisgICAgICAgMTMsICAgNzQsICAgNzQsICAtNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQKKyAgICB9LAorCisgICAgewor
ICAgICAgIDEzLCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgLTc1
LCAgLTc1LAorICAgICAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgIDc1LCAgLTc1LCAgLTc1LCAg
LTc1LCAgLTc1LCAgLTc1LAorICAgICAgLTc1CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywg
IC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwKKyAg
ICAgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03Niwg
IC03NiwKKworICAgICAgLTc2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03NywgIC03
NywgIC03NywgIC03NywgIC03NywgIC03NywgICA3NSwgIC03NywgIC03NywKKyAgICAgIC03Nywg
IC03NywgIC03NywgICA3NywgICA3NywgIC03NywgIC03NywgIC03NywgIC03NywgIC03NywKKyAg
ICAgIC03NworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNzgsICAtNzgsICAtNzgsICAt
NzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsCisgICAgICAtNzgsICAtNzgsICAtNzgs
ICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsCisgICAgICAtNzgKKyAg
ICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAg
LTc5LCAgLTc5LCAgLTc5LCAgLTc5LAorICAgICAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5
LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LAorICAgICAgLTc5CisKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgw
LCAgLTgwLCAgLTgwLAorICAgICAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAg
LTgwLCAgLTgwLCAgLTgwLCAgLTgwLAorICAgICAgLTgwCisgICAgfSwKKworICAgIHsKKyAgICAg
ICAxMywgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04
MSwKKyAgICAgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwg
IC04MSwgIC04MSwKKyAgICAgIC04MQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgODIs
ICAgODMsICAtODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsCisgICAgICAg
ODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIs
CisgICAgICAgODIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDgzLCAgIDgzLCAgLTgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorCisgICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAg
ODMKKyAgICB9LAorCisgICAgfSA7CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2
aW91c19zdGF0ZSAodm9pZCApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFu
cyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICApOworc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5bm9yZXR1cm4geXlfZmF0YWxfZXJyb3Ig
KHl5Y29uc3QgY2hhciogbXNnICApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRl
cm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rp
b24gLSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwK
KwkoeXl0ZXh0X3B0cikgPSB5eV9icDsgXAorCXl5bGVuZyA9IChpbnQpICh5eV9jcCAtIHl5X2Jw
KTsgXAorCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCSh5
eV9jX2J1Zl9wKSA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyA0NworI2RlZmluZSBZ
WV9FTkRfT0ZfQlVGRkVSIDQ4CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNj
YW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90
cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5
X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4NF0gPQor
ICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgIDQ4LCAgICA1LCAgICA0LCAg
ICAyLCAgICAzLCAgIDEyLCAgIDExLCAgIDEzLAorICAgICAgICA3LCAgIDEyLCAgICA2LCAgIDEy
LCAgICA4LCAgIDQ2LCAgIDQzLCAgIDQ1LCAgIDM4LCAgIDQyLAorICAgICAgIDQxLCAgIDM2LCAg
IDQwLCAgIDM1LCAgIDM0LCAgIDI5LCAgIDIxLCAgIDI4LCAgIDMyLCAgIDMxLAorICAgICAgIDM1
LCAgIDE5LCAgIDIwLCAgIDMwLCAgIDI2LCAgIDIyLCAgIDI3LCAgIDM1LCAgIDM1LCAgIDE0LAor
ICAgICAgIDE2LCAgIDE1LCAgICA0LCAgICAyLCAgICAzLCAgICAzLCAgICAxLCAgIDExLCAgICA3
LCAgIDEwLAorICAgICAgICA2LCAgICA5LCAgIDQ2LCAgIDQzLCAgIDQ1LCAgIDQ0LCAgIDM4LCAg
IDM3LCAgIDM2LCAgIDQwLAorICAgICAgIDM5LCAgIDM0LCAgIDIzLCAgIDMyLCAgIDMxLCAgIDE3
LCAgIDMwLCAgIDI0LCAgIDI1LCAgIDMzLAorICAgICAgIDE4LCAgIDE0LCAgIDE0CisgICAgfSA7
CisKK3N0YXRpYyB5eWNvbnN0IFlZX0NIQVIgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAg
IDMsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDUsICAgIDYs
ICAgIDcsICAgIDEsICAgIDgsICAgIDksICAgMTAsCisgICAgICAgMTEsICAgIDEsICAgMTIsICAg
IDEsICAgMTMsICAgMTQsICAgMTQsICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTUsICAgIDEsICAgMTYsCisgICAgICAg
MTcsICAgMTgsICAgIDEsICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMs
CisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAg
MTMsICAgMTMsCisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgIDEsICAgMTksICAgIDEsICAgIDEsICAgMTMsICAg
IDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsCisKKyAgICAgICAxMywgICAxMywgICAxMywgICAx
MywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKKyAgICAgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKKyAgICAgICAx
MywgICAxMywgICAgMSwgICAyMCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKKy8qIFRhYmxlIG9mIGJv
b2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLworc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFs0OF0gPQorICAgIHsgICAwLAorMSwg
MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgCisg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwg
MCwgMSwgCisgICAgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgICAgIH07CisKK2V4dGVybiBpbnQg
eXlfZmxleF9kZWJ1ZzsKK2ludCB5eV9mbGV4X2RlYnVnID0gMDsKKworLyogVGhlIGludGVudCBi
ZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3Vz
ZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90
X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9N
T1JFX09GRlNFVAorY2hhciAqeXl0ZXh0OworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJv
bWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgor
I2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRl
ICJsa2MuaCIKKworI2RlZmluZSBTVEFSVF9TVFJTSVpFCTE2CisKK3N0YXRpYyBzdHJ1Y3Qgewor
CXN0cnVjdCBmaWxlICpmaWxlOworCWludCBsaW5lbm87Cit9IGN1cnJlbnRfcG9zOworCitzdGF0
aWMgY2hhciAqdGV4dDsKK3N0YXRpYyBpbnQgdGV4dF9zaXplLCB0ZXh0X2FzaXplOworCitzdHJ1
Y3QgYnVmZmVyIHsKKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7CisJWVlfQlVGRkVSX1NUQVRFIHN0
YXRlOworfTsKKworc3RydWN0IGJ1ZmZlciAqY3VycmVudF9idWY7CisKK3N0YXRpYyBpbnQgbGFz
dF90cywgZmlyc3RfdHM7CisKK3N0YXRpYyBjaGFyICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAq
aW4sIHNpemVfdCBuKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9leHBhbmRlZF9zdHJpbmcoY29uc3Qg
Y2hhciAqaW4pOworc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKK3N0YXRpYyB2b2lk
IHpjb25mX2VuZGZpbGUodm9pZCk7CisKK3N0YXRpYyB2b2lkIG5ld19zdHJpbmcodm9pZCkKK3sK
Kwl0ZXh0ID0geG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKKwl0ZXh0X2FzaXplID0gU1RBUlRfU1RS
U0laRTsKKwl0ZXh0X3NpemUgPSAwOworCSp0ZXh0ID0gMDsKK30KKworc3RhdGljIHZvaWQgYXBw
ZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQoreworCWludCBuZXdfc2l6ZSA9
IHRleHRfc2l6ZSArIHNpemUgKyAxOworCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKKwkJ
bmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7CisJCW5ld19zaXplICY9IC1TVEFSVF9TVFJT
SVpFOworCQl0ZXh0ID0geHJlYWxsb2ModGV4dCwgbmV3X3NpemUpOworCQl0ZXh0X2FzaXplID0g
bmV3X3NpemU7CisJfQorCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBzdHIsIHNpemUpOworCXRl
eHRfc2l6ZSArPSBzaXplOworCXRleHRbdGV4dF9zaXplXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lk
IGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQoreworCXRleHQgPSB4bWFs
bG9jKHNpemUgKyAxKTsKKwltZW1jcHkodGV4dCwgc3RyLCBzaXplKTsKKwl0ZXh0W3NpemVdID0g
MDsKK30KKworc3RhdGljIHZvaWQgd2Fybl9pZ25vcmVkX2NoYXJhY3RlcihjaGFyIGNocikKK3sK
KwlmcHJpbnRmKHN0ZGVyciwKKwkgICAgICAgICIlczolZDp3YXJuaW5nOiBpZ25vcmluZyB1bnN1
cHBvcnRlZCBjaGFyYWN0ZXIgJyVjJ1xuIiwKKwkgICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNv
bmZfbGluZW5vKCksIGNocik7Cit9CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1B
TkQgMQorI2RlZmluZSBIRUxQIDIKKyNkZWZpbmUgU1RSSU5HIDMKKyNkZWZpbmUgUEFSQU0gNAor
I2RlZmluZSBBU1NJR05fVkFMIDUKKworI2lmbmRlZiBZWV9OT19VTklTVERfSAorLyogU3BlY2lh
bCBjYXNlIGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBp
dCB3YXkKKyAqIGRvd24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHVzZXIncyBzZWN0aW9uIDEg
dG8gaGF2ZSBiZWVuIHNjYW5uZWQgZmlyc3QuCisgKiBUaGUgdXNlciBoYXMgYSBjaGFuY2UgdG8g
b3ZlcnJpZGUgaXQgd2l0aCBhbiBvcHRpb24uCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNl
bmRpZgorCisjaWZuZGVmIFlZX0VYVFJBX1RZUEUKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSB2b2lk
ICoKKyNlbmRpZgorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCApOworCisvKiBB
Y2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRv
IG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhf
ZGVzdHJveSAodm9pZCApOworCitpbnQgeXlnZXRfZGVidWcgKHZvaWQgKTsKKwordm9pZCB5eXNl
dF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEg
KHZvaWQgKTsKKwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQg
ICk7CisKK0ZJTEUgKnl5Z2V0X2luICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfaW4gIChGSUxFICog
X2luX3N0ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfb3V0
ICAoRklMRSAqIF9vdXRfc3RyICApOworCisJCQlpbnQgeXlnZXRfbGVuZyAodm9pZCApOworCitj
aGFyICp5eWdldF90ZXh0ICh2b2lkICk7CisKK2ludCB5eWdldF9saW5lbm8gKHZvaWQgKTsKKwor
dm9pZCB5eXNldF9saW5lbm8gKGludCBfbGluZV9udW1iZXIgICk7CisKKy8qIE1hY3JvcyBhZnRl
ciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGlu
CisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAorI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIGludCB5eXdyYXAgKHZvaWQgKTsKKyNlbHNlCitleHRlcm4g
aW50IHl5d3JhcCAodm9pZCApOworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19VTlBV
VAorICAgIAorICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLGNoYXIgKmJ1Zl9wdHIgICk7
CisgICAgCisjZW5kaWYKKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4
X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgKTsKKyNlbmRpZgorCisjaWZkZWYg
WVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAq
ICk7CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMK
K3N0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHZv
aWQgKTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVw
IHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19p
YTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNk
ZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKKyNkZWZpbmUgWVlfUkVBRF9CVUZf
U0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KKyNlbmRpZgorCisvKiBDb3B5IHdoYXRl
dmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lm
bmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBz
dHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8K
KyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgKHNpemVfdCkgeXlsZW5nLCAx
LCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0
dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVM
TCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisj
ZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwllcnJubz0wOyBcCisJd2hp
bGUgKCAocmVzdWx0ID0gKGludCkgcmVhZCggZmlsZW5vKHl5aW4pLCBidWYsIG1heF9zaXplICkp
IDwgMCApIFwKKwl7IFwKKwkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCXsgXAorCQkJWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQlicmVhazsg
XAorCQl9IFwKKwkJZXJybm89MDsgXAorCQljbGVhcmVycih5eWluKTsgXAorCX1cCitcCisKKyNl
bmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0
byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsn
IGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21w
aWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lm
bmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisj
ZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0
YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NU
QVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8K
KyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9m
YXRhbF9lcnJvciggbXNnICkKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24g
c3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9m
IGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkg
YWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lT
X09VUlMgMQorCitleHRlcm4gaW50IHl5bGV4ICh2b2lkKTsKKworI2RlZmluZSBZWV9ERUNMIGlu
dCB5eWxleCAodm9pZCkKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVk
IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZwor
ICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmlu
ZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBv
ZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIC8qTElO
VEVEKi9icmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJf
QUNUSU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRo
ZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRl
OworCWNoYXIgKnl5X2NwLCAqeXlfYnA7CisJaW50IHl5X2FjdDsKKyAgICAKKwlpZiAoICEoeXlf
aW5pdCkgKQorCQl7CisJCSh5eV9pbml0KSA9IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJ
WVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhICh5eV9zdGFydCkgKQorCQkJKHl5X3N0
YXJ0KSA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQorCQkJ
eXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsKKwor
CQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQl5eWVuc3VyZV9idWZmZXJfc3RhY2sg
KCk7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXl5X2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSApOworCQl9CisKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJ
CX0KKworCXsKKworCWludCBzdHIgPSAwOworCWludCB0cywgaTsKKworCXdoaWxlICggLypDT05T
VENPTkQqLzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7
CisJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwor
CQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBv
c2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVu
LgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0
YXJ0KTsKK3l5X21hdGNoOgorCQl3aGlsZSAoICh5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5
X2N1cnJlbnRfc3RhdGVdWyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSAgXSkgPiAwICkKKwkJ
CSsreXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9IC15eV9jdXJyZW50X3N0YXRlOworCit5
eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwor
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKKwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisJCQl7CisJCQlpbnQgeXls
OworCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRl
eHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJCisgICAgeXlsaW5lbm8rKzsKKzsKKwkJCX0KKworZG9f
YWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMu
ICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dp
dGNoICovCitjYXNlIDE6CisvKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLworY2FzZSAyOgorLyog
cnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwlyZXR1cm4gVF9FT0w7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNl
IDQ6CitZWV9SVUxFX1NFVFVQCit7CisJQkVHSU4oQ09NTUFORCk7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgNToKK1lZX1JVTEVfU0VUVVAKK3sKKwl1bnB1dCh5eXRleHRbMF0pOworCUJFR0lOKENPTU1B
TkQpOworfQorCVlZX0JSRUFLCisKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJY29uc3Qg
c3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5eXRleHQsIHl5bGVuZyk7CisJ
CWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7CisJCWN1cnJlbnRfcG9zLmxpbmVubyA9
IHl5bGluZW5vOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfQ09NTUFORCkgeworCQkJQkVH
SU4oUEFSQU0pOworCQkJeXlsdmFsLmlkID0gaWQ7CisJCQlyZXR1cm4gaWQtPnRva2VuOworCQl9
CisJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0
OworCQlyZXR1cm4gVF9WQVJJQUJMRTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVf
U0VUVVAKK3sKKwkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgJyQnICovCisJ
CXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxlbmcpOworCQlpZiAoc3Ry
bGVuKHl5bHZhbC5zdHJpbmcpKQorCQkJcmV0dXJuIFRfVkFSSUFCTEU7CisJCWZyZWUoeXlsdmFs
LnN0cmluZyk7CisJfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lO
KEFTU0lHTl9WQUwpOyB5eWx2YWwuZmxhdm9yID0gVkFSX1JFQ1VSU0lWRTsgcmV0dXJuIFRfQVNT
SUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQVNTSUdO
X1ZBTCk7IHl5bHZhbC5mbGF2b3IgPSBWQVJfU0lNUExFOyByZXR1cm4gVF9BU1NJR047IH0KKwlZ
WV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQVNTSUdOX1ZBTCk7IHl5
bHZhbC5mbGF2b3IgPSBWQVJfQVBQRU5EOyByZXR1cm4gVF9BU1NJR047IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9T
RVRVUAord2Fybl9pZ25vcmVkX2NoYXJhY3RlcigqeXl0ZXh0KTsKKwlZWV9CUkVBSworY2FzZSAx
MzoKKy8qIHJ1bGUgMTMgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworCQlCRUdJ
TihJTklUSUFMKTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlZWV9CUkVBSworCitjYXNlIDE0Ogor
WVlfUlVMRV9TRVRVUAoreworCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCQl5eWx2
YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfQVNTSUdOX1ZBTDsKKwl9CisJWVlfQlJFQUsK
K2Nhc2UgMTU6CisvKiBydWxlIDE1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sg
QkVHSU4oSU5JVElBTCk7IHJldHVybiBUX0VPTDsgfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlf
UlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3JldHVy
biBUX0FORDsKKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX09S
OworCVlZX0JSRUFLCitjYXNlIDE5OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfT1BFTl9QQVJF
TjsKKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX0NMT1NFX1BB
UkVOOworCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfTk9UOwor
CVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfRVFVQUw7CisJWVlf
QlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9VTkVRVUFMOworCVlZX0JS
RUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfTEVTU19FUVVBTDsKKwlZWV9C
UkVBSworY2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX0dSRUFURVJfRVFVQUw7CisJ
WVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9MRVNTOworCVlZX0JS
RUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfR1JFQVRFUjsKKwlZWV9CUkVB
SworY2FzZSAyODoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJc3RyID0geXl0ZXh0WzBdOworCQluZXdf
c3RyaW5nKCk7CisJCUJFR0lOKFNUUklORyk7CisJfQorCVlZX0JSRUFLCitjYXNlIDI5OgorLyog
cnVsZSAyOSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCitCRUdJTihJTklUSUFMKTsg
cmV0dXJuIFRfRU9MOworCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworCQlj
b25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5n
KTsKKwkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX1BBUkFNKSB7CisJCQl5eWx2YWwuaWQgPSBp
ZDsKKwkJCXJldHVybiBpZC0+dG9rZW47CisJCX0KKwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXls
ZW5nKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkQ7CisJfQorCVlZ
X0JSRUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworCQkvKiB0aGlzIHRva2VuIGluY2x1
ZGVzIGF0IGxlYXN0IG9uZSAnJCcgKi8KKwkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5
eXRleHQsIHl5bGVuZyk7CisJCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpCisJCQlyZXR1cm4g
VF9XT1JEOworCQlmcmVlKHl5bHZhbC5zdHJpbmcpOworCX0KKwlZWV9CUkVBSworY2FzZSAzMjoK
K1lZX1JVTEVfU0VUVVAKKy8qIGNvbW1lbnQgKi8KKwlZWV9CUkVBSworY2FzZSAzMzoKKy8qIHJ1
bGUgMzMgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorOworCVlZX0JSRUFLCitjYXNl
IDM0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgMzU6CitZWV9SVUxFX1NFVFVQ
Cit3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOworCVlZX0JSRUFLCitjYXNlIFlZX1NU
QVRFX0VPRihQQVJBTSk6Cit7CisJCUJFR0lOKElOSVRJQUwpOworCX0KKwlZWV9CUkVBSworCitj
YXNlIDM2OgorWVlfUlVMRV9TRVRVUAorYXBwZW5kX2V4cGFuZGVkX3N0cmluZyh5eXRleHQpOwor
CVlZX0JSRUFLCitjYXNlIDM3OgorLyogcnVsZSAzNyBjYW4gbWF0Y2ggZW9sICovCisqeXlfY3Ag
PSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICov
CitZWV9MSU5FTk9fUkVXSU5EX1RPKHl5X2NwIC0gMSk7CisoeXlfY19idWZfcCkgPSB5eV9jcCAt
PSAxOworWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLworWVlf
UlVMRV9TRVRVUAoreworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKKwkJeXlsdmFs
LnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJfQorCVlZX0JSRUFLCitj
YXNlIDM4OgorWVlfUlVMRV9TRVRVUAoreworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5n
KTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMzk6CisvKiBydWxlIDM5IGNhbiBtYXRjaCBlb2wgKi8K
Kyp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5
eXRleHQgKi8KK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKKyh5eV9jX2J1Zl9wKSA9
IHl5X2NwIC09IDE7CitZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWlu
ICovCitZWV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0ICsgMSwgeXlsZW5n
IC0gMSk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwor
CX0KKwlZWV9CUkVBSworY2FzZSA0MDoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmlu
Zyh5eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNDE6CitZWV9S
VUxFX1NFVFVQCit7CisJCWlmIChzdHIgPT0geXl0ZXh0WzBdKSB7CisJCQlCRUdJTihQQVJBTSk7
CisJCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJCX0g
ZWxzZQorCQkJYXBwZW5kX3N0cmluZyh5eXRleHQsIDEpOworCX0KKwlZWV9CUkVBSworY2FzZSA0
MjoKKy8qIHJ1bGUgNDIgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworCQlmcHJp
bnRmKHN0ZGVyciwKKwkJCSIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1
cHBvcnRlZFxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCQlCRUdJ
TihJTklUSUFMKTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFU
RV9FT0YoU1RSSU5HKToKK3sKKwkJQkVHSU4oSU5JVElBTCk7CisJfQorCVlZX0JSRUFLCisKK2Nh
c2UgNDM6CitZWV9SVUxFX1NFVFVQCit7CisJCXRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHl5
bGVuZzsgaSsrKSB7CisJCQlpZiAoeXl0ZXh0W2ldID09ICdcdCcpCisJCQkJdHMgPSAodHMgJiB+
NykgKyA4OworCQkJZWxzZQorCQkJCXRzKys7CisJCX0KKwkJbGFzdF90cyA9IHRzOworCQlpZiAo
Zmlyc3RfdHMpIHsKKwkJCWlmICh0cyA8IGZpcnN0X3RzKSB7CisJCQkJemNvbmZfZW5kaGVscCgp
OworCQkJCXJldHVybiBUX0hFTFBURVhUOworCQkJfQorCQkJdHMgLT0gZmlyc3RfdHM7CisJCQl3
aGlsZSAodHMgPiA4KSB7CisJCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCA4KTsKKwkJCQl0
cyAtPSA4OworCQkJfQorCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCB0cyk7CisJCX0KKwl9
CisJWVlfQlJFQUsKK2Nhc2UgNDQ6CisvKiBydWxlIDQ0IGNhbiBtYXRjaCBlb2wgKi8KKyp5eV9j
cCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQg
Ki8KK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKKyh5eV9jX2J1Zl9wKSA9IHl5X2Nw
IC09IDE7CitZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCitZ
WV9SVUxFX1NFVFVQCit7CisJCXpjb25mX2VuZGhlbHAoKTsKKwkJcmV0dXJuIFRfSEVMUFRFWFQ7
CisJfQorCVlZX0JSRUFLCitjYXNlIDQ1OgorLyogcnVsZSA0NSBjYW4gbWF0Y2ggZW9sICovCitZ
WV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoIlxuIiwgMSk7CisJfQorCVlZX0JSRUFL
CitjYXNlIDQ2OgorWVlfUlVMRV9TRVRVUAoreworCQl3aGlsZSAoeXlsZW5nKSB7CisJCQlpZiAo
KHl5dGV4dFt5eWxlbmctMV0gIT0gJyAnKSAmJiAoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnXHQnKSkK
KwkJCQlicmVhazsKKwkJCXl5bGVuZy0tOworCQl9CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5
eWxlbmcpOworCQlpZiAoIWZpcnN0X3RzKQorCQkJZmlyc3RfdHMgPSBsYXN0X3RzOworCX0KKwlZ
WV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSEVMUCk6Cit7CisJCXpjb25mX2VuZGhlbHAoKTsK
KwkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJfQorCVlZX0JSRUFLCisKK2Nhc2UgWVlfU1RBVEVfRU9G
KElOSVRJQUwpOgorY2FzZSBZWV9TVEFURV9FT0YoQ09NTUFORCk6CitjYXNlIFlZX1NUQVRFX0VP
RihBU1NJR05fVkFMKToKK3sKKwlpZiAoY3VycmVudF9maWxlKSB7CisJCXpjb25mX2VuZGZpbGUo
KTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlmY2xvc2UoeXlpbik7CisJeXl0ZXJtaW5hdGUoKTsK
K30KKwlZWV9CUkVBSworY2FzZSA0NzoKK1lZX1JVTEVfU0VUVVAKK1lZX0ZBVEFMX0VSUk9SKCAi
ZmxleCBzY2FubmVyIGphbW1lZCIgKTsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVG
RkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUg
RU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5
X2NwIC0gKHl5dGV4dF9wdHIpKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nh
bm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0
aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5
aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhl
biB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5U
X0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2Ug
dG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIg
dGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBu
ZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVy
ZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRo
ZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFs
cmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICog
KHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVu
ZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGlu
IGlucHV0KCkuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCisJCQl7IC8qIFRoaXMgd2FzIHJl
YWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJKHl5
X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCS8q
IE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNp
dGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdv
IGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhv
dyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2Ug
ZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBp
dAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3Rh
dGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICk7CisKKwkJCXl5X2JwID0g
KHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJ
CQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsrKHl5X2NfYnVm
X3ApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlf
bWF0Y2g7CisJCQkJfQorCisJCQllbHNlCisJCQkJeworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3Ap
OworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCAgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09G
X0ZJTEU6CisJCQkJeworCQkJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMDsKKwor
CQkJCWlmICggeXl3cmFwKCApICkKKwkJCQkJeworCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3Zl
IHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQg
dXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAorCQkJCQkgKiB5eV9jX2J1Zl9w
IHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikg
d2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCisJ
CQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCisJCQkJCSAqIFlZX05V
TEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQkoeXlfY19idWZfcCkgPSAoeXl0
ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlf
U1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJCQkJfQorCisJCQkJZWxzZQorCQkJCQl7
CisJCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCisJCQkJCQlZWV9O
RVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU46CisJCQkJKHl5X2NfYnVmX3ApID0KKwkJCQkJKHl5dGV4dF9wdHIpICsgeXlf
YW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoICApOworCisJCQkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisJCQkJeXlf
YnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJ
CQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCSZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldOworCisJCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCQl5eV9jcCA9
ICh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOwor
CQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0
OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJy
b3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovCisJ
CX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworCX0gLyogZW5kIG9mIHVzZXIncyBk
ZWNsYXJhdGlvbnMgKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1
ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2Rl
IHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9C
X0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0
aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQpCit7CisgICAgCWNoYXIgKmRlc3QgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwljaGFyICpzb3VyY2UgPSAoeXl0ZXh0X3B0
cik7CisJaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCAoeXlf
Y19idWZfcCkgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hh
cnMpICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRv
IGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggKHl5X2NfYnVm
X3ApIC0gKHl5dGV4dF9wdHIpIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBt
YXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMg
YXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwor
CQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRv
IHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9C
X0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEu
ICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwor
CW51bWJlcl90b19tb3ZlID0gKGludCkgKCh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAtIDEp
OworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0Kysp
ID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUg
cmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZv
cmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0gKHl5X25fY2hhcnMpID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0K
KwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92
ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3Vn
aCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRl
ciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQor
CQkJCShpbnQpICgoeXlfY19idWZfcCkgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6
ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSAr
PSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAy
OworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGlu
IGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1
ZixiLT55eV9idWZfc2l6ZSArIDIgICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdy
b3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSBOVUxMOworCisJ
CQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwg
ZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJKHl5X2NfYnVm
X3ApID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFk
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJf
dG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZf
U0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBp
biBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQkoeXlfbl9jaGFycyksIG51bV90b19yZWFk
ICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hh
cnMpOworCQl9CisKKwlpZiAoICh5eV9uX2NoYXJzKSA9PSAwICkKKwkJeworCQlpZiAoIG51bWJl
cl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VO
RF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KHl5aW4gICk7CisJCQl9CisKKwkJZWxzZQorCQkJewor
CQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJ
fQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlp
ZiAoKCh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMg
dGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJaW50IG5ld19zaXplID0gKHl5X25fY2hh
cnMpICsgbnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsKKwkJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0K
KworCSh5eV9uX2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJKHl5dGV4dF9wdHIpID0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBj
aGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgKHZvaWQpCit7CisJeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwor
CWNoYXIgKnl5X2NwOworICAgIAorCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOworCisJ
Zm9yICggeXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCAoeXlfY19i
dWZfcCk7ICsreXlfY3AgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3Vy
cmVudF9zdGF0ZV1bKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSldOwor
CQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFu
cyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAq
IHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0
ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSApCit7CisJaW50IHl5X2lzX2phbTsKKyAgICAK
Kwl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVdWzFdOworCXl5X2lz
X2phbSA9ICh5eV9jdXJyZW50X3N0YXRlIDw9IDApOworCisJCXJldHVybiB5eV9pc19qYW0gPyAw
IDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19VTlBVVAorCisgICAgc3Rh
dGljIHZvaWQgeXl1bnB1dCAoaW50IGMsIGNoYXIgKiB5eV9icCApCit7CisJY2hhciAqeXlfY3A7
CisgICAgCisgICAgeXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwkvKiB1bmRvIGVmZmVjdHMgb2Yg
c2V0dGluZyB1cCB5eXRleHQgKi8KKwkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKworCWlmICgg
eXlfY3AgPCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQl7IC8q
IG5lZWQgdG8gc2hpZnQgdGhpbmdzIHVwIHRvIG1ha2Ugcm9vbSAqLworCQkvKiArMiBmb3IgRU9C
IGNoYXJzLiAqLworCQlpbnQgbnVtYmVyX3RvX21vdmUgPSAoeXlfbl9jaGFycykgKyAyOworCQlj
aGFyICpkZXN0ID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWworCQkJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplICsgMl07CisJCWNoYXIgKnNvdXJj
ZSA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19t
b3ZlXTsKKworCQl3aGlsZSAoIHNvdXJjZSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmICkKKwkJCSotLWRlc3QgPSAqLS1zb3VyY2U7CisKKwkJeXlfY3AgKz0gKGludCkgKGRl
c3QgLSBzb3VyY2UpOworCQl5eV9icCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7CisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9CisJCQkoeXlfbl9jaGFycykgPSAoaW50
KSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplOworCisJCWlmICggeXlfY3Ag
PCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQkJWVlfRkFUQUxf
RVJST1IoICJmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93IiApOworCQl9CisKKwkqLS15
eV9jcCA9IChjaGFyKSBjOworCisgICAgaWYgKCBjID09ICdcbicgKXsKKyAgICAgICAgLS15eWxp
bmVubzsKKyAgICB9CisKKwkoeXl0ZXh0X3B0cikgPSB5eV9icDsKKwkoeXlfaG9sZF9jaGFyKSA9
ICp5eV9jcDsKKwkoeXlfY19idWZfcCkgPSB5eV9jcDsKK30KKworI2VuZGlmCisKKyNpZm5kZWYg
WVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAo
dm9pZCkKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpCisjZW5kaWYKKworewor
CWludCBjOworICAgIAorCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKworCWlmICgg
Kih5eV9jX2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2Nf
YnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkg
KiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBh
CisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBi
dWZmZXIuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBh
IE5VTC4gKi8KKwkJCSooeXlfY19idWZfcCkgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVl
ZCBtb3JlIGlucHV0ICovCisJCQlpbnQgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9w
dHIpOworCQkJKysoeXlfY19idWZfcCk7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhp
cyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNj
dW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJ
CSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBC
dXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIu
CisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBF
T0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3Rh
dHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiApOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLwor
CisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFw
KCApICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mKSApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJ
CQlyZXR1cm4geXlpbnB1dCgpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KCk7CisjZW5kaWYK
KwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCSh5eV9jX2J1
Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3Ig
OC1iaXQgY2hhcidzICovCisJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4
dCAqLworCSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVmX3ApOworCisJaWYgKCBjID09ICdc
bicgKQorCQkKKyAgICB5eWxpbmVubysrOworOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyog
aWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZm
ZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCisgKiAKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0
IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklM
RSAqIGlucHV0X2ZpbGUgKQoreworICAgIAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewor
ICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9CisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsK
Kwl9CisKKwl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICk7CisJ
eXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQg
aW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIu
CisgKiAKKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFU
RSAgbmV3X2J1ZmZlciApCit7CisgICAgCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8g
cmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9i
dWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAg
ICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiAp
CisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkq
KHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCisJLyogV2Ug
ZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkg
KiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcK
KwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNh
ZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwkoeXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVy
X3N0YXRlICAodm9pZCkKK3sKKyAgICAJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzOworCSh5eXRleHRfcHRyKSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1Zl9w
KTsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0
ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhl
IGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZ
X0JVRl9TSVpFLgorICogCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgor
ICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwg
aW50ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZF
Ul9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKKwlp
ZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5
X2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gKHl5X3NpemVfdClzaXpl
OworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhl
IHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZl
ciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+
eXlfYnVmX3NpemUgKyAyICApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisK
KwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSApOwor
CisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBh
IGJ1ZmZlciBjcmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZlcigpCisgKiAKKyAqLworICAgIHZv
aWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKK3sKKyAgICAKKwlpZiAo
ICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5v
dCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciAp
CisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgICk7CisKKwl5eWZyZWUoKHZvaWQgKikg
YiAgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAq
IFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUg
c2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4K
KyAqLworICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBi
LCBGSUxFICogZmlsZSApCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgCisJeXlfZmx1
c2hfYnVmZmVyKGIgKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3
ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAg
IGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0g
MTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlf
aXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlz
Y2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQg
d2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNo
ZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiAKKyAqLworICAgIHZvaWQgeXlf
Zmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgKQoreworICAgIAlpZiAoICEgYiApCisJ
CXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdv
IGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5z
aXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAq
IGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09G
X0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
KworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0g
MTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZ
WV9DVVJSRU5UX0JVRkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworfQorCisvKiog
UHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21l
cworICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhl
IHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcg
c3RhdGUuCisgKiAgCisgKi8KK3ZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NU
QVRFIG5ld19idWZmZXIgKQoreworICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1
cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJ
CSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0
b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JV
RkZFUikKKwkJKHl5X2J1ZmZlcl9zdGFja190b3ApKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIu
ICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZikgPSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBz
dGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0
b3AuCisgKiAgCisgKi8KK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkKQoreworICAgIAlp
ZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSICk7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwlp
ZiAoKHl5X2J1ZmZlcl9zdGFja190b3ApID4gMCkKKwkJLS0oeXlfYnVmZmVyX3N0YWNrX3RvcCk7
CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7
CisJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKKwl9Cit9CisKKy8qIEFsbG9j
YXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFj
ZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZl
cl9zdGFjayAodm9pZCkKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIAorCWlmICghKHl5X2J1
ZmZlcl9zdGFjaykpIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxl
bWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZl
biBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBp
bW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKyAgICAgIG51
bV90b19hbGxvYyA9IDE7IC8qIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAx
IGFueXdheXMuLi4gKi8KKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSoqKXl5YWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkK
KwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1
ZmZlcl9zdGFjaygpIiApOworCisJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwgbnVtX3Rv
X2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisKKwkJKHl5X2J1ZmZl
cl9zdGFja19tYXgpID0gbnVtX3RvX2FsbG9jOworCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAw
OworCQlyZXR1cm47CisJfQorCisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAoKHl5X2J1
ZmZlcl9zdGFja19tYXgpKSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJl
cGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQl5eV9zaXplX3QgZ3Jvd19zaXplID0gOCAv
KiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9ICh5eV9idWZmZXJf
c3RhY2tfbWF4KSArIGdyb3dfc2l6ZTsKKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxvYworCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCisJ
CQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJ
CQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwor
CisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCgoeXlfYnVmZmVyX3N0
YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19h
bGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4g
ZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFy
YW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4g
Ynl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkg
YWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9z
Y2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgKQoreworCVlZX0JVRkZF
Ul9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAh
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUg
RU9CJ3MuICovCisJCXJldHVybiBOVUxMOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxs
b2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgICk7CisJaWYgKCAhIGIgKQorCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigp
IiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJl
IG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IE5VTEw7CisJYi0+eXlf
bl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwli
LT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19idWZmZXIoYiAgKTsKKwor
CXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2Fu
IGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEg
QGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJp
bmcgdG8gc2NhbgorICogCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkg
Y29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGlu
c3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICogeXlzdHIgKQoreworICAgIAorCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLChpbnQpIHN0
cmxlbih5eXN0cikgKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8g
c2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBz
Y2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5
dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBi
eXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiAKKyAqIEByZXR1
cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZG
RVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5
Ynl0ZXNfbGVuICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6
ZV90IG47CisJaW50IGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGlu
Y2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9ICh5eV9zaXplX3QpIChf
eXlieXRlc19sZW4gKyAyKTsKKwlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gICk7CisJaWYgKCAh
IGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3Nj
YW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQor
CQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYiA9IHl5X3NjYW5fYnVmZmVy
KGJ1ZixuICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4g
eXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1
ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgor
CSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5k
ZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKwor
c3RhdGljIHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cg
KQoreworCQkJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZ
WV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3Mg
aW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4p
IFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQu
ICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlf
TEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9ICh5eV9o
b2xkX2NoYXIpOyBcCisJCSh5eV9jX2J1Zl9wKSA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7
IFwKKwkJKHl5X2hvbGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOyBcCisJCSooeXlfY19idWZfcCkg
PSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUg
KCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1
Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIAor
ICovCitpbnQgeXlnZXRfbGluZW5vICAodm9pZCkKK3sKKyAgICAKKyAgICByZXR1cm4geXlsaW5l
bm87Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIAorICovCitGSUxFICp5eWdl
dF9pbiAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBv
dXRwdXQgc3RyZWFtLgorICogCisgKi8KK0ZJTEUgKnl5Z2V0X291dCAgKHZvaWQpCit7CisgICAg
ICAgIHJldHVybiB5eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50
IHRva2VuLgorICogCisgKi8KK2ludCB5eWdldF9sZW5nICAodm9pZCkKK3sKKyAgICAgICAgcmV0
dXJuIHl5bGVuZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICovCisK
K2NoYXIgKnl5Z2V0X3RleHQgICh2b2lkKQoreworICAgICAgICByZXR1cm4geXl0ZXh0OworfQor
CisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIF9saW5lX251bWJl
ciBsaW5lIG51bWJlcgorICogCisgKi8KK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgIF9saW5lX251
bWJlciApCit7CisgICAgCisgICAgeXlsaW5lbm8gPSBfbGluZV9udW1iZXI7Cit9CisKKy8qKiBT
ZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Cisg
KiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gX2luX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAq
IAorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCisgKi8KK3ZvaWQgeXlzZXRfaW4gKEZJTEUg
KiAgX2luX3N0ciApCit7CisgICAgICAgIHl5aW4gPSBfaW5fc3RyIDsKK30KKwordm9pZCB5eXNl
dF9vdXQgKEZJTEUgKiAgX291dF9zdHIgKQoreworICAgICAgICB5eW91dCA9IF9vdXRfc3RyIDsK
K30KKworaW50IHl5Z2V0X2RlYnVnICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5X2ZsZXhf
ZGVidWc7Cit9CisKK3ZvaWQgeXlzZXRfZGVidWcgKGludCAgX2JkZWJ1ZyApCit7CisgICAgICAg
IHl5X2ZsZXhfZGVidWcgPSBfYmRlYnVnIDsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2Jh
bHMgKHZvaWQpCit7CisgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZv
ciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAq
LworCisgICAgLyogV2UgZG8gbm90IHRvdWNoIHl5bGluZW5vIHVubGVzcyB0aGUgb3B0aW9uIGlz
IGVuYWJsZWQuICovCisgICAgeXlsaW5lbm8gPSAgMTsKKyAgICAKKyAgICAoeXlfYnVmZmVyX3N0
YWNrKSA9IE5VTEw7CisgICAgKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsKKyAgICAoeXlfYnVm
ZmVyX3N0YWNrX21heCkgPSAwOworICAgICh5eV9jX2J1Zl9wKSA9IE5VTEw7CisgICAgKHl5X2lu
aXQpID0gMDsKKyAgICAoeXlfc3RhcnQpID0gMDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8K
KyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0
OworI2Vsc2UKKyAgICB5eWluID0gTlVMTDsKKyAgICB5eW91dCA9IE5VTEw7CisjZW5kaWYKKwor
ICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdl
IGFyZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4g
MDsKK30KKworLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHZvaWQpCit7CisgICAg
CisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAq
LworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUiAgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJeXlw
b3BfYnVmZmVyX3N0YXRlKCk7CisJfQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAq
LworCXl5ZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOworCSh5eV9idWZmZXJfc3RhY2spID0gTlVM
TDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5v
bi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBj
YWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxz
KCApOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRp
bmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJu
Y3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICkKK3sKKwkJCisJaW50IGk7
CisJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlm
CisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogcyApCit7CisJaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJ
CTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAg
c2l6ZSApCit7CisJCQlyZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkICp5eXJlYWxsb2Mg
ICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgKQoreworCQkKKwkvKiBUaGUgY2FzdCB0byAo
Y2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50
YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRo
YXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIK
KwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVu
dCBmcm9tCisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1
bWVudCBjb252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAq
LworCXJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Cit9CisKK3ZvaWQgeXlmcmVlICh2b2lkICog
cHRyICkKK3sKKwkJCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9y
IChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIK
Kworc3RhdGljIGNoYXIgKmV4cGFuZF90b2tlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IG4pCit7
CisJY2hhciAqb3V0OworCWludCBjOworCWNoYXIgYzI7CisJY29uc3QgY2hhciAqcmVzdCwgKmVu
ZDsKKworCW5ld19zdHJpbmcoKTsKKwlhcHBlbmRfc3RyaW5nKGluLCBuKTsKKworCS8qIGdldCB0
aGUgd2hvbGUgbGluZSBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IHRoZSBlbmQgb2YgdG9rZW4uICov
CisJd2hpbGUgKChjID0gaW5wdXQoKSkgIT0gRU9GKSB7CisJCWlmIChjID09ICdcbicpIHsKKwkJ
CXVucHV0KGMpOworCQkJYnJlYWs7CisJCX0KKwkJYzIgPSBjOworCQlhcHBlbmRfc3RyaW5nKCZj
MiwgMSk7CisJfQorCisJcmVzdCA9IHRleHQ7CisJb3V0ID0gZXhwYW5kX29uZV90b2tlbigmcmVz
dCk7CisKKwkvKiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVh
bSAqLworCWVuZCA9IHJlc3QgKyBzdHJsZW4ocmVzdCk7CisJd2hpbGUgKGVuZCA+IHJlc3QpCisJ
CXVucHV0KCotLWVuZCk7CisKKwlmcmVlKHRleHQpOworCisJcmV0dXJuIG91dDsKK30KKworc3Rh
dGljIHZvaWQgYXBwZW5kX2V4cGFuZGVkX3N0cmluZyhjb25zdCBjaGFyICpzdHIpCit7CisJY29u
c3QgY2hhciAqZW5kOworCWNoYXIgKnJlczsKKworCXN0cisrOworCisJcmVzID0gZXhwYW5kX2Rv
bGxhcigmc3RyKTsKKworCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5w
dXQgc3RyZWFtICovCisJZW5kID0gc3RyICsgc3RybGVuKHN0cik7CisJd2hpbGUgKGVuZCA+IHN0
cikKKwkJdW5wdXQoKi0tZW5kKTsKKworCWFwcGVuZF9zdHJpbmcocmVzLCBzdHJsZW4ocmVzKSk7
CisKKwlmcmVlKHJlcyk7Cit9CisKK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpCit7CisJbmV3
X3N0cmluZygpOworCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7CisJQkVHSU4oSEVMUCk7Cit9CisK
K3N0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCkKK3sKKwl5eWx2YWwuc3RyaW5nID0gdGV4
dDsKKwlCRUdJTihJTklUSUFMKTsKK30KKworLyoKKyAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBm
aWxlIHdpdGggZm9sbG93aW5nIG5hbWVzOgorICogLi9uYW1lCisgKiAkKHNyY3RyZWUpL25hbWUK
KyAqIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0
cmVlCisgKiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgorICogUmV0dXJuIE5VTEwgaWYgZmls
ZSBpcyBub3QgZm91bmQuCisgKi8KK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUp
Cit7CisJY2hhciAqZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKKwlGSUxFICpmOworCisJZiA9
IGZvcGVuKG5hbWUsICJyIik7CisJaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9
ICcvJykgeworCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJCWlmIChlbnYpIHsKKwkJCXNwcmlu
dGYoZnVsbG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7CisJCQlmID0gZm9wZW4oZnVsbG5hbWUs
ICJyIik7CisJCX0KKwl9CisJcmV0dXJuIGY7Cit9CisKK3ZvaWQgemNvbmZfaW5pdHNjYW4oY29u
c3QgY2hhciAqbmFtZSkKK3sKKwl5eWluID0gemNvbmZfZm9wZW4obmFtZSk7CisJaWYgKCF5eWlu
KSB7CisJCWZwcmludGYoc3RkZXJyLCAiY2FuJ3QgZmluZCBmaWxlICVzXG4iLCBuYW1lKTsKKwkJ
ZXhpdCgxKTsKKwl9CisKKwljdXJyZW50X2J1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1
ZikpOworCW1lbXNldChjdXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOworCisJ
Y3VycmVudF9maWxlID0gZmlsZV9sb29rdXAobmFtZSk7CisJeXlsaW5lbm8gPSAxOworfQorCit2
b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZpbGUgKml0
ZXI7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKKwlzdHJ1Y3QgYnVm
ZmVyICpidWYgPSB4bWFsbG9jKHNpemVvZigqYnVmKSk7CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9m
KCpidWYpKTsKKworCWN1cnJlbnRfYnVmLT5zdGF0ZSA9IFlZX0NVUlJFTlRfQlVGRkVSOworCXl5
aW4gPSB6Y29uZl9mb3BlbihmaWxlLT5uYW1lKTsKKwlpZiAoIXl5aW4pIHsKKwkJZnByaW50Zihz
dGRlcnIsICIlczolZDogY2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIlxuIiwKKwkJCXpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCksIGZpbGUtPm5hbWUpOworCQlleGl0KDEpOworCX0KKwl5eV9z
d2l0Y2hfdG9fYnVmZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSkpOworCWJ1
Zi0+cGFyZW50ID0gY3VycmVudF9idWY7CisJY3VycmVudF9idWYgPSBidWY7CisKKwljdXJyZW50
X2ZpbGUtPmxpbmVubyA9IHl5bGluZW5vOworCWZpbGUtPnBhcmVudCA9IGN1cnJlbnRfZmlsZTsK
KworCWZvciAoaXRlciA9IGN1cnJlbnRfZmlsZTsgaXRlcjsgaXRlciA9IGl0ZXItPnBhcmVudCkg
eworCQlpZiAoIXN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5uYW1lKSkgeworCQkJZnByaW50Zihz
dGRlcnIsCisJCQkJIlJlY3Vyc2l2ZSBpbmNsdXNpb24gZGV0ZWN0ZWQuXG4iCisJCQkJIkluY2x1
c2lvbiBwYXRoOlxuIgorCQkJCSIgIGN1cnJlbnQgZmlsZSA6ICVzXG4iLCBmaWxlLT5uYW1lKTsK
KwkJCWl0ZXIgPSBmaWxlOworCQkJZG8geworCQkJCWl0ZXIgPSBpdGVyLT5wYXJlbnQ7CisJCQkJ
ZnByaW50ZihzdGRlcnIsICIgIGluY2x1ZGVkIGZyb206ICVzOiVkXG4iLAorCQkJCQlpdGVyLT5u
YW1lLCBpdGVyLT5saW5lbm8gLSAxKTsKKwkJCX0gd2hpbGUgKHN0cmNtcChpdGVyLT5uYW1lLCBm
aWxlLT5uYW1lKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJeXlsaW5lbm8gPSAxOworCWN1
cnJlbnRfZmlsZSA9IGZpbGU7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkK
K3sKKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7CisKKwljdXJyZW50X2ZpbGUgPSBjdXJyZW50X2Zp
bGUtPnBhcmVudDsKKwlpZiAoY3VycmVudF9maWxlKQorCQl5eWxpbmVubyA9IGN1cnJlbnRfZmls
ZS0+bGluZW5vOworCisJcGFyZW50ID0gY3VycmVudF9idWYtPnBhcmVudDsKKwlpZiAocGFyZW50
KSB7CisJCWZjbG9zZSh5eWluKTsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
Uik7CisJCXl5X3N3aXRjaF90b19idWZmZXIocGFyZW50LT5zdGF0ZSk7CisJfQorCWZyZWUoY3Vy
cmVudF9idWYpOworCWN1cnJlbnRfYnVmID0gcGFyZW50OworfQorCitpbnQgemNvbmZfbGluZW5v
KHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfcG9zLmxpbmVubzsKK30KKworY29uc3QgY2hhciAq
emNvbmZfY3VybmFtZSh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3Bvcy5maWxlID8gY3VycmVu
dF9wb3MuZmlsZS0+bmFtZSA6ICI8bm9uZT4iOworfQorCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3pjb25mLnRhYi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNmYmNiCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYwpAQCAtMCwwICsxLDI1MDQgQEAK
Ky8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjAuNC4gICovCisKKy8qIEJp
c29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisKKyAgIENvcHly
aWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK
KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v
dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3Bl
Y2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlu
cworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJp
YnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFz
IHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUg
c2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNr
ZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAg
IHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVt
b3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2Vs
ZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vu
c2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlz
IHNwZWNpYWwgZXhjZXB0aW9uLgorCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBC
aXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNo
YXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAi
c2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hv
dWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIg
bmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlh
YmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3Mu
CisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRl
IGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUg
bm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8q
IElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNv
biB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjAuNCIKKworLyogU2tl
bGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQ
dXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMAorCisvKiBQdXNoIHBhcnNlcnMuICAq
LworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBV
TEwgMQorCisKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25z
LiAgKi8KKworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVs
QGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmlu
ZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQor
CisjZGVmaW5lIFBSSU5URAkJMHgwMDAxCisjZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgorCitp
bnQgY2RlYnVnID0gUFJJTlREOworCitpbnQgeXlsZXgodm9pZCk7CitzdGF0aWMgdm9pZCB5eWVy
cm9yKGNvbnN0IGNoYXIgKmVycik7CitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIg
KmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4u
KTsKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQs
IGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOworCitzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xf
aGFzaFtTWU1CT0xfSEFTSFNJWkVdOworCitzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVu
dSwgKmN1cnJlbnRfZW50cnk7CisKKworCisKKyMgaWZuZGVmIFlZX05VTExQVFIKKyMgIGlmIGRl
ZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBZ
WV9OVUxMUFRSIG51bGxwdHIKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlfTlVMTFBUUiAwCisjICBl
bmRpZgorIyBlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8K
KyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmlu
ZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisj
ZW5kaWYKKworCisvKiBEZWJ1ZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmlu
ZSBZWURFQlVHIDEKKyNlbmRpZgorI2lmIFlZREVCVUcKK2V4dGVybiBpbnQgeXlkZWJ1ZzsKKyNl
bmRpZgorCisvKiBUb2tlbiB0eXBlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5l
IFlZVE9LRU5UWVBFCisgIGVudW0geXl0b2tlbnR5cGUKKyAgeworICAgIFRfTUFJTk1FTlUgPSAy
NTgsCisgICAgVF9NRU5VID0gMjU5LAorICAgIFRfRU5ETUVOVSA9IDI2MCwKKyAgICBUX1NPVVJD
RSA9IDI2MSwKKyAgICBUX0NIT0lDRSA9IDI2MiwKKyAgICBUX0VORENIT0lDRSA9IDI2MywKKyAg
ICBUX0NPTU1FTlQgPSAyNjQsCisgICAgVF9DT05GSUcgPSAyNjUsCisgICAgVF9NRU5VQ09ORklH
ID0gMjY2LAorICAgIFRfSEVMUCA9IDI2NywKKyAgICBUX0hFTFBURVhUID0gMjY4LAorICAgIFRf
SUYgPSAyNjksCisgICAgVF9FTkRJRiA9IDI3MCwKKyAgICBUX0RFUEVORFMgPSAyNzEsCisgICAg
VF9PUFRJT05BTCA9IDI3MiwKKyAgICBUX1BST01QVCA9IDI3MywKKyAgICBUX1RZUEUgPSAyNzQs
CisgICAgVF9ERUZBVUxUID0gMjc1LAorICAgIFRfU0VMRUNUID0gMjc2LAorICAgIFRfSU1QTFkg
PSAyNzcsCisgICAgVF9SQU5HRSA9IDI3OCwKKyAgICBUX1ZJU0lCTEUgPSAyNzksCisgICAgVF9P
UFRJT04gPSAyODAsCisgICAgVF9PTiA9IDI4MSwKKyAgICBUX1dPUkQgPSAyODIsCisgICAgVF9X
T1JEX1FVT1RFID0gMjgzLAorICAgIFRfVU5FUVVBTCA9IDI4NCwKKyAgICBUX0xFU1MgPSAyODUs
CisgICAgVF9MRVNTX0VRVUFMID0gMjg2LAorICAgIFRfR1JFQVRFUiA9IDI4NywKKyAgICBUX0dS
RUFURVJfRVFVQUwgPSAyODgsCisgICAgVF9DTE9TRV9QQVJFTiA9IDI4OSwKKyAgICBUX09QRU5f
UEFSRU4gPSAyOTAsCisgICAgVF9FT0wgPSAyOTEsCisgICAgVF9WQVJJQUJMRSA9IDI5MiwKKyAg
ICBUX0FTU0lHTiA9IDI5MywKKyAgICBUX0FTU0lHTl9WQUwgPSAyOTQsCisgICAgVF9PUiA9IDI5
NSwKKyAgICBUX0FORCA9IDI5NiwKKyAgICBUX0VRVUFMID0gMjk3LAorICAgIFRfTk9UID0gMjk4
CisgIH07CisjZW5kaWYKKworLyogVmFsdWUgdHlwZS4gICovCisjaWYgISBkZWZpbmVkIFlZU1RZ
UEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKKwordW5pb24gWVlTVFlQRQorewor
CisKKwljaGFyICpzdHJpbmc7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IHN5bWJvbCAq
c3ltYm9sOworCXN0cnVjdCBleHByICpleHByOworCXN0cnVjdCBtZW51ICptZW51OworCWNvbnN0
IHN0cnVjdCBrY29uZl9pZCAqaWQ7CisJZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOworCisK
K307CisKK3R5cGVkZWYgdW5pb24gWVlTVFlQRSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9J
U19UUklWSUFMIDEKKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKwor
ZXh0ZXJuIFlZU1RZUEUgeXlsdmFsOworCitpbnQgeXlwYXJzZSAodm9pZCk7CisKKworCisvKiBD
b3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyogSW5j
bHVkZSBrY29uZl9pZC5jIGhlcmUgc28gaXQgY2FuIHNlZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAq
LworI2luY2x1ZGUgImtjb25mX2lkLmMiCisKKworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hv
cnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5
eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsK
KyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBl
X2ludDg7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50
MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNl
bmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVf
aW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisK
KyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0la
RV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0la
RV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVAorIyAgaW5jbHVkZSA8c3RkZGVm
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVf
VCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRp
ZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNp
Zm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAg
aWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24t
cnVudGltZSIsIE1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVm
aW5lIFlZXyhNc2dpZCkgTXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFlZX0FUVFJJ
QlVURQorIyBpZiAoZGVmaW5lZCBfX0dOVUNfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgJiYgKDIgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18g
PT0gMiAmJiA5NiA8PSBfX0dOVUNfTUlOT1JfXykpKSAgXAorICAgICB8fCBkZWZpbmVkIF9fU1VO
UFJPX0MgJiYgMHg1MTEwIDw9IF9fU1VOUFJPX0MKKyMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3Bl
YykgX19hdHRyaWJ1dGVfXyhTcGVjKQorIyBlbHNlCisjICBkZWZpbmUgWVlfQVRUUklCVVRFKFNw
ZWMpIC8qIGVtcHR5ICovCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBZWV9BVFRSSUJVVEVf
UFVSRQorIyBkZWZpbmUgWVlfQVRUUklCVVRFX1BVUkUgICBZWV9BVFRSSUJVVEUgKChfX3B1cmVf
XykpCisjZW5kaWYKKworI2lmbmRlZiBZWV9BVFRSSUJVVEVfVU5VU0VECisjIGRlZmluZSBZWV9B
VFRSSUJVVEVfVU5VU0VEIFlZX0FUVFJJQlVURSAoKF9fdW51c2VkX18pKQorI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZCBfTm9yZXR1cm4gXAorICAgICAmJiAoIWRlZmluZWQgX19TVERDX1ZFUlNJT05f
XyB8fCBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyKQorIyBpZiBkZWZpbmVkIF9NU0NfVkVSICYm
IDEyMDAgPD0gX01TQ19WRVIKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1
cm4pCisjIGVsc2UKKyMgIGRlZmluZSBfTm9yZXR1cm4gWVlfQVRUUklCVVRFICgoX19ub3JldHVy
bl9fKSkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2Fy
bmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9f
R05VQ19fCisjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChFKSkKKyNlbHNlCisjIGRlZmluZSBZ
WVVTRShFKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQw
NyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCisvKiBTdXBwcmVzcyBhbiBpbmNv
cnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCisj
IGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCisgICAgX1ByYWdt
YSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxpemVkXCIiKQorIyBkZWZpbmUgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgcG9wIikKKyNlbHNlCisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQor
I2VuZGlmCisjaWZuZGVmIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRl
ZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisjZW5kaWYKKyNpZm5kZWYgWVlfSU5JVElBTF9W
QUxVRQorIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgLyogTm90aGluZy4gKi8KKyNl
bmRpZgorCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKwor
LyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNz
YXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYgWVlT
VEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJH
X0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19BTExP
QyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxtYWxs
b2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUgYWxs
b2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQor
IyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MKKyMg
ICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CisgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmguICAq
LworIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUworIyAgICAgIGRlZmluZSBFWElUX1NVQ0NFU1Mg
MAorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYK
KworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQYWNpZnkgR0NDJ3MgJ2VtcHR5IGlmLWJv
ZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1w
dHkgKi87IH0gd2hpbGUgKDApCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAg
LyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0
b20gb2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwg
YXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2Nh
IChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisg
ICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3Rh
Y2sgc2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiBy
ZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNU
QUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElN
VU0gWVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAm
JiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKKyAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExP
QyB8fCBkZWZpbmVkIG1hbGxvYykgXAorICAgICAgICAgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8
fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKKyMgICAgZGVmaW5l
IEVYSVRfU1VDQ0VTUyAwCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlNQUxMT0MK
KyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAh
IGRlZmluZWQgRVhJVF9TVUNDRVNTCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVm
IFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYm
ICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2Vu
ZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNp
ZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVz
IFwKKyAgICAgICAgIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lT
X1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55
IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNz
X2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUg
bWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwor
IyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEp
CisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBz
dGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZ
VEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZ
U1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKyMgZGVmaW5lIFlZQ09Q
WV9ORUVERUQgMQorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8g
dGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tT
SVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0
YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAg
QWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0
CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBT
dGFjaykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFlZQ09QWSAoJnl5cHRyLT5T
dGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IFN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0
YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKyAgICAgICAgeXlwdHIgKz0geXluZXdieXRl
cyAvIHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIFlZQ09QWV9O
RUVERUQgJiYgWVlDT1BZX05FRURFRAorLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gU1JDIHRv
IERTVC4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICov
CisjIGlmbmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19f
CisjICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9t
ZW1jcHkgKERzdCwgU3JjLCAoQ291bnQpICogc2l6ZW9mICgqKFNyYykpKQorIyAgZWxzZQorIyAg
IGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSAgICAgICAgICAgICAgXAorICAgICAgZG8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFlZU0laRV9UIHl5
aTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZvciAoeXlpID0gMDsgeXlp
IDwgKENvdW50KTsgeXlpKyspICAgXAorICAgICAgICAgICAgKERzdClbeXlpXSA9IChTcmMpW3l5
aV07ICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgd2hpbGUgKDApCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8q
ICFZWUNPUFlfTkVFREVEICovCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0
ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDExCisvKiBZWUxBU1QgLS0g
TGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMzMyCisKKy8qIFlZ
TlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICA0
NAorLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5O
VFMgIDUzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5S
VUxFUyAgMTI5CisvKiBZWU5TVEFURVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5l
IFlZTlNUQVRFUyAgMjExCisKKy8qIFlZVFJBTlNMQVRFW1lZWF0gLS0gU3ltYm9sIG51bWJlciBj
b3JyZXNwb25kaW5nIHRvIFlZWCBhcyByZXR1cm5lZAorICAgYnkgeXlsZXgsIHdpdGggb3V0LW9m
LWJvdW5kcyBjaGVja2luZy4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlN
QVhVVE9LICAgMjk4CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgp
IDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRS
QU5TTEFURVtUT0tFTi1OVU1dIC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBUT0tF
Ti1OVU0KKyAgIGFzIHJldHVybmVkIGJ5IHl5bGV4LCB3aXRob3V0IG91dC1vZi1ib3VuZHMgY2hl
Y2tpbmcuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KK3sK
KyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAg
IDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzCit9OworCisjaWYg
WVlERUJVRworICAvKiBZWVJMSU5FW1lZTl0gLS0gU291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1i
ZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxp
bmVbXSA9Cit7CisgICAgICAgMCwgICAxMTQsICAgMTE0LCAgIDExNCwgICAxMTYsICAgMTE2LCAg
IDEyMCwgICAxMjUsICAgMTI3LCAgIDEyOCwKKyAgICAgMTI5LCAgIDEzMCwgICAxMzEsICAgMTMy
LCAgIDEzNiwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLAorICAgICAxNDAsICAg
MTQwLCAgIDE0MCwgICAxNDAsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ3LCAgIDE0OCwgICAx
NDksCisgICAgIDE1MCwgICAxNTQsICAgMTU1LCAgIDE2MSwgICAxNjgsICAgMTczLCAgIDE4MCwg
ICAxODksICAgMTkxLCAgIDE5MiwKKyAgICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LCAgIDE5
OSwgICAyMDcsICAgMjEzLCAgIDIyMywgICAyMjksICAgMjM1LAorICAgICAyNDEsICAgMjQ0LCAg
IDI0NiwgICAyNTksICAgMjYwLCAgIDI2NSwgICAyNzUsICAgMjgwLCAgIDI4OCwgICAyOTEsCisg
ICAgIDI5MywgICAyOTQsICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMzAwLCAgIDMwNiwgICAzMTcs
ICAgMzIzLCAgIDMzMywKKyAgICAgMzM1LCAgIDM0MCwgICAzNDgsICAgMzU2LCAgIDM1OSwgICAz
NjEsICAgMzYyLCAgIDM2MywgICAzNjgsICAgMzc1LAorICAgICAzODAsICAgMzg4LCAgIDM5MSwg
ICAzOTMsICAgMzk0LCAgIDM5NSwgICAzOTgsICAgNDA3LCAgIDQxNCwgICA0MTksCisgICAgIDQy
NSwgICA0NDMsICAgNDQ1LCAgIDQ0NiwgICA0NDcsICAgNDUwLCAgIDQ1OCwgICA0NjAsICAgNDYx
LCAgIDQ2NCwKKyAgICAgNDcxLCAgIDQ3MywgICA0NzgsICAgNDc5LCAgIDQ4MiwgICA0ODMsICAg
NDg0LCAgIDQ4OCwgICA0ODksICAgNDkyLAorICAgICA0OTMsICAgNDk2LCAgIDQ5NywgICA0OTgs
ICAgNDk5LCAgIDUwMCwgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsCisgICAgIDUwNSwgICA1
MDYsICAgNTEwLCAgIDUxMiwgICA1MTMsICAgNTE2LCAgIDUxNywgICA1MjEsICAgNTI0LCAgIDUy
NQorfTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgMAorLyog
WVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1O
VU0uCisgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5T
LCBub250ZXJtaW5hbHMuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9
Cit7CisgICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVF9NQUlOTUVOVSIsICJUX01F
TlUiLCAiVF9FTkRNRU5VIiwKKyAgIlRfU09VUkNFIiwgIlRfQ0hPSUNFIiwgIlRfRU5EQ0hPSUNF
IiwgIlRfQ09NTUVOVCIsICJUX0NPTkZJRyIsCisgICJUX01FTlVDT05GSUciLCAiVF9IRUxQIiwg
IlRfSEVMUFRFWFQiLCAiVF9JRiIsICJUX0VORElGIiwgIlRfREVQRU5EUyIsCisgICJUX09QVElP
TkFMIiwgIlRfUFJPTVBUIiwgIlRfVFlQRSIsICJUX0RFRkFVTFQiLCAiVF9TRUxFQ1QiLCAiVF9J
TVBMWSIsCisgICJUX1JBTkdFIiwgIlRfVklTSUJMRSIsICJUX09QVElPTiIsICJUX09OIiwgIlRf
V09SRCIsICJUX1dPUkRfUVVPVEUiLAorICAiVF9VTkVRVUFMIiwgIlRfTEVTUyIsICJUX0xFU1Nf
RVFVQUwiLCAiVF9HUkVBVEVSIiwgIlRfR1JFQVRFUl9FUVVBTCIsCisgICJUX0NMT1NFX1BBUkVO
IiwgIlRfT1BFTl9QQVJFTiIsICJUX0VPTCIsICJUX1ZBUklBQkxFIiwgIlRfQVNTSUdOIiwKKyAg
IlRfQVNTSUdOX1ZBTCIsICJUX09SIiwgIlRfQU5EIiwgIlRfRVFVQUwiLCAiVF9OT1QiLCAiJGFj
Y2VwdCIsICJpbnB1dCIsCisgICJzdGFydCIsICJtYWlubWVudV9zdG10IiwgInN0bXRfbGlzdCIs
ICJvcHRpb25fbmFtZSIsICJjb21tb25fc3RtdCIsCisgICJvcHRpb25fZXJyb3IiLCAiY29uZmln
X2VudHJ5X3N0YXJ0IiwgImNvbmZpZ19zdG10IiwKKyAgIm1lbnVjb25maWdfZW50cnlfc3RhcnQi
LCAibWVudWNvbmZpZ19zdG10IiwgImNvbmZpZ19vcHRpb25fbGlzdCIsCisgICJjb25maWdfb3B0
aW9uIiwgInN5bWJvbF9vcHRpb24iLCAic3ltYm9sX29wdGlvbl9saXN0IiwKKyAgInN5bWJvbF9v
cHRpb25fYXJnIiwgImNob2ljZSIsICJjaG9pY2VfZW50cnkiLCAiY2hvaWNlX2VuZCIsCisgICJj
aG9pY2Vfc3RtdCIsICJjaG9pY2Vfb3B0aW9uX2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9p
Y2VfYmxvY2siLAorICAiaWZfZW50cnkiLCAiaWZfZW5kIiwgImlmX3N0bXQiLCAiaWZfYmxvY2si
LCAibWVudSIsICJtZW51X2VudHJ5IiwKKyAgIm1lbnVfZW5kIiwgIm1lbnVfc3RtdCIsICJtZW51
X2Jsb2NrIiwgInNvdXJjZV9zdG10IiwgImNvbW1lbnQiLAorICAiY29tbWVudF9zdG10IiwgImhl
bHBfc3RhcnQiLCAiaGVscCIsICJkZXBlbmRzX2xpc3QiLCAiZGVwZW5kcyIsCisgICJ2aXNpYmls
aXR5X2xpc3QiLCAidmlzaWJsZSIsICJwcm9tcHRfc3RtdF9vcHQiLCAicHJvbXB0IiwgImVuZCIs
ICJubCIsCisgICJpZl9leHByIiwgImV4cHIiLCAibm9uY29uc3Rfc3ltYm9sIiwgInN5bWJvbCIs
ICJ3b3JkX29wdCIsCisgICJhc3NpZ25tZW50X3N0bXQiLCAiYXNzaWduX3ZhbCIsIFlZX05VTExQ
VFIKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtOVU1dIC0tIChF
eHRlcm5hbCkgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAoaW50ZXJuYWwp
IHN5bWJvbCBudW1iZXIgTlVNICh3aGljaCBtdXN0IGJlIHRoYXQgb2YgYSB0b2tlbikuICAqLwor
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAy
NTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2
NCwKKyAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAg
IDI3MiwgICAyNzMsICAgMjc0LAorICAgICAyNzUsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5
LCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAyODQsCisgICAgIDI4NSwgICAyODYsICAg
Mjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTIsICAgMjkzLCAgIDI5NCwKKyAg
ICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMjk4Cit9OworIyBlbmRpZgorCisjZGVmaW5lIFlZUEFD
VF9OSU5GIC05MgorCisjZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwK
KyAgKCEhKChZeXN0YXRlKSA9PSAoLTkyKSkpCisKKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC04OQor
CisjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAorICAwCisK
KyAgLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlv
biBkZXNjcmliaW5nCisgICAgIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDIxLCAgICAzOCwgICAtOTIsICAgICA0LCAgIC05Miwg
ICAtOTIsICAgMTU3LCAgICAyMywgICAtOTIsICAgLTkyLAorICAgICAtMTksICAgLTkyLCAgIDE5
MSwgICAtMTYsICAgIDM4LCAgIC0xMywgICAgMzgsICAgICA2LCAgICAyNCwgICAgMzgsCisgICAg
ICA0OCwgICAgNDgsICAgIDM0LCAgICA0MywgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwKKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgIDk2LCAgIC05MiwgICAgNDQs
ICAgMTExLCAgIC05MiwgICAtOTIsICAgLTkyLAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCisgICAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
ICA4MywKKyAgICAgLTkyLCAgICA4OSwgICAtOTIsICAgMTE2LCAgIC05MiwgICAxMzMsICAgLTky
LCAgIDEzNCwgICAxNDYsICAgLTkyLAorICAgICAgMzQsICAgIDM0LCAgIDExMywgICAtOTIsICAg
IDczLCAgIC05MiwgICAxNTAsICAgIDYyLCAgIDE1MSwgICAgMzEsCisgICAgIDEyMywgICAyNTgs
ICAgMjkzLCAgIDI4MiwgICAgLTIsICAgMjgyLCAgIDIyNSwgICAtOTIsICAgLTkyLCAgIC05MiwK
KyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgIDMwLCAgIC05MiwgICAtOTIsICAgIDM0LCAgICAz
NCwgICAgNjUsICAgIDY1LAorICAgICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjUsICAgLTkyLCAg
IC05MiwgICAxNTIsICAgLTkyLCAgIDE1MywgICAxNTQsCisgICAgIDExMCwgICAgMzgsICAgIDM4
LCAgICAzNCwgICAgNDgsICAgIDQ4LCAgICA2NSwgICAtOTIsICAgMjAyLCAgIC05MiwKKyAgICAg
LTkyLCAgIC05MiwgICAtOTIsICAgMjAzLCAgIC05MiwgICAtOTIsICAgMTgxLCAgICAzOCwgICAg
MzgsICAgIDQ4LAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIDIw
NSwgICAtOTIsICAgIDgwLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgMTc5LCAgIC05MiwgICAtOTIsICAg
LTkyLAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIs
ICAgIDM0LCAgIDIwNSwgICAxODUsCisgICAgIDIwNSwgICAtMTEsICAgMjA1LCAgIDIwNSwgICAg
NjUsICAgIDM2LCAgIDE4NiwgICAtOTIsICAgLTkyLCAgIDIwNSwKKyAgICAgMTg3LCAgIDIwNSwg
ICAgMzQsICAgLTkyLCAgIDExNSwgICAxODgsICAgLTkyLCAgIC05MiwgICAyMDEsICAgMjE0LAor
ICAgICAyMTUsICAgMjA1LCAgIDE5NiwgICAtOTIsICAgLTkyLCAgIDIxNywgICAtOTIsICAgMjE4
LCAgICA4MSwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAyMTksICAg
IDM4LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyCit9OworCisgIC8qIFlZ
REVGQUNUW1NUQVRFLU5VTV0gLS0gRGVmYXVsdCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNU
QVRFLU5VTS4KKyAgICAgUGVyZm9ybWVkIHdoZW4gWVlUQUJMRSBkb2VzIG5vdCBzcGVjaWZ5IHNv
bWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBl
cnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAg
ICAgIDcsICAgICAwLCAgIDEwNywgICAgIDAsICAgICAzLCAgICAgNywgICAgIDAsICAgICA3LCAg
IDEwMiwgICAxMDMsCisgICAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxMjUsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxNSwgICAgMjAsICAgIDE2LCAgICAxNywgICAgMjIsICAgIDE4LAorICAgICAgMTks
ICAgIDIxLCAgICAyMywgICAgIDAsICAgIDI0LCAgICAgMCwgICAgIDAsICAgICA4LCAgICAzNywg
ICAgMjcsCisgICAgICAzNywgICAgMjgsICAgIDU5LCAgICA2OSwgICAgIDksICAgIDc0LCAgICAy
NSwgICAgOTYsICAgIDgyLCAgICAxMCwKKyAgICAgIDI5LCAgICA5MSwgICAgMjYsICAgIDExLCAg
ICAzMCwgICAxMDgsICAgICAyLCAgICAgNiwgICAgMTQsICAgICAwLAorICAgICAxMDQsICAgICAw
LCAgIDEyNiwgICAgIDAsICAgMTA1LCAgICAgMCwgICAxMjIsICAgICAwLCAgICAgMCwgICAxMjQs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMywgICAxMTEsICAgMTA2LCAgICAgMCwgICAx
MjgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5MSwg
ICAgIDAsICAgICAwLCAgICA3OCwgICAgODYsICAgIDU1LAorICAgICAgODcsICAgIDMzLCAgICAz
NSwgICAgIDAsICAgMTE5LCAgICA3MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgMTI5LCAgICAgMCwgICAgMTMsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA1MSwgICAgIDAsICAgIDQzLAorICAgICAgNDIsICAgIDM4LCAgICAzOSwgICAg
IDAsICAgIDQxLCAgICA0MCwgICAgIDAsICAgICAwLCAgIDEwMCwgICAgIDAsCisgICAgICA2Mywg
ICAgNjQsICAgIDYwLCAgICA2MiwgICAgNjEsICAgIDcwLCAgICA1OCwgICAgNTcsICAgIDc1LCAg
ICA3NywKKyAgICAgIDczLCAgICA3NiwgICAgNzIsICAgMTA5LCAgICA5OCwgICAgIDAsICAgIDk3
LCAgICA4MywgICAgODUsICAgIDgxLAorICAgICAgODQsICAgIDgwLCAgICA5MywgICAgOTQsICAg
IDkyLCAgIDExOCwgICAxMjAsICAgMTIxLCAgIDExNywgICAxMTIsCisgICAgIDExMywgICAxMTQs
ICAgMTE1LCAgIDExNiwgICAxMjcsICAgIDMyLCAgICA4OSwgICAgIDAsICAgMTA5LCAgICAgMCwK
KyAgICAgMTA5LCAgIDEwOSwgICAxMDksICAgMTA5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5
MCwgICAgNjcsICAgMTA5LAorICAgICAgIDAsICAgMTA5LCAgICAgMCwgICAgOTksICAgICAwLCAg
ICAgMCwgICAgNDQsICAgMTAxLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMDksICAgIDUz
LCAgICA1MCwgICAgMzEsICAgICAwLCAgICA2NiwgICAgIDAsICAgMTEwLCAgICA5NSwKKyAgICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAgMCwgICAgIDAsICAgIDUyLCAgICA2NSwgICAg
NjgsICAgIDQ5LAorICAgICAgNTQKK307CisKKyAgLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0KK3sKKyAgICAgLTkyLCAgIC05
MiwgICAyNDksICAgLTkyLCAgIDI1MiwgICAtOTIsICAgIC05LCAgIC02NywgICAtOTIsICAgLTky
LAorICAgICAtOTIsICAgLTkyLCAgIDIyMCwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsCisgICAgICAzNSwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIs
ICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAgIDEwMCwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDE3NywgICAxOTUsICAgLTY1LAorICAg
ICAtOTIsICAgLTkyLCAgIDEzNywgICAgLTEsICAgIDI2LCAgIC05MiwgICAxNDEsICAgLTY5LCAg
IC0xNSwgICAtOTEsCisgICAgIC05MiwgICAtOTIsICAgLTkyCit9OworCisgIC8qIFlZREVGR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10g
PQoreworICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAzNiwgICAgMzcs
ICAgMTIwLCAgICAzOCwgICAgMzksCisgICAgICA0MCwgICAgNDEsICAgIDc5LCAgIDEyMSwgICAx
MjIsICAgMTc1LCAgIDIwNiwgICAgNDIsICAgIDQzLCAgIDEzNiwKKyAgICAgIDQ0LCAgICA4MSwg
ICAxMzIsICAgIDgyLCAgICA0NSwgICAxNDAsICAgIDQ2LCAgICA4MywgICAgNDcsICAgIDQ4LAor
ICAgICAxNDksICAgIDQ5LCAgICA4NSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAxMjMsICAgMTI0
LCAgICA4NiwgICAxMjUsCisgICAgICA4NCwgICAxNDYsICAgMTY5LCAgIDE3MCwgICAgNTMsICAg
ICA3LCAgIDE4MywgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDYzLCAgICA1NCwgICAxMDYK
K307CisKKyAgLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0gLS0gV2hhdCB0byBkbyBpbiBz
dGF0ZSBTVEFURS1OVU0uICBJZgorICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElm
IG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hvc2UKKyAgICAgbnVtYmVyIGlzIHRoZSBvcHBv
c2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KK3sKKyAgICAgIDEwLCAgICA5MywgICAgOTQsICAgMTgy
LCAgICAxMSwgICAgNjcsICAgIDY4LCAgIDE1OCwgICAxNTksICAgMTYwLAorICAgICAxNjEsICAg
MTYyLCAgIDE2MywgICAgNTksICAgMTMxLCAgICA2MSwgICAxMzQsICAgIDU3LCAgICA2NSwgICAx
NTMsCisgICAgICA1OCwgICAxNTQsICAgMTQzLCAgICA2MCwgICAgIDEsICAgMTc0LCAgICAgMSwg
ICAxNTYsICAgMTU3LCAgICA5NiwKKyAgICAgIDk3LCAgIC0zNCwgICAxMDgsICAgIDYyLCAgIDE0
NCwgICAtMzQsICAgLTM0LCAgIC0zNCwgICAtMzQsICAgLTM0LAorICAgICAtMzQsICAgLTM0LCAg
IC0zNCwgICAxMDksICAgMTcxLCAgIC0zNCwgICAtMzQsICAgMTEwLCAgIC0zNCwgICAxMTEsCisg
ICAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgLTM0LCAgIDExNywgICAgIDIs
ICAgMTE4LCAgICA1NSwKKyAgICAgIDY0LCAgICA2NiwgICAgNjksICAgMTkyLCAgIDE1NSwgICAg
IDgsICAgICA5LCAgIDExOSwgICAtMzQsICAgIDcwLAorICAgICAgOTYsICAgIDk3LCAgIDE5Mywg
ICAxMzUsICAgMTM4LCAgICA2NiwgICAxNDcsICAgIDcxLCAgIDE1MywgICAgNzUsCisgICAgIDE1
NCwgICAxMDgsICAgIDc3LCAgIDE5MSwgICAtNzksICAgLTc5LCAgIC03OSwgICAtNzksICAgLTc5
LCAgIC03OSwKKyAgICAgLTc5LCAgIC03OSwgICAgNjYsICAgIDY5LCAgIC03OSwgICAtNzksICAg
MTEwLCAgICA3NiwgICAxODQsICAgMTcyLAorICAgICAxNzMsICAgMTA1LCAgICA5OCwgICAgOTks
ICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTE4LCAgIDEzNywgICAxNDIsCisgICAgIDE2OCwgICAx
NTEsICAgIDc4LCAgIDE5OCwgICAxODEsICAgMTAzLCAgIDE1MiwgICAtNzksICAgMTM5LCAgICA4
NywKKyAgICAgMTQ4LCAgICA5NiwgICAgOTcsICAgLTM2LCAgIDEwOCwgICAgODgsICAgMTc5LCAg
IC0zNiwgICAtMzYsICAgLTM2LAorICAgICAtMzYsICAgLTM2LCAgIC0zNiwgICAtMzYsICAgLTM2
LCAgIDEwOSwgICAxNjcsICAgLTM2LCAgIC0zNiwgICAxMTAsCisgICAgIC0zNiwgICAxMTEsICAg
MTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAtMzYsICAgMTE3LCAgICA5NSwKKyAg
ICAgMTE4LCAgIDE5OSwgICAgODksICAgIDk2LCAgICA5NywgICAgOTYsICAgIDk3LCAgICAtNSwg
ICAgMTMsICAgMTE5LAorICAgICAtMzYsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgOTAsCisgICAgICA5MSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMx
LCAgICAzMiwgICAgOTIsICAgMTQxLCAgICAzMywgICAxNTAsICAgMTA0LCAgIDEwNywgICAxNjQs
ICAgMTY1LAorICAgICAxNjYsICAgIC00LCAgICAxMywgICAgMzQsICAgIDM1LCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgIDE3Niwg
ICAyMTAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgMTc3LCAgIDE3OCwgICAgMzMsICAgMTgy
LAorICAgICAgOTcsICAgMTg2LCAgIDE5NCwgICAxOTYsICAgMjAwLCAgIC04OCwgICAxMDgsICAg
IDM0LCAgICAzNSwgICAtODgsCisgICAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgs
ICAgLTg4LCAgIC04OCwgICAyMDEsICAgMjA1LCAgIC04OCwKKyAgICAgLTg4LCAgIDExMCwgICAt
ODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LAorICAg
ICAyMDIsICAgMjAzLCAgIDExOCwgICAyMDcsICAgMjA4LCAgIDIwOSwgICAgNTYsICAgIDEyLCAg
IDEzMywgICAxMDgsCisgICAgICA4MCwgICAxNTIsICAgLTg4LCAgIC01NiwgICAtNTYsICAgMTgw
LCAgIC01NiwgICAtNTYsICAgLTU2LCAgIC01NiwKKyAgICAgMTA5LCAgICAgMCwgICAtNTYsICAg
LTU2LCAgIDExMCwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTQ1LAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExOCwgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAxMzAsICAgLTU2LCAgICAy
MiwgICAgMjMsICAgIDE1LCAgICAxNiwKKyAgICAgICAwLCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgIDAsICAgICAwLCAgICAyMiwgICAgMjMsICAgMTg1LAorICAgICAgIDAsICAgMTg3
LCAgIDE4OCwgICAxODksICAgMTkwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNCwgICAgMzUs
CisgICAgIDE5NSwgICAgIDAsICAgMTk3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzNCwKKyAgICAgIDM1LCAgICAgMCwgICAyMDQKK307CisKK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KK3sKKyAgICAgICAxLCAgICA3MCwgICAgNzEs
ICAgIDE0LCAgICAgMCwgICAgMjAsICAgIDIxLCAgICA5OCwgICAgOTksICAgMTAwLAorICAgICAx
MDEsICAgMTAyLCAgIDEwMywgICAgMTQsICAgIDgxLCAgICAxNiwgICAgODEsICAgIDM2LCAgICAx
OSwgICAgODYsCisgICAgICAzNiwgICAgODYsICAgIDI0LCAgICAzNiwgICAgIDMsICAgMTE2LCAg
ICAgMywgICAgOTYsICAgIDk3LCAgICA0MCwKKyAgICAgIDQxLCAgICAgMCwgICAgIDEsICAgIDI3
LCAgICAzNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgMTEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMzYsICAgIDI3LCAgICAzNiwKKyAgICAgIDM2LCAgICAyNywgICAgMjgsICAgIDI3LCAgICAz
NCwgICAgMjcsICAgIDI4LCAgICAzNiwgICAgMzcsICAgIDM1LAorICAgICAgNDAsICAgIDQxLCAg
ICAzNiwgICAgODIsICAgIDgzLCAgICAyNywgICAgODUsICAgIDQzLCAgIDE0NSwgICAgMzYsCisg
ICAgIDE0NSwgICAgIDEsICAgIDM4LCAgIDE3NCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMjcsICAgIDI4LCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAgMSwgICAxNjcsICAgMTE0LAorICAgICAxMTUsICAgIDM5LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDI3LCAgICA4MiwgICAgODMsCisgICAgIDEx
MSwgICAgODUsICAgICAxLCAgIDE4MiwgICAxMjksICAgIDQyLCAgICAzNiwgICAgMzcsICAgIDgz
LCAgICAzNiwKKyAgICAgIDg1LCAgICA0MCwgICAgNDEsICAgICAwLCAgICAgMSwgICAgMzYsICAg
MTI3LCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMjYsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAz
NiwKKyAgICAgIDI3LCAgICAzNiwgICAgMzYsICAgIDQwLCAgICA0MSwgICAgNDAsICAgIDQxLCAg
ICAgMCwgICAgIDEsICAgIDM2LAorICAgICAgMzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsCisgICAgICAzNiwgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAg
ICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDgzLCAgICAyNywgICAgODUsICAgIDM2LCAgICAzNiwg
ICAgMzYsICAgIDM2LAorICAgICAgMzYsICAgICAwLCAgICAgMSwgICAgMzYsICAgIDM3LCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAgMSwgICAyMDUsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDEzLCAgICAzNiwgICAgMjcs
ICAgIDE0LAorICAgICAgNDEsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAgMCwgICAg
IDEsICAgIDM2LCAgICAzNywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsICAgIDQyLCAgICAxNCwKKyAgICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LAorICAgICAgMzYsICAgIDM2LCAgICAyNywgICAgMzYsICAgIDM2LCAgICAzNiwgICAgIDcsICAg
ICA1LCAgICA4MSwgICAgIDEsCisgICAgICA0MCwgICAgMzYsICAgIDM3LCAgICAgNSwgICAgIDYs
ICAgMTI4LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAtMSwgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDg0LAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsICAgIDM3
LCAgICAxNCwgICAgMTUsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAxNCwgICAgMTUsICAgMTY4LAorICAgICAgLTEs
ICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwg
ICAgMzcsCisgICAgIDE3OSwgICAgLTEsICAgMTgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzNiwKKyAgICAgIDM3LCAgICAtMSwgICAxOTEKK307CisKKyAg
LyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nl
c3NpbmcKKyAgICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMzYsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA4OSwgICAgMjcsICAgIDI4LAorICAgICAgODcsICAg
ICAwLCAgICA0OCwgICAgIDEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksCisgICAgICAxMCwgICAgMTEsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI3LCAgICAz
NiwgICAgMzcsICAgIDQ5LCAgICA1MCwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAg
ICA2MSwgICAgNjIsICAgIDY0LCAgICA2OCwgICAgNzAsICAgIDcyLCAgICA3MywgICAgNzUsCisg
ICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4OCwgICAgOTUsICAgIDM2LCAgICA0NiwgICAgMzYs
ICAgIDM2LCAgICA4NywKKyAgICAgIDM2LCAgICA4NywgICAgMjcsICAgIDk0LCAgICAzNiwgICAg
ODcsICAgIDI3LCAgICA5MiwgICAgOTIsICAgIDI4LAorICAgICAgMzUsICAgIDQzLCAgICA5MSwg
ICAgOTIsICAgIDkzLCAgICAzNiwgICAgIDEsICAgIDM4LCAgICAgMSwgICAgNTYsCisgICAgICA1
NiwgICAgNjUsICAgIDY3LCAgICA3MSwgICAgODQsICAgIDc2LCAgICA4MiwgICAgMzYsICAgIDM2
LCAgICAzNiwKKyAgICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDkxLCAgICA5MSwgICAgMzYsICAg
IDQwLCAgICA0MSwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgNDIs
ICAgIDM2LCAgICAzOSwgICAgOTYsICAgIDM2LCAgICAgMSwgICAgMTIsCisgICAgICAxNiwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjUsICAgIDI3LCAgICAz
NiwKKyAgICAgIDUxLCAgICA1NywgICAgNTgsICAgIDgwLCAgICA4MSwgICAgODMsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMzYsICAgIDUxLCAgICA2NiwgICAgODEsICAgIDgz
LCAgICA1MCwgICAgNjMsICAgIDg4LCAgICA1MCwgICAgNjQsCisgICAgICA2OSwgICAgNzUsICAg
IDg4LCAgICAyNCwgICAgMzYsICAgIDgyLCAgICA4NSwgICAgNTAsICAgIDY0LCAgICA3NCwKKyAg
ICAgIDc1LCAgICA4OCwgICAgMzYsICAgIDUxLCAgICA4MywgICAgMzQsICAgIDkxLCAgICA5MSwg
ICAgOTMsICAgIDkzLAorICAgICAgOTMsICAgIDkzLCAgICA5MywgICAgOTMsICAgIDM2LCAgICAz
NiwgICAgMzYsICAgIDI2LCAgICA4NywgICAgODYsCisgICAgICA4NywgICAgOTEsICAgIDkyLCAg
ICA5MiwgICAgOTMsICAgIDU5LCAgICAgMSwgICAgMTMsICAgIDM2LCAgICA4NywKKyAgICAgIDg2
LCAgICA5MiwgICAgMTQsICAgIDkwLCAgICA5MSwgICAgOTAsICAgIDM2LCAgICA5MCwgICAgOTAs
ICAgIDkwLAorICAgICAgOTAsICAgIDkzLCAgICAyNywgICAgMzYsICAgIDM2LCAgICA5MCwgICAg
MzYsICAgIDkwLCAgICA5MSwgICAgMzYsCisgICAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwg
ICAgOTAsICAgIDQyLCAgICA2MCwgICAgMzYsICAgIDM2LCAgICAzNiwKKyAgICAgIDg3Cit9Owor
CisgIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlO
IGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAg
ICAgIDAsICAgIDQ0LCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OCwgICAgNDgsCisgICAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDgsICAgIDQ5
LCAgICA0OSwgICAgNDksICAgIDQ5LCAgICA0OSwKKyAgICAgIDQ5LCAgICA0OSwgICAgNDksICAg
IDQ5LCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUwLAorICAgICAgNTAs
ICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1Niwg
ICAgNTYsCisgICAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1
NywgICAgNTcsICAgIDU3LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNTksICAgIDYwLCAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LAorICAgICAgNjUsICAgIDY1
LCAgICA2NSwgICAgNjUsICAgIDY1LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjcs
CisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcxLCAgICA3MSwgICAg
NzEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc2LCAgICA3Niwg
ICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLAorICAgICAgODEsICAgIDgyLCAgICA4
MiwgICAgODIsICAgIDgyLCAgICA4MywgICAgODQsICAgIDg0LCAgICA4NCwgICAgODUsCisgICAg
ICA4NiwgICAgODYsICAgIDg3LCAgICA4NywgICAgODgsICAgIDg4LCAgICA4OCwgICAgODksICAg
IDg5LCAgICA5MCwKKyAgICAgIDkwLCAgICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEs
ICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLAorICAgICAgOTEsICAgIDkxLCAgICA5MiwgICAg
OTMsICAgIDkzLCAgICA5NCwgICAgOTQsICAgIDk1LCAgICA5NiwgICAgOTYKK307CisKKyAgLyog
WVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2Yg
cnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAg
ICAgIDAsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICA0LCAgICAgNCwgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEs
ICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
NCwgICAgIDQsICAgICA0LCAgICAgNSwKKyAgICAgICAzLCAgICAgMCwgICAgIDMsICAgICAwLCAg
ICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgNCwgICAgIDAs
CisgICAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAzLCAgICAgMywKKyAgICAgICAxLCAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAwLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAg
ICAyLCAgICAgMCwKKyAgICAgICAyLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLAorICAgICAgIDMsICAgICAzLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMCwgICAgIDEsICAgICA0LCAgICAgMCwgICAgIDEKK307CisKKworI2Rl
ZmluZSB5eWVycm9rICAgICAgICAgKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmlu
ICAgICAgICh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZICAgICAgICAgKC0yKQor
I2RlZmluZSBZWUVPRiAgICAgICAgICAgMAorCisjZGVmaW5lIFlZQUNDRVBUICAgICAgICBnb3Rv
IHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQgICAgICAgICBnb3RvIHl5YWJvcnRsYWIKKyNk
ZWZpbmUgWVlFUlJPUiAgICAgICAgIGdvdG8geXllcnJvcmxhYgorCisKKyNkZWZpbmUgWVlSRUNP
VkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1
ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBZWVBPUFNUQUNLICh5eWxlbik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeXlzdGF0ZSA9
ICp5eXNzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
IGdvdG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eWVycm9yIChZWV8oInN5
bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAord2hp
bGUgKDApCisKKy8qIEVycm9yIHRva2VuIG51bWJlciAqLworI2RlZmluZSBZWVRFUlJPUiAgICAg
ICAgMQorI2RlZmluZSBZWUVSUkNPREUgICAgICAgMjU2CisKKworCisvKiBFbmFibGUgZGVidWdn
aW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYK
KyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklO
VEYoQXJncykgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisvKiBUaGlzIG1hY3JvIGlzIHByb3ZpZGVk
IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklO
VAorIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjZW5k
aWYKKworCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2Nh
dGlvbikgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoeXlk
ZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
JXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
eXlfc3ltYm9sX3ByaW50IChzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBUeXBlLCBWYWx1ZSk7IFwKKyAgICAgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wn
cyB2YWx1ZSBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAq
eXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCkKK3sK
KyAgRklMRSAqeXlvID0geXlvdXRwdXQ7CisgIFlZVVNFICh5eW8pOworICBpZiAoIXl5dmFsdWVw
KQorICAgIHJldHVybjsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5T
KQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwor
IyBlbmRpZgorICBZWVVTRSAoeXl0eXBlKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXApCit7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIlcyAlcyAoIiwKKyAgICAgICAg
ICAgICB5eXR5cGUgPCBZWU5UT0tFTlMgPyAidG9rZW4iIDogIm50ZXJtIiwgeXl0bmFtZVt5eXR5
cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFs
dWVwKTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00g
dXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit5
eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRv
cCkKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90
dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJv
dHRvbTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAgIH0KKyAg
WVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChC
b3R0b20sIFRvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYg
KHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBn
b2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dHlw
ZV9pbnQxNiAqeXlzc3AsIFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlKQoreworICB1bnNpZ25l
ZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKKyAgaW50IHl5bnJocyA9IHl5cjJb
eXlydWxlXTsKKyAgaW50IHl5aTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFj
ayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAorICAgICAgICAgICAgIHl5cnVsZSAtIDEsIHl5
bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0g
MDsgeXlpIDwgeXlucmhzOyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCisg
ICAgICAgICAgICAgICAgICAgICAgIHl5c3Rvc1t5eXNzcFt5eWkgKyAxIC0geXlucmhzXV0sCisg
ICAgICAgICAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJ
TlQoUnVsZSkgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeXlf
cmVkdWNlX3ByaW50ICh5eXNzcCwgeXl2c3AsIFJ1bGUpOyBcCit9IHdoaWxlICgwKQorCisvKiBO
b256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVk
IHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVi
dWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRl
ZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVm
aW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5U
KFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0
aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVmIFlZSU5JVERFUFRI
CisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1h
eGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYg
dGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5v
dCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlm
CisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQor
ICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4g
ICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2Vu
ZGlmCisKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYg
ZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJs
ZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCitz
dGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgWVlTSVpF
X1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAg
Y29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZu
ZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdf
SCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAg
ZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0
aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8KK3N0YXRpYyBjaGFyICoKK3l5
c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQoreworICBjaGFyICp5eWQg
PSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5ZCsr
ID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOwor
fQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRvIFlZ
UkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2Fy
eQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5
eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5l
Y2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBj
b21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNoKS4g
IFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBkbyBu
b3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Cisg
ICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNoYXIg
Knl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAg
eworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3Ry
OworCisgICAgICBmb3IgKDs7KQorICAgICAgICBzd2l0Y2ggKCorK3l5cCkKKyAgICAgICAgICB7
CisgICAgICAgICAgY2FzZSAnXCcnOgorICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAg
Z290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCisgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAg
ICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorICAgICAgICAgICAgICBnb3RvIGRvX25vdF9zdHJp
cF9xdW90ZXM7CisgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpZiAoeXlyZXMpCisgICAgICAgICAgICAgIHl5cmVzW3l5bl0g
PSAqeXlwOworICAgICAgICAgICAgeXluKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGNhc2UgJyInOgorICAgICAgICAgICAgaWYgKHl5cmVzKQorICAgICAgICAgICAgICB5eXJl
c1t5eW5dID0gJ1wwJzsKKyAgICAgICAgICAgIHJldHVybiB5eW47CisgICAgICAgICAgfQorICAg
IGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0
dXJuIHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIp
IC0geXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byAqWVlNU0csIHdoaWNoIGlzIG9m
IHNpemUgKllZTVNHX0FMTE9DLCBhbiBlcnJvciBtZXNzYWdlCisgICBhYm91dCB0aGUgdW5leHBl
Y3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzCisgICBZ
WVNTUC4KKworICAgUmV0dXJuIDAgaWYgKllZTVNHIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4g
IFJldHVybiAxIGlmICpZWU1TRyBpcworICAgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBt
ZXNzYWdlLiAgSW4gdGhhdCBjYXNlLCBhbHNvIHNldAorICAgKllZTVNHX0FMTE9DIHRvIHRoZSBy
ZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMuICBSZXR1cm4gMiBpZiB0aGUKKyAgIHJlcXVpcmVkIG51
bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2UgdG8gc3RvcmUuICAqLworc3RhdGljIGludAoreXlz
eW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAorICAgICAg
ICAgICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQoreworICBZWVNJWkVf
VCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5dG9rZW5dKTsKKyAg
WVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0gPSA1IH07CisgIC8qIEludGVybmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICov
CisgIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTFBUUjsKKyAgLyogQXJndW1lbnRzIG9m
IHl5Zm9ybWF0LiAqLworICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNXTsKKyAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVu
ZXhwZWN0ZWQiLCBvbmUgcGVyCisgICAgICJleHBlY3RlZCIpLiAqLworICBpbnQgeXljb3VudCA9
IDA7CisKKyAgLyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxpdGllcyBoZXJlIHRvIGNvbnNpZGVy
OgorICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZh
dWx0IGFjdGlvbiwgdGhlbgorICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBp
bnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbgorICAgICAgIGlzIGFuIGVycm9yIGFjdGlv
bi4gIEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hlY2sgZm9yIGV4cGVjdGVkCisgICAgICAgdG9rZW5z
IGJlY2F1c2UgdGhlcmUgYXJlIG5vbmUuCisgICAgIC0gVGhlIG9ubHkgd2F5IHRoZXJlIGNhbiBi
ZSBubyBsb29rYWhlYWQgcHJlc2VudCAoaW4geXljaGFyKSBpcyBpZgorICAgICAgIHRoaXMgc3Rh
dGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRodXMsCisg
ICAgICAgZGV0ZWN0aW5nIHRoZSBhYnNlbmNlIG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQg
dG8gZGV0ZXJtaW5lCisgICAgICAgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIG9yIGV4cGVj
dGVkIHRva2VuIHRvIHJlcG9ydC4gIEluIHRoYXQKKyAgICAgICBjYXNlLCBqdXN0IHJlcG9ydCBh
IHNpbXBsZSAic3ludGF4IGVycm9yIi4KKyAgICAgLSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3Qg
YSBsb29rYWhlYWQganVzdCBiZWNhdXNlIHRoaXMgc3RhdGUgaXMgYQorICAgICAgIGNvbnNpc3Rl
bnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGEK
KyAgICAgICBwcmV2aW91cyBpbmNvbnNpc3RlbnQgc3RhdGUsIGNvbnNpc3RlbnQgc3RhdGUgd2l0
aCBhIG5vbi1kZWZhdWx0CisgICAgICAgYWN0aW9uLCBvciB1c2VyIHNlbWFudGljIGFjdGlvbiB0
aGF0IG1hbmlwdWxhdGVkIHl5Y2hhci4KKyAgICAgLSBPZiBjb3Vyc2UsIHRoZSBleHBlY3RlZCB0
b2tlbiBsaXN0IGRlcGVuZHMgb24gc3RhdGVzIHRvIGhhdmUKKyAgICAgICBjb3JyZWN0IGxvb2th
aGVhZCBpbmZvcm1hdGlvbiwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIHBhcnNlciBub3QKKyAgICAg
ICB0byBwZXJmb3JtIGV4dHJhIHJlZHVjdGlvbnMgYWZ0ZXIgZmV0Y2hpbmcgYSBsb29rYWhlYWQg
ZnJvbSB0aGUKKyAgICAgICBzY2FubmVyIGFuZCBiZWZvcmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVy
cm9yLiAgVGh1cywgc3RhdGUgbWVyZ2luZworICAgICAgIChmcm9tIExBTFIgb3IgSUVMUikgYW5k
IGRlZmF1bHQgcmVkdWN0aW9ucyBjb3JydXB0IHRoZSBleHBlY3RlZAorICAgICAgIHRva2VuIGxp
c3QuICBIb3dldmVyLCB0aGUgbGlzdCBpcyBjb3JyZWN0IGZvciBjYW5vbmljYWwgTFIgd2l0aAor
ICAgICAgIG9uZSBleGNlcHRpb246IGl0IHdpbGwgc3RpbGwgY29udGFpbiBhbnkgdG9rZW4gdGhh
dCB3aWxsIG5vdCBiZQorICAgICAgIGFjY2VwdGVkIGR1ZSB0byBhbiBlcnJvciBhY3Rpb24gaW4g
YSBsYXRlciBzdGF0ZS4KKyAgKi8KKyAgaWYgKHl5dG9rZW4gIT0gWVlFTVBUWSkKKyAgICB7Cisg
ICAgICBpbnQgeXluID0geXlwYWN0Wyp5eXNzcF07CisgICAgICB5eWFyZ1t5eWNvdW50KytdID0g
eXl0bmFtZVt5eXRva2VuXTsKKyAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5
bikpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2
ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisgICAgICAgICAgICAgWVlDSEVDSy4gIElu
IG90aGVyIHdvcmRzLCBza2lwIHRoZSBmaXJzdCAtWVlOIGFjdGlvbnMgZm9yCisgICAgICAgICAg
ICAgdGhpcyBzdGF0ZSBiZWNhdXNlIHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy4gICovCisgICAg
ICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworICAgICAgICAgIC8qIFN0
YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAg
ICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgICAgICBpbnQgeXl4
ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Cisg
ICAgICAgICAgaW50IHl5eDsKKworICAgICAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8
IHl5eGVuZDsgKyt5eXgpCisgICAgICAgICAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5
eCAmJiB5eXggIT0gWVlURVJST1IKKyAgICAgICAgICAgICAgICAmJiAheXl0YWJsZV92YWx1ZV9p
c19lcnJvciAoeXl0YWJsZVt5eXggKyB5eW5dKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHl5Y291bnQgPSAxOworICAgICAg
ICAgICAgICAgICAgICB5eXNpemUgPSB5eXNpemUwOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWFyZ1t5eWNvdW50Kytd
ID0geXl0bmFtZVt5eXhdOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIFlZ
U0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVb
eXl4XSk7CisgICAgICAgICAgICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgICAgICAgeXlzaXpl
ID0geXlzaXplMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICBzd2l0Y2ggKHl5Y291bnQpCisgICAgeworIyBkZWZpbmUgWVlDQVNFXyhO
LCBTKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjYXNlIE46ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmb3JtYXQgPSBTOyAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgYnJlYWsKKyAgICAgIFlZQ0FTRV8oMCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisgICAgICBZWUNBU0VfKDEsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikp
OworICAgICAgWVlDQVNFXygyLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIikpOworICAgICAgWVlDQVNFXygzLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIikpOworICAgICAgWVlDQVNFXyg0LCBZWV8oInN5
bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIikpOwor
ICAgICAgWVlDQVNFXyg1LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0
aW5nICVzIG9yICVzIG9yICVzIG9yICVzIikpOworIyB1bmRlZiBZWUNBU0VfCisgICAgfQorCisg
IHsKKyAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zm9ybWF0KTsK
KyAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9D
X01BWElNVU0pKQorICAgICAgcmV0dXJuIDI7CisgICAgeXlzaXplID0geXlzaXplMTsKKyAgfQor
CisgIGlmICgqeXltc2dfYWxsb2MgPCB5eXNpemUpCisgICAgeworICAgICAgKnl5bXNnX2FsbG9j
ID0gMiAqIHl5c2l6ZTsKKyAgICAgIGlmICghICh5eXNpemUgPD0gKnl5bXNnX2FsbG9jCisgICAg
ICAgICAgICAgJiYgKnl5bXNnX2FsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisgICAg
ICAgICp5eW1zZ19hbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKyAgICAgIHJldHVybiAx
OworICAgIH0KKworICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUg
dXNlcidzIG5hbWUgc3BhY2UuCisgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2
ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdy
b25nIG51bWJlciBvZiAiJXMicy4gICovCisgIHsKKyAgICBjaGFyICp5eXAgPSAqeXltc2c7Cisg
ICAgaW50IHl5aSA9IDA7CisgICAgd2hpbGUgKCgqeXlwID0gKnl5Zm9ybWF0KSAhPSAnXDAnKQor
ICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5Zm9ybWF0WzFdID09ICdzJyAmJiB5eWkgPCB5eWNv
dW50KQorICAgICAgICB7CisgICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5
eWkrK10pOworICAgICAgICAgIHl5Zm9ybWF0ICs9IDI7CisgICAgICAgIH0KKyAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgIHl5cCsrOworICAgICAgICAgIHl5Zm9ybWF0Kys7CisgICAg
ICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8K
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
UmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9p
ZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5
dmFsdWVwKQoreworICBZWVVTRSAoeXl2YWx1ZXApOworICBpZiAoIXl5bXNnKQorICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOworCisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lO
CisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgICAgICBjYXNlIDYyOiAvKiBjaG9pY2Vf
ZW50cnkgICovCisKKyAgICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVu
ZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSgoKnl5dmFsdWVwKS5tZW51KS0+Zmls
ZS0+bmFtZSwgKCgqeXl2YWx1ZXApLm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUg
PT0gKCgqeXl2YWx1ZXApLm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9CisKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIDY4OiAvKiBpZl9lbnRyeSAgKi8KKworICAgICAgeworCWZwcmlu
dGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxu
IiwKKwkJKCgqeXl2YWx1ZXApLm1lbnUpLT5maWxlLT5uYW1lLCAoKCp5eXZhbHVlcCkubWVudSkt
PmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVudSA9PSAoKCp5eXZhbHVlcCkubWVudSkpCisJCW1l
bnVfZW5kX21lbnUoKTsKK30KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgNzM6IC8qIG1l
bnVfZW50cnkgICovCisKKyAgICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5n
IGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSgoKnl5dmFsdWVwKS5tZW51KS0+
ZmlsZS0+bmFtZSwgKCgqeXl2YWx1ZXApLm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21l
bnUgPT0gKCgqeXl2YWx1ZXApLm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9CisKKyAgICAg
ICAgYnJlYWs7CisKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKK30KKworCisKKworLyogVGhlIGxvb2th
aGVhZCBzeW1ib2wuICAqLworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9m
IHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworLyogTnVtYmVyIG9m
IHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KK2ludCB5eW5lcnJzOworCisKKy8qLS0tLS0tLS0t
LS4KK3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworaW50Cit5eXBhcnNlICh2b2lkKQor
eworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVm
b3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKwor
ICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgICd5eXNzJzogcmVsYXRl
ZCB0byBzdGF0ZXMuCisgICAgICAgJ3l5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4K
KworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0ZSBwb2ludGVycywg
dG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUu
ICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlz
c2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50
MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZ
WVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZ
UEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAg
aW50IHl5cmVzdWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5z
bGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuID0gMDsKKyAgLyogVGhlIHZh
cmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0
aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworI2lmIFlZ
RVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFs
bG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9
IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNl
bmRpZgorCisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAo
TikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVj
ZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3Bw
ZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5c3NwID0geXlzcyA9IHl5c3NhOworICB5
eXZzcCA9IHl5dnMgPSB5eXZzYTsKKyAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICBZ
WURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAw
OworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZ
OyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworICBnb3RvIHl5c2V0c3RhdGU7CisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5k
IGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMs
IHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBo
YXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUg
c3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3Rh
dGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAg
ICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBl
bGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwor
CisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworICAgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFu
Y2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisgICAgICAgICAgIHRo
ZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKyAgICAg
ICAgICAgbWVtb3J5LiAgKi8KKyAgICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOworICAgICAg
ICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworICAgICAgICAvKiBFYWNoIHN0YWNrIHBv
aW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAg
ZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQor
ICAgICAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0CisgICAgICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEg
bWFjcm8uICAqLworICAgICAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwK
KyAgICAgICAgICAgICAgICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisg
ICAgICAgICAgICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorICAg
ICAgICAgICAgICAgICAgICAmeXlzdGFja3NpemUpOworCisgICAgICAgIHl5c3MgPSB5eXNzMTsK
KyAgICAgICAgeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAq
LworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsK
KyMgZWxzZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAg
ICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKyAgICAgICAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5
c3RhY2tzaXplKQorICAgICAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsK
KyAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisgICAgICAgIHVuaW9uIHl5YWxs
b2MgKnl5cHRyID0KKyAgICAgICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZ
WVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworICAgICAgICBpZiAoISB5eXB0cikKKyAgICAg
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNz
X2FsbG9jLCB5eXNzKTsKKyAgICAgICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2
cyk7CisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICAgIGlmICh5eXNzMSAhPSB5eXNz
YSkKKyAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNl
bmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAt
IDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYg
KChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisgICAgICAgICAgICAg
ICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNz
ICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgICAgICBZWUFCT1JUOworICAgIH0KKwor
ICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwor
CisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgZ290byB5eWJh
Y2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLwor
eXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3Vy
cmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUg
YW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNp
ZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLwor
ICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAo
eXluKSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9v
a2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZQ0hB
UiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wu
ICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSB5eWxleCAoKTsK
KyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5
eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9m
IGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRS
QU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMi
LCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHByb3Bl
ciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAg
IGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRva2Vu
OworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9r
ZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5
biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eW4pKQor
ICAgICAgICBnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXly
ZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBh
ZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJy
c3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0
b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZh
bCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5
Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgWVlfSUdOT1JFX01BWUJFX1VO
SU5JVElBTElaRURfQkVHSU4KKyAgKisreXl2c3AgPSB5eWx2YWw7CisgIFlZX0lHTk9SRV9NQVlC
RV9VTklOSVRJQUxJWkVEX0VORAorCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAo
eXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlv
bi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyog
eXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4g
PSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBk
ZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CisgICAgICckJCA9ICQxJy4KKworICAgICBPdGhl
cndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRo
aXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQg
bm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFs
bHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAg
R0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAg
eXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAg
c3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDY6CisKKyAgICB7CisJbWVudV9hZGRf
cHJvbXB0KFBfTUVOVSwgKHl5dnNwWy0xXS5zdHJpbmcpLCBOVUxMKTsKK30KKworICAgIGJyZWFr
OworCisgIGNhc2UgMTE6CisKKyAgICB7IHpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkIGVuZCBzdGF0
ZW1lbnQiKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsgemNvbmZfZXJy
b3IoInVua25vd24gc3RhdGVtZW50IFwiJXNcIiIsICh5eXZzcFstMl0uc3RyaW5nKSk7IH0KKwor
ICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisJemNvbmZfZXJyb3IoInVuZXhwZWN0
ZWQgb3B0aW9uIFwiJXNcIiIsICh5eXZzcFstMl0uaWQpLT5uYW1lKTsKK30KKworICAgIGJyZWFr
OworCisgIGNhc2UgMTQ6CisKKyAgICB7IHpjb25mX2Vycm9yKCJpbnZhbGlkIHN0YXRlbWVudCIp
OyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDMxOgorCisgICAgeyB6Y29uZl9lcnJvcigidW5r
bm93biBvcHRpb24gXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsgfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAzMjoKKworICAgIHsgemNvbmZfZXJyb3IoImludmFsaWQgb3B0aW9uIik7IH0K
KworICAgIGJyZWFrOworCisgIGNhc2UgMzM6CisKKyAgICB7CisJKHl5dnNwWy0xXS5zeW1ib2wp
LT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7CisJbWVudV9hZGRfZW50cnkoKHl5dnNwWy0xXS5z
eW1ib2wpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFstMV0uc3ltYm9sKS0+bmFtZSk7Cit9
CisKKyAgICBicmVhazsKKworICBjYXNlIDM0OgorCisgICAgeworCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDM1OgorCisgICAgeworCSh5eXZzcFstMV0uc3lt
Ym9sKS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRkX2VudHJ5KCh5eXZzcFst
MV0uc3ltYm9sKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudWNvbmZpZyAlc1xu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zeW1ib2wpLT5u
YW1lKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgMzY6CisKKyAgICB7CisJaWYgKGN1cnJl
bnRfZW50cnktPnByb21wdCkKKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0LT50eXBlID0gUF9NRU5V
OworCWVsc2UKKwkJemNvbmZwcmludCgid2FybmluZzogbWVudWNvbmZpZyBzdGF0ZW1lbnQgd2l0
aG91dCBwcm9tcHQiKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIs
IHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisKKyAg
Y2FzZSA0NDoKKworICAgIHsKKwltZW51X3NldF90eXBlKCh5eXZzcFstMl0uaWQpLT5zdHlwZSk7
CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCXpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCksCisJCSh5eXZzcFstMl0uaWQpLT5zdHlwZSk7Cit9CisKKyAg
ICBicmVhazsKKworICBjYXNlIDQ1OgorCisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01Q
VCwgKHl5dnNwWy0yXS5zdHJpbmcpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA0NjoKKworICAgIHsKKwltZW51X2FkZF9leHBy
KFBfREVGQVVMVCwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWy0xXS5leHByKSk7CisJaWYgKCh5
eXZzcFstM10uaWQpLT5zdHlwZSAhPSBTX1VOS05PV04pCisJCW1lbnVfc2V0X3R5cGUoKHl5dnNw
Wy0zXS5pZCktPnN0eXBlKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0KCV1
KVxuIiwKKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJKHl5dnNwWy0zXS5p
ZCktPnN0eXBlKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNDc6CisKKyAgICB7CisJbWVu
dV9hZGRfc3ltYm9sKFBfU0VMRUNULCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFstMV0uZXhw
cikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDQ4OgorCisg
ICAgeworCW1lbnVfYWRkX3N5bWJvbChQX0lNUExZLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZz
cFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmltcGx5XG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2Ug
NDk6CisKKyAgICB7CisJbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9S
QU5HRSwoeXl2c3BbLTNdLnN5bWJvbCksICh5eXZzcFstMl0uc3ltYm9sKSksICh5eXZzcFstMV0u
ZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNTI6CisK
KyAgICB7CisJY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCgoeXl2
c3BbLTFdLnN0cmluZyksIHN0cmxlbigoeXl2c3BbLTFdLnN0cmluZykpKTsKKwlpZiAoaWQgJiYg
aWQtPmZsYWdzICYgVEZfT1BUSU9OKSB7CisJCW1lbnVfYWRkX29wdGlvbihpZC0+dG9rZW4sICh5
eXZzcFswXS5zdHJpbmcpKTsKKwkJZnJlZSgoeXl2c3BbMF0uc3RyaW5nKSk7CisJfQorCWVsc2UK
KwkJemNvbmZwcmludCgid2FybmluZzogaWdub3JpbmcgdW5rbm93biBvcHRpb24gJXMiLCAoeXl2
c3BbLTFdLnN0cmluZykpOworCWZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsKK30KKworICAgIGJy
ZWFrOworCisgIGNhc2UgNTM6CisKKyAgICB7ICh5eXZhbC5zdHJpbmcpID0gTlVMTDsgfQorCisg
ICAgYnJlYWs7CisKKyAgY2FzZSA1NDoKKworICAgIHsgKHl5dmFsLnN0cmluZykgPSAoeXl2c3Bb
MF0uc3RyaW5nKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA1NToKKworICAgIHsKKwlzdHJ1
Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKCh5eXZzcFstMV0uc3RyaW5nKSwgU1lNQk9MX0NI
T0lDRSk7CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7CisJbWVudV9hZGRfZW50cnko
c3ltKTsKKwltZW51X2FkZF9leHByKFBfQ0hPSUNFLCBOVUxMLCBOVUxMKTsKKwlmcmVlKCh5eXZz
cFstMV0uc3RyaW5nKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y2hvaWNlXG4iLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNh
c2UgNTY6CisKKyAgICB7CisJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOworfQorCisg
ICAgYnJlYWs7CisKKyAgY2FzZSA1NzoKKworICAgIHsKKwlpZiAoemNvbmZfZW5kdG9rZW4oKHl5
dnNwWzBdLmlkKSwgVF9DSE9JQ0UsIFRfRU5EQ0hPSUNFKSkgeworCQltZW51X2VuZF9tZW51KCk7
CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNob2ljZVxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQorfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA2NToK
KworICAgIHsKKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICh5eXZzcFstMl0uc3RyaW5nKSwg
KHl5dnNwWy0xXS5leHByKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisg
IGNhc2UgNjY6CisKKyAgICB7CisJaWYgKCh5eXZzcFstMl0uaWQpLT5zdHlwZSA9PSBTX0JPT0xF
QU4gfHwgKHl5dnNwWy0yXS5pZCktPnN0eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJbWVudV9zZXRf
dHlwZSgoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczol
ZDp0eXBlKCV1KVxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCQko
eXl2c3BbLTJdLmlkKS0+c3R5cGUpOworCX0gZWxzZQorCQlZWUVSUk9SOworfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSA2NzoKKworICAgIHsKKwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9
IFNZTUJPTF9PUFRJT05BTDsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpvcHRpb25hbFxu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKwor
ICBjYXNlIDY4OgorCisgICAgeworCWlmICgoeXl2c3BbLTNdLmlkKS0+c3R5cGUgPT0gU19VTktO
T1dOKSB7CisJCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsICh5eXZzcFstMl0uc3ltYm9sKSwg
KHl5dnNwWy0xXS5leHByKSk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHRc
biIsCisJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9IGVsc2UKKwkJWVlF
UlJPUjsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNzE6CisKKyAgICB7CisJcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6aWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIp
KTsKKwkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7Cit9CisKKyAgICBicmVhazsKKwor
ICBjYXNlIDcyOgorCisgICAgeworCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2c3BbMF0uaWQpLCBU
X0lGLCBUX0VORElGKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmVuZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9
Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDc4OgorCisgICAgeworCW1lbnVfYWRkX2VudHJ5
KE5VTEwpOworCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVM
TCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudVxuIiwgemNvbmZfY3VybmFtZSgp
LCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDc5OgorCisgICAg
eworCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKK30KKworICAgIGJyZWFrOworCisg
IGNhc2UgODA6CisKKyAgICB7CisJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRf
TUVOVSwgVF9FTkRNRU5VKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOmVuZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworCX0KK30KKworICAgIGJyZWFrOworCisgIGNhc2UgODY6CisKKyAgICB7CisJcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6c291cmNlICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpLCAoeXl2c3BbLTFdLnN0cmluZykpOworCXpjb25mX25leHRmaWxlKCh5eXZzcFstMV0u
c3RyaW5nKSk7CisJZnJlZSgoeXl2c3BbLTFdLnN0cmluZykpOworfQorCisgICAgYnJlYWs7CisK
KyAgY2FzZSA4NzoKKworICAgIHsKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9w
cm9tcHQoUF9DT01NRU5ULCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwpOworCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmNvbW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCkpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA4OToKKworICAgIHsKKwlwcmludGQoREVC
VUdfUEFSU0UsICIlczolZDpoZWxwXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsKKwl6Y29uZl9zdGFydGhlbHAoKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgOTA6CisK
KyAgICB7CisJaWYgKGN1cnJlbnRfZW50cnktPmhlbHApIHsKKwkJZnJlZShjdXJyZW50X2VudHJ5
LT5oZWxwKTsKKwkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVkIHdpdGggbW9yZSB0
aGFuIG9uZSBoZWxwIHRleHQgLS0gb25seSB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkIiwKKwkJ
CSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsKKwl9CisKKwkvKiBJ
cyB0aGUgaGVscCB0ZXh0IGVtcHR5IG9yIGFsbCB3aGl0ZXNwYWNlPyAqLworCWlmICgoeXl2c3Bb
MF0uc3RyaW5nKVtzdHJzcG4oKHl5dnNwWzBdLnN0cmluZyksICIgXGZcblxyXHRcdiIpXSA9PSAn
XDAnKQorCQl6Y29uZnByaW50KCJ3YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBibGFuayBoZWxw
IHRleHQiLAorCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOwor
CisJY3VycmVudF9lbnRyeS0+aGVscCA9ICh5eXZzcFswXS5zdHJpbmcpOworfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSA5NToKKworICAgIHsKKwltZW51X2FkZF9kZXAoKHl5dnNwWy0xXS5leHBy
KSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVwZW5kcyBvblxuIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDk5Ogor
CisgICAgeworCW1lbnVfYWRkX3Zpc2liaWxpdHkoKHl5dnNwWzBdLmV4cHIpKTsKK30KKworICAg
IGJyZWFrOworCisgIGNhc2UgMTAxOgorCisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01Q
VCwgKHl5dnNwWy0xXS5zdHJpbmcpLCAoeXl2c3BbMF0uZXhwcikpOworfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbLTFdLmlkKTsgfQor
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDU6CisKKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3Bb
LTFdLmlkKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDY6CisKKyAgICB7ICh5eXZhbC5p
ZCkgPSAoeXl2c3BbLTFdLmlkKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDk6CisKKyAg
ICB7ICh5eXZhbC5leHByKSA9IE5VTEw7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTEwOgor
CisgICAgeyAoeXl2YWwuZXhwcikgPSAoeXl2c3BbMF0uZXhwcik7IH0KKworICAgIGJyZWFrOwor
CisgIGNhc2UgMTExOgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3N5bWJvbCgo
eXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTEyOgorCisgICAg
eyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9MVEgsICh5eXZzcFstMl0uc3ltYm9s
KSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDExMzoKKwor
ICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfTEVRLCAoeXl2c3BbLTJdLnN5
bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTQ6
CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0dUSCwgKHl5dnNwWy0y
XS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2Ug
MTE1OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9HRVEsICh5eXZz
cFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsKKworICBj
YXNlIDExNjoKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUws
ICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsK
KworICBjYXNlIDExNzoKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVf
VU5FUVVBTCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAg
IGJyZWFrOworCisgIGNhc2UgMTE4OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSAoeXl2c3BbLTFd
LmV4cHIpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsgKHl5dmFsLmV4
cHIpID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsICh5eXZzcFswXS5leHByKSk7IH0KKworICAgIGJy
ZWFrOworCisgIGNhc2UgMTIwOgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3R3
byhFX09SLCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbMF0uZXhwcikpOyB9CisKKyAgICBicmVh
azsKKworICBjYXNlIDEyMToKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY190d28o
RV9BTkQsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFswXS5leHByKSk7IH0KKworICAgIGJyZWFr
OworCisgIGNhc2UgMTIyOgorCisgICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5
dnNwWzBdLnN0cmluZyksIDApOyBmcmVlKCh5eXZzcFswXS5zdHJpbmcpKTsgfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgo
eXl2c3BbMF0uc3RyaW5nKSwgU1lNQk9MX0NPTlNUKTsgZnJlZSgoeXl2c3BbMF0uc3RyaW5nKSk7
IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTI1OgorCisgICAgeyAoeXl2YWwuc3RyaW5nKSA9
IE5VTEw7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTI3OgorCisgICAgeyB2YXJpYWJsZV9h
ZGQoKHl5dnNwWy0zXS5zdHJpbmcpLCAoeXl2c3BbLTFdLnN0cmluZyksICh5eXZzcFstMl0uZmxh
dm9yKSk7IGZyZWUoKHl5dnNwWy0zXS5zdHJpbmcpKTsgZnJlZSgoeXl2c3BbLTFdLnN0cmluZykp
OyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEyODoKKworICAgIHsgKHl5dmFsLnN0cmluZykg
PSB4c3RyZHVwKCIiKTsgfQorCisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVh
azsKKyAgICB9CisgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXlj
aGFyLCBhbmQgdGhhdCByZXF1aXJlcworICAgICB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRo
IHRoZSBuZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRoZQorICAgICBhcHByb2FjaCBvZiB0cmFu
c2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgIE9u
ZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFj
dGlvbiwKKyAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24gd291bGQgYmUgbWlzc2VkIGlmIHRoZSBz
ZW1hbnRpYyBhY3Rpb24gaW52b2tlcworICAgICBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJP
UiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKKyAgICAgaWYgaXQgaW52b2tl
cyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuCisgICAg
IGluY29ycmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tlZCBpbW1lZGlhdGVseS4g
IEluIHRoZQorICAgICBjYXNlIG9mIFlZRVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFy
c2VyIGFjdGlvbnMgbWlnaHQgbGVhZAorICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBj
YWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UKKyAgICAgYmVmb3JlIHRoZSBsb29r
YWhlYWQgaXMgdHJhbnNsYXRlZC4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5
eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5
bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9
IHl5dmFsOworCisgIC8qIE5vdyAnc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4g
IERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0
YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBi
eS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAt
IFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZ
WUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFi
bGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRP
S0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9y
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFi
OgorICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAg
U2VlIGNvbW1lbnRzIGF0CisgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMg
aXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBU
WSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJp
bmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3Rh
dHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAg
ICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorIyBkZWZpbmUgWVlTWU5U
QVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCisgICAgICB7
CisgICAgICAgIGNoYXIgY29uc3QgKnl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7CisgICAg
ICAgIGludCB5eXN5bnRheF9lcnJvcl9zdGF0dXM7CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0
YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVz
ID09IDApCisgICAgICAgICAgeXltc2dwID0geXltc2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3lu
dGF4X2Vycm9yX3N0YXR1cyA9PSAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1z
ZyAhPSB5eW1zZ2J1ZikKKyAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAg
ICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAg
ICAgICAgICAgIGlmICgheXltc2cpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5
eW1zZyA9IHl5bXNnYnVmOworICAgICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5
bXNnYnVmOworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAg
ICAgICAgIHl5bXNncCA9IHl5bXNnOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg
ICAgICB5eWVycm9yICh5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVz
ID09IDIpCisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIH0KKyMgdW5kZWYg
WVlTWU5UQVhfRVJST1IKKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09
IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbiBhZnRlciBhbgorICAgICAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwor
CisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorICAgICAgICB7CisgICAgICAgICAgLyogUmV0
dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKyAgICAgICAgICBpZiAoeXljaGFy
ID09IFlZRU9GKQorICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfQorICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKyAg
ICAgICAgICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsKTsKKyAgICAgICAgICB5eWNoYXIg
PSBZWUVNUFRZOworICAgICAgICB9CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1
c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4g
ICovCisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBl
eHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJyb3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBp
bGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVS
Uk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1
c2VyCisgICAgIGNvZGUuICAqLworICBpZiAoLypDT05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5
ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUg
d2hvc2UgYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNU
QUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgor
fCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVS
Uk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWIxOgorICB5eWVycnN0YXR1cyA9IDM7ICAgICAgLyog
RWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7
KQorICAgIHsKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICgheXlwYWN0
X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCisgICAgICAgIHsKKyAgICAgICAgICB5eW4gKz0gWVlU
RVJST1I7CisgICAgICAgICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVj
a1t5eW5dID09IFlZVEVSUk9SKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB5eW4gPSB5
eXRhYmxlW3l5bl07CisgICAgICAgICAgICAgIGlmICgwIDwgeXluKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIFBvcCB0aGUgY3Vy
cmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8K
KyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorICAgICAgICBZWUFCT1JUOworCisKKyAgICAgIHl5
ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisgICAgICAgICAgICAgICAgICB5eXN0b3NbeXlz
dGF0ZV0sIHl5dnNwKTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5
eXNzcDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgIFlZ
X0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisgICorK3l5dnNwID0geXlsdmFsOwor
ICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKworCisgIC8qIFNoaWZ0IHRoZSBl
cnJvciB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5
bl0sIHl5dnNwLCB5eWxzcCk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRl
OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2Nl
cHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KK3l5YWNjZXB0bGFiOgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8g
eXlyZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KK3l5YWJvcnRsYWI6CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5
eXJldHVybjsKKworI2lmICFkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3Rl
ZGxhYjoKKyAgeXllcnJvciAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9
IDI7CisgIC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5
eWNoYXIgIT0gWVlFTVBUWSkKKyAgICB7CisgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRl
c3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgICAgICB1c2Vy
IHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCisgICAgICB5
eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51
cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5
bHZhbCk7CisgICAgfQorICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVs
ZSB3aG9zZSBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4g
ICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAoIkNs
ZWFudXA6IHBvcHBpbmciLAorICAgICAgICAgICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBp
ZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYg
WVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZS
RUUgKHl5bXNnKTsKKyNlbmRpZgorICByZXR1cm4geXlyZXN1bHQ7Cit9CisKKworCit2b2lkIGNv
bmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50
IGk7CisKKwl6Y29uZl9pbml0c2NhbihuYW1lKTsKKworCV9tZW51X2luaXQoKTsKKworCWlmIChn
ZXRlbnYoIlpDT05GX0RFQlVHIikpCisJCXl5ZGVidWcgPSAxOworCXl5cGFyc2UoKTsKKworCS8q
IFZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgaW4gdGhlIHBhcnNlIHBoYXNlLiBXZSBjYW4gZnJlZSB0
aGVtIGhlcmUuICovCisJdmFyaWFibGVfYWxsX2RlbCgpOworCisJaWYgKHl5bmVycnMpCisJCWV4
aXQoMSk7CisJaWYgKCFtb2R1bGVzX3N5bSkKKwkJbW9kdWxlc19zeW0gPSBzeW1fZmluZCggIm4i
ICk7CisKKwlpZiAoIW1lbnVfaGFzX3Byb21wdCgmcm9vdG1lbnUpKSB7CisJCWN1cnJlbnRfZW50
cnkgPSAmcm9vdG1lbnU7CisJCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICJNYWluIG1lbnUiLCBO
VUxMKTsKKwl9CisKKwltZW51X2ZpbmFsaXplKCZyb290bWVudSk7CisJZm9yX2FsbF9zeW1ib2xz
KGksIHN5bSkgeworCQlpZiAoc3ltX2NoZWNrX2RlcHMoc3ltKSkKKwkJCXl5bmVycnMrKzsKKwl9
CisJaWYgKHl5bmVycnMpCisJCWV4aXQoMSk7CisJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7Cit9
CisKK3N0YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQoreworCXN3
aXRjaCAodG9rZW4pIHsKKwljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7CisJY2FzZSBUX0VO
RE1FTlU6CQlyZXR1cm4gImVuZG1lbnUiOworCWNhc2UgVF9DSE9JQ0U6CQlyZXR1cm4gImNob2lj
ZSI7CisJY2FzZSBUX0VORENIT0lDRToJcmV0dXJuICJlbmRjaG9pY2UiOworCWNhc2UgVF9JRjoJ
CXJldHVybiAiaWYiOworCWNhc2UgVF9FTkRJRjoJCXJldHVybiAiZW5kaWYiOworCWNhc2UgVF9E
RVBFTkRTOgkJcmV0dXJuICJkZXBlbmRzIjsKKwljYXNlIFRfVklTSUJMRToJCXJldHVybiAidmlz
aWJsZSI7CisJfQorCXJldHVybiAiPHRva2VuPiI7Cit9CisKK3N0YXRpYyBib29sIHpjb25mX2Vu
ZHRva2VuKGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5k
dG9rZW4pCit7CisJaWYgKGlkLT50b2tlbiAhPSBlbmR0b2tlbikgeworCQl6Y29uZl9lcnJvcigi
dW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9jayIsCisJCQlpZC0+bmFtZSwgemNvbmZfdG9r
ZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJeXluZXJycysrOworCQlyZXR1cm4gZmFsc2U7CisJfQor
CWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9maWxlKSB7CisJCXpjb25mX2Vycm9y
KCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIsCisJCQlpZC0+bmFtZSwgemNvbmZf
dG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczolZDogbG9jYXRp
b24gb2YgdGhlICclcydcbiIsCisJCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRf
bWVudS0+bGluZW5vLAorCQkJemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJeXluZXJy
cysrOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlm
cHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsKKwl2YV9zdGFydChhcCwgZXJyKTsKKwl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOworCXZh
X2VuZChhcCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCB6Y29u
Zl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJeXluZXJy
cysrOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZf
bGluZW5vKCkpOworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBh
cCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2
b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqZXJyKQoreworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6
ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsKK30KKwor
c3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0
cikKK3sKKwljb25zdCBjaGFyICpwOworCWludCBsZW47CisKKwlwdXRjKCciJywgb3V0KTsKKwl3
aGlsZSAoKHAgPSBzdHJjaHIoc3RyLCAnIicpKSkgeworCQlsZW4gPSBwIC0gc3RyOworCQlpZiAo
bGVuKQorCQkJZnByaW50ZihvdXQsICIlLipzIiwgbGVuLCBzdHIpOworCQlmcHV0cygiXFxcIiIs
IG91dCk7CisJCXN0ciA9IHAgKyAxOworCX0KKwlmcHV0cyhzdHIsIG91dCk7CisJcHV0YygnIics
IG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBt
ZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwlzdHJ1Y3Qg
cHJvcGVydHkgKnByb3A7CisKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKQorCQlmcHJpbnRmKG91
dCwgIlxuY2hvaWNlXG4iKTsKKwllbHNlCisJCWZwcmludGYob3V0LCAiXG5jb25maWcgJXNcbiIs
IHN5bS0+bmFtZSk7CisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwkJ
ZnB1dHMoIiAgYm9vbFxuIiwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBTX1RSSVNUQVRFOgorCQlm
cHV0cygiICB0cmlzdGF0ZVxuIiwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBTX1NUUklORzoKKwkJ
ZnB1dHMoIiAgc3RyaW5nXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfSU5UOgorCQlmcHV0
cygiICBpbnRlZ2VyXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQlmcHV0cygi
ICBoZXhcbiIsIG91dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwdXRzKCIgID8/P1xuIiwg
b3V0KTsKKwkJYnJlYWs7CisJfQorCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9
IHByb3AtPm5leHQpIHsKKwkJaWYgKHByb3AtPm1lbnUgIT0gbWVudSkKKwkJCWNvbnRpbnVlOwor
CQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX1BST01QVDoKKwkJCWZwdXRzKCIgIHBy
b21wdCAiLCBvdXQpOworCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOwor
CQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiBp
ZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJ
CX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0RFRkFVTFQ6CisJ
CQlmcHV0cyggIiAgZGVmYXVsdCAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwg
b3V0KTsKKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJCWZw
dXRzKCIgaWYgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91
dCk7CisJCQl9CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9DSE9J
Q0U6CisJCQlmcHV0cygiICAjY2hvaWNlIHZhbHVlXG4iLCBvdXQpOworCQkJYnJlYWs7CisJCWNh
c2UgUF9TRUxFQ1Q6CisJCQlmcHV0cyggIiAgc2VsZWN0ICIsIG91dCk7CisJCQlleHByX2Zwcmlu
dChwcm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQlj
YXNlIFBfSU1QTFk6CisJCQlmcHV0cyggIiAgaW1wbHkgIiwgb3V0KTsKKwkJCWV4cHJfZnByaW50
KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNh
c2UgUF9SQU5HRToKKwkJCWZwdXRzKCAiICByYW5nZSAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQo
cHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2Fz
ZSBQX01FTlU6CisJCQlmcHV0cyggIiAgbWVudSAiLCBvdXQpOworCQkJcHJpbnRfcXVvdGVkX3N0
cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOwor
CQljYXNlIFBfU1lNQk9MOgorCQkJZnB1dHMoICIgIHN5bWJvbCAiLCBvdXQpOworCQkJZnByaW50
ZihvdXQsICIlc1xuIiwgcHJvcC0+c3ltLT5uYW1lKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor
CQkJZnByaW50ZihvdXQsICIgIHVua25vd24gcHJvcCAlZCFcbiIsIHByb3AtPnR5cGUpOworCQkJ
YnJlYWs7CisJCX0KKwl9CisJaWYgKG1lbnUtPmhlbHApIHsKKwkJaW50IGxlbiA9IHN0cmxlbiht
ZW51LT5oZWxwKTsKKwkJd2hpbGUgKG1lbnUtPmhlbHBbLS1sZW5dID09ICdcbicpCisJCQltZW51
LT5oZWxwW2xlbl0gPSAwOworCQlmcHJpbnRmKG91dCwgIiAgaGVscFxuJXNcbiIsIG1lbnUtPmhl
bHApOworCX0KK30KKwordm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KQoreworCXN0cnVjdCBwcm9w
ZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKm1lbnU7CisK
KwltZW51ID0gcm9vdG1lbnUubGlzdDsKKwl3aGlsZSAobWVudSkgeworCQlpZiAoKHN5bSA9IG1l
bnUtPnN5bSkpCisJCQlwcmludF9zeW1ib2wob3V0LCBtZW51KTsKKwkJZWxzZSBpZiAoKHByb3Ag
PSBtZW51LT5wcm9tcHQpKSB7CisJCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJCWNhc2UgUF9D
T01NRU5UOgorCQkJCWZwdXRzKCJcbmNvbW1lbnQgIiwgb3V0KTsKKwkJCQlwcmludF9xdW90ZWRf
c3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQkJZnB1dHMoIlxuIiwgb3V0KTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgUF9NRU5VOgorCQkJCWZwdXRzKCJcbm1lbnUgIiwgb3V0KTsKKwkJCQlwcmlu
dF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQkJZnB1dHMoIlxuIiwgb3V0KTsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQkJaWYgKCFleHByX2lzX3ll
cyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiAgZGVwZW5kcyAiLCBvdXQpOwor
CQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJCQlmcHV0YygnXG4n
LCBvdXQpOworCQkJfQorCQl9CisKKwkJaWYgKG1lbnUtPmxpc3QpCisJCQltZW51ID0gbWVudS0+
bGlzdDsKKwkJZWxzZSBpZiAobWVudS0+bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQll
bHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsKKwkJCWlmIChtZW51LT5wcm9tcHQg
JiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkKKwkJCQlmcHV0cygiXG5lbmRtZW51XG4i
LCBvdXQpOworCQkJaWYgKG1lbnUtPm5leHQpIHsKKwkJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJ
CQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworI2luY2x1ZGUgInpjb25mLmxleC5jIgorI2lu
Y2x1ZGUgInV0aWwuYyIKKyNpbmNsdWRlICJjb25mZGF0YS5jIgorI2luY2x1ZGUgImV4cHIuYyIK
KyNpbmNsdWRlICJzeW1ib2wuYyIKKyNpbmNsdWRlICJtZW51LmMiCisjaW5jbHVkZSAicHJlcHJv
Y2Vzcy5jIgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 07:35:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 07:35:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7agY-00020n-UT; Tue, 10 Sep 2019 07:35:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NUfo=XE=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7Ny0-0003iP-Fk
 for minios-devel@lists.xen.org; Mon, 09 Sep 2019 18:00:44 +0000
X-Inumbo-ID: bd4cb312-d32b-11e9-ac12-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bd4cb312-d32b-11e9-ac12-12813bfff9fa;
 Mon, 09 Sep 2019 18:00:43 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 02561F2027;
 Mon,  9 Sep 2019 20:00:42 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id RRsxC4laebWC; Mon,  9 Sep 2019 20:00:40 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id F0721F200E
 for <minios-devel@lists.xen.org>; Mon,  9 Sep 2019 20:00:37 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 9 Sep 2019
 20:00:32 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 9 Sep 2019 19:59:30 +0200
Message-ID: <20190909175939.23936-15-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
References: <20190909175939.23936-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Tue, 10 Sep 2019 07:35:32 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH v2 14/23] kconfig: Import kconfiglib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: multipart/mixed; boundary="===============4309393552384230033=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============4309393552384230033==
Content-Type: text/plain; charset="y"
Content-Transfer-Encoding: 8bit

Import Kconfiglib for providing python based front end to the kconfig.

URL: https://github.com/ulfalizer/Kconfiglib
TAG: v12.13.0

Signed-off-by: Sharan Santhanam <sharan.santhanam@neclab.eu>
---
 support/kconfiglib/LICENSE.txt                |    5 +
 support/kconfiglib/MANIFEST.in                |    2 +
 support/kconfiglib/README.rst                 |  806 ++
 support/kconfiglib/alldefconfig.py            |   27 +
 support/kconfiglib/allmodconfig.py            |   46 +
 support/kconfiglib/allnoconfig.py             |   45 +
 support/kconfiglib/allyesconfig.py            |   56 +
 support/kconfiglib/defconfig.py               |   43 +
 support/kconfiglib/examples/Kmenuconfig       |  102 +
 .../kconfiglib/examples/allnoconfig_walk.py   |   66 +
 .../examples/defconfig_oldconfig.py           |   39 +
 support/kconfiglib/examples/dumpvars.py       |   15 +
 support/kconfiglib/examples/eval_expr.py      |   24 +
 support/kconfiglib/examples/find_symbol.py    |  112 +
 support/kconfiglib/examples/help_grep.py      |   64 +
 support/kconfiglib/examples/kconfiglib.py     |    1 +
 support/kconfiglib/examples/list_undefined.py |  156 +
 .../kconfiglib/examples/menuconfig_example.py |  341 +
 support/kconfiglib/examples/merge_config.py   |  133 +
 .../kconfiglib/examples/print_config_tree.py  |  199 +
 support/kconfiglib/examples/print_sym_info.py |   54 +
 support/kconfiglib/examples/print_tree.py     |   75 +
 support/kconfiglib/genconfig.py               |  132 +
 support/kconfiglib/guiconfig.py               | 2316 ++++++
 support/kconfiglib/kconfiglib.py              | 7018 +++++++++++++++++
 support/kconfiglib/listnewconfig.py           |   47 +
 support/kconfiglib/makefile.patch             |   48 +
 support/kconfiglib/menuconfig.py              | 3264 ++++++++
 support/kconfiglib/oldconfig.py               |  246 +
 support/kconfiglib/olddefconfig.py            |   28 +
 support/kconfiglib/savedefconfig.py           |   49 +
 support/kconfiglib/setconfig.py               |   92 +
 support/kconfiglib/setup.cfg                  |    7 +
 support/kconfiglib/setup.py                   |  100 +
 support/kconfiglib/tests/Kappend              |   12 +
 support/kconfiglib/tests/Kassignable          |  230 +
 support/kconfiglib/tests/Kchoice              |  198 +
 support/kconfiglib/tests/Kdefconfig_existent  |    8 +
 .../tests/Kdefconfig_existent_but_n           |   10 +
 .../kconfiglib/tests/Kdefconfig_nonexistent   |    5 +
 support/kconfiglib/tests/Kdefconfig_srctree   |    5 +
 support/kconfiglib/tests/Kdepcopy             |  173 +
 support/kconfiglib/tests/Kdeploop0            |    3 +
 support/kconfiglib/tests/Kdeploop1            |    3 +
 support/kconfiglib/tests/Kdeploop10           |   48 +
 support/kconfiglib/tests/Kdeploop2            |    3 +
 support/kconfiglib/tests/Kdeploop3            |    3 +
 support/kconfiglib/tests/Kdeploop4            |    7 +
 support/kconfiglib/tests/Kdeploop5            |    7 +
 support/kconfiglib/tests/Kdeploop6            |    6 +
 support/kconfiglib/tests/Kdeploop7            |   11 +
 support/kconfiglib/tests/Kdeploop8            |    8 +
 support/kconfiglib/tests/Kdeploop9            |    7 +
 support/kconfiglib/tests/Kdirdep              |   30 +
 support/kconfiglib/tests/Kescape              |    3 +
 support/kconfiglib/tests/Keval                |   34 +
 support/kconfiglib/tests/Kexpr_items          |   11 +
 support/kconfiglib/tests/Khelp                |   50 +
 support/kconfiglib/tests/Kifremoval           |   99 +
 support/kconfiglib/tests/Kimply               |  145 +
 support/kconfiglib/tests/Kinclude_path        |   12 +
 .../kconfiglib/tests/Kinclude_path_sourced_1  |   12 +
 .../kconfiglib/tests/Kinclude_path_sourced_2  |   11 +
 support/kconfiglib/tests/Kitemlists           |   36 +
 support/kconfiglib/tests/Klocation            |   72 +
 support/kconfiglib/tests/Klocation_sourced    |   18 +
 support/kconfiglib/tests/Kmainmenu            |    5 +
 support/kconfiglib/tests/Kmenuconfig          |   37 +
 support/kconfiglib/tests/Kmisc                |   82 +
 support/kconfiglib/tests/Kmissingrsource      |    1 +
 support/kconfiglib/tests/Kmissingsource       |    1 +
 support/kconfiglib/tests/Korder               |   35 +
 support/kconfiglib/tests/Kpreprocess          |  147 +
 support/kconfiglib/tests/Krange               |  133 +
 support/kconfiglib/tests/Krecursive1          |    1 +
 support/kconfiglib/tests/Krecursive2          |    1 +
 support/kconfiglib/tests/Kreferenced          |   63 +
 support/kconfiglib/tests/Krelation            |   36 +
 support/kconfiglib/tests/Krepr                |   64 +
 support/kconfiglib/tests/Kstr                 |  293 +
 support/kconfiglib/tests/Kundef               |   23 +
 support/kconfiglib/tests/Kuserfunctions       |   11 +
 support/kconfiglib/tests/Kvisibility          |  342 +
 support/kconfiglib/tests/config_indented      |    3 +
 support/kconfiglib/tests/config_set_bool      |    1 +
 support/kconfiglib/tests/config_set_string    |    1 +
 support/kconfiglib/tests/defconfig_1          |    0
 support/kconfiglib/tests/defconfig_2          |    0
 support/kconfiglib/tests/empty                |    0
 support/kconfiglib/tests/kconfigfunctions.py  |   14 +
 support/kconfiglib/tests/reltest              |   51 +
 .../kconfiglib/tests/sub/Kconfig_symlink_2    |    1 +
 .../kconfiglib/tests/sub/Kconfig_symlink_3    |    2 +
 .../kconfiglib/tests/sub/Klocation_grsourced1 |    1 +
 .../kconfiglib/tests/sub/Klocation_grsourced2 |    1 +
 .../kconfiglib/tests/sub/Klocation_gsourced1  |    1 +
 .../kconfiglib/tests/sub/Klocation_gsourced2  |    1 +
 .../kconfiglib/tests/sub/Klocation_rsourced   |    2 +
 support/kconfiglib/tests/sub/defconfig_in_sub |    0
 .../tests/sub/sub/Kconfig_symlink_1           |    2 +
 support/kconfiglib/tests/symlink              |    1 +
 support/kconfiglib/testsuite.py               | 3136 ++++++++
 102 files changed, 21531 insertions(+)
 create mode 100644 support/kconfiglib/LICENSE.txt
 create mode 100644 support/kconfiglib/MANIFEST.in
 create mode 100644 support/kconfiglib/README.rst
 create mode 100755 support/kconfiglib/alldefconfig.py
 create mode 100755 support/kconfiglib/allmodconfig.py
 create mode 100755 support/kconfiglib/allnoconfig.py
 create mode 100755 support/kconfiglib/allyesconfig.py
 create mode 100755 support/kconfiglib/defconfig.py
 create mode 100644 support/kconfiglib/examples/Kmenuconfig
 create mode 100644 support/kconfiglib/examples/allnoconfig_walk.py
 create mode 100644 support/kconfiglib/examples/defconfig_oldconfig.py
 create mode 100644 support/kconfiglib/examples/dumpvars.py
 create mode 100644 support/kconfiglib/examples/eval_expr.py
 create mode 100644 support/kconfiglib/examples/find_symbol.py
 create mode 100644 support/kconfiglib/examples/help_grep.py
 create mode 120000 support/kconfiglib/examples/kconfiglib.py
 create mode 100644 support/kconfiglib/examples/list_undefined.py
 create mode 100755 support/kconfiglib/examples/menuconfig_example.py
 create mode 100755 support/kconfiglib/examples/merge_config.py
 create mode 100644 support/kconfiglib/examples/print_config_tree.py
 create mode 100644 support/kconfiglib/examples/print_sym_info.py
 create mode 100644 support/kconfiglib/examples/print_tree.py
 create mode 100755 support/kconfiglib/genconfig.py
 create mode 100755 support/kconfiglib/guiconfig.py
 create mode 100644 support/kconfiglib/kconfiglib.py
 create mode 100755 support/kconfiglib/listnewconfig.py
 create mode 100644 support/kconfiglib/makefile.patch
 create mode 100755 support/kconfiglib/menuconfig.py
 create mode 100755 support/kconfiglib/oldconfig.py
 create mode 100755 support/kconfiglib/olddefconfig.py
 create mode 100755 support/kconfiglib/savedefconfig.py
 create mode 100755 support/kconfiglib/setconfig.py
 create mode 100644 support/kconfiglib/setup.cfg
 create mode 100644 support/kconfiglib/setup.py
 create mode 100644 support/kconfiglib/tests/Kappend
 create mode 100644 support/kconfiglib/tests/Kassignable
 create mode 100644 support/kconfiglib/tests/Kchoice
 create mode 100644 support/kconfiglib/tests/Kdefconfig_existent
 create mode 100644 support/kconfiglib/tests/Kdefconfig_existent_but_n
 create mode 100644 support/kconfiglib/tests/Kdefconfig_nonexistent
 create mode 100644 support/kconfiglib/tests/Kdefconfig_srctree
 create mode 100644 support/kconfiglib/tests/Kdepcopy
 create mode 100644 support/kconfiglib/tests/Kdeploop0
 create mode 100644 support/kconfiglib/tests/Kdeploop1
 create mode 100644 support/kconfiglib/tests/Kdeploop10
 create mode 100644 support/kconfiglib/tests/Kdeploop2
 create mode 100644 support/kconfiglib/tests/Kdeploop3
 create mode 100644 support/kconfiglib/tests/Kdeploop4
 create mode 100644 support/kconfiglib/tests/Kdeploop5
 create mode 100644 support/kconfiglib/tests/Kdeploop6
 create mode 100644 support/kconfiglib/tests/Kdeploop7
 create mode 100644 support/kconfiglib/tests/Kdeploop8
 create mode 100644 support/kconfiglib/tests/Kdeploop9
 create mode 100644 support/kconfiglib/tests/Kdirdep
 create mode 100644 support/kconfiglib/tests/Kescape
 create mode 100644 support/kconfiglib/tests/Keval
 create mode 100644 support/kconfiglib/tests/Kexpr_items
 create mode 100644 support/kconfiglib/tests/Khelp
 create mode 100644 support/kconfiglib/tests/Kifremoval
 create mode 100644 support/kconfiglib/tests/Kimply
 create mode 100644 support/kconfiglib/tests/Kinclude_path
 create mode 100644 support/kconfiglib/tests/Kinclude_path_sourced_1
 create mode 100644 support/kconfiglib/tests/Kinclude_path_sourced_2
 create mode 100644 support/kconfiglib/tests/Kitemlists
 create mode 100644 support/kconfiglib/tests/Klocation
 create mode 100644 support/kconfiglib/tests/Klocation_sourced
 create mode 100644 support/kconfiglib/tests/Kmainmenu
 create mode 100644 support/kconfiglib/tests/Kmenuconfig
 create mode 100644 support/kconfiglib/tests/Kmisc
 create mode 100644 support/kconfiglib/tests/Kmissingrsource
 create mode 100644 support/kconfiglib/tests/Kmissingsource
 create mode 100644 support/kconfiglib/tests/Korder
 create mode 100644 support/kconfiglib/tests/Kpreprocess
 create mode 100644 support/kconfiglib/tests/Krange
 create mode 100644 support/kconfiglib/tests/Krecursive1
 create mode 100644 support/kconfiglib/tests/Krecursive2
 create mode 100644 support/kconfiglib/tests/Kreferenced
 create mode 100644 support/kconfiglib/tests/Krelation
 create mode 100644 support/kconfiglib/tests/Krepr
 create mode 100644 support/kconfiglib/tests/Kstr
 create mode 100644 support/kconfiglib/tests/Kundef
 create mode 100644 support/kconfiglib/tests/Kuserfunctions
 create mode 100644 support/kconfiglib/tests/Kvisibility
 create mode 100644 support/kconfiglib/tests/config_indented
 create mode 100644 support/kconfiglib/tests/config_set_bool
 create mode 100644 support/kconfiglib/tests/config_set_string
 create mode 100644 support/kconfiglib/tests/defconfig_1
 create mode 100644 support/kconfiglib/tests/defconfig_2
 create mode 100644 support/kconfiglib/tests/empty
 create mode 100644 support/kconfiglib/tests/kconfigfunctions.py
 create mode 100755 support/kconfiglib/tests/reltest
 create mode 100644 support/kconfiglib/tests/sub/Kconfig_symlink_2
 create mode 100644 support/kconfiglib/tests/sub/Kconfig_symlink_3
 create mode 100644 support/kconfiglib/tests/sub/Klocation_grsourced1
 create mode 100644 support/kconfiglib/tests/sub/Klocation_grsourced2
 create mode 100644 support/kconfiglib/tests/sub/Klocation_gsourced1
 create mode 100644 support/kconfiglib/tests/sub/Klocation_gsourced2
 create mode 100644 support/kconfiglib/tests/sub/Klocation_rsourced
 create mode 100644 support/kconfiglib/tests/sub/defconfig_in_sub
 create mode 100644 support/kconfiglib/tests/sub/sub/Kconfig_symlink_1
 create mode 120000 support/kconfiglib/tests/symlink
 create mode 100644 support/kconfiglib/testsuite.py

diff --git a/support/kconfiglib/LICENSE.txt b/support/kconfiglib/LICENSE.txt
new file mode 100644
index 00000000..8b31efca
--- /dev/null
+++ b/support/kconfiglib/LICENSE.txt
@@ -0,0 +1,5 @@
+Copyright (c) 2011-2019, Ulf Magnusson <ulfalizer@gmail.com>
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/support/kconfiglib/MANIFEST.in b/support/kconfiglib/MANIFEST.in
new file mode 100644
index 00000000..881a7944
--- /dev/null
+++ b/support/kconfiglib/MANIFEST.in
@@ -0,0 +1,2 @@
+# Include the license file in source distributions
+include LICENSE.txt
diff --git a/support/kconfiglib/README.rst b/support/kconfiglib/README.rst
new file mode 100644
index 00000000..bdbd457d
--- /dev/null
+++ b/support/kconfiglib/README.rst
@@ -0,0 +1,806 @@
+.. contents:: Table of contents
+   :backlinks: none
+
+Overview
+--------
+
+Kconfiglib is a `Kconfig
+<https://github.com/torvalds/linux/blob/master/Documentation/kbuild/kconfig-language.rst>`__
+implementation in Python 2/3. It started out as a helper library, but now has a
+enough functionality to also work well as a standalone Kconfig implementation
+(including `terminal and GUI menuconfig interfaces <Menuconfig interfaces_>`_
+and `Kconfig extensions`_).
+
+The entire library is contained in `kconfiglib.py
+<https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_. The
+bundled scripts are implemented on top of it. Implementing your own scripts
+should be relatively easy, if needed.
+
+Kconfiglib is used exclusively by e.g. the `Zephyr <https://www.zephyrproject.org/>`_ 
+and `ACRN <https://projectacrn.org/>`_ projects. It is also used for many small helper
+scripts in various projects.
+
+Since Kconfiglib is based around a library, it can be used e.g. to generate a
+`Kconfig cross-reference <https://docs.zephyrproject.org/latest/reference/kconfig/index.html>`_ (note: heavy page),
+using the same robust Kconfig parser used for other Kconfig tools, instead of brittle ad-hoc parsing. The documentation generation script can be found `here <https://github.com/zephyrproject-rtos/zephyr/blob/master/doc/scripts/genrest.py>`__.
+
+Kconfiglib implements the recently added `Kconfig preprocessor
+<https://github.com/torvalds/linux/blob/master/Documentation/kbuild/kconfig-macro-language.rst>`__.
+For backwards compatibility, environment variables can be referenced both as
+``$(FOO)`` (the new syntax) and as ``$FOO`` (the old syntax). The old syntax is
+deprecated, but will probably be supported for a long time, as its needed to
+stay compatible with older Linux kernels. The major version will be increased
+if support is ever dropped. Using the old syntax with an undefined environment
+variable keeps the string as is.
+
+Note: See `this issue <https://github.com/ulfalizer/Kconfiglib/issues/47>`_ if you run into
+a "macro expanded to blank string" error with kernel 4.18+.
+
+See `this page
+<https://docs.zephyrproject.org/latest/guides/kconfig/index.html>`__ for some
+Kconfig tips and best practices.
+
+Installation
+------------
+
+Installation with pip
+~~~~~~~~~~~~~~~~~~~~~
+
+Kconfiglib is available on `PyPI <https://pypi.python.org/pypi/kconfiglib/>`_ and can be
+installed with e.g.
+
+.. code::
+
+    $ pip(3) install kconfiglib
+
+Microsoft Windows is supported.
+
+The ``pip`` installation will give you both the base library and the following
+executables. All but two (``genconfig`` and ``setconfig``) mirror functionality
+available in the C tools.
+
+- `menuconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_
+
+- `guiconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/guiconfig.py>`_
+
+- `oldconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/oldconfig.py>`_
+
+- `olddefconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/olddefconfig.py>`_
+
+- `savedefconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/savedefconfig.py>`_
+
+- `defconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/defconfig.py>`_
+
+- `alldefconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/alldefconfig.py>`_
+
+- `allnoconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/allnoconfig.py>`_
+
+- `allmodconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/allmodconfig.py>`_
+
+- `allyesconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/allyesconfig.py>`_
+
+- `listnewconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/listnewconfig.py>`_
+
+- `genconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/genconfig.py>`_
+
+- `setconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/setconfig.py>`_
+
+``genconfig`` is intended to be run at build time. It generates a C header from
+the configuration and (optionally) information that can be used to rebuild only
+files that reference Kconfig symbols that have changed value.
+
+Starting with Kconfiglib version 12.2.0, all utilities are compatible with both
+Python 2 and Python 3. Previously, ``menuconfig.py`` only ran under Python 3
+(i.e., it's now more backwards compatible than before).
+
+**Note:** If you install Kconfiglib with ``pip``'s ``--user`` flag, make sure
+that your ``PATH`` includes the directory where the executables end up. You can
+list the installed files with ``pip(3) show -f kconfiglib``.
+
+All releases have a corresponding tag in the git repository, e.g. ``v12.13.0``
+(the latest version).
+
+`Semantic versioning <http://semver.org/>`_ is used. There's been
+ten small changes (`1 <https://github.com/ulfalizer/Kconfiglib/commit/e8b4ecb6ff6ccc1c7be0818314fbccda2ef2b2ee>`_,
+`2 <https://github.com/ulfalizer/Kconfiglib/commit/db633015a4d7b0ba1e882f665e191f350932b2af>`_,
+`3 <https://github.com/ulfalizer/Kconfiglib/commit/8983f7eb297dd614faf0beee3129559bc8ba338e>`_,
+`4 <https://github.com/ulfalizer/Kconfiglib/commit/cbf32e29a130d22bc734b7778e6304ac9df2a3e8>`_,
+`5 <https://github.com/ulfalizer/Kconfiglib/commit/eb6c21a9b33a2d6e2bed9882d4f930d0cab2f03b>`_,
+`6 <https://github.com/ulfalizer/Kconfiglib/commit/c19fc11355b13d75d97286402c7a933fb23d3b70>`_,
+`7 <https://github.com/ulfalizer/Kconfiglib/commit/7a428aa415606820a44291f475248b08e3952c4b>`_,
+`8 <https://github.com/ulfalizer/Kconfiglib/commit/f247ddf618ad29718e5efd3e69f8baf75d4d347b>`_,
+`9 <https://github.com/ulfalizer/Kconfiglib/commit/4fed39d9271ceb68be4157ab3f96a45b94f77dc0>`_,
+`10 <https://github.com/ulfalizer/Kconfiglib/commit/55bc8c380869ea663092212e8fe388ad7abae596>`_)
+to the behavior of the API, which is why the major version is at 12 rather than
+2. I do major version bumps for all behavior changes, even tiny ones, and most of these were
+fixes for baby issues in the early days of the Kconfiglib 2 API.
+
+Manual installation
+~~~~~~~~~~~~~~~~~~~
+
+Just drop ``kconfiglib.py`` and the scripts you want somewhere. There are no
+third-party dependencies (except for the `windows-curses
+<https://github.com/zephyrproject-rtos/windows-curses>`_ package on Windows,
+when running the terminal ``menuconfig`` implementation).
+
+Installation for the Linux kernel
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+See the module docstring at the top of `kconfiglib.py <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_.
+
+Python version compatibility (2.7/3.2+)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Kconfiglib and all utilities run under both Python 2.7 and Python 3.2 and
+later. The code mostly uses basic Python features and has no third-party
+dependencies, so keeping it backwards-compatible is pretty low effort.
+
+The 3.2 requirement comes from ``argparse``. ``format()`` with unnumbered
+``{}`` is used as well.
+
+A recent Python 3 version is recommended if you have a choice, as it'll give
+you better Unicode handling.
+
+Getting started
+---------------
+
+1. `Install <Installation_>`_ the library and the utilities.
+
+2. Write `Kconfig
+   <https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt>`__
+   files that describe the available configuration options.
+
+3. Generate an initial configuration with e.g. ``menuconfig``/``guiconfig`` or
+   ``alldefconfig``. The configuration is saved as ``.config`` by default.
+
+   For more advanced projects, the ``defconfig`` utility can be used to
+   generate the initial configuration from an existing configuration file.
+   Usually, this existing configuration file would be a minimal configuration
+   file, as generated by e.g. ``savedefconfig``.
+
+4. Run ``genconfig`` to generate a header file. By default, it is saved as
+   ``config.h``.
+
+   Normally, ``genconfig`` would be run automatically as part of the build.
+
+   Before writing a header file or other configuration output, Kconfiglib
+   compares the old contents of the file against the new contents. If there's
+   no change, the write is skipped. This avoids updating file metadata like the
+   modification time, and might save work depending on your build setup.
+   
+   Adding new configuration output formats should be relatively straightforward.
+   See the implementation of ``write_config()`` in `kconfiglib.py
+   <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_.
+   The documentation for the ``Symbol.config_string`` property has some tips as
+   well.
+   
+5. To update an old ``.config`` file after the Kconfig files have changed (e.g.
+   to add new options), run ``oldconfig`` (prompts for values for new options)
+   or ``olddefconfig`` (gives new options their default value). Entering the
+   ``menuconfig`` or ``guiconfig`` interface and saving the configuration will
+   also update it (the configuration interfaces always prompt for saving
+   on exit if it would modify the contents of the ``.config`` file).
+
+   Due to Kconfig semantics, simply loading an old ``.config`` file performs an
+   implicit ``olddefconfig``, so building will normally not be affected by
+   having an outdated configuration.
+
+Whenever ``.config`` is overwritten, the previous version of the file is saved
+to ``.config.old`` (or, more generally, to ``$KCONFIG_CONFIG.old``).
+
+For some general Kconfig advice, see `this page
+<https://docs.zephyrproject.org/latest/guides/kconfig/index.html>`__.
+
+Using ``.config`` files as Make input
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``.config`` files use Make syntax and can be included directly in Makefiles to
+read configuration values from there. This is why ``n``-valued
+``bool``/``tristate`` values are written out as ``# CONFIG_FOO is not set`` (a
+Make comment) in ``.config``, allowing them to be tested with ``ifdef`` in
+Make.
+
+If you make use of this, you might want to pass ``--config-out <filename>`` to
+``genconfig`` and include the configuration file it generates instead of
+including ``.config`` directly. This has the advantage that the generated
+configuration file will always be a "full" configuration file, even if
+``.config`` is outdated. Otherwise, it might be necessary to run
+``old(def)config`` or ``menuconfig``/``guiconfig`` before rebuilding with an
+outdated ``.config``.
+
+If you use ``--sync-deps`` to generate incremental build information, you can
+include ``deps/auto.conf`` instead, which is also a full configuration file.
+
+Useful helper macros
+~~~~~~~~~~~~~~~~~~~~
+
+The `include/linux/kconfig.h
+<https://github.com/torvalds/linux/blob/master/include/linux/kconfig.h>`_
+header in the Linux kernel defines some useful helper macros for testing
+Kconfig configuration values.
+
+``IS_ENABLED()`` is generally useful, allowing configuration values to be
+tested in ``if`` statements with no runtime overhead.
+
+Incremental building
+~~~~~~~~~~~~~~~~~~~~
+
+See the docstring for ``Kconfig.sync_deps()`` in `kconfiglib.py
+<https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_ for hints
+on implementing incremental builds (rebuilding just source files that reference
+changed configuration values).
+
+Running the ``scripts/basic/fixdep.c`` tool from the kernel on the output of
+``gcc -MD <source file>`` might give you an idea of how it all fits together.
+
+Library documentation
+---------------------
+
+Kconfiglib comes with extensive documentation in the form of docstrings. To view it, run e.g.
+the following command:
+
+.. code:: sh
+
+    $ pydoc(3) kconfiglib
+
+For HTML output, add ``-w``:
+
+.. code:: sh
+
+    $ pydoc(3) -w kconfiglib
+
+This will also work after installing Kconfiglib with ``pip(3)``.
+
+Documentation for the ``menuconfig`` and ``guiconfig`` interfaces can be viewed
+in the same way:
+
+.. code:: sh
+
+    $ pydoc3 menuconfig/guiconfig
+
+A good starting point for learning the library is to read the module docstring
+(which you could also just read directly at the beginning of `kconfiglib.py
+<https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_). It
+gives an introduction to symbol values, the menu tree, and expressions.
+
+After reading the module docstring, a good next step is to read the ``Kconfig``
+class documentation, and then the documentation for the ``Symbol``, ``Choice``,
+and ``MenuNode`` classes.
+
+Please tell me if something is unclear or can be explained better.
+
+Library features
+----------------
+
+Kconfiglib can do the following, among other things:
+
+- **Programmatically get and set symbol values**
+
+  See `allnoconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/allnoconfig.py>`_ and
+  `allyesconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/allyesconfig.py>`_,
+  which are automatically verified to produce identical output to the standard
+  ``make allnoconfig`` and ``make allyesconfig``.
+
+- **Read and write .config and defconfig files**
+
+  The generated ``.config`` and ``defconfig`` (minimal configuration) files are
+  character-for-character identical to what the C implementation would generate
+  (except for the header comment). The test suite relies on this, as it
+  compares the generated files.
+  
+- **Write C headers**
+
+  The generated headers use the same format as ``include/generated/autoconf.h``
+  from the Linux kernel.
+
+- **Implement incremental builds**
+
+  This uses the same scheme as the ``include/config`` directory in the kernel:
+  Symbols are translated into files that are touched when the symbol's value
+  changes between builds, which can be used to avoid having to do a full
+  rebuild whenever the configuration is changed.
+
+  See the ``sync_deps()`` function for more information.
+
+- **Inspect symbols**
+
+  Printing a symbol or other item (which calls ``__str__()``) returns its
+  definition in Kconfig format. This also works for symbols defined in multiple
+  locations.
+
+  A helpful ``__repr__()`` is  on all objects too.
+
+  All ``__str__()`` and ``__repr__()`` methods are deliberately implemented
+  with just public APIs, so all symbol information can be fetched separately as
+  well.
+
+- **Inspect expressions**
+
+  Expressions use a simple tuple-based format that can be processed manually
+  if needed. Expression printing and evaluation functions are provided,
+  implemented with public APIs.
+
+- **Inspect the menu tree**
+
+  The underlying menu tree is exposed, including submenus created implicitly
+  from symbols depending on preceding symbols. This can be used e.g. to
+  implement menuconfig-like functionality.
+  
+  See `menuconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_/`guiconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/guiconfig.py>`_ and the
+  minimalistic `menuconfig_example.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/menuconfig_example.py>`_
+  example.
+
+Kconfig extensions
+~~~~~~~~~~~~~~~~~~
+
+The following Kconfig extensions are available:
+
+- ``source`` supports glob patterns and includes each matching file. A pattern
+  is required to match at least one file.
+
+  A separate ``osource`` statement is available for cases where it's okay for
+  the pattern to match no files (in which case ``osource`` turns into a no-op).
+  
+- A relative ``source`` statement (``rsource``) is available, where file paths
+  are specified relative to the directory of the current Kconfig file. An
+  ``orsource`` statement is available as well, analogous to ``osource``.
+
+- Preprocessor user functions can be defined in Python, which makes it simple
+  to integrate information from existing Python tools into Kconfig (e.g. to
+  have Kconfig symbols depend on hardware information stored in some other
+  format).
+
+  See the *Kconfig extensions* section in the
+  `kconfiglib.py <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_
+  module docstring for more information.
+
+- ``def_int``, ``def_hex``, and ``def_string`` are available in addition to
+  ``def_bool`` and ``def_tristate``, allowing ``int``, ``hex``, and ``string``
+  symbols to be given a type and a default at the same time.
+
+  These can be useful in projects that make use of symbols defined in multiple
+  locations, and remove some Kconfig inconsistency.
+  
+- Environment variables are expanded directly in e.g. ``source`` and
+  ``mainmenu`` statements, meaning ``option env`` symbols are redundant.
+
+  This is the standard behavior with the new `Kconfig preprocessor
+  <https://github.com/torvalds/linux/blob/master/Documentation/kbuild/kconfig-macro-language.txt>`__,
+  which Kconfiglib implements.
+
+  ``option env`` symbols are accepted but ignored, which leads the caveat that
+  they must have the same name as the environment variables they reference
+  (Kconfiglib warns if the names differ). This keeps Kconfiglib compatible with
+  older Linux kernels, where the name of the ``option env`` symbol always
+  matched the environment variable. Compatibility with older Linux kernels is
+  the main reason ``option env`` is still supported.
+
+  The C tools have dropped support for ``option env``.
+
+- Two extra optional warnings can be enabled by setting environment variables,
+  covering cases that are easily missed when making changes to Kconfig files:
+
+  * ``KCONFIG_WARN_UNDEF``: If set to ``y``, warnings will be generated for all
+    references to undefined symbols within Kconfig files. The only gotcha is
+    that all hex literals must be prefixed with ``0x`` or ``0X``, to make it
+    possible to distinguish them from symbol references.
+
+    Some projects (e.g. the Linux kernel) use multiple Kconfig trees with many
+    shared Kconfig files, leading to some safe undefined symbol references.
+    ``KCONFIG_WARN_UNDEF`` is useful in projects that only have a single
+    Kconfig tree though.
+
+    ``KCONFIG_STRICT`` is an older alias for this environment variable,
+    supported for backwards compatibility.
+
+  * ``KCONFIG_WARN_UNDEF_ASSIGN``: If set to ``y``, warnings will be generated
+    for all assignments to undefined symbols within ``.config`` files. By
+    default, no such warnings are generated.
+
+    This warning can also be enabled/disabled by setting
+    ``Kconfig.warn_assign_undef`` to ``True``/``False``.
+
+Other features
+--------------
+
+- **Single-file implementation**
+  
+  The entire library is contained in `kconfiglib.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_.
+
+  The tools implemented on top of it are one file each.
+
+- **Robust and highly compatible with the C Kconfig tools**
+  
+  The `test suite <https://github.com/ulfalizer/Kconfiglib/blob/master/testsuite.py>`_
+  automatically compares output from Kconfiglib and the C tools
+  by diffing the generated ``.config`` files for the real kernel Kconfig and
+  defconfig files, for all ARCHes.
+  
+  This currently involves comparing the output for 36 ARCHes and 498 defconfig
+  files (or over 18000 ARCH/defconfig combinations in "obsessive" test suite
+  mode). All tests are expected to pass.
+
+  A comprehensive suite of selftests is included as well.
+
+- **Not horribly slow despite being a pure Python implementation**
+  
+  The `allyesconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/allyesconfig.py>`_
+  script currently runs in about 1.3 seconds on the Linux kernel on a Core i7
+  2600K (with a warm file cache), including the ``make`` overhead from ``make
+  scriptconfig``. Note that the Linux kernel Kconfigs are absolutely massive
+  (over 14k symbols for x86) compared to most projects, and also have overhead
+  from running shell commands via the Kconfig preprocessor.
+  
+  Kconfiglib is especially speedy in cases where multiple ``.config`` files
+  need to be processed, because the ``Kconfig`` files will only need to be parsed
+  once.
+
+  For long-running jobs, `PyPy <https://pypy.org/>`_ gives a big performance
+  boost. CPython is faster for short-running jobs as PyPy needs some time to
+  warm up.
+  
+  Kconfiglib also works well with the
+  `multiprocessing <https://docs.python.org/3/library/multiprocessing.html>`_
+  module. No global state is kept.
+
+- **Generates more warnings than the C implementation**
+
+  Generates the same warnings as the C implementation, plus additional ones.
+  Also detects dependency and ``source`` loops.
+
+  All warnings point out the location(s) in the ``Kconfig`` files where a
+  symbol is defined, where applicable.
+
+- **Unicode support**
+
+  Unicode characters in string literals in ``Kconfig`` and ``.config`` files are
+  correctly handled. This support mostly comes for free from Python.
+
+- **Windows support**
+
+  Nothing Linux-specific is used. Universal newlines mode is used for both
+  Python 2 and Python 3.
+  
+  The `Zephyr <https://www.zephyrproject.org/>`_ project uses Kconfiglib to
+  generate ``.config`` files and C headers on Linux as well as Windows.
+
+- **Internals that (mostly) mirror the C implementation**
+  
+  While being simpler to understand and tweak.
+
+Menuconfig interfaces
+---------------------
+
+Three configuration interfaces are currently available:
+
+- `menuconfig.py <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_
+  is a terminal-based configuration interface implemented using the standard
+  Python ``curses`` module. ``xconfig`` features like showing invisible symbols and
+  showing symbol names are included, and it's possible to jump directly to a symbol
+  in the menu tree (even if it's currently invisible).
+  
+  .. image:: https://raw.githubusercontent.com/ulfalizer/Kconfiglib/screenshots/screenshots/menuconfig.gif
+
+  *There is now also a show-help mode that shows the help text of the currently
+  selected symbol in the help window at the bottom.*
+
+  Starting with Kconfiglib 12.2.0, ``menuconfig.py`` runs under both Python 2
+  and Python 3 (previously, it only ran under Python 3, so this was a
+  backport). Running it under Python 3 provides better support for Unicode text
+  entry (``get_wch()`` is not available in the ``curses`` module on Python 2).
+
+  There are no third-party dependencies on \*nix. On Windows,
+  the ``curses`` modules is not available by default, but support
+  can be added by installing the ``windows-curses`` package (which is
+  installed automatically when Kconfiglib is installed via ``pip``
+  on Windows):
+  
+  .. code-block:: shell
+
+      $ pip install windows-curses
+
+  This uses wheels built from `this repository
+  <https://github.com/zephyrproject-rtos/windows-curses>`_, which is in turn
+  based on Christoph Gohlke's `Python Extension Packages for Windows
+  <https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses>`_.
+
+  See the docstring at the top of `menuconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_ for
+  more information about the terminal menuconfig implementation.
+
+- `guiconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/guiconfig.py>`_ is a
+  graphical configuration interface written in `Tkinter
+  <https://docs.python.org/3/library/tkinter.html>`_. Like ``menuconfig.py``,
+  it supports showing all symbols (with invisible symbols in red) and jumping
+  directly to symbols. Symbol values can also be changed directly from the
+  jump-to dialog.
+
+  When single-menu mode is enabled, a single menu is shown at a time, like in
+  the terminal menuconfig. Only this mode distinguishes between symbols defined
+  with ``config`` and symbols defined with ``menuconfig``.
+
+  ``guiconfig.py`` has been tested on X11, Windows, and macOS, and is
+  compatible with both Python 2 and Python 3.
+
+  Despite being part of the Python standard library, ``tkinter`` often isn't
+  included by default in Python installations on Linux. These commands will
+  install it on a few different distributions:
+
+  - Ubuntu: ``sudo apt install python-tk``/``sudo apt install python3-tk``
+
+  - Fedora: ``dnf install python2-tkinter``/``dnf install python3-tkinter``
+
+  - Arch: ``sudo pacman -S tk``
+
+  - Clear Linux: ``sudo swupd bundle-add python3-tcl``
+
+  Screenshot below, with show-all mode enabled and the jump-to dialog open:
+
+  .. image:: https://raw.githubusercontent.com/ulfalizer/Kconfiglib/screenshots/screenshots/guiconfig.png
+
+  To avoid having to carry around a bunch of GIFs, the image data is embedded
+  in ``guiconfig.py``. To use separate GIF files instead, change
+  ``_USE_EMBEDDED_IMAGES`` to ``False`` in ``guiconfig.py``. The image files
+  can be found in the `screenshots
+  <https://github.com/ulfalizer/Kconfiglib/tree/screenshots/guiconfig>`_
+  branch.
+
+  I did my best with the images, but some are definitely only art adjacent.
+  Touch-ups are welcome. :)
+
+- `pymenuconfig <https://github.com/RomaVis/pymenuconfig>`_, built by `RomaVis
+  <https://github.com/RomaVis>`_, is an older portable Python 2/3 TkInter
+  menuconfig implementation.
+
+  Screenshot below:
+
+  .. image:: https://raw.githubusercontent.com/RomaVis/pymenuconfig/master/screenshot.PNG
+
+  While working on the terminal menuconfig implementation, I added a few APIs
+  to Kconfiglib that turned out to be handy. ``pymenuconfig`` predates
+  ``menuconfig.py`` and ``guiconfig.py``, and so didn't have them available.
+  Blame me for any workarounds.
+
+Examples
+--------
+
+Example scripts
+~~~~~~~~~~~~~~~
+
+The `examples/ <https://github.com/ulfalizer/Kconfiglib/blob/master/examples>`_ directory contains some simple example scripts. Among these are the following ones. Make sure you run them with the latest version of Kconfiglib, as they might make use of newly added features.
+
+- `eval_expr.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/eval_expr.py>`_ evaluates an expression in the context of a configuration.
+
+- `find_symbol.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/find_symbol.py>`_ searches through expressions to find references to a symbol, also printing a "backtrace" with parents for each reference found.
+
+- `help_grep.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/help_grep.py>`_ searches for a string in all help texts.
+
+- `print_tree.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/print_tree.py>`_ prints a tree of all configuration items.
+
+- `print_config_tree.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/print_config_tree.py>`_ is similar to ``print_tree.py``, but dumps the tree as it would appear in ``menuconfig``, including values. This can be handy for visually diffing between ``.config`` files and different versions of ``Kconfig`` files.
+
+- `list_undefined.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/list_undefined.py>`_ finds references to symbols that are not defined by any architecture in the Linux kernel.
+
+- `merge_config.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/merge_config.py>`_ merges configuration fragments to produce a complete .config, similarly to ``scripts/kconfig/merge_config.sh`` from the kernel.
+
+- `menuconfig_example.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/menuconfig_example.py>`_ implements a configuration interface that uses notation similar to ``make menuconfig``. It's deliberately kept as simple as possible to demonstrate just the core concepts.
+
+Real-world examples
+~~~~~~~~~~~~~~~~~~~
+
+- `kconfig.py
+  <https://github.com/zephyrproject-rtos/zephyr/blob/master/scripts/kconfig/kconfig.py>`_
+  from the `Zephyr <https://www.zephyrproject.org/>`_ project handles
+  ``.config`` and header file generation, also doing configuration fragment
+  merging
+
+- `genrest.py
+  <https://github.com/zephyrproject-rtos/zephyr/blob/master/doc/scripts/genrest.py>`_
+  generates a Kconfig symbol cross-reference, which can be viewed `here
+  <http://docs.zephyrproject.org/reference/kconfig/index.html>`__
+
+- `CMake and IDE integration
+  <https://github.com/espressif/esp-idf/tree/master/tools/kconfig_new>`_ from
+  the ESP-IDF project, via a configuration server program.
+
+- `A script for turning on USB-related options
+  <https://github.com/google/syzkaller/blob/master/dashboard/config/kconfiglib-merge-usb-configs.py>`_,
+  from the `syzkaller <https://github.com/google/syzkaller>`_ project.
+
+- `Various automated checks
+  <https://github.com/zephyrproject-rtos/ci-tools/blob/master/scripts/check_compliance.py>`_,
+  including a check for references to undefined Kconfig symbols in source code.
+  See the ``KconfigCheck`` class.
+
+- `Various utilities
+  <https://github.com/projectacrn/acrn-hypervisor/tree/master/scripts/kconfig>`_
+  from the `ACRN <https://projectacrn.org/>`_ project
+
+These use the older Kconfiglib 1 API, which was clunkier and not as general
+(functions instead of properties, no direct access to the menu structure or
+properties, uglier ``__str__()`` output):
+
+- `genboardscfg.py <http://git.denx.de/?p=u-boot.git;a=blob;f=tools/genboardscfg.py;hb=HEAD>`_ from `Das U-Boot <http://www.denx.de/wiki/U-Boot>`_ generates some sort of legacy board database by pulling information from a newly added Kconfig-based configuration system (as far as I understand it :).
+
+- `gen-manual-lists.py <https://git.busybox.net/buildroot/tree/support/scripts/gen-manual-lists.py?id=5676a2deea896f38123b99781da0a612865adeb0>`_ generated listings for an appendix in the `Buildroot <https://buildroot.org>`_ manual. (The listing has since been removed.)
+
+- `gen_kconfig_doc.py <https://github.com/espressif/esp-idf/blob/master/docs/gen-kconfig-doc.py>`_ from the `esp-idf <https://github.com/espressif/esp-idf>`_ project generates documentation from Kconfig files.
+
+- `SConf <https://github.com/CoryXie/SConf>`_ builds an interactive configuration interface (like ``menuconfig``) on top of Kconfiglib, for use e.g. with `SCons <scons.org>`_.
+
+- `kconfig-diff.py <https://gist.github.com/dubiousjim/5638961>`_ -- a script by `dubiousjim <https://github.com/dubiousjim>`_ that compares kernel configurations.
+
+- Originally, Kconfiglib was used in chapter 4 of my `master's thesis <http://liu.diva-portal.org/smash/get/diva2:473038/FULLTEXT01.pdf>`_ to automatically generate a "minimal" kernel for a given system. Parts of it bother me a bit now, but that's how it goes with old work.
+
+Sample ``make iscriptconfig`` session
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following log should give some idea of the functionality available in the API:
+
+.. code-block::
+
+    $ make iscriptconfig
+    A Kconfig instance 'kconf' for the architecture x86 has been created.
+    >>> kconf  # Calls Kconfig.__repr__()
+    <configuration with 13711 symbols, main menu prompt "Linux/x86 4.14.0-rc7 Kernel Configuration", srctree ".", config symbol prefix "CONFIG_", warnings enabled, undef. symbol assignment warnings disabled>
+    >>> kconf.mainmenu_text  # Expanded main menu text
+    'Linux/x86 4.14.0-rc7 Kernel Configuration'
+    >>> kconf.top_node  # The implicit top-level menu
+    <menu node for menu, prompt "Linux/x86 4.14.0-rc7 Kernel Configuration" (visibility y), deps y, 'visible if' deps y, has child, Kconfig:5>
+    >>> kconf.top_node.list  # First child menu node
+    <menu node for symbol SRCARCH, deps y, has next, Kconfig:7>
+    >>> print(kconf.top_node.list)  # Calls MenuNode.__str__()
+    config SRCARCH
+    	string
+    	option env="SRCARCH"
+    	default "x86"
+    >>> sym = kconf.top_node.list.next.item  # Item contained in next menu node
+    >>> print(sym)  # Calls Symbol.__str__()
+    config 64BIT
+    	bool "64-bit kernel" if ARCH = "x86"
+    	default ARCH != "i386"
+    	help
+    	  Say yes to build a 64-bit kernel - formerly known as x86_64
+    	  Say no to build a 32-bit kernel - formerly known as i386
+    >>> sym  # Calls Symbol.__repr__()
+    <symbol 64BIT, bool, "64-bit kernel", value y, visibility y, direct deps y, arch/x86/Kconfig:2>
+    >>> sym.assignable  # Currently assignable values (0, 1, 2 = n, m, y)
+    (0, 2)
+    >>> sym.set_value(0)  # Set it to n
+    True
+    >>> sym.tri_value  # Check the new value
+    0
+    >>> sym = kconf.syms["X86_MPPARSE"]  # Look up symbol by name
+    >>> print(sym)
+    config X86_MPPARSE
+    	bool "Enable MPS table" if (ACPI || SFI) && X86_LOCAL_APIC
+    	default y if X86_LOCAL_APIC
+    	help
+    	  For old smp systems that do not have proper acpi support. Newer systems
+    	  (esp with 64bit cpus) with acpi support, MADT and DSDT will override it
+    >>> default = sym.defaults[0]  # Fetch its first default
+    >>> sym = default[1]  # Fetch the default's condition (just a Symbol here)
+    >>> print(sym)
+    config X86_LOCAL_APIC
+    	bool
+    	default y
+    	select IRQ_DOMAIN_HIERARCHY
+    	select PCI_MSI_IRQ_DOMAIN if PCI_MSI
+    	depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI
+    >>> sym.nodes  # Show the MenuNode(s) associated with it
+    [<menu node for symbol X86_LOCAL_APIC, deps n, has next, arch/x86/Kconfig:1015>]
+    >>> kconfiglib.expr_str(sym.defaults[0][1])  # Print the default's condition
+    'X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI'
+    >>> kconfiglib.expr_value(sym.defaults[0][1])  # Evaluate it (0 = n)
+    0
+    >>> kconf.syms["64BIT"].set_value(2)
+    True
+    >>> kconfiglib.expr_value(sym.defaults[0][1])  # Evaluate it again (2 = y)
+    2
+    >>> kconf.write_config("myconfig")  # Save a .config
+    >>> ^D
+    $ cat myconfig
+    # Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)
+    CONFIG_64BIT=y
+    CONFIG_X86_64=y
+    CONFIG_X86=y
+    CONFIG_INSTRUCTION_DECODER=y
+    CONFIG_OUTPUT_FORMAT="elf64-x86-64"
+    CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+    CONFIG_LOCKDEP_SUPPORT=y
+    CONFIG_STACKTRACE_SUPPORT=y
+    CONFIG_MMU=y
+    ...
+ 
+Test suite
+----------
+
+The test suite is run with
+
+.. code::
+
+    $ python(3) Kconfiglib/testsuite.py
+    
+`pypy <https://pypy.org/>`_ works too, and is much speedier for everything except ``allnoconfig.py``/``allnoconfig_simpler.py``/``allyesconfig.py``, where it doesn't have time to warm up since
+the scripts are run via ``make scriptconfig``.
+
+The test suite must be run from the top-level kernel directory. It requires that the
+Kconfiglib git repository has been cloned into it and that the makefile patch has been applied.
+
+To get rid of warnings generated for the kernel ``Kconfig`` files, add ``2>/dev/null`` to the command to
+discard ``stderr``.
+
+**NOTE: Forgetting to apply the Makefile patch will cause some tests that compare generated configurations to fail**
+
+**NOTE: The test suite overwrites .config in the kernel root, so make sure to back it up.**
+
+The test suite consists of a set of selftests and a set of compatibility tests that
+compare configurations generated by Kconfiglib with
+configurations generated by the C tools, for a number of cases. See
+`testsuite.py <https://github.com/ulfalizer/Kconfiglib/blob/master/testsuite.py>`_
+for the available options.
+
+The `tests/reltest <https://github.com/ulfalizer/Kconfiglib/blob/master/tests/reltest>`_ script runs the test suite
+and all the example scripts for both Python 2 and Python 3, verifying that everything works.
+
+Rarely, the output from the C tools is changed slightly (most recently due to a
+`change <https://www.spinics.net/lists/linux-kbuild/msg17074.html>`_ I added).
+If you get test suite failures, try running the test suite again against the
+`linux-next tree <https://www.kernel.org/doc/man-pages/linux-next.html>`_,
+which has all the latest changes. I will make it clear if any
+non-backwards-compatible changes appear.
+
+A lot of time is spent waiting around for ``make`` and the C utilities (which need to reparse all the
+Kconfig files for each defconfig test). Adding some multiprocessing to the test suite would make sense
+too.
+
+Notes
+-----
+
+* This is version 2 of Kconfiglib, which is not backwards-compatible with
+  Kconfiglib 1. A summary of changes between Kconfiglib 1 and Kconfiglib
+  2 can be found `here
+  <https://github.com/ulfalizer/Kconfiglib/blob/screenshots/kconfiglib-2-changes.txt>`__.
+
+* I sometimes see people add custom output formats, which is pretty
+  straightforward to do (see the implementations of ``write_autoconf()`` and
+  ``write_config()`` for a template, and also the documentation of the
+  ``Symbol.config_string`` property). If you come up with something you think
+  might be useful to other people, I'm happy to take it in upstream. Batteries
+  included and all that.
+
+* Kconfiglib assumes the modules symbol is ``MODULES``, which is backwards-compatible.
+  A warning is printed by default if ``option modules`` is set on some other symbol.
+  
+  Let me know if you need proper ``option modules`` support. It wouldn't be that
+  hard to add.
+
+Thanks
+------
+
+- To `RomaVis <https://github.com/RomaVis>`_, for making
+  `pymenuconfig <https://github.com/RomaVis/pymenuconfig>`_ and suggesting
+  the ``rsource`` keyword.
+
+- To `Mitja Horvat <https://github.com/pinkfluid>`_, for adding support
+  for user-defined styles to the terminal menuconfig.
+
+- To `Philip Craig <https://github.com/philipc>`_ for adding
+  support for the ``allnoconfig_y`` option and fixing an obscure issue
+  with ``comment``\s inside ``choice``\s (that didn't affect correctness but
+  made outputs differ). ``allnoconfig_y`` is used to force certain symbols
+  to ``y`` during ``make allnoconfig`` to improve coverage.
+
+License
+-------
+
+See `LICENSE.txt <https://github.com/ulfalizer/Kconfiglib/blob/master/LICENSE.txt>`_. SPDX license identifiers are used in the
+source code.
diff --git a/support/kconfiglib/alldefconfig.py b/support/kconfiglib/alldefconfig.py
new file mode 100755
index 00000000..5082fcbf
--- /dev/null
+++ b/support/kconfiglib/alldefconfig.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where all symbols are set to their their default
+values.
+
+The default output filename is '.config'. A different filename can be passed in
+the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/alldefconfig.py
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+    kconfiglib.load_allconfig(kconf, "alldef.config")
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/allmodconfig.py b/support/kconfiglib/allmodconfig.py
new file mode 100755
index 00000000..9ae0b3bc
--- /dev/null
+++ b/support/kconfiglib/allmodconfig.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where as many symbols as possible are set to 'm'.
+
+The default output filename is '.config'. A different filename can be passed
+in the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allmodconfig.py
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+
+    # See allnoconfig.py
+    kconf.warn = False
+
+    for sym in kconf.unique_defined_syms:
+        if sym.orig_type == kconfiglib.BOOL:
+            # 'bool' choice symbols get their default value, as determined by
+            # e.g. 'default's on the choice
+            if not sym.choice:
+                # All other bool symbols get set to 'y', like for allyesconfig
+                sym.set_value(2)
+        elif sym.orig_type == kconfiglib.TRISTATE:
+            sym.set_value(1)
+
+    for choice in kconf.unique_choices:
+        choice.set_value(2 if choice.orig_type == kconfiglib.BOOL else 1)
+
+    kconf.warn = True
+
+    kconfiglib.load_allconfig(kconf, "allmod.config")
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/allnoconfig.py b/support/kconfiglib/allnoconfig.py
new file mode 100755
index 00000000..e162ccbe
--- /dev/null
+++ b/support/kconfiglib/allnoconfig.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where as many symbols as possible are set to 'n'.
+
+The default output filename is '.config'. A different filename can be passed
+in the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allmodconfig.py
+
+See the examples/allnoconfig_walk.py example script for another way to
+implement this script.
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+
+    # Avoid warnings that would otherwise get printed by Kconfiglib for the
+    # following:
+    #
+    # 1. Assigning a value to a symbol without a prompt, which never has any
+    #    effect
+    #
+    # 2. Assigning values invalid for the type (only bool/tristate symbols
+    #    accept 0/1/2, for n/m/y). The assignments will be ignored for other
+    #    symbol types, which is what we want.
+    kconf.warn = False
+    for sym in kconf.unique_defined_syms:
+        sym.set_value(2 if sym.is_allnoconfig_y else 0)
+    kconf.warn = True
+
+    kconfiglib.load_allconfig(kconf, "allno.config")
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/allyesconfig.py b/support/kconfiglib/allyesconfig.py
new file mode 100755
index 00000000..e19ab31e
--- /dev/null
+++ b/support/kconfiglib/allyesconfig.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where as many symbols as possible are set to 'y'.
+
+The default output filename is '.config'. A different filename can be passed
+in the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allmodconfig.py
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+
+    # See allnoconfig.py
+    kconf.warn = False
+
+    # Try to set all symbols to 'y'. Dependencies might truncate the value down
+    # later, but this will at least give the highest possible value.
+    #
+    # Assigning 0/1/2 to non-bool/tristate symbols has no effect (int/hex
+    # symbols still take a string, because they preserve formatting).
+    for sym in kconf.unique_defined_syms:
+        # Set choice symbols to 'm'. This value will be ignored for choices in
+        # 'y' mode (the "normal" mode), which will instead just get their
+        # default selection, but will set all symbols in m-mode choices to 'm',
+        # which is as high as they can go.
+        #
+        # Here's a convoluted example of how you might get an m-mode choice
+        # even during allyesconfig:
+        #
+        #   choice
+        #           tristate "weird choice"
+        #           depends on m
+        sym.set_value(1 if sym.choice else 2)
+
+    # Set all choices to the highest possible mode
+    for choice in kconf.unique_choices:
+        choice.set_value(2)
+
+    kconf.warn = True
+
+    kconfiglib.load_allconfig(kconf, "allyes.config")
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/defconfig.py b/support/kconfiglib/defconfig.py
new file mode 100755
index 00000000..d1b1e4ea
--- /dev/null
+++ b/support/kconfiglib/defconfig.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Reads a specified configuration file, then writes a new configuration file.
+This can be used to initialize the configuration from e.g. an arch-specific
+configuration file. This input configuration file would usually be a minimal
+configuration file, as generated by e.g. savedefconfig.
+
+The default output filename is '.config'. A different filename can be passed in
+the KCONFIG_CONFIG environment variable.
+"""
+import argparse
+
+import kconfiglib
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--kconfig",
+        default="Kconfig",
+        help="Base Kconfig file (default: Kconfig)")
+
+    parser.add_argument(
+        "config",
+        metavar="CONFIGURATION",
+        help="Input configuration file")
+
+    args = parser.parse_args()
+
+    kconf = kconfiglib.Kconfig(args.kconfig)
+    print(kconf.load_config(args.config))
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/examples/Kmenuconfig b/support/kconfiglib/examples/Kmenuconfig
new file mode 100644
index 00000000..f1cb67bd
--- /dev/null
+++ b/support/kconfiglib/examples/Kmenuconfig
@@ -0,0 +1,102 @@
+mainmenu "Example Kconfig configuration"
+
+config MODULES
+	bool "Enable loadable module support"
+	option modules
+	default y
+
+menu "Bool and tristate symbols"
+
+config BOOL
+	bool "Bool symbol"
+	default y
+
+config BOOL_DEP
+	bool "Dependent bool symbol"
+	depends on BOOL
+
+# Mix it up a bit with an 'if' instead of a 'depends on'
+if BOOL
+
+config TRI_DEP
+	tristate "Dependent tristate symbol"
+	select SELECTED_BY_TRI_DEP
+	imply IMPLIED_BY_TRI_DEP
+
+endif
+
+config TWO_MENU_NODES
+	bool "First prompt"
+	depends on BOOL
+
+config TRI
+	tristate "Tristate symbol"
+
+config TWO_MENU_NODES
+	bool "Second prompt"
+
+comment "These are selected by TRI_DEP"
+
+config SELECTED_BY_TRI_DEP
+	tristate "Tristate selected by TRI_DEP"
+
+config IMPLIED_BY_TRI_DEP
+	tristate "Tristate implied by TRI_DEP"
+
+endmenu
+
+
+menu "String, int, and hex symbols"
+
+config STRING
+	string "String symbol"
+	default "foo"
+
+config INT
+	int "Int symbol"
+	default 747
+
+config HEX
+	hex "Hex symbol"
+	default 0xABC
+
+endmenu
+
+
+menu "Various choices"
+
+choice BOOL_CHOICE
+	bool "Bool choice"
+
+config BOOL_CHOICE_SYM_1
+	bool "Bool choice sym 1"
+
+config BOOL_CHOICE_SYM_2
+	bool "Bool choice sym 2"
+
+endchoice
+
+choice TRI_CHOICE
+	tristate "Tristate choice"
+
+config TRI_CHOICE_SYM_1
+	tristate "Tristate choice sym 1"
+
+config TRI_CHOICE_SYM_2
+	tristate "Tristate choice sym 2"
+
+endchoice
+
+choice OPT_BOOL_CHOICE
+	bool "Optional bool choice"
+	optional
+
+config OPT_BOOL_CHOICE_SYM_1
+	bool "Optional bool choice sym 1"
+
+config OPT_BOOL_CHOICE_SYM_2
+	bool "Optional bool choice sym 2"
+
+endchoice
+
+endmenu
diff --git a/support/kconfiglib/examples/allnoconfig_walk.py b/support/kconfiglib/examples/allnoconfig_walk.py
new file mode 100644
index 00000000..5a8cc236
--- /dev/null
+++ b/support/kconfiglib/examples/allnoconfig_walk.py
@@ -0,0 +1,66 @@
+# This is tree-walking version of allnoconfig.py, for demonstration purposes.
+# Verified by the test suite to generate identical output to 'make allnoconfig'
+# for all ARCHes.
+#
+# Note: A more practical version would use Kconfig.node_iter(). The manual tree
+# walking is for demonstration purposes.
+#
+# Usage for the Linux kernel:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allnoconfig_walk.py
+
+import sys
+
+from kconfiglib import Kconfig, Symbol
+
+
+def do_allnoconfig(node):
+    global changed
+
+    # Walk the tree of menu nodes. You can imagine this as going down/into menu
+    # entries in the menuconfig interface, setting each to n (or the lowest
+    # assignable value).
+
+    while node:
+        if isinstance(node.item, Symbol):
+            sym = node.item
+
+            # Is the symbol a non-allnoconfig_y symbol that can be set to a
+            # lower value than its current value?
+            if (not sym.is_allnoconfig_y and
+                sym.assignable and
+                sym.assignable[0] < sym.tri_value):
+
+                # Yup, lower it
+                sym.set_value(sym.assignable[0])
+                changed = True
+
+        # Recursively lower children
+        if node.list:
+            do_allnoconfig(node.list)
+
+        node = node.next
+
+
+# Parse the Kconfig files
+kconf = Kconfig(sys.argv[1])
+
+# Do an initial pass to set 'option allnoconfig_y' symbols to y
+for sym in kconf.unique_defined_syms:
+    if sym.is_allnoconfig_y:
+        sym.set_value(2)
+
+while True:
+    # Changing later symbols in the configuration can sometimes allow earlier
+    # symbols to be lowered, e.g. if a later symbol 'select's an earlier
+    # symbol. To handle such situations, we do additional passes over the tree
+    # until we're no longer able to change the value of any symbol in a pass.
+    changed = False
+
+    do_allnoconfig(kconf.top_node)
+
+    # Did the pass change any symbols?
+    if not changed:
+        break
+
+print(kconf.write_config())
diff --git a/support/kconfiglib/examples/defconfig_oldconfig.py b/support/kconfiglib/examples/defconfig_oldconfig.py
new file mode 100644
index 00000000..68336c65
--- /dev/null
+++ b/support/kconfiglib/examples/defconfig_oldconfig.py
@@ -0,0 +1,39 @@
+# Produces exactly the same output as the following script:
+#
+# make defconfig
+# echo CONFIG_ETHERNET=n >> .config
+# make oldconfig
+# echo CONFIG_ETHERNET=y >> .config
+# yes n | make oldconfig
+#
+# This came up in https://github.com/ulfalizer/Kconfiglib/issues/15.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/defconfig_oldconfig.py
+
+import sys
+
+import kconfiglib
+
+
+kconf = kconfiglib.Kconfig(sys.argv[1])
+
+# Mirrors defconfig
+kconf.load_config("arch/x86/configs/x86_64_defconfig")
+kconf.write_config()
+
+# Mirrors the first oldconfig
+kconf.load_config()
+kconf.syms["ETHERNET"].set_value(0)
+kconf.write_config()
+
+# Mirrors the second oldconfig
+kconf.load_config()
+kconf.syms["ETHERNET"].set_value(2)
+for s in kconf.unique_defined_syms:
+    if s.user_value is None and 0 in s.assignable:
+        s.set_value(0)
+
+# Write the final configuration
+print(kconf.write_config())
diff --git a/support/kconfiglib/examples/dumpvars.py b/support/kconfiglib/examples/dumpvars.py
new file mode 100644
index 00000000..0f8ab43c
--- /dev/null
+++ b/support/kconfiglib/examples/dumpvars.py
@@ -0,0 +1,15 @@
+# Prints all (set) environment variables referenced in the Kconfig files
+# together with their values, as a list of assignments.
+#
+# Note: This only works for environment variables referenced via the $(FOO)
+# preprocessor syntax. The older $FOO syntax is maintained for backwards
+# compatibility.
+
+import os
+import sys
+
+import kconfiglib
+
+
+print(" ".join("{}='{}'".format(var, os.environ[var])
+               for var in kconfiglib.Kconfig(sys.argv[1]).env_vars))
diff --git a/support/kconfiglib/examples/eval_expr.py b/support/kconfiglib/examples/eval_expr.py
new file mode 100644
index 00000000..23eedb49
--- /dev/null
+++ b/support/kconfiglib/examples/eval_expr.py
@@ -0,0 +1,24 @@
+# Evaluates an expression (e.g. "X86_64 || (X86_32 && X86_LOCAL_APIC)") in the
+# context of a configuration. Note that this always yields a tristate value (n,
+# m, or y).
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/eval_expr.py SCRIPT_ARG=<expr>
+
+import sys
+
+import kconfiglib
+
+
+if len(sys.argv) < 3:
+    sys.exit("Pass the expression to evaluate with SCRIPT_ARG=<expression>")
+
+kconf = kconfiglib.Kconfig(sys.argv[1])
+expr = sys.argv[2]
+
+# Enable modules so that m doesn't get demoted to n
+kconf.modules.set_value(2)
+
+print("the expression '{}' evaluates to {}"
+      .format(expr, kconf.eval_string(expr)))
diff --git a/support/kconfiglib/examples/find_symbol.py b/support/kconfiglib/examples/find_symbol.py
new file mode 100644
index 00000000..f7471034
--- /dev/null
+++ b/support/kconfiglib/examples/find_symbol.py
@@ -0,0 +1,112 @@
+# Prints all menu nodes that reference a given symbol any of their properties
+# or property conditions, along with their parent menu nodes.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/find_symbol.py SCRIPT_ARG=<name>
+#
+# Example output for SCRIPT_ARG=X86:
+#
+#   Found 470 locations that reference X86:
+#
+#   ========== Location 1 (init/Kconfig:1108) ==========
+#
+#   config SGETMASK_SYSCALL
+#   	bool
+#   	prompt "sgetmask/ssetmask syscalls support" if EXPERT
+#   	default PARISC || M68K || PPC || MIPS || X86 || SPARC || MICROBLAZE || SUPERH
+#   	help
+#   	  sys_sgetmask and sys_ssetmask are obsolete system calls
+#   	  no longer supported in libc but still enabled by default in some
+#   	  architectures.
+#
+#   	  If unsure, leave the default option here.
+#
+#   ---------- Parent 1 (init/Kconfig:1077)  ----------
+#
+#   menuconfig EXPERT
+#   	bool
+#   	prompt "Configure standard kernel features (expert users)"
+#   	select DEBUG_KERNEL
+#   	help
+#   	  This option allows certain base kernel options and settings
+#   	  to be disabled or tweaked. This is for specialized
+#   	  environments which can tolerate a "non-standard" kernel.
+#   	  Only use this if you really know what you are doing.
+#
+#   ---------- Parent 2 (init/Kconfig:39)  ----------
+#
+#   menu "General setup"
+#
+#   ========== Location 2 (arch/Kconfig:29) ==========
+#
+#   config OPROFILE_EVENT_MULTIPLEX
+#   	bool
+#   	prompt "OProfile multiplexing support (EXPERIMENTAL)"
+#   	default "n"
+#   	depends on OPROFILE && X86
+#   	help
+#   	  The number of hardware counters is limited. The multiplexing
+#   	  feature enables OProfile to gather more events than counters
+#   	  are provided by the hardware. This is realized by switching
+#   	  between events at a user specified time interval.
+#
+#   	  If unsure, say N.
+#
+#   ---------- Parent 1 (arch/Kconfig:16)  ----------
+#
+#   config OPROFILE
+#   	tristate
+#   	prompt "OProfile system profiling"
+#   	select RING_BUFFER
+#   	select RING_BUFFER_ALLOW_SWAP
+#   	depends on PROFILING && HAVE_OPROFILE
+#   	help
+#   	  OProfile is a profiling system capable of profiling the
+#   	  whole system, include the kernel, kernel modules, libraries,
+#   	  and applications.
+#
+#   	  If unsure, say N.
+#
+#   ---------- Parent 2 (init/Kconfig:39)  ----------
+#
+#   menu "General setup"
+#
+#   ... (tons more)
+
+import sys
+
+import kconfiglib
+
+
+if len(sys.argv) < 3:
+    sys.exit('Pass symbol name (without "CONFIG_" prefix) with SCRIPT_ARG=<name>')
+
+kconf = kconfiglib.Kconfig(sys.argv[1])
+sym_name = sys.argv[2]
+if sym_name not in kconf.syms:
+    print("No symbol {} exists in the configuration".format(sym_name))
+    sys.exit(0)
+
+referencing = [node for node in kconf.node_iter()
+               if kconf.syms[sym_name] in node.referenced]
+if not referencing:
+    print("No references to {} found".format(sym_name))
+    sys.exit(0)
+
+print("Found {} locations that reference {}:\n"
+      .format(len(referencing), sym_name))
+
+for i, node in enumerate(referencing, 1):
+    print("========== Location {} ({}:{}) ==========\n\n{}"
+          .format(i, node.filename, node.linenr, node))
+
+    # Print the parents of the menu node too
+
+    node = node.parent
+    parent_i = 1
+    while node is not kconf.top_node:
+        print("---------- Parent {} ({}:{})  ----------\n\n{}"
+              .format(parent_i, node.filename, node.linenr, node))
+        node = node.parent
+        parent_i += 1
diff --git a/support/kconfiglib/examples/help_grep.py b/support/kconfiglib/examples/help_grep.py
new file mode 100644
index 00000000..157d8f2b
--- /dev/null
+++ b/support/kconfiglib/examples/help_grep.py
@@ -0,0 +1,64 @@
+# Does a case-insensitive search for a regular expression in the help texts of
+# symbols and choices and the prompts of menus and comments. Prints the
+# matching items together with their locations and the matching text.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/help_grep.py SCRIPT_ARG=<regex>
+#
+# Shortened example output for SCRIPT_ARG=general:
+#
+#   menu "General setup"
+#   location: init/Kconfig:39
+#
+#   config SYSVIPC
+#   	bool
+#   	prompt "System V IPC"
+#   	help
+#   	  ...
+#   	  exchange information. It is generally considered to be a good thing,
+#   	  ...
+#
+#   location: init/Kconfig:233
+#
+#   config BSD_PROCESS_ACCT
+#   	bool
+#   	prompt "BSD Process Accounting" if MULTIUSER
+#   	help
+#   	  ...
+#   	  information.  This is generally a good idea, so say Y.
+#
+#   location: init/Kconfig:403
+#
+#   ...
+
+
+import re
+import sys
+
+from kconfiglib import Kconfig, Symbol, Choice, MENU, COMMENT
+
+
+if len(sys.argv) < 3:
+    sys.exit("Pass the regex with SCRIPT_ARG=<regex>")
+
+search = re.compile(sys.argv[2], re.IGNORECASE).search
+
+for node in Kconfig(sys.argv[1]).node_iter():
+    match = False
+
+    if isinstance(node.item, (Symbol, Choice)) and \
+       node.help is not None and search(node.help):
+        print(node.item)
+        match = True
+
+    elif node.item == MENU and search(node.prompt[0]):
+        print('menu "{}"'.format(node.prompt[0]))
+        match = True
+
+    elif node.item == COMMENT and search(node.prompt[0]):
+        print('comment "{}"'.format(node.prompt[0]))
+        match = True
+
+    if match:
+        print("location: {}:{}\n".format(node.filename, node.linenr))
diff --git a/support/kconfiglib/examples/kconfiglib.py b/support/kconfiglib/examples/kconfiglib.py
new file mode 120000
index 00000000..b9dfb642
--- /dev/null
+++ b/support/kconfiglib/examples/kconfiglib.py
@@ -0,0 +1 @@
+../kconfiglib.py
\ No newline at end of file
diff --git a/support/kconfiglib/examples/list_undefined.py b/support/kconfiglib/examples/list_undefined.py
new file mode 100644
index 00000000..4a3bc9b3
--- /dev/null
+++ b/support/kconfiglib/examples/list_undefined.py
@@ -0,0 +1,156 @@
+# Prints a list of symbols that are referenced in the Kconfig files of some
+# architecture but not defined by the Kconfig files of any architecture.
+#
+# A Kconfig file might be shared between many architectures and legitimately
+# reference undefined symbols for some of them, but if no architecture defines
+# the symbol, it usually indicates a problem or potential cleanup.
+#
+# This script could be sped up a lot if needed. See the comment near the
+# referencing_nodes() call.
+#
+# Run with the following command in the kernel root:
+#
+#   $ python(3) Kconfiglib/examples/list_undefined.py
+#
+# Example output:
+#
+#   Registering defined and undefined symbols for all arches
+#     Processing mips
+#     Processing ia64
+#     Processing metag
+#     ...
+#
+#   Finding references to each undefined symbol
+#     Processing mips
+#     Processing ia64
+#     Processing metag
+#     ...
+#
+#   The following globally undefined symbols were found, listed here
+#   together with the locations of the items that reference them.
+#   References might come from enclosing menus and ifs.
+#
+#     ARM_ERRATA_753970: arch/arm/mach-mvebu/Kconfig:56, arch/arm/mach-mvebu/Kconfig:39
+#     SUNXI_CCU_MP: drivers/clk/sunxi-ng/Kconfig:14
+#     SUNXI_CCU_DIV: drivers/clk/sunxi-ng/Kconfig:14
+#     AC97: sound/ac97/Kconfig:6
+#     ...
+
+import os
+import subprocess
+
+from kconfiglib import Kconfig
+
+
+# Referenced inside the Kconfig files
+os.environ["KERNELVERSION"] = str(
+    subprocess.check_output(("make", "kernelversion")).decode("utf-8").rstrip()
+)
+
+
+def all_arch_srcarch_pairs():
+    """
+    Generates all valid (ARCH, SRCARCH) tuples for the kernel, corresponding to
+    different architectures. SRCARCH holds the arch/ subdirectory.
+    """
+    for srcarch in os.listdir("arch"):
+        # Each subdirectory of arch/ containing a Kconfig file corresponds to
+        # an architecture
+        if os.path.exists(os.path.join("arch", srcarch, "Kconfig")):
+            yield (srcarch, srcarch)
+
+    # Some architectures define additional ARCH settings with ARCH != SRCARCH
+    # (search for "Additional ARCH settings for" in the top-level Makefile)
+
+    yield ("i386", "x86")
+    yield ("x86_64", "x86")
+
+    yield ("sparc32", "sparc")
+    yield ("sparc64", "sparc")
+
+    yield ("sh64", "sh")
+
+    yield ("um", "um")
+
+
+def all_arch_srcarch_kconfigs():
+    """
+    Generates Kconfig instances for all the architectures in the kernel
+    """
+
+    os.environ["srctree"] = "."
+    os.environ["HOSTCC"] = "gcc"
+    os.environ["HOSTCXX"] = "g++"
+    os.environ["CC"] = "gcc"
+    os.environ["LD"] = "ld"
+
+    for arch, srcarch in all_arch_srcarch_pairs():
+        print("  Processing " + arch)
+
+        os.environ["ARCH"] = arch
+        os.environ["SRCARCH"] = srcarch
+
+        # um (User Mode Linux) uses a different base Kconfig file
+        yield Kconfig("Kconfig" if arch != "um" else "arch/x86/um/Kconfig",
+                      warn=False)
+
+
+print("Registering defined and undefined symbols for all arches")
+
+# Sets holding the names of all defined and undefined symbols, for all
+# architectures
+defined = set()
+undefined = set()
+
+for kconf in all_arch_srcarch_kconfigs():
+    for name, sym in kconf.syms.items():
+        if sym.nodes:
+            # If the symbol has a menu node, it is defined
+            defined.add(name)
+        else:
+            # Undefined symbol. We skip some of the uninteresting ones.
+
+            # Due to how Kconfig works, integer literals show up as symbols
+            # (from e.g. 'default 1'). Skip those.
+            try:
+                int(name, 0)
+                continue
+            except ValueError:
+                # Interesting undefined symbol
+                undefined.add(name)
+
+
+print("\nFinding references to each undefined symbol")
+
+def referencing_nodes(kconf, name):
+    # Returns a list of all menu nodes that reference a symbol named 'name' in
+    # any of their properties or property conditions
+    res = []
+
+    for node in kconf.node_iter():
+        for ref in node.referenced:
+            if ref.name == name:
+                res.append(node)
+
+    return res
+
+
+# Maps each globally undefined symbol to the menu nodes that reference it
+undef_sym_refs = [(name, set()) for name in undefined - defined]
+
+for kconf in all_arch_srcarch_kconfigs():
+    for name, refs in undef_sym_refs:
+        # This means that we search the entire configuration tree for each
+        # undefined symbol, which is terribly inefficient. We could speed
+        # things up by tweaking referencing_nodes() to compare each symbol to
+        # multiple symbols while walking the configuration tree.
+        for node in referencing_nodes(kconf, name):
+            refs.add("{}:{}".format(node.filename, node.linenr))
+
+
+print("\nThe following globally undefined symbols were found, listed here\n"
+      "together with the locations of the items that reference them.\n"
+      "References might come from enclosing menus and ifs.\n")
+
+for name, refs in undef_sym_refs:
+    print("  {}: {}".format(name, ", ".join(refs)))
diff --git a/support/kconfiglib/examples/menuconfig_example.py b/support/kconfiglib/examples/menuconfig_example.py
new file mode 100755
index 00000000..a06b05ee
--- /dev/null
+++ b/support/kconfiglib/examples/menuconfig_example.py
@@ -0,0 +1,341 @@
+#!/usr/bin/env python
+
+# Implements a simple configuration interface on top of Kconfiglib to
+# demonstrate concepts for building a menuconfig-like. Emulates how the
+# standard menuconfig prints menu entries.
+#
+# Always displays the entire Kconfig tree to keep things as simple as possible
+# (all symbols, choices, menus, and comments).
+#
+# Usage:
+#
+#   $ python(3) Kconfiglib/examples/menuconfig.py <Kconfig file>
+#
+# A sample Kconfig is available in Kconfiglib/examples/Kmenuconfig.
+#
+# Here's a notation guide. The notation matches the one used by menuconfig
+# (scripts/kconfig/mconf):
+#
+#   [ ] prompt      - Bool
+#   < > prompt      - Tristate
+#   {M} prompt      - Tristate selected to m. Can only be set to m or y.
+#   -*- prompt      - Bool/tristate selected to y, pinning it
+#   -M- prompt      - Tristate selected to m that also has m visibility,
+#                     pinning it to m
+#   (foo) prompt    - String/int/hex symbol with value "foo"
+#   --> prompt      - The selected symbol in a choice in y mode. This
+#                     syntax is unique to this example.
+#
+# When modules are disabled, the .type attribute of TRISTATE symbols and
+# choices automatically changes to BOOL. This trick is used by the C
+# implementation as well, and gives the expected behavior without having to do
+# anything extra here. The original type is available in .orig_type if needed.
+#
+# The Kconfiglib/examples/Kmenuconfig example uses named choices to be able to
+# refer to choices by name. Named choices are supported in the C tools too, but
+# I don't think I've ever seen them used in the wild.
+#
+# Sample session:
+#
+#   $ python Kconfiglib/examples/menuconfig.py Kconfiglib/examples/Kmenuconfig
+#
+#   ======== Example Kconfig configuration ========
+#
+#   [*] Enable loadable module support (MODULES)
+#       Bool and tristate symbols
+#           [*] Bool symbol (BOOL)
+#                   [ ] Dependent bool symbol (BOOL_DEP)
+#                   < > Dependent tristate symbol (TRI_DEP)
+#                   [ ] First prompt (TWO_MENU_NODES)
+#           < > Tristate symbol (TRI)
+#           [ ] Second prompt (TWO_MENU_NODES)
+#               *** These are selected by TRI_DEP ***
+#           < > Tristate selected by TRI_DEP (SELECTED_BY_TRI_DEP)
+#           < > Tristate implied by TRI_DEP (IMPLIED_BY_TRI_DEP)
+#       String, int, and hex symbols
+#           (foo) String symbol (STRING)
+#           (747) Int symbol (INT)
+#           (0xABC) Hex symbol (HEX)
+#       Various choices
+#           -*- Bool choice (BOOL_CHOICE)
+#                   --> Bool choice sym 1 (BOOL_CHOICE_SYM_1)
+#                       Bool choice sym 2 (BOOL_CHOICE_SYM_2)
+#           {M} Tristate choice (TRI_CHOICE)
+#                   < > Tristate choice sym 1 (TRI_CHOICE_SYM_1)
+#                   < > Tristate choice sym 2 (TRI_CHOICE_SYM_2)
+#           [ ] Optional bool choice (OPT_BOOL_CHOICE)
+#
+#   Enter a symbol/choice name, "load_config", or "write_config" (or press CTRL+D to exit): BOOL
+#   Value for BOOL (available: n, y): n
+#
+#   ======== Example Kconfig configuration ========
+#
+#   [*] Enable loadable module support (MODULES)
+#       Bool and tristate symbols
+#           [ ] Bool symbol (BOOL)
+#           < > Tristate symbol (TRI)
+#           [ ] Second prompt (TWO_MENU_NODES)
+#               *** These are selected by TRI_DEP ***
+#           < > Tristate selected by TRI_DEP (SELECTED_BY_TRI_DEP)
+#           < > Tristate implied by TRI_DEP (IMPLIED_BY_TRI_DEP)
+#       String, int, and hex symbols
+#           (foo) String symbol (STRING)
+#           (747) Int symbol (INT)
+#           (0xABC) Hex symbol (HEX)
+#       Various choices
+#           -*- Bool choice (BOOL_CHOICE)
+#                   --> Bool choice sym 1 (BOOL_CHOICE_SYM_1)
+#                       Bool choice sym 2 (BOOL_CHOICE_SYM_2)
+#           {M} Tristate choice (TRI_CHOICE)
+#                   < > Tristate choice sym 1 (TRI_CHOICE_SYM_1)
+#                   < > Tristate choice sym 2 (TRI_CHOICE_SYM_2)
+#          [ ] Optional bool choice (OPT_BOOL_CHOICE)
+#
+#   Enter a symbol/choice name, "load_config", or "write_config" (or press CTRL+D to exit): MODULES
+#   Value for MODULES (available: n, y): n
+#
+#   ======== Example Kconfig configuration ========
+#
+#   [ ] Enable loadable module support (MODULES)
+#       Bool and tristate symbols
+#           [ ] Bool symbol (BOOL)
+#           [ ] Tristate symbol (TRI)
+#           [ ] Second prompt (TWO_MENU_NODES)
+#               *** These are selected by TRI_DEP ***
+#           [ ] Tristate selected by TRI_DEP (SELECTED_BY_TRI_DEP)
+#           [ ] Tristate implied by TRI_DEP (IMPLIED_BY_TRI_DEP)
+#       String, int, and hex symbols
+#           (foo) String symbol (STRING)
+#           (747) Int symbol (INT)
+#           (0xABC) Hex symbol (HEX)
+#       Various choices
+#           -*- Bool choice (BOOL_CHOICE)
+#                   --> Bool choice sym 1 (BOOL_CHOICE_SYM_1)
+#                       Bool choice sym 2 (BOOL_CHOICE_SYM_2)
+#           -*- Tristate choice (TRI_CHOICE)
+#                   --> Tristate choice sym 1 (TRI_CHOICE_SYM_1)
+#                       Tristate choice sym 2 (TRI_CHOICE_SYM_2)
+#           [ ] Optional bool choice (OPT_BOOL_CHOICE)
+#
+#   Enter a symbol/choice name, "load_config", or "write_config" (or press CTRL+D to exit): ^D
+
+from __future__ import print_function
+import readline
+import sys
+
+from kconfiglib import Kconfig, \
+                       Symbol, MENU, COMMENT, \
+                       BOOL, TRISTATE, STRING, INT, HEX, UNKNOWN, \
+                       expr_value, \
+                       TRI_TO_STR
+
+
+# Python 2/3 compatibility hack
+if sys.version_info[0] < 3:
+    input = raw_input
+
+
+def indent_print(s, indent):
+    print(indent*" " + s)
+
+
+def value_str(sc):
+    """
+    Returns the value part ("[*]", "<M>", "(foo)" etc.) of a menu entry.
+
+    sc: Symbol or Choice.
+    """
+    if sc.type in (STRING, INT, HEX):
+        return "({})".format(sc.str_value)
+
+    # BOOL or TRISTATE
+
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    if isinstance(sc, Symbol) and sc.choice and sc.visibility == 2:
+        # For choices in y mode, print '-->' next to the selected symbol
+        return "-->" if sc.choice.selection is sc else "   "
+
+    tri_val_str = (" ", "M", "*")[sc.tri_value]
+
+    if len(sc.assignable) == 1:
+        # Pinned to a single value
+        return "-{}-".format(tri_val_str)
+
+    if sc.type == BOOL:
+        return "[{}]".format(tri_val_str)
+
+    if sc.type == TRISTATE:
+        if sc.assignable == (1, 2):
+            # m and y available
+            return "{" + tri_val_str + "}"  # Gets a bit confusing with .format()
+        return "<{}>".format(tri_val_str)
+
+
+def node_str(node):
+    """
+    Returns the complete menu entry text for a menu node, or "" for invisible
+    menu nodes. Invisible menu nodes are those that lack a prompt or that do
+    not have a satisfied prompt condition.
+
+    Example return value: "[*] Bool symbol (BOOL)"
+
+    The symbol name is printed in parentheses to the right of the prompt. This
+    is so that symbols can easily be referred to in the configuration
+    interface.
+    """
+    if not node.prompt:
+        return ""
+
+    # Even for menu nodes for symbols and choices, it's wrong to check
+    # Symbol.visibility / Choice.visibility here. The reason is that a symbol
+    # (and a choice, in theory) can be defined in multiple locations, giving it
+    # multiple menu nodes, which do not necessarily all have the same prompt
+    # visibility. Symbol.visibility / Choice.visibility is calculated as the OR
+    # of the visibility of all the prompts.
+    prompt, prompt_cond = node.prompt
+    if not expr_value(prompt_cond):
+        return ""
+
+    if node.item == MENU:
+        return "    " + prompt
+
+    if node.item == COMMENT:
+        return "    *** {} ***".format(prompt)
+
+    # Symbol or Choice
+
+    sc = node.item
+
+    if sc.type == UNKNOWN:
+        # Skip symbols defined without a type (these are obscure and generate
+        # a warning)
+        return ""
+
+    # {:3} sets the field width to three. Gives nice alignment for empty string
+    # values.
+    res = "{:3} {}".format(value_str(sc), prompt)
+
+    # Don't print the name for unnamed choices (the normal kind)
+    if sc.name is not None:
+        res += " ({})".format(sc.name)
+
+    return res
+
+
+def print_menuconfig_nodes(node, indent):
+    """
+    Prints a tree with all the menu entries rooted at 'node'. Child menu
+    entries are indented.
+    """
+    while node:
+        string = node_str(node)
+        if string:
+            indent_print(string, indent)
+
+        if node.list:
+            print_menuconfig_nodes(node.list, indent + 8)
+
+        node = node.next
+
+
+def print_menuconfig(kconf):
+    """
+    Prints all menu entries for the configuration.
+    """
+    # Print the expanded mainmenu text at the top. This is the same as
+    # kconf.top_node.prompt[0], but with variable references expanded.
+    print("\n======== {} ========\n".format(kconf.mainmenu_text))
+
+    print_menuconfig_nodes(kconf.top_node.list, 0)
+    print("")
+
+
+def get_value_from_user(sc):
+    """
+    Prompts the user for a value for the symbol or choice 'sc'. For
+    bool/tristate symbols and choices, provides a list of all the assignable
+    values.
+    """
+    if not sc.visibility:
+        print(sc.name + " is not currently visible")
+        return False
+
+    prompt = "Value for {}".format(sc.name)
+    if sc.type in (BOOL, TRISTATE):
+        prompt += " (available: {})" \
+                  .format(", ".join(TRI_TO_STR[val] for val in sc.assignable))
+    prompt += ": "
+
+    val = input(prompt)
+
+    # Automatically add a "0x" prefix for hex symbols, like the menuconfig
+    # interface does. This isn't done when loading .config files, hence why
+    # set_value() doesn't do it automatically.
+    if sc.type == HEX and not val.startswith(("0x", "0X")):
+        val = "0x" + val
+
+    # Let Kconfiglib itself print a warning here if the value is invalid. We
+    # could also disable warnings temporarily with 'kconf.warn = False' and
+    # print our own warning.
+    return sc.set_value(val)
+
+
+if __name__ == "__main__":
+    if len(sys.argv) != 2:
+        sys.exit("usage: menuconfig.py <Kconfig file>")
+
+    # Load Kconfig configuration files
+    kconf = Kconfig(sys.argv[1])
+
+    # Print the initial configuration tree
+    print_menuconfig(kconf)
+
+    while True:
+        try:
+            cmd = input('Enter a symbol/choice name, "load_config", or '
+                        '"write_config" (or press CTRL+D to exit): ').strip()
+        except EOFError:
+            print("")
+            break
+
+        if cmd == "load_config":
+            config_filename = input(".config file to load: ")
+            try:
+                # Returns a message telling which file got loaded
+                print(kconf.load_config(config_filename))
+            except EnvironmentError as e:
+                print(e, file=sys.stderr)
+
+            print_menuconfig(kconf)
+            continue
+
+        if cmd == "write_config":
+            config_filename = input("To this file: ")
+            try:
+                # Returns a message telling which file got saved
+                print(kconf.write_config(config_filename))
+            except EnvironmentError as e:
+                print(e, file=sys.stderr)
+
+            continue
+
+        # Assume 'cmd' is the name of a symbol or choice if it isn't one of the
+        # commands above, prompt the user for a value for it, and print the new
+        # configuration tree
+
+        if cmd in kconf.syms:
+            if get_value_from_user(kconf.syms[cmd]):
+                print_menuconfig(kconf)
+
+            continue
+
+        if cmd in kconf.named_choices:
+            if get_value_from_user(kconf.named_choices[cmd]):
+                print_menuconfig(kconf)
+
+            continue
+
+        print("No symbol/choice named '{}' in the configuration".format(cmd),
+              file=sys.stderr)
diff --git a/support/kconfiglib/examples/merge_config.py b/support/kconfiglib/examples/merge_config.py
new file mode 100755
index 00000000..ef11d795
--- /dev/null
+++ b/support/kconfiglib/examples/merge_config.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+
+# This script functions similarly to scripts/kconfig/merge_config.sh from the
+# kernel tree, merging multiple configurations fragments to produce a complete
+# .config, with unspecified values filled in as for alldefconfig.
+#
+# The generated .config respects symbol dependencies, and a warning is printed
+# if any symbol gets a different value from the assigned value.
+#
+# For a real-world merging example based on this script, see
+# https://github.com/zephyrproject-rtos/zephyr/blob/master/scripts/kconfig/kconfig.py.
+#
+# Here's a demo:
+#
+# Kconfig contents:
+#
+#     config FOO
+#         bool "FOO"
+#
+#     config BAR
+#         bool "BAR"
+#
+#     config BAZ
+#         string "BAZ"
+#
+#     config QAZ
+#         bool "QAZ" if n
+#
+#
+# conf1 contents:
+#
+#     CONFIG_FOO=y
+#
+#
+# conf2 contents:
+#
+#     CONFIG_BAR=y
+#
+#
+# conf3 contents:
+#
+#     # Assigned twice (would generate warning if 'warn_assign_override' was
+#     # True)
+#     # CONFIG_FOO is not set
+#
+#     # Ops... this symbol doesn't exist
+#     CONFIG_OPS=y
+#
+#     CONFIG_BAZ="baz string"
+#
+#
+# conf4 contents:
+#
+#     CONFIG_QAZ=y
+#
+#
+# Running:
+#
+#     $ python(3) merge_config.py Kconfig merged conf1 conf2 conf3 conf4
+#     Merged configuration 'conf1'
+#     Merged configuration 'conf2'
+#     conf3:5: warning: attempt to assign the value 'y' to the undefined symbol OPS
+#     Merged configuration 'conf3'
+#     Merged configuration 'conf4'
+#     Configuration saved to 'merged'
+#     warning: QAZ (defined at Kconfig:10) was assigned the value 'y' but got the value 'n' -- check dependencies
+#     $ cat merged
+#     Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)
+#     # CONFIG_FOO is not set
+#     CONFIG_BAR=y
+#     CONFIG_BAZ="baz string"
+
+from __future__ import print_function
+import sys
+
+from kconfiglib import Kconfig, BOOL, TRISTATE, TRI_TO_STR
+
+
+if len(sys.argv) < 4:
+    sys.exit("usage: merge_config.py Kconfig merged_config config1 [config2 ...]")
+
+kconf = Kconfig(sys.argv[1])
+
+# Enable warnings for assignments to undefined symbols
+kconf.warn_assign_undef = True
+
+# (This script uses alldefconfig as the base. Other starting states could be
+# set up here as well. The approach in examples/allnoconfig_simpler.py could
+# provide an allnoconfig starting state for example.)
+
+# Disable warnings generated for multiple assignments to the same symbol within
+# a (set of) configuration files. Assigning a symbol multiple times might be
+# done intentionally when merging configuration files.
+kconf.warn_assign_override = False
+kconf.warn_assign_redun = False
+
+# Create a merged configuration by loading the fragments with replace=False.
+# load_config() and write_config() returns a message to print.
+for config in sys.argv[3:]:
+    print(kconf.load_config(config, replace=False))
+
+# Write the merged configuration
+print(kconf.write_config(sys.argv[2]))
+
+# Print warnings for symbols whose actual value doesn't match the assigned
+# value
+
+def name_and_loc(sym):
+    # Helper for printing symbol names and Kconfig file location(s) in warnings
+
+    if not sym.nodes:
+        return sym.name + " (undefined)"
+
+    return "{} (defined at {})".format(
+        sym.name,
+        ", ".join("{}:{}".format(node.filename, node.linenr)
+                  for node in sym.nodes))
+
+for sym in kconf.defined_syms:
+    # Was the symbol assigned to?
+    if sym.user_value is not None:
+        # Tristate values are represented as 0, 1, 2. Having them as
+        # "n", "m", "y" is more convenient here, so convert.
+        if sym.type in (BOOL, TRISTATE):
+            user_value = TRI_TO_STR[sym.user_value]
+        else:
+            user_value = sym.user_value
+
+        if user_value != sym.str_value:
+            print("warning: {} was assigned the value '{}' but got the "
+                  "value '{}' -- check dependencies".format(
+                      name_and_loc(sym), user_value, sym.str_value),
+                  file=sys.stderr)
diff --git a/support/kconfiglib/examples/print_config_tree.py b/support/kconfiglib/examples/print_config_tree.py
new file mode 100644
index 00000000..dc81d9d5
--- /dev/null
+++ b/support/kconfiglib/examples/print_config_tree.py
@@ -0,0 +1,199 @@
+# Prints menu entries as a tree with its value in the .config file. This can be
+# handy e.g. for diffing between different .config files or versions of Kconfig files.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=print_config_tree.py [SCRIPT_ARG=<.config>]
+#
+#   If the variable WITH_HELP_DESC is modified to 'True', the help is added
+#   to the symbols.
+#
+# Here's a notation guide. The notation matches the one used by menuconfig
+# (scripts/kconfig/mconf):
+#
+#   [ ] prompt      - Bool
+#   < > prompt      - Tristate
+#   {M} prompt      - Tristate selected to m. Can only be set to m or y.
+#   -*- prompt      - Bool/tristate selected to y, pinning it
+#   -M- prompt      - Tristate selected to m that also has m visibility,
+#                     pinning it to m
+#   (foo) prompt    - String/int/hex symbol with value "foo"
+#   --> prompt      - The selected symbol in a choice in y mode. This
+#                     syntax is unique to this example.
+#
+# When modules are disabled, the .type attribute of TRISTATE symbols and
+# choices automatically changes to BOOL. This trick is used by the C
+# implementation as well, and gives the expected behavior without having to do
+# anything extra here. The original type is available in .orig_type if needed.
+#
+# Example output:
+#
+#   $ make scriptconfig SCRIPT=Kconfiglib/examples/print_config_tree.py [SCRIPT_ARG=<.config file>]
+#
+#   ======== Linux/x86 4.9.82 Kernel Configuration ========
+#
+#   [*] 64-bit kernel (64BIT)
+#       General setup
+#          ()  Cross-compiler tool prefix (CROSS_COMPILE)
+#          [ ] Compile also drivers which will not load (COMPILE_TEST)
+#          ()  Local version - append to kernel release (LOCALVERSION)
+#          [*] Automatically append version information to the version string (LOCALVERSION_AUTO)
+#          -*- Kernel compression mode
+#          ...
+#
+# With the variable WITH_HELP_DESC modified to 'True':
+#
+#   ======== Linux/x86 4.9.82 Kernel Configuration ========
+#
+#   [*] 64-bit kernel - Say yes to build a 64-bit kernel - formerly known as x86_64 Say no to build a 32-bit kernel - formerly known as i386  (64BIT)
+#       General setup
+#           ()  Cross-compiler tool prefix - Same as running 'make CROSS_COMPILE=prefix-' but stored for default make runs in this kernel build directory.  You don't need to set this unless you want the configured kernel build directory to select the cross-compiler automatically.  (CROSS_COMPILE)
+#           [ ] Compile also drivers which will not load - Some drivers can be compiled on a different platform than they are intended to be run on. Despite they cannot be loaded there (or even when they load they cannot be used due to missing HW support), developers still, opposing to distributors, might want to build such drivers to compile-test them.  If you are a developer and want to build everything available, say Y here. If you are a user/distributor, say N here to exclude useless drivers to be distributed.  (COMPILE_TEST)
+#           ...
+
+import sys
+
+from kconfiglib import Kconfig, \
+                       Symbol, MENU, COMMENT, \
+                       BOOL, TRISTATE, STRING, INT, HEX, UNKNOWN, \
+                       expr_value
+
+
+# Add help description to output
+WITH_HELP_DESC = False
+
+
+def indent_print(s, indent):
+    print(indent*" " + s)
+
+
+def value_str(sc):
+    """
+    Returns the value part ("[*]", "<M>", "(foo)" etc.) of a menu entry.
+
+    sc: Symbol or Choice.
+    """
+    if sc.type in (STRING, INT, HEX):
+        return "({})".format(sc.str_value)
+
+    # BOOL or TRISTATE
+
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    if isinstance(sc, Symbol) and sc.choice and sc.visibility == 2:
+        # For choices in y mode, print '-->' next to the selected symbol
+        return "-->" if sc.choice.selection is sc else "   "
+
+    tri_val_str = (" ", "M", "*")[sc.tri_value]
+
+    if len(sc.assignable) == 1:
+        # Pinned to a single value
+        return "-{}-".format(tri_val_str)
+
+    if sc.type == BOOL:
+        return "[{}]".format(tri_val_str)
+
+    if sc.type == TRISTATE:
+        if sc.assignable == (1, 2):
+            # m and y available
+            return "{" + tri_val_str + "}"  # Gets a bit confusing with .format()
+        return "<{}>".format(tri_val_str)
+
+
+def node_str(node):
+    """
+    Returns the complete menu entry text for a menu node, or "" for invisible
+    menu nodes. Invisible menu nodes are those that lack a prompt or that do
+    not have a satisfied prompt condition.
+
+    Example return value: "[*] Bool symbol (BOOL)"
+
+    The symbol name is printed in parentheses to the right of the prompt.
+    """
+    if not node.prompt:
+        return ""
+
+    # Even for menu nodes for symbols and choices, it's wrong to check
+    # Symbol.visibility / Choice.visibility here. The reason is that a symbol
+    # (and a choice, in theory) can be defined in multiple locations, giving it
+    # multiple menu nodes, which do not necessarily all have the same prompt
+    # visibility. Symbol.visibility / Choice.visibility is calculated as the OR
+    # of the visibility of all the prompts.
+    prompt, prompt_cond = node.prompt
+    if not expr_value(prompt_cond):
+        return ""
+
+    if node.item == MENU:
+        return "    " + prompt
+
+    if node.item == COMMENT:
+        return "    *** {} ***".format(prompt)
+
+    # Symbol or Choice
+
+    sc = node.item
+
+    if sc.type == UNKNOWN:
+        # Skip symbols defined without a type (these are obscure and generate
+        # a warning)
+        return ""
+
+    # Add help text
+    if WITH_HELP_DESC:
+        prompt += ' - ' + str(node.help).replace('\n', ' ').replace('\r', '')
+
+    # {:3} sets the field width to three. Gives nice alignment for empty string
+    # values.
+    res = "{:3} {}".format(value_str(sc), prompt)
+
+    # Don't print the name for unnamed choices (the normal kind)
+    if sc.name is not None:
+        res += " ({})".format(sc.name)
+
+    return res
+
+
+def print_menuconfig_nodes(node, indent):
+    """
+    Prints a tree with all the menu entries rooted at 'node'. Child menu
+    entries are indented.
+    """
+    while node:
+        string = node_str(node)
+        if string:
+            indent_print(string, indent)
+
+        if node.list:
+            print_menuconfig_nodes(node.list, indent + 8)
+
+        node = node.next
+
+
+def print_menuconfig(kconf):
+    """
+    Prints all menu entries for the configuration.
+    """
+    # Print the expanded mainmenu text at the top. This is the same as
+    # kconf.top_node.prompt[0], but with variable references expanded.
+    print("\n======== {} ========\n".format(kconf.mainmenu_text))
+
+    print_menuconfig_nodes(kconf.top_node.list, 0)
+    print("")
+
+
+if __name__ == "__main__":
+
+    # Load Kconfig configuration files
+    kconf = Kconfig(sys.argv[1])
+
+    # Set default .config file or load it from argv
+    if len(sys.argv) == 2:
+        config_filename = '.config'
+    else:
+        config_filename = sys.argv[2]
+
+    kconf.load_config(config_filename)
+
+    # Print the configuration tree
+    print_menuconfig(kconf)
diff --git a/support/kconfiglib/examples/print_sym_info.py b/support/kconfiglib/examples/print_sym_info.py
new file mode 100644
index 00000000..ea6fc720
--- /dev/null
+++ b/support/kconfiglib/examples/print_sym_info.py
@@ -0,0 +1,54 @@
+# Loads a Kconfig and a .config and prints a symbol.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/print_sym_info.py SCRIPT_ARG=<name>
+#
+# Example output for SCRIPT_ARG=MODULES:
+#
+# menuconfig MODULES
+# 	bool
+# 	prompt "Enable loadable module support"
+# 	option modules
+# 	help
+# 	  Kernel modules are small pieces of compiled code which can
+# 	  be inserted in the running kernel, rather than being
+# 	  permanently built into the kernel.  You use the "modprobe"
+# 	  tool to add (and sometimes remove) them.  If you say Y here,
+# 	  many parts of the kernel can be built as modules (by
+# 	  answering M instead of Y where indicated): this is most
+# 	  useful for infrequently used options which are not required
+# 	  for booting.  For more information, see the man pages for
+# 	  modprobe, lsmod, modinfo, insmod and rmmod.
+#
+# 	  If you say Y here, you will need to run "make
+# 	  modules_install" to put the modules under /lib/modules/
+# 	  where modprobe can find them (you may need to be root to do
+# 	  this).
+#
+# 	  If unsure, say Y.
+#
+# value = n
+# visibility = y
+# currently assignable values: n, y
+# defined at init/Kconfig:1674
+
+import sys
+
+from kconfiglib import Kconfig, TRI_TO_STR
+
+
+if len(sys.argv) < 3:
+    sys.exit('Pass symbol name (without "CONFIG_" prefix) with SCRIPT_ARG=<name>')
+
+kconf = Kconfig(sys.argv[1])
+sym = kconf.syms[sys.argv[2]]
+
+print(sym)
+print("value = " + sym.str_value)
+print("visibility = " + TRI_TO_STR[sym.visibility])
+print("currently assignable values: " +
+      ", ".join([TRI_TO_STR[v] for v in sym.assignable]))
+
+for node in sym.nodes:
+    print("defined at {}:{}".format(node.filename, node.linenr))
diff --git a/support/kconfiglib/examples/print_tree.py b/support/kconfiglib/examples/print_tree.py
new file mode 100644
index 00000000..49cb954a
--- /dev/null
+++ b/support/kconfiglib/examples/print_tree.py
@@ -0,0 +1,75 @@
+# Prints the menu tree of the configuration. Dependencies between symbols can
+# sometimes implicitly alter the menu structure (see kconfig-language.txt), and
+# that's implemented too.
+#
+# Note: See the Kconfig.node_iter() function as well, which provides a simpler
+# interface for walking the menu tree.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/print_tree.py
+#
+# Example output:
+#
+#   ...
+#   config HAVE_KERNEL_LZO
+#   config HAVE_KERNEL_LZ4
+#   choice
+#     config KERNEL_GZIP
+#     config KERNEL_BZIP2
+#     config KERNEL_LZMA
+#     config KERNEL_XZ
+#     config KERNEL_LZO
+#     config KERNEL_LZ4
+#   config DEFAULT_HOSTNAME
+#   config SWAP
+#   config SYSVIPC
+#     config SYSVIPC_SYSCTL
+#   config POSIX_MQUEUE
+#     config POSIX_MQUEUE_SYSCTL
+#   config CROSS_MEMORY_ATTACH
+#   config FHANDLE
+#   config USELIB
+#   config AUDIT
+#   config HAVE_ARCH_AUDITSYSCALL
+#   config AUDITSYSCALL
+#   config AUDIT_WATCH
+#   config AUDIT_TREE
+#   menu "IRQ subsystem"
+#     config MAY_HAVE_SPARSE_IRQ
+#     config GENERIC_IRQ_LEGACY
+#     config GENERIC_IRQ_PROBE
+#   ...
+
+import sys
+
+from kconfiglib import Kconfig, Symbol, Choice, MENU, COMMENT
+
+
+def indent_print(s, indent):
+    print(indent*" " + s)
+
+
+def print_items(node, indent):
+    while node:
+        if isinstance(node.item, Symbol):
+            indent_print("config " + node.item.name, indent)
+
+        elif isinstance(node.item, Choice):
+            indent_print("choice", indent)
+
+        elif node.item == MENU:
+            indent_print('menu "{}"'.format(node.prompt[0]), indent)
+
+        elif node.item == COMMENT:
+            indent_print('comment "{}"'.format(node.prompt[0]), indent)
+
+
+        if node.list:
+            print_items(node.list, indent + 2)
+
+        node = node.next
+
+
+kconf = Kconfig(sys.argv[1])
+print_items(kconf.top_node, 0)
diff --git a/support/kconfiglib/genconfig.py b/support/kconfiglib/genconfig.py
new file mode 100755
index 00000000..bb3e6ffb
--- /dev/null
+++ b/support/kconfiglib/genconfig.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Generates a header file with #defines from the configuration, matching the
+format of include/generated/autoconf.h in the Linux kernel.
+
+Optionally, also writes the configuration output as a .config file. See
+--config-out.
+
+The --sync-deps, --file-list, and --env-list options generate information that
+can be used to avoid needless rebuilds/reconfigurations.
+
+Before writing a header or configuration file, Kconfiglib compares the old
+contents of the file against the new contents. If there's no change, the write
+is skipped. This avoids updating file metadata like the modification time, and
+might save work depending on your build setup.
+
+By default, the configuration is generated from '.config'. A different
+configuration file can be passed in the KCONFIG_CONFIG environment variable.
+"""
+import argparse
+import os
+import sys
+
+import kconfiglib
+
+
+DEFAULT_HEADER_PATH = "config.h"
+DEFAULT_SYNC_DEPS_PATH = "deps/"
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--header-path",
+        metavar="HEADER_FILE",
+        default=DEFAULT_HEADER_PATH,
+        help="Path for the generated header file (default: {})"
+             .format(DEFAULT_HEADER_PATH))
+
+    parser.add_argument(
+        "--config-out",
+        metavar="CONFIG_FILE",
+        help="""
+Write the configuration to CONFIG_FILE. This is useful if you include .config
+files in Makefiles, as the generated configuration file will be a full .config
+file even if .config is outdated. The generated configuration matches what
+olddefconfig would produce. If you use sync-deps, you can include
+deps/auto.conf instead. --config-out is meant for cases where incremental build
+information isn't needed.
+""")
+
+    parser.add_argument(
+        "--sync-deps",
+        metavar="OUTPUT_DIR",
+        nargs="?",
+        const=DEFAULT_SYNC_DEPS_PATH,
+        help="""
+Enable generation of symbol dependency information for incremental builds,
+optionally specifying the output directory (default: {}). See the docstring of
+Kconfig.sync_deps() in Kconfiglib for more information.
+""".format(DEFAULT_SYNC_DEPS_PATH))
+
+    parser.add_argument(
+        "--file-list",
+        metavar="OUTPUT_FILE",
+        help="""
+Write a list of all Kconfig files to OUTPUT_FILE, with one file per line. The
+paths are relative to $srctree (or to the current directory if $srctree is
+unset). Files appear in the order they're 'source'd.
+""")
+
+    parser.add_argument(
+        "--env-list",
+        metavar="OUTPUT_FILE",
+        help="""
+Write a list of all environment variables referenced in Kconfig files to
+OUTPUT_FILE, with one variable per line. Each line has the format NAME=VALUE.
+Only environment variables referenced with the preprocessor $(VAR) syntax are
+included, and not variables referenced with the older $VAR syntax (which is
+only supported for backwards compatibility).
+""")
+
+    parser.add_argument(
+        "kconfig_filename",
+        metavar="KCONFIG_FILENAME",
+        nargs="?",
+        default="Kconfig",
+        help="Top-level Kconfig file (default: Kconfig)")
+
+    args = parser.parse_args()
+
+
+    kconf = kconfiglib.Kconfig(args.kconfig_filename)
+    kconf.load_config()
+
+    kconf.write_autoconf(args.header_path)
+
+    if args.config_out is not None:
+        kconf.write_config(args.config_out, save_old=False)
+
+    if args.sync_deps is not None:
+        kconf.sync_deps(args.sync_deps)
+
+    if args.file_list is not None:
+        with _open_write(args.file_list) as f:
+            for path in kconf.kconfig_filenames:
+                f.write(path + "\n")
+
+    if args.env_list is not None:
+        with _open_write(args.env_list) as f:
+            for env_var in kconf.env_vars:
+                f.write("{}={}\n".format(env_var, os.environ[env_var]))
+
+
+def _open_write(path):
+    # Python 2/3 compatibility. io.open() is available on both, but makes
+    # write() expect 'unicode' strings on Python 2.
+
+    if sys.version_info[0] < 3:
+        return open(path, "w")
+    return open(path, "w", encoding="utf-8")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/guiconfig.py b/support/kconfiglib/guiconfig.py
new file mode 100755
index 00000000..050789ac
--- /dev/null
+++ b/support/kconfiglib/guiconfig.py
@@ -0,0 +1,2316 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Overview
+========
+
+A Tkinter-based menuconfig implementation, based around a treeview control and
+a help display. The interface should feel familiar to people used to qconf
+('make xconfig'). Compatible with both Python 2 and Python 3.
+
+The display can be toggled between showing the full tree and showing just a
+single menu (like menuconfig.py). Only single-menu mode distinguishes between
+symbols defined with 'config' and symbols defined with 'menuconfig'.
+
+A show-all mode is available that shows invisible items in red.
+
+Supports both mouse and keyboard controls. The following keyboard shortcuts are
+available:
+
+  Ctrl-S   : Save configuration
+  Ctrl-O   : Open configuration
+  Ctrl-A   : Toggle show-all mode
+  Ctrl-N   : Toggle show-name mode
+  Ctrl-M   : Toggle single-menu mode
+  Ctrl-F, /: Open jump-to dialog
+  ESC      : Close
+
+Running
+=======
+
+guiconfig.py can be run either as a standalone executable or by calling the
+menuconfig() function with an existing Kconfig instance. The second option is a
+bit inflexible in that it will still load and save .config, etc.
+
+When run in standalone mode, the top-level Kconfig file to load can be passed
+as a command-line argument. With no argument, it defaults to "Kconfig".
+
+The KCONFIG_CONFIG environment variable specifies the .config file to load (if
+it exists) and save. If KCONFIG_CONFIG is unset, ".config" is used.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+
+$srctree is supported through Kconfiglib.
+"""
+
+# Note: There's some code duplication with menuconfig.py below, especially for
+# the help text. Maybe some of it could be moved into kconfiglib.py or a shared
+# helper script, but OTOH it's pretty nice to have things standalone and
+# customizable.
+
+import errno
+import os
+import sys
+
+_PY2 = sys.version_info[0] < 3
+
+if _PY2:
+    # Python 2
+    from Tkinter import *
+    import ttk
+    import tkFont as font
+    import tkFileDialog as filedialog
+    import tkMessageBox as messagebox
+else:
+    # Python 3
+    from tkinter import *
+    import tkinter.ttk as ttk
+    import tkinter.font as font
+    from tkinter import filedialog, messagebox
+
+from kconfiglib import Symbol, Choice, MENU, COMMENT, MenuNode, \
+                       BOOL, TRISTATE, STRING, INT, HEX, \
+                       AND, OR, \
+                       expr_str, expr_value, split_expr, \
+                       standard_sc_expr_str, \
+                       TRI_TO_STR, TYPE_TO_STR, \
+                       standard_kconfig, standard_config_filename
+
+
+# If True, use GIF image data embedded in this file instead of separate GIF
+# files. See _load_images().
+_USE_EMBEDDED_IMAGES = True
+
+
+# Help text for the jump-to dialog
+_JUMP_TO_HELP = """\
+Type one or more strings/regexes and press Enter to list items that match all
+of them. Python's regex flavor is used (see the 're' module). Double-clicking
+an item will jump to it. Item values can be toggled directly within the dialog.\
+"""
+
+
+def _main():
+    menuconfig(standard_kconfig())
+
+
+# Global variables used below:
+#
+#   _root:
+#     The Toplevel instance for the main window
+#
+#   _tree:
+#     The Treeview in the main window
+#
+#   _jump_to_tree:
+#     The Treeview in the jump-to dialog. None if the jump-to dialog isn't
+#     open. Doubles as a flag.
+#
+#   _jump_to_matches:
+#     List of Nodes shown in the jump-to dialog
+#
+#   _menupath:
+#     The Label that shows the menu path of the selected item
+#
+#   _backbutton:
+#     The button shown in single-menu mode for jumping to the parent menu
+#
+#   _status_label:
+#     Label with status text shown at the bottom of the main window
+#     ("Modified", "Saved to ...", etc.)
+#
+#   _id_to_node:
+#     We can't use Node objects directly as Treeview item IDs, so we use their
+#     id()s instead. This dictionary maps Node id()s back to Nodes. (The keys
+#     are actually str(id(node)), just to simplify lookups.)
+#
+#   _cur_menu:
+#     The current menu. Ignored outside single-menu mode.
+#
+#   _show_all_var/_show_name_var/_single_menu_var:
+#     Tkinter Variable instances bound to the corresponding checkboxes
+#
+#   _show_all/_single_menu:
+#     Plain Python bools that track _show_all_var and _single_menu_var, to
+#     speed up and simplify things a bit
+#
+#   _conf_filename:
+#     File to save the configuration to
+#
+#   _minconf_filename:
+#     File to save minimal configurations to
+#
+#   _conf_changed:
+#     True if the configuration has been changed. If False, we don't bother
+#     showing the save-and-quit dialog.
+#
+#     We reset this to False whenever the configuration is saved.
+#
+#   _*_img:
+#     PhotoImage instances for images
+
+
+def menuconfig(kconf):
+    """
+    Launches the configuration interface, returning after the user exits.
+
+    kconf:
+      Kconfig instance to be configured
+    """
+    global _kconf
+    global _conf_filename
+    global _minconf_filename
+    global _jump_to_tree
+    global _cur_menu
+
+    _kconf = kconf
+
+    _jump_to_tree = None
+
+    _create_id_to_node()
+
+    _create_ui()
+
+    # Filename to save configuration to
+    _conf_filename = standard_config_filename()
+
+    # Load existing configuration and check if it's outdated
+    _set_conf_changed(_load_config())
+
+    # Filename to save minimal configuration to
+    _minconf_filename = "defconfig"
+
+    # Current menu in single-menu mode
+    _cur_menu = _kconf.top_node
+
+    # Any visible items in the top menu?
+    if not _shown_menu_nodes(kconf.top_node):
+        # Nothing visible. Start in show-all mode and try again.
+        _show_all_var.set(True)
+        if not _shown_menu_nodes(kconf.top_node):
+            # Give up and show an error. It's nice to be able to assume that
+            # the tree is non-empty in the rest of the code.
+            _root.wait_visibility()
+            messagebox.showerror(
+                "Error",
+                "Empty configuration -- nothing to configure.\n\n"
+                "Check that environment variables are set properly.")
+            _root.destroy()
+            return
+
+    # Build the initial tree
+    _update_tree()
+
+    # Select the first item and focus the Treeview, so that keyboard controls
+    # work immediately
+    _select(_tree, _tree.get_children()[0])
+    _tree.focus_set()
+
+    # Make geometry information available for centering the window. This
+    # indirectly creates the window, so hide it so that it's never shown at the
+    # old location.
+    _root.withdraw()
+    _root.update_idletasks()
+
+    # Center the window
+    _root.geometry("+{}+{}".format(
+        (_root.winfo_screenwidth() - _root.winfo_reqwidth())//2,
+        (_root.winfo_screenheight() - _root.winfo_reqheight())//2))
+
+    # Show it
+    _root.deiconify()
+
+    # Prevent the window from being automatically resized. Otherwise, it
+    # changes size when scrollbars appear/disappear before the user has
+    # manually resized it.
+    _root.geometry(_root.geometry())
+
+    _root.mainloop()
+
+
+def _load_config():
+    # Loads any existing .config file. See the Kconfig.load_config() docstring.
+    #
+    # Returns True if .config is missing or outdated. We always prompt for
+    # saving the configuration in that case.
+
+    print(_kconf.load_config())
+    if not os.path.exists(_conf_filename):
+        # No .config
+        return True
+
+    return _needs_save()
+
+
+def _needs_save():
+    # Returns True if a just-loaded .config file is outdated (would get
+    # modified when saving)
+
+    if _kconf.missing_syms:
+        # Assignments to undefined symbols in the .config
+        return True
+
+    for sym in _kconf.unique_defined_syms:
+        if sym.user_value is None:
+            if sym.config_string:
+                # Unwritten symbol
+                return True
+        elif sym.orig_type in (BOOL, TRISTATE):
+            if sym.tri_value != sym.user_value:
+                # Written bool/tristate symbol, new value
+                return True
+        elif sym.str_value != sym.user_value:
+            # Written string/int/hex symbol, new value
+            return True
+
+    # No need to prompt for save
+    return False
+
+
+def _create_id_to_node():
+    global _id_to_node
+
+    _id_to_node = {str(id(node)): node for node in _kconf.node_iter()}
+
+
+def _create_ui():
+    # Creates the main window UI
+
+    global _root
+    global _tree
+
+    # Create the root window. This initializes Tkinter and makes e.g.
+    # PhotoImage available, so do it early.
+    _root = Tk()
+
+    _load_images()
+    _init_misc_ui()
+    _fix_treeview_issues()
+
+    _create_top_widgets()
+    # Create the pane with the Kconfig tree and description text
+    panedwindow, _tree = _create_kconfig_tree_and_desc(_root)
+    panedwindow.grid(column=0, row=1, sticky="nsew")
+    _create_status_bar()
+
+    _root.columnconfigure(0, weight=1)
+    # Only the pane with the Kconfig tree and description grows vertically
+    _root.rowconfigure(1, weight=1)
+
+    # Start with show-name disabled
+    _do_showname()
+
+    _tree.bind("<Left>", _tree_left_key)
+    _tree.bind("<Right>", _tree_right_key)
+    # Note: Binding this for the jump-to tree as well would cause issues due to
+    # the Tk bug mentioned in _tree_open()
+    _tree.bind("<<TreeviewOpen>>", _tree_open)
+    # add=True to avoid overriding the description text update
+    _tree.bind("<<TreeviewSelect>>", _update_menu_path, add=True)
+
+    _root.bind("<Control-s>", _save)
+    _root.bind("<Control-o>", _open)
+    _root.bind("<Control-a>", _toggle_showall)
+    _root.bind("<Control-n>", _toggle_showname)
+    _root.bind("<Control-m>", _toggle_tree_mode)
+    _root.bind("<Control-f>", _jump_to_dialog)
+    _root.bind("/", _jump_to_dialog)
+    _root.bind("<Escape>", _on_quit)
+
+
+def _load_images():
+    # Loads GIF images, creating the global _*_img PhotoImage variables.
+    # Base64-encoded images embedded in this script are used if
+    # _USE_EMBEDDED_IMAGES is True, and separate image files in the same
+    # directory as the script otherwise.
+    #
+    # Using a global variable indirectly prevents the image from being
+    # garbage-collected. Passing an image to a Tkinter function isn't enough to
+    # keep it alive.
+
+    def load_image(name, data):
+        var_name = "_{}_img".format(name)
+
+        if _USE_EMBEDDED_IMAGES:
+            globals()[var_name] = PhotoImage(data=data, format="gif")
+        else:
+            globals()[var_name] = PhotoImage(
+                file=os.path.join(os.path.dirname(__file__), name + ".gif"),
+                format="gif")
+
+    # Note: Base64 data can be put on the clipboard with
+    #   $ base64 -w0 foo.gif | xclip
+
+    load_image("icon", "R0lGODlhMAAwAPEDAAAAAADQAO7u7v///yH5BAUKAAMALAAAAAAwADAAAAL/nI+gy+2Pokyv2jazuZxryQjiSJZmyXxHeLbumH6sEATvW8OLNtf5bfLZRLFITzgEipDJ4mYxYv6A0ubuqYhWk66tVTE4enHer7jcKvt0LLUw6P45lvEprT6c0+v7OBuqhYdHohcoqIbSAHc4ljhDwrh1UlgSydRCWWlp5wiYZvmSuSh4IzrqV6p4cwhkCsmY+nhK6uJ6t1mrOhuJqfu6+WYiCiwl7HtLjNSZZZis/MeM7NY3TaRKS40ooDeoiVqIultsrav92bi9c3a5KkkOsOJZpSS99m4k/0zPng4Gks9JSbB+8DIcoQfnjwpZCHv5W+ip4aQrKrB0uOikYhiMCBw1/uPoQUMBADs=")
+    load_image("n_bool", "R0lGODdhEAAQAPAAAAgICP///ywAAAAAEAAQAAACIISPacHtvp5kcb5qG85hZ2+BkyiRF8BBaEqtrKkqslEAADs=")
+    load_image("y_bool", "R0lGODdhEAAQAPEAAAgICADQAP///wAAACwAAAAAEAAQAAACMoSPacLtvlh4YrIYsst2cV19AvaVF9CUXBNJJoum7ymrsKuCnhiupIWjSSjAFuWhSCIKADs=")
+    load_image("n_tri", "R0lGODlhEAAQAPD/AAEBAf///yH5BAUKAAIALAAAAAAQABAAAAInlI+pBrAKQnCPSUlXvFhznlkfeGwjKZhnJ65h6nrfi6h0st2QXikFADs=")
+    load_image("m_tri", "R0lGODlhEAAQAPEDAAEBAeQMuv///wAAACH5BAUKAAMALAAAAAAQABAAAAI5nI+pBrAWAhPCjYhiAJQCnWmdoElHGVBoiK5M21ofXFpXRIrgiecqxkuNciZIhNOZFRNI24PhfEoLADs=")
+    load_image("y_tri", "R0lGODlhEAAQAPEDAAICAgDQAP///wAAACH5BAUKAAMALAAAAAAQABAAAAI0nI+pBrAYBhDCRRUypfmergmgZ4xjMpmaw2zmxk7cCB+pWiVqp4MzDwn9FhGZ5WFjIZeGAgA7")
+    load_image("m_my", "R0lGODlhEAAQAPEDAAAAAOQMuv///wAAACH5BAUKAAMALAAAAAAQABAAAAI5nIGpxiAPI2ghxFinq/ZygQhc94zgZopmOLYf67anGr+oZdp02emfV5n9MEHN5QhqICETxkABbQ4KADs=")
+    load_image("y_my", "R0lGODlhEAAQAPH/AAAAAADQAAPRA////yH5BAUKAAQALAAAAAAQABAAAAM+SArcrhCMSSuIM9Q8rxxBWIXawIBkmWonupLd565Um9G1PIs59fKmzw8WnAlusBYR2SEIN6DmAmqBLBxYSAIAOw==")
+    load_image("n_locked", "R0lGODlhEAAQAPABAAAAAP///yH5BAUKAAEALAAAAAAQABAAAAIgjB8AyKwN04pu0vMutpqqz4Hih4ydlnUpyl2r23pxUAAAOw==")
+    load_image("m_locked", "R0lGODlhEAAQAPD/AAAAAOQMuiH5BAUKAAIALAAAAAAQABAAAAIylC8AyKwN04ohnGcqqlZmfXDWI26iInZoyiore05walolV39ftxsYHgL9QBBMBGFEFAAAOw==")
+    load_image("y_locked", "R0lGODlhEAAQAPD/AAAAAADQACH5BAUKAAIALAAAAAAQABAAAAIylC8AyKzNgnlCtoDTwvZwrHydIYpQmR3KWq4uK74IOnp0HQPmnD3cOVlUIAgKsShkFAAAOw==")
+    load_image("not_selected", "R0lGODlhEAAQAPD/AAAAAP///yH5BAUKAAIALAAAAAAQABAAAAIrlA2px6IBw2IpWglOvTYhzmUbGD3kNZ5QqrKn2YrqigCxZoMelU6No9gdCgA7")
+    load_image("selected", "R0lGODlhEAAQAPD/AAAAAP///yH5BAUKAAIALAAAAAAQABAAAAIzlA2px6IBw2IpWglOvTah/kTZhimASJomiqonlLov1qptHTsgKSEzh9H8QI0QzNPwmRoFADs=")
+    load_image("edit", "R0lGODlhEAAQAPIFAAAAAKOLAMuuEPvXCvrxvgAAAAAAAAAAACH5BAUKAAUALAAAAAAQABAAAANCWLqw/gqMBp8cszJxcwVC2FEOEIAi5kVBi3IqWZhuCGMyfdpj2e4pnK+WAshmvxeAcETWlsxPkkBtsqBMa8TIBSQAADs=")
+
+
+def _fix_treeview_issues():
+    # Fixes some Treeview issues
+
+    global _treeview_rowheight
+
+    style = ttk.Style()
+
+    # The treeview rowheight isn't adjusted automatically on high-DPI displays,
+    # so do it ourselves. The font will probably always be TkDefaultFont, but
+    # play it safe and look it up.
+
+    _treeview_rowheight = font.Font(font=style.lookup("Treeview", "font")) \
+        .metrics("linespace") + 2
+
+    style.configure("Treeview", rowheight=_treeview_rowheight)
+
+    # Work around regression in https://core.tcl.tk/tk/tktview?name=509cafafae,
+    # which breaks tag background colors
+
+    for option in "foreground", "background":
+        # Filter out any styles starting with ("!disabled", "!selected", ...).
+        # style.map() returns an empty list for missing options, so this should
+        # be future-safe.
+        style.map(
+            "Treeview",
+            **{option: [elm for elm in style.map("Treeview", query_opt=option)
+                        if elm[:2] != ("!disabled", "!selected")]})
+
+
+def _init_misc_ui():
+    # Does misc. UI initialization, like setting the title, icon, and theme
+
+    _root.title(_kconf.mainmenu_text)
+    # iconphoto() isn't available in Python 2's Tkinter
+    _root.tk.call("wm", "iconphoto", _root._w, "-default", _icon_img)
+    # Reducing the width of the window to 1 pixel makes it move around, at
+    # least on GNOME. Prevent weird stuff like that.
+    _root.minsize(128, 128)
+    _root.protocol("WM_DELETE_WINDOW", _on_quit)
+
+    # Use the 'clam' theme on *nix if it's available. It looks nicer than the
+    # 'default' theme.
+    if _root.tk.call("tk", "windowingsystem") == "x11":
+        style = ttk.Style()
+        if "clam" in style.theme_names():
+            style.theme_use("clam")
+
+
+def _create_top_widgets():
+    # Creates the controls above the Kconfig tree in the main window
+
+    global _show_all_var
+    global _show_name_var
+    global _single_menu_var
+    global _menupath
+    global _backbutton
+
+    topframe = ttk.Frame(_root)
+    topframe.grid(column=0, row=0, sticky="ew")
+
+    ttk.Button(topframe, text="Save", command=_save) \
+        .grid(column=0, row=0, sticky="ew", padx=".05c", pady=".05c")
+
+    ttk.Button(topframe, text="Save as...", command=_save_as) \
+        .grid(column=1, row=0, sticky="ew")
+
+    ttk.Button(topframe, text="Save minimal (advanced)...",
+               command=_save_minimal) \
+        .grid(column=2, row=0, sticky="ew", padx=".05c")
+
+    ttk.Button(topframe, text="Open...", command=_open) \
+        .grid(column=3, row=0)
+
+    ttk.Button(topframe, text="Jump to...", command=_jump_to_dialog) \
+        .grid(column=4, row=0, padx=".05c")
+
+    _show_name_var = BooleanVar()
+    ttk.Checkbutton(topframe, text="Show name", command=_do_showname,
+                    variable=_show_name_var) \
+        .grid(column=0, row=1, sticky="nsew", padx=".05c", pady="0 .05c",
+              ipady=".2c")
+
+    _show_all_var = BooleanVar()
+    ttk.Checkbutton(topframe, text="Show all", command=_do_showall,
+                    variable=_show_all_var) \
+        .grid(column=1, row=1, sticky="nsew", pady="0 .05c")
+
+    # Allow the show-all and single-menu status to be queried via plain global
+    # Python variables, which is faster and simpler
+
+    def show_all_updated(*_):
+        global _show_all
+        _show_all = _show_all_var.get()
+
+    _trace_write(_show_all_var, show_all_updated)
+    _show_all_var.set(False)
+
+    _single_menu_var = BooleanVar()
+    ttk.Checkbutton(topframe, text="Single-menu mode", command=_do_tree_mode,
+                    variable=_single_menu_var) \
+        .grid(column=2, row=1, sticky="nsew", padx=".05c", pady="0 .05c")
+
+    _backbutton = ttk.Button(topframe, text="<--", command=_leave_menu,
+                             state="disabled")
+    _backbutton.grid(column=0, row=4, sticky="nsew", padx=".05c", pady="0 .05c")
+
+    def tree_mode_updated(*_):
+        global _single_menu
+        _single_menu = _single_menu_var.get()
+
+        if _single_menu:
+            _backbutton.grid()
+        else:
+            _backbutton.grid_remove()
+
+    _trace_write(_single_menu_var, tree_mode_updated)
+    _single_menu_var.set(False)
+
+    # Column to the right of the buttons that the menu path extends into, so
+    # that it can grow wider than the buttons
+    topframe.columnconfigure(5, weight=1)
+
+    _menupath = ttk.Label(topframe)
+    _menupath.grid(column=0, row=3, columnspan=6, sticky="w", padx="0.05c",
+                   pady="0 .05c")
+
+
+def _create_kconfig_tree_and_desc(parent):
+    # Creates a Panedwindow with a Treeview that shows Kconfig nodes and a Text
+    # that shows a description of the selected node. Returns a tuple with the
+    # Panedwindow and the Treeview. This code is shared between the main window
+    # and the jump-to dialog.
+
+    panedwindow = ttk.Panedwindow(parent, orient=VERTICAL)
+
+    tree_frame, tree = _create_kconfig_tree(panedwindow)
+    desc_frame, desc = _create_kconfig_desc(panedwindow)
+
+    panedwindow.add(tree_frame, weight=1)
+    panedwindow.add(desc_frame)
+
+    def tree_select(_):
+        # The Text widget does not allow editing the text in its disabled
+        # state. We need to temporarily enable it.
+        desc["state"] = "normal"
+
+        sel = tree.selection()
+        if not sel:
+            desc.delete("1.0", "end")
+            desc["state"] = "disabled"
+            return
+
+        # Text.replace() is not available in Python 2's Tkinter
+        desc.delete("1.0", "end")
+        desc.insert("end", _info_str(_id_to_node[sel[0]]))
+
+        desc["state"] = "disabled"
+
+    tree.bind("<<TreeviewSelect>>", tree_select)
+    tree.bind("<1>", _tree_click)
+    tree.bind("<Double-1>", _tree_double_click)
+    tree.bind("<Return>", _tree_enter)
+    tree.bind("<KP_Enter>", _tree_enter)
+    tree.bind("<space>", _tree_toggle)
+    tree.bind("n", _tree_set_val(0))
+    tree.bind("m", _tree_set_val(1))
+    tree.bind("y", _tree_set_val(2))
+
+    return panedwindow, tree
+
+
+def _create_kconfig_tree(parent):
+    # Creates a Treeview for showing Kconfig nodes
+
+    frame = ttk.Frame(parent)
+
+    tree = ttk.Treeview(frame, selectmode="browse", height=20,
+                        columns=("name",))
+    tree.heading("#0", text="Option", anchor="w")
+    tree.heading("name", text="Name", anchor="w")
+
+    tree.tag_configure("n-bool", image=_n_bool_img)
+    tree.tag_configure("y-bool", image=_y_bool_img)
+    tree.tag_configure("m-tri", image=_m_tri_img)
+    tree.tag_configure("n-tri", image=_n_tri_img)
+    tree.tag_configure("m-tri", image=_m_tri_img)
+    tree.tag_configure("y-tri", image=_y_tri_img)
+    tree.tag_configure("m-my", image=_m_my_img)
+    tree.tag_configure("y-my", image=_y_my_img)
+    tree.tag_configure("n-locked", image=_n_locked_img)
+    tree.tag_configure("m-locked", image=_m_locked_img)
+    tree.tag_configure("y-locked", image=_y_locked_img)
+    tree.tag_configure("not-selected", image=_not_selected_img)
+    tree.tag_configure("selected", image=_selected_img)
+    tree.tag_configure("edit", image=_edit_img)
+    tree.tag_configure("invisible", foreground="red")
+
+    tree.grid(column=0, row=0, sticky="nsew")
+
+    _add_vscrollbar(frame, tree)
+
+    frame.columnconfigure(0, weight=1)
+    frame.rowconfigure(0, weight=1)
+
+    # Create items for all menu nodes. These can be detached/moved later.
+    # Micro-optimize this a bit.
+    insert = tree.insert
+    id_ = id
+    Symbol_ = Symbol
+    for node in _kconf.node_iter():
+        item = node.item
+        insert("", "end", iid=id_(node),
+               values=item.name if item.__class__ is Symbol_ else "")
+
+    return frame, tree
+
+
+def _create_kconfig_desc(parent):
+    # Creates a Text for showing the description of the selected Kconfig node
+
+    frame = ttk.Frame(parent)
+
+    desc = Text(frame, height=12, wrap="none", borderwidth=0,
+                state="disabled")
+    desc.grid(column=0, row=0, sticky="nsew")
+
+    # Work around not being to Ctrl-C/V text from a disabled Text widget, with a
+    # tip found in https://stackoverflow.com/questions/3842155/is-there-a-way-to-make-the-tkinter-text-widget-read-only
+    desc.bind("<1>", lambda _: desc.focus_set())
+
+    _add_vscrollbar(frame, desc)
+
+    frame.columnconfigure(0, weight=1)
+    frame.rowconfigure(0, weight=1)
+
+    return frame, desc
+
+
+def _add_vscrollbar(parent, widget):
+    # Adds a vertical scrollbar to 'widget' that's only shown as needed
+
+    vscrollbar = ttk.Scrollbar(parent, orient="vertical",
+                               command=widget.yview)
+    vscrollbar.grid(column=1, row=0, sticky="ns")
+
+    def yscrollcommand(first, last):
+        # Only show the scrollbar when needed. 'first' and 'last' are
+        # strings.
+        if float(first) <= 0.0 and float(last) >= 1.0:
+            vscrollbar.grid_remove()
+        else:
+            vscrollbar.grid()
+
+        vscrollbar.set(first, last)
+
+    widget["yscrollcommand"] = yscrollcommand
+
+
+def _create_status_bar():
+    # Creates the status bar at the bottom of the main window
+
+    global _status_label
+
+    _status_label = ttk.Label(_root, anchor="e", padding="0 0 0.4c 0")
+    _status_label.grid(column=0, row=3, sticky="ew")
+
+
+def _set_status(s):
+    # Sets the text in the status bar to 's'
+
+    _status_label["text"] = s
+
+
+def _set_conf_changed(changed):
+    # Updates the status re. whether there are unsaved changes
+
+    global _conf_changed
+
+    _conf_changed = changed
+    if changed:
+        _set_status("Modified")
+
+
+def _update_tree():
+    # Updates the Kconfig tree in the main window by first detaching all nodes
+    # and then updating and reattaching them. The tree structure might have
+    # changed.
+
+    # If a selected/focused item is detached and later reattached, it stays
+    # selected/focused. That can give multiple selections even though
+    # selectmode=browse. Save and later restore the selection and focus as a
+    # workaround.
+    old_selection = _tree.selection()
+    old_focus = _tree.focus()
+
+    # Detach all tree items before re-stringing them. This is relatively fast,
+    # luckily.
+    _tree.detach(*_id_to_node.keys())
+
+    if _single_menu:
+        _build_menu_tree()
+    else:
+        _build_full_tree(_kconf.top_node)
+
+    _tree.selection_set(old_selection)
+    _tree.focus(old_focus)
+
+
+def _build_full_tree(menu):
+    # Updates the tree starting from menu.list, in full-tree mode. To speed
+    # things up, only open menus are updated. The menu-at-a-time logic here is
+    # to deal with invisible items that can show up outside show-all mode (see
+    # _shown_full_nodes()).
+
+    for node in _shown_full_nodes(menu):
+        _add_to_tree(node, _kconf.top_node)
+
+        # _shown_full_nodes() includes nodes from menus rooted at symbols, so
+        # we only need to check "real" menus/choices here
+        if node.list and not isinstance(node.item, Symbol):
+            if _tree.item(id(node), "open"):
+                _build_full_tree(node)
+            else:
+                # We're just probing here, so _shown_menu_nodes() will work
+                # fine, and might be a bit faster
+                shown = _shown_menu_nodes(node)
+                if shown:
+                    # Dummy element to make the open/closed toggle appear
+                    _tree.move(id(shown[0]), id(shown[0].parent), "end")
+
+
+def _shown_full_nodes(menu):
+    # Returns the list of menu nodes shown in 'menu' (a menu node for a menu)
+    # for full-tree mode. A tricky detail is that invisible items need to be
+    # shown if they have visible children.
+
+    def rec(node):
+        res = []
+
+        while node:
+            if _visible(node) or _show_all:
+                res.append(node)
+                if node.list and isinstance(node.item, Symbol):
+                    # Nodes from menu created from dependencies
+                    res += rec(node.list)
+
+            elif node.list and isinstance(node.item, Symbol):
+                # Show invisible symbols (defined with either 'config' and
+                # 'menuconfig') if they have visible children. This can happen
+                # for an m/y-valued symbol with an optional prompt
+                # ('prompt "foo" is COND') that is currently disabled.
+                shown_children = rec(node.list)
+                if shown_children:
+                    res.append(node)
+                    res += shown_children
+
+            node = node.next
+
+        return res
+
+    return rec(menu.list)
+
+
+def _build_menu_tree():
+    # Updates the tree in single-menu mode. See _build_full_tree() as well.
+
+    for node in _shown_menu_nodes(_cur_menu):
+        _add_to_tree(node, _cur_menu)
+
+
+def _shown_menu_nodes(menu):
+    # Used for single-menu mode. Similar to _shown_full_nodes(), but doesn't
+    # include children of symbols defined with 'menuconfig'.
+
+    def rec(node):
+        res = []
+
+        while node:
+            if _visible(node) or _show_all:
+                res.append(node)
+                if node.list and not node.is_menuconfig:
+                    res += rec(node.list)
+
+            elif node.list and isinstance(node.item, Symbol):
+                shown_children = rec(node.list)
+                if shown_children:
+                    # Invisible item with visible children
+                    res.append(node)
+                    if not node.is_menuconfig:
+                        res += shown_children
+
+            node = node.next
+
+        return res
+
+    return rec(menu.list)
+
+
+def _visible(node):
+    # Returns True if the node should appear in the menu (outside show-all
+    # mode)
+
+    return node.prompt and expr_value(node.prompt[1]) and not \
+        (node.item == MENU and not expr_value(node.visibility))
+
+
+def _add_to_tree(node, top):
+    # Adds 'node' to the tree, at the end of its menu. We rely on going through
+    # the nodes linearly to get the correct order. 'top' holds the menu that
+    # corresponds to the top-level menu, and can vary in single-menu mode.
+
+    parent = node.parent
+    _tree.move(id(node), "" if parent is top else id(parent), "end")
+    _tree.item(
+        id(node),
+        text=_node_str(node),
+        # The _show_all test avoids showing invisible items in red outside
+        # show-all mode, which could look confusing/broken. Invisible symbols
+        # are shown outside show-all mode if an invisible symbol has visible
+        # children in an implicit menu.
+        tags=_img_tag(node) if _visible(node) or not _show_all else
+            _img_tag(node) + " invisible")
+
+
+def _node_str(node):
+    # Returns the string shown to the right of the image (if any) for the node
+
+    if node.prompt:
+        if node.item == COMMENT:
+            s = "*** {} ***".format(node.prompt[0])
+        else:
+            s = node.prompt[0]
+
+        if isinstance(node.item, Symbol):
+            sym = node.item
+
+            # Print "(NEW)" next to symbols without a user value (from e.g. a
+            # .config), but skip it for choice symbols in choices in y mode,
+            # and for symbols of UNKNOWN type (which generate a warning though)
+            if sym.user_value is None and sym.type and not \
+                (sym.choice and sym.choice.tri_value == 2):
+
+                s += " (NEW)"
+
+    elif isinstance(node.item, Symbol):
+        # Symbol without prompt (can show up in show-all)
+        s = "<{}>".format(node.item.name)
+
+    else:
+        # Choice without prompt. Use standard_sc_expr_str() so that it shows up
+        # as '<choice (name if any)>'.
+        s = standard_sc_expr_str(node.item)
+
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+        if sym.orig_type == STRING:
+            s += ": " + sym.str_value
+        elif sym.orig_type in (INT, HEX):
+            s = "({}) {}".format(sym.str_value, s)
+
+    elif isinstance(node.item, Choice) and node.item.tri_value == 2:
+        # Print the prompt of the selected symbol after the choice for
+        # choices in y mode
+        sym = node.item.selection
+        if sym:
+            for sym_node in sym.nodes:
+                # Use the prompt used at this choice location, in case the
+                # choice symbol is defined in multiple locations
+                if sym_node.parent is node and sym_node.prompt:
+                    s += " ({})".format(sym_node.prompt[0])
+                    break
+            else:
+                # If the symbol isn't defined at this choice location, then
+                # just use whatever prompt we can find for it
+                for sym_node in sym.nodes:
+                    if sym_node.prompt:
+                        s += " ({})".format(sym_node.prompt[0])
+                        break
+
+    # In single-menu mode, print "--->" next to nodes that have menus that can
+    # potentially be entered. Print "----" if the menu is empty. We don't allow
+    # those to be entered.
+    if _single_menu and node.is_menuconfig:
+        s += "  --->" if _shown_menu_nodes(node) else "  ----"
+
+    return s
+
+
+def _img_tag(node):
+    # Returns the tag for the image that should be shown next to 'node', or the
+    # empty string if it shouldn't have an image
+
+    item = node.item
+
+    if item in (MENU, COMMENT) or not item.orig_type:
+        return ""
+
+    if item.orig_type in (STRING, INT, HEX):
+        return "edit"
+
+    # BOOL or TRISTATE
+
+    if _is_y_mode_choice_sym(item):
+        # Choice symbol in y-mode choice
+        return "selected" if item.choice.selection is item else "not-selected"
+
+    if len(item.assignable) <= 1:
+        # Pinned to a single value
+        return "" if isinstance(item, Choice) else item.str_value + "-locked"
+
+    if item.type == BOOL:
+        return item.str_value + "-bool"
+
+    # item.type == TRISTATE
+    if item.assignable == (1, 2):
+        return item.str_value + "-my"
+    return item.str_value + "-tri"
+
+
+def _is_y_mode_choice_sym(item):
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    return isinstance(item, Symbol) and item.choice and item.visibility == 2
+
+
+def _tree_click(event):
+    # Click on the Kconfig Treeview
+
+    tree = event.widget
+    if tree.identify_element(event.x, event.y) == "image":
+        item = tree.identify_row(event.y)
+        # Select the item before possibly popping up a dialog for
+        # string/int/hex items, so that its help is visible
+        _select(tree, item)
+        _change_node(_id_to_node[item], tree.winfo_toplevel())
+        return "break"
+
+
+def _tree_double_click(event):
+    # Double-click on the Kconfig treeview
+
+    # Do an extra check to avoid weirdness when double-clicking in the tree
+    # heading area
+    if not _in_heading(event):
+        return _tree_enter(event)
+
+
+def _in_heading(event):
+    # Returns True if 'event' took place in the tree heading
+
+    tree = event.widget
+    return hasattr(tree, "identify_region") and \
+        tree.identify_region(event.x, event.y) in ("heading", "separator")
+
+
+def _tree_enter(event):
+    # Enter press or double-click within the Kconfig treeview. Prefer to
+    # open/close/enter menus, but toggle the value if that's not possible.
+
+    tree = event.widget
+    sel = tree.focus()
+    if sel:
+        node = _id_to_node[sel]
+
+        if tree.get_children(sel):
+            _tree_toggle_open(sel)
+        elif _single_menu_mode_menu(node, tree):
+            _enter_menu_and_select_first(node)
+        else:
+            _change_node(node, tree.winfo_toplevel())
+
+        return "break"
+
+
+def _tree_toggle(event):
+    # Space press within the Kconfig treeview. Prefer to toggle the value, but
+    # open/close/enter the menu if that's not possible.
+
+    tree = event.widget
+    sel = tree.focus()
+    if sel:
+        node = _id_to_node[sel]
+
+        if _changeable(node):
+            _change_node(node, tree.winfo_toplevel())
+        elif _single_menu_mode_menu(node, tree):
+            _enter_menu_and_select_first(node)
+        elif tree.get_children(sel):
+            _tree_toggle_open(sel)
+
+        return "break"
+
+
+def _tree_left_key(_):
+    # Left arrow key press within the Kconfig treeview
+
+    if _single_menu:
+        # Leave the current menu in single-menu mode
+        _leave_menu()
+        return "break"
+
+    # Otherwise, default action
+
+
+def _tree_right_key(_):
+    # Right arrow key press within the Kconfig treeview
+
+    sel = _tree.focus()
+    if sel:
+        node = _id_to_node[sel]
+        # If the node can be entered in single-menu mode, do it
+        if _single_menu_mode_menu(node, _tree):
+            _enter_menu_and_select_first(node)
+            return "break"
+
+    # Otherwise, default action
+
+
+def _single_menu_mode_menu(node, tree):
+    # Returns True if single-menu mode is on and 'node' is an (interface)
+    # menu that can be entered
+
+    return _single_menu and tree is _tree and node.is_menuconfig and \
+           _shown_menu_nodes(node)
+
+
+def _changeable(node):
+    # Returns True if 'node' is a Symbol/Choice whose value can be changed
+
+    sc = node.item
+
+    if not isinstance(sc, (Symbol, Choice)):
+        return False
+
+    # This will hit for invisible symbols, which appear in show-all mode and
+    # when an invisible symbol has visible children (which can happen e.g. for
+    # symbols with optional prompts)
+    if not (node.prompt and expr_value(node.prompt[1])):
+        return False
+
+    return sc.orig_type in (STRING, INT, HEX) or len(sc.assignable) > 1 \
+           or _is_y_mode_choice_sym(sc)
+
+
+def _tree_toggle_open(item):
+    # Opens/closes the Treeview item 'item'
+
+    if _tree.item(item, "open"):
+        _tree.item(item, open=False)
+    else:
+        node = _id_to_node[item]
+        if not isinstance(node.item, Symbol):
+            # Can only get here in full-tree mode
+            _build_full_tree(node)
+        _tree.item(item, open=True)
+
+
+def _tree_set_val(tri_val):
+    def tree_set_val(event):
+        # n/m/y press within the Kconfig treeview
+
+        # Sets the value of the currently selected item to 'tri_val', if that
+        # value can be assigned
+
+        sel = event.widget.focus()
+        if sel:
+            sc = _id_to_node[sel].item
+            if isinstance(sc, (Symbol, Choice)) and tri_val in sc.assignable:
+                _set_val(sc, tri_val)
+
+    return tree_set_val
+
+
+def _tree_open(_):
+    # Lazily populates the Kconfig tree when menus are opened in full-tree mode
+
+    if _single_menu:
+        # Work around https://core.tcl.tk/tk/tktview?name=368fa4561e
+        # ("ttk::treeview open/closed indicators can be toggled while hidden").
+        # Clicking on the hidden indicator will call _build_full_tree() in
+        # single-menu mode otherwise.
+        return
+
+    node = _id_to_node[_tree.focus()]
+    # _shown_full_nodes() includes nodes from menus rooted at symbols, so we
+    # only need to check "real" menus and choices here
+    if not isinstance(node.item, Symbol):
+        _build_full_tree(node)
+
+
+def _update_menu_path(_):
+    # Updates the displayed menu path when nodes are selected in the Kconfig
+    # treeview
+
+    sel = _tree.selection()
+    _menupath["text"] = _menu_path_info(_id_to_node[sel[0]]) if sel else ""
+
+
+def _item_row(item):
+    # Returns the row number 'item' appears on within the Kconfig treeview,
+    # starting from the top of the tree. Used to preserve scrolling.
+    #
+    # ttkTreeview.c in the Tk sources defines a RowNumber() function that does
+    # the same thing, but it's not exposed.
+
+    row = 0
+
+    while True:
+        prev = _tree.prev(item)
+        if prev:
+            item = prev
+            row += _n_rows(item)
+        else:
+            item = _tree.parent(item)
+            if not item:
+                return row
+            row += 1
+
+
+def _n_rows(item):
+    # _item_row() helper. Returns the number of rows occupied by 'item' and #
+    # its children.
+
+    rows = 1
+
+    if _tree.item(item, "open"):
+        for child in _tree.get_children(item):
+            rows += _n_rows(child)
+
+    return rows
+
+
+def _attached(item):
+    # Heuristic for checking if a Treeview item is attached. Doesn't seem to be
+    # good APIs for this. Might fail for super-obscure cases with tiny trees,
+    # but you'd just get a small scroll mess-up.
+
+    return bool(_tree.next(item) or _tree.prev(item) or _tree.parent(item))
+
+
+def _change_node(node, parent):
+    # Toggles/changes the value of 'node'. 'parent' is the parent window
+    # (either the main window or the jump-to dialog), in case we need to pop up
+    # a dialog.
+
+    if not _changeable(node):
+        return
+
+    # sc = symbol/choice
+    sc = node.item
+
+    if sc.type in (INT, HEX, STRING):
+        s = _set_val_dialog(node, parent)
+
+        # Tkinter can return 'unicode' strings on Python 2, which Kconfiglib
+        # can't deal with. UTF-8-encode the string to work around it.
+        if _PY2 and isinstance(s, unicode):
+            s = s.encode("utf-8", "ignore")
+
+        if s is not None:
+            _set_val(sc, s)
+
+    elif len(sc.assignable) == 1:
+        # Handles choice symbols for choices in y mode, which are a special
+        # case: .assignable can be (2,) while .tri_value is 0.
+        _set_val(sc, sc.assignable[0])
+
+    else:
+        # Set the symbol to the value after the current value in
+        # sc.assignable, with wrapping
+        val_index = sc.assignable.index(sc.tri_value)
+        _set_val(sc, sc.assignable[(val_index + 1) % len(sc.assignable)])
+
+
+def _set_val(sc, val):
+    # Wrapper around Symbol/Choice.set_value() for updating the menu state and
+    # _conf_changed
+
+    # Use the string representation of tristate values. This makes the format
+    # consistent for all symbol types.
+    if val in TRI_TO_STR:
+        val = TRI_TO_STR[val]
+
+    if val != sc.str_value:
+        sc.set_value(val)
+        _set_conf_changed(True)
+
+        # Update the tree and try to preserve the scroll. Do a cheaper variant
+        # than in the show-all case, that might mess up the scroll slightly in
+        # rare cases, but is fast and flicker-free.
+
+        stayput = _loc_ref_item()  # Item to preserve scroll for
+        old_row = _item_row(stayput)
+
+        _update_tree()
+
+        # If the reference item disappeared (can happen if the change was done
+        # from the jump-to dialog), then avoid messing with the scroll and hope
+        # for the best
+        if _attached(stayput):
+            _tree.yview_scroll(_item_row(stayput) - old_row, "units")
+
+        if _jump_to_tree:
+            _update_jump_to_display()
+
+
+def _set_val_dialog(node, parent):
+    # Pops up a dialog for setting the value of the string/int/hex
+    # symbol at node 'node'. 'parent' is the parent window.
+
+    def ok(_=None):
+        # No 'nonlocal' in Python 2
+        global _entry_res
+
+        s = entry.get()
+        if sym.type == HEX and not s.startswith(("0x", "0X")):
+            s = "0x" + s
+
+        if _check_valid(dialog, entry, sym, s):
+            _entry_res = s
+            dialog.destroy()
+
+    def cancel(_=None):
+        global _entry_res
+        _entry_res = None
+        dialog.destroy()
+
+    sym = node.item
+
+    dialog = Toplevel(parent)
+    dialog.title("Enter {} value".format(TYPE_TO_STR[sym.type]))
+    dialog.resizable(False, False)
+    dialog.transient(parent)
+    dialog.protocol("WM_DELETE_WINDOW", cancel)
+
+    ttk.Label(dialog, text=node.prompt[0] + ":") \
+        .grid(column=0, row=0, columnspan=2, sticky="w", padx=".3c",
+              pady=".2c .05c")
+
+    entry = ttk.Entry(dialog, width=30)
+    # Start with the previous value in the editbox, selected
+    entry.insert(0, sym.str_value)
+    entry.selection_range(0, "end")
+    entry.grid(column=0, row=1, columnspan=2, sticky="ew", padx=".3c")
+    entry.focus_set()
+
+    range_info = _range_info(sym)
+    if range_info:
+        ttk.Label(dialog, text=range_info) \
+            .grid(column=0, row=2, columnspan=2, sticky="w", padx=".3c",
+                  pady=".2c 0")
+
+    ttk.Button(dialog, text="OK", command=ok) \
+        .grid(column=0, row=4 if range_info else 3, sticky="e", padx=".3c",
+              pady=".4c")
+
+    ttk.Button(dialog, text="Cancel", command=cancel) \
+        .grid(column=1, row=4 if range_info else 3, padx="0 .3c")
+
+    # Give all horizontal space to the grid cell with the OK button, so that
+    # Cancel moves to the right
+    dialog.columnconfigure(0, weight=1)
+
+    _center_on_root(dialog)
+
+    # Hack to scroll the entry so that the end of the text is shown, from
+    # https://stackoverflow.com/questions/29334544/why-does-tkinters-entry-xview-moveto-fail.
+    # Related Tk ticket: https://core.tcl.tk/tk/info/2513186fff
+    def scroll_entry(_):
+        _root.update_idletasks()
+        entry.unbind("<Expose>")
+        entry.xview_moveto(1)
+    entry.bind("<Expose>", scroll_entry)
+
+    # The dialog must be visible before we can grab the input
+    dialog.wait_visibility()
+    dialog.grab_set()
+
+    dialog.bind("<Return>", ok)
+    dialog.bind("<KP_Enter>", ok)
+    dialog.bind("<Escape>", cancel)
+
+    # Wait for the user to be done with the dialog
+    parent.wait_window(dialog)
+
+    # Regrab the input in the parent
+    parent.grab_set()
+
+    return _entry_res
+
+
+def _center_on_root(dialog):
+    # Centers 'dialog' on the root window. It often ends up at some bad place
+    # like the top-left corner of the screen otherwise. See the menuconfig()
+    # function, which has similar logic.
+
+    dialog.withdraw()
+    _root.update_idletasks()
+
+    dialog_width = dialog.winfo_reqwidth()
+    dialog_height = dialog.winfo_reqheight()
+
+    screen_width = _root.winfo_screenwidth()
+    screen_height = _root.winfo_screenheight()
+
+    x = _root.winfo_rootx() + (_root.winfo_width() - dialog_width)//2
+    y = _root.winfo_rooty() + (_root.winfo_height() - dialog_height)//2
+
+    # Clamp so that no part of the dialog is outside the screen
+    if x + dialog_width > screen_width:
+        x = screen_width - dialog_width
+    elif x < 0:
+        x = 0
+    if y + dialog_height > screen_height:
+        y = screen_height - dialog_height
+    elif y < 0:
+        y = 0
+
+    dialog.geometry("+{}+{}".format(x, y))
+
+    dialog.deiconify()
+
+
+def _check_valid(dialog, entry, sym, s):
+    # Returns True if the string 's' is a well-formed value for 'sym'.
+    # Otherwise, pops up an error and returns False.
+
+    if sym.type not in (INT, HEX):
+        # Anything goes for non-int/hex symbols
+        return True
+
+    base = 10 if sym.type == INT else 16
+    try:
+        int(s, base)
+    except ValueError:
+        messagebox.showerror(
+            "Bad value",
+            "'{}' is a malformed {} value".format(
+                s, TYPE_TO_STR[sym.type]),
+            parent=dialog)
+        entry.focus_set()
+        return False
+
+    for low_sym, high_sym, cond in sym.ranges:
+        if expr_value(cond):
+            low_s = low_sym.str_value
+            high_s = high_sym.str_value
+
+            if not int(low_s, base) <= int(s, base) <= int(high_s, base):
+                messagebox.showerror(
+                    "Value out of range",
+                    "{} is outside the range {}-{}".format(s, low_s, high_s),
+                    parent=dialog)
+                entry.focus_set()
+                return False
+
+            break
+
+    return True
+
+
+def _range_info(sym):
+    # Returns a string with information about the valid range for the symbol
+    # 'sym', or None if 'sym' doesn't have a range
+
+    if sym.type in (INT, HEX):
+        for low, high, cond in sym.ranges:
+            if expr_value(cond):
+                return "Range: {}-{}".format(low.str_value, high.str_value)
+
+    return None
+
+
+def _save(_=None):
+    # Tries to save the configuration
+
+    if _try_save(_kconf.write_config, _conf_filename, "configuration"):
+        _set_conf_changed(False)
+
+    _tree.focus_set()
+
+
+def _save_as():
+    # Pops up a dialog for saving the configuration to a specific location
+
+    global _conf_filename
+
+    filename = _conf_filename
+    while True:
+        filename = filedialog.asksaveasfilename(
+            title="Save configuration as",
+            initialdir=os.path.dirname(filename),
+            initialfile=os.path.basename(filename),
+            parent=_root)
+
+        if not filename:
+            break
+
+        if _try_save(_kconf.write_config, filename, "configuration"):
+            _conf_filename = filename
+            break
+
+    _tree.focus_set()
+
+
+def _save_minimal():
+    # Pops up a dialog for saving a minimal configuration (defconfig) to a
+    # specific location
+
+    global _minconf_filename
+
+    filename = _minconf_filename
+    while True:
+        filename = filedialog.asksaveasfilename(
+            title="Save minimal configuration as",
+            initialdir=os.path.dirname(filename),
+            initialfile=os.path.basename(filename),
+            parent=_root)
+
+        if not filename:
+            break
+
+        if _try_save(_kconf.write_min_config, filename,
+                     "minimal configuration"):
+
+            _minconf_filename = filename
+            break
+
+    _tree.focus_set()
+
+
+def _open(_=None):
+    # Pops up a dialog for loading a configuration
+
+    global _conf_filename
+
+    if _conf_changed and \
+        not messagebox.askokcancel(
+            "Unsaved changes",
+            "You have unsaved changes. Load new configuration anyway?"):
+
+        return
+
+    filename = _conf_filename
+    while True:
+        filename = filedialog.askopenfilename(
+            title="Open configuration",
+            initialdir=os.path.dirname(filename),
+            initialfile=os.path.basename(filename),
+            parent=_root)
+
+        if not filename:
+            break
+
+        if _try_load(filename):
+            # Maybe something fancier could be done here later to try to
+            # preserve the scroll
+
+            _conf_filename = filename
+            _set_conf_changed(_needs_save())
+
+            if _single_menu and not _shown_menu_nodes(_cur_menu):
+                # Turn on show-all if we're in single-menu mode and would end
+                # up with an empty menu
+                _show_all_var.set(True)
+
+            _update_tree()
+
+            break
+
+    _tree.focus_set()
+
+
+def _toggle_showname(_):
+    # Toggles show-name mode on/off
+
+    _show_name_var.set(not _show_name_var.get())
+    _do_showname()
+
+
+def _do_showname():
+    # Updates the UI for the current show-name setting
+
+    # Columns do not automatically shrink/expand, so we have to update
+    # column widths ourselves
+
+    tree_width = _tree.winfo_width()
+
+    if _show_name_var.get():
+        _tree["displaycolumns"] = ("name",)
+        _tree["show"] = "tree headings"
+        name_width = tree_width//3
+        _tree.column("#0", width=max(tree_width - name_width, 1))
+        _tree.column("name", width=name_width)
+    else:
+        _tree["displaycolumns"] = ()
+        _tree["show"] = "tree"
+        _tree.column("#0", width=tree_width)
+
+    _tree.focus_set()
+
+
+def _toggle_showall(_):
+    # Toggles show-all mode on/off
+
+    _show_all_var.set(not _show_all)
+    _do_showall()
+
+
+def _do_showall():
+    # Updates the UI for the current show-all setting
+
+    # Don't allow turning off show-all if we're in single-menu mode and the
+    # current menu would become empty
+    if _single_menu and not _shown_menu_nodes(_cur_menu):
+        _show_all_var.set(True)
+        return
+
+    # Save scroll information. old_scroll can end up negative here, if the
+    # reference item isn't shown (only invisible items on the screen, and
+    # show-all being turned off).
+
+    stayput = _vis_loc_ref_item()
+    # Probe the middle of the first row, to play it safe. identify_row(0) seems
+    # to return the row before the top row.
+    old_scroll = _item_row(stayput) - \
+        _item_row(_tree.identify_row(_treeview_rowheight//2))
+
+    _update_tree()
+
+    if _show_all:
+        # Deep magic: Unless we call update_idletasks(), the scroll adjustment
+        # below is restricted to the height of the old tree, instead of the
+        # height of the new tree. Since the tree with show-all on is guaranteed
+        # to be taller, and we want the maximum range, we only call it when
+        # turning show-all on.
+        #
+        # Strictly speaking, something similar ought to be done when changing
+        # symbol values, but it causes annoying flicker, and in 99% of cases
+        # things work anyway there (with usually minor scroll mess-ups in the
+        # 1% case).
+        _root.update_idletasks()
+
+    # Restore scroll
+    _tree.yview(_item_row(stayput) - old_scroll)
+
+    _tree.focus_set()
+
+
+def _toggle_tree_mode(_):
+    # Toggles single-menu mode on/off
+
+    _single_menu_var.set(not _single_menu)
+    _do_tree_mode()
+
+
+def _do_tree_mode():
+    # Updates the UI for the current tree mode (full-tree or single-menu)
+
+    loc_ref_node = _id_to_node[_loc_ref_item()]
+
+    if not _single_menu:
+        # _jump_to() -> _enter_menu() already updates the tree, but
+        # _jump_to() -> load_parents() doesn't, because it isn't always needed.
+        # We always need to update the tree here, e.g. to add/remove "--->".
+        _update_tree()
+
+    _jump_to(loc_ref_node)
+    _tree.focus_set()
+
+
+def _enter_menu_and_select_first(menu):
+    # Enters the menu 'menu' and selects the first item. Used in single-menu
+    # mode.
+
+    _enter_menu(menu)
+    _select(_tree, _tree.get_children()[0])
+
+
+def _enter_menu(menu):
+    # Enters the menu 'menu'. Used in single-menu mode.
+
+    global _cur_menu
+
+    _cur_menu = menu
+    _update_tree()
+
+    _backbutton["state"] = "disabled" if menu is _kconf.top_node else "normal"
+
+
+def _leave_menu():
+    # Leaves the current menu. Used in single-menu mode.
+
+    global _cur_menu
+
+    if _cur_menu is not _kconf.top_node:
+        old_menu = _cur_menu
+
+        _cur_menu = _parent_menu(_cur_menu)
+        _update_tree()
+
+        _select(_tree, id(old_menu))
+
+        if _cur_menu is _kconf.top_node:
+            _backbutton["state"] = "disabled"
+
+    _tree.focus_set()
+
+
+def _select(tree, item):
+    # Selects, focuses, and see()s 'item' in 'tree'
+
+    tree.selection_set(item)
+    tree.focus(item)
+    tree.see(item)
+
+
+def _loc_ref_item():
+    # Returns a Treeview item that can serve as a reference for the current
+    # scroll location. We try to make this item stay on the same row on the
+    # screen when updating the tree.
+
+    # If the selected item is visible, use that
+    sel = _tree.selection()
+    if sel and _tree.bbox(sel[0]):
+        return sel[0]
+
+    # Otherwise, use the middle item on the screen. If it doesn't exist, the
+    # tree is probably really small, so use the first item in the entire tree.
+    return _tree.identify_row(_tree.winfo_height()//2) or \
+        _tree.get_children()[0]
+
+
+def _vis_loc_ref_item():
+    # Like _loc_ref_item(), but finds a visible item around the reference item.
+    # Used when changing show-all mode, where non-visible (red) items will
+    # disappear.
+
+    item = _loc_ref_item()
+
+    vis_before = _vis_before(item)
+    if vis_before and _tree.bbox(vis_before):
+        return vis_before
+
+    vis_after = _vis_after(item)
+    if vis_after and _tree.bbox(vis_after):
+        return vis_after
+
+    return vis_before or vis_after
+
+
+def _vis_before(item):
+    # _vis_loc_ref_item() helper. Returns the first visible (not red) item,
+    # searching backwards from 'item'.
+
+    while item:
+        if not _tree.tag_has("invisible", item):
+            return item
+
+        prev = _tree.prev(item)
+        item = prev if prev else _tree.parent(item)
+
+    return None
+
+
+def _vis_after(item):
+    # _vis_loc_ref_item() helper. Returns the first visible (not red) item,
+    # searching forwards from 'item'.
+
+    while item:
+        if not _tree.tag_has("invisible", item):
+            return item
+
+        next = _tree.next(item)
+        if next:
+            item = next
+        else:
+            item = _tree.parent(item)
+            if not item:
+                break
+            item = _tree.next(item)
+
+    return None
+
+
+def _on_quit(_=None):
+    # Called when the user wants to exit
+
+    if not _conf_changed:
+        _quit("No changes to save (for '{}')".format(_conf_filename))
+        return
+
+    while True:
+        ync = messagebox.askyesnocancel("Quit", "Save changes?")
+        if ync is None:
+            return
+
+        if not ync:
+            _quit("Configuration ({}) was not saved".format(_conf_filename))
+            return
+
+        if _try_save(_kconf.write_config, _conf_filename, "configuration"):
+            # _try_save() already prints the "Configuration saved to ..."
+            # message
+            _quit()
+            return
+
+
+def _quit(msg=None):
+    # Quits the application
+
+    # Do not call sys.exit() here, in case we're being run from a script
+    _root.destroy()
+    if msg:
+        print(msg)
+
+
+def _try_save(save_fn, filename, description):
+    # Tries to save a configuration file. Pops up an error and returns False on
+    # failure.
+    #
+    # save_fn:
+    #   Function to call with 'filename' to save the file
+    #
+    # description:
+    #   String describing the thing being saved
+
+    try:
+        # save_fn() returns a message to print
+        msg = save_fn(filename)
+        _set_status(msg)
+        print(msg)
+        return True
+    except EnvironmentError as e:
+        messagebox.showerror(
+            "Error saving " + description,
+            "Error saving {} to '{}': {} (errno: {})"
+            .format(description, e.filename, e.strerror,
+                    errno.errorcode[e.errno]))
+        return False
+
+
+def _try_load(filename):
+    # Tries to load a configuration file. Pops up an error and returns False on
+    # failure.
+    #
+    # filename:
+    #   Configuration file to load
+
+    try:
+        msg = _kconf.load_config(filename)
+        _set_status(msg)
+        print(msg)
+        return True
+    except EnvironmentError as e:
+        messagebox.showerror(
+            "Error loading configuration",
+            "Error loading '{}': {} (errno: {})"
+            .format(filename, e.strerror, errno.errorcode[e.errno]))
+        return False
+
+
+def _jump_to_dialog(_=None):
+    # Pops up a dialog for jumping directly to a particular node. Symbol values
+    # can also be changed within the dialog.
+    #
+    # Note: There's nothing preventing this from doing an incremental search
+    # like menuconfig.py does, but currently it's a bit jerky for large Kconfig
+    # trees, at least when inputting the beginning of the search string. We'd
+    # need to somehow only update the tree items that are shown in the Treeview
+    # to fix it.
+
+    global _jump_to_tree
+
+    def search(_=None):
+        _update_jump_to_matches(msglabel, entry.get())
+
+    def jump_to_selected(event=None):
+        # Jumps to the selected node and closes the dialog
+
+        # Ignore double clicks on the image and in the heading area
+        if event and (tree.identify_element(event.x, event.y) == "image" or
+                      _in_heading(event)):
+            return
+
+        sel = tree.selection()
+        if not sel:
+            return
+
+        node = _id_to_node[sel[0]]
+
+        if node not in _shown_menu_nodes(_parent_menu(node)):
+            _show_all_var.set(True)
+            if not _single_menu:
+                # See comment in _do_tree_mode()
+                _update_tree()
+
+        _jump_to(node)
+
+        dialog.destroy()
+
+    def tree_select(_):
+        jumpto_button["state"] = "normal" if tree.selection() else "disabled"
+
+
+    dialog = Toplevel(_root)
+    dialog.geometry("+{}+{}".format(
+        _root.winfo_rootx() + 50, _root.winfo_rooty() + 50))
+    dialog.title("Jump to symbol/choice/menu/comment")
+    dialog.minsize(128, 128)  # See _create_ui()
+    dialog.transient(_root)
+
+    ttk.Label(dialog, text=_JUMP_TO_HELP) \
+        .grid(column=0, row=0, columnspan=2, sticky="w", padx=".1c",
+              pady=".1c")
+
+    entry = ttk.Entry(dialog)
+    entry.grid(column=0, row=1, sticky="ew", padx=".1c", pady=".1c")
+    entry.focus_set()
+
+    entry.bind("<Return>", search)
+    entry.bind("<KP_Enter>", search)
+
+    ttk.Button(dialog, text="Search", command=search) \
+        .grid(column=1, row=1, padx="0 .1c", pady="0 .1c")
+
+    msglabel = ttk.Label(dialog)
+    msglabel.grid(column=0, row=2, sticky="w", pady="0 .1c")
+
+    panedwindow, tree = _create_kconfig_tree_and_desc(dialog)
+    panedwindow.grid(column=0, row=3, columnspan=2, sticky="nsew")
+
+    # Clear tree
+    tree.set_children("")
+
+    _jump_to_tree = tree
+
+    jumpto_button = ttk.Button(dialog, text="Jump to selected item",
+                               state="disabled", command=jump_to_selected)
+    jumpto_button.grid(column=0, row=4, columnspan=2, sticky="ns", pady=".1c")
+
+    dialog.columnconfigure(0, weight=1)
+    # Only the pane with the Kconfig tree and description grows vertically
+    dialog.rowconfigure(3, weight=1)
+
+    # See the menuconfig() function
+    _root.update_idletasks()
+    dialog.geometry(dialog.geometry())
+
+    # The dialog must be visible before we can grab the input
+    dialog.wait_visibility()
+    dialog.grab_set()
+
+    tree.bind("<Double-1>", jump_to_selected)
+    tree.bind("<Return>", jump_to_selected)
+    tree.bind("<KP_Enter>", jump_to_selected)
+    # add=True to avoid overriding the description text update
+    tree.bind("<<TreeviewSelect>>", tree_select, add=True)
+
+    dialog.bind("<Escape>", lambda _: dialog.destroy())
+
+    # Wait for the user to be done with the dialog
+    _root.wait_window(dialog)
+
+    _jump_to_tree = None
+
+    _tree.focus_set()
+
+
+def _update_jump_to_matches(msglabel, search_string):
+    # Searches for nodes matching the search string and updates
+    # _jump_to_matches. Puts a message in 'msglabel' if there are no matches,
+    # or regex errors.
+
+    global _jump_to_matches
+
+    _jump_to_tree.selection_set(())
+
+    try:
+        # We could use re.IGNORECASE here instead of lower(), but this is
+        # faster for regexes like '.*debug$' (though the '.*' is redundant
+        # there). Those probably have bad interactions with re.search(), which
+        # matches anywhere in the string.
+        regex_searches = [re.compile(regex).search
+                          for regex in search_string.lower().split()]
+    except re.error as e:
+        msg = "Bad regular expression"
+        # re.error.msg was added in Python 3.5
+        if hasattr(e, "msg"):
+            msg += ": " + e.msg
+        msglabel["text"] = msg
+        # Clear tree
+        _jump_to_tree.set_children("")
+        return
+
+    _jump_to_matches = []
+    add_match = _jump_to_matches.append
+
+    for node in _sorted_sc_nodes():
+        # Symbol/choice
+        sc = node.item
+
+        for search in regex_searches:
+            # Both the name and the prompt might be missing, since
+            # we're searching both symbols and choices
+
+            # Does the regex match either the symbol name or the
+            # prompt (if any)?
+            if not (sc.name and search(sc.name.lower()) or
+                    node.prompt and search(node.prompt[0].lower())):
+
+                # Give up on the first regex that doesn't match, to
+                # speed things up a bit when multiple regexes are
+                # entered
+                break
+
+        else:
+            add_match(node)
+
+    # Search menus and comments
+
+    for node in _sorted_menu_comment_nodes():
+        for search in regex_searches:
+            if not search(node.prompt[0].lower()):
+                break
+        else:
+            add_match(node)
+
+    msglabel["text"] = "" if _jump_to_matches else "No matches"
+
+    _update_jump_to_display()
+
+    if _jump_to_matches:
+        item = id(_jump_to_matches[0])
+        _jump_to_tree.selection_set(item)
+        _jump_to_tree.focus(item)
+
+
+def _update_jump_to_display():
+    # Updates the images and text for the items in _jump_to_matches, and sets
+    # them as the items of _jump_to_tree
+
+    # Micro-optimize a bit
+    item = _jump_to_tree.item
+    id_ = id
+    node_str = _node_str
+    img_tag = _img_tag
+    visible = _visible
+    for node in _jump_to_matches:
+        item(id_(node),
+             text=node_str(node),
+             tags=img_tag(node) if visible(node) else
+                 img_tag(node) + " invisible")
+
+    _jump_to_tree.set_children("", *map(id, _jump_to_matches))
+
+
+def _jump_to(node):
+    # Jumps directly to 'node' and selects it
+
+    if _single_menu:
+        _enter_menu(_parent_menu(node))
+    else:
+        _load_parents(node)
+
+    _select(_tree, id(node))
+
+
+# Obscure Python: We never pass a value for cached_nodes, and it keeps pointing
+# to the same list. This avoids a global.
+def _sorted_sc_nodes(cached_nodes=[]):
+    # Returns a sorted list of symbol and choice nodes to search. The symbol
+    # nodes appear first, sorted by name, and then the choice nodes, sorted by
+    # prompt and (secondarily) name.
+
+    if not cached_nodes:
+        # Add symbol nodes
+        for sym in sorted(_kconf.unique_defined_syms,
+                          key=lambda sym: sym.name):
+            # += is in-place for lists
+            cached_nodes += sym.nodes
+
+        # Add choice nodes
+
+        choices = sorted(_kconf.unique_choices,
+                         key=lambda choice: choice.name or "")
+
+        cached_nodes += sorted(
+            [node
+             for choice in choices
+                 for node in choice.nodes],
+            key=lambda node: node.prompt[0] if node.prompt else "")
+
+    return cached_nodes
+
+
+def _sorted_menu_comment_nodes(cached_nodes=[]):
+    # Returns a list of menu and comment nodes to search, sorted by prompt,
+    # with the menus first
+
+    if not cached_nodes:
+        def prompt_text(mc):
+            return mc.prompt[0]
+
+        cached_nodes += sorted(_kconf.menus, key=prompt_text)
+        cached_nodes += sorted(_kconf.comments, key=prompt_text)
+
+    return cached_nodes
+
+
+def _load_parents(node):
+    # Menus are lazily populated as they're opened in full-tree mode, but
+    # jumping to an item needs its parent menus to be populated. This function
+    # populates 'node's parents.
+
+    # Get all parents leading up to 'node', sorted with the root first
+    parents = []
+    cur = node.parent
+    while cur is not _kconf.top_node:
+        parents.append(cur)
+        cur = cur.parent
+    parents.reverse()
+
+    for i, parent in enumerate(parents):
+        if not _tree.item(id(parent), "open"):
+            # Found a closed menu. Populate it and all the remaining menus
+            # leading up to 'node'.
+            for parent in parents[i:]:
+                # We only need to populate "real" menus/choices. Implicit menus
+                # are populated when their parents menus are entered.
+                if not isinstance(parent.item, Symbol):
+                    _build_full_tree(parent)
+            return
+
+
+def _parent_menu(node):
+    # Returns the menu node of the menu that contains 'node'. In addition to
+    # proper 'menu's, this might also be a 'menuconfig' symbol or a 'choice'.
+    # "Menu" here means a menu in the interface.
+
+    menu = node.parent
+    while not menu.is_menuconfig:
+        menu = menu.parent
+    return menu
+
+
+def _trace_write(var, fn):
+    # Makes fn() be called whenever the Tkinter Variable 'var' changes value
+
+    # trace_variable() is deprecated according to the docstring,
+    # which recommends trace_add()
+    if hasattr(var, "trace_add"):
+        var.trace_add("write", fn)
+    else:
+        var.trace_variable("w", fn)
+
+
+def _info_str(node):
+    # Returns information about the menu node 'node' as a string.
+    #
+    # The helper functions are responsible for adding newlines. This allows
+    # them to return "" if they don't want to add any output.
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+
+        return (
+            _name_info(sym) +
+            _help_info(sym) +
+            _direct_dep_info(sym) +
+            _defaults_info(sym) +
+            _select_imply_info(sym) +
+            _kconfig_def_info(sym)
+        )
+
+    if isinstance(node.item, Choice):
+        choice = node.item
+
+        return (
+            _name_info(choice) +
+            _help_info(choice) +
+            'Mode: {}\n\n'.format(choice.str_value) +
+            _choice_syms_info(choice) +
+            _direct_dep_info(choice) +
+            _defaults_info(choice) +
+            _kconfig_def_info(choice)
+        )
+
+    # node.item in (MENU, COMMENT)
+    return _kconfig_def_info(node)
+
+
+def _name_info(sc):
+    # Returns a string with the name of the symbol/choice. Choices are shown as
+    # <choice (name if any)>.
+
+    return (sc.name if sc.name else standard_sc_expr_str(sc)) + "\n\n"
+
+
+def _value_info(sym):
+    # Returns a string showing 'sym's value
+
+    # Only put quotes around the value for string symbols
+    return "Value: {}\n".format(
+        '"{}"'.format(sym.str_value)
+        if sym.orig_type == STRING
+        else sym.str_value)
+
+
+def _choice_syms_info(choice):
+    # Returns a string listing the choice symbols in 'choice'. Adds
+    # "(selected)" next to the selected one.
+
+    s = "Choice symbols:\n"
+
+    for sym in choice.syms:
+        s += "  - " + sym.name
+        if sym is choice.selection:
+            s += " (selected)"
+        s += "\n"
+
+    return s + "\n"
+
+
+def _help_info(sc):
+    # Returns a string with the help text(s) of 'sc' (Symbol or Choice).
+    # Symbols and choices defined in multiple locations can have multiple help
+    # texts.
+
+    s = ""
+
+    for node in sc.nodes:
+        if node.help is not None:
+            s += node.help + "\n\n"
+
+    return s
+
+
+def _direct_dep_info(sc):
+    # Returns a string describing the direct dependencies of 'sc' (Symbol or
+    # Choice). The direct dependencies are the OR of the dependencies from each
+    # definition location. The dependencies at each definition location come
+    # from 'depends on' and dependencies inherited from parent items.
+
+    return "" if sc.direct_dep is _kconf.y else \
+        'Direct dependencies (={}):\n{}\n' \
+        .format(TRI_TO_STR[expr_value(sc.direct_dep)],
+                _split_expr_info(sc.direct_dep, 2))
+
+
+def _defaults_info(sc):
+    # Returns a string describing the defaults of 'sc' (Symbol or Choice)
+
+    if not sc.defaults:
+        return ""
+
+    s = "Default"
+    if len(sc.defaults) > 1:
+        s += "s"
+    s += ":\n"
+
+    for val, cond in sc.orig_defaults:
+        s += "  - "
+        if isinstance(sc, Symbol):
+            s += _expr_str(val)
+
+            # Skip the tristate value hint if the expression is just a single
+            # symbol. _expr_str() already shows its value as a string.
+            #
+            # This also avoids showing the tristate value for string/int/hex
+            # defaults, which wouldn't make any sense.
+            if isinstance(val, tuple):
+                s += '  (={})'.format(TRI_TO_STR[expr_value(val)])
+        else:
+            # Don't print the value next to the symbol name for choice
+            # defaults, as it looks a bit confusing
+            s += val.name
+        s += "\n"
+
+        if cond is not _kconf.y:
+            s += "    Condition (={}):\n{}" \
+                 .format(TRI_TO_STR[expr_value(cond)],
+                         _split_expr_info(cond, 4))
+
+    return s + "\n"
+
+
+def _split_expr_info(expr, indent):
+    # Returns a string with 'expr' split into its top-level && or || operands,
+    # with one operand per line, together with the operand's value. This is
+    # usually enough to get something readable for long expressions. A fancier
+    # recursive thingy would be possible too.
+    #
+    # indent:
+    #   Number of leading spaces to add before the split expression.
+
+    if len(split_expr(expr, AND)) > 1:
+        split_op = AND
+        op_str = "&&"
+    else:
+        split_op = OR
+        op_str = "||"
+
+    s = ""
+    for i, term in enumerate(split_expr(expr, split_op)):
+        s += "{}{} {}".format(indent*" ",
+                              "  " if i == 0 else op_str,
+                              _expr_str(term))
+
+        # Don't bother showing the value hint if the expression is just a
+        # single symbol. _expr_str() already shows its value.
+        if isinstance(term, tuple):
+            s += "  (={})".format(TRI_TO_STR[expr_value(term)])
+
+        s += "\n"
+
+    return s
+
+
+def _select_imply_info(sym):
+    # Returns a string with information about which symbols 'select' or 'imply'
+    # 'sym'. The selecting/implying symbols are grouped according to which
+    # value they select/imply 'sym' to (n/m/y).
+
+    def sis(expr, val, title):
+        # sis = selects/implies
+        sis = [si for si in split_expr(expr, OR) if expr_value(si) == val]
+        if not sis:
+            return ""
+
+        res = title
+        for si in sis:
+            res += "  - {}\n".format(split_expr(si, AND)[0].name)
+        return res + "\n"
+
+    s = ""
+
+    if sym.rev_dep is not _kconf.n:
+        s += sis(sym.rev_dep, 2,
+                 "Symbols currently y-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 1,
+                 "Symbols currently m-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 0,
+                 "Symbols currently n-selecting this symbol (no effect):\n")
+
+    if sym.weak_rev_dep is not _kconf.n:
+        s += sis(sym.weak_rev_dep, 2,
+                 "Symbols currently y-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 1,
+                 "Symbols currently m-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 0,
+                 "Symbols currently n-implying this symbol (no effect):\n")
+
+    return s
+
+
+def _kconfig_def_info(item):
+    # Returns a string with the definition of 'item' in Kconfig syntax,
+    # together with the definition location(s) and their include and menu paths
+
+    nodes = [item] if isinstance(item, MenuNode) else item.nodes
+
+    s = "Kconfig definition{}, with parent deps. propagated to 'depends on'\n" \
+        .format("s" if len(nodes) > 1 else "")
+    s += (len(s) - 1)*"="
+
+    for node in nodes:
+        s += "\n\n" \
+             "At {}:{}\n" \
+             "{}" \
+             "Menu path: {}\n\n" \
+             "{}" \
+             .format(node.filename, node.linenr,
+                     _include_path_info(node),
+                     _menu_path_info(node),
+                     node.custom_str(_name_and_val_str))
+
+    return s
+
+
+def _include_path_info(node):
+    if not node.include_path:
+        # In the top-level Kconfig file
+        return ""
+
+    return "Included via {}\n".format(
+        " -> ".join("{}:{}".format(filename, linenr)
+                    for filename, linenr in node.include_path))
+
+
+def _menu_path_info(node):
+    # Returns a string describing the menu path leading up to 'node'
+
+    path = ""
+
+    while node.parent is not _kconf.top_node:
+        node = node.parent
+
+        # Promptless choices might appear among the parents. Use
+        # standard_sc_expr_str() for them, so that they show up as
+        # '<choice (name if any)>'.
+        path = " -> " + (node.prompt[0] if node.prompt else
+                         standard_sc_expr_str(node.item)) + path
+
+    return "(Top)" + path
+
+
+def _name_and_val_str(sc):
+    # Custom symbol/choice printer that shows symbol values after symbols
+
+    # Show the values of non-constant (non-quoted) symbols that don't look like
+    # numbers. Things like 123 are actually symbol references, and only work as
+    # expected due to undefined symbols getting their name as their value.
+    # Showing the symbol value for those isn't helpful though.
+    if isinstance(sc, Symbol) and not sc.is_constant and not _is_num(sc.name):
+        if not sc.nodes:
+            # Undefined symbol reference
+            return "{}(undefined/n)".format(sc.name)
+
+        return '{}(={})'.format(sc.name, sc.str_value)
+
+    # For other items, use the standard format
+    return standard_sc_expr_str(sc)
+
+
+def _expr_str(expr):
+    # Custom expression printer that shows symbol values
+    return expr_str(expr, _name_and_val_str)
+
+
+def _is_num(name):
+    # Heuristic to see if a symbol name looks like a number, for nicer output
+    # when printing expressions. Things like 16 are actually symbol names, only
+    # they get their name as their value when the symbol is undefined.
+
+    try:
+        int(name)
+    except ValueError:
+        if not name.startswith(("0x", "0X")):
+            return False
+
+        try:
+            int(name, 16)
+        except ValueError:
+            return False
+
+    return True
+
+
+if __name__ == "__main__":
+    _main()
diff --git a/support/kconfiglib/kconfiglib.py b/support/kconfiglib/kconfiglib.py
new file mode 100644
index 00000000..410db281
--- /dev/null
+++ b/support/kconfiglib/kconfiglib.py
@@ -0,0 +1,7018 @@
+# Copyright (c) 2011-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Overview
+========
+
+Kconfiglib is a Python 2/3 library for scripting and extracting information
+from Kconfig (https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt)
+configuration systems.
+
+See the homepage at https://github.com/ulfalizer/Kconfiglib for a longer
+overview.
+
+Since Kconfiglib 12.0.0, the library version is available in
+kconfiglib.VERSION, which is a (<major>, <minor>, <patch>) tuple, e.g.
+(12, 0, 0).
+
+
+Using Kconfiglib on the Linux kernel with the Makefile targets
+==============================================================
+
+For the Linux kernel, a handy interface is provided by the
+scripts/kconfig/Makefile patch, which can be applied with either 'git am' or
+the 'patch' utility:
+
+  $ wget -qO- https://raw.githubusercontent.com/ulfalizer/Kconfiglib/master/makefile.patch | git am
+  $ wget -qO- https://raw.githubusercontent.com/ulfalizer/Kconfiglib/master/makefile.patch | patch -p1
+
+Warning: Not passing -p1 to patch will cause the wrong file to be patched.
+
+Please tell me if the patch does not apply. It should be trivial to apply
+manually, as it's just a block of text that needs to be inserted near the other
+*conf: targets in scripts/kconfig/Makefile.
+
+Look further down for a motivation for the Makefile patch and for instructions
+on how you can use Kconfiglib without it.
+
+If you do not wish to install Kconfiglib via pip, the Makefile patch is set up
+so that you can also just clone Kconfiglib into the kernel root:
+
+  $ git clone git://github.com/ulfalizer/Kconfiglib.git
+  $ git am Kconfiglib/makefile.patch  (or 'patch -p1 < Kconfiglib/makefile.patch')
+
+Warning: The directory name Kconfiglib/ is significant in this case, because
+it's added to PYTHONPATH by the new targets in makefile.patch.
+
+The targets added by the Makefile patch are described in the following
+sections.
+
+
+make kmenuconfig
+----------------
+
+This target runs the curses menuconfig interface with Python 3. As of
+Kconfiglib 12.2.0, both Python 2 and Python 3 are supported (previously, only
+Python 3 was supported, so this was a backport).
+
+
+make guiconfig
+--------------
+
+This target runs the Tkinter menuconfig interface. Both Python 2 and Python 3
+are supported. To change the Python interpreter used, pass
+PYTHONCMD=<executable> to 'make'. The default is 'python'.
+
+
+make [ARCH=<arch>] iscriptconfig
+--------------------------------
+
+This target gives an interactive Python prompt where a Kconfig instance has
+been preloaded and is available in 'kconf'. To change the Python interpreter
+used, pass PYTHONCMD=<executable> to 'make'. The default is 'python'.
+
+To get a feel for the API, try evaluating and printing the symbols in
+kconf.defined_syms, and explore the MenuNode menu tree starting at
+kconf.top_node by following 'next' and 'list' pointers.
+
+The item contained in a menu node is found in MenuNode.item (note that this can
+be one of the constants kconfiglib.MENU and kconfiglib.COMMENT), and all
+symbols and choices have a 'nodes' attribute containing their menu nodes
+(usually only one). Printing a menu node will print its item, in Kconfig
+format.
+
+If you want to look up a symbol by name, use the kconf.syms dictionary.
+
+
+make scriptconfig SCRIPT=<script> [SCRIPT_ARG=<arg>]
+----------------------------------------------------
+
+This target runs the Python script given by the SCRIPT parameter on the
+configuration. sys.argv[1] holds the name of the top-level Kconfig file
+(currently always "Kconfig" in practice), and sys.argv[2] holds the SCRIPT_ARG
+argument, if given.
+
+See the examples/ subdirectory for example scripts.
+
+
+make dumpvarsconfig
+-------------------
+
+This target prints a list of all environment variables referenced from the
+Kconfig files, together with their values. See the
+Kconfiglib/examples/dumpvars.py script.
+
+Only environment variables that are referenced via the Kconfig preprocessor
+$(FOO) syntax are included. The preprocessor was added in Linux 4.18.
+
+
+Using Kconfiglib without the Makefile targets
+=============================================
+
+The make targets are only needed to pick up environment variables exported from
+the Kbuild makefiles and referenced inside Kconfig files, via e.g.
+'source "arch/$(SRCARCH)/Kconfig" and commands run via '$(shell,...)'.
+
+These variables are referenced as of writing (Linux 4.18), together with sample
+values:
+
+  srctree          (.)
+  ARCH             (x86)
+  SRCARCH          (x86)
+  KERNELVERSION    (4.18.0)
+  CC               (gcc)
+  HOSTCC           (gcc)
+  HOSTCXX          (g++)
+  CC_VERSION_TEXT  (gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0)
+
+Older kernels only reference ARCH, SRCARCH, and KERNELVERSION.
+
+If your kernel is recent enough (4.18+), you can get a list of referenced
+environment variables via 'make dumpvarsconfig' (see above). Note that this
+command is added by the Makefile patch.
+
+To run Kconfiglib without the Makefile patch, set the environment variables
+manually:
+
+  $ srctree=. ARCH=x86 SRCARCH=x86 KERNELVERSION=`make kernelversion` ... python(3)
+  >>> import kconfiglib
+  >>> kconf = kconfiglib.Kconfig()  # filename defaults to "Kconfig"
+
+Search the top-level Makefile for "Additional ARCH settings" to see other
+possibilities for ARCH and SRCARCH.
+
+
+Intro to symbol values
+======================
+
+Kconfiglib has the same assignment semantics as the C implementation.
+
+Any symbol can be assigned a value by the user (via Kconfig.load_config() or
+Symbol.set_value()), but this user value is only respected if the symbol is
+visible, which corresponds to it (currently) being visible in the menuconfig
+interface.
+
+For symbols with prompts, the visibility of the symbol is determined by the
+condition on the prompt. Symbols without prompts are never visible, so setting
+a user value on them is pointless. A warning will be printed by default if
+Symbol.set_value() is called on a promptless symbol. Assignments to promptless
+symbols are normal within a .config file, so no similar warning will be printed
+by load_config().
+
+Dependencies from parents and 'if'/'depends on' are propagated to properties,
+including prompts, so these two configurations are logically equivalent:
+
+(1)
+
+  menu "menu"
+      depends on A
+
+  if B
+
+  config FOO
+      tristate "foo" if D
+      default y
+      depends on C
+
+  endif
+
+  endmenu
+
+(2)
+
+  menu "menu"
+      depends on A
+
+  config FOO
+      tristate "foo" if A && B && C && D
+      default y if A && B && C
+
+  endmenu
+
+In this example, A && B && C && D (the prompt condition) needs to be non-n for
+FOO to be visible (assignable). If its value is m, the symbol can only be
+assigned the value m: The visibility sets an upper bound on the value that can
+be assigned by the user, and any higher user value will be truncated down.
+
+'default' properties are independent of the visibility, though a 'default' will
+often get the same condition as the prompt due to dependency propagation.
+'default' properties are used if the symbol is not visible or has no user
+value.
+
+Symbols with no user value (or that have a user value but are not visible) and
+no (active) 'default' default to n for bool/tristate symbols, and to the empty
+string for other symbol types.
+
+'select' works similarly to symbol visibility, but sets a lower bound on the
+value of the symbol. The lower bound is determined by the value of the
+select*ing* symbol. 'select' does not respect visibility, so non-visible
+symbols can be forced to a particular (minimum) value by a select as well.
+
+For non-bool/tristate symbols, it only matters whether the visibility is n or
+non-n: m visibility acts the same as y visibility.
+
+Conditions on 'default' and 'select' work in mostly intuitive ways. If the
+condition is n, the 'default' or 'select' is disabled. If it is m, the
+'default' or 'select' value (the value of the selecting symbol) is truncated
+down to m.
+
+When writing a configuration with Kconfig.write_config(), only symbols that are
+visible, have an (active) default, or are selected will get written out (note
+that this includes all symbols that would accept user values). Kconfiglib
+matches the .config format produced by the C implementations down to the
+character. This eases testing.
+
+For a visible bool/tristate symbol FOO with value n, this line is written to
+.config:
+
+    # CONFIG_FOO is not set
+
+The point is to remember the user n selection (which might differ from the
+default value the symbol would get), while at the same sticking to the rule
+that undefined corresponds to n (.config uses Makefile format, making the line
+above a comment). When the .config file is read back in, this line will be
+treated the same as the following assignment:
+
+    CONFIG_FOO=n
+
+In Kconfiglib, the set of (currently) assignable values for a bool/tristate
+symbol appear in Symbol.assignable. For other symbol types, just check if
+sym.visibility is non-0 (non-n) to see whether the user value will have an
+effect.
+
+
+Intro to the menu tree
+======================
+
+The menu structure, as seen in e.g. menuconfig, is represented by a tree of
+MenuNode objects. The top node of the configuration corresponds to an implicit
+top-level menu, the title of which is shown at the top in the standard
+menuconfig interface. (The title is also available in Kconfig.mainmenu_text in
+Kconfiglib.)
+
+The top node is found in Kconfig.top_node. From there, you can visit child menu
+nodes by following the 'list' pointer, and any following menu nodes by
+following the 'next' pointer. Usually, a non-None 'list' pointer indicates a
+menu or Choice, but menu nodes for symbols can sometimes have a non-None 'list'
+pointer too due to submenus created implicitly from dependencies.
+
+MenuNode.item is either a Symbol or a Choice object, or one of the constants
+MENU and COMMENT. The prompt of the menu node can be found in MenuNode.prompt,
+which also holds the title for menus and comments. For Symbol and Choice,
+MenuNode.help holds the help text (if any, otherwise None).
+
+Most symbols will only have a single menu node. A symbol defined in multiple
+locations will have one menu node for each location. The list of menu nodes for
+a Symbol or Choice can be found in the Symbol/Choice.nodes attribute.
+
+Note that prompts and help texts for symbols and choices are stored in their
+menu node(s) rather than in the Symbol or Choice objects themselves. This makes
+it possible to define a symbol in multiple locations with a different prompt or
+help text in each location. To get the help text or prompt for a symbol with a
+single menu node, do sym.nodes[0].help and sym.nodes[0].prompt, respectively.
+The prompt is a (text, condition) tuple, where condition determines the
+visibility (see 'Intro to expressions' below).
+
+This organization mirrors the C implementation. MenuNode is called
+'struct menu' there, but I thought "menu" was a confusing name.
+
+It is possible to give a Choice a name and define it in multiple locations,
+hence why Choice.nodes is also a list.
+
+As a convenience, the properties added at a particular definition location are
+available on the MenuNode itself, in e.g. MenuNode.defaults. This is helpful
+when generating documentation, so that symbols/choices defined in multiple
+locations can be shown with the correct properties at each location.
+
+
+Intro to expressions
+====================
+
+Expressions can be evaluated with the expr_value() function and printed with
+the expr_str() function (these are used internally as well). Evaluating an
+expression always yields a tristate value, where n, m, and y are represented as
+0, 1, and 2, respectively.
+
+The following table should help you figure out how expressions are represented.
+A, B, C, ... are symbols (Symbol instances), NOT is the kconfiglib.NOT
+constant, etc.
+
+Expression            Representation
+----------            --------------
+A                     A
+"A"                   A (constant symbol)
+!A                    (NOT, A)
+A && B                (AND, A, B)
+A && B && C           (AND, A, (AND, B, C))
+A || B                (OR, A, B)
+A || (B && C && D)    (OR, A, (AND, B, (AND, C, D)))
+A = B                 (EQUAL, A, B)
+A != "foo"            (UNEQUAL, A, foo (constant symbol))
+A && B = C && D       (AND, A, (AND, (EQUAL, B, C), D))
+n                     Kconfig.n (constant symbol)
+m                     Kconfig.m (constant symbol)
+y                     Kconfig.y (constant symbol)
+"y"                   Kconfig.y (constant symbol)
+
+Strings like "foo" in 'default "foo"' or 'depends on SYM = "foo"' are
+represented as constant symbols, so the only values that appear in expressions
+are symbols***. This mirrors the C implementation.
+
+***For choice symbols, the parent Choice will appear in expressions as well,
+but it's usually invisible as the value interfaces of Symbol and Choice are
+identical. This mirrors the C implementation and makes different choice modes
+"just work".
+
+Manual evaluation examples:
+
+  - The value of A && B is min(A.tri_value, B.tri_value)
+
+  - The value of A || B is max(A.tri_value, B.tri_value)
+
+  - The value of !A is 2 - A.tri_value
+
+  - The value of A = B is 2 (y) if A.str_value == B.str_value, and 0 (n)
+    otherwise. Note that str_value is used here instead of tri_value.
+
+    For constant (as well as undefined) symbols, str_value matches the name of
+    the symbol. This mirrors the C implementation and explains why
+    'depends on SYM = "foo"' above works as expected.
+
+n/m/y are automatically converted to the corresponding constant symbols
+"n"/"m"/"y" (Kconfig.n/m/y) during parsing.
+
+Kconfig.const_syms is a dictionary like Kconfig.syms but for constant symbols.
+
+If a condition is missing (e.g., <cond> when the 'if <cond>' is removed from
+'default A if <cond>'), it is actually Kconfig.y. The standard __str__()
+functions just avoid printing 'if y' conditions to give cleaner output.
+
+
+Kconfig extensions
+==================
+
+Kconfiglib includes a couple of Kconfig extensions:
+
+'source' with relative path
+---------------------------
+
+The 'rsource' statement sources Kconfig files with a path relative to directory
+of the Kconfig file containing the 'rsource' statement, instead of relative to
+the project root.
+
+Consider following directory tree:
+
+  Project
+  +--Kconfig
+  |
+  +--src
+     +--Kconfig
+     |
+     +--SubSystem1
+        +--Kconfig
+        |
+        +--ModuleA
+           +--Kconfig
+
+In this example, assume that src/SubSystem1/Kconfig wants to source
+src/SubSystem1/ModuleA/Kconfig.
+
+With 'source', this statement would be used:
+
+  source "src/SubSystem1/ModuleA/Kconfig"
+
+With 'rsource', this turns into
+
+  rsource "ModuleA/Kconfig"
+
+If an absolute path is given to 'rsource', it acts the same as 'source'.
+
+'rsource' can be used to create "position-independent" Kconfig trees that can
+be moved around freely.
+
+
+Globbing 'source'
+-----------------
+
+'source' and 'rsource' accept glob patterns, sourcing all matching Kconfig
+files. They require at least one matching file, raising a KconfigError
+otherwise.
+
+For example, the following statement might source sub1/foofoofoo and
+sub2/foobarfoo:
+
+  source "sub[12]/foo*foo"
+
+The glob patterns accepted are the same as for the standard glob.glob()
+function.
+
+Two additional statements are provided for cases where it's acceptable for a
+pattern to match no files: 'osource' and 'orsource' (the o is for "optional").
+
+For example, the following statements will be no-ops if neither "foo" nor any
+files matching "bar*" exist:
+
+  osource "foo"
+  osource "bar*"
+
+'orsource' does a relative optional source.
+
+'source' and 'osource' are analogous to 'include' and '-include' in Make.
+
+
+Generalized def_* keywords
+--------------------------
+
+def_int, def_hex, and def_string are available in addition to def_bool and
+def_tristate, allowing int, hex, and string symbols to be given a type and a
+default at the same time.
+
+
+Extra optional warnings
+-----------------------
+
+Some optional warnings can be controlled via environment variables:
+
+  - KCONFIG_WARN_UNDEF: If set to 'y', warnings will be generated for all
+    references to undefined symbols within Kconfig files. The only gotcha is
+    that all hex literals must be prefixed with "0x" or "0X", to make it
+    possible to distinguish them from symbol references.
+
+    Some projects (e.g. the Linux kernel) use multiple Kconfig trees with many
+    shared Kconfig files, leading to some safe undefined symbol references.
+    KCONFIG_WARN_UNDEF is useful in projects that only have a single Kconfig
+    tree though.
+
+    KCONFIG_STRICT is an older alias for this environment variable, supported
+    for backwards compatibility.
+
+  - KCONFIG_WARN_UNDEF_ASSIGN: If set to 'y', warnings will be generated for
+    all assignments to undefined symbols within .config files. By default, no
+    such warnings are generated.
+
+    This warning can also be enabled/disabled via the Kconfig.warn_assign_undef
+    variable.
+
+
+Preprocessor user functions defined in Python
+---------------------------------------------
+
+Preprocessor functions can be defined in Python, which makes it simple to
+integrate information from existing Python tools into Kconfig (e.g. to have
+Kconfig symbols depend on hardware information stored in some other format).
+
+Putting a Python module named kconfigfunctions(.py) anywhere in sys.path will
+cause it to be imported by Kconfiglib (in Kconfig.__init__()). Note that
+sys.path can be customized via PYTHONPATH, and includes the directory of the
+module being run by default, as well as installation directories.
+
+If the KCONFIG_FUNCTIONS environment variable is set, it gives a different
+module name to use instead of 'kconfigfunctions'.
+
+The imported module is expected to define a global dictionary named 'functions'
+that maps function names to Python functions, as follows:
+
+  def my_fn(kconf, name, arg_1, arg_2, ...):
+      # kconf:
+      #   Kconfig instance
+      #
+      # name:
+      #   Name of the user-defined function ("my-fn"). Think argv[0].
+      #
+      # arg_1, arg_2, ...:
+      #   Arguments passed to the function from Kconfig (strings)
+      #
+      # Returns a string to be substituted as the result of calling the
+      # function
+      ...
+
+  def my_other_fn(kconf, name, arg_1, arg_2, ...):
+      ...
+
+  functions = {
+      "my-fn":       (my_fn,       <min.args>, <max.args>/None),
+      "my-other-fn": (my_other_fn, <min.args>, <max.args>/None),
+      ...
+  }
+
+  ...
+
+<min.args> and <max.args> are the minimum and maximum number of arguments
+expected by the function (excluding the implicit 'name' argument). If
+<max.args> is None, there is no upper limit to the number of arguments. Passing
+an invalid number of arguments will generate a KconfigError exception.
+
+Once defined, user functions can be called from Kconfig in the same way as
+other preprocessor functions:
+
+    config FOO
+        ...
+        depends on $(my-fn,arg1,arg2)
+
+If my_fn() returns "n", this will result in
+
+    config FOO
+        ...
+        depends on n
+
+Warning
+*******
+
+User-defined preprocessor functions are called as they're encountered at parse
+time, before all Kconfig files have been processed, and before the menu tree
+has been finalized. There are no guarantees that accessing Kconfig symbols or
+the menu tree via the 'kconf' parameter will work, and it could potentially
+lead to a crash. The 'kconf' parameter is provided for future extension (and
+because the predefined functions take it anyway).
+
+Preferably, user-defined functions should be stateless.
+
+
+Feedback
+========
+
+Send bug reports, suggestions, and questions to ulfalizer a.t Google's email
+service, or open a ticket on the GitHub page.
+"""
+import errno
+import importlib
+import os
+import re
+import sys
+
+# Get rid of some attribute lookups. These are obvious in context.
+from glob import iglob
+from os.path import dirname, exists, expandvars, islink, join, realpath
+
+
+VERSION = (12, 13, 0)
+
+
+# File layout:
+#
+# Public classes
+# Public functions
+# Internal functions
+# Global constants
+
+# Line length: 79 columns
+
+
+#
+# Public classes
+#
+
+
+class Kconfig(object):
+    """
+    Represents a Kconfig configuration, e.g. for x86 or ARM. This is the set of
+    symbols, choices, and menu nodes appearing in the configuration. Creating
+    any number of Kconfig objects (including for different architectures) is
+    safe. Kconfiglib doesn't keep any global state.
+
+    The following attributes are available. They should be treated as
+    read-only, and some are implemented through @property magic.
+
+    syms:
+      A dictionary with all symbols in the configuration, indexed by name. Also
+      includes all symbols that are referenced in expressions but never
+      defined, except for constant (quoted) symbols.
+
+      Undefined symbols can be recognized by Symbol.nodes being empty -- see
+      the 'Intro to the menu tree' section in the module docstring.
+
+    const_syms:
+      A dictionary like 'syms' for constant (quoted) symbols
+
+    named_choices:
+      A dictionary like 'syms' for named choices (choice FOO)
+
+    defined_syms:
+      A list with all defined symbols, in the same order as they appear in the
+      Kconfig files. Symbols defined in multiple locations appear multiple
+      times.
+
+      Note: You probably want to use 'unique_defined_syms' instead. This
+      attribute is mostly maintained for backwards compatibility.
+
+    unique_defined_syms:
+      A list like 'defined_syms', but with duplicates removed. Just the first
+      instance is kept for symbols defined in multiple locations. Kconfig order
+      is preserved otherwise.
+
+      Using this attribute instead of 'defined_syms' can save work, and
+      automatically gives reasonable behavior when writing configuration output
+      (symbols defined in multiple locations only generate output once, while
+      still preserving Kconfig order for readability).
+
+    choices:
+      A list with all choices, in the same order as they appear in the Kconfig
+      files.
+
+      Note: You probably want to use 'unique_choices' instead. This attribute
+      is mostly maintained for backwards compatibility.
+
+    unique_choices:
+      Analogous to 'unique_defined_syms', for choices. Named choices can have
+      multiple definition locations.
+
+    menus:
+      A list with all menus, in the same order as they appear in the Kconfig
+      files
+
+    comments:
+      A list with all comments, in the same order as they appear in the Kconfig
+      files
+
+    kconfig_filenames:
+      A list with the filenames of all Kconfig files included in the
+      configuration, relative to $srctree (or relative to the current directory
+      if $srctree isn't set), except absolute paths (e.g.
+      'source "/foo/Kconfig"') are kept as-is.
+
+      The files are listed in the order they are source'd, starting with the
+      top-level Kconfig file. If a file is source'd multiple times, it will
+      appear multiple times. Use set() to get unique filenames.
+
+      Note that Kconfig.sync_deps() already indirectly catches any file
+      modifications that change configuration output.
+
+    env_vars:
+      A set() with the names of all environment variables referenced in the
+      Kconfig files.
+
+      Only environment variables referenced with the preprocessor $(FOO) syntax
+      will be registered. The older $FOO syntax is only supported for backwards
+      compatibility.
+
+      Also note that $(FOO) won't be registered unless the environment variable
+      $FOO is actually set. If it isn't, $(FOO) is an expansion of an unset
+      preprocessor variable (which gives the empty string).
+
+      Another gotcha is that environment variables referenced in the values of
+      recursively expanded preprocessor variables (those defined with =) will
+      only be registered if the variable is actually used (expanded) somewhere.
+
+      The note from the 'kconfig_filenames' documentation applies here too.
+
+    n/m/y:
+      The predefined constant symbols n/m/y. Also available in const_syms.
+
+    modules:
+      The Symbol instance for the modules symbol. Currently hardcoded to
+      MODULES, which is backwards compatible. Kconfiglib will warn if
+      'option modules' is set on some other symbol. Tell me if you need proper
+      'option modules' support.
+
+      'modules' is never None. If the MODULES symbol is not explicitly defined,
+      its tri_value will be 0 (n), as expected.
+
+      A simple way to enable modules is to do 'kconf.modules.set_value(2)'
+      (provided the MODULES symbol is defined and visible). Modules are
+      disabled by default in the kernel Kconfig files as of writing, though
+      nearly all defconfig files enable them (with 'CONFIG_MODULES=y').
+
+    defconfig_list:
+      The Symbol instance for the 'option defconfig_list' symbol, or None if no
+      defconfig_list symbol exists. The defconfig filename derived from this
+      symbol can be found in Kconfig.defconfig_filename.
+
+    defconfig_filename:
+      The filename given by the defconfig_list symbol. This is taken from the
+      first 'default' with a satisfied condition where the specified file
+      exists (can be opened for reading). If a defconfig file foo/defconfig is
+      not found and $srctree was set when the Kconfig was created,
+      $srctree/foo/defconfig is looked up as well.
+
+      'defconfig_filename' is None if either no defconfig_list symbol exists,
+      or if the defconfig_list symbol has no 'default' with a satisfied
+      condition that specifies a file that exists.
+
+      Gotcha: scripts/kconfig/Makefile might pass --defconfig=<defconfig> to
+      scripts/kconfig/conf when running e.g. 'make defconfig'. This option
+      overrides the defconfig_list symbol, meaning defconfig_filename might not
+      always match what 'make defconfig' would use.
+
+    top_node:
+      The menu node (see the MenuNode class) of the implicit top-level menu.
+      Acts as the root of the menu tree.
+
+    mainmenu_text:
+      The prompt (title) of the top menu (top_node). Defaults to "Main menu".
+      Can be changed with the 'mainmenu' statement (see kconfig-language.txt).
+
+    variables:
+      A dictionary with all preprocessor variables, indexed by name. See the
+      Variable class.
+
+    warn:
+      Set this variable to True/False to enable/disable warnings. See
+      Kconfig.__init__().
+
+      When 'warn' is False, the values of the other warning-related variables
+      are ignored.
+
+      This variable as well as the other warn* variables can be read to check
+      the current warning settings.
+
+    warn_to_stderr:
+      Set this variable to True/False to enable/disable warnings on stderr. See
+      Kconfig.__init__().
+
+    warn_assign_undef:
+      Set this variable to True to generate warnings for assignments to
+      undefined symbols in configuration files.
+
+      This variable is False by default unless the KCONFIG_WARN_UNDEF_ASSIGN
+      environment variable was set to 'y' when the Kconfig instance was
+      created.
+
+    warn_assign_override:
+      Set this variable to True to generate warnings for multiple assignments
+      to the same symbol in configuration files, where the assignments set
+      different values (e.g. CONFIG_FOO=m followed by CONFIG_FOO=y, where the
+      last value would get used).
+
+      This variable is True by default. Disabling it might be useful when
+      merging configurations.
+
+    warn_assign_redun:
+      Like warn_assign_override, but for multiple assignments setting a symbol
+      to the same value.
+
+      This variable is True by default. Disabling it might be useful when
+      merging configurations.
+
+    warnings:
+      A list of strings containing all warnings that have been generated, for
+      cases where more flexibility is needed.
+
+      See the 'warn_to_stderr' parameter to Kconfig.__init__() and the
+      Kconfig.warn_to_stderr variable as well. Note that warnings still get
+      added to Kconfig.warnings when 'warn_to_stderr' is True.
+
+      Just as for warnings printed to stderr, only warnings that are enabled
+      will get added to Kconfig.warnings. See the various Kconfig.warn*
+      variables.
+
+    missing_syms:
+      A list with (name, value) tuples for all assignments to undefined symbols
+      within the most recently loaded .config file(s). 'name' is the symbol
+      name without the 'CONFIG_' prefix. 'value' is a string that gives the
+      right-hand side of the assignment verbatim.
+
+      See Kconfig.load_config() as well.
+
+    srctree:
+      The value of the $srctree environment variable when the configuration was
+      loaded, or the empty string if $srctree wasn't set. This gives nice
+      behavior with os.path.join(), which treats "" as the current directory,
+      without adding "./".
+
+      Kconfig files are looked up relative to $srctree (unless absolute paths
+      are used), and .config files are looked up relative to $srctree if they
+      are not found in the current directory. This is used to support
+      out-of-tree builds. The C tools use this environment variable in the same
+      way.
+
+      Changing $srctree after creating the Kconfig instance has no effect. Only
+      the value when the configuration is loaded matters. This avoids surprises
+      if multiple configurations are loaded with different values for $srctree.
+
+    config_prefix:
+      The value of the $CONFIG_ environment variable when the configuration was
+      loaded. This is the prefix used (and expected) on symbol names in .config
+      files and C headers. Defaults to "CONFIG_". Used in the same way in the C
+      tools.
+
+      Like for srctree, only the value of $CONFIG_ when the configuration is
+      loaded matters.
+    """
+    __slots__ = (
+        "_encoding",
+        "_functions",
+        "_set_match",
+        "_srctree_prefix",
+        "_unset_match",
+        "_warn_assign_no_prompt",
+        "choices",
+        "comments",
+        "config_prefix",
+        "const_syms",
+        "defconfig_list",
+        "defined_syms",
+        "env_vars",
+        "kconfig_filenames",
+        "m",
+        "menus",
+        "missing_syms",
+        "modules",
+        "n",
+        "named_choices",
+        "srctree",
+        "syms",
+        "top_node",
+        "unique_choices",
+        "unique_defined_syms",
+        "variables",
+        "warn",
+        "warn_assign_override",
+        "warn_assign_redun",
+        "warn_assign_undef",
+        "warn_to_stderr",
+        "warnings",
+        "y",
+
+        # Parsing-related
+        "_parsing_kconfigs",
+        "_readline",
+        "_filename",
+        "_linenr",
+        "_include_path",
+        "_filestack",
+        "_line",
+        "_tokens",
+        "_tokens_i",
+        "_reuse_tokens",
+    )
+
+    #
+    # Public interface
+    #
+
+    def __init__(self, filename="Kconfig", warn=True, warn_to_stderr=True,
+                 encoding="utf-8"):
+        """
+        Creates a new Kconfig object by parsing Kconfig files.
+        Note that Kconfig files are not the same as .config files (which store
+        configuration symbol values).
+
+        See the module docstring for some environment variables that influence
+        default warning settings (KCONFIG_WARN_UNDEF and
+        KCONFIG_WARN_UNDEF_ASSIGN).
+
+        Raises KconfigError on syntax/semantic errors, and OSError or (possibly
+        a subclass of) IOError on IO errors ('errno', 'strerror', and
+        'filename' are available). Note that IOError is an alias for OSError on
+        Python 3, so it's enough to catch OSError there. If you need Python 2/3
+        compatibility, it's easiest to catch EnvironmentError, which is a
+        common base class of OSError/IOError on Python 2 and an alias for
+        OSError on Python 3.
+
+        filename (default: "Kconfig"):
+          The Kconfig file to load. For the Linux kernel, you'll want "Kconfig"
+          from the top-level directory, as environment variables will make sure
+          the right Kconfig is included from there (arch/$SRCARCH/Kconfig as of
+          writing).
+
+          If $srctree is set, 'filename' will be looked up relative to it.
+          $srctree is also used to look up source'd files within Kconfig files.
+          See the class documentation.
+
+          If you are using Kconfiglib via 'make scriptconfig', the filename of
+          the base base Kconfig file will be in sys.argv[1]. It's currently
+          always "Kconfig" in practice.
+
+        warn (default: True):
+          True if warnings related to this configuration should be generated.
+          This can be changed later by setting Kconfig.warn to True/False. It
+          is provided as a constructor argument since warnings might be
+          generated during parsing.
+
+          See the other Kconfig.warn_* variables as well, which enable or
+          suppress certain warnings when warnings are enabled.
+
+          All generated warnings are added to the Kconfig.warnings list. See
+          the class documentation.
+
+        warn_to_stderr (default: True):
+          True if warnings should be printed to stderr in addition to being
+          added to Kconfig.warnings.
+
+          This can be changed later by setting Kconfig.warn_to_stderr to
+          True/False.
+
+        encoding (default: "utf-8"):
+          The encoding to use when reading and writing files, and when decoding
+          output from commands run via $(shell). If None, the encoding
+          specified in the current locale will be used.
+
+          The "utf-8" default avoids exceptions on systems that are configured
+          to use the C locale, which implies an ASCII encoding.
+
+          This parameter has no effect on Python 2, due to implementation
+          issues (regular strings turning into Unicode strings, which are
+          distinct in Python 2). Python 2 doesn't decode regular strings
+          anyway.
+
+          Related PEP: https://www.python.org/dev/peps/pep-0538/
+        """
+        self._encoding = encoding
+
+        self.srctree = os.getenv("srctree", "")
+        # A prefix we can reliably strip from glob() results to get a filename
+        # relative to $srctree. relpath() can cause issues for symlinks,
+        # because it assumes symlink/../foo is the same as foo/.
+        self._srctree_prefix = realpath(self.srctree) + os.sep
+
+        self.warn = warn
+        self.warn_to_stderr = warn_to_stderr
+        self.warn_assign_undef = os.getenv("KCONFIG_WARN_UNDEF_ASSIGN") == "y"
+        self.warn_assign_override = True
+        self.warn_assign_redun = True
+        self._warn_assign_no_prompt = True
+
+        self.warnings = []
+
+        self.config_prefix = os.getenv("CONFIG_", "CONFIG_")
+        # Regular expressions for parsing .config files
+        self._set_match = _re_match(self.config_prefix + r"([^=]+)=(.*)")
+        self._unset_match = _re_match(r"# {}([^ ]+) is not set".format(
+            self.config_prefix))
+
+        self.syms = {}
+        self.const_syms = {}
+        self.defined_syms = []
+        self.missing_syms = []
+        self.named_choices = {}
+        self.choices = []
+        self.menus = []
+        self.comments = []
+
+        for nmy in "n", "m", "y":
+            sym = Symbol()
+            sym.kconfig = self
+            sym.name = nmy
+            sym.is_constant = True
+            sym.orig_type = TRISTATE
+            sym._cached_tri_val = STR_TO_TRI[nmy]
+
+            self.const_syms[nmy] = sym
+
+        self.n = self.const_syms["n"]
+        self.m = self.const_syms["m"]
+        self.y = self.const_syms["y"]
+
+        # Make n/m/y well-formed symbols
+        for nmy in "n", "m", "y":
+            sym = self.const_syms[nmy]
+            sym.rev_dep = sym.weak_rev_dep = sym.direct_dep = self.n
+
+        # Maps preprocessor variables names to Variable instances
+        self.variables = {}
+
+        # Predefined preprocessor functions, with min/max number of arguments
+        self._functions = {
+            "info":       (_info_fn,       1, 1),
+            "error-if":   (_error_if_fn,   2, 2),
+            "filename":   (_filename_fn,   0, 0),
+            "lineno":     (_lineno_fn,     0, 0),
+            "shell":      (_shell_fn,      1, 1),
+            "warning-if": (_warning_if_fn, 2, 2),
+        }
+
+        # Add any user-defined preprocessor functions
+        try:
+            self._functions.update(
+                importlib.import_module(
+                    os.getenv("KCONFIG_FUNCTIONS", "kconfigfunctions")
+                ).functions)
+        except ImportError:
+            pass
+
+        # This determines whether previously unseen symbols are registered.
+        # They shouldn't be if we parse expressions after parsing, as part of
+        # Kconfig.eval_string().
+        self._parsing_kconfigs = True
+
+        self.modules = self._lookup_sym("MODULES")
+        self.defconfig_list = None
+
+        self.top_node = MenuNode()
+        self.top_node.kconfig = self
+        self.top_node.item = MENU
+        self.top_node.is_menuconfig = True
+        self.top_node.visibility = self.y
+        self.top_node.prompt = ("Main menu", self.y)
+        self.top_node.parent = None
+        self.top_node.dep = self.y
+        self.top_node.filename = filename
+        self.top_node.linenr = 1
+        self.top_node.include_path = ()
+
+        # Parse the Kconfig files
+
+        # Not used internally. Provided as a convenience.
+        self.kconfig_filenames = [filename]
+        self.env_vars = set()
+
+        # Keeps track of the location in the parent Kconfig files. Kconfig
+        # files usually source other Kconfig files. See _enter_file().
+        self._filestack = []
+        self._include_path = ()
+
+        # The current parsing location
+        self._filename = filename
+        self._linenr = 0
+
+        # Used to avoid retokenizing lines when we discover that they're not
+        # part of the construct currently being parsed. This is kinda like an
+        # unget operation.
+        self._reuse_tokens = False
+
+        # Open the top-level Kconfig file. Store the readline() method directly
+        # as a small optimization.
+        self._readline = self._open(join(self.srctree, filename), "r").readline
+
+        try:
+            # Parse the Kconfig files
+            self._parse_block(None, self.top_node, self.top_node)
+            self.top_node.list = self.top_node.next
+            self.top_node.next = None
+        except UnicodeDecodeError as e:
+            _decoding_error(e, self._filename)
+
+        # Close the top-level Kconfig file. __self__ fetches the 'file' object
+        # for the method.
+        self._readline.__self__.close()
+
+        self._parsing_kconfigs = False
+
+        # Do various menu tree post-processing
+        self._finalize_node(self.top_node, self.y)
+
+        self.unique_defined_syms = _ordered_unique(self.defined_syms)
+        self.unique_choices = _ordered_unique(self.choices)
+
+        # Do sanity checks. Some of these depend on everything being finalized.
+        self._check_sym_sanity()
+        self._check_choice_sanity()
+
+        # KCONFIG_STRICT is an older alias for KCONFIG_WARN_UNDEF, supported
+        # for backwards compatibility
+        if os.getenv("KCONFIG_WARN_UNDEF") == "y" or \
+           os.getenv("KCONFIG_STRICT") == "y":
+
+            self._check_undef_syms()
+
+        # Build Symbol._dependents for all symbols and choices
+        self._build_dep()
+
+        # Check for dependency loops
+        check_dep_loop_sym = _check_dep_loop_sym  # Micro-optimization
+        for sym in self.unique_defined_syms:
+            check_dep_loop_sym(sym, False)
+
+        # Add extra dependencies from choices to choice symbols that get
+        # awkward during dependency loop detection
+        self._add_choice_deps()
+
+    @property
+    def mainmenu_text(self):
+        """
+        See the class documentation.
+        """
+        return self.top_node.prompt[0]
+
+    @property
+    def defconfig_filename(self):
+        """
+        See the class documentation.
+        """
+        if self.defconfig_list:
+            for filename, cond in self.defconfig_list.defaults:
+                if expr_value(cond):
+                    try:
+                        with self._open_config(filename.str_value) as f:
+                            return f.name
+                    except EnvironmentError:
+                        continue
+
+        return None
+
+    def load_config(self, filename=None, replace=True, verbose=None):
+        """
+        Loads symbol values from a file in the .config format. Equivalent to
+        calling Symbol.set_value() to set each of the values.
+
+        "# CONFIG_FOO is not set" within a .config file sets the user value of
+        FOO to n. The C tools work the same way.
+
+        For each symbol, the Symbol.user_value attribute holds the value the
+        symbol was assigned in the .config file (if any). The user value might
+        differ from Symbol.str/tri_value if there are unsatisfied dependencies.
+
+        Calling this function also updates the Kconfig.missing_syms attribute
+        with a list of all assignments to undefined symbols within the
+        configuration file. Kconfig.missing_syms is cleared if 'replace' is
+        True, and appended to otherwise. See the documentation for
+        Kconfig.missing_syms as well.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        filename (default: None):
+          Path to load configuration from (a string). Respects $srctree if set
+          (see the class documentation).
+
+          If 'filename' is None (the default), the configuration file to load
+          (if any) is calculated automatically, giving the behavior you'd
+          usually want:
+
+            1. If the KCONFIG_CONFIG environment variable is set, it gives the
+               path to the configuration file to load. Otherwise, ".config" is
+               used. See standard_config_filename().
+
+            2. If the path from (1.) doesn't exist, the configuration file
+               given by kconf.defconfig_filename is loaded instead, which is
+               derived from the 'option defconfig_list' symbol.
+
+            3. If (1.) and (2.) fail to find a configuration file to load, no
+               configuration file is loaded, and symbols retain their current
+               values (e.g., their default values). This is not an error.
+
+           See the return value as well.
+
+        replace (default: True):
+          If True, all existing user values will be cleared before loading the
+          .config. Pass False to merge configurations.
+
+        verbose (default: None):
+          Limited backwards compatibility to prevent crashes. A warning is
+          printed if anything but None is passed.
+
+          Prior to Kconfiglib 12.0.0, this option enabled printing of messages
+          to stdout when 'filename' was None. A message is (always) returned
+          now instead, which is more flexible.
+
+          Will probably be removed in some future version.
+
+        Returns a string with a message saying which file got loaded (or
+        possibly that no file got loaded, when 'filename' is None). This is
+        meant to reduce boilerplate in tools, which can do e.g.
+        print(kconf.load_config()). The returned message distinguishes between
+        loading (replace == True) and merging (replace == False).
+        """
+        if verbose is not None:
+            _warn_verbose_deprecated("load_config")
+
+        msg = None
+        if filename is None:
+            filename = standard_config_filename()
+            if not exists(filename) and \
+               not exists(join(self.srctree, filename)):
+                defconfig = self.defconfig_filename
+                if defconfig is None:
+                    return "Using default symbol values (no '{}')" \
+                           .format(filename)
+
+                msg = " default configuration '{}' (no '{}')" \
+                      .format(defconfig, filename)
+                filename = defconfig
+
+        if not msg:
+            msg = " configuration '{}'".format(filename)
+
+        # Disable the warning about assigning to symbols without prompts. This
+        # is normal and expected within a .config file.
+        self._warn_assign_no_prompt = False
+
+        # This stub only exists to make sure _warn_assign_no_prompt gets
+        # reenabled
+        try:
+            self._load_config(filename, replace)
+        except UnicodeDecodeError as e:
+            _decoding_error(e, filename)
+        finally:
+            self._warn_assign_no_prompt = True
+
+        return ("Loaded" if replace else "Merged") + msg
+
+    def _load_config(self, filename, replace):
+        with self._open_config(filename) as f:
+            if replace:
+                self.missing_syms = []
+
+                # If we're replacing the configuration, keep track of which
+                # symbols and choices got set so that we can unset the rest
+                # later. This avoids invalidating everything and is faster.
+                # Another benefit is that invalidation must be rock solid for
+                # it to work, making it a good test.
+
+                for sym in self.unique_defined_syms:
+                    sym._was_set = False
+
+                for choice in self.unique_choices:
+                    choice._was_set = False
+
+            # Small optimizations
+            set_match = self._set_match
+            unset_match = self._unset_match
+            get_sym = self.syms.get
+
+            for linenr, line in enumerate(f, 1):
+                # The C tools ignore trailing whitespace
+                line = line.rstrip()
+
+                match = set_match(line)
+                if match:
+                    name, val = match.groups()
+                    sym = get_sym(name)
+                    if not sym or not sym.nodes:
+                        self._undef_assign(name, val, filename, linenr)
+                        continue
+
+                    if sym.orig_type in _BOOL_TRISTATE:
+                        # The C implementation only checks the first character
+                        # to the right of '=', for whatever reason
+                        if not (sym.orig_type is BOOL
+                                and val.startswith(("y", "n")) or
+                                sym.orig_type is TRISTATE
+                                and val.startswith(("y", "m", "n"))):
+                            self._warn("'{}' is not a valid value for the {} "
+                                       "symbol {}. Assignment ignored."
+                                       .format(val, TYPE_TO_STR[sym.orig_type],
+                                               _name_and_loc(sym)),
+                                       filename, linenr)
+                            continue
+
+                        val = val[0]
+
+                        if sym.choice and val != "n":
+                            # During .config loading, we infer the mode of the
+                            # choice from the kind of values that are assigned
+                            # to the choice symbols
+
+                            prev_mode = sym.choice.user_value
+                            if prev_mode is not None and \
+                               TRI_TO_STR[prev_mode] != val:
+
+                                self._warn("both m and y assigned to symbols "
+                                           "within the same choice",
+                                           filename, linenr)
+
+                            # Set the choice's mode
+                            sym.choice.set_value(val)
+
+                    elif sym.orig_type is STRING:
+                        match = _conf_string_match(val)
+                        if not match:
+                            self._warn("malformed string literal in "
+                                       "assignment to {}. Assignment ignored."
+                                       .format(_name_and_loc(sym)),
+                                       filename, linenr)
+                            continue
+
+                        val = unescape(match.group(1))
+
+                else:
+                    match = unset_match(line)
+                    if not match:
+                        # Print a warning for lines that match neither
+                        # set_match() nor unset_match() and that are not blank
+                        # lines or comments. 'line' has already been
+                        # rstrip()'d, so blank lines show up as "" here.
+                        if line and not line.lstrip().startswith("#"):
+                            self._warn("ignoring malformed line '{}'"
+                                       .format(line),
+                                       filename, linenr)
+
+                        continue
+
+                    name = match.group(1)
+                    sym = get_sym(name)
+                    if not sym or not sym.nodes:
+                        self._undef_assign(name, "n", filename, linenr)
+                        continue
+
+                    if sym.orig_type not in _BOOL_TRISTATE:
+                        continue
+
+                    val = "n"
+
+                # Done parsing the assignment. Set the value.
+
+                if sym._was_set:
+                    self._assigned_twice(sym, val, filename, linenr)
+
+                sym.set_value(val)
+
+        if replace:
+            # If we're replacing the configuration, unset the symbols that
+            # didn't get set
+
+            for sym in self.unique_defined_syms:
+                if not sym._was_set:
+                    sym.unset_value()
+
+            for choice in self.unique_choices:
+                if not choice._was_set:
+                    choice.unset_value()
+
+    def _undef_assign(self, name, val, filename, linenr):
+        # Called for assignments to undefined symbols during .config loading
+
+        self.missing_syms.append((name, val))
+        if self.warn_assign_undef:
+            self._warn(
+                "attempt to assign the value '{}' to the undefined symbol {}"
+                .format(val, name), filename, linenr)
+
+    def _assigned_twice(self, sym, new_val, filename, linenr):
+        # Called when a symbol is assigned more than once in a .config file
+
+        # Use strings for bool/tristate user values in the warning
+        if sym.orig_type in _BOOL_TRISTATE:
+            user_val = TRI_TO_STR[sym.user_value]
+        else:
+            user_val = sym.user_value
+
+        msg = '{} set more than once. Old value "{}", new value "{}".'.format(
+            _name_and_loc(sym), user_val, new_val)
+
+        if user_val == new_val:
+            if self.warn_assign_redun:
+                self._warn(msg, filename, linenr)
+        elif self.warn_assign_override:
+            self._warn(msg, filename, linenr)
+
+    def write_autoconf(self, filename,
+                       header="/* Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) */\n"):
+        r"""
+        Writes out symbol values as a C header file, matching the format used
+        by include/generated/autoconf.h in the kernel.
+
+        The ordering of the #defines matches the one generated by
+        write_config(). The order in the C implementation depends on the hash
+        table implementation as of writing, and so won't match.
+
+        If 'filename' exists and its contents is identical to what would get
+        written out, it is left untouched. This avoids updating file metadata
+        like the modification time and possibly triggering redundant work in
+        build tools.
+
+        filename:
+          Self-explanatory.
+
+        header (default: "/* Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) */\n"):
+          Text that will be inserted verbatim at the beginning of the file. You
+          would usually want it enclosed in '/* */' to make it a C comment,
+          and include a final terminating newline.
+        """
+        self._write_if_changed(filename, self._autoconf_contents(header))
+
+    def _autoconf_contents(self, header):
+        # write_autoconf() helper. Returns the contents to write as a string,
+        # with 'header' at the beginning.
+
+        # "".join()ed later
+        chunks = [header]
+        add = chunks.append
+
+        for sym in self.unique_defined_syms:
+            # _write_to_conf is determined when the value is calculated. This
+            # is a hidden function call due to property magic.
+            #
+            # Note: In client code, you can check if sym.config_string is empty
+            # instead, to avoid accessing the internal _write_to_conf variable
+            # (though it's likely to keep working).
+            val = sym.str_value
+            if not sym._write_to_conf:
+                continue
+
+            if sym.orig_type in _BOOL_TRISTATE:
+                if val == "y":
+                    add("#define {}{} 1\n"
+                        .format(self.config_prefix, sym.name))
+                elif val == "m":
+                    add("#define {}{}_MODULE 1\n"
+                        .format(self.config_prefix, sym.name))
+
+            elif sym.orig_type is STRING:
+                add('#define {}{} "{}"\n'
+                    .format(self.config_prefix, sym.name, escape(val)))
+
+            else:  # sym.orig_type in _INT_HEX:
+                if sym.orig_type is HEX and \
+                   not val.startswith(("0x", "0X")):
+                    val = "0x" + val
+
+                add("#define {}{} {}\n"
+                    .format(self.config_prefix, sym.name, val))
+
+        return "".join(chunks)
+
+    def write_config(self, filename=None,
+                     header="# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n",
+                     save_old=True, verbose=None):
+        r"""
+        Writes out symbol values in the .config format. The format matches the
+        C implementation, including ordering.
+
+        Symbols appear in the same order in generated .config files as they do
+        in the Kconfig files. For symbols defined in multiple locations, a
+        single assignment is written out corresponding to the first location
+        where the symbol is defined.
+
+        See the 'Intro to symbol values' section in the module docstring to
+        understand which symbols get written out.
+
+        If 'filename' exists and its contents is identical to what would get
+        written out, it is left untouched. This avoids updating file metadata
+        like the modification time and possibly triggering redundant work in
+        build tools.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        filename (default: None):
+          Filename to save configuration to (a string).
+
+          If None (the default), the filename in the environment variable
+          KCONFIG_CONFIG is used if set, and ".config" otherwise. See
+          standard_config_filename().
+
+        header (default: "# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n"):
+          Text that will be inserted verbatim at the beginning of the file. You
+          would usually want each line to start with '#' to make it a comment,
+          and include a final terminating newline.
+
+        save_old (default: True):
+          If True and <filename> already exists, a copy of it will be saved to
+          <filename>.old in the same directory before the new configuration is
+          written.
+
+          Errors are silently ignored if <filename>.old cannot be written (e.g.
+          due to being a directory, or <filename> being something like
+          /dev/null).
+
+        verbose (default: None):
+          Limited backwards compatibility to prevent crashes. A warning is
+          printed if anything but None is passed.
+
+          Prior to Kconfiglib 12.0.0, this option enabled printing of messages
+          to stdout when 'filename' was None. A message is (always) returned
+          now instead, which is more flexible.
+
+          Will probably be removed in some future version.
+
+        Returns a string with a message saying which file got saved. This is
+        meant to reduce boilerplate in tools, which can do e.g.
+        print(kconf.write_config()).
+        """
+        if verbose is not None:
+            _warn_verbose_deprecated("write_config")
+
+        if filename is None:
+            filename = standard_config_filename()
+
+        contents = self._config_contents(header)
+        if self._contents_eq(filename, contents):
+            return "No change to '{}'".format(filename)
+
+        if save_old:
+            _save_old(filename)
+
+        with self._open(filename, "w") as f:
+            f.write(contents)
+
+        return "Configuration saved to '{}'".format(filename)
+
+    def _config_contents(self, header):
+        # write_config() helper. Returns the contents to write as a string,
+        # with 'header' at the beginning.
+        #
+        # More memory friendly would be to 'yield' the strings and
+        # "".join(_config_contents()), but it was a bit slower on my system.
+
+        # node_iter() was used here before commit 3aea9f7 ("Add '# end of
+        # <menu>' after menus in .config"). Those comments get tricky to
+        # implement with it.
+
+        for sym in self.unique_defined_syms:
+            sym._visited = False
+
+        # Did we just print an '# end of ...' comment?
+        after_end_comment = False
+
+        # "".join()ed later
+        chunks = [header]
+        add = chunks.append
+
+        node = self.top_node
+        while 1:
+            # Jump to the next node with an iterative tree walk
+            if node.list:
+                node = node.list
+            elif node.next:
+                node = node.next
+            else:
+                while node.parent:
+                    node = node.parent
+
+                    # Add a comment when leaving visible menus
+                    if node.item is MENU and expr_value(node.dep) and \
+                       expr_value(node.visibility) and \
+                       node is not self.top_node:
+                        add("# end of {}\n".format(node.prompt[0]))
+                        after_end_comment = True
+
+                    if node.next:
+                        node = node.next
+                        break
+                else:
+                    # No more nodes
+                    return "".join(chunks)
+
+            # Generate configuration output for the node
+
+            item = node.item
+
+            if item.__class__ is Symbol:
+                if item._visited:
+                    continue
+                item._visited = True
+
+                conf_string = item.config_string
+                if not conf_string:
+                    continue
+
+                if after_end_comment:
+                    # Add a blank line before the first symbol printed after an
+                    # '# end of ...' comment
+                    after_end_comment = False
+                    add("\n")
+                add(conf_string)
+
+            elif expr_value(node.dep) and \
+                 ((item is MENU and expr_value(node.visibility)) or
+                  item is COMMENT):
+
+                add("\n#\n# {}\n#\n".format(node.prompt[0]))
+                after_end_comment = False
+
+    def write_min_config(self, filename,
+                         header="# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n"):
+        """
+        Writes out a "minimal" configuration file, omitting symbols whose value
+        matches their default value. The format matches the one produced by
+        'make savedefconfig'.
+
+        The resulting configuration file is incomplete, but a complete
+        configuration can be derived from it by loading it. Minimal
+        configuration files can serve as a more manageable configuration format
+        compared to a "full" .config file, especially when configurations files
+        are merged or edited by hand.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        filename:
+          Self-explanatory.
+
+        header (default: "# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n"):
+          Text that will be inserted verbatim at the beginning of the file. You
+          would usually want each line to start with '#' to make it a comment,
+          and include a final terminating newline.
+
+        Returns a string with a message saying which file got saved. This is
+        meant to reduce boilerplate in tools, which can do e.g.
+        print(kconf.write_min_config()).
+        """
+        contents = self._min_config_contents(header)
+        if self._contents_eq(filename, contents):
+            return "No change to '{}'".format(filename)
+
+        with self._open(filename, "w") as f:
+            f.write(contents)
+
+        return "Minimal configuration saved to '{}'".format(filename)
+
+    def _min_config_contents(self, header):
+        # write_min_config() helper. Returns the contents to write as a string,
+        # with 'header' at the beginning.
+
+        chunks = [header]
+        add = chunks.append
+
+        for sym in self.unique_defined_syms:
+            # Skip symbols that cannot be changed. Only check
+            # non-choice symbols, as selects don't affect choice
+            # symbols.
+            if not sym.choice and \
+               sym.visibility <= expr_value(sym.rev_dep):
+                continue
+
+            # Skip symbols whose value matches their default
+            if sym.str_value == sym._str_default():
+                continue
+
+            # Skip symbols that would be selected by default in a
+            # choice, unless the choice is optional or the symbol type
+            # isn't bool (it might be possible to set the choice mode
+            # to n or the symbol to m in those cases).
+            if sym.choice and \
+               not sym.choice.is_optional and \
+               sym.choice._selection_from_defaults() is sym and \
+               sym.orig_type is BOOL and \
+               sym.tri_value == 2:
+                continue
+
+            add(sym.config_string)
+
+        return "".join(chunks)
+
+    def sync_deps(self, path):
+        """
+        Creates or updates a directory structure that can be used to avoid
+        doing a full rebuild whenever the configuration is changed, mirroring
+        include/config/ in the kernel.
+
+        This function is intended to be called during each build, before
+        compiling source files that depend on configuration symbols.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        path:
+          Path to directory
+
+        sync_deps(path) does the following:
+
+          1. If the directory <path> does not exist, it is created.
+
+          2. If <path>/auto.conf exists, old symbol values are loaded from it,
+             which are then compared against the current symbol values. If a
+             symbol has changed value (would generate different output in
+             autoconf.h compared to before), the change is signaled by
+             touch'ing a file corresponding to the symbol.
+
+             The first time sync_deps() is run on a directory, <path>/auto.conf
+             won't exist, and no old symbol values will be available. This
+             logically has the same effect as updating the entire
+             configuration.
+
+             The path to a symbol's file is calculated from the symbol's name
+             by replacing all '_' with '/' and appending '.h'. For example, the
+             symbol FOO_BAR_BAZ gets the file <path>/foo/bar/baz.h, and FOO
+             gets the file <path>/foo.h.
+
+             This scheme matches the C tools. The point is to avoid having a
+             single directory with a huge number of files, which the underlying
+             filesystem might not handle well.
+
+          3. A new auto.conf with the current symbol values is written, to keep
+             track of them for the next build.
+
+             If auto.conf exists and its contents is identical to what would
+             get written out, it is left untouched. This avoids updating file
+             metadata like the modification time and possibly triggering
+             redundant work in build tools.
+
+
+        The last piece of the puzzle is knowing what symbols each source file
+        depends on. Knowing that, dependencies can be added from source files
+        to the files corresponding to the symbols they depends on. The source
+        file will then get recompiled (only) when the symbol value changes
+        (provided sync_deps() is run first during each build).
+
+        The tool in the kernel that extracts symbol dependencies from source
+        files is scripts/basic/fixdep.c. Missing symbol files also correspond
+        to "not changed", which fixdep deals with by using the $(wildcard) Make
+        function when adding symbol prerequisites to source files.
+
+        In case you need a different scheme for your project, the sync_deps()
+        implementation can be used as a template.
+        """
+        if not exists(path):
+            os.mkdir(path, 0o755)
+
+        # Load old values from auto.conf, if any
+        self._load_old_vals(path)
+
+        for sym in self.unique_defined_syms:
+            # _write_to_conf is determined when the value is calculated. This
+            # is a hidden function call due to property magic.
+            #
+            # Note: In client code, you can check if sym.config_string is empty
+            # instead, to avoid accessing the internal _write_to_conf variable
+            # (though it's likely to keep working).
+            val = sym.str_value
+
+            # n tristate values do not get written to auto.conf and autoconf.h,
+            # making a missing symbol logically equivalent to n
+
+            if sym._write_to_conf:
+                if sym._old_val is None and \
+                   sym.orig_type in _BOOL_TRISTATE and \
+                   val == "n":
+                    # No old value (the symbol was missing or n), new value n.
+                    # No change.
+                    continue
+
+                if val == sym._old_val:
+                    # New value matches old. No change.
+                    continue
+
+            elif sym._old_val is None:
+                # The symbol wouldn't appear in autoconf.h (because
+                # _write_to_conf is false), and it wouldn't have appeared in
+                # autoconf.h previously either (because it didn't appear in
+                # auto.conf). No change.
+                continue
+
+            # 'sym' has a new value. Flag it.
+            _touch_dep_file(path, sym.name)
+
+        # Remember the current values as the "new old" values.
+        #
+        # This call could go anywhere after the call to _load_old_vals(), but
+        # putting it last means _sync_deps() can be safely rerun if it fails
+        # before this point.
+        self._write_old_vals(path)
+
+    def _load_old_vals(self, path):
+        # Loads old symbol values from auto.conf into a dedicated
+        # Symbol._old_val field. Mirrors load_config().
+        #
+        # The extra field could be avoided with some trickery involving dumping
+        # symbol values and restoring them later, but this is simpler and
+        # faster. The C tools also use a dedicated field for this purpose.
+
+        for sym in self.unique_defined_syms:
+            sym._old_val = None
+
+        try:
+            auto_conf = self._open(join(path, "auto.conf"), "r")
+        except EnvironmentError as e:
+            if e.errno == errno.ENOENT:
+                # No old values
+                return
+            raise
+
+        with auto_conf as f:
+            for line in f:
+                match = self._set_match(line)
+                if not match:
+                    # We only expect CONFIG_FOO=... (and possibly a header
+                    # comment) in auto.conf
+                    continue
+
+                name, val = match.groups()
+                if name in self.syms:
+                    sym = self.syms[name]
+
+                    if sym.orig_type is STRING:
+                        match = _conf_string_match(val)
+                        if not match:
+                            continue
+                        val = unescape(match.group(1))
+
+                    self.syms[name]._old_val = val
+                else:
+                    # Flag that the symbol no longer exists, in
+                    # case something still depends on it
+                    _touch_dep_file(path, name)
+
+    def _write_old_vals(self, path):
+        # Helper for writing auto.conf. Basically just a simplified
+        # write_config() that doesn't write any comments (including
+        # '# CONFIG_FOO is not set' comments). The format matches the C
+        # implementation, though the ordering is arbitrary there (depends on
+        # the hash table implementation).
+        #
+        # A separate helper function is neater than complicating write_config()
+        # by passing a flag to it, plus we only need to look at symbols here.
+
+        self._write_if_changed(
+            os.path.join(path, "auto.conf"),
+            self._old_vals_contents())
+
+    def _old_vals_contents(self):
+        # _write_old_vals() helper. Returns the contents to write as a string.
+
+        # Temporary list instead of generator makes this a bit faster
+        return "".join([
+            sym.config_string for sym in self.unique_defined_syms
+                if not (sym.orig_type in _BOOL_TRISTATE and not sym.tri_value)
+        ])
+
+    def node_iter(self, unique_syms=False):
+        """
+        Returns a generator for iterating through all MenuNode's in the Kconfig
+        tree. The iteration is done in Kconfig definition order (each node is
+        visited before its children, and the children of a node are visited
+        before the next node).
+
+        The Kconfig.top_node menu node is skipped. It contains an implicit menu
+        that holds the top-level items.
+
+        As an example, the following code will produce a list equal to
+        Kconfig.defined_syms:
+
+          defined_syms = [node.item for node in kconf.node_iter()
+                          if isinstance(node.item, Symbol)]
+
+        unique_syms (default: False):
+          If True, only the first MenuNode will be included for symbols defined
+          in multiple locations.
+
+          Using kconf.node_iter(True) in the example above would give a list
+          equal to unique_defined_syms.
+        """
+        if unique_syms:
+            for sym in self.unique_defined_syms:
+                sym._visited = False
+
+        node = self.top_node
+        while 1:
+            # Jump to the next node with an iterative tree walk
+            if node.list:
+                node = node.list
+            elif node.next:
+                node = node.next
+            else:
+                while node.parent:
+                    node = node.parent
+                    if node.next:
+                        node = node.next
+                        break
+                else:
+                    # No more nodes
+                    return
+
+            if unique_syms and node.item.__class__ is Symbol:
+                if node.item._visited:
+                    continue
+                node.item._visited = True
+
+            yield node
+
+    def eval_string(self, s):
+        """
+        Returns the tristate value of the expression 's', represented as 0, 1,
+        and 2 for n, m, and y, respectively. Raises KconfigError on syntax
+        errors. Warns if undefined symbols are referenced.
+
+        As an example, if FOO and BAR are tristate symbols at least one of
+        which has the value y, then eval_string("y && (FOO || BAR)") returns
+        2 (y).
+
+        To get the string value of non-bool/tristate symbols, use
+        Symbol.str_value. eval_string() always returns a tristate value, and
+        all non-bool/tristate symbols have the tristate value 0 (n).
+
+        The expression parsing is consistent with how parsing works for
+        conditional ('if ...') expressions in the configuration, and matches
+        the C implementation. m is rewritten to 'm && MODULES', so
+        eval_string("m") will return 0 (n) unless modules are enabled.
+        """
+        # The parser is optimized to be fast when parsing Kconfig files (where
+        # an expression can never appear at the beginning of a line). We have
+        # to monkey-patch things a bit here to reuse it.
+
+        self._filename = None
+
+        self._tokens = self._tokenize("if " + s)
+        # Strip "if " to avoid giving confusing error messages
+        self._line = s
+        self._tokens_i = 1  # Skip the 'if' token
+
+        return expr_value(self._expect_expr_and_eol())
+
+    def unset_values(self):
+        """
+        Removes any user values from all symbols, as if Kconfig.load_config()
+        or Symbol.set_value() had never been called.
+        """
+        self._warn_assign_no_prompt = False
+        try:
+            # set_value() already rejects undefined symbols, and they don't
+            # need to be invalidated (because their value never changes), so we
+            # can just iterate over defined symbols
+            for sym in self.unique_defined_syms:
+                sym.unset_value()
+
+            for choice in self.unique_choices:
+                choice.unset_value()
+        finally:
+            self._warn_assign_no_prompt = True
+
+    def enable_warnings(self):
+        """
+        Do 'Kconfig.warn = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn = True
+
+    def disable_warnings(self):
+        """
+        Do 'Kconfig.warn = False' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn = False
+
+    def enable_stderr_warnings(self):
+        """
+        Do 'Kconfig.warn_to_stderr = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_to_stderr = True
+
+    def disable_stderr_warnings(self):
+        """
+        Do 'Kconfig.warn_to_stderr = False' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_to_stderr = False
+
+    def enable_undef_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_undef = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_assign_undef = True
+
+    def disable_undef_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_undef = False' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_undef = False
+
+    def enable_override_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_override = True' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_override = True
+
+    def disable_override_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_override = False' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_override = False
+
+    def enable_redun_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_redun = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_assign_redun = True
+
+    def disable_redun_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_redun = False' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_redun = False
+
+    def __repr__(self):
+        """
+        Returns a string with information about the Kconfig object when it is
+        evaluated on e.g. the interactive Python prompt.
+        """
+        def status(flag):
+            return "enabled" if flag else "disabled"
+
+        return "<{}>".format(", ".join((
+            "configuration with {} symbols".format(len(self.syms)),
+            'main menu prompt "{}"'.format(self.mainmenu_text),
+            "srctree is current directory" if not self.srctree else
+                'srctree "{}"'.format(self.srctree),
+            'config symbol prefix "{}"'.format(self.config_prefix),
+            "warnings " + status(self.warn),
+            "printing of warnings to stderr " + status(self.warn_to_stderr),
+            "undef. symbol assignment warnings " +
+                status(self.warn_assign_undef),
+            "overriding symbol assignment warnings " +
+                status(self.warn_assign_override),
+            "redundant symbol assignment warnings " +
+                status(self.warn_assign_redun)
+        )))
+
+    #
+    # Private methods
+    #
+
+
+    #
+    # File reading
+    #
+
+    def _open_config(self, filename):
+        # Opens a .config file. First tries to open 'filename', then
+        # '$srctree/filename' if $srctree was set when the configuration was
+        # loaded.
+
+        try:
+            return self._open(filename, "r")
+        except EnvironmentError as e:
+            # This will try opening the same file twice if $srctree is unset,
+            # but it's not a big deal
+            try:
+                return self._open(join(self.srctree, filename), "r")
+            except EnvironmentError as e2:
+                # This is needed for Python 3, because e2 is deleted after
+                # the try block:
+                #
+                # https://docs.python.org/3/reference/compound_stmts.html#the-try-statement
+                e = e2
+
+            raise _KconfigIOError(
+                e, "Could not open '{}' ({}: {}). Check that the $srctree "
+                   "environment variable ({}) is set correctly."
+                   .format(filename, errno.errorcode[e.errno], e.strerror,
+                           "set to '{}'".format(self.srctree) if self.srctree
+                               else "unset or blank"))
+
+    def _enter_file(self, filename):
+        # Jumps to the beginning of a sourced Kconfig file, saving the previous
+        # position and file object.
+        #
+        # filename:
+        #   Absolute path to file
+
+        # Path relative to $srctree, stored in e.g. self._filename
+        # (which makes it indirectly show up in MenuNode.filename). Equals
+        # 'filename' for absolute paths passed to 'source'.
+        if filename.startswith(self._srctree_prefix):
+            # Relative path (or a redundant absolute path to within $srctree,
+            # but it's probably fine to reduce those too)
+            rel_filename = filename[len(self._srctree_prefix):]
+        else:
+            # Absolute path
+            rel_filename = filename
+
+        self.kconfig_filenames.append(rel_filename)
+
+        # The parent Kconfig files are represented as a list of
+        # (<include path>, <Python 'file' object for Kconfig file>) tuples.
+        #
+        # <include path> is immutable and holds a *tuple* of
+        # (<filename>, <linenr>) tuples, giving the locations of the 'source'
+        # statements in the parent Kconfig files. The current include path is
+        # also available in Kconfig._include_path.
+        #
+        # The point of this redundant setup is to allow Kconfig._include_path
+        # to be assigned directly to MenuNode.include_path without having to
+        # copy it, sharing it wherever possible.
+
+        # Save include path and 'file' object (via its 'readline' function)
+        # before entering the file
+        self._filestack.append((self._include_path, self._readline))
+
+        # _include_path is a tuple, so this rebinds the variable instead of
+        # doing in-place modification
+        self._include_path += ((self._filename, self._linenr),)
+
+        # Check for recursive 'source'
+        for name, _ in self._include_path:
+            if name == rel_filename:
+                raise KconfigError(
+                    "\n{}:{}: recursive 'source' of '{}' detected. Check that "
+                    "environment variables are set correctly.\n"
+                    "Include path:\n{}"
+                    .format(self._filename, self._linenr, rel_filename,
+                            "\n".join("{}:{}".format(name, linenr)
+                                      for name, linenr in self._include_path)))
+
+        try:
+            self._readline = self._open(filename, "r").readline
+        except EnvironmentError as e:
+            # We already know that the file exists
+            raise _KconfigIOError(
+                e, "{}:{}: Could not open '{}' (in '{}') ({}: {})"
+                   .format(self._filename, self._linenr, filename,
+                           self._line.strip(),
+                           errno.errorcode[e.errno], e.strerror))
+
+        self._filename = rel_filename
+        self._linenr = 0
+
+    def _leave_file(self):
+        # Returns from a Kconfig file to the file that sourced it. See
+        # _enter_file().
+
+        # Restore location from parent Kconfig file
+        self._filename, self._linenr = self._include_path[-1]
+        # Restore include path and 'file' object
+        self._readline.__self__.close()  # __self__ fetches the 'file' object
+        self._include_path, self._readline = self._filestack.pop()
+
+    def _next_line(self):
+        # Fetches and tokenizes the next line from the current Kconfig file.
+        # Returns False at EOF and True otherwise.
+
+        # We might already have tokens from parsing a line and discovering that
+        # it's part of a different construct
+        if self._reuse_tokens:
+            self._reuse_tokens = False
+            # self._tokens_i is known to be 1 here, because _parse_properties()
+            # leaves it like that when it can't recognize a line (or parses
+            # a help text)
+            return True
+
+        # readline() returns '' over and over at EOF, which we rely on for help
+        # texts at the end of files (see _line_after_help())
+        line = self._readline()
+        if not line:
+            return False
+        self._linenr += 1
+
+        # Handle line joining
+        while line.endswith("\\\n"):
+            line = line[:-2] + self._readline()
+            self._linenr += 1
+
+        self._tokens = self._tokenize(line)
+        # Initialize to 1 instead of 0 to factor out code from _parse_block()
+        # and _parse_properties(). They immediately fetch self._tokens[0].
+        self._tokens_i = 1
+
+        return True
+
+    def _line_after_help(self, line):
+        # Tokenizes a line after a help text. This case is special in that the
+        # line has already been fetched (to discover that it isn't part of the
+        # help text).
+        #
+        # An earlier version used a _saved_line variable instead that was
+        # checked in _next_line(). This special-casing gets rid of it and makes
+        # _reuse_tokens alone sufficient to handle unget.
+
+        # Handle line joining
+        while line.endswith("\\\n"):
+            line = line[:-2] + self._readline()
+            self._linenr += 1
+
+        self._tokens = self._tokenize(line)
+        self._reuse_tokens = True
+
+    def _write_if_changed(self, filename, contents):
+        # Writes 'contents' into 'filename', but only if it differs from the
+        # current contents of the file.
+        #
+        # Another variant would be write a temporary file on the same
+        # filesystem, compare the files, and rename() the temporary file if it
+        # differs, but it breaks stuff like write_config("/dev/null"), which is
+        # used out there to force evaluation-related warnings to be generated.
+        # This simple version is pretty failsafe and portable.
+
+        if not self._contents_eq(filename, contents):
+            with self._open(filename, "w") as f:
+                f.write(contents)
+
+    def _contents_eq(self, filename, contents):
+        # Returns True if the contents of 'filename' is 'contents' (a string),
+        # and False otherwise (including if 'filename' can't be opened/read)
+
+        try:
+            with self._open(filename, "r") as f:
+                # Robust re. things like encoding and line endings (mmap()
+                # trickery isn't)
+                return f.read(len(contents) + 1) == contents
+        except EnvironmentError:
+            # If the error here would prevent writing the file as well, we'll
+            # notice it later
+            return False
+
+    #
+    # Tokenization
+    #
+
+    def _lookup_sym(self, name):
+        # Fetches the symbol 'name' from the symbol table, creating and
+        # registering it if it does not exist. If '_parsing_kconfigs' is False,
+        # it means we're in eval_string(), and new symbols won't be registered.
+
+        if name in self.syms:
+            return self.syms[name]
+
+        sym = Symbol()
+        sym.kconfig = self
+        sym.name = name
+        sym.is_constant = False
+        sym.rev_dep = sym.weak_rev_dep = sym.direct_dep = self.n
+
+        if self._parsing_kconfigs:
+            self.syms[name] = sym
+        else:
+            self._warn("no symbol {} in configuration".format(name))
+
+        return sym
+
+    def _lookup_const_sym(self, name):
+        # Like _lookup_sym(), for constant (quoted) symbols
+
+        if name in self.const_syms:
+            return self.const_syms[name]
+
+        sym = Symbol()
+        sym.kconfig = self
+        sym.name = name
+        sym.is_constant = True
+        sym.rev_dep = sym.weak_rev_dep = sym.direct_dep = self.n
+
+        if self._parsing_kconfigs:
+            self.const_syms[name] = sym
+
+        return sym
+
+    def _tokenize(self, s):
+        # Parses 's', returning a None-terminated list of tokens. Registers any
+        # new symbols encountered with _lookup(_const)_sym().
+        #
+        # Tries to be reasonably speedy by processing chunks of text via
+        # regexes and string operations where possible. This is the biggest
+        # hotspot during parsing.
+        #
+        # It might be possible to rewrite this to 'yield' tokens instead,
+        # working across multiple lines. Lookback and compatibility with old
+        # janky versions of the C tools complicate things though.
+
+        self._line = s  # Used for error reporting
+
+        # Initial token on the line
+        match = _command_match(s)
+        if not match:
+            if s.isspace() or s.lstrip().startswith("#"):
+                return (None,)
+            self._parse_error("unknown token at start of line")
+
+        # Tricky implementation detail: While parsing a token, 'token' refers
+        # to the previous token. See _STRING_LEX for why this is needed.
+        token = _get_keyword(match.group(1))
+        if not token:
+            # Backwards compatibility with old versions of the C tools, which
+            # (accidentally) accepted stuff like "--help--" and "-help---".
+            # This was fixed in the C tools by commit c2264564 ("kconfig: warn
+            # of unhandled characters in Kconfig commands"), committed in July
+            # 2015, but it seems people still run Kconfiglib on older kernels.
+            if s.strip(" \t\n-") == "help":
+                return (_T_HELP, None)
+
+            # If the first token is not a keyword (and not a weird help token),
+            # we have a preprocessor variable assignment (or a bare macro on a
+            # line)
+            self._parse_assignment(s)
+            return (None,)
+
+        tokens = [token]
+        # The current index in the string being tokenized
+        i = match.end()
+
+        # Main tokenization loop (for tokens past the first one)
+        while i < len(s):
+            # Test for an identifier/keyword first. This is the most common
+            # case.
+            match = _id_keyword_match(s, i)
+            if match:
+                # We have an identifier or keyword
+
+                # Check what it is. lookup_sym() will take care of allocating
+                # new symbols for us the first time we see them. Note that
+                # 'token' still refers to the previous token.
+
+                name = match.group(1)
+                keyword = _get_keyword(name)
+                if keyword:
+                    # It's a keyword
+                    token = keyword
+                    # Jump past it
+                    i = match.end()
+
+                elif token not in _STRING_LEX:
+                    # It's a non-const symbol, except we translate n, m, and y
+                    # into the corresponding constant symbols, like the C
+                    # implementation
+
+                    if "$" in name:
+                        # Macro expansion within symbol name
+                        name, s, i = self._expand_name(s, i)
+                    else:
+                        i = match.end()
+
+                    token = self.const_syms[name] if name in STR_TO_TRI else \
+                        self._lookup_sym(name)
+
+                else:
+                    # It's a case of missing quotes. For example, the
+                    # following is accepted:
+                    #
+                    #   menu unquoted_title
+                    #
+                    #   config A
+                    #       tristate unquoted_prompt
+                    #
+                    #   endmenu
+                    #
+                    # Named choices ('choice FOO') also end up here.
+
+                    if token is not _T_CHOICE:
+                        self._warn("style: quotes recommended around '{}' in '{}'"
+                                   .format(name, self._line.strip()),
+                                   self._filename, self._linenr)
+
+                    token = name
+                    i = match.end()
+
+            else:
+                # Neither a keyword nor a non-const symbol
+
+                # We always strip whitespace after tokens, so it is safe to
+                # assume that s[i] is the start of a token here.
+                c = s[i]
+
+                if c in "\"'":
+                    if "$" not in s and "\\" not in s:
+                        # Fast path for lines without $ and \. Find the
+                        # matching quote.
+                        end_i = s.find(c, i + 1) + 1
+                        if not end_i:
+                            self._parse_error("unterminated string")
+                        val = s[i + 1:end_i - 1]
+                        i = end_i
+                    else:
+                        # Slow path
+                        s, end_i = self._expand_str(s, i)
+
+                        # os.path.expandvars() and the $UNAME_RELEASE replace()
+                        # is a backwards compatibility hack, which should be
+                        # reasonably safe as expandvars() leaves references to
+                        # undefined env. vars. as is.
+                        #
+                        # The preprocessor functionality changed how
+                        # environment variables are referenced, to $(FOO).
+                        val = expandvars(s[i + 1:end_i - 1]
+                                         .replace("$UNAME_RELEASE",
+                                                  _UNAME_RELEASE))
+
+                        i = end_i
+
+                    # This is the only place where we don't survive with a
+                    # single token of lookback: 'option env="FOO"' does not
+                    # refer to a constant symbol named "FOO".
+                    token = \
+                        val if token in _STRING_LEX or tokens[0] is _T_OPTION \
+                        else self._lookup_const_sym(val)
+
+                elif s.startswith("&&", i):
+                    token = _T_AND
+                    i += 2
+
+                elif s.startswith("||", i):
+                    token = _T_OR
+                    i += 2
+
+                elif c == "=":
+                    token = _T_EQUAL
+                    i += 1
+
+                elif s.startswith("!=", i):
+                    token = _T_UNEQUAL
+                    i += 2
+
+                elif c == "!":
+                    token = _T_NOT
+                    i += 1
+
+                elif c == "(":
+                    token = _T_OPEN_PAREN
+                    i += 1
+
+                elif c == ")":
+                    token = _T_CLOSE_PAREN
+                    i += 1
+
+                elif c == "#":
+                    break
+
+
+                # Very rare
+
+                elif s.startswith("<=", i):
+                    token = _T_LESS_EQUAL
+                    i += 2
+
+                elif c == "<":
+                    token = _T_LESS
+                    i += 1
+
+                elif s.startswith(">=", i):
+                    token = _T_GREATER_EQUAL
+                    i += 2
+
+                elif c == ">":
+                    token = _T_GREATER
+                    i += 1
+
+
+                else:
+                    self._parse_error("unknown tokens in line")
+
+
+                # Skip trailing whitespace
+                while i < len(s) and s[i].isspace():
+                    i += 1
+
+
+            # Add the token
+            tokens.append(token)
+
+        # None-terminating the token list makes token fetching simpler/faster
+        tokens.append(None)
+
+        return tokens
+
+    # Helpers for syntax checking and token fetching. See the
+    # 'Intro to expressions' section for what a constant symbol is.
+    #
+    # More of these could be added, but the single-use cases are inlined as an
+    # optimization.
+
+    def _expect_sym(self):
+        token = self._tokens[self._tokens_i]
+        self._tokens_i += 1
+
+        if token.__class__ is not Symbol:
+            self._parse_error("expected symbol")
+
+        return token
+
+    def _expect_nonconst_sym(self):
+        # Used for 'select' and 'imply' only. We know the token indices.
+
+        token = self._tokens[1]
+        self._tokens_i = 2
+
+        if token.__class__ is not Symbol or token.is_constant:
+            self._parse_error("expected nonconstant symbol")
+
+        return token
+
+    def _expect_str_and_eol(self):
+        token = self._tokens[self._tokens_i]
+        self._tokens_i += 1
+
+        if token.__class__ is not str:
+            self._parse_error("expected string")
+
+        if self._tokens[self._tokens_i] is not None:
+            self._trailing_tokens_error()
+
+        return token
+
+    def _expect_expr_and_eol(self):
+        expr = self._parse_expr(True)
+
+        if self._tokens[self._tokens_i] is not None:
+            self._trailing_tokens_error()
+
+        return expr
+
+    def _check_token(self, token):
+        # If the next token is 'token', removes it and returns True
+
+        if self._tokens[self._tokens_i] is token:
+            self._tokens_i += 1
+            return True
+        return False
+
+    #
+    # Preprocessor logic
+    #
+
+    def _parse_assignment(self, s):
+        # Parses a preprocessor variable assignment, registering the variable
+        # if it doesn't already exist. Also takes care of bare macros on lines
+        # (which are allowed, and can be useful for their side effects).
+
+        # Expand any macros in the left-hand side of the assignment (the
+        # variable name)
+        s = s.lstrip()
+        i = 0
+        while 1:
+            i = _assignment_lhs_fragment_match(s, i).end()
+            if s.startswith("$(", i):
+                s, i = self._expand_macro(s, i, ())
+            else:
+                break
+
+        if s.isspace():
+            # We also accept a bare macro on a line (e.g.
+            # $(warning-if,$(foo),ops)), provided it expands to a blank string
+            return
+
+        # Assigned variable
+        name = s[:i]
+
+
+        # Extract assignment operator (=, :=, or +=) and value
+        rhs_match = _assignment_rhs_match(s, i)
+        if not rhs_match:
+            self._parse_error("syntax error")
+
+        op, val = rhs_match.groups()
+
+
+        if name in self.variables:
+            # Already seen variable
+            var = self.variables[name]
+        else:
+            # New variable
+            var = Variable()
+            var.kconfig = self
+            var.name = name
+            var._n_expansions = 0
+            self.variables[name] = var
+
+            # += acts like = on undefined variables (defines a recursive
+            # variable)
+            if op == "+=":
+                op = "="
+
+        if op == "=":
+            var.is_recursive = True
+            var.value = val
+        elif op == ":=":
+            var.is_recursive = False
+            var.value = self._expand_whole(val, ())
+        else:  # op == "+="
+            # += does immediate expansion if the variable was last set
+            # with :=
+            var.value += " " + (val if var.is_recursive else
+                                self._expand_whole(val, ()))
+
+    def _expand_whole(self, s, args):
+        # Expands preprocessor macros in all of 's'. Used whenever we don't
+        # have to worry about delimiters. See _expand_macro() re. the 'args'
+        # parameter.
+        #
+        # Returns the expanded string.
+
+        i = 0
+        while 1:
+            i = s.find("$(", i)
+            if i == -1:
+                break
+            s, i = self._expand_macro(s, i, args)
+        return s
+
+    def _expand_name(self, s, i):
+        # Expands a symbol name starting at index 'i' in 's'.
+        #
+        # Returns the expanded name, the expanded 's' (including the part
+        # before the name), and the index of the first character in the next
+        # token after the name.
+
+        s, end_i = self._expand_name_iter(s, i)
+        name = s[i:end_i]
+        # isspace() is False for empty strings
+        if not name.strip():
+            # Avoid creating a Kconfig symbol with a blank name. It's almost
+            # guaranteed to be an error.
+            self._parse_error("macro expanded to blank string")
+
+        # Skip trailing whitespace
+        while end_i < len(s) and s[end_i].isspace():
+            end_i += 1
+
+        return name, s, end_i
+
+    def _expand_name_iter(self, s, i):
+        # Expands a symbol name starting at index 'i' in 's'.
+        #
+        # Returns the expanded 's' (including the part before the name) and the
+        # index of the first character after the expanded name in 's'.
+
+        while 1:
+            match = _name_special_search(s, i)
+
+            if match.group() == "$(":
+                s, i = self._expand_macro(s, match.start(), ())
+            else:
+                return (s, match.start())
+
+    def _expand_str(self, s, i):
+        # Expands a quoted string starting at index 'i' in 's'. Handles both
+        # backslash escapes and macro expansion.
+        #
+        # Returns the expanded 's' (including the part before the string) and
+        # the index of the first character after the expanded string in 's'.
+
+        quote = s[i]
+        i += 1  # Skip over initial "/'
+        while 1:
+            match = _string_special_search(s, i)
+            if not match:
+                self._parse_error("unterminated string")
+
+
+            if match.group() == quote:
+                # Found the end of the string
+                return (s, match.end())
+
+            elif match.group() == "\\":
+                # Replace '\x' with 'x'. 'i' ends up pointing to the character
+                # after 'x', which allows macros to be canceled with '\$(foo)'.
+                i = match.end()
+                s = s[:match.start()] + s[i:]
+
+            elif match.group() == "$(":
+                # A macro call within the string
+                s, i = self._expand_macro(s, match.start(), ())
+
+            else:
+                # A ' quote within " quotes or vice versa
+                i += 1
+
+    def _expand_macro(self, s, i, args):
+        # Expands a macro starting at index 'i' in 's'. If this macro resulted
+        # from the expansion of another macro, 'args' holds the arguments
+        # passed to that macro.
+        #
+        # Returns the expanded 's' (including the part before the macro) and
+        # the index of the first character after the expanded macro in 's'.
+
+        start = i
+        i += 2  # Skip over "$("
+
+        # Start of current macro argument
+        arg_start = i
+
+        # Arguments of this macro call
+        new_args = []
+
+        while 1:
+            match = _macro_special_search(s, i)
+            if not match:
+                self._parse_error("missing end parenthesis in macro expansion")
+
+
+            if match.group() == ")":
+                # Found the end of the macro
+
+                new_args.append(s[arg_start:match.start()])
+
+                prefix = s[:start]
+
+                # $(1) is replaced by the first argument to the function, etc.,
+                # provided at least that many arguments were passed
+
+                try:
+                    # Does the macro look like an integer, with a corresponding
+                    # argument? If so, expand it to the value of the argument.
+                    prefix += args[int(new_args[0])]
+                except (ValueError, IndexError):
+                    # Regular variables are just functions without arguments,
+                    # and also go through the function value path
+                    prefix += self._fn_val(new_args)
+
+                return (prefix + s[match.end():],
+                        len(prefix))
+
+            elif match.group() == ",":
+                # Found the end of a macro argument
+                new_args.append(s[arg_start:match.start()])
+                arg_start = i = match.end()
+
+            else:  # match.group() == "$("
+                # A nested macro call within the macro
+                s, i = self._expand_macro(s, match.start(), args)
+
+    def _fn_val(self, args):
+        # Returns the result of calling the function args[0] with the arguments
+        # args[1..len(args)-1]. Plain variables are treated as functions
+        # without arguments.
+
+        fn = args[0]
+
+        if fn in self.variables:
+            var = self.variables[fn]
+
+            if len(args) == 1:
+                # Plain variable
+                if var._n_expansions:
+                    self._parse_error("Preprocessor variable {} recursively "
+                                      "references itself".format(var.name))
+            elif var._n_expansions > 100:
+                # Allow functions to call themselves, but guess that functions
+                # that are overly recursive are stuck
+                self._parse_error("Preprocessor function {} seems stuck "
+                                  "in infinite recursion".format(var.name))
+
+            var._n_expansions += 1
+            res = self._expand_whole(self.variables[fn].value, args)
+            var._n_expansions -= 1
+            return res
+
+        if fn in self._functions:
+            # Built-in or user-defined function
+
+            py_fn, min_arg, max_arg = self._functions[fn]
+
+            if len(args) - 1 < min_arg or \
+               (max_arg is not None and len(args) - 1 > max_arg):
+
+                if min_arg == max_arg:
+                    expected_args = min_arg
+                elif max_arg is None:
+                    expected_args = "{} or more".format(min_arg)
+                else:
+                    expected_args = "{}-{}".format(min_arg, max_arg)
+
+                raise KconfigError("{}:{}: bad number of arguments in call "
+                                   "to {}, expected {}, got {}"
+                                   .format(self._filename, self._linenr, fn,
+                                           expected_args, len(args) - 1))
+
+            return py_fn(self, *args)
+
+        # Environment variables are tried last
+        if fn in os.environ:
+            self.env_vars.add(fn)
+            return os.environ[fn]
+
+        return ""
+
+    #
+    # Parsing
+    #
+
+    def _make_and(self, e1, e2):
+        # Constructs an AND (&&) expression. Performs trivial simplification.
+
+        if e1 is self.y:
+            return e2
+
+        if e2 is self.y:
+            return e1
+
+        if e1 is self.n or e2 is self.n:
+            return self.n
+
+        return (AND, e1, e2)
+
+    def _make_or(self, e1, e2):
+        # Constructs an OR (||) expression. Performs trivial simplification.
+
+        if e1 is self.n:
+            return e2
+
+        if e2 is self.n:
+            return e1
+
+        if e1 is self.y or e2 is self.y:
+            return self.y
+
+        return (OR, e1, e2)
+
+    def _parse_block(self, end_token, parent, prev):
+        # Parses a block, which is the contents of either a file or an if,
+        # menu, or choice statement.
+        #
+        # end_token:
+        #   The token that ends the block, e.g. _T_ENDIF ("endif") for ifs.
+        #   None for files.
+        #
+        # parent:
+        #   The parent menu node, corresponding to a menu, Choice, or 'if'.
+        #   'if's are flattened after parsing.
+        #
+        # prev:
+        #   The previous menu node. New nodes will be added after this one (by
+        #   modifying their 'next' pointer).
+        #
+        #   'prev' is reused to parse a list of child menu nodes (for a menu or
+        #   Choice): After parsing the children, the 'next' pointer is assigned
+        #   to the 'list' pointer to "tilt up" the children above the node.
+        #
+        # Returns the final menu node in the block (or 'prev' if the block is
+        # empty). This allows chaining.
+
+        while self._next_line():
+            t0 = self._tokens[0]
+
+            if t0 is _T_CONFIG or t0 is _T_MENUCONFIG:
+                # The tokenizer allocates Symbol objects for us
+                sym = self._tokens[1]
+
+                if sym.__class__ is not Symbol or sym.is_constant:
+                    self._parse_error("missing or bad symbol name")
+
+                if self._tokens[2] is not None:
+                    self._trailing_tokens_error()
+
+                self.defined_syms.append(sym)
+
+                node = MenuNode()
+                node.kconfig = self
+                node.item = sym
+                node.is_menuconfig = (t0 is _T_MENUCONFIG)
+                node.prompt = node.help = node.list = None
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                sym.nodes.append(node)
+
+                self._parse_properties(node)
+
+                if node.is_menuconfig and not node.prompt:
+                    self._warn("the menuconfig symbol {} has no prompt"
+                               .format(_name_and_loc(sym)))
+
+                # Equivalent to
+                #
+                #   prev.next = node
+                #   prev = node
+                #
+                # due to tricky Python semantics. The order matters.
+                prev.next = prev = node
+
+            elif t0 is None:
+                # Blank line
+                continue
+
+            elif t0 in _SOURCE_TOKENS:
+                pattern = self._expect_str_and_eol()
+
+                if t0 in _REL_SOURCE_TOKENS:
+                    # Relative source
+                    pattern = join(dirname(self._filename), pattern)
+
+                # - glob() doesn't support globbing relative to a directory, so
+                #   we need to prepend $srctree to 'pattern'. Use join()
+                #   instead of '+' so that an absolute path in 'pattern' is
+                #   preserved.
+                #
+                # - Sort the glob results to ensure a consistent ordering of
+                #   Kconfig symbols, which indirectly ensures a consistent
+                #   ordering in e.g. .config files
+                filenames = sorted(iglob(join(self._srctree_prefix, pattern)))
+
+                if not filenames and t0 in _OBL_SOURCE_TOKENS:
+                    raise KconfigError(
+                        "{}:{}: '{}' not found (in '{}'). Check that "
+                        "environment variables are set correctly (e.g. "
+                        "$srctree, which is {}). Also note that unset "
+                        "environment variables expand to the empty string."
+                        .format(self._filename, self._linenr, pattern,
+                                self._line.strip(),
+                                "set to '{}'".format(self.srctree)
+                                    if self.srctree else "unset or blank"))
+
+                for filename in filenames:
+                    self._enter_file(filename)
+                    prev = self._parse_block(None, parent, prev)
+                    self._leave_file()
+
+            elif t0 is end_token:
+                # Reached the end of the block. Terminate the final node and
+                # return it.
+
+                if self._tokens[1] is not None:
+                    self._trailing_tokens_error()
+
+                prev.next = None
+                return prev
+
+            elif t0 is _T_IF:
+                node = MenuNode()
+                node.item = node.prompt = None
+                node.parent = parent
+                node.dep = self._expect_expr_and_eol()
+
+                self._parse_block(_T_ENDIF, node, node)
+                node.list = node.next
+
+                prev.next = prev = node
+
+            elif t0 is _T_MENU:
+                node = MenuNode()
+                node.kconfig = self
+                node.item = t0  # _T_MENU == MENU
+                node.is_menuconfig = True
+                node.prompt = (self._expect_str_and_eol(), self.y)
+                node.visibility = self.y
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                self.menus.append(node)
+
+                self._parse_properties(node)
+                self._parse_block(_T_ENDMENU, node, node)
+                node.list = node.next
+
+                prev.next = prev = node
+
+            elif t0 is _T_COMMENT:
+                node = MenuNode()
+                node.kconfig = self
+                node.item = t0  # _T_COMMENT == COMMENT
+                node.is_menuconfig = False
+                node.prompt = (self._expect_str_and_eol(), self.y)
+                node.list = None
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                self.comments.append(node)
+
+                self._parse_properties(node)
+
+                prev.next = prev = node
+
+            elif t0 is _T_CHOICE:
+                if self._tokens[1] is None:
+                    choice = Choice()
+                    choice.direct_dep = self.n
+                else:
+                    # Named choice
+                    name = self._expect_str_and_eol()
+                    choice = self.named_choices.get(name)
+                    if not choice:
+                        choice = Choice()
+                        choice.name = name
+                        choice.direct_dep = self.n
+                        self.named_choices[name] = choice
+
+                self.choices.append(choice)
+
+                node = MenuNode()
+                node.kconfig = choice.kconfig = self
+                node.item = choice
+                node.is_menuconfig = True
+                node.prompt = node.help = None
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                choice.nodes.append(node)
+
+                self._parse_properties(node)
+                self._parse_block(_T_ENDCHOICE, node, node)
+                node.list = node.next
+
+                prev.next = prev = node
+
+            elif t0 is _T_MAINMENU:
+                self.top_node.prompt = (self._expect_str_and_eol(), self.y)
+
+            else:
+                # A valid endchoice/endif/endmenu is caught by the 'end_token'
+                # check above
+                self._parse_error(
+                    "no corresponding 'choice'" if t0 is _T_ENDCHOICE else
+                    "no corresponding 'if'"     if t0 is _T_ENDIF else
+                    "no corresponding 'menu'"   if t0 is _T_ENDMENU else
+                    "unrecognized construct")
+
+        # End of file reached. Terminate the final node and return it.
+
+        if end_token:
+            raise KconfigError(
+                "expected '{}' at end of '{}'"
+                .format("endchoice" if end_token is _T_ENDCHOICE else
+                        "endif"     if end_token is _T_ENDIF else
+                        "endmenu",
+                        self._filename))
+
+        prev.next = None
+        return prev
+
+    def _parse_cond(self):
+        # Parses an optional 'if <expr>' construct and returns the parsed
+        # <expr>, or self.y if the next token is not _T_IF
+
+        expr = self._parse_expr(True) if self._check_token(_T_IF) else self.y
+
+        if self._tokens[self._tokens_i] is not None:
+            self._trailing_tokens_error()
+
+        return expr
+
+    def _parse_properties(self, node):
+        # Parses and adds properties to the MenuNode 'node' (type, 'prompt',
+        # 'default's, etc.) Properties are later copied up to symbols and
+        # choices in a separate pass after parsing, in e.g.
+        # _add_props_to_sym().
+        #
+        # An older version of this code added properties directly to symbols
+        # and choices instead of to their menu nodes (and handled dependency
+        # propagation simultaneously), but that loses information on where a
+        # property is added when a symbol or choice is defined in multiple
+        # locations. Some Kconfig configuration systems rely heavily on such
+        # symbols, and better docs can be generated by keeping track of where
+        # properties are added.
+        #
+        # node:
+        #   The menu node we're parsing properties on
+
+        # Dependencies from 'depends on'. Will get propagated to the properties
+        # below.
+        node.dep = self.y
+
+        while self._next_line():
+            t0 = self._tokens[0]
+
+            if t0 in _TYPE_TOKENS:
+                # Relies on '_T_BOOL is BOOL', etc., to save a conversion
+                self._set_type(node, t0)
+                if self._tokens[1] is not None:
+                    self._parse_prompt(node)
+
+            elif t0 is _T_DEPENDS:
+                if not self._check_token(_T_ON):
+                    self._parse_error("expected 'on' after 'depends'")
+
+                node.dep = self._make_and(node.dep,
+                                          self._expect_expr_and_eol())
+
+            elif t0 is _T_HELP:
+                self._parse_help(node)
+
+            elif t0 is _T_SELECT:
+                if node.item.__class__ is not Symbol:
+                    self._parse_error("only symbols can select")
+
+                node.selects.append((self._expect_nonconst_sym(),
+                                     self._parse_cond()))
+
+            elif t0 is None:
+                # Blank line
+                continue
+
+            elif t0 is _T_DEFAULT:
+                node.defaults.append((self._parse_expr(False),
+                                      self._parse_cond()))
+
+            elif t0 in _DEF_TOKEN_TO_TYPE:
+                self._set_type(node, _DEF_TOKEN_TO_TYPE[t0])
+                node.defaults.append((self._parse_expr(False),
+                                      self._parse_cond()))
+
+            elif t0 is _T_PROMPT:
+                self._parse_prompt(node)
+
+            elif t0 is _T_RANGE:
+                node.ranges.append((self._expect_sym(), self._expect_sym(),
+                                    self._parse_cond()))
+
+            elif t0 is _T_IMPLY:
+                if node.item.__class__ is not Symbol:
+                    self._parse_error("only symbols can imply")
+
+                node.implies.append((self._expect_nonconst_sym(),
+                                     self._parse_cond()))
+
+            elif t0 is _T_VISIBLE:
+                if not self._check_token(_T_IF):
+                    self._parse_error("expected 'if' after 'visible'")
+
+                node.visibility = self._make_and(node.visibility,
+                                                 self._expect_expr_and_eol())
+
+            elif t0 is _T_OPTION:
+                if self._check_token(_T_ENV):
+                    if not self._check_token(_T_EQUAL):
+                        self._parse_error("expected '=' after 'env'")
+
+                    env_var = self._expect_str_and_eol()
+                    node.item.env_var = env_var
+
+                    if env_var in os.environ:
+                        node.defaults.append(
+                            (self._lookup_const_sym(os.environ[env_var]),
+                             self.y))
+                    else:
+                        self._warn("{1} has 'option env=\"{0}\"', "
+                                   "but the environment variable {0} is not "
+                                   "set".format(node.item.name, env_var),
+                                   self._filename, self._linenr)
+
+                    if env_var != node.item.name:
+                        self._warn("Kconfiglib expands environment variables "
+                                   "in strings directly, meaning you do not "
+                                   "need 'option env=...' \"bounce\" symbols. "
+                                   "For compatibility with the C tools, "
+                                   "rename {} to {} (so that the symbol name "
+                                   "matches the environment variable name)."
+                                   .format(node.item.name, env_var),
+                                   self._filename, self._linenr)
+
+                elif self._check_token(_T_DEFCONFIG_LIST):
+                    if not self.defconfig_list:
+                        self.defconfig_list = node.item
+                    else:
+                        self._warn("'option defconfig_list' set on multiple "
+                                   "symbols ({0} and {1}). Only {0} will be "
+                                   "used.".format(self.defconfig_list.name,
+                                                  node.item.name),
+                                   self._filename, self._linenr)
+
+                elif self._check_token(_T_MODULES):
+                    # To reduce warning spam, only warn if 'option modules' is
+                    # set on some symbol that isn't MODULES, which should be
+                    # safe. I haven't run into any projects that make use
+                    # modules besides the kernel yet, and there it's likely to
+                    # keep being called "MODULES".
+                    if node.item is not self.modules:
+                        self._warn("the 'modules' option is not supported. "
+                                   "Let me know if this is a problem for you, "
+                                   "as it wouldn't be that hard to implement. "
+                                   "Note that modules are supported -- "
+                                   "Kconfiglib just assumes the symbol name "
+                                   "MODULES, like older versions of the C "
+                                   "implementation did when 'option modules' "
+                                   "wasn't used.",
+                                   self._filename, self._linenr)
+
+                elif self._check_token(_T_ALLNOCONFIG_Y):
+                    if node.item.__class__ is not Symbol:
+                        self._parse_error("the 'allnoconfig_y' option is only "
+                                          "valid for symbols")
+
+                    node.item.is_allnoconfig_y = True
+
+                else:
+                    self._parse_error("unrecognized option")
+
+            elif t0 is _T_OPTIONAL:
+                if node.item.__class__ is not Choice:
+                    self._parse_error('"optional" is only valid for choices')
+
+                node.item.is_optional = True
+
+            else:
+                # Reuse the tokens for the non-property line later
+                self._reuse_tokens = True
+                return
+
+    def _set_type(self, node, new_type):
+        # UNKNOWN is falsy
+        if node.item.orig_type and node.item.orig_type is not new_type:
+            self._warn("{} defined with multiple types, {} will be used"
+                       .format(_name_and_loc(node.item),
+                               TYPE_TO_STR[new_type]))
+
+        node.item.orig_type = new_type
+
+    def _parse_prompt(self, node):
+        # 'prompt' properties override each other within a single definition of
+        # a symbol, but additional prompts can be added by defining the symbol
+        # multiple times
+
+        if node.prompt:
+            self._warn(_name_and_loc(node.item) +
+                       " defined with multiple prompts in single location")
+
+        prompt = self._tokens[1]
+        self._tokens_i = 2
+
+        if prompt.__class__ is not str:
+            self._parse_error("expected prompt string")
+
+        if prompt != prompt.strip():
+            self._warn(_name_and_loc(node.item) +
+                       " has leading or trailing whitespace in its prompt")
+
+            # This avoid issues for e.g. reStructuredText documentation, where
+            # '*prompt *' is invalid
+            prompt = prompt.strip()
+
+        node.prompt = (prompt, self._parse_cond())
+
+    def _parse_help(self, node):
+        if node.help is not None:
+            self._warn(_name_and_loc(node.item) + " defined with more than "
+                       "one help text -- only the last one will be used")
+
+        # Micro-optimization. This code is pretty hot.
+        readline = self._readline
+
+        # Find first non-blank (not all-space) line and get its
+        # indentation
+
+        while 1:
+            line = readline()
+            self._linenr += 1
+            if not line:
+                self._empty_help(node, line)
+                return
+            if not line.isspace():
+                break
+
+        len_ = len  # Micro-optimization
+
+        # Use a separate 'expline' variable here and below to avoid stomping on
+        # any tabs people might've put deliberately into the first line after
+        # the help text
+        expline = line.expandtabs()
+        indent = len_(expline) - len_(expline.lstrip())
+        if not indent:
+            self._empty_help(node, line)
+            return
+
+        # The help text goes on till the first non-blank line with less indent
+        # than the first line
+
+        # Add the first line
+        lines = [expline[indent:]]
+        add_line = lines.append  # Micro-optimization
+
+        while 1:
+            line = readline()
+            if line.isspace():
+                # No need to preserve the exact whitespace in these
+                add_line("\n")
+            elif not line:
+                # End of file
+                break
+            else:
+                expline = line.expandtabs()
+                if len_(expline) - len_(expline.lstrip()) < indent:
+                    break
+                add_line(expline[indent:])
+
+        self._linenr += len_(lines)
+        node.help = "".join(lines).rstrip()
+        if line:
+            self._line_after_help(line)
+
+    def _empty_help(self, node, line):
+        self._warn(_name_and_loc(node.item) +
+                   " has 'help' but empty help text")
+        node.help = ""
+        if line:
+            self._line_after_help(line)
+
+    def _parse_expr(self, transform_m):
+        # Parses an expression from the tokens in Kconfig._tokens using a
+        # simple top-down approach. See the module docstring for the expression
+        # format.
+        #
+        # transform_m:
+        #   True if m should be rewritten to m && MODULES. See the
+        #   Kconfig.eval_string() documentation.
+
+        # Grammar:
+        #
+        #   expr:     and_expr ['||' expr]
+        #   and_expr: factor ['&&' and_expr]
+        #   factor:   <symbol> ['='/'!='/'<'/... <symbol>]
+        #             '!' factor
+        #             '(' expr ')'
+        #
+        # It helps to think of the 'expr: and_expr' case as a single-operand OR
+        # (no ||), and of the 'and_expr: factor' case as a single-operand AND
+        # (no &&). Parsing code is always a bit tricky.
+
+        # Mind dump: parse_factor() and two nested loops for OR and AND would
+        # work as well. The straightforward implementation there gives a
+        # (op, (op, (op, A, B), C), D) parse for A op B op C op D. Representing
+        # expressions as (op, [list of operands]) instead goes nicely with that
+        # version, but is wasteful for short expressions and complicates
+        # expression evaluation and other code that works on expressions (more
+        # complicated code likely offsets any performance gain from less
+        # recursion too). If we also try to optimize the list representation by
+        # merging lists when possible (e.g. when ANDing two AND expressions),
+        # we end up allocating a ton of lists instead of reusing expressions,
+        # which is bad.
+
+        and_expr = self._parse_and_expr(transform_m)
+
+        # Return 'and_expr' directly if we have a "single-operand" OR.
+        # Otherwise, parse the expression on the right and make an OR node.
+        # This turns A || B || C || D into (OR, A, (OR, B, (OR, C, D))).
+        return and_expr if not self._check_token(_T_OR) else \
+            (OR, and_expr, self._parse_expr(transform_m))
+
+    def _parse_and_expr(self, transform_m):
+        factor = self._parse_factor(transform_m)
+
+        # Return 'factor' directly if we have a "single-operand" AND.
+        # Otherwise, parse the right operand and make an AND node. This turns
+        # A && B && C && D into (AND, A, (AND, B, (AND, C, D))).
+        return factor if not self._check_token(_T_AND) else \
+            (AND, factor, self._parse_and_expr(transform_m))
+
+    def _parse_factor(self, transform_m):
+        token = self._tokens[self._tokens_i]
+        self._tokens_i += 1
+
+        if token.__class__ is Symbol:
+            # Plain symbol or relation
+
+            if self._tokens[self._tokens_i] not in _RELATIONS:
+                # Plain symbol
+
+                # For conditional expressions ('depends on <expr>',
+                # '... if <expr>', etc.), m is rewritten to m && MODULES.
+                if transform_m and token is self.m:
+                    return (AND, self.m, self.modules)
+
+                return token
+
+            # Relation
+            #
+            # _T_EQUAL, _T_UNEQUAL, etc., deliberately have the same values as
+            # EQUAL, UNEQUAL, etc., so we can just use the token directly
+            self._tokens_i += 1
+            return (self._tokens[self._tokens_i - 1], token,
+                    self._expect_sym())
+
+        if token is _T_NOT:
+            # token == _T_NOT == NOT
+            return (token, self._parse_factor(transform_m))
+
+        if token is _T_OPEN_PAREN:
+            expr_parse = self._parse_expr(transform_m)
+            if self._check_token(_T_CLOSE_PAREN):
+                return expr_parse
+
+        self._parse_error("malformed expression")
+
+    #
+    # Caching and invalidation
+    #
+
+    def _build_dep(self):
+        # Populates the Symbol/Choice._dependents sets, which contain all other
+        # items (symbols and choices) that immediately depend on the item in
+        # the sense that changing the value of the item might affect the value
+        # of the dependent items. This is used for caching/invalidation.
+        #
+        # The calculated sets might be larger than necessary as we don't do any
+        # complex analysis of the expressions.
+
+        make_depend_on = _make_depend_on  # Micro-optimization
+
+        # Only calculate _dependents for defined symbols. Constant and
+        # undefined symbols could theoretically be selected/implied, but it
+        # wouldn't change their value, so it's not a true dependency.
+        for sym in self.unique_defined_syms:
+            # Symbols depend on the following:
+
+            # The prompt conditions
+            for node in sym.nodes:
+                if node.prompt:
+                    make_depend_on(sym, node.prompt[1])
+
+            # The default values and their conditions
+            for value, cond in sym.defaults:
+                make_depend_on(sym, value)
+                make_depend_on(sym, cond)
+
+            # The reverse and weak reverse dependencies
+            make_depend_on(sym, sym.rev_dep)
+            make_depend_on(sym, sym.weak_rev_dep)
+
+            # The ranges along with their conditions
+            for low, high, cond in sym.ranges:
+                make_depend_on(sym, low)
+                make_depend_on(sym, high)
+                make_depend_on(sym, cond)
+
+            # The direct dependencies. This is usually redundant, as the direct
+            # dependencies get propagated to properties, but it's needed to get
+            # invalidation solid for 'imply', which only checks the direct
+            # dependencies (even if there are no properties to propagate it
+            # to).
+            make_depend_on(sym, sym.direct_dep)
+
+            # In addition to the above, choice symbols depend on the choice
+            # they're in, but that's handled automatically since the Choice is
+            # propagated to the conditions of the properties before
+            # _build_dep() runs.
+
+        for choice in self.unique_choices:
+            # Choices depend on the following:
+
+            # The prompt conditions
+            for node in choice.nodes:
+                if node.prompt:
+                    make_depend_on(choice, node.prompt[1])
+
+            # The default symbol conditions
+            for _, cond in choice.defaults:
+                make_depend_on(choice, cond)
+
+    def _add_choice_deps(self):
+        # Choices also depend on the choice symbols themselves, because the
+        # y-mode selection of the choice might change if a choice symbol's
+        # visibility changes.
+        #
+        # We add these dependencies separately after dependency loop detection.
+        # The invalidation algorithm can handle the resulting
+        # <choice symbol> <-> <choice> dependency loops, but they make loop
+        # detection awkward.
+
+        for choice in self.unique_choices:
+            for sym in choice.syms:
+                sym._dependents.add(choice)
+
+    def _invalidate_all(self):
+        # Undefined symbols never change value and don't need to be
+        # invalidated, so we can just iterate over defined symbols.
+        # Invalidating constant symbols would break things horribly.
+        for sym in self.unique_defined_syms:
+            sym._invalidate()
+
+        for choice in self.unique_choices:
+            choice._invalidate()
+
+    #
+    # Post-parsing menu tree processing, including dependency propagation and
+    # implicit submenu creation
+    #
+
+    def _finalize_node(self, node, visible_if):
+        # Finalizes a menu node and its children:
+        #
+        #  - Copies properties from menu nodes up to their contained
+        #    symbols/choices
+        #
+        #  - Propagates dependencies from parent to child nodes
+        #
+        #  - Creates implicit menus (see kconfig-language.txt)
+        #
+        #  - Removes 'if' nodes
+        #
+        #  - Sets 'choice' types and registers choice symbols
+        #
+        # menu_finalize() in the C implementation is similar.
+        #
+        # node:
+        #   The menu node to finalize. This node and its children will have
+        #   been finalized when the function returns, and any implicit menus
+        #   will have been created.
+        #
+        # visible_if:
+        #   Dependencies from 'visible if' on parent menus. These are added to
+        #   the prompts of symbols and choices.
+
+        if node.item.__class__ is Symbol:
+            # Copy defaults, ranges, selects, and implies to the Symbol
+            self._add_props_to_sym(node)
+
+            # Find any items that should go in an implicit menu rooted at the
+            # symbol
+            cur = node
+            while cur.next and _auto_menu_dep(node, cur.next):
+                # This makes implicit submenu creation work recursively, with
+                # implicit menus inside implicit menus
+                self._finalize_node(cur.next, visible_if)
+                cur = cur.next
+                cur.parent = node
+
+            if cur is not node:
+                # Found symbols that should go in an implicit submenu. Tilt
+                # them up above us.
+                node.list = node.next
+                node.next = cur.next
+                cur.next = None
+
+        elif node.list:
+            # The menu node is a choice, menu, or if. Finalize each child node.
+
+            if node.item is MENU:
+                visible_if = self._make_and(visible_if, node.visibility)
+
+            # Propagate the menu node's dependencies to each child menu node.
+            #
+            # This needs to go before the recursive _finalize_node() call so
+            # that implicit submenu creation can look ahead at dependencies.
+            self._propagate_deps(node, visible_if)
+
+            # Finalize the children
+            cur = node.list
+            while cur:
+                self._finalize_node(cur, visible_if)
+                cur = cur.next
+
+        if node.list:
+            # node's children have been individually finalized. Do final steps
+            # to finalize this "level" in the menu tree.
+            _flatten(node.list)
+            _remove_ifs(node)
+
+        # Empty choices (node.list None) are possible, so this needs to go
+        # outside
+        if node.item.__class__ is Choice:
+            # Add the node's non-node-specific properties to the choice, like
+            # _add_props_to_sym() does
+            choice = node.item
+            choice.direct_dep = self._make_or(choice.direct_dep, node.dep)
+            choice.defaults += node.defaults
+
+            _finalize_choice(node)
+
+    def _propagate_deps(self, node, visible_if):
+        # Propagates 'node's dependencies to its child menu nodes
+
+        # If the parent node holds a Choice, we use the Choice itself as the
+        # parent dependency. This makes sense as the value (mode) of the choice
+        # limits the visibility of the contained choice symbols. The C
+        # implementation works the same way.
+        #
+        # Due to the similar interface, Choice works as a drop-in replacement
+        # for Symbol here.
+        basedep = node.item if node.item.__class__ is Choice else node.dep
+
+        cur = node.list
+        while cur:
+            dep = cur.dep = self._make_and(cur.dep, basedep)
+
+            if cur.item.__class__ in _SYMBOL_CHOICE:
+                # Propagate 'visible if' and dependencies to the prompt
+                if cur.prompt:
+                    cur.prompt = (cur.prompt[0],
+                                  self._make_and(
+                                      cur.prompt[1],
+                                      self._make_and(visible_if, dep)))
+
+                # Propagate dependencies to defaults
+                if cur.defaults:
+                    cur.defaults = [(default, self._make_and(cond, dep))
+                                    for default, cond in cur.defaults]
+
+                # Propagate dependencies to ranges
+                if cur.ranges:
+                    cur.ranges = [(low, high, self._make_and(cond, dep))
+                                  for low, high, cond in cur.ranges]
+
+                # Propagate dependencies to selects
+                if cur.selects:
+                    cur.selects = [(target, self._make_and(cond, dep))
+                                   for target, cond in cur.selects]
+
+                # Propagate dependencies to implies
+                if cur.implies:
+                    cur.implies = [(target, self._make_and(cond, dep))
+                                   for target, cond in cur.implies]
+
+            elif cur.prompt:  # Not a symbol/choice
+                # Propagate dependencies to the prompt. 'visible if' is only
+                # propagated to symbols/choices.
+                cur.prompt = (cur.prompt[0],
+                              self._make_and(cur.prompt[1], dep))
+
+            cur = cur.next
+
+    def _add_props_to_sym(self, node):
+        # Copies properties from the menu node 'node' up to its contained
+        # symbol, and adds (weak) reverse dependencies to selected/implied
+        # symbols.
+        #
+        # This can't be rolled into _propagate_deps(), because that function
+        # traverses the menu tree roughly breadth-first, meaning properties on
+        # symbols defined in multiple locations could end up in the wrong
+        # order.
+
+        sym = node.item
+
+        # See the Symbol class docstring
+        sym.direct_dep = self._make_or(sym.direct_dep, node.dep)
+
+        sym.defaults += node.defaults
+        sym.ranges += node.ranges
+        sym.selects += node.selects
+        sym.implies += node.implies
+
+        # Modify the reverse dependencies of the selected symbol
+        for target, cond in node.selects:
+            target.rev_dep = self._make_or(
+                target.rev_dep,
+                self._make_and(sym, cond))
+
+        # Modify the weak reverse dependencies of the implied
+        # symbol
+        for target, cond in node.implies:
+            target.weak_rev_dep = self._make_or(
+                target.weak_rev_dep,
+                self._make_and(sym, cond))
+
+    #
+    # Misc.
+    #
+
+    def _check_sym_sanity(self):
+        # Checks various symbol properties that are handiest to check after
+        # parsing. Only generates errors and warnings.
+
+        def num_ok(sym, type_):
+            # Returns True if the (possibly constant) symbol 'sym' is valid as a value
+            # for a symbol of type type_ (INT or HEX)
+
+            # 'not sym.nodes' implies a constant or undefined symbol, e.g. a plain
+            # "123"
+            if not sym.nodes:
+                return _is_base_n(sym.name, _TYPE_TO_BASE[type_])
+
+            return sym.orig_type is type_
+
+        for sym in self.unique_defined_syms:
+            if sym.orig_type in _BOOL_TRISTATE:
+                # A helper function could be factored out here, but keep it
+                # speedy/straightforward
+
+                for target_sym, _ in sym.selects:
+                    if target_sym.orig_type not in _BOOL_TRISTATE_UNKNOWN:
+                        self._warn("{} selects the {} symbol {}, which is not "
+                                   "bool or tristate"
+                                   .format(_name_and_loc(sym),
+                                           TYPE_TO_STR[target_sym.orig_type],
+                                           _name_and_loc(target_sym)))
+
+                for target_sym, _ in sym.implies:
+                    if target_sym.orig_type not in _BOOL_TRISTATE_UNKNOWN:
+                        self._warn("{} implies the {} symbol {}, which is not "
+                                   "bool or tristate"
+                                   .format(_name_and_loc(sym),
+                                           TYPE_TO_STR[target_sym.orig_type],
+                                           _name_and_loc(target_sym)))
+
+            elif sym.orig_type:  # STRING/INT/HEX
+                for default, _ in sym.defaults:
+                    if default.__class__ is not Symbol:
+                        raise KconfigError(
+                            "the {} symbol {} has a malformed default {} -- expected "
+                            "a single symbol"
+                            .format(TYPE_TO_STR[sym.orig_type], _name_and_loc(sym),
+                                    expr_str(default)))
+
+                    if sym.orig_type is STRING:
+                        if not default.is_constant and not default.nodes and \
+                           not default.name.isupper():
+                            # 'default foo' on a string symbol could be either a symbol
+                            # reference or someone leaving out the quotes. Guess that
+                            # the quotes were left out if 'foo' isn't all-uppercase
+                            # (and no symbol named 'foo' exists).
+                            self._warn("style: quotes recommended around "
+                                       "default value for string symbol "
+                                       + _name_and_loc(sym))
+
+                    elif not num_ok(default, sym.orig_type):  # INT/HEX
+                        self._warn("the {0} symbol {1} has a non-{0} default {2}"
+                                   .format(TYPE_TO_STR[sym.orig_type],
+                                           _name_and_loc(sym),
+                                           _name_and_loc(default)))
+
+                if sym.selects or sym.implies:
+                    self._warn("the {} symbol {} has selects or implies"
+                               .format(TYPE_TO_STR[sym.orig_type],
+                                       _name_and_loc(sym)))
+
+            else:  # UNKNOWN
+                self._warn("{} defined without a type"
+                           .format(_name_and_loc(sym)))
+
+
+            if sym.ranges:
+                if sym.orig_type not in _INT_HEX:
+                    self._warn(
+                        "the {} symbol {} has ranges, but is not int or hex"
+                        .format(TYPE_TO_STR[sym.orig_type],
+                                _name_and_loc(sym)))
+                else:
+                    for low, high, _ in sym.ranges:
+                        if not num_ok(low, sym.orig_type) or \
+                           not num_ok(high, sym.orig_type):
+
+                            self._warn("the {0} symbol {1} has a non-{0} "
+                                       "range [{2}, {3}]"
+                                       .format(TYPE_TO_STR[sym.orig_type],
+                                               _name_and_loc(sym),
+                                               _name_and_loc(low),
+                                               _name_and_loc(high)))
+
+    def _check_choice_sanity(self):
+        # Checks various choice properties that are handiest to check after
+        # parsing. Only generates errors and warnings.
+
+        def warn_select_imply(sym, expr, expr_type):
+            msg = "the choice symbol {} is {} by the following symbols, but " \
+                  "select/imply has no effect on choice symbols" \
+                  .format(_name_and_loc(sym), expr_type)
+
+            # si = select/imply
+            for si in split_expr(expr, OR):
+                msg += "\n - " + _name_and_loc(split_expr(si, AND)[0])
+
+            self._warn(msg)
+
+        for choice in self.unique_choices:
+            if choice.orig_type not in _BOOL_TRISTATE:
+                self._warn("{} defined with type {}"
+                           .format(_name_and_loc(choice),
+                                   TYPE_TO_STR[choice.orig_type]))
+
+            for node in choice.nodes:
+                if node.prompt:
+                    break
+            else:
+                self._warn(_name_and_loc(choice) + " defined without a prompt")
+
+            for default, _ in choice.defaults:
+                if default.__class__ is not Symbol:
+                    raise KconfigError(
+                        "{} has a malformed default {}"
+                        .format(_name_and_loc(choice), expr_str(default)))
+
+                if default.choice is not choice:
+                    self._warn("the default selection {} of {} is not "
+                               "contained in the choice"
+                               .format(_name_and_loc(default),
+                                       _name_and_loc(choice)))
+
+            for sym in choice.syms:
+                if sym.defaults:
+                    self._warn("default on the choice symbol {} will have "
+                               "no effect, as defaults do not affect choice "
+                               "symbols".format(_name_and_loc(sym)))
+
+                if sym.rev_dep is not sym.kconfig.n:
+                    warn_select_imply(sym, sym.rev_dep, "selected")
+
+                if sym.weak_rev_dep is not sym.kconfig.n:
+                    warn_select_imply(sym, sym.weak_rev_dep, "implied")
+
+                for node in sym.nodes:
+                    if node.parent.item is choice:
+                        if not node.prompt:
+                            self._warn("the choice symbol {} has no prompt"
+                                       .format(_name_and_loc(sym)))
+
+                    elif node.prompt:
+                        self._warn("the choice symbol {} is defined with a "
+                                   "prompt outside the choice"
+                                   .format(_name_and_loc(sym)))
+
+    def _parse_error(self, msg):
+        raise KconfigError("{}couldn't parse '{}': {}".format(
+            "" if self._filename is None else
+                "{}:{}: ".format(self._filename, self._linenr),
+            self._line.strip(), msg))
+
+    def _trailing_tokens_error(self):
+        self._parse_error("extra tokens at end of line")
+
+    def _open(self, filename, mode):
+        # open() wrapper:
+        #
+        # - Enable universal newlines mode on Python 2 to ease
+        #   interoperability between Linux and Windows. It's already the
+        #   default on Python 3.
+        #
+        #   The "U" flag would currently work for both Python 2 and 3, but it's
+        #   deprecated on Python 3, so play it future-safe.
+        #
+        #   io.open() defaults to universal newlines on Python 2 (and is an
+        #   alias for open() on Python 3), but it returns 'unicode' strings and
+        #   slows things down:
+        #
+        #     Parsing x86 Kconfigs on Python 2
+        #
+        #     with open(..., "rU"):
+        #
+        #       real  0m0.930s
+        #       user  0m0.905s
+        #       sys   0m0.025s
+        #
+        #     with io.open():
+        #
+        #       real  0m1.069s
+        #       user  0m1.040s
+        #       sys   0m0.029s
+        #
+        #   There's no appreciable performance difference between "r" and
+        #   "rU" for parsing performance on Python 2.
+        #
+        # - For Python 3, force the encoding. Forcing the encoding on Python 2
+        #   turns strings into Unicode strings, which gets messy. Python 2
+        #   doesn't decode regular strings anyway.
+        return open(filename, "rU" if mode == "r" else mode) if _IS_PY2 else \
+               open(filename, mode, encoding=self._encoding)
+
+    def _check_undef_syms(self):
+        # Prints warnings for all references to undefined symbols within the
+        # Kconfig files
+
+        def is_num(s):
+            # Returns True if the string 's' looks like a number.
+            #
+            # Internally, all operands in Kconfig are symbols, only undefined symbols
+            # (which numbers usually are) get their name as their value.
+            #
+            # Only hex numbers that start with 0x/0X are classified as numbers.
+            # Otherwise, symbols whose names happen to contain only the letters A-F
+            # would trigger false positives.
+
+            try:
+                int(s)
+            except ValueError:
+                if not s.startswith(("0x", "0X")):
+                    return False
+
+                try:
+                    int(s, 16)
+                except ValueError:
+                    return False
+
+            return True
+
+        for sym in (self.syms.viewvalues if _IS_PY2 else self.syms.values)():
+            # - sym.nodes empty means the symbol is undefined (has no
+            #   definition locations)
+            #
+            # - Due to Kconfig internals, numbers show up as undefined Kconfig
+            #   symbols, but shouldn't be flagged
+            #
+            # - The MODULES symbol always exists
+            if not sym.nodes and not is_num(sym.name) and \
+               sym.name != "MODULES":
+
+                msg = "undefined symbol {}:".format(sym.name)
+                for node in self.node_iter():
+                    if sym in node.referenced:
+                        msg += "\n\n- Referenced at {}:{}:\n\n{}" \
+                               .format(node.filename, node.linenr, node)
+                self._warn(msg)
+
+    def _warn(self, msg, filename=None, linenr=None):
+        # For printing general warnings
+
+        if not self.warn:
+            return
+
+        msg = "warning: " + msg
+        if filename is not None:
+            msg = "{}:{}: {}".format(filename, linenr, msg)
+
+        self.warnings.append(msg)
+        if self.warn_to_stderr:
+            sys.stderr.write(msg + "\n")
+
+
+class Symbol(object):
+    """
+    Represents a configuration symbol:
+
+      (menu)config FOO
+          ...
+
+    The following attributes are available. They should be viewed as read-only,
+    and some are implemented through @property magic (but are still efficient
+    to access due to internal caching).
+
+    Note: Prompts, help texts, and locations are stored in the Symbol's
+    MenuNode(s) rather than in the Symbol itself. Check the MenuNode class and
+    the Symbol.nodes attribute. This organization matches the C tools.
+
+    name:
+      The name of the symbol, e.g. "FOO" for 'config FOO'.
+
+    type:
+      The type of the symbol. One of BOOL, TRISTATE, STRING, INT, HEX, UNKNOWN.
+      UNKNOWN is for undefined symbols, (non-special) constant symbols, and
+      symbols defined without a type.
+
+      When running without modules (MODULES having the value n), TRISTATE
+      symbols magically change type to BOOL. This also happens for symbols
+      within choices in "y" mode. This matches the C tools, and makes sense for
+      menuconfig-like functionality.
+
+    orig_type:
+      The type as given in the Kconfig file, without any magic applied. Used
+      when printing the symbol.
+
+    str_value:
+      The value of the symbol as a string. Gives the value for string/int/hex
+      symbols. For bool/tristate symbols, gives "n", "m", or "y".
+
+      This is the symbol value that's used in relational expressions
+      (A = B, A != B, etc.)
+
+      Gotcha: For int/hex symbols, the exact format of the value must often be
+      preserved (e.g., when writing a .config file), hence why you can't get it
+      directly as an int. Do int(int_sym.str_value) or
+      int(hex_sym.str_value, 16) to get the integer value.
+
+    tri_value:
+      The tristate value of the symbol as an integer. One of 0, 1, 2,
+      representing n, m, y. Always 0 (n) for non-bool/tristate symbols.
+
+      This is the symbol value that's used outside of relation expressions
+      (A, !A, A && B, A || B).
+
+    assignable:
+      A tuple containing the tristate user values that can currently be
+      assigned to the symbol (that would be respected), ordered from lowest (0,
+      representing n) to highest (2, representing y). This corresponds to the
+      selections available in the menuconfig interface. The set of assignable
+      values is calculated from the symbol's visibility and selects/implies.
+
+      Returns the empty set for non-bool/tristate symbols and for symbols with
+      visibility n. The other possible values are (0, 2), (0, 1, 2), (1, 2),
+      (1,), and (2,). A (1,) or (2,) result means the symbol is visible but
+      "locked" to m or y through a select, perhaps in combination with the
+      visibility. menuconfig represents this as -M- and -*-, respectively.
+
+      For string/hex/int symbols, check if Symbol.visibility is non-0 (non-n)
+      instead to determine if the value can be changed.
+
+      Some handy 'assignable' idioms:
+
+        # Is 'sym' an assignable (visible) bool/tristate symbol?
+        if sym.assignable:
+            # What's the highest value it can be assigned? [-1] in Python
+            # gives the last element.
+            sym_high = sym.assignable[-1]
+
+            # The lowest?
+            sym_low = sym.assignable[0]
+
+            # Can the symbol be set to at least m?
+            if sym.assignable[-1] >= 1:
+                ...
+
+        # Can the symbol be set to m?
+        if 1 in sym.assignable:
+            ...
+
+    visibility:
+      The visibility of the symbol. One of 0, 1, 2, representing n, m, y. See
+      the module documentation for an overview of symbol values and visibility.
+
+    user_value:
+      The user value of the symbol. None if no user value has been assigned
+      (via Kconfig.load_config() or Symbol.set_value()).
+
+      Holds 0, 1, or 2 for bool/tristate symbols, and a string for the other
+      symbol types.
+
+      WARNING: Do not assign directly to this. It will break things. Use
+      Symbol.set_value().
+
+    config_string:
+      The .config assignment string that would get written out for the symbol
+      by Kconfig.write_config(). Returns the empty string if no .config
+      assignment would get written out.
+
+      In general, visible symbols, symbols with (active) defaults, and selected
+      symbols get written out. This includes all non-n-valued bool/tristate
+      symbols, and all visible string/int/hex symbols.
+
+      Symbols with the (no longer needed) 'option env=...' option generate no
+      configuration output, and neither does the special
+      'option defconfig_list' symbol.
+
+      Tip: This field is useful when generating custom configuration output,
+      even for non-.config-like formats. To write just the symbols that would
+      get written out to .config files, do this:
+
+        if sym.config_string:
+            *Write symbol, e.g. by looking sym.str_value*
+
+      This is a superset of the symbols written out by write_autoconf().
+      That function skips all n-valued symbols.
+
+      There usually won't be any great harm in just writing all symbols either,
+      though you might get some special symbols and possibly some "redundant"
+      n-valued symbol entries in there.
+
+    nodes:
+      A list of MenuNodes for this symbol. Will contain a single MenuNode for
+      most symbols. Undefined and constant symbols have an empty nodes list.
+      Symbols defined in multiple locations get one node for each location.
+
+    choice:
+      Holds the parent Choice for choice symbols, and None for non-choice
+      symbols. Doubles as a flag for whether a symbol is a choice symbol.
+
+    defaults:
+      List of (default, cond) tuples for the symbol's 'default' properties. For
+      example, 'default A && B if C || D' is represented as
+      ((AND, A, B), (OR, C, D)). If no condition was given, 'cond' is
+      self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to
+      'default' conditions.
+
+    selects:
+      List of (symbol, cond) tuples for the symbol's 'select' properties. For
+      example, 'select A if B && C' is represented as (A, (AND, B, C)). If no
+      condition was given, 'cond' is self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to 'select'
+      conditions.
+
+    implies:
+      Like 'selects', for imply.
+
+    ranges:
+      List of (low, high, cond) tuples for the symbol's 'range' properties. For
+      example, 'range 1 2 if A' is represented as (1, 2, A). If there is no
+      condition, 'cond' is self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to 'range'
+      conditions.
+
+      Gotcha: 1 and 2 above will be represented as (undefined) Symbols rather
+      than plain integers. Undefined symbols get their name as their string
+      value, so this works out. The C tools work the same way.
+
+    orig_defaults:
+    orig_selects:
+    orig_implies:
+    orig_ranges:
+      See the corresponding attributes on the MenuNode class.
+
+    rev_dep:
+      Reverse dependency expression from other symbols selecting this symbol.
+      Multiple selections get ORed together. A condition on a select is ANDed
+      with the selecting symbol.
+
+      For example, if A has 'select FOO' and B has 'select FOO if C', then
+      FOO's rev_dep will be (OR, A, (AND, B, C)).
+
+    weak_rev_dep:
+      Like rev_dep, for imply.
+
+    direct_dep:
+      The direct ('depends on') dependencies for the symbol, or self.kconfig.y
+      if there are no direct dependencies.
+
+      This attribute includes any dependencies from surrounding menus and ifs.
+      Those get propagated to the direct dependencies, and the resulting direct
+      dependencies in turn get propagated to the conditions of all properties.
+
+      If the symbol is defined in multiple locations, the dependencies from the
+      different locations get ORed together.
+
+    referenced:
+      A set() with all symbols and choices referenced in the properties and
+      property conditions of the symbol.
+
+      Also includes dependencies from surrounding menus and ifs, because those
+      get propagated to the symbol (see the 'Intro to symbol values' section in
+      the module docstring).
+
+      Choices appear in the dependencies of choice symbols.
+
+      For the following definitions, only B and not C appears in A's
+      'referenced'. To get transitive references, you'll have to recursively
+      expand 'references' until no new items appear.
+
+        config A
+                bool
+                depends on B
+
+        config B
+                bool
+                depends on C
+
+        config C
+                bool
+
+      See the Symbol.direct_dep attribute if you're only interested in the
+      direct dependencies of the symbol (its 'depends on'). You can extract the
+      symbols in it with the global expr_items() function.
+
+    env_var:
+      If the Symbol has an 'option env="FOO"' option, this contains the name
+      ("FOO") of the environment variable. None for symbols without no
+      'option env'.
+
+      'option env="FOO"' acts like a 'default' property whose value is the
+      value of $FOO.
+
+      Symbols with 'option env' are never written out to .config files, even if
+      they are visible. env_var corresponds to a flag called SYMBOL_AUTO in the
+      C implementation.
+
+    is_allnoconfig_y:
+      True if the symbol has 'option allnoconfig_y' set on it. This has no
+      effect internally (except when printing symbols), but can be checked by
+      scripts.
+
+    is_constant:
+      True if the symbol is a constant (quoted) symbol.
+
+    kconfig:
+      The Kconfig instance this symbol is from.
+    """
+    __slots__ = (
+        "_cached_assignable",
+        "_cached_str_val",
+        "_cached_tri_val",
+        "_cached_vis",
+        "_dependents",
+        "_old_val",
+        "_visited",
+        "_was_set",
+        "_write_to_conf",
+        "choice",
+        "defaults",
+        "direct_dep",
+        "env_var",
+        "implies",
+        "is_allnoconfig_y",
+        "is_constant",
+        "kconfig",
+        "name",
+        "nodes",
+        "orig_type",
+        "ranges",
+        "rev_dep",
+        "selects",
+        "user_value",
+        "weak_rev_dep",
+    )
+
+    #
+    # Public interface
+    #
+
+    @property
+    def type(self):
+        """
+        See the class documentation.
+        """
+        if self.orig_type is TRISTATE and \
+           (self.choice and self.choice.tri_value == 2 or
+            not self.kconfig.modules.tri_value):
+
+            return BOOL
+
+        return self.orig_type
+
+    @property
+    def str_value(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_str_val is not None:
+            return self._cached_str_val
+
+        if self.orig_type in _BOOL_TRISTATE:
+            # Also calculates the visibility, so invalidation safe
+            self._cached_str_val = TRI_TO_STR[self.tri_value]
+            return self._cached_str_val
+
+        # As a quirk of Kconfig, undefined symbols get their name as their
+        # string value. This is why things like "FOO = bar" work for seeing if
+        # FOO has the value "bar".
+        if not self.orig_type:  # UNKNOWN
+            self._cached_str_val = self.name
+            return self.name
+
+        val = ""
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+
+        self._write_to_conf = (vis != 0)
+
+        if self.orig_type in _INT_HEX:
+            # The C implementation checks the user value against the range in a
+            # separate code path (post-processing after loading a .config).
+            # Checking all values here instead makes more sense for us. It
+            # requires that we check for a range first.
+
+            base = _TYPE_TO_BASE[self.orig_type]
+
+            # Check if a range is in effect
+            for low_expr, high_expr, cond in self.ranges:
+                if expr_value(cond):
+                    has_active_range = True
+
+                    # The zeros are from the C implementation running strtoll()
+                    # on empty strings
+                    low = int(low_expr.str_value, base) if \
+                      _is_base_n(low_expr.str_value, base) else 0
+                    high = int(high_expr.str_value, base) if \
+                      _is_base_n(high_expr.str_value, base) else 0
+
+                    break
+            else:
+                has_active_range = False
+
+            # Defaults are used if the symbol is invisible, lacks a user value,
+            # or has an out-of-range user value
+            use_defaults = True
+
+            if vis and self.user_value:
+                user_val = int(self.user_value, base)
+                if has_active_range and not low <= user_val <= high:
+                    num2str = str if base == 10 else hex
+                    self.kconfig._warn(
+                        "user value {} on the {} symbol {} ignored due to "
+                        "being outside the active range ([{}, {}]) -- falling "
+                        "back on defaults"
+                        .format(num2str(user_val), TYPE_TO_STR[self.orig_type],
+                                _name_and_loc(self),
+                                num2str(low), num2str(high)))
+                else:
+                    # If the user value is well-formed and satisfies range
+                    # contraints, it is stored in exactly the same form as
+                    # specified in the assignment (with or without "0x", etc.)
+                    val = self.user_value
+                    use_defaults = False
+
+            if use_defaults:
+                # No user value or invalid user value. Look at defaults.
+
+                # Used to implement the warning below
+                has_default = False
+
+                for sym, cond in self.defaults:
+                    if expr_value(cond):
+                        has_default = self._write_to_conf = True
+
+                        val = sym.str_value
+
+                        if _is_base_n(val, base):
+                            val_num = int(val, base)
+                        else:
+                            val_num = 0  # strtoll() on empty string
+
+                        break
+                else:
+                    val_num = 0  # strtoll() on empty string
+
+                # This clamping procedure runs even if there's no default
+                if has_active_range:
+                    clamp = None
+                    if val_num < low:
+                        clamp = low
+                    elif val_num > high:
+                        clamp = high
+
+                    if clamp is not None:
+                        # The value is rewritten to a standard form if it is
+                        # clamped
+                        val = str(clamp) \
+                              if self.orig_type is INT else \
+                              hex(clamp)
+
+                        if has_default:
+                            num2str = str if base == 10 else hex
+                            self.kconfig._warn(
+                                "default value {} on {} clamped to {} due to "
+                                "being outside the active range ([{}, {}])"
+                                .format(val_num, _name_and_loc(self),
+                                        num2str(clamp), num2str(low),
+                                        num2str(high)))
+
+        elif self.orig_type is STRING:
+            if vis and self.user_value is not None:
+                # If the symbol is visible and has a user value, use that
+                val = self.user_value
+            else:
+                # Otherwise, look at defaults
+                for sym, cond in self.defaults:
+                    if expr_value(cond):
+                        val = sym.str_value
+                        self._write_to_conf = True
+                        break
+
+        # env_var corresponds to SYMBOL_AUTO in the C implementation, and is
+        # also set on the defconfig_list symbol there. Test for the
+        # defconfig_list symbol explicitly instead here, to avoid a nonsensical
+        # env_var setting and the defconfig_list symbol being printed
+        # incorrectly. This code is pretty cold anyway.
+        if self.env_var is not None or self is self.kconfig.defconfig_list:
+            self._write_to_conf = False
+
+        self._cached_str_val = val
+        return val
+
+    @property
+    def tri_value(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_tri_val is not None:
+            return self._cached_tri_val
+
+        if self.orig_type not in _BOOL_TRISTATE:
+            if self.orig_type:  # != UNKNOWN
+                # Would take some work to give the location here
+                self.kconfig._warn(
+                    "The {} symbol {} is being evaluated in a logical context "
+                    "somewhere. It will always evaluate to n."
+                    .format(TYPE_TO_STR[self.orig_type], _name_and_loc(self)))
+
+            self._cached_tri_val = 0
+            return 0
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+        self._write_to_conf = (vis != 0)
+
+        val = 0
+
+        if not self.choice:
+            # Non-choice symbol
+
+            if vis and self.user_value is not None:
+                # If the symbol is visible and has a user value, use that
+                val = min(self.user_value, vis)
+
+            else:
+                # Otherwise, look at defaults and weak reverse dependencies
+                # (implies)
+
+                for default, cond in self.defaults:
+                    dep_val = expr_value(cond)
+                    if dep_val:
+                        val = min(expr_value(default), dep_val)
+                        if val:
+                            self._write_to_conf = True
+                        break
+
+                # Weak reverse dependencies are only considered if our
+                # direct dependencies are met
+                dep_val = expr_value(self.weak_rev_dep)
+                if dep_val and expr_value(self.direct_dep):
+                    val = max(dep_val, val)
+                    self._write_to_conf = True
+
+            # Reverse (select-related) dependencies take precedence
+            dep_val = expr_value(self.rev_dep)
+            if dep_val:
+                if expr_value(self.direct_dep) < dep_val:
+                    self._warn_select_unsatisfied_deps()
+
+                val = max(dep_val, val)
+                self._write_to_conf = True
+
+            # m is promoted to y for (1) bool symbols and (2) symbols with a
+            # weak_rev_dep (from imply) of y
+            if val == 1 and \
+               (self.type is BOOL or expr_value(self.weak_rev_dep) == 2):
+                val = 2
+
+        elif vis == 2:
+            # Visible choice symbol in y-mode choice. The choice mode limits
+            # the visibility of choice symbols, so it's sufficient to just
+            # check the visibility of the choice symbols themselves.
+            val = 2 if self.choice.selection is self else 0
+
+        elif vis and self.user_value:
+            # Visible choice symbol in m-mode choice, with set non-0 user value
+            val = 1
+
+        self._cached_tri_val = val
+        return val
+
+    @property
+    def assignable(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_assignable is None:
+            self._cached_assignable = self._assignable()
+        return self._cached_assignable
+
+    @property
+    def visibility(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_vis is None:
+            self._cached_vis = _visibility(self)
+        return self._cached_vis
+
+    @property
+    def config_string(self):
+        """
+        See the class documentation.
+        """
+        # _write_to_conf is determined when the value is calculated. This is a
+        # hidden function call due to property magic.
+        val = self.str_value
+        if not self._write_to_conf:
+            return ""
+
+        if self.orig_type in _BOOL_TRISTATE:
+            return "{}{}={}\n" \
+                   .format(self.kconfig.config_prefix, self.name, val) \
+                   if val != "n" else \
+                   "# {}{} is not set\n" \
+                   .format(self.kconfig.config_prefix, self.name)
+
+        if self.orig_type in _INT_HEX:
+            return "{}{}={}\n" \
+                   .format(self.kconfig.config_prefix, self.name, val)
+
+        # sym.orig_type is STRING
+        return '{}{}="{}"\n' \
+               .format(self.kconfig.config_prefix, self.name, escape(val))
+
+    def set_value(self, value):
+        """
+        Sets the user value of the symbol.
+
+        Equal in effect to assigning the value to the symbol within a .config
+        file. For bool and tristate symbols, use the 'assignable' attribute to
+        check which values can currently be assigned. Setting values outside
+        'assignable' will cause Symbol.user_value to differ from
+        Symbol.str/tri_value (be truncated down or up).
+
+        Setting a choice symbol to 2 (y) sets Choice.user_selection to the
+        choice symbol in addition to setting Symbol.user_value.
+        Choice.user_selection is considered when the choice is in y mode (the
+        "normal" mode).
+
+        Other symbols that depend (possibly indirectly) on this symbol are
+        automatically recalculated to reflect the assigned value.
+
+        value:
+          The user value to give to the symbol. For bool and tristate symbols,
+          n/m/y can be specified either as 0/1/2 (the usual format for tristate
+          values in Kconfiglib) or as one of the strings "n"/"m"/"y". For other
+          symbol types, pass a string.
+
+          Note that the value for an int/hex symbol is passed as a string, e.g.
+          "123" or "0x0123". The format of this string is preserved in the
+          output.
+
+          Values that are invalid for the type (such as "foo" or 1 (m) for a
+          BOOL or "0x123" for an INT) are ignored and won't be stored in
+          Symbol.user_value. Kconfiglib will print a warning by default for
+          invalid assignments, and set_value() will return False.
+
+        Returns True if the value is valid for the type of the symbol, and
+        False otherwise. This only looks at the form of the value. For BOOL and
+        TRISTATE symbols, check the Symbol.assignable attribute to see what
+        values are currently in range and would actually be reflected in the
+        value of the symbol. For other symbol types, check whether the
+        visibility is non-n.
+        """
+        if self.orig_type in _BOOL_TRISTATE and value in STR_TO_TRI:
+            value = STR_TO_TRI[value]
+
+        # If the new user value matches the old, nothing changes, and we can
+        # avoid invalidating cached values.
+        #
+        # This optimization is skipped for choice symbols: Setting a choice
+        # symbol's user value to y might change the state of the choice, so it
+        # wouldn't be safe (symbol user values always match the values set in a
+        # .config file or via set_value(), and are never implicitly updated).
+        if value == self.user_value and not self.choice:
+            self._was_set = True
+            return True
+
+        # Check if the value is valid for our type
+        if not (self.orig_type is BOOL     and value in (2, 0)     or
+                self.orig_type is TRISTATE and value in TRI_TO_STR or
+                value.__class__ is str and
+                (self.orig_type is STRING                        or
+                 self.orig_type is INT and _is_base_n(value, 10) or
+                 self.orig_type is HEX and _is_base_n(value, 16)
+                                       and int(value, 16) >= 0)):
+
+            # Display tristate values as n, m, y in the warning
+            self.kconfig._warn(
+                "the value {} is invalid for {}, which has type {} -- "
+                "assignment ignored"
+                .format(TRI_TO_STR[value] if value in TRI_TO_STR else
+                            "'{}'".format(value),
+                        _name_and_loc(self), TYPE_TO_STR[self.orig_type]))
+
+            return False
+
+        self.user_value = value
+        self._was_set = True
+
+        if self.choice and value == 2:
+            # Setting a choice symbol to y makes it the user selection of the
+            # choice. Like for symbol user values, the user selection is not
+            # guaranteed to match the actual selection of the choice, as
+            # dependencies come into play.
+            self.choice.user_selection = self
+            self.choice._was_set = True
+            self.choice._rec_invalidate()
+        else:
+            self._rec_invalidate_if_has_prompt()
+
+        return True
+
+    def unset_value(self):
+        """
+        Removes any user value from the symbol, as if the symbol had never
+        gotten a user value via Kconfig.load_config() or Symbol.set_value().
+        """
+        if self.user_value is not None:
+            self.user_value = None
+            self._rec_invalidate_if_has_prompt()
+
+    @property
+    def referenced(self):
+        """
+        See the class documentation.
+        """
+        return {item for node in self.nodes for item in node.referenced}
+
+    @property
+    def orig_defaults(self):
+        """
+        See the class documentation.
+        """
+        return [d for node in self.nodes for d in node.orig_defaults]
+
+    @property
+    def orig_selects(self):
+        """
+        See the class documentation.
+        """
+        return [s for node in self.nodes for s in node.orig_selects]
+
+    @property
+    def orig_implies(self):
+        """
+        See the class documentation.
+        """
+        return [i for node in self.nodes for i in node.orig_implies]
+
+    @property
+    def orig_ranges(self):
+        """
+        See the class documentation.
+        """
+        return [r for node in self.nodes for r in node.orig_ranges]
+
+    def __repr__(self):
+        """
+        Returns a string with information about the symbol (including its name,
+        value, visibility, and location(s)) when it is evaluated on e.g. the
+        interactive Python prompt.
+        """
+        fields = ["symbol " + self.name, TYPE_TO_STR[self.type]]
+        add = fields.append
+
+        for node in self.nodes:
+            if node.prompt:
+                add('"{}"'.format(node.prompt[0]))
+
+        # Only add quotes for non-bool/tristate symbols
+        add("value " + (self.str_value if self.orig_type in _BOOL_TRISTATE
+                        else '"{}"'.format(self.str_value)))
+
+        if not self.is_constant:
+            # These aren't helpful to show for constant symbols
+
+            if self.user_value is not None:
+                # Only add quotes for non-bool/tristate symbols
+                add("user value " + (TRI_TO_STR[self.user_value]
+                                     if self.orig_type in _BOOL_TRISTATE
+                                     else '"{}"'.format(self.user_value)))
+
+            add("visibility " + TRI_TO_STR[self.visibility])
+
+            if self.choice:
+                add("choice symbol")
+
+            if self.is_allnoconfig_y:
+                add("allnoconfig_y")
+
+            if self is self.kconfig.defconfig_list:
+                add("is the defconfig_list symbol")
+
+            if self.env_var is not None:
+                add("from environment variable " + self.env_var)
+
+            if self is self.kconfig.modules:
+                add("is the modules symbol")
+
+            add("direct deps " + TRI_TO_STR[expr_value(self.direct_dep)])
+
+        if self.nodes:
+            for node in self.nodes:
+                add("{}:{}".format(node.filename, node.linenr))
+        else:
+            add("constant" if self.is_constant else "undefined")
+
+        return "<{}>".format(", ".join(fields))
+
+    def __str__(self):
+        """
+        Returns a string representation of the symbol when it is printed.
+        Matches the Kconfig format, with any parent dependencies propagated to
+        the 'depends on' condition.
+
+        The string is constructed by joining the strings returned by
+        MenuNode.__str__() for each of the symbol's menu nodes, so symbols
+        defined in multiple locations will return a string with all
+        definitions.
+
+        The returned string does not end in a newline. An empty string is
+        returned for undefined and constant symbols.
+        """
+        return self.custom_str(standard_sc_expr_str)
+
+    def custom_str(self, sc_expr_str_fn):
+        """
+        Works like Symbol.__str__(), but allows a custom format to be used for
+        all symbol/choice references. See expr_str().
+        """
+        return "\n\n".join(node.custom_str(sc_expr_str_fn)
+                           for node in self.nodes)
+
+    #
+    # Private methods
+    #
+
+    def __init__(self):
+        """
+        Symbol constructor -- not intended to be called directly by Kconfiglib
+        clients.
+        """
+        # These attributes are always set on the instance from outside and
+        # don't need defaults:
+        #   kconfig
+        #   direct_dep
+        #   is_constant
+        #   name
+        #   rev_dep
+        #   weak_rev_dep
+
+        # - UNKNOWN == 0
+        # - _visited is used during tree iteration and dep. loop detection
+        self.orig_type = self._visited = 0
+
+        self.nodes = []
+
+        self.defaults = []
+        self.selects = []
+        self.implies = []
+        self.ranges = []
+
+        self.user_value = \
+        self.choice = \
+        self.env_var = \
+        self._cached_str_val = self._cached_tri_val = self._cached_vis = \
+        self._cached_assignable = None
+
+        # _write_to_conf is calculated along with the value. If True, the
+        # Symbol gets a .config entry.
+
+        self.is_allnoconfig_y = \
+        self._was_set = \
+        self._write_to_conf = False
+
+        # See Kconfig._build_dep()
+        self._dependents = set()
+
+    def _assignable(self):
+        # Worker function for the 'assignable' attribute
+
+        if self.orig_type not in _BOOL_TRISTATE:
+            return ()
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+        if not vis:
+            return ()
+
+        rev_dep_val = expr_value(self.rev_dep)
+
+        if vis == 2:
+            if self.choice:
+                return (2,)
+
+            if not rev_dep_val:
+                if self.type is BOOL or expr_value(self.weak_rev_dep) == 2:
+                    return (0, 2)
+                return (0, 1, 2)
+
+            if rev_dep_val == 2:
+                return (2,)
+
+            # rev_dep_val == 1
+
+            if self.type is BOOL or expr_value(self.weak_rev_dep) == 2:
+                return (2,)
+            return (1, 2)
+
+        # vis == 1
+
+        # Must be a tristate here, because bool m visibility gets promoted to y
+
+        if not rev_dep_val:
+            return (0, 1) if expr_value(self.weak_rev_dep) != 2 else (0, 2)
+
+        if rev_dep_val == 2:
+            return (2,)
+
+        # vis == rev_dep_val == 1
+
+        return (1,)
+
+    def _invalidate(self):
+        # Marks the symbol as needing to be recalculated
+
+        self._cached_str_val = self._cached_tri_val = self._cached_vis = \
+        self._cached_assignable = None
+
+    def _rec_invalidate(self):
+        # Invalidates the symbol and all items that (possibly) depend on it
+
+        if self is self.kconfig.modules:
+            # Invalidating MODULES has wide-ranging effects
+            self.kconfig._invalidate_all()
+        else:
+            self._invalidate()
+
+            for item in self._dependents:
+                # _cached_vis doubles as a flag that tells us whether 'item'
+                # has cached values, because it's calculated as a side effect
+                # of calculating all other (non-constant) cached values.
+                #
+                # If item._cached_vis is None, it means there can't be cached
+                # values on other items that depend on 'item', because if there
+                # were, some value on 'item' would have been calculated and
+                # item._cached_vis set as a side effect. It's therefore safe to
+                # stop the invalidation at symbols with _cached_vis None.
+                #
+                # This approach massively speeds up scripts that set a lot of
+                # values, vs simply invalidating all possibly dependent symbols
+                # (even when you already have a list of all the dependent
+                # symbols, because some symbols get huge dependency trees).
+                #
+                # This gracefully handles dependency loops too, which is nice
+                # for choices, where the choice depends on the choice symbols
+                # and vice versa.
+                if item._cached_vis is not None:
+                    item._rec_invalidate()
+
+    def _rec_invalidate_if_has_prompt(self):
+        # Invalidates the symbol and its dependent symbols, but only if the
+        # symbol has a prompt. User values never have an effect on promptless
+        # symbols, so we skip invalidation for them as an optimization.
+        #
+        # This also prevents constant (quoted) symbols from being invalidated
+        # if set_value() is called on them, which would make them lose their
+        # value and break things.
+        #
+        # Prints a warning if the symbol has no prompt. In some contexts (e.g.
+        # when loading a .config files) assignments to promptless symbols are
+        # normal and expected, so the warning can be disabled.
+
+        for node in self.nodes:
+            if node.prompt:
+                self._rec_invalidate()
+                return
+
+        if self.kconfig._warn_assign_no_prompt:
+            self.kconfig._warn(_name_and_loc(self) + " has no prompt, meaning "
+                               "user values have no effect on it")
+
+    def _str_default(self):
+        # write_min_config() helper function. Returns the value the symbol
+        # would get from defaults if it didn't have a user value. Uses exactly
+        # the same algorithm as the C implementation (though a bit cleaned up),
+        # for compatibility.
+
+        if self.orig_type in _BOOL_TRISTATE:
+            val = 0
+
+            # Defaults, selects, and implies do not affect choice symbols
+            if not self.choice:
+                for default, cond in self.defaults:
+                    cond_val = expr_value(cond)
+                    if cond_val:
+                        val = min(expr_value(default), cond_val)
+                        break
+
+                val = max(expr_value(self.rev_dep),
+                          expr_value(self.weak_rev_dep),
+                          val)
+
+                # Transpose mod to yes if type is bool (possibly due to modules
+                # being disabled)
+                if val == 1 and self.type is BOOL:
+                    val = 2
+
+            return TRI_TO_STR[val]
+
+        if self.orig_type:  # STRING/INT/HEX
+            for default, cond in self.defaults:
+                if expr_value(cond):
+                    return default.str_value
+
+        return ""
+
+    def _warn_select_unsatisfied_deps(self):
+        # Helper for printing an informative warning when a symbol with
+        # unsatisfied direct dependencies (dependencies from 'depends on', ifs,
+        # and menus) is selected by some other symbol. Also warn if a symbol
+        # whose direct dependencies evaluate to m is selected to y.
+
+        msg = "{} has direct dependencies {} with value {}, but is " \
+              "currently being {}-selected by the following symbols:" \
+              .format(_name_and_loc(self), expr_str(self.direct_dep),
+                      TRI_TO_STR[expr_value(self.direct_dep)],
+                      TRI_TO_STR[expr_value(self.rev_dep)])
+
+        # The reverse dependencies from each select are ORed together
+        for select in split_expr(self.rev_dep, OR):
+            if expr_value(select) <= expr_value(self.direct_dep):
+                # Only include selects that exceed the direct dependencies
+                continue
+
+            # - 'select A if B' turns into A && B
+            # - 'select A' just turns into A
+            #
+            # In both cases, we can split on AND and pick the first operand
+            selecting_sym = split_expr(select, AND)[0]
+
+            msg += "\n - {}, with value {}, direct dependencies {} " \
+                   "(value: {})" \
+                   .format(_name_and_loc(selecting_sym),
+                           selecting_sym.str_value,
+                           expr_str(selecting_sym.direct_dep),
+                           TRI_TO_STR[expr_value(selecting_sym.direct_dep)])
+
+            if select.__class__ is tuple:
+                msg += ", and select condition {} (value: {})" \
+                       .format(expr_str(select[2]),
+                               TRI_TO_STR[expr_value(select[2])])
+
+        self.kconfig._warn(msg)
+
+
+class Choice(object):
+    """
+    Represents a choice statement:
+
+      choice
+          ...
+      endchoice
+
+    The following attributes are available on Choice instances. They should be
+    treated as read-only, and some are implemented through @property magic (but
+    are still efficient to access due to internal caching).
+
+    Note: Prompts, help texts, and locations are stored in the Choice's
+    MenuNode(s) rather than in the Choice itself. Check the MenuNode class and
+    the Choice.nodes attribute. This organization matches the C tools.
+
+    name:
+      The name of the choice, e.g. "FOO" for 'choice FOO', or None if the
+      Choice has no name.
+
+    type:
+      The type of the choice. One of BOOL, TRISTATE, UNKNOWN. UNKNOWN is for
+      choices defined without a type where none of the contained symbols have a
+      type either (otherwise the choice inherits the type of the first symbol
+      defined with a type).
+
+      When running without modules (CONFIG_MODULES=n), TRISTATE choices
+      magically change type to BOOL. This matches the C tools, and makes sense
+      for menuconfig-like functionality.
+
+    orig_type:
+      The type as given in the Kconfig file, without any magic applied. Used
+      when printing the choice.
+
+    tri_value:
+      The tristate value (mode) of the choice. A choice can be in one of three
+      modes:
+
+        0 (n) - The choice is disabled and no symbols can be selected. For
+                visible choices, this mode is only possible for choices with
+                the 'optional' flag set (see kconfig-language.txt).
+
+        1 (m) - Any number of choice symbols can be set to m, the rest will
+                be n.
+
+        2 (y) - One symbol will be y, the rest n.
+
+      Only tristate choices can be in m mode. The visibility of the choice is
+      an upper bound on the mode, and the mode in turn is an upper bound on the
+      visibility of the choice symbols.
+
+      To change the mode, use Choice.set_value().
+
+      Implementation note:
+        The C tools internally represent choices as a type of symbol, with
+        special-casing in many code paths. This is why there is a lot of
+        similarity to Symbol. The value (mode) of a choice is really just a
+        normal symbol value, and an implicit reverse dependency forces its
+        lower bound to m for visible non-optional choices (the reverse
+        dependency is 'm && <visibility>').
+
+        Symbols within choices get the choice propagated as a dependency to
+        their properties. This turns the mode of the choice into an upper bound
+        on e.g. the visibility of choice symbols, and explains the gotcha
+        related to printing choice symbols mentioned in the module docstring.
+
+        Kconfiglib uses a separate Choice class only because it makes the code
+        and interface less confusing (especially in a user-facing interface).
+        Corresponding attributes have the same name in the Symbol and Choice
+        classes, for consistency and compatibility.
+
+    assignable:
+      See the symbol class documentation. Gives the assignable values (modes).
+
+    visibility:
+      See the Symbol class documentation. Acts on the value (mode).
+
+    selection:
+      The Symbol instance of the currently selected symbol. None if the Choice
+      is not in y mode or has no selected symbol (due to unsatisfied
+      dependencies on choice symbols).
+
+      WARNING: Do not assign directly to this. It will break things. Call
+      sym.set_value(2) on the choice symbol you want to select instead.
+
+    user_value:
+      The value (mode) selected by the user through Choice.set_value(). Either
+      0, 1, or 2, or None if the user hasn't selected a mode. See
+      Symbol.user_value.
+
+      WARNING: Do not assign directly to this. It will break things. Use
+      Choice.set_value() instead.
+
+    user_selection:
+      The symbol selected by the user (by setting it to y). Ignored if the
+      choice is not in y mode, but still remembered so that the choice "snaps
+      back" to the user selection if the mode is changed back to y. This might
+      differ from 'selection' due to unsatisfied dependencies.
+
+      WARNING: Do not assign directly to this. It will break things. Call
+      sym.set_value(2) on the choice symbol to be selected instead.
+
+    syms:
+      List of symbols contained in the choice.
+
+      Obscure gotcha: If a symbol depends on the previous symbol within a
+      choice so that an implicit menu is created, it won't be a choice symbol,
+      and won't be included in 'syms'.
+
+    nodes:
+      A list of MenuNodes for this choice. In practice, the list will probably
+      always contain a single MenuNode, but it is possible to give a choice a
+      name and define it in multiple locations.
+
+    defaults:
+      List of (symbol, cond) tuples for the choice's 'defaults' properties. For
+      example, 'default A if B && C' is represented as (A, (AND, B, C)). If
+      there is no condition, 'cond' is self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to
+      'default' conditions.
+
+    orig_defaults:
+      See the corresponding attribute on the MenuNode class.
+
+    direct_dep:
+      See Symbol.direct_dep.
+
+    referenced:
+      A set() with all symbols referenced in the properties and property
+      conditions of the choice.
+
+      Also includes dependencies from surrounding menus and ifs, because those
+      get propagated to the choice (see the 'Intro to symbol values' section in
+      the module docstring).
+
+    is_optional:
+      True if the choice has the 'optional' flag set on it and can be in
+      n mode.
+
+    kconfig:
+      The Kconfig instance this choice is from.
+    """
+    __slots__ = (
+        "_cached_assignable",
+        "_cached_selection",
+        "_cached_vis",
+        "_dependents",
+        "_visited",
+        "_was_set",
+        "defaults",
+        "direct_dep",
+        "is_constant",
+        "is_optional",
+        "kconfig",
+        "name",
+        "nodes",
+        "orig_type",
+        "syms",
+        "user_selection",
+        "user_value",
+    )
+
+    #
+    # Public interface
+    #
+
+    @property
+    def type(self):
+        """
+        Returns the type of the choice. See Symbol.type.
+        """
+        if self.orig_type is TRISTATE and not self.kconfig.modules.tri_value:
+            return BOOL
+        return self.orig_type
+
+    @property
+    def str_value(self):
+        """
+        See the class documentation.
+        """
+        return TRI_TO_STR[self.tri_value]
+
+    @property
+    def tri_value(self):
+        """
+        See the class documentation.
+        """
+        # This emulates a reverse dependency of 'm && visibility' for
+        # non-optional choices, which is how the C implementation does it
+
+        val = 0 if self.is_optional else 1
+
+        if self.user_value is not None:
+            val = max(val, self.user_value)
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        val = min(val, self.visibility)
+
+        # Promote m to y for boolean choices
+        return 2 if val == 1 and self.type is BOOL else val
+
+    @property
+    def assignable(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_assignable is None:
+            self._cached_assignable = self._assignable()
+        return self._cached_assignable
+
+    @property
+    def visibility(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_vis is None:
+            self._cached_vis = _visibility(self)
+        return self._cached_vis
+
+    @property
+    def selection(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_selection is _NO_CACHED_SELECTION:
+            self._cached_selection = self._selection()
+        return self._cached_selection
+
+    def set_value(self, value):
+        """
+        Sets the user value (mode) of the choice. Like for Symbol.set_value(),
+        the visibility might truncate the value. Choices without the 'optional'
+        attribute (is_optional) can never be in n mode, but 0/"n" is still
+        accepted since it's not a malformed value (though it will have no
+        effect).
+
+        Returns True if the value is valid for the type of the choice, and
+        False otherwise. This only looks at the form of the value. Check the
+        Choice.assignable attribute to see what values are currently in range
+        and would actually be reflected in the mode of the choice.
+        """
+        if value in STR_TO_TRI:
+            value = STR_TO_TRI[value]
+
+        if value == self.user_value:
+            # We know the value must be valid if it was successfully set
+            # previously
+            self._was_set = True
+            return True
+
+        if not (self.orig_type is BOOL     and value in (2, 0) or
+                self.orig_type is TRISTATE and value in TRI_TO_STR):
+
+            # Display tristate values as n, m, y in the warning
+            self.kconfig._warn(
+                "the value {} is invalid for {}, which has type {} -- "
+                "assignment ignored"
+                .format(TRI_TO_STR[value] if value in TRI_TO_STR else
+                            "'{}'".format(value),
+                        _name_and_loc(self), TYPE_TO_STR[self.orig_type]))
+
+            return False
+
+        self.user_value = value
+        self._was_set = True
+        self._rec_invalidate()
+
+        return True
+
+    def unset_value(self):
+        """
+        Resets the user value (mode) and user selection of the Choice, as if
+        the user had never touched the mode or any of the choice symbols.
+        """
+        if self.user_value is not None or self.user_selection:
+            self.user_value = self.user_selection = None
+            self._rec_invalidate()
+
+    @property
+    def referenced(self):
+        """
+        See the class documentation.
+        """
+        return {item for node in self.nodes for item in node.referenced}
+
+    @property
+    def orig_defaults(self):
+        """
+        See the class documentation.
+        """
+        return [d for node in self.nodes for d in node.orig_defaults]
+
+    def __repr__(self):
+        """
+        Returns a string with information about the choice when it is evaluated
+        on e.g. the interactive Python prompt.
+        """
+        fields = ["choice " + self.name if self.name else "choice",
+                  TYPE_TO_STR[self.type]]
+        add = fields.append
+
+        for node in self.nodes:
+            if node.prompt:
+                add('"{}"'.format(node.prompt[0]))
+
+        add("mode " + self.str_value)
+
+        if self.user_value is not None:
+            add('user mode {}'.format(TRI_TO_STR[self.user_value]))
+
+        if self.selection:
+            add("{} selected".format(self.selection.name))
+
+        if self.user_selection:
+            user_sel_str = "{} selected by user" \
+                           .format(self.user_selection.name)
+
+            if self.selection is not self.user_selection:
+                user_sel_str += " (overridden)"
+
+            add(user_sel_str)
+
+        add("visibility " + TRI_TO_STR[self.visibility])
+
+        if self.is_optional:
+            add("optional")
+
+        for node in self.nodes:
+            add("{}:{}".format(node.filename, node.linenr))
+
+        return "<{}>".format(", ".join(fields))
+
+    def __str__(self):
+        """
+        Returns a string representation of the choice when it is printed.
+        Matches the Kconfig format (though without the contained choice
+        symbols), with any parent dependencies propagated to the 'depends on'
+        condition.
+
+        The returned string does not end in a newline.
+
+        See Symbol.__str__() as well.
+        """
+        return self.custom_str(standard_sc_expr_str)
+
+    def custom_str(self, sc_expr_str_fn):
+        """
+        Works like Choice.__str__(), but allows a custom format to be used for
+        all symbol/choice references. See expr_str().
+        """
+        return "\n\n".join(node.custom_str(sc_expr_str_fn)
+                           for node in self.nodes)
+
+    #
+    # Private methods
+    #
+
+    def __init__(self):
+        """
+        Choice constructor -- not intended to be called directly by Kconfiglib
+        clients.
+        """
+        # These attributes are always set on the instance from outside and
+        # don't need defaults:
+        #   direct_dep
+        #   kconfig
+
+        # - UNKNOWN == 0
+        # - _visited is used during dep. loop detection
+        self.orig_type = self._visited = 0
+
+        self.nodes = []
+
+        self.syms = []
+        self.defaults = []
+
+        self.name = \
+        self.user_value = self.user_selection = \
+        self._cached_vis = self._cached_assignable = None
+
+        self._cached_selection = _NO_CACHED_SELECTION
+
+        # is_constant is checked by _make_depend_on(). Just set it to avoid
+        # having to special-case choices.
+        self.is_constant = self.is_optional = False
+
+        # See Kconfig._build_dep()
+        self._dependents = set()
+
+    def _assignable(self):
+        # Worker function for the 'assignable' attribute
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+
+        if not vis:
+            return ()
+
+        if vis == 2:
+            if not self.is_optional:
+                return (2,) if self.type is BOOL else (1, 2)
+            return (0, 2) if self.type is BOOL else (0, 1, 2)
+
+        # vis == 1
+
+        return (0, 1) if self.is_optional else (1,)
+
+    def _selection(self):
+        # Worker function for the 'selection' attribute
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        if self.tri_value != 2:
+            # Not in y mode, so no selection
+            return None
+
+        # Use the user selection if it's visible
+        if self.user_selection and self.user_selection.visibility:
+            return self.user_selection
+
+        # Otherwise, check if we have a default
+        return self._selection_from_defaults()
+
+    def _selection_from_defaults(self):
+        # Check if we have a default
+        for sym, cond in self.defaults:
+            # The default symbol must be visible too
+            if expr_value(cond) and sym.visibility:
+                return sym
+
+        # Otherwise, pick the first visible symbol, if any
+        for sym in self.syms:
+            if sym.visibility:
+                return sym
+
+        # Couldn't find a selection
+        return None
+
+    def _invalidate(self):
+        self._cached_vis = self._cached_assignable = None
+        self._cached_selection = _NO_CACHED_SELECTION
+
+    def _rec_invalidate(self):
+        # See Symbol._rec_invalidate()
+
+        self._invalidate()
+
+        for item in self._dependents:
+            if item._cached_vis is not None:
+                item._rec_invalidate()
+
+
+class MenuNode(object):
+    """
+    Represents a menu node in the configuration. This corresponds to an entry
+    in e.g. the 'make menuconfig' interface, though non-visible choices, menus,
+    and comments also get menu nodes. If a symbol or choice is defined in
+    multiple locations, it gets one menu node for each location.
+
+    The top-level menu node, corresponding to the implicit top-level menu, is
+    available in Kconfig.top_node.
+
+    The menu nodes for a Symbol or Choice can be found in the
+    Symbol/Choice.nodes attribute. Menus and comments are represented as plain
+    menu nodes, with their text stored in the prompt attribute (prompt[0]).
+    This mirrors the C implementation.
+
+    The following attributes are available on MenuNode instances. They should
+    be viewed as read-only.
+
+    item:
+      Either a Symbol, a Choice, or one of the constants MENU and COMMENT.
+      Menus and comments are represented as plain menu nodes. Ifs are collapsed
+      (matching the C implementation) and do not appear in the final menu tree.
+
+    next:
+      The following menu node. None if there is no following node.
+
+    list:
+      The first child menu node. None if there are no children.
+
+      Choices and menus naturally have children, but Symbols can also have
+      children because of menus created automatically from dependencies (see
+      kconfig-language.txt).
+
+    parent:
+      The parent menu node. None if there is no parent.
+
+    prompt:
+      A (string, cond) tuple with the prompt for the menu node and its
+      conditional expression (which is self.kconfig.y if there is no
+      condition). None if there is no prompt.
+
+      For symbols and choices, the prompt is stored in the MenuNode rather than
+      the Symbol or Choice instance. For menus and comments, the prompt holds
+      the text.
+
+    defaults:
+      The 'default' properties for this particular menu node. See
+      symbol.defaults.
+
+      When evaluating defaults, you should use Symbol/Choice.defaults instead,
+      as it include properties from all menu nodes (a symbol/choice can have
+      multiple definition locations/menu nodes). MenuNode.defaults is meant for
+      documentation generation.
+
+    selects:
+      Like MenuNode.defaults, for selects.
+
+    implies:
+      Like MenuNode.defaults, for implies.
+
+    ranges:
+      Like MenuNode.defaults, for ranges.
+
+    orig_prompt:
+    orig_defaults:
+    orig_selects:
+    orig_implies:
+    orig_ranges:
+      These work the like the corresponding attributes without orig_*, but omit
+      any dependencies propagated from 'depends on' and surrounding 'if's (the
+      direct dependencies, stored in MenuNode.dep).
+
+      One use for this is generating less cluttered documentation, by only
+      showing the direct dependencies in one place.
+
+    help:
+      The help text for the menu node for Symbols and Choices. None if there is
+      no help text. Always stored in the node rather than the Symbol or Choice.
+      It is possible to have a separate help text at each location if a symbol
+      is defined in multiple locations.
+
+      Trailing whitespace (including a final newline) is stripped from the help
+      text. This was not the case before Kconfiglib 10.21.0, where the format
+      was undocumented.
+
+    dep:
+      The direct ('depends on') dependencies for the menu node, or
+      self.kconfig.y if there are no direct dependencies.
+
+      This attribute includes any dependencies from surrounding menus and ifs.
+      Those get propagated to the direct dependencies, and the resulting direct
+      dependencies in turn get propagated to the conditions of all properties.
+
+      If a symbol or choice is defined in multiple locations, only the
+      properties defined at a particular location get the corresponding
+      MenuNode.dep dependencies propagated to them.
+
+    visibility:
+      The 'visible if' dependencies for the menu node (which must represent a
+      menu), or self.kconfig.y if there are no 'visible if' dependencies.
+      'visible if' dependencies are recursively propagated to the prompts of
+      symbols and choices within the menu.
+
+    referenced:
+      A set() with all symbols and choices referenced in the properties and
+      property conditions of the menu node.
+
+      Also includes dependencies inherited from surrounding menus and ifs.
+      Choices appear in the dependencies of choice symbols.
+
+    is_menuconfig:
+      Set to True if the children of the menu node should be displayed in a
+      separate menu. This is the case for the following items:
+
+        - Menus (node.item == MENU)
+
+        - Choices
+
+        - Symbols defined with the 'menuconfig' keyword. The children come from
+          implicitly created submenus, and should be displayed in a separate
+          menu rather than being indented.
+
+      'is_menuconfig' is just a hint on how to display the menu node. It's
+      ignored internally by Kconfiglib, except when printing symbols.
+
+    filename/linenr:
+      The location where the menu node appears. The filename is relative to
+      $srctree (or to the current directory if $srctree isn't set), except
+      absolute paths are used for paths outside $srctree.
+
+    include_path:
+      A tuple of (filename, linenr) tuples, giving the locations of the
+      'source' statements via which the Kconfig file containing this menu node
+      was included. The first element is the location of the 'source' statement
+      in the top-level Kconfig file passed to Kconfig.__init__(), etc.
+
+      Note that the Kconfig file of the menu node itself isn't included. Check
+      'filename' and 'linenr' for that.
+
+    kconfig:
+      The Kconfig instance the menu node is from.
+    """
+    __slots__ = (
+        "dep",
+        "filename",
+        "help",
+        "include_path",
+        "is_menuconfig",
+        "item",
+        "kconfig",
+        "linenr",
+        "list",
+        "next",
+        "parent",
+        "prompt",
+        "visibility",
+
+        # Properties
+        "defaults",
+        "selects",
+        "implies",
+        "ranges",
+    )
+
+    def __init__(self):
+        # Properties defined on this particular menu node. A local 'depends on'
+        # only applies to these, in case a symbol is defined in multiple
+        # locations.
+        self.defaults = []
+        self.selects = []
+        self.implies = []
+        self.ranges = []
+
+    @property
+    def orig_prompt(self):
+        """
+        See the class documentation.
+        """
+        if not self.prompt:
+            return None
+        return (self.prompt[0], self._strip_dep(self.prompt[1]))
+
+    @property
+    def orig_defaults(self):
+        """
+        See the class documentation.
+        """
+        return [(default, self._strip_dep(cond))
+                for default, cond in self.defaults]
+
+    @property
+    def orig_selects(self):
+        """
+        See the class documentation.
+        """
+        return [(select, self._strip_dep(cond))
+                for select, cond in self.selects]
+
+    @property
+    def orig_implies(self):
+        """
+        See the class documentation.
+        """
+        return [(imply, self._strip_dep(cond))
+                for imply, cond in self.implies]
+
+    @property
+    def orig_ranges(self):
+        """
+        See the class documentation.
+        """
+        return [(low, high, self._strip_dep(cond))
+                for low, high, cond in self.ranges]
+
+    @property
+    def referenced(self):
+        """
+        See the class documentation.
+        """
+        # self.dep is included to catch dependencies from a lone 'depends on'
+        # when there are no properties to propagate it to
+        res = expr_items(self.dep)
+
+        if self.prompt:
+            res |= expr_items(self.prompt[1])
+
+        if self.item is MENU:
+            res |= expr_items(self.visibility)
+
+        for value, cond in self.defaults:
+            res |= expr_items(value)
+            res |= expr_items(cond)
+
+        for value, cond in self.selects:
+            res.add(value)
+            res |= expr_items(cond)
+
+        for value, cond in self.implies:
+            res.add(value)
+            res |= expr_items(cond)
+
+        for low, high, cond in self.ranges:
+            res.add(low)
+            res.add(high)
+            res |= expr_items(cond)
+
+        return res
+
+    def __repr__(self):
+        """
+        Returns a string with information about the menu node when it is
+        evaluated on e.g. the interactive Python prompt.
+        """
+        fields = []
+        add = fields.append
+
+        if self.item.__class__ is Symbol:
+            add("menu node for symbol " + self.item.name)
+
+        elif self.item.__class__ is Choice:
+            s = "menu node for choice"
+            if self.item.name is not None:
+                s += " " + self.item.name
+            add(s)
+
+        elif self.item is MENU:
+            add("menu node for menu")
+
+        else:  # self.item is COMMENT
+            add("menu node for comment")
+
+        if self.prompt:
+            add('prompt "{}" (visibility {})'.format(
+                self.prompt[0], TRI_TO_STR[expr_value(self.prompt[1])]))
+
+        if self.item.__class__ is Symbol and self.is_menuconfig:
+            add("is menuconfig")
+
+        add("deps " + TRI_TO_STR[expr_value(self.dep)])
+
+        if self.item is MENU:
+            add("'visible if' deps " + TRI_TO_STR[expr_value(self.visibility)])
+
+        if self.item.__class__ in _SYMBOL_CHOICE and self.help is not None:
+            add("has help")
+
+        if self.list:
+            add("has child")
+
+        if self.next:
+            add("has next")
+
+        add("{}:{}".format(self.filename, self.linenr))
+
+        return "<{}>".format(", ".join(fields))
+
+    def __str__(self):
+        """
+        Returns a string representation of the menu node. Matches the Kconfig
+        format, with any parent dependencies propagated to the 'depends on'
+        condition.
+
+        The output could (almost) be fed back into a Kconfig parser to redefine
+        the object associated with the menu node. See the module documentation
+        for a gotcha related to choice symbols.
+
+        For symbols and choices with multiple menu nodes (multiple definition
+        locations), properties that aren't associated with a particular menu
+        node are shown on all menu nodes ('option env=...', 'optional' for
+        choices, etc.).
+
+        The returned string does not end in a newline.
+        """
+        return self.custom_str(standard_sc_expr_str)
+
+    def custom_str(self, sc_expr_str_fn):
+        """
+        Works like MenuNode.__str__(), but allows a custom format to be used
+        for all symbol/choice references. See expr_str().
+        """
+        return self._menu_comment_node_str(sc_expr_str_fn) \
+               if self.item in _MENU_COMMENT else \
+               self._sym_choice_node_str(sc_expr_str_fn)
+
+    def _menu_comment_node_str(self, sc_expr_str_fn):
+        s = '{} "{}"'.format("menu" if self.item is MENU else "comment",
+                             self.prompt[0])
+
+        if self.dep is not self.kconfig.y:
+            s += "\n\tdepends on {}".format(expr_str(self.dep, sc_expr_str_fn))
+
+        if self.item is MENU and self.visibility is not self.kconfig.y:
+            s += "\n\tvisible if {}".format(expr_str(self.visibility,
+                                                     sc_expr_str_fn))
+
+        return s
+
+    def _sym_choice_node_str(self, sc_expr_str_fn):
+        def indent_add(s):
+            lines.append("\t" + s)
+
+        def indent_add_cond(s, cond):
+            if cond is not self.kconfig.y:
+                s += " if " + expr_str(cond, sc_expr_str_fn)
+            indent_add(s)
+
+        sc = self.item
+
+        if sc.__class__ is Symbol:
+            lines = [("menuconfig " if self.is_menuconfig else "config ")
+                     + sc.name]
+        else:
+            lines = ["choice " + sc.name if sc.name else "choice"]
+
+        if sc.orig_type and not self.prompt:  # sc.orig_type != UNKNOWN
+            # If there's a prompt, we'll use the '<type> "prompt"' shorthand
+            # instead
+            indent_add(TYPE_TO_STR[sc.orig_type])
+
+        if self.prompt:
+            if sc.orig_type:
+                prefix = TYPE_TO_STR[sc.orig_type]
+            else:
+                # Symbol defined without a type (which generates a warning)
+                prefix = "prompt"
+
+            indent_add_cond(prefix + ' "{}"'.format(escape(self.prompt[0])),
+                            self.orig_prompt[1])
+
+        if sc.__class__ is Symbol:
+            if sc.is_allnoconfig_y:
+                indent_add("option allnoconfig_y")
+
+            if sc is sc.kconfig.defconfig_list:
+                indent_add("option defconfig_list")
+
+            if sc.env_var is not None:
+                indent_add('option env="{}"'.format(sc.env_var))
+
+            if sc is sc.kconfig.modules:
+                indent_add("option modules")
+
+            for low, high, cond in self.orig_ranges:
+                indent_add_cond(
+                    "range {} {}".format(sc_expr_str_fn(low),
+                                         sc_expr_str_fn(high)),
+                    cond)
+
+        for default, cond in self.orig_defaults:
+            indent_add_cond("default " + expr_str(default, sc_expr_str_fn),
+                            cond)
+
+        if sc.__class__ is Choice and sc.is_optional:
+            indent_add("optional")
+
+        if sc.__class__ is Symbol:
+            for select, cond in self.orig_selects:
+                indent_add_cond("select " + sc_expr_str_fn(select), cond)
+
+            for imply, cond in self.orig_implies:
+                indent_add_cond("imply " + sc_expr_str_fn(imply), cond)
+
+        if self.dep is not sc.kconfig.y:
+            indent_add("depends on " + expr_str(self.dep, sc_expr_str_fn))
+
+        if self.help is not None:
+            indent_add("help")
+            for line in self.help.splitlines():
+                indent_add("  " + line)
+
+        return "\n".join(lines)
+
+    def _strip_dep(self, expr):
+        # Helper function for removing MenuNode.dep from 'expr'. Uses two
+        # pieces of internal knowledge: (1) Expressions are reused rather than
+        # copied, and (2) the direct dependencies always appear at the end.
+
+        # ... if dep -> ... if y
+        if self.dep is expr:
+            return self.kconfig.y
+
+        # (AND, X, dep) -> X
+        if expr.__class__ is tuple and expr[0] is AND and expr[2] is self.dep:
+            return expr[1]
+
+        return expr
+
+
+class Variable(object):
+    """
+    Represents a preprocessor variable/function.
+
+    The following attributes are available:
+
+    name:
+      The name of the variable.
+
+    value:
+      The unexpanded value of the variable.
+
+    expanded_value:
+      The expanded value of the variable. For simple variables (those defined
+      with :=), this will equal 'value'. Accessing this property will raise a
+      KconfigError if the expansion seems to be stuck in a loop.
+
+      Accessing this field is the same as calling expanded_value_w_args() with
+      no arguments. I hadn't considered function arguments when adding it. It
+      is retained for backwards compatibility though.
+
+    is_recursive:
+      True if the variable is recursive (defined with =).
+    """
+    __slots__ = (
+        "_n_expansions",
+        "is_recursive",
+        "kconfig",
+        "name",
+        "value",
+    )
+
+    @property
+    def expanded_value(self):
+        """
+        See the class documentation.
+        """
+        return self.expanded_value_w_args()
+
+    def expanded_value_w_args(self, *args):
+        """
+        Returns the expanded value of the variable/function. Any arguments
+        passed will be substituted for $(1), $(2), etc.
+
+        Raises a KconfigError if the expansion seems to be stuck in a loop.
+        """
+        return self.kconfig._fn_val((self.name,) + args)
+
+    def __repr__(self):
+        return "<variable {}, {}, value '{}'>" \
+               .format(self.name,
+                       "recursive" if self.is_recursive else "immediate",
+                       self.value)
+
+
+class KconfigError(Exception):
+    """
+    Exception raised for Kconfig-related errors.
+
+    KconfigError and KconfigSyntaxError are the same class. The
+    KconfigSyntaxError alias is only maintained for backwards compatibility.
+    """
+
+KconfigSyntaxError = KconfigError  # Backwards compatibility
+
+
+class InternalError(Exception):
+    "Never raised. Kept around for backwards compatibility."
+
+
+# Workaround:
+#
+# If 'errno' and 'strerror' are set on IOError, then __str__() always returns
+# "[Errno <errno>] <strerror>", ignoring any custom message passed to the
+# constructor. By defining our own subclass, we can use a custom message while
+# also providing 'errno', 'strerror', and 'filename' to scripts.
+class _KconfigIOError(IOError):
+    def __init__(self, ioerror, msg):
+        self.msg = msg
+        super(_KconfigIOError, self).__init__(
+            ioerror.errno, ioerror.strerror, ioerror.filename)
+
+    def __str__(self):
+        return self.msg
+
+
+#
+# Public functions
+#
+
+
+def expr_value(expr):
+    """
+    Evaluates the expression 'expr' to a tristate value. Returns 0 (n), 1 (m),
+    or 2 (y).
+
+    'expr' must be an already-parsed expression from a Symbol, Choice, or
+    MenuNode property. To evaluate an expression represented as a string, use
+    Kconfig.eval_string().
+
+    Passing subexpressions of expressions to this function works as expected.
+    """
+    if expr.__class__ is not tuple:
+        return expr.tri_value
+
+    if expr[0] is AND:
+        v1 = expr_value(expr[1])
+        # Short-circuit the n case as an optimization (~5% faster
+        # allnoconfig.py and allyesconfig.py, as of writing)
+        return 0 if not v1 else min(v1, expr_value(expr[2]))
+
+    if expr[0] is OR:
+        v1 = expr_value(expr[1])
+        # Short-circuit the y case as an optimization
+        return 2 if v1 == 2 else max(v1, expr_value(expr[2]))
+
+    if expr[0] is NOT:
+        return 2 - expr_value(expr[1])
+
+    # Relation
+    #
+    # Implements <, <=, >, >= comparisons as well. These were added to
+    # kconfig in 31847b67 (kconfig: allow use of relations other than
+    # (in)equality).
+
+    rel, v1, v2 = expr
+
+    # If both operands are strings...
+    if v1.orig_type is STRING and v2.orig_type is STRING:
+        # ...then compare them lexicographically
+        comp = _strcmp(v1.str_value, v2.str_value)
+    else:
+        # Otherwise, try to compare them as numbers
+        try:
+            comp = _sym_to_num(v1) - _sym_to_num(v2)
+        except ValueError:
+            # Fall back on a lexicographic comparison if the operands don't
+            # parse as numbers
+            comp = _strcmp(v1.str_value, v2.str_value)
+
+    return 2*(comp == 0 if rel is EQUAL else
+              comp != 0 if rel is UNEQUAL else
+              comp <  0 if rel is LESS else
+              comp <= 0 if rel is LESS_EQUAL else
+              comp >  0 if rel is GREATER else
+              comp >= 0)
+
+
+def standard_sc_expr_str(sc):
+    """
+    Standard symbol/choice printing function. Uses plain Kconfig syntax, and
+    displays choices as <choice> (or <choice NAME>, for named choices).
+
+    See expr_str().
+    """
+    if sc.__class__ is Symbol:
+        if sc.is_constant and sc.name not in STR_TO_TRI:
+            return '"{}"'.format(escape(sc.name))
+        return sc.name
+
+    return "<choice {}>".format(sc.name) if sc.name else "<choice>"
+
+
+def expr_str(expr, sc_expr_str_fn=standard_sc_expr_str):
+    """
+    Returns the string representation of the expression 'expr', as in a Kconfig
+    file.
+
+    Passing subexpressions of expressions to this function works as expected.
+
+    sc_expr_str_fn (default: standard_sc_expr_str):
+      This function is called for every symbol/choice (hence "sc") appearing in
+      the expression, with the symbol/choice as the argument. It is expected to
+      return a string to be used for the symbol/choice.
+
+      This can be used e.g. to turn symbols/choices into links when generating
+      documentation, or for printing the value of each symbol/choice after it.
+
+      Note that quoted values are represented as constants symbols
+      (Symbol.is_constant == True).
+    """
+    if expr.__class__ is not tuple:
+        return sc_expr_str_fn(expr)
+
+    if expr[0] is AND:
+        return "{} && {}".format(_parenthesize(expr[1], OR, sc_expr_str_fn),
+                                 _parenthesize(expr[2], OR, sc_expr_str_fn))
+
+    if expr[0] is OR:
+        # This turns A && B || C && D into "(A && B) || (C && D)", which is
+        # redundant, but more readable
+        return "{} || {}".format(_parenthesize(expr[1], AND, sc_expr_str_fn),
+                                 _parenthesize(expr[2], AND, sc_expr_str_fn))
+
+    if expr[0] is NOT:
+        if expr[1].__class__ is tuple:
+            return "!({})".format(expr_str(expr[1], sc_expr_str_fn))
+        return "!" + sc_expr_str_fn(expr[1])  # Symbol
+
+    # Relation
+    #
+    # Relation operands are always symbols (quoted strings are constant
+    # symbols)
+    return "{} {} {}".format(sc_expr_str_fn(expr[1]), REL_TO_STR[expr[0]],
+                             sc_expr_str_fn(expr[2]))
+
+
+def expr_items(expr):
+    """
+    Returns a set() of all items (symbols and choices) that appear in the
+    expression 'expr'.
+
+    Passing subexpressions of expressions to this function works as expected.
+    """
+    res = set()
+
+    def rec(subexpr):
+        if subexpr.__class__ is tuple:
+            # AND, OR, NOT, or relation
+
+            rec(subexpr[1])
+
+            # NOTs only have a single operand
+            if subexpr[0] is not NOT:
+                rec(subexpr[2])
+
+        else:
+            # Symbol or choice
+            res.add(subexpr)
+
+    rec(expr)
+    return res
+
+
+def split_expr(expr, op):
+    """
+    Returns a list containing the top-level AND or OR operands in the
+    expression 'expr', in the same (left-to-right) order as they appear in
+    the expression.
+
+    This can be handy e.g. for splitting (weak) reverse dependencies
+    from 'select' and 'imply' into individual selects/implies.
+
+    op:
+      Either AND to get AND operands, or OR to get OR operands.
+
+      (Having this as an operand might be more future-safe than having two
+      hardcoded functions.)
+
+
+    Pseudo-code examples:
+
+      split_expr( A                    , OR  )  ->  [A]
+      split_expr( A && B               , OR  )  ->  [A && B]
+      split_expr( A || B               , OR  )  ->  [A, B]
+      split_expr( A || B               , AND )  ->  [A || B]
+      split_expr( A || B || (C && D)   , OR  )  ->  [A, B, C && D]
+
+      # Second || is not at the top level
+      split_expr( A || (B && (C || D)) , OR )  ->  [A, B && (C || D)]
+
+      # Parentheses don't matter as long as we stay at the top level (don't
+      # encounter any non-'op' nodes)
+      split_expr( (A || B) || C        , OR )  ->  [A, B, C]
+      split_expr( A || (B || C)        , OR )  ->  [A, B, C]
+    """
+    res = []
+
+    def rec(subexpr):
+        if subexpr.__class__ is tuple and subexpr[0] is op:
+            rec(subexpr[1])
+            rec(subexpr[2])
+        else:
+            res.append(subexpr)
+
+    rec(expr)
+    return res
+
+
+def escape(s):
+    r"""
+    Escapes the string 's' in the same fashion as is done for display in
+    Kconfig format and when writing strings to a .config file. " and \ are
+    replaced by \" and \\, respectively.
+    """
+    # \ must be escaped before " to avoid double escaping
+    return s.replace("\\", r"\\").replace('"', r'\"')
+
+
+def unescape(s):
+    r"""
+    Unescapes the string 's'. \ followed by any character is replaced with just
+    that character. Used internally when reading .config files.
+    """
+    return _unescape_sub(r"\1", s)
+
+# unescape() helper
+_unescape_sub = re.compile(r"\\(.)").sub
+
+
+def standard_kconfig():
+    """
+    Helper for tools. Loads the top-level Kconfig specified as the first
+    command-line argument, or "Kconfig" if there are no command-line arguments.
+    Returns the Kconfig instance.
+
+    Exits with sys.exit() (which raises a SystemExit exception) and prints a
+    usage note to stderr if more than one command-line argument is passed.
+    """
+    if len(sys.argv) > 2:
+        sys.exit("usage: {} [Kconfig]".format(sys.argv[0]))
+
+    # Only show backtraces for unexpected exceptions
+    try:
+        return Kconfig("Kconfig" if len(sys.argv) < 2 else sys.argv[1])
+    except (EnvironmentError, KconfigError) as e:
+        # Some long exception messages have extra newlines for better
+        # formatting when reported as an unhandled exception. Strip them here.
+        sys.exit(str(e).strip())
+
+
+def standard_config_filename():
+    """
+    Helper for tools. Returns the value of KCONFIG_CONFIG (which specifies the
+    .config file to load/save) if it is set, and ".config" otherwise.
+
+    Calling load_config() with filename=None might give the behavior you want,
+    without having to use this function.
+    """
+    return os.getenv("KCONFIG_CONFIG", ".config")
+
+
+def load_allconfig(kconf, filename):
+    """
+    Helper for all*config. Loads (merges) the configuration file specified by
+    KCONFIG_ALLCONFIG, if any. See Documentation/kbuild/kconfig.txt in the
+    Linux kernel.
+
+    Disables warnings for duplicated assignments within configuration files for
+    the duration of the call (kconf.warn_assign_override/warn_assign_redun = False),
+    and restores the previous warning settings at the end. The
+    KCONFIG_ALLCONFIG configuration file is expected to override symbols.
+
+    Exits with sys.exit() (which raises a SystemExit exception) and prints an
+    error to stderr if KCONFIG_ALLCONFIG is set but the configuration file
+    can't be opened.
+
+    kconf:
+      Kconfig instance to load the configuration in.
+
+    filename:
+      Command-specific configuration filename - "allyes.config",
+      "allno.config", etc.
+    """
+    allconfig = os.getenv("KCONFIG_ALLCONFIG")
+    if allconfig is None:
+        return
+
+    def std_msg(e):
+        # "Upcasts" a _KconfigIOError to an IOError, removing the custom
+        # __str__() message. The standard message is better here.
+        #
+        # This might also convert an OSError to an IOError in obscure cases,
+        # but it's probably not a big deal. The distinction is shaky (see
+        # PEP-3151).
+        return IOError(e.errno, e.strerror, e.filename)
+
+    old_warn_assign_override = kconf.warn_assign_override
+    old_warn_assign_redun = kconf.warn_assign_redun
+    kconf.warn_assign_override = kconf.warn_assign_redun = False
+
+    if allconfig in ("", "1"):
+        try:
+            print(kconf.load_config(filename, False))
+        except EnvironmentError as e1:
+            try:
+                print(kconf.load_config("all.config", False))
+            except EnvironmentError as e2:
+                sys.exit("error: KCONFIG_ALLCONFIG is set, but neither {} "
+                         "nor all.config could be opened: {}, {}"
+                         .format(filename, std_msg(e1), std_msg(e2)))
+    else:
+        try:
+            print(kconf.load_config(allconfig, False))
+        except EnvironmentError as e:
+            sys.exit("error: KCONFIG_ALLCONFIG is set to '{}', which "
+                     "could not be opened: {}"
+                     .format(allconfig, std_msg(e)))
+
+    kconf.warn_assign_override = old_warn_assign_override
+    kconf.warn_assign_redun = old_warn_assign_redun
+
+
+#
+# Internal functions
+#
+
+
+def _visibility(sc):
+    # Symbols and Choices have a "visibility" that acts as an upper bound on
+    # the values a user can set for them, corresponding to the visibility in
+    # e.g. 'make menuconfig'. This function calculates the visibility for the
+    # Symbol or Choice 'sc' -- the logic is nearly identical.
+
+    vis = 0
+
+    for node in sc.nodes:
+        if node.prompt:
+            vis = max(vis, expr_value(node.prompt[1]))
+
+    if sc.__class__ is Symbol and sc.choice:
+        if sc.choice.orig_type is TRISTATE and \
+           sc.orig_type is not TRISTATE and sc.choice.tri_value != 2:
+            # Non-tristate choice symbols are only visible in y mode
+            return 0
+
+        if sc.orig_type is TRISTATE and vis == 1 and sc.choice.tri_value == 2:
+            # Choice symbols with m visibility are not visible in y mode
+            return 0
+
+    # Promote m to y if we're dealing with a non-tristate (possibly due to
+    # modules being disabled)
+    if vis == 1 and sc.type is not TRISTATE:
+        return 2
+
+    return vis
+
+
+def _make_depend_on(sc, expr):
+    # Adds 'sc' (symbol or choice) as a "dependee" to all symbols in 'expr'.
+    # Constant symbols in 'expr' are skipped as they can never change value
+    # anyway.
+
+    if expr.__class__ is tuple:
+        # AND, OR, NOT, or relation
+
+        _make_depend_on(sc, expr[1])
+
+        # NOTs only have a single operand
+        if expr[0] is not NOT:
+            _make_depend_on(sc, expr[2])
+
+    elif not expr.is_constant:
+        # Non-constant symbol, or choice
+        expr._dependents.add(sc)
+
+
+def _parenthesize(expr, type_, sc_expr_str_fn):
+    # expr_str() helper. Adds parentheses around expressions of type 'type_'.
+
+    if expr.__class__ is tuple and expr[0] is type_:
+        return "({})".format(expr_str(expr, sc_expr_str_fn))
+    return expr_str(expr, sc_expr_str_fn)
+
+
+def _ordered_unique(lst):
+    # Returns 'lst' with any duplicates removed, preserving order. This hacky
+    # version seems to be a common idiom. It relies on short-circuit evaluation
+    # and set.add() returning None, which is falsy.
+
+    seen = set()
+    seen_add = seen.add
+    return [x for x in lst if x not in seen and not seen_add(x)]
+
+
+def _is_base_n(s, n):
+    try:
+        int(s, n)
+        return True
+    except ValueError:
+        return False
+
+
+def _strcmp(s1, s2):
+    # strcmp()-alike that returns -1, 0, or 1
+
+    return (s1 > s2) - (s1 < s2)
+
+
+def _sym_to_num(sym):
+    # expr_value() helper for converting a symbol to a number. Raises
+    # ValueError for symbols that can't be converted.
+
+    # For BOOL and TRISTATE, n/m/y count as 0/1/2. This mirrors 9059a3493ef
+    # ("kconfig: fix relational operators for bool and tristate symbols") in
+    # the C implementation.
+    return sym.tri_value if sym.orig_type in _BOOL_TRISTATE else \
+           int(sym.str_value, _TYPE_TO_BASE[sym.orig_type])
+
+
+def _touch_dep_file(path, sym_name):
+    # If sym_name is MY_SYM_NAME, touches my/sym/name.h. See the sync_deps()
+    # docstring.
+
+    sym_path = path + os.sep + sym_name.lower().replace("_", os.sep) + ".h"
+    sym_path_dir = dirname(sym_path)
+    if not exists(sym_path_dir):
+        os.makedirs(sym_path_dir, 0o755)
+
+    # A kind of truncating touch, mirroring the C tools
+    os.close(os.open(
+        sym_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o644))
+
+
+def _save_old(path):
+    # See write_config()
+
+    def copy(src, dst):
+        # Import as needed, to save some startup time
+        import shutil
+        shutil.copyfile(src, dst)
+
+    if islink(path):
+        # Preserve symlinks
+        copy_fn = copy
+    elif hasattr(os, "replace"):
+        # Python 3 (3.3+) only. Best choice when available, because it
+        # removes <filename>.old on both *nix and Windows.
+        copy_fn = os.replace
+    elif os.name == "posix":
+        # Removes <filename>.old on POSIX systems
+        copy_fn = os.rename
+    else:
+        # Fall back on copying
+        copy_fn = copy
+
+    try:
+        copy_fn(path, path + ".old")
+    except Exception:
+        # Ignore errors from 'path' missing as well as other errors.
+        # <filename>.old file is usually more of a nice-to-have, and not worth
+        # erroring out over e.g. if <filename>.old happens to be a directory or
+        # <filename> is something like /dev/null.
+        pass
+
+
+def _name_and_loc(sc):
+    # Helper for giving the symbol/choice name and location(s) in e.g. warnings
+
+    # Reuse the expression format. That way choices show up as
+    # '<choice (name, if any)>'
+    name = standard_sc_expr_str(sc)
+
+    if not sc.nodes:
+        return name + " (undefined)"
+
+    return "{} (defined at {})".format(
+        name,
+        ", ".join("{}:{}".format(node.filename, node.linenr)
+                  for node in sc.nodes))
+
+
+# Menu manipulation
+
+
+def _expr_depends_on(expr, sym):
+    # Reimplementation of expr_depends_symbol() from mconf.c. Used to determine
+    # if a submenu should be implicitly created. This also influences which
+    # items inside choice statements are considered choice items.
+
+    if expr.__class__ is not tuple:
+        return expr is sym
+
+    if expr[0] in _EQUAL_UNEQUAL:
+        # Check for one of the following:
+        # sym = m/y, m/y = sym, sym != n, n != sym
+
+        left, right = expr[1:]
+
+        if right is sym:
+            left, right = right, left
+        elif left is not sym:
+            return False
+
+        return (expr[0] is EQUAL and right is sym.kconfig.m or
+                                     right is sym.kconfig.y) or \
+               (expr[0] is UNEQUAL and right is sym.kconfig.n)
+
+    return expr[0] is AND and \
+           (_expr_depends_on(expr[1], sym) or
+            _expr_depends_on(expr[2], sym))
+
+
+def _auto_menu_dep(node1, node2):
+    # Returns True if node2 has an "automatic menu dependency" on node1. If
+    # node2 has a prompt, we check its condition. Otherwise, we look directly
+    # at node2.dep.
+
+    return _expr_depends_on(node2.prompt[1] if node2.prompt else node2.dep,
+                            node1.item)
+
+
+def _flatten(node):
+    # "Flattens" menu nodes without prompts (e.g. 'if' nodes and non-visible
+    # symbols with children from automatic menu creation) so that their
+    # children appear after them instead. This gives a clean menu structure
+    # with no unexpected "jumps" in the indentation.
+    #
+    # Do not flatten promptless choices (which can appear "legitimately" if a
+    # named choice is defined in multiple locations to add on symbols). It
+    # looks confusing, and the menuconfig already shows all choice symbols if
+    # you enter the choice at some location with a prompt.
+
+    while node:
+        if node.list and not node.prompt and \
+           node.item.__class__ is not Choice:
+
+            last_node = node.list
+            while 1:
+                last_node.parent = node.parent
+                if not last_node.next:
+                    break
+                last_node = last_node.next
+
+            last_node.next = node.next
+            node.next = node.list
+            node.list = None
+
+        node = node.next
+
+
+def _remove_ifs(node):
+    # Removes 'if' nodes (which can be recognized by MenuNode.item being None),
+    # which are assumed to already have been flattened. The C implementation
+    # doesn't bother to do this, but we expose the menu tree directly, and it
+    # makes it nicer to work with.
+
+    cur = node.list
+    while cur and not cur.item:
+        cur = cur.next
+
+    node.list = cur
+
+    while cur:
+        next = cur.next
+        while next and not next.item:
+            next = next.next
+
+        # Equivalent to
+        #
+        #   cur.next = next
+        #   cur = next
+        #
+        # due to tricky Python semantics. The order matters.
+        cur.next = cur = next
+
+
+def _finalize_choice(node):
+    # Finalizes a choice, marking each symbol whose menu node has the choice as
+    # the parent as a choice symbol, and automatically determining types if not
+    # specified.
+
+    choice = node.item
+
+    cur = node.list
+    while cur:
+        if cur.item.__class__ is Symbol:
+            cur.item.choice = choice
+            choice.syms.append(cur.item)
+        cur = cur.next
+
+    # If no type is specified for the choice, its type is that of
+    # the first choice item with a specified type
+    if not choice.orig_type:
+        for item in choice.syms:
+            if item.orig_type:
+                choice.orig_type = item.orig_type
+                break
+
+    # Each choice item of UNKNOWN type gets the type of the choice
+    for sym in choice.syms:
+        if not sym.orig_type:
+            sym.orig_type = choice.orig_type
+
+
+def _check_dep_loop_sym(sym, ignore_choice):
+    # Detects dependency loops using depth-first search on the dependency graph
+    # (which is calculated earlier in Kconfig._build_dep()).
+    #
+    # Algorithm:
+    #
+    #  1. Symbols/choices start out with _visited = 0, meaning unvisited.
+    #
+    #  2. When a symbol/choice is first visited, _visited is set to 1, meaning
+    #     "visited, potentially part of a dependency loop". The recursive
+    #     search then continues from the symbol/choice.
+    #
+    #  3. If we run into a symbol/choice X with _visited already set to 1,
+    #     there's a dependency loop. The loop is found on the call stack by
+    #     recording symbols while returning ("on the way back") until X is seen
+    #     again.
+    #
+    #  4. Once a symbol/choice and all its dependencies (or dependents in this
+    #     case) have been checked recursively without detecting any loops, its
+    #     _visited is set to 2, meaning "visited, not part of a dependency
+    #     loop".
+    #
+    #     This saves work if we run into the symbol/choice again in later calls
+    #     to _check_dep_loop_sym(). We just return immediately.
+    #
+    # Choices complicate things, as every choice symbol depends on every other
+    # choice symbol in a sense. When a choice is "entered" via a choice symbol
+    # X, we visit all choice symbols from the choice except X, and prevent
+    # immediately revisiting the choice with a flag (ignore_choice).
+    #
+    # Maybe there's a better way to handle this (different flags or the
+    # like...)
+
+    if not sym._visited:
+        # sym._visited == 0, unvisited
+
+        sym._visited = 1
+
+        for dep in sym._dependents:
+            # Choices show up in Symbol._dependents when the choice has the
+            # symbol in a 'prompt' or 'default' condition (e.g.
+            # 'default ... if SYM').
+            #
+            # Since we aren't entering the choice via a choice symbol, all
+            # choice symbols need to be checked, hence the None.
+            loop = _check_dep_loop_choice(dep, None) \
+                   if dep.__class__ is Choice \
+                   else _check_dep_loop_sym(dep, False)
+
+            if loop:
+                # Dependency loop found
+                return _found_dep_loop(loop, sym)
+
+        if sym.choice and not ignore_choice:
+            loop = _check_dep_loop_choice(sym.choice, sym)
+            if loop:
+                # Dependency loop found
+                return _found_dep_loop(loop, sym)
+
+        # The symbol is not part of a dependency loop
+        sym._visited = 2
+
+        # No dependency loop found
+        return None
+
+    if sym._visited == 2:
+        # The symbol was checked earlier and is already known to not be part of
+        # a dependency loop
+        return None
+
+    # sym._visited == 1, found a dependency loop. Return the symbol as the
+    # first element in it.
+    return (sym,)
+
+
+def _check_dep_loop_choice(choice, skip):
+    if not choice._visited:
+        # choice._visited == 0, unvisited
+
+        choice._visited = 1
+
+        # Check for loops involving choice symbols. If we came here via a
+        # choice symbol, skip that one, as we'd get a false positive
+        # '<sym FOO> -> <choice> -> <sym FOO>' loop otherwise.
+        for sym in choice.syms:
+            if sym is not skip:
+                # Prevent the choice from being immediately re-entered via the
+                # "is a choice symbol" path by passing True
+                loop = _check_dep_loop_sym(sym, True)
+                if loop:
+                    # Dependency loop found
+                    return _found_dep_loop(loop, choice)
+
+        # The choice is not part of a dependency loop
+        choice._visited = 2
+
+        # No dependency loop found
+        return None
+
+    if choice._visited == 2:
+        # The choice was checked earlier and is already known to not be part of
+        # a dependency loop
+        return None
+
+    # choice._visited == 1, found a dependency loop. Return the choice as the
+    # first element in it.
+    return (choice,)
+
+
+def _found_dep_loop(loop, cur):
+    # Called "on the way back" when we know we have a loop
+
+    # Is the symbol/choice 'cur' where the loop started?
+    if cur is not loop[0]:
+        # Nope, it's just a part of the loop
+        return loop + (cur,)
+
+    # Yep, we have the entire loop. Throw an exception that shows it.
+
+    msg = "\nDependency loop\n" \
+            "===============\n\n"
+
+    for item in loop:
+        if item is not loop[0]:
+            msg += "...depends on "
+            if item.__class__ is Symbol and item.choice:
+                msg += "the choice symbol "
+
+        msg += "{}, with definition...\n\n{}\n\n" \
+               .format(_name_and_loc(item), item)
+
+        # Small wart: Since we reuse the already calculated
+        # Symbol/Choice._dependents sets for recursive dependency detection, we
+        # lose information on whether a dependency came from a 'select'/'imply'
+        # condition or e.g. a 'depends on'.
+        #
+        # This might cause selecting symbols to "disappear". For example,
+        # a symbol B having 'select A if C' gives a direct dependency from A to
+        # C, since it corresponds to a reverse dependency of B && C.
+        #
+        # Always print reverse dependencies for symbols that have them to make
+        # sure information isn't lost. I wonder if there's some neat way to
+        # improve this.
+
+        if item.__class__ is Symbol:
+            if item.rev_dep is not item.kconfig.n:
+                msg += "(select-related dependencies: {})\n\n" \
+                       .format(expr_str(item.rev_dep))
+
+            if item.weak_rev_dep is not item.kconfig.n:
+                msg += "(imply-related dependencies: {})\n\n" \
+                       .format(expr_str(item.rev_dep))
+
+    msg += "...depends again on {}".format(_name_and_loc(loop[0]))
+
+    raise KconfigError(msg)
+
+
+def _decoding_error(e, filename, macro_linenr=None):
+    # Gives the filename and context for UnicodeDecodeError's, which are a pain
+    # to debug otherwise. 'e' is the UnicodeDecodeError object.
+    #
+    # If the decoding error is for the output of a $(shell,...) command,
+    # macro_linenr holds the line number where it was run (the exact line
+    # number isn't available for decoding errors in files).
+
+    raise KconfigError(
+        "\n"
+        "Malformed {} in {}\n"
+        "Context: {}\n"
+        "Problematic data: {}\n"
+        "Reason: {}".format(
+            e.encoding,
+            "'{}'".format(filename) if macro_linenr is None else
+                "output from macro at {}:{}".format(filename, macro_linenr),
+            e.object[max(e.start - 40, 0):e.end + 40],
+            e.object[e.start:e.end],
+            e.reason))
+
+
+def _warn_verbose_deprecated(fn_name):
+    sys.stderr.write(
+        "Deprecation warning: {0}()'s 'verbose' argument has no effect. Since "
+        "Kconfiglib 12.0.0, the message is returned from {0}() instead, "
+        "and is always generated. Do e.g. print(kconf.{0}()) if you want to "
+        "want to show a message like \"Loaded configuration '.config'\" on "
+        "stdout. The old API required ugly hacks to reuse messages in "
+        "configuration interfaces.\n".format(fn_name))
+
+
+# Predefined preprocessor functions
+
+
+def _filename_fn(kconf, _):
+    return kconf._filename
+
+
+def _lineno_fn(kconf, _):
+    return str(kconf._linenr)
+
+
+def _info_fn(kconf, _, msg):
+    print("{}:{}: {}".format(kconf._filename, kconf._linenr, msg))
+
+    return ""
+
+
+def _warning_if_fn(kconf, _, cond, msg):
+    if cond == "y":
+        kconf._warn(msg, kconf._filename, kconf._linenr)
+
+    return ""
+
+
+def _error_if_fn(kconf, _, cond, msg):
+    if cond == "y":
+        raise KconfigError("{}:{}: {}".format(
+            kconf._filename, kconf._linenr, msg))
+
+    return ""
+
+
+def _shell_fn(kconf, _, command):
+    # Only import as needed, to save some startup time
+    import subprocess
+
+    stdout, stderr = subprocess.Popen(
+        command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+    ).communicate()
+
+    if not _IS_PY2:
+        try:
+            stdout = stdout.decode(kconf._encoding)
+            stderr = stderr.decode(kconf._encoding)
+        except UnicodeDecodeError as e:
+            _decoding_error(e, kconf._filename, kconf._linenr)
+
+    if stderr:
+        kconf._warn("'{}' wrote to stderr: {}".format(
+                        command, "\n".join(stderr.splitlines())),
+                    kconf._filename, kconf._linenr)
+
+    # Universal newlines with splitlines() (to prevent e.g. stray \r's in
+    # command output on Windows), trailing newline removal, and
+    # newline-to-space conversion.
+    #
+    # On Python 3 versions before 3.6, it's not possible to specify the
+    # encoding when passing universal_newlines=True to Popen() (the 'encoding'
+    # parameter was added in 3.6), so we do this manual version instead.
+    return "\n".join(stdout.splitlines()).rstrip("\n").replace("\n", " ")
+
+#
+# Global constants
+#
+
+TRI_TO_STR = {
+    0: "n",
+    1: "m",
+    2: "y",
+}
+
+STR_TO_TRI = {
+    "n": 0,
+    "m": 1,
+    "y": 2,
+}
+
+# Constant representing that there's no cached choice selection. This is
+# distinct from a cached None (no selection). Any object that's not None or a
+# Symbol will do. We test this with 'is'.
+_NO_CACHED_SELECTION = 0
+
+# Are we running on Python 2?
+_IS_PY2 = sys.version_info[0] < 3
+
+try:
+    _UNAME_RELEASE = os.uname()[2]
+except AttributeError:
+    # Only import as needed, to save some startup time
+    import platform
+    _UNAME_RELEASE = platform.uname()[2]
+
+# The token and type constants below are safe to test with 'is', which is a bit
+# faster (~30% faster on my machine, and a few % faster for total parsing
+# time), even without assuming Python's small integer optimization (which
+# caches small integer objects). The constants end up pointing to unique
+# integer objects, and since we consistently refer to them via the names below,
+# we always get the same object.
+#
+# Client code should use == though.
+
+# Tokens, with values 1, 2, ... . Avoiding 0 simplifies some checks by making
+# all tokens except empty strings truthy.
+(
+    _T_ALLNOCONFIG_Y,
+    _T_AND,
+    _T_BOOL,
+    _T_CHOICE,
+    _T_CLOSE_PAREN,
+    _T_COMMENT,
+    _T_CONFIG,
+    _T_DEFAULT,
+    _T_DEFCONFIG_LIST,
+    _T_DEF_BOOL,
+    _T_DEF_HEX,
+    _T_DEF_INT,
+    _T_DEF_STRING,
+    _T_DEF_TRISTATE,
+    _T_DEPENDS,
+    _T_ENDCHOICE,
+    _T_ENDIF,
+    _T_ENDMENU,
+    _T_ENV,
+    _T_EQUAL,
+    _T_GREATER,
+    _T_GREATER_EQUAL,
+    _T_HELP,
+    _T_HEX,
+    _T_IF,
+    _T_IMPLY,
+    _T_INT,
+    _T_LESS,
+    _T_LESS_EQUAL,
+    _T_MAINMENU,
+    _T_MENU,
+    _T_MENUCONFIG,
+    _T_MODULES,
+    _T_NOT,
+    _T_ON,
+    _T_OPEN_PAREN,
+    _T_OPTION,
+    _T_OPTIONAL,
+    _T_OR,
+    _T_ORSOURCE,
+    _T_OSOURCE,
+    _T_PROMPT,
+    _T_RANGE,
+    _T_RSOURCE,
+    _T_SELECT,
+    _T_SOURCE,
+    _T_STRING,
+    _T_TRISTATE,
+    _T_UNEQUAL,
+    _T_VISIBLE,
+) = range(1, 51)
+
+# Keyword to token map, with the get() method assigned directly as a small
+# optimization
+_get_keyword = {
+    "---help---":     _T_HELP,
+    "allnoconfig_y":  _T_ALLNOCONFIG_Y,
+    "bool":           _T_BOOL,
+    "boolean":        _T_BOOL,
+    "choice":         _T_CHOICE,
+    "comment":        _T_COMMENT,
+    "config":         _T_CONFIG,
+    "def_bool":       _T_DEF_BOOL,
+    "def_hex":        _T_DEF_HEX,
+    "def_int":        _T_DEF_INT,
+    "def_string":     _T_DEF_STRING,
+    "def_tristate":   _T_DEF_TRISTATE,
+    "default":        _T_DEFAULT,
+    "defconfig_list": _T_DEFCONFIG_LIST,
+    "depends":        _T_DEPENDS,
+    "endchoice":      _T_ENDCHOICE,
+    "endif":          _T_ENDIF,
+    "endmenu":        _T_ENDMENU,
+    "env":            _T_ENV,
+    "grsource":       _T_ORSOURCE,  # Backwards compatibility
+    "gsource":        _T_OSOURCE,   # Backwards compatibility
+    "help":           _T_HELP,
+    "hex":            _T_HEX,
+    "if":             _T_IF,
+    "imply":          _T_IMPLY,
+    "int":            _T_INT,
+    "mainmenu":       _T_MAINMENU,
+    "menu":           _T_MENU,
+    "menuconfig":     _T_MENUCONFIG,
+    "modules":        _T_MODULES,
+    "on":             _T_ON,
+    "option":         _T_OPTION,
+    "optional":       _T_OPTIONAL,
+    "orsource":       _T_ORSOURCE,
+    "osource":        _T_OSOURCE,
+    "prompt":         _T_PROMPT,
+    "range":          _T_RANGE,
+    "rsource":        _T_RSOURCE,
+    "select":         _T_SELECT,
+    "source":         _T_SOURCE,
+    "string":         _T_STRING,
+    "tristate":       _T_TRISTATE,
+    "visible":        _T_VISIBLE,
+}.get
+
+# The constants below match the value of the corresponding tokens to remove the
+# need for conversion
+
+# Node types
+MENU    = _T_MENU
+COMMENT = _T_COMMENT
+
+# Expression types
+AND           = _T_AND
+OR            = _T_OR
+NOT           = _T_NOT
+EQUAL         = _T_EQUAL
+UNEQUAL       = _T_UNEQUAL
+LESS          = _T_LESS
+LESS_EQUAL    = _T_LESS_EQUAL
+GREATER       = _T_GREATER
+GREATER_EQUAL = _T_GREATER_EQUAL
+
+REL_TO_STR = {
+    EQUAL:         "=",
+    UNEQUAL:       "!=",
+    LESS:          "<",
+    LESS_EQUAL:    "<=",
+    GREATER:       ">",
+    GREATER_EQUAL: ">=",
+}
+
+# Symbol/choice types. UNKNOWN is 0 (falsy) to simplify some checks.
+# Client code shouldn't rely on it though, as it was non-zero in
+# older versions.
+UNKNOWN  = 0
+BOOL     = _T_BOOL
+TRISTATE = _T_TRISTATE
+STRING   = _T_STRING
+INT      = _T_INT
+HEX      = _T_HEX
+
+TYPE_TO_STR = {
+    UNKNOWN:  "unknown",
+    BOOL:     "bool",
+    TRISTATE: "tristate",
+    STRING:   "string",
+    INT:      "int",
+    HEX:      "hex",
+}
+
+# Used in comparisons. 0 means the base is inferred from the format of the
+# string.
+_TYPE_TO_BASE = {
+    HEX:      16,
+    INT:      10,
+    STRING:   0,
+    UNKNOWN:  0,
+}
+
+# def_bool -> BOOL, etc.
+_DEF_TOKEN_TO_TYPE = {
+    _T_DEF_BOOL:     BOOL,
+    _T_DEF_HEX:      HEX,
+    _T_DEF_INT:      INT,
+    _T_DEF_STRING:   STRING,
+    _T_DEF_TRISTATE: TRISTATE,
+}
+
+# Tokens after which strings are expected. This is used to tell strings from
+# constant symbol references during tokenization, both of which are enclosed in
+# quotes.
+#
+# Identifier-like lexemes ("missing quotes") are also treated as strings after
+# these tokens. _T_CHOICE is included to avoid symbols being registered for
+# named choices.
+_STRING_LEX = frozenset({
+    _T_BOOL,
+    _T_CHOICE,
+    _T_COMMENT,
+    _T_HEX,
+    _T_INT,
+    _T_MAINMENU,
+    _T_MENU,
+    _T_ORSOURCE,
+    _T_OSOURCE,
+    _T_PROMPT,
+    _T_RSOURCE,
+    _T_SOURCE,
+    _T_STRING,
+    _T_TRISTATE,
+})
+
+# Various sets for quick membership tests. Gives a single global lookup and
+# avoids creating temporary dicts/tuples.
+
+_TYPE_TOKENS = frozenset({
+    _T_BOOL,
+    _T_TRISTATE,
+    _T_INT,
+    _T_HEX,
+    _T_STRING,
+})
+
+_SOURCE_TOKENS = frozenset({
+    _T_SOURCE,
+    _T_RSOURCE,
+    _T_OSOURCE,
+    _T_ORSOURCE,
+})
+
+_REL_SOURCE_TOKENS = frozenset({
+    _T_RSOURCE,
+    _T_ORSOURCE,
+})
+
+# Obligatory (non-optional) sources
+_OBL_SOURCE_TOKENS = frozenset({
+    _T_SOURCE,
+    _T_RSOURCE,
+})
+
+_BOOL_TRISTATE = frozenset({
+    BOOL,
+    TRISTATE,
+})
+
+_BOOL_TRISTATE_UNKNOWN = frozenset({
+    BOOL,
+    TRISTATE,
+    UNKNOWN,
+})
+
+_INT_HEX = frozenset({
+    INT,
+    HEX,
+})
+
+_SYMBOL_CHOICE = frozenset({
+    Symbol,
+    Choice,
+})
+
+_MENU_COMMENT = frozenset({
+    MENU,
+    COMMENT,
+})
+
+_EQUAL_UNEQUAL = frozenset({
+    EQUAL,
+    UNEQUAL,
+})
+
+_RELATIONS = frozenset({
+    EQUAL,
+    UNEQUAL,
+    LESS,
+    LESS_EQUAL,
+    GREATER,
+    GREATER_EQUAL,
+})
+
+# Helper functions for getting compiled regular expressions, with the needed
+# matching function returned directly as a small optimization.
+#
+# Use ASCII regex matching on Python 3. It's already the default on Python 2.
+
+
+def _re_match(regex):
+    return re.compile(regex, 0 if _IS_PY2 else re.ASCII).match
+
+
+def _re_search(regex):
+    return re.compile(regex, 0 if _IS_PY2 else re.ASCII).search
+
+
+# Various regular expressions used during parsing
+
+# The initial token on a line. Also eats leading and trailing whitespace, so
+# that we can jump straight to the next token (or to the end of the line if
+# there is only one token).
+#
+# This regex will also fail to match for empty lines and comment lines.
+#
+# '$' is included to detect preprocessor variable assignments with macro
+# expansions in the left-hand side.
+_command_match = _re_match(r"\s*([A-Za-z0-9_$-]+)\s*")
+
+# An identifier/keyword after the first token. Also eats trailing whitespace.
+# '$' is included to detect identifiers containing macro expansions.
+_id_keyword_match = _re_match(r"([A-Za-z0-9_$/.-]+)\s*")
+
+# A fragment in the left-hand side of a preprocessor variable assignment. These
+# are the portions between macro expansions ($(foo)). Macros are supported in
+# the LHS (variable name).
+_assignment_lhs_fragment_match = _re_match("[A-Za-z0-9_-]*")
+
+# The assignment operator and value (right-hand side) in a preprocessor
+# variable assignment
+_assignment_rhs_match = _re_match(r"\s*(=|:=|\+=)\s*(.*)")
+
+# Special characters/strings while expanding a macro (')', ',', and '$(')
+_macro_special_search = _re_search(r"\)|,|\$\(")
+
+# Special characters/strings while expanding a string (quotes, '\', and '$(')
+_string_special_search = _re_search(r'"|\'|\\|\$\(')
+
+# Special characters/strings while expanding a symbol name. Also includes
+# end-of-line, in case the macro is the last thing on the line.
+_name_special_search = _re_search(r'[^A-Za-z0-9_$/.-]|\$\(|$')
+
+# A valid right-hand side for an assignment to a string symbol in a .config
+# file, including escaped characters. Extracts the contents.
+_conf_string_match = _re_match(r'"((?:[^\\"]|\\.)*)"')
diff --git a/support/kconfiglib/listnewconfig.py b/support/kconfiglib/listnewconfig.py
new file mode 100755
index 00000000..59de141a
--- /dev/null
+++ b/support/kconfiglib/listnewconfig.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+List all user-modifiable symbols that are not given a value in the configuration
+file. Usually, these are new symbols that have been added to the Kconfig files.
+
+The default configuration filename is '.config'. A different filename can be
+passed in the KCONFIG_CONFIG environment variable.
+"""
+import sys
+
+from kconfiglib import standard_kconfig, BOOL, TRISTATE, INT, HEX, STRING, \
+                       TRI_TO_STR
+
+
+def main():
+    kconf = standard_kconfig()
+    # Make it possible to filter this message out
+    sys.stderr.write(kconf.load_config() + "\n")
+
+    for sym in kconf.unique_defined_syms:
+        # Only show symbols that can be toggled. Choice symbols are a special
+        # case in that sym.assignable will be (2,) (length 1) for visible
+        # symbols in choices in y mode, but they can still be toggled by
+        # selecting some other symbol.
+        if sym.user_value is None and \
+           (len(sym.assignable) > 1 or
+            (sym.visibility and (sym.orig_type in (INT, HEX, STRING) or
+                                 sym.choice))):
+
+            # Don't reuse the 'config_string' format for bool/tristate symbols,
+            # to show n-valued symbols as 'CONFIG_FOO=n' instead of
+            # '# CONFIG_FOO is not set'. This matches the C tools.
+            if sym.orig_type in (BOOL, TRISTATE):
+                s = "{}{}={}\n".format(kconf.config_prefix, sym.name,
+                                       TRI_TO_STR[sym.tri_value])
+            else:
+                s = sym.config_string
+
+            sys.stdout.write(s)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/makefile.patch b/support/kconfiglib/makefile.patch
new file mode 100644
index 00000000..a617ebdf
--- /dev/null
+++ b/support/kconfiglib/makefile.patch
@@ -0,0 +1,48 @@
+From 93daf46f309b0c8f86149ef58c4906387d054c22 Mon Sep 17 00:00:00 2001
+From: Ulf Magnusson <ulfalizer@gmail.com>
+Date: Tue, 9 Jun 2015 13:01:34 +0200
+Subject: [PATCH] Kconfiglib scripts/kconfig/Makefile patch
+
+---
+ scripts/kconfig/Makefile | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
+index 3f327e21f60e..8b7dd1292005 100644
+--- a/scripts/kconfig/Makefile
++++ b/scripts/kconfig/Makefile
+@@ -27,2 +27,31 @@ gconfig: $(obj)/gconf
+ 
++PHONY += scriptconfig iscriptconfig kmenuconfig guiconfig dumpvarsconfig
++
++PYTHONCMD ?= python
++kpython := PYTHONPATH=$(srctree)/Kconfiglib:$$PYTHONPATH $(PYTHONCMD)
++
++ifneq ($(filter scriptconfig,$(MAKECMDGOALS)),)
++ifndef SCRIPT
++$(error Use "make scriptconfig SCRIPT=<path to script> [SCRIPT_ARG=<argument>]")
++endif
++endif
++
++scriptconfig:
++	$(Q)$(kpython) $(SCRIPT) $(Kconfig) $(if $(SCRIPT_ARG),"$(SCRIPT_ARG)")
++
++iscriptconfig:
++	$(Q)$(kpython) -i -c \
++	  "import kconfiglib; \
++	   kconf = kconfiglib.Kconfig('$(Kconfig)'); \
++	   print('A Kconfig instance \'kconf\' for the architecture $(ARCH) has been created.')"
++
++kmenuconfig:
++	$(Q)$(kpython) $(srctree)/Kconfiglib/menuconfig.py $(Kconfig)
++
++guiconfig:
++	$(Q)$(kpython) $(srctree)/Kconfiglib/guiconfig.py $(Kconfig)
++
++dumpvarsconfig:
++	$(Q)$(kpython) $(srctree)/Kconfiglib/examples/dumpvars.py $(Kconfig)
++
+ menuconfig: $(obj)/mconf
+-- 
+2.20.1
+
diff --git a/support/kconfiglib/menuconfig.py b/support/kconfiglib/menuconfig.py
new file mode 100755
index 00000000..4815c7f1
--- /dev/null
+++ b/support/kconfiglib/menuconfig.py
@@ -0,0 +1,3264 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Nordic Semiconductor ASA and Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Overview
+========
+
+A curses-based Python 2/3 menuconfig implementation. The interface should feel
+familiar to people used to mconf ('make menuconfig').
+
+Supports the same keys as mconf, and also supports a set of keybindings
+inspired by Vi:
+
+  J/K     : Down/Up
+  L       : Enter menu/Toggle item
+  H       : Leave menu
+  Ctrl-D/U: Page Down/Page Up
+  G/End   : Jump to end of list
+  g/Home  : Jump to beginning of list
+
+[Space] toggles values if possible, and enters menus otherwise. [Enter] works
+the other way around.
+
+The mconf feature where pressing a key jumps to a menu entry with that
+character in it in the current menu isn't supported. A jump-to feature for
+jumping directly to any symbol (including invisible symbols), choice, menu or
+comment (as in a Kconfig 'comment "Foo"') is available instead.
+
+A few different modes are available:
+
+  F: Toggle show-help mode, which shows the help text of the currently selected
+  item in the window at the bottom of the menu display. This is handy when
+  browsing through options.
+
+  C: Toggle show-name mode, which shows the symbol name before each symbol menu
+  entry
+
+  A: Toggle show-all mode, which shows all items, including currently invisible
+  items and items that lack a prompt. Invisible items are drawn in a different
+  style to make them stand out.
+
+
+Running
+=======
+
+menuconfig.py can be run either as a standalone executable or by calling the
+menuconfig() function with an existing Kconfig instance. The second option is a
+bit inflexible in that it will still load and save .config, etc.
+
+When run in standalone mode, the top-level Kconfig file to load can be passed
+as a command-line argument. With no argument, it defaults to "Kconfig".
+
+The KCONFIG_CONFIG environment variable specifies the .config file to load (if
+it exists) and save. If KCONFIG_CONFIG is unset, ".config" is used.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+
+$srctree is supported through Kconfiglib.
+
+
+Color schemes
+=============
+
+It is possible to customize the color scheme by setting the MENUCONFIG_STYLE
+environment variable. For example, setting it to 'aquatic' will enable an
+alternative, less yellow, more 'make menuconfig'-like color scheme, contributed
+by Mitja Horvat (pinkfluid).
+
+This is the current list of built-in styles:
+    - default       classic Kconfiglib theme with a yellow accent
+    - monochrome    colorless theme (uses only bold and standout) attributes,
+                    this style is used if the terminal doesn't support colors
+    - aquatic       blue tinted style loosely resembling the lxdialog theme
+
+It is possible to customize the current style by changing colors of UI
+elements on the screen. This is the list of elements that can be stylized:
+
+    - path          Top row in the main display, with the menu path
+    - separator     Separator lines between windows. Also used for the top line
+                    in the symbol information display.
+    - list          List of items, e.g. the main display
+    - selection     Style for the selected item
+    - inv-list      Like list, but for invisible items. Used in show-all mode.
+    - inv-selection Like selection, but for invisible items. Used in show-all
+                    mode.
+    - help          Help text windows at the bottom of various fullscreen
+                    dialogs
+    - show-help     Window showing the help text in show-help mode
+    - frame         Frame around dialog boxes
+    - body          Body of dialog boxes
+    - edit          Edit box in pop-up dialogs
+    - jump-edit     Edit box in jump-to dialog
+    - text          Symbol information text
+
+The color definition is a comma separated list of attributes:
+
+    - fg:COLOR      Set the foreground/background colors. COLOR can be one of
+      * or *        the basic 16 colors (black, red, green, yellow, blue,
+    - bg:COLOR      magenta, cyan, white and brighter versions, for example,
+                    brightred). On terminals that support more than 8 colors,
+                    you can also directly put in a color number, e.g. fg:123
+                    (hexadecimal and octal constants are accepted as well).
+                    Colors outside the range -1..curses.COLORS-1 (which is
+                    terminal-dependent) are ignored (with a warning). The COLOR
+                    can be also specified using a RGB value in the HTML
+                    notation, for example #RRGGBB. If the terminal supports
+                    color changing, the color is rendered accurately.
+                    Otherwise, the visually nearest color is used.
+
+                    If the background or foreground color of an element is not
+                    specified, it defaults to -1, representing the default
+                    terminal foreground or background color.
+
+                    Note: On some terminals a bright version of the color
+                    implies bold.
+    - bold          Use bold text
+    - underline     Use underline text
+    - standout      Standout text attribute (reverse color)
+
+More often than not, some UI elements share the same color definition. In such
+cases the right value may specify an UI element from which the color definition
+will be copied. For example, "separator=help" will apply the current color
+definition for "help" to "separator".
+
+A keyword without the '=' is assumed to be a style template. The template name
+is looked up in the built-in styles list and the style definition is expanded
+in-place. With this, built-in styles can be used as basis for new styles.
+
+For example, take the aquatic theme and give it a red selection bar:
+
+MENUCONFIG_STYLE="aquatic selection=fg:white,bg:red"
+
+If there's an error in the style definition or if a missing style is assigned
+to, the assignment will be ignored, along with a warning being printed on
+stderr.
+
+The 'default' theme is always implicitly parsed first (or the 'monochrome'
+theme if the terminal lacks colors), so the following two settings have the
+same effect:
+
+    MENUCONFIG_STYLE="selection=fg:white,bg:red"
+    MENUCONFIG_STYLE="default selection=fg:white,bg:red"
+
+
+Other features
+==============
+
+  - Seamless terminal resizing
+
+  - No dependencies on *nix, as the 'curses' module is in the Python standard
+    library
+
+  - Unicode text entry
+
+  - Improved information screen compared to mconf:
+
+      * Expressions are split up by their top-level &&/|| operands to improve
+        readability
+
+      * Undefined symbols in expressions are pointed out
+
+      * Menus and comments have information displays
+
+      * Kconfig definitions are printed
+
+      * The include path is shown, listing the locations of the 'source'
+        statements that included the Kconfig file of the symbol (or other
+        item)
+
+
+Limitations
+===========
+
+Doesn't work out of the box on Windows, but can be made to work with 'pip
+install windows-curses'. See the
+https://github.com/zephyrproject-rtos/windows-curses repository.
+
+'pip install kconfiglib' on Windows automatically installs windows-curses
+to make the menuconfig usable.
+"""
+from __future__ import print_function
+
+import curses
+import errno
+import locale
+import os
+import re
+import sys
+import textwrap
+
+from kconfiglib import Symbol, Choice, MENU, COMMENT, MenuNode, \
+                       BOOL, TRISTATE, STRING, INT, HEX, \
+                       AND, OR, \
+                       expr_str, expr_value, split_expr, \
+                       standard_sc_expr_str, \
+                       TRI_TO_STR, TYPE_TO_STR, \
+                       standard_kconfig, standard_config_filename
+
+
+#
+# Configuration variables
+#
+
+# If True, try to change LC_CTYPE to a UTF-8 locale if it is set to the C
+# locale (which implies ASCII). This fixes curses Unicode I/O issues on systems
+# with bad defaults. ncurses configures itself from the locale settings.
+#
+# Related PEP: https://www.python.org/dev/peps/pep-0538/
+_CHANGE_C_LC_CTYPE_TO_UTF8 = True
+
+# How many steps an implicit submenu will be indented. Implicit submenus are
+# created when an item depends on the symbol before it. Note that symbols
+# defined with 'menuconfig' create a separate menu instead of indenting.
+_SUBMENU_INDENT = 4
+
+# Number of steps for Page Up/Down to jump
+_PG_JUMP = 6
+
+# Height of the help window in show-help mode
+_SHOW_HELP_HEIGHT = 8
+
+# How far the cursor needs to be from the edge of the window before it starts
+# to scroll. Used for the main menu display, the information display, the
+# search display, and for text boxes.
+_SCROLL_OFFSET = 5
+
+# Minimum width of dialogs that ask for text input
+_INPUT_DIALOG_MIN_WIDTH = 30
+
+# Number of arrows pointing up/down to draw when a window is scrolled
+_N_SCROLL_ARROWS = 14
+
+# Lines of help text shown at the bottom of the "main" display
+_MAIN_HELP_LINES = """
+[Space/Enter] Toggle/enter  [ESC] Leave menu           [S] Save
+[O] Load                    [?] Symbol info            [/] Jump to symbol
+[F] Toggle show-help mode   [C] Toggle show-name mode  [A] Toggle show-all mode
+[Q] Quit (prompts for save) [D] Save minimal config (advanced)
+"""[1:-1].split("\n")
+
+# Lines of help text shown at the bottom of the information dialog
+_INFO_HELP_LINES = """
+[ESC/q] Return to menu      [/] Jump to symbol
+"""[1:-1].split("\n")
+
+# Lines of help text shown at the bottom of the search dialog
+_JUMP_TO_HELP_LINES = """
+Type text to narrow the search. Regexes are supported (via Python's 're'
+module). The up/down cursor keys step in the list. [Enter] jumps to the
+selected symbol. [ESC] aborts the search. Type multiple space-separated
+strings/regexes to find entries that match all of them. Type Ctrl-F to
+view the help of the selected item without leaving the dialog.
+"""[1:-1].split("\n")
+
+#
+# Styling
+#
+
+_STYLES = {
+    "default": """
+    path=fg:black,bg:white,bold
+    separator=fg:black,bg:yellow,bold
+    list=fg:black,bg:white
+    selection=fg:white,bg:blue,bold
+    inv-list=fg:red,bg:white
+    inv-selection=fg:red,bg:blue
+    help=path
+    show-help=list
+    frame=fg:black,bg:yellow,bold
+    body=fg:white,bg:black
+    edit=fg:white,bg:blue
+    jump-edit=edit
+    text=list
+    """,
+
+    # This style is forced on terminals that do no support colors
+    "monochrome": """
+    path=bold
+    separator=bold,standout
+    list=
+    selection=bold,standout
+    inv-list=bold
+    inv-selection=bold,standout
+    help=bold
+    show-help=
+    frame=bold,standout
+    body=
+    edit=standout
+    jump-edit=
+    text=
+    """,
+
+    # Blue tinted style loosely resembling lxdialog
+    "aquatic": """
+    path=fg:cyan,bg:blue,bold
+    separator=fg:white,bg:cyan,bold
+    help=path
+    frame=fg:white,bg:cyan,bold
+    body=fg:brightwhite,bg:blue
+    edit=fg:black,bg:white
+    """
+}
+
+# Standard colors definition
+_STYLE_STD_COLORS = {
+    # Basic colors
+    "black":         curses.COLOR_BLACK,
+    "red":           curses.COLOR_RED,
+    "green":         curses.COLOR_GREEN,
+    "yellow":        curses.COLOR_YELLOW,
+    "blue":          curses.COLOR_BLUE,
+    "magenta":       curses.COLOR_MAGENTA,
+    "cyan":          curses.COLOR_CYAN,
+    "white":         curses.COLOR_WHITE,
+
+    # Bright versions
+    "brightblack":   curses.COLOR_BLACK + 8,
+    "brightred":     curses.COLOR_RED + 8,
+    "brightgreen":   curses.COLOR_GREEN + 8,
+    "brightyellow":  curses.COLOR_YELLOW + 8,
+    "brightblue":    curses.COLOR_BLUE + 8,
+    "brightmagenta": curses.COLOR_MAGENTA + 8,
+    "brightcyan":    curses.COLOR_CYAN + 8,
+    "brightwhite":   curses.COLOR_WHITE + 8,
+
+    # Aliases
+    "purple":        curses.COLOR_MAGENTA,
+    "brightpurple":  curses.COLOR_MAGENTA + 8,
+}
+
+
+def _rgb_to_6cube(rgb):
+    # Converts an 888 RGB color to a 3-tuple (nice in that it's hashable)
+    # representing the closest xterm 256-color 6x6x6 color cube color.
+    #
+    # The xterm 256-color extension uses a RGB color palette with components in
+    # the range 0-5 (a 6x6x6 cube). The catch is that the mapping is nonlinear.
+    # Index 0 in the 6x6x6 cube is mapped to 0, index 1 to 95, then 135, 175,
+    # etc., in increments of 40. See the links below:
+    #
+    #   https://commons.wikimedia.org/wiki/File:Xterm_256color_chart.svg
+    #   https://github.com/tmux/tmux/blob/master/colour.c
+
+    # 48 is the middle ground between 0 and 95.
+    return tuple(0 if x < 48 else int(round(max(1, (x - 55)/40))) for x in rgb)
+
+
+def _6cube_to_rgb(r6g6b6):
+    # Returns the 888 RGB color for a 666 xterm color cube index
+
+    return tuple(0 if x == 0 else 40*x + 55 for x in r6g6b6)
+
+
+def _rgb_to_gray(rgb):
+    # Converts an 888 RGB color to the index of an xterm 256-color grayscale
+    # color with approx. the same perceived brightness
+
+    # Calculate the luminance (gray intensity) of the color. See
+    #   https://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
+    # and
+    #   https://www.w3.org/TR/AERT/#color-contrast
+    luma = 0.299*rgb[0] + 0.587*rgb[1] + 0.114*rgb[2]
+
+    # Closest index in the grayscale palette, which starts at RGB 0x080808,
+    # with stepping 0x0A0A0A
+    index = int(round((luma - 8)/10))
+
+    # Clamp the index to 0-23, corresponding to 232-255
+    return max(0, min(index, 23))
+
+
+def _gray_to_rgb(index):
+    # Convert a grayscale index to its closet single RGB component
+
+    return 3*(10*index + 8,)  # Returns a 3-tuple
+
+
+# Obscure Python: We never pass a value for rgb2index, and it keeps pointing to
+# the same dict. This avoids a global.
+def _alloc_rgb(rgb, rgb2index={}):
+    # Initialize a new entry in the xterm palette to the given RGB color,
+    # returning its index. If the color has already been initialized, the index
+    # of the existing entry is returned.
+    #
+    # ncurses is palette-based, so we need to overwrite palette entries to make
+    # new colors.
+    #
+    # The colors from 0 to 15 are user-defined, and there's no way to query
+    # their RGB values, so we better leave them untouched. Also leave any
+    # hypothetical colors above 255 untouched (though we're unlikely to
+    # allocate that many colors anyway).
+
+    if rgb in rgb2index:
+        return rgb2index[rgb]
+
+    # Many terminals allow the user to customize the first 16 colors. Avoid
+    # changing their values.
+    color_index = 16 + len(rgb2index)
+    if color_index >= 256:
+        _warn("Unable to allocate new RGB color ", rgb, ". Too many colors "
+              "allocated.")
+        return 0
+
+    # Map each RGB component from the range 0-255 to the range 0-1000, which is
+    # what curses uses
+    curses.init_color(color_index, *(int(round(1000*x/255)) for x in rgb))
+    rgb2index[rgb] = color_index
+
+    return color_index
+
+
+def _color_from_num(num):
+    # Returns the index of a color that looks like color 'num' in the xterm
+    # 256-color palette (but that might not be 'num', if we're redefining
+    # colors)
+
+    # - _alloc_rgb() won't touch the first 16 colors or any (hypothetical)
+    #   colors above 255, so we can always return them as-is
+    #
+    # - If the terminal doesn't support changing color definitions, or if
+    #   curses.COLORS < 256, _alloc_rgb() won't touch any color, and all colors
+    #   can be returned as-is
+    if num < 16 or num > 255 or not curses.can_change_color() or \
+       curses.COLORS < 256:
+        return num
+
+    # _alloc_rgb() might redefine colors, so emulate the xterm 256-color
+    # palette by allocating new colors instead of returning color numbers
+    # directly
+
+    if num < 232:
+        num -= 16
+        return _alloc_rgb(_6cube_to_rgb(((num//36)%6, (num//6)%6, num%6)))
+
+    return _alloc_rgb(_gray_to_rgb(num - 232))
+
+
+def _color_from_rgb(rgb):
+    # Returns the index of a color matching the 888 RGB color 'rgb'. The
+    # returned color might be an ~exact match or an approximation, depending on
+    # terminal capabilities.
+
+    # Calculates the Euclidean distance between two RGB colors
+    def dist(r1, r2): return sum((x - y)**2 for x, y in zip(r1, r2))
+
+    if curses.COLORS >= 256:
+        # Assume we're dealing with xterm's 256-color extension
+
+        if curses.can_change_color():
+            # Best case -- the terminal supports changing palette entries via
+            # curses.init_color(). Initialize an unused palette entry and
+            # return it.
+            return _alloc_rgb(rgb)
+
+        # Second best case -- pick between the xterm 256-color extension colors
+
+        # Closest 6-cube "color" color
+        c6 = _rgb_to_6cube(rgb)
+        # Closest gray color
+        gray = _rgb_to_gray(rgb)
+
+        if dist(rgb, _6cube_to_rgb(c6)) < dist(rgb, _gray_to_rgb(gray)):
+            # Use the "color" color from the 6x6x6 color palette. Calculate the
+            # color number from the 6-cube index triplet.
+            return 16 + 36*c6[0] + 6*c6[1] + c6[2]
+
+        # Use the color from the gray palette
+        return 232 + gray
+
+    # Terminal not in xterm 256-color mode. This is probably the best we can
+    # do, or is it? Submit patches. :)
+    min_dist = float('inf')
+    best = -1
+    for color in range(curses.COLORS):
+        # ncurses uses the range 0..1000. Scale that down to 0..255.
+        d = dist(rgb, tuple(int(round(255*c/1000))
+                            for c in curses.color_content(color)))
+        if d < min_dist:
+            min_dist = d
+            best = color
+
+    return best
+
+
+def _parse_style(style_str, parsing_default):
+    # Parses a string with '<element>=<style>' assignments. Anything not
+    # containing '=' is assumed to be a reference to a built-in style, which is
+    # treated as if all the assignments from the style were inserted at that
+    # point in the string.
+    #
+    # The parsing_default flag is set to True when we're implicitly parsing the
+    # 'default'/'monochrome' style, to prevent warnings.
+
+    for sline in style_str.split():
+        # Words without a "=" character represents a style template
+        if "=" in sline:
+            key, data = sline.split("=", 1)
+
+            # The 'default' style template is assumed to define all keys. We
+            # run _style_to_curses() for non-existing keys as well, so that we
+            # print warnings for errors to the right of '=' for those too.
+            if key not in _style and not parsing_default:
+                _warn("Ignoring non-existent style", key)
+
+            # If data is a reference to another key, copy its style
+            if data in _style:
+                _style[key] = _style[data]
+            else:
+                _style[key] = _style_to_curses(data)
+
+        elif sline in _STYLES:
+            # Recursively parse style template. Ignore styles that don't exist,
+            # for backwards/forwards compatibility.
+            _parse_style(_STYLES[sline], parsing_default)
+
+        else:
+            _warn("Ignoring non-existent style template", sline)
+
+# Dictionary mapping element types to the curses attributes used to display
+# them
+_style = {}
+
+
+def _style_to_curses(style_def):
+    # Parses a style definition string (<element>=<style>), returning
+    # a (fg_color, bg_color, attributes) tuple.
+
+    def parse_color(color_def):
+        color_def = color_def.split(":", 1)[1]
+
+        if color_def in _STYLE_STD_COLORS:
+            return _color_from_num(_STYLE_STD_COLORS[color_def])
+
+        # HTML format, #RRGGBB
+        if re.match("#[A-Fa-f0-9]{6}", color_def):
+            return _color_from_rgb((
+                int(color_def[1:3], 16),
+                int(color_def[3:5], 16),
+                int(color_def[5:7], 16)))
+
+        try:
+            color_num = _color_from_num(int(color_def, 0))
+        except ValueError:
+            _warn("Ignoring color ", color_def, "that's neither predefined "
+                  "nor a number")
+
+            return -1
+
+        if not -1 <= color_num < curses.COLORS:
+            _warn("Ignoring color {}, which is outside the range "
+                  "-1..curses.COLORS-1 (-1..{})"
+                  .format(color_def, curses.COLORS - 1))
+
+            return -1
+
+        return color_num
+
+    fg_color = -1
+    bg_color = -1
+    attrs = 0
+
+    if style_def:
+        for field in style_def.split(","):
+            if field.startswith("fg:"):
+                fg_color = parse_color(field)
+            elif field.startswith("bg:"):
+                bg_color = parse_color(field)
+            elif field == "bold":
+                # A_BOLD tends to produce faint and hard-to-read text on the
+                # Windows console, especially with the old color scheme, before
+                # the introduction of
+                # https://blogs.msdn.microsoft.com/commandline/2017/08/02/updating-the-windows-console-colors/
+                attrs |= curses.A_NORMAL if _IS_WINDOWS else curses.A_BOLD
+            elif field == "standout":
+                attrs |= curses.A_STANDOUT
+            elif field == "underline":
+                attrs |= curses.A_UNDERLINE
+            else:
+                _warn("Ignoring unknown style attribute", field)
+
+    return _style_attr(fg_color, bg_color, attrs)
+
+
+def _init_styles():
+    if curses.has_colors():
+        curses.use_default_colors()
+
+    # Use the 'monochrome' style template as the base on terminals without
+    # color
+    _parse_style("default" if curses.has_colors() else "monochrome", True)
+
+    # Add any user-defined style from the environment
+    if "MENUCONFIG_STYLE" in os.environ:
+        _parse_style(os.environ["MENUCONFIG_STYLE"], False)
+
+
+# color_attribs holds the color pairs we've already created, indexed by a
+# (<foreground color>, <background color>) tuple.
+#
+# Obscure Python: We never pass a value for color_attribs, and it keeps
+# pointing to the same dict. This avoids a global.
+def _style_attr(fg_color, bg_color, attribs, color_attribs={}):
+    # Returns an attribute with the specified foreground and background color
+    # and the attributes in 'attribs'. Reuses color pairs already created if
+    # possible, and creates a new color pair otherwise.
+    #
+    # Returns 'attribs' if colors aren't supported.
+
+    if not curses.has_colors():
+        return attribs
+
+    if (fg_color, bg_color) not in color_attribs:
+        # Create new color pair. Color pair number 0 is hardcoded and cannot be
+        # changed, hence the +1s.
+        curses.init_pair(len(color_attribs) + 1, fg_color, bg_color)
+        color_attribs[(fg_color, bg_color)] = \
+            curses.color_pair(len(color_attribs) + 1)
+
+    return color_attribs[(fg_color, bg_color)] | attribs
+
+
+#
+# Main application
+#
+
+
+def _main():
+    menuconfig(standard_kconfig())
+
+
+def menuconfig(kconf):
+    """
+    Launches the configuration interface, returning after the user exits.
+
+    kconf:
+      Kconfig instance to be configured
+    """
+    global _kconf
+    global _conf_filename
+    global _conf_changed
+    global _minconf_filename
+    global _show_all
+
+    _kconf = kconf
+
+    # Filename to save configuration to
+    _conf_filename = standard_config_filename()
+
+    # Load existing configuration and set _conf_changed True if it is outdated
+    _conf_changed = _load_config()
+
+    # Filename to save minimal configuration to
+    _minconf_filename = "defconfig"
+
+    # Any visible items in the top menu?
+    _show_all = False
+    if not _shown_nodes(kconf.top_node):
+        # Nothing visible. Start in show-all mode and try again.
+        _show_all = True
+        if not _shown_nodes(kconf.top_node):
+            # Give up. The implementation relies on always having a selected
+            # node.
+            print("Empty configuration -- nothing to configure.\n"
+                  "Check that environment variables are set properly.")
+            return
+
+    # Disable warnings. They get mangled in curses mode, and we deal with
+    # errors ourselves.
+    kconf.warn = False
+
+    # Make curses use the locale settings specified in the environment
+    locale.setlocale(locale.LC_ALL, "")
+
+    # Try to fix Unicode issues on systems with bad defaults
+    if _CHANGE_C_LC_CTYPE_TO_UTF8:
+        _change_c_lc_ctype_to_utf8()
+
+    # Get rid of the delay between pressing ESC and jumping to the parent menu,
+    # unless the user has set ESCDELAY (see ncurses(3)). This makes the UI much
+    # smoother to work with.
+    #
+    # Note: This is strictly pretty iffy, since escape codes for e.g. cursor
+    # keys start with ESC, but I've never seen it cause problems in practice
+    # (probably because it's unlikely that the escape code for a key would get
+    # split up across read()s, at least with a terminal emulator). Please
+    # report if you run into issues. Some suitable small default value could be
+    # used here instead in that case. Maybe it's silly to not put in the
+    # smallest imperceptible delay here already, though I don't like guessing.
+    #
+    # (From a quick glance at the ncurses source code, ESCDELAY might only be
+    # relevant for mouse events there, so maybe escapes are assumed to arrive
+    # in one piece already...)
+    os.environ.setdefault("ESCDELAY", "0")
+
+    # Enter curses mode. _menuconfig() returns a string to print on exit, after
+    # curses has been de-initialized.
+    print(curses.wrapper(_menuconfig))
+
+
+def _load_config():
+    # Loads any existing .config file. See the Kconfig.load_config() docstring.
+    #
+    # Returns True if .config is missing or outdated. We always prompt for
+    # saving the configuration in that case.
+
+    print(_kconf.load_config())
+    if not os.path.exists(_conf_filename):
+        # No .config
+        return True
+
+    return _needs_save()
+
+
+def _needs_save():
+    # Returns True if a just-loaded .config file is outdated (would get
+    # modified when saving)
+
+    if _kconf.missing_syms:
+        # Assignments to undefined symbols in the .config
+        return True
+
+    for sym in _kconf.unique_defined_syms:
+        if sym.user_value is None:
+            if sym.config_string:
+                # Unwritten symbol
+                return True
+        elif sym.orig_type in (BOOL, TRISTATE):
+            if sym.tri_value != sym.user_value:
+                # Written bool/tristate symbol, new value
+                return True
+        elif sym.str_value != sym.user_value:
+            # Written string/int/hex symbol, new value
+            return True
+
+    # No need to prompt for save
+    return False
+
+
+# Global variables used below:
+#
+#   _stdscr:
+#     stdscr from curses
+#
+#   _cur_menu:
+#     Menu node of the menu (or menuconfig symbol, or choice) currently being
+#     shown
+#
+#   _shown:
+#     List of items in _cur_menu that are shown (ignoring scrolling). In
+#     show-all mode, this list contains all items in _cur_menu. Otherwise, it
+#     contains just the visible items.
+#
+#   _sel_node_i:
+#     Index in _shown of the currently selected node
+#
+#   _menu_scroll:
+#     Index in _shown of the top row of the main display
+#
+#   _parent_screen_rows:
+#     List/stack of the row numbers that the selections in the parent menus
+#     appeared on. This is used to prevent the scrolling from jumping around
+#     when going in and out of menus.
+#
+#   _show_help/_show_name/_show_all:
+#     If True, the corresponding mode is on. See the module docstring.
+#
+#   _conf_filename:
+#     File to save the configuration to
+#
+#   _minconf_filename:
+#     File to save minimal configurations to
+#
+#   _conf_changed:
+#     True if the configuration has been changed. If False, we don't bother
+#     showing the save-and-quit dialog.
+#
+#     We reset this to False whenever the configuration is saved explicitly
+#     from the save dialog.
+
+
+def _menuconfig(stdscr):
+    # Logic for the main display, with the list of symbols, etc.
+
+    global _stdscr
+    global _conf_filename
+    global _conf_changed
+    global _minconf_filename
+    global _show_help
+    global _show_name
+
+    _stdscr = stdscr
+
+    _init()
+
+    while True:
+        _draw_main()
+        curses.doupdate()
+
+
+        c = _getch_compat(_menu_win)
+
+        if c == curses.KEY_RESIZE:
+            _resize_main()
+
+        elif c in (curses.KEY_DOWN, "j", "J"):
+            _select_next_menu_entry()
+
+        elif c in (curses.KEY_UP, "k", "K"):
+            _select_prev_menu_entry()
+
+        elif c in (curses.KEY_NPAGE, "\x04"):  # Page Down/Ctrl-D
+            # Keep it simple. This way we get sane behavior for small windows,
+            # etc., for free.
+            for _ in range(_PG_JUMP):
+                _select_next_menu_entry()
+
+        elif c in (curses.KEY_PPAGE, "\x15"):  # Page Up/Ctrl-U
+            for _ in range(_PG_JUMP):
+                _select_prev_menu_entry()
+
+        elif c in (curses.KEY_END, "G"):
+            _select_last_menu_entry()
+
+        elif c in (curses.KEY_HOME, "g"):
+            _select_first_menu_entry()
+
+        elif c == " ":
+            # Toggle the node if possible
+            sel_node = _shown[_sel_node_i]
+            if not _change_node(sel_node):
+                _enter_menu(sel_node)
+
+        elif c in (curses.KEY_RIGHT, "\n", "l", "L"):
+            # Enter the node if possible
+            sel_node = _shown[_sel_node_i]
+            if not _enter_menu(sel_node):
+                _change_node(sel_node)
+
+        elif c in ("n", "N"):
+            _set_sel_node_tri_val(0)
+
+        elif c in ("m", "M"):
+            _set_sel_node_tri_val(1)
+
+        elif c in ("y", "Y"):
+            _set_sel_node_tri_val(2)
+
+        elif c in (curses.KEY_LEFT, curses.KEY_BACKSPACE, _ERASE_CHAR,
+                   "\x1B", "h", "H"):  # \x1B = ESC
+
+            if c == "\x1B" and _cur_menu is _kconf.top_node:
+                res = _quit_dialog()
+                if res:
+                    return res
+            else:
+                _leave_menu()
+
+        elif c in ("o", "O"):
+            _load_dialog()
+
+        elif c in ("s", "S"):
+            filename = _save_dialog(_kconf.write_config, _conf_filename,
+                                    "configuration")
+            if filename:
+                _conf_filename = filename
+                _conf_changed = False
+
+        elif c in ("d", "D"):
+            filename = _save_dialog(_kconf.write_min_config, _minconf_filename,
+                                    "minimal configuration")
+            if filename:
+                _minconf_filename = filename
+
+        elif c == "/":
+            _jump_to_dialog()
+            # The terminal might have been resized while the fullscreen jump-to
+            # dialog was open
+            _resize_main()
+
+        elif c == "?":
+            _info_dialog(_shown[_sel_node_i], False)
+            # The terminal might have been resized while the fullscreen info
+            # dialog was open
+            _resize_main()
+
+        elif c in ("f", "F"):
+            _show_help = not _show_help
+            _set_style(_help_win, "show-help" if _show_help else "help")
+            _resize_main()
+
+        elif c in ("c", "C"):
+            _show_name = not _show_name
+
+        elif c in ("a", "A"):
+            _toggle_show_all()
+
+        elif c in ("q", "Q"):
+            res = _quit_dialog()
+            if res:
+                return res
+
+
+def _quit_dialog():
+    if not _conf_changed:
+        return "No changes to save (for '{}')".format(_conf_filename)
+
+    while True:
+        c = _key_dialog(
+            "Quit",
+            " Save configuration?\n"
+            "\n"
+            "(Y)es  (N)o  (C)ancel",
+            "ync")
+
+        if c is None or c == "c":
+            return None
+
+        if c == "y":
+            # Returns a message to print
+            msg = _try_save(_kconf.write_config, _conf_filename, "configuration")
+            if msg:
+                return msg
+
+        elif c == "n":
+            return "Configuration ({}) was not saved".format(_conf_filename)
+
+
+def _init():
+    # Initializes the main display with the list of symbols, etc. Also does
+    # misc. global initialization that needs to happen after initializing
+    # curses.
+
+    global _ERASE_CHAR
+
+    global _path_win
+    global _top_sep_win
+    global _menu_win
+    global _bot_sep_win
+    global _help_win
+
+    global _parent_screen_rows
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    global _show_help
+    global _show_name
+
+    # Looking for this in addition to KEY_BACKSPACE (which is unreliable) makes
+    # backspace work with TERM=vt100. That makes it likely to work in sane
+    # environments.
+    _ERASE_CHAR = curses.erasechar()
+    if sys.version_info[0] >= 3:
+        # erasechar() returns a one-byte bytes object on Python 3. This sets
+        # _ERASE_CHAR to a blank string if it can't be decoded, which should be
+        # harmless.
+        _ERASE_CHAR = _ERASE_CHAR.decode("utf-8", "ignore")
+
+    _init_styles()
+
+    # Hide the cursor
+    _safe_curs_set(0)
+
+    # Initialize windows
+
+    # Top row, with menu path
+    _path_win = _styled_win("path")
+
+    # Separator below menu path, with title and arrows pointing up
+    _top_sep_win = _styled_win("separator")
+
+    # List of menu entries with symbols, etc.
+    _menu_win = _styled_win("list")
+    _menu_win.keypad(True)
+
+    # Row below menu list, with arrows pointing down
+    _bot_sep_win = _styled_win("separator")
+
+    # Help window with keys at the bottom. Shows help texts in show-help mode.
+    _help_win = _styled_win("help")
+
+    # The rows we'd like the nodes in the parent menus to appear on. This
+    # prevents the scroll from jumping around when going in and out of menus.
+    _parent_screen_rows = []
+
+    # Initial state
+
+    _cur_menu = _kconf.top_node
+    _shown = _shown_nodes(_cur_menu)
+    _sel_node_i = _menu_scroll = 0
+
+    _show_help = _show_name = False
+
+    # Give windows their initial size
+    _resize_main()
+
+
+def _resize_main():
+    # Resizes the main display, with the list of symbols, etc., to fill the
+    # terminal
+
+    global _menu_scroll
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    _path_win.resize(1, screen_width)
+    _top_sep_win.resize(1, screen_width)
+    _bot_sep_win.resize(1, screen_width)
+
+    help_win_height = _SHOW_HELP_HEIGHT if _show_help else \
+        len(_MAIN_HELP_LINES)
+
+    menu_win_height = screen_height - help_win_height - 3
+
+    if menu_win_height >= 1:
+        _menu_win.resize(menu_win_height, screen_width)
+        _help_win.resize(help_win_height, screen_width)
+
+        _top_sep_win.mvwin(1, 0)
+        _menu_win.mvwin(2, 0)
+        _bot_sep_win.mvwin(2 + menu_win_height, 0)
+        _help_win.mvwin(2 + menu_win_height + 1, 0)
+    else:
+        # Degenerate case. Give up on nice rendering and just prevent errors.
+
+        menu_win_height = 1
+
+        _menu_win.resize(1, screen_width)
+        _help_win.resize(1, screen_width)
+
+        for win in _top_sep_win, _menu_win, _bot_sep_win, _help_win:
+            win.mvwin(0, 0)
+
+    # Adjust the scroll so that the selected node is still within the window,
+    # if needed
+    if _sel_node_i - _menu_scroll >= menu_win_height:
+        _menu_scroll = _sel_node_i - menu_win_height + 1
+
+
+def _height(win):
+    # Returns the height of 'win'
+
+    return win.getmaxyx()[0]
+
+
+def _width(win):
+    # Returns the width of 'win'
+
+    return win.getmaxyx()[1]
+
+
+def _enter_menu(menu):
+    # Makes 'menu' the currently displayed menu. In addition to actual 'menu's,
+    # "menu" here includes choices and symbols defined with the 'menuconfig'
+    # keyword.
+    #
+    # Returns False if 'menu' can't be entered.
+
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    if not menu.is_menuconfig:
+        # Not a menu
+        return False
+
+    shown_sub = _shown_nodes(menu)
+    # Never enter empty menus. We depend on having a current node.
+    if not shown_sub:
+        return False
+
+    # Remember where the current node appears on the screen, so we can try
+    # to get it to appear in the same place when we leave the menu
+    _parent_screen_rows.append(_sel_node_i - _menu_scroll)
+
+    # Jump into menu
+    _cur_menu = menu
+    _shown = shown_sub
+    _sel_node_i = _menu_scroll = 0
+
+    if isinstance(menu.item, Choice):
+        _select_selected_choice_sym()
+
+    return True
+
+
+def _select_selected_choice_sym():
+    # Puts the cursor on the currently selected (y-valued) choice symbol, if
+    # any. Does nothing if if the choice has no selection (is not visible/in y
+    # mode).
+
+    global _sel_node_i
+
+    choice = _cur_menu.item
+    if choice.selection:
+        # Search through all menu nodes to handle choice symbols being defined
+        # in multiple locations
+        for node in choice.selection.nodes:
+            if node in _shown:
+                _sel_node_i = _shown.index(node)
+                _center_vertically()
+                return
+
+
+def _jump_to(node):
+    # Jumps directly to the menu node 'node'
+
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+    global _show_all
+    global _parent_screen_rows
+
+    # Clear remembered menu locations. We might not even have been in the
+    # parent menus before.
+    _parent_screen_rows = []
+
+    old_show_all = _show_all
+    jump_into = (isinstance(node.item, Choice) or node.item == MENU) and \
+                node.list
+
+    # If we're jumping to a non-empty choice or menu, jump to the first entry
+    # in it instead of jumping to its menu node
+    if jump_into:
+        _cur_menu = node
+        node = node.list
+    else:
+        _cur_menu = _parent_menu(node)
+
+    _shown = _shown_nodes(_cur_menu)
+    if node not in _shown:
+        # The node wouldn't be shown. Turn on show-all to show it.
+        _show_all = True
+        _shown = _shown_nodes(_cur_menu)
+
+    _sel_node_i = _shown.index(node)
+
+    if jump_into and not old_show_all and _show_all:
+        # If we're jumping into a choice or menu and were forced to turn on
+        # show-all because the first entry wasn't visible, try turning it off.
+        # That will land us at the first visible node if there are visible
+        # nodes, and is a no-op otherwise.
+        _toggle_show_all()
+
+    _center_vertically()
+
+    # If we're jumping to a non-empty choice, jump to the selected symbol, if
+    # any
+    if jump_into and isinstance(_cur_menu.item, Choice):
+        _select_selected_choice_sym()
+
+
+def _leave_menu():
+    # Jumps to the parent menu of the current menu. Does nothing if we're in
+    # the top menu.
+
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    if _cur_menu is _kconf.top_node:
+        return
+
+    # Jump to parent menu
+    parent = _parent_menu(_cur_menu)
+    _shown = _shown_nodes(parent)
+    _sel_node_i = _shown.index(_cur_menu)
+    _cur_menu = parent
+
+    # Try to make the menu entry appear on the same row on the screen as it did
+    # before we entered the menu.
+
+    if _parent_screen_rows:
+        # The terminal might have shrunk since we were last in the parent menu
+        screen_row = min(_parent_screen_rows.pop(), _height(_menu_win) - 1)
+        _menu_scroll = max(_sel_node_i - screen_row, 0)
+    else:
+        # No saved parent menu locations, meaning we jumped directly to some
+        # node earlier
+        _center_vertically()
+
+
+def _select_next_menu_entry():
+    # Selects the menu entry after the current one, adjusting the scroll if
+    # necessary. Does nothing if we're already at the last menu entry.
+
+    global _sel_node_i
+    global _menu_scroll
+
+    if _sel_node_i < len(_shown) - 1:
+        # Jump to the next node
+        _sel_node_i += 1
+
+        # If the new node is sufficiently close to the edge of the menu window
+        # (as determined by _SCROLL_OFFSET), increase the scroll by one. This
+        # gives nice and non-jumpy behavior even when
+        # _SCROLL_OFFSET >= _height(_menu_win).
+        if _sel_node_i >= _menu_scroll + _height(_menu_win) - _SCROLL_OFFSET \
+           and _menu_scroll < _max_scroll(_shown, _menu_win):
+
+            _menu_scroll += 1
+
+
+def _select_prev_menu_entry():
+    # Selects the menu entry before the current one, adjusting the scroll if
+    # necessary. Does nothing if we're already at the first menu entry.
+
+    global _sel_node_i
+    global _menu_scroll
+
+    if _sel_node_i > 0:
+        # Jump to the previous node
+        _sel_node_i -= 1
+
+        # See _select_next_menu_entry()
+        if _sel_node_i < _menu_scroll + _SCROLL_OFFSET:
+            _menu_scroll = max(_menu_scroll - 1, 0)
+
+
+def _select_last_menu_entry():
+    # Selects the last menu entry in the current menu
+
+    global _sel_node_i
+    global _menu_scroll
+
+    _sel_node_i = len(_shown) - 1
+    _menu_scroll = _max_scroll(_shown, _menu_win)
+
+
+def _select_first_menu_entry():
+    # Selects the first menu entry in the current menu
+
+    global _sel_node_i
+    global _menu_scroll
+
+    _sel_node_i = _menu_scroll = 0
+
+
+def _toggle_show_all():
+    # Toggles show-all mode on/off. If turning it off would give no visible
+    # items in the current menu, it is left on.
+
+    global _show_all
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    # Row on the screen the cursor is on. Preferably we want the same row to
+    # stay highlighted.
+    old_row = _sel_node_i - _menu_scroll
+
+    _show_all = not _show_all
+    # List of new nodes to be shown after toggling _show_all
+    new_shown = _shown_nodes(_cur_menu)
+
+    # Find a good node to select. The selected node might disappear if show-all
+    # mode is turned off.
+
+    # Select the previously selected node itself if it is still visible. If
+    # there are visible nodes before it, select the closest one.
+    for node in _shown[_sel_node_i::-1]:
+        if node in new_shown:
+            _sel_node_i = new_shown.index(node)
+            break
+    else:
+        # No visible nodes before the previously selected node. Select the
+        # closest visible node after it instead.
+        for node in _shown[_sel_node_i + 1:]:
+            if node in new_shown:
+                _sel_node_i = new_shown.index(node)
+                break
+        else:
+            # No visible nodes at all, meaning show-all was turned off inside
+            # an invisible menu. Don't allow that, as the implementation relies
+            # on always having a selected node.
+            _show_all = True
+            return
+
+    _shown = new_shown
+
+    # Try to make the cursor stay on the same row in the menu window. This
+    # might be impossible if too many nodes have disappeared above the node.
+    _menu_scroll = max(_sel_node_i - old_row, 0)
+
+
+def _center_vertically():
+    # Centers the selected node vertically, if possible
+
+    global _menu_scroll
+
+    _menu_scroll = min(max(_sel_node_i - _height(_menu_win)//2, 0),
+                       _max_scroll(_shown, _menu_win))
+
+
+def _draw_main():
+    # Draws the "main" display, with the list of symbols, the header, and the
+    # footer.
+    #
+    # This could be optimized to only update the windows that have actually
+    # changed, but keep it simple for now and let curses sort it out.
+
+    term_width = _width(_stdscr)
+
+
+    #
+    # Update the separator row below the menu path
+    #
+
+    _top_sep_win.erase()
+
+    # Draw arrows pointing up if the symbol window is scrolled down. Draw them
+    # before drawing the title, so the title ends up on top for small windows.
+    if _menu_scroll > 0:
+        _safe_hline(_top_sep_win, 0, 4, curses.ACS_UARROW, _N_SCROLL_ARROWS)
+
+    # Add the 'mainmenu' text as the title, centered at the top
+    _safe_addstr(_top_sep_win,
+                 0, max((term_width - len(_kconf.mainmenu_text))//2, 0),
+                 _kconf.mainmenu_text)
+
+    _top_sep_win.noutrefresh()
+
+    # Note: The menu path at the top is deliberately updated last. See below.
+
+    #
+    # Update the symbol window
+    #
+
+    _menu_win.erase()
+
+    # Draw the _shown nodes starting from index _menu_scroll up to either as
+    # many as fit in the window, or to the end of _shown
+    for i in range(_menu_scroll,
+                   min(_menu_scroll + _height(_menu_win), len(_shown))):
+
+        node = _shown[i]
+
+        # The 'not _show_all' test avoids showing invisible items in red
+        # outside show-all mode, which could look confusing/broken. Invisible
+        # symbols show up outside show-all mode if an invisible symbol has
+        # visible children in an implicit (indented) menu.
+        if _visible(node) or not _show_all:
+            style = _style["selection" if i == _sel_node_i else "list"]
+        else:
+            style = _style["inv-selection" if i == _sel_node_i else "inv-list"]
+
+        _safe_addstr(_menu_win, i - _menu_scroll, 0, _node_str(node), style)
+
+    _menu_win.noutrefresh()
+
+
+    #
+    # Update the bottom separator window
+    #
+
+    _bot_sep_win.erase()
+
+    # Draw arrows pointing down if the symbol window is scrolled up
+    if _menu_scroll < _max_scroll(_shown, _menu_win):
+        _safe_hline(_bot_sep_win, 0, 4, curses.ACS_DARROW, _N_SCROLL_ARROWS)
+
+    # Indicate when show-name/show-help/show-all mode is enabled
+    enabled_modes = []
+    if _show_help:
+        enabled_modes.append("show-help (toggle with [F])")
+    if _show_name:
+        enabled_modes.append("show-name")
+    if _show_all:
+        enabled_modes.append("show-all")
+    if enabled_modes:
+        s = " and ".join(enabled_modes) + " mode enabled"
+        _safe_addstr(_bot_sep_win, 0, max(term_width - len(s) - 2, 0), s)
+
+    _bot_sep_win.noutrefresh()
+
+
+    #
+    # Update the help window, which shows either key bindings or help texts
+    #
+
+    _help_win.erase()
+
+    if _show_help:
+        node = _shown[_sel_node_i]
+        if isinstance(node.item, (Symbol, Choice)) and node.help:
+            help_lines = textwrap.wrap(node.help, _width(_help_win))
+            for i in range(min(_height(_help_win), len(help_lines))):
+                _safe_addstr(_help_win, i, 0, help_lines[i])
+        else:
+            _safe_addstr(_help_win, 0, 0, "(no help)")
+    else:
+        for i, line in enumerate(_MAIN_HELP_LINES):
+            _safe_addstr(_help_win, i, 0, line)
+
+    _help_win.noutrefresh()
+
+
+    #
+    # Update the top row with the menu path.
+    #
+    # Doing this last leaves the cursor on the top row, which avoids some minor
+    # annoying jumpiness in gnome-terminal when reducing the height of the
+    # terminal. It seems to happen whenever the row with the cursor on it
+    # disappears.
+    #
+
+    _path_win.erase()
+
+    # Draw the menu path ("(Top) -> Menu -> Submenu -> ...")
+
+    menu_prompts = []
+
+    menu = _cur_menu
+    while menu is not _kconf.top_node:
+        # Promptless choices can be entered in show-all mode. Use
+        # standard_sc_expr_str() for them, so they show up as
+        # '<choice (name if any)>'.
+        menu_prompts.append(menu.prompt[0] if menu.prompt else
+                            standard_sc_expr_str(menu.item))
+        menu = menu.parent
+    menu_prompts.append("(Top)")
+    menu_prompts.reverse()
+
+    # Hack: We can't put ACS_RARROW directly in the string. Temporarily
+    # represent it with NULL.
+    menu_path_str = " \0 ".join(menu_prompts)
+
+    # Scroll the menu path to the right if needed to make the current menu's
+    # title visible
+    if len(menu_path_str) > term_width:
+        menu_path_str = menu_path_str[len(menu_path_str) - term_width:]
+
+    # Print the path with the arrows reinserted
+    split_path = menu_path_str.split("\0")
+    _safe_addstr(_path_win, split_path[0])
+    for s in split_path[1:]:
+        _safe_addch(_path_win, curses.ACS_RARROW)
+        _safe_addstr(_path_win, s)
+
+    _path_win.noutrefresh()
+
+
+def _parent_menu(node):
+    # Returns the menu node of the menu that contains 'node'. In addition to
+    # proper 'menu's, this might also be a 'menuconfig' symbol or a 'choice'.
+    # "Menu" here means a menu in the interface.
+
+    menu = node.parent
+    while not menu.is_menuconfig:
+        menu = menu.parent
+    return menu
+
+
+def _shown_nodes(menu):
+    # Returns the list of menu nodes from 'menu' (see _parent_menu()) that
+    # would be shown when entering it
+
+    def rec(node):
+        res = []
+
+        while node:
+            if _visible(node) or _show_all:
+                res.append(node)
+                if node.list and not node.is_menuconfig:
+                    # Nodes from implicit menu created from dependencies. Will
+                    # be shown indented. Note that is_menuconfig is True for
+                    # menus and choices as well as 'menuconfig' symbols.
+                    res += rec(node.list)
+
+            elif node.list and isinstance(node.item, Symbol):
+                # Show invisible symbols if they have visible children. This
+                # can happen for an m/y-valued symbol with an optional prompt
+                # ('prompt "foo" is COND') that is currently disabled. Note
+                # that it applies to both 'config' and 'menuconfig' symbols.
+                shown_children = rec(node.list)
+                if shown_children:
+                    res.append(node)
+                    if not node.is_menuconfig:
+                        res += shown_children
+
+            node = node.next
+
+        return res
+
+    if isinstance(menu.item, Choice):
+        # For named choices defined in multiple locations, entering the choice
+        # at a particular menu node would normally only show the choice symbols
+        # defined there (because that's what the MenuNode tree looks like).
+        #
+        # That might look confusing, and makes extending choices by defining
+        # them in multiple locations less useful. Instead, gather all the child
+        # menu nodes for all the choices whenever a choice is entered. That
+        # makes all choice symbols visible at all locations.
+        #
+        # Choices can contain non-symbol items (people do all sorts of weird
+        # stuff with them), hence the generality here. We really need to
+        # preserve the menu tree at each choice location.
+        #
+        # Note: Named choices are pretty broken in the C tools, and this is
+        # super obscure, so you probably won't find much that relies on this.
+        # This whole 'if' could be deleted if you don't care about defining
+        # choices in multiple locations to add symbols (which will still work,
+        # just with things being displayed in a way that might be unexpected).
+
+        # Do some additional work to avoid listing choice symbols twice if all
+        # or part of the choice is copied in multiple locations (e.g. by
+        # including some Kconfig file multiple times). We give the prompts at
+        # the current location precedence.
+        seen_syms = {node.item for node in rec(menu.list)
+                     if isinstance(node.item, Symbol)}
+        res = []
+        for choice_node in menu.item.nodes:
+            for node in rec(choice_node.list):
+                # 'choice_node is menu' checks if we're dealing with the
+                # current location
+                if node.item not in seen_syms or choice_node is menu:
+                    res.append(node)
+                    if isinstance(node.item, Symbol):
+                        seen_syms.add(node.item)
+        return res
+
+    return rec(menu.list)
+
+
+def _visible(node):
+    # Returns True if the node should appear in the menu (outside show-all
+    # mode)
+
+    return node.prompt and expr_value(node.prompt[1]) and not \
+        (node.item == MENU and not expr_value(node.visibility))
+
+
+def _change_node(node):
+    # Changes the value of the menu node 'node' if it is a symbol. Bools and
+    # tristates are toggled, while other symbol types pop up a text entry
+    # dialog.
+    #
+    # Returns False if the value of 'node' can't be changed.
+
+    if not _changeable(node):
+        return False
+
+    # sc = symbol/choice
+    sc = node.item
+
+    if sc.orig_type in (INT, HEX, STRING):
+        s = sc.str_value
+
+        while True:
+            s = _input_dialog(
+                "{} ({})".format(node.prompt[0], TYPE_TO_STR[sc.orig_type]),
+                s, _range_info(sc))
+
+            if s is None:
+                break
+
+            if sc.orig_type in (INT, HEX):
+                s = s.strip()
+
+                # 'make menuconfig' does this too. Hex values not starting with
+                # '0x' are accepted when loading .config files though.
+                if sc.orig_type == HEX and not s.startswith(("0x", "0X")):
+                    s = "0x" + s
+
+            if _check_valid(sc, s):
+                _set_val(sc, s)
+                break
+
+    elif len(sc.assignable) == 1:
+        # Handles choice symbols for choices in y mode, which are a special
+        # case: .assignable can be (2,) while .tri_value is 0.
+        _set_val(sc, sc.assignable[0])
+
+    else:
+        # Set the symbol to the value after the current value in
+        # sc.assignable, with wrapping
+        val_index = sc.assignable.index(sc.tri_value)
+        _set_val(sc, sc.assignable[(val_index + 1) % len(sc.assignable)])
+
+
+    if _is_y_mode_choice_sym(sc) and not node.list:
+        # Immediately jump to the parent menu after making a choice selection,
+        # like 'make menuconfig' does, except if the menu node has children
+        # (which can happen if a symbol 'depends on' a choice symbol that
+        # immediately precedes it).
+        _leave_menu()
+
+
+    return True
+
+
+def _changeable(node):
+    # Returns True if the value if 'node' can be changed
+
+    sc = node.item
+
+    if not isinstance(sc, (Symbol, Choice)):
+        return False
+
+    # This will hit for invisible symbols, which appear in show-all mode and
+    # when an invisible symbol has visible children (which can happen e.g. for
+    # symbols with optional prompts)
+    if not (node.prompt and expr_value(node.prompt[1])):
+        return False
+
+    return sc.orig_type in (STRING, INT, HEX) or len(sc.assignable) > 1 \
+        or _is_y_mode_choice_sym(sc)
+
+
+def _set_sel_node_tri_val(tri_val):
+    # Sets the value of the currently selected menu entry to 'tri_val', if that
+    # value can be assigned
+
+    sc = _shown[_sel_node_i].item
+    if isinstance(sc, (Symbol, Choice)) and tri_val in sc.assignable:
+        _set_val(sc, tri_val)
+
+
+def _set_val(sc, val):
+    # Wrapper around Symbol/Choice.set_value() for updating the menu state and
+    # _conf_changed
+
+    global _conf_changed
+
+    # Use the string representation of tristate values. This makes the format
+    # consistent for all symbol types.
+    if val in TRI_TO_STR:
+        val = TRI_TO_STR[val]
+
+    if val != sc.str_value:
+        sc.set_value(val)
+        _conf_changed = True
+
+        # Changing the value of the symbol might have changed what items in the
+        # current menu are visible. Recalculate the state.
+        _update_menu()
+
+
+def _update_menu():
+    # Updates the current menu after the value of a symbol or choice has been
+    # changed. Changing a value might change which items in the menu are
+    # visible.
+    #
+    # If possible, preserves the location of the cursor on the screen when
+    # items are added/removed above the selected item.
+
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    # Row on the screen the cursor was on
+    old_row = _sel_node_i - _menu_scroll
+
+    sel_node = _shown[_sel_node_i]
+
+    # New visible nodes
+    _shown = _shown_nodes(_cur_menu)
+
+    # New index of selected node
+    _sel_node_i = _shown.index(sel_node)
+
+    # Try to make the cursor stay on the same row in the menu window. This
+    # might be impossible if too many nodes have disappeared above the node.
+    _menu_scroll = max(_sel_node_i - old_row, 0)
+
+
+def _input_dialog(title, initial_text, info_text=None):
+    # Pops up a dialog that prompts the user for a string
+    #
+    # title:
+    #   Title to display at the top of the dialog window's border
+    #
+    # initial_text:
+    #   Initial text to prefill the input field with
+    #
+    # info_text:
+    #   String to show next to the input field. If None, just the input field
+    #   is shown.
+
+    win = _styled_win("body")
+    win.keypad(True)
+
+    info_lines = info_text.split("\n") if info_text else []
+
+    # Give the input dialog its initial size
+    _resize_input_dialog(win, title, info_lines)
+
+    _safe_curs_set(2)
+
+    # Input field text
+    s = initial_text
+
+    # Cursor position
+    i = len(initial_text)
+
+    def edit_width():
+        return _width(win) - 4
+
+    # Horizontal scroll offset
+    hscroll = max(i - edit_width() + 1, 0)
+
+    while True:
+        # Draw the "main" display with the menu, etc., so that resizing still
+        # works properly. This is like a stack of windows, only hardcoded for
+        # now.
+        _draw_main()
+        _draw_input_dialog(win, title, info_lines, s, i, hscroll)
+        curses.doupdate()
+
+
+        c = _getch_compat(win)
+
+        if c == curses.KEY_RESIZE:
+            # Resize the main display too. The dialog floats above it.
+            _resize_main()
+            _resize_input_dialog(win, title, info_lines)
+
+        elif c == "\n":
+            _safe_curs_set(0)
+            return s
+
+        elif c == "\x1B":  # \x1B = ESC
+            _safe_curs_set(0)
+            return None
+
+        else:
+            s, i, hscroll = _edit_text(c, s, i, hscroll, edit_width())
+
+
+def _resize_input_dialog(win, title, info_lines):
+    # Resizes the input dialog to a size appropriate for the terminal size
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    win_height = 5
+    if info_lines:
+        win_height += len(info_lines) + 1
+    win_height = min(win_height, screen_height)
+
+    win_width = max(_INPUT_DIALOG_MIN_WIDTH,
+                    len(title) + 4,
+                    *(len(line) + 4 for line in info_lines))
+    win_width = min(win_width, screen_width)
+
+    win.resize(win_height, win_width)
+    win.mvwin((screen_height - win_height)//2,
+              (screen_width - win_width)//2)
+
+
+def _draw_input_dialog(win, title, info_lines, s, i, hscroll):
+    edit_width = _width(win) - 4
+
+    win.erase()
+
+    # Note: Perhaps having a separate window for the input field would be nicer
+    visible_s = s[hscroll:hscroll + edit_width]
+    _safe_addstr(win, 2, 2, visible_s + " "*(edit_width - len(visible_s)),
+                 _style["edit"])
+
+    for linenr, line in enumerate(info_lines):
+        _safe_addstr(win, 4 + linenr, 2, line)
+
+    # Draw the frame last so that it overwrites the body text for small windows
+    _draw_frame(win, title)
+
+    _safe_move(win, 2, 2 + i - hscroll)
+
+    win.noutrefresh()
+
+
+def _load_dialog():
+    # Dialog for loading a new configuration
+
+    global _conf_changed
+    global _conf_filename
+    global _show_all
+
+    if _conf_changed:
+        c = _key_dialog(
+            "Load",
+            "You have unsaved changes. Load new\n"
+            "configuration anyway?\n"
+            "\n"
+            "         (O)K  (C)ancel",
+            "oc")
+
+        if c is None or c == "c":
+            return
+
+    filename = _conf_filename
+    while True:
+        filename = _input_dialog("File to load", filename, _load_save_info())
+        if filename is None:
+            return
+
+        filename = os.path.expanduser(filename)
+
+        if _try_load(filename):
+            _conf_filename = filename
+            _conf_changed = _needs_save()
+
+            # Turn on show-all mode if the selected node is not visible after
+            # loading the new configuration. _shown still holds the old state.
+            if _shown[_sel_node_i] not in _shown_nodes(_cur_menu):
+                _show_all = True
+
+            _update_menu()
+
+            # The message dialog indirectly updates the menu display, so _msg()
+            # must be called after the new state has been initialized
+            _msg("Success", "Loaded " + filename)
+            return
+
+
+def _try_load(filename):
+    # Tries to load a configuration file. Pops up an error and returns False on
+    # failure.
+    #
+    # filename:
+    #   Configuration file to load
+
+    try:
+        _kconf.load_config(filename)
+        return True
+    except EnvironmentError as e:
+        _error("Error loading '{}'\n\n{} (errno: {})"
+               .format(filename, e.strerror, errno.errorcode[e.errno]))
+        return False
+
+
+def _save_dialog(save_fn, default_filename, description):
+    # Dialog for saving the current configuration
+    #
+    # save_fn:
+    #   Function to call with 'filename' to save the file
+    #
+    # default_filename:
+    #   Prefilled filename in the input field
+    #
+    # description:
+    #   String describing the thing being saved
+    #
+    # Return value:
+    #   The path to the saved file, or None if no file was saved
+
+    filename = default_filename
+    while True:
+        filename = _input_dialog("Filename to save {} to".format(description),
+                                 filename, _load_save_info())
+        if filename is None:
+            return None
+
+        filename = os.path.expanduser(filename)
+
+        msg = _try_save(save_fn, filename, description)
+        if msg:
+            _msg("Success", msg)
+            return filename
+
+
+def _try_save(save_fn, filename, description):
+    # Tries to save a configuration file. Returns a message to print on
+    # success.
+    #
+    # save_fn:
+    #   Function to call with 'filename' to save the file
+    #
+    # description:
+    #   String describing the thing being saved
+    #
+    # Return value:
+    #   A message to print on success, and None on failure
+
+    try:
+        # save_fn() returns a message to print
+        return save_fn(filename)
+    except EnvironmentError as e:
+        _error("Error saving {} to '{}'\n\n{} (errno: {})"
+               .format(description, e.filename, e.strerror,
+                       errno.errorcode[e.errno]))
+        return None
+
+
+def _key_dialog(title, text, keys):
+    # Pops up a dialog that can be closed by pressing a key
+    #
+    # title:
+    #   Title to display at the top of the dialog window's border
+    #
+    # text:
+    #   Text to show in the dialog
+    #
+    # keys:
+    #   List of keys that will close the dialog. Other keys (besides ESC) are
+    #   ignored. The caller is responsible for providing a hint about which
+    #   keys can be pressed in 'text'.
+    #
+    # Return value:
+    #   The key that was pressed to close the dialog. Uppercase characters are
+    #   converted to lowercase. ESC will always close the dialog, and returns
+    #   None.
+
+    win = _styled_win("body")
+    win.keypad(True)
+
+    _resize_key_dialog(win, text)
+
+    while True:
+        # See _input_dialog()
+        _draw_main()
+        _draw_key_dialog(win, title, text)
+        curses.doupdate()
+
+
+        c = _getch_compat(win)
+
+        if c == curses.KEY_RESIZE:
+            # Resize the main display too. The dialog floats above it.
+            _resize_main()
+            _resize_key_dialog(win, text)
+
+        elif c == "\x1B":  # \x1B = ESC
+            return None
+
+        elif isinstance(c, str):
+            c = c.lower()
+            if c in keys:
+                return c
+
+
+def _resize_key_dialog(win, text):
+    # Resizes the key dialog to a size appropriate for the terminal size
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    lines = text.split("\n")
+
+    win_height = min(len(lines) + 4, screen_height)
+    win_width = min(max(len(line) for line in lines) + 4, screen_width)
+
+    win.resize(win_height, win_width)
+    win.mvwin((screen_height - win_height)//2,
+              (screen_width - win_width)//2)
+
+
+def _draw_key_dialog(win, title, text):
+    win.erase()
+
+    for i, line in enumerate(text.split("\n")):
+        _safe_addstr(win, 2 + i, 2, line)
+
+    # Draw the frame last so that it overwrites the body text for small windows
+    _draw_frame(win, title)
+
+    win.noutrefresh()
+
+
+def _draw_frame(win, title):
+    # Draw a frame around the inner edges of 'win', with 'title' at the top
+
+    win_height, win_width = win.getmaxyx()
+
+    win.attron(_style["frame"])
+
+    # Draw top/bottom edge
+    _safe_hline(win,              0, 0, " ", win_width)
+    _safe_hline(win, win_height - 1, 0, " ", win_width)
+
+    # Draw left/right edge
+    _safe_vline(win, 0,             0, " ", win_height)
+    _safe_vline(win, 0, win_width - 1, " ", win_height)
+
+    # Draw title
+    _safe_addstr(win, 0, max((win_width - len(title))//2, 0), title)
+
+    win.attroff(_style["frame"])
+
+
+def _jump_to_dialog():
+    # Implements the jump-to dialog, where symbols can be looked up via
+    # incremental search and jumped to.
+    #
+    # Returns True if the user jumped to a symbol, and False if the dialog was
+    # canceled.
+
+    s = ""  # Search text
+    prev_s = None  # Previous search text
+    s_i = 0  # Search text cursor position
+    hscroll = 0  # Horizontal scroll offset
+
+    sel_node_i = 0  # Index of selected row
+    scroll = 0  # Index in 'matches' of the top row of the list
+
+    # Edit box at the top
+    edit_box = _styled_win("jump-edit")
+    edit_box.keypad(True)
+
+    # List of matches
+    matches_win = _styled_win("list")
+
+    # Bottom separator, with arrows pointing down
+    bot_sep_win = _styled_win("separator")
+
+    # Help window with instructions at the bottom
+    help_win = _styled_win("help")
+
+    # Give windows their initial size
+    _resize_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                           sel_node_i, scroll)
+
+    _safe_curs_set(2)
+
+    # Logic duplication with _select_{next,prev}_menu_entry(), except we do a
+    # functional variant that returns the new (sel_node_i, scroll) values to
+    # avoid 'nonlocal'. TODO: Can this be factored out in some nice way?
+
+    def select_next_match():
+        if sel_node_i == len(matches) - 1:
+            return sel_node_i, scroll
+
+        if sel_node_i + 1 >= scroll + _height(matches_win) - _SCROLL_OFFSET \
+           and scroll < _max_scroll(matches, matches_win):
+
+            return sel_node_i + 1, scroll + 1
+
+        return sel_node_i + 1, scroll
+
+    def select_prev_match():
+        if sel_node_i == 0:
+            return sel_node_i, scroll
+
+        if sel_node_i - 1 < scroll + _SCROLL_OFFSET:
+            return sel_node_i - 1, max(scroll - 1, 0)
+
+        return sel_node_i - 1, scroll
+
+    while True:
+        if s != prev_s:
+            # The search text changed. Find new matching nodes.
+
+            prev_s = s
+
+            try:
+                # We could use re.IGNORECASE here instead of lower(), but this
+                # is noticeably less jerky while inputting regexes like
+                # '.*debug$' (though the '.*' is redundant there). Those
+                # probably have bad interactions with re.search(), which
+                # matches anywhere in the string.
+                #
+                # It's not horrible either way. Just a bit smoother.
+                regex_searches = [re.compile(regex).search
+                                  for regex in s.lower().split()]
+
+                # No exception thrown, so the regexes are okay
+                bad_re = None
+
+                # List of matching nodes
+                matches = []
+                add_match = matches.append
+
+                # Search symbols and choices
+
+                for node in _sorted_sc_nodes():
+                    # Symbol/choice
+                    sc = node.item
+
+                    for search in regex_searches:
+                        # Both the name and the prompt might be missing, since
+                        # we're searching both symbols and choices
+
+                        # Does the regex match either the symbol name or the
+                        # prompt (if any)?
+                        if not (sc.name and search(sc.name.lower()) or
+                                node.prompt and search(node.prompt[0].lower())):
+
+                            # Give up on the first regex that doesn't match, to
+                            # speed things up a bit when multiple regexes are
+                            # entered
+                            break
+
+                    else:
+                        add_match(node)
+
+                # Search menus and comments
+
+                for node in _sorted_menu_comment_nodes():
+                    for search in regex_searches:
+                        if not search(node.prompt[0].lower()):
+                            break
+                    else:
+                        add_match(node)
+
+            except re.error as e:
+                # Bad regex. Remember the error message so we can show it.
+                bad_re = "Bad regular expression"
+                # re.error.msg was added in Python 3.5
+                if hasattr(e, "msg"):
+                    bad_re += ": " + e.msg
+
+                matches = []
+
+            # Reset scroll and jump to the top of the list of matches
+            sel_node_i = scroll = 0
+
+        _draw_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                             s, s_i, hscroll,
+                             bad_re, matches, sel_node_i, scroll)
+        curses.doupdate()
+
+
+        c = _getch_compat(edit_box)
+
+        if c == "\n":
+            if matches:
+                _jump_to(matches[sel_node_i])
+                _safe_curs_set(0)
+                return True
+
+        elif c == "\x1B":  # \x1B = ESC
+            _safe_curs_set(0)
+            return False
+
+        elif c == curses.KEY_RESIZE:
+            # We adjust the scroll so that the selected node stays visible in
+            # the list when the terminal is resized, hence the 'scroll'
+            # assignment
+            scroll = _resize_jump_to_dialog(
+                edit_box, matches_win, bot_sep_win, help_win,
+                sel_node_i, scroll)
+
+        elif c == "\x06":  # \x06 = Ctrl-F
+            if matches:
+                _safe_curs_set(0)
+                _info_dialog(matches[sel_node_i], True)
+                _safe_curs_set(2)
+
+                scroll = _resize_jump_to_dialog(
+                    edit_box, matches_win, bot_sep_win, help_win,
+                    sel_node_i, scroll)
+
+        elif c == curses.KEY_DOWN:
+            sel_node_i, scroll = select_next_match()
+
+        elif c == curses.KEY_UP:
+            sel_node_i, scroll = select_prev_match()
+
+        elif c in (curses.KEY_NPAGE, "\x04"):  # Page Down/Ctrl-D
+            # Keep it simple. This way we get sane behavior for small windows,
+            # etc., for free.
+            for _ in range(_PG_JUMP):
+                sel_node_i, scroll = select_next_match()
+
+        # Page Up (no Ctrl-U, as it's already used by the edit box)
+        elif c == curses.KEY_PPAGE:
+            for _ in range(_PG_JUMP):
+                sel_node_i, scroll = select_prev_match()
+
+        elif c == curses.KEY_END:
+            sel_node_i = len(matches) - 1
+            scroll = _max_scroll(matches, matches_win)
+
+        elif c == curses.KEY_HOME:
+            sel_node_i = scroll = 0
+
+        else:
+            s, s_i, hscroll = _edit_text(c, s, s_i, hscroll,
+                                         _width(edit_box) - 2)
+
+
+# Obscure Python: We never pass a value for cached_nodes, and it keeps pointing
+# to the same list. This avoids a global.
+def _sorted_sc_nodes(cached_nodes=[]):
+    # Returns a sorted list of symbol and choice nodes to search. The symbol
+    # nodes appear first, sorted by name, and then the choice nodes, sorted by
+    # prompt and (secondarily) name.
+
+    if not cached_nodes:
+        # Add symbol nodes
+        for sym in sorted(_kconf.unique_defined_syms,
+                          key=lambda sym: sym.name):
+            # += is in-place for lists
+            cached_nodes += sym.nodes
+
+        # Add choice nodes
+
+        choices = sorted(_kconf.unique_choices,
+                         key=lambda choice: choice.name or "")
+
+        cached_nodes += sorted(
+            [node
+             for choice in choices
+                 for node in choice.nodes],
+            key=lambda node: node.prompt[0] if node.prompt else "")
+
+    return cached_nodes
+
+
+def _sorted_menu_comment_nodes(cached_nodes=[]):
+    # Returns a list of menu and comment nodes to search, sorted by prompt,
+    # with the menus first
+
+    if not cached_nodes:
+        def prompt_text(mc):
+            return mc.prompt[0]
+
+        cached_nodes += sorted(_kconf.menus, key=prompt_text)
+        cached_nodes += sorted(_kconf.comments, key=prompt_text)
+
+    return cached_nodes
+
+
+def _resize_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                           sel_node_i, scroll):
+    # Resizes the jump-to dialog to fill the terminal.
+    #
+    # Returns the new scroll index. We adjust the scroll if needed so that the
+    # selected node stays visible.
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    bot_sep_win.resize(1, screen_width)
+
+    help_win_height = len(_JUMP_TO_HELP_LINES)
+    matches_win_height = screen_height - help_win_height - 4
+
+    if matches_win_height >= 1:
+        edit_box.resize(3, screen_width)
+        matches_win.resize(matches_win_height, screen_width)
+        help_win.resize(help_win_height, screen_width)
+
+        matches_win.mvwin(3, 0)
+        bot_sep_win.mvwin(3 + matches_win_height, 0)
+        help_win.mvwin(3 + matches_win_height + 1, 0)
+    else:
+        # Degenerate case. Give up on nice rendering and just prevent errors.
+
+        matches_win_height = 1
+
+        edit_box.resize(screen_height, screen_width)
+        matches_win.resize(1, screen_width)
+        help_win.resize(1, screen_width)
+
+        for win in matches_win, bot_sep_win, help_win:
+            win.mvwin(0, 0)
+
+    # Adjust the scroll so that the selected row is still within the window, if
+    # needed
+    if sel_node_i - scroll >= matches_win_height:
+        return sel_node_i - matches_win_height + 1
+    return scroll
+
+
+def _draw_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                         s, s_i, hscroll,
+                         bad_re, matches, sel_node_i, scroll):
+
+    edit_width = _width(edit_box) - 2
+
+
+    #
+    # Update list of matches
+    #
+
+    matches_win.erase()
+
+    if matches:
+        for i in range(scroll,
+                       min(scroll + _height(matches_win), len(matches))):
+
+            node = matches[i]
+
+            if isinstance(node.item, (Symbol, Choice)):
+                node_str = _name_and_val_str(node.item)
+                if node.prompt:
+                    node_str += ' "{}"'.format(node.prompt[0])
+            elif node.item == MENU:
+                node_str = 'menu "{}"'.format(node.prompt[0])
+            else:  # node.item == COMMENT
+                node_str = 'comment "{}"'.format(node.prompt[0])
+
+            _safe_addstr(matches_win, i - scroll, 0, node_str,
+                         _style["selection" if i == sel_node_i else "list"])
+
+    else:
+        # bad_re holds the error message from the re.error exception on errors
+        _safe_addstr(matches_win, 0, 0, bad_re or "No matches")
+
+    matches_win.noutrefresh()
+
+
+    #
+    # Update bottom separator line
+    #
+
+    bot_sep_win.erase()
+
+    # Draw arrows pointing down if the symbol list is scrolled up
+    if scroll < _max_scroll(matches, matches_win):
+        _safe_hline(bot_sep_win, 0, 4, curses.ACS_DARROW, _N_SCROLL_ARROWS)
+
+    bot_sep_win.noutrefresh()
+
+
+    #
+    # Update help window at bottom
+    #
+
+    help_win.erase()
+
+    for i, line in enumerate(_JUMP_TO_HELP_LINES):
+        _safe_addstr(help_win, i, 0, line)
+
+    help_win.noutrefresh()
+
+
+    #
+    # Update edit box. We do this last since it makes it handy to position the
+    # cursor.
+    #
+
+    edit_box.erase()
+
+    _draw_frame(edit_box, "Jump to symbol/choice/menu/comment")
+
+    # Draw arrows pointing up if the symbol list is scrolled down
+    if scroll > 0:
+        # TODO: Bit ugly that _style["frame"] is repeated here
+        _safe_hline(edit_box, 2, 4, curses.ACS_UARROW, _N_SCROLL_ARROWS,
+                    _style["frame"])
+
+    visible_s = s[hscroll:hscroll + edit_width]
+    _safe_addstr(edit_box, 1, 1, visible_s)
+
+    _safe_move(edit_box, 1, 1 + s_i - hscroll)
+
+    edit_box.noutrefresh()
+
+
+def _info_dialog(node, from_jump_to_dialog):
+    # Shows a fullscreen window with information about 'node'.
+    #
+    # If 'from_jump_to_dialog' is True, the information dialog was opened from
+    # within the jump-to-dialog. In this case, we make '/' from within the
+    # information dialog just return, to avoid a confusing recursive invocation
+    # of the jump-to-dialog.
+
+    # Top row, with title and arrows point up
+    top_line_win = _styled_win("separator")
+
+    # Text display
+    text_win = _styled_win("text")
+    text_win.keypad(True)
+
+    # Bottom separator, with arrows pointing down
+    bot_sep_win = _styled_win("separator")
+
+    # Help window with keys at the bottom
+    help_win = _styled_win("help")
+
+    # Give windows their initial size
+    _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win)
+
+
+    # Get lines of help text
+    lines = _info_str(node).split("\n")
+
+    # Index of first row in 'lines' to show
+    scroll = 0
+
+    while True:
+        _draw_info_dialog(node, lines, scroll, top_line_win, text_win,
+                          bot_sep_win, help_win)
+        curses.doupdate()
+
+
+        c = _getch_compat(text_win)
+
+        if c == curses.KEY_RESIZE:
+            _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win)
+
+        elif c in (curses.KEY_DOWN, "j", "J"):
+            if scroll < _max_scroll(lines, text_win):
+                scroll += 1
+
+        elif c in (curses.KEY_NPAGE, "\x04"):  # Page Down/Ctrl-D
+            scroll = min(scroll + _PG_JUMP, _max_scroll(lines, text_win))
+
+        elif c in (curses.KEY_PPAGE, "\x15"):  # Page Up/Ctrl-U
+            scroll = max(scroll - _PG_JUMP, 0)
+
+        elif c in (curses.KEY_END, "G"):
+            scroll = _max_scroll(lines, text_win)
+
+        elif c in (curses.KEY_HOME, "g"):
+            scroll = 0
+
+        elif c in (curses.KEY_UP, "k", "K"):
+            if scroll > 0:
+                scroll -= 1
+
+        elif c == "/":
+            # Support starting a search from within the information dialog
+
+            if from_jump_to_dialog:
+                # Avoid recursion
+                return
+
+            if _jump_to_dialog():
+                # Jumped to a symbol. Cancel the information dialog.
+                return
+
+            # Stay in the information dialog if the jump-to dialog was
+            # canceled. Resize it in case the terminal was resized while the
+            # fullscreen jump-to dialog was open.
+            _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win)
+
+        elif c in (curses.KEY_LEFT, curses.KEY_BACKSPACE, _ERASE_CHAR,
+                   "\x1B",  # \x1B = ESC
+                   "q", "Q", "h", "H"):
+
+            return
+
+
+def _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win):
+    # Resizes the info dialog to fill the terminal
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    top_line_win.resize(1, screen_width)
+    bot_sep_win.resize(1, screen_width)
+
+    help_win_height = len(_INFO_HELP_LINES)
+    text_win_height = screen_height - help_win_height - 2
+
+    if text_win_height >= 1:
+        text_win.resize(text_win_height, screen_width)
+        help_win.resize(help_win_height, screen_width)
+
+        text_win.mvwin(1, 0)
+        bot_sep_win.mvwin(1 + text_win_height, 0)
+        help_win.mvwin(1 + text_win_height + 1, 0)
+    else:
+        # Degenerate case. Give up on nice rendering and just prevent errors.
+
+        text_win.resize(1, screen_width)
+        help_win.resize(1, screen_width)
+
+        for win in text_win, bot_sep_win, help_win:
+            win.mvwin(0, 0)
+
+
+def _draw_info_dialog(node, lines, scroll, top_line_win, text_win,
+                      bot_sep_win, help_win):
+
+    text_win_height, text_win_width = text_win.getmaxyx()
+
+
+    # Note: The top row is deliberately updated last. See _draw_main().
+
+    #
+    # Update text display
+    #
+
+    text_win.erase()
+
+    for i, line in enumerate(lines[scroll:scroll + text_win_height]):
+        _safe_addstr(text_win, i, 0, line)
+
+    text_win.noutrefresh()
+
+
+    #
+    # Update bottom separator line
+    #
+
+    bot_sep_win.erase()
+
+    # Draw arrows pointing down if the symbol window is scrolled up
+    if scroll < _max_scroll(lines, text_win):
+        _safe_hline(bot_sep_win, 0, 4, curses.ACS_DARROW, _N_SCROLL_ARROWS)
+
+    bot_sep_win.noutrefresh()
+
+
+    #
+    # Update help window at bottom
+    #
+
+    help_win.erase()
+
+    for i, line in enumerate(_INFO_HELP_LINES):
+        _safe_addstr(help_win, i, 0, line)
+
+    help_win.noutrefresh()
+
+
+    #
+    # Update top row
+    #
+
+    top_line_win.erase()
+
+    # Draw arrows pointing up if the information window is scrolled down. Draw
+    # them before drawing the title, so the title ends up on top for small
+    # windows.
+    if scroll > 0:
+        _safe_hline(top_line_win, 0, 4, curses.ACS_UARROW, _N_SCROLL_ARROWS)
+
+    title = ("Symbol" if isinstance(node.item, Symbol) else
+             "Choice" if isinstance(node.item, Choice) else
+             "Menu"   if node.item == MENU else
+             "Comment") + " information"
+    _safe_addstr(top_line_win, 0, max((text_win_width - len(title))//2, 0),
+                 title)
+
+    top_line_win.noutrefresh()
+
+
+def _info_str(node):
+    # Returns information about the menu node 'node' as a string.
+    #
+    # The helper functions are responsible for adding newlines. This allows
+    # them to return "" if they don't want to add any output.
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+
+        return (
+            _name_info(sym) +
+            _prompt_info(sym) +
+            "Type: {}\n".format(TYPE_TO_STR[sym.type]) +
+            _value_info(sym) +
+            _help_info(sym) +
+            _direct_dep_info(sym) +
+            _defaults_info(sym) +
+            _select_imply_info(sym) +
+            _kconfig_def_info(sym)
+        )
+
+    if isinstance(node.item, Choice):
+        choice = node.item
+
+        return (
+            _name_info(choice) +
+            _prompt_info(choice) +
+            "Type: {}\n".format(TYPE_TO_STR[choice.type]) +
+            'Mode: {}\n'.format(choice.str_value) +
+            _help_info(choice) +
+            _choice_syms_info(choice) +
+            _direct_dep_info(choice) +
+            _defaults_info(choice) +
+            _kconfig_def_info(choice)
+        )
+
+    # node.item in (MENU, COMMENT)
+    return _kconfig_def_info(node)
+
+
+def _name_info(sc):
+    # Returns a string with the name of the symbol/choice. Names are optional
+    # for choices.
+
+    return "Name: {}\n".format(sc.name) if sc.name else ""
+
+
+def _prompt_info(sc):
+    # Returns a string listing the prompts of 'sc' (Symbol or Choice)
+
+    s = ""
+
+    for node in sc.nodes:
+        if node.prompt:
+            s += "Prompt: {}\n".format(node.prompt[0])
+
+    return s
+
+
+def _value_info(sym):
+    # Returns a string showing 'sym's value
+
+    # Only put quotes around the value for string symbols
+    return "Value: {}\n".format(
+        '"{}"'.format(sym.str_value)
+        if sym.orig_type == STRING
+        else sym.str_value)
+
+
+def _choice_syms_info(choice):
+    # Returns a string listing the choice symbols in 'choice'. Adds
+    # "(selected)" next to the selected one.
+
+    s = "Choice symbols:\n"
+
+    for sym in choice.syms:
+        s += "  - " + sym.name
+        if sym is choice.selection:
+            s += " (selected)"
+        s += "\n"
+
+    return s + "\n"
+
+
+def _help_info(sc):
+    # Returns a string with the help text(s) of 'sc' (Symbol or Choice).
+    # Symbols and choices defined in multiple locations can have multiple help
+    # texts.
+
+    s = "\n"
+
+    for node in sc.nodes:
+        if node.help is not None:
+            s += "Help:\n\n{}\n\n".format(_indent(node.help, 2))
+
+    return s
+
+
+def _direct_dep_info(sc):
+    # Returns a string describing the direct dependencies of 'sc' (Symbol or
+    # Choice). The direct dependencies are the OR of the dependencies from each
+    # definition location. The dependencies at each definition location come
+    # from 'depends on' and dependencies inherited from parent items.
+
+    return "" if sc.direct_dep is _kconf.y else \
+        'Direct dependencies (={}):\n{}\n' \
+        .format(TRI_TO_STR[expr_value(sc.direct_dep)],
+                _split_expr_info(sc.direct_dep, 2))
+
+
+def _defaults_info(sc):
+    # Returns a string describing the defaults of 'sc' (Symbol or Choice)
+
+    if not sc.defaults:
+        return ""
+
+    s = "Default"
+    if len(sc.defaults) > 1:
+        s += "s"
+    s += ":\n"
+
+    for val, cond in sc.orig_defaults:
+        s += "  - "
+        if isinstance(sc, Symbol):
+            s += _expr_str(val)
+
+            # Skip the tristate value hint if the expression is just a single
+            # symbol. _expr_str() already shows its value as a string.
+            #
+            # This also avoids showing the tristate value for string/int/hex
+            # defaults, which wouldn't make any sense.
+            if isinstance(val, tuple):
+                s += '  (={})'.format(TRI_TO_STR[expr_value(val)])
+        else:
+            # Don't print the value next to the symbol name for choice
+            # defaults, as it looks a bit confusing
+            s += val.name
+        s += "\n"
+
+        if cond is not _kconf.y:
+            s += "    Condition (={}):\n{}" \
+                 .format(TRI_TO_STR[expr_value(cond)],
+                         _split_expr_info(cond, 4))
+
+    return s + "\n"
+
+
+def _split_expr_info(expr, indent):
+    # Returns a string with 'expr' split into its top-level && or || operands,
+    # with one operand per line, together with the operand's value. This is
+    # usually enough to get something readable for long expressions. A fancier
+    # recursive thingy would be possible too.
+    #
+    # indent:
+    #   Number of leading spaces to add before the split expression.
+
+    if len(split_expr(expr, AND)) > 1:
+        split_op = AND
+        op_str = "&&"
+    else:
+        split_op = OR
+        op_str = "||"
+
+    s = ""
+    for i, term in enumerate(split_expr(expr, split_op)):
+        s += "{}{} {}".format(indent*" ",
+                              "  " if i == 0 else op_str,
+                              _expr_str(term))
+
+        # Don't bother showing the value hint if the expression is just a
+        # single symbol. _expr_str() already shows its value.
+        if isinstance(term, tuple):
+            s += "  (={})".format(TRI_TO_STR[expr_value(term)])
+
+        s += "\n"
+
+    return s
+
+
+def _select_imply_info(sym):
+    # Returns a string with information about which symbols 'select' or 'imply'
+    # 'sym'. The selecting/implying symbols are grouped according to which
+    # value they select/imply 'sym' to (n/m/y).
+
+    def sis(expr, val, title):
+        # sis = selects/implies
+        sis = [si for si in split_expr(expr, OR) if expr_value(si) == val]
+        if not sis:
+            return ""
+
+        res = title
+        for si in sis:
+            res += "  - {}\n".format(split_expr(si, AND)[0].name)
+        return res + "\n"
+
+    s = ""
+
+    if sym.rev_dep is not _kconf.n:
+        s += sis(sym.rev_dep, 2,
+                 "Symbols currently y-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 1,
+                 "Symbols currently m-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 0,
+                 "Symbols currently n-selecting this symbol (no effect):\n")
+
+    if sym.weak_rev_dep is not _kconf.n:
+        s += sis(sym.weak_rev_dep, 2,
+                 "Symbols currently y-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 1,
+                 "Symbols currently m-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 0,
+                 "Symbols currently n-implying this symbol (no effect):\n")
+
+    return s
+
+
+def _kconfig_def_info(item):
+    # Returns a string with the definition of 'item' in Kconfig syntax,
+    # together with the definition location(s) and their include and menu paths
+
+    nodes = [item] if isinstance(item, MenuNode) else item.nodes
+
+    s = "Kconfig definition{}, with parent deps. propagated to 'depends on'\n" \
+        .format("s" if len(nodes) > 1 else "")
+    s += (len(s) - 1)*"="
+
+    for node in nodes:
+        s += "\n\n" \
+             "At {}:{}\n" \
+             "{}" \
+             "Menu path: {}\n\n" \
+             "{}" \
+             .format(node.filename, node.linenr,
+                     _include_path_info(node),
+                     _menu_path_info(node),
+                     _indent(node.custom_str(_name_and_val_str), 2))
+
+    return s
+
+
+def _include_path_info(node):
+    if not node.include_path:
+        # In the top-level Kconfig file
+        return ""
+
+    return "Included via {}\n".format(
+        " -> ".join("{}:{}".format(filename, linenr)
+                    for filename, linenr in node.include_path))
+
+
+def _menu_path_info(node):
+    # Returns a string describing the menu path leading up to 'node'
+
+    path = ""
+
+    while node.parent is not _kconf.top_node:
+        node = node.parent
+
+        # Promptless choices might appear among the parents. Use
+        # standard_sc_expr_str() for them, so that they show up as
+        # '<choice (name if any)>'.
+        path = " -> " + (node.prompt[0] if node.prompt else
+                         standard_sc_expr_str(node.item)) + path
+
+    return "(Top)" + path
+
+
+def _indent(s, n):
+    # Returns 's' with each line indented 'n' spaces. textwrap.indent() is not
+    # available in Python 2 (it's 3.3+).
+
+    return "\n".join(n*" " + line for line in s.split("\n"))
+
+
+def _name_and_val_str(sc):
+    # Custom symbol/choice printer that shows symbol values after symbols
+
+    # Show the values of non-constant (non-quoted) symbols that don't look like
+    # numbers. Things like 123 are actually symbol references, and only work as
+    # expected due to undefined symbols getting their name as their value.
+    # Showing the symbol value for those isn't helpful though.
+    if isinstance(sc, Symbol) and not sc.is_constant and not _is_num(sc.name):
+        if not sc.nodes:
+            # Undefined symbol reference
+            return "{}(undefined/n)".format(sc.name)
+
+        return '{}(={})'.format(sc.name, sc.str_value)
+
+    # For other items, use the standard format
+    return standard_sc_expr_str(sc)
+
+
+def _expr_str(expr):
+    # Custom expression printer that shows symbol values
+    return expr_str(expr, _name_and_val_str)
+
+
+def _styled_win(style):
+    # Returns a new curses window with style 'style' and space as the fill
+    # character. The initial dimensions are (1, 1), so the window needs to be
+    # sized and positioned separately.
+
+    win = curses.newwin(1, 1)
+    _set_style(win, style)
+    return win
+
+
+def _set_style(win, style):
+    # Changes the style of an existing window
+
+    win.bkgdset(" ", _style[style])
+
+
+def _max_scroll(lst, win):
+    # Assuming 'lst' is a list of items to be displayed in 'win',
+    # returns the maximum number of steps 'win' can be scrolled down.
+    # We stop scrolling when the bottom item is visible.
+
+    return max(0, len(lst) - _height(win))
+
+
+def _edit_text(c, s, i, hscroll, width):
+    # Implements text editing commands for edit boxes. Takes a character (which
+    # could also be e.g. curses.KEY_LEFT) and the edit box state, and returns
+    # the new state after the character has been processed.
+    #
+    # c:
+    #   Character from user
+    #
+    # s:
+    #   Current contents of string
+    #
+    # i:
+    #   Current cursor index in string
+    #
+    # hscroll:
+    #   Index in s of the leftmost character in the edit box, for horizontal
+    #   scrolling
+    #
+    # width:
+    #   Width in characters of the edit box
+    #
+    # Return value:
+    #   An (s, i, hscroll) tuple for the new state
+
+    if c == curses.KEY_LEFT:
+        if i > 0:
+            i -= 1
+
+    elif c == curses.KEY_RIGHT:
+        if i < len(s):
+            i += 1
+
+    elif c in (curses.KEY_HOME, "\x01"):  # \x01 = CTRL-A
+        i = 0
+
+    elif c in (curses.KEY_END, "\x05"):  # \x05 = CTRL-E
+        i = len(s)
+
+    elif c in (curses.KEY_BACKSPACE, _ERASE_CHAR):
+        if i > 0:
+            s = s[:i-1] + s[i:]
+            i -= 1
+
+    elif c == curses.KEY_DC:
+        s = s[:i] + s[i+1:]
+
+    elif c == "\x17":  # \x17 = CTRL-W
+        # The \W removes characters like ',' one at a time
+        new_i = re.search(r"(?:\w*|\W)\s*$", s[:i]).start()
+        s = s[:new_i] + s[i:]
+        i = new_i
+
+    elif c == "\x0B":  # \x0B = CTRL-K
+        s = s[:i]
+
+    elif c == "\x15":  # \x15 = CTRL-U
+        s = s[i:]
+        i = 0
+
+    elif isinstance(c, str):
+        # Insert character
+        s = s[:i] + c + s[i:]
+        i += 1
+
+    # Adjust the horizontal scroll so that the cursor never touches the left or
+    # right edges of the edit box, except when it's at the beginning or the end
+    # of the string
+    if i < hscroll + _SCROLL_OFFSET:
+        hscroll = max(i - _SCROLL_OFFSET, 0)
+    elif i >= hscroll + width - _SCROLL_OFFSET:
+        max_scroll = max(len(s) - width + 1, 0)
+        hscroll = min(i - width + _SCROLL_OFFSET + 1, max_scroll)
+
+
+    return s, i, hscroll
+
+
+def _load_save_info():
+    # Returns an information string for load/save dialog boxes
+
+    return "(Relative to {})\n\nRefer to your home directory with ~" \
+           .format(os.path.join(os.getcwd(), ""))
+
+
+def _msg(title, text):
+    # Pops up a message dialog that can be dismissed with Space/Enter/ESC
+
+    _key_dialog(title, text, " \n")
+
+
+def _error(text):
+    # Pops up an error dialog that can be dismissed with Space/Enter/ESC
+
+    _msg("Error", text)
+
+
+def _node_str(node):
+    # Returns the complete menu entry text for a menu node.
+    #
+    # Example return value: "[*] Support for X"
+
+    # Calculate the indent to print the item with by checking how many levels
+    # above it the closest 'menuconfig' item is (this includes menus and
+    # choices as well as menuconfig symbols)
+    indent = 0
+    parent = node.parent
+    while not parent.is_menuconfig:
+        indent += _SUBMENU_INDENT
+        parent = parent.parent
+
+    # This approach gives nice alignment for empty string symbols ("()  Foo")
+    s = "{:{}}".format(_value_str(node), 3 + indent)
+
+    if _should_show_name(node):
+        if isinstance(node.item, Symbol):
+            s += " <{}>".format(node.item.name)
+        else:
+            # For choices, use standard_sc_expr_str(). That way they show up as
+            # '<choice (name if any)>'.
+            s += " " + standard_sc_expr_str(node.item)
+
+    if node.prompt:
+        if node.item == COMMENT:
+            s += " *** {} ***".format(node.prompt[0])
+        else:
+            s += " " + node.prompt[0]
+
+        if isinstance(node.item, Symbol):
+            sym = node.item
+
+            # Print "(NEW)" next to symbols without a user value (from e.g. a
+            # .config), but skip it for choice symbols in choices in y mode,
+            # and for symbols of UNKNOWN type (which generate a warning though)
+            if sym.user_value is None and sym.orig_type and \
+               not (sym.choice and sym.choice.tri_value == 2):
+
+                s += " (NEW)"
+
+    if isinstance(node.item, Choice) and node.item.tri_value == 2:
+        # Print the prompt of the selected symbol after the choice for
+        # choices in y mode
+        sym = node.item.selection
+        if sym:
+            for sym_node in sym.nodes:
+                # Use the prompt used at this choice location, in case the
+                # choice symbol is defined in multiple locations
+                if sym_node.parent is node and sym_node.prompt:
+                    s += " ({})".format(sym_node.prompt[0])
+                    break
+            else:
+                # If the symbol isn't defined at this choice location, then
+                # just use whatever prompt we can find for it
+                for sym_node in sym.nodes:
+                    if sym_node.prompt:
+                        s += " ({})".format(sym_node.prompt[0])
+                        break
+
+    # Print "--->" next to nodes that have menus that can potentially be
+    # entered. Print "----" if the menu is empty. We don't allow those to be
+    # entered.
+    if node.is_menuconfig:
+        s += "  --->" if _shown_nodes(node) else "  ----"
+
+    return s
+
+
+def _should_show_name(node):
+    # Returns True if 'node' is a symbol or choice whose name should shown (if
+    # any, as names are optional for choices)
+
+    # The 'not node.prompt' case only hits in show-all mode, for promptless
+    # symbols and choices
+    return not node.prompt or \
+           (_show_name and isinstance(node.item, (Symbol, Choice)))
+
+
+def _value_str(node):
+    # Returns the value part ("[*]", "<M>", "(foo)" etc.) of a menu node
+
+    item = node.item
+
+    if item in (MENU, COMMENT):
+        return ""
+
+    # Wouldn't normally happen, and generates a warning
+    if not item.orig_type:
+        return ""
+
+    if item.orig_type in (STRING, INT, HEX):
+        return "({})".format(item.str_value)
+
+    # BOOL or TRISTATE
+
+    if _is_y_mode_choice_sym(item):
+        return "(X)" if item.choice.selection is item else "( )"
+
+    tri_val_str = (" ", "M", "*")[item.tri_value]
+
+    if len(item.assignable) <= 1:
+        # Pinned to a single value
+        return "" if isinstance(item, Choice) else "-{}-".format(tri_val_str)
+
+    if item.type == BOOL:
+        return "[{}]".format(tri_val_str)
+
+    # item.type == TRISTATE
+    if item.assignable == (1, 2):
+        return "{{{}}}".format(tri_val_str)  # {M}/{*}
+    return "<{}>".format(tri_val_str)
+
+
+def _is_y_mode_choice_sym(item):
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    return isinstance(item, Symbol) and item.choice and item.visibility == 2
+
+
+def _check_valid(sym, s):
+    # Returns True if the string 's' is a well-formed value for 'sym'.
+    # Otherwise, displays an error and returns False.
+
+    if sym.orig_type not in (INT, HEX):
+        # Anything goes for non-int/hex symbols
+        return True
+
+    base = 10 if sym.orig_type == INT else 16
+    try:
+        int(s, base)
+    except ValueError:
+        _error("'{}' is a malformed {} value"
+               .format(s, TYPE_TO_STR[sym.orig_type]))
+        return False
+
+    for low_sym, high_sym, cond in sym.ranges:
+        if expr_value(cond):
+            low_s = low_sym.str_value
+            high_s = high_sym.str_value
+
+            if not int(low_s, base) <= int(s, base) <= int(high_s, base):
+                _error("{} is outside the range {}-{}"
+                       .format(s, low_s, high_s))
+                return False
+
+            break
+
+    return True
+
+
+def _range_info(sym):
+    # Returns a string with information about the valid range for the symbol
+    # 'sym', or None if 'sym' doesn't have a range
+
+    if sym.orig_type in (INT, HEX):
+        for low, high, cond in sym.ranges:
+            if expr_value(cond):
+                return "Range: {}-{}".format(low.str_value, high.str_value)
+
+    return None
+
+
+def _is_num(name):
+    # Heuristic to see if a symbol name looks like a number, for nicer output
+    # when printing expressions. Things like 16 are actually symbol names, only
+    # they get their name as their value when the symbol is undefined.
+
+    try:
+        int(name)
+    except ValueError:
+        if not name.startswith(("0x", "0X")):
+            return False
+
+        try:
+            int(name, 16)
+        except ValueError:
+            return False
+
+    return True
+
+
+def _getch_compat(win):
+    # Uses get_wch() if available (Python 3.3+) and getch() otherwise. Also
+    # handles a PDCurses resizing quirk.
+
+    if hasattr(win, "get_wch"):
+        c = win.get_wch()
+    else:
+        c = win.getch()
+        if 0 <= c <= 255:
+            c = chr(c)
+
+    # Decent resizing behavior on PDCurses requires calling resize_term(0, 0)
+    # after receiving KEY_RESIZE, while ncurses (usually) handles terminal
+    # resizing automatically in get(_w)ch() (see the end of the
+    # resizeterm(3NCURSES) man page).
+    #
+    # resize_term(0, 0) reliably fails and does nothing on ncurses, so this
+    # hack gives ncurses/PDCurses compatibility for resizing. I don't know
+    # whether it would cause trouble for other implementations.
+    if c == curses.KEY_RESIZE:
+        try:
+            curses.resize_term(0, 0)
+        except curses.error:
+            pass
+
+    return c
+
+
+def _warn(*args):
+    # Temporarily returns from curses to shell mode and prints a warning to
+    # stderr. The warning would get lost in curses mode.
+    curses.endwin()
+    print("menuconfig warning: ", end="", file=sys.stderr)
+    print(*args, file=sys.stderr)
+    curses.doupdate()
+
+
+# Ignore exceptions from some functions that might fail, e.g. for small
+# windows. They usually do reasonable things anyway.
+
+
+def _safe_curs_set(visibility):
+    try:
+        curses.curs_set(visibility)
+    except curses.error:
+        pass
+
+
+def _safe_addstr(win, *args):
+    # Clip the line to avoid wrapping to the next line, which looks glitchy.
+    # addchstr() would do it for us, but it's not available in the 'curses'
+    # module.
+
+    attr = None
+    if isinstance(args[0], str):
+        y, x = win.getyx()
+        s = args[0]
+        if len(args) == 2:
+            attr = args[1]
+    else:
+        y, x, s = args[:3]
+        if len(args) == 4:
+            attr = args[3]
+
+    maxlen = _width(win) - x
+    s = s.expandtabs()
+
+    try:
+        # The 'curses' module uses wattr_set() internally if you pass 'attr',
+        # overwriting the background style, so setting 'attr' to 0 in the first
+        # case won't do the right thing
+        if attr is None:
+            win.addnstr(y, x, s, maxlen)
+        else:
+            win.addnstr(y, x, s, maxlen, attr)
+    except curses.error:
+        pass
+
+
+def _safe_addch(win, *args):
+    try:
+        win.addch(*args)
+    except curses.error:
+        pass
+
+
+def _safe_hline(win, *args):
+    try:
+        win.hline(*args)
+    except curses.error:
+        pass
+
+
+def _safe_vline(win, *args):
+    try:
+        win.vline(*args)
+    except curses.error:
+        pass
+
+
+def _safe_move(win, *args):
+    try:
+        win.move(*args)
+    except curses.error:
+        pass
+
+
+def _change_c_lc_ctype_to_utf8():
+    # See _CHANGE_C_LC_CTYPE_TO_UTF8
+
+    if _IS_WINDOWS:
+        # Windows rarely has issues here, and the PEP 538 implementation avoids
+        # changing the locale on it. None of the UTF-8 locales below were
+        # supported from some quick testing either. Play it safe.
+        return
+
+    def try_set_locale(loc):
+        try:
+            locale.setlocale(locale.LC_CTYPE, loc)
+            return True
+        except locale.Error:
+            return False
+
+    # Is LC_CTYPE set to the C locale?
+    if locale.setlocale(locale.LC_CTYPE) == "C":
+        # This list was taken from the PEP 538 implementation in the CPython
+        # code, in Python/pylifecycle.c
+        for loc in "C.UTF-8", "C.utf8", "UTF-8":
+            if try_set_locale(loc):
+                # LC_CTYPE successfully changed
+                return
+
+
+# Are we running on Windows?
+_IS_WINDOWS = os.name == "nt"
+
+if __name__ == "__main__":
+    _main()
diff --git a/support/kconfiglib/oldconfig.py b/support/kconfiglib/oldconfig.py
new file mode 100755
index 00000000..042ab449
--- /dev/null
+++ b/support/kconfiglib/oldconfig.py
@@ -0,0 +1,246 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Implements oldconfig functionality.
+
+  1. Loads existing .config
+  2. Prompts for the value of all modifiable symbols/choices that
+     aren't already set in the .config
+  3. Writes an updated .config
+
+The default input/output filename is '.config'. A different filename can be
+passed in the KCONFIG_CONFIG environment variable.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+
+Entering '?' displays the help text of the symbol/choice, if any.
+
+Unlike 'make oldconfig', this script doesn't print menu titles and comments,
+but gives Kconfig definition locations. Printing menus and comments would be
+pretty easy to add: Look at the parents of each item, and print all menu
+prompts and comments unless they have already been printed (assuming you want
+to skip "irrelevant" menus).
+"""
+from __future__ import print_function
+
+import sys
+
+from kconfiglib import Symbol, Choice, BOOL, TRISTATE, HEX, standard_kconfig
+
+
+# Python 2/3 compatibility hack
+if sys.version_info[0] < 3:
+    input = raw_input
+
+
+def _main():
+    # Earlier symbols in Kconfig files might depend on later symbols and become
+    # visible if their values change. This flag is set to True if the value of
+    # any symbol changes, in which case we rerun the oldconfig to check for new
+    # visible symbols.
+    global conf_changed
+
+    kconf = standard_kconfig()
+    print(kconf.load_config())
+
+    while True:
+        conf_changed = False
+
+        for node in kconf.node_iter():
+            oldconfig(node)
+
+        if not conf_changed:
+            break
+
+    print(kconf.write_config())
+
+
+def oldconfig(node):
+    """
+    Prompts the user for a value if node.item is a visible symbol/choice with
+    no user value.
+    """
+    # See main()
+    global conf_changed
+
+    # Only symbols and choices can be configured
+    if not isinstance(node.item, (Symbol, Choice)):
+        return
+
+    # Skip symbols and choices that aren't visible
+    if not node.item.visibility:
+        return
+
+    # Skip symbols and choices that don't have a prompt (at this location)
+    if not node.prompt:
+        return
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+
+        # Skip symbols that already have a user value
+        if sym.user_value is not None:
+            return
+
+        # Skip symbols that can only have a single value, due to selects
+        if len(sym.assignable) == 1:
+            return
+
+        # Skip symbols in choices in y mode. We ask once for the entire choice
+        # instead.
+        if sym.choice and sym.choice.tri_value == 2:
+            return
+
+        # Loop until the user enters a valid value or enters a blank string
+        # (for the default value)
+        while True:
+            val = input("{} ({}) [{}] ".format(
+                node.prompt[0], _name_and_loc_str(sym),
+                _default_value_str(sym)))
+
+            if val == "?":
+                _print_help(node)
+                continue
+
+            # Substitute a blank string with the default value the symbol
+            # would get
+            if not val:
+                val = sym.str_value
+
+            # Automatically add a "0x" prefix for hex symbols, like the
+            # menuconfig interface does. This isn't done when loading .config
+            # files, hence why set_value() doesn't do it automatically.
+            if sym.type == HEX and not val.startswith(("0x", "0X")):
+                val = "0x" + val
+
+            old_str_val = sym.str_value
+
+            # Kconfiglib itself will print a warning here if the value
+            # is invalid, so we don't need to bother
+            if sym.set_value(val):
+                # Valid value input. We're done with this node.
+
+                if sym.str_value != old_str_val:
+                    conf_changed = True
+
+                return
+
+    else:
+        choice = node.item
+
+        # Skip choices that already have a visible user selection...
+        if choice.user_selection and choice.user_selection.visibility == 2:
+            # ...unless there are new visible symbols in the choice. (We know
+            # they have y (2) visibility in that case, because m-visible
+            # symbols get demoted to n-visibility in y-mode choices, and the
+            # user-selected symbol had visibility y.)
+            for sym in choice.syms:
+                if sym is not choice.user_selection and sym.visibility and \
+                   sym.user_value is None:
+                    # New visible symbols in the choice
+                    break
+            else:
+                # No new visible symbols in the choice
+                return
+
+        # Get a list of available selections. The mode of the choice limits
+        # the visibility of the choice value symbols, so this will indirectly
+        # skip choices in n and m mode.
+        options = [sym for sym in choice.syms if sym.visibility == 2]
+
+        if not options:
+            # No y-visible choice value symbols
+            return
+
+        # Loop until the user enters a valid selection or a blank string (for
+        # the default selection)
+        while True:
+            print("{} ({})".format(node.prompt[0], _name_and_loc_str(choice)))
+
+            for i, sym in enumerate(options, 1):
+                print("{} {}. {} ({})".format(
+                    ">" if sym is choice.selection else " ",
+                    i,
+                    # Assume people don't define choice symbols with multiple
+                    # prompts. That generates a warning anyway.
+                    sym.nodes[0].prompt[0],
+                    sym.name))
+
+            sel_index = input("choice[1-{}]: ".format(len(options)))
+
+            if sel_index == "?":
+                _print_help(node)
+                continue
+
+            # Pick the default selection if the string is blank
+            if not sel_index:
+                choice.selection.set_value(2)
+                break
+
+            try:
+                sel_index = int(sel_index)
+            except ValueError:
+                print("Bad index", file=sys.stderr)
+                continue
+
+            if not 1 <= sel_index <= len(options):
+                print("Bad index", file=sys.stderr)
+                continue
+
+            # Valid selection
+
+            if options[sel_index - 1].tri_value != 2:
+                conf_changed = True
+
+            options[sel_index - 1].set_value(2)
+            break
+
+        # Give all of the non-selected visible choice symbols the user value n.
+        # This makes it so that the choice is no longer considered new once we
+        # do additional passes, if the reason that it was considered new was
+        # that it had new visible choice symbols.
+        #
+        # Only giving visible choice symbols the user value n means we will
+        # prompt for the choice again if later user selections make more new
+        # choice symbols visible, which is correct.
+        for sym in choice.syms:
+            if sym is not choice.user_selection and sym.visibility:
+                sym.set_value(0)
+
+
+def _name_and_loc_str(sc):
+    # Helper for printing the name of the symbol/choice 'sc' along with the
+    # location(s) in the Kconfig files where it is defined. Unnamed choices
+    # return "choice" instead of the name.
+
+    return "{}, defined at {}".format(
+        sc.name or "choice",
+        ", ".join("{}:{}".format(node.filename, node.linenr)
+                  for node in sc.nodes))
+
+
+def _print_help(node):
+    print("\n" + (node.help or "No help text\n"))
+
+
+def _default_value_str(sym):
+    # Returns the "m/M/y" string in e.g.
+    #
+    #   TRISTATE_SYM prompt (TRISTATE_SYM, defined at Kconfig:9) [n/M/y]:
+    #
+    # For string/int/hex, returns the default value as-is.
+
+    if sym.type in (BOOL, TRISTATE):
+        return "/".join(("NMY" if sym.tri_value == tri else "nmy")[tri]
+                        for tri in sym.assignable)
+
+    # string/int/hex
+    return sym.str_value
+
+
+if __name__ == "__main__":
+    _main()
diff --git a/support/kconfiglib/olddefconfig.py b/support/kconfiglib/olddefconfig.py
new file mode 100755
index 00000000..a59a7d49
--- /dev/null
+++ b/support/kconfiglib/olddefconfig.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Updates an old .config file or creates a new one, by filling in default values
+for all new symbols. This is the same as picking the default selection for all
+symbols in oldconfig, or entering the menuconfig interface and immediately
+saving.
+
+The default input/output filename is '.config'. A different filename can be
+passed in the KCONFIG_CONFIG environment variable.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+    print(kconf.load_config())
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/savedefconfig.py b/support/kconfiglib/savedefconfig.py
new file mode 100755
index 00000000..c388f1a2
--- /dev/null
+++ b/support/kconfiglib/savedefconfig.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Saves a minimal configuration file that only lists symbols that differ in value
+from their defaults. Loading such a configuration file is equivalent to loading
+the "full" configuration file.
+
+Minimal configuration files are handy to start from when editing configuration
+files by hand.
+
+The default input configuration file is '.config'. A different input filename
+can be passed in the KCONFIG_CONFIG environment variable.
+
+Note: Minimal configurations can also be generated from within the menuconfig
+interface.
+"""
+import argparse
+
+import kconfiglib
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--kconfig",
+        default="Kconfig",
+        help="Base Kconfig file (default: Kconfig)")
+
+    parser.add_argument(
+        "--out",
+        metavar="MINIMAL_CONFIGURATION",
+        default="defconfig",
+        help="Output filename for minimal configuration (default: defconfig)")
+
+    args = parser.parse_args()
+
+    kconf = kconfiglib.Kconfig(args.kconfig)
+    print(kconf.load_config())
+    print(kconf.write_min_config(args.out))
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/setconfig.py b/support/kconfiglib/setconfig.py
new file mode 100755
index 00000000..b6897540
--- /dev/null
+++ b/support/kconfiglib/setconfig.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Simple utility for setting configuration values from the command line.
+
+Sample usage:
+
+  $ setconfig FOO_SUPPORT=y BAR_BITS=8
+
+Note: Symbol names should not be prefixed with 'CONFIG_'.
+
+The exit status on errors is 1.
+
+The default input/output configuration file is '.config'. A different filename
+can be passed in the KCONFIG_CONFIG environment variable.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+"""
+import argparse
+import sys
+
+import kconfiglib
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--kconfig",
+        default="Kconfig",
+        help="Base Kconfig file (default: Kconfig)")
+
+    parser.add_argument(
+        "--no-check-exists",
+        dest="check_exists",
+        action="store_false",
+        help="Ignore assignments to non-existent symbols instead of erroring "
+             "out")
+
+    parser.add_argument(
+        "--no-check-value",
+        dest="check_value",
+        action="store_false",
+        help="Ignore assignments that didn't \"take\" (where the symbol got a "
+             "different value, e.g. due to unsatisfied dependencies) instead "
+             "of erroring out")
+
+    parser.add_argument(
+        "assignments",
+        metavar="ASSIGNMENT",
+        nargs="*",
+        help="A 'NAME=value' assignment")
+
+    args = parser.parse_args()
+
+    kconf = kconfiglib.Kconfig(args.kconfig)
+    print(kconf.load_config())
+
+    for arg in args.assignments:
+        if "=" not in arg:
+            sys.exit("error: no '=' in assignment: '{}'".format(arg))
+        name, value = arg.split("=", 1)
+
+        if name not in kconf.syms:
+            if not args.check_exists:
+                continue
+            sys.exit("error: no symbol '{}' in configuration".format(name))
+
+        sym = kconf.syms[name]
+
+        if not sym.set_value(value):
+            sys.exit("error: '{}' is an invalid value for the {} symbol {}"
+                     .format(value, kconfiglib.TYPE_TO_STR[sym.orig_type],
+                             name))
+
+        if args.check_value and sym.str_value != value:
+            sys.exit("error: {} was assigned the value '{}', but got the "
+                     "value '{}'. Check the symbol's dependencies, and make "
+                     "sure that it has a prompt."
+                     .format(name, value, sym.str_value))
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/setup.cfg b/support/kconfiglib/setup.cfg
new file mode 100644
index 00000000..185845e0
--- /dev/null
+++ b/support/kconfiglib/setup.cfg
@@ -0,0 +1,7 @@
+[bdist_wheel]
+# We support both Python 2 and Python 3
+universal = 1
+
+[metadata]
+# Include the license file in wheels
+license_file = LICENSE.txt
diff --git a/support/kconfiglib/setup.py b/support/kconfiglib/setup.py
new file mode 100644
index 00000000..9a3947ea
--- /dev/null
+++ b/support/kconfiglib/setup.py
@@ -0,0 +1,100 @@
+import io
+import os
+
+import setuptools
+
+
+setuptools.setup(
+    name="kconfiglib",
+    # MAJOR.MINOR.PATCH, per http://semver.org
+    version="12.13.0",
+    description="A flexible Python Kconfig implementation",
+
+    # Make sure that README.rst decodes on Python 3 in environments that use
+    # the C locale (which implies ASCII), by explicitly giving the encoding.
+    #
+    # io.open() has the 'encoding' parameter on both Python 2 and 3. open()
+    # doesn't have it on Python 2. This lets us use the same code for both.
+    long_description=io.open(
+        os.path.join(os.path.dirname(__file__), "README.rst"),
+        encoding="utf-8"
+    ).read(),
+
+    url="https://github.com/ulfalizer/Kconfiglib",
+    author='Ulf "Ulfalizer" Magnusson',
+    author_email="ulfalizer@gmail.com",
+    keywords="kconfig, kbuild, menuconfig, configuration-management",
+    license="ISC",
+
+    py_modules=(
+        "kconfiglib",
+        "menuconfig",
+        "guiconfig",
+        "genconfig",
+        "oldconfig",
+        "olddefconfig",
+        "savedefconfig",
+        "defconfig",
+        "alldefconfig",
+        "allnoconfig",
+        "allmodconfig",
+        "allyesconfig",
+        "listnewconfig",
+        "setconfig",
+    ),
+
+    entry_points={
+        "console_scripts": (
+            "menuconfig = menuconfig:_main",
+            "guiconfig = guiconfig:_main",
+            "genconfig = genconfig:main",
+            "oldconfig = oldconfig:_main",
+            "olddefconfig = olddefconfig:main",
+            "savedefconfig = savedefconfig:main",
+            "defconfig = defconfig:main",
+            "alldefconfig = alldefconfig:main",
+            "allnoconfig = allnoconfig:main",
+            "allmodconfig = allmodconfig:main",
+            "allyesconfig = allyesconfig:main",
+            "listnewconfig = listnewconfig:main",
+            "setconfig = setconfig:main",
+        )
+    },
+
+    # The terminal menuconfig implementation uses the standard Python 'curses'
+    # module. The windows-curses package makes it available on Windows. See
+    # https://github.com/zephyrproject-rtos/windows-curses.
+    install_requires=(
+        'windows-curses; sys_platform == "win32"',
+    ),
+
+    # Needs support for unnumbered {} in format() and argparse
+    python_requires=">=2.7,!=3.0.*,!=3.1.*",
+
+    project_urls={
+        "GitHub repository": "https://github.com/ulfalizer/Kconfiglib",
+        "Examples": "https://github.com/ulfalizer/Kconfiglib/tree/master/examples",
+    },
+
+    classifiers=[
+        "Development Status :: 5 - Production/Stable",
+        "Intended Audience :: Developers",
+        "Topic :: Software Development :: Build Tools",
+        "Topic :: System :: Operating System Kernels :: Linux",
+        "License :: OSI Approved :: ISC License (ISCL)",
+        "Operating System :: POSIX",
+        "Operating System :: Microsoft :: Windows",
+        "Programming Language :: Python :: 2",
+        "Programming Language :: Python :: 2.7",
+        "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.2",
+        "Programming Language :: Python :: 3.3",
+        "Programming Language :: Python :: 3.4",
+        "Programming Language :: Python :: 3.5",
+        "Programming Language :: Python :: 3.6",
+        "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
+        "Programming Language :: Python :: Implementation :: CPython",
+        "Programming Language :: Python :: Implementation :: PyPy",
+    ]
+)
diff --git a/support/kconfiglib/tests/Kappend b/support/kconfiglib/tests/Kappend
new file mode 100644
index 00000000..ce1478f2
--- /dev/null
+++ b/support/kconfiglib/tests/Kappend
@@ -0,0 +1,12 @@
+config MODULES
+    def_bool y
+
+config BOOL
+    bool "bool 1"
+
+config STRING
+    string "string"
+
+config IGNOREME
+    bool "ignore me"
+    default y
diff --git a/support/kconfiglib/tests/Kassignable b/support/kconfiglib/tests/Kassignable
new file mode 100644
index 00000000..26b4177f
--- /dev/null
+++ b/support/kconfiglib/tests/Kassignable
@@ -0,0 +1,230 @@
+config MODULES
+	bool "modules"
+	option modules
+
+
+# Things that should never be .assignable
+
+if UNDEFINED && "const"
+endif
+
+config NO_PROMPT
+	bool
+
+config STRING
+	string "string"
+
+config INT
+	int "int"
+
+config HEX
+	hex "hex"
+
+
+# Non-selected symbols
+
+config Y_VIS_BOOL
+	bool "y-vis bool"
+
+config M_VIS_BOOL
+	bool "m-vis bool" if m
+
+config N_VIS_BOOL
+	bool "n-vis bool" if n
+
+config Y_VIS_TRI
+	tristate "y-vis tri"
+
+config M_VIS_TRI
+	tristate "m-vis tri" if m
+
+config N_VIS_TRI
+	tristate "n-vis tri" if n
+
+
+# Symbols selected to y
+
+config Y_SELECTOR
+	def_tristate y
+
+	select Y_SEL_Y_VIS_BOOL
+	select Y_SEL_M_VIS_BOOL
+	select Y_SEL_N_VIS_BOOL
+
+	select Y_SEL_Y_VIS_TRI
+	select Y_SEL_M_VIS_TRI
+	select Y_SEL_N_VIS_TRI
+
+config Y_SEL_Y_VIS_BOOL
+	bool "y-sel y-vis bool"
+
+config Y_SEL_M_VIS_BOOL
+	bool "y-sel m-vis bool" if m
+
+config Y_SEL_N_VIS_BOOL
+	bool "y-sel n-vis bool" if n
+
+config Y_SEL_Y_VIS_TRI
+	tristate "y-sel y-vis tri"
+
+config Y_SEL_M_VIS_TRI
+	tristate "y-sel m-vis tri" if m
+
+config Y_SEL_N_VIS_TRI
+	tristate "y-sel n-vis tri" if n
+
+
+# Symbols selected to m
+
+config M_SELECTOR
+	def_tristate m
+
+	select M_SEL_Y_VIS_BOOL
+	select M_SEL_M_VIS_BOOL
+	select M_SEL_N_VIS_BOOL
+
+	select M_SEL_Y_VIS_TRI
+	select M_SEL_M_VIS_TRI
+	select M_SEL_N_VIS_TRI
+
+config M_SEL_Y_VIS_BOOL
+	bool "m-sel y-vis bool"
+
+config M_SEL_M_VIS_BOOL
+	bool "m-sel m-vis bool" if m
+
+config M_SEL_N_VIS_BOOL
+	bool "m-sel n-vis bool" if n
+
+config M_SEL_Y_VIS_TRI
+	tristate "m-sel y-vis tri"
+
+config M_SEL_M_VIS_TRI
+	tristate "m-sel m-vis tri" if m
+
+config M_SEL_N_VIS_TRI
+	tristate "m-sel n-vis tri" if n
+
+
+# Symbols implied to y
+
+config Y_IMPLIER
+	def_tristate y
+
+	imply Y_IMP_Y_VIS_BOOL
+	imply Y_IMP_M_VIS_BOOL
+	imply Y_IMP_N_VIS_BOOL
+
+	imply Y_IMP_Y_VIS_TRI
+	imply Y_IMP_M_VIS_TRI
+	imply Y_IMP_N_VIS_TRI
+
+config Y_IMP_Y_VIS_BOOL
+	bool "y-imp y-vis bool"
+
+config Y_IMP_M_VIS_BOOL
+	bool "y-imp m-vis bool" if m
+
+config Y_IMP_N_VIS_BOOL
+	bool "y-imp n-vis bool" if n
+
+config Y_IMP_Y_VIS_TRI
+	tristate "y-imp y-vis tri"
+
+config Y_IMP_M_VIS_TRI
+	tristate "y-imp m-vis tri" if m
+
+config Y_IMP_N_VIS_TRI
+	tristate "y-imp n-vis tri" if n
+
+
+# Symbols implied to m (never affects assignable values)
+
+config M_IMPLIER
+	def_tristate m
+
+	imply M_IMP_Y_VIS_BOOL
+	imply M_IMP_M_VIS_BOOL
+	imply M_IMP_N_VIS_BOOL
+
+	imply M_IMP_Y_VIS_TRI
+	imply M_IMP_M_VIS_TRI
+	imply M_IMP_N_VIS_TRI
+
+config M_IMP_Y_VIS_BOOL
+	bool "m-imp y-vis bool"
+
+config M_IMP_M_VIS_BOOL
+	bool "m-imp m-vis bool" if m
+
+config M_IMP_N_VIS_BOOL
+	bool "m-imp n-vis bool" if n
+
+config M_IMP_Y_VIS_TRI
+	tristate "m-imp y-vis tri"
+
+config M_IMP_M_VIS_TRI
+	tristate "m-imp m-vis tri" if m
+
+config M_IMP_N_VIS_TRI
+	tristate "m-imp n-vis tri" if n
+
+
+# Symbols in y-mode choice
+
+choice Y_CHOICE
+	bool "y-mode choice"
+
+config Y_CHOICE_BOOL
+	bool "y-mode choice bool"
+
+config Y_CHOICE_TRISTATE
+	tristate "y-mode choice tristate"
+
+config Y_CHOICE_N_VIS_TRISTATE
+	tristate "y-mode choice tristate invisible" if n
+
+endchoice
+
+
+# Symbols in m/y-mode choice
+
+choice MY_CHOICE
+	tristate "m/y-mode choice"
+
+config MY_CHOICE_BOOL
+	bool "m/y-mode choice bool"
+
+config MY_CHOICE_TRISTATE
+	tristate "m/y-mode choice tristate"
+
+config MY_CHOICE_N_VIS_TRISTATE
+	tristate "m/y-mode choice tristate invisible" if n
+
+endchoice
+
+
+# Choices with some other possible modes
+
+choice NMY_CHOICE
+	tristate "n/m/y-mode choice"
+	optional
+endchoice
+
+choice NY_CHOICE
+	bool "n/y-mode choice"
+	optional
+endchoice
+
+choice NM_CHOICE
+	tristate "n/m-mode choice" if m
+	optional
+endchoice
+
+choice M_CHOICE
+	tristate "m-mode choice" if m
+endchoice
+
+choice N_CHOICE
+	tristate "n-mode choice" if n
+endchoice
diff --git a/support/kconfiglib/tests/Kchoice b/support/kconfiglib/tests/Kchoice
new file mode 100644
index 00000000..16b38d47
--- /dev/null
+++ b/support/kconfiglib/tests/Kchoice
@@ -0,0 +1,198 @@
+config MODULES
+    bool "modules"
+
+# bool/tristate and optional
+
+choice BOOL
+    bool "bool"
+config B_1
+    tristate "B_1"
+config B_2
+    tristate "B_2"
+endchoice
+
+choice BOOL_OPT
+    bool "bool optional"
+    optional
+config BO_1
+    tristate "BO_1"
+config BO_2
+    tristate "BO_2"
+endchoice
+
+choice TRISTATE
+    tristate "tristate"
+config T_1
+    tristate "T_1"
+config T_2
+    tristate "T_2"
+endchoice
+
+choice TRISTATE_OPT
+    tristate "tristate optional"
+    optional
+config TO_1
+    tristate "TO_1"
+config TO_2
+    tristate "TO_2"
+endchoice
+
+# m-visibility
+
+choice BOOL_M
+    bool "bool m" if m
+config BM_1
+    tristate "BM_1"
+config BM_2
+    tristate "BM_2"
+endchoice
+
+choice TRISTATE_M
+    tristate "tristate m" if m
+config TM_1
+    tristate "TM_1"
+config TM_2
+    tristate "TM_2"
+endchoice
+
+# Defaults
+
+config TRISTATE_SYM
+    tristate "tristate"
+
+choice DEFAULTS
+    bool "defaults"
+    default OPT_1 if n
+    default OPT_2 if TRISTATE_SYM
+    default OPT_4
+config OPT_1
+    tristate "OPT_1"
+config OPT_2
+    tristate "OPT_2"
+config OPT_3
+    tristate "OPT_3"
+config OPT_4
+    tristate "OPT_4"
+endchoice
+
+choice DEFAULTS_NOT_VISIBLE
+    bool "defaults not visible"
+    # Skipped due to condition
+    default OPT_6 if n
+    # Skipped because OPT_7 is not visible
+    default OPT_7
+    # This one should apply
+    default OPT_8
+config OPT_5
+    tristate "OPT_5"
+config OPT_6
+    tristate "OPT_6"
+config OPT_7
+    tristate "OPT_7" if n
+config OPT_8
+    tristate "OPT_8"
+config OPT_9
+    tristate "OPT_9"
+endchoice
+
+# Choices without an explicitly specified type should get the type of the first
+# symbol with a type
+
+choice NO_TYPE_BOOL
+    prompt "no type bool"
+config NTB_1
+    bool "NTB_1"
+config NTB_2
+    tristate "NTB_2"
+endchoice
+
+choice NO_TYPE_TRISTATE
+    prompt "no type tristate"
+config NTT_1
+config NTT_2
+    tristate "NTB_2"
+config NTT_3
+    bool "NTT_3"
+endchoice
+
+# Choice items without an explicitly specified type should get the type of the
+# choice
+
+choice MISSING_MEMBER_TYPES_1
+    bool "missing member types"
+config MMT_1
+config MMT_2
+config MMT_3
+    tristate
+endchoice
+
+choice MISSING_MEMBER_TYPES_2
+config MMT_4
+config MMT_5
+    bool
+endchoice
+
+# Choice where the default selection (the first symbol) depends on another
+# symbol. If that symbol becomes 'n', the default selection should change to
+# the first visible symbol in the choice.
+
+choice DEFAULT_WITH_DEP
+    bool "default with dep"
+
+config A
+    bool "A"
+    depends on DEP
+
+config B
+    bool "B"
+
+endchoice
+
+config DEP
+    bool "dep"
+
+# Choice with symbols that shouldn't be considered choice symbols because they
+# depend on the preceding symbol. This might be a kconfig bug, but some things
+# use it, so we need to emulate it.
+
+choice WEIRD_SYMS
+    bool "weird symbols that aren't considered part of the choice"
+
+# Only WS1 is part of the choice
+config WS1
+    bool "WS1"
+
+config WS2
+    bool "WS2"
+    depends on WS1
+
+config WS3
+    bool
+    depends on WS2
+
+config WS4
+    bool
+    depends on WS1
+
+config WS5
+    bool "WS5" if WS1
+
+# 'if' has the same effect, so only WS6 is part of the choice
+config WS6
+    bool "WS6"
+
+if WS6
+
+config WS7
+    bool
+
+config WS8
+    bool "WS8"
+
+endif
+
+# Should also be part of the choice
+config WS9
+    bool "WS9"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdefconfig_existent b/support/kconfiglib/tests/Kdefconfig_existent
new file mode 100644
index 00000000..304cae66
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_existent
@@ -0,0 +1,8 @@
+# $FOO is "defconfig_2"
+
+config A
+    string
+    option defconfig_list
+    default "Kconfiglib/tests/defconfig_1" if y && !n && n
+    default "Kconfiglib/tests/$FOO"
+    default "Kconfiglib/tests/defconfig_1"
diff --git a/support/kconfiglib/tests/Kdefconfig_existent_but_n b/support/kconfiglib/tests/Kdefconfig_existent_but_n
new file mode 100644
index 00000000..2fdaaa99
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_existent_but_n
@@ -0,0 +1,10 @@
+# $FOO is "defconfig_2"
+# Should produce None due to the "depends on n"
+
+config A
+    string
+    depends on n
+    option defconfig_list
+    default "Kconfiglib/tests/defconfig_1" if y && !n && n
+    default "Kconfiglib/tests/$FOO"
+    default "Kconfiglib/tests/defconfig_1"
diff --git a/support/kconfiglib/tests/Kdefconfig_nonexistent b/support/kconfiglib/tests/Kdefconfig_nonexistent
new file mode 100644
index 00000000..5b7230f3
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_nonexistent
@@ -0,0 +1,5 @@
+config A
+    string
+    option defconfig_list
+    default "Kconfiglib/tests/non_existent_1"
+    default "Kconfiglib/tests/non_existent_2"
diff --git a/support/kconfiglib/tests/Kdefconfig_srctree b/support/kconfiglib/tests/Kdefconfig_srctree
new file mode 100644
index 00000000..d2591fa9
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_srctree
@@ -0,0 +1,5 @@
+config A
+    string
+    option defconfig_list
+    default "sub/defconfig_in_sub" # Assume this doesn't exist
+    default "Kconfiglib/tests/defconfig_2"
diff --git a/support/kconfiglib/tests/Kdepcopy b/support/kconfiglib/tests/Kdepcopy
new file mode 100644
index 00000000..6abe898e
--- /dev/null
+++ b/support/kconfiglib/tests/Kdepcopy
@@ -0,0 +1,173 @@
+# We verify that the properties below end up in definition order
+
+config MULTIDEF
+    bool
+    default A
+    default B
+    select AA
+    imply AA
+
+if FOO
+
+config MULTIDEF
+    default C
+    default D
+    select BB
+    imply BB
+
+if BAR
+
+config MULTIDEF
+    default E
+    default F
+    select CC
+    imply CC
+
+menu "menu"
+
+config MULTIDEF
+    default G
+    default H
+    select DD
+    imply DD
+
+config MULTIDEF
+    default I
+    default J
+    select EE
+    imply EE
+
+endmenu
+
+config MULTIDEF
+    default K
+    default L
+    select FF
+    imply FF
+
+config MULTIDEF
+    default M
+    default N
+    select GG
+    imply GG
+
+endif
+
+config MULTIDEF
+    default O
+    default P
+    select HH
+    select II
+    imply HH
+    imply II
+
+endif
+
+config MULTIDEF
+    default Q
+    default R
+    select JJ
+    imply JJ
+
+
+# Same test with choice symbols involved
+
+config MULTIDEF_CHOICE
+    bool
+    select A
+
+choice
+    bool "choice"
+
+config MULTIDEF_CHOICE
+    bool "multidef choice"
+    select B
+
+endchoice
+
+config MULTIDEF_CHOICE
+    bool
+    select C
+
+
+# Same test with ranges involved
+
+config MULTIDEF_RANGE
+    int
+    range A _
+
+menu "menu"
+
+config MULTIDEF_RANGE
+    int
+    range B _
+
+if FOO
+
+config MULTIDEF_RANGE
+    int
+    range C _
+
+endif
+
+config MULTIDEF_RANGE
+    int
+    range D _
+
+endmenu
+
+config MULTIDEF_RANGE
+    int
+    range E _
+
+config MULTIDEF_RANGE
+    int
+    range F _
+
+
+# Same test for a choice
+
+choice MULTICHOICE
+    bool "choice"
+    default A
+
+config A
+    bool "A"
+
+config B
+    bool "B"
+
+config C
+    bool "C"
+
+config D
+    bool "C"
+
+config E
+    bool "C"
+
+endchoice
+
+if FOO
+
+choice MULTICHOICE
+    default B
+endchoice
+
+menu "menu"
+
+choice MULTICHOICE
+    default C
+endchoice
+
+endmenu
+
+choice MULTICHOICE
+    default D
+endchoice
+
+endif
+
+choice MULTICHOICE
+    default E
+endchoice
diff --git a/support/kconfiglib/tests/Kdeploop0 b/support/kconfiglib/tests/Kdeploop0
new file mode 100644
index 00000000..98d3e3cd
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop0
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    depends on FOO
diff --git a/support/kconfiglib/tests/Kdeploop1 b/support/kconfiglib/tests/Kdeploop1
new file mode 100644
index 00000000..134cd298
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop1
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    select FOO
diff --git a/support/kconfiglib/tests/Kdeploop10 b/support/kconfiglib/tests/Kdeploop10
new file mode 100644
index 00000000..2e616ae6
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop10
@@ -0,0 +1,48 @@
+config A
+    bool
+    depends on B
+
+config B
+    bool
+    depends on C = 7
+
+config C
+    int
+    range D 8
+
+config D
+    int
+    default 3 if E
+    default 8
+
+config E
+    bool
+
+config F
+    bool
+    select E if G
+
+config G
+    bool
+    depends on H
+
+choice
+    bool "choice"
+
+config H
+    bool "H"
+    depends on I
+
+endchoice
+
+choice
+    bool "choice" if J
+
+config I
+    bool "I"
+
+endchoice
+
+config J
+    bool
+    depends on A
diff --git a/support/kconfiglib/tests/Kdeploop2 b/support/kconfiglib/tests/Kdeploop2
new file mode 100644
index 00000000..c9972430
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop2
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    default FOO
diff --git a/support/kconfiglib/tests/Kdeploop3 b/support/kconfiglib/tests/Kdeploop3
new file mode 100644
index 00000000..90c83d50
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop3
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    default y if FOO
diff --git a/support/kconfiglib/tests/Kdeploop4 b/support/kconfiglib/tests/Kdeploop4
new file mode 100644
index 00000000..789d8b7d
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop4
@@ -0,0 +1,7 @@
+config FOO
+    bool
+    depends on BAR
+
+config BAR
+    bool
+    depends on FOO
diff --git a/support/kconfiglib/tests/Kdeploop5 b/support/kconfiglib/tests/Kdeploop5
new file mode 100644
index 00000000..f12fe6bb
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop5
@@ -0,0 +1,7 @@
+config FOO
+    bool
+    select BAR
+
+config BAR
+    bool
+    select FOO
diff --git a/support/kconfiglib/tests/Kdeploop6 b/support/kconfiglib/tests/Kdeploop6
new file mode 100644
index 00000000..cb1e7016
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop6
@@ -0,0 +1,6 @@
+config FOO
+    bool
+
+config BAR
+    bool
+    select FOO if FOO
diff --git a/support/kconfiglib/tests/Kdeploop7 b/support/kconfiglib/tests/Kdeploop7
new file mode 100644
index 00000000..63d2c578
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop7
@@ -0,0 +1,11 @@
+choice
+    bool "choice"
+
+config FOO
+    bool "foo"
+    depends on BAR
+
+config BAR
+    bool "bar"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdeploop8 b/support/kconfiglib/tests/Kdeploop8
new file mode 100644
index 00000000..84efd8d3
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop8
@@ -0,0 +1,8 @@
+choice
+    bool "choice"
+    default FOO if FOO
+
+config FOO
+    bool "foo"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdeploop9 b/support/kconfiglib/tests/Kdeploop9
new file mode 100644
index 00000000..939f7f48
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop9
@@ -0,0 +1,7 @@
+choice
+    bool "choice" if FOO
+
+config FOO
+    bool "foo"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdirdep b/support/kconfiglib/tests/Kdirdep
new file mode 100644
index 00000000..cbb88b9e
--- /dev/null
+++ b/support/kconfiglib/tests/Kdirdep
@@ -0,0 +1,30 @@
+config NO_DEP_SYM
+    bool
+
+config DEP_SYM
+    bool
+    depends on A
+
+config DEP_SYM
+    depends on B && C
+
+config DEP_SYM
+    depends on !D
+
+
+choice NO_DEP_CHOICE
+    bool "no dep. choice"
+endchoice
+
+choice DEP_CHOICE
+    bool "dep. choice"
+    depends on A
+endchoice
+
+choice DEP_CHOICE
+    depends on B
+endchoice
+
+choice DEP_CHOICE
+    depends on C
+endchoice
diff --git a/support/kconfiglib/tests/Kescape b/support/kconfiglib/tests/Kescape
new file mode 100644
index 00000000..ee6b2b6d
--- /dev/null
+++ b/support/kconfiglib/tests/Kescape
@@ -0,0 +1,3 @@
+config STRING
+    string "string"
+    default "\"\\"
diff --git a/support/kconfiglib/tests/Keval b/support/kconfiglib/tests/Keval
new file mode 100644
index 00000000..1e64b832
--- /dev/null
+++ b/support/kconfiglib/tests/Keval
@@ -0,0 +1,34 @@
+# Enabled/disabled in the test
+config MODULES
+    bool "modules"
+    option modules
+
+config N
+    def_tristate n
+
+config M
+    def_tristate m
+
+menuconfig Y
+    def_tristate y
+    prompt "foo"
+
+config Y_STRING
+    string
+    default "y"
+
+config FOO_BAR_STRING
+    string
+    default "foo bar"
+
+config INT_37
+    int
+    default 37
+
+config HEX_0X37
+    hex
+    default 0x37
+
+config HEX_37
+    hex
+    default 37
diff --git a/support/kconfiglib/tests/Kexpr_items b/support/kconfiglib/tests/Kexpr_items
new file mode 100644
index 00000000..fb97ace9
--- /dev/null
+++ b/support/kconfiglib/tests/Kexpr_items
@@ -0,0 +1,11 @@
+config TEST
+    bool
+    default A && (B || !C && D = "E") || F > G || !!!H
+
+choice CHOICE
+    bool "choice"
+
+config TEST_CHOICE
+    bool "test choice" if A
+
+endchoice
diff --git a/support/kconfiglib/tests/Khelp b/support/kconfiglib/tests/Khelp
new file mode 100644
index 00000000..b80c2ebd
--- /dev/null
+++ b/support/kconfiglib/tests/Khelp
@@ -0,0 +1,50 @@
+config TWO_HELP_STRINGS
+    bool
+    help
+      first help string
+
+
+
+
+config TWO_HELP_STRINGS
+    help
+      second help string
+
+config NO_BLANK_AFTER_HELP
+    bool
+    help
+      help for
+      NO_BLANK_AFTER_HELP
+choice CHOICE_HELP
+    bool "choice with help"
+    help
+  help for
+  CHOICE_HELP
+endchoice
+
+config HELP_TERMINATED_BY_COMMENT
+  bool
+  help
+ a
+ b
+ c
+#
+
+config TRICKY_HELP
+  bool
+  -help---
+
+
+  a
+   b
+    c
+
+   d
+    e
+     f
+
+
+  g
+   h
+    i
+#
diff --git a/support/kconfiglib/tests/Kifremoval b/support/kconfiglib/tests/Kifremoval
new file mode 100644
index 00000000..f94472cd
--- /dev/null
+++ b/support/kconfiglib/tests/Kifremoval
@@ -0,0 +1,99 @@
+# Test some tricky cases that give consecutive 'if' nodes even after
+# flattening. Simple cases are exercised a ton elsewhere.
+
+if X
+endif
+if X
+endif
+
+config A
+
+if X
+endif
+if X
+endif
+
+config B
+
+if X
+endif
+if X
+endif
+if X
+endif
+
+config C
+
+if X
+  if X
+    if X
+    endif
+    if X
+    endif
+  endif
+  if X
+    if X
+    endif
+    if X
+    endif
+  endif
+  config D
+endif
+if X
+endif
+
+menu "E"
+  if X
+    if X
+    endif
+  endif
+  if X
+    if X
+    endif
+  endif
+endmenu
+
+menu "F"
+  if X
+  endif
+  if X
+  endif
+  if X
+    if X
+    endif
+    if X
+    endif
+    menu "G"
+    endmenu
+  endif
+endmenu
+
+choice H
+  if X
+    if X
+    endif
+  endif
+  if X
+    if X
+    endif
+  endif
+endchoice
+
+choice I
+  if X
+  endif
+  if X
+  endif
+  if X
+    if X
+    endif
+    if X
+    endif
+    config J
+  endif
+endchoice
+
+if X
+endif
+if X
+endif
diff --git a/support/kconfiglib/tests/Kimply b/support/kconfiglib/tests/Kimply
new file mode 100644
index 00000000..3ce346f6
--- /dev/null
+++ b/support/kconfiglib/tests/Kimply
@@ -0,0 +1,145 @@
+config MODULES
+    def_bool y
+    option modules
+
+#
+# Implied symbols with unmet and met direct dependencies
+#
+
+config IMPLY_DIRECT_DEPS
+    def_tristate y
+    imply UNMET_DIRECT_1
+    imply UNMET_DIRECT_2
+    imply UNMET_DIRECT_3
+    imply MET_DIRECT_1
+    imply MET_DIRECT_2
+    imply MET_DIRECT_3
+    imply MET_DIRECT_4
+
+config UNMET_DIRECT_1
+    tristate
+    depends on n
+
+if n
+config UNMET_DIRECT_2
+    tristate
+endif
+
+menu "menu"
+    depends on n
+
+config UNMET_DIRECT_3
+    tristate
+
+endmenu
+
+config MET_DIRECT_1
+    tristate
+
+config MET_DIRECT_2
+    depends on y
+    tristate
+
+if y
+config MET_DIRECT_3
+    tristate
+endif
+
+menu "menu"
+    depends on y
+
+config MET_DIRECT_4
+    tristate
+
+endmenu
+
+#
+# 'imply' with condition
+#
+
+config IMPLY_COND
+    def_tristate y
+    tristate
+    imply IMPLIED_N_COND if n
+    imply IMPLIED_M_COND if m
+    imply IMPLIED_Y_COND if y
+
+config IMPLIED_N_COND
+    tristate
+
+config IMPLIED_M_COND
+    tristate
+
+config IMPLIED_Y_COND
+    tristate
+
+#
+# Implying from symbol with value n
+#
+
+# Will default to 'n'
+config IMPLY_N_1
+    tristate
+    imply IMPLIED_FROM_N_1
+
+# This test also disables the imply, so it's kinda redundant, but why not
+if n
+config IMPLY_N_2
+    tristate
+    imply IMPLIED_FROM_N_2
+endif
+
+config IMPLIED_FROM_N_1
+    tristate
+
+config IMPLIED_FROM_N_2
+    tristate
+
+#
+# Implying from symbol with value m
+#
+
+config IMPLY_M
+    def_tristate m
+    imply IMPLIED_M
+    # Implying a bool to 'm' makes it default to 'y'
+    imply IMPLIED_M_BOOL
+
+config IMPLIED_M
+    tristate
+
+config IMPLIED_M_BOOL
+    bool
+
+#
+# 'imply' which should raise an 'm' default to 'y'
+#
+
+config IMPLY_M_TO_Y
+    tristate
+    default y
+    imply IMPLIED_M_TO_Y
+
+config IMPLIED_M_TO_Y
+    tristate
+    default m
+
+#
+# Used for testing user values
+#
+
+config DIRECT_DEP
+    tristate "direct dep"
+
+config IMPLY
+    tristate "imply"
+    imply IMPLIED_TRISTATE
+    imply IMPLIED_BOOL
+
+config IMPLIED_TRISTATE
+    tristate "implied tristate"
+    depends on DIRECT_DEP
+
+config IMPLIED_BOOL
+    bool "implied bool"
+    depends on DIRECT_DEP
diff --git a/support/kconfiglib/tests/Kinclude_path b/support/kconfiglib/tests/Kinclude_path
new file mode 100644
index 00000000..7a3badbb
--- /dev/null
+++ b/support/kconfiglib/tests/Kinclude_path
@@ -0,0 +1,12 @@
+config TOP
+	bool
+
+source "Kinclude_path_sourced_1"
+
+config TOP
+	bool
+
+source "Kinclude_path_sourced_1"
+
+config TOP
+	bool
diff --git a/support/kconfiglib/tests/Kinclude_path_sourced_1 b/support/kconfiglib/tests/Kinclude_path_sourced_1
new file mode 100644
index 00000000..f4dee981
--- /dev/null
+++ b/support/kconfiglib/tests/Kinclude_path_sourced_1
@@ -0,0 +1,12 @@
+config ONE_DOWN
+	bool
+
+source "Kinclude_path_sourced_2"
+
+config ONE_DOWN
+	bool
+
+source "Kinclude_path_sourced_2"
+
+config ONE_DOWN
+	bool
diff --git a/support/kconfiglib/tests/Kinclude_path_sourced_2 b/support/kconfiglib/tests/Kinclude_path_sourced_2
new file mode 100644
index 00000000..068f18d4
--- /dev/null
+++ b/support/kconfiglib/tests/Kinclude_path_sourced_2
@@ -0,0 +1,11 @@
+config TWO_DOWN
+	bool
+
+menu "menu"
+endmenu
+
+comment "comment"
+
+choice
+	bool "choice"
+endchoice
diff --git a/support/kconfiglib/tests/Kitemlists b/support/kconfiglib/tests/Kitemlists
new file mode 100644
index 00000000..8aa71073
--- /dev/null
+++ b/support/kconfiglib/tests/Kitemlists
@@ -0,0 +1,36 @@
+comment "comment 1"
+
+choice
+    bool "choice 1"
+endchoice
+
+menu "menu 1"
+
+choice NAMED
+    bool "choice 2"
+endchoice
+
+menu "menu 2"
+menu "menu 3"
+comment "comment 2"
+endmenu
+
+choice
+    bool "choice 3"
+endchoice
+
+choice NAMED
+    bool
+endchoice
+
+endmenu
+
+menu "menu 4"
+endmenu
+
+comment "comment 3"
+
+endmenu
+
+menu "menu 5"
+endmenu
diff --git a/support/kconfiglib/tests/Klocation b/support/kconfiglib/tests/Klocation
new file mode 100644
index 00000000..f997055c
--- /dev/null
+++ b/support/kconfiglib/tests/Klocation
@@ -0,0 +1,72 @@
+if UNDEFINED
+endif
+
+config SINGLE_DEF
+    bool
+
+config MULTI_DEF
+    bool
+
+# Throw in some line continuations too to make sure it doesn't mess up the line
+# numbers
+if y && \
+   y
+if y && \
+   y && \
+   y
+
+# Throw in some help texts too
+
+config HELP_1
+    bool "help 1"
+    help
+config HELP_2
+    bool "help 2"
+    help
+      foo
+      bar
+
+        baz
+
+config HELP_3
+    help
+      foo
+      bar
+    bool
+config \
+MULTI_DEF
+
+config MULTI_DEF
+
+endif
+endif
+
+# Expands to "tests/Klocation_sourced"
+source "$TESTS_DIR_FROM_ENV/Klocation$_SOURCED"
+
+# Expands to "sub/Klocation_rsourced"
+rsource "$SUB_DIR_FROM_ENV/Klocation$_RSOURCED"
+
+# Expands to "tests/*ub/Klocation_gsourced[12]", matching
+# tests/sub/Klocation_gsourced{1,2}
+source "$TESTS_DIR_FROM_ENV/*ub/Klocation$_GSOURCED[12]"
+# Test old syntax too
+gsource "$TESTS_DIR_FROM_ENV/*ub/Klocation$_GSOURCED[12]"
+
+# Expands to "sub/Klocation_grsourced[12]", matching
+# tests/sub/Klocation_grsourced{1,2}
+rsource "$SUB_DIR_FROM_ENV/Klocation$_GRSOURCED[12]"
+# Test old syntax too
+grsource "$SUB_DIR_FROM_ENV/Klocation$_GRSOURCED[12]"
+
+# No-ops
+osource "nonexistent"
+osource "nonexistent*"
+gsource "nonexistent"
+gsource "nonexistent*"
+orsource "nonexistent"
+orsource "nonexistent*"
+grsource "nonexistent"
+grsource "nonexistent*"
+
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/Klocation_sourced b/support/kconfiglib/tests/Klocation_sourced
new file mode 100644
index 00000000..6e19f76b
--- /dev/null
+++ b/support/kconfiglib/tests/Klocation_sourced
@@ -0,0 +1,18 @@
+
+
+config MULTI_DEF
+
+choice CHOICE
+	bool "choice"
+endchoice
+
+config MENU_HOOK
+	bool
+
+menu "menu"
+endmenu
+
+config COMMENT_HOOK
+	bool
+
+comment "comment"
diff --git a/support/kconfiglib/tests/Kmainmenu b/support/kconfiglib/tests/Kmainmenu
new file mode 100644
index 00000000..80713c0e
--- /dev/null
+++ b/support/kconfiglib/tests/Kmainmenu
@@ -0,0 +1,5 @@
+config FOO
+    string
+    option env="FOO"
+
+mainmenu "---$FOO---"
diff --git a/support/kconfiglib/tests/Kmenuconfig b/support/kconfiglib/tests/Kmenuconfig
new file mode 100644
index 00000000..9a4cc115
--- /dev/null
+++ b/support/kconfiglib/tests/Kmenuconfig
@@ -0,0 +1,37 @@
+# Menu nodes with is_menuconfig False
+
+config NOT_MENUCONFIG_1
+	bool
+
+config NOT_MENUCONFIG_2
+	bool "not menuconfig 2"
+
+config MENUCONFIG_MULTI_DEF
+	bool "menuconfig multi def 1"
+
+config COMMENT_HOOK
+	bool
+
+comment "not menuconfig 3"
+
+
+# Menu nodes with is_menuconfig True
+
+menuconfig MENUCONFIG_1
+	bool "menuconfig 1"
+
+menuconfig MENUCONFIG_MULTI_DEF
+	bool "menuconfig multi def 2"
+
+config MENU_HOOK
+	bool
+
+menu "menuconfig 2"
+endmenu
+
+config CHOICE_HOOK
+	bool
+
+choice
+	bool "menuconfig 3"
+endchoice
diff --git a/support/kconfiglib/tests/Kmisc b/support/kconfiglib/tests/Kmisc
new file mode 100644
index 00000000..d9a799d5
--- /dev/null
+++ b/support/kconfiglib/tests/Kmisc
@@ -0,0 +1,82 @@
+# For testing various minor APIs
+
+# optional choices
+
+choice NOT_OPTIONAL
+    bool "not optional"
+config A
+    bool "A"
+config B
+    bool "B"
+endchoice
+
+choice OPTIONAL
+    tristate "optional"
+    optional
+config C
+    tristate "C"
+config D
+    tristate "D"
+# Quirky symbols - not proper choice symbol
+
+config Q1
+    tristate "Q1"
+    depends on D
+
+config Q2
+    tristate "Q2"
+    depends on Q1
+
+config Q3
+    tristate "Q3"
+    depends on D
+
+endchoice
+
+# User values
+
+config BOOL
+    bool "bool" if NOT_DEFINED_1
+
+config TRISTATE
+    tristate # Visibility should not affect user value
+
+config STRING
+    string "string"
+
+config INT
+    int # Visibility should not affect user value
+
+config HEX
+    hex "hex"
+    depends on NOT_DEFINED_2
+
+config COMMENT_HOOK
+comment "comment"
+
+config MENU_HOOK
+menu "menu"
+    depends on NOT_DEFINED_3 || NOT_DEFINED_2
+    depends on !NOT_DEFINED_4
+endmenu
+
+config FROM_ENV
+    string "from env"
+    option env="ENV_VAR"
+
+config FROM_ENV_MISSING
+    string "from env missing"
+    option env="MISSING_ENV_VAR"
+    default "missing"
+
+config FROM_ENV_WEIRD
+    string
+    default "weird"
+    option env="ENV_VAR"
+
+config NOT_ALLNOCONFIG_Y
+    bool "not allnoconfig_y"
+
+config ALLNOCONFIG_Y
+    bool "allnoconfig_y"
+    option allnoconfig_y
diff --git a/support/kconfiglib/tests/Kmissingrsource b/support/kconfiglib/tests/Kmissingrsource
new file mode 100644
index 00000000..924b0b36
--- /dev/null
+++ b/support/kconfiglib/tests/Kmissingrsource
@@ -0,0 +1 @@
+rsource "nonexistent"
diff --git a/support/kconfiglib/tests/Kmissingsource b/support/kconfiglib/tests/Kmissingsource
new file mode 100644
index 00000000..a3a6c252
--- /dev/null
+++ b/support/kconfiglib/tests/Kmissingsource
@@ -0,0 +1 @@
+source "nonexistent"
diff --git a/support/kconfiglib/tests/Korder b/support/kconfiglib/tests/Korder
new file mode 100644
index 00000000..3a8dffab
--- /dev/null
+++ b/support/kconfiglib/tests/Korder
@@ -0,0 +1,35 @@
+config O
+	int "O"
+	default 0
+
+config R
+	int "R"
+	default 1
+
+config D
+	int "D"
+	default 2
+
+config E
+	int "E"
+	default 3
+
+# Defined twice
+config R
+	int "R"
+
+config R2
+	int "R2"
+	default 4
+
+config I
+	int "I"
+	default 5
+
+config N
+	int "N"
+	default 6
+
+config G
+	int "G"
+	default 7
diff --git a/support/kconfiglib/tests/Kpreprocess b/support/kconfiglib/tests/Kpreprocess
new file mode 100644
index 00000000..e30b3898
--- /dev/null
+++ b/support/kconfiglib/tests/Kpreprocess
@@ -0,0 +1,147 @@
+# Simple assignments (with bad formatting, as an additional test)
+
+simple-recursive=foo
+simple-immediate:=bar
+# Should become recursive
+simple-recursive-2+=baz
+
+	 whitespaced	 =	 foo
+
+
+# Simple += test. += should preserve the flavor of the variable (simple vs.
+# recursive).
+
+preserve-recursive = foo
+preserve-recursive += bar
+
+preserve-immediate := foo
+preserve-immediate += bar
+
+
+# Recursive substitution
+
+recursive = $(foo) $(bar) $($(b-char)a$(z-char))
+recursive += $(indir)
+
+foo = abc
+bar = def
+baz = ghi
+
+b-char = b
+z-char = z
+
+indir = jkl $(indir-2)
+indir-2 = mno
+
+
+# Immediate substitution
+
+def = foo
+immediate := $(undef)$(def)$(undef)$(def)
+def = bar
+undef = bar
+
+
+# Function calls
+
+# Chained function call
+quote = "$(1)" "$(2)"
+rev-quote = $(quote,$(2),$(1))
+surround-rev-quote = $(0) $(rev-quote,$(1),$(2)) $(0)
+surround-rev-quote-unused-arg = $(surround-rev-quote,$(1),$(2)) $(3)
+# No value is passed for $(3), so it expands to nothing
+fn-indir = surround-rev-quote
+messy-fn-res = $($(fn-indir)-unused-arg, a  b , c  d )
+
+# Special characters in function call
+comma = ,
+right-paren = )
+dollar = $
+left-paren = (
+fn = "$(1)"
+special-chars-fn-res = $(fn,$(comma)$(dollar)$(left-paren)foo$(right-paren))
+
+
+# Variable expansions in various locations (verified by checking how the symbol
+# prints)
+
+qaz = QAZ
+echo = $(1)
+ignore-first = $(2)
+
+config PRINT_ME
+	string "$(ENV_1)" if ($(echo,FOO) && $(echo,BAR)) || !$(echo,BAZ) || !(($(qaz)))
+	default "$(echo,"foo")" if "foo $(echo,"bar") baz" = "$(undefined)"
+
+# Expansion within a symbol token, with deliberate sloppiness
+config PRINT_$(ignore-first,  ,ME)_TOO
+	bool "foo"
+	default FOO$(ignore-first,    ,BAR)BAZ$(qaz) if $(qaz)&&$(qaz)FOO&&x$(ignore-first,  ,xx)
+
+
+# Recursive expansion (throws an exception)
+
+rec-1 = x $(rec-2) y
+rec-2 = x $(rec-3) y
+rec-3 = x $(rec-1) y
+
+# Functions are allowed to reference themselves, but an exception is thrown if
+# the function seems to be stuck (the recursion gets too deep)
+safe-fn-rec = $($(1))
+safe-fn-rec-2 = $(safe-fn-rec,safe-fn-rec-3)
+safe-fn-rec-3 = foo
+safe-fn-rec-res = $(safe-fn-rec,safe-fn-rec-2)
+
+unsafe-fn-rec = $(unsafe-fn-rec,$(1))
+
+
+# Expansion in the left-hand side of assignments
+
+dummy-arg-fn = bar
+lhs-indir-1 = lhs-indir-2
+lhs-indir-2 = -baz
+rhs = value
+# LHS expands to foo-bar-baz
+foo-$(dummy-arg-fn, ignored argument )$($(lhs-indir-1)) = $(rhs)
+# Expands to empty string, accepted
+  $(undefined)  
+
+# Variable with a space in its name
+empty =
+space = $(empty) $(empty)
+foo$(space)bar = value
+space-var-res = $(foo bar)
+
+
+# Built-in functions
+
+# Expands to "baz qaz"
+shell-res = $(shell,false && echo foo bar || echo baz qaz)
+
+# Warns about output on stderr, expands to nothing
+shell-stderr-res := $(shell,echo message on stderr >&2)
+
+# Expands to the current location
+location-res := $(filename):$(lineno)
+
+# Adds one warning, expands to nothing
+$(warning-if,,no warning)
+$(warning-if,n,no warning)
+warning-res := $(warning-if,y,a warning)
+
+# Does not cause an error, expands to nothing
+error-n-res := $(error-if,n,oops)
+
+# Causes an error when expanded
+error-y-res = $(error-if,y,oops)
+
+
+# Environment variables (for testing Kconfig.env_vars). ENV_1 is already
+# referenced above.
+env_ref_1 := xxx $(ENV_2) xxx
+env_ref_2 := $(shell,echo $(ENV_3))
+env_ref_3 :=
+env_ref_3 += $(ENV_4)
+$(warning-if,$(ENV_5),$(ENV_UNDEFINED))
+source "$(ENV_6)"
+env_ref_4 = $(ENV_7)  # Never evaluated
diff --git a/support/kconfiglib/tests/Krange b/support/kconfiglib/tests/Krange
new file mode 100644
index 00000000..30574833
--- /dev/null
+++ b/support/kconfiglib/tests/Krange
@@ -0,0 +1,133 @@
+#
+# No ranges
+#
+
+config HEX_NO_RANGE
+    hex "hex no range"
+
+config INT_NO_RANGE
+    int "int no range"
+
+#
+# Disabled ranges
+#
+
+config HEX_ALL_RANGES_DISABLED
+    hex "hex all ranges disabled"
+    range 0x10 0x20 if n
+    range 0x30 0x40 if n
+
+config INT_ALL_RANGES_DISABLED
+    int "int all ranges disabled"
+    range 10 20 if n
+    range 30 40 if n
+
+#
+# Ranges with defaults
+#
+
+# hex
+
+config HEX_RANGE_10_20_LOW_DEFAULT
+    hex "int range 10-20 low default"
+    range 0x10 0x20
+    default 0x9
+
+config HEX_RANGE_10_20_HIGH_DEFAULT
+    hex "int range 10-20 high default"
+    range 0x10 0x20
+    default 0x21
+
+config HEX_RANGE_10_20_OK_DEFAULT
+    hex "int range 10-20 ok default"
+    range 0x10 0x20
+    default 0x15
+
+config HEX_RANGE_10_20_OK_DEFAULT_ALTERNATE
+    hex "int range 10-20 ok default alternate"
+    range 0x10 0x20
+    default 15
+
+# int
+
+config INT_RANGE_10_20_LOW_DEFAULT
+    int "int range 10-20 low default"
+    range 10 20
+    default 9
+
+config INT_RANGE_10_20_HIGH_DEFAULT
+    int "int range 10-20 high default"
+    range 10 20
+    default 21
+
+config INT_RANGE_10_20_OK_DEFAULT
+    int "int range 10-20 ok default"
+    range 10 20
+    default 15
+
+#
+# Ranges with no defaults (should default to low end of range if > 0)
+#
+
+config HEX_RANGE_10_20
+    hex "hex range 10-20"    
+    range 0x10 0x20
+
+config HEX_RANGE_0_10
+    hex "hex range 0-10"
+    range 0x0 0x10
+
+config INT_RANGE_10_20
+    int "int range 10-20"    
+    range 10 20
+
+config INT_RANGE_0_10
+    int "int range 0-10"
+    range 0 10
+
+config INT_RANGE_NEG_10_10
+    int "int range -10-10"
+    range -10 10
+
+#
+# Dependent ranges
+#
+
+config HEX_40
+    hex
+    default 40
+
+config HEX_RANGE_10_40_DEPENDENT
+    hex "hex range 10-40 dependent"
+    range HEX_RANGE_10_20 HEX_40
+
+config INT_40
+    int
+    default 40
+
+config INT_RANGE_10_40_DEPENDENT
+    int "int range 10-40 dependent"
+    range INT_RANGE_10_20 INT_40
+
+#
+# Ranges on symbols defined in multiple locations
+#
+
+if n
+config INACTIVE_RANGE
+    range 0 1
+endif
+
+config INACTIVE_RANGE
+    int
+    # Default will apply and should not get clamped,
+    # because the range does not apply
+    default 2
+
+config ACTIVE_RANGE
+    range 0 1
+
+config ACTIVE_RANGE
+    int
+    # Default will apply and should be clamped to 1
+    default 2
diff --git a/support/kconfiglib/tests/Krecursive1 b/support/kconfiglib/tests/Krecursive1
new file mode 100644
index 00000000..35b521ae
--- /dev/null
+++ b/support/kconfiglib/tests/Krecursive1
@@ -0,0 +1 @@
+source "tests/Krecursive2"
diff --git a/support/kconfiglib/tests/Krecursive2 b/support/kconfiglib/tests/Krecursive2
new file mode 100644
index 00000000..9f9f00ed
--- /dev/null
+++ b/support/kconfiglib/tests/Krecursive2
@@ -0,0 +1 @@
+source "tests/Krecursive1"
diff --git a/support/kconfiglib/tests/Kreferenced b/support/kconfiglib/tests/Kreferenced
new file mode 100644
index 00000000..9da94c87
--- /dev/null
+++ b/support/kconfiglib/tests/Kreferenced
@@ -0,0 +1,63 @@
+config NO_REFS
+    bool
+
+config JUST_DEPENDS_ON_REFS
+    bool
+    depends on A && B
+
+if A
+
+menu "menu"
+    depends on B
+    visible if C
+    visible if D
+
+config LOTS_OF_REFS
+    bool "lots" if C || D
+    default E || F if G || H
+    default I || J if K || L
+    select M if N || O
+    select P if Q || R
+    imply S if T || U
+    imply V if W || X
+    depends on Y || Z
+
+endmenu
+
+endif
+
+config INT_REFS
+    int "int"
+    range A B if C && D
+    range E F if G && H
+
+choice CHOICE
+    bool "choice"
+
+config CHOICE_REF
+    bool "choice ref"
+
+endchoice
+
+comment "comment"
+    depends on A || B
+
+
+config MULTI_DEF_SYM
+    def_bool A && B
+
+config MULTI_DEF_SYM
+    depends on C
+
+
+choice MULTI_DEF_CHOICE
+    bool "choice"
+    depends on A && B
+
+endchoice
+
+choice MULTI_DEF_CHOICE
+    bool "choice"
+    depends on C
+
+endchoice
diff --git a/support/kconfiglib/tests/Krelation b/support/kconfiglib/tests/Krelation
new file mode 100644
index 00000000..940eff82
--- /dev/null
+++ b/support/kconfiglib/tests/Krelation
@@ -0,0 +1,36 @@
+config A
+    bool
+    depends on UNDEFINED
+
+choice CHOICE_1
+    bool "C"
+config B
+    bool "B"
+config C
+    bool "C" if B
+config D
+    bool "D"
+endchoice
+
+menu "m1"
+config E
+    bool
+menu "m2"
+config F
+    bool
+choice CHOICE_2
+    tristate "foo"
+config G
+    bool "g"
+config H
+    bool "h"
+endchoice
+endmenu
+config I
+    bool
+endmenu
+
+menu "m3"
+endmenu
+menu "m4"
+endmenu
diff --git a/support/kconfiglib/tests/Krepr b/support/kconfiglib/tests/Krepr
new file mode 100644
index 00000000..fe6d8f06
--- /dev/null
+++ b/support/kconfiglib/tests/Krepr
@@ -0,0 +1,64 @@
+config MODULES
+    bool
+    option modules
+    default y
+
+if UNDEFINED
+endif
+
+config BASIC
+    bool
+    default y
+    ---help---
+
+config VISIBLE
+    bool "visible"
+
+config STRING
+    string "visible"
+
+config DIR_DEP_N
+    depends on n
+
+config OPTIONS
+    option allnoconfig_y
+    option defconfig_list
+    option env="ENV"
+
+config MULTI_DEF
+config MULTI_DEF
+
+menuconfig MENUCONFIG
+
+choice CHOICE
+    tristate "choice"
+
+config CHOICE_1
+    tristate "choice sym"
+
+config CHOICE_2
+    tristate "choice sym"
+
+endchoice
+
+config CHOICE_HOOK
+
+choice
+    tristate "optional choice" if n
+    optional
+endchoice
+
+config NO_VISIBLE_IF_HOOK
+
+menu "no visible if"
+endmenu
+
+config VISIBLE_IF_HOOK
+
+menu "visible if"
+    visible if m
+endmenu
+
+config COMMENT_HOOK
+
+comment "comment"
diff --git a/support/kconfiglib/tests/Kstr b/support/kconfiglib/tests/Kstr
new file mode 100644
index 00000000..f55c8300
--- /dev/null
+++ b/support/kconfiglib/tests/Kstr
@@ -0,0 +1,293 @@
+if UNDEFINED
+endif
+
+config NO_TYPE
+
+config BASIC_NO_PROMPT
+    bool
+    help
+      blah blah
+
+        blah blah blah
+
+       blah
+
+config BASIC_PROMPT
+    bool "basic"
+
+config ADVANCED
+    tristate "prompt" if DEP
+    default DEFAULT_1
+    default DEFAULT_2 if DEP
+    select SELECTED_1
+    select SELECTED_2 if DEP
+    imply IMPLIED_1
+    imply IMPLIED_2 if DEP
+    help
+      first help text
+
+config ADVANCED
+    prompt "prompt 2"
+
+menuconfig ADVANCED
+    prompt "prompt 3"
+
+if DEP3
+
+menu "foo"
+    depends on DEP4
+    visible if VIS
+
+config ADVANCED
+    help
+      second help text
+    depends on A || !B || (C && D) || !(E && F) || G = H || \
+              (I && !J && (K || L) && !(M || N) && O = P)
+
+config ADVANCED
+    # Used to verify that the direct dependencies appear to the right of VIS
+    prompt "prompt 4"
+
+endmenu
+
+endif
+
+config ONLY_DIRECT_DEPS
+    int
+    depends on DEP1
+    depends on DEP2
+
+config STRING
+    def_string "foo"
+    default "bar" if DEP
+    default STRING2
+    default STRING3 if DEP
+
+config INT
+    def_int 7 if DEP
+    range 1 2
+    range FOO BAR
+    range BAZ QAZ if DEP
+
+config HEX
+    def_hex 0x123
+    range 0x100 0x200
+    range FOO BAR
+    range BAZ QAZ if DEP
+
+config MODULES
+    bool "MODULES"
+    option modules
+
+config OPTIONS
+    option allnoconfig_y
+    option defconfig_list
+    option env="ENV"
+
+if LOC_1
+config CORRECT_PROP_LOCS_BOOL
+    prompt "prompt 1"
+    default DEFAULT_1
+    default DEFAULT_2
+    select SELECT_1
+    select SELECT_2
+    imply IMPLY_1
+    imply IMPLY_2
+    help
+      help 1
+endif
+
+if LOC_2
+menuconfig CORRECT_PROP_LOCS_BOOL
+    bool "prompt 2"
+    default DEFAULT_3
+    default DEFAULT_4
+    select SELECT_3
+    select SELECT_4
+    imply IMPLY_3
+    imply IMPLY_4
+    help
+      help 2
+endif
+
+if LOC_3
+config CORRECT_PROP_LOCS_BOOL
+    prompt "prompt 3"
+    default DEFAULT_5
+    default DEFAULT_6
+    select SELECT_5
+    select SELECT_6
+    imply IMPLY_5
+    imply IMPLY_6
+    help
+      help 2
+endif
+
+if LOC_1
+config CORRECT_PROP_LOCS_INT
+    int
+    range 1 2
+    range 3 4
+endif
+
+if LOC_2
+config CORRECT_PROP_LOCS_INT
+    range 5 6
+    range 7 8
+endif
+
+choice CHOICE
+    tristate "foo"
+    default CHOICE_1
+    default CHOICE_2 if dep
+
+config CHOICE_1
+    tristate "choice 1"
+
+config CHOICE_2
+    tristate "choice 2"
+
+endchoice
+
+choice
+    tristate "no name"
+    optional
+endchoice
+
+if LOC_1
+choice CORRECT_PROP_LOCS_CHOICE
+    bool
+    default CHOICE_3
+
+config CHOICE_3
+    bool "choice 3"
+
+config CHOICE_4
+    bool "choice 3"
+
+config CHOICE_5
+    bool "choice 3"
+
+endchoice
+endif
+
+if LOC_2
+choice CORRECT_PROP_LOCS_CHOICE
+    default CHOICE_4
+endchoice
+endif
+
+if LOC_3
+choice CORRECT_PROP_LOCS_CHOICE
+    default CHOICE_5
+endchoice
+endif
+
+config SIMPLE_MENU_HOOK
+menu "simple menu"
+endmenu
+
+config ADVANCED_MENU_HOOK
+menu "advanced menu"
+    depends on A
+    visible if B
+    visible if C || D
+endmenu
+
+config SIMPLE_COMMENT_HOOK
+comment "simple comment"
+
+config ADVANCED_COMMENT_HOOK
+comment "advanced comment"
+    depends on A
+    depends on B
+
+# Corner cases when removing direct dependencies
+
+config DEP_REM_CORNER_CASES
+    bool
+    default A
+    depends on n
+
+config DEP_REM_CORNER_CASES
+    default B if n
+
+config DEP_REM_CORNER_CASES
+    default C
+    depends on m
+
+config DEP_REM_CORNER_CASES
+    default D if A && y
+    depends on y
+
+config DEP_REM_CORNER_CASES
+    default E if !E1
+    default F if F1 = F2
+    default G if G1 || H1
+    depends on !H
+
+config DEP_REM_CORNER_CASES
+    default H
+    depends on "foo" = "bar"
+
+menu "menu"
+    visible if FOO || BAR
+
+config DEP_REM_CORNER_CASES
+    prompt "prompt"
+    depends on BAZ && QAZ
+
+endmenu
+
+# Only prompt, no type
+config PROMPT_ONLY
+    prompt "prompt only"
+
+# {Symbol,Choice}.orig_*
+
+if BASE_DEP
+
+config BOOL_SYM_ORIG
+    bool
+    default D1 if DEP
+    default D2
+    select S1
+    select S2 if DEP
+    imply I1
+    imply I1
+
+config BOOL_SYM_ORIG
+    default D3
+    select S3
+    imply I3 if DEP
+
+config INT_SYM_ORIG
+    int
+    range 1 2 if DEP
+    range 3 4
+
+config INT_SYM_ORIG
+    range 5 6 if DEP
+
+choice CHOICE_ORIG
+    bool "choice orig"
+    default A
+    default B if DEP
+
+config A
+    bool
+
+config B
+    bool
+
+endchoice
+
+choice CHOICE_ORIG
+    default C if DEP
+
+config C
+    bool
+
+endchoice
+
+endif
diff --git a/support/kconfiglib/tests/Kundef b/support/kconfiglib/tests/Kundef
new file mode 100644
index 00000000..fae521a8
--- /dev/null
+++ b/support/kconfiglib/tests/Kundef
@@ -0,0 +1,23 @@
+config DEF
+	bool
+
+config BOOL
+	bool "foo" if DEF || !UNDEF_1
+	default UNDEF_2
+
+config INT
+	int
+	range UNDEF_2 8
+	default 10
+	range 5 15
+
+config HEX
+	hex
+	range 0x123 0X456
+	default 0x200
+
+menu "menu"
+	depends on UNDEF_1
+	visible if UNDEF_3
+
+endmenu
diff --git a/support/kconfiglib/tests/Kuserfunctions b/support/kconfiglib/tests/Kuserfunctions
new file mode 100644
index 00000000..89b44421
--- /dev/null
+++ b/support/kconfiglib/tests/Kuserfunctions
@@ -0,0 +1,11 @@
+add-zero  = $(add)
+add-one   = $(add,1)
+add-three = $(add,1,-1,2,1)
+
+one-zero = $(one)
+one-one  = $(one,foo bar)
+one-two  = $(one,foo bar,baz)
+
+one-or-more-zero  = $(one-or-more)
+one-or-more-one   = $(one-or-more,foo)
+one-or-more-three = $(one-or-more,foo,bar,baz)
diff --git a/support/kconfiglib/tests/Kvisibility b/support/kconfiglib/tests/Kvisibility
new file mode 100644
index 00000000..91def0a0
--- /dev/null
+++ b/support/kconfiglib/tests/Kvisibility
@@ -0,0 +1,342 @@
+config MODULES
+    bool "MODULES"
+    option modules
+
+#
+# Symbol visibility
+#
+
+config NO_PROMPT
+    bool
+
+# Not rewritten, so MOD will have the value 'y' when running without modules
+config MOD
+    def_tristate m
+
+config BOOL_N
+    bool "bool n" if n
+
+config BOOL_M
+    # Rewritten to m && MODULES
+    bool "bool m" if m
+
+config BOOL_MOD
+    bool "bool MOD"
+    # Not rewritten
+    depends on MOD
+
+config BOOL_Y
+    bool "bool y"
+    # Rewritten to m && MODULES
+    depends on y || m
+
+config TRISTATE_N
+    tristate "tristate n" if n
+
+config TRISTATE_M
+    # Rewritten to m && MODULES
+    tristate "tristate m" if m
+
+config TRISTATE_MOD
+    tristate "tristate MOD"
+    # Not rewritten
+    depends on MOD
+
+config TRISTATE_Y
+    bool "tristate y"
+    # Rewritten to m && MODULES
+    depends on y || m
+
+# Symbols nested in 'if'
+
+if n
+
+config BOOL_IF_N
+    bool "bool if n"
+
+config TRISTATE_IF_N
+    tristate "tristate if n"
+
+endif
+
+if m
+
+config BOOL_IF_M
+    bool "bool if m"
+
+config TRISTATE_IF_M
+    tristate "tristate if n"
+
+endif
+
+if y
+
+config BOOL_IF_Y
+    bool "bool if y"
+
+config TRISTATE_IF_Y
+    tristate "tristate if y"
+
+endif
+
+# Symbols nested in 'menu'
+
+menu "menu 1"
+    depends on n
+
+config BOOL_MENU_N
+    bool "bool menu n"
+
+config TRISTATE_MENU_N
+    tristate "tristate menu n"
+
+endmenu
+
+menu "menu 2"
+    depends on m
+
+config BOOL_MENU_M
+    bool "bool menu m"
+
+config TRISTATE_MENU_M
+    tristate "tristate menu n"
+
+endmenu
+
+menu "menu 3"
+    depends on y
+
+config BOOL_MENU_Y
+    bool "bool menu y"
+
+config TRISTATE_MENU_Y
+    tristate "tristate menu y"
+
+endmenu
+
+# Symbols nested in choices
+
+choice C1
+    tristate "choice n" if n
+
+config BOOL_CHOICE_N
+    bool "bool choice n"
+
+config TRISTATE_CHOICE_N
+    tristate "tristate choice n"
+
+endchoice
+
+choice C2
+    tristate "choice m" if m
+
+config BOOL_CHOICE_M
+    bool "bool choice m"
+
+config TRISTATE_CHOICE_M
+    tristate "tristate choice n"
+
+endchoice
+
+choice C3
+    tristate "choice y" if y
+
+config BOOL_CHOICE_Y
+    bool "bool choice y"
+
+config TRISTATE_CHOICE_Y
+    tristate "tristate choice y"
+
+endchoice
+
+#
+# Choice visibility
+#
+
+choice BOOL_CHOICE_N
+    bool "bool choice n" if n
+endchoice
+
+choice BOOL_CHOICE_M
+    bool "bool choice m" if m
+endchoice
+
+choice BOOL_CHOICE_Y
+    bool "bool choice y" if y
+endchoice
+
+choice TRISTATE_CHOICE_N
+    tristate "tristate choice n" if n
+endchoice
+
+choice TRISTATE_CHOICE_M
+    tristate "tristate choice m" if m
+endchoice
+
+choice TRISTATE_CHOICE_Y
+    tristate "tristate choice y" if y
+
+config K
+    tristate "K"
+
+config L
+    tristate "L"
+
+endchoice
+
+if m
+choice TRISTATE_CHOICE_IF_M_AND_Y
+    tristate "tristate choice if m and y" if y
+
+config M
+    bool "M"
+
+config N
+    bool "N"
+
+endchoice
+endif
+
+menu "choice-containing menu"
+    depends on n && y
+
+choice TRISTATE_CHOICE_MENU_N_AND_Y
+    tristate "tristate choice if n and y"
+
+config O
+    tristate "O"
+
+config P
+    tristate "P"
+
+endchoice
+
+endmenu
+
+#
+# Menu visibility
+#
+
+menu "menu n"
+    depends on n
+endmenu
+
+menu "menu m"
+    depends on m
+endmenu
+
+menu "menu y"
+    depends on y
+endmenu
+
+if n
+menu "menu if n"
+endmenu
+endif
+
+if m
+menu "menu if m"
+endmenu
+endif
+
+if y
+menu "menu if y"
+endmenu
+endif
+
+if m
+menu "menu if m and y"
+    depends on y
+endmenu
+endif
+
+#
+# Comment visibility
+#
+
+comment "comment n"
+    depends on n
+comment "comment m"
+    depends on m
+comment "comment y"
+    depends on y
+
+if n
+comment "comment if n"
+endif
+
+if m
+comment "comment if m"
+endif
+
+if y
+comment "comment if y"
+endif
+
+if "y"
+
+menu "menu with comment"
+    depends on m
+
+comment "double-nested m comment"
+    depends on y
+
+endmenu
+
+endif
+
+# Used to verify that string/int/hex symbols with m visibility accept a user
+# value
+
+if m
+
+config STRING_m
+    string "string"
+
+config INT_m
+    int "int"
+
+config HEX_m
+    hex "hex"
+
+endif
+
+# Menu 'visible if' visibility
+
+menu "n-visible menu"
+    visible if n
+
+config VISIBLE_IF_N
+    tristate "visible if n"
+
+endmenu
+
+menu "m-visible menu"
+    visible if m
+
+config VISIBLE_IF_M
+    tristate "visible if m"
+
+endmenu
+
+menu "y-visible menu"
+    visible if y
+
+config VISIBLE_IF_Y
+    tristate "visible if m"
+
+endmenu
+
+menu "m-visible menu 2"
+    visible if y || n
+    visible if m && y
+    visible if y
+
+if y
+
+config VISIBLE_IF_M_2
+    tristate "visible if m 2"
+
+endif
+
+endmenu
diff --git a/support/kconfiglib/tests/config_indented b/support/kconfiglib/tests/config_indented
new file mode 100644
index 00000000..d57d8b4c
--- /dev/null
+++ b/support/kconfiglib/tests/config_indented
@@ -0,0 +1,3 @@
+# Indented assignments should be ignored to be compatible with the C
+# implementation
+ CONFIG_IGNOREME=n
diff --git a/support/kconfiglib/tests/config_set_bool b/support/kconfiglib/tests/config_set_bool
new file mode 100644
index 00000000..d2dccbf0
--- /dev/null
+++ b/support/kconfiglib/tests/config_set_bool
@@ -0,0 +1 @@
+CONFIG_BOOL=y
diff --git a/support/kconfiglib/tests/config_set_string b/support/kconfiglib/tests/config_set_string
new file mode 100644
index 00000000..3a1250a7
--- /dev/null
+++ b/support/kconfiglib/tests/config_set_string
@@ -0,0 +1 @@
+CONFIG_STRING="foo bar"
diff --git a/support/kconfiglib/tests/defconfig_1 b/support/kconfiglib/tests/defconfig_1
new file mode 100644
index 00000000..e69de29b
diff --git a/support/kconfiglib/tests/defconfig_2 b/support/kconfiglib/tests/defconfig_2
new file mode 100644
index 00000000..e69de29b
diff --git a/support/kconfiglib/tests/empty b/support/kconfiglib/tests/empty
new file mode 100644
index 00000000..e69de29b
diff --git a/support/kconfiglib/tests/kconfigfunctions.py b/support/kconfiglib/tests/kconfigfunctions.py
new file mode 100644
index 00000000..e7604687
--- /dev/null
+++ b/support/kconfiglib/tests/kconfigfunctions.py
@@ -0,0 +1,14 @@
+def add(kconf, name, *args):
+    return str(sum(map(int, args)))
+
+def one(kconf, name, s):
+    return name + 2*s
+
+def one_or_more(kconf, name, arg, *args):
+    return arg + " + " + ",".join(args)
+
+functions = {
+    "add":         (add,         0, None),
+    "one":         (one,         1,    1),
+    "one-or-more": (one_or_more, 1, None),
+}
diff --git a/support/kconfiglib/tests/reltest b/support/kconfiglib/tests/reltest
new file mode 100755
index 00000000..3e09e5f0
--- /dev/null
+++ b/support/kconfiglib/tests/reltest
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+# Runs the test suite and all examples scripts with Python 2 and Python 3,
+# bailing immediately if anything fails. For the examples that aren't tested in
+# the test suite, we just confirm that they at least run.
+#
+# Should be run from the kernel root with  $ Kconfiglib/tests/reltest
+
+test_script() {
+    echo -e "\n================= $1 with $py =================\n"
+    if (($# == 1)); then
+        make scriptconfig PYTHONCMD=$py SCRIPT=$1
+    else
+        make scriptconfig PYTHONCMD=$py SCRIPT=$1 SCRIPT_ARG="$2"
+    fi
+
+    if (($?)); then
+        echo "$1 failed to run with $py"
+        exit 1
+    fi
+}
+
+for py in python2 python3; do
+    echo -e "\n================= Test suite with $py =================\n"
+
+    if ! $py Kconfiglib/testsuite.py; then
+        echo "test suite failed for $py"
+        exit 1
+    fi
+
+    # Check that the example scripts that aren't tested by the test suite run
+    # at least
+
+    test_script Kconfiglib/examples/defconfig_oldconfig.py
+    test_script Kconfiglib/examples/eval_expr.py MODULES
+    test_script Kconfiglib/examples/find_symbol.py X86
+    test_script Kconfiglib/examples/help_grep.py general
+    test_script Kconfiglib/examples/print_sym_info.py MODULES
+    test_script Kconfiglib/examples/print_tree.py
+
+    $py Kconfiglib/examples/menuconfig_example.py Kconfiglib/examples/Kmenuconfig <<END
+BOOL
+n
+END
+    if (($?)); then
+        echo "menuconfig_example.py failed with $py"
+        exit 1
+    fi
+done
+
+echo "everything okay"
diff --git a/support/kconfiglib/tests/sub/Kconfig_symlink_2 b/support/kconfiglib/tests/sub/Kconfig_symlink_2
new file mode 100644
index 00000000..aeba9857
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Kconfig_symlink_2
@@ -0,0 +1 @@
+rsource "Kconfig_symlink_3"
diff --git a/support/kconfiglib/tests/sub/Kconfig_symlink_3 b/support/kconfiglib/tests/sub/Kconfig_symlink_3
new file mode 100644
index 00000000..20b4e065
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Kconfig_symlink_3
@@ -0,0 +1,2 @@
+config FOUNDME
+    bool
diff --git a/support/kconfiglib/tests/sub/Klocation_grsourced1 b/support/kconfiglib/tests/sub/Klocation_grsourced1
new file mode 100644
index 00000000..49dac36e
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_grsourced1
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_grsourced2 b/support/kconfiglib/tests/sub/Klocation_grsourced2
new file mode 100644
index 00000000..49dac36e
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_grsourced2
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_gsourced1 b/support/kconfiglib/tests/sub/Klocation_gsourced1
new file mode 100644
index 00000000..49dac36e
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_gsourced1
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_gsourced2 b/support/kconfiglib/tests/sub/Klocation_gsourced2
new file mode 100644
index 00000000..49dac36e
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_gsourced2
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_rsourced b/support/kconfiglib/tests/sub/Klocation_rsourced
new file mode 100644
index 00000000..c6f185d8
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_rsourced
@@ -0,0 +1,2 @@
+
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/defconfig_in_sub b/support/kconfiglib/tests/sub/defconfig_in_sub
new file mode 100644
index 00000000..e69de29b
diff --git a/support/kconfiglib/tests/sub/sub/Kconfig_symlink_1 b/support/kconfiglib/tests/sub/sub/Kconfig_symlink_1
new file mode 100644
index 00000000..bceec8ba
--- /dev/null
+++ b/support/kconfiglib/tests/sub/sub/Kconfig_symlink_1
@@ -0,0 +1,2 @@
+# Sources tests/sub/Kconfig_symlink_2, with an absolute path
+source "$(KCONFIG_SYMLINK_2)"
diff --git a/support/kconfiglib/tests/symlink b/support/kconfiglib/tests/symlink
new file mode 120000
index 00000000..565623e2
--- /dev/null
+++ b/support/kconfiglib/tests/symlink
@@ -0,0 +1 @@
+sub/sub
\ No newline at end of file
diff --git a/support/kconfiglib/testsuite.py b/support/kconfiglib/testsuite.py
new file mode 100644
index 00000000..3a6a3a68
--- /dev/null
+++ b/support/kconfiglib/testsuite.py
@@ -0,0 +1,3136 @@
+# Copyright (c) 2011-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+# This is the Kconfiglib test suite. It runs selftests on Kconfigs provided by
+# us and tests compatibility with the C Kconfig implementation by comparing the
+# output of Kconfiglib with the output of the scripts/kconfig/*conf utilities
+# for different targets and defconfigs. It should be run from the top-level
+# kernel directory with
+#
+#   $ python Kconfiglib/testsuite.py
+#
+# Some additional options can be turned on by passing them as arguments. They
+# default to off.
+#
+#  - obsessive:
+#    By default, only valid arch/defconfig pairs are tested. In obsessive mode,
+#    every arch will be tested with every defconfig. Increases the testing time
+#    by an order of magnitude. Occasionally finds (usually obscure) bugs, and I
+#    make sure everything passes with it.
+#
+#  - obsessive-min-config:
+#    Like obsessive, for the minimal configuation (defconfig) tests.
+#
+#  - log:
+#    Log timestamped defconfig test failures to the file test_defconfig_fails.
+#    Handy in obsessive mode.
+#
+# For example, this commands runs the test suite in obsessive mode with logging
+# enabled:
+#
+#   $ python(3) Kconfiglib/testsuite.py obsessive log
+#
+# pypy works too, and runs most tests much faster than CPython.
+#
+# All tests should pass. Report regressions to ulfalizer a.t Google's email
+# service.
+
+import difflib
+import errno
+import os
+import platform
+import re
+import shutil
+import subprocess
+import sys
+import tempfile
+import textwrap
+
+from kconfiglib import Kconfig, Symbol, Choice, COMMENT, MENU, MenuNode, \
+                       BOOL, TRISTATE, HEX, STRING, \
+                       TRI_TO_STR, \
+                       escape, unescape, \
+                       expr_str, expr_value, expr_items, split_expr, \
+                       _ordered_unique, \
+                       OR, AND, \
+                       KconfigError
+
+
+def shell(cmd):
+    with open(os.devnull, "w") as devnull:
+        subprocess.call(cmd, shell=True, stdout=devnull, stderr=devnull)
+
+
+all_passed = True
+
+
+def fail(msg=None):
+    global all_passed
+    all_passed = False
+    if msg is not None:
+        print("fail: " + msg)
+
+
+def verify(cond, msg):
+    if not cond:
+        fail(msg)
+
+
+def verify_equal(x, y):
+    if x != y:
+        fail("'{}' does not equal '{}'".format(x, y))
+
+
+# Prevent accidental loading of configuration files by removing
+# KCONFIG_ALLCONFIG from the environment
+os.environ.pop("KCONFIG_ALLCONFIG", None)
+
+obsessive = False
+obsessive_min_config = False
+log = False
+
+
+def run_tests():
+    global obsessive, log
+    for s in sys.argv[1:]:
+        if s == "obsessive":
+            obsessive = True
+            print("Obsessive mode enabled")
+        elif s == "obsessive-min-config":
+            obsessive_min_config = True
+            print("Obsessive minimal config mode enabled")
+        elif s == "log":
+            log = True
+            print("Log mode enabled")
+        else:
+            print("Unrecognized option '{}'".format(s))
+            return
+
+    run_selftests()
+    run_compatibility_tests()
+
+
+def run_selftests():
+    #
+    # Common helper functions. These all expect 'c' to hold the current
+    # configuration.
+    #
+
+    def verify_value(sym_name, val):
+        # Verifies that a symbol has a particular value.
+
+        if isinstance(val, int):
+            val = TRI_TO_STR[val]
+
+        sym = c.syms[sym_name]
+        verify(sym.str_value == val,
+               'expected {} to have the value "{}", had the value "{}"'
+               .format(sym_name, val, sym.str_value))
+
+    def assign_and_verify_value(sym_name, val, new_val):
+        # Assigns 'val' to a symbol and verifies that its value becomes
+        # 'new_val'. Assumes (and tests) that 'val' is valid for the
+        # symbol type.
+
+        if isinstance(new_val, int):
+            new_val = TRI_TO_STR[new_val]
+
+        sym = c.syms[sym_name]
+        old_val = sym.str_value
+        verify(sym.set_value(val),
+               "assigning '{}' to {} unexpectedly failed"
+               .format(val, sym_name))
+        verify(sym.str_value == new_val,
+               "expected {} to have the value '{}' after being assigned the "
+               "value '{}'. Instead, the value is '{}'. The old value was "
+               "'{}'."
+               .format(sym_name, new_val, val, sym.str_value, old_val))
+
+    def assign_and_verify(sym_name, user_val):
+        # Like assign_and_verify_value(), with the expected value being the
+        # value just set.
+
+        assign_and_verify_value(sym_name, user_val, user_val)
+
+    def assign_and_verify_user_value(sym_name, val, user_val, valid):
+        # Assigns a user value to the symbol and verifies the new user value.
+        # If valid is True, the user value is valid for the type, otherwise
+        # not. This is used to test the set_value() return value.
+
+        sym = c.syms[sym_name]
+        sym_old_user_val = sym.user_value
+
+        verify(sym.set_value(val) == valid,
+               "expected the user value '{}' to be {} for {}, was not"
+               .format(val, "valid" if valid else "invalid", sym_name))
+        verify(sym.user_value == user_val,
+               "the assigned user value '{}' wasn't reflected in user_value "
+               "on the symbol {}. Instead, the new user_value was '{}'. The "
+               "old user value was '{}'."
+               .format(user_val, sym_name, sym.user_value, sym_old_user_val))
+
+    #
+    # Selftests
+    #
+
+    print("Testing string literal lexing")
+
+    # Dummy empty configuration just to get a Kconfig object
+    c = Kconfig("Kconfiglib/tests/empty")
+
+    def verify_string_lex(s, expected):
+        # Verifies that a constant symbol with the name 'res' is produced from
+        # lexing 's'
+
+        res = c._tokenize("if " + s)[1].name
+        verify(res == expected,
+               "expected <{}> to produced the constant symbol <{}>, "
+               'produced <{}>'.format(s[1:-1], expected, res))
+
+    verify_string_lex(r""" "" """, "")
+    verify_string_lex(r""" '' """, "")
+
+    verify_string_lex(r""" "a" """, "a")
+    verify_string_lex(r""" 'a' """, "a")
+    verify_string_lex(r""" "ab" """, "ab")
+    verify_string_lex(r""" 'ab' """, "ab")
+    verify_string_lex(r""" "abc" """, "abc")
+    verify_string_lex(r""" 'abc' """, "abc")
+
+    verify_string_lex(r""" "'" """, "'")
+    verify_string_lex(r""" '"' """, '"')
+
+    verify_string_lex(r""" "\"" """, '"')
+    verify_string_lex(r""" '\'' """, "'")
+
+    verify_string_lex(r""" "\"\"" """, '""')
+    verify_string_lex(r""" '\'\'' """, "''")
+
+    verify_string_lex(r""" "\'" """, "'")
+    verify_string_lex(r""" '\"' """, '"')
+
+    verify_string_lex(r""" "\\" """, "\\")
+    verify_string_lex(r""" '\\' """, "\\")
+
+    verify_string_lex(r""" "\a\\'\b\c\"'d" """, 'a\\\'bc"\'d')
+    verify_string_lex(r""" '\a\\"\b\c\'"d' """, "a\\\"bc'\"d")
+
+    def verify_string_bad(s):
+        # Verifies that tokenizing 's' throws a KconfigError. Strips the first
+        # and last characters from 's' so we can use readable raw strings as
+        # input.
+
+        try:
+            c.eval_string(s)
+        except KconfigError:
+            pass
+        else:
+            fail("expected tokenization of {} to fail, didn't".format(s[1:-1]))
+
+    verify_string_bad(r""" " """)
+    verify_string_bad(r""" ' """)
+    verify_string_bad(r""" "' """)
+    verify_string_bad(r""" '" """)
+    verify_string_bad(r""" "\" """)
+    verify_string_bad(r""" '\' """)
+    verify_string_bad(r""" "foo """)
+    verify_string_bad(r""" 'foo """)
+
+
+    print("Testing escape() and unescape()")
+
+    def verify_escape_unescape(s, sesc):
+        # Verify that 's' escapes to 'sesc' and that 'sesc' unescapes to 's'
+        verify_equal(escape(s), sesc)
+        verify_equal(unescape(sesc), s)
+
+    verify_escape_unescape(r''          , r''              )
+    verify_escape_unescape(r'foo'       , r'foo'           )
+    verify_escape_unescape(r'"'         , r'\"'            )
+    verify_escape_unescape(r'""'        , r'\"\"'          )
+    verify_escape_unescape('\\'         , r'\\'            )
+    verify_escape_unescape(r'\\'        , r'\\\\'          )
+    verify_escape_unescape(r'\"'        , r'\\\"'          )
+    verify_escape_unescape(r'"ab\cd"ef"', r'\"ab\\cd\"ef\"')
+
+    # Backslashes before any character should be unescaped, not just before "
+    # and \
+    verify_equal(unescape(r"\afoo\b\c\\d\\\e\\\\f"), r"afoobc\d\e\\f")
+
+
+    print("Testing _ordered_unique()")
+
+    verify_equal(_ordered_unique([]), [])
+    verify_equal(_ordered_unique([1]), [1])
+    verify_equal(_ordered_unique([1, 2]), [1, 2])
+    verify_equal(_ordered_unique([1, 1]), [1])
+    verify_equal(_ordered_unique([1, 1, 2]), [1, 2])
+    verify_equal(_ordered_unique([1, 2, 1]), [1, 2])
+    verify_equal(_ordered_unique([1, 2, 2]), [1, 2])
+    verify_equal(_ordered_unique([1, 2, 3, 2, 1, 2, 3, 4, 3, 2, 1, 0]),
+                                 [1, 2, 3, 4, 0])
+
+
+    print("Testing expression evaluation")
+
+    c = Kconfig("Kconfiglib/tests/Keval", warn=False)
+
+    def verify_eval(expr, val):
+        res = c.eval_string(expr)
+        verify(res == val,
+               "'{}' evaluated to {}, expected {}".format(expr, res, val))
+
+    # No modules
+    verify_eval("n", 0)
+    verify_eval("m", 0)
+    verify_eval("y", 2)
+    verify_eval("'n'", 0)
+    verify_eval("'m'", 0)
+    verify_eval("'y'", 2)
+    verify_eval("M", 2)
+
+    # Modules
+    c.modules.set_value(2)
+    verify_eval("n", 0)
+    verify_eval("m", 1)
+    verify_eval("y", 2)
+    verify_eval("'n'", 0)
+    verify_eval("'m'", 1)
+    verify_eval("'y'", 2)
+    verify_eval("M", 1)
+    verify_eval("(Y || N) && (m && y)", 1)
+
+    # Non-bool/non-tristate symbols are always n in a tristate sense
+    verify_eval("Y_STRING", 0)
+    verify_eval("Y_STRING || m", 1)
+
+    # As are all constants besides y and m
+    verify_eval('"foo"', 0)
+    verify_eval('"foo" || "bar"', 0)
+    verify_eval('"foo" || m', 1)
+
+    # Test equality for symbols
+
+    verify_eval("N = N", 2)
+    verify_eval("N = n", 2)
+    verify_eval("N = 'n'", 2)
+    verify_eval("N != N", 0)
+    verify_eval("N != n", 0)
+    verify_eval("N != 'n'", 0)
+
+    verify_eval("M = M", 2)
+    verify_eval("M = m", 2)
+    verify_eval("M = 'm'", 2)
+    verify_eval("M != M", 0)
+    verify_eval("M != m", 0)
+    verify_eval("M != 'm'", 0)
+
+    verify_eval("Y = Y", 2)
+    verify_eval("Y = y", 2)
+    verify_eval("Y = 'y'", 2)
+    verify_eval("Y != Y", 0)
+    verify_eval("Y != y", 0)
+    verify_eval("Y != 'y'", 0)
+
+    verify_eval("N != M", 2)
+    verify_eval("N != Y", 2)
+    verify_eval("M != Y", 2)
+
+    verify_eval("Y_STRING = y", 2)
+    verify_eval("Y_STRING = 'y'", 2)
+    verify_eval('FOO_BAR_STRING = "foo bar"', 2)
+    verify_eval('FOO_BAR_STRING != "foo bar baz"', 2)
+    verify_eval('INT_37 = 37', 2)
+    verify_eval("INT_37 = '37'", 2)
+    verify_eval('HEX_0X37 = 0x37', 2)
+    verify_eval("HEX_0X37 = '0x37'", 2)
+
+    # These should also hold after 31847b67 (kconfig: allow use of relations
+    # other than (in)equality)
+    verify_eval("HEX_0X37 = '0x037'", 2)
+    verify_eval("HEX_0X37 = '0x0037'", 2)
+
+    # Constant symbol comparisons
+    verify_eval('"foo" != "bar"', 2)
+    verify_eval('"foo" = "bar"', 0)
+    verify_eval('"foo" = "foo"', 2)
+
+    # Undefined symbols get their name as their value
+    c.warn = False
+    verify_eval("'not_defined' = not_defined", 2)
+    verify_eval("not_defined_2 = not_defined_2", 2)
+    verify_eval("not_defined_1 != not_defined_2", 2)
+
+    # Test less than/greater than
+
+    # Basic evaluation
+    verify_eval("INT_37 < 38", 2)
+    verify_eval("38 < INT_37", 0)
+    verify_eval("INT_37 < '38'", 2)
+    verify_eval("'38' < INT_37", 0)
+    verify_eval("INT_37 < 138", 2)
+    verify_eval("138 < INT_37", 0)
+    verify_eval("INT_37 < '138'", 2)
+    verify_eval("'138' < INT_37", 0)
+    verify_eval("INT_37 < -138", 0)
+    verify_eval("-138 < INT_37", 2)
+    verify_eval("INT_37 < '-138'", 0)
+    verify_eval("'-138' < INT_37", 2)
+    verify_eval("INT_37 < 37", 0)
+    verify_eval("37 < INT_37", 0)
+    verify_eval("INT_37 < 36", 0)
+    verify_eval("36 < INT_37", 2)
+
+    # Different formats in comparison
+    verify_eval("INT_37 < 0x26", 2) # 38
+    verify_eval("INT_37 < 0x25", 0) # 37
+    verify_eval("INT_37 < 0x24", 0) # 36
+    verify_eval("HEX_0X37 < 56", 2) # 0x38
+    verify_eval("HEX_0X37 < 55", 0) # 0x37
+    verify_eval("HEX_0X37 < 54", 0) # 0x36
+
+    # Other int comparisons
+    verify_eval("INT_37 <= 38", 2)
+    verify_eval("INT_37 <= 37", 2)
+    verify_eval("INT_37 <= 36", 0)
+    verify_eval("INT_37 >  38", 0)
+    verify_eval("INT_37 >  37", 0)
+    verify_eval("INT_37 >  36", 2)
+    verify_eval("INT_37 >= 38", 0)
+    verify_eval("INT_37 >= 37", 2)
+    verify_eval("INT_37 >= 36", 2)
+
+    # Other hex comparisons
+    verify_eval("HEX_0X37 <= 0x38", 2)
+    verify_eval("HEX_0X37 <= 0x37", 2)
+    verify_eval("HEX_0X37 <= 0x36", 0)
+    verify_eval("HEX_0X37 >  0x38", 0)
+    verify_eval("HEX_0X37 >  0x37", 0)
+    verify_eval("HEX_0X37 >  0x36", 2)
+    verify_eval("HEX_0X37 >= 0x38", 0)
+    verify_eval("HEX_0X37 >= 0x37", 2)
+    verify_eval("HEX_0X37 >= 0x36", 2)
+
+    # A hex holding a value without a "0x" prefix should still be treated as
+    # hexadecimal
+    verify_eval("HEX_37 < 0x38", 2)
+    verify_eval("HEX_37 < 0x37", 0)
+    verify_eval("HEX_37 < 0x36", 0)
+
+    # Symbol comparisons
+    verify_eval("INT_37   <  HEX_0X37", 2)
+    verify_eval("INT_37   >  HEX_0X37", 0)
+    verify_eval("HEX_0X37 <  INT_37  ", 0)
+    verify_eval("HEX_0X37 >  INT_37  ", 2)
+    verify_eval("INT_37   <  INT_37  ", 0)
+    verify_eval("INT_37   <= INT_37  ", 2)
+    verify_eval("INT_37   >  INT_37  ", 0)
+    verify_eval("INT_37   <= INT_37  ", 2)
+
+    # Tristate value comparisons
+    verify_eval("n < n", 0)
+    verify_eval("n < m", 2)
+    verify_eval("n < y", 2)
+    verify_eval("n < N", 0)
+    verify_eval("n < M", 2)
+    verify_eval("n < Y", 2)
+    verify_eval("0 > n", 0)
+    verify_eval("1 > n", 2)
+    verify_eval("2 > n", 2)
+    verify_eval("m < n", 0)
+    verify_eval("m < m", 0)
+    verify_eval("m < y", 2)
+
+    # Strings compare lexicographically
+    verify_eval("'aa' < 'ab'", 2)
+    verify_eval("'aa' > 'ab'", 0)
+    verify_eval("'ab' < 'aa'", 0)
+    verify_eval("'ab' > 'aa'", 2)
+
+    # Comparisons where one of the operands doesn't parse as a number also give
+    # a lexicographic comparison
+    verify_eval("INT_37 <  '37a' ", 2)
+    verify_eval("'37a'  >  INT_37", 2)
+    verify_eval("INT_37 <= '37a' ", 2)
+    verify_eval("'37a'  >= INT_37", 2)
+    verify_eval("INT_37 >= '37a' ", 0)
+    verify_eval("INT_37 >  '37a' ", 0)
+    verify_eval("'37a'  <  INT_37", 0)
+    verify_eval("'37a'  <= INT_37", 0)
+
+    def verify_eval_bad(expr):
+        try:
+            c.eval_string(expr)
+        except KconfigError:
+            pass
+        else:
+            fail('expected eval_string("{}") to throw KconfigError, '
+                 "didn't".format(expr))
+
+    # Verify that some bad stuff throws KconfigError's
+    verify_eval_bad("")
+    verify_eval_bad("&")
+    verify_eval_bad("|")
+    verify_eval_bad("!")
+    verify_eval_bad("(")
+    verify_eval_bad(")")
+    verify_eval_bad("=")
+    verify_eval_bad("(X")
+    verify_eval_bad("X)")
+    verify_eval_bad("X X")
+    verify_eval_bad("!X X")
+    verify_eval_bad("X !X")
+    verify_eval_bad("(X) X")
+    verify_eval_bad("X &&")
+    verify_eval_bad("&& X")
+    verify_eval_bad("X && && X")
+    verify_eval_bad("X && !&&")
+    verify_eval_bad("X ||")
+    verify_eval_bad("|| X")
+
+
+    print("Testing Symbol.__str__()/custom_str() and def_{int,hex,string}")
+
+    def verify_str(item, s):
+        verify_equal(str(item), s[1:-1])
+
+    def verify_custom_str(item, s):
+        verify_equal(item.custom_str(lambda sc: "[{}]".format(sc.name)),
+                     s[1:-1])
+
+    c = Kconfig("Kconfiglib/tests/Kstr", warn=False)
+
+    c.modules.set_value(2)
+
+    verify_str(c.syms["UNDEFINED"], """
+""")
+
+    verify_str(c.syms["BASIC_NO_PROMPT"], """
+config BASIC_NO_PROMPT
+	bool
+	help
+	  blah blah
+	  
+	    blah blah blah
+	  
+	   blah
+""")
+
+    verify_str(c.syms["BASIC_PROMPT"], """
+config BASIC_PROMPT
+	bool "basic"
+""")
+
+    verify_str(c.syms["ADVANCED"], """
+config ADVANCED
+	tristate "prompt" if DEP
+	default DEFAULT_1
+	default DEFAULT_2 if DEP
+	select SELECTED_1
+	select SELECTED_2 if DEP
+	imply IMPLIED_1
+	imply IMPLIED_2 if DEP
+	help
+	  first help text
+
+config ADVANCED
+	tristate "prompt 2"
+
+menuconfig ADVANCED
+	tristate "prompt 3"
+
+config ADVANCED
+	tristate
+	depends on (A || !B || (C && D) || !(E && F) || G = H || (I && !J && (K || L) && !(M || N) && O = P)) && DEP4 && DEP3
+	help
+	  second help text
+
+config ADVANCED
+	tristate "prompt 4" if VIS
+	depends on DEP4 && DEP3
+""")
+
+    verify_custom_str(c.syms["ADVANCED"], """
+config ADVANCED
+	tristate "prompt" if [DEP]
+	default [DEFAULT_1]
+	default [DEFAULT_2] if [DEP]
+	select [SELECTED_1]
+	select [SELECTED_2] if [DEP]
+	imply [IMPLIED_1]
+	imply [IMPLIED_2] if [DEP]
+	help
+	  first help text
+
+config ADVANCED
+	tristate "prompt 2"
+
+menuconfig ADVANCED
+	tristate "prompt 3"
+
+config ADVANCED
+	tristate
+	depends on ([A] || ![B] || ([C] && [D]) || !([E] && [F]) || [G] = [H] || ([I] && ![J] && ([K] || [L]) && !([M] || [N]) && [O] = [P])) && [DEP4] && [DEP3]
+	help
+	  second help text
+
+config ADVANCED
+	tristate "prompt 4" if [VIS]
+	depends on [DEP4] && [DEP3]
+""")
+
+
+    verify_str(c.syms["ONLY_DIRECT_DEPS"], """
+config ONLY_DIRECT_DEPS
+	int
+	depends on DEP1 && DEP2
+""")
+
+    verify_str(c.syms["STRING"], """
+config STRING
+	string
+	default "foo"
+	default "bar" if DEP
+	default STRING2
+	default STRING3 if DEP
+""")
+
+    verify_str(c.syms["INT"], """
+config INT
+	int
+	range 1 2
+	range FOO BAR
+	range BAZ QAZ if DEP
+	default 7 if DEP
+""")
+
+    verify_str(c.syms["HEX"], """
+config HEX
+	hex
+	range 0x100 0x200
+	range FOO BAR
+	range BAZ QAZ if DEP
+	default 0x123
+""")
+
+    verify_str(c.modules, """
+config MODULES
+	bool "MODULES"
+	option modules
+""")
+
+    verify_str(c.syms["OPTIONS"], """
+config OPTIONS
+	option allnoconfig_y
+	option defconfig_list
+	option env="ENV"
+""")
+
+    verify_str(c.syms["CORRECT_PROP_LOCS_BOOL"], """
+config CORRECT_PROP_LOCS_BOOL
+	bool "prompt 1"
+	default DEFAULT_1
+	default DEFAULT_2
+	select SELECT_1
+	select SELECT_2
+	imply IMPLY_1
+	imply IMPLY_2
+	depends on LOC_1
+	help
+	  help 1
+
+menuconfig CORRECT_PROP_LOCS_BOOL
+	bool "prompt 2"
+	default DEFAULT_3
+	default DEFAULT_4
+	select SELECT_3
+	select SELECT_4
+	imply IMPLY_3
+	imply IMPLY_4
+	depends on LOC_2
+	help
+	  help 2
+
+config CORRECT_PROP_LOCS_BOOL
+	bool "prompt 3"
+	default DEFAULT_5
+	default DEFAULT_6
+	select SELECT_5
+	select SELECT_6
+	imply IMPLY_5
+	imply IMPLY_6
+	depends on LOC_3
+	help
+	  help 2
+""")
+
+    verify_str(c.syms["CORRECT_PROP_LOCS_INT"], """
+config CORRECT_PROP_LOCS_INT
+	int
+	range 1 2
+	range 3 4
+	depends on LOC_1
+
+config CORRECT_PROP_LOCS_INT
+	int
+	range 5 6
+	range 7 8
+	depends on LOC_2
+""")
+
+    verify_str(c.syms["PROMPT_ONLY"], """
+config PROMPT_ONLY
+	prompt "prompt only"
+""")
+
+    verify_custom_str(c.syms["CORRECT_PROP_LOCS_INT"], """
+config CORRECT_PROP_LOCS_INT
+	int
+	range [1] [2]
+	range [3] [4]
+	depends on [LOC_1]
+
+config CORRECT_PROP_LOCS_INT
+	int
+	range [5] [6]
+	range [7] [8]
+	depends on [LOC_2]
+""")
+
+
+
+    print("Testing Choice.__str__()/custom_str()")
+
+    verify_str(c.named_choices["CHOICE"], """
+choice CHOICE
+	tristate "foo"
+	default CHOICE_1
+	default CHOICE_2 if dep
+""")
+
+    verify_str(c.named_choices["CHOICE"].nodes[0].next.item, """
+choice
+	tristate "no name"
+	optional
+""")
+
+    verify_str(c.named_choices["CORRECT_PROP_LOCS_CHOICE"], """
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default CHOICE_3
+	depends on LOC_1
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default CHOICE_4
+	depends on LOC_2
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default CHOICE_5
+	depends on LOC_3
+""")
+
+    verify_custom_str(c.named_choices["CORRECT_PROP_LOCS_CHOICE"], """
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default [CHOICE_3]
+	depends on [LOC_1]
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default [CHOICE_4]
+	depends on [LOC_2]
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default [CHOICE_5]
+	depends on [LOC_3]
+""")
+
+
+    print("Testing MenuNode.__str__()/custom_str() for menus and comments")
+
+    verify_str(c.syms["SIMPLE_MENU_HOOK"].nodes[0].next, """
+menu "simple menu"
+""")
+
+    verify_str(c.syms["ADVANCED_MENU_HOOK"].nodes[0].next, """
+menu "advanced menu"
+	depends on A
+	visible if B && (C || D)
+""")
+
+    verify_custom_str(c.syms["ADVANCED_MENU_HOOK"].nodes[0].next, """
+menu "advanced menu"
+	depends on [A]
+	visible if [B] && ([C] || [D])
+""")
+
+    verify_str(c.syms["SIMPLE_COMMENT_HOOK"].nodes[0].next, """
+comment "simple comment"
+""")
+
+    verify_str(c.syms["ADVANCED_COMMENT_HOOK"].nodes[0].next, """
+comment "advanced comment"
+	depends on A && B
+""")
+
+    verify_custom_str(c.syms["ADVANCED_COMMENT_HOOK"].nodes[0].next, """
+comment "advanced comment"
+	depends on [A] && [B]
+""")
+
+
+    print("Testing {MenuNode,Symbol,Choice}.orig_*")
+
+    # Just test some corner cases here re. MenuNode.orig_*. They are already
+    # indirectly tested above. Use MenuNode.__str__() as a proxy.
+
+    verify_str(c.syms["DEP_REM_CORNER_CASES"], """
+config DEP_REM_CORNER_CASES
+	bool
+	default A
+	depends on n
+
+config DEP_REM_CORNER_CASES
+	bool
+	default B if n
+
+config DEP_REM_CORNER_CASES
+	bool
+	default C
+	depends on m && MODULES
+
+config DEP_REM_CORNER_CASES
+	bool
+	default D if A
+
+config DEP_REM_CORNER_CASES
+	bool
+	default E if !E1
+	default F if F1 = F2
+	default G if G1 || H1
+	depends on !H
+
+config DEP_REM_CORNER_CASES
+	bool
+	default H
+	depends on "foo" = "bar"
+
+config DEP_REM_CORNER_CASES
+	bool "prompt" if FOO || BAR
+	depends on BAZ && QAZ
+""")
+
+    # Test {Symbol,Choice}.orig_*
+
+    def verify_deps(elms, dep_index, expected):
+        verify_equal(" ".join(expr_str(elm[dep_index]) for elm in elms),
+                     expected)
+
+    verify_deps(c.syms["BOOL_SYM_ORIG"].orig_defaults,        1, "DEP y y")
+    verify_deps(c.syms["BOOL_SYM_ORIG"].orig_selects,         1, "y DEP y")
+    verify_deps(c.syms["BOOL_SYM_ORIG"].orig_implies,         1, "y y DEP")
+    verify_deps(c.syms["INT_SYM_ORIG"].orig_ranges,           2, "DEP y DEP")
+    verify_deps(c.named_choices["CHOICE_ORIG"].orig_defaults, 1, "y DEP DEP")
+
+
+    print("Testing Symbol.__repr__()")
+
+    def verify_repr(item, s):
+        verify_equal(repr(item) + "\n", s[1:])
+
+    c = Kconfig("Kconfiglib/tests/Krepr", warn=False)
+
+    verify_repr(c.n, """
+<symbol n, tristate, value n, constant>
+""")
+
+    verify_repr(c.m, """
+<symbol m, tristate, value m, constant>
+""")
+
+    verify_repr(c.y, """
+<symbol y, tristate, value y, constant>
+""")
+
+    verify_repr(c.syms["UNDEFINED"], """
+<symbol UNDEFINED, unknown, value "UNDEFINED", visibility n, direct deps n, undefined>
+""")
+
+    verify_repr(c.syms["BASIC"], """
+<symbol BASIC, bool, value y, visibility n, direct deps y, Kconfiglib/tests/Krepr:9>
+""")
+
+    verify_repr(c.syms["VISIBLE"], """
+<symbol VISIBLE, bool, "visible", value n, visibility y, direct deps y, Kconfiglib/tests/Krepr:14>
+""")
+
+    c.syms["VISIBLE"].set_value(2)
+    c.syms["STRING"].set_value("foo")
+
+    verify_repr(c.syms["VISIBLE"], """
+<symbol VISIBLE, bool, "visible", value y, user value y, visibility y, direct deps y, Kconfiglib/tests/Krepr:14>
+""")
+
+    verify_repr(c.syms["STRING"], """
+<symbol STRING, string, "visible", value "foo", user value "foo", visibility y, direct deps y, Kconfiglib/tests/Krepr:17>
+""")
+
+    verify_repr(c.syms["DIR_DEP_N"], """
+<symbol DIR_DEP_N, unknown, value "DIR_DEP_N", visibility n, direct deps n, Kconfiglib/tests/Krepr:20>
+""")
+
+    verify_repr(c.syms["OPTIONS"], """
+<symbol OPTIONS, unknown, value "OPTIONS", visibility n, allnoconfig_y, is the defconfig_list symbol, from environment variable ENV, direct deps y, Kconfiglib/tests/Krepr:23>
+""")
+
+    verify_repr(c.syms["MULTI_DEF"], """
+<symbol MULTI_DEF, unknown, value "MULTI_DEF", visibility n, direct deps y, Kconfiglib/tests/Krepr:28, Kconfiglib/tests/Krepr:29>
+""")
+
+    verify_repr(c.syms["CHOICE_1"], """
+<symbol CHOICE_1, tristate, "choice sym", value n, visibility m, choice symbol, direct deps m, Kconfiglib/tests/Krepr:36>
+""")
+
+    verify_repr(c.modules, """
+<symbol MODULES, bool, value y, visibility n, is the modules symbol, direct deps y, Kconfiglib/tests/Krepr:1>
+""")
+
+
+    print("Testing Choice.__repr__()")
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode m, visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    c.named_choices["CHOICE"].set_value(2)
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode y, user mode y, CHOICE_1 selected, visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    c.syms["CHOICE_2"].set_value(2)
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode y, user mode y, CHOICE_2 selected, CHOICE_2 selected by user, visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    c.named_choices["CHOICE"].set_value(1)
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode m, user mode m, CHOICE_2 selected by user (overridden), visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    verify_repr(c.syms["CHOICE_HOOK"].nodes[0].next.item, """
+<choice, tristate, "optional choice", mode n, visibility n, optional, Kconfiglib/tests/Krepr:46>
+""")
+
+
+    print("Testing MenuNode.__repr__()")
+
+    verify_repr(c.syms["BASIC"].nodes[0], """
+<menu node for symbol BASIC, deps y, has help, has next, Kconfiglib/tests/Krepr:9>
+""")
+
+    verify_repr(c.syms["DIR_DEP_N"].nodes[0], """
+<menu node for symbol DIR_DEP_N, deps n, has next, Kconfiglib/tests/Krepr:20>
+""")
+
+    verify_repr(c.syms["MULTI_DEF"].nodes[0], """
+<menu node for symbol MULTI_DEF, deps y, has next, Kconfiglib/tests/Krepr:28>
+""")
+
+    verify_repr(c.syms["MULTI_DEF"].nodes[1], """
+<menu node for symbol MULTI_DEF, deps y, has next, Kconfiglib/tests/Krepr:29>
+""")
+
+    verify_repr(c.syms["MENUCONFIG"].nodes[0], """
+<menu node for symbol MENUCONFIG, is menuconfig, deps y, has next, Kconfiglib/tests/Krepr:31>
+""")
+
+    verify_repr(c.named_choices["CHOICE"].nodes[0], """
+<menu node for choice CHOICE, prompt "choice" (visibility y), deps y, has child, has next, Kconfiglib/tests/Krepr:33>
+""")
+
+    verify_repr(c.syms["CHOICE_HOOK"].nodes[0].next, """
+<menu node for choice, prompt "optional choice" (visibility n), deps y, has next, Kconfiglib/tests/Krepr:46>
+""")
+
+    verify_repr(c.syms["NO_VISIBLE_IF_HOOK"].nodes[0].next, """
+<menu node for menu, prompt "no visible if" (visibility y), deps y, 'visible if' deps y, has next, Kconfiglib/tests/Krepr:53>
+""")
+
+    verify_repr(c.syms["VISIBLE_IF_HOOK"].nodes[0].next, """
+<menu node for menu, prompt "visible if" (visibility y), deps y, 'visible if' deps m, has next, Kconfiglib/tests/Krepr:58>
+""")
+
+    verify_repr(c.syms["COMMENT_HOOK"].nodes[0].next, """
+<menu node for comment, prompt "comment" (visibility y), deps y, Kconfiglib/tests/Krepr:64>
+""")
+
+
+    print("Testing Kconfig.__repr__()")
+
+    verify_repr(c, """
+<configuration with 15 symbols, main menu prompt "Main menu", srctree is current directory, config symbol prefix "CONFIG_", warnings disabled, printing of warnings to stderr enabled, undef. symbol assignment warnings disabled, overriding symbol assignment warnings enabled, redundant symbol assignment warnings enabled>
+""")
+
+    os.environ["srctree"] = "Kconfiglib"
+    os.environ["CONFIG_"] = "CONFIG_ value"
+
+    c = Kconfig("tests/Krepr", warn=False)
+    c.warn = True
+    c.warn_to_stderr = False
+    c.warn_assign_override = False
+    c.warn_assign_redun = False
+    c.warn_assign_undef = True
+
+    verify_repr(c, """
+<configuration with 15 symbols, main menu prompt "Main menu", srctree "Kconfiglib", config symbol prefix "CONFIG_ value", warnings enabled, printing of warnings to stderr disabled, undef. symbol assignment warnings enabled, overriding symbol assignment warnings disabled, redundant symbol assignment warnings disabled>
+""")
+
+    os.environ.pop("srctree", None)
+    os.environ.pop("CONFIG_", None)
+
+
+    print("Testing tricky help strings")
+
+    c = Kconfig("Kconfiglib/tests/Khelp")
+
+    def verify_help(node, s):
+        verify_equal(node.help, s[1:-1])
+
+    verify_help(c.syms["TWO_HELP_STRINGS"].nodes[0], """
+first help string
+""")
+
+    verify_help(c.syms["TWO_HELP_STRINGS"].nodes[1], """
+second help string
+""")
+
+    verify_help(c.syms["NO_BLANK_AFTER_HELP"].nodes[0], """
+help for
+NO_BLANK_AFTER_HELP
+""")
+
+    verify_help(c.named_choices["CHOICE_HELP"].nodes[0], """
+help for
+CHOICE_HELP
+""")
+
+    verify_help(c.syms["HELP_TERMINATED_BY_COMMENT"].nodes[0], """
+a
+b
+c
+""")
+
+    verify_help(c.syms["TRICKY_HELP"].nodes[0], """
+a
+ b
+  c
+
+ d
+  e
+   f
+
+
+g
+ h
+  i
+""")
+
+
+    print("Testing locations, source/rsource/gsource/grsource, and "
+          "Kconfig.kconfig_filenames")
+
+    def verify_locations(nodes, *expected_locs):
+        verify(len(nodes) == len(expected_locs),
+               "Wrong number of locations for " + repr(nodes))
+
+        for node, expected_loc in zip(nodes, expected_locs):
+            node_loc = "{}:{}".format(node.filename, node.linenr)
+            verify(node_loc == expected_loc,
+                   "expected {} to have the location {}, had the location {}"
+                   .format(repr(node), expected_loc, node_loc))
+
+    # Expanded in the 'source' statement in Klocation
+
+    os.environ["TESTS_DIR_FROM_ENV"] = "tests"
+    os.environ["SUB_DIR_FROM_ENV"] = "sub"
+
+    os.environ["_SOURCED"] = "_sourced"
+    os.environ["_RSOURCED"] = "_rsourced"
+    os.environ["_GSOURCED"] = "_gsourced"
+    os.environ["_GRSOURCED"] = "_grsourced"
+
+    # Test twice, with $srctree as a relative and an absolute path,
+    # respectively
+    for srctree in "Kconfiglib", os.path.abspath("Kconfiglib"):
+        os.environ["srctree"] = srctree
+
+        # Has symbol with empty help text, so disable warnings
+        c = Kconfig("tests/Klocation", warn=False)
+
+        verify_locations(c.syms["SINGLE_DEF"].nodes, "tests/Klocation:4")
+
+        verify_locations(c.syms["MULTI_DEF"].nodes,
+          "tests/Klocation:7",
+          "tests/Klocation:37",
+          "tests/Klocation:39",
+          "tests/Klocation_sourced:3",
+          "tests/sub/Klocation_rsourced:2",
+          "tests/sub/Klocation_gsourced1:1",
+          "tests/sub/Klocation_gsourced2:1",
+          "tests/sub/Klocation_gsourced1:1",
+          "tests/sub/Klocation_gsourced2:1",
+          "tests/sub/Klocation_grsourced1:1",
+          "tests/sub/Klocation_grsourced2:1",
+          "tests/sub/Klocation_grsourced1:1",
+          "tests/sub/Klocation_grsourced2:1",
+          "tests/Klocation:72")
+
+        verify_locations(c.named_choices["CHOICE"].nodes,
+                         "tests/Klocation_sourced:5")
+
+        verify_locations([c.syms["MENU_HOOK"].nodes[0].next],
+                         "tests/Klocation_sourced:12")
+
+        verify_locations([c.syms["COMMENT_HOOK"].nodes[0].next],
+                         "tests/Klocation_sourced:18")
+
+        # Test Kconfig.kconfig_filenames
+
+        verify_equal(c.kconfig_filenames, [
+            "tests/Klocation",
+            "tests/Klocation_sourced",
+            "tests/sub/Klocation_rsourced",
+            "tests/sub/Klocation_gsourced1",
+            "tests/sub/Klocation_gsourced2",
+            "tests/sub/Klocation_gsourced1",
+            "tests/sub/Klocation_gsourced2",
+            "tests/sub/Klocation_grsourced1",
+            "tests/sub/Klocation_grsourced2",
+            "tests/sub/Klocation_grsourced1",
+            "tests/sub/Klocation_grsourced2"
+        ])
+
+        # Test recursive 'source' detection
+
+        try:
+            Kconfig("tests/Krecursive1")
+        except KconfigError as e:
+            verify_equal(str(e), """
+tests/Krecursive2:1: recursive 'source' of 'tests/Krecursive1' detected. Check that environment variables are set correctly.
+Include path:
+tests/Krecursive1:1
+tests/Krecursive2:1
+"""[:-1])
+        except:
+            fail("recursive 'source' raised wrong exception")
+        else:
+            fail("recursive 'source' did not raise exception")
+
+        # Verify that source and rsource throw exceptions for missing files
+
+        # TODO: Make an exception test helper
+
+        try:
+            Kconfig("tests/Kmissingsource")
+        except KconfigError as e:
+            if "not found" not in str(e):
+                fail("'source' with missing file raised wrong KconfigError")
+        except:
+            fail("'source' with missing file raised wrong exception")
+        else:
+            fail("'source' with missing file did not raise exception")
+
+        try:
+            Kconfig("tests/Kmissingrsource")
+        except KconfigError as e:
+            if "not found" not in str(e):
+                fail("'rsource' with missing file raised wrong KconfigError")
+        except:
+            fail("'rsource' with missing file raised wrong exception")
+        else:
+            fail("'rsource' with missing file did not raise exception")
+
+    # Test a tricky case involving symlinks. $srctree is tests/symlink, which
+    # points to tests/sub/sub, meaning tests/symlink/.. != tests/. Previously,
+    # using 'rsource' from a file sourced with an absolute path triggered an
+    # unsafe relpath() with tests/symlink/.. in it, crashing.
+
+    os.environ["srctree"] = "Kconfiglib/tests/symlink"
+    os.environ["KCONFIG_SYMLINK_2"] = os.path.abspath(
+        "Kconfiglib/tests/sub/Kconfig_symlink_2")
+    if not os.path.isabs(
+        Kconfig("Kconfig_symlink_1").syms["FOUNDME"].nodes[0].filename):
+
+        fail("Symlink + rsource issues")
+
+
+    print("Testing Kconfig.node_iter()")
+
+    # Reuse tests/Klocation. The node_iter(unique_syms=True) case already gets
+    # plenty of testing from write_config() as well.
+
+    os.environ["srctree"] = "Kconfiglib"
+    c = Kconfig("tests/Klocation", warn=False)
+
+    verify_equal(
+        [node.item.name for node in c.node_iter()
+         if isinstance(node.item, Symbol)],
+        ["SINGLE_DEF", "MULTI_DEF", "HELP_1", "HELP_2", "HELP_3", "MULTI_DEF",
+         "MULTI_DEF", "MULTI_DEF", "MENU_HOOK", "COMMENT_HOOK"] + \
+        10*["MULTI_DEF"])
+
+    verify_equal(
+        [node.item.name for node in c.node_iter(True)
+         if isinstance(node.item, Symbol)],
+        ["SINGLE_DEF", "MULTI_DEF", "HELP_1", "HELP_2", "HELP_3", "MENU_HOOK",
+         "COMMENT_HOOK"])
+
+    verify_equal(
+        [node.prompt[0] for node in c.node_iter()
+         if not isinstance(node.item, Symbol)],
+        ["choice", "menu", "comment"])
+
+    verify_equal(
+        [node.prompt[0] for node in c.node_iter(True)
+         if not isinstance(node.item, Symbol)],
+        ["choice", "menu", "comment"])
+
+
+    print("Testing MenuNode.include_path")
+
+    os.environ["srctree"] = "Kconfiglib/tests"
+
+    c = Kconfig("Kinclude_path")
+
+    def verify_node_path(node, *expected):
+        if node.include_path != expected:
+            fail("Wrong include path for node {!r}. Got {}, expected {}."
+                 .format(node, node.include_path, expected))
+
+    def verify_sym_path(sym_name, node_i, *expected):
+        verify_node_path(c.syms[sym_name].nodes[node_i], *expected)
+
+    verify_sym_path("TOP", 0)
+    verify_sym_path("TOP", 1)
+    verify_sym_path("TOP", 2)
+
+    verify_sym_path("ONE_DOWN", 0, ("Kinclude_path", 4))
+    verify_sym_path("ONE_DOWN", 1, ("Kinclude_path", 4))
+    verify_sym_path("ONE_DOWN", 2, ("Kinclude_path", 4))
+    verify_sym_path("ONE_DOWN", 3, ("Kinclude_path", 9))
+    verify_sym_path("ONE_DOWN", 4, ("Kinclude_path", 9))
+    verify_sym_path("ONE_DOWN", 5, ("Kinclude_path", 9))
+
+    verify_sym_path("TWO_DOWN", 0,
+                    ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+    verify_sym_path("TWO_DOWN", 1,
+                    ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 9))
+    verify_sym_path("TWO_DOWN", 2,
+                    ("Kinclude_path", 9), ("Kinclude_path_sourced_1", 4))
+    verify_sym_path("TWO_DOWN", 3,
+                    ("Kinclude_path", 9), ("Kinclude_path_sourced_1", 9))
+
+    verify_node_path(c.top_node)
+    verify_node_path(c.menus[0], ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+    verify_node_path(c.comments[0], ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+    verify_node_path(c.choices[0].nodes[0], ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+
+    os.environ.pop("srctree", None)
+
+
+    print("Testing Kconfig.choices/menus/comments")
+
+    c = Kconfig("Kconfiglib/tests/Kitemlists")
+
+    def verify_prompts(items, *expected_prompts):
+        verify(len(items) == len(expected_prompts),
+               "Wrong number of prompts for {}".format(items))
+
+        for item, expected_prompt in zip(items, expected_prompts):
+            if not isinstance(item, MenuNode):
+                item = item.nodes[0]
+
+            verify(item.prompt[0] == expected_prompt,
+                   "Wrong prompt for {}, expected '{}'"
+                   .format(repr(item), expected_prompt))
+
+    verify_prompts(c.choices, "choice 1", "choice 2", "choice 3", "choice 2")
+    verify_prompts(c.menus, "menu 1", "menu 2", "menu 3", "menu 4", "menu 5")
+    verify_prompts(c.comments, "comment 1", "comment 2", "comment 3")
+
+
+    print("Testing Symbol/Choice.direct_dep")
+
+    c = Kconfig("Kconfiglib/tests/Kdirdep")
+
+    verify_equal(expr_str(c.syms["NO_DEP_SYM"].direct_dep), 'y')
+    verify_equal(expr_str(c.syms["DEP_SYM"].direct_dep), "A || (B && C) || !D")
+
+    verify_equal(expr_str(c.named_choices["NO_DEP_CHOICE"].direct_dep), 'y')
+    verify_equal(expr_str(c.named_choices["DEP_CHOICE"].direct_dep),
+                 "A || B || C")
+
+
+    print("Testing expr_items()")
+
+    c = Kconfig("Kconfiglib/tests/Kexpr_items")
+
+    def verify_expr_items(expr, *sym_names):
+        verify_equal(tuple(sorted(item.name for item in expr_items(expr))),
+                     sym_names)
+
+    verify_expr_items(
+        c.syms["TEST"].defaults[0][0],
+        "A", "B", "C", "D", "E", "F", "G", "H"
+    )
+
+    verify_expr_items(
+        c.syms["TEST_CHOICE"].nodes[0].prompt[1],
+        "A", "CHOICE"
+    )
+
+
+    print("Testing MenuNode/Symbol/Choice.referenced")
+
+    c = Kconfig("Kconfiglib/tests/Kreferenced", warn=False)
+
+    def verify_deps(item, *dep_names):
+        verify_equal(tuple(sorted(item.name for item in item.referenced)),
+                     dep_names)
+
+    verify_deps(c.top_node, "y")
+
+    verify_deps(c.syms["NO_REFS"].nodes[0], "y")
+
+    verify_deps(c.syms["JUST_DEPENDS_ON_REFS"].nodes[0], "A", "B")
+
+    verify_deps(c.syms["LOTS_OF_REFS"].nodes[0],
+                *(chr(n) for n in range(ord("A"), ord("Z") + 1)))
+
+    verify_deps(c.syms["INT_REFS"].nodes[0],
+                "A", "B", "C", "D", "E", "F", "G", "H", "y")
+
+    verify_deps(c.syms["CHOICE_REF"].nodes[0], "CHOICE")
+
+    verify_deps(c.menus[0], "A", "B", "C", "D")
+
+    verify_deps(c.comments[0], "A", "B")
+
+    verify_deps(c.syms["MULTI_DEF_SYM"], "A", "B", "C", "y")
+    verify_deps(c.named_choices["MULTI_DEF_CHOICE"], "A", "B", "C")
+
+
+    print("Testing split_expr()")
+
+    c = Kconfig("Kconfiglib/tests/empty")
+    c.warn = False
+
+    def verify_split(to_split, op, operand_strs):
+        # The same hackage as in Kconfig.eval_string()
+        c._tokens = c._tokenize("if " + to_split)[1:]
+        c._tokens_i = 0
+
+        operands = split_expr(c._parse_expr(False), op)
+
+        verify(len(operands) == len(operand_strs),
+               "Wrong number of operands when {} was split by {}"
+               .format(to_split, "OR" if op == OR else "AND"))
+
+        for operand, operand_str in zip(operands, operand_strs):
+            verify_equal(expr_str(operand), operand_str)
+
+    verify_split("A",                    OR, ("A",                ))
+    verify_split("!A",                   OR, ("!A",               ))
+    verify_split("A = B",                OR, ("A = B",            ))
+    verify_split("A && B",               OR, ("A && B",           ))
+    verify_split("A || B",               OR, ("A", "B"            ))
+    verify_split("(A || B) || C",        OR, ("A", "B", "C"       ))
+    verify_split("A || (B || C)",        OR, ("A", "B", "C"       ))
+    verify_split("A || !(B || C)",       OR, ("A", "!(B || C)"    ))
+    verify_split("A || (B && (C || D))", OR, ("A", "B && (C || D)"))
+    verify_split("(A && (B || C)) || D", OR, ("A && (B || C)", "D"))
+
+    verify_split("A",                    AND, ("A",                ))
+    verify_split("!A",                   AND, ("!A",               ))
+    verify_split("A = B",                AND, ("A = B",            ))
+    verify_split("A || B",               AND, ("A || B",           ))
+    verify_split("A && B",               AND, ("A", "B"            ))
+    verify_split("(A && B) && C",        AND, ("A", "B", "C"       ))
+    verify_split("A && (B && C)",        AND, ("A", "B", "C"       ))
+    verify_split("A && !(B && C)",       AND, ("A", "!(B && C)"    ))
+    verify_split("A && (B || (C && D))", AND, ("A", "B || (C && D)"))
+    verify_split("(A || (B && C)) && D", AND, ("A || (B && C)", "D"))
+
+
+    print("Testing visibility")
+
+    c = Kconfig("Kconfiglib/tests/Kvisibility")
+
+    def verify_visibility(item, no_module_vis, module_vis):
+        c.modules.set_value(0)
+        verify(item.visibility == no_module_vis,
+               "expected {} to have visibility {} without modules, had "
+               "visibility {}".
+               format(repr(item), no_module_vis, item.visibility))
+
+        c.modules.set_value(2)
+        verify(item.visibility == module_vis,
+               "expected {} to have visibility {} with modules, had "
+               "visibility {}".
+               format(repr(item), module_vis, item.visibility))
+
+    # Symbol visibility
+
+    verify_visibility(c.syms["NO_PROMPT"],     0, 0)
+    verify_visibility(c.syms["BOOL_N"],        0, 0)
+    verify_visibility(c.syms["BOOL_M"],        0, 2)
+    verify_visibility(c.syms["BOOL_MOD"],      2, 2)
+    verify_visibility(c.syms["BOOL_Y"],        2, 2)
+    verify_visibility(c.syms["TRISTATE_M"],    0, 1)
+    verify_visibility(c.syms["TRISTATE_MOD"],  2, 1)
+    verify_visibility(c.syms["TRISTATE_Y"],    2, 2)
+    verify_visibility(c.syms["BOOL_IF_N"],     0, 0)
+    verify_visibility(c.syms["BOOL_IF_M"],     0, 2)
+    verify_visibility(c.syms["BOOL_IF_Y"],     2, 2)
+    verify_visibility(c.syms["BOOL_MENU_N"],   0, 0)
+    verify_visibility(c.syms["BOOL_MENU_M"],   0, 2)
+    verify_visibility(c.syms["BOOL_MENU_Y"],   2, 2)
+    verify_visibility(c.syms["BOOL_CHOICE_N"], 0, 0)
+
+    # Non-tristate symbols in tristate choices are only visible if the choice
+    # is in y mode
+
+    # The choice can't be brought to y mode because of the 'if m'
+    verify_visibility(c.syms["BOOL_CHOICE_M"], 0, 0)
+    c.syms["BOOL_CHOICE_M"].choice.set_value(2)
+    verify_visibility(c.syms["BOOL_CHOICE_M"], 0, 0)
+
+    # The choice gets y mode only when running without modules, because it
+    # defaults to m mode
+    verify_visibility(c.syms["BOOL_CHOICE_Y"], 2, 0)
+    c.syms["BOOL_CHOICE_Y"].choice.set_value(2)
+    # When set to y mode, the choice symbol becomes visible both with and
+    # without modules
+    verify_visibility(c.syms["BOOL_CHOICE_Y"], 2, 2)
+
+    verify_visibility(c.syms["TRISTATE_IF_N"],     0, 0)
+    verify_visibility(c.syms["TRISTATE_IF_M"],     0, 1)
+    verify_visibility(c.syms["TRISTATE_IF_Y"],     2, 2)
+    verify_visibility(c.syms["TRISTATE_MENU_N"],   0, 0)
+    verify_visibility(c.syms["TRISTATE_MENU_M"],   0, 1)
+    verify_visibility(c.syms["TRISTATE_MENU_Y"],   2, 2)
+    verify_visibility(c.syms["TRISTATE_CHOICE_N"], 0, 0)
+    verify_visibility(c.syms["TRISTATE_CHOICE_M"], 0, 1)
+    verify_visibility(c.syms["TRISTATE_CHOICE_Y"], 2, 2)
+
+    verify_visibility(c.named_choices["BOOL_CHOICE_N"],     0, 0)
+    verify_visibility(c.named_choices["BOOL_CHOICE_M"],     0, 2)
+    verify_visibility(c.named_choices["BOOL_CHOICE_Y"],     2, 2)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_N"], 0, 0)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_M"], 0, 1)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_Y"], 2, 2)
+
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_IF_M_AND_Y"],   0, 1)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_MENU_N_AND_Y"], 0, 0)
+
+    # Verify that 'visible if' visibility gets propagated to prompts
+
+    verify_visibility(c.syms["VISIBLE_IF_N"], 0, 0)
+    verify_visibility(c.syms["VISIBLE_IF_M"], 0, 1)
+    verify_visibility(c.syms["VISIBLE_IF_Y"], 2, 2)
+    verify_visibility(c.syms["VISIBLE_IF_M_2"], 0, 1)
+
+    # Verify that string/int/hex symbols with m visibility accept a user value
+
+    assign_and_verify("STRING_m", "foo bar")
+    assign_and_verify("INT_m", "123")
+    assign_and_verify("HEX_m", "0x123")
+
+
+    print("Testing .assignable")
+
+    c = Kconfig("Kconfiglib/tests/Kassignable")
+
+    def verify_assignable_imp(item, assignable_no_modules, assignable_modules):
+        # Verifies the assignable values for 'item', with and without modules.
+
+        for modules_val, assignable in (0, assignable_no_modules), \
+                                       (2, assignable_modules):
+
+            c.modules.set_value(modules_val)
+            module_msg = "without modules" if modules_val == 0 else \
+                         "with modules"
+
+            verify(item.assignable == assignable,
+                   "Incorrect assignable values for {} {}. Should be {}, "
+                   "was {}."
+                   .format(item.name, module_msg, assignable, item.assignable))
+
+            # Verify that the values can actually be assigned too
+
+            for val in item.assignable:
+                item.set_value(val)
+                verify(item.tri_value == val,
+                       "Unable to set {} to {} {}, even though it was in "
+                       ".assignable".format(item.name, val, module_msg))
+
+    def verify_assignable(sym_name, assignable_no_modules, assignable_modules):
+        verify_assignable_imp(c.syms[sym_name],
+                              assignable_no_modules,
+                              assignable_modules)
+
+    def verify_const_unassignable(sym_name):
+        verify_assignable_imp(c.const_syms[sym_name], (), ())
+
+    # Things that shouldn't be .assignable
+    verify_const_unassignable("n")
+    verify_const_unassignable("m")
+    verify_const_unassignable("y")
+    verify_const_unassignable("const")
+    verify_assignable("UNDEFINED", (), ())
+    verify_assignable("NO_PROMPT", (), ())
+    verify_assignable("STRING", (), ())
+    verify_assignable("INT", (), ())
+    verify_assignable("HEX", (), ())
+
+    # Non-selected symbols
+    verify_assignable("Y_VIS_BOOL", (0, 2), (0,    2))
+    verify_assignable("M_VIS_BOOL", (    ), (0,    2))  # Vis. promoted
+    verify_assignable("N_VIS_BOOL", (    ), (       ))
+    verify_assignable("Y_VIS_TRI",  (0, 2), (0, 1, 2))
+    verify_assignable("M_VIS_TRI",  (    ), (0, 1   ))
+    verify_assignable("N_VIS_TRI",  (    ), (       ))
+
+    # Symbols selected to y
+    verify_assignable("Y_SEL_Y_VIS_BOOL", (2,), (2,))
+    verify_assignable("Y_SEL_M_VIS_BOOL", (  ), (2,))  # Vis. promoted
+    verify_assignable("Y_SEL_N_VIS_BOOL", (  ), (  ))
+    verify_assignable("Y_SEL_Y_VIS_TRI",  (2,), (2,))
+    verify_assignable("Y_SEL_M_VIS_TRI",  (  ), (2,))
+    verify_assignable("Y_SEL_N_VIS_TRI",  (  ), (  ))
+
+    # Symbols selected to m
+    verify_assignable("M_SEL_Y_VIS_BOOL", (2,), (   2,))  # Value promoted
+    verify_assignable("M_SEL_M_VIS_BOOL", (  ), (   2,))  # Vis./value promoted
+    verify_assignable("M_SEL_N_VIS_BOOL", (  ), (     ))
+    verify_assignable("M_SEL_Y_VIS_TRI",  (2,), (1, 2 ))
+    verify_assignable("M_SEL_M_VIS_TRI",  (  ), (1,   ))
+    verify_assignable("M_SEL_N_VIS_TRI",  (  ), (     ))
+
+    # Symbols implied to y
+    verify_assignable("Y_IMP_Y_VIS_BOOL", (0, 2), (0, 2))
+    verify_assignable("Y_IMP_M_VIS_BOOL", (    ), (0, 2))  # Vis. promoted
+    verify_assignable("Y_IMP_N_VIS_BOOL", (    ), (    ))
+    verify_assignable("Y_IMP_Y_VIS_TRI",  (0, 2), (0, 2))  # m removed by imply
+    verify_assignable("Y_IMP_M_VIS_TRI",  (    ), (0, 2))  # m promoted to y by imply
+    verify_assignable("Y_IMP_N_VIS_TRI",  (    ), (    ))
+
+    # Symbols implied to m (never affects assignable values)
+    verify_assignable("M_IMP_Y_VIS_BOOL", (0, 2), (0,    2))
+    verify_assignable("M_IMP_M_VIS_BOOL", (    ), (0,    2))  # Vis. promoted
+    verify_assignable("M_IMP_N_VIS_BOOL", (    ), (       ))
+    verify_assignable("M_IMP_Y_VIS_TRI",  (0, 2), (0, 1, 2))
+    verify_assignable("M_IMP_M_VIS_TRI",  (    ), (0, 1   ))
+    verify_assignable("M_IMP_N_VIS_TRI",  (    ), (       ))
+
+    # Symbols in y-mode choice
+    verify_assignable("Y_CHOICE_BOOL",           (2,), (2,))
+    verify_assignable("Y_CHOICE_TRISTATE",       (2,), (2,))
+    verify_assignable("Y_CHOICE_N_VIS_TRISTATE", (  ), (  ))
+
+    # Symbols in m/y-mode choice, starting out in m mode, or y mode when
+    # running without modules
+    verify_assignable("MY_CHOICE_BOOL",           (2,), (    ))
+    verify_assignable("MY_CHOICE_TRISTATE",       (2,), (0, 1))
+    verify_assignable("MY_CHOICE_N_VIS_TRISTATE", (  ), (    ))
+
+    c.named_choices["MY_CHOICE"].set_value(2)
+
+    # Symbols in m/y-mode choice, now in y mode
+    verify_assignable("MY_CHOICE_BOOL",           (2,), (2,))
+    verify_assignable("MY_CHOICE_TRISTATE",       (2,), (2,))
+    verify_assignable("MY_CHOICE_N_VIS_TRISTATE", (  ), (  ))
+
+    def verify_choice_assignable(choice_name, assignable_no_modules,
+                                 assignable_modules):
+        verify_assignable_imp(c.named_choices[choice_name],
+                              assignable_no_modules,
+                              assignable_modules)
+
+    # Choices with various possible modes
+    verify_choice_assignable("Y_CHOICE",   (2,  ), (      2,))
+    verify_choice_assignable("MY_CHOICE",  (2,  ), (   1, 2 ))
+    verify_choice_assignable("NMY_CHOICE", (0, 2), (0, 1, 2 ))
+    verify_choice_assignable("NY_CHOICE",  (0, 2), (0,    2 ))
+    verify_choice_assignable("NM_CHOICE",  (    ), (0, 1    ))
+    verify_choice_assignable("M_CHOICE",   (    ), (   1,   ))
+    verify_choice_assignable("N_CHOICE",   (    ), (        ))
+
+
+    print("Testing object relations")
+
+    c = Kconfig("Kconfiglib/tests/Krelation")
+
+    verify(c.syms["A"].nodes[0].parent is c.top_node,
+           "A's parent should be the top node")
+
+    verify(c.syms["B"].nodes[0].parent.item is c.named_choices["CHOICE_1"],
+           "B's parent should be the first choice")
+
+    verify(c.syms["C"].nodes[0].parent.item is c.syms["B"],
+           "C's parent should be B (due to auto menus)")
+
+    verify(c.syms["E"].nodes[0].parent.item == MENU,
+           "E's parent should be a menu")
+
+    verify(c.syms["E"].nodes[0].parent.parent is c.top_node,
+           "E's grandparent should be the top node")
+
+    verify(c.syms["G"].nodes[0].parent.item is c.named_choices["CHOICE_2"],
+           "G's parent should be the second choice")
+
+    verify(c.syms["G"].nodes[0].parent.parent.item == MENU,
+           "G's grandparent should be a menu")
+
+
+    print("Testing hex/int ranges")
+
+    c = Kconfig("Kconfiglib/tests/Krange", warn=False)
+
+    for sym_name in "HEX_NO_RANGE", "INT_NO_RANGE", "HEX_40", "INT_40":
+        sym = c.syms[sym_name]
+        verify(not sym.ranges,
+               "{} should not have ranges".format(sym_name))
+
+    for sym_name in "HEX_ALL_RANGES_DISABLED", "INT_ALL_RANGES_DISABLED", \
+                    "HEX_RANGE_10_20_LOW_DEFAULT", \
+                    "INT_RANGE_10_20_LOW_DEFAULT":
+        sym = c.syms[sym_name]
+        verify(sym.ranges, "{} should have ranges".format(sym_name))
+
+    # hex/int symbols without defaults should get no default value
+    verify_value("HEX_NO_RANGE", "")
+    verify_value("INT_NO_RANGE", "")
+    # And neither if all ranges are disabled
+    verify_value("HEX_ALL_RANGES_DISABLED", "")
+    verify_value("INT_ALL_RANGES_DISABLED", "")
+    # Make sure they are assignable though, and test that the form of the user
+    # value is reflected in the value for hex symbols
+    assign_and_verify("HEX_NO_RANGE", "0x123")
+    assign_and_verify("HEX_NO_RANGE", "123")
+    assign_and_verify("INT_NO_RANGE", "123")
+
+    # Defaults outside of the valid range should be clamped
+    verify_value("HEX_RANGE_10_20_LOW_DEFAULT", "0x10")
+    verify_value("HEX_RANGE_10_20_HIGH_DEFAULT", "0x20")
+    verify_value("INT_RANGE_10_20_LOW_DEFAULT", "10")
+    verify_value("INT_RANGE_10_20_HIGH_DEFAULT", "20")
+    # Defaults inside the valid range should be preserved. For hex symbols,
+    # they should additionally use the same form as in the assignment.
+    verify_value("HEX_RANGE_10_20_OK_DEFAULT", "0x15")
+    verify_value("HEX_RANGE_10_20_OK_DEFAULT_ALTERNATE", "15")
+    verify_value("INT_RANGE_10_20_OK_DEFAULT", "15")
+
+    # hex/int symbols with no defaults but valid ranges should default to the
+    # lower end of the range if it's > 0
+    verify_value("HEX_RANGE_10_20", "0x10")
+    verify_value("HEX_RANGE_0_10", "")
+    verify_value("INT_RANGE_10_20", "10")
+    verify_value("INT_RANGE_0_10", "")
+    verify_value("INT_RANGE_NEG_10_10", "")
+
+    # User values and dependent ranges
+
+    # Avoid warnings for assigning values outside the active range
+    c.warn = False
+
+    def verify_range(sym_name, low, high, default):
+        # Verifies that all values in the range 'low'-'high' can be assigned,
+        # and that assigning values outside the range reverts the value back to
+        # 'default' (None if it should revert back to "").
+
+        is_hex = (c.syms[sym_name].type == HEX)
+
+        for i in range(low, high + 1):
+            assign_and_verify_user_value(sym_name, str(i), str(i), True)
+            if is_hex:
+                # The form of the user value should be preserved for hex
+                # symbols
+                assign_and_verify_user_value(sym_name, hex(i), hex(i), True)
+
+        # Verify that assigning a user value just outside the range causes
+        # defaults to be used
+
+        if default is None:
+            default_str = ""
+        else:
+            default_str = hex(default) if is_hex else str(default)
+
+        if is_hex:
+            too_low_str = hex(low - 1)
+            too_high_str = hex(high + 1)
+        else:
+            too_low_str = str(low - 1)
+            too_high_str = str(high + 1)
+
+        assign_and_verify_value(sym_name, too_low_str, default_str)
+        assign_and_verify_value(sym_name, too_high_str, default_str)
+
+    verify_range("HEX_RANGE_10_20_LOW_DEFAULT",  0x10, 0x20,  0x10)
+    verify_range("HEX_RANGE_10_20_HIGH_DEFAULT", 0x10, 0x20,  0x20)
+    verify_range("HEX_RANGE_10_20_OK_DEFAULT",   0x10, 0x20,  0x15)
+
+    verify_range("INT_RANGE_10_20_LOW_DEFAULT",  10,   20,    10)
+    verify_range("INT_RANGE_10_20_HIGH_DEFAULT", 10,   20,    20)
+    verify_range("INT_RANGE_10_20_OK_DEFAULT",   10,   20,    15)
+
+    verify_range("HEX_RANGE_10_20",              0x10, 0x20,  0x10)
+
+    verify_range("INT_RANGE_10_20",              10,  20,     10)
+    verify_range("INT_RANGE_0_10",               0,   10,     None)
+    verify_range("INT_RANGE_NEG_10_10",          -10, 10,     None)
+
+    # Dependent ranges
+
+    verify_value("HEX_40", "40")
+    verify_value("INT_40", "40")
+
+    c.syms["HEX_RANGE_10_20"].unset_value()
+    c.syms["INT_RANGE_10_20"].unset_value()
+    verify_value("HEX_RANGE_10_40_DEPENDENT", "0x10")
+    verify_value("INT_RANGE_10_40_DEPENDENT", "10")
+    c.syms["HEX_RANGE_10_20"].set_value("15")
+    c.syms["INT_RANGE_10_20"].set_value("15")
+    verify_value("HEX_RANGE_10_40_DEPENDENT", "0x15")
+    verify_value("INT_RANGE_10_40_DEPENDENT", "15")
+    c.unset_values()
+    verify_range("HEX_RANGE_10_40_DEPENDENT", 0x10, 0x40,  0x10)
+    verify_range("INT_RANGE_10_40_DEPENDENT", 10,   40,    10)
+
+    # Ranges and symbols defined in multiple locations
+
+    verify_value("INACTIVE_RANGE", "2")
+    verify_value("ACTIVE_RANGE", "1")
+
+
+    print("Testing defconfig_filename")
+
+    c = Kconfig("Kconfiglib/tests/empty")
+    verify(c.defconfig_filename is None,
+           "defconfig_filename should be None with no defconfig_list symbol")
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_nonexistent")
+    verify(c.defconfig_filename is None,
+           "defconfig_filename should be None when none of the files in the "
+           "defconfig_list symbol exist")
+
+    # Referenced in Kdefconfig_existent(_but_n)
+    os.environ["FOO"] = "defconfig_2"
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_existent_but_n")
+    verify(c.defconfig_filename is None,
+           "defconfig_filename should be None when the condition is n for all "
+           "the defaults")
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_existent")
+    verify(c.defconfig_filename == "Kconfiglib/tests/defconfig_2",
+           "defconfig_filename should return the existing file "
+           "Kconfiglib/tests/defconfig_2")
+
+    # Should also look relative to $srctree if the specified defconfig is a
+    # relative path and can't be opened
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_srctree")
+    verify(c.defconfig_filename == "Kconfiglib/tests/defconfig_2",
+           "defconfig_filename gave wrong file with $srctree unset")
+
+    os.environ["srctree"] = "Kconfiglib/tests"
+    c = Kconfig("Kdefconfig_srctree")
+    verify(c.defconfig_filename == "Kconfiglib/tests/sub/defconfig_in_sub",
+           "defconfig_filename gave wrong file with $srctree set")
+
+    os.environ.pop("srctree", None)
+
+
+    print("Testing mainmenu_text")
+
+    c = Kconfig("Kconfiglib/tests/empty")
+    verify(c.mainmenu_text == "Main menu",
+           "An empty Kconfig should get a default main menu prompt")
+
+    # Expanded in the mainmenu text
+    os.environ["FOO"] = "bar baz"
+    c = Kconfig("Kconfiglib/tests/Kmainmenu")
+    verify(c.mainmenu_text == "---bar baz---",
+           "Wrong mainmenu text")
+
+
+    print("Testing user_value")
+
+    # References undefined env. var. Disable warnings.
+    c = Kconfig("Kconfiglib/tests/Kmisc", warn=False)
+
+    # Avoid warnings from assigning invalid user values and assigning user
+    # values to symbols without prompts
+    c.warn = False
+
+    syms = [c.syms[name] for name in
+            ("BOOL", "TRISTATE", "STRING", "INT", "HEX")]
+
+    for sym in syms:
+        verify(sym.user_value is None,
+               "{} should not have a user value to begin with")
+
+    # Assign valid values for the types
+
+    assign_and_verify_user_value("BOOL", 0, 0, True)
+    assign_and_verify_user_value("BOOL", 2, 2, True)
+    assign_and_verify_user_value("TRISTATE", 0, 0, True)
+    assign_and_verify_user_value("TRISTATE", 1, 1, True)
+    assign_and_verify_user_value("TRISTATE", 2, 2, True)
+    assign_and_verify_user_value("STRING", "foo bar", "foo bar", True)
+    assign_and_verify_user_value("INT", "123", "123", True)
+    assign_and_verify_user_value("HEX", "0x123", "0x123", True)
+
+    # Assign invalid values for the types. They should retain their old user
+    # value.
+
+    assign_and_verify_user_value("BOOL", 1, 2, False)
+    assign_and_verify_user_value("BOOL", "foo", 2, False)
+    assign_and_verify_user_value("BOOL", "1", 2, False)
+    assign_and_verify_user_value("TRISTATE", "foo", 2, False)
+    assign_and_verify_user_value("TRISTATE", "1", 2, False)
+    assign_and_verify_user_value("STRING", 0, "foo bar", False)
+    assign_and_verify_user_value("INT", "foo", "123", False)
+    assign_and_verify_user_value("INT", 0, "123", False)
+    assign_and_verify_user_value("HEX", "foo", "0x123", False)
+    assign_and_verify_user_value("HEX", 0, "0x123", False)
+    assign_and_verify_user_value("HEX", "-0x1", "0x123", False)
+
+    for s in syms:
+        s.unset_value()
+        verify(s.user_value is None,
+               "{} should not have a user value after being reset".
+               format(s.name))
+
+
+    print("Testing is_menuconfig")
+
+    c = Kconfig("Kconfiglib/tests/Kmenuconfig")
+
+    for not_menuconfig in c.syms["NOT_MENUCONFIG_1"].nodes[0], \
+                          c.syms["NOT_MENUCONFIG_2"].nodes[0], \
+                          c.syms["MENUCONFIG_MULTI_DEF"].nodes[0], \
+                          c.syms["COMMENT_HOOK"].nodes[0].next:
+
+        verify(not not_menuconfig.is_menuconfig,
+               "'{}' should have is_menuconfig False".format(not_menuconfig))
+
+    for menuconfig in c.top_node, \
+                      c.syms["MENUCONFIG_1"].nodes[0], \
+                      c.syms["MENUCONFIG_MULTI_DEF"].nodes[1], \
+                      c.syms["MENU_HOOK"].nodes[0].next, \
+                      c.syms["CHOICE_HOOK"].nodes[0].next:
+
+        verify(menuconfig.is_menuconfig,
+               "'{}' should have is_menuconfig True".format(menuconfig))
+
+
+    print("Testing 'option env' semantics")
+
+    os.environ["ENV_VAR"] = "ENV_VAR value"
+
+    # References undefined env. var., so disable warnings
+    c = Kconfig("Kconfiglib/tests/Kmisc", warn=False)
+
+    # Verify that 'option env' is treated like a default
+    verify_value("FROM_ENV", "ENV_VAR value")
+    verify_value("FROM_ENV_MISSING", "missing")
+
+    verify_value("FROM_ENV_WEIRD", "weird")
+
+
+    print("Testing defined vs undefined symbols")
+
+    for name in "A", "B", "C", "D", "BOOL", "TRISTATE", "STRING", "INT", "HEX":
+        verify(c.syms[name].nodes,
+               "{} should be defined".format(name))
+
+    for name in "NOT_DEFINED_1", "NOT_DEFINED_2", "NOT_DEFINED_3", \
+                "NOT_DEFINED_4":
+        sym = c.syms[name]
+        verify(not c.syms[name].nodes,
+               "{} should not be defined".format(name))
+
+
+    print("Testing Symbol.choice")
+
+    for name in "A", "B", "C", "D":
+        verify(c.syms[name].choice is not None,
+               "{} should be a choice symbol".format(name))
+
+    for name in "Q1", "Q2", "Q3", "BOOL", "TRISTATE", "STRING", "INT", "HEX", \
+                "FROM_ENV", "FROM_ENV_MISSING", "NOT_DEFINED_1", \
+                "NOT_DEFINED_2", "NOT_DEFINED_3", "NOT_DEFINED_4":
+        verify(c.syms[name].choice is None,
+               "{} should not be a choice symbol".format(name))
+
+
+    print("Testing is_allnoconfig_y")
+
+    verify(not c.syms["NOT_ALLNOCONFIG_Y"].is_allnoconfig_y,
+           "NOT_ALLNOCONFIG_Y should not be allnoconfig_y")
+    verify(c.syms["ALLNOCONFIG_Y"].is_allnoconfig_y,
+           "ALLNOCONFIG_Y should be allnoconfig_y")
+
+
+    print("Testing .config reading and writing")
+
+    config_test_file = "Kconfiglib/tests/config_test"
+
+    def verify_file_contents(fname, contents):
+        with open(fname, "r") as f:
+            file_contents = f.read()
+            verify(file_contents == contents,
+                   "{} contains '{}'. Expected '{}'."
+                   .format(fname, file_contents, contents))
+
+    # Writing/reading strings with characters that need to be escaped
+
+    c = Kconfig("Kconfiglib/tests/Kescape")
+
+    # Test the default value
+    c.write_config(config_test_file + "_from_def", header="")
+    verify_file_contents(config_test_file + "_from_def",
+                         r'''CONFIG_STRING="\"\\"''' "\n")
+    # Write our own value
+    c.syms["STRING"].set_value(r'''\"a'\\''')
+    c.write_config(config_test_file + "_from_user", header="")
+    verify_file_contents(config_test_file + "_from_user",
+                         r'''CONFIG_STRING="\\\"a'\\\\"''' "\n")
+
+    # Read back the two configs and verify the respective values
+    c.load_config(config_test_file + "_from_def")
+    verify_value("STRING", '"\\')
+    c.load_config(config_test_file + "_from_user")
+    verify_value("STRING", r'''\"a'\\''')
+
+    # Appending values from a .config
+
+    c = Kconfig("Kconfiglib/tests/Kappend")
+
+    # Values before assigning
+    verify_value("BOOL", "n")
+    verify_value("STRING", "")
+
+    # Assign BOOL
+    c.load_config("Kconfiglib/tests/config_set_bool", replace=False)
+    verify_value("BOOL", "y")
+    verify_value("STRING", "")
+
+    # Assign STRING
+    c.load_config("Kconfiglib/tests/config_set_string", replace=False)
+    verify_value("BOOL", "y")
+    verify_value("STRING", "foo bar")
+
+    # Reset BOOL
+    c.load_config("Kconfiglib/tests/config_set_string")
+    verify_value("BOOL", "n")
+    verify_value("STRING", "foo bar")
+
+    # Loading a completely empty .config should reset values
+    c.load_config("Kconfiglib/tests/empty")
+    verify_value("STRING", "")
+
+    # An indented assignment in a .config should be ignored
+    c.load_config("Kconfiglib/tests/config_indented")
+    verify_value("IGNOREME", "y")
+
+    # Symbol order in headers and minimal configuration files should match
+    # definition order, like in .config files
+
+    c = Kconfig("Kconfiglib/tests/Korder")
+
+    c.write_autoconf(config_test_file, header="")
+    verify_file_contents(config_test_file, """
+#define CONFIG_O 0
+#define CONFIG_R 1
+#define CONFIG_D 2
+#define CONFIG_E 3
+#define CONFIG_R2 4
+#define CONFIG_I 5
+#define CONFIG_N 6
+#define CONFIG_G 7
+"""[1:])
+
+    # Differs from defaults
+    c.syms["O"].set_value("-1")
+    c.syms["R"].set_value("-1")
+    c.syms["E"].set_value("-1")
+    c.syms["R2"].set_value("-1")
+    c.syms["N"].set_value("-1")
+    c.syms["G"].set_value("-1")
+    c.write_min_config(config_test_file, header="")
+    verify_file_contents(config_test_file, """
+CONFIG_O=-1
+CONFIG_R=-1
+CONFIG_E=-1
+CONFIG_R2=-1
+CONFIG_N=-1
+CONFIG_G=-1
+"""[1:])
+
+
+    print("Testing Kconfig fetching and separation")
+
+    for c in Kconfig("Kconfiglib/tests/Kmisc", warn=False), \
+             Kconfig("Kconfiglib/tests/Kmisc", warn=False):
+        for item in c.syms["BOOL"], \
+                    c.syms["BOOL"].nodes[0], \
+                    c.named_choices["OPTIONAL"], \
+                    c.named_choices["OPTIONAL"].nodes[0], \
+                    c.syms["MENU_HOOK"].nodes[0].next, \
+                    c.syms["COMMENT_HOOK"].nodes[0].next:
+            verify(item.kconfig is c,
+                   ".kconfig not properly set for " + repr(item))
+
+
+    print("Testing imply semantics")
+
+    c = Kconfig("Kconfiglib/tests/Kimply")
+
+    verify_value("IMPLY_DIRECT_DEPS", "y")
+    verify_value("UNMET_DIRECT_1", "n")
+    verify_value("UNMET_DIRECT_2", "n")
+    verify_value("UNMET_DIRECT_3", "n")
+    verify_value("MET_DIRECT_1", "y")
+    verify_value("MET_DIRECT_2", "y")
+    verify_value("MET_DIRECT_3", "y")
+    verify_value("MET_DIRECT_4", "y")
+
+    verify_value("IMPLY_COND", "y")
+    verify_value("IMPLIED_N_COND", "n")
+    verify_value("IMPLIED_M_COND", "m")
+    verify_value("IMPLIED_Y_COND", "y")
+
+    verify_value("IMPLY_N_1", "n")
+    verify_value("IMPLY_N_2", "n")
+    verify_value("IMPLIED_FROM_N_1", "n")
+    verify_value("IMPLIED_FROM_N_2", "n")
+
+    verify_value("IMPLY_M", "m")
+    verify_value("IMPLIED_M", "m")
+    verify_value("IMPLIED_M_BOOL", "y")
+
+    verify_value("IMPLY_M_TO_Y", "y")
+    verify_value("IMPLIED_M_TO_Y", "y")
+
+    # Test user value semantics
+
+    # Verify that IMPLIED_TRISTATE is invalidated if the direct
+    # dependencies change
+
+    assign_and_verify("IMPLY", 2)
+    assign_and_verify("DIRECT_DEP", 2)
+    verify_value("IMPLIED_TRISTATE", 2)
+    assign_and_verify("DIRECT_DEP", 0)
+    verify_value("IMPLIED_TRISTATE", 0)
+    # Set back for later tests
+    assign_and_verify("DIRECT_DEP", 2)
+
+    # Verify that IMPLIED_TRISTATE can be set to anything when IMPLY has value
+    # n, and that it gets the value n by default (for non-imply-related
+    # reasons)
+
+    assign_and_verify("IMPLY", 0)
+    assign_and_verify("IMPLIED_TRISTATE", 0)
+    assign_and_verify("IMPLIED_TRISTATE", 1)
+    assign_and_verify("IMPLIED_TRISTATE", 2)
+    c.syms["IMPLIED_TRISTATE"].unset_value()
+    verify_value("IMPLIED_TRISTATE", "n")
+
+    # Same as above for m. Anything still goes, but m by default now.
+
+    assign_and_verify("IMPLY", 1)
+    assign_and_verify("IMPLIED_TRISTATE", 0)
+    assign_and_verify("IMPLIED_TRISTATE", 1)
+    assign_and_verify("IMPLIED_TRISTATE", 2)
+    c.syms["IMPLIED_TRISTATE"].unset_value()
+    verify_value("IMPLIED_TRISTATE", 1)
+
+    # Same as above for y. Only n and y should be accepted. m gets promoted to
+    # y. Default should be y.
+
+    assign_and_verify("IMPLY", 2)
+    assign_and_verify("IMPLIED_TRISTATE", 0)
+    assign_and_verify_value("IMPLIED_TRISTATE", 1, 2)
+    assign_and_verify("IMPLIED_TRISTATE", 2)
+    c.syms["IMPLIED_TRISTATE"].unset_value()
+    verify_value("IMPLIED_TRISTATE", 2)
+
+    # Being implied to either m or y should give a bool the value y
+
+    c.syms["IMPLY"].unset_value()
+    verify_value("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLY", 0)
+    verify_value("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLY", 1)
+    verify_value("IMPLIED_BOOL", 2)
+    assign_and_verify("IMPLY", 2)
+    verify_value("IMPLIED_BOOL", 2)
+
+    # A bool implied to m or y can take the values n and y
+
+    c.syms["IMPLY"].set_value(1)
+    assign_and_verify("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLIED_BOOL", 2)
+
+    c.syms["IMPLY"].set_value(2)
+    assign_and_verify("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLIED_BOOL", 2)
+
+
+    print("Testing choice semantics")
+
+    # Would warn for choice value symbols defined without a type, even
+    # though the type is automatically derived. This is probably more
+    # helpful than ignoring those cases, as this feature isn't used
+    # deliberately anywhere from what I've seen.
+    c = Kconfig("Kconfiglib/tests/Kchoice", warn=False)
+
+    for name in "BOOL", "BOOL_OPT", "BOOL_M", "DEFAULTS":
+        verify(c.named_choices[name].orig_type == BOOL,
+               "choice {} should have type bool".format(name))
+
+    for name in "TRISTATE", "TRISTATE_OPT", "TRISTATE_M":
+        verify(c.named_choices[name].orig_type == TRISTATE,
+               "choice {} should have type tristate".format(name))
+
+    def select_and_verify(sym):
+        choice = sym.nodes[0].parent.item
+        choice.set_value(2)
+
+        sym.set_value(2)
+
+        verify(sym.choice.selection is sym,
+               sym.name + " should be the selected symbol")
+
+        verify(choice.user_selection is sym,
+               sym.name + " should be the user selection of the choice")
+
+        verify(sym.tri_value == 2,
+               sym.name + " should have value y when selected")
+
+        verify(sym.user_value == 2,
+               sym.name + " should have user value y when selected")
+
+        for sibling in choice.syms:
+            if sibling is not sym:
+                verify(sibling.tri_value == 0,
+                       sibling.name + " should be n when not selected")
+
+    def select_and_verify_all(choice_name):
+        choice = c.named_choices[choice_name]
+
+        # Select in forward order
+        for sym in choice.syms:
+            select_and_verify(sym)
+
+        # Select in reverse order
+        for sym in reversed(choice.syms):
+            select_and_verify(sym)
+
+    def verify_mode(choice_name, no_modules_mode, modules_mode):
+        choice = c.named_choices[choice_name]
+
+        c.modules.set_value(0)
+        verify(choice.tri_value == no_modules_mode,
+               'Wrong mode for choice {} with no modules. Expected {}, got {}.'
+               .format(choice.name, no_modules_mode, choice.tri_value))
+
+        c.modules.set_value(2)
+        verify(choice.tri_value == modules_mode,
+               'Wrong mode for choice {} with modules. Expected {}, got {}.'
+               .format(choice.name, modules_mode, choice.tri_value))
+
+    verify_mode("BOOL",         2, 2)
+    verify_mode("BOOL_OPT",     0, 0)
+    verify_mode("TRISTATE",     2, 1)
+    verify_mode("TRISTATE_OPT", 0, 0)
+    verify_mode("BOOL_M",       0, 2)
+    verify_mode("TRISTATE_M",   0, 1)
+
+    # Test defaults
+
+    choice = c.named_choices["DEFAULTS"]
+
+    c.syms["TRISTATE_SYM"].set_value(0)
+    verify(choice.selection is c.syms["OPT_4"],
+           "Wrong choice default with TRISTATE_SYM = n")
+
+    c.syms["TRISTATE_SYM"].set_value(2)
+    verify(choice.selection is c.syms["OPT_2"],
+           "Wrong choice default with TRISTATE_SYM = y")
+
+    c.syms["OPT_1"].set_value(2)
+    verify(choice.selection is c.syms["OPT_1"],
+           "User selection should override defaults")
+
+    verify(c.named_choices["DEFAULTS_NOT_VISIBLE"].selection
+           is c.syms["OPT_8"],
+           "Non-visible choice symbols should cause the next default to be "
+           "considered")
+
+    # Test y mode selection
+
+    c.modules.set_value(2)
+
+    select_and_verify_all("BOOL")
+    select_and_verify_all("BOOL_OPT")
+    select_and_verify_all("TRISTATE")
+    select_and_verify_all("TRISTATE_OPT")
+    # For BOOL_M, the mode should have been promoted
+    select_and_verify_all("BOOL_M")
+
+    # Test m mode selection
+
+    c.named_choices["TRISTATE"].set_value(1)
+
+    verify(c.named_choices["TRISTATE"].tri_value == 1,
+           "TRISTATE choice should have mode m after explicit mode assignment")
+
+    assign_and_verify_value("T_1", 0, 0)
+    assign_and_verify_value("T_2", 0, 0)
+    assign_and_verify_value("T_1", 1, 1)
+    assign_and_verify_value("T_2", 1, 1)
+    assign_and_verify_value("T_1", 2, 1)
+    assign_and_verify_value("T_2", 2, 1)
+
+    # Switching to y mode should cause T_2 to become selected
+    c.named_choices["TRISTATE"].set_value(2)
+    verify_value("T_1", 0)
+    verify_value("T_2", 2)
+
+    # Verify that choices with no explicitly specified type get the type of the
+    # first contained symbol with a type
+
+    verify(c.named_choices["NO_TYPE_BOOL"].orig_type == BOOL,
+           "Expected first choice without explicit type to have type bool")
+
+    verify(c.named_choices["NO_TYPE_TRISTATE"].orig_type == TRISTATE,
+           "Expected second choice without explicit type to have type "
+           "tristate")
+
+    # Verify that symbols without a type in the choice get the type of the
+    # choice
+
+    for name in "MMT_1", "MMT_2", "MMT_4", "MMT_5":
+        verify(c.syms[name].orig_type == BOOL,
+               "Expected {} to get type bool".format(name))
+
+    verify(c.syms["MMT_3"].orig_type == TRISTATE,
+           "Expected MMT_3 to have type tristate")
+
+    # Verify that the default selection can change depending on the
+    # visibility of the choice symbols
+
+    default_with_dep_choice = c.named_choices["DEFAULT_WITH_DEP"]
+
+    verify(default_with_dep_choice.selection is c.syms["B"],
+           "Wrong choice default with unsatisfied deps on default")
+
+    c.syms["DEP"].set_value("y")
+
+    verify(default_with_dep_choice.selection is c.syms["A"],
+           "Wrong choice default with satisfied deps on default")
+
+    c.syms["DEP"].set_value("n")
+
+    verify(default_with_dep_choice.selection is c.syms["B"],
+           "Wrong choice default with unsatisfied deps on default (round two)")
+
+    # Verify that symbols in choices that depend on the preceding symbol aren't
+    # considered choice symbols
+
+    weird_choice = c.named_choices["WEIRD_SYMS"]
+
+    def verify_is_normal_choice_symbol(name):
+        sym = c.syms[name]
+        verify(sym.choice is not None and
+               sym in weird_choice.syms and
+               sym.nodes[0].parent.item is weird_choice,
+               "{} should be a normal choice symbol".format(sym.name))
+
+    def verify_is_weird_choice_symbol(name):
+        sym = c.syms[name]
+        verify(sym.choice is None and
+               sym not in weird_choice.syms,
+               "{} should be a weird (non-)choice symbol"
+               .format(sym.name))
+
+    verify_is_normal_choice_symbol("WS1")
+    verify_is_weird_choice_symbol("WS2")
+    verify_is_weird_choice_symbol("WS3")
+    verify_is_weird_choice_symbol("WS4")
+    verify_is_weird_choice_symbol("WS5")
+    verify_is_normal_choice_symbol("WS6")
+    verify_is_weird_choice_symbol("WS7")
+    verify_is_weird_choice_symbol("WS8")
+    verify_is_normal_choice_symbol("WS9")
+
+
+    print("Testing 'if' node removal")
+
+    c = Kconfig("Kconfiglib/tests/Kifremoval", warn=False)
+
+    nodes = tuple(c.node_iter())
+    verify_equal(nodes[0].item.name, "A")
+    verify_equal(nodes[1].item.name, "B")
+    verify_equal(nodes[2].item.name, "C")
+    verify_equal(nodes[3].item.name, "D")
+    verify_equal(nodes[4].prompt[0], "E")
+    verify_equal(nodes[5].prompt[0], "F")
+    verify_equal(nodes[6].prompt[0], "G")
+    verify_equal(nodes[7].item.name, "H")
+    verify_equal(nodes[8].item.name, "I")
+    verify_equal(nodes[9].item.name, "J")
+    verify(len(nodes) == 10,
+           "Wrong number of nodes after 'if' removal")
+
+
+    print("Testing multi.def. property copying")
+
+    c = Kconfig("Kconfiglib/tests/Kdepcopy", warn=False)
+
+    def verify_props(desc, props, prop_names):
+        actual = [prop[0].name for prop in props]
+        expected = prop_names.split()
+
+        verify(actual == expected,
+               "Wrong {} properties, expected '{}', got '{}'"
+               .format(desc, expected, actual))
+
+    verify_props("default", c.syms["MULTIDEF"].defaults,
+                 "A B C D E F G H I J K L M N O P Q R")
+
+    verify_props("select", c.syms["MULTIDEF"].selects,
+                 "AA BB CC DD EE FF GG HH II JJ")
+
+    verify_props("imply", c.syms["MULTIDEF"].selects,
+                 "AA BB CC DD EE FF GG HH II JJ")
+
+    verify_props("select", c.syms["MULTIDEF_CHOICE"].selects,
+                 "A B C")
+
+    verify_props("range", c.syms["MULTIDEF_RANGE"].ranges,
+                 "A B C D E F")
+
+    verify_props("default", c.choices[1].defaults,
+                 "A B C D E")
+
+
+    print("Testing dependency loop detection")
+
+    # These are all expected to raise dependency loop errors
+    for i in range(11):
+        filename = "Kconfiglib/tests/Kdeploop" + str(i)
+        try:
+            Kconfig(filename)
+        except KconfigError as e:
+            if "Dependency loop" not in str(e):
+                fail("dependency loop in {} raised wrong KconfigError"
+                     .format(filename))
+        except:
+            fail("dependency loop in {} raised wrong exception"
+                 .format(filename))
+        else:
+            fail("dependency loop in {} not detected".format(filename))
+
+    # Check the most complicated message completely
+    try:
+        Kconfig("Kconfiglib/tests/Kdeploop10")
+    except KconfigError as e:
+        verify_equal(str(e), """
+Dependency loop
+===============
+
+A (defined at Kconfiglib/tests/Kdeploop10:1), with definition...
+
+config A
+	bool
+	depends on B
+
+...depends on B (defined at Kconfiglib/tests/Kdeploop10:5), with definition...
+
+config B
+	bool
+	depends on C = 7
+
+...depends on C (defined at Kconfiglib/tests/Kdeploop10:9), with definition...
+
+config C
+	int
+	range D 8
+
+...depends on D (defined at Kconfiglib/tests/Kdeploop10:13), with definition...
+
+config D
+	int
+	default 3 if E
+	default 8
+
+...depends on E (defined at Kconfiglib/tests/Kdeploop10:18), with definition...
+
+config E
+	bool
+
+(select-related dependencies: F && G)
+
+...depends on G (defined at Kconfiglib/tests/Kdeploop10:25), with definition...
+
+config G
+	bool
+	depends on H
+
+...depends on the choice symbol H (defined at Kconfiglib/tests/Kdeploop10:32), with definition...
+
+config H
+	bool "H"
+	depends on I && <choice>
+
+...depends on the choice symbol I (defined at Kconfiglib/tests/Kdeploop10:41), with definition...
+
+config I
+	bool "I"
+	depends on <choice>
+
+...depends on <choice> (defined at Kconfiglib/tests/Kdeploop10:38), with definition...
+
+choice
+	bool "choice" if J
+
+...depends on J (defined at Kconfiglib/tests/Kdeploop10:46), with definition...
+
+config J
+	bool
+	depends on A
+
+...depends again on A (defined at Kconfiglib/tests/Kdeploop10:1)
+"""[:-1])
+    except:
+        fail("Loop detection message check raised wrong exception")
+    else:
+        fail("Loop detection message check did not raise exception")
+
+
+    print("Testing preprocessor")
+
+    os.environ["ENV_1"] = "env_1"
+    os.environ["ENV_2"] = "env_2"
+    os.environ["ENV_3"] = "env_3"
+    os.environ["ENV_4"] = "env_4"
+    os.environ["ENV_5"] = "n"
+    os.environ["ENV_6"] = "Kconfiglib/tests/empty"
+    os.environ["ENV_7"] = "env_7"
+    # We verify warnings manually
+    c = Kconfig("Kconfiglib/tests/Kpreprocess", warn_to_stderr=False)
+
+    def verify_variable(name, unexp_value, exp_value, recursive, *args):
+        var = c.variables[name]
+
+        verify(var.value == unexp_value,
+               "expected variable '{}' to have the unexpanded value '{}', had "
+               "the value '{}'".format(name, unexp_value, var.value))
+
+        if not args:
+            verify(var.expanded_value == exp_value,
+                   "expected expanded_value for {} to be '{}', was '{}'"
+                   .format(name, exp_value, var.expanded_value))
+
+        verify(var.expanded_value_w_args(*args) == exp_value,
+               "expected expanded_value_w_args() for '{}' to be '{}', was '{}'"
+               .format(name, exp_value, var.expanded_value_w_args(*args)))
+
+        verify(var.is_recursive == recursive,
+               "{} was {}, shouldn't be"
+               .format(name, "recursive" if var.is_recursive else "simple"))
+
+    verify_variable("simple-recursive", "foo", "foo", True)
+    verify_variable("simple-immediate", "bar", "bar", False)
+    verify_variable("simple-recursive-2", "baz", "baz", True)
+
+    verify_variable("whitespaced", "foo", "foo", True)
+
+    verify_variable("preserve-recursive", "foo bar", "foo bar", True)
+    verify_variable("preserve-immediate", "foo bar", "foo bar", False)
+
+    verify_variable("recursive",
+                    "$(foo) $(bar) $($(b-char)a$(z-char)) $(indir)",
+                    "abc def ghi jkl mno",
+                    True)
+
+    verify_variable("immediate", "foofoo", "foofoo", False)
+
+    verify_variable("messy-fn-res",
+                    "$($(fn-indir)-unused-arg, a  b , c  d )",
+                    'surround-rev-quote " c  d " " a  b " surround-rev-quote ',
+                    True)
+
+    verify_variable("special-chars-fn-res",
+                    "$(fn,$(comma)$(dollar)$(left-paren)foo$(right-paren))",
+                    '",$(foo)"',
+                    True)
+
+    verify_variable("quote", '"$(1)" "$(2)"', '"" ""', True)
+    verify_variable("quote", '"$(1)" "$(2)"', '"one" ""', True,
+                    "one")
+    verify_variable("quote", '"$(1)" "$(2)"', '"one" "two"', True,
+                    "one", "two")
+    verify_variable("quote", '"$(1)" "$(2)"', '"one" "two"', True,
+                    "one", "two", "three")
+
+    verify_str(c.syms["PRINT_ME"], r"""
+config PRINT_ME
+	string "env_1" if (FOO && BAR) || !BAZ || !QAZ
+	default "\"foo\"" if "foo \"bar\" baz" = ""
+""")
+
+    verify_str(c.syms["PRINT_ME_TOO"], r"""
+config PRINT_ME_TOO
+	bool "foo"
+	default FOOBARBAZQAZ if QAZ && QAZFOO && xxx
+""")
+
+    def verify_repr(name, s):
+        verify_equal(repr(c.variables[name]), s)
+
+    verify_repr(
+        "simple-immediate",
+        "<variable simple-immediate, immediate, value 'bar'>")
+
+    verify_repr(
+        "messy-fn-res",
+        "<variable messy-fn-res, recursive, value '$($(fn-indir)-unused-arg, a  b , c  d )'>")
+
+    def verify_recursive(name):
+        try:
+            c.variables[name].expanded_value
+        except KconfigError:
+            pass
+        else:
+            fail("Expected '{}' expansion to flag recursive expansion, didn't"
+                 .format(name))
+
+    verify_recursive("rec-1")
+    # Indirectly verifies that it's not recursive
+    verify_variable("safe-fn-rec-res",
+                    "$(safe-fn-rec,safe-fn-rec-2)",
+                    "foo",
+                    True)
+    verify_recursive("unsafe-fn-rec")
+
+    verify_variable("foo-bar-baz", "$(rhs)", "value", True)
+
+    verify_variable("space-var-res", "$(foo bar)", "value", True)
+
+    verify_variable("shell-res",
+                    "$(shell,false && echo foo bar || echo baz qaz)",
+                    "baz qaz",
+                    True)
+
+    verify_variable("shell-stderr-res", "", "", False)
+
+    verify_variable("location-res",
+                    "Kconfiglib/tests/Kpreprocess:125",
+                    "Kconfiglib/tests/Kpreprocess:125",
+                    False)
+
+    verify_variable("warning-res", "", "", False)
+    verify_variable("error-n-res", "", "", False)
+
+    try:
+        c.variables["error-y-res"].expanded_value
+    except KconfigError:
+        pass
+    else:
+        fail("expanding error-y-res didn't raise an exception")
+
+    # Check Kconfig.env_vars
+    verify_equal(c.env_vars,
+                 set(("ENV_1", "ENV_2", "ENV_3", "ENV_4", "ENV_5", "ENV_6")))
+
+    # Check that the expected warnings were generated
+    verify_equal(c.warnings, [
+        "Kconfiglib/tests/Kpreprocess:122: warning: 'echo message on stderr >&2' wrote to stderr: message on stderr",
+        "Kconfiglib/tests/Kpreprocess:130: warning: a warning"
+    ])
+
+
+    print("Testing user-defined preprocessor functions")
+
+    # Make Kconfiglib/tests/kconfigfunctions.py importable
+    sys.path.insert(0, "Kconfiglib/tests")
+
+    c = Kconfig("Kconfiglib/tests/Kuserfunctions")
+
+    verify_variable("add-zero",  "$(add)",          "0", True)
+    verify_variable("add-one",   "$(add,1)",        "1", True)
+    verify_variable("add-three", "$(add,1,-1,2,1)", "3", True)
+
+    verify_variable("one-one", "$(one,foo bar)", "onefoo barfoo bar", True)
+
+    verify_variable("one-or-more-one", "$(one-or-more,foo)", "foo + ", True)
+    verify_variable("one-or-more-three", "$(one-or-more,foo,bar,baz)",
+                    "foo + bar,baz", True)
+
+    def verify_bad_argno(name):
+        try:
+            c.variables[name].expanded_value
+        except KconfigError:
+            pass
+        else:
+            fail("Expected '{}' expansion to flag wrong number of arguments, "
+                 "didn't".format(name))
+
+    verify_bad_argno("one-zero")
+    verify_bad_argno("one-two")
+    verify_bad_argno("one-or-more-zero")
+
+    sys.path.pop(0)
+
+    # This test can fail on older Python 3.x versions, because they don't
+    # preserve dict insertion order during iteration. The output is still
+    # correct, just different.
+    if not (3, 0) <= sys.version_info <= (3, 5):
+        print("Testing KCONFIG_WARN_UNDEF")
+
+        os.environ["KCONFIG_WARN_UNDEF"] = "y"
+        c = Kconfig("Kconfiglib/tests/Kundef", warn_to_stderr=False)
+
+        verify_equal("\n".join(c.warnings), """
+warning: the int symbol INT (defined at Kconfiglib/tests/Kundef:8) has a non-int range [UNDEF_2 (undefined), 8 (undefined)]
+warning: undefined symbol UNDEF_1:
+
+- Referenced at Kconfiglib/tests/Kundef:4:
+
+config BOOL
+	bool "foo" if DEF || !UNDEF_1
+	default UNDEF_2
+
+- Referenced at Kconfiglib/tests/Kundef:19:
+
+menu "menu"
+	depends on UNDEF_1
+	visible if UNDEF_3
+warning: undefined symbol UNDEF_2:
+
+- Referenced at Kconfiglib/tests/Kundef:4:
+
+config BOOL
+	bool "foo" if DEF || !UNDEF_1
+	default UNDEF_2
+
+- Referenced at Kconfiglib/tests/Kundef:8:
+
+config INT
+	int
+	range UNDEF_2 8
+	range 5 15
+	default 10
+warning: undefined symbol UNDEF_3:
+
+- Referenced at Kconfiglib/tests/Kundef:19:
+
+menu "menu"
+	depends on UNDEF_1
+	visible if UNDEF_3
+"""[1:-1])
+
+        os.environ.pop("KCONFIG_WARN_UNDEF")
+
+
+    print("\nAll selftests passed\n" if all_passed else
+          "\nSome selftests failed\n")
+
+
+def run_compatibility_tests():
+    # Runs tests on configurations from the kernel. Tests compability with the
+    # C implementation by comparing outputs.
+
+    # Referenced inside the kernel Kconfig files.
+    #
+    # The str() makes the type of the value 'str' on both Python 2 and Python 3,
+    # which is nice for some later dictionary key sanity checks.
+
+    os.environ["KERNELVERSION"] = str(
+        subprocess.check_output("make kernelversion", shell=True)
+            .decode("utf-8").rstrip()
+    )
+
+    os.environ["CC_VERSION_TEXT"] = str(
+        subprocess.check_output("gcc --version | head -n1", shell=True)
+            .decode("utf-8").rstrip()
+    )
+
+    os.environ["srctree"] = "."
+    os.environ["CC"] = "gcc"
+    os.environ["LD"] = "ld"
+
+
+    if not os.path.exists("scripts/kconfig/conf"):
+        print("\nscripts/kconfig/conf does not exist -- running "
+              "'make allnoconfig' to build it...")
+        shell("make allnoconfig")
+
+
+    print("Running compatibility tests...\n")
+
+    test_fns = (test_defconfig,
+                # Fails for a few defconfigs due to a bug in the C tools. Will
+                # be enabled once patches get in.
+                #test_min_config,
+                test_alldefconfig,
+                test_allnoconfig,
+                test_allnoconfig_walk,
+                test_allmodconfig,
+                test_allyesconfig,
+                test_sanity)
+
+    for test_fn in test_fns:
+        # The test description is taken from the docstring of the corresponding
+        # function
+        print(textwrap.dedent(test_fn.__doc__))
+
+        for arch, srcarch in all_arch_srcarch():
+            # Referenced inside the Kconfig files
+            os.environ["ARCH"] = arch
+            os.environ["SRCARCH"] = srcarch
+
+            rm_configs()
+
+            test_fn(arch, srcarch)
+
+    if all_passed:
+        print("All selftests and compatibility tests passed")
+    else:
+        sys.exit("Some tests failed")
+
+
+def all_arch_srcarch():
+    for srcarch in os.listdir("arch"):
+        # arc and h8300 are currently broken with the C tools on linux-next as
+        # well. Perhaps they require cross-compilers to be installed.
+        #
+        # User-mode Linux has an unorthodox Kconfig setup that would require a
+        # different testing setup. Skip it too.
+        if srcarch in ("arc", "h8300", "um"):
+            continue
+
+        if os.path.exists(os.path.join("arch", srcarch, "Kconfig")):
+            yield (srcarch, srcarch)
+
+    # Some arches define additional ARCH settings with ARCH != SRCARCH
+    # (search for "Additional ARCH settings for" in the top-level Makefile)
+
+    yield ("i386", "x86")
+    yield ("x86_64", "x86")
+
+    yield ("sparc32", "sparc")
+    yield ("sparc64", "sparc")
+
+    yield ("sh64", "sh")
+
+
+def test_allnoconfig(arch, srcarch):
+    """
+    Verify that allnoconfig.py generates the same .config as
+    'make allnoconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/allnoconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allnoconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_allnoconfig_walk(arch, srcarch):
+    """
+    Verify that examples/allnoconfig_walk.py generates the same .config as
+    'make allnoconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/examples/allnoconfig_walk.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allnoconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_allmodconfig(arch, srcarch):
+    """
+    Verify that allmodconfig.py generates the same .config as
+    'make allmodconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/allmodconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allmodconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_allyesconfig(arch, srcarch):
+    """
+    Verify that allyesconfig.py generates the same .config as
+    'make allyesconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/allyesconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allyesconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_sanity(arch, srcarch):
+    """
+    Do sanity checks on each configuration and call all public methods on all
+    symbols, choices, and menu nodes for all architectures to make sure we
+    never crash or hang.
+    """
+    print("For {}...".format(arch))
+
+    kconf = Kconfig()
+
+    for sym in kconf.defined_syms:
+        verify(sym._visited == 2,
+               "{} has broken dependency loop detection (_visited = {})"
+               .format(sym.name, sym._visited))
+
+    kconf.modules
+    kconf.defconfig_list
+    kconf.defconfig_filename
+
+    # Legacy warning functions
+    kconf.enable_redun_warnings()
+    kconf.disable_redun_warnings()
+    kconf.enable_undef_warnings()
+    kconf.disable_undef_warnings()
+    kconf.enable_warnings()
+    kconf.disable_warnings()
+    kconf.enable_stderr_warnings()
+    kconf.disable_stderr_warnings()
+
+    kconf.mainmenu_text
+    kconf.unset_values()
+
+    kconf.write_autoconf("/dev/null")
+
+    # No tempfile.TemporaryDirectory in Python 2
+    tmpdir = tempfile.mkdtemp()
+    kconf.sync_deps(os.path.join(tmpdir, "deps"))  # Create
+    kconf.sync_deps(os.path.join(tmpdir, "deps"))  # Update
+    shutil.rmtree(tmpdir)
+
+    # Python 2/3 compatible
+    for key, sym in kconf.syms.items():
+        verify(isinstance(key, str), "weird key '{}' in syms dict".format(key))
+
+        verify(not sym.is_constant, sym.name + " in 'syms' and constant")
+
+        verify(sym not in kconf.const_syms,
+               sym.name + " in both 'syms' and 'const_syms'")
+
+        for dep in sym._dependents:
+            verify(not dep.is_constant,
+                   "the constant symbol {} depends on {}"
+                   .format(dep.name, sym.name))
+
+        sym.__repr__()
+        sym.__str__()
+        sym.assignable
+        kconf.disable_warnings()
+        sym.set_value(2)
+        sym.set_value("foo")
+        sym.unset_value()
+        kconf.enable_warnings()  # Legacy warning function
+        sym.str_value
+        sym.tri_value
+        sym.type
+        sym.user_value
+        sym.visibility
+
+    for sym in kconf.defined_syms:
+        verify(sym.nodes, sym.name + " is defined but lacks menu nodes")
+
+        verify(not (sym.orig_type not in (BOOL, TRISTATE) and sym.choice),
+               sym.name + " is a choice symbol but not bool/tristate")
+
+    for key, sym in kconf.const_syms.items():
+        verify(isinstance(key, str),
+               "weird key '{}' in const_syms dict".format(key))
+
+        verify(sym.is_constant,
+               '"{}" is in const_syms but not marked constant'
+               .format(sym.name))
+
+        verify(not sym.nodes,
+               '"{}" is constant but has menu nodes'.format(sym.name))
+
+        verify(not sym._dependents,
+               '"{}" is constant but is a dependency of some symbol'
+               .format(sym.name))
+
+        verify(not sym.choice,
+               '"{}" is constant and a choice symbol'.format(sym.name))
+
+        sym.__repr__()
+        sym.__str__()
+        sym.assignable
+        kconf.disable_warnings()
+        sym.set_value(2)
+        sym.set_value("foo")
+        sym.unset_value()
+        kconf.enable_warnings()  # Legacy warning function
+        sym.str_value
+        sym.tri_value
+        sym.type
+        sym.visibility
+
+    for choice in kconf.choices:
+        for sym in choice.syms:
+            verify(sym.choice is choice,
+                   "{0} is in choice.syms but 'sym.choice' is not the choice"
+                   .format(sym.name))
+
+            verify(sym.type in (BOOL, TRISTATE),
+                   "{} is a choice symbol but is not a bool/tristate"
+                   .format(sym.name))
+
+        choice.__str__()
+        choice.__repr__()
+        choice.str_value
+        choice.tri_value
+        choice.user_value
+        choice.assignable
+        choice.selection
+        choice.type
+        choice.visibility
+
+    # Menu nodes
+
+    node = kconf.top_node
+
+    while 1:
+        # Everything else should be well exercised elsewhere
+        node.__repr__()
+        node.__str__()
+        verify(isinstance(node.item, (Symbol, Choice)) or \
+               node.item in (MENU, COMMENT),
+               "'{}' appeared as a menu item".format(node.item))
+
+        if node.list is not None:
+            node = node.list
+
+        elif node.next is not None:
+            node = node.next
+
+        else:
+            while node.parent is not None:
+                node = node.parent
+                if node.next is not None:
+                    node = node.next
+                    break
+            else:
+                break
+
+
+def test_alldefconfig(arch, srcarch):
+    """
+    Verify that alldefconfig.py generates the same .config as
+    'make alldefconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/alldefconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --alldefconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_defconfig(arch, srcarch):
+    """
+    Verify that Kconfiglib generates the same .config as scripts/kconfig/conf,
+    for each architecture/defconfig pair. In obsessive mode, this test includes
+    nonsensical groupings of arches with defconfigs from other arches (every
+    arch/defconfig combination) and takes an order of magnitude longer time to
+    run.
+
+    With logging enabled, this test appends any failures to a file
+    test_defconfig_fails in the root.
+    """
+    kconf = Kconfig()
+
+    if obsessive:
+        defconfigs = []
+
+        # Collect all defconfigs. This could be done once instead, but it's
+        # a speedy operation comparatively.
+        for srcarch_ in os.listdir("arch"):
+            defconfigs.extend(defconfig_files(srcarch_))
+    else:
+        defconfigs = defconfig_files(srcarch)
+
+    # Test architecture for each defconfig
+
+    for defconfig in defconfigs:
+        rm_configs()
+
+        kconf.load_config(defconfig)
+        kconf.write_config("._config")
+        shell("scripts/kconfig/conf --defconfig='{}' Kconfig".
+              format(defconfig))
+
+        arch_defconfig_str = "  {:14}with {:60} ".format(arch, defconfig)
+
+        if equal_configs():
+            print(arch_defconfig_str + "OK")
+        else:
+            print(arch_defconfig_str + "FAIL")
+            fail()
+            if log:
+                with open("test_defconfig_fails", "a") as fail_log:
+                    fail_log.write("{} with {} did not match\n"
+                                   .format(arch, defconfig))
+
+
+def test_min_config(arch, srcarch):
+    """
+    Verify that Kconfiglib generates the same .config as 'make savedefconfig'
+    for each architecture/defconfig pair.
+    """
+    kconf = Kconfig()
+
+    if obsessive_min_config:
+        defconfigs = []
+        for srcarch_ in os.listdir("arch"):
+            defconfigs.extend(defconfig_files(srcarch_))
+    else:
+        defconfigs = defconfig_files(srcarch)
+
+    for defconfig in defconfigs:
+        rm_configs()
+
+        kconf.load_config(defconfig)
+        kconf.write_min_config("._config")
+
+        shell("cp {} .config".format(defconfig))
+
+        shell("scripts/kconfig/conf --savedefconfig=.config Kconfig")
+
+        arch_defconfig_str = "  {:14}with {:60} ".format(arch, defconfig)
+
+        if equal_configs():
+            print(arch_defconfig_str + "OK")
+        else:
+            print(arch_defconfig_str + "FAIL")
+
+
+#
+# Helper functions
+#
+
+
+def defconfig_files(srcarch):
+    # Yields a list of defconfig file filenames for a particular srcarch
+    # subdirectory (arch/<srcarch>/)
+
+    srcarch_dir = os.path.join("arch", srcarch)
+
+    # Some arches have a defconfig in the root of their arch/<arch>/ directory
+    root_defconfig = os.path.join(srcarch_dir, "defconfig")
+    if os.path.exists(root_defconfig):
+        yield root_defconfig
+
+    # Assume all files in the arch/<arch>/configs/ directory (if it exists) are
+    # configurations
+    defconfigs_dir = os.path.join(srcarch_dir, "configs")
+
+    if not os.path.isdir(defconfigs_dir):
+        return
+
+    for dirpath, _, filenames in os.walk(defconfigs_dir):
+        for filename in filenames:
+            yield os.path.join(dirpath, filename)
+
+
+def rm_configs():
+    # Delete any old ".config" (generated by the C implementation) and
+    # "._config" (generated by us), if present.
+
+    def rm_if_exists(f):
+        if os.path.exists(f):
+            os.remove(f)
+
+    rm_if_exists(".config")
+    rm_if_exists("._config")
+
+
+def compare_configs(arch):
+    if equal_configs():
+        print("{:14}OK".format(arch))
+    else:
+        print("{:14}FAIL".format(arch))
+        fail()
+
+
+def equal_configs():
+    with open(".config") as f:
+        their = f.readlines()
+
+    # Strip the header generated by 'conf'
+    i = 0
+    for line in their:
+        if not line.startswith("#") or \
+           re.match(r"# CONFIG_(\w+) is not set", line):
+            break
+        i += 1
+    their = their[i:]
+
+    try:
+        f = open("._config")
+    except EnvironmentError as e:
+        if e.errno != errno.ENOENT:
+            raise
+        print("._config not found. Did you forget to apply the Makefile patch?")
+        return False
+    else:
+        with f:
+            # [1:] strips the default header
+            our = f.readlines()[1:]
+
+    if their == our:
+        return True
+
+    # Print a unified diff to help debugging
+    print("Mismatched .config's! Unified diff:")
+    sys.stdout.writelines(difflib.unified_diff(their, our, fromfile="their",
+                                               tofile="our"))
+
+    return False
+
+
+if __name__ == "__main__":
+    run_tests()
-- 
2.20.1




--===============4309393552384230033==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============4309393552384230033==--

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 10:22:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 10:22:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7dIE-0007T2-Hc; Tue, 10 Sep 2019 10:22:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=X99p=XF=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7dIE-0007Sx-1L
 for minios-devel@lists.xen.org; Tue, 10 Sep 2019 10:22:38 +0000
X-Inumbo-ID: e7f165de-d3b4-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e7f165de-d3b4-11e9-b299-bc764e2007e4;
 Tue, 10 Sep 2019 10:22:35 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id AB1D1F2013;
 Tue, 10 Sep 2019 12:22:34 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id y5R7aSt-lPkR; Tue, 10 Sep 2019 12:22:34 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 734D6F200B;
 Tue, 10 Sep 2019 12:22:30 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 12:22:30 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
 <20190909095802.23905-2-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <8039d8cf-9903-11b6-5dd5-6519a9ffa76c@neclab.eu>
Date: Tue, 10 Sep 2019 12:22:29 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095802.23905-2-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 1/4] lib/vfscore: Use a
 scalable bitmap for open file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwoKU2hhcmFuCgpPbiA5LzkvMTkgMTE6NTcgQU0sIENvc3RpbiBMdXB1IHdyb3RlOgo+IFVudGls
IG5vdywgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgd2FzIGxpbWl0ZWQgdG8g
NjQsIHdoaWNoIHdhcyB0aGUKPiBudW1iZXIgb2YgYml0cyBvZiB0aGUgdW5kZXJseWluZyBiaXRt
YXAuIFdlIGZpeCB0aGF0IGJ5IHJlcGxhY2luZyB3aXRoIGEKPiBjb25maWd1cmFibGUgYml0bWFw
LiBXZSBzZXQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgbWF4aW11bSBvcGVuIGZpbGVzIHRvIDEwMjQu
Cj4KPiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgo+
IC0tLQo+ICAgbGliL3Zmc2NvcmUvZmQuYyB8IDE2ICsrKysrKysrLS0tLS0tLS0KPiAgIDEgZmls
ZSBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0
IGEvbGliL3Zmc2NvcmUvZmQuYyBiL2xpYi92ZnNjb3JlL2ZkLmMKPiBpbmRleCAwMTAyNWE0Ni4u
ZTA5ZGQ1NGMgMTAwNjQ0Cj4gLS0tIGEvbGliL3Zmc2NvcmUvZmQuYwo+ICsrKyBiL2xpYi92ZnNj
b3JlL2ZkLmMKPiBAQCAtMzUsMTkgKzM1LDE5IEBACj4gICAKPiAgICNpbmNsdWRlIDxzdHJpbmcu
aD4KPiAgICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4gLSNpbmNsdWRlIDx1ay9iaXRvcHMu
aD4KPiArI2luY2x1ZGUgPHVrL2JpdG1hcC5oPgo+ICAgI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgo+
ICAgI2luY2x1ZGUgPHZmc2NvcmUvZmlsZS5oPgo+ICAgI2luY2x1ZGUgPHVrL3BsYXQvbGNwdS5o
Pgo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAjaW5jbHVkZSA8dWsvY3RvcnMuaD4KPiAgIAo+
IC0jZGVmaW5lIEZEVEFCTEVfTUFYX0ZJTEVTIChzaXplb2YodWludDY0X3QpICogOCkKPiArI2Rl
ZmluZSBGRFRBQkxFX01BWF9GSUxFUyAxMDI0Cj4gICAKPiAgIHZvaWQgaW5pdF9zdGRpbyh2b2lk
KTsKPiAgIAo+ICAgc3RydWN0IGZkdGFibGUgewo+IC0JdWludDY0X3QgYml0bWFwOwo+ICsJdW5z
aWduZWQgbG9uZyBiaXRtYXBbVUtfQklUU19UT19MT05HUyhGRFRBQkxFX01BWF9GSUxFUyldOwo+
ICAgCXVpbnQzMl90IGZkX3N0YXJ0Owo+ICAgCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGVzW0ZE
VEFCTEVfTUFYX0ZJTEVTXTsKPiAgIH07Cj4gQEAgLTU5LDE0ICs1OSwxNCBAQCBpbnQgdmZzY29y
ZV9hbGxvY19mZCh2b2lkKQo+ICAgCWludCByZXQ7Cj4gICAKPiAgIAlmbGFncyA9IHVrcGxhdF9s
Y3B1X3NhdmVfaXJxZigpOwo+IC0JcmV0ID0gdWthcmNoX2Zmc2wofmZkdGFibGUuYml0bWFwKTsK
PiArCXJldCA9IHVrX2ZpbmRfbmV4dF96ZXJvX2JpdChmZHRhYmxlLmJpdG1hcCwgRkRUQUJMRV9N
QVhfRklMRVMsIDApOwo+ICAgCj4gICAJaWYgKCFyZXQpIHsKPiAgIAkJcmV0ID0gLUVORklMRTsK
PiAgIAkJZ290byBleGl0Owo+ICAgCX0KPiAgIAo+IC0JZmR0YWJsZS5iaXRtYXAgfD0gKHVpbnQ2
NF90KSAxIDw8IHJldDsKPiArCXVrX2JpdG1hcF9zZXQoZmR0YWJsZS5iaXRtYXAsIHJldCwgMSk7
Cj4gICAKPiAgIGV4aXQ6Cj4gICAJdWtwbGF0X2xjcHVfcmVzdG9yZV9pcnFmKGZsYWdzKTsKPiBA
QCAtODMsNyArODMsNyBAQCB2b2lkIHZmc2NvcmVfcHV0X2ZkKGludCBmZCkKPiAgIAlVS19BU1NF
UlQoZmQgPiAyKTsKPiAgIAo+ICAgCWZsYWdzID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7Cj4g
LQlfX3VrX2NsZWFyX2JpdChmZCwgJmZkdGFibGUuYml0bWFwKTtcCj4gKwl1a19iaXRtYXBfY2xl
YXIoZmR0YWJsZS5iaXRtYXAsIGZkLCAxKTsKPiAgIAlmcCA9IGZkdGFibGUuZmlsZXNbZmRdOwo+
ICAgCWZkdGFibGUuZmlsZXNbZmRdID0gTlVMTDsKPiAgIAl1a3BsYXRfbGNwdV9yZXN0b3JlX2ly
cWYoZmxhZ3MpOwo+IEBAIC0xMjksNyArMTI5LDcgQEAgc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZz
Y29yZV9nZXRfZmlsZShpbnQgZmQpCj4gICAJVUtfQVNTRVJUKGZkIDwgKGludCkgRkRUQUJMRV9N
QVhfRklMRVMpOwo+ICAgCj4gICAJZmxhZ3MgPSB1a3BsYXRfbGNwdV9zYXZlX2lycWYoKTsKPiAt
CWlmICghKGZkdGFibGUuYml0bWFwICYgKCh1aW50NjRfdCkgMSA8PCBmZCkpKQo+ICsJaWYgKCF1
a190ZXN0X2JpdChmZCwgZmR0YWJsZS5iaXRtYXApKQo+ICAgCQlnb3RvIGV4aXQ7Cj4gICAJcmV0
ID0gZmR0YWJsZS5maWxlc1tmZF07Cj4gICAJZmhvbGQocmV0KTsKPiBAQCAtMTg2LDcgKzE4Niw3
IEBAIHN0YXRpYyB2b2lkIGZkdGFibGVfaW5pdCh2b2lkKQo+ICAgCW1lbXNldCgmZmR0YWJsZSwg
MCwgc2l6ZW9mKGZkdGFibGUpKTsKPiAgIAo+ICAgCS8qIHJlc2VydmUgc3RkaW4sIHN0ZG91dCBh
bmQgc3RkZXJyICovCj4gLQlmZHRhYmxlLmJpdG1hcCA9IDc7Cj4gKwl1a19iaXRtYXBfc2V0KGZk
dGFibGUuYml0bWFwLCAwLCAzKTsKPiAgIAlpbml0X3N0ZGlvKCk7Cj4gICB9Cj4gICAKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 10:24:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 10:24:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7dK1-0007Vq-00; Tue, 10 Sep 2019 10:24:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=X99p=XF=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7dJz-0007Vc-Ki
 for minios-devel@lists.xen.org; Tue, 10 Sep 2019 10:24:27 +0000
X-Inumbo-ID: 29c6cf08-d3b5-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 29c6cf08-d3b5-11e9-978d-bc764e2007e4;
 Tue, 10 Sep 2019 10:24:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 4865B105697;
 Tue, 10 Sep 2019 12:24:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kSMJlCQQBCGA; Tue, 10 Sep 2019 12:24:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 1F4BB105696;
 Tue, 10 Sep 2019 12:24:25 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 12:24:24 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
 <20190909095802.23905-3-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <789e576e-64bd-af06-f13a-beff3f900d74@neclab.eu>
Date: Tue, 10 Sep 2019 12:24:24 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095802.23905-3-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 2/4] lib/vfscore: Return
 error when trying to close standard file descriptors
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwoKU2hhcmFuCgpPbiA5LzkvMTkgMTE6NTggQU0sIENvc3RpbiBMdXB1IHdyb3RlOgo+IFNvbWUg
YXBwbGljYXRpb25zIG1heSB3YW50IHRvIGNsb3NlIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0
b3JzIChzdGRpbiwKPiBzdGRvdXQsIHN0ZGVyciksIHRoYXQgaXMgcGVyZmVjdGx5IG5vcm1hbC4g
VGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gc2hvdWxkIHJldHVybgo+IGFuIGVycm9yIGlmIHN1Y2gg
cmVxdWVzdCBpcyBub3QgYWxsb3dlZCwgaW5zdGVhZCBvZiBjcmFzaGluZy4KPgo+IFNpZ25lZC1v
ZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Cj4gLS0tCj4gICBsaWIv
dmZzY29yZS9mZC5jICAgICAgICAgICAgICAgICAgIHwgNyArKysrKy0tCj4gICBsaWIvdmZzY29y
ZS9pbmNsdWRlL3Zmc2NvcmUvZmlsZS5oIHwgMiArLQo+ICAgbGliL3Zmc2NvcmUvbWFpbi5jICAg
ICAgICAgICAgICAgICB8IDggKysrKystLS0KPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0
aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9mZC5j
IGIvbGliL3Zmc2NvcmUvZmQuYwo+IGluZGV4IGUwOWRkNTRjLi43ZWZlZDc0MSAxMDA2NDQKPiAt
LS0gYS9saWIvdmZzY29yZS9mZC5jCj4gKysrIGIvbGliL3Zmc2NvcmUvZmQuYwo+IEBAIC03Mywx
NCArNzMsMTUgQEAgZXhpdDoKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+ICAgCj4gLXZvaWQgdmZz
Y29yZV9wdXRfZmQoaW50IGZkKQo+ICtpbnQgdmZzY29yZV9wdXRfZmQoaW50IGZkKQo+ICAgewo+
ICAgCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZwOwo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4g
ICAKPiAgIAlVS19BU1NFUlQoZmQgPCAoaW50KSBGRFRBQkxFX01BWF9GSUxFUyk7Cj4gICAJLyog
Q3VycmVudGx5IGl0IGlzIG5vdCBhbGxvd2VkIHRvIGZyZWUgc3RkKGlufG91dHxlcnIpICovCj4g
LQlVS19BU1NFUlQoZmQgPiAyKTsKPiArCWlmIChmZCA8PSAyKQo+ICsJCXJldHVybiAtRUJVU1k7
Cj4gICAKPiAgIAlmbGFncyA9IHVrcGxhdF9sY3B1X3NhdmVfaXJxZigpOwo+ICAgCXVrX2JpdG1h
cF9jbGVhcihmZHRhYmxlLmJpdG1hcCwgZmQsIDEpOwo+IEBAIC05NCw2ICs5NSw4IEBAIHZvaWQg
dmZzY29yZV9wdXRfZmQoaW50IGZkKQo+ICAgCSAqLwo+ICAgCWlmIChmcCkKPiAgIAkJZmRyb3Ao
ZnApOwo+ICsKPiArCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICBpbnQgdmZzY29yZV9pbnN0YWxs
X2ZkKGludCBmZCwgc3RydWN0IHZmc2NvcmVfZmlsZSAqZmlsZSkKPiBkaWZmIC0tZ2l0IGEvbGli
L3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaCBiL2xpYi92ZnNjb3JlL2luY2x1ZGUvdmZz
Y29yZS9maWxlLmgKPiBpbmRleCAzNTRhNDE0ZS4uYzY5ODIwMWQgMTAwNjQ0Cj4gLS0tIGEvbGli
L3Zmc2NvcmUvaW5jbHVkZS92ZnNjb3JlL2ZpbGUuaAo+ICsrKyBiL2xpYi92ZnNjb3JlL2luY2x1
ZGUvdmZzY29yZS9maWxlLmgKPiBAQCAtNjYsNyArNjYsNyBAQCBzdHJ1Y3QgdmZzY29yZV9maWxl
IHsKPiAgICNkZWZpbmUgRkRfVU5MT0NLKGZwKSAgICAgdWtfbXV0ZXhfdW5sb2NrKCYoZnAtPmZf
bG9jaykpCj4gICAKPiAgIGludCB2ZnNjb3JlX2FsbG9jX2ZkKHZvaWQpOwo+IC12b2lkIHZmc2Nv
cmVfcHV0X2ZkKGludCBmZCk7Cj4gK2ludCB2ZnNjb3JlX3B1dF9mZChpbnQgZmQpOwo+ICAgaW50
IHZmc2NvcmVfaW5zdGFsbF9mZChpbnQgZmQsIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwo+
ICAgc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9nZXRfZmlsZShpbnQgZmQpOwo+ICAgdm9p
ZCB2ZnNjb3JlX3B1dF9maWxlKHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZpbGUpOwo+IGRpZmYgLS1n
aXQgYS9saWIvdmZzY29yZS9tYWluLmMgYi9saWIvdmZzY29yZS9tYWluLmMKPiBpbmRleCA4ZDBl
NGIyYy4uOTI1Y2U3NjIgMTAwNjQ0Cj4gLS0tIGEvbGliL3Zmc2NvcmUvbWFpbi5jCj4gKysrIGIv
bGliL3Zmc2NvcmUvbWFpbi5jCj4gQEAgLTIwNSwxNSArMjA1LDE3IEBAIFVLX1RSQUNFUE9JTlQo
dHJhY2VfdmZzX2Nsb3NlX2VyciwgIiVkIiwgaW50KTsKPiAgIGludCBmZGNsb3NlKGludCBmZCkK
PiAgIHsKPiAgIAlzdHJ1Y3QgdmZzY29yZV9maWxlICpmcDsKPiArCWludCBlcnJvcjsKPiAgIAo+
ICAgCWZwID0gdmZzY29yZV9nZXRfZmlsZShmZCk7Cj4gICAJaWYgKCFmcCkKPiAgIAkJcmV0dXJu
IEVCQURGOwo+ICAgCj4gLQl2ZnNjb3JlX3B1dF9mZChmZCk7Cj4gLQlmZHJvcChmcCk7Cj4gKwll
cnJvciA9IHZmc2NvcmVfcHV0X2ZkKGZkKTsKPiArCWlmICghZXJyb3IpCj4gKwkJZmRyb3AoZnAp
Owo+ICAgCj4gLQlyZXR1cm4gMDsKPiArCXJldHVybiBlcnJvcjsKPiAgIH0KPiAgIAo+ICAgaW50
IGNsb3NlKGludCBmZCkKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 11:20:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 11:20:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7eBp-0003tp-VL; Tue, 10 Sep 2019 11:20:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=X99p=XF=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7eBo-0003i7-H6
 for minios-devel@lists.xen.org; Tue, 10 Sep 2019 11:20:04 +0000
X-Inumbo-ID: eed475dc-d3bc-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id eed475dc-d3bc-11e9-b299-bc764e2007e4;
 Tue, 10 Sep 2019 11:20:03 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 4FBDB10568F;
 Tue, 10 Sep 2019 13:20:02 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id uBY3U0MUc0EQ; Tue, 10 Sep 2019 13:20:02 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 2C413105688;
 Tue, 10 Sep 2019 13:20:02 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 13:20:01 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
 <20190909095802.23905-4-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <7d4e439f-8d8a-4eef-94a3-9f05797b9677@neclab.eu>
Date: Tue, 10 Sep 2019 13:20:01 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095802.23905-4-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 3/4] lib/vfscore: sys_ioctl()
 - Handle FIOCLEX and FIONCLEX requests
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwoKU2hhcmFuCgoKT24gOS85LzE5IDExOjU4IEFNLCBDb3N0aW4gTHVwdSB3cm90ZToKCj4gU2ln
bmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPiAtLS0KPiAg
IGxpYi92ZnNjb3JlL3N5c2NhbGxzLmMgfCAxNSArKysrKysrKysrKysrLS0KPiAgIDEgZmlsZSBj
aGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBh
L2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMgYi9saWIvdmZzY29yZS9zeXNjYWxscy5jCj4gaW5kZXgg
NTRhZGMyZDIuLmQzNzU3NzRhIDEwMDY0NAo+IC0tLSBhL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMK
PiArKysgYi9saWIvdmZzY29yZS9zeXNjYWxscy5jCj4gQEAgLTQ0LDYgKzQ0LDcgQEAKPiAgICNp
bmNsdWRlIDxzdGRpby5oPgo+ICAgI2luY2x1ZGUgPGVycm5vLmg+Cj4gICAjaW5jbHVkZSA8ZmNu
dGwuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICAgCj4gICAjaW5jbHVkZSA8ZGlyZW50
Lmg+Cj4gICAjaW5jbHVkZSA8dmZzY29yZS9wcmV4Lmg+Cj4gQEAgLTM4MSwxNCArMzgyLDI0IEBA
IHN5c19sc2VlayhzdHJ1Y3QgdmZzY29yZV9maWxlICpmcCwgb2ZmX3Qgb2ZmLCBpbnQgdHlwZSwg
b2ZmX3QgKm9yaWdpbikKPiAgIGludAo+ICAgc3lzX2lvY3RsKHN0cnVjdCB2ZnNjb3JlX2ZpbGUg
KmZwLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIHZvaWQgKmJ1ZikKPiAgIHsKPiAtCWludCBlcnJv
cjsKPiArCWludCBlcnJvciA9IDA7Cj4gICAKPiAgIAlEUFJJTlRGKFZGU0RCX1NZU0NBTEwsICgi
c3lzX2lvY3RsOiBmcD0lcCByZXF1ZXN0PSVsdXhcbiIsIGZwLCByZXF1ZXN0KSk7Cj4gICAKPiAg
IAlpZiAoKGZwLT5mX2ZsYWdzICYgKFVLX0ZSRUFEIHwgVUtfRldSSVRFKSkgPT0gMCkKPiAgIAkJ
cmV0dXJuIEVCQURGOwo+ICAgCj4gLQllcnJvciA9IHZmc19pb2N0bChmcCwgcmVxdWVzdCwgYnVm
KTsKPiArCXN3aXRjaCAocmVxdWVzdCkgewo+ICsJY2FzZSBGSU9DTEVYOgo+ICsJCWZwLT5mX2Zs
YWdzIHw9IE9fQ0xPRVhFQzsKPiArCQlicmVhazsKPiArCWNhc2UgRklPTkNMRVg6Cj4gKwkJZnAt
PmZfZmxhZ3MgJj0gfk9fQ0xPRVhFQzsKPiArCQlicmVhazsKPiArCWRlZmF1bHQ6Cj4gKwkJZXJy
b3IgPSB2ZnNfaW9jdGwoZnAsIHJlcXVlc3QsIGJ1Zik7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gICAK
PiAgIAlEUFJJTlRGKFZGU0RCX1NZU0NBTEwsICgic3lzX2lvY3RsOiBjb21wIGVycm9yPSVkXG4i
LCBlcnJvcikpOwo+ICAgCXJldHVybiBlcnJvcjsKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 11:25:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 11:25:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7eGm-00048P-AN; Tue, 10 Sep 2019 11:25:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=X99p=XF=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7eGl-00048K-0m
 for minios-devel@lists.xenproject.org; Tue, 10 Sep 2019 11:25:11 +0000
X-Inumbo-ID: a5872748-d3bd-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a5872748-d3bd-11e9-a337-bc764e2007e4;
 Tue, 10 Sep 2019 11:25:09 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C540AF2017;
 Tue, 10 Sep 2019 13:25:08 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id aUyoQ85QcEjw; Tue, 10 Sep 2019 13:25:08 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 9BE95F200B
 for <minios-devel@lists.xenproject.org>; Tue, 10 Sep 2019 13:25:06 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 13:25:06 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
 <20190909095802.23905-4-costin.lupu@cs.pub.ro>
 <7d4e439f-8d8a-4eef-94a3-9f05797b9677@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <529d4dbf-bd2e-f82b-bf14-4af1729c07aa@neclab.eu>
Date: Tue, 10 Sep 2019 13:25:05 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <7d4e439f-8d8a-4eef-94a3-9f05797b9677@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 3/4] lib/vfscore: sys_ioctl()
 - Handle FIOCLEX and FIONCLEX requests
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8sCgpVbmZvcnR1bmF0ZWx5IHRoZSBidWlsZCBmYWlscyB3aXRoIG5vbGliYy4KCmBgYFVu
aWtyYWZ0L2xpYi92ZnNjb3JlL3N5c2NhbGxzLmM6NDc6MjM6IGZhdGFsIGVycm9yOiBzeXMvaW9j
dGwuaDogTm8gCnN1Y2ggZmlsZSBvciBkaXJlY3RvcnlgYGAKCldlIG5lZWQgdG8gZml4IHRoaXMg
YmVmb3JlIHdlIGNhbiBhY2NlcHQgdGhpcyBwYXRjaC4KClRoYW5rcyAmIFJlZ2FyZHMKClNoYXJh
bgoKT24gOS8xMC8xOSAxOjIwIFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IEhlbGxvIENv
c3RpbiwKPgo+IFRoaXMgcGF0Y2ggc2VlbXMgZmluZS4KPgo+IFJldmlld2VkLWJ5OiBTaGFyYW4g
U2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KPgo+IFRoYW5rcyAmIFJlZ2Fy
ZHMKPgo+IFNoYXJhbgo+Cj4KPiBPbiA5LzkvMTkgMTE6NTggQU0sIENvc3RpbiBMdXB1IHdyb3Rl
Ogo+Cj4+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+
Cj4+IC0tLQo+PiDCoCBsaWIvdmZzY29yZS9zeXNjYWxscy5jIHwgMTUgKysrKysrKysrKysrKy0t
Cj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+
Pgo+PiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvc3lzY2FsbHMuYyBiL2xpYi92ZnNjb3JlL3N5
c2NhbGxzLmMKPj4gaW5kZXggNTRhZGMyZDIuLmQzNzU3NzRhIDEwMDY0NAo+PiAtLS0gYS9saWIv
dmZzY29yZS9zeXNjYWxscy5jCj4+ICsrKyBiL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMKPj4gQEAg
LTQ0LDYgKzQ0LDcgQEAKPj4gwqAgI2luY2x1ZGUgPHN0ZGlvLmg+Cj4+IMKgICNpbmNsdWRlIDxl
cnJuby5oPgo+PiDCoCAjaW5jbHVkZSA8ZmNudGwuaD4KPj4gKyNpbmNsdWRlIDxzeXMvaW9jdGwu
aD4KPj4gwqAgwqAgI2luY2x1ZGUgPGRpcmVudC5oPgo+PiDCoCAjaW5jbHVkZSA8dmZzY29yZS9w
cmV4Lmg+Cj4+IEBAIC0zODEsMTQgKzM4MiwyNCBAQCBzeXNfbHNlZWsoc3RydWN0IHZmc2NvcmVf
ZmlsZSAqZnAsIG9mZl90IG9mZiwgCj4+IGludCB0eXBlLCBvZmZfdCAqb3JpZ2luKQo+PiDCoCBp
bnQKPj4gwqAgc3lzX2lvY3RsKHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZwLCB1bnNpZ25lZCBsb25n
IHJlcXVlc3QsIHZvaWQgKmJ1ZikKPj4gwqAgewo+PiAtwqDCoMKgIGludCBlcnJvcjsKPj4gK8Kg
wqDCoCBpbnQgZXJyb3IgPSAwOwo+PiDCoCDCoMKgwqDCoMKgIERQUklOVEYoVkZTREJfU1lTQ0FM
TCwgKCJzeXNfaW9jdGw6IGZwPSVwIHJlcXVlc3Q9JWx1eFxuIiwgCj4+IGZwLCByZXF1ZXN0KSk7
Cj4+IMKgIMKgwqDCoMKgwqAgaWYgKChmcC0+Zl9mbGFncyAmIChVS19GUkVBRCB8IFVLX0ZXUklU
RSkpID09IDApCj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRUJBREY7Cj4+IMKgIC3CoMKg
wqAgZXJyb3IgPSB2ZnNfaW9jdGwoZnAsIHJlcXVlc3QsIGJ1Zik7Cj4+ICvCoMKgwqAgc3dpdGNo
IChyZXF1ZXN0KSB7Cj4+ICvCoMKgwqAgY2FzZSBGSU9DTEVYOgo+PiArwqDCoMKgwqDCoMKgwqAg
ZnAtPmZfZmxhZ3MgfD0gT19DTE9FWEVDOwo+PiArwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+ICvC
oMKgwqAgY2FzZSBGSU9OQ0xFWDoKPj4gK8KgwqDCoMKgwqDCoMKgIGZwLT5mX2ZsYWdzICY9IH5P
X0NMT0VYRUM7Cj4+ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCBkZWZhdWx0Ogo+
PiArwqDCoMKgwqDCoMKgwqAgZXJyb3IgPSB2ZnNfaW9jdGwoZnAsIHJlcXVlc3QsIGJ1Zik7Cj4+
ICvCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4gK8KgwqDCoCB9Cj4+IMKgIMKgwqDCoMKgwqAgRFBS
SU5URihWRlNEQl9TWVNDQUxMLCAoInN5c19pb2N0bDogY29tcCBlcnJvcj0lZFxuIiwgZXJyb3Ip
KTsKPj4gwqDCoMKgwqDCoCByZXR1cm4gZXJyb3I7Cj4KPiBfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwo+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKPiBodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsCgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 14:15:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 14:15:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7gvw-0005It-B1; Tue, 10 Sep 2019 14:15:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=X99p=XF=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7gvv-0005Io-Fl
 for minios-devel@lists.xen.org; Tue, 10 Sep 2019 14:15:51 +0000
X-Inumbo-ID: 7cbd7854-d3d5-11e9-a337-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7cbd7854-d3d5-11e9-a337-bc764e2007e4;
 Tue, 10 Sep 2019 14:15:49 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 3D129F200B;
 Tue, 10 Sep 2019 16:15:48 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id YSdusSuamFdu; Tue, 10 Sep 2019 16:15:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0FF66F2004;
 Tue, 10 Sep 2019 16:15:44 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 16:15:43 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
 <20190909095802.23905-5-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <f01282b5-da70-10a7-8c7d-04596b31b0af@neclab.eu>
Date: Tue, 10 Sep 2019 16:15:43 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095802.23905-5-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 4/4] lib/uklock: Make mutex
 recursive
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwoKU2hhcmFuCgpPbiA5LzkvMTkgMTE6NTggQU0sIENvc3RpbiBMdXB1IHdyb3RlOgo+IFRoaXMg
cGF0Y2ggY2hhbmdlcyB0aGUgZXhpc3RpbmcgbXV0ZXggaW1wbGVtZW50YXRpb24gdG8gc3VwcG9y
dCBtdWx0aXBsZSBsb2NraW5nCj4gYnkgdGhlIHNhbWUgdGhyZWFkLgo+Cj4gU2lnbmVkLW9mZi1i
eTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPiAtLS0KPiAgIGxpYi91a2xv
Y2svaW5jbHVkZS91ay9tdXRleC5oIHwgMzYgKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t
LS0tLS0KPiAgIGxpYi91a2xvY2svbXV0ZXguYyAgICAgICAgICAgIHwgIDMgKystCj4gICAyIGZp
bGVzIGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAt
LWdpdCBhL2xpYi91a2xvY2svaW5jbHVkZS91ay9tdXRleC5oIGIvbGliL3VrbG9jay9pbmNsdWRl
L3VrL211dGV4LmgKPiBpbmRleCBmZjg1MmI0NS4uZDQ0MzVlYmQgMTAwNjQ0Cj4gLS0tIGEvbGli
L3VrbG9jay9pbmNsdWRlL3VrL211dGV4LmgKPiArKysgYi9saWIvdWtsb2NrL2luY2x1ZGUvdWsv
bXV0ZXguaAo+IEBAIC01NCw0OSArNTQsNjEgQEAgZXh0ZXJuICJDIiB7Cj4gICAgKiB1c2VzIHdh
aXQgcXVldWVzIGZvciB0aHJlYWRzCj4gICAgKi8KPiAgIHN0cnVjdCB1a19tdXRleCB7Cj4gLQlp
bnQgbG9ja2VkOwo+ICsJaW50IGxvY2tfY291bnQ7Cj4gKwlzdHJ1Y3QgdWtfdGhyZWFkICpvd25l
cjsKPiAgIAlzdHJ1Y3QgdWtfd2FpdHEgd2FpdDsKPiAgIH07Cj4gICAKPiAgICNkZWZpbmUJVUtf
TVVURVhfSU5JVElBTElaRVIobmFtZSkJCQkJXAo+IC0JeyAwLCBfX1dBSVRfUVVFVUVfSU5JVElB
TElaRVIoKG5hbWUpLndhaXQpIH0KPiArCXsgMCwgTlVMTCwgX19XQUlUX1FVRVVFX0lOSVRJQUxJ
WkVSKChuYW1lKS53YWl0KSB9Cj4gICAKPiAgIHZvaWQgdWtfbXV0ZXhfaW5pdChzdHJ1Y3QgdWtf
bXV0ZXggKm0pOwo+ICAgCj4gICBzdGF0aWMgaW5saW5lIHZvaWQgdWtfbXV0ZXhfbG9jayhzdHJ1
Y3QgdWtfbXV0ZXggKm0pCj4gICB7Cj4gKwlzdHJ1Y3QgdWtfdGhyZWFkICpjdXJyZW50Owo+ICAg
CXVuc2lnbmVkIGxvbmcgaXJxZjsKPiAgIAo+ICAgCVVLX0FTU0VSVChtKTsKPiAgIAo+ICsJY3Vy
cmVudCA9IHVrX3RocmVhZF9jdXJyZW50KCk7Cj4gKwo+ICAgCWZvciAoOzspIHsKPiAtCQl1a193
YWl0cV93YWl0X2V2ZW50KCZtLT53YWl0LCBtLT5sb2NrZWQgPT0gMCk7Cj4gKwkJdWtfd2FpdHFf
d2FpdF9ldmVudCgmbS0+d2FpdCwKPiArCQkJbS0+bG9ja19jb3VudCA9PSAwIHx8IG0tPm93bmVy
ID09IGN1cnJlbnQpOwo+ICAgCQlpcnFmID0gdWtwbGF0X2xjcHVfc2F2ZV9pcnFmKCk7Cj4gLQkJ
aWYgKCFtLT5sb2NrZWQpCj4gKwkJaWYgKG0tPmxvY2tfY291bnQgPT0gMCB8fCBtLT5vd25lciA9
PSBjdXJyZW50KQo+ICAgCQkJYnJlYWs7Cj4gICAJCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihp
cnFmKTsKPiAgIAl9Cj4gLQltLT5sb2NrZWQgPSAxOwo+ICsJbS0+bG9ja19jb3VudCsrOwo+ICsJ
bS0+b3duZXIgPSBjdXJyZW50Owo+ICAgCXVrcGxhdF9sY3B1X3Jlc3RvcmVfaXJxZihpcnFmKTsK
PiAgIH0KPiAgIAo+ICAgc3RhdGljIGlubGluZSBpbnQgdWtfbXV0ZXhfdHJ5bG9jayhzdHJ1Y3Qg
dWtfbXV0ZXggKm0pCj4gICB7Cj4gKwlzdHJ1Y3QgdWtfdGhyZWFkICpjdXJyZW50Owo+ICAgCXVu
c2lnbmVkIGxvbmcgaXJxZjsKPiAgIAlpbnQgcmV0ID0gMDsKPiAgIAo+ICAgCVVLX0FTU0VSVCht
KTsKPiAgIAo+ICsJY3VycmVudCA9IHVrX3RocmVhZF9jdXJyZW50KCk7Cj4gKwo+ICAgCWlycWYg
PSB1a3BsYXRfbGNwdV9zYXZlX2lycWYoKTsKPiAtCWlmICghbS0+bG9ja2VkKQo+IC0JCXJldCA9
IG0tPmxvY2tlZCA9IDE7Cj4gKwlpZiAobS0+bG9ja19jb3VudCA9PSAwIHx8IG0tPm93bmVyID09
IGN1cnJlbnQpIHsKPiArCQlyZXQgPSAxOwo+ICsJCW0tPmxvY2tfY291bnQrKzsKPiArCQltLT5v
d25lciA9IGN1cnJlbnQ7Cj4gKwl9Cj4gICAJdWtwbGF0X2xjcHVfcmVzdG9yZV9pcnFmKGlycWYp
Owo+ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUgaW50IHVrX211
dGV4X2lzX2xvY2tlZChzdHJ1Y3QgdWtfbXV0ZXggKm0pCj4gICB7Cj4gLQlyZXR1cm4gbS0+bG9j
a2VkOwo+ICsJcmV0dXJuIG0tPmxvY2tfY291bnQgPiAwOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMg
aW5saW5lIHZvaWQgdWtfbXV0ZXhfdW5sb2NrKHN0cnVjdCB1a19tdXRleCAqbSkKPiBAQCAtMTA2
LDkgKzExOCwxMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdWtfbXV0ZXhfdW5sb2NrKHN0cnVjdCB1
a19tdXRleCAqbSkKPiAgIAlVS19BU1NFUlQobSk7Cj4gICAKPiAgIAlpcnFmID0gdWtwbGF0X2xj
cHVfc2F2ZV9pcnFmKCk7Cj4gLQlVS19BU1NFUlQobS0+bG9ja2VkKTsKPiAtCW0tPmxvY2tlZCA9
IDA7Cj4gLQl1a193YWl0cV93YWtlX3VwKCZtLT53YWl0KTsKPiArCVVLX0FTU0VSVChtLT5sb2Nr
X2NvdW50ID4gMCk7Cj4gKwlpZiAoLS1tLT5sb2NrX2NvdW50ID09IDApIHsKPiArCQltLT5vd25l
ciA9IE5VTEw7Cj4gKwkJdWtfd2FpdHFfd2FrZV91cCgmbS0+d2FpdCk7Cj4gKwl9Cj4gICAJdWtw
bGF0X2xjcHVfcmVzdG9yZV9pcnFmKGlycWYpOwo+ICAgfQo+ICAgCj4gZGlmZiAtLWdpdCBhL2xp
Yi91a2xvY2svbXV0ZXguYyBiL2xpYi91a2xvY2svbXV0ZXguYwo+IGluZGV4IDE4M2EwMWRiLi41
ZTVlYzlhNiAxMDA2NDQKPiAtLS0gYS9saWIvdWtsb2NrL211dGV4LmMKPiArKysgYi9saWIvdWts
b2NrL211dGV4LmMKPiBAQCAtMiw2ICsyLDcgQEAKPiAgIAo+ICAgdm9pZCB1a19tdXRleF9pbml0
KHN0cnVjdCB1a19tdXRleCAqbSkKPiAgIHsKPiAtCW0tPmxvY2tlZCA9IDA7Cj4gKwltLT5sb2Nr
X2NvdW50ID0gMDsKPiArCW0tPm93bmVyID0gTlVMTDsKPiAgIAl1a193YWl0cV9pbml0KCZtLT53
YWl0KTsKPiAgIH0KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 14:20:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 14:20:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7h0O-00060U-Nn; Tue, 10 Sep 2019 14:20:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=X99p=XF=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i7h0N-00060P-KY
 for minios-devel@lists.xen.org; Tue, 10 Sep 2019 14:20:27 +0000
X-Inumbo-ID: 21ffc18c-d3d6-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 21ffc18c-d3d6-11e9-978d-bc764e2007e4;
 Tue, 10 Sep 2019 14:20:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8518DF200B;
 Tue, 10 Sep 2019 16:20:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id J7pGbJh5oIhN; Tue, 10 Sep 2019 16:20:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 53477F2004;
 Tue, 10 Sep 2019 16:20:21 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 10 Sep
 2019 16:20:21 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <d1f2702d-7a9a-39b2-3faa-5804064b4e99@neclab.eu>
Date: Tue, 10 Sep 2019 16:20:20 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 0/4] Changes for supporting
 Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhhbmsgeW91IGZvciB0aGUgcGF0Y2ggc2VyaWVzLiBUaGUgcGF0Y2gg
bm8uIDMgbmVlZHMgc29tZSByZXdvcmsuIEkgCndvdWxkIHN1Z2dlc3QgdGFraW5nIGluIHRoZSBy
ZXN0IG9mIHRoZSBwYXRjaCBzZXJpZXMgYXMgdGhleSBpbmRlcGVuZGVudCAKb2Ygb25lIGFub3Ro
ZXIuCgpXaGF0IGRvIHlvdSB0aGluaz8KClRoYW5rcyAmIFJlZ2FyZHMKClNoYXJhbgoKT24gOS85
LzE5IDExOjU3IEFNLCBDb3N0aW4gTHVwdSB3cm90ZToKPiBUaGVzZSBjaGFuZ2VzIGFyZSBuZWVk
ZWQgZm9yIHNvbWUgb2YgdGhlIFB5dGhvbiAyIHVuaXQgdGVzdHMuIFNvbWUgdGVzdHMgbWF5Cj4g
dXNlIGEgbGFyZ2UgbnVtYmVyIG9mIGZpbGVzLCB0aGVyZWZvcmUgd2UgaGFkIHRvIGluY3JlYXNl
IG91ciBsaW1pdC4gT3RoZXIKPiBmaWxlcyB0cnkgdG8gY2xvc2UgdGhlIHN0YW5kYXJkIGZpbGUg
ZGVzY3JpcHRvcnMgKDAtMiksIHRoZXJlZm9yZSB0aGUgVk0KPiBzaG91bGRuJ3QgY3Jhc2ggaWYg
c3VjaCBiZWhhdmlvciBpcyB3YW50ZWQuIEFsc28sIHNvbWUgdW5pdCB0ZXN0cyBuZWVkCj4gcmVj
dXJzaXZlIG11dGV4ZXMuCj4KPiBDaGFuZ2VzIHNpbmNlIHYxOgo+IC0gQXBwbGllZCBjb21tZW50
cwo+IC0gQWRkZWQgJ2xpYi92ZnNjb3JlOiBzeXNfaW9jdGwoKSAtIEhhbmRsZSBGSU9DTEVYIGFu
ZCBGSU9OQ0xFWCByZXF1ZXN0cycgcGF0Y2gKPgo+IENoYW5nZXMgc2luY2UgdjI6Cj4gLSBGaXhl
ZCBVS19NVVRFWF9JTklUSUFMSVpFUigpCj4KPiBDb3N0aW4gTHVwdSAoNCk6Cj4gICAgbGliL3Zm
c2NvcmU6IFVzZSBhIHNjYWxhYmxlIGJpdG1hcCBmb3Igb3BlbiBmaWxlIGRlc2NyaXB0b3JzCj4g
ICAgbGliL3Zmc2NvcmU6IFJldHVybiBlcnJvciB3aGVuIHRyeWluZyB0byBjbG9zZSBzdGFuZGFy
ZCBmaWxlCj4gICAgICBkZXNjcmlwdG9ycwo+ICAgIGxpYi92ZnNjb3JlOiBzeXNfaW9jdGwoKSAt
IEhhbmRsZSBGSU9DTEVYIGFuZCBGSU9OQ0xFWCByZXF1ZXN0cwo+ICAgIGxpYi91a2xvY2s6IE1h
a2UgbXV0ZXggcmVjdXJzaXZlCj4KPiAgIGxpYi91a2xvY2svaW5jbHVkZS91ay9tdXRleC5oICAg
ICAgfCAzNiArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0KPiAgIGxpYi91a2xvY2svbXV0
ZXguYyAgICAgICAgICAgICAgICAgfCAgMyArKy0KPiAgIGxpYi92ZnNjb3JlL2ZkLmMgICAgICAg
ICAgICAgICAgICAgfCAyMyArKysrKysrKysrLS0tLS0tLS0tCj4gICBsaWIvdmZzY29yZS9pbmNs
dWRlL3Zmc2NvcmUvZmlsZS5oIHwgIDIgKy0KPiAgIGxpYi92ZnNjb3JlL21haW4uYyAgICAgICAg
ICAgICAgICAgfCAgOCArKysrLS0tCj4gICBsaWIvdmZzY29yZS9zeXNjYWxscy5jICAgICAgICAg
ICAgIHwgMTUgKysrKysrKysrKystLQo+ICAgNiBmaWxlcyBjaGFuZ2VkLCA1OSBpbnNlcnRpb25z
KCspLCAyOCBkZWxldGlvbnMoLSkKPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 10 16:39:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 10 Sep 2019 16:39:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i7jAi-0002Dd-F0; Tue, 10 Sep 2019 16:39:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=W1Cm=XF=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i7jAg-0002DY-W6
 for minios-devel@lists.xen.org; Tue, 10 Sep 2019 16:39:15 +0000
X-Inumbo-ID: 84099674-d3e9-11e9-ac20-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 84099674-d3e9-11e9-ac20-12813bfff9fa;
 Tue, 10 Sep 2019 16:39:11 +0000 (UTC)
IronPort-SDR: Sk4P0N7bd6OuuFjWb8FwBUwhCDtjBIxc+5YH5chY/v2wchOW1GKWYr/kcCzueGLGYsMfEvYCMw
 AnRApNGay3YQ==
IronPort-PHdr: =?us-ascii?q?9a23=3A+wU/0xNSWQ0zMlzCw1gl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0I/jyrarrMEGX3/hxlliBBdydt6sfzbKO+PC4ESxYuNDd6SpEKMQNHz?=
 =?us-ascii?q?Y+yuwu1zQ6B8CEDUCpZNXLVAcdWPp4aVl+4nugOlJUEsutL3fbo3m18CJAUk?=
 =?us-ascii?q?6nbVk9Kev6AJPdgNqq3O6u5ZLTfx9IhD2gar9uMRm6twrcutQYjId4Nqo91h?=
 =?us-ascii?q?TFr3hUd+9LwW9kOU+fkwzz68ut4pJv6Thct+4k+8VdTaj0YqM0QKBCAj87KW?=
 =?us-ascii?q?41/srrtRfCTQuL+HQRV3gdnwRLDQbY8hz0R4/9vSTmuOVz3imaJtD2QqsvWT?=
 =?us-ascii?q?u+9adrSQTnhzkBOjUk7WzYkM1wjKZcoBK8uxxyxpPfbY+JOPZieK7WYMgXTn?=
 =?us-ascii?q?RdUMlPSyNBA5u8b4oRAOoHIeZYtJT2q18XoRejGQWgGObjxzlVjXH0wKI6yf?=
 =?us-ascii?q?wsHxzY0gwuH9wAs3rao9v6O6gQTe+7w7LFzSnBYv5MxTvx9IbFfxInrPqRXb?=
 =?us-ascii?q?xwa83RyUw3Gg7biVWQspDlPzKT1u8QtWab8vJgVf+ygGMgtw5xpSOvxtstio?=
 =?us-ascii?q?nPnI4Vzk3E9T1kwIsuOdK4U1R3Yca5EJRLrS2aLYx2T9okTmp1uyg60qULtY?=
 =?us-ascii?q?O0cSQX0pgqxB7SZ+aZf4SW4B/vTuicLS9liH9me7+znQi+/Ei6xuHiWcS50E?=
 =?us-ascii?q?xGoyVBn9TKq3sDzQbc6tKdRft45kqh3DGP2B3N5excOkA0kLbbK4Ymwr4tip?=
 =?us-ascii?q?ofqUTDETHymEXxlKKWaEAk9fKp6+TjeLnpuoScO5VsigHjKasigNa/AeMgPg?=
 =?us-ascii?q?gPWWiU5/i82aX+8UD2XblGlP47n6nDvJzEO8gWpLS1DgFN3oYm8Rm/DjOm0N?=
 =?us-ascii?q?oCnXkAKVJIYA6Ij4/yO1HSIfD4C+2zg1CxkDdz2vDLJaHuAo7XInjbjbfuZq?=
 =?us-ascii?q?xx61RbyAYr19BQ+4pUCq0dIPL0QkLxsd3YDhk4Mwyz2ObrEchy2Z0AWW2RBq?=
 =?us-ascii?q?+UK6fSsV6T5uIzOOmAfoAUtyj7K/Q/4P7ul3A5k0cHfaa1xZsXdGy4HvN+Lk?=
 =?us-ascii?q?WCYXrjmM0BHn0MvgYkV+zlkluCUSJTZ3moWaIz/DQ7BZmgDYjdWo+thKaO0z?=
 =?us-ascii?q?yhEpJIe2AVQmyLREzofp+NXb83YSSOIsZnmzlMAaOhQpUo01e1vQnmy7NhJ+?=
 =?us-ascii?q?/8/CATsZvpktVosambkBA09DtvSsiQzWyJZ2V1hX8TAS872uZ4u0Mu5E2E1P?=
 =?us-ascii?q?1ThOdEFNobw+5RT09uPpnH0+18TdTvQh/pdczPUEusBM+hV2JiBuktysMDNh?=
 =?us-ascii?q?4uU+6piQrOim/zW+cY?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2D1BQAw0XddjAPjVY1kHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MIUDKES4h8h38lmxkJAQEBOgECAQGEPwKCbDgTAgMJAQEFAQEBAQE?=
 =?us-ascii?q?GBAETAQEBJoVqgjopAYJnAQIDI2YLGAICJgICVwYBDAgBAYMegg+oG4EyhUu?=
 =?us-ascii?q?DLYFJgQwohQCIUD+BOAyCXz6HT4JYBJVfQJYoB4IkZASUCSGCJAGLSYscjX+?=
 =?us-ascii?q?aRzgggVkzGoNggluOLj0BAYE3AQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2D1BQAw0XddjAPjVY1kHAEBAQQBAQcEAQGBZ4MIUDKES?=
 =?us-ascii?q?4h8h38lmxkJAQEBOgECAQGEPwKCbDgTAgMJAQEFAQEBAQEGBAETAQEBJoVqg?=
 =?us-ascii?q?jopAYJnAQIDI2YLGAICJgICVwYBDAgBAYMegg+oG4EyhUuDLYFJgQwohQCIU?=
 =?us-ascii?q?D+BOAyCXz6HT4JYBJVfQJYoB4IkZASUCSGCJAGLSYscjX+aRzgggVkzGoNgg?=
 =?us-ascii?q?luOLj0BAYE3AQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,490,1559509200"; 
   d="scan'208";a="4712777"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 10 Sep 2019 19:39:09 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 63CA11A60112;
 Tue, 10 Sep 2019 19:39:09 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id c3jCbRFY-rWt; Tue, 10 Sep 2019 19:39:09 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 46E1F1A60125;
 Tue, 10 Sep 2019 19:39:09 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id G2MbvebiLfsy; Tue, 10 Sep 2019 19:39:09 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.25.245.49])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 2DA541A60112;
 Tue, 10 Sep 2019 19:39:09 +0300 (EEST)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, minios-devel@lists.xen.org
References: <20190909095802.23905-1-costin.lupu@cs.pub.ro>
 <d1f2702d-7a9a-39b2-3faa-5804064b4e99@neclab.eu>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <fc22a60e-78be-cd0a-6343-861e09051a62@cs.pub.ro>
Date: Tue, 10 Sep 2019 19:39:09 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <d1f2702d-7a9a-39b2-3faa-5804064b4e99@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 0/4] Changes for supporting
 Python 2
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xMC8xOSA1OjIwIFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IEhlbGxvIENvc3Rp
biwKPiAKPiBUaGFuayB5b3UgZm9yIHRoZSBwYXRjaCBzZXJpZXMuIFRoZSBwYXRjaCBuby4gMyBu
ZWVkcyBzb21lIHJld29yay4gSQo+IHdvdWxkIHN1Z2dlc3QgdGFraW5nIGluIHRoZSByZXN0IG9m
IHRoZSBwYXRjaCBzZXJpZXMgYXMgdGhleSBpbmRlcGVuZGVudAo+IG9mIG9uZSBhbm90aGVyLgo+
IAo+IFdoYXQgZG8geW91IHRoaW5rPwoKSSB0b3RhbGx5IGFncmVlLiBUaGFua3MgZm9yIHRoZSBy
ZXZpZXdzLCBTaGFyYW4hCgpDaGVlcnMsCkNvc3RpbgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 11:27:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 11:27:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i80mI-0005kz-CD; Wed, 11 Sep 2019 11:27:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i80mH-0005kt-DF
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 11:27:13 +0000
X-Inumbo-ID: 1828ab40-d487-11e9-ac28-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 1828ab40-d487-11e9-ac28-12813bfff9fa;
 Wed, 11 Sep 2019 11:27:10 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 69E254012D;
 Wed, 11 Sep 2019 13:27:09 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 13:27:02 +0200
Message-Id: <20190911112707.25585-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 0/5] Initial port of the
 libuuid library (version 1.0.3)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

ClRoaXMgcGF0Y2hlcyBpbnRyb2R1Y2Ugc3VwcG9ydCBmb3IgbGlidXVpZCB0byBVbmlrcmFmdC4K
Q2hhbmdlcyBmcm9tIHYzOgoqKSBDaGFuZ2UgY29tbWl0IGhpc3RvcnkgdG8gZm9sbG93IFVuaWty
YWZ0IHRlbXBsYXRlCiopIEFkZCBtYWtlIHJ1bGUgdG8gZW5zdXJlIHByZXBhcmUgc3RlcHMgcnVu
IGJlZm9yZSBtYWtlCgpDaGFuZ2VzIGZyb20gdjI6CiopIFVwZGF0ZSBDb25maWcudWsgdG8gdXNl
IGRlcGVuZHMgb24gZm9yIEhBVkVfTElCQwoqKSBGaXhlcyB0byBjb21waWxlLWd1YXJkZWQgbHdp
cC1yZWxhdGVkIG9wdGlvbnMgaW4gY29uZmlnLmgKKikgRml4ZXMgdG8gTWFrZWZpbGUudWsgdG8g
b25seSBleHBvcnQgdXVpZC5oIHRvd2FyZHMgdGhlIHJlc3Qgb2YgdGhlIGJ1aWxkCiopIFNvbWUg
b3RoZXIgbWlub3IgZml4ZXMgdG8gTWFrZWZpbGUudWsKCkNoYW5nZXMgZnJvbSB2MToKKikgVXBk
YXRlIENvbmZpZy51ayB0byBzZWxlY3QgVUtVTklTVEQKKikgTWlub3IgZml4ZXMgdG8gTWFrZWZp
bGUudWsKKikgRW5hYmxlICNpbmNsdWRlIDx1dWlkL3V1aWQuaD4KKikgQ29tcGlsZS1ndWFyZCBs
d2lwLXJlbGF0ZWQgb3B0cyBpbiBjb25maWcuaAoqKSBSZW1vdmUgdW5uZWNlc3NhcnkgY29uZmln
IG9wdHMgZnJvbSBjb25maWcuaAoKRmVsaXBlIEh1aWNpICg1KToKICBJbnRyb2R1Y2UgbGlicmFy
eSBza2VsZXRvbgogIEFkZCBNYWtlZmlsZS51awogIEFkZCBpbmNsdWRlIGRpcmVjdG9yeQogIEFk
ZCBwYXRjaGVzIGRpcmVjdG9yeQogIEV4cG9ydCBzeW1ib2xzCgogQ09ESU5HX1NUWUxFLm1kICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNCArCiBDT05UUklCVVRJTkcubWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsKIENPUFlJTkcubWQgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzkgKysrKysrKysKIENvbmZpZy51ayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogTUFJTlRBSU5FUlMubWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArKwogTWFrZWZpbGUudWsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyOSArKysrKysrKysrKysrKysrKysr
KysrKysrCiBSRUFETUUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICA1ICsKIGV4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
MTcgKysrKwogaW5jbHVkZS9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICA3NyArKysrKysrKysrKysrKysKIHBhdGNoZXMvMDAwMS1hZGQtc3lzY2FsbC1oLWNvbXBpbGUt
Z3VhcmQucGF0Y2ggfCAgMTIgKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCAzMDIgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0
IENPTlRSSUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1F
Lm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awogY3JlYXRlIG1vZGUgMTAwNjQ0
IGluY2x1ZGUvY29uZmlnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDEtYWRkLXN5
c2NhbGwtaC1jb21waWxlLWd1YXJkLnBhdGNoCgotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 11:27:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 11:27:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i80mL-0005lV-E5; Wed, 11 Sep 2019 11:27:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i80mJ-0005lI-Qb
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 11:27:15 +0000
X-Inumbo-ID: 19ded89c-d487-11e9-b299-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 19ded89c-d487-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 11:27:13 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id ECEE8414FF;
 Wed, 11 Sep 2019 13:27:12 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 13:27:03 +0200
Message-Id: <20190911112707.25585-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911112707.25585-1-felipe.huici@neclab.eu>
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 1/5] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4K
LS0tCiBDT0RJTkdfU1RZTEUubWQgfCAgNCArKysrCiBDT05UUklCVVRJTkcubWQgfCAgNCArKysr
CiBDT1BZSU5HLm1kICAgICAgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysKIENvbmZpZy51ayAgICAgICB8ICA1ICsrKysrCiBNQUlOVEFJTkVSUy5tZCAgfCAxMCAr
KysrKysrKysrCiBSRUFETUUubWQgICAgICAgfCAgNSArKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA2
NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVh
dGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlO
Ry5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IE1B
SU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCgpkaWZmIC0tZ2l0IGEv
Q09ESU5HX1NUWUxFLm1kIGIvQ09ESU5HX1NUWUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU3MzAwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQK
QEAgLTAsMCArMSw0IEBACitDb2RpbmcgU3R5bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVm
ZXIgdG8gdGhlIGBDT0RJTkdfU1RZTEUubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVw
b3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjU1ZWNhCi0tLSAvZGV2L251bGwK
KysrIGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsNCBAQAorQ29udHJpYnV0aW5nIHRvIFVu
aWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBD
T05UUklCVVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlm
ZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjYxZTE0OTcKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0w
LDAgKzEsMzkgQEAKK0xpY2Vuc2UKKz09PT09PT0KKworVW5pa3JhZnQgbGlidXVpZCB3cmFwcGVy
cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3
cmFwcGVyIGNvZGUgdG8gYnVpbGQgbGlidXVpZCB3aXRoIFVuaWtyYWZ0LgorRWFjaCBDIGNvZGUg
ZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRoZQorY29weXJp
Z2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGUgY29kZSBp
cworbGljZW5zZWQuIElmIHN1Y2ggYSBsaWNlbmNlIG5vdGUgaXMgbWlzc2luZywgdGhlIGZvbGxv
d2luZyBjb3B5cmlnaHQKK25vdGljZSB3aWxsIGFwcGx5OgorCisJQ29weXJpZ2h0IChjKSAyMDE5
LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworCWFyZSBtZXQ6CisKKwkxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCTMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKwlBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisJTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisJSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKwlD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisJUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjc2MGVjCi0tLSAvZGV2L251bGwKKysrIGIvQ29uZmln
LnVrCkBAIC0wLDAgKzEsNSBAQAorY29uZmlnIExJQlVVSUQKKwkgICBib29sICJsaWJ1dWlkIC0g
bGlicmFyeSBmb3IgdW5pcXVlIGlkIGdlbmVyYXRpb24iCisJICAgZGVmYXVsdCBuCisgICAgICAg
ICAgIGRlcGVuZHMgb24gSEFWRV9MSUJDCisgICAgICAgICAgIHNlbGVjdCBVS1VOSVNURApkaWZm
IC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJTkVSUy5tZApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41YTRhYmM0Ci0tLSAvZGV2L251bGwKKysrIGIvTUFJTlRBSU5F
UlMubWQKQEAgLTAsMCArMSwxMCBAQAorTWFpbnRhaW5lcnMgTGlzdAorPT09PT09PT09PT09PT09
PQorCitGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJl
ZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4KK3RoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnku
CisKKwlMSUJVVUlELVVOSUtSQUZUCisJTToJRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVj
bGFiLmV1PgorCUw6CW1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnCisJRjogKgpkaWZmIC0tZ2l0
IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmFhMDBjM2UKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw1IEBA
CitsaWJ1dWlkIGZvciBVbmlrcmFmdAorPT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgcmVm
ZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhl
IGBkb2MvYAorc3ViZGlyZWN0b3J5IG9mIHRoZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuCi0t
IAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 11:27:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 11:27:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i80mN-0005m9-Fq; Wed, 11 Sep 2019 11:27:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i80mM-0005lq-8u
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 11:27:18 +0000
X-Inumbo-ID: 19fa7f7b-d487-11e9-ac28-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 19fa7f7b-d487-11e9-ac28-12813bfff9fa;
 Wed, 11 Sep 2019 11:27:14 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id D198D4012D;
 Wed, 11 Sep 2019 13:27:13 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 13:27:04 +0200
Message-Id: <20190911112707.25585-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911112707.25585-1-felipe.huici@neclab.eu>
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 2/5] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHByZXBhcmUgc3RlcHMgdG8gY3JlYXRlIHN5bSBsaW5rcyB0byBwdWJsaWMgYW5kIHBy
aXZhdGUKaGVhZGVycy4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4KLS0tCiBNYWtlZmlsZS51ayB8IDEyOSArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAx
MjkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCgpkaWZmIC0t
Z2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wYmY1M2Y4Ci0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUudWsKQEAgLTAs
MCArMSwxMjkgQEAKKyMgIGxpYnV1aWQgTWFrZWZpbGUudWMKKyMKKyMgIEF1dGhvcnM6IEZlbGlw
ZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKyMKKyMKKyMgIENvcHlyaWdodCAoYykg
MjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMKKyMgIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBo
b2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjICAgICB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIwor
IyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisjCisjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBB
TlkgV0FZLgorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IHJlZ2lzdHJh
dGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGli
dXVpZCwkKENPTkZJR19MSUJVVUlEKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNv
dXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJVVUlEX1ZFUlNJT049MS4wLjMKK0xJ
QlVVSURfVVJMPWh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2xpYnV1aWQvZmlsZXMv
bGlidXVpZC0kKExJQlVVSURfVkVSU0lPTikudGFyLmd6L2Rvd25sb2FkCitMSUJVVUlEX1BBVENI
RElSPSQoTElCVVVJRF9CQVNFKS9wYXRjaGVzCiskKGV2YWwgJChjYWxsIGZldGNoYXMsbGlidXVp
ZCwkKExJQlVVSURfVVJMKSwkKExJQlVVSURfVkVSU0lPTikudGd6KSkKKyQoZXZhbCAkKGNhbGwg
cGF0Y2gsbGlidXVpZCwkKExJQlVVSURfUEFUQ0hESVIpLGxpYnV1aWQtJChMSUJVVUlEX1ZFUlNJ
T04pKSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSGVscGVycworIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKK0xJQlVVSURfU1VCRElSPWxpYnV1aWQtJChMSUJVVUlEX1ZFUlNJT04pCitM
SUJVVUlEX1NSQz0kKExJQlVVSURfT1JJR0lOKS8kKExJQlVVSURfU1VCRElSKQorCisjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IGluY2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIworIyBQdXQgcHVibGljIGhlYWRlcnMgKHV1aWQuaCkgaW4gYSBwdWJsaWMgZm9sZGVyIGFu
ZCBleHBvcnQgdGhlbSBnbG9iYWxseS4gVGhlCisjIHByZXBhcmUgc3RlcCBiZWxvdyB0YWtlcyBj
YXJlIG9mIHBvcHVsYXRpbmcgdGhlIGZvbGRlci4KKyQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGxp
YnV1aWQvaW5jbHVkZS9wdWJsaWMpCitDSU5DTFVERVMtJChDT05GSUdfTElCVVVJRCkgKz0gLUkk
KExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHVibGljCisKKyMgUHV0IHByaXZhdGUgaGVhZGVycyAo
dGhlIGdsdWUncyBjb25maWcuaCwgYW5kIHV1aWQncyBub24tdXVpZC5oIGhlYWRlcnMpCisjIGlu
IGEgcHJpdmF0ZSBmb2xkZXIgYW5kIGV4cG9ydCB0aGF0IG9ubHkgbG9jYWxseSB0byBsaWJ1dWlk
LiBUaGUgcHJlcGFyZQorIyBzdGVwIGJlbG93IHRha2VzIGNhcmUgb2YgcG9wdWxhdGluZyB0aGUg
Zm9sZGVyCiskKGNhbGwgbWtfc3ViX2J1aWxkX2RpcixsaWJ1dWlkL2luY2x1ZGUvcHJpdmF0ZSkK
K0xJQlVVSURfQ0lOQ0xVREVTLXkgKz0gLUkkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHJpdmF0
ZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHbG9iYWwgZmxhZ3MKKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCitMSUJVVUlEX0NGTEFHUy15ICs9IC1ESEFWRV9DT05GSUdfSAorCisjIFN1
cHByZXNzIHNvbWUgd2FybmluZ3MgdG8gbWFrZSB0aGUgYnVpbGQgcHJvY2VzcyBsb29rIG5lYXRl
cgorTElCVVVJRF9TVVBQUkVTU19GTEFHUyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby11
bnVzZWQtdmFyaWFibGUgICAgICAgICAgICBcCistV25vLW5vbm51bGwgLVduby11bnVzZWQtYnV0
LXNldC12YXJpYWJsZSAtV25vLXVudXNlZC1sYWJlbCAtV25vLWNoYXItc3Vic2NyaXB0c1wKKy1X
bm8tdW51c2VkLWZ1bmN0aW9uIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgLVduby11
bmluaXRpYWxpemVkICAgICAgICAgXAorLVduby1tYXliZS11bmluaXRpYWxpemVkIC1Xbm8tcG9p
bnRlci1zaWduIC1Xbm8tdW51c2VkLXZhbHVlICAgICAgICAgICAgICAgICAgICBcCistV25vLXVu
dXNlZC1tYWNyb3MgLVduby1wYXJlbnRoZXNlcyAtV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xh
cmF0aW9uICAgICAgICAgIFwKKy1Xbm8tbWlzc2luZy1icmFjZXMgLVduby1lbmRpZi1sYWJlbHMg
LVduby11bnVzZWQtYnV0LXNldC12YXJpYWJsZSAgICAgICAgICAgICAgXAorLVduby1pbXBsaWNp
dC1mdW5jdGlvbi1kZWNsYXJhdGlvbgorCitMSUJVVUlEX0NGTEFHUy15ICAgKz0gJChMSUJVVUlE
X1NVUFBSRVNTX0ZMQUdTKQorTElCVVVJRF9DWFhGTEFHUy15ICs9ICQoTElCVVVJRF9TVVBQUkVT
U19GTEFHUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgU291cmNlcworIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL2NsZWFyLmMK
K0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL2NvcHkuYworTElCVVVJRF9TUkNTLXkg
Kz0gJChMSUJVVUlEX1NSQykvaXNudWxsLmMKK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9T
UkMpL3BhcnNlLmMKK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL3VucGFyc2UuYwor
TElCVVVJRF9TUkNTLXkgKz0gJChMSUJVVUlEX1NSQykvY29tcGFyZS5jCitMSUJVVUlEX1NSQ1Mt
eSArPSAkKExJQlVVSURfU1JDKS9nZW5fdXVpZC5jCitMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVV
SURfU1JDKS9wYWNrLmMKK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL3JhbmR1dGls
cy5jCitMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS91bnBhY2suYworTElCVVVJRF9T
UkNTLXkgKz0gJChMSUJVVUlEX1NSQykvdXVpZF90aW1lLmMKKworIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKyMgTGliLXNwZWNpZmljIFRhcmdldHMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisk
KExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHVibGljLyUuaDogJChMSUJVVUlEX1NSQykvJS5oCisJ
JChjYWxsIGJ1aWxkX2NtZCxMTixsaWJ1dWlkLCRALFwKKwlsbiAtc2YgJDwgJEApCisKKyQoTElC
VVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlLyUuaDogJChMSUJVVUlEX1NSQykvJS5oCisJJChj
YWxsIGJ1aWxkX2NtZCxMTixsaWJ1dWlkLCRALFwKKwlsbiAtc2YgJDwgJEApCisKKyQoTElCVVVJ
RF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlL2NvbmZpZy5oOiAkKExJQlVVSURfQkFTRSkvaW5jbHVk
ZS9jb25maWcuaAorCSQoY2FsbCBidWlsZF9jbWQsTE4sbGlidXVpZCwkQCxcCisJbG4gLXNmICQ8
ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlL2NvbmZpZy5oKQorCiskKExJQlVVSURf
U1JDKS8lLmg6ICQoTElCVVVJRF9CVUlMRCkvLm9yaWdpbgorCUA6IGVtcHR5IHJlY2lwZSB0byBl
bmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBleHRyYWN0aW9uCisKKyMgcHVibGljIGhlYWRl
cnMKK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3B1YmxpYy91dWlkLmgK
KworIyBwcml2YXRlIGhlYWRlcnMKK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNs
dWRlL3ByaXZhdGUvYWxsLWlvLmgKK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNs
dWRlL3ByaXZhdGUvYy5oCitVS19QUkVQQVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9w
cml2YXRlL3JhbmR1dGlscy5oCitVS19QUkVQQVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVk
ZS9wcml2YXRlL3V1aWRkLmgKK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRl
L3ByaXZhdGUvdXVpZFAuaAorVUtfUFJFUEFSRSArPSAkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUv
cHJpdmF0ZS9jb25maWcuaAotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 11:27:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 11:27:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i80mP-0005my-Ia; Wed, 11 Sep 2019 11:27:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i80mO-0005mg-NB
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 11:27:20 +0000
X-Inumbo-ID: 1adfeed4-d487-11e9-b76c-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 1adfeed4-d487-11e9-b76c-bc764e2007e4;
 Wed, 11 Sep 2019 11:27:14 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 9633B41FBA;
 Wed, 11 Sep 2019 13:27:14 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 13:27:05 +0200
Message-Id: <20190911112707.25585-4-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911112707.25585-1-felipe.huici@neclab.eu>
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 3/5] Add include directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIFVuaWtyYWZ0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gaGVhZGVyCgpTaWduZWQtb2ZmLWJ5
OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Ci0tLQogaW5jbHVkZS9jb25m
aWcuaCB8IDc3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IGluY2x1ZGUvY29uZmlnLmgKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy5oIGIv
aW5jbHVkZS9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTg0
MGFkCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jb25maWcuaApAQCAtMCwwICsxLDc3IEBA
CisvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGxpYnV1aWQncyBj
b25maWd1cmUuICAqLworLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUu
YWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfRkNOVExfSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRydW5jYXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9GVFJVTkNBVEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdl
dHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTElNSVRTX0gg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmls
ZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgbWVtc2V0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NRU1TRVQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUu
ICovCisjaWZkZWYgJChIQVZFX05XX1NUQUNLKQorI2RlZmluZSBIQVZFX05FVElORVRfSU5fSCAx
CisjZW5kaWYKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzb2NrZXQnIGZ1bmN0
aW9uLiAqLworI2lmZGVmICQoSEFWRV9OV19TVEFDSykKKyNkZWZpbmUgSEFWRV9TT0NLRVQgMQor
I2VuZGlmCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3JhbmRvbScgZnVuY3Rp
b24uICovCisjZGVmaW5lIEhBVkVfU1JBTkRPTSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5H
U19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVy
IGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgYHN0cnRvdWwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NUUlRPVUwg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19GSUxFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHN5cy9pb2N0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9T
WVNfSU9DVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NvY2tl
dC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNpZmRlZiAkKEhBVkVfTldfU1RBQ0spCisjZGVmaW5lIEhB
VkVfU1lTX1NPQ0tFVF9IIDEKKyNlbmRpZgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TVEFUX0gg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9T
WVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGB1c2xlZXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VT
TEVFUCAxCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 11:27:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 11:27:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i80mS-0005np-K6; Wed, 11 Sep 2019 11:27:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i80mR-0005nU-9b
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 11:27:23 +0000
X-Inumbo-ID: 1b45b854-d487-11e9-ac28-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 1b45b854-d487-11e9-ac28-12813bfff9fa;
 Wed, 11 Sep 2019 11:27:15 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 545904012D;
 Wed, 11 Sep 2019 13:27:15 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 13:27:06 +0200
Message-Id: <20190911112707.25585-5-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911112707.25585-1-felipe.huici@neclab.eu>
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 4/5] Add patches directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGF0Y2ggdG8gY29tcGlsZSBndWFyZCBpbmNsdXNpb24gb2Ygc3lzY2FsbC5oCgpTaWduZWQtb2Zm
LWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Ci0tLQogcGF0Y2hlcy8w
MDAxLWFkZC1zeXNjYWxsLWgtY29tcGlsZS1ndWFyZC5wYXRjaCB8IDEyICsrKysrKysrKysrKwog
MSBmaWxlIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRj
aGVzLzAwMDEtYWRkLXN5c2NhbGwtaC1jb21waWxlLWd1YXJkLnBhdGNoCgpkaWZmIC0tZ2l0IGEv
cGF0Y2hlcy8wMDAxLWFkZC1zeXNjYWxsLWgtY29tcGlsZS1ndWFyZC5wYXRjaCBiL3BhdGNoZXMv
MDAwMS1hZGQtc3lzY2FsbC1oLWNvbXBpbGUtZ3VhcmQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYWRlYTY2YQotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAw
MS1hZGQtc3lzY2FsbC1oLWNvbXBpbGUtZ3VhcmQucGF0Y2gKQEAgLTAsMCArMSwxMiBAQAorLS0t
IGEvcmFuZHV0aWxzLmMJMjAxOS0wNC0wMyAxNDo0NjoxNC44Mjc2ODI0ODUgKzAyMDAKKysrKyBi
L3JhbmR1dGlscy5jCTIwMTktMDQtMDMgMTQ6NDY6NDguMzc1Mjg2OTUwICswMjAwCitAQCAtMTMs
NyArMTMsOSBAQAorICNpbmNsdWRlIDxzdHJpbmcuaD4KKyAjaW5jbHVkZSA8c3lzL3RpbWUuaD4K
KyAKKysjaWZkZWYgRE9fSlJBTkRfTUlYCisgI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisrI2Vu
ZGlmCisgCisgI2luY2x1ZGUgInJhbmR1dGlscy5oIgorIAotLSAKMi4xMS4wCgoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 11:27:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 11:27:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i80mU-0005oV-Lj; Wed, 11 Sep 2019 11:27:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i80mT-0005oG-Mj
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 11:27:25 +0000
X-Inumbo-ID: 1bb9698e-d487-11e9-b76c-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 1bb9698e-d487-11e9-b76c-bc764e2007e4;
 Wed, 11 Sep 2019 11:27:16 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 1EC51414FF;
 Wed, 11 Sep 2019 13:27:16 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 13:27:07 +0200
Message-Id: <20190911112707.25585-6-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911112707.25585-1-felipe.huici@neclab.eu>
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 5/5] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QXMgZGVmaW5lZCBpbiB1dWlkLmgKClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBl
Lmh1aWNpQG5lY2xhYi5ldT4KLS0tCiBleHBvcnRzeW1zLnVrIHwgMTcgKysrKysrKysrKysrKysr
KysKIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg
ZXhwb3J0c3ltcy51awoKZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVr
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjIyNzEKLS0tIC9kZXYvbnVs
bAorKysgYi9leHBvcnRzeW1zLnVrCkBAIC0wLDAgKzEsMTcgQEAKK3V1aWRfY2xlYXIKK3V1aWRf
Y29tcGFyZQordXVpZF9jb3B5Cit1dWlkX2dlbmVyYXRlCit1dWlkX2dlbmVyYXRlX3JhbmRvbQor
dXVpZF9nZW5lcmF0ZV90aW1lCit1dWlkX2dlbmVyYXRlX3RpbWVfc2FmZQordXVpZF9pc19udWxs
Cit1dWlkX3BhY2sKK3V1aWRfcGFyc2UKK3V1aWRfdGltZQordXVpZF90eXBlCit1dWlkX3VucGFj
awordXVpZF91bnBhcnNlCit1dWlkX3VucGFyc2VfbG93ZXIKK3V1aWRfdW5wYXJzZV91cHBlcgor
dXVpZF92YXJpYW50Ci0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 11:57:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 11:57:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i81Fk-0000Tq-DU; Wed, 11 Sep 2019 11:57:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SpO5=XG=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i81Fj-0000Tk-Bk
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 11:57:39 +0000
X-Inumbo-ID: 58d162dc-d48b-11e9-ac29-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 58d162dc-d48b-11e9-ac29-12813bfff9fa;
 Wed, 11 Sep 2019 11:57:37 +0000 (UTC)
IronPort-SDR: H0HhQhXwsTORAkmjfpQgD/iPnMpetwJVqeB1VJyDOFE+1m0xR1Syi0cF+V/Gyaj2XUQENr9KaX
 6MDGrTK4mT9A==
IronPort-PHdr: =?us-ascii?q?9a23=3A2d8TgxL9/OT4IpUUxdmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgeL//xwZ3uMQTl6Ol3ixeRBMOHsqkC07Gd6vCoGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF+Jqs/xR?=
 =?us-ascii?q?fFv3hFcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWG?=
 =?us-ascii?q?hPUdtLVyFZAo2ycZYBAeQCM+hftITxu0cCoAGiCQS2GO/j1jlFjWL2060g1O?=
 =?us-ascii?q?QhFBnL0RInH9IVrHTUrdP1P7oUX+Co1KnI0CjIYvRK1jf684jIbhEhofeWUb?=
 =?us-ascii?q?J0bMrR0VQvGhjZgVWLs4DlJy6V2f8Xv2iB6OptTOSigHMkpQFpujWj28ghhp?=
 =?us-ascii?q?TTio8Wyl3I7zt1zJg3KNGiRkN3ecOoHZRNuy2ANIZ7QtkuT39mtSs00LEKpJ?=
 =?us-ascii?q?G2cDYMxZ863RDQceaHfJKN4h/7UeaRJip3i2x9dbKkghay7VCgyurhVsmoyF?=
 =?us-ascii?q?pKrjRKkt3Ltn0VyRzT79KISvp5/ku7xTmPzBrf6vlZIU8vj6bbMZkhzqYxlp?=
 =?us-ascii?q?oVr0vDAjf7lFj5gaOLbEkp+eil5/75brn4pJKQLYF5hhn7Mqs0m8y/Beo4Mh?=
 =?us-ascii?q?IJX2ie4emzyLrj/VblQLVLiP06iK3ZsI3CJcQGvaO2HxRV3pw76xaiFDiqys?=
 =?us-ascii?q?4YnX4fIFJfZB2Hl5TpO03JIP3gCPe/glKskDZsx/DdJ7HuH4vCLmbdn7flZr?=
 =?us-ascii?q?t9709cyBEvzdBE/Z5VBa8OIPTpVk/2rtzYAQczMxaozOb/FNV9yoQeVHqUAq?=
 =?us-ascii?q?+ZKqzSq0WH5uQ1L+mXfoAVvir9K/g/6P7ol3A5nEQQfa+30pQLbHC3BO9pL1?=
 =?us-ascii?q?+Hbnrx0Z89FjIPvww/S/evhFCcXDp7Y3epQ7l69jw9ToW8AtTtXIeo1ZeGxz?=
 =?us-ascii?q?u6GNVye3hbQgSHFmz0doPCX+oUdQqZOYl5jzZCT7/3GNxp7g2nqAKvk+kvFe?=
 =?us-ascii?q?HT4CBN7Z8=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DkAwDX33hdRwPjVY1lHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4NYIBIqjR2jPgkBAQE6AQIBAYQ/gno4EwIDCQEBBQEBAQEBBgQBBgE?=
 =?us-ascii?q?BM4VrgjoigxxST1UtgyKCD6pjM4VLgyyBSYE0hx+GMT+EYYURhRYElh+WKAe?=
 =?us-ascii?q?CJGQElAMnmQkBLYQApBk4IIFZMxqDX4IXATYXjiU9AQExgQYBAY8gAQE?=
X-IPAS-Result: =?us-ascii?q?A2DkAwDX33hdRwPjVY1lHAEBAQQBAQcEAQGBZ4NYIBIqj?=
 =?us-ascii?q?R2jPgkBAQE6AQIBAYQ/gno4EwIDCQEBBQEBAQEBBgQBBgEBM4VrgjoigxxST?=
 =?us-ascii?q?1UtgyKCD6pjM4VLgyyBSYE0hx+GMT+EYYURhRYElh+WKAeCJGQElAMnmQkBL?=
 =?us-ascii?q?YQApBk4IIFZMxqDX4IXATYXjiU9AQExgQYBAY8gAQE?=
X-IronPort-AV: E=Sophos;i="5.64,493,1559509200"; 
   d="scan'208";a="4740533"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 11 Sep 2019 14:57:35 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 90E081A6006F;
 Wed, 11 Sep 2019 14:57:35 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id hcIuePAjBqs1; Wed, 11 Sep 2019 14:57:35 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 77EC11A60126;
 Wed, 11 Sep 2019 14:57:35 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id zpUuOku5Rcjb; Wed, 11 Sep 2019 14:57:35 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 5B93B1A6006F;
 Wed, 11 Sep 2019 14:57:35 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 14:56:08 +0300
Message-Id: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29tbWl0IDNkY2NjZDA0IGludHJvZHVjZWQgaGFuZGxpbmcgb2YgRklPQ0xFWCBhbmQgRklPTkNM
RVggcmVxdWVzdHMuIEhvd2V2ZXIsCnRoZXNlIGZsYWdzIGFyZSBub3QgZGVmaW5lZCBpbiBub2xp
YmMuCgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgot
LS0KIGxpYi9ub2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaCB8IDAKIGxpYi92ZnNjb3JlL3N5c2Nh
bGxzLmMgICAgICAgICB8IDQgKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbm9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmgKCmRpZmYg
LS1naXQgYS9saWIvbm9saWJjL2luY2x1ZGUvc3lzL2lvY3RsLmggYi9saWIvbm9saWJjL2luY2x1
ZGUvc3lzL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmU2OWRl
MjliCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9zeXNjYWxscy5jIGIvbGliL3Zmc2NvcmUvc3lz
Y2FsbHMuYwppbmRleCBkMzc1Nzc0YS4uZTg1YzRlYjUgMTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3Jl
L3N5c2NhbGxzLmMKKysrIGIvbGliL3Zmc2NvcmUvc3lzY2FsbHMuYwpAQCAtMzkwLDEyICszOTAs
MTYgQEAgc3lzX2lvY3RsKHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZwLCB1bnNpZ25lZCBsb25nIHJl
cXVlc3QsIHZvaWQgKmJ1ZikKIAkJcmV0dXJuIEVCQURGOwogCiAJc3dpdGNoIChyZXF1ZXN0KSB7
CisjaWZkZWYgRklPQ0xFWAogCWNhc2UgRklPQ0xFWDoKIAkJZnAtPmZfZmxhZ3MgfD0gT19DTE9F
WEVDOwogCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIEZJT05DTEVYCiAJY2FzZSBGSU9OQ0xFWDoK
IAkJZnAtPmZfZmxhZ3MgJj0gfk9fQ0xPRVhFQzsKIAkJYnJlYWs7CisjZW5kaWYKIAlkZWZhdWx0
OgogCQllcnJvciA9IHZmc19pb2N0bChmcCwgcmVxdWVzdCwgYnVmKTsKIAkJYnJlYWs7Ci0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 12:01:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 12:01:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i81JA-0001J5-GS; Wed, 11 Sep 2019 12:01:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i81J9-0001Iu-9e
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 12:01:11 +0000
X-Inumbo-ID: d77ffd78-d48b-11e9-a337-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id d77ffd78-d48b-11e9-a337-bc764e2007e4;
 Wed, 11 Sep 2019 12:01:09 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id D74C04012D;
 Wed, 11 Sep 2019 14:01:08 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 14:01:03 +0200
Message-Id: <20190911120107.11757-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 0/4] Support for the Lua
 language
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW50aWFsIHBvcnQgb2YgdGhlIGx1YSBsYW5ndWFnZSB0byBVbmlrcmFmdC4g
Rm9yIG5vdyBpdCBzdXBwb3J0cwppbnRlcmFjdGl2ZSBtb2RlLCBydW5uaW5nIGEgc3RyaW5nIChp
LmUuLCBhIHNjcmlwdCkgIGFuZCBydW5uaW5nIGEgc2NyaXB0CmZyb20gYSBmaWxlIHByb3ZpZGVk
IHZpYSBpbml0cmQuCgpDaGFuZ2VzIGZyb20gdjE6CiopIERlcGVuZCBvbiBuZXdsaWIKKikgRml4
IGNvbW1pdCBoaXN0b3J5CiopIEV4cG9ydCBhZGRpdGlvbmFsIHN5bWJvbHMgCgoqKiogQkxVUkIg
SEVSRSAqKioKCkZlbGlwZSBIdWljaSAoNCk6CiAgSW50cm9kdWNlIGxpYnJhcnkgc2tlbGV0b24K
ICBBZGQgTWFrZWZpbGUudWsKICBBZGQgcGF0Y2hlcyBkaXJlY3RvcnkKICBFeHBvcnQgc3ltYm9s
cwoKIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAy
NyArKwogQ09ESU5HX1NUWUxFLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICA0ICsKIENPTlRSSUJVVElORy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgNCArCiBDT1BZSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMzkgKysrCiBDb25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDQgKwogTUFJTlRBSU5FUlMubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDExICsKIE1ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IDEwMiArKysrKysrCiBSRUFETUUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDkgKwogZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgMzM4ICsrKysrKysrKysrKysrKysrKysrKysrCiBwYXRjaGVzLzAwMDEt
YWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2ggfCAgNDIgKysrCiAxMCBmaWxlcyBj
aGFuZ2VkLCA1ODAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBD
T05UUklCVVRJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5t
ZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBw
YXRjaGVzLzAwMDEtYWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2gKCi0tIAoyLjEx
LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 12:01:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 12:01:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i81JE-0001Jo-IN; Wed, 11 Sep 2019 12:01:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i81JD-0001JY-Ea
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 12:01:15 +0000
X-Inumbo-ID: d88b5461-d48b-11e9-ac29-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id d88b5461-d48b-11e9-ac29-12813bfff9fa;
 Wed, 11 Sep 2019 12:01:12 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 572514012D;
 Wed, 11 Sep 2019 14:01:12 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 14:01:06 +0200
Message-Id: <20190911120107.11757-4-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911120107.11757-1-felipe.huici@neclab.eu>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGF0Y2ggdG8gcmVuYW1lIG1haW4gZnVuY3Rpb24gYW5kIHRvIGFkZCBpbml0cmQgc3VwcG9ydCB0
byBtYWluIGxvb3AuCgpTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBu
ZWNsYWIuZXU+Ci0tLQogcGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5LXBvaW50
LnBhdGNoIHwgNDIgKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDIg
aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMS1hZGQtaW5pdHJk
LXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaAoKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1hZGQt
aW5pdHJkLXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaCBiL3BhdGNoZXMvMDAwMS1hZGQtaW5pdHJk
LXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4xMzVhMGM0Ci0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQt
cmVuYW1lLWVudHJ5LXBvaW50LnBhdGNoCkBAIC0wLDAgKzEsNDIgQEAKKy0tLSBhL3NyYy9sdWEu
YwkyMDE3LTA0LTE5IDE5OjI5OjU3LjAwMDAwMDAwMCArMDIwMAorKysrIGIvc3JjL2x1YS5jCTIw
MTktMDktMDMgMTM6MzY6MDkuNDM3ODA3ODkwICswMjAwCitAQCAtNiw2ICs2LDggQEAKKyAKKyAj
ZGVmaW5lIGx1YV9jCisgCisrI2luY2x1ZGUgPHVrL3BsYXQvbWVtb3J5Lmg+CisrCisgI2luY2x1
ZGUgImxwcmVmaXguaCIKKyAKKyAKK0BAIC01NTUsNiArNTU3LDkgQEAKKyAgIGludCBhcmdjID0g
KGludClsdWFfdG9pbnRlZ2VyKEwsIDEpOworICAgY2hhciAqKmFyZ3YgPSAoY2hhciAqKilsdWFf
dG91c2VyZGF0YShMLCAyKTsKKyAgIGludCBzY3JpcHQ7CisrICBzdHJ1Y3QgdWtwbGF0X21lbXJl
Z2lvbl9kZXNjIGltZzsKKysgIGNoYXIgKmNzdHI7CisrICAKKyAgIGludCBhcmdzID0gY29sbGVj
dGFyZ3MoYXJndiwgJnNjcmlwdCk7CisgICBsdWFMX2NoZWNrdmVyc2lvbihMKTsgIC8qIGNoZWNr
IHRoYXQgaW50ZXJwcmV0ZXIgaGFzIGNvcnJlY3QgdmVyc2lvbiAqLworICAgaWYgKGFyZ3ZbMF0g
JiYgYXJndlswXVswXSkgcHJvZ25hbWUgPSBhcmd2WzBdOworQEAgLTU4MSw2ICs1ODYsMTEgQEAK
KyAgICAgcmV0dXJuIDA7CisgICBpZiAoYXJncyAmIGhhc19pKSAgLyogLWkgb3B0aW9uPyAqLwor
ICAgICBkb1JFUEwoTCk7ICAvKiBkbyByZWFkLWV2YWwtcHJpbnQgbG9vcCAqLworKyAgLyogc2Vl
IGlmIHNjcmlwdCBpcyBhdmFpbGFibGUgZnJvbSBpbml0cmQgKi8KKysgIGVsc2UgaWYgKHVrcGxh
dF9tZW1yZWdpb25fZmluZF9pbml0cmQwKCZpbWcpID49IDApIHsKKysgICAgY3N0ciA9IChjaGFy
ICopaW1nLmJhc2U7CisrICAgIGRvc3RyaW5nKEwsIGNzdHIsICJpbml0cmQiKTsKKysgIH0KKyAg
IGVsc2UgaWYgKHNjcmlwdCA9PSBhcmdjICYmICEoYXJncyAmIChoYXNfZSB8IGhhc192KSkpIHsg
IC8qIG5vIGFyZ3VtZW50cz8gKi8KKyAgICAgaWYgKGx1YV9zdGRpbl9pc190dHkoKSkgeyAgLyog
cnVubmluZyBpbiBpbnRlcmFjdGl2ZSBtb2RlPyAqLworICAgICAgIHByaW50X3ZlcnNpb24oKTsK
K0BAIC01OTMsNyArNjAzLDcgQEAKKyB9CisgCisgCistaW50IG1haW4gKGludCBhcmdjLCBjaGFy
ICoqYXJndikgeworK2ludCBsdWFfbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisgICBp
bnQgc3RhdHVzLCByZXN1bHQ7CisgICBsdWFfU3RhdGUgKkwgPSBsdWFMX25ld3N0YXRlKCk7ICAv
KiBjcmVhdGUgc3RhdGUgKi8KKyAgIGlmIChMID09IE5VTEwpIHsKLS0gCjIuMTEuMAoKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 12:01:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 12:01:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i81JF-0001KE-K1; Wed, 11 Sep 2019 12:01:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i81JE-0001Jg-5y
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 12:01:16 +0000
X-Inumbo-ID: d84854d0-d48b-11e9-b299-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id d84854d0-d48b-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 12:01:10 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 5B38241FBA;
 Wed, 11 Sep 2019 14:01:10 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 14:01:05 +0200
Message-Id: <20190911120107.11757-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911120107.11757-1-felipe.huici@neclab.eu>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 2/4] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGx1YSBwb3J0IE1ha2VmaWxlLnVrCgpTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZl
bGlwZS5odWljaUBuZWNsYWIuZXU+Ci0tLQogTWFrZWZpbGUudWsgfCAxMDIgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUg
Y2hhbmdlZCwgMTAyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51
awoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2MmZlYQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxl
LnVrCkBAIC0wLDAgKzEsMTAyIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5
IHJlZ2lzdHJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoZXZhbCAkKGNhbGwgYWRk
bGliX3MsbGlibHVhLCQoQ09ORklHX0xJQkxVQSkpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworIyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCTFVBX1ZFUlNJT049NS4z
LjUKK0xJQkxVQV9UQVJCQUxMPWx1YS0kKExJQkxVQV9WRVJTSU9OKQorTElCTFVBX1VSTD1odHRw
czovL3d3dy5sdWEub3JnL2Z0cC8kKExJQkxVQV9UQVJCQUxMKS50YXIuZ3oKK0xJQkxVQV9QQVRD
SERJUj0kKExJQkxVQV9CQVNFKS9wYXRjaGVzCisKKyQoZXZhbCAkKGNhbGwgZmV0Y2gsbGlibHVh
LCQoTElCTFVBX1VSTCkpKQorJChldmFsICQoY2FsbCBwYXRjaCxsaWJsdWEsJChMSUJMVUFfUEFU
Q0hESVIpLGx1YS0kKExJQkxVQV9WRVJTSU9OKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CisjIEhlbHBlcnMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJMVUFfU1JDU19CQVNFPSQo
TElCTFVBX09SSUdJTikvJChMSUJMVUFfVEFSQkFMTCkvc3JjCisKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIExpYnJhcnkgaW5jbHVkZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFB1
dCBwdWJsaWMgaGVhZGVycyBvZiB0aGUgbGlicmFyeSB0byBhIHB1YmxpYyBmb2xkZXIgYW5kIGV4
cG9ydCB0aGVtIGdsb2JhbGx5LgorIyBUaGUgcHJlcGFyZSBzdGVwIGJlbG93IHRha2VzIGNhcmUg
b2YgcG9wdWxhdGluZyB0aGUgZm9sZGVyLgorJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsbGlibHVh
L2luY2x1ZGUpCitDSU5DTFVERVMtJChDT05GSUdfTElCTFVBKSAgICs9IC1JJChMSUJMVUFfQlVJ
TEQpL2luY2x1ZGUKK0NQUElOQ0xVREVTLSQoQ09ORklHX0xJQkxVQSkgKz0gLUkkKExJQkxVQV9C
VUlMRCkvaW5jbHVkZQorCisjIFByaXZhdGUgaGVhZGVycworTElCTFVBX0NJTkNMVURFUy15ICs9
IC1JJChMSUJMVUFfU1JDU19CQVNFKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb21w
aWxhdGlvbiB1bml0CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCTFVBX0NGTEFHUy15ICs9
IC1ETFVBX0NPTVBBVF81XzIKKworIyBNYWluIGxvb3AKK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJM
VUFfU1JDU19CQVNFKS9sdWEuYworCisjIENPUkVfTworTElCTFVBX1NSQ1MteSArPSAkKExJQkxV
QV9TUkNTX0JBU0UpL2xhcGkuYworTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0Up
L2xjb2RlLmMKK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sY3R5cGUuYwor
TElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkZWJ1Zy5jCitMSUJMVUFfU1JD
Uy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGRvLmMKK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJM
VUFfU1JDU19CQVNFKS9sZHVtcC5jCitMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFT
RSkvbGZ1bmMuYworTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xnYy5jCitM
SUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGxleC5jCitMSUJMVUFfU1JDUy15
ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG1lbS5jCitMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVB
X1NSQ1NfQkFTRSkvbG9iamVjdC5jCitMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFT
RSkvbG9wY29kZXMuYworTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xwYXJz
ZXIuYworTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xzdGF0ZS5jCitMSUJM
VUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHN0cmluZy5jCitMSUJMVUFfU1JDUy15
ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRhYmxlLmMKK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJM
VUFfU1JDU19CQVNFKS9sdG0uYworTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0Up
L2x1bmR1bXAuYworTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2x2bS5jCitM
SUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHppby5jCisKKyMgTElCX08KK0xJ
QkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sYXV4bGliLmMKK0xJQkxVQV9TUkNT
LXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sYmFzZWxpYi5jCitMSUJMVUFfU1JDUy15ICs9ICQo
TElCTFVBX1NSQ1NfQkFTRSkvbGJpdGxpYi5jCitMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NS
Q1NfQkFTRSkvbGNvcm9saWIuYworTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0Up
L2xkYmxpYi5jCitMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGlvbGliLmMK
K0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sbWF0aGxpYi5jCitMSUJMVUFf
U1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG9zbGliLmMKK0xJQkxVQV9TUkNTLXkgKz0g
JChMSUJMVUFfU1JDU19CQVNFKS9sc3RybGliLmMKK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFf
U1JDU19CQVNFKS9sdGFibGliLmMKK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNF
KS9sdXRmOGxpYi5jCitMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG9hZGxp
Yi5jCitMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGluaXQuYworCisKKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYnJheSBBUEkgaGVhZGVycworIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKKyQoTElCTFVBX1NSQ1NfQkFTRSkvJS5oOiAkKExJQkxVQV9CVUlMRCkvLm9y
aWdpbgorCUAjIGVtcHR5IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBl
eHRyYWN0aW9uCisKKyQoTElCTFVBX0JVSUxEKS9pbmNsdWRlLyUuaDogJChMSUJMVUFfU1JDU19C
QVNFKS8lLmgKKwkkKGNhbGwgYnVpbGRfY21kLExOLGxpYmx1YSwkQCxcCisJbG4gLXNmICQ8ICRA
KQorCiskKExJQkxVQV9TUkNTX0JBU0UpLyUuaHBwOiAkKExJQkxVQV9CVUlMRCkvLm9yaWdpbgor
CUAjIGVtcHR5IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBleHRyYWN0
aW9uCisKKyQoTElCTFVBX0JVSUxEKS9pbmNsdWRlLyUuaHBwOiAkKExJQkxVQV9TUkNTX0JBU0Up
LyUuaHBwCisJJChjYWxsIGJ1aWxkX2NtZCxMTixsaWJsdWEsJEAsXAorCWxuIC1zZiAkPCAkQCkK
KworIyBUT19JTkMKK1VLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbHVhLmgK
K1VLX1BSRVBBUkUgKz0gJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbHVhY29uZi5oCitVS19QUkVQ
QVJFICs9ICQoTElCTFVBX0JVSUxEKS9pbmNsdWRlL2x1YWxpYi5oCitVS19QUkVQQVJFICs9ICQo
TElCTFVBX0JVSUxEKS9pbmNsdWRlL2xhdXhsaWIuaAorVUtfUFJFUEFSRSArPSAkKExJQkxVQV9C
VUlMRCkvaW5jbHVkZS9sdWEuaHBwCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 12:01:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 12:01:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i81JK-0001LA-LZ; Wed, 11 Sep 2019 12:01:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i81JJ-0001Kt-4u
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 12:01:21 +0000
X-Inumbo-ID: d7dcd3d6-d48b-11e9-b299-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id d7dcd3d6-d48b-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 12:01:10 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id ABA33414FF;
 Wed, 11 Sep 2019 14:01:09 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 14:01:04 +0200
Message-Id: <20190911120107.11757-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911120107.11757-1-felipe.huici@neclab.eu>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 1/4] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4K
LS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIENP
RElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysKIENPUFlJ
TkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog
Q29uZmlnLnVrICAgICAgIHwgIDQgKysrKwogTUFJTlRBSU5FUlMubWQgIHwgMTEgKysrKysrKysr
KysKIFJFQURNRS5tZCAgICAgICB8ICA5ICsrKysrKysrKwogZXhwb3J0c3ltcy51ayAgIHwgIDEg
KwogOCBmaWxlcyBjaGFuZ2VkLCA5OSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg
LmdpdGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IENPTlRSSUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJ
TkVSUy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0
IGV4cG9ydHN5bXMudWsKCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTVmNGIzCi0tLSAvZGV2L251bGwKKysr
IGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDI3IEBACisqLmRlcGVuZAorKi5vCisqLmEKKyouZAor
Ki5zbworKi5vcmlnCisqLnJlagorKi5iYWsKKyouc3dwCisqfgorLCoKK1wjKlwjCisuXCMqCitc
I18qXCMKKy5cI18qCishLmdpdGlnbm9yZQorLioKKworIyBnbnUgZ2xvYmFsIGZpbGVzCitHUEFU
SAorR1JUQUdTCitHU1lNUworR1RBR1MKKworIyBjc2NvcGUgZmlsZXMKK2NzY29wZS4qCituY3Nj
b3BlLioKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9DT0RJTkdfU1RZ
TEUubWQgYi9DT0RJTkdfU1RZTEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNTczMDA0MQotLS0gL2Rldi9udWxsCisrKyBiL0NPRElOR19TVFlMRS5tZApAQCAtMCwwICsx
LDQgQEAKK0NvZGluZyBTdHlsZQorPT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUg
YENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lgpk
aWZmIC0tZ2l0IGEvQ09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZjZhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9DT05U
UklCVVRJTkcubWQKQEAgLTAsMCArMSw0IEBACitDb250cmlidXRpbmcgdG8gVW5pa3JhZnQKKz09
PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05UUklCVVRJ
TkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBh
L0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjNiMGE5ODEKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0wLDAgKzEsMzkg
QEAKK0xpY2Vuc2UKKz09PT09PT0KKworVW5pa3JhZnQgbHVhIHdyYXBwZXJzCistLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFw
cGVyIGNvZGUgdG8gYnVpbGQgbHVhIHdpdGggVW5pa3JhZnQuCitFYWNoIEMgY29kZSBmaWxlIGlu
IHRoaXMgcmVwb3NpdG9yeSBzaG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlCitjb3B5cmlnaHQgb3du
ZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBjb2RlIGlzCitsaWNl
bnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNv
cHlyaWdodAorbm90aWNlIHdpbGwgYXBwbHk6CisKKwlDb3B5cmlnaHQgKGMpIFllYXIsIEluc3Rp
dHV0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisJ
YXJlIG1ldDoKKworCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisJICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorCSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJp
Z2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworCSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisJICAgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKwor
CVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMgIkFTIElTIgorCUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKwlJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorCUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKKwlMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisJQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKwlTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKwlJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorCUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisJQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKKwlQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEvQ29uZmln
LnVrIGIvQ29uZmlnLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0M2Ey
MTQKLS0tIC9kZXYvbnVsbAorKysgYi9Db25maWcudWsKQEAgLTAsMCArMSw0IEBACitjb25maWcg
TElCTFVBCisJYm9vbCAiVGhlIEx1YSBwcm9ncmFtbWluZyBsYW5ndWFnZSIKKwlkZWZhdWx0IG4K
KwlkZXBlbmRzIG9uIEhBVkVfTElCQwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlO
VEFJTkVSUy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzgzYzdiCi0t
LSAvZGV2L251bGwKKysrIGIvTUFJTlRBSU5FUlMubWQKQEAgLTAsMCArMSwxMSBAQAorTWFpbnRh
aW5lcnMgTGlzdAorPT09PT09PT09PT09PT09PQorCitGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQg
dGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4KK3Ro
ZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCisKKwlMSUJQQ1JFLVVOSUtSQUZUCisJTToJRmVs
aXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgorCU06CVNpbW9uIEt1ZW56ZXIgPHNp
bW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgorCUw6CW1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnCisJ
RjogKgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjE2MzNlYjIKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQK
QEAgLTAsMCArMSw5IEBACitsdWEgZm9yIFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorCitUaGlzIGlzIHRoZSBwb3J0IG9mIGx1YSBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJu
YWwgbGlicmFyeS4gQnkgZGVmYXVsdCwKK3doZW4gcnVubmluZyB0aGUgcG9ydCB3aWxsIGdvIGlu
dG8gaW50ZXJhY3RpdmUgbW9kZS4gQWx0ZXJuYXRpdmVseSwKK3lvdSBjYW4gcnVuIGEgc2NyaXB0
IGZyb20gYSBmaWxlIGlmIHBhc3NlZCBhcyBhIGluaXRyZCBwYXJhbWV0ZXIuCisKK1BsZWFzZSBy
ZWZlciB0byB0aGUgYFJFQURNRS5tZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0
aGUgYGRvYy9gCitzdWJkaXJlY3Rvcnkgb2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4K
ZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NmMzZjMKLS0tIC9kZXYvbnVsbAorKysgYi9leHBvcnRz
eW1zLnVrCkBAIC0wLDAgKzEgQEAKK25vbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0t
IAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 12:01:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 12:01:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i81JP-0001M2-NS; Wed, 11 Sep 2019 12:01:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4AcH=XG=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i81JO-0001Lp-5Z
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 12:01:26 +0000
X-Inumbo-ID: d9f6f71e-d48b-11e9-b299-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id d9f6f71e-d48b-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 12:01:13 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 39B62414FF;
 Wed, 11 Sep 2019 14:01:13 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 11 Sep 2019 14:01:07 +0200
Message-Id: <20190911120107.11757-5-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190911120107.11757-1-felipe.huici@neclab.eu>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 4/4] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RXhwb3J0IGx1YSBzeW1ib2xzCgpTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5o
dWljaUBuZWNsYWIuZXU+Ci0tLQogZXhwb3J0c3ltcy51ayB8IDMzOSArKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdl
ZCwgMzM4IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9leHBvcnRz
eW1zLnVrIGIvZXhwb3J0c3ltcy51awppbmRleCBjODZjM2YzLi5jYmI4NTdlIDEwMDY0NAotLS0g
YS9leHBvcnRzeW1zLnVrCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTEgKzEsMzM4IEBACi1ub25l
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorbHVhQl9hc3NlcnQKK2x1YUJfYXV4d3JhcAor
bHVhQl9jb2NyZWF0ZQorbHVhQl9jb2xsZWN0Z2FyYmFnZQorbHVhQl9jb3Jlc3VtZQorbHVhQl9j
b3J1bm5pbmcKK2x1YUJfY29zdGF0dXMKK2x1YUJfY293cmFwCitsdWFCX2RvZmlsZQorbHVhQl9l
cnJvcgorbHVhQl9nZXRtZXRhdGFibGUKK2x1YUJfaXBhaXJzCitsdWFCX2xvYWQKK2x1YUJfbG9h
ZGZpbGUKK2x1YUJfbmV4dAorbHVhQl9wYWlycworbHVhQl9wY2FsbAorbHVhQl9wcmludAorbHVh
Ql9yYXdlcXVhbAorbHVhQl9yYXdnZXQKK2x1YUJfcmF3bGVuCitsdWFCX3Jhd3NldAorbHVhQl9z
ZWxlY3QKK2x1YUJfc2V0bWV0YXRhYmxlCitsdWFCX3RvbnVtYmVyCitsdWFCX3Rvc3RyaW5nCits
dWFCX3R5cGUKK2x1YUJfeHBjYWxsCitsdWFCX3lpZWxkCitsdWFCX3lpZWxkYWJsZQorbHVhQ19i
YXJyaWVyXworbHVhQ19iYXJyaWVyYmFja18KK2x1YUNfY2hlY2tmaW5hbGl6ZXIKK2x1YUNfZml4
CitsdWFDX2ZyZWVhbGxvYmplY3RzCitsdWFDX2Z1bGxnYworbHVhQ19uZXdvYmoKK2x1YUNfcnVu
dGlsc3RhdGUKK2x1YUNfc3RlcAorbHVhQ191cHZhbGJhcnJpZXJfCitsdWFDX3VwdmRlY2NvdW50
CitsdWFEX2NhbGwKK2x1YURfY2FsbG5veWllbGQKK2x1YURfZ3Jvd3N0YWNrCitsdWFEX2hvb2sK
K2x1YURfaW5jdG9wCitsdWFEX3BjYWxsCitsdWFEX3Bvc2NhbGwKK2x1YURfcHJlY2FsbAorbHVh
RF9wcm90ZWN0ZWRwYXJzZXIKK2x1YURfcmF3cnVucHJvdGVjdGVkCitsdWFEX3JlYWxsb2NzdGFj
aworbHVhRF9zaHJpbmtzdGFjaworbHVhRF90aHJvdworbHVhRV9leHRlbmRDSQorbHVhRV9mcmVl
Q0kKK2x1YUVfZnJlZXRocmVhZAorbHVhRV9zZXRkZWJ0CitsdWFFX3Nocmlua0NJCitsdWFGX2Ns
b3NlCitsdWFGX2ZpbmR1cHZhbAorbHVhRl9mcmVlcHJvdG8KK2x1YUZfZ2V0bG9jYWxuYW1lCits
dWFGX2luaXR1cHZhbHMKK2x1YUZfbmV3Q2Nsb3N1cmUKK2x1YUZfbmV3TGNsb3N1cmUKK2x1YUZf
bmV3cHJvdG8KK2x1YUdfYWRkaW5mbworbHVhR19jb25jYXRlcnJvcgorbHVhR19lcnJvcm1zZwor
bHVhR19vcGludGVycm9yCitsdWFHX29yZGVyZXJyb3IKK2x1YUdfcnVuZXJyb3IKK2x1YUdfdG9p
bnRlcnJvcgorbHVhR190cmFjZWV4ZWMKK2x1YUdfdHlwZWVycm9yCitsdWFIX2ZyZWUKK2x1YUhf
Z2V0CitsdWFIX2dldGludAorbHVhSF9nZXRuCitsdWFIX2dldHNob3J0c3RyCitsdWFIX2dldHN0
cgorbHVhSF9uZXcKK2x1YUhfbmV3a2V5CitsdWFIX25leHQKK2x1YUhfcmVzaXplCitsdWFIX3Jl
c2l6ZWFycmF5CitsdWFIX3NldAorbHVhSF9zZXRpbnQKK2x1YUtfY2hlY2tzdGFjaworbHVhS19j
b2RlCitsdWFLX2NvZGVBQkMKK2x1YUtfY29kZUFCeAorbHVhS19jb2RlaworbHVhS19jb25jYXQK
K2x1YUtfZGlzY2hhcmdldmFycworbHVhS19leHAyUksKK2x1YUtfZXhwMmFueXJlZworbHVhS19l
eHAyYW55cmVndXAKK2x1YUtfZXhwMm5leHRyZWcKK2x1YUtfZXhwMnZhbAorbHVhS19maXhsaW5l
CitsdWFLX2dldGxhYmVsCitsdWFLX2dvaWZmYWxzZQorbHVhS19nb2lmdHJ1ZQorbHVhS19pbmRl
eGVkCitsdWFLX2luZml4CitsdWFLX2ludEsKK2x1YUtfanVtcAorbHVhS19uaWwKK2x1YUtfcGF0
Y2hjbG9zZQorbHVhS19wYXRjaGxpc3QKK2x1YUtfcGF0Y2h0b2hlcmUKK2x1YUtfcG9zZml4Cits
dWFLX3ByZWZpeAorbHVhS19yZXNlcnZlcmVncworbHVhS19yZXQKK2x1YUtfc2VsZgorbHVhS19z
ZXRsaXN0CitsdWFLX3NldG9uZXJldAorbHVhS19zZXRyZXR1cm5zCitsdWFLX3N0b3JldmFyCits
dWFLX3N0cmluZ0sKK2x1YUxfYWRkbHN0cmluZworbHVhTF9hZGRzdHJpbmcKK2x1YUxfYWRkdmFs
dWUKK2x1YUxfYXJnZXJyb3IKK2x1YUxfYnVmZmluaXQKK2x1YUxfYnVmZmluaXRzaXplCitsdWFM
X2NhbGxtZXRhCitsdWFMX2NoZWNrYW55CitsdWFMX2NoZWNraW50ZWdlcgorbHVhTF9jaGVja2xz
dHJpbmcKK2x1YUxfY2hlY2tudW1iZXIKK2x1YUxfY2hlY2tvcHRpb24KK2x1YUxfY2hlY2tzdGFj
aworbHVhTF9jaGVja3R5cGUKK2x1YUxfY2hlY2t1ZGF0YQorbHVhTF9jaGVja3ZlcnNpb25fCits
dWFMX2Vycm9yCitsdWFMX2V4ZWNyZXN1bHQKK2x1YUxfZmlsZXJlc3VsdAorbHVhTF9nZXRtZXRh
ZmllbGQKK2x1YUxfZ2V0c3VidGFibGUKK2x1YUxfZ3N1YgorbHVhTF9sZW4KK2x1YUxfbG9hZGJ1
ZmZlcngKK2x1YUxfbG9hZGZpbGV4CitsdWFMX2xvYWRzdHJpbmcKK2x1YUxfbmV3bWV0YXRhYmxl
CitsdWFMX25ld3N0YXRlCitsdWFMX29wZW5saWJzCitsdWFMX29wdGludGVnZXIKK2x1YUxfb3B0
bHN0cmluZworbHVhTF9vcHRudW1iZXIKK2x1YUxfcHJlcGJ1ZmZzaXplCitsdWFMX3B1c2hyZXN1
bHQKK2x1YUxfcHVzaHJlc3VsdHNpemUKK2x1YUxfcmVmCitsdWFMX3JlcXVpcmVmCitsdWFMX3Nl
dGZ1bmNzCitsdWFMX3NldG1ldGF0YWJsZQorbHVhTF90ZXN0dWRhdGEKK2x1YUxfdG9sc3RyaW5n
CitsdWFMX3RyYWNlYmFjaworbHVhTF91bnJlZgorbHVhTF93aGVyZQorbHVhTV9ncm93YXV4Xwor
bHVhTV9yZWFsbG9jXworbHVhTV90b29iaWcKK2x1YU9fYXJpdGgKK2x1YU9fY2VpbGxvZzIKK2x1
YU9fY2h1bmtpZAorbHVhT19mYjJpbnQKK2x1YU9faGV4YXZhbHVlCitsdWFPX2ludDJmYgorbHVh
T19uaWxvYmplY3RfCitsdWFPX3B1c2hmc3RyaW5nCitsdWFPX3B1c2h2ZnN0cmluZworbHVhT19z
dHIybnVtCitsdWFPX3Rvc3RyaW5nCitsdWFPX3V0Zjhlc2MKK2x1YVBfb3Btb2RlcworbHVhUF9v
cG5hbWVzCitsdWFTX2NsZWFyY2FjaGUKK2x1YVNfY3JlYXRlbG5nc3Ryb2JqCitsdWFTX2VxbG5n
c3RyCitsdWFTX2hhc2gKK2x1YVNfaGFzaGxvbmdzdHIKK2x1YVNfaW5pdAorbHVhU19uZXcKK2x1
YVNfbmV3bHN0cgorbHVhU19uZXd1ZGF0YQorbHVhU19yZW1vdmUKK2x1YVNfcmVzaXplCitsdWFU
X2NhbGxUTQorbHVhVF9jYWxsYmluVE0KK2x1YVRfY2FsbG9yZGVyVE0KK2x1YVRfZXZlbnRuYW1l
LjMyNzAKK2x1YVRfZ2V0dG0KK2x1YVRfZ2V0dG1ieW9iagorbHVhVF9pbml0CitsdWFUX29ianR5
cGVuYW1lCitsdWFUX3RyeWJpblRNCitsdWFUX3R5cGVuYW1lc18KK2x1YVVfZHVtcAorbHVhVV91
bmR1bXAKK2x1YVZfY29uY2F0CitsdWFWX2RpdgorbHVhVl9lcXVhbG9iagorbHVhVl9leGVjdXRl
CitsdWFWX2ZpbmlzaE9wCitsdWFWX2ZpbmlzaGdldAorbHVhVl9maW5pc2hzZXQKK2x1YVZfbGVz
c2VxdWFsCitsdWFWX2xlc3N0aGFuCitsdWFWX21vZAorbHVhVl9vYmpsZW4KK2x1YVZfc2hpZnRs
CitsdWFWX3RvaW50ZWdlcgorbHVhVl90b251bWJlcl8KK2x1YVhfaW5pdAorbHVhWF9sb29rYWhl
YWQKK2x1YVhfbmV3c3RyaW5nCitsdWFYX25leHQKK2x1YVhfc2V0aW5wdXQKK2x1YVhfc3ludGF4
ZXJyb3IKK2x1YVhfdG9rZW4yc3RyCitsdWFYX3Rva2VucworbHVhWV9wYXJzZXIKK2x1YVpfZmls
bAorbHVhWl9pbml0CitsdWFaX3JlYWQKK2x1YV9hYnNpbmRleAorbHVhX2FyaXRoCitsdWFfYXRw
YW5pYworbHVhX2NhbGxrCitsdWFfY2hlY2tzdGFjaworbHVhX2Nsb3NlCitsdWFfY29tcGFyZQor
bHVhX2NvbmNhdAorbHVhX2NvcHkKK2x1YV9jcmVhdGV0YWJsZQorbHVhX2R1bXAKK2x1YV9lcnJv
cgorbHVhX2djCitsdWFfZ2V0YWxsb2NmCitsdWFfZ2V0ZmllbGQKK2x1YV9nZXRnbG9iYWwKK2x1
YV9nZXRob29rCitsdWFfZ2V0aG9va2NvdW50CitsdWFfZ2V0aG9va21hc2sKK2x1YV9nZXRpCits
dWFfZ2V0aW5mbworbHVhX2dldGxvY2FsCitsdWFfZ2V0bWV0YXRhYmxlCitsdWFfZ2V0c3RhY2sK
K2x1YV9nZXR0YWJsZQorbHVhX2dldHRvcAorbHVhX2dldHVwdmFsdWUKK2x1YV9nZXR1c2VydmFs
dWUKK2x1YV9pZGVudAorbHVhX2lzY2Z1bmN0aW9uCitsdWFfaXNpbnRlZ2VyCitsdWFfaXNudW1i
ZXIKK2x1YV9pc3N0cmluZworbHVhX2lzdXNlcmRhdGEKK2x1YV9pc3lpZWxkYWJsZQorbHVhX2xl
bgorbHVhX2xvYWQKK2x1YV9tYWluCitsdWFfbmV3c3RhdGUKK2x1YV9uZXd0aHJlYWQKK2x1YV9u
ZXd1c2VyZGF0YQorbHVhX25leHQKK2x1YV9wY2FsbGsKK2x1YV9wdXNoYm9vbGVhbgorbHVhX3B1
c2hjY2xvc3VyZQorbHVhX3B1c2hmc3RyaW5nCitsdWFfcHVzaGludGVnZXIKK2x1YV9wdXNobGln
aHR1c2VyZGF0YQorbHVhX3B1c2hsc3RyaW5nCitsdWFfcHVzaG5pbAorbHVhX3B1c2hudW1iZXIK
K2x1YV9wdXNoc3RyaW5nCitsdWFfcHVzaHRocmVhZAorbHVhX3B1c2h2YWx1ZQorbHVhX3B1c2h2
ZnN0cmluZworbHVhX3Jhd2VxdWFsCitsdWFfcmF3Z2V0CitsdWFfcmF3Z2V0aQorbHVhX3Jhd2dl
dHAKK2x1YV9yYXdsZW4KK2x1YV9yYXdzZXQKK2x1YV9yYXdzZXRpCitsdWFfcmF3c2V0cAorbHVh
X3Jlc3VtZQorbHVhX3JvdGF0ZQorbHVhX3NldGFsbG9jZgorbHVhX3NldGZpZWxkCitsdWFfc2V0
Z2xvYmFsCitsdWFfc2V0aG9vaworbHVhX3NldGkKK2x1YV9zZXRsb2NhbAorbHVhX3NldG1ldGF0
YWJsZQorbHVhX3NldHRhYmxlCitsdWFfc2V0dG9wCitsdWFfc2V0dXB2YWx1ZQorbHVhX3NldHVz
ZXJ2YWx1ZQorbHVhX3N0YXR1cworbHVhX3N0cmluZ3RvbnVtYmVyCitsdWFfdG9ib29sZWFuCits
dWFfdG9jZnVuY3Rpb24KK2x1YV90b2ludGVnZXJ4CitsdWFfdG9sc3RyaW5nCitsdWFfdG9udW1i
ZXJ4CitsdWFfdG9wb2ludGVyCitsdWFfdG90aHJlYWQKK2x1YV90b3VzZXJkYXRhCitsdWFfdHlw
ZQorbHVhX3R5cGVuYW1lCitsdWFfdXB2YWx1ZWlkCitsdWFfdXB2YWx1ZWpvaW4KK2x1YV92ZXJz
aW9uCitsdWFfeG1vdmUKK2x1YV95aWVsZGsKK2x1YWlfY3R5cGVfCitsdWFvcGVuX2Jhc2UKK2x1
YW9wZW5fYml0MzIKK2x1YW9wZW5fY29yb3V0aW5lCitsdWFvcGVuX2RlYnVnCitsdWFvcGVuX2lv
CitsdWFvcGVuX21hdGgKK2x1YW9wZW5fb3MKK2x1YW9wZW5fcGFja2FnZQorbHVhb3Blbl9zdHJp
bmcKK2x1YW9wZW5fdGFibGUKK2x1YW9wZW5fdXRmOAotLSAKMi4xMS4wCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 12:56:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 12:56:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i82AS-0005TT-PU; Wed, 11 Sep 2019 12:56:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yAp6=XG=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i82AR-0005TO-AB
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 12:56:15 +0000
X-Inumbo-ID: 87d93ed1-d493-11e9-83d5-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 87d93ed1-d493-11e9-83d5-12813bfff9fa;
 Wed, 11 Sep 2019 12:56:13 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 4ABAE10569E;
 Wed, 11 Sep 2019 14:56:11 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Qi6p1HQfsiYN; Wed, 11 Sep 2019 14:56:11 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 1F87210569D;
 Wed, 11 Sep 2019 14:56:11 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 11 Sep
 2019 14:56:10 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
Date: Wed, 11 Sep 2019 14:56:10 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhlIGZpeCBzZWVtcyBmaW5lLiBQbGVhc2UgZmluZCB0aGUgcXVlc3Rp
b24gaW5saW5lLgoKVGhhbmtzICYgUmVnYXJkcwoKU2hhcmFuCgpPbiA5LzExLzE5IDE6NTYgUE0s
IENvc3RpbiBMdXB1IHdyb3RlOgo+IENvbW1pdCAzZGNjY2QwNCBpbnRyb2R1Y2VkIGhhbmRsaW5n
IG9mIEZJT0NMRVggYW5kIEZJT05DTEVYIHJlcXVlc3RzLiBIb3dldmVyLAo+IHRoZXNlIGZsYWdz
IGFyZSBub3QgZGVmaW5lZCBpbiBub2xpYmMuCj4KPiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVw
dSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgo+IC0tLQo+ICAgbGliL25vbGliYy9pbmNsdWRlL3N5
cy9pb2N0bC5oIHwgMAoKV2h5IGRvIHdlIGludHJvZHVjZSBhIGVtcHR5IGZpbGU/IEluIG5ld2xp
YiB3ZSBpbnRyb2R1Y2VzIGEgaGVhZGVyIAppbXBvcnRlZCBmcm9tIG11c2wuCgpXaHkgZG9uJ3Qg
d2UgdXNlIHRoZSBzYW1lIGZpbGUgaGVyZT8KCj4gICBsaWIvdmZzY29yZS9zeXNjYWxscy5jICAg
ICAgICAgfCA0ICsrKysKPiAgIDIgZmlsZXMgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspCj4gICBj
cmVhdGUgbW9kZSAxMDA2NDQgbGliL25vbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oCj4KPiBkaWZm
IC0tZ2l0IGEvbGliL25vbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oIGIvbGliL25vbGliYy9pbmNs
dWRlL3N5cy9pb2N0bC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4u
ZTY5ZGUyOWIKPiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvc3lzY2FsbHMuYyBiL2xpYi92ZnNj
b3JlL3N5c2NhbGxzLmMKPiBpbmRleCBkMzc1Nzc0YS4uZTg1YzRlYjUgMTAwNjQ0Cj4gLS0tIGEv
bGliL3Zmc2NvcmUvc3lzY2FsbHMuYwo+ICsrKyBiL2xpYi92ZnNjb3JlL3N5c2NhbGxzLmMKPiBA
QCAtMzkwLDEyICszOTAsMTYgQEAgc3lzX2lvY3RsKHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKmZwLCB1
bnNpZ25lZCBsb25nIHJlcXVlc3QsIHZvaWQgKmJ1ZikKPiAgIAkJcmV0dXJuIEVCQURGOwo+ICAg
Cj4gICAJc3dpdGNoIChyZXF1ZXN0KSB7Cj4gKyNpZmRlZiBGSU9DTEVYCj4gICAJY2FzZSBGSU9D
TEVYOgo+ICAgCQlmcC0+Zl9mbGFncyB8PSBPX0NMT0VYRUM7Cj4gICAJCWJyZWFrOwo+ICsjZW5k
aWYKPiArI2lmZGVmIEZJT05DTEVYCj4gICAJY2FzZSBGSU9OQ0xFWDoKPiAgIAkJZnAtPmZfZmxh
Z3MgJj0gfk9fQ0xPRVhFQzsKPiAgIAkJYnJlYWs7Cj4gKyNlbmRpZgo+ICAgCWRlZmF1bHQ6Cj4g
ICAJCWVycm9yID0gdmZzX2lvY3RsKGZwLCByZXF1ZXN0LCBidWYpOwo+ICAgCQlicmVhazsKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 13:38:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 13:38:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i82ph-0000az-8p; Wed, 11 Sep 2019 13:38:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=m7bk=XG=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i82pf-0000au-Rh
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 13:38:51 +0000
X-Inumbo-ID: 7cd16980-d499-11e9-b76c-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7cd16980-d499-11e9-b76c-bc764e2007e4;
 Wed, 11 Sep 2019 13:38:50 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id q12so3621782wmj.4
 for <minios-devel@lists.xen.org>; Wed, 11 Sep 2019 06:38:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=6XU7nAFCx5Co+Nhiq6sJ7uibUiHn0Lobxst7IL06yYw=;
 b=Q99W2faoUOw1YKK7y5Vf275iC1GhsdBD0d4qlugPh8hKW6pVAn6SJDuEZ+Wzj4MCvA
 KJlFnUKIeHrdaTve1ZFJ3ehayNO4UD+Ku9sN9/eYRfM6CW2RfL8eRzhUTVyWizgoUnv4
 jQGzi5InVvLSgkFwkVJk5CqI3oqediqP0VmjoRdeUdbziWuZF9ugNehlfXZT509sWG+t
 CTPxy3dhbeB+aB3UxhbPkThYnhmnaeDgSi6saS7ff12yOMNGQBIslxD1ulPX15VpilSt
 pIohJGyyQIVW+mWxEFv0v7ddwUl71xrEnOby6abk3+D5vRNmbu7L8DUjRKRTPylQqnvJ
 Tqrg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=6XU7nAFCx5Co+Nhiq6sJ7uibUiHn0Lobxst7IL06yYw=;
 b=EUT0u4KyaG8CyMcJQpkyK5dK6Rxu7TCr2o5hVMgz+/FpQTqmymL5oVhKHz2m7YCQEz
 UTkppAIdJuBCct+zUeYACdRmk6xcQiHYNMKtq8k5Imgiiba+919/BBJYUGqEunx2t4/m
 UWONCXTumuI2l36sNNF2a6R53ErsObM8/tVLX+oD6KpQw9Zo9PJLoW/RqUbv7USNq+z5
 0uQwtymSxXU1lFGDBbw3P6kX9zPS6fGPI9DeqIyAvP361uXNrogb/vGBH6+UZ+BFE38/
 fRsO5vOeoPJ310nZ2u44ENiXJCLFY1z3Jed4NJDlA1I4UV1pvQRSDWSkISWZqfbPHxUn
 QZZg==
X-Gm-Message-State: APjAAAXiYB0pLS7g4NNT2O44GyKvfQpMUzu7L8bXA4FlMV0sPlOSrqoF
 TAacsfnvJavXpghh5gxJwADWqlDG
X-Google-Smtp-Source: APXvYqwxPX7SocrPn2Gd1L5jfz4WWOFjUDqSh7pLT0j/Mcbo0ZtgMGfjMjy0M0m0/wY+Z/yp1DLP+w==
X-Received: by 2002:a1c:a853:: with SMTP id r80mr3926188wme.140.1568209129539; 
 Wed, 11 Sep 2019 06:38:49 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id a18sm29162842wrh.25.2019.09.11.06.38.48
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 11 Sep 2019 06:38:48 -0700 (PDT)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>, minios-devel@lists.xen.org
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
 <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
Date: Wed, 11 Sep 2019 16:38:47 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLAoKT24gOS8xMS8xOSAzOjU2IFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+
IEhlbGxvIENvc3RpbiwKPiAKPiBUaGUgZml4IHNlZW1zIGZpbmUuIFBsZWFzZSBmaW5kIHRoZSBx
dWVzdGlvbiBpbmxpbmUuCj4gCj4gVGhhbmtzICYgUmVnYXJkcwo+IAo+IFNoYXJhbgo+IAo+IE9u
IDkvMTEvMTkgMTo1NiBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+IENvbW1pdCAzZGNjY2QwNCBp
bnRyb2R1Y2VkIGhhbmRsaW5nIG9mIEZJT0NMRVggYW5kIEZJT05DTEVYIHJlcXVlc3RzLgo+PiBI
b3dldmVyLAo+PiB0aGVzZSBmbGFncyBhcmUgbm90IGRlZmluZWQgaW4gbm9saWJjLgo+Pgo+PiBT
aWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgo+PiAtLS0K
Pj4gwqAgbGliL25vbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oIHwgMAo+IAo+IFdoeSBkbyB3ZSBp
bnRyb2R1Y2UgYSBlbXB0eSBmaWxlPyBJbiBuZXdsaWIgd2UgaW50cm9kdWNlcyBhIGhlYWRlcgo+
IGltcG9ydGVkIGZyb20gbXVzbC4KPiAKCkkgZGlkbid0IGdldCB0aGF0IGNvbXBsZXRlbHksIGRv
ZXMgaXQgYnVpbGQgb24geW91ciBzaWRlPyBEbyB5b3UgZ2V0IGFueQplcnJvcnMvd2FybmluZ3M/
Cgo+IFdoeSBkb24ndCB3ZSB1c2UgdGhlIHNhbWUgZmlsZSBoZXJlPwoKVGhpcyBpcyBhbiBvcGVu
IHF1ZXN0aW9uLiBUaGUgdGhpbmcgaXMgdGhhdCBuZXdsaWIgaXRzZWxmIHNlZW1zIHRvIGJlIGEK
cG9vciBjaG9pY2UgaWYgd2UgZG8gY29weSBzbyBtdWNoIGNvZGUgZnJvbSBtdXNsLiBOb3cgZ2V0
dGluZyBiYWNrIHRvCm5vbGliYywgaWYgd2UgZG8gYWRkIG1vcmUgYW5kIG1vcmUgY29kZSBmcm9t
IG11c2wgdGhlbiB3ZSBjYW4gc2ltcGx5IGdldApyaWQgb2YgaXQgdG9vIGFuZCB1c2UgbXVzbCBp
bnN0ZWFkLiBJbiBjb25jbHVzaW9uLCBJIGZhaWwgdG8gc2VlIHdoeSB3ZQpzaG91bGQgY29weSBj
b2RlIHRvIG5vbGliYyBpbnN0ZWFkIHVzaW5nIG11c2wgZGlyZWN0bHkuCgpDaGVlcnMsCkNvc3Rp
bgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 13:56:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 13:56:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i836N-0002Gy-Ol; Wed, 11 Sep 2019 13:56:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i836M-0002Gt-KG
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 13:56:06 +0000
X-Inumbo-ID: e4bb9668-d49b-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.79]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e4bb9668-d49b-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 13:56:04 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=I2IJKcIXZywsYCaTqxKcxtL8DqetI6Tp7EJ11M2MCWg9aojc65smnxE93uGqZBY3uFuihd0OuU+NbRh5YRsxOXZOrncSNDtrqd9LBc4S8aMJ4EwhP3yjp24pYRWLMCS8VJyfTeWAm4aB1N9R4eAUa0LuCOuEGSXosttIzk1r+2biYSEcmfZgAyahFT4gt4tvMpj/0kNElH5hJnYc9ocz+ENuWej9ux+f6dO4demI6S0dtTQYur2UzxyoYMwQh3slrK2o081COdajZmkTp1/I5SIPncfTNzWqYBOvMbsuUGM9OJtgwBi+cQDFRzrb517FW2ul7IpeJsL4OVzN+U+8wg==
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=yFtvgk698CXghzBrDfPF5o7pKbY/Q0ibUjM3xSb/S4c=;
 b=f9iKDQxCIyftQdFUOqeZYLM2ix6gFJ+sUVyVwYfot8ZxI/YhzpLrHP6BxnZtI9ehwXxOacyC3kb09q/oO2vITzsho0GRkJmnWP6mxhiSlCDDwHWEjaZU0NlWc7nwdf1geriG0CNldPKUPMobitlhU9Va996LHfG5oaaPC6IYA38MvIzJPF6YkegvbWr7/V6jbo1ldNVENBAdXTf3Zv9Cv9VK8U59ZoaJuij1euL+pc4oTYdXdh8R13Bq5woYy3hooUw/a7bNxzppjmjSz5TCKjAsvd5ECAESCqKvdHQvMQQdzlW1XhG3TmC3z37/bCn4ZO531DSs8WXTFks+PpetVA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4892.eurprd01.prod.exchangelabs.com (20.177.209.87) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Wed, 11 Sep
 2019 13:56:01 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 13:56:01 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 0/4] lib/uktime: Import timegm from musl
Thread-Index: AQHVaKil3zO0FEykrka4lBNNxpH3Jw==
Date: Wed, 11 Sep 2019 13:56:01 +0000
Message-ID: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1P193CA0005.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:800:bd::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 75bc5c31-7e0f-48da-9f38-08d736bfc779
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4892; 
x-ms-traffictypediagnostic: PR1PR01MB4892:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48922994A7242E7CF442D9B3A6B10@PR1PR01MB4892.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6108;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(979002)(396003)(39850400004)(136003)(376002)(346002)(366004)(189003)(199004)(6486002)(45776006)(86362001)(66556008)(5660300002)(6436002)(66946007)(53936002)(5640700003)(478600001)(99286004)(64756008)(256004)(6512007)(2501003)(14444005)(2906002)(6506007)(386003)(2616005)(14454004)(52116002)(486006)(46003)(476003)(6116002)(81156014)(66476007)(7736002)(305945005)(102836004)(66446008)(71200400001)(4326008)(50226002)(71190400001)(25786009)(2351001)(6916009)(316002)(1076003)(8936002)(81166006)(786003)(186003)(54906003)(8676002)(969003)(989001)(999001)(1009001)(1019001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4892;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 30edU9ASiGE2/pUzHOQJId2vEMOu4MbConvXt1rGcTqOiq6PHh5Q9x8ovS5d0blWcDrz0QFsqlA0B7/HQhttgsPvRI/PUv1v3f2hxHFHNBMQi7T82nRJhrAx9F1dLmNk3+PE4U9rbFWH8vpja/T92kdrFM9lcyUVbklalBDkwi97kOlfFEAtGa4ZlHoJIFpKWEi8qICIJ4VNksvsED8i6fCRu0pC+ap5SeN1y4NxD6XnJO0O2PlfO5ZD+y68VkuuM/pjdLx5Bxv5TRHQ08+yLO6GCKC+pJdwzO5JTu/QqZas0+bgiEgIQg/mswOnB5alwbxuuuShajHXX4E+/EScYeb55nnJjzSx+9rfqREfM2dq0vOwM+rTlMQnHAcBlpHfGDHXd7geR7Zy+Pb23a3q5akUwLGPWcH7MWB4CxTI3U0=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 75bc5c31-7e0f-48da-9f38-08d736bfc779
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 13:56:01.4721 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Aqa7y4ntdrAyH5KJ/m7Sh+eb0+OomW2b6SrQxPaDXGqq6Y9qU2Jeulv+FfoRxZI0KZ9oqbtVnMta84ip/9kmaWXonyWKBSA4l0fPzJry6vQVDR+SNMRc0uiDfblHwMEw
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4892
Subject: [Minios-devel] [UNIKRAFT PATCH 0/4] lib/uktime: Import timegm from
 musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgaW1wb3J0IHRoZSB0aW1lZ20gZnVuY3Rpb24gZnJvbSBtdXNsIHRvIHRoZSBuZXdseSBjcmVh
dGVkIApsaWJyYXJ5LCB1a3RpbWUuIFdlIG1vdmUgdGhlIGRlZmluaXRpb25zIGZyb20gbm9saWJj
L3RpbWUuaAp0byB1a3RpbWUvdGltZS5oLiBUaGlzIGZ1bmN0aW9uIGlzIG5lZWRlZCBieSBQeXRo
b24gMy4KClZsYWQtQW5kcmVpIEJhZG9pdSAoNCk6CiAgbGliL3VrdGltZTogSW1wb3J0IHRpbWVn
bSBmcm9tIG11c2wKICBsaWIvdWt0aW1lOiBBZGFwdCB0aW1lZ20gaW1wbGVtZW50YXRpb24gdG8g
VW5pa3JhZnQKICBsaWIvdWt0aW1lOiBGaXggY2hlY2twYXRoIGVycm9ycyBmb3IgdGltZWdtCiAg
VXBkYXRlIHRpbWUuaCBmcm9tIG5vbGliYyB0byB1c2UgdWt0aW1lCgogbGliL25vbGliYy9pbmNs
dWRlL3RpbWUuaCAgICAgICAgICAgICAgICAgICAgIHwgIDI3ICstLQogbGliL3VrdGltZS9NYWtl
ZmlsZS51ayAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICstCiBsaWIvdWt0aW1lL2V4cG9y
dHN5bXMudWsgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGxpYi91a3RpbWUvaW5jbHVk
ZS9fdGltZV90eXBlcy5oICAgICAgICAgICAgICB8ICAyMiArKysKIC4uLi9tdXNsLWltcG9ydGVk
L2luY2x1ZGUvX3RpbWVfdHlwZXMuaCAgICAgICB8ICAyMSArKysKIGxpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9pbmNsdWRlL3RpbWVfaW1wbC5oICB8ICAgNyArCiAuLi4vbXVzbC1pbXBvcnRlZC9p
bmNsdWRlL3VrdGltZS90aW1lLmggICAgICAgfCAxNTggKysrKysrKysrKysrKysrKysrCiAuLi4v
bXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgICAgICAgfCAgMTIgKysKIGxpYi91
a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMgICB8ICA4MiArKysrKysrKysK
IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMgICB8ICAyNyArKysK
IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYyB8ICA1NSArKysr
KysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMgICAgICAgICB8ICAyMSAr
KysKIDEyIGZpbGVzIGNoYW5nZWQsIDQxOCBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL2luY2x1ZGUvX3RpbWVfdHlwZXMuaAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL190aW1lX3R5
cGVzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVk
ZS90aW1lX2ltcGwuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRl
ZC9pbmNsdWRlL3VrdGltZS90aW1lLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211
c2wtaW1wb3J0ZWQvc3JjL19fbW9udGhfdG9fc2Vjcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYwogY3JlYXRlIG1vZGUgMTAw
NjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5j
CgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 13:56:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 13:56:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i836S-0002HW-Qb; Wed, 11 Sep 2019 13:56:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i836R-0002HM-IC
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 13:56:11 +0000
X-Inumbo-ID: e68e002a-d49b-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.79]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e68e002a-d49b-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 13:56:06 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=FqEa9c64USb3DzO1XAfrpxFsgSgCNiKJ3GE6ukUmb4D5h9/3HHqUxuEP5IkvTcrEtirMTl0AR8Skp4auAANvTtF0wqfd+EuubDbQrtsSZ/XhUgqA0/ZL1TB0AdzvSlVVgUwwM6+cAlcBCAFZEdtRtUb6lxX8psWfJKDpUBtBFzcG58rBxgiEfx/XA0uGMhZMD2PQkTwRspOlJNBqyV2KDP3S/tSKdy/O/hEsyzJ1K3xwRN84w2jjWh4d2np+W0shsf8uUrDdubHesBPrmOAqZy4Axo0PsefMyTRdEBAdPpyZLfHIvPN3uTb5IxBRLlvD/isZaPZDhEVWOzZ7GuP7qA==
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=t+mbzRIDC5X1/UALZmna2k9MO8rT85OpVqane2Ry9V4=;
 b=GGW7ou7Ke8bWyztBO0HaMygpHm2exAIeh+O4H/3ahUdB6GT9FDzl1wwP9cOEk6T4v97m8EdjnUgeg/ufg2gO86qsa02WyyTfaZUg3f+oQbil1A/rJ+pp/ZUqPjbFXONNRTOMOsv0pEL8Fq3vx6IJ+6WqLo9sMXikpylieKVBU5QbNvPtJ/ZBCSFOfTPZ/O/BSNQ80X6iRCwalF7rBitGH0z0p11cO9wdiBGsXHPzbeNJvEEkWpdi1H3PSgW/qUkFdKpaJ/d1HWvmM7ycAX/WOoBxk901bhRVpqS0B4wDuPd1bE6oKz3e3l42BAROBnhT2F2/8Z3pDNoek02xKRFv8g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4892.eurprd01.prod.exchangelabs.com (20.177.209.87) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Wed, 11 Sep
 2019 13:56:02 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 13:56:02 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 1/4] lib/uktime: Import timegm from musl
Thread-Index: AQHVaKilFgznmr/LZUOzpyFGd+FLTQ==
Date: Wed, 11 Sep 2019 13:56:02 +0000
Message-ID: <20190911135549.32005-2-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1P193CA0005.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:800:bd::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 095fa0d5-b024-4453-404f-08d736bfc826
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4892; 
x-ms-traffictypediagnostic: PR1PR01MB4892:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB4892BFA9588026C3CF319684A6B10@PR1PR01MB4892.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6430;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(39850400004)(136003)(376002)(346002)(366004)(189003)(199004)(6486002)(45776006)(86362001)(66556008)(5660300002)(6436002)(66946007)(53936002)(5640700003)(478600001)(99286004)(64756008)(256004)(6512007)(2501003)(14444005)(2906002)(6506007)(386003)(2616005)(14454004)(52116002)(486006)(46003)(476003)(6116002)(81156014)(11346002)(66476007)(7736002)(30864003)(305945005)(102836004)(66446008)(446003)(71200400001)(4326008)(50226002)(71190400001)(25786009)(2351001)(6916009)(316002)(1076003)(76176011)(8936002)(81166006)(786003)(186003)(54906003)(8676002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4892;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: aAcnco8GWfR7p2ULdMJr0NOEVUcapXM6A5+nEcyfGUXyrqJTKZBYV+dv2QLY+Hs8clluViiKHasN2lJKFpmrrWQDNSSJ0sFy2eLWI3X5PaMzZ79A1eX5JPvAXTvbZ13OUWI59IK1IygFFF38pArKlJHFLWbbjgtVK87RW4OSgQJgP0UyFHrZYpAaQCO+2I9a6ZpSBSE9Y+Q1wCCZL9ujoHQarf5Zg4XExsRZp/AhxGNS4gx/laJvEzL4dddeGpaFHymDjouzuScgH9h47xJ8hU6mqPoxRh8FTl+ZxN4sPgjvfn4VNMQuZw3IH/1P4oUTUwtJq6V3P5JjHmzSKzD9lJm4IABP64OprEJk5i4cXvMnOXOMkeLGS7n/KfptO4WSotKeqpJYvsw2L1j9hWT7u/M6l36n3hQqraRp7yWvwJ8=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 095fa0d5-b024-4453-404f-08d736bfc826
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 13:56:02.6294 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: PTjWKOSCnrV07HUaBoM9Dg6x28FnKgenHbDCZB/2CYCRkascAYbRshZYgVoc2/WedPNypkg91mxu3OmV++MTtH0aNSjKANfkx/IJnSas0eZ9s7ny0IT7+H7S/Fs6lAhB
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4892
Subject: [Minios-devel] [UNIKRAFT PATCH 1/4] lib/uktime: Import timegm from
 musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29waWVkIGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgpnaXQ6Ly9naXQu
bXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQuCgpTaWduZWQtb2ZmLWJ5OiBWbGFk
LUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Ci0tLQog
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZV9pbXBsLmggIHwgIDExICsrCiAu
Li4vbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3VrdGltZS90aW1lLmggICAgICAgfCAxMzggKysrKysr
KysrKysrKysrKysrCiAuLi4vbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgICAg
ICAgfCAgMTAgKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMg
ICB8ICA4MiArKysrKysrKysrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3RtX3Rv
X3NlY3MuYyAgIHwgIDI0ICsrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3llYXJf
dG9fc2Vjcy5jIHwgIDQ3ICsrKysrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1l
Z20uYyAgICAgICAgIHwgIDE4ICsrKwogNyBmaWxlcyBjaGFuZ2VkLCAzMzAgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Rp
bWVfaW1wbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2lu
Y2x1ZGUvdWt0aW1lL3RpbWUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0
aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMKCmRp
ZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS90aW1lX2ltcGwuaCBi
L2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWVfaW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5mMjZkODAwNQotLS0gL2Rldi9udWxsCisrKyBiL2xp
Yi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWVfaW1wbC5oCkBAIC0wLDAgKzEsMTEg
QEAKKyNpbmNsdWRlIDx0aW1lLmg+CisKK2hpZGRlbiBpbnQgX19kYXlzX2luX21vbnRoKGludCwg
aW50KTsKK2hpZGRlbiBpbnQgX19tb250aF90b19zZWNzKGludCwgaW50KTsKK2hpZGRlbiBsb25n
IGxvbmcgX195ZWFyX3RvX3NlY3MobG9uZyBsb25nLCBpbnQgKik7CitoaWRkZW4gbG9uZyBsb25n
IF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3QgdG0gKik7CitoaWRkZW4gY29uc3QgY2hhciAqX190
bV90b190em5hbWUoY29uc3Qgc3RydWN0IHRtICopOworaGlkZGVuIGludCBfX3NlY3NfdG9fdG0o
bG9uZyBsb25nLCBzdHJ1Y3QgdG0gKik7CitoaWRkZW4gdm9pZCBfX3NlY3NfdG9fem9uZShsb25n
IGxvbmcsIGludCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBjb25zdCBjaGFyICoqKTsKK2hpZGRl
biBjb25zdCBjaGFyICpfX3N0cmZ0aW1lX2ZtdF8xKGNoYXIgKCopWzEwMF0sIHNpemVfdCAqLCBp
bnQsIGNvbnN0IHN0cnVjdCB0bSAqLCBsb2NhbGVfdCwgaW50KTsKK2V4dGVybiBoaWRkZW4gY29u
c3QgY2hhciBfX3V0Y1tdOwpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2lu
Y2x1ZGUvdWt0aW1lL3RpbWUuaCBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vr
dGltZS90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjY3MmIzZmMz
Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWt0
aW1lL3RpbWUuaApAQCAtMCwwICsxLDEzOCBAQAorI2lmbmRlZglfVElNRV9ICisjZGVmaW5lIF9U
SU1FX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5j
bHVkZSA8ZmVhdHVyZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIE5VTEwgMEwK
KyNlbHNlCisjZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorI2VuZGlmCisKKworI2RlZmluZSBfX05F
RURfc2l6ZV90CisjZGVmaW5lIF9fTkVFRF90aW1lX3QKKyNkZWZpbmUgX19ORUVEX2Nsb2NrX3QK
KyNkZWZpbmUgX19ORUVEX3N0cnVjdF90aW1lc3BlYworCisjaWYgZGVmaW5lZChfUE9TSVhfU09V
UkNFKSB8fCBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgXAorIHx8IGRlZmluZWQoX1hPUEVOX1NP
VVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkgXAorIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0Up
CisjZGVmaW5lIF9fTkVFRF9jbG9ja2lkX3QKKyNkZWZpbmUgX19ORUVEX3RpbWVyX3QKKyNkZWZp
bmUgX19ORUVEX3BpZF90CisjZGVmaW5lIF9fTkVFRF9sb2NhbGVfdAorI2VuZGlmCisKKyNpbmNs
dWRlIDxiaXRzL2FsbHR5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9CU0RfU09VUkNFKSB8fCBkZWZp
bmVkKF9HTlVfU09VUkNFKQorI2RlZmluZSBfX3RtX2dtdG9mZiB0bV9nbXRvZmYKKyNkZWZpbmUg
X190bV96b25lIHRtX3pvbmUKKyNlbmRpZgorCitzdHJ1Y3QgdG0geworCWludCB0bV9zZWM7CisJ
aW50IHRtX21pbjsKKwlpbnQgdG1faG91cjsKKwlpbnQgdG1fbWRheTsKKwlpbnQgdG1fbW9uOwor
CWludCB0bV95ZWFyOworCWludCB0bV93ZGF5OworCWludCB0bV95ZGF5OworCWludCB0bV9pc2Rz
dDsKKwlsb25nIF9fdG1fZ210b2ZmOworCWNvbnN0IGNoYXIgKl9fdG1fem9uZTsKK307CisKK2Ns
b2NrX3QgY2xvY2sgKHZvaWQpOwordGltZV90IHRpbWUgKHRpbWVfdCAqKTsKK2RvdWJsZSBkaWZm
dGltZSAodGltZV90LCB0aW1lX3QpOwordGltZV90IG1rdGltZSAoc3RydWN0IHRtICopOworc2l6
ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKl9fcmVz
dHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitzdHJ1Y3QgdG0gKmdtdGltZSAo
Y29uc3QgdGltZV90ICopOworc3RydWN0IHRtICpsb2NhbHRpbWUgKGNvbnN0IHRpbWVfdCAqKTsK
K2NoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKK2NoYXIgKmN0aW1lIChjb25zdCB0
aW1lX3QgKik7CitpbnQgdGltZXNwZWNfZ2V0KHN0cnVjdCB0aW1lc3BlYyAqLCBpbnQpOworCisj
ZGVmaW5lIENMT0NLU19QRVJfU0VDIDEwMDAwMDBMCisKKyNkZWZpbmUgVElNRV9VVEMgMQorCisj
aWYgZGVmaW5lZChfUE9TSVhfU09VUkNFKSB8fCBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgXAor
IHx8IGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkgXAorIHx8
IGRlZmluZWQoX0JTRF9TT1VSQ0UpCisKK3NpemVfdCBzdHJmdGltZV9sIChjaGFyICogIF9fcmVz
dHJpY3QsIHNpemVfdCwgY29uc3QgY2hhciAqICBfX3Jlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdG0g
KiAgX19yZXN0cmljdCwgbG9jYWxlX3QpOworCitzdHJ1Y3QgdG0gKmdtdGltZV9yIChjb25zdCB0
aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitzdHJ1Y3QgdG0gKmxv
Y2FsdGltZV9yIChjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCk7CitjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgY2hhciAq
X19yZXN0cmljdCk7CitjaGFyICpjdGltZV9yIChjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKKwor
dm9pZCB0enNldCAodm9pZCk7CisKK3N0cnVjdCBpdGltZXJzcGVjIHsKKwlzdHJ1Y3QgdGltZXNw
ZWMgaXRfaW50ZXJ2YWw7CisJc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOworfTsKKworI2RlZmlu
ZSBDTE9DS19SRUFMVElNRSAgICAgICAgICAgMAorI2RlZmluZSBDTE9DS19NT05PVE9OSUMgICAg
ICAgICAgMQorI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgMgorI2RlZmluZSBDTE9D
S19USFJFQURfQ1BVVElNRV9JRCAgMworI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXICAgICAg
NAorI2RlZmluZSBDTE9DS19SRUFMVElNRV9DT0FSU0UgICAgNQorI2RlZmluZSBDTE9DS19NT05P
VE9OSUNfQ09BUlNFICAgNgorI2RlZmluZSBDTE9DS19CT09UVElNRSAgICAgICAgICAgNworI2Rl
ZmluZSBDTE9DS19SRUFMVElNRV9BTEFSTSAgICAgOAorI2RlZmluZSBDTE9DS19CT09UVElNRV9B
TEFSTSAgICAgOQorI2RlZmluZSBDTE9DS19TR0lfQ1lDTEUgICAgICAgICAxMAorI2RlZmluZSBD
TE9DS19UQUkgICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMQorCitp
bnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICop
OworaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQg
Y2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tf
c2V0dGltZSAoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tf
bmFub3NsZWVwIChjbG9ja2lkX3QsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVj
dCB0aW1lc3BlYyAqKTsKK2ludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCwgY2xvY2tpZF90
ICopOworCitzdHJ1Y3Qgc2lnZXZlbnQ7CitpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QsIHN0
cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCwgdGltZXJfdCAqX19yZXN0cmljdCk7CitpbnQgdGlt
ZXJfZGVsZXRlICh0aW1lcl90KTsKK2ludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90LCBpbnQsIGNv
bnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19y
ZXN0cmljdCk7CitpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMg
Kik7CitpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCk7CisKK2V4dGVybiBjaGFyICp0em5h
bWVbMl07CisKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8IGRlZmlu
ZWQoX0JTRF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpCitjaGFyICpzdHJwdGltZSAo
Y29uc3QgY2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgc3RydWN0IHRt
ICpfX3Jlc3RyaWN0KTsKK2V4dGVybiBpbnQgZGF5bGlnaHQ7CitleHRlcm4gbG9uZyB0aW1lem9u
ZTsKK2V4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CitzdHJ1Y3QgdG0gKmdldGRhdGUgKGNvbnN0IGNo
YXIgKik7CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChf
QlNEX1NPVVJDRSkKK2ludCBzdGltZShjb25zdCB0aW1lX3QgKik7Cit0aW1lX3QgdGltZWdtKHN0
cnVjdCB0bSAqKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRo
X3RvX3NlY3MuYyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNz
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjQzMjQ4ZmIzCi0tLSAvZGV2
L251bGwKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3Mu
YwpAQCAtMCwwICsxLDEwIEBACitpbnQgX19tb250aF90b19zZWNzKGludCBtb250aCwgaW50IGlz
X2xlYXApCit7CisJc3RhdGljIGNvbnN0IGludCBzZWNzX3Rocm91Z2hfbW9udGhbXSA9IHsKKwkJ
MCwgMzEqODY0MDAsIDU5Kjg2NDAwLCA5MCo4NjQwMCwKKwkJMTIwKjg2NDAwLCAxNTEqODY0MDAs
IDE4MSo4NjQwMCwgMjEyKjg2NDAwLAorCQkyNDMqODY0MDAsIDI3Myo4NjQwMCwgMzA0Kjg2NDAw
LCAzMzQqODY0MDAgfTsKKwlpbnQgdCA9IHNlY3NfdGhyb3VnaF9tb250aFttb250aF07CisJaWYg
KGlzX2xlYXAgJiYgbW9udGggPj0gMikgdCs9ODY0MDA7CisJcmV0dXJuIHQ7Cit9CmRpZmYgLS1n
aXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jIGIvbGliL3Vr
dGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMC4uMDkzZDkwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1l
L211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jCkBAIC0wLDAgKzEsODIgQEAKKyNpbmNs
dWRlICJ0aW1lX2ltcGwuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworLyogMjAwMC0wMy0wMSAo
bW9kIDQwMCB5ZWFyLCBpbW1lZGlhdGVseSBhZnRlciBmZWIyOSAqLworI2RlZmluZSBMRUFQT0NI
ICg5NDY2ODQ4MDBMTCArIDg2NDAwKigzMSsyOSkpCisKKyNkZWZpbmUgREFZU19QRVJfNDAwWSAo
MzY1KjQwMCArIDk3KQorI2RlZmluZSBEQVlTX1BFUl8xMDBZICgzNjUqMTAwICsgMjQpCisjZGVm
aW5lIERBWVNfUEVSXzRZICAgKDM2NSo0ICAgKyAxKQorCitpbnQgX19zZWNzX3RvX3RtKGxvbmcg
bG9uZyB0LCBzdHJ1Y3QgdG0gKnRtKQoreworCWxvbmcgbG9uZyBkYXlzLCBzZWNzLCB5ZWFyczsK
KwlpbnQgcmVtZGF5cywgcmVtc2VjcywgcmVteWVhcnM7CisJaW50IHFjX2N5Y2xlcywgY19jeWNs
ZXMsIHFfY3ljbGVzOworCWludCBtb250aHM7CisJaW50IHdkYXksIHlkYXksIGxlYXA7CisJc3Rh
dGljIGNvbnN0IGNoYXIgZGF5c19pbl9tb250aFtdID0gezMxLDMwLDMxLDMwLDMxLDMxLDMwLDMx
LDMwLDMxLDMxLDI5fTsKKworCS8qIFJlamVjdCB0aW1lX3QgdmFsdWVzIHdob3NlIHllYXIgd291
bGQgb3ZlcmZsb3cgaW50ICovCisJaWYgKHQgPCBJTlRfTUlOICogMzE2MjI0MDBMTCB8fCB0ID4g
SU5UX01BWCAqIDMxNjIyNDAwTEwpCisJCXJldHVybiAtMTsKKworCXNlY3MgPSB0IC0gTEVBUE9D
SDsKKwlkYXlzID0gc2VjcyAvIDg2NDAwOworCXJlbXNlY3MgPSBzZWNzICUgODY0MDA7CisJaWYg
KHJlbXNlY3MgPCAwKSB7CisJCXJlbXNlY3MgKz0gODY0MDA7CisJCWRheXMtLTsKKwl9CisKKwl3
ZGF5ID0gKDMrZGF5cyklNzsKKwlpZiAod2RheSA8IDApIHdkYXkgKz0gNzsKKworCXFjX2N5Y2xl
cyA9IGRheXMgLyBEQVlTX1BFUl80MDBZOworCXJlbWRheXMgPSBkYXlzICUgREFZU19QRVJfNDAw
WTsKKwlpZiAocmVtZGF5cyA8IDApIHsKKwkJcmVtZGF5cyArPSBEQVlTX1BFUl80MDBZOworCQlx
Y19jeWNsZXMtLTsKKwl9CisKKwljX2N5Y2xlcyA9IHJlbWRheXMgLyBEQVlTX1BFUl8xMDBZOwor
CWlmIChjX2N5Y2xlcyA9PSA0KSBjX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gY19jeWNsZXMgKiBE
QVlTX1BFUl8xMDBZOworCisJcV9jeWNsZXMgPSByZW1kYXlzIC8gREFZU19QRVJfNFk7CisJaWYg
KHFfY3ljbGVzID09IDI1KSBxX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gcV9jeWNsZXMgKiBEQVlT
X1BFUl80WTsKKworCXJlbXllYXJzID0gcmVtZGF5cyAvIDM2NTsKKwlpZiAocmVteWVhcnMgPT0g
NCkgcmVteWVhcnMtLTsKKwlyZW1kYXlzIC09IHJlbXllYXJzICogMzY1OworCisJbGVhcCA9ICFy
ZW15ZWFycyAmJiAocV9jeWNsZXMgfHwgIWNfY3ljbGVzKTsKKwl5ZGF5ID0gcmVtZGF5cyArIDMx
ICsgMjggKyBsZWFwOworCWlmICh5ZGF5ID49IDM2NStsZWFwKSB5ZGF5IC09IDM2NStsZWFwOwor
CisJeWVhcnMgPSByZW15ZWFycyArIDQqcV9jeWNsZXMgKyAxMDAqY19jeWNsZXMgKyA0MDBMTCpx
Y19jeWNsZXM7CisKKwlmb3IgKG1vbnRocz0wOyBkYXlzX2luX21vbnRoW21vbnRoc10gPD0gcmVt
ZGF5czsgbW9udGhzKyspCisJCXJlbWRheXMgLT0gZGF5c19pbl9tb250aFttb250aHNdOworCisJ
aWYgKG1vbnRocyA+PSAxMCkgeworCQltb250aHMgLT0gMTI7CisJCXllYXJzKys7CisJfQorCisJ
aWYgKHllYXJzKzEwMCA+IElOVF9NQVggfHwgeWVhcnMrMTAwIDwgSU5UX01JTikKKwkJcmV0dXJu
IC0xOworCisJdG0tPnRtX3llYXIgPSB5ZWFycyArIDEwMDsKKwl0bS0+dG1fbW9uID0gbW9udGhz
ICsgMjsKKwl0bS0+dG1fbWRheSA9IHJlbWRheXMgKyAxOworCXRtLT50bV93ZGF5ID0gd2RheTsK
Kwl0bS0+dG1feWRheSA9IHlkYXk7CisKKwl0bS0+dG1faG91ciA9IHJlbXNlY3MgLyAzNjAwOwor
CXRtLT50bV9taW4gPSByZW1zZWNzIC8gNjAgJSA2MDsKKwl0bS0+dG1fc2VjID0gcmVtc2VjcyAl
IDYwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0
ZWQvc3JjL19fdG1fdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3Rt
X3RvX3NlY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYzI5ZmE5ODUK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9f
c2Vjcy5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlICJ0aW1lX2ltcGwuaCIKKworbG9uZyBs
b25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3QgdG0gKnRtKQoreworCWludCBpc19sZWFwOwor
CWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRtX3llYXI7CisJaW50IG1vbnRoID0gdG0tPnRtX21vbjsK
KwlpZiAobW9udGggPj0gMTIgfHwgbW9udGggPCAwKSB7CisJCWludCBhZGogPSBtb250aCAvIDEy
OworCQltb250aCAlPSAxMjsKKwkJaWYgKG1vbnRoIDwgMCkgeworCQkJYWRqLS07CisJCQltb250
aCArPSAxMjsKKwkJfQorCQl5ZWFyICs9IGFkajsKKwl9CisJbG9uZyBsb25nIHQgPSBfX3llYXJf
dG9fc2Vjcyh5ZWFyLCAmaXNfbGVhcCk7CisJdCArPSBfX21vbnRoX3RvX3NlY3MobW9udGgsIGlz
X2xlYXApOworCXQgKz0gODY0MDBMTCAqICh0bS0+dG1fbWRheS0xKTsKKwl0ICs9IDM2MDBMTCAq
IHRtLT50bV9ob3VyOworCXQgKz0gNjBMTCAqIHRtLT50bV9taW47CisJdCArPSB0bS0+dG1fc2Vj
OworCXJldHVybiB0OworfQpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy9fX3llYXJfdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3llYXJf
dG9fc2Vjcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4yODI0ZWM2ZAot
LS0gL2Rldi9udWxsCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3Rv
X3NlY3MuYwpAQCAtMCwwICsxLDQ3IEBACitsb25nIGxvbmcgX195ZWFyX3RvX3NlY3MobG9uZyBs
b25nIHllYXIsIGludCAqaXNfbGVhcCkKK3sKKwlpZiAoeWVhci0yVUxMIDw9IDEzNikgeworCQlp
bnQgeSA9IHllYXI7CisJCWludCBsZWFwcyA9ICh5LTY4KT4+MjsKKwkJaWYgKCEoKHktNjgpJjMp
KSB7CisJCQlsZWFwcy0tOworCQkJaWYgKGlzX2xlYXApICppc19sZWFwID0gMTsKKwkJfSBlbHNl
IGlmIChpc19sZWFwKSAqaXNfbGVhcCA9IDA7CisJCXJldHVybiAzMTUzNjAwMCooeS03MCkgKyA4
NjQwMCpsZWFwczsKKwl9CisKKwlpbnQgY3ljbGVzLCBjZW50dXJpZXMsIGxlYXBzLCByZW07CisK
KwlpZiAoIWlzX2xlYXApIGlzX2xlYXAgPSAmKGludCl7MH07CisJY3ljbGVzID0gKHllYXItMTAw
KSAvIDQwMDsKKwlyZW0gPSAoeWVhci0xMDApICUgNDAwOworCWlmIChyZW0gPCAwKSB7CisJCWN5
Y2xlcy0tOworCQlyZW0gKz0gNDAwOworCX0KKwlpZiAoIXJlbSkgeworCQkqaXNfbGVhcCA9IDE7
CisJCWNlbnR1cmllcyA9IDA7CisJCWxlYXBzID0gMDsKKwl9IGVsc2UgeworCQlpZiAocmVtID49
IDIwMCkgeworCQkJaWYgKHJlbSA+PSAzMDApIGNlbnR1cmllcyA9IDMsIHJlbSAtPSAzMDA7CisJ
CQllbHNlIGNlbnR1cmllcyA9IDIsIHJlbSAtPSAyMDA7CisJCX0gZWxzZSB7CisJCQlpZiAocmVt
ID49IDEwMCkgY2VudHVyaWVzID0gMSwgcmVtIC09IDEwMDsKKwkJCWVsc2UgY2VudHVyaWVzID0g
MDsKKwkJfQorCQlpZiAoIXJlbSkgeworCQkJKmlzX2xlYXAgPSAwOworCQkJbGVhcHMgPSAwOwor
CQl9IGVsc2UgeworCQkJbGVhcHMgPSByZW0gLyA0VTsKKwkJCXJlbSAlPSA0VTsKKwkJCSppc19s
ZWFwID0gIXJlbTsKKwkJfQorCX0KKworCWxlYXBzICs9IDk3KmN5Y2xlcyArIDI0KmNlbnR1cmll
cyAtICppc19sZWFwOworCisJcmV0dXJuICh5ZWFyLTEwMCkgKiAzMTUzNjAwMExMICsgbGVhcHMg
KiA4NjQwMExMICsgOTQ2Njg0ODAwICsgODY0MDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdWt0aW1l
L211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy90aW1lZ20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGU1OTA3ZDcK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5j
CkBAIC0wLDAgKzEsMTggQEAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlICJ0aW1lX2lt
cGwuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorCit0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSAqdG0p
Cit7CisJc3RydWN0IHRtIG5ldzsKKwlsb25nIGxvbmcgdCA9IF9fdG1fdG9fc2Vjcyh0bSk7CisJ
aWYgKF9fc2Vjc190b190bSh0LCAmbmV3KSA8IDApIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJ
CXJldHVybiAtMTsKKwl9CisJKnRtID0gbmV3OworCXRtLT50bV9pc2RzdCA9IDA7CisJdG0tPl9f
dG1fZ210b2ZmID0gMDsKKwl0bS0+X190bV96b25lID0gX191dGM7CisJcmV0dXJuIHQ7Cit9Ci0t
IAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 13:56:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 13:56:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i836X-0002IK-T8; Wed, 11 Sep 2019 13:56:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i836W-0002IB-IG
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 13:56:16 +0000
X-Inumbo-ID: e6a6ccf4-d49b-11e9-978d-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.73]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e6a6ccf4-d49b-11e9-978d-bc764e2007e4;
 Wed, 11 Sep 2019 13:56:07 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AYk8jWiqpG501EZogaKtXFzK1KDolQyhGyTIfvQxEldgj9u8cBndFk5YMVxPe4mNgPRP7NgACKRKgiM40aR4ayudF7sFH7jchQJQN3jPyR5U+XDbNt6ApI2QIP9UbTCoeF8m//lnSGTSTvCNCGN987igjPiNRtuMP3hR9Grve5F+SE1RuiSpCErICxZFVtkXDi0QhnR5ODL+NJlpqCoCaXnEOUcVPRQXM/3reMLVaNi5cqFkRv6D6vWZGiR4ctnknkWxRxh2URw0nAhRAFpjqNbUOhGRq+EOtKn7DBX3vxHwXHmgQlSgRc8bNRobOatUDhJsc4kkAtPylkKrRYCOcA==
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=gaVmJfLBoTRUzKQegHLxP2RAmAxHU+tnVtIDUEGM6SU=;
 b=XnpH1nnpeIpVJh/WeDkhNAu/VQQZ5wTgWeWngU4VKGk4NlgEX3Qx4vGJEiVsRPblDcX3e+mSzt64qOTyuaIperzKGiL9Q+pomauamDNBWGoW3UgEsrM/kcgjJCW3aIMzsx4te5S4OPu7jb6CDEiuTlcUhJKuwe9ibsa03kBJN1ULXE/00neClZYpo1/noSsDP7K2E/t5Ka39DiMKS/ZiSYcLSo3iX80eR8c5Gu7J+ASNJVOwZcrW+aIyS4Q3uEJbaOKHvyyEz+r7WrzXod2ex0RHbv4gX1RT4wrTvc4bwYnCCgBnLlAD1TN+thbQYoR3za+KOdXUEvB4G6xahzwfvg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Wed, 11 Sep
 2019 13:56:05 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 13:56:05 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 4/4] Update time.h from nolibc to use uktime
Thread-Index: AQHVaKin0AI8NGetw0qtj2kCcHzIYQ==
Date: Wed, 11 Sep 2019 13:56:05 +0000
Message-ID: <20190911135549.32005-5-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1P193CA0005.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:800:bd::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 195984f4-e0c0-408c-13a6-08d736bfc9dc
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5068; 
x-ms-traffictypediagnostic: PR1PR01MB5068:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB5068316C9187819F64CC8871A6B10@PR1PR01MB5068.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:449;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(346002)(39850400004)(136003)(366004)(376002)(199004)(189003)(71190400001)(786003)(5640700003)(64756008)(52116002)(386003)(2501003)(66556008)(53936002)(66476007)(316002)(86362001)(5660300002)(8936002)(6436002)(66946007)(11346002)(50226002)(25786009)(46003)(6116002)(6506007)(66446008)(478600001)(4326008)(45776006)(99286004)(81156014)(7736002)(54906003)(6512007)(1076003)(486006)(446003)(71200400001)(476003)(256004)(8676002)(305945005)(4744005)(102836004)(2616005)(2906002)(6486002)(2351001)(6916009)(81166006)(76176011)(186003)(14454004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5068;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: bEOva+dAJkp7CAvNCjJ67fuXDWS6fSzXj2AmlioLkvb3pOQCglNhsHxxl0x36lE1FXRqzL+ZCzzD2KMR0MLLS9/Mzty+Q2C4GK4g/jkHOhkhBctYPQ+c0SfBrgaMK+DCB7IFhuaY/MuAJmuk4xCOGMs1PHjk26fix+auqnoavuMm9IrZQgbDed8jER1XjIWR3KiVMyLRAPRGwBdvW6stCUBvBqEVEeuNTJ1Woqb2LEBnuvkaJJjZa9MS/YlrTzWVRKGwAyUi5kxvTcibVmhRY3DBdCXt2FidXs8gGlPszg4VfX0FxyicKR8ER48mxI7go26Kj/Z0PQ28Ecpsr2gFGF96q1JmsZEsGcgiOhS3FM+b2N5Cmn2m9nfmDnLXLxBuBU+yJGPSmzl5baa/t9/PPPi/XWuroicEO94r8OwmEEo=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 195984f4-e0c0-408c-13a6-08d736bfc9dc
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 13:56:05.1330 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: RUp/fO0t3CDqHMENRjdZwCpSy6qobTcuXUxsNN/8lvMiZAVnxStxildtEoMRROPDCboFz9VHrK6HMS6ZXcJ/dKFSck5e/gB1jjXzFohpUJbCUWJyEC68unWUU4hBCxbp
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5068
Subject: [Minios-devel] [UNIKRAFT PATCH 4/4] Update time.h from nolibc to
 use uktime
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgotLS0KIGxpYi9ub2xpYmMvaW5jbHVkZS90aW1lLmggfCAyNyArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKSwgMjYg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL25vbGliYy9pbmNsdWRlL3RpbWUuaCBiL2xp
Yi9ub2xpYmMvaW5jbHVkZS90aW1lLmgKaW5kZXggZjc3YmIyZmQuLmJlNWI3YTBmIDEwMDY0NAot
LS0gYS9saWIvbm9saWJjL2luY2x1ZGUvdGltZS5oCisrKyBiL2xpYi9ub2xpYmMvaW5jbHVkZS90
aW1lLmgKQEAgLTM1LDMxICszNSw2IEBACiAjaWZuZGVmIF9fVElNRV9IX18KICNkZWZpbmUgX19U
SU1FX0hfXwogCi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotI2lmZGVmIF9fY3BsdXNwbHVzCi1l
eHRlcm4gIkMiIHsKLSNlbmRpZgotCi0jZGVmaW5lIF9fTkVFRF9OVUxMCi0jZGVmaW5lIF9fTkVF
RF90aW1lX3QKLSNkZWZpbmUgX19ORUVEX3N0cnVjdF90aW1lc3BlYwotI2RlZmluZSBfX05FRURf
Y2xvY2tpZF90Ci0jaW5jbHVkZSA8bm9saWJjLWludGVybmFsL3NoYXJlZGRlZnMuaD4KLQotI2Rl
ZmluZSBDTE9DS19SRUFMVElNRSAgMAotI2RlZmluZSBDTE9DS19NT05PVE9OSUMgMQotCi1zdHJ1
Y3QgaXRpbWVyc3BlYyB7Ci0Jc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwotCXN0cnVjdCB0
aW1lc3BlYyBpdF92YWx1ZTsKLX07Ci0KLWludCBuYW5vc2xlZXAoY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpyZXEsIHN0cnVjdCB0aW1lc3BlYyAqcmVtKTsKLWludCBjbG9ja19nZXR0aW1lKGNsb2Nr
aWRfdCBjbGssIHN0cnVjdCB0aW1lc3BlYyAqdHApOwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0K
LSNlbmRpZgorI2luY2x1ZGUgPHVrdGltZS90aW1lLmg+CiAKICNlbmRpZiAvKiBfX1RJTUVfSF9f
ICovCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 13:56:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 13:56:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i836c-0002J5-Uz; Wed, 11 Sep 2019 13:56:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i836b-0002It-IK
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 13:56:21 +0000
X-Inumbo-ID: e79f4d16-d49b-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.79]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e79f4d16-d49b-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 13:56:08 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LRPvoQa0xh4VxBuBoSPFnhqe/I9ttRNSTbuQAwKEIC0K4sMdxN2L4TJE2ZlDW4OAnycP9HEFCsNiJ+U8ZFM/dr8xqXlZBwLu/FARbJ759tMPj06l/urOExtvonGRAqoRSIy8UyiQXbY0/PT4erVgUcaV87s6Y3TiTs2ycJKTwVUkVw83ldxJReBN57xG773xRcknXbycVSaAkem2fclDgj83NfsgxRNoBOZH6UZ0l1sUmNZXxXuXoHLMd6HfP1FZwMcU8yj0Nvc/3defz80oUTpVyAwAzzsqKp6jqObTjoTQsV2BfoRf06s8h3WFI8kW0d4AWEuSTmyIDSTbUDSrqQ==
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=wRA4m+YnK2vUSdnLumzlRUDLIlHxFG+CLh6i4U2bOW8=;
 b=Z83+tW2PDmSugoNVWsb4hPd/EYEPkEKpRBaqi8+S4htxofkXRGpu0T92PycUUNUFYLpDZ8+O+jcRTl3tAanwfzlG/z0MXVQ1wjoONkBUKwSZ7GdnGxd153UnhS7vCcaHX4nev3iJegNYBG1ECOoYcdZ2LTS50q4iQlDBY7kyoUs/J5J2Xwjib4hnjpTVNNxcfFEUcXVpZGPyro99EpfJ280I7u+n6wuq0OG0X9YMOmmS0UCiRBCcH5uZqS/8klYpSyu7ng9d/6pInOq0Qh2/b+iUVoJ7xD6ZYRBJQ+9qb595WTAeF0nqrhJii9/pGqN8f1MoQAroh5bm9xugZyEmgw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4892.eurprd01.prod.exchangelabs.com (20.177.209.87) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Wed, 11 Sep
 2019 13:56:04 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 13:56:04 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 2/4] lib/uktime: Adapt timegm implementation to
 Unikraft
Thread-Index: AQHVaKimCBt50vjmEUapPCb7v8AFMg==
Date: Wed, 11 Sep 2019 13:56:03 +0000
Message-ID: <20190911135549.32005-3-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1P193CA0005.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:800:bd::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: a91aeaf2-573b-4e9c-616e-08d736bfc8b4
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4892; 
x-ms-traffictypediagnostic: PR1PR01MB4892:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48925350C6C70ACD4901DD52A6B10@PR1PR01MB4892.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:7691;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(39850400004)(136003)(376002)(346002)(366004)(189003)(199004)(6486002)(45776006)(86362001)(66556008)(5660300002)(6436002)(66946007)(53936002)(5640700003)(478600001)(99286004)(64756008)(256004)(6512007)(2501003)(2906002)(6506007)(386003)(2616005)(14454004)(52116002)(486006)(46003)(476003)(6116002)(81156014)(11346002)(66476007)(7736002)(305945005)(102836004)(66446008)(446003)(71200400001)(4326008)(50226002)(71190400001)(25786009)(2351001)(6916009)(316002)(1076003)(76176011)(8936002)(81166006)(786003)(186003)(54906003)(8676002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4892;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: xqQ/ckOOX5cdCV5PO7WJKRSHghulzQvIgGl9qRXBiJqs48X9wAy49FjQmVaXUtx3fk8Btzd+oUGhUWHCQ0evx37qJuUYelN42BPvZ8vfJpi9W+AmYop98lKdSQT1OIpqPdoaAdIzG1TOhcrgjd0bxKRcoLEaPxLFGjSb8sDAnurwevDObbWu9bw1vGzlKXTzgOd24xU3wYzVtSXVQVbcEQ76DIVH6YFCkYEmmiUUgwOZikijUR2UU7hg5D8XCQD87CwHCkb12xaLuX40wMjbOoByDM0iNTZZoUDZzLQCSKU9zAf0WIASNbuXppsQ2JPyTACLTCUQZyljpbL1A9+ORu5/dhaztWFFi5w3ZB/z0B+e0zOJo4bHjTIyb2XLwBdDcXRZa/zChe8311GqCfAvKWZTrB4iGf+97XcRQ/ofYlQ=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: a91aeaf2-573b-4e9c-616e-08d736bfc8b4
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 13:56:03.6438 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: RFsfaoOdeShcs9sszaSePjhtRPJGoNmBNaPvZ8L52w1iOu+uzi5B0416laY0ao2TDTsf0HM53EXsHZH+FXNBcT46hTg9woKOcs1nyK7IIXo41HHQQ60cJIuRdfHOLXlv
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4892
Subject: [Minios-devel] [UNIKRAFT PATCH 2/4] lib/uktime: Adapt timegm
 implementation to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgZXhjbHVkZSBmcm9tIHVrdGltZS90aW1lLmggdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbm90
IGJlZW4gaW1wbGVtZW50ZWQgaW4KVW5pa3JhZnQuIF90aW1lX3R5cGVzLmggaG9sZHMgdGhlIGRl
ZmluaXRpb25zIG9mIHRoZSB0eXBlcyB1c2VkCmluIHVrdGltZS90aW1lLmgKClNpZ25lZC1vZmYt
Ynk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5y
bz4KLS0tCiBsaWIvdWt0aW1lL01ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgfCAx
MyArKysrKystCiBsaWIvdWt0aW1lL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgICAgICAg
fCAgMiArLQogbGliL3VrdGltZS9pbmNsdWRlL190aW1lX3R5cGVzLmggICAgICAgICAgICAgIHwg
MjIgKysrKysrKysrKysKIC4uLi9tdXNsLWltcG9ydGVkL2luY2x1ZGUvX3RpbWVfdHlwZXMuaCAg
ICAgICB8IDIxICsrKysrKysrKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Rp
bWVfaW1wbC5oICB8IDE2ICsrKy0tLS0tCiAuLi4vbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3VrdGlt
ZS90aW1lLmggICAgICAgfCAzOCArKysrKysrKysrKysrKy0tLS0tCiBsaWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL3RpbWVnbS5jICAgICAgICAgfCAgMiArCiA3IGZpbGVzIGNoYW5nZWQsIDky
IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91
a3RpbWUvaW5jbHVkZS9fdGltZV90eXBlcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGlt
ZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvX3RpbWVfdHlwZXMuaAoKZGlmZiAtLWdpdCBhL2xpYi91
a3RpbWUvTWFrZWZpbGUudWsgYi9saWIvdWt0aW1lL01ha2VmaWxlLnVrCmluZGV4IDljMWY4YjM1
Li42MmJlZTkxNCAxMDA2NDQKLS0tIGEvbGliL3VrdGltZS9NYWtlZmlsZS51aworKysgYi9saWIv
dWt0aW1lL01ha2VmaWxlLnVrCkBAIC0xLDQgKzEsMTMgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGli
X3MsbGlidWt0aW1lLCQoQ09ORklHX0xJQlVLVElNRSkpKQogCi1DSU5DTFVERVMtJChDT05GSUdf
TElCVUtUSU1FKSAgICArPSAtSSQoTElCVUtUSU1FX0JBU0UpL2luY2x1ZGUKLUNYWElOQ0xVREVT
LSQoQ09ORklHX0xJQlVLVElNRSkgICs9IC1JJChMSUJVS1RJTUVfQkFTRSkvaW5jbHVkZQorTElC
VUtUSU1FX0NPTU1PTl9JTkNMVURFUy15CSs9IC1JJChMSUJVS1RJTUVfQkFTRSkvaW5jbHVkZQor
TElCVUtUSU1FX0NPTU1PTl9JTkNMVURFUy15CSs9IC1JJChMSUJVS1RJTUVfQkFTRSkvbXVzbC1p
bXBvcnRlZC9pbmNsdWRlCisKK0NJTkNMVURFUy0kKENPTkZJR19MSUJVS1RJTUUpICAgICs9ICQo
TElCVUtUSU1FX0NPTU1PTl9JTkNMVURFUy15KQorQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUtU
SU1FKSAgKz0gJChMSUJVS1RJTUVfQ09NTU9OX0lOQ0xVREVTLXkpCisKK0xJQlVLVElNRV9TUkNT
LXkgKz0gJChMSUJVS1RJTUVfQkFTRSkvbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNz
LmMKK0xJQlVLVElNRV9TUkNTLXkgKz0gJChMSUJVS1RJTUVfQkFTRSkvbXVzbC1pbXBvcnRlZC9z
cmMvX19zZWNzX3RvX3RtLmMKK0xJQlVLVElNRV9TUkNTLXkgKz0gJChMSUJVS1RJTUVfQkFTRSkv
bXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMKK0xJQlVLVElNRV9TUkNTLXkgKz0gJChMSUJVS1RJ
TUVfQkFTRSkvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMKK0xJQlVLVElNRV9TUkNT
LXkgKz0gJChMSUJVS1RJTUVfQkFTRSkvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3Mu
YwpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9leHBvcnRzeW1zLnVrIGIvbGliL3VrdGltZS9leHBv
cnRzeW1zLnVrCmluZGV4IGM4NmMzZjM1Li5hMDBkMTYwMSAxMDA2NDQKLS0tIGEvbGliL3VrdGlt
ZS9leHBvcnRzeW1zLnVrCisrKyBiL2xpYi91a3RpbWUvZXhwb3J0c3ltcy51awpAQCAtMSArMSBA
QAotbm9uZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3RpbWVnbQpkaWZmIC0tZ2l0IGEv
bGliL3VrdGltZS9pbmNsdWRlL190aW1lX3R5cGVzLmggYi9saWIvdWt0aW1lL2luY2x1ZGUvX3Rp
bWVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uOTQ1ZGUwMmIK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL2luY2x1ZGUvX3RpbWVfdHlwZXMuaApAQCAt
MCwwICsxLDIyIEBACisjaW5jbHVkZSA8dWsvYXJjaC90eXBlcy5oPgorCisjaWYgKGRlZmluZWQg
X19ORUVEX2Nsb2NraWRfdCAmJiAhZGVmaW5lZCBfX0RFRklORURfY2xvY2tpZF90KQordHlwZWRl
ZiBpbnQgY2xvY2tpZF90OworI2RlZmluZSBfX0RFRklORURfY2xvY2tpZF90CisjZW5kaWYKKwor
I2lmIChkZWZpbmVkIF9fTkVFRF90aW1lX3QgJiYgIWRlZmluZWQgX19ERUZJTkVEX3RpbWVfdCkK
K3R5cGVkZWYgbG9uZyB0aW1lX3Q7CisjZGVmaW5lIF9fREVGSU5FRF90aW1lX3QKKyNlbmRpZgor
CisjaWYgKGRlZmluZWQgX19ORUVEX3N0cnVjdF90aW1lc3BlYyAmJgkJCVwKKwkJIWRlZmluZWQg
X19ERUZJTkVEX3N0cnVjdF90aW1lc3BlYykKK3N0cnVjdCB0aW1lc3BlYyB7CisJdGltZV90CXR2
X3NlYzsKKwlsb25nCXR2X25zZWM7Cit9OworI2RlZmluZSBfX0RFRklORURfc3RydWN0X3RpbWVz
cGVjCisjZW5kaWYKKworCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5j
bHVkZS9fdGltZV90eXBlcy5oIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvX3Rp
bWVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uODM5OTIxYTIK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9fdGlt
ZV90eXBlcy5oCkBAIC0wLDAgKzEsMjEgQEAKKyNpbmNsdWRlIDx1ay9hcmNoL3R5cGVzLmg+CisK
KyNpZiAoZGVmaW5lZCBfX05FRURfY2xvY2tpZF90ICYmICFkZWZpbmVkIF9fREVGSU5FRF9jbG9j
a2lkX3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiBpbnQgY2xvY2tp
ZF90OworI2RlZmluZSBfX0RFRklORURfY2xvY2tpZF90CisjZW5kaWYKKworI2lmIChkZWZpbmVk
IF9fTkVFRF90aW1lX3QgJiYgIWRlZmluZWQgX19ERUZJTkVEX3RpbWVfdCkKK3R5cGVkZWYgbG9u
ZyB0aW1lX3Q7CisjZGVmaW5lIF9fREVGSU5FRF90aW1lX3QKKyNlbmRpZgorCisjaWYgKGRlZmlu
ZWQgX19ORUVEX3N0cnVjdF90aW1lc3BlYyAmJiAhZGVmaW5lZCBfX0RFRklORURfc3RydWN0X3Rp
bWVzcGVjKQorc3RydWN0IHRpbWVzcGVjIHsKKwl0aW1lX3QJdHZfc2VjOworCWxvbmcJdHZfbnNl
YzsKK307CisjZGVmaW5lIF9fREVGSU5FRF9zdHJ1Y3RfdGltZXNwZWMKKyNlbmRpZgorCisKZGlm
ZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWVfaW1wbC5oIGIv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZV9pbXBsLmgKaW5kZXggZjI2ZDgw
MDUuLmZiNTlmYzFhIDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVk
ZS90aW1lX2ltcGwuaAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS90aW1l
X2ltcGwuaApAQCAtMSwxMSArMSw3IEBACi0jaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVr
dGltZS90aW1lLmg+CiAKLWhpZGRlbiBpbnQgX19kYXlzX2luX21vbnRoKGludCwgaW50KTsKLWhp
ZGRlbiBpbnQgX19tb250aF90b19zZWNzKGludCwgaW50KTsKLWhpZGRlbiBsb25nIGxvbmcgX195
ZWFyX3RvX3NlY3MobG9uZyBsb25nLCBpbnQgKik7Ci1oaWRkZW4gbG9uZyBsb25nIF9fdG1fdG9f
c2Vjcyhjb25zdCBzdHJ1Y3QgdG0gKik7Ci1oaWRkZW4gY29uc3QgY2hhciAqX190bV90b190em5h
bWUoY29uc3Qgc3RydWN0IHRtICopOwotaGlkZGVuIGludCBfX3NlY3NfdG9fdG0obG9uZyBsb25n
LCBzdHJ1Y3QgdG0gKik7Ci1oaWRkZW4gdm9pZCBfX3NlY3NfdG9fem9uZShsb25nIGxvbmcsIGlu
dCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBjb25zdCBjaGFyICoqKTsKLWhpZGRlbiBjb25zdCBj
aGFyICpfX3N0cmZ0aW1lX2ZtdF8xKGNoYXIgKCopWzEwMF0sIHNpemVfdCAqLCBpbnQsIGNvbnN0
IHN0cnVjdCB0bSAqLCBsb2NhbGVfdCwgaW50KTsKLWV4dGVybiBoaWRkZW4gY29uc3QgY2hhciBf
X3V0Y1tdOworaW50IF9fbW9udGhfdG9fc2VjcyhpbnQsIGludCk7Citsb25nIGxvbmcgX195ZWFy
X3RvX3NlY3MobG9uZyBsb25nLCBpbnQgKik7Citsb25nIGxvbmcgX190bV90b19zZWNzKGNvbnN0
IHN0cnVjdCB0bSAqKTsKK2ludCBfX3NlY3NfdG9fdG0obG9uZyBsb25nLCBzdHJ1Y3QgdG0gKik7
CitleHRlcm4gY29uc3QgY2hhciBfX3V0Y1tdOwpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL2luY2x1ZGUvdWt0aW1lL3RpbWUuaCBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRl
ZC9pbmNsdWRlL3VrdGltZS90aW1lLmgKaW5kZXggNjcyYjNmYzMuLmI2NDU2MGFiIDEwMDY0NAot
LS0gYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS91a3RpbWUvdGltZS5oCisrKyBi
L2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3VrdGltZS90aW1lLmgKQEAgLTEsMTgg
KzEsMjUgQEAKLSNpZm5kZWYJX1RJTUVfSAotI2RlZmluZSBfVElNRV9ICisjaWZuZGVmIF9VS1RJ
TUVfVElNRV9ICisjZGVmaW5lIF9VS1RJTUVfVElNRV9ICisKKyNpbmNsdWRlIDx1ay9jb25maWcu
aD4KKworI2lmZGVmIENPTkZJR19MSUJOT0xJQkMKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2Vu
ZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2luY2x1
ZGUgPGZlYXR1cmVzLmg+Ci0KKyNpZm5kZWYgTlVMTAogI2lmZGVmIF9fY3BsdXNwbHVzCiAjZGVm
aW5lIE5VTEwgMEwKICNlbHNlCiAjZGVmaW5lIE5VTEwgKCh2b2lkKikwKQogI2VuZGlmCisjZW5k
aWYKIAorI2RlZmluZSBfR05VX1NPVVJDRQogCiAjZGVmaW5lIF9fTkVFRF9zaXplX3QKICNkZWZp
bmUgX19ORUVEX3RpbWVfdApAQCAtMjgsNyArMzUsMTIgQEAgZXh0ZXJuICJDIiB7CiAjZGVmaW5l
IF9fTkVFRF9sb2NhbGVfdAogI2VuZGlmCiAKLSNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+Cisj
aW5jbHVkZSA8X3RpbWVfdHlwZXMuaD4KKyNpZmRlZiBDT05GSUdfTElCTk9MSUJDCisjaW5jbHVk
ZSA8bm9saWJjLWludGVybmFsL3NoYXJlZGRlZnMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkZGVm
Lmg+CisjZW5kaWYKIAogI2lmIGRlZmluZWQoX0JTRF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9T
T1VSQ0UpCiAjZGVmaW5lIF9fdG1fZ210b2ZmIHRtX2dtdG9mZgpAQCAtNDksNiArNjEsNyBAQCBz
dHJ1Y3QgdG0gewogCWNvbnN0IGNoYXIgKl9fdG1fem9uZTsKIH07CiAKKyNpZiAwCiBjbG9ja190
IGNsb2NrICh2b2lkKTsKIHRpbWVfdCB0aW1lICh0aW1lX3QgKik7CiBkb3VibGUgZGlmZnRpbWUg
KHRpbWVfdCwgdGltZV90KTsKQEAgLTU5LDYgKzcyLDcgQEAgc3RydWN0IHRtICpsb2NhbHRpbWUg
KGNvbnN0IHRpbWVfdCAqKTsKIGNoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKIGNo
YXIgKmN0aW1lIChjb25zdCB0aW1lX3QgKik7CiBpbnQgdGltZXNwZWNfZ2V0KHN0cnVjdCB0aW1l
c3BlYyAqLCBpbnQpOworI2VuZGlmCiAKICNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgMTAwMDAwMEwK
IApAQCAtNjgsNiArODIsNyBAQCBpbnQgdGltZXNwZWNfZ2V0KHN0cnVjdCB0aW1lc3BlYyAqLCBp
bnQpOwogIHx8IGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkg
XAogIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCiAKKyNpZiAwCiBzaXplX3Qgc3RyZnRpbWVfbCAo
Y2hhciAqICBfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKiAgX19yZXN0cmljdCwgY29u
c3Qgc3RydWN0IHRtICogIF9fcmVzdHJpY3QsIGxvY2FsZV90KTsKIAogc3RydWN0IHRtICpnbXRp
bWVfciAoY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwpA
QCAtNzYsNiArOTEsNyBAQCBjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0
cmljdCwgY2hhciAqX19yZXN0cmljdCk7CiBjaGFyICpjdGltZV9yIChjb25zdCB0aW1lX3QgKiwg
Y2hhciAqKTsKIAogdm9pZCB0enNldCAodm9pZCk7CisjZW5kaWYKIAogc3RydWN0IGl0aW1lcnNw
ZWMgewogCXN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKQEAgLTk4LDggKzExNCwxMSBAQCBz
dHJ1Y3QgaXRpbWVyc3BlYyB7CiAjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMQogCiBpbnQgbmFub3Ns
ZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOworI2lmIDAK
IGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOworI2VuZGlm
CiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CisjaWYg
MAogaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICop
OwogaW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlk
X3QsIGNsb2NraWRfdCAqKTsKQEAgLTExMiwxMCArMTMxLDEwIEBAIGludCB0aW1lcl9nZXR0aW1l
ICh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKIGludCB0aW1lcl9nZXRvdmVycnVuICh0
aW1lcl90KTsKIAogZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKLQorI2VuZGlmCiAjZW5kaWYKIAot
CisjaWYgMAogI2lmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJD
RSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkKIGNoYXIgKnN0cnB0aW1lIChjb25zdCBjaGFyICpf
X3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qp
OwogZXh0ZXJuIGludCBkYXlsaWdodDsKQEAgLTEyMywxMCArMTQyLDEyIEBAIGV4dGVybiBsb25n
IHRpbWV6b25lOwogZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAo
Y29uc3QgY2hhciAqKTsKICNlbmRpZgotCisjZW5kaWYKIAogI2lmIGRlZmluZWQoX0dOVV9TT1VS
Q0UpIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCisjaWYgMAogaW50IHN0aW1lKGNvbnN0IHRpbWVf
dCAqKTsKKyNlbmRpZgogdGltZV90IHRpbWVnbShzdHJ1Y3QgdG0gKik7CiAjZW5kaWYKIApAQCAt
MTM0LDUgKzE1NSw0IEBAIHRpbWVfdCB0aW1lZ20oc3RydWN0IHRtICopOwogfQogI2VuZGlmCiAK
LQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVn
bS5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYwppbmRleCA0ZTU5MDdk
Ny4uODBlMjUwNmQgMTAwNjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGlt
ZWdtLmMKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYwpAQCAtMiw2
ICsyLDggQEAKICNpbmNsdWRlICJ0aW1lX2ltcGwuaCIKICNpbmNsdWRlIDxlcnJuby5oPgogCitj
b25zdCBjaGFyIF9fdXRjW10gPSAiVVRDIjsKKwogdGltZV90IHRpbWVnbShzdHJ1Y3QgdG0gKnRt
KQogewogCXN0cnVjdCB0bSBuZXc7Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 13:56:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 13:56:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i836i-0002Js-0Y; Wed, 11 Sep 2019 13:56:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i836g-0002Jh-ID
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 13:56:26 +0000
X-Inumbo-ID: e89a1b2e-d49b-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.79]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e89a1b2e-d49b-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 13:56:10 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=mS3rHQDpti2N9279nf9IHO4tgnROgD6dHcCvuGy7LsaMIAJw31UZZSl/Akqnb3kJDRnNGa4dZEw2qaEo7DFtmbTJkK9c/i3VRUbE2zmVPStditG3AT0hYlOIGWOt7Rwm5NYU+RQjNd0SMqqdt7vruoNCnPKG6bYliOIVV3vpRG5ulvEQlLHBjC9QmBWLb2ljYmIkQXWI/npheONToiJ3AooDvJFZWyNrzpVimsag8iCo30geUptV+jnuAMn08EmKfUqYvX9+Z5ElFf/E2sbWo0wZYEY4TvGzu8p8dn62ekBxwQk6Cez1oVXauRw/iwYTe6/n6347VbDP2Um0m4oCbA==
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=3BE89aXRNbUON7f9CfUgdWSHNvZ2GiGV6/84z7qRXUY=;
 b=DLHDAkSVqCXEIT2zpGOOkBQ9XQ4Ba2fsPvDKw9Gq9EwO66qCnNH4I+++iUAORngNjYsuM9abfbUfDRgZkpuUr05iqefHSG9oNUQf0NPzqd7GEkgGPHBlW6CWOjPp2nFX7lcxaoZMdr5tgvCf65XZcOaTjkoZArMHkRfCTVIXDLfIKzylfDelK6bRr15iGPpmxIklHhCxSgdfmlDiMnwYZFwQdNXrZm57ej2uVcev8AYAfsXEa7mJMX6y4rUTA128+Xu8O+yxSByZmk6w68Hqp0kWCH/psRLz0itQX94GDbAu0tJwJfqAAF+CJDognSAOSjm+krQH3XqXiDHMnZ9W7w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4892.eurprd01.prod.exchangelabs.com (20.177.209.87) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Wed, 11 Sep
 2019 13:56:04 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 13:56:04 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH 3/4] lib/uktime: Fix checkpath errors for timegm
Thread-Index: AQHVaKinzt3G4V4bXUaLbEt+Iegc5g==
Date: Wed, 11 Sep 2019 13:56:04 +0000
Message-ID: <20190911135549.32005-4-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190911135549.32005-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1P193CA0005.EURP193.PROD.OUTLOOK.COM
 (2603:10a6:800:bd::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 9d0e9721-4ce7-4334-827c-08d736bfc97f
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4892; 
x-ms-traffictypediagnostic: PR1PR01MB4892:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48924B539AEC0DA128E9CEA8A6B10@PR1PR01MB4892.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6108;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(39850400004)(136003)(376002)(346002)(366004)(189003)(199004)(6486002)(45776006)(86362001)(66556008)(5660300002)(6436002)(66946007)(53936002)(5640700003)(478600001)(99286004)(64756008)(256004)(6512007)(2501003)(14444005)(2906002)(6506007)(386003)(2616005)(14454004)(52116002)(486006)(46003)(476003)(6116002)(81156014)(11346002)(66476007)(7736002)(305945005)(102836004)(66446008)(446003)(71200400001)(4326008)(50226002)(71190400001)(25786009)(2351001)(6916009)(316002)(1076003)(76176011)(8936002)(81166006)(786003)(186003)(54906003)(8676002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4892;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: jJVQshQ5rmqB4dDxnG7906Y6xcbniU++fpSYL2kbYFu8xIKDfUOmr0CWt27joHCwFB6OV3LnaD/isrrs159DXMpuwrHPil2aJw7bnU+OuUKGnq7iZPlBK+8CZ4wPCvZEZyr/9D5KLQoYqJ5gHEGZqNT8JsmFIE3zu5frpw/BQqgHtK84YgdOCiF8rklgbN0BlQmjIPtufhlNQOUNnYOUbSCDFazDmdWWGBDWzslo9aHMbgXXbiV2wjw8zepWgsSa2QQzc5MDAZgsUBOkxcupNxj2ICGjaaiN/Mu3acQk+sLvR73/39Hh0QLepOOJ5WcBSjU+HQBJ3+OSE3jv+dtPDLwjbxo6Zw1fO1ozgcBdJgTtHQSJjB39etBdstXpyCYlW9HSUt0KSJnJNTpP3VWQPBdGUS6DpkV2OpNSswsrMDY=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 9d0e9721-4ce7-4334-827c-08d736bfc97f
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 13:56:04.5313 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: l/8gzFe82WtJRV8Zll4WWKu/bzXgby6OcHO47rR7NNy39HhHudJCti++NSdPV3gwITrnYwSZFxZNoBRdbDTX+8iMfgSMZTmnqZpIAxa1jk7q+XwoyTBxJsKUpMuQ0cir
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4892
Subject: [Minios-devel] [UNIKRAFT PATCH 3/4] lib/uktime: Fix checkpath
 errors for timegm
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgZml4IHRoZSBjaGVja3BhdGggZXJyb3JzIG9mIHRoZSBpbXBvcnRlZCBmaWxlcy4gV2Ugb21p
dCB0aGUKImZ1bmN0aW9uIGRlZmluaXRpb24gYXJndW1lbnQgKiBzaG91bGQgYWxzbyBoYXZlIGFu
IGlkZW50aWZpZXIgbmFtZSIKd2FybmluZ3Mgc2luY2UgdGhlIGZ1bmN0aW9ucyBhcmUgY29tbWVu
dGVkIG91dC4KClNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWku
YmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KLS0tCiAuLi4vbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vr
dGltZS90aW1lLmggICAgICAgfCA1OCArKysrKysrKystLS0tLS0tLS0tCiAuLi4vbXVzbC1pbXBv
cnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgICAgICAgfCAgNCArLQogbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYyAgIHwgIDQgKy0KIGxpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMgICB8ICAzICsKIGxpYi91a3RpbWUvbXVzbC1pbXBv
cnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYyB8IDIyICsrKystLS0KIGxpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvdGltZWdtLmMgICAgICAgICB8ICAxICsKIDYgZmlsZXMgY2hhbmdlZCwgNTMg
aW5zZXJ0aW9ucygrKSwgMzkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9t
dXNsLWltcG9ydGVkL2luY2x1ZGUvdWt0aW1lL3RpbWUuaCBiL2xpYi91a3RpbWUvbXVzbC1pbXBv
cnRlZC9pbmNsdWRlL3VrdGltZS90aW1lLmgKaW5kZXggYjY0NTYwYWIuLjMwYTAyZjk4IDEwMDY0
NAotLS0gYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS91a3RpbWUvdGltZS5oCisr
KyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3VrdGltZS90aW1lLmgKQEAgLTE1
LDcgKzE1LDcgQEAgZXh0ZXJuICJDIiB7CiAjaWZkZWYgX19jcGx1c3BsdXMKICNkZWZpbmUgTlVM
TCAwTAogI2Vsc2UKLSNkZWZpbmUgTlVMTCAoKHZvaWQqKTApCisjZGVmaW5lIE5VTEwgKCh2b2lk
ICopMCkKICNlbmRpZgogI2VuZGlmCiAKQEAgLTYyLDE1ICs2MiwxNSBAQCBzdHJ1Y3QgdG0gewog
fTsKIAogI2lmIDAKLWNsb2NrX3QgY2xvY2sgKHZvaWQpOwotdGltZV90IHRpbWUgKHRpbWVfdCAq
KTsKLWRvdWJsZSBkaWZmdGltZSAodGltZV90LCB0aW1lX3QpOwotdGltZV90IG1rdGltZSAoc3Ry
dWN0IHRtICopOwotc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNv
bnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7Ci1zdHJ1
Y3QgdG0gKmdtdGltZSAoY29uc3QgdGltZV90ICopOwotc3RydWN0IHRtICpsb2NhbHRpbWUgKGNv
bnN0IHRpbWVfdCAqKTsKLWNoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKLWNoYXIg
KmN0aW1lIChjb25zdCB0aW1lX3QgKik7CitjbG9ja190IGNsb2NrKHZvaWQpOwordGltZV90IHRp
bWUodGltZV90ICopOworZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCwgdGltZV90KTsKK3RpbWVfdCBt
a3RpbWUoc3RydWN0IHRtICopOworc2l6ZV90IHN0cmZ0aW1lKGNoYXIgKl9fcmVzdHJpY3QsIHNp
emVfdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0
KTsKK3N0cnVjdCB0bSAqZ210aW1lKGNvbnN0IHRpbWVfdCAqKTsKK3N0cnVjdCB0bSAqbG9jYWx0
aW1lKGNvbnN0IHRpbWVfdCAqKTsKK2NoYXIgKmFzY3RpbWUoY29uc3Qgc3RydWN0IHRtICopOwor
Y2hhciAqY3RpbWUoY29uc3QgdGltZV90ICopOwogaW50IHRpbWVzcGVjX2dldChzdHJ1Y3QgdGlt
ZXNwZWMgKiwgaW50KTsKICNlbmRpZgogCkBAIC04MywxNCArODMsMTQgQEAgaW50IHRpbWVzcGVj
X2dldChzdHJ1Y3QgdGltZXNwZWMgKiwgaW50KTsKICB8fCBkZWZpbmVkKF9CU0RfU09VUkNFKQog
CiAjaWYgMAotc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKiAgX19yZXN0cmljdCwgc2l6ZV90LCBj
b25zdCBjaGFyICogIF9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqICBfX3Jlc3RyaWN0LCBs
b2NhbGVfdCk7CitzaXplX3Qgc3RyZnRpbWVfbChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNv
bnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgbG9jYWxl
X3QpOwogCi1zdHJ1Y3QgdG0gKmdtdGltZV9yIChjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0
cnVjdCB0bSAqX19yZXN0cmljdCk7Ci1zdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0aW1l
X3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7Ci1jaGFyICphc2N0aW1lX3Ig
KGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgY2hhciAqX19yZXN0cmljdCk7Ci1jaGFyICpj
dGltZV9yIChjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKK3N0cnVjdCB0bSAqZ210aW1lX3IoY29u
c3QgdGltZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOworc3RydWN0IHRt
ICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0
cmljdCk7CitjaGFyICphc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0LCBjaGFy
ICpfX3Jlc3RyaWN0KTsKK2NoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICosIGNoYXIgKik7CiAK
LXZvaWQgdHpzZXQgKHZvaWQpOwordm9pZCB0enNldCh2b2lkKTsKICNlbmRpZgogCiBzdHJ1Y3Qg
aXRpbWVyc3BlYyB7CkBAIC0xMTMsMjIgKzExMywyMiBAQCBzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAK
ICNkZWZpbmUgVElNRVJfQUJTVElNRSAxCiAKLWludCBuYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVj
dCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CiAjaWYgMAotaW50IGNsb2NrX2dldHJl
cyAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tfZ2V0cmVzKGNsb2Nr
aWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwogI2VuZGlmCi1pbnQgY2xvY2tfZ2V0dGltZSAoY2xv
Y2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3Qs
IHN0cnVjdCB0aW1lc3BlYyAqKTsKICNpZiAwCi1pbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90
LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7Ci1pbnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lk
X3QsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKLWlu
dCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCwgY2xvY2tpZF90ICopOworaW50IGNsb2NrX3Nl
dHRpbWUoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tfbmFu
b3NsZWVwKGNsb2NraWRfdCwgaW50LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRp
bWVzcGVjICopOworaW50IGNsb2NrX2dldGNwdWNsb2NraWQocGlkX3QsIGNsb2NraWRfdCAqKTsK
IAogc3RydWN0IHNpZ2V2ZW50OwotaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90LCBzdHJ1Y3Qg
c2lnZXZlbnQgKl9fcmVzdHJpY3QsIHRpbWVyX3QgKl9fcmVzdHJpY3QpOwotaW50IHRpbWVyX2Rl
bGV0ZSAodGltZXJfdCk7Ci1pbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCwgaW50LCBjb25zdCBz
dHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJp
Y3QpOwotaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwot
aW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3QpOworaW50IHRpbWVyX2NyZWF0ZShjbG9ja2lk
X3QsIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCwgdGltZXJfdCAqX19yZXN0cmljdCk7Citp
bnQgdGltZXJfZGVsZXRlKHRpbWVyX3QpOworaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50
LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCwgc3RydWN0IGl0aW1lcnNwZWMg
Kl9fcmVzdHJpY3QpOworaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNw
ZWMgKik7CitpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKIAogZXh0ZXJuIGNoYXIgKnR6
bmFtZVsyXTsKICNlbmRpZgpAQCAtMTM2LDExICsxMzYsMTEgQEAgZXh0ZXJuIGNoYXIgKnR6bmFt
ZVsyXTsKIAogI2lmIDAKICNpZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8IGRlZmluZWQoX0JT
RF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpCi1jaGFyICpzdHJwdGltZSAoY29uc3Qg
Y2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgc3RydWN0IHRtICpfX3Jl
c3RyaWN0KTsKK2NoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNo
YXIgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CiBleHRlcm4gaW50IGRheWxp
Z2h0OwogZXh0ZXJuIGxvbmcgdGltZXpvbmU7CiBleHRlcm4gaW50IGdldGRhdGVfZXJyOwotc3Ry
dWN0IHRtICpnZXRkYXRlIChjb25zdCBjaGFyICopOworc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0
IGNoYXIgKik7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL19fbW9udGhfdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy9fX21vbnRoX3RvX3NlY3MuYwppbmRleCA0MzI0OGZiMy4uYzNhZTU3ZjMgMTAwNjQ0Ci0t
LSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMKKysrIGIv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYwpAQCAtNSw2ICs1
LDggQEAgaW50IF9fbW9udGhfdG9fc2VjcyhpbnQgbW9udGgsIGludCBpc19sZWFwKQogCQkxMjAq
ODY0MDAsIDE1MSo4NjQwMCwgMTgxKjg2NDAwLCAyMTIqODY0MDAsCiAJCTI0Myo4NjQwMCwgMjcz
Kjg2NDAwLCAzMDQqODY0MDAsIDMzNCo4NjQwMCB9OwogCWludCB0ID0gc2Vjc190aHJvdWdoX21v
bnRoW21vbnRoXTsKLQlpZiAoaXNfbGVhcCAmJiBtb250aCA+PSAyKSB0Kz04NjQwMDsKKworCWlm
IChpc19sZWFwICYmIG1vbnRoID49IDIpCisJCXQgKz0gODY0MDA7CiAJcmV0dXJuIHQ7CiB9CmRp
ZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jIGIv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYwppbmRleCAwOTNkOTAy
MS4uNGE5ZjUzYTMgMTAwNjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19z
ZWNzX3RvX3RtLmMKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9f
dG0uYwpAQCAtMTUsNyArMTUsNyBAQCBpbnQgX19zZWNzX3RvX3RtKGxvbmcgbG9uZyB0LCBzdHJ1
Y3QgdG0gKnRtKQogCWludCBxY19jeWNsZXMsIGNfY3ljbGVzLCBxX2N5Y2xlczsKIAlpbnQgbW9u
dGhzOwogCWludCB3ZGF5LCB5ZGF5LCBsZWFwOwotCXN0YXRpYyBjb25zdCBjaGFyIGRheXNfaW5f
bW9udGhbXSA9IHszMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMSwzMSwyOX07CisJc3RhdGlj
IGNvbnN0IGNoYXIgZGF5c19pbl9tb250aFtdID0gezMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMw
LCAzMSwgMzAsIDMxLCAzMSwgMjl9OwogCiAJLyogUmVqZWN0IHRpbWVfdCB2YWx1ZXMgd2hvc2Ug
eWVhciB3b3VsZCBvdmVyZmxvdyBpbnQgKi8KIAlpZiAodCA8IElOVF9NSU4gKiAzMTYyMjQwMExM
IHx8IHQgPiBJTlRfTUFYICogMzE2MjI0MDBMTCkKQEAgLTU3LDcgKzU3LDcgQEAgaW50IF9fc2Vj
c190b190bShsb25nIGxvbmcgdCwgc3RydWN0IHRtICp0bSkKIAogCXllYXJzID0gcmVteWVhcnMg
KyA0KnFfY3ljbGVzICsgMTAwKmNfY3ljbGVzICsgNDAwTEwqcWNfY3ljbGVzOwogCi0JZm9yICht
b250aHM9MDsgZGF5c19pbl9tb250aFttb250aHNdIDw9IHJlbWRheXM7IG1vbnRocysrKQorCWZv
ciAobW9udGhzID0gMDsgZGF5c19pbl9tb250aFttb250aHNdIDw9IHJlbWRheXM7IG1vbnRocysr
KQogCQlyZW1kYXlzIC09IGRheXNfaW5fbW9udGhbbW9udGhzXTsKIAogCWlmIChtb250aHMgPj0g
MTApIHsKZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19z
ZWNzLmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jCmluZGV4
IGMyOWZhOTg1Li5hYWY3ZDEzYyAxMDA2NDQKLS0tIGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy9fX3RtX3RvX3NlY3MuYworKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19f
dG1fdG9fc2Vjcy5jCkBAIC01LDggKzUsMTAgQEAgbG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25z
dCBzdHJ1Y3QgdG0gKnRtKQogCWludCBpc19sZWFwOwogCWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRt
X3llYXI7CiAJaW50IG1vbnRoID0gdG0tPnRtX21vbjsKKwogCWlmIChtb250aCA+PSAxMiB8fCBt
b250aCA8IDApIHsKIAkJaW50IGFkaiA9IG1vbnRoIC8gMTI7CisKIAkJbW9udGggJT0gMTI7CiAJ
CWlmIChtb250aCA8IDApIHsKIAkJCWFkai0tOwpAQCAtMTUsNiArMTcsNyBAQCBsb25nIGxvbmcg
X190bV90b19zZWNzKGNvbnN0IHN0cnVjdCB0bSAqdG0pCiAJCXllYXIgKz0gYWRqOwogCX0KIAls
b25nIGxvbmcgdCA9IF9feWVhcl90b19zZWNzKHllYXIsICZpc19sZWFwKTsKKwogCXQgKz0gX19t
b250aF90b19zZWNzKG1vbnRoLCBpc19sZWFwKTsKIAl0ICs9IDg2NDAwTEwgKiAodG0tPnRtX21k
YXktMSk7CiAJdCArPSAzNjAwTEwgKiB0bS0+dG1faG91cjsKZGlmZiAtLWdpdCBhL2xpYi91a3Rp
bWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYyBiL2xpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYwppbmRleCAyODI0ZWM2ZC4uMTZkNzFjNTUgMTAw
NjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYwor
KysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMKQEAgLTMs
MTYgKzMsMjAgQEAgbG9uZyBsb25nIF9feWVhcl90b19zZWNzKGxvbmcgbG9uZyB5ZWFyLCBpbnQg
KmlzX2xlYXApCiAJaWYgKHllYXItMlVMTCA8PSAxMzYpIHsKIAkJaW50IHkgPSB5ZWFyOwogCQlp
bnQgbGVhcHMgPSAoeS02OCk+PjI7CisKIAkJaWYgKCEoKHktNjgpJjMpKSB7CiAJCQlsZWFwcy0t
OwotCQkJaWYgKGlzX2xlYXApICppc19sZWFwID0gMTsKLQkJfSBlbHNlIGlmIChpc19sZWFwKSAq
aXNfbGVhcCA9IDA7CisJCQlpZiAoaXNfbGVhcCkKKwkJCQkqaXNfbGVhcCA9IDE7CisJCX0gZWxz
ZSBpZiAoaXNfbGVhcCkKKwkJCSppc19sZWFwID0gMDsKIAkJcmV0dXJuIDMxNTM2MDAwKih5LTcw
KSArIDg2NDAwKmxlYXBzOwogCX0KIAogCWludCBjeWNsZXMsIGNlbnR1cmllcywgbGVhcHMsIHJl
bTsKIAotCWlmICghaXNfbGVhcCkgaXNfbGVhcCA9ICYoaW50KXswfTsKKwlpZiAoIWlzX2xlYXAp
CisJCWlzX2xlYXAgPSAmKGludCl7MH07CiAJY3ljbGVzID0gKHllYXItMTAwKSAvIDQwMDsKIAly
ZW0gPSAoeWVhci0xMDApICUgNDAwOwogCWlmIChyZW0gPCAwKSB7CkBAIC0yNSwxMSArMjksMTUg
QEAgbG9uZyBsb25nIF9feWVhcl90b19zZWNzKGxvbmcgbG9uZyB5ZWFyLCBpbnQgKmlzX2xlYXAp
CiAJCWxlYXBzID0gMDsKIAl9IGVsc2UgewogCQlpZiAocmVtID49IDIwMCkgewotCQkJaWYgKHJl
bSA+PSAzMDApIGNlbnR1cmllcyA9IDMsIHJlbSAtPSAzMDA7Ci0JCQllbHNlIGNlbnR1cmllcyA9
IDIsIHJlbSAtPSAyMDA7CisJCQlpZiAocmVtID49IDMwMCkKKwkJCQljZW50dXJpZXMgPSAzLCBy
ZW0gLT0gMzAwOworCQkJZWxzZQorCQkJCWNlbnR1cmllcyA9IDIsIHJlbSAtPSAyMDA7CiAJCX0g
ZWxzZSB7Ci0JCQlpZiAocmVtID49IDEwMCkgY2VudHVyaWVzID0gMSwgcmVtIC09IDEwMDsKLQkJ
CWVsc2UgY2VudHVyaWVzID0gMDsKKwkJCWlmIChyZW0gPj0gMTAwKQorCQkJCWNlbnR1cmllcyA9
IDEsIHJlbSAtPSAxMDA7CisJCQllbHNlCisJCQkJY2VudHVyaWVzID0gMDsKIAkJfQogCQlpZiAo
IXJlbSkgewogCQkJKmlzX2xlYXAgPSAwOwpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL3NyYy90aW1lZ20uYyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdt
LmMKaW5kZXggODBlMjUwNmQuLmJkZTQwYjkwIDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL3RpbWVnbS5jCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMv
dGltZWdtLmMKQEAgLTgsNiArOCw3IEBAIHRpbWVfdCB0aW1lZ20oc3RydWN0IHRtICp0bSkKIHsK
IAlzdHJ1Y3QgdG0gbmV3OwogCWxvbmcgbG9uZyB0ID0gX190bV90b19zZWNzKHRtKTsKKwogCWlm
IChfX3NlY3NfdG9fdG0odCwgJm5ldykgPCAwKSB7CiAJCWVycm5vID0gRU9WRVJGTE9XOwogCQly
ZXR1cm4gLTE7Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 14:50:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 14:50:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i83wb-0007Uz-Je; Wed, 11 Sep 2019 14:50:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yAp6=XG=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i83wa-0007Nu-Qu
 for minios-devel@lists.xenproject.org; Wed, 11 Sep 2019 14:50:04 +0000
X-Inumbo-ID: 6e3bd3b0-d4a3-11e9-83d6-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6e3bd3b0-d4a3-11e9-83d6-12813bfff9fa;
 Wed, 11 Sep 2019 14:50:01 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 345B610569C;
 Wed, 11 Sep 2019 16:50:00 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id G8X5IPA0Kbfc; Wed, 11 Sep 2019 16:50:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 0E48E105621
 for <minios-devel@lists.xenproject.org>; Wed, 11 Sep 2019 16:50:00 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 11 Sep
 2019 16:49:59 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190713053619.32186-1-felipe.huici@neclab.eu>
 <20190713053619.32186-2-felipe.huici@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <d1abc294-2ac9-ef10-d344-66069b9ffb33@neclab.eu>
Date: Wed, 11 Sep 2019 16:49:59 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190713053619.32186-2-felipe.huici@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH 1/2] Initial port of
 the axtls library (version 2.1.5)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gRmVsaXBlLAoKUGxlYXNlIGZpbmQgdGhlIGNvbW1lbnQgaW5saW5lOgoKVGhlIHBhdGNo
IGZhaWxzIHRvIGNvbXBpbGUgd2l0aCBmb2xsb3dpbmcgZXJyb3I6CgpidWlsZC9saWJheHRscy9v
cmlnaW4vYXh0bHMtY29kZS9zc2wvb3NfcG9ydC5oOjEzNzoyNDogZmF0YWwgZXJyb3I6IApuZXRp
bmV0L2luLmg6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkgI2luY2x1ZGUgPG5ldGluZXQvaW4u
aD4KClRoYW5rcyAmIFJlZ2FyZHMKClNoYXJhbgoKT24gNy8xMy8xOSA3OjM2IEFNLCBGZWxpcGUg
SHVpY2kgd3JvdGU6Cj4gTm90ZSBsd2lwIGlzIHJlcXVpcmVkLgo+Cj4gU2lnbmVkLW9mZi1ieTog
RmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgQ29uZmlnLnVr
ICAgICAgICAgICAgICAgfCAgIDQgKysKPiAgIE1ha2VmaWxlLnVrICAgICAgICAgICAgIHwgMTE3
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBnbHVl
LmMgICAgICAgICAgICAgICAgICB8ICAxMiArKysrKwo+ICAgaW5jbHVkZS9hc20vYnl0ZW9yZGVy
LmggfCAgODYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIGluY2x1ZGUv
Y29uZmlnLmggICAgICAgIHwgMTE4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKwo+ICAgNSBmaWxlcyBjaGFuZ2VkLCAzMzcgaW5zZXJ0aW9ucygrKQo+ICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2Vm
aWxlLnVrCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZ2x1ZS5jCj4gICBjcmVhdGUgbW9kZSAxMDA2
NDQgaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRl
L2NvbmZpZy5oCj4KPiBkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5lYzhkYTIxCj4gLS0tIC9kZXYvbnVsbAo+
ICsrKyBiL0NvbmZpZy51awo+IEBAIC0wLDAgKzEsNCBAQAo+ICttZW51Y29uZmlnIExJQkFYVExT
Cj4gKwkgICBib29sICJheFRMUyBFbWJlZGRlZCBTU0wiCj4gKwkgICBkZWZhdWx0IG4KPiArCSAg
IHNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQwpTZWxlY3QgTElCTFdJUAo+IGRpZmYgLS1n
aXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp
bmRleCAwMDAwMDAwLi5jZjUxM2EwCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL01ha2VmaWxlLnVr
Cj4gQEAgLTAsMCArMSwxMTcgQEAKPiArIyAgbGliYXh0bHMgTWFrZWZpbGUudWMKPiArIwo+ICsj
ICBBdXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gKyMKPiAr
Iwo+ICsjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsjCj4gKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsjICBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKPiArIyAgYXJlIG1ldDoKPiArIwo+ICsjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4g
KyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Cj4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
PiArIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhl
IG5hbWVzIG9mIGl0cwo+ICsjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsjICAgICB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsjCj4gKyMgIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIgo+ICsjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKyMgIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCj4gKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiArIyAgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsjICBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgo+ICsjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiArIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArIyAg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKPiArIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKPiArIyAgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCj4gKyMKPiArIyAgVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNU
RUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArIwo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKPiArIyBMaWJyYXJ5IHJlZ2lzdHJhdGlvbgo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iwo+ICskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmF4dGxzLCQoQ09ORklHX0xJQkFYVExTKSkp
Cj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIFNvdXJjZXMKPiArIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKPiArTElCQVhUTFNfVkVSU0lPTj0yLjEuNQo+ICtMSUJBWFRMU19VUkw9
aHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYXh0bHMvZmlsZXMvMi4xLjUvYXhUTFMt
Mi4xLjUudGFyLmd6L2Rvd25sb2FkCnMvMi4xLjUvJChMSUJBWFRMU19WRVJTSU9OKQo+ICtMSUJB
WFRMU19QQVRDSERJUj0kKExJQkFYVExTX0JBU0UpL3BhdGNoZXMKPiArJChldmFsICQoY2FsbCBm
ZXRjaGFzLGxpYmF4dGxzLCQoTElCQVhUTFNfVVJMKSwkKExJQkFYVExTX1ZFUlNJT04pLnRneikp
Cj4gKyQoZXZhbCAkKGNhbGwgcGF0Y2gsbGliYXh0bHMsJChMSUJBWFRMU19QQVRDSERJUiksbGli
YXh0bHMtJChMSUJBWFRMU19WRVJTSU9OKSkpCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iwo+ICsjIEhlbHBlcnMKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArTElCQVhUTFNfU1JD
PSQoTElCQVhUTFNfT1JJR0lOKS9heHRscy1jb2RlCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIwo+ICsjIExpYnJhcnkgaW5jbHVkZXMKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiAr
Q0lOQ0xVREVTLSQoQ09ORklHX0xJQkFYVExTKSArPSAgIC1JJChMSUJBWFRMU19TUkMpL2luY2x1
ZGUgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKExJQkFYVExTX1NS
QykvY3J5cHRvICBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQoTElC
QVhUTFNfU1JDKS9zc2wgICAgIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC1JJChMSUJBWFRMU19CQVNFKS9pbmNsdWRlCgpTaG91bGQgdGhlwqAgJChMSUJBWFRMU19CQVNF
KS9pbmNsdWRlIGJlIGEgZ2xvYmFsIENJTkNMVURFIG9yIGxpYnJhcnkgCnNwZWNpZmljLiBUaGlz
IG1haW4gZnVuY3Rpb25hbGl0eSBpdCBwcm92aWRlcyBhcmUgdGhlIGNvbmZpZy5oIGFuZCAKYnl0
ZW9yZGVyLmguIFNob3VsZG4ndCB0aGUgY29uZmlnLmggYmUgc3BlY2lmaWMgdG8gdGhlIGxpYnJh
cnkuIFNpbmNlIHdlIApkb250IGhhdmUgYSBleHBvcnRzeW0udWsuIERvIHdlIHdhbnQgdG8gYWRk
IGl0IGFzIGEgQ0lOQ0xVREVTIGFzIHRoZSAKaW1wbGVtZW50YXRpb24gaXMgZ29pbmcgdG8gaGlk
ZGVuIHdpdGhpbiB0aGlzIGxpYnJhcnkuCgoKPiArCj4gK0NYWElOQ0xVREVTLSQoQ09ORklHX0xJ
QkFYVExTKSArPSAtSSQoTElCQVhUTFNfU1JDKS9pbmNsdWRlIFwKPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC1JJChMSUJBWFRMU19TUkMpL2NyeXB0byAgXAo+ICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKExJQkFYVExTX1NSQykvc3NsICAgICBcCj4g
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQoTElCQVhUTFNfQkFTRSkvaW5j
bHVkZQo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBHbG9iYWwgZmxhZ3MKPiAr
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArTElCQVhUTFNfQ0ZMQUdTLXkgKz0gLURIQVZFX0NP
TkZJR19ICj4gKwo+ICsjIFN1cHByZXNzIHNvbWUgd2FybmluZ3MgdG8gbWFrZSB0aGUgYnVpbGQg
cHJvY2VzcyBsb29rIG5lYXRlcgo+ICtTVVBQUkVTU19GTEFHUyArPSAtV25vLXVudXNlZC1wYXJh
bWV0ZXIgLVduby11bnVzZWQtdmFyaWFibGUgLVduby1ub25udWxsICAgICAgIFwKPiArLVduby11
bnVzZWQtYnV0LXNldC12YXJpYWJsZSAtV25vLXVudXNlZC1sYWJlbCAtV25vLWNoYXItc3Vic2Ny
aXB0cyAgICAgICAgICAgICBcCj4gKy1Xbm8tdW51c2VkLWZ1bmN0aW9uIC1Xbm8tbWlzc2luZy1m
aWVsZC1pbml0aWFsaXplcnMgLVduby11bmluaXRpYWxpemVkICAgICAgICAgXAo+ICstV25vLWFy
cmF5LWJvdW5kcyAtV25vLW1heWJlLXVuaW5pdGlhbGl6ZWQgLVduby1wb2ludGVyLXNpZ24gLVdu
by11bnVzZWQtdmFsdWUgIFwKPiArLVduby11bnVzZWQtbWFjcm9zIC1Xbm8tcGFyZW50aGVzZXMg
LVduby1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAgICAgICAgICBcCj4gKy1Xbm8tbWlz
c2luZy1icmFjZXMgLVduby1lbmRpZi1sYWJlbHMgLVduby11bnVzZWQtYnV0LXNldC12YXJpYWJs
ZSAgICAgICAgICAgICAgXAo+ICstV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1X
bm8tdHlwZS1saW1pdHMgLVduby1zaWduLWNvbXBhcmUKV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRl
Y2xhcmF0aW9uLCBXbm8tYXJyYXktYm91bmRzLCBXbm8tdHlwZS1saW1pdHMKPiArCj4gK0xJQkFY
VExTX0NGTEFHUy15ICAgKz0gJChTVVBQUkVTU19GTEFHUykKPiArTElCQVhUTFNfQ1hYRkxBR1Mt
eSArPSAkKFNVUFBSRVNTX0ZMQUdTKQo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiAr
IyBPUyBkZXBlbmRlbmNpZXMgY29kZSAtIEdsdWUgYmV0d2VlbiBVbmlrZnJhZnQgYW5kIGF4dGxz
Cj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFY
VExTX0JBU0UpL2dsdWUuYwo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBheHRs
cyBjb2RlIC0gY3J5cHRvCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQkFYVExTX1NS
Q1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2Flcy5jCj4gK0xJQkFYVExTX1NSQ1MteSAr
PSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2JpZ2ludC5jCj4gK0xJQkFYVExTX1NSQ1MteSArPSAk
KExJQkFYVExTX1NSQykvY3J5cHRvL2NyeXB0b19taXNjLmMKPiArTElCQVhUTFNfU1JDUy15ICs9
ICQoTElCQVhUTFNfU1JDKS9jcnlwdG8vaG1hYy5jCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJ
QkFYVExTX1NSQykvY3J5cHRvL21kNS5jCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExT
X1NSQykvY3J5cHRvL3JjNC5jCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykv
Y3J5cHRvL3JzYS5jCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRv
L3NoYTEuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGEy
NTYuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGEzODQu
Ywo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGE1MTIuYwo+
ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBheHRscyBjb2RlIC0gc3NsCj4gKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NS
Qykvc3NsL2FzbjEuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC9n
ZW5fY2VydC5jCgpXaXRob3V0IHRoaXMgc3ltYm9sIENPTkZJR19TU0xfR0VORVJBVEVfWDUwOV9D
RVJULCB0aGlzIGlzIGEgZW1wdHkgZmlsZT8gClNpbmNlIHdlIHVuZGVmIGl0IGRvIHdlIG5lZWQg
dGhpcz8KCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL2xvYWRlci5j
Cj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL29wZW5zc2wuYwo+ICtM
SUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC9vc19wb3J0LmMKVGhlcmUgYXJl
IGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRvIHRoZSBXSU4zMi4gV2UgcHJvYmFibHkgZG9uJ3Qg
bmVlZCB0aGlzCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL3AxMi5j
Cj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL3RsczEuYwo+ICtMSUJB
WFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC90bHMxX3N2ci5jCgo+ICtMSUJBWFRM
U19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC90bHMxX2NsbnQuYwpUaGlzIGRlcGVuZCBv
biBDT05GSUdfU1NMX0VOQUJMRV9DTElFTlQgd2hpY2ggaXMgZGlzYWJsZWQuCj4gK0xJQkFYVExT
X1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL3g1MDkuYwo+IGRpZmYgLS1naXQgYS9nbHVl
LmMgYi9nbHVlLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjcxMzhm
OWQKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZ2x1ZS5jCj4gQEAgLTAsMCArMSwxMiBAQAo+ICsv
KiBBY2NvcmRpbmcgdG8gUE9TSVguMS0yMDAxLCBQT1NJWC4xLTIwMDggKi8KPiArI2luY2x1ZGUg
PHN5cy9zZWxlY3QuaD4KPiArCj4gKy8qIEFjY29yZGluZyB0byBlYXJsaWVyIHN0YW5kYXJkcyAq
Lwo+ICsjaW5jbHVkZSA8c3lzL3RpbWUuaD4KPiArI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+ICsj
aW5jbHVkZSA8dW5pc3RkLmg+Cj4gKwo+ICtpbnQgc2VsZWN0KGludCBuZmRzLCBmZF9zZXQgKnJl
YWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsCj4gKwkgICBmZF9zZXQgKmV4Y2VwdGZkcywgc3RydWN0
IHRpbWV2YWwgKnRpbWVvdXQpIHsKPiArCXJldHVybiAtMTsKPiArfQo+IGRpZmYgLS1naXQgYS9p
bmNsdWRlL2FzbS9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oCgpXb3VsZCBp
dCBiZSBiZXR0ZXIgdG8gYWRkIHRoaXMgZmlsZSB3aXRoaW4gbGliY3M/Cgo+IG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZjM3NDdlYgo+IC0tLSAvZGV2L251bGwKPiArKysg
Yi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaAo+IEBAIC0wLDAgKzEsODYgQEAKPiArLyogVGFrZW4g
ZnJvbSBtdXNsJ3MgZW5kaWFuLmggKi8KPiArCj4gKyNpZm5kZWYgTElCQVhUTFNfR0xVRV9FTkRJ
QU5fSAo+ICsjZGVmaW5lIExJQkFYVExTX0dMVUVfRU5ESUFOX0gKPiArCj4gKwo+ICsvKiAjaW5j
bHVkZSA8ZmVhdHVyZXMuaD4gKi8KPiArCj4gKyNkZWZpbmUgX19MSVRUTEVfRU5ESUFOIDEyMzQK
PiArI2RlZmluZSBfX0JJR19FTkRJQU4gNDMyMQo+ICsjZGVmaW5lIF9fUERQX0VORElBTiAzNDEy
Cj4gKwo+ICsvKiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJf
XykgKi8KPiArI2RlZmluZSBfX0JZVEVfT1JERVIgX19CWVRFX09SREVSX18KPiArLyoKPiArI2Vs
c2UKPiArI2luY2x1ZGUgPGJpdHMvZW5kaWFuLmg+Cj4gKyNlbmRpZgo+ICsqLwo+ICsvKiAjaWYg
ZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkgKi8KPiArCj4gKyNk
ZWZpbmUgQklHX0VORElBTiBfX0JJR19FTkRJQU4KPiArI2RlZmluZSBMSVRUTEVfRU5ESUFOIF9f
TElUVExFX0VORElBTgo+ICsjZGVmaW5lIFBEUF9FTkRJQU4gX19QRFBfRU5ESUFOCj4gKyNkZWZp
bmUgQllURV9PUkRFUiBfX0JZVEVfT1JERVIKPiArCj4gKyNpbmNsdWRlIDxzdGRpbnQuaD4KPiAr
Cj4gK3N0YXRpYyBfX2lubGluZSB1aW50MTZfdCBfX2Jzd2FwMTYodWludDE2X3QgX194KQo+ICt7
Cj4gKwlyZXR1cm4gX194PDw4IHwgX194Pj44Owo+ICt9Cj4gKwo+ICtzdGF0aWMgX19pbmxpbmUg
dWludDMyX3QgX19ic3dhcDMyKHVpbnQzMl90IF9feCkKPiArewo+ICsJcmV0dXJuIF9feD4+MjQg
fCBfX3g+PjgmMHhmZjAwIHwgX194PDw4JjB4ZmYwMDAwIHwgX194PDwyNDsKPiArfQo+ICsKPiAr
c3RhdGljIF9faW5saW5lIHVpbnQ2NF90IF9fYnN3YXA2NCh1aW50NjRfdCBfX3gpCj4gK3sKPiAr
CXJldHVybiBfX2Jzd2FwMzIoX194KSswVUxMPDwzMiB8IF9fYnN3YXAzMihfX3g+PjMyKTsKPiAr
fQo+ICsKPiArI2lmIF9fQllURV9PUkRFUiA9PSBfX0xJVFRMRV9FTkRJQU4KPiArI2RlZmluZSBo
dG9iZTE2KHgpIF9fYnN3YXAxNih4KQo+ICsjZGVmaW5lIGJlMTZ0b2goeCkgX19ic3dhcDE2KHgp
Cj4gKyNkZWZpbmUgYmV0b2gxNih4KSBfX2Jzd2FwMTYoeCkKPiArI2RlZmluZSBodG9iZTMyKHgp
IF9fYnN3YXAzMih4KQo+ICsjZGVmaW5lIGJlMzJ0b2goeCkgX19ic3dhcDMyKHgpCj4gKyNkZWZp
bmUgYmV0b2gzMih4KSBfX2Jzd2FwMzIoeCkKPiArI2RlZmluZSBodG9iZTY0KHgpIF9fYnN3YXA2
NCh4KQo+ICsjZGVmaW5lIGJlNjR0b2goeCkgX19ic3dhcDY0KHgpCj4gKyNkZWZpbmUgYmV0b2g2
NCh4KSBfX2Jzd2FwNjQoeCkKPiArI2RlZmluZSBodG9sZTE2KHgpICh1aW50MTZfdCkoeCkKPiAr
I2RlZmluZSBsZTE2dG9oKHgpICh1aW50MTZfdCkoeCkKPiArI2RlZmluZSBsZXRvaDE2KHgpICh1
aW50MTZfdCkoeCkKPiArI2RlZmluZSBodG9sZTMyKHgpICh1aW50MzJfdCkoeCkKPiArI2RlZmlu
ZSBsZTMydG9oKHgpICh1aW50MzJfdCkoeCkKPiArI2RlZmluZSBsZXRvaDMyKHgpICh1aW50MzJf
dCkoeCkKPiArI2RlZmluZSBodG9sZTY0KHgpICh1aW50NjRfdCkoeCkKPiArI2RlZmluZSBsZTY0
dG9oKHgpICh1aW50NjRfdCkoeCkKPiArI2RlZmluZSBsZXRvaDY0KHgpICh1aW50NjRfdCkoeCkK
PiArI2Vsc2UKPiArI2RlZmluZSBodG9iZTE2KHgpICh1aW50MTZfdCkoeCkKPiArI2RlZmluZSBi
ZTE2dG9oKHgpICh1aW50MTZfdCkoeCkKPiArI2RlZmluZSBiZXRvaDE2KHgpICh1aW50MTZfdCko
eCkKPiArI2RlZmluZSBodG9iZTMyKHgpICh1aW50MzJfdCkoeCkKPiArI2RlZmluZSBiZTMydG9o
KHgpICh1aW50MzJfdCkoeCkKPiArI2RlZmluZSBiZXRvaDMyKHgpICh1aW50MzJfdCkoeCkKPiAr
I2RlZmluZSBodG9iZTY0KHgpICh1aW50NjRfdCkoeCkKPiArI2RlZmluZSBiZTY0dG9oKHgpICh1
aW50NjRfdCkoeCkKPiArI2RlZmluZSBiZXRvaDY0KHgpICh1aW50NjRfdCkoeCkKPiArI2RlZmlu
ZSBodG9sZTE2KHgpIF9fYnN3YXAxNih4KXYKPiArI2RlZmluZSBsZTE2dG9oKHgpIF9fYnN3YXAx
Nih4KQo+ICsjZGVmaW5lIGxldG9oMTYoeCkgX19ic3dhcDE2KHgpCj4gKyNkZWZpbmUgaHRvbGUz
Mih4KSBfX2Jzd2FwMzIoeCkKPiArI2RlZmluZSBsZTMydG9oKHgpIF9fYnN3YXAzMih4KQo+ICsj
ZGVmaW5lIGxldG9oMzIoeCkgX19ic3dhcDMyKHgpCj4gKyNkZWZpbmUgaHRvbGU2NCh4KSBfX2Jz
d2FwNjQoeCkKPiArI2RlZmluZSBsZTY0dG9oKHgpIF9fYnN3YXA2NCh4KQo+ICsjZGVmaW5lIGxl
dG9oNjQoeCkgX19ic3dhcDY0KHgpCj4gKyNlbmRpZgo+ICsKPiArLyogI2VuZGlmICovCj4gKwo+
ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWcuaCBiL2luY2x1ZGUvY29uZmln
LmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmFjZDI5NzMKPiAtLS0g
L2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9jb25maWcuaAo+IEBAIC0wLDAgKzEsMTE4IEBACj4g
Ky8qCj4gKyAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGhlYWRlciBmaWxlOiBkb24ndCBlZGl0
Cj4gKyAqLwo+ICsKPiArI2RlZmluZSBIQVZFX0RPVF9DT05GSUcgMQo+ICsjZGVmaW5lIENPTkZJ
R19QTEFURk9STV9MSU5VWCAxCgpTaG91bGQgd2UgaGF2ZSB0aGlzIENPTkZJR19QTEFURk9STV9M
SU5VWD8KCgo+ICsjdW5kZWYgQ09ORklHX1BMQVRGT1JNX0NZR1dJTgo+ICsjdW5kZWYgQ09ORklH
X1BMQVRGT1JNX1dJTjMyCj4gKwo+ICsvKgo+ICsgKiBHZW5lcmFsIENvbmZpZ3VyYXRpb24KPiAr
ICovCj4gKyNkZWZpbmUgUFJFRklYICIvdXNyL2xvY2FsIgpXZSBkb24ndCBuZWVkIFBSRUZJWD8K
PiArI3VuZGVmIENPTkZJR19ERUJVRwoKU2hvdWxkIHdlIGhhdmUgdGhpcwoKI2lmZGVmIFVLX0RF
QlVHCgojZGVmaW5lIENPTkZJR19ERUJVRwoKI2Vsc2UKCiN1bmRlZiBDT05GSUdfREVCVUcKCiNl
bmRpZiAvKiBVS19ERUJVRyAqLwoKPiArI2RlZmluZSBDT05GSUdfU1RSSVBfVU5XQU5URURfU0VD
VElPTlMgMQo+ICsjdW5kZWYgQ09ORklHX1ZJU1VBTF9TVFVESU9fN18wCj4gKyN1bmRlZiBDT05G
SUdfVklTVUFMX1NUVURJT184XzAKPiArI3VuZGVmIENPTkZJR19WSVNVQUxfU1RVRElPXzEwXzAK
PiArI2RlZmluZSBDT05GSUdfVklTVUFMX1NUVURJT183XzBfQkFTRSAiIgo+ICsjZGVmaW5lIENP
TkZJR19WSVNVQUxfU1RVRElPXzhfMF9CQVNFICIiCj4gKyNkZWZpbmUgQ09ORklHX1ZJU1VBTF9T
VFVESU9fMTBfMF9CQVNFICIiCj4gKyNkZWZpbmUgQ09ORklHX0VYVFJBX0NGTEFHU19PUFRJT05T
ICIiCj4gKyNkZWZpbmUgQ09ORklHX0VYVFJBX0xERkxBR1NfT1BUSU9OUyAiIgo+ICsKPiArLyoK
PiArICogU1NMIExpYnJhcnkKPiArICovCj4gKyN1bmRlZiBDT05GSUdfU1NMX1NFUlZFUl9PTkxZ
Cj4gKyN1bmRlZiBDT05GSUdfU1NMX0NFUlRfVkVSSUZJQ0FUSU9OCj4gKyN1bmRlZiBDT05GSUdf
U1NMX0VOQUJMRV9DTElFTlQKPiArI2RlZmluZSBDT05GSUdfU1NMX0ZVTExfTU9ERSAxCj4gKyN1
bmRlZiBDT05GSUdfU1NMX1NLRUxFVE9OX01PREUKPiArI3VuZGVmIENPTkZJR19TU0xfUFJPVF9M
T1cKPiArI2RlZmluZSBDT05GSUdfU1NMX1BST1RfTUVESVVNIDEKPiArI3VuZGVmIENPTkZJR19T
U0xfUFJPVF9ISUdICj4gKyNkZWZpbmUgQ09ORklHX1NTTF9VU0VfREVGQVVMVF9LRVkgMQo+ICsj
ZGVmaW5lIENPTkZJR19TU0xfUFJJVkFURV9LRVlfTE9DQVRJT04gIiIKPiArI2RlZmluZSBDT05G
SUdfU1NMX1BSSVZBVEVfS0VZX1BBU1NXT1JEICIiCj4gKyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5
X0NFUlRfTE9DQVRJT04gIiIKPiArI3VuZGVmIENPTkZJR19TU0xfR0VORVJBVEVfWDUwOV9DRVJU
Cj4gKyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5X0NPTU1PTl9OQU1FICIiCj4gKyNkZWZpbmUgQ09O
RklHX1NTTF9YNTA5X09SR0FOSVpBVElPTl9OQU1FICIiCj4gKyNkZWZpbmUgQ09ORklHX1NTTF9Y
NTA5X09SR0FOSVpBVElPTl9VTklUX05BTUUgIiIKPiArI2RlZmluZSBDT05GSUdfU1NMX0hBU19Q
RU0gMQo+ICsjZGVmaW5lIENPTkZJR19TU0xfVVNFX1BLQ1MxMiAxCj4gKyNkZWZpbmUgQ09ORklH
X1NTTF9FWFBJUllfVElNRSAyNAo+ICsjZGVmaW5lIENPTkZJR19YNTA5X01BWF9DQV9DRVJUUyAx
NTAKPiArI2RlZmluZSBDT05GSUdfU1NMX01BWF9DRVJUUyAzCj4gKyN1bmRlZiBDT05GSUdfU1NM
X0NUWF9NVVRFWElORwo+ICsjZGVmaW5lIENPTkZJR19VU0VfREVWX1VSQU5ET00gMQpEbyB3ZSBu
ZWVkIHRoaXMgY29uZmlndXJhdGlvbiBlbmFibGVkPyBJZiBzbyB0aGVuIGRvbid0IHdlIG5lZWQg
dGhlIApkZXZmcyBlbmFibGVkLgo+ICsjdW5kZWYgQ09ORklHX1dJTjMyX1VTRV9DUllQVE9fTElC
Cj4gKyNkZWZpbmUgQ09ORklHX09QRU5TU0xfQ09NUEFUSUJMRSAxCj4gKyN1bmRlZiBDT05GSUdf
UEVSRk9STUFOQ0VfVEVTVElORwo+ICsjdW5kZWYgQ09ORklHX1NTTF9URVNUCj4gKyNkZWZpbmUg
Q09ORklHX0FYVExTV1JBUCAxCj4gKyN1bmRlZiBDT05GSUdfQVhIVFRQRAo+ICsjdW5kZWYgQ09O
RklHX0hUVFBfU1RBVElDX0JVSUxECj4gKyNkZWZpbmUgQ09ORklHX0hUVFBfUE9SVApXaGVyZSB3
b3VsZCB0aGlzIGJlIHVzZWQgc2luY2Ugd2UgZG9uJ3QgaW5jbHVkZSBodHRwZCBzb3VyY2UgZGly
ZWN0b3JpZXM/Cj4gKyNkZWZpbmUgQ09ORklHX0hUVFBfSFRUUFNfUE9SVAo+ICsjZGVmaW5lIENP
TkZJR19IVFRQX1NFU1NJT05fQ0FDSEVfU0laRQo+ICsjZGVmaW5lIENPTkZJR19IVFRQX1dFQlJP
T1QgIiIKPiArI2RlZmluZSBDT05GSUdfSFRUUF9USU1FT1VUCj4gKyN1bmRlZiBDT05GSUdfSFRU
UF9IQVNfQ0dJCj4gKyNkZWZpbmUgQ09ORklHX0hUVFBfQ0dJX0VYVEVOU0lPTlMgIiIKPiArI3Vu
ZGVmIENPTkZJR19IVFRQX0VOQUJMRV9MVUEKPiArI2RlZmluZSBDT05GSUdfSFRUUF9MVUFfUFJF
RklYICIiCj4gKyN1bmRlZiBDT05GSUdfSFRUUF9CVUlMRF9MVUEKPiArI2RlZmluZSBDT05GSUdf
SFRUUF9DR0lfTEFVTkNIRVIgIiIKPiArI3VuZGVmIENPTkZJR19IVFRQX0RJUkVDVE9SSUVTCj4g
KyN1bmRlZiBDT05GSUdfSFRUUF9IQVNfQVVUSE9SSVpBVElPTgo+ICsjdW5kZWYgQ09ORklHX0hU
VFBfSEFTX0lQVjYKPiArI3VuZGVmIENPTkZJR19IVFRQX0VOQUJMRV9ESUZGRVJFTlRfVVNFUgo+
ICsjZGVmaW5lIENPTkZJR19IVFRQX1VTRVIgIiIKPiArI3VuZGVmIENPTkZJR19IVFRQX1ZFUkJP
U0UKPiArI3VuZGVmIENPTkZJR19IVFRQX0lTX0RBRU1PTgo+ICsKPiArLyoKPiArICogTGFuZ3Vh
Z2UgQmluZGluZ3MKPiArICovCj4gKyN1bmRlZiBDT05GSUdfQklORElOR1MKPiArI3VuZGVmIENP
TkZJR19DU0hBUlBfQklORElOR1MKPiArI3VuZGVmIENPTkZJR19WQk5FVF9CSU5ESU5HUwo+ICsj
ZGVmaW5lIENPTkZJR19ET1RfTkVUX0ZSQU1FV09SS19CQVNFICIiCj4gKyN1bmRlZiBDT05GSUdf
SkFWQV9CSU5ESU5HUwo+ICsjZGVmaW5lIENPTkZJR19KQVZBX0hPTUUgIiIKPiArI3VuZGVmIENP
TkZJR19QRVJMX0JJTkRJTkdTCj4gKyNkZWZpbmUgQ09ORklHX1BFUkxfQ09SRSAiIgo+ICsjZGVm
aW5lIENPTkZJR19QRVJMX0xJQiAiIgo+ICsjdW5kZWYgQ09ORklHX0xVQV9CSU5ESU5HUwo+ICsj
ZGVmaW5lIENPTkZJR19MVUFfQ09SRSAiIgo+ICsKPiArLyoKPiArICogU2FtcGxlcwo+ICsgKi8K
PiArI3VuZGVmIENPTkZJR19TQU1QTEVTCj4gKyN1bmRlZiBDT05GSUdfQ19TQU1QTEVTCj4gKyN1
bmRlZiBDT05GSUdfQ1NIQVJQX1NBTVBMRVMKPiArI3VuZGVmIENPTkZJR19WQk5FVF9TQU1QTEVT
Cj4gKyN1bmRlZiBDT05GSUdfSkFWQV9TQU1QTEVTCj4gKyN1bmRlZiBDT05GSUdfUEVSTF9TQU1Q
TEVTCj4gKyN1bmRlZiBDT05GSUdfTFVBX1NBTVBMRVMKPiArCj4gKy8qCj4gKyAqIEJpZ0ludCBP
cHRpb25zCj4gKyAqLwo+ICsjdW5kZWYgQ09ORklHX0JJR0lOVF9DTEFTU0lDQUwKPiArI3VuZGVm
IENPTkZJR19CSUdJTlRfTU9OVEdPTUVSWQo+ICsjZGVmaW5lIENPTkZJR19CSUdJTlRfQkFSUkVU
VCAxCj4gKyNkZWZpbmUgQ09ORklHX0JJR0lOVF9DUlQgMQo+ICsjdW5kZWYgQ09ORklHX0JJR0lO
VF9LQVJBVFNVQkEKPiArI2RlZmluZSBNVUxfS0FSQVRTVUJBX1RIUkVTSAo+ICsjZGVmaW5lIFNR
VV9LQVJBVFNVQkFfVEhSRVNICj4gKyNkZWZpbmUgQ09ORklHX0JJR0lOVF9TTElESU5HX1dJTkRP
VyAxCj4gKyNkZWZpbmUgQ09ORklHX0JJR0lOVF9TUVVBUkUgMQo+ICsjdW5kZWYgQ09ORklHX0JJ
R0lOVF9DSEVDS19PTgo+ICsjZGVmaW5lIENPTkZJR19JTlRFR0VSXzMyQklUIDEKPiArI3VuZGVm
IENPTkZJR19JTlRFR0VSXzE2QklUCj4gKyN1bmRlZiBDT05GSUdfSU5URUdFUl84QklUCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 14:58:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 14:58:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i844G-0007jk-6c; Wed, 11 Sep 2019 14:58:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yAp6=XG=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i844F-0007jf-5B
 for minios-devel@lists.xenproject.org; Wed, 11 Sep 2019 14:57:59 +0000
X-Inumbo-ID: 89b9676f-d4a4-11e9-83d6-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 89b9676f-d4a4-11e9-83d6-12813bfff9fa;
 Wed, 11 Sep 2019 14:57:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 689BB105697;
 Wed, 11 Sep 2019 16:57:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id dr24EJTGsm20; Wed, 11 Sep 2019 16:57:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4504B10554E
 for <minios-devel@lists.xenproject.org>; Wed, 11 Sep 2019 16:57:56 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 11 Sep
 2019 16:57:55 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190713053619.32186-1-felipe.huici@neclab.eu>
 <20190713053619.32186-3-felipe.huici@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <41fd0b68-c92c-cb6e-da1c-f35d87cc74a2@neclab.eu>
Date: Wed, 11 Sep 2019 16:57:55 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190713053619.32186-3-felipe.huici@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH 2/2] Add ddocumentation
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gRmVsaXBlLAoKVGhpcyBwYXRjaCBzZWVtcyBhbHJpZ2h0LiBJIGhhZCBhIG1pbm9yIGNv
bW1lbnQsIHBsZWFzZSBmaW5kIGl0IGlubGluZS4KClRoYW5rcyAmIFJlZ2FyZHMKClNoYXJhbgoK
T24gNy8xMy8xOSA3OjM2IEFNLCBGZWxpcGUgSHVpY2kgd3JvdGU6Cj4gU2lnbmVkLW9mZi1ieTog
RmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgQ09ESU5HX1NU
WUxFLm1kIHwgIDQgKysrKwo+ICAgQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKwo+ICAgQ09QWUlO
Ry5tZCAgICAgIHwgMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAg
IE1BSU5UQUlORVJTLm1kICB8IDEwICsrKysrKysrKysKPiAgIE1ha2VmaWxlLnVrICAgICB8ICA4
ICstLS0tLS0tCj4gICBSRUFETUUubWQgICAgICAgfCAxNiArKysrKysrKysrKysrKysrCj4gICBn
bHVlLmMgICAgICAgICAgfCAxMiAtLS0tLS0tLS0tLS0KPiAgIDcgZmlsZXMgY2hhbmdlZCwgNzMg
aW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09E
SU5HX1NUWUxFLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCj4gICBj
cmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5U
QUlORVJTLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCj4gICBkZWxldGUgbW9k
ZSAxMDA2NDQgZ2x1ZS5jCj4KPiBkaWZmIC0tZ2l0IGEvQ09ESU5HX1NUWUxFLm1kIGIvQ09ESU5H
X1NUWUxFLm1kCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41NzMwMDQx
Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0NPRElOR19TVFlMRS5tZAo+IEBAIC0wLDAgKzEsNCBA
QAo+ICtDb2RpbmcgU3R5bGUKPiArPT09PT09PT09PT09Cj4gKwo+ICtQbGVhc2UgcmVmZXIgdG8g
dGhlIGBDT0RJTkdfU1RZTEUubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9y
eS4KPiBkaWZmIC0tZ2l0IGEvQ09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCj4gbmV3
IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi41ZjU1ZWNhCj4gLS0tIC9kZXYvbnVs
bAo+ICsrKyBiL0NPTlRSSUJVVElORy5tZAo+IEBAIC0wLDAgKzEsNCBAQAo+ICtDb250cmlidXRp
bmcgdG8gVW5pa3JhZnQKPiArPT09PT09PT09PT09PT09PT09PT09PT0KPiArCj4gK1BsZWFzZSBy
ZWZlciB0byB0aGUgYENPTlRSSUJVVElORy5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCBy
ZXBvc2l0b3J5Lgo+IGRpZmYgLS1naXQgYS9DT1BZSU5HLm1kIGIvQ09QWUlORy5tZAo+IG5ldyBm
aWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMjRjZjdjMQo+IC0tLSAvZGV2L251bGwK
PiArKysgYi9DT1BZSU5HLm1kCj4gQEAgLTAsMCArMSwzOCBAQAo+ICtMaWNlbnNlCj4gKz09PT09
PT0KPiArCj4gK1VuaWtyYWZ0IGF4dGxzIHdyYXBwZXJzCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQo+ICsKPiArVGhpcyByZXBvc2l0b3J5IGNvbnRhaW5zIHdyYXBwZXIgY29kZSB0byBidWls
ZCBsaWJ1dWlkIHdpdGggVW5pa3JhZnQuCj4gK0VhY2ggQyBjb2RlIGZpbGUgaW4gdGhpcyByZXBv
c2l0b3J5IHNob3VsZCBkZWNsYXJlIHdobyBpcyB0aGUKPiArY29weXJpZ2h0IG93bmVyIGFuZCB1
bmRlciB3aGljaCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGUgY29kZSBpcwo+ICtsaWNlbnNlZC4g
SWYgc3VjaCBhIGxpY2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdo
dAo+ICtub3RpY2Ugd2lsbCBhcHBseToKPiArCj4gKwlDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBF
dXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsKPiAr
CVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAo+ICsJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gKwlhcmUgbWV0Ogo+ICsKPiArCTEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4g
KwkgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCj4gKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQo+ICsJICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KPiArCTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9y
IHRoZSBuYW1lcyBvZiBpdHMKPiArCSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCj4gKwkgICB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsKPiArCVRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgo+ICsJQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsJSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
PiArCUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKPiArCUxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArCUNPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKwlT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKPiArCUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKwlDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsJ
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKPiArCVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+IGRpZmYg
LS1naXQgYS9NQUlOVEFJTkVSUy5tZCBiL01BSU5UQUlORVJTLm1kCj4gbmV3IGZpbGUgbW9kZSAx
MDA2NDQKPiBpbmRleCAwMDAwMDAwLi42YTJmMGUyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL01B
SU5UQUlORVJTLm1kCj4gQEAgLTAsMCArMSwxMCBAQAo+ICtNYWludGFpbmVycyBMaXN0Cj4gKz09
PT09PT09PT09PT09PT0KPiArCj4gK0ZvciBub3RlcyBvbiBob3cgdG8gcmVhZCB0aGlzIGluZm9y
bWF0aW9uLCBwbGVhc2UgcmVmZXIgdG8gYE1BSU5UQUlORVJTLm1kYCBpbgo+ICt0aGUgbWFpbiBV
bmlrcmFmdCByZXBvc2l0b3J5Lgo+ICsKPiArCUFYVExTLVVOSUtSQUZUCj4gKwlNOglGZWxpcGUg
SHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gKwlMOgltaW5pb3MtZGV2ZWxAbGlzdHMu
eGVuLm9yZwo+ICsJRjogKgo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVr
Cj4gaW5kZXggY2Y1MTNhMC4uNGZkNjhkYiAxMDA2NDQKPiAtLS0gYS9NYWtlZmlsZS51awo+ICsr
KyBiL01ha2VmaWxlLnVrCj4gQEAgLTEsOCArMSw3IEBACj4gLSMgIGxpYmF4dGxzIE1ha2VmaWxl
LnVjCj4gKyMgIGxpYmF4dGxzIE1ha2VmaWxlLnVrCj4gICAjCj4gICAjICBBdXRob3JzOiBGZWxp
cGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gICAjCj4gLSMKPiAgICMgIENvcHly
aWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCj4gICAjCj4gICAjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPiBAQCAtODMsMTEgKzgyLDYgQEAg
TElCQVhUTFNfQ0ZMQUdTLXkgICArPSAkKFNVUFBSRVNTX0ZMQUdTKQo+ICAgTElCQVhUTFNfQ1hY
RkxBR1MteSArPSAkKFNVUFBSRVNTX0ZMQUdTKQo+ICAgCj4gICAjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIwo+IC0jIE9TIGRlcGVuZGVuY2llcyBjb2RlIC0gR2x1ZSBiZXR3ZWVuIFVuaWtmcmFmdCBh
bmQgYXh0bHMKPiAtIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiAtTElCQVhUTFNfU1JDUy15ICs9
ICQoTElCQVhUTFNfQkFTRSkvZ2x1ZS5jCj4gLQoKU2luY2UgdGhlIGZpcnN0IHBhdGNoIG5lZWQg
c29tZSByZXdvcmssIEkgd291bGQgbWVyZ2UgdGhpcyBjaGFuZ2Ugd2l0aCAKdGhlIHByZXZpb3Vz
IHBhdGNoLgoKCj4gLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gICAjIGF4dGxzIGNvZGUgLSBj
cnlwdG8KPiAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gICBMSUJBWFRMU19TUkNTLXkgKz0g
JChMSUJBWFRMU19TUkMpL2NyeXB0by9hZXMuYwo+IGRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9S
RUFETUUubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmQxMjc4NmMK
PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvUkVBRE1FLm1kCj4gQEAgLTAsMCArMSwxNiBAQAo+ICth
eHRscyBmb3IgVW5pa3JhZnQKPiArPT09PT09PT09PT09PT09PT09PQo+ICtUaGlzIGlzIHRoZSBw
b3J0IG9mIGF4dGxzIGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5LiBZb3Ugd2lsbAo+
ICtuZWVkIGx3aXAgdG8gbWFrZSBpdCB3b3JrLgo+ICsKPiArVG8gcnVuIHNzbHRlc3QuYyBhcyBh
IHVuaXQgdGVzdCwgeW91J2xsIG5lZWQgcHRocmVhZCBzdXBwb3J0LCBlLmcuLAo+ICthZGQgdGhl
IGZvbGxvd2luZyBsaW5lIHRvIHRoZSBMSUJTIHZhcmlhYmxlIGluIHRoZSBNYWtlZmlsZToKPiAr
Cj4gKyAgIC4uLiQoVUtfTElCUykvbHdpcDokKFVLX0xJQlMpL3B0aHJlYWQtZW1iZWRkZWQ6Cj4g
KyAgICAgICQoVUtfTElCUykvbmV3bGliOiQoVUtfTElCUykvYXh0bHMuLi4KPiArCj4gK05vdGUg
dGhhdCB5b3UnbGwgbmVlZCBhIGZpbGVzeXN0ZW0gaW4gcGxhY2UgYW5kIHRoZSBjZXJ0aWZpY2F0
ZSBmaWxlcyBmb3IKPiArYWxsIHRlc3RzIHRvIHBhc3MuCj4gKwo+ICtQbGVhc2UgcmVmZXIgdG8g
dGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIGBkb2Mv
YAo+ICtzdWJkaXJlY3Rvcnkgb2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KPiBkaWZm
IC0tZ2l0IGEvZ2x1ZS5jIGIvZ2x1ZS5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k
ZXggNzEzOGY5ZC4uMDAwMDAwMAo+IC0tLSBhL2dsdWUuYwo+ICsrKyAvZGV2L251bGwKPiBAQCAt
MSwxMiArMCwwIEBACj4gLS8qIEFjY29yZGluZyB0byBQT1NJWC4xLTIwMDEsIFBPU0lYLjEtMjAw
OCAqLwo+IC0jaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgo+IC0KPiAtLyogQWNjb3JkaW5nIHRvIGVh
cmxpZXIgc3RhbmRhcmRzICovCj4gLSNpbmNsdWRlIDxzeXMvdGltZS5oPgo+IC0jaW5jbHVkZSA8
c3lzL3R5cGVzLmg+Cj4gLSNpbmNsdWRlIDx1bmlzdGQuaD4KPiAtCj4gLWludCBzZWxlY3QoaW50
IG5mZHMsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywKPiAtCSAgIGZkX3NldCAq
ZXhjZXB0ZmRzLCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCkgewo+IC0JcmV0dXJuIC0xOwo+IC19
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 15:00:09 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 15:00:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i846K-0008PQ-DQ; Wed, 11 Sep 2019 15:00:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i846J-0008Mr-Eu
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 15:00:07 +0000
X-Inumbo-ID: d65f5f10-d4a4-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.44]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d65f5f10-d4a4-11e9-b299-bc764e2007e4;
 Wed, 11 Sep 2019 15:00:05 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=l3jpnOpvZCqZ/6apUP6UA8OsUbSP+B1UjqnBedP4em4RUFJRFzFWhHxNhJIyrANMXSK/EieHunfOgOTLa23pxW0Iyf0U9fspDPNVdITdRz54IV8aju16dZEA6shFEyGgECaPX/23I3ayzFIO6quotkZs6FD43iSXFLikmgeNTXwMU7McOkr3tkP9r0dJN6Ec7b5Hq2IQwXrMinz+cGN2ruTnRBWq084RGVTBy0W5pbzNujc8u+6ANo65b3i/Jg7TfFxsl0vugWW8aoCGVbgjLGu9dUIdcEbLfNOVpvrego3+05W3fxZ1xkxysdw8dMSZrgqaM3/AnxLuOM7qDd8Ffg==
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=Vbc0cxZE9D3KlORc6aFY1vVTYGJhqqRRiqx2zp4E+dU=;
 b=AidWUmU7hr5nrOz56BenecqO+ogGq4ZwS6Kx+lBNPgwi0FC/iCiVDEp08wxEtBzlGwg+QBeSEjVOtbbPoRx5IW4BiRO/AhpFfsIA0LH712DNdTE2tvZneY3w1zfx/tQmAdaD//6oX4at/3UgrPoypHCSxNFPxmOA1Cz9iKFe+T8q0rYBzMmWmObUbWzMbu0BA4KJAvDcMU0aiMq5vzLfF5PcO20EgIXmIiGuH7LcygysuJrHeusZKkI3HGO3qNccsqYBcmXPxee5iJ8Gy7YURFrIVoNAJIOQNOZP75XI4sOqt96EZEL5C6ei6gG3L1xH5+N0YEN/NOsDQvNgtJ9ycQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4811.eurprd01.prod.exchangelabs.com (20.177.209.30) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Wed, 11 Sep
 2019 15:00:02 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 15:00:02 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 0/3] lib/uktime: Import timegm from musl
Thread-Index: AQHVaLGWkPIBQfzuSUaerT+6deBauA==
Date: Wed, 11 Sep 2019 15:00:02 +0000
Message-ID: <20190911145955.6655-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0004.eurprd03.prod.outlook.com
 (2603:10a6:802:a0::16) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: f4773354-b3c0-4bf2-c096-08d736c8b92a
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4811; 
x-ms-traffictypediagnostic: PR1PR01MB4811:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48117E24847B0331B792CA5BA6B10@PR1PR01MB4811.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6108;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(346002)(136003)(39840400004)(376002)(199004)(189003)(81166006)(486006)(186003)(386003)(6116002)(102836004)(25786009)(2616005)(476003)(46003)(8936002)(45776006)(2501003)(81156014)(8676002)(6506007)(4326008)(50226002)(66446008)(7736002)(66946007)(66556008)(66476007)(64756008)(305945005)(1076003)(71190400001)(5640700003)(786003)(316002)(6916009)(99286004)(52116002)(71200400001)(53936002)(14454004)(2906002)(2351001)(478600001)(86362001)(6486002)(5660300002)(54906003)(6436002)(256004)(6512007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4811;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: WgB49j/Bzl0pCE5EfZrTF5KRHDiMY1ALxMImimX2rgUPlC7nYgrh7/ONLEdZI9SOGgsy8oMzJc95R98MwSOL6zqeAQYIFoc+XOG5CPlFJhgmoLWWOvXTKpbddR97KG9S6EJBaYHwW8R1uI8jqGMoMn7vjdI2ayFJKfTcFoEsqb3dEOPvLpNrE0p2EjAnDvFNZpe2Js1qDKguLMIwAeOY7HPU5yReVKv0hyKCFNgxJjT5t/26A5DKvZIciEdXXvQ/WOe9VS0w6erLc+kMmbq8n11BoXVAIAwh1u6RvybVldTAXlweRlyqYDH8ti+1Q5X2VfOgVOZlCDIUNy5tIZHW3YyUj7zafyKMuFJNeNGtV/jhduCZlOQV6g5kvD4Lfxq1iYealAtb1EpGHmiReKaDqcBsg4kFCgAey0ndjMjjjDA=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: f4773354-b3c0-4bf2-c096-08d736c8b92a
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 15:00:02.5699 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: p4Cf8X5F3nu9WQuJ8feREzkw4YtrkDoaJ3ZRXVbvjnBQ0DO8bWKimYlpR4vEkNvJiuvbJi+2SDvjXuTTBLmILSj1FVqdyjwijtlInBw6xD8HyMgruTFeij6Jdx+BFfyo
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4811
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/3] lib/uktime: Import timegm
 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgaW1wb3J0IHRoZSB0aW1lZ20gZnVuY3Rpb24gZnJvbSBtdXNsIHRvIHRoZSBuZXdseSBjcmVh
dGVkIApsaWJyYXJ5LCB1a3RpbWUuIFdlIG1vdmUgdGhlIGRlZmluaXRpb25zIGZyb20gbm9saWJj
L3RpbWUuaAp0byB1a3RpbWUvdGltZS5oLiBUaGlzIGZ1bmN0aW9uIGlzIG5lZWRlZCBieSBQeXRo
b24gMy4KCkNoYW5nZXMgc2luY2UgdjE6CiopIERyb3BwZWQgdGhlIG5vbGliYyBwYXRjaAoqKSBN
b3ZlZCBfdGltZV90eXBlcy5oIHRvIGluY2x1ZGUvdWt0aW1lCiopIFJlbW92ZWQgZHVwbGljYXRl
IF90aW1lX3R5cGVzLmggaW4gbXVzbC1pbXBvcnRlZAoqKSBBZGRlZCBsaWNlbnNlIHRvIF90aW1l
X3R5cGVzLmgKClZsYWQtQW5kcmVpIEJhZG9pdSAoMyk6CiAgbGliL3VrdGltZTogSW1wb3J0IHRp
bWVnbSBmcm9tIG11c2wKICBsaWIvdWt0aW1lOiBBZGFwdCB0aW1lZ20gaW1wbGVtZW50YXRpb24g
dG8gVW5pa3JhZnQKICBsaWIvdWt0aW1lOiBGaXggY2hlY2twYXRoIGVycm9ycyBmb3IgdGltZWdt
CgogbGliL3VrdGltZS9NYWtlZmlsZS51ayAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEzICst
CiBsaWIvdWt0aW1lL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0K
IGxpYi91a3RpbWUvaW5jbHVkZS91a3RpbWUvX3RpbWVfdHlwZXMuaCAgICAgICB8ICA2MiArKysr
KysrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZV9pbXBsLmggIHwgICA3
ICsKIC4uLi9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWt0aW1lL3RpbWUuaCAgICAgICB8IDE1MCAr
KysrKysrKysrKysrKysrKysKIC4uLi9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3Mu
YyAgICAgICB8ICAxMiArKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9f
dG0uYyAgIHwgIDgyICsrKysrKysrKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190
bV90b19zZWNzLmMgICB8ICAyNyArKysrCiBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19f
eWVhcl90b19zZWNzLmMgfCAgNTUgKysrKysrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy90aW1lZ20uYyAgICAgICAgIHwgIDIxICsrKwogMTAgZmlsZXMgY2hhbmdlZCwgNDI4IGluc2Vy
dGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9p
bmNsdWRlL3VrdGltZS9fdGltZV90eXBlcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGlt
ZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZV9pbXBsLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs
aWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS91a3RpbWUvdGltZS5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3Rv
X3RtLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19f
dG1fdG9fc2Vjcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy9fX3llYXJfdG9fc2Vjcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL3NyYy90aW1lZ20uYwoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 15:00:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 15:00:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i846b-0008QM-Ga; Wed, 11 Sep 2019 15:00:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i846a-0008QH-5U
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 15:00:24 +0000
X-Inumbo-ID: e0a5dda1-d4a4-11e9-83d6-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.87]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e0a5dda1-d4a4-11e9-83d6-12813bfff9fa;
 Wed, 11 Sep 2019 15:00:22 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=XMANeFGTQ+mqheCl7TfymeuuEI4X5RSS7VFbiBFnb5FrYNM5Fs0Gh3fVgTVbz1NrGnOu5YP6kfdkg/grXfNY0L29Mbs4+MR107Dy/x3f3nGon35Apobgkhb01DUslNQ2FcZReJ8F3TqsjsQZiqwCs6dwCz81U1ZJy0oGs6jmZnHnCnXy9ZlYettDy5UM6i0wbTEZ+yVclfWAW+v9ZHUnmosrkveOaCKM3FnJt7JxgU9L0KvX8F6eo49fly1c/cq1V+R4NFPItG2AUNmFGKNkI6qHSS41EDEG1DZpa0f6BZNzQDf9PP1xByqqgyT5Y2Fuc4YzUHX+N6Prx/0ldAxDTA==
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=p0zglTQ9ecPFTCkEEaFp99YiTGad1ZYFDyUkvmSva2k=;
 b=jHeFeINwtFaAqK9qxzHxZ1H4AJME2qEu+RhHILmf/isIRzCcequF1IdQihQYfHQKNojdYxsuZzlwtCYv9AeOrVJgVhs3C+sjGTBX3yjzGeMvFiqonfEyHPe6S6ciGmLyAJe18S+QhwJ/wKnJ7yBiqm+uRBolHNpn6UimZ/yrQFdnioPTlwmiAot3hQXzKYITMHthhfpGW2XFw0hLw1mTulH+ze8rVpMb1aeC/wXjA+9lZTiljkRDZPYi/i2z2n+KwupoSlc4bjV++jJqQWICQ2xrX/0hP/PO14wYAK0RStz9KSMVGLHJr06Gzkp6TXznTSkYDS7+sFsQSRj9dZWBIw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4874.eurprd01.prod.exchangelabs.com (20.177.208.206) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.20; Wed, 11 Sep
 2019 15:00:20 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 15:00:20 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 3/3] lib/uktime: Fix checkpath errors for
 timegm
Thread-Index: AQHVaLGhn2Y3CdTikU2EwiW4LmEvnA==
Date: Wed, 11 Sep 2019 15:00:20 +0000
Message-ID: <20190911145955.6655-4-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190911145955.6655-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190911145955.6655-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0004.eurprd03.prod.outlook.com
 (2603:10a6:802:a0::16) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: c6f9ac04-294e-4b90-f77f-08d736c8c3bf
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600166)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:PR1PR01MB4874; 
x-ms-traffictypediagnostic: PR1PR01MB4874:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48745C420629279499B400BEA6B10@PR1PR01MB4874.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6108;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(396003)(376002)(346002)(39840400004)(366004)(136003)(199004)(189003)(5660300002)(2501003)(46003)(8936002)(2906002)(50226002)(6486002)(6436002)(5640700003)(6116002)(6512007)(2351001)(6916009)(305945005)(6506007)(102836004)(386003)(446003)(45776006)(4326008)(316002)(786003)(53936002)(8676002)(7736002)(81156014)(81166006)(86362001)(186003)(256004)(14444005)(478600001)(52116002)(54906003)(71190400001)(76176011)(66946007)(66476007)(66446008)(64756008)(66556008)(486006)(14454004)(71200400001)(2616005)(1076003)(25786009)(99286004)(476003)(11346002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4874;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: v9Jnp52tD0UaACnyjgyMpUkA422PzFzOSdGHIRLbuLgrdu/ytjBl4r69wZsAAumQQDeWfO5bZH1dSCwducKcnB1ZUJLZ+rbq5o98o3fcbPYPhivzwhWsii1HOkbCzWPWrmdAaPBwb2yMQVqnLMjPL8AquZyOHBQ1ome9A7u8161SOUaNJ8+4efJofTDNphVQ5+R3+IYeL6pIpJGNK6c/j68HackMUy+TNDoSbaQ5JP5XCwid58oM0boChmsm1Pb1x0fNCW1Xyc2UeN8X1t3ZF0JS1uKIfQScotPZeoZILZHdrTXQanCOW9x6dLZxCJsiyole5MatT4rnSZv1LRBvcQrDfwFnhhb/1wp2t069BhXRuu2DqKOWspzPESkxHzXbv8P4rdCrMqIV2GR+EgHx6UOY50Yu4ry3L3risnghoFk=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: c6f9ac04-294e-4b90-f77f-08d736c8c3bf
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 15:00:20.3140 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: rV4knSFri0k9aIP7QIW42DCh1hoX8yOO7nKav3SUdakXWM444HtHkiKO+4BLXQxeKylIFURfgZ8iGSYLsvIoyVSc0krLtjRHteGvMguZjFlP1aVb5W7o2DCk7tPK4Ho4
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4874
Subject: [Minios-devel] [UNIKRAFT PATCH v2 3/3] lib/uktime: Fix checkpath
 errors for timegm
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgZml4IHRoZSBjaGVja3BhdGggZXJyb3JzIG9mIHRoZSBpbXBvcnRlZCBmaWxlcy4gV2Ugb21p
dCB0aGUKImZ1bmN0aW9uIGRlZmluaXRpb24gYXJndW1lbnQgKiBzaG91bGQgYWxzbyBoYXZlIGFu
IGlkZW50aWZpZXIgbmFtZSIKd2FybmluZ3Mgc2luY2UgdGhlIGZ1bmN0aW9ucyBhcmUgY29tbWVu
dGVkIG91dC4KClNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWku
YmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KLS0tCiAuLi4vbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vr
dGltZS90aW1lLmggICAgICAgfCA1NiArKysrKysrKystLS0tLS0tLS0tCiAuLi4vbXVzbC1pbXBv
cnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgICAgICAgfCAgNCArLQogbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYyAgIHwgIDQgKy0KIGxpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMgICB8ICAzICsKIGxpYi91a3RpbWUvbXVzbC1pbXBv
cnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYyB8IDIyICsrKysrLS0tCiBsaWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL3RpbWVnbS5jICAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDUy
IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUv
bXVzbC1pbXBvcnRlZC9pbmNsdWRlL3VrdGltZS90aW1lLmggYi9saWIvdWt0aW1lL211c2wtaW1w
b3J0ZWQvaW5jbHVkZS91a3RpbWUvdGltZS5oCmluZGV4IGE3NzkyNmMxLi5iMzRiMGYzMCAxMDA2
NDQKLS0tIGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWt0aW1lL3RpbWUuaAor
KysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS91a3RpbWUvdGltZS5oCkBAIC01
NCwxNSArNTQsMTUgQEAgc3RydWN0IHRtIHsKIH07CiAKICNpZiAwCi1jbG9ja190IGNsb2NrICh2
b2lkKTsKLXRpbWVfdCB0aW1lICh0aW1lX3QgKik7Ci1kb3VibGUgZGlmZnRpbWUgKHRpbWVfdCwg
dGltZV90KTsKLXRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqKTsKLXNpemVfdCBzdHJmdGltZSAo
Y2hhciAqX19yZXN0cmljdCwgc2l6ZV90LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBjb25zdCBz
dHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwotc3RydWN0IHRtICpnbXRpbWUgKGNvbnN0IHRpbWVfdCAq
KTsKLXN0cnVjdCB0bSAqbG9jYWx0aW1lIChjb25zdCB0aW1lX3QgKik7Ci1jaGFyICphc2N0aW1l
IChjb25zdCBzdHJ1Y3QgdG0gKik7Ci1jaGFyICpjdGltZSAoY29uc3QgdGltZV90ICopOworY2xv
Y2tfdCBjbG9jayh2b2lkKTsKK3RpbWVfdCB0aW1lKHRpbWVfdCAqKTsKK2RvdWJsZSBkaWZmdGlt
ZSh0aW1lX3QsIHRpbWVfdCk7Cit0aW1lX3QgbWt0aW1lKHN0cnVjdCB0bSAqKTsKK3NpemVfdCBz
dHJmdGltZShjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3Qs
IGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitzdHJ1Y3QgdG0gKmdtdGltZShjb25zdCB0
aW1lX3QgKik7CitzdHJ1Y3QgdG0gKmxvY2FsdGltZShjb25zdCB0aW1lX3QgKik7CitjaGFyICph
c2N0aW1lKGNvbnN0IHN0cnVjdCB0bSAqKTsKK2NoYXIgKmN0aW1lKGNvbnN0IHRpbWVfdCAqKTsK
IGludCB0aW1lc3BlY19nZXQoc3RydWN0IHRpbWVzcGVjICosIGludCk7CiAjZW5kaWYKIApAQCAt
NzUsMTQgKzc1LDE0IEBAIGludCB0aW1lc3BlY19nZXQoc3RydWN0IHRpbWVzcGVjICosIGludCk7
CiAgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKIAogI2lmIDAKLXNpemVfdCBzdHJmdGltZV9sIChj
aGFyICogIF9fcmVzdHJpY3QsIHNpemVfdCwgY29uc3QgY2hhciAqICBfX3Jlc3RyaWN0LCBjb25z
dCBzdHJ1Y3QgdG0gKiAgX19yZXN0cmljdCwgbG9jYWxlX3QpOworc2l6ZV90IHN0cmZ0aW1lX2wo
Y2hhciAqX19yZXN0cmljdCwgc2l6ZV90LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBjb25zdCBz
dHJ1Y3QgdG0gKl9fcmVzdHJpY3QsIGxvY2FsZV90KTsKIAotc3RydWN0IHRtICpnbXRpbWVfciAo
Y29uc3QgdGltZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwotc3RydWN0
IHRtICpsb2NhbHRpbWVfciAoY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9f
cmVzdHJpY3QpOwotY2hhciAqYXNjdGltZV9yIChjb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qs
IGNoYXIgKl9fcmVzdHJpY3QpOwotY2hhciAqY3RpbWVfciAoY29uc3QgdGltZV90ICosIGNoYXIg
Kik7CitzdHJ1Y3QgdG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqX19yZXN0cmljdCwgc3RydWN0
IHRtICpfX3Jlc3RyaWN0KTsKK3N0cnVjdCB0bSAqbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICpf
X3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOworY2hhciAqYXNjdGltZV9yKGNvbnN0
IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgY2hhciAqX19yZXN0cmljdCk7CitjaGFyICpjdGltZV9y
KGNvbnN0IHRpbWVfdCAqLCBjaGFyICopOwogCi12b2lkIHR6c2V0ICh2b2lkKTsKK3ZvaWQgdHpz
ZXQodm9pZCk7CiAjZW5kaWYKIAogc3RydWN0IGl0aW1lcnNwZWMgewpAQCAtMTA1LDIyICsxMDUs
MjIgQEAgc3RydWN0IGl0aW1lcnNwZWMgewogCiAjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMQogCi1p
bnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICop
OworaW50IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVj
ICopOwogI2lmIDAKLWludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVj
ICopOworaW50IGNsb2NrX2dldHJlcyhjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKICNl
bmRpZgotaW50IGNsb2NrX2dldHRpbWUgKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwor
aW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CiAjaWYgMAot
aW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOwot
aW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3Bl
YyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7Ci1pbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3Qs
IGNsb2NraWRfdCAqKTsKK2ludCBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0
IHRpbWVzcGVjICopOworaW50IGNsb2NrX25hbm9zbGVlcChjbG9ja2lkX3QsIGludCwgY29uc3Qg
c3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKK2ludCBjbG9ja19nZXRjcHVj
bG9ja2lkKHBpZF90LCBjbG9ja2lkX3QgKik7CiAKIHN0cnVjdCBzaWdldmVudDsKLWludCB0aW1l
cl9jcmVhdGUgKGNsb2NraWRfdCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0LCB0aW1lcl90
ICpfX3Jlc3RyaWN0KTsKLWludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QpOwotaW50IHRpbWVyX3Nl
dHRpbWUgKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3Qs
IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0KTsKLWludCB0aW1lcl9nZXR0aW1lICh0aW1l
cl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKLWludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90
KTsKK2ludCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJp
Y3QsIHRpbWVyX3QgKl9fcmVzdHJpY3QpOworaW50IHRpbWVyX2RlbGV0ZSh0aW1lcl90KTsKK2lu
dCB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9f
cmVzdHJpY3QsIHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0KTsKK2ludCB0aW1lcl9nZXR0
aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOworaW50IHRpbWVyX2dldG92ZXJydW4o
dGltZXJfdCk7CiAKIGV4dGVybiBjaGFyICp0em5hbWVbMl07CiAjZW5kaWYKQEAgLTEyOCwxMSAr
MTI4LDExIEBAIGV4dGVybiBjaGFyICp0em5hbWVbMl07CiAKICNpZiAwCiAjaWYgZGVmaW5lZChf
WE9QRU5fU09VUkNFKSB8fCBkZWZpbmVkKF9CU0RfU09VUkNFKSB8fCBkZWZpbmVkKF9HTlVfU09V
UkNFKQotY2hhciAqc3RycHRpbWUgKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitjaGFyICpzdHJwdGltZShjb25z
dCBjaGFyICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9f
cmVzdHJpY3QpOwogZXh0ZXJuIGludCBkYXlsaWdodDsKIGV4dGVybiBsb25nIHRpbWV6b25lOwog
ZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKLXN0cnVjdCB0bSAqZ2V0ZGF0ZSAoY29uc3QgY2hhciAq
KTsKK3N0cnVjdCB0bSAqZ2V0ZGF0ZShjb25zdCBjaGFyICopOwogI2VuZGlmCiAjZW5kaWYKIApk
aWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3Mu
YyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMKaW5kZXgg
NDMyNDhmYjMuLmMzYWU1N2YzIDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQv
c3JjL19fbW9udGhfdG9fc2Vjcy5jCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMv
X19tb250aF90b19zZWNzLmMKQEAgLTUsNiArNSw4IEBAIGludCBfX21vbnRoX3RvX3NlY3MoaW50
IG1vbnRoLCBpbnQgaXNfbGVhcCkKIAkJMTIwKjg2NDAwLCAxNTEqODY0MDAsIDE4MSo4NjQwMCwg
MjEyKjg2NDAwLAogCQkyNDMqODY0MDAsIDI3Myo4NjQwMCwgMzA0Kjg2NDAwLCAzMzQqODY0MDAg
fTsKIAlpbnQgdCA9IHNlY3NfdGhyb3VnaF9tb250aFttb250aF07Ci0JaWYgKGlzX2xlYXAgJiYg
bW9udGggPj0gMikgdCs9ODY0MDA7CisKKwlpZiAoaXNfbGVhcCAmJiBtb250aCA+PSAyKQorCQl0
ICs9IDg2NDAwOwogCXJldHVybiB0OwogfQpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMv
X19zZWNzX3RvX3RtLmMKaW5kZXggMDkzZDkwMjEuLjRhOWY1M2EzIDEwMDY0NAotLS0gYS9saWIv
dWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jCisrKyBiL2xpYi91a3RpbWUv
bXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMKQEAgLTE1LDcgKzE1LDcgQEAgaW50IF9f
c2Vjc190b190bShsb25nIGxvbmcgdCwgc3RydWN0IHRtICp0bSkKIAlpbnQgcWNfY3ljbGVzLCBj
X2N5Y2xlcywgcV9jeWNsZXM7CiAJaW50IG1vbnRoczsKIAlpbnQgd2RheSwgeWRheSwgbGVhcDsK
LQlzdGF0aWMgY29uc3QgY2hhciBkYXlzX2luX21vbnRoW10gPSB7MzEsMzAsMzEsMzAsMzEsMzEs
MzAsMzEsMzAsMzEsMzEsMjl9OworCXN0YXRpYyBjb25zdCBjaGFyIGRheXNfaW5fbW9udGhbXSA9
IHszMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDI5fTsKIAogCS8q
IFJlamVjdCB0aW1lX3QgdmFsdWVzIHdob3NlIHllYXIgd291bGQgb3ZlcmZsb3cgaW50ICovCiAJ
aWYgKHQgPCBJTlRfTUlOICogMzE2MjI0MDBMTCB8fCB0ID4gSU5UX01BWCAqIDMxNjIyNDAwTEwp
CkBAIC01Nyw3ICs1Nyw3IEBAIGludCBfX3NlY3NfdG9fdG0obG9uZyBsb25nIHQsIHN0cnVjdCB0
bSAqdG0pCiAKIAl5ZWFycyA9IHJlbXllYXJzICsgNCpxX2N5Y2xlcyArIDEwMCpjX2N5Y2xlcyAr
IDQwMExMKnFjX2N5Y2xlczsKIAotCWZvciAobW9udGhzPTA7IGRheXNfaW5fbW9udGhbbW9udGhz
XSA8PSByZW1kYXlzOyBtb250aHMrKykKKwlmb3IgKG1vbnRocyA9IDA7IGRheXNfaW5fbW9udGhb
bW9udGhzXSA8PSByZW1kYXlzOyBtb250aHMrKykKIAkJcmVtZGF5cyAtPSBkYXlzX2luX21vbnRo
W21vbnRoc107CiAKIAlpZiAobW9udGhzID49IDEwKSB7CmRpZmYgLS1naXQgYS9saWIvdWt0aW1l
L211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9y
dGVkL3NyYy9fX3RtX3RvX3NlY3MuYwppbmRleCBjMjlmYTk4NS4uYWFmN2QxM2MgMTAwNjQ0Ci0t
LSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMKKysrIGIvbGli
L3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYwpAQCAtNSw4ICs1LDEwIEBA
IGxvbmcgbG9uZyBfX3RtX3RvX3NlY3MoY29uc3Qgc3RydWN0IHRtICp0bSkKIAlpbnQgaXNfbGVh
cDsKIAlsb25nIGxvbmcgeWVhciA9IHRtLT50bV95ZWFyOwogCWludCBtb250aCA9IHRtLT50bV9t
b247CisKIAlpZiAobW9udGggPj0gMTIgfHwgbW9udGggPCAwKSB7CiAJCWludCBhZGogPSBtb250
aCAvIDEyOworCiAJCW1vbnRoICU9IDEyOwogCQlpZiAobW9udGggPCAwKSB7CiAJCQlhZGotLTsK
QEAgLTE1LDYgKzE3LDcgQEAgbG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3QgdG0g
KnRtKQogCQl5ZWFyICs9IGFkajsKIAl9CiAJbG9uZyBsb25nIHQgPSBfX3llYXJfdG9fc2Vjcyh5
ZWFyLCAmaXNfbGVhcCk7CisKIAl0ICs9IF9fbW9udGhfdG9fc2Vjcyhtb250aCwgaXNfbGVhcCk7
CiAJdCArPSA4NjQwMExMICogKHRtLT50bV9tZGF5LTEpOwogCXQgKz0gMzYwMExMICogdG0tPnRt
X2hvdXI7CmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90
b19zZWNzLmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMK
aW5kZXggMjgyNGVjNmQuLjE2ZDcxYzU1IDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL211c2wtaW1w
b3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy9fX3llYXJfdG9fc2Vjcy5jCkBAIC0zLDE2ICszLDIwIEBAIGxvbmcgbG9uZyBfX3llYXJf
dG9fc2Vjcyhsb25nIGxvbmcgeWVhciwgaW50ICppc19sZWFwKQogCWlmICh5ZWFyLTJVTEwgPD0g
MTM2KSB7CiAJCWludCB5ID0geWVhcjsKIAkJaW50IGxlYXBzID0gKHktNjgpPj4yOworCiAJCWlm
ICghKCh5LTY4KSYzKSkgewogCQkJbGVhcHMtLTsKLQkJCWlmIChpc19sZWFwKSAqaXNfbGVhcCA9
IDE7Ci0JCX0gZWxzZSBpZiAoaXNfbGVhcCkgKmlzX2xlYXAgPSAwOworCQkJaWYgKGlzX2xlYXAp
CisJCQkJKmlzX2xlYXAgPSAxOworCQl9IGVsc2UgaWYgKGlzX2xlYXApCisJCQkqaXNfbGVhcCA9
IDA7CiAJCXJldHVybiAzMTUzNjAwMCooeS03MCkgKyA4NjQwMCpsZWFwczsKIAl9CiAKIAlpbnQg
Y3ljbGVzLCBjZW50dXJpZXMsIGxlYXBzLCByZW07CiAKLQlpZiAoIWlzX2xlYXApIGlzX2xlYXAg
PSAmKGludCl7MH07CisJaWYgKCFpc19sZWFwKQorCQlpc19sZWFwID0gJihpbnQpezB9OwogCWN5
Y2xlcyA9ICh5ZWFyLTEwMCkgLyA0MDA7CiAJcmVtID0gKHllYXItMTAwKSAlIDQwMDsKIAlpZiAo
cmVtIDwgMCkgewpAQCAtMjUsMTEgKzI5LDE1IEBAIGxvbmcgbG9uZyBfX3llYXJfdG9fc2Vjcyhs
b25nIGxvbmcgeWVhciwgaW50ICppc19sZWFwKQogCQlsZWFwcyA9IDA7CiAJfSBlbHNlIHsKIAkJ
aWYgKHJlbSA+PSAyMDApIHsKLQkJCWlmIChyZW0gPj0gMzAwKSBjZW50dXJpZXMgPSAzLCByZW0g
LT0gMzAwOwotCQkJZWxzZSBjZW50dXJpZXMgPSAyLCByZW0gLT0gMjAwOworCQkJaWYgKHJlbSA+
PSAzMDApCisJCQkJY2VudHVyaWVzID0gMywgcmVtIC09IDMwMDsKKwkJCWVsc2UKKwkJCQljZW50
dXJpZXMgPSAyLCByZW0gLT0gMjAwOwogCQl9IGVsc2UgewotCQkJaWYgKHJlbSA+PSAxMDApIGNl
bnR1cmllcyA9IDEsIHJlbSAtPSAxMDA7Ci0JCQllbHNlIGNlbnR1cmllcyA9IDA7CisJCQlpZiAo
cmVtID49IDEwMCkKKwkJCQljZW50dXJpZXMgPSAxLCByZW0gLT0gMTAwOworCQkJZWxzZQorCQkJ
CWNlbnR1cmllcyA9IDA7CiAJCX0KIAkJaWYgKCFyZW0pIHsKIAkJCSppc19sZWFwID0gMDsKZGlm
ZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMgYi9saWIvdWt0
aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jCmluZGV4IDgwZTI1MDZkLi5iZGU0MGI5MCAx
MDA2NDQKLS0tIGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYworKysgYi9s
aWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jCkBAIC04LDYgKzgsNyBAQCB0aW1l
X3QgdGltZWdtKHN0cnVjdCB0bSAqdG0pCiB7CiAJc3RydWN0IHRtIG5ldzsKIAlsb25nIGxvbmcg
dCA9IF9fdG1fdG9fc2Vjcyh0bSk7CisKIAlpZiAoX19zZWNzX3RvX3RtKHQsICZuZXcpIDwgMCkg
ewogCQllcnJubyA9IEVPVkVSRkxPVzsKIAkJcmV0dXJuIC0xOwotLSAKMi4yMC4xCgoKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 15:00:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 15:00:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i846g-0008Qw-Io; Wed, 11 Sep 2019 15:00:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i846f-0008Qp-5L
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 15:00:29 +0000
X-Inumbo-ID: de6d4817-d4a4-11e9-83d6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.72]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id de6d4817-d4a4-11e9-83d6-12813bfff9fa;
 Wed, 11 Sep 2019 15:00:19 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fEvZ1wPUcwRyaW3RIIekyvT4WXfWzAOuAvD/YsCy1+6Oc4GKrJwPvKY8reLuyuZ8GVKG0MiAdw52tP8CNKUGkliyrkjU49N2E0Lq9Hd4mhVyf5yruSQ5sAuOipX4LjCxrbG2vm0wNXy63MtGIX/vOplVv8BOK2zOJuABD7wuoec+e9LjJcpTq2ddK//vG9Ap/8lYlQs6QMbejUHw78x6y7qBN8jgNdanCVrHwQxU+1nhRqDH9uaeRu2zcpu2tdzUdQ6edM9CgEJvJET+/90Kx6Fn/gz9A9uODmUOnbNf6J6+BLobpeamM0HgnX2f3mUtWl8aJS8rQhOmnK071zvkTw==
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=t+mbzRIDC5X1/UALZmna2k9MO8rT85OpVqane2Ry9V4=;
 b=BuPwQCpJU+nhImR+uR0XBCAuNDHmY2madYBq4pdJ9tgNn9honS1ZGQCPYP00I8UcoXXDBWvFq6vALJIQEasROnG08DcMZ+veGikmK1ZIeBOwPO7XF2KsLHz0TDhVpn78B9SAjy4kv+DM8La7BubFWRv3g6K/SyBc7g4wgPO5XFqeWOMWT/hZwa2Esv+WELH4JXyAx34QpZMzjrGgfMObO7NfZnx8QjbKf9R57aNvjrg0oo7BQbBmk0mqy2J9uv0OeFdBVFd0mWZgQlYSiSw5V7PW23c5frt2Iovyqy/juEQOyLDcreNEfTm6ypJwB4cAYXiigSDChntV4nHTcfBirA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4811.eurprd01.prod.exchangelabs.com (20.177.209.30) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Wed, 11 Sep
 2019 15:00:17 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 15:00:17 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 1/3] lib/uktime: Import timegm from musl
Thread-Index: AQHVaLGf4+JR8/quRkaeZKIiNE9eBQ==
Date: Wed, 11 Sep 2019 15:00:17 +0000
Message-ID: <20190911145955.6655-2-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190911145955.6655-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190911145955.6655-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0004.eurprd03.prod.outlook.com
 (2603:10a6:802:a0::16) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 26abd7ad-1ccd-4e78-594f-08d736c8c214
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4811; 
x-ms-traffictypediagnostic: PR1PR01MB4811:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB481123039CD1C1A9E43C3CC2A6B10@PR1PR01MB4811.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6430;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(346002)(136003)(39840400004)(376002)(199004)(189003)(81166006)(14444005)(486006)(186003)(386003)(6116002)(102836004)(25786009)(2616005)(476003)(11346002)(46003)(446003)(8936002)(45776006)(2501003)(81156014)(8676002)(6506007)(4326008)(50226002)(66446008)(76176011)(7736002)(66946007)(66556008)(66476007)(64756008)(305945005)(1076003)(71190400001)(30864003)(5640700003)(786003)(316002)(6916009)(99286004)(52116002)(71200400001)(53936002)(14454004)(2906002)(2351001)(478600001)(86362001)(6486002)(5660300002)(54906003)(6436002)(256004)(6512007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4811;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: ZT6bUAoYtvQ3sN5bzSXUyCvxTQGbpsAK2BhsHZ+WDU4aP8+rQrkCye/dJtvlKMNvxFRGMhlwlKsPC94iQv7rL/bu9M5X3YQWGx5K32R0kA1G6Yg9jk1/UhE/3EvJq7kmoAybi8fDd98UIW6rcUM2qzFVAGFQPA/D+mX5w4DHJ0+w9DP77kJtAeJ7ZM09MuL0hez2vmV/vRiEBF90OfFG2OogR/7wQyHO9D1JSETDGAqLYVVHyIOR424s39MavKLAXQbJvdAydT5R/o9YAYW7l54zHa3XfxzTUovL7eJJ/EtKz23HVbEpwIAO6YsrtGGrXSHGB9Tq0lktJvnf9hPm9rqt9lh3QCV6C9tos99hsl8VHX4OClrl18DX9jYSmJsz9RNam1b9B08js1yE0/EaXjxluoQBogmIEvBZhiZOBzg=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 26abd7ad-1ccd-4e78-594f-08d736c8c214
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 15:00:17.6275 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: SBHrY7RRWdKNKxchqmFuYw2HbCGLldxqaH6pJUSCgvz9AWp9zYZbiFdTMFcBfNnSjBYtC2j23i2X3B3FMNvPH9G+QqxPlTtBNovfxI6oANscL8L8Z6WckwFzU9kDgwIz
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4811
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/3] lib/uktime: Import timegm
 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29waWVkIGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgpnaXQ6Ly9naXQu
bXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQuCgpTaWduZWQtb2ZmLWJ5OiBWbGFk
LUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Ci0tLQog
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZV9pbXBsLmggIHwgIDExICsrCiAu
Li4vbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3VrdGltZS90aW1lLmggICAgICAgfCAxMzggKysrKysr
KysrKysrKysrKysrCiAuLi4vbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgICAg
ICAgfCAgMTAgKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMg
ICB8ICA4MiArKysrKysrKysrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3RtX3Rv
X3NlY3MuYyAgIHwgIDI0ICsrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3llYXJf
dG9fc2Vjcy5jIHwgIDQ3ICsrKysrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1l
Z20uYyAgICAgICAgIHwgIDE4ICsrKwogNyBmaWxlcyBjaGFuZ2VkLCAzMzAgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Rp
bWVfaW1wbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2lu
Y2x1ZGUvdWt0aW1lL3RpbWUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0
aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMKCmRp
ZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS90aW1lX2ltcGwuaCBi
L2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWVfaW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5mMjZkODAwNQotLS0gL2Rldi9udWxsCisrKyBiL2xp
Yi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWVfaW1wbC5oCkBAIC0wLDAgKzEsMTEg
QEAKKyNpbmNsdWRlIDx0aW1lLmg+CisKK2hpZGRlbiBpbnQgX19kYXlzX2luX21vbnRoKGludCwg
aW50KTsKK2hpZGRlbiBpbnQgX19tb250aF90b19zZWNzKGludCwgaW50KTsKK2hpZGRlbiBsb25n
IGxvbmcgX195ZWFyX3RvX3NlY3MobG9uZyBsb25nLCBpbnQgKik7CitoaWRkZW4gbG9uZyBsb25n
IF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3QgdG0gKik7CitoaWRkZW4gY29uc3QgY2hhciAqX190
bV90b190em5hbWUoY29uc3Qgc3RydWN0IHRtICopOworaGlkZGVuIGludCBfX3NlY3NfdG9fdG0o
bG9uZyBsb25nLCBzdHJ1Y3QgdG0gKik7CitoaWRkZW4gdm9pZCBfX3NlY3NfdG9fem9uZShsb25n
IGxvbmcsIGludCwgaW50ICosIGxvbmcgKiwgbG9uZyAqLCBjb25zdCBjaGFyICoqKTsKK2hpZGRl
biBjb25zdCBjaGFyICpfX3N0cmZ0aW1lX2ZtdF8xKGNoYXIgKCopWzEwMF0sIHNpemVfdCAqLCBp
bnQsIGNvbnN0IHN0cnVjdCB0bSAqLCBsb2NhbGVfdCwgaW50KTsKK2V4dGVybiBoaWRkZW4gY29u
c3QgY2hhciBfX3V0Y1tdOwpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2lu
Y2x1ZGUvdWt0aW1lL3RpbWUuaCBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Vr
dGltZS90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjY3MmIzZmMz
Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWt0
aW1lL3RpbWUuaApAQCAtMCwwICsxLDEzOCBAQAorI2lmbmRlZglfVElNRV9ICisjZGVmaW5lIF9U
SU1FX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5j
bHVkZSA8ZmVhdHVyZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIE5VTEwgMEwK
KyNlbHNlCisjZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorI2VuZGlmCisKKworI2RlZmluZSBfX05F
RURfc2l6ZV90CisjZGVmaW5lIF9fTkVFRF90aW1lX3QKKyNkZWZpbmUgX19ORUVEX2Nsb2NrX3QK
KyNkZWZpbmUgX19ORUVEX3N0cnVjdF90aW1lc3BlYworCisjaWYgZGVmaW5lZChfUE9TSVhfU09V
UkNFKSB8fCBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgXAorIHx8IGRlZmluZWQoX1hPUEVOX1NP
VVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkgXAorIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0Up
CisjZGVmaW5lIF9fTkVFRF9jbG9ja2lkX3QKKyNkZWZpbmUgX19ORUVEX3RpbWVyX3QKKyNkZWZp
bmUgX19ORUVEX3BpZF90CisjZGVmaW5lIF9fTkVFRF9sb2NhbGVfdAorI2VuZGlmCisKKyNpbmNs
dWRlIDxiaXRzL2FsbHR5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9CU0RfU09VUkNFKSB8fCBkZWZp
bmVkKF9HTlVfU09VUkNFKQorI2RlZmluZSBfX3RtX2dtdG9mZiB0bV9nbXRvZmYKKyNkZWZpbmUg
X190bV96b25lIHRtX3pvbmUKKyNlbmRpZgorCitzdHJ1Y3QgdG0geworCWludCB0bV9zZWM7CisJ
aW50IHRtX21pbjsKKwlpbnQgdG1faG91cjsKKwlpbnQgdG1fbWRheTsKKwlpbnQgdG1fbW9uOwor
CWludCB0bV95ZWFyOworCWludCB0bV93ZGF5OworCWludCB0bV95ZGF5OworCWludCB0bV9pc2Rz
dDsKKwlsb25nIF9fdG1fZ210b2ZmOworCWNvbnN0IGNoYXIgKl9fdG1fem9uZTsKK307CisKK2Ns
b2NrX3QgY2xvY2sgKHZvaWQpOwordGltZV90IHRpbWUgKHRpbWVfdCAqKTsKK2RvdWJsZSBkaWZm
dGltZSAodGltZV90LCB0aW1lX3QpOwordGltZV90IG1rdGltZSAoc3RydWN0IHRtICopOworc2l6
ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKl9fcmVz
dHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitzdHJ1Y3QgdG0gKmdtdGltZSAo
Y29uc3QgdGltZV90ICopOworc3RydWN0IHRtICpsb2NhbHRpbWUgKGNvbnN0IHRpbWVfdCAqKTsK
K2NoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKK2NoYXIgKmN0aW1lIChjb25zdCB0
aW1lX3QgKik7CitpbnQgdGltZXNwZWNfZ2V0KHN0cnVjdCB0aW1lc3BlYyAqLCBpbnQpOworCisj
ZGVmaW5lIENMT0NLU19QRVJfU0VDIDEwMDAwMDBMCisKKyNkZWZpbmUgVElNRV9VVEMgMQorCisj
aWYgZGVmaW5lZChfUE9TSVhfU09VUkNFKSB8fCBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgXAor
IHx8IGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkgXAorIHx8
IGRlZmluZWQoX0JTRF9TT1VSQ0UpCisKK3NpemVfdCBzdHJmdGltZV9sIChjaGFyICogIF9fcmVz
dHJpY3QsIHNpemVfdCwgY29uc3QgY2hhciAqICBfX3Jlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdG0g
KiAgX19yZXN0cmljdCwgbG9jYWxlX3QpOworCitzdHJ1Y3QgdG0gKmdtdGltZV9yIChjb25zdCB0
aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitzdHJ1Y3QgdG0gKmxv
Y2FsdGltZV9yIChjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCk7CitjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgY2hhciAq
X19yZXN0cmljdCk7CitjaGFyICpjdGltZV9yIChjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKKwor
dm9pZCB0enNldCAodm9pZCk7CisKK3N0cnVjdCBpdGltZXJzcGVjIHsKKwlzdHJ1Y3QgdGltZXNw
ZWMgaXRfaW50ZXJ2YWw7CisJc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOworfTsKKworI2RlZmlu
ZSBDTE9DS19SRUFMVElNRSAgICAgICAgICAgMAorI2RlZmluZSBDTE9DS19NT05PVE9OSUMgICAg
ICAgICAgMQorI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgMgorI2RlZmluZSBDTE9D
S19USFJFQURfQ1BVVElNRV9JRCAgMworI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFXICAgICAg
NAorI2RlZmluZSBDTE9DS19SRUFMVElNRV9DT0FSU0UgICAgNQorI2RlZmluZSBDTE9DS19NT05P
VE9OSUNfQ09BUlNFICAgNgorI2RlZmluZSBDTE9DS19CT09UVElNRSAgICAgICAgICAgNworI2Rl
ZmluZSBDTE9DS19SRUFMVElNRV9BTEFSTSAgICAgOAorI2RlZmluZSBDTE9DS19CT09UVElNRV9B
TEFSTSAgICAgOQorI2RlZmluZSBDTE9DS19TR0lfQ1lDTEUgICAgICAgICAxMAorI2RlZmluZSBD
TE9DS19UQUkgICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMQorCitp
bnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICop
OworaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQg
Y2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tf
c2V0dGltZSAoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tf
bmFub3NsZWVwIChjbG9ja2lkX3QsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVj
dCB0aW1lc3BlYyAqKTsKK2ludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCwgY2xvY2tpZF90
ICopOworCitzdHJ1Y3Qgc2lnZXZlbnQ7CitpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QsIHN0
cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCwgdGltZXJfdCAqX19yZXN0cmljdCk7CitpbnQgdGlt
ZXJfZGVsZXRlICh0aW1lcl90KTsKK2ludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90LCBpbnQsIGNv
bnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19y
ZXN0cmljdCk7CitpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCwgc3RydWN0IGl0aW1lcnNwZWMg
Kik7CitpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCk7CisKK2V4dGVybiBjaGFyICp0em5h
bWVbMl07CisKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8IGRlZmlu
ZWQoX0JTRF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpCitjaGFyICpzdHJwdGltZSAo
Y29uc3QgY2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgc3RydWN0IHRt
ICpfX3Jlc3RyaWN0KTsKK2V4dGVybiBpbnQgZGF5bGlnaHQ7CitleHRlcm4gbG9uZyB0aW1lem9u
ZTsKK2V4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CitzdHJ1Y3QgdG0gKmdldGRhdGUgKGNvbnN0IGNo
YXIgKik7CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChf
QlNEX1NPVVJDRSkKK2ludCBzdGltZShjb25zdCB0aW1lX3QgKik7Cit0aW1lX3QgdGltZWdtKHN0
cnVjdCB0bSAqKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRo
X3RvX3NlY3MuYyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNz
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjQzMjQ4ZmIzCi0tLSAvZGV2
L251bGwKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3Mu
YwpAQCAtMCwwICsxLDEwIEBACitpbnQgX19tb250aF90b19zZWNzKGludCBtb250aCwgaW50IGlz
X2xlYXApCit7CisJc3RhdGljIGNvbnN0IGludCBzZWNzX3Rocm91Z2hfbW9udGhbXSA9IHsKKwkJ
MCwgMzEqODY0MDAsIDU5Kjg2NDAwLCA5MCo4NjQwMCwKKwkJMTIwKjg2NDAwLCAxNTEqODY0MDAs
IDE4MSo4NjQwMCwgMjEyKjg2NDAwLAorCQkyNDMqODY0MDAsIDI3Myo4NjQwMCwgMzA0Kjg2NDAw
LCAzMzQqODY0MDAgfTsKKwlpbnQgdCA9IHNlY3NfdGhyb3VnaF9tb250aFttb250aF07CisJaWYg
KGlzX2xlYXAgJiYgbW9udGggPj0gMikgdCs9ODY0MDA7CisJcmV0dXJuIHQ7Cit9CmRpZmYgLS1n
aXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jIGIvbGliL3Vr
dGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMC4uMDkzZDkwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1l
L211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jCkBAIC0wLDAgKzEsODIgQEAKKyNpbmNs
dWRlICJ0aW1lX2ltcGwuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworLyogMjAwMC0wMy0wMSAo
bW9kIDQwMCB5ZWFyLCBpbW1lZGlhdGVseSBhZnRlciBmZWIyOSAqLworI2RlZmluZSBMRUFQT0NI
ICg5NDY2ODQ4MDBMTCArIDg2NDAwKigzMSsyOSkpCisKKyNkZWZpbmUgREFZU19QRVJfNDAwWSAo
MzY1KjQwMCArIDk3KQorI2RlZmluZSBEQVlTX1BFUl8xMDBZICgzNjUqMTAwICsgMjQpCisjZGVm
aW5lIERBWVNfUEVSXzRZICAgKDM2NSo0ICAgKyAxKQorCitpbnQgX19zZWNzX3RvX3RtKGxvbmcg
bG9uZyB0LCBzdHJ1Y3QgdG0gKnRtKQoreworCWxvbmcgbG9uZyBkYXlzLCBzZWNzLCB5ZWFyczsK
KwlpbnQgcmVtZGF5cywgcmVtc2VjcywgcmVteWVhcnM7CisJaW50IHFjX2N5Y2xlcywgY19jeWNs
ZXMsIHFfY3ljbGVzOworCWludCBtb250aHM7CisJaW50IHdkYXksIHlkYXksIGxlYXA7CisJc3Rh
dGljIGNvbnN0IGNoYXIgZGF5c19pbl9tb250aFtdID0gezMxLDMwLDMxLDMwLDMxLDMxLDMwLDMx
LDMwLDMxLDMxLDI5fTsKKworCS8qIFJlamVjdCB0aW1lX3QgdmFsdWVzIHdob3NlIHllYXIgd291
bGQgb3ZlcmZsb3cgaW50ICovCisJaWYgKHQgPCBJTlRfTUlOICogMzE2MjI0MDBMTCB8fCB0ID4g
SU5UX01BWCAqIDMxNjIyNDAwTEwpCisJCXJldHVybiAtMTsKKworCXNlY3MgPSB0IC0gTEVBUE9D
SDsKKwlkYXlzID0gc2VjcyAvIDg2NDAwOworCXJlbXNlY3MgPSBzZWNzICUgODY0MDA7CisJaWYg
KHJlbXNlY3MgPCAwKSB7CisJCXJlbXNlY3MgKz0gODY0MDA7CisJCWRheXMtLTsKKwl9CisKKwl3
ZGF5ID0gKDMrZGF5cyklNzsKKwlpZiAod2RheSA8IDApIHdkYXkgKz0gNzsKKworCXFjX2N5Y2xl
cyA9IGRheXMgLyBEQVlTX1BFUl80MDBZOworCXJlbWRheXMgPSBkYXlzICUgREFZU19QRVJfNDAw
WTsKKwlpZiAocmVtZGF5cyA8IDApIHsKKwkJcmVtZGF5cyArPSBEQVlTX1BFUl80MDBZOworCQlx
Y19jeWNsZXMtLTsKKwl9CisKKwljX2N5Y2xlcyA9IHJlbWRheXMgLyBEQVlTX1BFUl8xMDBZOwor
CWlmIChjX2N5Y2xlcyA9PSA0KSBjX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gY19jeWNsZXMgKiBE
QVlTX1BFUl8xMDBZOworCisJcV9jeWNsZXMgPSByZW1kYXlzIC8gREFZU19QRVJfNFk7CisJaWYg
KHFfY3ljbGVzID09IDI1KSBxX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gcV9jeWNsZXMgKiBEQVlT
X1BFUl80WTsKKworCXJlbXllYXJzID0gcmVtZGF5cyAvIDM2NTsKKwlpZiAocmVteWVhcnMgPT0g
NCkgcmVteWVhcnMtLTsKKwlyZW1kYXlzIC09IHJlbXllYXJzICogMzY1OworCisJbGVhcCA9ICFy
ZW15ZWFycyAmJiAocV9jeWNsZXMgfHwgIWNfY3ljbGVzKTsKKwl5ZGF5ID0gcmVtZGF5cyArIDMx
ICsgMjggKyBsZWFwOworCWlmICh5ZGF5ID49IDM2NStsZWFwKSB5ZGF5IC09IDM2NStsZWFwOwor
CisJeWVhcnMgPSByZW15ZWFycyArIDQqcV9jeWNsZXMgKyAxMDAqY19jeWNsZXMgKyA0MDBMTCpx
Y19jeWNsZXM7CisKKwlmb3IgKG1vbnRocz0wOyBkYXlzX2luX21vbnRoW21vbnRoc10gPD0gcmVt
ZGF5czsgbW9udGhzKyspCisJCXJlbWRheXMgLT0gZGF5c19pbl9tb250aFttb250aHNdOworCisJ
aWYgKG1vbnRocyA+PSAxMCkgeworCQltb250aHMgLT0gMTI7CisJCXllYXJzKys7CisJfQorCisJ
aWYgKHllYXJzKzEwMCA+IElOVF9NQVggfHwgeWVhcnMrMTAwIDwgSU5UX01JTikKKwkJcmV0dXJu
IC0xOworCisJdG0tPnRtX3llYXIgPSB5ZWFycyArIDEwMDsKKwl0bS0+dG1fbW9uID0gbW9udGhz
ICsgMjsKKwl0bS0+dG1fbWRheSA9IHJlbWRheXMgKyAxOworCXRtLT50bV93ZGF5ID0gd2RheTsK
Kwl0bS0+dG1feWRheSA9IHlkYXk7CisKKwl0bS0+dG1faG91ciA9IHJlbXNlY3MgLyAzNjAwOwor
CXRtLT50bV9taW4gPSByZW1zZWNzIC8gNjAgJSA2MDsKKwl0bS0+dG1fc2VjID0gcmVtc2VjcyAl
IDYwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0
ZWQvc3JjL19fdG1fdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3Rt
X3RvX3NlY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYzI5ZmE5ODUK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9f
c2Vjcy5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlICJ0aW1lX2ltcGwuaCIKKworbG9uZyBs
b25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3QgdG0gKnRtKQoreworCWludCBpc19sZWFwOwor
CWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRtX3llYXI7CisJaW50IG1vbnRoID0gdG0tPnRtX21vbjsK
KwlpZiAobW9udGggPj0gMTIgfHwgbW9udGggPCAwKSB7CisJCWludCBhZGogPSBtb250aCAvIDEy
OworCQltb250aCAlPSAxMjsKKwkJaWYgKG1vbnRoIDwgMCkgeworCQkJYWRqLS07CisJCQltb250
aCArPSAxMjsKKwkJfQorCQl5ZWFyICs9IGFkajsKKwl9CisJbG9uZyBsb25nIHQgPSBfX3llYXJf
dG9fc2Vjcyh5ZWFyLCAmaXNfbGVhcCk7CisJdCArPSBfX21vbnRoX3RvX3NlY3MobW9udGgsIGlz
X2xlYXApOworCXQgKz0gODY0MDBMTCAqICh0bS0+dG1fbWRheS0xKTsKKwl0ICs9IDM2MDBMTCAq
IHRtLT50bV9ob3VyOworCXQgKz0gNjBMTCAqIHRtLT50bV9taW47CisJdCArPSB0bS0+dG1fc2Vj
OworCXJldHVybiB0OworfQpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy9fX3llYXJfdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3llYXJf
dG9fc2Vjcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4yODI0ZWM2ZAot
LS0gL2Rldi9udWxsCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3Rv
X3NlY3MuYwpAQCAtMCwwICsxLDQ3IEBACitsb25nIGxvbmcgX195ZWFyX3RvX3NlY3MobG9uZyBs
b25nIHllYXIsIGludCAqaXNfbGVhcCkKK3sKKwlpZiAoeWVhci0yVUxMIDw9IDEzNikgeworCQlp
bnQgeSA9IHllYXI7CisJCWludCBsZWFwcyA9ICh5LTY4KT4+MjsKKwkJaWYgKCEoKHktNjgpJjMp
KSB7CisJCQlsZWFwcy0tOworCQkJaWYgKGlzX2xlYXApICppc19sZWFwID0gMTsKKwkJfSBlbHNl
IGlmIChpc19sZWFwKSAqaXNfbGVhcCA9IDA7CisJCXJldHVybiAzMTUzNjAwMCooeS03MCkgKyA4
NjQwMCpsZWFwczsKKwl9CisKKwlpbnQgY3ljbGVzLCBjZW50dXJpZXMsIGxlYXBzLCByZW07CisK
KwlpZiAoIWlzX2xlYXApIGlzX2xlYXAgPSAmKGludCl7MH07CisJY3ljbGVzID0gKHllYXItMTAw
KSAvIDQwMDsKKwlyZW0gPSAoeWVhci0xMDApICUgNDAwOworCWlmIChyZW0gPCAwKSB7CisJCWN5
Y2xlcy0tOworCQlyZW0gKz0gNDAwOworCX0KKwlpZiAoIXJlbSkgeworCQkqaXNfbGVhcCA9IDE7
CisJCWNlbnR1cmllcyA9IDA7CisJCWxlYXBzID0gMDsKKwl9IGVsc2UgeworCQlpZiAocmVtID49
IDIwMCkgeworCQkJaWYgKHJlbSA+PSAzMDApIGNlbnR1cmllcyA9IDMsIHJlbSAtPSAzMDA7CisJ
CQllbHNlIGNlbnR1cmllcyA9IDIsIHJlbSAtPSAyMDA7CisJCX0gZWxzZSB7CisJCQlpZiAocmVt
ID49IDEwMCkgY2VudHVyaWVzID0gMSwgcmVtIC09IDEwMDsKKwkJCWVsc2UgY2VudHVyaWVzID0g
MDsKKwkJfQorCQlpZiAoIXJlbSkgeworCQkJKmlzX2xlYXAgPSAwOworCQkJbGVhcHMgPSAwOwor
CQl9IGVsc2UgeworCQkJbGVhcHMgPSByZW0gLyA0VTsKKwkJCXJlbSAlPSA0VTsKKwkJCSppc19s
ZWFwID0gIXJlbTsKKwkJfQorCX0KKworCWxlYXBzICs9IDk3KmN5Y2xlcyArIDI0KmNlbnR1cmll
cyAtICppc19sZWFwOworCisJcmV0dXJuICh5ZWFyLTEwMCkgKiAzMTUzNjAwMExMICsgbGVhcHMg
KiA4NjQwMExMICsgOTQ2Njg0ODAwICsgODY0MDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdWt0aW1l
L211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy90aW1lZ20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGU1OTA3ZDcK
LS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5j
CkBAIC0wLDAgKzEsMTggQEAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKKyNpbmNsdWRlICJ0aW1lX2lt
cGwuaCIKKyNpbmNsdWRlIDxlcnJuby5oPgorCit0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSAqdG0p
Cit7CisJc3RydWN0IHRtIG5ldzsKKwlsb25nIGxvbmcgdCA9IF9fdG1fdG9fc2Vjcyh0bSk7CisJ
aWYgKF9fc2Vjc190b190bSh0LCAmbmV3KSA8IDApIHsKKwkJZXJybm8gPSBFT1ZFUkZMT1c7CisJ
CXJldHVybiAtMTsKKwl9CisJKnRtID0gbmV3OworCXRtLT50bV9pc2RzdCA9IDA7CisJdG0tPl9f
dG1fZ210b2ZmID0gMDsKKwl0bS0+X190bV96b25lID0gX191dGM7CisJcmV0dXJuIHQ7Cit9Ci0t
IAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 15:00:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 15:00:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i846l-0008SD-Lo; Wed, 11 Sep 2019 15:00:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=NsZH=XG=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i846k-0008RX-8E
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 15:00:34 +0000
X-Inumbo-ID: e0a5dda2-d4a4-11e9-83d6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.72]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e0a5dda2-d4a4-11e9-83d6-12813bfff9fa;
 Wed, 11 Sep 2019 15:00:24 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=a82F/K1ZcZ5OVFaAO1vEY2JfBksdIWZKn/1zzZluDIpdPPHlj9drIzVdcnnv9iop3EwSivSbvCMtaQm+DofvrZPlAkU2/gS569yeD02tLdW/KZ7Ig2+AyZr/i18DxFTfjJklLP+gkaf8b7r5k89seY1g9nopAfoq8DqKo/0nwE6gtn3302xVTd2lIy9eD+abG3BGt0IAFLxqbKHON6AnsFkFtwA/aPNZfQ+vq5SLxgu+ehLVp9Nvb1TLy0SmcQTPdvkoNF5LcMZdUwM37WWev3cILKTk/MavLgTmm+YUS8jYHveDsKn2JPHbCcpsSjo8dtUvluvUWxIIDEPR/CezZQ==
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=YeOVlXmxjDPbitF4Vbhe22SEllvve3qVBQQpfXxhijs=;
 b=VUAdzUWtvT1oMMM/p3j+1H6dXVPF6SAS1Uzw9ncB1phDIxzAh24kw/mxqSz9twQIPCsz2Xpq0R3d/8EUd6GeSw2bY9v99qDtDHYPKWjCqFpiwnH2usvp+r6gRG5bUg3i7OxZJHQXfPQ3V1nA3SQWXiHm4u4lfDD233t1YpNZ20j8RDtWeNBjGQz1T9FU+BVMEwRu4prWSHHHuEZOT1Yhv2BPRO9wGr8oOtYrTGsU5+K3Evf5V2USpDeoQQBzSu64gcYOMWcy+iRvG2QFGiKiCoUjBhkrPONTsNRADy8pcpaedNZG968M/H5cCUCes4Sy5VsYxG1zvV1Vyfcnrd9Avw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4811.eurprd01.prod.exchangelabs.com (20.177.209.30) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Wed, 11 Sep
 2019 15:00:19 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Wed, 11 Sep 2019
 15:00:19 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v2 2/3] lib/uktime: Adapt timegm implementation
 to Unikraft
Thread-Index: AQHVaLGgYD5Dlx4fiEipxyXYBR+XjQ==
Date: Wed, 11 Sep 2019 15:00:18 +0000
Message-ID: <20190911145955.6655-3-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190911145955.6655-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190911145955.6655-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VE1PR03CA0004.eurprd03.prod.outlook.com
 (2603:10a6:802:a0::16) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: d18b4fad-6581-4e31-4688-08d736c8c2ee
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4811; 
x-ms-traffictypediagnostic: PR1PR01MB4811:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB4811BC7AB24A6B654DDED310A6B10@PR1PR01MB4811.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-forefront-prvs: 0157DEB61B
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(346002)(136003)(39840400004)(376002)(199004)(189003)(81166006)(14444005)(486006)(186003)(386003)(6116002)(102836004)(25786009)(2616005)(476003)(11346002)(46003)(446003)(8936002)(45776006)(2501003)(81156014)(8676002)(6506007)(4326008)(50226002)(66446008)(76176011)(7736002)(66946007)(66556008)(66476007)(64756008)(305945005)(1076003)(71190400001)(5640700003)(786003)(316002)(6916009)(99286004)(52116002)(71200400001)(53936002)(14454004)(2906002)(2351001)(478600001)(86362001)(6486002)(5660300002)(54906003)(6436002)(256004)(6512007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4811;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: k6Z4U0TZ/5xzNGTZS00ImaB1Ry9nnGD1dXww7XYk7XC0F2cXN2e1vVztdBiU/XDKBeJyJsIQ7s0gxm+0Edb5maSUugRZKt1cQNIuQ8eJPgU0BrMqhxseUkPPxSDGLEWDhpYqUvf65YTsRPUzXUOyA++Oo0uu6UO6+2bebg9AKK6ysqT1w2yt56AqkYR8EBtDwMOeQLemYBV/TP+hod79bTC0Elz4Uc0gkNzBcqiD+/yqTyn3Xss0EjiQRdbjUc9/MJemFmpm/ZrvTnz7z2aoS/aHF4FY6bnDqKUDXhuHvuy9uGRFmpgrxEtIhZegzFuuAtoWs+rJAjKRNd/qxcYpdjJJPoi1hha5TTFdQQabml+uHbAekG6kTuBFgmwwzDWbiRaB05Q+WTEiXQs3UZaFB7qCqNpw75Gy0yriA5Y+cK0=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: d18b4fad-6581-4e31-4688-08d736c8c2ee
X-MS-Exchange-CrossTenant-originalarrivaltime: 11 Sep 2019 15:00:18.9948 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: VGijCGQVoHPBQcF7R5GimsTFnuCp7rnvmYQhZxkMI+YLtqi4hZmTATQ5JcAeR0miyY3k9C8FgZ7eKJEd3hG5no5Cv99ARhlJ6nBc1GtsO5S9gwOzRGgxB98a7OQ/CZ97
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4811
Subject: [Minios-devel] [UNIKRAFT PATCH v2 2/3] lib/uktime: Adapt timegm
 implementation to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgZXhjbHVkZSBmcm9tIHVrdGltZS90aW1lLmggdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbm90
IGJlZW4gaW1wbGVtZW50ZWQgaW4KVW5pa3JhZnQuIF90aW1lX3R5cGVzLmggaG9sZHMgdGhlIGRl
ZmluaXRpb25zIG9mIHRoZSB0eXBlcyB1c2VkCmluIHVrdGltZS90aW1lLmgKClNpZ25lZC1vZmYt
Ynk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5y
bz4KLS0tCiBsaWIvdWt0aW1lL01ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgfCAx
MyArKystCiBsaWIvdWt0aW1lL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgICAgICAgfCAg
MiArLQogbGliL3VrdGltZS9pbmNsdWRlL3VrdGltZS9fdGltZV90eXBlcy5oICAgICAgIHwgNjIg
KysrKysrKysrKysrKysrKysrKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGlt
ZV9pbXBsLmggIHwgMTYgKystLS0KIC4uLi9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWt0aW1lL3Rp
bWUuaCAgICAgICB8IDQwICsrKysrKystLS0tLQogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy90aW1lZ20uYyAgICAgICAgIHwgIDIgKwogNiBmaWxlcyBjaGFuZ2VkLCAxMDggaW5zZXJ0aW9u
cygrKSwgMjcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9pbmNs
dWRlL3VrdGltZS9fdGltZV90eXBlcy5oCgpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9NYWtlZmls
ZS51ayBiL2xpYi91a3RpbWUvTWFrZWZpbGUudWsKaW5kZXggOWMxZjhiMzUuLjYyYmVlOTE0IDEw
MDY0NAotLS0gYS9saWIvdWt0aW1lL01ha2VmaWxlLnVrCisrKyBiL2xpYi91a3RpbWUvTWFrZWZp
bGUudWsKQEAgLTEsNCArMSwxMyBAQAogJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ1a3RpbWUs
JChDT05GSUdfTElCVUtUSU1FKSkpCiAKLUNJTkNMVURFUy0kKENPTkZJR19MSUJVS1RJTUUpICAg
ICs9IC1JJChMSUJVS1RJTUVfQkFTRSkvaW5jbHVkZQotQ1hYSU5DTFVERVMtJChDT05GSUdfTElC
VUtUSU1FKSAgKz0gLUkkKExJQlVLVElNRV9CQVNFKS9pbmNsdWRlCitMSUJVS1RJTUVfQ09NTU9O
X0lOQ0xVREVTLXkJKz0gLUkkKExJQlVLVElNRV9CQVNFKS9pbmNsdWRlCitMSUJVS1RJTUVfQ09N
TU9OX0lOQ0xVREVTLXkJKz0gLUkkKExJQlVLVElNRV9CQVNFKS9tdXNsLWltcG9ydGVkL2luY2x1
ZGUKKworQ0lOQ0xVREVTLSQoQ09ORklHX0xJQlVLVElNRSkgICAgKz0gJChMSUJVS1RJTUVfQ09N
TU9OX0lOQ0xVREVTLXkpCitDWFhJTkNMVURFUy0kKENPTkZJR19MSUJVS1RJTUUpICArPSAkKExJ
QlVLVElNRV9DT01NT05fSU5DTFVERVMteSkKKworTElCVUtUSU1FX1NSQ1MteSArPSAkKExJQlVL
VElNRV9CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYworTElCVUtUSU1F
X1NSQ1MteSArPSAkKExJQlVLVElNRV9CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9f
dG0uYworTElCVUtUSU1FX1NSQ1MteSArPSAkKExJQlVLVElNRV9CQVNFKS9tdXNsLWltcG9ydGVk
L3NyYy90aW1lZ20uYworTElCVUtUSU1FX1NSQ1MteSArPSAkKExJQlVLVElNRV9CQVNFKS9tdXNs
LWltcG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYworTElCVUtUSU1FX1NSQ1MteSArPSAkKExJQlVL
VElNRV9CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy9fX3llYXJfdG9fc2Vjcy5jCmRpZmYgLS1naXQg
YS9saWIvdWt0aW1lL2V4cG9ydHN5bXMudWsgYi9saWIvdWt0aW1lL2V4cG9ydHN5bXMudWsKaW5k
ZXggYzg2YzNmMzUuLmEwMGQxNjAxIDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL2V4cG9ydHN5bXMu
dWsKKysrIGIvbGliL3VrdGltZS9leHBvcnRzeW1zLnVrCkBAIC0xICsxIEBACi1ub25lClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQordGltZWdtCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL2lu
Y2x1ZGUvdWt0aW1lL190aW1lX3R5cGVzLmggYi9saWIvdWt0aW1lL2luY2x1ZGUvdWt0aW1lL190
aW1lX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjdhZmQzYzdj
Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrdGltZS9pbmNsdWRlL3VrdGltZS9fdGltZV90eXBl
cy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D
bGF1c2UgKi8KKy8qCisgKiBBdXRob3JzOiBGbG9yaWFuIFNjaG1pZHQgPGZsb3JpYW4uc2NobWlk
dEBuZWNsYWIuZXU+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE4LCBORUMgTGFicyBFdXJvcGUs
IE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJp
Z2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAg
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJ
RUQgSU4gQU5ZIFdBWS4KKyAqLworCisvKiBUaGlzIGhlYWRlciBkb2VzIGJ5IGRlc2lnbiBub3Qg
aGF2ZSBpbmNsdWRlIGd1YXJkcywgc28gdGhhdCBpdCBjYW4gYmUKKyAqIGluY2x1ZGVkIGZyb20g
bXVsdGlwbGUgZmlsZXMuIFRoZSBfX05FRURfeCBtYWNyb3MgaW5zdGVhZCBtYWtlIHN1cmUgdGhh
dAorICogb25seSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgaW5jbHVkZWQgdGhhdCBhcmUgcmVxdWly
ZWQgYnkgdGhhdCBzcGVjaWZpYworICogZmlsZSwgYW5kIG9ubHkgaWYgdGhleSBoYXZlbid0IGJl
ZW4gZGVmaW5lZCBvbiBhIHByZXZpb3VzIHBhc3MgdGhyb3VnaAorICogdGhpcyBmaWxlLgorICov
CisKKyNpbmNsdWRlIDx1ay9hcmNoL3R5cGVzLmg+CisKKyNpZiAoZGVmaW5lZCBfX05FRURfY2xv
Y2tpZF90ICYmICFkZWZpbmVkIF9fREVGSU5FRF9jbG9ja2lkX3QpCit0eXBlZGVmIGludCBjbG9j
a2lkX3Q7CisjZGVmaW5lIF9fREVGSU5FRF9jbG9ja2lkX3QKKyNlbmRpZgorCisjaWYgKGRlZmlu
ZWQgX19ORUVEX3RpbWVfdCAmJiAhZGVmaW5lZCBfX0RFRklORURfdGltZV90KQordHlwZWRlZiBs
b25nIHRpbWVfdDsKKyNkZWZpbmUgX19ERUZJTkVEX3RpbWVfdAorI2VuZGlmCisKKyNpZiAoZGVm
aW5lZCBfX05FRURfc3RydWN0X3RpbWVzcGVjICYmCQkJXAorCQkhZGVmaW5lZCBfX0RFRklORURf
c3RydWN0X3RpbWVzcGVjKQorc3RydWN0IHRpbWVzcGVjIHsKKwl0aW1lX3QJdHZfc2VjOworCWxv
bmcJdHZfbnNlYzsKK307CisjZGVmaW5lIF9fREVGSU5FRF9zdHJ1Y3RfdGltZXNwZWMKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZV9pbXBs
LmggYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS90aW1lX2ltcGwuaAppbmRleCBm
MjZkODAwNS4uZmI1OWZjMWEgMTAwNjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9p
bmNsdWRlL3RpbWVfaW1wbC5oCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRl
L3RpbWVfaW1wbC5oCkBAIC0xLDExICsxLDcgQEAKLSNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVk
ZSA8dWt0aW1lL3RpbWUuaD4KIAotaGlkZGVuIGludCBfX2RheXNfaW5fbW9udGgoaW50LCBpbnQp
OwotaGlkZGVuIGludCBfX21vbnRoX3RvX3NlY3MoaW50LCBpbnQpOwotaGlkZGVuIGxvbmcgbG9u
ZyBfX3llYXJfdG9fc2Vjcyhsb25nIGxvbmcsIGludCAqKTsKLWhpZGRlbiBsb25nIGxvbmcgX190
bV90b19zZWNzKGNvbnN0IHN0cnVjdCB0bSAqKTsKLWhpZGRlbiBjb25zdCBjaGFyICpfX3RtX3Rv
X3R6bmFtZShjb25zdCBzdHJ1Y3QgdG0gKik7Ci1oaWRkZW4gaW50IF9fc2Vjc190b190bShsb25n
IGxvbmcsIHN0cnVjdCB0bSAqKTsKLWhpZGRlbiB2b2lkIF9fc2Vjc190b196b25lKGxvbmcgbG9u
ZywgaW50LCBpbnQgKiwgbG9uZyAqLCBsb25nICosIGNvbnN0IGNoYXIgKiopOwotaGlkZGVuIGNv
bnN0IGNoYXIgKl9fc3RyZnRpbWVfZm10XzEoY2hhciAoKilbMTAwXSwgc2l6ZV90ICosIGludCwg
Y29uc3Qgc3RydWN0IHRtICosIGxvY2FsZV90LCBpbnQpOwotZXh0ZXJuIGhpZGRlbiBjb25zdCBj
aGFyIF9fdXRjW107CitpbnQgX19tb250aF90b19zZWNzKGludCwgaW50KTsKK2xvbmcgbG9uZyBf
X3llYXJfdG9fc2Vjcyhsb25nIGxvbmcsIGludCAqKTsKK2xvbmcgbG9uZyBfX3RtX3RvX3NlY3Mo
Y29uc3Qgc3RydWN0IHRtICopOworaW50IF9fc2Vjc190b190bShsb25nIGxvbmcsIHN0cnVjdCB0
bSAqKTsKK2V4dGVybiBjb25zdCBjaGFyIF9fdXRjW107CmRpZmYgLS1naXQgYS9saWIvdWt0aW1l
L211c2wtaW1wb3J0ZWQvaW5jbHVkZS91a3RpbWUvdGltZS5oIGIvbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL2luY2x1ZGUvdWt0aW1lL3RpbWUuaAppbmRleCA2NzJiM2ZjMy4uYTc3OTI2YzEgMTAw
NjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3VrdGltZS90aW1lLmgK
KysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdWt0aW1lL3RpbWUuaApAQCAt
MSwxOCArMSwxNyBAQAotI2lmbmRlZglfVElNRV9ICi0jZGVmaW5lIF9USU1FX0gKKyNpZm5kZWYg
X1VLVElNRV9USU1FX0gKKyNkZWZpbmUgX1VLVElNRV9USU1FX0gKIAotI2lmZGVmIF9fY3BsdXNw
bHVzCi1leHRlcm4gIkMiIHsKLSNlbmRpZgorI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgogCi0jaW5j
bHVkZSA8ZmVhdHVyZXMuaD4KKyNpZmRlZiBDT05GSUdfTElCTk9MSUJDCisjaW5jbHVkZSA8c3lz
L3RpbWUuaD4KKyNlbmRpZgogCiAjaWZkZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgTlVMTCAwTAot
I2Vsc2UKLSNkZWZpbmUgTlVMTCAoKHZvaWQqKTApCitleHRlcm4gIkMiIHsKICNlbmRpZgogCisj
ZGVmaW5lIF9HTlVfU09VUkNFCiAKICNkZWZpbmUgX19ORUVEX3NpemVfdAogI2RlZmluZSBfX05F
RURfdGltZV90CkBAIC0yOCw3ICsyNywxMiBAQCBleHRlcm4gIkMiIHsKICNkZWZpbmUgX19ORUVE
X2xvY2FsZV90CiAjZW5kaWYKIAotI2luY2x1ZGUgPGJpdHMvYWxsdHlwZXMuaD4KKyNpbmNsdWRl
IDx1a3RpbWUvX3RpbWVfdHlwZXMuaD4KKyNpZmRlZiBDT05GSUdfTElCTk9MSUJDCisjaW5jbHVk
ZSA8bm9saWJjLWludGVybmFsL3NoYXJlZGRlZnMuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RkZGVm
Lmg+CisjZW5kaWYKIAogI2lmIGRlZmluZWQoX0JTRF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9T
T1VSQ0UpCiAjZGVmaW5lIF9fdG1fZ210b2ZmIHRtX2dtdG9mZgpAQCAtNDksNiArNTMsNyBAQCBz
dHJ1Y3QgdG0gewogCWNvbnN0IGNoYXIgKl9fdG1fem9uZTsKIH07CiAKKyNpZiAwCiBjbG9ja190
IGNsb2NrICh2b2lkKTsKIHRpbWVfdCB0aW1lICh0aW1lX3QgKik7CiBkb3VibGUgZGlmZnRpbWUg
KHRpbWVfdCwgdGltZV90KTsKQEAgLTU5LDYgKzY0LDcgQEAgc3RydWN0IHRtICpsb2NhbHRpbWUg
KGNvbnN0IHRpbWVfdCAqKTsKIGNoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKIGNo
YXIgKmN0aW1lIChjb25zdCB0aW1lX3QgKik7CiBpbnQgdGltZXNwZWNfZ2V0KHN0cnVjdCB0aW1l
c3BlYyAqLCBpbnQpOworI2VuZGlmCiAKICNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgMTAwMDAwMEwK
IApAQCAtNjgsNiArNzQsNyBAQCBpbnQgdGltZXNwZWNfZ2V0KHN0cnVjdCB0aW1lc3BlYyAqLCBp
bnQpOwogIHx8IGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkg
XAogIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCiAKKyNpZiAwCiBzaXplX3Qgc3RyZnRpbWVfbCAo
Y2hhciAqICBfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKiAgX19yZXN0cmljdCwgY29u
c3Qgc3RydWN0IHRtICogIF9fcmVzdHJpY3QsIGxvY2FsZV90KTsKIAogc3RydWN0IHRtICpnbXRp
bWVfciAoY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwpA
QCAtNzYsNiArODMsNyBAQCBjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0
cmljdCwgY2hhciAqX19yZXN0cmljdCk7CiBjaGFyICpjdGltZV9yIChjb25zdCB0aW1lX3QgKiwg
Y2hhciAqKTsKIAogdm9pZCB0enNldCAodm9pZCk7CisjZW5kaWYKIAogc3RydWN0IGl0aW1lcnNw
ZWMgewogCXN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKQEAgLTk4LDggKzEwNiwxMSBAQCBz
dHJ1Y3QgaXRpbWVyc3BlYyB7CiAjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMQogCiBpbnQgbmFub3Ns
ZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOworI2lmIDAK
IGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCwgc3RydWN0IHRpbWVzcGVjICopOworI2VuZGlm
CiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CisjaWYg
MAogaW50IGNsb2NrX3NldHRpbWUgKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICop
OwogaW50IGNsb2NrX25hbm9zbGVlcCAoY2xvY2tpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlk
X3QsIGNsb2NraWRfdCAqKTsKQEAgLTExMiwxMCArMTIzLDEwIEBAIGludCB0aW1lcl9nZXR0aW1l
ICh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqKTsKIGludCB0aW1lcl9nZXRvdmVycnVuICh0
aW1lcl90KTsKIAogZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKLQorI2VuZGlmCiAjZW5kaWYKIAot
CisjaWYgMAogI2lmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJD
RSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkKIGNoYXIgKnN0cnB0aW1lIChjb25zdCBjaGFyICpf
X3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3Qp
OwogZXh0ZXJuIGludCBkYXlsaWdodDsKQEAgLTEyMywxMCArMTM0LDEyIEBAIGV4dGVybiBsb25n
IHRpbWV6b25lOwogZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKIHN0cnVjdCB0bSAqZ2V0ZGF0ZSAo
Y29uc3QgY2hhciAqKTsKICNlbmRpZgotCisjZW5kaWYKIAogI2lmIGRlZmluZWQoX0dOVV9TT1VS
Q0UpIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCisjaWYgMAogaW50IHN0aW1lKGNvbnN0IHRpbWVf
dCAqKTsKKyNlbmRpZgogdGltZV90IHRpbWVnbShzdHJ1Y3QgdG0gKik7CiAjZW5kaWYKIApAQCAt
MTM0LDUgKzE0Nyw0IEBAIHRpbWVfdCB0aW1lZ20oc3RydWN0IHRtICopOwogfQogI2VuZGlmCiAK
LQogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVn
bS5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYwppbmRleCA0ZTU5MDdk
Ny4uODBlMjUwNmQgMTAwNjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGlt
ZWdtLmMKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYwpAQCAtMiw2
ICsyLDggQEAKICNpbmNsdWRlICJ0aW1lX2ltcGwuaCIKICNpbmNsdWRlIDxlcnJuby5oPgogCitj
b25zdCBjaGFyIF9fdXRjW10gPSAiVVRDIjsKKwogdGltZV90IHRpbWVnbShzdHJ1Y3QgdG0gKnRt
KQogewogCXN0cnVjdCB0bSBuZXc7Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 15:27:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 15:27:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i84Ws-00033x-2r; Wed, 11 Sep 2019 15:27:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yAp6=XG=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i84Wr-00033l-DD
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 15:27:33 +0000
X-Inumbo-ID: ab6e5bcc-d4a8-11e9-83d9-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ab6e5bcc-d4a8-11e9-83d9-12813bfff9fa;
 Wed, 11 Sep 2019 15:27:31 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5341EF2023;
 Wed, 11 Sep 2019 17:27:30 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id L0C0s8YsvZOr; Wed, 11 Sep 2019 17:27:30 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1CEF0F200F;
 Wed, 11 Sep 2019 17:27:24 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 11 Sep
 2019 17:27:23 +0200
To: Costin Lupu <costin.lup@gmail.com>, Costin Lupu <costin.lupu@cs.pub.ro>,
 <minios-devel@lists.xen.org>
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
 <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
 <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <5c6d2f83-040d-5227-b80f-e73b8edc179a@neclab.eu>
Date: Wed, 11 Sep 2019 17:27:23 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDkvMTEvMTkgMzozOCBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4gSGkgU2hhcmFuLAo+Cj4g
T24gOS8xMS8xOSAzOjU2IFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+PiBIZWxsbyBDb3N0
aW4sCj4+Cj4+IFRoZSBmaXggc2VlbXMgZmluZS4gUGxlYXNlIGZpbmQgdGhlIHF1ZXN0aW9uIGlu
bGluZS4KPj4KPj4gVGhhbmtzICYgUmVnYXJkcwo+Pgo+PiBTaGFyYW4KPj4KPj4gT24gOS8xMS8x
OSAxOjU2IFBNLCBDb3N0aW4gTHVwdSB3cm90ZToKPj4+IENvbW1pdCAzZGNjY2QwNCBpbnRyb2R1
Y2VkIGhhbmRsaW5nIG9mIEZJT0NMRVggYW5kIEZJT05DTEVYIHJlcXVlc3RzLgo+Pj4gSG93ZXZl
ciwKPj4+IHRoZXNlIGZsYWdzIGFyZSBub3QgZGVmaW5lZCBpbiBub2xpYmMuCj4+Pgo+Pj4gU2ln
bmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPj4+IC0tLQo+
Pj4gIMKgIGxpYi9ub2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaCB8IDAKPj4gV2h5IGRvIHdlIGlu
dHJvZHVjZSBhIGVtcHR5IGZpbGU/IEluIG5ld2xpYiB3ZSBpbnRyb2R1Y2VzIGEgaGVhZGVyCj4+
IGltcG9ydGVkIGZyb20gbXVzbC4KPj4KPiBJIGRpZG4ndCBnZXQgdGhhdCBjb21wbGV0ZWx5LCBk
b2VzIGl0IGJ1aWxkIG9uIHlvdXIgc2lkZT8gRG8geW91IGdldCBhbnkKPiBlcnJvcnMvd2Fybmlu
Z3M/Ck5vLCBidXQgSSBndWVzcyB3aXRoIGEgcmV2aWV3IHByb2Nlc3MgeW91IGRvIGNsYXJpZnkg
d2h5IHlvdSBtYWRlIApjZXJ0YWluIGNob2ljZXMuCj4KPj4gV2h5IGRvbid0IHdlIHVzZSB0aGUg
c2FtZSBmaWxlIGhlcmU/Cj4gVGhpcyBpcyBhbiBvcGVuIHF1ZXN0aW9uLiBUaGUgdGhpbmcgaXMg
dGhhdCBuZXdsaWIgaXRzZWxmIHNlZW1zIHRvIGJlIGEKPiBwb29yIGNob2ljZSBpZiB3ZSBkbyBj
b3B5IHNvIG11Y2ggY29kZSBmcm9tIG11c2wuIE5vdyBnZXR0aW5nIGJhY2sgdG8KPiBub2xpYmMs
IGlmIHdlIGRvIGFkZCBtb3JlIGFuZCBtb3JlIGNvZGUgZnJvbSBtdXNsIHRoZW4gd2UgY2FuIHNp
bXBseSBnZXQKPiByaWQgb2YgaXQgdG9vIGFuZCB1c2UgbXVzbCBpbnN0ZWFkLiBJbiBjb25jbHVz
aW9uLCBJIGZhaWwgdG8gc2VlIHdoeSB3ZQo+IHNob3VsZCBjb3B5IGNvZGUgdG8gbm9saWJjIGlu
c3RlYWQgdXNpbmcgbXVzbCBkaXJlY3RseS4KQnV0IGluIHRoaXMgY2FzZSB3ZSBhcmUgaW50cm9k
dWNpbmcgdGhlIEZJT05DTEVYIGFuZCBGSU9DTEVYIHdpdGhpbiB0aGUgCmNvcmUgVW5pa3JhZnQg
YW5kIGl0IGlzIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCBub2xpYmMuIEluc3RlYWQgb2YgYWRkaW5n
IAojaWZkZWYgaXQgd291bGQgYmUgYmV0dGVyIHRvIG1ha2UgaXQgZmVhdHVyZSBjb21wbGV0ZS4K
Pgo+IENoZWVycywKPiBDb3N0aW4KPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 11 16:44:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 11 Sep 2019 16:44:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i85jk-0002LM-IL; Wed, 11 Sep 2019 16:44:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=m7bk=XG=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i85jj-0002L9-OE
 for minios-devel@lists.xen.org; Wed, 11 Sep 2019 16:44:55 +0000
X-Inumbo-ID: 7b2928e2-d4b3-11e9-978d-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7b2928e2-d4b3-11e9-978d-bc764e2007e4;
 Wed, 11 Sep 2019 16:44:54 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id y19so25364872wrd.3
 for <minios-devel@lists.xen.org>; Wed, 11 Sep 2019 09:44:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=LJJk6g/GB9l7eY3HA67Il/Ii96EjsDvWQ6iKjRxUtAQ=;
 b=cF7jWERqjwNXHRP6ZYFGeQJ9UoHAOEj8goYMkQ5CkpTVf1dQPMiB18gKQWt6MIFMtf
 sYuIhEnOW5FykrSWDW66k0LMNOIMRGFkNZHK+53BoQmuRDB2zRy1LHEwQn+48SQQMEUJ
 K/GWrfjQu4gsYiZ/XWpn69NyMYE/k+XYryfSEPaS97BpzA8xXaCqwA5GaNPxNF5ASjNL
 MT1khuooCLiX1PiFFO/cI8RZM5BBNQCBsL09Pcx0BZcPcGmiP9pnSWQkumEttS7odkXY
 pB/kKu946+EMZVPYIo3bM0P+Z1R8/V4V8jVE7GJ773cnGNgQsQHIlURSUCvecdVaTyvq
 fftg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=LJJk6g/GB9l7eY3HA67Il/Ii96EjsDvWQ6iKjRxUtAQ=;
 b=PlZNsOaHqSUZZbXVsxpG5CeYCDJaXytrIoZrrQ5myUWelVNEA0fqq81krQhDcKqffZ
 VY5ehnCHY50iN9rZvBaSzim8xyRLTfKVvXcAuJOv1Mawr5i4Cxfoi+9Rq20DXrheizag
 fH8NaLQYmGg7kcdqe/TvC49IsD2Zn5IFYRnK5J+yEC84239jHcTCLjTReSZDMO81mQzV
 ifgsXqW6obQ7vY7t1lwJGYzRmskMaVuI3auTihdbb/JUp1pJsysBLoz2T5RB8ugB8Ust
 HTemsnijqt1MADUpkP/LR7EmqlHz6rXikPgQY0apgVNjjTHb8NcneEFQZhdW+1ANx2VN
 KVNg==
X-Gm-Message-State: APjAAAX8qnf5MH4H0QJjHtrZGhztWDvZ6TtULfpIk7Kpt5/LHA/loYfq
 vPyPkRfE1g7n8SWRJuITrPQXTmH9
X-Google-Smtp-Source: APXvYqyTBaKtxY60MJREZdaTwSG+EFwWvZ9HfcmxPpvLqx5RCv1GSLSHz3hwXcLF+Eqc0vX1B6Jk4Q==
X-Received: by 2002:a5d:6602:: with SMTP id n2mr33202367wru.317.1568220293659; 
 Wed, 11 Sep 2019 09:44:53 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id q10sm43997562wrd.39.2019.09.11.09.44.52
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 11 Sep 2019 09:44:52 -0700 (PDT)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, minios-devel@lists.xen.org
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
 <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
 <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
 <5c6d2f83-040d-5227-b80f-e73b8edc179a@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <ee5e2f0d-1994-1ee5-6a95-87a11e79cee4@gmail.com>
Date: Wed, 11 Sep 2019 19:44:51 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <5c6d2f83-040d-5227-b80f-e73b8edc179a@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xMS8xOSA2OjI3IFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IAo+IE9uIDkvMTEv
MTkgMzozOCBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+IEhpIFNoYXJhbiwKPj4KPj4gT24gOS8x
MS8xOSAzOjU2IFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+Pj4gSGVsbG8gQ29zdGluLAo+
Pj4KPj4+IFRoZSBmaXggc2VlbXMgZmluZS4gUGxlYXNlIGZpbmQgdGhlIHF1ZXN0aW9uIGlubGlu
ZS4KPj4+Cj4+PiBUaGFua3MgJiBSZWdhcmRzCj4+Pgo+Pj4gU2hhcmFuCj4+Pgo+Pj4gT24gOS8x
MS8xOSAxOjU2IFBNLCBDb3N0aW4gTHVwdSB3cm90ZToKPj4+PiBDb21taXQgM2RjY2NkMDQgaW50
cm9kdWNlZCBoYW5kbGluZyBvZiBGSU9DTEVYIGFuZCBGSU9OQ0xFWCByZXF1ZXN0cy4KPj4+PiBI
b3dldmVyLAo+Pj4+IHRoZXNlIGZsYWdzIGFyZSBub3QgZGVmaW5lZCBpbiBub2xpYmMuCj4+Pj4K
Pj4+PiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgo+
Pj4+IC0tLQo+Pj4+IMKgwqAgbGliL25vbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oIHwgMAo+Pj4g
V2h5IGRvIHdlIGludHJvZHVjZSBhIGVtcHR5IGZpbGU/IEluIG5ld2xpYiB3ZSBpbnRyb2R1Y2Vz
IGEgaGVhZGVyCj4+PiBpbXBvcnRlZCBmcm9tIG11c2wuCj4+Pgo+PiBJIGRpZG4ndCBnZXQgdGhh
dCBjb21wbGV0ZWx5LCBkb2VzIGl0IGJ1aWxkIG9uIHlvdXIgc2lkZT8gRG8geW91IGdldCBhbnkK
Pj4gZXJyb3JzL3dhcm5pbmdzPwo+IE5vLCBidXQgSSBndWVzcyB3aXRoIGEgcmV2aWV3IHByb2Nl
c3MgeW91IGRvIGNsYXJpZnkgd2h5IHlvdSBtYWRlCj4gY2VydGFpbiBjaG9pY2VzLgo+Pgo+Pj4g
V2h5IGRvbid0IHdlIHVzZSB0aGUgc2FtZSBmaWxlIGhlcmU/Cj4+IFRoaXMgaXMgYW4gb3BlbiBx
dWVzdGlvbi4gVGhlIHRoaW5nIGlzIHRoYXQgbmV3bGliIGl0c2VsZiBzZWVtcyB0byBiZSBhCj4+
IHBvb3IgY2hvaWNlIGlmIHdlIGRvIGNvcHkgc28gbXVjaCBjb2RlIGZyb20gbXVzbC4gTm93IGdl
dHRpbmcgYmFjayB0bwo+PiBub2xpYmMsIGlmIHdlIGRvIGFkZCBtb3JlIGFuZCBtb3JlIGNvZGUg
ZnJvbSBtdXNsIHRoZW4gd2UgY2FuIHNpbXBseSBnZXQKPj4gcmlkIG9mIGl0IHRvbyBhbmQgdXNl
IG11c2wgaW5zdGVhZC4gSW4gY29uY2x1c2lvbiwgSSBmYWlsIHRvIHNlZSB3aHkgd2UKPj4gc2hv
dWxkIGNvcHkgY29kZSB0byBub2xpYmMgaW5zdGVhZCB1c2luZyBtdXNsIGRpcmVjdGx5Lgo+IEJ1
dCBpbiB0aGlzIGNhc2Ugd2UgYXJlIGludHJvZHVjaW5nIHRoZSBGSU9OQ0xFWCBhbmQgRklPQ0xF
WCB3aXRoaW4gdGhlCj4gY29yZSBVbmlrcmFmdCBhbmQgaXQgaXMgZXhwZWN0ZWQgdG8gd29yayB3
aXRoIG5vbGliYy4gSW5zdGVhZCBvZiBhZGRpbmcKPiAjaWZkZWYgaXQgd291bGQgYmUgYmV0dGVy
IHRvIG1ha2UgaXQgZmVhdHVyZSBjb21wbGV0ZS4KCk5vdyB3aHkgd291bGQgeW91IHNheSBpdCBp
cyBleHBlY3RlZCB0byB3b3JrIHdpdGggbm9saWJjPyBUaGUgdHdvIGZsYWdzCmFyZSBhY3R1YWxs
eSByZWxhdGVkIHdpdGggY2xvc2Utb24tZXhlYyBsb2dpYy4gV2h5IHdvdWxkIGFueSBhcHAgcnVu
bmluZwpvbiB0b3Agb2YgVW5pa3JhZnQgYW5kIHdoaWNoIHdvdWxkIG5vdCB1c2UgYSBsaWJjIGlt
cGxlbWVudGF0aW9uIG5lZWQgdG8KY2FsbCBleGVjKCkgc2luY2UgdGhpcyBpcyBub3QgcG9zc2li
bGU/IEJlc2lkZXMgdGhpcywgdGhlcmUgaXMgbm8gZXhlYygpCmZ1bmN0aW9uIGluIG5vbGliYy4K
CkNoZWVycywKQ29zdGluCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 08:36:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 08:36:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8KaU-0002bv-Bp; Thu, 12 Sep 2019 08:36:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8KaT-0002bq-CU
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 08:36:21 +0000
X-Inumbo-ID: 632add14-d538-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 632add14-d538-11e9-b76c-bc764e2007e4;
 Thu, 12 Sep 2019 08:36:17 +0000 (UTC)
IronPort-SDR: FdCN7IBxmaroCxqH4tEo0OQvdDouGYvdaG05V0eCa88m6GSvB+BgVq6KcktslbZaJ+CK0cZGbN
 9Dv7t0nt5rfQ==
IronPort-PHdr: =?us-ascii?q?9a23=3ArUIm0hQ+pUivU/6aHW0f7DCnltpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6zZh2N2/xhgRfzUJnB7Loc0qyK6vumATFLuczJ8ChbNsAVDV?=
 =?us-ascii?q?ld0YRetjdjKfbNMVf8Iv/uYn5yN+V5f3ghwUuGN1NIEt31fVzYry76xzcTHh?=
 =?us-ascii?q?LiKVg9fbytScbdgMutyu+95YDYbRlWizqhe7NyKwi9oRnMusUMjoZuN6g8xg?=
 =?us-ascii?q?HVrnZIdOha2X1kLk+Xkxrg+8u85pFu/zlOt/4768JMTaD2dLkkQLJFCzgrL3?=
 =?us-ascii?q?o779DxuxnZSguP6HocUmEInRdNHgPI8hL0UIrvvyXjruZy1zWUMsPwTbAvRD?=
 =?us-ascii?q?St9LxrRwPyiCcGLDE27mfagdFtga1BoRKhoxt/w5PIYIyQKfFzcL/Rcc8cSG?=
 =?us-ascii?q?FcWMtaSi5PDZ6mb4YXD+QPI/tWoYf+qVUJthayGRWgCfnzxjJSmnP6was32P?=
 =?us-ascii?q?khHwHc2wwgGsoDvWrTrNXuKKcSUOa1x7TOwzXed/NWxCr25Y/UfRAmuvGMQb?=
 =?us-ascii?q?NwcczLxUkrCgPFlkiQpJf5MDOOzOgNq3Wb4PF6WeK1jG4qsgd8qSWsyMc0ko?=
 =?us-ascii?q?TFm40Yxk3e+Sh6wIs5P8O0RFB5bNK+HpZcrzyWOoRrTs84QGxluDw2xqMItJ?=
 =?us-ascii?q?O1ZiQG1ZsqywDZZveaaYaH+AjjW/yUITpggXJlf6+wiAiq/Ei7z+38StG00F?=
 =?us-ascii?q?FXripZitXMtm4C1xjU6sWfVPt9+12u2TeL1wzJ9u5EOlo4lbLGK5E62LIwjJ?=
 =?us-ascii?q?0TvVzCHi/whkr2kLebelgr9+S18ejqYbXrqoWCO4NqiAzyKKojltS6AesiMw?=
 =?us-ascii?q?gOW2ab+f671L3m5UD2XLJKjuYqkqnYtpDWP8AbprOhAw9IyYss9w2/Ay2+0N?=
 =?us-ascii?q?QFhnYLNkhFeBWfg4jzJ17OOOz4Deu4g1m0lTdrxvbGPrzmApXWN3TMjanufa?=
 =?us-ascii?q?hj5E5Y0wczydFf54lICrEaOv7yVVH+tNrCAh8+KQy0zP7tCM9h2YMGRWKPHq?=
 =?us-ascii?q?iZPbvcsVCW4uIvIvGMa5EPtDb9Nvgl5uLhjX4ilF8bY6amwZ8XZ2qjEfh8PU?=
 =?us-ascii?q?qZfGLmgs0dHmcSogo+UOvqhUWcUT5XfXm9Qroz6Ss9CI27F4fMWIGtjKaa0y?=
 =?us-ascii?q?ihA5JWYWFGCk2XHHfza4WERuoDZDiILcB9iTwIT6WhS5c62h20rg/6zOkvEu?=
 =?us-ascii?q?2B/ywetJX4kdR4+eDXvRUz7iBvSdSQ1SeKVW4nsHkPQmod27tjoEo17kqbzO?=
 =?us-ascii?q?AsiPtDCd1VofdUShoSPoWa1/FwTcr1DFGSNuyVQUqrF431SQo6Scg8locD?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CTBACzAnpdXQPjVY1mHgEGBwaBZ4M?=
 =?us-ascii?q?FUyASKo0doykJAQEBKREBAgEBhD+CfjgTAgMJAQEFAQEBAQEGBAEGGhYFhV8?=
 =?us-ascii?q?Mgjoig25PVS2DIgGCDqwuhUuDLYFJgTSHH4YxP4N1hX2FFgSWH5YoB4IkZAS?=
 =?us-ascii?q?GGY1qJ4MklWaoRjiBeTMag18Jgg4BjBaCXD0BATGBBgEBjyABAQ?=
X-IPAS-Result: =?us-ascii?q?A2CTBACzAnpdXQPjVY1mHgEGBwaBZ4MFUyASKo0doykJA?=
 =?us-ascii?q?QEBKREBAgEBhD+CfjgTAgMJAQEFAQEBAQEGBAEGGhYFhV8Mgjoig25PVS2DI?=
 =?us-ascii?q?gGCDqwuhUuDLYFJgTSHH4YxP4N1hX2FFgSWH5YoB4IkZASGGY1qJ4MklWaoR?=
 =?us-ascii?q?jiBeTMag18Jgg4BjBaCXD0BATGBBgEBjyABAQ?=
X-IronPort-AV: E=Sophos;i="5.64,495,1559509200"; 
   d="scan'208";a="4779582"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 11:36:15 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 784FE1A600D6;
 Thu, 12 Sep 2019 11:36:15 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id wQygOlfOc7H7; Thu, 12 Sep 2019 11:36:15 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 5E1581A60130;
 Thu, 12 Sep 2019 11:36:15 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id vvC812grrTTj; Thu, 12 Sep 2019 11:36:15 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 4A8F31A600D6;
 Thu, 12 Sep 2019 11:36:15 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 11:36:12 +0300
Message-Id: <20190912083612.31114-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Configure IO C99 formats and
 errno extensions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHRoZSBmb2xsb3dpbmcgZXh0ZW5z
aW9uczoKKiBJTyBDOTkgZm9ybWF0cyBlbmFibGUgbW9yZSBvcHRpb25zIGZvciBmb3JtYXR0aW5n
IG91dHB1dC4gV2UgbmVlZCB0aGlzIHRvCnN1cHBvcnQgIiV6IiBpbiBQeXRob24gMwoqIExpbnV4
IGVycm5vIGV4dGVuc2lvbnMgZGVmaW5lIG1vcmUgZXJyb3IgbnVtYmVycy4gV2UgbmVlZCB0aGlz
IHRvIHN1cHBvcnQKRVNIVVRET1dOIGluIFB5dGhvbiAzCgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4g
THVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayAgIHwgMTAgKysrKysr
KysrKwogTWFrZWZpbGUudWsgfCAgMiArKwogMiBmaWxlcyBjaGFuZ2VkLCAxMiBpbnNlcnRpb25z
KCspCgpkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCmluZGV4IDg5MDEwYTEuLmRh
NTg3YmEgMTAwNjQ0Ci0tLSBhL0NvbmZpZy51aworKysgYi9Db25maWcudWsKQEAgLTEwLDMgKzEw
LDEzIEBAIG1lbnVjb25maWcgTElCTkVXTElCQwogCXNlbGVjdCBMSUJORVdMSUJNIGlmIExJQk5F
V0xJQkMKIAlzZWxlY3QgTElCVUtBTExPQwogCXNlbGVjdCBMSUJWRlNDT1JFCisKK2lmIExJQk5F
V0xJQkMKKwljb25maWcgTElCTkVXTElCQ19XQU5UX0lPX0M5OV9GT1JNQVRTCisJCWJvb2wgIlVz
ZSBDOTkgSU8gZm9ybWF0cyIKKwkJZGVmYXVsdCBuCisKKwljb25maWcgTElCTkVXTElCQ19MSU5V
WF9FUlJOT19FWFRFTlNJT05TCisJCWJvb2wgIlVzZSBMaW51eCBlcnJubyBleHRlbnNpb25zIgor
CQlkZWZhdWx0IG4KK2VuZGlmCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVr
CmluZGV4IDAxZGE3MjQuLjgxMmY2MDIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01h
a2VmaWxlLnVrCkBAIC04Miw2ICs4Miw4IEBAIExJQk5FV0xJQk1fQ1hYSU5DTFVERVMgKz0gLUkk
KExJQk5FV0xJQl9MSUJNKS9jb21tb24KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiBMSUJORVdM
SUJfR0xPQkFMX0ZMQUdTLXkgICs9IC1ETUlTU0lOR19TWVNDQUxMX05BTUVTIC1ETUFMTE9DX1BS
T1ZJREVECiBMSUJORVdMSUJfR0xPQkFMX0ZMQUdTLXkgICs9IC1EX1BPU0lYX1JFQUxUSU1FX1NJ
R05BTFMKK0xJQk5FV0xJQl9HTE9CQUxfRkxBR1MtJChDT05GSUdfTElCTkVXTElCQ19XQU5UX0lP
X0M5OV9GT1JNQVRTKSArPSAtRF9XQU5UX0lPX0M5OV9GT1JNQVRTCitMSUJORVdMSUJfR0xPQkFM
X0ZMQUdTLSQoQ09ORklHX0xJQk5FV0xJQkNfTElOVVhfRVJSTk9fRVhURU5TSU9OUykgKz0gLURf
X0xJTlVYX0VSUk5PX0VYVEVOU0lPTlNfXwogCiBDRkxBR1MteSAgICs9ICQoTElCTkVXTElCX0dM
T0JBTF9GTEFHUy15KQogQ1hYRkxBR1MteSArPSAkKExJQk5FV0xJQl9HTE9CQUxfRkxBR1MteSkK
LS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 08:47:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 08:47:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Klc-0003Zj-U1; Thu, 12 Sep 2019 08:47:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Kla-0003Ze-TS
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 08:47:50 +0000
X-Inumbo-ID: ff971536-d539-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id ff971536-d539-11e9-b299-bc764e2007e4;
 Thu, 12 Sep 2019 08:47:49 +0000 (UTC)
IronPort-SDR: nFfQXUGCE3kUhgmrS/P7KvQVLcE0pj1qqdYrp3mGj+VfEBS6lOT8FKhb3RXqHMMoyf4HBA2B/D
 QNBA1P/FWLmw==
IronPort-PHdr: =?us-ascii?q?9a23=3AadeTOBDd1bHpRSPM3smgUyQJP3N1i/DPJgcQr6?=
 =?us-ascii?q?AfoPdwSPX5rsbcNUDSrc9gkEXOFd2Cra4d0KyO7uu4BCRAuc/H7ClYNsQUFl?=
 =?us-ascii?q?cssoY/p0QYGsmLCEn2frbBThcRO4B8bmJj5GyxKkNPGczzNBX4q3y26iMOSF?=
 =?us-ascii?q?2kbVImbuv6FZTPgMupyuu854PcYxlShDq6fLh+MAi6oR/eu8ULj4ZuMLo9xx?=
 =?us-ascii?q?vGrndUe+ld2GdkKU6Okxrm6cq84YBv/z5Mt/498sJLTLn3cbk/QbFEFjotLn?=
 =?us-ascii?q?o75NfstRnNTAuP4mUTX2ALmRdWAAbL8Q/3UI7pviT1quRy1i+aPdbrTb8vQj?=
 =?us-ascii?q?St871rSB7zhygZMTMy7XzahdZxjKJfpxKhugB/zovJa4ybKPZyYqXQds4cSG?=
 =?us-ascii?q?FcXMheSjZBD5u8YYUREuQPM+VWoY7mqlcSsRezHxWgCfnzxjNUgHL9wK000/?=
 =?us-ascii?q?4mEQHDxAEtAdUOsG/IrNX0MqcZTOa7zLTQzTXecvhb3ivy6I/TchA9oPGMW6?=
 =?us-ascii?q?h8cc7MyUk3CgPIlUmfqZf/MzONy+QCqHKX7/BnVe+2jWMstgJ/oiC3y8sxhY?=
 =?us-ascii?q?TFm5gZx1PE+Clj3oo5O9+1RFR1bNK8DZdduDyWO5F1T84iWW1kpig3x7MctZ?=
 =?us-ascii?q?KmcyUG1pIqzAPFZfOdaYiH+BfjWf6UITd/mX1qZqqyhw238Ui80u38UdS00E?=
 =?us-ascii?q?pSoipFjNbMsncN2gTN6siCUPR9/0Oh1SyT2ADI8O1EOV00mrHBJ547xb48jp?=
 =?us-ascii?q?sTsULdES/qgEj6kaCbelg+9uWr6+nreKvqqoGeOoNuhAzyKqEulda+AeQ8PA?=
 =?us-ascii?q?gORW+b+eGk2bL/+k35W6lKjvwwkqXDtJDaONwbprOiDgBJyYYv8Q6/Dyq939?=
 =?us-ascii?q?gCh3kHK0pJeAibgIjxJ1HOPPf4AO+6g1StljdrxvfGPqb4DprQMHfDjqnufb?=
 =?us-ascii?q?Jm5k5YyQoz1sxf54lOBrAOPv3zXFX9tNvCDh82Kwa02froCM1h1oMCXmKCGq?=
 =?us-ascii?q?GZP73WsV+J/uIgPfOAZI8IuDb8N/cl5uXjjXknllABeammx4AYZGqmEfR7O0?=
 =?us-ascii?q?+Ze2bjgs8dEWcWuQozVPLqiFmYXjFOf3m9RaQ86SwhCI24DIfPXJuij6ac0y?=
 =?us-ascii?q?e8H51We3tLCkuQEXf1aoqIQe0DZz6JIsN7jzwETaOuR5U71RGp50fGzO9iL+?=
 =?us-ascii?q?zV/TZduZ/92dxd4+zIiQp05TFyScOH3DKjVWZxy0gPXCM32uhbvFRgggOI1r?=
 =?us-ascii?q?NkgvoeEcFL+ttCSUEiKJSa1essWIO6YR7IYtrcEAXued6hGzxkFt8=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CeAgAtBXpdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4NYIBIqjR2jKgkBAQE6AQIBAYQ/gn44EwIDCQEBBQEBAQEBBgQBBho?=
 =?us-ascii?q?WBYVrgjoigxxST1UtgyKCD6t0M4VLgy6BSYE0hx+GMT+BEYNQgQQBhAyFFgS?=
 =?us-ascii?q?WH5YoB4IkZASUAyeZCQGoRjiBeTMag1+CFwFCjjA9AQExgQYBAY8gAQE?=
X-IPAS-Result: =?us-ascii?q?A2CeAgAtBXpdXQPjVY1mHAEBAQQBAQcEAQGBZ4NYIBIqj?=
 =?us-ascii?q?R2jKgkBAQE6AQIBAYQ/gn44EwIDCQEBBQEBAQEBBgQBBhoWBYVrgjoigxxST?=
 =?us-ascii?q?1UtgyKCD6t0M4VLgy6BSYE0hx+GMT+BEYNQgQQBhAyFFgSWH5YoB4IkZASUA?=
 =?us-ascii?q?yeZCQGoRjiBeTMag1+CFwFCjjA9AQExgQYBAY8gAQE?=
X-IronPort-AV: E=Sophos;i="5.64,495,1559509200"; 
   d="scan'208";a="4779703"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 11:47:48 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 4939B1A600D6;
 Thu, 12 Sep 2019 11:47:48 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id ihiH4dBnle71; Thu, 12 Sep 2019 11:47:48 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2FEBD1A60130;
 Thu, 12 Sep 2019 11:47:48 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id mTvx2GCTRszW; Thu, 12 Sep 2019 11:47:48 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 13EDE1A600D6;
 Thu, 12 Sep 2019 11:47:48 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 11:47:45 +0300
Message-Id: <20190912084745.31202-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Fix error handling in
 opendir()
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW4gY2FzZSBvZiBlcnJvcnMsIG9wZW5kaXIoKSBzaG91bGQgc2V0IGVycm5vIGFuZCByZXR1cm4g
LTEuIElmICdwYXRoJyBpcyBub3QgYQpkaXJlY3RvcnkgdGhlbiBvcGVuZGlyKCkgc2hvdWxkIHNl
dCBlcnJubyB0byBFTk9URElSLgoKU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5s
dXB1QGNzLnB1Yi5ybz4KLS0tCiBsaWIvdmZzY29yZS9tYWluLmMgfCAyOCArKysrKysrKysrKysr
KysrKysrKysrLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMjIgaW5zZXJ0aW9ucygrKSwgNiBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9tYWluLmMgYi9saWIvdmZzY29yZS9t
YWluLmMKaW5kZXggOTI1Y2U3NjIuLjM5MDEzNzY3IDEwMDY0NAotLS0gYS9saWIvdmZzY29yZS9t
YWluLmMKKysrIGIvbGliL3Zmc2NvcmUvbWFpbi5jCkBAIC02NTksMTcgKzY1OSwzMyBAQCBzdHJ1
Y3QgX19kaXJzdHJlYW0KIAogRElSICpvcGVuZGlyKGNvbnN0IGNoYXIgKnBhdGgpCiB7Ci0JRElS
ICpkaXIgPSBtYWxsb2Moc2l6ZW9mKCpkaXIpKTsKKwlESVIgKmRpcjsKKwlzdHJ1Y3Qgc3RhdCBz
dDsKIAotCWlmICghZGlyKQotCQlyZXR1cm4gRVJSMlBUUigtRU5PTUVNKTsKKwlkaXIgPSBtYWxs
b2Moc2l6ZW9mKCpkaXIpKTsKKwlpZiAoIWRpcikgeworCQllcnJubyA9IEVOT01FTTsKKwkJZ290
byBvdXRfZXJyOworCX0KIAogCWRpci0+ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsKLQlpZiAo
ZGlyLT5mZCA8IDApIHsKLQkJZnJlZShkaXIpOwotCQlyZXR1cm4gTlVMTDsKKwlpZiAoZGlyLT5m
ZCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfZGlyOworCisJaWYgKGZzdGF0KGRpci0+ZmQsICZzdCkg
PCAwKQorCQlnb3RvIG91dF9mcmVlX2RpcjsKKworCWlmICghU19JU0RJUihzdC5zdF9tb2RlKSkg
eworCQllcnJubyA9IEVOT1RESVI7CisJCWdvdG8gb3V0X2ZyZWVfZGlyOwogCX0KKwogCXJldHVy
biBkaXI7CisKK291dF9mcmVlX2RpcjoKKwlmcmVlKGRpcik7CitvdXRfZXJyOgorCXJldHVybiBO
VUxMOwogfQogCiBESVIgKmZkb3BlbmRpcihpbnQgZmQpCi0tIAoyLjIwLjEKCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 09:00:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 09:00:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Kxf-000506-8a; Thu, 12 Sep 2019 09:00:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Kxe-0004zw-GN
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 09:00:18 +0000
X-Inumbo-ID: bcb24cc0-d53b-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id bcb24cc0-d53b-11e9-978d-bc764e2007e4;
 Thu, 12 Sep 2019 09:00:16 +0000 (UTC)
IronPort-SDR: eXRm6k4DyrO+GcVYDklxw3WXx/g+QXGLxr8mS95IpGzOuZ8rtl3oovjc51gzQ9cyqADFI7APAw
 tfFsf8eGjJqA==
IronPort-PHdr: =?us-ascii?q?9a23=3AUav2+h8XWlQj2P9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B20eMcTK2v8tzYMVDF4r011RmVBN6ds68P07qe8/i5HzBZu9DZ6DFKWacPfi?=
 =?us-ascii?q?dNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV?=
 =?us-ascii?q?3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sAvcutMKjYZiJao91h?=
 =?us-ascii?q?jEqWZMd+hK2G9kP12ekwvi6suq4JJv7yFcsO89+sBdVqn3Y742RqFCAjQ8NG?=
 =?us-ascii?q?A16szrtR3dQgaK+3ARTGYYnAdWDgbc9B31UYv/vSX8tupmxSmVJtb2QqwuWT?=
 =?us-ascii?q?Sj9KhkVhnlgzoaOjEj8WHXjstwjL9HoB+kuhdyzZLYbJ2TOfFjeK7WYNEUSn?=
 =?us-ascii?q?dbXstJVyJPHJ6yYYUMAeQGJutUs5XxqkESoRakGQWgGOXiwSJIiH/s2q061v?=
 =?us-ascii?q?wsHB/B3Aw7A9IOsXLUp8jzOqcPSeC10bTDwDLfYPNRwjf99InIchY7rfGIQL?=
 =?us-ascii?q?JwadfRxFIzGAPelFmQsZHlMCiP2uQXtGiW9uxtXv+shW4/swx9vzeiyto2ho?=
 =?us-ascii?q?TKho8Z0E7I+Tt7zYovK9C0UFN3bNG5HJdKtCyXN5F6Tt0sTmxmoio217ILtY?=
 =?us-ascii?q?C9cSMX0poo3QTfZOaCc4WQ5xLjU/ueLilgiXJ+fbK/mw6y8U+9yu3gTsW00E?=
 =?us-ascii?q?hFri5CktTUqHAN0gbc6smDSvdn4kihwiyD1xjO6u5fO0w0j63bJ4Ygwr42iJ?=
 =?us-ascii?q?UTrVzOEjL5lUnrlqObdUUp9vK25+j5YLjqvJGRO5dxig7kM6QunsK/Af4/Mg?=
 =?us-ascii?q?gLR2WU5eO81Kb//U34RrVGlPk2krTBsJDHPskUurW5DxVN0oY+8BmzFS2m0N?=
 =?us-ascii?q?MAkXkdMF1FYA6Hj5TuO1zWJfD4DPG/g1WrkDdw3vzJI6PuAovTIXjHi7rheb?=
 =?us-ascii?q?d961VAyAoo19xe6IxbCrcbLPL0QE/xu8TSDgUlPAys3+bnFNJ925sQWW2RBq?=
 =?us-ascii?q?+ZMbvSvkGS6uIvPumMZZMauDfmJvgj+fHhkXs5lkUGcqWzw5QXdWiyHu56LE?=
 =?us-ascii?q?WBfXrsntABHH8Uvgo6VuPllUWNXiRVZ3mvRaIz+DA7BJi9AojZW4+th72B3D?=
 =?us-ascii?q?qgE51NemBGF02DHW3yeIqYQPcAcj+SItd6nTAeT7ihTNxp6Rb7sQ78yr18a+?=
 =?us-ascii?q?bZ5CAcnZbiz8Ruof3ek1c17zMnId6a1jSmSHpon2VAYyIuwegrqktm1laFl6?=
 =?us-ascii?q?xlm+FwHscV/+5DFB09Y82Ph9dmAsz/D1qSNuyCT0yrF42r?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DMAwClCHpdXQPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUyASKo0doyoJAQEBKREBAgEBhD+CfjgTAgMJAQEFAQEBAQEGBAEGGhY?=
 =?us-ascii?q?FhV8Mgjoig25PVYNPAYIOrBuFS4MugUmBNIcfhjE/g3WFfYUWBJYfligHgiR?=
 =?us-ascii?q?kBIYZjWongiQBf5Vmij6eCDiBeTMag18Jgg4BjBaCXD0BATGBBgEBjyABAQ?=
X-IPAS-Result: =?us-ascii?q?A2DMAwClCHpdXQPjVY1mHQEBBQEHBQGBZ4MFUyASKo0do?=
 =?us-ascii?q?yoJAQEBKREBAgEBhD+CfjgTAgMJAQEFAQEBAQEGBAEGGhYFhV8Mgjoig25PV?=
 =?us-ascii?q?YNPAYIOrBuFS4MugUmBNIcfhjE/g3WFfYUWBJYfligHgiRkBIYZjWongiQBf?=
 =?us-ascii?q?5Vmij6eCDiBeTMag18Jgg4BjBaCXD0BATGBBgEBjyABAQ?=
X-IronPort-AV: E=Sophos;i="5.64,495,1559509200"; 
   d="scan'208";a="4779849"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 12:00:05 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id E97F91A60143;
 Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id J__iWEssEiO2; Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id CAE191A6013D;
 Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id xtZQfjtgTp3Y; Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id ABC171A60136;
 Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 11:59:59 +0300
Message-Id: <20190912090001.31331-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 0/2] Changes needed for running
 some unit tests
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBzZXJpZXMgc2V0cyBnZXRfYXR0ciBvcGVyYXRpb24gZm9yIHNvY2tldHMgYW5kIGVuYWJs
ZXMgdGhlIGxvb3BiYWNrCmludGVyZmFjZS4KCkNvc3RpbiBMdXB1ICgyKToKICBzb2NrZXRzLmM6
IFNldCBzdHViIGZvciAudm9wX2dldGF0dHIgb3BlcmF0aW9uCiAgRW5hYmxlIGxvb3BiYWNrIGlu
dGVyZmFjZQoKIENvbmZpZy51ayAgICAgICAgICB8IDYgKysrKysrCiBNYWtlZmlsZS51ayAgICAg
ICAgfCAxICsKIGluY2x1ZGUvbHdpcG9wdHMuaCB8IDQgKysrKwogc29ja2V0cy5jICAgICAgICAg
IHwgMiArKwogNCBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspCgotLSAKMi4yMC4xCgoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 09:00:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 09:00:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Kxk-00050k-AA; Thu, 12 Sep 2019 09:00:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Kxj-00050T-2H
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 09:00:23 +0000
X-Inumbo-ID: be644d7a-d53b-11e9-83e5-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id be644d7a-d53b-11e9-83e5-12813bfff9fa;
 Thu, 12 Sep 2019 09:00:19 +0000 (UTC)
IronPort-SDR: yHLG/cQBrDOmmXuBzqFUXeXmbtw62Rbo2/AgZ6lOmMZ3V4r5DvrtTo/jXL33SuOAjEbgj8L1Bj
 c+UxDoIz30Yw==
IronPort-PHdr: =?us-ascii?q?9a23=3AAgH0YRJdZD55j3B1ztmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfKf/xwZ3uMQTl6Ol3ixeRBMOHsqkC07ed6/CoGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF+JqsxxR?=
 =?us-ascii?q?fFvnhFcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWG?=
 =?us-ascii?q?hPUdtLVyFZAo2ycZYBAeQCM+hfrYb9qUADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsoTav3t8hhp?=
 =?us-ascii?q?TGi44I0FzJ9iV0zJwrKdGmSkN3e9CpHINNuyyVKod6WMAvTmFytCokxLALt4?=
 =?us-ascii?q?S3cDUFxZg5wRPUduaJfJKS4h35UeacOTJ4hHV4d72hnxuy6k2gyvHkVsmzzV?=
 =?us-ascii?q?ZKsjJJktnSuXAJ0Bze8taHSv5n8Ueg3TaDzRzc6vpeLUAsiKrUMIQtwqQ3lp?=
 =?us-ascii?q?YLsETDGDH5mFnugaOLeUgo5/Kk5ufnb7n8uJOQKY15hhvwP6g2n8ywG+U4Mg?=
 =?us-ascii?q?wAX2iB/uS80aXu8lH+QLVRkv02k6/ZvIreJcQGvq65HhRY3Zo46xqlFzemzc?=
 =?us-ascii?q?8XkWMdLFJCYB6HlZTmO0nSIPDkCveym1GskDZtx/DHOb3hGYzBIWXdn7f/Y7?=
 =?us-ascii?q?l971VRyA4yzdBE+5JUEasNIf3tVU/3rtDYCQU5MwOsyeb9FNp9zp8eWX6IAq?=
 =?us-ascii?q?KBPqPdr1uI5uM3I+aSfoMVuCv9K/k56P7vlnI5n0EScrWt3ZQNc3+0BOppI1?=
 =?us-ascii?q?iBa3r2ntgBCXsKvhY5TOHyll2CVSRcaGuqUK0m4DE0FZimApnCRoy3m7OOxj?=
 =?us-ascii?q?q0HppXZmBbEV2MCmvod5iZVPsWci2dPtRhniYZVbi5UIAtzwuutAipg4Zge+?=
 =?us-ascii?q?/V/Cwfrtfv2cZ448XXlAou7npkAsLb1HuCHE9umWZdbDgtwKF56Whg0krLha?=
 =?us-ascii?q?N/mOBZE5pX+utUegwhc4bBxapgDIahCUr6Yt6VRQP+EZ2dCjYrQ4dpzg=3D?=
 =?us-ascii?q?=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DSAwClCHpdXQPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUyASKo0doyoJAQEBKREBAgEBhD8Cgnw4EwIDCQEBBQEBAQEBBgQBBho?=
 =?us-ascii?q?WBYVfDII6IoJvBnkQPxJDFBmDIgGCDqwbhUuDLoFJgTSHH4YxP4RhhRGFFgS?=
 =?us-ascii?q?MOIlnligHgiRkBIYZhQ2IXSeDJJVmLagZOIF5MxqDXwmCRReLSYJcPQEBMYE?=
 =?us-ascii?q?GAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2DSAwClCHpdXQPjVY1mHQEBBQEHBQGBZ4MFUyASKo0do?=
 =?us-ascii?q?yoJAQEBKREBAgEBhD8Cgnw4EwIDCQEBBQEBAQEBBgQBBhoWBYVfDII6IoJvB?=
 =?us-ascii?q?nkQPxJDFBmDIgGCDqwbhUuDLoFJgTSHH4YxP4RhhRGFFgSMOIlnligHgiRkB?=
 =?us-ascii?q?IYZhQ2IXSeDJJVmLagZOIF5MxqDXwmCRReLSYJcPQEBMYEGAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,495,1559509200"; 
   d="scan'208";a="4779850"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 12:00:05 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 0B87F1A6013B;
 Thu, 12 Sep 2019 12:00:05 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id v2k9Qv-cTrgR; Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id DAE371A60136;
 Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id lNq-uCuzd-QM; Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id B8CCB1A6013B;
 Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 12:00:00 +0300
Message-Id: <20190912090001.31331-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190912090001.31331-1-costin.lupu@cs.pub.ro>
References: <20190912090001.31331-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/2] sockets.c: Set stub for
 .vop_getattr operation
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgY3VycmVudGx5IGp1c3Qgc2V0IGEgc3R1YiBmb3IgLnZvcF9nZXRhdHRyIG9wZXJhdGlvbiBp
biBvcmRlciB0byBhdm9pZApjcmFzaGVzLiBBbmQgc2luY2Ugd2UgYXJlIGhlcmUsIHRoaXMgcGF0
Y2ggYWxzbyBkaXNhYmxlcyB0aGUgY2FzdC1mdW5jdGlvbi10eXBlCndhcm5pbmdzIHdoaWNoIGFu
bm95aW5nbHkgYXBlYXIgZm9yIGVhY2ggc291cmNlIGZpbGUgdGhhdCBzZXRzIHNvbWUgZmlsZXN5
c3RlbQpjYWxsYmFja3MuCgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVA
Y3MucHViLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgMSArCiBzb2NrZXRzLmMgICB8IDIgKysKIDIg
ZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsg
Yi9NYWtlZmlsZS51awppbmRleCAyMjkyY2I0Li4wZTcyMzM2IDEwMDY0NAotLS0gYS9NYWtlZmls
ZS51aworKysgYi9NYWtlZmlsZS51awpAQCAtODUsNiArODUsNyBAQCBMSUJMV0lQX1NSQ1MtJChD
T05GSUdfTFdJUF9USFJFQURTKSArPSAkKExJQkxXSVBfQkFTRSkvdGhyZWFkcy5jfHVuaWtyYWZ0
CiBMSUJMV0lQX1NSQ1MteSArPSAkKExJQkxXSVBfQkFTRSkvaW5pdC5jfHVuaWtyYWZ0CiBMSUJM
V0lQX1NSQ1MteSArPSAkKExJQkxXSVBfQkFTRSkvdGltZS5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NS
Q1MtJChDT05GSUdfTFdJUF9TT0NLRVQpICs9ICQoTElCTFdJUF9CQVNFKS9zb2NrZXRzLmN8dW5p
a3JhZnQKK0xJQkxXSVBfU09DS0VUU19GTEFHUy15ICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10eXBl
CiBMSUJMV0lQX1NSQ1MtJChDT05GSUdfTFdJUF9TT0NLRVQpICs9ICQoTElCTFdJUF9CQVNFKS9n
ZXRuYW1laW5mby5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MteSArPSAkKExJQkxXSVBfRVhUUkFD
VEVEKS9jb3JlL2luaXQuYwogTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQX0VYVFJBQ1RFRCkv
Y29yZS9kZWYuYwpkaWZmIC0tZ2l0IGEvc29ja2V0cy5jIGIvc29ja2V0cy5jCmluZGV4IGY0Zjdk
NDAuLmNkODRiOTcgMTAwNjQ0Ci0tLSBhL3NvY2tldHMuYworKysgYi9zb2NrZXRzLmMKQEAgLTYy
LDYgKzYyLDcgQEAgc3RhdGljIGludCBzb2NrX25ldF9pb2N0bChzdHJ1Y3Qgdm5vZGUgKnNfdm5v
ZGUsCiAJCQl1bnNpZ25lZCBsb25nIHJlcXVlc3QsCiAJCQl2b2lkICpidWYpOwogCisjZGVmaW5l
IHNvY2tfbmV0X2dldGF0dHIgICAoKHZub3BfZ2V0YXR0cl90KSB2ZnNjb3JlX3ZvcF9laW52YWwp
CiAjZGVmaW5lIHNvY2tfbmV0X2luYWN0aXZlICAoKHZub3BfaW5hY3RpdmVfdCkgdmZzY29yZV92
b3BfbnVsbG9wKQogCiBzdGF0aWMgc3RydWN0IHZub3BzIHNvY2tfbmV0X3Zub3BzID0gewpAQCAt
NjksNiArNzAsNyBAQCBzdGF0aWMgc3RydWN0IHZub3BzIHNvY2tfbmV0X3Zub3BzID0gewogCS52
b3Bfd3JpdGUgPSBzb2NrX25ldF93cml0ZSwKIAkudm9wX3JlYWQgID0gc29ja19uZXRfcmVhZCwK
IAkudm9wX2lvY3RsID0gc29ja19uZXRfaW9jdGwsCisJLnZvcF9nZXRhdHRyID0gc29ja19uZXRf
Z2V0YXR0ciwKIAkudm9wX2luYWN0aXZlID0gc29ja19uZXRfaW5hY3RpdmUKIH07CiAKLS0gCjIu
MjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 09:00:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 09:00:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Kxk-00050p-C6; Thu, 12 Sep 2019 09:00:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Kxj-00050Y-GP
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 09:00:23 +0000
X-Inumbo-ID: be5191d0-d53b-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id be5191d0-d53b-11e9-978d-bc764e2007e4;
 Thu, 12 Sep 2019 09:00:18 +0000 (UTC)
IronPort-SDR: k9Nc9UwC5JeCyf0UPA7ydpEAqdP9S8A/chahvhB9B86OhEXeg/dTe3EZfGOZP+GICeXAVCNv7M
 BEMbrPh2p39Q==
IronPort-PHdr: =?us-ascii?q?9a23=3ADY1SABSrbmb7zkI4zYggWb1bZNpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6zZxeN2/xhgRfzUJnB7Loc0qyK6vumATFLucbJ8ChbNsAVDV?=
 =?us-ascii?q?ld0YRetjdjKfbNMVf8Iv/uYn5yN+V5f3ghwUuGN1NIEt31fVzYry76xzcTHh?=
 =?us-ascii?q?LiKVg9fbytScbdgMutyu+95YDYbRlWizqhe7NyKwi9oRnMusUMjoZuN6g8xg?=
 =?us-ascii?q?HVrnZIdOha2WBlLk+Xkxrg+8u85pFu/zlOt/4768JMTaD2dLkkQLJFCzgrL3?=
 =?us-ascii?q?o779DxuxnZSguP6HocUmEInRdNHgPI8hL0UIrvvyXjruZy1zWUMsPwTbAvRD?=
 =?us-ascii?q?St9LxrRwPyiCcGLDE27mfagdFtga1BoRKhoxt/w5PIYIyQKfFzcL/Rcc8cSG?=
 =?us-ascii?q?FcWMtaSi5PDZ6mb4YXD+QPI/tWoYf+qVUJrxS+CxKhCP/zxjJSmnP7x7E23/?=
 =?us-ascii?q?gnHArb3AIgBdUOsHHModjrM6cSSvy1zKjOzT7eaf1WxC/96JXVeR0mvf6MWq?=
 =?us-ascii?q?lwcdbQyUkpDQ/FikiQqZT4Pz6OyusNqHKX7/J9Ve20kWInsQZxryGpy8wxiY?=
 =?us-ascii?q?fJnpoYxk3L+Clk2oo4Jt21RFRlbdK6EpZcrS+XO5NrTs4tXm1koiU3x70ctZ?=
 =?us-ascii?q?KlciUHxo4rywPQZvCZdYWD/wjtW/yLIThigXJoYLe/hxGv/ke+0uD8Tcy00E?=
 =?us-ascii?q?pSripCj9nMqmgB1xzN5ciDTftw5lmh2TOV2ADS7uFIO1w7lbHBJ545374/jY?=
 =?us-ascii?q?AfsV7EHiPumUX2irGZdlk89+S15Onrf6/qq5ycOoNulA3yLKYjltaxDOggNw?=
 =?us-ascii?q?gBRWmb+eCy1L35+k35Ra1HgeExkqnCrJDaJMIbqrS9Aw9IyoYj9g2yACu90N?=
 =?us-ascii?q?gChXkHMUlKdAidj4juI13OOuz3De+jg1Swlzdm3/XGPrznApXMKXjDi67tcq?=
 =?us-ascii?q?tj5E5C1gUzyctS55ZVCrEaPPLzQVX9tdPGAR8/KQC0xPznCNpl3IMERW2PGr?=
 =?us-ascii?q?OZML/VsVKQ6OIgPe2MZI4NuDnjMfQl5+PujX4lll8cZqSp24UYZ2y8Hvt8OE?=
 =?us-ascii?q?qVe2TjgsoZG2cQogU+VPDqiEGFUTNLeXayW7gz6SwjB428C4fMW5qtj6KA3C?=
 =?us-ascii?q?uhBZJZfH1JCleNEXf1bIiEQOsMaD+PLcN7iDMLSaOhR5U81RG2rwD20aBnLu?=
 =?us-ascii?q?2HshEf4Jfi0tly/KjfmA8/8RRwDt+ByCedQmcymXkHFBEs26Uqiktm1laFmY?=
 =?us-ascii?q?xlm+EQQddU/O9IVEE+KIbB5+dhTcjvUETbeYHaGx6dXty6DGRpHZoKyNgUbh?=
 =?us-ascii?q?MlFg=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CjAgClCHpdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MFUyASKo0doyoJAQEBKREBAgEBhD8Cgnw4EwIDCQEBBQEBAQEBBgQ?=
 =?us-ascii?q?BBhoWBYVfDII6IoJvBnkQPxJDFBmDIgGCDqwbhUuDLoFJgTSHH4YxP4lyhRY?=
 =?us-ascii?q?Elh+WKAeCJGQEhhmNaieDJJVmqEY4gXkzGoNfCYJFF4tJglw9AQExgQYBAY8?=
 =?us-ascii?q?gAQE?=
X-IPAS-Result: =?us-ascii?q?A2CjAgClCHpdXQPjVY1mHAEBAQQBAQcEAQGBZ4MFUyASK?=
 =?us-ascii?q?o0doyoJAQEBKREBAgEBhD8Cgnw4EwIDCQEBBQEBAQEBBgQBBhoWBYVfDII6I?=
 =?us-ascii?q?oJvBnkQPxJDFBmDIgGCDqwbhUuDLoFJgTSHH4YxP4lyhRYElh+WKAeCJGQEh?=
 =?us-ascii?q?hmNaieDJJVmqEY4gXkzGoNfCYJFF4tJglw9AQExgQYBAY8gAQE?=
X-IronPort-AV: E=Sophos;i="5.64,495,1559509200"; 
   d="scan'208";a="4779851"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 12:00:05 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 25F8C1A60136;
 Thu, 12 Sep 2019 12:00:05 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id aIcGuYtyp6ZW; Thu, 12 Sep 2019 12:00:05 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id ECFA41A60146;
 Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id BUIkJZGE3Jai; Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id C850E1A6013C;
 Thu, 12 Sep 2019 12:00:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 12:00:01 +0300
Message-Id: <20190912090001.31331-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190912090001.31331-1-costin.lupu@cs.pub.ro>
References: <20190912090001.31331-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/LWIP PATCH 2/2] Enable loopback interface
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGxvb3BiYWNrIGludGVyZmFjZSBpcyB1c2VkIGluIG1hbnkgb2YgdGhlIFB5dGhvbiAzIHVu
aXQgdGVzdHMuCgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPgotLS0KIENvbmZpZy51ayAgICAgICAgICB8IDYgKysrKysrCiBpbmNsdWRlL2x3aXBvcHRz
LmggfCA0ICsrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdp
dCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awppbmRleCBhMGRiNDFkLi45MmRmNGQzIDEwMDY0NAot
LS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBAIC04MCw2ICs4MCwxMiBAQCBjb25maWcg
TFdJUF9ORVRJRl9TVEFUVVNfUFJJTlQKIAloZWxwCiAJCVByaW50IG5ldGlmIHN0YXR1cyBjaGFu
Z2VzIHRvIHN0YW5kYXJkIGNvbnNvbGUKIAorY29uZmlnIExXSVBfSEFWRV9MT09QSUYKKwlib29s
ICJMb29wYmFjayBpbnRlcmZhY2UiCisJZGVmYXVsdCBuCisJaGVscAorCQlFbmFibGUgbG9vcGJh
Y2sgaW50ZXJmYWNlLgorCiBjb25maWcgTFdJUF9JUFY0CiAJYm9vbCAiSVB2NCBzdXBwb3J0Igog
CWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9sd2lwb3B0cy5oIGIvaW5jbHVkZS9sd2lw
b3B0cy5oCmluZGV4IDU1OTIyM2QuLjE0ODAyOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbHdpcG9w
dHMuaAorKysgYi9pbmNsdWRlL2x3aXBvcHRzLmgKQEAgLTk1LDYgKzk1LDEwIEBAIHZvaWQgc3lz
X2ZyZWUodm9pZCAqcHRyKTsKICNkZWZpbmUgTFdJUF9ORVRJRl9FWFRfU1RBVFVTX0NBTExCQUNL
IDAKICNlbmRpZiAvKiBDT05GSUdfTFdJUF9ORVRJRl9FWFRfU1RBVFVTX0NBTExCQUNLICovCiAK
KyNpZiBDT05GSUdfTFdJUF9IQVZFX0xPT1BJRgorI2RlZmluZSBMV0lQX0hBVkVfTE9PUElGIDEK
KyNlbmRpZgorCiAvKioKICAqIEFSUCBvcHRpb25zCiAgKi8KLS0gCjIuMjAuMQoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:29:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:29:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8NHu-0002K7-W9; Thu, 12 Sep 2019 11:29:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SWvK=XH=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i8NHt-0002Jz-Cm
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:29:21 +0000
X-Inumbo-ID: 8e29bd56-d550-11e9-9597-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.70]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8e29bd56-d550-11e9-9597-12813bfff9fa;
 Thu, 12 Sep 2019 11:29:18 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=KUGb/MmFx6R1DR1Id9wT1hBmLHXFj6h5b2IWrAGwDxsiyY4GBkEW94zoaOgSlIIuwMOa8nDxlHPIOEclJSXbYJEDtMI6A1gCJPtpH9b4pp7SYWo/os6JW1ThHPH47/I4r/6ivPn70H/kasG1NqJOg0rrOlEBbZ+LcEiZOadCl+t/0NHyvZtRps2kwswUXgtsFZe5/8WsNhA9bizRKbJZHfKH+5GZejGJXV0VoFkucomxkSd5oYgL+SCeDoo+2c6ERaMSm6gGXlvg/BFMqiQVOTB2AgMChV2PqaKf9sUDYkxa1BzTt+cCMJZJuNbQWxxLlayuf+KopfzxbYvKIAEqiA==
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=HGaV9m5x73awvxC+dfZKnPQ53GWhEZafYyKnpsunBeE=;
 b=MPRxCpej8LUCDixeuUcIRScL9PWrDspZ6pMiCVIv8UdkDGAw+OQmIZoQov13e8btnMHapNDLKQPznMSM/cJhNO0inQxPYOZThyVebAvub0PdDi6IcvZkbtYDkZaPkI540QmD7p0AO6qUTyclTbpPyZI+yisW2V0lYwA/WvYUIUst1Z7liC7G/ZNhFUtDRo8F1CeCNTYoGZdlrzwB2Qvzpx7L2QEsQhT1W7IGlBNzDBMlHe0W9OhR0ZTR11E1ESWfIaRhb4vYd+OzCKMci+xzT8AmGy586Hqc8ERY3ebA8+zrC7tcOrXt3bWKqvv7+32ZpH1UWHrecwwuAhEmICw2jg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4956.eurprd01.prod.exchangelabs.com (20.177.208.222) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2241.20; Thu, 12 Sep
 2019 11:29:15 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Thu, 12 Sep 2019
 11:29:15 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH 1/1] patches: Allow including custom
 time.h headers
Thread-Index: AQHVaV1PdRxaKusRSESyt9Osd9hy6Q==
Date: Thu, 12 Sep 2019 11:29:15 +0000
Message-ID: <20190912112907.15956-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR04CA0093.eurprd04.prod.outlook.com
 (2603:10a6:803:64::28) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 0af52fcb-fca8-4be3-6057-08d73774716c
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4956; 
x-ms-traffictypediagnostic: PR1PR01MB4956:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB495640D9D4C31074AC83FF77A6B00@PR1PR01MB4956.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1775;
x-forefront-prvs: 01583E185C
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39840400004)(376002)(366004)(396003)(136003)(346002)(199004)(189003)(6116002)(14444005)(50226002)(5640700003)(305945005)(81156014)(8936002)(6486002)(7736002)(8676002)(52116002)(6506007)(99286004)(54906003)(102836004)(6436002)(81166006)(1076003)(478600001)(386003)(786003)(316002)(71190400001)(14454004)(256004)(71200400001)(64756008)(86362001)(2906002)(66446008)(66476007)(66556008)(2501003)(6916009)(5660300002)(4326008)(2616005)(476003)(6512007)(486006)(53936002)(186003)(45776006)(2351001)(46003)(25786009)(66946007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4956;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: NypbtpPBEX9nKUX1XlYk3AGpwCX5LespD6GFwf0iXlATBgevZAYnaojnYTYy41dJhX7P/RUqE+Z5srSuzI/ZY2cyIrbWFv0J73kuPJJ1OWviCjrvRtriOvwojGcJwLvbva1X1B0Q0wI6DJ9vxny85P9kLWRnhpyapR7Elman4FIlxpybhrVWVKlHF13MAx8OoTbR++NASpH2qKVdvLKGOeTFP2hfH8Hh24nOikmeKDWSpCicLUZ8xyTevBP8lzG1b8qK5Ygyd3xuJn3TH1wLygydFEnpwxQNgc3a34HvG0T5hpesfv4GZra8z1ZMT0V3vk6D3+YlSHksk8XxTSsA2rmQsvt3f98QNG8D25jCvaN5I0qfbyYMF8+SwXNqFNu/ls2RkHDwRIkkbp1e6sLIF7gcCYGEjj5W2vHkD4vVXDw=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 0af52fcb-fca8-4be3-6057-08d73774716c
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Sep 2019 11:29:15.6715 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: tRF+6062yyVA8l413OM1Y1fM+5XMXCIukdKSEWyWF74K1+eALFf75RIo6Fl5zT9WOOFQITzrRItZa2Z5iSEddl7fpSx8lP5sAiTBf8yDiKsDkqs/mk0FWOW+MP1Cr4UW
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4956
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/1] patches: Allow including
 custom time.h headers
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgotLS0KIC4uLmF0Y2gtaW4tb3JkZXItdG8taW5jbHVkZS1jdXN0b20tdGlt
ZS5wYXRjaCB8IDI3ICsrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNl
cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDA5LUFwcGx5LWhhY2tpc2gt
cGF0Y2gtaW4tb3JkZXItdG8taW5jbHVkZS1jdXN0b20tdGltZS5wYXRjaAoKZGlmZiAtLWdpdCBh
L3BhdGNoZXMvMDAwOS1BcHBseS1oYWNraXNoLXBhdGNoLWluLW9yZGVyLXRvLWluY2x1ZGUtY3Vz
dG9tLXRpbWUucGF0Y2ggYi9wYXRjaGVzLzAwMDktQXBwbHktaGFja2lzaC1wYXRjaC1pbi1vcmRl
ci10by1pbmNsdWRlLWN1c3RvbS10aW1lLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU1OWFlZDQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzLzAwMDktQXBwbHkt
aGFja2lzaC1wYXRjaC1pbi1vcmRlci10by1pbmNsdWRlLWN1c3RvbS10aW1lLnBhdGNoCkBAIC0w
LDAgKzEsMjcgQEAKK0Zyb20gMDY4MWVkNWYyODgwOTNhZmZiZDcyZjM0Yzk3Y2RjMGJlMWM3ZjRj
NyBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KK0RhdGU6IFRodSwgMTIgU2VwIDIwMTkg
MTM6NDQ6NDUgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIEFwcGx5IGhhY2tpc2ggcGF0Y2gg
aW4gb3JkZXIgdG8gaW5jbHVkZSBjdXN0b20gdGltZS5oCisgaGVhZGVyIGZpcnN0CisKK1NpZ25l
ZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNz
LnVwYi5ybz4KKy0tLQorIG5ld2xpYi9saWJjL2luY2x1ZGUvdGltZS5oIHwgMyArKysKKyAxIGZp
bGUgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspCisKK2RpZmYgLS1naXQgYS9uZXdsaWIvbGliYy9p
bmNsdWRlL3RpbWUuaCBiL25ld2xpYi9saWJjL2luY2x1ZGUvdGltZS5oCitpbmRleCAzMmJhZWQ5
Li5mMTQzYjdjIDEwMDY0NAorLS0tIGEvbmV3bGliL2xpYmMvaW5jbHVkZS90aW1lLmgKKysrKyBi
L25ld2xpYi9saWJjL2luY2x1ZGUvdGltZS5oCitAQCAtMzE1LDUgKzMxNSw4IEBAIGludCBfRVhG
VU4oY2xvY2tfZ2V0ZW5hYmxlX2F0dHIsIChjbG9ja2lkX3QgY2xvY2tfaWQsIGludCAqYXR0cikp
OworIH0KKyAjZW5kaWYKKyAKKysjZWxzZQorKyNpbmNsdWRlX25leHQgPHRpbWUuaD4KKysKKyAj
ZW5kaWYgLyogX1RJTUVfSF8gKi8KKyAKKy0tIAorMi4yMC4xCisKLS0gCjIuMjAuMQoKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:31:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:31:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8NKO-0002y5-8u; Thu, 12 Sep 2019 11:31:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SWvK=XH=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i8NKM-0002y0-U8
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:31:54 +0000
X-Inumbo-ID: ea77cd50-d550-11e9-a337-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.78]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ea77cd50-d550-11e9-a337-bc764e2007e4;
 Thu, 12 Sep 2019 11:31:52 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=LWIinETV+zI5m1ozFsLLJBHd0NVcgwmNe9M+JB9C161/53VCtaTLQHV/hhLF8tiXFohNHtJDcm4A75nLGBIXR0lM0eelcsOlseLnW2+H9zJQ7jJq56tOJN/TKNrX+2mE/OsM7R7fwNfaoNPYBMz73CpGu3xtcofwU7z2o+xl+ylKMbmpP2j0k+Wm5SG1ycmCu8SF6AKzFEmVXWn3d3L0Ywqqg0lBG+JonLcyFZXuDIpTcpTqxQeyJ3PLEWuRY7kuF58mBaIB0qysHcK7U3Xzwd3TGLHd+XdxbPet4+1+IxnFsJyDvb8aMFAeGc2DY/DPK9DNUwIn6/so40RAZkjcZQ==
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=/TSMNsGF/fmdWn71RmW/j77zXC6rCiEULrnPBhqrT7w=;
 b=IfTiy75DpnVA/VxgUAUJ0+D3Cu2CF/u0cQ++9m8gMMOWMXCJGOvnV/PTryW00Zdq532YMlKYFFJymBmHuEYuai57/Ama3LIa3LHx8DgOpufSDJLXKe2lTrrRgz1dviczdQaV30vWw+/p0fiDn2x3bqpZzmSFEUMPOvIAm5fx3JjbigIiZP2XpeSXV5x7uvTG8HwEhQ4dNH+KKVY/rP/TJPEgOp+ZBJSRZuPz7mxMMOrVgszFI6GO62esFEP6xCaMvtJv9BZHgf9nSrKQmpk9Qr6BGtPcol2bhZMynN/Jnb0exLePVk5ibHmpOoZt6OXEOy5sy+CGX9/i61M2Lp/QxQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5099.eurprd01.prod.exchangelabs.com (20.177.210.219) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Thu, 12 Sep
 2019 11:31:50 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Thu, 12 Sep 2019
 11:31:50 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v3 0/3] lib/uktime: Import timegm from musl
Thread-Index: AQHVaV2rbE3DBTq9PEq6B8I+HkSljQ==
Date: Thu, 12 Sep 2019 11:31:50 +0000
Message-ID: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0102CA0079.eurprd01.prod.exchangelabs.com
 (2603:10a6:803:15::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 71bdd6d6-21d7-41b8-8a85-08d73774cdba
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5099; 
x-ms-traffictypediagnostic: PR1PR01MB5099:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB50994ADB09A15C261CA5117CA6B00@PR1PR01MB5099.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6430;
x-forefront-prvs: 01583E185C
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(39840400004)(366004)(376002)(346002)(396003)(189003)(199004)(66556008)(71200400001)(6506007)(54906003)(6116002)(786003)(86362001)(316002)(6486002)(71190400001)(6916009)(478600001)(2906002)(2351001)(386003)(6436002)(99286004)(14454004)(8676002)(81166006)(4326008)(81156014)(53936002)(25786009)(476003)(6512007)(486006)(46003)(5660300002)(50226002)(186003)(1076003)(5640700003)(8936002)(102836004)(2616005)(66446008)(64756008)(2501003)(256004)(66946007)(52116002)(7736002)(305945005)(45776006)(66476007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5099;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 8+8twfKJoddgW/0ObC2Xe5LFQ0+cg0SG54eCmqHjIPE1z0/kglip+D15/Qwa5/5JVbOWPBjBBH4afyUjNjm66fbiDEyMPraeygSoEqGIEyP7LwT45mb7nj1NJBEcXNfblurEDfNDQ1DbFaZZwLzCsjq65Pm3bUD5jOILVrTTjYJBqhOctBTDsAPjIOMd8Rb7Jn1pS4O6MroQQTpeQ2oXD82bbl/VUUVS4Xeaw5VH3Tq31MlwHLv/AHPr33ScCoMyIHHMsVjydLJ6qXyLTb36gypIlJHJHt/ngFVXaZue5ZLQp3xsEkeEFa1aaUhnrFi4fT2Q8c3as/ifEHx3Awj1OxATN2xMtzRxKpGnHHkny7nygD8cLGR9d95nipMk4/2cr+fTS3Y8bEttIS+pUQkr+1ObxS4T4roRuO19s5pQCpc=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 71bdd6d6-21d7-41b8-8a85-08d73774cdba
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Sep 2019 11:31:50.4862 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 58nM1EdaLRPek0PtA2dOjeeP7CrxmEZH3u5PAuH7yYUhA5UlHxMZumTdFmTr5oxF0/FPkNefxbn62LnRBuxxE5PAmE84xBLJbbGmwyrc5+59p+qh6Ay0cuPTCcY8M95B
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5099
Subject: [Minios-devel] [UNIKRAFT PATCH v3 0/3] lib/uktime: Import timegm
 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgaW1wb3J0IHRoZSB0aW1lZ20gZnVuY3Rpb24gZnJvbSBtdXNsIHRvIHRoZSBuZXdseSBjcmVh
dGVkIApsaWJyYXJ5LCB1a3RpbWUuIFdlIG1vdmUgdGhlIGRlZmluaXRpb25zIGZyb20gbm9saWJj
L3RpbWUuaAp0byB1a3RpbWUvdGltZS5oLiBUaGlzIGZ1bmN0aW9uIGlzIG5lZWRlZCBieSBQeXRo
b24gMy4KCkNoYW5nZXMgc2luY2UgdjE6CiopIERyb3BwZWQgdGhlIG5vbGliYyBwYXRjaAoqKSBN
b3ZlZCBfdGltZV90eXBlcy5oIHRvIGluY2x1ZGUvdWt0aW1lCiopIFJlbW92ZWQgZHVwbGljYXRl
IF90aW1lX3R5cGVzLmggaW4gbXVzbC1pbXBvcnRlZAoqKSBBZGRlZCBsaWNlbnNlIHRvIF90aW1l
X3R5cGVzLmgKCkNoYW5nZXMgc2luY2UgdjI6CiopIE1vdmVkIHRpbWUuaCBhbmQgdGltZV9pbXAu
aCB0byBtYXRjaCB0aGUgbG9jYXRpb24gaW4gbXVzbAoKVmxhZC1BbmRyZWkgQmFkb2l1ICgzKToK
ICBsaWIvdWt0aW1lOiBJbXBvcnQgdGltZWdtIGZyb20gbXVzbAogIGxpYi91a3RpbWU6IEFkYXB0
IHRpbWVnbSBpbXBsZW1lbnRhdGlvbiB0byBVbmlrcmFmdAogIGxpYi91a3RpbWU6IEZpeCBjaGVj
a3BhdGggZXJyb3JzIGZvciB0aW1lZ20KCiBsaWIvdWt0aW1lL01ha2VmaWxlLnVrICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMTUgKy0KIGxpYi91a3RpbWUvZXhwb3J0c3ltcy51ayAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMiArLQogbGliL3VrdGltZS9pbmNsdWRlL3VrdGltZS9fdGltZV90
eXBlcy5oICAgICAgIHwgIDYyICsrKysrKysrCiBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5j
bHVkZS90aW1lLmggICAgICAgfCAxNTAgKysrKysrKysrKysrKysrKysrCiAuLi4vbXVzbC1pbXBv
cnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgICAgICAgfCAgMTIgKysKIGxpYi91a3RpbWUvbXVz
bC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMgICB8ICA4MiArKysrKysrKysrCiBsaWIvdWt0
aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jICAgfCAgMjcgKysrKwogbGliL3Vr
dGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3llYXJfdG9fc2Vjcy5jIHwgIDU1ICsrKysrKysKIGxp
Yi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZV9pbXBsLmggICAgICB8ICAgNyArCiBsaWIv
dWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jICAgICAgICAgfCAgMjEgKysrCiAxMCBm
aWxlcyBjaGFuZ2VkLCA0MzAgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWIvdWt0aW1lL2luY2x1ZGUvdWt0aW1lL190aW1lX3R5cGVzLmgKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS90aW1lLmgKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fbW9udGhfdG9f
c2Vjcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9f
X3NlY3NfdG9fdG0uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRl
ZC9zcmMvX190bV90b19zZWNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0
aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVfaW1wbC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYwoKLS0gCjIuMjAuMQoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:32:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:32:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8NKT-0002yc-Aq; Thu, 12 Sep 2019 11:32:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SWvK=XH=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i8NKR-0002yT-TP
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:31:59 +0000
X-Inumbo-ID: ec0a0d9a-d550-11e9-a337-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.78]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ec0a0d9a-d550-11e9-a337-bc764e2007e4;
 Thu, 12 Sep 2019 11:31:54 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=hfbtjdvfzMzoqEbRc4atwJfjSkJ5+9vZDtQ/Sa11YMT+zKoKDn1WC//0W1S7U3tVHV980Gu8CdZpuB3EV+H6QK2VtwYb+Ml3cSCIyv3CgShx2OC70e7Ey4AQb7QqAXahkihXB7VnNykw4QZIymNq8pZJBAzU1+Qw45iIVniU8wJ9PZD/ncT6JQpieNI77VA8NBeV7hRDURnjJWH8wygX5IXLWWn/a/W8SqUICDYJc+TAuAqnBHV+/wiXERRaYdNvG6bb2HFfKFkYbBkk3YgOWW9ds0Z1UV0WVavgsGDUnl+TVzAmA+57HtpGclYD0adV5a+jWlp2ghP99Krh/NxDTg==
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=b3AOrQOFTIdnWBupUeXduK2hvspYD3ifmxYogl0HG2o=;
 b=PKZpDO73xLxW1lN8fhlP5shPbQa+UbqA5ZtYRopqq1ZO4+17Uo1MVpPlAF6g6E5NeGbXGOMRKotglzpUKA5jo2nJ9poZnH17N8AQnwC1M+JhaPXzq63YE4TnIhC7fW9urH3vVziS/Waa1bjmKNHRdkgKnPqWAaClDgfK9XdEBH7TW6c9cycAurLToG9idTjvxrRL6ZLVswxVI9DcG+Mj5dkOfLzjw6eUwScTSUm1AwVsS4Fvz87Dr5fHJC6pwbZpcMrSJfqGMCSvVz9DZragrQfzlUb5fcljlsPrqKdZcfMQqZMmu1OZ0AZykIDIA3vjojOyks4au5WOTlCxc1eXXg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5099.eurprd01.prod.exchangelabs.com (20.177.210.219) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Thu, 12 Sep
 2019 11:31:51 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Thu, 12 Sep 2019
 11:31:51 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v3 1/3] lib/uktime: Import timegm from musl
Thread-Index: AQHVaV2r+zpK5AdqbUGNjNMpf5aABg==
Date: Thu, 12 Sep 2019 11:31:51 +0000
Message-ID: <20190912113140.16071-2-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0102CA0079.eurprd01.prod.exchangelabs.com
 (2603:10a6:803:15::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: a190689e-4aa3-4fe2-8875-08d73774ce12
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5099; 
x-ms-traffictypediagnostic: PR1PR01MB5099:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB509957DB1EA83622A925C6DCA6B00@PR1PR01MB5099.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6430;
x-forefront-prvs: 01583E185C
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(39840400004)(366004)(376002)(346002)(396003)(189003)(199004)(66556008)(71200400001)(6506007)(54906003)(6116002)(786003)(86362001)(316002)(6486002)(71190400001)(6916009)(478600001)(2906002)(2351001)(386003)(6436002)(99286004)(14454004)(8676002)(81166006)(446003)(4326008)(11346002)(81156014)(53936002)(25786009)(476003)(6512007)(486006)(46003)(5660300002)(30864003)(50226002)(186003)(1076003)(5640700003)(8936002)(102836004)(2616005)(66446008)(64756008)(2501003)(256004)(66946007)(14444005)(52116002)(7736002)(76176011)(305945005)(45776006)(66476007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5099;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: kavDFE6fZB3eyBq8ahLUo9iSVh8CJJ0Z1DIoH1KQcIwO//Rq18Whlfu2DkgxlJ88fm/ZY6TcpdsgMIwppDQ1XQzePDMuCDiZ75mh6o+tTMmDclhAImaGlBRhL9raCMBLHpNbn8Yj8coxxbMj8C3UHjBuoZtA4yhakDHtHm8kfOQNsTbFwVlTKT/hZKvGYDS/uptQWNtBkzCky3MOmg87v6uRmHodjqZ0Pv6C+a67MGiv/OJGksGAJG9zRoawKdU/F63zMP0zlFscj5RXS6uhjfKhqDns/r52f1wfOHDJoWYM2Qio+WuFKQZO/NqZh85pZlPELe+49/hPUcNNPciiLIdDynKEEuSzVGWp+ChgqJRbtrjdOxmBPLwK3wBgzEWAUUlTWbzwJSUU2nRRt2/iuvVTtJxwFhBbJqGbQ+XxE1w=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: a190689e-4aa3-4fe2-8875-08d73774ce12
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Sep 2019 11:31:51.1198 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: mNtlgZ7/SfU97ooF6z7sUbt946aW9pYJgJETHXFFAs+WStVBM1hagjKLexpgMC+rckQXs6Z9iI/DseASGbmmG9OSuEGdwtVeJFp0CemZMNbFEMTs2iA45Ve8PU6A8PEm
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5099
Subject: [Minios-devel] [UNIKRAFT PATCH v3 1/3] lib/uktime: Import timegm
 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29waWVkIGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgpnaXQ6Ly9naXQu
bXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQuCgpTaWduZWQtb2ZmLWJ5OiBWbGFk
LUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Ci0tLQog
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZS5oICAgICAgIHwgMTM4ICsrKysr
KysrKysrKysrKysrKwogLi4uL211c2wtaW1wb3J0ZWQvc3JjL19fbW9udGhfdG9fc2Vjcy5jICAg
ICAgIHwgIDEwICsrCiBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5j
ICAgfCAgODIgKysrKysrKysrKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90
b19zZWNzLmMgICB8ICAyNCArKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFy
X3RvX3NlY3MuYyB8ICA0NyArKysrKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGlt
ZV9pbXBsLmggICAgICB8ICAxMSArKwogbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1l
Z20uYyAgICAgICAgIHwgIDE4ICsrKwogNyBmaWxlcyBjaGFuZ2VkLCAzMzAgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3Rp
bWUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19t
b250aF90b19zZWNzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0
ZWQvc3JjL19fc2Vjc190b190bS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3Rp
bWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZV9pbXBsLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jCgpkaWZmIC0tZ2l0IGEv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZS5oIGIvbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL2luY2x1ZGUvdGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwLi42NzJiM2ZjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRl
ZC9pbmNsdWRlL3RpbWUuaApAQCAtMCwwICsxLDEzOCBAQAorI2lmbmRlZglfVElNRV9ICisjZGVm
aW5lIF9USU1FX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgor
CisjaW5jbHVkZSA8ZmVhdHVyZXMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIE5V
TEwgMEwKKyNlbHNlCisjZGVmaW5lIE5VTEwgKCh2b2lkKikwKQorI2VuZGlmCisKKworI2RlZmlu
ZSBfX05FRURfc2l6ZV90CisjZGVmaW5lIF9fTkVFRF90aW1lX3QKKyNkZWZpbmUgX19ORUVEX2Ns
b2NrX3QKKyNkZWZpbmUgX19ORUVEX3N0cnVjdF90aW1lc3BlYworCisjaWYgZGVmaW5lZChfUE9T
SVhfU09VUkNFKSB8fCBkZWZpbmVkKF9QT1NJWF9DX1NPVVJDRSkgXAorIHx8IGRlZmluZWQoX1hP
UEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkgXAorIHx8IGRlZmluZWQoX0JTRF9T
T1VSQ0UpCisjZGVmaW5lIF9fTkVFRF9jbG9ja2lkX3QKKyNkZWZpbmUgX19ORUVEX3RpbWVyX3QK
KyNkZWZpbmUgX19ORUVEX3BpZF90CisjZGVmaW5lIF9fTkVFRF9sb2NhbGVfdAorI2VuZGlmCisK
KyNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+CisKKyNpZiBkZWZpbmVkKF9CU0RfU09VUkNFKSB8
fCBkZWZpbmVkKF9HTlVfU09VUkNFKQorI2RlZmluZSBfX3RtX2dtdG9mZiB0bV9nbXRvZmYKKyNk
ZWZpbmUgX190bV96b25lIHRtX3pvbmUKKyNlbmRpZgorCitzdHJ1Y3QgdG0geworCWludCB0bV9z
ZWM7CisJaW50IHRtX21pbjsKKwlpbnQgdG1faG91cjsKKwlpbnQgdG1fbWRheTsKKwlpbnQgdG1f
bW9uOworCWludCB0bV95ZWFyOworCWludCB0bV93ZGF5OworCWludCB0bV95ZGF5OworCWludCB0
bV9pc2RzdDsKKwlsb25nIF9fdG1fZ210b2ZmOworCWNvbnN0IGNoYXIgKl9fdG1fem9uZTsKK307
CisKK2Nsb2NrX3QgY2xvY2sgKHZvaWQpOwordGltZV90IHRpbWUgKHRpbWVfdCAqKTsKK2RvdWJs
ZSBkaWZmdGltZSAodGltZV90LCB0aW1lX3QpOwordGltZV90IG1rdGltZSAoc3RydWN0IHRtICop
Oworc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitzdHJ1Y3QgdG0gKmdt
dGltZSAoY29uc3QgdGltZV90ICopOworc3RydWN0IHRtICpsb2NhbHRpbWUgKGNvbnN0IHRpbWVf
dCAqKTsKK2NoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKK2NoYXIgKmN0aW1lIChj
b25zdCB0aW1lX3QgKik7CitpbnQgdGltZXNwZWNfZ2V0KHN0cnVjdCB0aW1lc3BlYyAqLCBpbnQp
OworCisjZGVmaW5lIENMT0NLU19QRVJfU0VDIDEwMDAwMDBMCisKKyNkZWZpbmUgVElNRV9VVEMg
MQorCisjaWYgZGVmaW5lZChfUE9TSVhfU09VUkNFKSB8fCBkZWZpbmVkKF9QT1NJWF9DX1NPVVJD
RSkgXAorIHx8IGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkg
XAorIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCisKK3NpemVfdCBzdHJmdGltZV9sIChjaGFyICog
IF9fcmVzdHJpY3QsIHNpemVfdCwgY29uc3QgY2hhciAqICBfX3Jlc3RyaWN0LCBjb25zdCBzdHJ1
Y3QgdG0gKiAgX19yZXN0cmljdCwgbG9jYWxlX3QpOworCitzdHJ1Y3QgdG0gKmdtdGltZV9yIChj
b25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CitzdHJ1Y3Qg
dG0gKmxvY2FsdGltZV9yIChjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19y
ZXN0cmljdCk7CitjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwg
Y2hhciAqX19yZXN0cmljdCk7CitjaGFyICpjdGltZV9yIChjb25zdCB0aW1lX3QgKiwgY2hhciAq
KTsKKwordm9pZCB0enNldCAodm9pZCk7CisKK3N0cnVjdCBpdGltZXJzcGVjIHsKKwlzdHJ1Y3Qg
dGltZXNwZWMgaXRfaW50ZXJ2YWw7CisJc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOworfTsKKwor
I2RlZmluZSBDTE9DS19SRUFMVElNRSAgICAgICAgICAgMAorI2RlZmluZSBDTE9DS19NT05PVE9O
SUMgICAgICAgICAgMQorI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgMgorI2RlZmlu
ZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRCAgMworI2RlZmluZSBDTE9DS19NT05PVE9OSUNfUkFX
ICAgICAgNAorI2RlZmluZSBDTE9DS19SRUFMVElNRV9DT0FSU0UgICAgNQorI2RlZmluZSBDTE9D
S19NT05PVE9OSUNfQ09BUlNFICAgNgorI2RlZmluZSBDTE9DS19CT09UVElNRSAgICAgICAgICAg
NworI2RlZmluZSBDTE9DS19SRUFMVElNRV9BTEFSTSAgICAgOAorI2RlZmluZSBDTE9DS19CT09U
VElNRV9BTEFSTSAgICAgOQorI2RlZmluZSBDTE9DS19TR0lfQ1lDTEUgICAgICAgICAxMAorI2Rl
ZmluZSBDTE9DS19UQUkgICAgICAgICAgICAgICAxMQorCisjZGVmaW5lIFRJTUVSX0FCU1RJTUUg
MQorCitpbnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVz
cGVjICopOworaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7
CitpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQg
Y2xvY2tfc2V0dGltZSAoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQg
Y2xvY2tfbmFub3NsZWVwIChjbG9ja2lkX3QsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICos
IHN0cnVjdCB0aW1lc3BlYyAqKTsKK2ludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCwgY2xv
Y2tpZF90ICopOworCitzdHJ1Y3Qgc2lnZXZlbnQ7CitpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lk
X3QsIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCwgdGltZXJfdCAqX19yZXN0cmljdCk7Citp
bnQgdGltZXJfZGVsZXRlICh0aW1lcl90KTsKK2ludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90LCBp
bnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgaXRpbWVyc3Bl
YyAqX19yZXN0cmljdCk7CitpbnQgdGltZXJfZ2V0dGltZSAodGltZXJfdCwgc3RydWN0IGl0aW1l
cnNwZWMgKik7CitpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCk7CisKK2V4dGVybiBjaGFy
ICp0em5hbWVbMl07CisKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8
IGRlZmluZWQoX0JTRF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpCitjaGFyICpzdHJw
dGltZSAoY29uc3QgY2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0KTsKK2V4dGVybiBpbnQgZGF5bGlnaHQ7CitleHRlcm4gbG9uZyB0
aW1lem9uZTsKK2V4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CitzdHJ1Y3QgdG0gKmdldGRhdGUgKGNv
bnN0IGNoYXIgKik7CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVm
aW5lZChfQlNEX1NPVVJDRSkKK2ludCBzdGltZShjb25zdCB0aW1lX3QgKik7Cit0aW1lX3QgdGlt
ZWdtKHN0cnVjdCB0bSAqKTsKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZgorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9f
X21vbnRoX3RvX3NlY3MuYyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90
b19zZWNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjQzMjQ4ZmIzCi0t
LSAvZGV2L251bGwKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3Rv
X3NlY3MuYwpAQCAtMCwwICsxLDEwIEBACitpbnQgX19tb250aF90b19zZWNzKGludCBtb250aCwg
aW50IGlzX2xlYXApCit7CisJc3RhdGljIGNvbnN0IGludCBzZWNzX3Rocm91Z2hfbW9udGhbXSA9
IHsKKwkJMCwgMzEqODY0MDAsIDU5Kjg2NDAwLCA5MCo4NjQwMCwKKwkJMTIwKjg2NDAwLCAxNTEq
ODY0MDAsIDE4MSo4NjQwMCwgMjEyKjg2NDAwLAorCQkyNDMqODY0MDAsIDI3Myo4NjQwMCwgMzA0
Kjg2NDAwLCAzMzQqODY0MDAgfTsKKwlpbnQgdCA9IHNlY3NfdGhyb3VnaF9tb250aFttb250aF07
CisJaWYgKGlzX2xlYXAgJiYgbW9udGggPj0gMikgdCs9ODY0MDA7CisJcmV0dXJuIHQ7Cit9CmRp
ZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jIGIv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMDkzZDkwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv
dWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jCkBAIC0wLDAgKzEsODIgQEAK
KyNpbmNsdWRlICJ0aW1lX2ltcGwuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKworLyogMjAwMC0w
My0wMSAobW9kIDQwMCB5ZWFyLCBpbW1lZGlhdGVseSBhZnRlciBmZWIyOSAqLworI2RlZmluZSBM
RUFQT0NIICg5NDY2ODQ4MDBMTCArIDg2NDAwKigzMSsyOSkpCisKKyNkZWZpbmUgREFZU19QRVJf
NDAwWSAoMzY1KjQwMCArIDk3KQorI2RlZmluZSBEQVlTX1BFUl8xMDBZICgzNjUqMTAwICsgMjQp
CisjZGVmaW5lIERBWVNfUEVSXzRZICAgKDM2NSo0ICAgKyAxKQorCitpbnQgX19zZWNzX3RvX3Rt
KGxvbmcgbG9uZyB0LCBzdHJ1Y3QgdG0gKnRtKQoreworCWxvbmcgbG9uZyBkYXlzLCBzZWNzLCB5
ZWFyczsKKwlpbnQgcmVtZGF5cywgcmVtc2VjcywgcmVteWVhcnM7CisJaW50IHFjX2N5Y2xlcywg
Y19jeWNsZXMsIHFfY3ljbGVzOworCWludCBtb250aHM7CisJaW50IHdkYXksIHlkYXksIGxlYXA7
CisJc3RhdGljIGNvbnN0IGNoYXIgZGF5c19pbl9tb250aFtdID0gezMxLDMwLDMxLDMwLDMxLDMx
LDMwLDMxLDMwLDMxLDMxLDI5fTsKKworCS8qIFJlamVjdCB0aW1lX3QgdmFsdWVzIHdob3NlIHll
YXIgd291bGQgb3ZlcmZsb3cgaW50ICovCisJaWYgKHQgPCBJTlRfTUlOICogMzE2MjI0MDBMTCB8
fCB0ID4gSU5UX01BWCAqIDMxNjIyNDAwTEwpCisJCXJldHVybiAtMTsKKworCXNlY3MgPSB0IC0g
TEVBUE9DSDsKKwlkYXlzID0gc2VjcyAvIDg2NDAwOworCXJlbXNlY3MgPSBzZWNzICUgODY0MDA7
CisJaWYgKHJlbXNlY3MgPCAwKSB7CisJCXJlbXNlY3MgKz0gODY0MDA7CisJCWRheXMtLTsKKwl9
CisKKwl3ZGF5ID0gKDMrZGF5cyklNzsKKwlpZiAod2RheSA8IDApIHdkYXkgKz0gNzsKKworCXFj
X2N5Y2xlcyA9IGRheXMgLyBEQVlTX1BFUl80MDBZOworCXJlbWRheXMgPSBkYXlzICUgREFZU19Q
RVJfNDAwWTsKKwlpZiAocmVtZGF5cyA8IDApIHsKKwkJcmVtZGF5cyArPSBEQVlTX1BFUl80MDBZ
OworCQlxY19jeWNsZXMtLTsKKwl9CisKKwljX2N5Y2xlcyA9IHJlbWRheXMgLyBEQVlTX1BFUl8x
MDBZOworCWlmIChjX2N5Y2xlcyA9PSA0KSBjX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gY19jeWNs
ZXMgKiBEQVlTX1BFUl8xMDBZOworCisJcV9jeWNsZXMgPSByZW1kYXlzIC8gREFZU19QRVJfNFk7
CisJaWYgKHFfY3ljbGVzID09IDI1KSBxX2N5Y2xlcy0tOworCXJlbWRheXMgLT0gcV9jeWNsZXMg
KiBEQVlTX1BFUl80WTsKKworCXJlbXllYXJzID0gcmVtZGF5cyAvIDM2NTsKKwlpZiAocmVteWVh
cnMgPT0gNCkgcmVteWVhcnMtLTsKKwlyZW1kYXlzIC09IHJlbXllYXJzICogMzY1OworCisJbGVh
cCA9ICFyZW15ZWFycyAmJiAocV9jeWNsZXMgfHwgIWNfY3ljbGVzKTsKKwl5ZGF5ID0gcmVtZGF5
cyArIDMxICsgMjggKyBsZWFwOworCWlmICh5ZGF5ID49IDM2NStsZWFwKSB5ZGF5IC09IDM2NSts
ZWFwOworCisJeWVhcnMgPSByZW15ZWFycyArIDQqcV9jeWNsZXMgKyAxMDAqY19jeWNsZXMgKyA0
MDBMTCpxY19jeWNsZXM7CisKKwlmb3IgKG1vbnRocz0wOyBkYXlzX2luX21vbnRoW21vbnRoc10g
PD0gcmVtZGF5czsgbW9udGhzKyspCisJCXJlbWRheXMgLT0gZGF5c19pbl9tb250aFttb250aHNd
OworCisJaWYgKG1vbnRocyA+PSAxMCkgeworCQltb250aHMgLT0gMTI7CisJCXllYXJzKys7CisJ
fQorCisJaWYgKHllYXJzKzEwMCA+IElOVF9NQVggfHwgeWVhcnMrMTAwIDwgSU5UX01JTikKKwkJ
cmV0dXJuIC0xOworCisJdG0tPnRtX3llYXIgPSB5ZWFycyArIDEwMDsKKwl0bS0+dG1fbW9uID0g
bW9udGhzICsgMjsKKwl0bS0+dG1fbWRheSA9IHJlbWRheXMgKyAxOworCXRtLT50bV93ZGF5ID0g
d2RheTsKKwl0bS0+dG1feWRheSA9IHlkYXk7CisKKwl0bS0+dG1faG91ciA9IHJlbXNlY3MgLyAz
NjAwOworCXRtLT50bV9taW4gPSByZW1zZWNzIC8gNjAgJSA2MDsKKwl0bS0+dG1fc2VjID0gcmVt
c2VjcyAlIDYwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy9fX3RtX3RvX3NlY3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYzI5
ZmE5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19f
dG1fdG9fc2Vjcy5jCkBAIC0wLDAgKzEsMjQgQEAKKyNpbmNsdWRlICJ0aW1lX2ltcGwuaCIKKwor
bG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3QgdG0gKnRtKQoreworCWludCBpc19s
ZWFwOworCWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRtX3llYXI7CisJaW50IG1vbnRoID0gdG0tPnRt
X21vbjsKKwlpZiAobW9udGggPj0gMTIgfHwgbW9udGggPCAwKSB7CisJCWludCBhZGogPSBtb250
aCAvIDEyOworCQltb250aCAlPSAxMjsKKwkJaWYgKG1vbnRoIDwgMCkgeworCQkJYWRqLS07CisJ
CQltb250aCArPSAxMjsKKwkJfQorCQl5ZWFyICs9IGFkajsKKwl9CisJbG9uZyBsb25nIHQgPSBf
X3llYXJfdG9fc2Vjcyh5ZWFyLCAmaXNfbGVhcCk7CisJdCArPSBfX21vbnRoX3RvX3NlY3MobW9u
dGgsIGlzX2xlYXApOworCXQgKz0gODY0MDBMTCAqICh0bS0+dG1fbWRheS0xKTsKKwl0ICs9IDM2
MDBMTCAqIHRtLT50bV9ob3VyOworCXQgKz0gNjBMTCAqIHRtLT50bV9taW47CisJdCArPSB0bS0+
dG1fc2VjOworCXJldHVybiB0OworfQpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9y
dGVkL3NyYy9fX3llYXJfdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9f
X3llYXJfdG9fc2Vjcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4yODI0
ZWM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195
ZWFyX3RvX3NlY3MuYwpAQCAtMCwwICsxLDQ3IEBACitsb25nIGxvbmcgX195ZWFyX3RvX3NlY3Mo
bG9uZyBsb25nIHllYXIsIGludCAqaXNfbGVhcCkKK3sKKwlpZiAoeWVhci0yVUxMIDw9IDEzNikg
eworCQlpbnQgeSA9IHllYXI7CisJCWludCBsZWFwcyA9ICh5LTY4KT4+MjsKKwkJaWYgKCEoKHkt
NjgpJjMpKSB7CisJCQlsZWFwcy0tOworCQkJaWYgKGlzX2xlYXApICppc19sZWFwID0gMTsKKwkJ
fSBlbHNlIGlmIChpc19sZWFwKSAqaXNfbGVhcCA9IDA7CisJCXJldHVybiAzMTUzNjAwMCooeS03
MCkgKyA4NjQwMCpsZWFwczsKKwl9CisKKwlpbnQgY3ljbGVzLCBjZW50dXJpZXMsIGxlYXBzLCBy
ZW07CisKKwlpZiAoIWlzX2xlYXApIGlzX2xlYXAgPSAmKGludCl7MH07CisJY3ljbGVzID0gKHll
YXItMTAwKSAvIDQwMDsKKwlyZW0gPSAoeWVhci0xMDApICUgNDAwOworCWlmIChyZW0gPCAwKSB7
CisJCWN5Y2xlcy0tOworCQlyZW0gKz0gNDAwOworCX0KKwlpZiAoIXJlbSkgeworCQkqaXNfbGVh
cCA9IDE7CisJCWNlbnR1cmllcyA9IDA7CisJCWxlYXBzID0gMDsKKwl9IGVsc2UgeworCQlpZiAo
cmVtID49IDIwMCkgeworCQkJaWYgKHJlbSA+PSAzMDApIGNlbnR1cmllcyA9IDMsIHJlbSAtPSAz
MDA7CisJCQllbHNlIGNlbnR1cmllcyA9IDIsIHJlbSAtPSAyMDA7CisJCX0gZWxzZSB7CisJCQlp
ZiAocmVtID49IDEwMCkgY2VudHVyaWVzID0gMSwgcmVtIC09IDEwMDsKKwkJCWVsc2UgY2VudHVy
aWVzID0gMDsKKwkJfQorCQlpZiAoIXJlbSkgeworCQkJKmlzX2xlYXAgPSAwOworCQkJbGVhcHMg
PSAwOworCQl9IGVsc2UgeworCQkJbGVhcHMgPSByZW0gLyA0VTsKKwkJCXJlbSAlPSA0VTsKKwkJ
CSppc19sZWFwID0gIXJlbTsKKwkJfQorCX0KKworCWxlYXBzICs9IDk3KmN5Y2xlcyArIDI0KmNl
bnR1cmllcyAtICppc19sZWFwOworCisJcmV0dXJuICh5ZWFyLTEwMCkgKiAzMTUzNjAwMExMICsg
bGVhcHMgKiA4NjQwMExMICsgOTQ2Njg0ODAwICsgODY0MDA7Cit9CmRpZmYgLS1naXQgYS9saWIv
dWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVfaW1wbC5oIGIvbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL3NyYy90aW1lX2ltcGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MC4uZjI2ZDgwMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQv
c3JjL3RpbWVfaW1wbC5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlIDx0aW1lLmg+CisKK2hp
ZGRlbiBpbnQgX19kYXlzX2luX21vbnRoKGludCwgaW50KTsKK2hpZGRlbiBpbnQgX19tb250aF90
b19zZWNzKGludCwgaW50KTsKK2hpZGRlbiBsb25nIGxvbmcgX195ZWFyX3RvX3NlY3MobG9uZyBs
b25nLCBpbnQgKik7CitoaWRkZW4gbG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3Qg
dG0gKik7CitoaWRkZW4gY29uc3QgY2hhciAqX190bV90b190em5hbWUoY29uc3Qgc3RydWN0IHRt
ICopOworaGlkZGVuIGludCBfX3NlY3NfdG9fdG0obG9uZyBsb25nLCBzdHJ1Y3QgdG0gKik7Cito
aWRkZW4gdm9pZCBfX3NlY3NfdG9fem9uZShsb25nIGxvbmcsIGludCwgaW50ICosIGxvbmcgKiwg
bG9uZyAqLCBjb25zdCBjaGFyICoqKTsKK2hpZGRlbiBjb25zdCBjaGFyICpfX3N0cmZ0aW1lX2Zt
dF8xKGNoYXIgKCopWzEwMF0sIHNpemVfdCAqLCBpbnQsIGNvbnN0IHN0cnVjdCB0bSAqLCBsb2Nh
bGVfdCwgaW50KTsKK2V4dGVybiBoaWRkZW4gY29uc3QgY2hhciBfX3V0Y1tdOwpkaWZmIC0tZ2l0
IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYyBiL2xpYi91a3RpbWUvbXVz
bC1pbXBvcnRlZC9zcmMvdGltZWdtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjRlNTkwN2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy90aW1lZ20uYwpAQCAtMCwwICsxLDE4IEBACisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5j
bHVkZSAidGltZV9pbXBsLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKwordGltZV90IHRpbWVnbShz
dHJ1Y3QgdG0gKnRtKQoreworCXN0cnVjdCB0bSBuZXc7CisJbG9uZyBsb25nIHQgPSBfX3RtX3Rv
X3NlY3ModG0pOworCWlmIChfX3NlY3NfdG9fdG0odCwgJm5ldykgPCAwKSB7CisJCWVycm5vID0g
RU9WRVJGTE9XOworCQlyZXR1cm4gLTE7CisJfQorCSp0bSA9IG5ldzsKKwl0bS0+dG1faXNkc3Qg
PSAwOworCXRtLT5fX3RtX2dtdG9mZiA9IDA7CisJdG0tPl9fdG1fem9uZSA9IF9fdXRjOworCXJl
dHVybiB0OworfQotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:32:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:32:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8NKY-0002zH-Cg; Thu, 12 Sep 2019 11:32:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SWvK=XH=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i8NKW-0002z7-Sy
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:32:04 +0000
X-Inumbo-ID: ed0c802e-d550-11e9-a337-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.78]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ed0c802e-d550-11e9-a337-bc764e2007e4;
 Thu, 12 Sep 2019 11:31:56 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=bQg/M4G5SBnH9xw2mPpK0wMExJff2FQrxTDMYiZdJ/c+QlWBwDzbCW6W2vaFrLNDPrt2VW/H67CTZljYcUvatyWLpqj12YQFdN5XpOpzoqMTju0gjVu/CyXYHy4PNnqQpoeSiFhiUAQbEFih5MzbzcXnwU5ExriF7FLJMH75hqEdE6YuhuE2Ic/cyqXfo2u50B02SpGog+pzDScIgqRtJptua6zJZYVpZ0CIKNJLZQs+FLm1FVEp2c/R4kVXlbOsB0gSJACBtLmIeVFrYtHESJx/iVoyu9lr5NTNY9DeKzWlLGljvBPS2zKUoZwGWSr3MqrMCRUn27WhEVqbhDMeag==
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=NDMOAYRi/sAsUXQY/mPTBLYg898vydN3ozvchZPD//A=;
 b=JE2ekvxbPLRgNefkGz69Ld1cRtmxzc6bS5MtnTGmbwXLPgAqKjASxQFBy+cyJS/6in5j0tnmLZUKcXWF5+k+KydCtMlzIM/xYC9O9gtleci7a9oMBB1FAFh4sR06wBeNHFadO3f2TmdXdCzE2ZaXvMaIjvNwffiPwWTeArk4s7hjW9on4Hax7hS/5EjbOCaJgla8biXTjP0Nz5pgVNynltyf++M/rtD9XRJKIBC67DKJ/lfTnLzyirt94BsB+cScrZ4RnNubPEOfGzCpgYM0t/CPQr4L8guD2NRlsV1DfPovnEb1crpXbv/0UUPOrZKF2MtI7Vn7Qx/fKavJXpnONg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5099.eurprd01.prod.exchangelabs.com (20.177.210.219) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Thu, 12 Sep
 2019 11:31:51 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Thu, 12 Sep 2019
 11:31:51 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v3 2/3] lib/uktime: Adapt timegm implementation
 to Unikraft
Thread-Index: AQHVaV2s5c+U7CyxYky6ferzx6r1dA==
Date: Thu, 12 Sep 2019 11:31:51 +0000
Message-ID: <20190912113140.16071-3-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0102CA0079.eurprd01.prod.exchangelabs.com
 (2603:10a6:803:15::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: b7d4a44b-ac96-470c-15c3-08d73774ce68
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5099; 
x-ms-traffictypediagnostic: PR1PR01MB5099:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB5099939A60C9021BCB6000D8A6B00@PR1PR01MB5099.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:9508;
x-forefront-prvs: 01583E185C
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(39840400004)(366004)(376002)(346002)(396003)(189003)(199004)(66556008)(71200400001)(6506007)(54906003)(6116002)(786003)(86362001)(316002)(6486002)(71190400001)(6916009)(478600001)(2906002)(2351001)(386003)(6436002)(99286004)(14454004)(8676002)(81166006)(446003)(4326008)(11346002)(81156014)(53936002)(25786009)(476003)(6512007)(486006)(46003)(5660300002)(50226002)(186003)(1076003)(5640700003)(8936002)(102836004)(2616005)(66446008)(64756008)(2501003)(256004)(66946007)(14444005)(52116002)(7736002)(76176011)(305945005)(45776006)(66476007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5099;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: zKTp3im0QIo9gxjfVsrTe3tnE2xau5w8txzfDjoWqOLQpebUQ1NGXAWDv6/HaVRPbukR3e7t56DULDgtu0wXi/wgalkvp1IGBENTTFpbsZHnTZrMKPABLLZYmtZ6+Hmq06Yog2cfTc7GniZxHqsgSuQPiqtswFMHpZyBHax7NsrRN00MszTlgrKTHP5biJ1hmVBCKpCMdAkiTsNi8eM2l8Xxso+xr45PhMu29HDTQs6/DQdE7OC8MUK4Un7wc7qVmJ9vk9lN9g3f4T+QmnFLUQ3kEMG1WOSGSRNnw+ti8ogy5eWxQhmRcxTKSA1is4WXKJwp9FS25wFEnoqA818NgOVYQffhsfwpYefoLbVy6A0RM22eLV2kP65Mi6xDW9zh6W9iCPIfr200XtoqpJdljw2h+hO3mSCJPY+74IRq+lo=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: b7d4a44b-ac96-470c-15c3-08d73774ce68
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Sep 2019 11:31:51.6375 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 3B7YdBTENFzZ4heorE7z2oFMjB9AeR4z5qPy7YFBlZjoczDo/bn1EMqFqvcOq+s+jHiFEwEn5OdCL5cLcT8v9nA4c64sQ6Ik4R78AO94NqicVIW/bVZeDLa+jhQUlIEE
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5099
Subject: [Minios-devel] [UNIKRAFT PATCH v3 2/3] lib/uktime: Adapt timegm
 implementation to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgZXhjbHVkZSBmcm9tIHVrdGltZS90aW1lLmggdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbm90
IGJlZW4gaW1wbGVtZW50ZWQgaW4KVW5pa3JhZnQuIF90aW1lX3R5cGVzLmggaG9sZHMgdGhlIGRl
ZmluaXRpb25zIG9mIHRoZSB0eXBlcyB1c2VkCmluIHVrdGltZS90aW1lLmgKClNpZ25lZC1vZmYt
Ynk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5y
bz4KLS0tCiBsaWIvdWt0aW1lL01ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgIHwgMTUgKysr
KystCiBsaWIvdWt0aW1lL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgIHwgIDIgKy0KIGxp
Yi91a3RpbWUvaW5jbHVkZS91a3RpbWUvX3RpbWVfdHlwZXMuaCAgfCA2MiArKysrKysrKysrKysr
KysrKysrKysrKysKIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaCAgfCA0
MCArKysrKysrKystLS0tLS0KIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZV9pbXBs
LmggfCAxNCArKy0tLS0KIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMgICAg
fCAgMiArCiA2IGZpbGVzIGNoYW5nZWQsIDEwOSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWt0aW1lL2luY2x1ZGUvdWt0aW1lL190aW1lX3R5
cGVzLmgKCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL01ha2VmaWxlLnVrIGIvbGliL3VrdGltZS9N
YWtlZmlsZS51awppbmRleCA5YzFmOGIzNS4uMWJhODNjOGYgMTAwNjQ0Ci0tLSBhL2xpYi91a3Rp
bWUvTWFrZWZpbGUudWsKKysrIGIvbGliL3VrdGltZS9NYWtlZmlsZS51awpAQCAtMSw0ICsxLDE1
IEBACiAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnVrdGltZSwkKENPTkZJR19MSUJVS1RJTUUp
KSkKIAotQ0lOQ0xVREVTLSQoQ09ORklHX0xJQlVLVElNRSkgICAgKz0gLUkkKExJQlVLVElNRV9C
QVNFKS9pbmNsdWRlCi1DWFhJTkNMVURFUy0kKENPTkZJR19MSUJVS1RJTUUpICArPSAtSSQoTElC
VUtUSU1FX0JBU0UpL2luY2x1ZGUKK0xJQlVLVElNRV9DT01NT05fSU5DTFVERVMteQkrPSAtSSQo
TElCVUtUSU1FX0JBU0UpL2luY2x1ZGUKK0xJQlVLVElNRV9DT01NT05fSU5DTFVERVMteQkrPSAt
SSQoTElCVUtUSU1FX0JBU0UpL211c2wtaW1wb3J0ZWQvaW5jbHVkZQorCitDSU5DTFVERVMtJChD
T05GSUdfTElCVUtUSU1FKSAgICArPSAkKExJQlVLVElNRV9DT01NT05fSU5DTFVERVMteSkKK0NY
WElOQ0xVREVTLSQoQ09ORklHX0xJQlVLVElNRSkgICs9ICQoTElCVUtUSU1FX0NPTU1PTl9JTkNM
VURFUy15KQorCitMSUJVS1RJTUVfQ0ZMQUdTLXkJKz0gLURfVElNRV9IXworCitMSUJVS1RJTUVf
U1JDUy15ICs9ICQoTElCVUtUSU1FX0JBU0UpL211c2wtaW1wb3J0ZWQvc3JjL19fbW9udGhfdG9f
c2Vjcy5jCitMSUJVS1RJTUVfU1JDUy15ICs9ICQoTElCVUtUSU1FX0JBU0UpL211c2wtaW1wb3J0
ZWQvc3JjL19fc2Vjc190b190bS5jCitMSUJVS1RJTUVfU1JDUy15ICs9ICQoTElCVUtUSU1FX0JB
U0UpL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jCitMSUJVS1RJTUVfU1JDUy15ICs9ICQoTElC
VUtUSU1FX0JBU0UpL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jCitMSUJVS1RJTUVf
U1JDUy15ICs9ICQoTElCVUtUSU1FX0JBU0UpL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19z
ZWNzLmMKZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvZXhwb3J0c3ltcy51ayBiL2xpYi91a3RpbWUv
ZXhwb3J0c3ltcy51awppbmRleCBjODZjM2YzNS4uYTAwZDE2MDEgMTAwNjQ0Ci0tLSBhL2xpYi91
a3RpbWUvZXhwb3J0c3ltcy51aworKysgYi9saWIvdWt0aW1lL2V4cG9ydHN5bXMudWsKQEAgLTEg
KzEgQEAKLW5vbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit0aW1lZ20KZGlmZiAtLWdp
dCBhL2xpYi91a3RpbWUvaW5jbHVkZS91a3RpbWUvX3RpbWVfdHlwZXMuaCBiL2xpYi91a3RpbWUv
aW5jbHVkZS91a3RpbWUvX3RpbWVfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uN2FmZDNjN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdWt0aW1lL2luY2x1ZGUv
dWt0aW1lL190aW1lX3R5cGVzLmgKQEAgLTAsMCArMSw2MiBAQAorLyogU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IEZsb3JpYW4gU2NobWlk
dCA8Zmxvcmlhbi5zY2htaWR0QG5lY2xhYi5ldT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgs
IE5FQyBMYWJzIEV1cm9wZSwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVz
dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVY
VFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKy8qIFRoaXMgaGVhZGVyIGRv
ZXMgYnkgZGVzaWduIG5vdCBoYXZlIGluY2x1ZGUgZ3VhcmRzLCBzbyB0aGF0IGl0IGNhbiBiZQor
ICogaW5jbHVkZWQgZnJvbSBtdWx0aXBsZSBmaWxlcy4gVGhlIF9fTkVFRF94IG1hY3JvcyBpbnN0
ZWFkIG1ha2Ugc3VyZSB0aGF0CisgKiBvbmx5IHRob3NlIGRlZmluaXRpb25zIGFyZSBpbmNsdWRl
ZCB0aGF0IGFyZSByZXF1aXJlZCBieSB0aGF0IHNwZWNpZmljCisgKiBmaWxlLCBhbmQgb25seSBp
ZiB0aGV5IGhhdmVuJ3QgYmVlbiBkZWZpbmVkIG9uIGEgcHJldmlvdXMgcGFzcyB0aHJvdWdoCisg
KiB0aGlzIGZpbGUuCisgKi8KKworI2luY2x1ZGUgPHVrL2FyY2gvdHlwZXMuaD4KKworI2lmIChk
ZWZpbmVkIF9fTkVFRF9jbG9ja2lkX3QgJiYgIWRlZmluZWQgX19ERUZJTkVEX2Nsb2NraWRfdCkK
K3R5cGVkZWYgaW50IGNsb2NraWRfdDsKKyNkZWZpbmUgX19ERUZJTkVEX2Nsb2NraWRfdAorI2Vu
ZGlmCisKKyNpZiAoZGVmaW5lZCBfX05FRURfdGltZV90ICYmICFkZWZpbmVkIF9fREVGSU5FRF90
aW1lX3QpCit0eXBlZGVmIGxvbmcgdGltZV90OworI2RlZmluZSBfX0RFRklORURfdGltZV90Cisj
ZW5kaWYKKworI2lmIChkZWZpbmVkIF9fTkVFRF9zdHJ1Y3RfdGltZXNwZWMgJiYJCQlcCisJCSFk
ZWZpbmVkIF9fREVGSU5FRF9zdHJ1Y3RfdGltZXNwZWMpCitzdHJ1Y3QgdGltZXNwZWMgeworCXRp
bWVfdAl0dl9zZWM7CisJbG9uZwl0dl9uc2VjOworfTsKKyNkZWZpbmUgX19ERUZJTkVEX3N0cnVj
dF90aW1lc3BlYworI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQv
aW5jbHVkZS90aW1lLmggYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5jbHVkZS90aW1lLmgK
aW5kZXggNjcyYjNmYzMuLmE3NzkyNmMxIDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL211c2wtaW1w
b3J0ZWQvaW5jbHVkZS90aW1lLmgKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1
ZGUvdGltZS5oCkBAIC0xLDE4ICsxLDE3IEBACi0jaWZuZGVmCV9USU1FX0gKLSNkZWZpbmUgX1RJ
TUVfSAorI2lmbmRlZiBfVUtUSU1FX1RJTUVfSAorI2RlZmluZSBfVUtUSU1FX1RJTUVfSAogCi0j
aWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCisjaW5jbHVkZSA8dWsvY29u
ZmlnLmg+CiAKLSNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmZGVmIENPTkZJR19MSUJOT0xJQkMK
KyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwotI2Rl
ZmluZSBOVUxMIDBMCi0jZWxzZQotI2RlZmluZSBOVUxMICgodm9pZCopMCkKK2V4dGVybiAiQyIg
ewogI2VuZGlmCiAKKyNkZWZpbmUgX0dOVV9TT1VSQ0UKIAogI2RlZmluZSBfX05FRURfc2l6ZV90
CiAjZGVmaW5lIF9fTkVFRF90aW1lX3QKQEAgLTI4LDcgKzI3LDEyIEBAIGV4dGVybiAiQyIgewog
I2RlZmluZSBfX05FRURfbG9jYWxlX3QKICNlbmRpZgogCi0jaW5jbHVkZSA8Yml0cy9hbGx0eXBl
cy5oPgorI2luY2x1ZGUgPHVrdGltZS9fdGltZV90eXBlcy5oPgorI2lmZGVmIENPTkZJR19MSUJO
T0xJQkMKKyNpbmNsdWRlIDxub2xpYmMtaW50ZXJuYWwvc2hhcmVkZGVmcy5oPgorI2Vsc2UKKyNp
bmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgogCiAjaWYgZGVmaW5lZChfQlNEX1NPVVJDRSkgfHwg
ZGVmaW5lZChfR05VX1NPVVJDRSkKICNkZWZpbmUgX190bV9nbXRvZmYgdG1fZ210b2ZmCkBAIC00
OSw2ICs1Myw3IEBAIHN0cnVjdCB0bSB7CiAJY29uc3QgY2hhciAqX190bV96b25lOwogfTsKIAor
I2lmIDAKIGNsb2NrX3QgY2xvY2sgKHZvaWQpOwogdGltZV90IHRpbWUgKHRpbWVfdCAqKTsKIGRv
dWJsZSBkaWZmdGltZSAodGltZV90LCB0aW1lX3QpOwpAQCAtNTksNiArNjQsNyBAQCBzdHJ1Y3Qg
dG0gKmxvY2FsdGltZSAoY29uc3QgdGltZV90ICopOwogY2hhciAqYXNjdGltZSAoY29uc3Qgc3Ry
dWN0IHRtICopOwogY2hhciAqY3RpbWUgKGNvbnN0IHRpbWVfdCAqKTsKIGludCB0aW1lc3BlY19n
ZXQoc3RydWN0IHRpbWVzcGVjICosIGludCk7CisjZW5kaWYKIAogI2RlZmluZSBDTE9DS1NfUEVS
X1NFQyAxMDAwMDAwTAogCkBAIC02OCw2ICs3NCw3IEBAIGludCB0aW1lc3BlY19nZXQoc3RydWN0
IHRpbWVzcGVjICosIGludCk7CiAgfHwgZGVmaW5lZChfWE9QRU5fU09VUkNFKSB8fCBkZWZpbmVk
KF9HTlVfU09VUkNFKSBcCiAgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKIAorI2lmIDAKIHNpemVf
dCBzdHJmdGltZV9sIChjaGFyICogIF9fcmVzdHJpY3QsIHNpemVfdCwgY29uc3QgY2hhciAqICBf
X3Jlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdG0gKiAgX19yZXN0cmljdCwgbG9jYWxlX3QpOwogCiBz
dHJ1Y3QgdG0gKmdtdGltZV9yIChjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAq
X19yZXN0cmljdCk7CkBAIC03Niw2ICs4Myw3IEBAIGNoYXIgKmFzY3RpbWVfciAoY29uc3Qgc3Ry
dWN0IHRtICpfX3Jlc3RyaWN0LCBjaGFyICpfX3Jlc3RyaWN0KTsKIGNoYXIgKmN0aW1lX3IgKGNv
bnN0IHRpbWVfdCAqLCBjaGFyICopOwogCiB2b2lkIHR6c2V0ICh2b2lkKTsKKyNlbmRpZgogCiBz
dHJ1Y3QgaXRpbWVyc3BlYyB7CiAJc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwpAQCAtOTgs
OCArMTA2LDExIEBAIHN0cnVjdCBpdGltZXJzcGVjIHsKICNkZWZpbmUgVElNRVJfQUJTVElNRSAx
CiAKIGludCBuYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNw
ZWMgKik7CisjaWYgMAogaW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNw
ZWMgKik7CisjZW5kaWYKIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QsIHN0cnVjdCB0aW1l
c3BlYyAqKTsKKyNpZiAwCiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90LCBjb25zdCBzdHJ1
Y3QgdGltZXNwZWMgKik7CiBpbnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lkX3QsIGludCwgY29u
c3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKIGludCBjbG9ja19nZXRj
cHVjbG9ja2lkIChwaWRfdCwgY2xvY2tpZF90ICopOwpAQCAtMTEyLDEwICsxMjMsMTAgQEAgaW50
IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwogaW50IHRpbWVy
X2dldG92ZXJydW4gKHRpbWVyX3QpOwogCiBleHRlcm4gY2hhciAqdHpuYW1lWzJdOwotCisjZW5k
aWYKICNlbmRpZgogCi0KKyNpZiAwCiAjaWYgZGVmaW5lZChfWE9QRU5fU09VUkNFKSB8fCBkZWZp
bmVkKF9CU0RfU09VUkNFKSB8fCBkZWZpbmVkKF9HTlVfU09VUkNFKQogY2hhciAqc3RycHRpbWUg
KGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHN0cnVjdCB0
bSAqX19yZXN0cmljdCk7CiBleHRlcm4gaW50IGRheWxpZ2h0OwpAQCAtMTIzLDEwICsxMzQsMTIg
QEAgZXh0ZXJuIGxvbmcgdGltZXpvbmU7CiBleHRlcm4gaW50IGdldGRhdGVfZXJyOwogc3RydWN0
IHRtICpnZXRkYXRlIChjb25zdCBjaGFyICopOwogI2VuZGlmCi0KKyNlbmRpZgogCiAjaWYgZGVm
aW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKKyNpZiAwCiBpbnQgc3Rp
bWUoY29uc3QgdGltZV90ICopOworI2VuZGlmCiB0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSAqKTsK
ICNlbmRpZgogCkBAIC0xMzQsNSArMTQ3LDQgQEAgdGltZV90IHRpbWVnbShzdHJ1Y3QgdG0gKik7
CiB9CiAjZW5kaWYKIAotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBv
cnRlZC9zcmMvdGltZV9pbXBsLmggYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVf
aW1wbC5oCmluZGV4IGYyNmQ4MDA1Li4wYWYwNjNlZCAxMDA2NDQKLS0tIGEvbGliL3VrdGltZS9t
dXNsLWltcG9ydGVkL3NyYy90aW1lX2ltcGwuaAorKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0
ZWQvc3JjL3RpbWVfaW1wbC5oCkBAIC0xLDExICsxLDcgQEAKICNpbmNsdWRlIDx0aW1lLmg+CiAK
LWhpZGRlbiBpbnQgX19kYXlzX2luX21vbnRoKGludCwgaW50KTsKLWhpZGRlbiBpbnQgX19tb250
aF90b19zZWNzKGludCwgaW50KTsKLWhpZGRlbiBsb25nIGxvbmcgX195ZWFyX3RvX3NlY3MobG9u
ZyBsb25nLCBpbnQgKik7Ci1oaWRkZW4gbG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1
Y3QgdG0gKik7Ci1oaWRkZW4gY29uc3QgY2hhciAqX190bV90b190em5hbWUoY29uc3Qgc3RydWN0
IHRtICopOwotaGlkZGVuIGludCBfX3NlY3NfdG9fdG0obG9uZyBsb25nLCBzdHJ1Y3QgdG0gKik7
Ci1oaWRkZW4gdm9pZCBfX3NlY3NfdG9fem9uZShsb25nIGxvbmcsIGludCwgaW50ICosIGxvbmcg
KiwgbG9uZyAqLCBjb25zdCBjaGFyICoqKTsKLWhpZGRlbiBjb25zdCBjaGFyICpfX3N0cmZ0aW1l
X2ZtdF8xKGNoYXIgKCopWzEwMF0sIHNpemVfdCAqLCBpbnQsIGNvbnN0IHN0cnVjdCB0bSAqLCBs
b2NhbGVfdCwgaW50KTsKLWV4dGVybiBoaWRkZW4gY29uc3QgY2hhciBfX3V0Y1tdOworaW50IF9f
bW9udGhfdG9fc2VjcyhpbnQsIGludCk7Citsb25nIGxvbmcgX195ZWFyX3RvX3NlY3MobG9uZyBs
b25nLCBpbnQgKik7Citsb25nIGxvbmcgX190bV90b19zZWNzKGNvbnN0IHN0cnVjdCB0bSAqKTsK
K2ludCBfX3NlY3NfdG9fdG0obG9uZyBsb25nLCBzdHJ1Y3QgdG0gKik7CitleHRlcm4gY29uc3Qg
Y2hhciBfX3V0Y1tdOwpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90
aW1lZ20uYyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMKaW5kZXggNGU1
OTA3ZDcuLjgwZTI1MDZkIDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3Jj
L3RpbWVnbS5jCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMKQEAg
LTIsNiArMiw4IEBACiAjaW5jbHVkZSAidGltZV9pbXBsLmgiCiAjaW5jbHVkZSA8ZXJybm8uaD4K
IAorY29uc3QgY2hhciBfX3V0Y1tdID0gIlVUQyI7CisKIHRpbWVfdCB0aW1lZ20oc3RydWN0IHRt
ICp0bSkKIHsKIAlzdHJ1Y3QgdG0gbmV3OwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:32:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:32:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8NKd-000305-FF; Thu, 12 Sep 2019 11:32:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=SWvK=XH=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i8NKb-0002zr-TW
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:32:09 +0000
X-Inumbo-ID: edfc3a7e-d550-11e9-a337-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.78]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id edfc3a7e-d550-11e9-a337-bc764e2007e4;
 Thu, 12 Sep 2019 11:31:57 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=J933sRYFkhtC/6C8Cf5BpPSCRb+8zp4NBQWi4Ilp/26mCcppergMOxCi4vwl5tT90LelMg7lcrfn78kNm3LhEJXaWl11BeR3Bf7uKLRWj0vwENcHtDmVydiwm1gyU6pEMXofm6g2TRvaYwo6r6aEOaj7IS6gOlD5s1YiV1rbNkZ+8rjXCFyCqyBCjCOpYdbNVPe079AXnUpuIm9+r6KY4va6o2+ZSmuShJ4CuwznYHzw11HcVeK0mPSnH0A7KKdnQJqzn/BIWCRuL6ABH0IZcMQ4oldIEaz35Y7vsi6PCOyqr0jD9hoyOvcZCT8clLp1lPg8Xd5Lzdh0hNQniOITMQ==
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=TWquRQFKI8CU2wAJ1ZJbT9teml+Q1E+7Ag1S99KDbhk=;
 b=JSouOSxfUIEk7l4ngpo0D9L/vESCr6gTwasU+y1PChHKur0Ypbcih67UWn9Me/5CPLrYza1y/UAMsRV/S04lbWGANaNitdMxm2T1KfPoWuXihzURGtPUpv4PZQJlEig4MuG/s2ev8bFA/BkNsaJ1y0QVkAr2zZZkm24xVTIW+OiEtQ0E9MWgx8BGvCyoG64bR+H0Htbq49zsxaihsuvY+mDFqw+QK79DkCxxakdcqQI5vTSBFP8uyQG7Sd/RUoEbT9RWt2fP+x/PistshAuSsuhKPPe+b5pEZb6QPU9+0v84He/40G9eWp4F9hu0XPNI+iSbvaVA/LovIQrjolwDfA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5099.eurprd01.prod.exchangelabs.com (20.177.210.219) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Thu, 12 Sep
 2019 11:31:52 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2220.022; Thu, 12 Sep 2019
 11:31:52 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v3 3/3] lib/uktime: Fix checkpath errors for
 timegm
Thread-Index: AQHVaV2sUslrBMQdB0aYVVJvq3x6hw==
Date: Thu, 12 Sep 2019 11:31:52 +0000
Message-ID: <20190912113140.16071-4-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0102CA0079.eurprd01.prod.exchangelabs.com
 (2603:10a6:803:15::20) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8611:f200:20e5:1d04:110f:6c92]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: b63e5feb-30a7-4df2-2e93-08d73774ceb4
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5099; 
x-ms-traffictypediagnostic: PR1PR01MB5099:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB50992D59D849F2C38E08A4CAA6B00@PR1PR01MB5099.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6108;
x-forefront-prvs: 01583E185C
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(39840400004)(366004)(376002)(346002)(396003)(189003)(199004)(66556008)(71200400001)(6506007)(54906003)(6116002)(786003)(86362001)(316002)(6486002)(71190400001)(6916009)(478600001)(2906002)(2351001)(386003)(6436002)(99286004)(14454004)(8676002)(81166006)(446003)(4326008)(11346002)(81156014)(53936002)(25786009)(476003)(6512007)(486006)(46003)(5660300002)(50226002)(186003)(1076003)(5640700003)(8936002)(102836004)(2616005)(66446008)(64756008)(2501003)(256004)(66946007)(14444005)(52116002)(7736002)(76176011)(305945005)(45776006)(66476007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5099;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: AC76J2Id5Awpmt9KOLnhwazlCHTHzYOOFI2ua+fnpn7+MUq9cxRgzCDlay2Yr6YAC6r5BMWX/LuJASdEKIslJgLjf2WIoUFxZ/xrFlgnWRZR8J3V+WPeONC+DihAG0qW1bGGW6ZnV/vC+zPjzgUejgfYjkiHWxLX9RN/ThJw7z9rKuJkTiUX/21+ybPvqratIdh0Bjt0fYHTGUusfHj1ePezPgs6CjFWPg+8n9eHn2cug+HpLLjMNgiynuUrLFWEeoJCp6GmpuPtOBmW5v0QxwvjWuu1b8iB5RzbUlPwSckeuum/R8NYDQN0/KPtq4xB0WHGJ7QUNrRaAk/CH9rnX9/lGvkUkbs93+opYfVy+cLboTIVl5w2qdgJ4UOSN8A/t9TjQBCLWTRGAGkYTP0VdCIfAczX65k3u9mMtqVrEG0=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: b63e5feb-30a7-4df2-2e93-08d73774ceb4
X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Sep 2019 11:31:52.1352 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: LLQvKMAsmDkmRFB4aM+RzUrHDkQGsukM60sfVvGTO29k8wWfUM6lPbl2KVUnYo3KdtcPL1L7XjlBZdjjlvoJOJrae5fZPiWIdn6K+ODi69NIj72e8hEc43tSvgqrnhPO
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5099
Subject: [Minios-devel] [UNIKRAFT PATCH v3 3/3] lib/uktime: Fix checkpath
 errors for timegm
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgZml4IHRoZSBjaGVja3BhdGggZXJyb3JzIG9mIHRoZSBpbXBvcnRlZCBmaWxlcy4gV2Ugb21p
dCB0aGUKImZ1bmN0aW9uIGRlZmluaXRpb24gYXJndW1lbnQgKiBzaG91bGQgYWxzbyBoYXZlIGFu
IGlkZW50aWZpZXIgbmFtZSIKd2FybmluZ3Mgc2luY2UgdGhlIGZ1bmN0aW9ucyBhcmUgY29tbWVu
dGVkIG91dC4KClNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWku
YmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KLS0tCiBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvaW5j
bHVkZS90aW1lLmggICAgICAgfCA1NiArKysrKysrKystLS0tLS0tLS0tCiAuLi4vbXVzbC1pbXBv
cnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgICAgICAgfCAgNCArLQogbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYyAgIHwgIDQgKy0KIGxpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMgICB8ICAzICsKIGxpYi91a3RpbWUvbXVzbC1pbXBv
cnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYyB8IDIyICsrKysrLS0tCiBsaWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL3RpbWVnbS5jICAgICAgICAgfCAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDUy
IGluc2VydGlvbnMoKyksIDM4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUv
bXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaCBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9p
bmNsdWRlL3RpbWUuaAppbmRleCBhNzc5MjZjMS4uYjM0YjBmMzAgMTAwNjQ0Ci0tLSBhL2xpYi91
a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaAorKysgYi9saWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvaW5jbHVkZS90aW1lLmgKQEAgLTU0LDE1ICs1NCwxNSBAQCBzdHJ1Y3QgdG0gewog
fTsKIAogI2lmIDAKLWNsb2NrX3QgY2xvY2sgKHZvaWQpOwotdGltZV90IHRpbWUgKHRpbWVfdCAq
KTsKLWRvdWJsZSBkaWZmdGltZSAodGltZV90LCB0aW1lX3QpOwotdGltZV90IG1rdGltZSAoc3Ry
dWN0IHRtICopOwotc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNv
bnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7Ci1zdHJ1
Y3QgdG0gKmdtdGltZSAoY29uc3QgdGltZV90ICopOwotc3RydWN0IHRtICpsb2NhbHRpbWUgKGNv
bnN0IHRpbWVfdCAqKTsKLWNoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKLWNoYXIg
KmN0aW1lIChjb25zdCB0aW1lX3QgKik7CitjbG9ja190IGNsb2NrKHZvaWQpOwordGltZV90IHRp
bWUodGltZV90ICopOworZG91YmxlIGRpZmZ0aW1lKHRpbWVfdCwgdGltZV90KTsKK3RpbWVfdCBt
a3RpbWUoc3RydWN0IHRtICopOworc2l6ZV90IHN0cmZ0aW1lKGNoYXIgKl9fcmVzdHJpY3QsIHNp
emVfdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0
KTsKK3N0cnVjdCB0bSAqZ210aW1lKGNvbnN0IHRpbWVfdCAqKTsKK3N0cnVjdCB0bSAqbG9jYWx0
aW1lKGNvbnN0IHRpbWVfdCAqKTsKK2NoYXIgKmFzY3RpbWUoY29uc3Qgc3RydWN0IHRtICopOwor
Y2hhciAqY3RpbWUoY29uc3QgdGltZV90ICopOwogaW50IHRpbWVzcGVjX2dldChzdHJ1Y3QgdGlt
ZXNwZWMgKiwgaW50KTsKICNlbmRpZgogCkBAIC03NSwxNCArNzUsMTQgQEAgaW50IHRpbWVzcGVj
X2dldChzdHJ1Y3QgdGltZXNwZWMgKiwgaW50KTsKICB8fCBkZWZpbmVkKF9CU0RfU09VUkNFKQog
CiAjaWYgMAotc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKiAgX19yZXN0cmljdCwgc2l6ZV90LCBj
b25zdCBjaGFyICogIF9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqICBfX3Jlc3RyaWN0LCBs
b2NhbGVfdCk7CitzaXplX3Qgc3RyZnRpbWVfbChjaGFyICpfX3Jlc3RyaWN0LCBzaXplX3QsIGNv
bnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgbG9jYWxl
X3QpOwogCi1zdHJ1Y3QgdG0gKmdtdGltZV9yIChjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0
cnVjdCB0bSAqX19yZXN0cmljdCk7Ci1zdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0aW1l
X3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7Ci1jaGFyICphc2N0aW1lX3Ig
KGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgY2hhciAqX19yZXN0cmljdCk7Ci1jaGFyICpj
dGltZV9yIChjb25zdCB0aW1lX3QgKiwgY2hhciAqKTsKK3N0cnVjdCB0bSAqZ210aW1lX3IoY29u
c3QgdGltZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOworc3RydWN0IHRt
ICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0
cmljdCk7CitjaGFyICphc2N0aW1lX3IoY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0LCBjaGFy
ICpfX3Jlc3RyaWN0KTsKK2NoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICosIGNoYXIgKik7CiAK
LXZvaWQgdHpzZXQgKHZvaWQpOwordm9pZCB0enNldCh2b2lkKTsKICNlbmRpZgogCiBzdHJ1Y3Qg
aXRpbWVyc3BlYyB7CkBAIC0xMDUsMjIgKzEwNSwyMiBAQCBzdHJ1Y3QgaXRpbWVyc3BlYyB7CiAK
ICNkZWZpbmUgVElNRVJfQUJTVElNRSAxCiAKLWludCBuYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0
aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgbmFub3NsZWVwKGNvbnN0IHN0cnVj
dCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgKik7CiAjaWYgMAotaW50IGNsb2NrX2dldHJl
cyAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tfZ2V0cmVzKGNsb2Nr
aWRfdCwgc3RydWN0IHRpbWVzcGVjICopOwogI2VuZGlmCi1pbnQgY2xvY2tfZ2V0dGltZSAoY2xv
Y2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tfZ2V0dGltZShjbG9ja2lkX3Qs
IHN0cnVjdCB0aW1lc3BlYyAqKTsKICNpZiAwCi1pbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90
LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7Ci1pbnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lk
X3QsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKLWlu
dCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCwgY2xvY2tpZF90ICopOworaW50IGNsb2NrX3Nl
dHRpbWUoY2xvY2tpZF90LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKik7CitpbnQgY2xvY2tfbmFu
b3NsZWVwKGNsb2NraWRfdCwgaW50LCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRp
bWVzcGVjICopOworaW50IGNsb2NrX2dldGNwdWNsb2NraWQocGlkX3QsIGNsb2NraWRfdCAqKTsK
IAogc3RydWN0IHNpZ2V2ZW50OwotaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90LCBzdHJ1Y3Qg
c2lnZXZlbnQgKl9fcmVzdHJpY3QsIHRpbWVyX3QgKl9fcmVzdHJpY3QpOwotaW50IHRpbWVyX2Rl
bGV0ZSAodGltZXJfdCk7Ci1pbnQgdGltZXJfc2V0dGltZSAodGltZXJfdCwgaW50LCBjb25zdCBz
dHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJp
Y3QpOwotaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwot
aW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3QpOworaW50IHRpbWVyX2NyZWF0ZShjbG9ja2lk
X3QsIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCwgdGltZXJfdCAqX19yZXN0cmljdCk7Citp
bnQgdGltZXJfZGVsZXRlKHRpbWVyX3QpOworaW50IHRpbWVyX3NldHRpbWUodGltZXJfdCwgaW50
LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCwgc3RydWN0IGl0aW1lcnNwZWMg
Kl9fcmVzdHJpY3QpOworaW50IHRpbWVyX2dldHRpbWUodGltZXJfdCwgc3RydWN0IGl0aW1lcnNw
ZWMgKik7CitpbnQgdGltZXJfZ2V0b3ZlcnJ1bih0aW1lcl90KTsKIAogZXh0ZXJuIGNoYXIgKnR6
bmFtZVsyXTsKICNlbmRpZgpAQCAtMTI4LDExICsxMjgsMTEgQEAgZXh0ZXJuIGNoYXIgKnR6bmFt
ZVsyXTsKIAogI2lmIDAKICNpZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8IGRlZmluZWQoX0JT
RF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpCi1jaGFyICpzdHJwdGltZSAoY29uc3Qg
Y2hhciAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgc3RydWN0IHRtICpfX3Jl
c3RyaWN0KTsKK2NoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNo
YXIgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7CiBleHRlcm4gaW50IGRheWxp
Z2h0OwogZXh0ZXJuIGxvbmcgdGltZXpvbmU7CiBleHRlcm4gaW50IGdldGRhdGVfZXJyOwotc3Ry
dWN0IHRtICpnZXRkYXRlIChjb25zdCBjaGFyICopOworc3RydWN0IHRtICpnZXRkYXRlKGNvbnN0
IGNoYXIgKik7CiAjZW5kaWYKICNlbmRpZgogCmRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL19fbW9udGhfdG9fc2Vjcy5jIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy9fX21vbnRoX3RvX3NlY3MuYwppbmRleCA0MzI0OGZiMy4uYzNhZTU3ZjMgMTAwNjQ0Ci0t
LSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19zZWNzLmMKKysrIGIv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYwpAQCAtNSw2ICs1
LDggQEAgaW50IF9fbW9udGhfdG9fc2VjcyhpbnQgbW9udGgsIGludCBpc19sZWFwKQogCQkxMjAq
ODY0MDAsIDE1MSo4NjQwMCwgMTgxKjg2NDAwLCAyMTIqODY0MDAsCiAJCTI0Myo4NjQwMCwgMjcz
Kjg2NDAwLCAzMDQqODY0MDAsIDMzNCo4NjQwMCB9OwogCWludCB0ID0gc2Vjc190aHJvdWdoX21v
bnRoW21vbnRoXTsKLQlpZiAoaXNfbGVhcCAmJiBtb250aCA+PSAyKSB0Kz04NjQwMDsKKworCWlm
IChpc19sZWFwICYmIG1vbnRoID49IDIpCisJCXQgKz0gODY0MDA7CiAJcmV0dXJuIHQ7CiB9CmRp
ZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jIGIv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYwppbmRleCAwOTNkOTAy
MS4uNGE5ZjUzYTMgMTAwNjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19z
ZWNzX3RvX3RtLmMKKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9f
dG0uYwpAQCAtMTUsNyArMTUsNyBAQCBpbnQgX19zZWNzX3RvX3RtKGxvbmcgbG9uZyB0LCBzdHJ1
Y3QgdG0gKnRtKQogCWludCBxY19jeWNsZXMsIGNfY3ljbGVzLCBxX2N5Y2xlczsKIAlpbnQgbW9u
dGhzOwogCWludCB3ZGF5LCB5ZGF5LCBsZWFwOwotCXN0YXRpYyBjb25zdCBjaGFyIGRheXNfaW5f
bW9udGhbXSA9IHszMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMSwzMSwyOX07CisJc3RhdGlj
IGNvbnN0IGNoYXIgZGF5c19pbl9tb250aFtdID0gezMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMw
LCAzMSwgMzAsIDMxLCAzMSwgMjl9OwogCiAJLyogUmVqZWN0IHRpbWVfdCB2YWx1ZXMgd2hvc2Ug
eWVhciB3b3VsZCBvdmVyZmxvdyBpbnQgKi8KIAlpZiAodCA8IElOVF9NSU4gKiAzMTYyMjQwMExM
IHx8IHQgPiBJTlRfTUFYICogMzE2MjI0MDBMTCkKQEAgLTU3LDcgKzU3LDcgQEAgaW50IF9fc2Vj
c190b190bShsb25nIGxvbmcgdCwgc3RydWN0IHRtICp0bSkKIAogCXllYXJzID0gcmVteWVhcnMg
KyA0KnFfY3ljbGVzICsgMTAwKmNfY3ljbGVzICsgNDAwTEwqcWNfY3ljbGVzOwogCi0JZm9yICht
b250aHM9MDsgZGF5c19pbl9tb250aFttb250aHNdIDw9IHJlbWRheXM7IG1vbnRocysrKQorCWZv
ciAobW9udGhzID0gMDsgZGF5c19pbl9tb250aFttb250aHNdIDw9IHJlbWRheXM7IG1vbnRocysr
KQogCQlyZW1kYXlzIC09IGRheXNfaW5fbW9udGhbbW9udGhzXTsKIAogCWlmIChtb250aHMgPj0g
MTApIHsKZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19z
ZWNzLmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jCmluZGV4
IGMyOWZhOTg1Li5hYWY3ZDEzYyAxMDA2NDQKLS0tIGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy9fX3RtX3RvX3NlY3MuYworKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19f
dG1fdG9fc2Vjcy5jCkBAIC01LDggKzUsMTAgQEAgbG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25z
dCBzdHJ1Y3QgdG0gKnRtKQogCWludCBpc19sZWFwOwogCWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRt
X3llYXI7CiAJaW50IG1vbnRoID0gdG0tPnRtX21vbjsKKwogCWlmIChtb250aCA+PSAxMiB8fCBt
b250aCA8IDApIHsKIAkJaW50IGFkaiA9IG1vbnRoIC8gMTI7CisKIAkJbW9udGggJT0gMTI7CiAJ
CWlmIChtb250aCA8IDApIHsKIAkJCWFkai0tOwpAQCAtMTUsNiArMTcsNyBAQCBsb25nIGxvbmcg
X190bV90b19zZWNzKGNvbnN0IHN0cnVjdCB0bSAqdG0pCiAJCXllYXIgKz0gYWRqOwogCX0KIAls
b25nIGxvbmcgdCA9IF9feWVhcl90b19zZWNzKHllYXIsICZpc19sZWFwKTsKKwogCXQgKz0gX19t
b250aF90b19zZWNzKG1vbnRoLCBpc19sZWFwKTsKIAl0ICs9IDg2NDAwTEwgKiAodG0tPnRtX21k
YXktMSk7CiAJdCArPSAzNjAwTEwgKiB0bS0+dG1faG91cjsKZGlmZiAtLWdpdCBhL2xpYi91a3Rp
bWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYyBiL2xpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYwppbmRleCAyODI0ZWM2ZC4uMTZkNzFjNTUgMTAw
NjQ0Ci0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFyX3RvX3NlY3MuYwor
KysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMKQEAgLTMs
MTYgKzMsMjAgQEAgbG9uZyBsb25nIF9feWVhcl90b19zZWNzKGxvbmcgbG9uZyB5ZWFyLCBpbnQg
KmlzX2xlYXApCiAJaWYgKHllYXItMlVMTCA8PSAxMzYpIHsKIAkJaW50IHkgPSB5ZWFyOwogCQlp
bnQgbGVhcHMgPSAoeS02OCk+PjI7CisKIAkJaWYgKCEoKHktNjgpJjMpKSB7CiAJCQlsZWFwcy0t
OwotCQkJaWYgKGlzX2xlYXApICppc19sZWFwID0gMTsKLQkJfSBlbHNlIGlmIChpc19sZWFwKSAq
aXNfbGVhcCA9IDA7CisJCQlpZiAoaXNfbGVhcCkKKwkJCQkqaXNfbGVhcCA9IDE7CisJCX0gZWxz
ZSBpZiAoaXNfbGVhcCkKKwkJCSppc19sZWFwID0gMDsKIAkJcmV0dXJuIDMxNTM2MDAwKih5LTcw
KSArIDg2NDAwKmxlYXBzOwogCX0KIAogCWludCBjeWNsZXMsIGNlbnR1cmllcywgbGVhcHMsIHJl
bTsKIAotCWlmICghaXNfbGVhcCkgaXNfbGVhcCA9ICYoaW50KXswfTsKKwlpZiAoIWlzX2xlYXAp
CisJCWlzX2xlYXAgPSAmKGludCl7MH07CiAJY3ljbGVzID0gKHllYXItMTAwKSAvIDQwMDsKIAly
ZW0gPSAoeWVhci0xMDApICUgNDAwOwogCWlmIChyZW0gPCAwKSB7CkBAIC0yNSwxMSArMjksMTUg
QEAgbG9uZyBsb25nIF9feWVhcl90b19zZWNzKGxvbmcgbG9uZyB5ZWFyLCBpbnQgKmlzX2xlYXAp
CiAJCWxlYXBzID0gMDsKIAl9IGVsc2UgewogCQlpZiAocmVtID49IDIwMCkgewotCQkJaWYgKHJl
bSA+PSAzMDApIGNlbnR1cmllcyA9IDMsIHJlbSAtPSAzMDA7Ci0JCQllbHNlIGNlbnR1cmllcyA9
IDIsIHJlbSAtPSAyMDA7CisJCQlpZiAocmVtID49IDMwMCkKKwkJCQljZW50dXJpZXMgPSAzLCBy
ZW0gLT0gMzAwOworCQkJZWxzZQorCQkJCWNlbnR1cmllcyA9IDIsIHJlbSAtPSAyMDA7CiAJCX0g
ZWxzZSB7Ci0JCQlpZiAocmVtID49IDEwMCkgY2VudHVyaWVzID0gMSwgcmVtIC09IDEwMDsKLQkJ
CWVsc2UgY2VudHVyaWVzID0gMDsKKwkJCWlmIChyZW0gPj0gMTAwKQorCQkJCWNlbnR1cmllcyA9
IDEsIHJlbSAtPSAxMDA7CisJCQllbHNlCisJCQkJY2VudHVyaWVzID0gMDsKIAkJfQogCQlpZiAo
IXJlbSkgewogCQkJKmlzX2xlYXAgPSAwOwpkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL3NyYy90aW1lZ20uYyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdt
LmMKaW5kZXggODBlMjUwNmQuLmJkZTQwYjkwIDEwMDY0NAotLS0gYS9saWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL3RpbWVnbS5jCisrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMv
dGltZWdtLmMKQEAgLTgsNiArOCw3IEBAIHRpbWVfdCB0aW1lZ20oc3RydWN0IHRtICp0bSkKIHsK
IAlzdHJ1Y3QgdG0gbmV3OwogCWxvbmcgbG9uZyB0ID0gX190bV90b19zZWNzKHRtKTsKKwogCWlm
IChfX3NlY3NfdG9fdG0odCwgJm5ldykgPCAwKSB7CiAJCWVycm5vID0gRU9WRVJGTE9XOwogCQly
ZXR1cm4gLTE7Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:51:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:51:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Ndh-00056k-SX; Thu, 12 Sep 2019 11:51:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Ndh-00056e-Ap
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:51:53 +0000
X-Inumbo-ID: b4124a6c-d553-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id b4124a6c-d553-11e9-b299-bc764e2007e4;
 Thu, 12 Sep 2019 11:51:49 +0000 (UTC)
IronPort-SDR: B5AtynlTI0NdBJPxUQHMLbWfitPXqSBYBoCSz1534KBYdbrnpjCm9NHBOhthZzxX06HaW1e5d5
 yhbU6OdDiJkw==
IronPort-PHdr: =?us-ascii?q?9a23=3AOFKfDRGTojR1lIpyBNvaXJ1GYnF86YWxBRYc79?=
 =?us-ascii?q?8ds5kLTJ76p8mybnLW6fgltlLVR4KTs6sC17ON9fi9EjBbqdbZ6TZeKcYKD0?=
 =?us-ascii?q?dEwewt3CUYSPafDkP6KPO4JwcbJ+9lEGFfwnegLEJOE9z/bVCB6le77DoVBw?=
 =?us-ascii?q?mtfVEtfre9FYHdldm42P6v8JPPfQpImCC9YbRvJxmqsAndrMYbjZZsJ6or1h?=
 =?us-ascii?q?fEonREdutYyGh1IV6fgwvw6t2/8ZJ+7Shcoe4t+9JFXa7nY6k2ULtUASg8PW?=
 =?us-ascii?q?so/sPrrx7DTQWO5nsYTGoblwdDDhbG4h/nQJr/qzP2ueVh1iaUO832Vq00Vi?=
 =?us-ascii?q?+576h3Uh/oiTwIOCA//WrKl8F/lqNboBampxxi347ZZZyeOfRicq/Be94RWH?=
 =?us-ascii?q?FMVdhNWSNfHoy8bpMPD+sfMuZes4n9vEYFoR+nCQWxGO/j1jpEi3nr1qM4zu?=
 =?us-ascii?q?shCxnL0hE+EdIAsHrar9v7O6kdXu+30KbGwi7Ob+9P2Trn9ITEbh4srPOKUL?=
 =?us-ascii?q?ltccTR004vFwbdg1iOrozlJC+V1uULs2OG6eRgSPqvi3M6oAx2vjevwdwsip?=
 =?us-ascii?q?XIhoIT0FzE8Th5wJ4oJdCjVEF7esSoEINNty6BLYd2WMQiTnhutS0nxLMGvp?=
 =?us-ascii?q?u7czILyJQh3xPfbuGHc5OM4h76UOaRICx3i25/dLK4nRay/k6twfD/WMmsyF?=
 =?us-ascii?q?tGsyVInsTWun0O1xHf8NaLRuV/80u71zuDzx3f5+JHLEwui6bWK4QtzqA/m5?=
 =?us-ascii?q?cTq0jOESv7lUPrh6GMbEok4PKn6+H/b7XjoZ+TKpF7hxnlMqQrhsy/GeM4Mh?=
 =?us-ascii?q?USX2SD+eSzyrnj/UrhTbVUi/05iKjZsJTAKcsHva61GRdV0ps45BqlFTem18?=
 =?us-ascii?q?wUnXgBLF1bZBKKl5XlNl7TLPziDvqyg06gnCl1y/3EJLHsDI3BLn3Zn7fgeb?=
 =?us-ascii?q?Z95VRcyA02zd1H+51UDaoBIO7yWk/3rtDYCgI5MxSpw+v8FNp9zZkSWXqSAq?=
 =?us-ascii?q?CCKq/Sq1iI6vo1I+aQfI8VpCr9K/896v7rjH85n14dfa6y3ZcOdX+3AOpmLF?=
 =?us-ascii?q?udYXf3htcBEHwKvhYlTODwh1yNTzhTa2y1X6Im6TExEJimApvbRoCxnLyB2z?=
 =?us-ascii?q?+2HoNSZm9cF1+DCW3nd4OZVPcWdi2SI9VtnSceWre8TI8h1AyuuRThy7p7M+?=
 =?us-ascii?q?rb5zcUuoj/29hu/eHTiAky+iduA8SH1GHeB11zy10MTjNz9aZzu0F8/X0o/Y?=
 =?us-ascii?q?9ZvssYSowNtqkIGlMkMZfQ+OV8B8r/W0TLd9uOSUuOWcm7DXc4Rcl33scEJV?=
 =?us-ascii?q?x6TZHqxBXC2SutGPoZmqKGALQw87nAxD7hKsA7zGzJnuF1ilggQ8xUcGGrmK?=
 =?us-ascii?q?N73wzSHJLS1VWUkeCtb6tKjwDX82LW5m2VoEBeGCptSbiNCXsYfVfXq5L9+1?=
 =?us-ascii?q?vfZ7S1T6w6OE1bzpjReeNxdtT1gAAeF7/YM9PEbjf0wj/oCA=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DKAQDjMHpdXQPjVY1mGwEBAQEDAQE?=
 =?us-ascii?q?BBwMBAQGBZ4MFA1AgEiqEIYh8iBKbGQkBAQEtDQECAQGEPwKCfjgTAgMJAQE?=
 =?us-ascii?q?FAQEBAQEGBAEGGhYFhV8MgjopAYJnAQUjBGILGAICJgICQxQGAQwGAgEBgx4?=
 =?us-ascii?q?Bgg6rRH8zhUuDMYFJgQwojVA/gREngms+hESDC4JYBJYfligHgiRkBIYZjXA?=
 =?us-ascii?q?hjW6LHI1/mkc4gXkzGoNfCYJFF4hjhUI9AQExAYEFAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2DKAQDjMHpdXQPjVY1mGwEBAQEDAQEBBwMBAQGBZ4MFA?=
 =?us-ascii?q?1AgEiqEIYh8iBKbGQkBAQEtDQECAQGEPwKCfjgTAgMJAQEFAQEBAQEGBAEGG?=
 =?us-ascii?q?hYFhV8MgjopAYJnAQUjBGILGAICJgICQxQGAQwGAgEBgx4Bgg6rRH8zhUuDM?=
 =?us-ascii?q?YFJgQwojVA/gREngms+hESDC4JYBJYfligHgiRkBIYZjXAhjW6LHI1/mkc4g?=
 =?us-ascii?q?XkzGoNfCYJFF4hjhUI9AQExAYEFAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4781818"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 14:51:46 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 296301A600D6;
 Thu, 12 Sep 2019 14:51:46 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id DqexAzxWLlvW; Thu, 12 Sep 2019 14:51:46 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 10ABE1A60130;
 Thu, 12 Sep 2019 14:51:46 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id pa0eBxKG8GN7; Thu, 12 Sep 2019 14:51:45 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.25.245.49])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id ED1A21A600D6;
 Thu, 12 Sep 2019 14:51:45 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190912113140.16071-2-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <52b13f70-804f-d4e6-c18a-7ef396921bb0@cs.pub.ro>
Date: Thu, 12 Sep 2019 14:51:45 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190912113140.16071-2-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 1/3] lib/uktime: Import
 timegm from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgcGF0Y2gsIFZsYWQhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNv
c3Rpbi5sdXB1QGNzLnB1Yi5ybz4KCk9uIDkvMTIvMTkgMjozMSBQTSwgVmxhZC1BbmRyZWkgQsSC
RE9JVSAoNzg2OTIpIHdyb3RlOgo+IENvcGllZCBhcyBpcyBmcm9tIHRoZSBvZmZpY2lhbCBtdXNs
IGdpdCBtaXJyb3IKPiBnaXQ6Ly9naXQubXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0
MGQuCj4gCj4gU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5i
YWRvaXVAc3R1ZC5hY3MudXBiLnJvPgo+IC0tLQo+ICBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQv
aW5jbHVkZS90aW1lLmggICAgICAgfCAxMzggKysrKysrKysrKysrKysrKysrCj4gIC4uLi9tdXNs
LWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYyAgICAgICB8ICAxMCArKwo+ICBsaWIvdWt0
aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jICAgfCAgODIgKysrKysrKysrKysK
PiAgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYyAgIHwgIDI0ICsr
Kwo+ICBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMgfCAgNDcg
KysrKysrCj4gIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZV9pbXBsLmggICAgICB8
ICAxMSArKwo+ICBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jICAgICAgICAg
fCAgMTggKysrCj4gIDcgZmlsZXMgY2hhbmdlZCwgMzMwIGluc2VydGlvbnMoKykKPiAgY3JlYXRl
IG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaAo+ICBj
cmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3Rv
X3NlY3MuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3Ny
Yy9fX3NlY3NfdG9fdG0uYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrdGlt
ZS9tdXNsLWltcG9ydGVkL3NyYy9fX3llYXJfdG9fc2Vjcy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVfaW1wbC5oCj4gIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jCj4gCj4gZGlmZiAt
LWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaCBiL2xpYi91a3Rp
bWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g
aW5kZXggMDAwMDAwMDAuLjY3MmIzZmMzCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91a3Rp
bWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaAo+IEBAIC0wLDAgKzEsMTM4IEBACj4gKyNp
Zm5kZWYJX1RJTUVfSAo+ICsjZGVmaW5lIF9USU1FX0gKPiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1
cwo+ICtleHRlcm4gIkMiIHsKPiArI2VuZGlmCj4gKwo+ICsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4K
PiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICsjZGVmaW5lIE5VTEwgMEwKPiArI2Vsc2UKPiAr
I2RlZmluZSBOVUxMICgodm9pZCopMCkKPiArI2VuZGlmCj4gKwo+ICsKPiArI2RlZmluZSBfX05F
RURfc2l6ZV90Cj4gKyNkZWZpbmUgX19ORUVEX3RpbWVfdAo+ICsjZGVmaW5lIF9fTkVFRF9jbG9j
a190Cj4gKyNkZWZpbmUgX19ORUVEX3N0cnVjdF90aW1lc3BlYwo+ICsKPiArI2lmIGRlZmluZWQo
X1BPU0lYX1NPVVJDRSkgfHwgZGVmaW5lZChfUE9TSVhfQ19TT1VSQ0UpIFwKPiArIHx8IGRlZmlu
ZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkgXAo+ICsgfHwgZGVmaW5l
ZChfQlNEX1NPVVJDRSkKPiArI2RlZmluZSBfX05FRURfY2xvY2tpZF90Cj4gKyNkZWZpbmUgX19O
RUVEX3RpbWVyX3QKPiArI2RlZmluZSBfX05FRURfcGlkX3QKPiArI2RlZmluZSBfX05FRURfbG9j
YWxlX3QKPiArI2VuZGlmCj4gKwo+ICsjaW5jbHVkZSA8Yml0cy9hbGx0eXBlcy5oPgo+ICsKPiAr
I2lmIGRlZmluZWQoX0JTRF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpCj4gKyNkZWZp
bmUgX190bV9nbXRvZmYgdG1fZ210b2ZmCj4gKyNkZWZpbmUgX190bV96b25lIHRtX3pvbmUKPiAr
I2VuZGlmCj4gKwo+ICtzdHJ1Y3QgdG0gewo+ICsJaW50IHRtX3NlYzsKPiArCWludCB0bV9taW47
Cj4gKwlpbnQgdG1faG91cjsKPiArCWludCB0bV9tZGF5Owo+ICsJaW50IHRtX21vbjsKPiArCWlu
dCB0bV95ZWFyOwo+ICsJaW50IHRtX3dkYXk7Cj4gKwlpbnQgdG1feWRheTsKPiArCWludCB0bV9p
c2RzdDsKPiArCWxvbmcgX190bV9nbXRvZmY7Cj4gKwljb25zdCBjaGFyICpfX3RtX3pvbmU7Cj4g
K307Cj4gKwo+ICtjbG9ja190IGNsb2NrICh2b2lkKTsKPiArdGltZV90IHRpbWUgKHRpbWVfdCAq
KTsKPiArZG91YmxlIGRpZmZ0aW1lICh0aW1lX3QsIHRpbWVfdCk7Cj4gK3RpbWVfdCBta3RpbWUg
KHN0cnVjdCB0bSAqKTsKPiArc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0LCBzaXpl
X3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7
Cj4gK3N0cnVjdCB0bSAqZ210aW1lIChjb25zdCB0aW1lX3QgKik7Cj4gK3N0cnVjdCB0bSAqbG9j
YWx0aW1lIChjb25zdCB0aW1lX3QgKik7Cj4gK2NoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0
bSAqKTsKPiArY2hhciAqY3RpbWUgKGNvbnN0IHRpbWVfdCAqKTsKPiAraW50IHRpbWVzcGVjX2dl
dChzdHJ1Y3QgdGltZXNwZWMgKiwgaW50KTsKPiArCj4gKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMg
MTAwMDAwMEwKPiArCj4gKyNkZWZpbmUgVElNRV9VVEMgMQo+ICsKPiArI2lmIGRlZmluZWQoX1BP
U0lYX1NPVVJDRSkgfHwgZGVmaW5lZChfUE9TSVhfQ19TT1VSQ0UpIFwKPiArIHx8IGRlZmluZWQo
X1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkgXAo+ICsgfHwgZGVmaW5lZChf
QlNEX1NPVVJDRSkKPiArCj4gK3NpemVfdCBzdHJmdGltZV9sIChjaGFyICogIF9fcmVzdHJpY3Qs
IHNpemVfdCwgY29uc3QgY2hhciAqICBfX3Jlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdG0gKiAgX19y
ZXN0cmljdCwgbG9jYWxlX3QpOwo+ICsKPiArc3RydWN0IHRtICpnbXRpbWVfciAoY29uc3QgdGlt
ZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwo+ICtzdHJ1Y3QgdG0gKmxv
Y2FsdGltZV9yIChjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmlj
dCk7Cj4gK2NoYXIgKmFzY3RpbWVfciAoY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0LCBjaGFy
ICpfX3Jlc3RyaWN0KTsKPiArY2hhciAqY3RpbWVfciAoY29uc3QgdGltZV90ICosIGNoYXIgKik7
Cj4gKwo+ICt2b2lkIHR6c2V0ICh2b2lkKTsKPiArCj4gK3N0cnVjdCBpdGltZXJzcGVjIHsKPiAr
CXN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKPiArCXN0cnVjdCB0aW1lc3BlYyBpdF92YWx1
ZTsKPiArfTsKPiArCj4gKyNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUUgICAgICAgICAgIDAKPiArI2Rl
ZmluZSBDTE9DS19NT05PVE9OSUMgICAgICAgICAgMQo+ICsjZGVmaW5lIENMT0NLX1BST0NFU1Nf
Q1BVVElNRV9JRCAyCj4gKyNkZWZpbmUgQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQgIDMKPiArI2Rl
ZmluZSBDTE9DS19NT05PVE9OSUNfUkFXICAgICAgNAo+ICsjZGVmaW5lIENMT0NLX1JFQUxUSU1F
X0NPQVJTRSAgICA1Cj4gKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSAgIDYKPiArI2Rl
ZmluZSBDTE9DS19CT09UVElNRSAgICAgICAgICAgNwo+ICsjZGVmaW5lIENMT0NLX1JFQUxUSU1F
X0FMQVJNICAgICA4Cj4gKyNkZWZpbmUgQ0xPQ0tfQk9PVFRJTUVfQUxBUk0gICAgIDkKPiArI2Rl
ZmluZSBDTE9DS19TR0lfQ1lDTEUgICAgICAgICAxMAo+ICsjZGVmaW5lIENMT0NLX1RBSSAgICAg
ICAgICAgICAgIDExCj4gKwo+ICsjZGVmaW5lIFRJTUVSX0FCU1RJTUUgMQo+ICsKPiAraW50IG5h
bm9zbGVlcCAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAr
aW50IGNsb2NrX2dldHJlcyAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7Cj4gK2ludCBj
bG9ja19nZXR0aW1lIChjbG9ja2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAraW50IGNsb2Nr
X3NldHRpbWUgKGNsb2NraWRfdCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICopOwo+ICtpbnQgY2xv
Y2tfbmFub3NsZWVwIChjbG9ja2lkX3QsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0
cnVjdCB0aW1lc3BlYyAqKTsKPiAraW50IGNsb2NrX2dldGNwdWNsb2NraWQgKHBpZF90LCBjbG9j
a2lkX3QgKik7Cj4gKwo+ICtzdHJ1Y3Qgc2lnZXZlbnQ7Cj4gK2ludCB0aW1lcl9jcmVhdGUgKGNs
b2NraWRfdCwgc3RydWN0IHNpZ2V2ZW50ICpfX3Jlc3RyaWN0LCB0aW1lcl90ICpfX3Jlc3RyaWN0
KTsKPiAraW50IHRpbWVyX2RlbGV0ZSAodGltZXJfdCk7Cj4gK2ludCB0aW1lcl9zZXR0aW1lICh0
aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0LCBzdHJ1Y3Qg
aXRpbWVyc3BlYyAqX19yZXN0cmljdCk7Cj4gK2ludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90LCBz
dHJ1Y3QgaXRpbWVyc3BlYyAqKTsKPiAraW50IHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3QpOwo+
ICsKPiArZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKPiArCj4gKyNlbmRpZgo+ICsKPiArCj4gKyNp
ZiBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpIHx8IGRlZmlu
ZWQoX0dOVV9TT1VSQ0UpCj4gK2NoYXIgKnN0cnB0aW1lIChjb25zdCBjaGFyICpfX3Jlc3RyaWN0
LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwo+ICtleHRl
cm4gaW50IGRheWxpZ2h0Owo+ICtleHRlcm4gbG9uZyB0aW1lem9uZTsKPiArZXh0ZXJuIGludCBn
ZXRkYXRlX2VycjsKPiArc3RydWN0IHRtICpnZXRkYXRlIChjb25zdCBjaGFyICopOwo+ICsjZW5k
aWYKPiArCj4gKwo+ICsjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NP
VVJDRSkKPiAraW50IHN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKPiArdGltZV90IHRpbWVnbShzdHJ1
Y3QgdG0gKik7Cj4gKyNlbmRpZgo+ICsKPiArI2lmZGVmIF9fY3BsdXNwbHVzCj4gK30KPiArI2Vu
ZGlmCj4gKwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBv
cnRlZC9zcmMvX19tb250aF90b19zZWNzLmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3Jj
L19fbW9udGhfdG9fc2Vjcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw
MC4uNDMyNDhmYjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9y
dGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYwo+IEBAIC0wLDAgKzEsMTAgQEAKPiAraW50IF9fbW9u
dGhfdG9fc2VjcyhpbnQgbW9udGgsIGludCBpc19sZWFwKQo+ICt7Cj4gKwlzdGF0aWMgY29uc3Qg
aW50IHNlY3NfdGhyb3VnaF9tb250aFtdID0gewo+ICsJCTAsIDMxKjg2NDAwLCA1OSo4NjQwMCwg
OTAqODY0MDAsCj4gKwkJMTIwKjg2NDAwLCAxNTEqODY0MDAsIDE4MSo4NjQwMCwgMjEyKjg2NDAw
LAo+ICsJCTI0Myo4NjQwMCwgMjczKjg2NDAwLCAzMDQqODY0MDAsIDMzNCo4NjQwMCB9Owo+ICsJ
aW50IHQgPSBzZWNzX3Rocm91Z2hfbW9udGhbbW9udGhdOwo+ICsJaWYgKGlzX2xlYXAgJiYgbW9u
dGggPj0gMikgdCs9ODY0MDA7Cj4gKwlyZXR1cm4gdDsKPiArfQo+IGRpZmYgLS1naXQgYS9saWIv
dWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190bS5jIGIvbGliL3VrdGltZS9tdXNs
LWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k
ZXggMDAwMDAwMDAuLjA5M2Q5MDIxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91a3RpbWUv
bXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMKPiBAQCAtMCwwICsxLDgyIEBACj4gKyNp
bmNsdWRlICJ0aW1lX2ltcGwuaCIKPiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICsKPiArLyogMjAw
MC0wMy0wMSAobW9kIDQwMCB5ZWFyLCBpbW1lZGlhdGVseSBhZnRlciBmZWIyOSAqLwo+ICsjZGVm
aW5lIExFQVBPQ0ggKDk0NjY4NDgwMExMICsgODY0MDAqKDMxKzI5KSkKPiArCj4gKyNkZWZpbmUg
REFZU19QRVJfNDAwWSAoMzY1KjQwMCArIDk3KQo+ICsjZGVmaW5lIERBWVNfUEVSXzEwMFkgKDM2
NSoxMDAgKyAyNCkKPiArI2RlZmluZSBEQVlTX1BFUl80WSAgICgzNjUqNCAgICsgMSkKPiArCj4g
K2ludCBfX3NlY3NfdG9fdG0obG9uZyBsb25nIHQsIHN0cnVjdCB0bSAqdG0pCj4gK3sKPiArCWxv
bmcgbG9uZyBkYXlzLCBzZWNzLCB5ZWFyczsKPiArCWludCByZW1kYXlzLCByZW1zZWNzLCByZW15
ZWFyczsKPiArCWludCBxY19jeWNsZXMsIGNfY3ljbGVzLCBxX2N5Y2xlczsKPiArCWludCBtb250
aHM7Cj4gKwlpbnQgd2RheSwgeWRheSwgbGVhcDsKPiArCXN0YXRpYyBjb25zdCBjaGFyIGRheXNf
aW5fbW9udGhbXSA9IHszMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMSwzMSwyOX07Cj4gKwo+
ICsJLyogUmVqZWN0IHRpbWVfdCB2YWx1ZXMgd2hvc2UgeWVhciB3b3VsZCBvdmVyZmxvdyBpbnQg
Ki8KPiArCWlmICh0IDwgSU5UX01JTiAqIDMxNjIyNDAwTEwgfHwgdCA+IElOVF9NQVggKiAzMTYy
MjQwMExMKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwlzZWNzID0gdCAtIExFQVBPQ0g7Cj4gKwlk
YXlzID0gc2VjcyAvIDg2NDAwOwo+ICsJcmVtc2VjcyA9IHNlY3MgJSA4NjQwMDsKPiArCWlmIChy
ZW1zZWNzIDwgMCkgewo+ICsJCXJlbXNlY3MgKz0gODY0MDA7Cj4gKwkJZGF5cy0tOwo+ICsJfQo+
ICsKPiArCXdkYXkgPSAoMytkYXlzKSU3Owo+ICsJaWYgKHdkYXkgPCAwKSB3ZGF5ICs9IDc7Cj4g
Kwo+ICsJcWNfY3ljbGVzID0gZGF5cyAvIERBWVNfUEVSXzQwMFk7Cj4gKwlyZW1kYXlzID0gZGF5
cyAlIERBWVNfUEVSXzQwMFk7Cj4gKwlpZiAocmVtZGF5cyA8IDApIHsKPiArCQlyZW1kYXlzICs9
IERBWVNfUEVSXzQwMFk7Cj4gKwkJcWNfY3ljbGVzLS07Cj4gKwl9Cj4gKwo+ICsJY19jeWNsZXMg
PSByZW1kYXlzIC8gREFZU19QRVJfMTAwWTsKPiArCWlmIChjX2N5Y2xlcyA9PSA0KSBjX2N5Y2xl
cy0tOwo+ICsJcmVtZGF5cyAtPSBjX2N5Y2xlcyAqIERBWVNfUEVSXzEwMFk7Cj4gKwo+ICsJcV9j
eWNsZXMgPSByZW1kYXlzIC8gREFZU19QRVJfNFk7Cj4gKwlpZiAocV9jeWNsZXMgPT0gMjUpIHFf
Y3ljbGVzLS07Cj4gKwlyZW1kYXlzIC09IHFfY3ljbGVzICogREFZU19QRVJfNFk7Cj4gKwo+ICsJ
cmVteWVhcnMgPSByZW1kYXlzIC8gMzY1Owo+ICsJaWYgKHJlbXllYXJzID09IDQpIHJlbXllYXJz
LS07Cj4gKwlyZW1kYXlzIC09IHJlbXllYXJzICogMzY1Owo+ICsKPiArCWxlYXAgPSAhcmVteWVh
cnMgJiYgKHFfY3ljbGVzIHx8ICFjX2N5Y2xlcyk7Cj4gKwl5ZGF5ID0gcmVtZGF5cyArIDMxICsg
MjggKyBsZWFwOwo+ICsJaWYgKHlkYXkgPj0gMzY1K2xlYXApIHlkYXkgLT0gMzY1K2xlYXA7Cj4g
Kwo+ICsJeWVhcnMgPSByZW15ZWFycyArIDQqcV9jeWNsZXMgKyAxMDAqY19jeWNsZXMgKyA0MDBM
TCpxY19jeWNsZXM7Cj4gKwo+ICsJZm9yIChtb250aHM9MDsgZGF5c19pbl9tb250aFttb250aHNd
IDw9IHJlbWRheXM7IG1vbnRocysrKQo+ICsJCXJlbWRheXMgLT0gZGF5c19pbl9tb250aFttb250
aHNdOwo+ICsKPiArCWlmIChtb250aHMgPj0gMTApIHsKPiArCQltb250aHMgLT0gMTI7Cj4gKwkJ
eWVhcnMrKzsKPiArCX0KPiArCj4gKwlpZiAoeWVhcnMrMTAwID4gSU5UX01BWCB8fCB5ZWFycysx
MDAgPCBJTlRfTUlOKQo+ICsJCXJldHVybiAtMTsKPiArCj4gKwl0bS0+dG1feWVhciA9IHllYXJz
ICsgMTAwOwo+ICsJdG0tPnRtX21vbiA9IG1vbnRocyArIDI7Cj4gKwl0bS0+dG1fbWRheSA9IHJl
bWRheXMgKyAxOwo+ICsJdG0tPnRtX3dkYXkgPSB3ZGF5Owo+ICsJdG0tPnRtX3lkYXkgPSB5ZGF5
Owo+ICsKPiArCXRtLT50bV9ob3VyID0gcmVtc2VjcyAvIDM2MDA7Cj4gKwl0bS0+dG1fbWluID0g
cmVtc2VjcyAvIDYwICUgNjA7Cj4gKwl0bS0+dG1fc2VjID0gcmVtc2VjcyAlIDYwOwo+ICsKPiAr
CXJldHVybiAwOwo+ICt9Cj4gZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9z
cmMvX190bV90b19zZWNzLmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9f
c2Vjcy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uYzI5ZmE5ODUK
PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3Rt
X3RvX3NlY3MuYwo+IEBAIC0wLDAgKzEsMjQgQEAKPiArI2luY2x1ZGUgInRpbWVfaW1wbC5oIgo+
ICsKPiArbG9uZyBsb25nIF9fdG1fdG9fc2Vjcyhjb25zdCBzdHJ1Y3QgdG0gKnRtKQo+ICt7Cj4g
KwlpbnQgaXNfbGVhcDsKPiArCWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRtX3llYXI7Cj4gKwlpbnQg
bW9udGggPSB0bS0+dG1fbW9uOwo+ICsJaWYgKG1vbnRoID49IDEyIHx8IG1vbnRoIDwgMCkgewo+
ICsJCWludCBhZGogPSBtb250aCAvIDEyOwo+ICsJCW1vbnRoICU9IDEyOwo+ICsJCWlmIChtb250
aCA8IDApIHsKPiArCQkJYWRqLS07Cj4gKwkJCW1vbnRoICs9IDEyOwo+ICsJCX0KPiArCQl5ZWFy
ICs9IGFkajsKPiArCX0KPiArCWxvbmcgbG9uZyB0ID0gX195ZWFyX3RvX3NlY3MoeWVhciwgJmlz
X2xlYXApOwo+ICsJdCArPSBfX21vbnRoX3RvX3NlY3MobW9udGgsIGlzX2xlYXApOwo+ICsJdCAr
PSA4NjQwMExMICogKHRtLT50bV9tZGF5LTEpOwo+ICsJdCArPSAzNjAwTEwgKiB0bS0+dG1faG91
cjsKPiArCXQgKz0gNjBMTCAqIHRtLT50bV9taW47Cj4gKwl0ICs9IHRtLT50bV9zZWM7Cj4gKwly
ZXR1cm4gdDsKPiArfQo+IGRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3Jj
L19feWVhcl90b19zZWNzLmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90
b19zZWNzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwLi4yODI0ZWM2
ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19f
eWVhcl90b19zZWNzLmMKPiBAQCAtMCwwICsxLDQ3IEBACj4gK2xvbmcgbG9uZyBfX3llYXJfdG9f
c2Vjcyhsb25nIGxvbmcgeWVhciwgaW50ICppc19sZWFwKQo+ICt7Cj4gKwlpZiAoeWVhci0yVUxM
IDw9IDEzNikgewo+ICsJCWludCB5ID0geWVhcjsKPiArCQlpbnQgbGVhcHMgPSAoeS02OCk+PjI7
Cj4gKwkJaWYgKCEoKHktNjgpJjMpKSB7Cj4gKwkJCWxlYXBzLS07Cj4gKwkJCWlmIChpc19sZWFw
KSAqaXNfbGVhcCA9IDE7Cj4gKwkJfSBlbHNlIGlmIChpc19sZWFwKSAqaXNfbGVhcCA9IDA7Cj4g
KwkJcmV0dXJuIDMxNTM2MDAwKih5LTcwKSArIDg2NDAwKmxlYXBzOwo+ICsJfQo+ICsKPiArCWlu
dCBjeWNsZXMsIGNlbnR1cmllcywgbGVhcHMsIHJlbTsKPiArCj4gKwlpZiAoIWlzX2xlYXApIGlz
X2xlYXAgPSAmKGludCl7MH07Cj4gKwljeWNsZXMgPSAoeWVhci0xMDApIC8gNDAwOwo+ICsJcmVt
ID0gKHllYXItMTAwKSAlIDQwMDsKPiArCWlmIChyZW0gPCAwKSB7Cj4gKwkJY3ljbGVzLS07Cj4g
KwkJcmVtICs9IDQwMDsKPiArCX0KPiArCWlmICghcmVtKSB7Cj4gKwkJKmlzX2xlYXAgPSAxOwo+
ICsJCWNlbnR1cmllcyA9IDA7Cj4gKwkJbGVhcHMgPSAwOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAo
cmVtID49IDIwMCkgewo+ICsJCQlpZiAocmVtID49IDMwMCkgY2VudHVyaWVzID0gMywgcmVtIC09
IDMwMDsKPiArCQkJZWxzZSBjZW50dXJpZXMgPSAyLCByZW0gLT0gMjAwOwo+ICsJCX0gZWxzZSB7
Cj4gKwkJCWlmIChyZW0gPj0gMTAwKSBjZW50dXJpZXMgPSAxLCByZW0gLT0gMTAwOwo+ICsJCQll
bHNlIGNlbnR1cmllcyA9IDA7Cj4gKwkJfQo+ICsJCWlmICghcmVtKSB7Cj4gKwkJCSppc19sZWFw
ID0gMDsKPiArCQkJbGVhcHMgPSAwOwo+ICsJCX0gZWxzZSB7Cj4gKwkJCWxlYXBzID0gcmVtIC8g
NFU7Cj4gKwkJCXJlbSAlPSA0VTsKPiArCQkJKmlzX2xlYXAgPSAhcmVtOwo+ICsJCX0KPiArCX0K
PiArCj4gKwlsZWFwcyArPSA5NypjeWNsZXMgKyAyNCpjZW50dXJpZXMgLSAqaXNfbGVhcDsKPiAr
Cj4gKwlyZXR1cm4gKHllYXItMTAwKSAqIDMxNTM2MDAwTEwgKyBsZWFwcyAqIDg2NDAwTEwgKyA5
NDY2ODQ4MDAgKyA4NjQwMDsKPiArfQo+IGRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1w
b3J0ZWQvc3JjL3RpbWVfaW1wbC5oIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1l
X2ltcGwuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLmYyNmQ4MDA1
Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGlt
ZV9pbXBsLmgKPiBAQCAtMCwwICsxLDExIEBACj4gKyNpbmNsdWRlIDx0aW1lLmg+Cj4gKwo+ICto
aWRkZW4gaW50IF9fZGF5c19pbl9tb250aChpbnQsIGludCk7Cj4gK2hpZGRlbiBpbnQgX19tb250
aF90b19zZWNzKGludCwgaW50KTsKPiAraGlkZGVuIGxvbmcgbG9uZyBfX3llYXJfdG9fc2Vjcyhs
b25nIGxvbmcsIGludCAqKTsKPiAraGlkZGVuIGxvbmcgbG9uZyBfX3RtX3RvX3NlY3MoY29uc3Qg
c3RydWN0IHRtICopOwo+ICtoaWRkZW4gY29uc3QgY2hhciAqX190bV90b190em5hbWUoY29uc3Qg
c3RydWN0IHRtICopOwo+ICtoaWRkZW4gaW50IF9fc2Vjc190b190bShsb25nIGxvbmcsIHN0cnVj
dCB0bSAqKTsKPiAraGlkZGVuIHZvaWQgX19zZWNzX3RvX3pvbmUobG9uZyBsb25nLCBpbnQsIGlu
dCAqLCBsb25nICosIGxvbmcgKiwgY29uc3QgY2hhciAqKik7Cj4gK2hpZGRlbiBjb25zdCBjaGFy
ICpfX3N0cmZ0aW1lX2ZtdF8xKGNoYXIgKCopWzEwMF0sIHNpemVfdCAqLCBpbnQsIGNvbnN0IHN0
cnVjdCB0bSAqLCBsb2NhbGVfdCwgaW50KTsKPiArZXh0ZXJuIGhpZGRlbiBjb25zdCBjaGFyIF9f
dXRjW107Cj4gZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdt
LmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jCj4gbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uNGU1OTA3ZDcKPiAtLS0gL2Rldi9udWxsCj4gKysr
IGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYwo+IEBAIC0wLDAgKzEsMTgg
QEAKPiArI2RlZmluZSBfR05VX1NPVVJDRQo+ICsjaW5jbHVkZSAidGltZV9pbXBsLmgiCj4gKyNp
bmNsdWRlIDxlcnJuby5oPgo+ICsKPiArdGltZV90IHRpbWVnbShzdHJ1Y3QgdG0gKnRtKQo+ICt7
Cj4gKwlzdHJ1Y3QgdG0gbmV3Owo+ICsJbG9uZyBsb25nIHQgPSBfX3RtX3RvX3NlY3ModG0pOwo+
ICsJaWYgKF9fc2Vjc190b190bSh0LCAmbmV3KSA8IDApIHsKPiArCQllcnJubyA9IEVPVkVSRkxP
VzsKPiArCQlyZXR1cm4gLTE7Cj4gKwl9Cj4gKwkqdG0gPSBuZXc7Cj4gKwl0bS0+dG1faXNkc3Qg
PSAwOwo+ICsJdG0tPl9fdG1fZ210b2ZmID0gMDsKPiArCXRtLT5fX3RtX3pvbmUgPSBfX3V0YzsK
PiArCXJldHVybiB0Owo+ICt9Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:53:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:53:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8NfF-0005Cv-Cq; Thu, 12 Sep 2019 11:53:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8NfD-0005Cm-Rl
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:53:27 +0000
X-Inumbo-ID: ed470d22-d553-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id ed470d22-d553-11e9-b299-bc764e2007e4;
 Thu, 12 Sep 2019 11:53:25 +0000 (UTC)
IronPort-SDR: qveiZChzCCVrlNS8/uqi3xV5azpcHnY3g1YwdThQ5GGzjAYz+vZ76UV9PrOX4d4ka7WZq4iOiI
 w0Kr+fbA1HbA==
IronPort-PHdr: =?us-ascii?q?9a23=3AIjuJQBDXPzlMRFJQjkmXUyQJP3N1i/DPJgcQr6?=
 =?us-ascii?q?AfoPdwSP37psiwAkXT6L1XgUPTWs2DsrQY0rGQ6/2rBTdIoc7Y9ixbKtoUD1?=
 =?us-ascii?q?5NoP5VtjRoONSCB0z/IayiRA0BN+MGamVY+WqmO1NeAsf0ag6aiHSz6TkPBk?=
 =?us-ascii?q?e3blItdaz6FYHIksu4yf259YHNbAVUnjq9Zq55IAmroQnLucQanIVvJrwtxh?=
 =?us-ascii?q?bJrXdFdOpbzn5sKV6Pghrw/Mi98IN9/yhKp/4t68tMWrjmcqolSrBVEC4oOH?=
 =?us-ascii?q?0v6s3xshnDQwqP5n8CXWgTjxFFHQvL4gzkU5noqif1ufZz1yecPc3tULA7Qi?=
 =?us-ascii?q?+i4LtxSB/pkygIKTg0+3zKh8NqjaJbpBWhpwFjw4PRfYqYOuZycr/bcNgHXm?=
 =?us-ascii?q?dKQNpfWDJdDYO9d4sPDvQOPeBEr4nmulACqQKyCRSwCO/zzzNFgGL9068n3O?=
 =?us-ascii?q?Q7CQzIwRIuH9wOvnrXotv6OqgdXuKpw6fH1jjDc+pW1C3h5ITUfB0so/eBVq?=
 =?us-ascii?q?9wf8rLzkkvEhvIg0uXqYz+IzOV1+INuHWd4ep9TeKvlnMspgZtrTio3ccslo?=
 =?us-ascii?q?jJhoQPxlDA6CV52Js1KMakR05ge9KkCIZQuDqAO4tsRcMvWmdlszs5xL0eoZ?=
 =?us-ascii?q?O3YScHxIk9yxPca/GLaZaE7gzhWeqLLzp0nG9pdbG8ihqo70StyvfwWte73V?=
 =?us-ascii?q?tKtCZInd3Bu3YQ3BLJ8MeHUOFy/kK51DaK0ADc9/9LLFgvlareN54h2rkwlo?=
 =?us-ascii?q?cPsUjbHi/5hkH2jKiOe0U6/+in8eXnYrH8qpCALI94kBn+Mrk1lcClG+Q4NR?=
 =?us-ascii?q?ACX2md+euiyL3u5VD1TbpXgvEskaTUsIrWKdoFqqO7GQNY3J4v6xOlADen1N?=
 =?us-ascii?q?QYk2MHLFVAeB+fk4fpPErOIOz5Dfe5mVislCprx+jbPrD6HprNNWLPkK/8fb?=
 =?us-ascii?q?lm8UJc0g0zwchF551IErEBPO7zWkjpudzdDx85NQ20w+H8CNlky4wRR3yPDb?=
 =?us-ascii?q?GdMK7JtV+I5/kvI/WXZIMPtzfyNf4l6+TpjX8jll8XZbOp0ocPaHCkAvRmJF?=
 =?us-ascii?q?2UYWTogtgbDGgFphAxTOr3h12YTzFTZmy+ULkm6T4mD4KmDJrDS5u2gLydwS?=
 =?us-ascii?q?e0A4daaXpaBVCXC3voap2EVOwWZCKIJc8y2gADAIalQoNk/BeirgL7/JDMAs?=
 =?us-ascii?q?31xxpY6sK9hYI0r7nNkRg+wjVyA96Q0ieHRm1zn34gXCMr0OZ2qlc710+Jl7?=
 =?us-ascii?q?J/1bgQX9lS4fJOSUI2OIDRy8R+CsvuQUTRc9HPT0ypCJ3yBDA3T9UqhtMDfU?=
 =?us-ascii?q?t5M9GjlQzYmTqnBfkSjbPdV7Iu9aeJ9H/qO8d7g1LbzLRp21IhWddOMyuim7?=
 =?us-ascii?q?Zi3wPIQZbUmQODkPD5JuwnwCfR+TLbniK1t0ZCXVs1CP2dUA=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DNAQDjMHpdXQPjVY1mGwEBAQEDAQE?=
 =?us-ascii?q?BBwMBAQGBZ4FugRcDUCASKoQhiHyIEn6YNIFnCQEBASkRAQIBAYFLgnQCgn4?=
 =?us-ascii?q?4EwIDCQEBBQEBAQEBBgQBBhoWBYVfDII6KQGCZwEFI2YLGAICJgICQxQGAQw?=
 =?us-ascii?q?GAgEBglNLAYIOq0SBMoVLgzGBSYEMKIpagnY/gREngjY1PoQJFCeDC4JYBIx?=
 =?us-ascii?q?8iAUbgQOWKAeCJGQEhhmJIoROIYJjQYpKixyNf5pHOIF5MxpzgmwJgkUXFYl?=
 =?us-ascii?q?xgUOCXD0BATEBgQUBAYxMglQBAQ?=
X-IPAS-Result: =?us-ascii?q?A2DNAQDjMHpdXQPjVY1mGwEBAQEDAQEBBwMBAQGBZ4Fug?=
 =?us-ascii?q?RcDUCASKoQhiHyIEn6YNIFnCQEBASkRAQIBAYFLgnQCgn44EwIDCQEBBQEBA?=
 =?us-ascii?q?QEBBgQBBhoWBYVfDII6KQGCZwEFI2YLGAICJgICQxQGAQwGAgEBglNLAYIOq?=
 =?us-ascii?q?0SBMoVLgzGBSYEMKIpagnY/gREngjY1PoQJFCeDC4JYBIx8iAUbgQOWKAeCJ?=
 =?us-ascii?q?GQEhhmJIoROIYJjQYpKixyNf5pHOIF5MxpzgmwJgkUXFYlxgUOCXD0BATEBg?=
 =?us-ascii?q?QUBAYxMglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4781834"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 14:53:24 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2FF2B1A600D6;
 Thu, 12 Sep 2019 14:53:24 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id CdIsQbp970qt; Thu, 12 Sep 2019 14:53:24 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 15BCC1A60130;
 Thu, 12 Sep 2019 14:53:24 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id eI4zg-fJ-CIu; Thu, 12 Sep 2019 14:53:24 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.25.245.49])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id F156D1A600D6;
 Thu, 12 Sep 2019 14:53:23 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190912113140.16071-3-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <9873fd90-e923-834e-55e2-8418665c36a8@cs.pub.ro>
Date: Thu, 12 Sep 2019 14:53:23 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190912113140.16071-3-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 2/3] lib/uktime: Adapt timegm
 implementation to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgcGF0Y2gsIFZsYWQhIFdlIGFsc28gbmVlZCB0byBhZGQKLUkkKExJQlVL
VElNRV9CQVNFKS9tdXNsLWltcG9ydGVkL2luY2x1ZGUgdG8gZ2xvYmFsIGluY2x1ZGUgcGF0aHMs
IGJ1dAp3ZSBjYW4gZG8gdGhhdCBvbiB1cHN0cmVhbWluZy4KClJldmlld2VkLWJ5OiBDb3N0aW4g
THVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgoKT24gOS8xMi8xOSAyOjMxIFBNLCBWbGFkLUFu
ZHJlaSBCxIJET0lVICg3ODY5Mikgd3JvdGU6Cj4gV2UgZXhjbHVkZSBmcm9tIHVrdGltZS90aW1l
LmggdGhlIGZ1bmN0aW9ucyB0aGF0IGhhdmUgbm90IGJlZW4gaW1wbGVtZW50ZWQgaW4KPiBVbmlr
cmFmdC4gX3RpbWVfdHlwZXMuaCBob2xkcyB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIHR5cGVzIHVz
ZWQKPiBpbiB1a3RpbWUvdGltZS5oCj4gCj4gU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFk
b2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgo+IC0tLQo+ICBsaWIvdWt0
aW1lL01ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgIHwgMTUgKysrKystCj4gIGxpYi91a3Rp
bWUvZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgICAgfCAgMiArLQo+ICBsaWIvdWt0aW1lL2lu
Y2x1ZGUvdWt0aW1lL190aW1lX3R5cGVzLmggIHwgNjIgKysrKysrKysrKysrKysrKysrKysrKysr
Cj4gIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaCAgfCA0MCArKysrKysr
KystLS0tLS0KPiAgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lX2ltcGwuaCB8IDE0
ICsrLS0tLQo+ICBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jICAgIHwgIDIg
Kwo+ICA2IGZpbGVzIGNoYW5nZWQsIDEwOSBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkK
PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a3RpbWUvaW5jbHVkZS91a3RpbWUvX3RpbWVfdHlw
ZXMuaAo+IAo+IGRpZmYgLS1naXQgYS9saWIvdWt0aW1lL01ha2VmaWxlLnVrIGIvbGliL3VrdGlt
ZS9NYWtlZmlsZS51awo+IGluZGV4IDljMWY4YjM1Li4xYmE4M2M4ZiAxMDA2NDQKPiAtLS0gYS9s
aWIvdWt0aW1lL01ha2VmaWxlLnVrCj4gKysrIGIvbGliL3VrdGltZS9NYWtlZmlsZS51awo+IEBA
IC0xLDQgKzEsMTUgQEAKPiAgJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ1a3RpbWUsJChDT05G
SUdfTElCVUtUSU1FKSkpCj4gIAo+IC1DSU5DTFVERVMtJChDT05GSUdfTElCVUtUSU1FKSAgICAr
PSAtSSQoTElCVUtUSU1FX0JBU0UpL2luY2x1ZGUKPiAtQ1hYSU5DTFVERVMtJChDT05GSUdfTElC
VUtUSU1FKSAgKz0gLUkkKExJQlVLVElNRV9CQVNFKS9pbmNsdWRlCj4gK0xJQlVLVElNRV9DT01N
T05fSU5DTFVERVMteQkrPSAtSSQoTElCVUtUSU1FX0JBU0UpL2luY2x1ZGUKPiArTElCVUtUSU1F
X0NPTU1PTl9JTkNMVURFUy15CSs9IC1JJChMSUJVS1RJTUVfQkFTRSkvbXVzbC1pbXBvcnRlZC9p
bmNsdWRlCj4gKwo+ICtDSU5DTFVERVMtJChDT05GSUdfTElCVUtUSU1FKSAgICArPSAkKExJQlVL
VElNRV9DT01NT05fSU5DTFVERVMteSkKPiArQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUtUSU1F
KSAgKz0gJChMSUJVS1RJTUVfQ09NTU9OX0lOQ0xVREVTLXkpCj4gKwo+ICtMSUJVS1RJTUVfQ0ZM
QUdTLXkJKz0gLURfVElNRV9IXwo+ICsKPiArTElCVUtUSU1FX1NSQ1MteSArPSAkKExJQlVLVElN
RV9CQVNFKS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYwo+ICtMSUJVS1RJTUVf
U1JDUy15ICs9ICQoTElCVUtUSU1FX0JBU0UpL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vjc190b190
bS5jCj4gK0xJQlVLVElNRV9TUkNTLXkgKz0gJChMSUJVS1RJTUVfQkFTRSkvbXVzbC1pbXBvcnRl
ZC9zcmMvdGltZWdtLmMKPiArTElCVUtUSU1FX1NSQ1MteSArPSAkKExJQlVLVElNRV9CQVNFKS9t
dXNsLWltcG9ydGVkL3NyYy9fX3RtX3RvX3NlY3MuYwo+ICtMSUJVS1RJTUVfU1JDUy15ICs9ICQo
TElCVUtUSU1FX0JBU0UpL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMKPiBkaWZm
IC0tZ2l0IGEvbGliL3VrdGltZS9leHBvcnRzeW1zLnVrIGIvbGliL3VrdGltZS9leHBvcnRzeW1z
LnVrCj4gaW5kZXggYzg2YzNmMzUuLmEwMGQxNjAxIDEwMDY0NAo+IC0tLSBhL2xpYi91a3RpbWUv
ZXhwb3J0c3ltcy51awo+ICsrKyBiL2xpYi91a3RpbWUvZXhwb3J0c3ltcy51awo+IEBAIC0xICsx
IEBACj4gLW5vbmUKPiBcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKPiArdGltZWdtCj4gZGlm
ZiAtLWdpdCBhL2xpYi91a3RpbWUvaW5jbHVkZS91a3RpbWUvX3RpbWVfdHlwZXMuaCBiL2xpYi91
a3RpbWUvaW5jbHVkZS91a3RpbWUvX3RpbWVfdHlwZXMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0
Cj4gaW5kZXggMDAwMDAwMDAuLjdhZmQzYzdjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi91
a3RpbWUvaW5jbHVkZS91a3RpbWUvX3RpbWVfdHlwZXMuaAo+IEBAIC0wLDAgKzEsNjIgQEAKPiAr
LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLwo+ICsvKgo+ICsgKiBB
dXRob3JzOiBGbG9yaWFuIFNjaG1pZHQgPGZsb3JpYW4uc2NobWlkdEBuZWNsYWIuZXU+Cj4gKyAq
Cj4gKyAqIENvcHlyaWdodCAoYykgMjAxOCwgTkVDIExhYnMgRXVyb3BlLCBORUMgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVy
c2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAq
Cj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAo+ICsgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArICogYXJlIG1ldDoKPiArICoKPiAr
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+ICsgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCj4gKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArICogICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KPiArICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KPiArICoKPiArICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKPiArICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RQo+ICsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCj4gKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
Uwo+ICsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ICsgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRQo+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPiArICoKPiArICog
VEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4K
PiArICovCj4gKwo+ICsvKiBUaGlzIGhlYWRlciBkb2VzIGJ5IGRlc2lnbiBub3QgaGF2ZSBpbmNs
dWRlIGd1YXJkcywgc28gdGhhdCBpdCBjYW4gYmUKPiArICogaW5jbHVkZWQgZnJvbSBtdWx0aXBs
ZSBmaWxlcy4gVGhlIF9fTkVFRF94IG1hY3JvcyBpbnN0ZWFkIG1ha2Ugc3VyZSB0aGF0Cj4gKyAq
IG9ubHkgdGhvc2UgZGVmaW5pdGlvbnMgYXJlIGluY2x1ZGVkIHRoYXQgYXJlIHJlcXVpcmVkIGJ5
IHRoYXQgc3BlY2lmaWMKPiArICogZmlsZSwgYW5kIG9ubHkgaWYgdGhleSBoYXZlbid0IGJlZW4g
ZGVmaW5lZCBvbiBhIHByZXZpb3VzIHBhc3MgdGhyb3VnaAo+ICsgKiB0aGlzIGZpbGUuCj4gKyAq
Lwo+ICsKPiArI2luY2x1ZGUgPHVrL2FyY2gvdHlwZXMuaD4KPiArCj4gKyNpZiAoZGVmaW5lZCBf
X05FRURfY2xvY2tpZF90ICYmICFkZWZpbmVkIF9fREVGSU5FRF9jbG9ja2lkX3QpCj4gK3R5cGVk
ZWYgaW50IGNsb2NraWRfdDsKPiArI2RlZmluZSBfX0RFRklORURfY2xvY2tpZF90Cj4gKyNlbmRp
Zgo+ICsKPiArI2lmIChkZWZpbmVkIF9fTkVFRF90aW1lX3QgJiYgIWRlZmluZWQgX19ERUZJTkVE
X3RpbWVfdCkKPiArdHlwZWRlZiBsb25nIHRpbWVfdDsKPiArI2RlZmluZSBfX0RFRklORURfdGlt
ZV90Cj4gKyNlbmRpZgo+ICsKPiArI2lmIChkZWZpbmVkIF9fTkVFRF9zdHJ1Y3RfdGltZXNwZWMg
JiYJCQlcCj4gKwkJIWRlZmluZWQgX19ERUZJTkVEX3N0cnVjdF90aW1lc3BlYykKPiArc3RydWN0
IHRpbWVzcGVjIHsKPiArCXRpbWVfdAl0dl9zZWM7Cj4gKwlsb25nCXR2X25zZWM7Cj4gK307Cj4g
KyNkZWZpbmUgX19ERUZJTkVEX3N0cnVjdF90aW1lc3BlYwo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0
IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZS5oIGIvbGliL3VrdGltZS9t
dXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZS5oCj4gaW5kZXggNjcyYjNmYzMuLmE3NzkyNmMxIDEw
MDY0NAo+IC0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaAo+ICsr
KyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaAo+IEBAIC0xLDE4ICsx
LDE3IEBACj4gLSNpZm5kZWYJX1RJTUVfSAo+IC0jZGVmaW5lIF9USU1FX0gKPiArI2lmbmRlZiBf
VUtUSU1FX1RJTUVfSAo+ICsjZGVmaW5lIF9VS1RJTUVfVElNRV9ICj4gIAo+IC0jaWZkZWYgX19j
cGx1c3BsdXMKPiAtZXh0ZXJuICJDIiB7Cj4gLSNlbmRpZgo+ICsjaW5jbHVkZSA8dWsvY29uZmln
Lmg+Cj4gIAo+IC0jaW5jbHVkZSA8ZmVhdHVyZXMuaD4KPiArI2lmZGVmIENPTkZJR19MSUJOT0xJ
QkMKPiArI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4gKyNlbmRpZgo+ICAKPiAgI2lmZGVmIF9fY3Bs
dXNwbHVzCj4gLSNkZWZpbmUgTlVMTCAwTAo+IC0jZWxzZQo+IC0jZGVmaW5lIE5VTEwgKCh2b2lk
KikwKQo+ICtleHRlcm4gIkMiIHsKPiAgI2VuZGlmCj4gIAo+ICsjZGVmaW5lIF9HTlVfU09VUkNF
Cj4gIAo+ICAjZGVmaW5lIF9fTkVFRF9zaXplX3QKPiAgI2RlZmluZSBfX05FRURfdGltZV90Cj4g
QEAgLTI4LDcgKzI3LDEyIEBAIGV4dGVybiAiQyIgewo+ICAjZGVmaW5lIF9fTkVFRF9sb2NhbGVf
dAo+ICAjZW5kaWYKPiAgCj4gLSNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+Cj4gKyNpbmNsdWRl
IDx1a3RpbWUvX3RpbWVfdHlwZXMuaD4KPiArI2lmZGVmIENPTkZJR19MSUJOT0xJQkMKPiArI2lu
Y2x1ZGUgPG5vbGliYy1pbnRlcm5hbC9zaGFyZWRkZWZzLmg+Cj4gKyNlbHNlCj4gKyNpbmNsdWRl
IDxzdGRkZWYuaD4KPiArI2VuZGlmCj4gIAo+ICAjaWYgZGVmaW5lZChfQlNEX1NPVVJDRSkgfHwg
ZGVmaW5lZChfR05VX1NPVVJDRSkKPiAgI2RlZmluZSBfX3RtX2dtdG9mZiB0bV9nbXRvZmYKPiBA
QCAtNDksNiArNTMsNyBAQCBzdHJ1Y3QgdG0gewo+ICAJY29uc3QgY2hhciAqX190bV96b25lOwo+
ICB9Owo+ICAKPiArI2lmIDAKPiAgY2xvY2tfdCBjbG9jayAodm9pZCk7Cj4gIHRpbWVfdCB0aW1l
ICh0aW1lX3QgKik7Cj4gIGRvdWJsZSBkaWZmdGltZSAodGltZV90LCB0aW1lX3QpOwo+IEBAIC01
OSw2ICs2NCw3IEBAIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChjb25zdCB0aW1lX3QgKik7Cj4gIGNo
YXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqKTsKPiAgY2hhciAqY3RpbWUgKGNvbnN0IHRp
bWVfdCAqKTsKPiAgaW50IHRpbWVzcGVjX2dldChzdHJ1Y3QgdGltZXNwZWMgKiwgaW50KTsKPiAr
I2VuZGlmCj4gIAo+ICAjZGVmaW5lIENMT0NLU19QRVJfU0VDIDEwMDAwMDBMCj4gIAo+IEBAIC02
OCw2ICs3NCw3IEBAIGludCB0aW1lc3BlY19nZXQoc3RydWN0IHRpbWVzcGVjICosIGludCk7Cj4g
ICB8fCBkZWZpbmVkKF9YT1BFTl9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpIFwKPiAg
IHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCj4gIAo+ICsjaWYgMAo+ICBzaXplX3Qgc3RyZnRpbWVf
bCAoY2hhciAqICBfX3Jlc3RyaWN0LCBzaXplX3QsIGNvbnN0IGNoYXIgKiAgX19yZXN0cmljdCwg
Y29uc3Qgc3RydWN0IHRtICogIF9fcmVzdHJpY3QsIGxvY2FsZV90KTsKPiAgCj4gIHN0cnVjdCB0
bSAqZ210aW1lX3IgKGNvbnN0IHRpbWVfdCAqX19yZXN0cmljdCwgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0KTsKPiBAQCAtNzYsNiArODMsNyBAQCBjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0
bSAqX19yZXN0cmljdCwgY2hhciAqX19yZXN0cmljdCk7Cj4gIGNoYXIgKmN0aW1lX3IgKGNvbnN0
IHRpbWVfdCAqLCBjaGFyICopOwo+ICAKPiAgdm9pZCB0enNldCAodm9pZCk7Cj4gKyNlbmRpZgo+
ICAKPiAgc3RydWN0IGl0aW1lcnNwZWMgewo+ICAJc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFs
Owo+IEBAIC05OCw4ICsxMDYsMTEgQEAgc3RydWN0IGl0aW1lcnNwZWMgewo+ICAjZGVmaW5lIFRJ
TUVSX0FCU1RJTUUgMQo+ICAKPiAgaW50IG5hbm9zbGVlcCAoY29uc3Qgc3RydWN0IHRpbWVzcGVj
ICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKPiArI2lmIDAKPiAgaW50IGNsb2NrX2dldHJlcyAoY2xv
Y2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7Cj4gKyNlbmRpZgo+ICBpbnQgY2xvY2tfZ2V0dGlt
ZSAoY2xvY2tpZF90LCBzdHJ1Y3QgdGltZXNwZWMgKik7Cj4gKyNpZiAwCj4gIGludCBjbG9ja19z
ZXR0aW1lIChjbG9ja2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAgaW50IGNsb2Nr
X25hbm9zbGVlcCAoY2xvY2tpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1
Y3QgdGltZXNwZWMgKik7Cj4gIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCwgY2xvY2tp
ZF90ICopOwo+IEBAIC0xMTIsMTAgKzEyMywxMCBAQCBpbnQgdGltZXJfZ2V0dGltZSAodGltZXJf
dCwgc3RydWN0IGl0aW1lcnNwZWMgKik7Cj4gIGludCB0aW1lcl9nZXRvdmVycnVuICh0aW1lcl90
KTsKPiAgCj4gIGV4dGVybiBjaGFyICp0em5hbWVbMl07Cj4gLQo+ICsjZW5kaWYKPiAgI2VuZGlm
Cj4gIAo+IC0KPiArI2lmIDAKPiAgI2lmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5l
ZChfQlNEX1NPVVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkKPiAgY2hhciAqc3RycHRpbWUg
KGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHN0cnVjdCB0
bSAqX19yZXN0cmljdCk7Cj4gIGV4dGVybiBpbnQgZGF5bGlnaHQ7Cj4gQEAgLTEyMywxMCArMTM0
LDEyIEBAIGV4dGVybiBsb25nIHRpbWV6b25lOwo+ICBleHRlcm4gaW50IGdldGRhdGVfZXJyOwo+
ICBzdHJ1Y3QgdG0gKmdldGRhdGUgKGNvbnN0IGNoYXIgKik7Cj4gICNlbmRpZgo+IC0KPiArI2Vu
ZGlmCj4gIAo+ICAjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJD
RSkKPiArI2lmIDAKPiAgaW50IHN0aW1lKGNvbnN0IHRpbWVfdCAqKTsKPiArI2VuZGlmCj4gIHRp
bWVfdCB0aW1lZ20oc3RydWN0IHRtICopOwo+ICAjZW5kaWYKPiAgCj4gQEAgLTEzNCw1ICsxNDcs
NCBAQCB0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSAqKTsKPiAgfQo+ICAjZW5kaWYKPiAgCj4gLQo+
ICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1l
X2ltcGwuaCBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZV9pbXBsLmgKPiBpbmRl
eCBmMjZkODAwNS4uMGFmMDYzZWQgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrdGltZS9tdXNsLWltcG9y
dGVkL3NyYy90aW1lX2ltcGwuaAo+ICsrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMv
dGltZV9pbXBsLmgKPiBAQCAtMSwxMSArMSw3IEBACj4gICNpbmNsdWRlIDx0aW1lLmg+Cj4gIAo+
IC1oaWRkZW4gaW50IF9fZGF5c19pbl9tb250aChpbnQsIGludCk7Cj4gLWhpZGRlbiBpbnQgX19t
b250aF90b19zZWNzKGludCwgaW50KTsKPiAtaGlkZGVuIGxvbmcgbG9uZyBfX3llYXJfdG9fc2Vj
cyhsb25nIGxvbmcsIGludCAqKTsKPiAtaGlkZGVuIGxvbmcgbG9uZyBfX3RtX3RvX3NlY3MoY29u
c3Qgc3RydWN0IHRtICopOwo+IC1oaWRkZW4gY29uc3QgY2hhciAqX190bV90b190em5hbWUoY29u
c3Qgc3RydWN0IHRtICopOwo+IC1oaWRkZW4gaW50IF9fc2Vjc190b190bShsb25nIGxvbmcsIHN0
cnVjdCB0bSAqKTsKPiAtaGlkZGVuIHZvaWQgX19zZWNzX3RvX3pvbmUobG9uZyBsb25nLCBpbnQs
IGludCAqLCBsb25nICosIGxvbmcgKiwgY29uc3QgY2hhciAqKik7Cj4gLWhpZGRlbiBjb25zdCBj
aGFyICpfX3N0cmZ0aW1lX2ZtdF8xKGNoYXIgKCopWzEwMF0sIHNpemVfdCAqLCBpbnQsIGNvbnN0
IHN0cnVjdCB0bSAqLCBsb2NhbGVfdCwgaW50KTsKPiAtZXh0ZXJuIGhpZGRlbiBjb25zdCBjaGFy
IF9fdXRjW107Cj4gK2ludCBfX21vbnRoX3RvX3NlY3MoaW50LCBpbnQpOwo+ICtsb25nIGxvbmcg
X195ZWFyX3RvX3NlY3MobG9uZyBsb25nLCBpbnQgKik7Cj4gK2xvbmcgbG9uZyBfX3RtX3RvX3Nl
Y3MoY29uc3Qgc3RydWN0IHRtICopOwo+ICtpbnQgX19zZWNzX3RvX3RtKGxvbmcgbG9uZywgc3Ry
dWN0IHRtICopOwo+ICtleHRlcm4gY29uc3QgY2hhciBfX3V0Y1tdOwo+IGRpZmYgLS1naXQgYS9s
aWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jIGIvbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL3NyYy90aW1lZ20uYwo+IGluZGV4IDRlNTkwN2Q3Li44MGUyNTA2ZCAxMDA2NDQKPiAt
LS0gYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3RpbWVnbS5jCj4gKysrIGIvbGliL3Vr
dGltZS9tdXNsLWltcG9ydGVkL3NyYy90aW1lZ20uYwo+IEBAIC0yLDYgKzIsOCBAQAo+ICAjaW5j
bHVkZSAidGltZV9pbXBsLmgiCj4gICNpbmNsdWRlIDxlcnJuby5oPgo+ICAKPiArY29uc3QgY2hh
ciBfX3V0Y1tdID0gIlVUQyI7Cj4gKwo+ICB0aW1lX3QgdGltZWdtKHN0cnVjdCB0bSAqdG0pCj4g
IHsKPiAgCXN0cnVjdCB0bSBuZXc7Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:53:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:53:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Nfe-0005EJ-Ff; Thu, 12 Sep 2019 11:53:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Nfd-0005ED-HY
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:53:53 +0000
X-Inumbo-ID: fb1644ae-d553-11e9-9597-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id fb1644ae-d553-11e9-9597-12813bfff9fa;
 Thu, 12 Sep 2019 11:53:49 +0000 (UTC)
IronPort-SDR: Jek528K4fdYULfvhnpvq6694b5aaA+k+iIAWYcPyYBqxpPb71Pyj0/yp3vfTKTdNZlLHBDAaNx
 vME6UlTPX4pQ==
IronPort-PHdr: =?us-ascii?q?9a23=3ATSop2B1buiG+Zle+smDT+DRfVm0co7zxezQtwd?=
 =?us-ascii?q?8ZsesWK/jxwZ3uMQTl6Ol3ixeRBMOHsqkC07ed7/uoGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF+JqsxxR?=
 =?us-ascii?q?fErXVFcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAZt4RW3?=
 =?us-ascii?q?ZPUdhNWCxAGoO8bpUAD+wdPeZDsoLxo0ICoQaiCQWwAe/izCJDiH3r0q0gy+?=
 =?us-ascii?q?kvDB/I3AIgEdwNvnrbotr6O6UOXu6616TI0SzDYulK1Tvh5oXFcBYsquyMU7?=
 =?us-ascii?q?JqdsrRzFEiGh3CjlWLtYzlPjWV3fkLvWiG9+pgSP+khmk7pAF2uTiv2sYsio?=
 =?us-ascii?q?/TioIR11DE7Th5zZ0pKt2jUkJ7ecOkH4BKuyGAMIt7W8UvSHxrtiYi0rAKpJ?=
 =?us-ascii?q?G2cDUQxJkkxxPTceKLf5aK7x75WuudOSp0iXFmdb6lmRq/8VKsxvPzW8S0yl?=
 =?us-ascii?q?pHoS5In9/RvX4XzRPT8NKISv5l80ek3jaAyh7c5/lfIUAxiarbM5khwqMslp?=
 =?us-ascii?q?YLsUTMACv2mELuga+Ic0Ur4Omo6+D9brr6vZ+QLZd0ihzlPag0gMy/Bvw0Mg?=
 =?us-ascii?q?kIX2eF5eSxzKDv8ELkTLlQjfA7krPVvI7EKckZvKK0DRdZ0oM55Ba+Czem3s?=
 =?us-ascii?q?4YnX4CLF9dZB2HiJPpO03PIPD+F/u/h0mskC92x/3dIrLhGY/BLmDekLj6Z7?=
 =?us-ascii?q?p98UlcxBIpzd9D/5JUFq0BIPXrV0/0tdzYCB45Mwuvw+r+FdpyyJ0eVnyLAq?=
 =?us-ascii?q?KCNKPSsESI5v40I+WWa44apjD9J+Ii5/70gn8zgUUdcrWx3ZsLdHC4GexrI1?=
 =?us-ascii?q?udYXX2n9gOCX0FvgwjQ+zwllKCUCRfaG2oUK0h4TE7CZ+mAJzYRoCxnbyOwT?=
 =?us-ascii?q?23EYdKaWBdEFyMDG/oeJ6eV/cWbyLBavNmxwIAXLTkYoktzxyvgyVR551GE9?=
 =?us-ascii?q?2UpX1G5MiinIxr4+Tfohg0+SZ5DoKX2m2KTnxchX8VS3k/17s5vFR3jE2Eh+?=
 =?us-ascii?q?wwyflZE91U/LZFXxk3MbbYzvdmEJbiVwSHec2GAh7yR9SgADYqC9483dIKS0?=
 =?us-ascii?q?J8AMm5yADO2WytGbBDxJKRA5lh2aXHw3n3b+Jg02uOgKImlEUnRI1LKHW7rq?=
 =?us-ascii?q?VksRDODcjTlBPKxO6Raa0A0XuVpy+4xm2UsRQdCVYoXA=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CrAADjMHpdXQPjVY1mGgEBAQEBAgE?=
 =?us-ascii?q?BAQEHAgEBAQGBZ4MIUCASKoQhiHyHbSWbGQkBAQE6AQIBAYQ/AoJ+OBMCAwk?=
 =?us-ascii?q?BAQUBAQEBAQYEAQYaFgWFa4I6KQGCZwEFIwRiCxgCAiYCAkMUBgEMBgIBAYM?=
 =?us-ascii?q?egg+rRH8zhUuDMYFJgQwojVA/gREnDIJfPoEEAYM/gwuCWASMXIglgR6WKAe?=
 =?us-ascii?q?CJGQElAkhjW6LHI1/mkc4gXkzGoNfgk4MCxWOED0BATEBgQUBAY8gAQE?=
X-IPAS-Result: =?us-ascii?q?A2CrAADjMHpdXQPjVY1mGgEBAQEBAgEBAQEHAgEBAQGBZ?=
 =?us-ascii?q?4MIUCASKoQhiHyHbSWbGQkBAQE6AQIBAYQ/AoJ+OBMCAwkBAQUBAQEBAQYEA?=
 =?us-ascii?q?QYaFgWFa4I6KQGCZwEFIwRiCxgCAiYCAkMUBgEMBgIBAYMegg+rRH8zhUuDM?=
 =?us-ascii?q?YFJgQwojVA/gREnDIJfPoEEAYM/gwuCWASMXIglgR6WKAeCJGQElAkhjW6LH?=
 =?us-ascii?q?I1/mkc4gXkzGoNfgk4MCxWOED0BATEBgQUBAY8gAQE?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4781839"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 14:53:47 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B06361A600D6;
 Thu, 12 Sep 2019 14:53:47 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id VNbMUpHk_Vs7; Thu, 12 Sep 2019 14:53:47 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9405A1A60130;
 Thu, 12 Sep 2019 14:53:47 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id j4sX27r2awxY; Thu, 12 Sep 2019 14:53:47 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.25.245.49])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 7BA441A600D6;
 Thu, 12 Sep 2019 14:53:47 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190912113140.16071-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <20190912113140.16071-4-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <757aaf3b-e864-2841-4fc0-1a0cabce48a6@cs.pub.ro>
Date: Thu, 12 Sep 2019 14:53:47 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190912113140.16071-4-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 3/3] lib/uktime: Fix
 checkpath errors for timegm
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgcGF0Y2gsIFZsYWQhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNv
c3Rpbi5sdXB1QGNzLnB1Yi5ybz4KCk9uIDkvMTIvMTkgMjozMSBQTSwgVmxhZC1BbmRyZWkgQsSC
RE9JVSAoNzg2OTIpIHdyb3RlOgo+IFdlIGZpeCB0aGUgY2hlY2twYXRoIGVycm9ycyBvZiB0aGUg
aW1wb3J0ZWQgZmlsZXMuIFdlIG9taXQgdGhlCj4gImZ1bmN0aW9uIGRlZmluaXRpb24gYXJndW1l
bnQgKiBzaG91bGQgYWxzbyBoYXZlIGFuIGlkZW50aWZpZXIgbmFtZSIKPiB3YXJuaW5ncyBzaW5j
ZSB0aGUgZnVuY3Rpb25zIGFyZSBjb21tZW50ZWQgb3V0Lgo+IAo+IFNpZ25lZC1vZmYtYnk6IFZs
YWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KPiAt
LS0KPiAgbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUvdGltZS5oICAgICAgIHwgNTYg
KysrKysrKysrLS0tLS0tLS0tLQo+ICAuLi4vbXVzbC1pbXBvcnRlZC9zcmMvX19tb250aF90b19z
ZWNzLmMgICAgICAgfCAgNCArLQo+ICBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fc2Vj
c190b190bS5jICAgfCAgNCArLQo+ICBsaWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1f
dG9fc2Vjcy5jICAgfCAgMyArCj4gIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX195ZWFy
X3RvX3NlY3MuYyB8IDIyICsrKysrLS0tCj4gIGxpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMv
dGltZWdtLmMgICAgICAgICB8ICAxICsKPiAgNiBmaWxlcyBjaGFuZ2VkLCA1MiBpbnNlcnRpb25z
KCspLCAzOCBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvbGliL3VrdGltZS9tdXNsLWlt
cG9ydGVkL2luY2x1ZGUvdGltZS5oIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL2luY2x1ZGUv
dGltZS5oCj4gaW5kZXggYTc3OTI2YzEuLmIzNGIwZjMwIDEwMDY0NAo+IC0tLSBhL2xpYi91a3Rp
bWUvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3RpbWUuaAo+ICsrKyBiL2xpYi91a3RpbWUvbXVzbC1p
bXBvcnRlZC9pbmNsdWRlL3RpbWUuaAo+IEBAIC01NCwxNSArNTQsMTUgQEAgc3RydWN0IHRtIHsK
PiAgfTsKPiAgCj4gICNpZiAwCj4gLWNsb2NrX3QgY2xvY2sgKHZvaWQpOwo+IC10aW1lX3QgdGlt
ZSAodGltZV90ICopOwo+IC1kb3VibGUgZGlmZnRpbWUgKHRpbWVfdCwgdGltZV90KTsKPiAtdGlt
ZV90IG1rdGltZSAoc3RydWN0IHRtICopOwo+IC1zaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVz
dHJpY3QsIHNpemVfdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwgY29uc3Qgc3RydWN0IHRtICpf
X3Jlc3RyaWN0KTsKPiAtc3RydWN0IHRtICpnbXRpbWUgKGNvbnN0IHRpbWVfdCAqKTsKPiAtc3Ry
dWN0IHRtICpsb2NhbHRpbWUgKGNvbnN0IHRpbWVfdCAqKTsKPiAtY2hhciAqYXNjdGltZSAoY29u
c3Qgc3RydWN0IHRtICopOwo+IC1jaGFyICpjdGltZSAoY29uc3QgdGltZV90ICopOwo+ICtjbG9j
a190IGNsb2NrKHZvaWQpOwo+ICt0aW1lX3QgdGltZSh0aW1lX3QgKik7Cj4gK2RvdWJsZSBkaWZm
dGltZSh0aW1lX3QsIHRpbWVfdCk7Cj4gK3RpbWVfdCBta3RpbWUoc3RydWN0IHRtICopOwo+ICtz
aXplX3Qgc3RyZnRpbWUoY2hhciAqX19yZXN0cmljdCwgc2l6ZV90LCBjb25zdCBjaGFyICpfX3Jl
c3RyaWN0LCBjb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwo+ICtzdHJ1Y3QgdG0gKmdtdGlt
ZShjb25zdCB0aW1lX3QgKik7Cj4gK3N0cnVjdCB0bSAqbG9jYWx0aW1lKGNvbnN0IHRpbWVfdCAq
KTsKPiArY2hhciAqYXNjdGltZShjb25zdCBzdHJ1Y3QgdG0gKik7Cj4gK2NoYXIgKmN0aW1lKGNv
bnN0IHRpbWVfdCAqKTsKPiAgaW50IHRpbWVzcGVjX2dldChzdHJ1Y3QgdGltZXNwZWMgKiwgaW50
KTsKPiAgI2VuZGlmCj4gIAo+IEBAIC03NSwxNCArNzUsMTQgQEAgaW50IHRpbWVzcGVjX2dldChz
dHJ1Y3QgdGltZXNwZWMgKiwgaW50KTsKPiAgIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpCj4gIAo+
ICAjaWYgMAo+IC1zaXplX3Qgc3RyZnRpbWVfbCAoY2hhciAqICBfX3Jlc3RyaWN0LCBzaXplX3Qs
IGNvbnN0IGNoYXIgKiAgX19yZXN0cmljdCwgY29uc3Qgc3RydWN0IHRtICogIF9fcmVzdHJpY3Qs
IGxvY2FsZV90KTsKPiArc2l6ZV90IHN0cmZ0aW1lX2woY2hhciAqX19yZXN0cmljdCwgc2l6ZV90
LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LCBjb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QsIGxv
Y2FsZV90KTsKPiAgCj4gLXN0cnVjdCB0bSAqZ210aW1lX3IgKGNvbnN0IHRpbWVfdCAqX19yZXN0
cmljdCwgc3RydWN0IHRtICpfX3Jlc3RyaWN0KTsKPiAtc3RydWN0IHRtICpsb2NhbHRpbWVfciAo
Y29uc3QgdGltZV90ICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QpOwo+IC1jaGFy
ICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCwgY2hhciAqX19yZXN0cmlj
dCk7Cj4gLWNoYXIgKmN0aW1lX3IgKGNvbnN0IHRpbWVfdCAqLCBjaGFyICopOwo+ICtzdHJ1Y3Qg
dG0gKmdtdGltZV9yKGNvbnN0IHRpbWVfdCAqX19yZXN0cmljdCwgc3RydWN0IHRtICpfX3Jlc3Ry
aWN0KTsKPiArc3RydWN0IHRtICpsb2NhbHRpbWVfcihjb25zdCB0aW1lX3QgKl9fcmVzdHJpY3Qs
IHN0cnVjdCB0bSAqX19yZXN0cmljdCk7Cj4gK2NoYXIgKmFzY3RpbWVfcihjb25zdCBzdHJ1Y3Qg
dG0gKl9fcmVzdHJpY3QsIGNoYXIgKl9fcmVzdHJpY3QpOwo+ICtjaGFyICpjdGltZV9yKGNvbnN0
IHRpbWVfdCAqLCBjaGFyICopOwo+ICAKPiAtdm9pZCB0enNldCAodm9pZCk7Cj4gK3ZvaWQgdHpz
ZXQodm9pZCk7Cj4gICNlbmRpZgo+ICAKPiAgc3RydWN0IGl0aW1lcnNwZWMgewo+IEBAIC0xMDUs
MjIgKzEwNSwyMiBAQCBzdHJ1Y3QgaXRpbWVyc3BlYyB7Cj4gIAo+ICAjZGVmaW5lIFRJTUVSX0FC
U1RJTUUgMQo+ICAKPiAtaW50IG5hbm9zbGVlcCAoY29uc3Qgc3RydWN0IHRpbWVzcGVjICosIHN0
cnVjdCB0aW1lc3BlYyAqKTsKPiAraW50IG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMg
Kiwgc3RydWN0IHRpbWVzcGVjICopOwo+ICAjaWYgMAo+IC1pbnQgY2xvY2tfZ2V0cmVzIChjbG9j
a2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAraW50IGNsb2NrX2dldHJlcyhjbG9ja2lkX3Qs
IHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAgI2VuZGlmCj4gLWludCBjbG9ja19nZXR0aW1lIChjbG9j
a2lkX3QsIHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAraW50IGNsb2NrX2dldHRpbWUoY2xvY2tpZF90
LCBzdHJ1Y3QgdGltZXNwZWMgKik7Cj4gICNpZiAwCj4gLWludCBjbG9ja19zZXR0aW1lIChjbG9j
a2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAtaW50IGNsb2NrX25hbm9zbGVlcCAo
Y2xvY2tpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMg
Kik7Cj4gLWludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCwgY2xvY2tpZF90ICopOwo+ICtp
bnQgY2xvY2tfc2V0dGltZShjbG9ja2lkX3QsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAr
aW50IGNsb2NrX25hbm9zbGVlcChjbG9ja2lkX3QsIGludCwgY29uc3Qgc3RydWN0IHRpbWVzcGVj
ICosIHN0cnVjdCB0aW1lc3BlYyAqKTsKPiAraW50IGNsb2NrX2dldGNwdWNsb2NraWQocGlkX3Qs
IGNsb2NraWRfdCAqKTsKPiAgCj4gIHN0cnVjdCBzaWdldmVudDsKPiAtaW50IHRpbWVyX2NyZWF0
ZSAoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QsIHRpbWVyX3QgKl9fcmVz
dHJpY3QpOwo+IC1pbnQgdGltZXJfZGVsZXRlICh0aW1lcl90KTsKPiAtaW50IHRpbWVyX3NldHRp
bWUgKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QsIHN0
cnVjdCBpdGltZXJzcGVjICpfX3Jlc3RyaWN0KTsKPiAtaW50IHRpbWVyX2dldHRpbWUgKHRpbWVy
X3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwo+IC1pbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJf
dCk7Cj4gK2ludCB0aW1lcl9jcmVhdGUoY2xvY2tpZF90LCBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVz
dHJpY3QsIHRpbWVyX3QgKl9fcmVzdHJpY3QpOwo+ICtpbnQgdGltZXJfZGVsZXRlKHRpbWVyX3Qp
Owo+ICtpbnQgdGltZXJfc2V0dGltZSh0aW1lcl90LCBpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJz
cGVjICpfX3Jlc3RyaWN0LCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCk7Cj4gK2ludCB0
aW1lcl9nZXR0aW1lKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjICopOwo+ICtpbnQgdGltZXJf
Z2V0b3ZlcnJ1bih0aW1lcl90KTsKPiAgCj4gIGV4dGVybiBjaGFyICp0em5hbWVbMl07Cj4gICNl
bmRpZgo+IEBAIC0xMjgsMTEgKzEyOCwxMSBAQCBleHRlcm4gY2hhciAqdHpuYW1lWzJdOwo+ICAK
PiAgI2lmIDAKPiAgI2lmIGRlZmluZWQoX1hPUEVOX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NP
VVJDRSkgfHwgZGVmaW5lZChfR05VX1NPVVJDRSkKPiAtY2hhciAqc3RycHRpbWUgKGNvbnN0IGNo
YXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0
cmljdCk7Cj4gK2NoYXIgKnN0cnB0aW1lKGNvbnN0IGNoYXIgKl9fcmVzdHJpY3QsIGNvbnN0IGNo
YXIgKl9fcmVzdHJpY3QsIHN0cnVjdCB0bSAqX19yZXN0cmljdCk7Cj4gIGV4dGVybiBpbnQgZGF5
bGlnaHQ7Cj4gIGV4dGVybiBsb25nIHRpbWV6b25lOwo+ICBleHRlcm4gaW50IGdldGRhdGVfZXJy
Owo+IC1zdHJ1Y3QgdG0gKmdldGRhdGUgKGNvbnN0IGNoYXIgKik7Cj4gK3N0cnVjdCB0bSAqZ2V0
ZGF0ZShjb25zdCBjaGFyICopOwo+ICAjZW5kaWYKPiAgI2VuZGlmCj4gIAo+IGRpZmYgLS1naXQg
YS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fbW9udGhfdG9fc2Vjcy5jIGIvbGliL3Vr
dGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21vbnRoX3RvX3NlY3MuYwo+IGluZGV4IDQzMjQ4ZmIz
Li5jM2FlNTdmMyAxMDA2NDQKPiAtLS0gYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19f
bW9udGhfdG9fc2Vjcy5jCj4gKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX21v
bnRoX3RvX3NlY3MuYwo+IEBAIC01LDYgKzUsOCBAQCBpbnQgX19tb250aF90b19zZWNzKGludCBt
b250aCwgaW50IGlzX2xlYXApCj4gIAkJMTIwKjg2NDAwLCAxNTEqODY0MDAsIDE4MSo4NjQwMCwg
MjEyKjg2NDAwLAo+ICAJCTI0Myo4NjQwMCwgMjczKjg2NDAwLCAzMDQqODY0MDAsIDMzNCo4NjQw
MCB9Owo+ICAJaW50IHQgPSBzZWNzX3Rocm91Z2hfbW9udGhbbW9udGhdOwo+IC0JaWYgKGlzX2xl
YXAgJiYgbW9udGggPj0gMikgdCs9ODY0MDA7Cj4gKwo+ICsJaWYgKGlzX2xlYXAgJiYgbW9udGgg
Pj0gMikKPiArCQl0ICs9IDg2NDAwOwo+ICAJcmV0dXJuIHQ7Cj4gIH0KPiBkaWZmIC0tZ2l0IGEv
bGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9fdG0uYyBiL2xpYi91a3RpbWUv
bXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMKPiBpbmRleCAwOTNkOTAyMS4uNGE5ZjUz
YTMgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrdGltZS9tdXNsLWltcG9ydGVkL3NyYy9fX3NlY3NfdG9f
dG0uYwo+ICsrKyBiL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX19zZWNzX3RvX3RtLmMK
PiBAQCAtMTUsNyArMTUsNyBAQCBpbnQgX19zZWNzX3RvX3RtKGxvbmcgbG9uZyB0LCBzdHJ1Y3Qg
dG0gKnRtKQo+ICAJaW50IHFjX2N5Y2xlcywgY19jeWNsZXMsIHFfY3ljbGVzOwo+ICAJaW50IG1v
bnRoczsKPiAgCWludCB3ZGF5LCB5ZGF5LCBsZWFwOwo+IC0Jc3RhdGljIGNvbnN0IGNoYXIgZGF5
c19pbl9tb250aFtdID0gezMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxLDMxLDI5fTsKPiAr
CXN0YXRpYyBjb25zdCBjaGFyIGRheXNfaW5fbW9udGhbXSA9IHszMSwgMzAsIDMxLCAzMCwgMzEs
IDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDI5fTsKPiAgCj4gIAkvKiBSZWplY3QgdGltZV90IHZh
bHVlcyB3aG9zZSB5ZWFyIHdvdWxkIG92ZXJmbG93IGludCAqLwo+ICAJaWYgKHQgPCBJTlRfTUlO
ICogMzE2MjI0MDBMTCB8fCB0ID4gSU5UX01BWCAqIDMxNjIyNDAwTEwpCj4gQEAgLTU3LDcgKzU3
LDcgQEAgaW50IF9fc2Vjc190b190bShsb25nIGxvbmcgdCwgc3RydWN0IHRtICp0bSkKPiAgCj4g
IAl5ZWFycyA9IHJlbXllYXJzICsgNCpxX2N5Y2xlcyArIDEwMCpjX2N5Y2xlcyArIDQwMExMKnFj
X2N5Y2xlczsKPiAgCj4gLQlmb3IgKG1vbnRocz0wOyBkYXlzX2luX21vbnRoW21vbnRoc10gPD0g
cmVtZGF5czsgbW9udGhzKyspCj4gKwlmb3IgKG1vbnRocyA9IDA7IGRheXNfaW5fbW9udGhbbW9u
dGhzXSA8PSByZW1kYXlzOyBtb250aHMrKykKPiAgCQlyZW1kYXlzIC09IGRheXNfaW5fbW9udGhb
bW9udGhzXTsKPiAgCj4gIAlpZiAobW9udGhzID49IDEwKSB7Cj4gZGlmZiAtLWdpdCBhL2xpYi91
a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMgYi9saWIvdWt0aW1lL211c2wt
aW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jCj4gaW5kZXggYzI5ZmE5ODUuLmFhZjdkMTNjIDEw
MDY0NAo+IC0tLSBhL2xpYi91a3RpbWUvbXVzbC1pbXBvcnRlZC9zcmMvX190bV90b19zZWNzLmMK
PiArKysgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19fdG1fdG9fc2Vjcy5jCj4gQEAg
LTUsOCArNSwxMCBAQCBsb25nIGxvbmcgX190bV90b19zZWNzKGNvbnN0IHN0cnVjdCB0bSAqdG0p
Cj4gIAlpbnQgaXNfbGVhcDsKPiAgCWxvbmcgbG9uZyB5ZWFyID0gdG0tPnRtX3llYXI7Cj4gIAlp
bnQgbW9udGggPSB0bS0+dG1fbW9uOwo+ICsKPiAgCWlmIChtb250aCA+PSAxMiB8fCBtb250aCA8
IDApIHsKPiAgCQlpbnQgYWRqID0gbW9udGggLyAxMjsKPiArCj4gIAkJbW9udGggJT0gMTI7Cj4g
IAkJaWYgKG1vbnRoIDwgMCkgewo+ICAJCQlhZGotLTsKPiBAQCAtMTUsNiArMTcsNyBAQCBsb25n
IGxvbmcgX190bV90b19zZWNzKGNvbnN0IHN0cnVjdCB0bSAqdG0pCj4gIAkJeWVhciArPSBhZGo7
Cj4gIAl9Cj4gIAlsb25nIGxvbmcgdCA9IF9feWVhcl90b19zZWNzKHllYXIsICZpc19sZWFwKTsK
PiArCj4gIAl0ICs9IF9fbW9udGhfdG9fc2Vjcyhtb250aCwgaXNfbGVhcCk7Cj4gIAl0ICs9IDg2
NDAwTEwgKiAodG0tPnRtX21kYXktMSk7Cj4gIAl0ICs9IDM2MDBMTCAqIHRtLT50bV9ob3VyOwo+
IGRpZmYgLS1naXQgYS9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNz
LmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL19feWVhcl90b19zZWNzLmMKPiBpbmRl
eCAyODI0ZWM2ZC4uMTZkNzFjNTUgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrdGltZS9tdXNsLWltcG9y
dGVkL3NyYy9fX3llYXJfdG9fc2Vjcy5jCj4gKysrIGIvbGliL3VrdGltZS9tdXNsLWltcG9ydGVk
L3NyYy9fX3llYXJfdG9fc2Vjcy5jCj4gQEAgLTMsMTYgKzMsMjAgQEAgbG9uZyBsb25nIF9feWVh
cl90b19zZWNzKGxvbmcgbG9uZyB5ZWFyLCBpbnQgKmlzX2xlYXApCj4gIAlpZiAoeWVhci0yVUxM
IDw9IDEzNikgewo+ICAJCWludCB5ID0geWVhcjsKPiAgCQlpbnQgbGVhcHMgPSAoeS02OCk+PjI7
Cj4gKwo+ICAJCWlmICghKCh5LTY4KSYzKSkgewo+ICAJCQlsZWFwcy0tOwo+IC0JCQlpZiAoaXNf
bGVhcCkgKmlzX2xlYXAgPSAxOwo+IC0JCX0gZWxzZSBpZiAoaXNfbGVhcCkgKmlzX2xlYXAgPSAw
Owo+ICsJCQlpZiAoaXNfbGVhcCkKPiArCQkJCSppc19sZWFwID0gMTsKPiArCQl9IGVsc2UgaWYg
KGlzX2xlYXApCj4gKwkJCSppc19sZWFwID0gMDsKPiAgCQlyZXR1cm4gMzE1MzYwMDAqKHktNzAp
ICsgODY0MDAqbGVhcHM7Cj4gIAl9Cj4gIAo+ICAJaW50IGN5Y2xlcywgY2VudHVyaWVzLCBsZWFw
cywgcmVtOwo+ICAKPiAtCWlmICghaXNfbGVhcCkgaXNfbGVhcCA9ICYoaW50KXswfTsKPiArCWlm
ICghaXNfbGVhcCkKPiArCQlpc19sZWFwID0gJihpbnQpezB9Owo+ICAJY3ljbGVzID0gKHllYXIt
MTAwKSAvIDQwMDsKPiAgCXJlbSA9ICh5ZWFyLTEwMCkgJSA0MDA7Cj4gIAlpZiAocmVtIDwgMCkg
ewo+IEBAIC0yNSwxMSArMjksMTUgQEAgbG9uZyBsb25nIF9feWVhcl90b19zZWNzKGxvbmcgbG9u
ZyB5ZWFyLCBpbnQgKmlzX2xlYXApCj4gIAkJbGVhcHMgPSAwOwo+ICAJfSBlbHNlIHsKPiAgCQlp
ZiAocmVtID49IDIwMCkgewo+IC0JCQlpZiAocmVtID49IDMwMCkgY2VudHVyaWVzID0gMywgcmVt
IC09IDMwMDsKPiAtCQkJZWxzZSBjZW50dXJpZXMgPSAyLCByZW0gLT0gMjAwOwo+ICsJCQlpZiAo
cmVtID49IDMwMCkKPiArCQkJCWNlbnR1cmllcyA9IDMsIHJlbSAtPSAzMDA7Cj4gKwkJCWVsc2UK
PiArCQkJCWNlbnR1cmllcyA9IDIsIHJlbSAtPSAyMDA7Cj4gIAkJfSBlbHNlIHsKPiAtCQkJaWYg
KHJlbSA+PSAxMDApIGNlbnR1cmllcyA9IDEsIHJlbSAtPSAxMDA7Cj4gLQkJCWVsc2UgY2VudHVy
aWVzID0gMDsKPiArCQkJaWYgKHJlbSA+PSAxMDApCj4gKwkJCQljZW50dXJpZXMgPSAxLCByZW0g
LT0gMTAwOwo+ICsJCQllbHNlCj4gKwkJCQljZW50dXJpZXMgPSAwOwo+ICAJCX0KPiAgCQlpZiAo
IXJlbSkgewo+ICAJCQkqaXNfbGVhcCA9IDA7Cj4gZGlmZiAtLWdpdCBhL2xpYi91a3RpbWUvbXVz
bC1pbXBvcnRlZC9zcmMvdGltZWdtLmMgYi9saWIvdWt0aW1lL211c2wtaW1wb3J0ZWQvc3JjL3Rp
bWVnbS5jCj4gaW5kZXggODBlMjUwNmQuLmJkZTQwYjkwIDEwMDY0NAo+IC0tLSBhL2xpYi91a3Rp
bWUvbXVzbC1pbXBvcnRlZC9zcmMvdGltZWdtLmMKPiArKysgYi9saWIvdWt0aW1lL211c2wtaW1w
b3J0ZWQvc3JjL3RpbWVnbS5jCj4gQEAgLTgsNiArOCw3IEBAIHRpbWVfdCB0aW1lZ20oc3RydWN0
IHRtICp0bSkKPiAgewo+ICAJc3RydWN0IHRtIG5ldzsKPiAgCWxvbmcgbG9uZyB0ID0gX190bV90
b19zZWNzKHRtKTsKPiArCj4gIAlpZiAoX19zZWNzX3RvX3RtKHQsICZuZXcpIDwgMCkgewo+ICAJ
CWVycm5vID0gRU9WRVJGTE9XOwo+ICAJCXJldHVybiAtMTsKPiAKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 11:54:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 11:54:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8NgM-0005Ki-2S; Thu, 12 Sep 2019 11:54:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8NgK-0005KT-9u
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 11:54:36 +0000
X-Inumbo-ID: 15f41a13-d554-11e9-9597-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 15f41a13-d554-11e9-9597-12813bfff9fa;
 Thu, 12 Sep 2019 11:54:34 +0000 (UTC)
IronPort-SDR: fSVqQb+F479Me1DuWAztQP6nvWe8S42SrODMbTXvkskNzvf/T84Ycyi6hRQBVv8Ywq8eOoWs3H
 InzqhW+t5wBQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AXa7vJRRyB8t1zLmi+3pbW3sGdtpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa67ZBWDt8tkgFKBZ4jH8fUM07OQ7/m7HzRdqsra+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvndFe+tayGxmKFmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ91cXDJdDIyic4QPDvIBPedGoIn7u1sOtga1CQ21CO/y1jNEmnr60Ksn2O?=
 =?us-ascii?q?ojDA7GxhQtEc8QvnTarNv7N6kcXu66w6bK0TrNYOhb2Svk6IXSbhwtvf+BUL?=
 =?us-ascii?q?B2fMHMyUcvDQTFjlCIpIH7ODOVzfgNs2md7+F9U+yvlnYnqxxsqTWo2sgsjZ?=
 =?us-ascii?q?LJhp4UylDC7yl5xJs1JcWlSENgfdGkC4FctzmHN4RtWM8iWWZotT88x7Ybup?=
 =?us-ascii?q?C7ZDAHxIkoyhLCcfCKcIiF7gj9WOqPIzp0nnxodKqiixux8kWs0PPwW8mu3F?=
 =?us-ascii?q?pUoSdIksPAu38J2hHV98OJUOFy/l271jaKzw3T7+ZELl0qmqfDMJ4hx6Iwlo?=
 =?us-ascii?q?IUsUTeAi/6gEX2g7GSdkUj4uWo9eHnba/npp+YLYN7lhr+Pr42msyiGus0KB?=
 =?us-ascii?q?IOX2+D9eS90r3s41H5Ta1XgvA5j6XVqpPXKMQBqqKnHQNY0Jwv5hinAzejyt?=
 =?us-ascii?q?sYnH0HLFxfeBKAiojkI03BIPfjDfejglSsli1nx/TbPr35H5XANWTMkKz7cb?=
 =?us-ascii?q?Zl9k5T0xA/zcpY555MELEOPOrzWlPttNzfFhI5Ng20w+DmCNV6zYMSQH+ADb?=
 =?us-ascii?q?GHMKzMtV+F/eYvI+iXZI8JozbxMfck6ODojXMjnl8dZ6ap14MNaH+kBvRmP1?=
 =?us-ascii?q?mZYX30j9cfFWcFpBcxQ/Twh12ETDFTfWi9X6Mm6j4gEo2pEIDDRoGwgLGaxy?=
 =?us-ascii?q?e7AoBWaX1cBl+WDXjobJ+IW+oUaC2JOMNhiDsEBvCdTNof0Rii8Sb8x6BqL9?=
 =?us-ascii?q?3+UQE/lK/UlIclubyJ1Flm6zh9A/OU1W2XQmAylGoEQD4r9LtjvEA7w1yYl7?=
 =?us-ascii?q?VgibpCEooXr7lMUwE7MoWZw+FkBtTaXgPaYszPWFugBNK8Dnt5Gtcwxd4JeA?=
 =?us-ascii?q?NxFsuvijjH3jG2GPkFmrrNA4Y7pPHyxX/0cu160GrH0uEFkkE7Cp9EMna6h6?=
 =?us-ascii?q?g58xXLGqbCiAOBiqzsb6NKj32Fz3uK0Wfb5BIQawV3S6iQGClHPkY=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CqAADjMHpdXQPjVY1mGgEBAQEBAgE?=
 =?us-ascii?q?BAQEHAgEBAQGBZ4MIUCASKoQhiHyIEpsZCQEBAToBAgEBhD8Cgn44EwIDCQE?=
 =?us-ascii?q?BBQEBAQEBBgQBBhoWBYVrgjopAYJmAQEBAQMjZgsRAwECAQICJgICQwwIBgE?=
 =?us-ascii?q?MBgIBAYMegg+rRIEyhUuDMYFJgQwojVA/gREngms+hESDC4JYBJYfligHgiR?=
 =?us-ascii?q?kBIsmiGMhjW6LHI1/mkc4gXkzGoNfgnqOED0BATEBgQUBAY8gAQE?=
X-IPAS-Result: =?us-ascii?q?A2CqAADjMHpdXQPjVY1mGgEBAQEBAgEBAQEHAgEBAQGBZ?=
 =?us-ascii?q?4MIUCASKoQhiHyIEpsZCQEBAToBAgEBhD8Cgn44EwIDCQEBBQEBAQEBBgQBB?=
 =?us-ascii?q?hoWBYVrgjopAYJmAQEBAQMjZgsRAwECAQICJgICQwwIBgEMBgIBAYMegg+rR?=
 =?us-ascii?q?IEyhUuDMYFJgQwojVA/gREngms+hESDC4JYBJYfligHgiRkBIsmiGMhjW6LH?=
 =?us-ascii?q?I1/mkc4gXkzGoNfgnqOED0BATEBgQUBAY8gAQE?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4781854"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 14:54:33 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id CA5E91A600D6;
 Thu, 12 Sep 2019 14:54:33 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id Whbi3z60UlxO; Thu, 12 Sep 2019 14:54:33 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B0A2A1A60130;
 Thu, 12 Sep 2019 14:54:33 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id HVOGPHP8GXos; Thu, 12 Sep 2019 14:54:33 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.25.245.49])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 9185A1A600D6;
 Thu, 12 Sep 2019 14:54:33 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190912112907.15956-1-vlad_andrei.badoiu@stud.acs.upb.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <918f4f5f-5b5c-28d4-7c22-74e31721d2ee@cs.pub.ro>
Date: Thu, 12 Sep 2019 14:54:33 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190912112907.15956-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/1] patches: Allow
 including custom time.h headers
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgcGF0Y2gsIFZsYWQhCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNv
c3Rpbi5sdXB1QGNzLnB1Yi5ybz4KCk9uIDkvMTIvMTkgMjoyOSBQTSwgVmxhZC1BbmRyZWkgQsSC
RE9JVSAoNzg2OTIpIHdyb3RlOgo+IFNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8
dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KPiAtLS0KPiAgLi4uYXRjaC1pbi1v
cmRlci10by1pbmNsdWRlLWN1c3RvbS10aW1lLnBhdGNoIHwgMjcgKysrKysrKysrKysrKysrKysr
Kwo+ICAxIGZpbGUgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2
NDQgcGF0Y2hlcy8wMDA5LUFwcGx5LWhhY2tpc2gtcGF0Y2gtaW4tb3JkZXItdG8taW5jbHVkZS1j
dXN0b20tdGltZS5wYXRjaAo+IAo+IGRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDktQXBwbHktaGFj
a2lzaC1wYXRjaC1pbi1vcmRlci10by1pbmNsdWRlLWN1c3RvbS10aW1lLnBhdGNoIGIvcGF0Y2hl
cy8wMDA5LUFwcGx5LWhhY2tpc2gtcGF0Y2gtaW4tb3JkZXItdG8taW5jbHVkZS1jdXN0b20tdGlt
ZS5wYXRjaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNTU5YWVkNAo+
IC0tLSAvZGV2L251bGwKPiArKysgYi9wYXRjaGVzLzAwMDktQXBwbHktaGFja2lzaC1wYXRjaC1p
bi1vcmRlci10by1pbmNsdWRlLWN1c3RvbS10aW1lLnBhdGNoCj4gQEAgLTAsMCArMSwyNyBAQAo+
ICtGcm9tIDA2ODFlZDVmMjg4MDkzYWZmYmQ3MmYzNGM5N2NkYzBiZTFjN2Y0YzcgTW9uIFNlcCAx
NyAwMDowMDowMCAyMDAxCj4gK0Zyb206IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWku
YmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KPiArRGF0ZTogVGh1LCAxMiBTZXAgMjAxOSAxMzo0NDo0
NSArMDMwMAo+ICtTdWJqZWN0OiBbUEFUQ0ggMS8xXSBBcHBseSBoYWNraXNoIHBhdGNoIGluIG9y
ZGVyIHRvIGluY2x1ZGUgY3VzdG9tIHRpbWUuaAo+ICsgaGVhZGVyIGZpcnN0Cj4gKwo+ICtTaWdu
ZWQtb2ZmLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFj
cy51cGIucm8+Cj4gKy0tLQo+ICsgbmV3bGliL2xpYmMvaW5jbHVkZS90aW1lLmggfCAzICsrKwo+
ICsgMSBmaWxlIGNoYW5nZWQsIDMgaW5zZXJ0aW9ucygrKQo+ICsKPiArZGlmZiAtLWdpdCBhL25l
d2xpYi9saWJjL2luY2x1ZGUvdGltZS5oIGIvbmV3bGliL2xpYmMvaW5jbHVkZS90aW1lLmgKPiAr
aW5kZXggMzJiYWVkOS4uZjE0M2I3YyAxMDA2NDQKPiArLS0tIGEvbmV3bGliL2xpYmMvaW5jbHVk
ZS90aW1lLmgKPiArKysrIGIvbmV3bGliL2xpYmMvaW5jbHVkZS90aW1lLmgKPiArQEAgLTMxNSw1
ICszMTUsOCBAQCBpbnQgX0VYRlVOKGNsb2NrX2dldGVuYWJsZV9hdHRyLCAoY2xvY2tpZF90IGNs
b2NrX2lkLCBpbnQgKmF0dHIpKTsKPiArIH0KPiArICNlbmRpZgo+ICsgCj4gKysjZWxzZQo+ICsr
I2luY2x1ZGVfbmV4dCA8dGltZS5oPgo+ICsrCj4gKyAjZW5kaWYgLyogX1RJTUVfSF8gKi8KPiAr
IAo+ICstLSAKPiArMi4yMC4xCj4gKwo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 14:21:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 14:21:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Py3-0003U2-Vf; Thu, 12 Sep 2019 14:21:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Py2-0003Tk-Rw
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 14:21:02 +0000
X-Inumbo-ID: 8ade0037-d568-11e9-959a-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 8ade0037-d568-11e9-959a-12813bfff9fa;
 Thu, 12 Sep 2019 14:21:00 +0000 (UTC)
IronPort-SDR: zBeuR+bblyTJ5WY1MF4juzXfjB93w4Gh3UR22AZ8egtqdXc7AwmuFxYCB/lldBr/XWL8Ax+Bk4
 x7Y8nbEGGtNA==
IronPort-PHdr: =?us-ascii?q?9a23=3ANFZvYB8hDM2Um/9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B+0+wWIJqq85mqBkHD//Il1AaPAdyAraoZwLWP++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMnYdvKqk9xx?=
 =?us-ascii?q?nUrnBVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y7jQds0GS2?=
 =?us-ascii?q?VfQslRVjRBAoKiYIsJE+oBJvtTo43kq1cTsReyGQygCeXywTFKm3D2x7U33f?=
 =?us-ascii?q?k/HwHI3AIuHNwAv3rbo9r3KKgcXvu4zLXRzTjZc/9axTnw5YrOfxs8of+MR7?=
 =?us-ascii?q?Vwcc/JxEQxEAPFlUmQqY3jPziI0OoNrnCb7/d9Xu+ol2EnrBpxoiSuxscqkI?=
 =?us-ascii?q?XJgp8VykjZ9Shi3Ik1Pse0SFZmYdG/CpdQrSaaOpJwT8g/TW9ovyM6xacHuZ?=
 =?us-ascii?q?69ZCULx4ooxxjHa/yddIiI4AzsW/qNITtig3JlYr2/ihCv+kaj0u3xTtS43V?=
 =?us-ascii?q?lXoiZfkdTBtmoB2wLN5sWFUPdw8F+t1SuM2g3Q8O1IP0A5mbDFJ5MuwrM8jJ?=
 =?us-ascii?q?UevEDFEyTrgkv5lrWWeV8h+uWw7uTnZajpqYGEOo9vjwH+LrwumsuiAeQkKg?=
 =?us-ascii?q?QOX3aU+eC71LD74035Ra9FjvwykqXDrJ/aPt4XprakAwBOyIoj8RG/Ay+n0N?=
 =?us-ascii?q?Qeg3YHMEpIdA+IgoT0IV3DI/D1Ae2hj1iykjpn3f7LMqXkAprXL3jDlLnhfa?=
 =?us-ascii?q?x6605Z0Ac80ddf54lICrEAJvL/QEvxtMHADh8kKAG73/3nBM9l1oMDQm2DGL?=
 =?us-ascii?q?WZMKTKvV+S+u0vO/WMZJMSuDvlLvgl5vjujX4+mV8GZKWmwIUYaG6mEfRiOE?=
 =?us-ascii?q?iZZXvsgswdEWcRpAY/Q/LliFuYXT5UfXayULo25isnB4K+EYfDWoetjaSf3C?=
 =?us-ascii?q?e/BJJZe3hJBUqKEXj1bYWLRfYMZDiJLcB7jzMEUrmhS5I62BG1qA/61qdoIv?=
 =?us-ascii?q?DO9SIErpLvzsV15/XImh0o7zx0CJfV72bYcWV9kiYhQTMs0aFIi+dR7Xa+5u?=
 =?us-ascii?q?gn06IJT50bs+1NWwsNPJjQ1eF7Tdr7VgXAY/+SVEuqBNytGncsVth32dhYJw?=
 =?us-ascii?q?43HtSkjxfYmianHbIRv7iKH4AvtLLR2T72Pck3gyLD1a8giEJjTsZROGmOgq?=
 =?us-ascii?q?9k6xOVF4PP1UKDmPD5W74b2Xvm83yfzGzGmFxATUYkWqLeQXEZIE/LtcnR7V?=
 =?us-ascii?q?iEV6KkT64gZFgSgfWeI7dHP4W6xW5NQ+3ubZGHOzq8?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CrAAD3UnpdXQPjVY1mGgEBAQEBAgE?=
 =?us-ascii?q?BAQEHAgEBAQGBZ4MFA1AgEiqEIYh8iBObGQkBAQEmCwkBAgEBg3pFAoMAOBM?=
 =?us-ascii?q?CAwkBAQUBAQEBAQYEAQYaFgWFXwyCOikBgmYBAQEBAwEBIUsbCxEDAQIBAgI?=
 =?us-ascii?q?mAgInARsMCAYBDAYCAQGDHgGCDguqQoEyhUuDMYFDBoEMKI1QP4ERJ4JrPoJ?=
 =?us-ascii?q?hAQSBXoMLglgElh+WKAeCJGQEhhmFDYNOhRUhjW6LHI1/iASSQziBeTMac4J?=
 =?us-ascii?q?sgnqIToVCPQEBMQGBBQEBjyABAQ?=
X-IPAS-Result: =?us-ascii?q?A2CrAAD3UnpdXQPjVY1mGgEBAQEBAgEBAQEHAgEBAQGBZ?=
 =?us-ascii?q?4MFA1AgEiqEIYh8iBObGQkBAQEmCwkBAgEBg3pFAoMAOBMCAwkBAQUBAQEBA?=
 =?us-ascii?q?QYEAQYaFgWFXwyCOikBgmYBAQEBAwEBIUsbCxEDAQIBAgImAgInARsMCAYBD?=
 =?us-ascii?q?AYCAQGDHgGCDguqQoEyhUuDMYFDBoEMKI1QP4ERJ4JrPoJhAQSBXoMLglgEl?=
 =?us-ascii?q?h+WKAeCJGQEhhmFDYNOhRUhjW6LHI1/iASSQziBeTMac4JsgnqIToVCPQEBM?=
 =?us-ascii?q?QGBBQEBjyABAQ?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4783252"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 17:20:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id C3C101A600CF;
 Thu, 12 Sep 2019 17:20:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 9n8_XGxOX9Fu; Thu, 12 Sep 2019 17:20:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id AB11F1A600D6;
 Thu, 12 Sep 2019 17:20:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 8UWXQKDUzBuT; Thu, 12 Sep 2019 17:20:58 +0300 (EEST)
Received: from [192.168.1.103] (unknown [188.25.245.49])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 958A91A600CF;
 Thu, 12 Sep 2019 17:20:58 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190912112907.15956-1-vlad_andrei.badoiu@stud.acs.upb.ro>
 <918f4f5f-5b5c-28d4-7c22-74e31721d2ee@cs.pub.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <f226bdc6-b6f1-7f52-3b4e-22351c5db3fd@cs.pub.ro>
Date: Thu, 12 Sep 2019 17:20:58 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <918f4f5f-5b5c-28d4-7c22-74e31721d2ee@cs.pub.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH 1/1] patches: Allow
 including custom time.h headers
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SSdtIHJldmlzaXRpbmcgdGhpcy4gQWN0dWFsbHksIGFmdGVyIHRoZSBzbWFsbCBjaGFuZ2VzIEkg
bWFkZSBvbiBwYXRjaAonbGliL3VrdGltZTogQWRhcHQgdGltZWdtIGltcGxlbWVudGF0aW9uIHRv
IFVuaWtyYWZ0JywgdGhpcyBwYXRjaCBpcyBub3QKbmVlZGVkIGFueW1vcmUuCgpDaGVlcnMsCkNv
c3RpbgoKT24gOS8xMi8xOSAyOjU0IFBNLCBDb3N0aW4gTHVwdSB3cm90ZToKPiBUaGFua3MgZm9y
IHRoZSBwYXRjaCwgVmxhZCEKPiAKPiBSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5s
dXB1QGNzLnB1Yi5ybz4KPiAKPiBPbiA5LzEyLzE5IDI6MjkgUE0sIFZsYWQtQW5kcmVpIELEgkRP
SVUgKDc4NjkyKSB3cm90ZToKPj4gU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgo+PiAtLS0KPj4gIC4uLmF0Y2gtaW4t
b3JkZXItdG8taW5jbHVkZS1jdXN0b20tdGltZS5wYXRjaCB8IDI3ICsrKysrKysrKysrKysrKysr
KysKPj4gIDEgZmlsZSBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspCj4+ICBjcmVhdGUgbW9kZSAx
MDA2NDQgcGF0Y2hlcy8wMDA5LUFwcGx5LWhhY2tpc2gtcGF0Y2gtaW4tb3JkZXItdG8taW5jbHVk
ZS1jdXN0b20tdGltZS5wYXRjaAo+Pgo+PiBkaWZmIC0tZ2l0IGEvcGF0Y2hlcy8wMDA5LUFwcGx5
LWhhY2tpc2gtcGF0Y2gtaW4tb3JkZXItdG8taW5jbHVkZS1jdXN0b20tdGltZS5wYXRjaCBiL3Bh
dGNoZXMvMDAwOS1BcHBseS1oYWNraXNoLXBhdGNoLWluLW9yZGVyLXRvLWluY2x1ZGUtY3VzdG9t
LXRpbWUucGF0Y2gKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMC4uNTU5
YWVkNAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL3BhdGNoZXMvMDAwOS1BcHBseS1oYWNraXNo
LXBhdGNoLWluLW9yZGVyLXRvLWluY2x1ZGUtY3VzdG9tLXRpbWUucGF0Y2gKPj4gQEAgLTAsMCAr
MSwyNyBAQAo+PiArRnJvbSAwNjgxZWQ1ZjI4ODA5M2FmZmJkNzJmMzRjOTdjZGMwYmUxYzdmNGM3
IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQo+PiArRnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgo+PiArRGF0ZTogVGh1LCAxMiBTZXAg
MjAxOSAxMzo0NDo0NSArMDMwMAo+PiArU3ViamVjdDogW1BBVENIIDEvMV0gQXBwbHkgaGFja2lz
aCBwYXRjaCBpbiBvcmRlciB0byBpbmNsdWRlIGN1c3RvbSB0aW1lLmgKPj4gKyBoZWFkZXIgZmly
c3QKPj4gKwo+PiArU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJl
aS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgo+PiArLS0tCj4+ICsgbmV3bGliL2xpYmMvaW5jbHVk
ZS90aW1lLmggfCAzICsrKwo+PiArIDEgZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKykKPj4g
Kwo+PiArZGlmZiAtLWdpdCBhL25ld2xpYi9saWJjL2luY2x1ZGUvdGltZS5oIGIvbmV3bGliL2xp
YmMvaW5jbHVkZS90aW1lLmgKPj4gK2luZGV4IDMyYmFlZDkuLmYxNDNiN2MgMTAwNjQ0Cj4+ICst
LS0gYS9uZXdsaWIvbGliYy9pbmNsdWRlL3RpbWUuaAo+PiArKysrIGIvbmV3bGliL2xpYmMvaW5j
bHVkZS90aW1lLmgKPj4gK0BAIC0zMTUsNSArMzE1LDggQEAgaW50IF9FWEZVTihjbG9ja19nZXRl
bmFibGVfYXR0ciwgKGNsb2NraWRfdCBjbG9ja19pZCwgaW50ICphdHRyKSk7Cj4+ICsgfQo+PiAr
ICNlbmRpZgo+PiArIAo+PiArKyNlbHNlCj4+ICsrI2luY2x1ZGVfbmV4dCA8dGltZS5oPgo+PiAr
Kwo+PiArICNlbmRpZiAvKiBfVElNRV9IXyAqLwo+PiArIAo+PiArLS0gCj4+ICsyLjIwLjEKPj4g
Kwo+Pgo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Cj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdAo+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWwKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 14:32:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 14:32:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Q8s-0004L7-Ec; Thu, 12 Sep 2019 14:32:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=IF6T=XH=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i8Q8q-0004L0-QC
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 14:32:12 +0000
X-Inumbo-ID: 1a6686f0-d56a-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1a6686f0-d56a-11e9-978d-bc764e2007e4;
 Thu, 12 Sep 2019 14:32:10 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5AF19F201A;
 Thu, 12 Sep 2019 16:32:09 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2E3bhHElpX_T; Thu, 12 Sep 2019 16:32:09 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 26891F2018;
 Thu, 12 Sep 2019 16:32:05 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 12 Sep
 2019 16:32:04 +0200
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
 <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
 <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
 <5c6d2f83-040d-5227-b80f-e73b8edc179a@neclab.eu>
 <ee5e2f0d-1994-1ee5-6a95-87a11e79cee4@gmail.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <1f06f87b-819d-828f-acae-d1fc314d8be1@neclab.eu>
Date: Thu, 12 Sep 2019 16:32:04 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <ee5e2f0d-1994-1ee5-6a95-87a11e79cee4@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKQWxzbyBub3RpY2VkIGEgY2hlY2twYXRjaCBlcnJvciB3aXRoIHRoaXMg
cGF0Y2guCgpUaGFua3MgJiBSZWdhcmRzCgpTaGFyYW4KCgpPbiA5LzExLzE5IDY6NDQgUE0sIENv
c3RpbiBMdXB1IHdyb3RlOgo+IE9uIDkvMTEvMTkgNjoyNyBQTSwgU2hhcmFuIFNhbnRoYW5hbSB3
cm90ZToKPj4gT24gOS8xMS8xOSAzOjM4IFBNLCBDb3N0aW4gTHVwdSB3cm90ZToKPj4+IEhpIFNo
YXJhbiwKPj4+Cj4+PiBPbiA5LzExLzE5IDM6NTYgUE0sIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6
Cj4+Pj4gSGVsbG8gQ29zdGluLAo+Pj4+Cj4+Pj4gVGhlIGZpeCBzZWVtcyBmaW5lLiBQbGVhc2Ug
ZmluZCB0aGUgcXVlc3Rpb24gaW5saW5lLgo+Pj4+Cj4+Pj4gVGhhbmtzICYgUmVnYXJkcwo+Pj4+
Cj4+Pj4gU2hhcmFuCj4+Pj4KPj4+PiBPbiA5LzExLzE5IDE6NTYgUE0sIENvc3RpbiBMdXB1IHdy
b3RlOgo+Pj4+PiBDb21taXQgM2RjY2NkMDQgaW50cm9kdWNlZCBoYW5kbGluZyBvZiBGSU9DTEVY
IGFuZCBGSU9OQ0xFWCByZXF1ZXN0cy4KPj4+Pj4gSG93ZXZlciwKPj4+Pj4gdGhlc2UgZmxhZ3Mg
YXJlIG5vdCBkZWZpbmVkIGluIG5vbGliYy4KPj4+Pj4KPj4+Pj4gU2lnbmVkLW9mZi1ieTogQ29z
dGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPj4+Pj4gLS0tCj4+Pj4+ICDCoMKgIGxp
Yi9ub2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaCB8IDAKPj4+PiBXaHkgZG8gd2UgaW50cm9kdWNl
IGEgZW1wdHkgZmlsZT8gSW4gbmV3bGliIHdlIGludHJvZHVjZXMgYSBoZWFkZXIKPj4+PiBpbXBv
cnRlZCBmcm9tIG11c2wuCj4+Pj4KPj4+IEkgZGlkbid0IGdldCB0aGF0IGNvbXBsZXRlbHksIGRv
ZXMgaXQgYnVpbGQgb24geW91ciBzaWRlPyBEbyB5b3UgZ2V0IGFueQo+Pj4gZXJyb3JzL3dhcm5p
bmdzPwo+PiBObywgYnV0IEkgZ3Vlc3Mgd2l0aCBhIHJldmlldyBwcm9jZXNzIHlvdSBkbyBjbGFy
aWZ5IHdoeSB5b3UgbWFkZQo+PiBjZXJ0YWluIGNob2ljZXMuCj4+Pj4gV2h5IGRvbid0IHdlIHVz
ZSB0aGUgc2FtZSBmaWxlIGhlcmU/Cj4+PiBUaGlzIGlzIGFuIG9wZW4gcXVlc3Rpb24uIFRoZSB0
aGluZyBpcyB0aGF0IG5ld2xpYiBpdHNlbGYgc2VlbXMgdG8gYmUgYQo+Pj4gcG9vciBjaG9pY2Ug
aWYgd2UgZG8gY29weSBzbyBtdWNoIGNvZGUgZnJvbSBtdXNsLiBOb3cgZ2V0dGluZyBiYWNrIHRv
Cj4+PiBub2xpYmMsIGlmIHdlIGRvIGFkZCBtb3JlIGFuZCBtb3JlIGNvZGUgZnJvbSBtdXNsIHRo
ZW4gd2UgY2FuIHNpbXBseSBnZXQKPj4+IHJpZCBvZiBpdCB0b28gYW5kIHVzZSBtdXNsIGluc3Rl
YWQuIEluIGNvbmNsdXNpb24sIEkgZmFpbCB0byBzZWUgd2h5IHdlCj4+PiBzaG91bGQgY29weSBj
b2RlIHRvIG5vbGliYyBpbnN0ZWFkIHVzaW5nIG11c2wgZGlyZWN0bHkuCj4+IEJ1dCBpbiB0aGlz
IGNhc2Ugd2UgYXJlIGludHJvZHVjaW5nIHRoZSBGSU9OQ0xFWCBhbmQgRklPQ0xFWCB3aXRoaW4g
dGhlCj4+IGNvcmUgVW5pa3JhZnQgYW5kIGl0IGlzIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCBub2xp
YmMuIEluc3RlYWQgb2YgYWRkaW5nCj4+ICNpZmRlZiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gbWFr
ZSBpdCBmZWF0dXJlIGNvbXBsZXRlLgo+IE5vdyB3aHkgd291bGQgeW91IHNheSBpdCBpcyBleHBl
Y3RlZCB0byB3b3JrIHdpdGggbm9saWJjPyBUaGUgdHdvIGZsYWdzCj4gYXJlIGFjdHVhbGx5IHJl
bGF0ZWQgd2l0aCBjbG9zZS1vbi1leGVjIGxvZ2ljLiBXaHkgd291bGQgYW55IGFwcCBydW5uaW5n
Cj4gb24gdG9wIG9mIFVuaWtyYWZ0IGFuZCB3aGljaCB3b3VsZCBub3QgdXNlIGEgbGliYyBpbXBs
ZW1lbnRhdGlvbiBuZWVkIHRvCj4gY2FsbCBleGVjKCkgc2luY2UgdGhpcyBpcyBub3QgcG9zc2li
bGU/IEJlc2lkZXMgdGhpcywgdGhlcmUgaXMgbm8gZXhlYygpCj4gZnVuY3Rpb24gaW4gbm9saWJj
LgoKIEZyb20gbXkgcGVyc3BlY3RpdmUsCgpmY250bChmZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7
CgphbmQKCmlvY3RsKGZkLCBGSU9DTEVYKTsKCmlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50LiBU
aGUgZm9ybWVyIGlzIHN1cHBvcnRlZCBpbiBub2xpYmMgd2hpbGUgdGhlIApsYXR0ZXIgaXMgbm90
LiBBcyBmYXIgYXMgZXhlYyBjYWxsIGlzIGNvbmNlcm5lZCwgd2UgZG9uJ3Qgc3VwcG9ydCBleGVj
IApmYW1pbHkgaW4gZWl0aGVyIG9mIHRoZSBsaWJjIGV4Y2VwdCBmb3IgZ2x1ZSB0byBjb21waWxl
IGl0LiBTbyB3aGVuIGV4ZWMgCmZhbWlseSBpcyBhdmFpbGFibGUgd2UgY2FuIGRlY2lkZSBvbiB0
aGUgbGliY3MgdG8gc3VwcG9ydCB0aGUgZXhlYy4KCj4KPiBDaGVlcnMsCj4gQ29zdGluCj4KCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 14:40:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 14:40:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8QHJ-0005IR-09; Thu, 12 Sep 2019 14:40:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v+ft=XH=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i8QHH-0005IH-FG
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 14:40:55 +0000
X-Inumbo-ID: 52f54b2c-d56b-11e9-b76c-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 52f54b2c-d56b-11e9-b76c-bc764e2007e4;
 Thu, 12 Sep 2019 14:40:54 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id n10so359296wmj.0
 for <minios-devel@lists.xen.org>; Thu, 12 Sep 2019 07:40:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=yR8Jf3ok3WqXImCR/KTbvtHS0QOib/jDg2WVNcTifDM=;
 b=r618llYQNbGMvDmRD4H/ws9JhZTLtKrHKaHjo5J1RU6rASgCpYdu86Eu3wGGqAAFs7
 Ab2yJvFlwExElpB1PkI1jwxMmc5umUxI1F4DtU5Lt8sVH7e2JipV1q6lkfCqnHAWY98t
 YjMxwcg1qz76LhdKefGXvAmSsdab1WUk4dKqPWrkVpQ8Sydhwcdt2jpu4MlkTpLXIgaK
 GkBakJ44LN/ACFNlgr1ROO3nU317BAd7NoSxuNDKEhuo6htIUrpJiyL06dOdv8qgyqOE
 fx1mBKqVgErDnTXgFeL9/pd4DtOTBv99l/yoGbfwPq/vEe6S8RME5lTj8ORPCIsBIGLh
 HCJw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=yR8Jf3ok3WqXImCR/KTbvtHS0QOib/jDg2WVNcTifDM=;
 b=Rgx5eofyzndHnqwgS0DN0qipDmsLk7KljuocY0SopcqCrFejqkn3f07xiOx+3lYuNj
 U/hzOSiKeTM4IcCtxpd5zK4A4vliVpR0oyOd/qBAJY2y7MxRiOnv4g0YC+KACrnSlQJj
 zvarjP/dlRgrBCnW4mgTWXrKmOX8RN+vCaUZAbGrzmw57XEkpK11Jn+lGv+67lWEcBAS
 hAMZsixr1+F9t/uBWLu2srgZQzGt3EF5MbR28lTqsVDlqXfP84npMy9U8Z6/VAEkIAoQ
 dq6djY6czdLURoybA6zjMWiriNanceaHGJy2aPycxCpy90My5yZa9r+Wo0oPfajptfy4
 wYTg==
X-Gm-Message-State: APjAAAW34ycrQzpx1WrCsAT0lsyg0yBaTr0M5SwVp21+niFxyggPqNNe
 PYw0TgVZvVL81dODTWBAm59iiHNo
X-Google-Smtp-Source: APXvYqxgpcYn0P2q06FdepA3btUDa6qgDZFhaWxeYNVIB9Fuqo8GqDcj7qFV7hQ7PU5uRoE/msYrpQ==
X-Received: by 2002:a1c:a90b:: with SMTP id s11mr331397wme.92.1568299253515;
 Thu, 12 Sep 2019 07:40:53 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id r28sm33146931wrr.94.2019.09.12.07.40.50
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 12 Sep 2019 07:40:52 -0700 (PDT)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, minios-devel@lists.xen.org
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
 <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
 <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
 <5c6d2f83-040d-5227-b80f-e73b8edc179a@neclab.eu>
 <ee5e2f0d-1994-1ee5-6a95-87a11e79cee4@gmail.com>
 <1f06f87b-819d-828f-acae-d1fc314d8be1@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <0810b9fc-3403-e972-9335-519f60d8c464@gmail.com>
Date: Thu, 12 Sep 2019 17:40:50 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <1f06f87b-819d-828f-acae-d1fc314d8be1@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xMi8xOSA1OjMyIFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IEhlbGxvIENvc3Rp
biwKPiAKPiBBbHNvIG5vdGljZWQgYSBjaGVja3BhdGNoIGVycm9yIHdpdGggdGhpcyBwYXRjaC4K
PiAKPiBUaGFua3MgJiBSZWdhcmRzCj4gCj4gU2hhcmFuCj4gCj4gCj4gT24gOS8xMS8xOSA2OjQ0
IFBNLCBDb3N0aW4gTHVwdSB3cm90ZToKPj4gT24gOS8xMS8xOSA2OjI3IFBNLCBTaGFyYW4gU2Fu
dGhhbmFtIHdyb3RlOgo+Pj4gT24gOS8xMS8xOSAzOjM4IFBNLCBDb3N0aW4gTHVwdSB3cm90ZToK
Pj4+PiBIaSBTaGFyYW4sCj4+Pj4KPj4+PiBPbiA5LzExLzE5IDM6NTYgUE0sIFNoYXJhbiBTYW50
aGFuYW0gd3JvdGU6Cj4+Pj4+IEhlbGxvIENvc3RpbiwKPj4+Pj4KPj4+Pj4gVGhlIGZpeCBzZWVt
cyBmaW5lLiBQbGVhc2UgZmluZCB0aGUgcXVlc3Rpb24gaW5saW5lLgo+Pj4+Pgo+Pj4+PiBUaGFu
a3MgJiBSZWdhcmRzCj4+Pj4+Cj4+Pj4+IFNoYXJhbgo+Pj4+Pgo+Pj4+PiBPbiA5LzExLzE5IDE6
NTYgUE0sIENvc3RpbiBMdXB1IHdyb3RlOgo+Pj4+Pj4gQ29tbWl0IDNkY2NjZDA0IGludHJvZHVj
ZWQgaGFuZGxpbmcgb2YgRklPQ0xFWCBhbmQgRklPTkNMRVggcmVxdWVzdHMuCj4+Pj4+PiBIb3dl
dmVyLAo+Pj4+Pj4gdGhlc2UgZmxhZ3MgYXJlIG5vdCBkZWZpbmVkIGluIG5vbGliYy4KPj4+Pj4+
Cj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJv
Pgo+Pj4+Pj4gLS0tCj4+Pj4+PiDCoMKgwqAgbGliL25vbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5o
IHwgMAo+Pj4+PiBXaHkgZG8gd2UgaW50cm9kdWNlIGEgZW1wdHkgZmlsZT8gSW4gbmV3bGliIHdl
IGludHJvZHVjZXMgYSBoZWFkZXIKPj4+Pj4gaW1wb3J0ZWQgZnJvbSBtdXNsLgo+Pj4+Pgo+Pj4+
IEkgZGlkbid0IGdldCB0aGF0IGNvbXBsZXRlbHksIGRvZXMgaXQgYnVpbGQgb24geW91ciBzaWRl
PyBEbyB5b3UgZ2V0Cj4+Pj4gYW55Cj4+Pj4gZXJyb3JzL3dhcm5pbmdzPwo+Pj4gTm8sIGJ1dCBJ
IGd1ZXNzIHdpdGggYSByZXZpZXcgcHJvY2VzcyB5b3UgZG8gY2xhcmlmeSB3aHkgeW91IG1hZGUK
Pj4+IGNlcnRhaW4gY2hvaWNlcy4KPj4+Pj4gV2h5IGRvbid0IHdlIHVzZSB0aGUgc2FtZSBmaWxl
IGhlcmU/Cj4+Pj4gVGhpcyBpcyBhbiBvcGVuIHF1ZXN0aW9uLiBUaGUgdGhpbmcgaXMgdGhhdCBu
ZXdsaWIgaXRzZWxmIHNlZW1zIHRvIGJlIGEKPj4+PiBwb29yIGNob2ljZSBpZiB3ZSBkbyBjb3B5
IHNvIG11Y2ggY29kZSBmcm9tIG11c2wuIE5vdyBnZXR0aW5nIGJhY2sgdG8KPj4+PiBub2xpYmMs
IGlmIHdlIGRvIGFkZCBtb3JlIGFuZCBtb3JlIGNvZGUgZnJvbSBtdXNsIHRoZW4gd2UgY2FuIHNp
bXBseQo+Pj4+IGdldAo+Pj4+IHJpZCBvZiBpdCB0b28gYW5kIHVzZSBtdXNsIGluc3RlYWQuIElu
IGNvbmNsdXNpb24sIEkgZmFpbCB0byBzZWUgd2h5IHdlCj4+Pj4gc2hvdWxkIGNvcHkgY29kZSB0
byBub2xpYmMgaW5zdGVhZCB1c2luZyBtdXNsIGRpcmVjdGx5Lgo+Pj4gQnV0IGluIHRoaXMgY2Fz
ZSB3ZSBhcmUgaW50cm9kdWNpbmcgdGhlIEZJT05DTEVYIGFuZCBGSU9DTEVYIHdpdGhpbiB0aGUK
Pj4+IGNvcmUgVW5pa3JhZnQgYW5kIGl0IGlzIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCBub2xpYmMu
IEluc3RlYWQgb2YgYWRkaW5nCj4+PiAjaWZkZWYgaXQgd291bGQgYmUgYmV0dGVyIHRvIG1ha2Ug
aXQgZmVhdHVyZSBjb21wbGV0ZS4KPj4gTm93IHdoeSB3b3VsZCB5b3Ugc2F5IGl0IGlzIGV4cGVj
dGVkIHRvIHdvcmsgd2l0aCBub2xpYmM/IFRoZSB0d28gZmxhZ3MKPj4gYXJlIGFjdHVhbGx5IHJl
bGF0ZWQgd2l0aCBjbG9zZS1vbi1leGVjIGxvZ2ljLiBXaHkgd291bGQgYW55IGFwcCBydW5uaW5n
Cj4+IG9uIHRvcCBvZiBVbmlrcmFmdCBhbmQgd2hpY2ggd291bGQgbm90IHVzZSBhIGxpYmMgaW1w
bGVtZW50YXRpb24gbmVlZCB0bwo+PiBjYWxsIGV4ZWMoKSBzaW5jZSB0aGlzIGlzIG5vdCBwb3Nz
aWJsZT8gQmVzaWRlcyB0aGlzLCB0aGVyZSBpcyBubyBleGVjKCkKPj4gZnVuY3Rpb24gaW4gbm9s
aWJjLgo+IAo+IEZyb20gbXkgcGVyc3BlY3RpdmUsCj4gCj4gZmNudGwoZmQsIEZfU0VURkQsIEZE
X0NMT0VYRUMpOwo+IAo+IGFuZAo+IAo+IGlvY3RsKGZkLCBGSU9DTEVYKTsKPiAKPiBpcyBmdW5j
dGlvbmFsbHkgZXF1aXZhbGVudC4gVGhlIGZvcm1lciBpcyBzdXBwb3J0ZWQgaW4gbm9saWJjIHdo
aWxlIHRoZQo+IGxhdHRlciBpcyBub3QuIEFzIGZhciBhcyBleGVjIGNhbGwgaXMgY29uY2VybmVk
LCB3ZSBkb24ndCBzdXBwb3J0IGV4ZWMKPiBmYW1pbHkgaW4gZWl0aGVyIG9mIHRoZSBsaWJjIGV4
Y2VwdCBmb3IgZ2x1ZSB0byBjb21waWxlIGl0LiBTbyB3aGVuIGV4ZWMKPiBmYW1pbHkgaXMgYXZh
aWxhYmxlIHdlIGNhbiBkZWNpZGUgb24gdGhlIGxpYmNzIHRvIHN1cHBvcnQgdGhlIGV4ZWMuCgpJ
IHNlZSwgdGhlIHByZWNlZGVudCB3YXMgY3JlYXRlZCBhbHJlYWR5LiBJJ2xsIHNlbmQgdGhlIHYy
IHdpdGggdGhlCmhlYWRlciBjb3BpZWQgZnJvbSBtdXNsLiBUbyByZWNhcCwgSSBjb3BpZWQgdGhl
IGhlYWRlciBvbmx5IHRvIG5ld2xpYgpnbHVlIGNvZGUgaW4gdGhlIHByZXZpb3VzIHBhdGNoLgoK
QSBxdWVzdGlvbiB0aGF0IHdlIG5lZWQgdG8gYW5zd2VyIHRob3VnaCBpcyB1bnRpbCB3aGVuIHNo
YWxsIHdlIGNvbnRpbnVlCmNvcHlpbmcgZmlsZXMgZnJvbSBtdXNsIHRvIGJvdGggbmV3bGliIGFu
ZCBub2xpYmM/IEJlY2F1c2UgdGhpcyBpcwpnZXR0aW5nIHJpZGljdWxvdXMgYW5kIG5vbi1wcm9k
dWN0aXZlLgoKQ2hlZXJzLApDb3N0aW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 15:01:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 15:01:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Qax-0007T3-50; Thu, 12 Sep 2019 15:01:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=IF6T=XH=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i8Qav-0007Sl-Ia
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 15:01:13 +0000
X-Inumbo-ID: 287c1238-d56e-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 287c1238-d56e-11e9-b299-bc764e2007e4;
 Thu, 12 Sep 2019 15:01:11 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0EF71F201A;
 Thu, 12 Sep 2019 17:01:11 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id begL4_5m-yq9; Thu, 12 Sep 2019 17:01:10 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D1888F2018;
 Thu, 12 Sep 2019 17:01:06 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 12 Sep
 2019 17:01:06 +0200
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
 <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
 <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
 <5c6d2f83-040d-5227-b80f-e73b8edc179a@neclab.eu>
 <ee5e2f0d-1994-1ee5-6a95-87a11e79cee4@gmail.com>
 <1f06f87b-819d-828f-acae-d1fc314d8be1@neclab.eu>
 <0810b9fc-3403-e972-9335-519f60d8c464@gmail.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <62ce73c1-bdf9-c026-1d29-93647edc079a@neclab.eu>
Date: Thu, 12 Sep 2019 17:01:06 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <0810b9fc-3403-e972-9335-519f60d8c464@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDkvMTIvMTkgNDo0MCBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4gT24gOS8xMi8xOSA1OjMy
IFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+PiBIZWxsbyBDb3N0aW4sCj4+Cj4+IEFsc28g
bm90aWNlZCBhIGNoZWNrcGF0Y2ggZXJyb3Igd2l0aCB0aGlzIHBhdGNoLgo+Pgo+PiBUaGFua3Mg
JiBSZWdhcmRzCj4+Cj4+IFNoYXJhbgo+Pgo+Pgo+PiBPbiA5LzExLzE5IDY6NDQgUE0sIENvc3Rp
biBMdXB1IHdyb3RlOgo+Pj4gT24gOS8xMS8xOSA2OjI3IFBNLCBTaGFyYW4gU2FudGhhbmFtIHdy
b3RlOgo+Pj4+IE9uIDkvMTEvMTkgMzozOCBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+Pj4+IEhp
IFNoYXJhbiwKPj4+Pj4KPj4+Pj4gT24gOS8xMS8xOSAzOjU2IFBNLCBTaGFyYW4gU2FudGhhbmFt
IHdyb3RlOgo+Pj4+Pj4gSGVsbG8gQ29zdGluLAo+Pj4+Pj4KPj4+Pj4+IFRoZSBmaXggc2VlbXMg
ZmluZS4gUGxlYXNlIGZpbmQgdGhlIHF1ZXN0aW9uIGlubGluZS4KPj4+Pj4+Cj4+Pj4+PiBUaGFu
a3MgJiBSZWdhcmRzCj4+Pj4+Pgo+Pj4+Pj4gU2hhcmFuCj4+Pj4+Pgo+Pj4+Pj4gT24gOS8xMS8x
OSAxOjU2IFBNLCBDb3N0aW4gTHVwdSB3cm90ZToKPj4+Pj4+PiBDb21taXQgM2RjY2NkMDQgaW50
cm9kdWNlZCBoYW5kbGluZyBvZiBGSU9DTEVYIGFuZCBGSU9OQ0xFWCByZXF1ZXN0cy4KPj4+Pj4+
PiBIb3dldmVyLAo+Pj4+Pj4+IHRoZXNlIGZsYWdzIGFyZSBub3QgZGVmaW5lZCBpbiBub2xpYmMu
Cj4+Pj4+Pj4KPj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVA
Y3MucHViLnJvPgo+Pj4+Pj4+IC0tLQo+Pj4+Pj4+ICDCoMKgwqAgbGliL25vbGliYy9pbmNsdWRl
L3N5cy9pb2N0bC5oIHwgMAo+Pj4+Pj4gV2h5IGRvIHdlIGludHJvZHVjZSBhIGVtcHR5IGZpbGU/
IEluIG5ld2xpYiB3ZSBpbnRyb2R1Y2VzIGEgaGVhZGVyCj4+Pj4+PiBpbXBvcnRlZCBmcm9tIG11
c2wuCj4+Pj4+Pgo+Pj4+PiBJIGRpZG4ndCBnZXQgdGhhdCBjb21wbGV0ZWx5LCBkb2VzIGl0IGJ1
aWxkIG9uIHlvdXIgc2lkZT8gRG8geW91IGdldAo+Pj4+PiBhbnkKPj4+Pj4gZXJyb3JzL3dhcm5p
bmdzPwo+Pj4+IE5vLCBidXQgSSBndWVzcyB3aXRoIGEgcmV2aWV3IHByb2Nlc3MgeW91IGRvIGNs
YXJpZnkgd2h5IHlvdSBtYWRlCj4+Pj4gY2VydGFpbiBjaG9pY2VzLgo+Pj4+Pj4gV2h5IGRvbid0
IHdlIHVzZSB0aGUgc2FtZSBmaWxlIGhlcmU/Cj4+Pj4+IFRoaXMgaXMgYW4gb3BlbiBxdWVzdGlv
bi4gVGhlIHRoaW5nIGlzIHRoYXQgbmV3bGliIGl0c2VsZiBzZWVtcyB0byBiZSBhCj4+Pj4+IHBv
b3IgY2hvaWNlIGlmIHdlIGRvIGNvcHkgc28gbXVjaCBjb2RlIGZyb20gbXVzbC4gTm93IGdldHRp
bmcgYmFjayB0bwo+Pj4+PiBub2xpYmMsIGlmIHdlIGRvIGFkZCBtb3JlIGFuZCBtb3JlIGNvZGUg
ZnJvbSBtdXNsIHRoZW4gd2UgY2FuIHNpbXBseQo+Pj4+PiBnZXQKPj4+Pj4gcmlkIG9mIGl0IHRv
byBhbmQgdXNlIG11c2wgaW5zdGVhZC4gSW4gY29uY2x1c2lvbiwgSSBmYWlsIHRvIHNlZSB3aHkg
d2UKPj4+Pj4gc2hvdWxkIGNvcHkgY29kZSB0byBub2xpYmMgaW5zdGVhZCB1c2luZyBtdXNsIGRp
cmVjdGx5Lgo+Pj4+IEJ1dCBpbiB0aGlzIGNhc2Ugd2UgYXJlIGludHJvZHVjaW5nIHRoZSBGSU9O
Q0xFWCBhbmQgRklPQ0xFWCB3aXRoaW4gdGhlCj4+Pj4gY29yZSBVbmlrcmFmdCBhbmQgaXQgaXMg
ZXhwZWN0ZWQgdG8gd29yayB3aXRoIG5vbGliYy4gSW5zdGVhZCBvZiBhZGRpbmcKPj4+PiAjaWZk
ZWYgaXQgd291bGQgYmUgYmV0dGVyIHRvIG1ha2UgaXQgZmVhdHVyZSBjb21wbGV0ZS4KPj4+IE5v
dyB3aHkgd291bGQgeW91IHNheSBpdCBpcyBleHBlY3RlZCB0byB3b3JrIHdpdGggbm9saWJjPyBU
aGUgdHdvIGZsYWdzCj4+PiBhcmUgYWN0dWFsbHkgcmVsYXRlZCB3aXRoIGNsb3NlLW9uLWV4ZWMg
bG9naWMuIFdoeSB3b3VsZCBhbnkgYXBwIHJ1bm5pbmcKPj4+IG9uIHRvcCBvZiBVbmlrcmFmdCBh
bmQgd2hpY2ggd291bGQgbm90IHVzZSBhIGxpYmMgaW1wbGVtZW50YXRpb24gbmVlZCB0bwo+Pj4g
Y2FsbCBleGVjKCkgc2luY2UgdGhpcyBpcyBub3QgcG9zc2libGU/IEJlc2lkZXMgdGhpcywgdGhl
cmUgaXMgbm8gZXhlYygpCj4+PiBmdW5jdGlvbiBpbiBub2xpYmMuCj4+ICBGcm9tIG15IHBlcnNw
ZWN0aXZlLAo+Pgo+PiBmY250bChmZCwgRl9TRVRGRCwgRkRfQ0xPRVhFQyk7Cj4+Cj4+IGFuZAo+
Pgo+PiBpb2N0bChmZCwgRklPQ0xFWCk7Cj4+Cj4+IGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50
LiBUaGUgZm9ybWVyIGlzIHN1cHBvcnRlZCBpbiBub2xpYmMgd2hpbGUgdGhlCj4+IGxhdHRlciBp
cyBub3QuIEFzIGZhciBhcyBleGVjIGNhbGwgaXMgY29uY2VybmVkLCB3ZSBkb24ndCBzdXBwb3J0
IGV4ZWMKPj4gZmFtaWx5IGluIGVpdGhlciBvZiB0aGUgbGliYyBleGNlcHQgZm9yIGdsdWUgdG8g
Y29tcGlsZSBpdC4gU28gd2hlbiBleGVjCj4+IGZhbWlseSBpcyBhdmFpbGFibGUgd2UgY2FuIGRl
Y2lkZSBvbiB0aGUgbGliY3MgdG8gc3VwcG9ydCB0aGUgZXhlYy4KPiBJIHNlZSwgdGhlIHByZWNl
ZGVudCB3YXMgY3JlYXRlZCBhbHJlYWR5LiBJJ2xsIHNlbmQgdGhlIHYyIHdpdGggdGhlCj4gaGVh
ZGVyIGNvcGllZCBmcm9tIG11c2wuIFRvIHJlY2FwLCBJIGNvcGllZCB0aGUgaGVhZGVyIG9ubHkg
dG8gbmV3bGliCj4gZ2x1ZSBjb2RlIGluIHRoZSBwcmV2aW91cyBwYXRjaC4KPgo+IEEgcXVlc3Rp
b24gdGhhdCB3ZSBuZWVkIHRvIGFuc3dlciB0aG91Z2ggaXMgdW50aWwgd2hlbiBzaGFsbCB3ZSBj
b250aW51ZQo+IGNvcHlpbmcgZmlsZXMgZnJvbSBtdXNsIHRvIGJvdGggbmV3bGliIGFuZCBub2xp
YmM/IEJlY2F1c2UgdGhpcyBpcwo+IGdldHRpbmcgcmlkaWN1bG91cyBhbmQgbm9uLXByb2R1Y3Rp
dmUuCgpJIGFncmVlIHdlIG5lZWQgdG8gYmV0dGVyIGRlZmluZSB0aGUgZGlmZmVyZW5jZSBiZXR3
ZWVuIGV4dGVybmFsIG1vcmUgCmNvbXBsZXRlIGxpYmMgYW5kIG5vbGliLgoKPgo+IENoZWVycywK
PiBDb3N0aW4KPgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 16:31:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 16:31:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8Rzz-000832-AB; Thu, 12 Sep 2019 16:31:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8Rzy-00082x-5d
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 16:31:10 +0000
X-Inumbo-ID: b7f48bdc-d57a-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id b7f48bdc-d57a-11e9-978d-bc764e2007e4;
 Thu, 12 Sep 2019 16:31:06 +0000 (UTC)
IronPort-SDR: Ozxd6PeUTx0GiJQrL17JBSMPJZ1eh/Z52/c+EOUqASD62pKW+aqfdI2bmC5i3rg6cXDGw6WZsk
 souJbcG//NzA==
IronPort-PHdr: =?us-ascii?q?9a23=3Am0wpTRNCNqPb8EQNcLQl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0Ivn4rarrMEGX3/hxlliBBdydt6sfzbKL+PGxESxYuNDd6SpEKMQNHz?=
 =?us-ascii?q?Y+yuwu1zQ6B8CEDUCpZNXLVAcdWPp4aVl+4nugOlJUEsutL3fbo3m18CJAUk?=
 =?us-ascii?q?6nbVk9Kev6AJPdgNqq3O6u5ZLTfx9IhD2gar9uMRm6twrcutQYjId4Nqo8yh?=
 =?us-ascii?q?TFr39Mdu9LwW9kOU+fkwzz68ut4pJv6Thct+4k+8VdTaj0YqM0QKBCAj87KW?=
 =?us-ascii?q?41/srrtRfCTQuL+HQRV3gdnwRLDQbY8hz0R4/9vSTmuOVz3imaJtD2QqsvWT?=
 =?us-ascii?q?u+9adrSQTnhzkBOjUk7WzYkM1wjKZcoBK8uxxyxpPfbY+JOPZieK7WYNUXTn?=
 =?us-ascii?q?dDUMlMTSxMGoOyYZUSAeQPPuhWqJLwq0cSoRakGQWhHv/jxiNOi3Tr3aM6ye?=
 =?us-ascii?q?MhEQTe0QE+GNIOq2jUrNTzNKwPV+610bHIzSjeZP5RxTj975PIcgwgofGKR7?=
 =?us-ascii?q?5wddfRyVEyFw7eklqQspbpPyuI1usWqWSb9e1gWPuphmU6qA9xuiCiytojh4?=
 =?us-ascii?q?XUnI4YyVDJ+T9nzIorJ9C0UkB2bca5HJZfqi2WLYh7T8M4T212tis3xKcKtY?=
 =?us-ascii?q?O0cSQUzpks2gTRZOadc4eS5xLuTOORITBli317YL+/nBOy8VS4yu37S8m0zE?=
 =?us-ascii?q?5GripbndnIsXAAzwLT6s2dRft8+ketwyqA1xvJ5uFcPEA7jrDXK4QmwrIol5?=
 =?us-ascii?q?oTt1rMHjPulUnrg6Kaa18o9+uo5uj9fLnquJ2RO5V6hw3mN6QhgM2/AeA2Mg?=
 =?us-ascii?q?gUWGib/Pyx26Hk/U3iXLVKj/s2nrPdsJDHPcQbu7W0DBNO0oo58xa/Eiyp3M?=
 =?us-ascii?q?4CnXkANF5FYg6Ij5D1O1HSJ/D1FfK/g1WqkDdqwPDGJaTtDYjTIXjdjrjhea?=
 =?us-ascii?q?1w60pdyAoo0dBf/IhYC74fL/L1QEPxs8bYDhAhOQyu3+nnEMl91p8ZWW+XGa?=
 =?us-ascii?q?+ZMLndsUWS6eIpOeWMf5UauDDhK/gl/fHui2U2mVoGcKmvw5QYdHS4Ee59LE?=
 =?us-ascii?q?mDf3Xsn4RJLWBfuws4TevxzVGPTzNXT3KzRL4noCE2DsShF4iQaJqqhemq2z?=
 =?us-ascii?q?ynH5seQn1eFxjYGnDza4SCHfMRcD+6KdQniiEOE6KmHdxynSqyvRP3nuI0Zt?=
 =?us-ascii?q?Hf/TcV4Mru?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DNAwClcXpdXQPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUyASKo0doUaBZwkBAQEpEQECAQGEP4MCOBMCAwkBAQUBAQEBAQYEAQY?=
 =?us-ascii?q?aFgWFXwyCOiKDbk9Vg08Bgg6sMoVLgzOBSYE0hx+GMT+IaoEIhRYElh+WKAe?=
 =?us-ascii?q?CJGQEhhmNaieDJJVmqEY4gXkzGoNfCYIOATYXi0mCXD0BATGBBgEBjyABAQ?=
X-IPAS-Result: =?us-ascii?q?A2DNAwClcXpdXQPjVY1mHQEBBQEHBQGBZ4MFUyASKo0do?=
 =?us-ascii?q?UaBZwkBAQEpEQECAQGEP4MCOBMCAwkBAQUBAQEBAQYEAQYaFgWFXwyCOiKDb?=
 =?us-ascii?q?k9Vg08Bgg6sMoVLgzOBSYE0hx+GMT+IaoEIhRYElh+WKAeCJGQEhhmNaieDJ?=
 =?us-ascii?q?JVmqEY4gXkzGoNfCYIOATYXi0mCXD0BATGBBgEBjyABAQ?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4783634"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 19:31:05 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2F7FC1A6013C;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id BTrUvvFAhU0X; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 15BD31A60136;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id RqofQEO4X3Ic; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id EA2D61A600CF;
 Thu, 12 Sep 2019 19:31:04 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 19:30:52 +0300
Message-Id: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH 0/3] Add ioctl.h headers to nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgZm9sbG93IHRoZSBzYW1lIGFwcHJvYWNoIGFzIHdlIGRpZCBmb3IgbmV3bGliIGdsdWUgY29k
ZS4KCkNvc3RpbiBMdXB1ICgzKToKICBsaWIvbm9saWJjOiBJbnRyb2R1Y2UgbXVzbC1pbXBvcnRl
ZCBzdWJkaXJlY3RvcnkKICBsaWIvbm9saWJjOiBJbXBvcnQgaW9jdGwuaCBoZWFkZXJzIGZvciB4
ODZfNjQgZnJvbSBtdXNsCiAgbGliL25vbGliYzogQWRhcHQgaW9jdGwuaCBoZWFkZXIgdG8gVW5p
a3JhZnQKCiBsaWIvbm9saWJjL01ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgfCAg
MTAgKy0KIGxpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9DT1BZUklHSFQgICAgICAgICAgICB8IDE4
OSArKysrKysrKysrKysrKysrKysKIC4uLi9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9iaXRz
L2lvY3RsLmggICB8IDExMiArKysrKysrKysrKwogbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2lu
Y2x1ZGUvc3lzL2lvY3RsLmggIHwgMTI0ICsrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA0
MzEgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
bm9saWJjL211c2wtaW1wb3J0ZWQvQ09QWVJJR0hUCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL25v
bGliYy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9iaXRzL2lvY3RsLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBsaWIvbm9saWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMvaW9jdGwuaAoKLS0g
CjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 16:31:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 16:31:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8S04-00083j-Cx; Thu, 12 Sep 2019 16:31:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8S03-00083c-5e
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 16:31:15 +0000
X-Inumbo-ID: ba529b6c-d57a-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id ba529b6c-d57a-11e9-978d-bc764e2007e4;
 Thu, 12 Sep 2019 16:31:10 +0000 (UTC)
IronPort-SDR: dSIXzWVPqi4iigftafHIexY4DuMg9BQPU4RaezGCNyywuvfVQIXEBZB+O9so0DmIUXrNvtt4Sb
 miX+9tBIRSJQ==
IronPort-PHdr: =?us-ascii?q?9a23=3A/peLdB3WXthpveFZsmDT+DRfVm0co7zxezQtwd?=
 =?us-ascii?q?8ZseITLfad9pjvdHbS+e9qxAeQG9mCsLQc1qGH4uigATVGvc/b9ihaMdRlbF?=
 =?us-ascii?q?wssY0uhQsuAcqIWwXQDcXBSGgEJvlET0Jv5HqhMEJYS47UblzWpWCuv3ZJQk?=
 =?us-ascii?q?2sfQV6Kf7oFYHMks+5y/69+4HJYwVPmTGxfa5+IA+5oAnMuMQam5duJ6Y+xh?=
 =?us-ascii?q?bNpnZDZuBayX91KV6JkBvw+9m88IR//yhMvv4q6tJNX7j9c6kkV7JTES4oM3?=
 =?us-ascii?q?oy5M3ltBnDSRWA634BWWgIkRRGHhbI4gjiUpj+riX1uOx92DKHPcLtVrA7RS?=
 =?us-ascii?q?6i76ZwRxD2jioMKiM0/3vWisx0i6JbvQ6hqhliyIPafI2ZKPxzdb7bcNgHR2?=
 =?us-ascii?q?ROQ9xRWjRBDI2icoUBAekPM+FaoInzvFYCsQeyCBOwCO711jNEmnn71rA63e?=
 =?us-ascii?q?Q7FgHG2RQtEswJsHTPsNX1NaESWv2zwqnV1TXDcu5d1DDh54jPaRAhvfCMXb?=
 =?us-ascii?q?RqfcrV1EkvDx7Fg06Mpoz+JT+VzvkNvHOB4+p6UuKikmgqoBxyrDi33sogl4?=
 =?us-ascii?q?bEip8Pxl3H9Sh12pg5KcO6RUJhb9OoCIZcui6HO4dsQc4vQ3tktDg0x7AIo5?=
 =?us-ascii?q?K3YScHxIohyhXCcfKIaZKI7QjmVOuJJDd4g29qd6ynihap9Eig1vX8Vs6p0F?=
 =?us-ascii?q?ZWtiZFksfDtnQK1xHL9MiHT+Fy/kal2TqVyw/T8ftIIVgplaXAMZIh2Lkwmo?=
 =?us-ascii?q?ISsUTFACD2hF37gLKZe0k54OSl6OTqbq/4qpOCNYJ4kA/zPrwrmsOlAOQ4Ng?=
 =?us-ascii?q?YOX3Kc+eS5zLDs4Ur5QK5Wjv03lKnVqpTaJdkDpq6kGAJazp0j5wynDze7y9?=
 =?us-ascii?q?sUh2MHLFVddBKdk4fpI03OIOz/DfqnhlSskTFrx/HBPr36G5nCM2bMkKn/cr?=
 =?us-ascii?q?Z58ENczAszzctD55JPEL0AL+z8WknruNzfFB85PBS+w/z7B9VlyoMeRWWPD7?=
 =?us-ascii?q?eCMKPSq1CI/PggI++WaI8Oojn9LeQl5/70gn8/g1AdeLKk3Z0JZ3+kGvRpOV?=
 =?us-ascii?q?6WbWDyjdccQi82uV87Terrj0bHXTNNanKaW6Mn+ip9GI+gS4DZSdODmruEiQ?=
 =?us-ascii?q?y8BYFXYChiF0iRWSPjcJ6YWvFKbD+KP+dqiXocSLLnUYh3hkLmjxPz17cydr?=
 =?us-ascii?q?mcwSYfr5+2jNU=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CjAgClcXpdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MFUyASKo0doy0JAQEBKREBAgEBhD8CgwA4EwIDCQEBBQEBAQEBBgQ?=
 =?us-ascii?q?BBhoWBYVfDII6IoJvBnkQPxJDFBmDIgGCDqwyhUuDM4FJgTSHH4YxP4ERg1C?=
 =?us-ascii?q?FEYUWBJYfligHgiRkBIYZjWongySVZqhGOIF5MxqDXwmCRReLSYJcPQEBMYE?=
 =?us-ascii?q?GAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2CjAgClcXpdXQPjVY1mHAEBAQQBAQcEAQGBZ4MFUyASK?=
 =?us-ascii?q?o0doy0JAQEBKREBAgEBhD8CgwA4EwIDCQEBBQEBAQEBBgQBBhoWBYVfDII6I?=
 =?us-ascii?q?oJvBnkQPxJDFBmDIgGCDqwyhUuDM4FJgTSHH4YxP4ERg1CFEYUWBJYfligHg?=
 =?us-ascii?q?iRkBIYZjWongySVZqhGOIF5MxqDXwmCRReLSYJcPQEBMYEGAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4783637"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 19:31:05 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 573B81A600CF;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id SS9qL428bEE6; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3EEDA1A600D6;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id kAILLurlbhzT; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 21FAC1A6013B;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 19:30:55 +0300
Message-Id: <20190912163055.31744-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
References: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 3/3] lib/nolibc: Adapt ioctl.h
 header to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgYXJlIHRoZSBzYW1lIGNoYW5nZXMgd2UgZGlkIGZvciBuZXdsaWIgZ2x1ZSBjb2RlLgoK
U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBs
aWIvbm9saWJjL01ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwICsr
KysrKy0tLS0KIGxpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9hcmNoL2dlbmVyaWMvYml0cy9pb2N0
bC5oIHwgIDQgKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDUgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL25vbGliYy9NYWtlZmlsZS51ayBiL2xpYi9ub2xpYmMv
TWFrZWZpbGUudWsKaW5kZXggNWUyNjdmZTIuLjQ1ZjBiMGZjIDEwMDY0NAotLS0gYS9saWIvbm9s
aWJjL01ha2VmaWxlLnVrCisrKyBiL2xpYi9ub2xpYmMvTWFrZWZpbGUudWsKQEAgLTE3LDExICsx
NywxMyBAQCBMSUJOT0xJQkNfTk9fQlVJTFRJTlMJCSs9IC1mbm8tYnVpbHRpbi12c3NjYW5mCiAK
IENGTEFHUy0kKENPTkZJR19MSUJOT0xJQkMpCQkrPSAkKExJQk5PTElCQ19OT19CVUlMVElOUykK
IENYWEZMQUdTLSQoQ09ORklHX0xJQk5PTElCQykJCSs9ICQoTElCTk9MSUJDX05PX0JVSUxUSU5T
KQotQ0lOQ0xVREVTLSQoQ09ORklHX0xJQk5PTElCQykJCSs9IC1JJChMSUJOT0xJQkNfQkFTRSkv
aW5jbHVkZQotQ1hYSU5DTFVERVMtJChDT05GSUdfTElCTk9MSUJDKQkrPSAtSSQoTElCTk9MSUJD
X0JBU0UpL2luY2x1ZGUKIAotQ0lOQ0xVREVTLSQoQ09ORklHX0xJQk5PTElCQykJKz0gLUkkKExJ
Qk5PTElCQ19CQVNFKS9hcmNoLyQoQVJDSCkKLUNYWElOQ0xVREVTLSQoQ09ORklHX0xJQk5PTElC
QykJKz0gLUkkKExJQk5PTElCQ19CQVNFKS9pbmNsdWRlCitMSUJOT0xJQkNfR0xPQkFMX0lOQ0xV
REVTLXkgICAgICs9IC1JJChMSUJOT0xJQkNfQkFTRSkvaW5jbHVkZQorTElCTk9MSUJDX0dMT0JB
TF9JTkNMVURFUy15ICAgICArPSAtSSQoTElCTk9MSUJDX0JBU0UpL2FyY2gvJChBUkNIKQorTElC
Tk9MSUJDX0dMT0JBTF9JTkNMVURFUy15ICAgICArPSAtSSQoTElCTk9MSUJDX0JBU0UpL211c2wt
aW1wb3J0ZWQvaW5jbHVkZQorTElCTk9MSUJDX0dMT0JBTF9JTkNMVURFUy15ICAgICArPSAtSSQo
TElCTk9MSUJDX0JBU0UpL211c2wtaW1wb3J0ZWQvYXJjaC9nZW5lcmljCitDSU5DTFVERVMtJChD
T05GSUdfTElCTk9MSUJDKSAgICs9ICQoTElCTk9MSUJDX0dMT0JBTF9JTkNMVURFUy15KQorQ1hY
SU5DTFVERVMtJChDT05GSUdfTElCTk9MSUJDKSArPSAkKExJQk5PTElCQ19HTE9CQUxfSU5DTFVE
RVMteSkKIAogTElCTk9MSUJDX1NSQ1MteSArPSAkKExJQk5PTElCQ19CQVNFKS9lcnJuby5jCiBM
SUJOT0xJQkNfU1JDUy15ICs9ICQoTElCTk9MSUJDX0JBU0UpL3N0ZGlvLmMKZGlmZiAtLWdpdCBh
L2xpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9hcmNoL2dlbmVyaWMvYml0cy9pb2N0bC5oIGIvbGli
L25vbGliYy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9iaXRzL2lvY3RsLmgKaW5kZXggZDFh
NmMwMzUuLjM3OGQ0OTVmIDEwMDY0NAotLS0gYS9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvYXJj
aC9nZW5lcmljL2JpdHMvaW9jdGwuaAorKysgYi9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvYXJj
aC9nZW5lcmljL2JpdHMvaW9jdGwuaApAQCAtMTAzLDggKzEwMywxMCBAQAogI2RlZmluZSBTSU9D
U1BHUlAgICAgICAgMHg4OTAyCiAjZGVmaW5lIEZJT0dFVE9XTiAgICAgICAweDg5MDMKICNkZWZp
bmUgU0lPQ0dQR1JQICAgICAgIDB4ODkwNAorI2lmbmRlZiBDT05GSUdfTElCTFdJUAogI2RlZmlu
ZSBTSU9DQVRNQVJLICAgICAgMHg4OTA1CisjZW5kaWYKICNkZWZpbmUgU0lPQ0dTVEFNUCAgICAg
IDB4ODkwNgogI2RlZmluZSBTSU9DR1NUQU1QTlMgICAgMHg4OTA3CiAKLSNpbmNsdWRlIDxiaXRz
L2lvY3RsX2ZpeC5oPgorLyogVE9ETyAjaW5jbHVkZSA8Yml0cy9pb2N0bF9maXguaD4gKi8KLS0g
CjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 16:31:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 16:31:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8S09-00084Q-Eh; Thu, 12 Sep 2019 16:31:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8S08-00084E-6C
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 16:31:20 +0000
X-Inumbo-ID: ba6615a2-d57a-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id ba6615a2-d57a-11e9-b299-bc764e2007e4;
 Thu, 12 Sep 2019 16:31:10 +0000 (UTC)
IronPort-SDR: hpKdK9MVBzinDP5nO2ELChuXERCrw4xvjnMnwDH1MPzpPKyH+251UNFX9xR6DwBXJJF5NoWTC/
 7xB81jMfSX1Q==
IronPort-PHdr: =?us-ascii?q?9a23=3AHAmCBBw0dr2VAWjXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2uoXIJqq85mqBkHD//Il1AaPAdyAraoZwLuH++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMnYdvKqk9xx?=
 =?us-ascii?q?/Nr3BVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y6XQds4YS2?=
 =?us-ascii?q?VcRMZcTyxPDJ2hYYUBDOQPOuRXr4fmqlcSsRezHxWgCfnzxjNUgHL9wK000/?=
 =?us-ascii?q?4mEQHDxAEtAdUOsG/IrNX0MqcZTOa7zLTQzTXecvhb3ivy6I/TchA9oPGMW6?=
 =?us-ascii?q?h8cc7MyUk3CgPIlUmfqZf/MzONy+QCqHKX7/BnVe+2jWMstg9/oj+qxsg2i4?=
 =?us-ascii?q?nJgJoYylXZ9SVixIY5PNm4SE9gbtG4CpdQsDuaN4RwT8g/QG9ooD43xqAJtJ?=
 =?us-ascii?q?KmZiQHy5QqywTBZ/CZcYWE+BzuWP6MLTp3mX5pYrGyihao/US+xODxWNO43E?=
 =?us-ascii?q?tFoyZblNTHq2oD2AbJ6sedT/tw5kKh2TGS2A/N8uxEOkU0lbbDK54m374wio?=
 =?us-ascii?q?IfsUTdES/yn0X7lLGWdkA+9eip7+TreKnppoSGO49slwHxKb4imta4AeggMw?=
 =?us-ascii?q?gOWXaU+fik2bH+8kD1Xa9Gg/42n6XDrpzWO8YWqrS3DgNN14Ys8Re/DzOo0N?=
 =?us-ascii?q?QCmnkHKUpIdw6Aj4jyJ1HOIfb4Ae27g1SxiDdr2uvLMaH6ApnXNnjDjazuca?=
 =?us-ascii?q?xn605b0AYz18xQ54pICrEdJ/L+QkrxtN3eDh84NAy02P/rB8hj2YMAR22PBr?=
 =?us-ascii?q?SUMKfTsV+T+uIvOPOAZYALtzb7MfQl4OTujXAhk18HYaapxYcXaGy/Hvl+OE?=
 =?us-ascii?q?WZYWDjgs0bHmcMpAY+V/bliFueUT5TfXmyWbgz5jQgBYKgE4jMWoStj6aa0y?=
 =?us-ascii?q?uhAJJWezMONlfZFHbudoKfHvsBdi+WCstgiSAfE6isTckmzx79mhX9zu9MKf?=
 =?us-ascii?q?HI+ytQkY/7yZAh7OrIiRA0szhpF9m12HrLV3x+2HkPEWxllJtjqFBwnw/QmZ?=
 =?us-ascii?q?NzhOZVQIRe?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CjAgClcXpdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MFUyASKo0doy0JAQEBLQ0BAgEBhD8CgwA4EwIDCQEBBQEBAQEBBgQ?=
 =?us-ascii?q?BBhoWBYVfDII6IoJvBnkQPxJDFBmDIgGCDqwyhUuDM4FJgTSHH4YxP4EQg1G?=
 =?us-ascii?q?KJwSWH5YoB4IkZASGGY1qJ5kKLagZOIF5MxqDXwmLP4VCPQEBMYEGAQGPIAE?=
 =?us-ascii?q?B?=
X-IPAS-Result: =?us-ascii?q?A2CjAgClcXpdXQPjVY1mHAEBAQQBAQcEAQGBZ4MFUyASK?=
 =?us-ascii?q?o0doy0JAQEBLQ0BAgEBhD8CgwA4EwIDCQEBBQEBAQEBBgQBBhoWBYVfDII6I?=
 =?us-ascii?q?oJvBnkQPxJDFBmDIgGCDqwyhUuDM4FJgTSHH4YxP4EQg1GKJwSWH5YoB4IkZ?=
 =?us-ascii?q?ASGGY1qJ5kKLagZOIF5MxqDXwmLP4VCPQEBMYEGAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4783636"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 19:31:05 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 4AC801A600CF;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id H1ewmyI5eMjS; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 323321A6013D;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id sRtAtBu5DFmn; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 1342B1A60130;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 19:30:54 +0300
Message-Id: <20190912163055.31744-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
References: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT PATCH 2/3] lib/nolibc: Import ioctl.h
 headers for x86_64 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q29waWVkIGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgpnaXQ6Ly9naXQu
bXVzbC1saWJjLm9yZy9tdXNsLCBjb21taXQgNmZjYjQ0MGQuCgpTaWduZWQtb2ZmLWJ5OiBDb3N0
aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIC4uLi9tdXNsLWltcG9ydGVkL2Fy
Y2gvZ2VuZXJpYy9iaXRzL2lvY3RsLmggICB8IDExMCArKysrKysrKysrKysrKysrCiBsaWIvbm9s
aWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMvaW9jdGwuaCAgfCAxMjQgKysrKysrKysrKysr
KysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9iaXRzL2lvY3RsLmgK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbm9saWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMv
aW9jdGwuaAoKZGlmZiAtLWdpdCBhL2xpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9hcmNoL2dlbmVy
aWMvYml0cy9pb2N0bC5oIGIvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9i
aXRzL2lvY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmQxYTZjMDM1
Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJp
Yy9iaXRzL2lvY3RsLmgKQEAgLTAsMCArMSwxMTAgQEAKKyNkZWZpbmUgX0lPQyhhLGIsYyxkKSAo
ICgoYSk8PDMwKSB8ICgoYik8PDgpIHwgKGMpIHwgKChkKTw8MTYpICkKKyNkZWZpbmUgX0lPQ19O
T05FICAwVQorI2RlZmluZSBfSU9DX1dSSVRFIDFVCisjZGVmaW5lIF9JT0NfUkVBRCAgMlUKKwor
I2RlZmluZSBfSU8oYSxiKSBfSU9DKF9JT0NfTk9ORSwoYSksKGIpLDApCisjZGVmaW5lIF9JT1co
YSxiLGMpIF9JT0MoX0lPQ19XUklURSwoYSksKGIpLHNpemVvZihjKSkKKyNkZWZpbmUgX0lPUihh
LGIsYykgX0lPQyhfSU9DX1JFQUQsKGEpLChiKSxzaXplb2YoYykpCisjZGVmaW5lIF9JT1dSKGEs
YixjKSBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLChhKSwoYiksc2l6ZW9mKGMpKQorCisjZGVm
aW5lIFRDR0VUUwkJMHg1NDAxCisjZGVmaW5lIFRDU0VUUwkJMHg1NDAyCisjZGVmaW5lIFRDU0VU
U1cJCTB4NTQwMworI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKKyNkZWZpbmUgVENHRVRBCQkweDU0
MDUKKyNkZWZpbmUgVENTRVRBCQkweDU0MDYKKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3CisjZGVm
aW5lIFRDU0VUQUYJCTB4NTQwOAorI2RlZmluZSBUQ1NCUksJCTB4NTQwOQorI2RlZmluZSBUQ1hP
TkMJCTB4NTQwQQorI2RlZmluZSBUQ0ZMU0gJCTB4NTQwQgorI2RlZmluZSBUSU9DRVhDTAkweDU0
MEMKKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWQkweDU0MEUKKyNk
ZWZpbmUgVElPQ0dQR1JQCTB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAJMHg1NDEwCisjZGVmaW5l
IFRJT0NPVVRRCTB4NTQxMQorI2RlZmluZSBUSU9DU1RJCQkweDU0MTIKKyNkZWZpbmUgVElPQ0dX
SU5TWgkweDU0MTMKKyNkZWZpbmUgVElPQ1NXSU5TWgkweDU0MTQKKyNkZWZpbmUgVElPQ01HRVQJ
MHg1NDE1CisjZGVmaW5lIFRJT0NNQklTCTB4NTQxNgorI2RlZmluZSBUSU9DTUJJQwkweDU0MTcK
KyNkZWZpbmUgVElPQ01TRVQJMHg1NDE4CisjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKKyNk
ZWZpbmUgVElPQ1NTT0ZUQ0FSCTB4NTQxQQorI2RlZmluZSBGSU9OUkVBRAkweDU0MUIKKyNkZWZp
bmUgVElPQ0lOUQkJRklPTlJFQUQKKyNkZWZpbmUgVElPQ0xJTlVYCTB4NTQxQworI2RlZmluZSBU
SU9DQ09OUwkweDU0MUQKKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCisjZGVmaW5lIFRJT0NT
U0VSSUFMCTB4NTQxRgorI2RlZmluZSBUSU9DUEtUCQkweDU0MjAKKyNkZWZpbmUgRklPTkJJTwkJ
MHg1NDIxCisjZGVmaW5lIFRJT0NOT1RUWQkweDU0MjIKKyNkZWZpbmUgVElPQ1NFVEQJMHg1NDIz
CisjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAorI2RlZmluZSBUQ1NCUktQCQkweDU0MjUKKyNkZWZp
bmUgVElPQ1NCUksJMHg1NDI3CisjZGVmaW5lIFRJT0NDQlJLCTB4NTQyOAorI2RlZmluZSBUSU9D
R1NJRAkweDU0MjkKKyNkZWZpbmUgVElPQ0dSUzQ4NQkweDU0MkUKKyNkZWZpbmUgVElPQ1NSUzQ4
NQkweDU0MkYKKyNkZWZpbmUgVElPQ0dQVE4JMHg4MDA0NTQzMAorI2RlZmluZSBUSU9DU1BUTENL
CTB4NDAwNDU0MzEKKyNkZWZpbmUgVElPQ0dERVYJMHg4MDA0NTQzMgorI2RlZmluZSBUQ0dFVFgJ
CTB4NTQzMgorI2RlZmluZSBUQ1NFVFgJCTB4NTQzMworI2RlZmluZSBUQ1NFVFhGCQkweDU0MzQK
KyNkZWZpbmUgVENTRVRYVwkJMHg1NDM1CisjZGVmaW5lIFRJT0NTSUcJCTB4NDAwNDU0MzYKKyNk
ZWZpbmUgVElPQ1ZIQU5HVVAJMHg1NDM3CisjZGVmaW5lIFRJT0NHUEtUCTB4ODAwNDU0MzgKKyNk
ZWZpbmUgVElPQ0dQVExDSwkweDgwMDQ1NDM5CisjZGVmaW5lIFRJT0NHRVhDTAkweDgwMDQ1NDQw
CisjZGVmaW5lIFRJT0NHUFRQRUVSCTB4NTQ0MQorI2RlZmluZSBUSU9DR0lTTzc4MTYJMHg4MDI4
NTQ0MgorI2RlZmluZSBUSU9DU0lTTzc4MTYJMHhjMDI4NTQ0MworCisjZGVmaW5lIEZJT05DTEVY
CTB4NTQ1MAorI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKKyNkZWZpbmUgRklPQVNZTkMJMHg1NDUy
CisjZGVmaW5lIFRJT0NTRVJDT05GSUcJMHg1NDUzCisjZGVmaW5lIFRJT0NTRVJHV0lMRAkweDU0
NTQKKyNkZWZpbmUgVElPQ1NFUlNXSUxECTB4NTQ1NQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUwkw
eDU0NTYKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3CisjZGVmaW5lIFRJT0NTRVJHU1RS
VUNUCTB4NTQ1OAorI2RlZmluZSBUSU9DU0VSR0VUTFNSICAgMHg1NDU5CisjZGVmaW5lIFRJT0NT
RVJHRVRNVUxUSSAweDU0NUEKKyNkZWZpbmUgVElPQ1NFUlNFVE1VTFRJIDB4NTQ1QgorCisjZGVm
aW5lIFRJT0NNSVdBSVQJMHg1NDVDCisjZGVmaW5lIFRJT0NHSUNPVU5UCTB4NTQ1RAorI2RlZmlu
ZSBGSU9RU0laRQkweDU0NjAKKworI2RlZmluZSBUSU9DTV9MRSAgICAgICAgMHgwMDEKKyNkZWZp
bmUgVElPQ01fRFRSICAgICAgIDB4MDAyCisjZGVmaW5lIFRJT0NNX1JUUyAgICAgICAweDAwNAor
I2RlZmluZSBUSU9DTV9TVCAgICAgICAgMHgwMDgKKyNkZWZpbmUgVElPQ01fU1IgICAgICAgIDB4
MDEwCisjZGVmaW5lIFRJT0NNX0NUUyAgICAgICAweDAyMAorI2RlZmluZSBUSU9DTV9DQVIgICAg
ICAgMHgwNDAKKyNkZWZpbmUgVElPQ01fUk5HICAgICAgIDB4MDgwCisjZGVmaW5lIFRJT0NNX0RT
UiAgICAgICAweDEwMAorI2RlZmluZSBUSU9DTV9DRCAgICAgICAgVElPQ01fQ0FSCisjZGVmaW5l
IFRJT0NNX1JJICAgICAgICBUSU9DTV9STkcKKyNkZWZpbmUgVElPQ01fT1VUMSAgICAgIDB4MjAw
MAorI2RlZmluZSBUSU9DTV9PVVQyICAgICAgMHg0MDAwCisjZGVmaW5lIFRJT0NNX0xPT1AgICAg
ICAweDgwMDAKKworI2RlZmluZSBGSU9TRVRPV04gICAgICAgMHg4OTAxCisjZGVmaW5lIFNJT0NT
UEdSUCAgICAgICAweDg5MDIKKyNkZWZpbmUgRklPR0VUT1dOICAgICAgIDB4ODkwMworI2RlZmlu
ZSBTSU9DR1BHUlAgICAgICAgMHg4OTA0CisjZGVmaW5lIFNJT0NBVE1BUksgICAgICAweDg5MDUK
KyNkZWZpbmUgU0lPQ0dTVEFNUCAgICAgIDB4ODkwNgorI2RlZmluZSBTSU9DR1NUQU1QTlMgICAg
MHg4OTA3CisKKyNpbmNsdWRlIDxiaXRzL2lvY3RsX2ZpeC5oPgpkaWZmIC0tZ2l0IGEvbGliL25v
bGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL2lvY3RsLmggYi9saWIvbm9saWJjL211c2wt
aW1wb3J0ZWQvaW5jbHVkZS9zeXMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMC4uMzcyZTNkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbm9saWJjL211c2wtaW1w
b3J0ZWQvaW5jbHVkZS9zeXMvaW9jdGwuaApAQCAtMCwwICsxLDEyNCBAQAorI2lmbmRlZglfU1lT
X0lPQ1RMX0gKKyNkZWZpbmUJX1NZU19JT0NUTF9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVy
biAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxiaXRzL2lvY3RsLmg+CisKKyNkZWZpbmUgTl9U
VFkgICAgICAgICAgIDAKKyNkZWZpbmUgTl9TTElQICAgICAgICAgIDEKKyNkZWZpbmUgTl9NT1VT
RSAgICAgICAgIDIKKyNkZWZpbmUgTl9QUFAgICAgICAgICAgIDMKKyNkZWZpbmUgTl9TVFJJUCAg
ICAgICAgIDQKKyNkZWZpbmUgTl9BWDI1ICAgICAgICAgIDUKKyNkZWZpbmUgTl9YMjUgICAgICAg
ICAgIDYKKyNkZWZpbmUgTl82UEFDSyAgICAgICAgIDcKKyNkZWZpbmUgTl9NQVNDICAgICAgICAg
IDgKKyNkZWZpbmUgTl9SMzk2NCAgICAgICAgIDkKKyNkZWZpbmUgTl9QUk9GSUJVU19GREwgIDEw
CisjZGVmaW5lIE5fSVJEQSAgICAgICAgICAxMQorI2RlZmluZSBOX1NNU0JMT0NLICAgICAgMTIK
KyNkZWZpbmUgTl9IRExDICAgICAgICAgIDEzCisjZGVmaW5lIE5fU1lOQ19QUFAgICAgICAxNAor
I2RlZmluZSBOX0hDSSAgICAgICAgICAgMTUKKyNkZWZpbmUgTl9HSUdBU0VUX00xMDEgIDE2Cisj
ZGVmaW5lIE5fU0xDQU4gICAgICAgICAxNworI2RlZmluZSBOX1BQUyAgICAgICAgICAgMTgKKyNk
ZWZpbmUgTl9WMjUzICAgICAgICAgIDE5CisjZGVmaW5lIE5fQ0FJRiAgICAgICAgICAyMAorI2Rl
ZmluZSBOX0dTTTA3MTAgICAgICAgMjEKKyNkZWZpbmUgTl9USV9XTCAgICAgICAgIDIyCisjZGVm
aW5lIE5fVFJBQ0VTSU5LICAgICAyMworI2RlZmluZSBOX1RSQUNFUk9VVEVSICAgMjQKKyNkZWZp
bmUgTl9OQ0kgICAgICAgICAgIDI1CisjZGVmaW5lIE5fU1BFQUtVUCAgICAgICAyNgorI2RlZmlu
ZSBOX05VTEwgICAgICAgICAgMjcKKworI2RlZmluZSBUSU9DUEtUX0RBVEEgICAgICAgMAorI2Rl
ZmluZSBUSU9DUEtUX0ZMVVNIUkVBRCAgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUgMgor
I2RlZmluZSBUSU9DUEtUX1NUT1AgICAgICAgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUICAgICAg
OAorI2RlZmluZSBUSU9DUEtUX05PU1RPUCAgICAxNgorI2RlZmluZSBUSU9DUEtUX0RPU1RPUCAg
ICAzMgorI2RlZmluZSBUSU9DUEtUX0lPQ1RMICAgICA2NAorCisjZGVmaW5lIFRJT0NTRVJfVEVN
VCAxCisKK3N0cnVjdCB3aW5zaXplIHsKKwl1bnNpZ25lZCBzaG9ydCB3c19yb3c7CisJdW5zaWdu
ZWQgc2hvcnQgd3NfY29sOworCXVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKKwl1bnNpZ25lZCBz
aG9ydCB3c195cGl4ZWw7Cit9OworCisjZGVmaW5lIFNJT0NBRERSVCAgICAgICAgICAweDg5MEIK
KyNkZWZpbmUgU0lPQ0RFTFJUICAgICAgICAgIDB4ODkwQworI2RlZmluZSBTSU9DUlRNU0cgICAg
ICAgICAgMHg4OTBECisKKyNkZWZpbmUgU0lPQ0dJRk5BTUUgICAgICAgIDB4ODkxMAorI2RlZmlu
ZSBTSU9DU0lGTElOSyAgICAgICAgMHg4OTExCisjZGVmaW5lIFNJT0NHSUZDT05GICAgICAgICAw
eDg5MTIKKyNkZWZpbmUgU0lPQ0dJRkZMQUdTICAgICAgIDB4ODkxMworI2RlZmluZSBTSU9DU0lG
RkxBR1MgICAgICAgMHg4OTE0CisjZGVmaW5lIFNJT0NHSUZBRERSICAgICAgICAweDg5MTUKKyNk
ZWZpbmUgU0lPQ1NJRkFERFIgICAgICAgIDB4ODkxNgorI2RlZmluZSBTSU9DR0lGRFNUQUREUiAg
ICAgMHg4OTE3CisjZGVmaW5lIFNJT0NTSUZEU1RBRERSICAgICAweDg5MTgKKyNkZWZpbmUgU0lP
Q0dJRkJSREFERFIgICAgIDB4ODkxOQorI2RlZmluZSBTSU9DU0lGQlJEQUREUiAgICAgMHg4OTFh
CisjZGVmaW5lIFNJT0NHSUZORVRNQVNLICAgICAweDg5MWIKKyNkZWZpbmUgU0lPQ1NJRk5FVE1B
U0sgICAgIDB4ODkxYworI2RlZmluZSBTSU9DR0lGTUVUUklDICAgICAgMHg4OTFkCisjZGVmaW5l
IFNJT0NTSUZNRVRSSUMgICAgICAweDg5MWUKKyNkZWZpbmUgU0lPQ0dJRk1FTSAgICAgICAgIDB4
ODkxZgorI2RlZmluZSBTSU9DU0lGTUVNICAgICAgICAgMHg4OTIwCisjZGVmaW5lIFNJT0NHSUZN
VFUgICAgICAgICAweDg5MjEKKyNkZWZpbmUgU0lPQ1NJRk1UVSAgICAgICAgIDB4ODkyMgorI2Rl
ZmluZSBTSU9DU0lGTkFNRSAgICAgICAgMHg4OTIzCisjZGVmaW5lIFNJT0NTSUZIV0FERFIgICAg
ICAweDg5MjQKKyNkZWZpbmUgU0lPQ0dJRkVOQ0FQICAgICAgIDB4ODkyNQorI2RlZmluZSBTSU9D
U0lGRU5DQVAgICAgICAgMHg4OTI2CisjZGVmaW5lIFNJT0NHSUZIV0FERFIgICAgICAweDg5MjcK
KyNkZWZpbmUgU0lPQ0dJRlNMQVZFICAgICAgIDB4ODkyOQorI2RlZmluZSBTSU9DU0lGU0xBVkUg
ICAgICAgMHg4OTMwCisjZGVmaW5lIFNJT0NBRERNVUxUSSAgICAgICAweDg5MzEKKyNkZWZpbmUg
U0lPQ0RFTE1VTFRJICAgICAgIDB4ODkzMgorI2RlZmluZSBTSU9DR0lGSU5ERVggICAgICAgMHg4
OTMzCisjZGVmaW5lIFNJT0dJRklOREVYICAgICAgICBTSU9DR0lGSU5ERVgKKyNkZWZpbmUgU0lP
Q1NJRlBGTEFHUyAgICAgIDB4ODkzNAorI2RlZmluZSBTSU9DR0lGUEZMQUdTICAgICAgMHg4OTM1
CisjZGVmaW5lIFNJT0NESUZBRERSICAgICAgICAweDg5MzYKKyNkZWZpbmUgU0lPQ1NJRkhXQlJP
QURDQVNUIDB4ODkzNworI2RlZmluZSBTSU9DR0lGQ09VTlQgICAgICAgMHg4OTM4CisKKyNkZWZp
bmUgU0lPQ0dJRkJSICAgICAgICAgIDB4ODk0MAorI2RlZmluZSBTSU9DU0lGQlIgICAgICAgICAg
MHg4OTQxCisKKyNkZWZpbmUgU0lPQ0dJRlRYUUxFTiAgICAgIDB4ODk0MgorI2RlZmluZSBTSU9D
U0lGVFhRTEVOICAgICAgMHg4OTQzCisKKyNkZWZpbmUgU0lPQ0RBUlAgICAgICAgICAgIDB4ODk1
MworI2RlZmluZSBTSU9DR0FSUCAgICAgICAgICAgMHg4OTU0CisjZGVmaW5lIFNJT0NTQVJQICAg
ICAgICAgICAweDg5NTUKKworI2RlZmluZSBTSU9DRFJBUlAgICAgICAgICAgMHg4OTYwCisjZGVm
aW5lIFNJT0NHUkFSUCAgICAgICAgICAweDg5NjEKKyNkZWZpbmUgU0lPQ1NSQVJQICAgICAgICAg
IDB4ODk2MgorCisjZGVmaW5lIFNJT0NHSUZNQVAgICAgICAgICAweDg5NzAKKyNkZWZpbmUgU0lP
Q1NJRk1BUCAgICAgICAgIDB4ODk3MQorCisjZGVmaW5lIFNJT0NBRERETENJICAgICAgICAweDg5
ODAKKyNkZWZpbmUgU0lPQ0RFTERMQ0kgICAgICAgIDB4ODk4MQorCisjZGVmaW5lIFNJT0NERVZQ
UklWQVRFICAgICAweDg5RjAKKyNkZWZpbmUgU0lPQ1BST1RPUFJJVkFURSAgIDB4ODlFMAorCitp
bnQgaW9jdGwgKGludCwgaW50LCAuLi4pOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRp
ZgorI2VuZGlmCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 16:31:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 16:31:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8S0E-00085l-GR; Thu, 12 Sep 2019 16:31:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ooAB=XH=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8S0D-00085a-6L
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 16:31:25 +0000
X-Inumbo-ID: bb6fb1ce-d57a-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id bb6fb1ce-d57a-11e9-978d-bc764e2007e4;
 Thu, 12 Sep 2019 16:31:12 +0000 (UTC)
IronPort-SDR: Q6fh2QUzvc8XBOxHs+FHZ38oAxFvimbuAhntlaZ/DfxesWPn166R+VmEQR538o/kZBaM/DOoai
 ZS66s35/p2Ig==
IronPort-PHdr: =?us-ascii?q?9a23=3AnXk3mhVTESfZqlmoAZnFpfOlPhXV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbBKEt8tkgFKBZ4jH8fUM07OQ7/m7HzRdqsfQ+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvndFe+tayGdsKFmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQejC+zzxTFFnWP23bQg3u?=
 =?us-ascii?q?g9CwzKwA4tEtQTu3rUttX1M6ISXPirwanP1jXDc/JW2THg44bObxAhueyMVq?=
 =?us-ascii?q?93fMXNzkkvDB/FjlSWqYD/OzOVy/wNs3WA4uV8TuKjkXYnqxxqrTS13McsjZ?=
 =?us-ascii?q?DEi4QIwV7H7SV02Js5KNKlREJhYtOpEIFcuz+EO4Z0WM8vTXlktDs1x7Ebo5?=
 =?us-ascii?q?K2fygHxI45yxPRZfGLaZWE7x39WOuXPDx2nmhqeKiliBa36UWgz+r8WdSq31?=
 =?us-ascii?q?tStSpFl8XMtmgK1xzO9siLUvt98Vml2TaIzw3T9ORELlo1larfMZIu3qUwmo?=
 =?us-ascii?q?ALsUTeBSD6gl/2jKiOekUl/Oin9fjnb637qpKTKoN4kALzP6Q0lsChH+g1MB?=
 =?us-ascii?q?ICUmaD9eS5zrLj/En5QLtQjv0xl6nUqIzVJcMApq6lAg9V1Jwv6xKiDze+zd?=
 =?us-ascii?q?QVhmUILElfdBKfkojmIEvCIOr/DfunmVSjjC9rx+zaPr3mGpjNK3nDkLHgfb?=
 =?us-ascii?q?Z68E5Q0Rc8ws5B551KDrEMO/bzWk7qtNzEFR81KQO1zPjhCNln0YMeQ22PCL?=
 =?us-ascii?q?eDMKzOqV+I+v4vI+6UaY8OuDbyMeIl6OTojXMjgl8SZ6+p3YcXaH+iGPRpOU?=
 =?us-ascii?q?CZbGHqgtgfDWgKuhAxQ/fwhFKcTD4AL0q1Cqc94DA8E8eqAJnOQqipgaedx2?=
 =?us-ascii?q?GrE5sQYXpJWX6WFnK9XIKfR/YKIAaPOtIpxjcDTqSgTcklyAmznAThjaJ6JK?=
 =?us-ascii?q?zO/XtL5trYyNFp6riLxlkJ/jtuApHF3g=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ALAAClcXpdXQPjVY1mGwEBAQEDAQE?=
 =?us-ascii?q?BBwMBAQGBUwYBAQELAYFtgWogEiqEIYgcYKEyFIFnCQEBAToBAgEBgUuCdAK?=
 =?us-ascii?q?DADQJDgIDCQEBBQEBAQEBBgQBBhoWBYVrgjoigm8GI0QSECUCGA4CAkMUGYJ?=
 =?us-ascii?q?XS4IPqwCBMoVLgzOBSYEMKAGHHoYxP4Rhg30MFA+DI4JYBIxKEolDligHgiR?=
 =?us-ascii?q?kBI87hEgngmOWJ6hGIVqBNjMag1+CTheOJT0BATGBBgEBjEyCVAEB?=
X-IPAS-Result: =?us-ascii?q?A2ALAAClcXpdXQPjVY1mGwEBAQEDAQEBBwMBAQGBUwYBA?=
 =?us-ascii?q?QELAYFtgWogEiqEIYgcYKEyFIFnCQEBAToBAgEBgUuCdAKDADQJDgIDCQEBB?=
 =?us-ascii?q?QEBAQEBBgQBBhoWBYVrgjoigm8GI0QSECUCGA4CAkMUGYJXS4IPqwCBMoVLg?=
 =?us-ascii?q?zOBSYEMKAGHHoYxP4Rhg30MFA+DI4JYBIxKEolDligHgiRkBI87hEgngmOWJ?=
 =?us-ascii?q?6hGIVqBNjMag1+CTheOJT0BATGBBgEBjEyCVAEB?=
X-IronPort-AV: E=Sophos;i="5.64,497,1559509200"; 
   d="scan'208";a="4783635"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 12 Sep 2019 19:31:05 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 432811A60130;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id Iu0U8dOxUY8X; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 251CC1A600CF;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id iGfV8Ust7YGx; Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 04E121A600D6;
 Thu, 12 Sep 2019 19:31:05 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 12 Sep 2019 19:30:53 +0300
Message-Id: <20190912163055.31744-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
References: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
MIME-Version: 1.0
Subject: [Minios-devel] [UNIKRAFT PATCH 1/3] lib/nolibc: Introduce
 musl-imported subdirectory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: sharan.santhanam@neclab.eu
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SnVzdCBsaWtlIHdlIGRpZCByZWNlbnRseSB3aXRoIG5ld2xpYiBnbHVlIGNvZGUsIHdlIHdpbGwg
cHV0IHRoZSBjb2RlIGltcG9ydGVkCmZyb20gbXVzbCB1bmRlciB0aGUgbXVzbC1pbXBvcnRlZC8g
c3ViZGlyZWN0b3J5LCBrZWVwaW5nIHRoZSBzYW1lIGhpZXJhcmNoeSBhcwppbiB0aGUgb3JpZ2lu
YWwgY29kZS4gVGhpcyBwYXRjaCBhbHNvIGFkZHMgdGhlIENPUFlSSUdIVCBzbyB0aGF0IHdlIGNh
biBza2lwCmFkZGluZyBsaWNlbnNlcyB0byBlYWNoIGltcG9ydGVkIGZpbGUuCgpTaWduZWQtb2Zm
LWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGxpYi9ub2xpYmMv
bXVzbC1pbXBvcnRlZC9DT1BZUklHSFQgfCAxODkgKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysKIDEgZmlsZSBjaGFuZ2VkLCAxODkgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IGxpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9DT1BZUklHSFQKCmRpZmYgLS1naXQgYS9saWIvbm9s
aWJjL211c2wtaW1wb3J0ZWQvQ09QWVJJR0hUIGIvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL0NP
UFlSSUdIVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMjUyNWZmYjUKLS0t
IC9kZXYvbnVsbAorKysgYi9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvQ09QWVJJR0hUCkBAIC0w
LDAgKzEsMTg5IEBACittdXNsIGFzIGEgd2hvbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIGZvbGxv
d2luZyBzdGFuZGFyZCBNSVQgbGljZW5zZToKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29weXJpZ2h0IMKp
IDIwMDUtMjAxOSBSaWNoIEZlbGtlciwgZXQgYWwuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdy
YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9m
IHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisi
U29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1v
ZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2Vs
bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20g
dGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz
dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9W
SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJ
TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitN
RVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05J
TkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg
SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklM
SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNF
LCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FS
RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworQXV0aG9ycy9jb250cmlidXRvcnMgaW5jbHVkZToKKworQS4gV2lsY294CitBbGV4
IERvd2FkCitBbGV4IFN1eWtvdgorQWxleGFuZGVyIE1vbmFrb3YKK0FuZHJlIE1jQ3VyZHkKK0Fu
ZHJldyBLZWxsZXkKK0FudGhvbnkgRy4gQmFzaWxlCitBcmljIEJlbHNpdG8KK0FydmlkIFBpY2Np
YW5pCitCYXJ0b3N6IEJyYWNoYWN6ZWsKK0JlbmphbWluIFBldGVyc29uCitCb2JieSBCaW5naGFt
CitCb3JpcyBCcmV6aWxsb24KK0JyZW50IENvb2sKK0NocmlzIFNwaWVnZWwKK0Nsw6ltZW50IFZh
c3NldXIKK0RhbmllbCBNaWNheQorRGFuaWVsIFNhYm9nYWwKK0RhdXJuaW1hdG9yCitEYXZpZCBD
YXJsaWVyCitEYXZpZCBFZGVsc29obgorRGVueXMgVmxhc2Vua28KK0RtaXRyeSBJdmFub3YKK0Rt
aXRyeSBWLiBMZXZpbgorRHJldyBEZVZhdWx0CitFbWlsIFJlbm5lciBCZXJ0aGluZworRmFuZ3J1
aSBTb25nCitGZWxpeCBGaWV0a2F1CitGZWxpeCBKYW5kYQorR2lhbmx1Y2EgQW56b2xpbgorSGF1
a2UgTWVocnRlbnMKK0hlIFgKK0hpbHRqbyBQb3N0aHVtYQorSXNhYWMgRHVuaGFtCitKYXlkZWVw
IFBhdGlsCitKZW5zIEd1c3RlZHQKK0plcmVteSBIdW50d29yaworSm8tUGhpbGlwcCBXaWNoCitK
b2FraW0gU2luZGhvbHQKK0pvaG4gU3BlbmNlcgorSm9zaWFoIFdvcmNlc3RlcgorSnVsaWVuIFJh
bXNlaWVyCitKdXN0aW4gQ29ybWFjaworS2FhcmxlIFJpdHZhbmVuCitLaGVtIFJhagorS3lsaWUg
TWNDbGFpbgorTGVhaCBOZXVraXJjaGVuCitMdWNhIEJhcmJhdG8KK0x1a2EgUGVya292CitNIEZh
cmthcy1EeWNrIChTdHJha2UpCitNYWhlc2ggQm9kYXBhdGkKK01hcmt1cyBXaWNobWFubgorTWFz
YW5vcmkgT2dpbm8KK01pY2hhZWwgQ2xhcmsKK01pY2hhZWwgRm9ybmV5CitNaWtoYWlsIEtyZW1u
eW92CitOYXRhbmFlbCBDb3BhCitOaWNob2xhcyBKLiBLYWluCitvcmMKK1Bhc2NhbCBDdW9xCitQ
YXRyaWNrIE9wcGVubGFuZGVyCitQZXRyIEhvc2VrCitQZXRyIFNrb2NpaworUGllcnJlIENhcnJp
ZXIKK1JlaW5pIFVyYmFuCitSaWNoIEZlbGtlcgorUmljaGFyZCBQZW5uaW5ndG9uCitSeWFuIEZh
aXJmYXgKK1NhbXVlbCBIb2xsYW5kCitTZWdldiBGaW5lcgorU2hpegorc2luCitTb2xhciBEZXNp
Z25lcgorU3RlZmFuIEtyaXN0aWFuc3NvbgorU3RlZmFuIE8nUmVhcgorU3phYm9sY3MgTmFneQor
VGltbyBUZXLDpHMKK1RydXR6IEJlaG4KK1ZhbGVudGluIE9jaHMKK1dpbGwgRGlldHoKK1dpbGxp
YW0gSGFkZG9uCitXaWxsaWFtIFBpdGNvY2sKKworUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBh
cmUgZGVyaXZlZCBmcm9tIHRoaXJkLXBhcnR5IHdvcmtzIGxpY2Vuc2VkCit1bmRlciB0ZXJtcyBj
b21wYXRpYmxlIHdpdGggdGhlIGFib3ZlIE1JVCBsaWNlbnNlOgorCitUaGUgVFJFIHJlZ3VsYXIg
ZXhwcmVzc2lvbiBpbXBsZW1lbnRhdGlvbiAoc3JjL3JlZ2V4L3JlZyogYW5kCitzcmMvcmVnZXgv
dHJlKikgaXMgQ29weXJpZ2h0IMKpIDIwMDEtMjAwOCBWaWxsZSBMYXVyaWthcmkgYW5kIGxpY2Vu
c2VkCit1bmRlciBhIDItY2xhdXNlIEJTRCBsaWNlbnNlIChsaWNlbnNlIHRleHQgaW4gdGhlIHNv
dXJjZSBmaWxlcykuIFRoZQoraW5jbHVkZWQgdmVyc2lvbiBoYXMgYmVlbiBoZWF2aWx5IG1vZGlm
aWVkIGJ5IFJpY2ggRmVsa2VyIGluIDIwMTIsIGluCit0aGUgaW50ZXJlc3RzIG9mIHNpemUsIHNp
bXBsaWNpdHksIGFuZCBuYW1lc3BhY2UgY2xlYW5saW5lc3MuCisKK011Y2ggb2YgdGhlIG1hdGgg
bGlicmFyeSBjb2RlIChzcmMvbWF0aC8qIGFuZCBzcmMvY29tcGxleC8qKSBpcworQ29weXJpZ2h0
IMKpIDE5OTMsMjAwNCBTdW4gTWljcm9zeXN0ZW1zIG9yCitDb3B5cmlnaHQgwqkgMjAwMy0yMDEx
IERhdmlkIFNjaHVsdHogb3IKK0NvcHlyaWdodCDCqSAyMDAzLTIwMDkgU3RldmVuIEcuIEthcmds
IG9yCitDb3B5cmlnaHQgwqkgMjAwMy0yMDA5IEJydWNlIEQuIEV2YW5zIG9yCitDb3B5cmlnaHQg
wqkgMjAwOCBTdGVwaGVuIEwuIE1vc2hpZXIKK2FuZCBsYWJlbGxlZCBhcyBzdWNoIGluIGNvbW1l
bnRzIGluIHRoZSBpbmRpdmlkdWFsIHNvdXJjZSBmaWxlcy4gQWxsCitoYXZlIGJlZW4gbGljZW5z
ZWQgdW5kZXIgZXh0cmVtZWx5IHBlcm1pc3NpdmUgdGVybXMuCisKK1RoZSBBUk0gbWVtY3B5IGNv
ZGUgKHNyYy9zdHJpbmcvYXJtL21lbWNweV9lbC5TKSBpcyBDb3B5cmlnaHQgwqkgMjAwOAorVGhl
IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBhbmQgaXMgbGljZW5zZWQgdW5kZXIgYSB0d28t
Y2xhdXNlIEJTRAorbGljZW5zZS4gSXQgd2FzIHRha2VuIGZyb20gQmlvbmljIGxpYmMsIHVzZWQg
b24gQW5kcm9pZC4KKworVGhlIGltcGxlbWVudGF0aW9uIG9mIERFUyBmb3IgY3J5cHQgKHNyYy9j
cnlwdC9jcnlwdF9kZXMuYykgaXMKK0NvcHlyaWdodCDCqSAxOTk0IERhdmlkIEJ1cnJlbi4gSXQg
aXMgbGljZW5zZWQgdW5kZXIgYSBCU0QgbGljZW5zZS4KKworVGhlIGltcGxlbWVudGF0aW9uIG9m
IGJsb3dmaXNoIGNyeXB0IChzcmMvY3J5cHQvY3J5cHRfYmxvd2Zpc2guYykgd2FzCitvcmlnaW5h
bGx5IHdyaXR0ZW4gYnkgU29sYXIgRGVzaWduZXIgYW5kIHBsYWNlZCBpbnRvIHRoZSBwdWJsaWMK
K2RvbWFpbi4gVGhlIGNvZGUgYWxzbyBjb21lcyB3aXRoIGEgZmFsbGJhY2sgcGVybWlzc2l2ZSBs
aWNlbnNlIGZvciB1c2UKK2luIGp1cmlzZGljdGlvbnMgdGhhdCBtYXkgbm90IHJlY29nbml6ZSB0
aGUgcHVibGljIGRvbWFpbi4KKworVGhlIHNtb290aHNvcnQgaW1wbGVtZW50YXRpb24gKHNyYy9z
dGRsaWIvcXNvcnQuYykgaXMgQ29weXJpZ2h0IMKpIDIwMTEKK1ZhbGVudGluIE9jaHMgYW5kIGlz
IGxpY2Vuc2VkIHVuZGVyIGFuIE1JVC1zdHlsZSBsaWNlbnNlLgorCitUaGUgeDg2XzY0IHBvcnQg
d2FzIHdyaXR0ZW4gYnkgTmljaG9sYXMgSi4gS2FpbiBhbmQgaXMgbGljZW5zZWQgdW5kZXIKK3Ro
ZSBzdGFuZGFyZCBNSVQgdGVybXMuCisKK1RoZSBtaXBzIGFuZCBtaWNyb2JsYXplIHBvcnRzIHdl
cmUgb3JpZ2luYWxseSB3cml0dGVuIGJ5IFJpY2hhcmQKK1Blbm5pbmd0b24gZm9yIHVzZSBpbiB0
aGUgZWxsY2MgcHJvamVjdC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGFkYXB0ZWQKK2J5IFJpY2gg
RmVsa2VyIGZvciBidWlsZCBzeXN0ZW0gYW5kIGNvZGUgY29udmVudGlvbnMgZHVyaW5nIHVwc3Ry
ZWFtCitpbnRlZ3JhdGlvbi4gSXQgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHN0YW5kYXJkIE1JVCB0
ZXJtcy4KKworVGhlIG1pcHM2NCBwb3J0IHdhcyBjb250cmlidXRlZCBieSBJbWFnaW5hdGlvbiBU
ZWNobm9sb2dpZXMgYW5kIGlzCitsaWNlbnNlZCB1bmRlciB0aGUgc3RhbmRhcmQgTUlUIHRlcm1z
LgorCitUaGUgcG93ZXJwYyBwb3J0IHdhcyBhbHNvIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBSaWNo
YXJkIFBlbm5pbmd0b24sCithbmQgbGF0ZXIgc3VwcGxlbWVudGVkIGFuZCBpbnRlZ3JhdGVkIGJ5
IEpvaG4gU3BlbmNlci4gSXQgaXMgbGljZW5zZWQKK3VuZGVyIHRoZSBzdGFuZGFyZCBNSVQgdGVy
bXMuCisKK0FsbCBvdGhlciBmaWxlcyB3aGljaCBoYXZlIG5vIGNvcHlyaWdodCBjb21tZW50cyBh
cmUgb3JpZ2luYWwgd29ya3MKK3Byb2R1Y2VkIHNwZWNpZmljYWxseSBmb3IgdXNlIGFzIHBhcnQg
b2YgdGhpcyBsaWJyYXJ5LCB3cml0dGVuIGVpdGhlcgorYnkgUmljaCBGZWxrZXIsIHRoZSBtYWlu
IGF1dGhvciBvZiB0aGUgbGlicmFyeSwgb3IgYnkgb25lIG9yIG1vcmUKK2NvbnRpYnV0b3JzIGxp
c3RlZCBhYm92ZS4gRGV0YWlscyBvbiBhdXRob3JzaGlwIG9mIGluZGl2aWR1YWwgZmlsZXMKK2Nh
biBiZSBmb3VuZCBpbiB0aGUgZ2l0IHZlcnNpb24gY29udHJvbCBoaXN0b3J5IG9mIHRoZSBwcm9q
ZWN0LiBUaGUKK29taXNzaW9uIG9mIGNvcHlyaWdodCBhbmQgbGljZW5zZSBjb21tZW50cyBpbiBl
YWNoIGZpbGUgaXMgaW4gdGhlCitpbnRlcmVzdCBvZiBzb3VyY2UgdHJlZSBzaXplLgorCitJbiBh
ZGRpdGlvbiwgcGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgYWxsIHB1YmxpYyBoZWFk
ZXIgZmlsZXMKKyhpbmNsdWRlLyogYW5kIGFyY2gvKi9iaXRzLyopIGFuZCBjcnQgZmlsZXMgaW50
ZW5kZWQgdG8gYmUgbGlua2VkIGludG8KK2FwcGxpY2F0aW9ucyAoY3J0LyosIGxkc28vZGxzdGFy
dC5jLCBhbmQgYXJjaC8qL2NydF9hcmNoLmgpIHRvIG9taXQKK3RoZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCBwZXJtaXNzaW9uIG5vdGljZSBvdGhlcndpc2UgcmVxdWlyZWQgYnkgdGhlCitsaWNlbnNl
LCBhbmQgdG8gdXNlIHRoZXNlIGZpbGVzIHdpdGhvdXQgYW55IHJlcXVpcmVtZW50IG9mCithdHRy
aWJ1dGlvbi4gVGhlc2UgZmlsZXMgaW5jbHVkZSBzdWJzdGFudGlhbCBjb250cmlidXRpb25zIGZy
b206CisKK0JvYmJ5IEJpbmdoYW0KK0pvaG4gU3BlbmNlcgorTmljaG9sYXMgSi4gS2FpbgorUmlj
aCBGZWxrZXIKK1JpY2hhcmQgUGVubmluZ3RvbgorU3RlZmFuIEtyaXN0aWFuc3NvbgorU3phYm9s
Y3MgTmFneQorCithbGwgb2Ygd2hvbSBoYXZlIGV4cGxpY2l0bHkgZ3JhbnRlZCBzdWNoIHBlcm1p
c3Npb24uCisKK1RoaXMgZmlsZSBwcmV2aW91c2x5IGNvbnRhaW5lZCB0ZXh0IGV4cHJlc3Npbmcg
YSBiZWxpZWYgdGhhdCBtb3N0IG9mCit0aGUgZmlsZXMgY292ZXJlZCBieSB0aGUgYWJvdmUgZXhj
ZXB0aW9uIHdlcmUgc3VmZmljaWVudGx5IHRyaXZpYWwgbm90Cit0byBiZSBzdWJqZWN0IHRvIGNv
cHlyaWdodCwgcmVzdWx0aW5nIGluIGNvbmZ1c2lvbiBvdmVyIHdoZXRoZXIgaXQKK25lZ2F0ZWQg
dGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgaW4gdGhlIGxpY2Vuc2UuIEluIHRoZSBzcGlyaXQgb2YK
K3Blcm1pc3NpdmUgbGljZW5zaW5nLCBhbmQgb2Ygbm90IGhhdmluZyBsaWNlbnNpbmcgaXNzdWVz
IGJlaW5nIGFuCitvYnN0YWNsZSB0byBhZG9wdGlvbiwgdGhhdCB0ZXh0IGhhcyBiZWVuIHJlbW92
ZWQuCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 16:32:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 16:32:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8S1U-000882-MF; Thu, 12 Sep 2019 16:32:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v+ft=XH=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i8S1S-00087x-MA
 for minios-devel@lists.xen.org; Thu, 12 Sep 2019 16:32:42 +0000
X-Inumbo-ID: f0c6f6f2-d57a-11e9-978d-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f0c6f6f2-d57a-11e9-978d-bc764e2007e4;
 Thu, 12 Sep 2019 16:32:41 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id o184so761558wme.3
 for <minios-devel@lists.xen.org>; Thu, 12 Sep 2019 09:32:41 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=LcQRCpT2/mDGGlAUl3CeRW3UDT57UVXlHVngXX2PX5A=;
 b=nJdhglWLczGPlaBdD3NAkx9N/H5f7zEsHQgmpAApfEdxWDFJSVCk5XxR46jrBPh7F4
 4oMTLukdZl2oVH8472opBSkWfpvGY4r7OuuBqlxffk24mN+4KA3SQ/NbU0ro/wE3+NzW
 XOEhMtOC53LxiZRnJrdGVAwb8/BTZD2UEShx+99mkxx9YEVvKUUM2ubR89m+KX8ns+uO
 NrsL6wrUZC4PIH3a3yHomdnT+crT6UmW9tE4KDEC7aLLb30hKQF2GHe6yZWuWREAifBc
 ZVi7U7xmCXJMtJtEr2ziopQIv54WOS7nRYRGLHSA/F4Mq8lLGlmeDFveeBVhzZxH6Ppv
 MS1g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=LcQRCpT2/mDGGlAUl3CeRW3UDT57UVXlHVngXX2PX5A=;
 b=VmZNMEpUWfXOw3wJNzd31uc7hfhkZWIV0dxVgoPziUEJ1W3ct/sFuuzCwiZOxSbC8H
 X8ExFGwpf+sUKIRwRe2Y3thTwAgPGClcfbwVdkkH7ZyWY/CqzZkn3GXDlcQMO7Eu95ZT
 QxRs+PsNWzT7HW/EMDhj26Fy9/R/2eGYwmLKACRj+DPqsBVn+1ln4cgYKwjVfz++3OU1
 +aBKXuvFkujE7VTwVdrDhmMn5d6EIj+s6VyW9wcCNrpD1j7Tg+U91glXD3oG9ZqFn1I7
 kXi66bGq50BZJZvOx0j4PxlWOrXkQgmNPYYgqbIDCSPMSpUu5goAKFTujeleYs3x5dke
 eXtQ==
X-Gm-Message-State: APjAAAWh4nCFzHs5hNs6vbIHKW/yC94guyrpXQk363/Ma9tdE6he7FTj
 0BAggUw3Fc5PCTgLCH9nkRxwD9zq
X-Google-Smtp-Source: APXvYqw2Pl77Pa7oGP+v5Ph8OFVd7Ke6VNFHPiJc4MpUeCzvcgT/KjtDnp6w4zqyfd4WfyG5lU464A==
X-Received: by 2002:a7b:c351:: with SMTP id l17mr803258wmj.44.1568305960759;
 Thu, 12 Sep 2019 09:32:40 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id u68sm738511wmu.12.2019.09.12.09.32.39
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 12 Sep 2019 09:32:40 -0700 (PDT)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, minios-devel@lists.xen.org
References: <20190911115608.29314-1-costin.lupu@cs.pub.ro>
 <a5fff9a6-b67b-c3c7-c07d-444cdb74ac2a@neclab.eu>
 <53c4086c-d769-38ab-fe2e-08d9f9cbf5d4@gmail.com>
 <5c6d2f83-040d-5227-b80f-e73b8edc179a@neclab.eu>
 <ee5e2f0d-1994-1ee5-6a95-87a11e79cee4@gmail.com>
 <1f06f87b-819d-828f-acae-d1fc314d8be1@neclab.eu>
 <0810b9fc-3403-e972-9335-519f60d8c464@gmail.com>
 <62ce73c1-bdf9-c026-1d29-93647edc079a@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <e1cb7779-5325-1992-1adb-71c6a036ac55@gmail.com>
Date: Thu, 12 Sep 2019 19:32:39 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <62ce73c1-bdf9-c026-1d29-93647edc079a@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: sys_ioctl() - Fix
 build with nolibc
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xMi8xOSA2OjAxIFBNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IAo+IE9uIDkvMTIv
MTkgNDo0MCBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+IE9uIDkvMTIvMTkgNTozMiBQTSwgU2hh
cmFuIFNhbnRoYW5hbSB3cm90ZToKPj4+IEhlbGxvIENvc3RpbiwKPj4+Cj4+PiBBbHNvIG5vdGlj
ZWQgYSBjaGVja3BhdGNoIGVycm9yIHdpdGggdGhpcyBwYXRjaC4KPj4+Cj4+PiBUaGFua3MgJiBS
ZWdhcmRzCj4+Pgo+Pj4gU2hhcmFuCj4+Pgo+Pj4KPj4+IE9uIDkvMTEvMTkgNjo0NCBQTSwgQ29z
dGluIEx1cHUgd3JvdGU6Cj4+Pj4gT24gOS8xMS8xOSA2OjI3IFBNLCBTaGFyYW4gU2FudGhhbmFt
IHdyb3RlOgo+Pj4+PiBPbiA5LzExLzE5IDM6MzggUE0sIENvc3RpbiBMdXB1IHdyb3RlOgo+Pj4+
Pj4gSGkgU2hhcmFuLAo+Pj4+Pj4KPj4+Pj4+IE9uIDkvMTEvMTkgMzo1NiBQTSwgU2hhcmFuIFNh
bnRoYW5hbSB3cm90ZToKPj4+Pj4+PiBIZWxsbyBDb3N0aW4sCj4+Pj4+Pj4KPj4+Pj4+PiBUaGUg
Zml4IHNlZW1zIGZpbmUuIFBsZWFzZSBmaW5kIHRoZSBxdWVzdGlvbiBpbmxpbmUuCj4+Pj4+Pj4K
Pj4+Pj4+PiBUaGFua3MgJiBSZWdhcmRzCj4+Pj4+Pj4KPj4+Pj4+PiBTaGFyYW4KPj4+Pj4+Pgo+
Pj4+Pj4+IE9uIDkvMTEvMTkgMTo1NiBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+Pj4+Pj4+IENv
bW1pdCAzZGNjY2QwNCBpbnRyb2R1Y2VkIGhhbmRsaW5nIG9mIEZJT0NMRVggYW5kIEZJT05DTEVY
Cj4+Pj4+Pj4+IHJlcXVlc3RzLgo+Pj4+Pj4+PiBIb3dldmVyLAo+Pj4+Pj4+PiB0aGVzZSBmbGFn
cyBhcmUgbm90IGRlZmluZWQgaW4gbm9saWJjLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBTaWduZWQtb2Zm
LWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgo+Pj4+Pj4+PiAtLS0KPj4+
Pj4+Pj4gwqDCoMKgwqAgbGliL25vbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oIHwgMAo+Pj4+Pj4+
IFdoeSBkbyB3ZSBpbnRyb2R1Y2UgYSBlbXB0eSBmaWxlPyBJbiBuZXdsaWIgd2UgaW50cm9kdWNl
cyBhIGhlYWRlcgo+Pj4+Pj4+IGltcG9ydGVkIGZyb20gbXVzbC4KPj4+Pj4+Pgo+Pj4+Pj4gSSBk
aWRuJ3QgZ2V0IHRoYXQgY29tcGxldGVseSwgZG9lcyBpdCBidWlsZCBvbiB5b3VyIHNpZGU/IERv
IHlvdSBnZXQKPj4+Pj4+IGFueQo+Pj4+Pj4gZXJyb3JzL3dhcm5pbmdzPwo+Pj4+PiBObywgYnV0
IEkgZ3Vlc3Mgd2l0aCBhIHJldmlldyBwcm9jZXNzIHlvdSBkbyBjbGFyaWZ5IHdoeSB5b3UgbWFk
ZQo+Pj4+PiBjZXJ0YWluIGNob2ljZXMuCj4+Pj4+Pj4gV2h5IGRvbid0IHdlIHVzZSB0aGUgc2Ft
ZSBmaWxlIGhlcmU/Cj4+Pj4+PiBUaGlzIGlzIGFuIG9wZW4gcXVlc3Rpb24uIFRoZSB0aGluZyBp
cyB0aGF0IG5ld2xpYiBpdHNlbGYgc2VlbXMgdG8KPj4+Pj4+IGJlIGEKPj4+Pj4+IHBvb3IgY2hv
aWNlIGlmIHdlIGRvIGNvcHkgc28gbXVjaCBjb2RlIGZyb20gbXVzbC4gTm93IGdldHRpbmcgYmFj
ayB0bwo+Pj4+Pj4gbm9saWJjLCBpZiB3ZSBkbyBhZGQgbW9yZSBhbmQgbW9yZSBjb2RlIGZyb20g
bXVzbCB0aGVuIHdlIGNhbiBzaW1wbHkKPj4+Pj4+IGdldAo+Pj4+Pj4gcmlkIG9mIGl0IHRvbyBh
bmQgdXNlIG11c2wgaW5zdGVhZC4gSW4gY29uY2x1c2lvbiwgSSBmYWlsIHRvIHNlZQo+Pj4+Pj4g
d2h5IHdlCj4+Pj4+PiBzaG91bGQgY29weSBjb2RlIHRvIG5vbGliYyBpbnN0ZWFkIHVzaW5nIG11
c2wgZGlyZWN0bHkuCj4+Pj4+IEJ1dCBpbiB0aGlzIGNhc2Ugd2UgYXJlIGludHJvZHVjaW5nIHRo
ZSBGSU9OQ0xFWCBhbmQgRklPQ0xFWCB3aXRoaW4KPj4+Pj4gdGhlCj4+Pj4+IGNvcmUgVW5pa3Jh
ZnQgYW5kIGl0IGlzIGV4cGVjdGVkIHRvIHdvcmsgd2l0aCBub2xpYmMuIEluc3RlYWQgb2YKPj4+
Pj4gYWRkaW5nCj4+Pj4+ICNpZmRlZiBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gbWFrZSBpdCBmZWF0
dXJlIGNvbXBsZXRlLgo+Pj4+IE5vdyB3aHkgd291bGQgeW91IHNheSBpdCBpcyBleHBlY3RlZCB0
byB3b3JrIHdpdGggbm9saWJjPyBUaGUgdHdvIGZsYWdzCj4+Pj4gYXJlIGFjdHVhbGx5IHJlbGF0
ZWQgd2l0aCBjbG9zZS1vbi1leGVjIGxvZ2ljLiBXaHkgd291bGQgYW55IGFwcAo+Pj4+IHJ1bm5p
bmcKPj4+PiBvbiB0b3Agb2YgVW5pa3JhZnQgYW5kIHdoaWNoIHdvdWxkIG5vdCB1c2UgYSBsaWJj
IGltcGxlbWVudGF0aW9uCj4+Pj4gbmVlZCB0bwo+Pj4+IGNhbGwgZXhlYygpIHNpbmNlIHRoaXMg
aXMgbm90IHBvc3NpYmxlPyBCZXNpZGVzIHRoaXMsIHRoZXJlIGlzIG5vCj4+Pj4gZXhlYygpCj4+
Pj4gZnVuY3Rpb24gaW4gbm9saWJjLgo+Pj4gwqBGcm9tIG15IHBlcnNwZWN0aXZlLAo+Pj4KPj4+
IGZjbnRsKGZkLCBGX1NFVEZELCBGRF9DTE9FWEVDKTsKPj4+Cj4+PiBhbmQKPj4+Cj4+PiBpb2N0
bChmZCwgRklPQ0xFWCk7Cj4+Pgo+Pj4gaXMgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuIFRoZSBm
b3JtZXIgaXMgc3VwcG9ydGVkIGluIG5vbGliYyB3aGlsZSB0aGUKPj4+IGxhdHRlciBpcyBub3Qu
IEFzIGZhciBhcyBleGVjIGNhbGwgaXMgY29uY2VybmVkLCB3ZSBkb24ndCBzdXBwb3J0IGV4ZWMK
Pj4+IGZhbWlseSBpbiBlaXRoZXIgb2YgdGhlIGxpYmMgZXhjZXB0IGZvciBnbHVlIHRvIGNvbXBp
bGUgaXQuIFNvIHdoZW4gZXhlYwo+Pj4gZmFtaWx5IGlzIGF2YWlsYWJsZSB3ZSBjYW4gZGVjaWRl
IG9uIHRoZSBsaWJjcyB0byBzdXBwb3J0IHRoZSBleGVjLgo+PiBJIHNlZSwgdGhlIHByZWNlZGVu
dCB3YXMgY3JlYXRlZCBhbHJlYWR5LiBJJ2xsIHNlbmQgdGhlIHYyIHdpdGggdGhlCj4+IGhlYWRl
ciBjb3BpZWQgZnJvbSBtdXNsLiBUbyByZWNhcCwgSSBjb3BpZWQgdGhlIGhlYWRlciBvbmx5IHRv
IG5ld2xpYgo+PiBnbHVlIGNvZGUgaW4gdGhlIHByZXZpb3VzIHBhdGNoLgo+Pgo+PiBBIHF1ZXN0
aW9uIHRoYXQgd2UgbmVlZCB0byBhbnN3ZXIgdGhvdWdoIGlzIHVudGlsIHdoZW4gc2hhbGwgd2Ug
Y29udGludWUKPj4gY29weWluZyBmaWxlcyBmcm9tIG11c2wgdG8gYm90aCBuZXdsaWIgYW5kIG5v
bGliYz8gQmVjYXVzZSB0aGlzIGlzCj4+IGdldHRpbmcgcmlkaWN1bG91cyBhbmQgbm9uLXByb2R1
Y3RpdmUuCj4gCj4gSSBhZ3JlZSB3ZSBuZWVkIHRvIGJldHRlciBkZWZpbmUgdGhlIGRpZmZlcmVu
Y2UgYmV0d2VlbiBleHRlcm5hbCBtb3JlCj4gY29tcGxldGUgbGliYyBhbmQgbm9saWIuCgpTaGFy
YW4sCgpJJ3ZlIGp1c3Qgc2VudCB0aGUgc2VyaWVzIGZvciB0aGUgY29tcGxldGUgcG9ydGluZyBv
ZiBpb2N0bC5oIGhlYWRlcnMgLQoiQWRkIGlvY3RsLmggaGVhZGVycyB0byBub2xpYmMiLgoKQ2hl
ZXJzLApDb3N0aW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 12 17:08:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 12 Sep 2019 17:08:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8SZi-0002Jp-HE; Thu, 12 Sep 2019 17:08:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=UuS5=XH=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1i8SZh-0002Jj-4T
 for minios-devel@lists.xenproject.org; Thu, 12 Sep 2019 17:08:05 +0000
X-Inumbo-ID: e1d1a958-d57f-11e9-b76c-bc764e2007e4
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e1d1a958-d57f-11e9-b76c-bc764e2007e4;
 Thu, 12 Sep 2019 17:08:04 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1568308084;
 h=from:to:subject:date:message-id:content-id:
 content-transfer-encoding:mime-version;
 bh=zy7NV+27it6c/TiYVhLxvrG1Se3NPHekzVGsJbb0hJc=;
 b=YqQn30yynvnPhPEcKstewsjMiZFP4Z71jiw0ZDBXKfo741rDc4A2s4wZ
 yxieo1edq+In1ih1esQaUbKRi+oPGI93tom7EKmDNvWG+j1NSVBPQsJnB
 lQnHj+FkhJ2VOLiCFNro0Z6OAK21Q6lgsgubWzALVN6GKQsSJmR8Job08 s=;
Authentication-Results: esa4.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: 8SSfjNa6dQVlnDAFaJkTJHEWAIUrmiitXaisuTf9KzRGCBCwn/HqLKUsHVSTRdfaKsLJxJ/rC8
 8qRv/Nj64ITTZTCYHi1DoiEjMCmsncO6WaLXfPV7TvBL3oXguICn7SaYMsJd29R4JgFTOsQRqS
 VjExY4VoCKXugC6T+v8T98PhnJvQZHBKFoCkrog32ZOxmZ2mWyABjW2hNehOFFDXl/xx540kV6
 H/+gwgmiM1RUI6KejKMNmqxEwhIFDkETcMu3qJ0zxgvo6mB5XoDUwqMVtKtK6VsopyeHGQVRkr
 lMs=
X-SBRS: 2.7
X-MesageID: 5792119
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,497,1559534400"; 
   d="scan'208";a="5792119"
From: Lars Kurth <lars.kurth@citrix.com>
To: "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: Re-confirming mini-os.git maintainers?
Thread-Index: AQHVaYyhvtwgn2+XCEGve9a0I/aTig==
Date: Thu, 12 Sep 2019 17:08:00 +0000
Message-ID: <1F56062E-056C-4034-92DB-B22BBAB9834C@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <DB3FD424AD6AB0448B1F0D95289020DD@citrix.com>
MIME-Version: 1.0
Subject: [Minios-devel] Re-confirming mini-os.git maintainers?
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgYWxsLA0KDQppbiBvcmRlciB0byBtYWtlIHNvbWUgb2Ygb3VyIHN1Ym1pc3Npb24gdG9vbHMg
d29yayAoc2VlIGh0dHBzOi8vd2lraS54ZW5wcm9qZWN0Lm9yZy93aWtpL1N1Ym1pdHRpbmdfWGVu
X1Byb2plY3RfUGF0Y2hlcyNVc2luZ19hZGRfbWFpbnRhaW5lcnMucGxfLjI4b3JfZ2V0X21haW50
YWluZXIucGwuMjlfZnJvbV9vdXRzaWRlX29mX3hlbi5naXQNCikgSSB3YW50ZWQgdG8gY2hlY2sg
d2hvIGlzIGN1cnJlbnRseSBtaW5pLW9zIG1haW50YWluZXIuIFRoaXMgaXMgc3VjaCB0aGF0IEkg
Y2FuIGNyYWZ0IGFuZCBzdWJtaXQgYSBNQUlOVEFJTkVSUyBmaWxlIHN1Y2ggYXMNCg0KVGhpcyBm
aWxlIGZvbGxvd3MgdGhlIHNhbWUgY29udmVudGlvbnMgYXMgb3V0bGluZWQgaW4NCnhlbi5naXQ6
TUFJTlRBSU5FUlMuIFBsZWFzZSByZWZlciB0byB0aGUgZmlsZSBpbiB4ZW4uZ2l0DQpmb3IgbW9y
ZSBpbmZvcm1hdGlvbi4NCg0KVEhFIFJFU1QNCk06CU1BSU5UQUlORVIxIDxtYWludGFpbmVyMUBl
bWFpbC5jb20+DQpNOglNQUlOVEFJTkVSMiA8bWFpbnRhaW5lcjJAZW1haWwuY29tPg0KTDoJeGVu
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQpTOglTdXBwb3J0ZWQNCkY6CSoNCkY6CSovDQpW
Ogl4ZW4tbWFpbnRhaW5lcnMtMQ0KDQpSZWdhcmRzDQpMYXJzDQoNCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 08:55:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 08:55:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8hMz-0006Hu-VA; Fri, 13 Sep 2019 08:55:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8hMy-0006Ho-Cy
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 08:55:56 +0000
X-Inumbo-ID: 47a0f4f9-d604-11e9-95aa-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 47a0f4f9-d604-11e9-95aa-12813bfff9fa;
 Fri, 13 Sep 2019 08:55:50 +0000 (UTC)
IronPort-SDR: dFsQVpHhYDUiHsPzCNYHjnhb9sHW64T59W1VyRd/p4asRG+MC6MJsn5kbLp07tpVi+azX4nX+g
 7ggXXAhXBiiw==
IronPort-PHdr: =?us-ascii?q?9a23=3AOTfRMxH4RiRyKSLBjZ4yx51GYnF86YWxBRYc79?=
 =?us-ascii?q?8ds5kLTJ7zrsywAkXT6L1XgUPTWs2DsrQY0rGQ6/+rATJIoc7Y9ixbKtoUD1?=
 =?us-ascii?q?5NoP5VtjRoONSCB0z/IayiRA0BN+MGamVY+WqmO1NeAsf0ag6aiHSz6TkPBk?=
 =?us-ascii?q?e3blItdaz6FYHIksu4yf259YHNbAVUnjq9Zq55IAmroQnLucQanIVvJrwtxh?=
 =?us-ascii?q?bLrXdEZ+Vbzn5sKV6Pghrw/Mi98IN9/yhKp/4t68tMWrjmcqolSrBVEC4oOH?=
 =?us-ascii?q?0v6s3xshnDQwqP5n8CXWgTjxFFHQvL4gzkU5noqif1ufZz1yecPc3tULA7Qi?=
 =?us-ascii?q?+i4LtxSB/pkygIKTg0+3zKh8NqjaJbpBWhpwFjw4PRfYqYOuZycr/bcNgHXm?=
 =?us-ascii?q?dKQNpfWDJdDYO9d4sPDvQOPeBEr4nmulACqQKyCRSwCO/zzzNFgGL9068n3O?=
 =?us-ascii?q?Q7CQzI3BIuEc8AvnrXq9v4L7seXfyvwaXU1zjPc+9a1DHg44bIaBAhpvSMUK?=
 =?us-ascii?q?pufMrW0kkvCwLFjlONooLjIjOVzvkNuHWc4uV8UuKvkHInqwB3ojS1wscsl5?=
 =?us-ascii?q?HJhp8Ox1/Y7iV12p41JcCjR0Jhe96kF4JduieHPIV1WsMvW3xktSknxrEcup?=
 =?us-ascii?q?O2fDIGxIo5yxPdcfCKfZCE7g/sWeqMOzt1h3JodKihixu8/0Ws0PDwW8aq3F?=
 =?us-ascii?q?tMsyFLiMPDtmoX2BzW8sWHT/x98Vq/1juXzADT7/1EIVgzlarGN54t2r4wmY?=
 =?us-ascii?q?QXsUTEBiL2hkD2g7WXdkUg4OSn9//nbq/+pp+BLIB4kBv+MqM2lsy+B+Q3LB?=
 =?us-ascii?q?QOUnCG9emzybHv5070TbVQgvEojKXUsorWKMoDqq68GQBV04Ij6xilDzeh1d?=
 =?us-ascii?q?QVhWUILFVeeBKbjojpPUvCIPTlDfennlShiytkx+vcMr35H5XCNWLPkK3mfb?=
 =?us-ascii?q?pl8U5T1BIzzcxD55JTErwBJOj8WlTtu9zFFBM2KAu0w+n6B9pn0IMTXWOCD7?=
 =?us-ascii?q?SWMKPXq1CI5+YvL/OQa48SvTb3M+Il6OL2jX8lhV8derGk3Z4WaHC+H/RmJF?=
 =?us-ascii?q?6ZbWPxjdgfD2cFoA4+QffuiF2DSj5Te22yU7gz5z4lDoKqF4DDRpqigO/J4C?=
 =?us-ascii?q?DuG5xQZ2ddT1yBD3rsX4GFQOsXLjKfJIlmiDNXe6KmTtoK0gqytQmy76d/M6?=
 =?us-ascii?q?KA8SoDqZPlktxo//D7ngp07SF+Sd6ahTLeB1pol38FEmdllJt0plZwnxLaif?=
 =?us-ascii?q?B1?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2B/AAAnWHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBVgQBAQsBgW2BF1MgEiqNHYkSiGePTYFnCQEBASkRAQIBAYFLgnSDBDc?=
 =?us-ascii?q?GDgIDCQEBBQEBAQEBBgQBBhoWBYVfDII6KQGDFFIwHzMiLYJXSwGBagMhqzs?=
 =?us-ascii?q?zhUuCRQ1hgUmBNAGHHoM7gnY/gRGCXXOCGoFvFAuFfwSMWCSIBYEelWdBB4I?=
 =?us-ascii?q?kZASGGYkiVIN0J4I0L0GKcYp1jzeIUosOhS83gXozGnOCbAmCDgEzAxeLSYJ?=
 =?us-ascii?q?cPQEBMYEGAQGMTIJUAQE?=
X-IPAS-Result: =?us-ascii?q?A2B/AAAnWHtdXQPjVY1mHAEBAQQBAQcEAQGBVgQBAQsBg?=
 =?us-ascii?q?W2BF1MgEiqNHYkSiGePTYFnCQEBASkRAQIBAYFLgnSDBDcGDgIDCQEBBQEBA?=
 =?us-ascii?q?QEBBgQBBhoWBYVfDII6KQGDFFIwHzMiLYJXSwGBagMhqzszhUuCRQ1hgUmBN?=
 =?us-ascii?q?AGHHoM7gnY/gRGCXXOCGoFvFAuFfwSMWCSIBYEelWdBB4IkZASGGYkiVIN0J?=
 =?us-ascii?q?4I0L0GKcYp1jzeIUosOhS83gXozGnOCbAmCDgEzAxeLSYJcPQEBMYEGAQGMT?=
 =?us-ascii?q?IJUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,500,1559509200"; 
   d="scan'208";a="4785631"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 11:55:48 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 44E381A6006B;
 Fri, 13 Sep 2019 11:55:48 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id As3Uy2Mu43jn; Fri, 13 Sep 2019 11:55:48 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2B3C01A60143;
 Fri, 13 Sep 2019 11:55:48 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id nJ__bv-P9wGY; Fri, 13 Sep 2019 11:55:48 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 083481A6006B;
 Fri, 13 Sep 2019 11:55:48 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 11:55:42 +0300
Message-Id: <20190913085542.576-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v2] lib/vfscore: Add anonymous pipe
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Bogdan Lascu <lascu.bogdan96@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQm9nZGFuIExhc2N1IDxsYXNjdS5ib2dkYW45NkBnbWFpbC5jb20+CgpUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgYW5vbnltb3VzIHBpcGVzLiBUaGUgdW5kZXJseWluZyBidWZmZXIg
aXMgYSByaW5nCmJ1ZmZlciB3aG9zZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyLiBUaGUgY3Jl
YXRpbmcgb2YgaXRzIGZpbGUgZGVzY3JpcHRvcnMKZm9sbG93cyBjbG9zZWx5IHRoZSBpbXBsZW1l
bnRhdGlvbiBmb3Igc29ja2V0cyBpbiBsd2lwIGdsdWUgY29kZS4KClNpZ25lZC1vZmYtYnk6IEJv
Z2RhbiBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBDb3N0
aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGxpYi92ZnNjb3JlL01ha2VmaWxl
LnVrICAgfCAgIDIgKwogbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51ayB8ICAgMSArCiBsaWIvdmZz
Y29yZS9waXBlLmMgICAgICAgIHwgNTcyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDU3NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliL3Zmc2NvcmUvcGlwZS5jCgpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvTWFrZWZp
bGUudWsgYi9saWIvdmZzY29yZS9NYWtlZmlsZS51awppbmRleCA3OTg3OGYyNi4uZTM2YzkyMTcg
MTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrCisrKyBiL2xpYi92ZnNjb3JlL01h
a2VmaWxlLnVrCkBAIC0xNCw2ICsxNCw4IEBAIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZT
Q09SRV9CQVNFKS90YXNrLmMKIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNF
KS9sb29rdXAuYwogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2ZvcHMu
YwogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL3N1YnJfdWlvLmMKK0xJ
QlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9waXBlLmMKK0xJQlZGU0NPUkVf
UElQRV9GTEFHUy15ICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10eXBlCiBMSUJWRlNDT1JFX1NSQ1Mt
eSArPSAkKExJQlZGU0NPUkVfQkFTRSkvZXh0cmEubGQKIAogCmRpZmYgLS1naXQgYS9saWIvdmZz
Y29yZS9leHBvcnRzeW1zLnVrIGIvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51awppbmRleCBlM2Q2
NzIzYS4uN2YwMmM2NjcgMTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsKKysr
IGIvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51awpAQCAtNzksMyArNzksNCBAQCBkZW50cnlfYWxs
b2MKIGRyZWxlCiB2cmVsZQogZmNudGwKK3BpcGUKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL3Bp
cGUuYyBiL2xpYi92ZnNjb3JlL3BpcGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMC4uMjUyZTY1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdmZzY29yZS9waXBlLmMKQEAg
LTAsMCArMSw1NzIgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2Ug
Ki8KKy8qCisgKiBBdXRob3JzOiBCb2dkYW4tR2VvcmdlIExhc2N1IDxsYXNjdS5ib2dkYW45NkBn
bWFpbC5jb20+CisgKiAgICAgICAgICBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJv
PgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBC
dWNoYXJlc3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBC
RQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQor
ICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5P
VCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworCisjaW5jbHVkZSA8
c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx2ZnNjb3JlL2ZpbGUuaD4K
KyNpbmNsdWRlIDx2ZnNjb3JlL2ZzLmg+CisjaW5jbHVkZSA8dmZzY29yZS9tb3VudC5oPgorI2lu
Y2x1ZGUgPHZmc2NvcmUvdm5vZGUuaD4KKyNpbmNsdWRlIDx1ay93YWl0Lmg+CisjaW5jbHVkZSA8
c3lzL2lvY3RsLmg+CisKKy8qIFdlIHVzZSB0aGUgZGVmYXVsdCBzaXplIGluIExpbnV4IGtlcm5l
bCAqLworI2RlZmluZSBQSVBFX01BWF9TSVpFCSgxIDw8IDE2KQorCitzdHJ1Y3QgcGlwZV9idWYg
eworCS8qIFRoZSBidWZmZXIgKi8KKwljaGFyICpkYXRhOworCS8qIFRoZSBidWZmZXIgY2FwYWNp
dHksIGFsd2F5cyBhIHBvd2VyIG9mIDIgKi8KKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5OworCS8q
IFByb2R1Y2VyIGluZGV4ICovCisJdW5zaWduZWQgbG9uZyBwcm9kOworCS8qIENvbnN1bWVyIGlu
ZGV4ICovCisJdW5zaWduZWQgbG9uZyBjb25zOworCisJLyogUmVhZCBsb2NrICovCisJc3RydWN0
IHVrX211dGV4IHJkbG9jazsKKwkvKiBXcml0ZSBsb2NrICovCisJc3RydWN0IHVrX211dGV4IHdy
bG9jazsKKworCS8qIFJlYWRlcnMgcXVldWUgKi8KKwlzdHJ1Y3QgdWtfd2FpdHEgcmR3cTsKKwkv
KiBXcml0ZXJzIHF1ZXVlICovCisJc3RydWN0IHVrX3dhaXRxIHdyd3E7Cit9OworCisjZGVmaW5l
IFBJUEVfQlVGX0lEWChidWYsIG4pICAgICgoYnVmKS0+Y2FwYWNpdHkgJiAobikpCisjZGVmaW5l
IFBJUEVfQlVGX1BST0RfSURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgoYnVmKSwgKGJ1ZiktPnByb2Qp
CisjZGVmaW5lIFBJUEVfQlVGX0NPTlNfSURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgoYnVmKSwgKGJ1
ZiktPmNvbnMpCisKK3N0cnVjdCBwaXBlX2ZpbGUgeworCS8qIFBpcGUgYnVmZmVyICovCisJc3Ry
dWN0IHBpcGVfYnVmICpidWY7CisJLyogV3JpdGUgcmVmZXJlbmNlIGNvdW50ICovCisJaW50IHdf
cmVmY291bnQ7CisJLyogUmVhZCByZWZlcmVuY2UgY291bnQgKi8KKwlpbnQgcl9yZWZjb3VudDsK
KwkvKiBGbGFncyAqLworCWludCBmbGFnczsKK307CisKKworc3RhdGljIHN0cnVjdCBwaXBlX2J1
ZiAqcGlwZV9idWZfYWxsb2MoaW50IGNhcGFjaXR5KQoreworCXN0cnVjdCBwaXBlX2J1ZiAqcGlw
ZV9idWY7CisKKwlVS19BU1NFUlQoUE9XRVJfT0ZfMihjYXBhY2l0eSkpOworCisJcGlwZV9idWYg
PSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKCpwaXBlX2J1ZikpOwor
CWlmICghcGlwZV9idWYpCisJCXJldHVybiBOVUxMOworCisJcGlwZV9idWYtPmRhdGEgPSB1a19t
YWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgY2FwYWNpdHkpOworCWlmICghcGlwZV9idWYt
PmRhdGEpIHsKKwkJdWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCBwaXBlX2J1Zik7CisJ
CXJldHVybiBOVUxMOworCX0KKworCXBpcGVfYnVmLT5jYXBhY2l0eSA9IGNhcGFjaXR5OworCXBp
cGVfYnVmLT5jb25zID0gMDsKKwlwaXBlX2J1Zi0+cHJvZCA9IDA7CisJdWtfbXV0ZXhfaW5pdCgm
cGlwZV9idWYtPnJkbG9jayk7CisJdWtfbXV0ZXhfaW5pdCgmcGlwZV9idWYtPndybG9jayk7CisJ
dWtfd2FpdHFfaW5pdCgmcGlwZV9idWYtPnJkd3EpOworCXVrX3dhaXRxX2luaXQoJnBpcGVfYnVm
LT53cndxKTsKKworCXJldHVybiBwaXBlX2J1ZjsKK30KKwordm9pZCBwaXBlX2J1Zl9mcmVlKHN0
cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpCit7CisJdWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVs
dCgpLCBwaXBlX2J1Zi0+ZGF0YSk7CisJdWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCBw
aXBlX2J1Zik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBpcGVfYnVmX2dldF9hdmFpbGFi
bGUoY29uc3Qgc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikKK3sKKwlyZXR1cm4gcGlwZV9idWYt
PnByb2QgLSBwaXBlX2J1Zi0+Y29uczsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9i
dWZfZ2V0X2ZyZWVfc3BhY2Uoc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikKK3sKKwlyZXR1cm4g
cGlwZV9idWYtPmNhcGFjaXR5IC0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7Cit9
CisKK3N0YXRpYyBpbnQgcGlwZV9idWZfY2FuX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9i
dWYpCit7CisJcmV0dXJuIHBpcGVfYnVmX2dldF9mcmVlX3NwYWNlKHBpcGVfYnVmKSA+IDA7Cit9
CisKK3N0YXRpYyBpbnQgcGlwZV9idWZfY2FuX3JlYWQoc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1
ZikKK3sKKwlyZXR1cm4gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1ZikgPiAwOworfQor
CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl93cml0ZShzdHJ1Y3QgcGlwZV9idWYgKnBp
cGVfYnVmLAorCQlzdHJ1Y3QgaW92ZWMgKmlvdmVjLCBzaXplX3QgaW92ZWNfb2ZmKQoreworCXVu
c2lnbmVkIGxvbmcgcHJvZF9pZHgsIHRvX3dyaXRlOworCXZvaWQgKmlvdmVjX2RhdGEgPSBpb3Zl
Yy0+aW92X2Jhc2UgKyBpb3ZlY19vZmY7CisJc2l6ZV90IGlvdl9sZW4gPSBpb3ZlYy0+aW92X2xl
biAtIGlvdmVjX29mZjsKKworCXByb2RfaWR4ID0gUElQRV9CVUZfUFJPRF9JRFgocGlwZV9idWYp
OworCXRvX3dyaXRlID0gTUlOKHBpcGVfYnVmX2dldF9mcmVlX3NwYWNlKHBpcGVfYnVmKSwgaW92
X2xlbik7CisJaWYgKHRvX3dyaXRlID09IDApCisJCWdvdG8gb3V0OworCisJLyogQ29weSBpbiBv
bmUgcGllY2UgKi8KKwlpZiAocHJvZF9pZHggKyB0b193cml0ZSA8PSBwaXBlX2J1Zi0+Y2FwYWNp
dHkpCisJCW1lbWNweShwaXBlX2J1Zi0+ZGF0YSArIHByb2RfaWR4LCBpb3ZlY19kYXRhLCB0b193
cml0ZSk7CisKKwllbHNlIHsKKwkJaW50IGZpcnN0X2NvcHlfYnl0ZXMsIHNlY29uZF9jb3B5X2J5
dGVzOworCisJCS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgKi8KKwkJZmlyc3RfY29weV9ieXRlcyA9
IHBpcGVfYnVmLT5jYXBhY2l0eSAtIHByb2RfaWR4OworCQltZW1jcHkocGlwZV9idWYtPmRhdGEg
KyBwcm9kX2lkeCwKKwkJCQlpb3ZlY19kYXRhLAorCQkJCWZpcnN0X2NvcHlfYnl0ZXMpOworCisJ
CS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0ICovCisJCXNlY29uZF9jb3B5X2J5dGVzID0gcHJvZF9p
ZHggKyB0b193cml0ZSAtIHBpcGVfYnVmLT5jYXBhY2l0eTsKKwkJbWVtY3B5KHBpcGVfYnVmLT5k
YXRhLAorCQkJCWlvdmVjX2RhdGEgKyBmaXJzdF9jb3B5X2J5dGVzLAorCQkJCXNlY29uZF9jb3B5
X2J5dGVzKTsKKwl9CisKKwkvKiBVcGRhdGUgcHJvZHVjZXIgKi8KKwlwaXBlX2J1Zi0+cHJvZCAr
PSB0b193cml0ZTsKKworb3V0OgorCXJldHVybiB0b193cml0ZTsKK30KKworc3RhdGljIHVuc2ln
bmVkIGxvbmcgcGlwZV9idWZfcmVhZChzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmLAorCQlzdHJ1
Y3QgaW92ZWMgKmlvdmVjLCBzaXplX3QgaW92ZWNfb2ZmKQoreworCXVuc2lnbmVkIGxvbmcgY29u
c19pZHgsIHRvX3JlYWQ7CisJdm9pZCAqaW92ZWNfZGF0YSA9IGlvdmVjLT5pb3ZfYmFzZSArIGlv
dmVjX29mZjsKKwlzaXplX3QgaW92X2xlbiA9IGlvdmVjLT5pb3ZfbGVuIC0gaW92ZWNfb2ZmOwor
CisJY29uc19pZHggPSBQSVBFX0JVRl9DT05TX0lEWChwaXBlX2J1Zik7CisJdG9fcmVhZCA9IE1J
TihwaXBlX2J1Zl9nZXRfYXZhaWxhYmxlKHBpcGVfYnVmKSwgaW92X2xlbik7CisJaWYgKHRvX3Jl
YWQgPT0gMCkKKwkJZ290byBvdXQ7CisKKwkvKiBDb3B5IGluIG9uZSBwaWVjZSAqLworCWlmIChj
b25zX2lkeCArIHRvX3JlYWQgPD0gcGlwZV9idWYtPmNhcGFjaXR5KQorCQltZW1jcHkoaW92ZWNf
ZGF0YSwgcGlwZV9idWYtPmRhdGEgKyBjb25zX2lkeCwgdG9fcmVhZCk7CisKKwllbHNlIHsKKwkJ
aW50IGZpcnN0X2NvcHlfYnl0ZXM7CisJCWludCBzZWNvbmRfY29weV9ieXRlczsKKworCQkvKiBD
b3B5IHRoZSBmaXJzdCBwYXJ0ICovCisJCWZpcnN0X2NvcHlfYnl0ZXMgPSBwaXBlX2J1Zi0+Y2Fw
YWNpdHkgLSBwaXBlX2J1Zi0+Y29uczsKKwkJbWVtY3B5KGlvdmVjX2RhdGEsCisJCQkJcGlwZV9i
dWYtPmRhdGEgKyBjb25zX2lkeCwKKwkJCQlmaXJzdF9jb3B5X2J5dGVzKTsKKworCQkvKiBDb3B5
IHRoZSBzZWNvbmQgcGFydCAqLworCQlzZWNvbmRfY29weV9ieXRlcyA9IGNvbnNfaWR4ICsgdG9f
cmVhZCAtIHBpcGVfYnVmLT5jYXBhY2l0eTsKKwkJbWVtY3B5KGlvdmVjX2RhdGEgKyBmaXJzdF9j
b3B5X2J5dGVzLAorCQkJCXBpcGVfYnVmLT5kYXRhLAorCQkJCXNlY29uZF9jb3B5X2J5dGVzKTsK
Kwl9CisKKwkvKiBVcGRhdGUgY29uc3VtZXIgKi8KKwlwaXBlX2J1Zi0+Y29ucyArPSB0b19yZWFk
OworCitvdXQ6CisJcmV0dXJuIHRvX3JlYWQ7Cit9CisKK3N0cnVjdCBwaXBlX2ZpbGUgKnBpcGVf
ZmlsZV9hbGxvYyhpbnQgY2FwYWNpdHksIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGlwZV9maWxl
ICpwaXBlX2ZpbGU7CisKKwlwaXBlX2ZpbGUgPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1
bHQoKSwgc2l6ZW9mKCpwaXBlX2ZpbGUpKTsKKwlpZiAoIXBpcGVfZmlsZSkKKwkJcmV0dXJuIE5V
TEw7CisKKwlwaXBlX2ZpbGUtPmJ1ZiA9IHBpcGVfYnVmX2FsbG9jKGNhcGFjaXR5KTsKKwlpZiAo
IXBpcGVfZmlsZS0+YnVmKSB7CisJCXVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgcGlw
ZV9maWxlKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcGlwZV9maWxlLT53X3JlZmNvdW50ID0g
MTsKKwlwaXBlX2ZpbGUtPnJfcmVmY291bnQgPSAxOworCXBpcGVfZmlsZS0+ZmxhZ3MgPSBmbGFn
czsKKworCXJldHVybiBwaXBlX2ZpbGU7Cit9CisKK3ZvaWQgcGlwZV9maWxlX2ZyZWUoc3RydWN0
IHBpcGVfZmlsZSAqcGlwZV9maWxlKQoreworCXBpcGVfYnVmX2ZyZWUocGlwZV9maWxlLT5idWYp
OworCXVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgcGlwZV9maWxlKTsKK30KKworc3Rh
dGljIGludCBwaXBlX3dyaXRlKHN0cnVjdCB2bm9kZSAqdm5vZGUsCisJCXN0cnVjdCB1aW8gKmJ1
ZiwgaW50IGlvZmxhZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUg
PSB2bm9kZS0+dl9kYXRhOworCXN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUt
PmJ1ZjsKKwlib29sIG5vbmJsb2NraW5nID0gZmFsc2U7IC8qIFRPRE8gaGFuZGxlIG5vbmJsb2Nr
aW5nICovCisJYm9vbCBkYXRhX2F2YWlsYWJsZSA9IHRydWU7CisJaW50IHVpb19pZHggPSAwOwor
CisJaWYgKCFwaXBlX2ZpbGUtPnJfcmVmY291bnQpIHsKKwkJLyogVE9ETyBiZWZvcmUgcmV0dXJu
aW5nIHRoZSBlcnJvciwgc2VuZCBhIFNJR1BJUEUgc2lnbmFsICovCisJCXJldHVybiAtRVBJUEU7
CisJfQorCisJdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPndybG9jayk7CisJd2hpbGUgKGRhdGFf
YXZhaWxhYmxlICYmIHVpb19pZHggPCBidWYtPnVpb19pb3ZjbnQpIHsKKwkJc3RydWN0IGlvdmVj
ICppb3ZlYyA9ICZidWYtPnVpb19pb3ZbdWlvX2lkeF07CisJCXVuc2lnbmVkIGxvbmcgb2ZmID0g
MDsKKworCQl3aGlsZSAob2ZmIDwgaW92ZWMtPmlvdl9sZW4pIHsKKwkJCXVuc2lnbmVkIGxvbmcg
d3JpdHRlbl9ieXRlczsKKworCQkJd3JpdHRlbl9ieXRlcyA9IHBpcGVfYnVmX3dyaXRlKHBpcGVf
YnVmLCBpb3ZlYywgb2ZmKTsKKwkJCWlmICh3cml0dGVuX2J5dGVzID09IDApIHsKKwkJCQkvKiBO
byBkYXRhICovCisJCQkJaWYgKG5vbmJsb2NraW5nKSB7CisJCQkJCWRhdGFfYXZhaWxhYmxlID0g
ZmFsc2U7CisJCQkJCWJyZWFrOworCisJCQkJfSBlbHNlIHsKKwkJCQkJLyogV2FpdCB1bnRpbCBk
YXRhIGF2YWlsYWJsZSAqLworCQkJCQl3aGlsZSAoIXBpcGVfYnVmX2Nhbl93cml0ZShwaXBlX2J1
ZikpIHsKKwkJCQkJCXVrX211dGV4X3VubG9jaygmcGlwZV9idWYtPndybG9jayk7CisJCQkJCQl1
a193YWl0cV93YWl0X2V2ZW50KCZwaXBlX2J1Zi0+d3J3cSwKKwkJCQkJCQlwaXBlX2J1Zl9jYW5f
d3JpdGUocGlwZV9idWYpKTsKKwkJCQkJCXVrX211dGV4X2xvY2soJnBpcGVfYnVmLT53cmxvY2sp
OworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCS8qIFVwZGF0ZSBieXRlcyB3cml0
dGVuX2J5dGVzLiAqLworCQkJCWJ1Zi0+dWlvX3Jlc2lkIC09IHdyaXR0ZW5fYnl0ZXM7CisKKwkJ
CQlvZmYgKz0gd3JpdHRlbl9ieXRlczsKKworCQkJCS8qIHdha2Ugc29tZSByZWFkZXJzICovCisJ
CQkJdWtfd2FpdHFfd2FrZV91cCgmcGlwZV9idWYtPnJkd3EpOworCQkJfQorCQl9CisKKwkJdWlv
X2lkeCsrOworCX0KKwl1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT53cmxvY2spOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlwZV9yZWFkKHN0cnVjdCB2bm9kZSAqdm5vZGUsCisJ
CXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZmlsZSwKKwkJc3RydWN0IHVpbyAqYnVmLCBp
bnQgaW9mbGFnIF9fdW51c2VkKQoreworCXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSA9IHZu
b2RlLT52X2RhdGE7CisJc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZiA9IHBpcGVfZmlsZS0+YnVm
OworCWJvb2wgbm9uYmxvY2tpbmcgPSAodmZzY29yZV9maWxlLT5mX2ZsYWdzICYgT19OT05CTE9D
Syk7CisJYm9vbCBkYXRhX2F2YWlsYWJsZSA9IHRydWU7CisJaW50IHVpb19pZHggPSAwOworCisJ
dWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPnJkbG9jayk7CisJaWYgKG5vbmJsb2NraW5nICYmICFw
aXBlX2J1Zl9jYW5fcmVhZChwaXBlX2J1ZikpIHsKKwkJdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1
Zi0+cmRsb2NrKTsKKwkJcmV0dXJuIEVBR0FJTjsKKwl9CisKKwl3aGlsZSAoZGF0YV9hdmFpbGFi
bGUgJiYgdWlvX2lkeCA8IGJ1Zi0+dWlvX2lvdmNudCkgeworCQlzdHJ1Y3QgaW92ZWMgKmlvdmVj
ID0gJmJ1Zi0+dWlvX2lvdlt1aW9faWR4XTsKKwkJdW5zaWduZWQgbG9uZyBvZmYgPSAwOworCisJ
CXdoaWxlIChvZmYgPCBpb3ZlYy0+aW92X2xlbikgeworCQkJdW5zaWduZWQgbG9uZyByZWFkX2J5
dGVzOworCisJCQlyZWFkX2J5dGVzID0gcGlwZV9idWZfcmVhZChwaXBlX2J1ZiwgaW92ZWMsIG9m
Zik7CisJCQlpZiAocmVhZF9ieXRlcyA9PSAwKSB7CisJCQkJLyogTm8gZGF0YSAqLworCQkJCWlm
IChub25ibG9ja2luZykgeworCQkJCQlkYXRhX2F2YWlsYWJsZSA9IGZhbHNlOworCQkJCQlicmVh
azsKKworCQkJCX0gZWxzZSB7CisJCQkJCS8qIFdhaXQgdW50aWwgZGF0YSBhdmFpbGFibGUgKi8K
KwkJCQkJd2hpbGUgKCFwaXBlX2J1Zl9jYW5fcmVhZChwaXBlX2J1ZikpIHsKKwkJCQkJCXVrX211
dGV4X3VubG9jaygmcGlwZV9idWYtPnJkbG9jayk7CisJCQkJCQl1a193YWl0cV93YWl0X2V2ZW50
KCZwaXBlX2J1Zi0+cmR3cSwKKwkJCQkJCQlwaXBlX2J1Zl9jYW5fcmVhZChwaXBlX2J1ZikpOwor
CQkJCQkJdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPnJkbG9jayk7CisJCQkJCX0KKwkJCQl9CisK
KwkJCX0gZWxzZSB7CisJCQkJLyogVXBkYXRlIGJ5dGVzIHJlYWQgKi8KKwkJCQlidWYtPnVpb19y
ZXNpZCAtPSByZWFkX2J5dGVzOworCisJCQkJb2ZmICs9IHJlYWRfYnl0ZXM7CisKKwkJCQkvKiB3
YWtlIHNvbWUgd3JpdGVycyAqLworCQkJCXVrX3dhaXRxX3dha2VfdXAoJnBpcGVfYnVmLT53cndx
KTsKKwkJCX0KKwkJfQorCisJCXVpb19pZHgrKzsKKwl9CisJdWtfbXV0ZXhfdW5sb2NrKCZwaXBl
X2J1Zi0+cmRsb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBpcGVfY2xvc2Uo
c3RydWN0IHZub2RlICp2bm9kZSwKKwkJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxl
KQoreworCXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSA9IHZub2RlLT52X2RhdGE7CisKKwlV
S19BU1NFUlQodmZzY29yZV9maWxlLT5mX2RlbnRyeS0+ZF92bm9kZSA9PSB2bm9kZSk7CisJVUtf
QVNTRVJUKHZub2RlLT52X3JlZmNudCA9PSAxKTsKKworCWlmICh2ZnNjb3JlX2ZpbGUtPmZfZmxh
Z3MgJiBVS19GUkVBRCkKKwkJcGlwZV9maWxlLT5yX3JlZmNvdW50LS07CisKKwlpZiAodmZzY29y
ZV9maWxlLT5mX2ZsYWdzICYgVUtfRldSSVRFKQorCQlwaXBlX2ZpbGUtPndfcmVmY291bnQtLTsK
KworCWlmICghcGlwZV9maWxlLT5yX3JlZmNvdW50ICYmICFwaXBlX2ZpbGUtPndfcmVmY291bnQp
CisJCXBpcGVfZmlsZV9mcmVlKHBpcGVfZmlsZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGlj
IGludCBwaXBlX3NlZWsoc3RydWN0IHZub2RlICp2bm9kZSBfX3VudXNlZCwKKwkJCXN0cnVjdCB2
ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZmlsZSBfX3VudXNlZCwKKwkJCW9mZl90IG9mZjEgX191bnVz
ZWQsIG9mZl90IG9mZjIgX191bnVzZWQpCit7CisJZXJybm8gPSBFU1BJUEU7CisJcmV0dXJuIC0x
OworfQorCitzdGF0aWMgaW50IHBpcGVfaW9jdGwoc3RydWN0IHZub2RlICp2bm9kZSwKKwkJc3Ry
dWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxlIF9fdW51c2VkLAorCQl1bnNpZ25lZCBsb25n
IGNvbSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUgPSB2bm9k
ZS0+dl9kYXRhOworCXN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUtPmJ1ZjsK
KworCXN3aXRjaCAoY29tKSB7CisJY2FzZSBGSU9OUkVBRDoKKwkJdWtfbXV0ZXhfbG9jaygmcGlw
ZV9idWYtPnJkbG9jayk7CisJCSooKGludCAqKSBkYXRhKSA9IHBpcGVfYnVmX2dldF9hdmFpbGFi
bGUocGlwZV9idWYpOworCQl1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT5yZGxvY2spOworCQly
ZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKyNkZWZpbmUg
cGlwZV9vcGVuICAgICAgICAoKHZub3Bfb3Blbl90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVm
aW5lIHBpcGVfZnN5bmMgICAgICAgKCh2bm9wX2ZzeW5jX3QpIHZmc2NvcmVfdm9wX251bGxvcCkK
KyNkZWZpbmUgcGlwZV9yZWFkZGlyICAgICAoKHZub3BfcmVhZGRpcl90KSB2ZnNjb3JlX3ZvcF9l
aW52YWwpCisjZGVmaW5lIHBpcGVfbG9va3VwICAgICAgKCh2bm9wX2xvb2t1cF90KSB2ZnNjb3Jl
X3ZvcF9laW52YWwpCisjZGVmaW5lIHBpcGVfY3JlYXRlICAgICAgKCh2bm9wX2NyZWF0ZV90KSB2
ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHBpcGVfcmVtb3ZlICAgICAgKCh2bm9wX3JlbW92
ZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHBpcGVfcmVuYW1lICAgICAgKCh2bm9w
X3JlbmFtZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHBpcGVfbWtkaXIgICAgICAg
KCh2bm9wX21rZGlyX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgcGlwZV9ybWRpciAg
ICAgICAoKHZub3Bfcm1kaXJfdCkgdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSBwaXBlX2dl
dGF0dHIgICAgICgodm5vcF9nZXRhdHRyX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUg
cGlwZV9zZXRhdHRyICAgICAoKHZub3Bfc2V0YXR0cl90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApCisj
ZGVmaW5lIHBpcGVfaW5hY3RpdmUgICAgKCh2bm9wX2luYWN0aXZlX3QpIHZmc2NvcmVfdm9wX2Vp
bnZhbCkKKyNkZWZpbmUgcGlwZV90cnVuY2F0ZSAgICAoKHZub3BfdHJ1bmNhdGVfdCkgdmZzY29y
ZV92b3BfbnVsbG9wKQorI2RlZmluZSBwaXBlX2xpbmsgICAgICAgICgodm5vcF9saW5rX3QpIHZm
c2NvcmVfdm9wX2VwZXJtKQorI2RlZmluZSBwaXBlX2NhY2hlICAgICAgICgodm5vcF9jYWNoZV90
KSBOVUxMKQorI2RlZmluZSBwaXBlX3JlYWRsaW5rICAgICgodm5vcF9yZWFkbGlua190KSB2ZnNj
b3JlX3ZvcF9laW52YWwpCisjZGVmaW5lIHBpcGVfc3ltbGluayAgICAgKCh2bm9wX3N5bWxpbmtf
dCkgdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHBpcGVfZmFsbG9jYXRlICAgKCh2bm9wX2Zh
bGxvY2F0ZV90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApCisKK3N0YXRpYyBzdHJ1Y3Qgdm5vcHMgcGlw
ZV92bm9wcyA9IHsKKwkudm9wX29wZW4gICAgICA9IHBpcGVfb3BlbiwKKwkudm9wX2Nsb3NlICAg
ICA9IHBpcGVfY2xvc2UsCisJLnZvcF9yZWFkICAgICAgPSBwaXBlX3JlYWQsCisJLnZvcF93cml0
ZSAgICAgPSBwaXBlX3dyaXRlLAorCS52b3Bfc2VlayAgICAgID0gcGlwZV9zZWVrLAorCS52b3Bf
aW9jdGwgICAgID0gcGlwZV9pb2N0bCwKKwkudm9wX2ZzeW5jICAgICA9IHBpcGVfZnN5bmMsCisJ
LnZvcF9yZWFkZGlyICAgPSBwaXBlX3JlYWRkaXIsCisJLnZvcF9sb29rdXAgICAgPSBwaXBlX2xv
b2t1cCwKKwkudm9wX2NyZWF0ZSAgICA9IHBpcGVfY3JlYXRlLAorCS52b3BfcmVtb3ZlICAgID0g
cGlwZV9yZW1vdmUsCisJLnZvcF9yZW5hbWUgICAgPSBwaXBlX3JlbmFtZSwKKwkudm9wX21rZGly
ICAgICA9IHBpcGVfbWtkaXIsCisJLnZvcF9ybWRpciAgICAgPSBwaXBlX3JtZGlyLAorCS52b3Bf
Z2V0YXR0ciAgID0gcGlwZV9nZXRhdHRyLAorCS52b3Bfc2V0YXR0ciAgID0gcGlwZV9zZXRhdHRy
LAorCS52b3BfaW5hY3RpdmUgID0gcGlwZV9pbmFjdGl2ZSwKKwkudm9wX3RydW5jYXRlICA9IHBp
cGVfdHJ1bmNhdGUsCisJLnZvcF9saW5rICAgICAgPSBwaXBlX2xpbmssCisJLnZvcF9jYWNoZSAg
ICAgPSBwaXBlX2NhY2hlLAorCS52b3BfZmFsbG9jYXRlID0gcGlwZV9mYWxsb2NhdGUsCisJLnZv
cF9yZWFkbGluayAgPSBwaXBlX3JlYWRsaW5rLAorCS52b3Bfc3ltbGluayAgID0gcGlwZV9zeW1s
aW5rCit9OworCisjZGVmaW5lIHBpcGVfdmdldCAgKCh2ZnNvcF92Z2V0X3QpIHZmc2NvcmVfdm9w
X251bGxvcCkKKworc3RhdGljIHN0cnVjdCB2ZnNvcHMgcGlwZV92ZnNvcHMgPSB7CisJLnZmc192
Z2V0ID0gcGlwZV92Z2V0LAorCS52ZnNfdm5vcHMgPSAmcGlwZV92bm9wcworfTsKKworc3RhdGlj
IHVpbnQ2NF90IHBfaW5vZGU7CisKKy8qCisgKiBCb2d1cyBtb3VudCBwb2ludCB1c2VkIGJ5IGFs
bCBzb2NrZXRzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbW91bnQgcF9tb3VudCA9IHsKKwkubV9vcCA9
ICZwaXBlX3Zmc29wcworfTsKKworc3RhdGljIGludCBwaXBlX2ZkX2FsbG9jKHN0cnVjdCBwaXBl
X2ZpbGUgKnBpcGVfZmlsZSwgaW50IGZsYWdzKQoreworCWludCByZXQgPSAwOworCWludCB2ZnNf
ZmQ7CisJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzX2ZpbGUgPSBOVUxMOworCXN0cnVjdCBkZW50
cnkgKnBfZGVudHJ5OworCXN0cnVjdCB2bm9kZSAqcF92bm9kZTsKKworCS8qIFJlc2VydmUgZmls
ZSBkZXNjcmlwdG9yIG51bWJlciAqLworCXZmc19mZCA9IHZmc2NvcmVfYWxsb2NfZmQoKTsKKwlp
ZiAodmZzX2ZkIDwgMCkgeworCQlyZXQgPSAtRU5GSUxFOworCQlnb3RvIEVSUl9FWElUOworCX0K
KworCS8qIEFsbG9jYXRlIGZpbGUsIGRlbnRyeSwgYW5kIHZub2RlICovCisJdmZzX2ZpbGUgPSB1
a19jYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgMSwgc2l6ZW9mKCp2ZnNfZmlsZSkpOwor
CWlmICghdmZzX2ZpbGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBFUlJfTUFMTE9DX1ZG
U19GSUxFOworCX0KKworCXJldCA9IHZmc2NvcmVfdmdldCgmcF9tb3VudCwgcF9pbm9kZSsrLCAm
cF92bm9kZSk7CisJVUtfQVNTRVJUKHJldCA9PSAwKTsgLyogd2Ugc2hvdWxkIG5vdCBmaW5kIGl0
IGluIGNhY2hlICovCisKKwlpZiAoIXBfdm5vZGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290
byBFUlJfQUxMT0NfVk5PREU7CisJfQorCisJdWtfbXV0ZXhfdW5sb2NrKCZwX3Zub2RlLT52X2xv
Y2spOworCisJcF9kZW50cnkgPSBkZW50cnlfYWxsb2MoTlVMTCwgcF92bm9kZSwgIi8iKTsKKwlp
ZiAoIXBfZGVudHJ5KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gRVJSX0FMTE9DX0RFTlRS
WTsKKwl9CisKKwkvKiBGaWxsIG91dCBuZWNlc3NhcnkgZmllbGRzLiAqLworCXZmc19maWxlLT5m
ZCA9IHZmc19mZDsKKwl2ZnNfZmlsZS0+Zl9mbGFncyA9IGZsYWdzOworCXZmc19maWxlLT5mX2Nv
dW50ID0gMTsKKwl2ZnNfZmlsZS0+Zl9kYXRhID0gcGlwZV9maWxlOworCXZmc19maWxlLT5mX2Rl
bnRyeSA9IHBfZGVudHJ5OworCXZmc19maWxlLT5mX3Zmc19mbGFncyA9IFVLX1ZGU0NPUkVfTk9Q
T1M7CisKKwlwX3Zub2RlLT52X2RhdGEgPSBwaXBlX2ZpbGU7CisJcF92bm9kZS0+dl90eXBlID0g
VkZJRk87CisKKwkvKiBBc3NpZ24gdGhlIGZpbGUgZGVzY3JpcHRvcnMgdG8gdGhlIGNvcnJlc3Bv
bmRpbmcgdmZzX2ZpbGUuICovCisJcmV0ID0gdmZzY29yZV9pbnN0YWxsX2ZkKHZmc19mZCwgdmZz
X2ZpbGUpOworCWlmIChyZXQpCisJCWdvdG8gRVJSX1ZGU19JTlNUQUxMOworCisJLyogT25seSB0
aGUgZGVudHJ5IHNob3VsZCBob2xkIGEgcmVmZXJlbmNlOyByZWxlYXNlIG91cnMgKi8KKwl2cmVs
ZShwX3Zub2RlKTsKKworCXJldHVybiB2ZnNfZmQ7CisKK0VSUl9WRlNfSU5TVEFMTDoKKwlkcmVs
ZShwX2RlbnRyeSk7CitFUlJfQUxMT0NfREVOVFJZOgorCXZyZWxlKHBfdm5vZGUpOworRVJSX0FM
TE9DX1ZOT0RFOgorCXVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgdmZzX2ZpbGUpOwor
RVJSX01BTExPQ19WRlNfRklMRToKKwl2ZnNjb3JlX3B1dF9mZCh2ZnNfZmQpOworRVJSX0VYSVQ6
CisJVUtfQVNTRVJUKHJldCA8IDApOworCXJldHVybiByZXQ7Cit9CisKK2ludCBwaXBlKGludCBw
aXBlZmRbMl0pCit7CisJaW50IHJldCA9IDA7CisJaW50IHJfZmQsIHdfZmQ7CisJc3RydWN0IHBp
cGVfZmlsZSAqcGlwZV9maWxlOworCisJLyogQWxsb2NhdGUgcGlwZSBpbnRlcm5hbCBzdHJ1Y3R1
cmUuICovCisJcGlwZV9maWxlID0gcGlwZV9maWxlX2FsbG9jKFBJUEVfTUFYX1NJWkUsIDApOwor
CWlmICghcGlwZV9maWxlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gRVJSX0VYSVQ7CisJ
fQorCisJcl9mZCA9IHBpcGVfZmRfYWxsb2MocGlwZV9maWxlLCBVS19GUkVBRCk7CisJaWYgKHJf
ZmQgPCAwKQorCQlnb3RvIEVSUl9WRlNfSU5TVEFMTDsKKworCXdfZmQgPSBwaXBlX2ZkX2FsbG9j
KHBpcGVfZmlsZSwgVUtfRldSSVRFKTsKKwlpZiAod19mZCA8IDApCisJCWdvdG8gRVJSX1dfRkQ7
CisKKwkvKiBGaWxsIHBpcGVmZCBmaWVsZHMuICovCisJcGlwZWZkWzBdID0gcl9mZDsKKwlwaXBl
ZmRbMV0gPSB3X2ZkOworCisJcmV0dXJuIHJldDsKKworRVJSX1dfRkQ6CisJdmZzY29yZV9wdXRf
ZmQocl9mZCk7CitFUlJfVkZTX0lOU1RBTEw6CisJcGlwZV9maWxlX2ZyZWUocGlwZV9maWxlKTsK
K0VSUl9FWElUOgorCVVLX0FTU0VSVChyZXQgPCAwKTsKKwlyZXR1cm4gcmV0OworfQotLSAKMi4y
MC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 11:50:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 11:50:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8k5Z-0006kY-BX; Fri, 13 Sep 2019 11:50:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=3+QS=XI=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i8k5Y-0006h8-0s
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 11:50:08 +0000
X-Inumbo-ID: 9ffc3848-d61c-11e9-95aa-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9ffc3848-d61c-11e9-95aa-12813bfff9fa;
 Fri, 13 Sep 2019 11:50:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E5340F2021;
 Fri, 13 Sep 2019 13:50:03 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id iBfOGEd_2ATr; Fri, 13 Sep 2019 13:50:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B1CF7F2009;
 Fri, 13 Sep 2019 13:49:59 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 13 Sep
 2019 13:49:59 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
 <20190912163055.31744-2-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <11abdd01-4358-bdb5-ab8d-321dbccf77d7@neclab.eu>
Date: Fri, 13 Sep 2019 13:49:59 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190912163055.31744-2-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/3] lib/nolibc: Introduce
 musl-imported subdirectory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhpcyBwYXRjaCBpcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJhbiBT
YW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJkcwoK
U2hhcmFuCgpPbiA5LzEyLzE5IDY6MzAgUE0sIENvc3RpbiBMdXB1IHdyb3RlOgo+IEp1c3QgbGlr
ZSB3ZSBkaWQgcmVjZW50bHkgd2l0aCBuZXdsaWIgZ2x1ZSBjb2RlLCB3ZSB3aWxsIHB1dCB0aGUg
Y29kZSBpbXBvcnRlZAo+IGZyb20gbXVzbCB1bmRlciB0aGUgbXVzbC1pbXBvcnRlZC8gc3ViZGly
ZWN0b3J5LCBrZWVwaW5nIHRoZSBzYW1lIGhpZXJhcmNoeSBhcwo+IGluIHRoZSBvcmlnaW5hbCBj
b2RlLiBUaGlzIHBhdGNoIGFsc28gYWRkcyB0aGUgQ09QWVJJR0hUIHNvIHRoYXQgd2UgY2FuIHNr
aXAKPiBhZGRpbmcgbGljZW5zZXMgdG8gZWFjaCBpbXBvcnRlZCBmaWxlLgo+Cj4gU2lnbmVkLW9m
Zi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPiAtLS0KPiAgIGxpYi9u
b2xpYmMvbXVzbC1pbXBvcnRlZC9DT1BZUklHSFQgfCAxODkgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKPiAgIDEgZmlsZSBjaGFuZ2VkLCAxODkgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IGxpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9DT1BZUklHSFQKPgo+IGRpZmYg
LS1naXQgYS9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvQ09QWVJJR0hUIGIvbGliL25vbGliYy9t
dXNsLWltcG9ydGVkL0NPUFlSSUdIVAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAw
MDAwMDAuLjI1MjVmZmI1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9ub2xpYmMvbXVzbC1p
bXBvcnRlZC9DT1BZUklHSFQKPiBAQCAtMCwwICsxLDE4OSBAQAo+ICttdXNsIGFzIGEgd2hvbGUg
aXMgbGljZW5zZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBzdGFuZGFyZCBNSVQgbGljZW5zZToKPiAr
Cj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KPiArQ29weXJpZ2h0IMKpIDIwMDUtMjAxOSBSaWNoIEZlbGtlciwg
ZXQgYWwuCj4gKwo+ICtQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn
ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKPiArYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5k
IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gKyJTb2Z0d2FyZSIpLCB0byBk
ZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKPiArd2l0
aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBw
dWJsaXNoLAo+ICtkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg
dGhlIFNvZnR3YXJlLCBhbmQgdG8KPiArcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdh
cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCj4gK3RoZSBmb2xsb3dpbmcgY29u
ZGl0aW9uczoKPiArCj4gK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1p
c3Npb24gbm90aWNlIHNoYWxsIGJlCj4gK2luY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh
bnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgo+ICsKPiArVEhFIFNPRlRXQVJFIElTIFBS
T1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCj4gK0VYUFJFU1Mg
T1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP
Rgo+ICtNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO
RCBOT05JTkZSSU5HRU1FTlQuCj4gK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENP
UFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCj4gK0NMQUlNLCBEQU1BR0VTIE9SIE9U
SEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCj4gK1RPUlQg
T1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFCj4gK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRX
QVJFLgo+ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICtBdXRob3JzL2NvbnRyaWJ1dG9ycyBpbmNsdWRl
Ogo+ICsKPiArQS4gV2lsY294Cj4gK0FsZXggRG93YWQKPiArQWxleCBTdXlrb3YKPiArQWxleGFu
ZGVyIE1vbmFrb3YKPiArQW5kcmUgTWNDdXJkeQo+ICtBbmRyZXcgS2VsbGV5Cj4gK0FudGhvbnkg
Ry4gQmFzaWxlCj4gK0FyaWMgQmVsc2l0bwo+ICtBcnZpZCBQaWNjaWFuaQo+ICtCYXJ0b3N6IEJy
YWNoYWN6ZWsKPiArQmVuamFtaW4gUGV0ZXJzb24KPiArQm9iYnkgQmluZ2hhbQo+ICtCb3JpcyBC
cmV6aWxsb24KPiArQnJlbnQgQ29vawo+ICtDaHJpcyBTcGllZ2VsCj4gK0Nsw6ltZW50IFZhc3Nl
dXIKPiArRGFuaWVsIE1pY2F5Cj4gK0RhbmllbCBTYWJvZ2FsCj4gK0RhdXJuaW1hdG9yCj4gK0Rh
dmlkIENhcmxpZXIKPiArRGF2aWQgRWRlbHNvaG4KPiArRGVueXMgVmxhc2Vua28KPiArRG1pdHJ5
IEl2YW5vdgo+ICtEbWl0cnkgVi4gTGV2aW4KPiArRHJldyBEZVZhdWx0Cj4gK0VtaWwgUmVubmVy
IEJlcnRoaW5nCj4gK0ZhbmdydWkgU29uZwo+ICtGZWxpeCBGaWV0a2F1Cj4gK0ZlbGl4IEphbmRh
Cj4gK0dpYW5sdWNhIEFuem9saW4KPiArSGF1a2UgTWVocnRlbnMKPiArSGUgWAo+ICtIaWx0am8g
UG9zdGh1bWEKPiArSXNhYWMgRHVuaGFtCj4gK0pheWRlZXAgUGF0aWwKPiArSmVucyBHdXN0ZWR0
Cj4gK0plcmVteSBIdW50d29yawo+ICtKby1QaGlsaXBwIFdpY2gKPiArSm9ha2ltIFNpbmRob2x0
Cj4gK0pvaG4gU3BlbmNlcgo+ICtKb3NpYWggV29yY2VzdGVyCj4gK0p1bGllbiBSYW1zZWllcgo+
ICtKdXN0aW4gQ29ybWFjawo+ICtLYWFybGUgUml0dmFuZW4KPiArS2hlbSBSYWoKPiArS3lsaWUg
TWNDbGFpbgo+ICtMZWFoIE5ldWtpcmNoZW4KPiArTHVjYSBCYXJiYXRvCj4gK0x1a2EgUGVya292
Cj4gK00gRmFya2FzLUR5Y2sgKFN0cmFrZSkKPiArTWFoZXNoIEJvZGFwYXRpCj4gK01hcmt1cyBX
aWNobWFubgo+ICtNYXNhbm9yaSBPZ2lubwo+ICtNaWNoYWVsIENsYXJrCj4gK01pY2hhZWwgRm9y
bmV5Cj4gK01pa2hhaWwgS3JlbW55b3YKPiArTmF0YW5hZWwgQ29wYQo+ICtOaWNob2xhcyBKLiBL
YWluCj4gK29yYwo+ICtQYXNjYWwgQ3VvcQo+ICtQYXRyaWNrIE9wcGVubGFuZGVyCj4gK1BldHIg
SG9zZWsKPiArUGV0ciBTa29jaWsKPiArUGllcnJlIENhcnJpZXIKPiArUmVpbmkgVXJiYW4KPiAr
UmljaCBGZWxrZXIKPiArUmljaGFyZCBQZW5uaW5ndG9uCj4gK1J5YW4gRmFpcmZheAo+ICtTYW11
ZWwgSG9sbGFuZAo+ICtTZWdldiBGaW5lcgo+ICtTaGl6Cj4gK3Npbgo+ICtTb2xhciBEZXNpZ25l
cgo+ICtTdGVmYW4gS3Jpc3RpYW5zc29uCj4gK1N0ZWZhbiBPJ1JlYXIKPiArU3phYm9sY3MgTmFn
eQo+ICtUaW1vIFRlcsOkcwo+ICtUcnV0eiBCZWhuCj4gK1ZhbGVudGluIE9jaHMKPiArV2lsbCBE
aWV0ego+ICtXaWxsaWFtIEhhZGRvbgo+ICtXaWxsaWFtIFBpdGNvY2sKPiArCj4gK1BvcnRpb25z
IG9mIHRoaXMgc29mdHdhcmUgYXJlIGRlcml2ZWQgZnJvbSB0aGlyZC1wYXJ0eSB3b3JrcyBsaWNl
bnNlZAo+ICt1bmRlciB0ZXJtcyBjb21wYXRpYmxlIHdpdGggdGhlIGFib3ZlIE1JVCBsaWNlbnNl
Ogo+ICsKPiArVGhlIFRSRSByZWd1bGFyIGV4cHJlc3Npb24gaW1wbGVtZW50YXRpb24gKHNyYy9y
ZWdleC9yZWcqIGFuZAo+ICtzcmMvcmVnZXgvdHJlKikgaXMgQ29weXJpZ2h0IMKpIDIwMDEtMjAw
OCBWaWxsZSBMYXVyaWthcmkgYW5kIGxpY2Vuc2VkCj4gK3VuZGVyIGEgMi1jbGF1c2UgQlNEIGxp
Y2Vuc2UgKGxpY2Vuc2UgdGV4dCBpbiB0aGUgc291cmNlIGZpbGVzKS4gVGhlCj4gK2luY2x1ZGVk
IHZlcnNpb24gaGFzIGJlZW4gaGVhdmlseSBtb2RpZmllZCBieSBSaWNoIEZlbGtlciBpbiAyMDEy
LCBpbgo+ICt0aGUgaW50ZXJlc3RzIG9mIHNpemUsIHNpbXBsaWNpdHksIGFuZCBuYW1lc3BhY2Ug
Y2xlYW5saW5lc3MuCj4gKwo+ICtNdWNoIG9mIHRoZSBtYXRoIGxpYnJhcnkgY29kZSAoc3JjL21h
dGgvKiBhbmQgc3JjL2NvbXBsZXgvKikgaXMKPiArQ29weXJpZ2h0IMKpIDE5OTMsMjAwNCBTdW4g
TWljcm9zeXN0ZW1zIG9yCj4gK0NvcHlyaWdodCDCqSAyMDAzLTIwMTEgRGF2aWQgU2NodWx0eiBv
cgo+ICtDb3B5cmlnaHQgwqkgMjAwMy0yMDA5IFN0ZXZlbiBHLiBLYXJnbCBvcgo+ICtDb3B5cmln
aHQgwqkgMjAwMy0yMDA5IEJydWNlIEQuIEV2YW5zIG9yCj4gK0NvcHlyaWdodCDCqSAyMDA4IFN0
ZXBoZW4gTC4gTW9zaGllcgo+ICthbmQgbGFiZWxsZWQgYXMgc3VjaCBpbiBjb21tZW50cyBpbiB0
aGUgaW5kaXZpZHVhbCBzb3VyY2UgZmlsZXMuIEFsbAo+ICtoYXZlIGJlZW4gbGljZW5zZWQgdW5k
ZXIgZXh0cmVtZWx5IHBlcm1pc3NpdmUgdGVybXMuCj4gKwo+ICtUaGUgQVJNIG1lbWNweSBjb2Rl
IChzcmMvc3RyaW5nL2FybS9tZW1jcHlfZWwuUykgaXMgQ29weXJpZ2h0IMKpIDIwMDgKPiArVGhl
IEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdCBhbmQgaXMgbGljZW5zZWQgdW5kZXIgYSB0d28t
Y2xhdXNlIEJTRAo+ICtsaWNlbnNlLiBJdCB3YXMgdGFrZW4gZnJvbSBCaW9uaWMgbGliYywgdXNl
ZCBvbiBBbmRyb2lkLgo+ICsKPiArVGhlIGltcGxlbWVudGF0aW9uIG9mIERFUyBmb3IgY3J5cHQg
KHNyYy9jcnlwdC9jcnlwdF9kZXMuYykgaXMKPiArQ29weXJpZ2h0IMKpIDE5OTQgRGF2aWQgQnVy
cmVuLiBJdCBpcyBsaWNlbnNlZCB1bmRlciBhIEJTRCBsaWNlbnNlLgo+ICsKPiArVGhlIGltcGxl
bWVudGF0aW9uIG9mIGJsb3dmaXNoIGNyeXB0IChzcmMvY3J5cHQvY3J5cHRfYmxvd2Zpc2guYykg
d2FzCj4gK29yaWdpbmFsbHkgd3JpdHRlbiBieSBTb2xhciBEZXNpZ25lciBhbmQgcGxhY2VkIGlu
dG8gdGhlIHB1YmxpYwo+ICtkb21haW4uIFRoZSBjb2RlIGFsc28gY29tZXMgd2l0aCBhIGZhbGxi
YWNrIHBlcm1pc3NpdmUgbGljZW5zZSBmb3IgdXNlCj4gK2luIGp1cmlzZGljdGlvbnMgdGhhdCBt
YXkgbm90IHJlY29nbml6ZSB0aGUgcHVibGljIGRvbWFpbi4KPiArCj4gK1RoZSBzbW9vdGhzb3J0
IGltcGxlbWVudGF0aW9uIChzcmMvc3RkbGliL3Fzb3J0LmMpIGlzIENvcHlyaWdodCDCqSAyMDEx
Cj4gK1ZhbGVudGluIE9jaHMgYW5kIGlzIGxpY2Vuc2VkIHVuZGVyIGFuIE1JVC1zdHlsZSBsaWNl
bnNlLgo+ICsKPiArVGhlIHg4Nl82NCBwb3J0IHdhcyB3cml0dGVuIGJ5IE5pY2hvbGFzIEouIEth
aW4gYW5kIGlzIGxpY2Vuc2VkIHVuZGVyCj4gK3RoZSBzdGFuZGFyZCBNSVQgdGVybXMuCj4gKwo+
ICtUaGUgbWlwcyBhbmQgbWljcm9ibGF6ZSBwb3J0cyB3ZXJlIG9yaWdpbmFsbHkgd3JpdHRlbiBi
eSBSaWNoYXJkCj4gK1Blbm5pbmd0b24gZm9yIHVzZSBpbiB0aGUgZWxsY2MgcHJvamVjdC4gVGhl
IG9yaWdpbmFsIGNvZGUgd2FzIGFkYXB0ZWQKPiArYnkgUmljaCBGZWxrZXIgZm9yIGJ1aWxkIHN5
c3RlbSBhbmQgY29kZSBjb252ZW50aW9ucyBkdXJpbmcgdXBzdHJlYW0KPiAraW50ZWdyYXRpb24u
IEl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBzdGFuZGFyZCBNSVQgdGVybXMuCj4gKwo+ICtUaGUg
bWlwczY0IHBvcnQgd2FzIGNvbnRyaWJ1dGVkIGJ5IEltYWdpbmF0aW9uIFRlY2hub2xvZ2llcyBh
bmQgaXMKPiArbGljZW5zZWQgdW5kZXIgdGhlIHN0YW5kYXJkIE1JVCB0ZXJtcy4KPiArCj4gK1Ro
ZSBwb3dlcnBjIHBvcnQgd2FzIGFsc28gb3JpZ2luYWxseSB3cml0dGVuIGJ5IFJpY2hhcmQgUGVu
bmluZ3RvbiwKPiArYW5kIGxhdGVyIHN1cHBsZW1lbnRlZCBhbmQgaW50ZWdyYXRlZCBieSBKb2hu
IFNwZW5jZXIuIEl0IGlzIGxpY2Vuc2VkCj4gK3VuZGVyIHRoZSBzdGFuZGFyZCBNSVQgdGVybXMu
Cj4gKwo+ICtBbGwgb3RoZXIgZmlsZXMgd2hpY2ggaGF2ZSBubyBjb3B5cmlnaHQgY29tbWVudHMg
YXJlIG9yaWdpbmFsIHdvcmtzCj4gK3Byb2R1Y2VkIHNwZWNpZmljYWxseSBmb3IgdXNlIGFzIHBh
cnQgb2YgdGhpcyBsaWJyYXJ5LCB3cml0dGVuIGVpdGhlcgo+ICtieSBSaWNoIEZlbGtlciwgdGhl
IG1haW4gYXV0aG9yIG9mIHRoZSBsaWJyYXJ5LCBvciBieSBvbmUgb3IgbW9yZQo+ICtjb250aWJ1
dG9ycyBsaXN0ZWQgYWJvdmUuIERldGFpbHMgb24gYXV0aG9yc2hpcCBvZiBpbmRpdmlkdWFsIGZp
bGVzCj4gK2NhbiBiZSBmb3VuZCBpbiB0aGUgZ2l0IHZlcnNpb24gY29udHJvbCBoaXN0b3J5IG9m
IHRoZSBwcm9qZWN0LiBUaGUKPiArb21pc3Npb24gb2YgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGNv
bW1lbnRzIGluIGVhY2ggZmlsZSBpcyBpbiB0aGUKPiAraW50ZXJlc3Qgb2Ygc291cmNlIHRyZWUg
c2l6ZS4KPiArCj4gK0luIGFkZGl0aW9uLCBwZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZv
ciBhbGwgcHVibGljIGhlYWRlciBmaWxlcwo+ICsoaW5jbHVkZS8qIGFuZCBhcmNoLyovYml0cy8q
KSBhbmQgY3J0IGZpbGVzIGludGVuZGVkIHRvIGJlIGxpbmtlZCBpbnRvCj4gK2FwcGxpY2F0aW9u
cyAoY3J0LyosIGxkc28vZGxzdGFydC5jLCBhbmQgYXJjaC8qL2NydF9hcmNoLmgpIHRvIG9taXQK
PiArdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHBlcm1pc3Npb24gbm90aWNlIG90aGVyd2lzZSBy
ZXF1aXJlZCBieSB0aGUKPiArbGljZW5zZSwgYW5kIHRvIHVzZSB0aGVzZSBmaWxlcyB3aXRob3V0
IGFueSByZXF1aXJlbWVudCBvZgo+ICthdHRyaWJ1dGlvbi4gVGhlc2UgZmlsZXMgaW5jbHVkZSBz
dWJzdGFudGlhbCBjb250cmlidXRpb25zIGZyb206Cj4gKwo+ICtCb2JieSBCaW5naGFtCj4gK0pv
aG4gU3BlbmNlcgo+ICtOaWNob2xhcyBKLiBLYWluCj4gK1JpY2ggRmVsa2VyCj4gK1JpY2hhcmQg
UGVubmluZ3Rvbgo+ICtTdGVmYW4gS3Jpc3RpYW5zc29uCj4gK1N6YWJvbGNzIE5hZ3kKPiArCj4g
K2FsbCBvZiB3aG9tIGhhdmUgZXhwbGljaXRseSBncmFudGVkIHN1Y2ggcGVybWlzc2lvbi4KPiAr
Cj4gK1RoaXMgZmlsZSBwcmV2aW91c2x5IGNvbnRhaW5lZCB0ZXh0IGV4cHJlc3NpbmcgYSBiZWxp
ZWYgdGhhdCBtb3N0IG9mCj4gK3RoZSBmaWxlcyBjb3ZlcmVkIGJ5IHRoZSBhYm92ZSBleGNlcHRp
b24gd2VyZSBzdWZmaWNpZW50bHkgdHJpdmlhbCBub3QKPiArdG8gYmUgc3ViamVjdCB0byBjb3B5
cmlnaHQsIHJlc3VsdGluZyBpbiBjb25mdXNpb24gb3ZlciB3aGV0aGVyIGl0Cj4gK25lZ2F0ZWQg
dGhlIHBlcm1pc3Npb25zIGdyYW50ZWQgaW4gdGhlIGxpY2Vuc2UuIEluIHRoZSBzcGlyaXQgb2YK
PiArcGVybWlzc2l2ZSBsaWNlbnNpbmcsIGFuZCBvZiBub3QgaGF2aW5nIGxpY2Vuc2luZyBpc3N1
ZXMgYmVpbmcgYW4KPiArb2JzdGFjbGUgdG8gYWRvcHRpb24sIHRoYXQgdGV4dCBoYXMgYmVlbiBy
ZW1vdmVkLgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 11:52:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 11:52:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8k7l-0006p7-JB; Fri, 13 Sep 2019 11:52:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=3+QS=XI=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i8k7j-0006p2-R2
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 11:52:23 +0000
X-Inumbo-ID: f1081400-d61c-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f1081400-d61c-11e9-b76c-bc764e2007e4;
 Fri, 13 Sep 2019 11:52:21 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0079AF2021;
 Fri, 13 Sep 2019 13:52:20 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UaWPlYFC-_8P; Fri, 13 Sep 2019 13:52:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C9849F2009;
 Fri, 13 Sep 2019 13:52:15 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 13 Sep
 2019 13:52:15 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
 <20190912163055.31744-3-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <7dd6262d-ab58-7557-a2ff-4c6fe76583c8@neclab.eu>
Date: Fri, 13 Sep 2019 13:52:15 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190912163055.31744-3-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/3] lib/nolibc: Import ioctl.h
 headers for x86_64 from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwpTaGFyYW4KCk9uIDkvMTIvMTkgNjozMCBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4gQ29waWVk
IGFzIGlzIGZyb20gdGhlIG9mZmljaWFsIG11c2wgZ2l0IG1pcnJvcgo+IGdpdDovL2dpdC5tdXNs
LWxpYmMub3JnL211c2wsIGNvbW1pdCA2ZmNiNDQwZC4KPgo+IFNpZ25lZC1vZmYtYnk6IENvc3Rp
biBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Cj4gLS0tCj4gICAuLi4vbXVzbC1pbXBvcnRl
ZC9hcmNoL2dlbmVyaWMvYml0cy9pb2N0bC5oICAgfCAxMTAgKysrKysrKysrKysrKysrKwo+ICAg
bGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL2lvY3RsLmggIHwgMTI0ICsrKysr
KysrKysrKysrKysrKwo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAyMzQgaW5zZXJ0aW9ucygrKQo+ICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9hcmNoL2dlbmVyaWMv
Yml0cy9pb2N0bC5oCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL25vbGliYy9tdXNsLWltcG9y
dGVkL2luY2x1ZGUvc3lzL2lvY3RsLmgKPgo+IGRpZmYgLS1naXQgYS9saWIvbm9saWJjL211c2wt
aW1wb3J0ZWQvYXJjaC9nZW5lcmljL2JpdHMvaW9jdGwuaCBiL2xpYi9ub2xpYmMvbXVzbC1pbXBv
cnRlZC9hcmNoL2dlbmVyaWMvYml0cy9pb2N0bC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp
bmRleCAwMDAwMDAwMC4uZDFhNmMwMzUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbGliL25vbGli
Yy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9iaXRzL2lvY3RsLmgKPiBAQCAtMCwwICsxLDEx
MCBAQAo+ICsjZGVmaW5lIF9JT0MoYSxiLGMsZCkgKCAoKGEpPDwzMCkgfCAoKGIpPDw4KSB8IChj
KSB8ICgoZCk8PDE2KSApCj4gKyNkZWZpbmUgX0lPQ19OT05FICAwVQo+ICsjZGVmaW5lIF9JT0Nf
V1JJVEUgMVUKPiArI2RlZmluZSBfSU9DX1JFQUQgIDJVCj4gKwo+ICsjZGVmaW5lIF9JTyhhLGIp
IF9JT0MoX0lPQ19OT05FLChhKSwoYiksMCkKPiArI2RlZmluZSBfSU9XKGEsYixjKSBfSU9DKF9J
T0NfV1JJVEUsKGEpLChiKSxzaXplb2YoYykpCj4gKyNkZWZpbmUgX0lPUihhLGIsYykgX0lPQyhf
SU9DX1JFQUQsKGEpLChiKSxzaXplb2YoYykpCj4gKyNkZWZpbmUgX0lPV1IoYSxiLGMpIF9JT0Mo
X0lPQ19SRUFEfF9JT0NfV1JJVEUsKGEpLChiKSxzaXplb2YoYykpCj4gKwo+ICsjZGVmaW5lIFRD
R0VUUwkJMHg1NDAxCj4gKyNkZWZpbmUgVENTRVRTCQkweDU0MDIKPiArI2RlZmluZSBUQ1NFVFNX
CQkweDU0MDMKPiArI2RlZmluZSBUQ1NFVFNGCQkweDU0MDQKPiArI2RlZmluZSBUQ0dFVEEJCTB4
NTQwNQo+ICsjZGVmaW5lIFRDU0VUQQkJMHg1NDA2Cj4gKyNkZWZpbmUgVENTRVRBVwkJMHg1NDA3
Cj4gKyNkZWZpbmUgVENTRVRBRgkJMHg1NDA4Cj4gKyNkZWZpbmUgVENTQlJLCQkweDU0MDkKPiAr
I2RlZmluZSBUQ1hPTkMJCTB4NTQwQQo+ICsjZGVmaW5lIFRDRkxTSAkJMHg1NDBCCj4gKyNkZWZp
bmUgVElPQ0VYQ0wJMHg1NDBDCj4gKyNkZWZpbmUgVElPQ05YQ0wJMHg1NDBECj4gKyNkZWZpbmUg
VElPQ1NDVFRZCTB4NTQwRQo+ICsjZGVmaW5lIFRJT0NHUEdSUAkweDU0MEYKPiArI2RlZmluZSBU
SU9DU1BHUlAJMHg1NDEwCj4gKyNkZWZpbmUgVElPQ09VVFEJMHg1NDExCj4gKyNkZWZpbmUgVElP
Q1NUSQkJMHg1NDEyCj4gKyNkZWZpbmUgVElPQ0dXSU5TWgkweDU0MTMKPiArI2RlZmluZSBUSU9D
U1dJTlNaCTB4NTQxNAo+ICsjZGVmaW5lIFRJT0NNR0VUCTB4NTQxNQo+ICsjZGVmaW5lIFRJT0NN
QklTCTB4NTQxNgo+ICsjZGVmaW5lIFRJT0NNQklDCTB4NTQxNwo+ICsjZGVmaW5lIFRJT0NNU0VU
CTB4NTQxOAo+ICsjZGVmaW5lIFRJT0NHU09GVENBUgkweDU0MTkKPiArI2RlZmluZSBUSU9DU1NP
RlRDQVIJMHg1NDFBCj4gKyNkZWZpbmUgRklPTlJFQUQJMHg1NDFCCj4gKyNkZWZpbmUgVElPQ0lO
UQkJRklPTlJFQUQKPiArI2RlZmluZSBUSU9DTElOVVgJMHg1NDFDCj4gKyNkZWZpbmUgVElPQ0NP
TlMJMHg1NDFECj4gKyNkZWZpbmUgVElPQ0dTRVJJQUwJMHg1NDFFCj4gKyNkZWZpbmUgVElPQ1NT
RVJJQUwJMHg1NDFGCj4gKyNkZWZpbmUgVElPQ1BLVAkJMHg1NDIwCj4gKyNkZWZpbmUgRklPTkJJ
TwkJMHg1NDIxCj4gKyNkZWZpbmUgVElPQ05PVFRZCTB4NTQyMgo+ICsjZGVmaW5lIFRJT0NTRVRE
CTB4NTQyMwo+ICsjZGVmaW5lIFRJT0NHRVRECTB4NTQyNAo+ICsjZGVmaW5lIFRDU0JSS1AJCTB4
NTQyNQo+ICsjZGVmaW5lIFRJT0NTQlJLCTB4NTQyNwo+ICsjZGVmaW5lIFRJT0NDQlJLCTB4NTQy
OAo+ICsjZGVmaW5lIFRJT0NHU0lECTB4NTQyOQo+ICsjZGVmaW5lIFRJT0NHUlM0ODUJMHg1NDJF
Cj4gKyNkZWZpbmUgVElPQ1NSUzQ4NQkweDU0MkYKPiArI2RlZmluZSBUSU9DR1BUTgkweDgwMDQ1
NDMwCj4gKyNkZWZpbmUgVElPQ1NQVExDSwkweDQwMDQ1NDMxCj4gKyNkZWZpbmUgVElPQ0dERVYJ
MHg4MDA0NTQzMgo+ICsjZGVmaW5lIFRDR0VUWAkJMHg1NDMyCj4gKyNkZWZpbmUgVENTRVRYCQkw
eDU0MzMKPiArI2RlZmluZSBUQ1NFVFhGCQkweDU0MzQKPiArI2RlZmluZSBUQ1NFVFhXCQkweDU0
MzUKPiArI2RlZmluZSBUSU9DU0lHCQkweDQwMDQ1NDM2Cj4gKyNkZWZpbmUgVElPQ1ZIQU5HVVAJ
MHg1NDM3Cj4gKyNkZWZpbmUgVElPQ0dQS1QJMHg4MDA0NTQzOAo+ICsjZGVmaW5lIFRJT0NHUFRM
Q0sJMHg4MDA0NTQzOQo+ICsjZGVmaW5lIFRJT0NHRVhDTAkweDgwMDQ1NDQwCj4gKyNkZWZpbmUg
VElPQ0dQVFBFRVIJMHg1NDQxCj4gKyNkZWZpbmUgVElPQ0dJU083ODE2CTB4ODAyODU0NDIKPiAr
I2RlZmluZSBUSU9DU0lTTzc4MTYJMHhjMDI4NTQ0Mwo+ICsKPiArI2RlZmluZSBGSU9OQ0xFWAkw
eDU0NTAKPiArI2RlZmluZSBGSU9DTEVYCQkweDU0NTEKPiArI2RlZmluZSBGSU9BU1lOQwkweDU0
NTIKPiArI2RlZmluZSBUSU9DU0VSQ09ORklHCTB4NTQ1Mwo+ICsjZGVmaW5lIFRJT0NTRVJHV0lM
RAkweDU0NTQKPiArI2RlZmluZSBUSU9DU0VSU1dJTEQJMHg1NDU1Cj4gKyNkZWZpbmUgVElPQ0dM
Q0tUUk1JT1MJMHg1NDU2Cj4gKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MJMHg1NDU3Cj4gKyNkZWZp
bmUgVElPQ1NFUkdTVFJVQ1QJMHg1NDU4Cj4gKyNkZWZpbmUgVElPQ1NFUkdFVExTUiAgIDB4NTQ1
OQo+ICsjZGVmaW5lIFRJT0NTRVJHRVRNVUxUSSAweDU0NUEKPiArI2RlZmluZSBUSU9DU0VSU0VU
TVVMVEkgMHg1NDVCCj4gKwo+ICsjZGVmaW5lIFRJT0NNSVdBSVQJMHg1NDVDCj4gKyNkZWZpbmUg
VElPQ0dJQ09VTlQJMHg1NDVECj4gKyNkZWZpbmUgRklPUVNJWkUJMHg1NDYwCj4gKwo+ICsjZGVm
aW5lIFRJT0NNX0xFICAgICAgICAweDAwMQo+ICsjZGVmaW5lIFRJT0NNX0RUUiAgICAgICAweDAw
Mgo+ICsjZGVmaW5lIFRJT0NNX1JUUyAgICAgICAweDAwNAo+ICsjZGVmaW5lIFRJT0NNX1NUICAg
ICAgICAweDAwOAo+ICsjZGVmaW5lIFRJT0NNX1NSICAgICAgICAweDAxMAo+ICsjZGVmaW5lIFRJ
T0NNX0NUUyAgICAgICAweDAyMAo+ICsjZGVmaW5lIFRJT0NNX0NBUiAgICAgICAweDA0MAo+ICsj
ZGVmaW5lIFRJT0NNX1JORyAgICAgICAweDA4MAo+ICsjZGVmaW5lIFRJT0NNX0RTUiAgICAgICAw
eDEwMAo+ICsjZGVmaW5lIFRJT0NNX0NEICAgICAgICBUSU9DTV9DQVIKPiArI2RlZmluZSBUSU9D
TV9SSSAgICAgICAgVElPQ01fUk5HCj4gKyNkZWZpbmUgVElPQ01fT1VUMSAgICAgIDB4MjAwMAo+
ICsjZGVmaW5lIFRJT0NNX09VVDIgICAgICAweDQwMDAKPiArI2RlZmluZSBUSU9DTV9MT09QICAg
ICAgMHg4MDAwCj4gKwo+ICsjZGVmaW5lIEZJT1NFVE9XTiAgICAgICAweDg5MDEKPiArI2RlZmlu
ZSBTSU9DU1BHUlAgICAgICAgMHg4OTAyCj4gKyNkZWZpbmUgRklPR0VUT1dOICAgICAgIDB4ODkw
Mwo+ICsjZGVmaW5lIFNJT0NHUEdSUCAgICAgICAweDg5MDQKPiArI2RlZmluZSBTSU9DQVRNQVJL
ICAgICAgMHg4OTA1Cj4gKyNkZWZpbmUgU0lPQ0dTVEFNUCAgICAgIDB4ODkwNgo+ICsjZGVmaW5l
IFNJT0NHU1RBTVBOUyAgICAweDg5MDcKPiArCj4gKyNpbmNsdWRlIDxiaXRzL2lvY3RsX2ZpeC5o
Pgo+IGRpZmYgLS1naXQgYS9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMvaW9j
dGwuaCBiL2xpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3N5cy9pb2N0bC5oCj4gbmV3
IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uMzcyZTNkZGMKPiAtLS0gL2Rldi9u
dWxsCj4gKysrIGIvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL2lvY3RsLmgK
PiBAQCAtMCwwICsxLDEyNCBAQAo+ICsjaWZuZGVmCV9TWVNfSU9DVExfSAo+ICsjZGVmaW5lCV9T
WVNfSU9DVExfSAo+ICsjaWZkZWYgX19jcGx1c3BsdXMKPiArZXh0ZXJuICJDIiB7Cj4gKyNlbmRp
Zgo+ICsKPiArI2luY2x1ZGUgPGJpdHMvaW9jdGwuaD4KPiArCj4gKyNkZWZpbmUgTl9UVFkgICAg
ICAgICAgIDAKPiArI2RlZmluZSBOX1NMSVAgICAgICAgICAgMQo+ICsjZGVmaW5lIE5fTU9VU0Ug
ICAgICAgICAyCj4gKyNkZWZpbmUgTl9QUFAgICAgICAgICAgIDMKPiArI2RlZmluZSBOX1NUUklQ
ICAgICAgICAgNAo+ICsjZGVmaW5lIE5fQVgyNSAgICAgICAgICA1Cj4gKyNkZWZpbmUgTl9YMjUg
ICAgICAgICAgIDYKPiArI2RlZmluZSBOXzZQQUNLICAgICAgICAgNwo+ICsjZGVmaW5lIE5fTUFT
QyAgICAgICAgICA4Cj4gKyNkZWZpbmUgTl9SMzk2NCAgICAgICAgIDkKPiArI2RlZmluZSBOX1BS
T0ZJQlVTX0ZETCAgMTAKPiArI2RlZmluZSBOX0lSREEgICAgICAgICAgMTEKPiArI2RlZmluZSBO
X1NNU0JMT0NLICAgICAgMTIKPiArI2RlZmluZSBOX0hETEMgICAgICAgICAgMTMKPiArI2RlZmlu
ZSBOX1NZTkNfUFBQICAgICAgMTQKPiArI2RlZmluZSBOX0hDSSAgICAgICAgICAgMTUKPiArI2Rl
ZmluZSBOX0dJR0FTRVRfTTEwMSAgMTYKPiArI2RlZmluZSBOX1NMQ0FOICAgICAgICAgMTcKPiAr
I2RlZmluZSBOX1BQUyAgICAgICAgICAgMTgKPiArI2RlZmluZSBOX1YyNTMgICAgICAgICAgMTkK
PiArI2RlZmluZSBOX0NBSUYgICAgICAgICAgMjAKPiArI2RlZmluZSBOX0dTTTA3MTAgICAgICAg
MjEKPiArI2RlZmluZSBOX1RJX1dMICAgICAgICAgMjIKPiArI2RlZmluZSBOX1RSQUNFU0lOSyAg
ICAgMjMKPiArI2RlZmluZSBOX1RSQUNFUk9VVEVSICAgMjQKPiArI2RlZmluZSBOX05DSSAgICAg
ICAgICAgMjUKPiArI2RlZmluZSBOX1NQRUFLVVAgICAgICAgMjYKPiArI2RlZmluZSBOX05VTEwg
ICAgICAgICAgMjcKPiArCj4gKyNkZWZpbmUgVElPQ1BLVF9EQVRBICAgICAgIDAKPiArI2RlZmlu
ZSBUSU9DUEtUX0ZMVVNIUkVBRCAgMQo+ICsjZGVmaW5lIFRJT0NQS1RfRkxVU0hXUklURSAyCj4g
KyNkZWZpbmUgVElPQ1BLVF9TVE9QICAgICAgIDQKPiArI2RlZmluZSBUSU9DUEtUX1NUQVJUICAg
ICAgOAo+ICsjZGVmaW5lIFRJT0NQS1RfTk9TVE9QICAgIDE2Cj4gKyNkZWZpbmUgVElPQ1BLVF9E
T1NUT1AgICAgMzIKPiArI2RlZmluZSBUSU9DUEtUX0lPQ1RMICAgICA2NAo+ICsKPiArI2RlZmlu
ZSBUSU9DU0VSX1RFTVQgMQo+ICsKPiArc3RydWN0IHdpbnNpemUgewo+ICsJdW5zaWduZWQgc2hv
cnQgd3Nfcm93Owo+ICsJdW5zaWduZWQgc2hvcnQgd3NfY29sOwo+ICsJdW5zaWduZWQgc2hvcnQg
d3NfeHBpeGVsOwo+ICsJdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOwo+ICt9Owo+ICsKPiArI2Rl
ZmluZSBTSU9DQUREUlQgICAgICAgICAgMHg4OTBCCj4gKyNkZWZpbmUgU0lPQ0RFTFJUICAgICAg
ICAgIDB4ODkwQwo+ICsjZGVmaW5lIFNJT0NSVE1TRyAgICAgICAgICAweDg5MEQKPiArCj4gKyNk
ZWZpbmUgU0lPQ0dJRk5BTUUgICAgICAgIDB4ODkxMAo+ICsjZGVmaW5lIFNJT0NTSUZMSU5LICAg
ICAgICAweDg5MTEKPiArI2RlZmluZSBTSU9DR0lGQ09ORiAgICAgICAgMHg4OTEyCj4gKyNkZWZp
bmUgU0lPQ0dJRkZMQUdTICAgICAgIDB4ODkxMwo+ICsjZGVmaW5lIFNJT0NTSUZGTEFHUyAgICAg
ICAweDg5MTQKPiArI2RlZmluZSBTSU9DR0lGQUREUiAgICAgICAgMHg4OTE1Cj4gKyNkZWZpbmUg
U0lPQ1NJRkFERFIgICAgICAgIDB4ODkxNgo+ICsjZGVmaW5lIFNJT0NHSUZEU1RBRERSICAgICAw
eDg5MTcKPiArI2RlZmluZSBTSU9DU0lGRFNUQUREUiAgICAgMHg4OTE4Cj4gKyNkZWZpbmUgU0lP
Q0dJRkJSREFERFIgICAgIDB4ODkxOQo+ICsjZGVmaW5lIFNJT0NTSUZCUkRBRERSICAgICAweDg5
MWEKPiArI2RlZmluZSBTSU9DR0lGTkVUTUFTSyAgICAgMHg4OTFiCj4gKyNkZWZpbmUgU0lPQ1NJ
Rk5FVE1BU0sgICAgIDB4ODkxYwo+ICsjZGVmaW5lIFNJT0NHSUZNRVRSSUMgICAgICAweDg5MWQK
PiArI2RlZmluZSBTSU9DU0lGTUVUUklDICAgICAgMHg4OTFlCj4gKyNkZWZpbmUgU0lPQ0dJRk1F
TSAgICAgICAgIDB4ODkxZgo+ICsjZGVmaW5lIFNJT0NTSUZNRU0gICAgICAgICAweDg5MjAKPiAr
I2RlZmluZSBTSU9DR0lGTVRVICAgICAgICAgMHg4OTIxCj4gKyNkZWZpbmUgU0lPQ1NJRk1UVSAg
ICAgICAgIDB4ODkyMgo+ICsjZGVmaW5lIFNJT0NTSUZOQU1FICAgICAgICAweDg5MjMKPiArI2Rl
ZmluZSBTSU9DU0lGSFdBRERSICAgICAgMHg4OTI0Cj4gKyNkZWZpbmUgU0lPQ0dJRkVOQ0FQICAg
ICAgIDB4ODkyNQo+ICsjZGVmaW5lIFNJT0NTSUZFTkNBUCAgICAgICAweDg5MjYKPiArI2RlZmlu
ZSBTSU9DR0lGSFdBRERSICAgICAgMHg4OTI3Cj4gKyNkZWZpbmUgU0lPQ0dJRlNMQVZFICAgICAg
IDB4ODkyOQo+ICsjZGVmaW5lIFNJT0NTSUZTTEFWRSAgICAgICAweDg5MzAKPiArI2RlZmluZSBT
SU9DQURETVVMVEkgICAgICAgMHg4OTMxCj4gKyNkZWZpbmUgU0lPQ0RFTE1VTFRJICAgICAgIDB4
ODkzMgo+ICsjZGVmaW5lIFNJT0NHSUZJTkRFWCAgICAgICAweDg5MzMKPiArI2RlZmluZSBTSU9H
SUZJTkRFWCAgICAgICAgU0lPQ0dJRklOREVYCj4gKyNkZWZpbmUgU0lPQ1NJRlBGTEFHUyAgICAg
IDB4ODkzNAo+ICsjZGVmaW5lIFNJT0NHSUZQRkxBR1MgICAgICAweDg5MzUKPiArI2RlZmluZSBT
SU9DRElGQUREUiAgICAgICAgMHg4OTM2Cj4gKyNkZWZpbmUgU0lPQ1NJRkhXQlJPQURDQVNUIDB4
ODkzNwo+ICsjZGVmaW5lIFNJT0NHSUZDT1VOVCAgICAgICAweDg5MzgKPiArCj4gKyNkZWZpbmUg
U0lPQ0dJRkJSICAgICAgICAgIDB4ODk0MAo+ICsjZGVmaW5lIFNJT0NTSUZCUiAgICAgICAgICAw
eDg5NDEKPiArCj4gKyNkZWZpbmUgU0lPQ0dJRlRYUUxFTiAgICAgIDB4ODk0Mgo+ICsjZGVmaW5l
IFNJT0NTSUZUWFFMRU4gICAgICAweDg5NDMKPiArCj4gKyNkZWZpbmUgU0lPQ0RBUlAgICAgICAg
ICAgIDB4ODk1Mwo+ICsjZGVmaW5lIFNJT0NHQVJQICAgICAgICAgICAweDg5NTQKPiArI2RlZmlu
ZSBTSU9DU0FSUCAgICAgICAgICAgMHg4OTU1Cj4gKwo+ICsjZGVmaW5lIFNJT0NEUkFSUCAgICAg
ICAgICAweDg5NjAKPiArI2RlZmluZSBTSU9DR1JBUlAgICAgICAgICAgMHg4OTYxCj4gKyNkZWZp
bmUgU0lPQ1NSQVJQICAgICAgICAgIDB4ODk2Mgo+ICsKPiArI2RlZmluZSBTSU9DR0lGTUFQICAg
ICAgICAgMHg4OTcwCj4gKyNkZWZpbmUgU0lPQ1NJRk1BUCAgICAgICAgIDB4ODk3MQo+ICsKPiAr
I2RlZmluZSBTSU9DQURERExDSSAgICAgICAgMHg4OTgwCj4gKyNkZWZpbmUgU0lPQ0RFTERMQ0kg
ICAgICAgIDB4ODk4MQo+ICsKPiArI2RlZmluZSBTSU9DREVWUFJJVkFURSAgICAgMHg4OUYwCj4g
KyNkZWZpbmUgU0lPQ1BST1RPUFJJVkFURSAgIDB4ODlFMAo+ICsKPiAraW50IGlvY3RsIChpbnQs
IGludCwgLi4uKTsKPiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICt9Cj4gKyNlbmRpZgo+ICsj
ZW5kaWYKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 11:52:46 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 11:52:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8k86-0006px-Lg; Fri, 13 Sep 2019 11:52:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=3+QS=XI=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i8k84-0006pr-Vm
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 11:52:45 +0000
X-Inumbo-ID: fe1e5f33-d61c-11e9-95aa-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fe1e5f33-d61c-11e9-95aa-12813bfff9fa;
 Fri, 13 Sep 2019 11:52:44 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 390781056CC;
 Fri, 13 Sep 2019 13:52:43 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kqbzR5Oxjr1x; Fri, 13 Sep 2019 13:52:43 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 149101056C8;
 Fri, 13 Sep 2019 13:52:43 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 13 Sep
 2019 13:52:42 +0200
To: Costin Lupu <costin.lupu@cs.pub.ro>, <minios-devel@lists.xen.org>
References: <20190912163055.31744-1-costin.lupu@cs.pub.ro>
 <20190912163055.31744-4-costin.lupu@cs.pub.ro>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <9dfa46bf-17e4-03a1-cae8-0f7c429d2707@neclab.eu>
Date: Fri, 13 Sep 2019 13:52:42 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190912163055.31744-4-costin.lupu@cs.pub.ro>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 3/3] lib/nolibc: Adapt ioctl.h
 header to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gQ29zdGluLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJk
cwpTaGFyYW4KCk9uIDkvMTIvMTkgNjozMCBQTSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4gVGhlc2Ug
YXJlIHRoZSBzYW1lIGNoYW5nZXMgd2UgZGlkIGZvciBuZXdsaWIgZ2x1ZSBjb2RlLgo+Cj4gU2ln
bmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPiAtLS0KPiAg
IGxpYi9ub2xpYmMvTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAg
KysrKysrLS0tLQo+ICAgbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9iaXRz
L2lvY3RsLmggfCAgNCArKystCj4gICAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwg
NSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9saWIvbm9saWJjL01ha2VmaWxlLnVrIGIv
bGliL25vbGliYy9NYWtlZmlsZS51awo+IGluZGV4IDVlMjY3ZmUyLi40NWYwYjBmYyAxMDA2NDQK
PiAtLS0gYS9saWIvbm9saWJjL01ha2VmaWxlLnVrCj4gKysrIGIvbGliL25vbGliYy9NYWtlZmls
ZS51awo+IEBAIC0xNywxMSArMTcsMTMgQEAgTElCTk9MSUJDX05PX0JVSUxUSU5TCQkrPSAtZm5v
LWJ1aWx0aW4tdnNzY2FuZgo+ICAgCj4gICBDRkxBR1MtJChDT05GSUdfTElCTk9MSUJDKQkJKz0g
JChMSUJOT0xJQkNfTk9fQlVJTFRJTlMpCj4gICBDWFhGTEFHUy0kKENPTkZJR19MSUJOT0xJQkMp
CQkrPSAkKExJQk5PTElCQ19OT19CVUlMVElOUykKPiAtQ0lOQ0xVREVTLSQoQ09ORklHX0xJQk5P
TElCQykJCSs9IC1JJChMSUJOT0xJQkNfQkFTRSkvaW5jbHVkZQo+IC1DWFhJTkNMVURFUy0kKENP
TkZJR19MSUJOT0xJQkMpCSs9IC1JJChMSUJOT0xJQkNfQkFTRSkvaW5jbHVkZQo+ICAgCj4gLUNJ
TkNMVURFUy0kKENPTkZJR19MSUJOT0xJQkMpCSs9IC1JJChMSUJOT0xJQkNfQkFTRSkvYXJjaC8k
KEFSQ0gpCj4gLUNYWElOQ0xVREVTLSQoQ09ORklHX0xJQk5PTElCQykJKz0gLUkkKExJQk5PTElC
Q19CQVNFKS9pbmNsdWRlCj4gK0xJQk5PTElCQ19HTE9CQUxfSU5DTFVERVMteSAgICAgKz0gLUkk
KExJQk5PTElCQ19CQVNFKS9pbmNsdWRlCj4gK0xJQk5PTElCQ19HTE9CQUxfSU5DTFVERVMteSAg
ICAgKz0gLUkkKExJQk5PTElCQ19CQVNFKS9hcmNoLyQoQVJDSCkKPiArTElCTk9MSUJDX0dMT0JB
TF9JTkNMVURFUy15ICAgICArPSAtSSQoTElCTk9MSUJDX0JBU0UpL211c2wtaW1wb3J0ZWQvaW5j
bHVkZQo+ICtMSUJOT0xJQkNfR0xPQkFMX0lOQ0xVREVTLXkgICAgICs9IC1JJChMSUJOT0xJQkNf
QkFTRSkvbXVzbC1pbXBvcnRlZC9hcmNoL2dlbmVyaWMKPiArQ0lOQ0xVREVTLSQoQ09ORklHX0xJ
Qk5PTElCQykgICArPSAkKExJQk5PTElCQ19HTE9CQUxfSU5DTFVERVMteSkKPiArQ1hYSU5DTFVE
RVMtJChDT05GSUdfTElCTk9MSUJDKSArPSAkKExJQk5PTElCQ19HTE9CQUxfSU5DTFVERVMteSkK
PiAgIAo+ICAgTElCTk9MSUJDX1NSQ1MteSArPSAkKExJQk5PTElCQ19CQVNFKS9lcnJuby5jCj4g
ICBMSUJOT0xJQkNfU1JDUy15ICs9ICQoTElCTk9MSUJDX0JBU0UpL3N0ZGlvLmMKPiBkaWZmIC0t
Z2l0IGEvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2FyY2gvZ2VuZXJpYy9iaXRzL2lvY3RsLmgg
Yi9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvYXJjaC9nZW5lcmljL2JpdHMvaW9jdGwuaAo+IGlu
ZGV4IGQxYTZjMDM1Li4zNzhkNDk1ZiAxMDA2NDQKPiAtLS0gYS9saWIvbm9saWJjL211c2wtaW1w
b3J0ZWQvYXJjaC9nZW5lcmljL2JpdHMvaW9jdGwuaAo+ICsrKyBiL2xpYi9ub2xpYmMvbXVzbC1p
bXBvcnRlZC9hcmNoL2dlbmVyaWMvYml0cy9pb2N0bC5oCj4gQEAgLTEwMyw4ICsxMDMsMTAgQEAK
PiAgICNkZWZpbmUgU0lPQ1NQR1JQICAgICAgIDB4ODkwMgo+ICAgI2RlZmluZSBGSU9HRVRPV04g
ICAgICAgMHg4OTAzCj4gICAjZGVmaW5lIFNJT0NHUEdSUCAgICAgICAweDg5MDQKPiArI2lmbmRl
ZiBDT05GSUdfTElCTFdJUAo+ICAgI2RlZmluZSBTSU9DQVRNQVJLICAgICAgMHg4OTA1Cj4gKyNl
bmRpZgo+ICAgI2RlZmluZSBTSU9DR1NUQU1QICAgICAgMHg4OTA2Cj4gICAjZGVmaW5lIFNJT0NH
U1RBTVBOUyAgICAweDg5MDcKPiAgIAo+IC0jaW5jbHVkZSA8Yml0cy9pb2N0bF9maXguaD4KPiAr
LyogVE9ETyAjaW5jbHVkZSA8Yml0cy9pb2N0bF9maXguaD4gKi8KCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5R-0003T5-Nm; Fri, 13 Sep 2019 12:54:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5Q-0003Sz-P8
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:04 +0000
X-Inumbo-ID: 8e8d9abc-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 8e8d9abc-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:01 +0000 (UTC)
IronPort-SDR: cpHduNZVfL/qO6NZTWSV6Ln3t/uUxn3xSL/fKnK4yWgcOXhsI/D8vYFNjYdYuez1mJGkq0VN9W
 vgEub2Go8/Rw==
IronPort-PHdr: =?us-ascii?q?9a23=3AMshEVhV5D4pnWutxbzpXtrJFeVDV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbReEt8tkgFKBZ4jH8fUM07OQ7/m7HzRfqsvc+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvndFeetayGNoKFmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQe3Ce/z1jNFnGP60Lcm3+?=
 =?us-ascii?q?g9FwzNwQwuH8gJsHTRtNj4KqASUfupzKnJyzXIcvVY2Srl6IjVbxsspu2DXb?=
 =?us-ascii?q?VrccrNyEkvERnJjlGNqYz9IjOYzfgCs3OB4+p4SOKgkHQrqxt2ojW2wMonl4?=
 =?us-ascii?q?rHhpoNx1zZ+ih13Zw5KN64RUJhf9KoDplduzuUOoduX88vTHxktDw5x7AGo5?=
 =?us-ascii?q?K3YiYHxZo9yxLCZPGLbY6F6Q/5WumLOzd3nndldaq6hxa17Eev1PXxVtKx0F?=
 =?us-ascii?q?ZWtipFlcTMtmwV2xzT9MeHTvx981+/2TaKzQ/T6+VELVoomqrAMZIh2qMwmY?=
 =?us-ascii?q?EJvUTZGS/6gET2jKmIeUU44uWk9uvqbqj8qpKfN4J4kB/yProsl8ClD+k0Kg?=
 =?us-ascii?q?0OUHKa+eS42r3j50r5QLBSg/IqlanZq4zaJcUdpqKjBw9Vz54j6wukAji6y9?=
 =?us-ascii?q?QUh2EHLE9edx6dlYjpPEnCIOrkAvenn1SsjDBryujDPr3gBJXNL3/DkKz4cb?=
 =?us-ascii?q?lg9UFc1hQ8zdRE6pJQC7EBO+7zWlTruN3XEBA5NRa4w+H9CNVyzokeQ36AAr?=
 =?us-ascii?q?eFMKPOtl+F/uwvLPeIZI8UoDbyNeIp5/7zjX84hVAdfLKk3Z0JZ3+kGvRpOV?=
 =?us-ascii?q?6WbWDyjdccCW0KpBYxTPT2iF2eVj5ef2iyX6Ym6T4mEI2pF4HDSZ23gLOf3S?=
 =?us-ascii?q?e3BIZZaXpbBVCLEHfoap6JW+wQaCKPP8BtiCYLWqS6S4M7yBGurBT1x6B9Lu?=
 =?us-ascii?q?rTqWUkssfm1d504PaWmRws+DhcC8WGz3rLX2xy2GQSSGwYxqd69Gd60UuC1+?=
 =?us-ascii?q?BcnuRFXYhY4OhVUwF8MYPE0sRxEJbqRwiHZNDfGwXuecmvHTxkFoF5+NQJeU?=
 =?us-ascii?q?soQ9g=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CjAgC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4NYIBIqjR2IF5sZCQEBAToBAgEBhD8CgwM4EwIDCQEBBQEBAQEBBgQ?=
 =?us-ascii?q?BBhoWBYVrgjoigm8GeRAgHwcLQxQZgyKCD6t9iHuBSYE0hx+GMT+DdWyFEYU?=
 =?us-ascii?q?WBJYfligHgiRkBJQDJ5kKLagZOIF5MxqDX4J6jhA9AQExAYEFAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2CjAgC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBZ4NYIBIqj?=
 =?us-ascii?q?R2IF5sZCQEBAToBAgEBhD8CgwM4EwIDCQEBBQEBAQEBBgQBBhoWBYVrgjoig?=
 =?us-ascii?q?m8GeRAgHwcLQxQZgyKCD6t9iHuBSYE0hx+GMT+DdWyFEYUWBJYfligHgiRkB?=
 =?us-ascii?q?JQDJ5kKLagZOIF5MxqDX4J6jhA9AQExAYEFAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786341"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 89DBF1A6014C;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 4mGB_ZMZOC-Y; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6A9DF1A6014A;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id an9mrrGgtNbd; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 4D04F1A60144;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:48 +0300
Message-Id: <20190913125353.972-8-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 07/12] _sysconfigdata.py:
 Disable features that are not avaiable on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIF9zeXNjb25maWdkYXRhLnB5IHwgOCArKysrLS0tLQogMSBmaWxl
IGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9f
c3lzY29uZmlnZGF0YS5weSBiL19zeXNjb25maWdkYXRhLnB5CmluZGV4IDE5MzU0Y2EuLmJkNTc1
YTggMTAwNjQ0Ci0tLSBhL19zeXNjb25maWdkYXRhLnB5CisrKyBiL19zeXNjb25maWdkYXRhLnB5
CkBAIC0xNTksNyArMTU5LDcgQEAgYnVpbGRfdGltZV92YXJzID0geydBQklGTEFHUyc6ICdtJywK
ICAnSEFWRV9FUkYnOiAxLAogICdIQVZFX0VSRkMnOiAxLAogICdIQVZFX0VSUk5PX0gnOiAxLAot
ICdIQVZFX0VYRUNWJzogMSwKKyAnSEFWRV9FWEVDVic6IDAsCiAgJ0hBVkVfRVhQTTEnOiAxLAog
ICdIQVZFX0ZBQ0NFU1NBVCc6IDEsCiAgJ0hBVkVfRkNIRElSJzogMSwKQEAgLTE3MCwxMSArMTcw
LDExIEBAIGJ1aWxkX3RpbWVfdmFycyA9IHsnQUJJRkxBR1MnOiAnbScsCiAgJ0hBVkVfRkNOVExf
SCc6IDEsCiAgJ0hBVkVfRkRBVEFTWU5DJzogMSwKICAnSEFWRV9GRE9QRU5ESVInOiAxLAotICdI
QVZFX0ZFWEVDVkUnOiAxLAorICdIQVZFX0ZFWEVDVkUnOiAwLAogICdIQVZFX0ZJTklURSc6IDEs
CiAgJ0hBVkVfRkxPQ0snOiAxLAotICdIQVZFX0ZPUksnOiAxLAotICdIQVZFX0ZPUktQVFknOiAx
LAorICdIQVZFX0ZPUksnOiAwLAorICdIQVZFX0ZPUktQVFknOiAwLAogICdIQVZFX0ZQQVRIQ09O
Ric6IDEsCiAgJ0hBVkVfRlNFRUs2NCc6IDAsCiAgJ0hBVkVfRlNFRUtPJzogMSwKLS0gCjIuMjAu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5S-0003TF-Px; Fri, 13 Sep 2019 12:54:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5R-0003T4-SP
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:05 +0000
X-Inumbo-ID: 8d777116-d625-11e9-95aa-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 8d777116-d625-11e9-95aa-12813bfff9fa;
 Fri, 13 Sep 2019 12:53:59 +0000 (UTC)
IronPort-SDR: tenXhBZc278Vwsf0ZCw9ZuqAppmfaplcjbx/Bj4nrg56BSEBiLxgY6BCLWl3Dsi7i649ela2ql
 t9dEvLfcjB0Q==
IronPort-PHdr: =?us-ascii?q?9a23=3ACQB08RJE5FHsQnSuMdmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfKf/xwZ3uMQTl6Ol3ixeRBMOHsqkC07Wd7v2oGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF+JqszxR?=
 =?us-ascii?q?fEontFcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWG?=
 =?us-ascii?q?hPUdtLVyFZAo2ycZYBAeQCM+hfrYb9qUADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsoTav3t8hhp?=
 =?us-ascii?q?TGi44I0FzJ9iV0zJwrKdGmSkN3e9CpHINNuyyVKod6WMAvTmFytCokxLALt4?=
 =?us-ascii?q?S3cDUFxZg5wRPUduaJfJKS4h35UeacOTJ4hHV4d72hnxuy6k2gyvHkVsmzzV?=
 =?us-ascii?q?ZKsjJJktnSuXAJ0Bze8taHSv5n8Ueg3TaDzRzc6vpeLUAsiKrUMIQtwqQ3lp?=
 =?us-ascii?q?YLsETDGDH5mFnugaOLeUgo5/Kk5ufnb7n8uJOQKY15hhvwP6g2n8ywG+U4Mg?=
 =?us-ascii?q?wAX2iB/uS80aXu8lH+QLVRkv02k6/ZvIreJcQGvq65HhRY3Zo46xqlFzemzc?=
 =?us-ascii?q?8XkWMdLFJCYB6HlZTmO0nSIPDkCveym1GskDZtx/DHOb3hGYzBIWXdn7f/Y7?=
 =?us-ascii?q?l971VRyA4yzdBE+5JUEasNIf3tVU/3rtDYCQU5MwOsyeb9FNp9zp8eWX6IAq?=
 =?us-ascii?q?KBPqPdr1uI5uM3I+aSfoMVuCv9K/k56P7vlnI5n0EScrWt3ZQNc3+0BOppI1?=
 =?us-ascii?q?iBa3r2ntgBCXsKvhY5TOHyll2CVSRcaGuqUK0m4DE0FZimApnCRoy3m7OOxj?=
 =?us-ascii?q?q0HppXZmBbEV2MCmvod5iZVPsWci2dPtRhniYZVbi5UIAtzwuutAipg4Zge+?=
 =?us-ascii?q?/V/Cwfrtfv2cZ448XXlAou7npkAsLb1HuCHE9umWZdbDgtwKF56Whg0krLha?=
 =?us-ascii?q?N/mOBZE5pX+utUegwhc4bBxapgDIahCUr6Yt6VRQP+EZ2dCjYrQ4dpzg=3D?=
 =?us-ascii?q?=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CjAgC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4FugWogEiqNHYgXmxkJAQEBOgECAQGEPwKDAzgTAgMJAQEFAQEBAQE?=
 =?us-ascii?q?GBAEGGhYFhWuCOiKCbwZ5ECAfEkMUGYJXS4IPq32Ie4FJgTSHH4YxP4ERgmR?=
 =?us-ascii?q?siicEjFyJQ5YoB4IkZASUAyeZCqhGOIF5MxqDX4JLAgEXFY4QPQEBMQGBBQE?=
 =?us-ascii?q?BjyABAQ?=
X-IPAS-Result: =?us-ascii?q?A2CjAgC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBZ4FugWogE?=
 =?us-ascii?q?iqNHYgXmxkJAQEBOgECAQGEPwKDAzgTAgMJAQEFAQEBAQEGBAEGGhYFhWuCO?=
 =?us-ascii?q?iKCbwZ5ECAfEkMUGYJXS4IPq32Ie4FJgTSHH4YxP4ERgmRsiicEjFyJQ5YoB?=
 =?us-ascii?q?4IkZASUAyeZCqhGOIF5MxqDX4JLAgEXFY4QPQEBMQGBBQEBjyABAQ?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786338"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6EF4F1A60146;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 4LY3o0qODENa; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 547471A6014C;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 0pvbDN8q0o-5; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 320901A6014A;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:46 +0300
Message-Id: <20190913125353.972-6-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 05/12] pyconfig.h: Disable
 features that are not avaiable on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU29tZSBvZiB0aGVzZSBmZWF0dXJlcyBoYXZlIHRvIGVuYWJsZWQgYmFjayB3aGVuIHdl
IHdpbGwgc3VwcG9ydCB0aGVtLgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4g
THVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGluY2x1ZGUvcHljb25maWcuaCB8IDE5
NiArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj
aGFuZ2VkLCA5OCBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9p
bmNsdWRlL3B5Y29uZmlnLmggYi9pbmNsdWRlL3B5Y29uZmlnLmgKaW5kZXggMWU0ZWY4YS4uYzc4
NmM2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9weWNvbmZpZy5oCisrKyBiL2luY2x1ZGUvcHljb25m
aWcuaApAQCAtNDIsNyArNDIsNyBAQAogLyogI3VuZGVmIEdFVFRJTUVPRkRBWV9OT19UWiAqLwog
CiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjY2VwdDQnIGZ1bmN0aW9uLiAqLwot
I2RlZmluZSBIQVZFX0FDQ0VQVDQgMQorLyogI2RlZmluZSBIQVZFX0FDQ0VQVDQgMSAqLwogCiAv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjb3NoJyBmdW5jdGlvbi4gKi8KICNkZWZp
bmUgSEFWRV9BQ09TSCAxCkBAIC0xMTUsMTMgKzExNSwxMyBAQAogI2RlZmluZSBIQVZFX0NIT1dO
IDEKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnY2hyb290JyBmdW5jdGlvbi4gKi8KLSNk
ZWZpbmUgSEFWRV9DSFJPT1QgMQorLyogI2RlZmluZSBIQVZFX0NIUk9PVCAxICovCiAKIC8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2snIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBI
QVZFX0NMT0NLIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9ja19nZXRy
ZXMnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0NMT0NLX0dFVFJFUyAxCisvKiAjZGVmaW5l
IEhBVkVfQ0xPQ0tfR0VUUkVTIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBjbG9ja19nZXR0aW1lJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9DTE9DS19HRVRUSU1F
IDEKQEAgLTE0Miw3ICsxNDIsNyBAQAogI2RlZmluZSBIQVZFX0NPUFlTSUdOIDEKIAogLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZp
bmUgSEFWRV9DUllQVF9IIDEKKy8qICNkZWZpbmUgSEFWRV9DUllQVF9IIDEgKi8KIAogLyogRGVm
aW5lIGlmIHlvdSBoYXZlIHRoZSBjcnlwdF9yKCkgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVf
Q1JZUFRfUiAxCkBAIC0yMDMsNyArMjAzLDcgQEAKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBSVExEX0RFRVBCSU5EJywgYW5kIHRvIDAgaWYgeW91CiAg
ICBkb24ndC4gKi8KLSNkZWZpbmUgSEFWRV9ERUNMX1JUTERfREVFUEJJTkQgMQorI2RlZmluZSBI
QVZFX0RFQ0xfUlRMRF9ERUVQQklORCAwCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9HTE9CQUwnLCBhbmQgdG8gMCBpZiB5b3UKICAgIGRvbid0
LiAqLwpAQCAtMjcyLDE2ICsyNzIsMTYgQEAKICNkZWZpbmUgSEFWRV9EVVAzIDEKIAogLyogRGVm
aW5lZCB3aGVuIGFueSBkeW5hbWljIG1vZHVsZSBsb2FkaW5nIGlzIGVuYWJsZWQuICovCi0jZGVm
aW5lIEhBVkVfRFlOQU1JQ19MT0FESU5HIDEKKy8qICNkZWZpbmUgSEFWRV9EWU5BTUlDX0xPQURJ
TkcgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFk
ZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9FTkRJQU5fSCAxCiAKIC8qIERlZmluZSBpZiB5b3Ug
aGF2ZSB0aGUgJ2Vwb2xsJyBmdW5jdGlvbnMuICovCi0jZGVmaW5lIEhBVkVfRVBPTEwgMQorLy8j
ZGVmaW5lIEhBVkVfRVBPTEwgMQogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdlcG9sbF9j
cmVhdGUxJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9FUE9MTF9DUkVBVEUxIDEKKy8vI2Rl
ZmluZSBIQVZFX0VQT0xMX0NSRUFURTEgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGVyZicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfRVJGIDEKQEAgLTI5Myw3ICsyOTMs
NyBAQAogI2RlZmluZSBIQVZFX0VSUk5PX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGV4ZWN2JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9FWEVDViAxCisvLyNkZWZp
bmUgSEFWRV9FWEVDViAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhwbTEn
IGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0VYUE0xIDEKQEAgLTMwOCwxMyArMzA4LDEzIEBA
CiAjZGVmaW5lIEhBVkVfRkNITU9EIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBmY2htb2RhdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRkNITU9EQVQgMQorLyogI2Rl
ZmluZSBIQVZFX0ZDSE1PREFUIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBmY2hvd24nIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0ZDSE9XTiAxCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNob3duYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBI
QVZFX0ZDSE9XTkFUIDEKKy8qICNkZWZpbmUgSEFWRV9GQ0hPV05BVCAxICovCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5l
IEhBVkVfRkNOVExfSCAxCkBAIC0zMjYsMTkgKzMyNiwxOSBAQAogI2RlZmluZSBIQVZFX0ZET1BF
TkRJUiAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmV4ZWN2ZScgZnVuY3Rp
b24uICovCi0jZGVmaW5lIEhBVkVfRkVYRUNWRSAxCisvKiNkZWZpbmUgSEFWRV9GRVhFQ1ZFIDEg
Ki8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmaW5pdGUnIGZ1bmN0aW9uLiAq
LwogI2RlZmluZSBIQVZFX0ZJTklURSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZmxvY2snIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZMT0NLIDEKKy8qICNkZWZpbmUg
SEFWRV9GTE9DSyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycg
ZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRk9SSyAxCisvKiAjZGVmaW5lIEhBVkVfRk9SSyAx
ICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9ya3B0eScgZnVuY3Rpb24u
ICovCi0jZGVmaW5lIEhBVkVfRk9SS1BUWSAxCisvKiAjZGVmaW5lIEhBVkVfRk9SS1BUWSAxICov
CiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnBhdGhjb25mJyBmdW5jdGlvbi4g
Ki8KICNkZWZpbmUgSEFWRV9GUEFUSENPTkYgMQpAQCAtMzcxLDEzICszNzEsMTMgQEAKICNkZWZp
bmUgSEFWRV9GVFJVTkNBVEUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1
dGltZW5zJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVVRJTUVOUyAxCisvKiAjZGVmaW5l
IEhBVkVfRlVUSU1FTlMgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1
dGltZXMnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZVVElNRVMgMQorLyogI2RlZmluZSBI
QVZFX0ZVVElNRVMgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1dGlt
ZXNhdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRlVUSU1FU0FUIDEKKy8qICNkZWZpbmUg
SEFWRV9GVVRJTUVTQVQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdh
aV9zdHJlcnJvcicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0FJX1NUUkVSUk9SIDEKQEAg
LTQwMiwxMyArNDAyLDEzIEBACiAjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMQogCiAvKiBEZWZp
bmUgdGhpcyBpZiB5b3UgaGF2ZSBmbG9ja2ZpbGUoKSwgZ2V0Y191bmxvY2tlZCgpLCBhbmQgZnVu
bG9ja2ZpbGUoKSAqLwotI2RlZmluZSBIQVZFX0dFVENfVU5MT0NLRUQgMQorLyogI2RlZmluZSBI
QVZFX0dFVENfVU5MT0NLRUQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGdldGVudHJvcHknIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVEVOVFJPUFkgMQorLyog
I2RlZmluZSBIQVZFX0dFVEVOVFJPUFkgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGdldGdyb3VwbGlzdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUR1JPVVBM
SVNUIDEKKy8qICNkZWZpbmUgSEFWRV9HRVRHUk9VUExJU1QgMSAqLwogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYGdldGdyb3VwcycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVf
R0VUR1JPVVBTIDEKQEAgLTQyOSwxMCArNDI5LDEwIEBACiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZ
TkFNRV9SXzZfQVJHIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRpdGlt
ZXInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVElUSU1FUiAxCisvKiAjZGVmaW5lIEhB
VkVfR0VUSVRJTUVSIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRs
b2FkYXZnJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRMT0FEQVZHIDEKKy8qICNkZWZp
bmUgSEFWRV9HRVRMT0FEQVZHIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRsb2dpbicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfR0VUTE9HSU4gMQpAQCAtNDUw
LDIyICs0NTAsMjIgQEAKICNkZWZpbmUgSEFWRV9HRVRQR0lEIDEKIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGBnZXRwZ3JwJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQ
R1JQIDEKKy8qICNkZWZpbmUgSEFWRV9HRVRQR1JQIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBnZXRwaWQnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dFVFBJRCAx
CiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHJpb3JpdHknIGZ1bmN0aW9u
LiAqLwotI2RlZmluZSBIQVZFX0dFVFBSSU9SSVRZIDEKKy8qICNkZWZpbmUgSEFWRV9HRVRQUklP
UklUWSAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHdlbnQnIGZ1
bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dFVFBXRU5UIDEKIAogLyogRGVmaW5lIHRvIDEgaWYg
dGhlIGdldHJhbmRvbSgpIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSAqLwotI2RlZmluZSBIQVZFX0dF
VFJBTkRPTSAxCisvKiAjZGVmaW5lIEhBVkVfR0VUUkFORE9NIDEgKi8KIAogLyogRGVmaW5lIHRv
IDEgaWYgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgYXZhaWxhYmxlICovCi0jZGVm
aW5lIEhBVkVfR0VUUkFORE9NX1NZU0NBTEwgMQorLyogI2RlZmluZSBIQVZFX0dFVFJBTkRPTV9T
WVNDQUxMIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRyZXNnaWQn
IGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dFVFJFU0dJRCAxCkBAIC00OTYsNyArNDk2LDcg
QEAKICNkZWZpbmUgSEFWRV9HUlBfSCAxCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2hz
dHJlcnJvcicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSFNUUkVSUk9SIDEKKy8qICNkZWZp
bmUgSEFWRV9IU1RSRVJST1IgMSAqLwogCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBsZTY0
dG9oKCkgKi8KICNkZWZpbmUgSEFWRV9IVE9MRTY0IDEKQEAgLTUwOCw3ICs1MDgsNyBAQAogLyog
I3VuZGVmIEhBVkVfSUVFRUZQX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBpZl9uYW1laW5kZXgnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0lGX05BTUVJTkRFWCAx
CisvLyNkZWZpbmUgSEFWRV9JRl9OQU1FSU5ERVggMQogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdpbmV0X2F0b24nIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0lORVRfQVRPTiAxCkBA
IC01NjgsNyArNTY4LDcgQEAKIC8qICN1bmRlZiBIQVZFX0xJQklFRUUgKi8KIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJpbnRsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmlu
ZSBIQVZFX0xJQklOVExfSCAxCisvKiAjZGVmaW5lIEhBVkVfTElCSU5UTF9IIDEgKi8KIAogLyog
RGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByZWFkbGluZSBsaWJyYXJ5ICgtbHJlYWRsaW5lKS4gKi8K
IC8qICN1bmRlZiBIQVZFX0xJQlJFQURMSU5FICovCkBAIC01ODYsMzQgKzU4NiwzNCBAQAogI2Rl
ZmluZSBIQVZFX0xJTksgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpbmth
dCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTElOS0FUIDEKKy8qICNkZWZpbmUgSEFWRV9M
SU5LQVQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi9i
Y20uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTElOVVhfQ0FOX0JDTV9IIDEKKy8v
I2RlZmluZSBIQVZFX0xJTlVYX0NBTl9CQ01fSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8bGludXgvY2FuLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0xJTlVY
X0NBTl9IIDEKKy8vI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9IIDEKIAogLyogRGVmaW5lIGlmIGNv
bXBpbGluZyB1c2luZyBMaW51eCAzLjYgb3IgbGF0ZXIuICovCi0jZGVmaW5lIEhBVkVfTElOVVhf
Q0FOX1JBV19GRF9GUkFNRVMgMQorLy8jZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19GRF9GUkFN
RVMgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi9yYXcuaD4g
aGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19IIDEKKy8vI2RlZmlu
ZSBIQVZFX0xJTlVYX0NBTl9SQVdfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8bGludXgvbmV0bGluay5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU5VWF9O
RVRMSU5LX0ggMQorLy8jZGVmaW5lIEhBVkVfTElOVVhfTkVUTElOS19IIDEKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9yYW5kb20uaD4gaGVhZGVyIGZpbGUuICovCi0j
ZGVmaW5lIEhBVkVfTElOVVhfUkFORE9NX0ggMQorLyogI2RlZmluZSBIQVZFX0xJTlVYX1JBTkRP
TV9IIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC90aXBjLmg+
IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0xJTlVYX1RJUENfSCAxCisvLyNkZWZpbmUg
SEFWRV9MSU5VWF9USVBDX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxp
bnV4L3ZtX3NvY2tldHMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTElOVVhfVk1f
U09DS0VUU19IIDEKKy8vI2RlZmluZSBIQVZFX0xJTlVYX1ZNX1NPQ0tFVFNfSCAxCiAKIC8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9ja2YnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBI
QVZFX0xPQ0tGIDEKKy8qICNkZWZpbmUgSEFWRV9MT0NLRiAxICovCiAKIC8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgbG9nMXAnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0xPRzFQ
IDEKQEAgLTYyOCw3ICs2MjgsNyBAQAogI2RlZmluZSBIQVZFX0xTVEFUIDEKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsdXRpbWVzJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFW
RV9MVVRJTUVTIDEKKy8qICNkZWZpbmUgSEFWRV9MVVRJTUVTIDEgKi8KIAogLyogRGVmaW5lIHRo
aXMgaWYgeW91IGhhdmUgdGhlIG1ha2VkZXYgbWFjcm8uICovCiAjZGVmaW5lIEhBVkVfTUFLRURF
ViAxCkBAIC02NDMsMjggKzY0MywyOCBAQAogI2RlZmluZSBIQVZFX01FTVJDSFIgMQogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1rZGlyYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmlu
ZSBIQVZFX01LRElSQVQgMQorLyogI2RlZmluZSBIQVZFX01LRElSQVQgMSAqLwogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1rZmlmbycgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhB
VkVfTUtGSUZPIDEKKy8qICNkZWZpbmUgSEFWRV9NS0ZJRk8gMSAqLwogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYG1rZmlmb2F0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9N
S0ZJRk9BVCAxCisvKiAjZGVmaW5lIEhBVkVfTUtGSUZPQVQgMSAqLwogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYG1rbm9kJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9NS05P
RCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtub2RhdCcgZnVuY3Rpb24u
ICovCi0jZGVmaW5lIEhBVkVfTUtOT0RBVCAxCisvKiAjZGVmaW5lIEhBVkVfTUtOT0RBVCAxICov
CiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWt0aW1lJyBmdW5jdGlvbi4gKi8K
ICNkZWZpbmUgSEFWRV9NS1RJTUUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YG1tYXAnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01NQVAgMQorLyogI2RlZmluZSBIQVZF
X01NQVAgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1yZW1hcCcgZnVu
Y3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTVJFTUFQIDEKKy8qICNkZWZpbmUgSEFWRV9NUkVNQVAg
MSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMuaD4gaGVhZGVy
IGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTkNVUlNFU19IIDEKQEAgLTY3Myw3ICs2NzMsNyBAQAog
LyogI3VuZGVmIEhBVkVfTkRJUl9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8bmV0cGFja2V0L3BhY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9ORVRQ
QUNLRVRfUEFDS0VUX0ggMQorLy8jZGVmaW5lIEhBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IIDEKIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICov
CiAjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQpAQCAtNjk0LDIyICs2OTQsMjIgQEAKICNkZWZpbmUg
SEFWRV9QQVVTRSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1
bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BJUEUyIDEKKy8qICNkZWZpbmUgSEFWRV9QSVBFMiAx
ICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGxvY2snIGZ1bmN0aW9uLiAq
LwogLyogI3VuZGVmIEhBVkVfUExPQ0sgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBwb2xsJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QT0xMIDEKKy8vI2RlZmluZSBI
QVZFX1BPTEwgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVh
ZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfUE9MTF9IIDEKKy8vI2RlZmluZSBIQVZFX1BPTExf
SCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfZmFkdmlzZScgZnVu
Y3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUE9TSVhfRkFEVklTRSAxCisvKiAjZGVmaW5lIEhBVkVf
UE9TSVhfRkFEVklTRSAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcG9z
aXhfZmFsbG9jYXRlJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QT1NJWF9GQUxMT0NBVEUg
MQorLyogI2RlZmluZSBIQVZFX1BPU0lYX0ZBTExPQ0FURSAxICovCiAKIC8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgcG9zaXhfc3Bhd24nIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZF
X1BPU0lYX1NQQVdOIDEKQEAgLTcyMSwxMCArNzIxLDEwIEBACiAjZGVmaW5lIEhBVkVfUFJFQURW
IDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZHYyJyBmdW5jdGlvbi4g
Ki8KLSNkZWZpbmUgSEFWRV9QUkVBRFYyIDEKKy8qICNkZWZpbmUgSEFWRV9QUkVBRFYyIDEgKi8K
IAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVuY3Rpb25zLiAqLwotI2Rl
ZmluZSBIQVZFX1BSTElNSVQgMQorLyogI2RlZmluZSBIQVZFX1BSTElNSVQgMSAqLwogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCiAv
KiAjdW5kZWYgSEFWRV9QUk9DRVNTX0ggKi8KQEAgLTczNiw3ICs3MzYsNyBAQAogLyogI3VuZGVm
IEhBVkVfUFRIUkVBRF9ERVNUUlVDVE9SICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSBgcHRocmVhZF9nZXRjcHVjbG9ja2lkJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9Q
VEhSRUFEX0dFVENQVUNMT0NLSUQgMQorLyogI2RlZmluZSBIQVZFX1BUSFJFQURfR0VUQ1BVQ0xP
Q0tJRCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHRocmVhZC5oPiBo
ZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9QVEhSRUFEX0ggMQpAQCAtNzQ1LDEwICs3NDUs
MTAgQEAKIC8qICN1bmRlZiBIQVZFX1BUSFJFQURfSU5JVCAqLwogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHB0aHJlYWRfa2lsbCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVf
UFRIUkVBRF9LSUxMIDEKKy8qICNkZWZpbmUgSEFWRV9QVEhSRUFEX0tJTEwgMSBUT0RPICovCiAK
IC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHRocmVhZF9zaWdtYXNrJyBmdW5jdGlv
bi4gKi8KLSNkZWZpbmUgSEFWRV9QVEhSRUFEX1NJR01BU0sgMQorLyogI2RlZmluZSBIQVZFX1BU
SFJFQURfU0lHTUFTSyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHR5
Lmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1BUWV9IIDEKQEAgLTc2MywyMiArNzYz
LDIyIEBACiAjZGVmaW5lIEhBVkVfUFdSSVRFViAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgcHdyaXRldjInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BXUklURVYyIDEK
Ky8qICNkZWZpbmUgSEFWRV9QV1JJVEVWMiAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgcmVhZGxpbmsnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1JFQURMSU5LIDEK
IAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkbGlua2F0JyBmdW5jdGlvbi4g
Ki8KLSNkZWZpbmUgSEFWRV9SRUFETElOS0FUIDEKKy8qICNkZWZpbmUgSEFWRV9SRUFETElOS0FU
IDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkdicgZnVuY3Rpb24u
ICovCiAjZGVmaW5lIEhBVkVfUkVBRFYgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHJlYWxwYXRoJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9SRUFMUEFUSCAxCisvKiAj
ZGVmaW5lIEhBVkVfUkVBTFBBVEggMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHJlbmFtZWF0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9SRU5BTUVBVCAxCisvKiAj
ZGVmaW5lIEhBVkVfUkVOQU1FQVQgMSAqLwogCiAvKiBEZWZpbmUgaWYgcmVhZGxpbmUgc3VwcG9y
dHMgYXBwZW5kX2hpc3RvcnkgKi8KIC8qICN1bmRlZiBIQVZFX1JMX0FQUEVORF9ISVNUT1JZICov
CkBAIC04MjAsMTAgKzgyMCwxMCBAQAogI2RlZmluZSBIQVZFX1NDSEVEX1NFVEFGRklOSVRZIDEK
IAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzY2hlZF9zZXRwYXJhbScgZnVuY3Rp
b24uICovCi0jZGVmaW5lIEhBVkVfU0NIRURfU0VUUEFSQU0gMQorLyogI2RlZmluZSBIQVZFX1ND
SEVEX1NFVFBBUkFNIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzY2hl
ZF9zZXRzY2hlZHVsZXInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NDSEVEX1NFVFNDSEVE
VUxFUiAxCisvKiAjZGVmaW5lIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSIDEgKi8KIAogLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW1fZ2V0dmFsdWUnIGZ1bmN0aW9uLiAqLwogI2Rl
ZmluZSBIQVZFX1NFTV9HRVRWQUxVRSAxCkBAIC04MzgsNyArODM4LDcgQEAKICNkZWZpbmUgSEFW
RV9TRU1fVU5MSU5LIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW5kZmls
ZScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VOREZJTEUgMQorLyogI2RlZmluZSBIQVZF
X1NFTkRGSUxFIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlZ2lk
JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TRVRFR0lEIDEKQEAgLTg1Niw3ICs4NTYsNyBA
QAogI2RlZmluZSBIQVZFX1NFVEhPU1ROQU1FIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBzZXRpdGltZXInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVElUSU1FUiAx
CisvKiAjZGVmaW5lIEhBVkVfU0VUSVRJTUVSIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBzZXRsb2NhbGUnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NFVExPQ0FM
RSAxCkBAIC04NjgsMTMgKzg2OCwxMyBAQAogI2RlZmluZSBIQVZFX1NFVFBHUlAgMQogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHByaW9yaXR5JyBmdW5jdGlvbi4gKi8KLSNk
ZWZpbmUgSEFWRV9TRVRQUklPUklUWSAxCisvKiAjZGVmaW5lIEhBVkVfU0VUUFJJT1JJVFkgMSAq
LwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHJlZ2lkJyBmdW5jdGlvbi4g
Ki8KICNkZWZpbmUgSEFWRV9TRVRSRUdJRCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSBgc2V0cmVzZ2lkJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRSRVNHSUQgMQor
LyogI2RlZmluZSBIQVZFX1NFVFJFU0dJRCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgc2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TRVRSRVNVSUQg
MQpAQCAtODk1LDQwICs4OTUsNDAgQEAKICNkZWZpbmUgSEFWRV9TSEFET1dfSCAxCiAKIC8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnYWN0aW9uJyBmdW5jdGlvbi4gKi8KLSNkZWZp
bmUgSEFWRV9TSUdBQ1RJT04gMQorLy8jZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEKIAogLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdhbHRzdGFjaycgZnVuY3Rpb24uICovCi0jZGVm
aW5lIEhBVkVfU0lHQUxUU1RBQ0sgMQorLy8jZGVmaW5lIEhBVkVfU0lHQUxUU1RBQ0sgMQogCiAv
KiBEZWZpbmUgdG8gMSBpZiBgc2lfYmFuZCcgaXMgYSBtZW1iZXIgb2YgYHNpZ2luZm9fdCcuICov
Ci0jZGVmaW5lIEhBVkVfU0lHSU5GT19UX1NJX0JBTkQgMQorLy8jZGVmaW5lIEhBVkVfU0lHSU5G
T19UX1NJX0JBTkQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2ludGVy
cnVwdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUIDEKKy8vI2RlZmlu
ZSBIQVZFX1NJR0lOVEVSUlVQVCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKKy8qICNk
ZWZpbmUgSEFWRV9TSUdOQUxfSCAxICovIC8vIFRPRE8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBzaWdwZW5kaW5nJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdQRU5E
SU5HIDEKKy8qICNkZWZpbmUgSEFWRV9TSUdQRU5ESU5HIDEgKi8gLy8gVE9ETwogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3JlbHNlJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUg
SEFWRV9TSUdSRUxTRSAxCisvKiAjZGVmaW5lIEhBVkVfU0lHUkVMU0UgMSAqLyAvL1RPRE8KIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWd0aW1lZHdhaXQnIGZ1bmN0aW9uLiAq
LwotI2RlZmluZSBIQVZFX1NJR1RJTUVEV0FJVCAxCisvKiAjZGVmaW5lIEhBVkVfU0lHVElNRURX
QUlUIDEgKi8vLyB0b2RvCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnd2Fp
dCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0lHV0FJVCAxCisvLyNkZWZpbmUgSEFWRV9T
SUdXQUlUIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWd3YWl0aW5mbycg
ZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0lHV0FJVElORk8gMQorLy8jZGVmaW5lIEhBVkVf
U0lHV0FJVElORk8gMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNucHJpbnRm
JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TTlBSSU5URiAxCisvLyNkZWZpbmUgSEFWRV9T
TlBSSU5URiAxCiAKIC8qIHN0cnVjdCBzb2NrYWRkcl9hbGcgKGxpbnV4L2lmX2FsZy5oKSAqLwot
I2RlZmluZSBIQVZFX1NPQ0tBRERSX0FMRyAxCisvLyNkZWZpbmUgSEFWRV9TT0NLQUREUl9BTEcg
MQogCiAvKiBEZWZpbmUgaWYgc29ja2FkZHIgaGFzIHNhX2xlbiBtZW1iZXIgKi8KIC8qICN1bmRl
ZiBIQVZFX1NPQ0tBRERSX1NBX0xFTiAqLwpAQCAtOTY1LDcgKzk2NSw3IEBACiAjZGVmaW5lIEhB
VkVfU1RETElCX0ggMQogCiAvKiBIYXMgc3RkYXRvbWljLmggd2l0aCBhdG9taWNfaW50ICovCi0j
ZGVmaW5lIEhBVkVfU1REX0FUT01JQyAxCisvLyNkZWZpbmUgSEFWRV9TVERfQVRPTUlDIDEKIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLwogI2Rl
ZmluZSBIQVZFX1NUUkRVUCAxCkBAIC05ODMsNyArOTgzLDcgQEAKIC8qICN1bmRlZiBIQVZFX1NU
UkxDUFkgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJvcHRzLmg+IGhl
YWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUUk9QVFNfSCAxCisvKiAjZGVmaW5lIEhBVkVf
U1RST1BUU19IIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgYHB3X2dlY29zJyBpcyBhIG1lbWJl
ciBvZiBgc3RydWN0IHBhc3N3ZCcuICovCiAjZGVmaW5lIEhBVkVfU1RSVUNUX1BBU1NXRF9QV19H
RUNPUyAxCkBAIC0xMDEwLDEzICsxMDEwLDEzIEBACiAjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRf
U1RfUkRFViAxCiAKIC8qIERlZmluZSB0byAxIGlmIGB0bV96b25lJyBpcyBhIG1lbWJlciBvZiBg
c3RydWN0IHRtJy4gKi8KLSNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1fVE1fWk9ORSAxCisvKiAjZGVm
aW5lIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUgMSAqLwogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdzeW1saW5rJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TWU1MSU5LIDEKIAogLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW1saW5rYXQnIGZ1bmN0aW9uLiAqLwotI2Rl
ZmluZSBIQVZFX1NZTUxJTktBVCAxCisvKiAjZGVmaW5lIEhBVkVfU1lNTElOS0FUIDEgKi8KIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW5jJyBmdW5jdGlvbi4gKi8KICNkZWZp
bmUgSEFWRV9TWU5DIDEKQEAgLTEwNDQsNyArMTA0NCw3IEBACiAvKiAjdW5kZWYgSEFWRV9TWVNf
RU5ESUFOX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZXBvbGwu
aD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX0VQT0xMX0ggMQorLyogI2RlZmlu
ZSBIQVZFX1NZU19FUE9MTF9IIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzeXMvZXZlbnQuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9TWVNfRVZFTlRf
SCAqLwpAQCAtMTA3OCwxMCArMTA3OCwxMCBAQAogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEK
IAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmls
ZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUE9MTF9IIDEKKy8vI2RlZmluZSBIQVZFX1NZU19QT0xM
X0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yYW5kb20uaD4gaGVh
ZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1JBTkRPTV9IIDEKKy8qICNkZWZpbmUgSEFW
RV9TWVNfUkFORE9NX0ggMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5
cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TWVNfUkVTT1VSQ0Vf
SCAxCkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogI2RlZmluZSBIQVZFX1NZU19TRUxFQ1RfSCAxCiAK
IC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3NlbmRmaWxlLmg+IGhlYWRlciBm
aWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19TRU5ERklMRV9IIDEKKy8qICNkZWZpbmUgSEFWRV9T
WVNfU0VOREZJTEVfSCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lz
L3NvY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TWVNfU09DS0VUX0ggMQpA
QCAtMTE5MSw3ICsxMTkxLDcgQEAKICNkZWZpbmUgSEFWRV9VTklTVERfSCAxCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5saW5rYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBI
QVZFX1VOTElOS0FUIDEKKy8qICNkZWZpbmUgSEFWRV9VTkxJTktBVCAxICovCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5zZXRlbnYnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBI
QVZFX1VOU0VURU5WIDEKQEAgLTEyMDUsNyArMTIwNSw3IEBACiAvKiAjdW5kZWYgSEFWRV9VVElM
X0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGltZW5zYXQnIGZ1bmN0
aW9uLiAqLwotI2RlZmluZSBIQVZFX1VUSU1FTlNBVCAxCisvKiAjZGVmaW5lIEhBVkVfVVRJTUVO
U0FUIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGltZXMnIGZ1bmN0
aW9uLiAqLwogI2RlZmluZSBIQVZFX1VUSU1FUyAxCkBAIC0xMjIwLDEzICsxMjIwLDEzIEBACiAv
KiAjdW5kZWYgSEFWRV9VVUlEX0VOQ19CRSAqLwogCiAvKiBEZWZpbmUgaWYgdXVpZF9nZW5lcmF0
ZV90aW1lX3NhZmUoKSBleGlzdHMuICovCi0jZGVmaW5lIEhBVkVfVVVJRF9HRU5FUkFURV9USU1F
X1NBRkUgMQorLyogI3VuZGVmIEhBVkVfVVVJRF9HRU5FUkFURV9USU1FX1NBRkUgKi8KIAogLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dWlkLmg+IGhlYWRlciBmaWxlLiAqLwogLyog
I3VuZGVmIEhBVkVfVVVJRF9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
dXVpZC91dWlkLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VVSURfVVVJRF9IIDEK
Ky8qICN1bmRlZiBIQVZFX1VVSURfVVVJRF9IICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgd2FpdDMnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1dBSVQzIDEKQEAgLTEy
MzUsNyArMTIzNSw3IEBACiAjZGVmaW5lIEhBVkVfV0FJVDQgMQogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHdhaXRpZCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfV0FJVElE
IDEKKy8qICNkZWZpbmUgSEFWRV9XQUlUSUQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHdhaXRwaWQnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1dBSVRQSUQgMQpA
QCAtMTI2MywxMCArMTI2MywxMCBAQAogI2RlZmluZSBIQVZFX1dSSVRFViAxCiAKIC8qIERlZmlu
ZSBpZiBsaWJzc2wgaGFzIFg1MDlfVkVSSUZZX1BBUkFNX3NldDFfaG9zdCBhbmQgcmVsYXRlZCBm
dW5jdGlvbiAqLwotI2RlZmluZSBIQVZFX1g1MDlfVkVSSUZZX1BBUkFNX1NFVDFfSE9TVCAxCisv
KiAjdW5kZWYgSEFWRV9YNTA5X1ZFUklGWV9QQVJBTV9TRVQxX0hPU1QgKi8KIAogLyogRGVmaW5l
IGlmIHRoZSB6bGliIGxpYnJhcnkgaGFzIGluZmxhdGVDb3B5ICovCi0jZGVmaW5lIEhBVkVfWkxJ
Ql9DT1BZIDEKKy8qICN1bmRlZiBIQVZFX1pMSUJfQ09QWSAqLwogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYF9nZXRwdHknIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfX0dF
VFBUWSAqLwpAQCAtMTMxNiw3ICsxMzE2LDcgQEAKIC8qICN1bmRlZiBQWUxPTkdfQklUU19JTl9E
SUdJVCAqLwogCiAvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gY29lcmNlIHRoZSBDIGxvY2FsZSB0
byBhIFVURi04IGJhc2VkIGxvY2FsZSAqLwotI2RlZmluZSBQWV9DT0VSQ0VfQ19MT0NBTEUgMQor
LyogI2RlZmluZSBQWV9DT0VSQ0VfQ19MT0NBTEUgMSAqLyAvL1RPRE8KIAogLyogRGVmaW5lIHRv
IHByaW50ZiBmb3JtYXQgbW9kaWZpZXIgZm9yIFB5X3NzaXplX3QgKi8KICNkZWZpbmUgUFlfRk9S
TUFUX1NJWkVfVCAieiIKQEAgLTEzMzIsNyArMTMzMiw3IEBACiAvKiAjdW5kZWYgUHlfREVCVUcg
Ki8KIAogLyogRGVmaW5lZCBpZiBQeXRob24gaXMgYnVpbHQgYXMgYSBzaGFyZWQgbGlicmFyeS4g
Ki8KLS8qICN1bmRlZiBQeV9FTkFCTEVfU0hBUkVEICovCisjdW5kZWYgUHlfRU5BQkxFX1NIQVJF
RAogCiAvKiBEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZp
ZXcuIFNpcEhhc2gyNDogMSwgRk5WOiAyLAogICAgZXh0ZXJuYWxseSBkZWZpbmVkOiAwICovCkBA
IC0xMzc4LDcgKzEzNzgsNyBAQAogI2RlZmluZSBTSVpFT0ZfUFRIUkVBRF9LRVlfVCA0CiAKIC8q
IFRoZSBzaXplIG9mIGBwdGhyZWFkX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCi0jZGVm
aW5lIFNJWkVPRl9QVEhSRUFEX1QgOAorI2RlZmluZSBTSVpFT0ZfUFRIUkVBRF9UIDE2CiAKIC8q
IFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUg
U0laRU9GX1NIT1JUIDIKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5W-0003U7-Rx; Fri, 13 Sep 2019 12:54:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5V-0003Tu-MO
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:09 +0000
X-Inumbo-ID: 8deacf44-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 8deacf44-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:00 +0000 (UTC)
IronPort-SDR: B1gxPDBuihtR3dXiBDWyy9UGm4yqoE6nJvsYsb1vMe1xW5rf82fm6QSJQ4NcOlFcq9dRov+s13
 xoJVW61WwVYw==
IronPort-PHdr: =?us-ascii?q?9a23=3Als9LuhC30N+OHIErkBESUyQJP3N1i/DPJgcQr6?=
 =?us-ascii?q?AfoPdwSPX9pMbcNUDSrc9gkEXOFd2Cra4d0KyO7Ou9BCRAuc/H7ClYNsQUFl?=
 =?us-ascii?q?cssoY/p0QYGsmLCEn2frbBThcRO4B8bmJj5GyxKkNPGczzNBX4q3y26iMOSF?=
 =?us-ascii?q?2kbVImbuv6FZTPgMupyuu854PcYxlShDq6fLh+MAi6oR/eu8ULj4ZuMLo9xx?=
 =?us-ascii?q?nGrnZIe+ld2GdkKU6Okxrm6cq84YBv/z5Mt/498sJLTLn3cbk/QbFEFjotLn?=
 =?us-ascii?q?o75NfstRnNTAuP4mUTX2ALmRdWAAbL8Q/3UI7pviT1quRy1i+aPdbrTb8vQj?=
 =?us-ascii?q?St871rSB7zhygZMTMy7XzahdZxjKJfpxKhugB/zovJa4ybKPZyYqXQds4cSG?=
 =?us-ascii?q?FcXMheSjZBD5u8YYUREuQPM+VWoY7/qFsAthayGRWgCfnzxjJSmnP6was32P?=
 =?us-ascii?q?khHwHc2wwgGsoDvWrTrNXuKKcSUOa1x7TOwzXed/NWxCr25Y/UfRAmuvGMQb?=
 =?us-ascii?q?NwcczLxUkrCgPFlkiQpJf5MDOOzOgNq3Wb4PF6WeK1jG4qsgd8qSWhyMcrj4?=
 =?us-ascii?q?nGnIMVylbc+CVh2oY6O8e0SE99YdOiDZBetDmaOpNrTs4tXm1koiU3x70ctZ?=
 =?us-ascii?q?KlYiQHyo4ryhDHZ/CafIWE/wjvWeWRLDtimn5odryyiwyv/UWv1OHxUNS/3k?=
 =?us-ascii?q?xQoSpfiNbMs2gA1xnU6seaVPRw5lyh2TOT1wDL7eFEPFw0mbLbK5E/xr4wkY?=
 =?us-ascii?q?IesVrGHiDsmUX2iLWaeVk/+uSy8+Tnf67pqoWGN49zkg3+M6IuldKjAekgLw?=
 =?us-ascii?q?QDUHWX9f6/2bDj50H1XqtGg/8snqTXqJzaIN4Upq+9Aw9byIYj7BO/Ai+639?=
 =?us-ascii?q?QfhnkHMFNFeBSdg4jtJlHOOO34AOyjjFS3ijtr3+3GMab7DpXXKXjPiK3hcq?=
 =?us-ascii?q?pl605A1AozyshS55dVCrEHIfLzXVTxuMXFARAnLQy73eLnBc551oMfQmKPHr?=
 =?us-ascii?q?SZPLndsFCW4OIjOe6MZJUauDzlMfgq++bujWMlmV8aZaSp04UYaHS5HvR+PU?=
 =?us-ascii?q?qVe3rsgsoAEWgWvwozV+rqh0OeXj5XfXm9RLgw6S8mCIi+F4fMWpitgKCd3C?=
 =?us-ascii?q?e8BpBWeGRGBUqRHnjwbYqEXeoDaDiMLc9giDALTqKuRJIm1RGvqQ/30KFnLv?=
 =?us-ascii?q?bJ+iIFr57szsR65/bJmREv7Tx7FN6R03uKTzI8omRdQj4w3adk5EBw1FqH+a?=
 =?us-ascii?q?x5mOBDU8xe4bVOSAhpG4TbyrlRDMvuWwSJWsqRVR7ySdK9HTA3CNYs28ImaF?=
 =?us-ascii?q?07A8ioyArEiXn5S4QJnqCGUcRnupnX2GL8cp5w?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CbBAC/kHtdXQPjVY1mHgEGBwaBZ4M?=
 =?us-ascii?q?FUyASKo0diBebGQkBAQEpEQECAQGEPwKDAzgTAgMJAQEFAQEBAQEGBAEGGhY?=
 =?us-ascii?q?FhV8Mgjoigm8GGl8QIB8SQxQZgyIBgg6rfYVLgzCBSYE0hx+GMT+BEYNQigU?=
 =?us-ascii?q?iBI0MiROWKAeCJGQEhhmNaieDJJVmLaJjhTY4gXkzGlKDDQmCRReBQIRliAA?=
 =?us-ascii?q?9AQExAYEFAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2CbBAC/kHtdXQPjVY1mHgEGBwaBZ4MFUyASKo0diBebG?=
 =?us-ascii?q?QkBAQEpEQECAQGEPwKDAzgTAgMJAQEFAQEBAQEGBAEGGhYFhV8Mgjoigm8GG?=
 =?us-ascii?q?l8QIB8SQxQZgyIBgg6rfYVLgzCBSYE0hx+GMT+BEYNQigUiBI0MiROWKAeCJ?=
 =?us-ascii?q?GQEhhmNaieDJJVmLaJjhTY4gXkzGlKDDQmCRReBQIRliAA9AQExAYEFAQGPI?=
 =?us-ascii?q?AEB?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786339"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7E3C11A6014C;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id SIt8oPfDOy0y; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 60ABE1A60156;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id UGWofhkwnlk3; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 43C421A60146;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:47 +0300
Message-Id: <20190913125353.972-7-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 06/12] _sysconfigdata.py:
 Introduce file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKX3N5c2NvbmZpZ2RhdGEucHkgY29udGFpbnMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGRh
dGEgdXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIgYXQKcnVudGltZS4gVGhpcyBwYXRjaCBhZGRzIHRo
ZSBzbGlnaHRseSBjaGFuZ2VkIGZpbGUgZ2VuZXJhdGVkIGJ5IGEgLi9jb25maWd1cmUKcnVuLgoK
U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3Mu
cHViLnJvPgotLS0KIF9zeXNjb25maWdkYXRhLnB5IHwgNzA3ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA3MDcgaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IF9zeXNjb25maWdkYXRhLnB5CgpkaWZmIC0tZ2l0IGEv
X3N5c2NvbmZpZ2RhdGEucHkgYi9fc3lzY29uZmlnZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xOTM1NGNhCi0tLSAvZGV2L251bGwKKysrIGIvX3N5c2NvbmZpZ2Rh
dGEucHkKQEAgLTAsMCArMSw3MDcgQEAKKyMgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGVk
IGFuZCB1c2VkIGJ5IHRoZSBzeXNjb25maWcgbW9kdWxlCitidWlsZF90aW1lX3ZhcnMgPSB7J0FC
SUZMQUdTJzogJ20nLAorICdBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQnOiAwLAorICdBSVhfR0VO
VUlORV9DUExVU1BMVVMnOiAwLAorICdBTkRST0lEX0FQSV9MRVZFTCc6IDAsCisgJ0FSJzogJ2Fy
JywKKyAnQVJGTEFHUyc6ICdyY3MnLAorICdCQVNFQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3Vs
dCAtV3NpZ24tY29tcGFyZScsCisgJ0JBU0VDUFBGTEFHUyc6ICcnLAorICdCQVNFTU9ETElCUyc6
ICcnLAorICdCSU5ESVInOiAnL3Vzci9sb2NhbC9iaW4nLAorICdCSU5MSUJERVNUJzogJy91c3Iv
bG9jYWwvbGliL3B5dGhvbjMuNycsCisgJ0JMRExJQlJBUlknOiAnbGlicHl0aG9uMy43bS5hJywK
KyAnQkxEU0hBUkVEJzogJ2djYyAtcHRocmVhZCAtc2hhcmVkJywKKyAnQlVJTERFWEUnOiAnJywK
KyAnQlVJTERQWVRIT04nOiAncHl0aG9uJywKKyAnQlVJTERfR05VX1RZUEUnOiAneDg2XzY0LXBj
LWxpbnV4LWdudScsCisgJ0JZVEVTVFJfREVQUyc6ICdcXCcsCisgJ0NDJzogJ2djYyAtcHRocmVh
ZCcsCisgJ0NDU0hBUkVEJzogJy1mUElDJywKKyAnQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3Vs
dCAtV3NpZ24tY29tcGFyZSAtRE5ERUJVRyAtZyAtZndyYXB2IC1PMyAtV2FsbCcsCisgJ0NGTEFH
U0ZPUlNIQVJFRCc6ICcnLAorICdDRkxBR1NfQUxJQVNJTkcnOiAnJywKKyAnQ0ZMQUdTX05PRElT
VCc6ICcnLAorICdDT05GSUdGSUxFUyc6ICdjb25maWd1cmUgY29uZmlndXJlLmFjIGFjY29uZmln
LmggcHljb25maWcuaC5pbiAnCisgICAgICAgICAgICAgICAgJ01ha2VmaWxlLnByZS5pbicsCisg
J0NPTkZJR1VSRV9DRkxBR1MnOiAnJywKKyAnQ09ORklHVVJFX0NGTEFHU19OT0RJU1QnOiAnLXN0
ZD1jOTkgLVdleHRyYSAtV25vLXVudXNlZC1yZXN1bHQgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICctV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzICcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUgJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uJywKKyAnQ09O
RklHVVJFX0NQUEZMQUdTJzogJycsCisgJ0NPTkZJR1VSRV9MREZMQUdTJzogJycsCisgJ0NPTkZJ
R1VSRV9MREZMQUdTX05PRElTVCc6ICcnLAorICdDT05GSUdfQVJHUyc6ICcnLAorICdDT05GSU5D
TFVERURJUic6ICcvdXNyL2xvY2FsL2luY2x1ZGUnLAorICdDT05GSU5DTFVERVBZJzogJy91c3Iv
bG9jYWwvaW5jbHVkZS9weXRob24zLjdtJywKKyAnQ09SRVBZVEhPTlBBVEgnOiAnJywKKyAnQ09W
RVJBR0VfSU5GTyc6ICcnLAorICdDT1ZFUkFHRV9SRVBPUlQnOiAnJywKKyAnQ09WRVJBR0VfUkVQ
T1JUX09QVElPTlMnOiAnLS1uby1icmFuY2gtY292ZXJhZ2UgLS10aXRsZSAiQ1B5dGhvbiBsY292
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwb3J0IicsCisgJ0NQUEZMQUdTJzog
Jy1JLiAtSS4vSW5jbHVkZScsCisgJ0NYWCc6ICdnKysgLXB0aHJlYWQnLAorICdERVNURElSUyc6
ICcvdXNyL2xvY2FsIC91c3IvbG9jYWwvbGliIC91c3IvbG9jYWwvbGliL3B5dGhvbjMuNyAnCisg
ICAgICAgICAgICAgJy91c3IvbG9jYWwvbGliL3B5dGhvbjMuNy9saWItZHlubG9hZCcsCisgJ0RF
U1RMSUInOiAnL3Vzci9sb2NhbC9saWIvcHl0aG9uMy43JywKKyAnREVTVFBBVEgnOiAnJywKKyAn
REVTVFNIQVJFRCc6ICcvdXNyL2xvY2FsL2xpYi9weXRob24zLjcvbGliLWR5bmxvYWQnLAorICdE
RkxBR1MnOiAnJywKKyAnRElSTU9ERSc6IDc1NSwKKyAnRElTVCc6ICdSRUFETUUucnN0IENoYW5n
ZUxvZyBjb25maWd1cmUgY29uZmlndXJlLmFjIGFjY29uZmlnLmggcHljb25maWcuaC5pbiAnCisg
ICAgICAgICAnTWFrZWZpbGUucHJlLmluIEluY2x1ZGUgTGliIE1pc2MgRXh0LWR1bW15JywKKyAn
RElTVERJUlMnOiAnSW5jbHVkZSBMaWIgTWlzYyBFeHQtZHVtbXknLAorICdESVNURklMRVMnOiAn
UkVBRE1FLnJzdCBDaGFuZ2VMb2cgY29uZmlndXJlIGNvbmZpZ3VyZS5hYyBhY2NvbmZpZy5oICcK
KyAgICAgICAgICAgICAgJ3B5Y29uZmlnLmguaW4gTWFrZWZpbGUucHJlLmluJywKKyAnRExJTkNM
RElSJzogJy4nLAorICdETExMSUJSQVJZJzogJycsCisgJ0RPVUJMRV9JU19BUk1fTUlYRURfRU5E
SUFOX0lFRUU3NTQnOiAwLAorICdET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0JzogMCwKKyAn
RE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NCc6IDEsCisgJ0RUUkFDRSc6ICcnLAorICdE
VFJBQ0VfREVQUyc6ICdcXCcsCisgJ0RUUkFDRV9IRUFERVJTJzogJycsCisgJ0RUUkFDRV9PQkpT
JzogJycsCisgJ0RZTkxPQURGSUxFJzogJ2R5bmxvYWRfc2hsaWIubycsCisgJ0VOQUJMRV9JUFY2
JzogMSwKKyAnRU5TVVJFUElQJzogJ3VwZ3JhZGUnLAorICdFWEUnOiAnJywKKyAnRVhFTU9ERSc6
IDc1NSwKKyAnRVhUUkFURVNUT1BUUyc6ICcnLAorICdFWFRSQV9DRkxBR1MnOiAnJywKKyAnRVhU
X1NVRkZJWCc6ICcuY3B5dGhvbi0zN20teDg2XzY0LWxpbnV4LWdudS5zbycsCisgJ0ZJTEVNT0RF
JzogNjQ0LAorICdGTE9DS19ORUVEU19MSUJCU0QnOiAwLAorICdHRVRQR1JQX0hBVkVfQVJHJzog
MCwKKyAnR0VUVElNRU9GREFZX05PX1RaJzogMCwKKyAnR0lUQlJBTkNIJzogJycsCisgJ0dJVFRB
Ryc6ICcnLAorICdHSVRWRVJTSU9OJzogJycsCisgJ0dOVUxEJzogJ3llcycsCisgJ0hBVkVfQUND
RVBUNCc6IDEsCisgJ0hBVkVfQUNPU0gnOiAxLAorICdIQVZFX0FERFJJTkZPJzogMSwKKyAnSEFW
RV9BTEFSTSc6IDEsCisgJ0hBVkVfQUxJR05FRF9SRVFVSVJFRCc6IDAsCisgJ0hBVkVfQUxMT0NB
X0gnOiAxLAorICdIQVZFX0FMVFpPTkUnOiAwLAorICdIQVZFX0FTSU5IJzogMSwKKyAnSEFWRV9B
U01fVFlQRVNfSCc6IDEsCisgJ0hBVkVfQVRBTkgnOiAxLAorICdIQVZFX0JJTkRfVEVYVERPTUFJ
Tl9DT0RFU0VUJzogMSwKKyAnSEFWRV9CTFVFVE9PVEhfQkxVRVRPT1RIX0gnOiAwLAorICdIQVZF
X0JMVUVUT09USF9IJzogMCwKKyAnSEFWRV9CUk9LRU5fTUJTVE9XQ1MnOiAwLAorICdIQVZFX0JS
T0tFTl9OSUNFJzogMCwKKyAnSEFWRV9CUk9LRU5fUElQRV9CVUYnOiAwLAorICdIQVZFX0JST0tF
Tl9QT0xMJzogMCwKKyAnSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUyc6IDAsCisgJ0hBVkVf
QlJPS0VOX1BUSFJFQURfU0lHTUFTSyc6IDAsCisgJ0hBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRSc6
IDAsCisgJ0hBVkVfQlJPS0VOX1VOU0VURU5WJzogMCwKKyAnSEFWRV9CVUlMVElOX0FUT01JQyc6
IDEsCisgJ0hBVkVfQ0hGTEFHUyc6IDAsCisgJ0hBVkVfQ0hPV04nOiAxLAorICdIQVZFX0NIUk9P
VCc6IDEsCisgJ0hBVkVfQ0xPQ0snOiAxLAorICdIQVZFX0NMT0NLX0dFVFJFUyc6IDEsCisgJ0hB
VkVfQ0xPQ0tfR0VUVElNRSc6IDEsCisgJ0hBVkVfQ0xPQ0tfU0VUVElNRSc6IDEsCisgJ0hBVkVf
Q09NUFVURURfR09UT1MnOiAxLAorICdIQVZFX0NPTkZTVFInOiAxLAorICdIQVZFX0NPTklPX0gn
OiAwLAorICdIQVZFX0NPUFlTSUdOJzogMSwKKyAnSEFWRV9DUllQVF9IJzogMSwKKyAnSEFWRV9D
UllQVF9SJzogMSwKKyAnSEFWRV9DVEVSTUlEJzogMSwKKyAnSEFWRV9DVEVSTUlEX1InOiAwLAor
ICdIQVZFX0NVUlNFU19GSUxURVInOiAxLAorICdIQVZFX0NVUlNFU19IJzogMSwKKyAnSEFWRV9D
VVJTRVNfSEFTX0tFWSc6IDEsCisgJ0hBVkVfQ1VSU0VTX0lNTUVET0snOiAxLAorICdIQVZFX0NV
UlNFU19JU19QQUQnOiAxLAorICdIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQnOiAxLAorICdI
QVZFX0NVUlNFU19SRVNJWkVURVJNJzogMSwKKyAnSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0nOiAx
LAorICdIQVZFX0NVUlNFU19TWU5DT0snOiAxLAorICdIQVZFX0NVUlNFU19UWVBFQUhFQUQnOiAx
LAorICdIQVZFX0NVUlNFU19VU0VfRU5WJzogMSwKKyAnSEFWRV9DVVJTRVNfV0NIR0FUJzogMSwK
KyAnSEFWRV9ERUNMX0lTRklOSVRFJzogMSwKKyAnSEFWRV9ERUNMX0lTSU5GJzogMSwKKyAnSEFW
RV9ERUNMX0lTTkFOJzogMSwKKyAnSEFWRV9ERUNMX1JUTERfREVFUEJJTkQnOiAxLAorICdIQVZF
X0RFQ0xfUlRMRF9HTE9CQUwnOiAxLAorICdIQVZFX0RFQ0xfUlRMRF9MQVpZJzogMSwKKyAnSEFW
RV9ERUNMX1JUTERfTE9DQUwnOiAxLAorICdIQVZFX0RFQ0xfUlRMRF9NRU1CRVInOiAwLAorICdI
QVZFX0RFQ0xfUlRMRF9OT0RFTEVURSc6IDEsCisgJ0hBVkVfREVDTF9SVExEX05PTE9BRCc6IDEs
CisgJ0hBVkVfREVDTF9SVExEX05PVyc6IDEsCisgJ0hBVkVfREVDTF9UWk5BTUUnOiAwLAorICdI
QVZFX0RFVklDRV9NQUNST1MnOiAxLAorICdIQVZFX0RFVl9QVEMnOiAwLAorICdIQVZFX0RFVl9Q
VE1YJzogMSwKKyAnSEFWRV9ESVJFQ1RfSCc6IDAsCisgJ0hBVkVfRElSRU5UX0RfVFlQRSc6IDEs
CisgJ0hBVkVfRElSRU5UX0gnOiAxLAorICdIQVZFX0RJUkZEJzogMSwKKyAnSEFWRV9ETEZDTl9I
JzogMSwKKyAnSEFWRV9ETE9QRU4nOiAxLAorICdIQVZFX0RVUDInOiAxLAorICdIQVZFX0RVUDMn
OiAxLAorICdIQVZFX0RZTkFNSUNfTE9BRElORyc6IDEsCisgJ0hBVkVfRU5ESUFOX0gnOiAxLAor
ICdIQVZFX0VQT0xMJzogMSwKKyAnSEFWRV9FUE9MTF9DUkVBVEUxJzogMSwKKyAnSEFWRV9FUkYn
OiAxLAorICdIQVZFX0VSRkMnOiAxLAorICdIQVZFX0VSUk5PX0gnOiAxLAorICdIQVZFX0VYRUNW
JzogMSwKKyAnSEFWRV9FWFBNMSc6IDEsCisgJ0hBVkVfRkFDQ0VTU0FUJzogMSwKKyAnSEFWRV9G
Q0hESVInOiAxLAorICdIQVZFX0ZDSE1PRCc6IDEsCisgJ0hBVkVfRkNITU9EQVQnOiAxLAorICdI
QVZFX0ZDSE9XTic6IDEsCisgJ0hBVkVfRkNIT1dOQVQnOiAxLAorICdIQVZFX0ZDTlRMX0gnOiAx
LAorICdIQVZFX0ZEQVRBU1lOQyc6IDEsCisgJ0hBVkVfRkRPUEVORElSJzogMSwKKyAnSEFWRV9G
RVhFQ1ZFJzogMSwKKyAnSEFWRV9GSU5JVEUnOiAxLAorICdIQVZFX0ZMT0NLJzogMSwKKyAnSEFW
RV9GT1JLJzogMSwKKyAnSEFWRV9GT1JLUFRZJzogMSwKKyAnSEFWRV9GUEFUSENPTkYnOiAxLAor
ICdIQVZFX0ZTRUVLNjQnOiAwLAorICdIQVZFX0ZTRUVLTyc6IDEsCisgJ0hBVkVfRlNUQVRBVCc6
IDEsCisgJ0hBVkVfRlNUQVRWRlMnOiAxLAorICdIQVZFX0ZTWU5DJzogMSwKKyAnSEFWRV9GVEVM
TDY0JzogMCwKKyAnSEFWRV9GVEVMTE8nOiAxLAorICdIQVZFX0ZUSU1FJzogMSwKKyAnSEFWRV9G
VFJVTkNBVEUnOiAxLAorICdIQVZFX0ZVVElNRU5TJzogMSwKKyAnSEFWRV9GVVRJTUVTJzogMSwK
KyAnSEFWRV9GVVRJTUVTQVQnOiAxLAorICdIQVZFX0dBSV9TVFJFUlJPUic6IDEsCisgJ0hBVkVf
R0FNTUEnOiAxLAorICdIQVZFX0dDQ19BU01fRk9SX01DNjg4ODEnOiAwLAorICdIQVZFX0dDQ19B
U01fRk9SX1g2NCc6IDEsCisgJ0hBVkVfR0NDX0FTTV9GT1JfWDg3JzogMSwKKyAnSEFWRV9HQ0Nf
VUlOVDEyOF9UJzogMSwKKyAnSEFWRV9HRVRBRERSSU5GTyc6IDEsCisgJ0hBVkVfR0VUQ19VTkxP
Q0tFRCc6IDEsCisgJ0hBVkVfR0VURU5UUk9QWSc6IDEsCisgJ0hBVkVfR0VUR1JPVVBMSVNUJzog
MSwKKyAnSEFWRV9HRVRHUk9VUFMnOiAxLAorICdIQVZFX0dFVEhPU1RCWU5BTUUnOiAwLAorICdI
QVZFX0dFVEhPU1RCWU5BTUVfUic6IDEsCisgJ0hBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHJzog
MCwKKyAnSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9BUkcnOiAwLAorICdIQVZFX0dFVEhPU1RCWU5B
TUVfUl82X0FSRyc6IDEsCisgJ0hBVkVfR0VUSVRJTUVSJzogMSwKKyAnSEFWRV9HRVRMT0FEQVZH
JzogMSwKKyAnSEFWRV9HRVRMT0dJTic6IDEsCisgJ0hBVkVfR0VUTkFNRUlORk8nOiAxLAorICdI
QVZFX0dFVFBBR0VTSVpFJzogMSwKKyAnSEFWRV9HRVRQRUVSTkFNRSc6IDEsCisgJ0hBVkVfR0VU
UEdJRCc6IDEsCisgJ0hBVkVfR0VUUEdSUCc6IDEsCisgJ0hBVkVfR0VUUElEJzogMSwKKyAnSEFW
RV9HRVRQUklPUklUWSc6IDEsCisgJ0hBVkVfR0VUUFdFTlQnOiAxLAorICdIQVZFX0dFVFJBTkRP
TSc6IDEsCisgJ0hBVkVfR0VUUkFORE9NX1NZU0NBTEwnOiAxLAorICdIQVZFX0dFVFJFU0dJRCc6
IDEsCisgJ0hBVkVfR0VUUkVTVUlEJzogMSwKKyAnSEFWRV9HRVRTSUQnOiAxLAorICdIQVZFX0dF
VFNQRU5UJzogMSwKKyAnSEFWRV9HRVRTUE5BTSc6IDEsCisgJ0hBVkVfR0VUVElNRU9GREFZJzog
MSwKKyAnSEFWRV9HRVRXRCc6IDEsCisgJ0hBVkVfR0xJQkNfTUVNTU9WRV9CVUcnOiAwLAorICdI
QVZFX0dSUF9IJzogMSwKKyAnSEFWRV9IU1RSRVJST1InOiAxLAorICdIQVZFX0hUT0xFNjQnOiAx
LAorICdIQVZFX0hZUE9UJzogMSwKKyAnSEFWRV9JRUVFRlBfSCc6IDAsCisgJ0hBVkVfSUZfTkFN
RUlOREVYJzogMSwKKyAnSEFWRV9JTkVUX0FUT04nOiAxLAorICdIQVZFX0lORVRfUFRPTic6IDEs
CisgJ0hBVkVfSU5JVEdST1VQUyc6IDEsCisgJ0hBVkVfSU5UVFlQRVNfSCc6IDEsCisgJ0hBVkVf
SU9fSCc6IDAsCisgJ0hBVkVfSVBBX1BVUkVfQ09OU1RfQlVHJzogMCwKKyAnSEFWRV9LSUxMJzog
MSwKKyAnSEFWRV9LSUxMUEcnOiAxLAorICdIQVZFX0tRVUVVRSc6IDAsCisgJ0hBVkVfTEFOR0lO
Rk9fSCc6IDEsCisgJ0hBVkVfTEFSR0VGSUxFX1NVUFBPUlQnOiAwLAorICdIQVZFX0xDSEZMQUdT
JzogMCwKKyAnSEFWRV9MQ0hNT0QnOiAwLAorICdIQVZFX0xDSE9XTic6IDEsCisgJ0hBVkVfTEdB
TU1BJzogMSwKKyAnSEFWRV9MSUJETCc6IDEsCisgJ0hBVkVfTElCRExEJzogMCwKKyAnSEFWRV9M
SUJJRUVFJzogMCwKKyAnSEFWRV9MSUJJTlRMX0gnOiAxLAorICdIQVZFX0xJQlJFQURMSU5FJzog
MCwKKyAnSEFWRV9MSUJSRVNPTFYnOiAwLAorICdIQVZFX0xJQlNFTkRGSUxFJzogMCwKKyAnSEFW
RV9MSUJVVElMX0gnOiAwLAorICdIQVZFX0xJTksnOiAxLAorICdIQVZFX0xJTktBVCc6IDEsCisg
J0hBVkVfTElOVVhfQ0FOX0JDTV9IJzogMSwKKyAnSEFWRV9MSU5VWF9DQU5fSCc6IDEsCisgJ0hB
VkVfTElOVVhfQ0FOX1JBV19GRF9GUkFNRVMnOiAxLAorICdIQVZFX0xJTlVYX0NBTl9SQVdfSCc6
IDEsCisgJ0hBVkVfTElOVVhfTkVUTElOS19IJzogMSwKKyAnSEFWRV9MSU5VWF9SQU5ET01fSCc6
IDEsCisgJ0hBVkVfTElOVVhfVElQQ19IJzogMSwKKyAnSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0gn
OiAxLAorICdIQVZFX0xPQ0tGJzogMSwKKyAnSEFWRV9MT0cxUCc6IDEsCisgJ0hBVkVfTE9HMic6
IDEsCisgJ0hBVkVfTE9OR19ET1VCTEUnOiAxLAorICdIQVZFX0xTVEFUJzogMSwKKyAnSEFWRV9M
VVRJTUVTJzogMSwKKyAnSEFWRV9NQUtFREVWJzogMSwKKyAnSEFWRV9NQlJUT1dDJzogMSwKKyAn
SEFWRV9NRU1PUllfSCc6IDEsCisgJ0hBVkVfTUVNUkNIUic6IDEsCisgJ0hBVkVfTUtESVJBVCc6
IDEsCisgJ0hBVkVfTUtGSUZPJzogMSwKKyAnSEFWRV9NS0ZJRk9BVCc6IDEsCisgJ0hBVkVfTUtO
T0QnOiAxLAorICdIQVZFX01LTk9EQVQnOiAxLAorICdIQVZFX01LVElNRSc6IDEsCisgJ0hBVkVf
TU1BUCc6IDEsCisgJ0hBVkVfTVJFTUFQJzogMSwKKyAnSEFWRV9OQ1VSU0VTX0gnOiAxLAorICdI
QVZFX05ESVJfSCc6IDAsCisgJ0hBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IJzogMSwKKyAnSEFWRV9O
RVRfSUZfSCc6IDEsCisgJ0hBVkVfTklDRSc6IDEsCisgJ0hBVkVfT1BFTkFUJzogMSwKKyAnSEFW
RV9PUEVOUFRZJzogMSwKKyAnSEFWRV9QQVRIQ09ORic6IDEsCisgJ0hBVkVfUEFVU0UnOiAxLAor
ICdIQVZFX1BJUEUyJzogMSwKKyAnSEFWRV9QTE9DSyc6IDAsCisgJ0hBVkVfUE9MTCc6IDEsCisg
J0hBVkVfUE9MTF9IJzogMSwKKyAnSEFWRV9QT1NJWF9GQURWSVNFJzogMSwKKyAnSEFWRV9QT1NJ
WF9GQUxMT0NBVEUnOiAxLAorICdIQVZFX1BPU0lYX1NQQVdOJzogMSwKKyAnSEFWRV9QUkVBRCc6
IDEsCisgJ0hBVkVfUFJFQURWJzogMSwKKyAnSEFWRV9QUkVBRFYyJzogMSwKKyAnSEFWRV9QUkxJ
TUlUJzogMSwKKyAnSEFWRV9QUk9DRVNTX0gnOiAwLAorICdIQVZFX1BST1RPVFlQRVMnOiAxLAor
ICdIQVZFX1BUSFJFQURfREVTVFJVQ1RPUic6IDAsCisgJ0hBVkVfUFRIUkVBRF9HRVRDUFVDTE9D
S0lEJzogMSwKKyAnSEFWRV9QVEhSRUFEX0gnOiAxLAorICdIQVZFX1BUSFJFQURfSU5JVCc6IDAs
CisgJ0hBVkVfUFRIUkVBRF9LSUxMJzogMSwKKyAnSEFWRV9QVEhSRUFEX1NJR01BU0snOiAxLAor
ICdIQVZFX1BUWV9IJzogMSwKKyAnSEFWRV9QVVRFTlYnOiAxLAorICdIQVZFX1BXUklURSc6IDEs
CisgJ0hBVkVfUFdSSVRFVic6IDEsCisgJ0hBVkVfUFdSSVRFVjInOiAxLAorICdIQVZFX1JFQURM
SU5LJzogMSwKKyAnSEFWRV9SRUFETElOS0FUJzogMSwKKyAnSEFWRV9SRUFEVic6IDEsCisgJ0hB
VkVfUkVBTFBBVEgnOiAxLAorICdIQVZFX1JFTkFNRUFUJzogMSwKKyAnSEFWRV9STF9BUFBFTkRf
SElTVE9SWSc6IDAsCisgJ0hBVkVfUkxfQ0FUQ0hfU0lHTkFMJzogMCwKKyAnSEFWRV9STF9DT01Q
TEVUSU9OX0FQUEVORF9DSEFSQUNURVInOiAwLAorICdIQVZFX1JMX0NPTVBMRVRJT05fRElTUExB
WV9NQVRDSEVTX0hPT0snOiAwLAorICdIQVZFX1JMX0NPTVBMRVRJT05fTUFUQ0hFUyc6IDAsCisg
J0hBVkVfUkxfQ09NUExFVElPTl9TVVBQUkVTU19BUFBFTkQnOiAwLAorICdIQVZFX1JMX1BSRV9J
TlBVVF9IT09LJzogMCwKKyAnSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwnOiAwLAorICdIQVZFX1JP
VU5EJzogMSwKKyAnSEFWRV9TQ0hFRF9HRVRfUFJJT1JJVFlfTUFYJzogMSwKKyAnSEFWRV9TQ0hF
RF9IJzogMSwKKyAnSEFWRV9TQ0hFRF9SUl9HRVRfSU5URVJWQUwnOiAxLAorICdIQVZFX1NDSEVE
X1NFVEFGRklOSVRZJzogMSwKKyAnSEFWRV9TQ0hFRF9TRVRQQVJBTSc6IDEsCisgJ0hBVkVfU0NI
RURfU0VUU0NIRURVTEVSJzogMSwKKyAnSEFWRV9TRU1fR0VUVkFMVUUnOiAxLAorICdIQVZFX1NF
TV9PUEVOJzogMSwKKyAnSEFWRV9TRU1fVElNRURXQUlUJzogMSwKKyAnSEFWRV9TRU1fVU5MSU5L
JzogMSwKKyAnSEFWRV9TRU5ERklMRSc6IDEsCisgJ0hBVkVfU0VURUdJRCc6IDEsCisgJ0hBVkVf
U0VURVVJRCc6IDEsCisgJ0hBVkVfU0VUR0lEJzogMSwKKyAnSEFWRV9TRVRHUk9VUFMnOiAxLAor
ICdIQVZFX1NFVEhPU1ROQU1FJzogMSwKKyAnSEFWRV9TRVRJVElNRVInOiAxLAorICdIQVZFX1NF
VExPQ0FMRSc6IDEsCisgJ0hBVkVfU0VUUEdJRCc6IDEsCisgJ0hBVkVfU0VUUEdSUCc6IDEsCisg
J0hBVkVfU0VUUFJJT1JJVFknOiAxLAorICdIQVZFX1NFVFJFR0lEJzogMSwKKyAnSEFWRV9TRVRS
RVNHSUQnOiAxLAorICdIQVZFX1NFVFJFU1VJRCc6IDEsCisgJ0hBVkVfU0VUUkVVSUQnOiAxLAor
ICdIQVZFX1NFVFNJRCc6IDEsCisgJ0hBVkVfU0VUVUlEJzogMSwKKyAnSEFWRV9TRVRWQlVGJzog
MSwKKyAnSEFWRV9TSEFET1dfSCc6IDEsCisgJ0hBVkVfU0lHQUNUSU9OJzogMSwKKyAnSEFWRV9T
SUdBTFRTVEFDSyc6IDEsCisgJ0hBVkVfU0lHSU5GT19UX1NJX0JBTkQnOiAxLAorICdIQVZFX1NJ
R0lOVEVSUlVQVCc6IDEsCisgJ0hBVkVfU0lHTkFMX0gnOiAxLAorICdIQVZFX1NJR1BFTkRJTkcn
OiAxLAorICdIQVZFX1NJR1JFTFNFJzogMSwKKyAnSEFWRV9TSUdUSU1FRFdBSVQnOiAxLAorICdI
QVZFX1NJR1dBSVQnOiAxLAorICdIQVZFX1NJR1dBSVRJTkZPJzogMSwKKyAnSEFWRV9TTlBSSU5U
Ric6IDEsCisgJ0hBVkVfU09DS0FERFJfQUxHJzogMSwKKyAnSEFWRV9TT0NLQUREUl9TQV9MRU4n
OiAwLAorICdIQVZFX1NPQ0tBRERSX1NUT1JBR0UnOiAxLAorICdIQVZFX1NPQ0tFVFBBSVInOiAx
LAorICdIQVZFX1NQQVdOX0gnOiAxLAorICdIQVZFX1NTSVpFX1QnOiAxLAorICdIQVZFX1NUQVRW
RlMnOiAxLAorICdIQVZFX1NUQVRfVFZfTlNFQyc6IDEsCisgJ0hBVkVfU1RBVF9UVl9OU0VDMic6
IDAsCisgJ0hBVkVfU1REQVJHX1BST1RPVFlQRVMnOiAxLAorICdIQVZFX1NURElOVF9IJzogMSwK
KyAnSEFWRV9TVERMSUJfSCc6IDEsCisgJ0hBVkVfU1REX0FUT01JQyc6IDEsCisgJ0hBVkVfU1RS
RFVQJzogMSwKKyAnSEFWRV9TVFJGVElNRSc6IDEsCisgJ0hBVkVfU1RSSU5HU19IJzogMSwKKyAn
SEFWRV9TVFJJTkdfSCc6IDEsCisgJ0hBVkVfU1RSTENQWSc6IDAsCisgJ0hBVkVfU1RST1BUU19I
JzogMSwKKyAnSEFWRV9TVFJVQ1RfUEFTU1dEX1BXX0dFQ09TJzogMSwKKyAnSEFWRV9TVFJVQ1Rf
UEFTU1dEX1BXX1BBU1NXRCc6IDEsCisgJ0hBVkVfU1RSVUNUX1NUQVRfU1RfQklSVEhUSU1FJzog
MCwKKyAnSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFJzogMSwKKyAnSEFWRV9TVFJVQ1RfU1RB
VF9TVF9CTE9DS1MnOiAxLAorICdIQVZFX1NUUlVDVF9TVEFUX1NUX0ZMQUdTJzogMCwKKyAnSEFW
RV9TVFJVQ1RfU1RBVF9TVF9HRU4nOiAwLAorICdIQVZFX1NUUlVDVF9TVEFUX1NUX1JERVYnOiAx
LAorICdIQVZFX1NUUlVDVF9UTV9UTV9aT05FJzogMSwKKyAnSEFWRV9TWU1MSU5LJzogMSwKKyAn
SEFWRV9TWU1MSU5LQVQnOiAxLAorICdIQVZFX1NZTkMnOiAxLAorICdIQVZFX1NZU0NPTkYnOiAx
LAorICdIQVZFX1NZU0VYSVRTX0gnOiAxLAorICdIQVZFX1NZU19BVURJT0lPX0gnOiAwLAorICdI
QVZFX1NZU19CU0RUVFlfSCc6IDAsCisgJ0hBVkVfU1lTX0RFVlBPTExfSCc6IDAsCisgJ0hBVkVf
U1lTX0RJUl9IJzogMCwKKyAnSEFWRV9TWVNfRU5ESUFOX0gnOiAwLAorICdIQVZFX1NZU19FUE9M
TF9IJzogMSwKKyAnSEFWRV9TWVNfRVZFTlRfSCc6IDAsCisgJ0hBVkVfU1lTX0ZJTEVfSCc6IDEs
CisgJ0hBVkVfU1lTX0lPQ1RMX0gnOiAxLAorICdIQVZFX1NZU19LRVJOX0NPTlRST0xfSCc6IDAs
CisgJ0hBVkVfU1lTX0xPQURBVkdfSCc6IDAsCisgJ0hBVkVfU1lTX0xPQ0tfSCc6IDAsCisgJ0hB
VkVfU1lTX01LREVWX0gnOiAwLAorICdIQVZFX1NZU19NT0RFTV9IJzogMCwKKyAnSEFWRV9TWVNf
TkRJUl9IJzogMCwKKyAnSEFWRV9TWVNfUEFSQU1fSCc6IDEsCisgJ0hBVkVfU1lTX1BPTExfSCc6
IDEsCisgJ0hBVkVfU1lTX1JBTkRPTV9IJzogMSwKKyAnSEFWRV9TWVNfUkVTT1VSQ0VfSCc6IDEs
CisgJ0hBVkVfU1lTX1NFTEVDVF9IJzogMSwKKyAnSEFWRV9TWVNfU0VOREZJTEVfSCc6IDEsCisg
J0hBVkVfU1lTX1NPQ0tFVF9IJzogMSwKKyAnSEFWRV9TWVNfU1RBVFZGU19IJzogMSwKKyAnSEFW
RV9TWVNfU1RBVF9IJzogMSwKKyAnSEFWRV9TWVNfU1lTQ0FMTF9IJzogMSwKKyAnSEFWRV9TWVNf
U1lTTUFDUk9TX0gnOiAxLAorICdIQVZFX1NZU19TWVNfRE9NQUlOX0gnOiAwLAorICdIQVZFX1NZ
U19URVJNSU9fSCc6IDAsCisgJ0hBVkVfU1lTX1RJTUVTX0gnOiAxLAorICdIQVZFX1NZU19USU1F
X0gnOiAxLAorICdIQVZFX1NZU19UWVBFU19IJzogMSwKKyAnSEFWRV9TWVNfVUlPX0gnOiAxLAor
ICdIQVZFX1NZU19VTl9IJzogMSwKKyAnSEFWRV9TWVNfVVRTTkFNRV9IJzogMSwKKyAnSEFWRV9T
WVNfV0FJVF9IJzogMSwKKyAnSEFWRV9TWVNfWEFUVFJfSCc6IDEsCisgJ0hBVkVfVENHRVRQR1JQ
JzogMSwKKyAnSEFWRV9UQ1NFVFBHUlAnOiAxLAorICdIQVZFX1RFTVBOQU0nOiAxLAorICdIQVZF
X1RFUk1JT1NfSCc6IDEsCisgJ0hBVkVfVEVSTV9IJzogMSwKKyAnSEFWRV9UR0FNTUEnOiAxLAor
ICdIQVZFX1RJTUVHTSc6IDEsCisgJ0hBVkVfVElNRVMnOiAxLAorICdIQVZFX1RNUEZJTEUnOiAx
LAorICdIQVZFX1RNUE5BTSc6IDEsCisgJ0hBVkVfVE1QTkFNX1InOiAxLAorICdIQVZFX1RNX1pP
TkUnOiAxLAorICdIQVZFX1RSVU5DQVRFJzogMSwKKyAnSEFWRV9UWk5BTUUnOiAwLAorICdIQVZF
X1VDUzRfVENMJzogMCwKKyAnSEFWRV9VTkFNRSc6IDEsCisgJ0hBVkVfVU5JU1REX0gnOiAxLAor
ICdIQVZFX1VOTElOS0FUJzogMSwKKyAnSEFWRV9VTlNFVEVOVic6IDEsCisgJ0hBVkVfVVNBQkxF
X1dDSEFSX1QnOiAwLAorICdIQVZFX1VUSUxfSCc6IDAsCisgJ0hBVkVfVVRJTUVOU0FUJzogMSwK
KyAnSEFWRV9VVElNRVMnOiAxLAorICdIQVZFX1VUSU1FX0gnOiAxLAorICdIQVZFX1VVSURfQ1JF
QVRFJzogMCwKKyAnSEFWRV9VVUlEX0VOQ19CRSc6IDAsCisgJ0hBVkVfVVVJRF9HRU5FUkFURV9U
SU1FX1NBRkUnOiAxLAorICdIQVZFX1VVSURfSCc6IDAsCisgJ0hBVkVfVVVJRF9VVUlEX0gnOiAx
LAorICdIQVZFX1dBSVQzJzogMSwKKyAnSEFWRV9XQUlUNCc6IDEsCisgJ0hBVkVfV0FJVElEJzog
MSwKKyAnSEFWRV9XQUlUUElEJzogMSwKKyAnSEFWRV9XQ0hBUl9IJzogMSwKKyAnSEFWRV9XQ1ND
T0xMJzogMSwKKyAnSEFWRV9XQ1NGVElNRSc6IDEsCisgJ0hBVkVfV0NTWEZSTSc6IDEsCisgJ0hB
VkVfV01FTUNNUCc6IDEsCisgJ0hBVkVfV09SS0lOR19UWlNFVCc6IDEsCisgJ0hBVkVfV1JJVEVW
JzogMSwKKyAnSEFWRV9YNTA5X1ZFUklGWV9QQVJBTV9TRVQxX0hPU1QnOiAxLAorICdIQVZFX1pM
SUJfQ09QWSc6IDEsCisgJ0hBVkVfX0dFVFBUWSc6IDAsCisgJ0hPU1RfR05VX1RZUEUnOiAneDg2
XzY0LXBjLWxpbnV4LWdudScsCisgJ0lOQ0xESVJTVE9NQUtFJzogJy91c3IvbG9jYWwvaW5jbHVk
ZSAvdXNyL2xvY2FsL2luY2x1ZGUgJworICAgICAgICAgICAgICAgICAgICcvdXNyL2xvY2FsL2lu
Y2x1ZGUvcHl0aG9uMy43bSAnCisgICAgICAgICAgICAgICAgICAgJy91c3IvbG9jYWwvaW5jbHVk
ZS9weXRob24zLjdtJywKKyAnSU5DTFVERURJUic6ICcvdXNyL2xvY2FsL2luY2x1ZGUnLAorICdJ
TkNMVURFUFknOiAnL3Vzci9sb2NhbC9pbmNsdWRlL3B5dGhvbjMuN20nLAorICdJTlNUQUxMJzog
Jy91c3IvYmluL2luc3RhbGwgLWMnLAorICdJTlNUQUxMX0RBVEEnOiAnL3Vzci9iaW4vaW5zdGFs
bCAtYyAtbSA2NDQnLAorICdJTlNUQUxMX1BST0dSQU0nOiAnL3Vzci9iaW4vaW5zdGFsbCAtYycs
CisgJ0lOU1RBTExfU0NSSVBUJzogJy91c3IvYmluL2luc3RhbGwgLWMnLAorICdJTlNUQUxMX1NI
QVJFRCc6ICcvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDU1NScsCisgJ0lOU1RTT05BTUUnOiAnbGli
cHl0aG9uMy43bS5hJywKKyAnSU9fSCc6ICdNb2R1bGVzL19pby9faW9tb2R1bGUuaCcsCisgJ0lP
X09CSlMnOiAnXFwnLAorICdMRENYWFNIQVJFRCc6ICdnKysgLXB0aHJlYWQgLXNoYXJlZCcsCisg
J0xERkxBR1MnOiAnJywKKyAnTERGTEFHU19OT0RJU1QnOiAnJywKKyAnTERMQVNUJzogJycsCisg
J0xETElCUkFSWSc6ICdsaWJweXRob24zLjdtLmEnLAorICdMRExJQlJBUllESVInOiAnJywKKyAn
TERTSEFSRUQnOiAnZ2NjIC1wdGhyZWFkIC1zaGFyZWQnLAorICdMRFZFUlNJT04nOiAnMy43bScs
CisgJ0xJQkMnOiAnJywKKyAnTElCREVTVCc6ICcvdXNyL2xvY2FsL2xpYi9weXRob24zLjcnLAor
ICdMSUJESVInOiAnL3Vzci9sb2NhbC9saWInLAorICdMSUJGRklfSU5DTFVERURJUic6ICcnLAor
ICdMSUJNJzogJy1sbScsCisgJ0xJQk9CSkRJUic6ICdQeXRob24vJywKKyAnTElCT0JKUyc6ICcn
LAorICdMSUJQQyc6ICcvdXNyL2xvY2FsL2xpYi9wa2djb25maWcnLAorICdMSUJQTCc6ICcvdXNy
L2xvY2FsL2xpYi9weXRob24zLjcvY29uZmlnLTMuN20teDg2XzY0LWxpbnV4LWdudScsCisgJ0xJ
QlJBUlknOiAnbGlicHl0aG9uMy43bS5hJywKKyAnTElCUkFSWV9PQkpTJzogJ1xcJywKKyAnTElC
UkFSWV9PQkpTX09NSVRfRlJPWkVOJzogJ1xcJywKKyAnTElCUyc6ICctbGNyeXB0IC1scHRocmVh
ZCAtbGRsICAtbHV0aWwnLAorICdMSUJTVUJESVJTJzogJ3RraW50ZXIgdGtpbnRlci90ZXN0IHRr
aW50ZXIvdGVzdC90ZXN0X3RraW50ZXIgXFwnLAorICdMSU5LQ0MnOiAnZ2NjIC1wdGhyZWFkJywK
KyAnTElOS0ZPUlNIQVJFRCc6ICctWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMnLAorICdMSVBPXzMy
QklUX0ZMQUdTJzogJycsCisgJ0xMVk1fUFJPRl9FUlInOiAnbm8nLAorICdMTFZNX1BST0ZfRklM
RSc6ICcnLAorICdMTFZNX1BST0ZfTUVSR0VSJzogJ3RydWUnLAorICdMTic6ICdsbicsCisgJ0xP
Q0FMTU9ETElCUyc6ICcnLAorICdMT0cxUF9EUk9QU19aRVJPX1NJR04nOiAwLAorICdNQUNIREVQ
JzogJ2xpbnV4JywKKyAnTUFDSERFUF9PQkpTJzogJycsCisgJ01BQ0hERVNUTElCJzogJy91c3Iv
bG9jYWwvbGliL3B5dGhvbjMuNycsCisgJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCc6ICcnLAor
ICdNQUlOQ0MnOiAnZ2NjIC1wdGhyZWFkJywKKyAnTUFKT1JfSU5fTUtERVYnOiAwLAorICdNQUpP
Ul9JTl9TWVNNQUNST1MnOiAxLAorICdNQUtFU0VUVVAnOiAnLi9Nb2R1bGVzL21ha2VzZXR1cCcs
CisgJ01BTkRJUic6ICcvdXNyL2xvY2FsL3NoYXJlL21hbicsCisgJ01LRElSX1AnOiAnL2Jpbi9t
a2RpciAtcCcsCisgJ01PREJVSUxUX05BTUVTJzogJ3Bvc2l4ICBlcnJubyAgcHdkICBfc3JlICBf
Y29kZWNzICBfd2Vha3JlZiAgX2Z1bmN0b29scyAgJworICAgICAgICAgICAgICAgICAgICdfb3Bl
cmF0b3IgIF9jb2xsZWN0aW9ucyAgX2FiYyAgaXRlcnRvb2xzICBhdGV4aXQgIF9zaWduYWwgICcK
KyAgICAgICAgICAgICAgICAgICAnX3N0YXQgIHRpbWUgIF90aHJlYWQgIF9sb2NhbGUgIF9pbyAg
emlwaW1wb3J0ICAnCisgICAgICAgICAgICAgICAgICAgJ2ZhdWx0aGFuZGxlciAgX3RyYWNlbWFs
bG9jICBfc3ltdGFibGUgIHh4c3VidHlwZScsCisgJ01PRERJU0FCTEVEX05BTUVTJzogJycsCisg
J01PRExJQlMnOiAnJywKKyAnTU9ET0JKUyc6ICdNb2R1bGVzL3Bvc2l4bW9kdWxlLm8gIE1vZHVs
ZXMvZXJybm9tb2R1bGUubyAgJworICAgICAgICAgICAgJ01vZHVsZXMvcHdkbW9kdWxlLm8gIE1v
ZHVsZXMvX3NyZS5vICBNb2R1bGVzL19jb2RlY3Ntb2R1bGUubyAgJworICAgICAgICAgICAgJ01v
ZHVsZXMvX3dlYWtyZWYubyAgTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLm8gICcKKyAgICAgICAg
ICAgICdNb2R1bGVzL19vcGVyYXRvci5vICBNb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5vICAn
CisgICAgICAgICAgICAnTW9kdWxlcy9fYWJjLm8gIE1vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLm8g
ICcKKyAgICAgICAgICAgICdNb2R1bGVzL2F0ZXhpdG1vZHVsZS5vICBNb2R1bGVzL3NpZ25hbG1v
ZHVsZS5vICBNb2R1bGVzL19zdGF0Lm8gICcKKyAgICAgICAgICAgICdNb2R1bGVzL3RpbWVtb2R1
bGUubyAgTW9kdWxlcy9fdGhyZWFkbW9kdWxlLm8gICcKKyAgICAgICAgICAgICdNb2R1bGVzL19s
b2NhbGVtb2R1bGUubyAgTW9kdWxlcy9faW9tb2R1bGUubyBNb2R1bGVzL2lvYmFzZS5vICcKKyAg
ICAgICAgICAgICdNb2R1bGVzL2ZpbGVpby5vIE1vZHVsZXMvYnl0ZXNpby5vIE1vZHVsZXMvYnVm
ZmVyZWRpby5vICcKKyAgICAgICAgICAgICdNb2R1bGVzL3RleHRpby5vIE1vZHVsZXMvc3RyaW5n
aW8ubyAgTW9kdWxlcy96aXBpbXBvcnQubyAgJworICAgICAgICAgICAgJ01vZHVsZXMvZmF1bHRo
YW5kbGVyLm8gIE1vZHVsZXMvX3RyYWNlbWFsbG9jLm8gJworICAgICAgICAgICAgJ01vZHVsZXMv
aGFzaHRhYmxlLm8gIE1vZHVsZXMvc3ltdGFibGVtb2R1bGUubyAgJworICAgICAgICAgICAgJ01v
ZHVsZXMveHhzdWJ0eXBlLm8nLAorICdNT0RVTEVfT0JKUyc6ICdcXCcsCisgJ01VTFRJQVJDSCc6
ICd4ODZfNjQtbGludXgtZ251JywKKyAnTVVMVElBUkNIX0NQUEZMQUdTJzogJy1ETVVMVElBUkNI
PVxcIng4Nl82NC1saW51eC1nbnVcXCInLAorICdNVldERUxDSF9JU19FWFBSRVNTSU9OJzogMSwK
KyAnTk9fQVNfTkVFREVEJzogJy1XbCwtLW5vLWFzLW5lZWRlZCcsCisgJ09CSkVDVF9PQkpTJzog
J1xcJywKKyAnT1BFTlNTTF9JTkNMVURFUyc6ICcnLAorICdPUEVOU1NMX0xERkxBR1MnOiAnJywK
KyAnT1BFTlNTTF9MSUJTJzogJy1sc3NsIC1sY3J5cHRvJywKKyAnT1BUJzogJy1ETkRFQlVHIC1n
IC1md3JhcHYgLU8zIC1XYWxsJywKKyAnT1RIRVJfTElCVE9PTF9PUFQnOiAnJywKKyAnUEFDS0FH
RV9CVUdSRVBPUlQnOiAwLAorICdQQUNLQUdFX05BTUUnOiAwLAorICdQQUNLQUdFX1NUUklORyc6
IDAsCisgJ1BBQ0tBR0VfVEFSTkFNRSc6IDAsCisgJ1BBQ0tBR0VfVVJMJzogMCwKKyAnUEFDS0FH
RV9WRVJTSU9OJzogMCwKKyAnUEFSU0VSX0hFQURFUlMnOiAnXFwnLAorICdQQVJTRVJfT0JKUyc6
ICdcXCBQYXJzZXIvbXlyZWFkbGluZS5vIFBhcnNlci9wYXJzZXRvay5vIFBhcnNlci90b2tlbml6
ZXIubycsCisgJ1BHRU4nOiAnUGFyc2VyL3BnZW4nLAorICdQR0VOT0JKUyc6ICdcXCBcXCcsCisg
J1BHT0JKUyc6ICdcXCcsCisgJ1BHT19QUk9GX0dFTl9GTEFHJzogJy1mcHJvZmlsZS1nZW5lcmF0
ZScsCisgJ1BHT19QUk9GX1VTRV9GTEFHJzogJy1mcHJvZmlsZS11c2UgLWZwcm9maWxlLWNvcnJl
Y3Rpb24nLAorICdQT0JKUyc6ICdcXCcsCisgJ1BPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQn
OiAwLAorICdQUk9GSUxFX1RBU0snOiAnLW0gdGVzdC5yZWdydGVzdCAtLXBnbycsCisgJ1BUSFJF
QURfS0VZX1RfSVNfQ09NUEFUSUJMRV9XSVRIX0lOVCc6IDEsCisgJ1BUSFJFQURfU1lTVEVNX1ND
SEVEX1NVUFBPUlRFRCc6IDEsCisgJ1BVUklGWSc6ICcnLAorICdQWTNMSUJSQVJZJzogJycsCisg
J1BZTE9OR19CSVRTX0lOX0RJR0lUJzogMCwKKyAnUFlUSE9OJzogJ3B5dGhvbicsCisgJ1BZVEhP
TkZSQU1FV09SSyc6ICcnLAorICdQWVRIT05GUkFNRVdPUktESVInOiAnbm8tZnJhbWV3b3JrJywK
KyAnUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUic6ICcnLAorICdQWVRIT05GUkFNRVdPUktQUkVG
SVgnOiAnJywKKyAnUFlUSE9OUEFUSCc6ICcnLAorICdQWVRIT05fRk9SX0JVSUxEJzogJy4vcHl0
aG9uIC1FJywKKyAnUFlUSE9OX0ZPUl9SRUdFTic6ICdweXRob24zLjcnLAorICdQWVRIT05fSEVB
REVSUyc6ICdcXCcsCisgJ1BZVEhPTl9PQkpTJzogJ1xcJywKKyAnUFlfQlVJTFRJTl9NT0RVTEVf
Q0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3VsdCAtV3NpZ24tY29tcGFyZSAtRE5ERUJVRyAtZyAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtc3RkPWM5
OSAtV2V4dHJhICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXJl
c3VsdCAtV25vLXVudXNlZC1wYXJhbWV0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV25vLWNhc3QtZnVuY3Rpb24tdHlwZSAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1JLiAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICctSS4vSW5jbHVkZSAtRFB5X0JVSUxEX0NPUkVf
QlVJTFRJTicsCisgJ1BZX0NGTEFHUyc6ICctV25vLXVudXNlZC1yZXN1bHQgLVdzaWduLWNvbXBh
cmUgLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgLVdhbGwnLAorICdQWV9DRkxBR1NfTk9ESVNUJzog
Jy1zdGQ9Yzk5IC1XZXh0cmEgLVduby11bnVzZWQtcmVzdWx0ICcKKyAgICAgICAgICAgICAgICAg
ICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVy
cyAnCisgICAgICAgICAgICAgICAgICAgICAnLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUgJworICAg
ICAgICAgICAgICAgICAgICAgJy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24n
LAorICdQWV9DT0VSQ0VfQ19MT0NBTEUnOiAxLAorICdQWV9DT1JFX0NGTEFHUyc6ICctV25vLXVu
dXNlZC1yZXN1bHQgLVdzaWduLWNvbXBhcmUgLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgJworICAg
ICAgICAgICAgICAgICAgICctV2FsbCAtc3RkPWM5OSAtV2V4dHJhIC1Xbm8tdW51c2VkLXJlc3Vs
dCAnCisgICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW1pc3Np
bmctZmllbGQtaW5pdGlhbGl6ZXJzICcKKyAgICAgICAgICAgICAgICAgICAnLVduby1jYXN0LWZ1
bmN0aW9uLXR5cGUgJworICAgICAgICAgICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0
aW9uLWRlY2xhcmF0aW9uIC1JLiAtSS4vSW5jbHVkZSAnCisgICAgICAgICAgICAgICAgICAgJy1E
UHlfQlVJTERfQ09SRScsCisgJ1BZX0NPUkVfTERGTEFHUyc6ICcnLAorICdQWV9DUFBGTEFHUyc6
ICctSS4gLUkuL0luY2x1ZGUnLAorICdQWV9GT1JNQVRfU0laRV9UJzogJyJ6IicsCisgJ1BZX0xE
RkxBR1MnOiAnJywKKyAnUFlfTERGTEFHU19OT0RJU1QnOiAnJywKKyAnUFlfU1NMX0RFRkFVTFRf
Q0lQSEVSUyc6IDEsCisgJ1BZX1NTTF9ERUZBVUxUX0NJUEhFUl9TVFJJTkcnOiAwLAorICdQWV9T
VERNT0RVTEVfQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3VsdCAtV3NpZ24tY29tcGFyZSAtRE5E
RUJVRyAtZyAtZndyYXB2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctTzMgLVdhbGwgLXN0
ZD1jOTkgLVdleHRyYSAtV25vLXVudXNlZC1yZXN1bHQgJworICAgICAgICAgICAgICAgICAgICAg
ICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJz
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctV25vLWNhc3QtZnVuY3Rpb24tdHlwZSAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAnLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJh
dGlvbiAtSS4gLUkuL0luY2x1ZGUnLAorICdQeV9ERUJVRyc6IDAsCisgJ1B5X0VOQUJMRV9TSEFS
RUQnOiAwLAorICdQeV9IQVNIX0FMR09SSVRITSc6IDAsCisgJ1FVSUNLVEVTVE9QVFMnOiAnLXgg
dGVzdF9zdWJwcm9jZXNzIHRlc3RfaW8gdGVzdF9saWIydG8zIFxcJywKKyAnUkVBREVMRic6ICdy
ZWFkZWxmJywKKyAnUkVTU1JDRElSJzogJ01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrJywKKyAnUkVU
U0lHVFlQRSc6ICd2b2lkJywKKyAnUlVOU0hBUkVEJzogJycsCisgJ1NDUklQVERJUic6ICcvdXNy
L2xvY2FsL2xpYicsCisgJ1NFVFBHUlBfSEFWRV9BUkcnOiAwLAorICdTR0lfQUJJJzogJ0BTR0lf
QUJJQCcsCisgJ1NIRUxMJzogJy9iaW4vc2gnLAorICdTSExJQlMnOiAnLWxjcnlwdCAtbHB0aHJl
YWQgLWxkbCAgLWx1dGlsJywKKyAnU0hMSUJfU1VGRklYJzogJy5zbycsCisgJ1NJR05FRF9SSUdI
VF9TSElGVF9aRVJPX0ZJTExTJzogMCwKKyAnU0lURVBBVEgnOiAnJywKKyAnU0laRU9GX0RPVUJM
RSc6IDgsCisgJ1NJWkVPRl9GTE9BVCc6IDQsCisgJ1NJWkVPRl9GUE9TX1QnOiAxNiwKKyAnU0la
RU9GX0lOVCc6IDQsCisgJ1NJWkVPRl9MT05HJzogOCwKKyAnU0laRU9GX0xPTkdfRE9VQkxFJzog
MTYsCisgJ1NJWkVPRl9MT05HX0xPTkcnOiA4LAorICdTSVpFT0ZfT0ZGX1QnOiA4LAorICdTSVpF
T0ZfUElEX1QnOiA0LAorICdTSVpFT0ZfUFRIUkVBRF9LRVlfVCc6IDQsCisgJ1NJWkVPRl9QVEhS
RUFEX1QnOiA4LAorICdTSVpFT0ZfU0hPUlQnOiAyLAorICdTSVpFT0ZfU0laRV9UJzogOCwKKyAn
U0laRU9GX1RJTUVfVCc6IDgsCisgJ1NJWkVPRl9VSU5UUFRSX1QnOiA4LAorICdTSVpFT0ZfVk9J
RF9QJzogOCwKKyAnU0laRU9GX1dDSEFSX1QnOiA0LAorICdTSVpFT0ZfX0JPT0wnOiAxLAorICdT
T0FCSSc6ICdjcHl0aG9uLTM3bS14ODZfNjQtbGludXgtZ251JywKKyAnU1JDRElSUyc6ICdQYXJz
ZXIgT2JqZWN0cyBQeXRob24gTW9kdWxlcyBNb2R1bGVzL19pbyBQcm9ncmFtcycsCisgJ1NSQ19H
REJfSE9PS1MnOiAnLi9Ub29scy9nZGIvbGlicHl0aG9uLnB5JywKKyAnU1REQ19IRUFERVJTJzog
MSwKKyAnU1RSSUNUX1NZU1ZfQ1VSU0VTJzogIi8qIERvbid0IHVzZSBuY3Vyc2VzIGV4dGVuc2lv
bnMgKi8iLAorICdTVFJJUEZMQUcnOiAnLXMnLAorICdTVUJESVJTJzogJycsCisgJ1NVQkRJUlNU
T08nOiAnSW5jbHVkZSBMaWIgTWlzYycsCisgJ1NZU0xJQlMnOiAnLWxtJywKKyAnU1lTX1NFTEVD
VF9XSVRIX1NZU19USU1FJzogMSwKKyAnVEFOSF9QUkVTRVJWRVNfWkVST19TSUdOJzogMSwKKyAn
VENMVEtfSU5DTFVERVMnOiAnJywKKyAnVENMVEtfTElCUyc6ICcnLAorICdURVNUT1BUUyc6ICcn
LAorICdURVNUUEFUSCc6ICcnLAorICdURVNUUFlUSE9OJzogJy4vcHl0aG9uJywKKyAnVEVTVFBZ
VEhPTk9QVFMnOiAnJywKKyAnVEVTVFJVTk5FUic6ICcuL3B5dGhvbiAuL1Rvb2xzL3NjcmlwdHMv
cnVuX3Rlc3RzLnB5JywKKyAnVEVTVFRJTUVPVVQnOiAxMjAwLAorICdUSU1FTU9EVUxFX0xJQic6
IDAsCisgJ1RJTUVfV0lUSF9TWVNfVElNRSc6IDEsCisgJ1RNX0lOX1NZU19USU1FJzogMCwKKyAn
VU5JQ09ERV9ERVBTJzogJ1xcJywKKyAnVU5JVkVSU0FMU0RLJzogJycsCisgJ1VQREFURV9GSUxF
JzogJ3B5dGhvbjMuNyAuL1Rvb2xzL3NjcmlwdHMvdXBkYXRlX2ZpbGUucHknLAorICdVU0VfQ09N
UFVURURfR09UT1MnOiAwLAorICdWRVJTSU9OJzogJzMuNycsCisgJ1dJTkRPV19IQVNfRkxBR1Mn
OiAxLAorICdXSVRIX0RPQ19TVFJJTkdTJzogMSwKKyAnV0lUSF9EVFJBQ0UnOiAwLAorICdXSVRI
X0RZTEQnOiAwLAorICdXSVRIX0xJQklOVEwnOiAwLAorICdXSVRIX05FWFRfRlJBTUVXT1JLJzog
MCwKKyAnV0lUSF9QWU1BTExPQyc6IDEsCisgJ1dJVEhfVkFMR1JJTkQnOiAwLAorICdYODdfRE9V
QkxFX1JPVU5ESU5HJzogMCwKKyAnWE1MTElCU1VCRElSUyc6ICd4bWwgeG1sL2RvbSB4bWwvZXRy
ZWUgeG1sL3BhcnNlcnMgeG1sL3NheCcsCisgJ2Fic19idWlsZGRpcic6ICcnLAorICdhYnNfc3Jj
ZGlyJzogJycsCisgJ2RhdGFyb290ZGlyJzogJy91c3IvbG9jYWwvc2hhcmUnLAorICdleGVjX3By
ZWZpeCc6ICcvdXNyL2xvY2FsJywKKyAncHJlZml4JzogJy91c3IvbG9jYWwnLAorICdzcmNkaXIn
OiAnLid9Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5W-0003UD-UK; Fri, 13 Sep 2019 12:54:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5W-0003U1-FX
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:10 +0000
X-Inumbo-ID: 915cb9e4-d625-11e9-95aa-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 915cb9e4-d625-11e9-95aa-12813bfff9fa;
 Fri, 13 Sep 2019 12:54:05 +0000 (UTC)
IronPort-SDR: 1tyyFDaP2QnW9CE2o3lc+AuIHFqcLOB2M+C/vKUbUSP2KFfvODfjf0v4xHycZdrp0Bgp/kt1Pp
 /jUz97o8cjMg==
IronPort-PHdr: =?us-ascii?q?9a23=3AlS6yQh0Wli0PgysxsmDT+DRfVm0co7zxezQtwd?=
 =?us-ascii?q?8ZseMVKfad9pjvdHbS+e9qxAeQG9mCsLQc1KGL7uigATVGvc/b9ihaMdRlbF?=
 =?us-ascii?q?wssY0uhQsuAcqIWwXQDcXBSGgEJvlET0Jv5HqhMEJYS47UblzWpWCuv3ZJQk?=
 =?us-ascii?q?2sfQV6Kf7oFYHMks+5y/69+4HJYwVPmTGxfa5+IA+5oAnMuMQam5duJ6Q+xh?=
 =?us-ascii?q?bJonZDZuBayX91KV6JkBvw+9m88IR//yhMvv4q6tJNX7j9c6kkV7JTES4oM3?=
 =?us-ascii?q?oy5M3ltBnDSRWA634BWWgIkRRGHhbI4gjiUpj+riX1uOx92DKHPcLtVrA7RS?=
 =?us-ascii?q?6i76ZwRxD2jioMKiM0/3vWisx0i6JbvQ6hqhliyIPafI2ZKPxzdb7bcNgHR2?=
 =?us-ascii?q?ROQ9xRWjRBDI2icoUBAekPM+FaoInzvFYCsQeyCBOwCO711jNEmnn71rA63e?=
 =?us-ascii?q?Q7FgHG2RQtEswJsHTPsNX1NaESWv2zwqnV1TXDcu5d1DDh54jPaRAhvfCMXb?=
 =?us-ascii?q?RqfcrV1EkvDx7Fg06Mpoz+JT+VzvkNvHOB4+p6UuKikmgqoBxyrDi33sogl4?=
 =?us-ascii?q?bEip8Pxl3H9Sh12pg5KcO6RUJhb9OoCIZcui6HO4dsQc4vQ3tktDg0x7AIo5?=
 =?us-ascii?q?K3YScHxIohyhXCcfKIaZKI7QjmVOuJJDd4g29qd6ynihap9Eig1vX8Vs6p0F?=
 =?us-ascii?q?ZWtiZFksfDtnQK1xHL9MiHT+Fy/kal2TqVyw/T8ftIIVgplaXAMZIh2Lkwmo?=
 =?us-ascii?q?ISsUTFACD2hF37gLKZe0k54OSl6OTqbq/4qpOCNYJ4kA/zPrwrmsOlAOQ4Ng?=
 =?us-ascii?q?YOX3Kc+eS5zLDs4Ur5QK5Wjv03lKnVqpTaJdkDpq6kGAJazp0j5wynDze7y9?=
 =?us-ascii?q?sUh2MHLFVddBKdk4fpI03OIOz/DfqnhlSskTFrx/HBPr36G5nCM2bMkKn/cr?=
 =?us-ascii?q?Z58ENczAszzctD55JPEL0AL+z8WknruNzfFB85PBS+w/z7B9VlyoMeRWWPD7?=
 =?us-ascii?q?eXMKzMtV+I5/ovLPeWaI8VpTb9KuQq5//1gH8/h1ASYa2p0oEMZ3yiAPtmPl?=
 =?us-ascii?q?2TYWDwjdcZDWcKog0+QfT0iF2GSzFcem69ULg65j4mEoKpE4bDSpq2j7ObwS?=
 =?us-ascii?q?i7GZxWZn1dB1CXDXfoapiLV+0WZy2OOc9tiCEEVaC6RIM7zxGus1yy970yK+?=
 =?us-ascii?q?vS+yoD8J7uytVxz+nSjg0psyx5CYKayW7eYXtzmzYjQCQq3aY3hVFl1x/X2q?=
 =?us-ascii?q?9jn/1eU9hO/+5hWRx8LYPWifZ9XYOhEjndd8uEHQ71Cu6tBis8G4o8?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ChAAC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBVgQBAQsBgW2BF1MgEiqNHYgXfpg0gWcJAQEBKREBAgEBgUuCdAKDAzc?=
 =?us-ascii?q?GDgIDCQEBBQEBAQEBBgQBBhoWBYVfDII6IoJvBnkQIB8SQxQZgldLAYIOq32?=
 =?us-ascii?q?FS4MwgUmBNAGHHoM7gnY/gRGCXYR8FHSFFgSMfIgFgR6WKAeCJGQEhhmJIoR?=
 =?us-ascii?q?IJ4JjQZVmqEY3gXozGnOCbAmCRReLSYJcPQEBMQGBBQEBjEyCVAEB?=
X-IPAS-Result: =?us-ascii?q?A2ChAAC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBVgQBAQsBg?=
 =?us-ascii?q?W2BF1MgEiqNHYgXfpg0gWcJAQEBKREBAgEBgUuCdAKDAzcGDgIDCQEBBQEBA?=
 =?us-ascii?q?QEBBgQBBhoWBYVfDII6IoJvBnkQIB8SQxQZgldLAYIOq32FS4MwgUmBNAGHH?=
 =?us-ascii?q?oM7gnY/gRGCXYR8FHSFFgSMfIgFgR6WKAeCJGQEhhmJIoRIJ4JjQZVmqEY3g?=
 =?us-ascii?q?XozGnOCbAmCRReLSYJcPQEBMQGBBQEBjEyCVAEB?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786343"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9683A1A6014F;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id zhg9ofuDb0sU; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7F5461A6015F;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id CFqvmCbfz5kD; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 6AEFA1A6014F;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:50 +0300
Message-Id: <20190913125353.972-10-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 09/12] Add stubs.c for
 stubbed functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKV2UgYWRkIHRoZSBzdHVicyBuZWVkZWQgd2hlbiAiZm9ya2luZyIgcHJvY2Vzc2VzLgoK
U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3Mu
cHViLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgIDEgKwogc3R1YnMuYyAgICAgfCA0NSArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwg
NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN0dWJzLmMKCmRpZmYgLS1naXQg
YS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IGYxYzRhNmQuLmQ2N2FmMjYgMTAwNjQ0
Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC05Niw2ICs5Niw3IEBAIExJ
QlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0lOQ0xVREVTLXkp
CiBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9JTkNMVURF
Uy15KQogCiBMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbW9kdWxlc19j
b25maWcuY3x1bmlrcmFmdAorTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04zX0JBU0Up
L3N0dWJzLmN8dW5pa3JhZnQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgUHl0aG9uIGNv
cmUKZGlmZiAtLWdpdCBhL3N0dWJzLmMgYi9zdHVicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUzOTA3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9zdHVicy5jCkBAIC0wLDAg
KzEsNDUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8q
CisgKiBBdXRob3JzOiBCYWRvaXUgVmxhZC1BbmRyZWkgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVk
LmFjcy51cGIucm8+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0
ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisK
K3ZvaWQgUHlPU19CZWZvcmVGb3JrKHZvaWQpCit7Cit9CisKK3ZvaWQgUHlPU19BZnRlckZvcmtf
UGFyZW50KHZvaWQpCit7Cit9CisKK3ZvaWQgUHlPU19BZnRlckZvcmtfQ2hpbGQodm9pZCkKK3sK
K30KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5c-0003Vh-0V; Fri, 13 Sep 2019 12:54:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5a-0003VN-Nb
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:14 +0000
X-Inumbo-ID: 90e358ce-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 90e358ce-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:04 +0000 (UTC)
IronPort-SDR: U/q7XbikhgPDwD8P+E7h/ygI9uNdqdamioILrxPwqzs+Cnfsp38yNJfuPrDLGbZjKillCLOr8d
 D7JjsvyTKabg==
IronPort-PHdr: =?us-ascii?q?9a23=3AfaFHghejDkJIwvBUtSjn7obRlGMj4u6mDksu8p?=
 =?us-ascii?q?Mizoh2WeGdxcW9ZR7h7PlgxGXEQZ/co6odzbaP6Oa4BiddvN7B6ClELMUWEU?=
 =?us-ascii?q?ddyI0/pE8JOIa9E0r1LfrnPWQRPf9pcxtbxUy9KlVfA83kZlff8TWY5D8WHQ?=
 =?us-ascii?q?jjZ0IufrymUoHdgN6q2O+s5pbdfxtHhCanYbN1MR66sRjdutMZjId/JKs90A?=
 =?us-ascii?q?fFr3lHd+lWxW5jOFafkwrh6suq85Nv7jpct+g9+8JcVKnxYrg1Q6FfADk6KW?=
 =?us-ascii?q?4++dfltQPETQuB53scVnsZnx9VCAXb7x/0Q4n8vDLiuuVyxCeVM8v2TaspWT?=
 =?us-ascii?q?u59KdkVAXoiCYcODEn9mzcl9F9g7haoBKloBx/3pLUbYSIP/dwYq/RYdUXTn?=
 =?us-ascii?q?dHU81MVSJOH5m8YpMPAeQfIOhWoYrzqVwMohuwHgSgGP/jxyVUinLswaE2z+?=
 =?us-ascii?q?IsGhzG0gw6GNIOtWzZocvyNKcJTeC1za/IxijFYfNLwTf99ZXDfxc9rvGLRr?=
 =?us-ascii?q?JwbcvRyU81GwPBk1WQsZHlMiiJ2eQWqWSb9/dgWvm1h249rAF8uz6izdoihI?=
 =?us-ascii?q?nOg4Ia0FHE9SNhzYkuO9K4T1Z7bsCiEJdKqy6aMI52T8U/SG9roCY30qAKtJ?=
 =?us-ascii?q?GmcCQQy5kqxwTTZ+KZf4WK+B7uWv6dLSp3iX54Yr6yhBa//VK+xuDyWMS4yk?=
 =?us-ascii?q?tGoyVbntTKq3sDzQbc6tKdRft45kqh3DGP2B3N5excOkA0kLbbK4Ymwr4tip?=
 =?us-ascii?q?ofqUTDETHymEXxlKKWaEAk9fKp6+TjeLnpuoScO5VsigHjKasigNa/AeMgPg?=
 =?us-ascii?q?gPWWiU5/i82aX+8UD2XblGlP47n6nDvJzEO8gWpLS1DgFN3oYm8Rm/DjOm0N?=
 =?us-ascii?q?oCnXkAKVJIYA6Ij4/yO1HSIfD4C+2zg1CxkDdz2vDLJaHuAo7XInjbjbfuZq?=
 =?us-ascii?q?xx61RbyAYr19BQ+4pUCq0dIPL0QkLxsd3YDhk4Mwyz2ObrEchy2Z0AWW2RBq?=
 =?us-ascii?q?+UK6fSsV6T5uIzOOmAfoAUtyj7K/Q/4P7ul3A5k0cHfaa1xZsXdGy4HvN+Lk?=
 =?us-ascii?q?WXf3XshtYBEX8UsQYkTOzqlVyCXiJSZ3upWaIz+C00CIa8AojYXIyinqGB1j?=
 =?us-ascii?q?+hHpJKfmBGFkyMEXDweoWaX/cDcj+dLdd7nTwCSLehUZEu1RC0uADh0bVoM+?=
 =?us-ascii?q?3U+iwFtZ/4z9h1+/DTmgwo+TNuE8udyHuBT3xsnmwTXTM2xqd/8gRBzQKG0K?=
 =?us-ascii?q?55hOcdGdFN6vdhVgYhKYWa3+F8TdfoVVHvZNCMHX2hWcmnB3kVU8osi4sFZF?=
 =?us-ascii?q?1hGtPkig3bwgKhGPkNirbNHptiofGU5GT4O8sokyWO76ImlVRzGsY=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DqAAC/kHtdXQPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BVgUBCwGDBFMgEiqNHYgXmTKBZwkBAQEpEQECAQGEPwKDAzcGDgIDCQEBBQE?=
 =?us-ascii?q?BAQEBBgQBBhoWBYVfDII6IoJvBnkQIB8SQxQZgyIBgg6rfYQ2AYEUgzCBSYE?=
 =?us-ascii?q?0AYcegzuCdj+BEYdZhh4ElRyBA5YoB4IkZASGGY1qJ4MkkUaEIC2oGTeBejM?=
 =?us-ascii?q?ag18JgkUXg0+CVoUkglw9AQExAYEFAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2DqAAC/kHtdXQPjVY1mHQEBBQEHBQGBVgUBCwGDBFMgE?=
 =?us-ascii?q?iqNHYgXmTKBZwkBAQEpEQECAQGEPwKDAzcGDgIDCQEBBQEBAQEBBgQBBhoWB?=
 =?us-ascii?q?YVfDII6IoJvBnkQIB8SQxQZgyIBgg6rfYQ2AYEUgzCBSYE0AYcegzuCdj+BE?=
 =?us-ascii?q?YdZhh4ElRyBA5YoB4IkZASGGY1qJ4MkkUaEIC2oGTeBejMag18JgkUXg0+CV?=
 =?us-ascii?q?oUkglw9AQExAYEFAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786342"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 949111A6014C;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id Gx_9uxlPqVeg; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7B9591A60144;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id QjNcpZGdJh94; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 5C5281A60154;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:49 +0300
Message-Id: <20190913125353.972-9-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 08/12] Add modules_config.c
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKVGhpcyBmaWxlIGlzIGNvcGllZCBmcm9tIGEgJy4vTW9kdWxlcy9jb25maWcuYycgb2Yg
YSBMaW51eCBidWlsZCBhbmQgaXQgY29udGFpbnMKdGhlIG1vZHVsZXMgaW5pdCBmdW5jdGlvbnMg
YW5kIHRoZWlyIHJlZ2lzdHJhdGlvbiBhcyBQeXRob24gZXh0ZW5zaW9ucy4gV2UKY29tbWVudGVk
IHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCB5
ZXQuIFRoZXkKc2hvdWxkIGJlIGVuYWJsZWQgYmFjayB3aGVuIHdlIHdpbGwgYWRkIHN1cHBvcnQg
Zm9yIHRoZW0gYnkgcG9ydGluZyB0aGUKdW5kZXJseWluZyBuYXRpdmUgbGlicmFyaWVzLgoKU2ln
bmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPgotLS0KIE1ha2VmaWxlLnVrICAgICAgfCAgIDIgKwogbW9kdWxlc19jb25maWcuYyB8IDMx
NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxl
cyBjaGFuZ2VkLCAzMTcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZXNf
Y29uZmlnLmMKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IGZh
MTEwOWEuLmYxYzRhNmQgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVr
CkBAIC05NSw2ICs5NSw4IEBAIExJQlBZVEhPTjNfQ09NTU9OX0NYWEZMQUdTLXkgKz0gJChMSUJQ
WVRIT04zX0NPTU1PTl9ERUZJTkVTLXkpCiBMSUJQWVRIT04zX0NJTkNMVURFUy15ICAgKz0gJChM
SUJQWVRIT04zX0NPTU1PTl9JTkNMVURFUy15KQogTElCUFlUSE9OM19DWFhJTkNMVURFUy15ICs9
ICQoTElCUFlUSE9OM19DT01NT05fSU5DTFVERVMteSkKIAorTElCUFlUSE9OM19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX0JBU0UpL21vZHVsZXNfY29uZmlnLmN8dW5pa3JhZnQKKwogIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKICMgUHl0aG9uIGNvcmUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRp
ZmYgLS1naXQgYS9tb2R1bGVzX2NvbmZpZy5jIGIvbW9kdWxlc19jb25maWcuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWY0ZDM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9k
dWxlc19jb25maWcuYwpAQCAtMCwwICsxLDMxNSBAQAorLyogR2VuZXJhdGVkIGF1dG9tYXRpY2Fs
bHkgZnJvbSAuL01vZHVsZXMvY29uZmlnLmMuaW4gYnkgbWFrZXNldHVwLiAqLworLyogLSotIEMg
LSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDb3B5
cmlnaHQgKGMpIDIwMDAsIEJlT3Blbi5jb20uCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMCwgQ29y
cG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzLgorQ29weXJpZ2h0IChj
KSAxOTkwLTE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4KK0FsbCByaWdodHMg
cmVzZXJ2ZWQuCisKK1NlZSB0aGUgZmlsZSAiTWlzYy9DT1BZUklHSFQiIGZvciBpbmZvcm1hdGlv
biBvbiB1c2FnZSBhbmQKK3JlZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgYW5kIGZvciBhIERJ
U0NMQUlNRVIgT0YgQUxMIFdBUlJBTlRJRVMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1vZHVsZSBjb25m
aWd1cmF0aW9uICovCisKKy8qICEhISAhISEgISEhIFRoaXMgZmlsZSBpcyBlZGl0ZWQgYnkgdGhl
IG1ha2VzZXR1cCBzY3JpcHQgISEhICEhISAhISEgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgorICAgU2VlIGNyZWF0ZV9idWlsdGluKCkg
aW4gaW1wb3J0LmMuICovCisKKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlICJQeXRo
b24uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X3Bvc2l4KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUlu
aXRfZXJybm8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9wd2Qodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fc3JlKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X2NvZGVjcyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X193ZWFrcmVmKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2Z1bmN0b29scyh2b2lkKTsKK2V4dGVybiBQeU9iamVj
dCogUHlJbml0X19vcGVyYXRvcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19jb2xs
ZWN0aW9ucyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19hYmModm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9pdGVydG9vbHModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9hdGV4aXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2lnbmFsKHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0YXQodm9pZCk7CitleHRlcm4gUHlPYmplY3Qq
IFB5SW5pdF90aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3RocmVhZCh2b2lk
KTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19sb2NhbGUodm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9faW8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF96aXBpbXBvcnQo
dm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mYXVsdGhhbmRsZXIodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2VtYWxsb2Modm9pZCk7CitleHRlcm4gUHlPYmplY3Qq
IFB5SW5pdF9fc3ltdGFibGUodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF94eHN1YnR5
cGUodm9pZCk7CisKKy8qIFVuaWtyYWZ0IE1hcmtlciBzdGFydCAqLworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2FiYyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X2FycmF5KHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2FzeW5jaW8odm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9hdGV4aXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9hdWRpb29w
KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfYmluYXNjaWkodm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fYmlzZWN0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X2JsYWtlMih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19iejIodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9jbWF0aCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0
X19jb2RlY3Modm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY29sbGVjdGlvbnModm9p
ZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY29udGV4dHZhcnModm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fY3J5cHQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9f
Y3N2KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2N0eXBlc190ZXN0KHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2N0eXBlcyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X19jdXJzZXNfcGFuZWwodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY3Vy
c2VzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfY3VzdG9tMih2b2lkKTsKK2V4dGVy
biBQeU9iamVjdCogUHlJbml0X2N1c3RvbTModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5p
dF9jdXN0b200KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfY3VzdG9tKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2RhdGV0aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2RibSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19kZWNpbWFsKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2VsZW1lbnR0cmVlKHZvaWQpOworZXh0ZXJu
IFB5T2JqZWN0KiBQeUluaXRfZXJybm8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9m
YXVsdGhhbmRsZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mY250bCh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X19mdW5jdG9vbHModm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9nYyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X2dycCh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X19oYXNobGliKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2hlYXBxKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2ltcCh2b2lk
KTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19pbyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X2l0ZXJ0b29scyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19qc29uKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2xvY2FsZSh2b2lkKTsKK2V4dGVybiBQeU9i
amVjdCogUHlJbml0X19sc3Byb2Yodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fbHpt
YSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X21hdGgodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9fbWQ1KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbW1hcCh2
b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19tdWx0aWJ5dGVjb2RlYyh2b2lkKTsKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X19tdWx0aXByb2Nlc3Npbmcodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9uaXModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3Bjb2Rl
KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX29wZXJhdG9yKHZvaWQpOworZXh0ZXJu
IFB5T2JqZWN0KiBQeUluaXRfb3NzYXVkaW9kZXYodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9fb3ZlcmxhcHBlZCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3BhcnNlcih2
b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19waWNrbGUodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9fcG9zaXhzdWJwcm9jZXNzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfcHdkKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3F1ZXVlKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3JhbmRvbSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X3JlYWRsaW5lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfcmVzb3VyY2Uo
dm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2Nwcm94eSh2b2lkKTsKK2V4dGVybiBQ
eU9iamVjdCogUHlJbml0X3NlbGVjdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19z
aGExKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTI1Nih2b2lkKTsKK2V4dGVy
biBQeU9iamVjdCogUHlJbml0X19zaGEzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X3NoYTUxMih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zaWduYWwodm9pZCk7Citl
eHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc29ja2V0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfc3B3ZCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zc2wodm9pZCk7Citl
eHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RhdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJ
bml0X19zdHJpbmcodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RydWN0KHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfc3VibGlzdCh2b2lkKTsKK2V4dGVybiBQeU9iamVj
dCogUHlJbml0X19zeW10YWJsZSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3N5c2xv
Zyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3Rlcm1pb3Modm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fdGVzdGJ1ZmZlcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJ
bml0X190ZXN0Y2FwaSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X190aHJlYWQodm9p
ZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF90aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX3RraW50ZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2Vt
YWxsb2Modm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF91bmljb2RlZGF0YSh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X191dWlkKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfX3dlYWtyZWYodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fd2luYXBpKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfeHhsaW1pdGVkKHZvaWQpOworZXh0ZXJuIFB5
T2JqZWN0KiBQeUluaXRfeHhzdWJ0eXBlKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X3h4dGVzdGZ1enoodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF94eCh2b2lkKTsKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X3ppcGltcG9ydCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfTElC
WkxJQgorZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfemxpYih2b2lkKTsKKyNlbmRpZgorLyogVW5p
a3JhZnQgTWFya2VyIGVuZCAqLworLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCisKK2V4
dGVybiBQeU9iamVjdCogUHlNYXJzaGFsX0luaXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9faW1wKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZ2Modm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fYXN0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBfUHlXYXJu
aW5nc19Jbml0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0cmluZyh2b2lkKTsK
Kworc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7CisKKyAgICB7InBvc2l4
IiwgUHlJbml0X3Bvc2l4fSwKKyAgICB7ImVycm5vIiwgUHlJbml0X2Vycm5vfSwKKyAgICB7InB3
ZCIsIFB5SW5pdF9wd2R9LAorICAgIHsiX3NyZSIsIFB5SW5pdF9fc3JlfSwKKyAgICB7Il9jb2Rl
Y3MiLCBQeUluaXRfX2NvZGVjc30sCisgICAgeyJfd2Vha3JlZiIsIFB5SW5pdF9fd2Vha3JlZn0s
CisgICAgeyJfZnVuY3Rvb2xzIiwgUHlJbml0X19mdW5jdG9vbHN9LAorICAgIHsiX29wZXJhdG9y
IiwgUHlJbml0X19vcGVyYXRvcn0sCisgICAgeyJfY29sbGVjdGlvbnMiLCBQeUluaXRfX2NvbGxl
Y3Rpb25zfSwKKyAgICB7Il9hYmMiLCBQeUluaXRfX2FiY30sCisgICAgeyJpdGVydG9vbHMiLCBQ
eUluaXRfaXRlcnRvb2xzfSwKKyAgICB7ImF0ZXhpdCIsIFB5SW5pdF9hdGV4aXR9LAorICAgIHsi
X3NpZ25hbCIsIFB5SW5pdF9fc2lnbmFsfSwKKyAgICB7Il9zdGF0IiwgUHlJbml0X19zdGF0fSwK
KyAgICB7InRpbWUiLCBQeUluaXRfdGltZX0sCisgICAgeyJfdGhyZWFkIiwgUHlJbml0X190aHJl
YWR9LAorICAgIHsiX2xvY2FsZSIsIFB5SW5pdF9fbG9jYWxlfSwKKyAgICB7Il9pbyIsIFB5SW5p
dF9faW99LAorICAgIHsiemlwaW1wb3J0IiwgUHlJbml0X3ppcGltcG9ydH0sCisgICAgeyJmYXVs
dGhhbmRsZXIiLCBQeUluaXRfZmF1bHRoYW5kbGVyfSwKKyAgICB7Il90cmFjZW1hbGxvYyIsIFB5
SW5pdF9fdHJhY2VtYWxsb2N9LAorICAgIHsiX3N5bXRhYmxlIiwgUHlJbml0X19zeW10YWJsZX0s
CisgICAgeyJ4eHN1YnR5cGUiLCBQeUluaXRfeHhzdWJ0eXBlfSwKKworLyogLS0gQURETU9EVUxF
IE1BUktFUiAyIC0tICovCisKKyAgICAvKiBUaGlzIG1vZHVsZSBsaXZlcyBpbiBtYXJzaGFsLmMg
Ki8KKyAgICB7Im1hcnNoYWwiLCBQeU1hcnNoYWxfSW5pdH0sCisKKyAgICAvKiBUaGlzIGxpdmVz
IGluIGltcG9ydC5jICovCisgICAgeyJfaW1wIiwgUHlJbml0X19pbXB9LAorCisgICAgLyogVGhp
cyBsaXZlcyBpbiBQeXRob24vUHl0aG9uLWFzdC5jICovCisgICAgeyJfYXN0IiwgUHlJbml0X19h
c3R9LAorCisgICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9k
dWxlX25hbWVzICovCisgICAgeyJidWlsdGlucyIsIE5VTEx9LAorICAgIHsic3lzIiwgTlVMTH0s
CisKKyAgICAvKiBUaGlzIGxpdmVzIGluIGdjbW9kdWxlLmMgKi8KKyAgICB7ImdjIiwgUHlJbml0
X2djfSwKKworICAgIC8qIFRoaXMgbGl2ZXMgaW4gX3dhcm5pbmdzLmMgKi8KKyAgICB7Il93YXJu
aW5ncyIsIF9QeVdhcm5pbmdzX0luaXR9LAorCisgICAgLyogVGhpcyBsaXZlcyBpbiBPYmplY3Rz
L3VuaWNvZGVvYmplY3QuYyAqLworICAgIHsiX3N0cmluZyIsIFB5SW5pdF9fc3RyaW5nfSwKKwor
CisvKiBVbmlrcmFmdCBNYXJrZXIgc3RhcnQgKi8KKyAgICB7Il9hYmMiLCBQeUluaXRfX2FiY30s
CisgICAgeyJhcnJheSIsIFB5SW5pdF9hcnJheX0sCisgICAgeyJfYXN5bmNpbyIsIFB5SW5pdF9f
YXN5bmNpb30sCisgICAgeyJhdGV4aXQiLCBQeUluaXRfYXRleGl0fSwKKy8vICAgIHsiYXVkaW9v
cCIsIFB5SW5pdF9hdWRpb29wfSwKKyAgICB7ImJpbmFzY2lpIiwgUHlJbml0X2JpbmFzY2lpfSwK
KyAgICB7Il9iaXNlY3QiLCBQeUluaXRfX2Jpc2VjdH0sCisjaWZkZWYgQ09ORklHX0xJQklOVEVM
X0lOVFJJTlNJQ1MKKyAgICB7Il9ibGFrZTIiLCBQeUluaXRfX2JsYWtlMn0sCisjZW5kaWYKKy8v
ICAgIHsiX2J6MiIsIFB5SW5pdF9fYnoyfSwKKyAgICB7ImNtYXRoIiwgUHlJbml0X2NtYXRofSwK
KyAgICB7Il9jb2RlY3MiLCBQeUluaXRfX2NvZGVjc30sCisgICAgeyJfY29sbGVjdGlvbnMiLCBQ
eUluaXRfX2NvbGxlY3Rpb25zfSwKKyAgICB7Il9jb250ZXh0dmFycyIsIFB5SW5pdF9fY29udGV4
dHZhcnN9LAorLy9UT0RPICAgIHsiX2NyeXB0IiwgUHlJbml0X19jcnlwdH0sCisgICAgeyJfY3N2
IiwgUHlJbml0X19jc3Z9LAorLy8gICAgeyJfY3R5cGVzX3Rlc3QiLCBQeUluaXRfX2N0eXBlc190
ZXN0fSwKKy8vVE9ETyAgICB7Il9jdHlwZXMiLCBQeUluaXRfX2N0eXBlc30sCisvLyAgICB7Il9j
dXJzZXNfcGFuZWwiLCBQeUluaXRfX2N1cnNlc19wYW5lbH0sCisvL1RPRE8gICAgeyJfY3Vyc2Vz
IiwgUHlJbml0X19jdXJzZXN9LCBldmFsdWF0ZSB0byBgUHlJbml0KGNoYXIsIGxvbmcgZG91Ymxl
IF9fcmVzdHJpY3QsIHNob3J0LC4uLikoc2hvcnQpJworLy8gICAgeyJjdXN0b20yIiwgUHlJbml0
X2N1c3RvbTJ9LAorLy8gICAgeyJjdXN0b20zIiwgUHlJbml0X2N1c3RvbTN9LAorLy8gICAgeyJj
dXN0b200IiwgUHlJbml0X2N1c3RvbTR9LAorLy8gICAgeyJjdXN0b20iLCBQeUluaXRfY3VzdG9t
fSwKKy8vICAgIHsiX2RhdGV0aW1lIiwgUHlJbml0X19kYXRldGltZX0sCisvLyAgICB7Il9kYm0i
LCBQeUluaXRfX2RibX0sCisvLyAgICB7Il9kZWNpbWFsIiwgUHlJbml0X19kZWNpbWFsfSwKKy8v
ICAgIHsiX2VsZW1lbnR0cmVlIiwgUHlJbml0X19lbGVtZW50dHJlZX0sCisgICAgeyJlcnJubyIs
IFB5SW5pdF9lcnJub30sCisgICAgeyJmYXVsdGhhbmRsZXIiLCBQeUluaXRfZmF1bHRoYW5kbGVy
fSwKKy8vICAgIHsiZmNudGwiLCBQeUluaXRfZmNudGx9LAorICAgIHsiX2Z1bmN0b29scyIsIFB5
SW5pdF9fZnVuY3Rvb2xzfSwKKyAgICB7ImdjIiwgUHlJbml0X2djfSwKKy8vICAgIHsiZ3JwIiwg
UHlJbml0X2dycH0sCisvLyAgICB7Il9oYXNobGliIiwgUHlJbml0X19oYXNobGlifSwKKyAgICB7
Il9oZWFwcSIsIFB5SW5pdF9faGVhcHF9LAorICAgIHsiX2ltcCIsIFB5SW5pdF9faW1wfSwKKyAg
ICB7Il9pbyIsIFB5SW5pdF9faW99LAorICAgIHsiaXRlcnRvb2xzIiwgUHlJbml0X2l0ZXJ0b29s
c30sCisgICAgeyJfanNvbiIsIFB5SW5pdF9fanNvbn0sCisgICAgeyJfbG9jYWxlIiwgUHlJbml0
X19sb2NhbGV9LAorICAgIHsiX2xzcHJvZiIsIFB5SW5pdF9fbHNwcm9mfSwKKy8vICAgIHsiX2x6
bWEiLCBQeUluaXRfX2x6bWF9LAorICAgIHsibWF0aCIsIFB5SW5pdF9tYXRofSwKKyAgICB7Il9t
ZDUiLCBQeUluaXRfX21kNX0sCisvLyAgICB7Im1tYXAiLCBQeUluaXRfbW1hcH0sCisgICAgeyJf
bXVsdGlieXRlY29kZWMiLCBQeUluaXRfX211bHRpYnl0ZWNvZGVjfSwKKy8vICAgIHsiX211bHRp
cHJvY2Vzc2luZyIsIFB5SW5pdF9fbXVsdGlwcm9jZXNzaW5nfSwKKy8vICAgIHsibmlzIiwgUHlJ
bml0X25pc30sCisgICAgeyJfb3Bjb2RlIiwgUHlJbml0X19vcGNvZGV9LAorICAgIHsiX29wZXJh
dG9yIiwgUHlJbml0X19vcGVyYXRvcn0sCisvLyAgICB7Im9zc2F1ZGlvZGV2IiwgUHlJbml0X29z
c2F1ZGlvZGV2fSwKKy8vICAgIHsiX292ZXJsYXBwZWQiLCBQeUluaXRfX292ZXJsYXBwZWR9LAor
ICAgIHsicGFyc2VyIiwgUHlJbml0X3BhcnNlcn0sCisgICAgeyJfcGlja2xlIiwgUHlJbml0X19w
aWNrbGV9LAorICAgIHsiX3Bvc2l4c3VicHJvY2VzcyIsIFB5SW5pdF9fcG9zaXhzdWJwcm9jZXNz
fSwKKyAgICB7InB3ZCIsIFB5SW5pdF9wd2R9LAorICAgIHsiX3F1ZXVlIiwgUHlJbml0X19xdWV1
ZX0sCisgICAgeyJfcmFuZG9tIiwgUHlJbml0X19yYW5kb219LAorLy8gICAgeyJyZWFkbGluZSIs
IFB5SW5pdF9yZWFkbGluZX0sCisgICAgeyJyZXNvdXJjZSIsIFB5SW5pdF9yZXNvdXJjZX0sCisv
LyAgICB7Il9zY3Byb3h5IiwgUHlJbml0X19zY3Byb3h5fSwKKyAgICB7InNlbGVjdCIsIFB5SW5p
dF9zZWxlY3R9LAorICAgIHsiX3NoYTEiLCBQeUluaXRfX3NoYTF9LAorICAgIHsiX3NoYTI1NiIs
IFB5SW5pdF9fc2hhMjU2fSwKKyAgICB7Il9zaGEzIiwgUHlJbml0X19zaGEzfSwKKyAgICB7Il9z
aGE1MTIiLCBQeUluaXRfX3NoYTUxMn0sCisgICAgeyJfc2lnbmFsIiwgUHlJbml0X19zaWduYWx9
LAorICAgIHsiX3NvY2tldCIsIFB5SW5pdF9fc29ja2V0fSwKKy8vICAgIHsic3B3ZCIsIFB5SW5p
dF9zcHdkfSwKKy8vVE9ETyAgICB7Il9zc2wiLCBQeUluaXRfX3NzbH0sCisgICAgeyJfc3RhdCIs
IFB5SW5pdF9fc3RhdH0sCisgICAgeyJfc3RyaW5nIiwgUHlJbml0X19zdHJpbmd9LAorICAgIHsi
X3N0cnVjdCIsIFB5SW5pdF9fc3RydWN0fSwKKy8vICAgIHsic3VibGlzdCIsIFB5SW5pdF9zdWJs
aXN0fSwKKyAgICB7Il9zeW10YWJsZSIsIFB5SW5pdF9fc3ltdGFibGV9LAorICAgIHsic3lzbG9n
IiwgUHlJbml0X3N5c2xvZ30sCisvLyAgICB7InRlcm1pb3MiLCBQeUluaXRfdGVybWlvc30sCisv
LyAgICB7Il90ZXN0YnVmZmVyIiwgUHlJbml0X190ZXN0YnVmZmVyfSwKKyAgICB7Il90ZXN0Y2Fw
aSIsIFB5SW5pdF9fdGVzdGNhcGl9LAorICAgIHsiX3RocmVhZCIsIFB5SW5pdF9fdGhyZWFkfSwK
KyAgICB7InRpbWUiLCBQeUluaXRfdGltZX0sCisvLyAgICB7Il90a2ludGVyIiwgUHlJbml0X190
a2ludGVyfSwKKyAgICB7Il90cmFjZW1hbGxvYyIsIFB5SW5pdF9fdHJhY2VtYWxsb2N9LAorICAg
IHsidW5pY29kZWRhdGEiLCBQeUluaXRfdW5pY29kZWRhdGF9LAorLy9UT0RPICAgeyJfdXVpZCIs
IFB5SW5pdF9fdXVpZH0sIGV2YWx1YXRlcyB0byBgUHlJbml0KGludCwgZG91YmxlKSBfX3Jlc3Ry
aWN0YAorICAgIHsiX3dlYWtyZWYiLCBQeUluaXRfX3dlYWtyZWZ9LAorLy8gICAgeyJfd2luYXBp
IiwgUHlJbml0X193aW5hcGl9LAorICAgIHsieHhsaW1pdGVkIiwgUHlJbml0X3h4bGltaXRlZH0s
CisgICAgeyJ4eHN1YnR5cGUiLCBQeUluaXRfeHhzdWJ0eXBlfSwKKyAgICB7Il94eHRlc3RmdXp6
IiwgUHlJbml0X194eHRlc3RmdXp6fSwKKyAgICB7Inh4IiwgUHlJbml0X3h4fSwKKyAgICB7Inpp
cGltcG9ydCIsIFB5SW5pdF96aXBpbXBvcnR9LAorI2lmZGVmIENPTkZJR19MSUJaTElCCisgICAg
eyJ6bGliIiwgUHlJbml0X3psaWJ9LAorI2VuZGlmCisvKiBVbmlrcmFmdCBNYXJrZXIgZW5kICov
CisKKyAgICAvKiBTZW50aW5lbCAqLworICAgIHswLCAwfQorfTsKKworCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5c-0003Vm-2e; Fri, 13 Sep 2019 12:54:16 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5b-0003VY-G1
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:15 +0000
X-Inumbo-ID: 9367de6c-d625-11e9-95aa-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 9367de6c-d625-11e9-95aa-12813bfff9fa;
 Fri, 13 Sep 2019 12:54:09 +0000 (UTC)
IronPort-SDR: V6EZfpWPpHXw4Ni3z1xVpec2qLFLi01QIdLZ3zSu1MuNof+F/YmmyG58ABhGtVeE4DnMxJNCAR
 cd0smvO3zJCg==
IronPort-PHdr: =?us-ascii?q?9a23=3AEOLdkBLIOZBFNzrU49mcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfKf/xwZ3uMQTl6Ol3ixeRBMOHsqkC07Wd7v2oGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF+JqszxR?=
 =?us-ascii?q?fEontFcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWG?=
 =?us-ascii?q?hPUdtLVyFZAo2ycZYBAeQCM+hfrYb9qUADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsoTav3t8hhp?=
 =?us-ascii?q?TGi44I0FzJ9iV0zJwrKdGmSkN3e9CpHINNuyyVKod6WMAvTmFytCokxLALt4?=
 =?us-ascii?q?S3cDUFxZg5wRPUduaJfJKS4h35UeacOTJ4hHV4d72hnxuy6k2gyvHkVsmzzV?=
 =?us-ascii?q?ZKsjJJktnSuXAJ0Bze8taHSv5n8Ueg3TaDzRzc6vpeLUAsiKrUMIQtwqQ3lp?=
 =?us-ascii?q?YLsETDGDH5mFnugaOLeUgo5/Kk5ufnb7n8uJOQKY15hhvwP6g2n8ywG+U4Mg?=
 =?us-ascii?q?wAX2iB/uS80aXu8lH+QLVRkv02k6/ZvIreJcQGvq65HhRY3Zo46xqlFzemzc?=
 =?us-ascii?q?8XkWMdLFJCYB6HlZTmO0nSIPDkCveym1GskDZtx/DHOb3hGYzBIWXdn7f/Y7?=
 =?us-ascii?q?l971VRyA4yzdBE+5JUEasNIf3tVU/3rtDYCQU5MwOsyeb9FNp9zp8eWX6IAq?=
 =?us-ascii?q?KBPqPdr1uI5uM3I+aSfoMVuCv9K/k56P7vlnI5n0EScrWt3ZQNc3+0BOppI1?=
 =?us-ascii?q?iBa3r2ntgBCXsKvhY5TOHyll2CVSRcaGuqUK0m4DE0FZimApnCRoy3m7OOxj?=
 =?us-ascii?q?q0HppXZmBbEV2MCmvod5iZVPsWci2dPtRhniYZVbi5UIAtzwuutAipg4Zge+?=
 =?us-ascii?q?/V/Cwfrtfv2cZ448XXlAou7npkAsLb1HuCHE9umWZdbDgtwKF56Whg0krLha?=
 =?us-ascii?q?N/mOBZE5pX+utUegwhc4bBxapgDIahCUr6Yt6VRQP+EZ2dCjYrQ4dpzg=3D?=
 =?us-ascii?q?=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BOAAC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBVQUBAQsBg1cgEiqNHYgXmR6BewkBAQE6AQIBAYQ/AoMDNgcOAgMJAQE?=
 =?us-ascii?q?FAQEBAQEGBAEGGhYFhWuCOiKCbgEDA3kQHAMBAh0SQwwIGYMigg+rfYVLgzC?=
 =?us-ascii?q?BSYE0AYcehjE/hGGFEYUWBJYfligHgiRkBJQDJ5kKqEYoBYIEMxqDX4JOF44?=
 =?us-ascii?q?lPQEBMQGBBQEBjyABAQ?=
X-IPAS-Result: =?us-ascii?q?A2BOAAC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBVQUBAQsBg?=
 =?us-ascii?q?1cgEiqNHYgXmR6BewkBAQE6AQIBAYQ/AoMDNgcOAgMJAQEFAQEBAQEGBAEGG?=
 =?us-ascii?q?hYFhWuCOiKCbgEDA3kQHAMBAh0SQwwIGYMigg+rfYVLgzCBSYE0AYcehjE/h?=
 =?us-ascii?q?GGFEYUWBJYfligHgiRkBJQDJ5kKqEYoBYIEMxqDX4JOF44lPQEBMQGBBQEBj?=
 =?us-ascii?q?yABAQ?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786337"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3EBCA1A60144;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id izNPLlCqfJdm; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 24D271A60146;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 71C-8aIE5CSu; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 083CA1A6014E;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:44 +0300
Message-Id: <20190913125353.972-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 03/12] patches: Fix build
 issues
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKKiBVbmRlZmluZSBIQVZFX0ZPUksgYW5kIEhBVkVfRVhFQ1YKKiBGaXggY2FzdCBmb3Ig
cHRocmVhZF90CgpTaWduZWQtb2ZmLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVp
LmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Ci0tLQogLi4uMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5k
LUhBVkVfRVhFQ1ZFLnBhdGNoIHwgMjYgKysrKysrKysrKysrKysrKwogcGF0Y2hlcy8wMDAyLUFk
ZC1jYXN0LWZvci1wdGhyZWFkX3QucGF0Y2ggICAgIHwgMzAgKysrKysrKysrKysrKysrKysrKwog
MiBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0
Y2hlcy8wMDAxLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVDVkUucGF0Y2gKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9yLXB0aHJlYWRfdC5wYXRjaAoK
ZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5kLUhBVkVfRVhF
Q1ZFLnBhdGNoIGIvcGF0Y2hlcy8wMDAxLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVD
VkUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhNDk0ZgotLS0g
L2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5kLUhBVkVf
RVhFQ1ZFLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb20gNDdlNTdiYzQ2Y2FiM2M5MmY0MTM3
YmYxODM1MzRkNTkzZWJlYTIxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWQt
QW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KK0RhdGU6
IE1vbiwgMiBTZXAgMjAxOSAwNDoyMzozMCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvMV0gVW5k
ZWZpbmUgSEFWRV9GT1JLIGFuZCBIQVZFX0VYRUNWRQorCitTaWduZWQtb2ZmLWJ5OiBWbGFkLUFu
ZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CistLS0KKyBN
b2R1bGVzL3Bvc2l4bW9kdWxlLmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25z
KC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgYi9Nb2R1bGVzL3Bvc2l4
bW9kdWxlLmMKK2luZGV4IGI3NThlNzYuLmFlZDllMjIgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL3Bv
c2l4bW9kdWxlLmMKKysrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYworQEAgLTE3NSw4ICsxNzUs
NiBAQCBjb3JyZXNwb25kaW5nIFVuaXggbWFudWFsIGVudHJpZXMgZm9yIG1vcmUgaW5mb3JtYXRp
b24gb24gY2FsbHMuIik7CisgI2RlZmluZSBmc3luYyBfY29tbWl0CisgI2Vsc2UKKyAvKiBVbml4
IGZ1bmN0aW9ucyB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3QgY2hlY2sgZm9yICov
CistI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQorLSNkZWZpbmUgSEFWRV9GT1JLICAgICAgIDEK
KyAjaWYgZGVmaW5lZChfX1VTTENfXykgJiYgZGVmaW5lZChfX1NDT19WRVJTSU9OX18pICAgICAg
IC8qIFNDTyBVREsgQ29tcGlsZXIgKi8KKyAjZGVmaW5lIEhBVkVfRk9SSzEgICAgICAxCisgI2Vu
ZGlmCistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9y
LXB0aHJlYWRfdC5wYXRjaCBiL3BhdGNoZXMvMDAwMi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBh
dGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxN2FjMTUKLS0tIC9kZXYv
bnVsbAorKysgYi9wYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9yLXB0aHJlYWRfdC5wYXRjaApAQCAt
MCwwICsxLDMwIEBACitGcm9tIDcxMGYzOTc4YTlhMTA2OTA4ODJmMjg3NTdkM2Y0YTk1YzE3ZjRm
NmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZs
YWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CitEYXRlOiBNb24sIDIgU2VwIDIwMTkg
MDQ6Mjc6NDYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIEFkZCBjYXN0IGZvciBwdGhyZWFk
X3QKKworU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgorLS0tCisgUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggfCA1ICsr
KysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvUHl0
aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAoraW5kZXggZjc5
ZjliOS4uY2JmMTE0YSAxMDA2NDQKKy0tLSBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCisrKysg
Yi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorQEAgLTI1OCw3ICsyNTgsMTIgQEAgUHlUaHJlYWRf
Z2V0X3RocmVhZF9pZGVudCh2b2lkKQorICAgICBpZiAoIWluaXRpYWxpemVkKQorICAgICAgICAg
UHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKKyAgICAgdGhyZWFkaWQgPSBwdGhyZWFkX3NlbGYoKTsK
KysKKysjaWYgU0laRU9GX1BUSFJFQURfVCA8PSBTSVpFT0ZfTE9ORworICAgICByZXR1cm4gKHVu
c2lnbmVkIGxvbmcpIHRocmVhZGlkOworKyNlbHNlCisrICAgIHJldHVybiAodW5zaWduZWQgbG9u
ZykgKih1bnNpZ25lZCBsb25nICopICZ0aHJlYWRpZDsKKysjZW5kaWYKKyB9CisgCisgdm9pZAor
LS0gCisyLjIwLjEKKwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5h-0003XD-5R; Fri, 13 Sep 2019 12:54:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5f-0003Wt-Mh
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:19 +0000
X-Inumbo-ID: 922d3fec-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 922d3fec-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:06 +0000 (UTC)
IronPort-SDR: zXH4rr2921FuATbflw11haApbtmNOwMCX3v6Lsjll27HI5UeYq7cRmQ7yvgSkW8s/JQcdslmV3
 TVrAJ/CTvSUg==
IronPort-PHdr: =?us-ascii?q?9a23=3Aa+2sSRbzT1BpBNNXmIqTaKj/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZrs+5bnLW6fgltlLVR4KTs6sC17ON9fi/EjFdqdbZ6TZeKcYKD0?=
 =?us-ascii?q?dEwewt3CUYSPafDkP6KPO4JwcbJ+9lEGFfwnegLEJOE9z/bVCB6le77DoVBw?=
 =?us-ascii?q?mtfVEtfre9FYHdldm42P6v8JPPfQpImCC9YbRvJxmqsAndrMYbjZZsJ6or1h?=
 =?us-ascii?q?fEoHREduRWyGh1IV6fgwvw6t2/8ZJ+7Shcoe4t+9JFXa7nY6k2ULtUASg8PW?=
 =?us-ascii?q?so/sPrrx7DTQWO5nsYTGoblwdDDhbG4h/nQJr/qzP2ueVh1iaUO832Vq00Vi?=
 =?us-ascii?q?+576h3Uh/oiTwIOCA//WrKl8F/lqNboBampxxi347ZZZyeOfRicq/Be94RWG?=
 =?us-ascii?q?xMVdtTWSNcGIOxd4sBAfQcM+hWrIfzoFkBrRWlCAWwGO/i0CNEi2Xq0aEm1e?=
 =?us-ascii?q?kqDAHI3BYnH9ILqHnZstL1NLwOUeC0yqnD0DPNb+5O2Tfg9YPFdQwuofaXXb?=
 =?us-ascii?q?JscMrRz1MjFwfYjlWItIzoJC+a1v8Xv2iD8upvTviji3QgqwxopDWk28Qiip?=
 =?us-ascii?q?HRi44IxV3I6D91zYU1KNGiVkJ3f9ypHIFeui2CKod7Td4uT3trtSs60LEKp5?=
 =?us-ascii?q?C2cSYQxJg6yBPTdfqKeJWS7B35TuaeOzJ4iWpgeLK4mhm971Ctyvb5VsmoyF?=
 =?us-ascii?q?ZKqTdFksXUunANyRPT7s+HR+Nj/kekwzmP1gTT5vtYLkAvj6bbM4MhzaUqmp?=
 =?us-ascii?q?oJtkTPBi72mEPog6+Kbkgo5+el5/n9brjlppKQLZF4hh/8P6g0lMGzGeE4PR?=
 =?us-ascii?q?IPX2if9+S8zrrj/UjhTbpWif02ibXZsJHcJcgBoq65HhdV0ps45hmjFDeqys?=
 =?us-ascii?q?wYnWQcI15fYhKHiJDlO0vSL/DgEfe/n1OsnS9ux/DHOL3hA5LNLmPanLj8Y7?=
 =?us-ascii?q?l99VBTyA4owNBb5pJUEa0BIOnpVk7+qtPYCAU1Mwuuw+boEN99zJ8RWXqTAq?=
 =?us-ascii?q?+FN6PfqVGI6fwrI+mNfI8apizxK/g45/7vkXA5mEQQfa+30pQLbHC3BO9pL1?=
 =?us-ascii?q?+Hbnrxmt0BC3sFvhIiTOz2j12PSSBTZ3KoUK0h/j40EoSmAprZRo+zgbyNxj?=
 =?us-ascii?q?y0EYdLaWBBC1CMDGzld56YW/cRdS2eONVunSAfVbS7Vo8hzQqhuBXgy7pgfa?=
 =?us-ascii?q?Lo/XgdtJTi08Mw6+DNmBUa8T1vE9/bw2yLCWZukTAmXTgziYt4ulB8zB+nzL?=
 =?us-ascii?q?Bly6hTEsdP5vUPVhoiKLbX1KpiFtq0QAWXLYTBc0qvXtjzWWJ5ddk22dJbO0?=
 =?us-ascii?q?s=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2A3AAC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBVAYBAQsBgW2BF1MgEiqNHYgXfpggFIFnCQEBASkRAQIBAYFLgnQCgwM?=
 =?us-ascii?q?1CA4CAwkBAQUBAQEBAQYEAQYaFgWFXwyCOiKCbwZ5ECAfEkMUGYJXSwGCDqt?=
 =?us-ascii?q?9hUuDMIFJgTQBhx6DO4J2P4ERgl2EfBSGCgSMfIgFgR6WKAeCJGQEhhmJIoR?=
 =?us-ascii?q?IJ4JjQZVmqEYjA4ILMxpzgmwJgkUXi0mCXD0BATEBgQUBAYxMglQBAQ?=
X-IPAS-Result: =?us-ascii?q?A2A3AAC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBVAYBAQsBg?=
 =?us-ascii?q?W2BF1MgEiqNHYgXfpggFIFnCQEBASkRAQIBAYFLgnQCgwM1CA4CAwkBAQUBA?=
 =?us-ascii?q?QEBAQYEAQYaFgWFXwyCOiKCbwZ5ECAfEkMUGYJXSwGCDqt9hUuDMIFJgTQBh?=
 =?us-ascii?q?x6DO4J2P4ERgl2EfBSGCgSMfIgFgR6WKAeCJGQEhhmJIoRIJ4JjQZVmqEYjA?=
 =?us-ascii?q?4ILMxpzgmwJgkUXi0mCXD0BATEBgQUBAYxMglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786344"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id AAFC31A6014C;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id VT9-TmW-U_cJ; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 91FCA1A6014A;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id KdYTU9Yu34Ez; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 6F6861A60157;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:51 +0300
Message-Id: <20190913125353.972-11-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 10/12] Add init.c for
 initialization
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKVGhpcyBwYXRjaCBzZXRzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUg
bmVlZGVkIGR1cmluZyBydW50aW1lIGZvcgp0aGUgaW50ZXByZXRlci4KClNpZ25lZC1vZmYtYnk6
IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4K
U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBD
b25maWcudWsgICB8IDEzICsrKysrKysrKysrKysKIE1ha2VmaWxlLnVrIHwgIDEgKwogaW5pdC5j
ICAgICAgfCA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
CiAzIGZpbGVzIGNoYW5nZWQsIDYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp
bml0LmMKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggZjgwMWEwYy4u
M2RhM2ZmYiAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBiL0NvbmZpZy51awpAQCAtMTgsNCAr
MTgsMTcgQEAgbWVudWNvbmZpZyBMSUJQWVRIT04zCiAJc2VsZWN0IExXSVBfSVBWNgogCiBpZiBM
SUJQWVRIT04zCisKK2NvbmZpZyBMSUJQWVRIT04zX1BZVEhPTkhPTUUKKwlzdHJpbmcgIlB5dGhv
biBob21lIGRpcmVjdG9yeSIKKwlkZWZhdWx0ICIvbGliL3B5dGhvbjMuNyIKKworY29uZmlnIExJ
QlBZVEhPTjNfUFlUSE9OUEFUSAorCXN0cmluZyAiUHl0aG9uIHBhdGgiCisJZGVmYXVsdCAiL2xp
Yi9weXRob24zLjciCisKK2NvbmZpZyBMSUJQWVRIT04zX1RNUERJUgorCXN0cmluZyAiVGVtcCBk
aXJlY3RvcnkgbG9jYXRpb24iCisJZGVmYXVsdCAiL3RtcCIKKwogZW5kaWYKZGlmZiAtLWdpdCBh
L01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggZDY3YWYyNi4uOGZiYzM3YyAxMDA2NDQK
LS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTk1LDYgKzk1LDcgQEAgTElC
UFlUSE9OM19DT01NT05fQ1hYRkxBR1MteSArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMt
eSkKIExJQlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0lOQ0xV
REVTLXkpCiBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9J
TkNMVURFUy15KQogCitMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvaW5p
dC5jfHVuaWtyYWZ0CiBMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbW9k
dWxlc19jb25maWcuY3x1bmlrcmFmdAogTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X0JBU0UpL3N0dWJzLmN8dW5pa3JhZnQKIApkaWZmIC0tZ2l0IGEvaW5pdC5jIGIvaW5pdC5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDYyNzkKLS0tIC9kZXYvbnVsbAor
KysgYi9pbml0LmMKQEAgLTAsMCArMSw0NiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IEJhZG9pdSBWbGFkLUFuZHJlaSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdo
dCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVE
IElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVr
L2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordm9pZCBfX2NvbnN0cnVjdG9y
IHB5dGhvbl9pbml0KHZvaWQpCit7CisJc2V0ZW52KCJQWVRIT05IT01FIiwgQ09ORklHX0xJQlBZ
VEhPTjNfUFlUSE9OSE9NRSwgMCk7CisJc2V0ZW52KCJQWVRIT05QQVRIIiwgQ09ORklHX0xJQlBZ
VEhPTjNfUFlUSE9OUEFUSCwgMCk7CisJc2V0ZW52KCJQWVRIT05VU0VSQkFTRSIsICJzaXRlLXBh
Y2thZ2VzIiwgMCk7CisJc2V0ZW52KCJUTVBESVIiLCBDT05GSUdfTElCUFlUSE9OM19UTVBESVIs
IDApOworCXNldGVudigiX1BZVEhPTl9TWVNDT05GSUdEQVRBX05BTUUiLCAiX3N5c2NvbmZpZ2Rh
dGEiLCAwKTsKK30KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5h-0003XI-7V; Fri, 13 Sep 2019 12:54:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5g-0003X4-IA
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:20 +0000
X-Inumbo-ID: 947f6482-d625-11e9-95aa-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 947f6482-d625-11e9-95aa-12813bfff9fa;
 Fri, 13 Sep 2019 12:54:10 +0000 (UTC)
IronPort-SDR: 512kuKHrt8GuDgds10oakGFOjKv7q1YunfC3/t2cIxIq7GsRSrOOsldX3EJ9Z8dAfNvpbY/ak4
 4D/CCjoEi4Vw==
IronPort-PHdr: =?us-ascii?q?9a23=3AbK7byx+5CHU2q/9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B21OscTK2v8tzYMVDF4r011RmVBN6ds60P1ree8/i5HzBZu9DZ6DFKWacPfi?=
 =?us-ascii?q?dNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV?=
 =?us-ascii?q?3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sAvcutMKjYZgJao8yh?=
 =?us-ascii?q?vEqWZMd+hK2G9kP12ekwvi6suq4JJv7yFcsO89+sBdVqn3Y742RqFCAjQ8NG?=
 =?us-ascii?q?A16szrtR3dQgaK+3ARTGYYnAdWDgbc9B31UYv/vSX8tupmxSmVJtb2QqwuWT?=
 =?us-ascii?q?Sj9KhkVhnlgzoaOjEj8WHXjstwjL9HoB+kuhdyzZLYbJ2TOfFjeK7WYNEUSn?=
 =?us-ascii?q?dbXstJVyJPHJ6yYYUMAeQGP+lYoZLwq0cSoRakGQWhHv/jxiNOi3Tr3aM6ye?=
 =?us-ascii?q?MhEQTe0QE+GNIOq2jUrNTzNKwPV+610bHIzSjeZP5RxTj975PIcgwgofGKR7?=
 =?us-ascii?q?5wddfRyVEyFw7eklqQspbpPyuI1usWqWSb9e1gWPuphmU6pQ9xpT2vyd0tio?=
 =?us-ascii?q?nPno8V0lDF9Tl5wIYyI920Ukl7YcSrEJZWqiqUNJN2T9s/T2xnpSo20L4LtJ?=
 =?us-ascii?q?6hcCQU1pgqxQTTZvKff4SV7R/vSfydLDR4iX5/Zr6yiRi//VK9xuDzSMW51k?=
 =?us-ascii?q?tBoDBfndnWrH8N0gTe6s2ASvRg4EiswS2P1wXP6uFcJkA0iLbbJ4YhwrEukp?=
 =?us-ascii?q?oTtlzOHjHzmErsja+Wcl8o9fSz6+j9erXmu4STO5VuigH5Kqgum8q/DvokMg?=
 =?us-ascii?q?UWQmSW9vmw2Kfg8ED5WrlGkOM6n6vDvJ3UPcgbo7S2Aw5R0oYt8Ra/CDKm3c?=
 =?us-ascii?q?wEknkAN1JFZBOHj47zN1HKPfD4Feq/jk+wnzdw3fzGJqDhDY7XInjZl7ftZa?=
 =?us-ascii?q?x95FJEyAov0dBf4IpZCrQAIPL1W0/xs8fYAgYkPAOq3eboFtF925gaWWKOGa?=
 =?us-ascii?q?+ZLLjSvUWH5+0xJemAfogVuCzyK/I9/f7hkWc5mUMBfamuxZYXZm63HvBnI0?=
 =?us-ascii?q?WBf3XgmNcBEXoLvgUiTeznk1uCXiBPaHa2Ra0z/Ss3B5y7DY3bXICinKSB3D?=
 =?us-ascii?q?unHp1Rfm1GFFSMHm31eIqcQfgMbj+dItV/nTwFT7SuUJUu2gyptA/71rpqNf?=
 =?us-ascii?q?HU+jEFtZ3+ztR6/fHclQoo+TxpF8SSyHuBT3tznjBAezhj2aF5oEtmj1uOz6?=
 =?us-ascii?q?V8q/hZDsBIoeNEVEE9L5GP4fZ9DoXZXRndf9HBbEu+X53yCjYqUtM3hdsTe1?=
 =?us-ascii?q?tVEM7klg3JmTCtVexG34eXDYA5p/qPl0P6INxwni7L?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AiAAC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBUwcBAQsBgW2BF1MgEiqMPWCIF36YIBSBZwkBAQEzBwECAQGBS4J0AoM?=
 =?us-ascii?q?DNAkOAgMJAQEFAQEBAQEGBAEGGhYFhV8Mgjoigm8GGl8QIB8SQxQZgldLAYI?=
 =?us-ascii?q?OC6tyhUuDMIFJgTQBhx6DO4J2P4ERgl2DOxkEgSQUhWgiBIx8iAWBHpYoB4I?=
 =?us-ascii?q?kZASGGYkihEgngmNBlWYZqC0hghAzGnOCbAmDCYg2gmaCXD0BATEBgQUBAYx?=
 =?us-ascii?q?MglQBAQ?=
X-IPAS-Result: =?us-ascii?q?A2AiAAC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBUwcBAQsBg?=
 =?us-ascii?q?W2BF1MgEiqMPWCIF36YIBSBZwkBAQEzBwECAQGBS4J0AoMDNAkOAgMJAQEFA?=
 =?us-ascii?q?QEBAQEGBAEGGhYFhV8Mgjoigm8GGl8QIB8SQxQZgldLAYIOC6tyhUuDMIFJg?=
 =?us-ascii?q?TQBhx6DO4J2P4ERgl2DOxkEgSQUhWgiBIx8iAWBHpYoB4IkZASGGYkihEgng?=
 =?us-ascii?q?mNBlWYZqC0hghAzGnOCbAmDCYg2gmaCXD0BATEBgQUBAYxMglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786336"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3697A1A6014E;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 58e6es_Gs9Vx; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 1BCA31A60154;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id DtIc5XbC2dUo; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 0187D1A6014A;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:43 +0300
Message-Id: <20190913125353.972-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 02/12] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgNDQ4ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0NDggaW5z
ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCgpkaWZmIC0tZ2l0IGEv
TWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mYTExMDlhCi0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUudWsKQEAgLTAsMCArMSw0
NDggQEAKKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyMKKyMgIHB5
dGhvbjMgTWFrZWZpbGUudWsKKyMKKyMgIEF1dGhvcnM6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KKyMgICAgICAgICAgIENvc3RpbiBMdXB1
IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZl
cnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjCisjICAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyAgICAgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyAg
VEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4K
KyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnB5dGhvbjMs
JChDT05GSUdfTElCUFlUSE9OMykpKQorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJweXRob24z
X2NvcmUsJChDT05GSUdfTElCUFlUSE9OMykpKQorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJw
eXRob24zX2V4dGVuc2lvbnMsJChDT05GSUdfTElCUFlUSE9OMykpKQorCisjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworIyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCUFlUSE9O
M19WRVJTSU9OPTMuNworTElCUFlUSE9OM19SRVZJU0lPTj00CitMSUJQWVRIT04zX1ZFUlNJT05f
TE9ORz0kKExJQlBZVEhPTjNfVkVSU0lPTikuJChMSUJQWVRIT04zX1JFVklTSU9OKQorTElCUFlU
SE9OM19CQVNFTkFNRT1QeXRob24tJChMSUJQWVRIT04zX1ZFUlNJT05fTE9ORykKK0xJQlBZVEhP
TjNfVVJMPWh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8kKExJQlBZVEhPTjNfVkVS
U0lPTl9MT05HKS8kKExJQlBZVEhPTjNfQkFTRU5BTUUpLnRnegorTElCUFlUSE9OM19QQVRDSERJ
Uj0kKExJQlBZVEhPTjNfQkFTRSkvcGF0Y2hlcworJChldmFsICQoY2FsbCBmZXRjaCxsaWJweXRo
b24zLCQoTElCUFlUSE9OM19VUkwpKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gsbGlicHl0aG9uMywk
KExJQlBZVEhPTjNfUEFUQ0hESVIpLCQoTElCUFlUSE9OM19CQVNFTkFNRSkpKQorCisjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIworIyBIZWxwZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElC
UFlUSE9OM19TUkMgPSAkKExJQlBZVEhPTjNfT1JJR0lOKS8kKExJQlBZVEhPTjNfQkFTRU5BTUUp
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnkgaW5jbHVkZXMKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCitMSUJQWVRIT04zX0NPTU1PTl9JTkNMVURFUy15ICs9IC1JJChMSUJQ
WVRIT04zX0JBU0UpL2luY2x1ZGUKK0xJQlBZVEhPTjNfQ09NTU9OX0lOQ0xVREVTLXkgKz0gLUkk
KExJQlBZVEhPTjNfU1JDKQorTElCUFlUSE9OM19DT01NT05fSU5DTFVERVMteSArPSAtSSQoTElC
UFlUSE9OM19TUkMpL0luY2x1ZGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29tbW9u
IGZsYWdzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTdXBwcmVzc2VkIGZsYWdzCitTVVBQ
UkVTU19GTEFHUyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIgXAorCS1Xbm8tdW51c2VkLXZhcmlh
YmxlIC1Xbm8tdW51c2VkLXZhbHVlIC1Xbm8tdW51c2VkLWZ1bmN0aW9uIFwKKwktV25vLW1pc3Np
bmctZmllbGQtaW5pdGlhbGl6ZXJzIC1Xbm8taW1wbGljaXQtZmFsbHRocm91Z2ggXAorCS1Xbm8t
Y2FzdC1mdW5jdGlvbi10eXBlIC1Xbm8tc3RyaW5nb3AtdHJ1bmNhdGlvbiBcCisJLVduby1jaGFy
LXN1YnNjcmlwdHMgLVduby1zaWduLWNvbXBhcmUKK0xJQlBZVEhPTjNfU1VQUkVTU19DRkxBR1Mt
eSAgICs9ICQoU1VQUFJFU1NfRkxBR1MpIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCAtV25vLWlu
dC10by1wb2ludGVyLWNhc3QKK0xJQlBZVEhPTjNfU1VQUkVTU19DWFhGTEFHUy15ICs9ICQoU1VQ
UFJFU1NfRkxBR1MpCisKKyMgQ29tbW9uIGZsYWdzCitMSUJQWVRIT04zX0NPTU1PTl9GTEFHUy15
ICAgICs9IC1md3JhcHYKK0xJQlBZVEhPTjNfQ09NTU9OX0NGTEFHUy15ICAgKz0gJChMSUJQWVRI
T04zX0NPTU1PTl9GTEFHUy15KQorTElCUFlUSE9OM19DT01NT05fQ1hYRkxBR1MteSArPSAkKExJ
QlBZVEhPTjNfQ09NTU9OX0ZMQUdTLXkpCisKKyMgQ29tbW9uIHByZXByb2Nlc3Npbmcgc3ltYm9s
cworTElCUFlUSE9OM19DT01NT05fREVGSU5FUy15ICArPSAtRE5ERUJVRworTElCUFlUSE9OM19D
T01NT05fQ0ZMQUdTLXkgICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMteSkKK0xJQlBZ
VEhPTjNfQ09NTU9OX0NYWEZMQUdTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9ERUZJTkVTLXkp
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdsdWUgY29kZQorIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKKyMgSW5jbHVkZSBwYXRocworTElCUFlUSE9OM19DSU5DTFVERVMteSAgICs9ICQo
TElCUFlUSE9OM19DT01NT05fSU5DTFVERVMteSkKK0xJQlBZVEhPTjNfQ1hYSU5DTFVERVMteSAr
PSAkKExJQlBZVEhPTjNfQ09NTU9OX0lOQ0xVREVTLXkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCisjIFB5dGhvbiBjb3JlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJbmNsdWRlIHBh
dGhzCitMSUJQWVRIT04zX0NPUkVfQ09NTU9OX0lOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NP
TU1PTl9JTkNMVURFUy15KQorTElCUFlUSE9OM19DT1JFX0NJTkNMVURFUy15ICAgKz0gJChMSUJQ
WVRIT04zX0NPUkVfQ09NTU9OX0lOQ0xVREVTLXkpCitMSUJQWVRIT04zX0NPUkVfQ1hYSU5DTFVE
RVMteSArPSAkKExJQlBZVEhPTjNfQ09SRV9DT01NT05fSU5DTFVERVMteSkKKworIyBTdXByZXNz
ZWQgZmxhZ3MKK0xJQlBZVEhPTjNfQ09SRV9DRkxBR1MteSAgICs9ICQoTElCUFlUSE9OM19TVVBS
RVNTX0NGTEFHUy15KQorTElCUFlUSE9OM19DT1JFX0NYWEZMQUdTLXkgKz0gJChMSUJQWVRIT04z
X1NVUFJFU1NfQ1hYRkxBR1MteSkKKworIyBQcmVwcm9jZXNzaW5nIHN5bWJvbHMKK0xJQlBZVEhP
TjNfQ09SRV9ERUZJTkVTLXkgICs9ICQoTElCUFlUSE9OM19DT01NT05fREVGSU5FUy15KSAtRFB5
X0JVSUxEX0NPUkUgLURQeV9CVUlMRF9DT1JFX0JVSUxUSU4KK0xJQlBZVEhPTjNfQ09SRV9DRkxB
R1MteSAgICs9ICQoTElCUFlUSE9OM19DT1JFX0RFRklORVMteSkKK0xJQlBZVEhPTjNfQ09SRV9D
WFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19DT1JFX0RFRklORVMteSkKKworI0xJQlBZVEhPTjNf
Q09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHJvZ3JhbXMvcHl0aG9uLmMKKworTElC
UFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvYWNjZWxlci5j
CitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9iaXRz
ZXQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIv
Zmlyc3RzZXRzLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
UGFyc2VyL2dyYW1tYXIxLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvUGFyc2VyL2dyYW1tYXIuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9QYXJzZXIvbGlzdG5vZGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvbWV0YWdyYW1tYXIuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvbXlyZWFkbGluZS5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9ub2RlLmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFyc2VyL3BhcnNlci5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9wYXJzZXRvay5j
CisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvcGFy
c2V0b2tfcGdlbi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L1BhcnNlci9wZ2VuLmMKKyNMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1BhcnNlci9wZ2VubWFpbi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL1BhcnNlci9wcmludGdyYW1tYXIuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvdG9rZW5pemVyLmMKKyNMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci90b2tlbml6ZXJfcGdlbi5jCisKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9hYnN0cmFj
dC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMv
YWNjdS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVj
dHMvYm9vbG9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKK0xJQlBZVEhPTjNfQ09S
RV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9ieXRlc29iamVjdC5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvY2FsbC5jCitM
SUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvY2Fwc3Vs
ZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMv
Y2VsbG9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L09iamVjdHMvY2xhc3NvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9PYmplY3RzL2NvZGVvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYworTElCUFlUSE9OM19D
T1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9kaWN0b2Jq
ZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0
cy9lbnVtb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvT2JqZWN0cy9leGNlcHRpb25zLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvT2JqZWN0cy9maWxlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9mbG9hdG9iamVjdC5jCitMSUJQWVRIT04zX0NP
UkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvZnJhbWVvYmplY3QuYworTElC
UFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2Z1bmNvYmpl
Y3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3Rz
L2dlbm9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L09iamVjdHMvaXRlcm9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL09iamVjdHMvbGlzdG9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvbG9uZ29iamVjdC5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKK0xJQlBZ
VEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9tZXRob2RvYmpl
Y3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3Rz
L21vZHVsZW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9vYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL29ibWFsbG9jLmMKK0xJQlBZVEhPTjNfQ09S
RV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9vZGljdG9iamVjdC5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvcmFuZ2VvYmpl
Y3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3Rz
L3NldG9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L09iamVjdHMvc2xpY2VvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9PYmplY3RzL3N0cnVjdHNlcS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvdHVwbGVvYmplY3QuYworTElCUFlUSE9OM19DT1JF
X1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3R5cGVvYmplY3QuYworTElCUFlU
SE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3VuaWNvZGVjdHlw
ZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMv
dW5pY29kZW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL09iamVjdHMvd2Vha3JlZm9iamVjdC5jCisKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2FzZGwuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vYXN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2FzdF9vcHQuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vYXN0X3VucGFyc2UuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vYmx0aW5tb2R1bGUuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vYm9vdHN0
cmFwX2hhc2guYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Q
eXRob24vY2V2YWwuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vY29kZWNzLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvUHl0aG9uL2NvbXBpbGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9QeXRob24vY29udGV4dC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL1B5dGhvbi9kdG9hLmMKKyNMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9kdXAyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2R5bmFtaWNfYW5ub3RhdGlvbnMuYworI0xJQlBZ
VEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2R5bmxvYWRfZGwu
YworI0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2R5
bmxvYWRfc2hsaWIuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vZHlubG9hZF9zdHViLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvUHl0aG9uL2Vycm9ycy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL1B5dGhvbi9maWxldXRpbHMuYworTElCUFlUSE9OM19DT1JFX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYworTElCUFlU
SE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vZnJvemVuLmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2Zyb3plbm1h
aW4uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24v
ZnV0dXJlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0
aG9uL2dldGFyZ3MuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vZ2V0Y29tcGlsZXIuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9QeXRob24vZ2V0Y29weXJpZ2h0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2dldG9wdC5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9nZXRwbGF0Zm9ybS5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9nZXR2ZXJzaW9uLmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2dyYW1pbml0
LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2hh
bXQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24v
aW1wb3J0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0
aG9uL2ltcG9ydGRsLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvUHl0aG9uL21hcnNoYWwuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9QeXRob24vbW9kc3VwcG9ydC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL1B5dGhvbi9teXNucHJpbnRmLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL215c3RydG91bC5jCitMSUJQWVRIT04zX0NP
UkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9wYXRoY29uZmlnLmMKK0xJQlBZ
VEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3BlZXBob2xlLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5YXJl
bmEuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24v
cHljdHlwZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5
dGhvbi9weWZwZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L1B5dGhvbi9weWhhc2guYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9QeXRob24vcHlsaWZlY3ljbGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9QeXRob24vcHltYXRoLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5c3RhdGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHlzdHJjbXAuYworTElCUFlUSE9OM19DT1JF
X1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHlzdHJoZXguYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHlzdHJ0b2QuYworTElC
UFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vUHl0aG9uLWFz
dC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9w
eXRob25ydW4uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Q
eXRob24vcHl0aW1lLmMKKyNMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1B5dGhvbi9zdHJkdXAuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9QeXRob24vc3RydWN0bWVtYmVyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3N5bXRhYmxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3N5c21vZHVsZS5jCitMSUJQWVRIT04zX0NP
UkVfU1lTTU9EVUxFX0ZMQUdTLXkgKz0gLURBQklGTEFHUz0nIm0iJyAtRE1VTFRJQVJDSD1cIng4
Nl82NC1saW51eC1nbnVcIgorTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9QeXRob24vdGhyZWFkLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvUHl0aG9uL3RyYWNlYmFjay5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL1B5dGhvbi9fd2FybmluZ3MuYworCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2FiYy5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKK0xJQlBZ
VEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY29kZWNzbW9k
dWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fY29sbGVjdGlvbnNtb2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL2Vycm5vbW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYworTElCUFlUSE9OM19D
T1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19mdW5jdG9vbHNtb2R1bGUu
YworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2dj
bW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9k
dWxlcy9nZXRidWlsZGluZm8uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL2dldHBhdGguYworTElCUFlUSE9OM19DT1JFX0dFVFBBVEhfRkxBR1Mt
eSArPSAtRFBZVEhPTlBBVEg9JyIvbGliL3B5dGhvbiQoTElCUFlUSE9OM19WRVJTSU9OKSInIFwK
KwktRFBSRUZJWD0nIiInIFwKKwktREVYRUNfUFJFRklYPSciIicgXAorCS1EVkVSU0lPTj0nIiQo
TElCUFlUSE9OM19WRVJTSU9OKSInIFwKKwktRFZQQVRIPSciIicKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9oYXNodGFibGUuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19pby9idWZmZXJlZGlv
LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9f
aW8vYnl0ZXNpby5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvX2lvL2ZpbGVpby5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvX2lvL2lvYmFzZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCitMSUJQWVRIT04zX0NP
UkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2lvL3N0cmluZ2lvLmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9faW8vdGV4
dGlvLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9pdGVydG9vbHNtb2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL21haW4uYworTElCUFlUSE9OM19DT1JFX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19tYXRoLmMKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fb3BlcmF0b3IuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9wd2Rt
b2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL3NpZ25hbG1vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3NyZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvX3N0YXQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMKK0xJQlBZ
VEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy90aW1lbW9kdWxl
LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9f
dHJhY2VtYWxsb2MuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9Nb2R1bGVzL193ZWFrcmVmLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy94eHN1YnR5cGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3ppcGltcG9ydC5jCisKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIFB5dGhvbiBleHRlbnNpb25zCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJ
bmNsdWRlIHBhdGhzCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ09NTU9OX0lOQ0xVREVTLXkgKz0g
JChMSUJQWVRIT04zX0NPTU1PTl9JTkNMVURFUy15KQorTElCUFlUSE9OM19FWFRFTlNJT05TX0NJ
TkNMVURFUy15ICAgKz0gJChMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ09NTU9OX0lOQ0xVREVTLXkp
CitMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ1hYSU5DTFVERVMteSArPSAkKExJQlBZVEhPTjNfRVhU
RU5TSU9OU19DT01NT05fSU5DTFVERVMteSkKKworIyBTdXByZXNzZWQgZmxhZ3MKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19DRkxBR1MteSAgICs9ICQoTElCUFlUSE9OM19TVVBSRVNTX0NGTEFHUy15
KQorTElCUFlUSE9OM19FWFRFTlNJT05TX0NYWEZMQUdTLXkgKz0gJChMSUJQWVRIT04zX1NVUFJF
U1NfQ1hYRkxBR1MteSkKKworIyBQcmVwcm9jZXNzaW5nIHN5bWJvbHMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19ERUZJTkVTLXkgICs9ICQoTElCUFlUSE9OM19DT01NT05fREVGSU5FUy15KSAtRFB5
X0JVSUxEX0VYVEVOU0lPTlMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19DRkxBR1MteSAgICs9ICQo
TElCUFlUSE9OM19FWFRFTlNJT05TX0RFRklORVMteSkKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19D
WFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19FWFRFTlNJT05TX0RFRklORVMteSkKKworTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2FycmF5
bW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvTW9kdWxlcy9fYXN5bmNpb21vZHVsZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2F1ZGlvb3AuYworTElCUFlUSE9OM19FWFRF
TlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2JpbmFzY2lpLmMKK0xJ
QlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9f
YmlzZWN0bW9kdWxlLmMKK2lmZXEgKCQoQ09ORklHX0xJQklOVEVMX0lOVFJJTlNJQ1MpLHkpCitM
SUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMv
X2JsYWtlMi9ibGFrZTJiX2ltcGwuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19ibGFrZTIvYmxha2UybW9kdWxlLmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmxha2Uy
L2JsYWtlMnNfaW1wbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvX2JsYWtlMi9pbXBsL2JsYWtlMmIuYworI0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmxha2UyL2ltcGwv
Ymxha2UyYi1yZWYuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19ibGFrZTIvaW1wbC9ibGFrZTJzLmMKKyNMSUJQWVRIT04zX0VYVEVO
U0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2JsYWtlMi9pbXBsL2Js
YWtlMnMtcmVmLmMKK2VuZGlmCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19iejJtb2R1bGUuYworTElCUFlUSE9OM19FWFRFTlNJT05T
X1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2Nu
LmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9k
dWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15
ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5j
CitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMvY2prY29kZWNzL19jb2RlY3NfanAuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKK0xJQlBZ
VEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9jamtj
b2RlY3MvX2NvZGVjc190dy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9jbWF0aG1v
ZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvX2NvbnRleHR2YXJzbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3N2LmMK
KyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMvX2N0eXBlcy9jYWxsYmFja3MuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2NhbGxwcm9jLmMKKyNMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9j
ZmllbGQuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jCisj
TElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVz
L19jdHlwZXMvZGFyd2luL2RsZmNuX3NpbXBsZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZp
LmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9wcmVwX2NpZi5jCisjTElCUFlUSE9OM19FWFRFTlNJ
T05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21z
dmMvdHlwZXMuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL3dpbjMyLmMKKyNMSUJQWVRIT04zX0VY
VEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9saWJm
Zmlfb3N4L2ZmaS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9wb3dlcnBjL3BwYy1mZmlfZGFyd2lu
LmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3R5cGVzLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4
Ni94ODYtZmZpNjQuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmlfZGFyd2luLmMK
KyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMvX2N0eXBlcy9tYWxsb2NfY2xvc3VyZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCisjTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdXJz
ZXNtb2R1bGUuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKKyNMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2Ri
bW1vZHVsZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvYmFz
ZWFyaXRoLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvY29uc3RhbnRzLmMKKyNMSUJQWVRIT04zX0VY
VEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGli
bXBkZWMvY29udGV4dC5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2NvbnZvbHV0ZS5jCisjTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNp
bWFsL2xpYm1wZGVjL2NydC5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2RpZnJhZGl4Mi5jCisjTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19k
ZWNpbWFsL2xpYm1wZGVjL2ZudC5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2ZvdXJzdGVwLmMKKyNM
SUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMv
X2RlY2ltYWwvbGlibXBkZWMvaW8uYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tZW1vcnkuYworI0xJ
QlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9f
ZGVjaW1hbC9saWJtcGRlYy9tcGRlY2ltYWwuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9udW1iZXJ0
aGVvcnkuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9zaXhzdGVwLmMKKyNMSUJQWVRIT04zX0VYVEVO
U0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBk
ZWMvdHJhbnNwb3NlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9leHBhdC9sb2FkbGlicmFyeS5jCisj
TElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVz
L2V4cGF0L3htbHBhcnNlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9leHBhdC94bWxyb2xlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9leHBhdC94bWx0b2suYworTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2V4
cGF0L3htbHRva19pbXBsLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9leHBhdC94bWx0b2tfbnMuYworI0xJQlBZVEhPTjNfRVhURU5T
SU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9mY250bG1vZHVsZS5jCisj
TElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVz
L19nZGJtbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvZ2V0YWRkcmluZm8uYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9nZXRuYW1laW5mby5jCisjTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2dycG1v
ZHVsZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fanNvbi5jCitMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2xz
cHJvZi5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9Nb2R1bGVzL19sem1hbW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9tYXRobW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5T
SU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9tZDVtb2R1bGUuYworI0xJ
QlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9t
bWFwbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYworI0xJQlBZ
VEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fbXVs
dGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL25pc21vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVO
U0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX29wY29kZS5jCisjTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL29z
c2F1ZGlvZGV2LmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvb3ZlcmxhcHBlZC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15
ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fcGlja2xlLmMK
K0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fcG9zaXhzdWJwcm9jZXNzLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvcHlleHBhdC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3F1ZXVlbW9kdWxlLmMKK0xJQlBZ
VEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fcmFu
ZG9tbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvcmVhZGxpbmUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3Jlc291cmNlLmMKK0xJQlBZVEhPTjNfRVhURU5T
SU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9yb3RhdGluZ3RyZWUuYwor
I0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fc2Nwcm94eS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9zaGExbW9kdWxlLmMKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9zaGEyNTZtb2R1
bGUuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9fc2hhMy9rY3AvS2VjY2FrSGFzaC5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zaGEzL2tjcC9LZWNjYWtQLTE2MDAt
aW5wbGFjZTMyQkkuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fc2hhMy9rY3AvS2VjY2FrUC0xNjAwLW9wdDY0LmMKKyNMSUJQWVRI
T04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NoYTMv
a2NwL0tlY2Nha1Nwb25nZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX3NoYTMvc2hhM21vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVO
U0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvc2hhNTEybW9kdWxlLmMK
K0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9zb2NrZXRtb2R1bGUuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9zcHdkbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCisjTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19z
cWxpdGUvY29ubmVjdGlvbi5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKKyNMSUJQWVRIT04zX0VYVEVO
U0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NxbGl0ZS9taWNyb3By
b3RvY29scy5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29s
LmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvX3NxbGl0ZS9yb3cuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChM
SUJQWVRIT04zX1NSQykvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCisjTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvdXRp
bC5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL19zc2wuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19zdHJ1Y3QuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCisjTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3Rlcm1pb3MuYwor
I0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fdGVzdGJ1ZmZlci5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBs
ZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL190ZXN0bXVsdGlwaGFzZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3RrYXBwaW5pdC5jCisjTElCUFlUSE9OM19FWFRF
TlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL190a2ludGVyLmMKK0xJ
QlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy91
bmljb2RlZGF0YS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL191dWlkbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3dpbmFwaS5jCitMSUJQWVRIT04zX0VY
VEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMveHhsaW1pdGVkLmMK
K0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy94eG1vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3h4dGVzdGZ1enovZnV6emVyLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9feHh0ZXN0ZnV6ei9feHh0ZXN0
ZnV6ei5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy0kKENPTkZJR19MSUJaTElCKSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3psaWJtb2R1bGUuYworCisjTElCUFlUSE9OM19FWFRF
TlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9NaXNjL2NvdmVyaXR5X21vZGVsLmMK
KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJlcGFyZSBydWxlcworIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKKworIyBDdXN0b21pemUgY29uZmlnOiBjb25maWd1cmUgc3RhY2sgc2l6ZQor
JChBUFBfQkFTRSkvLmNvbmZpZy5vcmlnOiAkKEFQUF9CQVNFKS8uY29uZmlnCisJJChjYWxsIHZl
cmJvc2VfY21kLENPTkZJRyxsaWJweXRob24zOiAkKG5vdGRpciAkQCksIFwKKwkJY3AgJChBUFBf
QkFTRSkvLmNvbmZpZyAkQCAmJiBcCisJCXNlZCAtaSAncy9eQ09ORklHX1NUQUNLX1NJWkVfUEFH
RV9PUkRFUj0uKiQkL0NPTkZJR19TVEFDS19TSVpFX1BBR0VfT1JERVI9MTAvZycgJChBUFBfQkFT
RSkvLmNvbmZpZykKKworTElCUFlUSE9OM19QUkVQQVJFRF9ERVBTID0gXAorCSQoQVBQX0JBU0Up
Ly5jb25maWcub3JpZyBcCisKKyQoTElCUFlUSE9OM19CVUlMRCkvLnByZXBhcmVkOiAkKExJQlBZ
VEhPTjNfUFJFUEFSRURfREVQUykKKworVUtfUFJFUEFSRSArPSAkKExJQlBZVEhPTjNfQlVJTEQp
Ly5wcmVwYXJlZAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5m-0003Yg-Bi; Fri, 13 Sep 2019 12:54:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5k-0003YR-No
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:24 +0000
X-Inumbo-ID: 90ee3f14-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 90ee3f14-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:04 +0000 (UTC)
IronPort-SDR: zCVDpqYafZrT6a2W6mfTByZPpoHYjfA2j8O5/kgvr6h1IO7qkOSios2KIoQnma0I72OurQ7U9n
 D8PeyfAY64pw==
IronPort-PHdr: =?us-ascii?q?9a23=3A/i+xGRT4lY2nBK9SgVGYo6+YMdpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6zZxeN2/xhgRfzUJnB7Loc0qyK6vumATNLvMvJ8ChbNsAVDV?=
 =?us-ascii?q?ld0YRetjdjKfbNMVf8Iv/uYn5yN+V5f3ghwUuGN1NIEt31fVzYry76xzcTHh?=
 =?us-ascii?q?LiKVg9fbytScbdgMutyu+95YDYbRlWizqhe7NyKwi9oRnMusUMjoZuN6g8xg?=
 =?us-ascii?q?HVrnZKdOhbxWNlLk+Xkxrg+8u85pFu/zlOt/4768JMTaD2dLkkQLJFCzgrL3?=
 =?us-ascii?q?o779DxuxnZSguP6HocUmEInRdNHgPI8hL0UIrvvyXjruZy1zWUMsPwTbAvRD?=
 =?us-ascii?q?St9LxrRwPyiCcGLDE27mfagdFtga1BoRKhoxt/w5PIYIyQKfFzcL/Rcc8cSG?=
 =?us-ascii?q?FcWMtaSi5PDZ6mb4YXD+QPI/tWoYf+qVUJrxS+CxKhCP/zxjJSmnP7x7E23/?=
 =?us-ascii?q?gnHArb3AIgBdUOsHHModjrM6cSSvy1zKjOzT7eaf1WxC/96JXVeR0mvf6MWq?=
 =?us-ascii?q?lwcdbQyUkpDQ/FikiQqZT4Pz6OyusNqHKX7/J9Ve20kWInsQZxryGpy8wxiY?=
 =?us-ascii?q?fJnpoYxk3L+Clk2oo4Jt21RFRlbdK6EpZcrS+XO5NrTs4tXm1koiU3x70ctZ?=
 =?us-ascii?q?KlciUHxo4rywPQZvCZdYWD/wjtW/yLIThigXJoYLe/hxGv/ke+0uD8Tcy00E?=
 =?us-ascii?q?pSripCj9nMqmgB1xzN5ciDTftw5lmh2TOV2ADS7uFIO1w7lbHBJ545374/jY?=
 =?us-ascii?q?AfsV7EHiPumUX2irGZdlk89+S15Onrf6/qq5ycOoNulA3yLKYjltaxDOggNw?=
 =?us-ascii?q?gBRWmb+eCy1L35+k35Ra1HgeExkqnCrJDaJMIbqrS9Aw9IyoYj9g2yACu90N?=
 =?us-ascii?q?gChXkHMUlKdAidj4juI13OOuz3De+jg1Swlzdm3/XGPrznApXMKXjDi67tcq?=
 =?us-ascii?q?tj5E5C1gUzyctS55ZVCrEaPPLzQVX9tdPGAR8/KQC0xPznCNpl3IMERW2PGr?=
 =?us-ascii?q?OZML/VsVKQ6OIgPe2MZI4NuDnjMfQl5+PujX4lll8cZqSp24UYZ2y8Hvt8OE?=
 =?us-ascii?q?qVe2TjgsoZG2cQogU+VPDqiEGFUTNLeXayW7gz6SwjB428C4fMW5qtj6KA3C?=
 =?us-ascii?q?uhBZJZfH1JCleNEXf1bIiEQOsMaD+PLcN7iDMLSaOhR5U81RG2rwD20aBnLu?=
 =?us-ascii?q?2HshEf4Jfi0tly/KjfmA8/8RRwDt+ByCedQmcymXkHFBEs26Uqiktm1laFmY?=
 =?us-ascii?q?xlm+EQQddU/O9IVEE+KIbB5+dhTcjvUETbeYHaGx6dXty6DGRpHZoKyNgUbh?=
 =?us-ascii?q?MlFg=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CmAgC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4FugRdTIBIqjR2IF36aGwkBAQEpEQECAQGEPwKDAzgTAgMJAQEFAQE?=
 =?us-ascii?q?BAQEGBAEGGhYFhV8Mgjoigm8GGgFeECAfEkMUGYJXSwGCDqt9hUuDMEp/gTS?=
 =?us-ascii?q?HH4YxP4ERgl1zigUiBJUBgR6WKAeCJGQEhhmFDYhdJ4MklWajF4UvOIF5Mxp?=
 =?us-ascii?q?zgmwJgkICAReBBAEHNIRliAA9AQExAYEFAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2CmAgC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBZ4FugRdTI?=
 =?us-ascii?q?BIqjR2IF36aGwkBAQEpEQECAQGEPwKDAzgTAgMJAQEFAQEBAQEGBAEGGhYFh?=
 =?us-ascii?q?V8Mgjoigm8GGgFeECAfEkMUGYJXSwGCDqt9hUuDMEp/gTSHH4YxP4ERgl1zi?=
 =?us-ascii?q?gUiBJUBgR6WKAeCJGQEhhmFDYhdJ4MklWajF4UvOIF5MxpzgmwJgkICAReBB?=
 =?us-ascii?q?AEHNIRliAA9AQExAYEFAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786340"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 737821A6015A;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id mX2lOwUW5OXj; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 547401A6014E;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id jF7jO21-OZ6T; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 15EE01A6014F;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:45 +0300
Message-Id: <20190913125353.972-5-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 04/12] pyconfig.h: Introduce
 file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKcHljb25maWcuaCBpcyBnZW5lcmF0ZWQgd2hlbiBydW5uaW5nIC4vY29uZmlndXJlIGFu
ZCBpdCBjb250YWlucyB0aGUgZmVhdHVyZXMKdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBidWls
ZCBtYWNoaW5lLiBUaGlzIGlzIGNvcGllZCBmcm9tIGEgbG9jYWwgYnVpbGQuCgpTaWduZWQtb2Zm
LWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIu
cm8+ClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0t
LQogaW5jbHVkZS9weWNvbmZpZy5oIHwgMTU4NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDE1ODcgaW5zZXJ0aW9ucygrKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvcHljb25maWcuaAoKZGlmZiAtLWdpdCBhL2luY2x1ZGUv
cHljb25maWcuaCBiL2luY2x1ZGUvcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xZTRlZjhhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9weWNvbmZpZy5o
CkBAIC0wLDAgKzEsMTU4NyBAQAorLyogcHljb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIHB5Y29u
ZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qIHB5Y29uZmlnLmguaW4uICBHZW5lcmF0ZWQg
ZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKworI2lmbmRlZiBQeV9QWUNP
TkZJR19ICisjZGVmaW5lIFB5X1BZQ09ORklHX0gKKworCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcg
dW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisvKiAjdW5kZWYgQUNfQVBQTEVf
VU5JVkVSU0FMX0JVSUxEICovCisKKy8qIERlZmluZSBmb3IgQUlYIGlmIHlvdXIgY29tcGlsZXIg
aXMgYSBnZW51aW5lIElCTSB4bEMveGxDX3IgYW5kIHlvdSB3YW50CisgICBzdXBwb3J0IGZvciBB
SVggQysrIHNoYXJlZCBleHRlbnNpb24gbW9kdWxlcy4gKi8KKy8qICN1bmRlZiBBSVhfR0VOVUlO
RV9DUExVU1BMVVMgKi8KKworLyogVGhlIEFuZHJvaWQgQVBJIGxldmVsLiAqLworLyogI3VuZGVm
IEFORFJPSURfQVBJX0xFVkVMICovCisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJp
dCBJRUVFIDc1NCBiaW5hcnkgZm9ybWF0LCBzdG9yZWQgaW4gQVJNCisgICBtaXhlZC1lbmRpYW4g
b3JkZXIgKGJ5dGUgb3JkZXIgNDU2NzAxMjMpICovCisvKiAjdW5kZWYgRE9VQkxFX0lTX0FSTV9N
SVhFRF9FTkRJQU5fSUVFRTc1NCAqLworCisvKiBEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1i
aXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25p
ZmljYW50IGJ5dGUgZmlyc3QgKi8KKy8qICN1bmRlZiBET1VCTEVfSVNfQklHX0VORElBTl9JRUVF
NzU0ICovCisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJpdCBJRUVFIDc1NCBiaW5h
cnkgZm9ybWF0LCBzdG9yZWQgd2l0aCB0aGUKKyAgIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmly
c3QgKi8KKyNkZWZpbmUgRE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NCAxCisKKy8qIERl
ZmluZSBpZiAtLWVuYWJsZS1pcHY2IGlzIHNwZWNpZmllZCAqLworI2RlZmluZSBFTkFCTEVfSVBW
NiAxCisKKy8qIERlZmluZSBpZiBmbG9jayBuZWVkcyB0byBiZSBsaW5rZWQgd2l0aCBic2QgbGli
cmFyeS4gKi8KKy8qICN1bmRlZiBGTE9DS19ORUVEU19MSUJCU0QgKi8KKworLyogRGVmaW5lIGlm
IGdldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBnZXRwZ3JwKDApLiAqLworLyogI3VuZGVmIEdF
VFBHUlBfSEFWRV9BUkcgKi8KKworLyogRGVmaW5lIGlmIGdldHRpbWVvZmRheSgpIGRvZXMgbm90
IGhhdmUgc2Vjb25kICh0aW1lem9uZSkgYXJndW1lbnQgVGhpcyBpcworICAgdGhlIGNhc2Ugb24g
TW90b3JvbGEgVjQgKFI0MFY0LjIpICovCisvKiAjdW5kZWYgR0VUVElNRU9GREFZX05PX1RaICov
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWNjZXB0NCcgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfQUNDRVBUNCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgYWNvc2gnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FDT1NIIDEKKworLyogc3RydWN0
IGFkZHJpbmZvIChuZXRkYi5oKSAqLworI2RlZmluZSBIQVZFX0FERFJJTkZPIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfQUxBUk0gMQorCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVp
cmVkICovCisvKiAjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVEICovCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX0FMTE9DQV9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgeW91ciB0aW1lLmggZGVmaW5lcyBh
bHR6b25lLiAqLworLyogI3VuZGVmIEhBVkVfQUxUWk9ORSAqLworCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGFzaW5oJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BU0lOSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNtL3R5cGVzLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX0FTTV9UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQVRBTkggMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Ymx1ZXRvb3RoL2JsdWV0b290aC5oPiBo
ZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0JMVUVUT09USF9CTFVFVE9PVEhfSCAqLwor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJsdWV0b290aC5oPiBoZWFkZXIgZmls
ZS4gKi8KKy8qICN1bmRlZiBIQVZFX0JMVUVUT09USF9IICovCisKKy8qIERlZmluZSBpZiBtYnN0
b3djcyhOVUxMLCAidGV4dCIsIDApIGRvZXMgbm90IHJldHVybiB0aGUgbnVtYmVyIG9mIHdpZGUK
KyAgIGNoYXJzIHRoYXQgd291bGQgYmUgY29udmVydGVkLiAqLworLyogI3VuZGVmIEhBVkVfQlJP
S0VOX01CU1RPV0NTICovCisKKy8qIERlZmluZSBpZiBuaWNlKCkgcmV0dXJucyBzdWNjZXNzL2Zh
aWx1cmUgaW5zdGVhZCBvZiB0aGUgbmV3IHByaW9yaXR5LiAqLworLyogI3VuZGVmIEhBVkVfQlJP
S0VOX05JQ0UgKi8KKworLyogRGVmaW5lIGlmIHRoZSBzeXN0ZW0gcmVwb3J0cyBhbiBpbnZhbGlk
IFBJUEVfQlVGIHZhbHVlLiAqLworLyogI3VuZGVmIEhBVkVfQlJPS0VOX1BJUEVfQlVGICovCisK
Ky8qIERlZmluZSBpZiBwb2xsKCkgc2V0cyBlcnJubyBvbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRv
cnMuICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fUE9MTCAqLworCisvKiBEZWZpbmUgaWYgdGhl
IFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW0gKi8KKy8qICN1bmRl
ZiBIQVZFX0JST0tFTl9QT1NJWF9TRU1BUEhPUkVTICovCisKKy8qIERlZmluZSBpZiBwdGhyZWFk
X3NpZ21hc2soKSBkb2VzIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtLiAqLworLyogI3VuZGVmIEhB
VkVfQlJPS0VOX1BUSFJFQURfU0lHTUFTSyAqLworCisvKiBkZWZpbmUgdG8gMSBpZiB5b3VyIHNl
bV9nZXR2YWx1ZSBpcyBicm9rZW4uICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZB
TFVFICovCisKKy8qIERlZmluZSBpZiBgdW5zZXRlbnZgIGRvZXMgbm90IHJldHVybiBhbiBpbnQu
ICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fVU5TRVRFTlYgKi8KKworLyogSGFzIGJ1aWx0aW4g
YXRvbWljcyAqLworI2RlZmluZSBIQVZFX0JVSUxUSU5fQVRPTUlDIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlICdjaGZsYWdzJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZF
X0NIRkxBR1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaG93bicgZnVu
Y3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0hPV04gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdjaHJvb3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NIUk9PVCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2snIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX0NMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9ja19nZXRy
ZXMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NMT0NLX0dFVFJFUyAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgY2xvY2tfc2V0dGltZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0xPQ0tfU0VUVElN
RSAxCisKKy8qIERlZmluZSBpZiB0aGUgQyBjb21waWxlciBzdXBwb3J0cyBjb21wdXRlZCBnb3Rv
cy4gKi8KKyNkZWZpbmUgSEFWRV9DT01QVVRFRF9HT1RPUyAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgY29uZnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ09ORlNU
UiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y29uaW8uaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9DT05JT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgY29weXNpZ24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NPUFlTSUdO
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdC5oPiBoZWFkZXIgZmls
ZS4gKi8KKyNkZWZpbmUgSEFWRV9DUllQVF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSBjcnlwdF9yKCkgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ1JZUFRfUiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3Rlcm1pZCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfQ1RFUk1JRCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2N0ZXJtaWRfcicg
ZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DVEVSTUlEX1IgKi8KKworLyogRGVmaW5lIGlm
IHlvdSBoYXZlIHRoZSAnZmlsdGVyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNf
RklMVEVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjdXJzZXMuaD4gaGVh
ZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQ1VSU0VTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91
IGhhdmUgdGhlICdoYXNfa2V5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfSEFT
X0tFWSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ltbWVkb2snIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX0NVUlNFU19JTU1FRE9LIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZl
IHRoZSAnaXNfcGFkJyBmdW5jdGlvbiBvciBtYWNyby4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNf
SVNfUEFEIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaXNfdGVybV9yZXNpemVkJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfSVNfVEVSTV9SRVNJWkVEIDEKKworLyog
RGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXpldGVybScgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdy
ZXNpemVfdGVybScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ1VSU0VTX1JFU0laRV9URVJN
IDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc3luY29rJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9DVVJTRVNfU1lOQ09LIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAn
dHlwZWFoZWFkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfVFlQRUFIRUFEIDEK
KworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndXNlX2VudicgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfQ1VSU0VTX1VTRV9FTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3
Y2hnYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NVUlNFU19XQ0hHQVQgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGlzZmluaXRlJywgYW5k
IHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0lTRklOSVRFIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBpc2luZics
IGFuZCB0byAwIGlmIHlvdSBkb24ndC4KKyAgICovCisjZGVmaW5lIEhBVkVfREVDTF9JU0lORiAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgaXNuYW4n
LCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCisgICAqLworI2RlZmluZSBIQVZFX0RFQ0xfSVNOQU4g
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERf
REVFUEJJTkQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RF
Q0xfUlRMRF9ERUVQQklORCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNs
YXJhdGlvbiBvZiBgUlRMRF9HTE9CQUwnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLwor
I2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9HTE9CQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTEFaWScsIGFuZCB0byAwIGlmIHlvdQorICAg
ZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9SVExEX0xBWlkgMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTE9DQUwnLCBhbmQgdG8gMCBp
ZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9MT0NBTCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9NRU1CRVIn
LCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9N
RU1CRVIgMAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2Yg
YFJUTERfTk9ERUxFVEUnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBI
QVZFX0RFQ0xfUlRMRF9OT0RFTEVURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9OT0xPQUQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0
LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9OT0xPQUQgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTk9XJywgYW5kIHRvIDAgaWYgeW91
CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1JUTERfTk9XIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB0em5hbWUnLCBhbmQgdG8gMCBp
ZiB5b3UgZG9uJ3QuCisgICAqLworLyogI3VuZGVmIEhBVkVfREVDTF9UWk5BTUUgKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRldmljZSBtYWNyb3MuICovCisjZGVmaW5lIEhB
VkVfREVWSUNFX01BQ1JPUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAvZGV2
L3B0YyBkZXZpY2UgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0RFVl9QVEMgKi8KKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIC9kZXYvcHRteCBkZXZpY2UgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9ERVZfUFRNWCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGly
ZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfRElSRUNUX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgdGhlIGRpcmVudCBzdHJ1Y3R1cmUgaGFzIGEgZF90eXBlIGZpZWxkICov
CisjZGVmaW5lIEhBVkVfRElSRU5UX0RfVFlQRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAg
ICovCisjZGVmaW5lIEhBVkVfRElSRU5UX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhl
ICdkaXJmZCcgZnVuY3Rpb24gb3IgbWFjcm8uICovCisjZGVmaW5lIEhBVkVfRElSRkQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwor
I2RlZmluZSBIQVZFX0RMRkNOX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGRsb3BlbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRExPUEVOIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9E
VVAyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAzJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9EVVAzIDEKKworLyogRGVmaW5lZCB3aGVuIGFueSBkeW5hbWljIG1v
ZHVsZSBsb2FkaW5nIGlzIGVuYWJsZWQuICovCisjZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FESU5H
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlbmRpYW4uaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdlcG9sbCcgZnVuY3Rpb25zLiAqLworI2RlZmluZSBIQVZFX0VQT0xMIDEKKworLyogRGVm
aW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGxfY3JlYXRlMScgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfRVBPTExfQ1JFQVRFMSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZXJmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FUkYgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGVyZmMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0VSRkMgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAq
LworI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGV4ZWN2JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FWEVDViAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhwbTEnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0VYUE0xIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmYWNjZXNzYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZBQ0NFU1NBVCAxCisKKy8qIERlZmluZSBpZiB5b3Ug
aGF2ZSB0aGUgJ2ZjaGRpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNIRElSIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2htb2QnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0ZDSE1PRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNo
bW9kYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDSE1PREFUIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2hvd24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0ZDSE9XTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNob3duYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDSE9XTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05U
TF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZmRhdGFzeW5jJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9GREFUQVNZTkMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGZkb3BlbmRpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkRPUEVORElSIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZXhlY3ZlJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GRVhFQ1ZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBmaW5pdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZJTklURSAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmxvY2snIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0ZMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9GT1JLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBmb3JrcHR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GT1JLUFRZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcGF0aGNvbmYnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0ZQQVRIQ09ORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZnNlZWs2NCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GU0VFSzY0ICovCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnNlZWtvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9GU0VFS08gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZzdGF0YXQn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZTVEFUQVQgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGZzdGF0dmZzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GU1RB
VFZGUyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZzeW5jJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GU1lOQyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZnRlbGw2NCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GVEVMTDY0ICovCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRlbGxvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9GVEVMTE8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ0aW1lJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgZnRydW5jYXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVFJVTkNB
VEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1dGltZW5zJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9GVVRJTUVOUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgZnV0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRlVUSU1FUyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnV0aW1lc2F0JyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GVVRJTUVTQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGdhaV9zdHJlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0FJX1NUUkVSUk9S
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnYW1tYScgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfR0FNTUEgMQorCisvKiBEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5s
aW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCBtYzY4ODgxIGZwY3IgKi8KKy8qICN1bmRlZiBI
QVZFX0dDQ19BU01fRk9SX01DNjg4ODEgKi8KKworLyogRGVmaW5lIGlmIHdlIGNhbiB1c2UgeDY0
IGdjYyBpbmxpbmUgYXNzZW1ibGVyICovCisjZGVmaW5lIEhBVkVfR0NDX0FTTV9GT1JfWDY0IDEK
KworLyogRGVmaW5lIGlmIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFu
ZCBzZXQgeDg3IGNvbnRyb2wgd29yZAorICAgKi8KKyNkZWZpbmUgSEFWRV9HQ0NfQVNNX0ZPUl9Y
ODcgMQorCisvKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBwcm92aWRlcyBfX3VpbnQxMjhfdCAq
LworI2RlZmluZSBIQVZFX0dDQ19VSU5UMTI4X1QgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlIGdldGFkZHJpbmZvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEK
KworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQo
KSwgYW5kIGZ1bmxvY2tmaWxlKCkgKi8KKyNkZWZpbmUgSEFWRV9HRVRDX1VOTE9DS0VEIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRlbnRyb3B5JyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9HRVRFTlRST1BZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBnZXRncm91cGxpc3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEdST1VQTElT
VCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Z3JvdXBzJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRHUk9VUFMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYGdldGhvc3RieW5hbWUnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfR0VU
SE9TVEJZTkFNRSAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBzb21lIHZlcnNpb24g
b2YgZ2V0aG9zdGJ5bmFtZV9yKCkgKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMQor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgMy1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX0FSRyAqLwor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNS1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81X0FSRyAqLwor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNi1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNl9BUkcgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGl0aW1lcicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfR0VUSVRJTUVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRsb2FkYXZnJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRMT0FEQVZHIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRsb2dpbicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfR0VUTE9HSU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGdldG5hbWVpbmZvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisK
Ky8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2dldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0cGVlcm5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBFRVJOQU1FIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwZ2lkJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9HRVRQR0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRwZ3JwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQR1JQIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX0dFVFBJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHJpb3Jp
dHknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBSSU9SSVRZIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwd2VudCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfR0VUUFdFTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0cmFuZG9tKCkgZnVuY3Rp
b24gaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEhBVkVfR0VUUkFORE9NIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgYXZhaWxhYmxlICovCisj
ZGVmaW5lIEhBVkVfR0VUUkFORE9NX1NZU0NBTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYGdldHJlc2dpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUkVTR0lE
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRyZXN1aWQnIGZ1bmN0aW9u
LiAqLworI2RlZmluZSBIQVZFX0dFVFJFU1VJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgZ2V0c2lkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRTSUQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNwZW50JyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9HRVRTUEVOVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
Z2V0c3BuYW0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFNQTkFNIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0d2QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFdEIDEKKworLyogRGVmaW5l
IGlmIGdsaWJjIGhhcyBpbmNvcnJlY3QgX0ZPUlRJRllfU09VUkNFIHdyYXBwZXJzIGZvciBtZW1t
b3ZlIGFuZAorICAgYmNvcHkuICovCisvKiAjdW5kZWYgSEFWRV9HTElCQ19NRU1NT1ZFX0JVRyAq
LworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdycC5oPiBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9HUlBfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2hz
dHJlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSFNUUkVSUk9SIDEKKworLyogRGVm
aW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpICovCisjZGVmaW5lIEhBVkVfSFRPTEU2NCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaHlwb3QnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX0hZUE9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxp
ZWVlZnAuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9JRUVFRlBfSCAqLworCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfSUZfTkFNRUlOREVYIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSAnaW5ldF9hdG9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FUT04gMQorCisv
KiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbmV0X3B0b24nIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX0lORVRfUFRPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5p
dGdyb3VwcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU5JVEdST1VQUyAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9JT19IICovCisKKy8qIERl
ZmluZSBpZiBnY2MgaGFzIHRoZSBpcGEtcHVyZS1jb25zdCBidWcuICovCisvKiAjdW5kZWYgSEFW
RV9JUEFfUFVSRV9DT05TVF9CVUcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBraWxsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9LSUxMIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBraWxscGcnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0tJ
TExQRyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2txdWV1ZScgZnVuY3Rpb25zLiAq
LworLyogI3VuZGVmIEhBVkVfS1FVRVVFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8bGFuZ2luZm8uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTEFOR0lORk9f
SCAxCisKKy8qIERlZmluZWQgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCB3aGVuIGFuIG9m
Zl90IGlzIGJpZ2dlciB0aGFuIGEgbG9uZworICAgYW5kIGxvbmcgbG9uZyBpcyBhdmFpbGFibGUg
YW5kIGF0IGxlYXN0IGFzIGJpZyBhcyBhbiBvZmZfdC4gWW91IG1heSBuZWVkIHRvCisgICBhZGQg
c29tZSBmbGFncyBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29tcGlsYXRpb24gdG8gZW5hYmxlIHRo
aXMgbW9kZS4gKEZvcgorICAgU29sYXJpcyBhbmQgTGludXgsIHRoZSBuZWNlc3NhcnkgZGVmaW5l
cyBhcmUgYWxyZWFkeSBkZWZpbmVkLikgKi8KKy8qICN1bmRlZiBIQVZFX0xBUkdFRklMRV9TVVBQ
T1JUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAnbGNoZmxhZ3MnIGZ1bmN0
aW9uLiAqLworLyogI3VuZGVmIEhBVkVfTENIRkxBR1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBsY2htb2QnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfTENITU9E
ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGNob3duJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9MQ0hPV04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGxnYW1tYScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTEdBTU1BIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCisjZGVmaW5l
IEhBVkVfTElCREwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsZCcgbGli
cmFyeSAoLWxkbGQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCRExEICovCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgaWVlZScgbGlicmFyeSAoLWxpZWVlKS4gKi8KKy8qICN1bmRl
ZiBIQVZFX0xJQklFRUUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJp
bnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJQklOVExfSCAxCisKKy8qIERl
ZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVhZGxpbmUgbGlicmFyeSAoLWxyZWFkbGluZSkuICovCisv
KiAjdW5kZWYgSEFWRV9MSUJSRUFETElORSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHJlc29sdicgbGlicmFyeSAoLWxyZXNvbHYpLiAqLworLyogI3VuZGVmIEhBVkVfTElC
UkVTT0xWICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VuZGZpbGUnIGxp
YnJhcnkgKC1sc2VuZGZpbGUpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU0VOREZJTEUgKi8KKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJ1dGlsLmg+IGhlYWRlciBmaWxlLiAq
LworLyogI3VuZGVmIEhBVkVfTElCVVRJTF9IICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0
aGUgJ2xpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xJTksgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpbmthdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
TElOS0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9jYW4vYmNt
Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9CQ01fSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuLmg+IGhlYWRlciBmaWxlLiAq
LworI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9IIDEKKworLyogRGVmaW5lIGlmIGNvbXBpbGluZyB1
c2luZyBMaW51eCAzLjYgb3IgbGF0ZXIuICovCisjZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19G
RF9GUkFNRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi9y
YXcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19IIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5rLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX05FVExJTktfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8bGludXgvcmFuZG9tLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmlu
ZSBIQVZFX0xJTlVYX1JBTkRPTV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxsaW51eC90aXBjLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX1RJUENf
SCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvdm1fc29ja2V0cy5o
PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0ggMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2tmJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9MT0NLRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMXAn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xPRzFQIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBsb2cyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MT0cyIDEKKwor
LyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBkb3VibGUuICovCisjZGVm
aW5lIEhBVkVfTE9OR19ET1VCTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGxzdGF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MU1RBVCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgbHV0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
TFVUSU1FUyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBtYWtlZGV2IG1hY3Jv
LiAqLworI2RlZmluZSBIQVZFX01BS0VERVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYG1icnRvd2MnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01CUlRPV0MgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8K
KyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgbWVtcmNocicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTUVNUkNIUiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtkaXJhdCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfTUtESVJBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtmaWZv
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS0ZJRk8gMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYG1rZmlmb2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS0ZJ
Rk9BVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtub2QnIGZ1bmN0aW9u
LiAqLworI2RlZmluZSBIQVZFX01LTk9EIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBta25vZGF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS05PREFUIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta3RpbWUnIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX01LVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcg
ZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTU1BUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgbXJlbWFwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfTkNVUlNFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxuZGlyLmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4gKi8KKy8q
ICN1bmRlZiBIQVZFX05ESVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PG5ldHBhY2tldC9wYWNrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUUEFD
S0VUX1BBQ0tFVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYu
aD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5pY2UnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX05J
Q0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW5hdCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfT1BFTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBvcGVucHR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOUFRZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwYXRoY29uZicgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfUEFUSENPTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBh
dXNlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QQVVTRSAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BJUEUy
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwbG9jaycgZnVuY3Rpb24uICov
CisvKiAjdW5kZWYgSEFWRV9QTE9DSyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHBvbGwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BPTEwgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWR2
aXNlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9GQURWSVNFIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWxsb2NhdGUnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX1BPU0lYX0ZBTExPQ0FURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgcG9zaXhfc3Bhd24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BPU0lYX1NQ
QVdOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfUFJFQUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHByZWFkdicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFJFQURWIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZHYyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9QUkVBRFYyIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVu
Y3Rpb25zLiAqLworI2RlZmluZSBIQVZFX1BSTElNSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9Q
Uk9DRVNTX0ggKi8KKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rp
b24gcHJvdG90eXBlICovCisjZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxCisKKy8qIERlZmluZWQg
Zm9yIFNvbGFyaXMgMi42IGJ1ZyBpbiBwdGhyZWFkIGhlYWRlci4gKi8KKy8qICN1bmRlZiBIQVZF
X1BUSFJFQURfREVTVFJVQ1RPUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFRIUkVB
RF9HRVRDUFVDTE9DS0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdGhy
ZWFkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHRocmVhZF9pbml0JyBmdW5jdGlvbi4gKi8KKy8q
ICN1bmRlZiBIQVZFX1BUSFJFQURfSU5JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHB0aHJlYWRfa2lsbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFRIUkVBRF9L
SUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkX3NpZ21hc2sn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfU0lHTUFTSyAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX1BUWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXRlbnYnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BVVEVOViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgcHdyaXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QV1JJVEUgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB3cml0ZXYnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX1BXUklURVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHB3cml0ZXYyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QV1JJVEVWMiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGxpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX1JFQURMSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFk
bGlua2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUFETElOS0FUIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkdicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfUkVBRFYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWxwYXRoJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUFMUEFUSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFTkFN
RUFUIDEKKworLyogRGVmaW5lIGlmIHJlYWRsaW5lIHN1cHBvcnRzIGFwcGVuZF9oaXN0b3J5ICov
CisvKiAjdW5kZWYgSEFWRV9STF9BUFBFTkRfSElTVE9SWSAqLworCisvKiBEZWZpbmUgaWYgeW91
IGNhbiB0dXJuIG9mZiByZWFkbGluZSdzIHNpZ25hbCBoYW5kbGluZy4gKi8KKy8qICN1bmRlZiBI
QVZFX1JMX0NBVENIX1NJR05BTCAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUg
Mi4yICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX0FQUEVORF9DSEFSQUNURVIgKi8K
KworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHJlYWRsaW5lIDQuMCAqLworLyogI3VuZGVmIEhBVkVf
UkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSyAqLworCisvKiBEZWZpbmUgaWYgeW91
IGhhdmUgcmVhZGxpbmUgNC4yICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX01BVENI
RVMgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHJsX2NvbXBsZXRpb25fc3VwcHJlc3NfYXBw
ZW5kICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX1NVUFBSRVNTX0FQUEVORCAqLwor
CisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4wICovCisvKiAjdW5kZWYgSEFWRV9S
TF9QUkVfSU5QVVRfSE9PSyAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4w
ICovCisvKiAjdW5kZWYgSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwgKi8KKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGByb3VuZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUk9V
TkQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX2dldF9wcmlvcml0
eV9tYXgnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0dFVF9QUklPUklUWV9NQVgg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNjaGVkLmg+IGhlYWRlciBmaWxl
LiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNjaGVkX3JyX2dldF9pbnRlcnZhbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0NIRURfUlJfR0VUX0lOVEVSVkFMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBzY2hlZF9zZXRhZmZpbml0eScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0NIRURfU0VU
QUZGSU5JVFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHBh
cmFtJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TQ0hFRF9TRVRQQVJBTSAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2NoZWRfc2V0c2NoZWR1bGVyJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHNlbV9nZXR2YWx1ZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0VNX0dFVFZBTFVFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW1fb3Bl
bicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VNX09QRU4gMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHNlbV90aW1lZHdhaXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX1NFTV9USU1FRFdBSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
bV91bmxpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTV9VTkxJTksgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbmRmaWxlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TRU5ERklMRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0
ZWdpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VURUdJRCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZXVpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0VURVVJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0Z2lkJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRHSUQgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdzZXRncm91cHMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVEdST1VQUyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0aG9zdG5hbWUnIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX1NFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBzZXRpdGltZXInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVElUSU1FUiAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNldHBnaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFBHSUQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHBncnAnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NFVFBHUlAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
dHByaW9yaXR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRQUklPUklUWSAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NFVFJFR0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBz
ZXRyZXNnaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFJFU0dJRCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TRVRSRVNVSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
dHJldWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRSRVVJRCAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0c2lkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFW
RV9TRVRTSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHVpZCcgZnVu
Y3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUVUlEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBzZXR2YnVmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaGFkb3cuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU0hBRE9XX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdhbHRzdGFjaycgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfU0lHQUxUU1RBQ0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgc2lf
YmFuZCcgaXMgYSBtZW1iZXIgb2YgYHNpZ2luZm9fdCcuICovCisjZGVmaW5lIEhBVkVfU0lHSU5G
T19UX1NJX0JBTkQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2ludGVy
cnVwdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm
aW5lIEhBVkVfU0lHTkFMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNp
Z3BlbmRpbmcnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NJR1BFTkRJTkcgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3JlbHNlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TSUdSRUxTRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2ln
dGltZWR3YWl0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdUSU1FRFdBSVQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3dhaXQnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NJR1dBSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNp
Z3dhaXRpbmZvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdXQUlUSU5GTyAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NOUFJJTlRGIDEKKworLyogc3RydWN0IHNvY2thZGRyX2FsZyAobGludXgvaWZf
YWxnLmgpICovCisjZGVmaW5lIEhBVkVfU09DS0FERFJfQUxHIDEKKworLyogRGVmaW5lIGlmIHNv
Y2thZGRyIGhhcyBzYV9sZW4gbWVtYmVyICovCisvKiAjdW5kZWYgSEFWRV9TT0NLQUREUl9TQV9M
RU4gKi8KKworLyogc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKHN5cy9zb2NrZXQuaCkgKi8KKyNk
ZWZpbmUgSEFWRV9TT0NLQUREUl9TVE9SQUdFIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSAnc29ja2V0cGFpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU09DS0VUUEFJUiAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Bhd24uaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1BBV05fSCAxCisKKy8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHBy
b3ZpZGVzIHNzaXplX3QgKi8KKyNkZWZpbmUgSEFWRV9TU0laRV9UIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0dmZzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9T
VEFUVkZTIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHN0cnVjdCBzdGF0LnN0X210aW0udHZf
bnNlYyAqLworI2RlZmluZSBIQVZFX1NUQVRfVFZfTlNFQyAxCisKKy8qIERlZmluZSBpZiB5b3Ug
aGF2ZSBzdHJ1Y3Qgc3RhdC5zdF9tdGltZW5zZWMgKi8KKy8qICN1bmRlZiBIQVZFX1NUQVRfVFZf
TlNFQzIgKi8KKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgdmFyaWFibGUg
bGVuZ3RoIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGUuZy4KKyAgIHZvaWQgZnByaW50ZihGSUxFICos
IGNoYXIgKiwgLi4uKTspICphbmQqIDxzdGRhcmcuaD4gKi8KKyNkZWZpbmUgSEFWRV9TVERBUkdf
UFJPVE9UWVBFUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfU1RETElCX0ggMQorCisvKiBIYXMgc3RkYXRvbWljLmggd2l0aCBhdG9taWNfaW50ICovCisj
ZGVmaW5lIEhBVkVfU1REX0FUT01JQyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmZ0aW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9TVFJGVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5n
cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3Ry
bGNweScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJMQ1BZICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Ryb3B0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVFJPUFRTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgcHdfZ2Vjb3MnIGlzIGEg
bWVtYmVyIG9mIGBzdHJ1Y3QgcGFzc3dkJy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUEFTU1dE
X1BXX0dFQ09TIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHB3X3Bhc3N3ZCcgaXMgYSBtZW1iZXIg
b2YgYHN0cnVjdCBwYXNzd2QnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9QQVNTV0RfUFdfUEFT
U1dEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHN0X2JpcnRodGltZScgaXMgYSBtZW1iZXIgb2Yg
YHN0cnVjdCBzdGF0Jy4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElN
RSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RfYmxrc2l6ZScgaXMgYSBtZW1iZXIgb2YgYHN0
cnVjdCBzdGF0Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgYHN0X2Jsb2NrcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0
Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiBgc3RfZmxhZ3MnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCisvKiAj
dW5kZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9GTEFHUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBg
c3RfZ2VuJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworLyogI3VuZGVmIEhBVkVf
U1RSVUNUX1NUQVRfU1RfR0VOICovCisKKy8qIERlZmluZSB0byAxIGlmIGBzdF9yZGV2JyBpcyBh
IG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NU
X1JERVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdG1fem9uZScgaXMgYSBtZW1iZXIgb2YgYHN0
cnVjdCB0bScuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUgMQorCisvKiBEZWZp
bmUgaWYgeW91IGhhdmUgdGhlICdzeW1saW5rJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9T
WU1MSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW1saW5rYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NZTUxJTktBVCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgc3luYycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1lOQyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3lzY29uZicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfU1lTQ09ORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3lzZXhpdHMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTRVhJVFNfSCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2F1ZGlvaW8uaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfQVVESU9JT19IICovCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL2JzZHR0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRl
ZiBIQVZFX1NZU19CU0RUVFlfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHN5cy9kZXZwb2xsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0RFVlBP
TExfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9kaXIuaD4gaGVh
ZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgorICAgKi8KKy8qICN1bmRlZiBIQVZFX1NZ
U19ESVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lbmRpYW4u
aD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfRU5ESUFOX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZXBvbGwuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1lTX0VQT0xMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy9ldmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19F
VkVOVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4g
aGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmlu
ZSBIQVZFX1NZU19JT0NUTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
eXMva2Vybl9jb250cm9sLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0tF
Uk5fQ09OVFJPTF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2xv
YWRhdmcuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTE9BREFWR19IICov
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2xvY2suaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTE9DS19IICovCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL21rZGV2Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhB
VkVfU1lTX01LREVWX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv
bW9kZW0uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTU9ERU1fSCAqLwor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9uZGlyLmg+IGhlYWRlciBmaWxl
LCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAgICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTkRJUl9I
ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRl
ciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmFu
ZG9tLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19SQU5ET01fSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxl
LiAqLworI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZF
X1NZU19TRUxFQ1RfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Nl
bmRmaWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TRU5ERklMRV9IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL3N0YXR2ZnMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfU1lTX1NUQVRWRlNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lz
L3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N5c2NhbGwuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1lTX1NZU0NBTExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8c3lzL3N5c21hY3Jvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfU1lTTUFDUk9TX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5
cy9zeXNfZG9tYWluLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1NZU19E
T01BSU5fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90ZXJtaW8u
aD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfVEVSTUlPX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1F
X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfVUlPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5o
PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVU5fSCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm
aW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3hhdHRyLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19YQVRUUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGB0Y2dldHBncnAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RDR0VU
UEdSUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGNzZXRwZ3JwJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9UQ1NFVFBHUlAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgYHRlbXBuYW0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RFTVBOQU0g
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDx0ZXJtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RFUk1fSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGdhbW1hJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9UR0FNTUEgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHRpbWVnbScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVElNRUdNIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
VElNRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRtcGZpbGUnIGZ1bmN0
aW9uLiAqLworI2RlZmluZSBIQVZFX1RNUEZJTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHRtcG5hbScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVE1QTkFNIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0bXBuYW1fcicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfVE1QTkFNX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIGBzdHJ1Y3Qg
dG0nIGhhcyBgdG1fem9uZScuIERlcHJlY2F0ZWQsIHVzZQorICAgYEhBVkVfU1RSVUNUX1RNX1RN
X1pPTkUnIGluc3RlYWQuICovCisjZGVmaW5lIEhBVkVfVE1fWk9ORSAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X1RSVU5DQVRFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGRvbid0IGhhdmUgYHRtX3pvbmUn
IGJ1dCBkbyBoYXZlIHRoZSBleHRlcm5hbCBhcnJheQorICAgYHR6bmFtZScuICovCisvKiAjdW5k
ZWYgSEFWRV9UWk5BTUUgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGNsIGFuZCBU
Q0xfVVRGX01BWD09NiAqLworLyogI3VuZGVmIEhBVkVfVUNTNF9UQ0wgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
VU5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgdW5saW5rYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOTElO
S0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bnNldGVudicgZnVuY3Rp
b24uICovCisjZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
YSB1c2VhYmxlIHdjaGFyX3QgdHlwZSBkZWZpbmVkIGluIHdjaGFyLmg7IHVzZWFibGUgbWVhbnMK
KyAgIHdjaGFyX3QgbXVzdCBiZSBhbiB1bnNpZ25lZCB0eXBlIHdpdGggYXQgbGVhc3QgMTYgYml0
cy4gKHNlZQorICAgSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgpLiAqLworLyogI3VuZGVmIEhBVkVf
VVNBQkxFX1dDSEFSX1QgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dGls
Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVRJTF9IICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRpbWVuc2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9VVElNRU5TQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1l
cycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVVRJTUVTIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9V
VElNRV9IIDEKKworLyogRGVmaW5lIGlmIHV1aWRfY3JlYXRlKCkgZXhpc3RzLiAqLworLyogI3Vu
ZGVmIEhBVkVfVVVJRF9DUkVBVEUgKi8KKworLyogRGVmaW5lIGlmIHV1aWRfZW5jX2JlKCkgZXhp
c3RzLiAqLworLyogI3VuZGVmIEhBVkVfVVVJRF9FTkNfQkUgKi8KKworLyogRGVmaW5lIGlmIHV1
aWRfZ2VuZXJhdGVfdGltZV9zYWZlKCkgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1VVSURfR0VO
RVJBVEVfVElNRV9TQUZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dWlk
Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVVJRF9IICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXVpZC91dWlkLmg+IGhlYWRlciBmaWxlLiAqLworI2Rl
ZmluZSBIQVZFX1VVSURfVVVJRF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGB3YWl0MycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV0FJVDMgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdhaXQ0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9X
QUlUNCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdGlkJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9XQUlUSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHdhaXRwaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dBSVRQSUQgMQorCisv
KiBEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIGEgd2NoYXIuaCBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGB3Y3Njb2xsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XQ1NDT0xMIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3NmdGltZScgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfV0NTRlRJTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdj
c3hmcm0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dDU1hGUk0gMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdtZW1jbXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X1dNRU1DTVAgMQorCisvKiBEZWZpbmUgaWYgdHpzZXQoKSBhY3R1YWxseSBzd2l0Y2hlcyB0aGUg
bG9jYWwgdGltZXpvbmUgaW4gYSBtZWFuaW5nZnVsIHdheS4KKyAgICovCisjZGVmaW5lIEhBVkVf
V09SS0lOR19UWlNFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd3JpdGV2
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XUklURVYgMQorCisvKiBEZWZpbmUgaWYgbGli
c3NsIGhhcyBYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3QgYW5kIHJlbGF0ZWQgZnVuY3Rpb24g
Ki8KKyNkZWZpbmUgSEFWRV9YNTA5X1ZFUklGWV9QQVJBTV9TRVQxX0hPU1QgMQorCisvKiBEZWZp
bmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHkgKi8KKyNkZWZpbmUgSEFWRV9a
TElCX0NPUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nZXRwdHknIGZ1
bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfX0dFVFBUWSAqLworCisvKiBEZWZpbmUgaWYgbG9n
MXAoLTAuKSBpcyAwLiByYXRoZXIgdGhhbiAtMC4gKi8KKy8qICN1bmRlZiBMT0cxUF9EUk9QU19a
RVJPX1NJR04gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYG1ham9yJywgYG1pbm9yJywgYW5kIGBt
YWtlZGV2JyBhcmUgZGVjbGFyZWQgaW4gPG1rZGV2Lmg+LgorICAgKi8KKy8qICN1bmRlZiBNQUpP
Ul9JTl9NS0RFViAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgbWFqb3InLCBgbWlub3InLCBhbmQg
YG1ha2VkZXYnIGFyZSBkZWNsYXJlZCBpbgorICAgPHN5c21hY3Jvcy5oPi4gKi8KKyNkZWZpbmUg
TUFKT1JfSU5fU1lTTUFDUk9TIDEKKworLyogRGVmaW5lIGlmIG12d2RlbGNoIGluIGN1cnNlcy5o
IGlzIGFuIGV4cHJlc3Npb24uICovCisjZGVmaW5lIE1WV0RFTENIX0lTX0VYUFJFU1NJT04gMQor
CisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFj
a2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKy8qICN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVCAqLwor
CisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisvKiAjdW5k
ZWYgUEFDS0FHRV9OQU1FICovCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJz
aW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qICN1bmRlZiBQQUNLQUdFX1NUUklORyAqLworCisv
KiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICov
CisvKiAjdW5kZWYgUEFDS0FHRV9UQVJOQU1FICovCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBw
YWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisvKiAjdW5kZWYgUEFDS0FHRV9VUkwgKi8KKworLyog
RGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qICN1bmRlZiBQQUNL
QUdFX1ZFUlNJT04gKi8KKworLyogRGVmaW5lIGlmIFBPU0lYIHNlbWFwaG9yZXMgYXJlbid0IGVu
YWJsZWQgb24geW91ciBzeXN0ZW0gKi8KKy8qICN1bmRlZiBQT1NJWF9TRU1BUEhPUkVTX05PVF9F
TkFCTEVEICovCisKKy8qIERlZmluZSBpZiBwdGhyZWFkX2tleV90IGlzIGNvbXBhdGlibGUgd2l0
aCBpbnQuICovCisjZGVmaW5lIFBUSFJFQURfS0VZX1RfSVNfQ09NUEFUSUJMRV9XSVRIX0lOVCAx
CisKKy8qIERlZmluZWQgaWYgUFRIUkVBRF9TQ09QRV9TWVNURU0gc3VwcG9ydGVkLiAqLworI2Rl
ZmluZSBQVEhSRUFEX1NZU1RFTV9TQ0hFRF9TVVBQT1JURUQgMQorCisvKiBEZWZpbmUgYXMgdGhl
IHByZWZlcnJlZCBzaXplIGluIGJpdHMgb2YgbG9uZyBkaWdpdHMgKi8KKy8qICN1bmRlZiBQWUxP
TkdfQklUU19JTl9ESUdJVCAqLworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gY29lcmNlIHRo
ZSBDIGxvY2FsZSB0byBhIFVURi04IGJhc2VkIGxvY2FsZSAqLworI2RlZmluZSBQWV9DT0VSQ0Vf
Q19MT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gcHJpbnRmIGZvcm1hdCBtb2RpZmllciBmb3IgUHlf
c3NpemVfdCAqLworI2RlZmluZSBQWV9GT1JNQVRfU0laRV9UICJ6IgorCisvKiBEZWZhdWx0IGNp
cGhlciBzdWl0ZXMgbGlzdCBmb3Igc3NsIG1vZHVsZS4gMTogUHl0aG9uJ3MgcHJlZmVycmVkIHNl
bGVjdGlvbiwKKyAgIDI6IGxlYXZlIE9wZW5TU0wgZGVmYXVsdHMgdW50b3VjaGVkLCAwOiBjdXN0
b20gc3RyaW5nICovCisjZGVmaW5lIFBZX1NTTF9ERUZBVUxUX0NJUEhFUlMgMQorCisvKiBDaXBo
ZXIgc3VpdGUgc3RyaW5nIGZvciBQWV9TU0xfREVGQVVMVF9DSVBIRVJTPTAgKi8KKy8qICN1bmRl
ZiBQWV9TU0xfREVGQVVMVF9DSVBIRVJfU1RSSU5HICovCisKKy8qIERlZmluZSBpZiB5b3Ugd2Fu
dCB0byBidWlsZCBhbiBpbnRlcnByZXRlciB3aXRoIG1hbnkgcnVuLXRpbWUgY2hlY2tzLiAqLwor
LyogI3VuZGVmIFB5X0RFQlVHICovCisKKy8qIERlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFz
IGEgc2hhcmVkIGxpYnJhcnkuICovCisvKiAjdW5kZWYgUHlfRU5BQkxFX1NIQVJFRCAqLworCisv
KiBEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcuIFNp
cEhhc2gyNDogMSwgRk5WOiAyLAorICAgZXh0ZXJuYWxseSBkZWZpbmVkOiAwICovCisvKiAjdW5k
ZWYgUHlfSEFTSF9BTEdPUklUSE0gKi8KKworLyogYXNzdW1lIEM4OSBzZW1hbnRpY3MgdGhhdCBS
RVRTSUdUWVBFIGlzIGFsd2F5cyB2b2lkICovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisv
KiBEZWZpbmUgaWYgc2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIHNldHBncnAoMCwgMCkuICov
CisvKiAjdW5kZWYgU0VUUEdSUF9IQVZFX0FSRyAqLworCisvKiBEZWZpbmUgaWYgaT4+aiBmb3Ig
c2lnbmVkIGludCBpIGRvZXMgbm90IGV4dGVuZCB0aGUgc2lnbiBiaXQgd2hlbiBpIDwgMCAqLwor
LyogI3VuZGVmIFNJR05FRF9SSUdIVF9TSElGVF9aRVJPX0ZJTExTICovCisKKy8qIFRoZSBzaXpl
IG9mIGBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9E
T1VCTEUgOAorCisvKiBUaGUgc2l6ZSBvZiBgZmxvYXQnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9GTE9BVCA0CisKKy8qIFRoZSBzaXplIG9mIGBmcG9zX3QnLCBh
cyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9GUE9TX1QgMTYKKworLyog
VGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0la
RU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9m
LiAqLworI2RlZmluZSBTSVpFT0ZfTE9ORyA4CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGRvdWJs
ZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxF
IDE2CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorCisvKiBUaGUgc2l6ZSBvZiBgb2ZmX3Qn
LCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9PRkZfVCA4CisKKy8q
IFRoZSBzaXplIG9mIGBwaWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUg
U0laRU9GX1BJRF9UIDQKKworLyogVGhlIHNpemUgb2YgYHB0aHJlYWRfa2V5X3QnLCBhcyBjb21w
dXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX0tFWV9UIDQKKworLyog
VGhlIHNpemUgb2YgYHB0aHJlYWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZp
bmUgU0laRU9GX1BUSFJFQURfVCA4CisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1
dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NIT1JUIDIKKworLyogVGhlIHNpemUg
b2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NJ
WkVfVCA4CisKKy8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9USU1FX1QgOAorCisvKiBUaGUgc2l6ZSBvZiBgdWludHB0cl90
JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVUlOVFBUUl9UIDgK
KworLyogVGhlIHNpemUgb2YgYHZvaWQgKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNk
ZWZpbmUgU0laRU9GX1ZPSURfUCA4CisKKy8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29t
cHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCA0CisKKy8qIFRoZSBz
aXplIG9mIGBfQm9vbCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9G
X19CT09MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIg
ZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSBpZiB5b3UgY2Fu
IHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy9zZWxlY3QuaD4gYW5kIDxzeXMvdGltZS5oPgorICAg
KHdoaWNoIHlvdSBjYW4ndCBvbiBTQ08gT0RUIDMuMCkuICovCisjZGVmaW5lIFNZU19TRUxFQ1Rf
V0lUSF9TWVNfVElNRSAxCisKKy8qIERlZmluZSBpZiB0YW5oKC0wLikgaXMgLTAuLCBvciBpZiBw
bGF0Zm9ybSBkb2Vzbid0IGhhdmUgc2lnbmVkIHplcm9zICovCisjZGVmaW5lIFRBTkhfUFJFU0VS
VkVTX1pFUk9fU0lHTiAxCisKKy8qIExpYnJhcnkgbmVlZGVkIGJ5IHRpbWVtb2R1bGUuYzogbGli
cnQgbWF5IGJlIG5lZWRlZCBmb3IgY2xvY2tfZ2V0dGltZSgpICovCisvKiAjdW5kZWYgVElNRU1P
RFVMRV9MSUIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBi
b3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNf
VElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgPHN5cy90aW1lLmg+IGRlY2xhcmVzIGBz
dHJ1Y3QgdG0nLiAqLworLyogI3VuZGVmIFRNX0lOX1NZU19USU1FICovCisKKy8qIERlZmluZSBp
ZiB5b3Ugd2FudCB0byB1c2UgY29tcHV0ZWQgZ290b3MgaW4gY2V2YWwuYy4gKi8KKy8qICN1bmRl
ZiBVU0VfQ09NUFVURURfR09UT1MgKi8KKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMs
IEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyBkZWZpbmUgX0FMTF9TT1VSQ0Ug
MQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUg
dGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIGRlZmluZSBfR05VX1NPVVJDRSAxCisj
ZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNp
Zm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIGRlZmluZSBfUE9TSVhfUFRIUkVBRF9T
RU1BTlRJQ1MgMQorI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAg
Ki8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEKKyNl
bmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5k
ZWYgX19FWFRFTlNJT05TX18KKyMgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyNlbmRpZgorCisK
Ky8qIERlZmluZSBpZiBXSU5ET1cgaW4gY3Vyc2VzLmggb2ZmZXJzIGEgZmllbGQgX2ZsYWdzLiAq
LworI2RlZmluZSBXSU5ET1dfSEFTX0ZMQUdTIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGRv
Y3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLworI2RlZmluZSBXSVRI
X0RPQ19TVFJJTkdTIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgaW4gRFRy
YWNlIHN1cHBvcnQgKi8KKy8qICN1bmRlZiBXSVRIX0RUUkFDRSAqLworCisvKiBEZWZpbmUgaWYg
eW91IHdhbnQgdG8gdXNlIHRoZSBuZXctc3R5bGUgKE9wZW5zdGVwLCBSaGFwc29keSwgTWFjT1Mp
IGR5bmFtaWMKKyAgIGxpbmtlciAoZHlsZCkgaW5zdGVhZCBvZiB0aGUgb2xkLXN0eWxlIChOZXh0
U3RlcCkgZHluYW1pYyBsaW5rZXIgKHJsZCkuCisgICBEeWxkIGlzIG5lY2Vzc2FyeSB0byBzdXBw
b3J0IGZyYW1ld29ya3MuICovCisvKiAjdW5kZWYgV0lUSF9EWUxEICovCisKKy8qIERlZmluZSB0
byAxIGlmIGxpYmludGwgaXMgbmVlZGVkIGZvciBsb2NhbGUgZnVuY3Rpb25zLiAqLworLyogI3Vu
ZGVmIFdJVEhfTElCSU5UTCAqLworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gcHJvZHVjZSBh
biBPcGVuU3RlcC9SaGFwc29keSBmcmFtZXdvcmsgKHNoYXJlZAorICAgbGlicmFyeSBwbHVzIGFj
Y2Vzc29yeSBmaWxlcykuICovCisvKiAjdW5kZWYgV0lUSF9ORVhUX0ZSQU1FV09SSyAqLworCisv
KiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBpbiBQeXRob24tc3BlY2lmaWMgbWFsbG9j
cyAqLworI2RlZmluZSBXSVRIX1BZTUFMTE9DIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHB5
bWFsbG9jIHRvIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCAqLworLyog
I3VuZGVmIFdJVEhfVkFMR1JJTkQgKi8KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAx
IGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZp
Y2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4g
Ki8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9f
QklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNl
CisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAq
LworIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSBpZiBhcml0aG1ldGljIGlzIHN1YmplY3Qg
dG8geDg3LXN0eWxlIGRvdWJsZSByb3VuZGluZyBpc3N1ZSAqLworLyogI3VuZGVmIFg4N19ET1VC
TEVfUk9VTkRJTkcgKi8KKworLyogRGVmaW5lIG9uIE9wZW5CU0QgdG8gYWN0aXZhdGUgYWxsIGxp
YnJhcnkgZmVhdHVyZXMgKi8KKy8qICN1bmRlZiBfQlNEX1NPVVJDRSAqLworCisvKiBEZWZpbmUg
b24gRGFyd2luIHRvIGFjdGl2YXRlIGFsbCBsaWJyYXJ5IGZlYXR1cmVzICovCisjZGVmaW5lIF9E
QVJXSU5fQ19TT1VSQ0UgMQorCisvKiBUaGlzIG11c3QgYmUgc2V0IHRvIDY0IG9uIHNvbWUgc3lz
dGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0LiAqLworI2RlZmluZSBfRklMRV9PRkZT
RVRfQklUUyA2NAorCisvKiBEZWZpbmUgb24gTGludXggdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkg
ZmVhdHVyZXMgKi8KKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorCisvKiBEZWZpbmUgdG8gaW5jbHVk
ZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MgKi8KKy8qICN1bmRlZiBfSU5DTFVERV9fU1REQ19BMV9T
T1VSQ0UgKi8KKworLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gc29tZSBzeXN0ZW1zIHRvIGVu
YWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQuICovCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEK
KworLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gQUlYIHN5c3RlbXMgdG8gZW5hYmxlIGxhcmdl
IGZpbGUgc3VwcG9ydC4gKi8KKy8qICN1bmRlZiBfTEFSR0VfRklMRVMgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgb24gTUlOSVguICovCisvKiAjdW5kZWYgX01JTklYICovCisKKy8qIERlZmluZSBv
biBOZXRCU0QgdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkgZmVhdHVyZXMgKi8KKyNkZWZpbmUgX05F
VEJTRF9TT1VSQ0UgMQorCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHBy
b3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLwor
LyogI3VuZGVmIF9QT1NJWF8xX1NPVVJDRSAqLworCisvKiBEZWZpbmUgdG8gYWN0aXZhdGUgZmVh
dHVyZXMgZnJvbSBJRUVFIFN0ZHMgMTAwMy4xLTIwMDggKi8KKyNkZWZpbmUgX1BPU0lYX0NfU09V
UkNFIDIwMDgwOUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9y
IGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisvKiAjdW5kZWYgX1BPU0lYX1NP
VVJDRSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcywgYW5kIHlvdXIg
c3lzdGVtIGRvZXMgbm90IGRlZmluZSB0aGF0LiAqLworLyogI3VuZGVmIF9QT1NJWF9USFJFQURT
ICovCisKKy8qIGZyYW1ld29yayBuYW1lICovCisjZGVmaW5lIF9QWVRIT05GUkFNRVdPUksgIiIK
KworLyogRGVmaW5lIHRvIGZvcmNlIHVzZSBvZiB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywg
YW5kIG90aGVyIGZ1bmN0aW9ucyAqLworLyogI3VuZGVmIF9SRUVOVFJBTlQgKi8KKworLyogRGVm
aW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cyAqLwor
I2RlZmluZSBfWE9QRU5fU09VUkNFIDcwMAorCisvKiBEZWZpbmUgdG8gYWN0aXZhdGUgVW5peDk1
LWFuZC1lYXJsaWVyIGZlYXR1cmVzICovCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQg
MQorCisvKiBEZWZpbmUgb24gRnJlZUJTRCB0byBhY3RpdmF0ZSBhbGwgbGlicmFyeSBmZWF0dXJl
cyAqLworI2RlZmluZSBfX0JTRF9WSVNJQkxFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdHlwZSBg
Y2hhcicgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCisjaWZuZGVm
IF9fQ0hBUl9VTlNJR05FRF9fCisvKiAjIHVuZGVmIF9fQ0hBUl9VTlNJR05FRF9fICovCisjZW5k
aWYKKworLyogRGVmaW5lIHRvICdsb25nJyBpZiA8dGltZS5oPiBkb2Vzbid0IGRlZmluZS4gKi8K
Ky8qICN1bmRlZiBjbG9ja190ICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRv
ZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIERl
ZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3Vu
ZGVmIGdpZF90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMg
bm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBtb2RlX3QgKi8KKworLyogRGVmaW5lIHRvIGBsb25n
IGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgb2Zm
X3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVm
aW5lLiAqLworLyogI3VuZGVmIHBpZF90ICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiB0aGUg
a2V5d29yZCBkb2VzIG5vdCB3b3JrLiAqLworLyogI3VuZGVmIHNpZ25lZCAqLworCisvKiBEZWZp
bmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICov
CisvKiAjdW5kZWYgc2l6ZV90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3NvY2tl
dC5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc29ja2xlbl90ICovCisKKy8qIERl
ZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3Vu
ZGVmIHVpZF90ICovCisKKworLyogRGVmaW5lIHRoZSBtYWNyb3MgbmVlZGVkIGlmIG9uIGEgVW5p
eFdhcmUgNy54IHN5c3RlbS4gKi8KKyNpZiBkZWZpbmVkKF9fVVNMQ19fKSAmJiBkZWZpbmVkKF9f
U0NPX1ZFUlNJT05fXykKKyNkZWZpbmUgU1RSSUNUX1NZU1ZfQ1VSU0VTIC8qIERvbid0IHVzZSBu
Y3Vyc2VzIGV4dGVuc2lvbnMgKi8KKyNlbmRpZgorCisjZW5kaWYgLypQeV9QWUNPTkZJR19IKi8K
KwotLSAKMi4yMC4xCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5q-0003Zj-G3; Fri, 13 Sep 2019 12:54:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5p-0003ZS-N0
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:29 +0000
X-Inumbo-ID: 935437d6-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 935437d6-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:08 +0000 (UTC)
IronPort-SDR: mfMktnhqRRh/cwu+9rhKT+2aIh8tY+2hutccEoZCgBAOPI4djjaZzz/5j7hh7AzZe/+2Z6Pwtn
 h8qtUu+dZJzA==
IronPort-PHdr: =?us-ascii?q?9a23=3AF4xMRxynHGyrDjPXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2ukVIJqq85mqBkHD//Il1AaPAdyAraobwLeL++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMnYdvKKk9xx?=
 =?us-ascii?q?vJr3BVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y6XQds4YS2?=
 =?us-ascii?q?VcRMZcTyxPDJ2hYYUBDOQPOuRXr4fmqlcSsRezHxWgCfnzxjNUgHL9wK000/?=
 =?us-ascii?q?4mEQHDxAEtAdUOsG/IrNX0MqcZTOa7zLTQzTXecvhb3ivy6I/TchA9oPGMW6?=
 =?us-ascii?q?h8cc7MyUk3CgPIlUmfqZf/MzONy+QCqHKX7/BnVe+2jWMstgJ/oiC3y8sxhY?=
 =?us-ascii?q?TFm5gZx1PE+Clj3oo5O9+1RFR1bNK8DZdduDyWO5F1T84iWW1kpig3x7MctZ?=
 =?us-ascii?q?KmcyUG1pIqzAPFZfOdaYiH+BfjWf6UITd/mX1qZqqyhw238Ui80u38UdS00E?=
 =?us-ascii?q?pSoipFjNbMsncN2gTN6siCUPR9/0Oh1SyT2ADI8O1EOV00mrHBJ547xb48jp?=
 =?us-ascii?q?sTsULdES/qgEj6kaCbelg+9uWr6+nreKvqqoGeOoNuhAzyKqEulda+AeQ8PA?=
 =?us-ascii?q?gORW+b+eGk2bL/+k35W6lKjvwwkqXDtJDaONwbprOiDgBJyYYv8Q6/Dyq939?=
 =?us-ascii?q?gCh3kHK0pJeAibgIjxJ1HOPPf4AO+6g1StljdrxvfGPqb4DprQMHfDjqnufb?=
 =?us-ascii?q?Jm5k5YyQoz1sxf54lOBrAOPv3zXFX9tNvCDh82Kwa02froCM1h1oMCXmKCGq?=
 =?us-ascii?q?GZP73WsV+J/uIgPfOAZI8IuDb8N/cl5uXjjXknllABeammx4AYZGqmEfR7O0?=
 =?us-ascii?q?+Ze2bjgs8dEWcWuQozVPLqiFmYXjFOf3m9RaQ86SwhCI24DIfPXJuij6ac0y?=
 =?us-ascii?q?e8H51We3tLCkuQEXf1aoqIQe0DZz6JIsN7jzwETaOuR5U71RGp50fGzO9iL+?=
 =?us-ascii?q?zV/TZduZ/92dxd4+zIiQp05TFyScOH3DKjVWZxy0gPXCM32uhbvFRgggOI1r?=
 =?us-ascii?q?NkgvoeEcFL+ttCSUEiKJSa1essWIO6YR7IYtrcEAXued6hGzxkFt8=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2DSAwC/kHtdXQPjVY1mHQEBBQEHBQG?=
 =?us-ascii?q?BZ4MFUyASKo0dozAJAQEBKREBAgEBhD8CgwM4EwIDCQEBBQEBAQEBBgQBBho?=
 =?us-ascii?q?WBYVfDII6IoJvBnkQPxJDFBmDIgGCDqt9hUuDMIFJgTSHH4YxP4lyhRYElh+?=
 =?us-ascii?q?WKAeCJGQEhhmNaieDJJVmqEY4gXkzGoNfCY4lglw9AQExgQYBAY8gAQE?=
X-IPAS-Result: =?us-ascii?q?A2DSAwC/kHtdXQPjVY1mHQEBBQEHBQGBZ4MFUyASKo0do?=
 =?us-ascii?q?zAJAQEBKREBAgEBhD8CgwM4EwIDCQEBBQEBAQEBBgQBBhoWBYVfDII6IoJvB?=
 =?us-ascii?q?nkQPxJDFBmDIgGCDqt9hUuDMIFJgTSHH4YxP4lyhRYElh+WKAeCJGQEhhmNa?=
 =?us-ascii?q?ieDJJVmqEY4gXkzGoNfCY4lglw9AQExgQYBAY8gAQE?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786346"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id C53DB1A60144;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id h1-SVHJQHZBo; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id AAFC71A60154;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id xmUzxfNNxxye; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 8E2BC1A6014E;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:53 +0300
Message-Id: <20190913125353.972-13-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 12/12] Provide main()
 function if configured to do so
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29tZXRpbWVzIGFsbCB5b3Ugd2FudCB0byBydW4gaXMgdGhlIFB5dGhvbiBzaGVsbC4gSW4gdGhp
cyBjYXNlIHlvdSBjYW4gdGljayB0aGUKb3B0aW9uIGluIG1lbnVjb25maWcgc28gdGhhdCB0aGUg
bGlicmFyeSB0byBwcm92aWRlIHRoZSBtYWluKCkgZnVuY3Rpb24gZm9yIHlvdS4KClNpZ25lZC1v
ZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0tLQogQ29uZmlnLnVr
ICAgfCA0ICsrKysKIE1ha2VmaWxlLnVrIHwgMSArCiBtYWluLmMgICAgICB8IDggKysrKysrKysK
IDMgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1h
aW4uYwoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awppbmRleCAzZGEzZmZiLi44
MGE1NTdhIDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBAIC0zMSw0ICsz
MSw4IEBAIGNvbmZpZyBMSUJQWVRIT04zX1RNUERJUgogCXN0cmluZyAiVGVtcCBkaXJlY3Rvcnkg
bG9jYXRpb24iCiAJZGVmYXVsdCAiL3RtcCIKIAorY29uZmlnIExJQlBZVEhPTjNfTUFJTl9GVU5D
VElPTgorCWJvb2wgIlByb3ZpZGUgbWFpbiBmdW5jdGlvbiIKKwlkZWZhdWx0IG4KKwogZW5kaWYK
ZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggMjdlYWJhNS4uMmU5
YWI1YSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTk4LDYg
Kzk4LDcgQEAgTElCUFlUSE9OM19DWFhJTkNMVURFUy15ICs9ICQoTElCUFlUSE9OM19DT01NT05f
SU5DTFVERVMteSkKIExJQlBZVEhPTjNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19CQVNFKS9pbml0
LmN8dW5pa3JhZnQKIExJQlBZVEhPTjNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19CQVNFKS9tb2R1
bGVzX2NvbmZpZy5jfHVuaWtyYWZ0CiBMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
QkFTRSkvc3R1YnMuY3x1bmlrcmFmdAorTElCUFlUSE9OM19TUkNTLSQoQ09ORklHX0xJQlBZVEhP
TjNfTUFJTl9GVU5DVElPTikgKz0gJChMSUJQWVRIT04zX0JBU0UpL21haW4uY3x1bmlrcmFmdAog
CiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBQeXRob24gY29yZQpkaWZmIC0tZ2l0IGEvbWFp
bi5jIGIvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3OWRmMmMK
LS0tIC9kZXYvbnVsbAorKysgYi9tYWluLmMKQEAgLTAsMCArMSw4IEBACisjZGVmaW5lIFB5X0JV
SUxEX0NPUkUKKyNpbmNsdWRlIDxQeXRob24uaD4KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg
KmFyZ3ZbXSkKK3sKKwlyZXR1cm4gX1B5X1VuaXhNYWluKGFyZ2MsIGFyZ3YpOworfQorCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l5v-0003ae-IB; Fri, 13 Sep 2019 12:54:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5u-0003aR-O1
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:34 +0000
X-Inumbo-ID: 9351f4e4-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 9351f4e4-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:08 +0000 (UTC)
IronPort-SDR: vCeVADOeXRg8OhJK/SxjGx5pNFJnEiaEeSdnHwTO2UcqD3PxvBaLBS+p6qyj/8V1toZlHxilbl
 DqJ6EYJWmEcw==
IronPort-PHdr: =?us-ascii?q?9a23=3A3FXf1RWc07r/SBiOLYf7qva+uLzV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbReEt8tkgFKBZ4jH8fUM07OQ7/m7HzRfqsvc+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvndFeetayGNoKFmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQe3Ce/z1jNFnGP60Lcm3+?=
 =?us-ascii?q?g9FwzNwQwuH8gJsHTRtNj4KqASUfupzKnJyzXIcvVY2Srl6IjVbxsspu2DXb?=
 =?us-ascii?q?VrccrNyEkvERnJjlGNqYz9IjOYzfgCs3OB4+p4SOKgkHQrqxt2ojW2wMonl4?=
 =?us-ascii?q?rHhpoNx1zZ+ih13Zw5KN64RUJhf9KoDplduzuUOoduX88vTHxktDw5x7AGo5?=
 =?us-ascii?q?K3YiYHxZo9yxLCZPGLbY6F6Q/5WumLOzd3nndldaq6hxa17Eev1PXxVtKx0F?=
 =?us-ascii?q?ZWtipFlcTMtmwV2xzT9MeHTvx981+/2TaKzQ/T6+VELVoomqrAMZIh2qMwmY?=
 =?us-ascii?q?EJvUTZGS/6gET2jKmIeUU44uWk9uvqbqj8qpKfN4J4kB/yProsl8ClD+k0Kg?=
 =?us-ascii?q?0OUHKa+eS42r3j50r5QLBSg/IqlanZq4zaJcUdpqKjBw9Vz54j6wukAji6y9?=
 =?us-ascii?q?QUh2EHLE9edx6dlYjpPEnCIOrkAvenn1SsjDBryujDPr3gBJXNL3/DkKz4cb?=
 =?us-ascii?q?lg9UFc1hQ8zdRE6pJQC7EBO+7zWlTruN3XEBA5NRa4w+H9CNVyzokeQ36AAr?=
 =?us-ascii?q?eFMKPOtl+F/uwvLPeIZI8UoDbyNeIp5/7zjX84hVAdfLKk3Z0JZ3+kGvRpOV?=
 =?us-ascii?q?6WbWDyjdccCW0KpBYxTPT2iF2eVj5ef2iyX6Ym6T4mEI2pF4HDSZ23gLOf3S?=
 =?us-ascii?q?e3BIZZaXpbBVCLEHfoap6JW+wQaCKPP8BtiCYLWqS6S4M7yBGurBT1x6B9Lu?=
 =?us-ascii?q?rTqWUkssfm1d504PaWmRws+DhcC8WGz3rLX2xy2GQSSGwYxqd69Gd60UuC1+?=
 =?us-ascii?q?BcnuRFXYhY4OhVUwF8MYPE0sRxEJbqRwiHZNDfGwXuecmvHTxkFoF5+NQJeU?=
 =?us-ascii?q?soQ9g=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CjAgC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBZ4MFUyASKo0dozAJAQEBKREBAgEBhD8CgwM4EwIDCQEBBQEBAQEBBgQ?=
 =?us-ascii?q?BBhoWBYVfDII6IoJvBnkQPxJDFBmDIgGCDqt9hUuDMIFJgTSHH4YxP4N1bIU?=
 =?us-ascii?q?RhHQiBJYfligHgiRkBIYZjWongySVZhmoLTiBeTMag18JgnEYixyCXD0BATG?=
 =?us-ascii?q?BBgEBjyABAQ?=
X-IPAS-Result: =?us-ascii?q?A2CjAgC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBZ4MFUyASK?=
 =?us-ascii?q?o0dozAJAQEBKREBAgEBhD8CgwM4EwIDCQEBBQEBAQEBBgQBBhoWBYVfDII6I?=
 =?us-ascii?q?oJvBnkQPxJDFBmDIgGCDqt9hUuDMIFJgTSHH4YxP4N1bIURhHQiBJYfligHg?=
 =?us-ascii?q?iRkBIYZjWongySVZhmoLTiBeTMag18JgnEYixyCXD0BATGBBgEBjyABAQ?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786345"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B9C8D1A60146;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id H2UGIbrX6YIm; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9E7511A60144;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id tkC37yueMDei; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 7B96E1A60146;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:52 +0300
Message-Id: <20190913125353.972-12-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 11/12] Makefile.uk: Add rule
 for creating root filesystem
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIFB5dGhvbiBpbnRlcnByZXRlciBuZWVkcyBhIGZpbGVzeXN0ZW0gd2hlcmUgdG8ga2VlcCBp
dHMgbGlicmFyaWVzLiBUaGlzCnBhdGNoIGNyZWF0ZXMgYSBQeXRob24gdmlydHVhbCBlbnZpcm9u
bWVudCBhbmQgaW5zdGFsbHMgdGhlIFB5dGhvbiAzIHN0YW5kYXJkCmxpYnJhcnkgaW4gL2xpYi9w
eXRob24zLjcgZGlyZWN0b3J5LiBGb3IgY3JlYXRpbmcgdGhlIGZpbGVzeXN0ZW0gdGhlIGZvbGxv
d2luZwpjb21tYW5kIGhhcyB0byBiZSBydW46CgokIG1ha2UgcHl0aG9uLXJvb3RmcyBwYXRoPTxk
aXJlY3Rvcnk+CgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUg
Y2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFr
ZWZpbGUudWsKaW5kZXggOGZiYzM3Yy4uMjdlYWJhNSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsK
KysrIGIvTWFrZWZpbGUudWsKQEAgLTQ1MCwzICs0NTAsMjQgQEAgTElCUFlUSE9OM19QUkVQQVJF
RF9ERVBTID0gXAogJChMSUJQWVRIT04zX0JVSUxEKS8ucHJlcGFyZWQ6ICQoTElCUFlUSE9OM19Q
UkVQQVJFRF9ERVBTKQogCiBVS19QUkVQQVJFICs9ICQoTElCUFlUSE9OM19CVUlMRCkvLnByZXBh
cmVkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJvb3QgZmlsZXN5c3RlbQorIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKworIyBCdWlsZCByb290IGZpbGVzeXN0ZW0gZm9yIFB5dGhvbiBp
bnRlcnByZXRlcgorUFlUSE9OX1JPT1RGUyA9ICQoQVBQX0JBU0UpLyQocGF0aCkKKworIyBDcmVh
dGUgdmlydHVhbCBlbnZpcm9ubWVudAorJChQWVRIT05fUk9PVEZTKS8ua2VlcDoKKwlweXRob24z
IC1tIHZlbnYgJChQWVRIT05fUk9PVEZTKSAmJiB0b3VjaCAkQAorCisjIENvbmZpZ3VyZSBvcmln
aW4KKyQoTElCUFlUSE9OM19TUkMpL2NvbmZpZy5zdGF0dXM6CisJY2QgJChMSUJQWVRIT04zX1NS
QykgJiYgLi9jb25maWd1cmUgLS1wcmVmaXg9JChzaGVsbCByZWFscGF0aCAkKEFQUF9CQVNFKS8k
KHBhdGgpKQorCisjIEluc3RhbGwgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgaW50byB2aXJ0dWFs
IGVudmlyb25tZW50CisuUEhPTlk6IHB5dGhvbi1yb290ZnMKK3B5dGhvbi1yb290ZnM6ICQoUFlU
SE9OX1JPT1RGUykvLmtlZXAgJChMSUJQWVRIT04zX1NSQykvY29uZmlnLnN0YXR1cworCWNkICQo
TElCUFlUSE9OM19TUkMpICYmIG1ha2UgbGliaW5zdGFsbAorCWNwICQoTElCUFlUSE9OM19CQVNF
KS9fc3lzY29uZmlnZGF0YS5weSAkKFBZVEhPTl9ST09URlMpL2xpYi9weXRob24zLjcvCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l60-0003bM-KL; Fri, 13 Sep 2019 12:54:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l5z-0003bD-NU
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:39 +0000
X-Inumbo-ID: 941bc7a6-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 941bc7a6-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:10 +0000 (UTC)
IronPort-SDR: WXQIcGdLSKvIs3npk8fhSp+4yBjur9vv24rPRdEIrgv2eoeHweL4aKO0CrZPs8Ags/QmXNL1QI
 0mRbV3TjiiIw==
IronPort-PHdr: =?us-ascii?q?9a23=3A/eVkshx746yEJezXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2ugfIJqq85mqBkHD//Il1AaPAdyAraobwLeL++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMnYdvKKk9xx?=
 =?us-ascii?q?vJr3BVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y6XQds4YS2?=
 =?us-ascii?q?VcRMZcTyxPDJ2hYYUBDOQPOv1Vo5Xhq1YUsRezHxWgCP/pxzRVhnH2x6o60+?=
 =?us-ascii?q?E5HAzY2wwgBM4OsHXSrN7oMqkSTPi1zLTVxjjEc/xW3iz96JTJchAnu/2MWa?=
 =?us-ascii?q?9wcdLMyUQ0CwzFlU+cqZT4PzyOzOgNqW+b4vNmWOmyiGAnsxl8riWgy8sxkI?=
 =?us-ascii?q?XEhYIYxkra+Slnwos5P9O1RFZmbdOrDZdcrSKXOotsTs88TWxltjw2xqAJtJ?=
 =?us-ascii?q?KleiUB1Y4pyATFa/OddoiF+hfjVOGMLjhmnH9lY7e/hwqq8Uin1+38StG40F?=
 =?us-ascii?q?ZUoSpBldnBrm4N1xnJ5ciGTvtx5Fuu2S2V2wDL9+FLOlo4lbDcK5I5w74wkI?=
 =?us-ascii?q?QcsVjbEyPrl0j6kbWae0Yk9+Sy9ejrfLfrqoWSOoNsjwHxKKUumsixAeQiNQ?=
 =?us-ascii?q?gOWnCW9vi71L344U35QbNKgucykqnEqJDaON8WqbKiAwNPyoYj9g2wAy280N?=
 =?us-ascii?q?QfhXUHNk5KeAqbj4j1PFHDOPX4Dfa5g1Stlzdr3OnKMaD/DZXTMHfDlKzsfb?=
 =?us-ascii?q?J8605H1Aoz1spT5p1KBbEHOv7zXVXxtNPABB8jLwO02/rnCMl61o4GV2KAHK?=
 =?us-ascii?q?uZMKLKsVCW/O4vI/SMZI4Jtzb8MPUl4eDhgmM9mVAHZqalx4UYaG2gFPR8P0?=
 =?us-ascii?q?qZeWbsgssGEWoSoAo+SPblh0CaXjFJYXa9Qrg86S86CI68FojMXJ2igLuA3C?=
 =?us-ascii?q?emBZBWfXxGCk2RHnvybYqLR+wMZDiPIs95iTMIT6KhS4hynS2p4Qr7zbtgNa?=
 =?us-ascii?q?/Y9zMVsbrn1cNp/KvDmBd08iZ7XOqH1GTYZGZvgmIODxsrxL039Ud60UuC1+?=
 =?us-ascii?q?58nuRFPddIoetUWEEgMsiPnKRBF9nuV1eZLZ+yQ1G8T4D+DA=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CTBAC/kHtdXQPjVY1mHgEGBwaBZ4M?=
 =?us-ascii?q?FUyASKo0dozAJAQEBKREBAgEBhD+DBTgTAgMJAQEFAQEBAQEGBAEGGhYFhV8?=
 =?us-ascii?q?Mgjoig2MLT1WDTwGCDqt9hUuDMIFJgTSHH4YxP4NuhgSFFgSWH5YoB4IkZAS?=
 =?us-ascii?q?GGYUNiF0ngySVZqhGOIF5MxpzgmwJgg4BiCSDcoJcPQEBMYEGAQGPIAEB?=
X-IPAS-Result: =?us-ascii?q?A2CTBAC/kHtdXQPjVY1mHgEGBwaBZ4MFUyASKo0dozAJA?=
 =?us-ascii?q?QEBKREBAgEBhD+DBTgTAgMJAQEFAQEBAQEGBAEGGhYFhV8Mgjoig2MLT1WDT?=
 =?us-ascii?q?wGCDqt9hUuDMIFJgTSHH4YxP4NuhgSFFgSWH5YoB4IkZASGGYUNiF0ngySVZ?=
 =?us-ascii?q?qhGOIF5MxpzgmwJgg4BiCSDcoJcPQEBMYEGAQGPIAEB?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786334"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 221941A60156;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id Z19x8GL9z93h; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 0577A1A6014C;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id xj_mKeIPqnkV; Fri, 13 Sep 2019 15:53:56 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id D8CC61A60144;
 Fri, 13 Sep 2019 15:53:56 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:41 +0300
Message-Id: <20190913125353.972-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 00/12] Port Python 3 on
 Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgYXJlIHRoZSBwYXRjaGVzIG5lZWRlZCBmb3IgcG9ydGluZyBQeXRob24gMyBvbiBVbmlr
cmFmdC4gVG8gcHV0IGl0CnNpbXBsZSwgdGhlIHN1bW1hcnkgd291bGQgc291bmQgbGlrZSB0aGlz
OgotIFRoZSBmaXJzdCAzIHBhdGNoZXMgYXJlIHF1aXRlIGNvbW1vbi4KLSBUaGUgbmV4dCA1IGFk
ZCBhbmQgY3VzdG9taXplIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmVlZGVkIGJ5IHRoZSBQeXRob24K
ICBpbnRlcnByZXRlci4gVGhlc2UgZmlsZXMgYXJlIGNoYW5nZWQgaW4gb3JkZXIgdG8gcnVuIG9u
IFVuaWtyYWZ0LgotIFRoZSBuZXh0IDIgYWRkIGEgYml0IG1vcmUgZ2x1ZSBjb2RlLgotIFRoZSBu
ZXh0IHBhdGNoIGFkZHMgYSBtYWtlIHRhcmdldCBmb3IgY3JlYXRpbmcgUHl0aG9uIGVudmlyb25t
ZW50cyB3aGljaCB3aWxsCiAgYmUgbmVlZGVkIGZvciB0ZXN0aW5nLgotIFRoZSBsYXN0IG9uZSBh
ZGRzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgcnVubmluZyB0aGUgbWFpbigpIGZ1bmN0
aW9uCiAgZnJvbSB0aGUgZXh0ZXJuYWwgbGlicmFyeSwgd2hpY2ggd291bGQgc2ltcGxpZnkgdGhl
IGNyZWF0aW9uIG9mIGFuIGFwcC4KCkJlc2lkZXMgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0sIGFs
bCB0aGUgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHNlbnQgb24KdGhlIG1haWxpbmcg
bGlzdC4KCkNvc3RpbiBMdXB1ICgyKToKICBNYWtlZmlsZS51azogQWRkIHJ1bGUgZm9yIGNyZWF0
aW5nIHJvb3QgZmlsZXN5c3RlbQogIFByb3ZpZGUgbWFpbigpIGZ1bmN0aW9uIGlmIGNvbmZpZ3Vy
ZWQgdG8gZG8gc28KClZsYWQtQW5kcmVpIEJhZG9pdSAoMTApOgogIEludHJvZHVjZSBsaWJyYXJ5
IHNrZWxldG9uCiAgQWRkIE1ha2VmaWxlLnVrCiAgcGF0Y2hlczogRml4IGJ1aWxkIGlzc3Vlcwog
IHB5Y29uZmlnLmg6IEludHJvZHVjZSBmaWxlCiAgcHljb25maWcuaDogRGlzYWJsZSBmZWF0dXJl
cyB0aGF0IGFyZSBub3QgYXZhaWFibGUgb24gVW5pa3JhZnQKICBfc3lzY29uZmlnZGF0YS5weTog
SW50cm9kdWNlIGZpbGUKICBfc3lzY29uZmlnZGF0YS5weTogRGlzYWJsZSBmZWF0dXJlcyB0aGF0
IGFyZSBub3QgYXZhaWFibGUgb24gVW5pa3JhZnQKICBBZGQgbW9kdWxlc19jb25maWcuYwogIEFk
ZCBzdHVicy5jIGZvciBzdHViYmVkIGZ1bmN0aW9ucwogIEFkZCBpbml0LmMgZm9yIGluaXRpYWxp
emF0aW9uCgogLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAyNyArCiBDT0RJTkdfU1RZTEUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICA0ICsKIENPTlRSSUJVVElORy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDQgKwogQ09QWUlORy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz
OSArCiBDb25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM4
ICsKIE1BSU5UQUlORVJTLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIg
KwogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ3NCAr
KysrKwogUkVBRE1FLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
NyArCiBfc3lzY29uZmlnZGF0YS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzA3
ICsrKysrKysrCiBleHBvcnRzeW1zLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICAxICsKIGluY2x1ZGUvcHljb25maWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IDE1ODcgKysrKysrKysrKysrKysrKysKIGluaXQuYyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgNDYgKwogbWFpbi5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgOCArCiBtb2R1bGVzX2NvbmZpZy5jICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMzE1ICsrKysKIC4uLjEtVW5kZWZpbmUtSEFWRV9GT1JLLWFuZC1IQVZF
X0VYRUNWRS5wYXRjaCB8ICAgMjYgKwogcGF0Y2hlcy8wMDAyLUFkZC1jYXN0LWZvci1wdGhyZWFk
X3QucGF0Y2ggICAgIHwgICAzMCArCiBzdHVicy5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDQ1ICsKIDE3IGZpbGVzIGNoYW5nZWQsIDMzNzAgaW5zZXJ0aW9ucygr
KQogY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJ
TkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBDT1BZSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVh
dGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmls
ZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IF9z
eXNjb25maWdkYXRhLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awogY3JlYXRl
IG1vZGUgMTAwNjQ0IGluY2x1ZGUvcHljb25maWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluaXQu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IG1haW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZXNf
Y29uZmlnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDEtVW5kZWZpbmUtSEFWRV9G
T1JLLWFuZC1IQVZFX0VYRUNWRS5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAw
Mi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3R1YnMu
YwoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 12:54:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 12:54:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8l65-0003cB-M4; Fri, 13 Sep 2019 12:54:45 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=nnKs=XI=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1i8l64-0003c3-Ne
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 12:54:44 +0000
X-Inumbo-ID: 9436a38c-d625-11e9-b299-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 9436a38c-d625-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 12:54:10 +0000 (UTC)
IronPort-SDR: NVqNiL8jS6q3M7Zm8At4cJSQ8kFpMniJJzJd69EWsFD4CCepdSi/JLF9pKzJENYZhkBt0Z8lZw
 LCa/QHdfLrLQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AaD7I2hV2Zq/5eocFg3igTQBoKKPV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbReEt8tkgFKBZ4jH8fUM07OQ7/m7HzRfqsvc+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvndFeetayGNoKFmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQe3Ce/z1jNFnGP60Lcm3+?=
 =?us-ascii?q?g9FwzNwQwuH8gJsHTRtNj4KqASUfupzKnJyzXIcvVY2Srl6IjVbxsspu2DXb?=
 =?us-ascii?q?VrccrNyEkvERnJjlGNqYz9IjOYzfgCs3OB4+p4SOKgkHQrqxt2ojW2wMonl4?=
 =?us-ascii?q?rHhpoNx1zZ+ih13Zw5KN64RUJhf9KoDplduzuUOoduX88vTHxktDw5x7AGo5?=
 =?us-ascii?q?K3YiYHxZo9yxLCZPGLbY6F6Q/5WumLOzd3nndldaq6hxa17Eev1PXxVtKx0F?=
 =?us-ascii?q?ZWtipFlcTMtmwV2xzT9MeHTvx981+/2TaKzQ/T6+VELVoomqrAMZIh2qMwmY?=
 =?us-ascii?q?EJvUTZGS/6gET2jKmIeUU44uWk9uvqbqj8qpKfN4J4kB/yProsl8ClD+k0Kg?=
 =?us-ascii?q?0OUHKa+eS42r3j50r5QLBSg/IqlanZq4zaJcUdpqKjBw9Vz54j6wukAji6y9?=
 =?us-ascii?q?QUh2EHLE9edx6dlYjpPEnCIOrkAvenn1SsjDBryujDPr3gBJXNL3/DkKz4cb?=
 =?us-ascii?q?lg9UFc1hQ8zdRE6pJQC7EBO+7zWlTruN3XEBA5NRa4w+H9CNVyzokeQ36AAr?=
 =?us-ascii?q?eFMKPOtl+F/uwvLPeIZI8UoDbyNeIp5/7zjX84hVAdfLKk3Z0JZ3+kGvRpOV?=
 =?us-ascii?q?6WbWDyjdccCW0KpBYxTPT2iF2eVj5ef2iyX6Ym6T4mEI2pF4HDSZ23gLOf3S?=
 =?us-ascii?q?e3BIZZaXpbBVCLEHfoap6JW+wQaCKPP8BtiCYLWqS6S4M7yBGurBT1x6B9Lu?=
 =?us-ascii?q?rTqWUkssfm1d504PaWmRws+DhcC8WGz3rLX2xy2GQSSGwYxqd69Gd60UuC1+?=
 =?us-ascii?q?BcnuRFXYhY4OhVUwF8MYPE0sRxEJbqRwiHZNDfGwXuecmvHTxkFoF5+NQJeU?=
 =?us-ascii?q?soQ9g=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AiAAC/kHtdXQPjVY1mHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBUwcBAQsBgW2BF1MgEiqMPWCIF483iWcUgWcJAQEBJgMRAQIBAYFLgnQ?=
 =?us-ascii?q?CgwM0CQ4CAwkBAQUBAQEBAQYEAQYaFgWFXwyCOiKCbwIBAwF4ECAfEigbFBm?=
 =?us-ascii?q?CV0sBgg6rfYVLgzCBSYE0AYcegzuCdj+DboR8FIYKBIxcIIgFgR6WKAeCJGQ?=
 =?us-ascii?q?EhhmIW0eESCeCNC9BhlCEIYp1qEYhghAzGnOCbAmKM4Nyglw9AQExAYEFAQG?=
 =?us-ascii?q?MTIJUAQE?=
X-IPAS-Result: =?us-ascii?q?A2AiAAC/kHtdXQPjVY1mHAEBAQQBAQcEAQGBUwcBAQsBg?=
 =?us-ascii?q?W2BF1MgEiqMPWCIF483iWcUgWcJAQEBJgMRAQIBAYFLgnQCgwM0CQ4CAwkBA?=
 =?us-ascii?q?QUBAQEBAQYEAQYaFgWFXwyCOiKCbwIBAwF4ECAfEigbFBmCV0sBgg6rfYVLg?=
 =?us-ascii?q?zCBSYE0AYcegzuCdj+DboR8FIYKBIxcIIgFgR6WKAeCJGQEhhmIW0eESCeCN?=
 =?us-ascii?q?C9BhlCEIYp1qEYhghAzGnOCbAmKM4Nyglw9AQExAYEFAQGMTIJUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,501,1559509200"; 
   d="scan'208";a="4786335"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 13 Sep 2019 15:53:57 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 32D891A6014C;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id pv095qHOoJYB; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 1449A1A60144;
 Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 08ee2fVLosHX; Fri, 13 Sep 2019 15:53:57 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id E7CAC1A60146;
 Fri, 13 Sep 2019 15:53:56 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 13 Sep 2019 15:53:42 +0300
Message-Id: <20190913125353.972-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190913125353.972-1-costin.lupu@cs.pub.ro>
References: <20190913125353.972-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH 01/12] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKV2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGds
dWUgY29kZS4KClNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWku
YmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rp
bi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysr
KysrKysrKysrKysrKysKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5t
ZCB8ICA0ICsrKysKIENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogQ29uZmlnLnVrICAgICAgIHwgMjEgKysrKysrKysrKysrKysrKysr
KysrCiBNQUlOVEFJTkVSUy5tZCAgfCAxMiArKysrKysrKysrKysKIFJFQURNRS5tZCAgICAgICB8
ICA3ICsrKysrKysKIGV4cG9ydHN5bXMudWsgICB8ICAxICsKIDggZmlsZXMgY2hhbmdlZCwgMTE1
IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5H
Lm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENv
bmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAx
MDA2NDQgUkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awoKZGlmZiAt
LWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjc1ZDJmZDMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAg
KzEsMjcgQEAKKyouZGVwZW5kCisqLm8KKyouYQorKi5kCisqLnNvCisqLm9yaWcKKyoucmVqCisq
LmJhaworKi5zd3AKKyp+CissKgorXCMqXCMKKy5cIyoKK1wjXypcIworLlwjXyoKKyEuZ2l0aWdu
b3JlCisuKgorCisjIGdudSBnbG9iYWwgZmlsZXMKK0dQQVRICitHUlRBR1MKK0dTWU1TCitHVEFH
UworCisjIGNzY29wZSBmaWxlcworY3Njb3BlLioKK25jc2NvcGUuKgpkaWZmIC0tZ2l0IGEvQ09E
SU5HX1NUWUxFLm1kIGIvQ09ESU5HX1NUWUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU3MzAwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQKQEAg
LTAsMCArMSw0IEBACitDb2RpbmcgU3R5bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIg
dG8gdGhlIGBDT0RJTkdfU1RZTEUubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3Np
dG9yeS4KZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGY2YWM2Ci0tLSAvZGV2L251bGwKKysr
IGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsNCBAQAorQ29udHJpYnV0aW5nIHRvIFVuaWty
YWZ0Cis9PT09PT09PT09PT09PT09PT09PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09O
VFJJQlVUSU5HLm1kYCBmaWxlIGluIHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYg
LS1naXQgYS9DT1BZSU5HLm1kIGIvQ09QWUlORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45NTNlNTZkCi0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORy5tZApAQCAtMCww
ICsxLDM5IEBACitMaWNlbnNlCis9PT09PT09CisKK1VuaWtyYWZ0IHB5dGhvbjMgd3JhcHBlcnMK
Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyByZXBvc2l0b3J5IGNv
bnRhaW5zIHdyYXBwZXIgY29kZSB0byBidWlsZCAkbGlibmFtZSB3aXRoIFVuaWtyYWZ0LgorRWFj
aCBDIGNvZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRo
ZQorY29weXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0
aGUgY29kZSBpcworbGljZW5zZWQuIElmIHN1Y2ggYSBsaWNlbmNlIG5vdGUgaXMgbWlzc2luZywg
dGhlIGZvbGxvd2luZyBjb3B5cmlnaHQKK25vdGljZSB3aWxsIGFwcGx5OgorCisJQ29weXJpZ2h0
IChjKSBZZWFyLCBJbnN0aXR1dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworCVJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworCWFyZSBtZXQ6CisKKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKwkyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCTMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKwkgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKwlBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisJ
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisJTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorCUNPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisJSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKwlDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFCisJUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlm
ZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mODAxYTBjCi0tLSAvZGV2L251bGwKKysrIGIvQ29uZmlnLnVrCkBAIC0wLDAg
KzEsMjEgQEAKK21lbnVjb25maWcgTElCUFlUSE9OMworCWJvb2wgIlB5dGhvbiAzIgorCWRlZmF1
bHQgbgorCXNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQworCXNlbGVjdCBMSUJORVdMSUJD
X1dBTlRfSU9fQzk5X0ZPUk1BVFMgaWYgTElCTkVXTElCQworCXNlbGVjdCBMSUJORVdMSUJDX0xJ
TlVYX0VSUk5PX0VYVEVOU0lPTlMgaWYgTElCTkVXTElCQworCXNlbGVjdCBMSUJVS0RFQlVHCisJ
c2VsZWN0IExJQlVLQUxMT0MKKwlzZWxlY3QgTElCVUtTQ0hFRAorCXNlbGVjdCBVS1VOSVNURAor
CXNlbGVjdCBVS1NZU0lORk8KKwlzZWxlY3QgUE9TSVhfTElCREwKKwlzZWxlY3QgTElCU1lTQ0FM
TF9TSElNCisJc2VsZWN0IExJQlZGU0NPUkUKKwlzZWxlY3QgTElCUFRIUkVBRF9FTUJFRERFRAor
CXNlbGVjdCBMSUJMV0lQCisJc2VsZWN0IExXSVBfREhDUAorCXNlbGVjdCBMV0lQX0lQVjYKKwor
aWYgTElCUFlUSE9OMworZW5kaWYKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTLm1kIGIvTUFJTlRB
SU5FUlMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRiMmZiMQotLS0g
L2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTLm1kCkBAIC0wLDAgKzEsMTIgQEAKK01haW50YWlu
ZXJzIExpc3QKKz09PT09PT09PT09PT09PT0KKworRm9yIG5vdGVzIG9uIGhvdyB0byByZWFkIHRo
aXMgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byBgTUFJTlRBSU5FUlMubWRgIGluCit0aGUg
bWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgorCisJTElCJGxpYm5hbWVjYXBzLVVOSUtSQUZUCisJ
TToJVmxhZCBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CisJTToJ
Q29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KKwlNOglGZWxpcGUgSHVpY2kgPGZl
bGlwZS5odWljaUBuZWNsYWIuZXU+CisJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcKKwlG
OiAqCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYzk1NDRkMQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5tZApA
QCAtMCwwICsxLDcgQEAKK3B5dGhvbjMgZm9yIFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQorCitUaGlzIGlzIHRoZSBwb3J0IG9mIHB5dGhvbjMgZm9yIFVuaWtyYWZ0IGFz
IGV4dGVybmFsIGxpYnJhcnkuCisKK1BsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAgYXMg
d2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCitzdWJkaXJlY3Rvcnkgb2Yg
dGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsg
Yi9leHBvcnRzeW1zLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NmMz
ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9leHBvcnRzeW1zLnVrCkBAIC0wLDAgKzEgQEAKK25vbmUK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0
Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 14:40:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 14:40:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8mkG-0004SM-1D; Fri, 13 Sep 2019 14:40:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PoNL=XI=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i8mkE-0004SH-On
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 14:40:18 +0000
X-Inumbo-ID: 6655fb02-d634-11e9-95ad-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6655fb02-d634-11e9-95ad-12813bfff9fa;
 Fri, 13 Sep 2019 14:40:16 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2BE7BF2021;
 Fri, 13 Sep 2019 16:40:15 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id bj0_CQKFN_Yy; Fri, 13 Sep 2019 16:40:15 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 04A37F2009
 for <minios-devel@lists.xen.org>; Fri, 13 Sep 2019 16:40:13 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 13 Sep
 2019 16:40:12 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 13 Sep 2019 16:40:09 +0200
Message-ID: <20190913144009.3266-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH] plat/linuxu: Allocate heap only
 once on ukplat_meregion_count()
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWxsb2NhdGVzIGEgaGVhcCByZWdpb24gb25seSBvbmNlIHdoZW4gdWtwbGF0X21lcmVnaW9uX2Nv
dW50KCkgaXMKY2FsbGVkLiBUaGlzIGlzIGZpeGluZyBhbiBpc3N1ZSB0aGF0IGNhdXNlZCBhbGxv
Y2F0aW5nIGEgbmV3IGhlYXAKcmVnaW9uIHdoZW5ldmVyIHVrcGxhdF9tZW1yZWdpb25fY291bnQo
KSB3YXMgY2FsbGVkLgoKU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3Vlbnpl
ckBuZWNsYWIuZXU+Ci0tLQogcGxhdC9saW51eHUvbWVtb3J5LmMgfCAxNyArKysrKysrKysrKysr
Ky0tLQogMSBmaWxlIGNoYW5nZWQsIDE0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpk
aWZmIC0tZ2l0IGEvcGxhdC9saW51eHUvbWVtb3J5LmMgYi9wbGF0L2xpbnV4dS9tZW1vcnkuYwpp
bmRleCBiZGVhMmFhZS4uOWI1NDc5ZTggMTAwNjQ0Ci0tLSBhL3BsYXQvbGludXh1L21lbW9yeS5j
CisrKyBiL3BsYXQvbGludXh1L21lbW9yeS5jCkBAIC01Myw3ICs1Myw3IEBAIHN0YXRpYyBpbnQg
X19saW51eHVfcGxhdF9oZWFwX2luaXQodm9pZCkKIAlpbnQgcmMgPSAwOwogCiAJX2xpYmxpbnV4
dXBsYXRfb3B0cy5oZWFwLmxlbiA9IGhlYXBfc2l6ZSAqIE1CMkI7Ci0JdWtfcHJfaW5mbygiSGVh
cCBzaXplICV1XG4iLCBoZWFwX3NpemUpOworCXVrX3ByX2luZm8oIkFsbG9jYXRlIG1lbW9yeSBm
b3IgaGVhcCAoJXUgTWlCKVxuIiwgaGVhcF9zaXplKTsKIAogCS8qKgogCSAqIEFsbG9jYXRlIGhl
YXAgbWVtb3J5CkBAIC03NCwxMCArNzQsMjEgQEAgc3RhdGljIGludCBfX2xpbnV4dV9wbGF0X2hl
YXBfaW5pdCh2b2lkKQogCiBpbnQgdWtwbGF0X21lbXJlZ2lvbl9jb3VudCh2b2lkKQogeworCXN0
YXRpYyBpbnQgaGF2ZV9oZWFwID0gMDsKIAlpbnQgcmMgPSAwOwogCi0JcmMgPSBfX2xpbnV4dV9w
bGF0X2hlYXBfaW5pdCgpOwotCXJldHVybiAocmMgPT0gMCkgPyAxIDogMDsKKwlpZiAoIWhhdmVf
aGVhcCkgeworCQkvKgorCQkgKiBOT1RFOiBUaGUgaGVhcCBzaXplIGNhbiBiZSBjaGFuZ2VkIGJ5
IGEgbGlicmFyeSBwYXJhbWV0ZXIuCisJCSAqIFdlIGFzc3VtZSB0aGF0IHRob3NlIG9uZXMgYXJl
IHByb2Nlc3NlZCBieSB0aGUgYm9vdCBsaWJyYXJ5CisJCSAqIHNob3J0bHkgYmVmb3JlIG1lbW9y
eSByZWdpb25zIGFyZSBzY2FubmVkLiBUaGlzIGlzIHdoeQorCQkgKiB3ZSBpbml0aWFsaXplIHRo
ZSBoZWFwIGhlcmUuCisJCSAqLworCQlyYyA9IF9fbGludXh1X3BsYXRfaGVhcF9pbml0KCk7CisJ
CWhhdmVfaGVhcCA9IChyYyA9PSAwKSA/IDEgOiAwOworCX0KKworCXJldHVybiAoaGF2ZV9oZWFw
KSA/IDEgOiAwOwogfQogCiBpbnQgdWtwbGF0X21lbXJlZ2lvbl9nZXQoaW50IGksIHN0cnVjdCB1
a3BsYXRfbWVtcmVnaW9uX2Rlc2MgKm0pCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 17:06:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 17:06:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8p1e-0002rb-Pa; Fri, 13 Sep 2019 17:06:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=3+QS=XI=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i8p1e-0002rW-94
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 17:06:26 +0000
X-Inumbo-ID: d0418860-d648-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d0418860-d648-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 17:06:23 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id DFA401056C6;
 Fri, 13 Sep 2019 19:06:22 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id jo15c5n3e1UP; Fri, 13 Sep 2019 19:06:22 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id BD80A1056AA
 for <minios-devel@lists.xen.org>; Fri, 13 Sep 2019 19:06:22 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 13 Sep
 2019 19:06:22 +0200
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, <minios-devel@lists.xen.org>
References: <20190913144009.3266-1-simon.kuenzer@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <c931fe3c-613b-1378-00ac-181b1e771d30@neclab.eu>
Date: Fri, 13 Sep 2019 19:06:22 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190913144009.3266-1-simon.kuenzer@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] plat/linuxu: Allocate heap only
 once on ukplat_meregion_count()
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gU2ltb24sCgpUaGlzIHBhdGNoIHNlZW1zIGZpbmUuIEEgc3VnZ2VzdGlvbiB0byB0aGUg
cGF0Y2guCgpSZXZpZXdlZC1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBu
ZWNsYWIuZXU+CgpUaGFua3MgJiBSZWdhcmRzCgpTaGFyYW4KCk9uIDkvMTMvMTkgNDo0MCBQTSwg
U2ltb24gS3VlbnplciB3cm90ZToKPiBBbGxvY2F0ZXMgYSBoZWFwIHJlZ2lvbiBvbmx5IG9uY2Ug
d2hlbiB1a3BsYXRfbWVyZWdpb25fY291bnQoKSBpcwo+IGNhbGxlZC4gVGhpcyBpcyBmaXhpbmcg
YW4gaXNzdWUgdGhhdCBjYXVzZWQgYWxsb2NhdGluZyBhIG5ldyBoZWFwCj4gcmVnaW9uIHdoZW5l
dmVyIHVrcGxhdF9tZW1yZWdpb25fY291bnQoKSB3YXMgY2FsbGVkLgo+Cj4gU2lnbmVkLW9mZi1i
eTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Cj4gLS0tCj4gICBwbGF0
L2xpbnV4dS9tZW1vcnkuYyB8IDE3ICsrKysrKysrKysrKysrLS0tCj4gICAxIGZpbGUgY2hhbmdl
ZCwgMTQgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9wbGF0
L2xpbnV4dS9tZW1vcnkuYyBiL3BsYXQvbGludXh1L21lbW9yeS5jCj4gaW5kZXggYmRlYTJhYWUu
LjliNTQ3OWU4IDEwMDY0NAo+IC0tLSBhL3BsYXQvbGludXh1L21lbW9yeS5jCj4gKysrIGIvcGxh
dC9saW51eHUvbWVtb3J5LmMKPiBAQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMgaW50IF9fbGludXh1
X3BsYXRfaGVhcF9pbml0KHZvaWQpCj4gICAJaW50IHJjID0gMDsKPiAgIAo+ICAgCV9saWJsaW51
eHVwbGF0X29wdHMuaGVhcC5sZW4gPSBoZWFwX3NpemUgKiBNQjJCOwo+IC0JdWtfcHJfaW5mbygi
SGVhcCBzaXplICV1XG4iLCBoZWFwX3NpemUpOwo+ICsJdWtfcHJfaW5mbygiQWxsb2NhdGUgbWVt
b3J5IGZvciBoZWFwICgldSBNaUIpXG4iLCBoZWFwX3NpemUpOwo+ICAgCj4gICAJLyoqCj4gICAJ
ICogQWxsb2NhdGUgaGVhcCBtZW1vcnkKPiBAQCAtNzQsMTAgKzc0LDIxIEBAIHN0YXRpYyBpbnQg
X19saW51eHVfcGxhdF9oZWFwX2luaXQodm9pZCkKPiAgIAo+ICAgaW50IHVrcGxhdF9tZW1yZWdp
b25fY291bnQodm9pZCkKPiAgIHsKPiArCXN0YXRpYyBpbnQgaGF2ZV9oZWFwID0gMDsKSW5zdGVh
ZCBvZiBpbnRyb2R1Y2luZyB0aGUgaGF2ZV9oZWFwLCBtYXliZSB3ZSBzZXQgdGhlIApgX2xpYmxp
bnV4dXBsYXRfb3B0cy5oZWFwLmxlbmAgb25seSBvbiBzdWNjZXNzIGFuZCB1c2UgaXQgdG8gCmRp
ZmZlcmVudGlhdGUgdGhlIGVycm9yIGNhc2UuCj4gICAJaW50IHJjID0gMDsKPiAgIAo+IC0JcmMg
PSBfX2xpbnV4dV9wbGF0X2hlYXBfaW5pdCgpOwo+IC0JcmV0dXJuIChyYyA9PSAwKSA/IDEgOiAw
Owo+ICsJaWYgKCFoYXZlX2hlYXApIHsKPiArCQkvKgo+ICsJCSAqIE5PVEU6IFRoZSBoZWFwIHNp
emUgY2FuIGJlIGNoYW5nZWQgYnkgYSBsaWJyYXJ5IHBhcmFtZXRlci4KPiArCQkgKiBXZSBhc3N1
bWUgdGhhdCB0aG9zZSBvbmVzIGFyZSBwcm9jZXNzZWQgYnkgdGhlIGJvb3QgbGlicmFyeQo+ICsJ
CSAqIHNob3J0bHkgYmVmb3JlIG1lbW9yeSByZWdpb25zIGFyZSBzY2FubmVkLiBUaGlzIGlzIHdo
eQo+ICsJCSAqIHdlIGluaXRpYWxpemUgdGhlIGhlYXAgaGVyZS4KPiArCQkgKi8KPiArCQlyYyA9
IF9fbGludXh1X3BsYXRfaGVhcF9pbml0KCk7Cj4gKwkJaGF2ZV9oZWFwID0gKHJjID09IDApID8g
MSA6IDA7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIChoYXZlX2hlYXApID8gMSA6IDA7Cj4gICB9Cj4g
ICAKPiAgIGludCB1a3BsYXRfbWVtcmVnaW9uX2dldChpbnQgaSwgc3RydWN0IHVrcGxhdF9tZW1y
ZWdpb25fZGVzYyAqbSkKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 17:07:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 17:07:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8p2u-0002tD-UT; Fri, 13 Sep 2019 17:07:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PoNL=XI=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i8p2t-0002t8-MW
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 17:07:43 +0000
X-Inumbo-ID: fee9da6e-d648-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id fee9da6e-d648-11e9-978d-bc764e2007e4;
 Fri, 13 Sep 2019 17:07:41 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 263EFF2021;
 Fri, 13 Sep 2019 19:07:41 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Kw7nGq4viymS; Fri, 13 Sep 2019 19:07:41 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E9B27F2009;
 Fri, 13 Sep 2019 19:07:36 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 13 Sep
 2019 19:07:36 +0200
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20fdad09-9cd4-2482-644c-571077fcdb2a@gmail.com>
 <24b79a4a-42b5-84a2-ed03-00bc232efbc7@neclab.eu>
 <414aded7-67fa-b1ae-a3ba-bebd2b5891ca@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <431c7eb0-6d1e-0ee7-a119-e8e27d5a9ed5@neclab.eu>
Date: Fri, 13 Sep 2019 19:07:35 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <414aded7-67fa-b1ae-a3ba-bebd2b5891ca@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 0/6] Move VFS initialization
 to ukboot
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMDkuMDkuMTkgMTM6NTYsIENvc3RpbiBMdXB1IHdyb3RlOgo+IEhpIFNpbW9uLAo+IAo+IE9u
IDkvOS8xOSAxOjQxIFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+PiBPbiAwOC4wOS4xOSAxNzow
NSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+PiBIaSBTaW1vbiwKPj4+Cj4+PiBXZSBjbGVhcmx5IG5l
ZWQgdG8gY29tZSB1cCB3aXRoIGEgc29sdXRpb24gZm9yIGluaXRpYWxpemluZyBmaWxlc3lzdGVt
cy4KPj4+IEhvd2V2ZXIsIHRoZXNlIHNlcmllcyBoYXZlIHRvIGJlIHJld29ya2VkOgo+Pj4gMS4g
WW91IHNob3VsZCBhZGQgeW91ciBjaGFuZ2VzIG9uY2UgPiAyLiBXZSBzaG91bGQgYWRkIHRoaXMg
aW5pdCB0aGluZwo+Pj4gaW4gdmZzY29yZSBpbnN0ZWFkIG9mIGJsb2F0aW5nIHRoZQo+Pj4gYm9v
dC5jIGNvZGUuCj4+Cj4+IEkgb3JpZ2luYWxseSBjaG9zZSBsaWJ1a2Jvb3QgYmVjYXVzZSBvZiBv
dXIgY3VycmVudCBib290IGxvZ2ljLiBUaGUKPj4gcmVhc29uIGlzIHRoYXQgd2Ugc2hvdWxkIG5v
dCB1c2UgYW55IHByZS1pbml0IG9yIGluaXQgdGFibGUgZW50cmllcyBmb3IKPj4gb3VyIHN5c3Rl
bSBpbml0aWFsaXphdGlvbi4gV2Ugc2hvdWxkIHRyZWF0IHRoZSB0YWJsZXMgYXMgcmVzZXJ2ZWQg
dG8gdGhlCj4+IFVuaWtlcm5lbCgtaXplZCkgcHJvZ3JhbSBhbmQgaXRzIGxpYnJhcmllcy4gU28g
ZmFyIHdlIHVzZWQgdGhlbSBmb3IgdGhlCj4+IGNhc2Ugd2hlbiB3ZSBuZWVkIG1lbW9yeSBhbmQv
b3Igc2NoZWR1bGluZyBzdXBwb3J0LiBIb3dldmVyLCB3aGVuZXZlciB3ZQo+PiBwb3J0IGV4aXN0
aW5nIHN0YW5kYXJkIHVzZXIgc3BhY2UgcHJvZ3JhbXMgKGUuZy4sIExpbnV4IHByb2dyYW0pIHRv
IG91cgo+PiBlbnZpcm9ubWVudCwgd2UgYWN0dWFsbHkgc2hvdWxkIGJlIGF3YXJlIHRoYXQgaXRz
IGNvbnN0cnVjdG9yIGFuZCBpbml0Cj4+IGZ1bmN0aW9ucyBpbnRlcmFjdCBhbHJlYWR5IHdpdGgg
b3Igc3lzdGVtIGNvbXBvbmVudHMuIEVmZmVjdGl2ZWx5LCB0aGV5Cj4+IHNob3VsZCBiZSBmdWxs
eSBpbml0aWFsaXplZCBhdCB0aGF0IHBvaW50LiBJIGV4cGVjdCB0aGF0IG1vc3QKPj4gaW50ZXJh
Y3Rpb25zIGFyZSBkb25lIHdpdGggdGhlIFZGUy4KPj4gT3ZlcmFsbCBvdXIgY3VycmVudCBib290
IHN0YWdlcyBzaG91bGQgbG9vayBsaWtlIHRoaXM6Cj4+Cj4+ICDCoDApIEVudHJ5IGFuZCBlYXJs
eSBwbGF0Zm9ybSBpbml0IChwbGF0Zm9ybSBsaWJyYXJ5KQo+PiAgwqAxKSBVbmlrcmFmdCBjb25z
dHJ1Y3RvcnMKPj4gIMKgwqDCoCBDYW5ub3QgdXNlIHVrYWxsb2Mgb3IgdWtzY2hlZCBiZWNhdXNl
IGl0IGlzIG5vdCBpbml0aWFsaXplZCB5ZXQuCj4+ICDCoDIpIFVuaWtyYWZ0IGluaXQKPj4gIMKg
wqDCoCAyLjEpIHVrYWxsb2MKPj4gIMKgwqDCoCAyLjIpIHVrc2NoZWQKPj4gIMKgwqDCoCAyLjMp
IFZGUwo+PiAgwqDCoMKgIDIuNCkgTmV0d29ya2luZwo+PiAgwqDCoMKgIDIuNSkgZXRjLgo+PiAg
wqAzKSBQcm9ncmFtIGNvbnN0cnVjdG9ycwo+PiAgwqDCoMKgIFRoZXNlIGFyZSB0aGUgZW50cmll
cyB0aGF0IHdlIGZpbmQgaW4gdGhlIHByZS1pbml0IGFuZCBpbml0Cj4+ICDCoMKgwqAgc2VjdGlv
bnMuCj4+ICDCoDQpIEVudGVyIG1haW4oKSBvZiB0aGUgcHJvZ3JhbQo+Pgo+PiBFdmVyeXRoaW5n
IG9mIHBvaW50IDIgaXMgY3VycmVudGx5IGhhcmQtY29kZWQgdG8gbGlidWtib290LiBTbyBpdCBt
YWtlcwo+PiBjdXJyZW50bHkgc2Vuc2UgdG8gcHV0IG91ciBWRlMgaW5pdGlhbGl6YXRpb24gdGhl
cmUgaW5zdGVhZCBvZgo+PiByZWdpc3RlcmluZyBpdCB0byB0aGUgcHJlLWluaXQgb3IgaW5pdCBz
ZWN0aW9uLiBJbiBmYWN0LCBJIGFncmVlIHRoYXQgd2UKPj4gbmVlZCB0byBpbnRyb2R1Y2UgYSAi
VW5pa3JhZnQgaW5pdCB0YWJsZSIgKHNpbWlsYXIgdG8gVW5pa3JhZnQKPj4gY29uc3RydWN0b3Jz
KSB3aGVyZSBvdXIgc3lzdGVtIGxpYnJhcmllcyBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZlcyB0by4g
QXMKPj4gaW50ZXJtZWRpYXRlIHNvbHV0aW9uIEkgY291bGQgaW50cm9kdWNlIGEgdmZzY29yZV9p
bml0KCkgZnVuY3Rpb24gdGhhdAo+PiBpcyBjYWxsZWQgZnJvbSBsaWJ1a2Jvb3QsIHNpbWlsYXIg
dG8gd2hhdCB3ZSBkaWQgd2l0aCBsd2lwLiBUaGlzIHdheSwgd2UKPj4ga2VlcCB0aGUgVkZTIGlu
aXQgY29kZSBpbiB2ZnNjb3JlLgo+IAo+IFRoYXQncyBleGFjdGx5IHdoYXQgSSBzdWdnZXN0ZWQs
IGEgdmZzY29yZV9pbml0KCkgZnVuY3Rpb24gZG9pbmcgYWxsCj4gdGhhdCBzdHVmZi4KPiAKPj4K
Pj4gSG93ZXZlciwgSSBhbHNvIGhhZCBhIHNlY29uZCByZWFzb24gZm9yIHB1dHRpbmcgdGhlIFZG
UyBpbml0IGNvZGUgdG8KPj4gbGlidWtib290OiBJIGhhZCBpbiBtaW5kIHRoYXQgd2UgY291bGQg
YWRkIGluaXRyZCBzdXBwb3J0IHdpdGggYW5vdGhlcgo+PiBwYXRjaCBzZXJpZXMgcmVsYXRpdmVs
eSBlYXN5Ogo+PiAgwqAxKSBNb3VudCByYW1mcyBmb3IgLwo+PiAgwqAyKSBTZWFyY2ggZm9yIGFu
IGFyY2hpdmUgaW4gaW5pdHJkIHNlY3Rpb24KPj4gIMKgMykgRGVjb21wcmVzcyBhcmNoaXZlIHRv
IC8KPj4gIMKgNCkgQWRkIGluaXRyZCBtZW1vcnkgcmVnaW9uIHRvIGluaXRpYWxpemVkIHVrYWxs
b2MKPj4gIMKgwqDCoCBiZWNhdXNlIHdlIGRvIG5vdCBuZWVkIGl0IGFueW1vcmUuCj4+Cj4+IEEg
ZGVjb21wcmVzc2luZyBhbGdvcml0aG0gdGhhdCBjcmVhdGVzIGRpcmVjdG9yaWVzIGFuZCBmaWxl
cyBmcm9tIHRoZQo+PiBhcmNoaXZlIChlLmcuLCBiYXNlZCBvbiB6bGliKSBpcyB0aGUgb25seSBt
aXNzaW5nIHBpZWNlLiBOby4gNCByZXF1aXJlcwo+PiBrbm93bGVkZ2UgYWJvdXQgd2hpY2ggYWxs
b2NhdG9yIHRvIGFkZCBtZW1vcnkgcmVnaW9ucyB0by4gVGhpcyB3b3VsZCBiZQo+PiBjdXJyZW50
bHkgbXVjaCBlYXNpZXIgd2l0aCBsaWJ1a2Jvb3QgdGhhdCBjb3VsZCBkaWN0YXRlIHRoaXMuIEhv
d2V2ZXIsCj4+IHdlIGNhbiBhbHNvIGZpbmQgYW5vdGhlciBzb2x1dGlvbiBmb3IgZG9pbmcgdGhp
cyB3aGVuIGltcGxlbWVudGluZwo+PiBpbml0cmQgc3VwcG9ydCBhcyBwYXJ0IG9mIHZmc2NvcmUu
Li4KPj4KPj4gV2hhdCBkbyB5b3UgdGhpbms/Cj4gCj4gVGhpcyBjYW4gYmUgZG9uZSBhbHNvIGJ5
IGNhbGxpbmcgZGlmZmVyZW50IGluaXQgZnVuY3Rpb25zIGluIHZmc2NvcmUuCj4gSG93ZXZlciwg
aXQncyBvdXQgb2Ygc2NvcGUgZm9yIG5vdy4KPiAKPiBDaGVlcnMsCj4gQ29zdGluCj4gCgpPa2F5
LCBJIGFtIGdvaW5nIHRvIHNlbmQgYSB2MyB3aXRoIHRoaXMgY2hhbmdlcy4gSG93ZXZlciwgSSB3
aWxsIHRha2UgCnBhdGNoIG5vLiAxIGFuZCA1IG91dCBvZiB0aGlzIHNlcmllcy4gVGhleSBhcmUg
bGVzcyByZWxldmFudC4gSSB3aWxsIApzZW5kIHRoZW0gaW5kaXZpZHVhbGx5LgoKQ2hlZXJzLAoK
U2ltb24KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 17:11:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 17:11:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8p68-0003Xr-7r; Fri, 13 Sep 2019 17:11:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PoNL=XI=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1i8p67-0003Xm-Ic
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 17:11:03 +0000
X-Inumbo-ID: 754da8ca-d649-11e9-95b6-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 754da8ca-d649-11e9-95b6-12813bfff9fa;
 Fri, 13 Sep 2019 17:11:00 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id B701E1056C6;
 Fri, 13 Sep 2019 19:10:59 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id H1-SyVf9ZvVy; Fri, 13 Sep 2019 19:10:59 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 8BEE41056AA;
 Fri, 13 Sep 2019 19:10:59 +0200 (CEST)
Received: from [10.7.0.24] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 13 Sep
 2019 19:10:50 +0200
To: Costin Lupu <costin.lup@gmail.com>, <minios-devel@lists.xen.org>
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20190906120306.18966-2-simon.kuenzer@neclab.eu>
 <34d4e746-58be-5eb2-eef7-8be485c8a620@gmail.com>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <e18a1fca-7477-9840-6549-adc0bd06c9e2@neclab.eu>
Date: Fri, 13 Sep 2019 19:10:35 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <34d4e746-58be-5eb2-eef7-8be485c8a620@gmail.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/6] lib/ukboot: Application
 constructors right before calling application
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMDguMDkuMTkgMTc6MDIsIENvc3RpbiBMdXB1IHdyb3RlOgo+IEhpIFNpbW9uLAo+IAo+IElm
IHdlIGtlZXAgbW92aW5nIHRoaXMgY29kZSB1cCBhbmQgZG93biwgd291bGRuJ3QgaXQgbWFrZSBt
b3JlIHNlbnNlIHRvCj4gcHV0IGl0IGluIGEgZnVuY3Rpb24gaW5zdGVhZD8KCllvdSBtZWFuIGEg
c3RhdGljIGZ1bmN0aW9uPyBCZWNhdXNlIG9mIHJlYWRhYmlsaXR5PyBJIGFtIG5vdCBzdXJlIGlm
IGluIAp0aGlzIGNhc2UgdGhpcyBtYWtlcyBzdWNoIGEgZGlmZmVyZW5jZS4gWW91IHdvdWxkIG5l
ZWQgdG8gZG8gdGhpcyB0aGVuIAphbHNvIHdpdGggdGhlIHN5c3RlbSBjb25zdHJ1Y3RvciB0YWJs
ZS4gSG93ZXZlciwgSSBhbSBjb25jZXJuZWQgdGhhdCAKdGhpcyB3b3VsZCBibG9hdCBteSBwYXRj
aCB3aGljaCBzdXBwb3NlZGx5IHNob3VsZCBtYWtlIG9ubHkgdGhlIG9yZGVyIApjb3JyZWN0LgoK
PiAKPiBDaGVlcnMsCj4gQ29zdGluCj4gCj4gT24gOS82LzE5IDM6MDMgUE0sIFNpbW9uIEt1ZW56
ZXIgd3JvdGU6Cj4+IHByZWluaXQgYW5kIGluaXQgdGFibGVzIGFyZSBwYXJ0IG9mIHBvcnRlZCBs
aWJyYXJpZXMgYW5kIGFwcGxpY2F0aW9ucy4KPj4gU2luY2UgdGhleSBhcmUgb3JpZ2luYWxseSBy
dW4gaW4gdXNlciBzcGFjZSBvbiBMaW51eCBvciBCU0QsIHRoZXkKPj4gZXhwZWN0IGZ1bGx5IGlu
aXRpYWxpemVkIGtlcm5lbCBsYXllcnMuIFRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMKPj4gbGlz
dGVkIGluIHRob3NlIHRhYmxlcyBjb3VsZCBjcmVhdGUgdGhyZWFkcywgYWxsb2NhdGUgbWVtb3J5
LCBvcgo+PiBpbnRlcmFjdCB3aXRoIHRoZSBWRlMsIGV0Yy4KPj4gVGhpcyBwYXRjaCBtb3ZlcyBj
YWxsaW5nIHRob3NlIGNvbnN0cnVjdG9ycyBhdCB0aGUgbGF0ZXN0IHBvc3NpYmxlIHBvaW50Lgo+
Pgo+PiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5l
dT4KPj4gLS0tCj4+ICAgbGliL3VrYm9vdC9ib290LmMgfCA1MiArKysrKysrKysrKysrKysrKysr
KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQo+PiAgIDEgZmlsZSBjaGFuZ2VkLCAzMCBpbnNl
cnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3Qv
Ym9vdC5jIGIvbGliL3VrYm9vdC9ib290LmMKPj4gaW5kZXggM2I4ZDY0MWYuLjdmYjA5MDhhIDEw
MDY0NAo+PiAtLS0gYS9saWIvdWtib290L2Jvb3QuYwo+PiArKysgYi9saWIvdWtib290L2Jvb3Qu
Ywo+PiBAQCAtODIsMjggKzgyLDYgQEAgc3RhdGljIHZvaWQgbWFpbl90aHJlYWRfZnVuYyh2b2lk
ICphcmcpCj4+ICAgCWludCByZXQ7Cj4+ICAgCXN0cnVjdCB0aHJlYWRfbWFpbl9hcmcgKnRtYSA9
IGFyZzsKPj4gICAKPj4gLQl1a19wcl9pbmZvKCJQcmUtaW5pdCB0YWJsZSBhdCAlcCAtICVwXG4i
LAo+PiAtCQkgICBfX3ByZWluaXRfYXJyYXlfc3RhcnQsICZfX3ByZWluaXRfYXJyYXlfZW5kKTsK
Pj4gLQl1a19jdG9yX2ZvcmVhY2goX19wcmVpbml0X2FycmF5X3N0YXJ0LCBfX3ByZWluaXRfYXJy
YXlfZW5kLCBpKSB7Cj4+IC0JCWlmIChfX3ByZWluaXRfYXJyYXlfc3RhcnRbaV0pIHsKPj4gLQkJ
CXVrX3ByX2RlYnVnKCJDYWxsIHByZS1pbml0IGNvbnN0cnVjdG9yIChlbnRyeSAlZCAoJXApOiAl
cCgpKS4uLlxuIiwKPj4gLQkJCQkgICAgaSwgJl9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSwKPj4g
LQkJCQkgICAgX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKTsKPj4gLQkJCV9fcHJlaW5pdF9hcnJh
eV9zdGFydFtpXSgpOwo+PiAtCQl9Cj4+IC0JfQo+PiAtCj4+IC0JdWtfcHJfaW5mbygiQ29uc3Ry
dWN0b3IgdGFibGUgYXQgJXAgLSAlcFxuIiwKPj4gLQkJCV9faW5pdF9hcnJheV9zdGFydCwgJl9f
aW5pdF9hcnJheV9lbmQpOwo+PiAtCXVrX2N0b3JfZm9yZWFjaChfX2luaXRfYXJyYXlfc3RhcnQs
IF9faW5pdF9hcnJheV9lbmQsIGkpIHsKPj4gLQkJaWYgKF9faW5pdF9hcnJheV9zdGFydFtpXSkg
ewo+PiAtCQkJdWtfcHJfZGVidWcoIkNhbGwgY29uc3RydWN0b3IgKGVudHJ5ICVkICglcCk6ICVw
KCkpLi4uXG4iLAo+PiAtCQkJCQlpLCAmX19pbml0X2FycmF5X3N0YXJ0W2ldLAo+PiAtCQkJCQlf
X2luaXRfYXJyYXlfc3RhcnRbaV0pOwo+PiAtCQkJX19pbml0X2FycmF5X3N0YXJ0W2ldKCk7Cj4+
IC0JCX0KPj4gLQl9Cj4+IC0KPj4gICAjaWZkZWYgQ09ORklHX0xJQlVLQlVTCj4+ICAgCXVrX3By
X2luZm8oIkluaXRpYWxpemUgYnVzIGhhbmRsZXJzLi4uXG4iKTsKPj4gICAJdWtfYnVzX2luaXRf
YWxsKHVrX2FsbG9jX2dldF9kZWZhdWx0KCkpOwo+PiBAQCAtMTI5LDYgKzEwNywzNiBAQCBzdGF0
aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKPj4gICAJcHJpbnRmKCIlMzVzXG4i
LAo+PiAgIAkgICAgICAgU1RSSU5HSUZZKFVLX0NPREVOQU1FKSAiICIgU1RSSU5HSUZZKFVLX0ZV
TExWRVJTSU9OKSk7Cj4+ICAgI2VuZGlmCj4+ICsJLyoKPj4gKwkgKiBBcHBsaWNhdGlvbgo+PiAr
CSAqCj4+ICsJICogV2UgYXJlIGNhbGxpbmcgdGhlIGFwcGxpY2F0aW9uIGNvbnN0cnVjdG9ycyBy
aWdodCBiZWZvcmUgY2FsbGluZwo+PiArCSAqIHRoZSBhcHBsaWNhdGlvbidzIG1haW4oKS4gQWxs
IG9mIG91ciBVbmlrcmFmdCBzeXN0ZW1zLCBWRlMsCj4+ICsJICogbmV0d29ya2luZyBzdGFjayBp
cyBpbml0aWFsaXplZCBhdCB0aGlzIHBvaW50LiBUaGlzIHdheSB3ZSBjbG9zZWx5Cj4+ICsJICog
bWltaWMgd2hhdCBhIHJlZ3VsYXIgdXNlciBhcHBsaWNhdGlvbiAoZS5nLiwgQlNELCBMaW51eCkg
d291bGQgZXhwZWN0Cj4+ICsJICogZnJvbSBpdHMgT1MgYmVpbmcgaW5pdGlhbGl6ZWQuCj4+ICsJ
ICovCj4+ICsJdWtfcHJfaW5mbygiUHJlLWluaXQgdGFibGUgYXQgJXAgLSAlcFxuIiwKPj4gKwkJ
ICAgX19wcmVpbml0X2FycmF5X3N0YXJ0LCAmX19wcmVpbml0X2FycmF5X2VuZCk7Cj4+ICsJdWtf
Y3Rvcl9mb3JlYWNoKF9fcHJlaW5pdF9hcnJheV9zdGFydCwgX19wcmVpbml0X2FycmF5X2VuZCwg
aSkgewo+PiArCQlpZiAoX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKSB7Cj4+ICsJCQl1a19wcl9k
ZWJ1ZygiQ2FsbCBwcmUtaW5pdCBjb25zdHJ1Y3RvciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5c
biIsCj4+ICsJCQkJICAgIGksICZfX3ByZWluaXRfYXJyYXlfc3RhcnRbaV0sCj4+ICsJCQkJICAg
IF9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSk7Cj4+ICsJCQlfX3ByZWluaXRfYXJyYXlfc3RhcnRb
aV0oKTsKPj4gKwkJfQo+PiArCX0KPj4gKwo+PiArCXVrX3ByX2luZm8oIkNvbnN0cnVjdG9yIHRh
YmxlIGF0ICVwIC0gJXBcbiIsCj4+ICsJCQlfX2luaXRfYXJyYXlfc3RhcnQsICZfX2luaXRfYXJy
YXlfZW5kKTsKPj4gKwl1a19jdG9yX2ZvcmVhY2goX19pbml0X2FycmF5X3N0YXJ0LCBfX2luaXRf
YXJyYXlfZW5kLCBpKSB7Cj4+ICsJCWlmIChfX2luaXRfYXJyYXlfc3RhcnRbaV0pIHsKPj4gKwkJ
CXVrX3ByX2RlYnVnKCJDYWxsIGNvbnN0cnVjdG9yIChlbnRyeSAlZCAoJXApOiAlcCgpKS4uLlxu
IiwKPj4gKwkJCQkJaSwgJl9faW5pdF9hcnJheV9zdGFydFtpXSwKPj4gKwkJCQkJX19pbml0X2Fy
cmF5X3N0YXJ0W2ldKTsKPj4gKwkJCV9faW5pdF9hcnJheV9zdGFydFtpXSgpOwo+PiArCQl9Cj4+
ICsJfQo+PiAgIAo+PiAgIAl1a19wcl9pbmZvKCJDYWxsaW5nIG1haW4oJWQsIFsiLCB0bWEtPmFy
Z2MpOwo+PiAgIAlmb3IgKGkgPSAwOyBpIDwgdG1hLT5hcmdjOyArK2kpIHsKPj4KCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 13 17:43:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 13 Sep 2019 17:43:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i8pbw-000656-Jm; Fri, 13 Sep 2019 17:43:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yPNX=XI=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i8pbv-000650-8S
 for minios-devel@lists.xen.org; Fri, 13 Sep 2019 17:43:55 +0000
X-Inumbo-ID: 0de32fe8-d64e-11e9-b299-bc764e2007e4
Received: from mail-wm1-x341.google.com (unknown [2a00:1450:4864:20::341])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0de32fe8-d64e-11e9-b299-bc764e2007e4;
 Fri, 13 Sep 2019 17:43:54 +0000 (UTC)
Received: by mail-wm1-x341.google.com with SMTP id n10so3651897wmj.0
 for <minios-devel@lists.xen.org>; Fri, 13 Sep 2019 10:43:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:cc:references:from:message-id:date:user-agent
 :mime-version:in-reply-to:content-language:content-transfer-encoding;
 bh=AFiCD4yejvqAHItZEYzCfLzY2N9oew4JaA8TFyNZN68=;
 b=VHXCGAPCdDTD6tj0ZIMVuYusZ4AbblEgSx3dB88sg2Z6yg2z5Pn9jvMvVHzETysob4
 NuqEt77RdETG9VNFUfF5wPPTuOLzmT96aUsuTJcP6F5fhwgJNStOnow8Fr50DjKM3HDD
 HV+PmsJiMOEC/321xPC7a7ToV1a60rTfDbSTal8zy99MxEi8Tqg7xKKIIDJG6cUZT0kz
 /O0krAcCjuJAuuD3hZPPvvuzwhwZSkUScXHARMi5PcWpfQriBIwWxhUeG8JNQBGKERsq
 6a+GN4bCiVi2Rz9YuFltaHKAzprBuK7uMAyN8n5Fh8sCAkXuexFGodE9YOEgsbWRfxaU
 Rc3w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:cc:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=AFiCD4yejvqAHItZEYzCfLzY2N9oew4JaA8TFyNZN68=;
 b=trKWS3Bp0vyy7evFCBDwHQcCgnku9SO1+ZNzWP+10Oru7etx51oZ/Zq6dCI+ULIN6x
 zGWxORPXb9JfRNP2CPITip4JJ1gsRZU5D7pVmMZSDHcxul13lelhXUM7fAJ4fqncNUOH
 EP3mIaBHMtMdM4Q2HIZ+Ti7d6YR8b3R2rLd3uyaSkY7pXpAIWDwIMnVKQ4RMdQc+gFY7
 TVDwuftZhnJIYG5nuWAAbj2XpFFJpcsd7TIT+0tzSVE4jImV09uUH206WtTzw7Yivqzw
 Difv1joXyBMMrCl7uBc8+JlL3abczmdWX3kUDkd3JuYYg0qw3Kt+EP2rxPRpIABOtJC1
 D53A==
X-Gm-Message-State: APjAAAWSCynbUl0DDLf11IBHY5GbYmplNTu3jaYqSDvBugGclshEr71d
 vYC9jejmlU48P3DCavGDRys507UA
X-Google-Smtp-Source: APXvYqyvnCF0bDf/F2hhSAfKGjliHoMj5vdM6eIA1LAoz2wfh113BOGpLgomUWEObgt9M0Ot8Xwh1Q==
X-Received: by 2002:a7b:c0cb:: with SMTP id s11mr3068658wmh.151.1568396633600; 
 Fri, 13 Sep 2019 10:43:53 -0700 (PDT)
Received: from [192.168.1.103] ([188.25.245.49])
 by smtp.gmail.com with ESMTPSA id o12sm6184434wrm.23.2019.09.13.10.43.52
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Fri, 13 Sep 2019 10:43:53 -0700 (PDT)
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, minios-devel@lists.xen.org
References: <20190906120306.18966-1-simon.kuenzer@neclab.eu>
 <20190906120306.18966-2-simon.kuenzer@neclab.eu>
 <34d4e746-58be-5eb2-eef7-8be485c8a620@gmail.com>
 <e18a1fca-7477-9840-6549-adc0bd06c9e2@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <b17edc32-7aa8-f8d1-632f-6409031ae3b9@gmail.com>
Date: Fri, 13 Sep 2019 20:43:52 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <e18a1fca-7477-9840-6549-adc0bd06c9e2@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/6] lib/ukboot: Application
 constructors right before calling application
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xMy8xOSA4OjEwIFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+IE9uIDA4LjA5LjE5IDE3
OjAyLCBDb3N0aW4gTHVwdSB3cm90ZToKPj4gSGkgU2ltb24sCj4+Cj4+IElmIHdlIGtlZXAgbW92
aW5nIHRoaXMgY29kZSB1cCBhbmQgZG93biwgd291bGRuJ3QgaXQgbWFrZSBtb3JlIHNlbnNlIHRv
Cj4+IHB1dCBpdCBpbiBhIGZ1bmN0aW9uIGluc3RlYWQ/Cj4gCj4gWW91IG1lYW4gYSBzdGF0aWMg
ZnVuY3Rpb24/IEJlY2F1c2Ugb2YgcmVhZGFiaWxpdHk/IEkgYW0gbm90IHN1cmUgaWYgaW4KPiB0
aGlzIGNhc2UgdGhpcyBtYWtlcyBzdWNoIGEgZGlmZmVyZW5jZS4gWW91IHdvdWxkIG5lZWQgdG8g
ZG8gdGhpcyB0aGVuCj4gYWxzbyB3aXRoIHRoZSBzeXN0ZW0gY29uc3RydWN0b3IgdGFibGUuIEhv
d2V2ZXIsIEkgYW0gY29uY2VybmVkIHRoYXQKPiB0aGlzIHdvdWxkIGJsb2F0IG15IHBhdGNoIHdo
aWNoIHN1cHBvc2VkbHkgc2hvdWxkIG1ha2Ugb25seSB0aGUgb3JkZXIKPiBjb3JyZWN0LgoKTWF5
YmUgSSdtIHdyb25nLCBidXQgSSByZW1lbWJlciB0aGF0IHRoaXMgc25pcHBldCBvZiBjb2RlIHdh
cyBtb3ZlZApiZWZvcmUgZnJvbSBvdGhlciBwbGFjZSB3aGljaCB3b3VsZCBtZWFuIHRoYXQgdGhp
cyBtaWdodCBub3QgYmUgaXRzCmZpbmFsIHBvc2l0aW9uLiBCdXQgaWYgd2UgcHV0IGl0IGluIGEg
ZnVuY3Rpb24gdGhlbiB0aGUgbmV4dCB0aW1lIHdlJ2xsCm1vdmUgb25seSB0aGUgZnVuY3Rpb24g
Y2FsbC4gVGhpcyBpcyB3aGF0IEkgd2FudGVkIHRvIHN1Z2dlc3QuCgpDaGVlcnMsCkNvc3RpbgoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 03:34:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 03:34:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9hmd-0003cX-4K; Mon, 16 Sep 2019 03:34:35 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9hmc-0003cS-7o
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 03:34:34 +0000
X-Inumbo-ID: e3c3d69a-d832-11e9-b299-bc764e2007e4
Received: from EUR01-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.14.88]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e3c3d69a-d832-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 03:34:30 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=vU5mXwweFFF90YiuA5Nmd0FJSSCI4ZTaZ6vO7GiIxqQ=;
 b=4MclKVcOCtXvRGWQnj6Fv1UxawnU43qoCtbNrKlwmyDsdrG2+UJPXWZlqgvkkZww9GVt2MzweL6ESO1TEGnmDh/cPTDdN1aha/LUpB0bPesX9UqPxmmsxPyLqm7UocD+GdzwmYszbZdCZd9dzULcLgTJH+fA3yEmAkuDa/7NZ9U=
Received: from VI1PR0802CA0011.eurprd08.prod.outlook.com
 (2603:10a6:800:aa::21) by DB8PR08MB5305.eurprd08.prod.outlook.com
 (2603:10a6:10:f9::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.21; Mon, 16 Sep
 2019 03:34:26 +0000
Received: from DB5EUR03FT017.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::204) by VI1PR0802CA0011.outlook.office365.com
 (2603:10a6:800:aa::21) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17 via Frontend
 Transport; Mon, 16 Sep 2019 03:34:26 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT017.mail.protection.outlook.com (10.152.20.114) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 03:34:25 +0000
Received: ("Tessian outbound fd4ad9e68831:v31");
 Mon, 16 Sep 2019 03:34:24 +0000
X-CR-MTA-TID: 64aa7808
Received: from 9cefe5c1c644.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.2.51]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 DE2A1DD3-A4C2-4CB0-B964-185846847292.1; 
 Mon, 16 Sep 2019 03:34:19 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2051.outbound.protection.outlook.com [104.47.2.51])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9cefe5c1c644.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 03:34:19 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EIxKgWOWRQanrBaebEdRFqc+uM6KJzQptanhbgIsHk/A08Jt2X/hL8Lztb8o5lTsSR2/KFtSt6lltbo6CqOLEG/37EhXtBJxMcZ5/dtCGM4YrqZcLjsILYc3Agf/kaLR+WAd8/ritF3UaM+GDi14WPG8S2mYYbf48BZJvk6JZF3joy6nE/ee5ojy/0I9jeh4eLVl27TlpjBg/iDOwrAfAb7CwFYnhGbWE29d8ZGtK7pfuKRtZihdEByBLe99JhoJzVYgIVktLG2ewmY59/08HY/5vykw42ryh0gAQviKY/1gGmiQlpNnbMHjNnGprgUcXXSqsH56LzavPacWV/Eszg==
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=a7ENYXylbCgcTY36oVGW++EKLpy2zroDDHvMbocXjiQ=;
 b=TFTen4c//MFCFGp7Fwe30Z/JcIjQErnsMxtJFqOPjj1ElKnKkT4rbXY8g31CVL62Uxv56Q8gsGR9EDeJZ2yUeOXNBwijVpOBxavzNePJHWMqzqzXcmOI+zsKJUAyAqnlsmAg5AyRYSEpHxLk95X3Xyr9TtAK49V8iEWNqg/AaF/nSgcsDAMEUXtrwhH3uteJEfmmRkI4sF0BmxmU0P1pwdfJFYxBoavhTKlJzeF+DP5CuBpsQ5a83K5Q0rPOab0Gc3MPSVQaSuK6jDGQ2vIX/hFDeGldj5gYE3dqVqX/yovIPpheN4QlbrsfA3ohVzXv0dLevICQmPfVjuhtvELrQg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=a7ENYXylbCgcTY36oVGW++EKLpy2zroDDHvMbocXjiQ=;
 b=2CJ5gHQrY8jWmpypX0PiW5IcOh0Y+3xkYECVzvvD7oNZjE7PtE0h0hItbCF2K2E4LQj9EZT3If3g4z3wucfhrFoM+bvi+jnAsnkl2glu2sB+RpsA7eQtyT+cwt8slmoF6+K60V0JbKiavaqYXePK9pP//9ArKSVbEOY8AeesaMg=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3786.eurprd08.prod.outlook.com (20.178.46.93) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.15; Mon, 16 Sep 2019 03:34:18 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 03:34:18 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 3/3] Export symbols
Thread-Index: AQHVXbVx712HqB8DwEKMcT8jB+ziQactw89w
Date: Mon, 16 Sep 2019 03:34:18 +0000
Message-ID: <DB7PR08MB3082CFF0BC52F3E1BBCC8235F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-4-felipe.huici@neclab.eu>
In-Reply-To: <20190828152923.23734-4-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 492cae3f-aee3-456c-890e-d266af29f70e.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 9a4bb646-9601-4056-08f4-08d73a56c57f
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3786; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3786:|DB8PR08MB5305:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <DB8PR08MB5305544167E818371EF88D6DF78C0@DB8PR08MB5305.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:3044;OLM:3044;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(376002)(366004)(396003)(39850400004)(346002)(199004)(189003)(13464003)(76176011)(81166006)(8936002)(66066001)(81156014)(4326008)(6436002)(2906002)(229853002)(966005)(14454004)(25786009)(8676002)(74316002)(6506007)(53546011)(476003)(11346002)(486006)(7736002)(305945005)(7696005)(102836004)(186003)(446003)(26005)(5660300002)(55236004)(86362001)(52536014)(99286004)(14444005)(256004)(6116002)(71200400001)(71190400001)(3846002)(33656002)(478600001)(76116006)(2501003)(110136005)(53936002)(9686003)(316002)(55016002)(66446008)(64756008)(66556008)(66476007)(66946007)(6306002)(6246003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3786;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:ro;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: XFkPKL68NEzIo++rxJHDkbZ8+kNKTXRB5Q3sE4RmtqoXWmuY4TuTUuHIOLxVjMBa4HHcGppUJKxc5o/7KuLErWsGStuTg97AbohZ01TPTMhz4QTjjALXRkw3xSW6iWXlfNSKCMnDQvvzIgSDdsXDhMsTXieLLUy5c88nuJBRd5V7RVlNZ5l+/iT9RXI9Ufof1a8i9koYK9S0jzIehvyPzm2spBTzY0XiykW2w7fqmUX1euJYbAjyeZUhfQdStGeYJHp+avRZbKgY82dkNxZL0AxjppNV74438rAiL+YA1ccmrnOfaIxXkH7YxHgYUEvFS2GhQSvJRKqoSDUX+UMBf0JDEYYdnjr14K+wHV7QriILNNIKaXLcsO2y8vU+oj6mUKbzc0QSfseuT5vkw4pl4GBJQdv3VXrYLtO9xTUyIGc=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3786
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT017.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39850400004)(376002)(396003)(136003)(346002)(40434004)(13464003)(189003)(199004)(6246003)(6506007)(229853002)(52536014)(53546011)(4326008)(8936002)(102836004)(47776003)(316002)(50466002)(356004)(6116002)(3846002)(70586007)(70206006)(76130400001)(336012)(478600001)(966005)(26826003)(6306002)(9686003)(186003)(55016002)(107886003)(63350400001)(5660300002)(74316002)(305945005)(7736002)(446003)(11346002)(26005)(22756006)(14454004)(476003)(126002)(99286004)(110136005)(2501003)(76176011)(7696005)(23676004)(2486003)(14444005)(5024004)(486006)(81156014)(436003)(66066001)(81166006)(33656002)(8676002)(86362001)(2906002)(25786009);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB8PR08MB5305;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:ro;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 5fc348fe-d9ed-4cf4-f65a-08d73a56c1bf
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB8PR08MB5305; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: cXrwX2aw9HW6N9tX67W/Q7uYqIHTF5Nu8p4Pld4c61lmWsMNEne9NjWAchH7QRA0mPdqOmTIq52Ht3y9ZXWRxn1tjWy/AvTEQV+7zZv4AS+9wi84h9ockpIskcop9elU5fH506H95XRotPraiLiHlAdxJC8I79ncuf1ikFSEcc1CJeqKV+4DsjRDgfWI4bqOOZRQ8iqXhiTNatwvx/y7rGx/e8Qgp5A9eCi3JskFptdosHyylV4bLUmseDQOtRonQVCsvFNdvBeTa62KLAl1TtJdug8wWNz1mflzmcqYBBxZqY/7J2+kGjBstMZxMzHewFIkfp5kK/M544FXQiURXwM8z9BepcC56aAjqw/jIgzbi1oBoPhpNv3vd8tFiVLzoqiDmGFz0fUQ6dM46jZt3+0y3H4h7UGofSQ56xXnZ2c=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 03:34:25.0709 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 9a4bb646-9601-4056-08f4-08d73a56c57f
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5305
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQpMb29rcyBnb29kIHRvIG1lDQpSZXZpZXdlZC1ieTogSmlhIEhlIDxqdXN0aW4u
aGVAYXJtLmNvbT4NCg0KLS0NCkNoZWVycywNCkp1c3RpbiAoSmlhIEhlKQ0KDQoNCg0KDQo+IC0t
LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1pbmlvcy1kZXZlbCA8bWluaW9zLWRl
dmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc+IE9uIEJlaGFsZg0KPiBPZiBGZWxpcGUg
SHVpY2kNCj4gU2VudDogMjAxOeW5tDjmnIgyOOaXpSAyMzoyOQ0KPiBUbzogbWluaW9zLWRldmVs
QGxpc3RzLnhlbi5vcmcNCj4gQ2M6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT47IFNpbW9uIEt1ZW56ZXINCj4gPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0KPiBTdWJqZWN0
OiBbTWluaW9zLWRldmVsXSBbVU5JS1JBRlQvTElCTFVBIFBBVENIIDMvM10gRXhwb3J0IHN5bWJv
bHMNCj4NCj4gRm9yIG5vdyB3ZSBleHBvcnQgYWxsIGx1YV8qIHN5bWJvbHMsIGluY2x1ZGUgbHVh
X21haW4gZm9yIHRoZSBtYWluDQo+IGxvb3ANCj4NCj4gU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1
aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KPiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVu
emVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4NCj4gLS0tDQo+ICBleHBvcnRzeW1zLnVrIHwg
OTMNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKw0KPiArDQo+ICAxIGZpbGUgY2hhbmdlZCwgOTMgaW5zZXJ0aW9ucygrKQ0KPiAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsNCj4NCj4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5
bXMudWsgYi9leHBvcnRzeW1zLnVrDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAw
MDAwMDAuLjQ5ZDcxMmUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9leHBvcnRzeW1zLnVrDQo+
IEBAIC0wLDAgKzEsOTMgQEANCj4gK2x1YV9hYnNpbmRleA0KPiArbHVhX2FyaXRoDQo+ICtsdWFf
YXRwYW5pYw0KPiArbHVhX2NhbGxrDQo+ICtsdWFfY2hlY2tzdGFjaw0KPiArbHVhX2Nsb3NlDQo+
ICtsdWFfY29tcGFyZQ0KPiArbHVhX2NvbmNhdA0KPiArbHVhX2NvcHkNCj4gK2x1YV9jcmVhdGV0
YWJsZQ0KPiArbHVhX2R1bXANCj4gK2x1YV9lcnJvcg0KPiArbHVhX2djDQo+ICtsdWFfZ2V0YWxs
b2NmDQo+ICtsdWFfZ2V0ZmllbGQNCj4gK2x1YV9nZXRnbG9iYWwNCj4gK2x1YV9nZXRob29rDQo+
ICtsdWFfZ2V0aG9va2NvdW50DQo+ICtsdWFfZ2V0aG9va21hc2sNCj4gK2x1YV9nZXRpDQo+ICts
dWFfZ2V0aW5mbw0KPiArbHVhX2dldGxvY2FsDQo+ICtsdWFfZ2V0bWV0YXRhYmxlDQo+ICtsdWFf
Z2V0c3RhY2sNCj4gK2x1YV9nZXR0YWJsZQ0KPiArbHVhX2dldHRvcA0KPiArbHVhX2dldHVwdmFs
dWUNCj4gK2x1YV9nZXR1c2VydmFsdWUNCj4gK2x1YV9pZGVudA0KPiArbHVhX2lzY2Z1bmN0aW9u
DQo+ICtsdWFfaXNpbnRlZ2VyDQo+ICtsdWFfaXNudW1iZXINCj4gK2x1YV9pc3N0cmluZw0KPiAr
bHVhX2lzdXNlcmRhdGENCj4gK2x1YV9pc3lpZWxkYWJsZQ0KPiArbHVhX2xlbg0KPiArbHVhX2xv
YWQNCj4gK2x1YV9tYWluDQo+ICtsdWFfbmV3c3RhdGUNCj4gK2x1YV9uZXd0aHJlYWQNCj4gK2x1
YV9uZXd1c2VyZGF0YQ0KPiArbHVhX25leHQNCj4gK2x1YV9wY2FsbGsNCj4gK2x1YV9wdXNoYm9v
bGVhbg0KPiArbHVhX3B1c2hjY2xvc3VyZQ0KPiArbHVhX3B1c2hmc3RyaW5nDQo+ICtsdWFfcHVz
aGludGVnZXINCj4gK2x1YV9wdXNobGlnaHR1c2VyZGF0YQ0KPiArbHVhX3B1c2hsc3RyaW5nDQo+
ICtsdWFfcHVzaG5pbA0KPiArbHVhX3B1c2hudW1iZXINCj4gK2x1YV9wdXNoc3RyaW5nDQo+ICts
dWFfcHVzaHRocmVhZA0KPiArbHVhX3B1c2h2YWx1ZQ0KPiArbHVhX3B1c2h2ZnN0cmluZw0KPiAr
bHVhX3Jhd2VxdWFsDQo+ICtsdWFfcmF3Z2V0DQo+ICtsdWFfcmF3Z2V0aQ0KPiArbHVhX3Jhd2dl
dHANCj4gK2x1YV9yYXdsZW4NCj4gK2x1YV9yYXdzZXQNCj4gK2x1YV9yYXdzZXRpDQo+ICtsdWFf
cmF3c2V0cA0KPiArbHVhX3Jlc3VtZQ0KPiArbHVhX3JvdGF0ZQ0KPiArbHVhX3NldGFsbG9jZg0K
PiArbHVhX3NldGZpZWxkDQo+ICtsdWFfc2V0Z2xvYmFsDQo+ICtsdWFfc2V0aG9vaw0KPiArbHVh
X3NldGkNCj4gK2x1YV9zZXRsb2NhbA0KPiArbHVhX3NldG1ldGF0YWJsZQ0KPiArbHVhX3NldHRh
YmxlDQo+ICtsdWFfc2V0dG9wDQo+ICtsdWFfc2V0dXB2YWx1ZQ0KPiArbHVhX3NldHVzZXJ2YWx1
ZQ0KPiArbHVhX3N0YXR1cw0KPiArbHVhX3N0cmluZ3RvbnVtYmVyDQo+ICtsdWFfdG9ib29sZWFu
DQo+ICtsdWFfdG9jZnVuY3Rpb24NCj4gK2x1YV90b2ludGVnZXJ4DQo+ICtsdWFfdG9sc3RyaW5n
DQo+ICtsdWFfdG9udW1iZXJ4DQo+ICtsdWFfdG9wb2ludGVyDQo+ICtsdWFfdG90aHJlYWQNCj4g
K2x1YV90b3VzZXJkYXRhDQo+ICtsdWFfdHlwZQ0KPiArbHVhX3R5cGVuYW1lDQo+ICtsdWFfdXB2
YWx1ZWlkDQo+ICtsdWFfdXB2YWx1ZWpvaW4NCj4gK2x1YV92ZXJzaW9uDQo+ICtsdWFfeG1vdmUN
Cj4gK2x1YV95aWVsZGsNCj4gLS0NCj4gMi4xMS4wDQo+DQo+DQo+IF9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QNCj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IGh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCklNUE9SVEFOVCBO
T1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJl
IGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3Qg
dGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0
ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24s
IHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0aW9u
IGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 04:37:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 04:37:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9ilv-0000i1-Mh; Mon, 16 Sep 2019 04:37:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9ilu-0000hc-5l
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 04:37:54 +0000
X-Inumbo-ID: bdb16522-d83b-11e9-95d5-12813bfff9fa
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.3.42]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bdb16522-d83b-11e9-95d5-12813bfff9fa;
 Mon, 16 Sep 2019 04:37:51 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=//F41QxusmaT+ihuBbKQ+PiYEuIocRBCBkwnWpGOeEI=;
 b=toNjZKUPClu8k6ARuqa8t0X45gOJnPwEoLagnON9imDJp3TsoUEOnrjebmWUiNgkQ2Dap9L7WTrgDFabSYr0YqhwUGEXszE5r1EY168xHav4AEPPFa41KLoKwGd8jDxp250AeotwUysOVCnRWStZypbMyKQefGJaHXTAPIPf9tk=
Received: from VI1PR08CA0170.eurprd08.prod.outlook.com (2603:10a6:800:d1::24)
 by AM5PR0802MB2483.eurprd08.prod.outlook.com (2603:10a6:203:9b::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Mon, 16 Sep
 2019 04:37:48 +0000
Received: from VE1EUR03FT029.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::201) by VI1PR08CA0170.outlook.office365.com
 (2603:10a6:800:d1::24) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15 via Frontend
 Transport; Mon, 16 Sep 2019 04:37:48 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT029.mail.protection.outlook.com (10.152.18.107) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 04:37:47 +0000
Received: ("Tessian outbound 968ab6b62146:v31");
 Mon, 16 Sep 2019 04:37:44 +0000
X-CR-MTA-TID: 64aa7808
Received: from 976e6f52c8a0.2 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.0.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 E3951E23-0FA4-4269-9E23-60F58DD84FDB.1; 
 Mon, 16 Sep 2019 04:37:39 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2058.outbound.protection.outlook.com [104.47.0.58])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 976e6f52c8a0.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 04:37:39 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=efFTm5mpFNjavF8/zylpK3W6whxbH2+VlWZid6lYytmgkFbMuqUlo3C8ccPNYCNi+SlSvEl32pcRTWwRcOOscihnSxpB/wKjSMvgWwqQb6KxO8wumRQSzLnuuQayoxovufYsmMzUNzhICtrqgi3/1KqAftQFgd3+iR9CR0cK3dn6VV2rISqQ4no/Yr+j9piiMdo0NB8T9INVZVVfTwrwr/1SS/S4P1EXWwt3qnyTUJbMVyXUUEKloPX4WDhyOgTmVWNvytXOpI6zlyL/0REBfuv3PGv6Fe1NBhgQ43WTUOJD3tl9vRzq6CEbI00aUsxUkouiqxCAEAWWYKQZslClIQ==
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=qdIAfgo0KRk784Xk1b6hqNivDqHnIMcgLvWMy8UnV9o=;
 b=NMHm6hK7usmah4OexwTxwe1h98Ov/do55/WQRuG6/EBvkFs/K2M38yd1ojNXkWHdRiuTmmPwGtNNmzOJe8z1ethKZT7ZHw+6UOGf5ZZeoWAUdiOdBU784jwqsB1RJeVEXWjT19VC+F0DqzUwzHDYomlYVVBrZ4m3Gu6237yfnBS6ULdyguFmLRqMDyP7yMCjxGl67OFNa3zOHgU1XzFXIH2gZlNYiBTT7z2BcvcsSgr88gQ71r+AOD5G2NCQ4fKMp4wGdahIuAkcWlC3Gho9bOJJDdT6xvqkcLXqMdFm8MdqPYJkxzkGMBeohN5v8LHLIio+BSBjUJZLvfdN74ZptQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=qdIAfgo0KRk784Xk1b6hqNivDqHnIMcgLvWMy8UnV9o=;
 b=tj9Kw0HIbs+4CEJ6ablNyBq4zwMzWThEfcvuREtg+QRJuvK6Y+oIy5PhkI4W/OhAzNNllj89aXS1rd4Ohi1ze/YwyPLfHG1PqLYEZOCjaUDdlqlGHtWpaW9caVVbPNCQF2Kl5tguECnyDKvSYYZnPtLjodLuFa67Y0CAcLccEK0=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3403.eurprd08.prod.outlook.com (20.177.120.216) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.18; Mon, 16 Sep 2019 04:37:38 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 04:37:38 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>, Felipe Huici
 <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 3/3] Export symbols
Thread-Index: AQHVXbVx712HqB8DwEKMcT8jB+ziQactw89wgAARh2A=
Date: Mon, 16 Sep 2019 04:37:37 +0000
Message-ID: <DB7PR08MB3082D1279ACAB4C816EB5EEFF78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-4-felipe.huici@neclab.eu>
 <DB7PR08MB3082CFF0BC52F3E1BBCC8235F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
In-Reply-To: <DB7PR08MB3082CFF0BC52F3E1BBCC8235F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: a481c50f-bee8-46c4-b182-a38ba794cd62.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 5dbd5c72-0af1-428a-2724-08d73a5f9ff3
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3403; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3403:|DB7PR08MB3403:|AM5PR0802MB2483:
X-MS-Exchange-PUrlCount: 1
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM5PR0802MB248346C8C30F282DDEB4C6A6F78C0@AM5PR0802MB2483.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(396003)(39850400004)(136003)(366004)(376002)(13464003)(189003)(199004)(55016002)(486006)(478600001)(229853002)(81166006)(76116006)(66446008)(66946007)(66556008)(66476007)(64756008)(81156014)(52536014)(5660300002)(99286004)(4326008)(25786009)(8936002)(2940100002)(7696005)(6246003)(66066001)(7736002)(14454004)(102836004)(53546011)(110136005)(53936002)(6306002)(9686003)(6506007)(71190400001)(71200400001)(74316002)(446003)(966005)(14444005)(26005)(76176011)(186003)(33656002)(305945005)(55236004)(256004)(5024004)(86362001)(2906002)(6116002)(3846002)(2501003)(476003)(11346002)(8676002)(316002)(6436002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3403;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: SBwYENbro+bnN4Xk5QmF7MyqXiTyi2e9SUiyl3Okbpxp6wRRbmG1Hv+0G6+ysAV2CjFlwhynFZvQ97WBon0/1ut4FW4jeUwlxZBGjr4NOWvtn05tYjyQVfTmheUQpRN2qNUMLtPynQUjr+vf5rq1pUEEmd9ZQw8WavpHM4GrWgHmlN1j3+IYYz0xzY2Rqd+ZsErK9aoQvhv6iV5hYo/n46fOagcN/MDrj+n37oGDi/hNEsKMmYMzJDfhLv8zu/zlYZSP4wja9ElM1OSSegCkYbZS8lLE+5N9Zt1Knk3Vtl0Z6EiO4hG0SxXxjaHimfnN/mD2b6JISsoyuEjJTQfWhK/B2kks2o7UL2fxjoC13nRdTzLJwk/qNBBmx/7N/1Uvo7vS20jsl4FUrv4+af/G3MCT4dA4a2v9IYxPGcTRjjs=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3403
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT029.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(136003)(396003)(39860400002)(346002)(13464003)(40434004)(189003)(199004)(2501003)(3846002)(6116002)(47776003)(66066001)(2906002)(229853002)(50466002)(81156014)(81166006)(8676002)(8936002)(86362001)(26005)(126002)(5660300002)(446003)(76176011)(11346002)(2486003)(23676004)(476003)(356004)(186003)(336012)(6246003)(107886003)(55016002)(7696005)(436003)(6306002)(9686003)(53546011)(6506007)(63350400001)(102836004)(52536014)(70206006)(70586007)(14444005)(5024004)(76130400001)(14454004)(99286004)(26826003)(478600001)(7736002)(33656002)(966005)(486006)(305945005)(74316002)(110136005)(2940100002)(316002)(22756006)(25786009)(36906005)(4326008);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2483;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: b3f35a2e-e8bb-4cf4-8c8a-08d73a5f9a55
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM5PR0802MB2483; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: Tt4PoWmRxWv/dZYRTkKhSoJlHxFWoSmzhcsaxEdUvWkunDXMoD1u2Sgignu70I6KZXTAwz1QQaAWDDAbMjdX0mZ8ZvucRRk5DHitMKUb3VSLCJ3FW6iw/l/nW0wS2+NJQJhBhAc9lcbDRGYI2jSBUJrSPBm3YpZSZuk9u9xbEC7OmRQA5DFNjuHnuK+m8cxaa3xu5i+4i2bE/6oT7IHyQl3+LVWZekw1nQOCwk0Qpacfd3/tg/Sch+9Qn3p7BNYzMNQvnUCrh5eJqHYFdojTA2WiCN3KMfgyxzR5bYRwJpv2p3IbDChnUwg+69vA80fNmW5nHkLsOVxNLvtz1G3Bk/BAQuparJMkZxu9pKrAMh9llBcgQRE/eP4KOBGGHBuOO79TDm1SgJEyeGf9aSHEzDnAN98aqq7BWi3SnCFINdE=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 04:37:47.4960 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 5dbd5c72-0af1-428a-2724-08d73a5f9ff3
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2483
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29ycnksIGZlbGlwZQ0KUGxlYXNlIGlnbm9yZSBpdCwgSSByZXBsaWVkIHRvIGEgd3JvbmcgbWFp
bA0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IE1pbmlvcy1kZXZlbCA8
bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmc+IE9uIEJlaGFsZg0KPiBP
ZiBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKQ0KPiBTZW50OiAyMDE55bm0OeaciDE2
5pelIDExOjM0DQo+IFRvOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+OyBt
aW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZw0KPiBDYzogU2ltb24gS3VlbnplciA8c2ltb24ua3Vl
bnplckBuZWNsYWIuZXU+DQo+IFN1YmplY3Q6IFJlOiBbTWluaW9zLWRldmVsXSBbVU5JS1JBRlQv
TElCTFVBIFBBVENIIDMvM10gRXhwb3J0IHN5bWJvbHMNCj4NCj4gSGkgRmVsaXBlDQo+IExvb2tz
IGdvb2QgdG8gbWUNCj4gUmV2aWV3ZWQtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+DQo+
DQo+IC0tDQo+IENoZWVycywNCj4gSnVzdGluIChKaWEgSGUpDQo+DQo+DQo+DQo+DQo+ID4gLS0t
LS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1pbmlvcy1k
ZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbg0KPiBCZWhhbGYNCj4gPiBPZiBG
ZWxpcGUgSHVpY2kNCj4gPiBTZW50OiAyMDE55bm0OOaciDI45pelIDIzOjI5DQo+ID4gVG86IG1p
bmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnDQo+ID4gQ2M6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1
aWNpQG5lY2xhYi5ldT47IFNpbW9uIEt1ZW56ZXINCj4gPiA8c2ltb24ua3VlbnplckBuZWNsYWIu
ZXU+DQo+ID4gU3ViamVjdDogW01pbmlvcy1kZXZlbF0gW1VOSUtSQUZUL0xJQkxVQSBQQVRDSCAz
LzNdIEV4cG9ydCBzeW1ib2xzDQo+ID4NCj4gPiBGb3Igbm93IHdlIGV4cG9ydCBhbGwgbHVhXyog
c3ltYm9scywgaW5jbHVkZSBsdWFfbWFpbiBmb3IgdGhlIG1haW4NCj4gPiBsb29wDQo+ID4NCj4g
PiBTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQo+
ID4gU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+
DQo+ID4gLS0tDQo+ID4gIGV4cG9ydHN5bXMudWsgfCA5Mw0KPiA+DQo+ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4gPiArDQo+ID4g
IDEgZmlsZSBjaGFuZ2VkLCA5MyBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0
NCBleHBvcnRzeW1zLnVrDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4
cG9ydHN5bXMudWsNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAu
LjQ5ZDcxMmUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZXhwb3J0c3ltcy51aw0KPiA+
IEBAIC0wLDAgKzEsOTMgQEANCj4gPiArbHVhX2Fic2luZGV4DQo+ID4gK2x1YV9hcml0aA0KPiA+
ICtsdWFfYXRwYW5pYw0KPiA+ICtsdWFfY2FsbGsNCj4gPiArbHVhX2NoZWNrc3RhY2sNCj4gPiAr
bHVhX2Nsb3NlDQo+ID4gK2x1YV9jb21wYXJlDQo+ID4gK2x1YV9jb25jYXQNCj4gPiArbHVhX2Nv
cHkNCj4gPiArbHVhX2NyZWF0ZXRhYmxlDQo+ID4gK2x1YV9kdW1wDQo+ID4gK2x1YV9lcnJvcg0K
PiA+ICtsdWFfZ2MNCj4gPiArbHVhX2dldGFsbG9jZg0KPiA+ICtsdWFfZ2V0ZmllbGQNCj4gPiAr
bHVhX2dldGdsb2JhbA0KPiA+ICtsdWFfZ2V0aG9vaw0KPiA+ICtsdWFfZ2V0aG9va2NvdW50DQo+
ID4gK2x1YV9nZXRob29rbWFzaw0KPiA+ICtsdWFfZ2V0aQ0KPiA+ICtsdWFfZ2V0aW5mbw0KPiA+
ICtsdWFfZ2V0bG9jYWwNCj4gPiArbHVhX2dldG1ldGF0YWJsZQ0KPiA+ICtsdWFfZ2V0c3RhY2sN
Cj4gPiArbHVhX2dldHRhYmxlDQo+ID4gK2x1YV9nZXR0b3ANCj4gPiArbHVhX2dldHVwdmFsdWUN
Cj4gPiArbHVhX2dldHVzZXJ2YWx1ZQ0KPiA+ICtsdWFfaWRlbnQNCj4gPiArbHVhX2lzY2Z1bmN0
aW9uDQo+ID4gK2x1YV9pc2ludGVnZXINCj4gPiArbHVhX2lzbnVtYmVyDQo+ID4gK2x1YV9pc3N0
cmluZw0KPiA+ICtsdWFfaXN1c2VyZGF0YQ0KPiA+ICtsdWFfaXN5aWVsZGFibGUNCj4gPiArbHVh
X2xlbg0KPiA+ICtsdWFfbG9hZA0KPiA+ICtsdWFfbWFpbg0KPiA+ICtsdWFfbmV3c3RhdGUNCj4g
PiArbHVhX25ld3RocmVhZA0KPiA+ICtsdWFfbmV3dXNlcmRhdGENCj4gPiArbHVhX25leHQNCj4g
PiArbHVhX3BjYWxsaw0KPiA+ICtsdWFfcHVzaGJvb2xlYW4NCj4gPiArbHVhX3B1c2hjY2xvc3Vy
ZQ0KPiA+ICtsdWFfcHVzaGZzdHJpbmcNCj4gPiArbHVhX3B1c2hpbnRlZ2VyDQo+ID4gK2x1YV9w
dXNobGlnaHR1c2VyZGF0YQ0KPiA+ICtsdWFfcHVzaGxzdHJpbmcNCj4gPiArbHVhX3B1c2huaWwN
Cj4gPiArbHVhX3B1c2hudW1iZXINCj4gPiArbHVhX3B1c2hzdHJpbmcNCj4gPiArbHVhX3B1c2h0
aHJlYWQNCj4gPiArbHVhX3B1c2h2YWx1ZQ0KPiA+ICtsdWFfcHVzaHZmc3RyaW5nDQo+ID4gK2x1
YV9yYXdlcXVhbA0KPiA+ICtsdWFfcmF3Z2V0DQo+ID4gK2x1YV9yYXdnZXRpDQo+ID4gK2x1YV9y
YXdnZXRwDQo+ID4gK2x1YV9yYXdsZW4NCj4gPiArbHVhX3Jhd3NldA0KPiA+ICtsdWFfcmF3c2V0
aQ0KPiA+ICtsdWFfcmF3c2V0cA0KPiA+ICtsdWFfcmVzdW1lDQo+ID4gK2x1YV9yb3RhdGUNCj4g
PiArbHVhX3NldGFsbG9jZg0KPiA+ICtsdWFfc2V0ZmllbGQNCj4gPiArbHVhX3NldGdsb2JhbA0K
PiA+ICtsdWFfc2V0aG9vaw0KPiA+ICtsdWFfc2V0aQ0KPiA+ICtsdWFfc2V0bG9jYWwNCj4gPiAr
bHVhX3NldG1ldGF0YWJsZQ0KPiA+ICtsdWFfc2V0dGFibGUNCj4gPiArbHVhX3NldHRvcA0KPiA+
ICtsdWFfc2V0dXB2YWx1ZQ0KPiA+ICtsdWFfc2V0dXNlcnZhbHVlDQo+ID4gK2x1YV9zdGF0dXMN
Cj4gPiArbHVhX3N0cmluZ3RvbnVtYmVyDQo+ID4gK2x1YV90b2Jvb2xlYW4NCj4gPiArbHVhX3Rv
Y2Z1bmN0aW9uDQo+ID4gK2x1YV90b2ludGVnZXJ4DQo+ID4gK2x1YV90b2xzdHJpbmcNCj4gPiAr
bHVhX3RvbnVtYmVyeA0KPiA+ICtsdWFfdG9wb2ludGVyDQo+ID4gK2x1YV90b3RocmVhZA0KPiA+
ICtsdWFfdG91c2VyZGF0YQ0KPiA+ICtsdWFfdHlwZQ0KPiA+ICtsdWFfdHlwZW5hbWUNCj4gPiAr
bHVhX3VwdmFsdWVpZA0KPiA+ICtsdWFfdXB2YWx1ZWpvaW4NCj4gPiArbHVhX3ZlcnNpb24NCj4g
PiArbHVhX3htb3ZlDQo+ID4gK2x1YV95aWVsZGsNCj4gPiAtLQ0KPiA+IDIuMTEuMA0KPiA+DQo+
ID4NCj4gPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K
PiA+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCj4gPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcNCj4gPiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVsDQo+IElNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0
aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlDQo+IGNvbmZpZGVudGlhbCBhbmQgbWF5
IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkDQo+IHJlY2lw
aWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlz
Y2xvc2UgdGhlDQo+IGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55
IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlDQo+IGluZm9ybWF0aW9uIGluIGFueSBtZWRp
dW0uIFRoYW5rIHlvdS4NCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18NCj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KPiBNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcNCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9m
IHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkg
YWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50
LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9z
ZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9z
ZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsg
eW91Lg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 04:40:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 04:40:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9io2-0001Gu-1u; Mon, 16 Sep 2019 04:40:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9io0-00018O-SH
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 04:40:04 +0000
X-Inumbo-ID: 0c0f19f8-d83c-11e9-95d5-12813bfff9fa
Received: from EUR03-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.5.40]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 0c0f19f8-d83c-11e9-95d5-12813bfff9fa;
 Mon, 16 Sep 2019 04:40:03 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=sbLV7d4VTMl1kVhgSf+WOE4Ss08b+GFt1k22yIKRbjM=;
 b=TZLQqEkHgkTrl40z0jyGYzDa3nyVoUiU1fc5xX+PfII7vAw4tqSyvxMN26j2xN7mgMfZAi2uQqACbOhaSWf514M1DKbiA7Qrv9f9WY/oJJTntpgEaOCNp3RJtfh+8NxICGCmS3FR4K+P+mlojef4dBUSVKES6fmQO86nshNYKn0=
Received: from VE1PR08CA0036.eurprd08.prod.outlook.com (2603:10a6:803:104::49)
 by DB6PR0802MB2280.eurprd08.prod.outlook.com (2603:10a6:4:80::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.26; Mon, 16 Sep
 2019 04:39:58 +0000
Received: from VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::201) by VE1PR08CA0036.outlook.office365.com
 (2603:10a6:803:104::49) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.20 via Frontend
 Transport; Mon, 16 Sep 2019 04:39:58 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT005.mail.protection.outlook.com (10.152.18.172) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 04:39:57 +0000
Received: ("Tessian outbound 4a9865a8921c:v31");
 Mon, 16 Sep 2019 04:39:57 +0000
X-CR-MTA-TID: 64aa7808
Received: from b1183f747fd3.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.12.53]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 EDF3F342-E1C8-4F6E-9F48-AB320F586411.1; 
 Mon, 16 Sep 2019 04:39:52 +0000
Received: from EUR04-DB3-obe.outbound.protection.outlook.com
 (mail-db3eur04lp2053.outbound.protection.outlook.com [104.47.12.53])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b1183f747fd3.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 04:39:52 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jA6l0vQ81b+g/Zj5oXAnLTxvYdzV116DmyAbRYC/i6LRi8/BYyxPb1SyxaW/nYANyenBDyr7b0DKz7Tu48I9I73aoGMK1EkHxwB4VnhYj+abr1RUB2S2e+RPxmdWV9MZ0ewi4MK3KTqRdourJYQx4I3k0MK6cdXVx1orErGsd/q3jdVfJYf37A4ToGGLe0RGuSJJTLICUHy2VIveJy8bPhgg1zeeK5Uq3IiaZ9T0mntSJi1CRbAR9cVgwdPY24qBqi5UVYZvQCv/OriClHocfJ+HS8H5PlIpIcd0WOxObV6bxPu5v4cvndImWSJ8iW9wB27RaDPgWBLDMJPbJW06ZQ==
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=lmjt4ZyEZqPu2KYBOMY1XD1Z79QaQukjlTE+hnJtQ+c=;
 b=Ek33Hvz3oyQe5qgopaeRvBVlvSr6KeFBANVCnivYIoUP+HURehdq7IrliVG16hEFz2prCt8sw+LzFkmYJG7Y/L+UFTsgIgR8rm8z8JWJn2NeTWAZo+er4S89wzsEM7u1880Z7denEjuTlnO/kyWBvP4mgJEXIVUXbhJFqgRrPCrzQvJA5c3GZq2nDSNrxZkbRI2/bUEw8D9PZ51SqNJo2/81MjY809ic6nYtTG96nbXAAjMpDDZ6IE38YzfWgSAUtVCFqLyldhLMWQnI+sTcipzPrKxshO7ObZLqR+ifphXV/PQjCIUoWXx2KVonzWDZ3cCjvrKlfp+cgCVwMHcgug==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lmjt4ZyEZqPu2KYBOMY1XD1Z79QaQukjlTE+hnJtQ+c=;
 b=l27DsBRJThJtJiSEMGyJRawpEqcVC1Onzoc6d/+2ZDI4kGjSnAbLVKx3UervoBN6CJOC3sGK6TlQ+715Yldqabl5ymMPRKVFBZ78Y6aybzpnvu8swuLpKuESxF1gWNZd/x8QOJqLTjJQ9MNl/d7L+ZIqQ3D5Xs6uCgOdFpm/uZQ=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3403.eurprd08.prod.outlook.com (20.177.120.216) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.18; Mon, 16 Sep 2019 04:39:51 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 04:39:51 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 1/3] Introduce library
 skeleton
Thread-Index: AQHVXbVrV1mKZWyzZE6cFHhGC0sg06ct1h8w
Date: Mon, 16 Sep 2019 04:39:51 +0000
Message-ID: <DB7PR08MB308273D01F0A381CF1A15483F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190828152923.23734-1-felipe.huici@neclab.eu>
 <20190828152923.23734-2-felipe.huici@neclab.eu>
In-Reply-To: <20190828152923.23734-2-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 11c42e21-6772-4cf0-be1e-92724f102fcc.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 1f584ef6-15e6-49f3-23a9-08d73a5fed70
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3403; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3403:|DB6PR0802MB2280:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <DB6PR0802MB2280113DFBCB9653B438A410F78C0@DB6PR0802MB2280.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(396003)(39850400004)(136003)(366004)(376002)(13464003)(189003)(199004)(55016002)(486006)(478600001)(229853002)(81166006)(76116006)(66446008)(66946007)(66556008)(66476007)(64756008)(81156014)(52536014)(5660300002)(99286004)(4326008)(25786009)(8936002)(7696005)(6246003)(66066001)(7736002)(14454004)(102836004)(53546011)(110136005)(53936002)(6306002)(9686003)(6506007)(71190400001)(71200400001)(74316002)(446003)(966005)(14444005)(26005)(76176011)(186003)(33656002)(305945005)(55236004)(256004)(86362001)(2906002)(6116002)(3846002)(2501003)(476003)(11346002)(8676002)(316002)(6436002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3403;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: h0ThjvYFK57OIG9OzR0TO1jrA5zUzA5I+NtP4tmM+jwI9wdBxCCFzOi2J0uWBUE0ymmi79vDRtuXx8kSQsO4REAzVvS9lnYQFAkYZdl194z0HiaJ3SVyumFL7Y1uvf/FcBp0tZhZJuCsLnOXikChfIpP2Nn2EyMbd2Knb1C3jR/q/+OOCWFRPXntxBUxzlTPA2w5KwWq+3H5QoAVGv1pMJvXQP0cQjKcvfgf7ddOzev3xiddfa/8ktoE9LT50sc02OogewWtj8pXq7FxwkCwiGKvmQtrLu1RxJpAjmppLgF4glB4oXSXArQ2MElpZchi25dP+ViHRicyxTP8lQ6QgQHxyKQQLbui7XN4/dVf+CnDe4tH+rES3Gfl1RpAAXSgg/WZblL3wMoIykKhbkPnUikbzbjqA/sNGHrOkQiQW2g=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3403
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT005.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(136003)(39860400002)(346002)(396003)(40434004)(199004)(189003)(13464003)(229853002)(70206006)(126002)(25786009)(7736002)(66066001)(47776003)(14444005)(3846002)(26005)(6116002)(36906005)(6306002)(9686003)(86362001)(74316002)(55016002)(5024004)(107886003)(486006)(305945005)(6246003)(316002)(110136005)(4326008)(33656002)(2906002)(22756006)(70586007)(476003)(14454004)(11346002)(446003)(76130400001)(186003)(2501003)(336012)(63350400001)(52536014)(966005)(436003)(26826003)(5660300002)(7696005)(99286004)(356004)(478600001)(102836004)(81156014)(81166006)(6506007)(53546011)(8936002)(8676002)(23676004)(76176011)(2486003)(50466002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0802MB2280;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 6ce34197-3001-46c2-3ab7-08d73a5fe9a3
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB6PR0802MB2280; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: DSd6Pxfj5rQ/f5LZBox7xR+EnD3alVB5AX+ksMvJnW1Ja5uKFiAyU/kgPnOfLg5ePg26DGoK+4IWm+labzMIu9y05qQtnSF1duBKg42O4sjkA6tnAymm4nJ4uuH3XEDoshU0cFytqXK/sAYR3GZShVG4T6zL934ci6ZKOFkqK+6NDZ7K6aydyIb/jqZIzX+c70Lp51xnKQajyVeJY7Lt51T7Lr891eB92tkC4aqlWPvK8NMwjQ7vCM01bYo/vVSfhWdX6Dk/f88mi3ImziksunCMtoZ9H44Ao6rLmYbtaKjghJ+57kmuAiaYaGQjwv/o87VvuMg8N46SrytqB60WPLxmXXX7E8wkA1WwV1C8vKeAaRpY1WW0O0ieOAt/Hxyjk5cytmj7SKjkKpauEQoj2oixIm//BBAsOIF4EkGtzwI=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 04:39:57.4616 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 1f584ef6-15e6-49f3-23a9-08d73a5fed70
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2280
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH 1/3] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksIEZlbGlwZQ0KUmV2aWV3ZWQtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+DQoNCj4g
LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWluaW9zLWRldmVsIDxtaW5pb3Mt
ZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZz4gT24gQmVoYWxmDQo+IE9mIEZlbGlw
ZSBIdWljaQ0KPiBTZW50OiAyMDE55bm0OOaciDI45pelIDIzOjI5DQo+IFRvOiBtaW5pb3MtZGV2
ZWxAbGlzdHMueGVuLm9yZw0KPiBDYzogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFi
LmV1PjsgU2ltb24gS3Vlbnplcg0KPiA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IFN1Ympl
Y3Q6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVC9MSUJMVUEgUEFUQ0ggMS8zXSBJbnRyb2R1Y2Ug
bGlicmFyeQ0KPiBza2VsZXRvbg0KPg0KPiBXZSB1c2UgdGhlIEJTRC0zLUNsYXVzZSBsaWNlbnNl
IGZvciB0aGlzIGxpYnJhcnkgZ2x1ZSBjb2RlLg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBGZWxpcGUg
SHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQo+IFNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1
ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0KPiAtLS0NCj4gIC5naXRpZ25vcmUgICAg
ICB8IDI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgQ09ESU5HX1NUWUxFLm1kIHwg
IDQgKysrKw0KPiAgQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKw0KPiAgQ09QWUlORy5tZCAgICAg
IHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBDb25maWcu
dWsgICAgICAgfCAgNCArKysrDQo+ICBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysrKysrKysrKw0K
PiAgUkVBRE1FLm1kICAgICAgIHwgIDkgKysrKysrKysrDQo+ICA3IGZpbGVzIGNoYW5nZWQsIDk4
IGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlDQo+ICBjcmVh
dGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09O
VFJJQlVUSU5HLm1kDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZA0KPiAgY3JlYXRl
IG1vZGUgMTAwNjQ0IENvbmZpZy51aw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJT
Lm1kDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kDQo+DQo+IGRpZmYgLS1naXQgYS8u
Z2l0aWdub3JlIGIvLmdpdGlnbm9yZQ0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAw
MDAwMDAwLi43OTVmNGIzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvLmdpdGlnbm9yZQ0KPiBA
QCAtMCwwICsxLDI3IEBADQo+ICsqLmRlcGVuZA0KPiArKi5vDQo+ICsqLmENCj4gKyouZA0KPiAr
Ki5zbw0KPiArKi5vcmlnDQo+ICsqLnJlag0KPiArKi5iYWsNCj4gKyouc3dwDQo+ICsqfg0KPiAr
LCoNCj4gK1wjKlwjDQo+ICsuXCMqDQo+ICtcI18qXCMNCj4gKy5cI18qDQo+ICshLmdpdGlnbm9y
ZQ0KPiArLioNCj4gKw0KPiArIyBnbnUgZ2xvYmFsIGZpbGVzDQo+ICtHUEFUSA0KPiArR1JUQUdT
DQo+ICtHU1lNUw0KPiArR1RBR1MNCj4gKw0KPiArIyBjc2NvcGUgZmlsZXMNCj4gK2NzY29wZS4q
DQo+ICtuY3Njb3BlLioNCj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQo+IGRpZmYgLS1n
aXQgYS9DT0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZTEUubWQNCj4gbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uNTczMDA0MQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi
L0NPRElOR19TVFlMRS5tZA0KPiBAQCAtMCwwICsxLDQgQEANCj4gK0NvZGluZyBTdHlsZQ0KPiAr
PT09PT09PT09PT09DQo+ICsNCj4gK1BsZWFzZSByZWZlciB0byB0aGUgYENPRElOR19TVFlMRS5t
ZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lg0KPiBkaWZmIC0tZ2l0IGEv
Q09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQo+IGluZGV4IDAwMDAwMDAuLjE0ZjZhYzYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9DT05U
UklCVVRJTkcubWQNCj4gQEAgLTAsMCArMSw0IEBADQo+ICtDb250cmlidXRpbmcgdG8gVW5pa3Jh
ZnQNCj4gKz09PT09PT09PT09PT09PT09PT09PT09PQ0KPiArDQo+ICtQbGVhc2UgcmVmZXIgdG8g
dGhlIGBDT05UUklCVVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9y
eS4NCj4gZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kDQo+IG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAuLjNiMGE5ODENCj4gLS0tIC9kZXYvbnVsbA0KPiAr
KysgYi9DT1BZSU5HLm1kDQo+IEBAIC0wLDAgKzEsMzkgQEANCj4gK0xpY2Vuc2UNCj4gKz09PT09
PT0NCj4gKw0KPiArVW5pa3JhZnQgbHVhIHdyYXBwZXJzDQo+ICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tDQo+ICsNCj4gK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFwcGVy
IGNvZGUgdG8gYnVpbGQgbHVhIHdpdGggVW5pa3JhZnQuDQo+ICtFYWNoIEMgY29kZSBmaWxlIGlu
IHRoaXMgcmVwb3NpdG9yeSBzaG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlDQo+ICtjb3B5cmlnaHQg
b3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBjb2RlIGlzDQo+
ICtsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93
aW5nIGNvcHlyaWdodA0KPiArbm90aWNlIHdpbGwgYXBwbHk6DQo+ICsNCj4gKyAgICAgQ29weXJp
Z2h0IChjKSBZZWFyLCBJbnN0aXR1dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCj4gKw0KPiAr
ICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCj4gKyAgICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQo+ICsgICAgIGFyZSBtZXQ6DQo+ICsN
Cj4gKyAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQNCj4gKyAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KPiArICAgICAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlDQo+IGNvcHlyaWdo
dA0KPiArICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQo+ICsgICAgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KPiBkaXN0cmlidXRpb24uDQo+ICsg
ICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBu
YW1lcyBvZiBpdHMNCj4gKyAgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cw0KPiBkZXJpdmVkIGZyb20NCj4gKyAgICAgICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCj4gKw0K
PiArICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQNCj4gQ09OVFJJQlVUT1JTICJBUyBJUyINCj4gKyAgICAgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQo+IExJTUlURUQgVE8sIFRI
RQ0KPiArICAgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBDQo+IFBBUlRJQ1VMQVIgUFVSUE9TRQ0KPiArICAgICBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1INCj4gQ09OVFJJQlVUT1JT
IEJFDQo+ICsgICAgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsDQo+IEVYRU1QTEFSWSwgT1INCj4gKyAgICAgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywNCj4gUFJPQ1VSRU1FTlQgT0YNCj4gKyAg
ICAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7DQo+IE9SIEJVU0lORVNTDQo+ICsgICAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YNCj4gTElBQklMSVRZLCBXSEVUSEVSIElODQo+ICsgICAg
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUg0KPiBPVEhFUldJU0UpDQo+ICsgICAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGDQo+IEFEVklTRUQgT0YgVEhFDQo+ICsgICAg
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KPiArDQo+IGRpZmYgLS1naXQgYS9Db25maWcu
dWsgYi9Db25maWcudWsNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4u
YmEwZWMxNw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL0NvbmZpZy51aw0KPiBAQCAtMCwwICsx
LDQgQEANCj4gK2NvbmZpZyBMSUJMVUENCj4gKyAgICAgYm9vbCAiVGhlIEx1YSBwcm9ncmFtbWlu
ZyBsYW5ndWFnZSINCj4gKyAgICAgZGVmYXVsdCBuDQo+ICsgICAgIHNlbGVjdCBMSUJOT0xJQkMg
aWYgIUhBVkVfTElCQw0KPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJTkVS
Uy5tZA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi5lYzgzYzdiDQo+
IC0tLSAvZGV2L251bGwNCj4gKysrIGIvTUFJTlRBSU5FUlMubWQNCj4gQEAgLTAsMCArMSwxMSBA
QA0KPiArTWFpbnRhaW5lcnMgTGlzdA0KPiArPT09PT09PT09PT09PT09PQ0KPiArDQo+ICtGb3Ig
bm90ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvDQo+
IGBNQUlOVEFJTkVSUy5tZGAgaW4NCj4gK3RoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuDQo+
ICsNCj4gKyAgICAgTElCUENSRS1VTklLUkFGVA0KPiArICAgICBNOiAgICAgIEZlbGlwZSBIdWlj
aSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCj4gKyAgICAgTTogICAgICBTaW1vbiBLdWVuemVy
IDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4NCj4gKyAgICAgTDogICAgICBtaW5pb3MtZGV2ZWxA
bGlzdHMueGVuLm9yZw0KPiArICAgICBGOiAqDQo+IGRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9S
RUFETUUubWQNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMTYzM2Vi
Mg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL1JFQURNRS5tZA0KPiBAQCAtMCwwICsxLDkgQEAN
Cj4gK2x1YSBmb3IgVW5pa3JhZnQNCj4gKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQo+
ICsNCj4gK1RoaXMgaXMgdGhlIHBvcnQgb2YgbHVhIGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBs
aWJyYXJ5LiBCeSBkZWZhdWx0LA0KPiArd2hlbiBydW5uaW5nIHRoZSBwb3J0IHdpbGwgZ28gaW50
byBpbnRlcmFjdGl2ZSBtb2RlLiBBbHRlcm5hdGl2ZWx5LA0KPiAreW91IGNhbiBydW4gYSBzY3Jp
cHQgZnJvbSBhIGZpbGUgaWYgcGFzc2VkIGFzIGEgaW5pdHJkIHBhcmFtZXRlci4NCj4gKw0KPiAr
UGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBhcyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0
aW9uIGluIHRoZQ0KPiBgZG9jL2ANCj4gK3N1YmRpcmVjdG9yeSBvZiB0aGUgbWFpbiB1bmlrcmFm
dCByZXBvc2l0b3J5Lg0KPiAtLQ0KPiAyLjExLjANCj4NCj4NCj4gX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dA0KPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4gaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KSU1QT1JUQU5UIE5P
VElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUg
Y29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0
aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRl
bHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwg
dXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24g
aW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 04:41:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 04:41:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9iox-0001TB-6F; Mon, 16 Sep 2019 04:41:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9iov-0001SC-Mo
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 04:41:01 +0000
X-Inumbo-ID: 2ba89a1e-d83c-11e9-b299-bc764e2007e4
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe1e::60f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2ba89a1e-d83c-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 04:40:56 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=u1K2fpOAqVndPI/JG1aEsFuBviqBplJNfhUdNXC4BkA=;
 b=qOIxWbGuQ6EqoTnwnSIV7w1g5YNHX0lsIYFWxl0HWT0/sELGYfl2zYk1B2v693q5fLQi188muQy1qkTZgrJtpsQWgDKpDd3WMeeLEQG3B/KFr3cODP5GK5vVMEMHgrjAiJDQZBnCIPhX6BKfI6Cj4tPN+XdCkGEFkwJqSoUq/PU=
Received: from VI1PR08CA0183.eurprd08.prod.outlook.com (2603:10a6:800:d2::13)
 by AM6PR08MB4934.eurprd08.prod.outlook.com (2603:10a6:20b:ee::21)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Mon, 16 Sep
 2019 04:40:52 +0000
Received: from AM5EUR03FT031.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::200) by VI1PR08CA0183.outlook.office365.com
 (2603:10a6:800:d2::13) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2263.13 via Frontend
 Transport; Mon, 16 Sep 2019 04:40:52 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT031.mail.protection.outlook.com (10.152.16.111) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 04:40:51 +0000
Received: ("Tessian outbound fd4ad9e68831:v31");
 Mon, 16 Sep 2019 04:40:50 +0000
X-CR-MTA-TID: 64aa7808
Received: from 5879dc6cb0a8.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.0.56]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 328E3430-9BF4-4851-B840-721E1D567FC3.1; 
 Mon, 16 Sep 2019 04:40:45 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2056.outbound.protection.outlook.com [104.47.0.56])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 5879dc6cb0a8.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 04:40:45 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=X2P7bO42j5WlWtwuAoLgtMy2zuU+fwLoctrMIEOhIwAcd/tLZA2tvtlaG+qMVQalxyAIJnYG+UtUiALhrGuWnbRYh8LhVD/umGbbOtQqll6ZGYXPaplYPYAF9n8cgC92YnsPRHJHpaxUzD9ODL5velY6KLBMVb0gA3NPoSniEiIET4Xp6fDhQQJVvKRLZvzu2yidNrgD6hRNdwd1gD4oOGPjUpU/BGZNXZR5U528xcMkZK7M44Xemk77v4BAPhWqRkzsKNv8CGO/LAGqEb3QLOkJWzR3OAe1voA07e4tWM3DwUkJ1V604iwSwvHDpxe/tk752PmD6/Q93XjC3bpUaQ==
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=yPBwvxGMq7CC/c7swzqer2SDPnAintAvLE+fO27gkxg=;
 b=DJ7H61IIHNz38P3JVnWd9C6RoFEIRETqxjr0fJNi9js7Jqw5cK4i6fNX1LFYFM6oLesdtgeUuWF6O0FEvBTQbqLJJN8YIXg7HPbG6OI/D7EWPRKmOf2Ob2lM10vl97qHUATwm5JTXtlBQAKPO1so0w8znBNBxxEXTgq2m9QLhGk5g+jcwE7LAf1NIOMgRCxzsat7/bnol7uHm1QeGanMN141GtU1QQJhArKmJ/QLbgiyM7zbu7r19Z7ktutx9XH4BcU2YTMtsA5OrEqB2u6QPDDvLxX4yjsQOpDlC9wLoWXszlP4Ig73xrmznHt2q5AZGk3B1vHyb0yUtCbOSDd7gA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=yPBwvxGMq7CC/c7swzqer2SDPnAintAvLE+fO27gkxg=;
 b=zo/SeMwJkCyMCcBClkO3em4N1xnO/XcUR3FjkWrg7IZglrp5pNLiznQbL7ZHzLS1Qnu9u8W/m2P1hfJnrKVv00SgPw8qnQCdepdRZJx7jm6tG6dRTONEG73T/W1Z5l5ZEV2sVE5N/jUy27v5HIG1EIn/D+f2l52skkhN38rJW0M=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3403.eurprd08.prod.outlook.com (20.177.120.216) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.18; Mon, 16 Sep 2019 04:40:43 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 04:40:43 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 2/4] Add Makefile.uk
Thread-Index: AQHVaJikqwCzC9HK1kGRmx0A1hN9WqctwHqQ
Date: Mon, 16 Sep 2019 04:40:43 +0000
Message-ID: <DB7PR08MB3082F66C5489A5B5569353D4F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
 <20190911120107.11757-3-felipe.huici@neclab.eu>
In-Reply-To: <20190911120107.11757-3-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 0ac40273-e7d7-4ee7-8783-d41e929d01e1.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 409531af-f2e9-4c50-9700-08d73a600d59
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3403; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3403:|AM6PR08MB4934:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <AM6PR08MB4934395CB74199282EACFDB3F78C0@AM6PR08MB4934.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:1265;OLM:1265;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(396003)(39850400004)(136003)(366004)(376002)(13464003)(189003)(199004)(55016002)(486006)(478600001)(229853002)(81166006)(76116006)(66446008)(66946007)(66556008)(66476007)(64756008)(81156014)(52536014)(5660300002)(99286004)(25786009)(8936002)(7696005)(6246003)(66066001)(7736002)(14454004)(102836004)(53546011)(110136005)(53936002)(6306002)(9686003)(6506007)(71190400001)(71200400001)(74316002)(446003)(966005)(26005)(76176011)(186003)(33656002)(305945005)(55236004)(256004)(86362001)(2906002)(6116002)(3846002)(2501003)(476003)(11346002)(8676002)(316002)(6436002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3403;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: 63CoTL+5fZiFerBxKjGNL02NlA1IHyNb8XbtU8JloTewiLzn1axWTJ+dsCYMYwMV3+axzN7rh6KnKqQnTkwDCWdlf0sfBRfk3wpuYxQbUnu3MpgbOmFYOfU6x8BB77xvY8cRXB5zQUIYJ4Dc6GMvAJ7qzESv/LgiL+jCQMKT6Oso6ZOqFtyN8y0Y6j1136Kv45DhO97Z07KpzpgFgU35mJjnk1sc1EFlteOXxSBshkg8pYIILoFzX6UPqWcc5nlrNmEpICLUIpH1CZ8BbKLaqrYbXPHDy4zjGAg6wR8vA/lwW4jI+x95ueSw2C/bf9dVWhqlfHvnKXH5ufoOftJUs0fz6/W/XQKoTOHPYkxC8auTAYlTKwJNoyh3h0a1PvCOnFuTrPnrQzUSGPkhixjSXhl1zd4h3VvY2HL2Kh5rReg=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3403
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT031.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(396003)(136003)(346002)(39860400002)(376002)(189003)(199004)(13464003)(40434004)(70586007)(81166006)(3846002)(55016002)(126002)(476003)(2486003)(6306002)(26005)(76176011)(7696005)(110136005)(53546011)(6506007)(81156014)(186003)(316002)(99286004)(50466002)(8936002)(47776003)(356004)(486006)(102836004)(66066001)(229853002)(5660300002)(23676004)(6246003)(52536014)(70206006)(336012)(436003)(74316002)(2501003)(9686003)(8676002)(11346002)(63350400001)(36906005)(22756006)(2906002)(305945005)(76130400001)(446003)(86362001)(7736002)(25786009)(14444005)(5024004)(33656002)(26826003)(478600001)(966005)(14454004)(6116002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR08MB4934;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: b9cc530d-3476-4d9d-2d2f-08d73a600912
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM6PR08MB4934; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: ndAnJQh4gVv2U28+fhukyMMpjcSdsPdxE4lJ6V9aD5Gme/+K0Ux3XhFaKKOF46r7FQoLmi/2mfHwSpLaZootXHo4L5gC0mM2EIUgri9HbGzNGVu8CeeiynW1kdRcJ32wJvq9hyJEfq+xXi8pmqLC30duWMgTkNlEl5jPPPpUONXEa5orOIKHieDc/F3XH/Os0+As+73SBLHiHrcMS324WQkGWGJcNoXfTchg3WuDCiU6r6HPu5Zui2hnZ3HptdGi6Tt47OgC4CM/XWAW7J/YAdrpMgBs0fUrSv+eKLuDWb9RVyI1scXzuhdkw9m2C6nIhwXKRNwmWME3tGlSAsKMMocV0NEBeVRKxFDtcYpRsXYD48NFWxySNOHk0iV/8w+PU9B2IIJiFwP/+ych6A6T5SP1VmH9rBSQ04oNCyEhN8Q=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 04:40:51.0880 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 409531af-f2e9-4c50-9700-08d73a600d59
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4934
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 2/4] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQpMR1RNDQpSZXZpZXdlZC1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4N
Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1p
bmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbiBCZWhhbGYNCj4gT2Yg
RmVsaXBlIEh1aWNpDQo+IFNlbnQ6IDIwMTnlubQ55pyIMTHml6UgMjA6MDENCj4gVG86IG1pbmlv
cy1kZXZlbEBsaXN0cy54ZW4ub3JnDQo+IENjOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBu
ZWNsYWIuZXU+DQo+IFN1YmplY3Q6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVC9MSUJMVUEgUEFU
Q0ggdjIgMi80XSBBZGQgTWFrZWZpbGUudWsNCj4NCj4gQWRkIGx1YSBwb3J0IE1ha2VmaWxlLnVr
DQo+DQo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4NCj4gLS0tDQo+ICBNYWtlZmlsZS51ayB8IDEwMg0KPiArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICsrDQo+ICAxIGZpbGUgY2hh
bmdlZCwgMTAyIGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51
aw0KPg0KPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51aw0KPiBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi44ZTYyZmVhDQo+IC0tLSAvZGV2L251bGwN
Cj4gKysrIGIvTWFrZWZpbGUudWsNCj4gQEAgLTAsMCArMSwxMDIgQEANCj4gKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KPiArIyBMaWJyYXJ5IHJlZ2lzdHJhdGlvbg0KPiArIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQo+ICskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmx1YSwkKENP
TkZJR19MSUJMVUEpKSkNCj4gKw0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICsj
IFNvdXJjZXMNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArTElCTFVBX1ZFUlNJ
T049NS4zLjUNCj4gK0xJQkxVQV9UQVJCQUxMPWx1YS0kKExJQkxVQV9WRVJTSU9OKQ0KPiArTElC
TFVBX1VSTD1odHRwczovL3d3dy5sdWEub3JnL2Z0cC8kKExJQkxVQV9UQVJCQUxMKS50YXIuZ3oN
Cj4gK0xJQkxVQV9QQVRDSERJUj0kKExJQkxVQV9CQVNFKS9wYXRjaGVzDQo+ICsNCj4gKyQoZXZh
bCAkKGNhbGwgZmV0Y2gsbGlibHVhLCQoTElCTFVBX1VSTCkpKQ0KPiArJChldmFsICQoY2FsbCBw
YXRjaCxsaWJsdWEsJChMSUJMVUFfUEFUQ0hESVIpLGx1YS0kKExJQkxVQV9WRVJTSU9OKSkpDQo+
ICsNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArIyBIZWxwZXJzDQo+ICsjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4g
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gK0xJQkxVQV9TUkNTX0JBU0U9JChMSUJMVUFfT1JJ
R0lOKS8kKExJQkxVQV9UQVJCQUxMKS9zcmMNCj4gKw0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjDQo+ICsjIExpYnJhcnkgaW5jbHVkZXMNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIw0KPiArIyBQdXQgcHVibGljIGhlYWRlcnMgb2YgdGhlIGxpYnJhcnkgdG8gYSBwdWJsaWMg
Zm9sZGVyIGFuZCBleHBvcnQgdGhlbQ0KPiBnbG9iYWxseS4NCj4gKyMgVGhlIHByZXBhcmUgc3Rl
cCBiZWxvdyB0YWtlcyBjYXJlIG9mIHBvcHVsYXRpbmcgdGhlIGZvbGRlci4NCj4gKyQoY2FsbCBt
a19zdWJfYnVpbGRfZGlyLGxpYmx1YS9pbmNsdWRlKQ0KPiArQ0lOQ0xVREVTLSQoQ09ORklHX0xJ
QkxVQSkgICArPSAtSSQoTElCTFVBX0JVSUxEKS9pbmNsdWRlDQo+ICtDUFBJTkNMVURFUy0kKENP
TkZJR19MSUJMVUEpICs9IC1JJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUNCj4gKw0KPiArIyBQcml2
YXRlIGhlYWRlcnMNCj4gK0xJQkxVQV9DSU5DTFVERVMteSArPSAtSSQoTElCTFVBX1NSQ1NfQkFT
RSkNCj4gKw0KPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjDQo+ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQo+ICsjIENvbXBpbGF0aW9u
IHVuaXQNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArTElCTFVBX0NGTEFHUy15
ICs9IC1ETFVBX0NPTVBBVF81XzINCj4gKw0KPiArIyBNYWluIGxvb3ANCj4gK0xJQkxVQV9TUkNT
LXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sdWEuYw0KPiArDQo+ICsjIENPUkVfTw0KPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xhcGkuYw0KPiArTElCTFVBX1NSQ1Mt
eSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xjb2RlLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChM
SUJMVUFfU1JDU19CQVNFKS9sY3R5cGUuYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9T
UkNTX0JBU0UpL2xkZWJ1Zy5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFT
RSkvbGRvLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sZHVtcC5j
DQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGZ1bmMuYw0KPiArTElC
TFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xnYy5jDQo+ICtMSUJMVUFfU1JDUy15
ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGxleC5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElC
TFVBX1NSQ1NfQkFTRSkvbG1lbS5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1Nf
QkFTRSkvbG9iamVjdC5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkv
bG9wY29kZXMuYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xwYXJz
ZXIuYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xzdGF0ZS5jDQo+
ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHN0cmluZy5jDQo+ICtMSUJM
VUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbHRhYmxlLmMNCj4gK0xJQkxVQV9TUkNT
LXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sdG0uYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJ
QkxVQV9TUkNTX0JBU0UpL2x1bmR1bXAuYw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9T
UkNTX0JBU0UpL2x2bS5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkv
bHppby5jDQo+ICsNCj4gKyMgTElCX08NCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JD
U19CQVNFKS9sYXV4bGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNF
KS9sYmFzZWxpYi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGJp
dGxpYi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGNvcm9saWIu
Yw0KPiArTElCTFVBX1NSQ1MteSArPSAkKExJQkxVQV9TUkNTX0JBU0UpL2xkYmxpYi5jDQo+ICtM
SUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGlvbGliLmMNCj4gK0xJQkxVQV9T
UkNTLXkgKz0gJChMSUJMVUFfU1JDU19CQVNFKS9sbWF0aGxpYi5jDQo+ICtMSUJMVUFfU1JDUy15
ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbG9zbGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChM
SUJMVUFfU1JDU19CQVNFKS9sc3RybGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFf
U1JDU19CQVNFKS9sdGFibGliLmMNCj4gK0xJQkxVQV9TUkNTLXkgKz0gJChMSUJMVUFfU1JDU19C
QVNFKS9sdXRmOGxpYi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkv
bG9hZGxpYi5jDQo+ICtMSUJMVUFfU1JDUy15ICs9ICQoTElCTFVBX1NSQ1NfQkFTRSkvbGluaXQu
Yw0KPiArDQo+ICsNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArIyBsaWJyYXkg
QVBJIGhlYWRlcnMNCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KPiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KPiArJChMSUJMVUFf
U1JDU19CQVNFKS8lLmg6ICQoTElCTFVBX0JVSUxEKS8ub3JpZ2luDQo+ICsgICAgIEAjIGVtcHR5
IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBleHRyYWN0aW9uDQo+ICsN
Cj4gKyQoTElCTFVBX0JVSUxEKS9pbmNsdWRlLyUuaDogJChMSUJMVUFfU1JDU19CQVNFKS8lLmgN
Cj4gKyAgICAgJChjYWxsIGJ1aWxkX2NtZCxMTixsaWJsdWEsJEAsXA0KPiArICAgICBsbiAtc2Yg
JDwgJEApDQo+ICsNCj4gKyQoTElCTFVBX1NSQ1NfQkFTRSkvJS5ocHA6ICQoTElCTFVBX0JVSUxE
KS8ub3JpZ2luDQo+ICsgICAgIEAjIGVtcHR5IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kg
dG8gYXJjaGl2ZSBleHRyYWN0aW9uDQo+ICsNCj4gKyQoTElCTFVBX0JVSUxEKS9pbmNsdWRlLyUu
aHBwOiAkKExJQkxVQV9TUkNTX0JBU0UpLyUuaHBwDQo+ICsgICAgICQoY2FsbCBidWlsZF9jbWQs
TE4sbGlibHVhLCRALFwNCj4gKyAgICAgbG4gLXNmICQ8ICRAKQ0KPiArDQo+ICsjIFRPX0lOQw0K
PiArVUtfUFJFUEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWEuaA0KPiArVUtfUFJF
UEFSRSArPSAkKExJQkxVQV9CVUlMRCkvaW5jbHVkZS9sdWFjb25mLmgNCj4gK1VLX1BSRVBBUkUg
Kz0gJChMSUJMVUFfQlVJTEQpL2luY2x1ZGUvbHVhbGliLmgNCj4gK1VLX1BSRVBBUkUgKz0gJChM
SUJMVUFfQlVJTEQpL2luY2x1ZGUvbGF1eGxpYi5oDQo+ICtVS19QUkVQQVJFICs9ICQoTElCTFVB
X0JVSUxEKS9pbmNsdWRlL2x1YS5ocHANCj4gLS0NCj4gMi4xMS4wDQo+DQo+DQo+IF9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IE1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QNCj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IGh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCklN
UE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNo
bWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91
IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVy
IGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhl
ciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGlu
Zm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 04:42:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 04:42:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9iqi-0001Vd-EE; Mon, 16 Sep 2019 04:42:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9iqg-0001VY-Ds
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 04:42:50 +0000
X-Inumbo-ID: 6d253c54-d83c-11e9-95d5-12813bfff9fa
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.4.67]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6d253c54-d83c-11e9-95d5-12813bfff9fa;
 Mon, 16 Sep 2019 04:42:45 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=UtX8dx4QusNwE0iNR/HcRp08ABkyZdj36hflt2HQnAY=;
 b=gcn79h5HWyu60se5hc8AKG5G7plEdiVwyjKekvpGsggiktR2HQ9LmToILjbmQ06lIL8f0QFD73Lc7lkIVcexleM3mSJk54C07PI8tKi/HJub10tyOJixBc2y/K5OMapDLbrKVZ2k4EOYE9bVALGpZVkBl+JpQxhbYucIqOrbmRI=
Received: from DB7PR08CA0001.eurprd08.prod.outlook.com (2603:10a6:5:16::14) by
 AM5PR0801MB1635.eurprd08.prod.outlook.com (2603:10a6:203:3b::16) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Mon, 16 Sep
 2019 04:42:43 +0000
Received: from DB5EUR03FT046.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::201) by DB7PR08CA0001.outlook.office365.com
 (2603:10a6:5:16::14) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2263.14 via Frontend
 Transport; Mon, 16 Sep 2019 04:42:42 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT046.mail.protection.outlook.com (10.152.21.230) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 04:42:41 +0000
Received: ("Tessian outbound 968ab6b62146:v31");
 Mon, 16 Sep 2019 04:42:41 +0000
X-CR-MTA-TID: 64aa7808
Received: from 101355188cd5.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.0.59]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 3A004144-8228-4BD4-9B81-6238EA293403.1; 
 Mon, 16 Sep 2019 04:42:36 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2059.outbound.protection.outlook.com [104.47.0.59])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 101355188cd5.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 04:42:36 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=HJJBclkQknjxz9R6kYkt6bfANiTnO6IZWHe1SiuoJqwZvyP7LJ3m4eyJdrlWjSoy214HW/biamkrTbR3KPLuDcZsyQOmq1bu0IPia679VZ83RkCN2slwdgp2kF4V54JINVvljqD47QArUZZebLR+R7UySGzEUAKjN14a3py0nU52sTr2GNTReDZ9LIRqzRuxn9gn9YX1twb58dzjvjvAZuoT2BFTVldg7Mp1m4oYUlEwxNt7lZmgCPnZS9m+e8Pe62/pLDF6VCpQiRaeB15ZuMhlLsdl2AT9tdPdqhjGmP9p8CFUHOZziVzXqqjKcu1R/bRfIxkerk85KgxabWpQIg==
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=OZZM2xcAma0030Wov9zHKzNpnqjQvbs5ClG/Nyj2LQw=;
 b=XHg27L9qy+lOD2yAQ0ghARdJQr1XwUxD7cQiHdzd2lKlAMiHh5ppiU2A0vGqcQvsgMt3UIdR3WQPc01I4JSQ0p3H2+mTK0Tu42V/qRnODItyWjOboBvxsB+EPTSIORNY6hwQdieh90nKyzUlbm+wxGOFljTlTHDPG087gY34XRcf/KwhpD2IZ33SagMsK0pWDlfLibpClMJKjkQofnTr82HaHhMn6+Ce4h1POJPT6FrPlfDHVUWTDkPGuUl9FAZd9hpLe7TtKGCVXhL3IknF5J9O1O9v4CfNhSMZSS8LJubrJmTZ+kNfJ74LfQLYjV2H+cY4UZOetU0ynREju10HIQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=OZZM2xcAma0030Wov9zHKzNpnqjQvbs5ClG/Nyj2LQw=;
 b=jIxwV3psyXH49nmn/2AVasJ5lQQH/4F7Rb74lUc1Pun5g3apbz3OyICHBvIONhXMRZsmegAR5QVrGug3SRVl8O/dyk0hU/2mjFiQkbwhrd7I+e2n3xSEQSSXoLHoqXkYyQ+2YQfh/HfACtLe0MsFVSylhiGrIjSo7NLyqaboo4c=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3403.eurprd08.prod.outlook.com (20.177.120.216) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.18; Mon, 16 Sep 2019 04:42:34 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 04:42:34 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches
 directory
Thread-Index: AQHVaJiix6rt57EhKEeLa6xHHqw0FqctwLCQ
Date: Mon, 16 Sep 2019 04:42:34 +0000
Message-ID: <DB7PR08MB308215F5D14270DCCCF46763F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
 <20190911120107.11757-4-felipe.huici@neclab.eu>
In-Reply-To: <20190911120107.11757-4-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: aa824b3b-ea7f-475b-bc79-1439d066742c.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 1e54bb81-54e7-4c22-c9a1-08d73a604f4f
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3403; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3403:|AM5PR0801MB1635:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <AM5PR0801MB1635F817A01400127910068DF78C0@AM5PR0801MB1635.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:1417;OLM:1417;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(396003)(39850400004)(136003)(366004)(376002)(13464003)(189003)(199004)(55016002)(486006)(478600001)(229853002)(81166006)(76116006)(66446008)(66946007)(66556008)(66476007)(64756008)(81156014)(52536014)(5660300002)(99286004)(25786009)(8936002)(7696005)(6246003)(66066001)(7736002)(14454004)(102836004)(53546011)(110136005)(53936002)(6306002)(9686003)(6506007)(71190400001)(71200400001)(74316002)(446003)(966005)(26005)(76176011)(186003)(33656002)(305945005)(55236004)(256004)(86362001)(2906002)(6116002)(3846002)(2501003)(476003)(11346002)(8676002)(316002)(6436002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3403;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: VM3g+0igf39oCH04ot/cDMMd5at2ZV4ts/5Xpodu/eVTftWM8ykC12rFiadjOTpNpRfRiYuhvPy1qDZHCM7aSMagZY8PB8qbIKrUVf+xhRk7CNj4V4U3yoxfmN1zxKCukpZ6gySJ8M//tgB8QdAwVV43tk+8rqXCLLkUUjdBexH8oCGoXSAGLj+0dkJngX3syYOXiyA1OYCw99ASAoDj+f/eJvYefWpDX7tMSa7MuyDJQDmK/dvwZNWJgF2np8J4cYtJ5ZpqWDpNA2VdHJkfEw5HjJ2zNF0g/Yoh8AZM+TQIFsRj7pVSvCePlfZtAhYRrRfw83Lf8q8SvDJAP5dlhLUc3vLu56mNG37COU5IHrapvZVlMUvKZe+kKy2jPALlrkjub9RzkAKXe0NVdn8oPq+/VvHQNvdhhGkS+W+DGpU=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3403
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT046.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(396003)(136003)(376002)(346002)(39850400004)(199004)(189003)(40434004)(13464003)(86362001)(52536014)(6506007)(23676004)(99286004)(53546011)(2501003)(33656002)(5660300002)(7696005)(2486003)(76176011)(50466002)(229853002)(6306002)(3846002)(9686003)(6116002)(2906002)(55016002)(22756006)(70206006)(486006)(7736002)(47776003)(74316002)(305945005)(70586007)(126002)(102836004)(316002)(26826003)(25786009)(478600001)(14454004)(476003)(356004)(110136005)(66066001)(76130400001)(8676002)(6246003)(966005)(63350400001)(8936002)(436003)(81166006)(81156014)(14444005)(5024004)(446003)(336012)(11346002)(26005)(186003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0801MB1635;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 463ada9a-6dd8-44b2-04d1-08d73a604b2c
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM5PR0801MB1635; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: Jr0lJWr41Ub2kCF4216YGzsJNwElvvOi4LTYuAUBVd47wAebnI5ceH8mSdV6cw9+fIy749Nqyh+gsSPLNy5AKUE72i1jXQFRoOukGvB8jRpUYH8ZS4Ri6/SqoLItk2ClCUp0m541lTjmzPahm5/QfRQT0jnWunwupM3q0mqIOTJD7Qd3BY9ANrmvcqE1mAaibdsYF3RlCwTrwKeguOXIU04bj0qbsQjoYurjt0PEw4ebySgyVoGfBYpSqvBovgYs2JyUFtrsvJsGigs35QN+Ilesu8FeWX26DQEyeJDXF2Uo+lwHPcK3xT7Ol9BoPpDflBXbFnRnP2CPj7c1C0na0QIPLd1HyZqp6Zf7W6T4K/H3mpIobAIKPP6bE1+7dXQ/TDEmN9A0uuSQGaPfivw/FuKYwWtMzHm7H8uzVoJjcQ8=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 04:42:41.7394 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 1e54bb81-54e7-4c22-c9a1-08d73a604f4f
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1635
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches
 directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQoNCkxHVE0NClJldmlld2VkLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29t
Pg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1p
bmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbiBCZWhhbGYNCj4gT2Yg
RmVsaXBlIEh1aWNpDQo+IFNlbnQ6IDIwMTnlubQ55pyIMTHml6UgMjA6MDENCj4gVG86IG1pbmlv
cy1kZXZlbEBsaXN0cy54ZW4ub3JnDQo+IENjOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBu
ZWNsYWIuZXU+DQo+IFN1YmplY3Q6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVC9MSUJMVUEgUEFU
Q0ggdjIgMy80XSBBZGQgcGF0Y2hlcw0KPiBkaXJlY3RvcnkNCj4NCj4gUGF0Y2ggdG8gcmVuYW1l
IG1haW4gZnVuY3Rpb24gYW5kIHRvIGFkZCBpbml0cmQgc3VwcG9ydCB0byBtYWluIGxvb3AuDQo+
DQo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4N
Cj4gLS0tDQo+ICBwYXRjaGVzLzAwMDEtYWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0
Y2ggfCA0Mg0KPiArKysrKysrKysrKysrKysrKysrKysrKysNCj4gIDEgZmlsZSBjaGFuZ2VkLCA0
MiBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLWFkZC1p
bml0cmQtcmVuYW1lLWVudHJ5LXBvaW50LnBhdGNoDQo+DQo+IGRpZmYgLS1naXQgYS9wYXRjaGVz
LzAwMDEtYWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2gNCj4gYi9wYXRjaGVzLzAw
MDEtYWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2gNCj4gbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCj4gaW5kZXggMDAwMDAwMC4uMTM1YTBjNA0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBi
L3BhdGNoZXMvMDAwMS1hZGQtaW5pdHJkLXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaA0KPiBAQCAt
MCwwICsxLDQyIEBADQo+ICstLS0gYS9zcmMvbHVhLmMgICAgICAyMDE3LTA0LTE5IDE5OjI5OjU3
LjAwMDAwMDAwMCArMDIwMA0KPiArKysrIGIvc3JjL2x1YS5jICAgICAgMjAxOS0wOS0wMyAxMzoz
NjowOS40Mzc4MDc4OTAgKzAyMDANCj4gK0BAIC02LDYgKzYsOCBAQA0KPiArDQo+ICsgI2RlZmlu
ZSBsdWFfYw0KPiArDQo+ICsrI2luY2x1ZGUgPHVrL3BsYXQvbWVtb3J5Lmg+DQo+ICsrDQo+ICsg
I2luY2x1ZGUgImxwcmVmaXguaCINCj4gKw0KPiArDQo+ICtAQCAtNTU1LDYgKzU1Nyw5IEBADQo+
ICsgICBpbnQgYXJnYyA9IChpbnQpbHVhX3RvaW50ZWdlcihMLCAxKTsNCj4gKyAgIGNoYXIgKiph
cmd2ID0gKGNoYXIgKiopbHVhX3RvdXNlcmRhdGEoTCwgMik7DQo+ICsgICBpbnQgc2NyaXB0Ow0K
PiArKyAgc3RydWN0IHVrcGxhdF9tZW1yZWdpb25fZGVzYyBpbWc7DQo+ICsrICBjaGFyICpjc3Ry
Ow0KPiArKw0KPiArICAgaW50IGFyZ3MgPSBjb2xsZWN0YXJncyhhcmd2LCAmc2NyaXB0KTsNCj4g
KyAgIGx1YUxfY2hlY2t2ZXJzaW9uKEwpOyAgLyogY2hlY2sgdGhhdCBpbnRlcnByZXRlciBoYXMg
Y29ycmVjdCB2ZXJzaW9uICovDQo+ICsgICBpZiAoYXJndlswXSAmJiBhcmd2WzBdWzBdKSBwcm9n
bmFtZSA9IGFyZ3ZbMF07DQo+ICtAQCAtNTgxLDYgKzU4NiwxMSBAQA0KPiArICAgICByZXR1cm4g
MDsNCj4gKyAgIGlmIChhcmdzICYgaGFzX2kpICAvKiAtaSBvcHRpb24/ICovDQo+ICsgICAgIGRv
UkVQTChMKTsgIC8qIGRvIHJlYWQtZXZhbC1wcmludCBsb29wICovDQo+ICsrICAvKiBzZWUgaWYg
c2NyaXB0IGlzIGF2YWlsYWJsZSBmcm9tIGluaXRyZCAqLw0KPiArKyAgZWxzZSBpZiAodWtwbGF0
X21lbXJlZ2lvbl9maW5kX2luaXRyZDAoJmltZykgPj0gMCkgew0KPiArKyAgICBjc3RyID0gKGNo
YXIgKilpbWcuYmFzZTsNCj4gKysgICAgZG9zdHJpbmcoTCwgY3N0ciwgImluaXRyZCIpOw0KPiAr
KyAgfQ0KPiArICAgZWxzZSBpZiAoc2NyaXB0ID09IGFyZ2MgJiYgIShhcmdzICYgKGhhc19lIHwg
aGFzX3YpKSkgeyAgLyogbm8gYXJndW1lbnRzPw0KPiAqLw0KPiArICAgICBpZiAobHVhX3N0ZGlu
X2lzX3R0eSgpKSB7ICAvKiBydW5uaW5nIGluIGludGVyYWN0aXZlIG1vZGU/ICovDQo+ICsgICAg
ICAgcHJpbnRfdmVyc2lvbigpOw0KPiArQEAgLTU5Myw3ICs2MDMsNyBAQA0KPiArIH0NCj4gKw0K
PiArDQo+ICstaW50IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikgew0KPiArK2ludCBsdWFf
bWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7DQo+ICsgICBpbnQgc3RhdHVzLCByZXN1bHQ7
DQo+ICsgICBsdWFfU3RhdGUgKkwgPSBsdWFMX25ld3N0YXRlKCk7ICAvKiBjcmVhdGUgc3RhdGUg
Ki8NCj4gKyAgIGlmIChMID09IE5VTEwpIHsNCj4gLS0NCj4gMi4xMS4wDQo+DQo+DQo+IF9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+IE1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QNCj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQo+IGh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwN
CklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0
YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYg
eW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2Vu
ZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBv
dGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhl
IGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 04:43:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 04:43:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9irj-0001XA-IZ; Mon, 16 Sep 2019 04:43:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9irh-0001X5-Q0
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 04:43:53 +0000
X-Inumbo-ID: 93953b6e-d83c-11e9-b299-bc764e2007e4
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe0c::613])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 93953b6e-d83c-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 04:43:50 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8lBuEYbclYaeboUduePHjHJtwWLTL6kzpTUrzz468DI=;
 b=u2KOGRvNt4/ITV1wyYnde/xysUq9+2t/WRjlacQ/4MNEqXSnoh/13sfEMWlX1aTjHMJ08VpXwgH6tEhCpK6LR254lez1kHnksR0UtZdjkCTR1Yig7x2V//pXKxCQoMO1Fs7i1f73fslDHABiNeQmmguHH9G7JfFX5jm/6ZcyPkI=
Received: from VI1PR0802CA0022.eurprd08.prod.outlook.com
 (2603:10a6:800:aa::32) by DB8PR08MB5322.eurprd08.prod.outlook.com
 (2603:10a6:10:fa::18) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.21; Mon, 16 Sep
 2019 04:43:47 +0000
Received: from VE1EUR03FT064.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::207) by VI1PR0802CA0022.outlook.office365.com
 (2603:10a6:800:aa::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.14 via Frontend
 Transport; Mon, 16 Sep 2019 04:43:47 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT064.mail.protection.outlook.com (10.152.19.210) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 04:43:46 +0000
Received: ("Tessian outbound d5a1f2820a4f:v31");
 Mon, 16 Sep 2019 04:43:46 +0000
X-CR-MTA-TID: 64aa7808
Received: from eab62bff6236.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.0.58]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 E367C393-740A-4889-B6A7-E9F99E367787.1; 
 Mon, 16 Sep 2019 04:43:40 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2058.outbound.protection.outlook.com [104.47.0.58])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id eab62bff6236.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 04:43:40 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=lccqBKv2zLLHcgouW9Q06unC1HUmiB+Mz7oT6armTC4wrvKuohN+yhwkl/e0T5FD3QJsWhMYatZqqK96c9CuS8DnGJdAvRnY/Nb9RWLnf2sm5mqdfYVLt+8XWY56v51DBQXDylzg/6+KVq5DlCNS1OkFcXpEaSe1KidqYzBEwfO8Ch0icbL5JQee1mFr3gWhNjtSI9lsilUSjBTkbMDqpJrRkg3+TOC9TNTGGVCjmbZImPmDUJrop4r0MMn6VYig8+4qSNiZ3i91tfmG9HSl8ONow9c1tfd9/bUy0bEw7RusUHhtaQItwyktvU90aJJypVzNFISQZMCVlPRKXFBr5w==
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=Rhtf4kXpfEWgzLfTLpj4bRoCrm/gK3HiiBpqJ9+68wE=;
 b=ITrQH1T3M5zgnq+FVzBmhyoxbUcbgf57ozh6aK6eJKzJN/MKPQf/o57PkkV9laS7LLaVCpZwUCC/lMbxY9vE9nlifLnnEGGMK5WQ3WEtzYx562PJSoO3BJuadPewdZgmkRbdYZum/3w5+WDZ7n7JVBwvHO8opSZz/WR7vmvBJjewnCizjFgjxUbegXof4ZW7okBsFS1sWZGGuH9a2BloVPI83LRfBbC60B/Ej+/QK9JzUNRiVJBguh1xExjqKPS8jfa9W7qNyYdvTWODZN9oC0uoMwEtoow2OMir0+SE5rFCVtJAVAnU0jcoKlnP85Wk0+RTN1h7nySqQqMVGCK+9A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=Rhtf4kXpfEWgzLfTLpj4bRoCrm/gK3HiiBpqJ9+68wE=;
 b=NKSZ6N59L5uo17KjmBNO8/Ut4toafcMEgJwLG8F834mVj981HNKBD9EajwDXQ0PelDaJVC1iICnJXoFTkuzRuonoUHvcdeh/SGvytFzlg3kbHMoPgIAQ/GqZp+mSnOdiRrU1MkBYxSTV6CiYbbhCUsTXwiUSFSjouo3iPTmOvFc=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3403.eurprd08.prod.outlook.com (20.177.120.216) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2241.18; Mon, 16 Sep 2019 04:43:39 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 04:43:39 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 4/4] Export symbols
Thread-Index: AQHVaJipYHgLt97RREKClHvMRpas86ctwTuw
Date: Mon, 16 Sep 2019 04:43:39 +0000
Message-ID: <DB7PR08MB3082003AA3D49EAFC94A5E65F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
 <20190911120107.11757-5-felipe.huici@neclab.eu>
In-Reply-To: <20190911120107.11757-5-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 82a8cc11-eeda-4432-9e44-25d8aaebf427.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: e3917cfb-49f1-4f45-116f-08d73a6075b4
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3403; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3403:|DB8PR08MB5322:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <DB8PR08MB53225E71E8A1472D99410801F78C0@DB8PR08MB5322.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:334;OLM:334;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(346002)(396003)(136003)(366004)(376002)(13464003)(189003)(199004)(55016002)(486006)(478600001)(229853002)(81166006)(76116006)(66446008)(66946007)(66556008)(66476007)(64756008)(81156014)(52536014)(5660300002)(99286004)(25786009)(8936002)(7696005)(6246003)(66066001)(7736002)(14454004)(102836004)(53546011)(110136005)(53936002)(6306002)(9686003)(6506007)(71190400001)(71200400001)(74316002)(446003)(966005)(14444005)(26005)(76176011)(186003)(33656002)(305945005)(55236004)(256004)(86362001)(2906002)(6116002)(3846002)(2501003)(476003)(11346002)(8676002)(316002)(6436002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3403;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: n2RHPHosq5G7UhucMZugsegoXRUgEb6WU9VQGccuKlSItZLJSbs//yrhYkHs3oD9vc+fWB4Shx9kvnJU+lpi08OnMZJQHyY+StbwpJohBYQe3lKnmeUzT+SMatjkZdjKMQ4CQe1+l+VIXlzT8ejfnEFXJJls8gWo1kHt96dVaAJM12H3bhNnY7t0NUjMLcPgCAXxX9AbkibV7I8kkJsBDiv5ELlTw/f15ZvNwtiJDcnASNECyrVSuxd7+exzmdk2hsabLKJZagEABz8U/Xa1B5hHSHWzobks0NF4ckS9B8qASoUXGrDWiQly915txRaGPCv3cFENOc2tTekhTBWbR8WuPAsdWpIlox6fQnRAwGzwFsRQ4ngDAw0cNyOcZf8R54/KZEJquTCWYNsbCfx1/ZjF0aII/d0k/JXhgAhPCao=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3403
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT064.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(136003)(346002)(39850400004)(396003)(13464003)(40434004)(189003)(199004)(25786009)(7696005)(9686003)(5660300002)(55016002)(446003)(6306002)(11346002)(66066001)(2486003)(336012)(23676004)(63350400001)(76130400001)(229853002)(476003)(186003)(6506007)(53546011)(70586007)(26005)(316002)(102836004)(6246003)(36906005)(47776003)(436003)(110136005)(8936002)(81156014)(70206006)(81166006)(2501003)(86362001)(2906002)(3846002)(6116002)(478600001)(22756006)(52536014)(50466002)(74316002)(33656002)(7736002)(305945005)(76176011)(8676002)(5024004)(99286004)(26826003)(966005)(356004)(486006)(14454004)(126002)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB8PR08MB5322;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 9746a0d4-445b-4c1d-86d5-08d73a6071c4
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB8PR08MB5322; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: /YC9pR4Nozm0TaeAbuioMUNQt7Sm0MORZCbEsNxOytcgGa0ncXYWeqxo9QUYAy8IErNwyucKVGPqV6yKP7QJZAvF0njpt1qHg9gmYo8yHZGOsKkfB1L6eWlJ+vRVHnbomIioCdEjhw1ZNlxJ2oNG10s99V5a8GHbXeGPEE74fW+r7xhBN+G83VjM6dFCoHhap++4lVdCSL14/ERftIP0lc6owCTZz0tHuYnOnOQgNYRDPSnaSLhLN66pCc29XcTp3H4yNZAGD0r/Z0Q6dUXu8qvJWl9CBU2kRokqd+mc5QFpe5csLu+RYdcMsmDaZclGS6szgeyfpvwgv5F5WG9tH4Do4UJ5ENN7zgPgsYTF6F+vpORDO8x6oHC7pA5AxIVPuxufy8ULF/AyuQaUHDj17OzNKIRTrZ2bI0x6YzJIOxw=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 04:43:46.0830 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: e3917cfb-49f1-4f45-116f-08d73a6075b4
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR08MB5322
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 4/4] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQpMR1RNDQpSZXZpZXdlZC1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4N
Cg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1p
bmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbiBCZWhhbGYNCj4gT2Yg
RmVsaXBlIEh1aWNpDQo+IFNlbnQ6IDIwMTnlubQ55pyIMTHml6UgMjA6MDENCj4gVG86IG1pbmlv
cy1kZXZlbEBsaXN0cy54ZW4ub3JnDQo+IENjOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBu
ZWNsYWIuZXU+DQo+IFN1YmplY3Q6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVC9MSUJMVUEgUEFU
Q0ggdjIgNC80XSBFeHBvcnQgc3ltYm9scw0KPg0KPiBFeHBvcnQgbHVhIHN5bWJvbHMNCj4NCj4g
U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KPiAt
LS0NCj4gIGV4cG9ydHN5bXMudWsgfCAzMzkNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KPiAgMSBmaWxlIGNoYW5nZWQsIDMzOCBp
bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9leHBvcnRzeW1z
LnVrIGIvZXhwb3J0c3ltcy51aw0KPiBpbmRleCBjODZjM2YzLi5jYmI4NTdlIDEwMDY0NA0KPiAt
LS0gYS9leHBvcnRzeW1zLnVrDQo+ICsrKyBiL2V4cG9ydHN5bXMudWsNCj4gQEAgLTEgKzEsMzM4
IEBADQo+IC1ub25lDQo+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KPiArbHVhQl9hc3Nl
cnQNCj4gK2x1YUJfYXV4d3JhcA0KPiArbHVhQl9jb2NyZWF0ZQ0KPiArbHVhQl9jb2xsZWN0Z2Fy
YmFnZQ0KPiArbHVhQl9jb3Jlc3VtZQ0KPiArbHVhQl9jb3J1bm5pbmcNCj4gK2x1YUJfY29zdGF0
dXMNCj4gK2x1YUJfY293cmFwDQo+ICtsdWFCX2RvZmlsZQ0KPiArbHVhQl9lcnJvcg0KPiArbHVh
Ql9nZXRtZXRhdGFibGUNCj4gK2x1YUJfaXBhaXJzDQo+ICtsdWFCX2xvYWQNCj4gK2x1YUJfbG9h
ZGZpbGUNCj4gK2x1YUJfbmV4dA0KPiArbHVhQl9wYWlycw0KPiArbHVhQl9wY2FsbA0KPiArbHVh
Ql9wcmludA0KPiArbHVhQl9yYXdlcXVhbA0KPiArbHVhQl9yYXdnZXQNCj4gK2x1YUJfcmF3bGVu
DQo+ICtsdWFCX3Jhd3NldA0KPiArbHVhQl9zZWxlY3QNCj4gK2x1YUJfc2V0bWV0YXRhYmxlDQo+
ICtsdWFCX3RvbnVtYmVyDQo+ICtsdWFCX3Rvc3RyaW5nDQo+ICtsdWFCX3R5cGUNCj4gK2x1YUJf
eHBjYWxsDQo+ICtsdWFCX3lpZWxkDQo+ICtsdWFCX3lpZWxkYWJsZQ0KPiArbHVhQ19iYXJyaWVy
Xw0KPiArbHVhQ19iYXJyaWVyYmFja18NCj4gK2x1YUNfY2hlY2tmaW5hbGl6ZXINCj4gK2x1YUNf
Zml4DQo+ICtsdWFDX2ZyZWVhbGxvYmplY3RzDQo+ICtsdWFDX2Z1bGxnYw0KPiArbHVhQ19uZXdv
YmoNCj4gK2x1YUNfcnVudGlsc3RhdGUNCj4gK2x1YUNfc3RlcA0KPiArbHVhQ191cHZhbGJhcnJp
ZXJfDQo+ICtsdWFDX3VwdmRlY2NvdW50DQo+ICtsdWFEX2NhbGwNCj4gK2x1YURfY2FsbG5veWll
bGQNCj4gK2x1YURfZ3Jvd3N0YWNrDQo+ICtsdWFEX2hvb2sNCj4gK2x1YURfaW5jdG9wDQo+ICts
dWFEX3BjYWxsDQo+ICtsdWFEX3Bvc2NhbGwNCj4gK2x1YURfcHJlY2FsbA0KPiArbHVhRF9wcm90
ZWN0ZWRwYXJzZXINCj4gK2x1YURfcmF3cnVucHJvdGVjdGVkDQo+ICtsdWFEX3JlYWxsb2NzdGFj
aw0KPiArbHVhRF9zaHJpbmtzdGFjaw0KPiArbHVhRF90aHJvdw0KPiArbHVhRV9leHRlbmRDSQ0K
PiArbHVhRV9mcmVlQ0kNCj4gK2x1YUVfZnJlZXRocmVhZA0KPiArbHVhRV9zZXRkZWJ0DQo+ICts
dWFFX3Nocmlua0NJDQo+ICtsdWFGX2Nsb3NlDQo+ICtsdWFGX2ZpbmR1cHZhbA0KPiArbHVhRl9m
cmVlcHJvdG8NCj4gK2x1YUZfZ2V0bG9jYWxuYW1lDQo+ICtsdWFGX2luaXR1cHZhbHMNCj4gK2x1
YUZfbmV3Q2Nsb3N1cmUNCj4gK2x1YUZfbmV3TGNsb3N1cmUNCj4gK2x1YUZfbmV3cHJvdG8NCj4g
K2x1YUdfYWRkaW5mbw0KPiArbHVhR19jb25jYXRlcnJvcg0KPiArbHVhR19lcnJvcm1zZw0KPiAr
bHVhR19vcGludGVycm9yDQo+ICtsdWFHX29yZGVyZXJyb3INCj4gK2x1YUdfcnVuZXJyb3INCj4g
K2x1YUdfdG9pbnRlcnJvcg0KPiArbHVhR190cmFjZWV4ZWMNCj4gK2x1YUdfdHlwZWVycm9yDQo+
ICtsdWFIX2ZyZWUNCj4gK2x1YUhfZ2V0DQo+ICtsdWFIX2dldGludA0KPiArbHVhSF9nZXRuDQo+
ICtsdWFIX2dldHNob3J0c3RyDQo+ICtsdWFIX2dldHN0cg0KPiArbHVhSF9uZXcNCj4gK2x1YUhf
bmV3a2V5DQo+ICtsdWFIX25leHQNCj4gK2x1YUhfcmVzaXplDQo+ICtsdWFIX3Jlc2l6ZWFycmF5
DQo+ICtsdWFIX3NldA0KPiArbHVhSF9zZXRpbnQNCj4gK2x1YUtfY2hlY2tzdGFjaw0KPiArbHVh
S19jb2RlDQo+ICtsdWFLX2NvZGVBQkMNCj4gK2x1YUtfY29kZUFCeA0KPiArbHVhS19jb2Rlaw0K
PiArbHVhS19jb25jYXQNCj4gK2x1YUtfZGlzY2hhcmdldmFycw0KPiArbHVhS19leHAyUksNCj4g
K2x1YUtfZXhwMmFueXJlZw0KPiArbHVhS19leHAyYW55cmVndXANCj4gK2x1YUtfZXhwMm5leHRy
ZWcNCj4gK2x1YUtfZXhwMnZhbA0KPiArbHVhS19maXhsaW5lDQo+ICtsdWFLX2dldGxhYmVsDQo+
ICtsdWFLX2dvaWZmYWxzZQ0KPiArbHVhS19nb2lmdHJ1ZQ0KPiArbHVhS19pbmRleGVkDQo+ICts
dWFLX2luZml4DQo+ICtsdWFLX2ludEsNCj4gK2x1YUtfanVtcA0KPiArbHVhS19uaWwNCj4gK2x1
YUtfcGF0Y2hjbG9zZQ0KPiArbHVhS19wYXRjaGxpc3QNCj4gK2x1YUtfcGF0Y2h0b2hlcmUNCj4g
K2x1YUtfcG9zZml4DQo+ICtsdWFLX3ByZWZpeA0KPiArbHVhS19yZXNlcnZlcmVncw0KPiArbHVh
S19yZXQNCj4gK2x1YUtfc2VsZg0KPiArbHVhS19zZXRsaXN0DQo+ICtsdWFLX3NldG9uZXJldA0K
PiArbHVhS19zZXRyZXR1cm5zDQo+ICtsdWFLX3N0b3JldmFyDQo+ICtsdWFLX3N0cmluZ0sNCj4g
K2x1YUxfYWRkbHN0cmluZw0KPiArbHVhTF9hZGRzdHJpbmcNCj4gK2x1YUxfYWRkdmFsdWUNCj4g
K2x1YUxfYXJnZXJyb3INCj4gK2x1YUxfYnVmZmluaXQNCj4gK2x1YUxfYnVmZmluaXRzaXplDQo+
ICtsdWFMX2NhbGxtZXRhDQo+ICtsdWFMX2NoZWNrYW55DQo+ICtsdWFMX2NoZWNraW50ZWdlcg0K
PiArbHVhTF9jaGVja2xzdHJpbmcNCj4gK2x1YUxfY2hlY2tudW1iZXINCj4gK2x1YUxfY2hlY2tv
cHRpb24NCj4gK2x1YUxfY2hlY2tzdGFjaw0KPiArbHVhTF9jaGVja3R5cGUNCj4gK2x1YUxfY2hl
Y2t1ZGF0YQ0KPiArbHVhTF9jaGVja3ZlcnNpb25fDQo+ICtsdWFMX2Vycm9yDQo+ICtsdWFMX2V4
ZWNyZXN1bHQNCj4gK2x1YUxfZmlsZXJlc3VsdA0KPiArbHVhTF9nZXRtZXRhZmllbGQNCj4gK2x1
YUxfZ2V0c3VidGFibGUNCj4gK2x1YUxfZ3N1Yg0KPiArbHVhTF9sZW4NCj4gK2x1YUxfbG9hZGJ1
ZmZlcngNCj4gK2x1YUxfbG9hZGZpbGV4DQo+ICtsdWFMX2xvYWRzdHJpbmcNCj4gK2x1YUxfbmV3
bWV0YXRhYmxlDQo+ICtsdWFMX25ld3N0YXRlDQo+ICtsdWFMX29wZW5saWJzDQo+ICtsdWFMX29w
dGludGVnZXINCj4gK2x1YUxfb3B0bHN0cmluZw0KPiArbHVhTF9vcHRudW1iZXINCj4gK2x1YUxf
cHJlcGJ1ZmZzaXplDQo+ICtsdWFMX3B1c2hyZXN1bHQNCj4gK2x1YUxfcHVzaHJlc3VsdHNpemUN
Cj4gK2x1YUxfcmVmDQo+ICtsdWFMX3JlcXVpcmVmDQo+ICtsdWFMX3NldGZ1bmNzDQo+ICtsdWFM
X3NldG1ldGF0YWJsZQ0KPiArbHVhTF90ZXN0dWRhdGENCj4gK2x1YUxfdG9sc3RyaW5nDQo+ICts
dWFMX3RyYWNlYmFjaw0KPiArbHVhTF91bnJlZg0KPiArbHVhTF93aGVyZQ0KPiArbHVhTV9ncm93
YXV4Xw0KPiArbHVhTV9yZWFsbG9jXw0KPiArbHVhTV90b29iaWcNCj4gK2x1YU9fYXJpdGgNCj4g
K2x1YU9fY2VpbGxvZzINCj4gK2x1YU9fY2h1bmtpZA0KPiArbHVhT19mYjJpbnQNCj4gK2x1YU9f
aGV4YXZhbHVlDQo+ICtsdWFPX2ludDJmYg0KPiArbHVhT19uaWxvYmplY3RfDQo+ICtsdWFPX3B1
c2hmc3RyaW5nDQo+ICtsdWFPX3B1c2h2ZnN0cmluZw0KPiArbHVhT19zdHIybnVtDQo+ICtsdWFP
X3Rvc3RyaW5nDQo+ICtsdWFPX3V0Zjhlc2MNCj4gK2x1YVBfb3Btb2Rlcw0KPiArbHVhUF9vcG5h
bWVzDQo+ICtsdWFTX2NsZWFyY2FjaGUNCj4gK2x1YVNfY3JlYXRlbG5nc3Ryb2JqDQo+ICtsdWFT
X2VxbG5nc3RyDQo+ICtsdWFTX2hhc2gNCj4gK2x1YVNfaGFzaGxvbmdzdHINCj4gK2x1YVNfaW5p
dA0KPiArbHVhU19uZXcNCj4gK2x1YVNfbmV3bHN0cg0KPiArbHVhU19uZXd1ZGF0YQ0KPiArbHVh
U19yZW1vdmUNCj4gK2x1YVNfcmVzaXplDQo+ICtsdWFUX2NhbGxUTQ0KPiArbHVhVF9jYWxsYmlu
VE0NCj4gK2x1YVRfY2FsbG9yZGVyVE0NCj4gK2x1YVRfZXZlbnRuYW1lLjMyNzANCj4gK2x1YVRf
Z2V0dG0NCj4gK2x1YVRfZ2V0dG1ieW9iag0KPiArbHVhVF9pbml0DQo+ICtsdWFUX29ianR5cGVu
YW1lDQo+ICtsdWFUX3RyeWJpblRNDQo+ICtsdWFUX3R5cGVuYW1lc18NCj4gK2x1YVVfZHVtcA0K
PiArbHVhVV91bmR1bXANCj4gK2x1YVZfY29uY2F0DQo+ICtsdWFWX2Rpdg0KPiArbHVhVl9lcXVh
bG9iag0KPiArbHVhVl9leGVjdXRlDQo+ICtsdWFWX2ZpbmlzaE9wDQo+ICtsdWFWX2ZpbmlzaGdl
dA0KPiArbHVhVl9maW5pc2hzZXQNCj4gK2x1YVZfbGVzc2VxdWFsDQo+ICtsdWFWX2xlc3N0aGFu
DQo+ICtsdWFWX21vZA0KPiArbHVhVl9vYmpsZW4NCj4gK2x1YVZfc2hpZnRsDQo+ICtsdWFWX3Rv
aW50ZWdlcg0KPiArbHVhVl90b251bWJlcl8NCj4gK2x1YVhfaW5pdA0KPiArbHVhWF9sb29rYWhl
YWQNCj4gK2x1YVhfbmV3c3RyaW5nDQo+ICtsdWFYX25leHQNCj4gK2x1YVhfc2V0aW5wdXQNCj4g
K2x1YVhfc3ludGF4ZXJyb3INCj4gK2x1YVhfdG9rZW4yc3RyDQo+ICtsdWFYX3Rva2Vucw0KPiAr
bHVhWV9wYXJzZXINCj4gK2x1YVpfZmlsbA0KPiArbHVhWl9pbml0DQo+ICtsdWFaX3JlYWQNCj4g
K2x1YV9hYnNpbmRleA0KPiArbHVhX2FyaXRoDQo+ICtsdWFfYXRwYW5pYw0KPiArbHVhX2NhbGxr
DQo+ICtsdWFfY2hlY2tzdGFjaw0KPiArbHVhX2Nsb3NlDQo+ICtsdWFfY29tcGFyZQ0KPiArbHVh
X2NvbmNhdA0KPiArbHVhX2NvcHkNCj4gK2x1YV9jcmVhdGV0YWJsZQ0KPiArbHVhX2R1bXANCj4g
K2x1YV9lcnJvcg0KPiArbHVhX2djDQo+ICtsdWFfZ2V0YWxsb2NmDQo+ICtsdWFfZ2V0ZmllbGQN
Cj4gK2x1YV9nZXRnbG9iYWwNCj4gK2x1YV9nZXRob29rDQo+ICtsdWFfZ2V0aG9va2NvdW50DQo+
ICtsdWFfZ2V0aG9va21hc2sNCj4gK2x1YV9nZXRpDQo+ICtsdWFfZ2V0aW5mbw0KPiArbHVhX2dl
dGxvY2FsDQo+ICtsdWFfZ2V0bWV0YXRhYmxlDQo+ICtsdWFfZ2V0c3RhY2sNCj4gK2x1YV9nZXR0
YWJsZQ0KPiArbHVhX2dldHRvcA0KPiArbHVhX2dldHVwdmFsdWUNCj4gK2x1YV9nZXR1c2VydmFs
dWUNCj4gK2x1YV9pZGVudA0KPiArbHVhX2lzY2Z1bmN0aW9uDQo+ICtsdWFfaXNpbnRlZ2VyDQo+
ICtsdWFfaXNudW1iZXINCj4gK2x1YV9pc3N0cmluZw0KPiArbHVhX2lzdXNlcmRhdGENCj4gK2x1
YV9pc3lpZWxkYWJsZQ0KPiArbHVhX2xlbg0KPiArbHVhX2xvYWQNCj4gK2x1YV9tYWluDQo+ICts
dWFfbmV3c3RhdGUNCj4gK2x1YV9uZXd0aHJlYWQNCj4gK2x1YV9uZXd1c2VyZGF0YQ0KPiArbHVh
X25leHQNCj4gK2x1YV9wY2FsbGsNCj4gK2x1YV9wdXNoYm9vbGVhbg0KPiArbHVhX3B1c2hjY2xv
c3VyZQ0KPiArbHVhX3B1c2hmc3RyaW5nDQo+ICtsdWFfcHVzaGludGVnZXINCj4gK2x1YV9wdXNo
bGlnaHR1c2VyZGF0YQ0KPiArbHVhX3B1c2hsc3RyaW5nDQo+ICtsdWFfcHVzaG5pbA0KPiArbHVh
X3B1c2hudW1iZXINCj4gK2x1YV9wdXNoc3RyaW5nDQo+ICtsdWFfcHVzaHRocmVhZA0KPiArbHVh
X3B1c2h2YWx1ZQ0KPiArbHVhX3B1c2h2ZnN0cmluZw0KPiArbHVhX3Jhd2VxdWFsDQo+ICtsdWFf
cmF3Z2V0DQo+ICtsdWFfcmF3Z2V0aQ0KPiArbHVhX3Jhd2dldHANCj4gK2x1YV9yYXdsZW4NCj4g
K2x1YV9yYXdzZXQNCj4gK2x1YV9yYXdzZXRpDQo+ICtsdWFfcmF3c2V0cA0KPiArbHVhX3Jlc3Vt
ZQ0KPiArbHVhX3JvdGF0ZQ0KPiArbHVhX3NldGFsbG9jZg0KPiArbHVhX3NldGZpZWxkDQo+ICts
dWFfc2V0Z2xvYmFsDQo+ICtsdWFfc2V0aG9vaw0KPiArbHVhX3NldGkNCj4gK2x1YV9zZXRsb2Nh
bA0KPiArbHVhX3NldG1ldGF0YWJsZQ0KPiArbHVhX3NldHRhYmxlDQo+ICtsdWFfc2V0dG9wDQo+
ICtsdWFfc2V0dXB2YWx1ZQ0KPiArbHVhX3NldHVzZXJ2YWx1ZQ0KPiArbHVhX3N0YXR1cw0KPiAr
bHVhX3N0cmluZ3RvbnVtYmVyDQo+ICtsdWFfdG9ib29sZWFuDQo+ICtsdWFfdG9jZnVuY3Rpb24N
Cj4gK2x1YV90b2ludGVnZXJ4DQo+ICtsdWFfdG9sc3RyaW5nDQo+ICtsdWFfdG9udW1iZXJ4DQo+
ICtsdWFfdG9wb2ludGVyDQo+ICtsdWFfdG90aHJlYWQNCj4gK2x1YV90b3VzZXJkYXRhDQo+ICts
dWFfdHlwZQ0KPiArbHVhX3R5cGVuYW1lDQo+ICtsdWFfdXB2YWx1ZWlkDQo+ICtsdWFfdXB2YWx1
ZWpvaW4NCj4gK2x1YV92ZXJzaW9uDQo+ICtsdWFfeG1vdmUNCj4gK2x1YV95aWVsZGsNCj4gK2x1
YWlfY3R5cGVfDQo+ICtsdWFvcGVuX2Jhc2UNCj4gK2x1YW9wZW5fYml0MzINCj4gK2x1YW9wZW5f
Y29yb3V0aW5lDQo+ICtsdWFvcGVuX2RlYnVnDQo+ICtsdWFvcGVuX2lvDQo+ICtsdWFvcGVuX21h
dGgNCj4gK2x1YW9wZW5fb3MNCj4gK2x1YW9wZW5fcGFja2FnZQ0KPiArbHVhb3Blbl9zdHJpbmcN
Cj4gK2x1YW9wZW5fdGFibGUNCj4gK2x1YW9wZW5fdXRmOA0KPiAtLQ0KPiAyLjExLjANCj4NCj4N
Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdA0KPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcNCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5k
IGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxl
Z2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5
IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMg
dG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3Ig
Y29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 04:52:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 04:52:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9izf-0002Mr-9j; Mon, 16 Sep 2019 04:52:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9ize-0002MK-74
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 04:52:06 +0000
X-Inumbo-ID: b9976066-d83d-11e9-b299-bc764e2007e4
Received: from EUR01-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.13.82]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b9976066-d83d-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 04:52:03 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=fgwUTHt3vuIdNyzJQ3itYKM7KthSPmo5GR/XELWPDL4=;
 b=NRe+6F6rw1Xe17e3eJm8FM5/NagVlw/MktDa+l67ohPwwDxcn1MUwu/2HAVDo8YEPyKkcSjAH3MsGjwz1U9lg2fgarvZvDfTw50iM7nA8GtUUG+1Th91yPfCqIf9jLTxNEUZPuCJdwPBpYMd7ktRAmOt+5iWGhV5HH/aCgzm+L4=
Received: from VI1PR08CA0178.eurprd08.prod.outlook.com (2603:10a6:800:d1::32)
 by AM6PR08MB3941.eurprd08.prod.outlook.com (2603:10a6:20b:ab::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Mon, 16 Sep
 2019 04:52:00 +0000
Received: from AM5EUR03FT057.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::206) by VI1PR08CA0178.outlook.office365.com
 (2603:10a6:800:d1::32) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17 via Frontend
 Transport; Mon, 16 Sep 2019 04:52:00 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT057.mail.protection.outlook.com (10.152.17.44) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 04:51:59 +0000
Received: ("Tessian outbound 5061e1b5386c:v31");
 Mon, 16 Sep 2019 04:51:56 +0000
X-CR-MTA-TID: 64aa7808
Received: from 9e668fe540a1.2 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.6.56]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 B0EAA3EB-0C61-4F8A-A62C-6FFFEF5CB29B.1; 
 Mon, 16 Sep 2019 04:51:51 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2056.outbound.protection.outlook.com [104.47.6.56])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 9e668fe540a1.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Mon, 16 Sep 2019 04:51:51 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=kNut4OLiL5yADAN+KAlFy3f9UvoJ0B+35zXXQe2B8xrM/ZkZhUkH7XZg/p1KdQTZkP+/KdgqK8r2MuEX+YnEE96N5rRRTe8QpxBQt8mQY2ZIBFgvn+BBOSzzCxbkq73zrC25v+dDzSs9Fqxl15l/lK7h+jwUB7si9M2Wojl6y7fezAIx/ykpgv8Owax1eFuJ6JsHkbONO2gYWoPa3gNNVNlXGsKSDarGqZSwj/1F7oOFWUZc2Av1W5/5Iw5EGaSSjAhgIK8jV4F2bHwyu7syY7alNKepDavx8ffyPaRHut1fEniUclopS5lO4bvrfvOrcJFfcRI3SifpicWG8V86lA==
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=lkQGGnvCLuM0zR0ihEbyG0F4AodkFi17NbLxKUJ5MOA=;
 b=YYd6jUS4lzst8Qi6HYH++pCyu6i+THtqP+zoCLhQ92RAWie9h7T+7dkJ8/YhiF/7iH8l6SyygxOqDecdoxYyUflJ/qhL7aoaiQydmp2c+3G6rG/4b19mTYc1RjksM1qbsWB6e70ZnErFyQrv5BOzdbxwNWr2YLZfLmVWmm+RxR0C8+5jiswVgQ+9Vw/nNPkH/uffRNyJC7M49YiqMxnZ7Gq0P67OeMbSAGHrgDpstRgxJ8ZRKSvkGFK74vkUpqhPaP1Y6r0p3l3Sm2+UQ/CDBlmheXMHfKmW/LHXaqyID8Llrl7KgiRCf5Jf0P9E0a7D1JR4RxUjwxlSi+LoUaDndw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=lkQGGnvCLuM0zR0ihEbyG0F4AodkFi17NbLxKUJ5MOA=;
 b=7LGVi/vMjuEelndyjzgYE4wHNpykvRLLrUhiOxxBkT/O4CYXa9zS6lD48jUkkZBi//AQw8fMEVpN+aSJxM5qu4A4xwEaZFaw/Is/G+FfMgKGO06odpyrBnGGQmaVprAQDU/x9Xql2vZR+M4XSnkGgv4J2n8uFRc/cZBr9F0gt8A=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3468.eurprd08.prod.outlook.com (20.177.120.139) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.17; Mon, 16 Sep 2019 04:51:50 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 04:51:50 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>, Felipe Huici
 <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches
 directory
Thread-Index: AQHVaJiix6rt57EhKEeLa6xHHqw0FqctwLCQgAACbPA=
Date: Mon, 16 Sep 2019 04:51:50 +0000
Message-ID: <DB7PR08MB3082634890EB10DA96C3D033F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
 <20190911120107.11757-4-felipe.huici@neclab.eu>
 <DB7PR08MB308215F5D14270DCCCF46763F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
In-Reply-To: <DB7PR08MB308215F5D14270DCCCF46763F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: e00dbec7-a1ba-47e0-952c-f905593acc2a.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 50f50818-6951-4ad8-57de-08d73a619b96
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3468; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3468:|DB7PR08MB3468:|AM6PR08MB3941:
X-MS-Exchange-PUrlCount: 1
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM6PR08MB3941C571F7F3BCB1C2BA3C45F78C0@AM6PR08MB3941.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(366004)(376002)(39860400002)(346002)(396003)(136003)(13464003)(199004)(189003)(229853002)(9686003)(6246003)(3846002)(6116002)(74316002)(71190400001)(71200400001)(2940100002)(7696005)(102836004)(26005)(53936002)(6506007)(8676002)(81166006)(81156014)(55236004)(7736002)(2501003)(76176011)(99286004)(6306002)(8936002)(2906002)(186003)(55016002)(11346002)(5660300002)(316002)(66446008)(64756008)(66556008)(66476007)(66946007)(33656002)(14444005)(5024004)(305945005)(53546011)(476003)(256004)(478600001)(446003)(966005)(66066001)(25786009)(14454004)(110136005)(52536014)(86362001)(76116006)(486006)(6436002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3468;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: e6VVIndkCenl93K7ZGiOP0M3OWdeCf0JJ0kJRl4/f6ExIuKI8qzdK45D8WGSFoKaLpf1PWDm2Z3Hhdmy7F2ausiNAdLwPLi/0MvusnMvlBnXaj9aL/cfkv/ocQ12bxHaFYogmbMUxzbx6Q/jnGIVLphOGbT2yOnnsRu91jpf/hct7hKPpIgsqAuvCFColCbgadPNtw1OtUVxbOpISvCaES1pcB1j+b5zc/DqR9HXcg/5T42YdOwSblAw1ZbZgIiEWnTdGBJ39LSwAsHkcJ8WHUmNZLWHrwz9XA/3POxkP1mkdtZo+rnouehiyZma61hHPEbS+BhwiNwFODLLdPL7OLmTFk6sqdL4CLpm+FlpaXcA/l/iBbdxEC275zinlPbt3KZH9b36gQ3ohol4KpHEQyRFPHwYeojQN9mBsx1t24A=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3468
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT057.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(39860400002)(376002)(396003)(346002)(13464003)(199004)(189003)(40434004)(7736002)(8676002)(76176011)(25786009)(52536014)(86362001)(26005)(50466002)(436003)(81166006)(2501003)(446003)(8936002)(110136005)(2906002)(81156014)(102836004)(63350400001)(22756006)(6246003)(6506007)(126002)(53546011)(486006)(229853002)(966005)(5024004)(14444005)(14454004)(99286004)(33656002)(36906005)(305945005)(316002)(66066001)(9686003)(6306002)(478600001)(2940100002)(11346002)(336012)(74316002)(26826003)(5660300002)(23676004)(6116002)(186003)(76130400001)(2486003)(476003)(7696005)(55016002)(47776003)(70206006)(70586007)(3846002)(356004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR08MB3941;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 2b4c1ff4-4739-4698-ab0a-08d73a61963a
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM6PR08MB3941; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: hLcwZmkafhBgXEPheEHnsCDZhTgDxSnUj2HusUmwq/JjP8p/YLzXogWGviB5hmFhNBuY/qMXIWD3Pcf2e5S214bSiypHuogMnwCjqo3QUo1lh5TUPw9kwPxTBQ0miegVevnTu7StMDorQ5gDbMjNN6NO9XPcgYlohbyoKJViSWJGq8GGONrKO+/XN1WBTUqOaLIYT7pN0UlTgDcWbtIz7twfMDvWGIwttUeqP/DUQHyMXAtpoILTe0MBJsJ79nOh8xCdeIGOJ0yzwsHG5cUySXLy1EFolotvpfZMhRjQoPQPXQmU8afvVAg7RWKsmxem0iUR0m8yT3gJZ1Ljzw8SwcbAmFu+d/bBFy+bWSnSsbJWyGnL2JAnkpVGLJEFMMTHuuFFGAVMIc8emUOpXLdxZIOu5KPt+ARhKWibPXjcvbM=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 04:51:59.2194 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 50f50818-6951-4ad8-57de-08d73a619b96
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3941
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches
 directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQpTb3JyeSwgSSBoYXZlIHRvIHdpdGhkcmF3IG15IGFjY2VwdGFuY2UgZm9yIHRo
aXMgcGF0Y2ggYmVjYXVzZSBteSBjb21waWxlciBjb21wbGFpbnMNCm9uIHg4NiwgZ2NjIHZlcnNp
b24gNy40LjAgKFVidW50dSA3LjQuMC0xdWJ1bnR1MX4xOC4wNC4xKQ0KL3Jvb3QvaGovVUsvYXBw
cy9oZWxsb3dvcmxkL2J1aWxkL2xpYmx1YS9vcmlnaW4vbHVhLTUuMy41L3NyYy9sdWEuYzo1NjE6
OTogd2FybmluZzogdW51c2VkIHZhcmlhYmxlIOKAmGNzdHLigJkgWy1XdW51c2VkLXZhcmlhYmxl
XQ0KICAgY2hhciAqY3N0cjsNCiAgICAgICAgIF5+fn4NCi9yb290L2hqL1VLL2FwcHMvaGVsbG93
b3JsZC9idWlsZC9saWJsdWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbHVhLmM6NTYwOjMyOiB3YXJu
aW5nOiB1bnVzZWQgdmFyaWFibGUg4oCYaW1n4oCZIFstV3VudXNlZC12YXJpYWJsZV0NCiAgIHN0
cnVjdCB1a3BsYXRfbWVtcmVnaW9uX2Rlc2MgaW1nOw0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBefn4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNaW5p
b3MtZGV2ZWwgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbiBC
ZWhhbGYNCj4gT2YgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gU2VudDogMjAx
OeW5tDnmnIgxNuaXpSAxMjo0Mw0KPiBUbzogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVj
bGFiLmV1PjsgbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcNCj4gU3ViamVjdDogUmU6IFtNaW5p
b3MtZGV2ZWxdIFtVTklLUkFGVC9MSUJMVUEgUEFUQ0ggdjIgMy80XSBBZGQgcGF0Y2hlcw0KPiBk
aXJlY3RvcnkNCj4NCj4gSGkgRmVsaXBlDQo+DQo+IExHVE0NCj4gUmV2aWV3ZWQtYnk6IEppYSBI
ZSA8anVzdGluLmhlQGFybS5jb20+DQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4g
PiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2pl
Y3Qub3JnPiBPbg0KPiBCZWhhbGYNCj4gPiBPZiBGZWxpcGUgSHVpY2kNCj4gPiBTZW50OiAyMDE5
5bm0OeaciDEx5pelIDIwOjAxDQo+ID4gVG86IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnDQo+
ID4gQ2M6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCj4gPiBTdWJqZWN0
OiBbTWluaW9zLWRldmVsXSBbVU5JS1JBRlQvTElCTFVBIFBBVENIIHYyIDMvNF0gQWRkIHBhdGNo
ZXMNCj4gPiBkaXJlY3RvcnkNCj4gPg0KPiA+IFBhdGNoIHRvIHJlbmFtZSBtYWluIGZ1bmN0aW9u
IGFuZCB0byBhZGQgaW5pdHJkIHN1cHBvcnQgdG8gbWFpbiBsb29wLg0KPiA+DQo+ID4gU2lnbmVk
LW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KPiA+IC0tLQ0K
PiA+ICBwYXRjaGVzLzAwMDEtYWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2ggfCA0
Mg0KPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAxIGZpbGUgY2hhbmdlZCwgNDIg
aW5zZXJ0aW9ucygrKQ0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLWFkZC1p
bml0cmQtcmVuYW1lLWVudHJ5LXBvaW50LnBhdGNoDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvcGF0
Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5LXBvaW50LnBhdGNoDQo+ID4gYi9wYXRj
aGVzLzAwMDEtYWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2gNCj4gPiBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAuLjEzNWEwYzQNCj4gPiAtLS0gL2Rldi9u
dWxsDQo+ID4gKysrIGIvcGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5LXBvaW50
LnBhdGNoDQo+ID4gQEAgLTAsMCArMSw0MiBAQA0KPiA+ICstLS0gYS9zcmMvbHVhLmMgICAgICAy
MDE3LTA0LTE5IDE5OjI5OjU3LjAwMDAwMDAwMCArMDIwMA0KPiA+ICsrKysgYi9zcmMvbHVhLmMg
ICAgICAyMDE5LTA5LTAzIDEzOjM2OjA5LjQzNzgwNzg5MCArMDIwMA0KPiA+ICtAQCAtNiw2ICs2
LDggQEANCj4gPiArDQo+ID4gKyAjZGVmaW5lIGx1YV9jDQo+ID4gKw0KPiA+ICsrI2luY2x1ZGUg
PHVrL3BsYXQvbWVtb3J5Lmg+DQo+ID4gKysNCj4gPiArICNpbmNsdWRlICJscHJlZml4LmgiDQo+
ID4gKw0KPiA+ICsNCj4gPiArQEAgLTU1NSw2ICs1NTcsOSBAQA0KPiA+ICsgICBpbnQgYXJnYyA9
IChpbnQpbHVhX3RvaW50ZWdlcihMLCAxKTsNCj4gPiArICAgY2hhciAqKmFyZ3YgPSAoY2hhciAq
KilsdWFfdG91c2VyZGF0YShMLCAyKTsNCj4gPiArICAgaW50IHNjcmlwdDsNCj4gPiArKyAgc3Ry
dWN0IHVrcGxhdF9tZW1yZWdpb25fZGVzYyBpbWc7DQo+ID4gKysgIGNoYXIgKmNzdHI7DQo+ID4g
KysNCj4gPiArICAgaW50IGFyZ3MgPSBjb2xsZWN0YXJncyhhcmd2LCAmc2NyaXB0KTsNCj4gPiAr
ICAgbHVhTF9jaGVja3ZlcnNpb24oTCk7ICAvKiBjaGVjayB0aGF0IGludGVycHJldGVyIGhhcyBj
b3JyZWN0IHZlcnNpb24gKi8NCj4gPiArICAgaWYgKGFyZ3ZbMF0gJiYgYXJndlswXVswXSkgcHJv
Z25hbWUgPSBhcmd2WzBdOw0KPiA+ICtAQCAtNTgxLDYgKzU4NiwxMSBAQA0KPiA+ICsgICAgIHJl
dHVybiAwOw0KPiA+ICsgICBpZiAoYXJncyAmIGhhc19pKSAgLyogLWkgb3B0aW9uPyAqLw0KPiA+
ICsgICAgIGRvUkVQTChMKTsgIC8qIGRvIHJlYWQtZXZhbC1wcmludCBsb29wICovDQo+ID4gKysg
IC8qIHNlZSBpZiBzY3JpcHQgaXMgYXZhaWxhYmxlIGZyb20gaW5pdHJkICovDQo+ID4gKysgIGVs
c2UgaWYgKHVrcGxhdF9tZW1yZWdpb25fZmluZF9pbml0cmQwKCZpbWcpID49IDApIHsNCj4gPiAr
KyAgICBjc3RyID0gKGNoYXIgKilpbWcuYmFzZTsNCj4gPiArKyAgICBkb3N0cmluZyhMLCBjc3Ry
LCAiaW5pdHJkIik7DQo+ID4gKysgIH0NCj4gPiArICAgZWxzZSBpZiAoc2NyaXB0ID09IGFyZ2Mg
JiYgIShhcmdzICYgKGhhc19lIHwgaGFzX3YpKSkgeyAgLyogbm8gYXJndW1lbnRzPw0KPiA+ICov
DQo+ID4gKyAgICAgaWYgKGx1YV9zdGRpbl9pc190dHkoKSkgeyAgLyogcnVubmluZyBpbiBpbnRl
cmFjdGl2ZSBtb2RlPyAqLw0KPiA+ICsgICAgICAgcHJpbnRfdmVyc2lvbigpOw0KPiA+ICtAQCAt
NTkzLDcgKzYwMyw3IEBADQo+ID4gKyB9DQo+ID4gKw0KPiA+ICsNCj4gPiArLWludCBtYWluIChp
bnQgYXJnYywgY2hhciAqKmFyZ3YpIHsNCj4gPiArK2ludCBsdWFfbWFpbiAoaW50IGFyZ2MsIGNo
YXIgKiphcmd2KSB7DQo+ID4gKyAgIGludCBzdGF0dXMsIHJlc3VsdDsNCj4gPiArICAgbHVhX1N0
YXRlICpMID0gbHVhTF9uZXdzdGF0ZSgpOyAgLyogY3JlYXRlIHN0YXRlICovDQo+ID4gKyAgIGlm
IChMID09IE5VTEwpIHsNCj4gPiAtLQ0KPiA+IDIuMTEuMA0KPiA+DQo+ID4NCj4gPiBfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiA+IE1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QNCj4gPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCj4g
PiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVsDQo+IElNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBh
bnkgYXR0YWNobWVudHMgYXJlDQo+IGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmls
ZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkDQo+IHJlY2lwaWVudCwgcGxlYXNlIG5v
dGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlDQo+IGNv
bnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0
b3JlIG9yIGNvcHkgdGhlDQo+IGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4N
Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdA0KPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcNCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5k
IGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxl
Z2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5
IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMg
dG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3Ig
Y29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 04:54:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 04:54:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9j1T-0002OY-GU; Mon, 16 Sep 2019 04:53:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9j1S-0002OT-Rv
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 04:53:58 +0000
X-Inumbo-ID: fc72d244-d83d-11e9-95d5-12813bfff9fa
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.3.63]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id fc72d244-d83d-11e9-95d5-12813bfff9fa;
 Mon, 16 Sep 2019 04:53:55 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=uHCWK+dAVfFFzfXXCrJ1Q8XyX06AxaJAvaA2z8tZpv0=;
 b=9vboIBSpheXqRzMQnk3b31rVv+4t7ObkAYq8k086oiWeE769IipQ48I+R8dIx8u43GIk8u/F5uANbZlAOqxSGcGYIID1FKq3YSWU6Kp5bFqR09x8xNDDzNdFJJqey5ftxQAZjZeghv8LJo3vLceVvcUn7MykTku/2xDCbjazirY=
Received: from VI1PR08CA0160.eurprd08.prod.outlook.com (2603:10a6:800:d1::14)
 by AM6PR08MB4295.eurprd08.prod.outlook.com (2603:10a6:20b:b7::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.20; Mon, 16 Sep
 2019 04:53:52 +0000
Received: from AM5EUR03FT035.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::204) by VI1PR08CA0160.outlook.office365.com
 (2603:10a6:800:d1::14) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2263.13 via Frontend
 Transport; Mon, 16 Sep 2019 04:53:52 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xen.org; dkim=pass (signature was verified)
 header.d=armh.onmicrosoft.com;lists.xen.org; dmarc=none action=none
 header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT035.mail.protection.outlook.com (10.152.16.119) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 04:53:48 +0000
Received: ("Tessian outbound 55d20e99e8e2:v31");
 Mon, 16 Sep 2019 04:53:48 +0000
X-CR-MTA-TID: 64aa7808
Received: from c4e262917838.1 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.6.56]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 9A732CAE-EEF0-4A57-BF42-A4088D8ED633.1; 
 Mon, 16 Sep 2019 04:53:43 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2056.outbound.protection.outlook.com [104.47.6.56])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id c4e262917838.1
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Mon, 16 Sep 2019 04:53:43 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MkvKUVgAC/PD8DgoR9K0bPbv4JHFKuQngcV8z8yTE3lpVZGF5TCUkXMslfKf9PGKi80akSco0vTqnqU7cCZns8u4ZdGoMYur67eaqh45xgZzgXKli7uhJJ8rK1o//jj6zWZXfRixKrzvvxnyZjIAoF+AvppvC23kSowzsj5iSqlIW8AJwHfjruxYA068H/dwu2Lv+kiYd96CkKRGDAH+ADGHgeccF58jmcQdAMDKFQE5BAJE273zETcnz5WWqIkxhq8fiEto+QGVpmsbQ8K7BC8f6aeQ6/kwMhATa2uGcQ/1if5+jWZYZVA3Kq/3l2Sa3Ab/vWiCMihXeb6uLAHKKA==
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=w2dvp3fUvPmW5lslHbSmZLDiiQVp/M9qk4TRQuH7urA=;
 b=IiH8RPsVaFY7T1HTVusauy7Yf6Oy9FPadBvYOPlU22L56AsVKUC/U4cQjKa/rBu6bmPNRdq18i1y9jQcRWcRwtnilL2z5rvAdl8X6dm5KD2jtAc5bXGKUgBSl2JbtSxNb5VowP/bDmuP6hcuWnv5EZHRZyQ6yORar2j8FaqJ0+GONFlSF0Pkjs7ncasAlVzwIL41y0xvDaRJvrnfut8YvwuDMi9N7E8NX5368PXlHLnqgobeTFg+bD41mKYPhG9HVt2aY0c/OYLbniuAGyjEC9K6AEw3GdoohIEnLWFn3StPJ0g67iqaiIaAEYEXkKXENbU8I0ORpasFoC7wy6Ceqg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=w2dvp3fUvPmW5lslHbSmZLDiiQVp/M9qk4TRQuH7urA=;
 b=bkH35tin94CDKwv7biJhGFLziGJ0uU21gbepTf/4dYlCDAZ9JKVLoVLS59PgaRKiLsGBk1JQZoDjSDkVOXRW52VDtKlnZSOJuz2UiqkT655VmvyqXNymwxTIZY340PvBV/CNWB/mok32uecF/ejsWH4Ce+9ZjVeOW1WMIKtsUpU=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3468.eurprd08.prod.outlook.com (20.177.120.139) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.17; Mon, 16 Sep 2019 04:53:42 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 04:53:42 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Felipe Huici <felipe.huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 0/4] Support for the
 Lua language
Thread-Index: AQHVaJih0FWeoxoe6UGekXVU1omqnactw+Qw
Date: Mon, 16 Sep 2019 04:53:41 +0000
Message-ID: <DB7PR08MB30821328949522021AAE848BF78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
In-Reply-To: <20190911120107.11757-1-felipe.huici@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 86058844-8ff3-48bb-bee3-27366252bc66.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 8e308f95-cf09-47f2-59f2-08d73a61dd84
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3468; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3468:|AM6PR08MB4295:
X-MS-Exchange-PUrlCount: 1
X-Microsoft-Antispam-PRVS: <AM6PR08MB4295F6D643FEF9CF6E0350B5F78C0@AM6PR08MB4295.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:628;OLM:628;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(366004)(376002)(39860400002)(346002)(396003)(136003)(13464003)(199004)(189003)(229853002)(9686003)(6246003)(3846002)(6116002)(74316002)(71190400001)(71200400001)(7696005)(102836004)(26005)(53936002)(6506007)(8676002)(81166006)(81156014)(55236004)(7736002)(2501003)(76176011)(99286004)(6306002)(8936002)(2906002)(186003)(55016002)(11346002)(5660300002)(316002)(66446008)(64756008)(66556008)(66476007)(66946007)(33656002)(305945005)(53546011)(476003)(256004)(478600001)(446003)(966005)(66066001)(25786009)(14454004)(110136005)(52536014)(86362001)(76116006)(486006)(6436002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3468;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: gqBgpY9CGJ/qCJszi3lYCeGlD0XZsXKPNMVXJyN76cUyjmZSXV09nLjNPTB+SknvvfNxOXgZJuGmzUebAAdL2OmHhwnaNz6opaEX8unL/j2xzj42cY/PdIuuwsrGXvkBdQVQfhJ+42wzzp0ZLk0iKwZTxhy/Ozh9rj7iTZcDceEY1N0zlUmqx1dvDj7EuFwTkQA0xKtjOsm46sXY5XDY/Uzjzs1dhAUWKwULSB7KE85k9NUU1POfTYVraLR8RgNGVWo1aSYXgdsJ5NuZzl6Lq7LfzfBPn9CrU3IE3K/HReDT1ruPPhRgDtHqiWGH6PsayIodeMhCAkTWHtwwjAxMJS1HjrJBpWJVDbSz8VFy2kKENoBh8fGXz7EvFeExmVN/UNqUOpmNFGb9l5/oD+9LxC1y50C/W1xWQ5uYiNQolCg=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3468
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT035.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(396003)(376002)(346002)(136003)(39860400002)(40434004)(189003)(199004)(13464003)(6306002)(70206006)(110136005)(356004)(86362001)(76130400001)(50466002)(486006)(22756006)(126002)(7736002)(70586007)(52536014)(74316002)(305945005)(478600001)(47776003)(25786009)(5660300002)(66066001)(102836004)(6506007)(2501003)(53546011)(316002)(336012)(26826003)(81166006)(81156014)(8676002)(6116002)(5024004)(14444005)(76176011)(966005)(6246003)(8936002)(3846002)(26005)(2486003)(23676004)(476003)(14454004)(63350400001)(436003)(7696005)(229853002)(99286004)(9686003)(186003)(36906005)(11346002)(2906002)(33656002)(446003)(55016002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR08MB4295;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 34dd8b2b-07dd-4f91-bb3a-08d73a61d8d9
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM6PR08MB4295; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: V/HQxh+lkBpFUvutmBGZr4Pf3uv6jXgldz0dbHx/BvkCpM9hLNUJcKYkiNrQ+B/CWQXLjCniTU/NQE7dSvYxJ7hTIeOrBjYsOAZGzwkiW3c9pc3a7TY6n6bWUyquYRBfwTanKv4pRoQ3SgxVtOz6FsJY4mWdyBTAAD0lnfbRhT5uBtSrED0E2NP7zcHGR2KB05Mc1acPeB2Gf9Upp6uY/NncyzQ1MgHto1ltEggihfd8ZmTg/7IrDVRT8pxJw3vIAStN4+61EUAhyoNp8m8euxg2jugQg9yX9AiKuEssqfcgKEPiFuw8oehMQ7tiPxC1XxisSJVoOdan1ySiV+h55ylkf43oKcqiWJVDR9XW1orW5HGyQh49bZVV1Rj1elYaU1H/Vos2cuRQlcgz/6TwFF4nl8pgyg606fD5SzCeOLc=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 04:53:48.6611 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 8e308f95-cf09-47f2-59f2-08d73a61dd84
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4295
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 0/4] Support for the
 Lua language
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlDQpJbiBzdW1tYXJ5DQpQYXRjaCAxLDIsNCBsb29rIGdvb2QgdG8gbWUuDQpQYXRj
aCAzIGdvdCB0aGUgY29tcGlsYXRpb24gd2FybmluZ3MNCg0KLS0NCkNoZWVycywNCkp1c3RpbiAo
SmlhIEhlKQ0KDQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBNaW5p
b3MtZGV2ZWwgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnPiBPbiBC
ZWhhbGYNCj4gT2YgRmVsaXBlIEh1aWNpDQo+IFNlbnQ6IDIwMTnlubQ55pyIMTHml6UgMjA6MDEN
Cj4gVG86IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnDQo+IENjOiBGZWxpcGUgSHVpY2kgPGZl
bGlwZS5odWljaUBuZWNsYWIuZXU+DQo+IFN1YmplY3Q6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFG
VC9MSUJMVUEgUEFUQ0ggdjIgMC80XSBTdXBwb3J0IGZvciB0aGUNCj4gTHVhIGxhbmd1YWdlDQo+
DQo+IFRoaXMgaXMgb3VyIGludGlhbCBwb3J0IG9mIHRoZSBsdWEgbGFuZ3VhZ2UgdG8gVW5pa3Jh
ZnQuIEZvciBub3cgaXQgc3VwcG9ydHMNCj4gaW50ZXJhY3RpdmUgbW9kZSwgcnVubmluZyBhIHN0
cmluZyAoaS5lLiwgYSBzY3JpcHQpICBhbmQgcnVubmluZyBhIHNjcmlwdA0KPiBmcm9tIGEgZmls
ZSBwcm92aWRlZCB2aWEgaW5pdHJkLg0KPg0KPiBDaGFuZ2VzIGZyb20gdjE6DQo+ICopIERlcGVu
ZCBvbiBuZXdsaWINCj4gKikgRml4IGNvbW1pdCBoaXN0b3J5DQo+ICopIEV4cG9ydCBhZGRpdGlv
bmFsIHN5bWJvbHMNCj4NCj4gKioqIEJMVVJCIEhFUkUgKioqDQo+DQo+IEZlbGlwZSBIdWljaSAo
NCk6DQo+ICAgSW50cm9kdWNlIGxpYnJhcnkgc2tlbGV0b24NCj4gICBBZGQgTWFrZWZpbGUudWsN
Cj4gICBBZGQgcGF0Y2hlcyBkaXJlY3RvcnkNCj4gICBFeHBvcnQgc3ltYm9scw0KPg0KPiAgLmdp
dGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI3ICsrDQo+
ICBDT0RJTkdfU1RZTEUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQg
Kw0KPiAgQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICA0ICsNCj4gIENPUFlJTkcubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAzOSArKysNCj4gIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgNCArDQo+ICBNQUlOVEFJTkVSUy5tZCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMTEgKw0KPiAgTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgMTAyICsrKysrKysNCj4gIFJFQURNRS5tZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOSArDQo+ICBleHBvcnRzeW1zLnVrICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAzMzggKysrKysrKysrKysrKysrKysrKysr
KysNCj4gIHBhdGNoZXMvMDAwMS1hZGQtaW5pdHJkLXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaCB8
ICA0MiArKysNCj4gIDEwIGZpbGVzIGNoYW5nZWQsIDU4MCBpbnNlcnRpb25zKCspDQo+ICBjcmVh
dGUgbW9kZSAxMDA2NDQgLmdpdGlnbm9yZQ0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19T
VFlMRS5tZA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IENPTlRSSUJVVElORy5tZA0KPiAgY3JlYXRl
IG1vZGUgMTAwNjQ0IENPUFlJTkcubWQNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsN
Cj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZA0KPiAgY3JlYXRlIG1vZGUgMTAw
NjQ0IE1ha2VmaWxlLnVrDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kDQo+ICBjcmVh
dGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51aw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNo
ZXMvMDAwMS1hZGQtaW5pdHJkLXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaA0KPg0KPiAtLQ0KPiAy
LjExLjANCj4NCj4NCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18NCj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KPiBNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcNCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRo
aXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxz
byBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBw
bGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0
aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwg
b3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91
Lg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 05:48:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 05:48:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9js5-00078Y-Vw; Mon, 16 Sep 2019 05:48:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9js4-00078T-My
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 05:48:20 +0000
X-Inumbo-ID: 940c171c-d845-11e9-978d-bc764e2007e4
Received: from EUR01-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.14.45]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 940c171c-d845-11e9-978d-bc764e2007e4;
 Mon, 16 Sep 2019 05:48:16 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=4ZAq0/3vIxBFVjpL7BoButRhO9WV48vUf3QDq1wW/Sg=;
 b=5XgAngdYPIwwfWpmqsodtd9oWh3OWdeIa6BtbH0ReQL67iFrW5rdQRKKJc/2w6xIEoIWYmlinCV72cKkRVeM6sIypcRDCiGtWVH5MJLjxPj/Vjg4FdkiQKTD9xWoaDjKk+WirxdvJb1XiR/FtW4W8XeUfGFV02gU8yMyLJJnClc=
Received: from HE1PR0802CA0010.eurprd08.prod.outlook.com (2603:10a6:3:bd::20)
 by AM0PR08MB4227.eurprd08.prod.outlook.com (2603:10a6:208:144::23)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.24; Mon, 16 Sep
 2019 05:48:12 +0000
Received: from AM5EUR03FT043.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::207) by HE1PR0802CA0010.outlook.office365.com
 (2603:10a6:3:bd::20) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13 via Frontend
 Transport; Mon, 16 Sep 2019 05:48:12 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT043.mail.protection.outlook.com (10.152.17.43) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 05:48:11 +0000
Received: ("Tessian outbound 55d20e99e8e2:v31");
 Mon, 16 Sep 2019 05:48:09 +0000
X-CR-MTA-TID: 64aa7808
Received: from ad9c86844e6e.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.5.55]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 224F1D49-23EE-49FD-9F51-548EE96652E3.1; 
 Mon, 16 Sep 2019 05:48:04 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2055.outbound.protection.outlook.com [104.47.5.55])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id ad9c86844e6e.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Mon, 16 Sep 2019 05:48:04 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=B+oI8pVMfUAdOl+GPCFw3sfaaW0I60sZYUagMWD5+q9gG7RpiZ2TkfiE16ozmg+lH/RPbqB9CEBtrX0NIWXRf3kdSTvLKGWef5oQduezcqb4qKbDrRaW538F2q6bUUCrZm1mz3ZhdrRMrt3qzSVjAkQU+nXL0yDcFjlwMsHmJGah/agApGKQZ9iowAzLmpI8GgcMpn1LB+JY/FrTSxlGp50vwErZAhiKzij6wQEJ1Wvu5sEKZGrodwfMAlPOh1G0lEprwDF8FalGTlOmRMGip3I/jgIbNg1bFDoCD+Sz722G2mMLGAvfkKyoJteOmgJF/PpwEQ0sK51eIWW354WIAg==
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=a8ZaUVoR5Eown3OGl++HeVkDo3bKwb2iQP2PAsRFzMY=;
 b=OYASWmIjALapMdwiyd3FHd+8UQOcYW1BWLcAoEfdEiR8HiHhj/sf4XNTnFYLU7v2rhzv5/sx3EZU0hg8N8K+6yyFVFLe6RjYFynmOScQuK1uDXcGpnI7qwnMuKdXd4CHGh+TLUmoQQFZTNddCfj45p01e6BmaaYjUNDZijXrMwsOjg/jiUlWq2prfPaY+/pscv31CeimyA6A0g7TwpFNBx3MgjhsGraNlARWSg2kJOE0tAyHzE1BW9EePVwjOO992IrVg4u0/q4caCmhj8mceDnTen4ZNioSYoKfXnrZwiQzgiz0/iCCpsGyyj/EhJMNWmoZ8RuIQRyNxoEkxdudtA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=a8ZaUVoR5Eown3OGl++HeVkDo3bKwb2iQP2PAsRFzMY=;
 b=BVwf0GNFItLVPjBLenZBK8ZLbf8JbWKa8nDl90vVlbg529nOlGKKpNkt9iGvQpL3HMENQiWBkHVdIt8fjNRkvelysMDZ5xIQndkdx77xfrLeGpkLWiVlDtMUKxOxrsiuoH7rv7UoHsLunh0EgDWKs/K1nTcsFO20FP8BUCu6AlY=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3884.eurprd08.prod.outlook.com (20.178.46.20) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.22; Mon, 16 Sep 2019 05:48:01 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 05:48:01 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Sharan Santhanam
 <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 1/7] plat/common: Calculate shift factors for
 coversion between ns and tick
Thread-Index: AQHVRuMDcyXq8Mw1EkGFonaS13PppKckvYkAgAlNFQA=
Date: Mon, 16 Sep 2019 05:48:01 +0000
Message-ID: <DB7PR08MB3082768477F8327BF35E9869F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-2-justin.he@arm.com>
 <AB15EB89-2D66-439F-8F21-1FC5AC6CA6B1@neclab.eu>
In-Reply-To: <AB15EB89-2D66-439F-8F21-1FC5AC6CA6B1@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 5061f9fb-4eac-42ce-8d0f-1923ad71d21c.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: ca6ea727-7d4a-437f-8530-08d73a69757f
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3884; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3884:|DB7PR08MB3884:|AM0PR08MB4227:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM0PR08MB4227AC9C1B274291796F5A9CF78C0@AM0PR08MB4227.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(979002)(4636009)(136003)(366004)(39850400004)(376002)(396003)(346002)(189003)(199004)(13464003)(53754006)(51914003)(8936002)(76176011)(76116006)(66066001)(66946007)(64756008)(256004)(3846002)(14444005)(478600001)(25786009)(4326008)(476003)(486006)(11346002)(66476007)(446003)(66556008)(66446008)(6116002)(71200400001)(71190400001)(305945005)(7736002)(316002)(110136005)(2501003)(54906003)(2906002)(33656002)(14454004)(52536014)(7696005)(74316002)(229853002)(99286004)(81166006)(8676002)(5660300002)(81156014)(86362001)(9686003)(55016002)(6246003)(6436002)(26005)(102836004)(6506007)(53546011)(53936002)(55236004)(186003)(969003)(989001)(999001)(1009001)(1019001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3884;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: QOSCzljpQVRYJEVVArlUejPQvDKBLZ8YNkW/GD4D51VoNilncRs8DvnylDj6A7C6ZMPdG+g0UEtSn6oH1O/YQKnJYA3eMJc74cYSH4mIdHA3f78YJ133+0eMuu/bKkhheMPPSH9A9TJP0TSkb+PRWwdL7UnvG4hAjcBdSAQzd5CtmxWtKQyoOzN6kutMpL5Z5Gx1+uM+NTFQXPWgNw6VIPA5u13d4/3Y5iDP+ONMv0dTVEVub/gSQ/GUF6YnbbqUTa5/3080IdjUR3MvUBbE+gAi6K5D1lIBew0NqfjrQQgB6jq4seABFKOb9NmuoeV0UOmbBRKVkM5sumbwkmQtuIYOF92qTC1QZdV5mEl49xKU9kYzux4+g8q5YvcqbC1IpMUuzrFPCrHIaJF358atWnZI6uiPMJijnOl2c+rawkE=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3884
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT043.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(979002)(4636009)(376002)(396003)(136003)(39850400004)(346002)(189003)(199004)(53754006)(13464003)(40434004)(51914003)(70206006)(70586007)(8936002)(99286004)(81156014)(50466002)(14454004)(305945005)(74316002)(8676002)(76130400001)(478600001)(52536014)(86362001)(66066001)(25786009)(4326008)(26826003)(81166006)(22756006)(6506007)(5660300002)(6246003)(7696005)(2486003)(23676004)(26005)(76176011)(7736002)(53546011)(102836004)(186003)(126002)(3846002)(54906003)(110136005)(476003)(9686003)(11346002)(63350400001)(436003)(446003)(229853002)(336012)(356004)(6116002)(486006)(14444005)(5024004)(2906002)(55016002)(2501003)(316002)(33656002)(47776003)(36906005)(969003)(989001)(999001)(1009001)(1019001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB4227;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: aca6d6ef-c7d1-4088-6fee-08d73a696f8e
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM0PR08MB4227; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: tKJ87M8HL878X9jeUHLe8EIui7AUTTDBInRUR+njLtlOlVBqVrlEuOLi9Ywxot94FYeLO7/ybRnThCmqpJ3V7nMkKEr4EoXMEkd6if82VQSFg16iyKrm4YixdL6I7C7sTcqyvk0w3+JTgOIWWlkaB5i8MnEjpFPBi6vheTJydQgk/m5FeiVbm0cgcr9DBjC1DdKNmgS59/IVmZaslWbi2Catjk4eP8M/TQAGusscyb7pUNnd6q2yY8cXBV/RX031+reMyaM/YsotOiCwHPHPWoomo2lsS/ySs+IveKC/TFX/tKsMQVVlza7/V9QizBTFyhZl20R5XHvgVXAQH7bx2LztFlXEatdRMMHOUx7Ga93GrVK/f/7RUVNkpfW61jxxAoOVkGcKpDWm3f/rbvrQZjJAdliGteIkrrA2mQLagZE=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 05:48:11.2912 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ca6ea727-7d4a-437f-8530-08d73a69757f
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4227
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 1/7] plat/common: Calculate
 shift factors for coversion between ns and tick
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 Julien Grall <Julien.Grall@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2FudGlhZ28sIHRoYW5rcyBmb3IgdGhlIHJldmlldw0KUGxlYXNlIHNlZSBpbmxpbmUNCg0K
PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBTYW50aWFnbyBQYWdhbmkgPFNh
bnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+DQo+IFNlbnQ6IDIwMTnlubQ55pyIMTDml6UgMTU6MDIN
Cj4gVG86IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNv
bT47IG1pbmlvcy0NCj4gZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFNpbW9uIEt1ZW56ZXIg
PHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PjsNCj4gU2hhcmFuIFNhbnRoYW5hbSA8U2hhcmFuLlNh
bnRoYW5hbUBuZWNsYWIuZXU+DQo+IENjOiBKdWxpZW4gR3JhbGwgPEp1bGllbi5HcmFsbEBhcm0u
Y29tPjsgS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKQ0KPiA8S2FseS5YaW5AYXJtLmNv
bT47IFdlaSBDaGVuIChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gPFdlaS5DaGVuQGFybS5jb20+
OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpDQo+IDxKaWFueW9uZy5XdUBhcm0u
Y29tPg0KPiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgMS83XSBwbGF0L2NvbW1vbjog
Q2FsY3VsYXRlIHNoaWZ0IGZhY3RvcnMNCj4gZm9yIGNvdmVyc2lvbiBiZXR3ZWVuIG5zIGFuZCB0
aWNrDQo+DQo+IEhpIGFsbCwNCj4NCj4gVGhhbmtzIGZvciB0aGUgcGF0Y2guIFBsZWFzZSBmaW5k
IG15IGNvbW1lbnRzIGlubGluZToNCj4NCj4g77u/T24gMzAuMDcuMTksIDE2OjI3LCAiSmlhIEhl
IiA8anVzdGluLmhlQGFybS5jb20+IHdyb3RlOg0KPg0KPiAgICAgV2UgaGFkIHNoaWZ0IGZhY3Rv
ciBmb3IgY292ZXJ0aW5nIGNvdW50ZXIgdGlja3MgdG8gbnMsIGJ1dCBpdCdzIG5vdA0KPiAgICAg
ZW5vdWdoLiBTb21ldGltZSwgd2UgbmVlZCB0byBjb3ZlcnQgbnMgdG8gdGlja3MuIEZvciBleGFt
cGxlLCB3ZSdsbA0KPiAgICAgdHJhbnNmZXIgc2xlZXAobnMpIHRvIGNvdW50ZXIgdGlja3MuIElm
IHdlIGRvbid0IGhhdmUgdGhlIHNoaWZ0IGZhY3RvciwNCj4gICAgIHRoZSBjb252ZXJzaW9uIGFj
Y3VyYWN5IHdpbGwgYmUgbG93ZXIuDQo+DQo+ICAgICBTaWduZWQtb2ZmLWJ5OiBXZWkgQ2hlbiA8
d2VpLmNoZW5AYXJtLmNvbT4NCj4gICAgIFNpZ25lZC1vZmYtYnk6IEppYW55b25nIFd1IDxqaWFu
eW9uZy53dUBhcm0uY29tPg0KPiAgICAgU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVA
YXJtLmNvbT4NCj4gICAgIC0tLQ0KPiAgICAgIHBsYXQvY29tbW9uL2FybS90aW1lLmMgfCAxMTEN
Cj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0NCj4gICAgICAxIGZp
bGUgY2hhbmdlZCwgODYgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0pDQo+DQo+ICAgICBk
aWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vYXJtL3RpbWUuYyBiL3BsYXQvY29tbW9uL2FybS90aW1l
LmMNCj4gICAgIGluZGV4IDFiMzA5MDMuLjRjNjYwMzkgMTAwNjQ0DQo+ICAgICAtLS0gYS9wbGF0
L2NvbW1vbi9hcm0vdGltZS5jDQo+ICAgICArKysgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jDQo+
ICAgICBAQCAtNDcsMjEgKzQ3LDgzIEBADQo+ICAgICAgc3RhdGljIHVpbnQ2NF90IGJvb3RfdGlj
a3M7DQo+ICAgICAgc3RhdGljIHVpbnQzMl90IGNvdW50ZXJfZnJlcTsNCj4NCj4gICAgIC0vKg0K
PiAgICAgLSAqIFNoaWZ0IGZhY3RvciBmb3IgY291bnRlciBzY2FsaW5nIG11bHRpcGxpZXI7IHJl
ZmVycmVkIHRvIGFzIFMgaW4gdGhlDQo+ICAgICAtICogZm9sbG93aW5nIGNvbW1lbnRzLg0KPiAg
ICAgLSAqLw0KPiAgICAgLXN0YXRpYyB1aW50OF90IGNvdW50ZXJfc2hpZnQ7DQo+DQo+ICAgICAt
LyogTXVsdGlwbGllciBmb3IgY29udmVydGluZyBjb3VudGVyIHRpY2tzIHRvIG5zZWNzLiAoMC5T
KSBmaXhlZCBwb2ludC4gKi8NCj4gICAgICsvKiBTaGlmdCBmYWN0b3IgZm9yIGNvbnZlcnRpbmcg
dGlja3MgdG8gbnMgKi8NCj4gICAgICtzdGF0aWMgdWludDhfdCBjb3VudGVyX3NoaWZ0X3RvX25z
Ow0KPiAgICAgKw0KPiAgICAgKy8qIFNoaWZ0IGZhY3RvciBmb3IgY29udmVydGluZyBucyB0byB0
aWNrcyAqLw0KPiAgICAgK3N0YXRpYyB1aW50OF90IGNvdW50ZXJfc2hpZnRfdG9fdGljazsNCj4g
ICAgICsNCj4gICAgICsvKiBNdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIGNvdW50ZXIgdGlja3Mg
dG8gbnNlY3MgKi8NCj4gICAgICBzdGF0aWMgdWludDMyX3QgbnNfcGVyX3RpY2s7DQo+DQo+ICAg
ICArLyogTXVsdGlwbGllciBmb3IgY29udmVydGluZyBuc2VjcyB0byBjb3VudGVyIHRpY2tzICov
DQo+ICAgICArc3RhdGljIHVpbnQzMl90IHRpY2tfcGVyX25zOw0KPiAgICAgKw0KPiAgICAgKy8q
DQo+ICAgICArICogVGhlIG1heGltdW0gdGltZSByYW5nZSBpbiBzZWNvbmRzIHdoaWNoIGNhbiBi
ZSBjb252ZXJ0ZWQgYnkNCj4gbXVsdGlwbGllcg0KPiAgICAgKyAqIGFuZCBzaGlmdCBmYWN0b3Jz
LiBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoZSBjb252ZXJ0ZWQgdmFsdWUgbm90IHRvDQo+IGV4Y2Vl
ZA0KPiAgICAgKyAqIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyLiBJbmNyZWFzZSB0aGUgdGltZSBy
YW5nZSB3aWxsIHJlZHVjZSB0aGUNCj4gYWNjdXJhY3kNCj4gICAgICsgKiBvZiBjb252ZXJzaW9u
LCBiZWNhdXNlIHdlIHdpbGwgZ2V0IHNtYWxsZXIgbXVsdGlwbGllciBhbmQgc2hpZnQgZmFjdG9y
cy4NCj4gICAgICsgKiBJbiB0aGlzIGNhc2UsIHdlIHNlbGVjdGVkIDM2MDBzIGFzIHRoZSB0aW1l
IHJhbmdlLg0KPiAgICAgKyAqLw0KPiAgICAgKyNkZWZpbmUgX19NQVhfQ09OVkVSVF9TRUNTICAg
ICAgIDM2MDBVTA0KPiBDT01NTkVUOiBBcyBJIHVuZGVyc3RhbmQgaXQsICB0aGlzICNkZWZpbmUg
aXMgYWxzbyB1c2VkIHdoZW4gY2FsY3VsYXRpbmcNCj4gdGhlIG5zX3Blcl90aWNrLCBpdCBub3Qg
b25seSBpbXBvc2VzIGEgbGltaXQgdG8gdGhlIHRpbWUgcmFuZ2UsIGJ1dCBhbHNvIHRvDQo+IHRo
ZSB0aWNrIHJhbmdlLiBUaGF0IGlzLCB3ZSBkbyBub3Qgc3VwcG9ydCBjb252ZXJ0aW5nIG5zX3Rv
X3RpY2tzIGZvciBtb3JlDQo+IHRoYW4gMzYwMCBzZWNvbmRzLCBhbmQgYXMgd2VsbCB3ZSBkbyBu
b3Qgc3VwcG9ydCB0byBjb252ZXJ0IHRpY2tzX3RvX25zDQo+IGZvciBtb3JlIHRoYW4gMzYwMDAw
MDAwMCB0aWNrcywgY29ycmVjdD8gTWF5YmUgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZQ0KPiAjZGVm
aW5lIHRvIHNvbWV0aGluZyBtb3JlIGdlbmVyaWMuDQpIbW0sIF9fTUFYX0NPTlZFUlRfU0VDUyBp
cyBmb3IgY29udmVydGluZyB0aWNrc190b19ucyBvbmx5LCBub3QgdGhlDQpjb252ZXJ0aW5nIG9m
IG5zX3RvX3RpY2tzDQpTbywgaG93IGFib3V0IF9fTUFYX1NFQ1NfQ09OVkVSVF9UT19OUyA/DQoN
Cj4gICAgICsNCj4gICAgICAvKiBIb3cgbWFueSBuYW5vc2Vjb25kcyBwZXIgc2Vjb25kICovDQo+
ICAgICAgI2RlZmluZSBOU0VDX1BFUl9TRUMgdWthcmNoX3RpbWVfc2VjX3RvX25zZWMoMSkNCj4N
Cj4gICAgICBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHRpY2tzX3RvX25zKHVpbnQ2NF90IHRpY2tz
KQ0KPiAgICAgIHsNCj4gICAgIC0gcmV0dXJuIChuc19wZXJfdGljayAqIHRpY2tzKSA+PiBjb3Vu
dGVyX3NoaWZ0Ow0KPiAgICAgKyByZXR1cm4gKG5zX3Blcl90aWNrICogdGlja3MpID4+IGNvdW50
ZXJfc2hpZnRfdG9fbnM7DQo+IENPTU1FTlQ6IE1heWJlIGFkZCBhbiBhc3NlcnRpb24gZm9yIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyBhcyBhDQo+IHNhbml0eSBjaGVjaz8NCg0KWWVzLCBy
ZWFzb25hYmxlIHRvIG1lDQoNCj4gICAgICt9DQo+ICAgICArDQo+ICAgICArc3RhdGljIGlubGlu
ZSB1aW50NjRfdCBuc190b190aWNrcyh1aW50NjRfdCBucykNCj4gICAgICt7DQo+ICAgICArIHJl
dHVybiAodGlja19wZXJfbnMgKiBucykgPj4gY291bnRlcl9zaGlmdF90b190aWNrOw0KPiBDT01N
RU5UOiBNYXliZSBhZGQgYW4gYXNzZXJ0aW9uIGZvciB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vj
b25kcw0KPiBhcyBhIHNhbml0eSBjaGVjaz8NCg0KWWVzDQoNCj4gICAgICt9DQo+ICAgICArDQo+
ICAgICArLyoNCj4gICAgICsgKiBDYWxjdWxhdGUgbXVsdGlwbGllci9zaGlmdCBmYWN0b3JzIGZv
ciBzY2FsZWQgbWF0aC4NCj4gICAgICsgKi8NCj4gICAgICtzdGF0aWMgdm9pZCBjYWxjdWxhdGVf
bXVsdF9zaGlmdCh1aW50MzJfdCAqbXVsdCwgdWludDhfdCAqc2hpZnQsDQo+ICAgICArICAgICAg
ICAgdWludDY0X3QgZnJvbSwgdWludDY0X3QgdG8pDQo+ICAgICArew0KPiAgICAgKyB1aW50NjRf
dCB0bXA7DQo+ICAgICArIHVpbnQzMl90IHNmdCwgc2Z0YWNjID0gMzI7DQo+ICAgICArDQo+ICAg
ICArIC8qDQo+ICAgICArICAqIENhbGN1bGF0ZSB0aGUgc2hpZnQgZmFjdG9yIHdoaWNoIGlzIGxp
bWl0aW5nIHRoZSBjb252ZXJzaW9uDQo+ICAgICArICAqIHJhbmdlOg0KPiAgICAgKyAgKi8NCj4g
ICAgICsgdG1wID0gKCh1aW50NjRfdClfX01BWF9DT05WRVJUX1NFQ1MgKiBmcm9tKSA+PiAzMjsN
Cj4gICAgICsgd2hpbGUgKHRtcCkgew0KPiAgICAgKyAgICAgICAgIHRtcCA+Pj0gMTsNCj4gICAg
ICsgICAgICAgICBzZnRhY2MtLTsNCj4gICAgICsgfQ0KPiAgICAgKw0KPiAgICAgKw0KPiAgICAg
KyAvKg0KPiAgICAgKyAgKiBDYWxjdWxhdGUgc2hpZnQgZmFjdG9yIChTKSBhbmQgc2NhbGluZyBt
dWx0aXBsaWVyIChNKS4NCj4gICAgICsgICoNCj4gICAgICsgICogKFMpIG5lZWRzIHRvIGJlIHRo
ZSBsYXJnZXN0IHNoaWZ0IGZhY3RvciAoPD0gbWF4X3NoaWZ0KSB3aGVyZQ0KPiAgICAgKyAgKiB0
aGUgcmVzdWx0IG9mIHRoZSBNIGNhbGN1bGF0aW9uIGJlbG93IGZpdHMgaW50byB1aW50MzJfdA0K
PiAgICAgKyAgKiB3aXRob3V0IHRydW5jYXRpb24uDQo+ICAgICArICAqDQo+ICAgICArICAqIG11
bHRpcGxpZXIgPSAodGFyZ2V0IDw8IHNoaWZ0KSAvIHNvdXJjZQ0KPiAgICAgKyAgKi8NCj4gICAg
ICsgZm9yIChzZnQgPSAzMjsgc2Z0ID4gMDsgc2Z0LS0pIHsNCj4gICAgICsgICAgICAgICB0bXAg
PSAodWludDY0X3QpIHRvIDw8IHNmdDsNCj4gICAgICsNCj4gICAgICsgICAgICAgICAvKiBFbnN1
cmluZyB3ZSByb3VuZCB0byBuZWFyZXN0IHdoZW4gY2FsY3VsYXRpbmcgdGhlDQo+ICAgICArICAg
ICAgICAgICogbXVsdGlwbGllcg0KPiAgICAgKyAgICAgICAgICAqLw0KPiAgICAgKyAgICAgICAg
IHRtcCArPSBmcm9tIC8gMjsNCj4gICAgICsgICAgICAgICB0bXAgLz0gZnJvbTsNCj4gICAgICsg
ICAgICAgICBpZiAoKHRtcCA+PiBzZnRhY2MpID09IDApDQo+ICAgICArICAgICAgICAgICAgICAg
ICBicmVhazsNCj4gICAgICsgfQ0KPiAgICAgKyAqbXVsdCA9IHRtcDsNCj4gICAgICsgKnNoaWZ0
ID0gc2Z0Ow0KPiAgICAgIH0NCj4NCj4gICAgICAvKg0KPiAgICAgQEAgLTE0NSwyOSArMjA3LDI4
IEBAIHN0YXRpYyBfX3U2NCAgZ2VuZXJpY190aW1lcl9lcG9jaG9mZnNldCh2b2lkKQ0KPg0KPiAg
ICAgIHN0YXRpYyBpbnQgZ2VuZXJpY190aW1lcl9pbml0KHZvaWQpDQo+ICAgICAgew0KPiAgICAg
KyBjb3VudGVyX2ZyZXEgPSBnZXRfY291bnRlcl9mcmVxdWVuY3koKTsNCj4gICAgICsNCj4gICAg
ICAgLyoNCj4gICAgIC0gICogQ2FsY3VsYXRlIGNvdW50ZXIgc2hpZnQgZmFjdG9yIGFuZCBzY2Fs
aW5nIG11bHRpcGxpZXIuDQo+ICAgICAtICAqDQo+ICAgICAtICAqIGNvdW50ZXJfc2hpZnQgKFMp
IG5lZWRzIHRvIGJlIHRoZSBsYXJnZXN0ICg8PTMyKSBzaGlmdCBmYWN0b3Igd2hlcmUNCj4gICAg
IC0gICogdGhlIHJlc3VsdCBvZiB0aGUgbnNfcGVyX3RpY2sgY2FsY3VsYXRpb24gYmVsb3cgZml0
cyBpbnRvIHVpbnQzMl90DQo+ICAgICAtICAqIHdpdGhvdXQgdHJ1bmNhdGlvbi4gTm90ZSB0aGF0
IHdlIGRpc2FsbG93IGFuIFMgb2YgemVybyB0byBlbnN1cmUNCj4gICAgIC0gICogdGhlIGxvb3Ag
YWx3YXlzIHRlcm1pbmF0ZXMuDQo+ICAgICAtICAqDQo+ICAgICAtICAqICgwLlMpIG5zX3Blcl90
aWNrID0gTlNFQ19QRVJfU0VDIChTLlMpIC8gY291bnRlcl9mcmVxIChTLjApDQo+ICAgICArICAq
IENhbGN1bGF0ZSB0aGUgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIgZm9yDQo+
ICAgICArICAqIGNwbnZlcnRpbmcgdGlja3MgdG8gbnMuDQo+ICAgICAgICAqLw0KPiBUWVBPOiBU
eXBvIGluIGNvbW1lbnQ6IGNwbnZlcnRpbmcgLT4gY29udmVydGluZw0KDQpPSw0KDQo+ICAgICAt
IHVpbnQ2NF90IHRtcDsNCj4gICAgICsgY2FsY3VsYXRlX211bHRfc2hpZnQoJm5zX3Blcl90aWNr
LCAmY291bnRlcl9zaGlmdF90b19ucywNCj4gICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
Y291bnRlcl9mcmVxLCBOU0VDX1BFUl9TRUMpOw0KPg0KPiAgICAgLSBjb3VudGVyX2ZyZXEgPSBn
ZXRfY291bnRlcl9mcmVxdWVuY3koKTsNCj4gICAgIC0gY291bnRlcl9zaGlmdCA9IDMyOw0KPiAg
ICAgLSBkbyB7DQo+ICAgICAtICAgICAgICAgdG1wID0gKE5TRUNfUEVSX1NFQyA8PCBjb3VudGVy
X3NoaWZ0KSAvIGNvdW50ZXJfZnJlcTsNCj4gICAgIC0gICAgICAgICBpZiAoKHRtcCAmIDB4RkZG
RkZGRkYwMDAwMDAwMEwpID09IDBMKQ0KPiAgICAgLSAgICAgICAgICAgICAgICAgbnNfcGVyX3Rp
Y2sgPSAodWludDMyX3QpdG1wOw0KPiAgICAgLSAgICAgICAgIGVsc2UNCj4gICAgIC0gICAgICAg
ICAgICAgICAgIGNvdW50ZXJfc2hpZnQtLTsNCj4gICAgIC0gfSB3aGlsZSAoY291bnRlcl9zaGlm
dCA+IDAgJiYgbnNfcGVyX3RpY2sgPT0gMEwpOw0KPiAgICAgKyAvKiBXZSBkaXNhbGxvdyB6ZXJv
IG5zX3Blcl90aWNrICovDQo+ICAgICAgIFVLX0JVR09OKCFuc19wZXJfdGljayk7DQo+DQo+ICAg
ICArIC8qDQo+ICAgICArICAqIENhbGN1bGF0ZSB0aGUgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5n
IG11bHRpcGxpZXIgZm9yDQo+ICAgICArICAqIGNwbnZlcnRpbmcgbnMgdG8gdGlja3MuDQo+ICAg
ICArICAqLw0KPiBUWVBPOiBUeXBvIGluIGNvbW1lbnQ6IGNwbnZlcnRpbmcgLT4gY29udmVydGlu
Zw0KDQpPSw0KDQo+ICAgICArIGNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZ0aWNrX3Blcl9ucywgJmNv
dW50ZXJfc2hpZnRfdG9fdGljaywNCj4gICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgTlNF
Q19QRVJfU0VDLCBjb3VudGVyX2ZyZXEpOw0KPiAgICAgKw0KPiAgICAgKyAvKiBXZSBkaXNhbGxv
dyB6ZXJvIG5zX3Blcl90aWNrICovDQo+ICAgICArIFVLX0JVR09OKCF0aWNrX3Blcl9ucyk7DQo+
ICAgICArDQo+ICAgICAgIC8qDQo+ICAgICAgICAqIE1vbm90b25pYyB0aW1lIGJlZ2lucyBhdCBi
b290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNvdW50ZXINCj4gICAgICAgICogYmVmb3JlIGNhbGli
cmF0aW9uKS4NCj4gICAgIC0tDQo+ICAgICAyLjE3LjENCj4NCj4NCj4NCg0KSU1QT1JUQU5UIE5P
VElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUg
Y29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0
aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRl
bHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwg
dXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24g
aW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 05:52:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 05:52:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9jvp-0007yG-KC; Mon, 16 Sep 2019 05:52:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9jvn-0007y9-J6
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 05:52:11 +0000
X-Inumbo-ID: 1e13180c-d846-11e9-978d-bc764e2007e4
Received: from EUR03-VE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe09::61b])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1e13180c-d846-11e9-978d-bc764e2007e4;
 Mon, 16 Sep 2019 05:52:08 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=NhZup/hB99N5iPlikT5PlVdhdJmfim8Dgre0FqhesIU=;
 b=HdMiJ/ZJpVU2CjEGAvgVVIp5/xk/uq1TWMBIc8atyOF/UdzaCEgi+bYyJrsqf2FKXxlX9YQnJVlwTJdMNnkc0cFHaH6t/falA2Xj4t0vkuNYXvG3WHZePB23CytDJSe1dolmrD+Se1vmTcZMxNbC1xjsLw3YawKv7h2m71sRz1k=
Received: from VI1PR08CA0087.eurprd08.prod.outlook.com (2603:10a6:800:d3::13)
 by AM6PR08MB3528.eurprd08.prod.outlook.com (2603:10a6:20b:4b::17)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.26; Mon, 16 Sep
 2019 05:52:01 +0000
Received: from DB5EUR03FT011.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::207) by VI1PR08CA0087.outlook.office365.com
 (2603:10a6:800:d3::13) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13 via Frontend
 Transport; Mon, 16 Sep 2019 05:52:00 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT011.mail.protection.outlook.com (10.152.20.95) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 05:51:59 +0000
Received: ("Tessian outbound 55d20e99e8e2:v31");
 Mon, 16 Sep 2019 05:51:57 +0000
X-CR-MTA-TID: 64aa7808
Received: from 6154fb649842.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.8.57]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 F191C317-7025-45CD-81BE-2B5851248920.1; 
 Mon, 16 Sep 2019 05:51:52 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2057.outbound.protection.outlook.com [104.47.8.57])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 6154fb649842.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 05:51:52 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=fLCzi42VpopwpEQGEVUig7siIHqpCjbWE9I5SyyTWpUgdMIFDyOgY9+6P0rqDdin6F2NsJE6Jb9u3j43TuK2le04fSKycuGKcKdYftxWaMkEJLpK9uVZQh/IaLZILaP+mQ83Sd3k04V9OiJrf5emMP+BNeglALwuhasEtsCzNlmOofk7USuS3OMJb+1Z1e9gYUDpIMuQ5gkve00nvkjSIeiaAT1YPTNnGbl/tBJf7mQ823QEsMU/t3fZ+I3X2WXeKJHaIwa3xcPw/eiAfcoK49xVZJgk2EARmuEw36XeFMsdy/GRST+j8vAdoTbTgYT6snfBcqqWGPwS+gtznh8U9w==
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=CgMrOqYgfab4MJqI+cOTnn6yIYFFd/CJZKO+QmevlzM=;
 b=X06eeVYwgml7hkJOWSd2BLTteFFR6cU+2w73QvefJujM2HIHR8aasQAXYFsBpF14fgWbZiKCLjRa2yXJ39rbMBJZ175MD1gOV9wsdiKGziInWGZp/i6aVgl+7DzM9d5RELGxdNcXDgiolq8k/namB93+t3SjlczTt0toHjVKmt9oNvdEcQ883goOKA2yitdGcyvSr/Z6qWC2IEbe1scrDFePo68GnE5CmDVSXDpyUUrwPedJ8c2u7EHIv0H0ayYgiZbB9aA8afyxcu2srMNlcXTliMCx6exlcVoidA+Ik8Y9Ppzm7g40yVaLYs6uDHCxiVn7tdz0KZDP5fGd2LWCOw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=CgMrOqYgfab4MJqI+cOTnn6yIYFFd/CJZKO+QmevlzM=;
 b=YVNUkGwNbejFqmG3B8lQ2DTazLR7uM0ofCZfVrlP3IxJY4NowbnSApGt29MDtWKKGCE/cvTQgvLH4maGS2VTJoMtgk7Wmv1J3BhBCpiegQOLhE1HVfRR8hqKZrZogphPNlfU4N4gp9vtDz/LPBbZLKnnf52j80BYKQs8kc4g+qw=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3322.eurprd08.prod.outlook.com (52.135.130.149) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.23; Mon, 16 Sep 2019 05:51:51 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 05:51:51 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Sharan Santhanam
 <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 4/7] plat/common: Share arch_timer fdt node
 among functions
Thread-Index: AQHVRuMD00efm8lZVUWVj6PImMFuWackwAYAgAlW8QA=
Date: Mon, 16 Sep 2019 05:51:50 +0000
Message-ID: <DB7PR08MB308287D2CC1ED2460CCCC15FF78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-5-justin.he@arm.com>
 <6909C446-2E34-4E06-8BB2-3C4AD41B7CB1@neclab.eu>
In-Reply-To: <6909C446-2E34-4E06-8BB2-3C4AD41B7CB1@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 587521ed-838e-4cd9-bcae-827279e77cf0.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: eefc0c7c-49ac-4dd2-8354-08d73a69fd58
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3322; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3322:|DB7PR08MB3322:|AM6PR08MB3528:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM6PR08MB3528A712CF677202B638D657F78C0@AM6PR08MB3528.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:6430;OLM:6430;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(366004)(396003)(39850400004)(376002)(136003)(346002)(53754006)(51914003)(13464003)(199004)(189003)(66066001)(9686003)(55016002)(99286004)(446003)(110136005)(86362001)(316002)(305945005)(2906002)(6506007)(6246003)(476003)(102836004)(53546011)(55236004)(186003)(26005)(11346002)(7736002)(74316002)(52536014)(76116006)(54906003)(66446008)(64756008)(66556008)(66946007)(76176011)(66476007)(53936002)(7696005)(5660300002)(3846002)(6116002)(8676002)(486006)(81166006)(71190400001)(2501003)(81156014)(229853002)(6436002)(256004)(71200400001)(8936002)(14454004)(33656002)(25786009)(4326008)(478600001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3322;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: r4G3n+MigBbaKTJOF5YwsAlBsv92fJO1X098OsRjr2jr4jlNEBf4zzPn+VMEcI8B8G0iT1Kz1r1pOe6rMUFYu37U1vr+D4GMDYFx8B9MbY56UfyJXfwG27SciEZS3d5dXEBZk80HjLu6w+fD67sgWcGu7uJ/HeEb2v8V/Al6eHYqYGKjmPbslYFxRJWEqT4ABTeXgBgHRej2yNjHBjozh9COppGk4n0gu1y8yZ7NZzs87jq7g4Rmnbd7mFfZ5wwJkSytUi3A0oy34pqi0IEesWjepaghz+Ky9L6q2qAVl4/yv3qC2XucQCAsRbhPZuvhXMoiMqscLZQ/ywTNBuU9BF2zUsijn6PPF5JSETgY9+fYEZlUlTEGPkpN6Lk8qs0Yjtwlv3wgy0DbZUws028JwjyNdrUyBCEVdgY/uBLN354=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3322
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT011.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(136003)(346002)(396003)(376002)(51914003)(13464003)(199004)(189003)(53754006)(40434004)(110136005)(305945005)(446003)(336012)(2486003)(76176011)(23676004)(5660300002)(11346002)(126002)(63350400001)(476003)(26005)(53546011)(99286004)(26826003)(25786009)(229853002)(7696005)(478600001)(436003)(356004)(52536014)(6506007)(102836004)(47776003)(66066001)(2501003)(4326008)(186003)(86362001)(14454004)(6116002)(486006)(50466002)(5024004)(14444005)(8676002)(76130400001)(55016002)(3846002)(70206006)(22756006)(81166006)(81156014)(9686003)(6246003)(33656002)(74316002)(2906002)(54906003)(8936002)(316002)(70586007)(7736002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR08MB3528;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: cde7c5dd-fe6e-454b-a139-08d73a69f878
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM6PR08MB3528; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: jORASa8hmqcCfZDm3W9RKsdKS+WtznNORMlPA4ClDFeciMdrID6EcxRfi65xMqHq0dKrAR1FGS3tl0V/4UOQp0YvRiBsGTRR/ydmcZLEQTNpwpIrcMMreG0aaJACCWEaRWLR+q2sYSUQaPeA5e4TV6C2iJEsy7J9nX+IL3ZqIc/RO9Kpf43Jv/t/eFrYmUFs5gswGuIfN3eTGmJ25+LsEQPdJzEipMLqy3+7Vig6HGsjddoElRerg72xJ6QUdDZU10uT4NHAwFOmKVoE4STNToyJJwipcakKF3rvOZ7Jcr/CRmAGMUk7wLXzNUc0ZfZY5pTuile8vpIHLAWy+2acpBUEGCBAi0l5GOl4GN4QyVpIL6LtVvVn15YgONJfPDWMtu78n+0hzA0UonYNmx/IHxXHXy9ma89YtbG1AYMJ3pI=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 05:51:59.1897 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: eefc0c7c-49ac-4dd2-8354-08d73a69fd58
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB3528
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 4/7] plat/common: Share
 arch_timer fdt node among functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 Julien Grall <Julien.Grall@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQpIaSBTYW50aWFnbw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFNh
bnRpYWdvIFBhZ2FuaSA8U2FudGlhZ28uUGFnYW5pQG5lY2xhYi5ldT4NCj4gU2VudDogMjAxOeW5
tDnmnIgxMOaXpSAxNToxMQ0KPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkg
PEp1c3Rpbi5IZUBhcm0uY29tPjsgbWluaW9zLQ0KPiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZzsgU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Ow0KPiBTaGFyYW4gU2Fu
dGhhbmFtIDxTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4NCj4gQ2M6IEp1bGllbiBHcmFsbCA8
SnVsaWVuLkdyYWxsQGFybS5jb20+OyBLYWx5IFhpbiAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpDQo+
IDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpIENoZW4gKEFybSBUZWNobm9sb2d5IENoaW5hKQ0KPiA8
V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4g
PEppYW55b25nLld1QGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyA0
LzddIHBsYXQvY29tbW9uOiBTaGFyZSBhcmNoX3RpbWVyIGZkdA0KPiBub2RlIGFtb25nIGZ1bmN0
aW9ucw0KPg0KPiBIaSBhbGwsDQo+DQo+IFRoYW5rcyBmb3IgdGhlIHBhdGNoLiBQbGVhc2UgZmlu
ZCBteSBjb21tZW50cyBpbmxpbmUuDQo+DQo+IO+7v09uIDMwLjA3LjE5LCAxNjoyNywgIkppYSBI
ZSIgPGp1c3Rpbi5oZUBhcm0uY29tPiB3cm90ZToNCj4NCj4gICAgIFNldmVyYWwgZnVuY3Rpb24g
d2lsbCB1c2UgdGhlIGFyY2hfdGltZXIgZmR0IG5vZGUgdG8gZ2V0IGluZm9ybWF0aW9uDQo+ICAg
ICBmcm9tIGRldmljZSB0cmVlLiBXZSBmaW5kIGl0IG9uY2UsIGFuZCBzaGFyZSBpdCBhbW9uZyBm
dW5jdGlvbnMuIHRoaXMNCj4gICAgIHdpbGwgYXZvaWQgZmluZCBhcmNoX3RpbWVyIGZkdCBldmVy
eXdoZXJlLg0KPg0KPiAgICAgU2lnbmVkLW9mZi1ieTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5j
b20+DQo+ICAgICBTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNv
bT4NCj4gICAgIFNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+DQo+ICAg
ICAtLS0NCj4gICAgICBwbGF0L2NvbW1vbi9hcm0vdGltZS5jIHwgNTMgKysrKysrKysrKysrKysr
KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLQ0KPiAgICAgIDEgZmlsZSBjaGFuZ2VkLCAy
NyBpbnNlcnRpb25zKCspLCAyNiBkZWxldGlvbnMoLSkNCj4NCj4gICAgIGRpZmYgLS1naXQgYS9w
bGF0L2NvbW1vbi9hcm0vdGltZS5jIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYw0KPiAgICAgaW5k
ZXggYWVhMzc5Yy4uMTA3ZmRmMCAxMDA2NDQNCj4gICAgIC0tLSBhL3BsYXQvY29tbW9uL2FybS90
aW1lLmMNCj4gICAgICsrKyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCj4gICAgIEBAIC0zMyw2
ICszMyw3IEBADQo+ICAgICAgICovDQo+ICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KPiAgICAg
ICNpbmNsdWRlIDxsaWJmZHQuaD4NCj4gICAgICsjaW5jbHVkZSA8b2Z3L2ZkdC5oPg0KPiAgICAg
ICNpbmNsdWRlIDx1ay9hc3NlcnQuaD4NCj4gICAgICAjaW5jbHVkZSA8dWsvcGxhdC90aW1lLmg+
DQo+ICAgICAgI2luY2x1ZGUgPHVrL3BsYXQvaXJxLmg+DQo+ICAgICBAQCAtNDQsNiArNDUsMTIg
QEANCj4gICAgICAgKiBwb3J0YWJsZSB3YXkgdG8gaGFuZG92ZXIgdGhlIERUQiBlbnRyeSBwb2lu
dCB0byBjb21tb24gcGxhdGZvcm0NCj4gY29kZSAqLw0KPiAgICAgICNpbmNsdWRlIDxrdm0vY29u
ZmlnLmg+DQo+DQo+ICAgICArc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBhcmNoX3RpbWVyX2xp
c3RbXSA9IHsNCj4gICAgICsgImFybSxhcm12OC10aW1lciIsDQo+ICAgICArICJhcm0sYXJtdjct
dGltZXIiLA0KPiAgICAgKyBOVUxMDQo+ICAgICArfTsNCj4gICAgICsNCj4gICAgICBzdGF0aWMg
dWludDY0X3QgYm9vdF90aWNrczsNCj4gICAgICBzdGF0aWMgdWludDMyX3QgY291bnRlcl9mcmVx
Ow0KPg0KPiAgICAgQEAgLTEyNiwzMiArMTMzLDE4IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZV9t
dWx0X3NoaWZ0KHVpbnQzMl90DQo+ICptdWx0LCB1aW50OF90ICpzaGlmdCwNCj4gICAgICAgKnNo
aWZ0ID0gc2Z0Ow0KPiAgICAgIH0NCj4NCj4gICAgIC0vKg0KPiAgICAgLSAqIE9uIGEgZmV3IHBs
YXRmb3JtcyB0aGUgZnJlcXVlbmN5IGlzIG5vdCBjb25maWd1cmVkIGNvcnJlY3RseQ0KPiAgICAg
LSAqIGJ5IHRoZSBmaXJtd2FyZS4gQSBwcm9wZXJ0eSBpbiB0aGUgRFQgKGNsb2NrLWZyZXF1ZW5j
eSkgaGFzDQo+ICAgICAtICogYmVlbiBpbnRyb2R1Y2VkIHRvIHdvcmthcm91bmQgdGhvc2UgZmly
bXdhcmUuIFNvLCB3ZSB3aWxsIHRyeQ0KPiAgICAgLSAqIHRvIGdldCBjbG9jay1mcmVxdWVuY3kg
ZnJvbSBEVCBmaXJzdCwgaWYgZmFpbGVkIHdlIHdpbGwgcmVhZA0KPiAgICAgLSAqIHRoZSByZWdp
c3RlciBkaXJlY3RseS4NCj4gICAgIC0gKi8NCj4gICAgIC1zdGF0aWMgdWludDMyX3QgZ2V0X2Nv
dW50ZXJfZnJlcXVlbmN5KHZvaWQpDQo+ICAgICArc3RhdGljIHVpbnQzMl90IGdlbmVyaWNfdGlt
ZXJfZ2V0X2ZyZXF1ZW5jeShpbnQgZmR0X3RpbWVyKQ0KPiAgICAgIHsNCj4gICAgIC0gaW50IGZk
dF9hcmNodGltZXIsIGxlbjsNCj4gICAgICsgaW50IGxlbjsNCj4gICAgICAgY29uc3QgdWludDY0
X3QgKmZkdF9mcmVxOw0KPg0KPiAgICAgLSAvKiBUcnkgdG8gZmluZCBhcm0sYXJtdjgtdGltZXIg
Zmlyc3QgKi8NCj4gICAgIC0gZmR0X2FyY2h0aW1lciA9DQo+IGZkdF9ub2RlX29mZnNldF9ieV9j
b21wYXRpYmxlKF9saWJrdm1wbGF0X2NmZy5kdGIsDQo+ICAgICAtICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtMSwgImFybSxhcm12OC10aW1lciIpOw0KPiAgICAgLSAv
KiBJZiBmYWlsZWQsIHRyeSB0byBmaW5kIGFybSxhcm12Ny10aW1lciAqLw0KPiAgICAgLSBpZiAo
ZmR0X2FyY2h0aW1lciA8IDApDQo+ICAgICAtICAgICAgICAgZmR0X2FyY2h0aW1lciA9IGZkdF9u
b2RlX29mZnNldF9ieV9jb21wYXRpYmxlKA0KPiAgICAgLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfbGlia3ZtcGxhdF9jZmcuZHRiLA0KPiAgICAgLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgImFybSxh
cm12Ny0NCj4gdGltZXIiKTsNCj4gICAgIC0gLyogRFQgZG9lc24ndCBwcm92aWRlIGFyY2ggdGlt
ZXIgaW5mb3JtYXRpb24gKi8NCj4gICAgIC0gaWYgKGZkdF9hcmNodGltZXIgPCAwKQ0KPiAgICAg
LSAgICAgICAgIGdvdG8gZW5kbm9mcmVxOw0KPiAgICAgLQ0KPiAgICAgKyAvKg0KPiAgICAgKyAg
KiBPbiBhIGZldyBwbGF0Zm9ybXMgdGhlIGZyZXF1ZW5jeSBpcyBub3QgY29uZmlndXJlZCBjb3Jy
ZWN0bHkNCj4gICAgICsgICogYnkgdGhlIGZpcm13YXJlLiBBIHByb3BlcnR5IGluIHRoZSBEVCAo
Y2xvY2stZnJlcXVlbmN5KSBoYXMNCj4gICAgICsgICogYmVlbiBpbnRyb2R1Y2VkIHRvIHdvcmth
cm91bmQgdGhvc2UgZmlybXdhcmUuDQo+ICAgICArICAqLw0KPiAgICAgICBmZHRfZnJlcSA9IGZk
dF9nZXRwcm9wKF9saWJrdm1wbGF0X2NmZy5kdGIsDQo+ICAgICAtICAgICAgICAgICAgICAgICBm
ZHRfYXJjaHRpbWVyLCAiY2xvY2stZnJlcXVlbmN5IiwgJmxlbik7DQo+ICAgICArICAgICAgICAg
ICAgICAgICBmZHRfdGltZXIsICJjbG9jay1mcmVxdWVuY3kiLCAmbGVuKTsNCj4gICAgICAgaWYg
KCFmZHRfZnJlcSB8fCAobGVuIDw9IDApKSB7DQo+ICAgICAgICAgICAgICAgdWtfcHJfaW5mbygi
Tm8gY2xvY2stZnJlcXVlbmN5IGZvdW5kLCByZWFkaW5nIGZyb20NCj4gcmVnaXN0ZXIgZGlyZWN0
bHkuXG4iKTsNCj4gICAgICAgICAgICAgICBnb3RvIGVuZG5vZnJlcTsNCj4gQ09NTUVOVDogTm8g
bmVlZCB0byB1c2UgZ290byBpbiB0aGlzIGNhc2UuIFNpbXBseSBtb3ZlIHRoZSBjb21tZW50DQo+
IGFuZCByZXR1cm4gc3RhdGVtZW50IGluIHRoZSBnb3RvIGhlcmUgYW5kIHRoZW4gcmVtb3ZlIHRo
ZSBlbmRub2dyZXENCj4gbGFiZWwuDQoNClllcywgdGhhbmtzDQoNCi0tDQpDaGVlcnMsDQpKdXN0
aW4gKEppYSBIZSkNCg0KDQo+ICAgICBAQCAtMTYwLDYgKzE1Myw3IEBAIHN0YXRpYyB1aW50MzJf
dCBnZXRfY291bnRlcl9mcmVxdWVuY3kodm9pZCkNCj4gICAgICAgcmV0dXJuIGZkdDMyX3RvX2Nw
dShmZHRfZnJlcVswXSk7DQo+DQo+ICAgICAgZW5kbm9mcmVxOg0KPiAgICAgKyAvKiBObyB3b3Jr
YXJvdW5kLCBnZXQgZnJvbSByZWdpc3RlciBkaXJlY3RseSAqLw0KPiAgICAgICByZXR1cm4gU1lT
UkVHX1JFQUQzMihjbnRmcnFfZWwwKTsNCj4gICAgICB9DQo+DQo+ICAgICBAQCAtMjA1LDkgKzE5
OSwxMCBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJpY190aW1lcl9lcG9jaG9mZnNldCh2b2lkKQ0K
PiAgICAgICByZXR1cm4gMDsNCj4gICAgICB9DQo+DQo+ICAgICAtc3RhdGljIGludCBnZW5lcmlj
X3RpbWVyX2luaXQodm9pZCkNCj4gICAgICtzdGF0aWMgaW50IGdlbmVyaWNfdGltZXJfaW5pdChp
bnQgZmR0X3RpbWVyKQ0KPiAgICAgIHsNCj4gICAgIC0gY291bnRlcl9mcmVxID0gZ2V0X2NvdW50
ZXJfZnJlcXVlbmN5KCk7DQo+ICAgICArIC8qIEdldCBjb3VudGVyIGZyZXF1ZW5jeSBmcm9tIERU
QiBvciByZWdpc3RlciAqLw0KPiAgICAgKyBjb3VudGVyX2ZyZXEgPSBnZW5lcmljX3RpbWVyX2dl
dF9mcmVxdWVuY3koZmR0X3RpbWVyKTsNCj4NCj4gICAgICAgLyoNCj4gICAgICAgICogQ2FsY3Vs
YXRlIHRoZSBzaGlmdCBmYWN0b3IgYW5kIHNjYWxpbmcgbXVsdGlwbGllciBmb3INCj4gICAgIEBA
IC0yNjgsNyArMjYzLDcgQEAgc3RhdGljIGludCB0aW1lcl9oYW5kbGVyKHZvaWQgKmFyZyBfX3Vu
dXNlZCkNCj4gICAgICAvKiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5h
YmxlZCAqLw0KPiAgICAgIHZvaWQgdWtwbGF0X3RpbWVfaW5pdCh2b2lkKQ0KPiAgICAgIHsNCj4g
ICAgIC0gaW50IHJjOw0KPiAgICAgKyBpbnQgcmMsIGZkdF90aW1lcjsNCj4NCj4gICAgICAgLyoN
Cj4gICAgICAgICogTW9ub3RvbmljIHRpbWUgYmVnaW5zIGF0IGJvb3RfdGlja3MgKGZpcnN0IHJl
YWQgb2YgY291bnRlcg0KPiAgICAgQEAgLTI3NiwxMSArMjcxLDE3IEBAIHZvaWQgdWtwbGF0X3Rp
bWVfaW5pdCh2b2lkKQ0KPiAgICAgICAgKi8NCj4gICAgICAgYm9vdF90aWNrcyA9IGdlbmVyaWNf
dGltZXJfZ2V0X3RpY2tzKCk7DQo+DQo+ICAgICArIC8qIEN1cnJlbnRseSwgd2Ugb25seSBzdXBw
b3J0IDEgdGltZXIgcGVyIHN5c3RlbSAqLw0KPiAgICAgKyBmZHRfdGltZXIgPQ0KPiBmZHRfbm9k
ZV9vZmZzZXRfYnlfY29tcGF0aWJsZV9saXN0KF9saWJrdm1wbGF0X2NmZy5kdGIsDQo+ICAgICAr
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCBhcmNoX3RpbWVyX2xpc3QpOw0KPiAgICAgKyBp
ZiAoZmR0X3RpbWVyIDwgMCkNCj4gICAgICsgICAgICAgICBVS19DUkFTSCgiQ291bGQgbm90IGZp
bmQgYXJjaCB0aW1lciFcbiIpOw0KPiAgICAgKw0KPiAgICAgICByYyA9IHVrcGxhdF9pcnFfcmVn
aXN0ZXIoMCwgdGltZXJfaGFuZGxlciwgTlVMTCk7DQo+ICAgICAgIGlmIChyYyA8IDApDQo+ICAg
ICAgICAgICAgICAgVUtfQ1JBU0goIkZhaWxlZCB0byByZWdpc3RlciB0aW1lciBpbnRlcnJ1cHQg
aGFuZGxlclxuIik7DQo+DQo+ICAgICAtIHJjID0gZ2VuZXJpY190aW1lcl9pbml0KCk7DQo+ICAg
ICArIHJjID0gZ2VuZXJpY190aW1lcl9pbml0KGZkdF90aW1lcik7DQo+ICAgICAgIGlmIChyYyA8
IDApDQo+ICAgICAgICAgICAgICAgVUtfQ1JBU0goIkZhaWxlZCB0byBpbml0aWFsaXplIHBsYXRm
b3JtIHRpbWVcbiIpOw0KPiAgICAgIH0NCj4gICAgIC0tDQo+ICAgICAyLjE3LjENCj4NCj4NCj4N
Cg0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBh
dHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJ
ZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBz
ZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55
IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0
aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 06:48:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 06:48:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9knm-0003ze-2V; Mon, 16 Sep 2019 06:47:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=RExD=XL=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1i9knl-0003zZ-G6
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 06:47:57 +0000
X-Inumbo-ID: e900c7c4-d84d-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e900c7c4-d84d-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 06:47:54 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 274301056AA;
 Mon, 16 Sep 2019 08:47:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Ghpq0L3zQHhz; Mon, 16 Sep 2019 08:47:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id E7613105564;
 Mon, 16 Sep 2019 08:47:53 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 16 Sep
 2019 08:47:53 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Mon, 16 Sep 2019 08:47:53
 +0200
From: Santiago Pagani <Santiago.Pagani@neclab.eu>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Sharan Santhanam
 <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 1/7] plat/common: Calculate shift factors for
 coversion between ns and tick
Thread-Index: AQHVZ6Wos7yeavhzjE+Ut5n9hF9cUKcts8eAgAAyQYA=
Date: Mon, 16 Sep 2019 06:47:53 +0000
Message-ID: <D5B71CDE-4ACE-45C7-B570-0ACBBCA0AB24@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-2-justin.he@arm.com>
 <AB15EB89-2D66-439F-8F21-1FC5AC6CA6B1@neclab.eu>
 <DB7PR08MB3082768477F8327BF35E9869F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
In-Reply-To: <DB7PR08MB3082768477F8327BF35E9869F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.24.96]
Content-ID: <C8CAD2B159242244BB9F2668B44A1113@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 1/7] plat/common: Calculate
 shift factors for coversion between ns and tick
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 Julien Grall <Julien.Grall@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLA0KDQpUaGFua3MgZm9yIHRoZSByZXBseS4gUGxlYXNlIGZpbmQgYSBsYXN0IGNv
bW1lbnQgb24gcmVnYXJkcyB0byBvbmUgb2YgdGhlIHBvaW50cyBpbmxpbmUuDQoNClRoYW5rcyBh
bmQgYmVzdCwNClNhbnRpYWdvDQoNCu+7v09uIDE2LjA5LjE5LCAwNzo0OCwgIkp1c3RpbiBIZSAo
QXJtIFRlY2hub2xvZ3kgQ2hpbmEpIiA8SnVzdGluLkhlQGFybS5jb20+IHdyb3RlOg0KDQogICAg
SGkgU2FudGlhZ28sIHRoYW5rcyBmb3IgdGhlIHJldmlldw0KICAgIFBsZWFzZSBzZWUgaW5saW5l
DQogICAgDQogICAgPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KICAgID4gRnJvbTogU2Fu
dGlhZ28gUGFnYW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1Pg0KICAgID4gU2VudDogMjAx
OeW5tDnmnIgxMOaXpSAxNTowMg0KICAgID4gVG86IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kg
Q2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNvbT47IG1pbmlvcy0NCiAgICA+IGRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnOyBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT47DQog
ICAgPiBTaGFyYW4gU2FudGhhbmFtIDxTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICA+
IENjOiBKdWxpZW4gR3JhbGwgPEp1bGllbi5HcmFsbEBhcm0uY29tPjsgS2FseSBYaW4gKEFybSBU
ZWNobm9sb2d5IENoaW5hKQ0KICAgID4gPEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbiAoQXJt
IFRlY2hub2xvZ3kgQ2hpbmEpDQogICAgPiA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1
IChBcm0gVGVjaG5vbG9neSBDaGluYSkNCiAgICA+IDxKaWFueW9uZy5XdUBhcm0uY29tPg0KICAg
ID4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSHYzIDEvN10gcGxhdC9jb21tb246IENhbGN1
bGF0ZSBzaGlmdCBmYWN0b3JzDQogICAgPiBmb3IgY292ZXJzaW9uIGJldHdlZW4gbnMgYW5kIHRp
Y2sNCiAgICA+DQogICAgPiBIaSBhbGwsDQogICAgPg0KICAgID4gVGhhbmtzIGZvciB0aGUgcGF0
Y2guIFBsZWFzZSBmaW5kIG15IGNvbW1lbnRzIGlubGluZToNCiAgICA+DQogICAgPiBPbiAzMC4w
Ny4xOSwgMTY6MjcsICJKaWEgSGUiIDxqdXN0aW4uaGVAYXJtLmNvbT4gd3JvdGU6DQogICAgPg0K
ICAgID4gICAgIFdlIGhhZCBzaGlmdCBmYWN0b3IgZm9yIGNvdmVydGluZyBjb3VudGVyIHRpY2tz
IHRvIG5zLCBidXQgaXQncyBub3QNCiAgICA+ICAgICBlbm91Z2guIFNvbWV0aW1lLCB3ZSBuZWVk
IHRvIGNvdmVydCBucyB0byB0aWNrcy4gRm9yIGV4YW1wbGUsIHdlJ2xsDQogICAgPiAgICAgdHJh
bnNmZXIgc2xlZXAobnMpIHRvIGNvdW50ZXIgdGlja3MuIElmIHdlIGRvbid0IGhhdmUgdGhlIHNo
aWZ0IGZhY3RvciwNCiAgICA+ICAgICB0aGUgY29udmVyc2lvbiBhY2N1cmFjeSB3aWxsIGJlIGxv
d2VyLg0KICAgID4NCiAgICA+ICAgICBTaWduZWQtb2ZmLWJ5OiBXZWkgQ2hlbiA8d2VpLmNoZW5A
YXJtLmNvbT4NCiAgICA+ICAgICBTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcu
d3VAYXJtLmNvbT4NCiAgICA+ICAgICBTaWduZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBh
cm0uY29tPg0KICAgID4gICAgIC0tLQ0KICAgID4gICAgICBwbGF0L2NvbW1vbi9hcm0vdGltZS5j
IHwgMTExDQogICAgPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQ0K
ICAgID4gICAgICAxIGZpbGUgY2hhbmdlZCwgODYgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25z
KC0pDQogICAgPg0KICAgID4gICAgIGRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5j
IGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYw0KICAgID4gICAgIGluZGV4IDFiMzA5MDMuLjRjNjYw
MzkgMTAwNjQ0DQogICAgPiAgICAgLS0tIGEvcGxhdC9jb21tb24vYXJtL3RpbWUuYw0KICAgID4g
ICAgICsrKyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCiAgICA+ICAgICBAQCAtNDcsMjEgKzQ3
LDgzIEBADQogICAgPiAgICAgIHN0YXRpYyB1aW50NjRfdCBib290X3RpY2tzOw0KICAgID4gICAg
ICBzdGF0aWMgdWludDMyX3QgY291bnRlcl9mcmVxOw0KICAgID4NCiAgICA+ICAgICAtLyoNCiAg
ICA+ICAgICAtICogU2hpZnQgZmFjdG9yIGZvciBjb3VudGVyIHNjYWxpbmcgbXVsdGlwbGllcjsg
cmVmZXJyZWQgdG8gYXMgUyBpbiB0aGUNCiAgICA+ICAgICAtICogZm9sbG93aW5nIGNvbW1lbnRz
Lg0KICAgID4gICAgIC0gKi8NCiAgICA+ICAgICAtc3RhdGljIHVpbnQ4X3QgY291bnRlcl9zaGlm
dDsNCiAgICA+DQogICAgPiAgICAgLS8qIE11bHRpcGxpZXIgZm9yIGNvbnZlcnRpbmcgY291bnRl
ciB0aWNrcyB0byBuc2Vjcy4gKDAuUykgZml4ZWQgcG9pbnQuICovDQogICAgPiAgICAgKy8qIFNo
aWZ0IGZhY3RvciBmb3IgY29udmVydGluZyB0aWNrcyB0byBucyAqLw0KICAgID4gICAgICtzdGF0
aWMgdWludDhfdCBjb3VudGVyX3NoaWZ0X3RvX25zOw0KICAgID4gICAgICsNCiAgICA+ICAgICAr
LyogU2hpZnQgZmFjdG9yIGZvciBjb252ZXJ0aW5nIG5zIHRvIHRpY2tzICovDQogICAgPiAgICAg
K3N0YXRpYyB1aW50OF90IGNvdW50ZXJfc2hpZnRfdG9fdGljazsNCiAgICA+ICAgICArDQogICAg
PiAgICAgKy8qIE11bHRpcGxpZXIgZm9yIGNvbnZlcnRpbmcgY291bnRlciB0aWNrcyB0byBuc2Vj
cyAqLw0KICAgID4gICAgICBzdGF0aWMgdWludDMyX3QgbnNfcGVyX3RpY2s7DQogICAgPg0KICAg
ID4gICAgICsvKiBNdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIG5zZWNzIHRvIGNvdW50ZXIgdGlj
a3MgKi8NCiAgICA+ICAgICArc3RhdGljIHVpbnQzMl90IHRpY2tfcGVyX25zOw0KICAgID4gICAg
ICsNCiAgICA+ICAgICArLyoNCiAgICA+ICAgICArICogVGhlIG1heGltdW0gdGltZSByYW5nZSBp
biBzZWNvbmRzIHdoaWNoIGNhbiBiZSBjb252ZXJ0ZWQgYnkNCiAgICA+IG11bHRpcGxpZXINCiAg
ICA+ICAgICArICogYW5kIHNoaWZ0IGZhY3RvcnMuIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhlIGNv
bnZlcnRlZCB2YWx1ZSBub3QgdG8NCiAgICA+IGV4Y2VlZA0KICAgID4gICAgICsgKiA2NC1iaXQg
dW5zaWduZWQgaW50ZWdlci4gSW5jcmVhc2UgdGhlIHRpbWUgcmFuZ2Ugd2lsbCByZWR1Y2UgdGhl
DQogICAgPiBhY2N1cmFjeQ0KICAgID4gICAgICsgKiBvZiBjb252ZXJzaW9uLCBiZWNhdXNlIHdl
IHdpbGwgZ2V0IHNtYWxsZXIgbXVsdGlwbGllciBhbmQgc2hpZnQgZmFjdG9ycy4NCiAgICA+ICAg
ICArICogSW4gdGhpcyBjYXNlLCB3ZSBzZWxlY3RlZCAzNjAwcyBhcyB0aGUgdGltZSByYW5nZS4N
CiAgICA+ICAgICArICovDQogICAgPiAgICAgKyNkZWZpbmUgX19NQVhfQ09OVkVSVF9TRUNTICAg
ICAgIDM2MDBVTA0KICAgID4gQ09NTU5FVDogQXMgSSB1bmRlcnN0YW5kIGl0LCAgdGhpcyAjZGVm
aW5lIGlzIGFsc28gdXNlZCB3aGVuIGNhbGN1bGF0aW5nDQogICAgPiB0aGUgbnNfcGVyX3RpY2ss
IGl0IG5vdCBvbmx5IGltcG9zZXMgYSBsaW1pdCB0byB0aGUgdGltZSByYW5nZSwgYnV0IGFsc28g
dG8NCiAgICA+IHRoZSB0aWNrIHJhbmdlLiBUaGF0IGlzLCB3ZSBkbyBub3Qgc3VwcG9ydCBjb252
ZXJ0aW5nIG5zX3RvX3RpY2tzIGZvciBtb3JlDQogICAgPiB0aGFuIDM2MDAgc2Vjb25kcywgYW5k
IGFzIHdlbGwgd2UgZG8gbm90IHN1cHBvcnQgdG8gY29udmVydCB0aWNrc190b19ucw0KICAgID4g
Zm9yIG1vcmUgdGhhbiAzNjAwMDAwMDAwIHRpY2tzLCBjb3JyZWN0PyBNYXliZSBjaGFuZ2UgdGhl
IG5hbWUgb2YgdGhlDQogICAgPiAjZGVmaW5lIHRvIHNvbWV0aGluZyBtb3JlIGdlbmVyaWMuDQog
ICAgSG1tLCBfX01BWF9DT05WRVJUX1NFQ1MgaXMgZm9yIGNvbnZlcnRpbmcgdGlja3NfdG9fbnMg
b25seSwgbm90IHRoZQ0KICAgIGNvbnZlcnRpbmcgb2YgbnNfdG9fdGlja3MNCiAgICBTbywgaG93
IGFib3V0IF9fTUFYX1NFQ1NfQ09OVkVSVF9UT19OUyA/DQoNCkNPTU1FTlQ6IFdlbGwsIHRoZSBv
bmx5IHBsYWNlIHdoZXJlIF9fTUFYX0NPTlZFUlRfU0VDUyBpcyB1c2VkIGlzIGluc2lkZSBmdW5j
dGlvbiAnY2FsY3VsYXRlX211bHRfc2hpZnQnIHRvIGNvbXB1dGUgJ3NmdGFjYycuIEZ1bmN0aW9u
ICdjYWxjdWxhdGVfbXVsdF9zaGlmdCcgaXMgdGhlbiB1c2VkIGJvdGggdG8gY29tcHV0ZSAndGlj
a19wZXJfbnMgYW5kIGNvdW50ZXJfc2hpZnRfdG9fdGljaycsIGFzIHdlbGwgYXMgJ25zX3Blcl90
aWNrIGFuZCBjb3VudGVyX3NoaWZ0X3RvX25zJy4gSW5zaWRlIGZ1bmN0aW9uICdjYWxjdWxhdGVf
bXVsdF9zaGlmdCcsIHRoZSB2YWx1ZSBvZiBfX01BWF9DT05WRVJUX1NFQ1MgaXMgbXVsdGlwbGll
ZCBieSAnZnJvbScuICBJbiBvbmUgY2FzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLCAnZnJv
bScgaXMgc2V0IHRvIE5TRUNfUEVSX1NFQywgaG93ZXZlciBpbiB0aGUgY2FzZSwgJ2Zyb20nIGlz
IHNldCB0byAnIGNvdW50ZXJfZnJlcScuIFRoZXJlZm9yZSwgYXMgd2UgYXJlIG11bHRpcGx5aW5n
IF9fTUFYX0NPTlZFUlRfU0VDUyB3aXRoIHR3byB2YXJpYWJsZXMgd2l0aCBvcHBvc2VkIHBoeXNp
Y2FsIG1lYW5pbmdzLCBfX01BWF9DT05WRVJUX1NFQ1MgaXMgaW4gZmFjdCBhbHNvIGJlZW4gdXRp
bGl6ZWQgaW4gdGhlIG9wcG9zaXRlIHdheS4NCiAgICANCiAgICA+ICAgICArDQogICAgPiAgICAg
IC8qIEhvdyBtYW55IG5hbm9zZWNvbmRzIHBlciBzZWNvbmQgKi8NCiAgICA+ICAgICAgI2RlZmlu
ZSBOU0VDX1BFUl9TRUMgdWthcmNoX3RpbWVfc2VjX3RvX25zZWMoMSkNCiAgICA+DQogICAgPiAg
ICAgIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgdGlja3NfdG9fbnModWludDY0X3QgdGlja3MpDQog
ICAgPiAgICAgIHsNCiAgICA+ICAgICAtIHJldHVybiAobnNfcGVyX3RpY2sgKiB0aWNrcykgPj4g
Y291bnRlcl9zaGlmdDsNCiAgICA+ICAgICArIHJldHVybiAobnNfcGVyX3RpY2sgKiB0aWNrcykg
Pj4gY291bnRlcl9zaGlmdF90b19uczsNCiAgICA+IENPTU1FTlQ6IE1heWJlIGFkZCBhbiBhc3Nl
cnRpb24gZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcyBhcyBhDQogICAgPiBzYW5pdHkg
Y2hlY2s/DQogICAgDQogICAgWWVzLCByZWFzb25hYmxlIHRvIG1lDQogICAgDQogICAgPiAgICAg
K30NCiAgICA+ICAgICArDQogICAgPiAgICAgK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgbnNfdG9f
dGlja3ModWludDY0X3QgbnMpDQogICAgPiAgICAgK3sNCiAgICA+ICAgICArIHJldHVybiAodGlj
a19wZXJfbnMgKiBucykgPj4gY291bnRlcl9zaGlmdF90b190aWNrOw0KICAgID4gQ09NTUVOVDog
TWF5YmUgYWRkIGFuIGFzc2VydGlvbiBmb3IgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMN
CiAgICA+IGFzIGEgc2FuaXR5IGNoZWNrPw0KICAgIA0KICAgIFllcw0KICAgIA0KICAgID4gICAg
ICt9DQogICAgPiAgICAgKw0KICAgID4gICAgICsvKg0KICAgID4gICAgICsgKiBDYWxjdWxhdGUg
bXVsdGlwbGllci9zaGlmdCBmYWN0b3JzIGZvciBzY2FsZWQgbWF0aC4NCiAgICA+ICAgICArICov
DQogICAgPiAgICAgK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV9tdWx0X3NoaWZ0KHVpbnQzMl90ICpt
dWx0LCB1aW50OF90ICpzaGlmdCwNCiAgICA+ICAgICArICAgICAgICAgdWludDY0X3QgZnJvbSwg
dWludDY0X3QgdG8pDQogICAgPiAgICAgK3sNCiAgICA+ICAgICArIHVpbnQ2NF90IHRtcDsNCiAg
ICA+ICAgICArIHVpbnQzMl90IHNmdCwgc2Z0YWNjID0gMzI7DQogICAgPiAgICAgKw0KICAgID4g
ICAgICsgLyoNCiAgICA+ICAgICArICAqIENhbGN1bGF0ZSB0aGUgc2hpZnQgZmFjdG9yIHdoaWNo
IGlzIGxpbWl0aW5nIHRoZSBjb252ZXJzaW9uDQogICAgPiAgICAgKyAgKiByYW5nZToNCiAgICA+
ICAgICArICAqLw0KICAgID4gICAgICsgdG1wID0gKCh1aW50NjRfdClfX01BWF9DT05WRVJUX1NF
Q1MgKiBmcm9tKSA+PiAzMjsNCiAgICA+ICAgICArIHdoaWxlICh0bXApIHsNCiAgICA+ICAgICAr
ICAgICAgICAgdG1wID4+PSAxOw0KICAgID4gICAgICsgICAgICAgICBzZnRhY2MtLTsNCiAgICA+
ICAgICArIH0NCiAgICA+ICAgICArDQogICAgPiAgICAgKw0KICAgID4gICAgICsgLyoNCiAgICA+
ICAgICArICAqIENhbGN1bGF0ZSBzaGlmdCBmYWN0b3IgKFMpIGFuZCBzY2FsaW5nIG11bHRpcGxp
ZXIgKE0pLg0KICAgID4gICAgICsgICoNCiAgICA+ICAgICArICAqIChTKSBuZWVkcyB0byBiZSB0
aGUgbGFyZ2VzdCBzaGlmdCBmYWN0b3IgKDw9IG1heF9zaGlmdCkgd2hlcmUNCiAgICA+ICAgICAr
ICAqIHRoZSByZXN1bHQgb2YgdGhlIE0gY2FsY3VsYXRpb24gYmVsb3cgZml0cyBpbnRvIHVpbnQz
Ml90DQogICAgPiAgICAgKyAgKiB3aXRob3V0IHRydW5jYXRpb24uDQogICAgPiAgICAgKyAgKg0K
ICAgID4gICAgICsgICogbXVsdGlwbGllciA9ICh0YXJnZXQgPDwgc2hpZnQpIC8gc291cmNlDQog
ICAgPiAgICAgKyAgKi8NCiAgICA+ICAgICArIGZvciAoc2Z0ID0gMzI7IHNmdCA+IDA7IHNmdC0t
KSB7DQogICAgPiAgICAgKyAgICAgICAgIHRtcCA9ICh1aW50NjRfdCkgdG8gPDwgc2Z0Ow0KICAg
ID4gICAgICsNCiAgICA+ICAgICArICAgICAgICAgLyogRW5zdXJpbmcgd2Ugcm91bmQgdG8gbmVh
cmVzdCB3aGVuIGNhbGN1bGF0aW5nIHRoZQ0KICAgID4gICAgICsgICAgICAgICAgKiBtdWx0aXBs
aWVyDQogICAgPiAgICAgKyAgICAgICAgICAqLw0KICAgID4gICAgICsgICAgICAgICB0bXAgKz0g
ZnJvbSAvIDI7DQogICAgPiAgICAgKyAgICAgICAgIHRtcCAvPSBmcm9tOw0KICAgID4gICAgICsg
ICAgICAgICBpZiAoKHRtcCA+PiBzZnRhY2MpID09IDApDQogICAgPiAgICAgKyAgICAgICAgICAg
ICAgICAgYnJlYWs7DQogICAgPiAgICAgKyB9DQogICAgPiAgICAgKyAqbXVsdCA9IHRtcDsNCiAg
ICA+ICAgICArICpzaGlmdCA9IHNmdDsNCiAgICA+ICAgICAgfQ0KICAgID4NCiAgICA+ICAgICAg
LyoNCiAgICA+ICAgICBAQCAtMTQ1LDI5ICsyMDcsMjggQEAgc3RhdGljIF9fdTY0ICBnZW5lcmlj
X3RpbWVyX2Vwb2Nob2Zmc2V0KHZvaWQpDQogICAgPg0KICAgID4gICAgICBzdGF0aWMgaW50IGdl
bmVyaWNfdGltZXJfaW5pdCh2b2lkKQ0KICAgID4gICAgICB7DQogICAgPiAgICAgKyBjb3VudGVy
X2ZyZXEgPSBnZXRfY291bnRlcl9mcmVxdWVuY3koKTsNCiAgICA+ICAgICArDQogICAgPiAgICAg
ICAvKg0KICAgID4gICAgIC0gICogQ2FsY3VsYXRlIGNvdW50ZXIgc2hpZnQgZmFjdG9yIGFuZCBz
Y2FsaW5nIG11bHRpcGxpZXIuDQogICAgPiAgICAgLSAgKg0KICAgID4gICAgIC0gICogY291bnRl
cl9zaGlmdCAoUykgbmVlZHMgdG8gYmUgdGhlIGxhcmdlc3QgKDw9MzIpIHNoaWZ0IGZhY3RvciB3
aGVyZQ0KICAgID4gICAgIC0gICogdGhlIHJlc3VsdCBvZiB0aGUgbnNfcGVyX3RpY2sgY2FsY3Vs
YXRpb24gYmVsb3cgZml0cyBpbnRvIHVpbnQzMl90DQogICAgPiAgICAgLSAgKiB3aXRob3V0IHRy
dW5jYXRpb24uIE5vdGUgdGhhdCB3ZSBkaXNhbGxvdyBhbiBTIG9mIHplcm8gdG8gZW5zdXJlDQog
ICAgPiAgICAgLSAgKiB0aGUgbG9vcCBhbHdheXMgdGVybWluYXRlcy4NCiAgICA+ICAgICAtICAq
DQogICAgPiAgICAgLSAgKiAoMC5TKSBuc19wZXJfdGljayA9IE5TRUNfUEVSX1NFQyAoUy5TKSAv
IGNvdW50ZXJfZnJlcSAoUy4wKQ0KICAgID4gICAgICsgICogQ2FsY3VsYXRlIHRoZSBzaGlmdCBm
YWN0b3IgYW5kIHNjYWxpbmcgbXVsdGlwbGllciBmb3INCiAgICA+ICAgICArICAqIGNwbnZlcnRp
bmcgdGlja3MgdG8gbnMuDQogICAgPiAgICAgICAgKi8NCiAgICA+IFRZUE86IFR5cG8gaW4gY29t
bWVudDogY3BudmVydGluZyAtPiBjb252ZXJ0aW5nDQogICAgDQogICAgT0sNCiAgICANCiAgICA+
ICAgICAtIHVpbnQ2NF90IHRtcDsNCiAgICA+ICAgICArIGNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZu
c19wZXJfdGljaywgJmNvdW50ZXJfc2hpZnRfdG9fbnMsDQogICAgPiAgICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3VudGVyX2ZyZXEsIE5TRUNfUEVSX1NFQyk7DQogICAgPg0KICAgID4g
ICAgIC0gY291bnRlcl9mcmVxID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KCk7DQogICAgPiAgICAg
LSBjb3VudGVyX3NoaWZ0ID0gMzI7DQogICAgPiAgICAgLSBkbyB7DQogICAgPiAgICAgLSAgICAg
ICAgIHRtcCA9IChOU0VDX1BFUl9TRUMgPDwgY291bnRlcl9zaGlmdCkgLyBjb3VudGVyX2ZyZXE7
DQogICAgPiAgICAgLSAgICAgICAgIGlmICgodG1wICYgMHhGRkZGRkZGRjAwMDAwMDAwTCkgPT0g
MEwpDQogICAgPiAgICAgLSAgICAgICAgICAgICAgICAgbnNfcGVyX3RpY2sgPSAodWludDMyX3Qp
dG1wOw0KICAgID4gICAgIC0gICAgICAgICBlbHNlDQogICAgPiAgICAgLSAgICAgICAgICAgICAg
ICAgY291bnRlcl9zaGlmdC0tOw0KICAgID4gICAgIC0gfSB3aGlsZSAoY291bnRlcl9zaGlmdCA+
IDAgJiYgbnNfcGVyX3RpY2sgPT0gMEwpOw0KICAgID4gICAgICsgLyogV2UgZGlzYWxsb3cgemVy
byBuc19wZXJfdGljayAqLw0KICAgID4gICAgICAgVUtfQlVHT04oIW5zX3Blcl90aWNrKTsNCiAg
ICA+DQogICAgPiAgICAgKyAvKg0KICAgID4gICAgICsgICogQ2FsY3VsYXRlIHRoZSBzaGlmdCBm
YWN0b3IgYW5kIHNjYWxpbmcgbXVsdGlwbGllciBmb3INCiAgICA+ICAgICArICAqIGNwbnZlcnRp
bmcgbnMgdG8gdGlja3MuDQogICAgPiAgICAgKyAgKi8NCiAgICA+IFRZUE86IFR5cG8gaW4gY29t
bWVudDogY3BudmVydGluZyAtPiBjb252ZXJ0aW5nDQogICAgDQogICAgT0sNCiAgICANCiAgICA+
ICAgICArIGNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZ0aWNrX3Blcl9ucywgJmNvdW50ZXJfc2hpZnRf
dG9fdGljaywNCiAgICA+ICAgICArICAgICAgICAgICAgICAgICAgICAgICAgIE5TRUNfUEVSX1NF
QywgY291bnRlcl9mcmVxKTsNCiAgICA+ICAgICArDQogICAgPiAgICAgKyAvKiBXZSBkaXNhbGxv
dyB6ZXJvIG5zX3Blcl90aWNrICovDQogICAgPiAgICAgKyBVS19CVUdPTighdGlja19wZXJfbnMp
Ow0KICAgID4gICAgICsNCiAgICA+ICAgICAgIC8qDQogICAgPiAgICAgICAgKiBNb25vdG9uaWMg
dGltZSBiZWdpbnMgYXQgYm9vdF90aWNrcyAoZmlyc3QgcmVhZCBvZiBjb3VudGVyDQogICAgPiAg
ICAgICAgKiBiZWZvcmUgY2FsaWJyYXRpb24pLg0KICAgID4gICAgIC0tDQogICAgPiAgICAgMi4x
Ny4xDQogICAgPg0KICAgID4NCiAgICA+DQogICAgDQogICAgSU1QT1JUQU5UIE5PVElDRTogVGhl
IGNvbnRlbnRzIG9mIHRoaXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50
aWFsIGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5k
ZWQgcmVjaXBpZW50LCBwbGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRv
IG5vdCBkaXNjbG9zZSB0aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZv
ciBhbnkgcHVycG9zZSwgb3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1l
ZGl1bS4gVGhhbmsgeW91Lg0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 07:17:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 07:17:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9lGp-0006jv-5R; Mon, 16 Sep 2019 07:17:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OVbb=XL=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1i9lGo-0006jo-B8
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 07:17:58 +0000
X-Inumbo-ID: 1a4e4c58-d852-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1a4e4c58-d852-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 07:17:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D0FF1F2017;
 Mon, 16 Sep 2019 09:17:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 3pZVg-fCCoev; Mon, 16 Sep 2019 09:17:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id A56A6F2016;
 Mon, 16 Sep 2019 09:17:50 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 16 Sep
 2019 09:17:50 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Mon, 16 Sep 2019 09:17:50
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches
 directory
Thread-Index: AQHVaJiblICnCGJzHEaeu0o1DGO1gqctn5gAgAAClgCAAEpRgA==
Date: Mon, 16 Sep 2019 07:17:50 +0000
Message-ID: <83E4659F-CBA4-4BB4-8104-1DF70BA9BBE5@neclab.eu>
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
 <20190911120107.11757-4-felipe.huici@neclab.eu>
 <DB7PR08MB308215F5D14270DCCCF46763F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <DB7PR08MB3082634890EB10DA96C3D033F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
In-Reply-To: <DB7PR08MB3082634890EB10DA96C3D033F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <C96E3CAB1BC5AF4987987B426DA18512@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches
 directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLA0KDQpUaGF0J3Mgc3RyYW5nZSwgaXMgdGhpcyB1c2luZyB2MiBvZiB0aGUgc2Vy
aWVzPyBCZWNhdXNlIGlmIHlvdSBsb29rIGF0IHBhdGNoICMzIChmaWxlOiBwYXRjaGVzLzAwMDEt
YWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2ggKSB5b3UgY2FuIHNlZSB0aGF0IGJv
dGggY3N0ciBhbmQgaW1nIGFyZSBkZWNsYXJlZCBhbmQgdXNlZCwgYW5kIHNvIEkgZG9uJ3QgZ2V0
IHRob3NlIHdhcm5pbmdzLg0KDQpUaGFua3MsDQoNCi0tIEZlbGlwZQ0KDQrvu79PbiAxNi4wOS4x
OSwgMDY6NTIsICJKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSIgPEp1c3Rpbi5IZUBh
cm0uY29tPiB3cm90ZToNCg0KICAgIEhpIEZlbGlwZQ0KICAgIFNvcnJ5LCBJIGhhdmUgdG8gd2l0
aGRyYXcgbXkgYWNjZXB0YW5jZSBmb3IgdGhpcyBwYXRjaCBiZWNhdXNlIG15IGNvbXBpbGVyIGNv
bXBsYWlucw0KICAgIG9uIHg4NiwgZ2NjIHZlcnNpb24gNy40LjAgKFVidW50dSA3LjQuMC0xdWJ1
bnR1MX4xOC4wNC4xKQ0KICAgIC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJs
dWEvb3JpZ2luL2x1YS01LjMuNS9zcmMvbHVhLmM6NTYxOjk6IHdhcm5pbmc6IHVudXNlZCB2YXJp
YWJsZSDigJhjc3Ry4oCZIFstV3VudXNlZC12YXJpYWJsZV0NCiAgICAgICBjaGFyICpjc3RyOw0K
ICAgICAgICAgICAgIF5+fn4NCiAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQv
bGlibHVhL29yaWdpbi9sdWEtNS4zLjUvc3JjL2x1YS5jOjU2MDozMjogd2FybmluZzogdW51c2Vk
IHZhcmlhYmxlIOKAmGltZ+KAmSBbLVd1bnVzZWQtdmFyaWFibGVdDQogICAgICAgc3RydWN0IHVr
cGxhdF9tZW1yZWdpb25fZGVzYyBpbWc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBefn4NCiAgICANCiAgICA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQogICAgPiBG
cm9tOiBNaW5pb3MtZGV2ZWwgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qu
b3JnPiBPbiBCZWhhbGYNCiAgICA+IE9mIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEp
DQogICAgPiBTZW50OiAyMDE55bm0OeaciDE25pelIDEyOjQzDQogICAgPiBUbzogRmVsaXBlIEh1
aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PjsgbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcN
CiAgICA+IFN1YmplY3Q6IFJlOiBbTWluaW9zLWRldmVsXSBbVU5JS1JBRlQvTElCTFVBIFBBVENI
IHYyIDMvNF0gQWRkIHBhdGNoZXMNCiAgICA+IGRpcmVjdG9yeQ0KICAgID4NCiAgICA+IEhpIEZl
bGlwZQ0KICAgID4NCiAgICA+IExHVE0NCiAgICA+IFJldmlld2VkLWJ5OiBKaWEgSGUgPGp1c3Rp
bi5oZUBhcm0uY29tPg0KICAgID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KICAgID4g
PiBGcm9tOiBNaW5pb3MtZGV2ZWwgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2pl
Y3Qub3JnPiBPbg0KICAgID4gQmVoYWxmDQogICAgPiA+IE9mIEZlbGlwZSBIdWljaQ0KICAgID4g
PiBTZW50OiAyMDE55bm0OeaciDEx5pelIDIwOjAxDQogICAgPiA+IFRvOiBtaW5pb3MtZGV2ZWxA
bGlzdHMueGVuLm9yZw0KICAgID4gPiBDYzogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVj
bGFiLmV1Pg0KICAgID4gPiBTdWJqZWN0OiBbTWluaW9zLWRldmVsXSBbVU5JS1JBRlQvTElCTFVB
IFBBVENIIHYyIDMvNF0gQWRkIHBhdGNoZXMNCiAgICA+ID4gZGlyZWN0b3J5DQogICAgPiA+DQog
ICAgPiA+IFBhdGNoIHRvIHJlbmFtZSBtYWluIGZ1bmN0aW9uIGFuZCB0byBhZGQgaW5pdHJkIHN1
cHBvcnQgdG8gbWFpbiBsb29wLg0KICAgID4gPg0KICAgID4gPiBTaWduZWQtb2ZmLWJ5OiBGZWxp
cGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQogICAgPiA+IC0tLQ0KICAgID4gPiAg
cGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5LXBvaW50LnBhdGNoIHwgNDINCiAg
ICA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrDQogICAgPiA+ICAxIGZpbGUgY2hhbmdlZCwg
NDIgaW5zZXJ0aW9ucygrKQ0KICAgID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAw
MS1hZGQtaW5pdHJkLXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaA0KICAgID4gPg0KICAgID4gPiBk
aWZmIC0tZ2l0IGEvcGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5LXBvaW50LnBh
dGNoDQogICAgPiA+IGIvcGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5LXBvaW50
LnBhdGNoDQogICAgPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiA+IGluZGV4IDAwMDAw
MDAuLjEzNWEwYzQNCiAgICA+ID4gLS0tIC9kZXYvbnVsbA0KICAgID4gPiArKysgYi9wYXRjaGVz
LzAwMDEtYWRkLWluaXRyZC1yZW5hbWUtZW50cnktcG9pbnQucGF0Y2gNCiAgICA+ID4gQEAgLTAs
MCArMSw0MiBAQA0KICAgID4gPiArLS0tIGEvc3JjL2x1YS5jICAgICAgMjAxNy0wNC0xOSAxOToy
OTo1Ny4wMDAwMDAwMDAgKzAyMDANCiAgICA+ID4gKysrKyBiL3NyYy9sdWEuYyAgICAgIDIwMTkt
MDktMDMgMTM6MzY6MDkuNDM3ODA3ODkwICswMjAwDQogICAgPiA+ICtAQCAtNiw2ICs2LDggQEAN
CiAgICA+ID4gKw0KICAgID4gPiArICNkZWZpbmUgbHVhX2MNCiAgICA+ID4gKw0KICAgID4gPiAr
KyNpbmNsdWRlIDx1ay9wbGF0L21lbW9yeS5oPg0KICAgID4gPiArKw0KICAgID4gPiArICNpbmNs
dWRlICJscHJlZml4LmgiDQogICAgPiA+ICsNCiAgICA+ID4gKw0KICAgID4gPiArQEAgLTU1NSw2
ICs1NTcsOSBAQA0KICAgID4gPiArICAgaW50IGFyZ2MgPSAoaW50KWx1YV90b2ludGVnZXIoTCwg
MSk7DQogICAgPiA+ICsgICBjaGFyICoqYXJndiA9IChjaGFyICoqKWx1YV90b3VzZXJkYXRhKEws
IDIpOw0KICAgID4gPiArICAgaW50IHNjcmlwdDsNCiAgICA+ID4gKysgIHN0cnVjdCB1a3BsYXRf
bWVtcmVnaW9uX2Rlc2MgaW1nOw0KICAgID4gPiArKyAgY2hhciAqY3N0cjsNCiAgICA+ID4gKysN
CiAgICA+ID4gKyAgIGludCBhcmdzID0gY29sbGVjdGFyZ3MoYXJndiwgJnNjcmlwdCk7DQogICAg
PiA+ICsgICBsdWFMX2NoZWNrdmVyc2lvbihMKTsgIC8qIGNoZWNrIHRoYXQgaW50ZXJwcmV0ZXIg
aGFzIGNvcnJlY3QgdmVyc2lvbiAqLw0KICAgID4gPiArICAgaWYgKGFyZ3ZbMF0gJiYgYXJndlsw
XVswXSkgcHJvZ25hbWUgPSBhcmd2WzBdOw0KICAgID4gPiArQEAgLTU4MSw2ICs1ODYsMTEgQEAN
CiAgICA+ID4gKyAgICAgcmV0dXJuIDA7DQogICAgPiA+ICsgICBpZiAoYXJncyAmIGhhc19pKSAg
LyogLWkgb3B0aW9uPyAqLw0KICAgID4gPiArICAgICBkb1JFUEwoTCk7ICAvKiBkbyByZWFkLWV2
YWwtcHJpbnQgbG9vcCAqLw0KICAgID4gPiArKyAgLyogc2VlIGlmIHNjcmlwdCBpcyBhdmFpbGFi
bGUgZnJvbSBpbml0cmQgKi8NCiAgICA+ID4gKysgIGVsc2UgaWYgKHVrcGxhdF9tZW1yZWdpb25f
ZmluZF9pbml0cmQwKCZpbWcpID49IDApIHsNCiAgICA+ID4gKysgICAgY3N0ciA9IChjaGFyICop
aW1nLmJhc2U7DQogICAgPiA+ICsrICAgIGRvc3RyaW5nKEwsIGNzdHIsICJpbml0cmQiKTsNCiAg
ICA+ID4gKysgIH0NCiAgICA+ID4gKyAgIGVsc2UgaWYgKHNjcmlwdCA9PSBhcmdjICYmICEoYXJn
cyAmIChoYXNfZSB8IGhhc192KSkpIHsgIC8qIG5vIGFyZ3VtZW50cz8NCiAgICA+ID4gKi8NCiAg
ICA+ID4gKyAgICAgaWYgKGx1YV9zdGRpbl9pc190dHkoKSkgeyAgLyogcnVubmluZyBpbiBpbnRl
cmFjdGl2ZSBtb2RlPyAqLw0KICAgID4gPiArICAgICAgIHByaW50X3ZlcnNpb24oKTsNCiAgICA+
ID4gK0BAIC01OTMsNyArNjAzLDcgQEANCiAgICA+ID4gKyB9DQogICAgPiA+ICsNCiAgICA+ID4g
Kw0KICAgID4gPiArLWludCBtYWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsNCiAgICA+ID4g
KytpbnQgbHVhX21haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikgew0KICAgID4gPiArICAgaW50
IHN0YXR1cywgcmVzdWx0Ow0KICAgID4gPiArICAgbHVhX1N0YXRlICpMID0gbHVhTF9uZXdzdGF0
ZSgpOyAgLyogY3JlYXRlIHN0YXRlICovDQogICAgPiA+ICsgICBpZiAoTCA9PSBOVUxMKSB7DQog
ICAgPiA+IC0tDQogICAgPiA+IDIuMTEuMA0KICAgID4gPg0KICAgID4gPg0KICAgID4gPiBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KICAgID4gPiBNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgPiA+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KICAgID4gPiBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVsDQogICAgPiBJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMg
b2YgdGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZQ0KICAgID4gY29uZmlkZW50aWFs
IGFuZCBtYXkgYWxzbyBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQN
CiAgICA+IHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFu
ZCBkbyBub3QgZGlzY2xvc2UgdGhlDQogICAgPiBjb250ZW50cyB0byBhbnkgb3RoZXIgcGVyc29u
LCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLCBvciBzdG9yZSBvciBjb3B5IHRoZQ0KICAgID4gaW5m
b3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KICAgID4gX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICA+IE1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QNCiAgICA+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgID4g
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA0KICAgIElNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBh
bnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdl
ZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0
aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRv
IGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNv
cHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCiAgICANCg0KX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 07:52:42 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 07:52:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9loP-0001vM-Ky; Mon, 16 Sep 2019 07:52:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9loP-0001vH-4T
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 07:52:41 +0000
X-Inumbo-ID: f2f46e9e-d856-11e9-978d-bc764e2007e4
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.4.58]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f2f46e9e-d856-11e9-978d-bc764e2007e4;
 Mon, 16 Sep 2019 07:52:38 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=AinulkKYnMIdj4tBYRkwMB2Ofh/rc+1oBl73QviArHg=;
 b=TrWEM0tQkh2R9m9xuWHFeXGiiEREJKQ2ulUDrBhgI7DE4/hNaRxrd0BvbPLAiS6A49nqYeAo6VB07SIcTSs1VIsUt/jBLaqGdsjwqDLgNhWrnwT5LQo+UYrFHB9qrXq9EZT2I/O4q4tYIWLtNLgvDS3IwKECcH32aPVrY3ePMzI=
Received: from AM4PR08CA0051.eurprd08.prod.outlook.com (2603:10a6:205:2::22)
 by AM0PR08MB4129.eurprd08.prod.outlook.com (2603:10a6:208:133::15) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Mon, 16 Sep
 2019 07:52:34 +0000
Received: from VE1EUR03FT062.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::205) by AM4PR08CA0051.outlook.office365.com
 (2603:10a6:205:2::22) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2263.14 via Frontend
 Transport; Mon, 16 Sep 2019 07:52:34 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT062.mail.protection.outlook.com (10.152.18.252) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 07:52:33 +0000
Received: ("Tessian outbound 5061e1b5386c:v31");
 Mon, 16 Sep 2019 07:52:30 +0000
X-CR-MTA-TID: 64aa7808
Received: from f5efed6a7e79.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.5.50]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 E3523EA9-CF01-496A-94F0-F43D89AFFC2E.1; 
 Mon, 16 Sep 2019 07:52:25 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2050.outbound.protection.outlook.com [104.47.5.50])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id f5efed6a7e79.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Mon, 16 Sep 2019 07:52:25 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=afin15ZwGxGL00Hzhp324QOVueNxGq/8RhtfwvwtJCIE2KmqyQB5vnKXA5LyTfl78w7LIvAxqNUFPZ1JVnlIhHkVFzswO7C4T9A2980x8thpJzYTonTWE4VHb86e94njUNhh2+WR4EApVnMquSuAiMGxZ6JYUhn9gwh80HiOJAWB1NopGyFxUyi06Dk5NLAoKQk8LzRxngdJmWk0Hihi5L8fXXNEyc33RA+V/2zXAqRgZ7gWl+iHcu1jsUUylg66ZTeW/lYexs0jXZw7xZ05a6MZdX3xb9rZEcyqMEw+ROCFNOxLFEjFPwFMCvUkUH2iNl67Zc4MDCsvQanpNAo17A==
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=M8xhSHJMBVgonqh9xKWNn8w/rSI803pR6+9/08ni28I=;
 b=hq37GCgiDdVmORTasY0fGWAF9v7iNDnWOdGuf88Bl1NvD+JZXp0XIZwz7JS6JPN86Q9z0ATwzJyXW16tNRYejuidXq746UTgSjOHM9NVENxTJYBjdznE67eLgVWJivLoIBfTh+CkVamV9BpzFL1/qkP3EJfLxgPAY5Msg/3saibjRjQaLiXmi/S7USuCg9BRuFq7cNlkejWlnnzgvvM+8bSmZDROQ2/OhXb0RSK6KM2ZJiWLa/bHJqV+bDdMRZCKVXKFjSwdOaWrkwxJfn0BJYvNYFjF+94oozZ/csdoZvjXi5E01f9lrlV50Jmauiv2WJiqn/l1sCnMIT1oP/WpfQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=M8xhSHJMBVgonqh9xKWNn8w/rSI803pR6+9/08ni28I=;
 b=s3kgQZE6/WY1NAlYJmQtiU+vOzJMn6OqJFbYRTnvFjdTpJW+XrfmnMV/mAyKVEfKfdBU76/WWqRPT0n/XBroPdY6iHyZ5C4T548osXHzlrBHcdaVyVyjMEkzhWXuur169FgsOTfjyMMucdnmo8UJOrhH8SE8WiH4UjxV4beHF7k=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3067.eurprd08.prod.outlook.com (52.134.110.21) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.17; Mon, 16 Sep 2019 07:52:23 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 07:52:23 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Sharan Santhanam
 <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 5/7] plat/common: Find and register IRQ for
 arch_timer
Thread-Index: AQHVRuMI4eqgfPiDNkactshV+eW3nqckwa4AgAlWQkA=
Date: Mon, 16 Sep 2019 07:52:23 +0000
Message-ID: <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
In-Reply-To: <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 1a6e1f77-94db-4e4d-85d2-486897fd9174.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 954cd1ec-ecc1-490c-f4a4-08d73a7ad51b
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3067; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3067:|DB7PR08MB3067:|AM0PR08MB4129:
X-MS-Exchange-PUrlCount: 2
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM0PR08MB41297C6F5C34BE2FCACC8097F78C0@AM0PR08MB4129.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(39860400002)(346002)(396003)(366004)(376002)(53754006)(51914003)(13464003)(199004)(189003)(102836004)(53936002)(478600001)(7736002)(305945005)(186003)(5660300002)(55016002)(86362001)(6306002)(6246003)(33656002)(14444005)(4326008)(11346002)(446003)(9686003)(476003)(486006)(256004)(26005)(110136005)(54906003)(7696005)(966005)(6506007)(53546011)(3846002)(99286004)(6436002)(6116002)(14454004)(74316002)(316002)(76176011)(229853002)(66946007)(64756008)(66556008)(66476007)(66446008)(66066001)(52536014)(76116006)(81166006)(55236004)(2906002)(2501003)(25786009)(81156014)(8676002)(71190400001)(8936002)(71200400001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3067;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: WoFW/b1R0D3OGql0iHuQvm1do6ige0XyHCs1aZzU1zH9udNFoccnD0TxkNx9YhmY9Y9eWV+0rmgZQKVw+4ZzrbsZnmLnRVzs5khLEJIoa1GByd7apEI9jCFxmBYsBKAHNUrx/RrAPR9I5PJ0c6eJuqC/TygvFETdR1qQRrCNpJSt8urEzJ5d9bFkUyWGBkjSUFj3ck/D87IuqcmIqUE+w4ynD/ZYXo5ILH7wJl1ogOMS0RsTciNwNuvFyrEMIH196hDRscLyZ1uFil+qpr+tCGDVIBwuOk5ATnAenG6eiCV6zdujhJ61Kg4/S3WxO7DM5zs6RIoRcv3vcpUULMiqaxlWuBfGExuHeYZ5YGwUNyY2/vlP4e0mgWw24eUCcuJwNarIhn49ekfd+e+QR8/QMJepN3zb6R1TC/vlVdy2WwM=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3067
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT062.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(396003)(376002)(346002)(136003)(199004)(189003)(40434004)(53754006)(13464003)(51914003)(476003)(229853002)(47776003)(76176011)(6506007)(55016002)(23676004)(5024004)(53546011)(76130400001)(7696005)(2486003)(14444005)(50466002)(86362001)(99286004)(102836004)(3846002)(14454004)(66066001)(6116002)(7736002)(2906002)(36906005)(316002)(74316002)(52536014)(110136005)(305945005)(54906003)(5660300002)(478600001)(26826003)(8936002)(70586007)(356004)(11346002)(2501003)(63350400001)(486006)(186003)(70206006)(8676002)(126002)(81166006)(81156014)(966005)(22756006)(336012)(436003)(6306002)(9686003)(446003)(25786009)(4326008)(33656002)(6246003)(26005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB4129;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: e833bd62-3fc2-4c74-b272-08d73a7acf44
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM0PR08MB4129; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: NkXQ0OkNGwHF1HBJy32TVToybupohBERKQhb1eUbTQqM0q5MDzD50OWmZDaq5riK91KmcPSzfnlLScnGxyopwd6JjStMYqwYkmaderfHyMz4r70pNrRZkd/fFhGWs7vyGJFxzgj1Igf6sTB7UeI8xQAgFTIUd5/MfomCdVFwIWjunRSmSlCd6EcRy5Q4nvR+Pjcp67flTmY4+Em2O3TtgE0pWBXHW+x3dIS9D1CPhWYyHNtfshn6revH6+lwfBZbf/nn/XA8IL4GYMnzzCRiKa4+U+wbeVGz3oeMrplgC1AKMRcYsdrGOAG7TTBVTe/DsVeT05NZGX6EqcJTU4sSkHX3uYpKCmeu20Q8dupADDFTxyejpL7bzrV8X3Q/DJZixIZ6n84VI/SYjzICvD0TdqMo0O/i4nSyW1hgzTsSTrc=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 07:52:33.0573 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 954cd1ec-ecc1-490c-f4a4-08d73a7ad51b
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB4129
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 Julien Grall <Julien.Grall@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgIFNhbnRpYWdvDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2Fu
dGlhZ28gUGFnYW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1Pg0KPiBTZW50OiAyMDE55bm0
OeaciDEw5pelIDE1OjE3DQo+IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8
SnVzdGluLkhlQGFybS5jb20+OyBtaW5pb3MtDQo+IGRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
OyBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT47DQo+IFNoYXJhbiBTYW50
aGFuYW0gPFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1Pg0KPiBDYzogSnVsaWVuIEdyYWxsIDxK
dWxpZW4uR3JhbGxAYXJtLmNvbT47IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4g
PEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbiAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpDQo+IDxX
ZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcgV3UgKEFybSBUZWNobm9sb2d5IENoaW5hKQ0KPiA8
SmlhbnlvbmcuV3VAYXJtLmNvbT4NCj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSHYzIDUv
N10gcGxhdC9jb21tb246IEZpbmQgYW5kIHJlZ2lzdGVyIElSUQ0KPiBmb3IgYXJjaF90aW1lcg0K
Pg0KPiBIaSBhbGwsDQo+DQo+IFRoYW5rcyBmb3IgdGhlIHBhdGNoZXMuIFBsZWFzZSBmaW5kIG15
IGNvbW1lbnRzIGlubGluZS4NCj4NCj4g77u/T24gMzAuMDcuMTksIDE2OjI3LCAiSmlhIEhlIiA8
anVzdGluLmhlQGFybS5jb20+IHdyb3RlOg0KPg0KPiAgICAgQ3VycmVudGx5LCBpbiB1bmlrcmFm
dCwgdGhlIHRpbWVyIGludGVycnVwdCBoYXNuJ3QgYmVlbg0KPiAgICAgdXNlZCB0byB1cGRhdGUg
dGlja3MgcGVyaW9kaWNhbGx5LiBXZSBqdXN0IG1hc2sgaXQgaW4NCj4gICAgIElSUSBoYW5kbGVy
LCBhbmQgd2FpdCBmb3Igc2xlZXAgZnVuY3Rpb24gdG8gc2V0IG5ldw0KPiAgICAgbWF0Y2ggY291
bnRlciBhbmQgdW5tYXNrIElSUS4NCj4NCj4gICAgIFNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3
ZWkuY2hlbkBhcm0uY29tPg0KPiAgICAgU2lnbmVkLW9mZi1ieTogSmlhbnlvbmcgV3UgPGppYW55
b25nLnd1QGFybS5jb20+DQo+ICAgICBTaWduZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBh
cm0uY29tPg0KPiAgICAgLS0tDQo+ICAgICAgcGxhdC9jb21tb24vYXJtL3RpbWUuYyAgICAgICAg
ICAgICB8IDkxICsrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tDQo+IC0NCj4gICAgICBwbGF0
L2RyaXZlcnMvZ2ljL2dpYy12Mi5jICAgICAgICAgIHwgIDIgKy0NCj4gICAgICBwbGF0L2RyaXZl
cnMvaW5jbHVkZS9naWMvZ2ljLXYyLmggIHwgIDIgKy0NCj4gICAgICBwbGF0L2RyaXZlcnMvaW5j
bHVkZS9vZncvZ2ljX2ZkdC5oIHwgIDIgKy0NCj4gICAgICA0IGZpbGVzIGNoYW5nZWQsIDc4IGlu
c2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQ0KPg0KPiAgICAgZGlmZiAtLWdpdCBhL3BsYXQv
Y29tbW9uL2FybS90aW1lLmMgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jDQo+ICAgICBpbmRleCAx
MDdmZGYwLi40MDM0NTcyIDEwMDY0NA0KPiAgICAgLS0tIGEvcGxhdC9jb21tb24vYXJtL3RpbWUu
Yw0KPiAgICAgKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYw0KPiAgICAgQEAgLTM2LDkgKzM2
LDE4IEBADQo+ICAgICAgI2luY2x1ZGUgPG9mdy9mZHQuaD4NCj4gICAgICAjaW5jbHVkZSA8dWsv
YXNzZXJ0Lmg+DQo+ICAgICAgI2luY2x1ZGUgPHVrL3BsYXQvdGltZS5oPg0KPiAgICAgKyNpbmNs
dWRlIDx1ay9wbGF0L2xjcHUuaD4NCj4gICAgICAjaW5jbHVkZSA8dWsvcGxhdC9pcnEuaD4NCj4g
ICAgICAjaW5jbHVkZSA8dWsvYml0b3BzLmg+DQo+ICAgICAgI2luY2x1ZGUgPGNwdS5oPg0KPiAg
ICAgKyNpbmNsdWRlIDxvZncvZ2ljX2ZkdC5oPg0KPiAgICAgKyNpbmNsdWRlIDxpcnEuaD4NCj4g
ICAgICsjaW5jbHVkZSA8Z2ljL2dpYy12Mi5oPg0KPiAgICAgKw0KPiAgICAgKy8qIEJpdHMgZGVm
aW5pdGlvbiBvZiBjbnR2X2N0bF9lbDAgcmVnaXN0ZXIgKi8NCj4gICAgICsjZGVmaW5lIEdUX1RJ
TUVSX0VOQUJMRSAgICAgICAgMHgwMQ0KPiAgICAgKyNkZWZpbmUgR1RfVElNRVJfTUFTS19JUlEg
ICAgICAweDAyDQo+ICAgICArI2RlZmluZSBHVF9USU1FUl9JUlFfU1RBVFVTICAgIDB4MDQNCj4N
Cj4gICAgICAvKiBUT0RPOiBGb3Igbm93IHRoaXMgZmlsZSBpcyBLVk0gZGVwZW5kZW50LiBBcyBz
b29uIGFzIHdlIGhhdmUgbW9yZQ0KPiAgICAgICAqIEFybSBwbGF0Zm9ybXMgdGhhdCBhcmUgdXNp
bmcgdGhpcyBmaWxlLCB3ZSBuZWVkIHRvIGludHJvZHVjZSBhDQo+ICAgICBAQCAtMTMzLDYgKzE0
Miw0MCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVfbXVsdF9zaGlmdCh1aW50MzJfdCAqbXVsdCwN
Cj4gdWludDhfdCAqc2hpZnQsDQo+ICAgICAgICpzaGlmdCA9IHNmdDsNCj4gICAgICB9DQo+DQo+
ICAgICArc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfZW5hYmxlKHZvaWQpDQo+ICAg
ICArew0KPiAgICAgKyBTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsIEdUX1RJTUVSX0VOQUJM
RSk7DQo+IENPTU1FTlQ6IExvb2tzIHRvIG1lIGxpa2UgaGVyZSB3ZSBhcmUgYWxzbyBpbXBsaWNp
dGVseSB1bm1hc2tpbmcgdGhlIElSUS4NCj4gSXMgdGhpcyB0aGUgZGVzaXJlZCBiZWhhaXZvdXI/
IFRoaXMgaXMgbm90IGVudGlyZWx5IGNsZWFyIGZyb20gdGhlIGZ1bmN0aW9ucw0KPiBuYW1lLiBN
YXliZSBqdXN0IE9SIHRoaXMgYml0IHNvIHRoZSBJUlEgbWFzayBpcyBub3QgY2hhbmdlZCBieSB0
aGlzDQo+IGZ1bmN0aW9uPyBUaGVyZSBpcyBhbHNvIG5vIHRpbWVyX2Rpc2FibGUgZnVuY3Rpb24s
IG1heWJlIHdlIGFsc28gd2FudCB0bw0KPiBleHBvc2UgdGhhdD8NCg0KWWVzLCBjYWxsaW5nIFNZ
U1JFR19SRUFEMzIgYW5kIHRoZW4gU1lTUkVHX1dSSVRFMzIgd2lsbCBiZSBiZXR0ZXINClRoYW5r
cw0KDQo+ICAgICArDQo+ICAgICArIC8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVy
IGlzIHZpc2libGUgKi8NCj4gICAgICsgaXNiKCk7DQo+ICAgICArfQ0KPiAgICAgKw0KPiAgICAg
K3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX3RpbWVyX21hc2tfaXJxKHZvaWQpDQo+ICAgICAr
ew0KPiAgICAgKyBTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsDQo+ICAgICArICAgICAgICAg
U1lTUkVHX1JFQUQzMihjbnR2X2N0bF9lbDApIHwgR1RfVElNRVJfTUFTS19JUlEpOw0KPiAgICAg
Kw0KPiAgICAgKyAvKiBFbnN1cmUgdGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxl
ICovDQo+ICAgICArIGlzYigpOw0KPiAgICAgK30NCj4gICAgICsNCj4gICAgICtzdGF0aWMgaW5s
aW5lIHZvaWQgZ2VuZXJpY190aW1lcl91bm1hc2tfaXJxKHZvaWQpDQo+ICAgICArew0KPiAgICAg
KyBTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsDQo+ICAgICArICAgICAgICAgU1lTUkVHX1JF
QUQzMihjbnR2X2N0bF9lbDApICYgKH5HVF9USU1FUl9NQVNLX0lSUSkpOw0KPiAgICAgKw0KPiAg
ICAgKyAvKiBFbnN1cmUgdGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxlICovDQo+
ICAgICArIGlzYigpOw0KPiAgICAgK30NCj4gICAgICsNCj4gICAgICtzdGF0aWMgaW5saW5lIHZv
aWQgZ2VuZXJpY190aW1lcl91cGRhdGVfY29tcGFyZSh1aW50NjRfdCBuZXdfdmFsKQ0KPiAgICAg
K3sNCj4gICAgICsgU1lTUkVHX1dSSVRFNjQoY250dl9jdmFsX2VsMCwgbmV3X3ZhbCk7DQo+ICAg
ICArDQo+ICAgICArIC8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2li
bGUgKi8NCj4gICAgICsgaXNiKCk7DQo+ICAgICArfQ0KPiAgICAgKw0KPiAgICAgIHN0YXRpYyB1
aW50MzJfdCBnZW5lcmljX3RpbWVyX2dldF9mcmVxdWVuY3koaW50IGZkdF90aW1lcikNCj4gICAg
ICB7DQo+ICAgICAgIGludCBsZW47DQo+ICAgICBAQCAtMjI3LDE2ICsyNzAsMjIgQEAgc3RhdGlj
IGludCBnZW5lcmljX3RpbWVyX2luaXQoaW50IGZkdF90aW1lcikNCj4gICAgICAgcmV0dXJuIDA7
DQo+ICAgICAgfQ0KPg0KPiAgICAgK3N0YXRpYyBpbnQgZ2VuZXJpY190aW1lcl9pcnFfaGFuZGxl
cih2b2lkICphcmcgX191bnVzZWQpDQo+ICAgICArew0KPiAgICAgKyAvKiBZZXMsIHdlIGhhbmRs
ZWQgdGhlIGlycS4gKi8NCj4gQ09NTUVOVDogVGhlcmUgaXMgbm90aGluZyB0aGF0IHdlIHdvdWxk
IGxpa2UgdG8gZG8gaGVyZT8gTm90IGV2ZW4NCj4gZGlzYWJsZSB0aGUgSVJRPyBBcyB0aGUgdGlt
ZXIgaXMgbm90IHN0b3BwZWQsIHdoZW4gdGhlIGNvdW50ZXIgb3ZlcmZsb3dzDQo+IHdlIHdvdWxk
IGdldCBhIG5ldyBpbnRlcnJ1cHQgb3RoZXJ3aXNlIChhbHRob3VnaCB0aGUgb3ZlcmZsb3cgY291
bGQNCj4gaGFwcGVuIGluIGEgdmVyeSB2ZXJ5IGxvbmcgdGltZSwgcmlnaHQ/KQ0KDQpJbiBwcmV2
aW91cyB2ZXJzaW9uLCB3ZSBhZGRlZCBhIGdlbmVyaWNfdGltZXJfbWFza19pcnEoKSBpbg0KZ2Vu
ZXJpY190aW1lcl9pcnFfaGFuZGxlci4gQnV0IGFzIHBlciB0aGUgc3VnZ2VzdGlvbiBbMV0gZnJv
bSBKdWxpZW4sIHdlDQpyZW1vdmVkIGl0LiBCZXNpZGVzLCB3ZSByZWZlcnJlZCB0byB0aGUgbWlu
aW9zIGxvZ2ljIGF0IFsyXSwgaXQgb25seSBjYWxsZWQNCnVubWFzayBhbmQgbWFzayBpbiBibG9j
a19kb21haW4gKHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gdW5pa3JhZnQncw0KZ2VuZXJpY190aW1l
cl9jcHVfYmxvY2spDQoNCkFuZCB3aGF0IGlzIHlvdSBjb25jZXJuIGFib3V0IGNvdW50ZXIgb3Zl
cmZsb3c/IEkgZG9uJ3QgcXVpdGUgdW5kZXJzdGFuZCBoZXJlLg0KVGhhbmtzIGZvciBjbGFyaWZp
Y2F0aW9uLg0KDQpbMV0gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9hcmNoaXZlcy9odG1s
L21pbmlvcy1kZXZlbC8yMDE5LTA0L21zZzAwMjg2Lmh0bWwNClsyXSBodHRwOi8veGVuYml0cy54
ZW4ub3JnL2dpdHdlYi8/cD1taW5pLW9zLmdpdDthPWJsb2I7Zj1hcmNoL2FybS90aW1lLmM7aD1h
MDg4OTgxZWQxYWViNDE1MGYxNmE4YWQ3ZTNmYjhkMzA3ZDU4OTllO2hiPUhFQUQjbDEwOQ0KDQo+
ICAgICArIHJldHVybiAxOw0KPiAgICAgK30NCj4gICAgICsNCj4gICAgICB1bnNpZ25lZCBsb25n
IHNjaGVkX2hhdmVfcGVuZGluZ19ldmVudHM7DQo+DQo+ICAgICAgdm9pZCB0aW1lX2Jsb2NrX3Vu
dGlsKF9fc25zZWMgdW50aWwpDQo+ICAgICAgew0KPiAgICAgKyAvKg0KPiAgICAgKyAgKiBUT0RP
Og0KPiAgICAgKyAgKiBBcyB3ZSBoYXZlbid0IHN1cHBvcnQgaW50ZXJydXB0IG9uIEFybSwgc28g
d2UganVzdA0KPiAgICAgKyAgKiB1c2UgYnVzeSBwb2xsaW5nIGZvciBub3cuDQo+ICAgICArICAq
Lw0KPiAgICAgICB3aGlsZSAoKF9fc25zZWMpIHVrcGxhdF9tb25vdG9uaWNfY2xvY2soKSA8IHVu
dGlsKSB7DQo+ICAgICAtICAgICAgICAgLyoNCj4gICAgIC0gICAgICAgICAgKiBUT0RPOg0KPiAg
ICAgLSAgICAgICAgICAqIEFzIHdlIGhhdmVuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHQgb24gQXJtLCBz
byB3ZSBqdXN0DQo+ICAgICAtICAgICAgICAgICogdXNlIGJ1c3kgcG9sbGluZyBmb3Igbm93Lg0K
PiAgICAgLSAgICAgICAgICAqLw0KPiAgICAgICAgICAgICAgIGlmIChfX3VrX3Rlc3RfYW5kX2Ns
ZWFyX2JpdCgwLA0KPiAmc2NoZWRfaGF2ZV9wZW5kaW5nX2V2ZW50cykpDQo+ICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsNCj4gICAgICAgfQ0KPiAgICAgQEAgLTI1NCwxNiArMzAzLDEyIEBA
IF9fbnNlYyB1a3BsYXRfd2FsbF9jbG9jayh2b2lkKQ0KPiAgICAgICByZXR1cm4gZ2VuZXJpY190
aW1lcl9tb25vdG9uaWMoKSArIGdlbmVyaWNfdGltZXJfZXBvY2hvZmZzZXQoKTsNCj4gICAgICB9
DQo+DQo+ICAgICAtc3RhdGljIGludCB0aW1lcl9oYW5kbGVyKHZvaWQgKmFyZyBfX3VudXNlZCkN
Cj4gICAgIC17DQo+ICAgICAtIC8qIFllcywgd2UgaGFuZGxlZCB0aGUgaXJxLiAqLw0KPiAgICAg
LSByZXR1cm4gMTsNCj4gICAgIC19DQo+ICAgICAtDQo+ICAgICAgLyogbXVzdCBiZSBjYWxsZWQg
YmVmb3JlIGludGVycnVwdHMgYXJlIGVuYWJsZWQgKi8NCj4gICAgICB2b2lkIHVrcGxhdF90aW1l
X2luaXQodm9pZCkNCj4gICAgICB7DQo+ICAgICAtIGludCByYywgZmR0X3RpbWVyOw0KPiAgICAg
KyBpbnQgcmMsIGlycSwgZmR0X3RpbWVyOw0KPiAgICAgKyB1aW50MzJfdCBpcnFfdHlwZSwgaHdp
cnE7DQo+ICAgICArIHVpbnQzMl90IHRyaWdnZXJfdHlwZTsNCj4NCj4gICAgICAgLyoNCj4gICAg
ICAgICogTW9ub3RvbmljIHRpbWUgYmVnaW5zIGF0IGJvb3RfdGlja3MgKGZpcnN0IHJlYWQgb2Yg
Y291bnRlcg0KPiAgICAgQEAgLTI3NywxMSArMzIyLDI1IEBAIHZvaWQgdWtwbGF0X3RpbWVfaW5p
dCh2b2lkKQ0KPiAgICAgICBpZiAoZmR0X3RpbWVyIDwgMCkNCj4gICAgICAgICAgICAgICBVS19D
UkFTSCgiQ291bGQgbm90IGZpbmQgYXJjaCB0aW1lciFcbiIpOw0KPg0KPiAgICAgLSByYyA9IHVr
cGxhdF9pcnFfcmVnaXN0ZXIoMCwgdGltZXJfaGFuZGxlciwgTlVMTCk7DQo+ICAgICAtIGlmIChy
YyA8IDApDQo+ICAgICAtICAgICAgICAgVUtfQ1JBU0goIkZhaWxlZCB0byByZWdpc3RlciB0aW1l
ciBpbnRlcnJ1cHQgaGFuZGxlclxuIik7DQo+ICAgICAtDQo+ICAgICAgIHJjID0gZ2VuZXJpY190
aW1lcl9pbml0KGZkdF90aW1lcik7DQo+ICAgICAgIGlmIChyYyA8IDApDQo+ICAgICAgICAgICAg
ICAgVUtfQ1JBU0goIkZhaWxlZCB0byBpbml0aWFsaXplIHBsYXRmb3JtIHRpbWVcbiIpOw0KPiAg
ICAgKw0KPiAgICAgKyByYyA9IGdpY19nZXRfaXJxX2Zyb21fZHRiKF9saWJrdm1wbGF0X2NmZy5k
dGIsIGZkdF90aW1lciwgMiwNCj4gICAgICsgICAgICAgICAgICAgICAgICZpcnFfdHlwZSwgJmh3
aXJxLCAmdHJpZ2dlcl90eXBlKTsNCj4gICAgICsgaWYgKHJjIDwgMCkNCj4gICAgICsgICAgICAg
ICBVS19DUkFTSCgiRmFpbGVkIHRvIGZpbmQgSVJRIG51bWJlciBmcm9tIERUQlxuIik7DQo+ICAg
ICArDQo+ICAgICArIGlycSA9IGdpY19pcnFfdHJhbnNsYXRlKGlycV90eXBlLCBod2lycSk7DQo+
ICAgICArIGlmIChpcnEgPCAwIHx8IGlycSA+PSBfX01BWF9JUlEpDQo+ICAgICArICAgICAgICAg
VUtfQ1JBU0goIkZhaWxlZCB0byB0cmFuc2xhdGUgSVJRIG51bWJlciwgdHlwZT0ldSwNCj4gaHdp
cnE9JXVcbiIsDQo+ICAgICArICAgICAgICAgICAgICAgICBpcnFfdHlwZSwgaHdpcnEpOw0KPiAg
ICAgKw0KPiAgICAgKyByYyA9IHVrcGxhdF9pcnFfcmVnaXN0ZXIoaXJxLCBnZW5lcmljX3RpbWVy
X2lycV9oYW5kbGVyLCBOVUxMKTsNCj4gICAgICsgaWYgKHJjIDwgMCkNCj4gICAgICsgICAgICAg
ICBVS19DUkFTSCgiRmFpbGVkIHRvIHJlZ2lzdGVyIHRpbWVyIGludGVycnVwdCBoYW5kbGVyXG4i
KTsNCj4gICAgICsNCj4gICAgICsgLyogRW5hYmxlIGFuZCB1bm1hc2sgdGltZXIgKi8NCj4gICAg
ICsgZ2VuZXJpY190aW1lcl9lbmFibGUoKTsNCj4gICAgICsgZ2VuZXJpY190aW1lcl91bm1hc2tf
aXJxKCk7DQo+IENPTU1FTlQ6IFdoeSBhcmUgd2UgZW5hYmxpbmcgdGhlIElSUSBoZXJlPyBNYXli
ZSBJJ20gbWlzc2luZw0KPiBzb21ldGhpbmcsIGJ1dCBzaW5jZSB0aGVyZSBpcyBubyB2YWx1ZSBz
ZXQgZm9yIHRoZSB1cGRhdGUgY29tcGFyZSwgIHdlIGRvDQo+IG5vdCBrbm93IHdoZW4gdGhlIElS
USB3aWxsIGJlIHRyaWdnZXJlZC4gQWxzbywgdGhlIElSUSBoYW5kbGVyIGlzIG5vdCBkb2luZw0K
PiBhbnl0aGluZy4NCg0KT2ssIEkgd2lsbCByZXBsYWNlIGl0IHdpdGggZ2VuZXJpY190aW1lcl9t
YXNrX2lycSgpIGhlcmUuDQoNCj4gICAgICB9DQo+ICAgICBkaWZmIC0tZ2l0IGEvcGxhdC9kcml2
ZXJzL2dpYy9naWMtdjIuYyBiL3BsYXQvZHJpdmVycy9naWMvZ2ljLXYyLmMNCj4gICAgIGluZGV4
IDY4NzcxNGUuLmMwMWM5MmYgMTAwNjQ0DQo+ICAgICAtLS0gYS9wbGF0L2RyaXZlcnMvZ2ljL2dp
Yy12Mi5jDQo+ICAgICArKysgYi9wbGF0L2RyaXZlcnMvZ2ljL2dpYy12Mi5jDQo+ICAgICBAQCAt
MjkxLDcgKzI5MSw3IEBAIHZvaWQgZ2ljX3NldF9pcnFfdHlwZSh1aW50MzJfdCBpcnEsIGludCB0
cmlnZ2VyKQ0KPiAgICAgICB3cml0ZV9naWNkMzIoR0lDRF9JQ0ZHUihpcnEpLCB2YWwpOw0KPiAg
ICAgIH0NCj4NCj4gICAgIC11aW50MzJfdCBnaWNfaXJxX3RyYW5zbGF0ZSh1aW50MzJfdCB0eXBl
LCB1aW50MzJfdCBod19pcnEpDQo+ICAgICAraW50MzJfdCBnaWNfaXJxX3RyYW5zbGF0ZSh1aW50
MzJfdCB0eXBlLCB1aW50MzJfdCBod19pcnEpDQo+ICAgICAgew0KPiAgICAgICB1aW50MzJfdCBp
cnE7DQo+DQo+ICAgICBkaWZmIC0tZ2l0IGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUvZ2ljL2dpYy12
Mi5oDQo+IGIvcGxhdC9kcml2ZXJzL2luY2x1ZGUvZ2ljL2dpYy12Mi5oDQo+ICAgICBpbmRleCAy
NGRhMWViLi5jMjhiN2E3IDEwMDY0NA0KPiAgICAgLS0tIGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUv
Z2ljL2dpYy12Mi5oDQo+ICAgICArKysgYi9wbGF0L2RyaXZlcnMvaW5jbHVkZS9naWMvZ2ljLXYy
LmgNCj4gICAgIEBAIC0zNjUsNyArMzY1LDcgQEAgaW50IGdpY19pc19pcnFfYWN0aXZlKHVpbnQz
Ml90IGlycSk7DQo+ICAgICAgdm9pZCBnaWNfc2V0X2lycV90eXBlKHVpbnQzMl90IGlycSwgaW50
IHRyaWdnZXIpOw0KPg0KPiAgICAgIC8qIFRyYW5zbGF0ZSB0byBod2lycSBhY2NvcmRpbmcgdG8g
dHlwZSBlLmcuIFBQSSBTUEkgU0dJICovDQo+ICAgICAtdWludDMyX3QgZ2ljX2lycV90cmFuc2xh
dGUodWludDMyX3QgdHlwZSwgdWludDMyX3QgaHdfaXJxKTsNCj4gICAgICtpbnQgZ2ljX2lycV90
cmFuc2xhdGUodWludDMyX3QgdHlwZSwgdWludDMyX3QgaHdfaXJxKTsNCj4NCj4gICAgICAvKiBI
YW5kbGUgSVJRIGVudHJ5ICovDQo+ICAgICAgdm9pZCBnaWNfaGFuZGxlX2lycSh2b2lkKTsNCj4g
ICAgIGRpZmYgLS1naXQgYS9wbGF0L2RyaXZlcnMvaW5jbHVkZS9vZncvZ2ljX2ZkdC5oDQo+IGIv
cGxhdC9kcml2ZXJzL2luY2x1ZGUvb2Z3L2dpY19mZHQuaA0KPiAgICAgaW5kZXggZTgxYmMyOC4u
ZTU1NTg5MiAxMDA2NDQNCj4gICAgIC0tLSBhL3BsYXQvZHJpdmVycy9pbmNsdWRlL29mdy9naWNf
ZmR0LmgNCj4gICAgICsrKyBiL3BsYXQvZHJpdmVycy9pbmNsdWRlL29mdy9naWNfZmR0LmgNCj4g
ICAgIEBAIC00Nyw1ICs0Nyw1IEBADQo+ICAgICAgICovDQo+ICAgICAgaW50IGdpY19nZXRfaXJx
X2Zyb21fZHRiKGNvbnN0IHZvaWQgKmZkdCwgaW50IG5vZGVvZmZzZXQsIGludCBpbmRleCwNCj4g
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICppcnFfdHlwZSwgdWludDMyX3QgKmh3aXJx
LA0KPiAgICAgLSAgICAgICAgICAgICAgICAgdWludDMyX3QgKnRyaWdnZXJfdHlwZSkNCj4gICAg
ICsgICAgICAgICAgICAgICAgIHVpbnQzMl90ICp0cmlnZ2VyX3R5cGUpOw0KPiAgICAgICNlbmRp
ZiAvKiBfX1BMQVRfRFJWX0dJQ19GRFRfSF9fICovDQo+ICAgICAtLQ0KPiAgICAgMi4xNy4xDQo+
DQo+DQo+DQoNCklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFu
ZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmls
ZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlm
eSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRz
IHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9y
IGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 07:56:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 07:56:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9lry-000202-03; Mon, 16 Sep 2019 07:56:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9lrx-0001zx-HJ
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 07:56:21 +0000
X-Inumbo-ID: 77300934-d857-11e9-95d9-12813bfff9fa
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.2.76]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 77300934-d857-11e9-95d9-12813bfff9fa;
 Mon, 16 Sep 2019 07:56:19 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=9X9Z5cCIVL8tmdsVA8Bn2oN+785VD504GA7Pxcc6Pwc=;
 b=Gg7yYJELXiTZwkNP13aTqZlB26by6LBcgVob+cT20CavU4/2ORvDXBChihfkQKILh5ONgB6kMlY4NKqz3NlYQuln8BHTtV357mkHYhs5TT/XVbR4CWFrxfd5/udkOETlRgBSdy2GwGLCSbT3kFM7KdcvTp52x57ceBTyjkdobHU=
Received: from DB6PR0802CA0037.eurprd08.prod.outlook.com (2603:10a6:4:a3::23)
 by VI1PR08MB4319.eurprd08.prod.outlook.com (2603:10a6:803:f9::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13; Mon, 16 Sep
 2019 07:56:15 +0000
Received: from DB5EUR03FT037.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::201) by DB6PR0802CA0037.outlook.office365.com
 (2603:10a6:4:a3::23) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.21 via Frontend
 Transport; Mon, 16 Sep 2019 07:56:15 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT037.mail.protection.outlook.com (10.152.20.215) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 07:56:13 +0000
Received: ("Tessian outbound 968ab6b62146:v31");
 Mon, 16 Sep 2019 07:56:08 +0000
X-CR-MTA-TID: 64aa7808
Received: from 17b325042443.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.13.55]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 053883A7-0A88-4372-8C21-001C5647F626.1; 
 Mon, 16 Sep 2019 07:56:03 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2055.outbound.protection.outlook.com [104.47.13.55])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 17b325042443.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Mon, 16 Sep 2019 07:56:03 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=UGkeI6VWJB/T00OS4/wMDMEVf+0GzXenkYk9yxyUgPxOl5EJets9hxvghyTUtMyCScm3eVjQkm1ORhEc+SDNn9u+7qyuCDnugvmUmNVwfhHZ3nmcrxuOkn0yr8VymguNHtttjUaeJKp3MlxmZFo+WPe1oYCl4KxcZ405ceLgqVOUoInPgBzc8Ad8F3AWHy0s4hCAmN5DMveIq5oKMJbbbqpWXPEdweHZ5HPn9JlrAZ7aA4kSsONAh9tXgSEQt0dEBpZwuVgscGVVMMQcUzIkVH4U3es+Adr/s8RxA/boVnsAalciWxbPTN/0U3HLedHYnhPm99eC3RzsZGg23WLikQ==
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=MHOYGDf78JGlqH33p511TGri8z6Uk7cvhw6oa9+SRhw=;
 b=O5JmjMDXLU/w/pnlMXpXRDmigjRNGwfj2o45fQ6xxc+e19BRFWnYQgx4+0Y7QzTNYsFnYsrfm7zpi2wj5MWa7T/TLg/2UlNeX7k9ZLZQzlWe95mxvpbl5Zrp+Tb2JfaWFjCHSkf7MkDJdKoF7XZYboxRLB/dYMQs3AHZFilUTT5sNUFWxiE2CXyn02FuofCWi9GRoUExj5xn/y8hrS2NTxk+2/WNGQsGzbgbdeadyrUCTVKoMN4xtZSFkYtlpjwjxsy5ByNw/od8Jfn2YKFbOk/bkPMDxLzz79X2mbV79xigJYK0cVfrT2a1O4ArrlfCWHWqyvbu0u6lv64/Qon31Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MHOYGDf78JGlqH33p511TGri8z6Uk7cvhw6oa9+SRhw=;
 b=DZcc7HrpgDrhTUhdm+7QNwADlQytoS0y1yGstszqMuusqU/xvIOt9lh7LrXlhN2YH9GsnHeqCGjx14PtijzC5lyggKlaCRcQXxlXYdBXPckikecLXAnXfo/nJjNHYz/8vpj4eYu1rbldaqAW7KgYFRYweTk3S2lSziFIC2e0FKk=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB2969.eurprd08.prod.outlook.com (52.134.111.146) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.21; Mon, 16 Sep 2019 07:56:00 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 07:56:00 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Sharan Santhanam
 <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 6/7] plat/common: Implement
 generic_timer_cpu_block
Thread-Index: AQHVRuMG7IjFzQzbWE6zkf+z+5uehackxNOAgAl03oA=
Date: Mon, 16 Sep 2019 07:56:00 +0000
Message-ID: <DB7PR08MB3082BC7755CB899F47841B53F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-7-justin.he@arm.com>
 <250EB994-8794-46DC-BBB6-8F12735F930A@neclab.eu>
In-Reply-To: <250EB994-8794-46DC-BBB6-8F12735F930A@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: d41c12f6-f2d0-4d5a-b949-72192b1c8b70.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 65dd9451-7afe-4f1f-b8c1-08d73a7b5835
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB2969; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB2969:|DB7PR08MB2969:|VI1PR08MB4319:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <VI1PR08MB4319B61E1A15A279C2A86D53F78C0@VI1PR08MB4319.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:7219;OLM:7219;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(136003)(39860400002)(376002)(366004)(396003)(13464003)(53754006)(51914003)(199004)(189003)(64756008)(66476007)(476003)(25786009)(9686003)(3846002)(6246003)(99286004)(305945005)(14444005)(6116002)(71190400001)(74316002)(55016002)(66066001)(256004)(71200400001)(6436002)(7736002)(486006)(186003)(76176011)(86362001)(229853002)(66946007)(66556008)(14454004)(26005)(6506007)(53546011)(55236004)(102836004)(478600001)(5660300002)(66446008)(110136005)(2501003)(81156014)(81166006)(54906003)(4326008)(316002)(53936002)(8676002)(8936002)(2906002)(11346002)(446003)(7696005)(33656002)(52536014)(76116006)(41533002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB2969;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: zYP4ivREVZIE/fQGmBpQ1vb+LAHX7WELEniVCbr9rJaciZKmVTPUw93XKRj2w/U4J5Nv4umJXaHjK6G1ikmDqWQ6C5utCHyzfj/vzDwG4BRBEcTllpjc13nR6CwMe5jYZTb8Q8T+6vXzTbc67yjDJvvUy3v3Nv6svsw+lT2EFi2DhdBcpCTU9qT/begoKihnd4hvyVBhPynfcgWXi89TSjBYX2MYtCZb75iiNjg6wtYGXapyaMJSl8Ctuv5jL1vMPLIXtd+x37mmGfKx0U8QxLrm82Qqpv/MkeoBzoYb3kkqCAVGsugz6tnnClx9AnTmENljah3pM0F9//gqoRTVLfTCO0ChFFOlJqmpx1V5Fen9ccg5lvvl5HuNqeeuA66FN7IYK3A+AIfRJTf2VGNkUr24QnnPstpMRF6JG3M6if8=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB2969
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT037.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(396003)(376002)(39860400002)(136003)(53754006)(40434004)(13464003)(51914003)(189003)(199004)(11346002)(2501003)(486006)(186003)(8676002)(81156014)(81166006)(70206006)(126002)(70586007)(8936002)(26005)(476003)(478600001)(356004)(26826003)(4326008)(6246003)(33656002)(336012)(25786009)(22756006)(446003)(436003)(9686003)(76130400001)(14444005)(5024004)(23676004)(53546011)(2486003)(55016002)(7696005)(229853002)(86362001)(6506007)(50466002)(47776003)(76176011)(316002)(7736002)(74316002)(305945005)(5660300002)(54906003)(2906002)(110136005)(52536014)(99286004)(6116002)(3846002)(102836004)(66066001)(14454004)(63350400001)(41533002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR08MB4319;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 14a5f0a3-86c8-4e0d-75a8-08d73a7b50cc
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:VI1PR08MB4319; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: Vec9tvPD5NRPOXkMPDFiEbpQ+aCz2d6kI8VrNakTAeQQt+Pn7n5haiDfZn4/MMW6V9nuTF19iJxKY9wphNonHN1HoSxAnOGxx6+s+KECXwPvpr/9oZVCPRJ5e26LUdvw+Nxyk5mVlXWkxP0F+WsAcXtVG7XZe4Zoar8g8WzP+Lu5b7T2crIQyYROeGM4kfsQyZIAFpU8DJRUUG0C5ZdzbhiBkXzaPrSchz7boAtncwMwSb92/GTNsexN4TyyTN26zHp+j1FaNwKdJlfLhFSEOBhK+/5aL5bTawrZhdqxQD02UYiRYaOHpg+BUQwzaYzi7q6rT7U3vThwWiN9vTXJV5KN5/u/d7iZUDUpYrLcsgf5xCkrebVnGsGSE52fhP88IxwCMKtZBQzmK3VZpFQjOnlvjNSX7ETOQofwMDwOhGY=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 07:56:13.0948 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 65dd9451-7afe-4f1f-b8c1-08d73a7b5835
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4319
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 6/7] plat/common: Implement
 generic_timer_cpu_block
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 Julien Grall <Julien.Grall@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2FudGlhZ28NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBTYW50
aWFnbyBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+DQo+IFNlbnQ6IDIwMTnlubQ5
5pyIMTDml6UgMTU6MjgNCj4gVG86IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxK
dXN0aW4uSGVAYXJtLmNvbT47IG1pbmlvcy0NCj4gZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7
IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PjsNCj4gU2hhcmFuIFNhbnRo
YW5hbSA8U2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+DQo+IENjOiBKdWxpZW4gR3JhbGwgPEp1
bGllbi5HcmFsbEBhcm0uY29tPjsgS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKQ0KPiA8
S2FseS5YaW5AYXJtLmNvbT47IFdlaSBDaGVuIChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gPFdl
aS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpDQo+IDxK
aWFueW9uZy5XdUBhcm0uY29tPg0KPiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNi83
XSBwbGF0L2NvbW1vbjogSW1wbGVtZW50DQo+IGdlbmVyaWNfdGltZXJfY3B1X2Jsb2NrDQo+DQo+
IEhpIGFsbCwNCj4NCj4gVGhhbmtzIGZvciB0aGUgcGF0Y2guIFBsZWFzZSBmaW5kIG15IGNvbW1l
bnRzIGlubGluZS4NCj4NCj4g77u/T24gMzAuMDcuMTksIDE2OjI3LCAiSmlhIEhlIiA8anVzdGlu
LmhlQGFybS5jb20+IHdyb3RlOg0KPg0KPiAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQg
d2hlbiBzeXN0ZW0gZW50ZXIgc2xlZXAgYW5kIG5lZWQgd2FrZXVwDQo+ICAgICBpbiBhIHNwZWNp
ZmljIHRpbWUuIEZvciBuc190b190aWNrcyBwcmVjaXNpb24sIHdlIGxpbWl0ZWQgdGhlIG1heA0K
PiAgICAgc2xlZXAgdGltZSB0byAzNjAwIHNlY29uZHMuDQo+DQo+ICAgICBTaWduZWQtb2ZmLWJ5
OiBXZWkgQ2hlbiA8d2VpLmNoZW5AYXJtLmNvbT4NCj4gICAgIFNpZ25lZC1vZmYtYnk6IEppYW55
b25nIFd1IDxqaWFueW9uZy53dUBhcm0uY29tPg0KPiAgICAgU2lnbmVkLW9mZi1ieTogSmlhIEhl
IDxqdXN0aW4uaGVAYXJtLmNvbT4NCj4gICAgIC0tLQ0KPiAgICAgIHBsYXQvY29tbW9uL2FybS90
aW1lLmMgfCA0NQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0N
Cj4gICAgICAxIGZpbGUgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkN
Cj4NCj4gICAgIGRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jIGIvcGxhdC9jb21t
b24vYXJtL3RpbWUuYw0KPiAgICAgaW5kZXggNDAzNDU3Mi4uM2NiYmQzZiAxMDA2NDQNCj4gICAg
IC0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCj4gICAgICsrKyBiL3BsYXQvY29tbW9uL2Fy
bS90aW1lLmMNCj4gICAgIEBAIC0yNDIsNiArMjQyLDQ1IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5l
cmljX3RpbWVyX2Vwb2Nob2Zmc2V0KHZvaWQpDQo+ICAgICAgIHJldHVybiAwOw0KPiAgICAgIH0N
Cj4NCj4gICAgICsvKg0KPiAgICAgKyAqIFJldHVybnMgZWFybHkgaWYgYW55IGludGVycnVwdHMg
YXJlIHNlcnZpY2VkLCBvciBpZiB0aGUgcmVxdWVzdGVkIGRlbGF5DQo+IGlzDQo+ICAgICArICog
dG9vIHNob3J0LiBNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQsIHdpbGwg
ZW5hYmxlDQo+IGludGVycnVwdHMNCj4gICAgICsgKiAiYXRvbWljYWxseSIgZHVyaW5nIGlkbGUg
bG9vcC4NCj4gICAgICsgKg0KPiAgICAgKyAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQg
b25seSBmcm9tIHRoZSBzY2hlZHVsZXIuIEl0IHdpbGwgc2NyZXcNCj4gICAgICsgKiB5b3VyIHN5
c3RlbSBpZiB5b3UgZG8gb3RoZXJ3aXNlLiBBbmQsIHRoZXJlIGlzIG5vIHJlYXNvbiB5b3UNCj4g
ICAgICsgKiBhY3R1YWxseSB3YW50IHRvIHVzZSBpdCBhbnl3aGVyZSBlbHNlLiBUSElTIElTIE5P
VCBBIFlJRUxEIG9yIGFueQ0KPiAgICAgKyAqIGtpbmQgb2YgbXV0ZXhfbG9jay4gSXQgd2lsbCBz
aW1wbHkgaGFsdCB0aGUgY3B1LCBub3QgYWxsb3dpbmcgYW55DQo+ICAgICArICogb3RoZXIgdGhy
ZWFkIHRvIGV4ZWN1dGUuDQo+ICAgICArICovDQo+IENPTU1FTlQ6IElzIHRoaXMgdGhlIEFQSSB0
aGF0IHdlIHdhbnQ/IE1vc3QgaW50dWl0aXZlbHkgSSB3b3VsZCBleHBlY3QgdG8NCj4gYmxvY2sg
Zm9yIGEgZ2l2ZW4gdGltZSBhZnRlciB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBIb3dldmVyLCBh
cyB0aGUgdmFyaWFibGUNCj4gbmFtZSBzdGF0ZXMsIHdlIGFyZSBoZXJlIGJsb2NraW5nIHVudGls
IGEgY2VydGFpbiBhYnNvbHV0ZSB2YWx1ZSwgd2hpY2ggZG9lcw0KPiBub3Qgc2VlbSBpbnR1aXRp
dmUgdG8gbWUuIElmIHRoaXMgaXMgaW4gZmFjdCB3aGF0IHdlIHdhbnQsIHRoZW4gbWF5YmUgYWRk
DQo+ICJfdW50aWwiIHRvIHRoZSBmdW5jdGlvbiBuYW1lIChtb3N0IHJlYWQgdGhhbiB0aGUgdmFy
aWFibGUgbmFtZSk/DQoNClN1cmUsIEkgY2FuIGFkZCB0aGUgcHJlZml4ICJfdW50aWwiDQoNCj4g
ICAgICtzdGF0aWMgdm9pZCBnZW5lcmljX3RpbWVyX2NwdV9ibG9jayh1aW50NjRfdCB1bnRpbF9u
cykNCj4gICAgICt7DQo+ICAgICArIHVpbnQ2NF90IG5vd19ucywgdW50aWxfdGlja3M7DQo+ICAg
ICArDQo+ICAgICArIFVLX0FTU0VSVCh1a3BsYXRfbGNwdV9pcnFzX2Rpc2FibGVkKCkpOw0KPiAg
ICAgKw0KPiAgICAgKyAvKiBSZWNvcmQgY3VycmVudCBucyBhbmQgdW50aWxfdGlja3MgZm9yIHRp
bWVyICovDQo+ICAgICArIG5vd19ucyA9IHVrcGxhdF9tb25vdG9uaWNfY2xvY2soKTsNCj4gICAg
ICsgdW50aWxfdGlja3MgPSBnZW5lcmljX3RpbWVyX2dldF90aWNrcygpDQo+ICAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICsgbnNfdG9fdGlja3ModW50aWxfbnMgLSBub3dfbnMpOw0KPiAg
ICAgKw0KPiAgICAgKyBpZiAobm93X25zIDwgdW50aWxfbnMpIHsNCj4gICAgICsgICAgICAgICBn
ZW5lcmljX3RpbWVyX3VwZGF0ZV9jb21wYXJlKHVudGlsX3RpY2tzKTsNCj4gICAgICsgICAgICAg
ICBnZW5lcmljX3RpbWVyX2VuYWJsZSgpOw0KPiAgICAgKyAgICAgICAgIGdlbmVyaWNfdGltZXJf
dW5tYXNrX2lycSgpOw0KPiAgICAgKyAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ3Zmki
KTsNCj4gICAgICsgICAgICAgICBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCk7DQo+ICAgICArDQo+
ICAgICArICAgICAgICAgLyogR2l2ZSB0aGUgSVJRIGhhbmRsZXIgYSBjaGFuY2UgdG8gaGFuZGxl
IHdoYXRldmVyIHdva2UNCj4gICAgICsgICAgICAgICAgKiB1cyB1cA0KPiAgICAgKyAgICAgICAg
ICAqLw0KPiAgICAgKyAgICAgICAgIHVrcGxhdF9sY3B1X2VuYWJsZV9pcnEoKTsNCj4gICAgICsg
ICAgICAgICB1a3BsYXRfbGNwdV9kaXNhYmxlX2lycSgpOw0KPiAgICAgKw0KPiAgICAgKyAgICAg
ICAgIHJldHVybjsNCj4gQ09NTUVOVDogTm8gbmVlZCBmb3IgdGhpcyByZXR1cm4gaGVyZQ0KDQpZ
ZXMsIHRoYW5rcw0KDQo+ICAgICArIH0NCj4gICAgICt9DQo+ICAgICArDQo+ICAgICAgc3RhdGlj
IGludCBnZW5lcmljX3RpbWVyX2luaXQoaW50IGZkdF90aW1lcikNCj4gICAgICB7DQo+ICAgICAg
IC8qIEdldCBjb3VudGVyIGZyZXF1ZW5jeSBmcm9tIERUQiBvciByZWdpc3RlciAqLw0KPiAgICAg
QEAgLTI4MCwxMiArMzE5LDggQEAgdW5zaWduZWQgbG9uZyBzY2hlZF9oYXZlX3BlbmRpbmdfZXZl
bnRzOw0KPg0KPiAgICAgIHZvaWQgdGltZV9ibG9ja191bnRpbChfX3Nuc2VjIHVudGlsKQ0KPiAg
ICAgIHsNCj4gICAgIC0gLyoNCj4gICAgIC0gICogVE9ETzoNCj4gICAgIC0gICogQXMgd2UgaGF2
ZW4ndCBzdXBwb3J0IGludGVycnVwdCBvbiBBcm0sIHNvIHdlIGp1c3QNCj4gICAgIC0gICogdXNl
IGJ1c3kgcG9sbGluZyBmb3Igbm93Lg0KPiAgICAgLSAgKi8NCj4gICAgICAgd2hpbGUgKChfX3Nu
c2VjKSB1a3BsYXRfbW9ub3RvbmljX2Nsb2NrKCkgPCB1bnRpbCkgew0KPiAgICAgKyAgICAgICAg
IGdlbmVyaWNfdGltZXJfY3B1X2Jsb2NrKHVudGlsKTsNCj4gICAgICAgICAgICAgICBpZiAoX191
a190ZXN0X2FuZF9jbGVhcl9iaXQoMCwNCj4gJnNjaGVkX2hhdmVfcGVuZGluZ19ldmVudHMpKQ0K
PiAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICAgICAgIH0NCj4gICAgIC0tDQo+ICAg
ICAyLjE3LjENCj4NCj4NCj4NCg0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRo
aXMgZW1haWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxz
byBiZSBwcml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBw
bGVhc2Ugbm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0
aGUgY29udGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwg
b3Igc3RvcmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91
Lg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 12:01:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 12:01:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9phY-0008Du-Bd; Mon, 16 Sep 2019 12:01:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4dtO=XL=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i9phX-0008Dp-SJ
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 12:01:51 +0000
X-Inumbo-ID: c2696bbd-d879-11e9-95e1-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.74]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c2696bbd-d879-11e9-95e1-12813bfff9fa;
 Mon, 16 Sep 2019 12:01:49 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=PaXBl39Sinbg1xgJUu/lXbs2ep/kkfZpW8EicsFyhVR36xEjLfrR4Jqj6FEWq6nFranoWOpuUmiMnoqyQyUnulggsXQW5dG4XTHZ9KrJ3OAR9gryZ4+/tf7D/HvysYZNL+1+OnGPP7BldWq6QX+6iUu7WsIDbjt7khmE0kvvKEFxkroNG8XVt6Hu4GaKJPqcmPvFeFTSKpcpp+wvKW5VWuuw/I8ue2yXo3J/HF1cBOpUMmj97DTN7s7zoJD3oZQIchZa4mj5AIxzzLqQqf1coTi/v9PwS8KPfs6MG8oxP6xWF9LH4ZgO3LgmJtIuRHb3YCpzQ0l6bPW8mGTA6QkKNA==
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=sm0QuaGeVQ4XAGDcV6mnDgZgpfNSC9PT68CfpzGV0KM=;
 b=FpV/dYgOaWhpghiPpoVjh8ULAzGncQ+k+kkWXGCGFouf6Cl3Z7ixMzkiXSB/4XYnM/78URN2cqonfkKDtizB/VvxF2H6oZibUgtJ/z77J7K89tB1h7nZE7vBAF6049s3iL/TdirmuQyMRiw2e/FjxAHSr3/U9yIKYq8lvIcrNQWKgCuv1agqR/qmcKK4UCJPeyo5l02XAU63MnPyGoqTuPbac6uaxNY2yXTyr/X0ws6HTGrWqszpQTCm5X/DBa6wKQ3wend9vPf4478rlR8yBx2wUCI1M5W4EsoEexuAySR4TxCC5aX2aTVmaeSWv4ZxnkELtdYANiFLeo5VkpkMGQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4954.eurprd01.prod.exchangelabs.com (20.177.209.204) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Mon, 16 Sep
 2019 12:01:47 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 12:01:47 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH] Configure IO C99 formats and errno
 extensions
Thread-Index: AQHVaUUmMRFwXfnWBEiGXR4jVALtRqcuOnqA
Date: Mon, 16 Sep 2019 12:01:46 +0000
Message-ID: <ce65a05e-780d-1dc5-a3cd-30d0d11e4345@stud.acs.upb.ro>
References: <20190912083612.31114-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190912083612.31114-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM4PR0501CA0056.eurprd05.prod.outlook.com
 (2603:10a6:200:68::24) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.105]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: e0181693-6880-456e-5f59-08d73a9da629
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:PR1PR01MB4954; 
x-ms-traffictypediagnostic: PR1PR01MB4954:
x-microsoft-antispam-prvs: <PR1PR01MB4954D6E99D70E13D295411C4A68C0@PR1PR01MB4954.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:6790;
x-forefront-prvs: 0162ACCC24
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39830400003)(376002)(136003)(396003)(346002)(366004)(199004)(189003)(476003)(7736002)(66446008)(305945005)(14454004)(478600001)(85182001)(2501003)(6506007)(53546011)(71190400001)(102836004)(786003)(25786009)(5660300002)(256004)(316002)(86362001)(2906002)(4326008)(3846002)(6116002)(11346002)(6486002)(6246003)(486006)(66476007)(66556008)(64756008)(6436002)(66946007)(229853002)(66066001)(76176011)(71200400001)(386003)(2616005)(31696002)(446003)(110136005)(81156014)(8676002)(81166006)(26005)(8936002)(52116002)(85202003)(53936002)(186003)(31686004)(6512007)(99286004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4954;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 5+NDyz0BX6CLMc7YwdDVl53W/z1YwSbsdlgHci4m2s9Fa5EKYdBnuZBmTaE+NYBtKJDg8pCy2tdcm3xuzcy++e2RJTdsmSLuTjbD315M3fAIkdO+RglqJnLWLDP1pNSXkjGnT8Y0ruaet8u9kwrJMZM65ogzYftIIKP9fDfemNL8BGFTdjtmT+vYfvdBX7JnGMceuTUqNqsIJTmQn4Y86Dq4IsHa9dgiPPglZZdVOfUaIDwJtGWjM81Jd7P+b+ngxDRYltoFBeKxn60//UzBQwKUo8PrWHuec8cM1Cn+DezJMlNPB4IqhNidHiE0iDF7ypNoAon2OPhCQTD3nMjijPgq+DdjhcQQ4TnlQqM3cAQas/OVI/YP3yhug3FTzOLNdfLcZ7qK4nq824q9Lp7aK25DEUM6Mq78ww+XgKUqgYA=
x-ms-exchange-transport-forked: True
Content-ID: <E1731DD80E58604DA7440EEE5CDD2AE1@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: e0181693-6880-456e-5f59-08d73a9da629
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2019 12:01:46.9779 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 3oMIc1Jlq9A1j4TmMY7oiC3TrSeVvVw+EwW+U74FVbzYCEzjpB/rxnC0Q1HuqOM7W6VyX8GIkHLClH4e33/AbiS+VZD9zk1aKfg8WkaH+GopWfw6QWiF3bhAMbHC1f4M
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4954
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Configure IO C99 formats
 and errno extensions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpS
ZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1CTx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KDQpPbiAxMi4wOS4yMDE5IDExOjM2LCBDb3N0aW4gTHVwdSB3cm90ZToNCj4g
VGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGVuYWJsaW5nIHRoZSBmb2xsb3dpbmcgZXh0ZW5z
aW9uczoNCj4gKiBJTyBDOTkgZm9ybWF0cyBlbmFibGUgbW9yZSBvcHRpb25zIGZvciBmb3JtYXR0
aW5nIG91dHB1dC4gV2UgbmVlZCB0aGlzIHRvDQo+IHN1cHBvcnQgIiV6IiBpbiBQeXRob24gMw0K
PiAqIExpbnV4IGVycm5vIGV4dGVuc2lvbnMgZGVmaW5lIG1vcmUgZXJyb3IgbnVtYmVycy4gV2Ug
bmVlZCB0aGlzIHRvIHN1cHBvcnQNCj4gRVNIVVRET1dOIGluIFB5dGhvbiAzDQo+DQo+IFNpZ25l
ZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQo+IC0tLQ0KPiAg
IENvbmZpZy51ayAgIHwgMTAgKysrKysrKysrKw0KPiAgIE1ha2VmaWxlLnVrIHwgIDIgKysNCj4g
ICAyIGZpbGVzIGNoYW5nZWQsIDEyIGluc2VydGlvbnMoKykNCj4NCj4gZGlmZiAtLWdpdCBhL0Nv
bmZpZy51ayBiL0NvbmZpZy51aw0KPiBpbmRleCA4OTAxMGExLi5kYTU4N2JhIDEwMDY0NA0KPiAt
LS0gYS9Db25maWcudWsNCj4gKysrIGIvQ29uZmlnLnVrDQo+IEBAIC0xMCwzICsxMCwxMyBAQCBt
ZW51Y29uZmlnIExJQk5FV0xJQkMNCj4gICAJc2VsZWN0IExJQk5FV0xJQk0gaWYgTElCTkVXTElC
Qw0KPiAgIAlzZWxlY3QgTElCVUtBTExPQw0KPiAgIAlzZWxlY3QgTElCVkZTQ09SRQ0KPiArDQo+
ICtpZiBMSUJORVdMSUJDDQo+ICsJY29uZmlnIExJQk5FV0xJQkNfV0FOVF9JT19DOTlfRk9STUFU
Uw0KPiArCQlib29sICJVc2UgQzk5IElPIGZvcm1hdHMiDQo+ICsJCWRlZmF1bHQgbg0KPiArDQo+
ICsJY29uZmlnIExJQk5FV0xJQkNfTElOVVhfRVJSTk9fRVhURU5TSU9OUw0KPiArCQlib29sICJV
c2UgTGludXggZXJybm8gZXh0ZW5zaW9ucyINCj4gKwkJZGVmYXVsdCBuDQo+ICtlbmRpZg0KPiBk
aWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51aw0KPiBpbmRleCAwMWRhNzI0Li44
MTJmNjAyIDEwMDY0NA0KPiAtLS0gYS9NYWtlZmlsZS51aw0KPiArKysgYi9NYWtlZmlsZS51aw0K
PiBAQCAtODIsNiArODIsOCBAQCBMSUJORVdMSUJNX0NYWElOQ0xVREVTICs9IC1JJChMSUJORVdM
SUJfTElCTSkvY29tbW9uDQo+ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCj4gICBMSUJORVdM
SUJfR0xPQkFMX0ZMQUdTLXkgICs9IC1ETUlTU0lOR19TWVNDQUxMX05BTUVTIC1ETUFMTE9DX1BS
T1ZJREVEDQo+ICAgTElCTkVXTElCX0dMT0JBTF9GTEFHUy15ICArPSAtRF9QT1NJWF9SRUFMVElN
RV9TSUdOQUxTDQo+ICtMSUJORVdMSUJfR0xPQkFMX0ZMQUdTLSQoQ09ORklHX0xJQk5FV0xJQkNf
V0FOVF9JT19DOTlfRk9STUFUUykgKz0gLURfV0FOVF9JT19DOTlfRk9STUFUUw0KPiArTElCTkVX
TElCX0dMT0JBTF9GTEFHUy0kKENPTkZJR19MSUJORVdMSUJDX0xJTlVYX0VSUk5PX0VYVEVOU0lP
TlMpICs9IC1EX19MSU5VWF9FUlJOT19FWFRFTlNJT05TX18NCj4gICANCj4gICBDRkxBR1MteSAg
ICs9ICQoTElCTkVXTElCX0dMT0JBTF9GTEFHUy15KQ0KPiAgIENYWEZMQUdTLXkgKz0gJChMSUJO
RVdMSUJfR0xPQkFMX0ZMQUdTLXkpDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:17:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:17:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9qsM-000808-V3; Mon, 16 Sep 2019 13:17:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4dtO=XL=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i9qsM-000803-5P
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 13:17:06 +0000
X-Inumbo-ID: 45558a11-d884-11e9-95e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.84]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 45558a11-d884-11e9-95e6-12813bfff9fa;
 Mon, 16 Sep 2019 13:17:03 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Z1nePf6Sg6l5+Ty6LhOaPbGiPj7273JulqDrr1XSLdOCx9O48XanaJ8s52ax76smmjAYgSbay3q2He3XPqRvELPDXtz5bY4DmS91hGgWwVSenTUflYBxqE12bLQn3ayIvA0pEAy4Md2rGdxM2ALNCWxeow0r6MAnNaNQ5hGF/LLFBK0qrO1tXNVN+YhpeTRq++ZDXOGwJ6FTeG/LADRg37JqcVc71tURX5ARFLDApEqXkRU1RYeKksLnPTjWTRuvLY5bTX6hIoMuKE8F03Lfko3wllkpIAZOXAiuNlwvCk9hSlw6AmcNtTc2S++4vbPE4F7V5jFcn9ewCubkMXm5Qg==
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=tzU0VStnf95ahs/CFivr9GKaxqwCBllLu33zLG4o2N4=;
 b=iUWOZ5K3v+itkvWhPYl7GyWjT9lXBjwaN283Ytw7RGheV/ub9idUXRU9GO5MOP+8cPqmSk8+L50SRdwidI+avqn+GaZz7rcIZEcKzArCsCxqsjPwo0SB4SoatCEnFzfbv3SjgwlWqQ44t6UuhGqrpV3rK+h6fS51rAH6H6Qdz6oNVTVCuqg1RtBLKCajaQ+QtfPKK/xdEfhpRgz3ZoDq5aFVQG7NmPNroiSmp5BiQdUFJF1znsEfsqUImo3x19lKr0QhzIgITKWwxRBLSyrBowzgrm7KCjFSeRmyFZ2MVEQYPP5DTWvRH9tU+a+LL4l9IBPptrdE1D3L4ENp7vWxjA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4858.eurprd01.prod.exchangelabs.com (20.177.212.145) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Mon, 16 Sep
 2019 13:17:01 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 13:17:01 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LWIP PATCH 1/2] sockets.c: Set stub for .vop_getattr
 operation
Thread-Index: AQHVaUiAWH8hQfEleU2ZMjM5TK3cNacuT3oA
Date: Mon, 16 Sep 2019 13:17:01 +0000
Message-ID: <6dbdbc96-f5d5-ed01-bcc1-66e0f7b90f17@stud.acs.upb.ro>
References: <20190912090001.31331-1-costin.lupu@cs.pub.ro>
 <20190912090001.31331-2-costin.lupu@cs.pub.ro>
In-Reply-To: <20190912090001.31331-2-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM4PR08CA0058.eurprd08.prod.outlook.com
 (2603:10a6:205:2::29) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: bcfe10f8-87d8-4b96-679d-08d73aa8291c
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7025125)(7027125)(7023125)(2017052603328)(7193020);
 SRVR:PR1PR01MB4858; 
x-ms-traffictypediagnostic: PR1PR01MB4858:
x-microsoft-antispam-prvs: <PR1PR01MB4858207923BFA824105FED75A68C0@PR1PR01MB4858.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:4502;
x-forefront-prvs: 0162ACCC24
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(979002)(136003)(366004)(39830400003)(346002)(396003)(376002)(189003)(199004)(316002)(786003)(386003)(110136005)(8936002)(14454004)(305945005)(7736002)(14444005)(256004)(86362001)(476003)(31696002)(486006)(2501003)(2616005)(11346002)(446003)(5660300002)(6116002)(3846002)(2906002)(99286004)(66066001)(53546011)(102836004)(186003)(6506007)(31686004)(71200400001)(71190400001)(52116002)(25786009)(76176011)(85182001)(85202003)(6246003)(6436002)(53936002)(229853002)(6486002)(6512007)(66446008)(66556008)(66476007)(4326008)(66946007)(8676002)(81166006)(81156014)(64756008)(508600001)(26005)(142923001)(969003)(989001)(999001)(1009001)(1019001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4858;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: mzvwQGhjbq3aqBRV8A2zDoAoIbECRcd86HMFg+nkrHHDBekzULCfPgT8Se3QCl7bJkwdLIJgdIjLRQxnZ6ST8tcZC6NFmq5g41ypORmXu4N1q3H5ClV0YDhPUaoSkQPlEH3k1SNtdljxdvzMfR+PEAFIzJ2VXIP/Le4rgvhEbuigxeGUihCsouMCRRWZnwVW54msltMb/h2TMB5TtvoJxDZl6Tg5Cu+y+LACwlckZvjeyn4+8m6qV8cTp1Kz/WYY5tWDZplMJk43ygpmq018NqsFWywBEivPN+s9NzvqgX9j4T61HCNhdtBcG247xHUz6tcdb2AWynlGCVijyAKZ0+ZCzgoIGj6k84fZj1ZizQLsXPa5JMD76XOU1Vg0Vfzs9xbzJSzteBAEf7DJp7uyaEFs/kBPyrlkhlIiRMuN1fg=
x-ms-exchange-transport-forked: True
Content-ID: <80A972ACBB6528449BD4E1DDED6DF8C6@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: bcfe10f8-87d8-4b96-679d-08d73aa8291c
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2019 13:17:01.7007 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: mGUMGTWjqs3jZ0dKH1B3A4+xmQd9+3Hq06wXW68kiKFxAfaOyvvoVmNlcMLiNOT+OVc+W9ruBckq2ZuGk57Z30k2A39LT3kEY7CcN3RsF8b2E6OW20t9Z49yv9jj2Zo9
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4858
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 1/2] sockets.c: Set stub
 for .vop_getattr operation
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGFua3MhDQoNClZsYWQNCg0KUmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVp
IEJhZG9pdQk8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4NCg0KT24gMTIuMDku
MjAxOSAxMjowMCwgQ29zdGluIEx1cHUgd3JvdGU6DQo+IFdlIGN1cnJlbnRseSBqdXN0IHNldCBh
IHN0dWIgZm9yIC52b3BfZ2V0YXR0ciBvcGVyYXRpb24gaW4gb3JkZXIgdG8gYXZvaWQNCj4gY3Jh
c2hlcy4gQW5kIHNpbmNlIHdlIGFyZSBoZXJlLCB0aGlzIHBhdGNoIGFsc28gZGlzYWJsZXMgdGhl
IGNhc3QtZnVuY3Rpb24tdHlwZQ0KPiB3YXJuaW5ncyB3aGljaCBhbm5veWluZ2x5IGFwZWFyIGZv
ciBlYWNoIHNvdXJjZSBmaWxlIHRoYXQgc2V0cyBzb21lIGZpbGVzeXN0ZW0NCj4gY2FsbGJhY2tz
Lg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJv
Pg0KPiAtLS0NCj4gICBNYWtlZmlsZS51ayB8IDEgKw0KPiAgIHNvY2tldHMuYyAgIHwgMiArKw0K
PiAgIDIgZmlsZXMgY2hhbmdlZCwgMyBpbnNlcnRpb25zKCspDQo+DQo+IGRpZmYgLS1naXQgYS9N
YWtlZmlsZS51ayBiL01ha2VmaWxlLnVrDQo+IGluZGV4IDIyOTJjYjQuLjBlNzIzMzYgMTAwNjQ0
DQo+IC0tLSBhL01ha2VmaWxlLnVrDQo+ICsrKyBiL01ha2VmaWxlLnVrDQo+IEBAIC04NSw2ICs4
NSw3IEBAIExJQkxXSVBfU1JDUy0kKENPTkZJR19MV0lQX1RIUkVBRFMpICs9ICQoTElCTFdJUF9C
QVNFKS90aHJlYWRzLmN8dW5pa3JhZnQNCj4gICBMSUJMV0lQX1NSQ1MteSArPSAkKExJQkxXSVBf
QkFTRSkvaW5pdC5jfHVuaWtyYWZ0DQo+ICAgTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQX0JB
U0UpL3RpbWUuY3x1bmlrcmFmdA0KPiAgIExJQkxXSVBfU1JDUy0kKENPTkZJR19MV0lQX1NPQ0tF
VCkgKz0gJChMSUJMV0lQX0JBU0UpL3NvY2tldHMuY3x1bmlrcmFmdA0KPiArTElCTFdJUF9TT0NL
RVRTX0ZMQUdTLXkgKz0gLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUNCj4gICBMSUJMV0lQX1NSQ1Mt
JChDT05GSUdfTFdJUF9TT0NLRVQpICs9ICQoTElCTFdJUF9CQVNFKS9nZXRuYW1laW5mby5jfHVu
aWtyYWZ0DQo+ICAgTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQX0VYVFJBQ1RFRCkvY29yZS9p
bml0LmMNCj4gICBMSUJMV0lQX1NSQ1MteSArPSAkKExJQkxXSVBfRVhUUkFDVEVEKS9jb3JlL2Rl
Zi5jDQo+IGRpZmYgLS1naXQgYS9zb2NrZXRzLmMgYi9zb2NrZXRzLmMNCj4gaW5kZXggZjRmN2Q0
MC4uY2Q4NGI5NyAxMDA2NDQNCj4gLS0tIGEvc29ja2V0cy5jDQo+ICsrKyBiL3NvY2tldHMuYw0K
PiBAQCAtNjIsNiArNjIsNyBAQCBzdGF0aWMgaW50IHNvY2tfbmV0X2lvY3RsKHN0cnVjdCB2bm9k
ZSAqc192bm9kZSwNCj4gICAJCQl1bnNpZ25lZCBsb25nIHJlcXVlc3QsDQo+ICAgCQkJdm9pZCAq
YnVmKTsNCj4gICANCj4gKyNkZWZpbmUgc29ja19uZXRfZ2V0YXR0ciAgICgodm5vcF9nZXRhdHRy
X3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCj4gICAjZGVmaW5lIHNvY2tfbmV0X2luYWN0aXZlICAo
KHZub3BfaW5hY3RpdmVfdCkgdmZzY29yZV92b3BfbnVsbG9wKQ0KPiAgIA0KPiAgIHN0YXRpYyBz
dHJ1Y3Qgdm5vcHMgc29ja19uZXRfdm5vcHMgPSB7DQo+IEBAIC02OSw2ICs3MCw3IEBAIHN0YXRp
YyBzdHJ1Y3Qgdm5vcHMgc29ja19uZXRfdm5vcHMgPSB7DQo+ICAgCS52b3Bfd3JpdGUgPSBzb2Nr
X25ldF93cml0ZSwNCj4gICAJLnZvcF9yZWFkICA9IHNvY2tfbmV0X3JlYWQsDQo+ICAgCS52b3Bf
aW9jdGwgPSBzb2NrX25ldF9pb2N0bCwNCj4gKwkudm9wX2dldGF0dHIgPSBzb2NrX25ldF9nZXRh
dHRyLA0KPiAgIAkudm9wX2luYWN0aXZlID0gc29ja19uZXRfaW5hY3RpdmUNCj4gICB9Ow0KPiAg
IA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:17:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:17:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9qso-00082x-22; Mon, 16 Sep 2019 13:17:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=qrGk=XL=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i9qsn-00082p-Dy
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 13:17:33 +0000
X-Inumbo-ID: 56bbb48c-d884-11e9-b76c-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 56bbb48c-d884-11e9-b76c-bc764e2007e4;
 Mon, 16 Sep 2019 13:17:32 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id v17so9816659wml.4
 for <minios-devel@lists.xen.org>; Mon, 16 Sep 2019 06:17:31 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=Drw9vls4N5mhh6bgF/nMk/Pca5Tog8bRDIDAuWg9kUQ=;
 b=bFIAyvYlz3bq56+LrZDnJKhlqSeQq6hHp7x28ZAFfX/gOCPcIYIDESyKaSABUCAlvx
 pWaxNmPidsnq7n7+d5PYhdAzYkMbxcuLgPjFfi+XGzyYPkgBCIPs5RMEjc+ZQqrDVmql
 czsauPsIwYvn/RQZM0o4qN8J0OXbcTSIksdYYepXE+t/TRNThGviKlnXGn4IH7qfRwDX
 h0sqxTfQweUykLcW5WCCvjmZtjBnsQBPQk0MeMR7Vzy042+vUV/GS3h3RXZN95+cx+dI
 rw151u0EbFcB1rSn8hIEJYf2z9E4UsJvFAs/FChGFnz2qj/wijM+dCVsgYVASnYfzf8M
 JM8Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=Drw9vls4N5mhh6bgF/nMk/Pca5Tog8bRDIDAuWg9kUQ=;
 b=Mk4Cev9QW9WdA5JiWLIDCB/g+AgkXLlecRD8HGkZaG3/FbgwpdXzLYKQsMYxdKcst2
 NTyR2Qemu7rDQ8rbjcK3SjiIMiAkVyCtmi/KXrKufl5n/At1LRhA8yxBJZIsUxRtc92Z
 CW6Y5iqys5yk8uMFXHBY7xacMYB9DDnPe9L0+xc2aob7iCiST8oIBzwd3y5HY/w857I4
 nuXuqnk1X9KXB4dZGH8omVuSQF8Ic/2bqmRZeD9xg0YbZqnDX78gb7z0j0BOSJKp9xjq
 VueWD7+8yoiRyE/eD30rJSDflNyNeNrmgOXVGGsgR6wO0xBrq0fN/zmcsTP4r2R1egR/
 hVyg==
X-Gm-Message-State: APjAAAV5O6WAG792T5W0QR+Erikk1fo51jAl/46qzhTeCTDqko+HPfkn
 VK3uGHsTDO9ZklirvS36sI+deTPY
X-Google-Smtp-Source: APXvYqx1unwzC4y6qVSCZ1yPk/zs8encsRAbcmw0/brNgeC3phng/w+iv1Wh8GCeIQSZIeB1ktP55w==
X-Received: by 2002:a05:600c:c2:: with SMTP id u2mr2301279wmm.37.1568639850789; 
 Mon, 16 Sep 2019 06:17:30 -0700 (PDT)
Received: from [192.168.1.103] ([86.121.13.116])
 by smtp.gmail.com with ESMTPSA id s10sm29835843wmf.48.2019.09.16.06.17.29
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 16 Sep 2019 06:17:30 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
 <20190911112707.25585-2-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <87bbdc83-3c04-ddc6-6e2d-3f79ad2e1499@gmail.com>
Date: Mon, 16 Sep 2019 16:17:29 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190911112707.25585-2-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 1/5] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKVGhhbmtzIGZvciB1c2luZyB0aGUgc3RydWN0dXJlIGRvY3VtZW50ZWQgaW4g
dGhlIHdhbGt0aHJvdWdoIGZvciB0aGlzCm5ldyB2ZXJzaW9uIG9mIHRoZSBzZXJpZXMuCgpGb3Ig
dGhpcyBwYXRjaCBJJ2xsIHJlbW92ZSBzb21lIHNwYWNlcyBqdXN0IHRvIG1hdGNoIHRoZSB0ZW1w
bGF0ZSBJJ20KdXNpbmcgZm9yIHRoZSBleHRlcm5hbCBsaWJzLiBPdGhlciB0aGFuIHRoYXQsCgpS
ZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KCk9uIDkvMTEv
MTkgMjoyNyBQTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IFdlIHVzZSB0aGUgQlNELTMtQ2xhdXNl
IGxpY2Vuc2UgZm9yIHRoaXMgbGlicmFyeSBnbHVlIGNvZGUuCj4gCj4gU2lnbmVkLW9mZi1ieTog
RmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pgo+IC0tLQo+ICBDT0RJTkdfU1RZ
TEUubWQgfCAgNCArKysrCj4gIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysKPiAgQ09QWUlORy5t
ZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIENv
bmZpZy51ayAgICAgICB8ICA1ICsrKysrCj4gIE1BSU5UQUlORVJTLm1kICB8IDEwICsrKysrKysr
KysKPiAgUkVBRE1FLm1kICAgICAgIHwgIDUgKysrKysKPiAgNiBmaWxlcyBjaGFuZ2VkLCA2NyBp
bnNlcnRpb25zKCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKPiAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IENPTlRSSUJVVElORy5tZAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09Q
WUlORy5tZAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCj4gIGNyZWF0ZSBtb2RlIDEw
MDY0NCBNQUlOVEFJTkVSUy5tZAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCj4gCj4g
ZGlmZiAtLWdpdCBhL0NPRElOR19TVFlMRS5tZCBiL0NPRElOR19TVFlMRS5tZAo+IG5ldyBmaWxl
IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNTczMDA0MQo+IC0tLSAvZGV2L251bGwKPiAr
KysgYi9DT0RJTkdfU1RZTEUubWQKPiBAQCAtMCwwICsxLDQgQEAKPiArQ29kaW5nIFN0eWxlCj4g
Kz09PT09PT09PT09PQo+ICsKPiArUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09ESU5HX1NUWUxFLm1k
YCBmaWxlIGluIHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCj4gZGlmZiAtLWdpdCBhL0NP
TlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g
aW5kZXggMDAwMDAwMC4uNWY1NWVjYQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9DT05UUklCVVRJ
TkcubWQKPiBAQCAtMCwwICsxLDQgQEAKPiArQ29udHJpYnV0aW5nIHRvIFVuaWtyYWZ0Cj4gKz09
PT09PT09PT09PT09PT09PT09PT09Cj4gKwo+ICtQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05UUklC
VVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KPiBkaWZmIC0t
Z2l0IGEvQ09QWUlORy5tZCBiL0NPUFlJTkcubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGlu
ZGV4IDAwMDAwMDAuLjYxZTE0OTcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvQ09QWUlORy5tZAo+
IEBAIC0wLDAgKzEsMzkgQEAKPiArTGljZW5zZQo+ICs9PT09PT09Cj4gKwo+ICtVbmlrcmFmdCBs
aWJ1dWlkIHdyYXBwZXJzCj4gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICsKPiArVGhpcyBy
ZXBvc2l0b3J5IGNvbnRhaW5zIHdyYXBwZXIgY29kZSB0byBidWlsZCBsaWJ1dWlkIHdpdGggVW5p
a3JhZnQuCj4gK0VhY2ggQyBjb2RlIGZpbGUgaW4gdGhpcyByZXBvc2l0b3J5IHNob3VsZCBkZWNs
YXJlIHdobyBpcyB0aGUKPiArY29weXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBh
bmQgY29uZGl0aW9ucyB0aGUgY29kZSBpcwo+ICtsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ug
bm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodAo+ICtub3RpY2Ugd2lsbCBh
cHBseToKPiArCj4gKwlDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENv
cnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsKPiArCVJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsJbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCj4gKwlhcmUgbWV0Ogo+ICsKPiArCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKwkgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKwkyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAo+ICsJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQo+ICsJICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArCTMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMK
PiArCSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCj4gKwkgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsKPiArCVRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ICsJ
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQo+ICsJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArCUFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUKPiArCUxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKPiArCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKwlTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiAr
CUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCj4gKwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+ICsJQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUK
PiArCVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsKPiBkaWZmIC0tZ2l0IGEvQ29uZmln
LnVrIGIvQ29uZmlnLnVrCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4z
Zjc2MGVjCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0NvbmZpZy51awo+IEBAIC0wLDAgKzEsNSBA
QAo+ICtjb25maWcgTElCVVVJRAo+ICsJICAgYm9vbCAibGlidXVpZCAtIGxpYnJhcnkgZm9yIHVu
aXF1ZSBpZCBnZW5lcmF0aW9uIgo+ICsJICAgZGVmYXVsdCBuCj4gKyAgICAgICAgICAgZGVwZW5k
cyBvbiBIQVZFX0xJQkMKPiArICAgICAgICAgICBzZWxlY3QgVUtVTklTVEQKPiBkaWZmIC0tZ2l0
IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJTkVSUy5tZAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0
Cj4gaW5kZXggMDAwMDAwMC4uNWE0YWJjNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9NQUlOVEFJ
TkVSUy5tZAo+IEBAIC0wLDAgKzEsMTAgQEAKPiArTWFpbnRhaW5lcnMgTGlzdAo+ICs9PT09PT09
PT09PT09PT09Cj4gKwo+ICtGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlv
biwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4KPiArdGhlIG1haW4gVW5pa3Jh
ZnQgcmVwb3NpdG9yeS4KPiArCj4gKwlMSUJVVUlELVVOSUtSQUZUCj4gKwlNOglGZWxpcGUgSHVp
Y2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gKwlMOgltaW5pb3MtZGV2ZWxAbGlzdHMueGVu
Lm9yZwo+ICsJRjogKgo+IGRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKPiBuZXcg
ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmFhMDBjM2UKPiAtLS0gL2Rldi9udWxs
Cj4gKysrIGIvUkVBRE1FLm1kCj4gQEAgLTAsMCArMSw1IEBACj4gK2xpYnV1aWQgZm9yIFVuaWty
YWZ0Cj4gKz09PT09PT09PT09PT09PT09PT0KPiArCj4gK1BsZWFzZSByZWZlciB0byB0aGUgYFJF
QURNRS5tZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCj4gK3N1
YmRpcmVjdG9yeSBvZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5Lgo+IAoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:18:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:18:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9qtJ-000856-5C; Mon, 16 Sep 2019 13:18:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4dtO=XL=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1i9qtH-00084u-UT
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 13:18:03 +0000
X-Inumbo-ID: 68a867ee-d884-11e9-95e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.41]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 68a867ee-d884-11e9-95e6-12813bfff9fa;
 Mon, 16 Sep 2019 13:18:02 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MBh8Tgo6k3QSigtpKi6iw5j3HDNNA9cdUi3AAKbcbkL7AsRGXT3EZxO7xBLMR+Nt0BHE2b4NLRQ9K9Ic8oY64ELkeMiltri7KyPXzCv+b92wt2I8r6jUPDlITio3ZIJCzlr8KeCYWqUUaHU8UUfMXYEnnc10+eqFq3VQRK+81o7g6vzyFEZno5UOUDNtMzdrTFwPAg4vDqaoqD3t7gBscwmfaxdbXfjy51el2ihG6ITt7O8PpJrchbXVoX1OQPE7XSjYMkaII6L8To+8OuEdyuOVF9ywEIBShSjZi6VHyxqzuSFn3IHUVgfgGjflbJt/MUm6/2x386vqeRPhMVSlqA==
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=ArC2dE0y/PdJppn8TuFMe15PSwczLwoJQCdZTmM8Qjw=;
 b=EOzWXPUjPQlj5XPr76yAid820EDtrcuE6cCFYjP0gAYtaXHmq0PtVIJuCDiaAmlkSPErPf7YiHjRGG2JYrDpxZLPMtexKLcBX9A7QA/J7uJdSdoNMMPWDVoHVwg4zVwe2WKR+iQKY0Ncogbo3fH0KXjCUoxAaJU490UIQRUWqoTZ3VfewopJ7fZZBGQDixox7YleAnCNktBvm5tvpjIcPEAzfY47g46roh/yYgPNg7ebGc1pZi36rd4QPFl4+PUzQG0amcJp/ONDIjT6XaHpQENGqEqd/RnJ3KthK0nwiis6gZFr2zTx/LwWaolyngPBXbNwOOpo53blHY9UvsYskg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4858.eurprd01.prod.exchangelabs.com (20.177.212.145) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Mon, 16 Sep
 2019 13:18:00 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 13:18:00 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LWIP PATCH 2/2] Enable loopback interface
Thread-Index: AQHVaUiA+hI1CTzgD0aEgW2Empg/ZqcuT8CA
Date: Mon, 16 Sep 2019 13:18:00 +0000
Message-ID: <34fa5166-8ba5-6d9e-11a3-19fdc2956319@stud.acs.upb.ro>
References: <20190912090001.31331-1-costin.lupu@cs.pub.ro>
 <20190912090001.31331-3-costin.lupu@cs.pub.ro>
In-Reply-To: <20190912090001.31331-3-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM4PR08CA0060.eurprd08.prod.outlook.com
 (2603:10a6:205:2::31) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: aff03e6c-1a36-46d2-6ccc-08d73aa84c3d
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7025125)(7027125)(7023125)(2017052603328)(7193020);
 SRVR:PR1PR01MB4858; 
x-ms-traffictypediagnostic: PR1PR01MB4858:
x-microsoft-antispam-prvs: <PR1PR01MB48586A7B2A27DEDA36B55FBEA68C0@PR1PR01MB4858.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:5516;
x-forefront-prvs: 0162ACCC24
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(136003)(366004)(39830400003)(346002)(396003)(376002)(189003)(199004)(316002)(786003)(386003)(110136005)(8936002)(14454004)(305945005)(7736002)(256004)(86362001)(476003)(31696002)(486006)(2501003)(2616005)(11346002)(446003)(5660300002)(6116002)(3846002)(2906002)(99286004)(66066001)(53546011)(102836004)(186003)(6506007)(31686004)(71200400001)(71190400001)(52116002)(25786009)(76176011)(85182001)(85202003)(6246003)(6436002)(53936002)(229853002)(6486002)(6512007)(66446008)(66556008)(66476007)(4326008)(66946007)(8676002)(81166006)(81156014)(64756008)(508600001)(26005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4858;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: 0js5EY/sHcwCB+pKnzIlQ/JZLC/RKo7xzYScGG440nz4s0HMnBnCvgUP/VbNX197ykPxw4enn4L1xYwqR5BscBrlw+sPbSqdg+F3MFQ3rnHkXA49U/ORuArAcNt35M9ekyzBlRJS0iaBhtmjWXSZtTKamI5uCp7ODco0Hd4HYKht70jySjZ4RQ4XtXFgfjxc0jUfVad7g2XVqrSnZVwC2ic5lDfOeT13OYJhUOWBwxqixCBe6i6R5hHO4NFiNsonH8I6E41GFdycC3IVuIIXlnVdsaOtiiU1zsPFolz/qiUwustPAdm4izJwftrej4cqkUlEf3oLr5SWy8iHS1dXou27fX8DM+gFa33XQtmlpNpEBIOQkW6ALj9yUnvXqD0FMxJQs5owfrkBiZ2w4wvTiZPsMG6G171TilMeRUzYwWk=
x-ms-exchange-transport-forked: True
Content-ID: <20582FE6E7D23E4D8003154AD9AD3A73@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: aff03e6c-1a36-46d2-6ccc-08d73aa84c3d
X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2019 13:18:00.5814 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: RTdRhsNqTZ2GqEGc1rkbCiwrVjwXJRfYTr9AwEcGecB6nHvSqu8FSxLKPR+1U3tSSHVp/JohWsx2lCgd6FQtjUsNXNDtVlzyoAmcCoEnjWlP5zQgFZwwlWJPLcO+6CG3
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4858
Subject: Re: [Minios-devel] [UNIKRAFT/LWIP PATCH 2/2] Enable loopback
 interface
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpS
ZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1CTx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KDQpPbiAxMi4wOS4yMDE5IDEyOjAwLCBDb3N0aW4gTHVwdSB3cm90ZToNCj4g
VGhlIGxvb3BiYWNrIGludGVyZmFjZSBpcyB1c2VkIGluIG1hbnkgb2YgdGhlIFB5dGhvbiAzIHVu
aXQgdGVzdHMuDQo+DQo+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBj
cy5wdWIucm8+DQo+IC0tLQ0KPiAgIENvbmZpZy51ayAgICAgICAgICB8IDYgKysrKysrDQo+ICAg
aW5jbHVkZS9sd2lwb3B0cy5oIHwgNCArKysrDQo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxMCBpbnNl
cnRpb25zKCspDQo+DQo+IGRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsNCj4gaW5k
ZXggYTBkYjQxZC4uOTJkZjRkMyAxMDA2NDQNCj4gLS0tIGEvQ29uZmlnLnVrDQo+ICsrKyBiL0Nv
bmZpZy51aw0KPiBAQCAtODAsNiArODAsMTIgQEAgY29uZmlnIExXSVBfTkVUSUZfU1RBVFVTX1BS
SU5UDQo+ICAgCWhlbHANCj4gICAJCVByaW50IG5ldGlmIHN0YXR1cyBjaGFuZ2VzIHRvIHN0YW5k
YXJkIGNvbnNvbGUNCj4gICANCj4gK2NvbmZpZyBMV0lQX0hBVkVfTE9PUElGDQo+ICsJYm9vbCAi
TG9vcGJhY2sgaW50ZXJmYWNlIg0KPiArCWRlZmF1bHQgbg0KPiArCWhlbHANCj4gKwkJRW5hYmxl
IGxvb3BiYWNrIGludGVyZmFjZS4NCj4gKw0KPiAgIGNvbmZpZyBMV0lQX0lQVjQNCj4gICAJYm9v
bCAiSVB2NCBzdXBwb3J0Ig0KPiAgIAlkZWZhdWx0IHkNCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUv
bHdpcG9wdHMuaCBiL2luY2x1ZGUvbHdpcG9wdHMuaA0KPiBpbmRleCA1NTkyMjNkLi4xNDgwMjhk
IDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2x3aXBvcHRzLmgNCj4gKysrIGIvaW5jbHVkZS9sd2lw
b3B0cy5oDQo+IEBAIC05NSw2ICs5NSwxMCBAQCB2b2lkIHN5c19mcmVlKHZvaWQgKnB0cik7DQo+
ICAgI2RlZmluZSBMV0lQX05FVElGX0VYVF9TVEFUVVNfQ0FMTEJBQ0sgMA0KPiAgICNlbmRpZiAv
KiBDT05GSUdfTFdJUF9ORVRJRl9FWFRfU1RBVFVTX0NBTExCQUNLICovDQo+ICAgDQo+ICsjaWYg
Q09ORklHX0xXSVBfSEFWRV9MT09QSUYNCj4gKyNkZWZpbmUgTFdJUF9IQVZFX0xPT1BJRiAxDQo+
ICsjZW5kaWYNCj4gKw0KPiAgIC8qKg0KPiAgICAqIEFSUCBvcHRpb25zDQo+ICAgICovDQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:21:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:21:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9qwF-0000RF-F8; Mon, 16 Sep 2019 13:21:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=qrGk=XL=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i9qwE-0000R8-QL
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 13:21:06 +0000
X-Inumbo-ID: d6386ebc-d884-11e9-b299-bc764e2007e4
Received: from mail-wm1-x343.google.com (unknown [2a00:1450:4864:20::343])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id d6386ebc-d884-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 13:21:05 +0000 (UTC)
Received: by mail-wm1-x343.google.com with SMTP id r195so10353744wme.2
 for <minios-devel@lists.xen.org>; Mon, 16 Sep 2019 06:21:05 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=klAl9KSVChMWVZZx2KFIyHVb4cbHFkdK8gkLOvhMGG0=;
 b=A01PV2o95+7d4P0p1GTicgqCj2TSjuPTFwkl5sdZopq4py56yZl0kYoYBDGI6Xo+jX
 Z4frTpF2Dwod7HomeiiVyGMJca8RL7mSzyjOskI46DnFWiC7ptkVSqwaJNmmY38zm4ln
 qUyElivc0wztEbVMVndJvuY2EYe4TP4XIvXPvsZY6VMmgL4DzYDOig/zlzbmg1iAVTVj
 uWzgX67sSFrD0+03bC0X9PG3e6uqbHeuwPVilQIb9Fs2AjuGcozBeDhdcJIHQ/P76q1V
 diE4V6JQpc+/xIwWTsAZNI1IDf3flmZHV1cntNduZCFDMYm7iTq9/Y8uO9OuyYRHW3Va
 FGhw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=klAl9KSVChMWVZZx2KFIyHVb4cbHFkdK8gkLOvhMGG0=;
 b=agT6e9XpRINi7sc6OWfuu/OgeWjDeIJ4HJQvrUhaTsstXzCM5+h2vpNpty5comWwCb
 dSx+MNfMf4A6rviAJQdvQZjqbnk6g+0a5ab6alGJcNCVg+XdWkp3pZpXzVflezrio7D9
 A0glnZa6B5lLlGrotY5pfb8g28pyQ2ZB1vGk43WNM3RAhnxxXKpqT6qPPfW/zKUaEyNK
 k6+D6fyDrqpd5+qPpu/+A1kh547KsgAVKN6g+YzHJFmZ2BlbAuaIubxtcQymao3AqBLq
 XoeEL+8Bjcq/R58eeh+Qs95SlMRLPpulzH1yWlwklOaLUIted+kUkXsvmuUZ8/gbYwBg
 fmLQ==
X-Gm-Message-State: APjAAAXPwasCHtKJvm1ctJuqHN9JBzSavY2IbfbfgGcMs3Yn8hwJDDb3
 l+7TY/Ul1UtvYNonR+xI8WSFxCkx
X-Google-Smtp-Source: APXvYqzwm2NTTV4AqEczULPH9kaQIeQqdYAX2mHJV3+ALVqp0Jyg5zUxov6uhiylZoOs9UYisUGv3Q==
X-Received: by 2002:a7b:c013:: with SMTP id c19mr13638756wmb.118.1568640064715; 
 Mon, 16 Sep 2019 06:21:04 -0700 (PDT)
Received: from [192.168.1.103] ([86.121.13.116])
 by smtp.gmail.com with ESMTPSA id d9sm63301298wrc.44.2019.09.16.06.21.03
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 16 Sep 2019 06:21:04 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
 <20190911112707.25585-3-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <201a3204-a140-02fe-bc78-1ef1d960e51c@gmail.com>
Date: Mon, 16 Sep 2019 16:21:03 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190911112707.25585-3-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 2/5] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKRm9yIHRoaXMgcGF0Y2ggSSdsbCBhZGQgdGhlIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyIGFuZCBrZWVwIG9ubHkgdGhlCm5lY2Vzc2FyeSBzdXBwcmVzc2lvbiBmbGFncy4KClJl
dmlld2VkLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgoKT24gOS8xMS8x
OSAyOjI3IFBNLCBGZWxpcGUgSHVpY2kgd3JvdGU6Cj4gV2UgdXNlIHByZXBhcmUgc3RlcHMgdG8g
Y3JlYXRlIHN5bSBsaW5rcyB0byBwdWJsaWMgYW5kIHByaXZhdGUKPiBoZWFkZXJzLgo+IAo+IFNp
Z25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiAtLS0K
PiAgTWFrZWZpbGUudWsgfCAxMjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAxMjkgaW5zZXJ0aW9u
cygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKPiAKPiBkaWZmIC0tZ2l0IGEv
TWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg
MDAwMDAwMC4uMGJmNTNmOAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9NYWtlZmlsZS51awo+IEBA
IC0wLDAgKzEsMTI5IEBACj4gKyMgIGxpYnV1aWQgTWFrZWZpbGUudWMKPiArIwo+ICsjICBBdXRo
b3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gKyMKPiArIwo+ICsj
ICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgo+ICsjCj4gKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsjICBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
PiArIyAgYXJlIG1ldDoKPiArIwo+ICsjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyMgIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Cj4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiArIyAg
My4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVz
IG9mIGl0cwo+ICsjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsjICAgICB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsjCj4gKyMgIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIgo+ICsjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKyMgIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Cj4gKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiArIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsjICBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
Rgo+ICsjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiArIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArIyAgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKPiArIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKPiArIyAgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCj4gKyMKPiArIyAgVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1Ig
TU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArIwo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
PiArIyBMaWJyYXJ5IHJlZ2lzdHJhdGlvbgo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsk
KGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnV1aWQsJChDT05GSUdfTElCVVVJRCkpKQo+ICsKPiAr
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBTb3VyY2VzCj4gKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCj4gK0xJQlVVSURfVkVSU0lPTj0xLjAuMwo+ICtMSUJVVUlEX1VSTD1odHRwczovL3Nv
dXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ1dWlkL2ZpbGVzL2xpYnV1aWQtJChMSUJVVUlEX1ZF
UlNJT04pLnRhci5nei9kb3dubG9hZAo+ICtMSUJVVUlEX1BBVENIRElSPSQoTElCVVVJRF9CQVNF
KS9wYXRjaGVzCj4gKyQoZXZhbCAkKGNhbGwgZmV0Y2hhcyxsaWJ1dWlkLCQoTElCVVVJRF9VUkwp
LCQoTElCVVVJRF9WRVJTSU9OKS50Z3opKQo+ICskKGV2YWwgJChjYWxsIHBhdGNoLGxpYnV1aWQs
JChMSUJVVUlEX1BBVENIRElSKSxsaWJ1dWlkLSQoTElCVVVJRF9WRVJTSU9OKSkpCj4gKwo+ICsj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIEhlbHBlcnMKPiArIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKPiArTElCVVVJRF9TVUJESVI9bGlidXVpZC0kKExJQlVVSURfVkVSU0lPTikKPiArTElC
VVVJRF9TUkM9JChMSUJVVUlEX09SSUdJTikvJChMSUJVVUlEX1NVQkRJUikKPiArCj4gKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCj4gKyMgTGlicmFyeSBpbmNsdWRlcwo+ICsjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwo+ICsjIFB1dCBwdWJsaWMgaGVhZGVycyAodXVpZC5oKSBpbiBhIHB1YmxpYyBm
b2xkZXIgYW5kIGV4cG9ydCB0aGVtIGdsb2JhbGx5LiBUaGUKPiArIyBwcmVwYXJlIHN0ZXAgYmVs
b3cgdGFrZXMgY2FyZSBvZiBwb3B1bGF0aW5nIHRoZSBmb2xkZXIuCj4gKyQoY2FsbCBta19zdWJf
YnVpbGRfZGlyLGxpYnV1aWQvaW5jbHVkZS9wdWJsaWMpCj4gK0NJTkNMVURFUy0kKENPTkZJR19M
SUJVVUlEKSArPSAtSSQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9wdWJsaWMKPiArCj4gKyMgUHV0
IHByaXZhdGUgaGVhZGVycyAodGhlIGdsdWUncyBjb25maWcuaCwgYW5kIHV1aWQncyBub24tdXVp
ZC5oIGhlYWRlcnMpCj4gKyMgaW4gYSBwcml2YXRlIGZvbGRlciBhbmQgZXhwb3J0IHRoYXQgb25s
eSBsb2NhbGx5IHRvIGxpYnV1aWQuIFRoZSBwcmVwYXJlCj4gKyMgc3RlcCBiZWxvdyB0YWtlcyBj
YXJlIG9mIHBvcHVsYXRpbmcgdGhlIGZvbGRlcgo+ICskKGNhbGwgbWtfc3ViX2J1aWxkX2Rpcixs
aWJ1dWlkL2luY2x1ZGUvcHJpdmF0ZSkKPiArTElCVVVJRF9DSU5DTFVERVMteSArPSAtSSQoTElC
VVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iwo+ICsjIEdsb2JhbCBmbGFncwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICtMSUJVVUlE
X0NGTEFHUy15ICs9IC1ESEFWRV9DT05GSUdfSAo+ICsKPiArIyBTdXBwcmVzcyBzb21lIHdhcm5p
bmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nlc3MgbG9vayBuZWF0ZXIKPiArTElCVVVJRF9TVVBQ
UkVTU19GTEFHUyArPSAtV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby11bnVzZWQtdmFyaWFibGUg
ICAgICAgICAgICBcCj4gKy1Xbm8tbm9ubnVsbCAtV25vLXVudXNlZC1idXQtc2V0LXZhcmlhYmxl
IC1Xbm8tdW51c2VkLWxhYmVsIC1Xbm8tY2hhci1zdWJzY3JpcHRzXAo+ICstV25vLXVudXNlZC1m
dW5jdGlvbiAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIC1Xbm8tdW5pbml0aWFsaXpl
ZCAgICAgICAgIFwKPiArLVduby1tYXliZS11bmluaXRpYWxpemVkIC1Xbm8tcG9pbnRlci1zaWdu
IC1Xbm8tdW51c2VkLXZhbHVlICAgICAgICAgICAgICAgICAgICBcCj4gKy1Xbm8tdW51c2VkLW1h
Y3JvcyAtV25vLXBhcmVudGhlc2VzIC1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24g
ICAgICAgICAgXAo+ICstV25vLW1pc3NpbmctYnJhY2VzIC1Xbm8tZW5kaWYtbGFiZWxzIC1Xbm8t
dW51c2VkLWJ1dC1zZXQtdmFyaWFibGUgICAgICAgICAgICAgIFwKPiArLVduby1pbXBsaWNpdC1m
dW5jdGlvbi1kZWNsYXJhdGlvbgo+ICsKPiArTElCVVVJRF9DRkxBR1MteSAgICs9ICQoTElCVVVJ
RF9TVVBQUkVTU19GTEFHUykKPiArTElCVVVJRF9DWFhGTEFHUy15ICs9ICQoTElCVVVJRF9TVVBQ
UkVTU19GTEFHUykKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKyMgU291cmNlcwo+
ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURf
U1JDKS9jbGVhci5jCj4gK0xJQlVVSURfU1JDUy15ICs9ICQoTElCVVVJRF9TUkMpL2NvcHkuYwo+
ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS9pc251bGwuYwo+ICtMSUJVVUlEX1NS
Q1MteSArPSAkKExJQlVVSURfU1JDKS9wYXJzZS5jCj4gK0xJQlVVSURfU1JDUy15ICs9ICQoTElC
VVVJRF9TUkMpL3VucGFyc2UuYwo+ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS9j
b21wYXJlLmMKPiArTElCVVVJRF9TUkNTLXkgKz0gJChMSUJVVUlEX1NSQykvZ2VuX3V1aWQuYwo+
ICtMSUJVVUlEX1NSQ1MteSArPSAkKExJQlVVSURfU1JDKS9wYWNrLmMKPiArTElCVVVJRF9TUkNT
LXkgKz0gJChMSUJVVUlEX1NSQykvcmFuZHV0aWxzLmMKPiArTElCVVVJRF9TUkNTLXkgKz0gJChM
SUJVVUlEX1NSQykvdW5wYWNrLmMKPiArTElCVVVJRF9TUkNTLXkgKz0gJChMSUJVVUlEX1NSQykv
dXVpZF90aW1lLmMKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKyMgTGliLXNwZWNp
ZmljIFRhcmdldHMKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArJChMSUJVVUlEX0JVSUxE
KS9pbmNsdWRlL3B1YmxpYy8lLmg6ICQoTElCVVVJRF9TUkMpLyUuaAo+ICsJJChjYWxsIGJ1aWxk
X2NtZCxMTixsaWJ1dWlkLCRALFwKPiArCWxuIC1zZiAkPCAkQCkKPiArCj4gKyQoTElCVVVJRF9C
VUlMRCkvaW5jbHVkZS9wcml2YXRlLyUuaDogJChMSUJVVUlEX1NSQykvJS5oCj4gKwkkKGNhbGwg
YnVpbGRfY21kLExOLGxpYnV1aWQsJEAsXAo+ICsJbG4gLXNmICQ8ICRAKQo+ICsKPiArJChMSUJV
VUlEX0JVSUxEKS9pbmNsdWRlL3ByaXZhdGUvY29uZmlnLmg6ICQoTElCVVVJRF9CQVNFKS9pbmNs
dWRlL2NvbmZpZy5oCj4gKwkkKGNhbGwgYnVpbGRfY21kLExOLGxpYnV1aWQsJEAsXAo+ICsJbG4g
LXNmICQ8ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlL2NvbmZpZy5oKQo+ICsKPiAr
JChMSUJVVUlEX1NSQykvJS5oOiAkKExJQlVVSURfQlVJTEQpLy5vcmlnaW4KPiArCUA6IGVtcHR5
IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8gYXJjaGl2ZSBleHRyYWN0aW9uCj4gKwo+
ICsjIHB1YmxpYyBoZWFkZXJzCj4gK1VLX1BSRVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNs
dWRlL3B1YmxpYy91dWlkLmgKPiArCj4gKyMgcHJpdmF0ZSBoZWFkZXJzCj4gK1VLX1BSRVBBUkUg
Kz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3ByaXZhdGUvYWxsLWlvLmgKPiArVUtfUFJFUEFS
RSArPSAkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHJpdmF0ZS9jLmgKPiArVUtfUFJFUEFSRSAr
PSAkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHJpdmF0ZS9yYW5kdXRpbHMuaAo+ICtVS19QUkVQ
QVJFICs9ICQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9wcml2YXRlL3V1aWRkLmgKPiArVUtfUFJF
UEFSRSArPSAkKExJQlVVSURfQlVJTEQpL2luY2x1ZGUvcHJpdmF0ZS91dWlkUC5oCj4gK1VLX1BS
RVBBUkUgKz0gJChMSUJVVUlEX0JVSUxEKS9pbmNsdWRlL3ByaXZhdGUvY29uZmlnLmgKPiAKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:22:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:22:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9qxh-0000X9-KT; Mon, 16 Sep 2019 13:22:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=qrGk=XL=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i9qxg-0000Wt-Fq
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 13:22:36 +0000
X-Inumbo-ID: 0bbc814a-d885-11e9-b299-bc764e2007e4
Received: from mail-wr1-x443.google.com (unknown [2a00:1450:4864:20::443])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0bbc814a-d885-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 13:22:35 +0000 (UTC)
Received: by mail-wr1-x443.google.com with SMTP id b9so5285483wrs.0
 for <minios-devel@lists.xen.org>; Mon, 16 Sep 2019 06:22:35 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=XkAVnAqEFgkPyXZ1RwzEyJCu/ttQoJaj64LmtSQNQ5Y=;
 b=XFL+PwL2LADtwwmj5RHxvcIzI7nIoP4xXzORZBFAw5vruCNgIQs/wdHsgGQWQeAzTl
 BTJpKwsHLrwK7MuHmm4MvEHxGgq2pDsTfjYNamLTXcVK4vvL67h5foJ10qDjqZq8diix
 ub2umX/TlxXyIkX9wi5Y1AYYmAMxkU03inoDQeX0vB5MF9+I07dPox3Wr0zGWThSdI6M
 GDCO9poRgCJkNTzRP6cvaXnyayAPN7Fkl9b77+t+qPwoyIy5g/24MhDBEGFOhK+0n4NS
 51CdrGUBZ9q0lf5/T0cUzyb77sZufXr/OGSWM2EAecPepfWjp1GnAAIZDCffFdVlsnKa
 ywvA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=XkAVnAqEFgkPyXZ1RwzEyJCu/ttQoJaj64LmtSQNQ5Y=;
 b=sTQrxbTB5SEldbxoxlFGuHmyo0r+PUg0ZYEgj2GwrppFQv18M7tSsoO7A/9o+Yq/38
 rejwOx7nI0iHUDlW9WwMMZ/NTlpMaHHOgpwRf0iAVW4/JX11UskDmE602TbAuS80dMEY
 DVWg4ZnwG4J2Lm3cXUIUlpBXJl8AFMXkULaaTUNDt9UfKZ1kSRXIYYQQevWLnJP2CRP9
 V3D9wB7Eod+QdSAN9732vsbD9pdMmvVRy2ntZXM8wmiqN9LeNC6EMcheOQnsyKKeh9Sb
 sLKH3C6+FdF7MgdcecIq3Bong/01UdEQDeSay1X2cUV8EQGSWZii2xAPW4ZldJbSgs8k
 LftQ==
X-Gm-Message-State: APjAAAV1K/MS8mHZWW3qnDNFmk7YTPtr0YWQWsq66CSsO0qDoAwpwBdp
 NCGr73U8vcnQhIqzaPUT5HchF13q
X-Google-Smtp-Source: APXvYqwT+sLk80kwuHAL0KXAZZ4QlQKZyW7DOpxv5NBEKb9I3j1FQkHpGXi9juC7gNifTrP1j75pSg==
X-Received: by 2002:adf:fd4d:: with SMTP id h13mr10183761wrs.66.1568640154536; 
 Mon, 16 Sep 2019 06:22:34 -0700 (PDT)
Received: from [192.168.1.103] ([86.121.13.116])
 by smtp.gmail.com with ESMTPSA id b194sm21987936wmg.46.2019.09.16.06.22.33
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 16 Sep 2019 06:22:34 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
 <20190911112707.25585-4-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <05a052a6-076f-32f4-3ea6-187a93d2289e@gmail.com>
Date: Mon, 16 Sep 2019 16:22:33 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190911112707.25585-4-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 3/5] Add include
 directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKSW4gdGhpcyBwYXRjaCBJJ2xsIHJlcGxhY2UgJyNpZmRlZiAkKEhBVkVfTldf
U1RBQ0spJyB3aXRoICcjaWYKQ09ORklHX0hBVkVfTldfU1RBQ0snLgoKUmV2aWV3ZWQtYnk6IENv
c3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5LzExLzE5IDI6MjcgUE0sIEZl
bGlwZSBIdWljaSB3cm90ZToKPiBBZGQgVW5pa3JhZnQtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBo
ZWFkZXIKPiAKPiBTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNs
YWIuZXU+Cj4gLS0tCj4gIGluY2x1ZGUvY29uZmlnLmggfCA3NyArKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAxIGZpbGUgY2hhbmdlZCwg
NzcgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9jb25maWcuaAo+
IAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy5oIGIvaW5jbHVkZS9jb25maWcuaAo+IG5l
dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMTk4NDBhZAo+IC0tLSAvZGV2L251
bGwKPiArKysgYi9pbmNsdWRlL2NvbmZpZy5oCj4gQEAgLTAsMCArMSw3NyBAQAo+ICsvKiBjb25m
aWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGxpYnV1aWQncyBjb25maWd1cmUu
ICAqLwo+ICsvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBh
dXRvaGVhZGVyLiAgKi8KPiArCj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNu
dGwuaD4gaGVhZGVyIGZpbGUuICovCj4gKyNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKPiArCj4gKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRydW5jYXRlJyBmdW5jdGlvbi4gKi8KPiAr
I2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCj4gKwo+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCj4gKyNkZWZpbmUgSEFWRV9HRVRUSU1F
T0ZEQVkgMQo+ICsKPiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5o
PiBoZWFkZXIgZmlsZS4gKi8KPiArI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQo+ICsKPiArLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCj4g
KyNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCj4gKwo+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KPiArI2RlZmluZSBIQVZFX01FTU9SWV9I
IDEKPiArCj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtc2V0JyBmdW5jdGlv
bi4gKi8KPiArI2RlZmluZSBIQVZFX01FTVNFVCAxCj4gKwo+ICsvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW4uaD4gaGVhZGVyIGZpbGUuICovCj4gKyNpZmRlZiAkKEhB
VkVfTldfU1RBQ0spCj4gKyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lOX0ggMQo+ICsjZW5kaWYKPiAr
Cj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8K
PiArI2lmZGVmICQoSEFWRV9OV19TVEFDSykKPiArI2RlZmluZSBIQVZFX1NPQ0tFVCAxCj4gKyNl
bmRpZgo+ICsKPiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzcmFuZG9tJyBmdW5j
dGlvbi4gKi8KPiArI2RlZmluZSBIQVZFX1NSQU5ET00gMQo+ICsKPiArLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCj4gKyNkZWZpbmUgSEFW
RV9TVERJTlRfSCAxCj4gKwo+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxp
Yi5oPiBoZWFkZXIgZmlsZS4gKi8KPiArI2RlZmluZSBIQVZFX1NURExJQl9IIDEKPiArCj4gKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8K
PiArI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxCj4gKwo+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KPiArI2RlZmluZSBIQVZFX1NUUklO
R19IIDEKPiArCj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bCcgZnVu
Y3Rpb24uICovCj4gKyNkZWZpbmUgSEFWRV9TVFJUT1VMIDEKPiArCj4gKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4gaGVhZGVyIGZpbGUuICovCj4gKyNkZWZpbmUg
SEFWRV9TWVNfRklMRV9IIDEKPiArCj4gKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLwo+ICsjZGVmaW5lIEhBVkVfU1lTX0lPQ1RMX0gg
MQo+ICsKPiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhl
YWRlciBmaWxlLiAqLwo+ICsjaWZkZWYgJChIQVZFX05XX1NUQUNLKQo+ICsjZGVmaW5lIEhBVkVf
U1lTX1NPQ0tFVF9IIDEKPiArI2VuZGlmCj4gKwo+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLwo+ICsjZGVmaW5lIEhBVkVfU1lTX1NU
QVRfSCAxCj4gKwo+ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+
IGhlYWRlciBmaWxlLiAqLwo+ICsjZGVmaW5lIEhBVkVfU1lTX1RJTUVfSCAxCj4gKwo+ICsvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8K
PiArI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKPiArCj4gKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLwo+ICsjZGVmaW5lIEhBVkVfVU5J
U1REX0ggMQo+ICsKPiArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1c2xlZXAnIGZ1
bmN0aW9uLiAqLwo+ICsjZGVmaW5lIEhBVkVfVVNMRUVQIDEKPiAKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:23:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:23:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9qyk-0000bn-Ok; Mon, 16 Sep 2019 13:23:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=qrGk=XL=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i9qyj-0000bR-80
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 13:23:41 +0000
X-Inumbo-ID: 32884fe8-d885-11e9-a337-bc764e2007e4
Received: from mail-wr1-x442.google.com (unknown [2a00:1450:4864:20::442])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 32884fe8-d885-11e9-a337-bc764e2007e4;
 Mon, 16 Sep 2019 13:23:40 +0000 (UTC)
Received: by mail-wr1-x442.google.com with SMTP id q14so38840542wrm.9
 for <minios-devel@lists.xen.org>; Mon, 16 Sep 2019 06:23:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=PA+k18A9vcAk+9dgysHv5GXyTnq+uCce7CHY7f9FzcU=;
 b=OCmpwRcu3FaE7MsDKlqQD9i/A1hCJF2p7zP89cwMKGgusz/1SfJS6CRBioEurqOIzI
 NIAIO82fx9Pyr27kjjV/fvqmYkocyueKTgJPNtVhn6l9YLJearlfkLf1DBn2RZ0bJzNh
 B9yL5Puj7ZZ48cXiyJU5TjBAiYj9bbO2IJ9buRiuvtqR5QY24zKTGsbjiLBkZxxoVj/+
 KpHTA33Zx1ULg6MnVXWi7YpfF9kD08vkprfnomG21308fGzrVH7XT8k0tq2X85N5Syhe
 7aO+YqKUFJWbXG+POk8+1fIAXH1ErDxDLQxQMxX200SvNOusWIwNihTPKgplk68xiVzd
 juuw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=PA+k18A9vcAk+9dgysHv5GXyTnq+uCce7CHY7f9FzcU=;
 b=FPiwr3fvrJUNoIfdIH5U9ZgmEo1Cwick8/xubkTJX8QGblbiGm4L8WzwUKBpTy5yDs
 J/MGrlZxEtyosM42w2SFzNzyZzPSh43eMChsJNZsZMRRKm+vhkVUpqUyzoJfDaO8Di1i
 gbyBgRq1UXlaPM0GKoOnM4b3tfJmrmqmoGBsS+1rss2qwLc6FfY+r9/R/ExaIR8nZXk7
 IbUkfDTFPWmiQ66WZNtIuGebHeKhqQ/wXrbTO2KLlTcPpsZNKpaxhnW4fO+52wmxY/ID
 OxF9tSmaAC/YwRketMHZ51vQoBnXtQ+iokJ/avuDU+45KC0SrTHqNf0bW8fVzO9Ipkyo
 YyTw==
X-Gm-Message-State: APjAAAW+8B36bfMfOuJwfDgI4dEUje2YZqHuF0h7zCxHx1iBRBsfU4i7
 7CwcESvsmDYQ0PUMJ3oTm8KnUtLR
X-Google-Smtp-Source: APXvYqx5o0PwRSxzC2QjCNUFHmXAriF8QtFf6Q+OTJ4shXilR/FVs4Pa9SukQfqQxgpVkT1MIO6e1g==
X-Received: by 2002:adf:a50d:: with SMTP id i13mr5693140wrb.152.1568640219661; 
 Mon, 16 Sep 2019 06:23:39 -0700 (PDT)
Received: from [192.168.1.103] ([86.121.13.116])
 by smtp.gmail.com with ESMTPSA id s12sm54721623wra.82.2019.09.16.06.23.38
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 16 Sep 2019 06:23:39 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
 <20190911112707.25585-5-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <2de6247f-9184-c25c-f822-d772eee3f84a@gmail.com>
Date: Mon, 16 Sep 2019 16:23:38 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190911112707.25585-5-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 4/5] Add patches
 directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKVGhlIHBhdGNoIGxvb2tzIGdvb2QsIGJ1dCBJJ2xsIGNoYW5nZSB0aGUgc3Vi
amVjdCB0bzoKJ3BhdGNoZXM6IHJhbmR1dGlscy5jIC0gR3VhcmQgaW5jbHVzaW9uIG9mIHN5cy9z
eXNjYWxsLmgnCgpSZXZpZXdlZC1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5y
bz4KCk9uIDkvMTEvMTkgMjoyNyBQTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IFBhdGNoIHRvIGNv
bXBpbGUgZ3VhcmQgaW5jbHVzaW9uIG9mIHN5c2NhbGwuaAo+IAo+IFNpZ25lZC1vZmYtYnk6IEZl
bGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiAtLS0KPiAgcGF0Y2hlcy8wMDAx
LWFkZC1zeXNjYWxsLWgtY29tcGlsZS1ndWFyZC5wYXRjaCB8IDEyICsrKysrKysrKysrKwo+ICAx
IGZpbGUgY2hhbmdlZCwgMTIgaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0
Y2hlcy8wMDAxLWFkZC1zeXNjYWxsLWgtY29tcGlsZS1ndWFyZC5wYXRjaAo+IAo+IGRpZmYgLS1n
aXQgYS9wYXRjaGVzLzAwMDEtYWRkLXN5c2NhbGwtaC1jb21waWxlLWd1YXJkLnBhdGNoIGIvcGF0
Y2hlcy8wMDAxLWFkZC1zeXNjYWxsLWgtY29tcGlsZS1ndWFyZC5wYXRjaAo+IG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYWRlYTY2YQo+IC0tLSAvZGV2L251bGwKPiArKysg
Yi9wYXRjaGVzLzAwMDEtYWRkLXN5c2NhbGwtaC1jb21waWxlLWd1YXJkLnBhdGNoCj4gQEAgLTAs
MCArMSwxMiBAQAo+ICstLS0gYS9yYW5kdXRpbHMuYwkyMDE5LTA0LTAzIDE0OjQ2OjE0LjgyNzY4
MjQ4NSArMDIwMAo+ICsrKysgYi9yYW5kdXRpbHMuYwkyMDE5LTA0LTAzIDE0OjQ2OjQ4LjM3NTI4
Njk1MCArMDIwMAo+ICtAQCAtMTMsNyArMTMsOSBAQAo+ICsgI2luY2x1ZGUgPHN0cmluZy5oPgo+
ICsgI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4gKyAKPiArKyNpZmRlZiBET19KUkFORF9NSVgKPiAr
ICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgo+ICsrI2VuZGlmCj4gKyAKPiArICNpbmNsdWRlICJy
YW5kdXRpbHMuaCIKPiArIAo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:24:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:24:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9qzJ-0000eF-RY; Mon, 16 Sep 2019 13:24:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=qrGk=XL=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1i9qzI-0000e7-Ef
 for minios-devel@lists.xen.org; Mon, 16 Sep 2019 13:24:16 +0000
X-Inumbo-ID: 478a1a0c-d885-11e9-978d-bc764e2007e4
Received: from mail-wm1-x342.google.com (unknown [2a00:1450:4864:20::342])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 478a1a0c-d885-11e9-978d-bc764e2007e4;
 Mon, 16 Sep 2019 13:24:15 +0000 (UTC)
Received: by mail-wm1-x342.google.com with SMTP id r195so10368433wme.2
 for <minios-devel@lists.xen.org>; Mon, 16 Sep 2019 06:24:15 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=9uSxu2LUjTudxPiljdVDTUaQNy/rwd2cDu/9aI8hBR8=;
 b=JyxAIeVR5a+19NPl0rYll5ATv6XfAaK8h7QnShw+qBy0RY+EACnNkiXzLm1WTDZ4At
 bN/vCajVBOty6GC7/bqMNfRNbjd31iQqTi2UfxGmSt0ySVrvjYIwkjImjWwoKChF6XAx
 /Eclo7etABKkyUhK1zqGdUQp1Ck91uugztNxrTp6Jz4vEEwavHK//6GWx26rYgLNCLXg
 yznLQP/TlaPdx5t1QXNV2qy+y5TuhjLqSdp3nrOtcz2GDzDtthyTGQKLDd02pF/ZlmWW
 ewV97CUVtj5bu+msjvyF6wU9gt/aLAolWBaMyAJdiRexJTgTPYkaazaj/vGD/nUbCY9H
 P9nw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=9uSxu2LUjTudxPiljdVDTUaQNy/rwd2cDu/9aI8hBR8=;
 b=AYX4wf7IqfK4EB0+tZPcSos0U1qEEvwRKB2OjcgRndbp+9JQUSK1uCb+REYyCobDhn
 AFxKuFQajovF3wTPTSqMMjK57iePPVizWd20FcTPKRzSnLzaRh7StYVU4F/Of50cC7S2
 TAiE1wDeIiZ+5Ni3isBnCt+siXEVE0vzLK6nYkynUB//TOsEMy7iIZT48aFt+10R+s7X
 oCKOsjGRQ00VYZzRFaXcvY+7K4+A2wkSAicbbLUUleBdOGpBRJByI/9Jpr8n/QLsMjv0
 skAME9ibnrDIcibKY6ZyPTJPz/jmJd5L196ostBRFYUTkYycXG/AcydOymp6bcrUDmep
 XgHw==
X-Gm-Message-State: APjAAAXCy7VviwfwhwMFTsgjuTh8TmfVAScgchLOMoWW+uDTQsWRfbnt
 8PJtqLTKYo6XL+iX/BhrQ0lDb0eF
X-Google-Smtp-Source: APXvYqy7JUGKTCCRRHyqousTWPMuz5odjiMcovs6fGWPGRTv+MRK1SxXvTctBCskqt/wS4C8hxCVug==
X-Received: by 2002:a7b:c5ce:: with SMTP id n14mr13662217wmk.17.1568640254920; 
 Mon, 16 Sep 2019 06:24:14 -0700 (PDT)
Received: from [192.168.1.103] ([86.121.13.116])
 by smtp.gmail.com with ESMTPSA id g13sm10665464wrm.42.2019.09.16.06.24.14
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Mon, 16 Sep 2019 06:24:14 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190911112707.25585-1-felipe.huici@neclab.eu>
 <20190911112707.25585-6-felipe.huici@neclab.eu>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <821162ee-87b2-b8d5-b612-46037483b5d5@gmail.com>
Date: Mon, 16 Sep 2019 16:24:13 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190911112707.25585-6-felipe.huici@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT/LIBUUID PATCH v4 5/5] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLAoKVGhpcyBwYXRjaCBsb29rcyBnb29kIQoKUmV2aWV3ZWQtYnk6IENvc3RpbiBM
dXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CgpPbiA5LzExLzE5IDI6MjcgUE0sIEZlbGlwZSBI
dWljaSB3cm90ZToKPiBBcyBkZWZpbmVkIGluIHV1aWQuaAo+IAo+IFNpZ25lZC1vZmYtYnk6IEZl
bGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiAtLS0KPiAgZXhwb3J0c3ltcy51
ayB8IDE3ICsrKysrKysrKysrKysrKysrCj4gIDEgZmlsZSBjaGFuZ2VkLCAxNyBpbnNlcnRpb25z
KCspCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCj4gCj4gZGlmZiAtLWdpdCBh
L2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp
bmRleCAwMDAwMDAwLi4wYzYyMjcxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2V4cG9ydHN5bXMu
dWsKPiBAQCAtMCwwICsxLDE3IEBACj4gK3V1aWRfY2xlYXIKPiArdXVpZF9jb21wYXJlCj4gK3V1
aWRfY29weQo+ICt1dWlkX2dlbmVyYXRlCj4gK3V1aWRfZ2VuZXJhdGVfcmFuZG9tCj4gK3V1aWRf
Z2VuZXJhdGVfdGltZQo+ICt1dWlkX2dlbmVyYXRlX3RpbWVfc2FmZQo+ICt1dWlkX2lzX251bGwK
PiArdXVpZF9wYWNrCj4gK3V1aWRfcGFyc2UKPiArdXVpZF90aW1lCj4gK3V1aWRfdHlwZQo+ICt1
dWlkX3VucGFjawo+ICt1dWlkX3VucGFyc2UKPiArdXVpZF91bnBhcnNlX2xvd2VyCj4gK3V1aWRf
dW5wYXJzZV91cHBlcgo+ICt1dWlkX3ZhcmlhbnQKPiAKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:25:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:25:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9r0B-0000hF-VZ; Mon, 16 Sep 2019 13:25:11 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=osYo=XL=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1i9r0A-0000hA-VU
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 13:25:11 +0000
X-Inumbo-ID: 66ffb0b8-d885-11e9-95e6-12813bfff9fa
Received: from EUR04-DB3-obe.outbound.protection.outlook.com (unknown
 [40.107.6.84]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 66ffb0b8-d885-11e9-95e6-12813bfff9fa;
 Mon, 16 Sep 2019 13:25:08 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=u3115zn2Cj9UW1EBzKfsQUJAjlTrBrAau50ttMooeZY=;
 b=QmvALs89fRxGkXxa/41TG0KzVTIV1OMaW1SwbLQtXbry21kcWHdMRnMKscDRJkPg0bpApXu5BTSZBWdU4JAd1SgIJESd6u6Ov+4gT4hOVZYHcCRIFVDgdquF0vTod2rhP9BE+2PPa0x2akIFrTaqjL5d3Pn0BTlYArkQbep9Ayo=
Received: from VI1PR08CA0161.eurprd08.prod.outlook.com (2603:10a6:800:d1::15)
 by DBBPR08MB4475.eurprd08.prod.outlook.com (2603:10a6:10:cf::10) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Mon, 16 Sep
 2019 13:25:05 +0000
Received: from DB5EUR03FT012.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::206) by VI1PR08CA0161.outlook.office365.com
 (2603:10a6:800:d1::15) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.13 via Frontend
 Transport; Mon, 16 Sep 2019 13:25:05 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT012.mail.protection.outlook.com (10.152.20.161) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Mon, 16 Sep 2019 13:25:03 +0000
Received: ("Tessian outbound 96594883d423:v31");
 Mon, 16 Sep 2019 13:25:01 +0000
X-CR-MTA-TID: 64aa7808
Received: from d7c88330d0d3.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.1.56]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 462ED04C-0675-4A4B-BF44-CA3A7B023A28.1; 
 Mon, 16 Sep 2019 13:24:56 +0000
Received: from EUR01-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur01lp2056.outbound.protection.outlook.com [104.47.1.56])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id d7c88330d0d3.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Mon, 16 Sep 2019 13:24:56 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=TJo2+tsz2EERlHQ8VxVPHGV3lo9fR4kaoP4BA760H8tik8dDjb10nXW8RWdZKJyEJ4P7hkpziiltQff84auZXXtW60ztgnVV5aGwRqbcF/l0CHcRemR5XHp37bPZ6VeweCbHlehDF/hN0DWQZcz/vm5Lfv2fAbWQF4VVRIx/OkOtf8jmj6SNV7JkcUZ9duI8mTRi6De7M/kTCA0p5jC9GUPvD6c5hzBB/OcWA2+rUZPoFmW4hTdmqb+O0N0uSZIpl2WAuX/YbfOd+8hQwH+2au9v5rEnmKFRM+FBd0gi2HbAJ1e1xgr6EwSmuUzABoEw2tyuzn82BgPSbwSnYIA84A==
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=21TiirR6H2P0SynZE7xICspAEOBt3MMEdpXSx8cqRdc=;
 b=mNnLKnLAvJFZ7pzVS4lp3oXJbjoRBlUV34cwLeOm3mrwP2nVulgExPZ7ruWWtD3EvcKVcbgn8PBYSHb59TcH4u8k+Go9ukEU85IMVH39HeDBChqY47SlX8f5ppqbSpxgTxwZbrnMjmWMi6Ul6Vf735DhIpMISqRfBmhwthleQnrhL6pd9itd55LNre2ZFQqW7L3QRTUyWSyyo9l1Zishp8t/mpMaiHaNfNdiIZzIcgAv6XwZr9Bgnuh+ugQH+h+Nr8BtYcMioBmv8zi2BqPW34dJAYffoF1Y8eq0pAYMD7KA4fG6cNdqJmyD5J+zqpJMOrmNuOcEi1WiQsKUEYNM3A==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=21TiirR6H2P0SynZE7xICspAEOBt3MMEdpXSx8cqRdc=;
 b=o1hRPtUz5Vi1SS48/YbRehYlmk6AzEcfLDb30MkU5XbyQpxdxKVAszMgLXjBnK7j+w3s21ccg0YmiIpPTaQ8TvCTImqYfzhQeWeNl6/kMn6nNl+zqB3dHQkcUvUBXHp78k42CVSdICng1rw2oM/z/9Q1jvI89z/SKyqwq1LXO1c=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3756.eurprd08.prod.outlook.com (20.178.46.84) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.21; Mon, 16 Sep 2019 13:24:52 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Mon, 16 Sep 2019
 13:24:52 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Sharan Santhanam
 <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 1/7] plat/common: Calculate shift factors for
 coversion between ns and tick
Thread-Index: AQHVRuMDcyXq8Mw1EkGFonaS13PppKckvYkAgAlNFQCAABzvgIAAE0EQ
Date: Mon, 16 Sep 2019 13:24:52 +0000
Message-ID: <DB7PR08MB30828700A407498395C2D5DFF78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-2-justin.he@arm.com>
 <AB15EB89-2D66-439F-8F21-1FC5AC6CA6B1@neclab.eu>
 <DB7PR08MB3082768477F8327BF35E9869F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <D5B71CDE-4ACE-45C7-B570-0ACBBCA0AB24@neclab.eu>
In-Reply-To: <D5B71CDE-4ACE-45C7-B570-0ACBBCA0AB24@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: f62671d4-ea3e-467f-9362-bb3455357aac.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [223.167.32.168]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: ffe8975f-0285-4a71-b77e-08d73aa94895
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3756; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3756:|DB7PR08MB3756:|DBBPR08MB4475:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <DBBPR08MB447519E5200ABACB2BDE8570F78C0@DBBPR08MB4475.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
x-forefront-prvs: 0162ACCC24
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(366004)(346002)(136003)(39860400002)(396003)(53754006)(51914003)(189003)(199004)(13464003)(76176011)(8676002)(256004)(5024004)(99286004)(74316002)(4326008)(305945005)(7736002)(33656002)(52536014)(561924002)(71200400001)(486006)(14444005)(14454004)(26005)(102836004)(316002)(53546011)(6506007)(66446008)(64756008)(6246003)(66066001)(446003)(11346002)(55016002)(7696005)(25786009)(9686003)(5660300002)(71190400001)(476003)(6436002)(229853002)(66476007)(186003)(66556008)(86362001)(6116002)(3846002)(478600001)(2501003)(2906002)(8936002)(110136005)(54906003)(53936002)(81166006)(81156014)(76116006)(66946007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3756;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: hrF3u6xOcOkgetm0Vs+qAzGPDyLvmslW1ublt61OgBRml7Hnos87wfYJ/gF4Dk8NJiLpoguGlrq9B1Miu1wZi6N7SlhfWvN0QHhaqtToZzcr0IIQqEi15lPUVDjsRsOfxmv3C2+5K0DXFTbG14OuEh61spPFcII7CHsT8a6zIrXIKtKsUGvtkLax48knlmJav8zhvHtfxy5jMP4Kxj9lza2+cFhSJMNb807yTMtVyldkHckztKGoRGyb6exkNVXO50kvCAjpeXMrlr2N/cgM9resEisvXzEBgxu2FLx+6Sy+9W/hMJ71R9MgyxFgQvBriXpsCfu5SNBlEbE96fPrPQv0ezMbdJkAFr7sk76XvhPwQ4TfIj8qNp1Ibip/vdSQJv1vpkM+6Lf07elDpAgHhQ1+kjIQ+iwbsa7F0gON7jU=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3756
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT012.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(346002)(39860400002)(396003)(376002)(53754006)(51914003)(40434004)(13464003)(199004)(189003)(47776003)(102836004)(5660300002)(186003)(305945005)(7736002)(22756006)(55016002)(86362001)(6246003)(63350400001)(478600001)(446003)(14444005)(4326008)(9686003)(436003)(486006)(5024004)(476003)(11346002)(26005)(110136005)(54906003)(126002)(7696005)(6506007)(53546011)(6116002)(50466002)(23676004)(2486003)(14454004)(74316002)(336012)(316002)(33656002)(76176011)(229853002)(26826003)(70586007)(70206006)(52536014)(76130400001)(66066001)(81166006)(2906002)(2501003)(561924002)(25786009)(81156014)(8676002)(356004)(8936002)(99286004)(3846002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DBBPR08MB4475;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: bfef2606-fa77-49c4-9442-08d73aa941fe
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DBBPR08MB4475; 
X-Forefront-PRVS: 0162ACCC24
X-Microsoft-Antispam-Message-Info: eAsH30wWl7+Qkp+xem8jrCWPXtlZpXDPr697Z68M++czbMFDUoUeGlmCEb7cNssJWubPv7+FYZ8vxoJJnlhBt0msf6I1U6+8+k/RQnTxOU87nchq0fxvP01/vV1F2RmO0KLCHySgnodn+03vHKTTPPiIaBvCJGyYrQDZ9kzrKqfkQk3IsOIQqUQynMDG2QyL0zCXs4QLyJk7k1aNjY5CP5B5oUR9CS1PSknEFAOEgukalbp/WUzt6Kf+IGVUnu99CoE6UZ3kGlaWjjPdwst/HWF3mImlktRY5F9PU37CZJzPX675+aHU5mFqWzTyq86Gv8MdtFPLHc4Hf8jm+NWlQmQyxQ/pDOSgcVpSDTmK5OfwPuzF9tqb4AD16JAJKNbZzhhrACRKllQHuXlp3i71qbnZPtN9/VaJyU4ln021jJM=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Sep 2019 13:25:03.7139 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: ffe8975f-0285-4a71-b77e-08d73aa94895
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB4475
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 1/7] plat/common: Calculate
 shift factors for coversion between ns and tick
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 Julien Grall <Julien.Grall@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2FudGlhZ28gUGFnYW5p
IDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1Pg0KPiBTZW50OiAyMDE55bm0OeaciDE25pelIDE0
OjQ4DQo+IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFy
bS5jb20+OyBtaW5pb3MtDQo+IGRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOyBTaW1vbiBLdWVu
emVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT47DQo+IFNoYXJhbiBTYW50aGFuYW0gPFNoYXJh
bi5TYW50aGFuYW1AbmVjbGFiLmV1Pg0KPiBDYzogSnVsaWVuIEdyYWxsIDxKdWxpZW4uR3JhbGxA
YXJtLmNvbT47IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gPEthbHkuWGluQGFy
bS5jb20+OyBXZWkgQ2hlbiAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpDQo+IDxXZWkuQ2hlbkBhcm0u
Y29tPjsgSmlhbnlvbmcgV3UgKEFybSBUZWNobm9sb2d5IENoaW5hKQ0KPiA8SmlhbnlvbmcuV3VA
YXJtLmNvbT4NCj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSHYzIDEvN10gcGxhdC9jb21t
b246IENhbGN1bGF0ZSBzaGlmdCBmYWN0b3JzDQo+IGZvciBjb3ZlcnNpb24gYmV0d2VlbiBucyBh
bmQgdGljaw0KPg0KPiBIaSBKdXN0aW4sDQo+DQo+IFRoYW5rcyBmb3IgdGhlIHJlcGx5LiBQbGVh
c2UgZmluZCBhIGxhc3QgY29tbWVudCBvbiByZWdhcmRzIHRvIG9uZSBvZiB0aGUNCj4gcG9pbnRz
IGlubGluZS4NCj4NCj4gVGhhbmtzIGFuZCBiZXN0LA0KPiBTYW50aWFnbw0KPg0KPiDvu79PbiAx
Ni4wOS4xOSwgMDc6NDgsICJKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSINCj4gPEp1
c3Rpbi5IZUBhcm0uY29tPiB3cm90ZToNCj4NCj4gICAgIEhpIFNhbnRpYWdvLCB0aGFua3MgZm9y
IHRoZSByZXZpZXcNCj4gICAgIFBsZWFzZSBzZWUgaW5saW5lDQo+DQo+ICAgICA+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+ICAgICA+IEZyb206IFNhbnRpYWdvIFBhZ2FuaSA8U2FudGlh
Z28uUGFnYW5pQG5lY2xhYi5ldT4NCj4gICAgID4gU2VudDogMjAxOeW5tDnmnIgxMOaXpSAxNTow
Mg0KPiAgICAgPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5I
ZUBhcm0uY29tPjsgbWluaW9zLQ0KPiAgICAgPiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsg
U2ltb24gS3Vlbnplcg0KPiA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Ow0KPiAgICAgPiBTaGFy
YW4gU2FudGhhbmFtIDxTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4NCj4gICAgID4gQ2M6IEp1
bGllbiBHcmFsbCA8SnVsaWVuLkdyYWxsQGFybS5jb20+OyBLYWx5IFhpbiAoQXJtIFRlY2hub2xv
Z3kNCj4gQ2hpbmEpDQo+ICAgICA+IDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpIENoZW4gKEFybSBU
ZWNobm9sb2d5IENoaW5hKQ0KPiAgICAgPiA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1
IChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gICAgID4gPEppYW55b25nLld1QGFybS5jb20+DQo+
ICAgICA+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyAxLzddIHBsYXQvY29tbW9uOiBD
YWxjdWxhdGUgc2hpZnQNCj4gZmFjdG9ycw0KPiAgICAgPiBmb3IgY292ZXJzaW9uIGJldHdlZW4g
bnMgYW5kIHRpY2sNCj4gICAgID4NCj4gICAgID4gSGkgYWxsLA0KPiAgICAgPg0KPiAgICAgPiBU
aGFua3MgZm9yIHRoZSBwYXRjaC4gUGxlYXNlIGZpbmQgbXkgY29tbWVudHMgaW5saW5lOg0KPiAg
ICAgPg0KPiAgICAgPiBPbiAzMC4wNy4xOSwgMTY6MjcsICJKaWEgSGUiIDxqdXN0aW4uaGVAYXJt
LmNvbT4gd3JvdGU6DQo+ICAgICA+DQo+ICAgICA+ICAgICBXZSBoYWQgc2hpZnQgZmFjdG9yIGZv
ciBjb3ZlcnRpbmcgY291bnRlciB0aWNrcyB0byBucywgYnV0IGl0J3Mgbm90DQo+ICAgICA+ICAg
ICBlbm91Z2guIFNvbWV0aW1lLCB3ZSBuZWVkIHRvIGNvdmVydCBucyB0byB0aWNrcy4gRm9yIGV4
YW1wbGUsIHdlJ2xsDQo+ICAgICA+ICAgICB0cmFuc2ZlciBzbGVlcChucykgdG8gY291bnRlciB0
aWNrcy4gSWYgd2UgZG9uJ3QgaGF2ZSB0aGUgc2hpZnQgZmFjdG9yLA0KPiAgICAgPiAgICAgdGhl
IGNvbnZlcnNpb24gYWNjdXJhY3kgd2lsbCBiZSBsb3dlci4NCj4gICAgID4NCj4gICAgID4gICAg
IFNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hlbkBhcm0uY29tPg0KPiAgICAgPiAgICAg
U2lnbmVkLW9mZi1ieTogSmlhbnlvbmcgV3UgPGppYW55b25nLnd1QGFybS5jb20+DQo+ICAgICA+
ICAgICBTaWduZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPg0KPiAgICAgPiAg
ICAgLS0tDQo+ICAgICA+ICAgICAgcGxhdC9jb21tb24vYXJtL3RpbWUuYyB8IDExMQ0KPiAgICAg
PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQ0KPiAgICAgPiAgICAg
IDEgZmlsZSBjaGFuZ2VkLCA4NiBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkNCj4gICAg
ID4NCj4gICAgID4gICAgIGRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jIGIvcGxh
dC9jb21tb24vYXJtL3RpbWUuYw0KPiAgICAgPiAgICAgaW5kZXggMWIzMDkwMy4uNGM2NjAzOSAx
MDA2NDQNCj4gICAgID4gICAgIC0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCj4gICAgID4g
ICAgICsrKyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCj4gICAgID4gICAgIEBAIC00NywyMSAr
NDcsODMgQEANCj4gICAgID4gICAgICBzdGF0aWMgdWludDY0X3QgYm9vdF90aWNrczsNCj4gICAg
ID4gICAgICBzdGF0aWMgdWludDMyX3QgY291bnRlcl9mcmVxOw0KPiAgICAgPg0KPiAgICAgPiAg
ICAgLS8qDQo+ICAgICA+ICAgICAtICogU2hpZnQgZmFjdG9yIGZvciBjb3VudGVyIHNjYWxpbmcg
bXVsdGlwbGllcjsgcmVmZXJyZWQgdG8gYXMgUyBpbiB0aGUNCj4gICAgID4gICAgIC0gKiBmb2xs
b3dpbmcgY29tbWVudHMuDQo+ICAgICA+ICAgICAtICovDQo+ICAgICA+ICAgICAtc3RhdGljIHVp
bnQ4X3QgY291bnRlcl9zaGlmdDsNCj4gICAgID4NCj4gICAgID4gICAgIC0vKiBNdWx0aXBsaWVy
IGZvciBjb252ZXJ0aW5nIGNvdW50ZXIgdGlja3MgdG8gbnNlY3MuICgwLlMpIGZpeGVkIHBvaW50
Lg0KPiAqLw0KPiAgICAgPiAgICAgKy8qIFNoaWZ0IGZhY3RvciBmb3IgY29udmVydGluZyB0aWNr
cyB0byBucyAqLw0KPiAgICAgPiAgICAgK3N0YXRpYyB1aW50OF90IGNvdW50ZXJfc2hpZnRfdG9f
bnM7DQo+ICAgICA+ICAgICArDQo+ICAgICA+ICAgICArLyogU2hpZnQgZmFjdG9yIGZvciBjb252
ZXJ0aW5nIG5zIHRvIHRpY2tzICovDQo+ICAgICA+ICAgICArc3RhdGljIHVpbnQ4X3QgY291bnRl
cl9zaGlmdF90b190aWNrOw0KPiAgICAgPiAgICAgKw0KPiAgICAgPiAgICAgKy8qIE11bHRpcGxp
ZXIgZm9yIGNvbnZlcnRpbmcgY291bnRlciB0aWNrcyB0byBuc2VjcyAqLw0KPiAgICAgPiAgICAg
IHN0YXRpYyB1aW50MzJfdCBuc19wZXJfdGljazsNCj4gICAgID4NCj4gICAgID4gICAgICsvKiBN
dWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIG5zZWNzIHRvIGNvdW50ZXIgdGlja3MgKi8NCj4gICAg
ID4gICAgICtzdGF0aWMgdWludDMyX3QgdGlja19wZXJfbnM7DQo+ICAgICA+ICAgICArDQo+ICAg
ICA+ICAgICArLyoNCj4gICAgID4gICAgICsgKiBUaGUgbWF4aW11bSB0aW1lIHJhbmdlIGluIHNl
Y29uZHMgd2hpY2ggY2FuIGJlIGNvbnZlcnRlZCBieQ0KPiAgICAgPiBtdWx0aXBsaWVyDQo+ICAg
ICA+ICAgICArICogYW5kIHNoaWZ0IGZhY3RvcnMuIFRoaXMgd2lsbCBndWFyYW50ZWUgdGhlIGNv
bnZlcnRlZCB2YWx1ZSBub3QgdG8NCj4gICAgID4gZXhjZWVkDQo+ICAgICA+ICAgICArICogNjQt
Yml0IHVuc2lnbmVkIGludGVnZXIuIEluY3JlYXNlIHRoZSB0aW1lIHJhbmdlIHdpbGwgcmVkdWNl
IHRoZQ0KPiAgICAgPiBhY2N1cmFjeQ0KPiAgICAgPiAgICAgKyAqIG9mIGNvbnZlcnNpb24sIGJl
Y2F1c2Ugd2Ugd2lsbCBnZXQgc21hbGxlciBtdWx0aXBsaWVyIGFuZCBzaGlmdA0KPiBmYWN0b3Jz
Lg0KPiAgICAgPiAgICAgKyAqIEluIHRoaXMgY2FzZSwgd2Ugc2VsZWN0ZWQgMzYwMHMgYXMgdGhl
IHRpbWUgcmFuZ2UuDQo+ICAgICA+ICAgICArICovDQo+ICAgICA+ICAgICArI2RlZmluZSBfX01B
WF9DT05WRVJUX1NFQ1MgICAgICAgMzYwMFVMDQo+ICAgICA+IENPTU1ORVQ6IEFzIEkgdW5kZXJz
dGFuZCBpdCwgIHRoaXMgI2RlZmluZSBpcyBhbHNvIHVzZWQgd2hlbg0KPiBjYWxjdWxhdGluZw0K
PiAgICAgPiB0aGUgbnNfcGVyX3RpY2ssIGl0IG5vdCBvbmx5IGltcG9zZXMgYSBsaW1pdCB0byB0
aGUgdGltZSByYW5nZSwgYnV0IGFsc28NCj4gdG8NCj4gICAgID4gdGhlIHRpY2sgcmFuZ2UuIFRo
YXQgaXMsIHdlIGRvIG5vdCBzdXBwb3J0IGNvbnZlcnRpbmcgbnNfdG9fdGlja3MgZm9yDQo+IG1v
cmUNCj4gICAgID4gdGhhbiAzNjAwIHNlY29uZHMsIGFuZCBhcyB3ZWxsIHdlIGRvIG5vdCBzdXBw
b3J0IHRvIGNvbnZlcnQNCj4gdGlja3NfdG9fbnMNCj4gICAgID4gZm9yIG1vcmUgdGhhbiAzNjAw
MDAwMDAwIHRpY2tzLCBjb3JyZWN0PyBNYXliZSBjaGFuZ2UgdGhlIG5hbWUgb2YNCj4gdGhlDQo+
ICAgICA+ICNkZWZpbmUgdG8gc29tZXRoaW5nIG1vcmUgZ2VuZXJpYy4NCj4gICAgIEhtbSwgX19N
QVhfQ09OVkVSVF9TRUNTIGlzIGZvciBjb252ZXJ0aW5nIHRpY2tzX3RvX25zIG9ubHksIG5vdCB0
aGUNCj4gICAgIGNvbnZlcnRpbmcgb2YgbnNfdG9fdGlja3MNCj4gICAgIFNvLCBob3cgYWJvdXQg
X19NQVhfU0VDU19DT05WRVJUX1RPX05TID8NCj4NCj4gQ09NTUVOVDogV2VsbCwgdGhlIG9ubHkg
cGxhY2Ugd2hlcmUgX19NQVhfQ09OVkVSVF9TRUNTIGlzIHVzZWQgaXMNCj4gaW5zaWRlIGZ1bmN0
aW9uICdjYWxjdWxhdGVfbXVsdF9zaGlmdCcgdG8gY29tcHV0ZSAnc2Z0YWNjJy4gRnVuY3Rpb24N
Cj4gJ2NhbGN1bGF0ZV9tdWx0X3NoaWZ0JyBpcyB0aGVuIHVzZWQgYm90aCB0byBjb21wdXRlICd0
aWNrX3Blcl9ucyBhbmQNCj4gY291bnRlcl9zaGlmdF90b190aWNrJywgYXMgd2VsbCBhcyAnbnNf
cGVyX3RpY2sgYW5kIGNvdW50ZXJfc2hpZnRfdG9fbnMnLg0KPiBJbnNpZGUgZnVuY3Rpb24gJ2Nh
bGN1bGF0ZV9tdWx0X3NoaWZ0JywgdGhlIHZhbHVlIG9mIF9fTUFYX0NPTlZFUlRfU0VDUw0KPiBp
cyBtdWx0aXBsaWVkIGJ5ICdmcm9tJy4gIEluIG9uZSBjYXNlIHdoZW4gY2FsbGluZyB0aGUgZnVu
Y3Rpb24sICdmcm9tJyBpcyBzZXQNCj4gdG8gTlNFQ19QRVJfU0VDLCBob3dldmVyIGluIHRoZSBj
YXNlLCAnZnJvbScgaXMgc2V0IHRvICcgY291bnRlcl9mcmVxJy4NCj4gVGhlcmVmb3JlLCBhcyB3
ZSBhcmUgbXVsdGlwbHlpbmcgX19NQVhfQ09OVkVSVF9TRUNTIHdpdGggdHdvIHZhcmlhYmxlcw0K
PiB3aXRoIG9wcG9zZWQgcGh5c2ljYWwgbWVhbmluZ3MsIF9fTUFYX0NPTlZFUlRfU0VDUyBpcyBp
biBmYWN0IGFsc28NCj4gYmVlbiB1dGlsaXplZCBpbiB0aGUgb3Bwb3NpdGUgd2F5Lg0KU29ycnkg
Zm9yIHByZXZpb3VzIG1pc3Rha2VzLg0KX19NQVhfU0VDU19DT05WRVJUX1RPX05TIGlzIG5vdCBj
b3JyZWN0DQoNCkluIHlvdXIgbWVudGlvbiAxc3QgY2FzZSwgZS5nLiAgYXNzdW1lIHRoZSBmcmVx
IGlzIDI1TWh6DQpjYWxjdWxhdGVfbXVsdF9zaGlmdCgmbXVsdCwmc2hpZnQsMTAwMDAwMDAwMEws
MjUqMTAwMDAwMCk7DQpfX01BWF9DT05WRVJUX1NFQ1MgaXMgdG8gc2F5IHRoZSByYW5nZSBucyBp
cyBbMCwzNjAwKjEwMDAsMDAwLDAwMF0sDQpJbiB5b3VyIHNlY29uZCBjYXNlLA0KY2FsY3VsYXRl
X211bHRfc2hpZnQoJm11bHQsJnNoaWZ0ICwyNSoxMDAwMDAwLCAxMDAwMDAwMDAwKTsNCl9fTUFY
X0NPTlZFUlRfU0VDUyBpcyB0byBzYXkgdGhlIHJhbmdlIHRpY2tzIGlzIFswLCAzNjAwKjI1KjEw
MDAsMDAwXQ0KDQpTbywgSU1PLCB3ZSAqbmVlZG4ndCBjaGFuZ2UgdGhlIG5hbWUgX19NQVhfQ09O
VkVSVF9TRUNTIGhlcmUuDQpXaGF0IGlzIHlvdXIgb3Bpbmlvbj8NCg0KLS0NCkNoZWVycywNCkp1
c3RpbiAoSmlhIEhlKQ0KDQoNCj4NCj4gICAgID4gICAgICsNCj4gICAgID4gICAgICAvKiBIb3cg
bWFueSBuYW5vc2Vjb25kcyBwZXIgc2Vjb25kICovDQo+ICAgICA+ICAgICAgI2RlZmluZSBOU0VD
X1BFUl9TRUMgdWthcmNoX3RpbWVfc2VjX3RvX25zZWMoMSkNCj4gICAgID4NCj4gICAgID4gICAg
ICBzdGF0aWMgaW5saW5lIHVpbnQ2NF90IHRpY2tzX3RvX25zKHVpbnQ2NF90IHRpY2tzKQ0KPiAg
ICAgPiAgICAgIHsNCj4gICAgID4gICAgIC0gcmV0dXJuIChuc19wZXJfdGljayAqIHRpY2tzKSA+
PiBjb3VudGVyX3NoaWZ0Ow0KPiAgICAgPiAgICAgKyByZXR1cm4gKG5zX3Blcl90aWNrICogdGlj
a3MpID4+IGNvdW50ZXJfc2hpZnRfdG9fbnM7DQo+ICAgICA+IENPTU1FTlQ6IE1heWJlIGFkZCBh
biBhc3NlcnRpb24gZm9yIHRoZSBtYXhpbXVtIG51bWJlciBvZiB0aWNrcw0KPiBhcyBhDQo+ICAg
ICA+IHNhbml0eSBjaGVjaz8NCj4NCj4gICAgIFllcywgcmVhc29uYWJsZSB0byBtZQ0KPg0KPiAg
ICAgPiAgICAgK30NCj4gICAgID4gICAgICsNCj4gICAgID4gICAgICtzdGF0aWMgaW5saW5lIHVp
bnQ2NF90IG5zX3RvX3RpY2tzKHVpbnQ2NF90IG5zKQ0KPiAgICAgPiAgICAgK3sNCj4gICAgID4g
ICAgICsgcmV0dXJuICh0aWNrX3Blcl9ucyAqIG5zKSA+PiBjb3VudGVyX3NoaWZ0X3RvX3RpY2s7
DQo+ICAgICA+IENPTU1FTlQ6IE1heWJlIGFkZCBhbiBhc3NlcnRpb24gZm9yIHRoZSBtYXhpbXVt
IG51bWJlciBvZg0KPiBzZWNvbmRzDQo+ICAgICA+IGFzIGEgc2FuaXR5IGNoZWNrPw0KPg0KPiAg
ICAgWWVzDQo+DQo+ICAgICA+ICAgICArfQ0KPiAgICAgPiAgICAgKw0KPiAgICAgPiAgICAgKy8q
DQo+ICAgICA+ICAgICArICogQ2FsY3VsYXRlIG11bHRpcGxpZXIvc2hpZnQgZmFjdG9ycyBmb3Ig
c2NhbGVkIG1hdGguDQo+ICAgICA+ICAgICArICovDQo+ICAgICA+ICAgICArc3RhdGljIHZvaWQg
Y2FsY3VsYXRlX211bHRfc2hpZnQodWludDMyX3QgKm11bHQsIHVpbnQ4X3QgKnNoaWZ0LA0KPiAg
ICAgPiAgICAgKyAgICAgICAgIHVpbnQ2NF90IGZyb20sIHVpbnQ2NF90IHRvKQ0KPiAgICAgPiAg
ICAgK3sNCj4gICAgID4gICAgICsgdWludDY0X3QgdG1wOw0KPiAgICAgPiAgICAgKyB1aW50MzJf
dCBzZnQsIHNmdGFjYyA9IDMyOw0KPiAgICAgPiAgICAgKw0KPiAgICAgPiAgICAgKyAvKg0KPiAg
ICAgPiAgICAgKyAgKiBDYWxjdWxhdGUgdGhlIHNoaWZ0IGZhY3RvciB3aGljaCBpcyBsaW1pdGlu
ZyB0aGUgY29udmVyc2lvbg0KPiAgICAgPiAgICAgKyAgKiByYW5nZToNCj4gICAgID4gICAgICsg
ICovDQo+ICAgICA+ICAgICArIHRtcCA9ICgodWludDY0X3QpX19NQVhfQ09OVkVSVF9TRUNTICog
ZnJvbSkgPj4gMzI7DQo+ICAgICA+ICAgICArIHdoaWxlICh0bXApIHsNCj4gICAgID4gICAgICsg
ICAgICAgICB0bXAgPj49IDE7DQo+ICAgICA+ICAgICArICAgICAgICAgc2Z0YWNjLS07DQo+ICAg
ICA+ICAgICArIH0NCj4gICAgID4gICAgICsNCj4gICAgID4gICAgICsNCj4gICAgID4gICAgICsg
LyoNCj4gICAgID4gICAgICsgICogQ2FsY3VsYXRlIHNoaWZ0IGZhY3RvciAoUykgYW5kIHNjYWxp
bmcgbXVsdGlwbGllciAoTSkuDQo+ICAgICA+ICAgICArICAqDQo+ICAgICA+ICAgICArICAqIChT
KSBuZWVkcyB0byBiZSB0aGUgbGFyZ2VzdCBzaGlmdCBmYWN0b3IgKDw9IG1heF9zaGlmdCkgd2hl
cmUNCj4gICAgID4gICAgICsgICogdGhlIHJlc3VsdCBvZiB0aGUgTSBjYWxjdWxhdGlvbiBiZWxv
dyBmaXRzIGludG8gdWludDMyX3QNCj4gICAgID4gICAgICsgICogd2l0aG91dCB0cnVuY2F0aW9u
Lg0KPiAgICAgPiAgICAgKyAgKg0KPiAgICAgPiAgICAgKyAgKiBtdWx0aXBsaWVyID0gKHRhcmdl
dCA8PCBzaGlmdCkgLyBzb3VyY2UNCj4gICAgID4gICAgICsgICovDQo+ICAgICA+ICAgICArIGZv
ciAoc2Z0ID0gMzI7IHNmdCA+IDA7IHNmdC0tKSB7DQo+ICAgICA+ICAgICArICAgICAgICAgdG1w
ID0gKHVpbnQ2NF90KSB0byA8PCBzZnQ7DQo+ICAgICA+ICAgICArDQo+ICAgICA+ICAgICArICAg
ICAgICAgLyogRW5zdXJpbmcgd2Ugcm91bmQgdG8gbmVhcmVzdCB3aGVuIGNhbGN1bGF0aW5nIHRo
ZQ0KPiAgICAgPiAgICAgKyAgICAgICAgICAqIG11bHRpcGxpZXINCj4gICAgID4gICAgICsgICAg
ICAgICAgKi8NCj4gICAgID4gICAgICsgICAgICAgICB0bXAgKz0gZnJvbSAvIDI7DQo+ICAgICA+
ICAgICArICAgICAgICAgdG1wIC89IGZyb207DQo+ICAgICA+ICAgICArICAgICAgICAgaWYgKCh0
bXAgPj4gc2Z0YWNjKSA9PSAwKQ0KPiAgICAgPiAgICAgKyAgICAgICAgICAgICAgICAgYnJlYWs7
DQo+ICAgICA+ICAgICArIH0NCj4gICAgID4gICAgICsgKm11bHQgPSB0bXA7DQo+ICAgICA+ICAg
ICArICpzaGlmdCA9IHNmdDsNCj4gICAgID4gICAgICB9DQo+ICAgICA+DQo+ICAgICA+ICAgICAg
LyoNCj4gICAgID4gICAgIEBAIC0xNDUsMjkgKzIwNywyOCBAQCBzdGF0aWMgX191NjQNCj4gZ2Vu
ZXJpY190aW1lcl9lcG9jaG9mZnNldCh2b2lkKQ0KPiAgICAgPg0KPiAgICAgPiAgICAgIHN0YXRp
YyBpbnQgZ2VuZXJpY190aW1lcl9pbml0KHZvaWQpDQo+ICAgICA+ICAgICAgew0KPiAgICAgPiAg
ICAgKyBjb3VudGVyX2ZyZXEgPSBnZXRfY291bnRlcl9mcmVxdWVuY3koKTsNCj4gICAgID4gICAg
ICsNCj4gICAgID4gICAgICAgLyoNCj4gICAgID4gICAgIC0gICogQ2FsY3VsYXRlIGNvdW50ZXIg
c2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIuDQo+ICAgICA+ICAgICAtICAqDQo+
ICAgICA+ICAgICAtICAqIGNvdW50ZXJfc2hpZnQgKFMpIG5lZWRzIHRvIGJlIHRoZSBsYXJnZXN0
ICg8PTMyKSBzaGlmdCBmYWN0b3Igd2hlcmUNCj4gICAgID4gICAgIC0gICogdGhlIHJlc3VsdCBv
ZiB0aGUgbnNfcGVyX3RpY2sgY2FsY3VsYXRpb24gYmVsb3cgZml0cyBpbnRvIHVpbnQzMl90DQo+
ICAgICA+ICAgICAtICAqIHdpdGhvdXQgdHJ1bmNhdGlvbi4gTm90ZSB0aGF0IHdlIGRpc2FsbG93
IGFuIFMgb2YgemVybyB0byBlbnN1cmUNCj4gICAgID4gICAgIC0gICogdGhlIGxvb3AgYWx3YXlz
IHRlcm1pbmF0ZXMuDQo+ICAgICA+ICAgICAtICAqDQo+ICAgICA+ICAgICAtICAqICgwLlMpIG5z
X3Blcl90aWNrID0gTlNFQ19QRVJfU0VDIChTLlMpIC8gY291bnRlcl9mcmVxIChTLjApDQo+ICAg
ICA+ICAgICArICAqIENhbGN1bGF0ZSB0aGUgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRp
cGxpZXIgZm9yDQo+ICAgICA+ICAgICArICAqIGNwbnZlcnRpbmcgdGlja3MgdG8gbnMuDQo+ICAg
ICA+ICAgICAgICAqLw0KPiAgICAgPiBUWVBPOiBUeXBvIGluIGNvbW1lbnQ6IGNwbnZlcnRpbmcg
LT4gY29udmVydGluZw0KPg0KPiAgICAgT0sNCj4NCj4gICAgID4gICAgIC0gdWludDY0X3QgdG1w
Ow0KPiAgICAgPiAgICAgKyBjYWxjdWxhdGVfbXVsdF9zaGlmdCgmbnNfcGVyX3RpY2ssICZjb3Vu
dGVyX3NoaWZ0X3RvX25zLA0KPiAgICAgPiAgICAgKyAgICAgICAgICAgICAgICAgICAgICAgICBj
b3VudGVyX2ZyZXEsIE5TRUNfUEVSX1NFQyk7DQo+ICAgICA+DQo+ICAgICA+ICAgICAtIGNvdW50
ZXJfZnJlcSA9IGdldF9jb3VudGVyX2ZyZXF1ZW5jeSgpOw0KPiAgICAgPiAgICAgLSBjb3VudGVy
X3NoaWZ0ID0gMzI7DQo+ICAgICA+ICAgICAtIGRvIHsNCj4gICAgID4gICAgIC0gICAgICAgICB0
bXAgPSAoTlNFQ19QRVJfU0VDIDw8IGNvdW50ZXJfc2hpZnQpIC8gY291bnRlcl9mcmVxOw0KPiAg
ICAgPiAgICAgLSAgICAgICAgIGlmICgodG1wICYgMHhGRkZGRkZGRjAwMDAwMDAwTCkgPT0gMEwp
DQo+ICAgICA+ICAgICAtICAgICAgICAgICAgICAgICBuc19wZXJfdGljayA9ICh1aW50MzJfdCl0
bXA7DQo+ICAgICA+ICAgICAtICAgICAgICAgZWxzZQ0KPiAgICAgPiAgICAgLSAgICAgICAgICAg
ICAgICAgY291bnRlcl9zaGlmdC0tOw0KPiAgICAgPiAgICAgLSB9IHdoaWxlIChjb3VudGVyX3No
aWZ0ID4gMCAmJiBuc19wZXJfdGljayA9PSAwTCk7DQo+ICAgICA+ICAgICArIC8qIFdlIGRpc2Fs
bG93IHplcm8gbnNfcGVyX3RpY2sgKi8NCj4gICAgID4gICAgICAgVUtfQlVHT04oIW5zX3Blcl90
aWNrKTsNCj4gICAgID4NCj4gICAgID4gICAgICsgLyoNCj4gICAgID4gICAgICsgICogQ2FsY3Vs
YXRlIHRoZSBzaGlmdCBmYWN0b3IgYW5kIHNjYWxpbmcgbXVsdGlwbGllciBmb3INCj4gICAgID4g
ICAgICsgICogY3BudmVydGluZyBucyB0byB0aWNrcy4NCj4gICAgID4gICAgICsgICovDQo+ICAg
ICA+IFRZUE86IFR5cG8gaW4gY29tbWVudDogY3BudmVydGluZyAtPiBjb252ZXJ0aW5nDQo+DQo+
ICAgICBPSw0KPg0KPiAgICAgPiAgICAgKyBjYWxjdWxhdGVfbXVsdF9zaGlmdCgmdGlja19wZXJf
bnMsICZjb3VudGVyX3NoaWZ0X3RvX3RpY2ssDQo+ICAgICA+ICAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgIE5TRUNfUEVSX1NFQywgY291bnRlcl9mcmVxKTsNCj4gICAgID4gICAgICsNCj4g
ICAgID4gICAgICsgLyogV2UgZGlzYWxsb3cgemVybyBuc19wZXJfdGljayAqLw0KPiAgICAgPiAg
ICAgKyBVS19CVUdPTighdGlja19wZXJfbnMpOw0KPiAgICAgPiAgICAgKw0KPiAgICAgPiAgICAg
ICAvKg0KPiAgICAgPiAgICAgICAgKiBNb25vdG9uaWMgdGltZSBiZWdpbnMgYXQgYm9vdF90aWNr
cyAoZmlyc3QgcmVhZCBvZiBjb3VudGVyDQo+ICAgICA+ICAgICAgICAqIGJlZm9yZSBjYWxpYnJh
dGlvbikuDQo+ICAgICA+ICAgICAtLQ0KPiAgICAgPiAgICAgMi4xNy4xDQo+ICAgICA+DQo+ICAg
ICA+DQo+ICAgICA+DQo+DQo+ICAgICBJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMgb2Yg
dGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZQ0KPiBjb25maWRlbnRpYWwgYW5kIG1h
eSBhbHNvIGJlIHByaXZpbGVnZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZA0KPiByZWNp
cGllbnQsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRp
c2Nsb3NlIHRoZQ0KPiBjb250ZW50cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFu
eSBwdXJwb3NlLCBvciBzdG9yZSBvciBjb3B5IHRoZQ0KPiBpbmZvcm1hdGlvbiBpbiBhbnkgbWVk
aXVtLiBUaGFuayB5b3UuDQo+DQoNCklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0
aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFs
c28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwg
cGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2Ug
dGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2Us
IG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlv
dS4NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 13:37:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 13:37:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9rC6-0001zF-AM; Mon, 16 Sep 2019 13:37:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=p10B=XL=gmail.com=jiakernel2@srs-us1.protection.inumbo.net>)
 id 1i9rC4-0001zA-Fw
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 13:37:28 +0000
X-Inumbo-ID: 1f6c77ca-d887-11e9-b299-bc764e2007e4
Received: from mail-pg1-x52f.google.com (unknown [2607:f8b0:4864:20::52f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1f6c77ca-d887-11e9-b299-bc764e2007e4;
 Mon, 16 Sep 2019 13:37:27 +0000 (UTC)
Received: by mail-pg1-x52f.google.com with SMTP id m29so31056pgc.3
 for <minios-devel@lists.xenproject.org>; Mon, 16 Sep 2019 06:37:27 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-transfer-encoding;
 bh=VG2COSVcVWMUq8a083u5KoSGdBHSWt6APguihKhy/qo=;
 b=AcSR3bl53T1bX1LpcJn4mrAXL8dZ5MIXFjIhQBaM4/ncU1IxO29vyF/7ApE3ElrkoU
 PquO02mwovdnx5QasMorQXH9odVXnL7v4IKocohMBHNXwbuwoLcu2CQaXJ/rs5Dehjop
 uV+9Na6I0g2tqlPDygsqMcevz+vOQ+3OX5SFftDDpQXhMIkvGGYjKWeB89NbT6fErJGR
 bNUCRsqSkiYqCUSxjQY/ETMK/JWUIirV8YtvptnhS6jHw6JyFVrZwvmNWzquUb3U3OEu
 HM2boM4X8qXyQOgHo0fu1xsEzuUuAI34sV0WCf15jnE3/G10Kn36ZCQPQXmRYUt3onFi
 ySog==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-transfer-encoding;
 bh=VG2COSVcVWMUq8a083u5KoSGdBHSWt6APguihKhy/qo=;
 b=C44+w1wbVxtpXnISbB1h/1T15PXhoacL8xDsivZsxIcUvfesxNR5jm48hmyyj+A6+W
 DdxyqRnXDLwIN3erdFedlCjS5b1K80XOIqhZp+Mi4aGEU+Breq7dYgzXv3wb/aPzcovG
 nos0RpRjWASS6yqcxO/3FqwK+tNpr0yUow5/ej1BFYESAA1js1pVZwa4dSZBmkJafPqJ
 u/HK4ZM0pNcSEX37/jA9eWIwgBLhTViHpwRg01oXcNDT9O7aD5gv8xSeivXfNk19QqcS
 4KifdXJqq+/I56EjQoyhD1Zcut+wtEZkOJTlqi8C1Z/bnT0w01WBZQ2JD2G16//0SJaP
 /hNQ==
X-Gm-Message-State: APjAAAUzVHZrymWLkZa/hiz9oaYtLUF4TaHJnfeKd+bLxIt628+MTUmq
 VwxWjwXyyP5WHiXiX7wmzESlplyZ
X-Google-Smtp-Source: APXvYqwadx264oCW+hrxsPJ36/VXuNbOfxj1/zwuWqVNKsoVgy2jHtGLwA2tFL4bKUxlhXF1pZOFFg==
X-Received: by 2002:a17:90a:7782:: with SMTP id v2mr40228pjk.3.1568641046465; 
 Mon, 16 Sep 2019 06:37:26 -0700 (PDT)
Received: from [0.0.0.0] (104.129.187.94.16clouds.com. [104.129.187.94])
 by smtp.gmail.com with ESMTPSA id c62sm50376723pfa.92.2019.09.16.06.37.23
 for <minios-devel@lists.xenproject.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Mon, 16 Sep 2019 06:37:25 -0700 (PDT)
To: minios-devel@lists.xenproject.org
References: <20190911120107.11757-1-felipe.huici@neclab.eu>
 <20190911120107.11757-4-felipe.huici@neclab.eu>
 <DB7PR08MB308215F5D14270DCCCF46763F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <DB7PR08MB3082634890EB10DA96C3D033F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <83E4659F-CBA4-4BB4-8104-1DF70BA9BBE5@neclab.eu>
From: Jia He <jiakernel2@gmail.com>
Message-ID: <c12bb224-7702-c01d-6017-906cf4fb3f72@gmail.com>
Date: Mon, 16 Sep 2019 21:37:18 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <83E4659F-CBA4-4BB4-8104-1DF70BA9BBE5@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLUA PATCH v2 3/4] Add patches
 directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlCgpBcG9sb2dpemUgZm9yIGNhdXNpbmcgY29uZnVzaW9uLgoKSXQgaXMgY2F1c2Vk
IG15IGRlYnVnZ2luZyBjb2RlIGZvciB5b3VyIHBhdGNoLgoKUmV2aWV3ZWQtYnk6IEppYSBIZSA8
anVzdGluLmhlQGFybS5jb20+Ci0tLQpDaGVlcnMsCkp1c3RpbiAoSmlhIEhlKQoKT24gMjAxOS85
LzE2IDE1OjE3LCBGZWxpcGUgSHVpY2kgd3JvdGU6Cj4gSGkgSnVzdGluLAo+Cj4gVGhhdCdzIHN0
cmFuZ2UsIGlzIHRoaXMgdXNpbmcgdjIgb2YgdGhlIHNlcmllcz8gQmVjYXVzZSBpZiB5b3UgbG9v
ayBhdCBwYXRjaCAjMyAoZmlsZTogcGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5
LXBvaW50LnBhdGNoICkgeW91IGNhbiBzZWUgdGhhdCBib3RoIGNzdHIgYW5kIGltZyBhcmUgZGVj
bGFyZWQgYW5kIHVzZWQsIGFuZCBzbyBJIGRvbid0IGdldCB0aG9zZSB3YXJuaW5ncy4KPgo+IFRo
YW5rcywKPgo+IC0tIEZlbGlwZQo+Cj4g77u/T24gMTYuMDkuMTksIDA2OjUyLCAiSnVzdGluIEhl
IChBcm0gVGVjaG5vbG9neSBDaGluYSkiIDxKdXN0aW4uSGVAYXJtLmNvbT4gd3JvdGU6Cj4KPiAg
ICAgIEhpIEZlbGlwZQo+ICAgICAgU29ycnksIEkgaGF2ZSB0byB3aXRoZHJhdyBteSBhY2NlcHRh
bmNlIGZvciB0aGlzIHBhdGNoIGJlY2F1c2UgbXkgY29tcGlsZXIgY29tcGxhaW5zCj4gICAgICBv
biB4ODYsIGdjYyB2ZXJzaW9uIDcuNC4wIChVYnVudHUgNy40LjAtMXVidW50dTF+MTguMDQuMSkK
PiAgICAgIC9yb290L2hqL1VLL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJsdWEvb3JpZ2luL2x1
YS01LjMuNS9zcmMvbHVhLmM6NTYxOjk6IHdhcm5pbmc6IHVudXNlZCB2YXJpYWJsZSDigJhjc3Ry
4oCZIFstV3VudXNlZC12YXJpYWJsZV0KPiAgICAgICAgIGNoYXIgKmNzdHI7Cj4gICAgICAgICAg
ICAgICBefn5+Cj4gICAgICAvcm9vdC9oai9VSy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlibHVh
L29yaWdpbi9sdWEtNS4zLjUvc3JjL2x1YS5jOjU2MDozMjogd2FybmluZzogdW51c2VkIHZhcmlh
YmxlIOKAmGltZ+KAmSBbLVd1bnVzZWQtdmFyaWFibGVdCj4gICAgICAgICBzdHJ1Y3QgdWtwbGF0
X21lbXJlZ2lvbl9kZXNjIGltZzsKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXn5+Cj4gICAgICAKPiAgICAgID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPiAgICAg
ID4gRnJvbTogTWluaW9zLWRldmVsIDxtaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9q
ZWN0Lm9yZz4gT24gQmVoYWxmCj4gICAgICA+IE9mIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kg
Q2hpbmEpCj4gICAgICA+IFNlbnQ6IDIwMTnlubQ55pyIMTbml6UgMTI6NDMKPiAgICAgID4gVG86
IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT47IG1pbmlvcy1kZXZlbEBsaXN0
cy54ZW4ub3JnCj4gICAgICA+IFN1YmplY3Q6IFJlOiBbTWluaW9zLWRldmVsXSBbVU5JS1JBRlQv
TElCTFVBIFBBVENIIHYyIDMvNF0gQWRkIHBhdGNoZXMKPiAgICAgID4gZGlyZWN0b3J5Cj4gICAg
ICA+Cj4gICAgICA+IEhpIEZlbGlwZQo+ICAgICAgPgo+ICAgICAgPiBMR1RNCj4gICAgICA+IFJl
dmlld2VkLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgo+ICAgICAgPiA+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tCj4gICAgICA+ID4gRnJvbTogTWluaW9zLWRldmVsIDxtaW5pb3Mt
ZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZz4gT24KPiAgICAgID4gQmVoYWxmCj4g
ICAgICA+ID4gT2YgRmVsaXBlIEh1aWNpCj4gICAgICA+ID4gU2VudDogMjAxOeW5tDnmnIgxMeaX
pSAyMDowMQo+ICAgICAgPiA+IFRvOiBtaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZwo+ICAgICAg
PiA+IENjOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gICAgICA+ID4g
U3ViamVjdDogW01pbmlvcy1kZXZlbF0gW1VOSUtSQUZUL0xJQkxVQSBQQVRDSCB2MiAzLzRdIEFk
ZCBwYXRjaGVzCj4gICAgICA+ID4gZGlyZWN0b3J5Cj4gICAgICA+ID4KPiAgICAgID4gPiBQYXRj
aCB0byByZW5hbWUgbWFpbiBmdW5jdGlvbiBhbmQgdG8gYWRkIGluaXRyZCBzdXBwb3J0IHRvIG1h
aW4gbG9vcC4KPiAgICAgID4gPgo+ICAgICAgPiA+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWlj
aSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiAgICAgID4gPiAtLS0KPiAgICAgID4gPiAgcGF0
Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVudHJ5LXBvaW50LnBhdGNoIHwgNDIKPiAgICAg
ID4gPiArKysrKysrKysrKysrKysrKysrKysrKysKPiAgICAgID4gPiAgMSBmaWxlIGNoYW5nZWQs
IDQyIGluc2VydGlvbnMoKykKPiAgICAgID4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMv
MDAwMS1hZGQtaW5pdHJkLXJlbmFtZS1lbnRyeS1wb2ludC5wYXRjaAo+ICAgICAgPiA+Cj4gICAg
ICA+ID4gZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1hZGQtaW5pdHJkLXJlbmFtZS1lbnRyeS1w
b2ludC5wYXRjaAo+ICAgICAgPiA+IGIvcGF0Y2hlcy8wMDAxLWFkZC1pbml0cmQtcmVuYW1lLWVu
dHJ5LXBvaW50LnBhdGNoCj4gICAgICA+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiAgICAgID4g
PiBpbmRleCAwMDAwMDAwLi4xMzVhMGM0Cj4gICAgICA+ID4gLS0tIC9kZXYvbnVsbAo+ICAgICAg
PiA+ICsrKyBiL3BhdGNoZXMvMDAwMS1hZGQtaW5pdHJkLXJlbmFtZS1lbnRyeS1wb2ludC5wYXRj
aAo+ICAgICAgPiA+IEBAIC0wLDAgKzEsNDIgQEAKPiAgICAgID4gPiArLS0tIGEvc3JjL2x1YS5j
ICAgICAgMjAxNy0wNC0xOSAxOToyOTo1Ny4wMDAwMDAwMDAgKzAyMDAKPiAgICAgID4gPiArKysr
IGIvc3JjL2x1YS5jICAgICAgMjAxOS0wOS0wMyAxMzozNjowOS40Mzc4MDc4OTAgKzAyMDAKPiAg
ICAgID4gPiArQEAgLTYsNiArNiw4IEBACj4gICAgICA+ID4gKwo+ICAgICAgPiA+ICsgI2RlZmlu
ZSBsdWFfYwo+ICAgICAgPiA+ICsKPiAgICAgID4gPiArKyNpbmNsdWRlIDx1ay9wbGF0L21lbW9y
eS5oPgo+ICAgICAgPiA+ICsrCj4gICAgICA+ID4gKyAjaW5jbHVkZSAibHByZWZpeC5oIgo+ICAg
ICAgPiA+ICsKPiAgICAgID4gPiArCj4gICAgICA+ID4gK0BAIC01NTUsNiArNTU3LDkgQEAKPiAg
ICAgID4gPiArICAgaW50IGFyZ2MgPSAoaW50KWx1YV90b2ludGVnZXIoTCwgMSk7Cj4gICAgICA+
ID4gKyAgIGNoYXIgKiphcmd2ID0gKGNoYXIgKiopbHVhX3RvdXNlcmRhdGEoTCwgMik7Cj4gICAg
ICA+ID4gKyAgIGludCBzY3JpcHQ7Cj4gICAgICA+ID4gKysgIHN0cnVjdCB1a3BsYXRfbWVtcmVn
aW9uX2Rlc2MgaW1nOwo+ICAgICAgPiA+ICsrICBjaGFyICpjc3RyOwo+ICAgICAgPiA+ICsrCj4g
ICAgICA+ID4gKyAgIGludCBhcmdzID0gY29sbGVjdGFyZ3MoYXJndiwgJnNjcmlwdCk7Cj4gICAg
ICA+ID4gKyAgIGx1YUxfY2hlY2t2ZXJzaW9uKEwpOyAgLyogY2hlY2sgdGhhdCBpbnRlcnByZXRl
ciBoYXMgY29ycmVjdCB2ZXJzaW9uICovCj4gICAgICA+ID4gKyAgIGlmIChhcmd2WzBdICYmIGFy
Z3ZbMF1bMF0pIHByb2duYW1lID0gYXJndlswXTsKPiAgICAgID4gPiArQEAgLTU4MSw2ICs1ODYs
MTEgQEAKPiAgICAgID4gPiArICAgICByZXR1cm4gMDsKPiAgICAgID4gPiArICAgaWYgKGFyZ3Mg
JiBoYXNfaSkgIC8qIC1pIG9wdGlvbj8gKi8KPiAgICAgID4gPiArICAgICBkb1JFUEwoTCk7ICAv
KiBkbyByZWFkLWV2YWwtcHJpbnQgbG9vcCAqLwo+ICAgICAgPiA+ICsrICAvKiBzZWUgaWYgc2Ny
aXB0IGlzIGF2YWlsYWJsZSBmcm9tIGluaXRyZCAqLwo+ICAgICAgPiA+ICsrICBlbHNlIGlmICh1
a3BsYXRfbWVtcmVnaW9uX2ZpbmRfaW5pdHJkMCgmaW1nKSA+PSAwKSB7Cj4gICAgICA+ID4gKysg
ICAgY3N0ciA9IChjaGFyICopaW1nLmJhc2U7Cj4gICAgICA+ID4gKysgICAgZG9zdHJpbmcoTCwg
Y3N0ciwgImluaXRyZCIpOwo+ICAgICAgPiA+ICsrICB9Cj4gICAgICA+ID4gKyAgIGVsc2UgaWYg
KHNjcmlwdCA9PSBhcmdjICYmICEoYXJncyAmIChoYXNfZSB8IGhhc192KSkpIHsgIC8qIG5vIGFy
Z3VtZW50cz8KPiAgICAgID4gPiAqLwo+ICAgICAgPiA+ICsgICAgIGlmIChsdWFfc3RkaW5faXNf
dHR5KCkpIHsgIC8qIHJ1bm5pbmcgaW4gaW50ZXJhY3RpdmUgbW9kZT8gKi8KPiAgICAgID4gPiAr
ICAgICAgIHByaW50X3ZlcnNpb24oKTsKPiAgICAgID4gPiArQEAgLTU5Myw3ICs2MDMsNyBAQAo+
ICAgICAgPiA+ICsgfQo+ICAgICAgPiA+ICsKPiAgICAgID4gPiArCj4gICAgICA+ID4gKy1pbnQg
bWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7Cj4gICAgICA+ID4gKytpbnQgbHVhX21haW4g
KGludCBhcmdjLCBjaGFyICoqYXJndikgewo+ICAgICAgPiA+ICsgICBpbnQgc3RhdHVzLCByZXN1
bHQ7Cj4gICAgICA+ID4gKyAgIGx1YV9TdGF0ZSAqTCA9IGx1YUxfbmV3c3RhdGUoKTsgIC8qIGNy
ZWF0ZSBzdGF0ZSAqLwo+ICAgICAgPiA+ICsgICBpZiAoTCA9PSBOVUxMKSB7Cj4gICAgICA+ID4g
LS0KPiAgICAgID4gPiAyLjExLjAKPiAgICAgID4gPgo+ICAgICAgPiA+Cj4gICAgICA+ID4gX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiAgICAgID4gPiBN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gICAgICA+ID4gTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCj4gICAgICA+ID4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAo+ICAgICAgPiBJTVBPUlRBTlQgTk9USUNFOiBUaGUg
Y29udGVudHMgb2YgdGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZQo+ICAgICAgPiBj
b25maWRlbnRpYWwgYW5kIG1heSBhbHNvIGJlIHByaXZpbGVnZWQuIElmIHlvdSBhcmUgbm90IHRo
ZSBpbnRlbmRlZAo+ICAgICAgPiByZWNpcGllbnQsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBp
bW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Nsb3NlIHRoZQo+ICAgICAgPiBjb250ZW50cyB0byBh
bnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJwb3NlLCBvciBzdG9yZSBvciBjb3B5
IHRoZQo+ICAgICAgPiBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFuayB5b3UuCj4gICAg
ICA+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gICAg
ICA+IE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKPiAgICAgID4gTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCj4gICAgICA+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwKPiAgICAgIElNUE9SVEFOVCBOT1RJQ0U6IFRoZSBj
b250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlh
bCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVk
IHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBu
b3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3Ig
YW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRp
dW0uIFRoYW5rIHlvdS4KPiAgICAgIAo+Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KPiBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Cj4gTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAoKLS0gCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 14:16:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 14:16:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9roC-0006e9-65; Mon, 16 Sep 2019 14:16:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=RFMR=XL=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1i9roA-0006e4-VZ
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 14:16:51 +0000
X-Inumbo-ID: 9e535d4c-d88c-11e9-95e7-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9e535d4c-d88c-11e9-95e7-12813bfff9fa;
 Mon, 16 Sep 2019 14:16:48 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 2C7B11056D7;
 Mon, 16 Sep 2019 16:16:47 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id B2YW4w14C2BH; Mon, 16 Sep 2019 16:16:47 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 073831056D4
 for <minios-devel@lists.xenproject.org>; Mon, 16 Sep 2019 16:16:47 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 16 Sep
 2019 16:16:46 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190713053619.32186-1-felipe.huici@neclab.eu>
 <20190713053619.32186-2-felipe.huici@neclab.eu>
 <d1abc294-2ac9-ef10-d344-66069b9ffb33@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <26b6f02c-1f55-24e2-f098-3bbf048c7d95@neclab.eu>
Date: Mon, 16 Sep 2019 16:16:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <d1abc294-2ac9-ef10-d344-66069b9ffb33@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH 1/2] Initial port of
 the axtls library (version 2.1.5)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDkvMTEvMTkgNDo0OSBQTSwgU2hhcmFuIFNhbnRoYW5hbSB3cm90ZToKPiBIZWxsbyBGZWxp
cGUsCj4KPiBQbGVhc2UgZmluZCB0aGUgY29tbWVudCBpbmxpbmU6Cj4KPiBUaGUgcGF0Y2ggZmFp
bHMgdG8gY29tcGlsZSB3aXRoIGZvbGxvd2luZyBlcnJvcjoKPgo+IGJ1aWxkL2xpYmF4dGxzL29y
aWdpbi9heHRscy1jb2RlL3NzbC9vc19wb3J0Lmg6MTM3OjI0OiBmYXRhbCBlcnJvcjogCj4gbmV0
aW5ldC9pbi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5ICNpbmNsdWRlIDxuZXRpbmV0L2lu
Lmg+CgpUaGUgbGlicmFyeSBjb21waWxlIHdpdGggbmV3bGliLiBJdCBpcyB3aXNlIHRvIGFkZCBk
ZXBlbmRlbmN5IGluIApDb25maWcudWsgdG8gbmV3bGliLgoKCj4KPiBUaGFua3MgJiBSZWdhcmRz
Cj4KPiBTaGFyYW4KPgo+IE9uIDcvMTMvMTkgNzozNiBBTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+
PiBOb3RlIGx3aXAgaXMgcmVxdWlyZWQuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWlj
aSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPj4gLS0tCj4+IMKgIENvbmZpZy51a8KgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgNCArKwo+PiDCoCBNYWtlZmlsZS51a8KgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoCB8IDExNyAKPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysKPj4gwqAgZ2x1ZS5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoCB8wqAgMTIgKysrKysKPj4gwqAgaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmggfMKgIDg2
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKgIGluY2x1ZGUvY29uZmln
LmjCoMKgwqDCoMKgwqDCoCB8IDExOCAKPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrCj4+IMKgIDUgZmlsZXMgY2hhbmdlZCwgMzM3IGluc2VydGlvbnMo
KykKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awo+PiDCoCBjcmVhdGUgbW9kZSAx
MDA2NDQgTWFrZWZpbGUudWsKPj4gwqAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdsdWUuYwo+PiDCoCBj
cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKPj4gwqAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IGluY2x1ZGUvY29uZmlnLmgKPj4KPj4gZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBi
L0NvbmZpZy51awo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5lYzhk
YTIxCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvQ29uZmlnLnVrCj4+IEBAIC0wLDAgKzEsNCBA
QAo+PiArbWVudWNvbmZpZyBMSUJBWFRMUwo+PiArwqDCoMKgwqDCoMKgIGJvb2wgImF4VExTIEVt
YmVkZGVkIFNTTCIKPj4gK8KgwqDCoMKgwqDCoCBkZWZhdWx0IG4KPj4gK8KgwqDCoMKgwqDCoCBz
ZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKPiBTZWxlY3QgTElCTFdJUAo+PiBkaWZmIC0t
Z2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+
PiBpbmRleCAwMDAwMDAwLi5jZjUxM2EwCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvTWFrZWZp
bGUudWsKPj4gQEAgLTAsMCArMSwxMTcgQEAKPj4gKyPCoCBsaWJheHRscyBNYWtlZmlsZS51Ywo+
PiArIwo+PiArI8KgIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4KPj4gKyMKPj4gKyMKPj4gKyPCoCBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRk
LiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIAo+PiByZXNlcnZlZC4KPj4gKyMKPj4gKyPC
oCBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKPj4gKyPCoCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPj4gKyPCoCBhcmUgbWV0Ogo+PiArIwo+PiAr
I8KgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Cj4+ICsjwqDCoMKgwqAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+PiArI8KgIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4+ICsj
wqDCoMKgwqAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIAo+PiBpbiB0aGUKPj4gKyPCoMKgwqDCoCBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgCj4+IGRpc3RyaWJ1dGlvbi4KPj4g
KyPCoCAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUg
bmFtZXMgb2YgaXRzCj4+ICsjwqDCoMKgwqAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyAKPj4gZGVyaXZlZCBmcm9tCj4+ICsjwqDCoMKgwqAg
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
Pj4gKyMKPj4gKyPCoCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgCj4+IENPTlRSSUJVVE9SUyAiQVMgSVMiCj4+ICsjwqAgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgCj4+
IFRPLCBUSEUKPj4gKyPCoCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIAo+PiBQQVJUSUNVTEFSIFBVUlBPU0UKPj4gKyPCoCBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgCj4+IENPTlRS
SUJVVE9SUyBCRQo+PiArI8KgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPj4gKyPCoCBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+PiArI8Kg
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiAKPj4gQlVTSU5FU1MKPj4gKyPCoCBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgCj4+IFdIRVRIRVIgSU4KPj4gKyPCoCBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgCj4+IE9USEVSV0lTRSkKPj4gKyPCoCBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiAKPj4gQURWSVNFRCBPRiBUSEUKPj4gKyPCoCBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPj4gKyMKPj4gKyPCoCBUSElTIEhFQURFUiBNQVkg
Tk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+PiArIwo+PiArCj4+ICsj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAKPj4KPj4gKyMgTGlicmFyeSByZWdpc3RyYXRpb24KPj4g
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArJChldmFsICQoY2FsbCBhZGRsaWJfcyxs
aWJheHRscywkKENPTkZJR19MSUJBWFRMUykpKQo+PiArCj4+ICsjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyAKPj4KPj4gKyMgU291cmNlcwo+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgCj4+Cj4+
ICtMSUJBWFRMU19WRVJTSU9OPTIuMS41Cj4+ICtMSUJBWFRMU19VUkw9aHR0cHM6Ly9zb3VyY2Vm
b3JnZS5uZXQvcHJvamVjdHMvYXh0bHMvZmlsZXMvMi4xLjUvYXhUTFMtMi4xLjUudGFyLmd6L2Rv
d25sb2FkIAo+Pgo+IHMvMi4xLjUvJChMSUJBWFRMU19WRVJTSU9OKQo+PiArTElCQVhUTFNfUEFU
Q0hESVI9JChMSUJBWFRMU19CQVNFKS9wYXRjaGVzCj4+ICskKGV2YWwgJChjYWxsIAo+PiBmZXRj
aGFzLGxpYmF4dGxzLCQoTElCQVhUTFNfVVJMKSwkKExJQkFYVExTX1ZFUlNJT04pLnRneikpCj4+
ICskKGV2YWwgJChjYWxsIAo+PiBwYXRjaCxsaWJheHRscywkKExJQkFYVExTX1BBVENIRElSKSxs
aWJheHRscy0kKExJQkFYVExTX1ZFUlNJT04pKSkKPj4gKwo+PiArIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMgCj4+Cj4+ICsjIEhlbHBlcnMKPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+
PiArTElCQVhUTFNfU1JDPSQoTElCQVhUTFNfT1JJR0lOKS9heHRscy1jb2RlCj4+ICsKPj4gKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArIyBMaWJyYXJ5IGluY2x1ZGVzCj4+ICsjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyAKPj4KPj4gK0NJTkNMVURFUy0kKENPTkZJR19MSUJBWFRMUykg
Kz3CoMKgIC1JJChMSUJBWFRMU19TUkMpL2luY2x1ZGUgXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC1JJChMSUJB
WFRMU19TUkMpL2NyeXB0b8KgIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAtSSQoTElCQVhUTFNfU1JDKS9zc2zC
oMKgwqDCoCBcCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLUkkKExJQkFYVExTX0JBU0UpL2luY2x1ZGUKPgo+IFNo
b3VsZCB0aGXCoCAkKExJQkFYVExTX0JBU0UpL2luY2x1ZGUgYmUgYSBnbG9iYWwgQ0lOQ0xVREUg
b3IgbGlicmFyeSAKPiBzcGVjaWZpYy4gVGhpcyBtYWluIGZ1bmN0aW9uYWxpdHkgaXQgcHJvdmlk
ZXMgYXJlIHRoZSBjb25maWcuaCBhbmQgCj4gYnl0ZW9yZGVyLmguIFNob3VsZG4ndCB0aGUgY29u
ZmlnLmggYmUgc3BlY2lmaWMgdG8gdGhlIGxpYnJhcnkuIFNpbmNlIAo+IHdlIGRvbnQgaGF2ZSBh
IGV4cG9ydHN5bS51ay4gRG8gd2Ugd2FudCB0byBhZGQgaXQgYXMgYSBDSU5DTFVERVMgYXMgCj4g
dGhlIGltcGxlbWVudGF0aW9uIGlzIGdvaW5nIHRvIGhpZGRlbiB3aXRoaW4gdGhpcyBsaWJyYXJ5
Lgo+Cj4KPj4gKwo+PiArQ1hYSU5DTFVERVMtJChDT05GSUdfTElCQVhUTFMpICs9IC1JJChMSUJB
WFRMU19TUkMpL2luY2x1ZGUgXAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC1JJChMSUJBWFRMU19TUkMpL2NyeXB0
b8KgIFwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoCAtSSQoTElCQVhUTFNfU1JDKS9zc2zCoMKgwqDCoCBcCj4+ICvC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqAgLUkkKExJQkFYVExTX0JBU0UpL2luY2x1ZGUKPj4gKwo+PiArIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMgCj4+Cj4+ICsjIEdsb2JhbCBmbGFncwo+PiArIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMgCj4+Cj4+ICtMSUJBWFRMU19DRkxBR1MteSArPSAtREhBVkVfQ09ORklHX0gKPj4gKwo+
PiArIyBTdXBwcmVzcyBzb21lIHdhcm5pbmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nlc3MgbG9v
ayBuZWF0ZXIKPj4gK1NVUFBSRVNTX0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25v
LXVudXNlZC12YXJpYWJsZSAKPj4gLVduby1ub25udWxswqDCoMKgwqDCoMKgIFwKPj4gKy1Xbm8t
dW51c2VkLWJ1dC1zZXQtdmFyaWFibGUgLVduby11bnVzZWQtbGFiZWwgCj4+IC1Xbm8tY2hhci1z
dWJzY3JpcHRzwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gKy1Xbm8tdW51c2VkLWZ1bmN0
aW9uIC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMgCj4+IC1Xbm8tdW5pbml0aWFsaXpl
ZMKgwqDCoMKgwqDCoMKgwqAgXAo+PiArLVduby1hcnJheS1ib3VuZHMgLVduby1tYXliZS11bmlu
aXRpYWxpemVkIC1Xbm8tcG9pbnRlci1zaWduIAo+PiAtV25vLXVudXNlZC12YWx1ZcKgIFwKPj4g
Ky1Xbm8tdW51c2VkLW1hY3JvcyAtV25vLXBhcmVudGhlc2VzIAo+PiAtV25vLWltcGxpY2l0LWZ1
bmN0aW9uLWRlY2xhcmF0aW9uwqDCoMKgwqDCoMKgwqDCoMKgIFwKPj4gKy1Xbm8tbWlzc2luZy1i
cmFjZXMgLVduby1lbmRpZi1sYWJlbHMgCj4+IC1Xbm8tdW51c2VkLWJ1dC1zZXQtdmFyaWFibGXC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4+ICstV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRl
Y2xhcmF0aW9uIC1Xbm8tdHlwZS1saW1pdHMgLVduby1zaWduLWNvbXBhcmUKPiBXbm8taW1wbGlj
aXQtZnVuY3Rpb24tZGVjbGFyYXRpb24sIFduby1hcnJheS1ib3VuZHMsIFduby10eXBlLWxpbWl0
cwo+PiArCj4+ICtMSUJBWFRMU19DRkxBR1MtecKgwqAgKz0gJChTVVBQUkVTU19GTEFHUykKPj4g
K0xJQkFYVExTX0NYWEZMQUdTLXkgKz0gJChTVVBQUkVTU19GTEFHUykKPj4gKwo+PiArIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMgCj4+Cj4+ICsjIE9TIGRlcGVuZGVuY2llcyBjb2RlIC0gR2x1ZSBi
ZXR3ZWVuIFVuaWtmcmFmdCBhbmQgYXh0bHMKPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+
Pgo+PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfQkFTRSkvZ2x1ZS5jCj4+ICsKPj4g
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArIyBheHRscyBjb2RlIC0gY3J5cHRvCj4+
ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAKPj4KPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJ
QkFYVExTX1NSQykvY3J5cHRvL2Flcy5jCj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRM
U19TUkMpL2NyeXB0by9iaWdpbnQuYwo+PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNf
U1JDKS9jcnlwdG8vY3J5cHRvX21pc2MuYwo+PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhU
TFNfU1JDKS9jcnlwdG8vaG1hYy5jCj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19T
UkMpL2NyeXB0by9tZDUuYwo+PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9j
cnlwdG8vcmM0LmMKPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRv
L3JzYS5jCj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGEx
LmMKPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3NoYTI1Ni5j
Cj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGEzODQuYwo+
PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9jcnlwdG8vc2hhNTEyLmMKPj4g
Kwo+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgCj4+Cj4+ICsjIGF4dGxzIGNvZGUgLSBzc2wK
Pj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIAo+Pgo+PiArTElCQVhUTFNfU1JDUy15ICs9ICQo
TElCQVhUTFNfU1JDKS9zc2wvYXNuMS5jCj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRM
U19TUkMpL3NzbC9nZW5fY2VydC5jCj4KPiBXaXRob3V0IHRoaXMgc3ltYm9sIENPTkZJR19TU0xf
R0VORVJBVEVfWDUwOV9DRVJULCB0aGlzIGlzIGEgZW1wdHkgCj4gZmlsZT8gU2luY2Ugd2UgdW5k
ZWYgaXQgZG8gd2UgbmVlZCB0aGlzPwo+Cj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRM
U19TUkMpL3NzbC9sb2FkZXIuYwo+PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JD
KS9zc2wvb3BlbnNzbC5jCj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3Nz
bC9vc19wb3J0LmMKPiBUaGVyZSBhcmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdG8gdGhlIFdJ
TjMyLiBXZSBwcm9iYWJseSBkb24ndCBuZWVkIAo+IHRoaXMKPj4gK0xJQkFYVExTX1NSQ1MteSAr
PSAkKExJQkFYVExTX1NSQykvc3NsL3AxMi5jCj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJB
WFRMU19TUkMpL3NzbC90bHMxLmMKPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NS
Qykvc3NsL3RsczFfc3ZyLmMKPgo+PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JD
KS9zc2wvdGxzMV9jbG50LmMKPiBUaGlzIGRlcGVuZCBvbiBDT05GSUdfU1NMX0VOQUJMRV9DTElF
TlQgd2hpY2ggaXMgZGlzYWJsZWQuCj4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19T
UkMpL3NzbC94NTA5LmMKPj4gZGlmZiAtLWdpdCBhL2dsdWUuYyBiL2dsdWUuYwo+PiBuZXcgZmls
ZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi43MTM4ZjlkCj4+IC0tLSAvZGV2L251bGwK
Pj4gKysrIGIvZ2x1ZS5jCj4+IEBAIC0wLDAgKzEsMTIgQEAKPj4gKy8qIEFjY29yZGluZyB0byBQ
T1NJWC4xLTIwMDEsIFBPU0lYLjEtMjAwOCAqLwo+PiArI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4K
Pj4gKwo+PiArLyogQWNjb3JkaW5nIHRvIGVhcmxpZXIgc3RhbmRhcmRzICovCj4+ICsjaW5jbHVk
ZSA8c3lzL3RpbWUuaD4KPj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPj4gKyNpbmNsdWRlIDx1
bmlzdGQuaD4KPj4gKwo+PiAraW50IHNlbGVjdChpbnQgbmZkcywgZmRfc2V0ICpyZWFkZmRzLCBm
ZF9zZXQgKndyaXRlZmRzLAo+PiArwqDCoMKgwqDCoMKgIGZkX3NldCAqZXhjZXB0ZmRzLCBzdHJ1
Y3QgdGltZXZhbCAqdGltZW91dCkgewo+PiArwqDCoMKgIHJldHVybiAtMTsKPj4gK30KPj4gZGlm
ZiAtLWdpdCBhL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20vYnl0ZW9yZGVy
LmgKPgo+IFdvdWxkIGl0IGJlIGJldHRlciB0byBhZGQgdGhpcyBmaWxlIHdpdGhpbiBsaWJjcz8K
Pgo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5mMzc0N2ViCj4+IC0t
LSAvZGV2L251bGwKPj4gKysrIGIvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKPj4gQEAgLTAsMCAr
MSw4NiBAQAo+PiArLyogVGFrZW4gZnJvbSBtdXNsJ3MgZW5kaWFuLmggKi8KPj4gKwo+PiArI2lm
bmRlZiBMSUJBWFRMU19HTFVFX0VORElBTl9ICj4+ICsjZGVmaW5lIExJQkFYVExTX0dMVUVfRU5E
SUFOX0gKPj4gKwo+PiArCj4+ICsvKiAjaW5jbHVkZSA8ZmVhdHVyZXMuaD4gKi8KPj4gKwo+PiAr
I2RlZmluZSBfX0xJVFRMRV9FTkRJQU4gMTIzNAo+PiArI2RlZmluZSBfX0JJR19FTkRJQU4gNDMy
MQo+PiArI2RlZmluZSBfX1BEUF9FTkRJQU4gMzQxMgo+PiArCj4+ICsvKiAjaWYgZGVmaW5lZChf
X0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JERVJfXykgKi8KPj4gKyNkZWZpbmUgX19CWVRF
X09SREVSIF9fQllURV9PUkRFUl9fCj4+ICsvKgo+PiArI2Vsc2UKPj4gKyNpbmNsdWRlIDxiaXRz
L2VuZGlhbi5oPgo+PiArI2VuZGlmCj4+ICsqLwo+PiArLyogI2lmIGRlZmluZWQoX0dOVV9TT1VS
Q0UpIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpICovCj4+ICsKPj4gKyNkZWZpbmUgQklHX0VORElB
TiBfX0JJR19FTkRJQU4KPj4gKyNkZWZpbmUgTElUVExFX0VORElBTiBfX0xJVFRMRV9FTkRJQU4K
Pj4gKyNkZWZpbmUgUERQX0VORElBTiBfX1BEUF9FTkRJQU4KPj4gKyNkZWZpbmUgQllURV9PUkRF
UiBfX0JZVEVfT1JERVIKPj4gKwo+PiArI2luY2x1ZGUgPHN0ZGludC5oPgo+PiArCj4+ICtzdGF0
aWMgX19pbmxpbmUgdWludDE2X3QgX19ic3dhcDE2KHVpbnQxNl90IF9feCkKPj4gK3sKPj4gK8Kg
wqDCoCByZXR1cm4gX194PDw4IHwgX194Pj44Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgX19pbmxp
bmUgdWludDMyX3QgX19ic3dhcDMyKHVpbnQzMl90IF9feCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1
cm4gX194Pj4yNCB8IF9feD4+OCYweGZmMDAgfCBfX3g8PDgmMHhmZjAwMDAgfCBfX3g8PDI0Owo+
PiArfQo+PiArCj4+ICtzdGF0aWMgX19pbmxpbmUgdWludDY0X3QgX19ic3dhcDY0KHVpbnQ2NF90
IF9feCkKPj4gK3sKPj4gK8KgwqDCoCByZXR1cm4gX19ic3dhcDMyKF9feCkrMFVMTDw8MzIgfCBf
X2Jzd2FwMzIoX194Pj4zMik7Cj4+ICt9Cj4+ICsKPj4gKyNpZiBfX0JZVEVfT1JERVIgPT0gX19M
SVRUTEVfRU5ESUFOCj4+ICsjZGVmaW5lIGh0b2JlMTYoeCkgX19ic3dhcDE2KHgpCj4+ICsjZGVm
aW5lIGJlMTZ0b2goeCkgX19ic3dhcDE2KHgpCj4+ICsjZGVmaW5lIGJldG9oMTYoeCkgX19ic3dh
cDE2KHgpCj4+ICsjZGVmaW5lIGh0b2JlMzIoeCkgX19ic3dhcDMyKHgpCj4+ICsjZGVmaW5lIGJl
MzJ0b2goeCkgX19ic3dhcDMyKHgpCj4+ICsjZGVmaW5lIGJldG9oMzIoeCkgX19ic3dhcDMyKHgp
Cj4+ICsjZGVmaW5lIGh0b2JlNjQoeCkgX19ic3dhcDY0KHgpCj4+ICsjZGVmaW5lIGJlNjR0b2go
eCkgX19ic3dhcDY0KHgpCj4+ICsjZGVmaW5lIGJldG9oNjQoeCkgX19ic3dhcDY0KHgpCj4+ICsj
ZGVmaW5lIGh0b2xlMTYoeCkgKHVpbnQxNl90KSh4KQo+PiArI2RlZmluZSBsZTE2dG9oKHgpICh1
aW50MTZfdCkoeCkKPj4gKyNkZWZpbmUgbGV0b2gxNih4KSAodWludDE2X3QpKHgpCj4+ICsjZGVm
aW5lIGh0b2xlMzIoeCkgKHVpbnQzMl90KSh4KQo+PiArI2RlZmluZSBsZTMydG9oKHgpICh1aW50
MzJfdCkoeCkKPj4gKyNkZWZpbmUgbGV0b2gzMih4KSAodWludDMyX3QpKHgpCj4+ICsjZGVmaW5l
IGh0b2xlNjQoeCkgKHVpbnQ2NF90KSh4KQo+PiArI2RlZmluZSBsZTY0dG9oKHgpICh1aW50NjRf
dCkoeCkKPj4gKyNkZWZpbmUgbGV0b2g2NCh4KSAodWludDY0X3QpKHgpCj4+ICsjZWxzZQo+PiAr
I2RlZmluZSBodG9iZTE2KHgpICh1aW50MTZfdCkoeCkKPj4gKyNkZWZpbmUgYmUxNnRvaCh4KSAo
dWludDE2X3QpKHgpCj4+ICsjZGVmaW5lIGJldG9oMTYoeCkgKHVpbnQxNl90KSh4KQo+PiArI2Rl
ZmluZSBodG9iZTMyKHgpICh1aW50MzJfdCkoeCkKPj4gKyNkZWZpbmUgYmUzMnRvaCh4KSAodWlu
dDMyX3QpKHgpCj4+ICsjZGVmaW5lIGJldG9oMzIoeCkgKHVpbnQzMl90KSh4KQo+PiArI2RlZmlu
ZSBodG9iZTY0KHgpICh1aW50NjRfdCkoeCkKPj4gKyNkZWZpbmUgYmU2NHRvaCh4KSAodWludDY0
X3QpKHgpCj4+ICsjZGVmaW5lIGJldG9oNjQoeCkgKHVpbnQ2NF90KSh4KQo+PiArI2RlZmluZSBo
dG9sZTE2KHgpIF9fYnN3YXAxNih4KXYKPj4gKyNkZWZpbmUgbGUxNnRvaCh4KSBfX2Jzd2FwMTYo
eCkKPj4gKyNkZWZpbmUgbGV0b2gxNih4KSBfX2Jzd2FwMTYoeCkKPj4gKyNkZWZpbmUgaHRvbGUz
Mih4KSBfX2Jzd2FwMzIoeCkKPj4gKyNkZWZpbmUgbGUzMnRvaCh4KSBfX2Jzd2FwMzIoeCkKPj4g
KyNkZWZpbmUgbGV0b2gzMih4KSBfX2Jzd2FwMzIoeCkKPj4gKyNkZWZpbmUgaHRvbGU2NCh4KSBf
X2Jzd2FwNjQoeCkKPj4gKyNkZWZpbmUgbGU2NHRvaCh4KSBfX2Jzd2FwNjQoeCkKPj4gKyNkZWZp
bmUgbGV0b2g2NCh4KSBfX2Jzd2FwNjQoeCkKPj4gKyNlbmRpZgo+PiArCj4+ICsvKiAjZW5kaWYg
Ki8KPj4gKwo+PiArI2VuZGlmCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2NvbmZpZy5oIGIvaW5j
bHVkZS9jb25maWcuaAo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwLi5h
Y2QyOTczCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvaW5jbHVkZS9jb25maWcuaAo+PiBAQCAt
MCwwICsxLDExOCBAQAo+PiArLyoKPj4gKyAqIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGhlYWRl
ciBmaWxlOiBkb24ndCBlZGl0Cj4+ICsgKi8KPj4gKwo+PiArI2RlZmluZSBIQVZFX0RPVF9DT05G
SUcgMQo+PiArI2RlZmluZSBDT05GSUdfUExBVEZPUk1fTElOVVggMQo+Cj4gU2hvdWxkIHdlIGhh
dmUgdGhpcyBDT05GSUdfUExBVEZPUk1fTElOVVg/Cj4KPgo+PiArI3VuZGVmIENPTkZJR19QTEFU
Rk9STV9DWUdXSU4KPj4gKyN1bmRlZiBDT05GSUdfUExBVEZPUk1fV0lOMzIKPj4gKwo+PiArLyoK
Pj4gKyAqIEdlbmVyYWwgQ29uZmlndXJhdGlvbgo+PiArICovCj4+ICsjZGVmaW5lIFBSRUZJWCAi
L3Vzci9sb2NhbCIKPiBXZSBkb24ndCBuZWVkIFBSRUZJWD8KPj4gKyN1bmRlZiBDT05GSUdfREVC
VUcKPgo+IFNob3VsZCB3ZSBoYXZlIHRoaXMKPgo+ICNpZmRlZiBVS19ERUJVRwo+Cj4gI2RlZmlu
ZSBDT05GSUdfREVCVUcKPgo+ICNlbHNlCj4KPiAjdW5kZWYgQ09ORklHX0RFQlVHCj4KPiAjZW5k
aWYgLyogVUtfREVCVUcgKi8KPgo+PiArI2RlZmluZSBDT05GSUdfU1RSSVBfVU5XQU5URURfU0VD
VElPTlMgMQo+PiArI3VuZGVmIENPTkZJR19WSVNVQUxfU1RVRElPXzdfMAo+PiArI3VuZGVmIENP
TkZJR19WSVNVQUxfU1RVRElPXzhfMAo+PiArI3VuZGVmIENPTkZJR19WSVNVQUxfU1RVRElPXzEw
XzAKPj4gKyNkZWZpbmUgQ09ORklHX1ZJU1VBTF9TVFVESU9fN18wX0JBU0UgIiIKPj4gKyNkZWZp
bmUgQ09ORklHX1ZJU1VBTF9TVFVESU9fOF8wX0JBU0UgIiIKPj4gKyNkZWZpbmUgQ09ORklHX1ZJ
U1VBTF9TVFVESU9fMTBfMF9CQVNFICIiCj4+ICsjZGVmaW5lIENPTkZJR19FWFRSQV9DRkxBR1Nf
T1BUSU9OUyAiIgo+PiArI2RlZmluZSBDT05GSUdfRVhUUkFfTERGTEFHU19PUFRJT05TICIiCj4+
ICsKPj4gKy8qCj4+ICsgKiBTU0wgTGlicmFyeQo+PiArICovCj4+ICsjdW5kZWYgQ09ORklHX1NT
TF9TRVJWRVJfT05MWQo+PiArI3VuZGVmIENPTkZJR19TU0xfQ0VSVF9WRVJJRklDQVRJT04KPj4g
KyN1bmRlZiBDT05GSUdfU1NMX0VOQUJMRV9DTElFTlQKPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9G
VUxMX01PREUgMQo+PiArI3VuZGVmIENPTkZJR19TU0xfU0tFTEVUT05fTU9ERQo+PiArI3VuZGVm
IENPTkZJR19TU0xfUFJPVF9MT1cKPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9QUk9UX01FRElVTSAx
Cj4+ICsjdW5kZWYgQ09ORklHX1NTTF9QUk9UX0hJR0gKPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9V
U0VfREVGQVVMVF9LRVkgMQo+PiArI2RlZmluZSBDT05GSUdfU1NMX1BSSVZBVEVfS0VZX0xPQ0FU
SU9OICIiCj4+ICsjZGVmaW5lIENPTkZJR19TU0xfUFJJVkFURV9LRVlfUEFTU1dPUkQgIiIKPj4g
KyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5X0NFUlRfTE9DQVRJT04gIiIKPj4gKyN1bmRlZiBDT05G
SUdfU1NMX0dFTkVSQVRFX1g1MDlfQ0VSVAo+PiArI2RlZmluZSBDT05GSUdfU1NMX1g1MDlfQ09N
TU9OX05BTUUgIiIKPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5X09SR0FOSVpBVElPTl9OQU1F
ICIiCj4+ICsjZGVmaW5lIENPTkZJR19TU0xfWDUwOV9PUkdBTklaQVRJT05fVU5JVF9OQU1FICIi
Cj4+ICsjZGVmaW5lIENPTkZJR19TU0xfSEFTX1BFTSAxCj4+ICsjZGVmaW5lIENPTkZJR19TU0xf
VVNFX1BLQ1MxMiAxCj4+ICsjZGVmaW5lIENPTkZJR19TU0xfRVhQSVJZX1RJTUUgMjQKPj4gKyNk
ZWZpbmUgQ09ORklHX1g1MDlfTUFYX0NBX0NFUlRTIDE1MAo+PiArI2RlZmluZSBDT05GSUdfU1NM
X01BWF9DRVJUUyAzCj4+ICsjdW5kZWYgQ09ORklHX1NTTF9DVFhfTVVURVhJTkcKPj4gKyNkZWZp
bmUgQ09ORklHX1VTRV9ERVZfVVJBTkRPTSAxCj4gRG8gd2UgbmVlZCB0aGlzIGNvbmZpZ3VyYXRp
b24gZW5hYmxlZD8gSWYgc28gdGhlbiBkb24ndCB3ZSBuZWVkIHRoZSAKPiBkZXZmcyBlbmFibGVk
Lgo+PiArI3VuZGVmIENPTkZJR19XSU4zMl9VU0VfQ1JZUFRPX0xJQgo+PiArI2RlZmluZSBDT05G
SUdfT1BFTlNTTF9DT01QQVRJQkxFIDEKPj4gKyN1bmRlZiBDT05GSUdfUEVSRk9STUFOQ0VfVEVT
VElORwo+PiArI3VuZGVmIENPTkZJR19TU0xfVEVTVAo+PiArI2RlZmluZSBDT05GSUdfQVhUTFNX
UkFQIDEKPj4gKyN1bmRlZiBDT05GSUdfQVhIVFRQRAo+PiArI3VuZGVmIENPTkZJR19IVFRQX1NU
QVRJQ19CVUlMRAo+PiArI2RlZmluZSBDT05GSUdfSFRUUF9QT1JUCj4gV2hlcmUgd291bGQgdGhp
cyBiZSB1c2VkIHNpbmNlIHdlIGRvbid0IGluY2x1ZGUgaHR0cGQgc291cmNlIGRpcmVjdG9yaWVz
Pwo+PiArI2RlZmluZSBDT05GSUdfSFRUUF9IVFRQU19QT1JUCj4+ICsjZGVmaW5lIENPTkZJR19I
VFRQX1NFU1NJT05fQ0FDSEVfU0laRQo+PiArI2RlZmluZSBDT05GSUdfSFRUUF9XRUJST09UICIi
Cj4+ICsjZGVmaW5lIENPTkZJR19IVFRQX1RJTUVPVVQKPj4gKyN1bmRlZiBDT05GSUdfSFRUUF9I
QVNfQ0dJCj4+ICsjZGVmaW5lIENPTkZJR19IVFRQX0NHSV9FWFRFTlNJT05TICIiCj4+ICsjdW5k
ZWYgQ09ORklHX0hUVFBfRU5BQkxFX0xVQQo+PiArI2RlZmluZSBDT05GSUdfSFRUUF9MVUFfUFJF
RklYICIiCj4+ICsjdW5kZWYgQ09ORklHX0hUVFBfQlVJTERfTFVBCj4+ICsjZGVmaW5lIENPTkZJ
R19IVFRQX0NHSV9MQVVOQ0hFUiAiIgo+PiArI3VuZGVmIENPTkZJR19IVFRQX0RJUkVDVE9SSUVT
Cj4+ICsjdW5kZWYgQ09ORklHX0hUVFBfSEFTX0FVVEhPUklaQVRJT04KPj4gKyN1bmRlZiBDT05G
SUdfSFRUUF9IQVNfSVBWNgo+PiArI3VuZGVmIENPTkZJR19IVFRQX0VOQUJMRV9ESUZGRVJFTlRf
VVNFUgo+PiArI2RlZmluZSBDT05GSUdfSFRUUF9VU0VSICIiCj4+ICsjdW5kZWYgQ09ORklHX0hU
VFBfVkVSQk9TRQo+PiArI3VuZGVmIENPTkZJR19IVFRQX0lTX0RBRU1PTgo+PiArCj4+ICsvKgo+
PiArICogTGFuZ3VhZ2UgQmluZGluZ3MKPj4gKyAqLwo+PiArI3VuZGVmIENPTkZJR19CSU5ESU5H
Uwo+PiArI3VuZGVmIENPTkZJR19DU0hBUlBfQklORElOR1MKPj4gKyN1bmRlZiBDT05GSUdfVkJO
RVRfQklORElOR1MKPj4gKyNkZWZpbmUgQ09ORklHX0RPVF9ORVRfRlJBTUVXT1JLX0JBU0UgIiIK
Pj4gKyN1bmRlZiBDT05GSUdfSkFWQV9CSU5ESU5HUwo+PiArI2RlZmluZSBDT05GSUdfSkFWQV9I
T01FICIiCj4+ICsjdW5kZWYgQ09ORklHX1BFUkxfQklORElOR1MKPj4gKyNkZWZpbmUgQ09ORklH
X1BFUkxfQ09SRSAiIgo+PiArI2RlZmluZSBDT05GSUdfUEVSTF9MSUIgIiIKPj4gKyN1bmRlZiBD
T05GSUdfTFVBX0JJTkRJTkdTCj4+ICsjZGVmaW5lIENPTkZJR19MVUFfQ09SRSAiIgo+PiArCj4+
ICsvKgo+PiArICogU2FtcGxlcwo+PiArICovCj4+ICsjdW5kZWYgQ09ORklHX1NBTVBMRVMKPj4g
KyN1bmRlZiBDT05GSUdfQ19TQU1QTEVTCj4+ICsjdW5kZWYgQ09ORklHX0NTSEFSUF9TQU1QTEVT
Cj4+ICsjdW5kZWYgQ09ORklHX1ZCTkVUX1NBTVBMRVMKPj4gKyN1bmRlZiBDT05GSUdfSkFWQV9T
QU1QTEVTCj4+ICsjdW5kZWYgQ09ORklHX1BFUkxfU0FNUExFUwo+PiArI3VuZGVmIENPTkZJR19M
VUFfU0FNUExFUwo+PiArCj4+ICsvKgo+PiArICogQmlnSW50IE9wdGlvbnMKPj4gKyAqLwo+PiAr
I3VuZGVmIENPTkZJR19CSUdJTlRfQ0xBU1NJQ0FMCj4+ICsjdW5kZWYgQ09ORklHX0JJR0lOVF9N
T05UR09NRVJZCj4+ICsjZGVmaW5lIENPTkZJR19CSUdJTlRfQkFSUkVUVCAxCj4+ICsjZGVmaW5l
IENPTkZJR19CSUdJTlRfQ1JUIDEKPj4gKyN1bmRlZiBDT05GSUdfQklHSU5UX0tBUkFUU1VCQQo+
PiArI2RlZmluZSBNVUxfS0FSQVRTVUJBX1RIUkVTSAo+PiArI2RlZmluZSBTUVVfS0FSQVRTVUJB
X1RIUkVTSAo+PiArI2RlZmluZSBDT05GSUdfQklHSU5UX1NMSURJTkdfV0lORE9XIDEKPj4gKyNk
ZWZpbmUgQ09ORklHX0JJR0lOVF9TUVVBUkUgMQo+PiArI3VuZGVmIENPTkZJR19CSUdJTlRfQ0hF
Q0tfT04KPj4gKyNkZWZpbmUgQ09ORklHX0lOVEVHRVJfMzJCSVQgMQo+PiArI3VuZGVmIENPTkZJ
R19JTlRFR0VSXzE2QklUCj4+ICsjdW5kZWYgQ09ORklHX0lOVEVHRVJfOEJJVAo+Cj4gX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Cj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4gaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 16 19:53:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 16 Sep 2019 19:53:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1i9x3t-0007S5-0e; Mon, 16 Sep 2019 19:53:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=wtsf=XL=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1i9x3r-0007Rw-Dw
 for minios-devel@lists.xenproject.org; Mon, 16 Sep 2019 19:53:23 +0000
X-Inumbo-ID: a2308a96-d8bb-11e9-978d-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id a2308a96-d8bb-11e9-978d-bc764e2007e4;
 Mon, 16 Sep 2019 19:53:20 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 012F028;
 Mon, 16 Sep 2019 12:53:20 -0700 (PDT)
Received: from [10.37.12.66] (unknown [10.37.12.66])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 8A3523F575;
 Mon, 16 Sep 2019 12:53:18 -0700 (PDT)
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
Date: Mon, 16 Sep 2019 20:53:17 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xNi8xOSA4OjUyIEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90
ZToKPiBIaSAgU2FudGlhZ28KCkhpIGFsbCwKCkBTYW50aWFnbywgaXQgaXMgcXVpdGUgZGlmZmlj
dWx0IHRvIGZvbGxvdyB0aGUgdGhyZWFkIHdoZW4geW91IHN0YXJ0IAp5b3VyIGFuc3dlciB3aXRo
ICJDT01NRU5UIi4gTWF5IEkgYXNrIHlvdSB0byBjb25maWd1cmUgeW91ciBlLW1haWwgCmNsaWVu
dCB0byBxdW90ZSBwcm9wZXJseSAoaS5lID4pPwoKRnVydGhlcm1vcmUsIGRpc2NsYWltZXIgZm9v
dGVyIHNob3VsZCBiZSBhdm9pZGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QuIApZb3UgYXJlIGJhc2lj
YWxseSBzYXlpbmcgdGhpcyBpcyBjb25maWRlbnRpYWwgYnV0IHlvdSBzZW5kIHRvIGV2ZXJ5b25l
IAoobWFpbGluZyBsaXN0IGFyZSBhcmNoaXZlZCkuLi4KClsuLi5dCgo+PiBDT01NRU5UOiBUaGVy
ZSBpcyBub3RoaW5nIHRoYXQgd2Ugd291bGQgbGlrZSB0byBkbyBoZXJlPyBOb3QgZXZlbgo+PiBk
aXNhYmxlIHRoZSBJUlE/IEFzIHRoZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUgY291
bnRlciBvdmVyZmxvd3MKPj4gd2Ugd291bGQgZ2V0IGEgbmV3IGludGVycnVwdCBvdGhlcndpc2Ug
KGFsdGhvdWdoIHRoZSBvdmVyZmxvdyBjb3VsZAo+PiBoYXBwZW4gaW4gYSB2ZXJ5IHZlcnkgbG9u
ZyB0aW1lLCByaWdodD8pCj4gCj4gSW4gcHJldmlvdXMgdmVyc2lvbiwgd2UgYWRkZWQgYSBnZW5l
cmljX3RpbWVyX21hc2tfaXJxKCkgaW4KPiBnZW5lcmljX3RpbWVyX2lycV9oYW5kbGVyLiBCdXQg
YXMgcGVyIHRoZSBzdWdnZXN0aW9uIFsxXSBmcm9tIEp1bGllbiwgd2UKPiByZW1vdmVkIGl0LiBC
ZXNpZGVzLCB3ZSByZWZlcnJlZCB0byB0aGUgbWluaW9zIGxvZ2ljIGF0IFsyXSwgaXQgb25seSBj
YWxsZWQKPiB1bm1hc2sgYW5kIG1hc2sgaW4gYmxvY2tfZG9tYWluICh3aGljaCBpcyBlcXVpdmFs
ZW50IHRvIHVuaWtyYWZ0J3MKPiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykKCkxvb2tpbmcgYXQg
bXkgY29tbWVudHMgYWdhaW4sIEkgYW0gbm90IHN1cmUgd2hlcmUgSSBzdWdnZXN0ZWQgdG8gcmVt
b3ZlIApnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkuLi4gQ2FuIHlvdSBleHBhbmQgaXQ/CgpGV0lX
LCB0aGUgdHdvIG1haW4gY29tbWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb25zIHdlcmU6CiAg
ICAxKSBpc2IoKSBzaG91bGQgYmUgYWRkZWQgYWZ0ZXIgdXBkYXRpbmcgdGhlIHN5c3RlbSByZWdp
c3RlciB0byAKZW5zdXJlIHRoYXQgdGhlIHN5c3RlbSBzeXN0ZW0gaXMgc3luY2hyb25pemVkCiAg
ICAyKSBUaGlzIGlzIGNvbW1vbiBjb2RlIGJldHdlZW4gYXJtMzIgYW5kIGFybTY0LiBCdXQgdGhl
IHN5c3RlbSAKcmVnaXN0ZXIgbmFtZSBhcmUgYXJtNjQuLi4gQWNjZXNzZXMgc2hvdWxkIGJlIHN0
dWIgaW4gYXJjaC1zcGVjaWZpYyAKaGVhZGVyIHNvIHRoZSBjb2RlIGNhbiB3b3JrIGZvciBib3Ro
IGFybTMyIGFuZCBhcm02NC4KCiBGcm9tIGEgcXVpY2sgbG9vayAxKSBoYXMgYmVlbiBhZGRyZXNz
ZWQsIDIpIGlzIHN0aWxsIHBlbmRpbmcuCgpDaGVlcnMsCgotLSAKSnVsaWVuIEdyYWxsCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 06:29:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 06:29:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA6zb-00030G-Cs; Tue, 17 Sep 2019 06:29:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iA6zZ-0002zn-V1
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 06:29:38 +0000
X-Inumbo-ID: 8399e628-d914-11e9-9602-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8399e628-d914-11e9-9602-12813bfff9fa;
 Tue, 17 Sep 2019 06:29:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E43B4F2019;
 Tue, 17 Sep 2019 08:29:33 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id dQwHNnA_D1z5; Tue, 17 Sep 2019 08:29:33 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id AFA1DF2011
 for <minios-devel@lists.xenproject.org>; Tue, 17 Sep 2019 08:29:31 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Sep
 2019 08:29:31 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.008; Tue, 17 Sep 2019 08:29:31
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH 1/2] Initial port of the
 axtls library (version 2.1.5)
Thread-Index: AQHVOTzsYy/CAZ7ui0iv5e/uoyhF6qcmzF2AgAfSYACAATFOAA==
Date: Tue, 17 Sep 2019 06:29:31 +0000
Message-ID: <62F1C2C6-1F25-4D94-B74D-B27E6BB79B15@neclab.eu>
References: <20190713053619.32186-1-felipe.huici@neclab.eu>
 <20190713053619.32186-2-felipe.huici@neclab.eu>
 <d1abc294-2ac9-ef10-d344-66069b9ffb33@neclab.eu>
 <26b6f02c-1f55-24e2-f098-3bbf048c7d95@neclab.eu>
In-Reply-To: <26b6f02c-1f55-24e2-f098-3bbf048c7d95@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <1E6BFAC6FF838B4CBCCC6C25A05AFAC7@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH 1/2] Initial port of
 the axtls library (version 2.1.5)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpSaWdodCwgdGhhbmtzIGZvciB0aGUgcmV2aWV3LCBJJ2xsIGZpeCB0aGF0
IGluIGEgdjIuDQoNCi0tIEZlbGlwZQ0KDQrvu79PbiAxNi4wOS4xOSwgMTY6MTcsICJNaW5pb3Mt
ZGV2ZWwgb24gYmVoYWxmIG9mIFNoYXJhbiBTYW50aGFuYW0iIDxtaW5pb3MtZGV2ZWwtYm91bmNl
c0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBvbiBiZWhhbGYgb2Ygc2hhcmFuLnNhbnRoYW5hbUBuZWNs
YWIuZXU+IHdyb3RlOg0KDQogICAgDQogICAgT24gOS8xMS8xOSA0OjQ5IFBNLCBTaGFyYW4gU2Fu
dGhhbmFtIHdyb3RlOg0KICAgID4gSGVsbG8gRmVsaXBlLA0KICAgID4NCiAgICA+IFBsZWFzZSBm
aW5kIHRoZSBjb21tZW50IGlubGluZToNCiAgICA+DQogICAgPiBUaGUgcGF0Y2ggZmFpbHMgdG8g
Y29tcGlsZSB3aXRoIGZvbGxvd2luZyBlcnJvcjoNCiAgICA+DQogICAgPiBidWlsZC9saWJheHRs
cy9vcmlnaW4vYXh0bHMtY29kZS9zc2wvb3NfcG9ydC5oOjEzNzoyNDogZmF0YWwgZXJyb3I6IA0K
ICAgID4gbmV0aW5ldC9pbi5oOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5ICNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+DQogICAgDQogICAgVGhlIGxpYnJhcnkgY29tcGlsZSB3aXRoIG5ld2xpYi4g
SXQgaXMgd2lzZSB0byBhZGQgZGVwZW5kZW5jeSBpbiANCiAgICBDb25maWcudWsgdG8gbmV3bGli
Lg0KICAgIA0KICAgIA0KICAgID4NCiAgICA+IFRoYW5rcyAmIFJlZ2FyZHMNCiAgICA+DQogICAg
PiBTaGFyYW4NCiAgICA+DQogICAgPiBPbiA3LzEzLzE5IDc6MzYgQU0sIEZlbGlwZSBIdWljaSB3
cm90ZToNCiAgICA+PiBOb3RlIGx3aXAgaXMgcmVxdWlyZWQuDQogICAgPj4NCiAgICA+PiBTaWdu
ZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQogICAgPj4g
LS0tDQogICAgPj4gICBDb25maWcudWsgICAgICAgICAgICAgICB8ICAgNCArKw0KICAgID4+ICAg
TWFrZWZpbGUudWsgICAgICAgICAgICAgfCAxMTcgDQogICAgPj4gKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiAgICA+PiAgIGdsdWUuYyAgICAgICAgICAg
ICAgICAgIHwgIDEyICsrKysrDQogICAgPj4gICBpbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCB8ICA4
NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KICAgID4+ICAgaW5jbHVkZS9j
b25maWcuaCAgICAgICAgfCAxMTggDQogICAgPj4gKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrDQogICAgPj4gICA1IGZpbGVzIGNoYW5nZWQsIDMzNyBpbnNl
cnRpb25zKCspDQogICAgPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrDQogICAgPj4g
ICBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsNCiAgICA+PiAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBnbHVlLmMNCiAgICA+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2FzbS9ieXRl
b3JkZXIuaA0KICAgID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvY29uZmlnLmgNCiAg
ICA+Pg0KICAgID4+IGRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsNCiAgICA+PiBu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4+IGluZGV4IDAwMDAwMDAuLmVjOGRhMjENCiAgICA+
PiAtLS0gL2Rldi9udWxsDQogICAgPj4gKysrIGIvQ29uZmlnLnVrDQogICAgPj4gQEAgLTAsMCAr
MSw0IEBADQogICAgPj4gK21lbnVjb25maWcgTElCQVhUTFMNCiAgICA+PiArICAgICAgIGJvb2wg
ImF4VExTIEVtYmVkZGVkIFNTTCINCiAgICA+PiArICAgICAgIGRlZmF1bHQgbg0KICAgID4+ICsg
ICAgICAgc2VsZWN0IExJQk5PTElCQyBpZiAhSEFWRV9MSUJDDQogICAgPiBTZWxlY3QgTElCTFdJ
UA0KICAgID4+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrDQogICAgPj4g
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+PiBpbmRleCAwMDAwMDAwLi5jZjUxM2EwDQogICAg
Pj4gLS0tIC9kZXYvbnVsbA0KICAgID4+ICsrKyBiL01ha2VmaWxlLnVrDQogICAgPj4gQEAgLTAs
MCArMSwxMTcgQEANCiAgICA+PiArIyAgbGliYXh0bHMgTWFrZWZpbGUudWMNCiAgICA+PiArIw0K
ICAgID4+ICsjICBBdXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+
DQogICAgPj4gKyMNCiAgICA+PiArIw0KICAgID4+ICsjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5F
QyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIA0KICAgID4+IHJlc2Vy
dmVkLg0KICAgID4+ICsjDQogICAgPj4gKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgID4+ICsjICBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMNCiAgICA+PiArIyAgYXJlIG1ldDoNCiAgICA+PiArIw0KICAgID4+ICsjICAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0K
ICAgID4+ICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuDQogICAgPj4gKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgPj4gKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciANCiAgICA+PiBpbiB0aGUNCiAgICA+PiArIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIA0KICAgID4+IGRpc3RyaWJ1dGlvbi4N
CiAgICA+PiArIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBu
b3IgdGhlIG5hbWVzIG9mIGl0cw0KICAgID4+ICsjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIA0KICAgID4+IGRlcml2ZWQgZnJvbQ0K
ICAgID4+ICsjICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLg0KICAgID4+ICsjDQogICAgPj4gKyMgIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCANCiAgICA+PiBDT05UUklCVVRPUlMg
IkFTIElTIg0KICAgID4+ICsjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCANCiAgICA+PiBUTywgVEhFDQogICAgPj4gKyMg
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
DQogICAgPj4gUEFSVElDVUxBUiBQVVJQT1NFDQogICAgPj4gKyMgIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiANCiAgICA+PiBDT05UUklC
VVRPUlMgQkUNCiAgICA+PiArIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KICAgID4+ICsjICBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0K
ICAgID4+ICsjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgDQogICAgPj4gQlVTSU5FU1MNCiAgICA+PiArIyAgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIA0KICAg
ID4+IFdIRVRIRVIgSU4NCiAgICA+PiArIyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIA0KICAgID4+IE9USEVSV0lTRSkNCiAgICA+
PiArIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgDQogICAgPj4gQURWSVNFRCBPRiBUSEUNCiAgICA+PiArIyAgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuDQogICAgPj4gKyMNCiAgICA+PiArIyAgVEhJUyBIRUFERVIgTUFZIE5P
VCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiAgICA+PiArIw0KICAgID4+
ICsNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgDQogICAgPj4NCiAgICA+PiArIyBM
aWJyYXJ5IHJlZ2lzdHJhdGlvbg0KICAgID4+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyANCiAg
ICA+Pg0KICAgID4+ICskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmF4dGxzLCQoQ09ORklHX0xJ
QkFYVExTKSkpDQogICAgPj4gKw0KICAgID4+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyANCiAg
ICA+Pg0KICAgID4+ICsjIFNvdXJjZXMNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMg
DQogICAgPj4NCiAgICA+PiArTElCQVhUTFNfVkVSU0lPTj0yLjEuNQ0KICAgID4+ICtMSUJBWFRM
U19VUkw9aHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvYXh0bHMvZmlsZXMvMi4xLjUv
YXhUTFMtMi4xLjUudGFyLmd6L2Rvd25sb2FkIA0KICAgID4+DQogICAgPiBzLzIuMS41LyQoTElC
QVhUTFNfVkVSU0lPTikNCiAgICA+PiArTElCQVhUTFNfUEFUQ0hESVI9JChMSUJBWFRMU19CQVNF
KS9wYXRjaGVzDQogICAgPj4gKyQoZXZhbCAkKGNhbGwgDQogICAgPj4gZmV0Y2hhcyxsaWJheHRs
cywkKExJQkFYVExTX1VSTCksJChMSUJBWFRMU19WRVJTSU9OKS50Z3opKQ0KICAgID4+ICskKGV2
YWwgJChjYWxsIA0KICAgID4+IHBhdGNoLGxpYmF4dGxzLCQoTElCQVhUTFNfUEFUQ0hESVIpLGxp
YmF4dGxzLSQoTElCQVhUTFNfVkVSU0lPTikpKQ0KICAgID4+ICsNCiAgICA+PiArIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMgDQogICAgPj4NCiAgICA+PiArIyBIZWxwZXJzDQogICAgPj4gKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4gK0xJQkFYVExTX1NSQz0kKExJQkFY
VExTX09SSUdJTikvYXh0bHMtY29kZQ0KICAgID4+ICsNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMgDQogICAgPj4NCiAgICA+PiArIyBMaWJyYXJ5IGluY2x1ZGVzDQogICAgPj4gKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4gK0NJTkNMVURFUy0kKENPTkZJ
R19MSUJBWFRMUykgKz0gICAtSSQoTElCQVhUTFNfU1JDKS9pbmNsdWRlIFwNCiAgICA+PiArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJChMSUJBWFRMU19TUkMpL2NyeXB0byAg
XA0KICAgID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKExJQkFYVExT
X1NSQykvc3NsICAgICBcDQogICAgPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtSSQoTElCQVhUTFNfQkFTRSkvaW5jbHVkZQ0KICAgID4NCiAgICA+IFNob3VsZCB0aGUgICQo
TElCQVhUTFNfQkFTRSkvaW5jbHVkZSBiZSBhIGdsb2JhbCBDSU5DTFVERSBvciBsaWJyYXJ5IA0K
ICAgID4gc3BlY2lmaWMuIFRoaXMgbWFpbiBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzIGFyZSB0
aGUgY29uZmlnLmggYW5kIA0KICAgID4gYnl0ZW9yZGVyLmguIFNob3VsZG4ndCB0aGUgY29uZmln
LmggYmUgc3BlY2lmaWMgdG8gdGhlIGxpYnJhcnkuIFNpbmNlIA0KICAgID4gd2UgZG9udCBoYXZl
IGEgZXhwb3J0c3ltLnVrLiBEbyB3ZSB3YW50IHRvIGFkZCBpdCBhcyBhIENJTkNMVURFUyBhcyAN
CiAgICA+IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBnb2luZyB0byBoaWRkZW4gd2l0aGluIHRoaXMg
bGlicmFyeS4NCiAgICA+DQogICAgPg0KICAgID4+ICsNCiAgICA+PiArQ1hYSU5DTFVERVMtJChD
T05GSUdfTElCQVhUTFMpICs9IC1JJChMSUJBWFRMU19TUkMpL2luY2x1ZGUgXA0KICAgID4+ICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKExJQkFYVExTX1NSQykvY3J5cHRv
ICBcDQogICAgPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQoTElCQVhU
TFNfU1JDKS9zc2wgICAgIFwNCiAgICA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1JJChMSUJBWFRMU19CQVNFKS9pbmNsdWRlDQogICAgPj4gKw0KICAgID4+ICsjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyANCiAgICA+Pg0KICAgID4+ICsjIEdsb2JhbCBmbGFncw0KICAgID4+
ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyANCiAgICA+Pg0KICAgID4+ICtMSUJBWFRMU19DRkxB
R1MteSArPSAtREhBVkVfQ09ORklHX0gNCiAgICA+PiArDQogICAgPj4gKyMgU3VwcHJlc3Mgc29t
ZSB3YXJuaW5ncyB0byBtYWtlIHRoZSBidWlsZCBwcm9jZXNzIGxvb2sgbmVhdGVyDQogICAgPj4g
K1NVUFBSRVNTX0ZMQUdTICs9IC1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLXVudXNlZC12YXJp
YWJsZSANCiAgICA+PiAtV25vLW5vbm51bGwgICAgICAgXA0KICAgID4+ICstV25vLXVudXNlZC1i
dXQtc2V0LXZhcmlhYmxlIC1Xbm8tdW51c2VkLWxhYmVsIA0KICAgID4+IC1Xbm8tY2hhci1zdWJz
Y3JpcHRzICAgICAgICAgICAgIFwNCiAgICA+PiArLVduby11bnVzZWQtZnVuY3Rpb24gLVduby1t
aXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyANCiAgICA+PiAtV25vLXVuaW5pdGlhbGl6ZWQgICAg
ICAgICBcDQogICAgPj4gKy1Xbm8tYXJyYXktYm91bmRzIC1Xbm8tbWF5YmUtdW5pbml0aWFsaXpl
ZCAtV25vLXBvaW50ZXItc2lnbiANCiAgICA+PiAtV25vLXVudXNlZC12YWx1ZSAgXA0KICAgID4+
ICstV25vLXVudXNlZC1tYWNyb3MgLVduby1wYXJlbnRoZXNlcyANCiAgICA+PiAtV25vLWltcGxp
Y2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uICAgICAgICAgIFwNCiAgICA+PiArLVduby1taXNzaW5n
LWJyYWNlcyAtV25vLWVuZGlmLWxhYmVscyANCiAgICA+PiAtV25vLXVudXNlZC1idXQtc2V0LXZh
cmlhYmxlICAgICAgICAgICAgICBcDQogICAgPj4gKy1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVj
bGFyYXRpb24gLVduby10eXBlLWxpbWl0cyAtV25vLXNpZ24tY29tcGFyZQ0KICAgID4gV25vLWlt
cGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uLCBXbm8tYXJyYXktYm91bmRzLCBXbm8tdHlwZS1s
aW1pdHMNCiAgICA+PiArDQogICAgPj4gK0xJQkFYVExTX0NGTEFHUy15ICAgKz0gJChTVVBQUkVT
U19GTEFHUykNCiAgICA+PiArTElCQVhUTFNfQ1hYRkxBR1MteSArPSAkKFNVUFBSRVNTX0ZMQUdT
KQ0KICAgID4+ICsNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgDQogICAgPj4NCiAg
ICA+PiArIyBPUyBkZXBlbmRlbmNpZXMgY29kZSAtIEdsdWUgYmV0d2VlbiBVbmlrZnJhZnQgYW5k
IGF4dGxzDQogICAgPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4g
K0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX0JBU0UpL2dsdWUuYw0KICAgID4+ICsNCiAg
ICA+PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgDQogICAgPj4NCiAgICA+PiArIyBheHRscyBj
b2RlIC0gY3J5cHRvDQogICAgPj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KICAgID4+DQog
ICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2Flcy5jDQog
ICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2JpZ2ludC5j
DQogICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2NyeXB0
b19taXNjLmMNCiAgICA+PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9jcnlw
dG8vaG1hYy5jDQogICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5
cHRvL21kNS5jDQogICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5
cHRvL3JjNC5jDQogICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5
cHRvL3JzYS5jDQogICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5
cHRvL3NoYTEuYw0KICAgID4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2Ny
eXB0by9zaGEyNTYuYw0KICAgID4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMp
L2NyeXB0by9zaGEzODQuYw0KICAgID4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19T
UkMpL2NyeXB0by9zaGE1MTIuYw0KICAgID4+ICsNCiAgICA+PiArIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMgDQogICAgPj4NCiAgICA+PiArIyBheHRscyBjb2RlIC0gc3NsDQogICAgPj4gKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIA0KICAgID4+DQogICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAk
KExJQkFYVExTX1NSQykvc3NsL2FzbjEuYw0KICAgID4+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChM
SUJBWFRMU19TUkMpL3NzbC9nZW5fY2VydC5jDQogICAgPg0KICAgID4gV2l0aG91dCB0aGlzIHN5
bWJvbCBDT05GSUdfU1NMX0dFTkVSQVRFX1g1MDlfQ0VSVCwgdGhpcyBpcyBhIGVtcHR5IA0KICAg
ID4gZmlsZT8gU2luY2Ugd2UgdW5kZWYgaXQgZG8gd2UgbmVlZCB0aGlzPw0KICAgID4NCiAgICA+
PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvbG9hZGVyLmMNCiAgICA+
PiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvb3BlbnNzbC5jDQogICAg
Pj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL29zX3BvcnQuYw0KICAg
ID4gVGhlcmUgYXJlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRvIHRoZSBXSU4zMi4gV2UgcHJv
YmFibHkgZG9uJ3QgbmVlZCANCiAgICA+IHRoaXMNCiAgICA+PiArTElCQVhUTFNfU1JDUy15ICs9
ICQoTElCQVhUTFNfU1JDKS9zc2wvcDEyLmMNCiAgICA+PiArTElCQVhUTFNfU1JDUy15ICs9ICQo
TElCQVhUTFNfU1JDKS9zc2wvdGxzMS5jDQogICAgPj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJ
QkFYVExTX1NSQykvc3NsL3RsczFfc3ZyLmMNCiAgICA+DQogICAgPj4gK0xJQkFYVExTX1NSQ1Mt
eSArPSAkKExJQkFYVExTX1NSQykvc3NsL3RsczFfY2xudC5jDQogICAgPiBUaGlzIGRlcGVuZCBv
biBDT05GSUdfU1NMX0VOQUJMRV9DTElFTlQgd2hpY2ggaXMgZGlzYWJsZWQuDQogICAgPj4gK0xJ
QkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL3g1MDkuYw0KICAgID4+IGRpZmYg
LS1naXQgYS9nbHVlLmMgYi9nbHVlLmMNCiAgICA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAg
ID4+IGluZGV4IDAwMDAwMDAuLjcxMzhmOWQNCiAgICA+PiAtLS0gL2Rldi9udWxsDQogICAgPj4g
KysrIGIvZ2x1ZS5jDQogICAgPj4gQEAgLTAsMCArMSwxMiBAQA0KICAgID4+ICsvKiBBY2NvcmRp
bmcgdG8gUE9TSVguMS0yMDAxLCBQT1NJWC4xLTIwMDggKi8NCiAgICA+PiArI2luY2x1ZGUgPHN5
cy9zZWxlY3QuaD4NCiAgICA+PiArDQogICAgPj4gKy8qIEFjY29yZGluZyB0byBlYXJsaWVyIHN0
YW5kYXJkcyAqLw0KICAgID4+ICsjaW5jbHVkZSA8c3lzL3RpbWUuaD4NCiAgICA+PiArI2luY2x1
ZGUgPHN5cy90eXBlcy5oPg0KICAgID4+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQogICAgPj4gKw0K
ICAgID4+ICtpbnQgc2VsZWN0KGludCBuZmRzLCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3Jp
dGVmZHMsDQogICAgPj4gKyAgICAgICBmZF9zZXQgKmV4Y2VwdGZkcywgc3RydWN0IHRpbWV2YWwg
KnRpbWVvdXQpIHsNCiAgICA+PiArICAgIHJldHVybiAtMTsNCiAgICA+PiArfQ0KICAgID4+IGRp
ZmYgLS1naXQgYS9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtL2J5dGVvcmRl
ci5oDQogICAgPg0KICAgID4gV291bGQgaXQgYmUgYmV0dGVyIHRvIGFkZCB0aGlzIGZpbGUgd2l0
aGluIGxpYmNzPw0KICAgID4NCiAgICA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4+IGlu
ZGV4IDAwMDAwMDAuLmYzNzQ3ZWINCiAgICA+PiAtLS0gL2Rldi9udWxsDQogICAgPj4gKysrIGIv
aW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgNCiAgICA+PiBAQCAtMCwwICsxLDg2IEBADQogICAgPj4g
Ky8qIFRha2VuIGZyb20gbXVzbCdzIGVuZGlhbi5oICovDQogICAgPj4gKw0KICAgID4+ICsjaWZu
ZGVmIExJQkFYVExTX0dMVUVfRU5ESUFOX0gNCiAgICA+PiArI2RlZmluZSBMSUJBWFRMU19HTFVF
X0VORElBTl9IDQogICAgPj4gKw0KICAgID4+ICsNCiAgICA+PiArLyogI2luY2x1ZGUgPGZlYXR1
cmVzLmg+ICovDQogICAgPj4gKw0KICAgID4+ICsjZGVmaW5lIF9fTElUVExFX0VORElBTiAxMjM0
DQogICAgPj4gKyNkZWZpbmUgX19CSUdfRU5ESUFOIDQzMjENCiAgICA+PiArI2RlZmluZSBfX1BE
UF9FTkRJQU4gMzQxMg0KICAgID4+ICsNCiAgICA+PiArLyogI2lmIGRlZmluZWQoX19HTlVDX18p
ICYmIGRlZmluZWQoX19CWVRFX09SREVSX18pICovDQogICAgPj4gKyNkZWZpbmUgX19CWVRFX09S
REVSIF9fQllURV9PUkRFUl9fDQogICAgPj4gKy8qDQogICAgPj4gKyNlbHNlDQogICAgPj4gKyNp
bmNsdWRlIDxiaXRzL2VuZGlhbi5oPg0KICAgID4+ICsjZW5kaWYNCiAgICA+PiArKi8NCiAgICA+
PiArLyogI2lmIGRlZmluZWQoX0dOVV9TT1VSQ0UpIHx8IGRlZmluZWQoX0JTRF9TT1VSQ0UpICov
DQogICAgPj4gKw0KICAgID4+ICsjZGVmaW5lIEJJR19FTkRJQU4gX19CSUdfRU5ESUFODQogICAg
Pj4gKyNkZWZpbmUgTElUVExFX0VORElBTiBfX0xJVFRMRV9FTkRJQU4NCiAgICA+PiArI2RlZmlu
ZSBQRFBfRU5ESUFOIF9fUERQX0VORElBTg0KICAgID4+ICsjZGVmaW5lIEJZVEVfT1JERVIgX19C
WVRFX09SREVSDQogICAgPj4gKw0KICAgID4+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQogICAgPj4g
Kw0KICAgID4+ICtzdGF0aWMgX19pbmxpbmUgdWludDE2X3QgX19ic3dhcDE2KHVpbnQxNl90IF9f
eCkNCiAgICA+PiArew0KICAgID4+ICsgICAgcmV0dXJuIF9feDw8OCB8IF9feD4+ODsNCiAgICA+
PiArfQ0KICAgID4+ICsNCiAgICA+PiArc3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYnN3YXAz
Mih1aW50MzJfdCBfX3gpDQogICAgPj4gK3sNCiAgICA+PiArICAgIHJldHVybiBfX3g+PjI0IHwg
X194Pj44JjB4ZmYwMCB8IF9feDw8OCYweGZmMDAwMCB8IF9feDw8MjQ7DQogICAgPj4gK30NCiAg
ICA+PiArDQogICAgPj4gK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2Jzd2FwNjQodWludDY0
X3QgX194KQ0KICAgID4+ICt7DQogICAgPj4gKyAgICByZXR1cm4gX19ic3dhcDMyKF9feCkrMFVM
TDw8MzIgfCBfX2Jzd2FwMzIoX194Pj4zMik7DQogICAgPj4gK30NCiAgICA+PiArDQogICAgPj4g
KyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFODQogICAgPj4gKyNkZWZpbmUgaHRv
YmUxNih4KSBfX2Jzd2FwMTYoeCkNCiAgICA+PiArI2RlZmluZSBiZTE2dG9oKHgpIF9fYnN3YXAx
Nih4KQ0KICAgID4+ICsjZGVmaW5lIGJldG9oMTYoeCkgX19ic3dhcDE2KHgpDQogICAgPj4gKyNk
ZWZpbmUgaHRvYmUzMih4KSBfX2Jzd2FwMzIoeCkNCiAgICA+PiArI2RlZmluZSBiZTMydG9oKHgp
IF9fYnN3YXAzMih4KQ0KICAgID4+ICsjZGVmaW5lIGJldG9oMzIoeCkgX19ic3dhcDMyKHgpDQog
ICAgPj4gKyNkZWZpbmUgaHRvYmU2NCh4KSBfX2Jzd2FwNjQoeCkNCiAgICA+PiArI2RlZmluZSBi
ZTY0dG9oKHgpIF9fYnN3YXA2NCh4KQ0KICAgID4+ICsjZGVmaW5lIGJldG9oNjQoeCkgX19ic3dh
cDY0KHgpDQogICAgPj4gKyNkZWZpbmUgaHRvbGUxNih4KSAodWludDE2X3QpKHgpDQogICAgPj4g
KyNkZWZpbmUgbGUxNnRvaCh4KSAodWludDE2X3QpKHgpDQogICAgPj4gKyNkZWZpbmUgbGV0b2gx
Nih4KSAodWludDE2X3QpKHgpDQogICAgPj4gKyNkZWZpbmUgaHRvbGUzMih4KSAodWludDMyX3Qp
KHgpDQogICAgPj4gKyNkZWZpbmUgbGUzMnRvaCh4KSAodWludDMyX3QpKHgpDQogICAgPj4gKyNk
ZWZpbmUgbGV0b2gzMih4KSAodWludDMyX3QpKHgpDQogICAgPj4gKyNkZWZpbmUgaHRvbGU2NCh4
KSAodWludDY0X3QpKHgpDQogICAgPj4gKyNkZWZpbmUgbGU2NHRvaCh4KSAodWludDY0X3QpKHgp
DQogICAgPj4gKyNkZWZpbmUgbGV0b2g2NCh4KSAodWludDY0X3QpKHgpDQogICAgPj4gKyNlbHNl
DQogICAgPj4gKyNkZWZpbmUgaHRvYmUxNih4KSAodWludDE2X3QpKHgpDQogICAgPj4gKyNkZWZp
bmUgYmUxNnRvaCh4KSAodWludDE2X3QpKHgpDQogICAgPj4gKyNkZWZpbmUgYmV0b2gxNih4KSAo
dWludDE2X3QpKHgpDQogICAgPj4gKyNkZWZpbmUgaHRvYmUzMih4KSAodWludDMyX3QpKHgpDQog
ICAgPj4gKyNkZWZpbmUgYmUzMnRvaCh4KSAodWludDMyX3QpKHgpDQogICAgPj4gKyNkZWZpbmUg
YmV0b2gzMih4KSAodWludDMyX3QpKHgpDQogICAgPj4gKyNkZWZpbmUgaHRvYmU2NCh4KSAodWlu
dDY0X3QpKHgpDQogICAgPj4gKyNkZWZpbmUgYmU2NHRvaCh4KSAodWludDY0X3QpKHgpDQogICAg
Pj4gKyNkZWZpbmUgYmV0b2g2NCh4KSAodWludDY0X3QpKHgpDQogICAgPj4gKyNkZWZpbmUgaHRv
bGUxNih4KSBfX2Jzd2FwMTYoeCl2DQogICAgPj4gKyNkZWZpbmUgbGUxNnRvaCh4KSBfX2Jzd2Fw
MTYoeCkNCiAgICA+PiArI2RlZmluZSBsZXRvaDE2KHgpIF9fYnN3YXAxNih4KQ0KICAgID4+ICsj
ZGVmaW5lIGh0b2xlMzIoeCkgX19ic3dhcDMyKHgpDQogICAgPj4gKyNkZWZpbmUgbGUzMnRvaCh4
KSBfX2Jzd2FwMzIoeCkNCiAgICA+PiArI2RlZmluZSBsZXRvaDMyKHgpIF9fYnN3YXAzMih4KQ0K
ICAgID4+ICsjZGVmaW5lIGh0b2xlNjQoeCkgX19ic3dhcDY0KHgpDQogICAgPj4gKyNkZWZpbmUg
bGU2NHRvaCh4KSBfX2Jzd2FwNjQoeCkNCiAgICA+PiArI2RlZmluZSBsZXRvaDY0KHgpIF9fYnN3
YXA2NCh4KQ0KICAgID4+ICsjZW5kaWYNCiAgICA+PiArDQogICAgPj4gKy8qICNlbmRpZiAqLw0K
ICAgID4+ICsNCiAgICA+PiArI2VuZGlmDQogICAgPj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29u
ZmlnLmggYi9pbmNsdWRlL2NvbmZpZy5oDQogICAgPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICA+PiBpbmRleCAwMDAwMDAwLi5hY2QyOTczDQogICAgPj4gLS0tIC9kZXYvbnVsbA0KICAgID4+
ICsrKyBiL2luY2x1ZGUvY29uZmlnLmgNCiAgICA+PiBAQCAtMCwwICsxLDExOCBAQA0KICAgID4+
ICsvKg0KICAgID4+ICsgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBoZWFkZXIgZmlsZTogZG9u
J3QgZWRpdA0KICAgID4+ICsgKi8NCiAgICA+PiArDQogICAgPj4gKyNkZWZpbmUgSEFWRV9ET1Rf
Q09ORklHIDENCiAgICA+PiArI2RlZmluZSBDT05GSUdfUExBVEZPUk1fTElOVVggMQ0KICAgID4N
CiAgICA+IFNob3VsZCB3ZSBoYXZlIHRoaXMgQ09ORklHX1BMQVRGT1JNX0xJTlVYPw0KICAgID4N
CiAgICA+DQogICAgPj4gKyN1bmRlZiBDT05GSUdfUExBVEZPUk1fQ1lHV0lODQogICAgPj4gKyN1
bmRlZiBDT05GSUdfUExBVEZPUk1fV0lOMzINCiAgICA+PiArDQogICAgPj4gKy8qDQogICAgPj4g
KyAqIEdlbmVyYWwgQ29uZmlndXJhdGlvbg0KICAgID4+ICsgKi8NCiAgICA+PiArI2RlZmluZSBQ
UkVGSVggIi91c3IvbG9jYWwiDQogICAgPiBXZSBkb24ndCBuZWVkIFBSRUZJWD8NCiAgICA+PiAr
I3VuZGVmIENPTkZJR19ERUJVRw0KICAgID4NCiAgICA+IFNob3VsZCB3ZSBoYXZlIHRoaXMNCiAg
ICA+DQogICAgPiAjaWZkZWYgVUtfREVCVUcNCiAgICA+DQogICAgPiAjZGVmaW5lIENPTkZJR19E
RUJVRw0KICAgID4NCiAgICA+ICNlbHNlDQogICAgPg0KICAgID4gI3VuZGVmIENPTkZJR19ERUJV
Rw0KICAgID4NCiAgICA+ICNlbmRpZiAvKiBVS19ERUJVRyAqLw0KICAgID4NCiAgICA+PiArI2Rl
ZmluZSBDT05GSUdfU1RSSVBfVU5XQU5URURfU0VDVElPTlMgMQ0KICAgID4+ICsjdW5kZWYgQ09O
RklHX1ZJU1VBTF9TVFVESU9fN18wDQogICAgPj4gKyN1bmRlZiBDT05GSUdfVklTVUFMX1NUVURJ
T184XzANCiAgICA+PiArI3VuZGVmIENPTkZJR19WSVNVQUxfU1RVRElPXzEwXzANCiAgICA+PiAr
I2RlZmluZSBDT05GSUdfVklTVUFMX1NUVURJT183XzBfQkFTRSAiIg0KICAgID4+ICsjZGVmaW5l
IENPTkZJR19WSVNVQUxfU1RVRElPXzhfMF9CQVNFICIiDQogICAgPj4gKyNkZWZpbmUgQ09ORklH
X1ZJU1VBTF9TVFVESU9fMTBfMF9CQVNFICIiDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX0VYVFJB
X0NGTEFHU19PUFRJT05TICIiDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX0VYVFJBX0xERkxBR1Nf
T1BUSU9OUyAiIg0KICAgID4+ICsNCiAgICA+PiArLyoNCiAgICA+PiArICogU1NMIExpYnJhcnkN
CiAgICA+PiArICovDQogICAgPj4gKyN1bmRlZiBDT05GSUdfU1NMX1NFUlZFUl9PTkxZDQogICAg
Pj4gKyN1bmRlZiBDT05GSUdfU1NMX0NFUlRfVkVSSUZJQ0FUSU9ODQogICAgPj4gKyN1bmRlZiBD
T05GSUdfU1NMX0VOQUJMRV9DTElFTlQNCiAgICA+PiArI2RlZmluZSBDT05GSUdfU1NMX0ZVTExf
TU9ERSAxDQogICAgPj4gKyN1bmRlZiBDT05GSUdfU1NMX1NLRUxFVE9OX01PREUNCiAgICA+PiAr
I3VuZGVmIENPTkZJR19TU0xfUFJPVF9MT1cNCiAgICA+PiArI2RlZmluZSBDT05GSUdfU1NMX1BS
T1RfTUVESVVNIDENCiAgICA+PiArI3VuZGVmIENPTkZJR19TU0xfUFJPVF9ISUdIDQogICAgPj4g
KyNkZWZpbmUgQ09ORklHX1NTTF9VU0VfREVGQVVMVF9LRVkgMQ0KICAgID4+ICsjZGVmaW5lIENP
TkZJR19TU0xfUFJJVkFURV9LRVlfTE9DQVRJT04gIiINCiAgICA+PiArI2RlZmluZSBDT05GSUdf
U1NMX1BSSVZBVEVfS0VZX1BBU1NXT1JEICIiDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9Y
NTA5X0NFUlRfTE9DQVRJT04gIiINCiAgICA+PiArI3VuZGVmIENPTkZJR19TU0xfR0VORVJBVEVf
WDUwOV9DRVJUDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5X0NPTU1PTl9OQU1FICIi
DQogICAgPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5X09SR0FOSVpBVElPTl9OQU1FICIiDQog
ICAgPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5X09SR0FOSVpBVElPTl9VTklUX05BTUUgIiIN
CiAgICA+PiArI2RlZmluZSBDT05GSUdfU1NMX0hBU19QRU0gMQ0KICAgID4+ICsjZGVmaW5lIENP
TkZJR19TU0xfVVNFX1BLQ1MxMiAxDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX1NTTF9FWFBJUllf
VElNRSAyNA0KICAgID4+ICsjZGVmaW5lIENPTkZJR19YNTA5X01BWF9DQV9DRVJUUyAxNTANCiAg
ICA+PiArI2RlZmluZSBDT05GSUdfU1NMX01BWF9DRVJUUyAzDQogICAgPj4gKyN1bmRlZiBDT05G
SUdfU1NMX0NUWF9NVVRFWElORw0KICAgID4+ICsjZGVmaW5lIENPTkZJR19VU0VfREVWX1VSQU5E
T00gMQ0KICAgID4gRG8gd2UgbmVlZCB0aGlzIGNvbmZpZ3VyYXRpb24gZW5hYmxlZD8gSWYgc28g
dGhlbiBkb24ndCB3ZSBuZWVkIHRoZSANCiAgICA+IGRldmZzIGVuYWJsZWQuDQogICAgPj4gKyN1
bmRlZiBDT05GSUdfV0lOMzJfVVNFX0NSWVBUT19MSUINCiAgICA+PiArI2RlZmluZSBDT05GSUdf
T1BFTlNTTF9DT01QQVRJQkxFIDENCiAgICA+PiArI3VuZGVmIENPTkZJR19QRVJGT1JNQU5DRV9U
RVNUSU5HDQogICAgPj4gKyN1bmRlZiBDT05GSUdfU1NMX1RFU1QNCiAgICA+PiArI2RlZmluZSBD
T05GSUdfQVhUTFNXUkFQIDENCiAgICA+PiArI3VuZGVmIENPTkZJR19BWEhUVFBEDQogICAgPj4g
KyN1bmRlZiBDT05GSUdfSFRUUF9TVEFUSUNfQlVJTEQNCiAgICA+PiArI2RlZmluZSBDT05GSUdf
SFRUUF9QT1JUDQogICAgPiBXaGVyZSB3b3VsZCB0aGlzIGJlIHVzZWQgc2luY2Ugd2UgZG9uJ3Qg
aW5jbHVkZSBodHRwZCBzb3VyY2UgZGlyZWN0b3JpZXM/DQogICAgPj4gKyNkZWZpbmUgQ09ORklH
X0hUVFBfSFRUUFNfUE9SVA0KICAgID4+ICsjZGVmaW5lIENPTkZJR19IVFRQX1NFU1NJT05fQ0FD
SEVfU0laRQ0KICAgID4+ICsjZGVmaW5lIENPTkZJR19IVFRQX1dFQlJPT1QgIiINCiAgICA+PiAr
I2RlZmluZSBDT05GSUdfSFRUUF9USU1FT1VUDQogICAgPj4gKyN1bmRlZiBDT05GSUdfSFRUUF9I
QVNfQ0dJDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX0hUVFBfQ0dJX0VYVEVOU0lPTlMgIiINCiAg
ICA+PiArI3VuZGVmIENPTkZJR19IVFRQX0VOQUJMRV9MVUENCiAgICA+PiArI2RlZmluZSBDT05G
SUdfSFRUUF9MVUFfUFJFRklYICIiDQogICAgPj4gKyN1bmRlZiBDT05GSUdfSFRUUF9CVUlMRF9M
VUENCiAgICA+PiArI2RlZmluZSBDT05GSUdfSFRUUF9DR0lfTEFVTkNIRVIgIiINCiAgICA+PiAr
I3VuZGVmIENPTkZJR19IVFRQX0RJUkVDVE9SSUVTDQogICAgPj4gKyN1bmRlZiBDT05GSUdfSFRU
UF9IQVNfQVVUSE9SSVpBVElPTg0KICAgID4+ICsjdW5kZWYgQ09ORklHX0hUVFBfSEFTX0lQVjYN
CiAgICA+PiArI3VuZGVmIENPTkZJR19IVFRQX0VOQUJMRV9ESUZGRVJFTlRfVVNFUg0KICAgID4+
ICsjZGVmaW5lIENPTkZJR19IVFRQX1VTRVIgIiINCiAgICA+PiArI3VuZGVmIENPTkZJR19IVFRQ
X1ZFUkJPU0UNCiAgICA+PiArI3VuZGVmIENPTkZJR19IVFRQX0lTX0RBRU1PTg0KICAgID4+ICsN
CiAgICA+PiArLyoNCiAgICA+PiArICogTGFuZ3VhZ2UgQmluZGluZ3MNCiAgICA+PiArICovDQog
ICAgPj4gKyN1bmRlZiBDT05GSUdfQklORElOR1MNCiAgICA+PiArI3VuZGVmIENPTkZJR19DU0hB
UlBfQklORElOR1MNCiAgICA+PiArI3VuZGVmIENPTkZJR19WQk5FVF9CSU5ESU5HUw0KICAgID4+
ICsjZGVmaW5lIENPTkZJR19ET1RfTkVUX0ZSQU1FV09SS19CQVNFICIiDQogICAgPj4gKyN1bmRl
ZiBDT05GSUdfSkFWQV9CSU5ESU5HUw0KICAgID4+ICsjZGVmaW5lIENPTkZJR19KQVZBX0hPTUUg
IiINCiAgICA+PiArI3VuZGVmIENPTkZJR19QRVJMX0JJTkRJTkdTDQogICAgPj4gKyNkZWZpbmUg
Q09ORklHX1BFUkxfQ09SRSAiIg0KICAgID4+ICsjZGVmaW5lIENPTkZJR19QRVJMX0xJQiAiIg0K
ICAgID4+ICsjdW5kZWYgQ09ORklHX0xVQV9CSU5ESU5HUw0KICAgID4+ICsjZGVmaW5lIENPTkZJ
R19MVUFfQ09SRSAiIg0KICAgID4+ICsNCiAgICA+PiArLyoNCiAgICA+PiArICogU2FtcGxlcw0K
ICAgID4+ICsgKi8NCiAgICA+PiArI3VuZGVmIENPTkZJR19TQU1QTEVTDQogICAgPj4gKyN1bmRl
ZiBDT05GSUdfQ19TQU1QTEVTDQogICAgPj4gKyN1bmRlZiBDT05GSUdfQ1NIQVJQX1NBTVBMRVMN
CiAgICA+PiArI3VuZGVmIENPTkZJR19WQk5FVF9TQU1QTEVTDQogICAgPj4gKyN1bmRlZiBDT05G
SUdfSkFWQV9TQU1QTEVTDQogICAgPj4gKyN1bmRlZiBDT05GSUdfUEVSTF9TQU1QTEVTDQogICAg
Pj4gKyN1bmRlZiBDT05GSUdfTFVBX1NBTVBMRVMNCiAgICA+PiArDQogICAgPj4gKy8qDQogICAg
Pj4gKyAqIEJpZ0ludCBPcHRpb25zDQogICAgPj4gKyAqLw0KICAgID4+ICsjdW5kZWYgQ09ORklH
X0JJR0lOVF9DTEFTU0lDQUwNCiAgICA+PiArI3VuZGVmIENPTkZJR19CSUdJTlRfTU9OVEdPTUVS
WQ0KICAgID4+ICsjZGVmaW5lIENPTkZJR19CSUdJTlRfQkFSUkVUVCAxDQogICAgPj4gKyNkZWZp
bmUgQ09ORklHX0JJR0lOVF9DUlQgMQ0KICAgID4+ICsjdW5kZWYgQ09ORklHX0JJR0lOVF9LQVJB
VFNVQkENCiAgICA+PiArI2RlZmluZSBNVUxfS0FSQVRTVUJBX1RIUkVTSA0KICAgID4+ICsjZGVm
aW5lIFNRVV9LQVJBVFNVQkFfVEhSRVNIDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX0JJR0lOVF9T
TElESU5HX1dJTkRPVyAxDQogICAgPj4gKyNkZWZpbmUgQ09ORklHX0JJR0lOVF9TUVVBUkUgMQ0K
ICAgID4+ICsjdW5kZWYgQ09ORklHX0JJR0lOVF9DSEVDS19PTg0KICAgID4+ICsjZGVmaW5lIENP
TkZJR19JTlRFR0VSXzMyQklUIDENCiAgICA+PiArI3VuZGVmIENPTkZJR19JTlRFR0VSXzE2QklU
DQogICAgPj4gKyN1bmRlZiBDT05GSUdfSU5URUdFUl84QklUDQogICAgPg0KICAgID4gX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICA+IE1pbmlvcy1k
ZXZlbCBtYWlsaW5nIGxpc3QNCiAgICA+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
Zw0KICAgID4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA0KICAgIA0KICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 07:02:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 07:02:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA7V6-0007je-3c; Tue, 17 Sep 2019 07:02:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=EF79=XM=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iA7V4-0007jF-Mz
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 07:02:10 +0000
X-Inumbo-ID: 0f1479d0-d919-11e9-b299-bc764e2007e4
Received: from EUR03-DB5-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe0a::601])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0f1479d0-d919-11e9-b299-bc764e2007e4;
 Tue, 17 Sep 2019 07:02:06 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=n2dZrUSFA07YaPgzK/UkT30IcYhjLPewos/HAU9qooU=;
 b=A0CX+HPN3f3iCd3LoXcUE/u28l+G7l2SjLoxVhus6N6CTyJp715vRLrjeOnZvlwyqHRDWaA9LlQhAvC1CY678IrXqrvlaxY+tqDzNR3w4eU6zcxeKe2bJFfYi/IOPwbsSZBEJw4QJeJn37Ju6t2Cq13HpWnUq0hev2Qte4vJJPM=
Received: from VI1PR08CA0200.eurprd08.prod.outlook.com (2603:10a6:800:d2::30)
 by AM4PR08MB2931.eurprd08.prod.outlook.com (2603:10a6:205:9::23) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.24; Tue, 17 Sep
 2019 07:02:03 +0000
Received: from DB5EUR03FT023.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::200) by VI1PR08CA0200.outlook.office365.com
 (2603:10a6:800:d2::30) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2263.17 via Frontend
 Transport; Tue, 17 Sep 2019 07:02:03 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT023.mail.protection.outlook.com (10.152.20.68) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2263.14 via Frontend Transport; Tue, 17 Sep 2019 07:02:02 +0000
Received: ("Tessian outbound 5061e1b5386c:v31");
 Tue, 17 Sep 2019 07:01:54 +0000
X-CR-MTA-TID: 64aa7808
Received: from e9209e49238c.4 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.6.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 10861562-3C9E-445B-A1E7-B770C5D261E4.1; 
 Tue, 17 Sep 2019 07:01:49 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2054.outbound.protection.outlook.com [104.47.6.54])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id e9209e49238c.4
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 17 Sep 2019 07:01:49 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ZoJNR/cI8ct7OlVffvdhwXuvgGAyoc4b0I/aGwnmw4vTWyi07ze4Vrhaj1o/yYvn79l4uiiqcgxDU2w+ChO4DIYl63Qun6odzMsVKBTVyuwJryrgq/DHTn3Ytd6/ZvvpplJIrQ+bTtTrVVHvesIZewIc7+1zlL2VDSX9fYd4ZggxLxT/WYTgwQ11r2FQhjJDomMFELzAl572VFQFgg5PGzxbUr1xCaiYYvjuwvRitgS5z1eJUqrfN6wW31mtYHHBZVo/EwGvXstjtuFL5Sih+AUZ1et8JVT98HsTga6PTgFSzWRQEvdfVmnqcPboqAkF11nGVYApdnoTSXv2HTZV8A==
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=n2dZrUSFA07YaPgzK/UkT30IcYhjLPewos/HAU9qooU=;
 b=mZKq1rRw7kjBoF3Y5mefYS2ll8pk+MGB0xUPXo7sbr9lCdcbuntSbJ+UunYl4W1ZKIs5lPeJ1cRk0bB0wbfJrP/8mcVWGa2F+eO4XEXnP7yk0Bixozb61noSdzEk5AtUP7G6WjQTVgvYZ1d/ZXtF0qxrPMMBI7ng2oi1OM0Ehje03i3idnWwwsOBzppWAD6OWSIUn/7a/GtwIEM7+IICNpUpBPTcict5hdnSwxSlVD3vPw2hWwBjkTh/CbGdbgeDXhvhcfrSOPf6ZGLMPPjwMBbRjMcXv8rrb9LoaPerM+uUqRRdmhAgi5aBkxzlMxYgkBNEko1ZgJvl7Vi26Wa0Qw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=n2dZrUSFA07YaPgzK/UkT30IcYhjLPewos/HAU9qooU=;
 b=A0CX+HPN3f3iCd3LoXcUE/u28l+G7l2SjLoxVhus6N6CTyJp715vRLrjeOnZvlwyqHRDWaA9LlQhAvC1CY678IrXqrvlaxY+tqDzNR3w4eU6zcxeKe2bJFfYi/IOPwbsSZBEJw4QJeJn37Ju6t2Cq13HpWnUq0hev2Qte4vJJPM=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3292.eurprd08.prod.outlook.com (52.134.111.30) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.21; Tue, 17 Sep 2019 07:01:46 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Tue, 17 Sep 2019
 07:01:46 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, Santiago Pagani
 <Santiago.Pagani@neclab.eu>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>, 
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 5/7] plat/common: Find and register IRQ for
 arch_timer
Thread-Index: AQHVRuMI4eqgfPiDNkactshV+eW3nqckwa4AgAlWQkCAAOsNgIAAtvSg
Date: Tue, 17 Sep 2019 07:01:46 +0000
Message-ID: <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
In-Reply-To: <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: fb6fe2b6-f316-4bd6-bd50-0aa410ca6629.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 6e8e4979-7417-48b8-4d4e-08d73b3cf13d
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3292; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3292:|DB7PR08MB3292:|AM4PR08MB2931:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM4PR08MB2931D6A08FBA24A689C8706FF78F0@AM4PR08MB2931.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
x-forefront-prvs: 01630974C0
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(366004)(376002)(346002)(396003)(39860400002)(136003)(199004)(189003)(13464003)(53754006)(6506007)(4326008)(102836004)(7696005)(14444005)(6436002)(11346002)(25786009)(9686003)(71190400001)(446003)(14454004)(256004)(76176011)(71200400001)(2906002)(478600001)(7736002)(486006)(186003)(53546011)(5660300002)(74316002)(3846002)(99286004)(476003)(54906003)(110136005)(26005)(305945005)(86362001)(66446008)(64756008)(81166006)(52536014)(55236004)(6116002)(76116006)(66946007)(316002)(66476007)(8676002)(66556008)(6246003)(229853002)(55016002)(66066001)(33656002)(2501003)(81156014)(8936002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3292;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: qabBr3YUrM4K0c/N/jRwvFnMvQrv5oKKIwufbmOW8zF64EId7Qb3L9QYPIM2OR1CNRWcMSQ0kgbO3+UnH3YB8QN6tM7LQ27GDpsVDiBjcxNBnBX3RsSWDzx4kjpTzaVw7HCUuGGkhWIsUEQdy2wIUuSAS6Iclii6Mzse3se/+RnbBjwpqbe9BAiyokki0MKKwwi0/nhiCd0YryqqjvCvbXWbMIukSaSwxiDIIy9MjAIxCM45ocgWaLMAG8B2tLDetC7P8HxRMBQ9Z9MawTCrngDgEqPkmV1FQNkENqOkshCBiBtvRKRPbm6ce4cOabqSD7Jq8IVe8vFRyF2qWxs/J3EhXkhwsK1Afuwuy/kXuST7S/1cVNPdQQVK8J2Dq80f9jmuSW92QxNj3hZX2AlvEVTKZwXEV8iEwYbwbU9MmyM=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3292
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT023.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(396003)(376002)(39860400002)(346002)(136003)(13464003)(53754006)(199004)(189003)(7736002)(74316002)(81156014)(486006)(2501003)(356004)(5660300002)(66066001)(22756006)(316002)(8676002)(110136005)(33656002)(54906003)(8936002)(2906002)(9686003)(7696005)(81166006)(305945005)(3846002)(52536014)(23676004)(6116002)(76130400001)(336012)(229853002)(47776003)(126002)(476003)(70586007)(14454004)(446003)(436003)(70206006)(6246003)(99286004)(11346002)(26005)(25786009)(76176011)(4326008)(26826003)(102836004)(186003)(2486003)(6506007)(53546011)(50466002)(86362001)(14444005)(63350400001)(55016002)(478600001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR08MB2931;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 0ebf0625-a578-4993-f157-08d73b3ce769
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM4PR08MB2931; 
NoDisclaimer: True
X-Forefront-PRVS: 01630974C0
X-Microsoft-Antispam-Message-Info: jK0+zUnqsU8meNPdrssghr/vGEmBxNTB0IJfnpi03xkQle9hFJkEZLOtoXJUGnoF+11s6KdeZ0BSrpWN4M0lBKvKtbmCTgnSjKX7qcd4z0DaLECSvOSTT162vfoXs7LwadZb6mZ9uX/mSXFOD0NT+9Jl6lzc20TesviSDYqVEwMoMzfnSiZc9JTIGtD2MAM/tmtDe6VyBteXetlHvSj3i0ZEZmz4a0gQuHusV6j/51PruynJm3EvVGkBnHO1a10Y+W12QmKNfory6erP7UV8l5pMt9QsKaa870w9fkm1ANKaOu88D4nSf1c3c1rXQ5UYRC1W7Sj+6KAwRANPs6PthcvWv3voxpNZNKOCDzPwpK+Vd8Y+OIGNKf+ncOUpfo+uNz/60qBsJyq4Qj2NggM1y9zTk71ltVLPCBmoKTlo8Iw=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2019 07:02:02.7077 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 6e8e4979-7417-48b8-4d4e-08d73b3cf13d
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR08MB2931
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuICh3ZWxjb21lIGJhY2sgZnJvbSBob2xpZGF5IPCfmIogKQ0KDQo+IC0tLS0tT3Jp
Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFy
bS5jb20+DQo+IFNlbnQ6IDIwMTnlubQ55pyIMTfml6UgMzo1Mw0KPiBUbzogSnVzdGluIEhlIChB
cm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsgU2FudGlhZ28NCj4gUGFn
YW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1PjsgbWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnOw0KPiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT47IFNo
YXJhbiBTYW50aGFuYW0NCj4gPFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1Pg0KPiBDYzogS2Fs
eSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47IFdlaSBDaGVu
IChBcm0NCj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBX
dSAoQXJtIFRlY2hub2xvZ3kNCj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPg0KPiBTdWJq
ZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZCBhbmQgcmVn
aXN0ZXIgSVJRDQo+IGZvciBhcmNoX3RpbWVyDQo+IA0KPiBPbiA5LzE2LzE5IDg6NTIgQU0sIEp1
c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOg0KPiA+IEhpICBTYW50aWFnbw0K
PiANCj4gSGkgYWxsLA0KPiANCj4gQFNhbnRpYWdvLCBpdCBpcyBxdWl0ZSBkaWZmaWN1bHQgdG8g
Zm9sbG93IHRoZSB0aHJlYWQgd2hlbiB5b3Ugc3RhcnQNCj4geW91ciBhbnN3ZXIgd2l0aCAiQ09N
TUVOVCIuIE1heSBJIGFzayB5b3UgdG8gY29uZmlndXJlIHlvdXIgZS1tYWlsDQo+IGNsaWVudCB0
byBxdW90ZSBwcm9wZXJseSAoaS5lID4pPw0KPiANCj4gRnVydGhlcm1vcmUsIGRpc2NsYWltZXIg
Zm9vdGVyIHNob3VsZCBiZSBhdm9pZGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QuDQo+IFlvdSBhcmUg
YmFzaWNhbGx5IHNheWluZyB0aGlzIGlzIGNvbmZpZGVudGlhbCBidXQgeW91IHNlbmQgdG8gZXZl
cnlvbmUNCj4gKG1haWxpbmcgbGlzdCBhcmUgYXJjaGl2ZWQpLi4uDQpPSw0KPiANCj4gWy4uLl0N
Cj4gDQo+ID4+IENPTU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRv
IGRvIGhlcmU/IE5vdCBldmVuDQo+ID4+IGRpc2FibGUgdGhlIElSUT8gQXMgdGhlIHRpbWVyIGlz
IG5vdCBzdG9wcGVkLCB3aGVuIHRoZSBjb3VudGVyDQo+IG92ZXJmbG93cw0KPiA+PiB3ZSB3b3Vs
ZCBnZXQgYSBuZXcgaW50ZXJydXB0IG90aGVyd2lzZSAoYWx0aG91Z2ggdGhlIG92ZXJmbG93IGNv
dWxkDQo+ID4+IGhhcHBlbiBpbiBhIHZlcnkgdmVyeSBsb25nIHRpbWUsIHJpZ2h0PykNCj4gPg0K
PiA+IEluIHByZXZpb3VzIHZlcnNpb24sIHdlIGFkZGVkIGEgZ2VuZXJpY190aW1lcl9tYXNrX2ly
cSgpIGluDQo+ID4gZ2VuZXJpY190aW1lcl9pcnFfaGFuZGxlci4gQnV0IGFzIHBlciB0aGUgc3Vn
Z2VzdGlvbiBbMV0gZnJvbSBKdWxpZW4sIHdlDQo+ID4gcmVtb3ZlZCBpdC4gQmVzaWRlcywgd2Ug
cmVmZXJyZWQgdG8gdGhlIG1pbmlvcyBsb2dpYyBhdCBbMl0sIGl0IG9ubHkgY2FsbGVkDQo+ID4g
dW5tYXNrIGFuZCBtYXNrIGluIGJsb2NrX2RvbWFpbiAod2hpY2ggaXMgZXF1aXZhbGVudCB0byB1
bmlrcmFmdCdzDQo+ID4gZ2VuZXJpY190aW1lcl9jcHVfYmxvY2spDQo+IA0KPiBMb29raW5nIGF0
IG15IGNvbW1lbnRzIGFnYWluLCBJIGFtIG5vdCBzdXJlIHdoZXJlIEkgc3VnZ2VzdGVkIHRvIHJl
bW92ZQ0KPiBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkuLi4gQ2FuIHlvdSBleHBhbmQgaXQ/DQpP
a2F5Li4uIHNvcnJ5IGZvciBteSBtaXN0YWtlcy4gSSB3aWxsIGFkZCBnZW5lcmljX3RpbWVyX21h
c2tfaXJxKCkgYmFjay4NCj4gDQo+IEZXSVcsIHRoZSB0d28gbWFpbiBjb21tZW50cyBvbiB0aGUg
cHJldmlvdXMgdmVyc2lvbnMgd2VyZToNCj4gICAgIDEpIGlzYigpIHNob3VsZCBiZSBhZGRlZCBh
ZnRlciB1cGRhdGluZyB0aGUgc3lzdGVtIHJlZ2lzdGVyIHRvDQo+IGVuc3VyZSB0aGF0IHRoZSBz
eXN0ZW0gc3lzdGVtIGlzIHN5bmNocm9uaXplZA0KPiAgICAgMikgVGhpcyBpcyBjb21tb24gY29k
ZSBiZXR3ZWVuIGFybTMyIGFuZCBhcm02NC4gQnV0IHRoZSBzeXN0ZW0NCj4gcmVnaXN0ZXIgbmFt
ZSBhcmUgYXJtNjQuLi4gQWNjZXNzZXMgc2hvdWxkIGJlIHN0dWIgaW4gYXJjaC1zcGVjaWZpYw0K
PiBoZWFkZXIgc28gdGhlIGNvZGUgY2FuIHdvcmsgZm9yIGJvdGggYXJtMzIgYW5kIGFybTY0Lg0K
SSByZW5hbWVkIHBsYXQvY29tbW9uL2FybS90aW1lLmMgdG8gcGxhdC9jb21tb24vYXJtL3RpbWVf
YXJtNjQuYw0KU2VlbXMgdGhhdCBpcyBub3QgZW5vdWdoIGZvciB5b3U/ICBJZiBubywgSSBoYXZl
IG5vIG9iamVjdGlvbnMgdG8gbWFrZSANCmEgc3R1YiAgZm9yIGFybTMyLg0KDQotLQ0KQ2hlZXJz
LA0KSnVzdGluIChKaWEgSGUpDQoNCg0KDQo+IA0KPiAgRnJvbSBhIHF1aWNrIGxvb2sgMSkgaGFz
IGJlZW4gYWRkcmVzc2VkLCAyKSBpcyBzdGlsbCBwZW5kaW5nLg0KPiANCj4gQ2hlZXJzLA0KPiAN
Cj4gLS0NCj4gSnVsaWVuIEdyYWxsDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 08:39:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 08:39:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA91A-0003Tt-TA; Tue, 17 Sep 2019 08:39:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=DkBD=XM=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iA919-0003Ta-Nd
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 08:39:23 +0000
X-Inumbo-ID: a57e7f1d-d926-11e9-9604-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id a57e7f1d-d926-11e9-9604-12813bfff9fa;
 Tue, 17 Sep 2019 08:39:22 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EB74828;
 Tue, 17 Sep 2019 01:39:21 -0700 (PDT)
Received: from [10.37.13.58] (unknown [10.37.13.58])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 29A9F3F575;
 Tue, 17 Sep 2019 01:39:18 -0700 (PDT)
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
Date: Tue, 17 Sep 2019 09:39:17 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xNy8xOSA4OjAxIEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90
ZToKPiBIaSBKdWxpZW4gKHdlbGNvbWUgYmFjayBmcm9tIGhvbGlkYXkg8J+YiiApCgpIaSwKClRo
YW5rcyA6KS4KCj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+IEZyb206IEp1bGllbiBH
cmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Cj4+IFNlbnQ6IDIwMTnlubQ55pyIMTfml6UgMzo1
Mwo+PiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBhcm0u
Y29tPjsgU2FudGlhZ28KPj4gUGFnYW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1PjsgbWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOwo+PiBTaW1vbiBLdWVuemVyIDxzaW1vbi5r
dWVuemVyQG5lY2xhYi5ldT47IFNoYXJhbiBTYW50aGFuYW0KPj4gPFNoYXJhbi5TYW50aGFuYW1A
bmVjbGFiLmV1Pgo+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5Y
aW5AYXJtLmNvbT47IFdlaSBDaGVuIChBcm0KPj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5DaGVu
QGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xvZ3kKPj4gQ2hpbmEpIDxKaWFueW9u
Zy5XdUBhcm0uY29tPgo+PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0
L2NvbW1vbjogRmluZCBhbmQgcmVnaXN0ZXIgSVJRCj4+IGZvciBhcmNoX3RpbWVyCj4+Cj4+IE9u
IDkvMTYvMTkgODo1MiBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6
Cj4+PiBIaSAgU2FudGlhZ28KPj4KPj4gSGkgYWxsLAo+Pgo+PiBAU2FudGlhZ28sIGl0IGlzIHF1
aXRlIGRpZmZpY3VsdCB0byBmb2xsb3cgdGhlIHRocmVhZCB3aGVuIHlvdSBzdGFydAo+PiB5b3Vy
IGFuc3dlciB3aXRoICJDT01NRU5UIi4gTWF5IEkgYXNrIHlvdSB0byBjb25maWd1cmUgeW91ciBl
LW1haWwKPj4gY2xpZW50IHRvIHF1b3RlIHByb3Blcmx5IChpLmUgPik/Cj4+Cj4+IEZ1cnRoZXJt
b3JlLCBkaXNjbGFpbWVyIGZvb3RlciBzaG91bGQgYmUgYXZvaWRlZCBvbiB0aGUgbWFpbGluZyBs
aXN0Lgo+PiBZb3UgYXJlIGJhc2ljYWxseSBzYXlpbmcgdGhpcyBpcyBjb25maWRlbnRpYWwgYnV0
IHlvdSBzZW5kIHRvIGV2ZXJ5b25lCj4+IChtYWlsaW5nIGxpc3QgYXJlIGFyY2hpdmVkKS4uLgo+
IE9LCgpJdCB3YXNuJ3QgZGlyZWN0ZWQgdG8geW91IDspLgoKPj4KPj4gWy4uLl0KPj4KPj4+PiBD
T01NRU5UOiBUaGVyZSBpcyBub3RoaW5nIHRoYXQgd2Ugd291bGQgbGlrZSB0byBkbyBoZXJlPyBO
b3QgZXZlbgo+Pj4+IGRpc2FibGUgdGhlIElSUT8gQXMgdGhlIHRpbWVyIGlzIG5vdCBzdG9wcGVk
LCB3aGVuIHRoZSBjb3VudGVyCj4+IG92ZXJmbG93cwo+Pj4+IHdlIHdvdWxkIGdldCBhIG5ldyBp
bnRlcnJ1cHQgb3RoZXJ3aXNlIChhbHRob3VnaCB0aGUgb3ZlcmZsb3cgY291bGQKPj4+PiBoYXBw
ZW4gaW4gYSB2ZXJ5IHZlcnkgbG9uZyB0aW1lLCByaWdodD8pCj4+Pgo+Pj4gSW4gcHJldmlvdXMg
dmVyc2lvbiwgd2UgYWRkZWQgYSBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkgaW4KPj4+IGdlbmVy
aWNfdGltZXJfaXJxX2hhbmRsZXIuIEJ1dCBhcyBwZXIgdGhlIHN1Z2dlc3Rpb24gWzFdIGZyb20g
SnVsaWVuLCB3ZQo+Pj4gcmVtb3ZlZCBpdC4gQmVzaWRlcywgd2UgcmVmZXJyZWQgdG8gdGhlIG1p
bmlvcyBsb2dpYyBhdCBbMl0sIGl0IG9ubHkgY2FsbGVkCj4+PiB1bm1hc2sgYW5kIG1hc2sgaW4g
YmxvY2tfZG9tYWluICh3aGljaCBpcyBlcXVpdmFsZW50IHRvIHVuaWtyYWZ0J3MKPj4+IGdlbmVy
aWNfdGltZXJfY3B1X2Jsb2NrKQo+Pgo+PiBMb29raW5nIGF0IG15IGNvbW1lbnRzIGFnYWluLCBJ
IGFtIG5vdCBzdXJlIHdoZXJlIEkgc3VnZ2VzdGVkIHRvIHJlbW92ZQo+PiBnZW5lcmljX3RpbWVy
X21hc2tfaXJxKCkuLi4gQ2FuIHlvdSBleHBhbmQgaXQ/Cj4gT2theS4uLiBzb3JyeSBmb3IgbXkg
bWlzdGFrZXMuIEkgd2lsbCBhZGQgZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpIGJhY2suCj4+Cj4+
IEZXSVcsIHRoZSB0d28gbWFpbiBjb21tZW50cyBvbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMgd2Vy
ZToKPj4gICAgICAxKSBpc2IoKSBzaG91bGQgYmUgYWRkZWQgYWZ0ZXIgdXBkYXRpbmcgdGhlIHN5
c3RlbSByZWdpc3RlciB0bwo+PiBlbnN1cmUgdGhhdCB0aGUgc3lzdGVtIHN5c3RlbSBpcyBzeW5j
aHJvbml6ZWQKPj4gICAgICAyKSBUaGlzIGlzIGNvbW1vbiBjb2RlIGJldHdlZW4gYXJtMzIgYW5k
IGFybTY0LiBCdXQgdGhlIHN5c3RlbQo+PiByZWdpc3RlciBuYW1lIGFyZSBhcm02NC4uLiBBY2Nl
c3NlcyBzaG91bGQgYmUgc3R1YiBpbiBhcmNoLXNwZWNpZmljCj4+IGhlYWRlciBzbyB0aGUgY29k
ZSBjYW4gd29yayBmb3IgYm90aCBhcm0zMiBhbmQgYXJtNjQuCj4gSSByZW5hbWVkIHBsYXQvY29t
bW9uL2FybS90aW1lLmMgdG8gcGxhdC9jb21tb24vYXJtL3RpbWVfYXJtNjQuYwo+IFNlZW1zIHRo
YXQgaXMgbm90IGVub3VnaCBmb3IgeW91PyAgSWYgbm8sIEkgaGF2ZSBubyBvYmplY3Rpb25zIHRv
IG1ha2UKPiBhIHN0dWIgIGZvciBhcm0zMi4KCldlbGwsIHRoZSBvbmx5IGJpdHMgYXJtNjQgc3Bl
Y2lmaWNzIGluIHRoaXMgZmlsZSBhcmUgdGhlIGFjY2VzcyB0byB0aGUgCnN5c3RlbSByZWdpc3Rl
cnMuIFNvIHJlbmFtaW5nIHRvIHRpbWVfYXJtNjQuYyBzZWVtcyBhIGJpdCBvdmVya2lsbC4uLgoK
SWYgdGhlcmUgYXJlIHBsYW4gdG8gbWFrZSBhcm0zMiBhIGNvcnJlY3QgcG9ydCBvbiBVbmlrcmFm
dCwgdGhlbiAKc3BsaXR0aW5nIHRoZSBjb2RlIHdvdWxkIGJlIHRoZSBiZXN0LiBJZiB0aGVyZSBh
cmUgbm8gcGxhbiB0byBnZXQgYXJtMzIsIAp0aGVuIG1heWJlIHlvdSBzaG91bGQgdGhpbmsgb2Yg
a2lsbGluZyBpdCBjb21wbGV0ZWx5LgoKQ2hlZXJzLAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 08:45:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 08:45:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA96h-0004b0-QI; Tue, 17 Sep 2019 08:45:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=EF79=XM=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iA96g-0004av-Eb
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 08:45:06 +0000
X-Inumbo-ID: 70dc2060-d927-11e9-b76c-bc764e2007e4
Received: from EUR01-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.14.51]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 70dc2060-d927-11e9-b76c-bc764e2007e4;
 Tue, 17 Sep 2019 08:45:04 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=CeT8eUSLyUyG+1Cu/nbFykwvjtYsN4amq52MQN/szUg=;
 b=a8OlNtHGBhZXeLwpoEQNDBZRP/PQ9v/ymmzfXATbsK2C/zbBuvgqAao9ClE++u9bAvPywo3k8OGl2geO2MiHglRp7Epg5eRf5XzNrEVN2TArQ27TNxdSH5NDfUKuwl1t+Eibsmt0JE02iAVqaxB4xQ8FxcwX4xI4iX42jowzPwA=
Received: from VI1PR08CA0224.eurprd08.prod.outlook.com (2603:10a6:802:15::33)
 by DB6PR0802MB2598.eurprd08.prod.outlook.com (2603:10a6:4:97::20)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Tue, 17 Sep
 2019 08:45:00 +0000
Received: from AM5EUR03FT019.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::206) by VI1PR08CA0224.outlook.office365.com
 (2603:10a6:802:15::33) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17 via Frontend
 Transport; Tue, 17 Sep 2019 08:45:00 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT019.mail.protection.outlook.com (10.152.16.104) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.14 via Frontend Transport; Tue, 17 Sep 2019 08:44:59 +0000
Received: ("Tessian outbound 0d576b67b9f5:v31");
 Tue, 17 Sep 2019 08:44:54 +0000
X-CR-MTA-TID: 64aa7808
Received: from b61ba8bb0cf8.2 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.5.57]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 2113ECF3-5A5E-4AEC-9FC4-5356952167F1.1; 
 Tue, 17 Sep 2019 08:44:49 +0000
Received: from EUR02-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur02lp2057.outbound.protection.outlook.com [104.47.5.57])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id b61ba8bb0cf8.2
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 17 Sep 2019 08:44:49 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Z/Ayyish2Gh+QoHPcflval6uHFG70qlqOBHHL5DjNWdO5WmeUXksGGukUNEaIQ/8guf4YPywSAqa2FXG6P6cEUpLCAHE4ibivZ8hf5jYOUwzI0d1wxNKppo6wzWhAS3jQWdMBUa2d5UR/OSCYiTz/HqFxg4HuKP9UVwMvMKKW3ZQWgyDpwNNT6RNVscFUlgBLzG6eMrvfTvp5k3szdyW4pCb/Doc4V5t7ttHK0/5CXlLlUrQsmAZGksMzOwRAoT7KW7A5vkCidzVZQLEEUu46ZLkgcFomrRiJdPfLTI+d4nPJ2LyT8k0M2o8b0fjPEDTULS6mFCDOy47Qmim2tqCjg==
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=CeT8eUSLyUyG+1Cu/nbFykwvjtYsN4amq52MQN/szUg=;
 b=cv0Yqfv19sLrgKlyX/K3BPfI7KXQAH/p3uvMeMrRRnpjKdZpmLkm+TU7ElqEI49MJhucVESOrgi4lUgcttcb1WLQITeOnvj9P/L7tIzwKqCxjYgT6fEdaclzOcq30TnwXCZkmknLeLfZN8isfr8lMubDDOoLXD8AbTYqub12b0E0E3gYixqTyYaDzlobAM50Jh0RU4zd9uxOtRQ7gKqFJFS3hTtargnU6WiiKb1bnJgTNqy4PtzROVb3UE88NXovhKljXHVmAmwDXUAX95WDwCsbtxHgFmErEp9VhLbglFXZB7DExsELSxnnAV4uUj3WJwOHGpWcuKX/hhqpKMuDiw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=CeT8eUSLyUyG+1Cu/nbFykwvjtYsN4amq52MQN/szUg=;
 b=a8OlNtHGBhZXeLwpoEQNDBZRP/PQ9v/ymmzfXATbsK2C/zbBuvgqAao9ClE++u9bAvPywo3k8OGl2geO2MiHglRp7Epg5eRf5XzNrEVN2TArQ27TNxdSH5NDfUKuwl1t+Eibsmt0JE02iAVqaxB4xQ8FxcwX4xI4iX42jowzPwA=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3401.eurprd08.prod.outlook.com (20.176.238.94) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2263.26; Tue, 17 Sep 2019 08:44:46 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::2121:ca3a:3068:734%3]) with mapi id 15.20.2263.023; Tue, 17 Sep 2019
 08:44:46 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, Santiago Pagani
 <Santiago.Pagani@neclab.eu>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>, 
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 5/7] plat/common: Find and register IRQ for
 arch_timer
Thread-Index: AQHVRuMI4eqgfPiDNkactshV+eW3nqckwa4AgAlWQkCAAOsNgIAAtvSggAAfEYCAAACGgA==
Date: Tue, 17 Sep 2019 08:44:46 +0000
Message-ID: <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
In-Reply-To: <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 5452c5ce-8f79-444b-969e-27a956abc095.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 078b19f4-edd9-45da-f605-08d73b4b52c1
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB7PR08MB3401; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3401:|DB7PR08MB3401:|DB6PR0802MB2598:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <DB6PR0802MB2598E3679D0F5CD587FAF86CF78F0@DB6PR0802MB2598.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
x-forefront-prvs: 01630974C0
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(136003)(376002)(366004)(39860400002)(396003)(199004)(189003)(53754006)(13464003)(66066001)(71200400001)(71190400001)(7736002)(229853002)(11346002)(446003)(5660300002)(486006)(2906002)(52536014)(256004)(14444005)(305945005)(86362001)(74316002)(8936002)(81156014)(66946007)(66446008)(66556008)(25786009)(8676002)(66476007)(76116006)(478600001)(6116002)(64756008)(476003)(6246003)(55016002)(6436002)(26005)(102836004)(110136005)(4326008)(2501003)(53546011)(81166006)(9686003)(33656002)(99286004)(186003)(54906003)(14454004)(316002)(6506007)(7696005)(76176011)(3846002)(55236004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3401;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: F3OZToILLuBwwUOBRn8111I2qRhSHFLu4GUkU/bV/ftLeNzsAq8ZWS1Cb8UfH/AN2VKcu0enjoMKAyYqDsiLqO1ehvKR0wd0f9+BFm0DKSNE4vZw43j9O2050UCyuS8Io11VaYhTNk5N3nOHg5RMlStQ7OS44bWCcpIcoHbaTIE81CY/r3wpaCN8SLsOkRZn2L+XujrKsrEIV60qLSgmReC7Daz+0RGODxUjUL9DHwaDwd8YiYCuTE7qpFIg9YpBingq9lWAtshmRHoMzPw876XFoGu7kfVU2zfYSzE2JJSWG7bNRgG8hppS5VvQ/nPRlYllqEHSh5lgzPKOJ7hedCMbIxINUaY2GktoNrVcLOqVF1QVUvmDacDzLy40U4l6DiPJltZpb3oSW1T6TJ283QJ+YoOlprrk7jU7G76bhzM=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3401
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT019.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(376002)(396003)(39860400002)(346002)(13464003)(189003)(199004)(53754006)(486006)(55016002)(14454004)(6506007)(66066001)(81166006)(52536014)(478600001)(81156014)(2486003)(33656002)(36906005)(316002)(23676004)(76176011)(7696005)(2501003)(70586007)(336012)(26826003)(70206006)(8676002)(76130400001)(356004)(99286004)(47776003)(6246003)(50466002)(5660300002)(110136005)(11346002)(22756006)(54906003)(229853002)(63350400001)(4326008)(436003)(25786009)(53546011)(9686003)(7736002)(6116002)(446003)(186003)(102836004)(305945005)(476003)(2906002)(86362001)(26005)(74316002)(126002)(8936002)(3846002)(14444005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0802MB2598;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 5d1d5765-a124-4a46-6568-08d73b4b4b37
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB6PR0802MB2598; 
NoDisclaimer: True
X-Forefront-PRVS: 01630974C0
X-Microsoft-Antispam-Message-Info: iv4xan75fcYbhM4xU6XE5DBRwS+yyDMxJ+HKRbclOvuv0q/Oxrz58hz0SLdGymUxZbA1dDP8Qv6QHlyCLm2bdEPKGBKxJoxh8CIfETOOPcJXCCxd4Cs4z4NLSTzGWDgco71MtZLN4uD1OHLCIFpQnNZ3fwF35WG1WPQf+YL4aBIWwpCzOaEMfl0VKispNd14DFUkoNm8vaSWd4La0WX8VDhONMAK0fZOyGBH7ARwvQyD/1/azcwiRCBsSdihD2bnyqOxLF6Qwr8PxmKYZypNSIgpuAOxnoh29hmgn5rjOfsrrAauXZO8Q2IBTfZUNES7gEvAoNw4RzLMVfxNFf+Cy05mQnM4eWKizo/xulnAoz3w+uqCZLV6yP3xyegUK+odiuLNge3qj6JLhsT1hVvbPzb4eD/tSV/C2AR8HhsCrGU=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Sep 2019 08:44:59.2713 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 078b19f4-edd9-45da-f605-08d73b4b52c1
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2598
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gU2VudDogMjAxOeW5tDnmnIgxN+aXpSAx
NjozOQ0KPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBh
cm0uY29tPjsgU2FudGlhZ28NCj4gUGFnYW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1Pjsg
bWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOw0KPiBTaW1vbiBLdWVuemVyIDxzaW1v
bi5rdWVuemVyQG5lY2xhYi5ldT47IFNoYXJhbiBTYW50aGFuYW0NCj4gPFNoYXJhbi5TYW50aGFu
YW1AbmVjbGFiLmV1Pg0KPiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2Fs
eS5YaW5AYXJtLmNvbT47IFdlaSBDaGVuIChBcm0NCj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5D
aGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xvZ3kNCj4gQ2hpbmEpIDxKaWFu
eW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbVU5JS1JB
RlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3RlciBJUlENCj4gZm9y
IGFyY2hfdGltZXINCj4gDQo+IE9uIDkvMTcvMTkgODowMSBBTSwgSnVzdGluIEhlIChBcm0gVGVj
aG5vbG9neSBDaGluYSkgd3JvdGU6DQo+ID4gSGkgSnVsaWVuICh3ZWxjb21lIGJhY2sgZnJvbSBo
b2xpZGF5IPCfmIogKQ0KPiANCj4gSGksDQo+IA0KPiBUaGFua3MgOikuDQo+IA0KPiA+PiAtLS0t
LU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5n
cmFsbEBhcm0uY29tPg0KPiA+PiBTZW50OiAyMDE55bm0OeaciDE35pelIDM6NTMNCj4gPj4gVG86
IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNvbT47IFNh
bnRpYWdvDQo+ID4+IFBhZ2FuaSA8U2FudGlhZ28uUGFnYW5pQG5lY2xhYi5ldT47IG1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsNCj4gPj4gU2ltb24gS3VlbnplciA8c2ltb24ua3Vl
bnplckBuZWNsYWIuZXU+OyBTaGFyYW4gU2FudGhhbmFtDQo+ID4+IDxTaGFyYW4uU2FudGhhbmFt
QG5lY2xhYi5ldT4NCj4gPj4gQ2M6IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEth
bHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbg0KPiAoQXJtDQo+ID4+IFRlY2hub2xvZ3kgQ2hpbmEp
IDxXZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcgV3UgKEFybQ0KPiBUZWNobm9sb2d5DQo+ID4+
IENoaW5hKSA8SmlhbnlvbmcuV3VAYXJtLmNvbT4NCj4gPj4gU3ViamVjdDogUmU6IFtVTklLUkFG
VCBQQVRDSHYzIDUvN10gcGxhdC9jb21tb246IEZpbmQgYW5kIHJlZ2lzdGVyDQo+IElSUQ0KPiA+
PiBmb3IgYXJjaF90aW1lcg0KPiA+Pg0KPiA+PiBPbiA5LzE2LzE5IDg6NTIgQU0sIEp1c3RpbiBI
ZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOg0KPiA+Pj4gSGkgIFNhbnRpYWdvDQo+ID4+
DQo+ID4+IEhpIGFsbCwNCj4gPj4NCj4gPj4gQFNhbnRpYWdvLCBpdCBpcyBxdWl0ZSBkaWZmaWN1
bHQgdG8gZm9sbG93IHRoZSB0aHJlYWQgd2hlbiB5b3Ugc3RhcnQNCj4gPj4geW91ciBhbnN3ZXIg
d2l0aCAiQ09NTUVOVCIuIE1heSBJIGFzayB5b3UgdG8gY29uZmlndXJlIHlvdXIgZS1tYWlsDQo+
ID4+IGNsaWVudCB0byBxdW90ZSBwcm9wZXJseSAoaS5lID4pPw0KPiA+Pg0KPiA+PiBGdXJ0aGVy
bW9yZSwgZGlzY2xhaW1lciBmb290ZXIgc2hvdWxkIGJlIGF2b2lkZWQgb24gdGhlIG1haWxpbmcg
bGlzdC4NCj4gPj4gWW91IGFyZSBiYXNpY2FsbHkgc2F5aW5nIHRoaXMgaXMgY29uZmlkZW50aWFs
IGJ1dCB5b3Ugc2VuZCB0byBldmVyeW9uZQ0KPiA+PiAobWFpbGluZyBsaXN0IGFyZSBhcmNoaXZl
ZCkuLi4NCj4gPiBPSw0KPiANCj4gSXQgd2Fzbid0IGRpcmVjdGVkIHRvIHlvdSA7KS4NCj4gDQo+
ID4+DQo+ID4+IFsuLi5dDQo+ID4+DQo+ID4+Pj4gQ09NTUVOVDogVGhlcmUgaXMgbm90aGluZyB0
aGF0IHdlIHdvdWxkIGxpa2UgdG8gZG8gaGVyZT8gTm90IGV2ZW4NCj4gPj4+PiBkaXNhYmxlIHRo
ZSBJUlE/IEFzIHRoZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUgY291bnRlcg0KPiA+
PiBvdmVyZmxvd3MNCj4gPj4+PiB3ZSB3b3VsZCBnZXQgYSBuZXcgaW50ZXJydXB0IG90aGVyd2lz
ZSAoYWx0aG91Z2ggdGhlIG92ZXJmbG93IGNvdWxkDQo+ID4+Pj4gaGFwcGVuIGluIGEgdmVyeSB2
ZXJ5IGxvbmcgdGltZSwgcmlnaHQ/KQ0KPiA+Pj4NCj4gPj4+IEluIHByZXZpb3VzIHZlcnNpb24s
IHdlIGFkZGVkIGEgZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpIGluDQo+ID4+PiBnZW5lcmljX3Rp
bWVyX2lycV9oYW5kbGVyLiBCdXQgYXMgcGVyIHRoZSBzdWdnZXN0aW9uIFsxXSBmcm9tIEp1bGll
biwNCj4gd2UNCj4gPj4+IHJlbW92ZWQgaXQuIEJlc2lkZXMsIHdlIHJlZmVycmVkIHRvIHRoZSBt
aW5pb3MgbG9naWMgYXQgWzJdLCBpdCBvbmx5IGNhbGxlZA0KPiA+Pj4gdW5tYXNrIGFuZCBtYXNr
IGluIGJsb2NrX2RvbWFpbiAod2hpY2ggaXMgZXF1aXZhbGVudCB0byB1bmlrcmFmdCdzDQo+ID4+
PiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykNCj4gPj4NCj4gPj4gTG9va2luZyBhdCBteSBjb21t
ZW50cyBhZ2FpbiwgSSBhbSBub3Qgc3VyZSB3aGVyZSBJIHN1Z2dlc3RlZCB0bw0KPiByZW1vdmUN
Cj4gPj4gZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpLi4uIENhbiB5b3UgZXhwYW5kIGl0Pw0KPiA+
IE9rYXkuLi4gc29ycnkgZm9yIG15IG1pc3Rha2VzLiBJIHdpbGwgYWRkIGdlbmVyaWNfdGltZXJf
bWFza19pcnEoKSBiYWNrLg0KPiA+Pg0KPiA+PiBGV0lXLCB0aGUgdHdvIG1haW4gY29tbWVudHMg
b24gdGhlIHByZXZpb3VzIHZlcnNpb25zIHdlcmU6DQo+ID4+ICAgICAgMSkgaXNiKCkgc2hvdWxk
IGJlIGFkZGVkIGFmdGVyIHVwZGF0aW5nIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgdG8NCj4gPj4gZW5z
dXJlIHRoYXQgdGhlIHN5c3RlbSBzeXN0ZW0gaXMgc3luY2hyb25pemVkDQo+ID4+ICAgICAgMikg
VGhpcyBpcyBjb21tb24gY29kZSBiZXR3ZWVuIGFybTMyIGFuZCBhcm02NC4gQnV0IHRoZSBzeXN0
ZW0NCj4gPj4gcmVnaXN0ZXIgbmFtZSBhcmUgYXJtNjQuLi4gQWNjZXNzZXMgc2hvdWxkIGJlIHN0
dWIgaW4gYXJjaC1zcGVjaWZpYw0KPiA+PiBoZWFkZXIgc28gdGhlIGNvZGUgY2FuIHdvcmsgZm9y
IGJvdGggYXJtMzIgYW5kIGFybTY0Lg0KPiA+IEkgcmVuYW1lZCBwbGF0L2NvbW1vbi9hcm0vdGlt
ZS5jIHRvIHBsYXQvY29tbW9uL2FybS90aW1lX2FybTY0LmMNCj4gPiBTZWVtcyB0aGF0IGlzIG5v
dCBlbm91Z2ggZm9yIHlvdT8gIElmIG5vLCBJIGhhdmUgbm8gb2JqZWN0aW9ucyB0byBtYWtlDQo+
ID4gYSBzdHViICBmb3IgYXJtMzIuDQo+IA0KPiBXZWxsLCB0aGUgb25seSBiaXRzIGFybTY0IHNw
ZWNpZmljcyBpbiB0aGlzIGZpbGUgYXJlIHRoZSBhY2Nlc3MgdG8gdGhlDQo+IHN5c3RlbSByZWdp
c3RlcnMuIFNvIHJlbmFtaW5nIHRvIHRpbWVfYXJtNjQuYyBzZWVtcyBhIGJpdCBvdmVya2lsbC4u
Lg0KPiANCj4gSWYgdGhlcmUgYXJlIHBsYW4gdG8gbWFrZSBhcm0zMiBhIGNvcnJlY3QgcG9ydCBv
biBVbmlrcmFmdCwgdGhlbg0KPiBzcGxpdHRpbmcgdGhlIGNvZGUgd291bGQgYmUgdGhlIGJlc3Qu
IElmIHRoZXJlIGFyZSBubyBwbGFuIHRvIGdldCBhcm0zMiwNCj4gdGhlbiBtYXliZSB5b3Ugc2hv
dWxkIHRoaW5rIG9mIGtpbGxpbmcgaXQgY29tcGxldGVseS4NCg0KQXJtMzIgeGVuIHBsYXQgaXMg
aW5pdGlhbGx5IHN1cHBvcnRlZCBidXQgbm8gb25lICBoYXMgdG91Y2hlZCB0aGF0IGZvciBhIGxv
bmcNCnRpbWUuIEN1cnJlbnRseSBsZXTigJlzIGZvY3VzIG9uIGFybTY0IGt2bSBwbGF0IG9ubHku
IElmIHRoZSByZXF1aXJlbWVudHMgY2hhbmdlcywgDQp3ZSBjYW4gc3VwcG9ydCBhcm0zMiBhZGRp
dGlvbmFsbHkuIFdoYXQgZG8geW91IHRoaW5rIGFib3V0IGl0Pw0KDQoNCi0tDQpDaGVlcnMsDQpK
dXN0aW4gKEppYSBIZSkNCg0KDQo+IA0KPiBDaGVlcnMsDQo+IA0KPiAtLQ0KPiBKdWxpZW4gR3Jh
bGwNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 09:17:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 09:17:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA9bt-0000kF-SN; Tue, 17 Sep 2019 09:17:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=DkBD=XM=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iA9bs-0000k8-Ir
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 09:17:20 +0000
X-Inumbo-ID: f2eef448-d92b-11e9-b76c-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id f2eef448-d92b-11e9-b76c-bc764e2007e4;
 Tue, 17 Sep 2019 09:17:19 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 389F028;
 Tue, 17 Sep 2019 02:17:19 -0700 (PDT)
Received: from [10.37.13.58] (unknown [10.37.13.58])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C3E713F59C;
 Tue, 17 Sep 2019 02:17:16 -0700 (PDT)
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <Sharan.Santhanam@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
Date: Tue, 17 Sep 2019 10:17:15 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

CgpPbiA5LzE3LzE5IDk6NDQgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdy
b3RlOgo+IEhpIEp1bGllbgoKSGksCgo+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+PiBG
cm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgo+PiBTZW50OiAyMDE55bm0
OeaciDE35pelIDE2OjM5Cj4+IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8
SnVzdGluLkhlQGFybS5jb20+OyBTYW50aWFnbwo+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBu
ZWNsYWIuZXU+OyBtaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7Cj4+IFNpbW9uIEt1
ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PjsgU2hhcmFuIFNhbnRoYW5hbQo+PiA8U2hh
cmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+Cj4+IENjOiBLYWx5IFhpbiAoQXJtIFRlY2hub2xvZ3kg
Q2hpbmEpIDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpIENoZW4gKEFybQo+PiBUZWNobm9sb2d5IENo
aW5hKSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0gVGVjaG5vbG9neQo+PiBD
aGluYSkgPEppYW55b25nLld1QGFybS5jb20+OyBuZCA8bmRAYXJtLmNvbT4KPj4gU3ViamVjdDog
UmU6IFtVTklLUkFGVCBQQVRDSHYzIDUvN10gcGxhdC9jb21tb246IEZpbmQgYW5kIHJlZ2lzdGVy
IElSUQo+PiBmb3IgYXJjaF90aW1lcgo+Pgo+PiBPbiA5LzE3LzE5IDg6MDEgQU0sIEp1c3RpbiBI
ZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOgo+Pj4gSGkgSnVsaWVuICh3ZWxjb21lIGJh
Y2sgZnJvbSBob2xpZGF5IPCfmIogKQo+Pgo+PiBIaSwKPj4KPj4gVGhhbmtzIDopLgo+Pgo+Pj4+
IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxp
ZW4uZ3JhbGxAYXJtLmNvbT4KPj4+PiBTZW50OiAyMDE55bm0OeaciDE35pelIDM6NTMKPj4+PiBU
bzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsg
U2FudGlhZ28KPj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+OyBtaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7Cj4+Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3Vl
bnplckBuZWNsYWIuZXU+OyBTaGFyYW4gU2FudGhhbmFtCj4+Pj4gPFNoYXJhbi5TYW50aGFuYW1A
bmVjbGFiLmV1Pgo+Pj4+IENjOiBLYWx5IFhpbiAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxLYWx5
LlhpbkBhcm0uY29tPjsgV2VpIENoZW4KPj4gKEFybQo+Pj4+IFRlY2hub2xvZ3kgQ2hpbmEpIDxX
ZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcgV3UgKEFybQo+PiBUZWNobm9sb2d5Cj4+Pj4gQ2hp
bmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPgo+Pj4+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFU
Q0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3Rlcgo+PiBJUlEKPj4+PiBmb3Ig
YXJjaF90aW1lcgo+Pj4+Cj4+Pj4gT24gOS8xNi8xOSA4OjUyIEFNLCBKdXN0aW4gSGUgKEFybSBU
ZWNobm9sb2d5IENoaW5hKSB3cm90ZToKPj4+Pj4gSGkgIFNhbnRpYWdvCj4+Pj4KPj4+PiBIaSBh
bGwsCj4+Pj4KPj4+PiBAU2FudGlhZ28sIGl0IGlzIHF1aXRlIGRpZmZpY3VsdCB0byBmb2xsb3cg
dGhlIHRocmVhZCB3aGVuIHlvdSBzdGFydAo+Pj4+IHlvdXIgYW5zd2VyIHdpdGggIkNPTU1FTlQi
LiBNYXkgSSBhc2sgeW91IHRvIGNvbmZpZ3VyZSB5b3VyIGUtbWFpbAo+Pj4+IGNsaWVudCB0byBx
dW90ZSBwcm9wZXJseSAoaS5lID4pPwo+Pj4+Cj4+Pj4gRnVydGhlcm1vcmUsIGRpc2NsYWltZXIg
Zm9vdGVyIHNob3VsZCBiZSBhdm9pZGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QuCj4+Pj4gWW91IGFy
ZSBiYXNpY2FsbHkgc2F5aW5nIHRoaXMgaXMgY29uZmlkZW50aWFsIGJ1dCB5b3Ugc2VuZCB0byBl
dmVyeW9uZQo+Pj4+IChtYWlsaW5nIGxpc3QgYXJlIGFyY2hpdmVkKS4uLgo+Pj4gT0sKPj4KPj4g
SXQgd2Fzbid0IGRpcmVjdGVkIHRvIHlvdSA7KS4KPj4KPj4+Pgo+Pj4+IFsuLi5dCj4+Pj4KPj4+
Pj4+IENPTU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIGhl
cmU/IE5vdCBldmVuCj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/IEFzIHRoZSB0aW1lciBpcyBub3Qg
c3RvcHBlZCwgd2hlbiB0aGUgY291bnRlcgo+Pj4+IG92ZXJmbG93cwo+Pj4+Pj4gd2Ugd291bGQg
Z2V0IGEgbmV3IGludGVycnVwdCBvdGhlcndpc2UgKGFsdGhvdWdoIHRoZSBvdmVyZmxvdyBjb3Vs
ZAo+Pj4+Pj4gaGFwcGVuIGluIGEgdmVyeSB2ZXJ5IGxvbmcgdGltZSwgcmlnaHQ/KQo+Pj4+Pgo+
Pj4+PiBJbiBwcmV2aW91cyB2ZXJzaW9uLCB3ZSBhZGRlZCBhIGdlbmVyaWNfdGltZXJfbWFza19p
cnEoKSBpbgo+Pj4+PiBnZW5lcmljX3RpbWVyX2lycV9oYW5kbGVyLiBCdXQgYXMgcGVyIHRoZSBz
dWdnZXN0aW9uIFsxXSBmcm9tIEp1bGllbiwKPj4gd2UKPj4+Pj4gcmVtb3ZlZCBpdC4gQmVzaWRl
cywgd2UgcmVmZXJyZWQgdG8gdGhlIG1pbmlvcyBsb2dpYyBhdCBbMl0sIGl0IG9ubHkgY2FsbGVk
Cj4+Pj4+IHVubWFzayBhbmQgbWFzayBpbiBibG9ja19kb21haW4gKHdoaWNoIGlzIGVxdWl2YWxl
bnQgdG8gdW5pa3JhZnQncwo+Pj4+PiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykKPj4+Pgo+Pj4+
IExvb2tpbmcgYXQgbXkgY29tbWVudHMgYWdhaW4sIEkgYW0gbm90IHN1cmUgd2hlcmUgSSBzdWdn
ZXN0ZWQgdG8KPj4gcmVtb3ZlCj4+Pj4gZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpLi4uIENhbiB5
b3UgZXhwYW5kIGl0Pwo+Pj4gT2theS4uLiBzb3JyeSBmb3IgbXkgbWlzdGFrZXMuIEkgd2lsbCBh
ZGQgZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpIGJhY2suCj4+Pj4KPj4+PiBGV0lXLCB0aGUgdHdv
IG1haW4gY29tbWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb25zIHdlcmU6Cj4+Pj4gICAgICAg
MSkgaXNiKCkgc2hvdWxkIGJlIGFkZGVkIGFmdGVyIHVwZGF0aW5nIHRoZSBzeXN0ZW0gcmVnaXN0
ZXIgdG8KPj4+PiBlbnN1cmUgdGhhdCB0aGUgc3lzdGVtIHN5c3RlbSBpcyBzeW5jaHJvbml6ZWQK
Pj4+PiAgICAgICAyKSBUaGlzIGlzIGNvbW1vbiBjb2RlIGJldHdlZW4gYXJtMzIgYW5kIGFybTY0
LiBCdXQgdGhlIHN5c3RlbQo+Pj4+IHJlZ2lzdGVyIG5hbWUgYXJlIGFybTY0Li4uIEFjY2Vzc2Vz
IHNob3VsZCBiZSBzdHViIGluIGFyY2gtc3BlY2lmaWMKPj4+PiBoZWFkZXIgc28gdGhlIGNvZGUg
Y2FuIHdvcmsgZm9yIGJvdGggYXJtMzIgYW5kIGFybTY0Lgo+Pj4gSSByZW5hbWVkIHBsYXQvY29t
bW9uL2FybS90aW1lLmMgdG8gcGxhdC9jb21tb24vYXJtL3RpbWVfYXJtNjQuYwo+Pj4gU2VlbXMg
dGhhdCBpcyBub3QgZW5vdWdoIGZvciB5b3U/ICBJZiBubywgSSBoYXZlIG5vIG9iamVjdGlvbnMg
dG8gbWFrZQo+Pj4gYSBzdHViICBmb3IgYXJtMzIuCj4+Cj4+IFdlbGwsIHRoZSBvbmx5IGJpdHMg
YXJtNjQgc3BlY2lmaWNzIGluIHRoaXMgZmlsZSBhcmUgdGhlIGFjY2VzcyB0byB0aGUKPj4gc3lz
dGVtIHJlZ2lzdGVycy4gU28gcmVuYW1pbmcgdG8gdGltZV9hcm02NC5jIHNlZW1zIGEgYml0IG92
ZXJraWxsLi4uCj4+Cj4+IElmIHRoZXJlIGFyZSBwbGFuIHRvIG1ha2UgYXJtMzIgYSBjb3JyZWN0
IHBvcnQgb24gVW5pa3JhZnQsIHRoZW4KPj4gc3BsaXR0aW5nIHRoZSBjb2RlIHdvdWxkIGJlIHRo
ZSBiZXN0LiBJZiB0aGVyZSBhcmUgbm8gcGxhbiB0byBnZXQgYXJtMzIsCj4+IHRoZW4gbWF5YmUg
eW91IHNob3VsZCB0aGluayBvZiBraWxsaW5nIGl0IGNvbXBsZXRlbHkuCj4gCj4gQXJtMzIgeGVu
IHBsYXQgaXMgaW5pdGlhbGx5IHN1cHBvcnRlZCBidXQgbm8gb25lICBoYXMgdG91Y2hlZCB0aGF0
IGZvciBhIGxvbmcKPiB0aW1lLiBDdXJyZW50bHkgbGV04oCZcyBmb2N1cyBvbiBhcm02NCBrdm0g
cGxhdCBvbmx5LiBJZiB0aGUgcmVxdWlyZW1lbnRzIGNoYW5nZXMsCj4gd2UgY2FuIHN1cHBvcnQg
YXJtMzIgYWRkaXRpb25hbGx5LiBXaGF0IGRvIHlvdSB0aGluayBhYm91dCBpdD8KCkkgYW0gbm90
IGFza2luZyB0byBpbXBsZW1lbnQgYXJtMzIsIEkgYW0gb25seSBzdWdnZXN0aW5nIHRvIHRyeSB0
byBzcGxpdCAKdGhlIGNvZGUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIG1peCBjb21tb24gY29kZSB2
cyBhcmNoIHNwZWNpZmljIGNvZGUgaW4gCnBsYXQvY29tbW9uL2FybS4gVGhhdCBkaXJlY3Rvcnkg
aW4gcGFydGljdWxhciBpcyBsb29raW5nIG1lc3NpZXIgYW5kIAptZXNzaWVyIGFzIG5ldyBzZXJp
ZXMgYXJlIHBvc3RlZC4KCkNoZWVycywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 09:38:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 09:38:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA9wU-0003ZU-4n; Tue, 17 Sep 2019 09:38:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iA9wT-0003ZO-96
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 09:38:37 +0000
X-Inumbo-ID: eb5ff22e-d92e-11e9-9604-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id eb5ff22e-d92e-11e9-9604-12813bfff9fa;
 Tue, 17 Sep 2019 09:38:35 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id D37E54163F;
 Tue, 17 Sep 2019 11:38:34 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 11:38:30 +0200
Message-Id: <20190917093833.29868-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 0/3] Initial Port of the
 axtls Library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIHRoZSBheHRscyBsaWJyYXJ5ICh2ZXJzaW9uIDIu
MS41KQoKQ2hhbmdlcyBzaW5jZSB2MToKICogRml4ZWQgbW9zdCByZWRlZmluaXRpb24gd2Fybmlu
Z3MKICogUmVkdWNlZCB0aGUgbnVtYmVyIG9mIHN1cHByZXNzZWQgd2FybmluZ3MKICogUmVtb3Zl
ZCB1bnVzZWQgc291cmNlIGZpbGVzIGZyb20gTWFrZWZpbGUudWsKICogQWRkZWQgZGVwcyB0byBu
ZXdsaWIsIGx3aXAgdG8gQ29uZmlnLnVrCiAqIFJlbW92ZWQgdW5uZWNlc3Nhcnkgb3B0aW9ucyBm
cm9tIGluY2x1ZGUvY29uZmlnLmgKCkZlbGlwZSBIdWljaSAoMyk6CiAgSW50cm9kdWNlIGxpYnJh
cnkgc2tlbGV0b24KICBBZGQgTWFrZWZpbGUudWsKICBBZGQgVW5pa3JhZnQtc3BlY2lmaWMgY29u
ZmlnLmgKCiAuZ2l0aWdub3JlICAgICAgICAgICAgICB8ICAyNyArKysrKysrKysrKwogQ09ESU5H
X1NUWUxFLm1kICAgICAgICAgfCAgIDQgKysKIENPTlRSSUJVVElORy5tZCAgICAgICAgIHwgICA0
ICsrCiBDT1BZSU5HLm1kICAgICAgICAgICAgICB8ICAzOCArKysrKysrKysrKysrKysKIENvbmZp
Zy51ayAgICAgICAgICAgICAgIHwgICA1ICsrCiBNQUlOVEFJTkVSUy5tZCAgICAgICAgICB8ICAx
MCArKysrCiBNYWtlZmlsZS51ayAgICAgICAgICAgICB8IDEwNSArKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysKIFJFQURNRS5tZCAgICAgICAgICAgICAgIHwgIDE2ICsr
KysrKysKIGluY2x1ZGUvYXNtL2J5dGVvcmRlci5oIHwgIDkzICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysKIGluY2x1ZGUvY29uZmlnLmggICAgICAgIHwgMTIwICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdl
ZCwgNDIyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlIAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPTlRS
SUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZAogY3JlYXRl
IG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCiBj
cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBpbmNsdWRlL2NvbmZpZy5oCgotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 09:38:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 09:38:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA9wZ-0003aa-6O; Tue, 17 Sep 2019 09:38:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iA9wY-0003aR-8C
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 09:38:42 +0000
X-Inumbo-ID: eb5ff22f-d92e-11e9-9604-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id eb5ff22f-d92e-11e9-9604-12813bfff9fa;
 Tue, 17 Sep 2019 09:38:35 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 6331B418A6;
 Tue, 17 Sep 2019 11:38:35 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 11:38:31 +0200
Message-Id: <20190917093833.29868-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917093833.29868-1-felipe.huici@neclab.eu>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 1/3] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4K
LS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIENP
RElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysKIENPUFlJ
TkcubWQgICAgICB8IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBD
b25maWcudWsgICAgICAgfCAgNSArKysrKwogTUFJTlRBSU5FUlMubWQgIHwgMTAgKysrKysrKysr
KwogUkVBRE1FLm1kICAgICAgIHwgMTYgKysrKysrKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2Vk
LCAxMDQgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklC
VVRJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2
NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBSRUFETUUubWQKCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9y
ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWQyZmQzCi0tLSAvZGV2L251
bGwKKysrIGIvLmdpdGlnbm9yZQpAQCAtMCwwICsxLDI3IEBACisqLmRlcGVuZAorKi5vCisqLmEK
KyouZAorKi5zbworKi5vcmlnCisqLnJlagorKi5iYWsKKyouc3dwCisqfgorLCoKK1wjKlwjCisu
XCMqCitcI18qXCMKKy5cI18qCishLmdpdGlnbm9yZQorLioKKworIyBnbnUgZ2xvYmFsIGZpbGVz
CitHUEFUSAorR1JUQUdTCitHU1lNUworR1RBR1MKKworIyBjc2NvcGUgZmlsZXMKK2NzY29wZS4q
CituY3Njb3BlLioKZGlmZiAtLWdpdCBhL0NPRElOR19TVFlMRS5tZCBiL0NPRElOR19TVFlMRS5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzMwMDQxCi0tLSAvZGV2L251
bGwKKysrIGIvQ09ESU5HX1NUWUxFLm1kCkBAIC0wLDAgKzEsNCBAQAorQ29kaW5nIFN0eWxlCis9
PT09PT09PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09ESU5HX1NUWUxFLm1kYCBmaWxl
IGluIHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9DT05UUklCVVRJ
TkcubWQgYi9DT05UUklCVVRJTkcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNWY1NWVjYQotLS0gL2Rldi9udWxsCisrKyBiL0NPTlRSSUJVVElORy5tZApAQCAtMCwwICsx
LDQgQEAKK0NvbnRyaWJ1dGluZyB0byBVbmlrcmFmdAorPT09PT09PT09PT09PT09PT09PT09PT0K
KworUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09OVFJJQlVUSU5HLm1kYCBmaWxlIGluIHRoZSBtYWlu
IFVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9DT1BZSU5HLm1kIGIvQ09QWUlORy5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGNmN2MxCi0tLSAvZGV2L251
bGwKKysrIGIvQ09QWUlORy5tZApAQCAtMCwwICsxLDM4IEBACitMaWNlbnNlCis9PT09PT09CisK
K1VuaWtyYWZ0IGF4dGxzIHdyYXBwZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhp
cyByZXBvc2l0b3J5IGNvbnRhaW5zIHdyYXBwZXIgY29kZSB0byBidWlsZCBsaWJ1dWlkIHdpdGgg
VW5pa3JhZnQuCitFYWNoIEMgY29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBzaG91bGQgZGVj
bGFyZSB3aG8gaXMgdGhlCitjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFu
ZCBjb25kaXRpb25zIHRoZSBjb2RlIGlzCitsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ugbm90
ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodAorbm90aWNlIHdpbGwgYXBwbHk6
CisKKwlDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisJYXJlIG1l
dDoKKworCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisJICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
CSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhv
bGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworCSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisJICAgdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworCVRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorCUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKwlJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorCUFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUKKwlMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisJQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKwlTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKwlJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorCUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisJQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUK
KwlQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0Nv
bmZpZy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODRiNmVhCi0tLSAv
ZGV2L251bGwKKysrIGIvQ29uZmlnLnVrCkBAIC0wLDAgKzEsNSBAQAorY29uZmlnIExJQkFYVExT
CisJICAgYm9vbCAiYXhUTFMgLSBFbWJlZGRlZCBTU0wiCisJICAgZGVmYXVsdCBuCisJICAgc2Vs
ZWN0IExJQk5FV0xJQkMKKwkgICBzZWxlY3QgTElCTFdJUApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5F
UlMubWQgYi9NQUlOVEFJTkVSUy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42YTJmMGUyCi0tLSAvZGV2L251bGwKKysrIGIvTUFJTlRBSU5FUlMubWQKQEAgLTAsMCArMSwx
MCBAQAorTWFpbnRhaW5lcnMgTGlzdAorPT09PT09PT09PT09PT09PQorCitGb3Igbm90ZXMgb24g
aG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVS
Uy5tZGAgaW4KK3RoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCisKKwlBWFRMUy1VTklLUkFG
VAorCU06CUZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKwlMOgltaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVuLm9yZworCUY6ICoKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURN
RS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTI3ODZjCi0tLSAvZGV2
L251bGwKKysrIGIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTYgQEAKK2F4dGxzIGZvciBVbmlrcmFm
dAorPT09PT09PT09PT09PT09PT09PQorVGhpcyBpcyB0aGUgcG9ydCBvZiBheHRscyBmb3IgVW5p
a3JhZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4gWW91IHdpbGwKK25lZWQgbHdpcCB0byBtYWtlIGl0
IHdvcmsuIAorCitUbyBydW4gc3NsdGVzdC5jIGFzIGEgdW5pdCB0ZXN0LCB5b3UnbGwgbmVlZCBw
dGhyZWFkIHN1cHBvcnQsIGUuZy4sCithZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZSBMSUJT
IHZhcmlhYmxlIGluIHRoZSBNYWtlZmlsZToKKworICAgLi4uJChVS19MSUJTKS9sd2lwOiQoVUtf
TElCUykvcHRocmVhZC1lbWJlZGRlZDoKKyAgICAgICQoVUtfTElCUykvbmV3bGliOiQoVUtfTElC
UykvYXh0bHMuLi4KKworTm90ZSB0aGF0IHlvdSdsbCBuZWVkIGEgZmlsZXN5c3RlbSBpbiBwbGFj
ZSBhbmQgdGhlIGNlcnRpZmljYXRlIGZpbGVzIGZvcgorYWxsIHRlc3RzIHRvIHBhc3MuCisKK1Bs
ZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlv
biBpbiB0aGUgYGRvYy9gCitzdWJkaXJlY3Rvcnkgb2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3Np
dG9yeS4KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 09:38:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 09:38:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA9we-0003be-7w; Tue, 17 Sep 2019 09:38:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iA9wd-0003bG-96
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 09:38:47 +0000
X-Inumbo-ID: ec473d32-d92e-11e9-9604-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id ec473d32-d92e-11e9-9604-12813bfff9fa;
 Tue, 17 Sep 2019 09:38:36 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 7E2D841D22;
 Tue, 17 Sep 2019 11:38:36 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 11:38:33 +0200
Message-Id: <20190917093833.29868-4-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917093833.29868-1-felipe.huici@neclab.eu>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 3/3] Add
 Unikraft-specific config.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGNvbmZpZy5oIGFuZCBnbHVlIGhlYWRlciBmaWxlIG5lZWRlZCBieSBheHRscyBidXQgbm90
IHByb3ZpZGVkIGJ5IG5ld2xpYi4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBl
Lmh1aWNpQG5lY2xhYi5ldT4KLS0tCiBpbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCB8ICA5MyArKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL2NvbmZpZy5oICAgICAg
ICB8IDEyMCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK
IDIgZmlsZXMgY2hhbmdlZCwgMjEzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp
bmNsdWRlL2FzbS9ieXRlb3JkZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvY29uZmln
LmgKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCBiL2luY2x1ZGUvYXNtL2J5
dGVvcmRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NWMyNmYKLS0t
IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaApAQCAtMCwwICsxLDkzIEBA
CisvKiBUYWtlbiBmcm9tIG11c2wncyBlbmRpYW4uaCAqLworCisjaWZuZGVmIExJQkFYVExTX0dM
VUVfRU5ESUFOX0gKKyNkZWZpbmUgTElCQVhUTFNfR0xVRV9FTkRJQU5fSAorCisKKy8qICNpbmNs
dWRlIDxmZWF0dXJlcy5oPiAqLworCisjZGVmaW5lIF9fTElUVExFX0VORElBTiAxMjM0CisjZGVm
aW5lIF9fQklHX0VORElBTiA0MzIxCisjZGVmaW5lIF9fUERQX0VORElBTiAzNDEyCisKKy8qICNp
ZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fQllURV9PUkRFUl9fKSAqLworI2RlZmlu
ZSBfX0JZVEVfT1JERVIgX19CWVRFX09SREVSX18KKy8qCisjZWxzZQorI2luY2x1ZGUgPGJpdHMv
ZW5kaWFuLmg+CisjZW5kaWYKKyovCisvKiAjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVm
aW5lZChfQlNEX1NPVVJDRSkgKi8KKworI2lmbmRlZiBCSUdfRU5ESUFOCisjZGVmaW5lIEJJR19F
TkRJQU4gX19CSUdfRU5ESUFOCisjZW5kaWYKKyNpZm5kZWYgTElUVExFX0VORElBTgorI2RlZmlu
ZSBMSVRUTEVfRU5ESUFOIF9fTElUVExFX0VORElBTgorI2VuZGlmCisjaWZuZGVmIFBEUF9FTkRJ
QU4KKyNkZWZpbmUgUERQX0VORElBTiBfX1BEUF9FTkRJQU4KKyNlbmRpZgorI2lmbmRlZiBCWVRF
X09SREVSCisjZGVmaW5lIEJZVEVfT1JERVIgX19CWVRFX09SREVSCisjZW5kaWYKKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKworc3RhdGljIF9faW5saW5lIHVpbnQxNl90IF9fYnN3YXAxNih1aW50MTZf
dCBfX3gpCit7CisJcmV0dXJuIF9feDw8OCB8IF9feD4+ODsKK30KKworc3RhdGljIF9faW5saW5l
IHVpbnQzMl90IF9fYnN3YXAzMih1aW50MzJfdCBfX3gpCit7CisJcmV0dXJuIF9feD4+MjQgfCBf
X3g+PjgmMHhmZjAwIHwgX194PDw4JjB4ZmYwMDAwIHwgX194PDwyNDsKK30KKworc3RhdGljIF9f
aW5saW5lIHVpbnQ2NF90IF9fYnN3YXA2NCh1aW50NjRfdCBfX3gpCit7CisJcmV0dXJuIF9fYnN3
YXAzMihfX3gpKzBVTEw8PDMyIHwgX19ic3dhcDMyKF9feD4+MzIpOworfQorCisjaWYgX19CWVRF
X09SREVSID09IF9fTElUVExFX0VORElBTgorI2RlZmluZSBodG9iZTE2KHgpIF9fYnN3YXAxNih4
KQorI2RlZmluZSBiZTE2dG9oKHgpIF9fYnN3YXAxNih4KQorI2RlZmluZSBiZXRvaDE2KHgpIF9f
YnN3YXAxNih4KQorI2RlZmluZSBodG9iZTMyKHgpIF9fYnN3YXAzMih4KQorI2RlZmluZSBiZTMy
dG9oKHgpIF9fYnN3YXAzMih4KQorI2RlZmluZSBiZXRvaDMyKHgpIF9fYnN3YXAzMih4KQorI2Rl
ZmluZSBodG9iZTY0KHgpIF9fYnN3YXA2NCh4KQorI2RlZmluZSBiZTY0dG9oKHgpIF9fYnN3YXA2
NCh4KQorI2RlZmluZSBiZXRvaDY0KHgpIF9fYnN3YXA2NCh4KQorI2RlZmluZSBodG9sZTE2KHgp
ICh1aW50MTZfdCkoeCkKKyNkZWZpbmUgbGUxNnRvaCh4KSAodWludDE2X3QpKHgpCisjZGVmaW5l
IGxldG9oMTYoeCkgKHVpbnQxNl90KSh4KQorI2RlZmluZSBodG9sZTMyKHgpICh1aW50MzJfdCko
eCkKKyNkZWZpbmUgbGUzMnRvaCh4KSAodWludDMyX3QpKHgpCisjZGVmaW5lIGxldG9oMzIoeCkg
KHVpbnQzMl90KSh4KQorI2RlZmluZSBodG9sZTY0KHgpICh1aW50NjRfdCkoeCkKKyNkZWZpbmUg
bGU2NHRvaCh4KSAodWludDY0X3QpKHgpCisjZGVmaW5lIGxldG9oNjQoeCkgKHVpbnQ2NF90KSh4
KQorI2Vsc2UKKyNkZWZpbmUgaHRvYmUxNih4KSAodWludDE2X3QpKHgpCisjZGVmaW5lIGJlMTZ0
b2goeCkgKHVpbnQxNl90KSh4KQorI2RlZmluZSBiZXRvaDE2KHgpICh1aW50MTZfdCkoeCkKKyNk
ZWZpbmUgaHRvYmUzMih4KSAodWludDMyX3QpKHgpCisjZGVmaW5lIGJlMzJ0b2goeCkgKHVpbnQz
Ml90KSh4KQorI2RlZmluZSBiZXRvaDMyKHgpICh1aW50MzJfdCkoeCkKKyNkZWZpbmUgaHRvYmU2
NCh4KSAodWludDY0X3QpKHgpCisjZGVmaW5lIGJlNjR0b2goeCkgKHVpbnQ2NF90KSh4KQorI2Rl
ZmluZSBiZXRvaDY0KHgpICh1aW50NjRfdCkoeCkKKyNkZWZpbmUgaHRvbGUxNih4KSBfX2Jzd2Fw
MTYoeCl2CisjZGVmaW5lIGxlMTZ0b2goeCkgX19ic3dhcDE2KHgpCisjZGVmaW5lIGxldG9oMTYo
eCkgX19ic3dhcDE2KHgpCisjZGVmaW5lIGh0b2xlMzIoeCkgX19ic3dhcDMyKHgpCisjZGVmaW5l
IGxlMzJ0b2goeCkgX19ic3dhcDMyKHgpCisjZGVmaW5lIGxldG9oMzIoeCkgX19ic3dhcDMyKHgp
CisjZGVmaW5lIGh0b2xlNjQoeCkgX19ic3dhcDY0KHgpCisjZGVmaW5lIGxlNjR0b2goeCkgX19i
c3dhcDY0KHgpCisjZGVmaW5lIGxldG9oNjQoeCkgX19ic3dhcDY0KHgpCisjZW5kaWYKKworLyog
I2VuZGlmICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jb25maWcuaCBiL2luY2x1
ZGUvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3ZDUzNQot
LS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvY29uZmlnLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8q
CisgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBoZWFkZXIgZmlsZTogZG9uJ3QgZWRpdAorICov
CisKKyNkZWZpbmUgSEFWRV9ET1RfQ09ORklHIDEKKyN1bmRlZiBDT05GSUdfUExBVEZPUk1fQ1lH
V0lOCisjdW5kZWYgQ09ORklHX1BMQVRGT1JNX1dJTjMyCisKKy8qCisgKiBHZW5lcmFsIENvbmZp
Z3VyYXRpb24KKyAqLworI2lmZGVmIFVLX0RFQlVHCisjZGVmaW5lIENPTkZJR19ERUJVRworI2Vs
c2UKKyN1bmRlZiBDT05GSUdfREVCVUcKKyNlbmRpZiAvKiBVS19ERUJVRyAqLworCisjZGVmaW5l
IENPTkZJR19TVFJJUF9VTldBTlRFRF9TRUNUSU9OUyAxCisjdW5kZWYgQ09ORklHX1ZJU1VBTF9T
VFVESU9fN18wCisjdW5kZWYgQ09ORklHX1ZJU1VBTF9TVFVESU9fOF8wCisjdW5kZWYgQ09ORklH
X1ZJU1VBTF9TVFVESU9fMTBfMAorI2RlZmluZSBDT05GSUdfVklTVUFMX1NUVURJT183XzBfQkFT
RSAiIgorI2RlZmluZSBDT05GSUdfVklTVUFMX1NUVURJT184XzBfQkFTRSAiIgorI2RlZmluZSBD
T05GSUdfVklTVUFMX1NUVURJT18xMF8wX0JBU0UgIiIKKyNkZWZpbmUgQ09ORklHX0VYVFJBX0NG
TEFHU19PUFRJT05TICIiCisjZGVmaW5lIENPTkZJR19FWFRSQV9MREZMQUdTX09QVElPTlMgIiIK
KworLyoKKyAqIFNTTCBMaWJyYXJ5CisgKi8KKyN1bmRlZiBDT05GSUdfU1NMX1NFUlZFUl9PTkxZ
CisjdW5kZWYgQ09ORklHX1NTTF9DRVJUX1ZFUklGSUNBVElPTgorI3VuZGVmIENPTkZJR19TU0xf
RU5BQkxFX0NMSUVOVAorI2RlZmluZSBDT05GSUdfU1NMX0ZVTExfTU9ERSAxCisjdW5kZWYgQ09O
RklHX1NTTF9TS0VMRVRPTl9NT0RFCisjdW5kZWYgQ09ORklHX1NTTF9QUk9UX0xPVworI2RlZmlu
ZSBDT05GSUdfU1NMX1BST1RfTUVESVVNIDEKKyN1bmRlZiBDT05GSUdfU1NMX1BST1RfSElHSAor
I2RlZmluZSBDT05GSUdfU1NMX1VTRV9ERUZBVUxUX0tFWSAxCisjZGVmaW5lIENPTkZJR19TU0xf
UFJJVkFURV9LRVlfTE9DQVRJT04gIiIKKyNkZWZpbmUgQ09ORklHX1NTTF9QUklWQVRFX0tFWV9Q
QVNTV09SRCAiIgorI2RlZmluZSBDT05GSUdfU1NMX1g1MDlfQ0VSVF9MT0NBVElPTiAiIgorI3Vu
ZGVmIENPTkZJR19TU0xfR0VORVJBVEVfWDUwOV9DRVJUCisjZGVmaW5lIENPTkZJR19TU0xfWDUw
OV9DT01NT05fTkFNRSAiIgorI2RlZmluZSBDT05GSUdfU1NMX1g1MDlfT1JHQU5JWkFUSU9OX05B
TUUgIiIKKyNkZWZpbmUgQ09ORklHX1NTTF9YNTA5X09SR0FOSVpBVElPTl9VTklUX05BTUUgIiIK
KyNkZWZpbmUgQ09ORklHX1NTTF9IQVNfUEVNIDEKKyNkZWZpbmUgQ09ORklHX1NTTF9VU0VfUEtD
UzEyIDEKKyNkZWZpbmUgQ09ORklHX1NTTF9FWFBJUllfVElNRSAyNAorI2RlZmluZSBDT05GSUdf
WDUwOV9NQVhfQ0FfQ0VSVFMgMTUwCisjZGVmaW5lIENPTkZJR19TU0xfTUFYX0NFUlRTIDMKKyN1
bmRlZiBDT05GSUdfU1NMX0NUWF9NVVRFWElORworI3VuZGVmIENPTkZJR19XSU4zMl9VU0VfQ1JZ
UFRPX0xJQgorI2RlZmluZSBDT05GSUdfT1BFTlNTTF9DT01QQVRJQkxFIDEKKyN1bmRlZiBDT05G
SUdfUEVSRk9STUFOQ0VfVEVTVElORworI3VuZGVmIENPTkZJR19TU0xfVEVTVAorI2RlZmluZSBD
T05GSUdfQVhUTFNXUkFQIDEKKyN1bmRlZiBDT05GSUdfQVhIVFRQRAorI3VuZGVmIENPTkZJR19I
VFRQX1NUQVRJQ19CVUlMRAorI2RlZmluZSBDT05GSUdfSFRUUF9QT1JUIAorI2RlZmluZSBDT05G
SUdfSFRUUF9IVFRQU19QT1JUIAorI2RlZmluZSBDT05GSUdfSFRUUF9TRVNTSU9OX0NBQ0hFX1NJ
WkUgCisjZGVmaW5lIENPTkZJR19IVFRQX1dFQlJPT1QgIiIKKyNkZWZpbmUgQ09ORklHX0hUVFBf
VElNRU9VVCAKKyN1bmRlZiBDT05GSUdfSFRUUF9IQVNfQ0dJCisjZGVmaW5lIENPTkZJR19IVFRQ
X0NHSV9FWFRFTlNJT05TICIiCisjdW5kZWYgQ09ORklHX0hUVFBfRU5BQkxFX0xVQQorI2RlZmlu
ZSBDT05GSUdfSFRUUF9MVUFfUFJFRklYICIiCisjdW5kZWYgQ09ORklHX0hUVFBfQlVJTERfTFVB
CisjZGVmaW5lIENPTkZJR19IVFRQX0NHSV9MQVVOQ0hFUiAiIgorI3VuZGVmIENPTkZJR19IVFRQ
X0RJUkVDVE9SSUVTCisjdW5kZWYgQ09ORklHX0hUVFBfSEFTX0FVVEhPUklaQVRJT04KKyN1bmRl
ZiBDT05GSUdfSFRUUF9IQVNfSVBWNgorI3VuZGVmIENPTkZJR19IVFRQX0VOQUJMRV9ESUZGRVJF
TlRfVVNFUgorI2RlZmluZSBDT05GSUdfSFRUUF9VU0VSICIiCisjdW5kZWYgQ09ORklHX0hUVFBf
VkVSQk9TRQorI3VuZGVmIENPTkZJR19IVFRQX0lTX0RBRU1PTgorCisvKgorICogTGFuZ3VhZ2Ug
QmluZGluZ3MKKyAqLworI3VuZGVmIENPTkZJR19CSU5ESU5HUworI3VuZGVmIENPTkZJR19DU0hB
UlBfQklORElOR1MKKyN1bmRlZiBDT05GSUdfVkJORVRfQklORElOR1MKKyNkZWZpbmUgQ09ORklH
X0RPVF9ORVRfRlJBTUVXT1JLX0JBU0UgIiIKKyN1bmRlZiBDT05GSUdfSkFWQV9CSU5ESU5HUwor
I2RlZmluZSBDT05GSUdfSkFWQV9IT01FICIiCisjdW5kZWYgQ09ORklHX1BFUkxfQklORElOR1MK
KyNkZWZpbmUgQ09ORklHX1BFUkxfQ09SRSAiIgorI2RlZmluZSBDT05GSUdfUEVSTF9MSUIgIiIK
KyN1bmRlZiBDT05GSUdfTFVBX0JJTkRJTkdTCisjZGVmaW5lIENPTkZJR19MVUFfQ09SRSAiIgor
CisvKgorICogU2FtcGxlcworICovCisjdW5kZWYgQ09ORklHX1NBTVBMRVMKKyN1bmRlZiBDT05G
SUdfQ19TQU1QTEVTCisjdW5kZWYgQ09ORklHX0NTSEFSUF9TQU1QTEVTCisjdW5kZWYgQ09ORklH
X1ZCTkVUX1NBTVBMRVMKKyN1bmRlZiBDT05GSUdfSkFWQV9TQU1QTEVTCisjdW5kZWYgQ09ORklH
X1BFUkxfU0FNUExFUworI3VuZGVmIENPTkZJR19MVUFfU0FNUExFUworCisvKgorICogQmlnSW50
IE9wdGlvbnMKKyAqLworI3VuZGVmIENPTkZJR19CSUdJTlRfQ0xBU1NJQ0FMCisjdW5kZWYgQ09O
RklHX0JJR0lOVF9NT05UR09NRVJZCisjZGVmaW5lIENPTkZJR19CSUdJTlRfQkFSUkVUVCAxCisj
ZGVmaW5lIENPTkZJR19CSUdJTlRfQ1JUIDEKKyN1bmRlZiBDT05GSUdfQklHSU5UX0tBUkFUU1VC
QQorI2RlZmluZSBNVUxfS0FSQVRTVUJBX1RIUkVTSCAKKyNkZWZpbmUgU1FVX0tBUkFUU1VCQV9U
SFJFU0ggCisjZGVmaW5lIENPTkZJR19CSUdJTlRfU0xJRElOR19XSU5ET1cgMQorI2RlZmluZSBD
T05GSUdfQklHSU5UX1NRVUFSRSAxCisjdW5kZWYgQ09ORklHX0JJR0lOVF9DSEVDS19PTgorI2Rl
ZmluZSBDT05GSUdfSU5URUdFUl8zMkJJVCAxCisjdW5kZWYgQ09ORklHX0lOVEVHRVJfMTZCSVQK
KyN1bmRlZiBDT05GSUdfSU5URUdFUl84QklUCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0
Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 09:38:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 09:38:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iA9wj-0003d9-9c; Tue, 17 Sep 2019 09:38:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iA9wi-0003cx-8T
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 09:38:52 +0000
X-Inumbo-ID: ebf0ae7c-d92e-11e9-9604-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id ebf0ae7c-d92e-11e9-9604-12813bfff9fa;
 Tue, 17 Sep 2019 09:38:36 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id E239A41C15;
 Tue, 17 Sep 2019 11:38:35 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 11:38:32 +0200
Message-Id: <20190917093833.29868-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917093833.29868-1-felipe.huici@neclab.eu>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBhIHBvcnQgb2YgYXh0bHMgdG8gVW5pa3JhZnQgYXMgYW4gZXh0ZXJuYWwgbGlicmFy
eS4gSXQgcmVxdWlyZXMKbGliYyBhbmQgbHdpcCB0byB3b3JrLgoKVG8gcnVuIHNzbHRlc3QuYyBh
cyBhIHVuaXQgdGVzdCwgeW91J2xsIG5lZWQgcHRocmVhZCBzdXBwb3J0LCBlLmcuLAphZGQgdGhl
IGZvbGxvd2luZyBsaW5lIHRvIHRoZSBMSUJTIHZhcmlhYmxlIGluIHRoZSBNYWtlZmlsZToKCiAg
IC4uLiQoVUtfTElCUykvbHdpcDokKFVLX0xJQlMpL3B0aHJlYWQtZW1iZWRkZWQ6CiAgICAgICAg
ICQoVUtfTElCUykvbmV3bGliOiQoVUtfTElCUykvYXh0bHMuLi4KCk5vdGUgdGhhdCB5b3UnbGwg
bmVlZCBhIGZpbGVzeXN0ZW0gaW4gcGxhY2UgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBmaWxlcyBmb3IK
YWxsIHRlc3RzIHRvIHBhc3MuCgpTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5o
dWljaUBuZWNsYWIuZXU+Ci0tLQogTWFrZWZpbGUudWsgfCAxMDUgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdl
ZCwgMTA1IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awoKZGlm
ZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uMDhmOGNhZQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlLnVrCkBA
IC0wLDAgKzEsMTA1IEBACisjICBsaWJheHRscyBNYWtlZmlsZS51aworIworIyAgQXV0aG9yczog
RmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgorIworIyAgQ29weXJpZ2h0IChj
KSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0OgorIworIyAg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0
IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgICAgIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyMKKyMgIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElO
IEFOWSBXQVkuCisjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnkgcmVnaXN0
cmF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworJChldmFsICQoY2FsbCBhZGRsaWJfcyxs
aWJheHRscywkKENPTkZJR19MSUJBWFRMUykpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
IyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCQVhUTFNfVkVSU0lPTj0yLjEu
NQorTElCQVhUTFNfVVJMPWh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2F4dGxzL2Zp
bGVzLzIuMS41L2F4VExTLSQoTElCQVhUTFNfVkVSU0lPTikudGFyLmd6L2Rvd25sb2FkCitMSUJB
WFRMU19QQVRDSERJUj0kKExJQkFYVExTX0JBU0UpL3BhdGNoZXMKKyQoZXZhbCAkKGNhbGwgZmV0
Y2hhcyxsaWJheHRscywkKExJQkFYVExTX1VSTCksJChMSUJBWFRMU19WRVJTSU9OKS50Z3opKQor
JChldmFsICQoY2FsbCBwYXRjaCxsaWJheHRscywkKExJQkFYVExTX1BBVENIRElSKSxsaWJheHRs
cy0kKExJQkFYVExTX1ZFUlNJT04pKSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSGVs
cGVycworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJQkFYVExTX1NSQz0kKExJQkFYVExTX09S
SUdJTikvYXh0bHMtY29kZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IGlu
Y2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkFY
VExTKSArPSAgIC1JJChMSUJBWFRMU19TUkMpL2luY2x1ZGUgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC1JJChMSUJBWFRMU19TUkMpL2NyeXB0byAgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC1JJChMSUJBWFRMU19TUkMpL3NzbCAgICAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJChMSUJBWFRMU19CQVNFKS9pbmNsdWRlCisK
K0NYWElOQ0xVREVTLSQoQ09ORklHX0xJQkFYVExTKSArPSAtSSQoTElCQVhUTFNfU1JDKS9pbmNs
dWRlIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQoTElCQVhUTFNfU1JD
KS9jcnlwdG8gIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQoTElCQVhU
TFNfU1JDKS9zc2wgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQo
TElCQVhUTFNfQkFTRSkvaW5jbHVkZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHbG9i
YWwgZmxhZ3MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJBWFRMU19DRkxBR1MteSArPSAt
REhBVkVfQ09ORklHX0gKKworIyBTdXBwcmVzcyBzb21lIHdhcm5pbmdzIHRvIG1ha2UgdGhlIGJ1
aWxkIHByb2Nlc3MgbG9vayBuZWF0ZXIKK1NVUFBSRVNTX0ZMQUdTICs9IC1Xbm8tc2lnbi1jb21w
YXJlIC1Xbm8tcGFyZW50aGVzZXMgLVduby11bnVzZWQtcGFyYW1ldGVyCisKK0xJQkFYVExTX0NG
TEFHUy15ICAgKz0gJChTVVBQUkVTU19GTEFHUykKK0xJQkFYVExTX0NYWEZMQUdTLXkgKz0gJChT
VVBQUkVTU19GTEFHUykKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgYXh0bHMgY29kZSAt
IGNyeXB0bworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJQkFYVExTX1NSQ1MteSArPSAkKExJ
QkFYVExTX1NSQykvY3J5cHRvL2Flcy5jCitMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19T
UkMpL2NyeXB0by9iaWdpbnQuYworTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9j
cnlwdG8vY3J5cHRvX21pc2MuYworTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9j
cnlwdG8vaG1hYy5jCitMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9t
ZDUuYworTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9jcnlwdG8vcmM0LmMKK0xJ
QkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3JzYS5jCitMSUJBWFRMU19T
UkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGExLmMKK0xJQkFYVExTX1NSQ1MteSAr
PSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3NoYTI1Ni5jCitMSUJBWFRMU19TUkNTLXkgKz0gJChM
SUJBWFRMU19TUkMpL2NyeXB0by9zaGEzODQuYworTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhU
TFNfU1JDKS9jcnlwdG8vc2hhNTEyLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgYXh0
bHMgY29kZSAtIHNzbAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJQkFYVExTX1NSQ1MteSAr
PSAkKExJQkFYVExTX1NSQykvc3NsL2FzbjEuYworI0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFY
VExTX1NSQykvc3NsL2dlbl9jZXJ0LmMKK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NS
Qykvc3NsL2xvYWRlci5jCitMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC9v
cGVuc3NsLmMKKyNMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC9vc19wb3J0
LmMKK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL3AxMi5jCitMSUJBWFRM
U19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC90bHMxLmMKK0xJQkFYVExTX1NSQ1MteSAr
PSAkKExJQkFYVExTX1NSQykvc3NsL3RsczFfc3ZyLmMKK0xJQkFYVExTX1NSQ1MteSArPSAkKExJ
QkFYVExTX1NSQykvc3NsL3RsczFfY2xudC5jCitMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRM
U19TUkMpL3NzbC94NTA5LmMKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 10:08:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 10:08:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAAPN-0007bO-3N; Tue, 17 Sep 2019 10:08:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=8Z6k=XM=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAAPL-0007b5-TX
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 10:08:27 +0000
X-Inumbo-ID: 16731ed8-d933-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 16731ed8-d933-11e9-b76c-bc764e2007e4;
 Tue, 17 Sep 2019 10:08:25 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2281CF2019;
 Tue, 17 Sep 2019 12:08:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id jQgPnrxEiPLt; Tue, 17 Sep 2019 12:08:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E67A9F2011;
 Tue, 17 Sep 2019 12:08:10 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Sep
 2019 12:08:10 +0200
To: Julien Grall <julien.grall@arm.com>, "Justin He (Arm Technology China)"
 <Justin.He@arm.com>, Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
Date: Tue, 17 Sep 2019 12:08:10 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDkvMTcvMTkgMTE6MTcgQU0sIEp1bGllbiBHcmFsbCB3cm90ZToKPgo+Cj4gT24gOS8xNy8x
OSA5OjQ0IEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90ZToKPj4gSGkg
SnVsaWVuCj4KPiBIaSwKPgo+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4+IEZyb206
IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Cj4+PiBTZW50OiAyMDE55bm0Oeac
iDE35pelIDE2OjM5Cj4+PiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1
c3Rpbi5IZUBhcm0uY29tPjsgU2FudGlhZ28KPj4+IFBhZ2FuaSA8U2FudGlhZ28uUGFnYW5pQG5l
Y2xhYi5ldT47IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsKPj4+IFNpbW9uIEt1
ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PjsgU2hhcmFuIFNhbnRoYW5hbQo+Pj4gPFNo
YXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1Pgo+Pj4gQ2M6IEthbHkgWGluIChBcm0gVGVjaG5vbG9n
eSBDaGluYSkgPEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbiAoQXJtCj4+PiBUZWNobm9sb2d5
IENoaW5hKSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0gVGVjaG5vbG9neQo+
Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Cj4+PiBTdWJq
ZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZCBhbmQgcmVn
aXN0ZXIgSVJRCj4+PiBmb3IgYXJjaF90aW1lcgo+Pj4KPj4+IE9uIDkvMTcvMTkgODowMSBBTSwg
SnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6Cj4+Pj4gSGkgSnVsaWVuICh3
ZWxjb21lIGJhY2sgZnJvbSBob2xpZGF5IPCfmIogKQo+Pj4KPj4+IEhpLAo+Pj4KPj4+IFRoYW5r
cyA6KS4KPj4+Cj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4+IEZyb206IEp1
bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Cj4+Pj4+IFNlbnQ6IDIwMTnlubQ55pyI
MTfml6UgMzo1Mwo+Pj4+PiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1
c3Rpbi5IZUBhcm0uY29tPjsgU2FudGlhZ28KPj4+Pj4gUGFnYW5pIDxTYW50aWFnby5QYWdhbmlA
bmVjbGFiLmV1PjsgCj4+Pj4+IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsKPj4+
Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+OyBTaGFyYW4gU2FudGhh
bmFtCj4+Pj4+IDxTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4KPj4+Pj4gQ2M6IEthbHkgWGlu
IChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbgo+Pj4g
KEFybQo+Pj4+PiBUZWNobm9sb2d5IENoaW5hKSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25n
IFd1IChBcm0KPj4+IFRlY2hub2xvZ3kKPj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29t
Pgo+Pj4+PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjog
RmluZCBhbmQgcmVnaXN0ZXIKPj4+IElSUQo+Pj4+PiBmb3IgYXJjaF90aW1lcgo+Pj4+Pgo+Pj4+
PiBPbiA5LzE2LzE5IDg6NTIgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdy
b3RlOgo+Pj4+Pj4gSGnCoCBTYW50aWFnbwo+Pj4+Pgo+Pj4+PiBIaSBhbGwsCj4+Pj4+Cj4+Pj4+
IEBTYW50aWFnbywgaXQgaXMgcXVpdGUgZGlmZmljdWx0IHRvIGZvbGxvdyB0aGUgdGhyZWFkIHdo
ZW4geW91IHN0YXJ0Cj4+Pj4+IHlvdXIgYW5zd2VyIHdpdGggIkNPTU1FTlQiLiBNYXkgSSBhc2sg
eW91IHRvIGNvbmZpZ3VyZSB5b3VyIGUtbWFpbAo+Pj4+PiBjbGllbnQgdG8gcXVvdGUgcHJvcGVy
bHkgKGkuZSA+KT8KPj4+Pj4KPj4+Pj4gRnVydGhlcm1vcmUsIGRpc2NsYWltZXIgZm9vdGVyIHNo
b3VsZCBiZSBhdm9pZGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QuCj4+Pj4+IFlvdSBhcmUgYmFzaWNh
bGx5IHNheWluZyB0aGlzIGlzIGNvbmZpZGVudGlhbCBidXQgeW91IHNlbmQgdG8gCj4+Pj4+IGV2
ZXJ5b25lCj4+Pj4+IChtYWlsaW5nIGxpc3QgYXJlIGFyY2hpdmVkKS4uLgo+Pj4+IE9LCj4+Pgo+
Pj4gSXQgd2Fzbid0IGRpcmVjdGVkIHRvIHlvdSA7KS4KPj4+Cj4+Pj4+Cj4+Pj4+IFsuLi5dCj4+
Pj4+Cj4+Pj4+Pj4gQ09NTUVOVDogVGhlcmUgaXMgbm90aGluZyB0aGF0IHdlIHdvdWxkIGxpa2Ug
dG8gZG8gaGVyZT8gTm90IGV2ZW4KPj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/IEFzIHRoZSB0aW1l
ciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUgY291bnRlcgo+Pj4+PiBvdmVyZmxvd3MKPj4+Pj4+
PiB3ZSB3b3VsZCBnZXQgYSBuZXcgaW50ZXJydXB0IG90aGVyd2lzZSAoYWx0aG91Z2ggdGhlIG92
ZXJmbG93IGNvdWxkCj4+Pj4+Pj4gaGFwcGVuIGluIGEgdmVyeSB2ZXJ5IGxvbmcgdGltZSwgcmln
aHQ/KQo+Pj4+Pj4KPj4+Pj4+IEluIHByZXZpb3VzIHZlcnNpb24sIHdlIGFkZGVkIGEgZ2VuZXJp
Y190aW1lcl9tYXNrX2lycSgpIGluCj4+Pj4+PiBnZW5lcmljX3RpbWVyX2lycV9oYW5kbGVyLiBC
dXQgYXMgcGVyIHRoZSBzdWdnZXN0aW9uIFsxXSBmcm9tIAo+Pj4+Pj4gSnVsaWVuLAo+Pj4gd2UK
Pj4+Pj4+IHJlbW92ZWQgaXQuIEJlc2lkZXMsIHdlIHJlZmVycmVkIHRvIHRoZSBtaW5pb3MgbG9n
aWMgYXQgWzJdLCBpdCAKPj4+Pj4+IG9ubHkgY2FsbGVkCj4+Pj4+PiB1bm1hc2sgYW5kIG1hc2sg
aW4gYmxvY2tfZG9tYWluICh3aGljaCBpcyBlcXVpdmFsZW50IHRvIHVuaWtyYWZ0J3MKPj4+Pj4+
IGdlbmVyaWNfdGltZXJfY3B1X2Jsb2NrKQo+Pj4+Pgo+Pj4+PiBMb29raW5nIGF0IG15IGNvbW1l
bnRzIGFnYWluLCBJIGFtIG5vdCBzdXJlIHdoZXJlIEkgc3VnZ2VzdGVkIHRvCj4+PiByZW1vdmUK
Pj4+Pj4gZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpLi4uIENhbiB5b3UgZXhwYW5kIGl0Pwo+Pj4+
IE9rYXkuLi4gc29ycnkgZm9yIG15IG1pc3Rha2VzLiBJIHdpbGwgYWRkIGdlbmVyaWNfdGltZXJf
bWFza19pcnEoKSAKPj4+PiBiYWNrLgo+Pj4+Pgo+Pj4+PiBGV0lXLCB0aGUgdHdvIG1haW4gY29t
bWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb25zIHdlcmU6Cj4+Pj4+IMKgwqDCoMKgwqAgMSkg
aXNiKCkgc2hvdWxkIGJlIGFkZGVkIGFmdGVyIHVwZGF0aW5nIHRoZSBzeXN0ZW0gcmVnaXN0ZXIg
dG8KPj4+Pj4gZW5zdXJlIHRoYXQgdGhlIHN5c3RlbSBzeXN0ZW0gaXMgc3luY2hyb25pemVkCj4+
Pj4+IMKgwqDCoMKgwqAgMikgVGhpcyBpcyBjb21tb24gY29kZSBiZXR3ZWVuIGFybTMyIGFuZCBh
cm02NC4gQnV0IHRoZSBzeXN0ZW0KPj4+Pj4gcmVnaXN0ZXIgbmFtZSBhcmUgYXJtNjQuLi4gQWNj
ZXNzZXMgc2hvdWxkIGJlIHN0dWIgaW4gYXJjaC1zcGVjaWZpYwo+Pj4+PiBoZWFkZXIgc28gdGhl
IGNvZGUgY2FuIHdvcmsgZm9yIGJvdGggYXJtMzIgYW5kIGFybTY0Lgo+Pj4+IEkgcmVuYW1lZCBw
bGF0L2NvbW1vbi9hcm0vdGltZS5jIHRvIHBsYXQvY29tbW9uL2FybS90aW1lX2FybTY0LmMKPj4+
PiBTZWVtcyB0aGF0IGlzIG5vdCBlbm91Z2ggZm9yIHlvdT/CoCBJZiBubywgSSBoYXZlIG5vIG9i
amVjdGlvbnMgdG8gbWFrZQo+Pj4+IGEgc3R1YsKgIGZvciBhcm0zMi4KPj4+Cj4+PiBXZWxsLCB0
aGUgb25seSBiaXRzIGFybTY0IHNwZWNpZmljcyBpbiB0aGlzIGZpbGUgYXJlIHRoZSBhY2Nlc3Mg
dG8gdGhlCj4+PiBzeXN0ZW0gcmVnaXN0ZXJzLiBTbyByZW5hbWluZyB0byB0aW1lX2FybTY0LmMg
c2VlbXMgYSBiaXQgb3ZlcmtpbGwuLi4KPj4+Cj4+PiBJZiB0aGVyZSBhcmUgcGxhbiB0byBtYWtl
IGFybTMyIGEgY29ycmVjdCBwb3J0IG9uIFVuaWtyYWZ0LCB0aGVuCj4+PiBzcGxpdHRpbmcgdGhl
IGNvZGUgd291bGQgYmUgdGhlIGJlc3QuIElmIHRoZXJlIGFyZSBubyBwbGFuIHRvIGdldCAKPj4+
IGFybTMyLAo+Pj4gdGhlbiBtYXliZSB5b3Ugc2hvdWxkIHRoaW5rIG9mIGtpbGxpbmcgaXQgY29t
cGxldGVseS4KPj4KPj4gQXJtMzIgeGVuIHBsYXQgaXMgaW5pdGlhbGx5IHN1cHBvcnRlZCBidXQg
bm8gb25lwqAgaGFzIHRvdWNoZWQgdGhhdCAKPj4gZm9yIGEgbG9uZwo+PiB0aW1lLiBDdXJyZW50
bHkgbGV04oCZcyBmb2N1cyBvbiBhcm02NCBrdm0gcGxhdCBvbmx5LiBJZiB0aGUgCj4+IHJlcXVp
cmVtZW50cyBjaGFuZ2VzLAo+PiB3ZSBjYW4gc3VwcG9ydCBhcm0zMiBhZGRpdGlvbmFsbHkuIFdo
YXQgZG8geW91IHRoaW5rIGFib3V0IGl0Pwo+Cj4gSSBhbSBub3QgYXNraW5nIHRvIGltcGxlbWVu
dCBhcm0zMiwgSSBhbSBvbmx5IHN1Z2dlc3RpbmcgdG8gdHJ5IHRvIAo+IHNwbGl0IHRoZSBjb2Rl
IHJhdGhlciB0aGFuIHRyeWluZyB0byBtaXggY29tbW9uIGNvZGUgdnMgYXJjaCBzcGVjaWZpYyAK
PiBjb2RlIGluIHBsYXQvY29tbW9uL2FybS4gVGhhdCBkaXJlY3RvcnkgaW4gcGFydGljdWxhciBp
cyBsb29raW5nIAo+IG1lc3NpZXIgYW5kIG1lc3NpZXIgYXMgbmV3IHNlcmllcyBhcmUgcG9zdGVk
LgoKSSBhZ3JlZSB3aXRoIEp1bGllbiBpdCBpcyBiZXR0ZXIgdG8gc3BsaXQgdGhlIGFybTMyIGNv
ZGUgZnJvbSB0aGUgYXJtNjQgCmNvZGUuIE15IHN1Z2dlc3Rpb24gd291bGQgYmUKCnBsYXQvY29t
bW9uL2FybSBmb3IgMzItYml0IGNvZGUKCnBsYXQvY29tbW9uL2FybTY0IGZvciB0aGUgNjQtYml0
LgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 10:45:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 10:45:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAAyn-00049u-7V; Tue, 17 Sep 2019 10:45:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=DkBD=XM=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iAAym-00049j-2O
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 10:45:04 +0000
X-Inumbo-ID: 334bbc2c-d938-11e9-9606-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 334bbc2c-d938-11e9-9606-12813bfff9fa;
 Tue, 17 Sep 2019 10:45:01 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 103F61000;
 Tue, 17 Sep 2019 03:45:01 -0700 (PDT)
Received: from [10.37.13.58] (unknown [10.37.13.58])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 232083F59C;
 Tue, 17 Sep 2019 03:44:58 -0700 (PDT)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
Date: Tue, 17 Sep 2019 11:44:57 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksCgpPbiA5LzE3LzE5IDExOjA4IEFNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IAo+IE9u
IDkvMTcvMTkgMTE6MTcgQU0sIEp1bGllbiBHcmFsbCB3cm90ZToKPj4KPj4KPj4gT24gOS8xNy8x
OSA5OjQ0IEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90ZToKPj4+IEhp
IEp1bGllbgo+Pgo+PiBIaSwKPj4KPj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+Pj4+
IEZyb206IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Cj4+Pj4gU2VudDogMjAx
OeW5tDnmnIgxN+aXpSAxNjozOQo+Pj4+IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENo
aW5hKSA8SnVzdGluLkhlQGFybS5jb20+OyBTYW50aWFnbwo+Pj4+IFBhZ2FuaSA8U2FudGlhZ28u
UGFnYW5pQG5lY2xhYi5ldT47IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsKPj4+
PiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT47IFNoYXJhbiBTYW50aGFu
YW0KPj4+PiA8U2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+Cj4+Pj4gQ2M6IEthbHkgWGluIChB
cm0gVGVjaG5vbG9neSBDaGluYSkgPEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbiAoQXJtCj4+
Pj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJt
IFRlY2hub2xvZ3kKPj4+PiBDaGluYSkgPEppYW55b25nLld1QGFybS5jb20+OyBuZCA8bmRAYXJt
LmNvbT4KPj4+PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1v
bjogRmluZCBhbmQgcmVnaXN0ZXIgSVJRCj4+Pj4gZm9yIGFyY2hfdGltZXIKPj4+Pgo+Pj4+IE9u
IDkvMTcvMTkgODowMSBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6
Cj4+Pj4+IEhpIEp1bGllbiAod2VsY29tZSBiYWNrIGZyb20gaG9saWRheSDwn5iKICkKPj4+Pgo+
Pj4+IEhpLAo+Pj4+Cj4+Pj4gVGhhbmtzIDopLgo+Pj4+Cj4+Pj4+PiAtLS0tLU9yaWdpbmFsIE1l
c3NhZ2UtLS0tLQo+Pj4+Pj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNv
bT4KPj4+Pj4+IFNlbnQ6IDIwMTnlubQ55pyIMTfml6UgMzo1Mwo+Pj4+Pj4gVG86IEp1c3RpbiBI
ZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNvbT47IFNhbnRpYWdvCj4+
Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+OyAKPj4+Pj4+IG1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsKPj4+Pj4+IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1
ZW56ZXJAbmVjbGFiLmV1PjsgU2hhcmFuIFNhbnRoYW5hbQo+Pj4+Pj4gPFNoYXJhbi5TYW50aGFu
YW1AbmVjbGFiLmV1Pgo+Pj4+Pj4gQ2M6IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkg
PEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbgo+Pj4+IChBcm0KPj4+Pj4+IFRlY2hub2xvZ3kg
Q2hpbmEpIDxXZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcgV3UgKEFybQo+Pj4+IFRlY2hub2xv
Z3kKPj4+Pj4+IENoaW5hKSA8SmlhbnlvbmcuV3VAYXJtLmNvbT4KPj4+Pj4+IFN1YmplY3Q6IFJl
OiBbVU5JS1JBRlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3Rlcgo+
Pj4+IElSUQo+Pj4+Pj4gZm9yIGFyY2hfdGltZXIKPj4+Pj4+Cj4+Pj4+PiBPbiA5LzE2LzE5IDg6
NTIgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOgo+Pj4+Pj4+IEhp
wqAgU2FudGlhZ28KPj4+Pj4+Cj4+Pj4+PiBIaSBhbGwsCj4+Pj4+Pgo+Pj4+Pj4gQFNhbnRpYWdv
LCBpdCBpcyBxdWl0ZSBkaWZmaWN1bHQgdG8gZm9sbG93IHRoZSB0aHJlYWQgd2hlbiB5b3Ugc3Rh
cnQKPj4+Pj4+IHlvdXIgYW5zd2VyIHdpdGggIkNPTU1FTlQiLiBNYXkgSSBhc2sgeW91IHRvIGNv
bmZpZ3VyZSB5b3VyIGUtbWFpbAo+Pj4+Pj4gY2xpZW50IHRvIHF1b3RlIHByb3Blcmx5IChpLmUg
Pik/Cj4+Pj4+Pgo+Pj4+Pj4gRnVydGhlcm1vcmUsIGRpc2NsYWltZXIgZm9vdGVyIHNob3VsZCBi
ZSBhdm9pZGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QuCj4+Pj4+PiBZb3UgYXJlIGJhc2ljYWxseSBz
YXlpbmcgdGhpcyBpcyBjb25maWRlbnRpYWwgYnV0IHlvdSBzZW5kIHRvIAo+Pj4+Pj4gZXZlcnlv
bmUKPj4+Pj4+IChtYWlsaW5nIGxpc3QgYXJlIGFyY2hpdmVkKS4uLgo+Pj4+PiBPSwo+Pj4+Cj4+
Pj4gSXQgd2Fzbid0IGRpcmVjdGVkIHRvIHlvdSA7KS4KPj4+Pgo+Pj4+Pj4KPj4+Pj4+IFsuLi5d
Cj4+Pj4+Pgo+Pj4+Pj4+PiBDT01NRU5UOiBUaGVyZSBpcyBub3RoaW5nIHRoYXQgd2Ugd291bGQg
bGlrZSB0byBkbyBoZXJlPyBOb3QgZXZlbgo+Pj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/IEFzIHRo
ZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUgY291bnRlcgo+Pj4+Pj4gb3ZlcmZsb3dz
Cj4+Pj4+Pj4+IHdlIHdvdWxkIGdldCBhIG5ldyBpbnRlcnJ1cHQgb3RoZXJ3aXNlIChhbHRob3Vn
aCB0aGUgb3ZlcmZsb3cgY291bGQKPj4+Pj4+Pj4gaGFwcGVuIGluIGEgdmVyeSB2ZXJ5IGxvbmcg
dGltZSwgcmlnaHQ/KQo+Pj4+Pj4+Cj4+Pj4+Pj4gSW4gcHJldmlvdXMgdmVyc2lvbiwgd2UgYWRk
ZWQgYSBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkgaW4KPj4+Pj4+PiBnZW5lcmljX3RpbWVyX2ly
cV9oYW5kbGVyLiBCdXQgYXMgcGVyIHRoZSBzdWdnZXN0aW9uIFsxXSBmcm9tIAo+Pj4+Pj4+IEp1
bGllbiwKPj4+PiB3ZQo+Pj4+Pj4+IHJlbW92ZWQgaXQuIEJlc2lkZXMsIHdlIHJlZmVycmVkIHRv
IHRoZSBtaW5pb3MgbG9naWMgYXQgWzJdLCBpdCAKPj4+Pj4+PiBvbmx5IGNhbGxlZAo+Pj4+Pj4+
IHVubWFzayBhbmQgbWFzayBpbiBibG9ja19kb21haW4gKHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8g
dW5pa3JhZnQncwo+Pj4+Pj4+IGdlbmVyaWNfdGltZXJfY3B1X2Jsb2NrKQo+Pj4+Pj4KPj4+Pj4+
IExvb2tpbmcgYXQgbXkgY29tbWVudHMgYWdhaW4sIEkgYW0gbm90IHN1cmUgd2hlcmUgSSBzdWdn
ZXN0ZWQgdG8KPj4+PiByZW1vdmUKPj4+Pj4+IGdlbmVyaWNfdGltZXJfbWFza19pcnEoKS4uLiBD
YW4geW91IGV4cGFuZCBpdD8KPj4+Pj4gT2theS4uLiBzb3JyeSBmb3IgbXkgbWlzdGFrZXMuIEkg
d2lsbCBhZGQgZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpIAo+Pj4+PiBiYWNrLgo+Pj4+Pj4KPj4+
Pj4+IEZXSVcsIHRoZSB0d28gbWFpbiBjb21tZW50cyBvbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMg
d2VyZToKPj4+Pj4+IMKgwqDCoMKgwqAgMSkgaXNiKCkgc2hvdWxkIGJlIGFkZGVkIGFmdGVyIHVw
ZGF0aW5nIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgdG8KPj4+Pj4+IGVuc3VyZSB0aGF0IHRoZSBzeXN0
ZW0gc3lzdGVtIGlzIHN5bmNocm9uaXplZAo+Pj4+Pj4gwqDCoMKgwqDCoCAyKSBUaGlzIGlzIGNv
bW1vbiBjb2RlIGJldHdlZW4gYXJtMzIgYW5kIGFybTY0LiBCdXQgdGhlIHN5c3RlbQo+Pj4+Pj4g
cmVnaXN0ZXIgbmFtZSBhcmUgYXJtNjQuLi4gQWNjZXNzZXMgc2hvdWxkIGJlIHN0dWIgaW4gYXJj
aC1zcGVjaWZpYwo+Pj4+Pj4gaGVhZGVyIHNvIHRoZSBjb2RlIGNhbiB3b3JrIGZvciBib3RoIGFy
bTMyIGFuZCBhcm02NC4KPj4+Pj4gSSByZW5hbWVkIHBsYXQvY29tbW9uL2FybS90aW1lLmMgdG8g
cGxhdC9jb21tb24vYXJtL3RpbWVfYXJtNjQuYwo+Pj4+PiBTZWVtcyB0aGF0IGlzIG5vdCBlbm91
Z2ggZm9yIHlvdT/CoCBJZiBubywgSSBoYXZlIG5vIG9iamVjdGlvbnMgdG8gbWFrZQo+Pj4+PiBh
IHN0dWLCoCBmb3IgYXJtMzIuCj4+Pj4KPj4+PiBXZWxsLCB0aGUgb25seSBiaXRzIGFybTY0IHNw
ZWNpZmljcyBpbiB0aGlzIGZpbGUgYXJlIHRoZSBhY2Nlc3MgdG8gdGhlCj4+Pj4gc3lzdGVtIHJl
Z2lzdGVycy4gU28gcmVuYW1pbmcgdG8gdGltZV9hcm02NC5jIHNlZW1zIGEgYml0IG92ZXJraWxs
Li4uCj4+Pj4KPj4+PiBJZiB0aGVyZSBhcmUgcGxhbiB0byBtYWtlIGFybTMyIGEgY29ycmVjdCBw
b3J0IG9uIFVuaWtyYWZ0LCB0aGVuCj4+Pj4gc3BsaXR0aW5nIHRoZSBjb2RlIHdvdWxkIGJlIHRo
ZSBiZXN0LiBJZiB0aGVyZSBhcmUgbm8gcGxhbiB0byBnZXQgCj4+Pj4gYXJtMzIsCj4+Pj4gdGhl
biBtYXliZSB5b3Ugc2hvdWxkIHRoaW5rIG9mIGtpbGxpbmcgaXQgY29tcGxldGVseS4KPj4+Cj4+
PiBBcm0zMiB4ZW4gcGxhdCBpcyBpbml0aWFsbHkgc3VwcG9ydGVkIGJ1dCBubyBvbmXCoCBoYXMg
dG91Y2hlZCB0aGF0IAo+Pj4gZm9yIGEgbG9uZwo+Pj4gdGltZS4gQ3VycmVudGx5IGxldOKAmXMg
Zm9jdXMgb24gYXJtNjQga3ZtIHBsYXQgb25seS4gSWYgdGhlIAo+Pj4gcmVxdWlyZW1lbnRzIGNo
YW5nZXMsCj4+PiB3ZSBjYW4gc3VwcG9ydCBhcm0zMiBhZGRpdGlvbmFsbHkuIFdoYXQgZG8geW91
IHRoaW5rIGFib3V0IGl0Pwo+Pgo+PiBJIGFtIG5vdCBhc2tpbmcgdG8gaW1wbGVtZW50IGFybTMy
LCBJIGFtIG9ubHkgc3VnZ2VzdGluZyB0byB0cnkgdG8gCj4+IHNwbGl0IHRoZSBjb2RlIHJhdGhl
ciB0aGFuIHRyeWluZyB0byBtaXggY29tbW9uIGNvZGUgdnMgYXJjaCBzcGVjaWZpYyAKPj4gY29k
ZSBpbiBwbGF0L2NvbW1vbi9hcm0uIFRoYXQgZGlyZWN0b3J5IGluIHBhcnRpY3VsYXIgaXMgbG9v
a2luZyAKPj4gbWVzc2llciBhbmQgbWVzc2llciBhcyBuZXcgc2VyaWVzIGFyZSBwb3N0ZWQuCj4g
Cj4gSSBhZ3JlZSB3aXRoIEp1bGllbiBpdCBpcyBiZXR0ZXIgdG8gc3BsaXQgdGhlIGFybTMyIGNv
ZGUgZnJvbSB0aGUgYXJtNjQgCj4gY29kZS4gTXkgc3VnZ2VzdGlvbiB3b3VsZCBiZQo+IAo+IHBs
YXQvY29tbW9uL2FybSBmb3IgMzItYml0IGNvZGUKPiAKPiBwbGF0L2NvbW1vbi9hcm02NCBmb3Ig
dGhlIDY0LWJpdC4KCldlbGwgeW91IGNhbiBzaGFyZSBhIGxvdCBvZiBjb2RlIGJldHdlZW4gMzIt
Yml0IGFuZCA2NC1iaXQuIElmIHdlIHRha2UgCnRoZSBleGFtcGxlIG9mIHRoZSBhcmNoIHRpbWVy
LCB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSB3YXkgdG8gYWNjZXNzIAp0aGUgcmVnaXN0ZXJz
IChpLmUuIHN5c3RlbSByZWdpc3RlcnMgdnMgY28tcHJvY2Vzc29yIHJlZ2lzdGVycykuCgpTbyBp
dCB3b3VsZCBiZSBiZXN0IHRvIGNvbnNpZGVyOgoKcGxhdC9jb21tb24vYXJtIGZvciBhbnl0aGlu
ZyBjb21tb24gYmV0d2VlbiBhcm0zMiBhbmQgYXJtNjQKcGxhdC9jb21tb24vYXJtL2FybTMyIGZv
ciBhbnl0aGluZyBhcm0zMiBzcGVjaWZpYwpwbGF0L2NvbW1vbi9hcm0vYXJtNjQgZm9yIGFueXRo
aW5nIGFybTY0IHNwZWNpZmljCgpUaGUgZGlyZWN0b3J5IGFybXszMiw2NH0gc2hvdWxkIGJlIHBy
ZXR0eSBlbXB0eS4KCkNoZWVycywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:16:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:16:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iABTY-0008NZ-Sa; Tue, 17 Sep 2019 11:16:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iABTX-0008NU-1O
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:16:51 +0000
X-Inumbo-ID: a4323fc1-d93c-11e9-9606-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id a4323fc1-d93c-11e9-9606-12813bfff9fa;
 Tue, 17 Sep 2019 11:16:49 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 20F27418A6;
 Tue, 17 Sep 2019 13:16:49 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 13:16:46 +0200
Message-Id: <20190917111647.4252-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917111647.4252-1-felipe.huici@neclab.eu>
References: <20190917111647.4252-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH 1/2] Add IPv6 macro
 definitions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIElONl9JU19BRERSX01VTFRJQ0FTVCwgSU42X0lTX0FERFJfTElOS0xPQ0FMIGFuZApJTjZf
SVNfQUREUl9NQ19MSU5LTE9DQUwgbWFjcm8gZGVmaW5pdGlvbnMuIFRoZXNlIGFyZSBkZWZpbmVk
IGJ5IGxpYmMsCmJ1dCBub3QgaW5jbHVkZWQgaW4gYnkgb3VyIG5ldGluZXQvaW4uaCBnbHVlIHdo
ZW4gc29ja2V0cyBhcmUgZW5hYmxlZCwKYnJlYWtpbmcgYnVpbGRzIHRoYXQgZGVwZW5kIG9uIHRo
ZXNlIGFuZCBzb2NrZXRzLgoKU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVp
Y2lAbmVjbGFiLmV1PgotLS0KIGluY2x1ZGUvbmV0aW5ldC9pbi5oIHwgOCArKysrKysrKwogMSBm
aWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0aW5l
dC9pbi5oIGIvaW5jbHVkZS9uZXRpbmV0L2luLmgKaW5kZXggMDdmY2M3ZC4uNTA1YTIwYSAxMDA2
NDQKLS0tIGEvaW5jbHVkZS9uZXRpbmV0L2luLmgKKysrIGIvaW5jbHVkZS9uZXRpbmV0L2luLmgK
QEAgLTUsNiArNSwxNCBAQAogCiAjaWZkZWYgQ09ORklHX0xXSVBfU09DS0VUCiAjaW5jbHVkZSA8
bHdpcC9zb2NrZXRzLmg+CisvKiBUYWtlbiBmcm9tIG11c2wncyBuZXRpbmV0L2luLmggKi8KKyNp
ZmRlZiBDT05GSUdfTFdJUF9JUFY2CisjZGVmaW5lIElONl9JU19BRERSX01VTFRJQ0FTVChhKSAo
KCh1aW50OF90ICopIChhKSlbMF0gPT0gMHhmZikKKyNkZWZpbmUgSU42X0lTX0FERFJfTElOS0xP
Q0FMKGEpIFwKKyAgKCgoKHVpbnQ4X3QgKikgKGEpKVswXSkgPT0gMHhmZSAmJiAoKCh1aW50OF90
ICopIChhKSlbMV0gJiAweGMwKSA9PSAweDgwKQorI2RlZmluZSBJTjZfSVNfQUREUl9NQ19MSU5L
TE9DQUwoYSkgXAorICAoSU42X0lTX0FERFJfTVVMVElDQVNUKGEpICYmICgoKCh1aW50OF90ICop
IChhKSlbMV0gJiAweGYpID09IDB4MikpCisjZW5kaWYgLyogTFdJUF9JUFY2ICovCiAjZWxzZSAv
KiBDT05GSUdfTFdJUF9TT0NLRVQgKi8KICNpbmNsdWRlX25leHQgPG5ldGluZXQvaW4uaD4KICNl
bmRpZgotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:16:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:16:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iABTd-0008O3-U6; Tue, 17 Sep 2019 11:16:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iABTc-0008Nq-1j
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:16:56 +0000
X-Inumbo-ID: a4323fc0-d93c-11e9-9606-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id a4323fc0-d93c-11e9-9606-12813bfff9fa;
 Tue, 17 Sep 2019 11:16:49 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 62247404A9;
 Tue, 17 Sep 2019 13:16:48 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 13:16:45 +0200
Message-Id: <20190917111647.4252-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH 0/2] Support for c-ares
 library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgYWRkIDMgSVB2Ni1yZWxhdGVkIG1hY3JvIGRlZmluaXRpb25zIGFuZCBpbXBsZW1lbnRhdGlv
bnMgb2YgdHdvCmZ1bmN0aW9ucyBuZWVkZWQgYnkgdGhlIGMtYXJlcyBsaWJyYXJ5LgoKRmVsaXBl
IEh1aWNpICgyKToKICBBZGQgSVB2NiBtYWNybyBkZWZpbml0aW9ucwogIEFkZCBnZXRzZXJ2Ynlw
b3J0X3IgYW5kIGlmX2luZGV4dG9uYW1lCgogTWFrZWZpbGUudWsgICAgICAgICAgfCAgMSArCiBl
eHBvcnRzeW1zLnVrICAgICAgICB8ICAyICsrCiBpZm5hbWUuYyAgICAgICAgICAgICB8ICA2ICsr
KysrKwogaW5jbHVkZS9uZXQvaWYuaCAgICAgfCAgMiArKwogaW5jbHVkZS9uZXRkYi5oICAgICAg
fCAgOCArKysrKysrKwogaW5jbHVkZS9uZXRpbmV0L2luLmggfCAgOCArKysrKysrKwogc2Vydi5j
ICAgICAgICAgICAgICAgfCA1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBpZm5hbWUuYwoKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:17:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:17:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iABTi-0008Ol-Vk; Tue, 17 Sep 2019 11:17:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iABTh-0008OX-2D
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:17:01 +0000
X-Inumbo-ID: a53c356b-d93c-11e9-9606-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id a53c356b-d93c-11e9-9606-12813bfff9fa;
 Tue, 17 Sep 2019 11:16:51 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id E61AD404A9;
 Tue, 17 Sep 2019 13:16:50 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 13:16:47 +0200
Message-Id: <20190917111647.4252-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917111647.4252-1-felipe.huici@neclab.eu>
References: <20190917111647.4252-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH 2/2] Add getservbyport_r and
 if_indextoname
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN0dWIgZm9yIGlmX2luZGV4dG9uYW1lIGFuZCBmdWxsIGRlZmluaXRpb24sIHRha2VuIGZy
b20gbXVzbCwgZm9yCmdldHNlcnZieXBvcnRfciAuIGlmX2luZGV4dG9uYW1lJ3Mgc3R1YiByZXR1
cm5zIDAgKGkuZS4sIGludGVyZmFjZSAwKSwKd2hpY2ggc2hvdWxkIGJlIGdvb2QgZW5vdWdoIGZv
ciBvdXIgcHVycG9zZXMuCgpTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWlj
aUBuZWNsYWIuZXU+Ci0tLQogTWFrZWZpbGUudWsgICAgICB8ICAxICsKIGV4cG9ydHN5bXMudWsg
ICAgfCAgMiArKwogaWZuYW1lLmMgICAgICAgICB8ICA2ICsrKysrKwogaW5jbHVkZS9uZXQvaWYu
aCB8ICAyICsrCiBpbmNsdWRlL25ldGRiLmggIHwgIDggKysrKysrKysKIHNlcnYuYyAgICAgICAg
ICAgfCA1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx
MDA2NDQgaWZuYW1lLmMKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmlu
ZGV4IDIyOTJjYjQuLjI5MTZhMDAgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2Vm
aWxlLnVrCkBAIC04Miw2ICs4Miw3IEBAIExJQkxXSVBfU1JDUy0kKENPTkZJR19MV0lQX1RIUkVB
RFMpICs9ICQoTElCTFdJUF9CQVNFKS9tdXRleC5jfHVuaWtyYWZ0CiBMSUJMV0lQX1NSQ1MtJChD
T05GSUdfTFdJUF9USFJFQURTKSArPSAkKExJQkxXSVBfQkFTRSkvc2VtYXBob3JlLmN8dW5pa3Jh
ZnQKIExJQkxXSVBfU1JDUy0kKENPTkZJR19MV0lQX1RIUkVBRFMpICs9ICQoTElCTFdJUF9CQVNF
KS9tYWlsYm94LmN8dW5pa3JhZnQKIExJQkxXSVBfU1JDUy0kKENPTkZJR19MV0lQX1RIUkVBRFMp
ICs9ICQoTElCTFdJUF9CQVNFKS90aHJlYWRzLmN8dW5pa3JhZnQKK0xJQkxXSVBfU1JDUy15ICs9
ICQoTElCTFdJUF9CQVNFKS9pZm5hbWUuY3x1bmlrcmFmdAogTElCTFdJUF9TUkNTLXkgKz0gJChM
SUJMV0lQX0JBU0UpL2luaXQuY3x1bmlrcmFmdAogTElCTFdJUF9TUkNTLXkgKz0gJChMSUJMV0lQ
X0JBU0UpL3RpbWUuY3x1bmlrcmFmdAogTElCTFdJUF9TUkNTLSQoQ09ORklHX0xXSVBfU09DS0VU
KSArPSAkKExJQkxXSVBfQkFTRSkvc29ja2V0cy5jfHVuaWtyYWZ0CmRpZmYgLS1naXQgYS9leHBv
cnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51awppbmRleCBhMzE1ZGZmLi5iZTkyYmI2IDEwMDY0NAot
LS0gYS9leHBvcnRzeW1zLnVrCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTE2LDkgKzE2LDExIEBA
IGdldHByb3RvYnludW1iZXIKIGdldHByb3RvZW50CiBnZXRzZXJ2YnluYW1lCiBnZXRzZXJ2Ynlw
b3J0CitnZXRzZXJ2Ynlwb3J0X3IKIGdldHNvY2tuYW1lCiBnZXRzb2Nrb3B0CiBoX2Vycm5vCitp
Zl9pbmRleHRvbmFtZQogaWdtcF9qb2luZ3JvdXAKIGluZXRfbnRvcAogaW5ldF9wdG9uCmRpZmYg
LS1naXQgYS9pZm5hbWUuYyBiL2lmbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmZlNjQ5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9pZm5hbWUuYwpAQCAtMCwwICsxLDYg
QEAKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKworY2hhciAqaWZfaW5kZXh0b25hbWUodW5zaWduZWQg
aW5kZXgsIGNoYXIgKm5hbWUpCit7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVk
ZS9uZXQvaWYuaCBiL2luY2x1ZGUvbmV0L2lmLmgKaW5kZXggM2ZiZmRlYy4uOWJiM2M4NyAxMDA2
NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWYuaAorKysgYi9pbmNsdWRlL25ldC9pZi5oCkBAIC0xICsx
LDMgQEAKICNpbmNsdWRlIDxjb21wYXQvcG9zaXgvbmV0L2lmLmg+CisKK2NoYXIgKmlmX2luZGV4
dG9uYW1lICh1bnNpZ25lZCBpbnQsIGNoYXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldGRi
LmggYi9pbmNsdWRlL25ldGRiLmgKaW5kZXggYjEwMDEzNi4uOTQ4YTJlNyAxMDA2NDQKLS0tIGEv
aW5jbHVkZS9uZXRkYi5oCisrKyBiL2luY2x1ZGUvbmV0ZGIuaApAQCAtMTcsNiArMTcsNyBAQCBp
bnQgZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbm9kZSwgY29uc3QgY2hhciAqc2VydmljZSwKIAkJ
c3RydWN0IGFkZHJpbmZvICoqcmVzKTsKIHZvaWQgZnJlZWFkZHJpbmZvKHN0cnVjdCBhZGRyaW5m
byAqcmVzKTsKIAorCiAjZW5kaWYgLyogTFdJUF9ETlMgJiYgTFdJUF9TT0NLRVQgJiYgIShMV0lQ
X0NPTVBBVF9TT0NLRVRTKSAqLwogCiBjb25zdCBjaGFyICpnYWlfc3RyZXJyb3IoaW50IGVycmNv
ZGUpOwpAQCAtNTcsNiArNTgsMTAgQEAgdm9pZCBzZXRwcm90b2VudChpbnQgc3RheW9wZW4pOwog
I2RlZmluZSBOSV9ER1JBTSAgICAgICAgMHgxMAogI2RlZmluZSBOSV9OVU1FUklDU0NPUEUgMHgy
MAogCisvKiBFcnJvciB2YWx1ZSBmb3IgZ2V0c2VydmJ5cG9ydF9yIG5vdCBkZWZpbmVkIGJ5IGx3
aXAvbmV0ZGIuaCAqLworLyogSW1wb3J0ZWQgZnJvbSBtdXNsICovCisjZGVmaW5lIEVBSV9TWVNU
RU0gICAgIDExCisKIC8qIEVycm9yIHZhbHVlcyBmb3IgZ2V0YWRkcmluZm8oKSBub3QgZGVmaW5l
ZCBieSBsd2lwL25ldGRiLmggKi8KICNkZWZpbmUgRUFJX09WRVJGTE9XICAgIDIwNSAgICAgIC8q
IEFyZ3VtZW50IGJ1ZmZlciBvdmVyZmxvdy4gICovCiAKQEAgLTY2LDMgKzcxLDYgQEAgaW50IGdl
dG5hbWVpbmZvKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc29ja2xlbl90IGFkZHJsZW4s
CiAKIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0
IGNoYXIgKnByb3RvKTsKIHN0cnVjdCBzZXJ2ZW50ICpnZXRzZXJ2Ynlwb3J0KGludCBwb3J0LCBj
b25zdCBjaGFyICpwcm90byk7CitpbnQgZ2V0c2VydmJ5cG9ydF9yKGludCBwb3J0LCBjb25zdCBj
aGFyICpwcm90cywgc3RydWN0IHNlcnZlbnQgKnNlLAorCQkgICAgY2hhciAqYnVmLCBzaXplX3Qg
YnVmbGVuLCBzdHJ1Y3Qgc2VydmVudCAqKnJlcyk7CisKZGlmZiAtLWdpdCBhL3NlcnYuYyBiL3Nl
cnYuYwppbmRleCBiMjczZGVmLi5iMDhmZmE0IDEwMDY0NAotLS0gYS9zZXJ2LmMKKysrIGIvc2Vy
di5jCkBAIC0zMiw3ICszMiwxMiBAQAogICovCiAKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8aW50
dHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1
ZGUgPHN0ZGxpYi5oPgogCiBzdHJ1Y3Qgc2VydmVudCAqZ2V0c2VydmJ5bmFtZShjb25zdCBjaGFy
ICpuYW1lIF9fdW51c2VkLAogCWNvbnN0IGNoYXIgKnByb3RvIF9fdW51c2VkKQpAQCAtNDUsMyAr
NTAsNTQgQEAgc3RydWN0IHNlcnZlbnQgKmdldHNlcnZieXBvcnQoaW50IHBvcnQgX191bnVzZWQs
CiB7CiAJcmV0dXJuIE5VTEw7CiB9CisKK2ludCBnZXRzZXJ2Ynlwb3J0X3IoaW50IHBvcnQsIGNv
bnN0IGNoYXIgKnByb3RzLCBzdHJ1Y3Qgc2VydmVudCAqc2UsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1
Zmxlbiwgc3RydWN0IHNlcnZlbnQgKipyZXMpCit7CisgIGludCBpOworICBzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gc2luID0geworICAgIC5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKKyAgICAuc2luX3BvcnQg
PSBwb3J0LAorICB9OworCisgIGlmICghcHJvdHMpIHsKKyAgICBpbnQgciA9IGdldHNlcnZieXBv
cnRfcihwb3J0LCAidGNwIiwgc2UsIGJ1ZiwgYnVmbGVuLCByZXMpOworICAgIGlmIChyKSByID0g
Z2V0c2VydmJ5cG9ydF9yKHBvcnQsICJ1ZHAiLCBzZSwgYnVmLCBidWZsZW4sIHJlcyk7CisgICAg
cmV0dXJuIHI7CisgIH0KKyAgKnJlcyA9IDA7CisKKyAgLyogQWxpZ24gYnVmZmVyICovCisgIGkg
PSAodWludHB0cl90KWJ1ZiAmIChzaXplb2YoY2hhciAqKS0xKTsKKyAgaWYgKCFpKSBpID0gc2l6
ZW9mKGNoYXIgKik7CisgIGlmIChidWZsZW4gPCAzKnNpemVvZihjaGFyICopLWkpCisgICAgcmV0
dXJuIEVSQU5HRTsKKyAgYnVmICs9IHNpemVvZihjaGFyICopLWk7CisgIGJ1ZmxlbiAtPSBzaXpl
b2YoY2hhciAqKS1pOworCisgIGlmIChzdHJjbXAocHJvdHMsICJ0Y3AiKSAmJiBzdHJjbXAocHJv
dHMsICJ1ZHAiKSkgcmV0dXJuIEVJTlZBTDsKKworICBzZS0+c19wb3J0ID0gcG9ydDsKKyAgc2Ut
PnNfcHJvdG8gPSAoY2hhciAqKXByb3RzOworICBzZS0+c19hbGlhc2VzID0gKHZvaWQgKilidWY7
CisgIGJ1ZiArPSAyKnNpemVvZihjaGFyICopOworICBidWZsZW4gLT0gMipzaXplb2YoY2hhciAq
KTsKKyAgc2UtPnNfYWxpYXNlc1sxXSA9IDA7CisgIHNlLT5zX2FsaWFzZXNbMF0gPSBzZS0+c19u
YW1lID0gYnVmOworCisgIHN3aXRjaCAoZ2V0bmFtZWluZm8oKHZvaWQgKikmc2luLCBzaXplb2Yg
c2luLCAwLCAwLCBidWYsIGJ1ZmxlbiwKKwkJICAgICAgc3RyY21wKHByb3RzLCAidWRwIikgPyAw
IDogTklfREdSQU0pKSB7CisgIGNhc2UgRUFJX01FTU9SWToKKyAgY2FzZSBFQUlfU1lTVEVNOgor
ICAgIHJldHVybiBFTk9NRU07CisgIGRlZmF1bHQ6CisgICAgcmV0dXJuIEVOT0VOVDsKKyAgY2Fz
ZSAwOgorICAgIGJyZWFrOworICB9CisKKyAgLyogQSBudW1lcmljIHBvcnQgc3RyaW5nIGlzIG5v
dCBhIHNlcnZpY2UgcmVjb3JkLiAqLworICBpZiAoc3RydG9sKGJ1ZiwgMCwgMTApPT1udG9ocyhw
b3J0KSkgcmV0dXJuIEVOT0VOVDsKKworICAqcmVzID0gc2U7CisgIHJldHVybiAwOworfQotLSAK
Mi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:34:51 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:34:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iABkv-0002Z1-ML; Tue, 17 Sep 2019 11:34:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ya0Z=XM=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iABku-0002Yw-B6
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:34:48 +0000
X-Inumbo-ID: 2482d6b1-d93f-11e9-9607-12813bfff9fa
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [40.107.12.43]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2482d6b1-d93f-11e9-9607-12813bfff9fa;
 Tue, 17 Sep 2019 11:34:44 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=AJm5I7UD43sLzPkP1PAtvVk+nv7ELFhD65zMnyVO56oM9pVtmtw+cUd60d99VrBwANzqvbq+HRCZbN4Kcm85cLhBkCxJGWl6lUaXdAWIf8odL8ZuRn01MPvARbsvEoh6kuT2+TlWVlpCaoz0ypc6s7+RhKgnj72ejBDHNbQDoScyS4qcdIPWPPHMyokakbBSaEZ+opRw7YoOoKEcDE0A6hu2lzNOdlLqjT8shuSbZ7py8bIux/Ebenbhl+VJoFITPBUEOSz56c8/gCoPouRbquctBGgMgGMp3wrjC/VseoIZSQL/2JthlR+Kjrl5KkPU6+P2aFEYMDnU35RctwgJMA==
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=SXW4WwT1pqTT7X4Df4kdcXSuKltugJKuKu6dAhnVk/o=;
 b=OrbRvc2gCfOveaP6uVJeHZLtafcsqgcN3Aa6zf9RWEH+E2Yk3X5kGXoj6r7LD/DeBkqw0pTfZ6OxVpwCXQk2lK+8PPtEeEkP2o3teaD5ddwYA/Go+XPt5PiXNmQ/Xm5Tw8wtAdzX8qraLF9x55flNYASJMi/0qAPNLiXTbqbd+r943d3QeXXeZg3miRMfOgNCdRLY4JFJIowrpcm1aU78Gk6cc2Hnm+eq890Lnj130fdJF0CF597VyiIYsOIr8y7F9mR4NkbdNXKtuvV2OEH8sgAPKzDzNEaURzrzx6ye47qNFCkbzlcKYjAIlaQWWqOV4mj3PI/W9y7P2aaGTRw5Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5081.eurprd01.prod.exchangelabs.com (20.177.210.223) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.21; Tue, 17 Sep
 2019 11:34:42 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Tue, 17 Sep 2019
 11:34:42 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH] lib/vfscore: Fix error handling in opendir()
Thread-Index: AQHVaUbCMJwNBXemzkK6VIA9xHWysacvxTsA
Date: Tue, 17 Sep 2019 11:34:42 +0000
Message-ID: <a088797b-a4ab-2e9d-a916-771cc082da99@stud.acs.upb.ro>
References: <20190912084745.31202-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190912084745.31202-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: AM0PR04CA0035.eurprd04.prod.outlook.com
 (2603:10a6:208:122::48) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.103]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: bf388d02-3db1-40bd-d727-08d73b630811
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7025125)(7027125)(7023125)(2017052603328)(7193020);
 SRVR:PR1PR01MB5081; 
x-ms-traffictypediagnostic: PR1PR01MB5081:
x-microsoft-antispam-prvs: <PR1PR01MB5081B72512C8875773C2B578A68F0@PR1PR01MB5081.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1775;
x-forefront-prvs: 01630974C0
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(396003)(366004)(39830400003)(376002)(136003)(189003)(199004)(31696002)(31686004)(8936002)(6246003)(64756008)(256004)(66476007)(66946007)(110136005)(66556008)(25786009)(186003)(76176011)(66446008)(4326008)(446003)(66066001)(2616005)(476003)(81166006)(85202003)(8676002)(81156014)(11346002)(52116002)(486006)(99286004)(316002)(71190400001)(85182001)(7736002)(229853002)(2501003)(6116002)(71200400001)(6436002)(86362001)(3846002)(786003)(6486002)(5660300002)(6506007)(102836004)(53546011)(305945005)(6512007)(26005)(2906002)(386003)(14454004)(508600001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5081;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: /ZFPzvZm/UuuqjdAx6yUZPeWNiCDaQYugytQMfh1Ue+hZrjjk/NilPOnfNPH0MRcMyTOmmrCaXyEmOA54Iy/eYe+LkYO1fxt2c4JJLR4Kg3d/EolEE2tKabIfZc4O5GvAS+9g2cSkBaPlYVGUwrTK7UaAI0FuaUy1cKNG2liubG3SjLdOuXiszZ44qB9P/Fr1ICIN3+0zSRXs5g4G/M52Nx6fYLtIsudMBVIlsDACyR8kJYQJk33TelwUUtaGKT6UcdnQfs7crYwaqwc2j162R/7YvsgPTC5OxEMV6mcWgt2mvpoofkunBUsjF04y+fYqTsCHRM0tsmcXm2iLzBjlK5t+VUDIKc1KhufSVGrJc7DRprkaR6CEZtdCQLkFT0LDo37MWxguJcyXvUZo61XXioRtQYEzhX1n+dk0Lkofbg=
x-ms-exchange-transport-forked: True
Content-ID: <5245E22C1D6D054EBDA9234332E8C8FA@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: bf388d02-3db1-40bd-d727-08d73b630811
X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Sep 2019 11:34:42.1181 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: HyNz2mpXTrQlU0vvYU1DnETRekyZZwJaADW6myhEaV21UkHkVevZ+SUV1qV2ixG54QyoNLTTXOQBj+xZYhsMoCNHTQgX3xB1/zN4zSytpNAH2WzNWUkvO0Tzs/L33iqd
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5081
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Fix error handling
 in opendir()
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ29zdGluLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QuIFRoYW5rcyENCg0KVmxhZA0KDQpS
ZXZpZXdlZC1ieTogVmxhZC1BbmRyZWkgQmFkb2l1CTx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPg0KDQpPbiAxMi4wOS4yMDE5IDExOjQ3LCBDb3N0aW4gTHVwdSB3cm90ZToNCj4g
SW4gY2FzZSBvZiBlcnJvcnMsIG9wZW5kaXIoKSBzaG91bGQgc2V0IGVycm5vIGFuZCByZXR1cm4g
LTEuIElmICdwYXRoJyBpcyBub3QgYQ0KPiBkaXJlY3RvcnkgdGhlbiBvcGVuZGlyKCkgc2hvdWxk
IHNldCBlcnJubyB0byBFTk9URElSLg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8
Y29zdGluLmx1cHVAY3MucHViLnJvPg0KPiAtLS0NCj4gICBsaWIvdmZzY29yZS9tYWluLmMgfCAy
OCArKysrKysrKysrKysrKysrKysrKysrLS0tLS0tDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDIyIGlu
c2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9saWIvdmZzY29y
ZS9tYWluLmMgYi9saWIvdmZzY29yZS9tYWluLmMNCj4gaW5kZXggOTI1Y2U3NjIuLjM5MDEzNzY3
IDEwMDY0NA0KPiAtLS0gYS9saWIvdmZzY29yZS9tYWluLmMNCj4gKysrIGIvbGliL3Zmc2NvcmUv
bWFpbi5jDQo+IEBAIC02NTksMTcgKzY1OSwzMyBAQCBzdHJ1Y3QgX19kaXJzdHJlYW0NCj4gICAN
Cj4gICBESVIgKm9wZW5kaXIoY29uc3QgY2hhciAqcGF0aCkNCj4gICB7DQo+IC0JRElSICpkaXIg
PSBtYWxsb2Moc2l6ZW9mKCpkaXIpKTsNCj4gKwlESVIgKmRpcjsNCj4gKwlzdHJ1Y3Qgc3RhdCBz
dDsNCj4gICANCj4gLQlpZiAoIWRpcikNCj4gLQkJcmV0dXJuIEVSUjJQVFIoLUVOT01FTSk7DQo+
ICsJZGlyID0gbWFsbG9jKHNpemVvZigqZGlyKSk7DQo+ICsJaWYgKCFkaXIpIHsNCj4gKwkJZXJy
bm8gPSBFTk9NRU07DQo+ICsJCWdvdG8gb3V0X2VycjsNCj4gKwl9DQo+ICAgDQo+ICAgCWRpci0+
ZmQgPSBvcGVuKHBhdGgsIE9fUkRPTkxZKTsNCj4gLQlpZiAoZGlyLT5mZCA8IDApIHsNCj4gLQkJ
ZnJlZShkaXIpOw0KPiAtCQlyZXR1cm4gTlVMTDsNCj4gKwlpZiAoZGlyLT5mZCA8IDApDQo+ICsJ
CWdvdG8gb3V0X2ZyZWVfZGlyOw0KPiArDQo+ICsJaWYgKGZzdGF0KGRpci0+ZmQsICZzdCkgPCAw
KQ0KPiArCQlnb3RvIG91dF9mcmVlX2RpcjsNCj4gKw0KPiArCWlmICghU19JU0RJUihzdC5zdF9t
b2RlKSkgew0KPiArCQllcnJubyA9IEVOT1RESVI7DQo+ICsJCWdvdG8gb3V0X2ZyZWVfZGlyOw0K
PiAgIAl9DQo+ICsNCj4gICAJcmV0dXJuIGRpcjsNCj4gKw0KPiArb3V0X2ZyZWVfZGlyOg0KPiAr
CWZyZWUoZGlyKTsNCj4gK291dF9lcnI6DQo+ICsJcmV0dXJuIE5VTEw7DQo+ICAgfQ0KPiAgIA0K
PiAgIERJUiAqZmRvcGVuZGlyKGludCBmZCkNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:55:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:55:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAC4o-00056O-8o; Tue, 17 Sep 2019 11:55:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAC4n-00056J-Bd
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:55:21 +0000
X-Inumbo-ID: 05006764-d942-11e9-b299-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 05006764-d942-11e9-b299-bc764e2007e4;
 Tue, 17 Sep 2019 11:55:19 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 50BA9404A9;
 Tue, 17 Sep 2019 13:55:18 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 13:55:14 +0200
Message-Id: <20190917115517.32299-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBDUKTAPE PATCH 0/3] Initial port of
 Duktape to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIER1a3RhcGUgKEphdmFTY3JpcHQpIHRvIFVuaWty
YWZ0LgoKRmVsaXBlIEh1aWNpICgzKToKICBJbnRyb2R1Y2UgbGlicmFyeSBza2VsZXRvbgogIEFk
ZCBNYWtlZmlsZS51awogIEFkZCBwYXRjaGVzIGRpcmVjdG9yeQoKIC5naXRpZ25vcmUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IDI3ICsrKysrKysrKysrCiBDT0RJTkdfU1RZTEUubWQg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgNCArKwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDQgKysKIENPUFlJTkcubWQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IDM5ICsrKysrKysrKysrKysrKysKIENvbmZpZy51ayAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICA0ICsrCiBNQUlOVEFJTkVSUy5tZCAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAxMCArKysrKwogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBSRUFETUUubWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAxMiArKysrKwogcGF0Y2hlcy8wMDAxLXJlbmFtZS1t
YWluLWZ1bmN0aW9uLnBhdGNoIHwgMTEgKysrKysKIDkgZmlsZXMgY2hhbmdlZCwgMTkwIGluc2Vy
dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2
NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBj
cmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51
awogY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQg
TWFrZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBwYXRjaGVzLzAwMDEtcmVuYW1lLW1haW4tZnVuY3Rpb24ucGF0Y2gKCi0tIAoyLjExLjAK
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:55:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:55:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAC4r-00056t-Ba; Tue, 17 Sep 2019 11:55:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAC4p-00056a-Su
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:55:23 +0000
X-Inumbo-ID: 05f72ff4-d942-11e9-9607-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 05f72ff4-d942-11e9-9607-12813bfff9fa;
 Tue, 17 Sep 2019 11:55:20 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 06AF441D22;
 Tue, 17 Sep 2019 13:55:20 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 13:55:17 +0200
Message-Id: <20190917115517.32299-4-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917115517.32299-1-felipe.huici@neclab.eu>
References: <20190917115517.32299-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBDUKTAPE PATCH 3/3] Add patches directory
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGF0Y2ggdG8gcmVuYW1lIG1haW4gbG9vcCdzIGZ1bmN0aW9uCgpTaWduZWQtb2ZmLWJ5OiBGZWxp
cGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Ci0tLQogcGF0Y2hlcy8wMDAxLXJlbmFt
ZS1tYWluLWZ1bmN0aW9uLnBhdGNoIHwgMTEgKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAx
MSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLXJlbmFtZS1t
YWluLWZ1bmN0aW9uLnBhdGNoCgpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy8wMDAxLXJlbmFtZS1tYWlu
LWZ1bmN0aW9uLnBhdGNoIGIvcGF0Y2hlcy8wMDAxLXJlbmFtZS1tYWluLWZ1bmN0aW9uLnBhdGNo
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNGE4Y2MKLS0tIC9kZXYvbnVs
bAorKysgYi9wYXRjaGVzLzAwMDEtcmVuYW1lLW1haW4tZnVuY3Rpb24ucGF0Y2gKQEAgLTAsMCAr
MSwxMSBAQAorLS0tIGEvZXhhbXBsZXMvY21kbGluZS9kdWtfY21kbGluZS5jCTIwMTktMDktMDkg
MDg6MjM6MTUuODkxMjg0NzA0ICswMjAwCisrKysgYi9leGFtcGxlcy9jbWRsaW5lL2R1a19jbWRs
aW5lLmMJMjAxOS0wOS0wOSAwODoyMjo1Ny43ODM0NzIyNTEgKzAyMDAKK0BAIC0xMjYwLDcgKzEy
NjAsNyBAQAorICAqICBNYWluCisgICovCisgCistaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkgeworK2ludCBkdWt0YXBlX21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworIAlk
dWtfY29udGV4dCAqY3R4ID0gTlVMTDsKKyAJaW50IHJldHZhbCA9IDA7CisgCWludCBoYXZlX2Zp
bGVzID0gMDsKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:55:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:55:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAC4t-00057S-Cz; Tue, 17 Sep 2019 11:55:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAC4s-00057G-9u
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:55:26 +0000
X-Inumbo-ID: 0597ce74-d942-11e9-b299-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 0597ce74-d942-11e9-b299-bc764e2007e4;
 Tue, 17 Sep 2019 11:55:20 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 75A7C41C15;
 Tue, 17 Sep 2019 13:55:19 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 13:55:16 +0200
Message-Id: <20190917115517.32299-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917115517.32299-1-felipe.huici@neclab.eu>
References: <20190917115517.32299-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBDUKTAPE PATCH 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGR1a3RhcGUgcG9ydCBNYWtlZmlsZS51awoKU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNp
IDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlLnVrIHwgNzkgKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBm
aWxlIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmls
ZS51awoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVkZmZjYwotLS0gL2Rldi9udWxsCisrKyBiL01ha2Vm
aWxlLnVrCkBAIC0wLDAgKzEsNzkgQEAKKyMgIGR1a3RhcGUgTWFrZWZpbGUudWsKKyMKKyMgIEF1
dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKyMKKyMKKyMgIENv
cHlyaWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1l
dDoKKyMKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisjICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisj
ICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisjCisjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBN
T0RJRklFRCBJTiBBTlkgV0FZLgorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJy
YXJ5IHJlZ2lzdHJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoZXZhbCAkKGNhbGwg
YWRkbGliX3MsZHVrdGFwZSwkKENPTkZJR19EVUtUQVBFKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitEVUtUQVBFX1ZFUlNJ
T049Mi40LjAKK0RVS1RBUEVfVVJMPWh0dHBzOi8vZHVrdGFwZS5vcmcvZHVrdGFwZS0kKERVS1RB
UEVfVkVSU0lPTikudGFyLnh6CitEVUtUQVBFX1BBVENIRElSPSQoRFVLVEFQRV9CQVNFKS9wYXRj
aGVzCisKKyQoZXZhbCAkKGNhbGwgZmV0Y2hhcyxkdWt0YXBlLCQoRFVLVEFQRV9VUkwpLCQoRFVL
VEFQRV9WRVJTSU9OKS50YXIueHopKQorJChldmFsICQoY2FsbCBwYXRjaCxkdWt0YXBlLCQoRFVL
VEFQRV9QQVRDSERJUiksZHVrdGFwZS0kKERVS1RBUEVfVkVSU0lPTikpKQorCisjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBIZWxwZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworRFVLVEFQ
RV9FWFRSQUNURUQ9JChEVUtUQVBFX09SSUdJTikvZHVrdGFwZS0kKERVS1RBUEVfVkVSU0lPTikK
K0RVS1RBUEVfR0VORVJBVEVEPSQoRFVLVEFQRV9FWFRSQUNURUQpL2R1a3RhcGUtc3JjCisKKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnkgaW5jbHVkZXMKKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCitDSU5DTFVERVMtJChDT05GSUdfRFVLVEFQRSkgKz0gLUkkKERVS1RBUEVfRVhU
UkFDVEVEKS9kdWt0YXBlLXNyYworQ1hYSU5DTFVERVMtJChDT05GSUdfRFVLVEFQRSkgKz0gLUkk
KERVS1RBUEVfRVhUUkFDVEVEKS9kdWt0YXBlLXNyYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworIyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworRFVLVEFQRV9TUkNTLXkgKz0g
JChEVUtUQVBFX0dFTkVSQVRFRCkvZHVrdGFwZS5jCitEVUtUQVBFX1NSQ1MteSArPSAkKERVS1RB
UEVfRVhUUkFDVEVEKS9leGFtcGxlcy9jbWRsaW5lL2R1a19jbWRsaW5lLmMKKworIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKyMgTGliLXNwZWNpZmljIFRhcmdldHMKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIEdlbmVyYXRlIHNpbmdsZS1maWxlIHNvdXJjZSBmb3IgYnVpbGQKKyQoRFVLVEFQ
RV9CVUlMRCkvLnByZXBhcmVkOiAkKERVS1RBUEVfQlVJTEQpLy5vcmlnaW4KKwkkKGNhbGwgYnVp
bGRfY21kLENPTkYsZHVrdGFwZSwkQCxcCisJY2QgJChEVUtUQVBFX0VYVFJBQ1RFRCkvICYmIFwK
KwlweXRob24gdG9vbHMvY29uZmlndXJlLnB5IC0tb3V0cHV0LWRpcmVjdG9yeSBkdWt0YXBlLXNy
YyAtRERVS19VU0VfRkFTVElOVCAtVURVS19VU0VfRVM2X1BST1hZICYmIFwKKwl0b3VjaCAkQCkK
KworVUtfUFJFUEFSRSArPSAkKERVS1RBUEVfQlVJTEQpLy5wcmVwYXJlZAotLSAKMi4xMS4wCgoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:55:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:55:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAC4v-000585-ER; Tue, 17 Sep 2019 11:55:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAC4u-00057p-Q9
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 11:55:28 +0000
X-Inumbo-ID: 0507e1ed-d942-11e9-9607-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 0507e1ed-d942-11e9-9607-12813bfff9fa;
 Tue, 17 Sep 2019 11:55:19 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id D7FBE418A6;
 Tue, 17 Sep 2019 13:55:18 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 13:55:15 +0200
Message-Id: <20190917115517.32299-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917115517.32299-1-felipe.huici@neclab.eu>
References: <20190917115517.32299-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBDUKTAPE PATCH 1/3] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4K
LS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIENP
RElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysKIENPUFlJ
TkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog
Q29uZmlnLnVrICAgICAgIHwgIDQgKysrKwogTUFJTlRBSU5FUlMubWQgIHwgMTAgKysrKysrKysr
KwogUkVBRE1FLm1kICAgICAgIHwgMTIgKysrKysrKysrKysrCiA3IGZpbGVzIGNoYW5nZWQsIDEw
MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgLmdpdGlnbm9yZQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPTlRSSUJVVElO
Ry5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBD
b25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFJFQURNRS5tZAoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJmZDMKLS0tIC9kZXYvbnVsbAor
KysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjcgQEAKKyouZGVwZW5kCisqLm8KKyouYQorKi5k
CisqLnNvCisqLm9yaWcKKyoucmVqCisqLmJhaworKi5zd3AKKyp+CissKgorXCMqXCMKKy5cIyoK
K1wjXypcIworLlwjXyoKKyEuZ2l0aWdub3JlCisuKgorCisjIGdudSBnbG9iYWwgZmlsZXMKK0dQ
QVRICitHUlRBR1MKK0dTWU1TCitHVEFHUworCisjIGNzY29wZSBmaWxlcworY3Njb3BlLioKK25j
c2NvcGUuKgpkaWZmIC0tZ2l0IGEvQ09ESU5HX1NUWUxFLm1kIGIvQ09ESU5HX1NUWUxFLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzAwNDEKLS0tIC9kZXYvbnVsbAor
KysgYi9DT0RJTkdfU1RZTEUubWQKQEAgLTAsMCArMSw0IEBACitDb2RpbmcgU3R5bGUKKz09PT09
PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT0RJTkdfU1RZTEUubWRgIGZpbGUgaW4g
dGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5t
ZCBiL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
ZjU1ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsNCBA
QAorQ29udHJpYnV0aW5nIHRvIFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitQ
bGVhc2UgcmVmZXIgdG8gdGhlIGBDT05UUklCVVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5p
a3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMjk3ODUKLS0tIC9kZXYvbnVsbAor
KysgYi9DT1BZSU5HLm1kCkBAIC0wLDAgKzEsMzkgQEAKK0xpY2Vuc2UKKz09PT09PT0KKworVW5p
a3JhZnQgZHVrdGFwZSB3cmFwcGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMg
cmVwb3NpdG9yeSBjb250YWlucyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQgZHVrdGFwZSB3aXRoIFVu
aWtyYWZ0LgorRWFjaCBDIGNvZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xh
cmUgd2hvIGlzIHRoZQorY29weXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBhbmQg
Y29uZGl0aW9ucyB0aGUgY29kZSBpcworbGljZW5zZWQuIElmIHN1Y2ggYSBsaWNlbmNlIG5vdGUg
aXMgbWlzc2luZywgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQKK25vdGljZSB3aWxsIGFwcGx5Ogor
CisJQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworCWFyZSBtZXQ6
CisKKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKwkg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorCTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xk
ZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKwlUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUyBJUyIKKwlBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisJTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisJU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisJSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisJ
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0Nv
bmZpZy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTNjNTljCi0tLSAv
ZGV2L251bGwKKysrIGIvQ29uZmlnLnVrCkBAIC0wLDAgKzEsNCBAQAorY29uZmlnIERVS1RBUEUK
KwkgICBib29sICJEdWt0YXBlIC0gYW4gZW1iZWRkYWJsZSBKYXZhc2NyaXB0IGVuZ2luZSIKKwkg
ICBkZWZhdWx0IG4KKyAgICAgICAgICAgc2VsZWN0IExJQk5FV0xJQkMKZGlmZiAtLWdpdCBhL01B
SU5UQUlORVJTLm1kIGIvTUFJTlRBSU5FUlMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZDAwOWU5YgotLS0gL2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTLm1kCkBAIC0w
LDAgKzEsMTAgQEAKK01haW50YWluZXJzIExpc3QKKz09PT09PT09PT09PT09PT0KKworRm9yIG5v
dGVzIG9uIGhvdyB0byByZWFkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byBgTUFJ
TlRBSU5FUlMubWRgIGluCit0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgorCisJTElCWkxJ
Qi1VTklLUkFGVAorCU06CUZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKwlM
OgltaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZworCUY6ICoKZGlmZiAtLWdpdCBhL1JFQURNRS5t
ZCBiL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWI5YjY3
Ci0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMTIgQEAKK2xpYnpsaWIg
Zm9yIFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09CitUaGlzIGlzIGEgcG9ydCBvZiBkdWt0
YXBlIHRvIFVuaWtyYWZ0LiBZb3Ugd2lsbCBuZWVkIG5ld2xpYiAKK2ZvciBpdCB0byB3b3JrLCBz
byBwbGVhc2UgZW5zdXJlIHlvdSBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIHRoZQorTElCUyB2
YXJpYWJsZSBpbiB0aGUgTWFrZWZpbGU6CisKKyAgIC4uLiQoVUtfTElCUykvbmV3bGliOiQoVUtf
TElCUykvZHVrdGFwZS4uLgorCitGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBpbnRlcmFjdGl2ZSBt
b2RlLgorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhlIGRv
Y3VtZW50YXRpb24gaW4gdGhlIGBkb2MvYAorc3ViZGlyZWN0b3J5IG9mIHRoZSBtYWluIHVuaWty
YWZ0IHJlcG9zaXRvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0tIAoyLjExLjAKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 11:56:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 11:56:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAC5W-0005Ae-HP; Tue, 17 Sep 2019 11:56:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=8Z6k=XM=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAC5V-0005AZ-Aw
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 11:56:05 +0000
X-Inumbo-ID: 1f83548e-d942-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1f83548e-d942-11e9-b299-bc764e2007e4;
 Tue, 17 Sep 2019 11:56:03 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C4833F2019;
 Tue, 17 Sep 2019 13:56:02 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 1nRlY0Q8_-JX; Tue, 17 Sep 2019 13:56:02 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 8A70BF2011;
 Tue, 17 Sep 2019 13:55:48 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Sep
 2019 13:55:48 +0200
To: Julien Grall <julien.grall@arm.com>, "Justin He (Arm Technology China)"
 <Justin.He@arm.com>, Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
Date: Tue, 17 Sep 2019 13:55:47 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8sCgpPbiA5LzE3LzE5IDEyOjQ0IFBNLCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4gSGksCj4K
PiBPbiA5LzE3LzE5IDExOjA4IEFNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+Pgo+PiBPbiA5
LzE3LzE5IDExOjE3IEFNLCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4+Pgo+Pj4KPj4+IE9uIDkvMTcv
MTkgOTo0NCBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6Cj4+Pj4g
SGkgSnVsaWVuCj4+Pgo+Pj4gSGksCj4+Pgo+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t
LQo+Pj4+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgo+Pj4+PiBT
ZW50OiAyMDE55bm0OeaciDE35pelIDE2OjM5Cj4+Pj4+IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNo
bm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+OyBTYW50aWFnbwo+Pj4+PiBQYWdhbmkg
PFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+OyAKPj4+Pj4gbWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnOwo+Pj4+PiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5l
dT47IFNoYXJhbiBTYW50aGFuYW0KPj4+Pj4gPFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1Pgo+
Pj4+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNv
bT47IFdlaSBDaGVuIChBcm0KPj4+Pj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5DaGVuQGFybS5j
b20+OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xvZ3kKPj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5X
dUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Cj4+Pj4+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQg
UEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3RlciAKPj4+Pj4gSVJRCj4+
Pj4+IGZvciBhcmNoX3RpbWVyCj4+Pj4+Cj4+Pj4+IE9uIDkvMTcvMTkgODowMSBBTSwgSnVzdGlu
IEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6Cj4+Pj4+PiBIaSBKdWxpZW4gKHdlbGNv
bWUgYmFjayBmcm9tIGhvbGlkYXkg8J+YiiApCj4+Pj4+Cj4+Pj4+IEhpLAo+Pj4+Pgo+Pj4+PiBU
aGFua3MgOikuCj4+Pj4+Cj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4+Pj4+
PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgo+Pj4+Pj4+IFNlbnQ6
IDIwMTnlubQ55pyIMTfml6UgMzo1Mwo+Pj4+Pj4+IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNobm9s
b2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+OyBTYW50aWFnbwo+Pj4+Pj4+IFBhZ2FuaSA8
U2FudGlhZ28uUGFnYW5pQG5lY2xhYi5ldT47IAo+Pj4+Pj4+IG1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZzsKPj4+Pj4+PiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xh
Yi5ldT47IFNoYXJhbiBTYW50aGFuYW0KPj4+Pj4+PiA8U2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIu
ZXU+Cj4+Pj4+Pj4gQ2M6IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEthbHkuWGlu
QGFybS5jb20+OyBXZWkgQ2hlbgo+Pj4+PiAoQXJtCj4+Pj4+Pj4gVGVjaG5vbG9neSBDaGluYSkg
PFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtCj4+Pj4+IFRlY2hub2xvZ3kKPj4+
Pj4+PiBDaGluYSkgPEppYW55b25nLld1QGFybS5jb20+Cj4+Pj4+Pj4gU3ViamVjdDogUmU6IFtV
TklLUkFGVCBQQVRDSHYzIDUvN10gcGxhdC9jb21tb246IEZpbmQgYW5kIHJlZ2lzdGVyCj4+Pj4+
IElSUQo+Pj4+Pj4+IGZvciBhcmNoX3RpbWVyCj4+Pj4+Pj4KPj4+Pj4+PiBPbiA5LzE2LzE5IDg6
NTIgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOgo+Pj4+Pj4+PiBI
acKgIFNhbnRpYWdvCj4+Pj4+Pj4KPj4+Pj4+PiBIaSBhbGwsCj4+Pj4+Pj4KPj4+Pj4+PiBAU2Fu
dGlhZ28sIGl0IGlzIHF1aXRlIGRpZmZpY3VsdCB0byBmb2xsb3cgdGhlIHRocmVhZCB3aGVuIHlv
dSAKPj4+Pj4+PiBzdGFydAo+Pj4+Pj4+IHlvdXIgYW5zd2VyIHdpdGggIkNPTU1FTlQiLiBNYXkg
SSBhc2sgeW91IHRvIGNvbmZpZ3VyZSB5b3VyIGUtbWFpbAo+Pj4+Pj4+IGNsaWVudCB0byBxdW90
ZSBwcm9wZXJseSAoaS5lID4pPwo+Pj4+Pj4+Cj4+Pj4+Pj4gRnVydGhlcm1vcmUsIGRpc2NsYWlt
ZXIgZm9vdGVyIHNob3VsZCBiZSBhdm9pZGVkIG9uIHRoZSBtYWlsaW5nIAo+Pj4+Pj4+IGxpc3Qu
Cj4+Pj4+Pj4gWW91IGFyZSBiYXNpY2FsbHkgc2F5aW5nIHRoaXMgaXMgY29uZmlkZW50aWFsIGJ1
dCB5b3Ugc2VuZCB0byAKPj4+Pj4+PiBldmVyeW9uZQo+Pj4+Pj4+IChtYWlsaW5nIGxpc3QgYXJl
IGFyY2hpdmVkKS4uLgo+Pj4+Pj4gT0sKPj4+Pj4KPj4+Pj4gSXQgd2Fzbid0IGRpcmVjdGVkIHRv
IHlvdSA7KS4KPj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4+IFsuLi5dCj4+Pj4+Pj4KPj4+Pj4+Pj4+IENP
TU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIGhlcmU/IE5v
dCBldmVuCj4+Pj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/IEFzIHRoZSB0aW1lciBpcyBub3Qgc3Rv
cHBlZCwgd2hlbiB0aGUgY291bnRlcgo+Pj4+Pj4+IG92ZXJmbG93cwo+Pj4+Pj4+Pj4gd2Ugd291
bGQgZ2V0IGEgbmV3IGludGVycnVwdCBvdGhlcndpc2UgKGFsdGhvdWdoIHRoZSBvdmVyZmxvdyAK
Pj4+Pj4+Pj4+IGNvdWxkCj4+Pj4+Pj4+PiBoYXBwZW4gaW4gYSB2ZXJ5IHZlcnkgbG9uZyB0aW1l
LCByaWdodD8pCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IEluIHByZXZpb3VzIHZlcnNpb24sIHdlIGFkZGVk
IGEgZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpIGluCj4+Pj4+Pj4+IGdlbmVyaWNfdGltZXJfaXJx
X2hhbmRsZXIuIEJ1dCBhcyBwZXIgdGhlIHN1Z2dlc3Rpb24gWzFdIGZyb20gCj4+Pj4+Pj4+IEp1
bGllbiwKPj4+Pj4gd2UKPj4+Pj4+Pj4gcmVtb3ZlZCBpdC4gQmVzaWRlcywgd2UgcmVmZXJyZWQg
dG8gdGhlIG1pbmlvcyBsb2dpYyBhdCBbMl0sIGl0IAo+Pj4+Pj4+PiBvbmx5IGNhbGxlZAo+Pj4+
Pj4+PiB1bm1hc2sgYW5kIG1hc2sgaW4gYmxvY2tfZG9tYWluICh3aGljaCBpcyBlcXVpdmFsZW50
IHRvIHVuaWtyYWZ0J3MKPj4+Pj4+Pj4gZ2VuZXJpY190aW1lcl9jcHVfYmxvY2spCj4+Pj4+Pj4K
Pj4+Pj4+PiBMb29raW5nIGF0IG15IGNvbW1lbnRzIGFnYWluLCBJIGFtIG5vdCBzdXJlIHdoZXJl
IEkgc3VnZ2VzdGVkIHRvCj4+Pj4+IHJlbW92ZQo+Pj4+Pj4+IGdlbmVyaWNfdGltZXJfbWFza19p
cnEoKS4uLiBDYW4geW91IGV4cGFuZCBpdD8KPj4+Pj4+IE9rYXkuLi4gc29ycnkgZm9yIG15IG1p
c3Rha2VzLiBJIHdpbGwgYWRkIAo+Pj4+Pj4gZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpIGJhY2su
Cj4+Pj4+Pj4KPj4+Pj4+PiBGV0lXLCB0aGUgdHdvIG1haW4gY29tbWVudHMgb24gdGhlIHByZXZp
b3VzIHZlcnNpb25zIHdlcmU6Cj4+Pj4+Pj4gwqDCoMKgwqDCoCAxKSBpc2IoKSBzaG91bGQgYmUg
YWRkZWQgYWZ0ZXIgdXBkYXRpbmcgdGhlIHN5c3RlbSAKPj4+Pj4+PiByZWdpc3RlciB0bwo+Pj4+
Pj4+IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gc3lzdGVtIGlzIHN5bmNocm9uaXplZAo+Pj4+Pj4+
IMKgwqDCoMKgwqAgMikgVGhpcyBpcyBjb21tb24gY29kZSBiZXR3ZWVuIGFybTMyIGFuZCBhcm02
NC4gQnV0IHRoZSAKPj4+Pj4+PiBzeXN0ZW0KPj4+Pj4+PiByZWdpc3RlciBuYW1lIGFyZSBhcm02
NC4uLiBBY2Nlc3NlcyBzaG91bGQgYmUgc3R1YiBpbiBhcmNoLXNwZWNpZmljCj4+Pj4+Pj4gaGVh
ZGVyIHNvIHRoZSBjb2RlIGNhbiB3b3JrIGZvciBib3RoIGFybTMyIGFuZCBhcm02NC4KPj4+Pj4+
IEkgcmVuYW1lZCBwbGF0L2NvbW1vbi9hcm0vdGltZS5jIHRvIHBsYXQvY29tbW9uL2FybS90aW1l
X2FybTY0LmMKPj4+Pj4+IFNlZW1zIHRoYXQgaXMgbm90IGVub3VnaCBmb3IgeW91P8KgIElmIG5v
LCBJIGhhdmUgbm8gb2JqZWN0aW9ucyB0byAKPj4+Pj4+IG1ha2UKPj4+Pj4+IGEgc3R1YsKgIGZv
ciBhcm0zMi4KPj4+Pj4KPj4+Pj4gV2VsbCwgdGhlIG9ubHkgYml0cyBhcm02NCBzcGVjaWZpY3Mg
aW4gdGhpcyBmaWxlIGFyZSB0aGUgYWNjZXNzIHRvIAo+Pj4+PiB0aGUKPj4+Pj4gc3lzdGVtIHJl
Z2lzdGVycy4gU28gcmVuYW1pbmcgdG8gdGltZV9hcm02NC5jIHNlZW1zIGEgYml0IG92ZXJraWxs
Li4uCj4+Pj4+Cj4+Pj4+IElmIHRoZXJlIGFyZSBwbGFuIHRvIG1ha2UgYXJtMzIgYSBjb3JyZWN0
IHBvcnQgb24gVW5pa3JhZnQsIHRoZW4KPj4+Pj4gc3BsaXR0aW5nIHRoZSBjb2RlIHdvdWxkIGJl
IHRoZSBiZXN0LiBJZiB0aGVyZSBhcmUgbm8gcGxhbiB0byBnZXQgCj4+Pj4+IGFybTMyLAo+Pj4+
PiB0aGVuIG1heWJlIHlvdSBzaG91bGQgdGhpbmsgb2Yga2lsbGluZyBpdCBjb21wbGV0ZWx5Lgo+
Pj4+Cj4+Pj4gQXJtMzIgeGVuIHBsYXQgaXMgaW5pdGlhbGx5IHN1cHBvcnRlZCBidXQgbm8gb25l
wqAgaGFzIHRvdWNoZWQgdGhhdCAKPj4+PiBmb3IgYSBsb25nCj4+Pj4gdGltZS4gQ3VycmVudGx5
IGxldOKAmXMgZm9jdXMgb24gYXJtNjQga3ZtIHBsYXQgb25seS4gSWYgdGhlIAo+Pj4+IHJlcXVp
cmVtZW50cyBjaGFuZ2VzLAo+Pj4+IHdlIGNhbiBzdXBwb3J0IGFybTMyIGFkZGl0aW9uYWxseS4g
V2hhdCBkbyB5b3UgdGhpbmsgYWJvdXQgaXQ/Cj4+Pgo+Pj4gSSBhbSBub3QgYXNraW5nIHRvIGlt
cGxlbWVudCBhcm0zMiwgSSBhbSBvbmx5IHN1Z2dlc3RpbmcgdG8gdHJ5IHRvIAo+Pj4gc3BsaXQg
dGhlIGNvZGUgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIG1peCBjb21tb24gY29kZSB2cyBhcmNoIAo+
Pj4gc3BlY2lmaWMgY29kZSBpbiBwbGF0L2NvbW1vbi9hcm0uIFRoYXQgZGlyZWN0b3J5IGluIHBh
cnRpY3VsYXIgaXMgCj4+PiBsb29raW5nIG1lc3NpZXIgYW5kIG1lc3NpZXIgYXMgbmV3IHNlcmll
cyBhcmUgcG9zdGVkLgo+Pgo+PiBJIGFncmVlIHdpdGggSnVsaWVuIGl0IGlzIGJldHRlciB0byBz
cGxpdCB0aGUgYXJtMzIgY29kZSBmcm9tIHRoZSAKPj4gYXJtNjQgY29kZS4gTXkgc3VnZ2VzdGlv
biB3b3VsZCBiZQo+Pgo+PiBwbGF0L2NvbW1vbi9hcm0gZm9yIDMyLWJpdCBjb2RlCj4+Cj4+IHBs
YXQvY29tbW9uL2FybTY0IGZvciB0aGUgNjQtYml0Lgo+Cj4gV2VsbCB5b3UgY2FuIHNoYXJlIGEg
bG90IG9mIGNvZGUgYmV0d2VlbiAzMi1iaXQgYW5kIDY0LWJpdC4gSWYgd2UgdGFrZSAKPiB0aGUg
ZXhhbXBsZSBvZiB0aGUgYXJjaCB0aW1lciwgdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGUgd2F5
IHRvIAo+IGFjY2VzcyB0aGUgcmVnaXN0ZXJzIChpLmUuIHN5c3RlbSByZWdpc3RlcnMgdnMgY28t
cHJvY2Vzc29yIHJlZ2lzdGVycykuCgpTaW5jZSBpdCBpcyBwcmltYXJpbHkgYWJvdXQgdGhlIGNv
IHByb2Nlc3NvciBhbmQgc3lzdGVtIHJlZ2lzdGVyLiBIb3cgCmFib3V0IHB1c2hpbmcgdGhlIGZ1
bmN0aW9uYWxpdHkgaW50byB0aGUgcmVzcGVjdGl2ZSBoZWFkZXIuCgpwbGF0L2NvbW1vbi9pbmNs
dWRlL2FybS90aW1lLmgKCiDCoMKgwqAgVGhlIGhlYWRlciBpbmNsdWRlcyBhcmNoIHNwZWNpZmlj
IGhlYWRlciBmaWxlcy4KCnBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUuaAoKIMKg
wqAgUHJvdmlkZXMgYSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIHJl
YWRpbmcgc3lzdGVtIApyZWdpc3RlcnMgd2hpbGUgcHJvdmlkaW5nIGEgbWFjcm8gZGVmaW5pdGlv
biBmb3IgcmVhZGluZyByZWdpc3RlciBsaWtlOgoKIMKgI2RlZmluZcKgIGVsMF9jbnR2X2N0bF9n
ZXTCoCBTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkKCiDCoCNkZWZpbmXCoCBlbDBfY250dl9j
dGxfc2V0KHZhbCkgU1lTUkVHX1dSSVRFMzIoY250dl9jdGxfZWwwLCB2YWwpCgpwbGF0L2NvbW1v
bi9pbmNsdWRlL2FybS9hcm0vdGltZS5oCgogwqAgUHJvdmlkZSBhIHNpbWlsYXIgaW50ZXJmYWNl
IHRvIHRoZSBhcm0zMiBhcmNoLiBGb3Igbm93IHdlIGRlZmluZSB0aGUgCm1hY3JvIGFzIGFuIGVt
cHR5IGltcGxlbWVudGF0aW9uIHRvIG1ha2UgaXQgY29tcGlsZSBvbiB0aGUgYXJtMzIgd2l0aCBh
wqAgCiIjd2FybmluZyIgdG8gaW5kaWNhdGUgaW5jb21wbGV0ZSBpbXBsZW1lbnRhdGlvbi4KCj4K
PiBTbyBpdCB3b3VsZCBiZSBiZXN0IHRvIGNvbnNpZGVyOgo+Cj4gcGxhdC9jb21tb24vYXJtIGZv
ciBhbnl0aGluZyBjb21tb24gYmV0d2VlbiBhcm0zMiBhbmQgYXJtNjQKPiBwbGF0L2NvbW1vbi9h
cm0vYXJtMzIgZm9yIGFueXRoaW5nIGFybTMyIHNwZWNpZmljCj4gcGxhdC9jb21tb24vYXJtL2Fy
bTY0IGZvciBhbnl0aGluZyBhcm02NCBzcGVjaWZpYwo+Cj4gVGhlIGRpcmVjdG9yeSBhcm17MzIs
NjR9IHNob3VsZCBiZSBwcmV0dHkgZW1wdHkuCj4KPiBDaGVlcnMsCj4KCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 12:01:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 12:01:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iACAt-0006Ct-8C; Tue, 17 Sep 2019 12:01:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iACAs-0006Cj-4I
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 12:01:38 +0000
X-Inumbo-ID: e6ab97b0-d942-11e9-9607-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id e6ab97b0-d942-11e9-9607-12813bfff9fa;
 Tue, 17 Sep 2019 12:01:37 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id EC1A7404A9;
 Tue, 17 Sep 2019 14:01:36 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 14:01:35 +0200
Message-Id: <20190917120135.32396-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBCOMPILER-RT PATCH] Export __udivti3
 symbol
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TmVlZGVkIGJ5IG91ciB1cGNvbWluZyBtYmVkIFRMUyBwb3J0LgoKU2lnbmVkLW9mZi1ieTogRmVs
aXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgotLS0KIGV4cG9ydHN5bXMudWsgfCAx
ICsKIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigrKQoKZGlmZiAtLWdpdCBhL2V4cG9ydHN5
bXMudWsgYi9leHBvcnRzeW1zLnVrCmluZGV4IDkyM2E4NDguLjBkZmE4ZWYgMTAwNjQ0Ci0tLSBh
L2V4cG9ydHN5bXMudWsKKysrIGIvZXhwb3J0c3ltcy51awpAQCAtMSw1ICsxLDYgQEAKIF9fZGl2
ZGMzCiBfX2RpdnNjMwogX19tdWxkYzMKK19fdWRpdnRpMwogX19wb3Bjb3VudGRpMgogCi0tIAoy
LjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 12:55:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 12:55:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAD0g-00054M-QX; Tue, 17 Sep 2019 12:55:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ya0Z=XM=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iAD0g-00054G-2r
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 12:55:10 +0000
X-Inumbo-ID: 60453a5c-d94a-11e9-978d-bc764e2007e4
Received: from FRA01-PR2-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:7e18::61f])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 60453a5c-d94a-11e9-978d-bc764e2007e4;
 Tue, 17 Sep 2019 12:55:08 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=PqhFvFEVMN8/tfqWgyA0ReHXIvSZ+YlgUwPVE5N3P+R4MWPnCAity5iHrvmmHonkKX6rIOd4VKY4N/gc1QM1Kg7mW2NqG+lAPS0LZ8oOZl00AoAZCBFW0ycX7x0Wz/7EsL28AaL7BOTTbSo366G4nyl4tumHwHzoDcf8MoNvTjTi5Y3siy4/NrK+XXQSRDGDluDDeIeViRvMuKa7BtL0wG5c15QXfxxaaTTL1khTWPZRNEGVuAa7w1LgHY5ZLD3yy+Ei+c8Ez7G7DwywwikKMXr6bd1rMg0anbvOF2zIlDszWDLeF9aMSVVPsNnDiFGeUxOwaMQkKSCVhV3xkaCxMg==
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=ZFwebOZKzq+nEV2brsqCEe6ogZvP8WRoIbfnE3tJYak=;
 b=V/TttkYjkzAW0lFQLi6esDb05YNB6iN0607CiO8Nnk8DYdoRu3iGCTtFyQeafTClPxYIfqzrinef/q7o9pACzZ1HzXk3fRQ3Zm8ImfMyMaodpiXsng3uZfQ3bxUMNVUX9126QDuQ9X7RsS3rvy/T7RkUwj1jGneej86t3zOeqCU9pM17XCIGFoPXN5JqiC/Y/+2xh8j/VdK2bYgRdxJGBZctNp5kbP3pEnv54fKHr9TXSwrzIssL4ZlWE+IqqCWl7nAwZD+Lcg7U4FFOhafzgr53BExxm33n4Yo1YTyljNfmtumSacQHrhbFcwNDGyQ1d7WRo+xKiyj085HhTncCLA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4972.eurprd01.prod.exchangelabs.com (20.177.208.220) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Tue, 17 Sep
 2019 12:55:06 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Tue, 17 Sep 2019
 12:55:06 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBCOMPILER-RT PATCH] Export __udivti3
 symbol
Thread-Index: AQHVbU+wcuHRJYiPvEyoKPanJI2IcKcv06AA
Date: Tue, 17 Sep 2019 12:55:06 +0000
Message-ID: <4e2b2102-0288-5dc2-a457-2187f3dcf29b@stud.acs.upb.ro>
References: <20190917120135.32396-1-felipe.huici@neclab.eu>
In-Reply-To: <20190917120135.32396-1-felipe.huici@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0214.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1f::34) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 2a27931e-cbf4-40ca-deb4-08d73b6e4374
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7025125)(7027125)(7023125)(2017052603328)(7193020);
 SRVR:PR1PR01MB4972; 
x-ms-traffictypediagnostic: PR1PR01MB4972:
x-microsoft-antispam-prvs: <PR1PR01MB49723C715B110ED7B78E1E3AA68F0@PR1PR01MB4972.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:1148;
x-forefront-prvs: 01630974C0
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(39830400003)(376002)(396003)(136003)(346002)(366004)(189003)(199004)(2906002)(386003)(66066001)(305945005)(2616005)(6512007)(446003)(66946007)(71200400001)(6436002)(64756008)(229853002)(6486002)(31696002)(486006)(2351001)(186003)(85202003)(6246003)(99286004)(76176011)(8936002)(31686004)(66476007)(81156014)(81166006)(66556008)(52116002)(8676002)(11346002)(26005)(66446008)(786003)(5660300002)(53546011)(6916009)(2501003)(71190400001)(102836004)(25786009)(14454004)(85182001)(476003)(5640700003)(7736002)(508600001)(6116002)(3846002)(6506007)(4744005)(86362001)(316002)(256004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4972;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: pz4trlqB4i4wfW1iB5xykpH2fkkhcIEkFfzCKDEW5aPFk3tmv/rtt/hVoyCLrqrqD06vOfSSCYL+FOX+MbX5K1rc6N/DFBcM62eL1TEinPEyG+LplCvuNDWO/Q2RL9TNP/qRC2oRR+AZTc4gU1X7uw2aTdaUhdYOf2JqdS08xPUjI5uUNC1iPqK91f13TvFdM96KMI3B04lM48T20NIjjNXUxwPQJJvel5WSM6cAd8110KZ1CtxXD4Mob75JlXogJ3AlsXDVNjRfVWe07Rq2FXVL/9lwb+YiXYVPhKGv0lL2Yk2CwuZTLziozho0Hp1ZVLD7kVFj0jJFJqSr8Dlp3MXRHyAc/vRBnfNJYp5Wy+vnPveeyO3UwoCfaFREpZlU+t/QUXXxdRH0x4y+l/nWa71wh9SNFyNsrMPiQCdHQ2E=
x-ms-exchange-transport-forked: True
Content-ID: <D45821F7C8C41341B000152AD8334255@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 2a27931e-cbf4-40ca-deb4-08d73b6e4374
X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Sep 2019 12:55:06.2427 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: a4COQd9ysS3zdl9e5+2u0Kr37jDCRVhBJEPJIbwTMt15Dzk1sM0S3HYsA5ZrP9QxZrnkNuCImIjvjnAl4yUmcwrdqGeKTW3Eb7Pj9t13Lnxh5pIRJIRYGSEsSwm9uq/+
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4972
Subject: Re: [Minios-devel] [UNIKRAFT/LIBCOMPILER-RT PATCH] Export __udivti3
 symbol
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlLA0KDQpJJ3ZlIHRlc3RlZCBzZXZlcmFsIGJ1aWxkcyBvZiBDKysgYXBwcyB3aXRo
IHRoaXMgcGF0Y2ggYW5kIGl0IHNlZW1zIHRvIHdvcmsgYWxsIHJpZ2h0LiBUaGFua3MhDQoNClZs
YWQNCg0KUmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdQk8dmxhZF9hbmRyZWkuYmFkb2l1
QHN0dWQuYWNzLnVwYi5ybz4NCg0KT24gMTcuMDkuMjAxOSAxNTowMSwgRmVsaXBlIEh1aWNpIHdy
b3RlOg0KPiBOZWVkZWQgYnkgb3VyIHVwY29taW5nIG1iZWQgVExTIHBvcnQuDQo+DQo+IFNpZ25l
ZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCj4gLS0tDQo+
ICAgZXhwb3J0c3ltcy51ayB8IDEgKw0KPiAgIDEgZmlsZSBjaGFuZ2VkLCAxIGluc2VydGlvbigr
KQ0KPg0KPiBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsNCj4gaW5k
ZXggOTIzYTg0OC4uMGRmYThlZiAxMDA2NDQNCj4gLS0tIGEvZXhwb3J0c3ltcy51aw0KPiArKysg
Yi9leHBvcnRzeW1zLnVrDQo+IEBAIC0xLDUgKzEsNiBAQA0KPiAgIF9fZGl2ZGMzDQo+ICAgX19k
aXZzYzMNCj4gICBfX211bGRjMw0KPiArX191ZGl2dGkzDQo+ICAgX19wb3Bjb3VudGRpMg0KPiAg
IA0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 13:03:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 13:03:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAD8G-0006I9-Eb; Tue, 17 Sep 2019 13:03:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAD8F-0006Hv-F3
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 13:02:59 +0000
X-Inumbo-ID: 77b98692-d94b-11e9-960c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 77b98692-d94b-11e9-960c-12813bfff9fa;
 Tue, 17 Sep 2019 13:02:57 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 358754163F;
 Tue, 17 Sep 2019 15:02:56 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 15:02:53 +0200
Message-Id: <20190917130255.7414-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBMBEDTLS PATCH 0/2] Introduce mbed TLS
 port
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIG1iZWQgVExTIHRvIFVuaWtyYWZ0LgoKRmVsaXBl
IEh1aWNpICgyKToKICBJbnRyb2R1Y2UgbGlicmFyeSBza2VsZXRvbgogIEFkZCBNYWtlZmlsZS51
awoKIC5naXRpZ25vcmUgICAgICB8ICAyNyArKysrKysrKysrCiBDT0RJTkdfU1RZTEUubWQgfCAg
IDQgKysKIENPTlRSSUJVVElORy5tZCB8ICAgNCArKwogQ09QWUlORy5tZCAgICAgIHwgIDM5ICsr
KysrKysrKysrKysrKwogQ29uZmlnLnVrICAgICAgIHwgIDEwICsrKysKIE1BSU5UQUlORVJTLm1k
ICB8ICAxMCArKysrCiBNYWtlZmlsZS51ayAgICAgfCAxNTIgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIFJFQURNRS5tZCAgICAgICB8ICAx
NCArKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMjYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCiBj
cmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09Q
WUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0
IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBSRUFETUUubWQKCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 13:03:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 13:03:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAD8L-0006Ik-GH; Tue, 17 Sep 2019 13:03:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAD8K-0006Ib-A8
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 13:03:04 +0000
X-Inumbo-ID: 780c9e23-d94b-11e9-960c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 780c9e23-d94b-11e9-960c-12813bfff9fa;
 Tue, 17 Sep 2019 13:02:58 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 87BB441C15;
 Tue, 17 Sep 2019 15:02:57 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 15:02:55 +0200
Message-Id: <20190917130255.7414-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917130255.7414-1-felipe.huici@neclab.eu>
References: <20190917130255.7414-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBMBEDTLS PATCH 2/2] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIG1iZWQgVExTIHBvcnQgTWFrZWZpbGUudWsKClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWlj
aSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KLS0tCiBNYWtlZmlsZS51ayB8IDE1MiArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEg
ZmlsZSBjaGFuZ2VkLCAxNTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2Vm
aWxlLnVrCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQ4NDg4Ci0tLSAvZGV2L251bGwKKysrIGIvTWFr
ZWZpbGUudWsKQEAgLTAsMCArMSwxNTIgQEAKKyMgIGxpYm1iZWR0bHMgTWFrZWZpbGUudWsKKyMK
KyMgIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKyMKKyMK
KyMgIENvcHlyaWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAg
YXJlIG1ldDoKKyMKKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisjICAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorIworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisjICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisjCisjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RF
RCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
IyBMaWJyYXJ5IHJlZ2lzdHJhdGlvbgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoZXZhbCAk
KGNhbGwgYWRkbGliX3MsbGlibWJlZHRscywkKENPTkZJR19MSUJNQkVEVExTKSkpCisKKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitM
SUJNQkVEVExTX1ZFUlNJT049Mi4xOC4xCitMSUJNQkVEVExTX1VSTD1odHRwczovL2dpdGh1Yi5j
b20vQVJNbWJlZC9tYmVkdGxzL2FyY2hpdmUvbWJlZHRscy0kKExJQk1CRURUTFNfVkVSU0lPTiku
emlwCisKKyNMSUJNQkVEVExTX1BBVENIRElSPSQoTElCTUJFRFRMU19CQVNFKS9wYXRjaGVzCisk
KGV2YWwgJChjYWxsIGZldGNoYXMsbGlibWJlZHRscywkKExJQk1CRURUTFNfVVJMKSxtYmVkdGxz
LW1iZWR0bHMtJChMSUJNQkVEVExTX1ZFUlNJT04pLnppcCkpCisjJChldmFsICQoY2FsbCBwYXRj
aCxsaWJtYmVkdGxzLCQoTElCTUJFRFRMU19QQVRDSERJUiksbGlibWJlZHRscy0kKExJQk1CRURU
TFNfVkVSU0lPTikpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBIZWxwZXJzCisjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworTElCTUJFRFRMU19TVUJESVI9bWJlZHRscy1tYmVkdGxzLSQo
TElCTUJFRFRMU19WRVJTSU9OKQorTElCTUJFRFRMU19FWFRSQUNURUQ9JChMSUJNQkVEVExTX09S
SUdJTikvJChMSUJNQkVEVExTX1NVQkRJUikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg
TGlicmFyeSBpbmNsdWRlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NJTkNMVURFUy0kKENP
TkZJR19MSUJNQkVEVExTKSArPSAtSSQoTElCTUJFRFRMU19FWFRSQUNURUQpL2luY2x1ZGUKKwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2xvYmFsIGZsYWdzCisjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIworIyBTdXBwcmVzcyBzb21lIHdhcm5pbmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nl
c3MgbG9vayBuZWF0ZXIKK0xJQk1CRURUTFNfU1VQUFJFU1NfRkxBR1MgKz0gLVduby1wb2ludGVy
LXNpZ24KKworTElCTUJFRFRMU19DRkxBR1MteSAgICs9ICQoTElCTUJFRFRMU19TVVBQUkVTU19G
TEFHUykKK0xJQk1CRURUTFNfQ1hYRkxBR1MteSArPSAkKExJQk1CRURUTFNfU1VQUFJFU1NfRkxB
R1MpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMgCisjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkv
bGlicmFyeS9hZXMuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RF
RCkvbGlicmFyeS9hZXNuaS5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhU
UkFDVEVEKS9saWJyYXJ5L2FyYzQuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExT
X0VYVFJBQ1RFRCkvbGlicmFyeS9hcmlhLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJF
RFRMU19FWFRSQUNURUQpL2xpYnJhcnkvYXNuMXBhcnNlLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9
ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvYXNuMXdyaXRlLmMKK0xJQk1CRURUTFNf
U1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvYmFzZTY0LmMKK0xJQk1C
RURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvYmlnbnVtLmMK
K0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvYmxv
d2Zpc2guYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGli
cmFyeS9jYW1lbGxpYS5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFD
VEVEKS9saWJyYXJ5L2NjbS5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhU
UkFDVEVEKS9saWJyYXJ5L2NlcnRzLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRM
U19FWFRSQUNURUQpL2xpYnJhcnkvY2hhY2hhMjAuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChM
SUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9jaGFjaGFwb2x5LmMKK0xJQk1CRURUTFNfU1JD
Uy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvY2lwaGVyLmMKK0xJQk1CRURU
TFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvY2lwaGVyX3dyYXAu
YworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9j
bWFjLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJh
cnkvY3RyX2RyYmcuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RF
RCkvbGlicmFyeS9kZWJ1Zy5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhU
UkFDVEVEKS9saWJyYXJ5L2Rlcy5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNf
RVhUUkFDVEVEKS9saWJyYXJ5L2RobS5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURU
TFNfRVhUUkFDVEVEKS9saWJyYXJ5L2VjZGguYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJN
QkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9lY2RzYS5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAk
KExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L2VjanBha2UuYworTElCTUJFRFRMU19TUkNT
LXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9lY3AuYworTElCTUJFRFRMU19T
UkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9lY3BfY3VydmVzLmMKK0xJ
Qk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvZW50cm9w
eS5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5
L2VudHJvcHlfcG9sbC5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFD
VEVEKS9saWJyYXJ5L2Vycm9yLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19F
WFRSQUNURUQpL2xpYnJhcnkvZ2NtLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRM
U19FWFRSQUNURUQpL2xpYnJhcnkvaGF2ZWdlLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElC
TUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvaGtkZi5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAk
KExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L2htYWNfZHJiZy5jCitMSUJNQkVEVExTX1NS
Q1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L21kLmMKK0xJQk1CRURUTFNf
U1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvbWQyLmMKK0xJQk1CRURU
TFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvbWQ0LmMKK0xJQk1C
RURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvbWQ1LmMKK0xJ
Qk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvbWRfd3Jh
cC5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5
L21lbW9yeV9idWZmZXJfYWxsb2MuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExT
X0VYVFJBQ1RFRCkvbGlicmFyeS9uZXRfc29ja2V0cy5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAk
KExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L25pc3Rfa3cuYworTElCTUJFRFRMU19TUkNT
LXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9vaWQuYworTElCTUJFRFRMU19T
UkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9wYWRsb2NrLmMKK0xJQk1C
RURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvcGVtLmMKK0xJ
Qk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvcGsuYwor
TElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9wa193
cmFwLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJh
cnkvcGtjczExLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQp
L2xpYnJhcnkvcGtjczEyLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRS
QUNURUQpL2xpYnJhcnkvcGtjczUuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExT
X0VYVFJBQ1RFRCkvbGlicmFyeS9wa3BhcnNlLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElC
TUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvcGt3cml0ZS5jCitMSUJNQkVEVExTX1NSQ1MteSAr
PSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3BsYXRmb3JtLmMKK0xJQk1CRURUTFNf
U1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvcGxhdGZvcm1fdXRpbC5j
CitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3Bv
bHkxMzA1LmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xp
YnJhcnkvcmlwZW1kMTYwLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRS
QUNURUQpL2xpYnJhcnkvcnNhLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19F
WFRSQUNURUQpL2xpYnJhcnkvcnNhX2ludGVybmFsLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQo
TElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvc2hhMS5jCitMSUJNQkVEVExTX1NSQ1MteSAr
PSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3NoYTI1Ni5jCitMSUJNQkVEVExTX1NS
Q1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3NoYTUxMi5jCitMSUJNQkVE
VExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3NzbF9jYWNoZS5j
CitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3Nz
bF9jaXBoZXJzdWl0ZXMuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJB
Q1RFRCkvbGlicmFyeS9zc2xfY2xpLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRM
U19FWFRSQUNURUQpL2xpYnJhcnkvc3NsX2Nvb2tpZS5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAk
KExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3NzbF9zcnYuYworTElCTUJFRFRMU19TUkNT
LXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS9zc2xfdGlja2V0LmMKK0xJQk1C
RURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkvc3NsX3Rscy5j
CitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3Ro
cmVhZGluZy5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9s
aWJyYXJ5L3RpbWluZy5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFD
VEVEKS9saWJyYXJ5L3ZlcnNpb24uYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExT
X0VYVFJBQ1RFRCkvbGlicmFyeS92ZXJzaW9uX2ZlYXR1cmVzLmMKK0xJQk1CRURUTFNfU1JDUy15
ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkveDUwOS5jCitMSUJNQkVEVExTX1NS
Q1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3g1MDlfY3JlYXRlLmMKK0xJ
Qk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19FWFRSQUNURUQpL2xpYnJhcnkveDUwOV9j
cmwuYworTElCTUJFRFRMU19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFy
eS94NTA5X2NydC5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAkKExJQk1CRURUTFNfRVhUUkFDVEVE
KS9saWJyYXJ5L3g1MDlfY3NyLmMKK0xJQk1CRURUTFNfU1JDUy15ICs9ICQoTElCTUJFRFRMU19F
WFRSQUNURUQpL2xpYnJhcnkveDUwOXdyaXRlX2NydC5jCitMSUJNQkVEVExTX1NSQ1MteSArPSAk
KExJQk1CRURUTFNfRVhUUkFDVEVEKS9saWJyYXJ5L3g1MDl3cml0ZV9jc3IuYworTElCTUJFRFRM
U19TUkNTLXkgKz0gJChMSUJNQkVEVExTX0VYVFJBQ1RFRCkvbGlicmFyeS94dGVhLmMKLS0gCjIu
MTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 13:03:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 13:03:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAD8Q-0006KS-I5; Tue, 17 Sep 2019 13:03:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=juUE=XM=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAD8P-0006Jh-9l
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 13:03:09 +0000
X-Inumbo-ID: 780c9e22-d94b-11e9-960c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 780c9e22-d94b-11e9-960c-12813bfff9fa;
 Tue, 17 Sep 2019 13:02:57 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id DA373418A6;
 Tue, 17 Sep 2019 15:02:56 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Tue, 17 Sep 2019 15:02:54 +0200
Message-Id: <20190917130255.7414-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190917130255.7414-1-felipe.huici@neclab.eu>
References: <20190917130255.7414-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBMBEDTLS PATCH 1/2] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4K
LS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysrKysKIENP
RElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysKIENPUFlJ
TkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog
Q29uZmlnLnVrICAgICAgIHwgMTAgKysrKysrKysrKwogTUFJTlRBSU5FUlMubWQgIHwgMTAgKysr
KysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgMTQgKysrKysrKysrKysrKysKIDcgZmlsZXMgY2hh
bmdlZCwgMTA4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBj
cmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09O
VFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAogY3JlYXRlIG1vZGUg
MTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVh
dGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRp
Z25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMmZkMwotLS0gL2Rl
di9udWxsCisrKyBiLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyNyBAQAorKi5kZXBlbmQKKyoubwor
Ki5hCisqLmQKKyouc28KKyoub3JpZworKi5yZWoKKyouYmFrCisqLnN3cAorKn4KKywqCitcIypc
IworLlwjKgorXCNfKlwjCisuXCNfKgorIS5naXRpZ25vcmUKKy4qCisKKyMgZ251IGdsb2JhbCBm
aWxlcworR1BBVEgKK0dSVEFHUworR1NZTVMKK0dUQUdTCisKKyMgY3Njb3BlIGZpbGVzCitjc2Nv
cGUuKgorbmNzY29wZS4qCmRpZmYgLS1naXQgYS9DT0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZ
TEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczMDA0MQotLS0gL2Rl
di9udWxsCisrKyBiL0NPRElOR19TVFlMRS5tZApAQCAtMCwwICsxLDQgQEAKK0NvZGluZyBTdHls
ZQorPT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUgYENPRElOR19TVFlMRS5tZGAg
ZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvQ09OVFJJ
QlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjVmNTVlY2EKLS0tIC9kZXYvbnVsbAorKysgYi9DT05UUklCVVRJTkcubWQKQEAgLTAs
MCArMSw0IEBACitDb250cmlidXRpbmcgdG8gVW5pa3JhZnQKKz09PT09PT09PT09PT09PT09PT09
PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUgYENPTlRSSUJVVElORy5tZGAgZmlsZSBpbiB0aGUg
bWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvQ09QWUlORy5tZCBiL0NPUFlJ
TkcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0ODhkMgotLS0gL2Rl
di9udWxsCisrKyBiL0NPUFlJTkcubWQKQEAgLTAsMCArMSwzOSBAQAorTGljZW5zZQorPT09PT09
PQorCitVbmlrcmFmdCBtYmVkIFRMUyB3cmFwcGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQgbWJlZCBU
TFMgd2l0aCBVbmlrcmFmdC4KK0VhY2ggQyBjb2RlIGZpbGUgaW4gdGhpcyByZXBvc2l0b3J5IHNo
b3VsZCBkZWNsYXJlIHdobyBpcyB0aGUKK2NvcHlyaWdodCBvd25lciBhbmQgdW5kZXIgd2hpY2gg
dGVybXMgYW5kIGNvbmRpdGlvbnMgdGhlIGNvZGUgaXMKK2xpY2Vuc2VkLiBJZiBzdWNoIGEgbGlj
ZW5jZSBub3RlIGlzIG1pc3NpbmcsIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0Citub3RpY2Ugd2ls
bCBhcHBseToKKworCUNvcHlyaWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29y
cG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKwltb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KwlhcmUgbWV0OgorCisJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKwkgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisJMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKwkgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisJICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKwkzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5
cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisJICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKwkgICB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
CisJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMgSVMiCisJQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorCUlNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisJQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRQorCUxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKwlDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorCVNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworCUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisJQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKwlBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRQorCVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9Db25m
aWcudWsgYi9Db25maWcudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEx
OWIyNQotLS0gL2Rldi9udWxsCisrKyBiL0NvbmZpZy51awpAQCAtMCwwICsxLDEwIEBACitjb25m
aWcgTElCTUJFRFRMUworCSAgIGJvb2wgIk1iZWQgVExTIC0gQSBwb3J0YWJsZSwgZmxleGlibGUg
U1NMIGxpYnJhcnkgIgorCSAgIGRlZmF1bHQgeQorCSAgIHNlbGVjdCBMSUJORVdMSUJDCisJICAg
c2VsZWN0IExJQkNYWAorCSAgIHNlbGVjdCBMSUJDWFhBQkkKKwkgICBzZWxlY3QgTElCQ09NUElM
RVJfUlQKKwkgICBzZWxlY3QgTElCVU5XSU5ECisJICAgc2VsZWN0IExXSVAKKwkgICBzZWxlY3Qg
TFdJUF9JUFY2CmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUy5tZCBiL01BSU5UQUlORVJTLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMDllOWIKLS0tIC9kZXYvbnVsbAor
KysgYi9NQUlOVEFJTkVSUy5tZApAQCAtMCwwICsxLDEwIEBACitNYWludGFpbmVycyBMaXN0Cis9
PT09PT09PT09PT09PT09CisKK0ZvciBub3RlcyBvbiBob3cgdG8gcmVhZCB0aGlzIGluZm9ybWF0
aW9uLCBwbGVhc2UgcmVmZXIgdG8gYE1BSU5UQUlORVJTLm1kYCBpbgordGhlIG1haW4gVW5pa3Jh
ZnQgcmVwb3NpdG9yeS4KKworCUxJQlpMSUItVU5JS1JBRlQKKwlNOglGZWxpcGUgSHVpY2kgPGZl
bGlwZS5odWljaUBuZWNsYWIuZXU+CisJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcKKwlG
OiAqCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZmQ5ZWU5NQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5tZApA
QCAtMCwwICsxLDE0IEBACitsaWJtYmVkdGxzIGZvciBVbmlrcmFmdAorPT09PT09PT09PT09PT09
PT09PQorVGhpcyBpcyBhIHBvcnQgb2YgbWJlZCBUTFMgdG8gVW5pa3JhZnQuIFRoZSBwb3J0IGhh
cyBhIG51bWJlciBvZgorZGVwZW5kZW5jaWVzLiBUbyBtZWV0IHRoZW0sIGVuc3VyZSB0aGF0IHlv
dSBoYXZlIHRoZSBmb2xsb3dpbmcgbGlicworYWRkZWQgdG8geW91ciBMSUJTIHZhcmlhYmxlIGlu
IHlvdXIgYXBwJ3MgTWFrZWZpbGU6CisKKyAgLi4uJChVS19MSUJTKS9saWJ1bndpbmQ6JChVS19M
SUJTKS9jb21waWxlci1ydDokKFVLX0xJQlMpL2xpYmN4eGFiaToKKyAgICAgJChVS19MSUJTKS9s
aWJjeHg6JChVS19MSUJTKS9tYmVkdGxzOiQoVUtfTElCUykvbHdpcDoKKwkgJChVS19MSUJTKS9u
ZXdsaWIuLi4KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBhcyB3ZWxsIGFzIHRo
ZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2AKK3N1YmRpcmVjdG9yeSBvZiB0aGUgbWFpbiB1
bmlrcmFmdCByZXBvc2l0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgorCisKLS0gCjIuMTEu
MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 15:00:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 15:00:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAExy-0006sW-89; Tue, 17 Sep 2019 15:00:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=0Spg=XM=gmail.com=jiakernel2@srs-us1.protection.inumbo.net>)
 id 1iAExw-0006sI-SB
 for minios-devel@lists.xenproject.org; Tue, 17 Sep 2019 15:00:28 +0000
X-Inumbo-ID: e26aeb9c-d95b-11e9-a337-bc764e2007e4
Received: from mail-pf1-x444.google.com (unknown [2607:f8b0:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id e26aeb9c-d95b-11e9-a337-bc764e2007e4;
 Tue, 17 Sep 2019 15:00:28 +0000 (UTC)
Received: by mail-pf1-x444.google.com with SMTP id q21so2308272pfn.11
 for <minios-devel@lists.xenproject.org>; Tue, 17 Sep 2019 08:00:27 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-transfer-encoding;
 bh=gRzPcxTLdvot2ousazeb/EAfcVvlqTUZzEoSjshBvJU=;
 b=bjCqyLnNwVGl+U3aNSq7qgWDTAtQejYDT8XcExJRxakaqzzvb0XDyhI/WBp0qTK87K
 j1Ofcb48zSRiDAgZFEs8irTkdDfZ0ADA1C07NUrpq46lIEQ+a9Jrr+KkZh7zG+LVeVwr
 U2OuHPMlngBvXEtuflaEIDCtlDZOA6/tegk0niyPYEVPQm2WPnxXdQ75B5KRikawr2jj
 CA30Y+VvJeXi4VQSjTVKx7qXxSjXxs1WS629yWAzZ/tkoPQMwcqJ1zvKpNfFS4VRoff4
 EIxUtcvQeP3HFTkjYFIxFHD8rGtR1T16zLJZ/UKE/93578MvNdDMyTZOv8CRwuoVnktS
 FjxQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-transfer-encoding;
 bh=gRzPcxTLdvot2ousazeb/EAfcVvlqTUZzEoSjshBvJU=;
 b=Pvsolg/l9+p9bEqkkwWa52s4GeZAxRR0KSZpRr9r5RZueAtRV3l92CrDYLhYT5XyRn
 fLWp56BdJOvnDPVSNmMSU2xfGmW3FjDoXVTnjWhCBW1udLrKZfN815XKLem+EL8ZcWOr
 fZZAhaxKscAx9pyW3aO3EsMw76STvNqQ+IdZH9uQIcFAZqEfaIMXH9FotWmVdrS/jOvP
 XPRuEWpFGr8vxhvzzxgFvUmmZtyRUhKXMhHhu6mqq7hw4PvrxvL/jkkd3ba/zQ6DoLXP
 HAD6w0h7p+f2U89r5smAqqpyqWVGw7yTrIS6GxQ/SxEQYrmaVMCWQ1dIK7pTLX8Kss1b
 O63w==
X-Gm-Message-State: APjAAAWoT9dbCCtJpx9YV9AK0YILcnMSE8Qqja4XK6i0I96mLwgFkr2Y
 CKOf1d7NkpC619yweGplCRB911mT
X-Google-Smtp-Source: APXvYqzHuP1ESGpCJK/HKkt3FjUXTe1h7n89IkFttehziWYvfjBu7ZO+yvaeK0018NYYJO4S15HRDA==
X-Received: by 2002:a65:608e:: with SMTP id t14mr3674222pgu.373.1568732426762; 
 Tue, 17 Sep 2019 08:00:26 -0700 (PDT)
Received: from [0.0.0.0] (104.129.187.94.16clouds.com. [104.129.187.94])
 by smtp.gmail.com with ESMTPSA id s7sm2730607pjn.8.2019.09.17.08.00.24
 for <minios-devel@lists.xenproject.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Tue, 17 Sep 2019 08:00:26 -0700 (PDT)
To: minios-devel@lists.xenproject.org
References: <20190828230327.9157-1-felipe.huici@neclab.eu>
 <20190828230327.9157-2-felipe.huici@neclab.eu>
From: Jia He <jiakernel2@gmail.com>
Message-ID: <ffc3cc94-78e8-fd26-6c11-e8df2e05b28b@gmail.com>
Date: Tue, 17 Sep 2019 23:00:19 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190828230327.9157-2-felipe.huici@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 1/3] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlCgpQbGVhc2Ugc2VlIHRoZSBpbmxpbmUgYmVsb3cKCk9uIDIwMTkvOC8yOSA3OjAz
LCBGZWxpcGUgSHVpY2kgd3JvdGU6Cj4gV2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBm
b3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29kZS4KPgo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWlj
aSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiAtLS0KPiAgIC5naXRpZ25vcmUgICAgICB8IDI3
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysr
Kwo+ICAgQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKwo+ICAgQ09QWUlORy5tZCAgICAgIHwgMzkg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBDb25maWcudWsgICAg
ICAgfCAgNCArKysrCj4gICBNQUlOVEFJTkVSUy5tZCAgfCAxMCArKysrKysrKysrCj4gICBSRUFE
TUUubWQgICAgICAgfCAgOSArKysrKysrKysKPiAgIGV4cG9ydHN5bXMudWsgICB8ICAxICsKPiAg
IDggZmlsZXMgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IC5naXRpZ25vcmUKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKPiAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBD
T1BZSU5HLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCj4gICBjcmVhdGUgbW9k
ZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQK
PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCj4KPiBkaWZmIC0tZ2l0IGEvLmdp
dGlnbm9yZSBiLy5naXRpZ25vcmUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAw
MDAuLjU3ZWY4MjEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvLmdpdGlnbm9yZQo+IEBAIC0wLDAg
KzEsMjcgQEAKPiArLmRlcGVuZAo+ICsqLm8KPiArKi5hCj4gKyouZAo+ICsqLnNvCj4gKyoub3Jp
Zwo+ICsqLnJlago+ICsqLmJhawo+ICsqLnN3cAo+ICsqfgo+ICssKgo+ICtcIypcIwo+ICsuXCMq
Cj4gK1wjXypcIwo+ICsuXCNfKgo+ICshLmdpdGlnbm9yZQo+ICsuKgo+ICsKPiArIyBnbnUgZ2xv
YmFsIGZpbGVzCj4gK0dQQVRICj4gK0dSVEFHUwo+ICtHU1lNUwo+ICtHVEFHUwo+ICsKPiArIyBj
c2NvcGUgZmlsZXMKPiArY3Njb3BlLioKPiArbmNzY29wZS4qCj4gZGlmZiAtLWdpdCBhL0NPRElO
R19TVFlMRS5tZCBiL0NPRElOR19TVFlMRS5tZAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5k
ZXggMDAwMDAwMC4uNTczMDA0MQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9DT0RJTkdfU1RZTEUu
bWQKPiBAQCAtMCwwICsxLDQgQEAKPiArQ29kaW5nIFN0eWxlCj4gKz09PT09PT09PT09PQo+ICsK
PiArUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09ESU5HX1NUWUxFLm1kYCBmaWxlIGluIHRoZSBtYWlu
IFVuaWtyYWZ0IHJlcG9zaXRvcnkuCj4gZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NP
TlRSSUJVVElORy5tZAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMTRm
NmFjNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9DT05UUklCVVRJTkcubWQKPiBAQCAtMCwwICsx
LDQgQEAKPiArQ29udHJpYnV0aW5nIHRvIFVuaWtyYWZ0Cj4gKz09PT09PT09PT09PT09PT09PT09
PT09PQo+ICsKPiArUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09OVFJJQlVUSU5HLm1kYCBmaWxlIGlu
IHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCj4gZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQg
Yi9DT1BZSU5HLm1kCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hODI4
MjA3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0NPUFlJTkcubWQKPiBAQCAtMCwwICsxLDM5IEBA
Cj4gK0xpY2Vuc2UKPiArPT09PT09PQo+ICsKPiArVW5pa3JhZnQgd2FtciB3cmFwcGVycwo+ICst
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICtUaGlzIHJlcG9zaXRvcnkg
Y29udGFpbnMgd3JhcHBlciBjb2RlIHRvIGJ1aWxkIHdhbXIgd2l0aCBVbmlrcmFmdC4KPiArRWFj
aCBDIGNvZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRo
ZQo+ICtjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25z
IHRoZSBjb2RlIGlzCj4gK2xpY2Vuc2VkLiBJZiBzdWNoIGEgbGljZW5jZSBub3RlIGlzIG1pc3Np
bmcsIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0Cj4gK25vdGljZSB3aWxsIGFwcGx5Ogo+ICsKPiAr
CUNvcHlyaWdodCAoYykgWWVhciwgSW5zdGl0dXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4g
Kwo+ICsJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Cj4gKwltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArCWFyZSBtZXQ6Cj4gKwo+ICsJMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKPiArCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KPiArCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKwkgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKwkgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgo+ICsJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRl
ciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsJICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArCSAgIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4gKwo+ICsJ
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMgSVMiCj4gKwlBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKwlJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQo+ICsJQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsJTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsJQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
PiArCVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsJSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArCUNPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Cj4gKwlBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsJUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4g
Kwo+IGRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKPiBuZXcgZmlsZSBtb2RlIDEw
MDY0NAo+IGluZGV4IDAwMDAwMDAuLjkyZWVlY2IKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvQ29u
ZmlnLnVrCj4gQEAgLTAsMCArMSw0IEBACj4gK21lbnVjb25maWcgTElCV0FNUgo+ICsJICAgYm9v
bCAid2FtciAtIEludGVsJ3MgV2ViQXNzZW1ibHkgTWljcm8gUnVudGltZSIKPiArCSAgIGRlZmF1
bHQgeQo+ICsgICAgICAgICAgIHNlbGVjdCBIQVZFX0xJQkMKCkFzIHdlIHRhbGtlZCBiZWZvcmUs
IG1heWJlIHlvdSBuZWVkIHRvIG1ha2UgaXQgZXhwbGljaXRseSBkZXBlbmQgb24KCmx3aXAgYW5k
IHB0aHJlYWQtZW1iZWRkZWQuCgoKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlO
VEFJTkVSUy5tZAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNDA1OTQy
NQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9NQUlOVEFJTkVSUy5tZAo+IEBAIC0wLDAgKzEsMTAg
QEAKPiArTWFpbnRhaW5lcnMgTGlzdAo+ICs9PT09PT09PT09PT09PT09Cj4gKwo+ICtGb3Igbm90
ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlO
VEFJTkVSUy5tZGAgaW4KPiArdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KPiArCj4gKwlM
SUJQQ1JFLVVOSUtSQUZUCj4gKwlNOglGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIu
ZXU+Cj4gKwlMOgltaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZwo+ICsJRjogKgo+IGRpZmYgLS1n
aXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4
IDAwMDAwMDAuLjA1MjdhZTcKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvUkVBRE1FLm1kCj4gQEAg
LTAsMCArMSw5IEBACj4gK3dhbXIgZm9yIFVuaWtyYWZ0Cj4gKz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Cj4gKwo+ICtUaGlzIGlzIHRoZSBwb3J0IG9mIHdhcm0gZm9yIFVuaWtyYWZ0IGFz
IGV4dGVybmFsIGxpYnJhcnkuIElmIGdpdmVuCnMvd2FybS93YW1yCj4gK3RoZSAtLXJlcGwgcGFy
YW1ldGVyIHRoaXMgcG9ydCB3aWxsIHJ1biBSRVBMIG1vZGUuIEFsdGVybmF0aXZlbHkgeW91Cj4g
K2NhbiBydW4gYSBwcm9ncmFtIGZyb20gYSBmaWxlIGlmIHBhc3NlZCBhcyBhIGluaXRyZCBwYXJh
bWV0ZXIuCj4gKwo+ICtQbGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMg
dGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIGBkb2MvYAo+ICtzdWJkaXJlY3Rvcnkgb2YgdGhlIG1h
aW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KPiBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4
cG9ydHN5bXMudWsKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmM4NmMz
ZjMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZXhwb3J0c3ltcy51awo+IEBAIC0wLDAgKzEgQEAK
PiArbm9uZQo+IFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKLS0gCgotLS0KQ2hlZXJzLApK
dXN0aW4gKEppYSBIZSkKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 15:04:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 15:04:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAF1j-0007JB-Le; Tue, 17 Sep 2019 15:04:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d9s6=XM=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAF1i-0007If-R3
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 15:04:22 +0000
X-Inumbo-ID: 6cb0da8c-d95c-11e9-9618-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6cb0da8c-d95c-11e9-9618-12813bfff9fa;
 Tue, 17 Sep 2019 15:04:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 466081056D8;
 Tue, 17 Sep 2019 17:04:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id WAIzWH5JLI4g; Tue, 17 Sep 2019 17:04:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 20BFA1056CB
 for <minios-devel@lists.xen.org>; Tue, 17 Sep 2019 17:04:19 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Sep
 2019 17:04:18 +0200
To: Santiago Pagani <santiago.pagani@neclab.eu>, <minios-devel@lists.xen.org>
References: <20190905131249.22865-1-santiago.pagani@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <40ec3311-f24f-ac0b-1d06-7cbfd5420990@neclab.eu>
Date: Tue, 17 Sep 2019 17:04:17 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190905131249.22865-1-santiago.pagani@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To titania.office.hd
 (192.168.24.89)
Subject: Re: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 0/3] Initial
 port of http-parser to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGV5IFNhbnRpYWdvLCBoZXkgRmVsaXBlLAoKSSB0aGluayB0aGlzIHBhdGNoIHNlcmllcyBsb29r
cyBhbHJlYWR5IGdvb2QuIEkgaGF2ZSBqdXN0IHNvbWUgbWlub3IgCmNvbW1lbnRzIChpbmxpbmUp
LiBJIHRoaW5rIHRoZSBsaWJyYXJ5IGNvdWxkIGJlIGEgImJlc3QgcHJhY3RpY2UiIApleGFtcGxl
IGR1ZSB0byBpdHMgc2ltcGxpY2l0eS4KClRoYW5rcywKClNpbW9uCgpPbiAwNS4wOS4xOSAxNTox
MiwgU2FudGlhZ28gUGFnYW5pIHdyb3RlOgo+IFRoaXMgaXMgb3VyIGluaXRpYWwgcG9ydCBvZiBo
dHRwLXBhcnNlciB0byBVbmlrcmFmdCBhcyBhbiBleHRlcm5hbAo+IGxpYnJhcnkuIE5ld2xpYmMg
aXMgcmVxdWlyZWQuCj4gCj4gVGVzdGVkIHdpdGggJ3Rlc3QuYycgc3VwcG9ydGVkIGJ5IHRoZSBs
aWJyYXJ5LiBBbG1vc3QgYWxsIHRlc3QgYXJlCj4gcGFzc2luZywgd2l0aCB0aGUgZXhjZXB0aW9u
IG9mICd0ZXN0IHZlcnkgbGFyZ2UgY2h1bmtlZCByZXNwb25zZScKPiB0aGUgJ3Jlc3BvbnNlIHNj
YW4gLi4uJyB0ZXN0cy4KPiAKPiBDaGFuZ2VzIHNpbmNlIHYxOgo+IC0gRWRpdGVkIENvbmZpZy51
ayB0byB1c2UgJ2NvbmZpZycgaW5zdGVhZCBvZiAnbWVudWNvbmZpZycKPiAtIEVkaXRlZCBDb25m
aWcudWsgYW5kIGNoYW5nZWQgdGhlICdzZWxlY3QgSEFWRV9MSUJDJyB0byAnc2VsZWN0IExJQk5F
V0xJQkMnIGFzIGl0IGRlcGVuZHMgbmV3bGliCj4gLSBFZGl0ZWQgQ29uZmlnLnVrIGFuZCBjaGFu
Z2VkIHdoaXRlIHNwYWNlcyBmb3IgdGFicwo+IC0gRWRpdGVkIE1ha2VmaWxlLnVrIHRvIGNoYW5n
ZSB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBmcm9tICdodHRwX3BhcnNlcicgdG8gJ2xpYmh0dHBf
cGFyc2VyJwo+IC0gRWRpdGVkIE1ha2VmaWxlLnVrIHRvIHJlbW92ZSB0aGUgL2luY2x1ZGUgZm9s
ZGVyIGFzIHRoZXJlIGlzIG5vbmUgaW4gdGhlIGFyY2hpdmUKPiAKPiBTYW50aWFnbyBQYWdhbmkg
KDMpOgo+ICAgIEludHJvZHVjZSBsaWJyYXJ5IHNrZWxldG9uCj4gICAgQWRkIE1ha2VmaWxlLnVr
Cj4gICAgRXhwb3J0IHN5bWJvbHMKPiAKPiAgIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKPiAg
IENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysKPiAgIENPUFlJTkcubWQgICAgICB8IDM5ICsrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgIENvbmZpZy51ayAgICAgICB8ICA0ICsrKysK
PiAgIE1BSU5UQUlORVJTLm1kICB8IDExICsrKysrKysrKwo+ICAgTWFrZWZpbGUudWsgICAgIHwg
NjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAg
UkVBRE1FLm1kICAgICAgIHwgIDUgKysrKwo+ICAgZXhwb3J0c3ltcy51ayAgIHwgMTQgKysrKysr
KysrKysKPiAgIDggZmlsZXMgY2hhbmdlZCwgMTQzIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklC
VVRJTkcubWQKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCj4gICBjcmVhdGUgbW9k
ZSAxMDA2NDQgQ29uZmlnLnVrCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQK
PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IFJFQURNRS5tZAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKPiAKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 15:04:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 15:04:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAF1o-0007KF-NJ; Tue, 17 Sep 2019 15:04:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d9s6=XM=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAF1n-0007K5-Pz
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 15:04:27 +0000
X-Inumbo-ID: 6db237f1-d95c-11e9-9618-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6db237f1-d95c-11e9-9618-12813bfff9fa;
 Tue, 17 Sep 2019 15:04:23 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 7172EF2019;
 Tue, 17 Sep 2019 17:04:22 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id fIDHHRKxm58Q; Tue, 17 Sep 2019 17:04:22 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3F5FFF2011
 for <minios-devel@lists.xen.org>; Tue, 17 Sep 2019 17:04:20 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Sep
 2019 17:04:19 +0200
To: Santiago Pagani <santiago.pagani@neclab.eu>, <minios-devel@lists.xen.org>
References: <20190905131249.22865-1-santiago.pagani@neclab.eu>
 <20190905131249.22865-3-santiago.pagani@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <4e732f3e-1a4d-ea71-f670-b46e742c0aa2@neclab.eu>
Date: Tue, 17 Sep 2019 17:04:18 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190905131249.22865-3-santiago.pagani@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: Re: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 2/3] Add
 Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMDUuMDkuMTkgMTU6MTIsIFNhbnRpYWdvIFBhZ2FuaSB3cm90ZToKPiBTaWduZWQtb2ZmLWJ5
OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gU2lnbmVkLW9mZi1ieTog
U2FudGlhZ28gUGFnYW5pIDxzYW50aWFnby5wYWdhbmlAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgTWFr
ZWZpbGUudWsgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKwo+ICAgMSBmaWxlIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKykKPiAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awo+IAo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBi
L01ha2VmaWxlLnVrCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4wZmM3
MzFmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL01ha2VmaWxlLnVrCj4gQEAgLTAsMCArMSw2MiBA
QAo+ICsjICBodHRwLXBhcnNlciBNYWtlZmlsZS51Ywo+ICsjCj4gKyMgIEF1dGhvcnM6IEZlbGlw
ZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiArIwo+ICsjCj4gKyMgIENvcHlyaWdo
dCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCj4gKyMKPiArIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwo+ICsjICBhcmUg
bWV0Ogo+ICsjCj4gKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiArIyAgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
PiArIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQo+ICsjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ICsjICAzLiBOZWl0aGVy
IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCj4g
KyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCj4gKyMgICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4gKyMKPiArIyAgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMi
Cj4gKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPiArIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPiArIyAgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENP
TlRSSUJVVE9SUyBCRQo+ICsjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCj4gKyMgIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCj4gKyMgIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwo+ICsjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgo+ICsjICBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQo+
ICsjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
PiArIwo+ICsjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJ
TiBBTlkgV0FZLgo+ICsjCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIExpYnJh
cnkgcmVnaXN0cmF0aW9uCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKyQoZXZhbCAkKGNh
bGwgYWRkbGliX3MsbGliaHR0cF9wYXJzZXIsJChDT05GSUdfTElCSFRUUF9QQVJTRVIpKSkKPiAr
Cj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKyMgU291cmNlcwo+ICsjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwoKQSBtaW5vciB0aGluZy4gSWYgeW91IHdvdWxkIGRvIHRoZSB2ZXJzaW9uIHdp
dGhvdXQgcHJlZml4aW5nICJ2IgpMSUJIVFRQX1BBUlNFUl9WRVJTSU9OPTIuOC4xCnlvdSBjYW4g
YXZvaWQgbmVlZGluZyB0aGUgdmVyc2lvbiBudW1iZXIgYWdhaW4gaW4gX1NVQkRJUjoKCkxJQkhU
VFBfUEFSU0VSX1VSTD1odHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL2h0dHAtcGFyc2VyL2FyY2hp
dmUvdiQoTElCSFRUUF9QQVJTRVJfVkVSU0lPTikuemlwCkxJQkhUVFBfUEFSU0VSX1NVQkRJUj1o
dHRwLXBhcnNlci0kKExJQkhUVFBfUEFSU0VSX1ZFUlNJT04pCgo+ICtMSUJIVFRQX1BBUlNFUl9W
RVJTSU9OPXYyLjguMQo+ICtMSUJIVFRQX1BBUlNFUl9VUkw9aHR0cHM6Ly9naXRodWIuY29tL25v
ZGVqcy9odHRwLXBhcnNlci9hcmNoaXZlLyQoTElCSFRUUF9QQVJTRVJfVkVSU0lPTikuemlwCj4g
K0xJQkhUVFBfUEFSU0VSX1NVQkRJUj1odHRwLXBhcnNlci0yLjguMQo+ICskKGV2YWwgJChjYWxs
IGZldGNoLGxpYmh0dHBfcGFyc2VyLCQoTElCSFRUUF9QQVJTRVJfVVJMKSwkKExJQkhUVFBfUEFS
U0VSX1ZFUlNJT04pLnppcCkpCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIEhl
bHBlcnMKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArTElCSFRUUF9QQVJTRVJfRVhUUkFD
VEVEPSQoTElCSFRUUF9QQVJTRVJfT1JJR0lOKS8kKExJQkhUVFBfUEFSU0VSX1NVQkRJUikKPiAr
Cj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKyMgTGlicmFyeSBpbmNsdWRlcwo+ICsjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIwo+ICtDSU5DTFVERVMtJChDT05GSUdfTElCSFRUUF9QQVJTRVIp
ICs9IC1JJChMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQpCgpTaW5jZSB0aGlzIGlzIHN1Y2ggYSBz
aW1wbGUgbGlicmFyeSwgSSB3b3VsZCBwcmVmZXIgdG8gc2hvdyBjYXNlIHdpdGggaXQgCmhvdyB0
byBwcmVwYXJlIGFuIGluY2x1ZGUgZm9sZGVyIHRoYXQganVzdCBoYXZlIGEgbGluayB0byB0aGUg
YWN0dWFsIApoZWFkZXIgZmlsZXMgKGluc3RlYWQgb2YgdGhlIENJTkNMVURFIGxpbmUgdGhhdCB5
b3UgaGF2ZSk6CgokKGNhbGzCt21rX3N1Yl9idWlsZF9kaXIsbGliaHR0cF9wYXJzZXIvaW5jbHVk
ZSkKQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkhUVFBfUEFSU0VSKSArPSAtSSQoTElCSFRUUF9QQVJT
RVJfQlVJTEQpL2luY2x1ZGUKCi4uLnBsZWFzZSBhbHNvIHByb3ZpZGUgdGhlIGxpYnJhcnkgaGVh
ZGVycyB0byBDKysgc291cmNlcyBzaW5jZSB0aGUgCmxpYnJhcnkgc3VwcG9ydHMgaXQ6CgpDSU5D
TFVERVMtJChDT05GSUdfTElCSFRUUF9QQVJTRVIpICs9IC1JJChMSUJIVFRQX1BBUlNFUl9CVUlM
RCkvaW5jbHVkZQoKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKyMgU291cmNlcwo+
ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICtMSUJIVFRQX1BBUlNFUl9TUkNTLXkgKz0gJChM
SUJIVFRQX1BBUlNFUl9FWFRSQUNURUQpL2h0dHBfcGFyc2VyLmMKPiAKCi4uLnRoZW4gYWRkIGEg
cnVsZSBmb3IgbGlua2luZzoKCiQoTElCSFRUUF9QQVJTRVJfQlVJTEQpL2luY2x1ZGUvJS5oOsK3
JChMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQpLyUuaArCuyAgICAgICAkKGNhbGzCt2J1aWxkX2Nt
ZCxMTixsaWJodHRwX3BhcnNlciwkQCxcCsK7ICAgICAgIGxuwrctc2bCt8K7bG4gLXNmICQ8ICRA
KWx0O8K3JEApCgouLi5hbmQgcmVnaXN0ZXIgaXQgdG8gdGhlIHByZXBhcmUgdGFyZ2V0OgoKVUtf
UFJFUEFSRcK3Kz3CtyQoTElCVVVJRF9CVUlMRCkvaW5jbHVkZS9odHRwX3BhcnNlci5oCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 15:04:33 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 15:04:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAF1t-0007LU-P8; Tue, 17 Sep 2019 15:04:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d9s6=XM=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAF1s-0007L9-Pe
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 15:04:32 +0000
X-Inumbo-ID: 6fd654e4-d95c-11e9-9618-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6fd654e4-d95c-11e9-9618-12813bfff9fa;
 Tue, 17 Sep 2019 15:04:25 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8033FF202C;
 Tue, 17 Sep 2019 17:04:24 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id XoNXgt3eO6cl; Tue, 17 Sep 2019 17:04:24 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 51334F2011
 for <minios-devel@lists.xen.org>; Tue, 17 Sep 2019 17:04:22 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Sep
 2019 17:04:19 +0200
To: Santiago Pagani <santiago.pagani@neclab.eu>, <minios-devel@lists.xen.org>
References: <20190905131249.22865-1-santiago.pagani@neclab.eu>
 <20190905131249.22865-2-santiago.pagani@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <10721518-0a61-705d-e890-ccd1046f785b@neclab.eu>
Date: Tue, 17 Sep 2019 17:04:19 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190905131249.22865-2-santiago.pagani@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: Re: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 1/3] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

CgpPbiAwNS4wOS4xOSAxNToxMiwgU2FudGlhZ28gUGFnYW5pIHdyb3RlOgo+IFNpZ25lZC1vZmYt
Ynk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiBTaWduZWQtb2ZmLWJ5
OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Cj4gLS0tCj4gICBD
T0RJTkdfU1RZTEUubWQgfCAgNCArKysrCj4gICBDT05UUklCVVRJTkcubWQgfCAgNCArKysrCj4g
ICBDT1BZSU5HLm1kICAgICAgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysKPiAgIENvbmZpZy51ayAgICAgICB8ICA0ICsrKysKPiAgIE1BSU5UQUlORVJTLm1kICB8
IDExICsrKysrKysrKysrCj4gICBSRUFETUUubWQgICAgICAgfCAgNSArKysrKwo+ICAgZXhwb3J0
c3ltcy51ayAgIHwgIDEgKwo+ICAgNyBmaWxlcyBjaGFuZ2VkLCA2OCBpbnNlcnRpb25zKCspCj4g
ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2
NDQgQ09OVFJJQlVUSU5HLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAo+ICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5U
QUlORVJTLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCj4gICBjcmVhdGUgbW9k
ZSAxMDA2NDQgZXhwb3J0c3ltcy51awo+IAo+IGRpZmYgLS1naXQgYS9DT0RJTkdfU1RZTEUubWQg
Yi9DT0RJTkdfU1RZTEUubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu
LjU3MzAwNDEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvQ09ESU5HX1NUWUxFLm1kCj4gQEAgLTAs
MCArMSw0IEBACj4gK0NvZGluZyBTdHlsZQo+ICs9PT09PT09PT09PT0KPiArCj4gK1BsZWFzZSBy
ZWZlciB0byB0aGUgYENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCBy
ZXBvc2l0b3J5Lgo+IGRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcubWQgYi9DT05UUklCVVRJTkcu
bWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjVmNTVlY2EKPiAtLS0g
L2Rldi9udWxsCj4gKysrIGIvQ09OVFJJQlVUSU5HLm1kCj4gQEAgLTAsMCArMSw0IEBACj4gK0Nv
bnRyaWJ1dGluZyB0byBVbmlrcmFmdAo+ICs9PT09PT09PT09PT09PT09PT09PT09PQo+ICsKPiAr
UGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09OVFJJQlVUSU5HLm1kYCBmaWxlIGluIHRoZSBtYWluIFVu
aWtyYWZ0IHJlcG9zaXRvcnkuCj4gZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1k
Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kN2IzZjQxCj4gLS0tIC9k
ZXYvbnVsbAo+ICsrKyBiL0NPUFlJTkcubWQKPiBAQCAtMCwwICsxLDM5IEBACj4gK0xpY2Vuc2UK
PiArPT09PT09PQo+ICsKPiArVW5pa3JhZnQgaHR0cC1wYXJzZXIgd3JhcHBlcnMKPiArLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICtUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMgd3JhcHBl
ciBjb2RlIHRvIGJ1aWxkIGxpYnV1aWQgd2l0aCBVbmlrcmFmdC4KClJlcGxhY2UgbGlidXVpZCB3
aXRoIGh0dHBfcGFyc2VyCgo+ICtFYWNoIEMgY29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBz
aG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlCj4gK2NvcHlyaWdodCBvd25lciBhbmQgdW5kZXIgd2hp
Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhlIGNvZGUgaXMKPiArbGljZW5zZWQuIElmIHN1Y2gg
YSBsaWNlbmNlIG5vdGUgaXMgbWlzc2luZywgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQKCmxpY2Vu
c2UKCj4gK25vdGljZSB3aWxsIGFwcGx5Ogo+ICsKPiArCUNvcHlyaWdodCAoYykgMjAxOSwgTkVD
IEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKwo+
ICsJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Cj4gKwltb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArCWFyZSBtZXQ6Cj4gKwo+ICsJMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
PiArCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KPiArCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKwkgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKwkgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgo+ICsJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBu
b3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsJICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArCSAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4gKwo+ICsJVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMgSVMiCj4gKwlBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKwlJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQo+ICsJQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsJTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsJQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKPiAr
CVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwo+ICsJSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArCUNPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4g
KwlBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsJUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gKwo+
IGRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKPiBuZXcgZmlsZSBtb2RlIDEwMDY0
NAo+IGluZGV4IDAwMDAwMDAuLjExNzY5N2UKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvQ29uZmln
LnVrCj4gQEAgLTAsMCArMSw0IEBACj4gK2NvbmZpZyBMSUJIVFRQX1BBUlNFUgo+ICsJYm9vbCAi
aHR0cC1wYXJzZXIgLSBhIHBhcnNlciBmb3IgSFRUUCBtZXNzYWdlcyB3cml0dGVuIGluIEMiCgpJ
IHRoaW5rICJ3cml0dGVuIGluIEMiIGlzIG5vdCBuZWVkZWQgaW4gdGhlIHRpdGxlLgoKPiArCWRl
ZmF1bHQgeQo+ICsJc2VsZWN0IExJQk5FV0xJQkMKPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMu
bWQgYi9NQUlOVEFJTkVSUy5tZAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAw
MC4uY2VkY2I3NAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9NQUlOVEFJTkVSUy5tZAo+IEBAIC0w
LDAgKzEsMTEgQEAKPiArTWFpbnRhaW5lcnMgTGlzdAo+ICs9PT09PT09PT09PT09PT09Cj4gKwo+
ICtGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVy
IHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4KPiArdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4K
PiArCj4gKwlMSUJIVFRQX1BBUlNFUi1VTklLUkFGVAo+ICsJTToJRmVsaXBlIEh1aWNpIDxmZWxp
cGUuaHVpY2lAbmVjbGFiLmV1Pgo+ICsJTToJU2FudGlhZ28gUGFnYW5pIDxzYW50aWFnby5wYWdh
bmlAbmVjbGFiLmV1Pgo+ICsJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcKPiArCUY6ICoK
PiBkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCj4gbmV3IGZpbGUgbW9kZSAxMDA2
NDQKPiBpbmRleCAwMDAwMDAwLi4wZmNiNTNlCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL1JFQURN
RS5tZAo+IEBAIC0wLDAgKzEsNSBAQAo+ICtodHRwLXBhcnNlciBmb3IgVW5pa3JhZnQKPiArPT09
PT09PT09PT09PT09PT09PQo+ICsKPiArUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBh
cyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2AKPiArc3ViZGlyZWN0b3J5
IG9mIHRoZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuCj4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5
bXMudWsgYi9leHBvcnRzeW1zLnVrCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw
MDAwLi42MjFlOTRmCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2V4cG9ydHN5bXMudWsKPiBAQCAt
MCwwICsxIEBACj4gK25vbmUKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 17 15:04:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 17 Sep 2019 15:04:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAF27-0007Nf-RL; Tue, 17 Sep 2019 15:04:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d9s6=XM=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAF26-0007Na-L5
 for minios-devel@lists.xen.org; Tue, 17 Sep 2019 15:04:46 +0000
X-Inumbo-ID: 7b639146-d95c-11e9-b76c-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7b639146-d95c-11e9-b76c-bc764e2007e4;
 Tue, 17 Sep 2019 15:04:44 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 05B9D1056D8;
 Tue, 17 Sep 2019 17:04:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id jnB7vjSGRHv2; Tue, 17 Sep 2019 17:04:43 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id D40C61056CB
 for <minios-devel@lists.xen.org>; Tue, 17 Sep 2019 17:04:43 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 17 Sep
 2019 17:04:43 +0200
To: Santiago Pagani <santiago.pagani@neclab.eu>, <minios-devel@lists.xen.org>
References: <20190905131249.22865-1-santiago.pagani@neclab.eu>
 <20190905131249.22865-4-santiago.pagani@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <3184737e-aa9a-429a-7007-e3cee89ee815@neclab.eu>
Date: Tue, 17 Sep 2019 17:04:43 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190905131249.22865-4-santiago.pagani@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To titania.office.hd
 (192.168.24.89)
Subject: Re: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 3/3] Export
 symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoKT24g
MDUuMDkuMTkgMTU6MTIsIFNhbnRpYWdvIFBhZ2FuaSB3cm90ZToKPiBTaWduZWQtb2ZmLWJ5OiBG
ZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gU2lnbmVkLW9mZi1ieTogU2Fu
dGlhZ28gUGFnYW5pIDxzYW50aWFnby5wYWdhbmlAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgZXhwb3J0
c3ltcy51ayB8IDE1ICsrKysrKysrKysrKysrLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDE0IGluc2Vy
dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBi
L2V4cG9ydHN5bXMudWsKPiBpbmRleCA2MjFlOTRmLi45OTViMjU2IDEwMDY0NAo+IC0tLSBhL2V4
cG9ydHN5bXMudWsKPiArKysgYi9leHBvcnRzeW1zLnVrCj4gQEAgLTEgKzEsMTQgQEAKPiAtbm9u
ZQo+ICtodHRwX2JvZHlfaXNfZmluYWwKPiAraHR0cF9lcnJub19kZXNjcmlwdGlvbgo+ICtodHRw
X2Vycm5vX25hbWUKPiAraHR0cF9tZXNzYWdlX25lZWRzX2VvZgo+ICtodHRwX21ldGhvZF9zdHIK
PiAraHR0cF9wYXJzZXJfZXhlY3V0ZQo+ICtodHRwX3BhcnNlcl9pbml0Cj4gK2h0dHBfcGFyc2Vy
X3BhcnNlX3VybAo+ICtodHRwX3BhcnNlcl9wYXVzZQo+ICtodHRwX3BhcnNlcl9zZXR0aW5nc19p
bml0Cj4gK2h0dHBfcGFyc2VyX3VybF9pbml0Cj4gK2h0dHBfcGFyc2VyX3ZlcnNpb24KPiAraHR0
cF9zaG91bGRfa2VlcF9hbGl2ZQo+ICtodHRwX3N0cmVycm9yX3RhYgo+IAoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 03:04:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 03:04:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAQGk-0004Xp-Hu; Wed, 18 Sep 2019 03:04:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Mndj=XN=gmail.com=jiakernel2@srs-us1.protection.inumbo.net>)
 id 1iAQGj-0004Wr-8b
 for minios-devel@lists.xenproject.org; Wed, 18 Sep 2019 03:04:37 +0000
X-Inumbo-ID: 0aa2bfb2-d9c1-11e9-b299-bc764e2007e4
Received: from mail-pl1-x62e.google.com (unknown [2607:f8b0:4864:20::62e])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 0aa2bfb2-d9c1-11e9-b299-bc764e2007e4;
 Wed, 18 Sep 2019 03:04:34 +0000 (UTC)
Received: by mail-pl1-x62e.google.com with SMTP id d3so2436787plr.1
 for <minios-devel@lists.xenproject.org>; Tue, 17 Sep 2019 20:04:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-transfer-encoding;
 bh=gSKE74tkRNLp95c/2xTP2BThVnfiRflyF3JoC4YeUlA=;
 b=I39v6mtZK3zkzEndOFOWVp+onzdiBshhqm4t4u/GkTeCRUCp1QYOjVUOE0leY8cfew
 Npj0QG37b6JYnPXzK3OfByBrqo2/eZeMtBou6jeKVoAmiBEAxDe0R1IwaXEePdwa/9OB
 p/nxZhLctw8RWR2DtDji33vR29GnSOBPgKLVJBemhsXQVSmh4Vb2faFMrbW/3B5PNR91
 owDCFG64SVVO2avNrJ84xiBGW9FHtXrzB/WAfUI7t8r5OTFnddBEpaoG+UPilwhOcaii
 wz8906T3dtO+8kBLeVzqNAhF4N1lR4h29Bj6lSRg1r0ESW/lmfB0NxWxf455Ruv9faPR
 53oQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-transfer-encoding;
 bh=gSKE74tkRNLp95c/2xTP2BThVnfiRflyF3JoC4YeUlA=;
 b=GCs7NmfFtbdqj6Kx8AFu7yjsESpWGnT+QgfqbIwKEHLSeAoov7/zsVKDrbtnnDmt0K
 JyWBwIw0DsrzZOuuD0qw4lrbzxgtua/Y4Q/fRjRddPIFyS5N1STP2XjY9c3H9wHXHHK4
 O2jb1xtyjQgzWTChXl0GsqRWIsrnFulq7Uhra5cyKVh6rVSxvOgesvqp3ouFVQUEaren
 J5CKs0YIQlBKE3pu/n42+1vHNuwhboT9FBtjIPpfEbogD7EHbKtHUOKxfS97AqA2RBuK
 LpNk3F7F508bWDVvfjJkiWlUIltIjETgYf06xh60BNFTRrIvZ0/GcwiM78ZSvTKUUnKY
 uFMQ==
X-Gm-Message-State: APjAAAV0bXJGghEtKoKCHrxO7027hHLv0hK7UB0pKIO2pJDeZ+Ka0oOl
 g1nlMNeaMiVk+Mw7PqJX7+gZSv9L
X-Google-Smtp-Source: APXvYqwV164C8N1kGEYmcyMQNTVvRZ8jYEARDHGAVl3+PgTXNuSZmSW68+n1ONl093wjLncFeIKWSg==
X-Received: by 2002:a17:902:36a:: with SMTP id 97mr1948535pld.61.1568775873244; 
 Tue, 17 Sep 2019 20:04:33 -0700 (PDT)
Received: from [0.0.0.0] (104.129.187.94.16clouds.com. [104.129.187.94])
 by smtp.gmail.com with ESMTPSA id f6sm3452858pgk.65.2019.09.17.20.04.30
 for <minios-devel@lists.xenproject.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Tue, 17 Sep 2019 20:04:32 -0700 (PDT)
To: minios-devel@lists.xenproject.org
References: <20190828230327.9157-1-felipe.huici@neclab.eu>
 <20190828230327.9157-3-felipe.huici@neclab.eu>
From: Jia He <jiakernel2@gmail.com>
Message-ID: <3f6d9ef4-026b-c1c5-ccd7-ef381283b537@gmail.com>
Date: Wed, 18 Sep 2019 11:04:26 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190828230327.9157-3-felipe.huici@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDIwMTkvOC8yOSA3OjAzLCBGZWxpcGUgSHVpY2kgd3JvdGU6Cj4gVGhpcyBpcyBhIHBvcnQg
b2Ygd2FtciB0byBVbmlrcmFmdCBhcyBhbiBleHRlcm5hbCBsaWJyYXJ5LiBJdCByZXF1aXJlcwo+
IGxpYmMsIGEgbmV0d29yayBzdGFjayBhbmQgcHRocmVhZCBzdXBwb3J0LCBzbyBpbiB5b3VyIGFw
cGxpY2F0aW9uCj4gTWFrZWZpbGUgdGhlIGxpYnJhcnkgZGVwZW5kZW5jeSBsaXN0IHNob3VsZCBy
ZWFkOgo+Cj4gICAgTElCUyA6PSAuLi46JChVS19MSUJTKS9wdGhyZWFkLWVtYmVkZGVkOiQoVUtf
TElCUykvbHdpcDoKPiAgICAgICAgICAgICAgICAkKFVLX0xJQlMpL25ld2xpYjokKFVLX0xJQlMp
L3dhbXI6Li4uCj4KPiBQbGVhc2UgcmVmZXIgdG8gUkVBRE1FLm1kIGZvciBpbmZvcm1hdGlvbiBv
biBydW5uaW5nIGl0Lgo+Cj4gU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVp
Y2lAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAxMDUgKysrKysrKysrCj4gICBpbmNsdWRlL2JoX3BsYXRmb3Jt
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyOSArKysrKysrKysrKwo+ICAgbWFp
bi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAyMzYgKysr
KysrKysrKysrKysrKysrKysrCj4gICAuLi5tLWxvZy1maXgtcHRocmVhZC1lbWJlZGRlZC1wdGhy
ZWFkLXQtdHlwZS5wYXRjaCB8ICAxNSArKwo+ICAgLi4uaHJlYWQtZml4LXB0aHJlYWQtZW1iZWRk
ZWQtcHRocmVhZC10LXR5cGUucGF0Y2ggfCAgMTYgKysKPiAgIC4uLjMtYmgtdGhyZWFkLXVzZS13
YXNtLWxvZy1pbnN0ZWFkb2YtYmgtbG9nLnBhdGNoIHwgIDExICsKPiAgIDYgZmlsZXMgY2hhbmdl
ZCwgNTEyIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awo+
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvYmhfcGxhdGZvcm0uaAo+ICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IG1haW4uYwo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMS13YXNt
LWxvZy1maXgtcHRocmVhZC1lbWJlZGRlZC1wdGhyZWFkLXQtdHlwZS5wYXRjaAo+ICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMi1iaC10aHJlYWQtZml4LXB0aHJlYWQtZW1iZWRkZWQt
cHRocmVhZC10LXR5cGUucGF0Y2gKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDMt
YmgtdGhyZWFkLXVzZS13YXNtLWxvZy1pbnN0ZWFkb2YtYmgtbG9nLnBhdGNoCj4KPiBkaWZmIC0t
Z2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4g
aW5kZXggMDAwMDAwMC4uYTlmOWE1Mwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9NYWtlZmlsZS51
awo+IEBAIC0wLDAgKzEsMTA1IEBACj4gKyMgIHdhbXIgTWFrZWZpbGUudWsKPiArIwo+ICsjICBB
dXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Cj4gKyMKPiArIwo+
ICsjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9u
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsjCj4gKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAo+ICsjICBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKPiArIyAgYXJlIG1ldDoKPiArIwo+ICsjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyMg
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Cj4gKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArIyAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiAr
IyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5h
bWVzIG9mIGl0cwo+ICsjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsjICAgICB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsjCj4gKyMgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgo+ICsjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKyMgIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCj4gKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiArIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsjICBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgo+ICsjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiArIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArIyAgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKPiArIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKPiArIyAgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCj4gKyMKPiArIyAgVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQg
T1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KPiArIwo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKPiArIyBMaWJyYXJ5IHJlZ2lzdHJhdGlvbgo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+
ICskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYndhbXIsJChDT05GSUdfTElCV0FNUikpKQo+ICsK
PiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBTb3VyY2VzCj4gKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCj4gK0xJQldBTVJfVkVSU0lPTj1tYXN0ZXIKPiArTElCV0FNUl9VUkw9aHR0cHM6
Ly9naXRodWIuY29tL2ludGVsL3dhc20tbWljcm8tcnVudGltZS9hcmNoaXZlLyQoTElCV0FNUl9W
RVJTSU9OKS56aXAKPiArTElCV0FNUl9ESVI9d2FzbS1taWNyby1ydW50aW1lLW1hc3Rlcgo+ICtM
SUJXQU1SX1BBVENIRElSPSQoTElCV0FNUl9CQVNFKS9wYXRjaGVzCj4gKyQoZXZhbCAkKGNhbGwg
ZmV0Y2gsbGlid2FtciwkKExJQldBTVJfVVJMKSwkKExJQldBTVJfRElSKS56aXApKQo+ICskKGV2
YWwgJChjYWxsIHBhdGNoLGxpYndhbXIsJChMSUJXQU1SX1BBVENIRElSKSwkKExJQldBTVJfRElS
KSkpCj4gKwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIEhlbHBlcnMKPiArIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKPiArTElCV0FNUl9TUkM9JChMSUJXQU1SX09SSUdJTikvJChMSUJX
QU1SX0RJUikKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gKyMgTGlicmFyeSBpbmNs
dWRlcwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICtDSU5DTFVERVMtJChDT05GSUdfTElC
V0FNUikgKz0gLUkkKExJQldBTVJfQkFTRSkvaW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAg
ICBcCj4gKyAgIAkJCSAgICAgICAtSSQoTElCV0FNUl9TUkMpL2NvcmUvaXdhc20vcnVudGltZS92
bWNvcmUtd2FzbSAgIFwKPiArICAgCQkJICAgICAgIC1JJChMSUJXQU1SX1NSQykvY29yZS9pd2Fz
bS9ydW50aW1lL3BsYXRmb3JtL2luY2x1ZGUgXAo+ICsgICAJCQkgICAgICAgLUkkKExJQldBTVJf
U1JDKS9jb3JlL2l3YXNtL3J1bnRpbWUvaW5jbHVkZSAgICAgICBcCj4gKwkJCSAgICAgICAtSSQo
TElCV0FNUl9TUkMpL2NvcmUvc2hhcmVkLWxpYi9wbGF0Zm9ybS9pbmNsdWRlIFwKPiArCQkJICAg
ICAgIC1JJChMSUJXQU1SX1NSQykvY29yZS9zaGFyZWQtbGliL2luY2x1ZGUgICAgICAgICAgXAo+
ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBMaWJyYXJ5IGZsYWdzCj4gKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQldBTVJfU1VQUFJFU1NfRkxBR1MgKz0gLVduby1pbXBs
aWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiBcCj4gKwkJICAgICAgICAgIC1Xbm8tc2lnbi1jb21w
YXJlICAgICAgICAgICAgICAgICAgXAo+ICsJCQkgIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCAg
ICAgICAgICAgXAo+ICsJCQkgIC1Xbm8tdW51c2VkLXBhcmFtZXRlciAgICAgICAgICAgICAgXAo+
ICsJCQkgIC1Xbm8taW50LWNvbnZlcnNpb24gICAgICAgICAgICAgICAgXAo+ICsJCQkgIC1Xbm8t
dW51c2VkLWxhYmVsICAgICAgICAgICAgICAgICAgXAo+ICsJCQkgIC1Xbm8tdW51c2VkLWJ1dC1z
ZXQtdmFyaWFibGUKPiArCj4gK0xJQldBTVJfQ0ZMQUdTLXkgKz0gLUROVkFMR1JJTkQgJChMSUJX
QU1SX1NVUFBSRVNTX0ZMQUdTKQo+ICtMSUJXQU1SX0NYWEZMQUdTLXkgKz0gLUROVkFMR1JJTkQg
JChMSUJXQU1SX1NVUFBSRVNTX0ZMQUdTKQo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
PiArIyBHbHVlIGNvZGUKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArTElCV0FNUl9TUkNT
LXkgKz0gJChMSUJXQU1SX0JBU0UpL21haW4uYwo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKPiArIyBTb3VyY2VzCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQldBTVJfU1JD
Uy15ICs9ICQoTElCV0FNUl9TUkMpL2NvcmUvaXdhc20vcnVudGltZS92bWNvcmUtd2FzbS9pbnZv
a2VOYXRpdmVfZ2VuZXJhbC5jCj4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9TUkMpL2Nv
cmUvaXdhc20vcnVudGltZS92bWNvcmUtd2FzbS93YXNtX2FwcGxpY2F0aW9uLmMKPiArTElCV0FN
Ul9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9pd2FzbS9ydW50aW1lL3ZtY29yZS13YXNt
L3dhc21faW50ZXJwLmMKPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9p
d2FzbS9ydW50aW1lL3ZtY29yZS13YXNtL3dhc21fbG9hZGVyLmMKPiArTElCV0FNUl9TUkNTLXkg
Kz0gJChMSUJXQU1SX1NSQykvY29yZS9pd2FzbS9ydW50aW1lL3ZtY29yZS13YXNtL3dhc21fcnVu
dGltZS5jCj4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9TUkMpL2NvcmUvc2hhcmVkLWxp
Yi9tZW0tYWxsb2MvYmhfbWVtb3J5LmMKPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NS
QykvY29yZS9pd2FzbS9ydW50aW1lL3V0aWxzL3dhc21fbG9nLmMKPiArTElCV0FNUl9TUkNTLXkg
Kz0gJChMSUJXQU1SX1NSQykvY29yZS9zaGFyZWQtbGliL3BsYXRmb3JtL2xpbnV4L2JoX3RocmVh
ZC5jCj4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9TUkMpL2NvcmUvaXdhc20vcnVudGlt
ZS91dGlscy93YXNtX2hhc2htYXAuYwo+ICtMSUJXQU1SX1NSQ1MteSArPSAkKExJQldBTVJfU1JD
KS9jb3JlL2l3YXNtL2xpYi9uYXRpdmUvbGliYy9saWJjX3dyYXBwZXIuYwo+ICtMSUJXQU1SX1NS
Q1MteSArPSAkKExJQldBTVJfU1JDKS9jb3JlL2l3YXNtL3J1bnRpbWUvdXRpbHMvd2FzbV9kbGZj
bi5jCj4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9TUkMpL2NvcmUvc2hhcmVkLWxpYi9t
ZW0tYWxsb2MvbWVtX2FsbG9jLmMKPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykv
Y29yZS9zaGFyZWQtbGliL3BsYXRmb3JtL2xpbnV4L2JoX3BsYXRmb3JtLmMKPiArTElCV0FNUl9T
UkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9pd2FzbS9ydW50aW1lL3BsYXRmb3JtL3plcGh5
ci93YXNtX25hdGl2ZS5jCj4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9TUkMpL2NvcmUv
aXdhc20vbGliL25hdGl2ZS9iYXNlL2Jhc2VfbGliX2V4cG9ydC5jCj4gK0xJQldBTVJfU1JDUy15
ICs9ICQoTElCV0FNUl9TUkMpL2NvcmUvaXdhc20vcHJvZHVjdHMvbGludXgvZXh0X2xpYl9leHBv
cnQuYwo+ICtMSUJXQU1SX1NSQ1MteSArPSAkKExJQldBTVJfU1JDKS9jb3JlL3NoYXJlZC1saWIv
bWVtLWFsbG9jL2Vtcy9lbXNfa2ZjLmMKPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NS
QykvY29yZS9zaGFyZWQtbGliL21lbS1hbGxvYy9lbXMvZW1zX2FsbG9jLmMKPiBkaWZmIC0tZ2l0
IGEvaW5jbHVkZS9iaF9wbGF0Zm9ybS5oIGIvaW5jbHVkZS9iaF9wbGF0Zm9ybS5oCj4gbmV3IGZp
bGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4wMGMyNWI0Cj4gLS0tIC9kZXYvbnVsbAo+
ICsrKyBiL2luY2x1ZGUvYmhfcGxhdGZvcm0uaAoKSSBzYXcgbG90cyBvZiBlcnJvcnMgYW5kIHdh
cm5pbmdzIGJ5IHN1cHBvcnQvc2NyaXB0cy9jaGVja19wYXRjaC5wbAoKaW4gdGhpcyBmaWxlCgoK
PiBAQCAtMCwwICsxLDEyOSBAQAo+ICsvKgo+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSW50ZWwg
Q29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsgKiBMaWNlbnNlZCB1
bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKPiAr
ICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo
ZSBMaWNlbnNlLgo+ICsgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK
PiArICoKPiArICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y
LjAKPiArICoKPiArICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVl
ZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQo+ICsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj
ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAo+ICsgKiBXSVRIT1VUIFdB
UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1w
bGllZC4KPiArICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAo+ICsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z
ZS4KPiArICovCj4gKwo+ICsjaWZuZGVmIF9CSF9QTEFURk9STV9ICj4gKyNkZWZpbmUgX0JIX1BM
QVRGT1JNX0gKPiArCj4gKyNpbmNsdWRlICJiaF9jb25maWcuaCIKPiArI2luY2x1ZGUgImJoX3R5
cGVzLmgiCj4gKyNpbmNsdWRlICJiaF9tZW1vcnkuaCIKPiArI2luY2x1ZGUgPGludHR5cGVzLmg+
Cj4gKyNpbmNsdWRlIDxzdGRib29sLmg+Cj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4KPiArI2luY2x1
ZGUgPHRpbWUuaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8c3RkaW8uaD4K
PiArI2luY2x1ZGUgPGFzc2VydC5oPgpyZWR1ZGFudCBhc3NlcnQuaCwKPiArCj4gKyNpZm5kZWYg
X19jcGx1c3BsdXMKPiAraW50IHNucHJpbnRmKGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBj
b25zdCBjaGFyICpmb3JtYXQsIC4uLik7Cj4gKyNlbmRpZgo+ICsKPiArI2lmZGVmIF9fY3BsdXNw
bHVzCj4gK2V4dGVybiAiQyIgewo+ICsjZW5kaWYKPiArCj4gK3R5cGVkZWYgdWludDY0X3QgdWlu
dDY0Owo+ICt0eXBlZGVmIGludDY0X3QgaW50NjQ7Cj4gKwo+ICtleHRlcm4gdm9pZCBERUJVR01F
KHZvaWQpOwo+ICsKPiArI2RlZmluZSBESUUgZG97YmhfZGVidWcoIkRpZSBoZXJlXG5cblxuXG5c
blxuXG5cblxuXG5cblxuXG5cbiIpOyBERUJVR01FKHZvaWQpOyB3aGlsZSgxKTt9d2hpbGUoMCkK
PiArCj4gKyNkZWZpbmUgQkhfUExBVEZPUk0gIkxpbnV4Igo+ICsKPiArLyogTkVFRCBxc29ydCAq
Lwo+ICsKPiArI2luY2x1ZGUgPHN0ZGFyZy5oPgo+ICsjaW5jbHVkZSA8Y3R5cGUuaD4KPiArI2lu
Y2x1ZGUgPHB0aHJlYWQuaD4KPiArI2luY2x1ZGUgPGxpbWl0cy5oPgo+ICsjaW5jbHVkZSA8c2Vt
YXBob3JlLmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8c3lzL3NvY2tldC5o
Pgo+ICsjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgo+ICsKPiArI2RlZmluZSBfU1RBQ0tfU0laRV9B
REpVU1RNRU5UICgzMiAqIDEwMjQpCj4gKwo+ICsvKiBTdGFjayBzaXplIG9mIGFwcGxldCBtYW5h
Z2VyIHRocmVhZC4gICovCj4gKyNkZWZpbmUgQkhfQVBQTEVUX01BTkFHRVJfVEhSRUFEX1NUQUNL
X1NJWkUgKDggKiAxMDI0ICsgX1NUQUNLX1NJWkVfQURKVVNUTUVOVCkKPiArCj4gKy8qIFN0YWNr
IHNpemUgb2YgSE1DIHRocmVhZC4gICovCj4gKyNkZWZpbmUgQkhfSE1DX1RIUkVBRF9TVEFDS19T
SVpFICAgICAgICAgICAgKDQgKiAxMDI0ICsgX1NUQUNLX1NJWkVfQURKVVNUTUVOVCkKPiArCj4g
Ky8qIFN0YWNrIHNpemUgb2Ygd2F0Y2hkb2cgdGhyZWFkLiAgKi8KPiArI2RlZmluZSBCSF9XQVRD
SERPR19USFJFQURfU0laRSAgICAgICAgICAgICAoNCAqIDEwMjQgKyBfU1RBQ0tfU0laRV9BREpV
U1RNRU5UKQo+ICsKPiArLyogU3RhY2sgc2l6ZSBvZiBhcHBsZXQgdGhyZWFkcydzIG5hdGl2ZSBw
YXJ0LiAgKi8KPiArI2RlZmluZSBCSF9BUFBMRVRfUFJFU0VSVkVEX1NUQUNLX1NJWkUgICAgICAo
OCAqIDEwMjQgKyBfU1RBQ0tfU0laRV9BREpVU1RNRU5UKQo+ICsKPiArLyogU3RhY2sgc2l6ZSBv
ZiByZW1vdGUgaW52b2tlIGxpc3RlbiB0aHJlYWQuICAqLwo+ICsjZGVmaW5lIEJIX1JFTU9URV9J
TlZPS0VfVEhSRUFEX1NUQUNLX1NJWkUgICg0ICogMTAyNCArIF9TVEFDS19TSVpFX0FESlVTVE1F
TlQpCj4gKwo+ICsvKiBTdGFjayBzaXplIG9mIHJlbW90ZSBwb3N0IGxpc3RlbiB0aHJlYWQuICAq
Lwo+ICsjZGVmaW5lIEJIX1JFTU9URV9QT1NUX1RIUkVBRF9TVEFDS19TSVpFICAgICg0ICogMTAy
NCArIF9TVEFDS19TSVpFX0FESlVTVE1FTlQpCj4gKwo+ICsvKiBNYXhpbWFsIHJlY3Vyc2lvbiBk
ZXB0aCBvZiBpbnRlcnByZXRlci4gICovCj4gKyNkZWZpbmUgQkhfTUFYX0lOVEVSUF9SRUNVUlNJ
T05fREVQVEggICAgICAgOAo+ICsKPiArLyogRGVmYXVsdCB0aHJlYWQgcHJpb3JpdHkgKi8KPiAr
I2RlZmluZSBCSF9USFJFQURfREVGQVVMVF9QUklPUklUWSAwCj4gKwo+ICsjZGVmaW5lIEJIX1JP
VVRJTkVfTU9ESUZJRVIKPiArI2RlZmluZSBCSFRfVElNRURPVVQgRVRJTUVET1VUCj4gKwo+ICsj
ZGVmaW5lIElOVkFMSURfVEhSRUFEX0lEIDB4RkZmZkZGZmYKPiArI2RlZmluZSBJTlZBTElEX1NF
TV9JRCBTRU1fRkFJTEVECj4gKwo+ICt0eXBlZGVmIHB0aHJlYWRfdCBrb3JwX3RpZDsKPiArdHlw
ZWRlZiBwdGhyZWFkX211dGV4X3Qga29ycF9tdXRleDsKPiArdHlwZWRlZiBzZW1fdCBrb3JwX3Nl
bTsKPiArdHlwZWRlZiBwdGhyZWFkX2NvbmRfdCBrb3JwX2NvbmQ7Cj4gK3R5cGVkZWYgcHRocmVh
ZF90IGtvcnBfdGhyZWFkOwo+ICt0eXBlZGVmIHZvaWQqICgqdGhyZWFkX3N0YXJ0X3JvdXRpbmVf
dCkodm9pZCopOwo+ICsKPiArI2RlZmluZSB3YV9tYWxsb2MgYmhfbWFsbG9jCj4gKyNkZWZpbmUg
d2FfZnJlZSBiaF9mcmVlCj4gKyNkZWZpbmUgd2Ffc3RyZHVwIGJoX3N0cmR1cAo+ICsKPiArZG91
YmxlIGZtb2QoZG91YmxlIHgsIGRvdWJsZSB5KTsKPiArZmxvYXQgZm1vZGYoZmxvYXQgeCwgZmxv
YXQgeSk7Cj4gKwo+ICsvKiBEZWZpbml0aW9ucyBmb3IgYXBwbGV0IGRlYnVnZ2luZyAqLwo+ICsj
ZGVmaW5lIEFQUExFVF9ERUJVR19MSVNURU5fUE9SVCA4MDAwCj4gKyNkZWZpbmUgQkhfU09DS0VU
X0lOVkFMSURfU09DSyAtMQo+ICsjZGVmaW5lIEJIX1dBSVRfRk9SRVZFUiAweEZGRkZGRkZGCj4g
K3R5cGVkZWYgaW50IGJoX3NvY2tldF90Owo+ICsKPiArI2lmbmRlZiBOVUxMCj4gKyMgIGRlZmlu
ZSBOVUxMICgodm9pZCopIDApCj4gKyNlbmRpZgo+ICsKPiArI2RlZmluZSBiaF9hc3NlcnQgYXNz
ZXJ0Cj4gKwo+ICtleHRlcm4gaW50IGJfbWVtY3B5X3Modm9pZCAqIHMxLCB1bnNpZ25lZCBpbnQg
czFtYXgsIGNvbnN0IHZvaWQgKiBzMiwKPiArICAgICAgICB1bnNpZ25lZCBpbnQgbik7Cj4gK2V4
dGVybiBpbnQgYl9zdHJjYXRfcyhjaGFyICogczEsIHNpemVfdCBzMW1heCwgY29uc3QgY2hhciAq
IHMyKTsKPiArZXh0ZXJuIGludCBiX3N0cmNweV9zKGNoYXIgKiBzMSwgc2l6ZV90IHMxbWF4LCBj
b25zdCBjaGFyICogczIpOwo+ICtleHRlcm4gaW50IGZvcGVuX3MoRklMRSAqKiBwRmlsZSwgY29u
c3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKm1vZGUpOwo+ICsKPiArZXh0ZXJuIGNoYXIg
KmJoX3N0cmR1cChjb25zdCBjaGFyICpzKTsKPiArCj4gKyNpZmRlZiBfX2NwbHVzcGx1cwo+ICt9
Cj4gKyNlbmRpZgo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL21haW4uYyBiL21haW4uYwoK
U2VlbXMgdGhpcyBtYWluLmMgaXMgYWxzbyBmcm9tIG9wZW5zb3VyY2UKCmh0dHBzOi8vcmF3Lmdp
dGh1YnVzZXJjb250ZW50LmNvbS9pbnRlbC93YXNtLW1pY3JvLXJ1bnRpbWUvbWFzdGVyL2NvcmUv
aXdhc20vcHJvZHVjdHMvbGludXgvbWFpbi5jCgpIb3cgYWJvdXQgYWxzbyB1c2UgdGhlIHdheSBv
cmlnaW5hbCArcGF0Y2g/CgoKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu
LjkxZjIxNDgKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvbWFpbi5jCj4gQEAgLTAsMCArMSwyMzYg
QEAKPiArLyoKPiArICogQ29weXJpZ2h0IChDKSAyMDE5IEludGVsIENvcnBvcmF0aW9uLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBM
aWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Cj4gKyAqIHlvdSBtYXkgbm90IHVz
ZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KPiArICog
WW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cj4gKyAqCj4gKyAqICAgICAg
aHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCj4gKyAqCj4gKyAqIFVu
bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg
c29mdHdhcmUKPiArICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0
ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKPiArICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ
VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCj4gKyAqIFNlZSB0
aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u
cyBhbmQKPiArICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCj4gKyAqLwo+ICsKPiAr
I2lmbmRlZiBfR05VX1NPVVJDRQo+ICsjZGVmaW5lIF9HTlVfU09VUkNFCj4gKyNlbmRpZgo+ICsj
aW5jbHVkZSA8c3RkbGliLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgImJo
X3BsYXRmb3JtLmgiCj4gKyNpbmNsdWRlICJ3YXNtX2Fzc2VydC5oIgo+ICsjaW5jbHVkZSAid2Fz
bV9sb2cuaCIKPiArI2luY2x1ZGUgIndhc21fcGxhdGZvcm1fbG9nLmgiCj4gKyNpbmNsdWRlICJ3
YXNtX3RocmVhZC5oIgo+ICsjaW5jbHVkZSAid2FzbV9leHBvcnQuaCIKPiArI2luY2x1ZGUgIndh
c21fbWVtb3J5LmgiCj4gKyNpbmNsdWRlICJiaF9tZW1vcnkuaCIKPiArCj4gKyNpbmNsdWRlIDx1
ay9wbGF0L21lbW9yeS5oPgo+ICsKPiArc3RhdGljIGludCBhcHBfYXJnYzsKPiArc3RhdGljIGNo
YXIgKiphcHBfYXJndjsKPiArCj4gK3N0YXRpYyBpbnQgcHJpbnRfaGVscCgpCj4gK3sKPiArICAg
IHdhc21fcHJpbnRmKCJVc2FnZTogaXdhc20gWy1vcHRpb25zXSB3YXNtX2ZpbGUgW2FyZ3MuLi5d
XG4iKTsKPiArICAgIHdhc21fcHJpbnRmKCJvcHRpb25zOlxuIik7Cj4gKyAgICB3YXNtX3ByaW50
ZigiICAtZnwtLWZ1bmN0aW9uIG5hbWUgICAgIFNwZWNpZnkgZnVuY3Rpb24gbmFtZSB0byBydW4g
aW4gbW9kdWxlXG4iCj4gKyAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAg
IHJhdGhlciB0aGFuIG1haW5cbiIpOwo+ICsjaWYgV0FTTV9FTkFCTEVfTE9HICE9IDAKPiArICAg
IHdhc21fcHJpbnRmKCIgIC12PVggICAgICAgICAgICAgICAgICAgU2V0IGxvZyB2ZXJib3NlIGxl
dmVsICgwIHRvIDIsIGRlZmF1bHQgaXMgMSksXG4iCj4gKyAgICAgICAgICAgICAgICAiICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhcmdlciBsZXZlbCB3aXRoIG1vcmUgbG9nXG4iKTsKPiArI2Vu
ZGlmCj4gKyAgICB3YXNtX3ByaW50ZigiICAtLXJlcGwgICAgICAgICAgICAgICAgIFN0YXJ0IGEg
dmVyeSBzaW1wbGUgUkVQTCAocmVhZC1ldmFsLXByaW50LWxvb3ApIG1vZGVcbiIKPiArICAgICAg
ICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgdGhhdCBydW5zIGNvbW1hbmRzIGlu
IHRoZSBmb3JtIG9mIGBGVU5DIEFSRy4uLmBcbiIpOwo+ICsgICAgcmV0dXJuIDE7Cj4gK30KPiAr
Cj4gK3N0YXRpYyB2b2lkKgo+ICthcHBfaW5zdGFuY2VfbWFpbih3YXNtX21vZHVsZV9pbnN0X3Qg
bW9kdWxlX2luc3QpCj4gK3sKPiArICAgIGNvbnN0IGNoYXIgKmV4Y2VwdGlvbjsKPiArCj4gKyAg
ICB3YXNtX2FwcGxpY2F0aW9uX2V4ZWN1dGVfbWFpbihtb2R1bGVfaW5zdCwgYXBwX2FyZ2MsIGFw
cF9hcmd2KTsKPiArICAgIGlmICgoZXhjZXB0aW9uID0gd2FzbV9ydW50aW1lX2dldF9leGNlcHRp
b24obW9kdWxlX2luc3QpKSkKPiArICAgICAgICB3YXNtX3ByaW50ZigiJXNcbiIsIGV4Y2VwdGlv
bik7Cj4gKyAgICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQqCj4gK2FwcF9p
bnN0YW5jZV9mdW5jKHdhc21fbW9kdWxlX2luc3RfdCBtb2R1bGVfaW5zdCwgY29uc3QgY2hhciAq
ZnVuY19uYW1lKQo+ICt7Cj4gKyAgICBjb25zdCBjaGFyICpleGNlcHRpb247Cj4gKwo+ICsgICAg
d2FzbV9hcHBsaWNhdGlvbl9leGVjdXRlX2Z1bmMobW9kdWxlX2luc3QsIGZ1bmNfbmFtZSwgYXBw
X2FyZ2MgLSAxLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwX2FyZ3Yg
KyAxKTsKPiArICAgIGlmICgoZXhjZXB0aW9uID0gd2FzbV9ydW50aW1lX2dldF9leGNlcHRpb24o
bW9kdWxlX2luc3QpKSkKPiArICAgICAgICB3YXNtX3ByaW50ZigiJXNcbiIsIGV4Y2VwdGlvbik7
Cj4gKyAgICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFNwbGl0IGEgc3BhY2Ug
c2VwYXJhdGVkIHN0cmluZ3MgaW50byBhbiBhcnJheSBvZiBzdHJpbmdzCj4gKyAqIFJldHVybnMg
TlVMTCBvbiBmYWlsdXJlCj4gKyAqIE1lbW9yeSBtdXN0IGJlIGZyZWVkIGJ5IGNhbGxlcgo+ICsg
KiBCYXNlZCBvbjogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTExOTg2MzAvNDcxNzk1Cj4g
KyAqLwo+ICtzdGF0aWMgY2hhciAqKgo+ICtzcGxpdF9zdHJpbmcoY2hhciAqc3RyLCBpbnQgKmNv
dW50KQo+ICt7Cj4gKyAgICBjaGFyICoqcmVzID0gTlVMTDsKPiArICAgIGNoYXIgKnA7Cj4gKyAg
ICBpbnQgaWR4ID0gMDsKPiArCj4gKyAgICAvKiBzcGxpdCBzdHJpbmcgYW5kIGFwcGVuZCB0b2tl
bnMgdG8gJ3JlcycgKi8KPiArICAgIGRvIHsKPiArICAgICAgICBwID0gc3RydG9rKHN0ciwgIiAi
KTsKPiArICAgICAgICBzdHIgPSBOVUxMOwo+ICsgICAgICAgIHJlcyA9IChjaGFyKiopIHJlYWxs
b2MocmVzLCBzaXplb2YoY2hhciopICogKGlkeCArIDEpKTsKPiArICAgICAgICBpZiAocmVzID09
IE5VTEwpIHsKPiArICAgICAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICAgICAgfQo+ICsgICAg
ICAgIHJlc1tpZHgrK10gPSBwOwo+ICsgICAgfSB3aGlsZSAocCk7Cj4gKwo+ICsgICAgaWYgKGNv
dW50KSB7Cj4gKyAgICAgICAgKmNvdW50ID0gaWR4IC0gMTsKPiArICAgIH0KPiArICAgIHJldHVy
biByZXM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkKgo+ICthcHBfaW5zdGFuY2VfcmVwbCh3YXNt
X21vZHVsZV9pbnN0X3QgbW9kdWxlX2luc3QpCj4gK3sKPiArICAgIGNoYXIgKmNtZCA9IE5VTEw7
Cj4gKyAgICBzaXplX3QgbGVuID0gMDsKPiArICAgIHNzaXplX3QgbjsKPiArCj4gKyAgICB3aGls
ZSAoKHdhc21fcHJpbnRmKCJ3ZWJhc3NlbWJseT4gIiksIG4gPSBnZXRsaW5lKCZjbWQsICZsZW4s
IHN0ZGluKSkgIT0gLTEpIHsKPiArICAgICAgICB3YXNtX2Fzc2VydChuID4gMCk7Cj4gKyAgICAg
ICAgaWYgKGNtZFtuIC0gMV0gPT0gJ1xuJykgewo+ICsgICAgICAgICAgICBpZiAobiA9PSAxKQo+
ICsgICAgICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgICAgIGVsc2UKPiArICAgICAg
ICAgICAgICAgIGNtZFtuIC0gMV0gPSAnXDAnOwo+ICsgICAgICAgIH0KPiArICAgICAgICBhcHBf
YXJndiA9IHNwbGl0X3N0cmluZyhjbWQsICZhcHBfYXJnYyk7Cj4gKyAgICAgICAgaWYgKGFwcF9h
cmd2ID09IE5VTEwpIHsKPiArICAgICAgICAgICAgTE9HX0VSUk9SKCJXYXNtIHByZXBhcmUgcGFy
YW0gZmFpbGVkOiBzcGxpdCBzdHJpbmcgZmFpbGVkLlxuIik7Cj4gKyAgICAgICAgICAgIGJyZWFr
Owo+ICsgICAgICAgIH0KPiArICAgICAgICBpZiAoYXBwX2FyZ2MgIT0gMCkgewo+ICsgICAgICAg
ICAgICB3YXNtX2FwcGxpY2F0aW9uX2V4ZWN1dGVfZnVuYyhtb2R1bGVfaW5zdCwgYXBwX2FyZ3Zb
MF0sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcF9hcmdj
IC0gMSwgYXBwX2FyZ3YgKyAxKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgZnJlZShhcHBfYXJn
dik7Cj4gKyAgICB9Cj4gKyAgICBmcmVlKGNtZCk7Cj4gKyAgICByZXR1cm4gTlVMTDsKPiArfQo+
ICsKPiArc3RhdGljIGNoYXIgZ2xvYmFsX2hlYXBfYnVmWzUxMiAqIDEwMjRdID0geyAwIH07Cj4g
Kwo+ICtpbnQgd2FzbV9tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCj4gK3sKPiArICAgIGNo
YXIgKndhc21fZmlsZSA9IE5VTEw7Cj4gKyAgICBjb25zdCBjaGFyICpmdW5jX25hbWUgPSBOVUxM
Owo+ICsgICAgdWludDggKndhc21fZmlsZV9idWYgPSBOVUxMOwo+ICsgICAgaW50IHdhc21fZmls
ZV9zaXplOwo+ICsgICAgd2FzbV9tb2R1bGVfdCB3YXNtX21vZHVsZSA9IE5VTEw7Cj4gKyAgICB3
YXNtX21vZHVsZV9pbnN0X3Qgd2FzbV9tb2R1bGVfaW5zdCA9IE5VTEw7Cj4gKyAgICBjaGFyIGVy
cm9yX2J1ZlsxMjhdOwo+ICsjaWYgV0FTTV9FTkFCTEVfTE9HICE9IDAKPiArICAgIGludCBsb2df
dmVyYm9zZV9sZXZlbCA9IDE7Cj4gKyNlbmRpZgo+ICsgICAgYm9vbCBpc19yZXBsX21vZGUgPSBm
YWxzZTsKPiArCj4gKyAgICAvKiBQcm9jZXNzIG9wdGlvbnMuICAqLwo+ICsgICAgZm9yIChhcmdj
LS0sIGFyZ3YrKzsgYXJnYyA+IDAgJiYgYXJndlswXVswXSA9PSAnLSc7IGFyZ2MtLSwgYXJndisr
KSB7Cj4gKyAgICAgICAgaWYgKCFzdHJjbXAoYXJndlswXSwgIi1mIikgfHwgIXN0cmNtcChhcmd2
WzBdLCAiLS1mdW5jdGlvbiIpKSB7Cj4gKyAgICAgICAgICAgIGFyZ2MtLSwgYXJndisrOwo+ICsg
ICAgICAgICAgICBmdW5jX25hbWUgPSBhcmd2WzBdOwo+ICsgICAgICAgIH0KPiArI2lmIFdBU01f
RU5BQkxFX0xPRyAhPSAwCj4gKyAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoYXJndlswXSwgIi12
PSIsIDMpKSB7Cj4gKyAgICAgICAgICAgIGxvZ192ZXJib3NlX2xldmVsID0gYXRvaShhcmd2WzBd
ICsgMyk7Cj4gKyAgICAgICAgICAgIGlmIChsb2dfdmVyYm9zZV9sZXZlbCA8IDAgfHwgbG9nX3Zl
cmJvc2VfbGV2ZWwgPiAyKQo+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHByaW50X2hlbHAoKTsK
PiArICAgICAgICB9Cj4gKyNlbmRpZgo+ICsKPiArICAgICAgICBlbHNlIGlmICghc3RyY21wKGFy
Z3ZbMF0sICItLXJlcGwiKSkKPiArICAgICAgICAgICAgaXNfcmVwbF9tb2RlID0gdHJ1ZTsKPiAr
ICAgIH0KPiArCj4gKyAgICB3YXNtX2ZpbGUgPSBhcmd2WzBdOwo+ICsgICAgYXBwX2FyZ2MgPSBh
cmdjOwo+ICsgICAgYXBwX2FyZ3YgPSBhcmd2Owo+ICsKPiArICAgIGlmIChiaF9tZW1vcnlfaW5p
dF93aXRoX3Bvb2woZ2xvYmFsX2hlYXBfYnVmLCBzaXplb2YoZ2xvYmFsX2hlYXBfYnVmKSkKPiAr
ICAgICAgICAhPSAwKSB7Cj4gKyAgICAgICAgd2FzbV9wcmludGYoIkluaXQgZ2xvYmFsIGhlYXAg
ZmFpbGVkLlxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsgICAgfQo+ICsKPiArICAgIC8q
IGluaXRpYWxpemUgcnVudGltZSBlbnZpcm9ubWVudCAqLwo+ICsgICAgaWYgKCF3YXNtX3J1bnRp
bWVfaW5pdCgpKQo+ICsgICAgICAgIGdvdG8gZmFpbDE7Cj4gKwo+ICsgICAgd2FzbV9sb2dfc2V0
X3ZlcmJvc2VfbGV2ZWwobG9nX3ZlcmJvc2VfbGV2ZWwpOwo+ICsKPiArICAgIC8qIGxvYWQgZnJv
bSBpbml0cmQgKi8KPiArICAgIHN0cnVjdCB1a3BsYXRfbWVtcmVnaW9uX2Rlc2MgaW1nOwo+ICsg
ICAgaWYgKHVrcGxhdF9tZW1yZWdpb25fZmluZF9pbml0cmQwKCZpbWcpID49IDApIHsKCllvdSdk
IGJldHRlciBoYW5kbGUgdGhlIGNhc2UgdWtwbGF0X21lbXJlZ2lvbl9maW5kX2luaXRyZDAoJmlt
Zyk8MAoKT3RoZXJ3aXNlIHlvdSB3aWxsIGV4cG9zZSBsYXR0ZXIgY29kZXMgd2l0aCBOVUxMIHdh
c21fbW9kdWxlCgotLS0KQ2hlZXJzLApKdXN0aW4gKEppYSBIZSkKCj4gKyAgICAgIHdhc21fZmls
ZV9idWYgPSAodWludDgqKWltZy5iYXNlOwo+ICsgICAgICB3YXNtX2ZpbGVfc2l6ZSA9IGltZy5s
ZW47Cj4gKwo+ICsgICAgICAvKiBsb2FkIFdBU00gbW9kdWxlICovCj4gKyAgICAgIGlmICghKHdh
c21fbW9kdWxlID0gd2FzbV9ydW50aW1lX2xvYWQod2FzbV9maWxlX2J1Ziwgd2FzbV9maWxlX3Np
emUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Jf
YnVmLCBzaXplb2YoZXJyb3JfYnVmKSkpKSB7Cj4gKyAgICAgICAgICB3YXNtX3ByaW50ZigiJXNc
biIsIGVycm9yX2J1Zik7Cj4gKyAgICAgICAgICBnb3RvIGZhaWwzOwo+ICsgICAgICB9Cj4gKwo+
ICsgICAgICAvKiBpbnN0YW50aWF0ZSB0aGUgbW9kdWxlICovCj4gKyAgICAgIGlmICghKHdhc21f
bW9kdWxlX2luc3QgPSB3YXNtX3J1bnRpbWVfaW5zdGFudGlhdGUod2FzbV9tb2R1bGUsCj4gKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYg
KiAxMDI0LCAvKiBzdGFjayBzaXplICovCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAqIDEwMjQsICAvKiBoZWFwIHNpemUgKi8KPiAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
cnJvcl9idWYsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZW9mKGVycm9yX2J1ZikpKSkgewo+ICsgICAgICAgICAgd2FzbV9wcmlu
dGYoIiVzXG4iLCBlcnJvcl9idWYpOwo+ICsgICAgICAgICAgZ290byBmYWlsNDsKPiArICAgICAg
fQo+ICsgICAgfQo+ICsKPiArICAgIGlmIChpc19yZXBsX21vZGUpIHsKPiArICAgICAgICBwcmlu
dGYoIkVudGVyaW5nIFJFUEwgbW9kZS4uLlxuIik7Cj4gKyAgICAgICAgYXBwX2luc3RhbmNlX3Jl
cGwod2FzbV9tb2R1bGVfaW5zdCk7Cj4gKyAgICB9Cj4gKyAgICBlbHNlIGlmIChmdW5jX25hbWUp
Cj4gKyAgICAgICAgYXBwX2luc3RhbmNlX2Z1bmMod2FzbV9tb2R1bGVfaW5zdCwgZnVuY19uYW1l
KTsKPiArICAgIGVsc2UKPiArICAgICAgICBhcHBfaW5zdGFuY2VfbWFpbih3YXNtX21vZHVsZV9p
bnN0KTsKPiArCj4gKyAgICAvKiBkZXN0cm95IHRoZSBtb2R1bGUgaW5zdGFuY2UgKi8KPiArICAg
IHdhc21fcnVudGltZV9kZWluc3RhbnRpYXRlKHdhc21fbW9kdWxlX2luc3QpOwo+ICsKPiArZmFp
bDQ6Cj4gKyAgICAvKiB1bmxvYWQgdGhlIG1vZHVsZSAqLwo+ICsgICAgd2FzbV9ydW50aW1lX3Vu
bG9hZCh3YXNtX21vZHVsZSk7Cj4gKwo+ICtmYWlsMzoKPiArICAgIC8qIGZyZWUgdGhlIGZpbGUg
YnVmZmVyICovCj4gKyAgICB3YXNtX2ZyZWUod2FzbV9maWxlX2J1Zik7Cj4gKwo+ICtmYWlsMjoK
PiArICAgIC8qIGRlc3Ryb3kgcnVudGltZSBlbnZpcm9ubWVudCAqLwo+ICsgICAgd2FzbV9ydW50
aW1lX2Rlc3Ryb3koKTsKPiArCj4gK2ZhaWwxOgo+ICsgICAgYmhfbWVtb3J5X2Rlc3Ryb3koKTsK
PiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+IGRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDEtd2Fz
bS1sb2ctZml4LXB0aHJlYWQtZW1iZWRkZWQtcHRocmVhZC10LXR5cGUucGF0Y2ggYi9wYXRjaGVz
LzAwMDEtd2FzbS1sb2ctZml4LXB0aHJlYWQtZW1iZWRkZWQtcHRocmVhZC10LXR5cGUucGF0Y2gK
PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjg2MzA1MzkKPiAtLS0gL2Rl
di9udWxsCj4gKysrIGIvcGF0Y2hlcy8wMDAxLXdhc20tbG9nLWZpeC1wdGhyZWFkLWVtYmVkZGVk
LXB0aHJlYWQtdC10eXBlLnBhdGNoCj4gQEAgLTAsMCArMSwxNSBAQAo+ICstLS0gL2NvcmUvaXdh
c20vcnVudGltZS91dGlscy93YXNtX2xvZy5jLm9yaWcJMjAxOS0wNy0zMCAxMDowMTo0Ni43MTUy
MTczMjkgKzAyMDAKPiArKysrIC9jb3JlL2l3YXNtL3J1bnRpbWUvdXRpbHMvd2FzbV9sb2cuYwky
MDE5LTA3LTMwIDEwOjA3OjI2Ljg5MTc0NjM1OSArMDIwMAo+ICtAQCAtNTcsOCArNTcsMTEgQEAK
PiArICAgLyogVHJ5IHRvIG93biB0aGUgbG9nIHN0cmVhbSBhbmQgc3RhcnQgdGhlIGxvZyBvdXRw
dXQuICAqLwo+ICsgICB3c19tdXRleF9sb2NrICgmbG9nX3N0cmVhbV9sb2NrKTsKPiArICAgc2Vs
ZiA9IHdzX3NlbGZfdGhyZWFkICgpOwo+ICsrI2lmZGVmIENPTkZJR19MSUJQVEhSRUFEX0VNQkVE
REVECj4gKysgIHdhc21fcHJpbnRmICgiWyVYXTogIiwgKGludClzZWxmLnApOwo+ICsrI2Vsc2UK
PiArICAgd2FzbV9wcmludGYgKCJbJVhdOiAiLCAoaW50KXNlbGYpOwo+ICstCj4gKysjZW5kaWYK
PiArICAgcmV0dXJuIHRydWU7Cj4gKyB9Cj4gKwo+IGRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDIt
YmgtdGhyZWFkLWZpeC1wdGhyZWFkLWVtYmVkZGVkLXB0aHJlYWQtdC10eXBlLnBhdGNoIGIvcGF0
Y2hlcy8wMDAyLWJoLXRocmVhZC1maXgtcHRocmVhZC1lbWJlZGRlZC1wdGhyZWFkLXQtdHlwZS5w
YXRjaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uNzEwMWNlMgo+IC0t
LSAvZGV2L251bGwKPiArKysgYi9wYXRjaGVzLzAwMDItYmgtdGhyZWFkLWZpeC1wdGhyZWFkLWVt
YmVkZGVkLXB0aHJlYWQtdC10eXBlLnBhdGNoCj4gQEAgLTAsMCArMSwxNiBAQAo+ICstLS0gL2Nv
cmUvc2hhcmVkLWxpYi9wbGF0Zm9ybS9saW51eC9iaF90aHJlYWQuYy5vcmlnCTIwMTktMDctMzAg
MTA6MDg6MjEuMjQzMTkxNjg4ICswMjAwCj4gKysrKyAvY29yZS9zaGFyZWQtbGliL3BsYXRmb3Jt
L2xpbnV4L2JoX3RocmVhZC5jCTIwMTktMDctMzAgMTA6MDg6NTUuMTEwODQ2Mjc4ICswMjAwCj4g
K0BAIC05Myw4ICs5MywxMiBAQAo+ICsgICAgIGJoX2Fzc2VydCh0aWQpOwo+ICsgICAgIGJoX2Fz
c2VydChzdGFydCk7Cj4gKwo+ICsrI2lmZGVmIENPTkZJR19MSUJQVEhSRUFEX0VNQkVEREVECj4g
KysgICAgdGlkLT5wID0gSU5WQUxJRF9USFJFQURfSUQ7Cj4gKysjZWxzZQo+ICsgICAgICp0aWQg
PSBJTlZBTElEX1RIUkVBRF9JRDsKPiArLQo+ICsrI2VuZGlmCj4gKysKPiArICAgICBwdGhyZWFk
X2F0dHJfaW5pdCgmdGF0dHIpOwo+ICsgICAgIHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgm
dGF0dHIsIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFKTsKPiArICAgICBpZiAocHRocmVhZF9hdHRy
X3NldHN0YWNrc2l6ZSgmdGF0dHIsIHN0YWNrX3NpemUpICE9IDApIHsKPiBkaWZmIC0tZ2l0IGEv
cGF0Y2hlcy8wMDAzLWJoLXRocmVhZC11c2Utd2FzbS1sb2ctaW5zdGVhZG9mLWJoLWxvZy5wYXRj
aCBiL3BhdGNoZXMvMDAwMy1iaC10aHJlYWQtdXNlLXdhc20tbG9nLWluc3RlYWRvZi1iaC1sb2cu
cGF0Y2gKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjZhNWU5MjMKPiAt
LS0gL2Rldi9udWxsCj4gKysrIGIvcGF0Y2hlcy8wMDAzLWJoLXRocmVhZC11c2Utd2FzbS1sb2ct
aW5zdGVhZG9mLWJoLWxvZy5wYXRjaAo+IEBAIC0wLDAgKzEsMTEgQEAKPiArLS0tIC9jb3JlL3No
YXJlZC1saWIvcGxhdGZvcm0vbGludXgvYmhfdGhyZWFkLmMub3JpZwkyMDE5LTA3LTMwIDExOjEw
OjU3Ljg4NDgyMTUwOCArMDIwMAo+ICsrKysgL2NvcmUvc2hhcmVkLWxpYi9wbGF0Zm9ybS9saW51
eC9iaF90aHJlYWQuYwkyMDE5LTA3LTMwIDExOjExOjU0LjQ5MjI0NDc4NyArMDIwMAo+ICtAQCAt
MTYsNyArMTYsNyBAQAo+ICsKPiArICNpbmNsdWRlICJiaF90aHJlYWQuaCIKPiArICNpbmNsdWRl
ICJiaF9hc3NlcnQuaCIKPiArLSNpbmNsdWRlICJiaF9sb2cuaCIKPiArKyNpbmNsdWRlICJ3YXNt
X2xvZy5oIgo+ICsgI2luY2x1ZGUgImJoX21lbW9yeS5oIgo+ICsgI2luY2x1ZGUgPHN0ZGlvLmg+
Cj4gKyAjaW5jbHVkZSA8c3RkbGliLmg+CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 03:06:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 03:06:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAQI8-0004ey-Ny; Wed, 18 Sep 2019 03:06:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Mndj=XN=gmail.com=jiakernel2@srs-us1.protection.inumbo.net>)
 id 1iAQI8-0004et-9w
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 03:06:04 +0000
X-Inumbo-ID: 3f8022a6-d9c1-11e9-b299-bc764e2007e4
Received: from mail-pf1-x441.google.com (unknown [2607:f8b0:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3f8022a6-d9c1-11e9-b299-bc764e2007e4;
 Wed, 18 Sep 2019 03:06:03 +0000 (UTC)
Received: by mail-pf1-x441.google.com with SMTP id h195so3398360pfe.5
 for <minios-devel@lists.xen.org>; Tue, 17 Sep 2019 20:06:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-transfer-encoding;
 bh=0cke5xIZvnbpfQZSf8ZuG/MaadJZ95YpcsYXxJ+dnqw=;
 b=uiVr+4Ldty4D8OR7lf9PdKepUht+tHtPAo5FsYT9MFiA28IO28bhj5CawTPKcJOzRi
 BalJ1bX20XorDQnNQh7ucy0EInrbV1VMCSKCQUbrGoXmYUoX+geAAUXDYb8scau/vRK/
 FTe8gc6ZLCumotyRXu/EUdJUvKb126EdKDA5NPkEfAR13VE6WWxwWs1G5cXQaK1shDLI
 UgJqeHyvfZHSMK1gibjcpuzbt5Gbo5F4AAkyAyOtXU9GLeIq4dt+OkaD5lgGclnqa1vb
 ecmjMOJ061WeZQk69F7Wq7FzMxXrE4GRKcPVsRaAG6mjveYqAT/m3csa4edJfC64ZYyt
 0wYQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-transfer-encoding;
 bh=0cke5xIZvnbpfQZSf8ZuG/MaadJZ95YpcsYXxJ+dnqw=;
 b=q9u3/1nMGtPq7vsLHrzNRRtBhRscuRzHgI7CcBhn036nvwzMakwbsy1X/mHpZHtTgT
 fm3PWEb6Yculh8CeTRE7mYdRrZmGz93oVsf6getHLkG/5Og188JnklyBeN8szWmdr3lK
 NqyQ2aJ4nfv+CpQokHmisHQ+GQ/Y3GtTMJSOEzfhjEm9/001jDUp4ww+ITaQ7uvkERm3
 dnWSOslRcIOGsKuEUFDt2BkykB28k5IL/O3harzj2gRdL1xS1ZvD0+nqQ6YOuCKSj9d/
 2lyxDHiQtpiZ3hTVT1WL8WcOXPVAiZPFMFb1B0zTfiIYGs6/9LCoZckyqRaS4H3cC/3S
 hfMg==
X-Gm-Message-State: APjAAAWBqfI32xa5S4K1ZLQcwonB+8WVWE7q3XRtCR7zyjyotxnG5eW5
 kchA65ZktTW3d8dFUnNnfLJiyu1x
X-Google-Smtp-Source: APXvYqy6spV1EGVq7dW2JQ1aLpQCLl21sw+xO1qRCkr9Hl6Y11cMnPT2P1UHTqg/V6UpUYrc39nwJQ==
X-Received: by 2002:a17:90a:9503:: with SMTP id
 t3mr1371768pjo.81.1568775962195; 
 Tue, 17 Sep 2019 20:06:02 -0700 (PDT)
Received: from [0.0.0.0] (104.129.187.94.16clouds.com. [104.129.187.94])
 by smtp.gmail.com with ESMTPSA id 2sm4670737pfa.43.2019.09.17.20.05.59
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Tue, 17 Sep 2019 20:06:01 -0700 (PDT)
To: Felipe Huici <felipe.huici@neclab.eu>, minios-devel@lists.xen.org
References: <20190828230327.9157-1-felipe.huici@neclab.eu>
 <20190828230327.9157-4-felipe.huici@neclab.eu>
From: Jia He <jiakernel2@gmail.com>
Message-ID: <cedb9ac7-7858-0b37-d98a-2c1df64b0def@gmail.com>
Date: Wed, 18 Sep 2019 11:05:56 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190828230327.9157-4-felipe.huici@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgRmVsaXBlCgpMb29rcyBnb29kIHRvIG1lCgpSZXZpZXdlZC1ieTogSmlhIEhlIDxqdXN0aW4u
aGVAYXJtLmNvbT4KCk9uIDIwMTkvOC8yOSA3OjAzLCBGZWxpcGUgSHVpY2kgd3JvdGU6Cj4gRm9y
IG5vdyB3ZSBleHBvcnQgYWxsIHdhc21fKiBzeW1ib2xzLCBpbmNsdWRlIGx1YV9tYWluIGZvciB0
aGUgbWFpbgo+IGxvb3AKPgo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1
aWNpQG5lY2xhYi5ldT4KPiAtLS0KPiAgIGV4cG9ydHN5bXMudWsgfCA2NCArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ICAgMSBmaWxl
IGNoYW5nZWQsIDYzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPgo+IGRpZmYgLS1naXQg
YS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51awo+IGluZGV4IGM4NmMzZjMuLjEzZDYzYzQg
MTAwNjQ0Cj4gLS0tIGEvZXhwb3J0c3ltcy51awo+ICsrKyBiL2V4cG9ydHN5bXMudWsKPiBAQCAt
MSArMSw2MyBAQAo+IC1ub25lCj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCj4gK3dhc21f
YXBwbGljYXRpb25fZXhlY3V0ZV9mdW5jCj4gK3dhc21fYXBwbGljYXRpb25fZXhlY3V0ZV9tYWlu
Cj4gK3dhc21fZGxzeW0KPiArd2FzbV9oYXNoX21hcF9jcmVhdGUKPiArd2FzbV9oYXNoX21hcF9k
ZXN0cm95Cj4gK3dhc21faGFzaF9tYXBfZmluZAo+ICt3YXNtX2hhc2hfbWFwX2luc2VydAo+ICt3
YXNtX2hhc2hfbWFwX3JlbW92ZQo+ICt3YXNtX2hhc2hfbWFwX3VwZGF0ZQo+ICt3YXNtX2ludGVy
cF9jYWxsX2Z1bmNfYnl0ZWNvZGUKPiArd2FzbV9pbnRlcnBfY2FsbF9mdW5jX25hdGl2ZQo+ICt3
YXNtX2ludGVycF9jYWxsX3dhc20KPiArd2FzbV9sb2FkZXJfZmluZF9ibG9ja19hZGRyCj4gK3dh
c21fbG9hZGVyX2xvYWQKPiArd2FzbV9sb2FkZXJfbG9hZF9mcm9tX3NlY3Rpb25zCj4gK3dhc21f
bG9hZGVyX3ByZXBhcmVfYnl0ZWNvZGUKPiArd2FzbV9sb2FkZXJfdW5sb2FkCj4gK3dhc21fbWFp
bgo+ICt3YXNtX25hdGl2ZV9mdW5jX2xvb2t1cAo+ICt3YXNtX25hdGl2ZV9nbG9iYWxfbG9va3Vw
Cj4gK3dhc21fbmF0aXZlX2luaXQKPiArd2FzbV9wbGF0Zm9ybV9uYXRpdmVfZnVuY19sb29rdXAK
PiArd2FzbV9ydW50aW1lX2FkZHJfYXBwX3RvX25hdGl2ZQo+ICt3YXNtX3J1bnRpbWVfYWRkcl9h
cHBfdG9fbmF0aXZlX3dyYXBwZXIKPiArd2FzbV9ydW50aW1lX2FkZHJfbmF0aXZlX3RvX2FwcAo+
ICt3YXNtX3J1bnRpbWVfYWRkcl9uYXRpdmVfdG9fYXBwX3dyYXBwZXIKPiArd2FzbV9ydW50aW1l
X2F0dGFjaF9jdXJyZW50X3RocmVhZAo+ICt3YXNtX3J1bnRpbWVfY2FsbF93YXNtCj4gK3dhc21f
cnVudGltZV9jbGVhcl9leGNlcHRpb24KPiArd2FzbV9ydW50aW1lX2NyZWF0ZV9leGVjX2Vudgo+
ICt3YXNtX3J1bnRpbWVfZGVpbnN0YW50aWF0ZQo+ICt3YXNtX3J1bnRpbWVfZGVzdG9yeV9leGVj
X2Vudgo+ICt3YXNtX3J1bnRpbWVfZGVzdHJveQo+ICt3YXNtX3J1bnRpbWVfZGV0YWNoX2N1cnJl
bnRfdGhyZWFkCj4gK3dhc21fcnVudGltZV9lbmxhcmdlX21lbW9yeQo+ICt3YXNtX3J1bnRpbWVf
Z2V0X2FwcF9hZGRyX3JhbmdlCj4gK3dhc21fcnVudGltZV9nZXRfY3VycmVudF9tb2R1bGVfaW5z
dAo+ICt3YXNtX3J1bnRpbWVfZ2V0X2N1cnJlbnRfbW9kdWxlX2luc3Rfd3JhcHBlcgo+ICt3YXNt
X3J1bnRpbWVfZ2V0X2N1cnJlbnRfdGhyZWFkX2RhdGEKPiArd2FzbV9ydW50aW1lX2dldF9leGNl
cHRpb24KPiArd2FzbV9ydW50aW1lX2dldF9sbHZtX3N0YWNrCj4gK3dhc21fcnVudGltZV9nZXRf
bmF0aXZlX2FkZHJfcmFuZ2UKPiArd2FzbV9ydW50aW1lX2dldF90ZW1wX3JldAo+ICt3YXNtX3J1
bnRpbWVfaW5pdAo+ICt3YXNtX3J1bnRpbWVfaW5zdGFudGlhdGUKPiArd2FzbV9ydW50aW1lX2xv
YWQKPiArd2FzbV9ydW50aW1lX2xvYWRfYW90Cj4gK3dhc21fcnVudGltZV9sb2FkX2Zyb21fc2Vj
dGlvbnMKPiArd2FzbV9ydW50aW1lX2xvb2t1cF9mdW5jdGlvbgo+ICt3YXNtX3J1bnRpbWVfbW9k
dWxlX2R1cF9kYXRhCj4gK3dhc21fcnVudGltZV9tb2R1bGVfZnJlZQo+ICt3YXNtX3J1bnRpbWVf
bW9kdWxlX21hbGxvYwo+ICt3YXNtX3J1bnRpbWVfc2V0X2V4Y2VwdGlvbgo+ICt3YXNtX3J1bnRp
bWVfc2V0X2V4Y2VwdGlvbi5wYXJ0LjUKPiArd2FzbV9ydW50aW1lX3NldF9sbHZtX3N0YWNrCj4g
K3dhc21fcnVudGltZV9zZXRfdGVtcF9yZXQKPiArd2FzbV9ydW50aW1lX3VubG9hZAo+ICt3YXNt
X3J1bnRpbWVfdmFsaWRhdGVfYXBwX2FkZHIKPiArd2FzbV9ydW50aW1lX3ZhbGlkYXRlX2FwcF9h
ZGRyX3dyYXBwZXIKPiArd2FzbV9ydW50aW1lX3ZhbGlkYXRlX25hdGl2ZV9hZGRyCj4gK3dhc21f
cnVudGltZV92YWxpZGF0ZV9uYXRpdmVfYWRkcl93cmFwcGVyCj4gK3dhc21fc3RyaW5nX2VxdWFs
Cj4gK3dhc21fc3RyaW5nX2hhc2gKCi0tIAoKLS0tCkNoZWVycywKSnVzdGluIChKaWEgSGUpCgoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 03:07:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 03:07:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAQJJ-0004gc-SJ; Wed, 18 Sep 2019 03:07:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Mndj=XN=gmail.com=jiakernel2@srs-us1.protection.inumbo.net>)
 id 1iAQJJ-0004gX-2a
 for minios-devel@lists.xenproject.org; Wed, 18 Sep 2019 03:07:17 +0000
X-Inumbo-ID: 6b2663d4-d9c1-11e9-978d-bc764e2007e4
Received: from mail-pf1-x444.google.com (unknown [2607:f8b0:4864:20::444])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6b2663d4-d9c1-11e9-978d-bc764e2007e4;
 Wed, 18 Sep 2019 03:07:16 +0000 (UTC)
Received: by mail-pf1-x444.google.com with SMTP id 205so3410531pfw.2
 for <minios-devel@lists.xenproject.org>; Tue, 17 Sep 2019 20:07:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-transfer-encoding;
 bh=6wtwTs64UTpDsskXW8aIyjV0Z1YBcOTH+akjgdXRbtg=;
 b=uj3KTu0jzAUl+gYRUkOWi9Pva82LJFuRcAyisINT/szxz0xy9eTMjkon7UmsxFw0zP
 F9AWSSxZYEhWbzC3mjRGywUCaauK/sO3M/nbDJeEnIEzk/gvkThCLQksFoerQkoIto5q
 lfG0Nr0bGg+HwZMPFp6tTSz2cXN+5ZpQAzykbmuauICotZzjYsGfr7N0y5SYcdn55ALA
 mQC5yIurBAup4FaTpAr2ObIUD5e5GUFQ4iQBSe0WCj6L23qevadx9hko/PqWkYngTtPH
 KkAvszrmn2hcRAlqr0J2sJJZ/Mq8htsPQP5MV3fZhTXLz8di7pJq0ZwJawE1otRWUr0u
 OP2A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-transfer-encoding;
 bh=6wtwTs64UTpDsskXW8aIyjV0Z1YBcOTH+akjgdXRbtg=;
 b=seD9/CN7Fi/ddcBZKWoNXjOp4KAjq4FtyV9FOCenwvYyCp+OO4BMe5Oy1F3DUO39Gn
 LgQC9xSqPbn+yTA/lbufy1h+QcpWKrBvUmsE73NX4S7+MZZ6LF1YJNR63tlsnPVmk/Ej
 FndjouMeYocxEw+B5w/Nu0sXcb91m2UbuOvOg7ySYPZq7h62DuCxLvsTkHShByVtxyAJ
 zev2LkNRqU65ym0S6S2s2IOYDDP79V+8OtjhOD/UzUS4VfgauDEyqQmfE9TM8d0PfqRd
 inFHuoPxccPrhv2vgJMmKmOK+2OPS5BVVM6dVcMLJXYRjvj3XGOvkmDXzYHiR5y4hDaq
 GWNg==
X-Gm-Message-State: APjAAAUkq6+9ZhZml0KRZEmtD5+frBuVzxq7Okn1ix94nqolwgF6mjTO
 t/XytnCaJQDquKsNnmRAsU3cZL6n
X-Google-Smtp-Source: APXvYqwEJ297uAw/Bdn8yXR5yoTE1kAFtEakagC5XGnQ23la17iwA+LJwPWYR+YvK2bL7f2+n6rpgg==
X-Received: by 2002:a63:d34c:: with SMTP id u12mr1956989pgi.114.1568776035537; 
 Tue, 17 Sep 2019 20:07:15 -0700 (PDT)
Received: from [0.0.0.0] (104.129.187.94.16clouds.com. [104.129.187.94])
 by smtp.gmail.com with ESMTPSA id c64sm4659949pfc.19.2019.09.17.20.07.13
 for <minios-devel@lists.xenproject.org>
 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
 Tue, 17 Sep 2019 20:07:15 -0700 (PDT)
To: minios-devel@lists.xenproject.org
References: <20190828230327.9157-1-felipe.huici@neclab.eu>
 <20190828230327.9157-4-felipe.huici@neclab.eu>
From: Jia He <jiakernel2@gmail.com>
Message-ID: <f794fa06-cdcc-baf6-a462-e13aee574a41@gmail.com>
Date: Wed, 18 Sep 2019 11:07:10 +0800
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190828230327.9157-4-felipe.huici@neclab.eu>
Subject: Re: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29ycnksIGEgbml0IGlubGluZQoKT24gMjAxOS84LzI5IDc6MDMsIEZlbGlwZSBIdWljaSB3cm90
ZToKPiBGb3Igbm93IHdlIGV4cG9ydCBhbGwgd2FzbV8qIHN5bWJvbHMsIGluY2x1ZGUgbHVhX21h
aW4gZm9yIHRoZSBtYWluCgpzL2x1YV9tYWluL3dhc21fbWFpbgoKLS0tCkNoZWVycywKSnVzdGlu
IChKaWEgSGUpCgo+IGxvb3AKPgo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBl
Lmh1aWNpQG5lY2xhYi5ldT4KPiAtLS0KPiAgIGV4cG9ydHN5bXMudWsgfCA2NCArKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQo+ICAgMSBm
aWxlIGNoYW5nZWQsIDYzIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPgo+IGRpZmYgLS1n
aXQgYS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51awo+IGluZGV4IGM4NmMzZjMuLjEzZDYz
YzQgMTAwNjQ0Cj4gLS0tIGEvZXhwb3J0c3ltcy51awo+ICsrKyBiL2V4cG9ydHN5bXMudWsKPiBA
QCAtMSArMSw2MyBAQAo+IC1ub25lCj4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCj4gK3dh
c21fYXBwbGljYXRpb25fZXhlY3V0ZV9mdW5jCj4gK3dhc21fYXBwbGljYXRpb25fZXhlY3V0ZV9t
YWluCj4gK3dhc21fZGxzeW0KPiArd2FzbV9oYXNoX21hcF9jcmVhdGUKPiArd2FzbV9oYXNoX21h
cF9kZXN0cm95Cj4gK3dhc21faGFzaF9tYXBfZmluZAo+ICt3YXNtX2hhc2hfbWFwX2luc2VydAo+
ICt3YXNtX2hhc2hfbWFwX3JlbW92ZQo+ICt3YXNtX2hhc2hfbWFwX3VwZGF0ZQo+ICt3YXNtX2lu
dGVycF9jYWxsX2Z1bmNfYnl0ZWNvZGUKPiArd2FzbV9pbnRlcnBfY2FsbF9mdW5jX25hdGl2ZQo+
ICt3YXNtX2ludGVycF9jYWxsX3dhc20KPiArd2FzbV9sb2FkZXJfZmluZF9ibG9ja19hZGRyCj4g
K3dhc21fbG9hZGVyX2xvYWQKPiArd2FzbV9sb2FkZXJfbG9hZF9mcm9tX3NlY3Rpb25zCj4gK3dh
c21fbG9hZGVyX3ByZXBhcmVfYnl0ZWNvZGUKPiArd2FzbV9sb2FkZXJfdW5sb2FkCj4gK3dhc21f
bWFpbgo+ICt3YXNtX25hdGl2ZV9mdW5jX2xvb2t1cAo+ICt3YXNtX25hdGl2ZV9nbG9iYWxfbG9v
a3VwCj4gK3dhc21fbmF0aXZlX2luaXQKPiArd2FzbV9wbGF0Zm9ybV9uYXRpdmVfZnVuY19sb29r
dXAKPiArd2FzbV9ydW50aW1lX2FkZHJfYXBwX3RvX25hdGl2ZQo+ICt3YXNtX3J1bnRpbWVfYWRk
cl9hcHBfdG9fbmF0aXZlX3dyYXBwZXIKPiArd2FzbV9ydW50aW1lX2FkZHJfbmF0aXZlX3RvX2Fw
cAo+ICt3YXNtX3J1bnRpbWVfYWRkcl9uYXRpdmVfdG9fYXBwX3dyYXBwZXIKPiArd2FzbV9ydW50
aW1lX2F0dGFjaF9jdXJyZW50X3RocmVhZAo+ICt3YXNtX3J1bnRpbWVfY2FsbF93YXNtCj4gK3dh
c21fcnVudGltZV9jbGVhcl9leGNlcHRpb24KPiArd2FzbV9ydW50aW1lX2NyZWF0ZV9leGVjX2Vu
dgo+ICt3YXNtX3J1bnRpbWVfZGVpbnN0YW50aWF0ZQo+ICt3YXNtX3J1bnRpbWVfZGVzdG9yeV9l
eGVjX2Vudgo+ICt3YXNtX3J1bnRpbWVfZGVzdHJveQo+ICt3YXNtX3J1bnRpbWVfZGV0YWNoX2N1
cnJlbnRfdGhyZWFkCj4gK3dhc21fcnVudGltZV9lbmxhcmdlX21lbW9yeQo+ICt3YXNtX3J1bnRp
bWVfZ2V0X2FwcF9hZGRyX3JhbmdlCj4gK3dhc21fcnVudGltZV9nZXRfY3VycmVudF9tb2R1bGVf
aW5zdAo+ICt3YXNtX3J1bnRpbWVfZ2V0X2N1cnJlbnRfbW9kdWxlX2luc3Rfd3JhcHBlcgo+ICt3
YXNtX3J1bnRpbWVfZ2V0X2N1cnJlbnRfdGhyZWFkX2RhdGEKPiArd2FzbV9ydW50aW1lX2dldF9l
eGNlcHRpb24KPiArd2FzbV9ydW50aW1lX2dldF9sbHZtX3N0YWNrCj4gK3dhc21fcnVudGltZV9n
ZXRfbmF0aXZlX2FkZHJfcmFuZ2UKPiArd2FzbV9ydW50aW1lX2dldF90ZW1wX3JldAo+ICt3YXNt
X3J1bnRpbWVfaW5pdAo+ICt3YXNtX3J1bnRpbWVfaW5zdGFudGlhdGUKPiArd2FzbV9ydW50aW1l
X2xvYWQKPiArd2FzbV9ydW50aW1lX2xvYWRfYW90Cj4gK3dhc21fcnVudGltZV9sb2FkX2Zyb21f
c2VjdGlvbnMKPiArd2FzbV9ydW50aW1lX2xvb2t1cF9mdW5jdGlvbgo+ICt3YXNtX3J1bnRpbWVf
bW9kdWxlX2R1cF9kYXRhCj4gK3dhc21fcnVudGltZV9tb2R1bGVfZnJlZQo+ICt3YXNtX3J1bnRp
bWVfbW9kdWxlX21hbGxvYwo+ICt3YXNtX3J1bnRpbWVfc2V0X2V4Y2VwdGlvbgo+ICt3YXNtX3J1
bnRpbWVfc2V0X2V4Y2VwdGlvbi5wYXJ0LjUKPiArd2FzbV9ydW50aW1lX3NldF9sbHZtX3N0YWNr
Cj4gK3dhc21fcnVudGltZV9zZXRfdGVtcF9yZXQKPiArd2FzbV9ydW50aW1lX3VubG9hZAo+ICt3
YXNtX3J1bnRpbWVfdmFsaWRhdGVfYXBwX2FkZHIKPiArd2FzbV9ydW50aW1lX3ZhbGlkYXRlX2Fw
cF9hZGRyX3dyYXBwZXIKPiArd2FzbV9ydW50aW1lX3ZhbGlkYXRlX25hdGl2ZV9hZGRyCj4gK3dh
c21fcnVudGltZV92YWxpZGF0ZV9uYXRpdmVfYWRkcl93cmFwcGVyCj4gK3dhc21fc3RyaW5nX2Vx
dWFsCj4gK3dhc21fc3RyaW5nX2hhc2gKCi0tIAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 08:24:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 08:24:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAVGT-0005Yt-Cz; Wed, 18 Sep 2019 08:24:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=J4P8=XN=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAVGS-0005Ye-3A
 for minios-devel@lists.xenproject.org; Wed, 18 Sep 2019 08:24:40 +0000
X-Inumbo-ID: c0daec2e-d9ed-11e9-9629-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c0daec2e-d9ed-11e9-9629-12813bfff9fa;
 Wed, 18 Sep 2019 08:24:38 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 78ABE105684;
 Wed, 18 Sep 2019 10:24:37 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 6KmnT1oOsQpC; Wed, 18 Sep 2019 10:24:37 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 58FFA105544
 for <minios-devel@lists.xenproject.org>; Wed, 18 Sep 2019 10:24:37 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 10:24:37 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Wed, 18 Sep 2019 10:24:23 +0200
Message-ID: <20190918082423.8859-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Export readdir_r and
 fstatfs symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHJlYWRkaXJfciBhbmQgZnN0YXRmcyB3aGljaCBhcmUgbmVlZGVkIGJ5IHRoZSBsaWJnbyBw
b3J0LgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWlu
YXNAbmVjbGFiLmV1PgotLS0KIGxpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgfCAyICsrCiAxIGZp
bGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvZXhw
b3J0c3ltcy51ayBiL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsKaW5kZXggZTNkNjcyM2EuLmUy
NjI3YzAzIDEwMDY0NAotLS0gYS9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrCisrKyBiL2xpYi92
ZnNjb3JlL2V4cG9ydHN5bXMudWsKQEAgLTc5LDMgKzc5LDUgQEAgZGVudHJ5X2FsbG9jCiBkcmVs
ZQogdnJlbGUKIGZjbnRsCityZWFkZGlyX3IKK2ZzdGF0ZnMKLS0gCjIuMTcuMQoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 09:21:33 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 09:21:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAW9S-0006Vm-Rr; Wed, 18 Sep 2019 09:21:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OW6g=XN=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAW9S-0006Vd-1X
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 09:21:30 +0000
X-Inumbo-ID: b154b2f0-d9f5-11e9-b76c-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id b154b2f0-d9f5-11e9-b76c-bc764e2007e4;
 Wed, 18 Sep 2019 09:21:28 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 63594413E9;
 Wed, 18 Sep 2019 11:21:27 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 18 Sep 2019 11:21:26 +0200
Message-Id: <20190918092126.31508-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH] Remove exportsyms.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Rm9yIG5vdyB3ZSByZW1vdmUgZXhwb3J0c3ltcy51ayAuIFRoaXMgaXMgdG8gcHJldmVudCBhIGxv
dCBvZgp1bm5lY2Vzc2FyeSBjb25mdXNpb24gKGFuZCB3YXN0ZWQgdGltZSkgYXJpc2luZyBmcm9t
IHVuZGVmaW5lZApyZWZlcmVuY2UgbGlua2VyIGVycm9ycyB3aGVuIHRoZSBhY3R1YWwgc3lib2wg
aXMgYWN0dWFsbHkgaW4gdGhlCnNvdXJjZXMuIFdlIG1heSByZXZlcnQgdGhpcyBhdCBzb21lIGxh
dGVyIHBvaW50IGluIHRpbWUuCgpTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5o
dWljaUBuZWNsYWIuZXU+Ci0tLQogZXhwb3J0c3ltcy51ayB8IDc0IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl
ZCwgNzQgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awoKZGlm
ZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVrCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhMzE1ZGZmLi4wMDAwMDAwCi0tLSBhL2V4cG9ydHN5bXMudWsKKysrIC9k
ZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1hY2NlcHQKLWJpbmQKLWNvbm5lY3QKLWRuc19nZXRo
b3N0YnluYW1lCi1lbmRwcm90b2VudAotZnJlZWFkZHJpbmZvCi1nYWlfc3RyZXJyb3IKLWdldGFk
ZHJpbmZvCi1nZXRob3N0YnlhZGRyCi1nZXRob3N0YnluYW1lCi1nZXRob3N0YnluYW1lX3IKLWdl
dG5hbWVpbmZvCi1nZXRwZWVybmFtZQotZ2V0cHJvdG9ieW5hbWUKLWdldHByb3RvYnludW1iZXIK
LWdldHByb3RvZW50Ci1nZXRzZXJ2YnluYW1lCi1nZXRzZXJ2Ynlwb3J0Ci1nZXRzb2NrbmFtZQot
Z2V0c29ja29wdAotaF9lcnJubwotaWdtcF9qb2luZ3JvdXAKLWluZXRfbnRvcAotaW5ldF9wdG9u
Ci1pcDRhZGRyX2F0b24KLWlwNGFkZHJfbnRvYQotaXBhZGRyX2FkZHIKLWxpYmx3aXBfaW5pdAot
bGlzdGVuCi1sd2lwX2dldGhvc3RieW5hbWUKLWx3aXBfZ2V0aG9zdGJ5bmFtZV9yCi1sd2lwX2h0
b25sCi1sd2lwX2h0b25zCi1wYnVmX2FsbG9jCi1wYnVmX2NhdAotcGJ1Zl9jb3B5X3BhcnRpYWwK
LXBidWZfZnJlZQotcGJ1Zl9yZWYKLXBvbGwKLXJlY3YKLXJlY3Zmcm9tCi1yZWN2bXNnCi1zZWxl
Y3QKLXNlbmQKLXNlbmRtc2cKLXNlbmR0bwotc2V0cHJvdG9lbnQKLXNldHNvY2tvcHQKLXNodXRk
b3duCi1zb2NrZXQKLXNvY2tldHBhaXIKLXN5c19jaGVja190aW1lb3V0cwotdGNwX2Fib3J0Ci10
Y3BfYWNjZXB0Ci10Y3BfYXJnCi10Y3BfYmluZAotdGNwX2Nsb3NlCi10Y3BfY29ubmVjdAotdGNw
X2VycgotdGNwX2xpc3Rlbl93aXRoX2JhY2tsb2cKLXRjcF9uZXcKLXRjcF9vdXRwdXQKLXRjcF9w
b2xsCi10Y3BfcmVjdgotdGNwX3JlY3ZlZAotdGNwX3dyaXRlCi11ZHBfYmluZAotdWRwX2Nvbm5l
Y3QKLXVkcF9uZXcKLXVkcF9yZWN2Ci11ZHBfcmVtb3ZlCi11ZHBfc2VuZAotdWRwX3NlbmR0bwot
dWtuZXRkZXZfcG9sbF9hbGwKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 09:45:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 09:45:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAWWa-0001q7-AP; Wed, 18 Sep 2019 09:45:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OW6g=XN=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAWWY-0001q2-EZ
 for minios-devel@lists.xenproject.org; Wed, 18 Sep 2019 09:45:22 +0000
X-Inumbo-ID: 06b0aa76-d9f9-11e9-962b-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 06b0aa76-d9f9-11e9-962b-12813bfff9fa;
 Wed, 18 Sep 2019 09:45:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 2214A105544;
 Wed, 18 Sep 2019 11:45:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id a8DkCPNhzK2k; Wed, 18 Sep 2019 11:45:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 00EC4104580
 for <minios-devel@lists.xenproject.org>; Wed, 18 Sep 2019 11:45:19 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 11:45:18 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Wed, 18 Sep 2019 11:45:18
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Export readdir_r
 and fstatfs symbols
Thread-Index: AQHVbfqSKNvqbEKZSE6CIQGXfd2P46cxL5oA
Date: Wed, 18 Sep 2019 09:45:18 +0000
Message-ID: <E527892F-2336-4711-8382-A529047C5E3D@neclab.eu>
References: <20190918082423.8859-1-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190918082423.8859-1-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <7BE6753B9F1FB94EA634F2B8B12FFC09@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Export readdir_r
 and fstatfs symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsIHRoaXMgcGF0Y2ggbG9va3MgZ29vZCwgdGhhbmtzLg0KDQotLSBGZWxp
cGUNCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4N
Cg0K77u/T24gMTguMDkuMTksIDEwOjI1LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBDaGFy
YWxhbXBvcyBNYWluYXMiIDxtaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9y
ZyBvbiBiZWhhbGYgb2YgQ2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAg
ICBBZGQgcmVhZGRpcl9yIGFuZCBmc3RhdGZzIHdoaWNoIGFyZSBuZWVkZWQgYnkgdGhlIGxpYmdv
IHBvcnQuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFy
YWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBsaWIvdmZzY29yZS9leHBv
cnRzeW1zLnVrIHwgMiArKw0KICAgICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspDQog
ICAgDQogICAgZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgYi9saWIvdmZz
Y29yZS9leHBvcnRzeW1zLnVrDQogICAgaW5kZXggZTNkNjcyM2EuLmUyNjI3YzAzIDEwMDY0NA0K
ICAgIC0tLSBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsNCiAgICArKysgYi9saWIvdmZzY29y
ZS9leHBvcnRzeW1zLnVrDQogICAgQEAgLTc5LDMgKzc5LDUgQEAgZGVudHJ5X2FsbG9jDQogICAg
IGRyZWxlDQogICAgIHZyZWxlDQogICAgIGZjbnRsDQogICAgK3JlYWRkaXJfcg0KICAgICtmc3Rh
dGZzDQogICAgLS0gDQogICAgMi4xNy4xDQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 10:18:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 10:18:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAX2U-0007Ec-F3; Wed, 18 Sep 2019 10:18:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jDrM=XN=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAX2S-0007E1-Uh
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 10:18:20 +0000
X-Inumbo-ID: a274be94-d9fd-11e9-962b-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id a274be94-d9fd-11e9-962b-12813bfff9fa;
 Wed, 18 Sep 2019 10:18:19 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 31EE3F201D;
 Wed, 18 Sep 2019 12:18:18 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id caLGDHkFN0ml; Wed, 18 Sep 2019 12:18:18 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EE3EAF2018;
 Wed, 18 Sep 2019 12:18:13 +0200 (CEST)
Received: from localhost (192.168.24.98) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 12:18:13 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 18 Sep 2019 12:18:11 +0200
Message-ID: <20190918101811.26944-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.98]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Populate exportsyms.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>, Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW4gb3JkZXIgdG8gYXZvaWQgc3VycHJpc2luZyBsaW5raW5nIGVycm9ycywgd2UgZnVydGhlciBw
b3B1bGF0ZSB0aGUKYGV4cG9ydHN5bXMudWtgIGZpbGUgd2l0aCBzeW1ib2xzIHRoYXQgYXJlIGJl
aW5nIGV4cGVjdGVkIHRvIGJlIHB1YmxpY2x5CnByb3ZpZGVkIGJ5IHZmc2NvcmUuCkR1cGxpY2F0
ZXMgb2YgZW50cmllcyBhcmUgcmVtb3ZlZCB3aXRoIHRoaXMgY29tbWl0LCB0b28gKGUuZy4sIHJl
YWQsIHdyaXRlKQoKU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBu
ZWNsYWIuZXU+Ci0tLQogbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51ayB8IDM4ICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKy0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9u
cygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9leHBvcnRzeW1z
LnVrIGIvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51awppbmRleCBlMjYyN2MwMy4uNDYxNTYwOTgg
MTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsKKysrIGIvbGliL3Zmc2NvcmUv
ZXhwb3J0c3ltcy51awpAQCAtMyw5ICszLDYgQEAgdmZzY29yZV9wdXRfZmQKIHZmc2NvcmVfaW5z
dGFsbF9mZAogdmZzY29yZV9nZXRfZmlsZQogdmZzY29yZV9wdXRfZmlsZQotY2xvc2UKLXdyaXRl
Ci1yZWFkCiBtb3VudAogdmZzY29yZV9udWxsb3AKIHZmc2NvcmVfcmVsZWFzZV9tcF9kZW50cmll
cwpAQCAtMjQsMTUgKzIxLDE3IEBAIG1rZGlyCiBmc3luYwogZnN0YXQKIGZsb2NrCi1sc2Vlawor
ZmhvbGQKK2Zkcm9wCitmZ2V0CiBmdHJ1bmNhdGUKIHN0YXQKIGNobW9kCiBmY2htb2QKK2ZjaG93
bgogZHVwCiBkdXAyCiBkdXAzCi12ZnNjb3JlX3Vpb21vdmUKIHN5bmMKIHZmc2NvcmVfbW91bnRf
ZHVtcAogdW1vdW50CkBAIC00MSwxMyArNDAsMTYgQEAgbGluawogdW5saW5rCiBnZXRjd2QKIGNo
b3duCitjaHJvb3QKIGNoZGlyCiBmc3RhdGF0CiBzdGF0ZnMKIGxzdGF0CitsY2hvd24KIG9wZW5h
dAogb3BlbmRpcgogcmVhZGRpcgorcmVhZGRpcjY0CiBjbG9zZWRpcgogcHJlYWQKIHB3cml0ZQpA
QCAtNzUsOSArNzcsMzUgQEAgcmVhZGxpbmsKIGZhbGxvY2F0ZQogbHNlZWsKIHVrX3N5c2NhbGxf
d3JpdGV2Cit1bWFzawogZGVudHJ5X2FsbG9jCitkZW50cnlfaW5pdAorZGVudHJ5X2xvb2t1cAor
ZGVudHJ5X21vdmUKK2RlbnRyeV9yZW1vdmUKIGRyZWxlCiB2cmVsZQordnB1dAordnJlZgordmZs
dXNoCitkcmVmCiBmY250bAogcmVhZGRpcl9yCityZWFkZGlyNjRfcgogZnN0YXRmcworZWFjY2Vz
cworZXVpZGFjY2VzcworcmVuYW1lCitfX3hta25vZAorX194c3RhdAorX19seHN0YXQKK3ZuX2Fj
Y2Vzcwordm5fYWRkX25hbWUKK3ZuX2RlbF9uYW1lCit2bl9sb2NrCit2bl9sb29rdXAKK3ZuX3Nl
dG1vZGUKK3ZuX3NldHRpbWVzCit2bl9zdGF0Cit2bl91bmxvY2sKK3Zmc19idXN5Ci0tIAoyLjIw
LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 11:51:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 11:51:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAYUQ-00081e-BL; Wed, 18 Sep 2019 11:51:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OW6g=XN=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAYUO-00081P-PL
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 11:51:16 +0000
X-Inumbo-ID: 9d5c68e6-da0a-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9d5c68e6-da0a-11e9-978d-bc764e2007e4;
 Wed, 18 Sep 2019 11:51:14 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 50D821056DB;
 Wed, 18 Sep 2019 13:51:13 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id U2tdWPoISRWp; Wed, 18 Sep 2019 13:51:13 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 2AAC91056D8;
 Wed, 18 Sep 2019 13:51:13 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 13:51:13 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Wed, 18 Sep 2019 13:51:13
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH] lib/vfscore: Populate exportsyms.uk
Thread-Index: AQHVbgphuWeOiwcGJE+luLXE3A404KcxUqUA
Date: Wed, 18 Sep 2019 11:51:12 +0000
Message-ID: <E9461788-DD6F-4F06-B14D-0D54800FB843@neclab.eu>
References: <20190918101811.26944-1-simon.kuenzer@neclab.eu>
In-Reply-To: <20190918101811.26944-1-simon.kuenzer@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <E5E9971E345D0C49A0834D0D1679502F@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Populate
 exportsyms.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sDQoNCldoZW4gYnVpbGRpbmcgdGhpcyBhZ2FpbnN0IG5ld2xpYiBJIGdldCBhIG51
bWJlciBvZiBsaW5rZXIgZXJyb3JzOg0KDQogIENDICAgICAgbGlidWtuZXRkZXY6IG5ldGRldi5v
DQogIExEICAgICAgbGlidWtuZXRkZXYubGQubw0KICBPQkpDT1BZIGxpYnVrbmV0ZGV2Lm8NCiAg
TEQgICAgICBoZWxsb3dvcmxkX2t2bS14ODZfNjQubGQubw0KL3Jvb3Qvd29ya3NwYWNlL2dpdGxh
Yi91bmlrcmFmdC91cHN0cmVhbWluZy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlidmZzY29yZS5v
OiBJbiBmdW5jdGlvbiBgZmNob3duJzoNCi9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQv
dXBzdHJlYW1pbmcvdW5pa3JhZnQvbGliL3Zmc2NvcmUvbWFpbi5jOjE5NjM6IG11bHRpcGxlIGRl
ZmluaXRpb24gb2YgYGZjaG93bicNCi9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBz
dHJlYW1pbmcvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYm5ld2xpYmdsdWUubzovcm9vdC93b3Jr
c3BhY2UvZ2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2xpYnMvbmV3bGliL2ZpbGUuYzoxMDA6
IGZpcnN0IGRlZmluZWQgaGVyZQ0KL3Jvb3Qvd29ya3NwYWNlL2dpdGxhYi91bmlrcmFmdC91cHN0
cmVhbWluZy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvbGlidmZzY29yZS5vOiBJbiBmdW5jdGlvbiBg
bGNob3duJzoNCi9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvdW5p
a3JhZnQvbGliL3Zmc2NvcmUvbWFpbi5jOjE5NzY6IG11bHRpcGxlIGRlZmluaXRpb24gb2YgYGxj
aG93bicNCi9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvYXBwcy9o
ZWxsb3dvcmxkL2J1aWxkL2xpYm5ld2xpYmdsdWUubzovcm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3Vu
aWtyYWZ0L3Vwc3RyZWFtaW5nL2xpYnMvbmV3bGliL2ZpbGUuYzoxMDY6IGZpcnN0IGRlZmluZWQg
aGVyZQ0KL3Jvb3Qvd29ya3NwYWNlL2dpdGxhYi91bmlrcmFmdC91cHN0cmVhbWluZy9hcHBzL2hl
bGxvd29ybGQvYnVpbGQvbGlidmZzY29yZS5vOiBJbiBmdW5jdGlvbiBgcmVuYW1lJzoNCi9yb290
L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvdW5pa3JhZnQvbGliL3Zmc2Nv
cmUvbWFpbi5jOjkwOTogbXVsdGlwbGUgZGVmaW5pdGlvbiBvZiBgcmVuYW1lJw0KL3Jvb3Qvd29y
a3NwYWNlL2dpdGxhYi91bmlrcmFmdC91cHN0cmVhbWluZy9hcHBzL2hlbGxvd29ybGQvYnVpbGQv
bGlibmV3bGliYy5vOi9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcv
YXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYm5ld2xpYmMvb3JpZ2luL25ld2xpYi0yLjUuMC4yMDE3
MDkyMi9uZXdsaWIvbGliYy9zdGRpby9yZW5hbWUuYzo2NjogZmlyc3QgZGVmaW5lZCBoZXJlDQov
cm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3Js
ZC9idWlsZC9saWJ2ZnNjb3JlLm86IEluIGZ1bmN0aW9uIGB1bWFzayc6DQovcm9vdC93b3Jrc3Bh
Y2UvZ2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL3VuaWtyYWZ0L2xpYi92ZnNjb3JlL21haW4u
YzoyMDYzOiBtdWx0aXBsZSBkZWZpbml0aW9uIG9mIGB1bWFzaycNCi9yb290L3dvcmtzcGFjZS9n
aXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYm5ld2xp
YmdsdWUubzovcm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2xpYnMv
bmV3bGliL2ZpbGUuYzo1ODogZmlyc3QgZGVmaW5lZCBoZXJlDQpjb2xsZWN0MjogZXJyb3I6IGxk
IHJldHVybmVkIDEgZXhpdCBzdGF0dXMNCi9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQv
dXBzdHJlYW1pbmcvdW5pa3JhZnQvcGxhdC9rdm0vTGlua2VyLnVrOjIxOiByZWNpcGUgZm9yIHRh
cmdldCAnL3Jvb3Qvd29ya3NwYWNlL2dpdGxhYi91bmlrcmFmdC91cHN0cmVhbWluZy9hcHBzL2hl
bGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9rdm0teDg2XzY0LmRiZycgZmFpbGVkDQptYWtlWzFd
OiAqKiogWy9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvYXBwcy9o
ZWxsb3dvcmxkL2J1aWxkL2hlbGxvd29ybGRfa3ZtLXg4Nl82NC5kYmddIEVycm9yIDENCm1ha2Vb
MV06IExlYXZpbmcgZGlyZWN0b3J5ICcvcm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWtyYWZ0L3Vw
c3RyZWFtaW5nL3VuaWtyYWZ0Jw0KTWFrZWZpbGU6MjE6IHJlY2lwZSBmb3IgdGFyZ2V0ICdhbGwn
IGZhaWxlZA0KbWFrZTogKioqIFthbGxdIEVycm9yIDINCg0KZmNob3duLCBsY2hvd24sIGFuZCB1
bWFzayBhcmUgc3R1YnMgaW4gdGhlIG5ld2xpYiBnbHVlIGNvZGUsIHNvIGl0J2QgZmluZSB0byBq
dXN0IHJlbW92ZSB0aGVtLg0KDQpyZW5hbWUgaXMgYW4gYWN0dWFsIGltcGxlbWVudGF0aW9uLCBi
dXQgc2luY2UgdmZzY29yZSBub3cgcHJvdmlkZXMgYW5kIGV4cG9zZXMgb25lLCB5b3UgY2FuIGp1
c3QgcmVtb3ZlIG5ld2xpYidzIHJlbmFtZS5jIGZyb20gTWFrZWZpbGUudWsgLg0KDQpJZiB5b3Ug
YWdyZWUgYW5kIHN1Ym1pdCB0aGVzZSBmaXhlcyB0byBuZXdsaWIgSSBjYW4gdGhlbiB1cHN0cmVh
bSB0aGlzIHZmc2NvcmUgcGF0Y2guDQoNCi0tIEZlbGlwZQ0KDQpSZXZpZXdlZC1ieTogRmVsaXBl
IEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KDQrvu79PbiAxOC4wOS4xOSwgMTI6MTgs
ICJTaW1vbiBLdWVuemVyIiA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAg
SW4gb3JkZXIgdG8gYXZvaWQgc3VycHJpc2luZyBsaW5raW5nIGVycm9ycywgd2UgZnVydGhlciBw
b3B1bGF0ZSB0aGUNCiAgICBgZXhwb3J0c3ltcy51a2AgZmlsZSB3aXRoIHN5bWJvbHMgdGhhdCBh
cmUgYmVpbmcgZXhwZWN0ZWQgdG8gYmUgcHVibGljbHkNCiAgICBwcm92aWRlZCBieSB2ZnNjb3Jl
Lg0KICAgIER1cGxpY2F0ZXMgb2YgZW50cmllcyBhcmUgcmVtb3ZlZCB3aXRoIHRoaXMgY29tbWl0
LCB0b28gKGUuZy4sIHJlYWQsIHdyaXRlKQ0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFNpbW9u
IEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBsaWIvdmZz
Y29yZS9leHBvcnRzeW1zLnVrIHwgMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0NCiAgICAgMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25z
KC0pDQogICAgDQogICAgZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgYi9s
aWIvdmZzY29yZS9leHBvcnRzeW1zLnVrDQogICAgaW5kZXggZTI2MjdjMDMuLjQ2MTU2MDk4IDEw
MDY0NA0KICAgIC0tLSBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsNCiAgICArKysgYi9saWIv
dmZzY29yZS9leHBvcnRzeW1zLnVrDQogICAgQEAgLTMsOSArMyw2IEBAIHZmc2NvcmVfcHV0X2Zk
DQogICAgIHZmc2NvcmVfaW5zdGFsbF9mZA0KICAgICB2ZnNjb3JlX2dldF9maWxlDQogICAgIHZm
c2NvcmVfcHV0X2ZpbGUNCiAgICAtY2xvc2UNCiAgICAtd3JpdGUNCiAgICAtcmVhZA0KICAgICBt
b3VudA0KICAgICB2ZnNjb3JlX251bGxvcA0KICAgICB2ZnNjb3JlX3JlbGVhc2VfbXBfZGVudHJp
ZXMNCiAgICBAQCAtMjQsMTUgKzIxLDE3IEBAIG1rZGlyDQogICAgIGZzeW5jDQogICAgIGZzdGF0
DQogICAgIGZsb2NrDQogICAgLWxzZWVrDQogICAgK2Zob2xkDQogICAgK2Zkcm9wDQogICAgK2Zn
ZXQNCiAgICAgZnRydW5jYXRlDQogICAgIHN0YXQNCiAgICAgY2htb2QNCiAgICAgZmNobW9kDQog
ICAgK2ZjaG93bg0KICAgICBkdXANCiAgICAgZHVwMg0KICAgICBkdXAzDQogICAgLXZmc2NvcmVf
dWlvbW92ZQ0KICAgICBzeW5jDQogICAgIHZmc2NvcmVfbW91bnRfZHVtcA0KICAgICB1bW91bnQN
CiAgICBAQCAtNDEsMTMgKzQwLDE2IEBAIGxpbmsNCiAgICAgdW5saW5rDQogICAgIGdldGN3ZA0K
ICAgICBjaG93bg0KICAgICtjaHJvb3QNCiAgICAgY2hkaXINCiAgICAgZnN0YXRhdA0KICAgICBz
dGF0ZnMNCiAgICAgbHN0YXQNCiAgICArbGNob3duDQogICAgIG9wZW5hdA0KICAgICBvcGVuZGly
DQogICAgIHJlYWRkaXINCiAgICArcmVhZGRpcjY0DQogICAgIGNsb3NlZGlyDQogICAgIHByZWFk
DQogICAgIHB3cml0ZQ0KICAgIEBAIC03NSw5ICs3NywzNSBAQCByZWFkbGluaw0KICAgICBmYWxs
b2NhdGUNCiAgICAgbHNlZWsNCiAgICAgdWtfc3lzY2FsbF93cml0ZXYNCiAgICArdW1hc2sNCiAg
ICAgZGVudHJ5X2FsbG9jDQogICAgK2RlbnRyeV9pbml0DQogICAgK2RlbnRyeV9sb29rdXANCiAg
ICArZGVudHJ5X21vdmUNCiAgICArZGVudHJ5X3JlbW92ZQ0KICAgICBkcmVsZQ0KICAgICB2cmVs
ZQ0KICAgICt2cHV0DQogICAgK3ZyZWYNCiAgICArdmZsdXNoDQogICAgK2RyZWYNCiAgICAgZmNu
dGwNCiAgICAgcmVhZGRpcl9yDQogICAgK3JlYWRkaXI2NF9yDQogICAgIGZzdGF0ZnMNCiAgICAr
ZWFjY2Vzcw0KICAgICtldWlkYWNjZXNzDQogICAgK3JlbmFtZQ0KICAgICtfX3hta25vZA0KICAg
ICtfX3hzdGF0DQogICAgK19fbHhzdGF0DQogICAgK3ZuX2FjY2Vzcw0KICAgICt2bl9hZGRfbmFt
ZQ0KICAgICt2bl9kZWxfbmFtZQ0KICAgICt2bl9sb2NrDQogICAgK3ZuX2xvb2t1cA0KICAgICt2
bl9zZXRtb2RlDQogICAgK3ZuX3NldHRpbWVzDQogICAgK3ZuX3N0YXQNCiAgICArdm5fdW5sb2Nr
DQogICAgK3Zmc19idXN5DQogICAgLS0gDQogICAgMi4yMC4xDQogICAgDQogICAgDQoNCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 12:23:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 12:23:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAYzx-0005Qf-Pj; Wed, 18 Sep 2019 12:23:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jDrM=XN=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAYzw-0005QW-Cr
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 12:23:52 +0000
X-Inumbo-ID: 2b04f2cc-da0f-11e9-9632-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2b04f2cc-da0f-11e9-9632-12813bfff9fa;
 Wed, 18 Sep 2019 12:23:50 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id EC78E1056DB;
 Wed, 18 Sep 2019 14:23:48 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id En7AD8zDLutA; Wed, 18 Sep 2019 14:23:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id CD6801056D8
 for <minios-devel@lists.xen.org>; Wed, 18 Sep 2019 14:23:48 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 14:23:48 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Wed, 18 Sep 2019 14:23:46 +0200
Message-ID: <20190918122346.31494-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Remove umask, fchown, lchown,
 rename
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmVtb3ZlcyB0aGUgc3R1YnMgYHVtYXNrYCwgYGZjaG93bmAsIGFuZCBgbGNob3duYCB0aGF0IGFy
ZSBwcm92aWRlZCBieQp0aGUgZ2x1ZSBjb2RlLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHByb3ZpZGVk
IGJ5IGxpYnZmc2NvcmUgaW4gdGhlCm1lYW50aW1lLiBsaWJ2ZnNjb3JlIGFsc28gcHJvdmlkZXMg
YW4gaW1wbGVtZW50YXRpb24gZm9yCmByZW5hbWVgLiBCZWNhdXNlIG9mIHRoaXMsIHdlIGFyZSBz
dG9wIGJ1aWxkaW5nIG5ld2xpYmMncyB2ZXJzaW9uIG9mIGl0LgoKU2lnbmVkLW9mZi1ieTogU2lt
b24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Ci0tLQogTWFrZWZpbGUudWsgfCAg
MSAtCiBmaWxlLmMgICAgICB8IDE3IC0tLS0tLS0tLS0tLS0tLS0tCiAyIGZpbGVzIGNoYW5nZWQs
IDE4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsK
aW5kZXggODEyZjYwMi4uOTViOTE5YSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFr
ZWZpbGUudWsKQEAgLTQ2MSw3ICs0NjEsNiBAQCBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5F
V0xJQl9MSUJDKS9zdGRpby9wdXRjaGFyX3UuYwogTElCTkVXTElCQ19TUkNTLXkgKz0gJChMSUJO
RVdMSUJfTElCQykvc3RkaW8vcHV0cy5jCiBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJ
Ql9MSUJDKS9zdGRpby9yZWZpbGwuYwogTElCTkVXTElCQ19TUkNTLXkgKz0gJChMSUJORVdMSUJf
TElCQykvc3RkaW8vcmVtb3ZlLmMKLUxJQk5FV0xJQkNfU1JDUy15ICs9ICQoTElCTkVXTElCX0xJ
QkMpL3N0ZGlvL3JlbmFtZS5jCiBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJD
KS9zdGRpby9yZXdpbmQuYwogTElCTkVXTElCQ19TUkNTLXkgKz0gJChMSUJORVdMSUJfTElCQykv
c3RkaW8vcmdldC5jCiBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9zdGRp
by9zY2FuZi5jCmRpZmYgLS1naXQgYS9maWxlLmMgYi9maWxlLmMKaW5kZXggN2Q3OGY3OS4uMDA2
ZjE5MSAxMDA2NDQKLS0tIGEvZmlsZS5jCisrKyBiL2ZpbGUuYwpAQCAtNTQsMTEgKzU0LDYgQEAg
ZXh0ZXJuIGludCBlcnJubzsKICNkZWZpbmUgU1RET1VUX0ZJTEVOTyAgIDEgICAgICAgLyogc3Rh
bmRhcmQgb3V0cHV0IGZpbGUgZGVzY3JpcHRvciAqLwogI2RlZmluZSBTVERFUlJfRklMRU5PICAg
MiAgICAgICAvKiBzdGFuZGFyZCBlcnJvciBmaWxlIGRlc2NyaXB0b3IgKi8KIAotbW9kZV90IHVt
YXNrKG1vZGVfdCBjbWFzayBfX3VudXNlZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2luY2x1ZGUg
PHN5cy9tbWFuLmg+CiB2b2lkICptbWFwKHZvaWQgKmFkZHIgX191bnVzZWQsIHNpemVfdCBsZW4g
X191bnVzZWQsIGludCBwcm90IF9fdW51c2VkLAogCQlpbnQgZmxhZ3MgX191bnVzZWQsIGludCBm
aWxkZXMgX191bnVzZWQsIG9mZl90IG9mZiBfX3VudXNlZCkKQEAgLTk2LDE4ICs5MSw2IEBAIGlu
dCBzZWxlY3QoaW50IG5mZHMsIGZkX3NldCAqcmVhZGZkcyBfX3VudXNlZCwgZmRfc2V0ICp3cml0
ZWZkcyBfX3VudXNlZCwKIH0KICNlbmRpZiAvKiAhQ09ORklHX0xXSVBfU09DS0VUICovCiAKLWlu
dCBmY2hvd24oaW50IGZkIF9fdW51c2VkLCB1aWRfdCBvd25lciBfX3VudXNlZCwgZ2lkX3QgZ3Jv
dXAgX191bnVzZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBsY2hvd24oY29uc3QgY2hhciAq
cGF0aG5hbWUgX191bnVzZWQsIHVpZF90IG93bmVyIF9fdW51c2VkLAotCQlnaWRfdCBncm91cCBf
X3VudXNlZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCiBpbnQgdXRpbWVzKGNvbnN0IGNoYXIgKmZp
bGVuYW1lIF9fdW51c2VkLAogCQljb25zdCBzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXSBfX3VudXNl
ZCkKIHsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 12:25:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 12:25:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAZ1f-0005bL-Vt; Wed, 18 Sep 2019 12:25:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jDrM=XN=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAZ1e-0005bE-SM
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 12:25:38 +0000
X-Inumbo-ID: 6b2a9d84-da0f-11e9-9632-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6b2a9d84-da0f-11e9-9632-12813bfff9fa;
 Wed, 18 Sep 2019 12:25:37 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 88349F202F;
 Wed, 18 Sep 2019 14:25:36 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id BuHkhW1DkedP; Wed, 18 Sep 2019 14:25:36 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 59710F201F;
 Wed, 18 Sep 2019 14:25:32 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 14:25:32 +0200
To: Felipe Huici <Felipe.Huici@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
References: <20190918101811.26944-1-simon.kuenzer@neclab.eu>
 <E9461788-DD6F-4F06-B14D-0D54800FB843@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <240da41c-f93e-2bcf-193e-38de6fceac74@neclab.eu>
Date: Wed, 18 Sep 2019 14:25:31 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <E9461788-DD6F-4F06-B14D-0D54800FB843@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Populate
 exportsyms.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Costin Lupu <costin.lupu@cs.pub.ro>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGV5IEZlbGlwZSwKCkkganVzdCBzZW5kIGFub3RoZXIgcGF0Y2ggZm9yIG5ld2xpYiB0byBtYWtl
IGl0IHdvcmsgYWdhaW46Cmh0dHBzOi8vcGF0Y2h3b3JrLnVuaWtyYWZ0Lm9yZy9wYXRjaC83MzYw
MDEvCgpDYW4geW91IHRyeSB0aGUgY2hhbmdlIHdpdGggdGhpcyBvbmUgdG9nZXRoZXI/IEkgdGhp
bmsgYm90aCBwYXRjaGVzIG5lZWQgCnRvIGdvIGluIGF0IHRoZSBzYW1lIHRpbWUgaWYgYWNjZXB0
ZWQuCgpUaGFua3MsCgpTaW1vbgoKT24gMTguMDkuMTkgMTM6NTEsIEZlbGlwZSBIdWljaSB3cm90
ZToKPiBIaSBTaW1vbiwKPiAKPiBXaGVuIGJ1aWxkaW5nIHRoaXMgYWdhaW5zdCBuZXdsaWIgSSBn
ZXQgYSBudW1iZXIgb2YgbGlua2VyIGVycm9yczoKPiAKPiAgICBDQyAgICAgIGxpYnVrbmV0ZGV2
OiBuZXRkZXYubwo+ICAgIExEICAgICAgbGlidWtuZXRkZXYubGQubwo+ICAgIE9CSkNPUFkgbGli
dWtuZXRkZXYubwo+ICAgIExEICAgICAgaGVsbG93b3JsZF9rdm0teDg2XzY0LmxkLm8KPiAvcm9v
dC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3JsZC9i
dWlsZC9saWJ2ZnNjb3JlLm86IEluIGZ1bmN0aW9uIGBmY2hvd24nOgo+IC9yb290L3dvcmtzcGFj
ZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvdW5pa3JhZnQvbGliL3Zmc2NvcmUvbWFpbi5j
OjE5NjM6IG11bHRpcGxlIGRlZmluaXRpb24gb2YgYGZjaG93bicKPiAvcm9vdC93b3Jrc3BhY2Uv
Z2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJuZXds
aWJnbHVlLm86L3Jvb3Qvd29ya3NwYWNlL2dpdGxhYi91bmlrcmFmdC91cHN0cmVhbWluZy9saWJz
L25ld2xpYi9maWxlLmM6MTAwOiBmaXJzdCBkZWZpbmVkIGhlcmUKPiAvcm9vdC93b3Jrc3BhY2Uv
Z2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJ2ZnNj
b3JlLm86IEluIGZ1bmN0aW9uIGBsY2hvd24nOgo+IC9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5p
a3JhZnQvdXBzdHJlYW1pbmcvdW5pa3JhZnQvbGliL3Zmc2NvcmUvbWFpbi5jOjE5NzY6IG11bHRp
cGxlIGRlZmluaXRpb24gb2YgYGxjaG93bicKPiAvcm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWty
YWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJuZXdsaWJnbHVlLm86L3Jv
b3Qvd29ya3NwYWNlL2dpdGxhYi91bmlrcmFmdC91cHN0cmVhbWluZy9saWJzL25ld2xpYi9maWxl
LmM6MTA2OiBmaXJzdCBkZWZpbmVkIGhlcmUKPiAvcm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWty
YWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJ2ZnNjb3JlLm86IEluIGZ1
bmN0aW9uIGByZW5hbWUnOgo+IC9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJl
YW1pbmcvdW5pa3JhZnQvbGliL3Zmc2NvcmUvbWFpbi5jOjkwOTogbXVsdGlwbGUgZGVmaW5pdGlv
biBvZiBgcmVuYW1lJwo+IC9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1p
bmcvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYm5ld2xpYmMubzovcm9vdC93b3Jrc3BhY2UvZ2l0
bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3JsZC9idWlsZC9saWJuZXdsaWJj
L29yaWdpbi9uZXdsaWItMi41LjAuMjAxNzA5MjIvbmV3bGliL2xpYmMvc3RkaW8vcmVuYW1lLmM6
NjY6IGZpcnN0IGRlZmluZWQgaGVyZQo+IC9yb290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQv
dXBzdHJlYW1pbmcvYXBwcy9oZWxsb3dvcmxkL2J1aWxkL2xpYnZmc2NvcmUubzogSW4gZnVuY3Rp
b24gYHVtYXNrJzoKPiAvcm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5n
L3VuaWtyYWZ0L2xpYi92ZnNjb3JlL21haW4uYzoyMDYzOiBtdWx0aXBsZSBkZWZpbml0aW9uIG9m
IGB1bWFzaycKPiAvcm9vdC93b3Jrc3BhY2UvZ2l0bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2Fw
cHMvaGVsbG93b3JsZC9idWlsZC9saWJuZXdsaWJnbHVlLm86L3Jvb3Qvd29ya3NwYWNlL2dpdGxh
Yi91bmlrcmFmdC91cHN0cmVhbWluZy9saWJzL25ld2xpYi9maWxlLmM6NTg6IGZpcnN0IGRlZmlu
ZWQgaGVyZQo+IGNvbGxlY3QyOiBlcnJvcjogbGQgcmV0dXJuZWQgMSBleGl0IHN0YXR1cwo+IC9y
b290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvdW5pa3JhZnQvcGxhdC9r
dm0vTGlua2VyLnVrOjIxOiByZWNpcGUgZm9yIHRhcmdldCAnL3Jvb3Qvd29ya3NwYWNlL2dpdGxh
Yi91bmlrcmFmdC91cHN0cmVhbWluZy9hcHBzL2hlbGxvd29ybGQvYnVpbGQvaGVsbG93b3JsZF9r
dm0teDg2XzY0LmRiZycgZmFpbGVkCj4gbWFrZVsxXTogKioqIFsvcm9vdC93b3Jrc3BhY2UvZ2l0
bGFiL3VuaWtyYWZ0L3Vwc3RyZWFtaW5nL2FwcHMvaGVsbG93b3JsZC9idWlsZC9oZWxsb3dvcmxk
X2t2bS14ODZfNjQuZGJnXSBFcnJvciAxCj4gbWFrZVsxXTogTGVhdmluZyBkaXJlY3RvcnkgJy9y
b290L3dvcmtzcGFjZS9naXRsYWIvdW5pa3JhZnQvdXBzdHJlYW1pbmcvdW5pa3JhZnQnCj4gTWFr
ZWZpbGU6MjE6IHJlY2lwZSBmb3IgdGFyZ2V0ICdhbGwnIGZhaWxlZAo+IG1ha2U6ICoqKiBbYWxs
XSBFcnJvciAyCj4gCj4gZmNob3duLCBsY2hvd24sIGFuZCB1bWFzayBhcmUgc3R1YnMgaW4gdGhl
IG5ld2xpYiBnbHVlIGNvZGUsIHNvIGl0J2QgZmluZSB0byBqdXN0IHJlbW92ZSB0aGVtLgo+IAo+
IHJlbmFtZSBpcyBhbiBhY3R1YWwgaW1wbGVtZW50YXRpb24sIGJ1dCBzaW5jZSB2ZnNjb3JlIG5v
dyBwcm92aWRlcyBhbmQgZXhwb3NlcyBvbmUsIHlvdSBjYW4ganVzdCByZW1vdmUgbmV3bGliJ3Mg
cmVuYW1lLmMgZnJvbSBNYWtlZmlsZS51ayAuCj4gCj4gSWYgeW91IGFncmVlIGFuZCBzdWJtaXQg
dGhlc2UgZml4ZXMgdG8gbmV3bGliIEkgY2FuIHRoZW4gdXBzdHJlYW0gdGhpcyB2ZnNjb3JlIHBh
dGNoLgo+IAo+IC0tIEZlbGlwZQo+IAo+IFJldmlld2VkLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlw
ZS5odWljaUBuZWNsYWIuZXU+Cj4gCj4g77u/T24gMTguMDkuMTksIDEyOjE4LCAiU2ltb24gS3Vl
bnplciIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PiB3cm90ZToKPiAKPiAgICAgIEluIG9yZGVy
IHRvIGF2b2lkIHN1cnByaXNpbmcgbGlua2luZyBlcnJvcnMsIHdlIGZ1cnRoZXIgcG9wdWxhdGUg
dGhlCj4gICAgICBgZXhwb3J0c3ltcy51a2AgZmlsZSB3aXRoIHN5bWJvbHMgdGhhdCBhcmUgYmVp
bmcgZXhwZWN0ZWQgdG8gYmUgcHVibGljbHkKPiAgICAgIHByb3ZpZGVkIGJ5IHZmc2NvcmUuCj4g
ICAgICBEdXBsaWNhdGVzIG9mIGVudHJpZXMgYXJlIHJlbW92ZWQgd2l0aCB0aGlzIGNvbW1pdCwg
dG9vIChlLmcuLCByZWFkLCB3cml0ZSkKPiAgICAgIAo+ICAgICAgU2lnbmVkLW9mZi1ieTogU2lt
b24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Cj4gICAgICAtLS0KPiAgICAgICBs
aWIvdmZzY29yZS9leHBvcnRzeW1zLnVrIHwgMzggKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrLS0tLS0KPiAgICAgICAxIGZpbGUgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKSwgNSBk
ZWxldGlvbnMoLSkKPiAgICAgIAo+ICAgICAgZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2V4cG9y
dHN5bXMudWsgYi9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrCj4gICAgICBpbmRleCBlMjYyN2Mw
My4uNDYxNTYwOTggMTAwNjQ0Cj4gICAgICAtLS0gYS9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVr
Cj4gICAgICArKysgYi9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrCj4gICAgICBAQCAtMyw5ICsz
LDYgQEAgdmZzY29yZV9wdXRfZmQKPiAgICAgICB2ZnNjb3JlX2luc3RhbGxfZmQKPiAgICAgICB2
ZnNjb3JlX2dldF9maWxlCj4gICAgICAgdmZzY29yZV9wdXRfZmlsZQo+ICAgICAgLWNsb3NlCj4g
ICAgICAtd3JpdGUKPiAgICAgIC1yZWFkCj4gICAgICAgbW91bnQKPiAgICAgICB2ZnNjb3JlX251
bGxvcAo+ICAgICAgIHZmc2NvcmVfcmVsZWFzZV9tcF9kZW50cmllcwo+ICAgICAgQEAgLTI0LDE1
ICsyMSwxNyBAQCBta2Rpcgo+ICAgICAgIGZzeW5jCj4gICAgICAgZnN0YXQKPiAgICAgICBmbG9j
awo+ICAgICAgLWxzZWVrCj4gICAgICArZmhvbGQKPiAgICAgICtmZHJvcAo+ICAgICAgK2ZnZXQK
PiAgICAgICBmdHJ1bmNhdGUKPiAgICAgICBzdGF0Cj4gICAgICAgY2htb2QKPiAgICAgICBmY2ht
b2QKPiAgICAgICtmY2hvd24KPiAgICAgICBkdXAKPiAgICAgICBkdXAyCj4gICAgICAgZHVwMwo+
ICAgICAgLXZmc2NvcmVfdWlvbW92ZQo+ICAgICAgIHN5bmMKPiAgICAgICB2ZnNjb3JlX21vdW50
X2R1bXAKPiAgICAgICB1bW91bnQKPiAgICAgIEBAIC00MSwxMyArNDAsMTYgQEAgbGluawo+ICAg
ICAgIHVubGluawo+ICAgICAgIGdldGN3ZAo+ICAgICAgIGNob3duCj4gICAgICArY2hyb290Cj4g
ICAgICAgY2hkaXIKPiAgICAgICBmc3RhdGF0Cj4gICAgICAgc3RhdGZzCj4gICAgICAgbHN0YXQK
PiAgICAgICtsY2hvd24KPiAgICAgICBvcGVuYXQKPiAgICAgICBvcGVuZGlyCj4gICAgICAgcmVh
ZGRpcgo+ICAgICAgK3JlYWRkaXI2NAo+ICAgICAgIGNsb3NlZGlyCj4gICAgICAgcHJlYWQKPiAg
ICAgICBwd3JpdGUKPiAgICAgIEBAIC03NSw5ICs3NywzNSBAQCByZWFkbGluawo+ICAgICAgIGZh
bGxvY2F0ZQo+ICAgICAgIGxzZWVrCj4gICAgICAgdWtfc3lzY2FsbF93cml0ZXYKPiAgICAgICt1
bWFzawo+ICAgICAgIGRlbnRyeV9hbGxvYwo+ICAgICAgK2RlbnRyeV9pbml0Cj4gICAgICArZGVu
dHJ5X2xvb2t1cAo+ICAgICAgK2RlbnRyeV9tb3ZlCj4gICAgICArZGVudHJ5X3JlbW92ZQo+ICAg
ICAgIGRyZWxlCj4gICAgICAgdnJlbGUKPiAgICAgICt2cHV0Cj4gICAgICArdnJlZgo+ICAgICAg
K3ZmbHVzaAo+ICAgICAgK2RyZWYKPiAgICAgICBmY250bAo+ICAgICAgIHJlYWRkaXJfcgo+ICAg
ICAgK3JlYWRkaXI2NF9yCj4gICAgICAgZnN0YXRmcwo+ICAgICAgK2VhY2Nlc3MKPiAgICAgICtl
dWlkYWNjZXNzCj4gICAgICArcmVuYW1lCj4gICAgICArX194bWtub2QKPiAgICAgICtfX3hzdGF0
Cj4gICAgICArX19seHN0YXQKPiAgICAgICt2bl9hY2Nlc3MKPiAgICAgICt2bl9hZGRfbmFtZQo+
ICAgICAgK3ZuX2RlbF9uYW1lCj4gICAgICArdm5fbG9jawo+ICAgICAgK3ZuX2xvb2t1cAo+ICAg
ICAgK3ZuX3NldG1vZGUKPiAgICAgICt2bl9zZXR0aW1lcwo+ICAgICAgK3ZuX3N0YXQKPiAgICAg
ICt2bl91bmxvY2sKPiAgICAgICt2ZnNfYnVzeQo+ICAgICAgLS0KPiAgICAgIDIuMjAuMQo+ICAg
ICAgCj4gICAgICAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 13:37:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 13:37:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAa9M-0000wC-0V; Wed, 18 Sep 2019 13:37:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OW6g=XN=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAa9K-0000w0-R0
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 13:37:38 +0000
X-Inumbo-ID: 7966119e-da19-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7966119e-da19-11e9-978d-bc764e2007e4;
 Wed, 18 Sep 2019 13:37:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 80AD21056D8;
 Wed, 18 Sep 2019 15:37:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Xn3RCWIsY8Z9; Wed, 18 Sep 2019 15:37:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 5D32B105684
 for <minios-devel@lists.xen.org>; Wed, 18 Sep 2019 15:37:35 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 15:37:35 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Wed, 18 Sep 2019 15:37:35
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH] Remove umask, fchown, lchown, rename
Thread-Index: AQHVbhvs72IbauGEXEaS0rHYHRXds6cxcDwA
Date: Wed, 18 Sep 2019 13:37:35 +0000
Message-ID: <257BE7B8-E5F1-4D34-8A22-8552635AB1B1@neclab.eu>
References: <20190918122346.31494-1-simon.kuenzer@neclab.eu>
In-Reply-To: <20190918122346.31494-1-simon.kuenzer@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <405F0E60D2D4DC4F917313A1576258C1@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] Remove umask, fchown,
 lchown, rename
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sDQoNClRoYW5rcyBmb3IgdGhlIHBhdGNoLCB0aGF0IGZpeGVzIHRoZSBwcm9ibGVt
IHdpdGggdGhlIGxpYnZmc2NvcmUgcGF0Y2guIEknbGwgYXBwcm92ZSB0aGUgb3RoZXIgb25lIHRv
byBhbmQgdXBzdHJlYW0gdGhlbSB0b2dldGhlci4NCg0KLS0gRmVsaXBlDQoNClJldmlld2VkLWJ5
OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQoNCu+7v09uIDE4LjA5LjE5
LCAxNDoyMywgIlNpbW9uIEt1ZW56ZXIiIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4gd3JvdGU6
DQoNCiAgICBSZW1vdmVzIHRoZSBzdHVicyBgdW1hc2tgLCBgZmNob3duYCwgYW5kIGBsY2hvd25g
IHRoYXQgYXJlIHByb3ZpZGVkIGJ5DQogICAgdGhlIGdsdWUgY29kZS4gVGhlc2UgZnVuY3Rpb25z
IGFyZSBwcm92aWRlZCBieSBsaWJ2ZnNjb3JlIGluIHRoZQ0KICAgIG1lYW50aW1lLiBsaWJ2ZnNj
b3JlIGFsc28gcHJvdmlkZXMgYW4gaW1wbGVtZW50YXRpb24gZm9yDQogICAgYHJlbmFtZWAuIEJl
Y2F1c2Ugb2YgdGhpcywgd2UgYXJlIHN0b3AgYnVpbGRpbmcgbmV3bGliYydzIHZlcnNpb24gb2Yg
aXQuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3Vlbnpl
ckBuZWNsYWIuZXU+DQogICAgLS0tDQogICAgIE1ha2VmaWxlLnVrIHwgIDEgLQ0KICAgICBmaWxl
LmMgICAgICB8IDE3IC0tLS0tLS0tLS0tLS0tLS0tDQogICAgIDIgZmlsZXMgY2hhbmdlZCwgMTgg
ZGVsZXRpb25zKC0pDQogICAgDQogICAgZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZp
bGUudWsNCiAgICBpbmRleCA4MTJmNjAyLi45NWI5MTlhIDEwMDY0NA0KICAgIC0tLSBhL01ha2Vm
aWxlLnVrDQogICAgKysrIGIvTWFrZWZpbGUudWsNCiAgICBAQCAtNDYxLDcgKzQ2MSw2IEBAIExJ
Qk5FV0xJQkNfU1JDUy15ICs9ICQoTElCTkVXTElCX0xJQkMpL3N0ZGlvL3B1dGNoYXJfdS5jDQog
ICAgIExJQk5FV0xJQkNfU1JDUy15ICs9ICQoTElCTkVXTElCX0xJQkMpL3N0ZGlvL3B1dHMuYw0K
ICAgICBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9zdGRpby9yZWZpbGwu
Yw0KICAgICBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9zdGRpby9yZW1v
dmUuYw0KICAgIC1MSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9zdGRpby9y
ZW5hbWUuYw0KICAgICBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9zdGRp
by9yZXdpbmQuYw0KICAgICBMSUJORVdMSUJDX1NSQ1MteSArPSAkKExJQk5FV0xJQl9MSUJDKS9z
dGRpby9yZ2V0LmMNCiAgICAgTElCTkVXTElCQ19TUkNTLXkgKz0gJChMSUJORVdMSUJfTElCQykv
c3RkaW8vc2NhbmYuYw0KICAgIGRpZmYgLS1naXQgYS9maWxlLmMgYi9maWxlLmMNCiAgICBpbmRl
eCA3ZDc4Zjc5Li4wMDZmMTkxIDEwMDY0NA0KICAgIC0tLSBhL2ZpbGUuYw0KICAgICsrKyBiL2Zp
bGUuYw0KICAgIEBAIC01NCwxMSArNTQsNiBAQCBleHRlcm4gaW50IGVycm5vOw0KICAgICAjZGVm
aW5lIFNURE9VVF9GSUxFTk8gICAxICAgICAgIC8qIHN0YW5kYXJkIG91dHB1dCBmaWxlIGRlc2Ny
aXB0b3IgKi8NCiAgICAgI2RlZmluZSBTVERFUlJfRklMRU5PICAgMiAgICAgICAvKiBzdGFuZGFy
ZCBlcnJvciBmaWxlIGRlc2NyaXB0b3IgKi8NCiAgICAgDQogICAgLW1vZGVfdCB1bWFzayhtb2Rl
X3QgY21hc2sgX191bnVzZWQpDQogICAgLXsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAg
LQ0KICAgICAjaW5jbHVkZSA8c3lzL21tYW4uaD4NCiAgICAgdm9pZCAqbW1hcCh2b2lkICphZGRy
IF9fdW51c2VkLCBzaXplX3QgbGVuIF9fdW51c2VkLCBpbnQgcHJvdCBfX3VudXNlZCwNCiAgICAg
CQlpbnQgZmxhZ3MgX191bnVzZWQsIGludCBmaWxkZXMgX191bnVzZWQsIG9mZl90IG9mZiBfX3Vu
dXNlZCkNCiAgICBAQCAtOTYsMTggKzkxLDYgQEAgaW50IHNlbGVjdChpbnQgbmZkcywgZmRfc2V0
ICpyZWFkZmRzIF9fdW51c2VkLCBmZF9zZXQgKndyaXRlZmRzIF9fdW51c2VkLA0KICAgICB9DQog
ICAgICNlbmRpZiAvKiAhQ09ORklHX0xXSVBfU09DS0VUICovDQogICAgIA0KICAgIC1pbnQgZmNo
b3duKGludCBmZCBfX3VudXNlZCwgdWlkX3Qgb3duZXIgX191bnVzZWQsIGdpZF90IGdyb3VwIF9f
dW51c2VkKQ0KICAgIC17DQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtaW50
IGxjaG93bihjb25zdCBjaGFyICpwYXRobmFtZSBfX3VudXNlZCwgdWlkX3Qgb3duZXIgX191bnVz
ZWQsDQogICAgLQkJZ2lkX3QgZ3JvdXAgX191bnVzZWQpDQogICAgLXsNCiAgICAtCXJldHVybiAw
Ow0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAgaW50IHV0aW1lcyhjb25zdCBjaGFyICpmaWxl
bmFtZSBfX3VudXNlZCwNCiAgICAgCQljb25zdCBzdHJ1Y3QgdGltZXZhbCB0aW1lc1syXSBfX3Vu
dXNlZCkNCiAgICAgew0KICAgIC0tIA0KICAgIDIuMjAuMQ0KICAgIA0KICAgIA0KDQpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFp
bGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 13:38:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 13:38:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAaAG-00011y-4Y; Wed, 18 Sep 2019 13:38:36 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OW6g=XN=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAaAF-00011o-A4
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 13:38:35 +0000
X-Inumbo-ID: 9c23566a-da19-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9c23566a-da19-11e9-978d-bc764e2007e4;
 Wed, 18 Sep 2019 13:38:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id C4A8F1056D8;
 Wed, 18 Sep 2019 15:38:33 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Wwq6YzP4vfIE; Wed, 18 Sep 2019 15:38:33 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 9E922105684;
 Wed, 18 Sep 2019 15:38:33 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 15:38:33 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Wed, 18 Sep 2019 15:38:33
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Simon Kuenzer <simon.kuenzer@neclab.eu>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH] lib/vfscore: Populate exportsyms.uk
Thread-Index: AQHVbgphuWeOiwcGJE+luLXE3A404KcxcKQA
Date: Wed, 18 Sep 2019 13:38:33 +0000
Message-ID: <899C2340-7477-4540-8BA8-3E92B70D0632@neclab.eu>
References: <20190918101811.26944-1-simon.kuenzer@neclab.eu>
In-Reply-To: <20190918101811.26944-1-simon.kuenzer@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.d.190811
x-originating-ip: [192.168.24.96]
Content-ID: <F6F9CD8E59DB1F4599AA57D374C3E682@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] lib/vfscore: Populate
 exportsyms.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW4gY29uanVuY3Rpb24gd2l0aCB0aGUgW1VOSUtSQUZUL05FV0xJQiBQQVRDSF0gUmVtb3ZlIHVt
YXNrLCBmY2hvd24sIGxjaG93biwgcmVuYW1lIHBhdGNoOg0KDQpSZXZpZXdlZC1ieTogRmVsaXBl
IEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KDQrvu79PbiAxOC4wOS4xOSwgMTI6MTgs
ICJTaW1vbiBLdWVuemVyIiA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAg
SW4gb3JkZXIgdG8gYXZvaWQgc3VycHJpc2luZyBsaW5raW5nIGVycm9ycywgd2UgZnVydGhlciBw
b3B1bGF0ZSB0aGUNCiAgICBgZXhwb3J0c3ltcy51a2AgZmlsZSB3aXRoIHN5bWJvbHMgdGhhdCBh
cmUgYmVpbmcgZXhwZWN0ZWQgdG8gYmUgcHVibGljbHkNCiAgICBwcm92aWRlZCBieSB2ZnNjb3Jl
Lg0KICAgIER1cGxpY2F0ZXMgb2YgZW50cmllcyBhcmUgcmVtb3ZlZCB3aXRoIHRoaXMgY29tbWl0
LCB0b28gKGUuZy4sIHJlYWQsIHdyaXRlKQ0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFNpbW9u
IEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBsaWIvdmZz
Y29yZS9leHBvcnRzeW1zLnVrIHwgMzggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0NCiAgICAgMSBmaWxlIGNoYW5nZWQsIDMzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25z
KC0pDQogICAgDQogICAgZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgYi9s
aWIvdmZzY29yZS9leHBvcnRzeW1zLnVrDQogICAgaW5kZXggZTI2MjdjMDMuLjQ2MTU2MDk4IDEw
MDY0NA0KICAgIC0tLSBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsNCiAgICArKysgYi9saWIv
dmZzY29yZS9leHBvcnRzeW1zLnVrDQogICAgQEAgLTMsOSArMyw2IEBAIHZmc2NvcmVfcHV0X2Zk
DQogICAgIHZmc2NvcmVfaW5zdGFsbF9mZA0KICAgICB2ZnNjb3JlX2dldF9maWxlDQogICAgIHZm
c2NvcmVfcHV0X2ZpbGUNCiAgICAtY2xvc2UNCiAgICAtd3JpdGUNCiAgICAtcmVhZA0KICAgICBt
b3VudA0KICAgICB2ZnNjb3JlX251bGxvcA0KICAgICB2ZnNjb3JlX3JlbGVhc2VfbXBfZGVudHJp
ZXMNCiAgICBAQCAtMjQsMTUgKzIxLDE3IEBAIG1rZGlyDQogICAgIGZzeW5jDQogICAgIGZzdGF0
DQogICAgIGZsb2NrDQogICAgLWxzZWVrDQogICAgK2Zob2xkDQogICAgK2Zkcm9wDQogICAgK2Zn
ZXQNCiAgICAgZnRydW5jYXRlDQogICAgIHN0YXQNCiAgICAgY2htb2QNCiAgICAgZmNobW9kDQog
ICAgK2ZjaG93bg0KICAgICBkdXANCiAgICAgZHVwMg0KICAgICBkdXAzDQogICAgLXZmc2NvcmVf
dWlvbW92ZQ0KICAgICBzeW5jDQogICAgIHZmc2NvcmVfbW91bnRfZHVtcA0KICAgICB1bW91bnQN
CiAgICBAQCAtNDEsMTMgKzQwLDE2IEBAIGxpbmsNCiAgICAgdW5saW5rDQogICAgIGdldGN3ZA0K
ICAgICBjaG93bg0KICAgICtjaHJvb3QNCiAgICAgY2hkaXINCiAgICAgZnN0YXRhdA0KICAgICBz
dGF0ZnMNCiAgICAgbHN0YXQNCiAgICArbGNob3duDQogICAgIG9wZW5hdA0KICAgICBvcGVuZGly
DQogICAgIHJlYWRkaXINCiAgICArcmVhZGRpcjY0DQogICAgIGNsb3NlZGlyDQogICAgIHByZWFk
DQogICAgIHB3cml0ZQ0KICAgIEBAIC03NSw5ICs3NywzNSBAQCByZWFkbGluaw0KICAgICBmYWxs
b2NhdGUNCiAgICAgbHNlZWsNCiAgICAgdWtfc3lzY2FsbF93cml0ZXYNCiAgICArdW1hc2sNCiAg
ICAgZGVudHJ5X2FsbG9jDQogICAgK2RlbnRyeV9pbml0DQogICAgK2RlbnRyeV9sb29rdXANCiAg
ICArZGVudHJ5X21vdmUNCiAgICArZGVudHJ5X3JlbW92ZQ0KICAgICBkcmVsZQ0KICAgICB2cmVs
ZQ0KICAgICt2cHV0DQogICAgK3ZyZWYNCiAgICArdmZsdXNoDQogICAgK2RyZWYNCiAgICAgZmNu
dGwNCiAgICAgcmVhZGRpcl9yDQogICAgK3JlYWRkaXI2NF9yDQogICAgIGZzdGF0ZnMNCiAgICAr
ZWFjY2Vzcw0KICAgICtldWlkYWNjZXNzDQogICAgK3JlbmFtZQ0KICAgICtfX3hta25vZA0KICAg
ICtfX3hzdGF0DQogICAgK19fbHhzdGF0DQogICAgK3ZuX2FjY2Vzcw0KICAgICt2bl9hZGRfbmFt
ZQ0KICAgICt2bl9kZWxfbmFtZQ0KICAgICt2bl9sb2NrDQogICAgK3ZuX2xvb2t1cA0KICAgICt2
bl9zZXRtb2RlDQogICAgK3ZuX3NldHRpbWVzDQogICAgK3ZuX3N0YXQNCiAgICArdm5fdW5sb2Nr
DQogICAgK3Zmc19idXN5DQogICAgLS0gDQogICAgMi4yMC4xDQogICAgDQogICAgDQoNCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 18 14:25:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 18 Sep 2019 14:25:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAatf-00017K-1i; Wed, 18 Sep 2019 14:25:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=jDrM=XN=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iAate-00016o-1b
 for minios-devel@lists.xen.org; Wed, 18 Sep 2019 14:25:30 +0000
X-Inumbo-ID: 296e0de8-da20-11e9-a337-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 296e0de8-da20-11e9-a337-bc764e2007e4;
 Wed, 18 Sep 2019 14:25:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id BE9BA1056DE;
 Wed, 18 Sep 2019 16:25:27 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id rfLdM5dMQF9q; Wed, 18 Sep 2019 16:25:27 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 9C8A21056DB
 for <minios-devel@lists.xen.org>; Wed, 18 Sep 2019 16:25:27 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 18 Sep
 2019 16:25:27 +0200
To: Felipe Huici <felipe.huici@neclab.eu>, <minios-devel@lists.xen.org>
References: <20190918092126.31508-1-felipe.huici@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <23137daa-0b6c-1835-59ae-8f97ec334e20@neclab.eu>
Date: Wed, 18 Sep 2019 16:25:26 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190918092126.31508-1-felipe.huici@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBLWIP PATCH] Remove exportsyms.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TG9va3MgZmluZS4gSSBhZ3JlZSwgd2Ugc2hvdWxkIGhhbmRsZSBpdCB0aGlzIHdheSBmb3IgYSBi
aXQgYW5kIApyZWludHJvZHVjZSBpdCBsYXRlci4KClRoYW5rcywKClNpbW9uCgpSZXZpZXdlZC1i
eTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+CgpPbiAxOC4wOS4xOSAx
MToyMSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IEZvciBub3cgd2UgcmVtb3ZlIGV4cG9ydHN5bXMu
dWsgLiBUaGlzIGlzIHRvIHByZXZlbnQgYSBsb3Qgb2YKPiB1bm5lY2Vzc2FyeSBjb25mdXNpb24g
KGFuZCB3YXN0ZWQgdGltZSkgYXJpc2luZyBmcm9tIHVuZGVmaW5lZAo+IHJlZmVyZW5jZSBsaW5r
ZXIgZXJyb3JzIHdoZW4gdGhlIGFjdHVhbCBzeWJvbCBpcyBhY3R1YWxseSBpbiB0aGUKPiBzb3Vy
Y2VzLiBXZSBtYXkgcmV2ZXJ0IHRoaXMgYXQgc29tZSBsYXRlciBwb2ludCBpbiB0aW1lLgo+IAo+
IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiAt
LS0KPiAgIGV4cG9ydHN5bXMudWsgfCA3NCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDc0IGRlbGV0
aW9ucygtKQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKPiAKPiBkaWZmIC0t
Z2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsKPiBkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKPiBpbmRleCBhMzE1ZGZmLi4wMDAwMDAwCj4gLS0tIGEvZXhwb3J0c3ltcy51awo+ICsr
KyAvZGV2L251bGwKPiBAQCAtMSw3NCArMCwwIEBACj4gLWFjY2VwdAo+IC1iaW5kCj4gLWNvbm5l
Y3QKPiAtZG5zX2dldGhvc3RieW5hbWUKPiAtZW5kcHJvdG9lbnQKPiAtZnJlZWFkZHJpbmZvCj4g
LWdhaV9zdHJlcnJvcgo+IC1nZXRhZGRyaW5mbwo+IC1nZXRob3N0YnlhZGRyCj4gLWdldGhvc3Ri
eW5hbWUKPiAtZ2V0aG9zdGJ5bmFtZV9yCj4gLWdldG5hbWVpbmZvCj4gLWdldHBlZXJuYW1lCj4g
LWdldHByb3RvYnluYW1lCj4gLWdldHByb3RvYnludW1iZXIKPiAtZ2V0cHJvdG9lbnQKPiAtZ2V0
c2VydmJ5bmFtZQo+IC1nZXRzZXJ2Ynlwb3J0Cj4gLWdldHNvY2tuYW1lCj4gLWdldHNvY2tvcHQK
PiAtaF9lcnJubwo+IC1pZ21wX2pvaW5ncm91cAo+IC1pbmV0X250b3AKPiAtaW5ldF9wdG9uCj4g
LWlwNGFkZHJfYXRvbgo+IC1pcDRhZGRyX250b2EKPiAtaXBhZGRyX2FkZHIKPiAtbGlibHdpcF9p
bml0Cj4gLWxpc3Rlbgo+IC1sd2lwX2dldGhvc3RieW5hbWUKPiAtbHdpcF9nZXRob3N0YnluYW1l
X3IKPiAtbHdpcF9odG9ubAo+IC1sd2lwX2h0b25zCj4gLXBidWZfYWxsb2MKPiAtcGJ1Zl9jYXQK
PiAtcGJ1Zl9jb3B5X3BhcnRpYWwKPiAtcGJ1Zl9mcmVlCj4gLXBidWZfcmVmCj4gLXBvbGwKPiAt
cmVjdgo+IC1yZWN2ZnJvbQo+IC1yZWN2bXNnCj4gLXNlbGVjdAo+IC1zZW5kCj4gLXNlbmRtc2cK
PiAtc2VuZHRvCj4gLXNldHByb3RvZW50Cj4gLXNldHNvY2tvcHQKPiAtc2h1dGRvd24KPiAtc29j
a2V0Cj4gLXNvY2tldHBhaXIKPiAtc3lzX2NoZWNrX3RpbWVvdXRzCj4gLXRjcF9hYm9ydAo+IC10
Y3BfYWNjZXB0Cj4gLXRjcF9hcmcKPiAtdGNwX2JpbmQKPiAtdGNwX2Nsb3NlCj4gLXRjcF9jb25u
ZWN0Cj4gLXRjcF9lcnIKPiAtdGNwX2xpc3Rlbl93aXRoX2JhY2tsb2cKPiAtdGNwX25ldwo+IC10
Y3Bfb3V0cHV0Cj4gLXRjcF9wb2xsCj4gLXRjcF9yZWN2Cj4gLXRjcF9yZWN2ZWQKPiAtdGNwX3dy
aXRlCj4gLXVkcF9iaW5kCj4gLXVkcF9jb25uZWN0Cj4gLXVkcF9uZXcKPiAtdWRwX3JlY3YKPiAt
dWRwX3JlbW92ZQo+IC11ZHBfc2VuZAo+IC11ZHBfc2VuZHRvCj4gLXVrbmV0ZGV2X3BvbGxfYWxs
Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 08:52:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 08:52:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsAS-0002H8-5T; Thu, 19 Sep 2019 08:52:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsAR-0002Gx-7n
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 08:51:59 +0000
X-Inumbo-ID: bc4245c2-daba-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bc4245c2-daba-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 08:51:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 6E8D7F2033;
 Thu, 19 Sep 2019 10:51:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id eShmHWc8U5FL; Thu, 19 Sep 2019 10:51:21 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0BBE1F2025
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 10:51:19 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 10:51:18 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 10:51:02 +0200
Message-ID: <20190919085102.14413-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB] Remove mmap from newlib glue code
 and create a new internal library (libukmmap) for mmap
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGxlYXNlIHJldmlldyB0aGlzIHBhdGNoIHdpdGggbGliL3VrbW1hcCBwYXRjaCBzZXJpZXMuCgpT
aWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNs
YWIuZXU+Ci0tLQogZmlsZS5jIHwgMTIgLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTIg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZmlsZS5jIGIvZmlsZS5jCmluZGV4IDAwNmYxOTEu
LmRhNDRlMzcgMTAwNjQ0Ci0tLSBhL2ZpbGUuYworKysgYi9maWxlLmMKQEAgLTU0LDE4ICs1NCw2
IEBAIGV4dGVybiBpbnQgZXJybm87CiAjZGVmaW5lIFNURE9VVF9GSUxFTk8gICAxICAgICAgIC8q
IHN0YW5kYXJkIG91dHB1dCBmaWxlIGRlc2NyaXB0b3IgKi8KICNkZWZpbmUgU1RERVJSX0ZJTEVO
TyAgIDIgICAgICAgLyogc3RhbmRhcmQgZXJyb3IgZmlsZSBkZXNjcmlwdG9yICovCiAKLSNpbmNs
dWRlIDxzeXMvbW1hbi5oPgotdm9pZCAqbW1hcCh2b2lkICphZGRyIF9fdW51c2VkLCBzaXplX3Qg
bGVuIF9fdW51c2VkLCBpbnQgcHJvdCBfX3VudXNlZCwKLQkJaW50IGZsYWdzIF9fdW51c2VkLCBp
bnQgZmlsZGVzIF9fdW51c2VkLCBvZmZfdCBvZmYgX191bnVzZWQpCi17Ci0JcmV0dXJuIDA7Ci19
Ci0KLWludCBtdW5tYXAodm9pZCAqYWRkciBfX3VudXNlZCwgc2l6ZV90IGxlbiBfX3VudXNlZCkK
LXsKLQlyZXR1cm4gMDsKLX0KLQogI2lmICFDT05GSUdfTFdJUF9TT0NLRVQKIGludCBwb2xsKHN0
cnVjdCBwb2xsZmQgX3BmZFtdIF9fdW51c2VkLCBuZmRzX3QgX25mZHMgX191bnVzZWQsCiAJCWlu
dCBfdGltZW91dCBfX3VudXNlZCkKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 08:52:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 08:52:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsBJ-0002P8-9W; Thu, 19 Sep 2019 08:52:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsBH-0002Os-VA
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 08:52:51 +0000
X-Inumbo-ID: dc427d56-daba-11e9-9651-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dc427d56-daba-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 08:52:51 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 5200C105583;
 Thu, 19 Sep 2019 10:52:50 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id IvLIiWAMwf14; Thu, 19 Sep 2019 10:52:50 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 09F06105581
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 10:52:50 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 10:52:49 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 10:52:38 +0200
Message-ID: <20190919085240.15950-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT 0/2] lib/ukmmap: Remove mmap from newlib
 glue code and create a new internal library (libukmmap) for mmap
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW50cm9kdWNpbmcgYSBuZXcgaW50ZXJuYWwgbGlicmFyeSB3aGljaCBpbXBsZW1lbnRzIG1tYXAg
cmVsYXRlZApvcGVyYXRpb25zLiBGb3IgdGhlIHRpbWUgYmVpbmcgbW1hcCBpcyBub3QgZnVsbHkg
aW1wbGVtZW50ZWQuIEl0IGlzIGp1c3QgCmEgdHJpY2sgdGhhdCB3b3JrcyBmb3IgR28sIGJ1dCBp
dCBuZWVkcyB0byBiZSByZXZpc2l0ZWQgaW4gdGhlIGZ1dHVyZS4gClRoaXMgaW1wbGVtZW50YXRp
b24gZG9lcyBub3QgY3JlYXRlIGFueSBuZXcgbWFwcGluZywgaXQganVzdCBhbGxvY2F0ZXMKbWVt
b3J5IGFuZCBrZWVwcyB0cmFjayBvZiBhbnkgbWVtb3J5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBh
bGxvY2F0ZWQKaW4gYSBwcmV2aW91cyBjYWxsLiBJZiB0aGUgcGFyYW1ldGVycyBkbyBub3QgbWF0
Y2ggdGhlIG9uZXMgdGhhdCBHbwp1c2VzIHRoZW4gMCBpcyByZXR1cm5lZCAodW5pbXBsZW1lbnRl
ZCkuCgpDaGFyYWxhbXBvcyBNYWluYXMgKDIpOgogIEludHJvZHVjZSBtbWFwIGFuZCByZWxhdGVk
IGZ1bmN0aW9ucyBsaWJyYXJ5IHNrZWxldG9uCiAgbW1hcCB0cmljayBmb3IgR28KCiBsaWIvQ29u
ZmlnLnVrICAgICAgICAgICAgfCAgIDEgKwogbGliL01ha2VmaWxlLnVrICAgICAgICAgIHwgICAx
ICsKIGxpYi91a21tYXAvQ29uZmlnLnVrICAgICB8ICAgNSArKwogbGliL3VrbW1hcC9NYWtlZmls
ZS51ayAgIHwgICAzICsKIGxpYi91a21tYXAvZXhwb3J0c3ltcy51ayB8ICAgMiArCiBsaWIvdWtt
bWFwL21tYXAuYyAgICAgICAgfCAxNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrCiA2IGZpbGVzIGNoYW5nZWQsIDE3OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliL3VrbW1hcC9Db25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFw
L01ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9leHBvcnRzeW1zLnVr
CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9tbWFwLmMKCi0tIAoyLjE3LjEKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 08:52:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 08:52:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsBN-0002Py-B4; Thu, 19 Sep 2019 08:52:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsBL-0002Pl-Tg
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 08:52:55 +0000
X-Inumbo-ID: de303586-daba-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id de303586-daba-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 08:52:54 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 96FF8F2025;
 Thu, 19 Sep 2019 10:52:53 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id zLp--VM0qJy3; Thu, 19 Sep 2019 10:52:53 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 722DFF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 10:52:51 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 10:52:51 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 10:52:39 +0200
Message-ID: <20190919085240.15950-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919085240.15950-1-Charalampos.Mainas@neclab.eu>
References: <20190919085240.15950-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT 1/2] lib/ukmmap: Introduce mmap and
 related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi9Db25maWcudWsgICAgICAgICAgICB8IDEgKwogbGliL01ha2VmaWxl
LnVrICAgICAgICAgIHwgMSArCiBsaWIvdWttbWFwL0NvbmZpZy51ayAgICAgfCA1ICsrKysrCiBs
aWIvdWttbWFwL01ha2VmaWxlLnVrICAgfCAxICsKIGxpYi91a21tYXAvZXhwb3J0c3ltcy51ayB8
IDEgKwogNSBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvdWttbWFwL0NvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a21tYXAvTWFr
ZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL2V4cG9ydHN5bXMudWsKCmRp
ZmYgLS1naXQgYS9saWIvQ29uZmlnLnVrIGIvbGliL0NvbmZpZy51awppbmRleCBmMGQ2MjA1NC4u
NjY3NmQwM2IgMTAwNjQ0Ci0tLSBhL2xpYi9Db25maWcudWsKKysrIGIvbGliL0NvbmZpZy51awpA
QCAtNTQsMyArNTQsNCBAQCBzb3VyY2UgImxpYi91azlwL0NvbmZpZy51ayIKIHNvdXJjZSAibGli
L3Bvc2l4LWxpYmRsL0NvbmZpZy51ayIKIHNvdXJjZSAibGliL3VrbGlicGFyYW0vQ29uZmlnLnVr
Igogc291cmNlICJsaWIvdWt0aW1lL0NvbmZpZy51ayIKK3NvdXJjZSAibGliL3VrbW1hcC9Db25m
aWcudWsiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUudWsgYi9saWIvTWFrZWZpbGUudWsKaW5k
ZXggYTE2OTcxOTguLjJjYTk5NzNmIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUudWsKKysrIGIv
bGliL01ha2VmaWxlLnVrCkBAIC0zMSwzICszMSw0IEBAICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9s
aWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrOXApKQogJChldmFsICQoY2FsbCBfaW1wb3J0X2xp
YiwkKENPTkZJR19VS19CQVNFKS9saWIvcG9zaXgtbGliZGwpKQogJChldmFsICQoY2FsbCBfaW1w
b3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWtsaWJwYXJhbSkpCiAkKGV2YWwgJChjYWxs
IF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a3RpbWUpKQorJChldmFsICQoY2Fs
bCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWttbWFwKSkKZGlmZiAtLWdpdCBh
L2xpYi91a21tYXAvQ29uZmlnLnVrIGIvbGliL3VrbW1hcC9Db25maWcudWsKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmY3NTJkYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGli
L3VrbW1hcC9Db25maWcudWsKQEAgLTAsMCArMSw1IEBACitjb25maWcgTElCVUtNTUFQCisJYm9v
bCAidWttbWFwOiBtbWFwIHN5c3RlbSBjYWxsIgorCWRlZmF1bHQgbgorCXNlbGVjdCBMSUJVS0FM
TE9DCisJc2VsZWN0IExJQk5FV0xJQkMKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvTWFrZWZpbGUu
dWsgYi9saWIvdWttbWFwL01ha2VmaWxlLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwLi44YWMzYWIzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91a21tYXAvTWFrZWZpbGUu
dWsKQEAgLTAsMCArMSBAQAorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ1a21tYXAsJChDT05G
SUdfTElCVUtNTUFQKSkpCmRpZmYgLS1naXQgYS9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsgYi9s
aWIvdWttbWFwL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjYyMWU5NGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVr
CkBAIC0wLDAgKzEgQEAKK25vbmUKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 08:53:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 08:53:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsBS-0002R9-Cl; Thu, 19 Sep 2019 08:53:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsBQ-0002Qt-TH
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 08:53:00 +0000
X-Inumbo-ID: df7251e0-daba-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id df7251e0-daba-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 08:52:56 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id A70E7F2033;
 Thu, 19 Sep 2019 10:52:55 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id DQ7isYEYg7QE; Thu, 19 Sep 2019 10:52:55 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 7DB51F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 10:52:53 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 10:52:51 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 10:52:40 +0200
Message-ID: <20190919085240.15950-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919085240.15950-1-Charalampos.Mainas@neclab.eu>
References: <20190919085240.15950-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT 2/2] lib/ukmmap: mmap trick for Go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi91a21tYXAvTWFrZWZpbGUudWsgICB8ICAgMiArCiBsaWIvdWttbWFw
L2V4cG9ydHN5bXMudWsgfCAgIDMgKy0KIGxpYi91a21tYXAvbW1hcC5jICAgICAgICB8IDE2NiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MTcwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
dWttbWFwL21tYXAuYwoKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvTWFrZWZpbGUudWsgYi9saWIv
dWttbWFwL01ha2VmaWxlLnVrCmluZGV4IDhhYzNhYjNjLi43MWZmNDMyZiAxMDA2NDQKLS0tIGEv
bGliL3VrbW1hcC9NYWtlZmlsZS51aworKysgYi9saWIvdWttbWFwL01ha2VmaWxlLnVrCkBAIC0x
ICsxLDMgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWttbWFwLCQoQ09ORklHX0xJQlVL
TU1BUCkpKQorCitMSUJVS01NQVBfU1JDUy15ICs9ICQoTElCVUtNTUFQX0JBU0UpL21tYXAuYwpk
aWZmIC0tZ2l0IGEvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrIGIvbGliL3VrbW1hcC9leHBvcnRz
eW1zLnVrCmluZGV4IDYyMWU5NGYwLi5hMzFjNjM2YiAxMDA2NDQKLS0tIGEvbGliL3VrbW1hcC9l
eHBvcnRzeW1zLnVrCisrKyBiL2xpYi91a21tYXAvZXhwb3J0c3ltcy51awpAQCAtMSArMSwyIEBA
Ci1ub25lCittbWFwCittdW5tYXAKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvbW1hcC5jIGIvbGli
L3VrbW1hcC9tbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjRlMjRm
Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrbW1hcC9tbWFwLmMKQEAgLTAsMCArMSwxNjYg
QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKgor
ICogQXV0aG9yczogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFi
LmV1PgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVD
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1B
WSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1
ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dWsvYWxsb2MuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworc3RydWN0IG1tYXBfYWRkciB7CisJdm9pZCAqYmVnaW47CisJdm9pZCAqZW5kOworCXN0
cnVjdCBtbWFwX2FkZHIgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IG1tYXBfYWRkciAqbW1h
cF9hZGRyOworCisvKioKKyAqIFRoaXMgaXMgbm90IGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBv
ZiBtbWFwLiBJdCBpcyBqdXN0IGEgdHJpY2sgdGhhdCB3b3JrcworICogZm9yIEdvIGJ1dCBpdCBu
ZWVkcyB0byBiZSByZXZpc2l0ZWQuIEluc3RlYWQgb2YgbWFwcGluZywgaXQgYWxsb2NhdGVzIGxl
bgorICogYnl0ZXMgb2YgbWVtb3J5IGFuZCBzdG9yZXMgdGhlIGJlZ2lubmluaWcgYW5kIHRoZSBl
bmQgb2YgdGhhdCBtZW1vcnkgY2h1bmsKKyAqIGluIHN0cnVjdCBtbWFwX2FkZHIuIEF0IGZpcnN0
IGl0IGNoZWNrcyBpZiBhZGRyIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBtZW1vcnkKKyAqIGNodW5r
cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gYSBwcmV2aW91cyBjYWxsIG9mIG1tYXAuIElm
IHRoYXQgaXMgdGhlCisgKiBjYXNlIGFkZHIgaXMgdGhlIHJldHVybiB2YWx1ZS4gT3RoZXJ3aXNl
IGEgbmV3IG1lbW9yeSBibG9jayBpcyBhbGxvY2F0ZWQgYW5kCisgKiB0aGUgcmV0dXJuIHZhbHVl
IGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5pZyBvZiB0aGF0IGJsb2NrLgorICoKKyAqIEdv
IHVzZXMgbW1hcCBhbHdheXMgd2l0aDoKKyAqIEBwcm90ICAgPQllaXRoZXIgUFJPVF9OT05FIG9y
IFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICogQGZsYWdzICA9CWFzIE1BUF9BTk9OfE1BUF9QUklW
QVRFLCBvciBNQVBfRklYRUR8TUFQX0FOT058TUFQX1BSSVZBVEUKKyAqCQlvciBNQVBfTk9SRVNF
UlZFfE1BUF9BTk9OfE1BUF9QUklWQVRFCisgKiBAZmlsZGVzID0JLTEKKyAqIEBvZmYgICAgPQkw
CisgKgorICovCisKK3ZvaWQgKm1tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3Qs
CisJCWludCBmbGFncywgaW50IGZpbGRlcywgb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBtbWFwX2Fk
ZHIgKnRtcCA9IG1tYXBfYWRkciwgKmxhc3QgPSBOVUxMLCAqbmV3ID0gTlVMTDsKKworCWlmICgh
bGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKHZvaWQgKikgLTE7CisJfQorCisJ
LyogQ2hlY2sgaWYgcGFyYW1ldGVycyBtYXRjaCB0aGUgb25lcyB0aGF0IGdvIHVzZQorCSAqIE90
aGVyd2lzZSByZXR1cm4gMCAodW5pbXBsZW1lbnRlZCBtbWFwKQorCSAqLworCWlmIChmaWxkZXMg
IT0gLTEgfHwgb2ZmKQorCQlyZXR1cm4gMDsKKwlpZiAoIShwcm90ICYgKFBST1RfUkVBRHxQUk9U
X1dSSVRFKSkgJiYgKHByb3QgIT0gMCkpCisJCXJldHVybiAwOworCWlmICghKGZsYWdzICYgKE1B
UF9BTk9OfE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX0ZJWEVEfE1BUF9BTk9O
fE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX05PUkVTRVJWRXxNQVBfQU5PTnxN
QVBfUFJJVkFURSkpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICh0bXApIHsKKwkJaWYgKGFkZHIp
IHsKKwkJCWlmIChhZGRyID49IHRtcC0+YmVnaW4gJiYgYWRkciA8IHRtcC0+ZW5kKQorCQkJCXJl
dHVybiBhZGRyOworCQl9CisJCWxhc3QgPSB0bXA7CisJCXRtcCA9IHRtcC0+bmV4dDsKKwl9CisJ
dm9pZCAqbWVtID0gdWtfbWFsbG9jKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGxlbik7CisKKwlp
ZiAoIW1lbSkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICh2b2lkICopIC0xOworCX0K
KwluZXcgPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKHN0cnVjdCBt
bWFwX2FkZHIpKTsKKwluZXctPmJlZ2luID0gbWVtOworCW5ldy0+ZW5kID0gbWVtICsgbGVuOwor
CW5ldy0+bmV4dCA9IE5VTEw7CisJaWYgKCFtbWFwX2FkZHIpCisJCW1tYXBfYWRkciA9IG5ldzsK
KwllbHNlCisJCWxhc3QtPm5leHQgPSBuZXc7CisJcmV0dXJuIG1lbTsKK30KKworLyoKKyAqIG11
bm1hcCBmcmVlcyBsZW4gYnl0ZXMgb3MgbWVtb3J5IHN0YXJ0aW5nIGZyb20gYWRkci4KKyAqIGFk
ZHIgbmVlZHMgdG8gYmUgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGJsb2NrIHRoYXQgaGFzIGJlZW4g
YWxsb2NhdGVkIGZyb20KKyAqIG1tYXAuIElmIGxlbiBoYXMgdGhlIHNhbWUgdmFsdWUgd2l0aCB0
aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgaGFzCisgKiBiZWVuIGFsbG9jYXRlZCBm
cm9tIG1tYXAgdGhlIHN0cnVjdCBtbWFwX2FkZHIgY291bnRlcnBhcnQgaXMgZGVzdHJveWVkLgor
ICogT3RoZXJ3aXNlIHRoZSBpbml0aWFsIG1lbW9yeSBibG9jayBpcyByZXBsYWNlZCBieSBhIHNt
YWxsZXIgb25lLgorICovCisKK2ludCBtdW5tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbikKK3sK
KwlzdHJ1Y3QgbW1hcF9hZGRyICp0bXAgPSBtbWFwX2FkZHIsICpwcmV2ID0gTlVMTDsKKwlzaXpl
X3QgcmVtYWluX21lbTsKKworCWlmICghbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1
cm4gLTE7CisJfQorCWlmICghYWRkcikKKwkJcmV0dXJuIDA7CisJd2hpbGUgKHRtcCkgeworCQlp
ZiAoYWRkciAhPSB0bXAtPmJlZ2luKSB7CisJCQlpZiAodG1wLT5lbmQgPiBhZGRyICsgbGVuKSB7
CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmVtYWluX21l
bSA9IHRtcC0+ZW5kIC0gYWRkciAtIGxlbjsKKwkJCWlmIChyZW1haW5fbWVtKSB7CisKKwkJCQl2
b2lkICptZW0gPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwKKwkJCQkJCXJlbWFp
bl9tZW0pOworCQkJCWlmICghbWVtKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlyZXR1
cm4gLTE7CisJCQkJfQorCQkJCW1lbWNweShtZW0sIGFkZHIrbGVuLCByZW1haW5fbWVtKTsKKwkJ
CQl0bXAtPmJlZ2luID0gbWVtOworCQkJfSBlbHNlIHsKKworCQkJCWlmICghcHJldikKKwkJCQkJ
bW1hcF9hZGRyID0gdG1wLT5uZXh0OworCQkJCWVsc2UKKwkJCQkJcHJldi0+bmV4dCA9IHRtcC0+
bmV4dDsKKwkJCQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIHRtcCk7CisJCQl9CisJ
CQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGFkZHIpOworCQkJcmV0dXJuIDA7CisJ
CX0KKwkJcHJldiA9IHRtcDsKKwkJdG1wID0gdG1wLT5uZXh0OworCX0KKwkvKiB1bmltcGxlbWVu
dGVkIG11bm1hcCAqLworCXJldHVybiAwOworfQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsY6-0006XK-L3; Thu, 19 Sep 2019 09:16:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsY5-0006XC-Me
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:25 +0000
X-Inumbo-ID: 25d6fd68-dabe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 25d6fd68-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:23 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 36252F2025;
 Thu, 19 Sep 2019 11:16:22 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id x2sIrZc9Ho2L; Thu, 19 Sep 2019 11:16:22 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 06F80F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:20 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:19 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:44 +0200
Message-ID: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 00/23] Upgrade Unikraft's
 configuration system
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXBncmFkZSB0aGUgY29uZmlndXJhdGlvbiBzeXN0ZW0gdXNlZCB3aXRoaW4gVW5pa3JhZnQu
IFdlIGludHJvZHVjZSB0aGUgZm9sbG93aW5nCmNoYW5nZXMgYXMgYSBwYXJ0IG9mIHRoZSB1cGdy
YWRlLgoKLSBVc2UgdGhlIGxhdGVzdCBLY29uZmlnWzFdIGNoYW5nZSBmcm9tIHRoZSBsaW51eCBr
ZXJuZWwgdjUuMgotIEludHJvZHVjZSB3aWxkY2FyZCBvcGVyYXRpb24gaW4gdGhlIGtjb25maWcg
YnVpbGQgc3lzdGVtCi0gQWRkIHN1cHBvcnQgZm9yIHRoZSBrY29uZmlnbGliWzJdLCBhIHB5dGhv
biBiYXNlZCB0b29sIHRvIHBlcmZvcm0ga2NvbmZpZy4KLSBUaGUgcHl0aG9uIG1lbnVjb25maWcK
LSBQcmVwcm9jZXNzIENvbmZpZy51ayB0byBkZXRlcm1pbmUgdGhlIGxpYnJhcmllcyB0byBiZSBj
b25maWd1cmVkCi0gUHJlcHJvY2VzcyBDb25maWcudWsgdG8gZGV0ZXJtaW5lIHRoZSBwbGF0Zm9y
bSB0byBiZSBjb25maWd1cmVkLgotIFByZXByb2Nlc3MgQ29uZmlnLnVrIHRvIGRldGVybWluZSB0
aGUgaG9zdCBhcmNoaXRlY3R1cmUuCgpUaGUgcGF0Y2ggc2V0IGFsc28gY2hhbmdlcyB0aGUgY3Vy
cmVudCB3b3JraW5nIGRpcmVjdG9yeSBvZiB0aGUgYnVpbGQgZnJvbSB0aGUKVW5pa3JhZnQgc291
cmNlIHRyZWUgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeSBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9u
LgoKQ2hhbmdlcyBzaW5jZSB2MjoKLSBUaGUgdjIgb2YgdGhlIHNlcmllcyBkaWQgbm90IGFwcGx5
IGNsZWFubHkgb24gdGhlIHN0YWdpbmcgYnJhbmNoCi0gUHJlZml4IHRoZSBleHRlcm5hbCBwbGF0
Zm9ybSBhbmQgZXh0ZXJuYWwgbGlicmFyaWVzIHdpdGggQ09ORklHX1VLX0JBU0UKClsxXSBodHRw
czovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9rYnVpbGQva2NvbmZpZy1tYWNyby1s
YW5ndWFnZS5odG1sClsyXSBodHRwczovL2x3bi5uZXQvQXJ0aWNsZXMvNzUzMTk2LwoKClNoYXJh
biBTYW50aGFuYW0gKDIzKToKICBrY29uZmlnOiBJbXBvcnQga2NvbmZpZyBmcm9tIExpbnV4IGtl
cm5lbAogIGtjb25maWc6IEludHJvZHVjZSBSRUFETUUudW5pa3JhZnQKICBrY29uZmlnOiBSZXBs
YWNlIHRoZSBrZXJuZWwgd2l0aCBVbmlrcmFmdAogIEtjb25maWc6IEltcG9ydGluZyBleGlzdGlu
ZyBNYWtlZmlsZS5icgogIGtidWlsZDogQWRkIGJ1aWxkIGhlbHBlciBmdW5jdGlvbiBmcm9tIExp
bnV4CiAga2NvbmZpZzogUmVtb3ZpbmcgdGhlIGdlbmVyaWMgcnVsZQogIGtjb25maWc6IEltcG9y
dCBmaXhkZXAgZnJvbSBMaW51eCBrZXJuZWwKICBidWlsZDogQWRkIFVuaWtyYWZ0IHNwZWNpZmlj
IGZpeGRlcCBoZWFkZXIKICBidWlsZDogUmVtb3ZlIGltcGxpY2l0IHJ1bGVzCiAgYnVpbGQ6IElt
cG9ydCB0aGUga2NvbmZpZyBob3N0IHJ1bGVzIGZyb20gTGludXgKICBrY29uZmlnOiBGaXhkZXAg
YW5kIGhvc3QgZmxhZ3MKICBrY29uZmlnOiBTdXBwb3J0IGdsb2IgaW4ga2NvbmZpZwogIEtjb25m
aWc6IFNoaWZ0aW5nIHRvIHRoZSBuZXcgS2NvbmZpZyBzeXN0ZW0KICBrY29uZmlnOiBJbXBvcnQg
a2NvbmZpZ2xpYgogIGJ1aWxkOiBVc2Uga2NvbmZpZ2xpYiBmcm9tIFVuaWtyYWZ0CiAgUmVwbGFj
ZSB0aGUgc2lsZW50b2xkY29uZmlnIHdpdGggc3luY2NvbmZpZwogIGxpYjogVXNlIGdsb2IgaW5z
dGVhZCBvZiBhZGRpbmcgZWFjaCBsaWIKICBidWlsZDogUHJlLXByb2Nlc3MgQ29uZmlnLnVrIHdp
dGhpbiBrY29uZmlnCiAgYnVpbGQ6IFN1cHBvcnQgc3luY2NvbmZpZyB3aXRoIGtjb25maWdsaWIK
ICBidWlsZDogU3dpdGNoIGJ1aWxkIGRpcmVjdG9yeSBhcyBDVVJESVIKICBrY29uZmlnOiBEZXRl
cm1pbmUgdGhlIGRlZmF1bHQgYXJjaCBmcm9tIENDCiAga2NvbmZpZzogUmVtb3ZlIHRoZSBvbGQg
a2NvbmZpZwogIGtjb25maWc6IFJlcGxhY2UgdGhlIGtjb25maWcgd2l0aCB0aGUgdXBkYXRlCgog
Q29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0
ICstCiBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAyMjUgKy0KIGFyY2gvQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgICAxMCArLQogbGliL0NvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDM0IC0KIHBsYXQvQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAgNCAtCiBzdXBwb3J0L2J1aWxkL01ha2VmaWxlLnJ1bGVzICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDM2NyArLQogc3VwcG9ydC9rY29uZmlnL01ha2VmaWxl
LmJyICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMyICstCiBzdXBwb3J0L2tjb25maWcvTWFr
ZWZpbGUucnVsZXMgICAgICAgICAgICAgICAgICAgICB8ICAgODQgKwogc3VwcG9ydC9rY29uZmln
L1BPVEZJTEVTLmluICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEyIC0KIHN1cHBvcnQva2Nv
bmZpZy9SRUFETUUudW5pa3JhZnQgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3VwcG9y
dC9rY29uZmlnL2NoZWNrLnNoICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE0IC0KIHN1
cHBvcnQva2NvbmZpZy9jb25mLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyOSAr
LQogc3VwcG9ydC9rY29uZmlnL2NvbmZkYXRhLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
NTMxICstCiBzdXBwb3J0L2tjb25maWcvZXhwci5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICA0NzMgKy0KIHN1cHBvcnQva2NvbmZpZy9leHByLmggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDExOSArLQogc3VwcG9ydC9rY29uZmlnL2ZpeGRlcC5jICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDU5ICstCiBzdXBwb3J0L2tjb25maWcvZm9vLmggICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTIgLQogc3VwcG9ydC9rY29uZmlnL2djb25mLWNmZy5zaCAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDMwICsKIHN1cHBvcnQva2NvbmZpZy9nY29uZi5jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExNiArLQogc3VwcG9ydC9rY29uZmlnL2ltYWdl
cy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDM0ICstCiBzdXBwb3J0L2tjb25maWcv
aW1hZ2VzLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzMgKwogc3VwcG9ydC9rY29u
ZmlnL2t4Z2V0dGV4dC5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjM1IC0KIHN1cHBvcnQv
a2NvbmZpZy9sZXhlci5sICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ5OCArKwogc3Vw
cG9ydC9rY29uZmlnL2xpc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICst
CiBzdXBwb3J0L2tjb25maWcvbGtjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
NjUgKy0KIHN1cHBvcnQva2NvbmZpZy9sa2NfcHJvdG8uaCAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDEwNSArLQogc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nLy5naXRpZ25vcmUgICAgICAgICAg
ICAgICAgfCAgICA0IC0KIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcg
ICAgICAgICAgIHwgICAgMiArLQogc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrLWx4ZGlh
bG9nLnNoICAgICAgICAgfCAgIDkxIC0KIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9jaGVja2xp
c3QuYyAgICAgICAgICAgICAgIHwgICAyMyArLQogc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2Rp
YWxvZy5oICAgICAgICAgICAgICAgICAgfCAgIDI1ICstCiBzdXBwb3J0L2tjb25maWcvbHhkaWFs
b2cvaW5wdXRib3guYyAgICAgICAgICAgICAgICB8ICAgMjQgKy0KIHN1cHBvcnQva2NvbmZpZy9s
eGRpYWxvZy9tZW51Ym94LmMgICAgICAgICAgICAgICAgIHwgICAyOSArLQogc3VwcG9ydC9rY29u
ZmlnL2x4ZGlhbG9nL3RleHRib3guYyAgICAgICAgICAgICAgICAgfCAgIDE3ICstCiBzdXBwb3J0
L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jICAgICAgICAgICAgICAgICAgICB8ICAgMTcgKy0KIHN1
cHBvcnQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jICAgICAgICAgICAgICAgICAgIHwgICAxOSAr
LQogc3VwcG9ydC9rY29uZmlnL21jb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDQ3ICsKIHN1cHBvcnQva2NvbmZpZy9tY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDE4NCArLQogc3VwcG9ydC9rY29uZmlnL21lbnUuYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgMzE1ICstCiBzdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmlnLnNoICAgICAgICAg
ICAgICAgICAgICB8ICAxMDMgKy0KIHN1cHBvcnQva2NvbmZpZy9uY29uZi1jZmcuc2ggICAgICAg
ICAgICAgICAgICAgICAgIHwgICA0NyArCiBzdXBwb3J0L2tjb25maWcvbmNvbmYuYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAxODQgKy0KIHN1cHBvcnQva2NvbmZpZy9uY29uZi5ndWku
YyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMCArLQogc3VwcG9ydC9rY29uZmlnL25jb25m
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEwICstCiBzdXBwb3J0L2tjb25maWcv
cGFyc2VyLnkgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3MzEgKysKIC4uLi8wMS1rY29u
ZmlnLWtlcm5lbC10by1idWlsZHJvb3QtdW5pa29yZS5wYXRjaCAgIHwgICA5OCAtCiAuLi4vcGF0
Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRjaCAgICB8ICAgNzYgKwogc3Vw
cG9ydC9rY29uZmlnL3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyICAgICAgfCAgIDU5ICsK
IC4uLi9wYXRjaGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsIHwgIDEw
MiArCiBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlICAgICB8
ICAgMjYgKwogLi4uL2tjb25maWcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRl
ciAgfCAgIDEyICsKIC4uLi9wYXRjaGVzLzA2LWJyLWJ1aWxkLXN5c3RlbS1pbnRlZ3JhdGlvbi5w
YXRjaCAgIHwgICAzNSAtCiBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGlj
aXQtcnVsZXMgICB8ICAgMTMgKwogc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDctaW1wb3J0LWhv
c3QtdG9vbHMtcnVsZXMgfCAgMTQyICsKIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA4LWZpeGRl
cC1hbmQtY29uZmlnLWZsYWcgIHwgICAxOSArCiBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOS1z
dXBwb3J0LWdsb2ItaW4ta2NvbmZpZyB8ICAgNzAgKwogc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMv
MTAtYnItYnVpbGQtc3lzdGVtLnBhdGNoICAgfCAgIDgwIC0KIC4uLi9wYXRjaGVzLzExLXVzZS1t
a3RlbXAtZm9yLWx4ZGlhbG9nLnBhdGNoICAgICAgIHwgICAxNyAtCiAuLi4va2NvbmZpZy9wYXRj
aGVzLzEyLWZpeC1nbGFkZS1maWxlLXBhdGgucGF0Y2ggICB8ICAgMTcgLQogLi4uL3BhdGNoZXMv
MTQtc3VwcG9ydC1vdXQtb2YtdHJlZS1jb25maWcucGF0Y2ggICAgfCAgMjA3IC0KIC4uLi9rY29u
ZmlnL3BhdGNoZXMvMTUtZml4LXFjb25mLW1vYy1ydWxlLnBhdGNoICAgIHwgICAyNCAtCiAuLi5k
aWFsb2ctZ2V0LW5jdXJzZXMtQ0ZMQUdTLXdpdGgtcGtnLWNvbmZpZy5wYXRjaCB8ICAgNTAgLQog
c3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvc2VyaWVzICAgICAgICAgICAgICAgICAgICAgfCAgICA4
IC0KIHN1cHBvcnQva2NvbmZpZy9wcmVwcm9jZXNzLmMgICAgICAgICAgICAgICAgICAgICAgIHwg
IDU3MyArKwogc3VwcG9ydC9rY29uZmlnL3Fjb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDMyICsKIHN1cHBvcnQva2NvbmZpZy9xY29uZi5jYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDgwOSArKy0KIHN1cHBvcnQva2NvbmZpZy9xY29uZi5oICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDE1MyArLQogc3VwcG9ydC9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmln
LnBsICAgICAgICAgICAgICAgfCAgIDY0ICstCiBzdXBwb3J0L2tjb25maWcvc3ltYm9sLmMgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAzNDIgKy0KIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9h
dXRvX3N1Ym1lbnUvS2NvbmZpZyAgICAgICAgIHwgICA1MiArCiBzdXBwb3J0L2tjb25maWcvdGVz
dHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5ICAgICB8ICAgMTMgKwogc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQgfCAgIDEwICsKIHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9jaG9pY2UvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA1NiArCiBzdXBwb3J0
L2tjb25maWcvdGVzdHMvY2hvaWNlL19faW5pdF9fLnB5ICAgICAgICAgICB8ICAgNDEgKwogLi4u
L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcgICAgfCAgICA1ICsK
IC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnICAgIHwgICAg
OSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZyB8
ICAgIDUgKwogLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcg
ICAgfCAgICA5ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0
ZG91dCAgIHwgICAxMCArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29u
ZmlnICAgICAgICB8ICAgIDIgKwogLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhw
ZWN0ZWRfc3Rkb3V0ICAgfCAgIDE1ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93
aXRoX21fZGVwL0tjb25maWcgIHwgICAyMSArCiAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhf
bV9kZXAvX19pbml0X18ucHkgICAgICB8ICAgMTYgKwogLi4uL2tjb25maWcvdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnICAgfCAgICAyICsKIC4uLi90ZXN0cy9jaG9pY2VfdmFs
dWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcgIHwgICAgMyArCiAuLi4vdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0ICB8ICAgIDQgKwogc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2NvbmZ0ZXN0LnB5ICAgICAgICAgICAgICAgICAgfCAgMjkxICsKIHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnICAgIHwgICA2MyArCiAuLi4v
a2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weSAgICB8ICAgMTAgKwog
Li4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVyciAgICAgICAgfCAgIDM4
ICsKIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnICAgIHwg
ICAgMiArCiAuLi4va2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzEg
ICB8ICAgIDUgKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5p
bmMyICAgfCAgICA0ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25m
aWcuaW5jMyAgIHwgICAgMiArCiAuLi4va2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9f
X2luaXRfXy5weSAgICB8ICAgMTEgKwogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVj
dGVkX3N0ZGVyciAgICAgICAgfCAgICA2ICsKIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9j
aG9pY2UvS2NvbmZpZyAgICAgICAgIHwgICAyNSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvaW50
ZXJfY2hvaWNlL19faW5pdF9fLnB5ICAgICB8ICAgMTUgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2ludGVyX2Nob2ljZS9kZWZjb25maWcgICAgICAgfCAgICAxICsKIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnIHwgICAgNCArCiBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnICB8ICAgMzkgKwogLi4uL2tjb25m
aWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weSAgfCAgIDE1ICsKIHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZyAgIHwgICAgMyArCiAu
Li4vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQgICAgICB8ICAgMTAg
KwogLi4uL2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcgICAgfCAg
IDE2ICsKIC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkgICAgICAg
IHwgICAyMCArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2Nv
bmZpZyB8ICAgIDEgKwogLi4uL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9j
b25maWcgICAgfCAgICA1ICsKIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9m
dW5jL0tjb25maWcgIHwgICAyNyArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMv
X19pbml0X18ucHkgICAgICB8ICAgIDkgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9m
dW5jL2V4cGVjdGVkX3N0ZGVyciAgfCAgICA1ICsKIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0
aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQgIHwgICAgMSArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9j
aXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZyAgICB8ICAgIDUgKwogLi4uL3ByZXByb2Nlc3MvY2ly
Y3VsYXJfZXhwYW5zaW9uL19faW5pdF9fLnB5ICAgICAgfCAgIDExICsKIC4uLi9wcmVwcm9jZXNz
L2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIgIHwgICAgMSArCiBzdXBwb3J0L2tj
b25maWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZyAgICB8ICAgNDQgKwogLi4uL2tj
b25maWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkgICAgfCAgICA4ICsKIC4u
Li90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAxMCAr
CiBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnICB8ICAg
NTMgKwogLi4uL2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weSAg
fCAgICA4ICsKIC4uLi90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVyciAg
ICAgIHwgICAgOSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHl0ZXN0LmluaSAgICAgICAgICAg
ICAgICAgICB8ICAgIDcgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2lj
ZS9LY29uZmlnICAgfCAgIDM1ICsKIC4uLi9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2lj
ZS9fX2luaXRfXy5weSAgIHwgICAxNyArCiAuLi4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4
cGVjdGVkX3N0ZG91dDAgICAgICB8ICAgIDIgKwogLi4uL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2lj
ZS9leHBlY3RlZF9zdGRvdXQxICAgICAgfCAgICA0ICsKIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9j
aG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MiAgICAgIHwgICAgNSArCiBzdXBwb3J0L2tjb25maWcvdXRp
bC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDYgKy0KIHN1cHBvcnQva2NvbmZp
Zy96Y29uZi5ncGVyZiAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NyAtCiBzdXBwb3J0L2tj
b25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgICAgICAgICAgICAgICB8ICAyODYgLQogc3VwcG9y
dC9rY29uZmlnL3pjb25mLmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzYzIC0KIHN1
cHBvcnQva2NvbmZpZy96Y29uZi5sZXguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMjgyMCAr
KysrKysrKwogc3VwcG9ydC9rY29uZmlnL3pjb25mLmxleC5jX3NoaXBwZWQgICAgICAgICAgICAg
ICAgfCAyNDIwIC0tLS0tLS0KIHN1cHBvcnQva2NvbmZpZy96Y29uZi50YWIuYyAgICAgICAgICAg
ICAgICAgICAgICAgIHwgMjUwNCArKysrKysrCiBzdXBwb3J0L2tjb25maWcvemNvbmYudGFiLmNf
c2hpcHBlZCAgICAgICAgICAgICAgICB8IDI1MzggLS0tLS0tLQogc3VwcG9ydC9rY29uZmlnL3pj
b25mLnkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzMzIC0tCiBzdXBwb3J0L2tjb25m
aWdsaWIvTElDRU5TRS50eHQgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKwogc3VwcG9ydC9r
Y29uZmlnbGliL01BTklGRVNULmluICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIHN1cHBv
cnQva2NvbmZpZ2xpYi9SRUFETUUucnN0ICAgICAgICAgICAgICAgICAgICAgIHwgIDgwNiArKysK
IHN1cHBvcnQva2NvbmZpZ2xpYi9hbGxkZWZjb25maWcucHkgICAgICAgICAgICAgICAgIHwgICAy
NyArCiBzdXBwb3J0L2tjb25maWdsaWIvYWxsbW9kY29uZmlnLnB5ICAgICAgICAgICAgICAgICB8
ICAgNDYgKwogc3VwcG9ydC9rY29uZmlnbGliL2FsbG5vY29uZmlnLnB5ICAgICAgICAgICAgICAg
ICAgfCAgIDQ1ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9hbGx5ZXNjb25maWcucHkgICAgICAgICAg
ICAgICAgIHwgICA1NiArCiBzdXBwb3J0L2tjb25maWdsaWIvZGVmY29uZmlnLnB5ICAgICAgICAg
ICAgICAgICAgICB8ICAgNDMgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL0ttZW51Y29u
ZmlnICAgICAgICAgICAgfCAgMTAyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9hbGxu
b2NvbmZpZ193YWxrLnB5ICAgIHwgICA2NiArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMv
ZGVmY29uZmlnX29sZGNvbmZpZy5weSB8ICAgMzkgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4YW1w
bGVzL2R1bXB2YXJzLnB5ICAgICAgICAgICAgfCAgIDE1ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9l
eGFtcGxlcy9ldmFsX2V4cHIucHkgICAgICAgICAgIHwgICAyNCArCiBzdXBwb3J0L2tjb25maWds
aWIvZXhhbXBsZXMvZmluZF9zeW1ib2wucHkgICAgICAgICB8ICAxMTIgKwogc3VwcG9ydC9rY29u
ZmlnbGliL2V4YW1wbGVzL2hlbHBfZ3JlcC5weSAgICAgICAgICAgfCAgIDY0ICsKIHN1cHBvcnQv
a2NvbmZpZ2xpYi9leGFtcGxlcy9rY29uZmlnbGliLnB5ICAgICAgICAgIHwgICAgMSArCiBzdXBw
b3J0L2tjb25maWdsaWIvZXhhbXBsZXMvbGlzdF91bmRlZmluZWQucHkgICAgICB8ICAxNTYgKwog
c3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL21lbnVjb25maWdfZXhhbXBsZS5weSAgfCAgMzQx
ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9tZXJnZV9jb25maWcucHkgICAgICAgIHwg
IDEzMyArCiBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfY29uZmlnX3RyZWUucHkg
ICB8ICAxOTkgKwogc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL3ByaW50X3N5bV9pbmZvLnB5
ICAgICAgfCAgIDU0ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9wcmludF90cmVlLnB5
ICAgICAgICAgIHwgICA3NSArCiBzdXBwb3J0L2tjb25maWdsaWIvZ2VuY29uZmlnLnB5ICAgICAg
ICAgICAgICAgICAgICB8ICAxMzIgKwogc3VwcG9ydC9rY29uZmlnbGliL2d1aWNvbmZpZy5weSAg
ICAgICAgICAgICAgICAgICAgfCAyMzE2ICsrKysrKysKIHN1cHBvcnQva2NvbmZpZ2xpYi9rY29u
ZmlnbGliLnB5ICAgICAgICAgICAgICAgICAgIHwgNzAxOCArKysrKysrKysrKysrKysrKysrKwog
c3VwcG9ydC9rY29uZmlnbGliL2xpc3RuZXdjb25maWcucHkgICAgICAgICAgICAgICAgfCAgIDQ3
ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9tYWtlZmlsZS5wYXRjaCAgICAgICAgICAgICAgICAgIHwg
ICA0OCArCiBzdXBwb3J0L2tjb25maWdsaWIvbWVudWNvbmZpZy5weSAgICAgICAgICAgICAgICAg
ICB8IDMyNjQgKysrKysrKysrCiBzdXBwb3J0L2tjb25maWdsaWIvb2xkY29uZmlnLnB5ICAgICAg
ICAgICAgICAgICAgICB8ICAyNDYgKwogc3VwcG9ydC9rY29uZmlnbGliL29sZGRlZmNvbmZpZy5w
eSAgICAgICAgICAgICAgICAgfCAgIDI4ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi9zYXZlZGVmY29u
ZmlnLnB5ICAgICAgICAgICAgICAgIHwgICA0OSArCiBzdXBwb3J0L2tjb25maWdsaWIvc2V0Y29u
ZmlnLnB5ICAgICAgICAgICAgICAgICAgICB8ICAgOTIgKwogc3VwcG9ydC9rY29uZmlnbGliL3Nl
dHVwLmNmZyAgICAgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKIHN1cHBvcnQva2NvbmZpZ2xp
Yi9zZXR1cC5weSAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwMCArCiBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS2FwcGVuZCAgICAgICAgICAgICAgICAgICB8ICAgMTIgKwogc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0thc3NpZ25hYmxlICAgICAgICAgICAgICAgfCAgMjMwICsKIHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LY2hvaWNlICAgICAgICAgICAgICAgICAgIHwgIDE5OCArCiBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19leGlzdGVudCAgICAgICB8ICAgIDgg
Kwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnRfYnV0X24gfCAg
IDEwICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX25vbmV4aXN0ZW50ICAg
IHwgICAgNSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19zcmN0cmVlICAg
ICAgICB8ICAgIDUgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBjb3B5ICAgICAgICAg
ICAgICAgICAgfCAgMTczICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDAgICAg
ICAgICAgICAgICAgIHwgICAgMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3Ax
ICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBs
b29wMTAgICAgICAgICAgICAgICAgfCAgIDQ4ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
ZGVwbG9vcDIgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2RlcGxvb3AzICAgICAgICAgICAgICAgICB8ICAgIDMgKwogc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tkZXBsb29wNCAgICAgICAgICAgICAgICAgfCAgICA3ICsKIHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LZGVwbG9vcDUgICAgICAgICAgICAgICAgIHwgICAgNyArCiBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RlcGxvb3A2ICAgICAgICAgICAgICAgICB8ICAgIDYgKwogc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNyAgICAgICAgICAgICAgICAgfCAgIDExICsKIHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDggICAgICAgICAgICAgICAgIHwgICAgOCAr
CiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A5ICAgICAgICAgICAgICAgICB8ICAg
IDcgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkaXJkZXAgICAgICAgICAgICAgICAgICAg
fCAgIDMwICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXNjYXBlICAgICAgICAgICAgICAg
ICAgIHwgICAgMyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2V2YWwgICAgICAgICAgICAg
ICAgICAgICB8ICAgMzQgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tleHByX2l0ZW1zICAg
ICAgICAgICAgICAgfCAgIDExICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaGVscCAgICAg
ICAgICAgICAgICAgICAgIHwgICA1MCArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2lmcmVt
b3ZhbCAgICAgICAgICAgICAgICB8ICAgOTkgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tp
bXBseSAgICAgICAgICAgICAgICAgICAgfCAgMTQ1ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9LaW5jbHVkZV9wYXRoICAgICAgICAgICAgIHwgICAxMiArCiBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzEgICB8ICAgMTIgKwogc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8yICAgfCAgIDExICsKIHN1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9LaXRlbWxpc3RzICAgICAgICAgICAgICAgIHwgICAzNiArCiBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvS2xvY2F0aW9uICAgICAgICAgICAgICAgICB8ICAgNzIgKwogc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tsb2NhdGlvbl9zb3VyY2VkICAgICAgICAgfCAgIDE4ICsK
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWFpbm1lbnUgICAgICAgICAgICAgICAgIHwgICAg
NSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21lbnVjb25maWcgICAgICAgICAgICAgICB8
ICAgMzcgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNjICAgICAgICAgICAgICAgICAg
ICAgfCAgIDgyICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWlzc2luZ3Jzb3VyY2UgICAg
ICAgICAgIHwgICAgMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc3Npbmdzb3VyY2Ug
ICAgICAgICAgICB8ICAgIDEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tvcmRlciAgICAg
ICAgICAgICAgICAgICAgfCAgIDM1ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcHJlcHJv
Y2VzcyAgICAgICAgICAgICAgIHwgIDE0NyArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3Jh
bmdlICAgICAgICAgICAgICAgICAgICB8ICAxMzMgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tyZWN1cnNpdmUxICAgICAgICAgICAgICAgfCAgICAxICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90
ZXN0cy9LcmVjdXJzaXZlMiAgICAgICAgICAgICAgIHwgICAgMSArCiBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS3JlZmVyZW5jZWQgICAgICAgICAgICAgICB8ICAgNjMgKwogc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tyZWxhdGlvbiAgICAgICAgICAgICAgICAgfCAgIDM2ICsKIHN1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9LcmVwciAgICAgICAgICAgICAgICAgICAgIHwgICA2NCArCiBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS3N0ciAgICAgICAgICAgICAgICAgICAgICB8ICAyOTMgKwog
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0t1bmRlZiAgICAgICAgICAgICAgICAgICAgfCAgIDIz
ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdXNlcmZ1bmN0aW9ucyAgICAgICAgICAgIHwg
ICAxMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3Zpc2liaWxpdHkgICAgICAgICAgICAg
ICB8ICAzNDIgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19pbmRlbnRlZCAgICAg
ICAgICAgfCAgICAzICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfc2V0X2Jvb2wg
ICAgICAgICAgIHwgICAgMSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvY29uZmlnX3NldF9z
dHJpbmcgICAgICAgICB8ICAgIDEgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2RlZmNvbmZp
Z18xICAgICAgICAgICAgICAgfCAgICAwCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvZGVmY29u
ZmlnXzIgICAgICAgICAgICAgICB8ICAgIDAKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9lbXB0
eSAgICAgICAgICAgICAgICAgICAgIHwgICAgMAogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2tj
b25maWdmdW5jdGlvbnMucHkgICAgICAgfCAgIDE0ICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9yZWx0ZXN0ICAgICAgICAgICAgICAgICAgIHwgICA1MSArCiBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18yICAgICB8ICAgIDEgKwogc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL3N1Yi9LY29uZmlnX3N5bWxpbmtfMyAgICAgfCAgICAyICsKIHN1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dyc291cmNlZDEgIHwgICAgMSArCiBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWQyICB8ICAgIDEgKwogc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3NvdXJjZWQxICAgfCAgICAxICsK
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMiAgIHwgICAg
MSArCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9yc291cmNlZCAgICB8
ICAgIDIgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9kZWZjb25maWdfaW5fc3ViICAg
ICAgfCAgICAwCiBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL3N1Yi9LY29uZmlnX3N5bWxp
bmtfMSB8ICAgIDIgKwogc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N5bWxpbmsgICAgICAgICAg
ICAgICAgICAgfCAgICAxICsKIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0c3VpdGUucHkgICAgICAg
ICAgICAgICAgICAgIHwgMzEzNiArKysrKysrKysKIHN1cHBvcnQvc2NyaXB0cy9jb25maWd1cGRh
dGUgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQogc3VwcG9ydC9zY3JpcHRzL3VrX2J1
aWxkX2NvbmZpZ3VyZS5zaCAgICAgICAgICAgICAgfCAgMTAyICsKIDI0MSBmaWxlcyBjaGFuZ2Vk
LCAzMzM3NyBpbnNlcnRpb25zKCspLCA5NjA3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5ydWxlcwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy9QT1RGSUxFUy5pbgogZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2Nv
bmZpZy9jaGVjay5zaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9mb28uaAog
Y3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9nY29uZi1jZmcuc2gKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvaW1hZ2VzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcva3hnZXR0ZXh0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvbGV4ZXIubAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9seGRpYWxv
Zy8uZ2l0aWdub3JlCiBkZWxldGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9n
L2NoZWNrLWx4ZGlhbG9nLnNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnL21j
b25mLWNmZy5zaAogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9uY29uZi1jZmcu
c2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGFyc2VyLnkKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by1i
dWlsZHJvb3QtdW5pa29yZS5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtl
ZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZpeGRlcC1oZWFkZXIKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNi1ici1idWlsZC1zeXN0ZW0t
aW50ZWdyYXRpb24ucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0
Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVsZXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcwogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOS1zdXBwb3J0LWds
b2ItaW4ta2NvbmZpZwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVz
LzEwLWJyLWJ1aWxkLXN5c3RlbS5wYXRjaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy9wYXRjaGVzLzExLXVzZS1ta3RlbXAtZm9yLWx4ZGlhbG9nLnBhdGNoCiBkZWxldGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMTItZml4LWdsYWRlLWZpbGUtcGF0aC5w
YXRjaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzE0LXN1cHBv
cnQtb3V0LW9mLXRyZWUtY29uZmlnLnBhdGNoCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3BhdGNoZXMvMTUtZml4LXFjb25mLW1vYy1ydWxlLnBhdGNoCiBkZWxldGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMTcta2NvbmZpZy1seGRpYWxvZy1nZXQtbmN1
cnNlcy1DRkxBR1Mtd2l0aC1wa2ctY29uZmlnLnBhdGNoCiBkZWxldGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3BhdGNoZXMvc2VyaWVzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3ByZXByb2Nlc3MuYwogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9x
Y29uZi1jZmcuc2gKIG1vZGUgY2hhbmdlIDEwMDY0NCA9PiAxMDA3NTUgc3VwcG9ydC9rY29uZmln
L3N0cmVhbWxpbmVfY29uZmlnLnBsCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0CiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9LY29uZmlnCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4
cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9j
aG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmln
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sw
X2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dp
dGhfbV9kZXAvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2Nv
bmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFs
dWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvdGVzdHMvY29uZnRlc3QucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9l
eHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzEKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMy
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcuaW5jMwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnIKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL19f
aW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVy
X2Nob2ljZS9kZWZjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9fX2luaXRf
Xy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNl
X3dpdGhfZGVwL2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5t
ZXQvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
bm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9m
dW5jL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJy
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVp
bHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhw
YW5zaW9uL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29u
ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3Mv
ZXNjYXBlL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9f
X2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVw
cm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9weXRlc3QuaW5pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9p
Y2UvZXhwZWN0ZWRfc3Rkb3V0MAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MgogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96Y29uZi5ncGVyZgogZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZAogZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96Y29uZi5sCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLmxleC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnL3pjb25mLmxleC5jX3NoaXBwZWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvemNvbmYudGFiLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcv
emNvbmYudGFiLmNfc2hpcHBlZAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96
Y29uZi55CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL0xJQ0VOU0UudHh0
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL01BTklGRVNULmluCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL1JFQURNRS5yc3QKIGNyZWF0ZSBtb2Rl
IDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvYWxsZGVmY29uZmlnLnB5CiBjcmVhdGUgbW9kZSAx
MDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2FsbG1vZGNvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAw
NzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9hbGxub2NvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNzU1
IHN1cHBvcnQva2NvbmZpZ2xpYi9hbGx5ZXNjb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBz
dXBwb3J0L2tjb25maWdsaWIvZGVmY29uZmlnLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL2V4YW1wbGVzL0ttZW51Y29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2FsbG5vY29uZmlnX3dhbGsucHkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZGVmY29uZmlnX29sZGNvbmZpZy5w
eQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9kdW1wdmFy
cy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9ldmFs
X2V4cHIucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMv
ZmluZF9zeW1ib2wucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhh
bXBsZXMvaGVscF9ncmVwLnB5CiBjcmVhdGUgbW9kZSAxMjAwMDAgc3VwcG9ydC9rY29uZmlnbGli
L2V4YW1wbGVzL2tjb25maWdsaWIucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvZXhhbXBsZXMvbGlzdF91bmRlZmluZWQucHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBw
b3J0L2tjb25maWdsaWIvZXhhbXBsZXMvbWVudWNvbmZpZ19leGFtcGxlLnB5CiBjcmVhdGUgbW9k
ZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL21lcmdlX2NvbmZpZy5weQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9wcmludF9jb25maWdf
dHJlZS5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9w
cmludF9zeW1faW5mby5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9l
eGFtcGxlcy9wcmludF90cmVlLnB5CiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmln
bGliL2dlbmNvbmZpZy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9n
dWljb25maWcucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIva2NvbmZp
Z2xpYi5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9saXN0bmV3Y29u
ZmlnLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL21ha2VmaWxlLnBh
dGNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL21lbnVjb25maWcucHkK
IGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvb2xkY29uZmlnLnB5CiBjcmVh
dGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL29sZGRlZmNvbmZpZy5weQogY3JlYXRl
IG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9zYXZlZGVmY29uZmlnLnB5CiBjcmVhdGUg
bW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL3NldGNvbmZpZy5weQogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9zZXR1cC5jZmcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvc2V0dXAucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2FwcGVuZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LYXNzaWduYWJsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LY2hvaWNlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19leGlzdGVudF9idXRfbgogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX25vbmV4aXN0ZW50CiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfc3JjdHJl
ZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwY29weQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AxCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMTAKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AyCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDQKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A1CiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNgogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDcKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A4CiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGlyZGVwCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tlc2NhcGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2V2YWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2V4cHJfaXRlbXMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2hlbHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2lmcmVtb3ZhbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9LaW1wbHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2lu
Y2x1ZGVfcGF0aAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
aW5jbHVkZV9wYXRoX3NvdXJjZWRfMQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LaW5jbHVkZV9wYXRoX3NvdXJjZWRfMgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaXRlbWxpc3RzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tsb2NhdGlvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LbG9jYXRpb25fc291cmNlZAogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWFpbm1lbnUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21lbnVjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvS21pc3Npbmdyc291cmNlCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNzaW5nc291cmNlCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tvcmRlcgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LcHJlcHJvY2VzcwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LcmFuZ2UKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS3JlY3Vyc2l2ZTEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS3JlY3Vyc2l2ZTIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS3JlZmVyZW5jZWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS3JlbGF0aW9uCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tyZXByCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tzdHIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S3VuZGVmCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0t1c2Vy
ZnVuY3Rpb25zCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0t2
aXNpYmlsaXR5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2Nv
bmZpZ19pbmRlbnRlZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9jb25maWdfc2V0X2Jvb2wKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvY29uZmlnX3NldF9zdHJpbmcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvZGVmY29uZmlnXzEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvZGVmY29uZmlnXzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvZW1wdHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMva2NvbmZpZ2Z1bmN0aW9ucy5weQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9yZWx0ZXN0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL3N1Yi9LY29uZmlnX3N5bWxpbmtfMgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2NvbmZpZ19zeW1saW5rXzMKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWQxCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25f
Z3Jzb3VyY2VkMgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9z
dWIvS2xvY2F0aW9uX2dzb3VyY2VkMQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX3Jzb3VyY2VkCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9kZWZjb25maWdfaW5fc3ViCiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9zdWIvS2NvbmZp
Z19zeW1saW5rXzEKIGNyZWF0ZSBtb2RlIDEyMDAwMCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
c3ltbGluawogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0c3VpdGUu
cHkKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29uZmlndXJl
LnNoCgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYB-0006Ys-Nj; Thu, 19 Sep 2019 09:16:31 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYA-0006YZ-Mf
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:30 +0000
X-Inumbo-ID: 270f7354-dabe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 270f7354-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:25 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4251AF2033;
 Thu, 19 Sep 2019 11:16:24 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id YMtdL-63MQyI; Thu, 19 Sep 2019 11:16:24 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1250EF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:22 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:20 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:46 +0200
Message-ID: <20190919091607.23327-3-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 02/23] kconfig: Introduce
 README.unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQgfCAyMSArKysrKysr
KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQKCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdCBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvUkVBRE1FLnVuaWtyYWZ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmRlMzdmOWYKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51
bmlrcmFmdApAQCAtMCwwICsxLDIxIEBACitUaGlzIGlzIGEgY29weSBvZiB0aGUga2NvbmZpZyBj
b2RlIGluIHRoZSBrZXJuZWwgKGN1cnJlbnRseSB2NS4yKSB0d2Vha2VkCit0byBzdWl0IFVuaWty
YWZ0LgorCitUbyB1cGRhdGUgKGZyb20gbGludXgpOgorCWNwIC1yIC91c3Ivc3JjL2xpbnV4L3Nj
cmlwdHMva2NvbmZpZyBzdXBwb3J0L2tjb25maWcubmV3CisJY2Qgc3VwcG9ydC9rY29uZmlnLm5l
dworCWNwIC1hIC4uL2tjb25maWcvcGF0Y2hlcyAuLi9rY29uZmlnL1JFQURNRS51bmlrcmFmdCAu
Li9rY29uZmlnLy5naXRpZ25vcmUgLgorCXF1aWx0IHB1c2ggLWEKKwkjIEZpeCBhbnkgY29uZmxp
Y3QKKwljZCAuLgorCXJtIC1yZiBrY29uZmlnCisJbXYga2NvbmZpZy5uZXcga2NvbmZpZworCitU
aGVuIHZlcmlmeSB0aGUgdG9wbGV2ZWwgdGFyZ2V0cyB3b3JrOgorCWNvbmZpZworCWRlZmNvbmZp
ZworCW1lbnVjb25maWcKKwl4Y29uZmlnCisJZ2NvbmZpZworCW9sZGNvbmZpZworCXFjb25maWcK
LS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYC-0006ZF-PZ; Thu, 19 Sep 2019 09:16:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYB-0006Yj-Hp
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:31 +0000
X-Inumbo-ID: 298322ac-dabe-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 298322ac-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:16:29 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 59483F2033;
 Thu, 19 Sep 2019 11:16:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id FEYFtge-KeK3; Thu, 19 Sep 2019 11:16:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 34FC3F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:26 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:21 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:48 +0200
Message-ID: <20190919091607.23327-5-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 04/23] Kconfig: Importing
 existing Makefile.br
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciAgICAgICAgICAgICAgICAg
ICB8IDUzICsrKysrKysrKysrKysrKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMv
MDItaW1wb3J0LW1ha2VmaWxlLmJyIHwgNTkgKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmls
ZXMgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L01ha2VmaWxlLmJyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5icgoKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYzVjZTEKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCkBAIC0wLDAgKzEsNTMg
QEAKK3NyYyA6PSAuCit0b3Bfc3JjZGlyPS4uLy4uLwordG9wX2J1aWxkZGlyPS4uLy4uLworc3Jj
dHJlZSA6PSAuCitvYmogPz0gLgorCitpbmNsdWRlIE1ha2VmaWxlCisjSE9TVENGTEFHUys9LURp
bmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKKy1pbmNsdWRlICQob2JqKS8uZGVwZW5kCiskKG9iaikv
LmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQorCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoKKworX19ob3N0
cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQoraG9zdC1jc2lu
Z2xlIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0p
KSkKK2hvc3QtY211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwKKyAgICAgICAg
ICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkKK2hvc3Qt
Y3h4bXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXAorICAgICAgICAgICAkKGlm
ICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQoraG9zdC1jb2JqcyA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KCQobSktb2JqcykpKSkKK2hvc3QtY3h4b2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29y
dCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktY3h4b2JqcykpKSkKKworSE9TVF9F
WFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgorCiskKGhvc3QtY3NpbmdsZSk6
ICU6ICUuYworCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChI
T1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKKworJChob3N0LWNtdWx0aSk6ICU6ICQoaG9z
dC1jb2JqcykgJChob3N0LWNzaGxpYikKKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAk
KEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYp
LW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorCiskKGhvc3QtY3h4
bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQor
CSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZM
QUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpz
KSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKworJChvYmopLyUubzogJS5j
CisJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxB
R1NfJChARikpIC1jICQ8IC1vICRACisKKyQob2JqKS8lLm86ICQob2JqKS8lLmMKKwkkKEhPU1RD
QykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkg
LWMgJDwgLW8gJEAKKworJChvYmopLyUubzogJS5jYworCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFD
RkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRACisK
KyQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZAorCSQoUSljYXQgJDwgPiAkQAorCitjbGVhbjoK
KwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKK2Rpc3RjbGVh
bjogY2xlYW4KKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGx4ZGlhbG9nKSAkKGNv
bmYtb2JqcykgJChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpzKSBcCisJCSQoaG9zdHByb2dz
LXkpICQocWNvbmYtY3h4b2JqcykgJChxY29uZi1vYmpzKSAkKGdjb25mLW9ianMpIFwKKwkJbWNv
bmYgLmRlcGVuZCkKKworRk9SQ0U6CisuUEhPTlk6IEZPUkNFIGNsZWFuIGRpc3RjbGVhbgpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5i
ciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnIKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlMGJhOQotLS0gL2Rldi9udWxsCisr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnIKQEAg
LTAsMCArMSw1OSBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUu
YnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCituZXcgZmlsZSBtb2RlIDEwMDY0
NAoraW5kZXggMDAwMDAwMC4uNDFjNWNlMQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgorQEAgLTAsMCArMSw1MyBAQAorK3NyYyA6PSAuCisrdG9w
X3NyY2Rpcj0uLi8uLi8KKyt0b3BfYnVpbGRkaXI9Li4vLi4vCisrc3JjdHJlZSA6PSAuCisrb2Jq
ID89IC4KKysKKytpbmNsdWRlIE1ha2VmaWxlCisrI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1p
bmNsdWRlIGZvby5oCisrLWluY2x1ZGUgJChvYmopLy5kZXBlbmQKKyskKG9iaikvLmRlcGVuZDog
JCh3aWxkY2FyZCAqLmggKi5jKQorKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhP
U1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAyPi9kZXYvbnVsbCB8fCA6CisrCisrX19ob3N0cHJvZ3Mg
Oj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQorK2hvc3QtY3NpbmdsZSA6
PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQoJChtKS1vYmpzKSwsJChtKSkpCisr
aG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXAorKyAgICAgICAgICAg
JChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkKKytob3N0LWN4
eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwKKysgICAgICAgICAgICQoaWYg
JCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQobSktb2JqcyksKSkpCisraG9zdC1jb2JqcyA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KCQobSktb2JqcykpKSkKKytob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNv
cnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLWN4eG9ianMpKSkpCisrCisrSE9T
VF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgorKworKyQoaG9zdC1jc2lu
Z2xlKTogJTogJS5jCisrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFH
UykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKKysKKyskKGhvc3QtY211bHRpKTog
JTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQorKwkkKEhPU1RDQykgJChIT1NUX0VYVFJB
Q0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmop
LywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorKwor
KyQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9z
dC1jc2hsaWIpCisrCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1Mp
ICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgk
KEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKysKKysk
KG9iaikvJS5vOiAlLmMKKysJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZM
QUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACisrCisrJChvYmopLyUubzogJChv
YmopLyUuYworKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQo
SE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKysKKyskKG9iaikvJS5vOiAlLmNjCisrCSQo
SE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1Nf
JChARikpIC1jICQ8IC1vICRACisrCisrJChvYmopLyU6OiAkKHNyYykvJV9zaGlwcGVkCisrCSQo
USljYXQgJDwgPiAkQAorKworK2NsZWFuOgorKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmop
LywkKGNsZWFuLWZpbGVzKSkKKytkaXN0Y2xlYW46IGNsZWFuCisrCSQoUSlybSAtZiAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQobHhkaWFsb2cpICQoY29uZi1vYmpzKSAkKG1jb25mLW9ianMpICQoa3hn
ZXR0ZXh0LW9ianMpIFwKKysJCSQoaG9zdHByb2dzLXkpICQocWNvbmYtY3h4b2JqcykgJChxY29u
Zi1vYmpzKSAkKGdjb25mLW9ianMpIFwKKysJCW1jb25mIC5kZXBlbmQpCisrCisrRk9SQ0U6Cisr
LlBIT05ZOiBGT1JDRSBjbGVhbiBkaXN0Y2xlYW4KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYH-0006bA-RF; Thu, 19 Sep 2019 09:16:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYG-0006aG-Ia
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:36 +0000
X-Inumbo-ID: 28232c4b-dabe-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 28232c4b-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:16:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5049EF2025;
 Thu, 19 Sep 2019 11:16:26 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id TiNxhqpLnoqQ; Thu, 19 Sep 2019 11:16:26 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 24FE0F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:24 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:20 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:47 +0200
Message-ID: <20190919091607.23327-4-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 03/23] kconfig: Replace the
 kernel with Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2VhcmNoIGFuZCByZXBsYWNlIHRoZSBLZXJuZWwgd2l0aCBVbmlrcmFmdAoKU2lnbmVkLW9mZi1i
eTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQog
c3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSAgICAgICAgICAgICAgICAgICAgfCAgMiAr
LQogc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAg
NiArLQogc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMiArLQogLi4uL3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2gg
ICAgfCA3NiArKysrKysrKysrKysrKysrKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25m
LmNjICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiA2IGZpbGVzIGNoYW5nZWQsIDgzIGlu
c2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoCgpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUKaW5kZXggM2YzMjdlMi4uN2I1MzJjNSAxMDA2NDQKLS0tIGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZQorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
CkBAIC0xLDYgKzEsNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogIyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSMgS2VybmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworIyBVbmlr
cmFmdCBjb25maWd1cmF0aW9uIHRhcmdldHMKICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBmcm9t
IHRvcC1sZXZlbCBtYWtlZmlsZQogCiBQSE9OWSArPSB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZp
ZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcgXApkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYu
Z2xhZGUKaW5kZXggYWE0ODNjYi4uMDNlOTdkNyAxMDA2NDQKLS0tIGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9nY29uZi5nbGFkZQorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlCkBA
IC00LDcgKzQsNyBAQAogCiA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cxIj4K
ICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICA8cHJvcGVydHkg
bmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVsIENvbmZpZ3VyYXRvcjwv
cHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0
ayBVbmlrcmFmdCBDb25maWd1cmF0b3I8L3Byb3BlcnR5PgogICA8cHJvcGVydHkgbmFtZT0idHlw
ZSI+R1RLX1dJTkRPV19UT1BMRVZFTDwvcHJvcGVydHk+CiAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5k
b3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX05PTkU8L3Byb3BlcnR5PgogICA8cHJvcGVydHkgbmFt
ZT0ibW9kYWwiPkZhbHNlPC9wcm9wZXJ0eT4KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYwppbmRleCA2OTQwOTFmLi41
M2M0YTYyIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMKKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCkBAIC0xNzUsOSArMTc1LDkgQEAgbWVudV9pbnN0cnVj
dGlvbnNbXSA9CiAJIkFycm93IGtleXMgbmF2aWdhdGUgdGhlIG1lbnUuICAiCiAJIjxFbnRlcj4g
c2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBlbXB0eSBzdWJtZW51cyAtLS0tKS4gICIKIAkiSGln
aGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICIKLQkiUHJlc3NpbmcgPFk+IGluY2x1ZGVz
LCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFyaXplcyBmZWF0dXJlcy4gICIKKwkiUHJlc3Npbmcg
PFk+IHNlbGVjdHMgYSBmZWF0dXJlLCB3aGlsZSA8Tj4gd2lsbCBleGNsdWRlIGEgZmVhdHVyZS4g
ICIKIAkiUHJlc3MgPEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2Vh
cmNoLiAgIgotCSJMZWdlbmQ6IFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxl
ICA8ID4gbW9kdWxlIGNhcGFibGUiLAorCSJMZWdlbmQ6IFsqXSBmZWF0dXJlIGlzIHNlbGVjdGVk
ICBbIF0gZmVhdHVyZSBpcyBleGNsdWRlZCIsCiByYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQog
CSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgogCSJwcmVz
cyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRvIHNlbGVjdCAiCkBAIC05NTcsNyAr
OTU3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhpdCh2b2lkKQogCWlmIChjb25mX2dldF9jaGFu
Z2VkKCkpCiAJCXJlcyA9IGRpYWxvZ195ZXNubyhOVUxMLAogCQkJCSAgICJEbyB5b3Ugd2lzaCB0
byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRpb24/XG4iCi0JCQkJICAgICAiKFByZXNzIDxFU0M+
PEVTQz4gdG8gY29udGludWUga2VybmVsIGNvbmZpZ3VyYXRpb24uKSIsCisJCQkJICAgICAiKFBy
ZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUgVW5pa3JhZnQgY29uZmlndXJhdGlvbi4pIiwKIAkJ
CQkgICA2LCA2MCk7CiAJZWxzZQogCQlyZXMgPSAtMTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbmNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYwppbmRleCBjYmFm
ZTNiLi5kM2Q5MDhjIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCkBAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBj
b25zdCBjaGFyIG5jb25mX2dsb2JhbF9oZWxwW10gPQogIk1lbnUgZW50cmllc1xuIgogIi0tLS0t
LS0tLS0tLVxuIgogIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQg
cGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIgotImJ1aWxkLiAgS2VybmVsIGZlYXR1cmVzIGNh
biBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciByZW1vdmVkLlxuIgorImJ1aWxk
LiAgVW5pa3JhZnQgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBzZWxlY3RlZCBvciBkZXNlbGVjdGVk
LlxuIgogIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVjaW1hbCBvciBo
ZXhhZGVjaW1hbCBudW1iZXJzLlxuIgogIlxuIgogIk1lbnUgZW50cmllcyBiZWdpbm5pbmcgd2l0
aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3Jh
ZnQucGF0Y2ggYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwt
dG8tdW5pa3JhZnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBk
NjNiNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMS1r
Y29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRjaApAQCAtMCwwICsxLDc2IEBACitkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUKK2luZGV4IDNmMzI3ZTIuLjdiNTMyYzUgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlCitA
QCAtMSw2ICsxLDYgQEAKKyAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisgIyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KKy0jIEtlcm5lbCBjb25maWd1cmF0aW9uIHRhcmdldHMKKysjIFVu
aWtyYWZ0IGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBm
cm9tIHRvcC1sZXZlbCBtYWtlZmlsZQorIAorIFBIT05ZICs9IHhjb25maWcgZ2NvbmZpZyBtZW51
Y29uZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZyBcCitkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
Z2NvbmYuZ2xhZGUKK2luZGV4IGFhNDgzY2IuLjAzZTk3ZDcgMTAwNjQ0CistLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L2djb25mLmdsYWRlCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25m
LmdsYWRlCitAQCAtNCw3ICs0LDcgQEAKKyAKKyA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlk
PSJ3aW5kb3cxIj4KKyAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4K
Ky0gIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0ayBLZXJuZWwg
Q29uZmlndXJhdG9yPC9wcm9wZXJ0eT4KKysgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPkd0ayBVbmlrcmFmdCBDb25maWd1cmF0b3I8L3Byb3BlcnR5PgorICAgPHBy
b3BlcnR5IG5hbWU9InR5cGUiPkdUS19XSU5ET1dfVE9QTEVWRUw8L3Byb3BlcnR5PgorICAgPHBy
b3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfTk9ORTwvcHJvcGVydHk+
CisgICA8cHJvcGVydHkgbmFtZT0ibW9kYWwiPkZhbHNlPC9wcm9wZXJ0eT4KK2RpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25m
LmMKK2luZGV4IDY5NDA5MWYuLjUzYzRhNjIgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L21jb25mLmMKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYworQEAgLTE3NSw5
ICsxNzUsOSBAQCBtZW51X2luc3RydWN0aW9uc1tdID0KKyAJIkFycm93IGtleXMgbmF2aWdhdGUg
dGhlIG1lbnUuICAiCisgCSI8RW50ZXI+IHNlbGVjdHMgc3VibWVudXMgLS0tPiAob3IgZW1wdHkg
c3VibWVudXMgLS0tLSkuICAiCisgCSJIaWdobGlnaHRlZCBsZXR0ZXJzIGFyZSBob3RrZXlzLiAg
IgorLQkiUHJlc3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFyaXpl
cyBmZWF0dXJlcy4gICIKKysJIlByZXNzaW5nIDxZPiBzZWxlY3RzIGEgZmVhdHVyZSwgd2hpbGUg
PE4+IHdpbGwgZXhjbHVkZSBhIGZlYXR1cmUuICAiCisgCSJQcmVzcyA8RXNjPjxFc2M+IHRvIGV4
aXQsIDw/PiBmb3IgSGVscCwgPC8+IGZvciBTZWFyY2guICAiCistCSJMZWdlbmQ6IFsqXSBidWls
dC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUiLAorKwki
TGVnZW5kOiBbKl0gZmVhdHVyZSBpcyBzZWxlY3RlZCAgWyBdIGZlYXR1cmUgaXMgZXhjbHVkZWQi
LAorIHJhZGlvbGlzdF9pbnN0cnVjdGlvbnNbXSA9CisgCSJVc2UgdGhlIGFycm93IGtleXMgdG8g
bmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgorIAkicHJlc3MgdGhlIGhvdGtleSBvZiB0aGUgaXRl
bSB5b3Ugd2lzaCB0byBzZWxlY3QgIgorQEAgLTk1Nyw3ICs5NTcsNyBAQCBzdGF0aWMgaW50IGhh
bmRsZV9leGl0KHZvaWQpCisgCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpCisgCQlyZXMgPSBkaWFs
b2dfeWVzbm8oTlVMTCwKKyAJCQkJICAgIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29u
ZmlndXJhdGlvbj9cbiIKKy0JCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUg
a2VybmVsIGNvbmZpZ3VyYXRpb24uKSIsCisrCQkJCSAgICAgIihQcmVzcyA8RVNDPjxFU0M+IHRv
IGNvbnRpbnVlIFVuaWtyYWZ0IGNvbmZpZ3VyYXRpb24uKSIsCisgCQkJCSAgIDYsIDYwKTsKKyAJ
ZWxzZQorIAkJcmVzID0gLTE7CitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29u
Zi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCitpbmRleCBjYmFmZTNiLi5kM2Q5MDhj
IDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCisrKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L25jb25mLmMKK0BAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
IG5jb25mX2dsb2JhbF9oZWxwW10gPQorICJNZW51IGVudHJpZXNcbiIKKyAiLS0tLS0tLS0tLS0t
XG4iCisgIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1l
dGVycyBmb3IgdGhlIGtlcm5lbFxuIgorLSJidWlsZC4gIEtlcm5lbCBmZWF0dXJlcyBjYW4gZWl0
aGVyIGJlIGJ1aWx0LWluLCBtb2R1bGFyaXplZCwgb3IgcmVtb3ZlZC5cbiIKKysiYnVpbGQuICBV
bmlrcmFmdCBmZWF0dXJlcyBjYW4gZWl0aGVyIGJlIHNlbGVjdGVkIG9yIGRlc2VsZWN0ZWQuXG4i
CisgIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVjaW1hbCBvciBoZXhh
ZGVjaW1hbCBudW1iZXJzLlxuIgorICJcbiIKKyAiTWVudSBlbnRyaWVzIGJlZ2lubmluZyB3aXRo
IGZvbGxvd2luZyBicmFjZXMgcmVwcmVzZW50IGZlYXR1cmVzIHRoYXRcbiIKK2RpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29u
Zi5jYworaW5kZXggY2U3ZmM4Ny4uMDAyMWFhNiAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcWNvbmYuY2MKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MKK0BAIC00
Niw3ICs0Niw3IEBAIHN0YXRpYyBpbmxpbmUgUVN0cmluZyBxZ2V0dGV4dChjb25zdCBjaGFyKiBz
dHIpCisgfQorIAorIENvbmZpZ1NldHRpbmdzOjpDb25maWdTZXR0aW5ncygpCistCTogUVNldHRp
bmdzKCJrZXJuZWwub3JnIiwgInFjb25mIikKKysJOiBRU2V0dGluZ3MoInVuaWtyYWZ0Lm9yZyIs
ICJxY29uZiIpCisgeworIH0KKyAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNv
bmYuY2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCmluZGV4IGNlN2ZjODcuLjAwMjFh
YTYgMTAwNjQ0Ci0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9xY29uZi5jYwpAQCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgaW5saW5lIFFT
dHJpbmcgcWdldHRleHQoY29uc3QgY2hhciogc3RyKQogfQogCiBDb25maWdTZXR0aW5nczo6Q29u
ZmlnU2V0dGluZ3MoKQotCTogUVNldHRpbmdzKCJrZXJuZWwub3JnIiwgInFjb25mIikKKwk6IFFT
ZXR0aW5ncygidW5pa3JhZnQub3JnIiwgInFjb25mIikKIHsKIH0KIAotLSAKMi43LjQKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYL-0006ch-TG; Thu, 19 Sep 2019 09:16:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYK-0006c8-QH
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:40 +0000
X-Inumbo-ID: 2fc69f5e-dabe-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2fc69f5e-dabe-11e9-b76c-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:39 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id F2B7DF2033;
 Thu, 19 Sep 2019 11:16:38 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id gMakC2qwvmVc; Thu, 19 Sep 2019 11:16:38 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C93A8F2025
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:36 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:36 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:49 +0200
Message-ID: <20190919091607.23327-6-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 05/23] kbuild: Add build helper
 function from Linux
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0IE1ha2VmaWxlLnJ1bGVzIGZyb20gc2NyaXB0cy9rYnVpbGQuaW5jbHVkZS4KVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAg
ICAgICAgICB8ICAgMSArCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzICAgICAg
ICAgICAgICAgICB8ICA4NCArKysrKysrKysrKysrKysrKwogLi4uL3BhdGNoZXMvMDMtaW5jbHVk
ZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwgfCAxMDIgKysrKysrKysrKysrKysrKysrKysr
CiAzIGZpbGVzIGNoYW5nZWQsIDE4NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMy1pbmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9t
LWtlcm5lbAoKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCmluZGV4IDQxYzVjZTEuLjBmZGJlOWEgMTAw
NjQ0Ci0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgpAQCAtNCw2ICs0LDcgQEAgdG9wX2J1aWxkZGlyPS4uLy4u
Lwogc3JjdHJlZSA6PSAuCiBvYmogPz0gLgogCitpbmNsdWRlIE1ha2VmaWxlLnJ1bGVzCiBpbmNs
dWRlIE1ha2VmaWxlCiAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKIC1p
bmNsdWRlICQob2JqKS8uZGVwZW5kCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLnJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGE5YzgxCi0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwpAQCAtMCwwICsxLDg0IEBACitrZWNo
byA6PSBlY2hvCitjb21tYSA6PSAsCisKKworZG90LXRhcmdldCA9ICQoZGlyICRAKS4kKG5vdGRp
ciAkQCkKKworYW55LXByZXJlcSA9ICQoZmlsdGVyLW91dCAkKFBIT05ZKSwkPykgJChmaWx0ZXIt
b3V0ICQoUEhPTlkpICQod2lsZGNhcmQgJF4pLCReKQorCithcmctY2hlY2sgPSAkKGlmICQoc3Ry
aXAgJChjbWRfJEApKSwsMSkKKworbWFrZS1jbWQgPSAkKGNhbGwgZXNjc3EsJChzdWJzdCAkKHBv
dW5kKSwkJChwb3VuZCksJChzdWJzdCAkJCwkJCQkLCQoY21kXyQoMSkpKSkpCisKKyMgcHJpbnRp
bmcgY29tbWFuZHMKK2NtZCA9IEBzZXQgLWU7ICQoZWNoby1jbWQpICQoY21kXyQoMSkpCisKK2Rl
cGZpbGUgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5kKQorZGVwZmxhZ3MgPSAt
V3AkKGNvbW1hKS1NRCQoY29tbWEpJChjYWxsIGRvdC10YXJnZXQpCisKK2NtZF9hbmRfZml4ZGVw
ID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJJChj
bWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisJJChvYmopL2ZpeGRlcCAkKGRlcGZpbGUpICRAICckKG1ha2UtY21kKScgPiAkKGRvdC10
YXJnZXQpLmNtZDtcCisJcm0gLWYgJChkZXBmaWxlKQorCitpZl9jaGFuZ2VkX2RlcCA9ICQoaWYg
JChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSksJChjbWRfYW5kX2ZpeGRlcCksQDop
CisKK2RlZmluZSBtdWx0aV9kZXBlbmQKKyQoZm9yZWFjaCBtLCAkKG5vdGRpciAkMSksIFwKKyAg
ICAkKGV2YWwgJChvYmopLyRtOiBcCisgICAgJChhZGRwcmVmaXggJChvYmopLywgJChmb3JlYWNo
IHMsICQzLCAkKCQobTolJChzdHJpcCAkMik9JSQocykpKSkpKSkKK2VuZGVmCisKKyMjIworIyBm
aWxlY2hrIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGNvbnRlbnQgb2YgYSBnZW5lcmF0ZWQgZmls
ZSBpcyB1cGRhdGVkLgorIyBTYW1wbGUgdXNhZ2U6CisjCisjIGZpbGVjaGtfc2FtcGxlID0gZWNo
byAkKEtFUk5FTFJFTEVBU0UpCisjIHZlcnNpb24uaDogRk9SQ0UKKyMgICAkKGNhbGwgZmlsZWNo
ayxzYW1wbGUpCisjCisjIFRoZSBydWxlIGRlZmluZWQgc2hhbGwgd3JpdGUgdG8gc3Rkb3V0IHRo
ZSBjb250ZW50IG9mIHRoZSBuZXcgZmlsZS4KKyMgVGhlIGV4aXN0aW5nIGZpbGUgd2lsbCBiZSBj
b21wYXJlZCB3aXRoIHRoZSBuZXcgb25lLgorIyAtIElmIG5vIGZpbGUgZXhpc3QgaXQgaXMgY3Jl
YXRlZAorIyAtIElmIHRoZSBjb250ZW50IGRpZmZlciB0aGUgbmV3IGZpbGUgaXMgdXNlZAorIyAt
IElmIHRoZXkgYXJlIGVxdWFsIG5vIGNoYW5nZSwgYW5kIG5vIHRpbWVzdGFtcCB1cGRhdGUKKyMg
LSBzdGRpbiBpcyBwaXBlZCBpbiBmcm9tIHRoZSBmaXJzdCBwcmVyZXF1aXNpdGUgKCQ8KSBzbyBv
bmUgaGFzCisjICAgdG8gc3BlY2lmeSBhIHZhbGlkIGZpbGUgYXMgZmlyc3QgcHJlcmVxdWlzaXRl
IChvZnRlbiB0aGUga2J1aWxkIGZpbGUpCitkZWZpbmUgZmlsZWNoaworCSQoUSlzZXQgLWU7ICAg
ICAgICAgICAgIFwKKwlta2RpciAtcCAkKGRpciAkQCk7ICAgICAgICAgXAorCXsgJChmaWxlY2hr
XyQoMSkpOyB9ID4gJEAudG1wOyAgICAgIFwKKwlpZiBbIC1yICRAIF0gJiYgY21wIC1zICRAICRA
LnRtcDsgdGhlbiAgXAorCSAgICBybSAtZiAkQC50bXA7ICAgICAgICAgICBcCisJZWxzZSAgICAg
ICAgICAgICAgICAgICAgXAorCSAgICAkKGtlY2hvKSAnICBVUEQgICAgICRAJzsgICAgXAorCSAg
ICBtdiAtZiAkQC50bXAgJEA7ICAgICAgICBcCisJZmkKK2VuZGVmCisKKyMgRXhlY3V0ZSBjb21t
YW5kIGlmIGNvbW1hbmQgaGFzIGNoYW5nZWQgb3IgcHJlcmVxdWlzaXRlKHMpIGFyZSB1cGRhdGVk
LgoraWZfY2hhbmdlZCA9ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSks
CQlcCisJJChjbWQpO1wKKwlwcmludGYgJyVzXG4nICdjbWRfJEAgOj0gJChtYWtlLWNtZCknID4g
JChkb3QtdGFyZ2V0KS5jbWQsIEA6KQorCisjIExFWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3F1
aWV0X2NtZF9mbGV4ID0gTEVYICRACitjbWRfZmxleCA9ICQoTEVYKSAtbyRAIC1MICQ8CisKKyQo
b2JqKS8lLmxleC5jOiAkKHNyYykvJS5sIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsZmxleCkK
KworIyBZQUNDCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcXVpZXRfY21kX2Jpc29uID0gWUFDQyAg
ICAkQAorY21kX2Jpc29uID0gJChZQUNDKSAtbyRAIC10IC1sICQ8CisKKyQob2JqKS8lLnRhYi5j
OiAkKHNyYykvJS55IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsYmlzb24pCisKK3F1aWV0X2Nt
ZF9iaXNvbl9oID0gWUFDQyAgICAkQAorY21kX2Jpc29uX2ggPSAkKFlBQ0MpIC1vL2Rldi9udWxs
IC0tZGVmaW5lcz0kQCAtdCAtbCAkPAorCiskKG9iaikvJS50YWIuaDogJChzcmMpLyUueSBGT1JD
RQorCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uX2gpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwgYi9z
dXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJv
bS1rZXJuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNzlmOAotLS0g
L2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMy1pbmNsdWRlLW1h
a2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbApAQCAtMCwwICsxLDEwMiBAQAorZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyCitpbmRleCA0MWM1Y2UxLi4wZmRiZTlhIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgorKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5icgorQEAgLTQsNiArNCw3IEBAIHRvcF9idWlsZGRpcj0uLi8uLi8KKyBzcmN0cmVlIDo9IC4K
KyBvYmogPz0gLgorIAorK2luY2x1ZGUgTWFrZWZpbGUucnVsZXMKKyBpbmNsdWRlIE1ha2VmaWxl
CisgI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oCisgLWluY2x1ZGUgJChv
YmopLy5kZXBlbmQKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1
bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcworbmV3IGZpbGUgbW9kZSAx
MDA2NDQKK2luZGV4IDAwMDAwMDAuLjc4YTljODEKKy0tLSAvZGV2L251bGwKKysrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUucnVsZXMKK0BAIC0wLDAgKzEsODQgQEAKKytrZWNobyA6
PSBlY2hvCisrY29tbWEgOj0gLAorKworKworK2RvdC10YXJnZXQgPSAkKGRpciAkQCkuJChub3Rk
aXIgJEApCisrCisrYW55LXByZXJlcSA9ICQoZmlsdGVyLW91dCAkKFBIT05ZKSwkPykgJChmaWx0
ZXItb3V0ICQoUEhPTlkpICQod2lsZGNhcmQgJF4pLCReKQorKworK2FyZy1jaGVjayA9ICQoaWYg
JChzdHJpcCAkKGNtZF8kQCkpLCwxKQorKworK21ha2UtY21kID0gJChjYWxsIGVzY3NxLCQoc3Vi
c3QgJChwb3VuZCksJCQocG91bmQpLCQoc3Vic3QgJCQsJCQkJCwkKGNtZF8kKDEpKSkpKQorKwor
KyMgcHJpbnRpbmcgY29tbWFuZHMKKytjbWQgPSBAc2V0IC1lOyAkKGVjaG8tY21kKSAkKGNtZF8k
KDEpKQorKworK2RlcGZpbGUgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5kKQor
K2RlcGZsYWdzID0gLVdwJChjb21tYSktTUQkKGNvbW1hKSQoY2FsbCBkb3QtdGFyZ2V0KQorKwor
K2NtZF9hbmRfZml4ZGVwID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisrCSQoY21kKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorKwkkKG9iaikvZml4ZGVwICQoZGVwZmlsZSkgJEAgJyQobWFr
ZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kO1wKKysJcm0gLWYgJChkZXBmaWxlKQorKworK2lm
X2NoYW5nZWRfZGVwID0gJChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwk
KGNtZF9hbmRfZml4ZGVwKSxAOikKKysKKytkZWZpbmUgbXVsdGlfZGVwZW5kCisrJChmb3JlYWNo
IG0sICQobm90ZGlyICQxKSwgXAorKyAgICAkKGV2YWwgJChvYmopLyRtOiBcCisrICAgICQoYWRk
cHJlZml4ICQob2JqKS8sICQoZm9yZWFjaCBzLCAkMywgJCgkKG06JSQoc3RyaXAgJDIpPSUkKHMp
KSkpKSkpCisrZW5kZWYKKysKKysjIyMKKysjIGZpbGVjaGsgaXMgdXNlZCB0byBjaGVjayBpZiB0
aGUgY29udGVudCBvZiBhIGdlbmVyYXRlZCBmaWxlIGlzIHVwZGF0ZWQuCisrIyBTYW1wbGUgdXNh
Z2U6CisrIworKyMgZmlsZWNoa19zYW1wbGUgPSBlY2hvICQoS0VSTkVMUkVMRUFTRSkKKysjIHZl
cnNpb24uaDogRk9SQ0UKKysjICAgJChjYWxsIGZpbGVjaGssc2FtcGxlKQorKyMKKysjIFRoZSBy
dWxlIGRlZmluZWQgc2hhbGwgd3JpdGUgdG8gc3Rkb3V0IHRoZSBjb250ZW50IG9mIHRoZSBuZXcg
ZmlsZS4KKysjIFRoZSBleGlzdGluZyBmaWxlIHdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgbmV3
IG9uZS4KKysjIC0gSWYgbm8gZmlsZSBleGlzdCBpdCBpcyBjcmVhdGVkCisrIyAtIElmIHRoZSBj
b250ZW50IGRpZmZlciB0aGUgbmV3IGZpbGUgaXMgdXNlZAorKyMgLSBJZiB0aGV5IGFyZSBlcXVh
bCBubyBjaGFuZ2UsIGFuZCBubyB0aW1lc3RhbXAgdXBkYXRlCisrIyAtIHN0ZGluIGlzIHBpcGVk
IGluIGZyb20gdGhlIGZpcnN0IHByZXJlcXVpc2l0ZSAoJDwpIHNvIG9uZSBoYXMKKysjICAgdG8g
c3BlY2lmeSBhIHZhbGlkIGZpbGUgYXMgZmlyc3QgcHJlcmVxdWlzaXRlIChvZnRlbiB0aGUga2J1
aWxkIGZpbGUpCisrZGVmaW5lIGZpbGVjaGsKKysJJChRKXNldCAtZTsgICAgICAgICAgICAgXAor
Kwlta2RpciAtcCAkKGRpciAkQCk7ICAgICAgICAgXAorKwl7ICQoZmlsZWNoa18kKDEpKTsgfSA+
ICRALnRtcDsgICAgICBcCisrCWlmIFsgLXIgJEAgXSAmJiBjbXAgLXMgJEAgJEAudG1wOyB0aGVu
ICBcCisrCSAgICBybSAtZiAkQC50bXA7ICAgICAgICAgICBcCisrCWVsc2UgICAgICAgICAgICAg
ICAgICAgIFwKKysJICAgICQoa2VjaG8pICcgIFVQRCAgICAgJEAnOyAgICBcCisrCSAgICBtdiAt
ZiAkQC50bXAgJEA7ICAgICAgICBcCisrCWZpCisrZW5kZWYKKysKKysjIEV4ZWN1dGUgY29tbWFu
ZCBpZiBjb21tYW5kIGhhcyBjaGFuZ2VkIG9yIHByZXJlcXVpc2l0ZShzKSBhcmUgdXBkYXRlZC4K
KytpZl9jaGFuZ2VkID0gJChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwJ
CVwKKysJJChjbWQpO1wKKysJcHJpbnRmICclc1xuJyAnY21kXyRAIDo9ICQobWFrZS1jbWQpJyA+
ICQoZG90LXRhcmdldCkuY21kLCBAOikKKysKKysjIExFWAorKyMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisrcXVpZXRfY21kX2ZsZXggPSBMRVggJEAKKytjbWRfZmxleCA9ICQoTEVYKSAtbyRAIC1MICQ8
CisrCisrJChvYmopLyUubGV4LmM6ICQoc3JjKS8lLmwgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5n
ZWQsZmxleCkKKysKKysjIFlBQ0MKKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorK3F1aWV0X2NtZF9i
aXNvbiA9IFlBQ0MgICAgJEAKKytjbWRfYmlzb24gPSAkKFlBQ0MpIC1vJEAgLXQgLWwgJDwKKysK
KyskKG9iaikvJS50YWIuYzogJChzcmMpLyUueSBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZCxi
aXNvbikKKysKKytxdWlldF9jbWRfYmlzb25faCA9IFlBQ0MgICAgJEAKKytjbWRfYmlzb25faCA9
ICQoWUFDQykgLW8vZGV2L251bGwgLS1kZWZpbmVzPSRAIC10IC1sICQ8CisrCisrJChvYmopLyUu
dGFiLmg6ICQoc3JjKS8lLnkgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWQsYmlzb25faCkKLS0g
CjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYO-0006dZ-28; Thu, 19 Sep 2019 09:16:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYM-0006d3-HG
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:42 +0000
X-Inumbo-ID: 3100c0c0-dabe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3100c0c0-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:41 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0C7E3F2033;
 Thu, 19 Sep 2019 11:16:41 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 84M1H_CS3BDw; Thu, 19 Sep 2019 11:16:40 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D8A18F2025
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:38 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:36 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:50 +0200
Message-ID: <20190919091607.23327-7-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 06/23] kconfig: Removing the
 generic rule
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGdlbmVyaWMgcnVsZSB0byBidWlsZCBjIGFuZCBjYyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCB0
byBidWlsZCB0aGUKa2NvbmZpZyB0b29scy4gSXQgdXNlcyBmaXhkZXAgdG8gZGV0ZXJtaW5lIGlm
IHRoZSBjb25maWcgdG9vbCBoYXMgdG8gYmUKYnVpbHQgYW5kIGV4ZWN1dGUgdGhlIGJ1aWxkIGNv
bW1hbmQgYXMgbmVjZXNzYXJ5LgoKU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hh
cmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5iciAgICAgICAgICAgICAgICAgICAgfCAxMiAtLS0tLS0tLS0tCiBzdXBwb3J0L2tjb25maWcu
bmV3L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZSB8IDI2ICsrKysrKysrKysrKysrKysr
KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMjYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0p
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92
ZS1nZW5lcmljLXJ1bGUKCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgppbmRleCAwZmRiZTlhLi5jMTFm
Mjk3IDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTMxLDE4ICszMSw2IEBAICQoaG9zdC1j
bXVsdGkpOiAlOiAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCiAkKGhvc3QtY3h4bXVsdGkp
OiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQogCSQoSE9T
VENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRA
KSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChI
T1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKIAotJChvYmopLyUubzogJS5jCi0JJChI
T1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChA
RikpIC1jICQ8IC1vICRACi0KLSQob2JqKS8lLm86ICQob2JqKS8lLmMKLQkkKEhPU1RDQykgJChI
T1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwg
LW8gJEAKLQotJChvYmopLyUubzogJS5jYwotCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1Mp
ICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRACi0KLSQob2Jq
KS8lOjogJChzcmMpLyVfc2hpcHBlZAotCSQoUSljYXQgJDwgPiAkQAotCiBjbGVhbjoKIAkkKFEp
cm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKIGRpc3RjbGVhbjogY2xl
YW4KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2Vu
ZXJpYy1ydWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmlj
LXJ1bGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMGNiMQotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJp
Yy1ydWxlCkBAIC0wLDAgKzEsMjYgQEAKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgoraW5kZXggMGZk
YmU5YS4uYzExZjI5NyAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUu
YnIKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK0BAIC0zMSwxOCArMzEs
NiBAQCAkKGhvc3QtY211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQorICQo
aG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1j
c2hsaWIpCisgCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQo
SE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBG
KS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKyAKKy0kKG9i
aikvJS5vOiAlLmMKKy0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdT
KSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACistCistJChvYmopLyUubzogJChvYmop
LyUuYworLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9T
VENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKy0KKy0kKG9iaikvJS5vOiAlLmNjCistCSQoSE9T
VENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChA
RikpIC1jICQ8IC1vICRACistCistJChvYmopLyU6OiAkKHNyYykvJV9zaGlwcGVkCistCSQoUSlj
YXQgJDwgPiAkQAorLQorIGNsZWFuOgorIAkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywk
KGNsZWFuLWZpbGVzKSkKKyBkaXN0Y2xlYW46IGNsZWFuCitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZQorbmV3IGZpbGUgbW9kZSAxMDA2
NDQKK2luZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYR-0006f8-92; Thu, 19 Sep 2019 09:16:47 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYP-0006eY-Pz
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:45 +0000
X-Inumbo-ID: 323f10cc-dabe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 323f10cc-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:43 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 21ECBF2033;
 Thu, 19 Sep 2019 11:16:43 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id MWuXPADje2gV; Thu, 19 Sep 2019 11:16:43 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E7665F2025
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:40 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:36 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:51 +0200
Message-ID: <20190919091607.23327-8-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 07/23] kconfig: Import fixdep
 from Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0IGZpeGRlcCBmcm9tIHRoZSBsaW51eCBrZXJuZWwuClRhZyB2NS4yCgpTaWduZWQtb2Zm
LWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBz
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIHwgICA3ICsKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvZml4ZGVwLmMgICAgfCAzNzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogMiBmaWxlcyBjaGFuZ2VkLCAzODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgpp
bmRleCBjMTFmMjk3Li41OGU2ZTc1IDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTE5LDYg
KzE5LDcgQEAgaG9zdC1jeHhtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCiAg
ICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQobSktb2JqcyksKSkp
CiBob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQo
X19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQogaG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4
ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1jeHhvYmpz
KSkpKQorZml4ZGVwLW9ianMgOj0gJChvYmopL2ZpeGRlcC5vCiAKIEhPU1RfRVhUUkFDRkxBR1Mg
Kz0gLUkkKG9iaikgLURDT05GSUdfPVwiXCIKIApAQCAtMzEsNiArMzIsMTIgQEAgJChob3N0LWNt
dWx0aSk6ICU6ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikKICQoaG9zdC1jeHhtdWx0aSk6
ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCiAJJChIT1NU
Q1hYKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEAp
ICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhP
U1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAogCiskKG9iaikvZml4ZGVwOiAkKGZpeGRl
cC1vYmpzKQorCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChI
T1NUQ0ZMQUdTXyQoQEYpKSAkPCAtbyAkQAorCiskKGZpeGRlcC1vYmpzKTogJChzcmMpL2ZpeGRl
cC5jCisJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RD
RkxBR1NfJChARikpIC1jICQ8IC1vICRACisKIGNsZWFuOgogCSQoUSlybSAtZiAkKGFkZHByZWZp
eCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQogZGlzdGNsZWFuOiBjbGVhbgpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVw
LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFjYmQ2MAotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKQEAgLTAsMCArMSwzNzkgQEAK
Ky8qCisgKiAiT3B0aW1pemUiIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYXMgc3BpdCBvdXQgYnkg
Z2NjIC1NRAorICogZm9yIHRoZSBrZXJuZWwgYnVpbGQKKyAqID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQor
ICoKKyAqIEF1dGhvciAgICAgICBLYWkgR2VybWFzY2hld3NraQorICogQ29weXJpZ2h0ICAgIDIw
MDIgYnkgS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+CisgKgor
ICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRv
IHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBv
cmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisgKgorICogSW50cm9kdWN0aW9uOgorICoK
KyAqIGdjYyBwcm9kdWNlcyBhIHZlcnkgbmljZSBhbmQgY29ycmVjdCBsaXN0IG9mIGRlcGVuZGVu
Y2llcyB3aGljaAorICogdGVsbHMgbWFrZSB3aGVuIHRvIHJlbWFrZSBhIGZpbGUuCisgKgorICog
VG8gdXNlIHRoaXMgbGlzdCBhcy1pcyBob3dldmVyIGhhcyB0aGUgZHJhd2JhY2sgdGhhdCB2aXJ0
dWFsbHkKKyAqIGV2ZXJ5IGZpbGUgaW4gdGhlIGtlcm5lbCBpbmNsdWRlcyBhdXRvY29uZi5oLgor
ICoKKyAqIElmIHRoZSB1c2VyIHJlLXJ1bnMgbWFrZSAqY29uZmlnLCBhdXRvY29uZi5oIHdpbGwg
YmUKKyAqIHJlZ2VuZXJhdGVkLiAgbWFrZSBub3RpY2VzIHRoYXQgYW5kIHdpbGwgcmVidWlsZCBl
dmVyeSBmaWxlIHdoaWNoCisgKiBpbmNsdWRlcyBhdXRvY29uZi5oLCBpLmUuIGJhc2ljYWxseSBh
bGwgZmlsZXMuIFRoaXMgaXMgZXh0cmVtZWx5CisgKiBhbm5veWluZyBpZiB0aGUgdXNlciBqdXN0
IGNoYW5nZWQgQ09ORklHX0hJU19EUklWRVIgZnJvbSBuIHRvIG0uCisgKgorICogU28gd2UgcGxh
eSB0aGUgc2FtZSB0cmljayB0aGF0ICJta2RlcCIgcGxheWVkIGJlZm9yZS4gV2UgcmVwbGFjZQor
ICogdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBieSBhIGRlcGVuZGVuY3kgb24gZXZlcnkg
Y29uZmlnCisgKiBvcHRpb24gd2hpY2ggaXMgbWVudGlvbmVkIGluIGFueSBvZiB0aGUgbGlzdGVk
IHByZXJlcXVpc2l0ZXMuCisgKgorICoga2NvbmZpZyBwb3B1bGF0ZXMgYSB0cmVlIGluIGluY2x1
ZGUvY29uZmlnLyB3aXRoIGFuIGVtcHR5IGZpbGUKKyAqIGZvciBlYWNoIGNvbmZpZyBzeW1ib2wg
YW5kIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdXBkYXRlZAorICogdGhlIGZpbGVzIHJlcHJl
c2VudGluZyBjaGFuZ2VkIGNvbmZpZyBvcHRpb25zIGFyZSB0b3VjaGVkCisgKiB3aGljaCB0aGVu
IGxldCBtYWtlIHBpY2sgdXAgdGhlIGNoYW5nZXMgYW5kIHRoZSBmaWxlcyB0aGF0IHVzZQorICog
dGhlIGNvbmZpZyBzeW1ib2xzIGFyZSByZWJ1aWx0LgorICoKKyAqIFNvIGlmIHRoZSB1c2VyIGNo
YW5nZXMgaGlzIENPTkZJR19ISVNfRFJJVkVSIG9wdGlvbiwgb25seSB0aGUgb2JqZWN0cworICog
d2hpY2ggZGVwZW5kIG9uICJpbmNsdWRlL2NvbmZpZy9oaXMvZHJpdmVyLmgiIHdpbGwgYmUgcmVi
dWlsdCwKKyAqIHNvIG1vc3QgbGlrZWx5IG9ubHkgaGlzIGRyaXZlciA7LSkKKyAqCisgKiBUaGUg
aWRlYSBhYm92ZSBkYXRlcywgYnkgdGhlIHdheSwgYmFjayB0byBNaWNoYWVsIEUgQ2hhc3RhaW4s
IEFGQUlLLgorICoKKyAqIFNvIHRvIGdldCBkZXBlbmRlbmNpZXMgcmlnaHQsIHRoZXJlIGFyZSB0
d28gaXNzdWVzOgorICogbyBpZiBhbnkgb2YgdGhlIGZpbGVzIHRoZSBjb21waWxlciByZWFkIGNo
YW5nZWQsIHdlIG5lZWQgdG8gcmVidWlsZAorICogbyBpZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVu
IHRvIHRoZSBjb21waWxlIHRoZSBmaWxlIGNoYW5nZWQsIHdlCisgKiAgIGJldHRlciByZWJ1aWxk
IGFzIHdlbGwuCisgKgorICogVGhlIGZvcm1lciBpcyBoYW5kbGVkIGJ5IHVzaW5nIHRoZSAtTUQg
b3V0cHV0LCB0aGUgbGF0ZXIgYnkgc2F2aW5nCisgKiB0aGUgY29tbWFuZCBsaW5lIHVzZWQgdG8g
Y29tcGlsZSB0aGUgb2xkIG9iamVjdCBhbmQgY29tcGFyaW5nIGl0CisgKiB0byB0aGUgb25lIHdl
IHdvdWxkIG5vdyB1c2UuCisgKgorICogQWdhaW4sIGFsc28gdGhpcyBpZGVhIGlzIHByZXR0eSBv
bGQgYW5kIGhhcyBiZWVuIGRpc2N1c3NlZCBvbgorICoga2J1aWxkLWRldmVsIGEgbG9uZyB0aW1l
IGFnby4gSSBkb24ndCBoYXZlIGEgc2Vuc2libHkgd29ya2luZworICogaW50ZXJuZXQgY29ubmVj
dGlvbiByaWdodCBub3csIHNvIEkgcmF0aGVyIGRvbid0IG1lbnRpb24gbmFtZXMKKyAqIHdpdGhv
dXQgZG91YmxlIGNoZWNraW5nLgorICoKKyAqIFRoaXMgY29kZSBoZXJlIGhhcyBiZWVuIGJhc2Vk
IHBhcnRpYWxseSBiYXNlZCBvbiBta2RlcC5jLCB3aGljaAorICogc2F5cyB0aGUgZm9sbG93aW5n
IGFib3V0IGl0cyBoaXN0b3J5OgorICoKKyAqICAgQ29weXJpZ2h0IGFiYW5kb25lZCwgTWljaGFl
bCBDaGFzdGFpbiwgPG1haWx0bzptZWNAc2hvdXQubmV0Pi4KKyAqICAgVGhpcyBpcyBhIEMgdmVy
c2lvbiBvZiBzeW5jZGVwLnBsIGJ5IFdlcm5lciBBbG1lc2Jlcmdlci4KKyAqCisgKgorICogSXQg
aXMgaW52b2tlZCBhcworICoKKyAqICAgZml4ZGVwIDxkZXBmaWxlPiA8dGFyZ2V0PiA8Y21kbGlu
ZT4KKyAqCisgKiBhbmQgd2lsbCByZWFkIHRoZSBkZXBlbmRlbmN5IGZpbGUgPGRlcGZpbGU+Cisg
KgorICogVGhlIHRyYW5zZm9ybWVkIGRlcGVuZGVuY3kgc25pcHBlZCBpcyB3cml0dGVuIHRvIHN0
ZG91dC4KKyAqCisgKiBJdCBmaXJzdCBnZW5lcmF0ZXMgYSBsaW5lCisgKgorICogICBjbWRfPHRh
cmdldD4gPSA8Y21kbGluZT4KKyAqCisgKiBhbmQgdGhlbiBiYXNpY2FsbHkgY29waWVzIHRoZSAu
PHRhcmdldD4uZCBmaWxlIHRvIHN0ZG91dCwgaW4gdGhlCisgKiBwcm9jZXNzIGZpbHRlcmluZyBv
dXQgdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBhbmQgYWRkaW5nCisgKiBkZXBlbmRlbmNp
ZXMgb24gaW5jbHVkZS9jb25maWcvbXkvb3B0aW9uLmggZm9yIGV2ZXJ5CisgKiBDT05GSUdfTVlf
T1BUSU9OIGVuY291bnRlcmVkIGluIGFueSBvZiB0aGUgcHJlcmVxdWlzaXRlcy4KKyAqCisgKiBJ
dCB3aWxsIGFsc28gZmlsdGVyIG91dCBhbGwgdGhlIGRlcGVuZGVuY2llcyBvbiAqLnZlci4gV2Ug
bmVlZAorICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGdlbmVyYXRlZCB2ZXJzaW9uIGNoZWNrc3Vt
IGFyZSBnbG9iYWxseSB1cAorICogdG8gZGF0ZSBiZWZvcmUgZXZlbiBzdGFydGluZyB0aGUgcmVj
dXJzaXZlIGJ1aWxkLCBzbyBpdCdzIHRvbyBsYXRlCisgKiBhdCB0aGlzIHBvaW50IGFueXdheS4K
KyAqCisgKiBXZSBkb24ndCBldmVuIHRyeSB0byByZWFsbHkgcGFyc2UgdGhlIGhlYWRlciBmaWxl
cywgYnV0CisgKiBtZXJlbHkgZ3JlcCwgaS5lLiBpZiBDT05GSUdfRk9PIGlzIG1lbnRpb25lZCBp
biBhIGNvbW1lbnQsIGl0IHdpbGwKKyAqIGJlIHBpY2tlZCB1cCBhcyB3ZWxsLiBJdCdzIG5vdCBh
IHByb2JsZW0gd2l0aCByZXNwZWN0IHRvCisgKiBjb3JyZWN0bmVzcywgc2luY2UgdGhhdCBjYW4g
b25seSBnaXZlIHRvbyBtYW55IGRlcGVuZGVuY2llcywgdGh1cworICogd2UgY2Fubm90IG1pc3Mg
YSByZWJ1aWxkLiBTaW5jZSBwZW9wbGUgdGVuZCB0byBub3QgbWVudGlvbiB0b3RhbGx5CisgKiB1
bnJlbGF0ZWQgQ09ORklHXyBvcHRpb25zIGFsbCBvdmVyIHRoZSBwbGFjZSwgaXQncyBub3QgYW4K
KyAqIGVmZmljaWVuY3kgcHJvYmxlbSBlaXRoZXIuCisgKgorICogKE5vdGU6IGl0J2QgYmUgZWFz
eSB0byBwb3J0IG92ZXIgdGhlIGNvbXBsZXRlIG1rZGVwIHN0YXRlIG1hY2hpbmUsCisgKiAgYnV0
IEkgZG9uJ3QgdGhpbmsgdGhlIGFkZGVkIGNvbXBsZXhpdHkgaXMgd29ydGggaXQpCisgKi8KKwor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisK
K3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnByaW50ZihzdGRlcnIsICJVc2FnZTogZml4
ZGVwIDxkZXBmaWxlPiA8dGFyZ2V0PiA8Y21kbGluZT5cbiIpOworCWV4aXQoMSk7Cit9CisKKy8q
CisgKiBQcmludCBvdXQgYSBkZXBlbmRlbmN5IHBhdGggZnJvbSBhIHN5bWJvbCBuYW1lCisgKi8K
K3N0YXRpYyB2b2lkIHByaW50X2RlcChjb25zdCBjaGFyICptLCBpbnQgc2xlbiwgY29uc3QgY2hh
ciAqZGlyKQoreworCWludCBjLCBwcmV2X2MgPSAnLycsIGk7CisKKwlwcmludGYoIiAgICAkKHdp
bGRjYXJkICVzLyIsIGRpcik7CisJZm9yIChpID0gMDsgaSA8IHNsZW47IGkrKykgeworCQljID0g
bVtpXTsKKwkJaWYgKGMgPT0gJ18nKQorCQkJYyA9ICcvJzsKKwkJZWxzZQorCQkJYyA9IHRvbG93
ZXIoYyk7CisJCWlmIChjICE9ICcvJyB8fCBwcmV2X2MgIT0gJy8nKQorCQkJcHV0Y2hhcihjKTsK
KwkJcHJldl9jID0gYzsKKwl9CisJcHJpbnRmKCIuaCkgXFxcbiIpOworfQorCitzdHJ1Y3QgaXRl
bSB7CisJc3RydWN0IGl0ZW0JKm5leHQ7CisJdW5zaWduZWQgaW50CWxlbjsKKwl1bnNpZ25lZCBp
bnQJaGFzaDsKKwljaGFyCQluYW1lWzBdOworfTsKKworI2RlZmluZSBIQVNIU1ogMjU2CitzdGF0
aWMgc3RydWN0IGl0ZW0gKmhhc2h0YWJbSEFTSFNaXTsKKworc3RhdGljIHVuc2lnbmVkIGludCBz
dHJoYXNoKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQgaW50IHN6KQoreworCS8qIGZudjMyIGhh
c2ggKi8KKwl1bnNpZ25lZCBpbnQgaSwgaGFzaCA9IDIxNjYxMzYyNjFVOworCisJZm9yIChpID0g
MDsgaSA8IHN6OyBpKyspCisJCWhhc2ggPSAoaGFzaCBeIHN0cltpXSkgKiAweDAxMDAwMTkzOwor
CXJldHVybiBoYXNoOworfQorCisvKgorICogTG9va3VwIGEgdmFsdWUgaW4gdGhlIGNvbmZpZ3Vy
YXRpb24gc3RyaW5nLgorICovCitzdGF0aWMgaW50IGlzX2RlZmluZWRfY29uZmlnKGNvbnN0IGNo
YXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGludCBoYXNoKQoreworCXN0cnVjdCBpdGVtICph
dXg7CisKKwlmb3IgKGF1eCA9IGhhc2h0YWJbaGFzaCAlIEhBU0hTWl07IGF1eDsgYXV4ID0gYXV4
LT5uZXh0KSB7CisJCWlmIChhdXgtPmhhc2ggPT0gaGFzaCAmJiBhdXgtPmxlbiA9PSBsZW4gJiYK
KwkJICAgIG1lbWNtcChhdXgtPm5hbWUsIG5hbWUsIGxlbikgPT0gMCkKKwkJCXJldHVybiAxOwor
CX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFkZCBhIG5ldyB2YWx1ZSB0byB0aGUgY29uZmln
dXJhdGlvbiBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRlZmluZV9jb25maWcoY29uc3QgY2hh
ciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpCit7CisJc3RydWN0IGl0ZW0gKmF1
eCA9IG1hbGxvYyhzaXplb2YoKmF1eCkgKyBsZW4pOworCisJaWYgKCFhdXgpIHsKKwkJcGVycm9y
KCJmaXhkZXA6bWFsbG9jIik7CisJCWV4aXQoMSk7CisJfQorCW1lbWNweShhdXgtPm5hbWUsIG5h
bWUsIGxlbik7CisJYXV4LT5sZW4gPSBsZW47CisJYXV4LT5oYXNoID0gaGFzaDsKKwlhdXgtPm5l
eHQgPSBoYXNodGFiW2hhc2ggJSBIQVNIU1pdOworCWhhc2h0YWJbaGFzaCAlIEhBU0hTWl0gPSBh
dXg7Cit9CisKKy8qCisgKiBSZWNvcmQgdGhlIHVzZSBvZiBhIENPTkZJR18qIHdvcmQuCisgKi8K
K3N0YXRpYyB2b2lkIHVzZV9jb25maWcoY29uc3QgY2hhciAqbSwgaW50IHNsZW4pCit7CisJdW5z
aWduZWQgaW50IGhhc2ggPSBzdHJoYXNoKG0sIHNsZW4pOworCisJaWYgKGlzX2RlZmluZWRfY29u
ZmlnKG0sIHNsZW4sIGhhc2gpKQorCSAgICByZXR1cm47CisKKwlkZWZpbmVfY29uZmlnKG0sIHNs
ZW4sIGhhc2gpOworCXByaW50X2RlcChtLCBzbGVuLCAiaW5jbHVkZS9jb25maWciKTsKK30KKwor
LyogdGVzdCBpZiBzIGVuZHMgaW4gc3ViICovCitzdGF0aWMgaW50IHN0cl9lbmRzX3dpdGgoY29u
c3QgY2hhciAqcywgaW50IHNsZW4sIGNvbnN0IGNoYXIgKnN1YikKK3sKKwlpbnQgc3VibGVuID0g
c3RybGVuKHN1Yik7CisKKwlpZiAoc3VibGVuID4gc2xlbikKKwkJcmV0dXJuIDA7CisKKwlyZXR1
cm4gIW1lbWNtcChzICsgc2xlbiAtIHN1Ymxlbiwgc3ViLCBzdWJsZW4pOworfQorCitzdGF0aWMg
dm9pZCBwYXJzZV9jb25maWdfZmlsZShjb25zdCBjaGFyICpwKQoreworCWNvbnN0IGNoYXIgKnEs
ICpyOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gcDsKKworCXdoaWxlICgocCA9IHN0cnN0cihwLCAi
Q09ORklHXyIpKSkgeworCQlpZiAocCA+IHN0YXJ0ICYmIChpc2FsbnVtKHBbLTFdKSB8fCBwWy0x
XSA9PSAnXycpKSB7CisJCQlwICs9IDc7CisJCQljb250aW51ZTsKKwkJfQorCQlwICs9IDc7CisJ
CXEgPSBwOworCQl3aGlsZSAoKnEgJiYgKGlzYWxudW0oKnEpIHx8ICpxID09ICdfJykpCisJCQlx
Kys7CisJCWlmIChzdHJfZW5kc193aXRoKHAsIHEgLSBwLCAiX01PRFVMRSIpKQorCQkJciA9IHEg
LSA3OworCQllbHNlCisJCQlyID0gcTsKKwkJaWYgKHIgPiBwKQorCQkJdXNlX2NvbmZpZyhwLCBy
IC0gcCk7CisJCXAgPSBxOworCX0KK30KKworc3RhdGljIHZvaWQgKnJlYWRfZmlsZShjb25zdCBj
aGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZmQ7CisJY2hhciAqYnVm
OworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkgeworCQlm
cHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3Igb3BlbmluZyBmaWxlOiAiKTsKKwkJcGVycm9y
KGZpbGVuYW1lKTsKKwkJZXhpdCgyKTsKKwl9CisJaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgewor
CQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3IgZnN0YXQnaW5nIGZpbGU6ICIpOworCQlw
ZXJyb3IoZmlsZW5hbWUpOworCQlleGl0KDIpOworCX0KKwlidWYgPSBtYWxsb2Moc3Quc3Rfc2l6
ZSArIDEpOworCWlmICghYnVmKSB7CisJCXBlcnJvcigiZml4ZGVwOiBtYWxsb2MiKTsKKwkJZXhp
dCgyKTsKKwl9CisJaWYgKHJlYWQoZmQsIGJ1Ziwgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSkg
eworCQlwZXJyb3IoImZpeGRlcDogcmVhZCIpOworCQlleGl0KDIpOworCX0KKwlidWZbc3Quc3Rf
c2l6ZV0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJldHVybiBidWY7Cit9CisKKy8qIElnbm9y
ZSBjZXJ0YWluIGRlcGVuZGVuY2llcyAqLworc3RhdGljIGludCBpc19pZ25vcmVkX2ZpbGUoY29u
c3QgY2hhciAqcywgaW50IGxlbikKK3sKKwlyZXR1cm4gc3RyX2VuZHNfd2l0aChzLCBsZW4sICJp
bmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIikgfHwKKwkgICAgICAgc3RyX2VuZHNfd2l0aChz
LCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5bXMuaCIpIHx8CisJICAgICAgIHN0cl9l
bmRzX3dpdGgocywgbGVuLCAiLnZlciIpOworfQorCisvKgorICogSW1wb3J0YW50OiBUaGUgYmVs
b3cgZ2VuZXJhdGVkIHNvdXJjZV9mb28ubyBhbmQgZGVwc19mb28ubyB2YXJpYWJsZQorICogYXNz
aWdubWVudHMgYXJlIHBhcnNlZCBub3Qgb25seSBieSBtYWtlLCBidXQgYWxzbyBieSB0aGUgcmF0
aGVyIHNpbXBsZQorICogcGFyc2VyIGluIHNjcmlwdHMvbW9kL3N1bXZlcnNpb24uYy4KKyAqLwor
c3RhdGljIHZvaWQgcGFyc2VfZGVwX2ZpbGUoY2hhciAqbSwgY29uc3QgY2hhciAqdGFyZ2V0KQor
eworCWNoYXIgKnA7CisJaW50IGlzX2xhc3QsIGlzX3RhcmdldDsKKwlpbnQgc2F3X2FueV90YXJn
ZXQgPSAwOworCWludCBpc19maXJzdF9kZXAgPSAwOworCXZvaWQgKmJ1ZjsKKworCXdoaWxlICgx
KSB7CisJCS8qIFNraXAgYW55ICJ3aGl0ZSBzcGFjZSIgKi8KKwkJd2hpbGUgKCptID09ICcgJyB8
fCAqbSA9PSAnXFwnIHx8ICptID09ICdcbicpCisJCQltKys7CisKKwkJaWYgKCEqbSkKKwkJCWJy
ZWFrOworCisJCS8qIEZpbmQgbmV4dCAid2hpdGUgc3BhY2UiICovCisJCXAgPSBtOworCQl3aGls
ZSAoKnAgJiYgKnAgIT0gJyAnICYmICpwICE9ICdcXCcgJiYgKnAgIT0gJ1xuJykKKwkJCXArKzsK
KwkJaXNfbGFzdCA9ICgqcCA9PSAnXDAnKTsKKwkJLyogSXMgdGhlIHRva2VuIHdlIGZvdW5kIGEg
dGFyZ2V0IG5hbWU/ICovCisJCWlzX3RhcmdldCA9ICgqKHAtMSkgPT0gJzonKTsKKwkJLyogRG9u
J3Qgd3JpdGUgYW55IHRhcmdldCBuYW1lcyBpbnRvIHRoZSBkZXBlbmRlbmN5IGZpbGUgKi8KKwkJ
aWYgKGlzX3RhcmdldCkgeworCQkJLyogVGhlIC9uZXh0LyBmaWxlIGlzIHRoZSBmaXJzdCBkZXBl
bmRlbmN5ICovCisJCQlpc19maXJzdF9kZXAgPSAxOworCQl9IGVsc2UgaWYgKCFpc19pZ25vcmVk
X2ZpbGUobSwgcCAtIG0pKSB7CisJCQkqcCA9ICdcMCc7CisKKwkJCS8qCisJCQkgKiBEbyBub3Qg
bGlzdCB0aGUgc291cmNlIGZpbGUgYXMgZGVwZW5kZW5jeSwgc28gdGhhdAorCQkJICoga2J1aWxk
IGlzIG5vdCBjb25mdXNlZCBpZiBhIC5jIGZpbGUgaXMgcmV3cml0dGVuCisJCQkgKiBpbnRvIC5T
IG9yIHZpY2UgdmVyc2EuIFN0b3JpbmcgaXQgaW4gc291cmNlXyogaXMKKwkJCSAqIG5lZWRlZCBm
b3IgbW9kcG9zdCB0byBjb21wdXRlIHNyY3ZlcnNpb25zLgorCQkJICovCisJCQlpZiAoaXNfZmly
c3RfZGVwKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBwcm9jZXNzaW5nIHRoZSBjb25jYXRlbmF0aW9u
IG9mIG11bHRpcGxlCisJCQkJICogZGVwZW5kZW5jeSBmaWxlcywgb25seSBwcm9jZXNzIHRoZSBm
aXJzdAorCQkJCSAqIHRhcmdldCBuYW1lLCB3aGljaCB3aWxsIGJlIHRoZSBvcmlnaW5hbAorCQkJ
CSAqIHNvdXJjZSBuYW1lLCBhbmQgaWdub3JlIGFueSBvdGhlciB0YXJnZXQKKwkJCQkgKiBuYW1l
cywgd2hpY2ggd2lsbCBiZSBpbnRlcm1lZGlhdGUgdGVtcG9yYXJ5CisJCQkJICogZmlsZXMuCisJ
CQkJICovCisJCQkJaWYgKCFzYXdfYW55X3RhcmdldCkgeworCQkJCQlzYXdfYW55X3RhcmdldCA9
IDE7CisJCQkJCXByaW50Zigic291cmNlXyVzIDo9ICVzXG5cbiIsCisJCQkJCSAgICAgICB0YXJn
ZXQsIG0pOworCQkJCQlwcmludGYoImRlcHNfJXMgOj0gXFxcbiIsIHRhcmdldCk7CisJCQkJfQor
CQkJCWlzX2ZpcnN0X2RlcCA9IDA7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZigiICAlcyBcXFxu
IiwgbSk7CisJCQl9CisKKwkJCWJ1ZiA9IHJlYWRfZmlsZShtKTsKKwkJCXBhcnNlX2NvbmZpZ19m
aWxlKGJ1Zik7CisJCQlmcmVlKGJ1Zik7CisJCX0KKworCQlpZiAoaXNfbGFzdCkKKwkJCWJyZWFr
OworCisJCS8qCisJCSAqIFN0YXJ0IHNlYXJjaGluZyBmb3IgbmV4dCB0b2tlbiBpbW1lZGlhdGVs
eSBhZnRlciB0aGUgZmlyc3QKKwkJICogIndoaXRlc3BhY2UiIGNoYXJhY3RlciB0aGF0IGZvbGxv
d3MgdGhpcyB0b2tlbi4KKwkJICovCisJCW0gPSBwICsgMTsKKwl9CisKKwlpZiAoIXNhd19hbnlf
dGFyZ2V0KSB7CisJCWZwcmludGYoc3RkZXJyLCAiZml4ZGVwOiBwYXJzZSBlcnJvcjsgbm8gdGFy
Z2V0cyBmb3VuZFxuIik7CisJCWV4aXQoMSk7CisJfQorCisJcHJpbnRmKCJcbiVzOiAkKGRlcHNf
JXMpXG5cbiIsIHRhcmdldCwgdGFyZ2V0KTsKKwlwcmludGYoIiQoZGVwc18lcyk6XG4iLCB0YXJn
ZXQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNo
YXIgKmRlcGZpbGUsICp0YXJnZXQsICpjbWRsaW5lOworCXZvaWQgKmJ1ZjsKKworCWlmIChhcmdj
ICE9IDQpCisJCXVzYWdlKCk7CisKKwlkZXBmaWxlID0gYXJndlsxXTsKKwl0YXJnZXQgPSBhcmd2
WzJdOworCWNtZGxpbmUgPSBhcmd2WzNdOworCisJcHJpbnRmKCJjbWRfJXMgOj0gJXNcblxuIiwg
dGFyZ2V0LCBjbWRsaW5lKTsKKworCWJ1ZiA9IHJlYWRfZmlsZShkZXBmaWxlKTsKKwlwYXJzZV9k
ZXBfZmlsZShidWYsIHRhcmdldCk7CisJZnJlZShidWYpOworCisJcmV0dXJuIDA7Cit9Ci0tIAoy
LjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYW-0006gv-Be; Thu, 19 Sep 2019 09:16:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYU-0006gI-Pd
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:50 +0000
X-Inumbo-ID: 3377463a-dabe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3377463a-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:45 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2E880F2033;
 Thu, 19 Sep 2019 11:16:45 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Lw7oH3lCA2nt; Thu, 19 Sep 2019 11:16:45 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 05E13F2025
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:43 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:37 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:52 +0200
Message-ID: <20190919091607.23327-9-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 08/23] build: Add Unikraft
 specific fixdep header
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SWdub3JlIGF1dG8gZ2VuZXJhdGVkIHVrL19jb25maWcuaC4KClNpZ25lZC1vZmYtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIHN1cHBvcnQva2Nv
bmZpZy5uZXcvZml4ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxICsKIHN1
cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlciB8
IDEyICsrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNlcnRpb25zKCspCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFm
dC1maXhkZXAtaGVhZGVyCgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAu
YyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMKaW5kZXggZmFjYmQ2MC4uOTdhZmI3MCAx
MDA2NDQKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYworKysgYi9zdXBwb3J0L2tj
b25maWcubmV3L2ZpeGRlcC5jCkBAIC0yNjksNiArMjY5LDcgQEAgc3RhdGljIGludCBpc19pZ25v
cmVkX2ZpbGUoY29uc3QgY2hhciAqcywgaW50IGxlbikKIHsKIAlyZXR1cm4gc3RyX2VuZHNfd2l0
aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIikgfHwKIAkgICAgICAgc3Ry
X2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5bXMuaCIpIHx8CisJ
ICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiYnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgi
KSB8fAogCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgIi52ZXIiKTsKIH0KIApkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhkZXAt
aGVhZGVyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhk
ZXAtaGVhZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmM4YWUKLS0t
IC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWty
YWZ0LWZpeGRlcC1oZWFkZXIKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZml4ZGVwLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jCitpbmRl
eCBmYWNiZDYwLi45N2FmYjcwIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhk
ZXAuYworKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYworQEAgLTI2OSw2ICsyNjks
NyBAQCBzdGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBjaGFyICpzLCBpbnQgbGVuKQor
IHsKKyAJcmV0dXJuIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0
b2NvbmYuaCIpIHx8CisgCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1ZGUvZ2Vu
ZXJhdGVkL2F1dG9rc3ltcy5oIikgfHwKKysJICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVuLCAi
YnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fAorIAkgICAgICAgc3RyX2VuZHNfd2l0aChz
LCBsZW4sICIudmVyIik7CisgfQorIAotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYa-0006id-Dr; Thu, 19 Sep 2019 09:16:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYZ-0006hu-51
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:55 +0000
X-Inumbo-ID: 38152a68-dabe-11e9-9651-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 38152a68-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:16:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id C4D521056E7;
 Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id DhjfMfPIhV40; Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 885771056E1
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:52 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:55 +0200
Message-ID: <20190919091607.23327-12-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 11/23] kconfig: Fixdep and host
 flags
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIENGTEFHUywgTERGTEFHUywgaW5jbHVkZSBwYXRocyBhbmQgZml4ZGVwIGZsYWdzIGFzIGEg
cGFydCBvZiB0aGUKaG9zdF9jZmxhZ3MuIFRoZSBob3N0X2NmbGFncyBhcmUgdXNlZCB0byBkZXRl
Y3QgaWYgdGhlcmUgd2FzIGNoYW5nZXMgdG8KdGhlc2UgZmxhZ3MuCgpTaWduZWQtb2ZmLWJ5OiBT
aGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBzdXBwb3J0
L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAgICAgICAgICAgICB8ICA2ICsrKysr
LQogc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcg
fCAxOSArKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDI0IGluc2VydGlvbnMo
KyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZwoKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJy
CmluZGV4IDhlNjRhOWIuLmVkOWE1Y2YgMTAwNjQ0Ci0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUuYnIKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgpAQCAtNDIs
OSArNDIsMTMgQEAgaG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jb2Jq
cykpCiBob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4b2Jqcykp
CiBmaXhkZXAtb2JqcyA6PSAkKG9iaikvZml4ZGVwLm8KIAotSE9TVF9FWFRSQUNGTEFHUyArPSAt
SSQob2JqKSAtRENPTkZJR189XCJcIgorSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQoc3JjKSAtSSQo
b2JqKSAtRENPTkZJR189XCJcIgogCitfaG9zdGNfZmxhZ3MgPSAkKEhPU1RDRkxBR1MpICQoSE9T
VF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKK19ob3N0Y3h4X2Zs
YWdzID0gJChIT1NUQ1hYRkxBR1MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ1hYRkxBR1Nf
JChiYXNldGFyZ2V0KS5vKQogCitob3N0Y19mbGFncyAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAk
KF9ob3N0Y19mbGFncykKK2hvc3RjeHhfZmxhZ3MgID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoX2hv
c3RjeHhfZmxhZ3MpCiAKICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpCiAJJChIT1NUQ0Mp
ICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpICQ8
IC1vICRACmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDgtZml4ZGVw
LWFuZC1jb25maWctZmxhZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wOC1maXhkZXAt
YW5kLWNvbmZpZy1mbGFnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2Ez
NTgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDgtZml4
ZGVwLWFuZC1jb25maWctZmxhZwpAQCAtMCwwICsxLDE5IEBACitkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUu
YnIKK2luZGV4IDI5ZGVlNWUuLjljMTEyOTMgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L01ha2VmaWxlLmJyCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCitA
QCAtNDIsOSArNDIsMTMgQEAgaG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9z
dC1jb2JqcykpCisgaG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4
eG9ianMpKQorIGZpeGRlcC1vYmpzIDo9ICQob2JqKS9maXhkZXAubworIAorLUhPU1RfRVhUUkFD
RkxBR1MgKz0gLUkkKG9iaikgLURDT05GSUdfPVwiXCIKKytIT1NUX0VYVFJBQ0ZMQUdTICs9IC1J
JChzcmMpIC1JJChvYmopIC1EQ09ORklHXz1cIlwiCisgCisrX2hvc3RjX2ZsYWdzID0gJChIT1NU
Q0ZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHU18kKGJhc2V0YXJnZXQpLm8p
CisrX2hvc3RjeHhfZmxhZ3MgPSAkKEhPU1RDWFhGTEFHUykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAk
KEhPU1RDWFhGTEFHU18kKGJhc2V0YXJnZXQpLm8pCisgCisraG9zdGNfZmxhZ3MgICAgPSAtV3As
LU1ELCQoZGVwZmlsZSkgJChfaG9zdGNfZmxhZ3MpCisraG9zdGN4eF9mbGFncyAgPSAtV3AsLU1E
LCQoZGVwZmlsZSkgJChfaG9zdGN4eF9mbGFncykKKyAKKyAkKG9iaikvZml4ZGVwOiAkKGZpeGRl
cC1vYmpzKQorIAkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQo
SE9TVENGTEFHU18kKEBGKSkgJDwgLW8gJEAKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYb-0006jB-FQ; Thu, 19 Sep 2019 09:16:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYZ-0006iL-PT
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:55 +0000
X-Inumbo-ID: 34b5ee48-dabe-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 34b5ee48-dabe-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:47 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 400B6F2033;
 Thu, 19 Sep 2019 11:16:47 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id R7j8hA01iFok; Thu, 19 Sep 2019 11:16:47 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 15A58F2025
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:45 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:37 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:53 +0200
Message-ID: <20190919091607.23327-10-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 09/23] build: Remove implicit
 rules
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RGlzYWJsZSBpbXBsaWNpdCBtYWtlZmlsZSBydWxlcy4KClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBT
YW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIHN1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnIgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKwogc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBsaWNpdC1ydWxlcyB8IDEzICsrKysrKysr
KysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVsZXMK
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgppbmRleCA1OGU2ZTc1Li5hZmU5NGVlIDEwMDY0NAotLS0g
YS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvTWFrZWZpbGUuYnIKQEAgLTQsNiArNCw4IEBAIHRvcF9idWlsZGRpcj0uLi8uLi8KIHNyY3Ry
ZWUgOj0gLgogb2JqID89IC4KIAorLlNVRkZJWEVTIDoKKwogaW5jbHVkZSBNYWtlZmlsZS5ydWxl
cwogaW5jbHVkZSBNYWtlZmlsZQogI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZv
by5oCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWlt
cGxpY2l0LXJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBs
aWNpdC1ydWxlcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTE3OWU4Ci0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA2LXJlbW92ZS1p
bXBsaWNpdC1ydWxlcwpAQCAtMCwwICsxLDEzIEBACitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK2lu
ZGV4IDU4ZTZlNzUuLmFmZTk0ZWUgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCitAQCAtNCw2
ICs0LDggQEAgdG9wX2J1aWxkZGlyPS4uLy4uLworIHNyY3RyZWUgOj0gLgorIG9iaiA/PSAuCisg
CisrLlNVRkZJWEVTIDoKKysKKyBpbmNsdWRlIE1ha2VmaWxlLnJ1bGVzCisgaW5jbHVkZSBNYWtl
ZmlsZQorICNIT1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5jbHVkZSBmb28uaAotLSAKMi43LjQK
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:16:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:16:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYb-0006jG-Gs; Thu, 19 Sep 2019 09:16:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYa-0006iU-2p
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:56 +0000
X-Inumbo-ID: 38152a6a-dabe-11e9-9651-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 38152a6a-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:16:54 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 1CC4C1056DE;
 Thu, 19 Sep 2019 11:16:53 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 4rO-1b1LIiwb; Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 923F41056E3
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:52 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:56 +0200
Message-ID: <20190919091607.23327-13-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 12/23] kconfig: Support glob in
 kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN1cHBvcnQgZm9yIGdsb2Igb24ga2NvbmZpZy4gVGFrZW4gZnJvbSBjb3JlYm9vdCBpbXBs
ZW1lbnRhdGlvbi4KClVSTDogaHR0cHM6Ly9naXRodWIuY29tL2NvcmVib290L2NvcmVib290CmNv
bW1pdC1pZDogOTFiYTgwZGQ3OThiCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxz
aGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L2xleGVy
LmwgICAgICAgICAgICAgICAgICAgICAgICB8IDI3ICsrKysrKysrKwogc3VwcG9ydC9rY29uZmln
Lm5ldy9sa2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMSArCiBzdXBwb3J0L2tjb25m
aWcubmV3L3BhcnNlci55ICAgICAgICAgICAgICAgICAgICAgICB8ICAyICstCiAuLi4va2NvbmZp
Zy5uZXcvcGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2ItaW4ta2NvbmZpZyB8IDcwICsrKysrKysrKysr
KysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgOTkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv
bigtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wOS1z
dXBwb3J0LWdsb2ItaW4ta2NvbmZpZwoKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
bGV4ZXIubCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubAppbmRleCA2MzU0YzkwLi5jNWFj
YjMyIDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9sZXhlci5sCkBAIC04LDYgKzgsNyBAQAogJXsKIAogI2luY2x1ZGUgPGFz
c2VydC5oPgorI2luY2x1ZGUgPGdsb2IuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRl
IDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNDQyLDYgKzQ0MywzMiBAQCB2b2lk
IHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpCiAJY3VycmVudF9maWxlID0gZmlsZTsK
IH0KIAordm9pZCB6Y29uZl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqd2lsZGNhcmQpCit7CisJZ2xv
Yl90IGcgPSB7MH07CisJY2hhciAqKnc7CisJaW50IGk7CisKKwlpZiAoZ2xvYih3aWxkY2FyZCwg
MCwgTlVMTCwgJmcpICE9IDApIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoZy5nbF9wYXRodiA9PSBO
VUxMKSB7CisJCWdsb2JmcmVlKCZnKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHdvcmtpbmcgdGhy
b3VnaCBmaWxlcyBiYWNrd2FyZHMsIHNpbmNlCisJICogd2UncmUgZmlyc3QgcHVzaGluZyB0aGVt
IG9uIGEgc3RhY2sKKwkgKiBiZWZvcmUgYWN0dWFsbHkgaGFuZGxpbmcgdGhlbS4KKwkgKi8KKwlm
b3IgKGkgPSBnLmdsX3BhdGhjOyBpID4gMDsgaS0tKSB7CisJCXcgPSAmZy5nbF9wYXRodltpIC0g
MV07CisJCXpjb25mX25leHRmaWxlKCp3KTsKKwl9CisKKwlnbG9iZnJlZSgmZyk7Cit9CisKIHN0
YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkKIHsKIAlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9sa2MuaAppbmRleCBjYmM3NjU4Li42OWQyYzc3IDEwMDY0NAotLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L2xrYy5oCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKQEAgLTQ0LDYg
KzQ0LDcgQEAgdm9pZCB6Y29uZl9zdGFydGhlbHAodm9pZCk7CiBGSUxFICp6Y29uZl9mb3Blbihj
b25zdCBjaGFyICpuYW1lKTsKIHZvaWQgemNvbmZfaW5pdHNjYW4oY29uc3QgY2hhciAqbmFtZSk7
CiB2b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB6Y29uZl9uZXh0
ZmlsZXMoY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgemNvbmZfbGluZW5vKHZvaWQpOwogY29uc3Qg
Y2hhciAqemNvbmZfY3VybmFtZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXJzZXIueSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkKaW5kZXggNjA5MzZj
Ny4uOTU3MDBmOCAxMDA2NDQKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55CkBAIC0zNjYsNyArMzY2LDcgQEAgbWVudV9v
cHRpb25fbGlzdDoKIHNvdXJjZV9zdG10OiBUX1NPVVJDRSBwcm9tcHQgVF9FT0wKIHsKIAlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNv
bmZfbGluZW5vKCksICQyKTsKLQl6Y29uZl9uZXh0ZmlsZSgkMik7CisJemNvbmZfbmV4dGZpbGVz
KCQyKTsKIAlmcmVlKCQyKTsKIH07CiAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
cGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2ItaW4ta2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
cGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2ItaW4ta2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4wMzU3YzIyCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmlnCkBAIC0wLDAgKzEsNzAgQEAK
K2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwgYi9zdXBwb3J0L2tjb25m
aWcubmV3L2xleGVyLmwKK2luZGV4IDYzNTRjOTAuLmM1YWNiMzIgMTAwNjQ0CistLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L2xleGVyLmwKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIu
bAorQEAgLTgsNiArOCw3IEBACisgJXsKKyAKKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+CisrI2luY2x1
ZGUgPGdsb2IuaD4KKyAjaW5jbHVkZSA8bGltaXRzLmg+CisgI2luY2x1ZGUgPHN0ZGlvLmg+Cisg
I2luY2x1ZGUgPHN0ZGxpYi5oPgorQEAgLTQ0Miw2ICs0NDMsMzIgQEAgdm9pZCB6Y29uZl9uZXh0
ZmlsZShjb25zdCBjaGFyICpuYW1lKQorIAljdXJyZW50X2ZpbGUgPSBmaWxlOworIH0KKyAKKyt2
b2lkIHpjb25mX25leHRmaWxlcyhjb25zdCBjaGFyICp3aWxkY2FyZCkKKyt7CisrCWdsb2JfdCBn
ID0gezB9OworKwljaGFyICoqdzsKKysJaW50IGk7CisrCisrCWlmIChnbG9iKHdpbGRjYXJkLCAw
LCBOVUxMLCAmZykgIT0gMCkgeworKwkJcmV0dXJuOworKwl9CisrCWlmIChnLmdsX3BhdGh2ID09
IE5VTEwpIHsKKysJCWdsb2JmcmVlKCZnKTsKKysJCXJldHVybjsKKysJfQorKworKwkvKiB3b3Jr
aW5nIHRocm91Z2ggZmlsZXMgYmFja3dhcmRzLCBzaW5jZQorKwkgKiB3ZSdyZSBmaXJzdCBwdXNo
aW5nIHRoZW0gb24gYSBzdGFjaworKwkgKiBiZWZvcmUgYWN0dWFsbHkgaGFuZGxpbmcgdGhlbS4K
KysJICovCisrCWZvciAoaSA9IGcuZ2xfcGF0aGM7IGkgPiAwOyBpLS0pIHsKKysJCXcgPSAmZy5n
bF9wYXRodltpIC0gMV07CisrCQl6Y29uZl9uZXh0ZmlsZSgqdyk7CisrCX0KKysKKysJZ2xvYmZy
ZWUoJmcpOworK30KKysKKyBzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpCisgeworIAlz
dHJ1Y3QgYnVmZmVyICpwYXJlbnQ7CitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9s
a2MuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKK2luZGV4IGNiYzc2NTguLjY5ZDJjNzcg
MTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oCisrKysgYi9zdXBwb3J0L2tj
b25maWcubmV3L2xrYy5oCitAQCAtNDQsNiArNDQsNyBAQCB2b2lkIHpjb25mX3N0YXJ0aGVscCh2
b2lkKTsKKyBGSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKTsKKyB2b2lkIHpjb25m
X2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpOworIHZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3Qg
Y2hhciAqbmFtZSk7Cisrdm9pZCB6Y29uZl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqbmFtZSk7Cisg
aW50IHpjb25mX2xpbmVubyh2b2lkKTsKKyBjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQp
OworIAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkgYi9zdXBwb3J0
L2tjb25maWcubmV3L3BhcnNlci55CitpbmRleCA2MDkzNmM3Li45NTcwMGY4IDEwMDY0NAorLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQorKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9wYXJzZXIueQorQEAgLTM2Niw3ICszNjYsNyBAQCBtZW51X29wdGlvbl9saXN0OgorIHNvdXJj
ZV9zdG10OiBUX1NPVVJDRSBwcm9tcHQgVF9FT0wKKyB7CisgCXByaW50ZChERUJVR19QQVJTRSwg
IiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIp
OworLQl6Y29uZl9uZXh0ZmlsZSgkMik7CisrCXpjb25mX25leHRmaWxlcygkMik7CisgCWZyZWUo
JDIpOworIH07CisgCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYf-0006kp-JV; Thu, 19 Sep 2019 09:17:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYe-0006kK-4T
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:00 +0000
X-Inumbo-ID: 394b883c-dabe-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 394b883c-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:16:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id DD981F2025;
 Thu, 19 Sep 2019 11:16:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id zBxn2KllDa3W; Thu, 19 Sep 2019 11:16:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id BC258F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:52 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:57 +0200
Message-ID: <20190919091607.23327-14-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 13/23] Kconfig: Shifting to the
 new Kconfig system
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW4gdGhpcyBwYXRjaCwgd2UgdXNlIHRoZSB2ZXJzaW9uIG9mIHRoZSBrY29uZmlnLiBUaGUgZXhp
c3RpbmcKa2NvbmZpZyBzdGlsbCBleGlzdHMuIEluIGxhdGVyIGNvbW1pdHMgd2Ugd2lsbCByZXBs
YWNlIHRoZSBvbGQKa2NvbmZpZyB3aXRoIHRoZSBuZXcgY29uZmlnLgoKTk9URTogVGhlIGxhdGVy
IGtjb25maWcgc3lzdGVtIGRlcHJlY2F0ZXMgc2lsZW50b2xkY29uZmlnLiBJbiBhCmxhdGVyIHBh
dGNoIHRoaXMgd2lsbCBiZSByZXBsYWNlIHN5bmNjb25maWcuCgpTaWduZWQtb2ZmLWJ5OiBTaGFy
YW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBDb25maWcudWsg
ICAgICAgICAgICAgICAgICAgIHwgMjkgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIE1h
a2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCAxNiArKysrKysrKystLS0tLS0tCiBzdXBwb3J0
L2J1aWxkL01ha2VmaWxlLnJ1bGVzIHwgIDIgKy0KIDMgZmlsZXMgY2hhbmdlZCwgMjUgaW5zZXJ0
aW9ucygrKSwgMjIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmln
LnVrCmluZGV4IGQyYTRlMzIuLjIxYWU2NTcgMTAwNjQ0Ci0tLSBhL0NvbmZpZy51aworKysgYi9D
b25maWcudWsKQEAgLTIsMzQgKzIsMzUgQEAKICMgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIHN5
bnRheCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwKICMgc2VlIGh0dHBzOi8vd3d3Lmtlcm5l
bC5vcmcvZG9jL0RvY3VtZW50YXRpb24va2J1aWxkL0NvbmZpZy5pbi1sYW5ndWFnZS50eHQuCiAj
Ci1tYWlubWVudSAiVW5pa3JhZnQvJFVLX0ZVTExWRVJTSU9OIENvbmZpZ3VyYXRpb24iCittYWlu
bWVudSAiVW5pa3JhZnQvJChVS19GVUxMVkVSU0lPTikgQ29uZmlndXJhdGlvbiIKIGNvbmZpZyBL
Q09ORklHX0FQUF9JTgogCXN0cmluZwotCW9wdGlvbiBlbnY9IktDT05GSUdfQVBQX0lOIgorCWRl
ZmF1bHQgIiQoS0NPTkZJR19BUFBfSU4pIgogY29uZmlnIEtDT05GSUdfRUxJQl9JTgogCXN0cmlu
ZwotCW9wdGlvbiBlbnY9IktDT05GSUdfRUxJQl9JTiIKKwlkZWZhdWx0ICIkKEtDT05GSUdfRUxJ
Ql9JTikiCiBjb25maWcgS0NPTkZJR19FUExBVF9JTgogCXN0cmluZwotCW9wdGlvbiBlbnY9IktD
T05GSUdfRVBMQVRfSU4iCisJZGVmYXVsdCAiJChLQ09ORklHX0VQTEFUX0lOKSIKKwogY29uZmln
IFVLX0ZVTExWRVJTSU9OCiAJc3RyaW5nCi0Jb3B0aW9uIGVudj0iVUtfRlVMTFZFUlNJT04iCisJ
ZGVmYXVsdCAiJChVS19GVUxMVkVSU0lPTikiCiBjb25maWcgVUtfQ09ERU5BTUUKIAlzdHJpbmcK
LQlvcHRpb24gZW52PSJVS19DT0RFTkFNRSIKKwlkZWZhdWx0ICIkKFVLX0NPREVOQU1FKSIKIGNv
bmZpZyBVS19BUkNICiAJc3RyaW5nCi0Jb3B0aW9uIGVudj0iVUtfQVJDSCIKKwlkZWZhdWx0ICIk
KFVLX0FSQ0gpIgogY29uZmlnIFVLX0JBU0UKIAlzdHJpbmcKLQlvcHRpb24gZW52PSJVS19CQVNF
IgorCWRlZmF1bHQgIiQoVUtfQkFTRSkiCiBjb25maWcgVUtfQVBQCiAJc3RyaW5nCi0Jb3B0aW9u
IGVudj0iVUtfQVBQIgorCWRlZmF1bHQgIiQoVUtfQVBQKSIKIGNvbmZpZyBVS19ERUZOQU1FCiAJ
c3RyaW5nCi0Jb3B0aW9uIGVudj0iVUtfTkFNRSIKKwlkZWZhdWx0ICIkKFVLX05BTUUpIgogCiBt
ZW51ICJBcmNoaXRlY3R1cmUgU2VsZWN0aW9uIgogCXNvdXJjZSAiYXJjaC9Db25maWcudWsiCkBA
IC0zNywxMiArMzgsMTIgQEAgZW5kbWVudQogCiBtZW51ICJQbGF0Zm9ybSBDb25maWd1cmF0aW9u
IgogCXNvdXJjZSAicGxhdC9Db25maWcudWsiCi0Jc291cmNlICIkS0NPTkZJR19FUExBVF9JTiIK
Kwlzb3VyY2UgIiQoS0NPTkZJR19FUExBVF9JTikiCiBlbmRtZW51CiAKIG1lbnUgIkxpYnJhcnkg
Q29uZmlndXJhdGlvbiIKIAlzb3VyY2UgImxpYi9Db25maWcudWsiCi0Jc291cmNlICIkS0NPTkZJ
R19FTElCX0lOIgorCXNvdXJjZSAiJChLQ09ORklHX0VMSUJfSU4pIgogZW5kbWVudQogCiBtZW51
ICJCdWlsZCBPcHRpb25zIgpAQCAtMTgzLDEyICsxODQsMTIgQEAgZW5kbWVudQogCiBpZiBVS19B
UFAgIT0gVUtfQkFTRQogCW1lbnUgIkFwcGxpY2F0aW9uIE9wdGlvbnMiCi0JCXNvdXJjZSAiJEtD
T05GSUdfQVBQX0lOIgorCQlzb3VyY2UgIiQoS0NPTkZJR19BUFBfSU4pIgogCWVuZG1lbnUKIGVu
ZGlmCiAKIGNvbmZpZyBVS19OQU1FCiAJc3RyaW5nICJJbWFnZSBuYW1lIgotCWRlZmF1bHQgJFVL
X0RFRk5BTUUKKwlkZWZhdWx0IFVLX0RFRk5BTUUKIAloZWxwCiAJICBOYW1lIHRvIGJlIHVzZWQg
Zm9yIGZpbmFsIGltYWdlCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IGFm
YjgyMDYuLmM3YTZhOTkgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0x
MjcsMTEgKzEyNywxMSBAQCBFTElCX0RJUiA6PSAkKHJlYWxwYXRoICQocGF0c3Vic3QgJS8sJSwk
KHBhdHN1YnN0ICUuLCUsJChFTElCX0RJUikpKSkKICMgS0NvbmZpZyBzZXR0aW5ncwogQ09ORklH
X0RJUiAgICAgICAgICAgIDo9ICQoQ09ORklHX1VLX0FQUCkKIENPTkZJR19DT05GSUdfSU4gICAg
ICA6PSAkKENPTkZJR19VS19CQVNFKS9Db25maWcudWsKLUNPTkZJRyAgICAgICAgICAgICAgICA6
PSAkKENPTkZJR19VS19CQVNFKS9zdXBwb3J0L2tjb25maWcKK0NPTkZJRyAgICAgICAgICAgICAg
ICA6PSAkKENPTkZJR19VS19CQVNFKS9zdXBwb3J0L2tjb25maWcubmV3CiBVS19DT05GSUcgICAg
ICAgICAgICAgOj0gJChDT05GSUdfRElSKS8uY29uZmlnCiBVS19DT05GSUdfT1VUICAgICAgICAg
Oj0gJChCVUlMRF9ESVIpL2NvbmZpZwogVUtfR0VORVJBVEVEX0lOQ0xVREVTIDo9ICQoQlVJTERf
RElSKS9pbmNsdWRlCi1LQ09ORklHX0RJUiAgICAgICAgICAgOj0gJChCVUlMRF9ESVIpL2tjb25m
aWcKK0tDT05GSUdfRElSICAgICAgICAgICA6PSAkKEJVSUxEX0RJUikva2NvbmZpZy5uZXcKIFVL
X0ZJWERFUCAgICAgICAgICAgICA6PSAkKEtDT05GSUdfRElSKS9maXhkZXAKIEtDT05GSUdfQVVU
T0NPTkZJRyAgICA6PSAkKEtDT05GSUdfRElSKS9hdXRvLmNvbmYKIEtDT05GSUdfVFJJU1RBVEUg
ICAgICA6PSAkKEtDT05GSUdfRElSKS90cmlzdGF0ZS5jb25maWcKQEAgLTQ3Myw2ICs0NzMsOCBA
QCBBUgkJOj0gYXIKIENBVAkJOj0gY2F0CiBTRUQJCTo9IHNlZAogQVdLCQk6PSBhd2sKK1lBQ0MJ
CTo9IGJpc29uCitMRVggICAgIAk6PSBmbGV4CiBQQVRDSAkJOj0gcGF0Y2gKIEdaSVAJCTo9IGd6
aXAKIFRBUgkJOj0gdGFyCkBAIC00OTYsNyArNDk4LDcgQEAgQ1hYRkxBR1MJKz0gLURDQ19WRVJT
SU9OPSQoQ0NfVkVSU0lPTikKIEdPQ0ZMQUdTCSs9IC1EQ0NfVkVSU0lPTj0kKENDX1ZFUlNJT04p
CiAKICMgZW5zdXJlICQoQlVJTERfRElSKS9rY29uZmlnLCAkKEJVSUxEX0RJUikvaW5jbHVkZSBh
bmQgJChCVUlMRF9ESVIpL2luY2x1ZGUvdWsgZXhpc3RzCi0kKGNhbGwgbWtfc3ViX2J1aWxkX2Rp
cixrY29uZmlnKQorJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsa2NvbmZpZy5uZXcpCiAkKGNhbGwg
bWtfc3ViX2J1aWxkX2RpcixpbmNsdWRlKQogJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsaW5jbHVk
ZS91aykKIApAQCAtNjYxLDEzICs2NjMsMTMgQEAgJChLQ09ORklHX0VQTEFUX0lOKS5uZXc6CiAj
IGVuZm9yY2UgZXhlY3V0aW9uCiAuUEhPTlk6ICQoS0NPTkZJR19BUFBfSU4pLm5ldyAkKEtDT05G
SUdfRUxJQl9JTikubmV3ICQoS0NPTkZJR19FUExBVF9JTikubmV3CiAKLUtDT05GSUdfVE9PTFMg
PSBjb25mIG1jb25mIGdjb25mIG5jb25mIGZpeGRlcAorS0NPTkZJR19UT09MUyA9IGNvbmYgbWNv
bmYgZ2NvbmYgbmNvbmYgcWNvbmYgZml4ZGVwCiBLQ09ORklHX1RPT0xTIDo9ICQoYWRkcHJlZml4
ICQoS0NPTkZJR19ESVIpLywkKEtDT05GSUdfVE9PTFMpKQogCiAkKEtDT05GSUdfVE9PTFMpOgog
CW1rZGlyIC1wICQoQEQpL2x4ZGlhbG9nCiAJJChNQUtFKSBDQz0iJChIT1NUQ0NfTk9DQ0FDSEUp
IiBIT1NUQ0M9IiQoSE9TVENDX05PQ0NBQ0hFKSIgXAotCSAgICBvYmo9JChARCkgLUMgJChDT05G
SUcpIC1mIE1ha2VmaWxlLmJyICQoQEYpCisJICAgIG9iaj0kKEBEKSAtQyAkKENPTkZJRykgLWYg
TWFrZWZpbGUuYnIgJChAKQogCiBERUZDT05GSUcgPSAkKGNhbGwgcXN0cmlwLCQoVUtfREVGQ09O
RklHKSkKIApAQCAtNjc1LDcgKzY3Nyw3IEBAIERFRkNPTkZJRyA9ICQoY2FsbCBxc3RyaXAsJChV
S19ERUZDT05GSUcpKQogIyByZWNvZ25pemUgdGhhdCBpZiBpdCdzIHN0aWxsIGF0IGl0cyBkZWZh
dWx0ICQoQ09ORklHX0RJUikvZGVmY29uZmlnCiBDT01NT05fQ09ORklHX0VOViA9IFwKIAlDT05G
SUdfPSJDT05GSUdfIiBcCi0JQlIyX0NPTkZJRz0iJChVS19DT05GSUcpIiBcCisJS0NPTkZJR19D
T05GSUc9IiQoVUtfQ09ORklHKSIgXAogCUtDT05GSUdfQVVUT0NPTkZJRz0iJChLQ09ORklHX0FV
VE9DT05GSUcpIiBcCiAJS0NPTkZJR19BVVRPSEVBREVSPSIkKEtDT05GSUdfQVVUT0hFQURFUiki
IFwKIAlLQ09ORklHX1RSSVNUQVRFPSIkKEtDT05GSUdfVFJJU1RBVEUpIiBcCkBAIC03NjMsNyAr
NzY1LDcgQEAgc2F2ZWRlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQ
X0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORkkKIAogIyBSZWdlbmVyYXRlICQoS0NPTkZJ
R19BVVRPSEVBREVSKSB3aGVuZXZlciAkKFVLX0NPTkZJRykgY2hhbmdlZAogJChLQ09ORklHX0FV
VE9IRUFERVIpOiAkKFVLX0NPTkZJRykgJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQ
X0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQotCUAkKENPTU1PTl9D
T05GSUdfRU5WKSAkKEtDT05GSUdfRElSKS9jb25mIC0tc2lsZW50b2xkY29uZmlnICQoQ09ORklH
X0NPTkZJR19JTikKKwlAJChDT01NT05fQ09ORklHX0VOVikgJChLQ09ORklHX0RJUikvY29uZiAt
LXN5bmNjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQogCiAKICMgTWlzYyBzdHVmZgpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9idWlsZC9NYWtlZmlsZS5ydWxlcyBiL3N1cHBvcnQvYnVpbGQvTWFrZWZp
bGUucnVsZXMKaW5kZXggNzRiNmQ3ZC4uOTA2YTBhNiAxMDA2NDQKLS0tIGEvc3VwcG9ydC9idWls
ZC9NYWtlZmlsZS5ydWxlcworKysgYi9zdXBwb3J0L2J1aWxkL01ha2VmaWxlLnJ1bGVzCkBAIC0y
MzQsNyArMjM0LDcgQEAgZGVwZmxhZ3MgPSAtV3AkKGNvbW1hKS1NRCQoY29tbWEpJChjYWxsIHRt
cF9kZXBmaWxlLCQoMykpCiBkZWZpbmUgYnVpbGRfY21kX2ZpeGRlcCA9CiAJJChjYWxsIGJ1aWxk
X2NtZCwkMSwkMiwkMywkNCkKIAkkUSAkKFVLX0ZJWERFUCkgJChjYWxsIHRtcF9kZXBmaWxlLCQz
KSAkMyAnJChjYWxsIHN0cmlwLCQ0KScgXAotCQkkKEJVSUxEX0RJUikgCT4gJChjYWxsIG91dDJk
ZXAsJDMpICYmIFwKKwkJPiAkKGNhbGwgb3V0MmRlcCwkMykgJiYgXAogCQkkKFJNKSAkKGNhbGwg
dG1wX2RlcGZpbGUsJDMpCiBlbmRlZgogCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYg-0006lK-Kx; Thu, 19 Sep 2019 09:17:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYe-0006kV-PO
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:00 +0000
X-Inumbo-ID: 37ff2222-dabe-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 37ff2222-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id C0072105581;
 Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id qY50P6j-Q-Xl; Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 497371056DE
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:52 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:51 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:54 +0200
Message-ID: <20190919091607.23327-11-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 10/23] build: Import the kconfig
 host rules from Linux
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHJ1bGVzIGJ1aWxkIHRoZSBjb25maWcgdG9vbC4gVGhlc2UgcnVsZSBhcmUgaW1wb3J0ZWQg
ZnJvbSB0aGUgbGludXgKa2VybmVsLgpGaWxlOiBzY3JpcHRzL01ha2VmaWxlLmhvc3QKVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAg
ICAgICAgICB8IDExNiArKysrKysrKysrKysrKy0tLQogLi4uL2tjb25maWcubmV3L3BhdGNoZXMv
MDctaW1wb3J0LWhvc3QtdG9vbHMtcnVsZXMgfCAxNDIgKysrKysrKysrKysrKysrKysrKysrCiAy
IGZpbGVzIGNoYW5nZWQsIDI0MyBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDctaW1wb3J0LWhvc3Qt
dG9vbHMtcnVsZXMKCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJy
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgppbmRleCBhZmU5NGVlLi44ZTY0YTli
IDEwMDY0NAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKQEAgLTEwLDI5ICsxMCw0MSBAQCBpbmNsdWRlIE1h
a2VmaWxlLnJ1bGVzCiBpbmNsdWRlIE1ha2VmaWxlCiAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIg
LWluY2x1ZGUgZm9vLmgKIC1pbmNsdWRlICQob2JqKS8uZGVwZW5kCi0kKG9iaikvLmRlcGVuZDog
JCh3aWxkY2FyZCAqLmggKi5jKQotCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9T
VENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoKIAogX19ob3N0cHJvZ3MgOj0g
JChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQotaG9zdC1jc2luZ2xlIDo9ICQo
Zm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkKK2hvc3Qt
Y3NobGliIDo9ICQoc29ydCAkKGhvc3RsaWJzLXkpICQoaG9zdGxpYnMtbSkpCitob3N0LWN4eHNo
bGliIDo9ICQoc29ydCAkKGhvc3RjeHhsaWJzLXkpICQoaG9zdGN4eGxpYnMtbSkpCisKKyMgQyBj
b2RlCisjIEV4ZWN1dGFibGVzIGNvbXBpbGVkIGZyb20gYSBzaW5nbGUgLmMgZmlsZQoraG9zdC1j
c2luZ2xlOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksIFwKKyAgICAgICAgICAgICAkKGlm
ICQoJChtKS1vYmpzKSQoJChtKS1jeHhvYmpzKSwsJChtKSkpCiBob3N0LWNtdWx0aSA6PSAkKGZv
cmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCi0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMp
LCwkKGlmICQoJChtKS1vYmpzKSwkKG0pKSkpCi1ob3N0LWN4eG11bHRpIDo9ICQoZm9yZWFjaCBt
LCQoX19ob3N0cHJvZ3MpLFwKLSAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksJChtKSwk
KGlmICQoJChtKS1vYmpzKSwpKSkKLWhvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywk
KHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkpCi1ob3N0LWN4
eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rw
cm9ncyksJCgkKG0pLWN4eG9ianMpKSkpCisJCSAgICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9i
anMpLCwkKGlmICQoJChtKS1vYmpzKSwkKG0pKSkpCisjIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBp
bGVkIGZyb20gLmMgZmlsZXMKK2hvc3QtY29ianMgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKF9f
aG9zdHByb2dzKSwkKCQobSktb2JqcykpKQorCisjIEMrKyBjb2RlCisjIEMrKyBleGVjdXRhYmxl
cyBjb21waWxlZCBmcm9tIGF0IGxlYXN0IG9uZSAuY2MgZmlsZQorIyBhbmQgemVybyBvciBtb3Jl
IC5jIGZpbGVzCisgaG9zdC1jeHhtdWx0aSAgIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3Mp
LCQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSkpKQorIyBDKysgT2JqZWN0ICgubykgZmlsZXMgY29t
cGlsZWQgZnJvbSAuY2MgZmlsZXMKK2hvc3QtY3h4b2JqcyAgICA6PSAkKHNvcnQgJChmb3JlYWNo
IG0sJChob3N0LWN4eG11bHRpKSwkKCQobSktY3h4b2JqcykpKQorI09iamVjdCAoLm8pIGZpbGVz
IHVzZWQgYnkgdGhlIHNoYXJlZCBsaWJhcmllcworaG9zdC1jc2hvYmpzICAgIDo9ICQoc29ydCAk
KGZvcmVhY2ggbSwkKGhvc3QtY3NobGliKSwkKCQobTouc289LW9ianMpKSkpCitob3N0LWN4eHNo
b2JqcyAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQoaG9zdC1jeHhzaGxpYiksJCgkKG06LnNvPS1v
YmpzKSkpKQorCisKK2hvc3QtY3NpbmdsZSA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1j
c2luZ2xlKSkKK2hvc3QtY211bHRpICA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jbXVs
dGkpKQoraG9zdC1jeHhtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4bXVs
dGkpKQoraG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jb2JqcykpCito
b3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4b2JqcykpCiBmaXhk
ZXAtb2JqcyA6PSAkKG9iaikvZml4ZGVwLm8KIAogSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2Jq
KSAtRENPTkZJR189XCJcIgogCi0kKGhvc3QtY3NpbmdsZSk6ICU6ICUuYwotCSQoSE9TVENDKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAk
KG9iaikvJEAKLQotJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxp
YikKLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENG
TEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElC
RVNfJChARikpIC1vICQob2JqKS8kQAogCi0kKGhvc3QtY3h4bXVsdGkpOiAlOiAkKGhvc3QtY3h4
b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQotCSQoSE9TVENYWCkgJChIT1NUX0VY
VFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAk
KG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQo
QEYpKSAtbyAkKG9iaikvJEAKIAogJChvYmopL2ZpeGRlcDogJChmaXhkZXAtb2JqcykKIAkkKEhP
U1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBG
KSkgJDwgLW8gJEAKQEAgLTQwLDYgKzUyLDgwIEBAICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9i
anMpCiAkKGZpeGRlcC1vYmpzKTogJChzcmMpL2ZpeGRlcC5jCiAJJChIT1NUQ0MpICQoSE9TVF9F
WFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRA
CiAKKyMjIyMjCisjIENvbXBpbGUgcHJvZ3JhbXMgb24gdGhlIGhvc3QKKworIyBDcmVhdGUgZXhl
Y3V0YWJsZSBmcm9tIGEgc2luZ2xlIC5jIGZpbGUKKyMgaG9zdC1jc2luZ2xlIC0+IEV4ZWN1dGFi
bGUKK3F1aWV0X2NtZF9ob3N0LWNzaW5nbGUgCT0gSE9TVENDICAkQAorICAgICAgY21kX2hvc3Qt
Y3NpbmdsZQk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAk
PCBcCisJCSQoSE9TVExETElCUykgJChIT1NUTERMSUJTXyQoQEYpKQorJChob3N0LWNzaW5nbGUp
OiAkKG9iaikvJTogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCisJJChjYWxsIGlmX2No
YW5nZWRfZGVwLGhvc3QtY3NpbmdsZSkKKworIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFzZWQgb24g
bGlzdCBvZiAubyBmaWxlcywgYWxsIHBsYWluIGMKKyMgaG9zdC1jbXVsdGkgLT4gZXhlY3V0YWJs
ZQorcXVpZXRfY21kX2hvc3QtY211bHRpCT0gSE9TVExEICAkQAorICAgICAgY21kX2hvc3QtY211
bHRpCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpIC1vICRAIFwKKwkJCSAgJChhZGRwcmVmaXgg
JChvYmopLywkKCQoQEYpLW9ianMpKSBcCisJCQkgICQoSE9TVF9MREZMQUdTKSAkKEhPU1RMRExJ
QlNfJChARikpCiskKGhvc3QtY211bHRpKTogJChvYmopL2ZpeGRlcCBGT1JDRQorCSQoY2FsbCBp
Zl9jaGFuZ2VkLGhvc3QtY211bHRpKQorJChjYWxsIG11bHRpX2RlcGVuZCwkKGhvc3QtY211bHRp
KSwgLCAtb2JqcykKKworCisjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmMgZmlsZQor
IyBob3N0LWNvYmpzIC0+IC5vCitxdWlldF9jbWRfaG9zdC1jb2Jqcwk9IEhPU1RDQyAgJEAKKyAg
ICAgIGNtZF9ob3N0LWNvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVENGTEFH
U18kKEBGKSlcCisJCQkgIC1jIC1vICRAICQ8CiskKGZpbHRlci1vdXQgJS50YWIubywgJChmaWx0
ZXItb3V0ICUubGV4Lm8sJChob3N0LWNvYmpzKSkpOiAkKG9iaikvJS5vOlwKKwkJJChzcmMpLyUu
YyAkKG9iaikvZml4ZGVwIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY29ianMp
CisKKyQoZmlsdGVyICUubGV4Lm8sJChob3N0LWNvYmpzKSk6ICQob2JqKS8lLmxleC5vOiAgJChv
YmopLyUubGV4LmMgJChvYmopL2ZpeGRlcCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxo
b3N0LWNvYmpzKQorCiskKGZpbHRlciAlLnRhYi5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikvJS50
YWIubzogICQob2JqKS8lLnRhYi5jICQob2JqKS9maXhkZXAgRk9SQ0UKKwkkKGNhbGwgaWZfY2hh
bmdlZF9kZXAsaG9zdC1jb2JqcykKKworIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFzZWQgb24gbGlz
dCBvZiAubyBmaWxlcywgYSBtaXh0dXJlIG9mIC5jIGFuZCAuY2MKKyMgaG9zdC1jeHhtdWx0aSAt
PiBleGVjdXRhYmxlCitxdWlldF9jbWRfaG9zdC1jeHhtdWx0aQk9IEhPU1RMRCAgJEAKKyAgICAg
IGNtZF9ob3N0LWN4eG11bHRpCT0gJChIT1NUQ1hYKSAkKEhPU1RMREZMQUdTKSAtbyAkQFwKKwkJ
CSAgJChmb3JlYWNoIG8sb2JqcyBjeHhvYmpzLFwKKwkJCSAgJChhZGRwcmVmaXggJChvYmopLywk
KCQoQEYpLSQobykpKSkgXAorCQkJICAkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18kKEBGKSkK
KyQoaG9zdC1jeHhtdWx0aSk6IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsaG9zdC1jeHhtdWx0
aSkKKyQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWN4eG11bHRpKSwgLCAtb2JqcyAtY3h4b2Jq
cykKKworCisjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmNjIChDKyspIGZpbGUKK3F1
aWV0X2NtZF9ob3N0LWN4eG9ianMJPSBIT1NUQ1hYICRACisgICAgICBjbWRfaG9zdC1jeHhvYmpz
CT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3MpICQoSE9TVENYWEZMQUdTXyQoQEYpKSBcCisJ
CQkgIC1jIC1vICRAICQ8CiskKGhvc3QtY3h4b2Jqcyk6ICQob2JqKS8lLm86ICQoc3JjKS8lLmNj
IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3h4b2JqcykKKworIyBDb21waWxl
IC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxlCisjIGhvc3QtY3No
b2JqcyAtPiAubworcXVpZXRfY21kX2hvc3QtY3Nob2Jqcwk9IEhPU1RDQyAgLWZQSUMgJEAKKyAg
ICAgIGNtZF9ob3N0LWNzaG9ianMJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgLWZQSUMgLWMg
LW8gJEAgJDwKKyQoaG9zdC1jc2hvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuYyBGT1JDRQor
CSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNzaG9ianMpCisKKyMgQ29tcGlsZSAuYyBmaWxl
LCBjcmVhdGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgLm8gZmlsZQorIyBOb3RlIHRoYXQgcGx1Z2lu
IGNhcGFibGUgZ2NjIHZlcnNpb25zIGNhbiBiZSBlaXRoZXIgQyBvciBDKysgYmFzZWQKKyMgdGhl
cmVmb3JlIHBsdWdpbiBzb3VyY2UgZmlsZXMgaGF2ZSB0byBiZSBjb21waWxhYmxlIGluIGJvdGgg
QyBhbmQgQysrIG1vZGUuCisjIFRoaXMgaXMgd2h5IGEgQysrIGNvbXBpbGVyIGlzIGludm9rZWQg
b24gYSAuYyBmaWxlLgorIyBob3N0LWN4eHNob2JqcyAtPiAubworcXVpZXRfY21kX2hvc3QtY3h4
c2hvYmpzCT0gSE9TVENYWCAtZlBJQyAkQAorICAgICAgY21kX2hvc3QtY3h4c2hvYmpzCT0gJChI
T1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3MpIC1mUElDIC1jIC1vICRAICQ8CiskKGhvc3QtY3h4c2hv
YmpzKTogJChvYmopLyUubzogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCisJQGVjaG8g
dGVzdC0tJEAKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jeHhzaG9ianMpCisKIGNsZWFu
OgogCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQogZGlzdGNs
ZWFuOiBjbGVhbgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA3LWlt
cG9ydC1ob3N0LXRvb2xzLXJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA3LWlt
cG9ydC1ob3N0LXRvb2xzLXJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmQyNGRjOTcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMv
MDctaW1wb3J0LWhvc3QtdG9vbHMtcnVsZXMKQEAgLTAsMCArMSwxNDIgQEAKK2RpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9N
YWtlZmlsZS5icgoraW5kZXggYWZlOTRlZS4uOGU2NGE5YiAxMDA2NDQKKy0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZp
bGUuYnIKK0BAIC0xMCwyOSArMTAsNDEgQEAgaW5jbHVkZSBNYWtlZmlsZS5ydWxlcworIGluY2x1
ZGUgTWFrZWZpbGUKKyAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKKyAt
aW5jbHVkZSAkKG9iaikvLmRlcGVuZAorLSQob2JqKS8uZGVwZW5kOiAkKHdpbGRjYXJkICouaCAq
LmMpCistCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgLU1NICou
YyA+ICRAIDI+L2Rldi9udWxsIHx8IDoKKyAKKyBfX2hvc3Rwcm9ncyA6PSAkKHNvcnQgJChob3N0
cHJvZ3MteSkgJChob3N0cHJvZ3MtbSkpCistaG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFjaCBtLCQo
X19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkKKytob3N0LWNzaGxpYiA6PSAk
KHNvcnQgJChob3N0bGlicy15KSAkKGhvc3RsaWJzLW0pKQorK2hvc3QtY3h4c2hsaWIgOj0gJChz
b3J0ICQoaG9zdGN4eGxpYnMteSkgJChob3N0Y3h4bGlicy1tKSkKKysKKysjIEMgY29kZQorKyMg
RXhlY3V0YWJsZXMgY29tcGlsZWQgZnJvbSBhIHNpbmdsZSAuYyBmaWxlCisraG9zdC1jc2luZ2xl
Oj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksIFwKKysgICAgICAgICAgICAgJChpZiAkKCQo
bSktb2JqcykkKCQobSktY3h4b2JqcyksLCQobSkpKQorIGhvc3QtY211bHRpIDo9ICQoZm9yZWFj
aCBtLCQoX19ob3N0cHJvZ3MpLFwKKy0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCwk
KGlmICQoJChtKS1vYmpzKSwkKG0pKSkpCistaG9zdC1jeHhtdWx0aSA6PSAkKGZvcmVhY2ggbSwk
KF9faG9zdHByb2dzKSxcCistICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pLCQo
aWYgJCgkKG0pLW9ianMpLCkpKQorLWhvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywk
KHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkpCistaG9zdC1j
eHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0
cHJvZ3MpLCQoJChtKS1jeHhvYmpzKSkpKQorKwkJICAgICAgICAgICAgJChpZiAkKCQobSktY3h4
b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkKKysjIE9iamVjdCAoLm8pIGZpbGVzIGNv
bXBpbGVkIGZyb20gLmMgZmlsZXMKKytob3N0LWNvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0s
JChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkKKysKKysjIEMrKyBjb2RlCisrIyBDKysgZXhl
Y3V0YWJsZXMgY29tcGlsZWQgZnJvbSBhdCBsZWFzdCBvbmUgLmNjIGZpbGUKKysjIGFuZCB6ZXJv
IG9yIG1vcmUgLmMgZmlsZXMKKysgaG9zdC1jeHhtdWx0aSAgIDo9ICQoZm9yZWFjaCBtLCQoX19o
b3N0cHJvZ3MpLCQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSkpKQorKyMgQysrIE9iamVjdCAoLm8p
IGZpbGVzIGNvbXBpbGVkIGZyb20gLmNjIGZpbGVzCisraG9zdC1jeHhvYmpzICAgIDo9ICQoc29y
dCAkKGZvcmVhY2ggbSwkKGhvc3QtY3h4bXVsdGkpLCQoJChtKS1jeHhvYmpzKSkpCisrI09iamVj
dCAoLm8pIGZpbGVzIHVzZWQgYnkgdGhlIHNoYXJlZCBsaWJhcmllcworK2hvc3QtY3Nob2JqcyAg
ICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWNzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkp
KQorK2hvc3QtY3h4c2hvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWN4eHNobGli
KSwkKCQobTouc289LW9ianMpKSkpCisrCisrCisraG9zdC1jc2luZ2xlIDo9ICQoYWRkcHJlZml4
ICQob2JqKS8sJChob3N0LWNzaW5nbGUpKQorK2hvc3QtY211bHRpICA6PSAkKGFkZHByZWZpeCAk
KG9iaikvLCQoaG9zdC1jbXVsdGkpKQorK2hvc3QtY3h4bXVsdGkgIDo9ICQoYWRkcHJlZml4ICQo
b2JqKS8sJChob3N0LWN4eG11bHRpKSkKKytob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2Jq
KS8sJChob3N0LWNvYmpzKSkKKytob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywk
KGhvc3QtY3h4b2JqcykpCisgZml4ZGVwLW9ianMgOj0gJChvYmopL2ZpeGRlcC5vCisgCisgSE9T
VF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgorIAorLSQoaG9zdC1jc2lu
Z2xlKTogJTogJS5jCistCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFH
UykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKKy0KKy0kKGhvc3QtY211bHRpKTog
JTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQorLQkkKEhPU1RDQykgJChIT1NUX0VYVFJB
Q0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmop
LywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorIAor
LSQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9z
dC1jc2hsaWIpCistCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1Mp
ICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgk
KEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKyAKKyAk
KG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQorIAkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZM
QUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgJDwgLW8gJEAKK0BAIC00MCw2
ICs1Miw4MCBAQCAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQorICQoZml4ZGVwLW9ianMp
OiAkKHNyYykvZml4ZGVwLmMKKyAJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NU
Q0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACisgCisrIyMjIyMKKysjIENv
bXBpbGUgcHJvZ3JhbXMgb24gdGhlIGhvc3QKKysKKysjIENyZWF0ZSBleGVjdXRhYmxlIGZyb20g
YSBzaW5nbGUgLmMgZmlsZQorKyMgaG9zdC1jc2luZ2xlIC0+IEV4ZWN1dGFibGUKKytxdWlldF9j
bWRfaG9zdC1jc2luZ2xlIAk9IEhPU1RDQyAgJEAKKysgICAgICBjbWRfaG9zdC1jc2luZ2xlCT0g
JChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVExERkxBR1MpIC1vICRAICQ8IFwKKysJCSQo
SE9TVExETElCUykgJChIT1NUTERMSUJTXyQoQEYpKQorKyQoaG9zdC1jc2luZ2xlKTogJChvYmop
LyU6ICQoc3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZF9k
ZXAsaG9zdC1jc2luZ2xlKQorKworKyMgTGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxpc3Qg
b2YgLm8gZmlsZXMsIGFsbCBwbGFpbiBjCisrIyBob3N0LWNtdWx0aSAtPiBleGVjdXRhYmxlCisr
cXVpZXRfY21kX2hvc3QtY211bHRpCT0gSE9TVExEICAkQAorKyAgICAgIGNtZF9ob3N0LWNtdWx0
aQk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAtbyAkQCBcCisrCQkJICAkKGFkZHByZWZpeCAk
KG9iaikvLCQoJChARiktb2JqcykpIFwKKysJCQkgICQoSE9TVF9MREZMQUdTKSAkKEhPU1RMRExJ
QlNfJChARikpCisrJChob3N0LWNtdWx0aSk6ICQob2JqKS9maXhkZXAgRk9SQ0UKKysJJChjYWxs
IGlmX2NoYW5nZWQsaG9zdC1jbXVsdGkpCisrJChjYWxsIG11bHRpX2RlcGVuZCwkKGhvc3QtY211
bHRpKSwgLCAtb2JqcykKKysKKysKKysjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmMg
ZmlsZQorKyMgaG9zdC1jb2JqcyAtPiAubworK3F1aWV0X2NtZF9ob3N0LWNvYmpzCT0gSE9TVEND
ICAkQAorKyAgICAgIGNtZF9ob3N0LWNvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQo
SE9TVENGTEFHU18kKEBGKSlcCisrCQkJICAtYyAtbyAkQCAkPAorKyQoZmlsdGVyLW91dCAlLnRh
Yi5vLCAkKGZpbHRlci1vdXQgJS5sZXgubywkKGhvc3QtY29ianMpKSk6ICQob2JqKS8lLm86XAor
KwkJJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCisrCSQoY2FsbCBpZl9jaGFuZ2VkX2Rl
cCxob3N0LWNvYmpzKQorKworKyQoZmlsdGVyICUubGV4Lm8sJChob3N0LWNvYmpzKSk6ICQob2Jq
KS8lLmxleC5vOiAgJChvYmopLyUubGV4LmMgJChvYmopL2ZpeGRlcCBGT1JDRQorKwkkKGNhbGwg
aWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykKKysKKyskKGZpbHRlciAlLnRhYi5vLCQoaG9zdC1j
b2JqcykpOiAkKG9iaikvJS50YWIubzogICQob2JqKS8lLnRhYi5jICQob2JqKS9maXhkZXAgRk9S
Q0UKKysJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY29ianMpCisrCisrIyBMaW5rIGFuIGV4
ZWN1dGFibGUgYmFzZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYSBtaXh0dXJlIG9mIC5jIGFuZCAu
Y2MKKysjIGhvc3QtY3h4bXVsdGkgLT4gZXhlY3V0YWJsZQorK3F1aWV0X2NtZF9ob3N0LWN4eG11
bHRpCT0gSE9TVExEICAkQAorKyAgICAgIGNtZF9ob3N0LWN4eG11bHRpCT0gJChIT1NUQ1hYKSAk
KEhPU1RMREZMQUdTKSAtbyAkQFwKKysJCQkgICQoZm9yZWFjaCBvLG9ianMgY3h4b2JqcyxcCisr
CQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktJChvKSkpKSBcCisrCQkJICAkKEhPU1RM
RExJQlMpICQoSE9TVExETElCU18kKEBGKSkKKyskKGhvc3QtY3h4bXVsdGkpOiBGT1JDRQorKwkk
KGNhbGwgaWZfY2hhbmdlZCxob3N0LWN4eG11bHRpKQorKyQoY2FsbCBtdWx0aV9kZXBlbmQsJCho
b3N0LWN4eG11bHRpKSwgLCAtb2JqcyAtY3h4b2JqcykKKysKKysKKysjIENyZWF0ZSAubyBmaWxl
IGZyb20gYSBzaW5nbGUgLmNjIChDKyspIGZpbGUKKytxdWlldF9jbWRfaG9zdC1jeHhvYmpzCT0g
SE9TVENYWCAkQAorKyAgICAgIGNtZF9ob3N0LWN4eG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4
eF9mbGFncykgJChIT1NUQ1hYRkxBR1NfJChARikpIFwKKysJCQkgIC1jIC1vICRAICQ8CisrJCho
b3N0LWN4eG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jYyBGT1JDRQorKwkkKGNhbGwgaWZf
Y2hhbmdlZF9kZXAsaG9zdC1jeHhvYmpzKQorKworKyMgQ29tcGlsZSAuYyBmaWxlLCBjcmVhdGUg
cG9zaXRpb24gaW5kZXBlbmRlbnQgLm8gZmlsZQorKyMgaG9zdC1jc2hvYmpzIC0+IC5vCisrcXVp
ZXRfY21kX2hvc3QtY3Nob2Jqcwk9IEhPU1RDQyAgLWZQSUMgJEAKKysgICAgICBjbWRfaG9zdC1j
c2hvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpIC1mUElDIC1jIC1vICRAICQ8CisrJCho
b3N0LWNzaG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNFCisrCSQoY2FsbCBpZl9j
aGFuZ2VkX2RlcCxob3N0LWNzaG9ianMpCisrCisrIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBw
b3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxlCisrIyBOb3RlIHRoYXQgcGx1Z2luIGNhcGFibGUg
Z2NjIHZlcnNpb25zIGNhbiBiZSBlaXRoZXIgQyBvciBDKysgYmFzZWQKKysjIHRoZXJlZm9yZSBw
bHVnaW4gc291cmNlIGZpbGVzIGhhdmUgdG8gYmUgY29tcGlsYWJsZSBpbiBib3RoIEMgYW5kIEMr
KyBtb2RlLgorKyMgVGhpcyBpcyB3aHkgYSBDKysgY29tcGlsZXIgaXMgaW52b2tlZCBvbiBhIC5j
IGZpbGUuCisrIyBob3N0LWN4eHNob2JqcyAtPiAubworK3F1aWV0X2NtZF9ob3N0LWN4eHNob2Jq
cwk9IEhPU1RDWFggLWZQSUMgJEAKKysgICAgICBjbWRfaG9zdC1jeHhzaG9ianMJPSAkKEhPU1RD
WFgpICQoaG9zdGN4eF9mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwKKyskKGhvc3QtY3h4c2hvYmpz
KTogJChvYmopLyUubzogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCisrCUBlY2hvIHRl
c3QtLSRACisrCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eHNob2JqcykKKysKKyBjbGVh
bjoKKyAJJChRKXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpCisgZGlz
dGNsZWFuOiBjbGVhbgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYr-0006oi-0w; Thu, 19 Sep 2019 09:17:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYq-0006oU-2m
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:12 +0000
X-Inumbo-ID: 42b761de-dabe-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 42b761de-dabe-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 09:17:11 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B5095F2025;
 Thu, 19 Sep 2019 11:17:10 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id OFIgJMj03O6p; Thu, 19 Sep 2019 11:17:10 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 8FAC6F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:08 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:08 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:59 +0200
Message-ID: <20190919091607.23327-16-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 15/23] build: Use kconfiglib from
 Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGttZW51Y29uZmlnLCBndWljb25maWcgcnVsZXMgdG8g
dXNlIHdpdGgKa2NvbmZpZ2xpYi4KClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNo
YXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlIHwgNDUgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgNDIgaW5z
ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2Vm
aWxlCmluZGV4IGM3YTZhOTkuLmI2YjZjMTIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01h
a2VmaWxlCkBAIC0xMjgsNiArMTI4LDcgQEAgRUxJQl9ESVIgOj0gJChyZWFscGF0aCAkKHBhdHN1
YnN0ICUvLCUsJChwYXRzdWJzdCAlLiwlLCQoRUxJQl9ESVIpKSkpCiBDT05GSUdfRElSICAgICAg
ICAgICAgOj0gJChDT05GSUdfVUtfQVBQKQogQ09ORklHX0NPTkZJR19JTiAgICAgIDo9ICQoQ09O
RklHX1VLX0JBU0UpL0NvbmZpZy51awogQ09ORklHICAgICAgICAgICAgICAgIDo9ICQoQ09ORklH
X1VLX0JBU0UpL3N1cHBvcnQva2NvbmZpZy5uZXcKK0NPTkZJR0xJQgkgICAgICA6PSAkKENPTkZJ
R19VS19CQVNFKS9zdXBwb3J0L2tjb25maWdsaWIKIFVLX0NPTkZJRyAgICAgICAgICAgICA6PSAk
KENPTkZJR19ESVIpLy5jb25maWcKIFVLX0NPTkZJR19PVVQgICAgICAgICA6PSAkKEJVSUxEX0RJ
UikvY29uZmlnCiBVS19HRU5FUkFURURfSU5DTFVERVMgOj0gJChCVUlMRF9ESVIpL2luY2x1ZGUK
QEAgLTE2MSw5ICsxNjIsMTMgQEAgZXhwb3J0IERBVEUgOj0gJChzaGVsbCBkYXRlICslWSVtJWQp
CiAKICMgTWFrZWZpbGUgdGFyZ2V0cwogbnVsbF90YXJnZXRzCQk6PSBwcmludC12ZXJzaW9uIHBy
aW50LXZhcnMgaGVscAotbm9jb25maWdfdGFyZ2V0cwk6PSBtZW51Y29uZmlnIG5jb25maWcgZ2Nv
bmZpZyB4Y29uZmlnIGNvbmZpZyBvbGRjb25maWcgcmFuZGNvbmZpZyBcCi0JCQkgICBkZWZjb25m
aWcgJV9kZWZjb25maWcgYWxseWVzY29uZmlnIGFsbG5vY29uZmlnIHNpbGVudG9sZGNvbmZpZyBy
ZWxlYXNlIFwKLQkJCSAgIG9sZGRlZmNvbmZpZyBwcm9wZXJjbGVhbiBkaXN0Y2xlYW4gJChudWxs
X3RhcmdldHMpCitub2NvbmZpZ190YXJnZXRzCTo9IHVrY29uZmlnIG1lbnVjb25maWcgbmNvbmZp
ZyBnY29uZmlnIHhjb25maWcgY29uZmlnIFwKKwkJCSAgIG9sZGNvbmZpZyByYW5kY29uZmlnIFwK
KwkJCSAgIGRlZmNvbmZpZyAlX2RlZmNvbmZpZyBhbGx5ZXNjb25maWcgYWxsbm9jb25maWcgXAor
CQkJICAgc2lsZW50b2xkY29uZmlnIFwKKwkJCSAgIHJlbGVhc2Ugb2xkZGVmY29uZmlnIHByb3Bl
cmNsZWFuIGRpc3RjbGVhbiBcCisJCQkgICBzY3JpcHRjb25maWcgaXNjcmlwdGNvbmZpZyBrbWVu
dWNvbmZpZyBndWljb25maWcgXAorCQkJICAgZHVtcHZhcnNjb25maWcgJChudWxsX3RhcmdldHMp
CiAKICMgVG8gcHV0IG1vcmUgZm9jdXMgb24gd2FybmluZ3MsIGJlIGxlc3MgdmVyYm9zZSBhcyBk
ZWZhdWx0CiAjIFVzZSAnbWFrZSBWPTEnIHRvIHNlZSB0aGUgZnVsbCBjb21tYW5kcwpAQCAtNjk0
LDYgKzY5OSwzOCBAQCBDT01NT05fQ09ORklHX0VOViA9IFwKIAlLQ09ORklHX0VQTEFUX0lOPSIk
KEtDT05GSUdfRVBMQVRfSU4pIiBcCiAJVUtfTkFNRT0iJChDT05GSUdfVUtfTkFNRSkiCiAKK1BI
T05ZICs9IHNjcmlwdGNvbmZpZyBpc2NyaXB0Y29uZmlnIGttZW51Y29uZmlnIGd1aWNvbmZpZyBk
dW1wdmFyc2NvbmZpZworCitQWVRIT05DTUQgPz0gcHl0aG9uCitrcHl0aG9uIDo9IFBZVEhPTlBB
VEg9JChVS19DT05GSUdMSUIpOiQkUFlUSE9OUEFUSCAkKFBZVEhPTkNNRCkKKworaWZuZXEgKCQo
ZmlsdGVyIHNjcmlwdGNvbmZpZywkKE1BS0VDTURHT0FMUykpLCkKK2lmbmRlZiBTQ1JJUFQKKyQo
ZXJyb3IgVXNlICJtYWtlIHNjcmlwdGNvbmZpZyBTQ1JJUFQ9PHBhdGggdG8gc2NyaXB0PiBbU0NS
SVBUX0FSRz08YXJndW1lbnQ+XSIpCitlbmRpZgorZW5kaWYKKworc2NyaXB0Y29uZmlnOiAkKEtD
T05GSUdfRElSKS9maXhkZXAKKwkkKFEpJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9uKSAk
KFNDUklQVCkgJChLY29uZmlnKSAkKGlmICQoU0NSSVBUX0FSRyksIiQoU0NSSVBUX0FSRykiKQor
Citpc2NyaXB0Y29uZmlnOiAkKEtDT05GSUdfRElSKS9maXhkZXAKKwkkKFEpJChDT01NT05fQ09O
RklHX0VOVikgJChrcHl0aG9uKSAtaSAtYyBcCisJICAiaW1wb3J0IGtjb25maWdsaWI7IFwKKwkg
ICBrY29uZiA9IGtjb25maWdsaWIuS2NvbmZpZygnJChVS19DT05GSUcpJyk7IFwKKwkgICBwcmlu
dCgnQSBLY29uZmlnIGluc3RhbmNlIFwna2NvbmZcJyBmb3IgdGhlIGFyY2hpdGVjdHVyZSAkKEFS
Q0gpIGhhcyBiZWVuIGNyZWF0ZWQuJykiCisKK2ttZW51Y29uZmlnOiQoS0NPTkZJR19ESVIpL2Zp
eGRlcCAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFU
X0lOKQorCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKGtweXRob24pICQoQ09ORklHTElCKS9tZW51
Y29uZmlnLnB5ICQoQ09ORklHX0NPTkZJR19JTikKKwlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBk
YXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisKK2d1aWNvbmZpZzogJChLQ09ORklH
X0RJUikvZml4ZGVwICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05G
SUdfRVBMQVRfSU4pCisJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChDT05GSUdM
SUIpL2d1aWNvbmZpZy5weSAkKENPTkZJR19DT05GSUdfSU4pCisJQCQoU0NSSVBUU19ESVIpL2Nv
bmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQorCitkdW1wdmFyc2NvbmZp
ZzokKEtDT05GSUdfRElSKS9maXhkZXAKKwkkKFEpJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0
aG9uKSAkKENPTkZJR0xJQikvZXhhbXBsZXMvZHVtcHZhcnMucHkgJChDT05GSUdfQ09ORklHX0lO
KQorCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklH
X09VVCkKKwogeGNvbmZpZzogJChLQ09ORklHX0RJUikvcWNvbmYgJChLQ09ORklHX0FQUF9JTikg
JChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikKIAlAJChDT01NT05fQ09ORklH
X0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRh
dGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKQEAgLTg2Miw2ICs4OTksOCBAQCBoZWxw
OgogCUBlY2hvICdDb25maWd1cmF0aW9uOicKIAlAZWNobyAnKiBtZW51Y29uZmlnICAgICAgICAg
ICAgIC0gaW50ZXJhY3RpdmUgY3Vyc2VzLWJhc2VkIGNvbmZpZ3VyYXRvcicKIAlAZWNobyAnICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgdGFyZ2V0IHdoZW4gbm8gY29uZmlnIGV4
aXN0cyknCisJQGVjaG8gJyAga21lbnVjb25maWcgICAgICAgICAgICAtIGludGVyYWN0aXZlIHB5
dGhvbiBiYXNlZCBjb25maWd1cmF0b3InCisJQGVjaG8gJyAgZ3VpY29uZmlnICAgICAgICAgICAg
ICAtIGludGVyYWN0aXZlIHB5dGhvbiBiYXNlZCBjb25maWd1cmF0b3InCiAJQGVjaG8gJyAgbmNv
bmZpZyAgICAgICAgICAgICAgICAtIGludGVyYWN0aXZlIG5jdXJzZXMtYmFzZWQgY29uZmlndXJh
dG9yJwogCUBlY2hvICcgIHhjb25maWcgICAgICAgICAgICAgICAgLSBpbnRlcmFjdGl2ZSBRdC1i
YXNlZCBjb25maWd1cmF0b3InCiAJQGVjaG8gJyAgZ2NvbmZpZyAgICAgICAgICAgICAgICAtIGlu
dGVyYWN0aXZlIEdUSy1iYXNlZCBjb25maWd1cmF0b3InCi0tIAoyLjcuNAoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYu-0006pU-2S; Thu, 19 Sep 2019 09:17:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYt-0006pN-Q1
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:15 +0000
X-Inumbo-ID: 43f1f348-dabe-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 43f1f348-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:17:13 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CBE8CF2025;
 Thu, 19 Sep 2019 11:17:12 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 8drXqlkvFXzg; Thu, 19 Sep 2019 11:17:12 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 9BD8AF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:10 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:08 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:00 +0200
Message-ID: <20190919091607.23327-17-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 16/23] Replace the
 silentoldconfig with syncconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHNpbGVudG9sZGNvbmZpZyBoYXMgYmVlbiByZXBsYWNlZCBpbiB0aGUgbmV3ZXIgZmVhdHVy
ZSBvZiBrY29uZmlnCndpdGggdGhlIHN5bmNjb25maWcuIFdpdGggdGhpcyBwYXRjaCB3ZSByZXBs
YWNlIGl0LgoKU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5h
bUBuZWNsYWIuZXU+Ci0tLQogTWFrZWZpbGUgfCA2ICsrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMg
aW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01h
a2VmaWxlCmluZGV4IGI2YjZjMTIuLjlkZjJlZTcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBi
L01ha2VmaWxlCkBAIC03NzQsOCArNzc0LDggQEAgYWxsbm9jb25maWc6ICQoS0NPTkZJR19ESVIp
L2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR18KIAlA
JChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRkZWZjb25maWcgJChDT05GSUdfQ09ORklHX0lO
KSA+L2Rldi9udWxsCiAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykg
JChVS19DT05GSUdfT1VUKQogCi1zaWxlbnRvbGRjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYg
JChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikK
LQlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1zaWxlbnRvbGRjb25maWcgJChDT05GSUdfQ09O
RklHX0lOKQorc3luY2NvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lO
KSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorCUAkKENPTU1PTl9DT05G
SUdfRU5WKSAkPCAtLXN5bmNjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNf
RElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIAogb2xkZGVm
Y29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19F
TElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCkBAIC05MDUsNyArOTA1LDcgQEAgaGVscDoKIAlA
ZWNobyAnICB4Y29uZmlnICAgICAgICAgICAgICAgIC0gaW50ZXJhY3RpdmUgUXQtYmFzZWQgY29u
ZmlndXJhdG9yJwogCUBlY2hvICcgIGdjb25maWcgICAgICAgICAgICAgICAgLSBpbnRlcmFjdGl2
ZSBHVEstYmFzZWQgY29uZmlndXJhdG9yJwogCUBlY2hvICcgIG9sZGNvbmZpZyAgICAgICAgICAg
ICAgLSByZXNvbHZlIGFueSB1bnJlc29sdmVkIHN5bWJvbHMgaW4gLmNvbmZpZycKLQlAZWNobyAn
ICBzaWxlbnRvbGRjb25maWcgICAgICAgIC0gU2FtZSBhcyBvbGRjb25maWcsIGJ1dCBxdWlldGx5
LCBhZGRpdGlvbmFsbHkgdXBkYXRlIGRlcHMnCisJQGVjaG8gJyAgc3luY2NvbmZpZyAgICAgICAg
ICAgICAtIFNhbWUgYXMgb2xkY29uZmlnLCBidXQgcXVpZXRseSwgYWRkaXRpb25hbGx5IHVwZGF0
ZSBkZXBzJwogCUBlY2hvICcgIG9sZGRlZmNvbmZpZyAgICAgICAgICAgLSBTYW1lIGFzIHNpbGVu
dG9sZGNvbmZpZyBidXQgc2V0cyBuZXcgc3ltYm9scyB0byB0aGVpciBkZWZhdWx0IHZhbHVlJwog
CUBlY2hvICcgIHJhbmRjb25maWcgICAgICAgICAgICAgLSBOZXcgY29uZmlnIHdpdGggcmFuZG9t
IGFuc3dlciB0byBhbGwgb3B0aW9ucycKIAlAZWNobyAnICBkZWZjb25maWcgICAgICAgICAgICAg
IC0gTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgYW5zd2VyIHRvIGFsbCBvcHRpb25zJwotLSAKMi43
LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYy-0006qH-43; Thu, 19 Sep 2019 09:17:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYx-0006q7-Hq
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:19 +0000
X-Inumbo-ID: 4670f434-dabe-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4670f434-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:17:17 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id EAD7AF2025;
 Thu, 19 Sep 2019 11:17:16 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id nRhXgYRtOD39; Thu, 19 Sep 2019 11:17:16 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id BED15F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:14 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:08 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:02 +0200
Message-ID: <20190919091607.23327-19-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 18/23] build: Pre-process
 Config.uk within kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGtjb25maWcgZXh0ZXJuYWwgbGlicmFyeSB3ZXJlIHByb2Nlc3NlZCBpbiB0aGUgTWFrZWZp
bGUuIFdpdGgKdGhpcyBwYXRjaCB3ZSB1c2UgdGhlIGtjb25maWcgcHJlcHJvY2VzcyBmZWF0dXJl
IHRvIGdlbmVyYXRlIHRoZQpuZWNlc3NhcnkgQ29uZmlnLnVrIGZpbGVzCgpTaWduZWQtb2ZmLWJ5
OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBDb25m
aWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIzICsrKy0tLS0tCiBNYWtlZmls
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDg2ICsrKysrKysrKysrLS0tLS0tLS0t
LS0tLS0tLS0KIGxpYi9Db25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDggLS0t
CiBwbGF0L0NvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0IC0tCiBzdXBwb3J0
L3NjcmlwdHMvdWtfYnVpbGRfY29uZmlndXJlLnNoIHwgMTAyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTQxIGluc2VydGlvbnMoKyksIDgyIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQvc2NyaXB0cy91a19idWlsZF9j
b25maWd1cmUuc2gKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggMjFh
ZTY1Ny4uMDFhN2FjOCAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBiL0NvbmZpZy51awpAQCAt
MywxNiArMyw2IEBACiAjIHNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9Eb2N1bWVudGF0
aW9uL2tidWlsZC9Db25maWcuaW4tbGFuZ3VhZ2UudHh0LgogIwogbWFpbm1lbnUgIlVuaWtyYWZ0
LyQoVUtfRlVMTFZFUlNJT04pIENvbmZpZ3VyYXRpb24iCi1jb25maWcgS0NPTkZJR19BUFBfSU4K
LQlzdHJpbmcKLQlkZWZhdWx0ICIkKEtDT05GSUdfQVBQX0lOKSIKLWNvbmZpZyBLQ09ORklHX0VM
SUJfSU4KLQlzdHJpbmcKLQlkZWZhdWx0ICIkKEtDT05GSUdfRUxJQl9JTikiCi1jb25maWcgS0NP
TkZJR19FUExBVF9JTgotCXN0cmluZwotCWRlZmF1bHQgIiQoS0NPTkZJR19FUExBVF9JTikiCi0K
IGNvbmZpZyBVS19GVUxMVkVSU0lPTgogCXN0cmluZwogCWRlZmF1bHQgIiQoVUtfRlVMTFZFUlNJ
T04pIgpAQCAtMjIsNiArMTIsOSBAQCBjb25maWcgVUtfQ09ERU5BTUUKIGNvbmZpZyBVS19BUkNI
CiAJc3RyaW5nCiAJZGVmYXVsdCAiJChVS19BUkNIKSIKK2NvbmZpZyBOT19BUFAKKwlkZWZfYm9v
bCAkKHNoZWxsLHRlc3QgJChVS19CQVNFKSA9ICQoVUtfQVBQKSAmJiBlY2hvIHkgfHwgZWNobyBu
KQorCiBjb25maWcgVUtfQkFTRQogCXN0cmluZwogCWRlZmF1bHQgIiQoVUtfQkFTRSkiCkBAIC0z
NywxMyArMzAsMTEgQEAgbWVudSAiQXJjaGl0ZWN0dXJlIFNlbGVjdGlvbiIKIGVuZG1lbnUKIAog
bWVudSAiUGxhdGZvcm0gQ29uZmlndXJhdGlvbiIKLQlzb3VyY2UgInBsYXQvQ29uZmlnLnVrIgot
CXNvdXJjZSAiJChLQ09ORklHX0VQTEFUX0lOKSIKKwlzb3VyY2UgIiQoc2hlbGwsJChVS19CQVNF
KS9zdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29uZmlndXJlLnNoIC1wICckKEtDT05GSUdfUExB
VF9ESVIpJyAtbyAnJChLQ09ORklHX1BMQVRfSU4pJykiCiBlbmRtZW51CiAKIG1lbnUgIkxpYnJh
cnkgQ29uZmlndXJhdGlvbiIKLQlzb3VyY2UgImxpYi9Db25maWcudWsiCi0Jc291cmNlICIkKEtD
T05GSUdfRUxJQl9JTikiCisJc291cmNlICIkKHNoZWxsLCQoVUtfQkFTRSkvc3VwcG9ydC9zY3Jp
cHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaCAtZSAnJChLQ09ORklHX0xJQl9ESVIpJyAtbyAnJChL
Q09ORklHX0xJQl9JTiknKSIKIGVuZG1lbnUKIAogbWVudSAiQnVpbGQgT3B0aW9ucyIKQEAgLTE4
Miw5ICsxNzMsOSBAQCBjb25maWcgQ1JPU1NfQ09NUElMRQogIwkgIHN5c3RlbS4KIGVuZG1lbnUK
IAotaWYgVUtfQVBQICE9IFVLX0JBU0UKK2lmICFOT19BUFAKIAltZW51ICJBcHBsaWNhdGlvbiBP
cHRpb25zIgotCQlzb3VyY2UgIiQoS0NPTkZJR19BUFBfSU4pIgorCQlzb3VyY2UgIiQoc2hlbGws
JChVS19CQVNFKS9zdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29uZmlndXJlLnNoIC1hICckKEtD
T05GSUdfQVBQX0RJUiknKSIKIAllbmRtZW51CiBlbmRpZgogCmRpZmYgLS1naXQgYS9NYWtlZmls
ZSBiL01ha2VmaWxlCmluZGV4IDlkZjJlZTcuLjRlODczZjEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxl
CisrKyBiL01ha2VmaWxlCkBAIC0xMjUsNiArMTI1LDggQEAgZW5kaWYKIEVMSUJfRElSIDo9ICQo
cmVhbHBhdGggJChwYXRzdWJzdCAlLywlLCQocGF0c3Vic3QgJS4sJSwkKEVMSUJfRElSKSkpKQog
CiAjIEtDb25maWcgc2V0dGluZ3MKKworQ09ORklHX1VLX1BMQVQgICAgICAgIDo9ICQoQ09ORklH
X1VLX0JBU0UpL3BsYXQvCiBDT05GSUdfRElSICAgICAgICAgICAgOj0gJChDT05GSUdfVUtfQVBQ
KQogQ09ORklHX0NPTkZJR19JTiAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0UpL0NvbmZpZy51awog
Q09ORklHICAgICAgICAgICAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0UpL3N1cHBvcnQva2NvbmZp
Zy5uZXcKQEAgLTEzNyw5ICsxMzksMTIgQEAgVUtfRklYREVQICAgICAgICAgICAgIDo9ICQoS0NP
TkZJR19ESVIpL2ZpeGRlcAogS0NPTkZJR19BVVRPQ09ORklHICAgIDo9ICQoS0NPTkZJR19ESVIp
L2F1dG8uY29uZgogS0NPTkZJR19UUklTVEFURSAgICAgIDo9ICQoS0NPTkZJR19ESVIpL3RyaXN0
YXRlLmNvbmZpZwogS0NPTkZJR19BVVRPSEVBREVSICAgIDo9ICQoVUtfR0VORVJBVEVEX0lOQ0xV
REVTKS91ay9fY29uZmlnLmgKLUtDT05GSUdfQVBQX0lOICAgICAgICA6PSAkKEtDT05GSUdfRElS
KS9hcHAudWsKLUtDT05GSUdfRVBMQVRfSU4gICAgICA6PSAkKEtDT05GSUdfRElSKS9lcGxhdC51
awotS0NPTkZJR19FTElCX0lOICAgICAgIDo9ICQoS0NPTkZJR19ESVIpL2VsaWIudWsKK0tDT05G
SUdfQVBQX0RJUiAgICAgICA6PSAkKENPTkZJR19VS19BUFApCitLQ09ORklHX0xJQl9JTiAgICAg
ICAgOj0gJChLQ09ORklHX0RJUikvbGlicy51aworS0NPTkZJR19ERUZfUExBVFMgICAgIDo9ICQo
YWRkcHJlZml4ICQoQ09ORklHX1VLX1BMQVQpLGxpbnV4dSBrdm0geGVuKQorS0NPTkZJR19MSUJf
RElSICAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0UpL2xpYiAkKEVMSUJfRElSKQorS0NPTkZJR19Q
TEFUX0RJUiAgICAgIDo9ICQoS0NPTkZJR19ERUZfUExBVFMpICQoRVBMQVRfRElSKSAkKENPTkZJ
R19VS19QTEFUKQorS0NPTkZJR19QTEFUX0lOICAgICAgIDo9ICQoS0NPTkZJR19ESVIpL3BsYXQu
dWsKIAogIyBNYWtlZmlsZSBzdXBwb3J0IHNjcmlwdHMKIFNDUklQVFNfRElSIDo9ICQoQ09ORklH
X1VLX0JBU0UpL3N1cHBvcnQvc2NyaXB0cwpAQCAtNjM4LDM2ICs2NDMsNiBAQCBlbmRpZgogSE9T
VENGTEFHUyA9ICQoQ0ZMQUdTX0ZPUl9CVUlMRCkKIGV4cG9ydCBIT1NUQ0ZMQUdTCiAKLSMgYXV0
by1nZW5lcmF0ZWQgS0NvbmZpZyBmaWxlcyBmb3IgaW5jbHVkaW5nIGV4dGVybmFsIGFwcAotJChL
Q09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTik6ICU6
ICUubmV3Ci0JQGNtcCAtcyAkXiAkQDsgaWYgWyAkJD8gLW5lIDAgXTsgdGhlbiBjcCAkXiAkQDsg
ZmkKLQotJChLQ09ORklHX0FQUF9JTikubmV3OgotCUBlY2hvICcjIGV4dGVybmFsIGFwcGxpY2F0
aW9uJyA+ICRACi1pZm5lcSAoJChDT05GSUdfVUtfQkFTRSksJChDT05GSUdfVUtfQVBQKSkKLQlA
ZWNobyAnc291cmNlICIkKEFQUF9ESVIpL0NvbmZpZy51ayInID4+ICRACi1lbHNlCi0JQGVjaG8g
J2NvbW1lbnQgIk5vIGV4dGVybmFsIGFwcGxpY2F0aW9uIHNwZWNpZmllZCInID4+ICRACi1lbmRp
ZgotCi0jIGF1dG8tZ2VuZXJhdGVkIEtDb25maWcgZmlsZXMgZm9yIGluY2x1ZGluZyBleHRlcm5h
bCBsaWJyYXJpZXMKLSQoS0NPTkZJR19FTElCX0lOKS5uZXc6Ci0JQGVjaG8gJyMgZXh0ZXJuYWwg
bGlicmFyaWVzJyA+ICRACi0JQCQoZm9yZWFjaCBFLCQoRUxJQl9ESVIpLCBcCi0JCWVjaG8gJ3Nv
dXJjZSAiJChFKS9Db25maWcudWsiJyA+PiAkQDsgXAotCSkKLQotIyBhdXRvLWdlbmVyYXRlZCBL
Q29uZmlnIGZpbGUgZm9yIGluY2x1ZGluZwotIyBleHRlcm5hbCBwbGF0Zm9ybSBsaWJyYXJpZXMg
dG8gdGhlIG1lbnUKLSQoS0NPTkZJR19FUExBVF9JTikubmV3OgotCUBlY2hvICcjIGV4dGVybmFs
IHBsYXRmb3JtIGxpYnJhcmllcycgPiAkQAotCUAkKGZvcmVhY2ggRSwkKEVQTEFUX0RJUiksIFwK
LQkJZWNobyAnc291cmNlICIkKEUpL0NvbmZpZy51ayInID4+ICRAOyBcCi0JKQotCi0jIGVuZm9y
Y2UgZXhlY3V0aW9uCi0uUEhPTlk6ICQoS0NPTkZJR19BUFBfSU4pLm5ldyAkKEtDT05GSUdfRUxJ
Ql9JTikubmV3ICQoS0NPTkZJR19FUExBVF9JTikubmV3Ci0KIEtDT05GSUdfVE9PTFMgPSBjb25m
IG1jb25mIGdjb25mIG5jb25mIHFjb25mIGZpeGRlcAogS0NPTkZJR19UT09MUyA6PSAkKGFkZHBy
ZWZpeCAkKEtDT05GSUdfRElSKS8sJChLQ09ORklHX1RPT0xTKSkKIApAQCAtNjk0LDkgKzY2OSwx
MSBAQCBDT01NT05fQ09ORklHX0VOViA9IFwKIAlVS19GVUxMVkVSU0lPTj0iJChVS19GVUxMVkVS
U0lPTikiIFwKIAlVS19DT0RFTkFNRT0iJChVS19DT0RFTkFNRSkiIFwKIAlVS19BUkNIPSIkKENP
TkZJR19VS19BUkNIKSIgXAotCUtDT05GSUdfQVBQX0lOPSIkKEtDT05GSUdfQVBQX0lOKSIgXAot
CUtDT05GSUdfRUxJQl9JTj0iJChLQ09ORklHX0VMSUJfSU4pIiBcCi0JS0NPTkZJR19FUExBVF9J
Tj0iJChLQ09ORklHX0VQTEFUX0lOKSIgXAorCUtDT05GSUdfQVBQX0RJUj0iJChLQ09ORklHX0FQ
UF9ESVIpIiBcCisJS0NPTkZJR19MSUJfRElSPSIkKEtDT05GSUdfTElCX0RJUikiIFwKKwlLQ09O
RklHX0xJQl9JTj0iJChLQ09ORklHX0xJQl9JTikiIFwKKwlLQ09ORklHX1BMQVRfRElSPSIkKEtD
T05GSUdfUExBVF9ESVIpIiBcCisJS0NPTkZJR19QTEFUX0lOPSIkKEtDT05GSUdfUExBVF9JTiki
IFwKIAlVS19OQU1FPSIkKENPTkZJR19VS19OQU1FKSIKIAogUEhPTlkgKz0gc2NyaXB0Y29uZmln
IGlzY3JpcHRjb25maWcga21lbnVjb25maWcgZ3VpY29uZmlnIGR1bXB2YXJzY29uZmlnCkBAIC03
MTksMTEgKzY5NiwxMiBAQCBpc2NyaXB0Y29uZmlnOiAkKEtDT05GSUdfRElSKS9maXhkZXAKIAkg
ICBrY29uZiA9IGtjb25maWdsaWIuS2NvbmZpZygnJChVS19DT05GSUcpJyk7IFwKIAkgICBwcmlu
dCgnQSBLY29uZmlnIGluc3RhbmNlIFwna2NvbmZcJyBmb3IgdGhlIGFyY2hpdGVjdHVyZSAkKEFS
Q0gpIGhhcyBiZWVuIGNyZWF0ZWQuJykiCiAKLWttZW51Y29uZmlnOiQoS0NPTkZJR19ESVIpL2Zp
eGRlcCAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFU
X0lOKQotCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKGtweXRob24pICQoQ09ORklHTElCKS9tZW51
Y29uZmlnLnB5ICQoQ09ORklHX0NPTkZJR19JTikKK2ttZW51Y29uZmlnOiQoS0NPTkZJR19ESVIp
L2ZpeGRlcAorCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKGtweXRob24pICQoQ09ORklHTElCKS9t
ZW51Y29uZmlnLnB5IFwKKwkJJChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNfRElSKS9j
b25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIAotZ3VpY29uZmlnOiAk
KEtDT05GSUdfRElSKS9maXhkZXAgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4p
ICQoS0NPTkZJR19FUExBVF9JTikKK2d1aWNvbmZpZzogJChLQ09ORklHX0RJUikvZml4ZGVwCiAJ
QCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChDT05GSUdMSUIpL2d1aWNvbmZpZy5w
eSAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVL
X0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCkBAIC03MzEsMjMgKzcwOSwyMyBAQCBkdW1wdmFy
c2NvbmZpZzokKEtDT05GSUdfRElSKS9maXhkZXAKIAkkKFEpJChDT01NT05fQ09ORklHX0VOVikg
JChrcHl0aG9uKSAkKENPTkZJR0xJQikvZXhhbXBsZXMvZHVtcHZhcnMucHkgJChDT05GSUdfQ09O
RklHX0lOKQogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtf
Q09ORklHX09VVCkKIAoteGNvbmZpZzogJChLQ09ORklHX0RJUikvcWNvbmYgJChLQ09ORklHX0FQ
UF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikKK3hjb25maWc6ICQo
S0NPTkZJR19ESVIpL3Fjb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NP
TkZJR19JTikKIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVL
X0NPTkZJR19PVVQpCiAKLWdjb25maWc6ICQoS0NPTkZJR19ESVIpL2djb25mICQoS0NPTkZJR19B
UFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCitnY29uZmlnOiAk
KEtDT05GSUdfRElSKS9nY29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5WKSBzcmN0cmVlPSQoQ09O
RklHX1VLX0JBU0UpICQ8ICQoQ09ORklHX0NPTkZJR19JTikKIAlAJChTQ1JJUFRTX0RJUikvY29u
ZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKLW1lbnVjb25maWc6ICQo
S0NPTkZJR19ESVIpL21jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAk
KEtDT05GSUdfRVBMQVRfSU4pCittZW51Y29uZmlnOiAkKEtDT05GSUdfRElSKS9tY29uZgogCUAk
KENPTU1PTl9DT05GSUdfRU5WKSAkPCAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoU0NSSVBUU19E
SVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCi1uY29uZmln
OiAkKEtDT05GSUdfRElSKS9uY29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9J
TikgJChLQ09ORklHX0VQTEFUX0lOKQorbmNvbmZpZzogJChLQ09ORklHX0RJUikvbmNvbmYKIAlA
JChDT01NT05fQ09ORklHX0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNf
RElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIAotY29uZmln
OiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lO
KSAkKEtDT05GSUdfRVBMQVRfSU4pCitjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChD
T01NT05fQ09ORklHX0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNfRElS
KS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIApAQCAtNzU1LDQz
ICs3MzMsNDMgQEAgY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4p
ICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVQKICMgU0tJUF9MRUdBQ1k9eSB0byBk
aXNhYmxlIHRoZSBsZWdhY3kgb3B0aW9ucy4gSG93ZXZlciwgaW4gdGhhdCBjYXNlCiAjIG5vIHZh
bHVlcyBhcmUgc2V0IGZvciB0aGUgbGVnYWN5IG9wdGlvbnMgc28gYSBzdWJzZXF1ZW50IG9sZGNv
bmZpZwogIyB3aWxsIHF1ZXJ5IHRoZW0uIFRoZXJlZm9yZSwgcnVuIGFuIGFkZGl0aW9uYWwgb2xk
ZGVmY29uZmlnLgotb2xkY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBf
SU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCitvbGRjb25maWc6ICQo
S0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRjb25maWcg
JChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19D
T05GSUcpICQoVUtfQ09ORklHX09VVCkKIAotcmFuZGNvbmZpZzogJChLQ09ORklHX0RJUikvY29u
ZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lO
KQorcmFuZGNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5W
KSBTS0lQX0xFR0FDWT15ICQ8IC0tcmFuZGNvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQo
Q09NTU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikg
Pi9kZXYvbnVsbAogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQo
VUtfQ09ORklHX09VVCkKIAotYWxseWVzY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NP
TkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCithbGx5
ZXNjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgU0tJ
UF9MRUdBQ1k9eSAkPCAtLWFsbHllc2NvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoQ09N
TU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikgPi9k
ZXYvbnVsbAogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtf
Q09ORklHX09VVCkKIAotYWxsbm9jb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09ORklH
X0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikKK2FsbG5vY29u
ZmlnOiAkKEtDT05GSUdfRElSKS9jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpIFNLSVBfTEVH
QUNZPXkgJDwgLS1hbGxub2NvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoQ09NTU9OX0NP
TkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikgPi9kZXYvbnVs
bAogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklH
X09VVCkKIAotc3luY2NvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lO
KSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorc3luY2NvbmZpZzogJChL
Q09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLXN5bmNjb25maWcg
JChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19D
T05GSUcpICQoVUtfQ09ORklHX09VVCkKIAotb2xkZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9j
b25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRf
SU4pCitvbGRkZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01NT05fQ09ORklH
X0VOVikgJDwgLS1vbGRkZWZjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQogCUAkKFNDUklQVFNf
RElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKIAotZGVmY29u
ZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElC
X0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pCitkZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYK
IAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1kZWZjb25maWckKGlmICQoREVGQ09ORklHKSw9
JChERUZDT05GSUcpKSAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQoU0NSSVBUU19ESVIpL2NvbmZp
Z3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCiAjIE92ZXJyaWRlIHRoZSBV
S19ERUZDT05GSUcgZnJvbSBDT01NT05fQ09ORklHX0VOViB3aXRoIHRoZSBuZXcgZGVmY29uZmln
Ci0lX2RlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEEpL2NvbmZpZ3MvJV9kZWZjb25m
aWcgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9J
TikKKyVfZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoQSkvY29uZmlncy8lX2RlZmNv
bmZpZwogCUAkKENPTU1PTl9DT05GSUdfRU5WKSBVS19ERUZDT05GSUc9JChBKS9jb25maWdzLyRA
IFwKIAkJJDwgLS1kZWZjb25maWc9JChBKS9jb25maWdzLyRAICQoQ09ORklHX0NPTkZJR19JTikK
IAotc2F2ZWRlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lOKSAk
KEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lOKQorc2F2ZWRlZmNvbmZpZzogJChL
Q09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCBcCiAJCS0tc2F2ZWRl
ZmNvbmZpZz0kKGlmICQoREVGQ09ORklHKSwkKERFRkNPTkZJRyksJChDT05GSUdfRElSKS9kZWZj
b25maWcpIFwKIAkJJChDT05GSUdfQ09ORklHX0lOKQpAQCAtODAxLDcgKzc3OSw3IEBAIHNhdmVk
ZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklH
X0VMSUJfSU4pICQoS0NPTkZJCiAuUEhPTlk6IGRlZmNvbmZpZyBzYXZlZGVmY29uZmlnIHNpbGVu
dG9sZGNvbmZpZwogCiAjIFJlZ2VuZXJhdGUgJChLQ09ORklHX0FVVE9IRUFERVIpIHdoZW5ldmVy
ICQoVUtfQ09ORklHKSBjaGFuZ2VkCi0kKEtDT05GSUdfQVVUT0hFQURFUik6ICQoVUtfQ09ORklH
KSAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lO
KSAkKEtDT05GSUdfRVBMQVRfSU4pCiskKEtDT05GSUdfQVVUT0hFQURFUik6ICQoVUtfQ09ORklH
KSAkKEtDT05GSUdfRElSKS9jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoS0NPTkZJR19E
SVIpL2NvbmYgLS1zeW5jY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikKIAogCmRpZmYgLS1naXQg
YS9saWIvQ29uZmlnLnVrIGIvbGliL0NvbmZpZy51awppbmRleCAyM2U3MDVkLi40NDMxMWRlIDEw
MDY0NAotLS0gYS9saWIvQ29uZmlnLnVrCisrKyBiL2xpYi9Db25maWcudWsKQEAgLTIwLDExICsy
MCwzIEBAIGNvbmZpZyBIQVZFX1NDSEVECiBjb25maWcgSEFWRV9OV19TVEFDSwogICAgICAgIGJv
b2wKICAgICAgICBkZWZhdWx0IG4KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBM
aWJyYXJ5IGRlZmluaXRpb25zCi0jCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlICJs
aWIvKi9Db25maWcudWsiCmRpZmYgLS1naXQgYS9wbGF0L0NvbmZpZy51ayBiL3BsYXQvQ29uZmln
LnVrCmluZGV4IDhhODc4ZWIuLjBlYjVhMTAgMTAwNjQ0Ci0tLSBhL3BsYXQvQ29uZmlnLnVrCisr
KyBiL3BsYXQvQ29uZmlnLnVrCkBAIC0xLDcgKzEsMyBAQAotc291cmNlICJwbGF0L3hlbi9Db25m
aWcudWsiCi1zb3VyY2UgInBsYXQva3ZtL0NvbmZpZy51ayIKLXNvdXJjZSAicGxhdC9saW51eHUv
Q29uZmlnLnVrIgotCiBtZW51ICJQbGF0Zm9ybSBJbnRlcmZhY2UgT3B0aW9ucyIKIGNvbmZpZyBV
S1BMQVRfTUVNUk5BTUUKIAlib29sICJNZW1vcnkgcmVnaW9uIG5hbWVzIgpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaCBiL3N1cHBvcnQvc2NyaXB0cy91
a19idWlsZF9jb25maWd1cmUuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4u
MWRmOGM1ZAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQvc2NyaXB0cy91a19idWlsZF9jb25m
aWd1cmUuc2gKQEAgLTAsMCArMSwxMDIgQEAKKyMhL2Jpbi9iYXNoCisKK09QVF9CQVNFTkFNRT1g
YmFzZW5hbWUgJDBgCitPUFRfU1RSSU5HPSJhOmU6aG86cDoiCisKK3JlYWQgLXIgLWQgJycgT1BU
X0hFTFAgIDw8LSBFT0gKKwlhIC0gVGhlIGFwcGxpY2F0aW9uIGxvY2F0aW9uCisJZSAtIFRoZSBs
b2NhdGlvbiBvZiB0aGUgZXh0ZXJuYWwgbGlicmFyaWVzCisJcCAtIFRoZSBsb2NhdGlvbiBvZiBl
eHRlcm5hbCBwbGF0Zm9ybXMKKwlvIC0gVGhlIG91dHB1dCBjb25maWd1cmF0aW9uIGZpbGUKKwlo
IC0gUHJpbnQgVXNhZ2UKK0VPSAorCitwcmludF91c2FnZSgpIHsKKwlwcmludGYgIiVzIFslc11c
biIgJHtPUFRfQkFTRU5BTUV9ICR7T1BUX1NUUklOR307CisJcHJpbnRmICIlc1xuIiAiJHtPUFRf
SEVMUH0iCit9CisKK2ZldGNoX3BsYXRzKCkgeworCWxvY2FsIGZpbGVzPTsKKwlmaWxlcz1gZmlu
ZCAke0B9IC1tYXhkZXB0aCAxIC1uYW1lICJDb25maWcudWsiYAorCWVjaG8gJHtmaWxlc30KK30K
KworZmV0Y2hfbGlicygpIHsKKwlsb2NhbCBmaWxlcz07CisJZmlsZXM9YGZpbmQgJHtAfSAtbmFt
ZSAiQ29uZmlnLnVrImAKKwllY2hvICR7ZmlsZXN9Cit9CisKK2ZldGNoX2FwcCgpIHsKKwlsb2Nh
bCBmaWxlcz07CisJZmlsZXM9YGZpbmQgJHsxfSAtbmFtZSAiQ29uZmlnLnVrImAKKwllY2hvICR7
ZmlsZXN9Cit9CisKK2NvbmZpZ19vdXRfY3JlYXRlKCkgeworCisJW1sgLWYgJHsyfSBdXSB8fCB0
b3VjaCAkezJ9OworCisJZm9yIGZpbGUgaW4gJHsxfQorCWRvCisJCVtbIC16IGBjYXQgJHsyfSB8
IGdyZXAgJHtmaWxlfWAgXV0gJiYgXAorCQkJeyBlY2hvICJzb3VyY2UgXCIke2ZpbGV9XCIiID4+
ICR7Mn07IH0KKwlkb25lCit9CisKK2lmIFsgJCMgLWVxIDAgXTsKK3RoZW4KKwlwcmludF91c2Fn
ZQorCWV4aXQgMTsKK2ZpCisKK1tbIC1uICR7Q09ORklHX1VLX0JBU0V9IF1dICYmIFVLX0JBU0U9
JHtDT05GSUdfVUtfQkFTRX07CitbWyAtbiAke1VLX0JBU0V9IF1dIHx8IFVLX0JBU0U9JChyZWFk
bGluayAtZiAkKGRpcm5hbWUgJDApLy4uLy4uKQorCitDT05GSUdfRklMRVM9OworCit3aGlsZSBn
ZXRvcHRzICR7T1BUX1NUUklOR30gb3B0CitkbworCWNhc2UgJHtvcHR9IGluCisJYSkKKwkJQVBQ
X0RJUj0iJHtPUFRBUkd9IgorCQlbWyAtZCAke0FQUF9ESVJ9IF1dIHx8IFwKKwkJCXsgZWNobyAi
Q2Fubm90IGZpbmQgdGhlIGFwcGxpY2F0aW9uIjsgZXhpdCAxOyB9CisJCWlmIFsgJHtVS19CQVNF
fSAhPSAke0FQUF9ESVJ9IF0KKwkJdGhlbgorCQkJQ09ORklHX0ZJTEVTPSQoZmV0Y2hfYXBwICR7
QVBQX0RJUn0pCisJCQllY2hvICR7Q09ORklHX0ZJTEVTfTsKKwkJZWxzZQorCQkJQ09ORklHX0ZJ
TEVTPSR7QlVJTERfRElSfS9hcHAudWsKKwkJCVtbIC1mICR7QlVJTERfRElSfS9hcHAudWsgXV0g
fHwgXAorCQkJCXsgdG91Y2ggJHtDT05GSUdfRklMRVN9OyB9CisJCQllY2hvICcjIGV4dGVybmFs
IGFwcGxpY2F0aW9uJyA+PiAke0NPTkZJR19GSUxFU30KKwkJCWVjaG8gJ2NvbW1lbnQgIk5vIGV4
dGVybmFsIGFwcGxpY2F0aW9uIHNwZWNpZmllZCInXAorCQkJCSA+PiAke0NPTkZJR19GSUxFU30K
KwkJCWVjaG8gJHtDT05GSUdfRklMRVN9OworCQlmaQorCQlleGl0IDA7CisJOzsKKwllKQorCQlD
T05GSUdfRklMRVM9YGZldGNoX2xpYnMgIiR7T1BUQVJHfSJgCisJOzsKKwlwKQorCQlDT05GSUdf
RklMRVM9YGZldGNoX3BsYXRzICIke09QVEFSR30iYAorCTs7CisJaCkKKwkJcHJpbnRfdXNhZ2U7
CisJCWV4aXQgMDsKKwk7OworCW8pCisJCUNPTkZJR19PVVRfRklMRT0ke09QVEFSR30KKwk7Owor
CSopCisJCXByaW50X3VzYWdlCisJCWV4aXQgMTsKKwk7OworCWVzYWMKK2RvbmUKKworY29uZmln
X291dF9jcmVhdGUgIiR7Q09ORklHX0ZJTEVTfSIgJHtDT05GSUdfT1VUX0ZJTEV9CitlY2hvICR7
Q09ORklHX09VVF9GSUxFfQotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsYz-0006qk-5Z; Thu, 19 Sep 2019 09:17:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYy-0006qd-Qr
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:20 +0000
X-Inumbo-ID: 452afaf2-dabe-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 452afaf2-dabe-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 09:17:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D8657F2025;
 Thu, 19 Sep 2019 11:17:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id xRuLT9Is8Ebj; Thu, 19 Sep 2019 11:17:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id AEEC0F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:12 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:08 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:01 +0200
Message-ID: <20190919091607.23327-18-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 17/23] lib: Use glob instead of
 adding each lib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2luY2UgdGhlIGtjb25maWcgdmVyc2lvbiBzdXBwb3J0cyB3aWxkIGNhcmQgb3BlcmF0aW9ucwp3
ZSByZXBsYWNlIGFkZGl0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIGxpYnJhcnkgd2l0aCBhIHdpbGQK
Y2FyZCBvcGVyYXRpb24gb24gdGhlICdsaWIvJyBkaXJlY3RvcnkuCgpTaWduZWQtb2ZmLWJ5OiBT
aGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBsaWIvQ29u
ZmlnLnVrIHwgMjggKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDEgaW5zZXJ0aW9uKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvQ29uZmln
LnVrIGIvbGliL0NvbmZpZy51awppbmRleCBmMGQ2MjA1Li4yM2U3MDVkIDEwMDY0NAotLS0gYS9s
aWIvQ29uZmlnLnVrCisrKyBiL2xpYi9Db25maWcudWsKQEAgLTI3LDMwICsyNyw0IEBAIGNvbmZp
ZyBIQVZFX05XX1NUQUNLCiAjIExpYnJhcnkgZGVmaW5pdGlvbnMKICMKICMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCi1zb3VyY2UgImxpYi91a2Jvb3QvQ29uZmlnLnVrIgotc291cmNlICJsaWIvdWtk
ZWJ1Zy9Db25maWcudWsiCi1zb3VyY2UgImxpYi91a2FyZ3BhcnNlL0NvbmZpZy51ayIKLXNvdXJj
ZSAibGliL3VrdW5pc3RkL0NvbmZpZy51ayIKLXNvdXJjZSAibGliL3Vrc3lzaW5mby9Db25maWcu
dWsiCi1zb3VyY2UgImxpYi91a3RpbWVjb252L0NvbmZpZy51ayIKLXNvdXJjZSAibGliL25vbGli
Yy9Db25maWcudWsiCi1zb3VyY2UgImxpYi91a2FsbG9jL0NvbmZpZy51ayIKLXNvdXJjZSAibGli
L3VrYWxsb2NiYnVkZHkvQ29uZmlnLnVrIgotc291cmNlICJsaWIvdWtzY2hlZC9Db25maWcudWsi
Ci1zb3VyY2UgImxpYi91a3NjaGVkY29vcC9Db25maWcudWsiCi1zb3VyY2UgImxpYi9mZHQvQ29u
ZmlnLnVrIgotc291cmNlICJsaWIvc3lzY2FsbF9zaGltL0NvbmZpZy51ayIKLXNvdXJjZSAibGli
L3Zmc2NvcmUvQ29uZmlnLnVrIgotc291cmNlICJsaWIvcmFtZnMvQ29uZmlnLnVrIgotc291cmNl
ICJsaWIvZGV2ZnMvQ29uZmlnLnVrIgotc291cmNlICJsaWIvOXBmcy9Db25maWcudWsiCi1zb3Vy
Y2UgImxpYi91a2xvY2svQ29uZmlnLnVrIgotc291cmNlICJsaWIvdWttcGkvQ29uZmlnLnVrIgot
c291cmNlICJsaWIvdWtzd3JhbmQvQ29uZmlnLnVrIgotc291cmNlICJsaWIvdWtidXMvQ29uZmln
LnVrIgotc291cmNlICJsaWIvdWtzZ2xpc3QvQ29uZmlnLnVrIgotc291cmNlICJsaWIvdWtuZXRk
ZXYvQ29uZmlnLnVrIgotc291cmNlICJsaWIvdWs5cC9Db25maWcudWsiCi1zb3VyY2UgImxpYi9w
b3NpeC1saWJkbC9Db25maWcudWsiCi1zb3VyY2UgImxpYi91a2xpYnBhcmFtL0NvbmZpZy51ayIK
LXNvdXJjZSAibGliL3VrdGltZS9Db25maWcudWsiCitzb3VyY2UgImxpYi8qL0NvbmZpZy51ayIK
LS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsZ3-0006rr-7z; Thu, 19 Sep 2019 09:17:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsZ2-0006rd-HZ
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:24 +0000
X-Inumbo-ID: 47aaf002-dabe-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 47aaf002-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:17:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 05B9FF2033;
 Thu, 19 Sep 2019 11:17:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id YwYeOf7w-BRv; Thu, 19 Sep 2019 11:17:18 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id CFBECF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:16 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:08 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:03 +0200
Message-ID: <20190919091607.23327-20-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 19/23] build: Support syncconfig
 with kconfiglib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

c3luY2NvbmZpZyBydWxlIGdlbmVyYXRlIHRoZSBjb25maWcgaGVhZGVyIGZpbGUgYW5kIG90aGVy
IGhlYWRlciBmaWxlcwpuZWVkZWQgZnJvbSBmaXhkZXAuIFRoaXMgcGF0Y2ggcHJvdmlkZXMgYSBw
eXRob24gaW50ZXJmYWNlIGZvciB0aGUKc3luY2NvbmZpZyB1c2luZyBzY3JpcHRzeW5jY29uZmln
IHJ1bGUKClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1A
bmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlIHwgMTAgKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs
IDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIv
TWFrZWZpbGUKaW5kZXggNGU4NzNmMS4uMmJjZGMzMiAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysr
IGIvTWFrZWZpbGUKQEAgLTY3Niw3ICs2NzYsOCBAQCBDT01NT05fQ09ORklHX0VOViA9IFwKIAlL
Q09ORklHX1BMQVRfSU49IiQoS0NPTkZJR19QTEFUX0lOKSIgXAogCVVLX05BTUU9IiQoQ09ORklH
X1VLX05BTUUpIgogCi1QSE9OWSArPSBzY3JpcHRjb25maWcgaXNjcmlwdGNvbmZpZyBrbWVudWNv
bmZpZyBndWljb25maWcgZHVtcHZhcnNjb25maWcKK1BIT05ZICs9IHNjcmlwdGNvbmZpZyBzY3Jp
cHRzeW5jY29uZmlnIGlzY3JpcHRjb25maWcga21lbnVjb25maWcgZ3VpY29uZmlnIFwKKwkJIGR1
bXB2YXJzY29uZmlnCiAKIFBZVEhPTkNNRCA/PSBweXRob24KIGtweXRob24gOj0gUFlUSE9OUEFU
SD0kKFVLX0NPTkZJR0xJQik6JCRQWVRIT05QQVRIICQoUFlUSE9OQ01EKQpAQCAtNzAxLDYgKzcw
MiwxMiBAQCBrbWVudWNvbmZpZzokKEtDT05GSUdfRElSKS9maXhkZXAKIAkJJChDT05GSUdfQ09O
RklHX0lOKQogCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtf
Q09ORklHX09VVCkKIAorc2NyaXB0c3luY2NvbmZpZzogJChLQ09ORklHX0RJUikvZml4ZGVwCisJ
QCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChDT05GSUdMSUIpL2dlbmNvbmZpZy5w
eSBcCisJCS0tc3luYy1kZXBzPSQoQlVJTERfRElSKS9pbmNsdWRlL2NvbmZpZyBcCisJCS0taGVh
ZGVyLXBhdGg9JChLQ09ORklHX0FVVE9IRUFERVIpICQoQ09ORklHX0NPTkZJR19JTikKKwlAJChT
Q1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisK
IGd1aWNvbmZpZzogJChLQ09ORklHX0RJUikvZml4ZGVwCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYp
ICQoa3B5dGhvbikgJChDT05GSUdMSUIpL2d1aWNvbmZpZy5weSAkKENPTkZJR19DT05GSUdfSU4p
CiAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdf
T1VUKQpAQCAtODg0LDYgKzg5MSw3IEBAIGhlbHA6CiAJQGVjaG8gJyAgZ2NvbmZpZyAgICAgICAg
ICAgICAgICAtIGludGVyYWN0aXZlIEdUSy1iYXNlZCBjb25maWd1cmF0b3InCiAJQGVjaG8gJyAg
b2xkY29uZmlnICAgICAgICAgICAgICAtIHJlc29sdmUgYW55IHVucmVzb2x2ZWQgc3ltYm9scyBp
biAuY29uZmlnJwogCUBlY2hvICcgIHN5bmNjb25maWcgICAgICAgICAgICAgLSBTYW1lIGFzIG9s
ZGNvbmZpZywgYnV0IHF1aWV0bHksIGFkZGl0aW9uYWxseSB1cGRhdGUgZGVwcycKKwlAZWNobyAn
ICBzY3JpcHRzeW5jY29uZmlnICAgICAgIC0gU2FtZSBhcyBvbGRjb25maWcsIGJ1dCBxdWlldGx5
LCBhZGRpdGlvbmFsbHkgdXBkYXRlIGRlcHMnCiAJQGVjaG8gJyAgb2xkZGVmY29uZmlnICAgICAg
ICAgICAtIFNhbWUgYXMgc2lsZW50b2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRo
ZWlyIGRlZmF1bHQgdmFsdWUnCiAJQGVjaG8gJyAgcmFuZGNvbmZpZyAgICAgICAgICAgICAtIE5l
dyBjb25maWcgd2l0aCByYW5kb20gYW5zd2VyIHRvIGFsbCBvcHRpb25zJwogCUBlY2hvICcgIGRl
ZmNvbmZpZyAgICAgICAgICAgICAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBhbnN3ZXIgdG8g
YWxsIG9wdGlvbnMnCi0tIAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsZ4-0006sL-A0; Thu, 19 Sep 2019 09:17:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsZ3-0006sB-Qd
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:25 +0000
X-Inumbo-ID: 4a374f82-dabe-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4a374f82-dabe-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 09:17:24 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 58F3E1056D6;
 Thu, 19 Sep 2019 11:17:23 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id pERNhf5b37Im; Thu, 19 Sep 2019 11:17:23 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 37C44105583
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:23 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:22 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:04 +0200
Message-ID: <20190919091607.23327-21-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 20/23] build: Switch build
 directory as CURDIR
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Rml4ZGVwIGFuZCBvdGhlciBrY29uZmlnIGF1dG9nZW5lcmF0ZSBmaWxlcyBvbiBmaXhlZCBwYXRo
LiBJbnN0ZWFkIG9mCnBhdGNoaW5nIHRoZSBrY29uZmlnIGFuZCBmaXhkZXAsIHdlIG1ha2UgY3Vy
cmVudCB3b3JraW5nIGRpcmVjdG9yeSBhcwpidWlsZCBkaXJlY3RvcnkuCgpTaWduZWQtb2ZmLWJ5
OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KLS0tCiBDb25m
aWcudWsgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIE1ha2VmaWxlICAgICAgICAgICAgICAg
ICAgICAgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQog
YXJjaC9Db25maWcudWsgICAgICAgICAgICAgICB8ICA2ICsrLS0KIHN1cHBvcnQvc2NyaXB0cy9j
b25maWd1cGRhdGUgfCAgNCArLS0KIDQgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwg
MzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCmluZGV4
IDAxYTdhYzguLjc3MmRiODUgMTAwNjQ0Ci0tLSBhL0NvbmZpZy51aworKysgYi9Db25maWcudWsK
QEAgLTI2LDcgKzI2LDcgQEAgY29uZmlnIFVLX0RFRk5BTUUKIAlkZWZhdWx0ICIkKFVLX05BTUUp
IgogCiBtZW51ICJBcmNoaXRlY3R1cmUgU2VsZWN0aW9uIgotCXNvdXJjZSAiYXJjaC9Db25maWcu
dWsiCisJc291cmNlICIkKFVLX0JBU0UpL2FyY2gvQ29uZmlnLnVrIgogZW5kbWVudQogCiBtZW51
ICJQbGF0Zm9ybSBDb25maWd1cmF0aW9uIgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmls
ZQppbmRleCAyYmNkYzMyLi41Y2ZkNDQ1IDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtl
ZmlsZQpAQCAtNjUsNyArNjUsNyBAQCBzcGFjZSA6PSAkKGVtcHR5KSAkKGVtcHR5KQogZXhwb3J0
IENEUEFUSCA6PQogCiAjIFVzZSBjdXJyZW50IGRpcmVjdG9yeSBhcyBiYXNlCi1DT05GSUdfVUtf
QkFTRSA6PSAkKENVUkRJUikKK0NPTkZJR19VS19CQVNFID89ICQoQ1VSRElSKQogb3ZlcnJpZGUg
Q09ORklHX1VLX0JBU0UgOj0gJChyZWFscGF0aCAkKENPTkZJR19VS19CQVNFKSkKIGlmZXEgKCQo
Q09ORklHX1VLX0JBU0UpLCkKICQoZXJyb3IgIkludmFsaWQgYmFzZSBkaXJlY3RvcnkgKENPTkZJ
R19VS19CQVNFKSIpCkBAIC0xMDMsMTIgKzEwMywyMCBAQCBpZmVxICgiJChvcmlnaW4gUCkiLCAi
Y29tbWFuZCBsaW5lIikKICQoZm9yZWFjaCBFLCQoc3Vic3QgOiwgLCQoUCkpLCBcCiAkKGlmICQo
d2lsZGNhcmQgJChFKSksIFwKIAkkKGV2YWwgRVBMQVRfRElSICs9ICQoRSkpIFwKLSwgXAorLCAk
KGlmICQod2lsZGNhcmQgJChDT05GSUdfVUtfQkFTRSkvJChFKSksXAorCSQoZXZhbCBFUExBVF9E
SVIgKz0gJChDT05GSUdfVUtfQkFTRSkvJChFKSksIFwKIAkkKGVycm9yIENhbm5vdCBmaW5kIHBs
YXRmb3JtIGxpYnJhcnk6ICQoRSkpIFwKKyAgICkgXAogKSBcCiApCiBlbmRpZgogRVBMQVRfRElS
IDo9ICQocmVhbHBhdGggJChwYXRzdWJzdCAlLywlLCQocGF0c3Vic3QgJS4sJSwkKEVQTEFUX0RJ
UikpKSkKK2J1aWxkX2Rpcl9tYWtlICA6PSAwCitpZm5lcSAoJChCVUlMRF9ESVIpLCQoVUtfQkFT
RSkpCisJYnVpbGRfZGlyX21ha2UgOj0gMTsKK2Vsc2UKKwlzdWJfbWFrZV9leGVjIDo9IDE7Citl
bmRpZgogCiAjIEVMSUJfRElSIChsaXN0IG9mIGV4dGVybmFsIGxpYnJhcmllcykKICMgUmV0cmll
dmVkIGZyb20gTCB2YXJpYWJsZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUgKHBhdGhzIHNlcGFyYXRl
ZCBieSBjb2xvbikKQEAgLTExNyw4ICsxMjUsMTAgQEAgaWZlcSAoIiQob3JpZ2luIEwpIiwgImNv
bW1hbmQgbGluZSIpCiAkKGZvcmVhY2ggRSwkKHN1YnN0IDosICwkKEwpKSwgXAogJChpZiAkKHdp
bGRjYXJkICQoRSkpLCBcCiAJJChldmFsIEVMSUJfRElSICs9ICQoRSkpIFwKLSwgXAorLCAkKGlm
ICQod2lsZGNhcmQgJChDT05GSUdfVUtfQkFTRSkvJChFKSksXAorCSQoZXZhbCBFTElCX0RJUiAr
PSAkKENPTkZJR19VS19CQVNFKS8kKEUpKSwgXAogCSQoZXJyb3IgQ2Fubm90IGZpbmQgbGlicmFy
eTogJChFKSkgXAorICAgKVwKICkgXAogKQogZW5kaWYKQEAgLTQyOCw2ICs0MzgsNyBAQCBlbmRp
ZgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQ29tcGlsZXIgYW5kIGxpbmtlciB0b29scwog
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmZXEgKCQoc3ViX21ha2VfZXhlYyksIDEpCiBpZmVx
ICgkKFVLX0hBVkVfRE9UX0NPTkZJRykseSkKICMgSGlkZSB0cm91Ymxlc29tZSBlbnZpcm9ubWVu
dCB2YXJpYWJsZXMgZnJvbSBzdWIgcHJvY2Vzc2VzCiB1bmV4cG9ydCBDT05GSUdfQ1JPU1NfQ09N
UElMRQpAQCAtNjE3LDE5ICs2MjgsMjUgQEAgY2xlYW46IGNsZWFuLWxpYnMKIAogZWxzZSAjICEo
JChVS19IQVZFX0RPVF9DT05GSUcpLHkpCiAKLWFsbDogbWVudWNvbmZpZwogCi0uUEhPTlk6IHBy
ZXBhcmUgaW1hZ2UgbGlicyBvYmpzIGNsZWFuLWxpYnMgY2xlYW4KKyQoZmlsdGVyICVjb25maWcs
JChNQUtFQ01ER09BTFMpKTogJChCVUlMRF9ESVIpL01ha2VmaWxlCisKKyMjIHVrY29uZmlnCit1
a2NvbmZpZzogJChCVUlMRF9ESVIpL01ha2VmaWxlIG1lbnVjb25maWcKKworYWxsOiB1a2NvbmZp
ZwogCi1mZXRjaDogbWVudWNvbmZpZworLlBIT05ZOiBwcmVwYXJlIGltYWdlIGxpYnMgb2JqcyBj
bGVhbi1saWJzIGNsZWFuIHVrY29uZmlnCiAKLXByZXBhcmU6IG1lbnVjb25maWcKK2ZldGNoOiB1
a2NvbmZpZwogCi1vYmpzOiBtZW51Y29uZmlnCitwcmVwYXJlOiB1a2NvbmZpZwogCi1saWJzOiBt
ZW51Y29uZmlnCitvYmpzOiB1a2NvbmZpZwogCi1pbWFnZXM6IG1lbnVjb25maWcKK2xpYnM6IHVr
Y29uZmlnCisKK2ltYWdlczogdWtjb25maWcKIAogY2xlYW4tbGlicyBjbGVhbjoKIAkkKGVycm9y
IERvIG5vdCBrbm93IHdoaWNoIGZpbGVzIHRvIGNsZWFuIHdpdGhvdXQgaGF2aW5nIGEgY29uZmln
dXJhdGlvbi4gRGlkIHlvdSBtZWFuICdwcm9wZXJjbGVhbicgb3IgJ2Rpc3RjbGVhbic/KQpAQCAt
NzAwLDEzICs3MTcsMTMgQEAgaXNjcmlwdGNvbmZpZzogJChLQ09ORklHX0RJUikvZml4ZGVwCiBr
bWVudWNvbmZpZzokKEtDT05GSUdfRElSKS9maXhkZXAKIAlAJChDT01NT05fQ09ORklHX0VOVikg
JChrcHl0aG9uKSAkKENPTkZJR0xJQikvbWVudWNvbmZpZy5weSBcCiAJCSQoQ09ORklHX0NPTkZJ
R19JTikKLQlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NP
TkZJR19PVVQpCisJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19ESVIpL2NvbmZpZ3Vw
ZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCiBzY3JpcHRzeW5jY29uZmlnOiAk
KEtDT05GSUdfRElSKS9maXhkZXAKIAlAJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9uKSAk
KENPTkZJR0xJQikvZ2VuY29uZmlnLnB5IFwKIAkJLS1zeW5jLWRlcHM9JChCVUlMRF9ESVIpL2lu
Y2x1ZGUvY29uZmlnIFwKIAkJLS1oZWFkZXItcGF0aD0kKEtDT05GSUdfQVVUT0hFQURFUikgJChD
T05GSUdfQ09ORklHX0lOKQotCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05G
SUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJ
UikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKIGd1aWNvbmZp
ZzogJChLQ09ORklHX0RJUikvZml4ZGVwCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhv
bikgJChDT05GSUdMSUIpL2d1aWNvbmZpZy5weSAkKENPTkZJR19DT05GSUdfSU4pCkBAIC03MTgs
MjMgKzczNSwyMyBAQCBkdW1wdmFyc2NvbmZpZzokKEtDT05GSUdfRElSKS9maXhkZXAKIAogeGNv
bmZpZzogJChLQ09ORklHX0RJUikvcWNvbmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgJChD
T05GSUdfQ09ORklHX0lOKQotCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05G
SUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJ
UikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKIGdjb25maWc6
ICQoS0NPTkZJR19ESVIpL2djb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpIHNyY3RyZWU9JChD
T05GSUdfVUtfQkFTRSkgJDwgJChDT05GSUdfQ09ORklHX0lOKQotCUAkKFNDUklQVFNfRElSKS9j
b25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09O
RklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NP
TkZJR19PVVQpCiAKIG1lbnVjb25maWc6ICQoS0NPTkZJR19ESVIpL21jb25mCiAJQCQoQ09NTU9O
X0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NPTkZJR19JTikKLQlAJChTQ1JJUFRTX0RJUikvY29u
ZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09NTU9OX0NPTkZJ
R19FTlYpICQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05G
SUdfT1VUKQogCiBuY29uZmlnOiAkKEtDT05GSUdfRElSKS9uY29uZgogCUAkKENPTU1PTl9DT05G
SUdfRU5WKSAkPCAkKENPTkZJR19DT05GSUdfSU4pCi0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3Vw
ZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQorCUAkKENPTU1PTl9DT05GSUdfRU5W
KSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09V
VCkKIAogY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYp
ICQ8ICQoQ09ORklHX0NPTkZJR19JTikKLQlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQo
VUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NS
SVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCiAj
IEZvciB0aGUgY29uZmlnIHRhcmdldHMgdGhhdCBhdXRvbWF0aWNhbGx5IHNlbGVjdCBvcHRpb25z
LCB3ZSBwYXNzCiAjIFNLSVBfTEVHQUNZPXkgdG8gZGlzYWJsZSB0aGUgbGVnYWN5IG9wdGlvbnMu
IEhvd2V2ZXIsIGluIHRoYXQgY2FzZQpAQCAtNzQyLDM0ICs3NTksMzQgQEAgY29uZmlnOiAkKEtD
T05GSUdfRElSKS9jb25mCiAjIHdpbGwgcXVlcnkgdGhlbS4gVGhlcmVmb3JlLCBydW4gYW4gYWRk
aXRpb25hbCBvbGRkZWZjb25maWcuCiBvbGRjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlA
JChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQot
CUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09V
VCkKKwlAJChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQo
VUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKIHJhbmRjb25maWc6ICQoS0NPTkZJR19ESVIp
L2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgU0tJUF9MRUdBQ1k9eSAkPCAtLXJhbmRjb25m
aWcgJChDT05GSUdfQ09ORklHX0lOKQogCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLW9sZGRl
ZmNvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pID4vZGV2L251bGwKLQlAJChTQ1JJUFRTX0RJUikv
Y29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09NTU9OX0NP
TkZJR19FTlYpICQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19D
T05GSUdfT1VUKQogCiBhbGx5ZXNjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01N
T05fQ09ORklHX0VOVikgU0tJUF9MRUdBQ1k9eSAkPCAtLWFsbHllc2NvbmZpZyAkKENPTkZJR19D
T05GSUdfSU4pCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09O
RklHX0NPTkZJR19JTikgPi9kZXYvbnVsbAotCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUg
JChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09ORklHX0VOVikgJChT
Q1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAK
IGFsbG5vY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mCiAJQCQoQ09NTU9OX0NPTkZJR19FTlYp
IFNLSVBfTEVHQUNZPXkgJDwgLS1hbGxub2NvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pCiAJQCQo
Q09NTU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikg
Pi9kZXYvbnVsbAotCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQo
VUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29u
ZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCiAKIHN5bmNjb25maWc6ICQo
S0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1zeW5jY29uZmln
ICQoQ09ORklHX0NPTkZJR19JTikKLQlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtf
Q09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBU
U19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCiBvbGRk
ZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYKIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwg
LS1vbGRkZWZjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQotCUAkKFNDUklQVFNfRElSKS9jb25m
aWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkKKwlAJChDT01NT05fQ09ORklH
X0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJ
R19PVVQpCiAKIGRlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZgogCUAkKENPTU1PTl9DT05G
SUdfRU5WKSAkPCAtLWRlZmNvbmZpZyQoaWYgJChERUZDT05GSUcpLD0kKERFRkNPTkZJRykpICQo
Q09ORklHX0NPTkZJR19JTikKLQlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09O
RklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19E
SVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCiAjIE92ZXJy
aWRlIHRoZSBVS19ERUZDT05GSUcgZnJvbSBDT01NT05fQ09ORklHX0VOViB3aXRoIHRoZSBuZXcg
ZGVmY29uZmlnCiAlX2RlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEEpL2NvbmZpZ3Mv
JV9kZWZjb25maWcKQEAgLTc4MSw3ICs3OTgsNyBAQCBzYXZlZGVmY29uZmlnOiAkKEtDT05GSUdf
RElSKS9jb25mCiAJCS0tc2F2ZWRlZmNvbmZpZz0kKGlmICQoREVGQ09ORklHKSwkKERFRkNPTkZJ
RyksJChDT05GSUdfRElSKS9kZWZjb25maWcpIFwKIAkJJChDT05GSUdfQ09ORklHX0lOKQogCUAk
KFNFRCkgJy9VS19ERUZDT05GSUc9L2QnICQoaWYgJChERUZDT05GSUcpLCQoREVGQ09ORklHKSwk
KENPTkZJR19ESVIpL2RlZmNvbmZpZykKLQlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQo
VUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpCisJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NS
SVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQogCiAu
UEhPTlk6IGRlZmNvbmZpZyBzYXZlZGVmY29uZmlnIHNpbGVudG9sZGNvbmZpZwogCkBAIC04NjAs
NiArODc3LDIwIEBAIHByaW50LW9ianM6CiBwcmludC1zcmNzOgogCSQoZXJyb3IgRG8gbm90IGhh
dmUgYSBjb25maWd1cmF0aW9uLiBQbGVhc2UgcnVuIG9uZSBvZiB0aGUgY29uZmlndXJhdGlvbiB0
YXJnZXRzIGZpcnN0KQogZW5kaWYKK2Vsc2UgIyEoJChzdWJfbWFrZV9leGVjKSwpCitleHBvcnQg
c3ViX21ha2VfZXhlYzo9MQorCiskKEJVSUxEX0RJUikvTWFrZWZpbGU6CisJbG4gLXNuICQoQ09O
RklHX1VLX0JBU0UpL01ha2VmaWxlICQoQCkKKworJChmaWx0ZXItb3V0IF9hbGwgJChCVUlMRF9E
SVIpL01ha2VmaWxlIHN1Yi1tYWtlIGRpc3RjbGVhbiBwcm9wZXJjbGVhbiBoZWxwICQobGFzdHdv
cmQgJChNQUtFRklMRV9MSVNUKSksIFwKKyAgJChNQUtFQ01ER09BTFMpKSBhbGw6IHN1Yi1tYWtl
CisJQDoKKworc3ViLW1ha2U6ICQoQlVJTERfRElSKS9NYWtlZmlsZQorCSQoUSkkKE1BS0UpIENP
TkZJR19VS19CQVNFPSQoQ09ORklHX1VLX0JBU0UpIC1DICQoQlVJTERfRElSKSAtZiAkKEJVSUxE
X0RJUikvTWFrZWZpbGUgJChNQUtFQ01ER09BTFMpCisKK2VuZGlmCiAKIGhlbHA6CiAJQGVjaG8g
J0NsZWFuaW5nOicKZGlmZiAtLWdpdCBhL2FyY2gvQ29uZmlnLnVrIGIvYXJjaC9Db25maWcudWsK
aW5kZXggZDA5MWRjYi4uOWYyMTUwNCAxMDA2NDQKLS0tIGEvYXJjaC9Db25maWcudWsKKysrIGIv
YXJjaC9Db25maWcudWsKQEAgLTE2LDEzICsxNiwxMyBAQCBjb25maWcgQVJDSF9BUk1fMzIKIGVu
ZGNob2ljZQogCiBpZiAoQVJDSF9YODZfNjQpCi0Jc291cmNlICJhcmNoL3g4Ni94ODZfNjQvQ29u
ZmlnLnVrIgorCXNvdXJjZSAiJChVS19CQVNFKS9hcmNoL3g4Ni94ODZfNjQvQ29uZmlnLnVrIgog
ZW5kaWYKIGlmIChBUkNIX0FSTV8zMikKLQlzb3VyY2UgImFyY2gvYXJtL2FybS9Db25maWcudWsi
CisJc291cmNlICIkKFVLX0JBU0UpL2FyY2gvYXJtL2FybS9Db25maWcudWsiCiBlbmRpZgogaWYg
KEFSQ0hfQVJNXzY0KQotCXNvdXJjZSAiYXJjaC9hcm0vYXJtNjQvQ29uZmlnLnVrIgorCXNvdXJj
ZSAiJChVS19CQVNFKS9hcmNoL2FybS9hcm02NC9Db25maWcudWsiCiBlbmRpZgogCiBjb25maWcg
U1RBQ0tfU0laRV9QQUdFX09SREVSCmRpZmYgLS1naXQgYS9zdXBwb3J0L3NjcmlwdHMvY29uZmln
dXBkYXRlIGIvc3VwcG9ydC9zY3JpcHRzL2NvbmZpZ3VwZGF0ZQppbmRleCBjZTVjZTk4Li44NmI4
MzVjIDEwMDc1NQotLS0gYS9zdXBwb3J0L3NjcmlwdHMvY29uZmlndXBkYXRlCisrKyBiL3N1cHBv
cnQvc2NyaXB0cy9jb25maWd1cGRhdGUKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vYmFzaAotVUtf
Q09ORklHPSIkezE6LS5jb25maWd9IgotVUtfQ09ORklHX09MRD0iJHsyOi0uY29uZmlnLm9sZH0i
CitVS19DT05GSUc9IiR7MTotJHtVS19CQVNFfS8uY29uZmlnfSIKK1VLX0NPTkZJR19PTEQ9IiR7
MjotJHtVS19CQVNFfS8uY29uZmlnLm9sZH0iCiAKIF9zdWJjb25maWcoKQogewotLSAKMi43LjQK
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:17:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:17:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsZ8-0006tR-Bd; Thu, 19 Sep 2019 09:17:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsZ7-0006tF-Hh
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:29 +0000
X-Inumbo-ID: 4afd63cb-dabe-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 4afd63cb-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:17:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 73EE6F2025;
 Thu, 19 Sep 2019 11:17:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id KrdKASBdLUgw; Thu, 19 Sep 2019 11:17:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 53C4BF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:23 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:23 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:05 +0200
Message-ID: <20190919091607.23327-22-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 21/23] kconfig: Determine the
 default arch from CC
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QXV0b21hdGljYWxseSBkZXRlcm1pbmUgdGhlIGFyY2hpdGVjdHVyZSB1c2luZyBDQwoKU2lnbmVk
LW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0t
LQogQ29uZmlnLnVrICAgICAgfCA2ICsrKysrLQogTWFrZWZpbGUgICAgICAgfCAxICsKIGFyY2gv
Q29uZmlnLnVrIHwgNCArKy0tCiAzIGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgMyBk
ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggNzcy
ZGI4NS4uMzIzNWI5MSAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBiL0NvbmZpZy51awpAQCAt
MTEsNyArMTEsMTEgQEAgY29uZmlnIFVLX0NPREVOQU1FCiAJZGVmYXVsdCAiJChVS19DT0RFTkFN
RSkiCiBjb25maWcgVUtfQVJDSAogCXN0cmluZwotCWRlZmF1bHQgIiQoVUtfQVJDSCkiCisJZGVm
YXVsdCAieDg2XzY0IiBpZiBBUkNIX1g4Nl82NAorCWRlZmF1bHQgImFybTY0IiAgaWYgQVJDSF9B
Uk1fNjQKKwlkZWZhdWx0ICJhcm0iCWlmIEFSQ0hfQVJNXzMyCisJZGVmYXVsdCAkKFVLX0FSQ0gp
CisKIGNvbmZpZyBOT19BUFAKIAlkZWZfYm9vbCAkKHNoZWxsLHRlc3QgJChVS19CQVNFKSA9ICQo
VUtfQVBQKSAmJiBlY2hvIHkgfHwgZWNobyBuKQogCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01h
a2VmaWxlCmluZGV4IDVjZmQ0NDUuLjY1YWUzMWIgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBi
L01ha2VmaWxlCkBAIC02NzMsNiArNjczLDcgQEAgREVGQ09ORklHID0gJChjYWxsIHFzdHJpcCwk
KFVLX0RFRkNPTkZJRykpCiAjIFdlIGRvbid0IHdhbnQgdG8gZnVsbHkgZXhwYW5kIFVLX0RFRkNP
TkZJRyBoZXJlLCBzbyBLY29uZmlnIHdpbGwKICMgcmVjb2duaXplIHRoYXQgaWYgaXQncyBzdGls
bCBhdCBpdHMgZGVmYXVsdCAkKENPTkZJR19ESVIpL2RlZmNvbmZpZwogQ09NTU9OX0NPTkZJR19F
TlYgPSBcCisJQ0M9JChDQylcCiAJQ09ORklHXz0iQ09ORklHXyIgXAogCUtDT05GSUdfQ09ORklH
PSIkKFVLX0NPTkZJRykiIFwKIAlLQ09ORklHX0FVVE9DT05GSUc9IiQoS0NPTkZJR19BVVRPQ09O
RklHKSIgXApkaWZmIC0tZ2l0IGEvYXJjaC9Db25maWcudWsgYi9hcmNoL0NvbmZpZy51awppbmRl
eCA5ZjIxNTA0Li43OTA5N2NmIDEwMDY0NAotLS0gYS9hcmNoL0NvbmZpZy51aworKysgYi9hcmNo
L0NvbmZpZy51awpAQCAtMSw3ICsxLDcgQEAKIGNob2ljZQogCXByb21wdCAiQXJjaGl0ZWN0dXJl
IgotCWRlZmF1bHQgQVJDSF9BUk1fMzIgaWYgKFVLX0FSQ0ggPSAiYXJtIikKLQlkZWZhdWx0IEFS
Q0hfQVJNXzY0IGlmIChVS19BUkNIID0gImFybTY0IikKKwlkZWZhdWx0IEFSQ0hfQVJNXzMyIGlm
ICgkKHNoZWxsLCQoQ0MpIC1kdW1wbWFjaGluZSB8IGN1dCAtZCAnLScgLWYxKSA9ICJhcm0iKQor
CWRlZmF1bHQgQVJDSF9BUk1fNjQgaWYgKCQoc2hlbGwsJChDQykgLWR1bXBtYWNoaW5lIHwgY3V0
IC1kICctJyAtZjEpID0gImFybTY0IikKIAlkZWZhdWx0IEFSQ0hfWDg2XzY0CiAJaGVscAogCSAg
U2VsZWN0IHRoZSB0YXJnZXQgQ1BVIGFyY2hpdGVjdHVyZS4KLS0gCjIuNy40CgoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:33:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:33:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsol-00020E-Cf; Thu, 19 Sep 2019 09:33:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsok-000204-9W
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:33:38 +0000
X-Inumbo-ID: 8e3e29b0-dac0-11e9-9651-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8e3e29b0-dac0-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:33:37 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 5E5781056CB;
 Thu, 19 Sep 2019 11:33:36 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id SEaz6Ymd2Ufo; Thu, 19 Sep 2019 11:33:36 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 3AC3B105581
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:33:36 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:33:35 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:33:25 +0200
Message-ID: <20190919093325.13502-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH v2] Remove mmap from newlib
 glue code and create a new internal library (libukmmap) for mmap
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGxlYXNlIGlnbm9yZSBmaXJzdCB2ZXJzaW9uLiBDaGFuZ2VzIHNpbmNlIGxhc3QgdmVyc2lvbjoK
IC0gQWRkIFBBVENIIGluIHN1YmplY3QgbGluZSAKClBsZWFzZSByZXZpZXcgdGhpcyBwYXRjaCB3
aXRoIGxpYi91a21tYXAgcGF0Y2ggc2VyaWVzLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3Mg
TWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIGZpbGUuYyB8IDEyIC0t
LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L2ZpbGUuYyBiL2ZpbGUuYwppbmRleCAwMDZmMTkxLi5kYTQ0ZTM3IDEwMDY0NAotLS0gYS9maWxl
LmMKKysrIGIvZmlsZS5jCkBAIC01NCwxOCArNTQsNiBAQCBleHRlcm4gaW50IGVycm5vOwogI2Rl
ZmluZSBTVERPVVRfRklMRU5PICAgMSAgICAgICAvKiBzdGFuZGFyZCBvdXRwdXQgZmlsZSBkZXNj
cmlwdG9yICovCiAjZGVmaW5lIFNUREVSUl9GSUxFTk8gICAyICAgICAgIC8qIHN0YW5kYXJkIGVy
cm9yIGZpbGUgZGVzY3JpcHRvciAqLwogCi0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLXZvaWQgKm1t
YXAodm9pZCAqYWRkciBfX3VudXNlZCwgc2l6ZV90IGxlbiBfX3VudXNlZCwgaW50IHByb3QgX191
bnVzZWQsCi0JCWludCBmbGFncyBfX3VudXNlZCwgaW50IGZpbGRlcyBfX3VudXNlZCwgb2ZmX3Qg
b2ZmIF9fdW51c2VkKQotewotCXJldHVybiAwOwotfQotCi1pbnQgbXVubWFwKHZvaWQgKmFkZHIg
X191bnVzZWQsIHNpemVfdCBsZW4gX191bnVzZWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KICNpZiAh
Q09ORklHX0xXSVBfU09DS0VUCiBpbnQgcG9sbChzdHJ1Y3QgcG9sbGZkIF9wZmRbXSBfX3VudXNl
ZCwgbmZkc190IF9uZmRzIF9fdW51c2VkLAogCQlpbnQgX3RpbWVvdXQgX191bnVzZWQpCi0tIAoy
LjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:35:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:35:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsqV-0002Gc-IV; Thu, 19 Sep 2019 09:35:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsqU-0002GM-A6
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:35:26 +0000
X-Inumbo-ID: cedc9a92-dac0-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cedc9a92-dac0-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:35:25 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C37F8F2025;
 Thu, 19 Sep 2019 11:35:24 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UmhZnzekRZhL; Thu, 19 Sep 2019 11:35:24 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 9C284F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:35:22 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:35:22 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:35:09 +0200
Message-ID: <20190919093511.14256-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/2] lib/ukmmap: Remove mmap from
 newlib glue code and create a new internal library (libukmmap) for mmap
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGxlYXNlIGlnbm9yZSBmaXJzdCB2ZXJzaW9uLiBEaWZmZXJlbmNlcyB3aXRoIHYxOgotIEFkZCBQ
QVRDSCBpbiBzdWJqZWN0IGxpbmUgCgpJbnRyb2R1Y2luZyBhIG5ldyBpbnRlcm5hbCBsaWJyYXJ5
IHdoaWNoIGltcGxlbWVudHMgbW1hcCByZWxhdGVkCm9wZXJhdGlvbnMuIEZvciB0aGUgdGltZSBi
ZWluZyBtbWFwIGlzIG5vdCBmdWxseSBpbXBsZW1lbnRlZC4gSXQgaXMganVzdCAKYSB0cmljayB0
aGF0IHdvcmtzIGZvciBHbywgYnV0IGl0IG5lZWRzIHRvIGJlIHJldmlzaXRlZCBpbiB0aGUgZnV0
dXJlLiAKVGhpcyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBjcmVhdGUgYW55IG5ldyBtYXBwaW5n
LCBpdCBqdXN0IGFsbG9jYXRlcwptZW1vcnkgYW5kIGtlZXBzIHRyYWNrIG9mIGFueSBtZW1vcnkg
dGhhdCBoYXMgYWxyZWFkeSBiZWVuIGFsbG9jYXRlZAppbiBhIHByZXZpb3VzIGNhbGwuIElmIHRo
ZSBwYXJhbWV0ZXJzIGRvIG5vdCBtYXRjaCB0aGUgb25lcyB0aGF0IEdvCnVzZXMgdGhlbiAwIGlz
IHJldHVybmVkICh1bmltcGxlbWVudGVkKS4KCkNoYXJhbGFtcG9zIE1haW5hcyAoMik6CiAgSW50
cm9kdWNlIG1tYXAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGxpYnJhcnkgc2tlbGV0b24KICBtbWFw
IHRyaWNrIGZvciBHbwoKIGxpYi9Db25maWcudWsgICAgICAgICAgICB8ICAgMSArCiBsaWIvTWFr
ZWZpbGUudWsgICAgICAgICAgfCAgIDEgKwogbGliL3VrbW1hcC9Db25maWcudWsgICAgIHwgICA1
ICsrCiBsaWIvdWttbWFwL01ha2VmaWxlLnVrICAgfCAgIDMgKwogbGliL3VrbW1hcC9leHBvcnRz
eW1zLnVrIHwgICAyICsKIGxpYi91a21tYXAvbW1hcC5jICAgICAgICB8IDE2NiArKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMTc4IGluc2Vy
dGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL0NvbmZpZy51awogY3JlYXRl
IG1vZGUgMTAwNjQ0IGxpYi91a21tYXAvTWFrZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBs
aWIvdWttbWFwL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL21t
YXAuYwoKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:35:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:35:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsqa-0002Hl-K8; Thu, 19 Sep 2019 09:35:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsqZ-0002HW-AJ
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:35:31 +0000
X-Inumbo-ID: d012ecea-dac0-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d012ecea-dac0-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:35:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CFFE3F2025;
 Thu, 19 Sep 2019 11:35:26 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id MLkq1PiE4VM8; Thu, 19 Sep 2019 11:35:26 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id A64F1F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:35:24 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:35:22 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:35:10 +0200
Message-ID: <20190919093511.14256-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919093511.14256-1-Charalampos.Mainas@neclab.eu>
References: <20190919093511.14256-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/2] lib/ukmmap: Introduce mmap
 and related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi9Db25maWcudWsgICAgICAgICAgICB8IDEgKwogbGliL01ha2VmaWxl
LnVrICAgICAgICAgIHwgMSArCiBsaWIvdWttbWFwL0NvbmZpZy51ayAgICAgfCA1ICsrKysrCiBs
aWIvdWttbWFwL01ha2VmaWxlLnVrICAgfCAxICsKIGxpYi91a21tYXAvZXhwb3J0c3ltcy51ayB8
IDEgKwogNSBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvdWttbWFwL0NvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a21tYXAvTWFr
ZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL2V4cG9ydHN5bXMudWsKCmRp
ZmYgLS1naXQgYS9saWIvQ29uZmlnLnVrIGIvbGliL0NvbmZpZy51awppbmRleCBmMGQ2MjA1NC4u
NjY3NmQwM2IgMTAwNjQ0Ci0tLSBhL2xpYi9Db25maWcudWsKKysrIGIvbGliL0NvbmZpZy51awpA
QCAtNTQsMyArNTQsNCBAQCBzb3VyY2UgImxpYi91azlwL0NvbmZpZy51ayIKIHNvdXJjZSAibGli
L3Bvc2l4LWxpYmRsL0NvbmZpZy51ayIKIHNvdXJjZSAibGliL3VrbGlicGFyYW0vQ29uZmlnLnVr
Igogc291cmNlICJsaWIvdWt0aW1lL0NvbmZpZy51ayIKK3NvdXJjZSAibGliL3VrbW1hcC9Db25m
aWcudWsiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUudWsgYi9saWIvTWFrZWZpbGUudWsKaW5k
ZXggYTE2OTcxOTguLjJjYTk5NzNmIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUudWsKKysrIGIv
bGliL01ha2VmaWxlLnVrCkBAIC0zMSwzICszMSw0IEBAICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9s
aWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrOXApKQogJChldmFsICQoY2FsbCBfaW1wb3J0X2xp
YiwkKENPTkZJR19VS19CQVNFKS9saWIvcG9zaXgtbGliZGwpKQogJChldmFsICQoY2FsbCBfaW1w
b3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWtsaWJwYXJhbSkpCiAkKGV2YWwgJChjYWxs
IF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a3RpbWUpKQorJChldmFsICQoY2Fs
bCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWttbWFwKSkKZGlmZiAtLWdpdCBh
L2xpYi91a21tYXAvQ29uZmlnLnVrIGIvbGliL3VrbW1hcC9Db25maWcudWsKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmY3NTJkYTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGli
L3VrbW1hcC9Db25maWcudWsKQEAgLTAsMCArMSw1IEBACitjb25maWcgTElCVUtNTUFQCisJYm9v
bCAidWttbWFwOiBtbWFwIHN5c3RlbSBjYWxsIgorCWRlZmF1bHQgbgorCXNlbGVjdCBMSUJVS0FM
TE9DCisJc2VsZWN0IExJQk5FV0xJQkMKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvTWFrZWZpbGUu
dWsgYi9saWIvdWttbWFwL01ha2VmaWxlLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwLi44YWMzYWIzYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91a21tYXAvTWFrZWZpbGUu
dWsKQEAgLTAsMCArMSBAQAorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ1a21tYXAsJChDT05G
SUdfTElCVUtNTUFQKSkpCmRpZmYgLS1naXQgYS9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsgYi9s
aWIvdWttbWFwL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAuLjYyMWU5NGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVr
CkBAIC0wLDAgKzEgQEAKK25vbmUKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:35:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:35:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAsqf-0002JB-MW; Thu, 19 Sep 2019 09:35:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fTtO=XO=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iAsqe-0002Iy-9r
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:35:36 +0000
X-Inumbo-ID: d150fce6-dac0-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d150fce6-dac0-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:35:29 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E0E8BF2025;
 Thu, 19 Sep 2019 11:35:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id mnxp8Bxoku9J; Thu, 19 Sep 2019 11:35:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B9265F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:35:26 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:35:22 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:35:11 +0200
Message-ID: <20190919093511.14256-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919093511.14256-1-Charalampos.Mainas@neclab.eu>
References: <20190919093511.14256-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 2/2] lib/ukmmap: mmap trick for Go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi91a21tYXAvTWFrZWZpbGUudWsgICB8ICAgMiArCiBsaWIvdWttbWFw
L2V4cG9ydHN5bXMudWsgfCAgIDMgKy0KIGxpYi91a21tYXAvbW1hcC5jICAgICAgICB8IDE2NiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MTcwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
dWttbWFwL21tYXAuYwoKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvTWFrZWZpbGUudWsgYi9saWIv
dWttbWFwL01ha2VmaWxlLnVrCmluZGV4IDhhYzNhYjNjLi43MWZmNDMyZiAxMDA2NDQKLS0tIGEv
bGliL3VrbW1hcC9NYWtlZmlsZS51aworKysgYi9saWIvdWttbWFwL01ha2VmaWxlLnVrCkBAIC0x
ICsxLDMgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWttbWFwLCQoQ09ORklHX0xJQlVL
TU1BUCkpKQorCitMSUJVS01NQVBfU1JDUy15ICs9ICQoTElCVUtNTUFQX0JBU0UpL21tYXAuYwpk
aWZmIC0tZ2l0IGEvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrIGIvbGliL3VrbW1hcC9leHBvcnRz
eW1zLnVrCmluZGV4IDYyMWU5NGYwLi5hMzFjNjM2YiAxMDA2NDQKLS0tIGEvbGliL3VrbW1hcC9l
eHBvcnRzeW1zLnVrCisrKyBiL2xpYi91a21tYXAvZXhwb3J0c3ltcy51awpAQCAtMSArMSwyIEBA
Ci1ub25lCittbWFwCittdW5tYXAKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvbW1hcC5jIGIvbGli
L3VrbW1hcC9tbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjRlMjRm
Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrbW1hcC9tbWFwLmMKQEAgLTAsMCArMSwxNjYg
QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKgor
ICogQXV0aG9yczogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFi
LmV1PgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVD
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1B
WSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1
ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dWsvYWxsb2MuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworc3RydWN0IG1tYXBfYWRkciB7CisJdm9pZCAqYmVnaW47CisJdm9pZCAqZW5kOworCXN0
cnVjdCBtbWFwX2FkZHIgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IG1tYXBfYWRkciAqbW1h
cF9hZGRyOworCisvKioKKyAqIFRoaXMgaXMgbm90IGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBv
ZiBtbWFwLiBJdCBpcyBqdXN0IGEgdHJpY2sgdGhhdCB3b3JrcworICogZm9yIEdvIGJ1dCBpdCBu
ZWVkcyB0byBiZSByZXZpc2l0ZWQuIEluc3RlYWQgb2YgbWFwcGluZywgaXQgYWxsb2NhdGVzIGxl
bgorICogYnl0ZXMgb2YgbWVtb3J5IGFuZCBzdG9yZXMgdGhlIGJlZ2lubmluaWcgYW5kIHRoZSBl
bmQgb2YgdGhhdCBtZW1vcnkgY2h1bmsKKyAqIGluIHN0cnVjdCBtbWFwX2FkZHIuIEF0IGZpcnN0
IGl0IGNoZWNrcyBpZiBhZGRyIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBtZW1vcnkKKyAqIGNodW5r
cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gYSBwcmV2aW91cyBjYWxsIG9mIG1tYXAuIElm
IHRoYXQgaXMgdGhlCisgKiBjYXNlIGFkZHIgaXMgdGhlIHJldHVybiB2YWx1ZS4gT3RoZXJ3aXNl
IGEgbmV3IG1lbW9yeSBibG9jayBpcyBhbGxvY2F0ZWQgYW5kCisgKiB0aGUgcmV0dXJuIHZhbHVl
IGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5pZyBvZiB0aGF0IGJsb2NrLgorICoKKyAqIEdv
IHVzZXMgbW1hcCBhbHdheXMgd2l0aDoKKyAqIEBwcm90ICAgPQllaXRoZXIgUFJPVF9OT05FIG9y
IFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICogQGZsYWdzICA9CWFzIE1BUF9BTk9OfE1BUF9QUklW
QVRFLCBvciBNQVBfRklYRUR8TUFQX0FOT058TUFQX1BSSVZBVEUKKyAqCQlvciBNQVBfTk9SRVNF
UlZFfE1BUF9BTk9OfE1BUF9QUklWQVRFCisgKiBAZmlsZGVzID0JLTEKKyAqIEBvZmYgICAgPQkw
CisgKgorICovCisKK3ZvaWQgKm1tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3Qs
CisJCWludCBmbGFncywgaW50IGZpbGRlcywgb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBtbWFwX2Fk
ZHIgKnRtcCA9IG1tYXBfYWRkciwgKmxhc3QgPSBOVUxMLCAqbmV3ID0gTlVMTDsKKworCWlmICgh
bGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKHZvaWQgKikgLTE7CisJfQorCisJ
LyogQ2hlY2sgaWYgcGFyYW1ldGVycyBtYXRjaCB0aGUgb25lcyB0aGF0IGdvIHVzZQorCSAqIE90
aGVyd2lzZSByZXR1cm4gMCAodW5pbXBsZW1lbnRlZCBtbWFwKQorCSAqLworCWlmIChmaWxkZXMg
IT0gLTEgfHwgb2ZmKQorCQlyZXR1cm4gMDsKKwlpZiAoIShwcm90ICYgKFBST1RfUkVBRHxQUk9U
X1dSSVRFKSkgJiYgKHByb3QgIT0gMCkpCisJCXJldHVybiAwOworCWlmICghKGZsYWdzICYgKE1B
UF9BTk9OfE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX0ZJWEVEfE1BUF9BTk9O
fE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX05PUkVTRVJWRXxNQVBfQU5PTnxN
QVBfUFJJVkFURSkpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICh0bXApIHsKKwkJaWYgKGFkZHIp
IHsKKwkJCWlmIChhZGRyID49IHRtcC0+YmVnaW4gJiYgYWRkciA8IHRtcC0+ZW5kKQorCQkJCXJl
dHVybiBhZGRyOworCQl9CisJCWxhc3QgPSB0bXA7CisJCXRtcCA9IHRtcC0+bmV4dDsKKwl9CisJ
dm9pZCAqbWVtID0gdWtfbWFsbG9jKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGxlbik7CisKKwlp
ZiAoIW1lbSkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICh2b2lkICopIC0xOworCX0K
KwluZXcgPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKHN0cnVjdCBt
bWFwX2FkZHIpKTsKKwluZXctPmJlZ2luID0gbWVtOworCW5ldy0+ZW5kID0gbWVtICsgbGVuOwor
CW5ldy0+bmV4dCA9IE5VTEw7CisJaWYgKCFtbWFwX2FkZHIpCisJCW1tYXBfYWRkciA9IG5ldzsK
KwllbHNlCisJCWxhc3QtPm5leHQgPSBuZXc7CisJcmV0dXJuIG1lbTsKK30KKworLyoKKyAqIG11
bm1hcCBmcmVlcyBsZW4gYnl0ZXMgb3MgbWVtb3J5IHN0YXJ0aW5nIGZyb20gYWRkci4KKyAqIGFk
ZHIgbmVlZHMgdG8gYmUgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGJsb2NrIHRoYXQgaGFzIGJlZW4g
YWxsb2NhdGVkIGZyb20KKyAqIG1tYXAuIElmIGxlbiBoYXMgdGhlIHNhbWUgdmFsdWUgd2l0aCB0
aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgaGFzCisgKiBiZWVuIGFsbG9jYXRlZCBm
cm9tIG1tYXAgdGhlIHN0cnVjdCBtbWFwX2FkZHIgY291bnRlcnBhcnQgaXMgZGVzdHJveWVkLgor
ICogT3RoZXJ3aXNlIHRoZSBpbml0aWFsIG1lbW9yeSBibG9jayBpcyByZXBsYWNlZCBieSBhIHNt
YWxsZXIgb25lLgorICovCisKK2ludCBtdW5tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbikKK3sK
KwlzdHJ1Y3QgbW1hcF9hZGRyICp0bXAgPSBtbWFwX2FkZHIsICpwcmV2ID0gTlVMTDsKKwlzaXpl
X3QgcmVtYWluX21lbTsKKworCWlmICghbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1
cm4gLTE7CisJfQorCWlmICghYWRkcikKKwkJcmV0dXJuIDA7CisJd2hpbGUgKHRtcCkgeworCQlp
ZiAoYWRkciAhPSB0bXAtPmJlZ2luKSB7CisJCQlpZiAodG1wLT5lbmQgPiBhZGRyICsgbGVuKSB7
CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmVtYWluX21l
bSA9IHRtcC0+ZW5kIC0gYWRkciAtIGxlbjsKKwkJCWlmIChyZW1haW5fbWVtKSB7CisKKwkJCQl2
b2lkICptZW0gPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwKKwkJCQkJCXJlbWFp
bl9tZW0pOworCQkJCWlmICghbWVtKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlyZXR1
cm4gLTE7CisJCQkJfQorCQkJCW1lbWNweShtZW0sIGFkZHIrbGVuLCByZW1haW5fbWVtKTsKKwkJ
CQl0bXAtPmJlZ2luID0gbWVtOworCQkJfSBlbHNlIHsKKworCQkJCWlmICghcHJldikKKwkJCQkJ
bW1hcF9hZGRyID0gdG1wLT5uZXh0OworCQkJCWVsc2UKKwkJCQkJcHJldi0+bmV4dCA9IHRtcC0+
bmV4dDsKKwkJCQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIHRtcCk7CisJCQl9CisJ
CQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGFkZHIpOworCQkJcmV0dXJuIDA7CisJ
CX0KKwkJcHJldiA9IHRtcDsKKwkJdG1wID0gdG1wLT5uZXh0OworCX0KKwkvKiB1bmltcGxlbWVu
dGVkIG11bm1hcCAqLworCXJldHVybiAwOworfQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 09:51:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 09:51:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAt5s-0005So-HR; Thu, 19 Sep 2019 09:51:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=2vsC=XO=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iAt5r-0005SW-FK
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:51:19 +0000
X-Inumbo-ID: 04e61ee1-dac3-11e9-9651-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.75]) by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 04e61ee1-dac3-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:51:15 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=NxKZgXryxXktvhVW2w2Xzv5KFubcrHVGCZqnkBP6vRAsvqRWEoUozjfomwZI7q/WAY53g7+pD54EEng33NlbcFF4ciC31H2GljSOXyr+QMYEX8O/5qirRfo46xpad9FHZwzJ6esgm/RgjZpZyotqX83PqJpSYePMVKNIL4DiNAk25So85I29X1rkvT7YRrdMZ2ydPKAffsB+plIph/qWfJcn447oRNQrtR6RwCvAizhSGt9CL1KnqAj0XVj168tWIpQSoCDdLz1FPX5Ldf1fDJZ/8jO0VyV+jGu/2RdJtPs5E17lfMBFNR0vEPcCCY551qiDNvTc4cNlH/A77OvBUA==
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=6UvO5u8Nfd83iWPrvTTiXtcX/LXzYggB8tUYt2RlGoI=;
 b=LTv80ZGFs2Wsm/T9gs4ryeNaJmVZhAiHmiloRPPeDIKwwhZ7zDy8BniX+drT4qQ6pTAF307r2pRxAI7WgojOCNOlLxbgaATrnrP93HCRn/Cft1uF0/t1syf9Js5oCyqtsXHzr08tOCmmPstGrNko1U8pWERLdLj2p2+4tfAKECsMifRy1Vd8ePmRsz10QfBuW+wFyfz2/yF1GUa8/Gfa2+40+9EIjOybTHZTy9S35joxm2F7aYaUUJoyPuTGxc3XsXUuu8qWgRhchPZhSWPB91uUnWDNHl7orndXD/Mizi64GHXzfw/KUO9Ee9bs8NAR/F8zAiJ+NtAnFft7F2SMww==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4844.eurprd01.prod.exchangelabs.com (20.177.212.77) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.15; Thu, 19 Sep
 2019 09:51:13 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019
 09:51:13 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v2] lib/vfscore: Add anonymous
 pipe
Thread-Index: AQHVahEaRkTw5ojstECCbVe8FC/81qcyy2aA
Date: Thu, 19 Sep 2019 09:51:13 +0000
Message-ID: <8bcdd070-83bf-d11f-bac4-3eaa172e609d@stud.acs.upb.ro>
References: <20190913085542.576-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190913085542.576-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR2PR09CA0004.eurprd09.prod.outlook.com
 (2603:10a6:101:16::16) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 1fed9172-1823-44b8-1f93-08d73ce6e824
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7025125)(7027125)(7023125)(5600167)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB4844; 
x-ms-traffictypediagnostic: PR1PR01MB4844:
x-microsoft-antispam-prvs: <PR1PR01MB4844AFA2123C09D40FE6A391A6890@PR1PR01MB4844.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:8273;
x-forefront-prvs: 016572D96D
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(39830400003)(136003)(376002)(346002)(396003)(199004)(189003)(51444003)(66556008)(3846002)(6116002)(6916009)(71190400001)(5660300002)(316002)(2906002)(66066001)(30864003)(786003)(66946007)(2351001)(85202003)(186003)(66476007)(26005)(102836004)(6506007)(386003)(71200400001)(8936002)(53546011)(64756008)(66446008)(6436002)(6486002)(508600001)(14454004)(229853002)(2501003)(256004)(14444005)(86362001)(476003)(2616005)(486006)(8676002)(81166006)(76176011)(11346002)(446003)(7736002)(6246003)(54896002)(52116002)(85182001)(81156014)(236005)(99286004)(25786009)(31686004)(5640700003)(31696002)(6512007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4844;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: h7BCkk0yA7Q3qDd+C6jQJY0isN1BcNP2x2a78EttAxxX/lm2MkyIDawV/50MnbbEcE2G9QM8tRMZQOy9IRhOfGIu/CFeyWvamaQTzP7jaadFNe5kCpIQs9UDRs9N9D4X3I8fRE4HP04zqM5H4WDjjoJDrZRTwQSKUpPBOIzPO7Kk4S/JGaQbNNGg0nJY6CKU/j06TYqOMWyx9YB6Y6YgcQN6/5yACbr+/zQ+vgGGHA50eb8fZv99VuPihu1bYQHeeEK0K7XuT7WMUU0sU+lfsJl6QpK26yOxF1nih8T9fyMJERRIit5wvhr/m+JyLHZu4Qc6CGoTIDja7mAo1Duv4bEIinb0OnCaN8+z9c5Lwj9yegtpBZAtmzS1y4OlIrxLtThUnQ8PqxueHPw3OO4CChMiuI13aUEUVs1TtYohseE=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 1fed9172-1823-44b8-1f93-08d73ce6e824
X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 09:51:13.2999 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 6Fw4B/GWVLwGjYGvMwXuGsMuUlpGOD+lPyseD5rTEWHIpx4/nvn1TQNuUSr2xDSTwECmsRQZdYc3OTMVZm3nhvaFpr3fYtJOzd8M2iiEVXIP7p58Ec2D6cbqNK+OqoUN
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4844
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2] lib/vfscore: Add anonymous
 pipe
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============7665678682436469814=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============7665678682436469814==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_8bcdd07083bfd11fbac43eaa172e609dstudacsupbro_"

--_000_8bcdd07083bfd11fbac43eaa172e609dstudacsupbro_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SGV5IENvc3RpbiwNCg0KSSBoYXZlIHRlc3RlZCB0aGUgaW1wbGVtZW50YXRpb24gd2l0aCBhIHBy
b2dyYW0gdGhhdCB3cml0ZXMgMyBkaWZmZXJlbnQgdmFsdWUgdG8gYSBwaXBlIGFuZCB0aGVuDQoN
CnJlYWRzIDMgdGltZXMgZnJvbSB0aGUgcGlwZS4gRm9yIGVhY2ggcmVhZCB3ZSBvbmx5IGdldCB0
aGUgbGFzdCB2YWx1ZS4gQWxzbywgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5DQoNCm92ZXIgc3Rh
Z2luZyB3aXRob3V0IGNvbmZsaWN0cy4NCg0KDQpQbGVhc2Ugc2VlIHRoZSByZXN0IG9mIHRoZSBj
b21tZW50cyBpbmxpbmUuDQoNClRoYW5rcywNCg0KVmxhZA0KDQpPbiAxMy4wOS4yMDE5IDExOjU1
LCBDb3N0aW4gTHVwdSB3cm90ZToNCg0KRnJvbTogQm9nZGFuIExhc2N1IDxsYXNjdS5ib2dkYW45
NkBnbWFpbC5jb20+PG1haWx0bzpsYXNjdS5ib2dkYW45NkBnbWFpbC5jb20+DQoNClRoaXMgcGF0
Y2ggYWRkcyBzdXBwb3J0IGZvciBhbm9ueW1vdXMgcGlwZXMuIFRoZSB1bmRlcmx5aW5nIGJ1ZmZl
ciBpcyBhIHJpbmcNCmJ1ZmZlciB3aG9zZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyLiBUaGUg
Y3JlYXRpbmcgb2YgaXRzIGZpbGUgZGVzY3JpcHRvcnMNCmZvbGxvd3MgY2xvc2VseSB0aGUgaW1w
bGVtZW50YXRpb24gZm9yIHNvY2tldHMgaW4gbHdpcCBnbHVlIGNvZGUuDQoNClNpZ25lZC1vZmYt
Ynk6IEJvZ2RhbiBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29tPjxtYWlsdG86bGFzY3Uu
Ym9nZGFuOTZAZ21haWwuY29tPg0KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5s
dXB1QGNzLnB1Yi5ybz48bWFpbHRvOmNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCi0tLQ0KIGxpYi92
ZnNjb3JlL01ha2VmaWxlLnVrICAgfCAgIDIgKw0KIGxpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsg
fCAgIDEgKw0KIGxpYi92ZnNjb3JlL3BpcGUuYyAgICAgICAgfCA1NzIgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysNCiAzIGZpbGVzIGNoYW5nZWQsIDU3NSBpbnNlcnRpb25z
KCspDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi92ZnNjb3JlL3BpcGUuYw0KDQpkaWZmIC0tZ2l0
IGEvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsgYi9saWIvdmZzY29yZS9NYWtlZmlsZS51aw0KaW5k
ZXggNzk4NzhmMjYuLmUzNmM5MjE3IDEwMDY0NA0KLS0tIGEvbGliL3Zmc2NvcmUvTWFrZWZpbGUu
dWsNCisrKyBiL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrDQpAQCAtMTQsNiArMTQsOCBAQCBMSUJW
RlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvdGFzay5jDQogTElCVkZTQ09SRV9T
UkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2xvb2t1cC5jDQogTElCVkZTQ09SRV9TUkNTLXkg
Kz0gJChMSUJWRlNDT1JFX0JBU0UpL2ZvcHMuYw0KIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElC
VkZTQ09SRV9CQVNFKS9zdWJyX3Vpby5jDQorTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlND
T1JFX0JBU0UpL3BpcGUuYw0KK0xJQlZGU0NPUkVfUElQRV9GTEFHUy15ICs9IC1Xbm8tY2FzdC1m
dW5jdGlvbi10eXBlDQogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2V4
dHJhLmxkDQoNCg0KZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgYi9saWIv
dmZzY29yZS9leHBvcnRzeW1zLnVrDQppbmRleCBlM2Q2NzIzYS4uN2YwMmM2NjcgMTAwNjQ0DQot
LS0gYS9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrDQorKysgYi9saWIvdmZzY29yZS9leHBvcnRz
eW1zLnVrDQpAQCAtNzksMyArNzksNCBAQCBkZW50cnlfYWxsb2MNCiBkcmVsZQ0KIHZyZWxlDQog
ZmNudGwNCitwaXBlDQpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvcGlwZS5jIGIvbGliL3Zmc2Nv
cmUvcGlwZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAuLjI1MmU2NWY3
DQotLS0gL2Rldi9udWxsDQorKysgYi9saWIvdmZzY29yZS9waXBlLmMNCkBAIC0wLDAgKzEsNTcy
IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLw0KKy8qDQor
ICogQXV0aG9yczogQm9nZGFuLUdlb3JnZSBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29t
PjxtYWlsdG86bGFzY3UuYm9nZGFuOTZAZ21haWwuY29tPg0KKyAqICAgICAgICAgIENvc3RpbiBM
dXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+PG1haWx0bzpjb3N0aW4ubHVwdUBjcy5wdWIucm8+
DQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2Yg
QnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zDQorICogYXJlIG1ldDoNCisgKg0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQor
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5h
bWVzIG9mIGl0cw0KKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMgIkFTIElTIg0KKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0K
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUNCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MNCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
DQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4N
CisgKg0KKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElO
IEFOWSBXQVkuDQorICovDQorDQorI2luY2x1ZGUgPHN0ZGlvLmg+DQorI2luY2x1ZGUgPHN0cmlu
Zy5oPg0KKyNpbmNsdWRlIDx2ZnNjb3JlL2ZpbGUuaD4NCisjaW5jbHVkZSA8dmZzY29yZS9mcy5o
Pg0KKyNpbmNsdWRlIDx2ZnNjb3JlL21vdW50Lmg+DQorI2luY2x1ZGUgPHZmc2NvcmUvdm5vZGUu
aD4NCisjaW5jbHVkZSA8dWsvd2FpdC5oPg0KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCisNCisv
KiBXZSB1c2UgdGhlIGRlZmF1bHQgc2l6ZSBpbiBMaW51eCBrZXJuZWwgKi8NCisjZGVmaW5lIFBJ
UEVfTUFYX1NJWkUgICgxIDw8IDE2KQ0KDQpJIHRoaW5rIHRoYXQgd2Ugc2hvdWxkIHByb3ZpZGUg
YSBjb25maWcgb3B0aW9uIGZvciB0aGlzIHZhbHVlIGJlY2F1c2UgYWxsb2NhdGluZyA2NEtCIGZv
ciBlYWNoIHBpcGUNCg0KY2FsbCBpcyBxdWl0ZSBhIGxvdCBvZiBtZW1vcnkgZm9yIGEgdW5pa2Vy
bmVsLg0KDQorDQorc3RydWN0IHBpcGVfYnVmIHsNCisgICAgICAgLyogVGhlIGJ1ZmZlciAqLw0K
KyAgICAgICBjaGFyICpkYXRhOw0KKyAgICAgICAvKiBUaGUgYnVmZmVyIGNhcGFjaXR5LCBhbHdh
eXMgYSBwb3dlciBvZiAyICovDQorICAgICAgIHVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7DQorICAg
ICAgIC8qIFByb2R1Y2VyIGluZGV4ICovDQorICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvZDsNCisg
ICAgICAgLyogQ29uc3VtZXIgaW5kZXggKi8NCisgICAgICAgdW5zaWduZWQgbG9uZyBjb25zOw0K
Kw0KKyAgICAgICAvKiBSZWFkIGxvY2sgKi8NCisgICAgICAgc3RydWN0IHVrX211dGV4IHJkbG9j
azsNCisgICAgICAgLyogV3JpdGUgbG9jayAqLw0KKyAgICAgICBzdHJ1Y3QgdWtfbXV0ZXggd3Js
b2NrOw0KKw0KKyAgICAgICAvKiBSZWFkZXJzIHF1ZXVlICovDQorICAgICAgIHN0cnVjdCB1a193
YWl0cSByZHdxOw0KKyAgICAgICAvKiBXcml0ZXJzIHF1ZXVlICovDQorICAgICAgIHN0cnVjdCB1
a193YWl0cSB3cndxOw0KK307DQorDQorI2RlZmluZSBQSVBFX0JVRl9JRFgoYnVmLCBuKSAgICAo
KGJ1ZiktPmNhcGFjaXR5ICYgKG4pKQ0KKyNkZWZpbmUgUElQRV9CVUZfUFJPRF9JRFgoYnVmKSAg
UElQRV9CVUZfSURYKChidWYpLCAoYnVmKS0+cHJvZCkNCisjZGVmaW5lIFBJUEVfQlVGX0NPTlNf
SURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgoYnVmKSwgKGJ1ZiktPmNvbnMpDQorDQorc3RydWN0IHBp
cGVfZmlsZSB7DQorICAgICAgIC8qIFBpcGUgYnVmZmVyICovDQorICAgICAgIHN0cnVjdCBwaXBl
X2J1ZiAqYnVmOw0KKyAgICAgICAvKiBXcml0ZSByZWZlcmVuY2UgY291bnQgKi8NCisgICAgICAg
aW50IHdfcmVmY291bnQ7DQorICAgICAgIC8qIFJlYWQgcmVmZXJlbmNlIGNvdW50ICovDQorICAg
ICAgIGludCByX3JlZmNvdW50Ow0KKyAgICAgICAvKiBGbGFncyAqLw0KKyAgICAgICBpbnQgZmxh
Z3M7DQorfTsNCisNCisNCitzdGF0aWMgc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1Zl9hbGxvYyhp
bnQgY2FwYWNpdHkpDQorew0KKyAgICAgICBzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmOw0KKw0K
KyAgICAgICBVS19BU1NFUlQoUE9XRVJfT0ZfMihjYXBhY2l0eSkpOw0KKw0KKyAgICAgICBwaXBl
X2J1ZiA9IHVrX21hbGxvYyh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCBzaXplb2YoKnBpcGVfYnVm
KSk7DQorICAgICAgIGlmICghcGlwZV9idWYpDQorICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7
DQorDQorICAgICAgIHBpcGVfYnVmLT5kYXRhID0gdWtfbWFsbG9jKHVrX2FsbG9jX2dldF9kZWZh
dWx0KCksIGNhcGFjaXR5KTsNCisgICAgICAgaWYgKCFwaXBlX2J1Zi0+ZGF0YSkgew0KKyAgICAg
ICAgICAgICAgIHVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgcGlwZV9idWYpOw0KKyAg
ICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICAgICB9DQorDQorICAgICAgIHBpcGVfYnVm
LT5jYXBhY2l0eSA9IGNhcGFjaXR5Ow0KKyAgICAgICBwaXBlX2J1Zi0+Y29ucyA9IDA7DQorICAg
ICAgIHBpcGVfYnVmLT5wcm9kID0gMDsNCisgICAgICAgdWtfbXV0ZXhfaW5pdCgmcGlwZV9idWYt
PnJkbG9jayk7DQorICAgICAgIHVrX211dGV4X2luaXQoJnBpcGVfYnVmLT53cmxvY2spOw0KKyAg
ICAgICB1a193YWl0cV9pbml0KCZwaXBlX2J1Zi0+cmR3cSk7DQorICAgICAgIHVrX3dhaXRxX2lu
aXQoJnBpcGVfYnVmLT53cndxKTsNCisNCisgICAgICAgcmV0dXJuIHBpcGVfYnVmOw0KK30NCisN
Cit2b2lkIHBpcGVfYnVmX2ZyZWUoc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikNCit7DQorICAg
ICAgIHVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgcGlwZV9idWYtPmRhdGEpOw0KDQp2
ZnNjb3JlIGRvZXMgbm90IHVzZSB1a19mcmVlIGRpcmVjdGx5IGJ1dCB0aHJvdWdoIHRoZSBmcmVl
IGNhbGwuIFBlcmhhcHMgd2Ugc2hvdWxkIGZvbGxvdyB0aGUgc2FtZSBhcHByb2FjaC4NCg0KVGhl
IHNhbWUgY29tbWVudCBhcHBsaWVzIGZvciB1a19tYWxsb2MuDQoNCg0KKyAgICAgICB1a19mcmVl
KHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIHBpcGVfYnVmKTsNCit9DQorDQorc3RhdGljIHVuc2ln
bmVkIGxvbmcgcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShjb25zdCBzdHJ1Y3QgcGlwZV9idWYgKnBp
cGVfYnVmKQ0KK3sNCisgICAgICAgcmV0dXJuIHBpcGVfYnVmLT5wcm9kIC0gcGlwZV9idWYtPmNv
bnM7DQorfQ0KKw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBpcGVfYnVmX2dldF9mcmVlX3NwYWNl
KHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQorew0KKyAgICAgICByZXR1cm4gcGlwZV9idWYt
PmNhcGFjaXR5IC0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7DQorfQ0KKw0KK3N0
YXRpYyBpbnQgcGlwZV9idWZfY2FuX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQor
ew0KKyAgICAgICByZXR1cm4gcGlwZV9idWZfZ2V0X2ZyZWVfc3BhY2UocGlwZV9idWYpID4gMDsN
Cit9DQorDQorc3RhdGljIGludCBwaXBlX2J1Zl9jYW5fcmVhZChzdHJ1Y3QgcGlwZV9idWYgKnBp
cGVfYnVmKQ0KK3sNCisgICAgICAgcmV0dXJuIHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9i
dWYpID4gMDsNCit9DQorDQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfd3JpdGUoc3Ry
dWN0IHBpcGVfYnVmICpwaXBlX2J1ZiwNCisgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgKmlv
dmVjLCBzaXplX3QgaW92ZWNfb2ZmKQ0KK3sNCisgICAgICAgdW5zaWduZWQgbG9uZyBwcm9kX2lk
eCwgdG9fd3JpdGU7DQorICAgICAgIHZvaWQgKmlvdmVjX2RhdGEgPSBpb3ZlYy0+aW92X2Jhc2Ug
KyBpb3ZlY19vZmY7DQorICAgICAgIHNpemVfdCBpb3ZfbGVuID0gaW92ZWMtPmlvdl9sZW4gLSBp
b3ZlY19vZmY7DQorDQorICAgICAgIHByb2RfaWR4ID0gUElQRV9CVUZfUFJPRF9JRFgocGlwZV9i
dWYpOw0KKyAgICAgICB0b193cml0ZSA9IE1JTihwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShwaXBl
X2J1ZiksIGlvdl9sZW4pOw0KKyAgICAgICBpZiAodG9fd3JpdGUgPT0gMCkNCisgICAgICAgICAg
ICAgICBnb3RvIG91dDsNCisNCisgICAgICAgLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCisgICAg
ICAgaWYgKHByb2RfaWR4ICsgdG9fd3JpdGUgPD0gcGlwZV9idWYtPmNhcGFjaXR5KQ0KKyAgICAg
ICAgICAgICAgIG1lbWNweShwaXBlX2J1Zi0+ZGF0YSArIHByb2RfaWR4LCBpb3ZlY19kYXRhLCB0
b193cml0ZSk7DQorDQorICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgIGludCBmaXJzdF9j
b3B5X2J5dGVzLCBzZWNvbmRfY29weV9ieXRlczsNCisNCisgICAgICAgICAgICAgICAvKiBDb3B5
IHRoZSBmaXJzdCBwYXJ0ICovDQorICAgICAgICAgICAgICAgZmlyc3RfY29weV9ieXRlcyA9IHBp
cGVfYnVmLT5jYXBhY2l0eSAtIHByb2RfaWR4Ow0KKyAgICAgICAgICAgICAgIG1lbWNweShwaXBl
X2J1Zi0+ZGF0YSArIHByb2RfaWR4LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3ZlY19kYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb3B5X2J5
dGVzKTsNCisNCisgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCAqLw0KKyAg
ICAgICAgICAgICAgIHNlY29uZF9jb3B5X2J5dGVzID0gcHJvZF9pZHggKyB0b193cml0ZSAtIHBp
cGVfYnVmLT5jYXBhY2l0eTsNCisgICAgICAgICAgICAgICBtZW1jcHkocGlwZV9idWYtPmRhdGEs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmVjX2RhdGEgKyBmaXJzdF9jb3B5
X2J5dGVzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfY29weV9ieXRl
cyk7DQorICAgICAgIH0NCisNCisgICAgICAgLyogVXBkYXRlIHByb2R1Y2VyICovDQorICAgICAg
IHBpcGVfYnVmLT5wcm9kICs9IHRvX3dyaXRlOw0KKw0KK291dDoNCisgICAgICAgcmV0dXJuIHRv
X3dyaXRlOw0KK30NCisNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9yZWFkKHN0cnVj
dCBwaXBlX2J1ZiAqcGlwZV9idWYsDQorICAgICAgICAgICAgICAgc3RydWN0IGlvdmVjICppb3Zl
Yywgc2l6ZV90IGlvdmVjX29mZikNCit7DQorICAgICAgIHVuc2lnbmVkIGxvbmcgY29uc19pZHgs
IHRvX3JlYWQ7DQorICAgICAgIHZvaWQgKmlvdmVjX2RhdGEgPSBpb3ZlYy0+aW92X2Jhc2UgKyBp
b3ZlY19vZmY7DQorICAgICAgIHNpemVfdCBpb3ZfbGVuID0gaW92ZWMtPmlvdl9sZW4gLSBpb3Zl
Y19vZmY7DQorDQorICAgICAgIGNvbnNfaWR4ID0gUElQRV9CVUZfQ09OU19JRFgocGlwZV9idWYp
Ow0KKyAgICAgICB0b19yZWFkID0gTUlOKHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9idWYp
LCBpb3ZfbGVuKTsNCisgICAgICAgaWYgKHRvX3JlYWQgPT0gMCkNCisgICAgICAgICAgICAgICBn
b3RvIG91dDsNCisNCisgICAgICAgLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCisgICAgICAgaWYg
KGNvbnNfaWR4ICsgdG9fcmVhZCA8PSBwaXBlX2J1Zi0+Y2FwYWNpdHkpDQorICAgICAgICAgICAg
ICAgbWVtY3B5KGlvdmVjX2RhdGEsIHBpcGVfYnVmLT5kYXRhICsgY29uc19pZHgsIHRvX3JlYWQp
Ow0KKw0KKyAgICAgICBlbHNlIHsNCisgICAgICAgICAgICAgICBpbnQgZmlyc3RfY29weV9ieXRl
czsNCisgICAgICAgICAgICAgICBpbnQgc2Vjb25kX2NvcHlfYnl0ZXM7DQorDQorICAgICAgICAg
ICAgICAgLyogQ29weSB0aGUgZmlyc3QgcGFydCAqLw0KKyAgICAgICAgICAgICAgIGZpcnN0X2Nv
cHlfYnl0ZXMgPSBwaXBlX2J1Zi0+Y2FwYWNpdHkgLSBwaXBlX2J1Zi0+Y29uczsNCisgICAgICAg
ICAgICAgICBtZW1jcHkoaW92ZWNfZGF0YSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGlwZV9idWYtPmRhdGEgKyBjb25zX2lkeCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyc3RfY29weV9ieXRlcyk7DQorDQorICAgICAgICAgICAgICAgLyogQ29weSB0aGUg
c2Vjb25kIHBhcnQgKi8NCisgICAgICAgICAgICAgICBzZWNvbmRfY29weV9ieXRlcyA9IGNvbnNf
aWR4ICsgdG9fcmVhZCAtIHBpcGVfYnVmLT5jYXBhY2l0eTsNCisgICAgICAgICAgICAgICBtZW1j
cHkoaW92ZWNfZGF0YSArIGZpcnN0X2NvcHlfYnl0ZXMsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBpcGVfYnVmLT5kYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWNvbmRfY29weV9ieXRlcyk7DQorICAgICAgIH0NCisNCisgICAgICAgLyogVXBkYXRlIGNv
bnN1bWVyICovDQorICAgICAgIHBpcGVfYnVmLT5jb25zICs9IHRvX3JlYWQ7DQorDQorb3V0Og0K
KyAgICAgICByZXR1cm4gdG9fcmVhZDsNCit9DQorDQorc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9m
aWxlX2FsbG9jKGludCBjYXBhY2l0eSwgaW50IGZsYWdzKQ0KK3sNCisgICAgICAgc3RydWN0IHBp
cGVfZmlsZSAqcGlwZV9maWxlOw0KKw0KKyAgICAgICBwaXBlX2ZpbGUgPSB1a19tYWxsb2ModWtf
YWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKCpwaXBlX2ZpbGUpKTsNCisgICAgICAgaWYgKCFw
aXBlX2ZpbGUpDQorICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQorDQorICAgICAgIHBpcGVf
ZmlsZS0+YnVmID0gcGlwZV9idWZfYWxsb2MoY2FwYWNpdHkpOw0KKyAgICAgICBpZiAoIXBpcGVf
ZmlsZS0+YnVmKSB7DQorICAgICAgICAgICAgICAgdWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVs
dCgpLCBwaXBlX2ZpbGUpOw0KKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICAgICB9
DQorDQorICAgICAgIHBpcGVfZmlsZS0+d19yZWZjb3VudCA9IDE7DQorICAgICAgIHBpcGVfZmls
ZS0+cl9yZWZjb3VudCA9IDE7DQorICAgICAgIHBpcGVfZmlsZS0+ZmxhZ3MgPSBmbGFnczsNCisN
CisgICAgICAgcmV0dXJuIHBpcGVfZmlsZTsNCit9DQorDQordm9pZCBwaXBlX2ZpbGVfZnJlZShz
dHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUpDQorew0KKyAgICAgICBwaXBlX2J1Zl9mcmVlKHBp
cGVfZmlsZS0+YnVmKTsNCisgICAgICAgdWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCBw
aXBlX2ZpbGUpOw0KK30NCisNCitzdGF0aWMgaW50IHBpcGVfd3JpdGUoc3RydWN0IHZub2RlICp2
bm9kZSwNCisgICAgICAgICAgICAgICBzdHJ1Y3QgdWlvICpidWYsIGludCBpb2ZsYWcgX191bnVz
ZWQpDQorew0KKyAgICAgICBzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUgPSB2bm9kZS0+dl9k
YXRhOw0KKyAgICAgICBzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmID0gcGlwZV9maWxlLT5idWY7
DQorICAgICAgIGJvb2wgbm9uYmxvY2tpbmcgPSBmYWxzZTsgLyogVE9ETyBoYW5kbGUgbm9uYmxv
Y2tpbmcgKi8NCisgICAgICAgYm9vbCBkYXRhX2F2YWlsYWJsZSA9IHRydWU7DQorICAgICAgIGlu
dCB1aW9faWR4ID0gMDsNCisNCisgICAgICAgaWYgKCFwaXBlX2ZpbGUtPnJfcmVmY291bnQpIHsN
CisgICAgICAgICAgICAgICAvKiBUT0RPIGJlZm9yZSByZXR1cm5pbmcgdGhlIGVycm9yLCBzZW5k
IGEgU0lHUElQRSBzaWduYWwgKi8NCisgICAgICAgICAgICAgICByZXR1cm4gLUVQSVBFOw0KKyAg
ICAgICB9DQorDQorICAgICAgIHVrX211dGV4X2xvY2soJnBpcGVfYnVmLT53cmxvY2spOw0KKyAg
ICAgICB3aGlsZSAoZGF0YV9hdmFpbGFibGUgJiYgdWlvX2lkeCA8IGJ1Zi0+dWlvX2lvdmNudCkg
ew0KKyAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92ZWMgPSAmYnVmLT51aW9faW92W3Vp
b19pZHhdOw0KKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2ZmID0gMDsNCisNCisgICAg
ICAgICAgICAgICB3aGlsZSAob2ZmIDwgaW92ZWMtPmlvdl9sZW4pIHsNCisgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgd3JpdHRlbl9ieXRlczsNCisNCisgICAgICAgICAgICAg
ICAgICAgICAgIHdyaXR0ZW5fYnl0ZXMgPSBwaXBlX2J1Zl93cml0ZShwaXBlX2J1ZiwgaW92ZWMs
IG9mZik7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JpdHRlbl9ieXRlcyA9PSAwKSB7
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5vIGRhdGEgKi8NCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5vbmJsb2NraW5nKSB7DQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9hdmFpbGFibGUgPSBmYWxzZTsNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvKiBXYWl0IHVudGlsIGRhdGEgYXZhaWxhYmxlICovDQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCFwaXBlX2J1Zl9jYW5fd3JpdGUo
cGlwZV9idWYpKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT53cmxvY2spOw0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWtfd2FpdHFfd2FpdF9ldmVudCgmcGlw
ZV9idWYtPndyd3EsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBpcGVfYnVmX2Nhbl93cml0ZShwaXBlX2J1ZikpOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWtfbXV0ZXhfbG9jaygmcGlwZV9i
dWYtPndybG9jayk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUg
Ynl0ZXMgd3JpdHRlbl9ieXRlcy4gKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnVmLT51aW9fcmVzaWQgLT0gd3JpdHRlbl9ieXRlczsNCisNCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb2ZmICs9IHdyaXR0ZW5fYnl0ZXM7DQorDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qIHdha2Ugc29tZSByZWFkZXJzICovDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHVrX3dhaXRxX3dha2VfdXAoJnBpcGVfYnVmLT5yZHdxKTsNCisgICAgICAg
ICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAg
dWlvX2lkeCsrOw0KKyAgICAgICB9DQorICAgICAgIHVrX211dGV4X3VubG9jaygmcGlwZV9idWYt
PndybG9jayk7DQorDQorICAgICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHBpcGVf
cmVhZChzdHJ1Y3Qgdm5vZGUgKnZub2RlLA0KKyAgICAgICAgICAgICAgIHN0cnVjdCB2ZnNjb3Jl
X2ZpbGUgKnZmc2NvcmVfZmlsZSwNCisgICAgICAgICAgICAgICBzdHJ1Y3QgdWlvICpidWYsIGlu
dCBpb2ZsYWcgX191bnVzZWQpDQorew0KKyAgICAgICBzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2Zp
bGUgPSB2bm9kZS0+dl9kYXRhOw0KKyAgICAgICBzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmID0g
cGlwZV9maWxlLT5idWY7DQorICAgICAgIGJvb2wgbm9uYmxvY2tpbmcgPSAodmZzY29yZV9maWxl
LT5mX2ZsYWdzICYgT19OT05CTE9DSyk7DQorICAgICAgIGJvb2wgZGF0YV9hdmFpbGFibGUgPSB0
cnVlOw0KKyAgICAgICBpbnQgdWlvX2lkeCA9IDA7DQorDQorICAgICAgIHVrX211dGV4X2xvY2so
JnBpcGVfYnVmLT5yZGxvY2spOw0KKyAgICAgICBpZiAobm9uYmxvY2tpbmcgJiYgIXBpcGVfYnVm
X2Nhbl9yZWFkKHBpcGVfYnVmKSkgew0KKyAgICAgICAgICAgICAgIHVrX211dGV4X3VubG9jaygm
cGlwZV9idWYtPnJkbG9jayk7DQorICAgICAgICAgICAgICAgcmV0dXJuIEVBR0FJTjsNCisgICAg
ICAgfQ0KKw0KKyAgICAgICB3aGlsZSAoZGF0YV9hdmFpbGFibGUgJiYgdWlvX2lkeCA8IGJ1Zi0+
dWlvX2lvdmNudCkgew0KKyAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92ZWMgPSAmYnVm
LT51aW9faW92W3Vpb19pZHhdOw0KKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgb2ZmID0g
MDsNCisNCisgICAgICAgICAgICAgICB3aGlsZSAob2ZmIDwgaW92ZWMtPmlvdl9sZW4pIHsNCisg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVhZF9ieXRlczsNCisNCisgICAg
ICAgICAgICAgICAgICAgICAgIHJlYWRfYnl0ZXMgPSBwaXBlX2J1Zl9yZWFkKHBpcGVfYnVmLCBp
b3ZlYywgb2ZmKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2J5dGVzID09IDAp
IHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gZGF0YSAqLw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9uYmxvY2tpbmcpIHsNCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2F2YWlsYWJsZSA9IGZhbHNlOw0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qIFdhaXQgdW50aWwgZGF0YSBhdmFpbGFibGUgKi8NCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXBpcGVfYnVmX2Nhbl9yZWFk
KHBpcGVfYnVmKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsNCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVrX3dhaXRxX3dhaXRfZXZlbnQoJnBp
cGVfYnVmLT5yZHdxLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwaXBlX2J1Zl9jYW5fcmVhZChwaXBlX2J1ZikpOw0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWtfbXV0ZXhfbG9jaygmcGlwZV9i
dWYtPnJkbG9jayk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVcGRhdGUg
Ynl0ZXMgcmVhZCAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYtPnVpb19y
ZXNpZCAtPSByZWFkX2J5dGVzOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
ZmYgKz0gcmVhZF9ieXRlczsNCisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyog
d2FrZSBzb21lIHdyaXRlcnMgKi8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWtf
d2FpdHFfd2FrZV91cCgmcGlwZV9idWYtPndyd3EpOw0KKyAgICAgICAgICAgICAgICAgICAgICAg
fQ0KKyAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICB1aW9faWR4Kys7DQorICAg
ICAgIH0NCisgICAgICAgdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsNCisNCisg
ICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcGlwZV9jbG9zZShzdHJ1Y3Qgdm5v
ZGUgKnZub2RlLA0KKyAgICAgICAgICAgICAgIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVf
ZmlsZSkNCit7DQorICAgICAgIHN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSA9IHZub2RlLT52
X2RhdGE7DQorDQorICAgICAgIFVLX0FTU0VSVCh2ZnNjb3JlX2ZpbGUtPmZfZGVudHJ5LT5kX3Zu
b2RlID09IHZub2RlKTsNCisgICAgICAgVUtfQVNTRVJUKHZub2RlLT52X3JlZmNudCA9PSAxKTsN
CisNCisgICAgICAgaWYgKHZmc2NvcmVfZmlsZS0+Zl9mbGFncyAmIFVLX0ZSRUFEKQ0KKyAgICAg
ICAgICAgICAgIHBpcGVfZmlsZS0+cl9yZWZjb3VudC0tOw0KKw0KKyAgICAgICBpZiAodmZzY29y
ZV9maWxlLT5mX2ZsYWdzICYgVUtfRldSSVRFKQ0KKyAgICAgICAgICAgICAgIHBpcGVfZmlsZS0+
d19yZWZjb3VudC0tOw0KKw0KKyAgICAgICBpZiAoIXBpcGVfZmlsZS0+cl9yZWZjb3VudCAmJiAh
cGlwZV9maWxlLT53X3JlZmNvdW50KQ0KKyAgICAgICAgICAgICAgIHBpcGVfZmlsZV9mcmVlKHBp
cGVfZmlsZSk7DQorDQorICAgICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHBpcGVf
c2VlayhzdHJ1Y3Qgdm5vZGUgKnZub2RlIF9fdW51c2VkLA0KKyAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxlIF9fdW51c2VkLA0KKyAgICAgICAg
ICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmMSBfX3VudXNlZCwgb2ZmX3Qgb2ZmMiBfX3VudXNlZCkN
Cit7DQorICAgICAgIGVycm5vID0gRVNQSVBFOw0KKyAgICAgICByZXR1cm4gLTE7DQorfQ0KKw0K
K3N0YXRpYyBpbnQgcGlwZV9pb2N0bChzdHJ1Y3Qgdm5vZGUgKnZub2RlLA0KKyAgICAgICAgICAg
ICAgIHN0cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZmlsZSBfX3VudXNlZCwNCisgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGNvbSwgdm9pZCAqZGF0YSkNCit7DQorICAgICAgIHN0cnVj
dCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSA9IHZub2RlLT52X2RhdGE7DQorICAgICAgIHN0cnVjdCBw
aXBlX2J1ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUtPmJ1ZjsNCisNCisgICAgICAgc3dpdGNoIChj
b20pIHsNCisgICAgICAgY2FzZSBGSU9OUkVBRDoNCisgICAgICAgICAgICAgICB1a19tdXRleF9s
b2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsNCisgICAgICAgICAgICAgICAqKChpbnQgKikgZGF0YSkg
PSBwaXBlX2J1Zl9nZXRfYXZhaWxhYmxlKHBpcGVfYnVmKTsNCisgICAgICAgICAgICAgICB1a19t
dXRleF91bmxvY2soJnBpcGVfYnVmLT5yZGxvY2spOw0KKyAgICAgICAgICAgICAgIHJldHVybiAw
Ow0KKyAgICAgICBkZWZhdWx0Og0KKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KKyAg
ICAgICB9DQorfQ0KKw0KKyNkZWZpbmUgcGlwZV9vcGVuICAgICAgICAoKHZub3Bfb3Blbl90KSB2
ZnNjb3JlX3ZvcF9laW52YWwpDQorI2RlZmluZSBwaXBlX2ZzeW5jICAgICAgICgodm5vcF9mc3lu
Y190KSB2ZnNjb3JlX3ZvcF9udWxsb3ApDQorI2RlZmluZSBwaXBlX3JlYWRkaXIgICAgICgodm5v
cF9yZWFkZGlyX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCisjZGVmaW5lIHBpcGVfbG9va3VwICAg
ICAgKCh2bm9wX2xvb2t1cF90KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQorI2RlZmluZSBwaXBlX2Ny
ZWF0ZSAgICAgICgodm5vcF9jcmVhdGVfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KKyNkZWZpbmUg
cGlwZV9yZW1vdmUgICAgICAoKHZub3BfcmVtb3ZlX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCisj
ZGVmaW5lIHBpcGVfcmVuYW1lICAgICAgKCh2bm9wX3JlbmFtZV90KSB2ZnNjb3JlX3ZvcF9laW52
YWwpDQorI2RlZmluZSBwaXBlX21rZGlyICAgICAgICgodm5vcF9ta2Rpcl90KSB2ZnNjb3JlX3Zv
cF9laW52YWwpDQorI2RlZmluZSBwaXBlX3JtZGlyICAgICAgICgodm5vcF9ybWRpcl90KSB2ZnNj
b3JlX3ZvcF9laW52YWwpDQorI2RlZmluZSBwaXBlX2dldGF0dHIgICAgICgodm5vcF9nZXRhdHRy
X3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCisjZGVmaW5lIHBpcGVfc2V0YXR0ciAgICAgKCh2bm9w
X3NldGF0dHJfdCkgdmZzY29yZV92b3BfbnVsbG9wKQ0KKyNkZWZpbmUgcGlwZV9pbmFjdGl2ZSAg
ICAoKHZub3BfaW5hY3RpdmVfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KKyNkZWZpbmUgcGlwZV90
cnVuY2F0ZSAgICAoKHZub3BfdHJ1bmNhdGVfdCkgdmZzY29yZV92b3BfbnVsbG9wKQ0KKyNkZWZp
bmUgcGlwZV9saW5rICAgICAgICAoKHZub3BfbGlua190KSB2ZnNjb3JlX3ZvcF9lcGVybSkNCisj
ZGVmaW5lIHBpcGVfY2FjaGUgICAgICAgKCh2bm9wX2NhY2hlX3QpIE5VTEwpDQorI2RlZmluZSBw
aXBlX3JlYWRsaW5rICAgICgodm5vcF9yZWFkbGlua190KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQor
I2RlZmluZSBwaXBlX3N5bWxpbmsgICAgICgodm5vcF9zeW1saW5rX3QpIHZmc2NvcmVfdm9wX2Vw
ZXJtKQ0KKyNkZWZpbmUgcGlwZV9mYWxsb2NhdGUgICAoKHZub3BfZmFsbG9jYXRlX3QpIHZmc2Nv
cmVfdm9wX251bGxvcCkNCisNCitzdGF0aWMgc3RydWN0IHZub3BzIHBpcGVfdm5vcHMgPSB7DQor
ICAgICAgIC52b3Bfb3BlbiAgICAgID0gcGlwZV9vcGVuLA0KKyAgICAgICAudm9wX2Nsb3NlICAg
ICA9IHBpcGVfY2xvc2UsDQorICAgICAgIC52b3BfcmVhZCAgICAgID0gcGlwZV9yZWFkLA0KKyAg
ICAgICAudm9wX3dyaXRlICAgICA9IHBpcGVfd3JpdGUsDQorICAgICAgIC52b3Bfc2VlayAgICAg
ID0gcGlwZV9zZWVrLA0KKyAgICAgICAudm9wX2lvY3RsICAgICA9IHBpcGVfaW9jdGwsDQorICAg
ICAgIC52b3BfZnN5bmMgICAgID0gcGlwZV9mc3luYywNCisgICAgICAgLnZvcF9yZWFkZGlyICAg
PSBwaXBlX3JlYWRkaXIsDQorICAgICAgIC52b3BfbG9va3VwICAgID0gcGlwZV9sb29rdXAsDQor
ICAgICAgIC52b3BfY3JlYXRlICAgID0gcGlwZV9jcmVhdGUsDQorICAgICAgIC52b3BfcmVtb3Zl
ICAgID0gcGlwZV9yZW1vdmUsDQorICAgICAgIC52b3BfcmVuYW1lICAgID0gcGlwZV9yZW5hbWUs
DQorICAgICAgIC52b3BfbWtkaXIgICAgID0gcGlwZV9ta2RpciwNCisgICAgICAgLnZvcF9ybWRp
ciAgICAgPSBwaXBlX3JtZGlyLA0KKyAgICAgICAudm9wX2dldGF0dHIgICA9IHBpcGVfZ2V0YXR0
ciwNCisgICAgICAgLnZvcF9zZXRhdHRyICAgPSBwaXBlX3NldGF0dHIsDQorICAgICAgIC52b3Bf
aW5hY3RpdmUgID0gcGlwZV9pbmFjdGl2ZSwNCisgICAgICAgLnZvcF90cnVuY2F0ZSAgPSBwaXBl
X3RydW5jYXRlLA0KKyAgICAgICAudm9wX2xpbmsgICAgICA9IHBpcGVfbGluaywNCisgICAgICAg
LnZvcF9jYWNoZSAgICAgPSBwaXBlX2NhY2hlLA0KKyAgICAgICAudm9wX2ZhbGxvY2F0ZSA9IHBp
cGVfZmFsbG9jYXRlLA0KKyAgICAgICAudm9wX3JlYWRsaW5rICA9IHBpcGVfcmVhZGxpbmssDQor
ICAgICAgIC52b3Bfc3ltbGluayAgID0gcGlwZV9zeW1saW5rDQorfTsNCisNCisjZGVmaW5lIHBp
cGVfdmdldCAgKCh2ZnNvcF92Z2V0X3QpIHZmc2NvcmVfdm9wX251bGxvcCkNCisNCitzdGF0aWMg
c3RydWN0IHZmc29wcyBwaXBlX3Zmc29wcyA9IHsNCisgICAgICAgLnZmc192Z2V0ID0gcGlwZV92
Z2V0LA0KKyAgICAgICAudmZzX3Zub3BzID0gJnBpcGVfdm5vcHMNCit9Ow0KKw0KK3N0YXRpYyB1
aW50NjRfdCBwX2lub2RlOw0KKw0KKy8qDQorICogQm9ndXMgbW91bnQgcG9pbnQgdXNlZCBieSBh
bGwgc29ja2V0cw0KKyAqLw0KK3N0YXRpYyBzdHJ1Y3QgbW91bnQgcF9tb3VudCA9IHsNCisgICAg
ICAgLm1fb3AgPSAmcGlwZV92ZnNvcHMNCit9Ow0KKw0KK3N0YXRpYyBpbnQgcGlwZV9mZF9hbGxv
YyhzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUsIGludCBmbGFncykNCit7DQorICAgICAgIGlu
dCByZXQgPSAwOw0KKyAgICAgICBpbnQgdmZzX2ZkOw0KKyAgICAgICBzdHJ1Y3QgdmZzY29yZV9m
aWxlICp2ZnNfZmlsZSA9IE5VTEw7DQorICAgICAgIHN0cnVjdCBkZW50cnkgKnBfZGVudHJ5Ow0K
KyAgICAgICBzdHJ1Y3Qgdm5vZGUgKnBfdm5vZGU7DQorDQorICAgICAgIC8qIFJlc2VydmUgZmls
ZSBkZXNjcmlwdG9yIG51bWJlciAqLw0KKyAgICAgICB2ZnNfZmQgPSB2ZnNjb3JlX2FsbG9jX2Zk
KCk7DQorICAgICAgIGlmICh2ZnNfZmQgPCAwKSB7DQorICAgICAgICAgICAgICAgcmV0ID0gLUVO
RklMRTsNCisgICAgICAgICAgICAgICBnb3RvIEVSUl9FWElUOw0KKyAgICAgICB9DQorDQorICAg
ICAgIC8qIEFsbG9jYXRlIGZpbGUsIGRlbnRyeSwgYW5kIHZub2RlICovDQorICAgICAgIHZmc19m
aWxlID0gdWtfY2FsbG9jKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIDEsIHNpemVvZigqdmZzX2Zp
bGUpKTsNCisgICAgICAgaWYgKCF2ZnNfZmlsZSkgew0KKyAgICAgICAgICAgICAgIHJldCA9IC1F
Tk9NRU07DQorICAgICAgICAgICAgICAgZ290byBFUlJfTUFMTE9DX1ZGU19GSUxFOw0KKyAgICAg
ICB9DQorDQorICAgICAgIHJldCA9IHZmc2NvcmVfdmdldCgmcF9tb3VudCwgcF9pbm9kZSsrLCAm
cF92bm9kZSk7DQorICAgICAgIFVLX0FTU0VSVChyZXQgPT0gMCk7IC8qIHdlIHNob3VsZCBub3Qg
ZmluZCBpdCBpbiBjYWNoZSAqLw0KKw0KKyAgICAgICBpZiAoIXBfdm5vZGUpIHsNCisgICAgICAg
ICAgICAgICByZXQgPSAtRU5PTUVNOw0KKyAgICAgICAgICAgICAgIGdvdG8gRVJSX0FMTE9DX1ZO
T0RFOw0KKyAgICAgICB9DQorDQorICAgICAgIHVrX211dGV4X3VubG9jaygmcF92bm9kZS0+dl9s
b2NrKTsNCisNCisgICAgICAgcF9kZW50cnkgPSBkZW50cnlfYWxsb2MoTlVMTCwgcF92bm9kZSwg
Ii8iKTsNCisgICAgICAgaWYgKCFwX2RlbnRyeSkgew0KKyAgICAgICAgICAgICAgIHJldCA9IC1F
Tk9NRU07DQorICAgICAgICAgICAgICAgZ290byBFUlJfQUxMT0NfREVOVFJZOw0KKyAgICAgICB9
DQorDQorICAgICAgIC8qIEZpbGwgb3V0IG5lY2Vzc2FyeSBmaWVsZHMuICovDQorICAgICAgIHZm
c19maWxlLT5mZCA9IHZmc19mZDsNCisgICAgICAgdmZzX2ZpbGUtPmZfZmxhZ3MgPSBmbGFnczsN
CisgICAgICAgdmZzX2ZpbGUtPmZfY291bnQgPSAxOw0KKyAgICAgICB2ZnNfZmlsZS0+Zl9kYXRh
ID0gcGlwZV9maWxlOw0KKyAgICAgICB2ZnNfZmlsZS0+Zl9kZW50cnkgPSBwX2RlbnRyeTsNCisg
ICAgICAgdmZzX2ZpbGUtPmZfdmZzX2ZsYWdzID0gVUtfVkZTQ09SRV9OT1BPUzsNCisNCisgICAg
ICAgcF92bm9kZS0+dl9kYXRhID0gcGlwZV9maWxlOw0KKyAgICAgICBwX3Zub2RlLT52X3R5cGUg
PSBWRklGTzsNCisNCisgICAgICAgLyogQXNzaWduIHRoZSBmaWxlIGRlc2NyaXB0b3JzIHRvIHRo
ZSBjb3JyZXNwb25kaW5nIHZmc19maWxlLiAqLw0KKyAgICAgICByZXQgPSB2ZnNjb3JlX2luc3Rh
bGxfZmQodmZzX2ZkLCB2ZnNfZmlsZSk7DQorICAgICAgIGlmIChyZXQpDQorICAgICAgICAgICAg
ICAgZ290byBFUlJfVkZTX0lOU1RBTEw7DQorDQorICAgICAgIC8qIE9ubHkgdGhlIGRlbnRyeSBz
aG91bGQgaG9sZCBhIHJlZmVyZW5jZTsgcmVsZWFzZSBvdXJzICovDQorICAgICAgIHZyZWxlKHBf
dm5vZGUpOw0KKw0KKyAgICAgICByZXR1cm4gdmZzX2ZkOw0KKw0KK0VSUl9WRlNfSU5TVEFMTDoN
CisgICAgICAgZHJlbGUocF9kZW50cnkpOw0KK0VSUl9BTExPQ19ERU5UUlk6DQorICAgICAgIHZy
ZWxlKHBfdm5vZGUpOw0KK0VSUl9BTExPQ19WTk9ERToNCisgICAgICAgdWtfZnJlZSh1a19hbGxv
Y19nZXRfZGVmYXVsdCgpLCB2ZnNfZmlsZSk7DQorRVJSX01BTExPQ19WRlNfRklMRToNCisgICAg
ICAgdmZzY29yZV9wdXRfZmQodmZzX2ZkKTsNCitFUlJfRVhJVDoNCisgICAgICAgVUtfQVNTRVJU
KHJldCA8IDApOw0KKyAgICAgICByZXR1cm4gcmV0Ow0KK30NCisNCitpbnQgcGlwZShpbnQgcGlw
ZWZkWzJdKQ0KK3sNCisgICAgICAgaW50IHJldCA9IDA7DQorICAgICAgIGludCByX2ZkLCB3X2Zk
Ow0KKyAgICAgICBzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGU7DQorDQorICAgICAgIC8qIEFs
bG9jYXRlIHBpcGUgaW50ZXJuYWwgc3RydWN0dXJlLiAqLw0KKyAgICAgICBwaXBlX2ZpbGUgPSBw
aXBlX2ZpbGVfYWxsb2MoUElQRV9NQVhfU0laRSwgMCk7DQorICAgICAgIGlmICghcGlwZV9maWxl
KSB7DQorICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsNCisgICAgICAgICAgICAgICBnb3Rv
IEVSUl9FWElUOw0KKyAgICAgICB9DQorDQorICAgICAgIHJfZmQgPSBwaXBlX2ZkX2FsbG9jKHBp
cGVfZmlsZSwgVUtfRlJFQUQpOw0KKyAgICAgICBpZiAocl9mZCA8IDApDQorICAgICAgICAgICAg
ICAgZ290byBFUlJfVkZTX0lOU1RBTEw7DQorDQorICAgICAgIHdfZmQgPSBwaXBlX2ZkX2FsbG9j
KHBpcGVfZmlsZSwgVUtfRldSSVRFKTsNCisgICAgICAgaWYgKHdfZmQgPCAwKQ0KKyAgICAgICAg
ICAgICAgIGdvdG8gRVJSX1dfRkQ7DQorDQorICAgICAgIC8qIEZpbGwgcGlwZWZkIGZpZWxkcy4g
Ki8NCisgICAgICAgcGlwZWZkWzBdID0gcl9mZDsNCisgICAgICAgcGlwZWZkWzFdID0gd19mZDsN
CisNCisgICAgICAgcmV0dXJuIHJldDsNCisNCitFUlJfV19GRDoNCisgICAgICAgdmZzY29yZV9w
dXRfZmQocl9mZCk7DQorRVJSX1ZGU19JTlNUQUxMOg0KKyAgICAgICBwaXBlX2ZpbGVfZnJlZShw
aXBlX2ZpbGUpOw0KK0VSUl9FWElUOg0KKyAgICAgICBVS19BU1NFUlQocmV0IDwgMCk7DQorICAg
ICAgIHJldHVybiByZXQ7DQorfQ0KDQo=

--_000_8bcdd07083bfd11fbac43eaa172e609dstudacsupbro_
Content-Type: text/html; charset="utf-8"
Content-ID: <6A60B4D9FA02CD4FA360F06DACBF66EC@eurprd01.prod.exchangelabs.com>
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHRleHQ9IiMwMDAwMDAi
IGJnY29sb3I9IiNGRkZGRkYiPg0KPHA+PGZvbnQgc2l6ZT0iLTEiPkhleSBDb3N0aW4sPC9mb250
PjwvcD4NCjxwPjxmb250IHNpemU9Ii0xIj5JIGhhdmUgdGVzdGVkIHRoZSBpbXBsZW1lbnRhdGlv
biB3aXRoIGEgcHJvZ3JhbSB0aGF0IHdyaXRlcyAzIGRpZmZlcmVudCB2YWx1ZSB0byBhIHBpcGUg
YW5kIHRoZW48L2ZvbnQ+PC9wPg0KPHA+PGZvbnQgc2l6ZT0iLTEiPnJlYWRzIDMgdGltZXMgZnJv
bSB0aGUgcGlwZS4gRm9yIGVhY2ggcmVhZCB3ZSBvbmx5IGdldCB0aGUgbGFzdCB2YWx1ZS4gQWxz
bywgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5PC9mb250PjwvcD4NCjxwPjxmb250IHNpemU9Ii0x
Ij5vdmVyIHN0YWdpbmcgd2l0aG91dCBjb25mbGljdHMuPGJyPg0KPC9mb250PjwvcD4NCjxwPjxm
b250IHNpemU9Ii0xIj48YnI+DQo8L2ZvbnQ+PC9wPg0KPHA+PGZvbnQgc2l6ZT0iLTEiPlBsZWFz
ZSBzZWUgdGhlIHJlc3Qgb2YgdGhlIGNvbW1lbnRzIGlubGluZS48YnI+DQo8L2ZvbnQ+PC9wPg0K
PHA+PGZvbnQgc2l6ZT0iLTEiPlRoYW5rcyw8L2ZvbnQ+PC9wPg0KPHA+PGZvbnQgc2l6ZT0iLTEi
PlZsYWQ8L2ZvbnQ+PGJyPg0KPC9wPg0KPGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAx
My4wOS4yMDE5IDExOjU1LCBDb3N0aW4gTHVwdSB3cm90ZTo8YnI+DQo8L2Rpdj4NCjxibG9ja3F1
b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDoyMDE5MDkxMzA4NTU0Mi41NzYtMS1jb3N0aW4ubHVw
dUBjcy5wdWIucm8iPg0KPHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0iIj5Gcm9tOiBC
b2dkYW4gTGFzY3UgPGEgY2xhc3M9Im1vei10eHQtbGluay1yZmMyMzk2RSIgaHJlZj0ibWFpbHRv
Omxhc2N1LmJvZ2Rhbjk2QGdtYWlsLmNvbSI+Jmx0O2xhc2N1LmJvZ2Rhbjk2QGdtYWlsLmNvbSZn
dDs8L2E+DQoNClRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBhbm9ueW1vdXMgcGlwZXMuIFRo
ZSB1bmRlcmx5aW5nIGJ1ZmZlciBpcyBhIHJpbmcNCmJ1ZmZlciB3aG9zZSBzaXplIG11c3QgYmUg
YSBwb3dlciBvZiAyLiBUaGUgY3JlYXRpbmcgb2YgaXRzIGZpbGUgZGVzY3JpcHRvcnMNCmZvbGxv
d3MgY2xvc2VseSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIHNvY2tldHMgaW4gbHdpcCBnbHVlIGNv
ZGUuDQoNClNpZ25lZC1vZmYtYnk6IEJvZ2RhbiBMYXNjdSA8YSBjbGFzcz0ibW96LXR4dC1saW5r
LXJmYzIzOTZFIiBocmVmPSJtYWlsdG86bGFzY3UuYm9nZGFuOTZAZ21haWwuY29tIj4mbHQ7bGFz
Y3UuYm9nZGFuOTZAZ21haWwuY29tJmd0OzwvYT4NClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1
IDxhIGNsYXNzPSJtb3otdHh0LWxpbmstcmZjMjM5NkUiIGhyZWY9Im1haWx0bzpjb3N0aW4ubHVw
dUBjcy5wdWIucm8iPiZsdDtjb3N0aW4ubHVwdUBjcy5wdWIucm8mZ3Q7PC9hPg0KLS0tDQogbGli
L3Zmc2NvcmUvTWFrZWZpbGUudWsgICB8ICAgMiAmIzQzOw0KIGxpYi92ZnNjb3JlL2V4cG9ydHN5
bXMudWsgfCAgIDEgJiM0MzsNCiBsaWIvdmZzY29yZS9waXBlLmMgICAgICAgIHwgNTcyICYjNDM7
JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYj
NDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQz
OyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0Mzsm
IzQzOyYjNDM7JiM0MzsNCiAzIGZpbGVzIGNoYW5nZWQsIDU3NSBpbnNlcnRpb25zKCYjNDM7KQ0K
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdmZzY29yZS9waXBlLmMNCg0KZGlmZiAtLWdpdCBhL2xp
Yi92ZnNjb3JlL01ha2VmaWxlLnVrIGIvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsNCmluZGV4IDc5
ODc4ZjI2Li5lMzZjOTIxNyAxMDA2NDQNCi0tLSBhL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrDQom
IzQzOyYjNDM7JiM0MzsgYi9saWIvdmZzY29yZS9NYWtlZmlsZS51aw0KQEAgLTE0LDYgJiM0Mzsx
NCw4IEBAIExJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJQlZGU0NPUkVfQkFTRSkvdGFzay5j
DQogTElCVkZTQ09SRV9TUkNTLXkgJiM0Mzs9ICQoTElCVkZTQ09SRV9CQVNFKS9sb29rdXAuYw0K
IExJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJQlZGU0NPUkVfQkFTRSkvZm9wcy5jDQogTElC
VkZTQ09SRV9TUkNTLXkgJiM0Mzs9ICQoTElCVkZTQ09SRV9CQVNFKS9zdWJyX3Vpby5jDQomIzQz
O0xJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJQlZGU0NPUkVfQkFTRSkvcGlwZS5jDQomIzQz
O0xJQlZGU0NPUkVfUElQRV9GTEFHUy15ICYjNDM7PSAtV25vLWNhc3QtZnVuY3Rpb24tdHlwZQ0K
IExJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJQlZGU0NPUkVfQkFTRSkvZXh0cmEubGQNCiAN
CiANCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrIGIvbGliL3Zmc2NvcmUv
ZXhwb3J0c3ltcy51aw0KaW5kZXggZTNkNjcyM2EuLjdmMDJjNjY3IDEwMDY0NA0KLS0tIGEvbGli
L3Zmc2NvcmUvZXhwb3J0c3ltcy51aw0KJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Zmc2NvcmUvZXhw
b3J0c3ltcy51aw0KQEAgLTc5LDMgJiM0Mzs3OSw0IEBAIGRlbnRyeV9hbGxvYw0KIGRyZWxlDQog
dnJlbGUNCiBmY250bA0KJiM0MztwaXBlDQpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvcGlwZS5j
IGIvbGliL3Zmc2NvcmUvcGlwZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAw
MDAuLjI1MmU2NWY3DQotLS0gL2Rldi9udWxsDQomIzQzOyYjNDM7JiM0MzsgYi9saWIvdmZzY29y
ZS9waXBlLmMNCkBAIC0wLDAgJiM0MzsxLDU3MiBAQA0KJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogQlNELTMtQ2xhdXNlICovDQomIzQzOy8qDQomIzQzOyAqIEF1dGhvcnM6IEJvZ2Rh
bi1HZW9yZ2UgTGFzY3UgPGEgY2xhc3M9Im1vei10eHQtbGluay1yZmMyMzk2RSIgaHJlZj0ibWFp
bHRvOmxhc2N1LmJvZ2Rhbjk2QGdtYWlsLmNvbSI+Jmx0O2xhc2N1LmJvZ2Rhbjk2QGdtYWlsLmNv
bSZndDs8L2E+DQomIzQzOyAqICAgICAgICAgIENvc3RpbiBMdXB1IDxhIGNsYXNzPSJtb3otdHh0
LWxpbmstcmZjMjM5NkUiIGhyZWY9Im1haWx0bzpjb3N0aW4ubHVwdUBjcy5wdWIucm8iPiZsdDtj
b3N0aW4ubHVwdUBjcy5wdWIucm8mZ3Q7PC9hPg0KJiM0MzsgKg0KJiM0MzsgKiBDb3B5cmlnaHQg
KGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLg0KJiM0MzsgKg0KJiM0MzsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiYjNDM7ICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
DQomIzQzOyAqIGFyZSBtZXQ6DQomIzQzOyAqDQomIzQzOyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQomIzQzOyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4NCiYjNDM7ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiYjNDM7ICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KJiM0Mzsg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLg0KJiM0MzsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5
cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzDQomIzQzOyAqICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
DQomIzQzOyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uDQomIzQzOyAqDQomIzQzOyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgJnF1b3Q7QVMgSVMmcXVv
dDsNCiYjNDM7ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KJiM0MzsgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0K
JiM0MzsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFDQomIzQzOyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCiYjNDM7ICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YNCiYjNDM7ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQomIzQzOyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
DQomIzQzOyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQomIzQzOyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQomIzQz
OyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KJiM0MzsgKg0KJiM0MzsgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLg0KJiM0Mzsg
Ki8NCiYjNDM7DQomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0Ow0KJiM0MzsjaW5jbHVkZSAm
bHQ7c3RyaW5nLmgmZ3Q7DQomIzQzOyNpbmNsdWRlICZsdDt2ZnNjb3JlL2ZpbGUuaCZndDsNCiYj
NDM7I2luY2x1ZGUgJmx0O3Zmc2NvcmUvZnMuaCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0O3Zmc2Nv
cmUvbW91bnQuaCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0O3Zmc2NvcmUvdm5vZGUuaCZndDsNCiYj
NDM7I2luY2x1ZGUgJmx0O3VrL3dhaXQuaCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0O3N5cy9pb2N0
bC5oJmd0Ow0KJiM0MzsNCiYjNDM7LyogV2UgdXNlIHRoZSBkZWZhdWx0IHNpemUgaW4gTGludXgg
a2VybmVsICovDQomIzQzOyNkZWZpbmUgUElQRV9NQVhfU0laRQkoMSAmbHQ7Jmx0OyAxNik8L3By
ZT4NCjwvYmxvY2txdW90ZT4NCjxwPjxmb250IHNpemU9Ii0xIj5JIHRoaW5rIHRoYXQgd2Ugc2hv
dWxkIHByb3ZpZGUgYSBjb25maWcgb3B0aW9uIGZvciB0aGlzIHZhbHVlIGJlY2F1c2UgYWxsb2Nh
dGluZyA2NEtCIGZvciBlYWNoIHBpcGU8L2ZvbnQ+PC9wPg0KPHA+PGZvbnQgc2l6ZT0iLTEiPmNh
bGwgaXMgcXVpdGUgYSBsb3Qgb2YgbWVtb3J5IGZvciBhIHVuaWtlcm5lbC48YnI+DQo8L2ZvbnQ+
PC9wPg0KPGJsb2NrcXVvdGUgdHlwZT0iY2l0ZSIgY2l0ZT0ibWlkOjIwMTkwOTEzMDg1NTQyLjU3
Ni0xLWNvc3Rpbi5sdXB1QGNzLnB1Yi5ybyI+DQo8cHJlIGNsYXNzPSJtb3otcXVvdGUtcHJlIiB3
cmFwPSIiPiYjNDM7DQomIzQzO3N0cnVjdCBwaXBlX2J1ZiB7DQomIzQzOwkvKiBUaGUgYnVmZmVy
ICovDQomIzQzOwljaGFyICpkYXRhOw0KJiM0MzsJLyogVGhlIGJ1ZmZlciBjYXBhY2l0eSwgYWx3
YXlzIGEgcG93ZXIgb2YgMiAqLw0KJiM0MzsJdW5zaWduZWQgbG9uZyBjYXBhY2l0eTsNCiYjNDM7
CS8qIFByb2R1Y2VyIGluZGV4ICovDQomIzQzOwl1bnNpZ25lZCBsb25nIHByb2Q7DQomIzQzOwkv
KiBDb25zdW1lciBpbmRleCAqLw0KJiM0MzsJdW5zaWduZWQgbG9uZyBjb25zOw0KJiM0MzsNCiYj
NDM7CS8qIFJlYWQgbG9jayAqLw0KJiM0MzsJc3RydWN0IHVrX211dGV4IHJkbG9jazsNCiYjNDM7
CS8qIFdyaXRlIGxvY2sgKi8NCiYjNDM7CXN0cnVjdCB1a19tdXRleCB3cmxvY2s7DQomIzQzOw0K
JiM0MzsJLyogUmVhZGVycyBxdWV1ZSAqLw0KJiM0MzsJc3RydWN0IHVrX3dhaXRxIHJkd3E7DQom
IzQzOwkvKiBXcml0ZXJzIHF1ZXVlICovDQomIzQzOwlzdHJ1Y3QgdWtfd2FpdHEgd3J3cTsNCiYj
NDM7fTsNCiYjNDM7DQomIzQzOyNkZWZpbmUgUElQRV9CVUZfSURYKGJ1ZiwgbikgICAgKChidWYp
LSZndDtjYXBhY2l0eSAmYW1wOyAobikpDQomIzQzOyNkZWZpbmUgUElQRV9CVUZfUFJPRF9JRFgo
YnVmKSAgUElQRV9CVUZfSURYKChidWYpLCAoYnVmKS0mZ3Q7cHJvZCkNCiYjNDM7I2RlZmluZSBQ
SVBFX0JVRl9DT05TX0lEWChidWYpICBQSVBFX0JVRl9JRFgoKGJ1ZiksIChidWYpLSZndDtjb25z
KQ0KJiM0MzsNCiYjNDM7c3RydWN0IHBpcGVfZmlsZSB7DQomIzQzOwkvKiBQaXBlIGJ1ZmZlciAq
Lw0KJiM0MzsJc3RydWN0IHBpcGVfYnVmICpidWY7DQomIzQzOwkvKiBXcml0ZSByZWZlcmVuY2Ug
Y291bnQgKi8NCiYjNDM7CWludCB3X3JlZmNvdW50Ow0KJiM0MzsJLyogUmVhZCByZWZlcmVuY2Ug
Y291bnQgKi8NCiYjNDM7CWludCByX3JlZmNvdW50Ow0KJiM0MzsJLyogRmxhZ3MgKi8NCiYjNDM7
CWludCBmbGFnczsNCiYjNDM7fTsNCiYjNDM7DQomIzQzOw0KJiM0MztzdGF0aWMgc3RydWN0IHBp
cGVfYnVmICpwaXBlX2J1Zl9hbGxvYyhpbnQgY2FwYWNpdHkpDQomIzQzO3sNCiYjNDM7CXN0cnVj
dCBwaXBlX2J1ZiAqcGlwZV9idWY7DQomIzQzOw0KJiM0MzsJVUtfQVNTRVJUKFBPV0VSX09GXzIo
Y2FwYWNpdHkpKTsNCiYjNDM7DQomIzQzOwlwaXBlX2J1ZiA9IHVrX21hbGxvYyh1a19hbGxvY19n
ZXRfZGVmYXVsdCgpLCBzaXplb2YoKnBpcGVfYnVmKSk7DQomIzQzOwlpZiAoIXBpcGVfYnVmKQ0K
JiM0MzsJCXJldHVybiBOVUxMOw0KJiM0MzsNCiYjNDM7CXBpcGVfYnVmLSZndDtkYXRhID0gdWtf
bWFsbG9jKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGNhcGFjaXR5KTsNCiYjNDM7CWlmICghcGlw
ZV9idWYtJmd0O2RhdGEpIHsNCiYjNDM7CQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCks
IHBpcGVfYnVmKTsNCiYjNDM7CQlyZXR1cm4gTlVMTDsNCiYjNDM7CX0NCiYjNDM7DQomIzQzOwlw
aXBlX2J1Zi0mZ3Q7Y2FwYWNpdHkgPSBjYXBhY2l0eTsNCiYjNDM7CXBpcGVfYnVmLSZndDtjb25z
ID0gMDsNCiYjNDM7CXBpcGVfYnVmLSZndDtwcm9kID0gMDsNCiYjNDM7CXVrX211dGV4X2luaXQo
JmFtcDtwaXBlX2J1Zi0mZ3Q7cmRsb2NrKTsNCiYjNDM7CXVrX211dGV4X2luaXQoJmFtcDtwaXBl
X2J1Zi0mZ3Q7d3Jsb2NrKTsNCiYjNDM7CXVrX3dhaXRxX2luaXQoJmFtcDtwaXBlX2J1Zi0mZ3Q7
cmR3cSk7DQomIzQzOwl1a193YWl0cV9pbml0KCZhbXA7cGlwZV9idWYtJmd0O3dyd3EpOw0KJiM0
MzsNCiYjNDM7CXJldHVybiBwaXBlX2J1ZjsNCiYjNDM7fQ0KJiM0MzsNCiYjNDM7dm9pZCBwaXBl
X2J1Zl9mcmVlKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQomIzQzO3sNCiYjNDM7CXVrX2Zy
ZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgcGlwZV9idWYtJmd0O2RhdGEpOzwvcHJlPg0KPC9i
bG9ja3F1b3RlPg0KPHA+PGZvbnQgc2l6ZT0iLTEiPnZmc2NvcmUgZG9lcyBub3QgdXNlIHVrX2Zy
ZWUgZGlyZWN0bHkgYnV0IHRocm91Z2ggdGhlIGZyZWUgY2FsbC4gUGVyaGFwcyB3ZSBzaG91bGQg
Zm9sbG93IHRoZSBzYW1lIGFwcHJvYWNoLjxicj4NCjwvZm9udD48L3A+DQo8cD48Zm9udCBzaXpl
PSItMSI+VGhlIHNhbWUgY29tbWVudCBhcHBsaWVzIGZvciB1a19tYWxsb2MuPC9mb250PjwvcD4N
CjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDoyMDE5MDkxMzA4NTU0Mi41NzYtMS1j
b3N0aW4ubHVwdUBjcy5wdWIucm8iPg0KPHByZSBjbGFzcz0ibW96LXF1b3RlLXByZSIgd3JhcD0i
Ij4NCiYjNDM7CXVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgcGlwZV9idWYpOw0KJiM0
Mzt9DQomIzQzOw0KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9nZXRfYXZhaWxh
YmxlKGNvbnN0IHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQomIzQzO3sNCiYjNDM7CXJldHVy
biBwaXBlX2J1Zi0mZ3Q7cHJvZCAtIHBpcGVfYnVmLSZndDtjb25zOw0KJiM0Mzt9DQomIzQzOw0K
JiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShzdHJ1Y3Qg
cGlwZV9idWYgKnBpcGVfYnVmKQ0KJiM0Mzt7DQomIzQzOwlyZXR1cm4gcGlwZV9idWYtJmd0O2Nh
cGFjaXR5IC0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7DQomIzQzO30NCiYjNDM7
DQomIzQzO3N0YXRpYyBpbnQgcGlwZV9idWZfY2FuX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAqcGlw
ZV9idWYpDQomIzQzO3sNCiYjNDM7CXJldHVybiBwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShwaXBl
X2J1ZikgJmd0OyAwOw0KJiM0Mzt9DQomIzQzOw0KJiM0MztzdGF0aWMgaW50IHBpcGVfYnVmX2Nh
bl9yZWFkKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQomIzQzO3sNCiYjNDM7CXJldHVybiBw
aXBlX2J1Zl9nZXRfYXZhaWxhYmxlKHBpcGVfYnVmKSAmZ3Q7IDA7DQomIzQzO30NCiYjNDM7DQom
IzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBpcGVfYnVmX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAq
cGlwZV9idWYsDQomIzQzOwkJc3RydWN0IGlvdmVjICppb3ZlYywgc2l6ZV90IGlvdmVjX29mZikN
CiYjNDM7ew0KJiM0MzsJdW5zaWduZWQgbG9uZyBwcm9kX2lkeCwgdG9fd3JpdGU7DQomIzQzOwl2
b2lkICppb3ZlY19kYXRhID0gaW92ZWMtJmd0O2lvdl9iYXNlICYjNDM7IGlvdmVjX29mZjsNCiYj
NDM7CXNpemVfdCBpb3ZfbGVuID0gaW92ZWMtJmd0O2lvdl9sZW4gLSBpb3ZlY19vZmY7DQomIzQz
Ow0KJiM0MzsJcHJvZF9pZHggPSBQSVBFX0JVRl9QUk9EX0lEWChwaXBlX2J1Zik7DQomIzQzOwl0
b193cml0ZSA9IE1JTihwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShwaXBlX2J1ZiksIGlvdl9sZW4p
Ow0KJiM0MzsJaWYgKHRvX3dyaXRlID09IDApDQomIzQzOwkJZ290byBvdXQ7DQomIzQzOw0KJiM0
MzsJLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCiYjNDM7CWlmIChwcm9kX2lkeCAmIzQzOyB0b193
cml0ZSAmbHQ7PSBwaXBlX2J1Zi0mZ3Q7Y2FwYWNpdHkpDQomIzQzOwkJbWVtY3B5KHBpcGVfYnVm
LSZndDtkYXRhICYjNDM7IHByb2RfaWR4LCBpb3ZlY19kYXRhLCB0b193cml0ZSk7DQomIzQzOw0K
JiM0MzsJZWxzZSB7DQomIzQzOwkJaW50IGZpcnN0X2NvcHlfYnl0ZXMsIHNlY29uZF9jb3B5X2J5
dGVzOw0KJiM0MzsNCiYjNDM7CQkvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0ICovDQomIzQzOwkJZmly
c3RfY29weV9ieXRlcyA9IHBpcGVfYnVmLSZndDtjYXBhY2l0eSAtIHByb2RfaWR4Ow0KJiM0MzsJ
CW1lbWNweShwaXBlX2J1Zi0mZ3Q7ZGF0YSAmIzQzOyBwcm9kX2lkeCwNCiYjNDM7CQkJCWlvdmVj
X2RhdGEsDQomIzQzOwkJCQlmaXJzdF9jb3B5X2J5dGVzKTsNCiYjNDM7DQomIzQzOwkJLyogQ29w
eSB0aGUgc2Vjb25kIHBhcnQgKi8NCiYjNDM7CQlzZWNvbmRfY29weV9ieXRlcyA9IHByb2RfaWR4
ICYjNDM7IHRvX3dyaXRlIC0gcGlwZV9idWYtJmd0O2NhcGFjaXR5Ow0KJiM0MzsJCW1lbWNweShw
aXBlX2J1Zi0mZ3Q7ZGF0YSwNCiYjNDM7CQkJCWlvdmVjX2RhdGEgJiM0MzsgZmlyc3RfY29weV9i
eXRlcywNCiYjNDM7CQkJCXNlY29uZF9jb3B5X2J5dGVzKTsNCiYjNDM7CX0NCiYjNDM7DQomIzQz
OwkvKiBVcGRhdGUgcHJvZHVjZXIgKi8NCiYjNDM7CXBpcGVfYnVmLSZndDtwcm9kICYjNDM7PSB0
b193cml0ZTsNCiYjNDM7DQomIzQzO291dDoNCiYjNDM7CXJldHVybiB0b193cml0ZTsNCiYjNDM7
fQ0KJiM0MzsNCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfcmVhZChzdHJ1Y3Qg
cGlwZV9idWYgKnBpcGVfYnVmLA0KJiM0MzsJCXN0cnVjdCBpb3ZlYyAqaW92ZWMsIHNpemVfdCBp
b3ZlY19vZmYpDQomIzQzO3sNCiYjNDM7CXVuc2lnbmVkIGxvbmcgY29uc19pZHgsIHRvX3JlYWQ7
DQomIzQzOwl2b2lkICppb3ZlY19kYXRhID0gaW92ZWMtJmd0O2lvdl9iYXNlICYjNDM7IGlvdmVj
X29mZjsNCiYjNDM7CXNpemVfdCBpb3ZfbGVuID0gaW92ZWMtJmd0O2lvdl9sZW4gLSBpb3ZlY19v
ZmY7DQomIzQzOw0KJiM0MzsJY29uc19pZHggPSBQSVBFX0JVRl9DT05TX0lEWChwaXBlX2J1Zik7
DQomIzQzOwl0b19yZWFkID0gTUlOKHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9idWYpLCBp
b3ZfbGVuKTsNCiYjNDM7CWlmICh0b19yZWFkID09IDApDQomIzQzOwkJZ290byBvdXQ7DQomIzQz
Ow0KJiM0MzsJLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCiYjNDM7CWlmIChjb25zX2lkeCAmIzQz
OyB0b19yZWFkICZsdDs9IHBpcGVfYnVmLSZndDtjYXBhY2l0eSkNCiYjNDM7CQltZW1jcHkoaW92
ZWNfZGF0YSwgcGlwZV9idWYtJmd0O2RhdGEgJiM0MzsgY29uc19pZHgsIHRvX3JlYWQpOw0KJiM0
MzsNCiYjNDM7CWVsc2Ugew0KJiM0MzsJCWludCBmaXJzdF9jb3B5X2J5dGVzOw0KJiM0MzsJCWlu
dCBzZWNvbmRfY29weV9ieXRlczsNCiYjNDM7DQomIzQzOwkJLyogQ29weSB0aGUgZmlyc3QgcGFy
dCAqLw0KJiM0MzsJCWZpcnN0X2NvcHlfYnl0ZXMgPSBwaXBlX2J1Zi0mZ3Q7Y2FwYWNpdHkgLSBw
aXBlX2J1Zi0mZ3Q7Y29uczsNCiYjNDM7CQltZW1jcHkoaW92ZWNfZGF0YSwNCiYjNDM7CQkJCXBp
cGVfYnVmLSZndDtkYXRhICYjNDM7IGNvbnNfaWR4LA0KJiM0MzsJCQkJZmlyc3RfY29weV9ieXRl
cyk7DQomIzQzOw0KJiM0MzsJCS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0ICovDQomIzQzOwkJc2Vj
b25kX2NvcHlfYnl0ZXMgPSBjb25zX2lkeCAmIzQzOyB0b19yZWFkIC0gcGlwZV9idWYtJmd0O2Nh
cGFjaXR5Ow0KJiM0MzsJCW1lbWNweShpb3ZlY19kYXRhICYjNDM7IGZpcnN0X2NvcHlfYnl0ZXMs
DQomIzQzOwkJCQlwaXBlX2J1Zi0mZ3Q7ZGF0YSwNCiYjNDM7CQkJCXNlY29uZF9jb3B5X2J5dGVz
KTsNCiYjNDM7CX0NCiYjNDM7DQomIzQzOwkvKiBVcGRhdGUgY29uc3VtZXIgKi8NCiYjNDM7CXBp
cGVfYnVmLSZndDtjb25zICYjNDM7PSB0b19yZWFkOw0KJiM0MzsNCiYjNDM7b3V0Og0KJiM0MzsJ
cmV0dXJuIHRvX3JlYWQ7DQomIzQzO30NCiYjNDM7DQomIzQzO3N0cnVjdCBwaXBlX2ZpbGUgKnBp
cGVfZmlsZV9hbGxvYyhpbnQgY2FwYWNpdHksIGludCBmbGFncykNCiYjNDM7ew0KJiM0MzsJc3Ry
dWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlOw0KJiM0MzsNCiYjNDM7CXBpcGVfZmlsZSA9IHVrX21h
bGxvYyh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCBzaXplb2YoKnBpcGVfZmlsZSkpOw0KJiM0MzsJ
aWYgKCFwaXBlX2ZpbGUpDQomIzQzOwkJcmV0dXJuIE5VTEw7DQomIzQzOw0KJiM0MzsJcGlwZV9m
aWxlLSZndDtidWYgPSBwaXBlX2J1Zl9hbGxvYyhjYXBhY2l0eSk7DQomIzQzOwlpZiAoIXBpcGVf
ZmlsZS0mZ3Q7YnVmKSB7DQomIzQzOwkJdWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCBw
aXBlX2ZpbGUpOw0KJiM0MzsJCXJldHVybiBOVUxMOw0KJiM0MzsJfQ0KJiM0MzsNCiYjNDM7CXBp
cGVfZmlsZS0mZ3Q7d19yZWZjb3VudCA9IDE7DQomIzQzOwlwaXBlX2ZpbGUtJmd0O3JfcmVmY291
bnQgPSAxOw0KJiM0MzsJcGlwZV9maWxlLSZndDtmbGFncyA9IGZsYWdzOw0KJiM0MzsNCiYjNDM7
CXJldHVybiBwaXBlX2ZpbGU7DQomIzQzO30NCiYjNDM7DQomIzQzO3ZvaWQgcGlwZV9maWxlX2Zy
ZWUoc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlKQ0KJiM0Mzt7DQomIzQzOwlwaXBlX2J1Zl9m
cmVlKHBpcGVfZmlsZS0mZ3Q7YnVmKTsNCiYjNDM7CXVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1
bHQoKSwgcGlwZV9maWxlKTsNCiYjNDM7fQ0KJiM0MzsNCiYjNDM7c3RhdGljIGludCBwaXBlX3dy
aXRlKHN0cnVjdCB2bm9kZSAqdm5vZGUsDQomIzQzOwkJc3RydWN0IHVpbyAqYnVmLCBpbnQgaW9m
bGFnIF9fdW51c2VkKQ0KJiM0Mzt7DQomIzQzOwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUg
PSB2bm9kZS0mZ3Q7dl9kYXRhOw0KJiM0MzsJc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZiA9IHBp
cGVfZmlsZS0mZ3Q7YnVmOw0KJiM0MzsJYm9vbCBub25ibG9ja2luZyA9IGZhbHNlOyAvKiBUT0RP
IGhhbmRsZSBub25ibG9ja2luZyAqLw0KJiM0MzsJYm9vbCBkYXRhX2F2YWlsYWJsZSA9IHRydWU7
DQomIzQzOwlpbnQgdWlvX2lkeCA9IDA7DQomIzQzOw0KJiM0MzsJaWYgKCFwaXBlX2ZpbGUtJmd0
O3JfcmVmY291bnQpIHsNCiYjNDM7CQkvKiBUT0RPIGJlZm9yZSByZXR1cm5pbmcgdGhlIGVycm9y
LCBzZW5kIGEgU0lHUElQRSBzaWduYWwgKi8NCiYjNDM7CQlyZXR1cm4gLUVQSVBFOw0KJiM0MzsJ
fQ0KJiM0MzsNCiYjNDM7CXVrX211dGV4X2xvY2soJmFtcDtwaXBlX2J1Zi0mZ3Q7d3Jsb2NrKTsN
CiYjNDM7CXdoaWxlIChkYXRhX2F2YWlsYWJsZSAmYW1wOyZhbXA7IHVpb19pZHggJmx0OyBidWYt
Jmd0O3Vpb19pb3ZjbnQpIHsNCiYjNDM7CQlzdHJ1Y3QgaW92ZWMgKmlvdmVjID0gJmFtcDtidWYt
Jmd0O3Vpb19pb3ZbdWlvX2lkeF07DQomIzQzOwkJdW5zaWduZWQgbG9uZyBvZmYgPSAwOw0KJiM0
MzsNCiYjNDM7CQl3aGlsZSAob2ZmICZsdDsgaW92ZWMtJmd0O2lvdl9sZW4pIHsNCiYjNDM7CQkJ
dW5zaWduZWQgbG9uZyB3cml0dGVuX2J5dGVzOw0KJiM0MzsNCiYjNDM7CQkJd3JpdHRlbl9ieXRl
cyA9IHBpcGVfYnVmX3dyaXRlKHBpcGVfYnVmLCBpb3ZlYywgb2ZmKTsNCiYjNDM7CQkJaWYgKHdy
aXR0ZW5fYnl0ZXMgPT0gMCkgew0KJiM0MzsJCQkJLyogTm8gZGF0YSAqLw0KJiM0MzsJCQkJaWYg
KG5vbmJsb2NraW5nKSB7DQomIzQzOwkJCQkJZGF0YV9hdmFpbGFibGUgPSBmYWxzZTsNCiYjNDM7
CQkJCQlicmVhazsNCiYjNDM7DQomIzQzOwkJCQl9IGVsc2Ugew0KJiM0MzsJCQkJCS8qIFdhaXQg
dW50aWwgZGF0YSBhdmFpbGFibGUgKi8NCiYjNDM7CQkJCQl3aGlsZSAoIXBpcGVfYnVmX2Nhbl93
cml0ZShwaXBlX2J1ZikpIHsNCiYjNDM7CQkJCQkJdWtfbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZV9i
dWYtJmd0O3dybG9jayk7DQomIzQzOwkJCQkJCXVrX3dhaXRxX3dhaXRfZXZlbnQoJmFtcDtwaXBl
X2J1Zi0mZ3Q7d3J3cSwNCiYjNDM7CQkJCQkJCXBpcGVfYnVmX2Nhbl93cml0ZShwaXBlX2J1Zikp
Ow0KJiM0MzsJCQkJCQl1a19tdXRleF9sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3dybG9jayk7DQom
IzQzOwkJCQkJfQ0KJiM0MzsJCQkJfQ0KJiM0MzsNCiYjNDM7CQkJfSBlbHNlIHsNCiYjNDM7CQkJ
CS8qIFVwZGF0ZSBieXRlcyB3cml0dGVuX2J5dGVzLiAqLw0KJiM0MzsJCQkJYnVmLSZndDt1aW9f
cmVzaWQgLT0gd3JpdHRlbl9ieXRlczsNCiYjNDM7DQomIzQzOwkJCQlvZmYgJiM0Mzs9IHdyaXR0
ZW5fYnl0ZXM7DQomIzQzOw0KJiM0MzsJCQkJLyogd2FrZSBzb21lIHJlYWRlcnMgKi8NCiYjNDM7
CQkJCXVrX3dhaXRxX3dha2VfdXAoJmFtcDtwaXBlX2J1Zi0mZ3Q7cmR3cSk7DQomIzQzOwkJCX0N
CiYjNDM7CQl9DQomIzQzOw0KJiM0MzsJCXVpb19pZHgmIzQzOyYjNDM7Ow0KJiM0MzsJfQ0KJiM0
MzsJdWtfbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3dybG9jayk7DQomIzQzOw0KJiM0
MzsJcmV0dXJuIDA7DQomIzQzO30NCiYjNDM7DQomIzQzO3N0YXRpYyBpbnQgcGlwZV9yZWFkKHN0
cnVjdCB2bm9kZSAqdm5vZGUsDQomIzQzOwkJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9m
aWxlLA0KJiM0MzsJCXN0cnVjdCB1aW8gKmJ1ZiwgaW50IGlvZmxhZyBfX3VudXNlZCkNCiYjNDM7
ew0KJiM0MzsJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlID0gdm5vZGUtJmd0O3ZfZGF0YTsN
CiYjNDM7CXN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUtJmd0O2J1ZjsNCiYj
NDM7CWJvb2wgbm9uYmxvY2tpbmcgPSAodmZzY29yZV9maWxlLSZndDtmX2ZsYWdzICZhbXA7IE9f
Tk9OQkxPQ0spOw0KJiM0MzsJYm9vbCBkYXRhX2F2YWlsYWJsZSA9IHRydWU7DQomIzQzOwlpbnQg
dWlvX2lkeCA9IDA7DQomIzQzOw0KJiM0MzsJdWtfbXV0ZXhfbG9jaygmYW1wO3BpcGVfYnVmLSZn
dDtyZGxvY2spOw0KJiM0MzsJaWYgKG5vbmJsb2NraW5nICZhbXA7JmFtcDsgIXBpcGVfYnVmX2Nh
bl9yZWFkKHBpcGVfYnVmKSkgew0KJiM0MzsJCXVrX211dGV4X3VubG9jaygmYW1wO3BpcGVfYnVm
LSZndDtyZGxvY2spOw0KJiM0MzsJCXJldHVybiBFQUdBSU47DQomIzQzOwl9DQomIzQzOw0KJiM0
MzsJd2hpbGUgKGRhdGFfYXZhaWxhYmxlICZhbXA7JmFtcDsgdWlvX2lkeCAmbHQ7IGJ1Zi0mZ3Q7
dWlvX2lvdmNudCkgew0KJiM0MzsJCXN0cnVjdCBpb3ZlYyAqaW92ZWMgPSAmYW1wO2J1Zi0mZ3Q7
dWlvX2lvdlt1aW9faWR4XTsNCiYjNDM7CQl1bnNpZ25lZCBsb25nIG9mZiA9IDA7DQomIzQzOw0K
JiM0MzsJCXdoaWxlIChvZmYgJmx0OyBpb3ZlYy0mZ3Q7aW92X2xlbikgew0KJiM0MzsJCQl1bnNp
Z25lZCBsb25nIHJlYWRfYnl0ZXM7DQomIzQzOw0KJiM0MzsJCQlyZWFkX2J5dGVzID0gcGlwZV9i
dWZfcmVhZChwaXBlX2J1ZiwgaW92ZWMsIG9mZik7DQomIzQzOwkJCWlmIChyZWFkX2J5dGVzID09
IDApIHsNCiYjNDM7CQkJCS8qIE5vIGRhdGEgKi8NCiYjNDM7CQkJCWlmIChub25ibG9ja2luZykg
ew0KJiM0MzsJCQkJCWRhdGFfYXZhaWxhYmxlID0gZmFsc2U7DQomIzQzOwkJCQkJYnJlYWs7DQom
IzQzOw0KJiM0MzsJCQkJfSBlbHNlIHsNCiYjNDM7CQkJCQkvKiBXYWl0IHVudGlsIGRhdGEgYXZh
aWxhYmxlICovDQomIzQzOwkJCQkJd2hpbGUgKCFwaXBlX2J1Zl9jYW5fcmVhZChwaXBlX2J1Zikp
IHsNCiYjNDM7CQkJCQkJdWtfbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3JkbG9jayk7
DQomIzQzOwkJCQkJCXVrX3dhaXRxX3dhaXRfZXZlbnQoJmFtcDtwaXBlX2J1Zi0mZ3Q7cmR3cSwN
CiYjNDM7CQkJCQkJCXBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVfYnVmKSk7DQomIzQzOwkJCQkJCXVr
X211dGV4X2xvY2soJmFtcDtwaXBlX2J1Zi0mZ3Q7cmRsb2NrKTsNCiYjNDM7CQkJCQl9DQomIzQz
OwkJCQl9DQomIzQzOw0KJiM0MzsJCQl9IGVsc2Ugew0KJiM0MzsJCQkJLyogVXBkYXRlIGJ5dGVz
IHJlYWQgKi8NCiYjNDM7CQkJCWJ1Zi0mZ3Q7dWlvX3Jlc2lkIC09IHJlYWRfYnl0ZXM7DQomIzQz
Ow0KJiM0MzsJCQkJb2ZmICYjNDM7PSByZWFkX2J5dGVzOw0KJiM0MzsNCiYjNDM7CQkJCS8qIHdh
a2Ugc29tZSB3cml0ZXJzICovDQomIzQzOwkJCQl1a193YWl0cV93YWtlX3VwKCZhbXA7cGlwZV9i
dWYtJmd0O3dyd3EpOw0KJiM0MzsJCQl9DQomIzQzOwkJfQ0KJiM0MzsNCiYjNDM7CQl1aW9faWR4
JiM0MzsmIzQzOzsNCiYjNDM7CX0NCiYjNDM7CXVrX211dGV4X3VubG9jaygmYW1wO3BpcGVfYnVm
LSZndDtyZGxvY2spOw0KJiM0MzsNCiYjNDM7CXJldHVybiAwOw0KJiM0Mzt9DQomIzQzOw0KJiM0
MztzdGF0aWMgaW50IHBpcGVfY2xvc2Uoc3RydWN0IHZub2RlICp2bm9kZSwNCiYjNDM7CQlzdHJ1
Y3QgdmZzY29yZV9maWxlICp2ZnNjb3JlX2ZpbGUpDQomIzQzO3sNCiYjNDM7CXN0cnVjdCBwaXBl
X2ZpbGUgKnBpcGVfZmlsZSA9IHZub2RlLSZndDt2X2RhdGE7DQomIzQzOw0KJiM0MzsJVUtfQVNT
RVJUKHZmc2NvcmVfZmlsZS0mZ3Q7Zl9kZW50cnktJmd0O2Rfdm5vZGUgPT0gdm5vZGUpOw0KJiM0
MzsJVUtfQVNTRVJUKHZub2RlLSZndDt2X3JlZmNudCA9PSAxKTsNCiYjNDM7DQomIzQzOwlpZiAo
dmZzY29yZV9maWxlLSZndDtmX2ZsYWdzICZhbXA7IFVLX0ZSRUFEKQ0KJiM0MzsJCXBpcGVfZmls
ZS0mZ3Q7cl9yZWZjb3VudC0tOw0KJiM0MzsNCiYjNDM7CWlmICh2ZnNjb3JlX2ZpbGUtJmd0O2Zf
ZmxhZ3MgJmFtcDsgVUtfRldSSVRFKQ0KJiM0MzsJCXBpcGVfZmlsZS0mZ3Q7d19yZWZjb3VudC0t
Ow0KJiM0MzsNCiYjNDM7CWlmICghcGlwZV9maWxlLSZndDtyX3JlZmNvdW50ICZhbXA7JmFtcDsg
IXBpcGVfZmlsZS0mZ3Q7d19yZWZjb3VudCkNCiYjNDM7CQlwaXBlX2ZpbGVfZnJlZShwaXBlX2Zp
bGUpOw0KJiM0MzsNCiYjNDM7CXJldHVybiAwOw0KJiM0Mzt9DQomIzQzOw0KJiM0MztzdGF0aWMg
aW50IHBpcGVfc2VlayhzdHJ1Y3Qgdm5vZGUgKnZub2RlIF9fdW51c2VkLA0KJiM0MzsJCQlzdHJ1
Y3QgdmZzY29yZV9maWxlICp2ZnNjb3JlX2ZpbGUgX191bnVzZWQsDQomIzQzOwkJCW9mZl90IG9m
ZjEgX191bnVzZWQsIG9mZl90IG9mZjIgX191bnVzZWQpDQomIzQzO3sNCiYjNDM7CWVycm5vID0g
RVNQSVBFOw0KJiM0MzsJcmV0dXJuIC0xOw0KJiM0Mzt9DQomIzQzOw0KJiM0MztzdGF0aWMgaW50
IHBpcGVfaW9jdGwoc3RydWN0IHZub2RlICp2bm9kZSwNCiYjNDM7CQlzdHJ1Y3QgdmZzY29yZV9m
aWxlICp2ZnNjb3JlX2ZpbGUgX191bnVzZWQsDQomIzQzOwkJdW5zaWduZWQgbG9uZyBjb20sIHZv
aWQgKmRhdGEpDQomIzQzO3sNCiYjNDM7CXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSA9IHZu
b2RlLSZndDt2X2RhdGE7DQomIzQzOwlzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmID0gcGlwZV9m
aWxlLSZndDtidWY7DQomIzQzOw0KJiM0MzsJc3dpdGNoIChjb20pIHsNCiYjNDM7CWNhc2UgRklP
TlJFQUQ6DQomIzQzOwkJdWtfbXV0ZXhfbG9jaygmYW1wO3BpcGVfYnVmLSZndDtyZGxvY2spOw0K
JiM0MzsJCSooKGludCAqKSBkYXRhKSA9IHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9idWYp
Ow0KJiM0MzsJCXVrX211dGV4X3VubG9jaygmYW1wO3BpcGVfYnVmLSZndDtyZGxvY2spOw0KJiM0
MzsJCXJldHVybiAwOw0KJiM0MzsJZGVmYXVsdDoNCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsNCiYj
NDM7CX0NCiYjNDM7fQ0KJiM0MzsNCiYjNDM7I2RlZmluZSBwaXBlX29wZW4gICAgICAgICgodm5v
cF9vcGVuX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCiYjNDM7I2RlZmluZSBwaXBlX2ZzeW5jICAg
ICAgICgodm5vcF9mc3luY190KSB2ZnNjb3JlX3ZvcF9udWxsb3ApDQomIzQzOyNkZWZpbmUgcGlw
ZV9yZWFkZGlyICAgICAoKHZub3BfcmVhZGRpcl90KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQomIzQz
OyNkZWZpbmUgcGlwZV9sb29rdXAgICAgICAoKHZub3BfbG9va3VwX3QpIHZmc2NvcmVfdm9wX2Vp
bnZhbCkNCiYjNDM7I2RlZmluZSBwaXBlX2NyZWF0ZSAgICAgICgodm5vcF9jcmVhdGVfdCkgdmZz
Y29yZV92b3BfZWludmFsKQ0KJiM0MzsjZGVmaW5lIHBpcGVfcmVtb3ZlICAgICAgKCh2bm9wX3Jl
bW92ZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQomIzQzOyNkZWZpbmUgcGlwZV9yZW5hbWUgICAg
ICAoKHZub3BfcmVuYW1lX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCiYjNDM7I2RlZmluZSBwaXBl
X21rZGlyICAgICAgICgodm5vcF9ta2Rpcl90KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQomIzQzOyNk
ZWZpbmUgcGlwZV9ybWRpciAgICAgICAoKHZub3Bfcm1kaXJfdCkgdmZzY29yZV92b3BfZWludmFs
KQ0KJiM0MzsjZGVmaW5lIHBpcGVfZ2V0YXR0ciAgICAgKCh2bm9wX2dldGF0dHJfdCkgdmZzY29y
ZV92b3BfZWludmFsKQ0KJiM0MzsjZGVmaW5lIHBpcGVfc2V0YXR0ciAgICAgKCh2bm9wX3NldGF0
dHJfdCkgdmZzY29yZV92b3BfbnVsbG9wKQ0KJiM0MzsjZGVmaW5lIHBpcGVfaW5hY3RpdmUgICAg
KCh2bm9wX2luYWN0aXZlX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCiYjNDM7I2RlZmluZSBwaXBl
X3RydW5jYXRlICAgICgodm5vcF90cnVuY2F0ZV90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApDQomIzQz
OyNkZWZpbmUgcGlwZV9saW5rICAgICAgICAoKHZub3BfbGlua190KSB2ZnNjb3JlX3ZvcF9lcGVy
bSkNCiYjNDM7I2RlZmluZSBwaXBlX2NhY2hlICAgICAgICgodm5vcF9jYWNoZV90KSBOVUxMKQ0K
JiM0MzsjZGVmaW5lIHBpcGVfcmVhZGxpbmsgICAgKCh2bm9wX3JlYWRsaW5rX3QpIHZmc2NvcmVf
dm9wX2VpbnZhbCkNCiYjNDM7I2RlZmluZSBwaXBlX3N5bWxpbmsgICAgICgodm5vcF9zeW1saW5r
X3QpIHZmc2NvcmVfdm9wX2VwZXJtKQ0KJiM0MzsjZGVmaW5lIHBpcGVfZmFsbG9jYXRlICAgKCh2
bm9wX2ZhbGxvY2F0ZV90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApDQomIzQzOw0KJiM0MztzdGF0aWMg
c3RydWN0IHZub3BzIHBpcGVfdm5vcHMgPSB7DQomIzQzOwkudm9wX29wZW4gICAgICA9IHBpcGVf
b3BlbiwNCiYjNDM7CS52b3BfY2xvc2UgICAgID0gcGlwZV9jbG9zZSwNCiYjNDM7CS52b3BfcmVh
ZCAgICAgID0gcGlwZV9yZWFkLA0KJiM0MzsJLnZvcF93cml0ZSAgICAgPSBwaXBlX3dyaXRlLA0K
JiM0MzsJLnZvcF9zZWVrICAgICAgPSBwaXBlX3NlZWssDQomIzQzOwkudm9wX2lvY3RsICAgICA9
IHBpcGVfaW9jdGwsDQomIzQzOwkudm9wX2ZzeW5jICAgICA9IHBpcGVfZnN5bmMsDQomIzQzOwku
dm9wX3JlYWRkaXIgICA9IHBpcGVfcmVhZGRpciwNCiYjNDM7CS52b3BfbG9va3VwICAgID0gcGlw
ZV9sb29rdXAsDQomIzQzOwkudm9wX2NyZWF0ZSAgICA9IHBpcGVfY3JlYXRlLA0KJiM0MzsJLnZv
cF9yZW1vdmUgICAgPSBwaXBlX3JlbW92ZSwNCiYjNDM7CS52b3BfcmVuYW1lICAgID0gcGlwZV9y
ZW5hbWUsDQomIzQzOwkudm9wX21rZGlyICAgICA9IHBpcGVfbWtkaXIsDQomIzQzOwkudm9wX3Jt
ZGlyICAgICA9IHBpcGVfcm1kaXIsDQomIzQzOwkudm9wX2dldGF0dHIgICA9IHBpcGVfZ2V0YXR0
ciwNCiYjNDM7CS52b3Bfc2V0YXR0ciAgID0gcGlwZV9zZXRhdHRyLA0KJiM0MzsJLnZvcF9pbmFj
dGl2ZSAgPSBwaXBlX2luYWN0aXZlLA0KJiM0MzsJLnZvcF90cnVuY2F0ZSAgPSBwaXBlX3RydW5j
YXRlLA0KJiM0MzsJLnZvcF9saW5rICAgICAgPSBwaXBlX2xpbmssDQomIzQzOwkudm9wX2NhY2hl
ICAgICA9IHBpcGVfY2FjaGUsDQomIzQzOwkudm9wX2ZhbGxvY2F0ZSA9IHBpcGVfZmFsbG9jYXRl
LA0KJiM0MzsJLnZvcF9yZWFkbGluayAgPSBwaXBlX3JlYWRsaW5rLA0KJiM0MzsJLnZvcF9zeW1s
aW5rICAgPSBwaXBlX3N5bWxpbmsNCiYjNDM7fTsNCiYjNDM7DQomIzQzOyNkZWZpbmUgcGlwZV92
Z2V0ICAoKHZmc29wX3ZnZXRfdCkgdmZzY29yZV92b3BfbnVsbG9wKQ0KJiM0MzsNCiYjNDM7c3Rh
dGljIHN0cnVjdCB2ZnNvcHMgcGlwZV92ZnNvcHMgPSB7DQomIzQzOwkudmZzX3ZnZXQgPSBwaXBl
X3ZnZXQsDQomIzQzOwkudmZzX3Zub3BzID0gJmFtcDtwaXBlX3Zub3BzDQomIzQzO307DQomIzQz
Ow0KJiM0MztzdGF0aWMgdWludDY0X3QgcF9pbm9kZTsNCiYjNDM7DQomIzQzOy8qDQomIzQzOyAq
IEJvZ3VzIG1vdW50IHBvaW50IHVzZWQgYnkgYWxsIHNvY2tldHMNCiYjNDM7ICovDQomIzQzO3N0
YXRpYyBzdHJ1Y3QgbW91bnQgcF9tb3VudCA9IHsNCiYjNDM7CS5tX29wID0gJmFtcDtwaXBlX3Zm
c29wcw0KJiM0Mzt9Ow0KJiM0MzsNCiYjNDM7c3RhdGljIGludCBwaXBlX2ZkX2FsbG9jKHN0cnVj
dCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSwgaW50IGZsYWdzKQ0KJiM0Mzt7DQomIzQzOwlpbnQgcmV0
ID0gMDsNCiYjNDM7CWludCB2ZnNfZmQ7DQomIzQzOwlzdHJ1Y3QgdmZzY29yZV9maWxlICp2ZnNf
ZmlsZSA9IE5VTEw7DQomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpwX2RlbnRyeTsNCiYjNDM7CXN0cnVj
dCB2bm9kZSAqcF92bm9kZTsNCiYjNDM7DQomIzQzOwkvKiBSZXNlcnZlIGZpbGUgZGVzY3JpcHRv
ciBudW1iZXIgKi8NCiYjNDM7CXZmc19mZCA9IHZmc2NvcmVfYWxsb2NfZmQoKTsNCiYjNDM7CWlm
ICh2ZnNfZmQgJmx0OyAwKSB7DQomIzQzOwkJcmV0ID0gLUVORklMRTsNCiYjNDM7CQlnb3RvIEVS
Ul9FWElUOw0KJiM0MzsJfQ0KJiM0MzsNCiYjNDM7CS8qIEFsbG9jYXRlIGZpbGUsIGRlbnRyeSwg
YW5kIHZub2RlICovDQomIzQzOwl2ZnNfZmlsZSA9IHVrX2NhbGxvYyh1a19hbGxvY19nZXRfZGVm
YXVsdCgpLCAxLCBzaXplb2YoKnZmc19maWxlKSk7DQomIzQzOwlpZiAoIXZmc19maWxlKSB7DQom
IzQzOwkJcmV0ID0gLUVOT01FTTsNCiYjNDM7CQlnb3RvIEVSUl9NQUxMT0NfVkZTX0ZJTEU7DQom
IzQzOwl9DQomIzQzOw0KJiM0MzsJcmV0ID0gdmZzY29yZV92Z2V0KCZhbXA7cF9tb3VudCwgcF9p
bm9kZSYjNDM7JiM0MzssICZhbXA7cF92bm9kZSk7DQomIzQzOwlVS19BU1NFUlQocmV0ID09IDAp
OyAvKiB3ZSBzaG91bGQgbm90IGZpbmQgaXQgaW4gY2FjaGUgKi8NCiYjNDM7DQomIzQzOwlpZiAo
IXBfdm5vZGUpIHsNCiYjNDM7CQlyZXQgPSAtRU5PTUVNOw0KJiM0MzsJCWdvdG8gRVJSX0FMTE9D
X1ZOT0RFOw0KJiM0MzsJfQ0KJiM0MzsNCiYjNDM7CXVrX211dGV4X3VubG9jaygmYW1wO3Bfdm5v
ZGUtJmd0O3ZfbG9jayk7DQomIzQzOw0KJiM0MzsJcF9kZW50cnkgPSBkZW50cnlfYWxsb2MoTlVM
TCwgcF92bm9kZSwgJnF1b3Q7LyZxdW90Oyk7DQomIzQzOwlpZiAoIXBfZGVudHJ5KSB7DQomIzQz
OwkJcmV0ID0gLUVOT01FTTsNCiYjNDM7CQlnb3RvIEVSUl9BTExPQ19ERU5UUlk7DQomIzQzOwl9
DQomIzQzOw0KJiM0MzsJLyogRmlsbCBvdXQgbmVjZXNzYXJ5IGZpZWxkcy4gKi8NCiYjNDM7CXZm
c19maWxlLSZndDtmZCA9IHZmc19mZDsNCiYjNDM7CXZmc19maWxlLSZndDtmX2ZsYWdzID0gZmxh
Z3M7DQomIzQzOwl2ZnNfZmlsZS0mZ3Q7Zl9jb3VudCA9IDE7DQomIzQzOwl2ZnNfZmlsZS0mZ3Q7
Zl9kYXRhID0gcGlwZV9maWxlOw0KJiM0MzsJdmZzX2ZpbGUtJmd0O2ZfZGVudHJ5ID0gcF9kZW50
cnk7DQomIzQzOwl2ZnNfZmlsZS0mZ3Q7Zl92ZnNfZmxhZ3MgPSBVS19WRlNDT1JFX05PUE9TOw0K
JiM0MzsNCiYjNDM7CXBfdm5vZGUtJmd0O3ZfZGF0YSA9IHBpcGVfZmlsZTsNCiYjNDM7CXBfdm5v
ZGUtJmd0O3ZfdHlwZSA9IFZGSUZPOw0KJiM0MzsNCiYjNDM7CS8qIEFzc2lnbiB0aGUgZmlsZSBk
ZXNjcmlwdG9ycyB0byB0aGUgY29ycmVzcG9uZGluZyB2ZnNfZmlsZS4gKi8NCiYjNDM7CXJldCA9
IHZmc2NvcmVfaW5zdGFsbF9mZCh2ZnNfZmQsIHZmc19maWxlKTsNCiYjNDM7CWlmIChyZXQpDQom
IzQzOwkJZ290byBFUlJfVkZTX0lOU1RBTEw7DQomIzQzOw0KJiM0MzsJLyogT25seSB0aGUgZGVu
dHJ5IHNob3VsZCBob2xkIGEgcmVmZXJlbmNlOyByZWxlYXNlIG91cnMgKi8NCiYjNDM7CXZyZWxl
KHBfdm5vZGUpOw0KJiM0MzsNCiYjNDM7CXJldHVybiB2ZnNfZmQ7DQomIzQzOw0KJiM0MztFUlJf
VkZTX0lOU1RBTEw6DQomIzQzOwlkcmVsZShwX2RlbnRyeSk7DQomIzQzO0VSUl9BTExPQ19ERU5U
Ulk6DQomIzQzOwl2cmVsZShwX3Zub2RlKTsNCiYjNDM7RVJSX0FMTE9DX1ZOT0RFOg0KJiM0MzsJ
dWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCB2ZnNfZmlsZSk7DQomIzQzO0VSUl9NQUxM
T0NfVkZTX0ZJTEU6DQomIzQzOwl2ZnNjb3JlX3B1dF9mZCh2ZnNfZmQpOw0KJiM0MztFUlJfRVhJ
VDoNCiYjNDM7CVVLX0FTU0VSVChyZXQgJmx0OyAwKTsNCiYjNDM7CXJldHVybiByZXQ7DQomIzQz
O30NCiYjNDM7DQomIzQzO2ludCBwaXBlKGludCBwaXBlZmRbMl0pDQomIzQzO3sNCiYjNDM7CWlu
dCByZXQgPSAwOw0KJiM0MzsJaW50IHJfZmQsIHdfZmQ7DQomIzQzOwlzdHJ1Y3QgcGlwZV9maWxl
ICpwaXBlX2ZpbGU7DQomIzQzOw0KJiM0MzsJLyogQWxsb2NhdGUgcGlwZSBpbnRlcm5hbCBzdHJ1
Y3R1cmUuICovDQomIzQzOwlwaXBlX2ZpbGUgPSBwaXBlX2ZpbGVfYWxsb2MoUElQRV9NQVhfU0la
RSwgMCk7DQomIzQzOwlpZiAoIXBpcGVfZmlsZSkgew0KJiM0MzsJCXJldCA9IC1FTk9NRU07DQom
IzQzOwkJZ290byBFUlJfRVhJVDsNCiYjNDM7CX0NCiYjNDM7DQomIzQzOwlyX2ZkID0gcGlwZV9m
ZF9hbGxvYyhwaXBlX2ZpbGUsIFVLX0ZSRUFEKTsNCiYjNDM7CWlmIChyX2ZkICZsdDsgMCkNCiYj
NDM7CQlnb3RvIEVSUl9WRlNfSU5TVEFMTDsNCiYjNDM7DQomIzQzOwl3X2ZkID0gcGlwZV9mZF9h
bGxvYyhwaXBlX2ZpbGUsIFVLX0ZXUklURSk7DQomIzQzOwlpZiAod19mZCAmbHQ7IDApDQomIzQz
OwkJZ290byBFUlJfV19GRDsNCiYjNDM7DQomIzQzOwkvKiBGaWxsIHBpcGVmZCBmaWVsZHMuICov
DQomIzQzOwlwaXBlZmRbMF0gPSByX2ZkOw0KJiM0MzsJcGlwZWZkWzFdID0gd19mZDsNCiYjNDM7
DQomIzQzOwlyZXR1cm4gcmV0Ow0KJiM0MzsNCiYjNDM7RVJSX1dfRkQ6DQomIzQzOwl2ZnNjb3Jl
X3B1dF9mZChyX2ZkKTsNCiYjNDM7RVJSX1ZGU19JTlNUQUxMOg0KJiM0MzsJcGlwZV9maWxlX2Zy
ZWUocGlwZV9maWxlKTsNCiYjNDM7RVJSX0VYSVQ6DQomIzQzOwlVS19BU1NFUlQocmV0ICZsdDsg
MCk7DQomIzQzOwlyZXR1cm4gcmV0Ow0KJiM0Mzt9DQo8L3ByZT4NCjwvYmxvY2txdW90ZT4NCjwv
Ym9keT4NCjwvaHRtbD4NCg==

--_000_8bcdd07083bfd11fbac43eaa172e609dstudacsupbro_--


--===============7665678682436469814==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============7665678682436469814==--


From minios-devel-bounces@lists.xenproject.org Thu Sep 19 10:45:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 10:45:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAtvr-0007VL-8j; Thu, 19 Sep 2019 10:45:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=yeda=XO=gmail.com=costin.lup@srs-us1.protection.inumbo.net>)
 id 1iAtvp-0007VE-R2
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 10:45:01 +0000
X-Inumbo-ID: 86f48fa0-daca-11e9-978d-bc764e2007e4
Received: from mail-wr1-x441.google.com (unknown [2a00:1450:4864:20::441])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 86f48fa0-daca-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 10:44:59 +0000 (UTC)
Received: by mail-wr1-x441.google.com with SMTP id v8so2590479wrt.2
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 03:44:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=subject:to:references:from:message-id:date:user-agent:mime-version
 :in-reply-to:content-language:content-transfer-encoding;
 bh=jLoERS4i6wdj0qPvOx4A3kXm30mKYghGw6EQFkYbi00=;
 b=lLaeT9EVBmO2e6fR7AxZW0n60wgUKjrkUO+YEu/WlDc7QK/ALqgkAUidqhscaFdp6B
 LTntL+C5pF+RORTCcacKHCZoL7YI5RrWcds8F5pkWJv1jqB/svh3T4SqXA2Z2b73QKjJ
 +6yqUTgX9O59B+7DFJmhMt6th/1b3rwNB8awiPoJx2GfEY2rlg4vVJy1ab6w65ifQa9H
 qoubS0BBQHtqVDlJbKp/iwTarPN//513g7SgA3BF6ELFv27GJ4b6T1A1bF00n/DCcsMV
 BCw3tmqT4P0L+fADL4JoU5utnFYwvZ35MdO0ZXdfVQqr3O8WjCuAYEaURl9JVzR1CrJr
 d+dA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:subject:to:references:from:message-id:date
 :user-agent:mime-version:in-reply-to:content-language
 :content-transfer-encoding;
 bh=jLoERS4i6wdj0qPvOx4A3kXm30mKYghGw6EQFkYbi00=;
 b=JDC4mSFSk64BQJuZY3dH31tALn7CKgffz6Yy4HSxDHkWcYn9zQ9nMY+8t3JNsifjYk
 ljPY1erhxdEBcn1gQjisWAwDUk2JVh2/nd5QDOVdaBbfNLKm5G7OLgINsnsV9WMqz84S
 JwTxqz2gqYh3mRFSO0akIQKmMLLiGyS81HVNlZQKxI3/dnUVEF8KKtcLnTPH5xWPFiAp
 gP8PD1dXvj/QaE563/8bCUVEMV6Wju1O5Hrk/uwoDoezQl4ACjgQzGDpXk1j09F+mrrO
 B5155WQ9IGSEt8SDzV4+4XcqKNIsusvywVGkhKxwXbDEZKGZOTRNProF2F8u275Pn85W
 55JQ==
X-Gm-Message-State: APjAAAX4Z6AgFDVD11Mvi3CX6SPo30HiNqVOy/LPYhw+BDwY/lUdsrA6
 9Px+TidSNY+/amGt1tA0GeC0QHnl
X-Google-Smtp-Source: APXvYqy4qzhQrFo2oHSzhppOKgDtPmoqc6eOqhKip4290ClRNjofhh0smIDF7Y8dEPmfG3knh5XtBw==
X-Received: by 2002:a5d:5183:: with SMTP id k3mr5144931wrv.55.1568889898615;
 Thu, 19 Sep 2019 03:44:58 -0700 (PDT)
Received: from [172.19.9.91] ([141.85.233.103])
 by smtp.gmail.com with ESMTPSA id 33sm12711129wra.41.2019.09.19.03.44.57
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 19 Sep 2019 03:44:57 -0700 (PDT)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
References: <20190913085542.576-1-costin.lupu@cs.pub.ro>
 <8bcdd070-83bf-d11f-bac4-3eaa172e609d@stud.acs.upb.ro>
From: Costin Lupu <costin.lup@gmail.com>
Message-ID: <6bc015be-7ce0-919c-d26f-f6628be13563@gmail.com>
Date: Thu, 19 Sep 2019 13:44:56 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <8bcdd070-83bf-d11f-bac4-3eaa172e609d@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2] lib/vfscore: Add anonymous
 pipe
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gOS8xOS8xOSAxMjo1MSBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+
IEhleSBDb3N0aW4sCj4gCj4gSSBoYXZlIHRlc3RlZCB0aGUgaW1wbGVtZW50YXRpb24gd2l0aCBh
IHByb2dyYW0gdGhhdCB3cml0ZXMgMyBkaWZmZXJlbnQKPiB2YWx1ZSB0byBhIHBpcGUgYW5kIHRo
ZW4KPiAKPiByZWFkcyAzIHRpbWVzIGZyb20gdGhlIHBpcGUuIEZvciBlYWNoIHJlYWQgd2Ugb25s
eSBnZXQgdGhlIGxhc3QgdmFsdWUuCj4gQWxzbywgdGhlIHBhdGNoIGRvZXMgbm90IGFwcGx5Cj4g
Cj4gb3ZlciBzdGFnaW5nIHdpdGhvdXQgY29uZmxpY3RzLgo+IAoKWWVhaCwgSSB3YXMgd3Jvbmds
eSBjYWxjdWxhdGluZyB0aGUgaW5kZXgsIGl0IHNob3VsZCBiZToKCi0jZGVmaW5lIFBJUEVfQlVG
X0lEWChidWYsIG4pICAgICgoYnVmKS0+Y2FwYWNpdHkgJiAobikpCisjZGVmaW5lIFBJUEVfQlVG
X0lEWChidWYsIG4pICAgICgoKGJ1ZiktPmNhcGFjaXR5IC0gMSkgJiAobikpCj4gCj4gUGxlYXNl
IHNlZSB0aGUgcmVzdCBvZiB0aGUgY29tbWVudHMgaW5saW5lLgo+IAo+IFRoYW5rcywKPiAKPiBW
bGFkCj4gCj4gT24gMTMuMDkuMjAxOSAxMTo1NSwgQ29zdGluIEx1cHUgd3JvdGU6Cj4+IEZyb206
IEJvZ2RhbiBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29tPgo+Pgo+PiBUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgYW5vbnltb3VzIHBpcGVzLiBUaGUgdW5kZXJseWluZyBidWZmZXIg
aXMgYSByaW5nCj4+IGJ1ZmZlciB3aG9zZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyLiBUaGUg
Y3JlYXRpbmcgb2YgaXRzIGZpbGUgZGVzY3JpcHRvcnMKPj4gZm9sbG93cyBjbG9zZWx5IHRoZSBp
bXBsZW1lbnRhdGlvbiBmb3Igc29ja2V0cyBpbiBsd2lwIGdsdWUgY29kZS4KPj4KPj4gU2lnbmVk
LW9mZi1ieTogQm9nZGFuIExhc2N1IDxsYXNjdS5ib2dkYW45NkBnbWFpbC5jb20+Cj4+IFNpZ25l
ZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Cj4+IC0tLQo+PiAg
bGliL3Zmc2NvcmUvTWFrZWZpbGUudWsgICB8ICAgMiArCj4+ICBsaWIvdmZzY29yZS9leHBvcnRz
eW1zLnVrIHwgICAxICsKPj4gIGxpYi92ZnNjb3JlL3BpcGUuYyAgICAgICAgfCA1NzIgKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIDMgZmlsZXMgY2hhbmdlZCwgNTc1
IGluc2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdmZzY29yZS9waXBlLmMK
Pj4KPj4gZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrIGIvbGliL3Zmc2NvcmUv
TWFrZWZpbGUudWsKPj4gaW5kZXggNzk4NzhmMjYuLmUzNmM5MjE3IDEwMDY0NAo+PiAtLS0gYS9s
aWIvdmZzY29yZS9NYWtlZmlsZS51awo+PiArKysgYi9saWIvdmZzY29yZS9NYWtlZmlsZS51awo+
PiBAQCAtMTQsNiArMTQsOCBAQCBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFT
RSkvdGFzay5jCj4+ICBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvbG9v
a3VwLmMKPj4gIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9mb3BzLmMK
Pj4gIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9zdWJyX3Vpby5jCj4+
ICtMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvcGlwZS5jCj4+ICtMSUJW
RlNDT1JFX1BJUEVfRkxBR1MteSArPSAtV25vLWNhc3QtZnVuY3Rpb24tdHlwZQo+PiAgTElCVkZT
Q09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2V4dHJhLmxkCj4+ICAKPj4gIAo+PiBk
aWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51ayBiL2xpYi92ZnNjb3JlL2V4cG9y
dHN5bXMudWsKPj4gaW5kZXggZTNkNjcyM2EuLjdmMDJjNjY3IDEwMDY0NAo+PiAtLS0gYS9saWIv
dmZzY29yZS9leHBvcnRzeW1zLnVrCj4+ICsrKyBiL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsK
Pj4gQEAgLTc5LDMgKzc5LDQgQEAgZGVudHJ5X2FsbG9jCj4+ICBkcmVsZQo+PiAgdnJlbGUKPj4g
IGZjbnRsCj4+ICtwaXBlCj4+IGRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9waXBlLmMgYi9saWIv
dmZzY29yZS9waXBlLmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXggMDAwMDAwMDAu
LjI1MmU2NWY3Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvbGliL3Zmc2NvcmUvcGlwZS5jCj4+
IEBAIC0wLDAgKzEsNTcyIEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt
Q2xhdXNlICovCj4+ICsvKgo+PiArICogQXV0aG9yczogQm9nZGFuLUdlb3JnZSBMYXNjdSA8bGFz
Y3UuYm9nZGFuOTZAZ21haWwuY29tPgo+PiArICogICAgICAgICAgQ29zdGluIEx1cHUgPGNvc3Rp
bi5sdXB1QGNzLnB1Yi5ybz4KPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZl
cnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgo+PiAr
ICoKPj4gKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAo+PiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4+ICsgKiBhcmUgbWV0Ogo+PiAr
ICoKPj4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Cj4+ICsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4+ICsgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+PiAr
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQo+PiArICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPj4gKyAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPj4g
KyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCj4+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+PiArICoKPj4gKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFT
IElTIgo+PiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+PiArICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKPj4g
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKPj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPj4gKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Cj4+ICsgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4+ICsgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQo+PiArICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKPj4gKyAqIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgo+PiArICoKPj4gKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFD
VEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPHN0
ZGlvLmg+Cj4+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4+ICsjaW5jbHVkZSA8dmZzY29yZS9maWxl
Lmg+Cj4+ICsjaW5jbHVkZSA8dmZzY29yZS9mcy5oPgo+PiArI2luY2x1ZGUgPHZmc2NvcmUvbW91
bnQuaD4KPj4gKyNpbmNsdWRlIDx2ZnNjb3JlL3Zub2RlLmg+Cj4+ICsjaW5jbHVkZSA8dWsvd2Fp
dC5oPgo+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+PiArCj4+ICsvKiBXZSB1c2UgdGhlIGRl
ZmF1bHQgc2l6ZSBpbiBMaW51eCBrZXJuZWwgKi8KPj4gKyNkZWZpbmUgUElQRV9NQVhfU0laRQko
MSA8PCAxNikKPiAKPiBJIHRoaW5rIHRoYXQgd2Ugc2hvdWxkIHByb3ZpZGUgYSBjb25maWcgb3B0
aW9uIGZvciB0aGlzIHZhbHVlIGJlY2F1c2UKPiBhbGxvY2F0aW5nIDY0S0IgZm9yIGVhY2ggcGlw
ZQo+IAo+IGNhbGwgaXMgcXVpdGUgYSBsb3Qgb2YgbWVtb3J5IGZvciBhIHVuaWtlcm5lbC4KPiAK
CldpbGwgZG8uCgo+PiArCj4+ICtzdHJ1Y3QgcGlwZV9idWYgewo+PiArCS8qIFRoZSBidWZmZXIg
Ki8KPj4gKwljaGFyICpkYXRhOwo+PiArCS8qIFRoZSBidWZmZXIgY2FwYWNpdHksIGFsd2F5cyBh
IHBvd2VyIG9mIDIgKi8KPj4gKwl1bnNpZ25lZCBsb25nIGNhcGFjaXR5Owo+PiArCS8qIFByb2R1
Y2VyIGluZGV4ICovCj4+ICsJdW5zaWduZWQgbG9uZyBwcm9kOwo+PiArCS8qIENvbnN1bWVyIGlu
ZGV4ICovCj4+ICsJdW5zaWduZWQgbG9uZyBjb25zOwo+PiArCj4+ICsJLyogUmVhZCBsb2NrICov
Cj4+ICsJc3RydWN0IHVrX211dGV4IHJkbG9jazsKPj4gKwkvKiBXcml0ZSBsb2NrICovCj4+ICsJ
c3RydWN0IHVrX211dGV4IHdybG9jazsKPj4gKwo+PiArCS8qIFJlYWRlcnMgcXVldWUgKi8KPj4g
KwlzdHJ1Y3QgdWtfd2FpdHEgcmR3cTsKPj4gKwkvKiBXcml0ZXJzIHF1ZXVlICovCj4+ICsJc3Ry
dWN0IHVrX3dhaXRxIHdyd3E7Cj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIFBJUEVfQlVGX0lEWChi
dWYsIG4pICAgICgoYnVmKS0+Y2FwYWNpdHkgJiAobikpCj4+ICsjZGVmaW5lIFBJUEVfQlVGX1BS
T0RfSURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgoYnVmKSwgKGJ1ZiktPnByb2QpCj4+ICsjZGVmaW5l
IFBJUEVfQlVGX0NPTlNfSURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgoYnVmKSwgKGJ1ZiktPmNvbnMp
Cj4+ICsKPj4gK3N0cnVjdCBwaXBlX2ZpbGUgewo+PiArCS8qIFBpcGUgYnVmZmVyICovCj4+ICsJ
c3RydWN0IHBpcGVfYnVmICpidWY7Cj4+ICsJLyogV3JpdGUgcmVmZXJlbmNlIGNvdW50ICovCj4+
ICsJaW50IHdfcmVmY291bnQ7Cj4+ICsJLyogUmVhZCByZWZlcmVuY2UgY291bnQgKi8KPj4gKwlp
bnQgcl9yZWZjb3VudDsKPj4gKwkvKiBGbGFncyAqLwo+PiArCWludCBmbGFnczsKPj4gK307Cj4+
ICsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWZfYWxsb2MoaW50IGNh
cGFjaXR5KQo+PiArewo+PiArCXN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWY7Cj4+ICsKPj4gKwlV
S19BU1NFUlQoUE9XRVJfT0ZfMihjYXBhY2l0eSkpOwo+PiArCj4+ICsJcGlwZV9idWYgPSB1a19t
YWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKCpwaXBlX2J1ZikpOwo+PiArCWlm
ICghcGlwZV9idWYpCj4+ICsJCXJldHVybiBOVUxMOwo+PiArCj4+ICsJcGlwZV9idWYtPmRhdGEg
PSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgY2FwYWNpdHkpOwo+PiArCWlmICgh
cGlwZV9idWYtPmRhdGEpIHsKPj4gKwkJdWtfZnJlZSh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCBw
aXBlX2J1Zik7Cj4+ICsJCXJldHVybiBOVUxMOwo+PiArCX0KPj4gKwo+PiArCXBpcGVfYnVmLT5j
YXBhY2l0eSA9IGNhcGFjaXR5Owo+PiArCXBpcGVfYnVmLT5jb25zID0gMDsKPj4gKwlwaXBlX2J1
Zi0+cHJvZCA9IDA7Cj4+ICsJdWtfbXV0ZXhfaW5pdCgmcGlwZV9idWYtPnJkbG9jayk7Cj4+ICsJ
dWtfbXV0ZXhfaW5pdCgmcGlwZV9idWYtPndybG9jayk7Cj4+ICsJdWtfd2FpdHFfaW5pdCgmcGlw
ZV9idWYtPnJkd3EpOwo+PiArCXVrX3dhaXRxX2luaXQoJnBpcGVfYnVmLT53cndxKTsKPj4gKwo+
PiArCXJldHVybiBwaXBlX2J1ZjsKPj4gK30KPj4gKwo+PiArdm9pZCBwaXBlX2J1Zl9mcmVlKHN0
cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpCj4+ICt7Cj4+ICsJdWtfZnJlZSh1a19hbGxvY19nZXRf
ZGVmYXVsdCgpLCBwaXBlX2J1Zi0+ZGF0YSk7Cj4gCj4gdmZzY29yZSBkb2VzIG5vdCB1c2UgdWtf
ZnJlZSBkaXJlY3RseSBidXQgdGhyb3VnaCB0aGUgZnJlZSBjYWxsLiBQZXJoYXBzCj4gd2Ugc2hv
dWxkIGZvbGxvdyB0aGUgc2FtZSBhcHByb2FjaC4KPiAKPiBUaGUgc2FtZSBjb21tZW50IGFwcGxp
ZXMgZm9yIHVrX21hbGxvYy4KPiAKCkFjay4KCj4+ICsJdWtfZnJlZSh1a19hbGxvY19nZXRfZGVm
YXVsdCgpLCBwaXBlX2J1Zik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBp
cGVfYnVmX2dldF9hdmFpbGFibGUoY29uc3Qgc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikKPj4g
K3sKPj4gKwlyZXR1cm4gcGlwZV9idWYtPnByb2QgLSBwaXBlX2J1Zi0+Y29uczsKPj4gK30KPj4g
Kwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfZ2V0X2ZyZWVfc3BhY2Uoc3RydWN0
IHBpcGVfYnVmICpwaXBlX2J1ZikKPj4gK3sKPj4gKwlyZXR1cm4gcGlwZV9idWYtPmNhcGFjaXR5
IC0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp
YyBpbnQgcGlwZV9idWZfY2FuX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpCj4+ICt7
Cj4+ICsJcmV0dXJuIHBpcGVfYnVmX2dldF9mcmVlX3NwYWNlKHBpcGVfYnVmKSA+IDA7Cj4+ICt9
Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcGlwZV9idWZfY2FuX3JlYWQoc3RydWN0IHBpcGVfYnVmICpw
aXBlX2J1ZikKPj4gK3sKPj4gKwlyZXR1cm4gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1
ZikgPiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl93cml0
ZShzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmLAo+PiArCQlzdHJ1Y3QgaW92ZWMgKmlvdmVjLCBz
aXplX3QgaW92ZWNfb2ZmKQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgcHJvZF9pZHgsIHRvX3dy
aXRlOwo+PiArCXZvaWQgKmlvdmVjX2RhdGEgPSBpb3ZlYy0+aW92X2Jhc2UgKyBpb3ZlY19vZmY7
Cj4+ICsJc2l6ZV90IGlvdl9sZW4gPSBpb3ZlYy0+aW92X2xlbiAtIGlvdmVjX29mZjsKPj4gKwo+
PiArCXByb2RfaWR4ID0gUElQRV9CVUZfUFJPRF9JRFgocGlwZV9idWYpOwo+PiArCXRvX3dyaXRl
ID0gTUlOKHBpcGVfYnVmX2dldF9mcmVlX3NwYWNlKHBpcGVfYnVmKSwgaW92X2xlbik7Cj4+ICsJ
aWYgKHRvX3dyaXRlID09IDApCj4+ICsJCWdvdG8gb3V0Owo+PiArCj4+ICsJLyogQ29weSBpbiBv
bmUgcGllY2UgKi8KPj4gKwlpZiAocHJvZF9pZHggKyB0b193cml0ZSA8PSBwaXBlX2J1Zi0+Y2Fw
YWNpdHkpCj4+ICsJCW1lbWNweShwaXBlX2J1Zi0+ZGF0YSArIHByb2RfaWR4LCBpb3ZlY19kYXRh
LCB0b193cml0ZSk7Cj4+ICsKPj4gKwllbHNlIHsKPj4gKwkJaW50IGZpcnN0X2NvcHlfYnl0ZXMs
IHNlY29uZF9jb3B5X2J5dGVzOwo+PiArCj4+ICsJCS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgKi8K
Pj4gKwkJZmlyc3RfY29weV9ieXRlcyA9IHBpcGVfYnVmLT5jYXBhY2l0eSAtIHByb2RfaWR4Owo+
PiArCQltZW1jcHkocGlwZV9idWYtPmRhdGEgKyBwcm9kX2lkeCwKPj4gKwkJCQlpb3ZlY19kYXRh
LAo+PiArCQkJCWZpcnN0X2NvcHlfYnl0ZXMpOwo+PiArCj4+ICsJCS8qIENvcHkgdGhlIHNlY29u
ZCBwYXJ0ICovCj4+ICsJCXNlY29uZF9jb3B5X2J5dGVzID0gcHJvZF9pZHggKyB0b193cml0ZSAt
IHBpcGVfYnVmLT5jYXBhY2l0eTsKPj4gKwkJbWVtY3B5KHBpcGVfYnVmLT5kYXRhLAo+PiArCQkJ
CWlvdmVjX2RhdGEgKyBmaXJzdF9jb3B5X2J5dGVzLAo+PiArCQkJCXNlY29uZF9jb3B5X2J5dGVz
KTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBVcGRhdGUgcHJvZHVjZXIgKi8KPj4gKwlwaXBlX2J1Zi0+
cHJvZCArPSB0b193cml0ZTsKPj4gKwo+PiArb3V0Ogo+PiArCXJldHVybiB0b193cml0ZTsKPj4g
K30KPj4gKwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfcmVhZChzdHJ1Y3QgcGlw
ZV9idWYgKnBpcGVfYnVmLAo+PiArCQlzdHJ1Y3QgaW92ZWMgKmlvdmVjLCBzaXplX3QgaW92ZWNf
b2ZmKQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgY29uc19pZHgsIHRvX3JlYWQ7Cj4+ICsJdm9p
ZCAqaW92ZWNfZGF0YSA9IGlvdmVjLT5pb3ZfYmFzZSArIGlvdmVjX29mZjsKPj4gKwlzaXplX3Qg
aW92X2xlbiA9IGlvdmVjLT5pb3ZfbGVuIC0gaW92ZWNfb2ZmOwo+PiArCj4+ICsJY29uc19pZHgg
PSBQSVBFX0JVRl9DT05TX0lEWChwaXBlX2J1Zik7Cj4+ICsJdG9fcmVhZCA9IE1JTihwaXBlX2J1
Zl9nZXRfYXZhaWxhYmxlKHBpcGVfYnVmKSwgaW92X2xlbik7Cj4+ICsJaWYgKHRvX3JlYWQgPT0g
MCkKPj4gKwkJZ290byBvdXQ7Cj4+ICsKPj4gKwkvKiBDb3B5IGluIG9uZSBwaWVjZSAqLwo+PiAr
CWlmIChjb25zX2lkeCArIHRvX3JlYWQgPD0gcGlwZV9idWYtPmNhcGFjaXR5KQo+PiArCQltZW1j
cHkoaW92ZWNfZGF0YSwgcGlwZV9idWYtPmRhdGEgKyBjb25zX2lkeCwgdG9fcmVhZCk7Cj4+ICsK
Pj4gKwllbHNlIHsKPj4gKwkJaW50IGZpcnN0X2NvcHlfYnl0ZXM7Cj4+ICsJCWludCBzZWNvbmRf
Y29weV9ieXRlczsKPj4gKwo+PiArCQkvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0ICovCj4+ICsJCWZp
cnN0X2NvcHlfYnl0ZXMgPSBwaXBlX2J1Zi0+Y2FwYWNpdHkgLSBwaXBlX2J1Zi0+Y29uczsKPj4g
KwkJbWVtY3B5KGlvdmVjX2RhdGEsCj4+ICsJCQkJcGlwZV9idWYtPmRhdGEgKyBjb25zX2lkeCwK
Pj4gKwkJCQlmaXJzdF9jb3B5X2J5dGVzKTsKPj4gKwo+PiArCQkvKiBDb3B5IHRoZSBzZWNvbmQg
cGFydCAqLwo+PiArCQlzZWNvbmRfY29weV9ieXRlcyA9IGNvbnNfaWR4ICsgdG9fcmVhZCAtIHBp
cGVfYnVmLT5jYXBhY2l0eTsKPj4gKwkJbWVtY3B5KGlvdmVjX2RhdGEgKyBmaXJzdF9jb3B5X2J5
dGVzLAo+PiArCQkJCXBpcGVfYnVmLT5kYXRhLAo+PiArCQkJCXNlY29uZF9jb3B5X2J5dGVzKTsK
Pj4gKwl9Cj4+ICsKPj4gKwkvKiBVcGRhdGUgY29uc3VtZXIgKi8KPj4gKwlwaXBlX2J1Zi0+Y29u
cyArPSB0b19yZWFkOwo+PiArCj4+ICtvdXQ6Cj4+ICsJcmV0dXJuIHRvX3JlYWQ7Cj4+ICt9Cj4+
ICsKPj4gK3N0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZV9hbGxvYyhpbnQgY2FwYWNpdHksIGlu
dCBmbGFncykKPj4gK3sKPj4gKwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGU7Cj4+ICsKPj4g
KwlwaXBlX2ZpbGUgPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKCpw
aXBlX2ZpbGUpKTsKPj4gKwlpZiAoIXBpcGVfZmlsZSkKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsK
Pj4gKwlwaXBlX2ZpbGUtPmJ1ZiA9IHBpcGVfYnVmX2FsbG9jKGNhcGFjaXR5KTsKPj4gKwlpZiAo
IXBpcGVfZmlsZS0+YnVmKSB7Cj4+ICsJCXVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwg
cGlwZV9maWxlKTsKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsJfQo+PiArCj4+ICsJcGlwZV9maWxl
LT53X3JlZmNvdW50ID0gMTsKPj4gKwlwaXBlX2ZpbGUtPnJfcmVmY291bnQgPSAxOwo+PiArCXBp
cGVfZmlsZS0+ZmxhZ3MgPSBmbGFnczsKPj4gKwo+PiArCXJldHVybiBwaXBlX2ZpbGU7Cj4+ICt9
Cj4+ICsKPj4gK3ZvaWQgcGlwZV9maWxlX2ZyZWUoc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxl
KQo+PiArewo+PiArCXBpcGVfYnVmX2ZyZWUocGlwZV9maWxlLT5idWYpOwo+PiArCXVrX2ZyZWUo
dWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgcGlwZV9maWxlKTsKPj4gK30KPj4gKwo+PiArc3RhdGlj
IGludCBwaXBlX3dyaXRlKHN0cnVjdCB2bm9kZSAqdm5vZGUsCj4+ICsJCXN0cnVjdCB1aW8gKmJ1
ZiwgaW50IGlvZmxhZyBfX3VudXNlZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBl
X2ZpbGUgPSB2bm9kZS0+dl9kYXRhOwo+PiArCXN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYgPSBw
aXBlX2ZpbGUtPmJ1ZjsKPj4gKwlib29sIG5vbmJsb2NraW5nID0gZmFsc2U7IC8qIFRPRE8gaGFu
ZGxlIG5vbmJsb2NraW5nICovCj4+ICsJYm9vbCBkYXRhX2F2YWlsYWJsZSA9IHRydWU7Cj4+ICsJ
aW50IHVpb19pZHggPSAwOwo+PiArCj4+ICsJaWYgKCFwaXBlX2ZpbGUtPnJfcmVmY291bnQpIHsK
Pj4gKwkJLyogVE9ETyBiZWZvcmUgcmV0dXJuaW5nIHRoZSBlcnJvciwgc2VuZCBhIFNJR1BJUEUg
c2lnbmFsICovCj4+ICsJCXJldHVybiAtRVBJUEU7Cj4+ICsJfQo+PiArCj4+ICsJdWtfbXV0ZXhf
bG9jaygmcGlwZV9idWYtPndybG9jayk7Cj4+ICsJd2hpbGUgKGRhdGFfYXZhaWxhYmxlICYmIHVp
b19pZHggPCBidWYtPnVpb19pb3ZjbnQpIHsKPj4gKwkJc3RydWN0IGlvdmVjICppb3ZlYyA9ICZi
dWYtPnVpb19pb3ZbdWlvX2lkeF07Cj4+ICsJCXVuc2lnbmVkIGxvbmcgb2ZmID0gMDsKPj4gKwo+
PiArCQl3aGlsZSAob2ZmIDwgaW92ZWMtPmlvdl9sZW4pIHsKPj4gKwkJCXVuc2lnbmVkIGxvbmcg
d3JpdHRlbl9ieXRlczsKPj4gKwo+PiArCQkJd3JpdHRlbl9ieXRlcyA9IHBpcGVfYnVmX3dyaXRl
KHBpcGVfYnVmLCBpb3ZlYywgb2ZmKTsKPj4gKwkJCWlmICh3cml0dGVuX2J5dGVzID09IDApIHsK
Pj4gKwkJCQkvKiBObyBkYXRhICovCj4+ICsJCQkJaWYgKG5vbmJsb2NraW5nKSB7Cj4+ICsJCQkJ
CWRhdGFfYXZhaWxhYmxlID0gZmFsc2U7Cj4+ICsJCQkJCWJyZWFrOwo+PiArCj4+ICsJCQkJfSBl
bHNlIHsKPj4gKwkJCQkJLyogV2FpdCB1bnRpbCBkYXRhIGF2YWlsYWJsZSAqLwo+PiArCQkJCQl3
aGlsZSAoIXBpcGVfYnVmX2Nhbl93cml0ZShwaXBlX2J1ZikpIHsKPj4gKwkJCQkJCXVrX211dGV4
X3VubG9jaygmcGlwZV9idWYtPndybG9jayk7Cj4+ICsJCQkJCQl1a193YWl0cV93YWl0X2V2ZW50
KCZwaXBlX2J1Zi0+d3J3cSwKPj4gKwkJCQkJCQlwaXBlX2J1Zl9jYW5fd3JpdGUocGlwZV9idWYp
KTsKPj4gKwkJCQkJCXVrX211dGV4X2xvY2soJnBpcGVfYnVmLT53cmxvY2spOwo+PiArCQkJCQl9
Cj4+ICsJCQkJfQo+PiArCj4+ICsJCQl9IGVsc2Ugewo+PiArCQkJCS8qIFVwZGF0ZSBieXRlcyB3
cml0dGVuX2J5dGVzLiAqLwo+PiArCQkJCWJ1Zi0+dWlvX3Jlc2lkIC09IHdyaXR0ZW5fYnl0ZXM7
Cj4+ICsKPj4gKwkJCQlvZmYgKz0gd3JpdHRlbl9ieXRlczsKPj4gKwo+PiArCQkJCS8qIHdha2Ug
c29tZSByZWFkZXJzICovCj4+ICsJCQkJdWtfd2FpdHFfd2FrZV91cCgmcGlwZV9idWYtPnJkd3Ep
Owo+PiArCQkJfQo+PiArCQl9Cj4+ICsKPj4gKwkJdWlvX2lkeCsrOwo+PiArCX0KPj4gKwl1a19t
dXRleF91bmxvY2soJnBpcGVfYnVmLT53cmxvY2spOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9
Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcGlwZV9yZWFkKHN0cnVjdCB2bm9kZSAqdm5vZGUsCj4+ICsJ
CXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZmlsZSwKPj4gKwkJc3RydWN0IHVpbyAqYnVm
LCBpbnQgaW9mbGFnIF9fdW51c2VkKQo+PiArewo+PiArCXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVf
ZmlsZSA9IHZub2RlLT52X2RhdGE7Cj4+ICsJc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZiA9IHBp
cGVfZmlsZS0+YnVmOwo+PiArCWJvb2wgbm9uYmxvY2tpbmcgPSAodmZzY29yZV9maWxlLT5mX2Zs
YWdzICYgT19OT05CTE9DSyk7Cj4+ICsJYm9vbCBkYXRhX2F2YWlsYWJsZSA9IHRydWU7Cj4+ICsJ
aW50IHVpb19pZHggPSAwOwo+PiArCj4+ICsJdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPnJkbG9j
ayk7Cj4+ICsJaWYgKG5vbmJsb2NraW5nICYmICFwaXBlX2J1Zl9jYW5fcmVhZChwaXBlX2J1Zikp
IHsKPj4gKwkJdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsKPj4gKwkJcmV0dXJu
IEVBR0FJTjsKPj4gKwl9Cj4+ICsKPj4gKwl3aGlsZSAoZGF0YV9hdmFpbGFibGUgJiYgdWlvX2lk
eCA8IGJ1Zi0+dWlvX2lvdmNudCkgewo+PiArCQlzdHJ1Y3QgaW92ZWMgKmlvdmVjID0gJmJ1Zi0+
dWlvX2lvdlt1aW9faWR4XTsKPj4gKwkJdW5zaWduZWQgbG9uZyBvZmYgPSAwOwo+PiArCj4+ICsJ
CXdoaWxlIChvZmYgPCBpb3ZlYy0+aW92X2xlbikgewo+PiArCQkJdW5zaWduZWQgbG9uZyByZWFk
X2J5dGVzOwo+PiArCj4+ICsJCQlyZWFkX2J5dGVzID0gcGlwZV9idWZfcmVhZChwaXBlX2J1Ziwg
aW92ZWMsIG9mZik7Cj4+ICsJCQlpZiAocmVhZF9ieXRlcyA9PSAwKSB7Cj4+ICsJCQkJLyogTm8g
ZGF0YSAqLwo+PiArCQkJCWlmIChub25ibG9ja2luZykgewo+PiArCQkJCQlkYXRhX2F2YWlsYWJs
ZSA9IGZhbHNlOwo+PiArCQkJCQlicmVhazsKPj4gKwo+PiArCQkJCX0gZWxzZSB7Cj4+ICsJCQkJ
CS8qIFdhaXQgdW50aWwgZGF0YSBhdmFpbGFibGUgKi8KPj4gKwkJCQkJd2hpbGUgKCFwaXBlX2J1
Zl9jYW5fcmVhZChwaXBlX2J1ZikpIHsKPj4gKwkJCQkJCXVrX211dGV4X3VubG9jaygmcGlwZV9i
dWYtPnJkbG9jayk7Cj4+ICsJCQkJCQl1a193YWl0cV93YWl0X2V2ZW50KCZwaXBlX2J1Zi0+cmR3
cSwKPj4gKwkJCQkJCQlwaXBlX2J1Zl9jYW5fcmVhZChwaXBlX2J1ZikpOwo+PiArCQkJCQkJdWtf
bXV0ZXhfbG9jaygmcGlwZV9idWYtPnJkbG9jayk7Cj4+ICsJCQkJCX0KPj4gKwkJCQl9Cj4+ICsK
Pj4gKwkJCX0gZWxzZSB7Cj4+ICsJCQkJLyogVXBkYXRlIGJ5dGVzIHJlYWQgKi8KPj4gKwkJCQli
dWYtPnVpb19yZXNpZCAtPSByZWFkX2J5dGVzOwo+PiArCj4+ICsJCQkJb2ZmICs9IHJlYWRfYnl0
ZXM7Cj4+ICsKPj4gKwkJCQkvKiB3YWtlIHNvbWUgd3JpdGVycyAqLwo+PiArCQkJCXVrX3dhaXRx
X3dha2VfdXAoJnBpcGVfYnVmLT53cndxKTsKPj4gKwkJCX0KPj4gKwkJfQo+PiArCj4+ICsJCXVp
b19pZHgrKzsKPj4gKwl9Cj4+ICsJdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsK
Pj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHBpcGVfY2xvc2Uo
c3RydWN0IHZub2RlICp2bm9kZSwKPj4gKwkJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9m
aWxlKQo+PiArewo+PiArCXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSA9IHZub2RlLT52X2Rh
dGE7Cj4+ICsKPj4gKwlVS19BU1NFUlQodmZzY29yZV9maWxlLT5mX2RlbnRyeS0+ZF92bm9kZSA9
PSB2bm9kZSk7Cj4+ICsJVUtfQVNTRVJUKHZub2RlLT52X3JlZmNudCA9PSAxKTsKPj4gKwo+PiAr
CWlmICh2ZnNjb3JlX2ZpbGUtPmZfZmxhZ3MgJiBVS19GUkVBRCkKPj4gKwkJcGlwZV9maWxlLT5y
X3JlZmNvdW50LS07Cj4+ICsKPj4gKwlpZiAodmZzY29yZV9maWxlLT5mX2ZsYWdzICYgVUtfRldS
SVRFKQo+PiArCQlwaXBlX2ZpbGUtPndfcmVmY291bnQtLTsKPj4gKwo+PiArCWlmICghcGlwZV9m
aWxlLT5yX3JlZmNvdW50ICYmICFwaXBlX2ZpbGUtPndfcmVmY291bnQpCj4+ICsJCXBpcGVfZmls
ZV9mcmVlKHBpcGVfZmlsZSk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3Rh
dGljIGludCBwaXBlX3NlZWsoc3RydWN0IHZub2RlICp2bm9kZSBfX3VudXNlZCwKPj4gKwkJCXN0
cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZmlsZSBfX3VudXNlZCwKPj4gKwkJCW9mZl90IG9m
ZjEgX191bnVzZWQsIG9mZl90IG9mZjIgX191bnVzZWQpCj4+ICt7Cj4+ICsJZXJybm8gPSBFU1BJ
UEU7Cj4+ICsJcmV0dXJuIC0xOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHBpcGVfaW9jdGwo
c3RydWN0IHZub2RlICp2bm9kZSwKPj4gKwkJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9m
aWxlIF9fdW51c2VkLAo+PiArCQl1bnNpZ25lZCBsb25nIGNvbSwgdm9pZCAqZGF0YSkKPj4gK3sK
Pj4gKwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUgPSB2bm9kZS0+dl9kYXRhOwo+PiArCXN0
cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUtPmJ1ZjsKPj4gKwo+PiArCXN3aXRj
aCAoY29tKSB7Cj4+ICsJY2FzZSBGSU9OUkVBRDoKPj4gKwkJdWtfbXV0ZXhfbG9jaygmcGlwZV9i
dWYtPnJkbG9jayk7Cj4+ICsJCSooKGludCAqKSBkYXRhKSA9IHBpcGVfYnVmX2dldF9hdmFpbGFi
bGUocGlwZV9idWYpOwo+PiArCQl1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT5yZGxvY2spOwo+
PiArCQlyZXR1cm4gMDsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9
Cj4+ICt9Cj4+ICsKPj4gKyNkZWZpbmUgcGlwZV9vcGVuICAgICAgICAoKHZub3Bfb3Blbl90KSB2
ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfZnN5bmMgICAgICAgKCh2bm9wX2Zz
eW5jX3QpIHZmc2NvcmVfdm9wX251bGxvcCkKPj4gKyNkZWZpbmUgcGlwZV9yZWFkZGlyICAgICAo
KHZub3BfcmVhZGRpcl90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfbG9v
a3VwICAgICAgKCh2bm9wX2xvb2t1cF90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5l
IHBpcGVfY3JlYXRlICAgICAgKCh2bm9wX2NyZWF0ZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+
ICsjZGVmaW5lIHBpcGVfcmVtb3ZlICAgICAgKCh2bm9wX3JlbW92ZV90KSB2ZnNjb3JlX3ZvcF9l
aW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfcmVuYW1lICAgICAgKCh2bm9wX3JlbmFtZV90KSB2ZnNj
b3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfbWtkaXIgICAgICAgKCh2bm9wX21rZGly
X3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKPj4gKyNkZWZpbmUgcGlwZV9ybWRpciAgICAgICAoKHZu
b3Bfcm1kaXJfdCkgdmZzY29yZV92b3BfZWludmFsKQo+PiArI2RlZmluZSBwaXBlX2dldGF0dHIg
ICAgICgodm5vcF9nZXRhdHRyX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKPj4gKyNkZWZpbmUgcGlw
ZV9zZXRhdHRyICAgICAoKHZub3Bfc2V0YXR0cl90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApCj4+ICsj
ZGVmaW5lIHBpcGVfaW5hY3RpdmUgICAgKCh2bm9wX2luYWN0aXZlX3QpIHZmc2NvcmVfdm9wX2Vp
bnZhbCkKPj4gKyNkZWZpbmUgcGlwZV90cnVuY2F0ZSAgICAoKHZub3BfdHJ1bmNhdGVfdCkgdmZz
Y29yZV92b3BfbnVsbG9wKQo+PiArI2RlZmluZSBwaXBlX2xpbmsgICAgICAgICgodm5vcF9saW5r
X3QpIHZmc2NvcmVfdm9wX2VwZXJtKQo+PiArI2RlZmluZSBwaXBlX2NhY2hlICAgICAgICgodm5v
cF9jYWNoZV90KSBOVUxMKQo+PiArI2RlZmluZSBwaXBlX3JlYWRsaW5rICAgICgodm5vcF9yZWFk
bGlua190KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfc3ltbGluayAgICAg
KCh2bm9wX3N5bWxpbmtfdCkgdmZzY29yZV92b3BfZXBlcm0pCj4+ICsjZGVmaW5lIHBpcGVfZmFs
bG9jYXRlICAgKCh2bm9wX2ZhbGxvY2F0ZV90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApCj4+ICsKPj4g
K3N0YXRpYyBzdHJ1Y3Qgdm5vcHMgcGlwZV92bm9wcyA9IHsKPj4gKwkudm9wX29wZW4gICAgICA9
IHBpcGVfb3BlbiwKPj4gKwkudm9wX2Nsb3NlICAgICA9IHBpcGVfY2xvc2UsCj4+ICsJLnZvcF9y
ZWFkICAgICAgPSBwaXBlX3JlYWQsCj4+ICsJLnZvcF93cml0ZSAgICAgPSBwaXBlX3dyaXRlLAo+
PiArCS52b3Bfc2VlayAgICAgID0gcGlwZV9zZWVrLAo+PiArCS52b3BfaW9jdGwgICAgID0gcGlw
ZV9pb2N0bCwKPj4gKwkudm9wX2ZzeW5jICAgICA9IHBpcGVfZnN5bmMsCj4+ICsJLnZvcF9yZWFk
ZGlyICAgPSBwaXBlX3JlYWRkaXIsCj4+ICsJLnZvcF9sb29rdXAgICAgPSBwaXBlX2xvb2t1cCwK
Pj4gKwkudm9wX2NyZWF0ZSAgICA9IHBpcGVfY3JlYXRlLAo+PiArCS52b3BfcmVtb3ZlICAgID0g
cGlwZV9yZW1vdmUsCj4+ICsJLnZvcF9yZW5hbWUgICAgPSBwaXBlX3JlbmFtZSwKPj4gKwkudm9w
X21rZGlyICAgICA9IHBpcGVfbWtkaXIsCj4+ICsJLnZvcF9ybWRpciAgICAgPSBwaXBlX3JtZGly
LAo+PiArCS52b3BfZ2V0YXR0ciAgID0gcGlwZV9nZXRhdHRyLAo+PiArCS52b3Bfc2V0YXR0ciAg
ID0gcGlwZV9zZXRhdHRyLAo+PiArCS52b3BfaW5hY3RpdmUgID0gcGlwZV9pbmFjdGl2ZSwKPj4g
Kwkudm9wX3RydW5jYXRlICA9IHBpcGVfdHJ1bmNhdGUsCj4+ICsJLnZvcF9saW5rICAgICAgPSBw
aXBlX2xpbmssCj4+ICsJLnZvcF9jYWNoZSAgICAgPSBwaXBlX2NhY2hlLAo+PiArCS52b3BfZmFs
bG9jYXRlID0gcGlwZV9mYWxsb2NhdGUsCj4+ICsJLnZvcF9yZWFkbGluayAgPSBwaXBlX3JlYWRs
aW5rLAo+PiArCS52b3Bfc3ltbGluayAgID0gcGlwZV9zeW1saW5rCj4+ICt9Owo+PiArCj4+ICsj
ZGVmaW5lIHBpcGVfdmdldCAgKCh2ZnNvcF92Z2V0X3QpIHZmc2NvcmVfdm9wX251bGxvcCkKPj4g
Kwo+PiArc3RhdGljIHN0cnVjdCB2ZnNvcHMgcGlwZV92ZnNvcHMgPSB7Cj4+ICsJLnZmc192Z2V0
ID0gcGlwZV92Z2V0LAo+PiArCS52ZnNfdm5vcHMgPSAmcGlwZV92bm9wcwo+PiArfTsKPj4gKwo+
PiArc3RhdGljIHVpbnQ2NF90IHBfaW5vZGU7Cj4+ICsKPj4gKy8qCj4+ICsgKiBCb2d1cyBtb3Vu
dCBwb2ludCB1c2VkIGJ5IGFsbCBzb2NrZXRzCj4+ICsgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgbW91
bnQgcF9tb3VudCA9IHsKPj4gKwkubV9vcCA9ICZwaXBlX3Zmc29wcwo+PiArfTsKPj4gKwo+PiAr
c3RhdGljIGludCBwaXBlX2ZkX2FsbG9jKHN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSwgaW50
IGZsYWdzKQo+PiArewo+PiArCWludCByZXQgPSAwOwo+PiArCWludCB2ZnNfZmQ7Cj4+ICsJc3Ry
dWN0IHZmc2NvcmVfZmlsZSAqdmZzX2ZpbGUgPSBOVUxMOwo+PiArCXN0cnVjdCBkZW50cnkgKnBf
ZGVudHJ5Owo+PiArCXN0cnVjdCB2bm9kZSAqcF92bm9kZTsKPj4gKwo+PiArCS8qIFJlc2VydmUg
ZmlsZSBkZXNjcmlwdG9yIG51bWJlciAqLwo+PiArCXZmc19mZCA9IHZmc2NvcmVfYWxsb2NfZmQo
KTsKPj4gKwlpZiAodmZzX2ZkIDwgMCkgewo+PiArCQlyZXQgPSAtRU5GSUxFOwo+PiArCQlnb3Rv
IEVSUl9FWElUOwo+PiArCX0KPj4gKwo+PiArCS8qIEFsbG9jYXRlIGZpbGUsIGRlbnRyeSwgYW5k
IHZub2RlICovCj4+ICsJdmZzX2ZpbGUgPSB1a19jYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQo
KSwgMSwgc2l6ZW9mKCp2ZnNfZmlsZSkpOwo+PiArCWlmICghdmZzX2ZpbGUpIHsKPj4gKwkJcmV0
ID0gLUVOT01FTTsKPj4gKwkJZ290byBFUlJfTUFMTE9DX1ZGU19GSUxFOwo+PiArCX0KPj4gKwo+
PiArCXJldCA9IHZmc2NvcmVfdmdldCgmcF9tb3VudCwgcF9pbm9kZSsrLCAmcF92bm9kZSk7Cj4+
ICsJVUtfQVNTRVJUKHJldCA9PSAwKTsgLyogd2Ugc2hvdWxkIG5vdCBmaW5kIGl0IGluIGNhY2hl
ICovCj4+ICsKPj4gKwlpZiAoIXBfdm5vZGUpIHsKPj4gKwkJcmV0ID0gLUVOT01FTTsKPj4gKwkJ
Z290byBFUlJfQUxMT0NfVk5PREU7Cj4+ICsJfQo+PiArCj4+ICsJdWtfbXV0ZXhfdW5sb2NrKCZw
X3Zub2RlLT52X2xvY2spOwo+PiArCj4+ICsJcF9kZW50cnkgPSBkZW50cnlfYWxsb2MoTlVMTCwg
cF92bm9kZSwgIi8iKTsKPj4gKwlpZiAoIXBfZGVudHJ5KSB7Cj4+ICsJCXJldCA9IC1FTk9NRU07
Cj4+ICsJCWdvdG8gRVJSX0FMTE9DX0RFTlRSWTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBGaWxsIG91
dCBuZWNlc3NhcnkgZmllbGRzLiAqLwo+PiArCXZmc19maWxlLT5mZCA9IHZmc19mZDsKPj4gKwl2
ZnNfZmlsZS0+Zl9mbGFncyA9IGZsYWdzOwo+PiArCXZmc19maWxlLT5mX2NvdW50ID0gMTsKPj4g
Kwl2ZnNfZmlsZS0+Zl9kYXRhID0gcGlwZV9maWxlOwo+PiArCXZmc19maWxlLT5mX2RlbnRyeSA9
IHBfZGVudHJ5Owo+PiArCXZmc19maWxlLT5mX3Zmc19mbGFncyA9IFVLX1ZGU0NPUkVfTk9QT1M7
Cj4+ICsKPj4gKwlwX3Zub2RlLT52X2RhdGEgPSBwaXBlX2ZpbGU7Cj4+ICsJcF92bm9kZS0+dl90
eXBlID0gVkZJRk87Cj4+ICsKPj4gKwkvKiBBc3NpZ24gdGhlIGZpbGUgZGVzY3JpcHRvcnMgdG8g
dGhlIGNvcnJlc3BvbmRpbmcgdmZzX2ZpbGUuICovCj4+ICsJcmV0ID0gdmZzY29yZV9pbnN0YWxs
X2ZkKHZmc19mZCwgdmZzX2ZpbGUpOwo+PiArCWlmIChyZXQpCj4+ICsJCWdvdG8gRVJSX1ZGU19J
TlNUQUxMOwo+PiArCj4+ICsJLyogT25seSB0aGUgZGVudHJ5IHNob3VsZCBob2xkIGEgcmVmZXJl
bmNlOyByZWxlYXNlIG91cnMgKi8KPj4gKwl2cmVsZShwX3Zub2RlKTsKPj4gKwo+PiArCXJldHVy
biB2ZnNfZmQ7Cj4+ICsKPj4gK0VSUl9WRlNfSU5TVEFMTDoKPj4gKwlkcmVsZShwX2RlbnRyeSk7
Cj4+ICtFUlJfQUxMT0NfREVOVFJZOgo+PiArCXZyZWxlKHBfdm5vZGUpOwo+PiArRVJSX0FMTE9D
X1ZOT0RFOgo+PiArCXVrX2ZyZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgdmZzX2ZpbGUpOwo+
PiArRVJSX01BTExPQ19WRlNfRklMRToKPj4gKwl2ZnNjb3JlX3B1dF9mZCh2ZnNfZmQpOwo+PiAr
RVJSX0VYSVQ6Cj4+ICsJVUtfQVNTRVJUKHJldCA8IDApOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9
Cj4+ICsKPj4gK2ludCBwaXBlKGludCBwaXBlZmRbMl0pCj4+ICt7Cj4+ICsJaW50IHJldCA9IDA7
Cj4+ICsJaW50IHJfZmQsIHdfZmQ7Cj4+ICsJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlOwo+
PiArCj4+ICsJLyogQWxsb2NhdGUgcGlwZSBpbnRlcm5hbCBzdHJ1Y3R1cmUuICovCj4+ICsJcGlw
ZV9maWxlID0gcGlwZV9maWxlX2FsbG9jKFBJUEVfTUFYX1NJWkUsIDApOwo+PiArCWlmICghcGlw
ZV9maWxlKSB7Cj4+ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gRVJSX0VYSVQ7Cj4+ICsJ
fQo+PiArCj4+ICsJcl9mZCA9IHBpcGVfZmRfYWxsb2MocGlwZV9maWxlLCBVS19GUkVBRCk7Cj4+
ICsJaWYgKHJfZmQgPCAwKQo+PiArCQlnb3RvIEVSUl9WRlNfSU5TVEFMTDsKPj4gKwo+PiArCXdf
ZmQgPSBwaXBlX2ZkX2FsbG9jKHBpcGVfZmlsZSwgVUtfRldSSVRFKTsKPj4gKwlpZiAod19mZCA8
IDApCj4+ICsJCWdvdG8gRVJSX1dfRkQ7Cj4+ICsKPj4gKwkvKiBGaWxsIHBpcGVmZCBmaWVsZHMu
ICovCj4+ICsJcGlwZWZkWzBdID0gcl9mZDsKPj4gKwlwaXBlZmRbMV0gPSB3X2ZkOwo+PiArCj4+
ICsJcmV0dXJuIHJldDsKPj4gKwo+PiArRVJSX1dfRkQ6Cj4+ICsJdmZzY29yZV9wdXRfZmQocl9m
ZCk7Cj4+ICtFUlJfVkZTX0lOU1RBTEw6Cj4+ICsJcGlwZV9maWxlX2ZyZWUocGlwZV9maWxlKTsK
Pj4gK0VSUl9FWElUOgo+PiArCVVLX0FTU0VSVChyZXQgPCAwKTsKPj4gKwlyZXR1cm4gcmV0Owo+
PiArfQo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Cj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdAo+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWwKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 11:16:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 11:16:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAuPs-0005sN-UR; Thu, 19 Sep 2019 11:16:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gY+g=XO=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iAuPr-0005sI-Qi
 for minios-devel@lists.xen.org; Thu, 19 Sep 2019 11:16:03 +0000
X-Inumbo-ID: db926330-dace-11e9-9656-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id db926330-dace-11e9-9656-12813bfff9fa;
 Thu, 19 Sep 2019 11:15:59 +0000 (UTC)
IronPort-SDR: XF7+XeHFqDioXpLtKaC/BAERgzlTfqTIDvlBHaf2VApo5uv4YucJr9Pk3/zESVKIm8Jfv0oiy/
 kqQhWvg955yw==
IronPort-PHdr: =?us-ascii?q?9a23=3AnGgeFR+FVfoFoP9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B21O4cTK2v8tzYMVDF4r011RmVBN6dsaoP0Lqe8/i5HzBZu9DZ6DFKWacPfi?=
 =?us-ascii?q?dNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV?=
 =?us-ascii?q?3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sAvcutMIjYd+Jao8xB?=
 =?us-ascii?q?jEqWZMd+hK2G9kP12ekwvi6suq4JJv7yFcsO89+sBdVqn3Y742RqFCAjQ8NG?=
 =?us-ascii?q?A16szrtR3dQgaK+3ARTGYYnAdWDgbc9B31UYv/vSX8tupmxSmVJtb2QqwuWT?=
 =?us-ascii?q?Sj9KhkVhnlgzoaOjEj8WHXjstwjL9HoB+kuhdyzZLYbJ2TOfFjZa7WY88USn?=
 =?us-ascii?q?RdUcZQTyxBA52zb40TD+oaIO1Uq5Dxq0YSoReiAAWhAv7kxD1ViX/sxaA00/?=
 =?us-ascii?q?ovHxzI0gIjGNwDq2jYoMnvOasOS+250LXEwDPeZP1Wwzf9743Ifwg/rPGLRr?=
 =?us-ascii?q?JwbcvRyU8yHA3Dk1WQsZHlNC6S2+sRtGib9PZgVeOpi2I9rwFxvyCvxto3h4?=
 =?us-ascii?q?bVnYIZ0EjE9Thiz4ovP924T1d2bNi5G5VTryGXL5Z6T8w/T21yuys3yqcKtY?=
 =?us-ascii?q?ClcCUI0pgqyQbTZ+GIfoSV+B7uV+acLS1miH9rdr+znQu+/Ee+xuD6S8K6yk?=
 =?us-ascii?q?xFrjBfndnJrn0N0hvT5dWZRfZl5Ueh3CqP1xjU6uFZPUA4jarbJIAlwr43jp?=
 =?us-ascii?q?cTr0HDETX3mEXylqOZal4k9vKw6+T6ebrqvIWcN4hshgH/NKQhhNC/DPwlPg?=
 =?us-ascii?q?UBQmSX4+ex2b358UHnXrlHjOc6n6fBvJDfP8sbp6q5AwFP0oYk7hayFyup0N?=
 =?us-ascii?q?MDnXkbLVJFfgiLj4z0O1HWPfD1Fuuwg0+2nDdz2vDJJaftAo/KLnTbirfuYa?=
 =?us-ascii?q?5961JAyAo01d1f44hbCqodL/LuQEP+r9vYDhAkPAOuxebqDNRw25gRWWKKGK?=
 =?us-ascii?q?CZMafSvUWU6eIoJumGfJUVtyrlK/g5+/7uimc0mVocfamv3JsXb2u4Eu17LE?=
 =?us-ascii?q?qHf3rjnNMBHHwOvgo/V+zqlEaCXSRcZnmsWaIw/DY7CJipDY3bXICinKSB3D?=
 =?us-ascii?q?unHp1Rfm1GFFSMHm31eIqcQfgMbj+dItV/nTwFT7SuUJUu2gyptA/71rpqNf?=
 =?us-ascii?q?HU+jEFtZ3+ztR6/fHclQoo+TxpF8SSyHuBT3tznjBAezhj2aF5oEtmj1uOz6?=
 =?us-ascii?q?V8q/hZDsBIoeNEVEE9L5GP4fZ9DoXZXRndf9HBbEu+X53yCjYqUtM3hdsTe1?=
 =?us-ascii?q?tVEM7klg3JmTCtVexG34eXDYA5p/qPl0P6INxwnjOfjPEs?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BiAAAqYoNdbAPjVY1lHAEBAQQBAQc?=
 =?us-ascii?q?EAQGBVgQBAQsBgW2BF1MgEiqNHokkiGiPT4FnCQEBASkRAQIBAYFLgnSDKDc?=
 =?us-ascii?q?GDgIDCQEBBQEBAQEBBQQBEw0WBIVfDII6KQGDFFIwHzNPgldLAYFqAyGvHDO?=
 =?us-ascii?q?FTIJFDWKBSYE0AYcvgzuCdj+BEYJdc4IagW8EEAuFfwSMbSSIEIEflgVBB4I?=
 =?us-ascii?q?lZQSGHIUUhBtUg3QngjYvQ4p+in2PUIhfiyCFMTeBejMac4JsCUcQFIEjATM?=
 =?us-ascii?q?DF4tJglw9AQExgQYBAY0aglQBAQ?=
X-IPAS-Result: =?us-ascii?q?A2BiAAAqYoNdbAPjVY1lHAEBAQQBAQcEAQGBVgQBAQsBg?=
 =?us-ascii?q?W2BF1MgEiqNHokkiGiPT4FnCQEBASkRAQIBAYFLgnSDKDcGDgIDCQEBBQEBA?=
 =?us-ascii?q?QEBBQQBEw0WBIVfDII6KQGDFFIwHzNPgldLAYFqAyGvHDOFTIJFDWKBSYE0A?=
 =?us-ascii?q?YcvgzuCdj+BEYJdc4IagW8EEAuFfwSMbSSIEIEflgVBB4IlZQSGHIUUhBtUg?=
 =?us-ascii?q?3QngjYvQ4p+in2PUIhfiyCFMTeBejMac4JsCUcQFIEjATMDF4tJglw9AQExg?=
 =?us-ascii?q?QYBAY0aglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,523,1559509200"; 
   d="scan'208";a="4822776"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 19 Sep 2019 14:15:56 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B866A1A60276;
 Thu, 19 Sep 2019 14:15:56 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id kyg4IaVweCxz; Thu, 19 Sep 2019 14:15:56 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9EB771A60278;
 Thu, 19 Sep 2019 14:15:56 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id JRKi6QZY4u6m; Thu, 19 Sep 2019 14:15:56 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 782021A60276;
 Thu, 19 Sep 2019 14:15:56 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Thu, 19 Sep 2019 14:15:45 +0300
Message-Id: <20190919111545.7610-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT PATCH v3] lib/vfscore: Add anonymous pipe
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro, Bogdan Lascu <lascu.bogdan96@gmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQm9nZGFuIExhc2N1IDxsYXNjdS5ib2dkYW45NkBnbWFpbC5jb20+CgpUaGlzIHBhdGNo
IGFkZHMgc3VwcG9ydCBmb3IgYW5vbnltb3VzIHBpcGVzLiBUaGUgdW5kZXJseWluZyBidWZmZXIg
aXMgYSByaW5nCmJ1ZmZlciB3aG9zZSBzaXplIG11c3QgYmUgYSBwb3dlciBvZiAyLiBUaGUgY3Jl
YXRpbmcgb2YgaXRzIGZpbGUgZGVzY3JpcHRvcnMKZm9sbG93cyBjbG9zZWx5IHRoZSBpbXBsZW1l
bnRhdGlvbiBmb3Igc29ja2V0cyBpbiBsd2lwIGdsdWUgY29kZS4KClNpZ25lZC1vZmYtYnk6IEJv
Z2RhbiBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBDb3N0
aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGxpYi92ZnNjb3JlL0NvbmZpZy51
ayAgICAgfCAgMTIgKy0KIGxpYi92ZnNjb3JlL01ha2VmaWxlLnVrICAgfCAgIDIgKwogbGliL3Zm
c2NvcmUvZXhwb3J0c3ltcy51ayB8ICAgMSArCiBsaWIvdmZzY29yZS9waXBlLmMgICAgICAgIHwg
NTczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5n
ZWQsIDU4NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliL3Zmc2NvcmUvcGlwZS5jCgpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvQ29uZmlnLnVrIGIv
bGliL3Zmc2NvcmUvQ29uZmlnLnVrCmluZGV4IDZjZjZjNjNhLi41ZGViN2QwNCAxMDA2NDQKLS0t
IGEvbGliL3Zmc2NvcmUvQ29uZmlnLnVrCisrKyBiL2xpYi92ZnNjb3JlL0NvbmZpZy51awpAQCAt
MSw2ICsxLDE2IEBACi1jb25maWcgTElCVkZTQ09SRQorbWVudWNvbmZpZyBMSUJWRlNDT1JFCiAJ
Ym9vbCAidmZzY29yZTogVkZTIENvcmUgSW50ZXJmYWNlIgogCWRlZmF1bHQgbgogCXNlbGVjdCBM
SUJOT0xJQkMgaWYgIUhBVkVfTElCQwogCXNlbGVjdCBMSUJVS0RFQlVHCiAJc2VsZWN0IExJQlVL
TE9DSworCitpZiBMSUJWRlNDT1JFCisKK2NvbmZpZyBMSUJWRlNDT1JFX1BJUEVfU0laRV9PUkRF
UgorCWludCAiUGlwZSBzaXplIG9yZGVyIgorCWRlZmF1bHQgMTYKKwloZWxwCisJCVRoZSBzaXpl
IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgZm9yIGFub255bW91cyBwaXBlcyBpcyAyXm9yZGVyLgor
CitlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsgYi9saWIvdmZzY29y
ZS9NYWtlZmlsZS51awppbmRleCA3OTg3OGYyNi4uZTM2YzkyMTcgMTAwNjQ0Ci0tLSBhL2xpYi92
ZnNjb3JlL01ha2VmaWxlLnVrCisrKyBiL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrCkBAIC0xNCw2
ICsxNCw4IEBAIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS90YXNrLmMK
IExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9sb29rdXAuYwogTElCVkZT
Q09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2ZvcHMuYwogTElCVkZTQ09SRV9TUkNT
LXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL3N1YnJfdWlvLmMKK0xJQlZGU0NPUkVfU1JDUy15ICs9
ICQoTElCVkZTQ09SRV9CQVNFKS9waXBlLmMKK0xJQlZGU0NPUkVfUElQRV9GTEFHUy15ICs9IC1X
bm8tY2FzdC1mdW5jdGlvbi10eXBlCiBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVf
QkFTRSkvZXh0cmEubGQKIAogCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVr
IGIvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51awppbmRleCA0NjE1NjA5OC4uNzAzOTI3MjEgMTAw
NjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsKKysrIGIvbGliL3Zmc2NvcmUvZXhw
b3J0c3ltcy51awpAQCAtMTA5LDMgKzEwOSw0IEBAIHZuX3NldHRpbWVzCiB2bl9zdGF0CiB2bl91
bmxvY2sKIHZmc19idXN5CitwaXBlCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9waXBlLmMgYi9s
aWIvdmZzY29yZS9waXBlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjRj
NTYxMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3Zmc2NvcmUvcGlwZS5jCkBAIC0wLDAgKzEs
NTczIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgor
ICogQXV0aG9yczogQm9nZGFuLUdlb3JnZSBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29t
PgorICogICAgICAgICAgQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KKyAqCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhU
UkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUgPHVrL2NvbmZp
Zy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
dmZzY29yZS9maWxlLmg+CisjaW5jbHVkZSA8dmZzY29yZS9mcy5oPgorI2luY2x1ZGUgPHZmc2Nv
cmUvbW91bnQuaD4KKyNpbmNsdWRlIDx2ZnNjb3JlL3Zub2RlLmg+CisjaW5jbHVkZSA8dWsvd2Fp
dC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisvKiBXZSB1c2UgdGhlIGRlZmF1bHQgc2l6
ZSBpbiBMaW51eCBrZXJuZWwgKi8KKyNkZWZpbmUgUElQRV9NQVhfU0laRQkoMSA8PCBDT05GSUdf
TElCVkZTQ09SRV9QSVBFX1NJWkVfT1JERVIpCisKK3N0cnVjdCBwaXBlX2J1ZiB7CisJLyogVGhl
IGJ1ZmZlciAqLworCWNoYXIgKmRhdGE7CisJLyogVGhlIGJ1ZmZlciBjYXBhY2l0eSwgYWx3YXlz
IGEgcG93ZXIgb2YgMiAqLworCXVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7CisJLyogUHJvZHVjZXIg
aW5kZXggKi8KKwl1bnNpZ25lZCBsb25nIHByb2Q7CisJLyogQ29uc3VtZXIgaW5kZXggKi8KKwl1
bnNpZ25lZCBsb25nIGNvbnM7CisKKwkvKiBSZWFkIGxvY2sgKi8KKwlzdHJ1Y3QgdWtfbXV0ZXgg
cmRsb2NrOworCS8qIFdyaXRlIGxvY2sgKi8KKwlzdHJ1Y3QgdWtfbXV0ZXggd3Jsb2NrOworCisJ
LyogUmVhZGVycyBxdWV1ZSAqLworCXN0cnVjdCB1a193YWl0cSByZHdxOworCS8qIFdyaXRlcnMg
cXVldWUgKi8KKwlzdHJ1Y3QgdWtfd2FpdHEgd3J3cTsKK307CisKKyNkZWZpbmUgUElQRV9CVUZf
SURYKGJ1ZiwgbikgICAgKChuKSAmICgoYnVmKS0+Y2FwYWNpdHkgLSAxKSkKKyNkZWZpbmUgUElQ
RV9CVUZfUFJPRF9JRFgoYnVmKSAgUElQRV9CVUZfSURYKChidWYpLCAoYnVmKS0+cHJvZCkKKyNk
ZWZpbmUgUElQRV9CVUZfQ09OU19JRFgoYnVmKSAgUElQRV9CVUZfSURYKChidWYpLCAoYnVmKS0+
Y29ucykKKworc3RydWN0IHBpcGVfZmlsZSB7CisJLyogUGlwZSBidWZmZXIgKi8KKwlzdHJ1Y3Qg
cGlwZV9idWYgKmJ1ZjsKKwkvKiBXcml0ZSByZWZlcmVuY2UgY291bnQgKi8KKwlpbnQgd19yZWZj
b3VudDsKKwkvKiBSZWFkIHJlZmVyZW5jZSBjb3VudCAqLworCWludCByX3JlZmNvdW50OworCS8q
IEZsYWdzICovCisJaW50IGZsYWdzOworfTsKKworCitzdGF0aWMgc3RydWN0IHBpcGVfYnVmICpw
aXBlX2J1Zl9hbGxvYyhpbnQgY2FwYWNpdHkpCit7CisJc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1
ZjsKKworCVVLX0FTU0VSVChQT1dFUl9PRl8yKGNhcGFjaXR5KSk7CisKKwlwaXBlX2J1ZiA9IG1h
bGxvYyhzaXplb2YoKnBpcGVfYnVmKSk7CisJaWYgKCFwaXBlX2J1ZikKKwkJcmV0dXJuIE5VTEw7
CisKKwlwaXBlX2J1Zi0+ZGF0YSA9IG1hbGxvYyhjYXBhY2l0eSk7CisJaWYgKCFwaXBlX2J1Zi0+
ZGF0YSkgeworCQlmcmVlKHBpcGVfYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcGlwZV9i
dWYtPmNhcGFjaXR5ID0gY2FwYWNpdHk7CisJcGlwZV9idWYtPmNvbnMgPSAwOworCXBpcGVfYnVm
LT5wcm9kID0gMDsKKwl1a19tdXRleF9pbml0KCZwaXBlX2J1Zi0+cmRsb2NrKTsKKwl1a19tdXRl
eF9pbml0KCZwaXBlX2J1Zi0+d3Jsb2NrKTsKKwl1a193YWl0cV9pbml0KCZwaXBlX2J1Zi0+cmR3
cSk7CisJdWtfd2FpdHFfaW5pdCgmcGlwZV9idWYtPndyd3EpOworCisJcmV0dXJuIHBpcGVfYnVm
OworfQorCit2b2lkIHBpcGVfYnVmX2ZyZWUoc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikKK3sK
KwlmcmVlKHBpcGVfYnVmLT5kYXRhKTsKKwlmcmVlKHBpcGVfYnVmKTsKK30KKworc3RhdGljIHVu
c2lnbmVkIGxvbmcgcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShjb25zdCBzdHJ1Y3QgcGlwZV9idWYg
KnBpcGVfYnVmKQoreworCXJldHVybiBwaXBlX2J1Zi0+cHJvZCAtIHBpcGVfYnVmLT5jb25zOwor
fQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShzdHJ1Y3Qg
cGlwZV9idWYgKnBpcGVfYnVmKQoreworCXJldHVybiBwaXBlX2J1Zi0+Y2FwYWNpdHkgLSBwaXBl
X2J1Zl9nZXRfYXZhaWxhYmxlKHBpcGVfYnVmKTsKK30KKworc3RhdGljIGludCBwaXBlX2J1Zl9j
YW5fd3JpdGUoc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikKK3sKKwlyZXR1cm4gcGlwZV9idWZf
Z2V0X2ZyZWVfc3BhY2UocGlwZV9idWYpID4gMDsKK30KKworc3RhdGljIGludCBwaXBlX2J1Zl9j
YW5fcmVhZChzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmKQoreworCXJldHVybiBwaXBlX2J1Zl9n
ZXRfYXZhaWxhYmxlKHBpcGVfYnVmKSA+IDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBp
cGVfYnVmX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYsCisJCXN0cnVjdCBpb3ZlYyAq
aW92ZWMsIHNpemVfdCBpb3ZlY19vZmYpCit7CisJdW5zaWduZWQgbG9uZyBwcm9kX2lkeCwgdG9f
d3JpdGU7CisJdm9pZCAqaW92ZWNfZGF0YSA9IGlvdmVjLT5pb3ZfYmFzZSArIGlvdmVjX29mZjsK
KwlzaXplX3QgaW92X2xlbiA9IGlvdmVjLT5pb3ZfbGVuIC0gaW92ZWNfb2ZmOworCisJcHJvZF9p
ZHggPSBQSVBFX0JVRl9QUk9EX0lEWChwaXBlX2J1Zik7CisJdG9fd3JpdGUgPSBNSU4ocGlwZV9i
dWZfZ2V0X2ZyZWVfc3BhY2UocGlwZV9idWYpLCBpb3ZfbGVuKTsKKwlpZiAodG9fd3JpdGUgPT0g
MCkKKwkJZ290byBvdXQ7CisKKwkvKiBDb3B5IGluIG9uZSBwaWVjZSAqLworCWlmIChwcm9kX2lk
eCArIHRvX3dyaXRlIDw9IHBpcGVfYnVmLT5jYXBhY2l0eSkKKwkJbWVtY3B5KHBpcGVfYnVmLT5k
YXRhICsgcHJvZF9pZHgsIGlvdmVjX2RhdGEsIHRvX3dyaXRlKTsKKworCWVsc2UgeworCQlpbnQg
Zmlyc3RfY29weV9ieXRlcywgc2Vjb25kX2NvcHlfYnl0ZXM7CisKKwkJLyogQ29weSB0aGUgZmly
c3QgcGFydCAqLworCQlmaXJzdF9jb3B5X2J5dGVzID0gcGlwZV9idWYtPmNhcGFjaXR5IC0gcHJv
ZF9pZHg7CisJCW1lbWNweShwaXBlX2J1Zi0+ZGF0YSArIHByb2RfaWR4LAorCQkJCWlvdmVjX2Rh
dGEsCisJCQkJZmlyc3RfY29weV9ieXRlcyk7CisKKwkJLyogQ29weSB0aGUgc2Vjb25kIHBhcnQg
Ki8KKwkJc2Vjb25kX2NvcHlfYnl0ZXMgPSBwcm9kX2lkeCArIHRvX3dyaXRlIC0gcGlwZV9idWYt
PmNhcGFjaXR5OworCQltZW1jcHkocGlwZV9idWYtPmRhdGEsCisJCQkJaW92ZWNfZGF0YSArIGZp
cnN0X2NvcHlfYnl0ZXMsCisJCQkJc2Vjb25kX2NvcHlfYnl0ZXMpOworCX0KKworCS8qIFVwZGF0
ZSBwcm9kdWNlciAqLworCXBpcGVfYnVmLT5wcm9kICs9IHRvX3dyaXRlOworCitvdXQ6CisJcmV0
dXJuIHRvX3dyaXRlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9yZWFkKHN0
cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYsCisJCXN0cnVjdCBpb3ZlYyAqaW92ZWMsIHNpemVfdCBp
b3ZlY19vZmYpCit7CisJdW5zaWduZWQgbG9uZyBjb25zX2lkeCwgdG9fcmVhZDsKKwl2b2lkICpp
b3ZlY19kYXRhID0gaW92ZWMtPmlvdl9iYXNlICsgaW92ZWNfb2ZmOworCXNpemVfdCBpb3ZfbGVu
ID0gaW92ZWMtPmlvdl9sZW4gLSBpb3ZlY19vZmY7CisKKwljb25zX2lkeCA9IFBJUEVfQlVGX0NP
TlNfSURYKHBpcGVfYnVmKTsKKwl0b19yZWFkID0gTUlOKHBpcGVfYnVmX2dldF9hdmFpbGFibGUo
cGlwZV9idWYpLCBpb3ZfbGVuKTsKKwlpZiAodG9fcmVhZCA9PSAwKQorCQlnb3RvIG91dDsKKwor
CS8qIENvcHkgaW4gb25lIHBpZWNlICovCisJaWYgKGNvbnNfaWR4ICsgdG9fcmVhZCA8PSBwaXBl
X2J1Zi0+Y2FwYWNpdHkpCisJCW1lbWNweShpb3ZlY19kYXRhLCBwaXBlX2J1Zi0+ZGF0YSArIGNv
bnNfaWR4LCB0b19yZWFkKTsKKworCWVsc2UgeworCQlpbnQgZmlyc3RfY29weV9ieXRlczsKKwkJ
aW50IHNlY29uZF9jb3B5X2J5dGVzOworCisJCS8qIENvcHkgdGhlIGZpcnN0IHBhcnQgKi8KKwkJ
Zmlyc3RfY29weV9ieXRlcyA9IHBpcGVfYnVmLT5jYXBhY2l0eSAtIHBpcGVfYnVmLT5jb25zOwor
CQltZW1jcHkoaW92ZWNfZGF0YSwKKwkJCQlwaXBlX2J1Zi0+ZGF0YSArIGNvbnNfaWR4LAorCQkJ
CWZpcnN0X2NvcHlfYnl0ZXMpOworCisJCS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0ICovCisJCXNl
Y29uZF9jb3B5X2J5dGVzID0gY29uc19pZHggKyB0b19yZWFkIC0gcGlwZV9idWYtPmNhcGFjaXR5
OworCQltZW1jcHkoaW92ZWNfZGF0YSArIGZpcnN0X2NvcHlfYnl0ZXMsCisJCQkJcGlwZV9idWYt
PmRhdGEsCisJCQkJc2Vjb25kX2NvcHlfYnl0ZXMpOworCX0KKworCS8qIFVwZGF0ZSBjb25zdW1l
ciAqLworCXBpcGVfYnVmLT5jb25zICs9IHRvX3JlYWQ7CisKK291dDoKKwlyZXR1cm4gdG9fcmVh
ZDsKK30KKworc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlX2FsbG9jKGludCBjYXBhY2l0eSwg
aW50IGZsYWdzKQoreworCXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZTsKKworCXBpcGVfZmls
ZSA9IG1hbGxvYyhzaXplb2YoKnBpcGVfZmlsZSkpOworCWlmICghcGlwZV9maWxlKQorCQlyZXR1
cm4gTlVMTDsKKworCXBpcGVfZmlsZS0+YnVmID0gcGlwZV9idWZfYWxsb2MoY2FwYWNpdHkpOwor
CWlmICghcGlwZV9maWxlLT5idWYpIHsKKwkJZnJlZShwaXBlX2ZpbGUpOworCQlyZXR1cm4gTlVM
TDsKKwl9CisKKwlwaXBlX2ZpbGUtPndfcmVmY291bnQgPSAxOworCXBpcGVfZmlsZS0+cl9yZWZj
b3VudCA9IDE7CisJcGlwZV9maWxlLT5mbGFncyA9IGZsYWdzOworCisJcmV0dXJuIHBpcGVfZmls
ZTsKK30KKwordm9pZCBwaXBlX2ZpbGVfZnJlZShzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUp
Cit7CisJcGlwZV9idWZfZnJlZShwaXBlX2ZpbGUtPmJ1Zik7CisJZnJlZShwaXBlX2ZpbGUpOwor
fQorCitzdGF0aWMgaW50IHBpcGVfd3JpdGUoc3RydWN0IHZub2RlICp2bm9kZSwKKwkJc3RydWN0
IHVpbyAqYnVmLCBpbnQgaW9mbGFnIF9fdW51c2VkKQoreworCXN0cnVjdCBwaXBlX2ZpbGUgKnBp
cGVfZmlsZSA9IHZub2RlLT52X2RhdGE7CisJc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZiA9IHBp
cGVfZmlsZS0+YnVmOworCWJvb2wgbm9uYmxvY2tpbmcgPSBmYWxzZTsgLyogVE9ETyBoYW5kbGUg
bm9uYmxvY2tpbmcgKi8KKwlib29sIGRhdGFfYXZhaWxhYmxlID0gdHJ1ZTsKKwlpbnQgdWlvX2lk
eCA9IDA7CisKKwlpZiAoIXBpcGVfZmlsZS0+cl9yZWZjb3VudCkgeworCQkvKiBUT0RPIGJlZm9y
ZSByZXR1cm5pbmcgdGhlIGVycm9yLCBzZW5kIGEgU0lHUElQRSBzaWduYWwgKi8KKwkJcmV0dXJu
IC1FUElQRTsKKwl9CisKKwl1a19tdXRleF9sb2NrKCZwaXBlX2J1Zi0+d3Jsb2NrKTsKKwl3aGls
ZSAoZGF0YV9hdmFpbGFibGUgJiYgdWlvX2lkeCA8IGJ1Zi0+dWlvX2lvdmNudCkgeworCQlzdHJ1
Y3QgaW92ZWMgKmlvdmVjID0gJmJ1Zi0+dWlvX2lvdlt1aW9faWR4XTsKKwkJdW5zaWduZWQgbG9u
ZyBvZmYgPSAwOworCisJCXdoaWxlIChvZmYgPCBpb3ZlYy0+aW92X2xlbikgeworCQkJdW5zaWdu
ZWQgbG9uZyB3cml0dGVuX2J5dGVzOworCisJCQl3cml0dGVuX2J5dGVzID0gcGlwZV9idWZfd3Jp
dGUocGlwZV9idWYsIGlvdmVjLCBvZmYpOworCQkJaWYgKHdyaXR0ZW5fYnl0ZXMgPT0gMCkgewor
CQkJCS8qIE5vIGRhdGEgKi8KKwkJCQlpZiAobm9uYmxvY2tpbmcpIHsKKwkJCQkJZGF0YV9hdmFp
bGFibGUgPSBmYWxzZTsKKwkJCQkJYnJlYWs7CisKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBXYWl0
IHVudGlsIGRhdGEgYXZhaWxhYmxlICovCisJCQkJCXdoaWxlICghcGlwZV9idWZfY2FuX3dyaXRl
KHBpcGVfYnVmKSkgeworCQkJCQkJdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+d3Jsb2NrKTsK
KwkJCQkJCXVrX3dhaXRxX3dhaXRfZXZlbnQoJnBpcGVfYnVmLT53cndxLAorCQkJCQkJCXBpcGVf
YnVmX2Nhbl93cml0ZShwaXBlX2J1ZikpOworCQkJCQkJdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYt
PndybG9jayk7CisJCQkJCX0KKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJCQkJLyogVXBkYXRlIGJ5
dGVzIHdyaXR0ZW5fYnl0ZXMuICovCisJCQkJYnVmLT51aW9fcmVzaWQgLT0gd3JpdHRlbl9ieXRl
czsKKworCQkJCW9mZiArPSB3cml0dGVuX2J5dGVzOworCisJCQkJLyogd2FrZSBzb21lIHJlYWRl
cnMgKi8KKwkJCQl1a193YWl0cV93YWtlX3VwKCZwaXBlX2J1Zi0+cmR3cSk7CisJCQl9CisJCX0K
KworCQl1aW9faWR4Kys7CisJfQorCXVrX211dGV4X3VubG9jaygmcGlwZV9idWYtPndybG9jayk7
CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwaXBlX3JlYWQoc3RydWN0IHZub2RlICp2
bm9kZSwKKwkJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxlLAorCQlzdHJ1Y3QgdWlv
ICpidWYsIGludCBpb2ZsYWcgX191bnVzZWQpCit7CisJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9m
aWxlID0gdm5vZGUtPnZfZGF0YTsKKwlzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmID0gcGlwZV9m
aWxlLT5idWY7CisJYm9vbCBub25ibG9ja2luZyA9ICh2ZnNjb3JlX2ZpbGUtPmZfZmxhZ3MgJiBP
X05PTkJMT0NLKTsKKwlib29sIGRhdGFfYXZhaWxhYmxlID0gdHJ1ZTsKKwlpbnQgdWlvX2lkeCA9
IDA7CisKKwl1a19tdXRleF9sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsKKwlpZiAobm9uYmxvY2tp
bmcgJiYgIXBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVfYnVmKSkgeworCQl1a19tdXRleF91bmxvY2so
JnBpcGVfYnVmLT5yZGxvY2spOworCQlyZXR1cm4gRUFHQUlOOworCX0KKworCXdoaWxlIChkYXRh
X2F2YWlsYWJsZSAmJiB1aW9faWR4IDwgYnVmLT51aW9faW92Y250KSB7CisJCXN0cnVjdCBpb3Zl
YyAqaW92ZWMgPSAmYnVmLT51aW9faW92W3Vpb19pZHhdOworCQl1bnNpZ25lZCBsb25nIG9mZiA9
IDA7CisKKwkJd2hpbGUgKG9mZiA8IGlvdmVjLT5pb3ZfbGVuKSB7CisJCQl1bnNpZ25lZCBsb25n
IHJlYWRfYnl0ZXM7CisKKwkJCXJlYWRfYnl0ZXMgPSBwaXBlX2J1Zl9yZWFkKHBpcGVfYnVmLCBp
b3ZlYywgb2ZmKTsKKwkJCWlmIChyZWFkX2J5dGVzID09IDApIHsKKwkJCQkvKiBObyBkYXRhICov
CisJCQkJaWYgKG5vbmJsb2NraW5nKSB7CisJCQkJCWRhdGFfYXZhaWxhYmxlID0gZmFsc2U7CisJ
CQkJCWJyZWFrOworCisJCQkJfSBlbHNlIHsKKwkJCQkJLyogV2FpdCB1bnRpbCBkYXRhIGF2YWls
YWJsZSAqLworCQkJCQl3aGlsZSAoIXBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVfYnVmKSkgeworCQkJ
CQkJdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsKKwkJCQkJCXVrX3dhaXRxX3dh
aXRfZXZlbnQoJnBpcGVfYnVmLT5yZHdxLAorCQkJCQkJCXBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVf
YnVmKSk7CisJCQkJCQl1a19tdXRleF9sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsKKwkJCQkJfQor
CQkJCX0KKworCQkJfSBlbHNlIHsKKwkJCQkvKiBVcGRhdGUgYnl0ZXMgcmVhZCAqLworCQkJCWJ1
Zi0+dWlvX3Jlc2lkIC09IHJlYWRfYnl0ZXM7CisKKwkJCQlvZmYgKz0gcmVhZF9ieXRlczsKKwor
CQkJCS8qIHdha2Ugc29tZSB3cml0ZXJzICovCisJCQkJdWtfd2FpdHFfd2FrZV91cCgmcGlwZV9i
dWYtPndyd3EpOworCQkJfQorCQl9CisKKwkJdWlvX2lkeCsrOworCX0KKwl1a19tdXRleF91bmxv
Y2soJnBpcGVfYnVmLT5yZGxvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGlw
ZV9jbG9zZShzdHJ1Y3Qgdm5vZGUgKnZub2RlLAorCQlzdHJ1Y3QgdmZzY29yZV9maWxlICp2ZnNj
b3JlX2ZpbGUpCit7CisJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlID0gdm5vZGUtPnZfZGF0
YTsKKworCVVLX0FTU0VSVCh2ZnNjb3JlX2ZpbGUtPmZfZGVudHJ5LT5kX3Zub2RlID09IHZub2Rl
KTsKKwlVS19BU1NFUlQodm5vZGUtPnZfcmVmY250ID09IDEpOworCisJaWYgKHZmc2NvcmVfZmls
ZS0+Zl9mbGFncyAmIFVLX0ZSRUFEKQorCQlwaXBlX2ZpbGUtPnJfcmVmY291bnQtLTsKKworCWlm
ICh2ZnNjb3JlX2ZpbGUtPmZfZmxhZ3MgJiBVS19GV1JJVEUpCisJCXBpcGVfZmlsZS0+d19yZWZj
b3VudC0tOworCisJaWYgKCFwaXBlX2ZpbGUtPnJfcmVmY291bnQgJiYgIXBpcGVfZmlsZS0+d19y
ZWZjb3VudCkKKwkJcGlwZV9maWxlX2ZyZWUocGlwZV9maWxlKTsKKworCXJldHVybiAwOworfQor
CitzdGF0aWMgaW50IHBpcGVfc2VlayhzdHJ1Y3Qgdm5vZGUgKnZub2RlIF9fdW51c2VkLAorCQkJ
c3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxlIF9fdW51c2VkLAorCQkJb2ZmX3Qgb2Zm
MSBfX3VudXNlZCwgb2ZmX3Qgb2ZmMiBfX3VudXNlZCkKK3sKKwllcnJubyA9IEVTUElQRTsKKwly
ZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcGlwZV9pb2N0bChzdHJ1Y3Qgdm5vZGUgKnZub2Rl
LAorCQlzdHJ1Y3QgdmZzY29yZV9maWxlICp2ZnNjb3JlX2ZpbGUgX191bnVzZWQsCisJCXVuc2ln
bmVkIGxvbmcgY29tLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmls
ZSA9IHZub2RlLT52X2RhdGE7CisJc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZiA9IHBpcGVfZmls
ZS0+YnVmOworCisJc3dpdGNoIChjb20pIHsKKwljYXNlIEZJT05SRUFEOgorCQl1a19tdXRleF9s
b2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsKKwkJKigoaW50ICopIGRhdGEpID0gcGlwZV9idWZfZ2V0
X2F2YWlsYWJsZShwaXBlX2J1Zik7CisJCXVrX211dGV4X3VubG9jaygmcGlwZV9idWYtPnJkbG9j
ayk7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwor
I2RlZmluZSBwaXBlX29wZW4gICAgICAgICgodm5vcF9vcGVuX3QpIHZmc2NvcmVfdm9wX2VpbnZh
bCkKKyNkZWZpbmUgcGlwZV9mc3luYyAgICAgICAoKHZub3BfZnN5bmNfdCkgdmZzY29yZV92b3Bf
bnVsbG9wKQorI2RlZmluZSBwaXBlX3JlYWRkaXIgICAgICgodm5vcF9yZWFkZGlyX3QpIHZmc2Nv
cmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgcGlwZV9sb29rdXAgICAgICAoKHZub3BfbG9va3VwX3Qp
IHZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgcGlwZV9jcmVhdGUgICAgICAoKHZub3BfY3Jl
YXRlX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgcGlwZV9yZW1vdmUgICAgICAoKHZu
b3BfcmVtb3ZlX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgcGlwZV9yZW5hbWUgICAg
ICAoKHZub3BfcmVuYW1lX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgcGlwZV9ta2Rp
ciAgICAgICAoKHZub3BfbWtkaXJfdCkgdmZzY29yZV92b3BfZWludmFsKQorI2RlZmluZSBwaXBl
X3JtZGlyICAgICAgICgodm5vcF9ybWRpcl90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCisjZGVmaW5l
IHBpcGVfZ2V0YXR0ciAgICAgKCh2bm9wX2dldGF0dHJfdCkgdmZzY29yZV92b3BfZWludmFsKQor
I2RlZmluZSBwaXBlX3NldGF0dHIgICAgICgodm5vcF9zZXRhdHRyX3QpIHZmc2NvcmVfdm9wX251
bGxvcCkKKyNkZWZpbmUgcGlwZV9pbmFjdGl2ZSAgICAoKHZub3BfaW5hY3RpdmVfdCkgdmZzY29y
ZV92b3BfZWludmFsKQorI2RlZmluZSBwaXBlX3RydW5jYXRlICAgICgodm5vcF90cnVuY2F0ZV90
KSB2ZnNjb3JlX3ZvcF9udWxsb3ApCisjZGVmaW5lIHBpcGVfbGluayAgICAgICAgKCh2bm9wX2xp
bmtfdCkgdmZzY29yZV92b3BfZXBlcm0pCisjZGVmaW5lIHBpcGVfY2FjaGUgICAgICAgKCh2bm9w
X2NhY2hlX3QpIE5VTEwpCisjZGVmaW5lIHBpcGVfcmVhZGxpbmsgICAgKCh2bm9wX3JlYWRsaW5r
X3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKKyNkZWZpbmUgcGlwZV9zeW1saW5rICAgICAoKHZub3Bf
c3ltbGlua190KSB2ZnNjb3JlX3ZvcF9lcGVybSkKKyNkZWZpbmUgcGlwZV9mYWxsb2NhdGUgICAo
KHZub3BfZmFsbG9jYXRlX3QpIHZmc2NvcmVfdm9wX251bGxvcCkKKworc3RhdGljIHN0cnVjdCB2
bm9wcyBwaXBlX3Zub3BzID0geworCS52b3Bfb3BlbiAgICAgID0gcGlwZV9vcGVuLAorCS52b3Bf
Y2xvc2UgICAgID0gcGlwZV9jbG9zZSwKKwkudm9wX3JlYWQgICAgICA9IHBpcGVfcmVhZCwKKwku
dm9wX3dyaXRlICAgICA9IHBpcGVfd3JpdGUsCisJLnZvcF9zZWVrICAgICAgPSBwaXBlX3NlZWss
CisJLnZvcF9pb2N0bCAgICAgPSBwaXBlX2lvY3RsLAorCS52b3BfZnN5bmMgICAgID0gcGlwZV9m
c3luYywKKwkudm9wX3JlYWRkaXIgICA9IHBpcGVfcmVhZGRpciwKKwkudm9wX2xvb2t1cCAgICA9
IHBpcGVfbG9va3VwLAorCS52b3BfY3JlYXRlICAgID0gcGlwZV9jcmVhdGUsCisJLnZvcF9yZW1v
dmUgICAgPSBwaXBlX3JlbW92ZSwKKwkudm9wX3JlbmFtZSAgICA9IHBpcGVfcmVuYW1lLAorCS52
b3BfbWtkaXIgICAgID0gcGlwZV9ta2RpciwKKwkudm9wX3JtZGlyICAgICA9IHBpcGVfcm1kaXIs
CisJLnZvcF9nZXRhdHRyICAgPSBwaXBlX2dldGF0dHIsCisJLnZvcF9zZXRhdHRyICAgPSBwaXBl
X3NldGF0dHIsCisJLnZvcF9pbmFjdGl2ZSAgPSBwaXBlX2luYWN0aXZlLAorCS52b3BfdHJ1bmNh
dGUgID0gcGlwZV90cnVuY2F0ZSwKKwkudm9wX2xpbmsgICAgICA9IHBpcGVfbGluaywKKwkudm9w
X2NhY2hlICAgICA9IHBpcGVfY2FjaGUsCisJLnZvcF9mYWxsb2NhdGUgPSBwaXBlX2ZhbGxvY2F0
ZSwKKwkudm9wX3JlYWRsaW5rICA9IHBpcGVfcmVhZGxpbmssCisJLnZvcF9zeW1saW5rICAgPSBw
aXBlX3N5bWxpbmsKK307CisKKyNkZWZpbmUgcGlwZV92Z2V0ICAoKHZmc29wX3ZnZXRfdCkgdmZz
Y29yZV92b3BfbnVsbG9wKQorCitzdGF0aWMgc3RydWN0IHZmc29wcyBwaXBlX3Zmc29wcyA9IHsK
KwkudmZzX3ZnZXQgPSBwaXBlX3ZnZXQsCisJLnZmc192bm9wcyA9ICZwaXBlX3Zub3BzCit9Owor
CitzdGF0aWMgdWludDY0X3QgcF9pbm9kZTsKKworLyoKKyAqIEJvZ3VzIG1vdW50IHBvaW50IHVz
ZWQgYnkgYWxsIHNvY2tldHMKKyAqLworc3RhdGljIHN0cnVjdCBtb3VudCBwX21vdW50ID0gewor
CS5tX29wID0gJnBpcGVfdmZzb3BzCit9OworCitzdGF0aWMgaW50IHBpcGVfZmRfYWxsb2Moc3Ry
dWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlLCBpbnQgZmxhZ3MpCit7CisJaW50IHJldCA9IDA7CisJ
aW50IHZmc19mZDsKKwlzdHJ1Y3QgdmZzY29yZV9maWxlICp2ZnNfZmlsZSA9IE5VTEw7CisJc3Ry
dWN0IGRlbnRyeSAqcF9kZW50cnk7CisJc3RydWN0IHZub2RlICpwX3Zub2RlOworCisJLyogUmVz
ZXJ2ZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyICovCisJdmZzX2ZkID0gdmZzY29yZV9hbGxvY19m
ZCgpOworCWlmICh2ZnNfZmQgPCAwKSB7CisJCXJldCA9IC1FTkZJTEU7CisJCWdvdG8gRVJSX0VY
SVQ7CisJfQorCisJLyogQWxsb2NhdGUgZmlsZSwgZGVudHJ5LCBhbmQgdm5vZGUgKi8KKwl2ZnNf
ZmlsZSA9IGNhbGxvYygxLCBzaXplb2YoKnZmc19maWxlKSk7CisJaWYgKCF2ZnNfZmlsZSkgewor
CQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIEVSUl9NQUxMT0NfVkZTX0ZJTEU7CisJfQorCisJcmV0
ID0gdmZzY29yZV92Z2V0KCZwX21vdW50LCBwX2lub2RlKyssICZwX3Zub2RlKTsKKwlVS19BU1NF
UlQocmV0ID09IDApOyAvKiB3ZSBzaG91bGQgbm90IGZpbmQgaXQgaW4gY2FjaGUgKi8KKworCWlm
ICghcF92bm9kZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIEVSUl9BTExPQ19WTk9ERTsK
Kwl9CisKKwl1a19tdXRleF91bmxvY2soJnBfdm5vZGUtPnZfbG9jayk7CisKKwlwX2RlbnRyeSA9
IGRlbnRyeV9hbGxvYyhOVUxMLCBwX3Zub2RlLCAiLyIpOworCWlmICghcF9kZW50cnkpIHsKKwkJ
cmV0ID0gLUVOT01FTTsKKwkJZ290byBFUlJfQUxMT0NfREVOVFJZOworCX0KKworCS8qIEZpbGwg
b3V0IG5lY2Vzc2FyeSBmaWVsZHMuICovCisJdmZzX2ZpbGUtPmZkID0gdmZzX2ZkOworCXZmc19m
aWxlLT5mX2ZsYWdzID0gZmxhZ3M7CisJdmZzX2ZpbGUtPmZfY291bnQgPSAxOworCXZmc19maWxl
LT5mX2RhdGEgPSBwaXBlX2ZpbGU7CisJdmZzX2ZpbGUtPmZfZGVudHJ5ID0gcF9kZW50cnk7CisJ
dmZzX2ZpbGUtPmZfdmZzX2ZsYWdzID0gVUtfVkZTQ09SRV9OT1BPUzsKKworCXBfdm5vZGUtPnZf
ZGF0YSA9IHBpcGVfZmlsZTsKKwlwX3Zub2RlLT52X3R5cGUgPSBWRklGTzsKKworCS8qIEFzc2ln
biB0aGUgZmlsZSBkZXNjcmlwdG9ycyB0byB0aGUgY29ycmVzcG9uZGluZyB2ZnNfZmlsZS4gKi8K
KwlyZXQgPSB2ZnNjb3JlX2luc3RhbGxfZmQodmZzX2ZkLCB2ZnNfZmlsZSk7CisJaWYgKHJldCkK
KwkJZ290byBFUlJfVkZTX0lOU1RBTEw7CisKKwkvKiBPbmx5IHRoZSBkZW50cnkgc2hvdWxkIGhv
bGQgYSByZWZlcmVuY2U7IHJlbGVhc2Ugb3VycyAqLworCXZyZWxlKHBfdm5vZGUpOworCisJcmV0
dXJuIHZmc19mZDsKKworRVJSX1ZGU19JTlNUQUxMOgorCWRyZWxlKHBfZGVudHJ5KTsKK0VSUl9B
TExPQ19ERU5UUlk6CisJdnJlbGUocF92bm9kZSk7CitFUlJfQUxMT0NfVk5PREU6CisJZnJlZSh2
ZnNfZmlsZSk7CitFUlJfTUFMTE9DX1ZGU19GSUxFOgorCXZmc2NvcmVfcHV0X2ZkKHZmc19mZCk7
CitFUlJfRVhJVDoKKwlVS19BU1NFUlQocmV0IDwgMCk7CisJcmV0dXJuIHJldDsKK30KKworaW50
IHBpcGUoaW50IHBpcGVmZFsyXSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgcl9mZCwgd19mZDsK
KwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGU7CisKKwkvKiBBbGxvY2F0ZSBwaXBlIGludGVy
bmFsIHN0cnVjdHVyZS4gKi8KKwlwaXBlX2ZpbGUgPSBwaXBlX2ZpbGVfYWxsb2MoUElQRV9NQVhf
U0laRSwgMCk7CisJaWYgKCFwaXBlX2ZpbGUpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBF
UlJfRVhJVDsKKwl9CisKKwlyX2ZkID0gcGlwZV9mZF9hbGxvYyhwaXBlX2ZpbGUsIFVLX0ZSRUFE
KTsKKwlpZiAocl9mZCA8IDApCisJCWdvdG8gRVJSX1ZGU19JTlNUQUxMOworCisJd19mZCA9IHBp
cGVfZmRfYWxsb2MocGlwZV9maWxlLCBVS19GV1JJVEUpOworCWlmICh3X2ZkIDwgMCkKKwkJZ290
byBFUlJfV19GRDsKKworCS8qIEZpbGwgcGlwZWZkIGZpZWxkcy4gKi8KKwlwaXBlZmRbMF0gPSBy
X2ZkOworCXBpcGVmZFsxXSA9IHdfZmQ7CisKKwlyZXR1cm4gcmV0OworCitFUlJfV19GRDoKKwl2
ZnNjb3JlX3B1dF9mZChyX2ZkKTsKK0VSUl9WRlNfSU5TVEFMTDoKKwlwaXBlX2ZpbGVfZnJlZShw
aXBlX2ZpbGUpOworRVJSX0VYSVQ6CisJVUtfQVNTRVJUKHJldCA8IDApOworCXJldHVybiByZXQ7
Cit9Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 11:57:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 11:57:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAv49-0006Uw-Q1; Thu, 19 Sep 2019 11:57:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ts4K=XO=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iAv48-0006Uj-3F
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 11:57:40 +0000
X-Inumbo-ID: ad396118-dad4-11e9-9656-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id ad396118-dad4-11e9-9656-12813bfff9fa;
 Thu, 19 Sep 2019 11:57:38 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 672BE28;
 Thu, 19 Sep 2019 04:57:38 -0700 (PDT)
Received: from [10.1.196.50] (e108454-lin.cambridge.arm.com [10.1.196.50])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 472E63F67D;
 Thu, 19 Sep 2019 04:57:37 -0700 (PDT)
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
Date: Thu, 19 Sep 2019 12:57:36 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksCgpPbiAxNy8wOS8yMDE5IDEyOjU1LCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IEhlbGxv
LAo+IAo+IE9uIDkvMTcvMTkgMTI6NDQgUE0sIEp1bGllbiBHcmFsbCB3cm90ZToKPj4gSGksCj4+
Cj4+IE9uIDkvMTcvMTkgMTE6MDggQU0sIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4+Pgo+Pj4g
T24gOS8xNy8xOSAxMToxNyBBTSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+Pj4+Cj4+Pj4KPj4+PiBP
biA5LzE3LzE5IDk6NDQgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3Rl
Ogo+Pj4+PiBIaSBKdWxpZW4KPj4+Pgo+Pj4+IEhpLAo+Pj4+Cj4+Pj4+PiAtLS0tLU9yaWdpbmFs
IE1lc3NhZ2UtLS0tLQo+Pj4+Pj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJt
LmNvbT4KPj4+Pj4+IFNlbnQ6IDIwMTnlubQ55pyIMTfml6UgMTY6MzkKPj4+Pj4+IFRvOiBKdXN0
aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+OyBTYW50aWFn
bwo+Pj4+Pj4gUGFnYW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1PjsgbWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnOwo+Pj4+Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3Vlbnpl
ckBuZWNsYWIuZXU+OyBTaGFyYW4gU2FudGhhbmFtCj4+Pj4+PiA8U2hhcmFuLlNhbnRoYW5hbUBu
ZWNsYWIuZXU+Cj4+Pj4+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2Fs
eS5YaW5AYXJtLmNvbT47IFdlaSBDaGVuIChBcm0KPj4+Pj4+IFRlY2hub2xvZ3kgQ2hpbmEpIDxX
ZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcgV3UgKEFybSBUZWNobm9sb2d5Cj4+Pj4+PiBDaGlu
YSkgPEppYW55b25nLld1QGFybS5jb20+OyBuZCA8bmRAYXJtLmNvbT4KPj4+Pj4+IFN1YmplY3Q6
IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3Rl
ciBJUlEKPj4+Pj4+IGZvciBhcmNoX3RpbWVyCj4+Pj4+Pgo+Pj4+Pj4gT24gOS8xNy8xOSA4OjAx
IEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90ZToKPj4+Pj4+PiBIaSBK
dWxpZW4gKHdlbGNvbWUgYmFjayBmcm9tIGhvbGlkYXkg8J+YiiApCj4+Pj4+Pgo+Pj4+Pj4gSGks
Cj4+Pj4+Pgo+Pj4+Pj4gVGhhbmtzIDopLgo+Pj4+Pj4KPj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBN
ZXNzYWdlLS0tLS0KPj4+Pj4+Pj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJt
LmNvbT4KPj4+Pj4+Pj4gU2VudDogMjAxOeW5tDnmnIgxN+aXpSAzOjUzCj4+Pj4+Pj4+IFRvOiBK
dXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+OyBTYW50
aWFnbwo+Pj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+OyBtaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7Cj4+Pj4+Pj4+IFNpbW9uIEt1ZW56ZXIgPHNpbW9u
Lmt1ZW56ZXJAbmVjbGFiLmV1PjsgU2hhcmFuIFNhbnRoYW5hbQo+Pj4+Pj4+PiA8U2hhcmFuLlNh
bnRoYW5hbUBuZWNsYWIuZXU+Cj4+Pj4+Pj4+IENjOiBLYWx5IFhpbiAoQXJtIFRlY2hub2xvZ3kg
Q2hpbmEpIDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpIENoZW4KPj4+Pj4+IChBcm0KPj4+Pj4+Pj4g
VGVjaG5vbG9neSBDaGluYSkgPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtCj4+
Pj4+PiBUZWNobm9sb2d5Cj4+Pj4+Pj4+IENoaW5hKSA8SmlhbnlvbmcuV3VAYXJtLmNvbT4KPj4+
Pj4+Pj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSHYzIDUvN10gcGxhdC9jb21tb246IEZp
bmQgYW5kIHJlZ2lzdGVyCj4+Pj4+PiBJUlEKPj4+Pj4+Pj4gZm9yIGFyY2hfdGltZXIKPj4+Pj4+
Pj4KPj4+Pj4+Pj4gT24gOS8xNi8xOSA4OjUyIEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5
IENoaW5hKSB3cm90ZToKPj4+Pj4+Pj4+IEhpwqAgU2FudGlhZ28KPj4+Pj4+Pj4KPj4+Pj4+Pj4g
SGkgYWxsLAo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBAU2FudGlhZ28sIGl0IGlzIHF1aXRlIGRpZmZpY3Vs
dCB0byBmb2xsb3cgdGhlIHRocmVhZCB3aGVuIHlvdSBzdGFydAo+Pj4+Pj4+PiB5b3VyIGFuc3dl
ciB3aXRoICJDT01NRU5UIi4gTWF5IEkgYXNrIHlvdSB0byBjb25maWd1cmUgeW91ciBlLW1haWwK
Pj4+Pj4+Pj4gY2xpZW50IHRvIHF1b3RlIHByb3Blcmx5IChpLmUgPik/Cj4+Pj4+Pj4+Cj4+Pj4+
Pj4+IEZ1cnRoZXJtb3JlLCBkaXNjbGFpbWVyIGZvb3RlciBzaG91bGQgYmUgYXZvaWRlZCBvbiB0
aGUgbWFpbGluZyBsaXN0Lgo+Pj4+Pj4+PiBZb3UgYXJlIGJhc2ljYWxseSBzYXlpbmcgdGhpcyBp
cyBjb25maWRlbnRpYWwgYnV0IHlvdSBzZW5kIHRvIGV2ZXJ5b25lCj4+Pj4+Pj4+IChtYWlsaW5n
IGxpc3QgYXJlIGFyY2hpdmVkKS4uLgo+Pj4+Pj4+IE9LCj4+Pj4+Pgo+Pj4+Pj4gSXQgd2Fzbid0
IGRpcmVjdGVkIHRvIHlvdSA7KS4KPj4+Pj4+Cj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFsuLi5dCj4+Pj4+
Pj4+Cj4+Pj4+Pj4+Pj4gQ09NTUVOVDogVGhlcmUgaXMgbm90aGluZyB0aGF0IHdlIHdvdWxkIGxp
a2UgdG8gZG8gaGVyZT8gTm90IGV2ZW4KPj4+Pj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/IEFzIHRo
ZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUgY291bnRlcgo+Pj4+Pj4+PiBvdmVyZmxv
d3MKPj4+Pj4+Pj4+PiB3ZSB3b3VsZCBnZXQgYSBuZXcgaW50ZXJydXB0IG90aGVyd2lzZSAoYWx0
aG91Z2ggdGhlIG92ZXJmbG93IGNvdWxkCj4+Pj4+Pj4+Pj4gaGFwcGVuIGluIGEgdmVyeSB2ZXJ5
IGxvbmcgdGltZSwgcmlnaHQ/KQo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEluIHByZXZpb3VzIHZlcnNp
b24sIHdlIGFkZGVkIGEgZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpIGluCj4+Pj4+Pj4+PiBnZW5l
cmljX3RpbWVyX2lycV9oYW5kbGVyLiBCdXQgYXMgcGVyIHRoZSBzdWdnZXN0aW9uIFsxXSBmcm9t
IEp1bGllbiwKPj4+Pj4+IHdlCj4+Pj4+Pj4+PiByZW1vdmVkIGl0LiBCZXNpZGVzLCB3ZSByZWZl
cnJlZCB0byB0aGUgbWluaW9zIGxvZ2ljIGF0IFsyXSwgaXQgb25seSAKPj4+Pj4+Pj4+IGNhbGxl
ZAo+Pj4+Pj4+Pj4gdW5tYXNrIGFuZCBtYXNrIGluIGJsb2NrX2RvbWFpbiAod2hpY2ggaXMgZXF1
aXZhbGVudCB0byB1bmlrcmFmdCdzCj4+Pj4+Pj4+PiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykK
Pj4+Pj4+Pj4KPj4+Pj4+Pj4gTG9va2luZyBhdCBteSBjb21tZW50cyBhZ2FpbiwgSSBhbSBub3Qg
c3VyZSB3aGVyZSBJIHN1Z2dlc3RlZCB0bwo+Pj4+Pj4gcmVtb3ZlCj4+Pj4+Pj4+IGdlbmVyaWNf
dGltZXJfbWFza19pcnEoKS4uLiBDYW4geW91IGV4cGFuZCBpdD8KPj4+Pj4+PiBPa2F5Li4uIHNv
cnJ5IGZvciBteSBtaXN0YWtlcy4gSSB3aWxsIGFkZCBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkg
YmFjay4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gRldJVywgdGhlIHR3byBtYWluIGNvbW1lbnRzIG9uIHRo
ZSBwcmV2aW91cyB2ZXJzaW9ucyB3ZXJlOgo+Pj4+Pj4+PiDCoMKgwqDCoMKgIDEpIGlzYigpIHNo
b3VsZCBiZSBhZGRlZCBhZnRlciB1cGRhdGluZyB0aGUgc3lzdGVtIHJlZ2lzdGVyIHRvCj4+Pj4+
Pj4+IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gc3lzdGVtIGlzIHN5bmNocm9uaXplZAo+Pj4+Pj4+
PiDCoMKgwqDCoMKgIDIpIFRoaXMgaXMgY29tbW9uIGNvZGUgYmV0d2VlbiBhcm0zMiBhbmQgYXJt
NjQuIEJ1dCB0aGUgc3lzdGVtCj4+Pj4+Pj4+IHJlZ2lzdGVyIG5hbWUgYXJlIGFybTY0Li4uIEFj
Y2Vzc2VzIHNob3VsZCBiZSBzdHViIGluIGFyY2gtc3BlY2lmaWMKPj4+Pj4+Pj4gaGVhZGVyIHNv
IHRoZSBjb2RlIGNhbiB3b3JrIGZvciBib3RoIGFybTMyIGFuZCBhcm02NC4KPj4+Pj4+PiBJIHJl
bmFtZWQgcGxhdC9jb21tb24vYXJtL3RpbWUuYyB0byBwbGF0L2NvbW1vbi9hcm0vdGltZV9hcm02
NC5jCj4+Pj4+Pj4gU2VlbXMgdGhhdCBpcyBub3QgZW5vdWdoIGZvciB5b3U/wqAgSWYgbm8sIEkg
aGF2ZSBubyBvYmplY3Rpb25zIHRvIG1ha2UKPj4+Pj4+PiBhIHN0dWLCoCBmb3IgYXJtMzIuCj4+
Pj4+Pgo+Pj4+Pj4gV2VsbCwgdGhlIG9ubHkgYml0cyBhcm02NCBzcGVjaWZpY3MgaW4gdGhpcyBm
aWxlIGFyZSB0aGUgYWNjZXNzIHRvIHRoZQo+Pj4+Pj4gc3lzdGVtIHJlZ2lzdGVycy4gU28gcmVu
YW1pbmcgdG8gdGltZV9hcm02NC5jIHNlZW1zIGEgYml0IG92ZXJraWxsLi4uCj4+Pj4+Pgo+Pj4+
Pj4gSWYgdGhlcmUgYXJlIHBsYW4gdG8gbWFrZSBhcm0zMiBhIGNvcnJlY3QgcG9ydCBvbiBVbmlr
cmFmdCwgdGhlbgo+Pj4+Pj4gc3BsaXR0aW5nIHRoZSBjb2RlIHdvdWxkIGJlIHRoZSBiZXN0LiBJ
ZiB0aGVyZSBhcmUgbm8gcGxhbiB0byBnZXQgYXJtMzIsCj4+Pj4+PiB0aGVuIG1heWJlIHlvdSBz
aG91bGQgdGhpbmsgb2Yga2lsbGluZyBpdCBjb21wbGV0ZWx5Lgo+Pj4+Pgo+Pj4+PiBBcm0zMiB4
ZW4gcGxhdCBpcyBpbml0aWFsbHkgc3VwcG9ydGVkIGJ1dCBubyBvbmXCoCBoYXMgdG91Y2hlZCB0
aGF0IGZvciBhIGxvbmcKPj4+Pj4gdGltZS4gQ3VycmVudGx5IGxldOKAmXMgZm9jdXMgb24gYXJt
NjQga3ZtIHBsYXQgb25seS4gSWYgdGhlIHJlcXVpcmVtZW50cyAKPj4+Pj4gY2hhbmdlcywKPj4+
Pj4gd2UgY2FuIHN1cHBvcnQgYXJtMzIgYWRkaXRpb25hbGx5LiBXaGF0IGRvIHlvdSB0aGluayBh
Ym91dCBpdD8KPj4+Pgo+Pj4+IEkgYW0gbm90IGFza2luZyB0byBpbXBsZW1lbnQgYXJtMzIsIEkg
YW0gb25seSBzdWdnZXN0aW5nIHRvIHRyeSB0byBzcGxpdCB0aGUgCj4+Pj4gY29kZSByYXRoZXIg
dGhhbiB0cnlpbmcgdG8gbWl4IGNvbW1vbiBjb2RlIHZzIGFyY2ggc3BlY2lmaWMgY29kZSBpbiAK
Pj4+PiBwbGF0L2NvbW1vbi9hcm0uIFRoYXQgZGlyZWN0b3J5IGluIHBhcnRpY3VsYXIgaXMgbG9v
a2luZyBtZXNzaWVyIGFuZCBtZXNzaWVyIAo+Pj4+IGFzIG5ldyBzZXJpZXMgYXJlIHBvc3RlZC4K
Pj4+Cj4+PiBJIGFncmVlIHdpdGggSnVsaWVuIGl0IGlzIGJldHRlciB0byBzcGxpdCB0aGUgYXJt
MzIgY29kZSBmcm9tIHRoZSBhcm02NCBjb2RlLiAKPj4+IE15IHN1Z2dlc3Rpb24gd291bGQgYmUK
Pj4+Cj4+PiBwbGF0L2NvbW1vbi9hcm0gZm9yIDMyLWJpdCBjb2RlCj4+Pgo+Pj4gcGxhdC9jb21t
b24vYXJtNjQgZm9yIHRoZSA2NC1iaXQuCj4+Cj4+IFdlbGwgeW91IGNhbiBzaGFyZSBhIGxvdCBv
ZiBjb2RlIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQuIElmIHdlIHRha2UgdGhlIAo+PiBleGFt
cGxlIG9mIHRoZSBhcmNoIHRpbWVyLCB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSB3YXkgdG8g
YWNjZXNzIHRoZSAKPj4gcmVnaXN0ZXJzIChpLmUuIHN5c3RlbSByZWdpc3RlcnMgdnMgY28tcHJv
Y2Vzc29yIHJlZ2lzdGVycykuCj4gCj4gU2luY2UgaXQgaXMgcHJpbWFyaWx5IGFib3V0IHRoZSBj
byBwcm9jZXNzb3IgYW5kIHN5c3RlbSByZWdpc3Rlci4gSG93IGFib3V0IAo+IHB1c2hpbmcgdGhl
IGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgcmVzcGVjdGl2ZSBoZWFkZXIuCgpGb3IgdGhlIHRpbWVy
IHRoaXMgaXMgbW9zdGx5IHN5c3RlbSByZWdpc3RlciwgYnV0IHRoZXJlIGFyZS93aWxsIGJlIHNw
ZWNpZmljIAphcm02NC9hcm0zMiBjb2RlIChzdWNoIGFzIGFzc2VtYmx5IGZpbGUpLiBTbyBJIHdv
dWxkIHJlY29tbWVuZCB0byBjcmVhdGUgYSAKZGlyZWN0b3J5IHRyZWUgdGhhdCBhbGxvd3Mgc3Vj
aCBzcGxpdC4KCj4gCj4gcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vdGltZS5oCj4gCj4gIMKgwqDC
oCBUaGUgaGVhZGVyIGluY2x1ZGVzIGFyY2ggc3BlY2lmaWMgaGVhZGVyIGZpbGVzLgo+IAo+IHBs
YXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUuaAo+IAo+ICDCoMKgIFByb3ZpZGVzIGEg
YXJjaGl0ZWN0dXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciByZWFkaW5nIHN5c3RlbSBy
ZWdpc3RlcnMgCj4gd2hpbGUgcHJvdmlkaW5nIGEgbWFjcm8gZGVmaW5pdGlvbiBmb3IgcmVhZGlu
ZyByZWdpc3RlciBsaWtlOgo+IAo+ICDCoCNkZWZpbmXCoCBlbDBfY250dl9jdGxfZ2V0wqAgU1lT
UkVHX1JFQUQzMihjbnR2X2N0bF9lbDApCj4gCj4gIMKgI2RlZmluZcKgIGVsMF9jbnR2X2N0bF9z
ZXQodmFsKSBTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsIHZhbCkKClRoZXJlIGFyZSBkb3pl
bnMgb2Ygc3lzdGVtIHJlZ2lzdGVycywgc28gSSBhbSBub3Qgc3VyZSB5b3Ugd291bGQgd2FudCB0
byBjcmVhdGUgCmhlbHBlciBmb3IgZXZlcnkgb2YgdGhlbS4gSXQgd291bGQgYmUgYmVzdCBpZiB5
b3UgZmluZCBhIHdheSB0byBhYnN0cmFjdCB0aGlzLgoKRm9yIGluc3RhbmNlLCBvbiBYZW4sIHdl
IGNob3NlIHRvIHVzZSB0aGUgdXBwZXJjYXNlIHZlcnNpb24gb2YgdGhlIEFBcmNoNjQgCnN5c3Rl
bSByZWdpc3RlciBuYW1lLiBGb3IgQUFyY2gzMiwgdGhleSB3aWxsIGJlIGFsaWFzZWQgdG8gdGhl
IEFBcmNoNjQgb25lLgoKT24gYSBzaWRlIG5vdGUsIHRoZXJlIGFyZSBubyBzdWNoIDMyLWJpdCBz
eXN0ZW0gcmVnaXN0ZXIuIFRoZXkgYXJlIGFsd2F5cyAKNjQtYml0LCBpdCBqdXN0IGhhcHBlbnMg
dGhhdCBzb21lIG9mIHRoZW0gaGF2ZSB0aGUgdG9wIDMyIGJpdHMgUkVTMCAoaS5lLiAKcmVzZXJ2
ZWQpLiBJIGhhdmUgZm91bmQgbXVsdGlwbGUgaXNzdWVzIGluIFhlbiBiZWNhdXNlIHNvbWUgYml0
cyBlbmRlZCB1cCB0byBiZSAKZGVmaW5lZCBpbiBuZXdlciByZXZpc2lvbiBvZiB0aGUgc3BlYyAo
b3IgZXZlbiByZXRyb2FjdGl2ZWx5KS4KCkdDQyBkb2VzIG5vdCBzZWVtIHRvIGNhcmUgbXVjaCBp
ZiB5b3UgcGFzcyBhIDMyLWJpdCB2YWx1ZSBmb3Igc3lzdGVtIHJlZ2lzdGVyLiAKQnV0IENsYW5n
IHdpbGwgY29tcGxhaW4gbG91ZGx5IGFib3V0IGl0LgoKSSBub3RpY2VkIHRoYXQgeW91IGhhdmUg
bGltaXRlZCB1c2Ugb2YgU1lTUkVHXyogaGVscGVycyBzbyBmYXIuIFNvIGl0IG1pZ2h0IGJlIApi
ZXN0IHRvIGZpeCBpdCBub3QgcmF0aGVyIGxhdGVyIHRvIGF2b2lkIGFueSBzdHJ1Z2dsZS4KCkNo
ZWVycywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 12:07:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 12:07:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAvDM-0000Bo-NY; Thu, 19 Sep 2019 12:07:12 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYL-0006cL-IV
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:16:41 +0000
X-Inumbo-ID: 2bb438cc-dabe-11e9-9651-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2bb438cc-dabe-11e9-9651-12813bfff9fa;
 Thu, 19 Sep 2019 09:16:33 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CFD15F2025;
 Thu, 19 Sep 2019 11:16:31 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id P-Aox0yziiQE; Thu, 19 Sep 2019 11:16:30 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3EE68F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:28 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:19 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:45 +0200
Message-ID: <20190919091607.23327-2-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Thu, 19 Sep 2019 12:07:11 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH v3 01/23] kconfig: Import kconfig
 from Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW1wb3J0aW5nIHRoZSBrY29uZmlnIGZyb20gdGhlIExpbnV4IGtlcm5lbApLZXJuZWwgVGFnOiB2
NS4yCgpTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5l
Y2xhYi5ldT4KLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlICAgICAgICAgICAgICAg
ICAgICAgICB8ICAyMDggKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZi5jICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDcwMiArKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5j
ICAgICAgICAgICAgICAgICAgICAgfCAxMzgwICsrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvZXhwci5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTI5NyArKysrKysrKysKIHN1cHBv
cnQva2NvbmZpZy5uZXcvZXhwci5oICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMzMSArKysK
IHN1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2ZnLnNoICAgICAgICAgICAgICAgICAgIHwgICAz
MCArCiBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLmMgICAgICAgICAgICAgICAgICAgICAgICB8
IDE1MTYgKysrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUgICAgICAg
ICAgICAgICAgICAgIHwgIDY2MSArKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuYyAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMzI4ICsrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICsKIHN1cHBvcnQva2NvbmZpZy5uZXcv
bGV4ZXIubCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ3MSArKysrCiBzdXBwb3J0L2tjb25m
aWcubmV3L2xpc3QuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMzIgKwogc3VwcG9ydC9r
Y29uZmlnLm5ldy9sa2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU5ICsrCiBzdXBw
b3J0L2tjb25maWcubmV3L2xrY19wcm90by5oICAgICAgICAgICAgICAgICAgICB8ICAgNjYgKwog
c3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcgICAgICAgfCAgICA0
ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgICAgICAgICAgIHwg
IDMxOSArKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmggICAgICAgICAg
ICAgIHwgIDIzOCArKwogc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jICAg
ICAgICAgICAgfCAgMjg5ICsrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL21lbnVib3gu
YyAgICAgICAgICAgICB8ICA0MjQgKysrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3Rl
eHRib3guYyAgICAgICAgICAgICB8ICAzOTUgKysrCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL3V0aWwuYyAgICAgICAgICAgICAgICB8ICA3MDAgKysrKysKIHN1cHBvcnQva2NvbmZpZy5u
ZXcvbHhkaWFsb2cveWVzbm8uYyAgICAgICAgICAgICAgIHwgIDEwMSArCiBzdXBwb3J0L2tjb25m
aWcubmV3L21jb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICB8ICAgNDcgKwogc3VwcG9ydC9r
Y29uZmlnLm5ldy9tY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAxMDM5ICsrKysrKysr
CiBzdXBwb3J0L2tjb25maWcubmV3L21lbnUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4
NjcgKysrKysrCiBzdXBwb3J0L2tjb25maWcubmV3L21lcmdlX2NvbmZpZy5zaCAgICAgICAgICAg
ICAgICB8ICAxODkgKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoICAgICAgICAg
ICAgICAgICAgIHwgICA0NyArCiBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMgICAgICAgICAg
ICAgICAgICAgICAgICB8IDE1NTUgKysrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvbmNv
bmYuZ3VpLmMgICAgICAgICAgICAgICAgICAgIHwgIDY2NCArKysrKwogc3VwcG9ydC9rY29uZmln
Lm5ldy9uY29uZi5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDkyICsKIHN1cHBvcnQva2Nv
bmZpZy5uZXcvcGFyc2VyLnkgICAgICAgICAgICAgICAgICAgICAgIHwgIDczMSArKysrKwogc3Vw
cG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMgICAgICAgICAgICAgICAgICAgfCAgNTczICsr
KysKIHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoICAgICAgICAgICAgICAgICAgIHwg
ICAzMiArCiBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjICAgICAgICAgICAgICAgICAgICAg
ICB8IDE4OTYgKysrKysrKysrKysrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5oICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMzMxICsrKwogc3VwcG9ydC9rY29uZmlnLm5ldy9zdHJlYW1s
aW5lX2NvbmZpZy5wbCAgICAgICAgICAgfCAgNjgyICsrKysrCiBzdXBwb3J0L2tjb25maWcubmV3
L3N5bWJvbC5jICAgICAgICAgICAgICAgICAgICAgICB8IDEzMzEgKysrKysrKysrCiBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnICAgICB8ICAgNTIgKwogc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkgfCAgIDEzICsK
IC4uLi9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IHwgICAx
MCArCiBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9LY29uZmlnICAgICAgICAgICB8
ICAgNTYgKwogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkgICAg
ICAgfCAgIDQxICsKIC4uLi90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZyAgICAg
ICAgICAgIHwgICAgNSArCiAuLi4vdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25maWcg
ICAgICAgICAgICB8ICAgIDkgKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxub19l
eHBlY3RlZF9jb25maWcgfCAgICA1ICsKIC4uLi90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVk
X2NvbmZpZyAgICAgICAgICAgIHwgICAgOSArCiAuLi4vdGVzdHMvY2hvaWNlL29sZGFzazBfZXhw
ZWN0ZWRfc3Rkb3V0ICAgICAgICAgICB8ICAgMTAgKwogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcgICAgfCAgICAyICsKIC4uLi90ZXN0cy9jaG9pY2Uvb2xk
YXNrMV9leHBlY3RlZF9zdGRvdXQgICAgICAgICAgIHwgICAxNSArCiAuLi4vdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZyAgICAgICAgICB8ICAgMjEgKwogLi4uL3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5ICAgICAgfCAgIDE2ICsKIC4uLi90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcgICAgICAgICAgIHwgICAgMiArCiAuLi4v
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnICB8ICAgIDMgKwog
Li4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dCAgfCAgICA0
ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkgICAgICAgICAgICAgIHwg
IDI5MSArKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcg
ICAgfCAgIDYzICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weSAgICAg
ICAgICAgIHwgICAxMCArCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3Rk
ZXJyICAgICAgICB8ICAgMzggKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcgICAgfCAgICAyICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29u
ZmlnLmluYzEgICAgICAgICAgIHwgICAgNSArCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMyICAgICAgICAgICB8ICAgIDQgKwogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcuaW5jMyAgICAgICAgICAgfCAgICAyICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJz
aXZlX2luYy9fX2luaXRfXy5weSAgICAgICAgICAgIHwgICAxMSArCiAuLi4vdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyICAgICAgICB8ICAgIDYgKwogc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZyAgICAgfCAgIDI1ICsKIHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5IHwgICAxNSArCiBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9kZWZjb25maWcgICB8ICAgIDEgKwog
Li4uL2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcgfCAgICA0
ICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcgIHwg
ICAzOSArCiAuLi4vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weSAgICAgICAg
ICB8ICAgMTUgKwogLi4uL2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29u
ZmlnICAgfCAgICAzICsKIC4uLi90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0
ZG91dCAgICAgIHwgICAxMCArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25m
aWcgICAgICAgICAgICB8ICAgMTYgKwogLi4uL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9f
X2luaXRfXy5weSAgICAgICAgfCAgIDIwICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0
ZV9pZl9kZXBfdW5tZXQvY29uZmlnIHwgICAgMSArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVw
X3VubWV0L2V4cGVjdGVkX2NvbmZpZyAgICB8ICAgIDUgKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3Mv
YnVpbHRpbl9mdW5jL0tjb25maWcgICAgICAgICAgfCAgIDI3ICsKIC4uLi90ZXN0cy9wcmVwcm9j
ZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weSAgICAgIHwgICAgOSArCiAuLi4vdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyICB8ICAgIDUgKwogLi4uL3Rlc3Rz
L3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91dCAgfCAgICAxICsKIC4uLi90
ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnICAgIHwgICAgNSArCiAu
Li4vcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkgICAgICB8ICAgMTEg
KwogLi4uL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVyciAgfCAg
ICAxICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnICAg
IHwgICA0NCArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkgICAgICAg
ICAgICB8ICAgIDggKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVy
ciAgICAgICAgfCAgIDEwICsKIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3Zhcmlh
YmxlL0tjb25maWcgIHwgICA1MyArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2lu
aXRfXy5weSAgICAgICAgICB8ICAgIDggKwogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUv
ZXhwZWN0ZWRfc3RkZXJyICAgICAgfCAgICA5ICsKIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHl0ZXN0LmluaSAgICAgICAgICAgICAgIHwgICAgNyArCiAuLi4va2NvbmZpZy5uZXcvdGVzdHMv
cmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcgICB8ICAgMzUgKwogLi4uL3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9fX2luaXRfXy5weSAgICAgICAgICAgfCAgIDE3ICsKIC4uLi90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCAgICAgIHwgICAgMiArCiAuLi4vdGVzdHMv
cmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDEgICAgICB8ICAgIDQgKwogLi4uL3Rl
c3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyICAgICAgfCAgICA1ICsKIHN1
cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEyOSAr
CiBzdXBwb3J0L2tjb25maWcubmV3L3pjb25mLmxleC5jICAgICAgICAgICAgICAgICAgICB8IDI4
MjAgKysrKysrKysrKysrKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMg
ICAgICAgICAgICAgICAgICAgIHwgMjUwNCArKysrKysrKysrKysrKysrKwogOTggZmlsZXMgY2hh
bmdlZCwgMjY0MzMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L2NvbmYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEu
YwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmgKIGNyZWF0ZSBtb2RlIDEwMDc1
NSBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvZ2NvbmYuZ2xhZGUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L2ltYWdlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvbGtjX3Byb3RvLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2RpYWxvZy5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jCiBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3guYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNuby5jCiBjcmVhdGUgbW9k
ZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L21lbnUuYwogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZp
Zy5uZXcvbWVyZ2VfY29uZmlnLnNoCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmln
Lm5ldy9uY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L25jb25mLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1
aS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5oCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJvY2Vzcy5jCiBjcmVhdGUgbW9kZSAxMDA3
NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9xY29uZi5oCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5l
dy9zdHJlYW1saW5lX2NvbmZpZy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy5uZXcvc3ltYm9sLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2F1dG9fc3VibWVudS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9LY29u
ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
X19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVj
dGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dAogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29u
ZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
b2xkYXNrMV9leHBlY3RlZF9zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2Nv
bmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAv
X19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZwogY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9p
bmMvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRf
Xy5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJf
Y2hvaWNlL2RlZmNvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhf
ZGVwL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25m
aWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRl
X2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRp
bl9mdW5jL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9m
dW5jL2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9l
eHBhbnNpb24vX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVycgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9l
c2NhcGUvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92
YXJpYWJsZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0
ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0
LmluaQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9u
ZXN0ZWRfY2hvaWNlL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVk
X3N0ZG91dDAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3Jh
bmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0
MgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYwogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMKCmRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L01ha2VmaWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMyN2UyCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQpAQCAtMCwwICsxLDIwOCBAQAorIyBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIyA9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMg
S2VybmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZy
b20gdG9wLWxldmVsIG1ha2VmaWxlCisKK1BIT05ZICs9IHhjb25maWcgZ2NvbmZpZyBtZW51Y29u
ZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZyBcCisJYnVpbGRfbWVudWNv
bmZpZyBidWlsZF9uY29uZmlnIGJ1aWxkX2djb25maWcgYnVpbGRfeGNvbmZpZworCitpZmRlZiBL
QlVJTERfS0NPTkZJRworS2NvbmZpZyA6PSAkKEtCVUlMRF9LQ09ORklHKQorZWxzZQorS2NvbmZp
ZyA6PSBLY29uZmlnCitlbmRpZgorCitpZmVxICgkKHF1aWV0KSxzaWxlbnRfKQorc2lsZW50IDo9
IC1zCitlbmRpZgorCisjIFdlIG5lZWQgdGhpcywgaW4gY2FzZSB0aGUgdXNlciBoYXMgaXQgaW4g
aXRzIGVudmlyb25tZW50Cit1bmV4cG9ydCBDT05GSUdfCisKK3hjb25maWc6ICQob2JqKS9xY29u
ZgorCSQ8ICQoc2lsZW50KSAkKEtjb25maWcpCisKK2djb25maWc6ICQob2JqKS9nY29uZgorCSQ8
ICQoc2lsZW50KSAkKEtjb25maWcpCisKK21lbnVjb25maWc6ICQob2JqKS9tY29uZgorCSQ8ICQo
c2lsZW50KSAkKEtjb25maWcpCisKK2NvbmZpZzogJChvYmopL2NvbmYKKwkkPCAkKHNpbGVudCkg
LS1vbGRhc2tjb25maWcgJChLY29uZmlnKQorCituY29uZmlnOiAkKG9iaikvbmNvbmYKKwkkPCAk
KHNpbGVudCkgJChLY29uZmlnKQorCitidWlsZF9tZW51Y29uZmlnOiAkKG9iaikvbWNvbmYKKwor
YnVpbGRfbmNvbmZpZzogJChvYmopL25jb25mCisKK2J1aWxkX2djb25maWc6ICQob2JqKS9nY29u
ZgorCitidWlsZF94Y29uZmlnOiAkKG9iaikvcWNvbmYKKworbG9jYWx5ZXNjb25maWcgbG9jYWxt
b2Rjb25maWc6ICQob2JqKS9jb25mCisJJChRKXBlcmwgJChzcmN0cmVlKS8kKHNyYykvc3RyZWFt
bGluZV9jb25maWcucGwgLS0kQCAkKHNyY3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZwor
CSQoUSlpZiBbIC1mIC5jb25maWcgXTsgdGhlbiAJCQkJCVwKKwkJCWNtcCAtcyAudG1wLmNvbmZp
ZyAuY29uZmlnIHx8CQkJXAorCQkJKG12IC1mIC5jb25maWcgLmNvbmZpZy5vbGQuMTsJCQlcCisJ
CQkgbXYgLWYgLnRtcC5jb25maWcgLmNvbmZpZzsJCQlcCisJCQkgJDwgJChzaWxlbnQpIC0tb2xk
Y29uZmlnICQoS2NvbmZpZyk7CQlcCisJCQkgbXYgLWYgLmNvbmZpZy5vbGQuMSAuY29uZmlnLm9s
ZCkJCVwKKwllbHNlCQkJCQkJCQlcCisJCQltdiAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJCVwK
KwkJCSQ8ICQoc2lsZW50KSAtLW9sZGNvbmZpZyAkKEtjb25maWcpOwkJXAorCWZpCisJJChRKXJt
IC1mIC50bXAuY29uZmlnCisKKyMgVGhlc2UgdGFyZ2V0cyBtYXAgMToxIHRvIHRoZSBjb21tYW5k
bGluZSBvcHRpb25zIG9mICdjb25mJworIworIyBOb3RlOgorIyAgc3luY2NvbmZpZyBoYXMgYmVj
b21lIGFuIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBhbmQgaXMgbm93CisjICBkZXBy
ZWNhdGVkIGZvciBleHRlcm5hbCB1c2UKK3NpbXBsZS10YXJnZXRzIDo9IG9sZGNvbmZpZyBhbGxu
b2NvbmZpZyBhbGx5ZXNjb25maWcgYWxsbW9kY29uZmlnIFwKKwlhbGxkZWZjb25maWcgcmFuZGNv
bmZpZyBsaXN0bmV3Y29uZmlnIG9sZGRlZmNvbmZpZyBzeW5jY29uZmlnCitQSE9OWSArPSAkKHNp
bXBsZS10YXJnZXRzKQorCiskKHNpbXBsZS10YXJnZXRzKTogJChvYmopL2NvbmYKKwkkPCAkKHNp
bGVudCkgLS0kQCAkKEtjb25maWcpCisKK1BIT05ZICs9IHNhdmVkZWZjb25maWcgZGVmY29uZmln
CisKK3NhdmVkZWZjb25maWc6ICQob2JqKS9jb25mCisJJDwgJChzaWxlbnQpIC0tJEA9ZGVmY29u
ZmlnICQoS2NvbmZpZykKKworZGVmY29uZmlnOiAkKG9iaikvY29uZgoraWZlcSAoJChLQlVJTERf
REVGQ09ORklHKSwpCisJJDwgJChzaWxlbnQpIC0tZGVmY29uZmlnICQoS2NvbmZpZykKK2Vsc2Ug
aWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kKEtC
VUlMRF9ERUZDT05GSUcpKSwpCisJQCQoa2VjaG8pICIqKiogRGVmYXVsdCBjb25maWd1cmF0aW9u
IGlzIGJhc2VkIG9uICckKEtCVUlMRF9ERUZDT05GSUcpJyIKKwkkKFEpJDwgJChzaWxlbnQpIC0t
ZGVmY29uZmlnPWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChL
Y29uZmlnKQorZWxzZQorCUAkKGtlY2hvKSAiKioqIERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBi
YXNlZCBvbiB0YXJnZXQgJyQoS0JVSUxEX0RFRkNPTkZJRyknIgorCSQoUSkkKE1BS0UpIC1mICQo
c3JjdHJlZSkvTWFrZWZpbGUgJChLQlVJTERfREVGQ09ORklHKQorZW5kaWYKKworJV9kZWZjb25m
aWc6ICQob2JqKS9jb25mCisJJChRKSQ8ICQoc2lsZW50KSAtLWRlZmNvbmZpZz1hcmNoLyQoU1JD
QVJDSCkvY29uZmlncy8kQCAkKEtjb25maWcpCisKK2NvbmZpZ2ZpbGVzPSQod2lsZGNhcmQgJChz
cmN0cmVlKS9rZXJuZWwvY29uZmlncy8kQCAkKHNyY3RyZWUpL2FyY2gvJChTUkNBUkNIKS9jb25m
aWdzLyRAKQorCislLmNvbmZpZzogJChvYmopL2NvbmYKKwkkKGlmICQoY2FsbCBjb25maWdmaWxl
cyksLCAkKGVycm9yIE5vIGNvbmZpZ3VyYXRpb24gZXhpc3RzIGZvciB0aGlzIHRhcmdldCBvbiB0
aGlzIGFyY2hpdGVjdHVyZSkpCisJJChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3Njcmlw
dHMva2NvbmZpZy9tZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZyAkKGNvbmZpZ2ZpbGVzKQorCSsk
KFEpeWVzICIiIHwgJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2VmaWxlIG9sZGNvbmZpZworCitQ
SE9OWSArPSBrdm1jb25maWcKK2t2bWNvbmZpZzoga3ZtX2d1ZXN0LmNvbmZpZworCUA6CisKK1BI
T05ZICs9IHhlbmNvbmZpZworeGVuY29uZmlnOiB4ZW4uY29uZmlnCisJQDoKKworUEhPTlkgKz0g
dGlueWNvbmZpZwordGlueWNvbmZpZzoKKwkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2Vm
aWxlIGFsbG5vY29uZmlnIHRpbnkuY29uZmlnCisKKyMgQ0hFQ0s6IC1vIGNhY2hlX2Rpcj08cGF0
aD4gd29ya2luZz8KK1BIT05ZICs9IHRlc3Rjb25maWcKK3Rlc3Rjb25maWc6ICQob2JqKS9jb25m
CisJJChQWVRIT04zKSAtQiAtbSBweXRlc3QgJChzcmN0cmVlKS8kKHNyYykvdGVzdHMgXAorCS1v
IGNhY2hlX2Rpcj0kKGFic3BhdGggJChvYmopL3Rlc3RzLy5jYWNoZSkgXAorCSQoaWYgJChmaW5k
c3RyaW5nIDEsJChLQlVJTERfVkVSQk9TRSkpLC0tY2FwdHVyZT1ubykKK2NsZWFuLWRpcnMgKz0g
dGVzdHMvLmNhY2hlCisKKyMgSGVscCB0ZXh0IHVzZWQgYnkgbWFrZSBoZWxwCitoZWxwOgorCUBl
Y2hvICAnICBjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBsaW5l
LW9yaWVudGVkIHByb2dyYW0nCisJQGVjaG8gICcgIG5jb25maWcgICAgICAgICAtIFVwZGF0ZSBj
dXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBuY3Vyc2VzIG1lbnUgYmFzZWQgcHJvZ3JhbScKKwlA
ZWNobyAgJyAgbWVudWNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBh
IG1lbnUgYmFzZWQgcHJvZ3JhbScKKwlAZWNobyAgJyAgeGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJl
bnQgY29uZmlnIHV0aWxpc2luZyBhIFF0IGJhc2VkIGZyb250LWVuZCcKKwlAZWNobyAgJyAgZ2Nv
bmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIEdUSysgYmFzZWQgZnJv
bnQtZW5kJworCUBlY2hvICAnICBvbGRjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1
dGlsaXNpbmcgYSBwcm92aWRlZCAuY29uZmlnIGFzIGJhc2UnCisJQGVjaG8gICcgIGxvY2FsbW9k
Y29uZmlnICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyBkaXNhYmxpbmcgbW9kdWxlcyBub3QgbG9h
ZGVkJworCUBlY2hvICAnICBsb2NhbHllc2NvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcg
Y29udmVydGluZyBsb2NhbCBtb2RzIHRvIGNvcmUnCisJQGVjaG8gICcgIGRlZmNvbmZpZwkgIC0g
TmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZnJvbSBBUkNIIHN1cHBsaWVkIGRlZmNvbmZpZycKKwlA
ZWNobyAgJyAgc2F2ZWRlZmNvbmZpZyAgIC0gU2F2ZSBjdXJyZW50IGNvbmZpZyBhcyAuL2RlZmNv
bmZpZyAobWluaW1hbCBjb25maWcpJworCUBlY2hvICAnICBhbGxub2NvbmZpZwkgIC0gTmV3IGNv
bmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCBubycKKwlAZWNobyAgJyAg
YWxseWVzY29uZmlnCSAgLSBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhY2NlcHRl
ZCB3aXRoIHllcycKKwlAZWNobyAgJyAgYWxsbW9kY29uZmlnCSAgLSBOZXcgY29uZmlnIHNlbGVj
dGluZyBtb2R1bGVzIHdoZW4gcG9zc2libGUnCisJQGVjaG8gICcgIGFsbGRlZmNvbmZpZyAgICAt
IE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdCcKKwlAZWNobyAgJyAg
cmFuZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIgdG8gYWxsIG9wdGlv
bnMnCisJQGVjaG8gICcgIGxpc3RuZXdjb25maWcgICAtIExpc3QgbmV3IG9wdGlvbnMnCisJQGVj
aG8gICcgIG9sZGRlZmNvbmZpZwkgIC0gU2FtZSBhcyBvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5
bWJvbHMgdG8gdGhlaXInCisJQGVjaG8gICcgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFs
dWUgd2l0aG91dCBwcm9tcHRpbmcnCisJQGVjaG8gICcgIGt2bWNvbmZpZwkgIC0gRW5hYmxlIGFk
ZGl0aW9uYWwgb3B0aW9ucyBmb3Iga3ZtIGd1ZXN0IGtlcm5lbCBzdXBwb3J0JworCUBlY2hvICAn
ICB4ZW5jb25maWcgICAgICAgLSBFbmFibGUgYWRkaXRpb25hbCBvcHRpb25zIGZvciB4ZW4gZG9t
MCBhbmQgZ3Vlc3Qga2VybmVsIHN1cHBvcnQnCisJQGVjaG8gICcgIHRpbnljb25maWcJICAtIENv
bmZpZ3VyZSB0aGUgdGluaWVzdCBwb3NzaWJsZSBrZXJuZWwnCisJQGVjaG8gICcgIHRlc3Rjb25m
aWcJICAtIFJ1biBLY29uZmlnIHVuaXQgdGVzdHMgKHJlcXVpcmVzIHB5dGhvbjMgYW5kIHB5dGVz
dCknCisKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CisjIG9iamVjdCBmaWxlcyB1c2VkIGJ5IGFsbCBr
Y29uZmlnIGZsYXZvdXJzCitjb21tb24tb2Jqcwk6PSBjb25mZGF0YS5vIGV4cHIubyBsZXhlci5s
ZXgubyBwYXJzZXIudGFiLm8gcHJlcHJvY2Vzcy5vIFwKKwkJICAgc3ltYm9sLm8KKworJChvYmop
L2xleGVyLmxleC5vOiAkKG9iaikvcGFyc2VyLnRhYi5oCitIT1NUQ0ZMQUdTX2xleGVyLmxleC5v
CTo9IC1JICQoc3JjdHJlZSkvJChzcmMpCitIT1NUQ0ZMQUdTX3BhcnNlci50YWIubwk6PSAtSSAk
KHNyY3RyZWUpLyQoc3JjKQorCisjIGNvbmY6IFVzZWQgZm9yIGRlZmNvbmZpZywgb2xkY29uZmln
IGFuZCByZWxhdGVkIHRhcmdldHMKK2hvc3Rwcm9ncy15CSs9IGNvbmYKK2NvbmYtb2Jqcwk6PSBj
b25mLm8gJChjb21tb24tb2JqcykKKworIyBuY29uZjogVXNlZCBmb3IgdGhlIG5jb25maWcgdGFy
Z2V0IGJhc2VkIG9uIG5jdXJzZXMKK2hvc3Rwcm9ncy15CSs9IG5jb25mCituY29uZi1vYmpzCTo9
IG5jb25mLm8gbmNvbmYuZ3VpLm8gJChjb21tb24tb2JqcykKKworSE9TVExETElCU19uY29uZgk9
ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2ZnICYmIGVjaG8gJCRsaWJzKQorSE9TVENGTEFHU19u
Y29uZi5vCT0gJChzaGVsbCAuICQob2JqKS9uY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykKK0hP
U1RDRkxBR1NfbmNvbmYuZ3VpLm8JPSAkKHNoZWxsIC4gJChvYmopL25jb25mLWNmZyAmJiBlY2hv
ICQkY2ZsYWdzKQorCiskKG9iaikvbmNvbmYubyAkKG9iaikvbmNvbmYuZ3VpLm86ICQob2JqKS9u
Y29uZi1jZmcKKworIyBtY29uZjogVXNlZCBmb3IgdGhlIG1lbnVjb25maWcgdGFyZ2V0IGJhc2Vk
IG9uIGx4ZGlhbG9nCitob3N0cHJvZ3MteQkrPSBtY29uZgorbHhkaWFsb2cJOj0gY2hlY2tsaXN0
Lm8gaW5wdXRib3gubyBtZW51Ym94Lm8gdGV4dGJveC5vIHV0aWwubyB5ZXNuby5vCittY29uZi1v
YmpzCTo9IG1jb25mLm8gJChhZGRwcmVmaXggbHhkaWFsb2cvLCAkKGx4ZGlhbG9nKSkgJChjb21t
b24tb2JqcykKKworSE9TVExETElCU19tY29uZiA9ICQoc2hlbGwgLiAkKG9iaikvbWNvbmYtY2Zn
ICYmIGVjaG8gJCRsaWJzKQorJChmb3JlYWNoIGYsIG1jb25mLm8gJChseGRpYWxvZyksIFwKKyAg
JChldmFsIEhPU1RDRkxBR1NfJGYgPSAkJChzaGVsbCAuICQob2JqKS9tY29uZi1jZmcgJiYgZWNo
byAkJCQkY2ZsYWdzKSkpCisKKyQob2JqKS9tY29uZi5vOiAkKG9iaikvbWNvbmYtY2ZnCiskKGFk
ZHByZWZpeCAkKG9iaikvbHhkaWFsb2cvLCAkKGx4ZGlhbG9nKSk6ICQob2JqKS9tY29uZi1jZmcK
KworIyBxY29uZjogVXNlZCBmb3IgdGhlIHhjb25maWcgdGFyZ2V0IGJhc2VkIG9uIFF0Citob3N0
cHJvZ3MteQkrPSBxY29uZgorcWNvbmYtY3h4b2Jqcwk6PSBxY29uZi5vCitxY29uZi1vYmpzCTo9
IGltYWdlcy5vICQoY29tbW9uLW9ianMpCisKK0hPU1RMRExJQlNfcWNvbmYJPSAkKHNoZWxsIC4g
JChvYmopL3Fjb25mLWNmZyAmJiBlY2hvICQkbGlicykKK0hPU1RDWFhGTEFHU19xY29uZi5vCT0g
JChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykKKworJChvYmopL3Fj
b25mLm86ICQob2JqKS9xY29uZi1jZmcgJChvYmopL3Fjb25mLm1vYworCitxdWlldF9jbWRfbW9j
ID0gTU9DICAgICAkQAorICAgICAgY21kX21vYyA9ICQoc2hlbGwgLiAkKG9iaikvcWNvbmYtY2Zn
ICYmIGVjaG8gJCRtb2MpIC1pICQ8IC1vICRACisKKyQob2JqKS8lLm1vYzogJChzcmMpLyUuaCAk
KG9iaikvcWNvbmYtY2ZnCisJJChjYWxsIGNtZCxtb2MpCisKKyMgZ2NvbmY6IFVzZWQgZm9yIHRo
ZSBnY29uZmlnIHRhcmdldCBiYXNlZCBvbiBHVEsrCitob3N0cHJvZ3MteQkrPSBnY29uZgorZ2Nv
bmYtb2Jqcwk6PSBnY29uZi5vIGltYWdlcy5vICQoY29tbW9uLW9ianMpCisKK0hPU1RMRExJQlNf
Z2NvbmYgICAgPSAkKHNoZWxsIC4gJChvYmopL2djb25mLWNmZyAmJiBlY2hvICQkbGlicykKK0hP
U1RDRkxBR1NfZ2NvbmYubyAgPSAkKHNoZWxsIC4gJChvYmopL2djb25mLWNmZyAmJiBlY2hvICQk
Y2ZsYWdzKQorCiskKG9iaikvZ2NvbmYubzogJChvYmopL2djb25mLWNmZworCisjIGNoZWNrIGlm
IG5lY2Vzc2FyeSBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlLCBhbmQgY29uZmlndXJlIGJ1aWxkIGZs
YWdzCitmaWxlY2hrX2NvbmZfY2ZnID0gJChDT05GSUdfU0hFTEwpICQ8CisKKyQob2JqKS8lY29u
Zi1jZmc6ICQoc3JjKS8lY29uZi1jZmcuc2ggRk9SQ0UKKwkkKGNhbGwgZmlsZWNoayxjb25mX2Nm
ZykKKworY2xlYW4tZmlsZXMgKz0gKmNvbmYtY2ZnCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L2NvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvY29uZi5jCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzY3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L2NvbmYuYwpAQCAtMCwwICsxLDcwMiBAQAorLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVs
IDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5j
bHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRl
IDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKwor
c3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjaGVja19j
b25mKHN0cnVjdCBtZW51ICptZW51KTsKKworZW51bSBpbnB1dF9tb2RlIHsKKwlvbGRhc2tjb25m
aWcsCisJc3luY2NvbmZpZywKKwlvbGRjb25maWcsCisJYWxsbm9jb25maWcsCisJYWxseWVzY29u
ZmlnLAorCWFsbG1vZGNvbmZpZywKKwlhbGxkZWZjb25maWcsCisJcmFuZGNvbmZpZywKKwlkZWZj
b25maWcsCisJc2F2ZWRlZmNvbmZpZywKKwlsaXN0bmV3Y29uZmlnLAorCW9sZGRlZmNvbmZpZywK
K307CitzdGF0aWMgZW51bSBpbnB1dF9tb2RlIGlucHV0X21vZGUgPSBvbGRhc2tjb25maWc7CisK
K3N0YXRpYyBpbnQgaW5kZW50ID0gMTsKK3N0YXRpYyBpbnQgdHR5X3N0ZGlvOworc3RhdGljIGlu
dCBzeW5jX2tjb25maWc7CitzdGF0aWMgaW50IGNvbmZfY250Oworc3RhdGljIGNoYXIgbGluZVtQ
QVRIX01BWF07CitzdGF0aWMgc3RydWN0IG1lbnUgKnJvb3RFbnRyeTsKKworc3RhdGljIHZvaWQg
cHJpbnRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3Ry
X25ldygpOworCisJbWVudV9nZXRfZXh0X2hlbHAobWVudSwgJmhlbHApOworCisJcHJpbnRmKCJc
biVzXG4iLCBzdHJfZ2V0KCZoZWxwKSk7CisJc3RyX2ZyZWUoJmhlbHApOworfQorCitzdGF0aWMg
dm9pZCBzdHJpcChjaGFyICpzdHIpCit7CisJY2hhciAqcCA9IHN0cjsKKwlpbnQgbDsKKworCXdo
aWxlICgoaXNzcGFjZSgqcCkpKQorCQlwKys7CisJbCA9IHN0cmxlbihwKTsKKwlpZiAocCAhPSBz
dHIpCisJCW1lbW1vdmUoc3RyLCBwLCBsICsgMSk7CisJaWYgKCFsKQorCQlyZXR1cm47CisJcCA9
IHN0ciArIGwgLSAxOworCXdoaWxlICgoaXNzcGFjZSgqcCkpKQorCQkqcC0tID0gMDsKK30KKwor
LyogSGVscGVyIGZ1bmN0aW9uIHRvIGZhY2lsaXRhdGUgZmdldHMoKSBieSBKZWFuIFNhY3Jlbi4g
Ki8KK3N0YXRpYyB2b2lkIHhmZ2V0cyhjaGFyICpzdHIsIGludCBzaXplLCBGSUxFICppbikKK3sK
KwlpZiAoIWZnZXRzKHN0ciwgc2l6ZSwgaW4pKQorCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3Ig
aW4gcmVhZGluZyBvciBlbmQgb2YgZmlsZS5cbiIpOworCisJaWYgKCF0dHlfc3RkaW8pCisJCXBy
aW50ZigiJXMiLCBzdHIpOworfQorCitzdGF0aWMgaW50IGNvbmZfYXNrdmFsdWUoc3RydWN0IHN5
bWJvbCAqc3ltLCBjb25zdCBjaGFyICpkZWYpCit7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0g
c3ltX2dldF90eXBlKHN5bSk7CisKKwlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkKKwkJcHJpbnRm
KCIoTkVXKSAiKTsKKworCWxpbmVbMF0gPSAnXG4nOworCWxpbmVbMV0gPSAwOworCisJaWYgKCFz
eW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKKwkJbGluZVsw
XSA9ICdcbic7CisJCWxpbmVbMV0gPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGlu
cHV0X21vZGUpIHsKKwljYXNlIG9sZGNvbmZpZzoKKwljYXNlIHN5bmNjb25maWc6CisJCWlmIChz
eW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJCXByaW50ZigiJXNcbiIsIGRlZik7CisJCQlyZXR1cm4g
MDsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIG9sZGFza2NvbmZpZzoKKwkJZmZs
dXNoKHN0ZG91dCk7CisJCXhmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKTsKKwkJcmV0
dXJuIDE7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoICh0eXBlKSB7CisJY2Fz
ZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6CisJCXByaW50ZigiJXNcbiIs
IGRlZik7CisJCXJldHVybiAxOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcHJpbnRmKCIlcyIsIGxp
bmUpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51
ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwljb25zdCBjaGFy
ICpkZWY7CisKKwl3aGlsZSAoMSkgeworCQlwcmludGYoIiUqcyVzICIsIGluZGVudCAtIDEsICIi
LCBtZW51LT5wcm9tcHQtPnRleHQpOworCQlwcmludGYoIiglcykgIiwgc3ltLT5uYW1lKTsKKwkJ
ZGVmID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKHN5bSkpCisJCQlwcmludGYoIlslc10gIiwgZGVmKTsKKwkJaWYgKCFjb25mX2Fza3ZhbHVl
KHN5bSwgZGVmKSkKKwkJCXJldHVybiAwOworCQlzd2l0Y2ggKGxpbmVbMF0pIHsKKwkJY2FzZSAn
XG4nOgorCQkJYnJlYWs7CisJCWNhc2UgJz8nOgorCQkJLyogcHJpbnQgaGVscCAqLworCQkJaWYg
KGxpbmVbMV0gPT0gJ1xuJykgeworCQkJCXByaW50X2hlbHAobWVudSk7CisJCQkJZGVmID0gTlVM
TDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0Ogor
CQkJbGluZVtzdHJsZW4obGluZSktMV0gPSAwOworCQkJZGVmID0gbGluZTsKKwkJfQorCQlpZiAo
ZGVmICYmIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN5bSwgZGVmKSkKKwkJCXJldHVybiAwOworCX0K
K30KKworc3RhdGljIGludCBjb25mX3N5bShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qg
c3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7CisKKwl3
aGlsZSAoMSkgeworCQlwcmludGYoIiUqcyVzICIsIGluZGVudCAtIDEsICIiLCBtZW51LT5wcm9t
cHQtPnRleHQpOworCQlpZiAoc3ltLT5uYW1lKQorCQkJcHJpbnRmKCIoJXMpICIsIHN5bS0+bmFt
ZSk7CisJCXB1dGNoYXIoJ1snKTsKKwkJb2xkdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShz
eW0pOworCQlzd2l0Y2ggKG9sZHZhbCkgeworCQljYXNlIG5vOgorCQkJcHV0Y2hhcignTicpOwor
CQkJYnJlYWs7CisJCWNhc2UgbW9kOgorCQkJcHV0Y2hhcignTScpOworCQkJYnJlYWs7CisJCWNh
c2UgeWVzOgorCQkJcHV0Y2hhcignWScpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKG9sZHZhbCAh
PSBubyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbm8pKQorCQkJcHJpbnRmKCIv
biIpOworCQlpZiAob2xkdmFsICE9IG1vZCAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5
bSwgbW9kKSkKKwkJCXByaW50ZigiL20iKTsKKwkJaWYgKG9sZHZhbCAhPSB5ZXMgJiYgc3ltX3Ry
aXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHllcykpCisJCQlwcmludGYoIi95Iik7CisJCXByaW50
ZigiLz9dICIpOworCQlpZiAoIWNvbmZfYXNrdmFsdWUoc3ltLCBzeW1fZ2V0X3N0cmluZ192YWx1
ZShzeW0pKSkKKwkJCXJldHVybiAwOworCQlzdHJpcChsaW5lKTsKKworCQlzd2l0Y2ggKGxpbmVb
MF0pIHsKKwkJY2FzZSAnbic6CisJCWNhc2UgJ04nOgorCQkJbmV3dmFsID0gbm87CisJCQlpZiAo
IWxpbmVbMV0gfHwgIXN0cmNtcCgmbGluZVsxXSwgIm8iKSkKKwkJCQlicmVhazsKKwkJCWNvbnRp
bnVlOworCQljYXNlICdtJzoKKwkJY2FzZSAnTSc6CisJCQluZXd2YWwgPSBtb2Q7CisJCQlpZiAo
IWxpbmVbMV0pCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJY2FzZSAneSc6CisJCWNhc2Ug
J1knOgorCQkJbmV3dmFsID0geWVzOworCQkJaWYgKCFsaW5lWzFdIHx8ICFzdHJjbXAoJmxpbmVb
MV0sICJlcyIpKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCWNhc2UgMDoKKwkJCW5ld3Zh
bCA9IG9sZHZhbDsKKwkJCWJyZWFrOworCQljYXNlICc/JzoKKwkJCWdvdG8gaGVscDsKKwkJZGVm
YXVsdDoKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSwgbmV3dmFsKSkKKwkJCXJldHVybiAwOworaGVscDoKKwkJcHJpbnRfaGVscChtZW51KTsKKwl9
Cit9CisKK3N0YXRpYyBpbnQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3Ry
dWN0IHN5bWJvbCAqc3ltLCAqZGVmX3N5bTsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJYm9vbCBp
c19uZXc7CisKKwlzeW0gPSBtZW51LT5zeW07CisJaXNfbmV3ID0gIXN5bV9oYXNfdmFsdWUoc3lt
KTsKKwlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCWNvbmZfc3ltKG1lbnUpOworCQlz
eW1fY2FsY192YWx1ZShzeW0pOworCQlzd2l0Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3lt
KSkgeworCQljYXNlIG5vOgorCQkJcmV0dXJuIDE7CisJCWNhc2UgbW9kOgorCQkJcmV0dXJuIDA7
CisJCWNhc2UgeWVzOgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHN5bV9n
ZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgeworCQljYXNlIG5vOgorCQkJcmV0dXJuIDE7CisJCWNh
c2UgbW9kOgorCQkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0gMSwgIiIsIG1lbnVfZ2V0X3By
b21wdChtZW51KSk7CisJCQlyZXR1cm4gMDsKKwkJY2FzZSB5ZXM6CisJCQlicmVhazsKKwkJfQor
CX0KKworCXdoaWxlICgxKSB7CisJCWludCBjbnQsIGRlZjsKKworCQlwcmludGYoIiUqcyVzXG4i
LCBpbmRlbnQgLSAxLCAiIiwgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsKKwkJZGVmX3N5bSA9IHN5
bV9nZXRfY2hvaWNlX3ZhbHVlKHN5bSk7CisJCWNudCA9IGRlZiA9IDA7CisJCWxpbmVbMF0gPSAw
OworCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQp
IHsKKwkJCWlmICghbWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwkJCQljb250aW51ZTsKKwkJCWlm
ICghY2hpbGQtPnN5bSkgeworCQkJCXByaW50ZigiJSpjICVzXG4iLCBpbmRlbnQsICcqJywgbWVu
dV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQkJY29udGludWU7CisJCQl9CisJCQljbnQrKzsKKwkJ
CWlmIChjaGlsZC0+c3ltID09IGRlZl9zeW0pIHsKKwkJCQlkZWYgPSBjbnQ7CisJCQkJcHJpbnRm
KCIlKmMiLCBpbmRlbnQsICc+Jyk7CisJCQl9IGVsc2UKKwkJCQlwcmludGYoIiUqYyIsIGluZGVu
dCwgJyAnKTsKKwkJCXByaW50ZigiICVkLiAlcyIsIGNudCwgbWVudV9nZXRfcHJvbXB0KGNoaWxk
KSk7CisJCQlpZiAoY2hpbGQtPnN5bS0+bmFtZSkKKwkJCQlwcmludGYoIiAoJXMpIiwgY2hpbGQt
PnN5bS0+bmFtZSk7CisJCQlpZiAoIXN5bV9oYXNfdmFsdWUoY2hpbGQtPnN5bSkpCisJCQkJcHJp
bnRmKCIgKE5FVykiKTsKKwkJCXByaW50ZigiXG4iKTsKKwkJfQorCQlwcmludGYoIiUqc2Nob2lj
ZSIsIGluZGVudCAtIDEsICIiKTsKKwkJaWYgKGNudCA9PSAxKSB7CisJCQlwcmludGYoIlsxXTog
MVxuIik7CisJCQlnb3RvIGNvbmZfY2hpbGRzOworCQl9CisJCXByaW50ZigiWzEtJWQ/XTogIiwg
Y250KTsKKwkJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJCWNhc2Ugb2xkY29uZmlnOgorCQljYXNl
IHN5bmNjb25maWc6CisJCQlpZiAoIWlzX25ldykgeworCQkJCWNudCA9IGRlZjsKKwkJCQlwcmlu
dGYoIiVkXG4iLCBjbnQpOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogZmFsbCB0aHJvdWdoICov
CisJCWNhc2Ugb2xkYXNrY29uZmlnOgorCQkJZmZsdXNoKHN0ZG91dCk7CisJCQl4ZmdldHMobGlu
ZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbik7CisJCQlzdHJpcChsaW5lKTsKKwkJCWlmIChsaW5lWzBd
ID09ICc/JykgeworCQkJCXByaW50X2hlbHAobWVudSk7CisJCQkJY29udGludWU7CisJCQl9CisJ
CQlpZiAoIWxpbmVbMF0pCisJCQkJY250ID0gZGVmOworCQkJZWxzZSBpZiAoaXNkaWdpdChsaW5l
WzBdKSkKKwkJCQljbnQgPSBhdG9pKGxpbmUpOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQkJ
YnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJY29uZl9jaGlsZHM6CisJCWZv
ciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJ
aWYgKCFjaGlsZC0+c3ltIHx8ICFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQorCQkJCWNvbnRpbnVl
OworCQkJaWYgKCEtLWNudCkKKwkJCQlicmVhazsKKwkJfQorCQlpZiAoIWNoaWxkKQorCQkJY29u
dGludWU7CisJCWlmIChsaW5lWzBdICYmIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0gPT0gJz8nKSB7
CisJCQlwcmludF9oZWxwKGNoaWxkKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXN5bV9zZXRfY2hv
aWNlX3ZhbHVlKHN5bSwgY2hpbGQtPnN5bSk7CisJCWZvciAoY2hpbGQgPSBjaGlsZC0+bGlzdDsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWluZGVudCArPSAyOworCQkJY29uZihj
aGlsZCk7CisJCQlpbmRlbnQgLT0gMjsKKwkJfQorCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRp
YyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOwor
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisKKwlpZiAoIW1l
bnVfaXNfdmlzaWJsZShtZW51KSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCXBy
b3AgPSBtZW51LT5wcm9tcHQ7CisJaWYgKHByb3ApIHsKKwkJY29uc3QgY2hhciAqcHJvbXB0Owor
CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfTUVOVToKKwkJCS8qCisJCQkgKiBF
eGNlcHQgaW4gb2xkYXNrY29uZmlnIG1vZGUsIHdlIHNob3cgb25seSBtZW51cyB0aGF0CisJCQkg
KiBjb250YWluIG5ldyBzeW1ib2xzLgorCQkJICovCisJCQlpZiAoaW5wdXRfbW9kZSAhPSBvbGRh
c2tjb25maWcgJiYgcm9vdEVudHJ5ICE9IG1lbnUpIHsKKwkJCQljaGVja19jb25mKG1lbnUpOwor
CQkJCXJldHVybjsKKwkJCX0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFBfQ09NTUVO
VDoKKwkJCXByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCWlmIChwcm9tcHQpCisJ
CQkJcHJpbnRmKCIlKmNcbiUqYyAlc1xuJSpjXG4iLAorCQkJCQlpbmRlbnQsICcqJywKKwkJCQkJ
aW5kZW50LCAnKicsIHByb21wdCwKKwkJCQkJaW5kZW50LCAnKicpOworCQlkZWZhdWx0OgorCQkJ
OworCQl9CisJfQorCisJaWYgKCFzeW0pCisJCWdvdG8gY29uZl9jaGlsZHM7CisKKwlpZiAoc3lt
X2lzX2Nob2ljZShzeW0pKSB7CisJCWNvbmZfY2hvaWNlKG1lbnUpOworCQlpZiAoc3ltLT5jdXJy
LnRyaSAhPSBtb2QpCisJCQlyZXR1cm47CisJCWdvdG8gY29uZl9jaGlsZHM7CisJfQorCisJc3dp
dGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NU
UklORzoKKwkJY29uZl9zdHJpbmcobWVudSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbmZf
c3ltKG1lbnUpOworCQlicmVhazsKKwl9CisKK2NvbmZfY2hpbGRzOgorCWlmIChzeW0pCisJCWlu
ZGVudCArPSAyOworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dCkKKwkJY29uZihjaGlsZCk7CisJaWYgKHN5bSkKKwkJaW5kZW50IC09IDI7Cit9CisK
K3N0YXRpYyB2b2lkIGNoZWNrX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5
bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKworCWlmICghbWVudV9pc192aXNpYmxl
KG1lbnUpKQorCQlyZXR1cm47CisKKwlzeW0gPSBtZW51LT5zeW07CisJaWYgKHN5bSAmJiAhc3lt
X2hhc192YWx1ZShzeW0pKSB7CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkgfHwKKwkJICAg
IChzeW1faXNfY2hvaWNlKHN5bSkgJiYgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHll
cykpIHsKKwkJCWlmIChpbnB1dF9tb2RlID09IGxpc3RuZXdjb25maWcpIHsKKwkJCQlpZiAoc3lt
LT5uYW1lKSB7CisJCQkJCWNvbnN0IGNoYXIgKnN0cjsKKworCQkJCQlpZiAoc3ltLT50eXBlID09
IFNfU1RSSU5HKSB7CisJCQkJCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQkJ
CQkJc3RyID0gc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoc3RyKTsKKwkJCQkJCXByaW50ZigiJXMl
cz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQkJCQkJZnJlZSgodm9pZCAqKXN0
cik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0p
OworCQkJCQkJcHJpbnRmKCIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIHN0cik7CisJ
CQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmICghY29uZl9jbnQrKykKKwkJCQkJcHJp
bnRmKCIqXG4qIFJlc3RhcnQgY29uZmlnLi4uXG4qXG4iKTsKKwkJCQlyb290RW50cnkgPSBtZW51
X2dldF9wYXJlbnRfbWVudShtZW51KTsKKwkJCQljb25mKHJvb3RFbnRyeSk7CisJCQl9CisJCX0K
Kwl9CisKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHQpCisJCWNoZWNrX2NvbmYoY2hpbGQpOworfQorCitzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25n
X29wdHNbXSA9IHsKKwl7Im9sZGFza2NvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxM
LCBvbGRhc2tjb25maWd9LAorCXsib2xkY29uZmlnIiwgICAgICAgbm9fYXJndW1lbnQsICAgICAg
IE5VTEwsIG9sZGNvbmZpZ30sCisJeyJzeW5jY29uZmlnIiwgICAgICBub19hcmd1bWVudCwgICAg
ICAgTlVMTCwgc3luY2NvbmZpZ30sCisJeyJkZWZjb25maWciLCAgICAgICBvcHRpb25hbF9hcmd1
bWVudCwgTlVMTCwgZGVmY29uZmlnfSwKKwl7InNhdmVkZWZjb25maWciLCAgIHJlcXVpcmVkX2Fy
Z3VtZW50LCBOVUxMLCBzYXZlZGVmY29uZmlnfSwKKwl7ImFsbG5vY29uZmlnIiwgICAgIG5vX2Fy
Z3VtZW50LCAgICAgICBOVUxMLCBhbGxub2NvbmZpZ30sCisJeyJhbGx5ZXNjb25maWciLCAgICBu
b19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxseWVzY29uZmlnfSwKKwl7ImFsbG1vZGNvbmZpZyIs
ICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxtb2Rjb25maWd9LAorCXsiYWxsZGVmY29u
ZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbGRlZmNvbmZpZ30sCisJeyJyYW5k
Y29uZmlnIiwgICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgcmFuZGNvbmZpZ30sCisJeyJs
aXN0bmV3Y29uZmlnIiwgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgbGlzdG5ld2NvbmZpZ30s
CisJeyJvbGRkZWZjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkZGVmY29u
ZmlnfSwKKwl7TlVMTCwgMCwgTlVMTCwgMH0KK307CisKK3N0YXRpYyB2b2lkIGNvbmZfdXNhZ2Uo
Y29uc3QgY2hhciAqcHJvZ25hbWUpCit7CisKKwlwcmludGYoIlVzYWdlOiAlcyBbLXNdIFtvcHRp
b25dIDxrY29uZmlnLWZpbGU+XG4iLCBwcm9nbmFtZSk7CisJcHJpbnRmKCJbb3B0aW9uXSBpcyBf
b25lXyBvZiB0aGUgZm9sbG93aW5nOlxuIik7CisJcHJpbnRmKCIgIC0tbGlzdG5ld2NvbmZpZyAg
ICAgICAgIExpc3QgbmV3IG9wdGlvbnNcbiIpOworCXByaW50ZigiICAtLW9sZGFza2NvbmZpZyAg
ICAgICAgICBTdGFydCBhIG5ldyBjb25maWd1cmF0aW9uIHVzaW5nIGEgbGluZS1vcmllbnRlZCBw
cm9ncmFtXG4iKTsKKwlwcmludGYoIiAgLS1vbGRjb25maWcgICAgICAgICAgICAgVXBkYXRlIGEg
Y29uZmlndXJhdGlvbiB1c2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMgYmFzZVxuIik7CisJcHJp
bnRmKCIgIC0tc3luY2NvbmZpZyAgICAgICAgICAgIFNpbWlsYXIgdG8gb2xkY29uZmlnIGJ1dCBn
ZW5lcmF0ZXMgY29uZmlndXJhdGlvbiBpblxuIgorCSAgICAgICAiICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbmNsdWRlL3tnZW5lcmF0ZWQvLGNvbmZpZy99XG4iKTsKKwlwcmludGYoIiAgLS1v
bGRkZWZjb25maWcgICAgICAgICAgU2FtZSBhcyBvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJv
bHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZVxuIik7CisJcHJpbnRmKCIgIC0tZGVmY29uZmlnIDxm
aWxlPiAgICAgIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGRlZmluZWQgaW4gPGZpbGU+XG4iKTsK
KwlwcmludGYoIiAgLS1zYXZlZGVmY29uZmlnIDxmaWxlPiAgU2F2ZSB0aGUgbWluaW1hbCBjdXJy
ZW50IGNvbmZpZ3VyYXRpb24gdG8gPGZpbGU+XG4iKTsKKwlwcmludGYoIiAgLS1hbGxub2NvbmZp
ZyAgICAgICAgICAgTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0
aCBub1xuIik7CisJcHJpbnRmKCIgIC0tYWxseWVzY29uZmlnICAgICAgICAgIE5ldyBjb25maWcg
d2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggeWVzXG4iKTsKKwlwcmludGYoIiAg
LS1hbGxtb2Rjb25maWcgICAgICAgICAgTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUg
YW5zd2VyZWQgd2l0aCBtb2RcbiIpOworCXByaW50ZigiICAtLWFsbGRlZmNvbmZpZyAgICAgICAg
ICBOZXcgY29uZmlnIHdpdGggYWxsIHN5bWJvbHMgc2V0IHRvIGRlZmF1bHRcbiIpOworCXByaW50
ZigiICAtLXJhbmRjb25maWcgICAgICAgICAgICBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dl
ciB0byBhbGwgb3B0aW9uc1xuIik7Cit9CisKK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQor
eworCWNvbnN0IGNoYXIgKnByb2duYW1lID0gYXZbMF07CisJaW50IG9wdDsKKwljb25zdCBjaGFy
ICpuYW1lLCAqZGVmY29uZmlnX2ZpbGUgPSBOVUxMIC8qIGdjYyB1bmluaXQgKi87CisJaW50IG5v
X2NvbmZfd3JpdGUgPSAwOworCisJdHR5X3N0ZGlvID0gaXNhdHR5KDApICYmIGlzYXR0eSgxKTsK
KworCXdoaWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYWMsIGF2LCAicyIsIGxvbmdfb3B0cywgTlVM
TCkpICE9IC0xKSB7CisJCWlmIChvcHQgPT0gJ3MnKSB7CisJCQljb25mX3NldF9tZXNzYWdlX2Nh
bGxiYWNrKE5VTEwpOworCQkJY29udGludWU7CisJCX0KKwkJaW5wdXRfbW9kZSA9IChlbnVtIGlu
cHV0X21vZGUpb3B0OworCQlzd2l0Y2ggKG9wdCkgeworCQljYXNlIHN5bmNjb25maWc6CisJCQkv
KgorCQkJICogc3luY2NvbmZpZyBpcyBpbnZva2VkIGR1cmluZyB0aGUgYnVpbGQgc3RhZ2UuCisJ
CQkgKiBTdXBwcmVzcyBkaXN0cmFjdGluZyAiY29uZmlndXJhdGlvbiB3cml0dGVuIHRvIC4uLiIK
KwkJCSAqLworCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsKKwkJCXN5bmNfa2Nv
bmZpZyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBkZWZjb25maWc6CisJCWNhc2Ugc2F2ZWRlZmNv
bmZpZzoKKwkJCWRlZmNvbmZpZ19maWxlID0gb3B0YXJnOworCQkJYnJlYWs7CisJCWNhc2UgcmFu
ZGNvbmZpZzoKKwkJeworCQkJc3RydWN0IHRpbWV2YWwgbm93OworCQkJdW5zaWduZWQgaW50IHNl
ZWQ7CisJCQljaGFyICpzZWVkX2VudjsKKworCQkJLyoKKwkJCSAqIFVzZSBtaWNyb3NlY29uZHMg
ZGVyaXZlZCBzZWVkLAorCQkJICogY29tcGVuc2F0ZSBmb3Igc3lzdGVtcyB3aGVyZSBpdCBtYXkg
YmUgemVybworCQkJICovCisJCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisJCQlzZWVkID0g
KHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChub3cudHZfdXNlYyArIDEpKTsKKwor
CQkJc2VlZF9lbnYgPSBnZXRlbnYoIktDT05GSUdfU0VFRCIpOworCQkJaWYoIHNlZWRfZW52ICYm
ICpzZWVkX2VudiApIHsKKwkJCQljaGFyICplbmRwOworCQkJCWludCB0bXAgPSAoaW50KXN0cnRv
bChzZWVkX2VudiwgJmVuZHAsIDApOworCQkJCWlmICgqZW5kcCA9PSAnXDAnKSB7CisJCQkJCXNl
ZWQgPSB0bXA7CisJCQkJfQorCQkJfQorCQkJZnByaW50Ziggc3RkZXJyLCAiS0NPTkZJR19TRUVE
PTB4JVhcbiIsIHNlZWQgKTsKKwkJCXNyYW5kKHNlZWQpOworCQkJYnJlYWs7CisJCX0KKwkJY2Fz
ZSBvbGRhc2tjb25maWc6CisJCWNhc2Ugb2xkY29uZmlnOgorCQljYXNlIGFsbG5vY29uZmlnOgor
CQljYXNlIGFsbHllc2NvbmZpZzoKKwkJY2FzZSBhbGxtb2Rjb25maWc6CisJCWNhc2UgYWxsZGVm
Y29uZmlnOgorCQljYXNlIGxpc3RuZXdjb25maWc6CisJCWNhc2Ugb2xkZGVmY29uZmlnOgorCQkJ
YnJlYWs7CisJCWNhc2UgJz8nOgorCQkJY29uZl91c2FnZShwcm9nbmFtZSk7CisJCQlleGl0KDEp
OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGFjID09IG9wdGluZCkgeworCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xuIiwgYXZbMF0pOworCQljb25mX3VzYWdl
KHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9CisJbmFtZSA9IGF2W29wdGluZF07CisJY29uZl9w
YXJzZShuYW1lKTsKKwkvL3pjb25mZHVtcChzdGRvdXQpOworCisJc3dpdGNoIChpbnB1dF9tb2Rl
KSB7CisJY2FzZSBkZWZjb25maWc6CisJCWlmICghZGVmY29uZmlnX2ZpbGUpCisJCQlkZWZjb25m
aWdfZmlsZSA9IGNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUoKTsKKwkJaWYgKGNvbmZfcmVhZChk
ZWZjb25maWdfZmlsZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSIqKipcbiIKKwkJCQkg
ICIqKiogQ2FuJ3QgZmluZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gXCIlc1wiIVxuIgorCQkJCSAg
IioqKlxuIiwKKwkJCQlkZWZjb25maWdfZmlsZSk7CisJCQlleGl0KDEpOworCQl9CisJCWJyZWFr
OworCWNhc2Ugc2F2ZWRlZmNvbmZpZzoKKwljYXNlIHN5bmNjb25maWc6CisJY2FzZSBvbGRhc2tj
b25maWc6CisJY2FzZSBvbGRjb25maWc6CisJY2FzZSBsaXN0bmV3Y29uZmlnOgorCWNhc2Ugb2xk
ZGVmY29uZmlnOgorCQljb25mX3JlYWQoTlVMTCk7CisJCWJyZWFrOworCWNhc2UgYWxsbm9jb25m
aWc6CisJY2FzZSBhbGx5ZXNjb25maWc6CisJY2FzZSBhbGxtb2Rjb25maWc6CisJY2FzZSBhbGxk
ZWZjb25maWc6CisJY2FzZSByYW5kY29uZmlnOgorCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FM
TENPTkZJRyIpOworCQlpZiAoIW5hbWUpCisJCQlicmVhazsKKwkJaWYgKChzdHJjbXAobmFtZSwg
IiIpICE9IDApICYmIChzdHJjbXAobmFtZSwgIjEiKSAhPSAwKSkgeworCQkJaWYgKGNvbmZfcmVh
ZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkJ
IioqKiBDYW4ndCByZWFkIHNlZWQgY29uZmlndXJhdGlvbiBcIiVzXCIhXG4iLAorCQkJCQluYW1l
KTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNoIChpbnB1dF9t
b2RlKSB7CisJCWNhc2UgYWxsbm9jb25maWc6CW5hbWUgPSAiYWxsbm8uY29uZmlnIjsgYnJlYWs7
CisJCWNhc2UgYWxseWVzY29uZmlnOgluYW1lID0gImFsbHllcy5jb25maWciOyBicmVhazsKKwkJ
Y2FzZSBhbGxtb2Rjb25maWc6CW5hbWUgPSAiYWxsbW9kLmNvbmZpZyI7IGJyZWFrOworCQljYXNl
IGFsbGRlZmNvbmZpZzoJbmFtZSA9ICJhbGxkZWYuY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgcmFu
ZGNvbmZpZzoJbmFtZSA9ICJhbGxyYW5kb20uY29uZmlnIjsgYnJlYWs7CisJCWRlZmF1bHQ6IGJy
ZWFrOworCQl9CisJCWlmIChjb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpICYmCisJ
CSAgICBjb25mX3JlYWRfc2ltcGxlKCJhbGwuY29uZmlnIiwgU19ERUZfVVNFUikpIHsKKwkJCWZw
cmludGYoc3RkZXJyLAorCQkJCSIqKiogS0NPTkZJR19BTExDT05GSUcgc2V0LCBidXQgbm8gXCIl
c1wiIG9yIFwiYWxsLmNvbmZpZ1wiIGZpbGUgZm91bmRcbiIsCisJCQkJbmFtZSk7CisJCQlleGl0
KDEpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChzeW5j
X2tjb25maWcpIHsKKwkJbmFtZSA9IGdldGVudigiS0NPTkZJR19OT1NJTEVOVFVQREFURSIpOwor
CQlpZiAobmFtZSAmJiAqbmFtZSkgeworCQkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkgeworCQkJ
CWZwcmludGYoc3RkZXJyLAorCQkJCQkiXG4qKiogVGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMg
ZXhwbGljaXQgdXBkYXRlLlxuXG4iKTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJCW5vX2NvbmZf
d3JpdGUgPSAxOworCQl9CisJfQorCisJc3dpdGNoIChpbnB1dF9tb2RlKSB7CisJY2FzZSBhbGxu
b2NvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9ubyk7CisJCWJyZWFrOwor
CWNhc2UgYWxseWVzY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX3llcyk7
CisJCWJyZWFrOworCWNhc2UgYWxsbW9kY29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJv
bHMoZGVmX21vZCk7CisJCWJyZWFrOworCWNhc2UgYWxsZGVmY29uZmlnOgorCQljb25mX3NldF9h
bGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOworCQlicmVhazsKKwljYXNlIHJhbmRjb25maWc6
CisJCS8qIFJlYWxseSBub3RoaW5nIHRvIGRvIGluIHRoaXMgbG9vcCAqLworCQl3aGlsZSAoY29u
Zl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9yYW5kb20pKSA7CisJCWJyZWFrOworCWNhc2UgZGVm
Y29uZmlnOgorCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOworCQlicmVh
azsKKwljYXNlIHNhdmVkZWZjb25maWc6CisJCWJyZWFrOworCWNhc2Ugb2xkYXNrY29uZmlnOgor
CQlyb290RW50cnkgPSAmcm9vdG1lbnU7CisJCWNvbmYoJnJvb3RtZW51KTsKKwkJaW5wdXRfbW9k
ZSA9IG9sZGNvbmZpZzsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBvbGRjb25maWc6CisJ
Y2FzZSBsaXN0bmV3Y29uZmlnOgorCWNhc2Ugc3luY2NvbmZpZzoKKwkJLyogVXBkYXRlIHVudGls
IGEgbG9vcCBjYXVzZWQgbm8gbW9yZSBjaGFuZ2VzICovCisJCWRvIHsKKwkJCWNvbmZfY250ID0g
MDsKKwkJCWNoZWNrX2NvbmYoJnJvb3RtZW51KTsKKwkJfSB3aGlsZSAoY29uZl9jbnQpOworCQli
cmVhazsKKwljYXNlIG9sZGRlZmNvbmZpZzoKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlp
ZiAoaW5wdXRfbW9kZSA9PSBzYXZlZGVmY29uZmlnKSB7CisJCWlmIChjb25mX3dyaXRlX2RlZmNv
bmZpZyhkZWZjb25maWdfZmlsZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAibioqKiBFcnJvciB3
aGlsZSBzYXZpbmcgZGVmY29uZmlnIHRvOiAlc1xuXG4iLAorCQkJCWRlZmNvbmZpZ19maWxlKTsK
KwkJCXJldHVybiAxOworCQl9CisJfSBlbHNlIGlmIChpbnB1dF9tb2RlICE9IGxpc3RuZXdjb25m
aWcpIHsKKwkJaWYgKCFub19jb25mX3dyaXRlICYmIGNvbmZfd3JpdGUoTlVMTCkpIHsKKwkJCWZw
cmludGYoc3RkZXJyLCAiXG4qKiogRXJyb3IgZHVyaW5nIHdyaXRpbmcgb2YgdGhlIGNvbmZpZ3Vy
YXRpb24uXG5cbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCisJCS8qCisJCSAqIENyZWF0ZSBhdXRv
LmNvbmYgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisJCSAqIFRoaXMgcHJldmVudHMgR05VIE1ha2Ug
NC4xIG9yIG9sZGVyIGZyb20gZW1pdHRpbmcKKwkJICogImluY2x1ZGUvY29uZmlnL2F1dG8uY29u
ZjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIKKwkJICogaW4gdGhlIHRvcC1sZXZlbCBNYWtl
ZmlsZQorCQkgKgorCQkgKiBzeW5jY29uZmlnIGFsd2F5cyBjcmVhdGVzIG9yIHVwZGF0ZXMgYXV0
by5jb25mIGJlY2F1c2UgaXQgaXMKKwkJICogdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLgorCQkgKi8K
KwkJaWYgKGNvbmZfd3JpdGVfYXV0b2NvbmYoc3luY19rY29uZmlnKSAmJiBzeW5jX2tjb25maWcp
IHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJcbioqKiBFcnJvciBkdXJpbmcgc3luYyBvZiB0
aGUgY29uZmlndXJhdGlvbi5cblxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KKwlyZXR1cm4g
MDsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42MDA2MTU0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25m
ZGF0YS5jCkBAIC0wLDAgKzEsMTM4MCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGlu
dXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxr
Yy5oIgorCisvKiByZXR1cm4gdHJ1ZSBpZiAncGF0aCcgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2Ug
Ki8KK3N0YXRpYyBib29sIGlzX3ByZXNlbnQoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qg
c3RhdCBzdDsKKworCXJldHVybiAhc3RhdChwYXRoLCAmc3QpOworfQorCisvKiByZXR1cm4gdHJ1
ZSBpZiAncGF0aCcgZXhpc3RzIGFuZCBpdCBpcyBhIGRpcmVjdG9yeSwgZmFsc2Ugb3RoZXJ3aXNl
ICovCitzdGF0aWMgYm9vbCBpc19kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwlzdHJ1Y3Qgc3Rh
dCBzdDsKKworCWlmIChzdGF0KHBhdGgsICZzdCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIFNf
SVNESVIoc3Quc3RfbW9kZSk7Cit9CisKKy8qIHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB0d28g
ZmlsZXMgYXJlIHRoZSBzYW1lLCBmYWxzZSBvdGhlcndpc2UgKi8KK3N0YXRpYyBib29sIGlzX3Nh
bWUoY29uc3QgY2hhciAqZmlsZTEsIGNvbnN0IGNoYXIgKmZpbGUyKQoreworCWludCBmZDEsIGZk
MjsKKwlzdHJ1Y3Qgc3RhdCBzdDEsIHN0MjsKKwl2b2lkICptYXAxLCAqbWFwMjsKKwlib29sIHJl
dCA9IGZhbHNlOworCisJZmQxID0gb3BlbihmaWxlMSwgT19SRE9OTFkpOworCWlmIChmZDEgPCAw
KQorCQlyZXR1cm4gcmV0OworCisJZmQyID0gb3BlbihmaWxlMiwgT19SRE9OTFkpOworCWlmIChm
ZDIgPCAwKQorCQlnb3RvIGNsb3NlMTsKKworCXJldCA9IGZzdGF0KGZkMSwgJnN0MSk7CisJaWYg
KHJldCkKKwkJZ290byBjbG9zZTI7CisJcmV0ID0gZnN0YXQoZmQyLCAmc3QyKTsKKwlpZiAocmV0
KQorCQlnb3RvIGNsb3NlMjsKKworCWlmIChzdDEuc3Rfc2l6ZSAhPSBzdDIuc3Rfc2l6ZSkKKwkJ
Z290byBjbG9zZTI7CisKKwltYXAxID0gbW1hcChOVUxMLCBzdDEuc3Rfc2l6ZSwgUFJPVF9SRUFE
LCBNQVBfUFJJVkFURSwgZmQxLCAwKTsKKwlpZiAobWFwMSA9PSBNQVBfRkFJTEVEKQorCQlnb3Rv
IGNsb3NlMjsKKworCW1hcDIgPSBtbWFwKE5VTEwsIHN0Mi5zdF9zaXplLCBQUk9UX1JFQUQsIE1B
UF9QUklWQVRFLCBmZDIsIDApOworCWlmIChtYXAyID09IE1BUF9GQUlMRUQpCisJCWdvdG8gY2xv
c2UyOworCisJaWYgKGJjbXAobWFwMSwgbWFwMiwgc3QxLnN0X3NpemUpKQorCQlnb3RvIGNsb3Nl
MjsKKworCXJldCA9IHRydWU7CitjbG9zZTI6CisJY2xvc2UoZmQyKTsKK2Nsb3NlMToKKwljbG9z
ZShmZDEpOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIENyZWF0ZSB0aGUgcGFyZW50IGRp
cmVjdG9yeSBvZiB0aGUgZ2l2ZW4gcGF0aC4KKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgJ2luY2x1
ZGUvY29uZmlnL2F1dG8uY29uZicgaXMgZ2l2ZW4sIGNyZWF0ZSAnaW5jbHVkZS9jb25maWcnLgor
ICovCitzdGF0aWMgaW50IG1ha2VfcGFyZW50X2Rpcihjb25zdCBjaGFyICpwYXRoKQoreworCWNo
YXIgdG1wW1BBVEhfTUFYICsgMV07CisJY2hhciAqcDsKKworCXN0cm5jcHkodG1wLCBwYXRoLCBz
aXplb2YodG1wKSk7CisJdG1wW3NpemVvZih0bXApIC0gMV0gPSAwOworCisJLyogUmVtb3ZlIHRo
ZSBiYXNlIG5hbWUuIEp1c3QgcmV0dXJuIGlmIG5vdGhpbmcgaXMgbGVmdCAqLworCXAgPSBzdHJy
Y2hyKHRtcCwgJy8nKTsKKwlpZiAoIXApCisJCXJldHVybiAwOworCSoocCArIDEpID0gMDsKKwor
CS8qIEp1c3QgaW4gY2FzZSBpdCBpcyBhbiBhYnNvbHV0ZSBwYXRoICovCisJcCA9IHRtcDsKKwl3
aGlsZSAoKnAgPT0gJy8nKQorCQlwKys7CisKKwl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJy8nKSkp
IHsKKwkJKnAgPSAwOworCisJCS8qIHNraXAgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgKi8KKwkJ
aWYgKCFpc19kaXIodG1wKSAmJiBta2Rpcih0bXAsIDA3NTUpKQorCQkJcmV0dXJuIC0xOworCisJ
CSpwID0gJy8nOworCQl3aGlsZSAoKnAgPT0gJy8nKQorCQkJcCsrOworCX0KKworCXJldHVybiAw
OworfQorCitzdGF0aWMgY2hhciBkZXBmaWxlX3BhdGhbUEFUSF9NQVhdOworc3RhdGljIHNpemVf
dCBkZXBmaWxlX3ByZWZpeF9sZW47CisKKy8qIHRvdWNoIGRlcGZpbGUgZm9yIHN5bWJvbCAnbmFt
ZScgKi8KK3N0YXRpYyBpbnQgY29uZl90b3VjaF9kZXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlp
bnQgZmQsIHJldDsKKwljb25zdCBjaGFyICpzOworCWNoYXIgKmQsIGM7CisKKwkvKiBjaGVjayBv
dmVyZmxvdzogcHJlZml4ICsgbmFtZSArICIuaCIgKyAnXDAnIG11c3QgZml0IGluIGJ1ZmZlci4g
Ki8KKwlpZiAoZGVwZmlsZV9wcmVmaXhfbGVuICsgc3RybGVuKG5hbWUpICsgMyA+IHNpemVvZihk
ZXBmaWxlX3BhdGgpKQorCQlyZXR1cm4gLTE7CisKKwlkID0gZGVwZmlsZV9wYXRoICsgZGVwZmls
ZV9wcmVmaXhfbGVuOworCXMgPSBuYW1lOworCisJd2hpbGUgKChjID0gKnMrKykpCisJCSpkKysg
PSAoYyA9PSAnXycpID8gJy8nIDogdG9sb3dlcihjKTsKKwlzdHJjcHkoZCwgIi5oIik7CisKKwkv
KiBBc3N1bWUgZGlyZWN0b3J5IHBhdGggYWxyZWFkeSBleGlzdHMuICovCisJZmQgPSBvcGVuKGRl
cGZpbGVfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJaWYgKGZk
ID09IC0xKSB7CisJCWlmIChlcnJubyAhPSBFTk9FTlQpCisJCQlyZXR1cm4gLTE7CisKKwkJcmV0
ID0gbWFrZV9wYXJlbnRfZGlyKGRlcGZpbGVfcGF0aCk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4g
cmV0OworCisJCS8qIFRyeSBpdCBhZ2Fpbi4gKi8KKwkJZmQgPSBvcGVuKGRlcGZpbGVfcGF0aCwg
T19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7CisJCWlmIChmZCA9PSAtMSkKKwkJ
CXJldHVybiAtMTsKKwl9CisJY2xvc2UoZmQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBj
b25mX3ByaW50ZXIgeworCXZvaWQgKCpwcmludF9zeW1ib2wpKEZJTEUgKiwgc3RydWN0IHN5bWJv
bCAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7CisJdm9pZCAoKnByaW50X2NvbW1lbnQpKEZJTEUg
KiwgY29uc3QgY2hhciAqLCB2b2lkICopOworfTsKKworc3RhdGljIHZvaWQgY29uZl93YXJuaW5n
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50Ziwg
MSwgMikpKTsKKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4u
KQorCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKKworc3RhdGljIGNv
bnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7CitzdGF0aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dh
cm5pbmdzOworCitjb25zdCBjaGFyIGNvbmZfZGVmbmFtZVtdID0gImFyY2gvJChBUkNIKS9kZWZj
b25maWciOworCitzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10LCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwg
IiVzOiVkOndhcm5pbmc6ICIsIGNvbmZfZmlsZW5hbWUsIGNvbmZfbGluZW5vKTsKKwl2ZnByaW50
ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXAp
OworCWNvbmZfd2FybmluZ3MrKzsKK30KKworc3RhdGljIHZvaWQgY29uZl9kZWZhdWx0X21lc3Nh
Z2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykKK3sKKwlwcmludGYoIiNcbiMgIik7CisJcHJpbnRm
KCIlcyIsIHMpOworCXByaW50ZigiXG4jXG4iKTsKK30KKworc3RhdGljIHZvaWQgKCpjb25mX21l
c3NhZ2VfY2FsbGJhY2spKGNvbnN0IGNoYXIgKnMpID0KKwljb25mX2RlZmF1bHRfbWVzc2FnZV9j
YWxsYmFjazsKK3ZvaWQgY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayh2b2lkICgqZm4pKGNvbnN0
IGNoYXIgKnMpKQoreworCWNvbmZfbWVzc2FnZV9jYWxsYmFjayA9IGZuOworfQorCitzdGF0aWMg
dm9pZCBjb25mX21lc3NhZ2UoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsK
KwljaGFyIGJ1Zls0MDk2XTsKKworCWlmICghY29uZl9tZXNzYWdlX2NhbGxiYWNrKQorCQlyZXR1
cm47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKworCXZzbnByaW50ZihidWYsIHNpemVvZihidWYp
LCBmbXQsIGFwKTsKKwljb25mX21lc3NhZ2VfY2FsbGJhY2soYnVmKTsKKwl2YV9lbmQoYXApOwor
fQorCitjb25zdCBjaGFyICpjb25mX2dldF9jb25maWduYW1lKHZvaWQpCit7CisJY2hhciAqbmFt
ZSA9IGdldGVudigiS0NPTkZJR19DT05GSUciKTsKKworCXJldHVybiBuYW1lID8gbmFtZSA6ICIu
Y29uZmlnIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZ2V0X2F1dG9jb25maWdfbmFt
ZSh2b2lkKQoreworCWNoYXIgKm5hbWUgPSBnZXRlbnYoIktDT05GSUdfQVVUT0NPTkZJRyIpOwor
CisJcmV0dXJuIG5hbWUgPyBuYW1lIDogImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZiI7Cit9CisK
K2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCkKK3sKKwlzdGF0aWMgY2hhciBm
dWxsbmFtZVtQQVRIX01BWCsxXTsKKwljaGFyICplbnYsICpuYW1lOworCisJbmFtZSA9IGV4cGFu
ZF9zdHJpbmcoY29uZl9kZWZuYW1lKTsKKwllbnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJaWYgKGVu
dikgeworCQlzbnByaW50ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwgIiVzLyVzIiwgZW52
LCBuYW1lKTsKKwkJaWYgKGlzX3ByZXNlbnQoZnVsbG5hbWUpKQorCQkJcmV0dXJuIGZ1bGxuYW1l
OworCX0KKwlyZXR1cm4gbmFtZTsKK30KKworc3RhdGljIGludCBjb25mX3NldF9zeW1fdmFsKHN0
cnVjdCBzeW1ib2wgKnN5bSwgaW50IGRlZiwgaW50IGRlZl9mbGFncywgY2hhciAqcCkKK3sKKwlj
aGFyICpwMjsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX1RSSVNUQVRFOgorCQlp
ZiAocFswXSA9PSAnbScpIHsKKwkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbW9kOworCQkJc3ltLT5m
bGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8K
KwljYXNlIFNfQk9PTEVBTjoKKwkJaWYgKHBbMF0gPT0gJ3knKSB7CisJCQlzeW0tPmRlZltkZWZd
LnRyaSA9IHllczsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQkJYnJlYWs7CisJCX0K
KwkJaWYgKHBbMF0gPT0gJ24nKSB7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQkJc3lt
LT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZGVmICE9IFNfREVG
X0FVVE8pCisJCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVz
IiwKKwkJCQkgICAgIHAsIHN5bS0+bmFtZSk7CisJCXJldHVybiAxOworCWNhc2UgU19TVFJJTkc6
CisJCWlmICgqcCsrICE9ICciJykKKwkJCWJyZWFrOworCQlmb3IgKHAyID0gcDsgKHAyID0gc3Ry
cGJyayhwMiwgIlwiXFwiKSk7IHAyKyspIHsKKwkJCWlmICgqcDIgPT0gJyInKSB7CisJCQkJKnAy
ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1lbW1vdmUocDIsIHAyICsgMSwgc3RybGVuKHAy
KSk7CisJCX0KKwkJaWYgKCFwMikgeworCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQorCQkJCWNv
bmZfd2FybmluZygiaW52YWxpZCBzdHJpbmcgZm91bmQiKTsKKwkJCXJldHVybiAxOworCQl9CisJ
CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwkJaWYgKHN5
bV9zdHJpbmdfdmFsaWQoc3ltLCBwKSkgeworCQkJc3ltLT5kZWZbZGVmXS52YWwgPSB4c3RyZHVw
KHApOworCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCX0gZWxzZSB7CisJCQlpZiAoZGVm
ICE9IFNfREVGX0FVVE8pCisJCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZh
bGlkIGZvciAlcyIsCisJCQkJCSAgICAgcCwgc3ltLT5uYW1lKTsKKwkJCXJldHVybiAxOworCQl9
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUg
TElORV9HUk9XVEggMTYKK3N0YXRpYyBpbnQgYWRkX2J5dGUoaW50IGMsIGNoYXIgKipsaW5lcHRy
LCBzaXplX3Qgc2xlbiwgc2l6ZV90ICpuKQoreworCWNoYXIgKm5saW5lOworCXNpemVfdCBuZXdf
c2l6ZSA9IHNsZW4gKyAxOworCWlmIChuZXdfc2l6ZSA+ICpuKSB7CisJCW5ld19zaXplICs9IExJ
TkVfR1JPV1RIIC0gMTsKKwkJbmV3X3NpemUgKj0gMjsKKwkJbmxpbmUgPSB4cmVhbGxvYygqbGlu
ZXB0ciwgbmV3X3NpemUpOworCQlpZiAoIW5saW5lKQorCQkJcmV0dXJuIC0xOworCisJCSpsaW5l
cHRyID0gbmxpbmU7CisJCSpuID0gbmV3X3NpemU7CisJfQorCisJKCpsaW5lcHRyKVtzbGVuXSA9
IGM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgY29tcGF0X2dldGxpbmUoY2hh
ciAqKmxpbmVwdHIsIHNpemVfdCAqbiwgRklMRSAqc3RyZWFtKQoreworCWNoYXIgKmxpbmUgPSAq
bGluZXB0cjsKKwlzaXplX3Qgc2xlbiA9IDA7CisKKwlmb3IgKDs7KSB7CisJCWludCBjID0gZ2V0
YyhzdHJlYW0pOworCisJCXN3aXRjaCAoYykgeworCQljYXNlICdcbic6CisJCQlpZiAoYWRkX2J5
dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkKKwkJCQlnb3RvIGVfb3V0OworCQkJc2xlbisrOwor
CQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgRU9GOgorCQkJaWYgKGFkZF9ieXRlKCdcMCcs
ICZsaW5lLCBzbGVuLCBuKSA8IDApCisJCQkJZ290byBlX291dDsKKwkJCSpsaW5lcHRyID0gbGlu
ZTsKKwkJCWlmIChzbGVuID09IDApCisJCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIHNsZW47CisJ
CWRlZmF1bHQ6CisJCQlpZiAoYWRkX2J5dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkKKwkJCQln
b3RvIGVfb3V0OworCQkJc2xlbisrOworCQl9CisJfQorCitlX291dDoKKwlsaW5lW3NsZW4tMV0g
PSAnXDAnOworCSpsaW5lcHRyID0gbGluZTsKKwlyZXR1cm4gLTE7Cit9CisKK2ludCBjb25mX3Jl
YWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZWYpCit7CisJRklMRSAqaW4gPSBOVUxM
OworCWNoYXIgICAqbGluZSA9IE5VTEw7CisJc2l6ZV90ICBsaW5lX2FzaXplID0gMDsKKwljaGFy
ICpwLCAqcDI7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpLCBkZWZfZmxhZ3M7CisKKwlp
ZiAobmFtZSkgeworCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOworCX0gZWxzZSB7CisJCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsKKworCQluYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgpOworCQlp
biA9IHpjb25mX2ZvcGVuKG5hbWUpOworCQlpZiAoaW4pCisJCQlnb3RvIGxvYWQ7CisJCXN5bV9h
ZGRfY2hhbmdlX2NvdW50KDEpOworCQlpZiAoIXN5bV9kZWZjb25maWdfbGlzdCkKKwkJCXJldHVy
biAxOworCisJCWZvcl9hbGxfZGVmYXVsdHMoc3ltX2RlZmNvbmZpZ19saXN0LCBwcm9wKSB7CisJ
CQlpZiAoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcikgPT0gbm8gfHwKKwkJCSAg
ICBwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJCWNvbnRpbnVlOworCQkJc3ltX2Nh
bGNfdmFsdWUocHJvcC0+ZXhwci0+bGVmdC5zeW0pOworCQkJbmFtZSA9IHN5bV9nZXRfc3RyaW5n
X3ZhbHVlKHByb3AtPmV4cHItPmxlZnQuc3ltKTsKKwkJCWluID0gemNvbmZfZm9wZW4obmFtZSk7
CisJCQlpZiAoaW4pIHsKKwkJCQljb25mX21lc3NhZ2UoInVzaW5nIGRlZmF1bHRzIGZvdW5kIGlu
ICVzIiwKKwkJCQkJIG5hbWUpOworCQkJCWdvdG8gbG9hZDsKKwkJCX0KKwkJfQorCX0KKwlpZiAo
IWluKQorCQlyZXR1cm4gMTsKKworbG9hZDoKKwljb25mX2ZpbGVuYW1lID0gbmFtZTsKKwljb25m
X2xpbmVubyA9IDA7CisJY29uZl93YXJuaW5ncyA9IDA7CisKKwlkZWZfZmxhZ3MgPSBTWU1CT0xf
REVGIDw8IGRlZjsKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bS0+ZmxhZ3MgfD0g
U1lNQk9MX0NIQU5HRUQ7CisJCXN5bS0+ZmxhZ3MgJj0gfihkZWZfZmxhZ3N8U1lNQk9MX1ZBTElE
KTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdz
OworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNfSU5UOgorCQljYXNlIFNfSEVYOgor
CQljYXNlIFNfU1RSSU5HOgorCQkJaWYgKHN5bS0+ZGVmW2RlZl0udmFsKQorCQkJCWZyZWUoc3lt
LT5kZWZbZGVmXS52YWwpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWRlZmF1bHQ6CisJCQlz
eW0tPmRlZltkZWZdLnZhbCA9IE5VTEw7CisJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOworCQl9
CisJfQorCisJd2hpbGUgKGNvbXBhdF9nZXRsaW5lKCZsaW5lLCAmbGluZV9hc2l6ZSwgaW4pICE9
IC0xKSB7CisJCWNvbmZfbGluZW5vKys7CisJCXN5bSA9IE5VTEw7CisJCWlmIChsaW5lWzBdID09
ICcjJykgeworCQkJaWYgKG1lbWNtcChsaW5lICsgMiwgQ09ORklHXywgc3RybGVuKENPTkZJR18p
KSkKKwkJCQljb250aW51ZTsKKwkJCXAgPSBzdHJjaHIobGluZSArIDIgKyBzdHJsZW4oQ09ORklH
XyksICcgJyk7CisJCQlpZiAoIXApCisJCQkJY29udGludWU7CisJCQkqcCsrID0gMDsKKwkJCWlm
IChzdHJuY21wKHAsICJpcyBub3Qgc2V0IiwgMTApKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGRl
ZiA9PSBTX0RFRl9VU0VSKSB7CisJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDIgKyBzdHJsZW4o
Q09ORklHXykpOworCQkJCWlmICghc3ltKSB7CisJCQkJCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEp
OworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN5bSA9IHN5bV9sb29r
dXAobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksIDApOworCQkJCWlmIChzeW0tPnR5cGUgPT0g
U19VTktOT1dOKQorCQkJCQlzeW0tPnR5cGUgPSBTX0JPT0xFQU47CisJCQl9CisJCQlpZiAoc3lt
LT5mbGFncyAmIGRlZl9mbGFncykgeworCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6IHJlYXNz
aWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7CisJCQl9CisJCQlzd2l0Y2ggKHN5bS0+
dHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3lt
LT5kZWZbZGVmXS50cmkgPSBubzsKKwkJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQl9IGVsc2UgaWYgKG1lbWNtcChsaW5l
LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsKKwkJCXAgPSBzdHJjaHIobGluZSAr
IHN0cmxlbihDT05GSUdfKSwgJz0nKTsKKwkJCWlmICghcCkKKwkJCQljb250aW51ZTsKKwkJCSpw
KysgPSAwOworCQkJcDIgPSBzdHJjaHIocCwgJ1xuJyk7CisJCQlpZiAocDIpIHsKKwkJCQkqcDIt
LSA9IDA7CisJCQkJaWYgKCpwMiA9PSAnXHInKQorCQkJCQkqcDIgPSAwOworCQkJfQorCisJCQlz
eW0gPSBzeW1fZmluZChsaW5lICsgc3RybGVuKENPTkZJR18pKTsKKwkJCWlmICghc3ltKSB7CisJ
CQkJaWYgKGRlZiA9PSBTX0RFRl9BVVRPKQorCQkJCQkvKgorCQkJCQkgKiBSZWFkaW5nIGZyb20g
aW5jbHVkZS9jb25maWcvYXV0by5jb25mCisJCQkJCSAqIElmIENPTkZJR19GT08gcHJldmlvdXNs
eSBleGlzdGVkIGluCisJCQkJCSAqIGF1dG8uY29uZiBidXQgaXQgaXMgbWlzc2luZyBub3csCisJ
CQkJCSAqIGluY2x1ZGUvY29uZmlnL2Zvby5oIG11c3QgYmUgdG91Y2hlZC4KKwkJCQkJICovCisJ
CQkJCWNvbmZfdG91Y2hfZGVwKGxpbmUgKyBzdHJsZW4oQ09ORklHXykpOworCQkJCWVsc2UKKwkJ
CQkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlm
IChzeW0tPmZsYWdzICYgZGVmX2ZsYWdzKSB7CisJCQkJY29uZl93YXJuaW5nKCJvdmVycmlkZTog
cmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWlmIChjb25m
X3NldF9zeW1fdmFsKHN5bSwgZGVmLCBkZWZfZmxhZ3MsIHApKQorCQkJCWNvbnRpbnVlOworCQl9
IGVsc2UgeworCQkJaWYgKGxpbmVbMF0gIT0gJ1xyJyAmJiBsaW5lWzBdICE9ICdcbicpCisJCQkJ
Y29uZl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGE6ICUuKnMiLAorCQkJCQkgICAgIChpbnQpc3Ry
Y3NwbihsaW5lLCAiXHJcbiIpLCBsaW5lKTsKKworCQkJY29udGludWU7CisJCX0KKworCQlpZiAo
c3ltICYmIHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgeworCQkJc3RydWN0IHN5bWJvbCAqY3Mg
PSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJCXN3aXRjaCAo
c3ltLT5kZWZbZGVmXS50cmkpIHsKKwkJCWNhc2Ugbm86CisJCQkJYnJlYWs7CisJCQljYXNlIG1v
ZDoKKwkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSA9PSB5ZXMpIHsKKwkJCQkJY29uZl93YXJuaW5n
KCIlcyBjcmVhdGVzIGluY29uc2lzdGVudCBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJ
CQljcy0+ZmxhZ3MgJj0gfmRlZl9mbGFnczsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIHll
czoKKwkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSAhPSBubykKKwkJCQkJY29uZl93YXJuaW5nKCJv
dmVycmlkZTogJXMgY2hhbmdlcyBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOworCQkJCWNzLT5k
ZWZbZGVmXS52YWwgPSBzeW07CisJCQkJYnJlYWs7CisJCQl9CisJCQljcy0+ZGVmW2RlZl0udHJp
ID0gRVhQUl9PUihjcy0+ZGVmW2RlZl0udHJpLCBzeW0tPmRlZltkZWZdLnRyaSk7CisJCX0KKwl9
CisJZnJlZShsaW5lKTsKKwlmY2xvc2UoaW4pOworCXJldHVybiAwOworfQorCitpbnQgY29uZl9y
ZWFkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBjb25m
X3Vuc2F2ZWQgPSAwOworCWludCBpOworCisJc3ltX3NldF9jaGFuZ2VfY291bnQoMCk7CisKKwlp
ZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VSKSkgeworCQlzeW1fY2FsY192YWx1
ZShtb2R1bGVzX3N5bSk7CisJCXJldHVybiAxOworCX0KKworCXN5bV9jYWxjX3ZhbHVlKG1vZHVs
ZXNfc3ltKTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUo
c3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9O
T19XUklURSkpCisJCQljb250aW51ZTsKKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSAmJiAoc3lt
LT5mbGFncyAmIFNZTUJPTF9XUklURSkpIHsKKwkJCS8qIGNoZWNrIHRoYXQgY2FsY3VsYXRlZCB2
YWx1ZSBhZ3JlZXMgd2l0aCBzYXZlZCB2YWx1ZSAqLworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsK
KwkJCWNhc2UgU19CT09MRUFOOgorCQkJY2FzZSBTX1RSSVNUQVRFOgorCQkJCWlmIChzeW0tPmRl
ZltTX0RFRl9VU0VSXS50cmkgIT0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKQorCQkJCQli
cmVhazsKKwkJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJCQkJY29udGludWU7CisJCQkJ
LyogZmFsbCB0aHJvdWdoICovCisJCQlkZWZhdWx0OgorCQkJCWlmICghc3RyY21wKHN5bS0+Y3Vy
ci52YWwsIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCisJCQkJCWNvbnRpbnVlOworCQkJCWJy
ZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIShzeW0tPmZs
YWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCS8qIG5vIHByZXZpb3VzIHZhbHVlIGFuZCBub3Qgc2F2
ZWQgKi8KKwkJCWNvbnRpbnVlOworCQljb25mX3Vuc2F2ZWQrKzsKKwkJLyogbWF5YmUgcHJpbnQg
dmFsdWUgaW4gdmVyYm9zZSBtb2RlLi4uICovCisJfQorCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5
bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5
bSkpIHsKKwkJCS8qIFJlc2V0IHZhbHVlcyBvZiBnZW5lcmF0ZXMgdmFsdWVzLCBzbyB0aGV5J2xs
IGFwcGVhcgorCQkJICogYXMgbmV3LCBpZiB0aGV5IHNob3VsZCBiZWNvbWUgdmlzaWJsZSwgYnV0
IHRoYXQKKwkJCSAqIGRvZXNuJ3QgcXVpdGUgd29yayBpZiB0aGUgS2NvbmZpZyBhbmQgdGhlIHNh
dmVkCisJCQkgKiBjb25maWd1cmF0aW9uIGRpc2FncmVlLgorCQkJICovCisJCQlpZiAoc3ltLT52
aXNpYmxlID09IG5vICYmICFjb25mX3Vuc2F2ZWQpCisJCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9M
X0RFRl9VU0VSOworCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCWNhc2UgU19TVFJJTkc6CisJ
CQljYXNlIFNfSU5UOgorCQkJY2FzZSBTX0hFWDoKKwkJCQkvKiBSZXNldCBhIHN0cmluZyB2YWx1
ZSBpZiBpdCdzIG91dCBvZiByYW5nZSAqLworCQkJCWlmIChzeW1fc3RyaW5nX3dpdGhpbl9yYW5n
ZShzeW0sIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCisJCQkJCWJyZWFrOworCQkJCXN5bS0+
ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUR8U1lNQk9MX0RFRl9VU0VSKTsKKwkJCQljb25mX3Vuc2F2
ZWQrKzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9
CisKKwlzeW1fYWRkX2NoYW5nZV9jb3VudChjb25mX3dhcm5pbmdzIHx8IGNvbmZfdW5zYXZlZCk7
CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEtjb25maWcgY29uZmlndXJhdGlvbiBwcmludGVy
CisgKgorICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSByZXN1bHRp
bmcgY29uZmlndXJhdGlvbiBhZnRlcgorICoga2NvbmZpZyBpbnZvY2F0aW9uIGFuZCBgZGVmY29u
ZmlnJyBmaWxlcy4gVW5zZXQgc3ltYm9sIG1pZ2h0IGJlIG9taXR0ZWQgYnkKKyAqIHBhc3Npbmcg
YSBub24tTlVMTCBhcmd1bWVudCB0byB0aGUgcHJpbnRlci4KKyAqCisgKi8KK3N0YXRpYyB2b2lk
CitrY29uZmlnX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25z
dCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwlj
YXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmICgqdmFsdWUgPT0gJ24nKSB7
CisJCQlib29sIHNraXBfdW5zZXQgPSAoYXJnICE9IE5VTEwpOworCisJCQlpZiAoIXNraXBfdW5z
ZXQpCisJCQkJZnByaW50ZihmcCwgIiMgJXMlcyBpcyBub3Qgc2V0XG4iLAorCQkJCSAgICBDT05G
SUdfLCBzeW0tPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CWJyZWFrOworCX0KKworCWZwcmludGYoZnAsICIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5h
bWUsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQKK2tjb25maWdfcHJpbnRfY29tbWVudChGSUxF
ICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBjaGFyICpwID0g
dmFsdWU7CisJc2l6ZV90IGw7CisKKwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcbiIp
OworCQlmcHJpbnRmKGZwLCAiIyIpOworCQlpZiAobCkgeworCQkJZnByaW50ZihmcCwgIiAiKTsK
KwkJCXhmd3JpdGUocCwgbCwgMSwgZnApOworCQkJcCArPSBsOworCQl9CisJCWZwcmludGYoZnAs
ICJcbiIpOworCQlpZiAoKnArKyA9PSAnXDAnKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMg
c3RydWN0IGNvbmZfcHJpbnRlciBrY29uZmlnX3ByaW50ZXJfY2IgPQoreworCS5wcmludF9zeW1i
b2wgPSBrY29uZmlnX3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJp
bnRfY29tbWVudCwKK307CisKKy8qCisgKiBIZWFkZXIgcHJpbnRlcgorICoKKyAqIFRoaXMgcHJp
bnRlciBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgYGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9j
b25mLmgnIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitoZWFkZXJfcHJpbnRfc3ltYm9sKEZJTEUg
KmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpCit7
CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklT
VEFURTogeworCQljb25zdCBjaGFyICpzdWZmaXggPSAiIjsKKworCQlzd2l0Y2ggKCp2YWx1ZSkg
eworCQljYXNlICduJzoKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCXN1ZmZpeCA9ICJfTU9E
VUxFIjsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJZnByaW50ZihmcCwg
IiNkZWZpbmUgJXMlcyVzIDFcbiIsCisJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBzdWZmaXgp
OworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNfSEVYOiB7CisJCWNvbnN0IGNoYXIgKnByZWZp
eCA9ICIiOworCisJCWlmICh2YWx1ZVswXSAhPSAnMCcgfHwgKHZhbHVlWzFdICE9ICd4JyAmJiB2
YWx1ZVsxXSAhPSAnWCcpKQorCQkJcHJlZml4ID0gIjB4IjsKKwkJZnByaW50ZihmcCwgIiNkZWZp
bmUgJXMlcyAlcyVzXG4iLAorCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBwcmVmaXgsIHZhbHVl
KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU19TVFJJTkc6CisJY2FzZSBTX0lOVDoKKwkJZnByaW50
ZihmcCwgIiNkZWZpbmUgJXMlcyAlc1xuIiwKKwkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgdmFs
dWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKK30KKworc3RhdGljIHZv
aWQKK2hlYWRlcl9wcmludF9jb21tZW50KEZJTEUgKmZwLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9p
ZCAqYXJnKQoreworCWNvbnN0IGNoYXIgKnAgPSB2YWx1ZTsKKwlzaXplX3QgbDsKKworCWZwcmlu
dGYoZnAsICIvKlxuIik7CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXG4iKTsKKwkJ
ZnByaW50ZihmcCwgIiAqIik7CisJCWlmIChsKSB7CisJCQlmcHJpbnRmKGZwLCAiICIpOworCQkJ
eGZ3cml0ZShwLCBsLCAxLCBmcCk7CisJCQlwICs9IGw7CisJCX0KKwkJZnByaW50ZihmcCwgIlxu
Iik7CisJCWlmICgqcCsrID09ICdcMCcpCisJCQlicmVhazsKKwl9CisJZnByaW50ZihmcCwgIiAq
L1xuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGhlYWRlcl9wcmludGVyX2Ni
ID0KK3sKKwkucHJpbnRfc3ltYm9sID0gaGVhZGVyX3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29t
bWVudCA9IGhlYWRlcl9wcmludF9jb21tZW50LAorfTsKKworLyoKKyAqIFRyaXN0YXRlIHByaW50
ZXIKKyAqCisgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIGBpbmNs
dWRlL2NvbmZpZy90cmlzdGF0ZS5jb25mJyBmaWxlLgorICovCitzdGF0aWMgdm9pZAordHJpc3Rh
dGVfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIg
KnZhbHVlLCB2b2lkICphcmcpCit7CisKKwlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYg
KnZhbHVlICE9ICduJykKKwkJZnByaW50ZihmcCwgIiVzJXM9JWNcbiIsIENPTkZJR18sIHN5bS0+
bmFtZSwgKGNoYXIpdG91cHBlcigqdmFsdWUpKTsKK30KKworc3RhdGljIHN0cnVjdCBjb25mX3By
aW50ZXIgdHJpc3RhdGVfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9IHRyaXN0YXRl
X3ByaW50X3N5bWJvbCwKKwkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJpbnRfY29tbWVudCwK
K307CisKK3N0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3lt
Ym9sICpzeW0sCisJCQkgICAgICBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpw
cmludGVyX2FyZykKK3sKKwljb25zdCBjaGFyICpzdHI7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19VTktOT1dOOgorCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCQlzdHIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlzdHIgPSBzeW1fZXNjYXBlX3N0cmluZ192YWx1
ZShzdHIpOworCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5bSwgc3RyLCBwcmludGVyX2Fy
Zyk7CisJCWZyZWUoKHZvaWQgKilzdHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlzdHIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5
bSwgc3RyLCBwcmludGVyX2FyZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorY29uZl93cml0ZV9o
ZWFkaW5nKEZJTEUgKmZwLCBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpwcmlu
dGVyX2FyZykKK3sKKwljaGFyIGJ1ZlsyNTZdOworCisJc25wcmludGYoYnVmLCBzaXplb2YoYnVm
KSwKKwkgICAgIlxuIgorCSAgICAiQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZTsgRE8gTk9U
IEVESVQuXG4iCisJICAgICIlc1xuIiwKKwkgICAgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKwor
CXByaW50ZXItPnByaW50X2NvbW1lbnQoZnAsIGJ1ZiwgcHJpbnRlcl9hcmcpOworfQorCisvKgor
ICogV3JpdGUgb3V0IGEgbWluaW1hbCBjb25maWcuCisgKiBBbGwgdmFsdWVzIHRoYXQgaGFzIGRl
ZmF1bHQgdmFsdWVzIGFyZSBza2lwcGVkIGFzIHRoaXMgaXMgcmVkdW5kYW50LgorICovCitpbnQg
Y29uZl93cml0ZV9kZWZjb25maWcoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisJc3RydWN0IHN5
bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICptZW51OworCUZJTEUgKm91dDsKKworCW91dCA9IGZv
cGVuKGZpbGVuYW1lLCAidyIpOworCWlmICghb3V0KQorCQlyZXR1cm4gMTsKKworCXN5bV9jbGVh
cl9hbGxfdmFsaWQoKTsKKworCS8qIFRyYXZlcnNlIGFsbCBtZW51cyB0byBmaW5kIGFsbCByZWxl
dmFudCBzeW1ib2xzICovCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisKKwl3aGlsZSAobWVudSAh
PSBOVUxMKQorCXsKKwkJc3ltID0gbWVudS0+c3ltOworCQlpZiAoc3ltID09IE5VTEwpIHsKKwkJ
CWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQorCQkJCWdvdG8gbmV4dF9tZW51OworCQl9IGVs
c2UgaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJ
CQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKKwkJCQlnb3RvIG5leHRfbWVudTsK
KwkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKKwkJCS8qIElmIHdlIGNhbm5vdCBjaGFu
Z2UgdGhlIHN5bWJvbCAtIHNraXAgKi8KKwkJCWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0pKQor
CQkJCWdvdG8gbmV4dF9tZW51OworCQkJLyogSWYgc3ltYm9sIGVxdWFscyB0byBkZWZhdWx0IHZh
bHVlIC0gc2tpcCAqLworCQkJaWYgKHN0cmNtcChzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLCBz
eW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN5bSkpID09IDApCisJCQkJZ290byBuZXh0X21lbnU7CisK
KwkJCS8qCisJCQkgKiBJZiBzeW1ib2wgaXMgYSBjaG9pY2UgdmFsdWUgYW5kIGVxdWFscyB0byB0
aGUKKwkJCSAqIGRlZmF1bHQgZm9yIGEgY2hvaWNlIC0gc2tpcC4KKwkJCSAqIEJ1dCBvbmx5IGlm
IHZhbHVlIGlzIGJvb2wgYW5kIGVxdWFsIHRvICJ5IiBhbmQKKwkJCSAqIGNob2ljZSBpcyBub3Qg
Im9wdGlvbmFsIi4KKwkJCSAqIChJZiBjaG9pY2UgaXMgIm9wdGlvbmFsIiB0aGVuIGFsbCB2YWx1
ZXMgY2FuIGJlICJuIikKKwkJCSAqLworCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkg
eworCQkJCXN0cnVjdCBzeW1ib2wgKmNzOworCQkJCXN0cnVjdCBzeW1ib2wgKmRzOworCisJCQkJ
Y3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJCQlkcyA9
IHN5bV9jaG9pY2VfZGVmYXVsdChjcyk7CisJCQkJaWYgKCFzeW1faXNfb3B0aW9uYWwoY3MpICYm
IHN5bSA9PSBkcykgeworCQkJCQlpZiAoKHN5bS0+dHlwZSA9PSBTX0JPT0xFQU4pICYmCisJCQkJ
CSAgICBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQorCQkJCQkJZ290byBuZXh0
X21lbnU7CisJCQkJfQorCQkJfQorCQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29u
ZmlnX3ByaW50ZXJfY2IsIE5VTEwpOworCQl9CituZXh0X21lbnU6CisJCWlmIChtZW51LT5saXN0
ICE9IE5VTEwpIHsKKwkJCW1lbnUgPSBtZW51LT5saXN0OworCQl9CisJCWVsc2UgaWYgKG1lbnUt
Pm5leHQgIT0gTlVMTCkgeworCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCX0gZWxzZSB7CisJCQl3
aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7CisJCQkJaWYgKG1lbnUtPm5leHQgIT0gTlVM
TCkgeworCQkJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisJfQorCWZjbG9zZShvdXQpOworCXJldHVybiAwOworfQorCitpbnQgY29uZl93cml0ZShj
b25zdCBjaGFyICpuYW1lKQoreworCUZJTEUgKm91dDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJ
c3RydWN0IG1lbnUgKm1lbnU7CisJY29uc3QgY2hhciAqc3RyOworCWNoYXIgdG1wbmFtZVtQQVRI
X01BWCArIDFdLCBvbGRuYW1lW1BBVEhfTUFYICsgMV07CisJY2hhciAqZW52OworCWJvb2wgbmVl
ZF9uZXdsaW5lID0gZmFsc2U7CisKKwlpZiAoIW5hbWUpCisJCW5hbWUgPSBjb25mX2dldF9jb25m
aWduYW1lKCk7CisKKwlpZiAoISpuYW1lKSB7CisJCWZwcmludGYoc3RkZXJyLCAiY29uZmlnIG5h
bWUgaXMgZW1wdHlcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKGlzX2RpcihuYW1lKSkg
eworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJcyBhIGRpcmVjdG9yeVxuIiwgbmFtZSk7CisJCXJl
dHVybiAtMTsKKwl9CisKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQorCQlyZXR1cm4gLTE7
CisKKwllbnYgPSBnZXRlbnYoIktDT05GSUdfT1ZFUldSSVRFQ09ORklHIik7CisJaWYgKGVudiAm
JiAqZW52KSB7CisJCSp0bXBuYW1lID0gMDsKKwkJb3V0ID0gZm9wZW4obmFtZSwgInciKTsKKwl9
IGVsc2UgeworCQlzbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICIlcy4lZC50bXAi
LAorCQkJIG5hbWUsIChpbnQpZ2V0cGlkKCkpOworCQlvdXQgPSBmb3Blbih0bXBuYW1lLCAidyIp
OworCX0KKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0
LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKworCWlmICghY29uZl9nZXRfY2hhbmdlZCgp
KQorCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwltZW51ID0gcm9vdG1lbnUubGlzdDsKKwl3
aGlsZSAobWVudSkgeworCQlzeW0gPSBtZW51LT5zeW07CisJCWlmICghc3ltKSB7CisJCQlpZiAo
IW1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJCQlnb3RvIG5leHQ7CisJCQlzdHIgPSBtZW51X2dl
dF9wcm9tcHQobWVudSk7CisJCQlmcHJpbnRmKG91dCwgIlxuIgorCQkJCSAgICAgIiNcbiIKKwkJ
CQkgICAgICIjICVzXG4iCisJCQkJICAgICAiI1xuIiwgc3RyKTsKKwkJCW5lZWRfbmV3bGluZSA9
IGZhbHNlOworCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0UpKSB7CisJ
CQlzeW1fY2FsY192YWx1ZShzeW0pOworCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklU
RSkpCisJCQkJZ290byBuZXh0OworCQkJaWYgKG5lZWRfbmV3bGluZSkgeworCQkJCWZwcmludGYo
b3V0LCAiXG4iKTsKKwkJCQluZWVkX25ld2xpbmUgPSBmYWxzZTsKKwkJCX0KKwkJCXN5bS0+Zmxh
Z3MgJj0gflNZTUJPTF9XUklURTsKKwkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2Nv
bmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKwkJfQorCituZXh0OgorCQlpZiAobWVudS0+bGlzdCkg
eworCQkJbWVudSA9IG1lbnUtPmxpc3Q7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobWVudS0+
bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUt
PnBhcmVudCkpIHsKKwkJCWlmICghbWVudS0+c3ltICYmIG1lbnVfaXNfdmlzaWJsZShtZW51KSAm
JgorCQkJICAgIG1lbnUgIT0gJnJvb3RtZW51KSB7CisJCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0
KG1lbnUpOworCQkJCWZwcmludGYob3V0LCAiIyBlbmQgb2YgJXNcbiIsIHN0cik7CisJCQkJbmVl
ZF9uZXdsaW5lID0gdHJ1ZTsKKwkJCX0KKwkJCWlmIChtZW51LT5uZXh0KSB7CisJCQkJbWVudSA9
IG1lbnUtPm5leHQ7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZmNsb3NlKG91dCk7CisK
KwlpZiAoKnRtcG5hbWUpIHsKKwkJaWYgKGlzX3NhbWUobmFtZSwgdG1wbmFtZSkpIHsKKwkJCWNv
bmZfbWVzc2FnZSgiTm8gY2hhbmdlIHRvICVzIiwgbmFtZSk7CisJCQl1bmxpbmsodG1wbmFtZSk7
CisJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc25w
cmludGYob2xkbmFtZSwgc2l6ZW9mKG9sZG5hbWUpLCAiJXMub2xkIiwgbmFtZSk7CisJCXJlbmFt
ZShuYW1lLCBvbGRuYW1lKTsKKwkJaWYgKHJlbmFtZSh0bXBuYW1lLCBuYW1lKSkKKwkJCXJldHVy
biAxOworCX0KKworCWNvbmZfbWVzc2FnZSgiY29uZmlndXJhdGlvbiB3cml0dGVuIHRvICVzIiwg
bmFtZSk7CisKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKKworCXJldHVybiAwOworfQorCisv
KiB3cml0ZSBhIGRlcGVuZGVuY3kgZmlsZSBhcyB1c2VkIGJ5IGtidWlsZCB0byB0cmFjayBkZXBl
bmRlbmNpZXMgKi8KK3N0YXRpYyBpbnQgY29uZl93cml0ZV9kZXAoY29uc3QgY2hhciAqbmFtZSkK
K3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlGSUxFICpvdXQ7CisKKwlvdXQgPSBmb3BlbigiLi5j
b25maWcudG1wIiwgInciKTsKKwlpZiAoIW91dCkKKwkJcmV0dXJuIDE7CisJZnByaW50ZihvdXQs
ICJkZXBzX2NvbmZpZyA6PSBcXFxuIik7CisJZm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBm
aWxlID0gZmlsZS0+bmV4dCkgeworCQlpZiAoZmlsZS0+bmV4dCkKKwkJCWZwcmludGYob3V0LCAi
XHQlcyBcXFxuIiwgZmlsZS0+bmFtZSk7CisJCWVsc2UKKwkJCWZwcmludGYob3V0LCAiXHQlc1xu
IiwgZmlsZS0+bmFtZSk7CisJfQorCWZwcmludGYob3V0LCAiXG4lczogXFxcbiIKKwkJICAgICAi
XHQkKGRlcHNfY29uZmlnKVxuXG4iLCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7CisKKwll
bnZfd3JpdGVfZGVwKG91dCwgY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCkpOworCisJZnByaW50
ZihvdXQsICJcbiQoZGVwc19jb25maWcpOiA7XG4iKTsKKwlmY2xvc2Uob3V0KTsKKworCWlmICht
YWtlX3BhcmVudF9kaXIobmFtZSkpCisJCXJldHVybiAxOworCXJlbmFtZSgiLi5jb25maWcudG1w
IiwgbmFtZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29uZl90b3VjaF9kZXBzKHZv
aWQpCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50IHJl
cywgaTsKKworCXN0cmNweShkZXBmaWxlX3BhdGgsICJpbmNsdWRlL2NvbmZpZy8iKTsKKwlkZXBm
aWxlX3ByZWZpeF9sZW4gPSBzdHJsZW4oZGVwZmlsZV9wYXRoKTsKKworCW5hbWUgPSBjb25mX2dl
dF9hdXRvY29uZmlnX25hbWUoKTsKKwljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX0FVVE8p
OworCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBz
eW0pIHsKKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9M
X05PX1dSSVRFKSB8fCAhc3ltLT5uYW1lKQorCQkJY29udGludWU7CisJCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX1dSSVRFKSB7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykg
eworCQkJCS8qCisJCQkJICogc3ltYm9sIGhhcyBvbGQgYW5kIG5ldyB2YWx1ZSwKKwkJCQkgKiBz
byBjb21wYXJlIHRoZW0uLi4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJ
CWNhc2UgU19CT09MRUFOOgorCQkJCWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRf
dHJpc3RhdGVfdmFsdWUoc3ltKSA9PQorCQkJCQkgICAgc3ltLT5kZWZbU19ERUZfQVVUT10udHJp
KQorCQkJCQkJY29udGludWU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU19TVFJJTkc6CisJCQkJ
Y2FzZSBTX0hFWDoKKwkJCQljYXNlIFNfSU5UOgorCQkJCQlpZiAoIXN0cmNtcChzeW1fZ2V0X3N0
cmluZ192YWx1ZShzeW0pLAorCQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnZhbCkpCisJ
CQkJCQljb250aW51ZTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZXJlIGlzIG5vIG9sZCB2YWx1
ZSwgb25seSAnbm8nICh1bnNldCkKKwkJCQkgKiBpcyBhbGxvd2VkIGFzIG5ldyB2YWx1ZS4KKwkJ
CQkgKi8KKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQkJCWNhc2UgU19CT09MRUFOOgorCQkJ
CWNhc2UgU19UUklTVEFURToKKwkJCQkJaWYgKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9
PSBubykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RF
Rl9BVVRPKSkKKwkJCS8qIFRoZXJlIGlzIG5laXRoZXIgYW4gb2xkIG5vciBhIG5ldyB2YWx1ZS4g
Ki8KKwkJCWNvbnRpbnVlOworCQkvKiBlbHNlCisJCSAqCVRoZXJlIGlzIGFuIG9sZCB2YWx1ZSwg
YnV0IG5vIG5ldyB2YWx1ZSAoJ25vJyAodW5zZXQpCisJCSAqCWlzbid0IHNhdmVkIGluIGF1dG8u
Y29uZiwgc28gdGhlIG9sZCB2YWx1ZSBpcyBhbHdheXMKKwkJICoJZGlmZmVyZW50IGZyb20gJ25v
JykuCisJCSAqLworCisJCXJlcyA9IGNvbmZfdG91Y2hfZGVwKHN5bS0+bmFtZSk7CisJCWlmIChy
ZXMpCisJCQlyZXR1cm4gcmVzOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgY29uZl93cml0
ZV9hdXRvY29uZihpbnQgb3ZlcndyaXRlKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwljb25z
dCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKmF1dG9jb25mX25hbWUgPSBjb25mX2dldF9hdXRv
Y29uZmlnX25hbWUoKTsKKwlGSUxFICpvdXQsICp0cmlzdGF0ZSwgKm91dF9oOworCWludCBpOwor
CisJaWYgKCFvdmVyd3JpdGUgJiYgaXNfcHJlc2VudChhdXRvY29uZl9uYW1lKSkKKwkJcmV0dXJu
IDA7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwljb25mX3dyaXRlX2RlcCgiaW5jbHVk
ZS9jb25maWcvYXV0by5jb25mLmNtZCIpOworCisJaWYgKGNvbmZfdG91Y2hfZGVwcygpKQorCQly
ZXR1cm4gMTsKKworCW91dCA9IGZvcGVuKCIudG1wY29uZmlnIiwgInciKTsKKwlpZiAoIW91dCkK
KwkJcmV0dXJuIDE7CisKKwl0cmlzdGF0ZSA9IGZvcGVuKCIudG1wY29uZmlnX3RyaXN0YXRlIiwg
InciKTsKKwlpZiAoIXRyaXN0YXRlKSB7CisJCWZjbG9zZShvdXQpOworCQlyZXR1cm4gMTsKKwl9
CisKKwlvdXRfaCA9IGZvcGVuKCIudG1wY29uZmlnLmgiLCAidyIpOworCWlmICghb3V0X2gpIHsK
KwkJZmNsb3NlKG91dCk7CisJCWZjbG9zZSh0cmlzdGF0ZSk7CisJCXJldHVybiAxOworCX0KKwor
CWNvbmZfd3JpdGVfaGVhZGluZyhvdXQsICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwpOworCisJ
Y29uZl93cml0ZV9oZWFkaW5nKHRyaXN0YXRlLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwgTlVMTCk7
CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0X2gsICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7
CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJ
CWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8ICFzeW0tPm5hbWUpCisJCQljb250
aW51ZTsKKworCQkvKiB3cml0ZSBzeW1ib2wgdG8gYXV0by5jb25mLCB0cmlzdGF0ZSBhbmQgaGVh
ZGVyIGZpbGVzICovCisJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZpZ19wcmlu
dGVyX2NiLCAodm9pZCAqKTEpOworCisJCWNvbmZfd3JpdGVfc3ltYm9sKHRyaXN0YXRlLCBzeW0s
ICZ0cmlzdGF0ZV9wcmludGVyX2NiLCAodm9pZCAqKTEpOworCisJCWNvbmZfd3JpdGVfc3ltYm9s
KG91dF9oLCBzeW0sICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7CisJfQorCWZjbG9zZShvdXQp
OworCWZjbG9zZSh0cmlzdGF0ZSk7CisJZmNsb3NlKG91dF9oKTsKKworCW5hbWUgPSBnZXRlbnYo
IktDT05GSUdfQVVUT0hFQURFUiIpOworCWlmICghbmFtZSkKKwkJbmFtZSA9ICJpbmNsdWRlL2dl
bmVyYXRlZC9hdXRvY29uZi5oIjsKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQorCQlyZXR1
cm4gMTsKKwlpZiAocmVuYW1lKCIudG1wY29uZmlnLmgiLCBuYW1lKSkKKwkJcmV0dXJuIDE7CisK
KwluYW1lID0gZ2V0ZW52KCJLQ09ORklHX1RSSVNUQVRFIik7CisJaWYgKCFuYW1lKQorCQluYW1l
ID0gImluY2x1ZGUvY29uZmlnL3RyaXN0YXRlLmNvbmYiOworCWlmIChtYWtlX3BhcmVudF9kaXIo
bmFtZSkpCisJCXJldHVybiAxOworCWlmIChyZW5hbWUoIi50bXBjb25maWdfdHJpc3RhdGUiLCBu
YW1lKSkKKwkJcmV0dXJuIDE7CisKKwlpZiAobWFrZV9wYXJlbnRfZGlyKGF1dG9jb25mX25hbWUp
KQorCQlyZXR1cm4gMTsKKwkvKgorCSAqIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzdGVwLCBrYnVp
bGQgaGFzIGEgZGVwZW5kZW5jeSBvbiBhdXRvLmNvbmYKKwkgKiBhbmQgdGhpcyBtYXJrcyB0aGUg
c3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBzdGVwcy4KKwkgKi8KKwlpZiAo
cmVuYW1lKCIudG1wY29uZmlnIiwgYXV0b2NvbmZfbmFtZSkpCisJCXJldHVybiAxOworCisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3ltX2NoYW5nZV9jb3VudDsKK3N0YXRpYyB2b2lkICgq
Y29uZl9jaGFuZ2VkX2NhbGxiYWNrKSh2b2lkKTsKKwordm9pZCBzeW1fc2V0X2NoYW5nZV9jb3Vu
dChpbnQgY291bnQpCit7CisJaW50IF9zeW1fY2hhbmdlX2NvdW50ID0gc3ltX2NoYW5nZV9jb3Vu
dDsKKwlzeW1fY2hhbmdlX2NvdW50ID0gY291bnQ7CisJaWYgKGNvbmZfY2hhbmdlZF9jYWxsYmFj
ayAmJgorCSAgICAoYm9vbClfc3ltX2NoYW5nZV9jb3VudCAhPSAoYm9vbCljb3VudCkKKwkJY29u
Zl9jaGFuZ2VkX2NhbGxiYWNrKCk7Cit9CisKK3ZvaWQgc3ltX2FkZF9jaGFuZ2VfY291bnQoaW50
IGNvdW50KQoreworCXN5bV9zZXRfY2hhbmdlX2NvdW50KGNvdW50ICsgc3ltX2NoYW5nZV9jb3Vu
dCk7Cit9CisKK2Jvb2wgY29uZl9nZXRfY2hhbmdlZCh2b2lkKQoreworCXJldHVybiBzeW1fY2hh
bmdlX2NvdW50OworfQorCit2b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZu
KSh2b2lkKSkKK3sKKwljb25mX2NoYW5nZWRfY2FsbGJhY2sgPSBmbjsKK30KKworc3RhdGljIGJv
b2wgcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoc3RydWN0IHN5bWJvbCAqY3N5bSkKK3sKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBleHByICpl
OworCWludCBjbnQsIGRlZjsKKworCS8qCisJICogSWYgY2hvaWNlIGlzIG1vZCB0aGVuIHdlIG1h
eSBoYXZlIG1vcmUgaXRlbXMgc2VsZWN0ZWQKKwkgKiBhbmQgaWYgbm8gdGhlbiBuby1vbmUuCisJ
ICogSW4gYm90aCBjYXNlcyBzdG9wLgorCSAqLworCWlmIChjc3ltLT5jdXJyLnRyaSAhPSB5ZXMp
CisJCXJldHVybiBmYWxzZTsKKworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNzeW0pOwor
CisJLyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8KKwljbnQgPSAwOworCWV4cHJf
bGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQorCQljbnQrKzsKKworCS8qCisJ
ICogZmluZCBhIHJhbmRvbSB2YWx1ZSBhbmQgc2V0IGl0IHRvIHllcywKKwkgKiBzZXQgdGhlIHJl
c3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9uZSBzZXQKKwkgKi8KKwlkZWYgPSAocmFuZCgpICUg
Y250KTsKKworCWNudCA9IDA7CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBl
LCBzeW0pIHsKKwkJaWYgKGRlZiA9PSBjbnQrKykgeworCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0u
dHJpID0geWVzOworCQkJY3N5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsKKwkJfQorCQll
bHNlIHsKKwkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOworCQl9CisJCXN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2Fs
Y3VsYXRlZCAqLworCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfVkFMSUQ7CisJfQorCWNzeW0tPmZs
YWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2Fs
Y3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsKKworCXJldHVybiB0
cnVlOworfQorCit2b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpjc3lt
KQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3Ry
dWN0IGV4cHIgKmU7CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8q
CisJICogU2V0IGFsbCBub24tYXNzaW5nZWQgY2hvaWNlIHZhbHVlcyB0byBubworCSAqLworCWV4
cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmICghc3ltX2hh
c192YWx1ZShzeW0pKQorCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87CisJfQorCWNz
eW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFs
dWUgY2FsY3VsYXRlZCAqLworCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEIHwgU1lNQk9M
X05FRURfU0VUX0NIT0lDRV9WQUxVRVMpOworfQorCitib29sIGNvbmZfc2V0X2FsbF9uZXdfc3lt
Ym9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpj
c3ltOworCWludCBpLCBjbnQsIHBieSwgcHR5LCBwdG07CS8qIHBieTogcHJvYmFiaWxpdHkgb2Yg
Ym9vbCAgICAgPSB5CisJCQkJCSAqIHB0eTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSB5CisJ
CQkJCSAqIHB0bTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSBtCisJCQkJCSAqLworCisJcGJ5
ID0gNTA7IHB0eSA9IHB0bSA9IDMzOyAvKiBjYW4ndCBnbyBhcyB0aGUgZGVmYXVsdCBpbiBzd2l0
Y2gtY2FzZQorCQkJCSAgICogYmVsb3csIG90aGVyd2lzZSBnY2Mgd2hpbmVzIGFib3V0CisJCQkJ
ICAgKiAtV21heWJlLXVuaW5pdGlhbGl6ZWQgKi8KKwlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKSB7
CisJCWludCBuLCBwWzNdOworCQljaGFyICplbnYgPSBnZXRlbnYoIktDT05GSUdfUFJPQkFCSUxJ
VFkiKTsKKwkJbiA9IDA7CisJCXdoaWxlKCBlbnYgJiYgKmVudiApIHsKKwkJCWNoYXIgKmVuZHA7
CisJCQlpbnQgdG1wID0gc3RydG9sKCBlbnYsICZlbmRwLCAxMCApOworCQkJaWYoIHRtcCA+PSAw
ICYmIHRtcCA8PSAxMDAgKSB7CisJCQkJcFtuKytdID0gdG1wOworCQkJfSBlbHNlIHsKKwkJCQll
cnJubyA9IEVSQU5HRTsKKwkJCQlwZXJyb3IoICJLQ09ORklHX1BST0JBQklMSVRZIiApOworCQkJ
CWV4aXQoIDEgKTsKKwkJCX0KKwkJCWVudiA9ICgqZW5kcCA9PSAnOicpID8gZW5kcCsxIDogZW5k
cDsKKwkJCWlmKCBuID49MyApIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlzd2l0Y2goIG4g
KSB7CisJCWNhc2UgMToKKwkJCXBieSA9IHBbMF07IHB0bSA9IHBieS8yOyBwdHkgPSBwYnktcHRt
OworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCXB0eSA9IHBbMF07IHB0bSA9IHBbMV07IHBieSA9
IHB0eSArIHB0bTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlwYnkgPSBwWzBdOyBwdHkgPSBw
WzFdOyBwdG0gPSBwWzJdOworCQkJYnJlYWs7CisJCX0KKworCQlpZiggcHR5K3B0bSA+IDEwMCAp
IHsKKwkJCWVycm5vID0gRVJBTkdFOworCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIg
KTsKKwkJCWV4aXQoIDEgKTsKKwkJfQorCX0KKwlib29sIGhhc19jaGFuZ2VkID0gZmFsc2U7CisK
Kwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwg
KHN5bS0+ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpKQorCQkJY29udGludWU7CisJCXN3aXRjaCAoc3lt
X2dldF90eXBlKHN5bSkpIHsKKwkJY2FzZSBTX0JPT0xFQU46CisJCWNhc2UgU19UUklTVEFURToK
KwkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsKKwkJCXN3aXRjaCAobW9kZSkgeworCQkJY2FzZSBkZWZf
eWVzOgorCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgZGVmX21vZDoKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7CisJCQkJ
YnJlYWs7CisJCQljYXNlIGRlZl9ubzoKKwkJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9BTExO
T0NPTkZJR19ZKQorCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7CisJCQkJZWxz
ZQorCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlicmVhazsKKwkJCWNh
c2UgZGVmX3JhbmRvbToKKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKKwkJCQlj
bnQgPSByYW5kKCkgJSAxMDA7CisJCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJ
CQkJCWlmIChjbnQgPCBwdHkpCisJCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7
CisJCQkJCWVsc2UgaWYgKGNudCA8IChwdHkrcHRtKSkKKwkJCQkJCXN5bS0+ZGVmW1NfREVGX1VT
RVJdLnRyaSA9IG1vZDsKKwkJCQl9IGVsc2UgaWYgKGNudCA8IHBieSkKKwkJCQkJc3ltLT5kZWZb
U19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQljb250
aW51ZTsKKwkJCX0KKwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9y
YW5kb20pKQorCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQkJYnJlYWs7CisJ
CWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJfQorCisJc3ltX2NsZWFyX2FsbF92YWxpZCgp
OworCisJLyoKKwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuCisJ
ICogSWYgY3Vyci50cmkgZXF1YWxzIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2ZXJhbAor
CSAqIGNob2ljZSBzeW1ib2xzIGluIG9uZSBibG9jay4KKwkgKiBJbiB0aGlzIGNhc2Ugd2UgZG8g
bm90aGluZy4KKwkgKiBJZiBjdXJyLnRyaSBlcXVhbHMgeWVzIHRoZW4gb25seSBvbmUgc3ltYm9s
IGNhbiBiZQorCSAqIHNlbGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQgaXQgdG8g
eWVzLAorCSAqIGFuZCB0aGUgcmVzdCB0byBuby4KKwkgKi8KKwlpZiAobW9kZSAhPSBkZWZfcmFu
ZG9tKSB7CisJCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7CisJCQlpZiAoKHN5bV9pc19jaG9p
Y2UoY3N5bSkgJiYgIXN5bV9oYXNfdmFsdWUoY3N5bSkpIHx8CisJCQkgICAgc3ltX2lzX2Nob2lj
ZV92YWx1ZShjc3ltKSkKKwkJCQljc3ltLT5mbGFncyB8PSBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNF
X1ZBTFVFUzsKKwkJfQorCX0KKworCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7CisJCWlmIChz
eW1faGFzX3ZhbHVlKGNzeW0pIHx8ICFzeW1faXNfY2hvaWNlKGNzeW0pKQorCQkJY29udGludWU7
CisKKwkJc3ltX2NhbGNfdmFsdWUoY3N5bSk7CisJCWlmIChtb2RlID09IGRlZl9yYW5kb20pCisJ
CQloYXNfY2hhbmdlZCA9IHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKGNzeW0pOworCQllbHNlIHsK
KwkJCXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhjc3ltKTsKKwkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsK
KwkJfQorCX0KKworCXJldHVybiBoYXNfY2hhbmdlZDsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZXhwci5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdmZmZmMwotLS0gL2Rldi9udWxsCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jCkBAIC0wLDAgKzEsMTI5NyBAQAorLy8gU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4g
WmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+
CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKKyNkZWZpbmUg
REVCVUdfRVhQUgkwCisKK3N0YXRpYyBpbnQgZXhwcl9lcShzdHJ1Y3QgZXhwciAqZTEsIHN0cnVj
dCBleHByICplMik7CitzdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX3luKHN0cnVj
dCBleHByICplKTsKKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfc3ltYm9sKHN0cnVjdCBzeW1i
b2wgKnN5bSkKK3sKKwlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7CisJ
ZS0+dHlwZSA9IEVfU1lNQk9MOworCWUtPmxlZnQuc3ltID0gc3ltOworCXJldHVybiBlOworfQor
CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKmNlKQoreworCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsK
KwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LmV4cHIgPSBjZTsKKwlyZXR1cm4gZTsKK30KKwor
c3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBl
eHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBleHByICplID0geGNhbGxvYygx
LCBzaXplb2YoKmUpKTsKKwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LmV4cHIgPSBlMTsKKwll
LT5yaWdodC5leHByID0gZTI7CisJcmV0dXJuIGU7Cit9CisKK3N0cnVjdCBleHByICpleHByX2Fs
bG9jX2NvbXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBz
eW1ib2wgKnMyKQoreworCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsK
KwllLT50eXBlID0gdHlwZTsKKwllLT5sZWZ0LnN5bSA9IHMxOworCWUtPnJpZ2h0LnN5bSA9IHMy
OworCXJldHVybiBlOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4
cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJaWYgKCFlMSkKKwkJcmV0dXJuIGUyOworCXJl
dHVybiBlMiA/IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpIDogZTE7Cit9CisKK3N0cnVj
dCBleHByICpleHByX2FsbG9jX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQor
eworCWlmICghZTEpCisJCXJldHVybiBlMjsKKwlyZXR1cm4gZTIgPyBleHByX2FsbG9jX3R3byhF
X09SLCBlMSwgZTIpIDogZTE7Cit9CisKK3N0cnVjdCBleHByICpleHByX2NvcHkoY29uc3Qgc3Ry
dWN0IGV4cHIgKm9yZykKK3sKKwlzdHJ1Y3QgZXhwciAqZTsKKworCWlmICghb3JnKQorCQlyZXR1
cm4gTlVMTDsKKworCWUgPSB4bWFsbG9jKHNpemVvZigqb3JnKSk7CisJbWVtY3B5KGUsIG9yZywg
c2l6ZW9mKCpvcmcpKTsKKwlzd2l0Y2ggKG9yZy0+dHlwZSkgeworCWNhc2UgRV9TWU1CT0w6CisJ
CWUtPmxlZnQgPSBvcmctPmxlZnQ7CisJCWJyZWFrOworCWNhc2UgRV9OT1Q6CisJCWUtPmxlZnQu
ZXhwciA9IGV4cHJfY29weShvcmctPmxlZnQuZXhwcik7CisJCWJyZWFrOworCWNhc2UgRV9FUVVB
TDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRI
OgorCWNhc2UgRV9VTkVRVUFMOgorCQllLT5sZWZ0LnN5bSA9IG9yZy0+bGVmdC5zeW07CisJCWUt
PnJpZ2h0LnN5bSA9IG9yZy0+cmlnaHQuc3ltOworCQlicmVhazsKKwljYXNlIEVfQU5EOgorCWNh
c2UgRV9PUjoKKwljYXNlIEVfTElTVDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+
bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfY29weShvcmctPnJpZ2h0LmV4cHIp
OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcHJpbnRmKHN0ZGVyciwgImNhbid0IGNvcHkgdHlw
ZSAlZFxuIiwgZS0+dHlwZSk7CisJCWZyZWUoZSk7CisJCWUgPSBOVUxMOworCQlicmVhazsKKwl9
CisKKwlyZXR1cm4gZTsKK30KKwordm9pZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpCit7CisJ
aWYgKCFlKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfU1lNQk9M
OgorCQlicmVhazsKKwljYXNlIEVfTk9UOgorCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJ
YnJlYWs7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0dUSDoKKwljYXNl
IEVfTEVROgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX1VORVFVQUw6CisJCWJyZWFrOworCWNhc2Ug
RV9PUjoKKwljYXNlIEVfQU5EOgorCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJZXhwcl9m
cmVlKGUtPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcHJpbnRmKHN0ZGVy
ciwgImhvdyB0byBmcmVlIHR5cGUgJWQ/XG4iLCBlLT50eXBlKTsKKwkJYnJlYWs7CisJfQorCWZy
ZWUoZSk7Cit9CisKK3N0YXRpYyBpbnQgdHJhbnNfY291bnQ7CisKKyNkZWZpbmUgZTEgKCplcDEp
CisjZGVmaW5lIGUyICgqZXAyKQorCisvKgorICogZXhwcl9lbGltaW5hdGVfZXEoKSBoZWxwZXIu
CisgKgorICogV2Fsa3MgdGhlIHR3byBleHByZXNzaW9uIHRyZWVzIGdpdmVuIGluICdlcDEnIGFu
ZCAnZXAyJy4gQW55IG5vZGUgdGhhdCBkb2VzCisgKiBub3QgaGF2ZSB0eXBlICd0eXBlJyAoRV9P
Ui9FX0FORCkgaXMgY29uc2lkZXJlZCBhIGxlYWYsIGFuZCBpcyBjb21wYXJlZAorICogYWdhaW5z
dCBhbGwgb3RoZXIgbGVhdmVzLiBUd28gZXF1YWwgbGVhdmVzIGFyZSBib3RoIHJlcGxhY2VkIHdp
dGggZWl0aGVyICd5JworICogb3IgJ24nIGFzIGFwcHJvcHJpYXRlIGZvciAndHlwZScsIHRvIGJl
IGVsaW1pbmF0ZWQgbGF0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIF9fZXhwcl9lbGltaW5hdGVfZXEo
ZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAy
KQoreworCS8qIFJlY3Vyc2UgZG93biB0byBsZWF2ZXMgKi8KKworCWlmIChlMS0+dHlwZSA9PSB0
eXBlKSB7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLT5sZWZ0LmV4cHIsICZlMik7
CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOworCQly
ZXR1cm47CisJfQorCWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7CisJCV9fZXhwcl9lbGltaW5hdGVf
ZXEodHlwZSwgJmUxLCAmZTItPmxlZnQuZXhwcik7CisJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlw
ZSwgJmUxLCAmZTItPnJpZ2h0LmV4cHIpOworCQlyZXR1cm47CisJfQorCisJLyogZTEgYW5kIGUy
IGFyZSBsZWF2ZXMuIENvbXBhcmUgdGhlbS4gKi8KKworCWlmIChlMS0+dHlwZSA9PSBFX1NZTUJP
TCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJgorCSAgICBlMS0+bGVmdC5zeW0gPT0gZTItPmxl
ZnQuc3ltICYmCisJICAgIChlMS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMgfHwgZTEtPmxlZnQu
c3ltID09ICZzeW1ib2xfbm8pKQorCQlyZXR1cm47CisJaWYgKCFleHByX2VxKGUxLCBlMikpCisJ
CXJldHVybjsKKworCS8qIGUxIGFuZCBlMiBhcmUgZXF1YWwgbGVhdmVzLiBQcmVwYXJlIHRoZW0g
Zm9yIGVsaW1pbmF0aW9uLiAqLworCisJdHJhbnNfY291bnQrKzsKKwlleHByX2ZyZWUoZTEpOyBl
eHByX2ZyZWUoZTIpOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRV9PUjoKKwkJZTEgPSBleHBy
X2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3lt
Ym9sX25vKTsKKwkJYnJlYWs7CisJY2FzZSBFX0FORDoKKwkJZTEgPSBleHByX2FsbG9jX3N5bWJv
bCgmc3ltYm9sX3llcyk7CisJCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOwor
CQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorfQorCisvKgorICogUmV3cml0ZXMgdGhlIGV4
cHJlc3Npb25zICdlcDEnIGFuZCAnZXAyJyB0byByZW1vdmUgb3BlcmFuZHMgY29tbW9uIHRvIGJv
dGguCisgKiBFeGFtcGxlIHJlZHVjdGlvbnM6CisgKgorICoJZXAxOiBBICYmIEIgICAgICAgICAg
IC0+ICBlcDE6IHkKKyAqCWVwMjogQSAmJiBCICYmIEMgICAgICAtPiAgZXAyOiBDCisgKgorICoJ
ZXAxOiBBIHx8IEIgICAgICAgICAgIC0+ICBlcDE6IG4KKyAqCWVwMjogQSB8fCBCIHx8IEMgICAg
ICAtPiAgZXAyOiBDCisgKgorICoJZXAxOiBBICYmIChCICYmIEZPTykgIC0+ICBlcDE6IEZPTwor
ICoJZXAyOiAoQkFSICYmIEIpICYmIEEgIC0+ICBlcDI6IEJBUgorICoKKyAqCWVwMTogQSAmJiAo
QiB8fCBDKSAgICAtPiAgZXAxOiB5CisgKgllcDI6IChDIHx8IEIpICYmIEEgICAgLT4gIGVwMjog
eQorICoKKyAqIENvbXBhcmlzb25zIGFyZSBkb25lIGJldHdlZW4gYWxsIG9wZXJhbmRzIGF0IHRo
ZSBzYW1lICJsZXZlbCIgb2YgJiYgb3IgfHwuCisgKiBGb3IgZXhhbXBsZSwgaW4gdGhlIGV4cHJl
c3Npb24gJ2UxICYmIChlMiB8fCBlMykgJiYgKGU0IHx8IGU1KScsIHRoZQorICogZm9sbG93aW5n
IG9wZXJhbmRzIHdpbGwgYmUgY29tcGFyZWQ6CisgKgorICoJLSAnZTEnLCAnZTIgfHwgZTMnLCBh
bmQgJ2U0IHx8IGU1JywgYWdhaW5zdCBlYWNoIG90aGVyCisgKgktIGUyIGFnYWluc3QgZTMKKyAq
CS0gZTQgYWdhaW5zdCBlNQorICoKKyAqIFBhcmVudGhlc2VzIGFyZSBpcnJlbGV2YW50IHdpdGhp
biBhIHNpbmdsZSBsZXZlbC4gJ2UxICYmIChlMiAmJiBlMyknIGFuZAorICogJyhlMSAmJiBlMikg
JiYgZTMnIGFyZSBib3RoIGEgc2luZ2xlIGxldmVsLgorICoKKyAqIFNlZSBfX2V4cHJfZWxpbWlu
YXRlX2VxKCkgYXMgd2VsbC4KKyAqLwordm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhw
ciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpCit7CisJaWYgKCFlMSB8fCAhZTIpCisJCXJldHVy
bjsKKwlzd2l0Y2ggKGUxLT50eXBlKSB7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6CisJCV9f
ZXhwcl9lbGltaW5hdGVfZXEoZTEtPnR5cGUsIGVwMSwgZXAyKTsKKwlkZWZhdWx0OgorCQk7CisJ
fQorCWlmIChlMS0+dHlwZSAhPSBlMi0+dHlwZSkgc3dpdGNoIChlMi0+dHlwZSkgeworCWNhc2Ug
RV9PUjoKKwljYXNlIEVfQU5EOgorCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUyLT50eXBlLCBlcDEs
IGVwMik7CisJZGVmYXVsdDoKKwkJOworCX0KKwllMSA9IGV4cHJfZWxpbWluYXRlX3luKGUxKTsK
KwllMiA9IGV4cHJfZWxpbWluYXRlX3luKGUyKTsKK30KKworI3VuZGVmIGUxCisjdW5kZWYgZTIK
KworLyoKKyAqIFJldHVybnMgdHJ1ZSBpZiAnZTEnIGFuZCAnZTInIGFyZSBlcXVhbCwgYWZ0ZXIg
bWlub3Igc2ltcGxpZmljYXRpb24uIFR3bworICogJiYvfHwgZXhwcmVzc2lvbnMgYXJlIGNvbnNp
ZGVyZWQgZXF1YWwgaWYgZXZlcnkgb3BlcmFuZCBpbiBvbmUgZXhwcmVzc2lvbgorICogZXF1YWxz
IHNvbWUgb3BlcmFuZCBpbiB0aGUgb3RoZXIgKG9wZXJhbmRzIGRvIG5vdCBuZWVkIHRvIGFwcGVh
ciBpbiB0aGUgc2FtZQorICogb3JkZXIpLCByZWN1cnNpdmVseS4KKyAqLworc3RhdGljIGludCBl
eHByX2VxKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCWludCByZXMsIG9s
ZF9jb3VudDsKKworCWlmIChlMS0+dHlwZSAhPSBlMi0+dHlwZSkKKwkJcmV0dXJuIDA7CisJc3dp
dGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9H
VEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRIOgorCWNhc2UgRV9VTkVRVUFMOgorCQlyZXR1
cm4gZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSAmJiBlMS0+cmlnaHQuc3ltID09IGUyLT5y
aWdodC5zeW07CisJY2FzZSBFX1NZTUJPTDoKKwkJcmV0dXJuIGUxLT5sZWZ0LnN5bSA9PSBlMi0+
bGVmdC5zeW07CisJY2FzZSBFX05PVDoKKwkJcmV0dXJuIGV4cHJfZXEoZTEtPmxlZnQuZXhwciwg
ZTItPmxlZnQuZXhwcik7CisJY2FzZSBFX0FORDoKKwljYXNlIEVfT1I6CisJCWUxID0gZXhwcl9j
b3B5KGUxKTsKKwkJZTIgPSBleHByX2NvcHkoZTIpOworCQlvbGRfY291bnQgPSB0cmFuc19jb3Vu
dDsKKwkJZXhwcl9lbGltaW5hdGVfZXEoJmUxLCAmZTIpOworCQlyZXMgPSAoZTEtPnR5cGUgPT0g
RV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYKKwkJICAgICAgIGUxLT5sZWZ0LnN5
bSA9PSBlMi0+bGVmdC5zeW0pOworCQlleHByX2ZyZWUoZTEpOworCQlleHByX2ZyZWUoZTIpOwor
CQl0cmFuc19jb3VudCA9IG9sZF9jb3VudDsKKwkJcmV0dXJuIHJlczsKKwljYXNlIEVfTElTVDoK
KwljYXNlIEVfUkFOR0U6CisJY2FzZSBFX05PTkU6CisJCS8qIHBhbmljICovOworCX0KKworCWlm
IChERUJVR19FWFBSKSB7CisJCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOworCQlwcmludGYoIiA9
ICIpOworCQlleHByX2ZwcmludChlMiwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIgP1xuIik7CisJfQor
CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWN1cnNpdmVseSBwZXJmb3JtcyB0aGUgZm9sbG93
aW5nIHNpbXBsaWZpY2F0aW9ucyBpbi1wbGFjZSAoYXMgd2VsbCBhcyB0aGUKKyAqIGNvcnJlc3Bv
bmRpbmcgc2ltcGxpZmljYXRpb25zIHdpdGggc3dhcHBlZCBvcGVyYW5kcyk6CisgKgorICoJZXhw
ciAmJiBuICAtPiAgbgorICoJZXhwciAmJiB5ICAtPiAgZXhwcgorICoJZXhwciB8fCBuICAtPiAg
ZXhwcgorICoJZXhwciB8fCB5ICAtPiAgeQorICoKKyAqIFJldHVybnMgdGhlIG9wdGltaXplZCBl
eHByZXNzaW9uLgorICovCitzdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX3luKHN0
cnVjdCBleHByICplKQoreworCXN0cnVjdCBleHByICp0bXA7CisKKwlpZiAoZSkgc3dpdGNoIChl
LT50eXBlKSB7CisJY2FzZSBFX0FORDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl9lbGltaW5hdGVf
eW4oZS0+bGVmdC5leHByKTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUt
PnJpZ2h0LmV4cHIpOworCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7CisJ
CQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZXhwcl9m
cmVlKGUtPmxlZnQuZXhwcik7CisJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUt
PnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQkJZS0+
cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9IGVsc2UgaWYgKGUtPmxlZnQu
ZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQlmcmVlKGUtPmxlZnQuZXhwcik7
CisJCQkJdG1wID0gZS0+cmlnaHQuZXhwcjsKKwkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7CisJ
CQkJZnJlZSh0bXApOworCQkJCXJldHVybiBlOworCQkJfQorCQl9CisJCWlmIChlLT5yaWdodC5l
eHByLT50eXBlID09IEVfU1lNQk9MKSB7CisJCQlpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0g
PT0gJnN5bWJvbF9ubykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCWV4cHJf
ZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVm
dC5zeW0gPSAmc3ltYm9sX25vOworCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJCXJldHVy
biBlOworCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3ll
cykgeworCQkJCWZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJdG1wID0gZS0+bGVmdC5leHByOwor
CQkJCSplID0gKihlLT5sZWZ0LmV4cHIpOworCQkJCWZyZWUodG1wKTsKKwkJCQlyZXR1cm4gZTsK
KwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIEVfT1I6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJf
ZWxpbWluYXRlX3luKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2VsaW1p
bmF0ZV95bihlLT5yaWdodC5leHByKTsKKwkJaWYgKGUtPmxlZnQuZXhwci0+dHlwZSA9PSBFX1NZ
TUJPTCkgeworCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgewor
CQkJCWZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQl0bXAgPSBlLT5yaWdodC5leHByOworCQkJCSpl
ID0gKihlLT5yaWdodC5leHByKTsKKwkJCQlmcmVlKHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9
IGVsc2UgaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQll
eHByX2ZyZWUoZS0+bGVmdC5leHByKTsKKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJ
CQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJ
CQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9CisJCX0KKwkJaWYg
KGUtPnJpZ2h0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsKKwkJCWlmIChlLT5yaWdodC5leHBy
LT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQkJZnJlZShlLT5yaWdodC5leHByKTsKKwkJ
CQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7CisJCQkJZnJl
ZSh0bXApOworCQkJCXJldHVybiBlOworCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0
LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJ
CWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJ
ZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsKKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsKKwkJ
CQlyZXR1cm4gZTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJl
dHVybiBlOworfQorCisvKgorICogYm9vbCBGT08hPW4gPT4gRk9PCisgKi8KK3N0cnVjdCBleHBy
ICpleHByX3RyYW5zX2Jvb2woc3RydWN0IGV4cHIgKmUpCit7CisJaWYgKCFlKQorCQlyZXR1cm4g
TlVMTDsKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfQU5EOgorCWNhc2UgRV9PUjoKKwlj
YXNlIEVfTk9UOgorCQllLT5sZWZ0LmV4cHIgPSBleHByX3RyYW5zX2Jvb2woZS0+bGVmdC5leHBy
KTsKKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfdHJhbnNfYm9vbChlLT5yaWdodC5leHByKTsKKwkJ
YnJlYWs7CisJY2FzZSBFX1VORVFVQUw6CisJCS8vIEZPTyE9biAtPiBGT08KKwkJaWYgKGUtPmxl
ZnQuc3ltLT50eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5
bWJvbF9ubykgeworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5yaWdodC5zeW0gPSBO
VUxMOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIGU7
Cit9CisKKy8qCisgKiBlMSB8fCBlMiAtPiA/CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhw
cl9qb2luX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCXN0cnVjdCBl
eHByICp0bXA7CisJc3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7CisKKwlpZiAoZXhwcl9lcShl
MSwgZTIpKQorCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsKKwlpZiAoZTEtPnR5cGUgIT0gRV9FUVVB
TCAmJiBlMS0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTEt
PnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOworCWlmIChlMi0+dHlwZSAhPSBFX0VRVUFM
ICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMi0+
dHlwZSAhPSBFX05PVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUxLT50eXBlID09IEVfTk9UKSB7
CisJCXRtcCA9IGUxLT5sZWZ0LmV4cHI7CisJCWlmICh0bXAtPnR5cGUgIT0gRV9FUVVBTCAmJiB0
bXAtPnR5cGUgIT0gRV9VTkVRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCXJldHVy
biBOVUxMOworCQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMSA9IGUxLT5s
ZWZ0LnN5bTsKKwlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsKKwkJaWYgKGUyLT5sZWZ0LmV4cHIt
PnR5cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMiA9IGUyLT5sZWZ0LmV4
cHItPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0yID0gZTItPmxlZnQuc3ltOworCWlmIChzeW0x
ICE9IHN5bTIpCisJCXJldHVybiBOVUxMOworCWlmIChzeW0xLT50eXBlICE9IFNfQk9PTEVBTiAm
JiBzeW0xLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCXJldHVybiBOVUxMOworCWlmIChzeW0xLT50
eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5
cGUgPT0gRV9FUVVBTCAmJgorCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYm
IGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJCSAgICAgKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKSB7CisJCQkv
LyAoYT0neScpIHx8IChhPSdtJykgLT4gKGEhPSduJykKKwkJCXJldHVybiBleHByX2FsbG9jX2Nv
bXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX25vKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0g
RV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmCisJCSAgICAoKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkgICAg
IChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X3llcykpKSB7CisJCQkvLyAoYT0neScpIHx8IChhPSduJykgLT4gKGEhPSdtJykKKwkJCXJldHVy
biBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7CisJCX0KKwkJ
aWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJgorCQkgICAg
KChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJv
bF9ubykgfHwKKwkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5yaWdo
dC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkgeworCQkJLy8gKGE9J20nKSB8fCAoYT0nbicpIC0+IChh
IT0neScpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJv
bF95ZXMpOworCQl9CisJfQorCWlmIChzeW0xLT50eXBlID09IFNfQk9PTEVBTiAmJiBzeW0xID09
IHN5bTIpIHsKKwkJaWYgKChlMS0+dHlwZSA9PSBFX05PVCAmJiBlMS0+bGVmdC5leHByLT50eXBl
ID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MKSB8fAorCQkgICAgKGUyLT50eXBl
ID09IEVfTk9UICYmIGUyLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUg
PT0gRV9TWU1CT0wpKQorCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsK
Kwl9CisKKwlpZiAoREVCVUdfRVhQUikgeworCQlwcmludGYoIm9wdGltaXplICgiKTsKKwkJZXhw
cl9mcHJpbnQoZTEsIHN0ZG91dCk7CisJCXByaW50ZigiKSB8fCAoIik7CisJCWV4cHJfZnByaW50
KGUyLCBzdGRvdXQpOworCQlwcmludGYoIik/XG4iKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisK
K3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVj
dCBleHByICplMikKK3sKKwlzdHJ1Y3QgZXhwciAqdG1wOworCXN0cnVjdCBzeW1ib2wgKnN5bTEs
ICpzeW0yOworCisJaWYgKGV4cHJfZXEoZTEsIGUyKSkKKwkJcmV0dXJuIGV4cHJfY29weShlMSk7
CisJaWYgKGUxLT50eXBlICE9IEVfRVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9VTkVRVUFMICYmIGUx
LT50eXBlICE9IEVfU1lNQk9MICYmIGUxLT50eXBlICE9IEVfTk9UKQorCQlyZXR1cm4gTlVMTDsK
KwlpZiAoZTItPnR5cGUgIT0gRV9FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTIt
PnR5cGUgIT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOwor
CWlmIChlMS0+dHlwZSA9PSBFX05PVCkgeworCQl0bXAgPSBlMS0+bGVmdC5leHByOworCQlpZiAo
dG1wLT50eXBlICE9IEVfRVFVQUwgJiYgdG1wLT50eXBlICE9IEVfVU5FUVVBTCAmJiB0bXAtPnR5
cGUgIT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMSA9IHRtcC0+bGVmdC5zeW07
CisJfSBlbHNlCisJCXN5bTEgPSBlMS0+bGVmdC5zeW07CisJaWYgKGUyLT50eXBlID09IEVfTk9U
KSB7CisJCWlmIChlMi0+bGVmdC5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJcmV0dXJuIE5V
TEw7CisJCXN5bTIgPSBlMi0+bGVmdC5leHByLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMiA9
IGUyLT5sZWZ0LnN5bTsKKwlpZiAoc3ltMSAhPSBzeW0yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAo
c3ltMS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNUQVRFKQorCQly
ZXR1cm4gTlVMTDsKKworCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0g
RV9FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fAorCSAgICAoZTItPnR5
cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09
ICZzeW1ib2xfeWVzKSkKKwkJLy8gKGEpICYmIChhPSd5JykgLT4gKGE9J3knKQorCQlyZXR1cm4g
ZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsKKworCWlmICgoZTEt
PnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9ubykgfHwKKwkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50
eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pKQorCQkvLyAo
YSkgJiYgKGEhPSduJykgLT4gKGEpCisJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbChzeW0xKTsK
KworCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYm
IGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJICAgIChlMi0+dHlwZSA9PSBFX1NZ
TUJPTCAmJiBlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X21vZCkpCisJCS8vIChhKSAmJiAoYSE9J20nKSAtPiAoYT0neScpCisJCXJldHVybiBleHByX2Fs
bG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOworCisJaWYgKHN5bTEtPnR5cGUg
PT0gU19UUklTVEFURSkgeworCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9
PSBFX1VORVFVQUwpIHsKKwkJCS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICdu
JyA6IGE9J2InCisJCQlzeW0yID0gZTEtPnJpZ2h0LnN5bTsKKwkJCWlmICgoZTItPnJpZ2h0LnN5
bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpICYmIChzeW0yLT5mbGFncyAmIFNZTUJPTF9DT05TVCkp
CisJCQkJcmV0dXJuIHN5bTIgIT0gZTItPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VR
VUFMLCBzeW0xLCBzeW0yKQorCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9s
X25vKTsKKwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVf
RVFVQUwpIHsKKwkJCS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICduJyA6IGE9
J2InCisJCQlzeW0yID0gZTItPnJpZ2h0LnN5bTsKKwkJCWlmICgoZTEtPnJpZ2h0LnN5bS0+Zmxh
Z3MgJiBTWU1CT0xfQ09OU1QpICYmIChzeW0yLT5mbGFncyAmIFNZTUJPTF9DT05TVCkpCisJCQkJ
cmV0dXJuIHN5bTIgIT0gZTEtPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBz
eW0xLCBzeW0yKQorCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsK
KwkJfQorCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVB
TCAmJgorCQkJICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9ubykgfHwKKwkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25v
ICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKSkKKwkJCS8vIChhIT0neScpICYmIChh
IT0nbicpIC0+IChhPSdtJykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3lt
MSwgJnN5bWJvbF9tb2QpOworCisJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5
cGUgPT0gRV9VTkVRVUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMg
JiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwKKwkJCSAgICAoZTEtPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpCisJCQkv
LyAoYSE9J3knKSAmJiAoYSE9J20nKSAtPiAoYT0nbicpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19j
b21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfbm8pOworCisJCWlmIChlMS0+dHlwZSA9PSBFX1VO
RVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmCisJCQkgICAoKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fAorCQkJICAg
IChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X21vZCkpKQorCQkJLy8gKGEhPSdtJykgJiYgKGEhPSduJykgLT4gKGE9J20nKQorCQkJcmV0dXJu
IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7CisKKwkJaWYgKChl
MS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9tb2QpIHx8CisJCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEt
PnR5cGUgPT0gRV9FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAorCQkg
ICAgKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+
cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fAorCQkgICAgKGUyLT50eXBlID09IEVfU1lNQk9M
ICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVz
KSkKKwkJCXJldHVybiBOVUxMOworCX0KKworCWlmIChERUJVR19FWFBSKSB7CisJCXByaW50Zigi
b3B0aW1pemUgKCIpOworCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpICYm
ICgiKTsKKwkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7CisJCXByaW50ZigiKT9cbiIpOworCX0K
KwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGV4cHJfZWxpbWluYXRlX2R1cHMoKSBoZWxwZXIu
CisgKgorICogV2Fsa3MgdGhlIHR3byBleHByZXNzaW9uIHRyZWVzIGdpdmVuIGluICdlcDEnIGFu
ZCAnZXAyJy4gQW55IG5vZGUgdGhhdCBkb2VzCisgKiBub3QgaGF2ZSB0eXBlICd0eXBlJyAoRV9P
Ui9FX0FORCkgaXMgY29uc2lkZXJlZCBhIGxlYWYsIGFuZCBpcyBjb21wYXJlZAorICogYWdhaW5z
dCBhbGwgb3RoZXIgbGVhdmVzIHRvIGxvb2sgZm9yIHNpbXBsaWZpY2F0aW9ucy4KKyAqLworc3Rh
dGljIHZvaWQgZXhwcl9lbGltaW5hdGVfZHVwczEoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQoreworI2RlZmluZSBlMSAoKmVwMSkKKyNk
ZWZpbmUgZTIgKCplcDIpCisJc3RydWN0IGV4cHIgKnRtcDsKKworCS8qIFJlY3Vyc2UgZG93biB0
byBsZWF2ZXMgKi8KKworCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZWxpbWluYXRl
X2R1cHMxKHR5cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOworCQlleHByX2VsaW1pbmF0ZV9kdXBz
MSh0eXBlLCAmZTEtPnJpZ2h0LmV4cHIsICZlMik7CisJCXJldHVybjsKKwl9CisJaWYgKGUyLT50
eXBlID09IHR5cGUpIHsKKwkJZXhwcl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLCAmZTItPmxl
ZnQuZXhwcik7CisJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5l
eHByKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGUxIGFuZCBlMiBhcmUgbGVhdmVzLiBDb21wYXJl
IGFuZCBwcm9jZXNzIHRoZW0uICovCisKKwlpZiAoZTEgPT0gZTIpCisJCXJldHVybjsKKworCXN3
aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfT1I6IGNhc2UgRV9BTkQ6CisJCWV4cHJfZWxpbWlu
YXRlX2R1cHMxKGUxLT50eXBlLCAmZTEsICZlMSk7CisJZGVmYXVsdDoKKwkJOworCX0KKworCXN3
aXRjaCAodHlwZSkgeworCWNhc2UgRV9PUjoKKwkJdG1wID0gZXhwcl9qb2luX29yKGUxLCBlMik7
CisJCWlmICh0bXApIHsKKwkJCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7CisJCQllMSA9
IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOworCQkJZTIgPSB0bXA7CisJCQl0cmFuc19j
b3VudCsrOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9BTkQ6CisJCXRtcCA9IGV4cHJfam9pbl9h
bmQoZTEsIGUyKTsKKwkJaWYgKHRtcCkgeworCQkJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUy
KTsKKwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQkJZTIgPSB0bXA7
CisJCQl0cmFuc19jb3VudCsrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9Cisj
dW5kZWYgZTEKKyN1bmRlZiBlMgorfQorCisvKgorICogUmV3cml0ZXMgJ2UnIGluLXBsYWNlIHRv
IHJlbW92ZSAoImpvaW4iKSBkdXBsaWNhdGUgYW5kIG90aGVyIHJlZHVuZGFudAorICogb3BlcmFu
ZHMuCisgKgorICogRXhhbXBsZSBzaW1wbGlmaWNhdGlvbnM6CisgKgorICoJQSB8fCBCIHx8IEEg
ICAgLT4gIEEgfHwgQgorICoJQSAmJiBCICYmIEE9eSAgLT4gIEE9eSAmJiBCCisgKgorICogUmV0
dXJucyB0aGUgZGVkdXBsaWNhdGVkIGV4cHJlc3Npb24uCisgKi8KK3N0cnVjdCBleHByICpleHBy
X2VsaW1pbmF0ZV9kdXBzKHN0cnVjdCBleHByICplKQoreworCWludCBvbGRjb3VudDsKKwlpZiAo
IWUpCisJCXJldHVybiBlOworCisJb2xkY291bnQgPSB0cmFuc19jb3VudDsKKwl3aGlsZSAoMSkg
eworCQl0cmFuc19jb3VudCA9IDA7CisJCXN3aXRjaCAoZS0+dHlwZSkgeworCQljYXNlIEVfT1I6
IGNhc2UgRV9BTkQ6CisJCQlleHByX2VsaW1pbmF0ZV9kdXBzMShlLT50eXBlLCAmZSwgJmUpOwor
CQlkZWZhdWx0OgorCQkJOworCQl9CisJCWlmICghdHJhbnNfY291bnQpCisJCQkvKiBObyBzaW1w
bGlmaWNhdGlvbnMgZG9uZSBpbiB0aGlzIHBhc3MuIFdlJ3JlIGRvbmUgKi8KKwkJCWJyZWFrOwor
CQllID0gZXhwcl9lbGltaW5hdGVfeW4oZSk7CisJfQorCXRyYW5zX2NvdW50ID0gb2xkY291bnQ7
CisJcmV0dXJuIGU7Cit9CisKKy8qCisgKiBQZXJmb3JtcyB2YXJpb3VzIHNpbXBsaWZpY2F0aW9u
cyBpbnZvbHZpbmcgbG9naWNhbCBvcGVyYXRvcnMgYW5kCisgKiBjb21wYXJpc29ucy4KKyAqCisg
KiBBbGxvY2F0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXhwcmVzc2lvbi4KKyAqLworc3RydWN0IGV4
cHIgKmV4cHJfdHJhbnNmb3JtKHN0cnVjdCBleHByICplKQoreworCXN0cnVjdCBleHByICp0bXA7
CisKKwlpZiAoIWUpCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2Ug
RV9FUVVBTDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNl
IEVfTFRIOgorCWNhc2UgRV9VTkVRVUFMOgorCWNhc2UgRV9TWU1CT0w6CisJY2FzZSBFX0xJU1Q6
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWUtPmxlZnQuZXhwciA9IGV4cHJfdHJhbnNmb3JtKGUt
PmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX3RyYW5zZm9ybShlLT5yaWdodC5l
eHByKTsKKwl9CisKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJCWlmIChl
LT5sZWZ0LnN5bS0+dHlwZSAhPSBTX0JPT0xFQU4pCisJCQlicmVhazsKKwkJaWYgKGUtPnJpZ2h0
LnN5bSA9PSAmc3ltYm9sX25vKSB7CisJCQllLT50eXBlID0gRV9OT1Q7CisJCQllLT5sZWZ0LmV4
cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5bSk7CisJCQllLT5yaWdodC5zeW0gPSBO
VUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkg
eworCQkJcHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVzdCBmb3Jj
ZWQgdG8gJ24nXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCQllLT50eXBlID0gRV9TWU1CT0w7
CisJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOwor
CQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgeworCQkJ
ZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJyZWFrOwor
CQl9CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPnR5cGUg
IT0gU19CT09MRUFOKQorCQkJYnJlYWs7CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9u
bykgeworCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJ
CWJyZWFrOworCQl9CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsKKwkJCXBy
aW50ZigiYm9vbGVhbiBzeW1ib2wgJXMgdGVzdGVkIGZvciAnbSc/IHRlc3QgZm9yY2VkIHRvICd5
J1xuIiwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+
bGVmdC5zeW0gPSAmc3ltYm9sX3llczsKKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVh
azsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQllLT50eXBl
ID0gRV9OT1Q7CisJCQllLT5sZWZ0LmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5
bSk7CisJCQllLT5yaWdodC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJ
Y2FzZSBFX05PVDoKKwkJc3dpdGNoIChlLT5sZWZ0LmV4cHItPnR5cGUpIHsKKwkJY2FzZSBFX05P
VDoKKwkJCS8vICEhYSAtPiBhCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHItPmxlZnQuZXhwcjsKKwkJ
CWZyZWUoZS0+bGVmdC5leHByKTsKKwkJCWZyZWUoZSk7CisJCQllID0gdG1wOworCQkJZSA9IGV4
cHJfdHJhbnNmb3JtKGUpOworCQkJYnJlYWs7CisJCWNhc2UgRV9FUVVBTDoKKwkJY2FzZSBFX1VO
RVFVQUw6CisJCQkvLyAhYT0neCcgLT4gYSE9J3gnCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJ
CQlmcmVlKGUpOworCQkJZSA9IHRtcDsKKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfRVFVQUwg
PyBFX1VORVFVQUwgOiBFX0VRVUFMOworCQkJYnJlYWs7CisJCWNhc2UgRV9MRVE6CisJCWNhc2Ug
RV9HRVE6CisJCQkvLyAhYTw9J3gnIC0+IGE+J3gnCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJ
CQlmcmVlKGUpOworCQkJZSA9IHRtcDsKKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfTEVRID8g
RV9HVEggOiBFX0xUSDsKKwkJCWJyZWFrOworCQljYXNlIEVfTFRIOgorCQljYXNlIEVfR1RIOgor
CQkJLy8gIWE8J3gnIC0+IGE+PSd4JworCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJZnJlZShl
KTsKKwkJCWUgPSB0bXA7CisJCQllLT50eXBlID0gZS0+dHlwZSA9PSBFX0xUSCA/IEVfR0VRIDog
RV9MRVE7CisJCQlicmVhazsKKwkJY2FzZSBFX09SOgorCQkJLy8gIShhIHx8IGIpIC0+ICFhICYm
ICFiCisJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQllLT50eXBlID0gRV9BTkQ7CisJCQllLT5y
aWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIHRtcC0+cmlnaHQuZXhwcik7CisJCQl0
bXAtPnR5cGUgPSBFX05PVDsKKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7CisJCQllID0gZXhw
cl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX0FORDoKKwkJCS8vICEoYSAmJiBi
KSAtPiAhYSB8fCAhYgorCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJZS0+dHlwZSA9IEVfT1I7
CisJCQllLT5yaWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIHRtcC0+cmlnaHQuZXhw
cik7CisJCQl0bXAtPnR5cGUgPSBFX05PVDsKKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7CisJ
CQllID0gZXhwcl90cmFuc2Zvcm0oZSk7CisJCQlicmVhazsKKwkJY2FzZSBFX1NZTUJPTDoKKwkJ
CWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJCQkJLy8gISd5
JyAtPiAnbicKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJZnJlZShlKTsKKwkJCQllID0g
dG1wOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xf
bm87CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAm
c3ltYm9sX21vZCkgeworCQkJCS8vICEnbScgLT4gJ20nCisJCQkJdG1wID0gZS0+bGVmdC5leHBy
OworCQkJCWZyZWUoZSk7CisJCQkJZSA9IHRtcDsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJ
CQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX21vZDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChl
LT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQkvLyAhJ24nIC0+ICd5
JworCQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQlmcmVlKGUpOworCQkJCWUgPSB0bXA7CisJ
CQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJ
CQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCQlicmVh
azsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiBlOworfQorCitpbnQgZXhwcl9jb250YWlu
c19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKQoreworCWlmICgh
ZGVwKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZGVwLT50eXBlKSB7CisJY2FzZSBFX0FORDoK
KwljYXNlIEVfT1I6CisJCXJldHVybiBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAtPmxlZnQuZXhw
ciwgc3ltKSB8fAorCQkgICAgICAgZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5yaWdodC5leHBy
LCBzeW0pOworCWNhc2UgRV9TWU1CT0w6CisJCXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bTsK
KwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgorCWNhc2UgRV9MRVE6
CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0g
PT0gc3ltIHx8CisJCSAgICAgICBkZXAtPnJpZ2h0LnN5bSA9PSBzeW07CisJY2FzZSBFX05PVDoK
KwkJcmV0dXJuIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+bGVmdC5leHByLCBzeW0pOworCWRl
ZmF1bHQ6CisJCTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2Jvb2wgZXhwcl9kZXBlbmRzX3N5bWJv
bChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJaWYgKCFkZXApCisJ
CXJldHVybiBmYWxzZTsKKworCXN3aXRjaCAoZGVwLT50eXBlKSB7CisJY2FzZSBFX0FORDoKKwkJ
cmV0dXJuIGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSkgfHwKKwkJICAg
ICAgIGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLT5yaWdodC5leHByLCBzeW0pOworCWNhc2UgRV9T
WU1CT0w6CisJCXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bTsKKwljYXNlIEVfRVFVQUw6CisJ
CWlmIChkZXAtPmxlZnQuc3ltID09IHN5bSkgeworCQkJaWYgKGRlcC0+cmlnaHQuc3ltID09ICZz
eW1ib2xfeWVzIHx8IGRlcC0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKQorCQkJCXJldHVybiB0
cnVlOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlpZiAoZGVwLT5sZWZ0LnN5
bSA9PSBzeW0pIHsKKwkJCWlmIChkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKQorCQkJCXJl
dHVybiB0cnVlOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9CisgCXJldHVybiBm
YWxzZTsKK30KKworLyoKKyAqIEluc2VydHMgZXhwbGljaXQgY29tcGFyaXNvbnMgb2YgdHlwZSAn
dHlwZScgdG8gc3ltYm9sICdzeW0nIGludG8gdGhlCisgKiBleHByZXNzaW9uICdlJy4KKyAqCisg
KiBFeGFtcGxlcyB0cmFuc2Zvcm1hdGlvbnMgZm9yIHR5cGUgPT0gRV9VTkVRVUFMLCBzeW0gPT0g
JnN5bWJvbF9ubzoKKyAqCisgKglBICAgICAgICAgICAgICAtPiAgQSE9bgorICoJIUEgICAgICAg
ICAgICAgLT4gIEE9bgorICoJQSAmJiBCICAgICAgICAgLT4gICEoQT1uIHx8IEI9bikKKyAqCUEg
fHwgQiAgICAgICAgIC0+ICAhKEE9biAmJiBCPW4pCisgKglBICYmIChCIHx8IEMpICAtPiAgIShB
PW4gfHwgKEI9biAmJiBDPW4pKQorICoKKyAqIEFsbG9jYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBl
eHByZXNzaW9uLgorICovCitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBl
eHByICplLCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3Ry
dWN0IGV4cHIgKmUxLCAqZTI7CisKKwlpZiAoIWUpIHsKKwkJZSA9IGV4cHJfYWxsb2Nfc3ltYm9s
KHN5bSk7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBleHByX2FsbG9jX29uZShF
X05PVCwgZSk7CisJCXJldHVybiBlOworCX0KKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVf
QU5EOgorCQllMSA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIEVfRVFVQUwsIHN5
bSk7CisJCWUyID0gZXhwcl90cmFuc19jb21wYXJlKGUtPnJpZ2h0LmV4cHIsIEVfRVFVQUwsIHN5
bSk7CisJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpCisJCQllID0gZXhwcl9hbGxvY190d28oRV9B
TkQsIGUxLCBlMik7CisJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCWUgPSBleHByX2FsbG9j
X3R3byhFX09SLCBlMSwgZTIpOworCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpCisJCQllID0gZXhw
cl9hbGxvY19vbmUoRV9OT1QsIGUpOworCQlyZXR1cm4gZTsKKwljYXNlIEVfT1I6CisJCWUxID0g
ZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJZTIgPSBl
eHByX3RyYW5zX2NvbXBhcmUoZS0+cmlnaHQuZXhwciwgRV9FUVVBTCwgc3ltKTsKKwkJaWYgKHN5
bSA9PSAmc3ltYm9sX3llcykKKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX09SLCBlMSwgZTIpOwor
CQlpZiAoc3ltID09ICZzeW1ib2xfbm8pCisJCQllID0gZXhwcl9hbGxvY190d28oRV9BTkQsIGUx
LCBlMik7CisJCWlmICh0eXBlID09IEVfVU5FUVVBTCkKKwkJCWUgPSBleHByX2FsbG9jX29uZShF
X05PVCwgZSk7CisJCXJldHVybiBlOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBleHByX3RyYW5z
X2NvbXBhcmUoZS0+bGVmdC5leHByLCB0eXBlID09IEVfRVFVQUwgPyBFX1VORVFVQUwgOiBFX0VR
VUFMLCBzeW0pOworCWNhc2UgRV9VTkVRVUFMOgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX0xFUToK
KwljYXNlIEVfR1RIOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0VRVUFMOgorCQlpZiAodHlwZSA9
PSBFX0VRVUFMKSB7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJCXJldHVybiBleHBy
X2NvcHkoZSk7CisJCQlpZiAoc3ltID09ICZzeW1ib2xfbW9kKQorCQkJCXJldHVybiBleHByX2Fs
bG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykKKwkJCQly
ZXR1cm4gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlKSk7CisJCX0gZWxzZSB7CisJ
CQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJCXJldHVybiBleHByX2FsbG9jX29uZShFX05P
VCwgZXhwcl9jb3B5KGUpKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpCisJCQkJcmV0dXJu
IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9u
bykKKwkJCQlyZXR1cm4gZXhwcl9jb3B5KGUpOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9TWU1C
T0w6CisJCXJldHVybiBleHByX2FsbG9jX2NvbXAodHlwZSwgZS0+bGVmdC5zeW0sIHN5bSk7CisJ
Y2FzZSBFX0xJU1Q6CisJY2FzZSBFX1JBTkdFOgorCWNhc2UgRV9OT05FOgorCQkvKiBwYW5pYyAq
LzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2VudW0gc3RyaW5nX3ZhbHVlX2tpbmQgeworCWtf
c3RyaW5nLAorCWtfc2lnbmVkLAorCWtfdW5zaWduZWQsCit9OworCit1bmlvbiBzdHJpbmdfdmFs
dWUgeworCXVuc2lnbmVkIGxvbmcgbG9uZyB1OworCXNpZ25lZCBsb25nIGxvbmcgczsKK307CisK
K3N0YXRpYyBlbnVtIHN0cmluZ192YWx1ZV9raW5kIGV4cHJfcGFyc2Vfc3RyaW5nKGNvbnN0IGNo
YXIgKnN0ciwKKwkJCQkJCWVudW0gc3ltYm9sX3R5cGUgdHlwZSwKKwkJCQkJCXVuaW9uIHN0cmlu
Z192YWx1ZSAqdmFsKQoreworCWNoYXIgKnRhaWw7CisJZW51bSBzdHJpbmdfdmFsdWVfa2luZCBr
aW5kOworCisJZXJybm8gPSAwOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgor
CWNhc2UgU19UUklTVEFURToKKwkJdmFsLT5zID0gIXN0cmNtcChzdHIsICJuIikgPyAwIDoKKwkJ
CSAhc3RyY21wKHN0ciwgIm0iKSA/IDEgOgorCQkJICFzdHJjbXAoc3RyLCAieSIpID8gMiA6IC0x
OworCQlyZXR1cm4ga19zaWduZWQ7CisJY2FzZSBTX0lOVDoKKwkJdmFsLT5zID0gc3RydG9sbChz
dHIsICZ0YWlsLCAxMCk7CisJCWtpbmQgPSBrX3NpZ25lZDsKKwkJYnJlYWs7CisJY2FzZSBTX0hF
WDoKKwkJdmFsLT51ID0gc3RydG91bGwoc3RyLCAmdGFpbCwgMTYpOworCQlraW5kID0ga191bnNp
Z25lZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdmFsLT5zID0gc3RydG9sbChzdHIsICZ0YWls
LCAwKTsKKwkJa2luZCA9IGtfc2lnbmVkOworCQlicmVhazsKKwl9CisJcmV0dXJuICFlcnJubyAm
JiAhKnRhaWwgJiYgdGFpbCA+IHN0ciAmJiBpc3hkaWdpdCh0YWlsWy0xXSkKKwkgICAgICAgPyBr
aW5kIDoga19zdHJpbmc7Cit9CisKK3RyaXN0YXRlIGV4cHJfY2FsY192YWx1ZShzdHJ1Y3QgZXhw
ciAqZSkKK3sKKwl0cmlzdGF0ZSB2YWwxLCB2YWwyOworCWNvbnN0IGNoYXIgKnN0cjEsICpzdHIy
OworCWVudW0gc3RyaW5nX3ZhbHVlX2tpbmQgazEgPSBrX3N0cmluZywgazIgPSBrX3N0cmluZzsK
Kwl1bmlvbiBzdHJpbmdfdmFsdWUgbHZhbCA9IHt9LCBydmFsID0ge307CisJaW50IHJlczsKKwor
CWlmICghZSkKKwkJcmV0dXJuIHllczsKKworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9T
WU1CT0w6CisJCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsKKwkJcmV0dXJuIGUtPmxlZnQu
c3ltLT5jdXJyLnRyaTsKKwljYXNlIEVfQU5EOgorCQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUt
PmxlZnQuZXhwcik7CisJCXZhbDIgPSBleHByX2NhbGNfdmFsdWUoZS0+cmlnaHQuZXhwcik7CisJ
CXJldHVybiBFWFBSX0FORCh2YWwxLCB2YWwyKTsKKwljYXNlIEVfT1I6CisJCXZhbDEgPSBleHBy
X2NhbGNfdmFsdWUoZS0+bGVmdC5leHByKTsKKwkJdmFsMiA9IGV4cHJfY2FsY192YWx1ZShlLT5y
aWdodC5leHByKTsKKwkJcmV0dXJuIEVYUFJfT1IodmFsMSwgdmFsMik7CisJY2FzZSBFX05PVDoK
KwkJdmFsMSA9IGV4cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOworCQlyZXR1cm4gRVhQUl9O
T1QodmFsMSk7CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9HRVE6CisJY2FzZSBFX0dUSDoKKwlj
YXNlIEVfTEVROgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX1VORVFVQUw6CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiAlZD9cbiIsIGUtPnR5cGUpOworCQly
ZXR1cm4gbm87CisJfQorCisJc3ltX2NhbGNfdmFsdWUoZS0+bGVmdC5zeW0pOworCXN5bV9jYWxj
X3ZhbHVlKGUtPnJpZ2h0LnN5bSk7CisJc3RyMSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPmxl
ZnQuc3ltKTsKKwlzdHIyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoZS0+cmlnaHQuc3ltKTsKKwor
CWlmIChlLT5sZWZ0LnN5bS0+dHlwZSAhPSBTX1NUUklORyB8fCBlLT5yaWdodC5zeW0tPnR5cGUg
IT0gU19TVFJJTkcpIHsKKwkJazEgPSBleHByX3BhcnNlX3N0cmluZyhzdHIxLCBlLT5sZWZ0LnN5
bS0+dHlwZSwgJmx2YWwpOworCQlrMiA9IGV4cHJfcGFyc2Vfc3RyaW5nKHN0cjIsIGUtPnJpZ2h0
LnN5bS0+dHlwZSwgJnJ2YWwpOworCX0KKworCWlmIChrMSA9PSBrX3N0cmluZyB8fCBrMiA9PSBr
X3N0cmluZykKKwkJcmVzID0gc3RyY21wKHN0cjEsIHN0cjIpOworCWVsc2UgaWYgKGsxID09IGtf
dW5zaWduZWQgfHwgazIgPT0ga191bnNpZ25lZCkKKwkJcmVzID0gKGx2YWwudSA+IHJ2YWwudSkg
LSAobHZhbC51IDwgcnZhbC51KTsKKwllbHNlIC8qIGlmIChrMSA9PSBrX3NpZ25lZCAmJiBrMiA9
PSBrX3NpZ25lZCkgKi8KKwkJcmVzID0gKGx2YWwucyA+IHJ2YWwucykgLSAobHZhbC5zIDwgcnZh
bC5zKTsKKworCXN3aXRjaChlLT50eXBlKSB7CisJY2FzZSBFX0VRVUFMOgorCQlyZXR1cm4gcmVz
ID8gbm8gOiB5ZXM7CisJY2FzZSBFX0dFUToKKwkJcmV0dXJuIHJlcyA+PSAwID8geWVzIDogbm87
CisJY2FzZSBFX0dUSDoKKwkJcmV0dXJuIHJlcyA+IDAgPyB5ZXMgOiBubzsKKwljYXNlIEVfTEVR
OgorCQlyZXR1cm4gcmVzIDw9IDAgPyB5ZXMgOiBubzsKKwljYXNlIEVfTFRIOgorCQlyZXR1cm4g
cmVzIDwgMCA/IHllcyA6IG5vOworCWNhc2UgRV9VTkVRVUFMOgorCQlyZXR1cm4gcmVzID8geWVz
IDogbm87CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJleHByX2NhbGNfdmFsdWU6IHJlbGF0aW9uICVk
P1xuIiwgZS0+dHlwZSk7CisJCXJldHVybiBubzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgZXhwcl9j
b21wYXJlX3R5cGUoZW51bSBleHByX3R5cGUgdDEsIGVudW0gZXhwcl90eXBlIHQyKQoreworCWlm
ICh0MSA9PSB0MikKKwkJcmV0dXJuIDA7CisJc3dpdGNoICh0MSkgeworCWNhc2UgRV9MRVE6CisJ
Y2FzZSBFX0xUSDoKKwljYXNlIEVfR0VROgorCWNhc2UgRV9HVEg6CisJCWlmICh0MiA9PSBFX0VR
VUFMIHx8IHQyID09IEVfVU5FUVVBTCkKKwkJCXJldHVybiAxOworCWNhc2UgRV9FUVVBTDoKKwlj
YXNlIEVfVU5FUVVBTDoKKwkJaWYgKHQyID09IEVfTk9UKQorCQkJcmV0dXJuIDE7CisJY2FzZSBF
X05PVDoKKwkJaWYgKHQyID09IEVfQU5EKQorCQkJcmV0dXJuIDE7CisJY2FzZSBFX0FORDoKKwkJ
aWYgKHQyID09IEVfT1IpCisJCQlyZXR1cm4gMTsKKwljYXNlIEVfT1I6CisJCWlmICh0MiA9PSBF
X0xJU1QpCisJCQlyZXR1cm4gMTsKKwljYXNlIEVfTElTVDoKKwkJaWYgKHQyID09IDApCisJCQly
ZXR1cm4gMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCXByaW50ZigiWyVkZ3QlZD9d
IiwgdDEsIHQyKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBleHByX3ByaW50KHN0cnVjdCBleHBy
ICplLAorCQl2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICop
LAorCQl2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKQoreworCWlmICghZSkgeworCQlmbihkYXRh
LCBOVUxMLCAieSIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGV4cHJfY29tcGFyZV90eXBlKHBy
ZXZ0b2tlbiwgZS0+dHlwZSkgPiAwKQorCQlmbihkYXRhLCBOVUxMLCAiKCIpOworCXN3aXRjaCAo
ZS0+dHlwZSkgeworCWNhc2UgRV9TWU1CT0w6CisJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkKKwkJ
CWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCWZu
KGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlicmVhazsKKwljYXNlIEVfTk9UOgorCQlmbihk
YXRhLCBOVUxMLCAiISIpOworCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIEVf
Tk9UKTsKKwkJYnJlYWs7CisJY2FzZSBFX0VRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPm5hbWUp
CisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOworCQllbHNlCisJ
CQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4oZGF0YSwgTlVMTCwgIj0iKTsKKwkJ
Zm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOworCQlicmVhazsKKwlj
YXNlIEVfTEVROgorCWNhc2UgRV9MVEg6CisJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkKKwkJCWZu
KGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7CisJCWVsc2UKKwkJCWZuKGRh
dGEsIE5VTEwsICI8Y2hvaWNlPiIpOworCQlmbihkYXRhLCBOVUxMLCBlLT50eXBlID09IEVfTEVR
ID8gIjw9IiA6ICI8Iik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5u
YW1lKTsKKwkJYnJlYWs7CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgorCQlpZiAoZS0+bGVm
dC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUp
OworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4oZGF0YSwgTlVM
TCwgZS0+dHlwZSA9PSBFX0dFUSA/ICI+PSIgOiAiPiIpOworCQlmbihkYXRhLCBlLT5yaWdodC5z
eW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQlp
ZiAoZS0+bGVmdC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5z
eW0tPm5hbWUpOworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4o
ZGF0YSwgTlVMTCwgIiE9Iik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3lt
LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBFX09SOgorCQlleHByX3ByaW50KGUtPmxlZnQuZXhw
ciwgZm4sIGRhdGEsIEVfT1IpOworCQlmbihkYXRhLCBOVUxMLCAiIHx8ICIpOworCQlleHByX3By
aW50KGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsKKwkJYnJlYWs7CisJY2FzZSBFX0FO
RDoKKwkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX0FORCk7CisJCWZuKGRh
dGEsIE5VTEwsICIgJiYgIik7CisJCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEs
IEVfQU5EKTsKKwkJYnJlYWs7CisJY2FzZSBFX0xJU1Q6CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5
bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKKwkJaWYgKGUtPmxlZnQuZXhwcikgeworCQkJZm4oZGF0
YSwgTlVMTCwgIiBeICIpOworCQkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBF
X0xJU1QpOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9SQU5HRToKKwkJZm4oZGF0YSwgTlVMTCwg
IlsiKTsKKwkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZm4o
ZGF0YSwgTlVMTCwgIiAiKTsKKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0t
Pm5hbWUpOworCQlmbihkYXRhLCBOVUxMLCAiXSIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCSAg
eworCQljaGFyIGJ1ZlszMl07CisJCXNwcmludGYoYnVmLCAiPHVua25vd24gdHlwZSAlZD4iLCBl
LT50eXBlKTsKKwkJZm4oZGF0YSwgTlVMTCwgYnVmKTsKKwkJYnJlYWs7CisJICB9CisJfQorCWlm
IChleHByX2NvbXBhcmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkKKwkJZm4oZGF0YSwg
TlVMTCwgIikiKTsKK30KKworc3RhdGljIHZvaWQgZXhwcl9wcmludF9maWxlX2hlbHBlcih2b2lk
ICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl4ZndyaXRl
KHN0ciwgc3RybGVuKHN0ciksIDEsIGRhdGEpOworfQorCit2b2lkIGV4cHJfZnByaW50KHN0cnVj
dCBleHByICplLCBGSUxFICpvdXQpCit7CisJZXhwcl9wcmludChlLCBleHByX3ByaW50X2ZpbGVf
aGVscGVyLCBvdXQsIEVfTk9ORSk7Cit9CisKK3N0YXRpYyB2b2lkIGV4cHJfcHJpbnRfZ3N0cl9o
ZWxwZXIodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7
CisJc3RydWN0IGdzdHIgKmdzID0gKHN0cnVjdCBnc3RyKilkYXRhOworCWNvbnN0IGNoYXIgKnN5
bV9zdHIgPSBOVUxMOworCisJaWYgKHN5bSkKKwkJc3ltX3N0ciA9IHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKHN5bSk7CisKKwlpZiAoZ3MtPm1heF93aWR0aCkgeworCQl1bnNpZ25lZCBleHRyYV9sZW5n
dGggPSBzdHJsZW4oc3RyKTsKKwkJY29uc3QgY2hhciAqbGFzdF9jciA9IHN0cnJjaHIoZ3MtPnMs
ICdcbicpOworCQl1bnNpZ25lZCBsYXN0X2xpbmVfbGVuZ3RoOworCisJCWlmIChzeW1fc3RyKQor
CQkJZXh0cmFfbGVuZ3RoICs9IDQgKyBzdHJsZW4oc3ltX3N0cik7CisKKwkJaWYgKCFsYXN0X2Ny
KQorCQkJbGFzdF9jciA9IGdzLT5zOworCisJCWxhc3RfbGluZV9sZW5ndGggPSBzdHJsZW4oZ3Mt
PnMpIC0gKGxhc3RfY3IgLSBncy0+cyk7CisKKwkJaWYgKChsYXN0X2xpbmVfbGVuZ3RoICsgZXh0
cmFfbGVuZ3RoKSA+IGdzLT5tYXhfd2lkdGgpCisJCQlzdHJfYXBwZW5kKGdzLCAiXFxcbiIpOwor
CX0KKworCXN0cl9hcHBlbmQoZ3MsIHN0cik7CisJaWYgKHN5bSAmJiBzeW0tPnR5cGUgIT0gU19V
TktOT1dOKQorCQlzdHJfcHJpbnRmKGdzLCAiIFs9JXNdIiwgc3ltX3N0cik7Cit9CisKK3ZvaWQg
ZXhwcl9nc3RyX3ByaW50KHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJZXhw
cl9wcmludChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywgRV9OT05FKTsKK30KKworLyoK
KyAqIFRyYW5zZm9ybSB0aGUgdG9wIGxldmVsICJ8fCIgdG9rZW5zIGludG8gbmV3bGluZXMgYW5k
IHByZXBlbmQgZWFjaAorICogbGluZSB3aXRoIGEgbWludXMuIFRoaXMgbWFrZXMgZXhwcmVzc2lv
bnMgbXVjaCBlYXNpZXIgdG8gcmVhZC4KKyAqIFN1aXRhYmxlIGZvciByZXZlcnNlIGRlcGVuZGVu
Y3kgZXhwcmVzc2lvbnMuCisgKi8KK3N0YXRpYyB2b2lkIGV4cHJfcHJpbnRfcmV2ZGVwKHN0cnVj
dCBleHByICplLAorCQkJICAgICAgdm9pZCAoKmZuKSh2b2lkICosIHN0cnVjdCBzeW1ib2wgKiwg
Y29uc3QgY2hhciAqKSwKKwkJCSAgICAgIHZvaWQgKmRhdGEsIHRyaXN0YXRlIHByX3R5cGUsIGNv
bnN0IGNoYXIgKip0aXRsZSkKK3sKKwlpZiAoZS0+dHlwZSA9PSBFX09SKSB7CisJCWV4cHJfcHJp
bnRfcmV2ZGVwKGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIHByX3R5cGUsIHRpdGxlKTsKKwkJZXhw
cl9wcmludF9yZXZkZXAoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEsIHByX3R5cGUsIHRpdGxlKTsK
Kwl9IGVsc2UgaWYgKGV4cHJfY2FsY192YWx1ZShlKSA9PSBwcl90eXBlKSB7CisJCWlmICgqdGl0
bGUpIHsKKwkJCWZuKGRhdGEsIE5VTEwsICp0aXRsZSk7CisJCQkqdGl0bGUgPSBOVUxMOworCQl9
CisKKwkJZm4oZGF0YSwgTlVMTCwgIiAgLSAiKTsKKwkJZXhwcl9wcmludChlLCBmbiwgZGF0YSwg
RV9OT05FKTsKKwkJZm4oZGF0YSwgTlVMTCwgIlxuIik7CisJfQorfQorCit2b2lkIGV4cHJfZ3N0
cl9wcmludF9yZXZkZXAoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBnc3RyICpncywKKwkJCSAgICB0
cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBjaGFyICp0aXRsZSkKK3sKKwlleHByX3ByaW50X3JldmRl
cChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywgcHJfdHlwZSwgJnRpdGxlKTsKK30KZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9leHByLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkZTY1YgotLS0g
L2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oCkBAIC0wLDAgKzEsMzMx
IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHly
aWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLwor
CisjaWZuZGVmIEVYUFJfSAorI2RlZmluZSBFWFBSX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitl
eHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlICJsaXN0LmgiCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8
c3RkYm9vbC5oPgorI2VuZGlmCisKK3N0cnVjdCBmaWxlIHsKKwlzdHJ1Y3QgZmlsZSAqbmV4dDsK
KwlzdHJ1Y3QgZmlsZSAqcGFyZW50OworCWNvbnN0IGNoYXIgKm5hbWU7CisJaW50IGxpbmVubzsK
K307CisKK3R5cGVkZWYgZW51bSB0cmlzdGF0ZSB7CisJbm8sIG1vZCwgeWVzCit9IHRyaXN0YXRl
OworCitlbnVtIGV4cHJfdHlwZSB7CisJRV9OT05FLCBFX09SLCBFX0FORCwgRV9OT1QsCisJRV9F
UVVBTCwgRV9VTkVRVUFMLCBFX0xUSCwgRV9MRVEsIEVfR1RILCBFX0dFUSwKKwlFX0xJU1QsIEVf
U1lNQk9MLCBFX1JBTkdFCit9OworCit1bmlvbiBleHByX2RhdGEgeworCXN0cnVjdCBleHByICpl
eHByOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKK307CisKK3N0cnVjdCBleHByIHsKKwllbnVtIGV4
cHJfdHlwZSB0eXBlOworCXVuaW9uIGV4cHJfZGF0YSBsZWZ0LCByaWdodDsKK307CisKKyNkZWZp
bmUgRVhQUl9PUihkZXAxLCBkZXAyKQkoKChkZXAxKT4oZGVwMikpPyhkZXAxKTooZGVwMikpCisj
ZGVmaW5lIEVYUFJfQU5EKGRlcDEsIGRlcDIpCSgoKGRlcDEpPChkZXAyKSk/KGRlcDEpOihkZXAy
KSkKKyNkZWZpbmUgRVhQUl9OT1QoZGVwKQkJKDItKGRlcCkpCisKKyNkZWZpbmUgZXhwcl9saXN0
X2Zvcl9lYWNoX3N5bShsLCBlLCBzKSBcCisJZm9yIChlID0gKGwpOyBlICYmIChzID0gZS0+cmln
aHQuc3ltKTsgZSA9IGUtPmxlZnQuZXhwcikKKworc3RydWN0IGV4cHJfdmFsdWUgeworCXN0cnVj
dCBleHByICpleHByOworCXRyaXN0YXRlIHRyaTsKK307CisKK3N0cnVjdCBzeW1ib2xfdmFsdWUg
eworCXZvaWQgKnZhbDsKKwl0cmlzdGF0ZSB0cmk7Cit9OworCitlbnVtIHN5bWJvbF90eXBlIHsK
KwlTX1VOS05PV04sIFNfQk9PTEVBTiwgU19UUklTVEFURSwgU19JTlQsIFNfSEVYLCBTX1NUUklO
RworfTsKKworLyogZW51bSB2YWx1ZXMgYXJlIHVzZWQgYXMgaW5kZXggdG8gc3ltYm9sLmRlZltd
ICovCitlbnVtIHsKKwlTX0RFRl9VU0VSLAkJLyogbWFpbiB1c2VyIHZhbHVlICovCisJU19ERUZf
QVVUTywJCS8qIHZhbHVlcyByZWFkIGZyb20gYXV0by5jb25mICovCisJU19ERUZfREVGMywJCS8q
IFJlc2VydmVkIGZvciBVSSB1c2FnZSAqLworCVNfREVGX0RFRjQsCQkvKiBSZXNlcnZlZCBmb3Ig
VUkgdXNhZ2UgKi8KKwlTX0RFRl9DT1VOVAorfTsKKworLyoKKyAqIFJlcHJlc2VudHMgYSBjb25m
aWd1cmF0aW9uIHN5bWJvbC4KKyAqCisgKiBDaG9pY2VzIGFyZSByZXByZXNlbnRlZCBhcyBhIHNw
ZWNpYWwga2luZCBvZiBzeW1ib2wgYW5kIGhhdmUgdGhlCisgKiBTWU1CT0xfQ0hPSUNFIGJpdCBz
ZXQgaW4gJ2ZsYWdzJy4KKyAqLworc3RydWN0IHN5bWJvbCB7CisJLyogVGhlIG5leHQgc3ltYm9s
IGluIHRoZSBzYW1lIGJ1Y2tldCBpbiB0aGUgc3ltYm9sIGhhc2ggdGFibGUgKi8KKwlzdHJ1Y3Qg
c3ltYm9sICpuZXh0OworCisJLyogVGhlIG5hbWUgb2YgdGhlIHN5bWJvbCwgZS5nLiAiRk9PIiBm
b3IgJ2NvbmZpZyBGT08nICovCisJY2hhciAqbmFtZTsKKworCS8qIFNfQk9PTEVBTiwgU19UUklT
VEFURSwgLi4uICovCisJZW51bSBzeW1ib2xfdHlwZSB0eXBlOworCisJLyoKKwkgKiBUaGUgY2Fs
Y3VsYXRlZCB2YWx1ZSBvZiB0aGUgc3ltYm9sLiBUaGUgU1lNQk9MX1ZBTElEIGJpdCBpcyBzZXQg
aW4KKwkgKiAnZmxhZ3MnIHdoZW4gdGhpcyBpcyB1cCB0byBkYXRlLiBOb3RlIHRoYXQgdGhpcyB2
YWx1ZSBtaWdodCBkaWZmZXIKKwkgKiBmcm9tIHRoZSB1c2VyIHZhbHVlIHNldCBpbiBlLmcuIGEg
LmNvbmZpZyBmaWxlLCBkdWUgdG8gdmlzaWJpbGl0eS4KKwkgKi8KKwlzdHJ1Y3Qgc3ltYm9sX3Zh
bHVlIGN1cnI7CisKKwkvKgorCSAqIFZhbHVlcyBmb3IgdGhlIHN5bWJvbCBwcm92aWRlZCBmcm9t
IG91dHNpZGUuIGRlZltTX0RFRl9VU0VSXSBob2xkcworCSAqIHRoZSAuY29uZmlnIHZhbHVlLgor
CSAqLworCXN0cnVjdCBzeW1ib2xfdmFsdWUgZGVmW1NfREVGX0NPVU5UXTsKKworCS8qCisJICog
QW4gdXBwZXIgYm91bmQgb24gdGhlIHRyaXN0YXRlIHZhbHVlIHRoZSB1c2VyIGNhbiBzZXQgZm9y
IHRoZSBzeW1ib2wKKwkgKiBpZiBpdCBpcyBhIGJvb2xlYW4gb3IgdHJpc3RhdGUuIENhbGN1bGF0
ZWQgZnJvbSBwcm9tcHQgZGVwZW5kZW5jaWVzLAorCSAqIHdoaWNoIGFsc28gaW5oZXJpdCBkZXBl
bmRlbmNpZXMgZnJvbSBlbmNsb3NpbmcgbWVudXMsIGNob2ljZXMsIGFuZAorCSAqIGlmcy4gSWYg
J24nLCB0aGUgdXNlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuCisJICoKKwkgKiBTeW1ib2xzIGxh
Y2tpbmcgcHJvbXB0cyBhbHdheXMgaGF2ZSB2aXNpYmlsaXR5ICduJy4KKwkgKi8KKwl0cmlzdGF0
ZSB2aXNpYmxlOworCisJLyogU1lNQk9MXyogZmxhZ3MgKi8KKwlpbnQgZmxhZ3M7CisKKwkvKiBM
aXN0IG9mIHByb3BlcnRpZXMuIFNlZSBwcm9wX3R5cGUuICovCisJc3RydWN0IHByb3BlcnR5ICpw
cm9wOworCisJLyogRGVwZW5kZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9pY2VzLCBh
bmQgaWZzICovCisJc3RydWN0IGV4cHJfdmFsdWUgZGlyX2RlcDsKKworCS8qIFJldmVyc2UgZGVw
ZW5kZW5jaWVzIHRocm91Z2ggYmVpbmcgc2VsZWN0ZWQgYnkgb3RoZXIgc3ltYm9scyAqLworCXN0
cnVjdCBleHByX3ZhbHVlIHJldl9kZXA7CisKKwkvKgorCSAqICJXZWFrIiByZXZlcnNlIGRlcGVu
ZGVuY2llcyB0aHJvdWdoIGJlaW5nIGltcGxpZWQgYnkgb3RoZXIgc3ltYm9scworCSAqLworCXN0
cnVjdCBleHByX3ZhbHVlIGltcGxpZWQ7Cit9OworCisjZGVmaW5lIGZvcl9hbGxfc3ltYm9scyhp
LCBzeW0pIGZvciAoaSA9IDA7IGkgPCBTWU1CT0xfSEFTSFNJWkU7IGkrKykgZm9yIChzeW0gPSBz
eW1ib2xfaGFzaFtpXTsgc3ltOyBzeW0gPSBzeW0tPm5leHQpCisKKyNkZWZpbmUgU1lNQk9MX0NP
TlNUICAgICAgMHgwMDAxICAvKiBzeW1ib2wgaXMgY29uc3QgKi8KKyNkZWZpbmUgU1lNQk9MX0NI
RUNLICAgICAgMHgwMDA4ICAvKiB1c2VkIGR1cmluZyBkZXBlbmRlbmN5IGNoZWNraW5nICovCisj
ZGVmaW5lIFNZTUJPTF9DSE9JQ0UgICAgIDB4MDAxMCAgLyogc3RhcnQgb2YgYSBjaG9pY2UgYmxv
Y2sgKG51bGwgbmFtZSkgKi8KKyNkZWZpbmUgU1lNQk9MX0NIT0lDRVZBTCAgMHgwMDIwICAvKiB1
c2VkIGFzIGEgdmFsdWUgaW4gYSBjaG9pY2UgYmxvY2sgKi8KKyNkZWZpbmUgU1lNQk9MX1ZBTElE
ICAgICAgMHgwMDgwICAvKiBzZXQgd2hlbiBzeW1ib2wuY3VyciBpcyBjYWxjdWxhdGVkICovCisj
ZGVmaW5lIFNZTUJPTF9PUFRJT05BTCAgIDB4MDEwMCAgLyogY2hvaWNlIGlzIG9wdGlvbmFsIC0g
dmFsdWVzIGNhbiBiZSAnbicgKi8KKyNkZWZpbmUgU1lNQk9MX1dSSVRFICAgICAgMHgwMjAwICAv
KiB3cml0ZSBzeW1ib2wgdG8gZmlsZSAoS0NPTkZJR19DT05GSUcpICovCisjZGVmaW5lIFNZTUJP
TF9DSEFOR0VEICAgIDB4MDQwMCAgLyogPyAqLworI2RlZmluZSBTWU1CT0xfTk9fV1JJVEUgICAw
eDEwMDAgIC8qIFN5bWJvbCBmb3IgaW50ZXJuYWwgdXNlIG9ubHk7IGl0IHdpbGwgbm90IGJlIHdy
aXR0ZW4gKi8KKyNkZWZpbmUgU1lNQk9MX0NIRUNLRUQgICAgMHgyMDAwICAvKiB1c2VkIGR1cmlu
ZyBkZXBlbmRlbmN5IGNoZWNraW5nICovCisjZGVmaW5lIFNZTUJPTF9XQVJORUQgICAgIDB4ODAw
MCAgLyogd2FybmluZyBoYXMgYmVlbiBpc3N1ZWQgKi8KKworLyogU2V0IHdoZW4gc3ltYm9sLmRl
ZltdIGlzIHVzZWQgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRiAgICAgICAgMHgxMDAwMCAgLyogRmly
c3QgYml0IG9mIFNZTUJPTF9ERUYgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRl9VU0VSICAgMHgxMDAw
MCAgLyogc3ltYm9sLmRlZltTX0RFRl9VU0VSXSBpcyB2YWxpZCAqLworI2RlZmluZSBTWU1CT0xf
REVGX0FVVE8gICAweDIwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGX0FVVE9dIGlzIHZhbGlkICov
CisjZGVmaW5lIFNZTUJPTF9ERUYzICAgICAgIDB4NDAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZf
M10gaXMgdmFsaWQgKi8KKyNkZWZpbmUgU1lNQk9MX0RFRjQgICAgICAgMHg4MDAwMCAgLyogc3lt
Ym9sLmRlZltTX0RFRl80XSBpcyB2YWxpZCAqLworCisvKiBjaG9pY2UgdmFsdWVzIG5lZWQgdG8g
YmUgc2V0IGJlZm9yZSBjYWxjdWxhdGluZyB0aGlzIHN5bWJvbCB2YWx1ZSAqLworI2RlZmluZSBT
WU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUyAgMHgxMDAwMDAKKworLyogU2V0IHN5bWJvbCB0
byB5IGlmIGFsbG5vY29uZmlnOyB1c2VkIGZvciBzeW1ib2xzIHRoYXQgaGlkZSBvdGhlcnMgKi8K
KyNkZWZpbmUgU1lNQk9MX0FMTE5PQ09ORklHX1kgMHgyMDAwMDAKKworI2RlZmluZSBTWU1CT0xf
TUFYTEVOR1RICTI1NgorI2RlZmluZSBTWU1CT0xfSEFTSFNJWkUJCTk5NzMKKworLyogQSBwcm9w
ZXJ0eSByZXByZXNlbnQgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQK
KyAqIHdpdGggYSBjb25maWcgInN5bWJvbCIuCisgKiBTYW1wbGU6CisgKiBjb25maWcgRk9PCisg
KiAgICAgICAgIGRlZmF1bHQgeQorICogICAgICAgICBwcm9tcHQgImZvbyBwcm9tcHQiCisgKiAg
ICAgICAgIHNlbGVjdCBCQVIKKyAqIGNvbmZpZyBCQVoKKyAqICAgICAgICAgaW50ICJCQVogVmFs
dWUiCisgKiAgICAgICAgIHJhbmdlIDEuLjI1NQorICoKKyAqIFBsZWFzZSwgYWxzbyBjaGVjayBw
YXJzZXIueTpwcmludF9zeW1ib2woKSB3aGVuIG1vZGlmeWluZyB0aGUKKyAqIGxpc3Qgb2YgcHJv
cGVydHkgdHlwZXMhCisgKi8KK2VudW0gcHJvcF90eXBlIHsKKwlQX1VOS05PV04sCisJUF9QUk9N
UFQsICAgLyogcHJvbXB0ICJmb28gcHJvbXB0IiBvciAiQkFaIFZhbHVlIiAqLworCVBfQ09NTUVO
VCwgIC8qIHRleHQgYXNzb2NpYXRlZCB3aXRoIGEgY29tbWVudCAqLworCVBfTUVOVSwgICAgIC8q
IHByb21wdCBhc3NvY2lhdGVkIHdpdGggYSBtZW51IG9yIG1lbnVjb25maWcgc3ltYm9sICovCisJ
UF9ERUZBVUxULCAgLyogZGVmYXVsdCB5ICovCisJUF9DSE9JQ0UsICAgLyogY2hvaWNlIHZhbHVl
ICovCisJUF9TRUxFQ1QsICAgLyogc2VsZWN0IEJBUiAqLworCVBfSU1QTFksICAgIC8qIGltcGx5
IEJBUiAqLworCVBfUkFOR0UsICAgIC8qIHJhbmdlIDcuLjEwMCAoZm9yIGEgc3ltYm9sKSAqLwor
CVBfU1lNQk9MLCAgIC8qIHdoZXJlIGEgc3ltYm9sIGlzIGRlZmluZWQgKi8KK307CisKK3N0cnVj
dCBwcm9wZXJ0eSB7CisJc3RydWN0IHByb3BlcnR5ICpuZXh0OyAgICAgLyogbmV4dCBwcm9wZXJ0
eSAtIG51bGwgaWYgbGFzdCAqLworCXN0cnVjdCBzeW1ib2wgKnN5bTsgICAgICAgIC8qIHRoZSBz
eW1ib2wgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhc3NvY2lhdGVkICovCisJZW51bSBwcm9w
X3R5cGUgdHlwZTsgICAgICAgLyogdHlwZSBvZiBwcm9wZXJ0eSAqLworCWNvbnN0IGNoYXIgKnRl
eHQ7ICAgICAgICAgIC8qIHRoZSBwcm9tcHQgdmFsdWUgLSBQX1BST01QVCwgUF9NRU5VLCBQX0NP
TU1FTlQgKi8KKwlzdHJ1Y3QgZXhwcl92YWx1ZSB2aXNpYmxlOworCXN0cnVjdCBleHByICpleHBy
OyAgICAgICAgIC8qIHRoZSBvcHRpb25hbCBjb25kaXRpb25hbCBwYXJ0IG9mIHRoZSBwcm9wZXJ0
eSAqLworCXN0cnVjdCBtZW51ICptZW51OyAgICAgICAgIC8qIHRoZSBtZW51IHRoZSBwcm9wZXJ0
eSBhcmUgYXNzb2NpYXRlZCB3aXRoCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdmFs
aWQgZm9yOiBQX1NFTEVDVCwgUF9SQU5HRSwgUF9DSE9JQ0UsCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogUF9QUk9NUFQsIFBfREVGQVVMVCwgUF9NRU5VLCBQX0NPTU1FTlQgKi8KKwlz
dHJ1Y3QgZmlsZSAqZmlsZTsgICAgICAgICAvKiB3aGF0IGZpbGUgd2FzIHRoaXMgcHJvcGVydHkg
ZGVmaW5lZCAqLworCWludCBsaW5lbm87ICAgICAgICAgICAgICAgIC8qIHdoYXQgbGluZW5vIHdh
cyB0aGlzIHByb3BlcnR5IGRlZmluZWQgKi8KK307CisKKyNkZWZpbmUgZm9yX2FsbF9wcm9wZXJ0
aWVzKHN5bSwgc3QsIHRvaykgXAorCWZvciAoc3QgPSBzeW0tPnByb3A7IHN0OyBzdCA9IHN0LT5u
ZXh0KSBcCisJCWlmIChzdC0+dHlwZSA9PSAodG9rKSkKKyNkZWZpbmUgZm9yX2FsbF9kZWZhdWx0
cyhzeW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgUF9ERUZBVUxUKQorI2RlZmlu
ZSBmb3JfYWxsX2Nob2ljZXMoc3ltLCBzdCkgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIFBf
Q0hPSUNFKQorI2RlZmluZSBmb3JfYWxsX3Byb21wdHMoc3ltLCBzdCkgXAorCWZvciAoc3QgPSBz
eW0tPnByb3A7IHN0OyBzdCA9IHN0LT5uZXh0KSBcCisJCWlmIChzdC0+dGV4dCkKKworLyoKKyAq
IFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBtZW51IHRyZWUsIGFzIHNlZW4gaW4gZS5nLiBtZW51
Y29uZmlnICh0aG91Z2ggdXNlZAorICogZm9yIGFsbCBmcm9udCBlbmRzKS4gRWFjaCBzeW1ib2ws
IG1lbnUsIGV0Yy4gZGVmaW5lZCBpbiB0aGUgS2NvbmZpZyBmaWxlcworICogZ2V0cyBhIG5vZGUu
IEEgc3ltYm9sIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGdldHMgb25lIG5vZGUgYXQg
ZWFjaAorICogbG9jYXRpb24uCisgKi8KK3N0cnVjdCBtZW51IHsKKwkvKiBUaGUgbmV4dCBtZW51
IG5vZGUgYXQgdGhlIHNhbWUgbGV2ZWwgKi8KKwlzdHJ1Y3QgbWVudSAqbmV4dDsKKworCS8qIFRo
ZSBwYXJlbnQgbWVudSBub2RlLCBjb3JyZXNwb25kaW5nIHRvIGUuZy4gYSBtZW51IG9yIGNob2lj
ZSAqLworCXN0cnVjdCBtZW51ICpwYXJlbnQ7CisKKwkvKiBUaGUgZmlyc3QgY2hpbGQgbWVudSBu
b2RlLCBmb3IgZS5nLiBtZW51cyBhbmQgY2hvaWNlcyAqLworCXN0cnVjdCBtZW51ICpsaXN0Owor
CisJLyoKKwkgKiBUaGUgc3ltYm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVudSBub2RlLiBDaG9p
Y2VzIGFyZSBpbXBsZW1lbnRlZCBhcworCSAqIGEgc3BlY2lhbCBraW5kIG9mIHN5bWJvbC4gTlVM
TCBmb3IgbWVudXMsIGNvbW1lbnRzLCBhbmQgaWZzLgorCSAqLworCXN0cnVjdCBzeW1ib2wgKnN5
bTsKKworCS8qCisJICogVGhlIHByb21wdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuIFRoaXMg
aG9sZHMgdGhlIHByb21wdCBmb3IgYQorCSAqIHN5bWJvbCBhcyB3ZWxsIGFzIHRoZSB0ZXh0IGZv
ciBhIG1lbnUgb3IgY29tbWVudCwgYWxvbmcgd2l0aCB0aGUKKwkgKiB0eXBlIChQX1BST01QVCwg
UF9NRU5VLCBldGMuKQorCSAqLworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvbXB0OworCisJLyoKKwkg
KiAndmlzaWJsZSBpZicgZGVwZW5kZW5jaWVzLiBJZiBtb3JlIHRoYW4gb25lIGlzIGdpdmVuLCB0
aGV5IHdpbGwgYmUKKwkgKiBBTkRlZCB0b2dldGhlci4KKwkgKi8KKwlzdHJ1Y3QgZXhwciAqdmlz
aWJpbGl0eTsKKworCS8qCisJICogT3JkaW5hcnkgZGVwZW5kZW5jaWVzIGZyb20gZS5nLiAnZGVw
ZW5kcyBvbicgYW5kICdpZicsIEFORGVkCisJICogdG9nZXRoZXIKKwkgKi8KKwlzdHJ1Y3QgZXhw
ciAqZGVwOworCisJLyogTUVOVV8qIGZsYWdzICovCisJdW5zaWduZWQgaW50IGZsYWdzOworCisJ
LyogQW55IGhlbHAgdGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUgKi8KKwljaGFyICpoZWxw
OworCisJLyogVGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBtZW51IG5vZGUgYXBwZWFycyBpbiB0aGUg
S2NvbmZpZyBmaWxlcyAqLworCXN0cnVjdCBmaWxlICpmaWxlOworCWludCBsaW5lbm87CisKKwkv
KiBGb3IgdXNlIGJ5IGZyb250IGVuZHMgdGhhdCBuZWVkIHRvIHN0b3JlIGF1eGlsaWFyeSBkYXRh
ICovCisJdm9pZCAqZGF0YTsKK307CisKKy8qCisgKiBTZXQgb24gYSBtZW51IG5vZGUgd2hlbiB0
aGUgY29ycmVzcG9uZGluZyBzeW1ib2wgY2hhbmdlcyBzdGF0ZSBpbiBzb21lIHdheS4KKyAqIENh
biBiZSBjaGVja2VkIGJ5IGZyb250IGVuZHMuCisgKi8KKyNkZWZpbmUgTUVOVV9DSEFOR0VECQkw
eDAwMDEKKworI2RlZmluZSBNRU5VX1JPT1QJCTB4MDAwMgorCitzdHJ1Y3QganVtcF9rZXkgewor
CXN0cnVjdCBsaXN0X2hlYWQgZW50cmllczsKKwlzaXplX3Qgb2Zmc2V0OworCXN0cnVjdCBtZW51
ICp0YXJnZXQ7CisJaW50IGluZGV4OworfTsKKworI2RlZmluZSBKVU1QX05CCQkJOQorCitleHRl
cm4gc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgZmlsZSAqY3VycmVudF9m
aWxlOworc3RydWN0IGZpbGUgKmxvb2t1cF9maWxlKGNvbnN0IGNoYXIgKm5hbWUpOworCitleHRl
cm4gc3RydWN0IHN5bWJvbCBzeW1ib2xfeWVzLCBzeW1ib2xfbm8sIHN5bWJvbF9tb2Q7CitleHRl
cm4gc3RydWN0IHN5bWJvbCAqbW9kdWxlc19zeW07CitleHRlcm4gc3RydWN0IHN5bWJvbCAqc3lt
X2RlZmNvbmZpZ19saXN0OworZXh0ZXJuIGludCBjZGVidWc7CitzdHJ1Y3QgZXhwciAqZXhwcl9h
bGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9j
X29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpOworc3RydWN0IGV4cHIg
KmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICplMSwgc3Ry
dWN0IGV4cHIgKmUyKTsKK3N0cnVjdCBleHByICpleHByX2FsbG9jX2NvbXAoZW51bSBleHByX3R5
cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBzeW1ib2wgKnMyKTsKK3N0cnVjdCBl
eHByICpleHByX2FsbG9jX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7Citz
dHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICpl
Mik7CitzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBleHByICpvcmcpOwordm9p
ZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpOwordm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1
Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpOwordHJpc3RhdGUgZXhwcl9jYWxjX3Zh
bHVlKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX3RyYW5zX2Jvb2woc3RydWN0
IGV4cHIgKmUpOworc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX2R1cHMoc3RydWN0IGV4cHIg
KmUpOworc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNmb3JtKHN0cnVjdCBleHByICplKTsKK2ludCBl
eHByX2NvbnRhaW5zX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0p
OworYm9vbCBleHByX2RlcGVuZHNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBzeW1i
b2wgKnN5bSk7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBleHByICpl
LCBlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOworCit2b2lkIGV4cHJf
ZnByaW50KHN0cnVjdCBleHByICplLCBGSUxFICpvdXQpOworc3RydWN0IGdzdHI7IC8qIGZvcndh
cmQgKi8KK3ZvaWQgZXhwcl9nc3RyX3ByaW50KHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAq
Z3MpOwordm9pZCBleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLCBzdHJ1Y3Qg
Z3N0ciAqZ3MsCisJCQkgICAgdHJpc3RhdGUgcHJfdHlwZSwgY29uc3QgY2hhciAqdGl0bGUpOwor
CitzdGF0aWMgaW5saW5lIGludCBleHByX2lzX3llcyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlyZXR1
cm4gIWUgfHwgKGUtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95
ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBleHByX2lzX25vKHN0cnVjdCBleHByICplKQor
eworCXJldHVybiBlICYmIChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQuc3ltID09ICZz
eW1ib2xfbm8pOworfQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYg
LyogRVhQUl9IICovCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5z
aCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2ZnLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLjQ4MGVjZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25m
aWcubmV3L2djb25mLWNmZy5zaApAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKyMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJndGsrLTIuMCBnbW9kdWxlLTIuMCBs
aWJnbGFkZS0yLjAiCisKK2lmIFsgLXogIiQoY29tbWFuZCAtdiBwa2ctY29uZmlnKSIgXTsgdGhl
bgorCWVjaG8gPiYyICIqIgorCWVjaG8gPiYyICIqICdtYWtlIGdjb25maWcnIHJlcXVpcmVzICdw
a2ctY29uZmlnJy4gUGxlYXNlIGluc3RhbGwgaXQuIgorCWVjaG8gPiYyICIqIgorCWV4aXQgMQor
ZmkKKworaWYgISBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0c7IHRoZW4KKwllY2hvID4mMiAiKiIK
KwllY2hvID4mMiAiKiBVbmFibGUgdG8gZmluZCB0aGUgR1RLKyBpbnN0YWxsYXRpb24uIFBsZWFz
ZSBtYWtlIHN1cmUgdGhhdCIKKwllY2hvID4mMiAiKiB0aGUgR1RLKyAyLjAgZGV2ZWxvcG1lbnQg
cGFja2FnZSBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkLiIKKwllY2hvID4mMiAiKiBZb3UgbmVlZCAk
UEtHIgorCWVjaG8gPiYyICIqIgorCWV4aXQgMQorZmkKKworaWYgISBwa2ctY29uZmlnIC0tYXRs
ZWFzdC12ZXJzaW9uPTIuMC4wIGd0aystMi4wOyB0aGVuCisJZWNobyA+JjIgIioiCisJZWNobyA+
JjIgIiogR1RLKyBpcyBwcmVzZW50IGJ1dCB2ZXJzaW9uID49IDIuMC4wIGlzIHJlcXVpcmVkLiIK
KwllY2hvID4mMiAiKiIKKwlleGl0IDEKK2ZpCisKK2VjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmln
IC0tY2ZsYWdzICRQS0cpXCIKK2VjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRylc
IgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9nY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmIz
NDIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmMKQEAgLTAs
MCArMSwxNTE2IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwMi0yMDAzIFJvbWFpbiBMaWV2aW4gPHJvbXNAdGlscC5pbmZvPgor
ICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRp
ZgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAiaW1h
Z2VzLmgiCisKKyNpbmNsdWRlIDxnbGFkZS9nbGFkZS5oPgorI2luY2x1ZGUgPGd0ay9ndGsuaD4K
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4KKworI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8dGltZS5oPgorCisvLyNkZWZpbmUgREVCVUcKKworZW51bSB7CisJU0lOR0xFX1ZJ
RVcsIFNQTElUX1ZJRVcsIEZVTExfVklFVworfTsKKworZW51bSB7CisJT1BUX05PUk1BTCwgT1BU
X0FMTCwgT1BUX1BST01QVAorfTsKKworc3RhdGljIGdpbnQgdmlld19tb2RlID0gRlVMTF9WSUVX
Oworc3RhdGljIGdib29sZWFuIHNob3dfbmFtZSA9IFRSVUU7CitzdGF0aWMgZ2Jvb2xlYW4gc2hv
d19yYW5nZSA9IFRSVUU7CitzdGF0aWMgZ2Jvb2xlYW4gc2hvd192YWx1ZSA9IFRSVUU7CitzdGF0
aWMgZ2Jvb2xlYW4gcmVzaXplYWJsZSA9IEZBTFNFOworc3RhdGljIGludCBvcHRfbW9kZSA9IE9Q
VF9OT1JNQUw7CisKK0d0a1dpZGdldCAqbWFpbl93bmQgPSBOVUxMOworR3RrV2lkZ2V0ICp0cmVl
MV93ID0gTlVMTDsJLy8gbGVmdCAgZnJhbWUKK0d0a1dpZGdldCAqdHJlZTJfdyA9IE5VTEw7CS8v
IHJpZ2h0IGZyYW1lCitHdGtXaWRnZXQgKnRleHRfdyA9IE5VTEw7CitHdGtXaWRnZXQgKmhwYW5l
ZCA9IE5VTEw7CitHdGtXaWRnZXQgKnZwYW5lZCA9IE5VTEw7CitHdGtXaWRnZXQgKmJhY2tfYnRu
ID0gTlVMTDsKK0d0a1dpZGdldCAqc2F2ZV9idG4gPSBOVUxMOworR3RrV2lkZ2V0ICpzYXZlX21l
bnVfaXRlbSA9IE5VTEw7CisKK0d0a1RleHRUYWcgKnRhZzEsICp0YWcyOworR2RrQ29sb3IgY29s
b3I7CisKK0d0a1RyZWVTdG9yZSAqdHJlZTEsICp0cmVlMiwgKnRyZWU7CitHdGtUcmVlTW9kZWwg
Km1vZGVsMSwgKm1vZGVsMjsKK3N0YXRpYyBHdGtUcmVlSXRlciAqcGFyZW50c1syNTZdOworc3Rh
dGljIGdpbnQgaW5kZW50OworCitzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnQ7IC8vIGN1cnJl
bnQgbm9kZSBmb3IgU0lOR0xFIHZpZXcKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqYnJvd3NlZDsgLy8g
YnJvd3NlZCBub2RlIGZvciBTUExJVCB2aWV3CisKK2VudW0geworCUNPTF9PUFRJT04sIENPTF9O
QU1FLCBDT0xfTk8sIENPTF9NT0QsIENPTF9ZRVMsIENPTF9WQUxVRSwKKwlDT0xfTUVOVSwgQ09M
X0NPTE9SLCBDT0xfRURJVCwgQ09MX1BJWEJVRiwKKwlDT0xfUElYVklTLCBDT0xfQlROVklTLCBD
T0xfQlROQUNULCBDT0xfQlROSU5DLCBDT0xfQlROUkFELAorCUNPTF9OVU1CRVIKK307CisKK3N0
YXRpYyB2b2lkIGRpc3BsYXlfbGlzdCh2b2lkKTsKK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZShz
dHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lkKTsK
K3N0YXRpYyB2b2lkIHVwZGF0ZV90cmVlKHN0cnVjdCBtZW51ICpzcmMsIEd0a1RyZWVJdGVyICog
ZHN0KTsKK3N0YXRpYyB2b2lkIHNldF9ub2RlKEd0a1RyZWVJdGVyICogbm9kZSwgc3RydWN0IG1l
bnUgKm1lbnUsIGdjaGFyICoqIHJvdyk7CitzdGF0aWMgZ2NoYXIgKipmaWxsX3JvdyhzdHJ1Y3Qg
bWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2NoYW5nZWQodm9pZCk7CisKKy8qIEhlbHBp
bmcvRGVidWdnaW5nIEZ1bmN0aW9ucyAqLworI2lmZGVmIERFQlVHCitzdGF0aWMgY29uc3QgY2hh
ciAqZGJnX3N5bV9mbGFncyhpbnQgdmFsKQoreworCXN0YXRpYyBjaGFyIGJ1ZlsyNTZdOworCisJ
Ynplcm8oYnVmLCAyNTYpOworCisJaWYgKHZhbCAmIFNZTUJPTF9DT05TVCkKKwkJc3RyY2F0KGJ1
ZiwgImNvbnN0LyIpOworCWlmICh2YWwgJiBTWU1CT0xfQ0hFQ0spCisJCXN0cmNhdChidWYsICJj
aGVjay8iKTsKKwlpZiAodmFsICYgU1lNQk9MX0NIT0lDRSkKKwkJc3RyY2F0KGJ1ZiwgImNob2lj
ZS8iKTsKKwlpZiAodmFsICYgU1lNQk9MX0NIT0lDRVZBTCkKKwkJc3RyY2F0KGJ1ZiwgImNob2lj
ZXZhbC8iKTsKKwlpZiAodmFsICYgU1lNQk9MX1ZBTElEKQorCQlzdHJjYXQoYnVmLCAidmFsaWQv
Iik7CisJaWYgKHZhbCAmIFNZTUJPTF9PUFRJT05BTCkKKwkJc3RyY2F0KGJ1ZiwgIm9wdGlvbmFs
LyIpOworCWlmICh2YWwgJiBTWU1CT0xfV1JJVEUpCisJCXN0cmNhdChidWYsICJ3cml0ZS8iKTsK
KwlpZiAodmFsICYgU1lNQk9MX0NIQU5HRUQpCisJCXN0cmNhdChidWYsICJjaGFuZ2VkLyIpOwor
CWlmICh2YWwgJiBTWU1CT0xfTk9fV1JJVEUpCisJCXN0cmNhdChidWYsICJub193cml0ZS8iKTsK
KworCWJ1ZltzdHJsZW4oYnVmKSAtIDFdID0gJ1wwJzsKKworCXJldHVybiBidWY7Cit9CisjZW5k
aWYKKworc3RhdGljIHZvaWQgcmVwbGFjZV9idXR0b25faWNvbihHbGFkZVhNTCAqeG1sLCBHZGtE
cmF3YWJsZSAqd2luZG93LAorCQkJCUd0a1N0eWxlICpzdHlsZSwgZ2NoYXIgKmJ0bl9uYW1lLCBn
Y2hhciAqKnhwbSkKK3sKKwlHZGtQaXhtYXAgKnBpeG1hcDsKKwlHZGtCaXRtYXAgKm1hc2s7CisJ
R3RrVG9vbEJ1dHRvbiAqYnV0dG9uOworCUd0a1dpZGdldCAqaW1hZ2U7CisKKwlwaXhtYXAgPSBn
ZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbV9kKHdpbmRvdywgJm1hc2ssCisJCQkJCSAgICAgICZz
dHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF0sCisJCQkJCSAgICAgIHhwbSk7CisKKwlidXR0b24g
PSBHVEtfVE9PTF9CVVRUT04oZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCBidG5fbmFtZSkpOwor
CWltYWdlID0gZ3RrX2ltYWdlX25ld19mcm9tX3BpeG1hcChwaXhtYXAsIG1hc2spOworCWd0a193
aWRnZXRfc2hvdyhpbWFnZSk7CisJZ3RrX3Rvb2xfYnV0dG9uX3NldF9pY29uX3dpZGdldChidXR0
b24sIGltYWdlKTsKK30KKworLyogTWFpbiBXaW5kb3cgSW5pdGlhbGl6YXRpb24gKi8KK3N0YXRp
YyB2b2lkIGluaXRfbWFpbl93aW5kb3coY29uc3QgZ2NoYXIgKmdsYWRlX2ZpbGUpCit7CisJR2xh
ZGVYTUwgKnhtbDsKKwlHdGtXaWRnZXQgKndpZGdldDsKKwlHdGtUZXh0QnVmZmVyICp0eHRidWY7
CisJR3RrU3R5bGUgKnN0eWxlOworCisJeG1sID0gZ2xhZGVfeG1sX25ldyhnbGFkZV9maWxlLCAi
d2luZG93MSIsIE5VTEwpOworCWlmICgheG1sKQorCQlnX2Vycm9yKCJHVUkgbG9hZGluZyBmYWls
ZWQgIVxuIik7CisJZ2xhZGVfeG1sX3NpZ25hbF9hdXRvY29ubmVjdCh4bWwpOworCisJbWFpbl93
bmQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ3aW5kb3cxIik7CisJaHBhbmVkID0gZ2xh
ZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiaHBhbmVkMSIpOworCXZwYW5lZCA9IGdsYWRlX3htbF9n
ZXRfd2lkZ2V0KHhtbCwgInZwYW5lZDEiKTsKKwl0cmVlMV93ID0gZ2xhZGVfeG1sX2dldF93aWRn
ZXQoeG1sLCAidHJlZXZpZXcxIik7CisJdHJlZTJfdyA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgInRyZWV2aWV3MiIpOworCXRleHRfdyA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRl
eHR2aWV3MyIpOworCisJYmFja19idG4gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJidXR0
b24xIik7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7CisKKwl3
aWRnZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzaG93X25hbWUxIik7CisJZ3RrX2No
ZWNrX21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtDaGVja01lbnVJdGVtICopIHdpZGdldCwKKwkJ
CQkgICAgICAgc2hvd19uYW1lKTsKKworCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgInNob3dfcmFuZ2UxIik7CisJZ3RrX2NoZWNrX21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtD
aGVja01lbnVJdGVtICopIHdpZGdldCwKKwkJCQkgICAgICAgc2hvd19yYW5nZSk7CisKKwl3aWRn
ZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzaG93X2RhdGExIik7CisJZ3RrX2NoZWNr
X21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtDaGVja01lbnVJdGVtICopIHdpZGdldCwKKwkJCQkg
ICAgICAgc2hvd192YWx1ZSk7CisKKwlzYXZlX2J0biA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgImJ1dHRvbjMiKTsKKwlzYXZlX21lbnVfaXRlbSA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHht
bCwgInNhdmUxIik7CisJY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjayhjb25mX2NoYW5nZWQpOwor
CisJc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShtYWluX3duZCk7CisJd2lkZ2V0ID0gZ2xh
ZGVfeG1sX2dldF93aWRnZXQoeG1sLCAidG9vbGJhcjEiKTsKKworCXJlcGxhY2VfYnV0dG9uX2lj
b24oeG1sLCBtYWluX3duZC0+d2luZG93LCBzdHlsZSwKKwkJCSAgICAiYnV0dG9uNCIsIChnY2hh
ciAqKikgeHBtX3NpbmdsZV92aWV3KTsKKwlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwgbWFpbl93
bmQtPndpbmRvdywgc3R5bGUsCisJCQkgICAgImJ1dHRvbjUiLCAoZ2NoYXIgKiopIHhwbV9zcGxp
dF92aWV3KTsKKwlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwgbWFpbl93bmQtPndpbmRvdywgc3R5
bGUsCisJCQkgICAgImJ1dHRvbjYiLCAoZ2NoYXIgKiopIHhwbV90cmVlX3ZpZXcpOworCisJdHh0
YnVmID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVyKEdUS19URVhUX1ZJRVcodGV4dF93KSk7CisJ
dGFnMSA9IGd0a190ZXh0X2J1ZmZlcl9jcmVhdGVfdGFnKHR4dGJ1ZiwgIm15dGFnMSIsCisJCQkJ
CSAgImZvcmVncm91bmQiLCAicmVkIiwKKwkJCQkJICAid2VpZ2h0IiwgUEFOR09fV0VJR0hUX0JP
TEQsCisJCQkJCSAgTlVMTCk7CisJdGFnMiA9IGd0a190ZXh0X2J1ZmZlcl9jcmVhdGVfdGFnKHR4
dGJ1ZiwgIm15dGFnMiIsCisJCQkJCSAgLyoic3R5bGUiLCBQQU5HT19TVFlMRV9PQkxJUVVFLCAq
LworCQkJCQkgIE5VTEwpOworCisJZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhtYWlu
X3duZCksIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisKKwlndGtfd2lkZ2V0X3Nob3cobWFpbl93
bmQpOworfQorCitzdGF0aWMgdm9pZCBpbml0X3RyZWVfbW9kZWwodm9pZCkKK3sKKwlnaW50IGk7
CisKKwl0cmVlID0gdHJlZTIgPSBndGtfdHJlZV9zdG9yZV9uZXcoQ09MX05VTUJFUiwKKwkJCQkJ
ICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLAorCQkJCQkgIEdfVFlQRV9TVFJJTkcsIEdf
VFlQRV9TVFJJTkcsCisJCQkJCSAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywKKwkJCQkJ
ICBHX1RZUEVfUE9JTlRFUiwgR0RLX1RZUEVfQ09MT1IsCisJCQkJCSAgR19UWVBFX0JPT0xFQU4s
IEdES19UWVBFX1BJWEJVRiwKKwkJCQkJICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4s
CisJCQkJCSAgR19UWVBFX0JPT0xFQU4sIEdfVFlQRV9CT09MRUFOLAorCQkJCQkgIEdfVFlQRV9C
T09MRUFOKTsKKwltb2RlbDIgPSBHVEtfVFJFRV9NT0RFTCh0cmVlMik7CisKKwlmb3IgKHBhcmVu
dHNbMF0gPSBOVUxMLCBpID0gMTsgaSA8IDI1NjsgaSsrKQorCQlwYXJlbnRzW2ldID0gKEd0a1Ry
ZWVJdGVyICopIGdfbWFsbG9jKHNpemVvZihHdGtUcmVlSXRlcikpOworCisJdHJlZTEgPSBndGtf
dHJlZV9zdG9yZV9uZXcoQ09MX05VTUJFUiwKKwkJCQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVf
U1RSSU5HLAorCQkJCSAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsCisJCQkJICAgR19U
WVBFX1NUUklORywgR19UWVBFX1NUUklORywKKwkJCQkgICBHX1RZUEVfUE9JTlRFUiwgR0RLX1RZ
UEVfQ09MT1IsCisJCQkJICAgR19UWVBFX0JPT0xFQU4sIEdES19UWVBFX1BJWEJVRiwKKwkJCQkg
ICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sCisJCQkJICAgR19UWVBFX0JPT0xFQU4s
IEdfVFlQRV9CT09MRUFOLAorCQkJCSAgIEdfVFlQRV9CT09MRUFOKTsKKwltb2RlbDEgPSBHVEtf
VFJFRV9NT0RFTCh0cmVlMSk7Cit9CisKK3N0YXRpYyB2b2lkIGluaXRfbGVmdF90cmVlKHZvaWQp
Cit7CisJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHRyZWUxX3cpOworCUd0a0Nl
bGxSZW5kZXJlciAqcmVuZGVyZXI7CisJR3RrVHJlZVNlbGVjdGlvbiAqc2VsOworCUd0a1RyZWVW
aWV3Q29sdW1uICpjb2x1bW47CisKKwlndGtfdHJlZV92aWV3X3NldF9tb2RlbCh2aWV3LCBtb2Rl
bDEpOworCWd0a190cmVlX3ZpZXdfc2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVFKTsKKwln
dGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KHZpZXcsIFRSVUUpOworCisJY29sdW1uID0gZ3Rr
X3RyZWVfdmlld19jb2x1bW5fbmV3KCk7CisJZ3RrX3RyZWVfdmlld19hcHBlbmRfY29sdW1uKHZp
ZXcsIGNvbHVtbik7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3RpdGxlKGNvbHVtbiwgIk9w
dGlvbnMiKTsKKworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdG9nZ2xlX25ldygpOwor
CWd0a190cmVlX3ZpZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29s
dW1uKSwKKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRf
YXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJCQkgICAgcmVuZGVy
ZXIsCisJCQkJCSAgICAiYWN0aXZlIiwgQ09MX0JUTkFDVCwKKwkJCQkJICAgICJpbmNvbnNpc3Rl
bnQiLCBDT0xfQlROSU5DLAorCQkJCQkgICAgInZpc2libGUiLCBDT0xfQlROVklTLAorCQkJCQkg
ICAgInJhZGlvIiwgQ09MX0JUTlJBRCwgTlVMTCk7CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5k
ZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RS
RUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsKKwlndGtfdHJl
ZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4p
LAorCQkJCQkgICAgcmVuZGVyZXIsCisJCQkJCSAgICAidGV4dCIsIENPTF9PUFRJT04sCisJCQkJ
CSAgICAiZm9yZWdyb3VuZC1nZGsiLAorCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKKworCXNl
bCA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbih2aWV3KTsKKwlndGtfdHJlZV9zZWxlY3Rp
b25fc2V0X21vZGUoc2VsLCBHVEtfU0VMRUNUSU9OX1NJTkdMRSk7CisJZ3RrX3dpZGdldF9yZWFs
aXplKHRyZWUxX3cpOworfQorCitzdGF0aWMgdm9pZCByZW5kZXJlcl9lZGl0ZWQoR3RrQ2VsbFJl
bmRlcmVyVGV4dCAqIGNlbGwsCisJCQkgICAgY29uc3QgZ2NoYXIgKiBwYXRoX3N0cmluZywKKwkJ
CSAgICBjb25zdCBnY2hhciAqIG5ld190ZXh0LCBncG9pbnRlciB1c2VyX2RhdGEpOworCitzdGF0
aWMgdm9pZCBpbml0X3JpZ2h0X3RyZWUodm9pZCkKK3sKKwlHdGtUcmVlVmlldyAqdmlldyA9IEdU
S19UUkVFX1ZJRVcodHJlZTJfdyk7CisJR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsKKwlHdGtU
cmVlU2VsZWN0aW9uICpzZWw7CisJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKKwlnaW50IGk7
CisKKwlndGtfdHJlZV92aWV3X3NldF9tb2RlbCh2aWV3LCBtb2RlbDIpOworCWd0a190cmVlX3Zp
ZXdfc2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVFKTsKKwlndGtfdHJlZV92aWV3X3NldF9y
dWxlc19oaW50KHZpZXcsIFRSVUUpOworCisJY29sdW1uID0gZ3RrX3RyZWVfdmlld19jb2x1bW5f
bmV3KCk7CisJZ3RrX3RyZWVfdmlld19hcHBlbmRfY29sdW1uKHZpZXcsIGNvbHVtbik7CisJZ3Rr
X3RyZWVfdmlld19jb2x1bW5fc2V0X3RpdGxlKGNvbHVtbiwgIk9wdGlvbnMiKTsKKworCXJlbmRl
cmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfcGl4YnVmX25ldygpOworCWd0a190cmVlX3ZpZXdfY29s
dW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJcmVuZGVy
ZXIsIEZBTFNFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJF
RV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJCQkgICAgcmVuZGVyZXIsCisJCQkJCSAgICAicGl4
YnVmIiwgQ09MX1BJWEJVRiwKKwkJCQkJICAgICJ2aXNpYmxlIiwgQ09MX1BJWFZJUywgTlVMTCk7
CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVfbmV3KCk7CisJZ3RrX3RyZWVf
dmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJ
CQlyZW5kZXJlciwgRkFMU0UpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVz
KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCSAgICByZW5kZXJlciwKKwkJCQkJ
ICAgICJhY3RpdmUiLCBDT0xfQlROQUNULAorCQkJCQkgICAgImluY29uc2lzdGVudCIsIENPTF9C
VE5JTkMsCisJCQkJCSAgICAidmlzaWJsZSIsIENPTF9CVE5WSVMsCisJCQkJCSAgICAicmFkaW8i
LCBDT0xfQlROUkFELCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRf
bmV3KCk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NP
TFVNTihjb2x1bW4pLAorCQkJCQlyZW5kZXJlciwgRkFMU0UpOworCWd0a190cmVlX3ZpZXdfY29s
dW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCSAg
ICByZW5kZXJlciwKKwkJCQkJICAgICJ0ZXh0IiwgQ09MX09QVElPTiwKKwkJCQkJICAgICJmb3Jl
Z3JvdW5kLWdkayIsCisJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOworCisJcmVuZGVyZXIgPSBn
dGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVt
bl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsCisJCQkJCQkgICAgIk5hbWUiLCByZW5kZXJlciwK
KwkJCQkJCSAgICAidGV4dCIsIENPTF9OQU1FLAorCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIs
CisJCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRl
cmVyX3RleHRfbmV3KCk7CisJZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmli
dXRlcyh2aWV3LCAtMSwKKwkJCQkJCSAgICAiTiIsIHJlbmRlcmVyLAorCQkJCQkJICAgICJ0ZXh0
IiwgQ09MX05PLAorCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsCisJCQkJCQkgICAgQ09MX0NP
TE9SLCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7CisJ
Z3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwKKwkJ
CQkJCSAgICAiTSIsIHJlbmRlcmVyLAorCQkJCQkJICAgICJ0ZXh0IiwgQ09MX01PRCwKKwkJCQkJ
CSAgICAiZm9yZWdyb3VuZC1nZGsiLAorCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7CisJcmVu
ZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3ZpZXdfaW5z
ZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsCisJCQkJCQkgICAgIlkiLCByZW5k
ZXJlciwKKwkJCQkJCSAgICAidGV4dCIsIENPTF9ZRVMsCisJCQkJCQkgICAgImZvcmVncm91bmQt
Z2RrIiwKKwkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOworCXJlbmRlcmVyID0gZ3RrX2NlbGxf
cmVuZGVyZXJfdGV4dF9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9h
dHRyaWJ1dGVzKHZpZXcsIC0xLAorCQkJCQkJICAgICJWYWx1ZSIsIHJlbmRlcmVyLAorCQkJCQkJ
ICAgICJ0ZXh0IiwgQ09MX1ZBTFVFLAorCQkJCQkJICAgICJlZGl0YWJsZSIsCisJCQkJCQkgICAg
Q09MX0VESVQsCisJCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwKKwkJCQkJCSAgICBDT0xfQ09M
T1IsIE5VTEwpOworCWdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QocmVuZGVyZXIpLCAiZWRpdGVk
IiwKKwkJCSBHX0NBTExCQUNLKHJlbmRlcmVyX2VkaXRlZCksIE5VTEwpOworCisJY29sdW1uID0g
Z3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9OQU1FKTsKKwlndGtfdHJlZV92aWV3
X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfbmFtZSk7CisJY29sdW1uID0gZ3RrX3Ry
ZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9OTyk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5f
c2V0X3Zpc2libGUoY29sdW1uLCBzaG93X3JhbmdlKTsKKwljb2x1bW4gPSBndGtfdHJlZV92aWV3
X2dldF9jb2x1bW4odmlldywgQ09MX01PRCk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zp
c2libGUoY29sdW1uLCBzaG93X3JhbmdlKTsKKwljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9j
b2x1bW4odmlldywgQ09MX1lFUyk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUo
Y29sdW1uLCBzaG93X3JhbmdlKTsKKwljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4o
dmlldywgQ09MX1ZBTFVFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1
bW4sIHNob3dfdmFsdWUpOworCisJaWYgKHJlc2l6ZWFibGUpIHsKKwkJZm9yIChpID0gMDsgaSA8
IENPTF9WQUxVRTsgaSsrKSB7CisJCQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4o
dmlldywgaSk7CisJCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfcmVzaXphYmxlKGNvbHVtbiwg
VFJVRSk7CisJCX0KKwl9CisKKwlzZWwgPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24odmll
dyk7CisJZ3RrX3RyZWVfc2VsZWN0aW9uX3NldF9tb2RlKHNlbCwgR1RLX1NFTEVDVElPTl9TSU5H
TEUpOworfQorCisKKy8qIFV0aWxpdHkgRnVuY3Rpb25zICovCisKKworc3RhdGljIHZvaWQgdGV4
dF9pbnNlcnRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlHdGtUZXh0QnVmZmVyICpidWZm
ZXI7CisJR3RrVGV4dEl0ZXIgc3RhcnQsIGVuZDsKKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51
X2dldF9wcm9tcHQobWVudSk7CisJc3RydWN0IGdzdHIgaGVscCA9IHN0cl9uZXcoKTsKKworCW1l
bnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsKKworCWJ1ZmZlciA9IGd0a190ZXh0X3ZpZXdf
Z2V0X2J1ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykpOworCWd0a190ZXh0X2J1ZmZlcl9nZXRf
Ym91bmRzKGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsKKwlndGtfdGV4dF9idWZmZXJfZGVsZXRlKGJ1
ZmZlciwgJnN0YXJ0LCAmZW5kKTsKKwlndGtfdGV4dF92aWV3X3NldF9sZWZ0X21hcmdpbihHVEtf
VEVYVF9WSUVXKHRleHRfdyksIDE1KTsKKworCWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIo
YnVmZmVyLCAmZW5kKTsKKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIs
ICZlbmQsIHByb21wdCwgLTEsIHRhZzEsCisJCQkJCSBOVUxMKTsKKwlndGtfdGV4dF9idWZmZXJf
aW5zZXJ0X2F0X2N1cnNvcihidWZmZXIsICJcblxuIiwgMik7CisJZ3RrX3RleHRfYnVmZmVyX2dl
dF9lbmRfaXRlcihidWZmZXIsICZlbmQpOworCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90
YWdzKGJ1ZmZlciwgJmVuZCwgc3RyX2dldCgmaGVscCksIC0xLCB0YWcyLAorCQkJCQkgTlVMTCk7
CisJc3RyX2ZyZWUoJmhlbHApOworfQorCisKK3N0YXRpYyB2b2lkIHRleHRfaW5zZXJ0X21zZyhj
b25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKK3sKKwlHdGtUZXh0QnVmZmVy
ICpidWZmZXI7CisJR3RrVGV4dEl0ZXIgc3RhcnQsIGVuZDsKKwljb25zdCBjaGFyICptc2cgPSBt
ZXNzYWdlOworCisJYnVmZmVyID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVyKEdUS19URVhUX1ZJ
RVcodGV4dF93KSk7CisJZ3RrX3RleHRfYnVmZmVyX2dldF9ib3VuZHMoYnVmZmVyLCAmc3RhcnQs
ICZlbmQpOworCWd0a190ZXh0X2J1ZmZlcl9kZWxldGUoYnVmZmVyLCAmc3RhcnQsICZlbmQpOwor
CWd0a190ZXh0X3ZpZXdfc2V0X2xlZnRfbWFyZ2luKEdUS19URVhUX1ZJRVcodGV4dF93KSwgMTUp
OworCisJZ3RrX3RleHRfYnVmZmVyX2dldF9lbmRfaXRlcihidWZmZXIsICZlbmQpOworCWd0a190
ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwgdGl0bGUsIC0xLCB0YWcx
LAorCQkJCQkgTlVMTCk7CisJZ3RrX3RleHRfYnVmZmVyX2luc2VydF9hdF9jdXJzb3IoYnVmZmVy
LCAiXG5cbiIsIDIpOworCWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIoYnVmZmVyLCAmZW5k
KTsKKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQsIG1zZywg
LTEsIHRhZzIsCisJCQkJCSBOVUxMKTsKK30KKworCisvKiBNYWluIFdpbmRvd3MgQ2FsbGJhY2tz
ICovCisKK3ZvaWQgb25fc2F2ZV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9p
bnRlciB1c2VyX2RhdGEpOworZ2Jvb2xlYW4gb25fd2luZG93MV9kZWxldGVfZXZlbnQoR3RrV2lk
Z2V0ICogd2lkZ2V0LCBHZGtFdmVudCAqIGV2ZW50LAorCQkJCSBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJR3RrV2lkZ2V0ICpkaWFsb2csICpsYWJlbDsKKwlnaW50IHJlc3VsdDsKKworCWlmICgh
Y29uZl9nZXRfY2hhbmdlZCgpKQorCQlyZXR1cm4gRkFMU0U7CisKKwlkaWFsb2cgPSBndGtfZGlh
bG9nX25ld193aXRoX2J1dHRvbnMoIldhcm5pbmcgISIsCisJCQkJCSAgICAgR1RLX1dJTkRPVyht
YWluX3duZCksCisJCQkJCSAgICAgKEd0a0RpYWxvZ0ZsYWdzKQorCQkJCQkgICAgIChHVEtfRElB
TE9HX01PREFMIHwKKwkJCQkJICAgICAgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKSwK
KwkJCQkJICAgICBHVEtfU1RPQ0tfT0ssCisJCQkJCSAgICAgR1RLX1JFU1BPTlNFX1lFUywKKwkJ
CQkJICAgICBHVEtfU1RPQ0tfTk8sCisJCQkJCSAgICAgR1RLX1JFU1BPTlNFX05PLAorCQkJCQkg
ICAgIEdUS19TVE9DS19DQU5DRUwsCisJCQkJCSAgICAgR1RLX1JFU1BPTlNFX0NBTkNFTCwgTlVM
TCk7CisJZ3RrX2RpYWxvZ19zZXRfZGVmYXVsdF9yZXNwb25zZShHVEtfRElBTE9HKGRpYWxvZyks
CisJCQkJCUdUS19SRVNQT05TRV9DQU5DRUwpOworCisJbGFiZWwgPSBndGtfbGFiZWxfbmV3KCJc
blNhdmUgY29uZmlndXJhdGlvbiA/XG4iKTsKKwlndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJ
TkVSKEdUS19ESUFMT0coZGlhbG9nKS0+dmJveCksIGxhYmVsKTsKKwlndGtfd2lkZ2V0X3Nob3co
bGFiZWwpOworCisJcmVzdWx0ID0gZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsK
Kwlzd2l0Y2ggKHJlc3VsdCkgeworCWNhc2UgR1RLX1JFU1BPTlNFX1lFUzoKKwkJb25fc2F2ZV9h
Y3RpdmF0ZShOVUxMLCBOVUxMKTsKKwkJcmV0dXJuIEZBTFNFOworCWNhc2UgR1RLX1JFU1BPTlNF
X05POgorCQlyZXR1cm4gRkFMU0U7CisJY2FzZSBHVEtfUkVTUE9OU0VfQ0FOQ0VMOgorCWNhc2Ug
R1RLX1JFU1BPTlNFX0RFTEVURV9FVkVOVDoKKwlkZWZhdWx0OgorCQlndGtfd2lkZ2V0X2Rlc3Ry
b3koZGlhbG9nKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCisJcmV0dXJuIEZBTFNFOworfQorCisK
K3ZvaWQgb25fd2luZG93MV9kZXN0cm95KEd0a09iamVjdCAqIG9iamVjdCwgZ3BvaW50ZXIgdXNl
cl9kYXRhKQoreworCWd0a19tYWluX3F1aXQoKTsKK30KKworCit2b2lkCitvbl93aW5kb3cxX3Np
emVfcmVxdWVzdChHdGtXaWRnZXQgKiB3aWRnZXQsCisJCQlHdGtSZXF1aXNpdGlvbiAqIHJlcXVp
c2l0aW9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJc3RhdGljIGdpbnQgb2xkX2g7CisJZ2lu
dCB3LCBoOworCisJaWYgKHdpZGdldC0+d2luZG93ID09IE5VTEwpCisJCWd0a193aW5kb3dfZ2V0
X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKG1haW5fd25kKSwgJncsICZoKTsKKwllbHNlCisJCWdk
a193aW5kb3dfZ2V0X3NpemUod2lkZ2V0LT53aW5kb3csICZ3LCAmaCk7CisKKwlpZiAoaCA9PSBv
bGRfaCkKKwkJcmV0dXJuOworCW9sZF9oID0gaDsKKworCWd0a19wYW5lZF9zZXRfcG9zaXRpb24o
R1RLX1BBTkVEKHZwYW5lZCksIDIgKiBoIC8gMyk7Cit9CisKKworLyogTWVudSAmIFRvb2xiYXIg
Q2FsbGJhY2tzICovCisKKworc3RhdGljIHZvaWQKK2xvYWRfZmlsZW5hbWUoR3RrRmlsZVNlbGVj
dGlvbiAqIGZpbGVfc2VsZWN0b3IsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwljb25zdCBnY2hh
ciAqZm47CisKKwlmbiA9IGd0a19maWxlX3NlbGVjdGlvbl9nZXRfZmlsZW5hbWUoR1RLX0ZJTEVf
U0VMRUNUSU9OCisJCQkJCSAgICAgKHVzZXJfZGF0YSkpOworCisJaWYgKGNvbmZfcmVhZChmbikp
CisJCXRleHRfaW5zZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlv
biAhIik7CisJZWxzZQorCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsKK30KKwordm9pZCBvbl9s
b2FkMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJR3RrV2lkZ2V0ICpmczsKKworCWZzID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX25ldygiTG9h
ZCBmaWxlLi4uIik7CisJZ19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVD
VElPTihmcyktPm9rX2J1dHRvbiksCisJCQkgImNsaWNrZWQiLAorCQkJIEdfQ0FMTEJBQ0sobG9h
ZF9maWxlbmFtZSksIChncG9pbnRlcikgZnMpOworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChH
VEtfT0JKRUNUCisJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLAorCQkJ
CSAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2lu
dGVyKSBmcyk7CisJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QKKwkJCQkgKEdU
S19GSUxFX1NFTEVDVElPTihmcyktPmNhbmNlbF9idXR0b24pLAorCQkJCSAiY2xpY2tlZCIsIEdf
Q0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2ludGVyKSBmcyk7CisJZ3Rr
X3dpZGdldF9zaG93KGZzKTsKK30KKworCit2b2lkIG9uX3NhdmVfYWN0aXZhdGUoR3RrTWVudUl0
ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWlmIChjb25mX3dyaXRlKE5V
TEwpKQorCQl0ZXh0X2luc2VydF9tc2coIkVycm9yIiwgIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3Vy
YXRpb24gISIpOworCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7Cit9CisKKworc3RhdGljIHZvaWQK
K3N0b3JlX2ZpbGVuYW1lKEd0a0ZpbGVTZWxlY3Rpb24gKiBmaWxlX3NlbGVjdG9yLCBncG9pbnRl
ciB1c2VyX2RhdGEpCit7CisJY29uc3QgZ2NoYXIgKmZuOworCisJZm4gPSBndGtfZmlsZV9zZWxl
Y3Rpb25fZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX1NFTEVDVElPTgorCQkJCQkgICAgICh1c2VyX2Rh
dGEpKTsKKworCWlmIChjb25mX3dyaXRlKGZuKSkKKwkJdGV4dF9pbnNlcnRfbXNnKCJFcnJvciIs
ICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uICEiKTsKKworCWd0a193aWRnZXRfZGVzdHJv
eShHVEtfV0lER0VUKHVzZXJfZGF0YSkpOworfQorCit2b2lkIG9uX3NhdmVfYXMxX2FjdGl2YXRl
KEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtXaWRn
ZXQgKmZzOworCisJZnMgPSBndGtfZmlsZV9zZWxlY3Rpb25fbmV3KCJTYXZlIGZpbGUgYXMuLi4i
KTsKKwlnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+
b2tfYnV0dG9uKSwKKwkJCSAiY2xpY2tlZCIsCisJCQkgR19DQUxMQkFDSyhzdG9yZV9maWxlbmFt
ZSksIChncG9pbnRlcikgZnMpOworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNU
CisJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLAorCQkJCSAiY2xpY2tl
ZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2ludGVyKSBmcyk7
CisJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QKKwkJCQkgKEdUS19GSUxFX1NF
TEVDVElPTihmcyktPmNhbmNlbF9idXR0b24pLAorCQkJCSAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0so
Z3RrX3dpZGdldF9kZXN0cm95KSwKKwkJCQkgKGdwb2ludGVyKSBmcyk7CisJZ3RrX3dpZGdldF9z
aG93KGZzKTsKK30KKworCit2b2lkIG9uX3F1aXQxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVu
dWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlpZiAoIW9uX3dpbmRvdzFfZGVsZXRlX2V2
ZW50KE5VTEwsIE5VTEwsIE5VTEwpKQorCQlndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVCht
YWluX3duZCkpOworfQorCisKK3ZvaWQgb25fc2hvd19uYW1lMV9hY3RpdmF0ZShHdGtNZW51SXRl
bSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrVHJlZVZpZXdDb2x1bW4g
KmNvbDsKKworCXNob3dfbmFtZSA9IEdUS19DSEVDS19NRU5VX0lURU0obWVudWl0ZW0pLT5hY3Rp
dmU7CisJY29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJf
dyksIENPTF9OQU1FKTsKKwlpZiAoY29sKQorCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlz
aWJsZShjb2wsIHNob3dfbmFtZSk7Cit9CisKKwordm9pZCBvbl9zaG93X3JhbmdlMV9hY3RpdmF0
ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrVHJl
ZVZpZXdDb2x1bW4gKmNvbDsKKworCXNob3dfcmFuZ2UgPSBHVEtfQ0hFQ0tfTUVOVV9JVEVNKG1l
bnVpdGVtKS0+YWN0aXZlOworCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJF
RV9WSUVXKHRyZWUyX3cpLCBDT0xfTk8pOworCWlmIChjb2wpCisJCWd0a190cmVlX3ZpZXdfY29s
dW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7CisJY29sID0gZ3RrX3RyZWVfdmlld19n
ZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9NT0QpOworCWlmIChjb2wpCisJ
CWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7CisJY29s
ID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9Z
RVMpOworCWlmIChjb2wpCisJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwg
c2hvd19yYW5nZSk7CisKK30KKworCit2b2lkIG9uX3Nob3dfZGF0YTFfYWN0aXZhdGUoR3RrTWVu
dUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1RyZWVWaWV3Q29s
dW1uICpjb2w7CisKKwlzaG93X3ZhbHVlID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSkt
PmFjdGl2ZTsKKwljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0
cmVlMl93KSwgQ09MX1ZBTFVFKTsKKwlpZiAoY29sKQorCQlndGtfdHJlZV92aWV3X2NvbHVtbl9z
ZXRfdmlzaWJsZShjb2wsIHNob3dfdmFsdWUpOworfQorCisKK3ZvaWQKK29uX3NldF9vcHRpb25f
bW9kZTFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKm1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEp
Cit7CisJb3B0X21vZGUgPSBPUFRfTk9STUFMOworCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUy
KTsKKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0
byBzcGVlZC11cCAqLworfQorCisKK3ZvaWQKK29uX3NldF9vcHRpb25fbW9kZTJfYWN0aXZhdGUo
R3RrTWVudUl0ZW0gKm1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJb3B0X21vZGUg
PSBPUFRfQUxMOworCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlkaXNwbGF5X3RyZWUo
JnJvb3RtZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0byBzcGVlZC11cCAqLworfQor
CisKK3ZvaWQKK29uX3NldF9vcHRpb25fbW9kZTNfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKm1lbnVp
dGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJb3B0X21vZGUgPSBPUFRfUFJPTVBUOworCWd0
a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsJLyog
aW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0byBzcGVlZC11cCAqLworfQorCisKK3ZvaWQgb25faW50
cm9kdWN0aW9uMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2Vy
X2RhdGEpCit7CisJR3RrV2lkZ2V0ICpkaWFsb2c7CisJY29uc3QgZ2NoYXIgKmludHJvX3RleHQg
PQorCSAgICAiV2VsY29tZSB0byBna2MsIHRoZSBHVEsrIGdyYXBoaWNhbCBjb25maWd1cmF0aW9u
IHRvb2xcbiIKKwkgICAgIkZvciBlYWNoIG9wdGlvbiwgYSBibGFuayBib3ggaW5kaWNhdGVzIHRo
ZSBmZWF0dXJlIGlzIGRpc2FibGVkLCBhXG4iCisJICAgICJjaGVjayBpbmRpY2F0ZXMgaXQgaXMg
ZW5hYmxlZCwgYW5kIGEgZG90IGluZGljYXRlcyB0aGF0IGl0IGlzIHRvXG4iCisJICAgICJiZSBj
b21waWxlZCBhcyBhIG1vZHVsZS4gIENsaWNraW5nIG9uIHRoZSBib3ggd2lsbCBjeWNsZSB0aHJv
dWdoIHRoZSB0aHJlZSBzdGF0ZXMuXG4iCisJICAgICJcbiIKKwkgICAgIklmIHlvdSBkbyBub3Qg
c2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBkZXZpY2UgZHJpdmVyKSB0aGF0IHlvdVxuIgorCSAgICAi
YmVsaWV2ZSBzaG91bGQgYmUgcHJlc2VudCwgdHJ5IHR1cm5pbmcgb24gU2hvdyBBbGwgT3B0aW9u
c1xuIgorCSAgICAidW5kZXIgdGhlIE9wdGlvbnMgbWVudS5cbiIKKwkgICAgIkFsdGhvdWdoIHRo
ZXJlIGlzIG5vIGNyb3NzIHJlZmVyZW5jZSB5ZXQgdG8gaGVscCB5b3UgZmlndXJlIG91dFxuIgor
CSAgICAid2hhdCBvdGhlciBvcHRpb25zIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoZSBv
cHRpb24geW91XG4iCisJICAgICJhcmUgaW50ZXJlc3RlZCBpbiwgeW91IGNhbiBzdGlsbCB2aWV3
IHRoZSBoZWxwIG9mIGEgZ3JheWVkLW91dFxuIgorCSAgICAib3B0aW9uLlxuIgorCSAgICAiXG4i
CisJICAgICJUb2dnbGluZyBTaG93IERlYnVnIEluZm8gdW5kZXIgdGhlIE9wdGlvbnMgbWVudSB3
aWxsIHNob3cgXG4iCisJICAgICJ0aGUgZGVwZW5kZW5jaWVzLCB3aGljaCB5b3UgY2FuIHRoZW4g
bWF0Y2ggYnkgZXhhbWluaW5nIG90aGVyIG9wdGlvbnMuIjsKKworCWRpYWxvZyA9IGd0a19tZXNz
YWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksCisJCQkJCUdUS19ESUFMT0dfREVT
VFJPWV9XSVRIX1BBUkVOVCwKKwkJCQkJR1RLX01FU1NBR0VfSU5GTywKKwkJCQkJR1RLX0JVVFRP
TlNfQ0xPU0UsICIlcyIsIGludHJvX3RleHQpOworCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChH
VEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25zZSIsCisJCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdl
dF9kZXN0cm95KSwKKwkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsKKwlndGtfd2lkZ2V0X3Nob3df
YWxsKGRpYWxvZyk7Cit9CisKKwordm9pZCBvbl9hYm91dDFfYWN0aXZhdGUoR3RrTWVudUl0ZW0g
KiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1dpZGdldCAqZGlhbG9nOwor
CWNvbnN0IGdjaGFyICphYm91dF90ZXh0ID0KKwkgICAgImdrYyBpcyBjb3B5cmlnaHQgKGMpIDIw
MDIgUm9tYWluIExpZXZpbiA8cm9tc0BscGcudGljYWxjLm9yZz4uXG4iCisJICAgICAgIkJhc2Vk
IG9uIHRoZSBzb3VyY2UgY29kZSBmcm9tIFJvbWFuIFppcHBlbC5cbiI7CisKKwlkaWFsb2cgPSBn
dGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93bmQpLAorCQkJCQlHVEtfRElB
TE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsCisJCQkJCUdUS19NRVNTQUdFX0lORk8sCisJCQkJCUdU
S19CVVRUT05TX0NMT1NFLCAiJXMiLCBhYm91dF90ZXh0KTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQoR1RLX09CSkVDVChkaWFsb2cpLCAicmVzcG9uc2UiLAorCQkJCSBHX0NBTExCQUNLKGd0
a193aWRnZXRfZGVzdHJveSksCisJCQkJIEdUS19PQkpFQ1QoZGlhbG9nKSk7CisJZ3RrX3dpZGdl
dF9zaG93X2FsbChkaWFsb2cpOworfQorCisKK3ZvaWQgb25fbGljZW5zZTFfYWN0aXZhdGUoR3Rr
TWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1dpZGdldCAq
ZGlhbG9nOworCWNvbnN0IGdjaGFyICpsaWNlbnNlX3RleHQgPQorCSAgICAiZ2tjIGlzIHJlbGVh
c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi5cbiIKKwkgICAgICAiRm9yIG1v
cmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHNvdXJjZSBjb2RlIG9yXG4iCisJICAgICAg
InZpc2l0IGh0dHA6Ly93d3cuZnNmLm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sXG4iOworCisJ
ZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKG1haW5fd25kKSwKKwkJ
CQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULAorCQkJCQlHVEtfTUVTU0FHRV9JTkZP
LAorCQkJCQlHVEtfQlVUVE9OU19DTE9TRSwgIiVzIiwgbGljZW5zZV90ZXh0KTsKKwlnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVChkaWFsb2cpLCAicmVzcG9uc2UiLAorCQkJCSBH
X0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksCisJCQkJIEdUS19PQkpFQ1QoZGlhbG9nKSk7
CisJZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpOworfQorCisKK3ZvaWQgb25fYmFja19jbGlj
a2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCWVudW0gcHJv
cF90eXBlIHB0eXBlOworCisJY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudDsKKwlwdHlwZSA9IGN1
cnJlbnQtPnByb21wdCA/IGN1cnJlbnQtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKwlpZiAo
cHR5cGUgIT0gUF9NRU5VKQorCQljdXJyZW50ID0gY3VycmVudC0+cGFyZW50OworCWRpc3BsYXlf
dHJlZV9wYXJ0KCk7CisKKwlpZiAoY3VycmVudCA9PSAmcm9vdG1lbnUpCisJCWd0a193aWRnZXRf
c2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOworfQorCisKK3ZvaWQgb25fbG9hZF9jbGlj
a2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCW9uX2xvYWQx
X2FjdGl2YXRlKE5VTEwsIHVzZXJfZGF0YSk7Cit9CisKKwordm9pZCBvbl9zaW5nbGVfY2xpY2tl
ZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwl2aWV3X21vZGUg
PSBTSU5HTEVfVklFVzsKKwlndGtfd2lkZ2V0X2hpZGUodHJlZTFfdyk7CisJY3VycmVudCA9ICZy
b290bWVudTsKKwlkaXNwbGF5X3RyZWVfcGFydCgpOworfQorCisKK3ZvaWQgb25fc3BsaXRfY2xp
Y2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlnaW50IHcs
IGg7CisJdmlld19tb2RlID0gU1BMSVRfVklFVzsKKwlndGtfd2lkZ2V0X3Nob3codHJlZTFfdyk7
CisJZ3RrX3dpbmRvd19nZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cobWFpbl93bmQpLCAmdywg
JmgpOworCWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKGhwYW5lZCksIHcgLyAyKTsK
KwlpZiAodHJlZTIpCisJCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlkaXNwbGF5X2xp
c3QoKTsKKworCS8qIERpc2FibGUgYmFjayBidG4sIGxpa2UgaW4gZnVsbCBtb2RlLiAqLworCWd0
a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOworfQorCisKK3ZvaWQgb25f
ZnVsbF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CXZpZXdfbW9kZSA9IEZVTExfVklFVzsKKwlndGtfd2lkZ2V0X2hpZGUodHJlZTFfdyk7CisJaWYg
KHRyZWUyKQorCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7CisJZGlzcGxheV90cmVlKCZy
b290bWVudSk7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7Cit9
CisKKwordm9pZCBvbl9jb2xsYXBzZV9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQoreworCWd0a190cmVlX3ZpZXdfY29sbGFwc2VfYWxsKEdUS19UUkVFX1ZJ
RVcodHJlZTJfdykpOworfQorCisKK3ZvaWQgb25fZXhwYW5kX2NsaWNrZWQoR3RrQnV0dG9uICog
YnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJZ3RrX3RyZWVfdmlld19leHBhbmRfYWxs
KEdUS19UUkVFX1ZJRVcodHJlZTJfdykpOworfQorCisKKy8qIENUcmVlIENhbGxiYWNrcyAqLwor
CisvKiBDaGFuZ2UgaGV4L2ludC9zdHJpbmcgdmFsdWUgaW4gdGhlIGNlbGwgKi8KK3N0YXRpYyB2
b2lkIHJlbmRlcmVyX2VkaXRlZChHdGtDZWxsUmVuZGVyZXJUZXh0ICogY2VsbCwKKwkJCSAgICBj
b25zdCBnY2hhciAqIHBhdGhfc3RyaW5nLAorCQkJICAgIGNvbnN0IGdjaGFyICogbmV3X3RleHQs
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtUcmVlUGF0aCAqcGF0aCA9IGd0a190cmVlX3Bh
dGhfbmV3X2Zyb21fc3RyaW5nKHBhdGhfc3RyaW5nKTsKKwlHdGtUcmVlSXRlciBpdGVyOworCWNv
bnN0IGNoYXIgKm9sZF9kZWYsICpuZXdfZGVmOworCXN0cnVjdCBtZW51ICptZW51OworCXN0cnVj
dCBzeW1ib2wgKnN5bTsKKworCWlmICghZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAm
aXRlciwgcGF0aCkpCisJCXJldHVybjsKKworCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZp
dGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsKKwlzeW0gPSBtZW51LT5zeW07CisKKwlndGtfdHJl
ZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX1ZBTFVFLCAmb2xkX2RlZiwgLTEpOworCW5l
d19kZWYgPSBuZXdfdGV4dDsKKworCXN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN5bSwgbmV3X2RlZik7
CisKKwl1cGRhdGVfdHJlZSgmcm9vdG1lbnUsIE5VTEwpOworCisJZ3RrX3RyZWVfcGF0aF9mcmVl
KHBhdGgpOworfQorCisvKiBDaGFuZ2UgdGhlIHZhbHVlIG9mIGEgc3ltYm9sIGFuZCB1cGRhdGUg
dGhlIHRyZWUgKi8KK3N0YXRpYyB2b2lkIGNoYW5nZV9zeW1fdmFsdWUoc3RydWN0IG1lbnUgKm1l
bnUsIGdpbnQgY29sKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwl0cmlz
dGF0ZSBuZXd2YWw7CisKKwlpZiAoIXN5bSkKKwkJcmV0dXJuOworCisJaWYgKGNvbCA9PSBDT0xf
Tk8pCisJCW5ld3ZhbCA9IG5vOworCWVsc2UgaWYgKGNvbCA9PSBDT0xfTU9EKQorCQluZXd2YWwg
PSBtb2Q7CisJZWxzZSBpZiAoY29sID09IENPTF9ZRVMpCisJCW5ld3ZhbCA9IHllczsKKwllbHNl
CisJCXJldHVybjsKKworCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkpIHsKKwljYXNlIFNfQk9P
TEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmICghc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5n
ZShzeW0sIG5ld3ZhbCkpCisJCQluZXd2YWwgPSB5ZXM7CisJCXN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCBuZXd2YWwpOworCQlpZiAodmlld19tb2RlID09IEZVTExfVklFVykKKwkJCXVwZGF0
ZV90cmVlKCZyb290bWVudSwgTlVMTCk7CisJCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTUExJVF9W
SUVXKSB7CisJCQl1cGRhdGVfdHJlZShicm93c2VkLCBOVUxMKTsKKwkJCWRpc3BsYXlfbGlzdCgp
OworCQl9CisJCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykKKwkJCWRpc3BsYXlf
dHJlZV9wYXJ0KCk7CS8vZml4bWU6IGtlZXAgZXhwL2NvbGwKKwkJYnJlYWs7CisJY2FzZSBTX0lO
VDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJ
fQorfQorCitzdGF0aWMgdm9pZCB0b2dnbGVfc3ltX3ZhbHVlKHN0cnVjdCBtZW51ICptZW51KQor
eworCWlmICghbWVudS0+c3ltKQorCQlyZXR1cm47CisKKwlzeW1fdG9nZ2xlX3RyaXN0YXRlX3Zh
bHVlKG1lbnUtPnN5bSk7CisJaWYgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpCisJCXVwZGF0ZV90
cmVlKCZyb290bWVudSwgTlVMTCk7CisJZWxzZSBpZiAodmlld19tb2RlID09IFNQTElUX1ZJRVcp
IHsKKwkJdXBkYXRlX3RyZWUoYnJvd3NlZCwgTlVMTCk7CisJCWRpc3BsYXlfbGlzdCgpOworCX0K
KwllbHNlIGlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcpCisJCWRpc3BsYXlfdHJlZV9wYXJ0
KCk7CS8vZml4bWU6IGtlZXAgZXhwL2NvbGwKK30KKworc3RhdGljIGdpbnQgY29sdW1uMmluZGV4
KEd0a1RyZWVWaWV3Q29sdW1uICogY29sdW1uKQoreworCWdpbnQgaTsKKworCWZvciAoaSA9IDA7
IGkgPCBDT0xfTlVNQkVSOyBpKyspIHsKKwkJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbDsKKworCQlj
b2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgaSk7
CisJCWlmIChjb2wgPT0gY29sdW1uKQorCQkJcmV0dXJuIGk7CisJfQorCisJcmV0dXJuIC0xOwor
fQorCisKKy8qIFVzZXIgY2xpY2s6IHVwZGF0ZSBjaG9pY2UgKGZ1bGwpIG9yIGdvZXMgZG93biAo
c2luZ2xlKSAqLworZ2Jvb2xlYW4KK29uX3RyZWV2aWV3Ml9idXR0b25fcHJlc3NfZXZlbnQoR3Rr
V2lkZ2V0ICogd2lkZ2V0LAorCQkJCUdka0V2ZW50QnV0dG9uICogZXZlbnQsIGdwb2ludGVyIHVz
ZXJfZGF0YSkKK3sKKwlHdGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVcod2lkZ2V0KTsK
KwlHdGtUcmVlUGF0aCAqcGF0aDsKKwlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOworCUd0a1Ry
ZWVJdGVyIGl0ZXI7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJZ2ludCBjb2w7CisKKyNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigyLDEsNCkgLy8gYnVnIGluIGN0cmVlIHdpdGggZWFybGllciB2ZXJzaW9u
IG9mIEdUSworCWdpbnQgdHggPSAoZ2ludCkgZXZlbnQtPng7CisJZ2ludCB0eSA9IChnaW50KSBl
dmVudC0+eTsKKwlnaW50IGN4LCBjeTsKKworCWd0a190cmVlX3ZpZXdfZ2V0X3BhdGhfYXRfcG9z
KHZpZXcsIHR4LCB0eSwgJnBhdGgsICZjb2x1bW4sICZjeCwKKwkJCQkgICAgICAmY3kpOworI2Vs
c2UKKwlndGtfdHJlZV92aWV3X2dldF9jdXJzb3IodmlldywgJnBhdGgsICZjb2x1bW4pOworI2Vu
ZGlmCisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIEZBTFNFOworCisJaWYgKCFndGtfdHJl
ZV9tb2RlbF9nZXRfaXRlcihtb2RlbDIsICZpdGVyLCBwYXRoKSkKKwkJcmV0dXJuIEZBTFNFOwor
CWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsK
KworCWNvbCA9IGNvbHVtbjJpbmRleChjb2x1bW4pOworCWlmIChldmVudC0+dHlwZSA9PSBHREtf
MkJVVFRPTl9QUkVTUykgeworCQllbnVtIHByb3BfdHlwZSBwdHlwZTsKKwkJcHR5cGUgPSBtZW51
LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisKKwkJaWYgKHB0eXBl
ID09IFBfTUVOVSAmJiB2aWV3X21vZGUgIT0gRlVMTF9WSUVXICYmIGNvbCA9PSBDT0xfT1BUSU9O
KSB7CisJCQkvLyBnb2VzIGRvd24gaW50byBtZW51CisJCQljdXJyZW50ID0gbWVudTsKKwkJCWRp
c3BsYXlfdHJlZV9wYXJ0KCk7CisJCQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4s
IFRSVUUpOworCQl9IGVsc2UgaWYgKGNvbCA9PSBDT0xfT1BUSU9OKSB7CisJCQl0b2dnbGVfc3lt
X3ZhbHVlKG1lbnUpOworCQkJZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgsIFRS
VUUpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNvbCA9PSBDT0xfVkFMVUUpIHsKKwkJCXRvZ2ds
ZV9zeW1fdmFsdWUobWVudSk7CisJCQlndGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywgcGF0
aCwgVFJVRSk7CisJCX0gZWxzZSBpZiAoY29sID09IENPTF9OTyB8fCBjb2wgPT0gQ09MX01PRAor
CQkJICAgfHwgY29sID09IENPTF9ZRVMpIHsKKwkJCWNoYW5nZV9zeW1fdmFsdWUobWVudSwgY29s
KTsKKwkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBUUlVFKTsKKwkJfQor
CX0KKworCXJldHVybiBGQUxTRTsKK30KKworLyogS2V5IHByZXNzZWQ6IHVwZGF0ZSBjaG9pY2Ug
Ki8KK2dib29sZWFuCitvbl90cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdp
ZGdldCwKKwkJCSAgICAgR2RrRXZlbnRLZXkgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQor
eworCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh3aWRnZXQpOworCUd0a1RyZWVQ
YXRoICpwYXRoOworCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47CisJR3RrVHJlZUl0ZXIgaXRl
cjsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwlnaW50IGNvbDsKKworCWd0a190cmVlX3ZpZXdfZ2V0
X2N1cnNvcih2aWV3LCAmcGF0aCwgJmNvbHVtbik7CisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0
dXJuIEZBTFNFOworCisJaWYgKGV2ZW50LT5rZXl2YWwgPT0gR0RLX3NwYWNlKSB7CisJCWlmIChn
dGtfdHJlZV92aWV3X3Jvd19leHBhbmRlZCh2aWV3LCBwYXRoKSkKKwkJCWd0a190cmVlX3ZpZXdf
Y29sbGFwc2Vfcm93KHZpZXcsIHBhdGgpOworCQllbHNlCisJCQlndGtfdHJlZV92aWV3X2V4cGFu
ZF9yb3codmlldywgcGF0aCwgRkFMU0UpOworCQlyZXR1cm4gVFJVRTsKKwl9CisJaWYgKGV2ZW50
LT5rZXl2YWwgPT0gR0RLX0tQX0VudGVyKSB7CisJfQorCWlmICh3aWRnZXQgPT0gdHJlZTFfdykK
KwkJcmV0dXJuIEZBTFNFOworCisJZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAmaXRl
ciwgcGF0aCk7CisJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAm
bWVudSwgLTEpOworCisJaWYgKCFzdHJjYXNlY21wKGV2ZW50LT5zdHJpbmcsICJuIikpCisJCWNv
bCA9IENPTF9OTzsKKwllbHNlIGlmICghc3RyY2FzZWNtcChldmVudC0+c3RyaW5nLCAibSIpKQor
CQljb2wgPSBDT0xfTU9EOworCWVsc2UgaWYgKCFzdHJjYXNlY21wKGV2ZW50LT5zdHJpbmcsICJ5
IikpCisJCWNvbCA9IENPTF9ZRVM7CisJZWxzZQorCQljb2wgPSAtMTsKKwljaGFuZ2Vfc3ltX3Zh
bHVlKG1lbnUsIGNvbCk7CisKKwlyZXR1cm4gRkFMU0U7Cit9CisKKworLyogUm93IHNlbGVjdGlv
biBjaGFuZ2VkOiB1cGRhdGUgaGVscCAqLwordm9pZAorb25fdHJlZXZpZXcyX2N1cnNvcl9jaGFu
Z2VkKEd0a1RyZWVWaWV3ICogdHJlZXZpZXcsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtU
cmVlU2VsZWN0aW9uICpzZWxlY3Rpb247CisJR3RrVHJlZUl0ZXIgaXRlcjsKKwlzdHJ1Y3QgbWVu
dSAqbWVudTsKKworCXNlbGVjdGlvbiA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbih0cmVl
dmlldyk7CisJaWYgKGd0a190cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQoc2VsZWN0aW9uLCAm
bW9kZWwyLCAmaXRlcikpIHsKKwkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENP
TF9NRU5VLCAmbWVudSwgLTEpOworCQl0ZXh0X2luc2VydF9oZWxwKG1lbnUpOworCX0KK30KKwor
CisvKiBVc2VyIGNsaWNrOiBkaXNwbGF5IHN1Yi10cmVlIGluIHRoZSByaWdodCBmcmFtZS4gKi8K
K2dib29sZWFuCitvbl90cmVldmlldzFfYnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdp
ZGdldCwKKwkJCQlHZGtFdmVudEJ1dHRvbiAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7CisJR3RrVHJlZVBh
dGggKnBhdGg7CisJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKKwlHdGtUcmVlSXRlciBpdGVy
OworCXN0cnVjdCBtZW51ICptZW51OworCisJZ2ludCB0eCA9IChnaW50KSBldmVudC0+eDsKKwln
aW50IHR5ID0gKGdpbnQpIGV2ZW50LT55OworCWdpbnQgY3gsIGN5OworCisJZ3RrX3RyZWVfdmll
d19nZXRfcGF0aF9hdF9wb3ModmlldywgdHgsIHR5LCAmcGF0aCwgJmNvbHVtbiwgJmN4LAorCQkJ
CSAgICAgICZjeSk7CisJaWYgKHBhdGggPT0gTlVMTCkKKwkJcmV0dXJuIEZBTFNFOworCisJZ3Rr
X3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwxLCAmaXRlciwgcGF0aCk7CisJZ3RrX3RyZWVfbW9k
ZWxfZ2V0KG1vZGVsMSwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOworCisJaWYgKGV2ZW50
LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKSB7CisJCXRvZ2dsZV9zeW1fdmFsdWUobWVudSk7
CisJCWN1cnJlbnQgPSBtZW51OworCQlkaXNwbGF5X3RyZWVfcGFydCgpOworCX0gZWxzZSB7CisJ
CWJyb3dzZWQgPSBtZW51OworCQlkaXNwbGF5X3RyZWVfcGFydCgpOworCX0KKworCWd0a193aWRn
ZXRfcmVhbGl6ZSh0cmVlMl93KTsKKwlndGtfdHJlZV92aWV3X3NldF9jdXJzb3IodmlldywgcGF0
aCwgTlVMTCwgRkFMU0UpOworCWd0a193aWRnZXRfZ3JhYl9mb2N1cyh0cmVlMl93KTsKKworCXJl
dHVybiBGQUxTRTsKK30KKworCisvKiBGaWxsIGEgcm93IG9mIHN0cmluZ3MgKi8KK3N0YXRpYyBn
Y2hhciAqKmZpbGxfcm93KHN0cnVjdCBtZW51ICptZW51KQoreworCXN0YXRpYyBnY2hhciAqcm93
W0NPTF9OVU1CRVJdOworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwljb25zdCBj
aGFyICpkZWY7CisJaW50IHN0eXBlOworCXRyaXN0YXRlIHZhbDsKKwllbnVtIHByb3BfdHlwZSBw
dHlwZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IENPTF9PUFRJT047IGkgPD0gQ09MX0NPTE9SOyBp
KyspCisJCWdfZnJlZShyb3dbaV0pOworCWJ6ZXJvKHJvdywgc2l6ZW9mKHJvdykpOworCisJcm93
W0NPTF9PUFRJT05dID0KKwkgICAgZ19zdHJkdXBfcHJpbnRmKCIlcyAlcyIsIG1lbnVfZ2V0X3By
b21wdChtZW51KSwKKwkJCSAgICBzeW0gJiYgIXN5bV9oYXNfdmFsdWUoc3ltKSA/ICIoTkVXKSIg
OiAiIik7CisKKwlpZiAob3B0X21vZGUgPT0gT1BUX0FMTCAmJiAhbWVudV9pc192aXNpYmxlKG1l
bnUpKQorCQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJEYXJrR3JheSIpOworCWVsc2UgaWYg
KG9wdF9tb2RlID09IE9QVF9QUk9NUFQgJiYKKwkJCW1lbnVfaGFzX3Byb21wdChtZW51KSAmJiAh
bWVudV9pc192aXNpYmxlKG1lbnUpKQorCQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJEYXJr
R3JheSIpOworCWVsc2UKKwkJcm93W0NPTF9DT0xPUl0gPSBnX3N0cmR1cCgiQmxhY2siKTsKKwor
CXB0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwor
CXN3aXRjaCAocHR5cGUpIHsKKwljYXNlIFBfTUVOVToKKwkJcm93W0NPTF9QSVhCVUZdID0gKGdj
aGFyICopIHhwbV9tZW51OworCQlpZiAodmlld19tb2RlID09IFNJTkdMRV9WSUVXKQorCQkJcm93
W0NPTF9QSVhWSVNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCQlyb3dbQ09MX0JUTlZJU10g
PSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQlicmVhazsKKwljYXNlIFBfQ09NTUVOVDoKKwkJ
cm93W0NPTF9QSVhCVUZdID0gKGdjaGFyICopIHhwbV92b2lkOworCQlyb3dbQ09MX1BJWFZJU10g
PSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BP
SU5URVIoRkFMU0UpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyb3dbQ09MX1BJWEJVRl0gPSAo
Z2NoYXIgKikgeHBtX3ZvaWQ7CisJCXJvd1tDT0xfUElYVklTXSA9IEdJTlRfVE9fUE9JTlRFUihG
QUxTRSk7CisJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKKwkJYnJl
YWs7CisJfQorCisJaWYgKCFzeW0pCisJCXJldHVybiByb3c7CisJcm93W0NPTF9OQU1FXSA9IGdf
c3RyZHVwKHN5bS0+bmFtZSk7CisKKwlzeW1fY2FsY192YWx1ZShzeW0pOworCXN5bS0+ZmxhZ3Mg
Jj0gflNZTUJPTF9DSEFOR0VEOworCisJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgewkvLyBwYXJz
ZSBjaGlsZHMgZm9yIGdldHRpbmcgZmluYWwgdmFsdWUKKwkJc3RydWN0IG1lbnUgKmNoaWxkOwor
CQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsKKwkJ
c3RydWN0IG1lbnUgKmRlZl9tZW51ID0gTlVMTDsKKworCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5U
X1RPX1BPSU5URVIoRkFMU0UpOworCisJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsg
Y2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkKKwkJ
CSAgICAmJiBjaGlsZC0+c3ltID09IGRlZl9zeW0pCisJCQkJZGVmX21lbnUgPSBjaGlsZDsKKwkJ
fQorCisJCWlmIChkZWZfbWVudSkKKwkJCXJvd1tDT0xfVkFMVUVdID0KKwkJCSAgICBnX3N0cmR1
cChtZW51X2dldF9wcm9tcHQoZGVmX21lbnUpKTsKKwl9CisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1C
T0xfQ0hPSUNFVkFMKQorCQlyb3dbQ09MX0JUTlJBRF0gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7
CisKKwlzdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCXN3aXRjaCAoc3R5cGUpIHsKKwljYXNl
IFNfQk9PTEVBTjoKKwkJaWYgKEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX1BJWFZJU10pID09IEZB
TFNFKQorCQkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCQlpZiAo
c3ltX2lzX2Nob2ljZShzeW0pKQorCQkJYnJlYWs7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNh
c2UgU19UUklTVEFURToKKwkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCQlz
d2l0Y2ggKHZhbCkgeworCQljYXNlIG5vOgorCQkJcm93W0NPTF9OT10gPSBnX3N0cmR1cCgiTiIp
OworCQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cCgiTiIpOworCQkJcm93W0NPTF9CVE5BQ1Rd
ID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsKKwkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9f
UE9JTlRFUihGQUxTRSk7CisJCQlicmVhazsKKwkJY2FzZSBtb2Q6CisJCQlyb3dbQ09MX01PRF0g
PSBnX3N0cmR1cCgiTSIpOworCQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cCgiTSIpOworCQkJ
cm93W0NPTF9CVE5JTkNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCQkJYnJlYWs7CisJCWNh
c2UgeWVzOgorCQkJcm93W0NPTF9ZRVNdID0gZ19zdHJkdXAoIlkiKTsKKwkJCXJvd1tDT0xfVkFM
VUVdID0gZ19zdHJkdXAoIlkiKTsKKwkJCXJvd1tDT0xfQlROQUNUXSA9IEdJTlRfVE9fUE9JTlRF
UihUUlVFKTsKKwkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7CisJ
CQlicmVhazsKKwkJfQorCisJCWlmICh2YWwgIT0gbm8gJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9y
YW5nZShzeW0sIG5vKSkKKwkJCXJvd1tDT0xfTk9dID0gZ19zdHJkdXAoIl8iKTsKKwkJaWYgKHZh
bCAhPSBtb2QgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1vZCkpCisJCQlyb3db
Q09MX01PRF0gPSBnX3N0cmR1cCgiXyIpOworCQlpZiAodmFsICE9IHllcyAmJiBzeW1fdHJpc3Rh
dGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKSkKKwkJCXJvd1tDT0xfWUVTXSA9IGdfc3RyZHVwKCJf
Iik7CisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5H
OgorCQlkZWYgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCQlyb3dbQ09MX1ZBTFVFXSA9
IGdfc3RyZHVwKGRlZik7CisJCXJvd1tDT0xfRURJVF0gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7
CisJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7CisJCWJyZWFrOwor
CX0KKworCXJldHVybiByb3c7Cit9CisKKworLyogU2V0IHRoZSBub2RlIGNvbnRlbnQgd2l0aCBh
IHJvdyBvZiBzdHJpbmdzICovCitzdGF0aWMgdm9pZCBzZXRfbm9kZShHdGtUcmVlSXRlciAqIG5v
ZGUsIHN0cnVjdCBtZW51ICptZW51LCBnY2hhciAqKiByb3cpCit7CisJR2RrQ29sb3IgY29sb3I7
CisJZ2Jvb2xlYW4gc3VjY2VzczsKKwlHZGtQaXhidWYgKnBpeDsKKworCXBpeCA9IGdka19waXhi
dWZfbmV3X2Zyb21feHBtX2RhdGEoKGNvbnN0IGNoYXIgKiopCisJCQkJCSAgIHJvd1tDT0xfUElY
QlVGXSk7CisKKwlnZGtfY29sb3JfcGFyc2Uocm93W0NPTF9DT0xPUl0sICZjb2xvcik7CisJZ2Rr
X2NvbG9ybWFwX2FsbG9jX2NvbG9ycyhnZGtfY29sb3JtYXBfZ2V0X3N5c3RlbSgpLCAmY29sb3Is
IDEsCisJCQkJICBGQUxTRSwgRkFMU0UsICZzdWNjZXNzKTsKKworCWd0a190cmVlX3N0b3JlX3Nl
dCh0cmVlLCBub2RlLAorCQkJICAgQ09MX09QVElPTiwgcm93W0NPTF9PUFRJT05dLAorCQkJICAg
Q09MX05BTUUsIHJvd1tDT0xfTkFNRV0sCisJCQkgICBDT0xfTk8sIHJvd1tDT0xfTk9dLAorCQkJ
ICAgQ09MX01PRCwgcm93W0NPTF9NT0RdLAorCQkJICAgQ09MX1lFUywgcm93W0NPTF9ZRVNdLAor
CQkJICAgQ09MX1ZBTFVFLCByb3dbQ09MX1ZBTFVFXSwKKwkJCSAgIENPTF9NRU5VLCAoZ3BvaW50
ZXIpIG1lbnUsCisJCQkgICBDT0xfQ09MT1IsICZjb2xvciwKKwkJCSAgIENPTF9FRElULCBHUE9J
TlRFUl9UT19JTlQocm93W0NPTF9FRElUXSksCisJCQkgICBDT0xfUElYQlVGLCBwaXgsCisJCQkg
ICBDT0xfUElYVklTLCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9QSVhWSVNdKSwKKwkJCSAgIENP
TF9CVE5WSVMsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTlZJU10pLAorCQkJICAgQ09MX0JU
TkFDVCwgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfQlROQUNUXSksCisJCQkgICBDT0xfQlROSU5D
LCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9CVE5JTkNdKSwKKwkJCSAgIENPTF9CVE5SQUQsIEdQ
T0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTlJBRF0pLAorCQkJICAgLTEpOworCisJZ19vYmplY3Rf
dW5yZWYocGl4KTsKK30KKworCisvKiBBZGQgYSBub2RlIHRvIHRoZSB0cmVlICovCitzdGF0aWMg
dm9pZCBwbGFjZV9ub2RlKHN0cnVjdCBtZW51ICptZW51LCBjaGFyICoqcm93KQoreworCUd0a1Ry
ZWVJdGVyICpwYXJlbnQgPSBwYXJlbnRzW2luZGVudCAtIDFdOworCUd0a1RyZWVJdGVyICpub2Rl
ID0gcGFyZW50c1tpbmRlbnRdOworCisJZ3RrX3RyZWVfc3RvcmVfYXBwZW5kKHRyZWUsIG5vZGUs
IHBhcmVudCk7CisJc2V0X25vZGUobm9kZSwgbWVudSwgcm93KTsKK30KKworCisvKiBGaW5kIGEg
bm9kZSBpbiB0aGUgR1RLKyB0cmVlICovCitzdGF0aWMgR3RrVHJlZUl0ZXIgZm91bmQ7CisKKy8q
CisgKiBGaW5kIGEgbWVudSBpbiB0aGUgR3RrVHJlZSBzdGFydGluZyBhdCBwYXJlbnQuCisgKi8K
K3N0YXRpYyBHdGtUcmVlSXRlciAqZ3RrdHJlZV9pdGVyX2ZpbmRfbm9kZShHdGtUcmVlSXRlciAq
cGFyZW50LAorCQkJCQkgICBzdHJ1Y3QgbWVudSAqdG9maW5kKQoreworCUd0a1RyZWVJdGVyIGl0
ZXI7CisJR3RrVHJlZUl0ZXIgKmNoaWxkID0gJml0ZXI7CisJZ2Jvb2xlYW4gdmFsaWQ7CisJR3Rr
VHJlZUl0ZXIgKnJldDsKKworCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9jaGlsZHJlbiht
b2RlbDIsIGNoaWxkLCBwYXJlbnQpOworCXdoaWxlICh2YWxpZCkgeworCQlzdHJ1Y3QgbWVudSAq
bWVudTsKKworCQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCBjaGlsZCwgNiwgJm1lbnUsIC0x
KTsKKworCQlpZiAobWVudSA9PSB0b2ZpbmQpIHsKKwkJCW1lbWNweSgmZm91bmQsIGNoaWxkLCBz
aXplb2YoR3RrVHJlZUl0ZXIpKTsKKwkJCXJldHVybiAmZm91bmQ7CisJCX0KKworCQlyZXQgPSBn
dGt0cmVlX2l0ZXJfZmluZF9ub2RlKGNoaWxkLCB0b2ZpbmQpOworCQlpZiAocmV0KQorCQkJcmV0
dXJuIHJldDsKKworCQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChtb2RlbDIsIGNo
aWxkKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworCisvKgorICogVXBkYXRlIHRoZSB0cmVl
IGJ5IGFkZGluZy9yZW1vdmluZyBlbnRyaWVzCisgKiBEb2VzIG5vdCBjaGFuZ2Ugb3RoZXIgbm9k
ZXMKKyAqLworc3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJl
ZUl0ZXIgKiBkc3QpCit7CisJc3RydWN0IG1lbnUgKmNoaWxkMTsKKwlHdGtUcmVlSXRlciBpdGVy
LCB0bXA7CisJR3RrVHJlZUl0ZXIgKmNoaWxkMiA9ICZpdGVyOworCWdib29sZWFuIHZhbGlkOwor
CUd0a1RyZWVJdGVyICpzaWJsaW5nOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVu
dSAqbWVudTEsICptZW51MjsKKworCWlmIChzcmMgPT0gJnJvb3RtZW51KQorCQlpbmRlbnQgPSAx
OworCisJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX2NoaWxkcmVuKG1vZGVsMiwgY2hpbGQy
LCBkc3QpOworCWZvciAoY2hpbGQxID0gc3JjLT5saXN0OyBjaGlsZDE7IGNoaWxkMSA9IGNoaWxk
MS0+bmV4dCkgeworCisJCXN5bSA9IGNoaWxkMS0+c3ltOworCisJICAgICAgcmVwYXJzZToKKwkJ
bWVudTEgPSBjaGlsZDE7CisJCWlmICh2YWxpZCkKKwkJCWd0a190cmVlX21vZGVsX2dldChtb2Rl
bDIsIGNoaWxkMiwgQ09MX01FTlUsCisJCQkJCSAgICZtZW51MiwgLTEpOworCQllbHNlCisJCQlt
ZW51MiA9IE5VTEw7CS8vIGZvcmNlIGFkZGluZyBvZiBhIGZpcnN0IGNoaWxkCisKKyNpZmRlZiBE
RUJVRworCQlwcmludGYoIiUqYyVzIHwgJXNcbiIsIGluZGVudCwgJyAnLAorCQkgICAgICAgbWVu
dTEgPyBtZW51X2dldF9wcm9tcHQobWVudTEpIDogIm5pbCIsCisJCSAgICAgICBtZW51MiA/IG1l
bnVfZ2V0X3Byb21wdChtZW51MikgOiAibmlsIik7CisjZW5kaWYKKworCQlpZiAoKG9wdF9tb2Rl
ID09IE9QVF9OT1JNQUwgJiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZDEpKSB8fAorCQkgICAgKG9w
dF9tb2RlID09IE9QVF9QUk9NUFQgJiYgIW1lbnVfaGFzX3Byb21wdChjaGlsZDEpKSB8fAorCQkg
ICAgKG9wdF9tb2RlID09IE9QVF9BTEwgICAgJiYgIW1lbnVfZ2V0X3Byb21wdChjaGlsZDEpKSkg
eworCisJCQkvKiByZW1vdmUgbm9kZSAqLworCQkJaWYgKGd0a3RyZWVfaXRlcl9maW5kX25vZGUo
ZHN0LCBtZW51MSkgIT0gTlVMTCkgeworCQkJCW1lbWNweSgmdG1wLCBjaGlsZDIsIHNpemVvZihH
dGtUcmVlSXRlcikpOworCQkJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVs
MiwKKwkJCQkJCQkJIGNoaWxkMik7CisJCQkJZ3RrX3RyZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAm
dG1wKTsKKwkJCQlpZiAoIXZhbGlkKQorCQkJCQlyZXR1cm47CQkvKiBuZXh0IHBhcmVudCAqLwor
CQkJCWVsc2UKKwkJCQkJZ290byByZXBhcnNlOwkvKiBuZXh0IGNoaWxkICovCisJCQl9IGVsc2UK
KwkJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChtZW51MSAhPSBtZW51MikgeworCQkJaWYgKGd0
a3RyZWVfaXRlcl9maW5kX25vZGUoZHN0LCBtZW51MSkgPT0gTlVMTCkgewkvLyBhZGQgbm9kZQor
CQkJCWlmICghdmFsaWQgJiYgIW1lbnUyKQorCQkJCQlzaWJsaW5nID0gTlVMTDsKKwkJCQllbHNl
CisJCQkJCXNpYmxpbmcgPSBjaGlsZDI7CisJCQkJZ3RrX3RyZWVfc3RvcmVfaW5zZXJ0X2JlZm9y
ZSh0cmVlMiwKKwkJCQkJCQkgICAgIGNoaWxkMiwKKwkJCQkJCQkgICAgIGRzdCwgc2libGluZyk7
CisJCQkJc2V0X25vZGUoY2hpbGQyLCBtZW51MSwgZmlsbF9yb3cobWVudTEpKTsKKwkJCQlpZiAo
bWVudTIgPT0gTlVMTCkKKwkJCQkJdmFsaWQgPSBUUlVFOworCQkJfSBlbHNlIHsJLy8gcmVtb3Zl
IG5vZGUKKwkJCQltZW1jcHkoJnRtcCwgY2hpbGQyLCBzaXplb2YoR3RrVHJlZUl0ZXIpKTsKKwkJ
CQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChtb2RlbDIsCisJCQkJCQkJCSBjaGls
ZDIpOworCQkJCWd0a190cmVlX3N0b3JlX3JlbW92ZSh0cmVlMiwgJnRtcCk7CisJCQkJaWYgKCF2
YWxpZCkKKwkJCQkJcmV0dXJuOwkvLyBuZXh0IHBhcmVudAorCQkJCWVsc2UKKwkJCQkJZ290byBy
ZXBhcnNlOwkvLyBuZXh0IGNoaWxkCisJCQl9CisJCX0gZWxzZSBpZiAoc3ltICYmIChzeW0tPmZs
YWdzICYgU1lNQk9MX0NIQU5HRUQpKSB7CisJCQlzZXRfbm9kZShjaGlsZDIsIG1lbnUxLCBmaWxs
X3JvdyhtZW51MSkpOworCQl9CisKKwkJaW5kZW50Kys7CisJCXVwZGF0ZV90cmVlKGNoaWxkMSwg
Y2hpbGQyKTsKKwkJaW5kZW50LS07CisKKwkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25l
eHQobW9kZWwyLCBjaGlsZDIpOworCX0KK30KKworCisvKiBEaXNwbGF5IHRoZSB3aG9sZSB0cmVl
IChzaW5nbGUvc3BsaXQvZnVsbCB2aWV3KSAqLworc3RhdGljIHZvaWQgZGlzcGxheV90cmVlKHN0
cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCWVudW0gcHJvcF90eXBlIHB0eXBlOwor
CisJaWYgKG1lbnUgPT0gJnJvb3RtZW51KSB7CisJCWluZGVudCA9IDE7CisJCWN1cnJlbnQgPSAm
cm9vdG1lbnU7CisJfQorCisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0KSB7CisJCXByb3AgPSBjaGlsZC0+cHJvbXB0OworCQlzeW0gPSBjaGlsZC0+
c3ltOworCQlwdHlwZSA9IHByb3AgPyBwcm9wLT50eXBlIDogUF9VTktOT1dOOworCisJCWlmIChz
eW0pCisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hBTkdFRDsKKworCQlpZiAoKHZpZXdfbW9k
ZSA9PSBTUExJVF9WSUVXKQorCQkgICAgJiYgIShjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpICYm
ICh0cmVlID09IHRyZWUxKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgodmlld19tb2RlID09IFNQ
TElUX1ZJRVcpICYmIChjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpCisJCSAgICAmJiAodHJlZSA9
PSB0cmVlMikpCisJCQljb250aW51ZTsKKworCQlpZiAoKG9wdF9tb2RlID09IE9QVF9OT1JNQUwg
JiYgbWVudV9pc192aXNpYmxlKGNoaWxkKSkgfHwKKwkJICAgIChvcHRfbW9kZSA9PSBPUFRfUFJP
TVBUICYmIG1lbnVfaGFzX3Byb21wdChjaGlsZCkpIHx8CisJCSAgICAob3B0X21vZGUgPT0gT1BU
X0FMTCAgICAmJiBtZW51X2dldF9wcm9tcHQoY2hpbGQpKSkKKwkJCXBsYWNlX25vZGUoY2hpbGQs
IGZpbGxfcm93KGNoaWxkKSk7CisjaWZkZWYgREVCVUcKKwkJcHJpbnRmKCIlKmMlczogIiwgaW5k
ZW50LCAnICcsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQlwcmludGYoIiVzIiwgY2hpbGQt
PmZsYWdzICYgTUVOVV9ST09UID8gInJvb3RtZW51IHwgIiA6ICIiKTsKKwkJcHJpbnRmKCIlcyIs
IHByb3BfZ2V0X3R5cGVfbmFtZShwdHlwZSkpOworCQlwcmludGYoIiB8ICIpOworCQlpZiAoc3lt
KSB7CisJCQlwcmludGYoIiVzIiwgc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKKwkJCXByaW50
ZigiIHwgIik7CisJCQlwcmludGYoIiVzIiwgZGJnX3N5bV9mbGFncyhzeW0tPmZsYWdzKSk7CisJ
CQlwcmludGYoIlxuIik7CisJCX0gZWxzZQorCQkJcHJpbnRmKCJcbiIpOworI2VuZGlmCisJCWlm
ICgodmlld19tb2RlICE9IEZVTExfVklFVykgJiYgKHB0eXBlID09IFBfTUVOVSkKKwkJICAgICYm
ICh0cmVlID09IHRyZWUyKSkKKwkJCWNvbnRpbnVlOworLyoKKwkJaWYgKCgobWVudSAhPSAmcm9v
dG1lbnUpICYmICEobWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQorCQkgICAgfHwgKHZpZXdfbW9k
ZSA9PSBGVUxMX1ZJRVcpCisJCSAgICB8fCAodmlld19tb2RlID09IFNQTElUX1ZJRVcpKSovCisK
KwkJLyogQ2hhbmdlIHBhbmVkIHBvc2l0aW9uIGlmIHRoZSB2aWV3IGlzIG5vdCBpbiAnc3BsaXQg
bW9kZScgKi8KKwkJaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVyB8fCB2aWV3X21vZGUgPT0g
RlVMTF9WSUVXKSB7CisJCQlndGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRChocGFuZWQp
LCAwKTsKKwkJfQorCisJCWlmICgoKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykgJiYgKG1lbnUt
PmZsYWdzICYgTUVOVV9ST09UKSkKKwkJICAgIHx8ICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQor
CQkgICAgfHwgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSkgeworCQkJaW5kZW50Kys7CisJCQlk
aXNwbGF5X3RyZWUoY2hpbGQpOworCQkJaW5kZW50LS07CisJCX0KKwl9Cit9CisKKy8qIERpc3Bs
YXkgYSBwYXJ0IG9mIHRoZSB0cmVlIHN0YXJ0aW5nIGF0IGN1cnJlbnQgbm9kZSAoc2luZ2xlL3Nw
bGl0IHZpZXcpICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lkKQoreworCWlm
ICh0cmVlMikKKwkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOworCWlmICh2aWV3X21vZGUg
PT0gU0lOR0xFX1ZJRVcpCisJCWRpc3BsYXlfdHJlZShjdXJyZW50KTsKKwllbHNlIGlmICh2aWV3
X21vZGUgPT0gU1BMSVRfVklFVykKKwkJZGlzcGxheV90cmVlKGJyb3dzZWQpOworCWd0a190cmVl
X3ZpZXdfZXhwYW5kX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUyX3cpKTsKK30KKworLyogRGlzcGxh
eSB0aGUgbGlzdCBpbiB0aGUgbGVmdCBmcmFtZSAoc3BsaXQgdmlldykgKi8KK3N0YXRpYyB2b2lk
IGRpc3BsYXlfbGlzdCh2b2lkKQoreworCWlmICh0cmVlMSkKKwkJZ3RrX3RyZWVfc3RvcmVfY2xl
YXIodHJlZTEpOworCisJdHJlZSA9IHRyZWUxOworCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOwor
CWd0a190cmVlX3ZpZXdfZXhwYW5kX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUxX3cpKTsKKwl0cmVl
ID0gdHJlZTI7Cit9CisKK3N0YXRpYyB2b2lkIGZpeHVwX3Jvb3RtZW51KHN0cnVjdCBtZW51ICpt
ZW51KQoreworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlzdGF0aWMgaW50IG1lbnVfY250ID0gMDsK
KworCW1lbnUtPmZsYWdzIHw9IE1FTlVfUk9PVDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaWYgKGNoaWxkLT5wcm9tcHQgJiYgY2hp
bGQtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpIHsKKwkJCW1lbnVfY250Kys7CisJCQlmaXh1cF9y
b290bWVudShjaGlsZCk7CisJCQltZW51X2NudC0tOworCQl9IGVsc2UgaWYgKCFtZW51X2NudCkK
KwkJCWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsKKwl9Cit9CisKKworLyogTWFpbiAqLworaW50IG1h
aW4oaW50IGFjLCBjaGFyICphdltdKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY2hhciAqZW52
OworCWdjaGFyICpnbGFkZV9maWxlOworCisJLyogR1RLIHN0dWZmcyAqLworCWd0a19zZXRfbG9j
YWxlKCk7CisJZ3RrX2luaXQoJmFjLCAmYXYpOworCWdsYWRlX2luaXQoKTsKKworCS8vYWRkX3Bp
eG1hcF9kaXJlY3RvcnkgKFBBQ0tBR0VfREFUQV9ESVIgIi8iIFBBQ0tBR0UgIi9waXhtYXBzIik7
CisJLy9hZGRfcGl4bWFwX2RpcmVjdG9yeSAoUEFDS0FHRV9TT1VSQ0VfRElSICIvcGl4bWFwcyIp
OworCisJLyogRGV0ZXJtaW5lIEdVSSBwYXRoICovCisJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOwor
CWlmIChlbnYpCisJCWdsYWRlX2ZpbGUgPSBnX3N0cmNvbmNhdChlbnYsICIvc2NyaXB0cy9rY29u
ZmlnL2djb25mLmdsYWRlIiwgTlVMTCk7CisJZWxzZSBpZiAoYXZbMF1bMF0gPT0gJy8nKQorCQln
bGFkZV9maWxlID0gZ19zdHJjb25jYXQoYXZbMF0sICIuZ2xhZGUiLCBOVUxMKTsKKwllbHNlCisJ
CWdsYWRlX2ZpbGUgPSBnX3N0cmNvbmNhdChnX2dldF9jdXJyZW50X2RpcigpLCAiLyIsIGF2WzBd
LCAiLmdsYWRlIiwgTlVMTCk7CisKKwkvKiBDb25mIHN0dWZmcyAqLworCWlmIChhYyA+IDEgJiYg
YXZbMV1bMF0gPT0gJy0nKSB7CisJCXN3aXRjaCAoYXZbMV1bMV0pIHsKKwkJY2FzZSAnYSc6CisJ
CQkvL3Nob3dBbGwgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJ3MnOgorCQkJY29uZl9zZXRfbWVz
c2FnZV9jYWxsYmFjayhOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJY2FzZSAnPyc6
CisJCQlwcmludGYoIiVzIFstc10gPGNvbmZpZz5cbiIsIGF2WzBdKTsKKwkJCWV4aXQoMCk7CisJ
CX0KKwkJbmFtZSA9IGF2WzJdOworCX0gZWxzZQorCQluYW1lID0gYXZbMV07CisKKwljb25mX3Bh
cnNlKG5hbWUpOworCWZpeHVwX3Jvb3RtZW51KCZyb290bWVudSk7CisJY29uZl9yZWFkKE5VTEwp
OworCisJLyogTG9hZCB0aGUgaW50ZXJmYWNlIGFuZCBjb25uZWN0IHNpZ25hbHMgKi8KKwlpbml0
X21haW5fd2luZG93KGdsYWRlX2ZpbGUpOworCWluaXRfdHJlZV9tb2RlbCgpOworCWluaXRfbGVm
dF90cmVlKCk7CisJaW5pdF9yaWdodF90cmVlKCk7CisKKwlzd2l0Y2ggKHZpZXdfbW9kZSkgewor
CWNhc2UgU0lOR0xFX1ZJRVc6CisJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7CisJCWJyZWFrOworCWNh
c2UgU1BMSVRfVklFVzoKKwkJZGlzcGxheV9saXN0KCk7CisJCWJyZWFrOworCWNhc2UgRlVMTF9W
SUVXOgorCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsKKwkJYnJlYWs7CisJfQorCisJZ3RrX21h
aW4oKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjb25mX2NoYW5nZWQodm9pZCkK
K3sKKwlib29sIGNoYW5nZWQgPSBjb25mX2dldF9jaGFuZ2VkKCk7CisJZ3RrX3dpZGdldF9zZXRf
c2Vuc2l0aXZlKHNhdmVfYnRuLCBjaGFuZ2VkKTsKKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUo
c2F2ZV9tZW51X2l0ZW0sIGNoYW5nZWQpOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ODNjYgotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUKQEAgLTAsMCArMSw2NjEgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iPz4gPCEtLSotIG1vZGU6IHhtbCAtKi0tPgor
Cis8Z2xhZGUtaW50ZXJmYWNlPgorCis8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5k
b3cxIj4KKyAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorICA8cHJv
cGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVsIENvbmZpZ3Vy
YXRvcjwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lORE9XX1RPUExF
VkVMPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJ
Tl9QT1NfTk9ORTwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+RmFsc2U8L3By
b3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdF93aWR0aCI+NjQwPC9wcm9wZXJ0eT4K
KyAgPHByb3BlcnR5IG5hbWU9ImRlZmF1bHRfaGVpZ2h0Ij40ODA8L3Byb3BlcnR5PgorICA8cHJv
cGVydHkgbmFtZT0icmVzaXphYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9
ImRlc3Ryb3lfd2l0aF9wYXJlbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9
ImRlY29yYXRlZCI+VHJ1ZTwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJza2lwX3Rhc2ti
YXJfaGludCI+RmFsc2U8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0ic2tpcF9wYWdlcl9o
aW50Ij5GYWxzZTwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQiPkdES19X
SU5ET1dfVFlQRV9ISU5UX05PUk1BTDwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJncmF2
aXR5Ij5HREtfR1JBVklUWV9OT1JUSF9XRVNUPC9wcm9wZXJ0eT4KKyAgPHNpZ25hbCBuYW1lPSJk
ZXN0cm95IiBoYW5kbGVyPSJvbl93aW5kb3cxX2Rlc3Ryb3kiIG9iamVjdD0id2luZG93MSIvPgor
ICA8c2lnbmFsIG5hbWU9InNpemVfcmVxdWVzdCIgaGFuZGxlcj0ib25fd2luZG93MV9zaXplX3Jl
cXVlc3QiIG9iamVjdD0idnBhbmVkMSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxMSBK
YW4gMjAwMiAxNjoxNzoxMSBHTVQiLz4KKyAgPHNpZ25hbCBuYW1lPSJkZWxldGVfZXZlbnQiIGhh
bmRsZXI9Im9uX3dpbmRvdzFfZGVsZXRlX2V2ZW50IiBvYmplY3Q9IndpbmRvdzEiIGxhc3RfbW9k
aWZpY2F0aW9uX3RpbWU9IlN1biwgMDkgTWFyIDIwMDMgMTk6NDI6NDYgR01UIi8+CisKKyAgPGNo
aWxkPgorICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJ2Ym94MSI+CisgICAgICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisgICAgICA8cHJvcGVydHkgbmFt
ZT0iaG9tb2dlbmVvdXMiPkZhbHNlPC9wcm9wZXJ0eT4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJz
cGFjaW5nIj4wPC9wcm9wZXJ0eT4KKworICAgICAgPGNoaWxkPgorCTx3aWRnZXQgY2xhc3M9Ikd0
a01lbnVCYXIiIGlkPSJtZW51YmFyMSI+CisJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+CisKKwkgIDxjaGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrTWVudUl0
ZW0iIGlkPSJmaWxlMSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3By
b3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
Pl9GaWxlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+
VHJ1ZTwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a01l
bnUiIGlkPSJmaWxlMV9tZW51Ij4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJsb2FkMSI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAi
IHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2FkIGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fTG9hZDwvcHJvcGVy
dHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fbG9hZDFfYWN0
aXZhdGUiLz4KKwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iTCIgbW9kaWZpZXJzPSJHREtfQ09O
VFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFs
LWNoaWxkPSJpbWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlMzki
PgorCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLW9wZW48L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkg
bmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGln
biI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9w
ZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJv
cGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9j
aGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ic2F2ZTEiPgorCQkgICAgICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZSB0aGUgY29uZmlnIGluIC5j
b25maWc8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0
YWJsZT0ieWVzIj5fU2F2ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vf
dW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0
ZSIgaGFuZGxlcj0ib25fc2F2ZV9hY3RpdmF0ZSIvPgorCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5
PSJTIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4KKwor
CQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4KKwkJCTx3aWRnZXQgY2xhc3M9
Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0MCI+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstc2F2ZTwvcHJv
cGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5PgorCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkg
bmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+
MDwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KKwkJ
CTwvd2lkZ2V0PgorCQkgICAgICA8L2NoaWxkPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGls
ZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0i
IGlkPSJzYXZlX2FzMSI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0i
eWVzIj5TYXZlIHRoZSBjb25maWcgaW4gYSBmaWxlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZSBfYXM8L3Byb3BlcnR5Pgor
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJ
CSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmVfYXMxX2FjdGl2
YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8d2lk
Z2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDEiPgorCQkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3Rr
LXNhdmUtYXM8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9w
cm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJ
CSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5
IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwv
cHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0
PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtT
ZXBhcmF0b3JNZW51SXRlbSIgaWQ9InNlcGFyYXRvcjEiPgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxk
PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIg
aWQ9InF1aXQxIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5f
UXVpdDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0i
b25fcXVpdDFfYWN0aXZhdGUiLz4KKwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iUSIgbW9kaWZp
ZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+CisKKwkJICAgICAgPGNo
aWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIg
aWQ9ImltYWdlNDIiPgorCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXF1aXQ8L3Byb3BlcnR5PgorCQkJ
ICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5
IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGln
biI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5
PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4K
KwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisJCTwvd2lk
Z2V0PgorCSAgICAgIDwvY2hpbGQ+CisJICAgIDwvd2lkZ2V0PgorCSAgPC9jaGlsZD4KKworCSAg
PGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9Im9wdGlvbnMxIj4K
KwkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAg
PHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X09wdGlvbnM8L3Byb3Bl
cnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0
eT4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9Im9wdGlv
bnMxX21lbnUiPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tN
ZW51SXRlbSIgaWQ9InNob3dfbmFtZTEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFu
c2xhdGFibGU9InllcyI+U2hvdyBuYW1lPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfbmFtZTwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAg
ICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8c2ln
bmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zaG93X25hbWUxX2FjdGl2YXRlIi8+CisJ
CSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdl
dCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIgaWQ9InNob3dfcmFuZ2UxIj4KKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkg
bmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgcmFuZ2UgKFkvTS9OKTwvcHJv
cGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
PlNob3cgX3JhbmdlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRl
cmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5G
YWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9
Im9uX3Nob3dfcmFuZ2UxX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxk
PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIg
aWQ9InNob3dfZGF0YTEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwv
cHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9
InllcyI+U2hvdyB2YWx1ZSBvZiB0aGUgb3B0aW9uPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfZGF0YTwvcHJvcGVydHk+
CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAg
ICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zaG93X2RhdGExX2FjdGl2YXRl
Ii8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkgICAg
PHdpZGdldCBjbGFzcz0iR3RrU2VwYXJhdG9yTWVudUl0ZW0iIGlkPSJzZXBhcmF0b3IyIj4KKwkJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgPC93
aWRnZXQ+CisJCSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a1JhZGlvTWVudUl0ZW0iIGlkPSJzZXRfb3B0aW9uX21vZGUxIj4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgbm9ybWFsIG9wdGlvbnM8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5T
aG93IG5vcm1hbCBvcHRpb25zPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVz
ZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0
aXZlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFu
ZGxlcj0ib25fc2V0X29wdGlvbl9tb2RlMV9hY3RpdmF0ZSIvPgorCQkgICAgPC93aWRnZXQ+CisJ
CSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1JhZGlv
TWVudUl0ZW0iIGlkPSJzZXRfb3B0aW9uX21vZGUyIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgYWxsIG9wdGlvbnM8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBfb3B0
aW9uczwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3By
b3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZ3JvdXAiPnNldF9vcHRpb25fbW9kZTE8
L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9z
ZXRfb3B0aW9uX21vZGUyX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxk
PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9NZW51SXRlbSIg
aWQ9InNldF9vcHRpb25fbW9kZTMiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xh
dGFibGU9InllcyI+U2hvdyBhbGwgb3B0aW9ucyB3aXRoIHByb21wdHM8L3Byb3BlcnR5PgorCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBw
cm9tcHQgb3B0aW9uczwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5k
ZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+
RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZ3JvdXAiPnNldF9vcHRp
b25fbW9kZTE8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5k
bGVyPSJvbl9zZXRfb3B0aW9uX21vZGUzX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJ
ICA8L2NoaWxkPgorCisJCTwvd2lkZ2V0PgorCSAgICAgIDwvY2hpbGQ+CisJICAgIDwvd2lkZ2V0
PgorCSAgPC9jaGlsZD4KKworCSAgPGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51
SXRlbSIgaWQ9ImhlbHAxIj4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwv
cHJvcGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9Inll
cyI+X0hlbHA8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5l
Ij5UcnVlPC9wcm9wZXJ0eT4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3Rr
TWVudSIgaWQ9ImhlbHAxX21lbnUiPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFz
cz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9ImludHJvZHVjdGlvbjEiPgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9JbnRyb2R1Y3Rpb248L3Byb3BlcnR5PgorCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAg
ICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2ludHJvZHVjdGlvbjFfYWN0
aXZhdGUiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZyaSwgMTUgTm92IDIwMDIgMjA6MjY6MzAg
R01UIi8+CisJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IkkiIG1vZGlmaWVycz0iR0RLX0NPTlRS
T0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPgorCisJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1j
aGlsZD0iaW1hZ2UiPgorCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQzIj4K
KwkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkJICA8cHJv
cGVydHkgbmFtZT0ic3RvY2siPmd0ay1kaWFsb2ctcXVlc3Rpb248L3Byb3BlcnR5PgorCQkJICA8
cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5h
bWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+
MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5Pgor
CQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJ
ICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hp
bGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0iYWJvdXQxIj4K
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fQWJvdXQ8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2Fib3V0MV9h
Y3RpdmF0ZSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjoz
MCBHTVQiLz4KKwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iQSIgbW9kaWZpZXJzPSJHREtfQ09O
VFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFs
LWNoaWxkPSJpbWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDQi
PgorCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXByb3BlcnRpZXM8L3Byb3BlcnR5PgorCQkJICA8cHJv
cGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9
InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41
PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAg
ICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+
CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ibGljZW5zZTEiPgor
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9MaWNlbnNlPC9wcm9w
ZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9saWNlbnNl
MV9hY3RpdmF0ZSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoy
NjozMCBHTVQiLz4KKworCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4KKwkJ
CTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0NSI+CisJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2Nr
Ij5ndGstanVzdGlmeS1maWxsPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25f
c2l6ZSI+MTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJv
cGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9
InlwYWQiPjA8L3Byb3BlcnR5PgorCQkJPC93aWRnZXQ+CisJCSAgICAgIDwvY2hpbGQ+CisJCSAg
ICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4KKwkgICAgICA8L2NoaWxkPgor
CSAgICA8L3dpZGdldD4KKwkgIDwvY2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tpbmc+CisJICA8
cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0i
ZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8
L3Byb3BlcnR5PgorCTwvcGFja2luZz4KKyAgICAgIDwvY2hpbGQ+CisKKyAgICAgIDxjaGlsZD4K
Kwk8d2lkZ2V0IGNsYXNzPSJHdGtIYW5kbGVCb3giIGlkPSJoYW5kbGVib3gxIj4KKwkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJz
aGFkb3dfdHlwZSI+R1RLX1NIQURPV19PVVQ8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5IG5hbWU9
ImhhbmRsZV9wb3NpdGlvbiI+R1RLX1BPU19MRUZUPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBu
YW1lPSJzbmFwX2VkZ2UiPkdUS19QT1NfVE9QPC9wcm9wZXJ0eT4KKworCSAgPGNoaWxkPgorCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtUb29sYmFyIiBpZD0idG9vbGJhcjEiPgorCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFt
ZT0ib3JpZW50YXRpb24iPkdUS19PUklFTlRBVElPTl9IT1JJWk9OVEFMPC9wcm9wZXJ0eT4KKwkg
ICAgICA8cHJvcGVydHkgbmFtZT0idG9vbGJhcl9zdHlsZSI+R1RLX1RPT0xCQVJfQk9USDwvcHJv
cGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXBzIj5UcnVlPC9wcm9wZXJ0eT4K
KwkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hvd19hcnJvdyI+VHJ1ZTwvcHJvcGVydHk+CisKKwkg
ICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b24x
Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHBy
b3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5Hb2VzIHVwIG9mIG9uZSBs
ZXZlbCAoc2luZ2xlIHZpZXcpPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwi
IHRyYW5zbGF0YWJsZT0ieWVzIj5CYWNrPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0i
dXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InN0b2Nr
X2lkIj5ndGstdW5kbzwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9y
aXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVy
dGljYWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQi
PkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9u
X2JhY2tfY2xpY2tlZCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5
IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21v
Z2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgor
CisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xp
dGVtMSI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisKKwkJICA8Y2hp
bGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjEi
PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAg
ICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAg
PHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAg
PC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRv
biIgaWQ9ImJ1dHRvbjIiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxv
YWQgYSBjb25maWcgZmlsZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0
cmFuc2xhdGFibGU9InllcyI+TG9hZDwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVz
ZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19p
ZCI+Z3RrLW9wZW48L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6
b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRp
Y2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5G
YWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9s
b2FkX2NsaWNrZWQiLz4KKwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dl
bmVvdXMiPlRydWU8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKwor
CSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRv
bjMiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgYSBjb25maWcg
ZmlsZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9
InllcyI+U2F2ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLXNhdmU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVy
dHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zYXZlX2FjdGl2YXRl
Ii8+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5k
Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVl
PC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hp
bGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0ZW0yIj4KKwkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3
aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2c2VwYXJhdG9yMiI+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgIDwvd2lkZ2V0Pgor
CQkgIDwvY2hpbGQ+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFt
ZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5l
b3VzIj5GYWxzZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgorCisJ
ICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9u
NCI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2luZ2xlIHZpZXc8L3By
b3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNp
bmdsZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW1pc3NpbmctaW1h
Z2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRy
dWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVl
PC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJv
cGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zaW5nbGVfY2xp
Y2tlZCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODozOSBH
TVQiLz4KKwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBh
bmQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRy
dWU8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxj
aGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjUiPgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkg
bmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNwbGl0IHZpZXc8L3Byb3BlcnR5Pgor
CQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNwbGl0PC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJ
ICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX3NwbGl0X2NsaWNrZWQiIGxhc3Rf
bW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTQ6Mjg6NDUgR01UIi8+CisJCTwv
d2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwv
cHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3
aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b242Ij4KKwkJICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0
aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5GdWxsIHZpZXc8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkZ1bGw8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVy
dHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1taXNzaW5nLWltYWdlPC9wcm9wZXJ0eT4KKwkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3Bl
cnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFt
ZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fZnVsbF9jbGlja2VkIiBsYXN0X21vZGlmaWNhdGlvbl90
aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE0OjI4OjUwIEdNVCIvPgorCQk8L3dpZGdldD4KKwkJPHBh
Y2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2lu
Zz4KKwkgICAgICA8L2NoaWxkPgorCisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJH
dGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMyI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwv
cHJvcGVydHk+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJh
dG9yIiBpZD0idnNlcGFyYXRvcjMiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdl
dD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5Pgor
CQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdl
dCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjciPgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIg
dHJhbnNsYXRhYmxlPSJ5ZXMiPkNvbGxhcHNlIHRoZSB3aG9sZSB0cmVlIGluIHRoZSByaWdodCBm
cmFtZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9
InllcyI+Q29sbGFwc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJs
aW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1y
ZW1vdmU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwv
cHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9jb2xsYXBz
ZV9jbGlja2VkIi8+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFt
ZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5l
b3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkg
ICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b244
Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHBy
b3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5FeHBhbmQgdGhlIHdob2xl
IHRyZWUgaW4gdGhlIHJpZ2h0IGZyYW1lPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0i
bGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5FeHBhbmQ8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFt
ZT0ic3RvY2tfaWQiPmd0ay1hZGQ8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1w
b3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5k
bGVyPSJvbl9leHBhbmRfY2xpY2tlZCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAg
PHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8
L2NoaWxkPgorCSAgICA8L3dpZGdldD4KKwkgIDwvY2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tp
bmc+CisJICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVy
dHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZmls
bCI+RmFsc2U8L3Byb3BlcnR5PgorCTwvcGFja2luZz4KKyAgICAgIDwvY2hpbGQ+CisKKyAgICAg
IDxjaGlsZD4KKwk8d2lkZ2V0IGNsYXNzPSJHdGtIUGFuZWQiIGlkPSJocGFuZWQxIj4KKwkgIDxw
cm9wZXJ0eSBuYW1lPSJ3aWR0aF9yZXF1ZXN0Ij4xPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9j
dXMiPlRydWU8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4wPC9wcm9w
ZXJ0eT4KKworCSAgPGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRv
dyIgaWQ9InNjcm9sbGVkd2luZG93MSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGlj
eSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJzaGFkb3dfdHlwZSI+R1RLX1NIQURPV19JTjwvcHJvcGVydHk+
CisJICAgICAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9Q
X0xFRlQ8L3Byb3BlcnR5PgorCisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtU
cmVlVmlldyIgaWQ9InRyZWV2aWV3MSI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJoZWFkZXJzX3Zpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJydWxlc19oaW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAg
PHByb3BlcnR5IG5hbWU9InJlb3JkZXJhYmxlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3Bl
cnR5IG5hbWU9ImVuYWJsZV9zZWFyY2giPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8c2lnbmFsIG5h
bWU9ImN1cnNvcl9jaGFuZ2VkIiBoYW5kbGVyPSJvbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQi
IGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTg6MjIgR01UIi8+
CisJCSAgPHNpZ25hbCBuYW1lPSJidXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2
aWV3MV9idXR0b25fcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIg
SmFuIDIwMDMgMTY6MDM6NTIgR01UIi8+CisJCSAgPHNpZ25hbCBuYW1lPSJrZXlfcHJlc3NfZXZl
bnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9rZXlfcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0
aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTY6MTE6NDQgR01UIi8+CisJCTwvd2lkZ2V0Pgor
CSAgICAgIDwvY2hpbGQ+CisJICAgIDwvd2lkZ2V0PgorCSAgICA8cGFja2luZz4KKwkgICAgICA8
cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkg
bmFtZT0icmVzaXplIj5GYWxzZTwvcHJvcGVydHk+CisJICAgIDwvcGFja2luZz4KKwkgIDwvY2hp
bGQ+CisKKwkgIDxjaGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlBhbmVkIiBpZD0idnBh
bmVkMSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pgor
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MDwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+
CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cy
Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHBy
b3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJv
cGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZ
X0FVVE9NQVRJQzwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBlIj5H
VEtfU0hBRE9XX0lOPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0id2luZG93X3BsYWNl
bWVudCI+R1RLX0NPUk5FUl9UT1BfTEVGVDwvcHJvcGVydHk+CisKKwkJICA8Y2hpbGQ+CisJCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtUcmVlVmlldyIgaWQ9InRyZWV2aWV3MiI+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJoYXNfZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iaGVh
ZGVyc192aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJ1
bGVzX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJlb3Jk
ZXJhYmxlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVf
c2VhcmNoIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iY3Vyc29yX2No
YW5nZWQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9jdXJzb3JfY2hhbmdlZCIgbGFzdF9tb2RpZmlj
YXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNTo1Nzo1NSBHTVQiLz4KKwkJICAgICAgPHNp
Z25hbCBuYW1lPSJidXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9idXR0
b25fcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMg
MTU6NTc6NTggR01UIi8+CisJCSAgICAgIDxzaWduYWwgbmFtZT0ia2V5X3ByZXNzX2V2ZW50IiBo
YW5kbGVyPSJvbl90cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90
aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE1OjU4OjAxIEdNVCIvPgorCQkgICAgPC93aWRnZXQ+CisJ
CSAgPC9jaGlsZD4KKwkJPC93aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJzaHJpbmsiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPkZh
bHNlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8
Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3
aW5kb3czIj4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJ
CSAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX05FVkVSPC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJ
Q1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUi
PkdUS19TSEFET1dfSU48L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxh
Y2VtZW50Ij5HVEtfQ09STkVSX1RPUF9MRUZUPC9wcm9wZXJ0eT4KKworCQkgIDxjaGlsZD4KKwkJ
ICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RleHRWaWV3IiBpZD0idGV4dHZpZXczIj4KKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9ImVkaXRhYmxlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJv
dmVyd3JpdGUiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjY2Vw
dHNfdGFiIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imp1c3RpZmlj
YXRpb24iPkdUS19KVVNUSUZZX0xFRlQ8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0id3JhcF9tb2RlIj5HVEtfV1JBUF9XT1JEPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImN1cnNvcl92aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9InBpeGVsc19hYm92ZV9saW5lcyI+MDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJwaXhlbHNfYmVsb3dfbGluZXMiPjA8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0icGl4ZWxzX2luc2lkZV93cmFwIj4wPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9ImxlZnRfbWFyZ2luIj4wPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9InJpZ2h0X21hcmdpbiI+MDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJp
bmRlbnQiPjA8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPlNvcnJ5LCBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRpb24geWV0
LjwvcHJvcGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4K
KwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2lu
Zz4KKwkgICAgICA8L2NoaWxkPgorCSAgICA8L3dpZGdldD4KKwkgICAgPHBhY2tpbmc+CisJICAg
ICAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAgPHByb3Bl
cnR5IG5hbWU9InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+CisJICAgIDwvcGFja2luZz4KKwkgIDwv
Y2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tpbmc+CisJICA8cHJvcGVydHkgbmFtZT0icGFkZGlu
ZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5UcnVlPC9wcm9wZXJ0
eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5UcnVlPC9wcm9wZXJ0eT4KKwk8L3BhY2tpbmc+
CisgICAgICA8L2NoaWxkPgorICAgIDwvd2lkZ2V0PgorICA8L2NoaWxkPgorPC93aWRnZXQ+CisK
KzwvZ2xhZGUtaW50ZXJmYWNlPgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2VzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYjRmYTBlNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvaW1hZ2VzLmMKQEAgLTAsMCArMSwzMjggQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlw
cGVsQGxpbnV4LW02OGsub3JnPgorICovCisKKyNpbmNsdWRlICJpbWFnZXMuaCIKKworY29uc3Qg
Y2hhciAqeHBtX2xvYWRbXSA9IHsKKyIyMiAyMiA1IDEiLAorIi4gYyBOb25lIiwKKyIjIGMgIzAw
MDAwMCIsCisiYyBjICM4MzgxMDAiLAorImEgYyAjZmZmZjAwIiwKKyJiIGMgI2ZmZmZmZiIsCisi
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uIyMjIy4uLi4jLiIsCisiLi4uLi4u
Li4uLi4jLi4uLiMjLiMjLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uIyMjLiIsCisiLi4uLi4uLi4u
Li4uLi4uLi4jIyMjLiIsCisiLiMjIyMuLi4uLi4uLi4uLiMjIyMjLiIsCisiI2FiYWIjIyMjIyMj
IyMjLi4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCisiI2FiYWJhYmFiYWJhYmEj
Li4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCisiI2FiYWJhYiMjIyMjIyMjIyMj
IyMjIyIsCisiI2JhYmFiIyNjY2NjY2NjY2NjY2MjIyIsCisiI2FiYWIjI2NjY2NjY2NjY2NjYyMj
LiIsCisiI2JhYiMjY2NjY2NjY2NjY2NjIyMuLiIsCisiI2FiIyNjY2NjY2NjY2NjY2MjIy4uLiIs
CisiI2IjI2NjY2NjY2NjY2NjYyMjLi4uLiIsCisiIyMjY2NjY2NjY2NjY2NjIyMuLi4uLiIsCisi
IyNjY2NjY2NjY2NjY2MjIy4uLi4uLiIsCisiIyMjIyMjIyMjIyMjIyMjLi4uLi4uLiIsCisiLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBjaGFyICp4cG1fc2F2ZVtdID0geworIjIy
IDIyIDUgMSIsCisiLiBjIE5vbmUiLAorIiMgYyAjMDAwMDAwIiwKKyJhIGMgIzgzODEwMCIsCisi
YiBjICNjNWMyYzUiLAorImMgYyAjY2RiNmQ1IiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwK
KyIuIyMjIyMjIyMjIyMjIyMjIyMjIyMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNiYiMuIiwKKyIu
I2FhI2JiYmJiYmJiYmJiYiNiYiMuIiwKKyIuI2FhI2JiYmJiYmJiYmNiYiMjIyMuIiwKKyIuI2Fh
I2JiYmNjYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmNjYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2Ji
YmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJi
YmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMj
IyMjI2FhYSMuIiwKKyIuI2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwKKyIuI2FhYWFhYWFhYWFhYWFh
YWFhYSMuIiwKKyIuI2FhYSMjIyMjIyMjIyMjIyNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNh
YSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMu
IiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwK
KyIuLiMjIyMjIyMjIyMjIyMjIyMjIy4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisK
K2NvbnN0IGNoYXIgKnhwbV9iYWNrW10gPSB7CisiMjIgMjIgMyAxIiwKKyIuIGMgTm9uZSIsCisi
IyBjICMwMDAwODMiLAorImEgYyAjODM4MTgzIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwK
KyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4u
Li4uLi4uLiMjIyMjI2EuLi4uIiwKKyIuLiMuLi4uLi4jIyMjIyMjIyMjLi4uIiwKKyIuLiMjLi4u
IyMjIy4uLi4uLiMjYS4uIiwKKyIuLiMjIy4jIyMuLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIy4u
Li4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjLi4uLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIy4uLi4u
Li4uLi4jIy4uIiwKKyIuLiMjIyMjIyMuLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIyMjLi4uLi4u
LiMjYS4uIiwKKyIuLi4uLi4uLi4uLi4uLi5hIyMjLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4jIyMu
Li4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwK
KyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisK
K2NvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXSA9IHsKKyIyMiAyMiAyIDEiLAorIi4gYyBOb25l
IiwKKyIjIGMgIzAwMDAwMCIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4u
Li4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4u
Li4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMuLi4u
Li4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4u
LiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIs
CisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsCisi
Li4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4u
Li4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4u
Iy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsCisiLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBjaGFy
ICp4cG1fc2luZ2xlX3ZpZXdbXSA9IHsKKyIyMiAyMiAyIDEiLAorIi4gYyBOb25lIiwKKyIjIGMg
IzAwMDAwMCIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIs
CisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisi
Li4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4u
Li4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4u
Li4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4u
LiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMu
Li4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4u
Li4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBjaGFyICp4cG1fc3Bs
aXRfdmlld1tdID0geworIjIyIDIyIDIgMSIsCisiLiBjIE5vbmUiLAorIiMgYyAjMDAwMDAwIiwK
KyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIu
Li4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4u
Li4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4u
Iy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4u
Li4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4u
Li4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4u
IiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwK
KyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisKK2NvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXSA9
IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAg
ICAiLAorIiAuLi4uLi4uLi4uICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAor
IiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAg
ICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuLi4uLi4uLi4u
ICIsCisiICAgICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbW9kW10gPSB7
CisiMTIgMTIgMiAxIiwKKyIgIGMgd2hpdGUiLAorIi4gYyBibGFjayIsCisiICAgICAgICAgICAg
IiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIg
LiAgIC4uICAgLiAiLAorIiAuICAuLi4uICAuICIsCisiIC4gIC4uLi4gIC4gIiwKKyIgLiAgIC4u
ICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLi4uLi4uLi4uLiAi
LAorIiAgICAgICAgICAgICJ9OworCitjb25zdCBjaGFyICp4cG1fc3ltYm9sX3llc1tdID0gewor
IjEyIDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAgICIs
CisiIC4uLi4uLi4uLi4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4g
ICAgICAuIC4gIiwKKyIgLiAgICAgLi4gLiAiLAorIiAuIC4gIC4uICAuICIsCisiIC4gLi4uLiAg
IC4gIiwKKyIgLiAgLi4gICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4uLi4uLi4uLi4gIiwK
KyIgICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdID0geworIjEy
IDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAgICIsCisi
ICAgIC4uLi4gICAgIiwKKyIgIC4uICAgIC4uICAiLAorIiAgLiAgICAgIC4gICIsCisiIC4gICAg
ICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4g
IiwKKyIgIC4gICAgICAuICAiLAorIiAgLi4gICAgLi4gICIsCisiICAgIC4uLi4gICAgIiwKKyIg
ICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX2Nob2ljZV95ZXNbXSA9IHsKKyIxMiAx
MiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAg
ICAuLi4uICAgICIsCisiICAuLiAgICAuLiAgIiwKKyIgIC4gICAgICAuICAiLAorIiAuICAgLi4g
ICAuICIsCisiIC4gIC4uLi4gIC4gIiwKKyIgLiAgLi4uLiAgLiAiLAorIiAuICAgLi4gICAuICIs
CisiICAuICAgICAgLiAgIiwKKyIgIC4uICAgIC4uICAiLAorIiAgICAuLi4uICAgICIsCisiICAg
ICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9tZW51W10gPSB7CisiMTIgMTIgMiAxIiwK
KyIgIGMgd2hpdGUiLAorIi4gYyBibGFjayIsCisiICAgICAgICAgICAgIiwKKyIgLi4uLi4uLi4u
LiAiLAorIiAuICAgICAgICAuICIsCisiIC4gLi4gICAgIC4gIiwKKyIgLiAuLi4uICAgLiAiLAor
IiAuIC4uLi4uLiAuICIsCisiIC4gLi4uLi4uIC4gIiwKKyIgLiAuLi4uICAgLiAiLAorIiAuIC4u
ICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAgICAgICAgICAg
ICJ9OworCitjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAg
YyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAuLi4uLi4uLi4uICIs
CisiIC4uLi4uLi4uLi4gIiwKKyIgLi4gIC4uLi4uLiAiLAorIiAuLiAgICAuLi4uICIsCisiIC4u
ICAgICAgLi4gIiwKKyIgLi4gICAgICAuLiAiLAorIiAuLiAgICAuLi4uICIsCisiIC4uICAuLi4u
Li4gIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuLi4uLi4uLi4uICIsCisiICAgICAgICAgICAgIn07
CisKK2NvbnN0IGNoYXIgKnhwbV9tZW51YmFja1tdID0geworIjEyIDEyIDIgMSIsCisiICBjIHdo
aXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAgICIsCisiIC4uLi4uLi4uLi4gIiwKKyIg
LiAgICAgICAgLiAiLAorIiAuICAgICAuLiAuICIsCisiIC4gICAuLi4uIC4gIiwKKyIgLiAuLi4u
Li4gLiAiLAorIiAuIC4uLi4uLiAuICIsCisiIC4gICAuLi4uIC4gIiwKKyIgLiAgICAgLi4gLiAi
LAorIiAuICAgICAgICAuICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgICAgICAgICAgICAifTsKKwor
Y29uc3QgY2hhciAqeHBtX3ZvaWRbXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisi
LiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAg
ICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIiwK
KyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIiwKKyIgICAg
ICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAgICAgICAgICAgIn07CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFn
ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOGZmNjE0Ci0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuaApAQCAtMCwwICsxLDMzIEBA
CisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworCisj
aWZuZGVmIElNQUdFU19ICisjZGVmaW5lIElNQUdFU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9sb2FkW107Citl
eHRlcm4gY29uc3QgY2hhciAqeHBtX3NhdmVbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fYmFj
a1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXTsKK2V4dGVybiBjb25zdCBj
aGFyICp4cG1fc2luZ2xlX3ZpZXdbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fc3BsaXRfdmll
d1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXTsKK2V4dGVybiBjb25zdCBj
aGFyICp4cG1fc3ltYm9sX21vZFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfeWVz
W107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdOworZXh0ZXJuIGNvbnN0IGNo
YXIgKnhwbV9jaG9pY2VfeWVzW107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX21lbnVbXTsKK2V4
dGVybiBjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1f
bWVudWJhY2tbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fdm9pZFtdOworCisjaWZkZWYgX19j
cGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogSU1BR0VTX0ggKi8KZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIu
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzU0YzkwCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sCkBAIC0wLDAgKzEsNDcxIEBACisv
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworJW9wdGlv
biBub3N0ZGluaXQgbm95eXdyYXAgbmV2ZXItaW50ZXJhY3RpdmUgZnVsbCBlY3MKKyVvcHRpb24g
OGJpdCBub2RlZmF1bHQgeXlsaW5lbm8KKyV4IEFTU0lHTl9WQUwgSEVMUCBTVFJJTkcKKyV7CisK
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorCisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAicGFyc2VyLnRhYi5oIgor
CisjZGVmaW5lIFlZX0RFQ0wJCXN0YXRpYyBpbnQgeXlsZXgxKHZvaWQpCisKKyNkZWZpbmUgU1RB
UlRfU1RSU0laRQkxNgorCitzdGF0aWMgc3RydWN0IHsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlp
bnQgbGluZW5vOworfSBjdXJyZW50X3BvczsKKworc3RhdGljIGludCBwcmV2X3ByZXZfdG9rZW4g
PSBUX0VPTDsKK3N0YXRpYyBpbnQgcHJldl90b2tlbiA9IFRfRU9MOworc3RhdGljIGNoYXIgKnRl
eHQ7CitzdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6ZTsKKworc3RydWN0IGJ1ZmZlciB7
CisJc3RydWN0IGJ1ZmZlciAqcGFyZW50OworCVlZX0JVRkZFUl9TVEFURSBzdGF0ZTsKK307CisK
K3N0cnVjdCBidWZmZXIgKmN1cnJlbnRfYnVmOworCitzdGF0aWMgaW50IGxhc3RfdHMsIGZpcnN0
X3RzOworCitzdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIgKmluLCBzaXplX3Qg
bik7CitzdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKTsK
K3N0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCk7CitzdGF0aWMgdm9pZCB6Y29uZl9lbmRm
aWxlKHZvaWQpOworCitzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpCit7CisJdGV4dCA9IHht
YWxsb2MoU1RBUlRfU1RSU0laRSk7CisJdGV4dF9hc2l6ZSA9IFNUQVJUX1NUUlNJWkU7CisJdGV4
dF9zaXplID0gMDsKKwkqdGV4dCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmco
Y29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwlpbnQgbmV3X3NpemUgPSB0ZXh0X3NpemUg
KyBzaXplICsgMTsKKwlpZiAobmV3X3NpemUgPiB0ZXh0X2FzaXplKSB7CisJCW5ld19zaXplICs9
IFNUQVJUX1NUUlNJWkUgLSAxOworCQluZXdfc2l6ZSAmPSAtU1RBUlRfU1RSU0laRTsKKwkJdGV4
dCA9IHhyZWFsbG9jKHRleHQsIG5ld19zaXplKTsKKwkJdGV4dF9hc2l6ZSA9IG5ld19zaXplOwor
CX0KKwltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBzaXplKTsKKwl0ZXh0X3NpemUgKz0g
c2l6ZTsKKwl0ZXh0W3RleHRfc2l6ZV0gPSAwOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19zdHJp
bmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwl0ZXh0ID0geG1hbGxvYyhzaXplICsg
MSk7CisJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7CisJdGV4dFtzaXplXSA9IDA7Cit9CisKK3N0
YXRpYyB2b2lkIHdhcm5faWdub3JlZF9jaGFyYWN0ZXIoY2hhciBjaHIpCit7CisJZnByaW50Zihz
dGRlcnIsCisJICAgICAgICAiJXM6JWQ6d2FybmluZzogaWdub3JpbmcgdW5zdXBwb3J0ZWQgY2hh
cmFjdGVyICclYydcbiIsCisJICAgICAgICBjdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vLCBj
aHIpOworfQorJX0KKworbglbQS1aYS16MC05Xy1dCisKKyUlCisJaW50IHN0ciA9IDA7CisJaW50
IHRzLCBpOworCisjLioJCQkvKiBpZ25vcmUgY29tbWVudCAqLworWyBcdF0qCQkJLyogd2hpdGVz
cGFjZXMgKi8KK1xcXG4JCQkvKiBlc2NhcGVkIG5ldyBsaW5lICovCitcbgkJCXJldHVybiBUX0VP
TDsKKyJhbGxub2NvbmZpZ195IgkJcmV0dXJuIFRfQUxMTk9DT05GSUdfWTsKKyJib29sIgkJCXJl
dHVybiBUX0JPT0w7CisiY2hvaWNlIgkJcmV0dXJuIFRfQ0hPSUNFOworImNvbW1lbnQiCQlyZXR1
cm4gVF9DT01NRU5UOworImNvbmZpZyIJCXJldHVybiBUX0NPTkZJRzsKKyJkZWZfYm9vbCIJCXJl
dHVybiBUX0RFRl9CT09MOworImRlZl90cmlzdGF0ZSIJCXJldHVybiBUX0RFRl9UUklTVEFURTsK
KyJkZWZhdWx0IgkJcmV0dXJuIFRfREVGQVVMVDsKKyJkZWZjb25maWdfbGlzdCIJcmV0dXJuIFRf
REVGQ09ORklHX0xJU1Q7CisiZGVwZW5kcyIJCXJldHVybiBUX0RFUEVORFM7CisiZW5kY2hvaWNl
IgkJcmV0dXJuIFRfRU5EQ0hPSUNFOworImVuZGlmIgkJCXJldHVybiBUX0VORElGOworImVuZG1l
bnUiCQlyZXR1cm4gVF9FTkRNRU5VOworImhlbHAifCItLS1oZWxwLS0tIglyZXR1cm4gVF9IRUxQ
OworImhleCIJCQlyZXR1cm4gVF9IRVg7CisiaWYiCQkJcmV0dXJuIFRfSUY7CisiaW1wbHkiCQkJ
cmV0dXJuIFRfSU1QTFk7CisiaW50IgkJCXJldHVybiBUX0lOVDsKKyJtYWlubWVudSIJCXJldHVy
biBUX01BSU5NRU5VOworIm1lbnUiCQkJcmV0dXJuIFRfTUVOVTsKKyJtZW51Y29uZmlnIgkJcmV0
dXJuIFRfTUVOVUNPTkZJRzsKKyJtb2R1bGVzIgkJcmV0dXJuIFRfTU9EVUxFUzsKKyJvbiIJCQly
ZXR1cm4gVF9PTjsKKyJvcHRpb24iCQlyZXR1cm4gVF9PUFRJT047Cisib3B0aW9uYWwiCQlyZXR1
cm4gVF9PUFRJT05BTDsKKyJwcm9tcHQiCQlyZXR1cm4gVF9QUk9NUFQ7CisicmFuZ2UiCQkJcmV0
dXJuIFRfUkFOR0U7Cisic2VsZWN0IgkJcmV0dXJuIFRfU0VMRUNUOworInNvdXJjZSIJCXJldHVy
biBUX1NPVVJDRTsKKyJzdHJpbmciCQlyZXR1cm4gVF9TVFJJTkc7CisidHJpc3RhdGUiCQlyZXR1
cm4gVF9UUklTVEFURTsKKyJ2aXNpYmxlIgkJcmV0dXJuIFRfVklTSUJMRTsKKyJ8fCIJCQlyZXR1
cm4gVF9PUjsKKyImJiIJCQlyZXR1cm4gVF9BTkQ7CisiPSIJCQlyZXR1cm4gVF9FUVVBTDsKKyIh
PSIJCQlyZXR1cm4gVF9VTkVRVUFMOworIjwiCQkJcmV0dXJuIFRfTEVTUzsKKyI8PSIJCQlyZXR1
cm4gVF9MRVNTX0VRVUFMOworIj4iCQkJcmV0dXJuIFRfR1JFQVRFUjsKKyI+PSIJCQlyZXR1cm4g
VF9HUkVBVEVSX0VRVUFMOworIiEiCQkJcmV0dXJuIFRfTk9UOworIigiCQkJcmV0dXJuIFRfT1BF
Tl9QQVJFTjsKKyIpIgkJCXJldHVybiBUX0NMT1NFX1BBUkVOOworIjo9IgkJCXJldHVybiBUX0NP
TE9OX0VRVUFMOworIis9IgkJCXJldHVybiBUX1BMVVNfRVFVQUw7CitcInxcJwkJCXsKKwkJCQlz
dHIgPSB5eXRleHRbMF07CisJCQkJbmV3X3N0cmluZygpOworCQkJCUJFR0lOKFNUUklORyk7CisJ
CQl9Cit7bn0rCQkJeworCQkJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCQkJeXls
dmFsLnN0cmluZyA9IHRleHQ7CisJCQkJcmV0dXJuIFRfV09SRDsKKwkJCX0KKyh7bn18JCkrCQl7
CisJCQkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgJyQnICovCisJCQkJeXls
dmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRleHQsIHl5bGVuZyk7CisJCQkJaWYgKHN0cmxl
bih5eWx2YWwuc3RyaW5nKSkKKwkJCQkJcmV0dXJuIFRfV09SRDsKKwkJCQlmcmVlKHl5bHZhbC5z
dHJpbmcpOworCQkJfQorLgkJCXdhcm5faWdub3JlZF9jaGFyYWN0ZXIoKnl5dGV4dCk7CisKKzxB
U1NJR05fVkFMPnsKKwlbXls6Ymxhbms6XVxuXSsuKgl7CisJCWFsbG9jX3N0cmluZyh5eXRleHQs
IHl5bGVuZyk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9BU1NJR05fVkFM
OworCX0KKwlcbgl7IEJFR0lOKElOSVRJQUwpOyByZXR1cm4gVF9FT0w7IH0KKwkuCit9CisKKzxT
VFJJTkc+eworCSIkIi4qCWFwcGVuZF9leHBhbmRlZF9zdHJpbmcoeXl0ZXh0KTsKKwlbXiQnIlxc
XG5dKwl7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCX0KKwlcXC4/CXsKKwkJ
YXBwZW5kX3N0cmluZyh5eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsKKwl9CisJXCd8XCIJeworCQlp
ZiAoc3RyID09IHl5dGV4dFswXSkgeworCQkJQkVHSU4oSU5JVElBTCk7CisJCQl5eWx2YWwuc3Ry
aW5nID0gdGV4dDsKKwkJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJCX0gZWxzZQorCQkJYXBwZW5k
X3N0cmluZyh5eXRleHQsIDEpOworCX0KKwlcbgl7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiVz
OiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5ncyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJemNv
bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJCXVucHV0KCdcbicpOworCQlCRUdJTihJ
TklUSUFMKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkRfUVVPVEU7
CisJfQorCTw8RU9GPj4JeworCQlCRUdJTihJTklUSUFMKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRl
eHQ7CisJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJfQorfQorCis8SEVMUD57CisJWyBcdF0rCXsK
KwkJdHMgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgeXlsZW5nOyBpKyspIHsKKwkJCWlmICh5eXRl
eHRbaV0gPT0gJ1x0JykKKwkJCQl0cyA9ICh0cyAmIH43KSArIDg7CisJCQllbHNlCisJCQkJdHMr
KzsKKwkJfQorCQlsYXN0X3RzID0gdHM7CisJCWlmIChmaXJzdF90cykgeworCQkJaWYgKHRzIDwg
Zmlyc3RfdHMpIHsKKwkJCQl6Y29uZl9lbmRoZWxwKCk7CisJCQkJcmV0dXJuIFRfSEVMUFRFWFQ7
CisJCQl9CisJCQl0cyAtPSBmaXJzdF90czsKKwkJCXdoaWxlICh0cyA+IDgpIHsKKwkJCQlhcHBl
bmRfc3RyaW5nKCIgICAgICAgICIsIDgpOworCQkJCXRzIC09IDg7CisJCQl9CisJCQlhcHBlbmRf
c3RyaW5nKCIgICAgICAgICIsIHRzKTsKKwkJfQorCX0KKwlbIFx0XSpcbi9bXiBcdFxuXSB7CisJ
CXpjb25mX2VuZGhlbHAoKTsKKwkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJfQorCVsgXHRdKlxuCXsK
KwkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsKKwl9CisJW14gXHRcbl0uKiB7CisJCXdoaWxlICh5
eWxlbmcpIHsKKwkJCWlmICgoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnICcpICYmICh5eXRleHRbeXls
ZW5nLTFdICE9ICdcdCcpKQorCQkJCWJyZWFrOworCQkJeXlsZW5nLS07CisJCX0KKwkJYXBwZW5k
X3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCWlmICghZmlyc3RfdHMpCisJCQlmaXJzdF90cyA9
IGxhc3RfdHM7CisJfQorCTw8RU9GPj4JeworCQl6Y29uZl9lbmRoZWxwKCk7CisJCXJldHVybiBU
X0hFTFBURVhUOworCX0KK30KKworPDxFT0Y+Pgl7CisJQkVHSU4oSU5JVElBTCk7CisKKwlpZiAo
cHJldl90b2tlbiAhPSBUX0VPTCAmJiBwcmV2X3Rva2VuICE9IFRfSEVMUFRFWFQpCisJCWZwcmlu
dGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogbm8gbmV3IGxpbmUgYXQgZW5kIG9mIGZpbGVcbiIs
CisJCQljdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vKTsKKworCWlmIChjdXJyZW50X2ZpbGUp
IHsKKwkJemNvbmZfZW5kZmlsZSgpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCWZjbG9zZSh5eWlu
KTsKKwl5eXRlcm1pbmF0ZSgpOworfQorCislJQorCisvKiBzZWNvbmQgc3RhZ2UgbGV4ZXIgKi8K
K2ludCB5eWxleCh2b2lkKQoreworCWludCB0b2tlbjsKKworcmVwZWF0OgorCXRva2VuID0geXls
ZXgxKCk7CisKKwlpZiAocHJldl90b2tlbiA9PSBUX0VPTCB8fCBwcmV2X3Rva2VuID09IFRfSEVM
UFRFWFQpIHsKKwkJaWYgKHRva2VuID09IFRfRU9MKSB7CisJCQkvKiBEbyBub3QgcGFzcyB1bm5l
ZWRlZCBUX0VPTCB0byB0aGUgcGFyc2VyLiAqLworCQkJZ290byByZXBlYXQ7CisJCX0gZWxzZSB7
CisJCQkvKgorCQkJICogRm9yIHRoZSBwYXJzZXIsIHVwZGF0ZSBmaWxlL2xpbmVubyBhdCB0aGUg
Zmlyc3QgdG9rZW4KKwkJCSAqIG9mIGVhY2ggc3RhdGVtZW50LiBHZW5lcmFsbHksIFxuIGlzIGEg
c3RhdGVtZW50CisJCQkgKiB0ZXJtaW5hdG9yIGluIEtjb25maWcsIGJ1dCBpdCBpcyBub3QgYWx3
YXlzIHRydWUKKwkJCSAqIGJlY2F1c2UgXG4gY291bGQgYmUgZXNjYXBlZCBieSBhIGJhY2tzbGFz
aC4KKwkJCSAqLworCQkJY3VycmVudF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwkJCWN1cnJl
bnRfcG9zLmxpbmVubyA9IHl5bGluZW5vOworCQl9CisJfQorCisJaWYgKHByZXZfcHJldl90b2tl
biA9PSBUX0VPTCAmJiBwcmV2X3Rva2VuID09IFRfV09SRCAmJgorCSAgICAodG9rZW4gPT0gVF9F
UVVBTCB8fCB0b2tlbiA9PSBUX0NPTE9OX0VRVUFMIHx8IHRva2VuID09IFRfUExVU19FUVVBTCkp
CisJCUJFR0lOKEFTU0lHTl9WQUwpOworCisJcHJldl9wcmV2X3Rva2VuID0gcHJldl90b2tlbjsK
KwlwcmV2X3Rva2VuID0gdG9rZW47CisKKwlyZXR1cm4gdG9rZW47Cit9CisKK3N0YXRpYyBjaGFy
ICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNpemVfdCBuKQoreworCWNoYXIgKm91dDsK
KwlpbnQgYzsKKwljaGFyIGMyOworCWNvbnN0IGNoYXIgKnJlc3QsICplbmQ7CisKKwluZXdfc3Ry
aW5nKCk7CisJYXBwZW5kX3N0cmluZyhpbiwgbik7CisKKwkvKiBnZXQgdGhlIHdob2xlIGxpbmUg
YmVjYXVzZSB3ZSBkbyBub3Qga25vdyB0aGUgZW5kIG9mIHRva2VuLiAqLworCXdoaWxlICgoYyA9
IGlucHV0KCkpICE9IEVPRikgeworCQlpZiAoYyA9PSAnXG4nKSB7CisJCQl1bnB1dChjKTsKKwkJ
CWJyZWFrOworCQl9CisJCWMyID0gYzsKKwkJYXBwZW5kX3N0cmluZygmYzIsIDEpOworCX0KKwor
CXJlc3QgPSB0ZXh0OworCW91dCA9IGV4cGFuZF9vbmVfdG9rZW4oJnJlc3QpOworCisJLyogcHVz
aCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRoZSBpbnB1dCBzdHJlYW0gKi8KKwllbmQgPSBy
ZXN0ICsgc3RybGVuKHJlc3QpOworCXdoaWxlIChlbmQgPiByZXN0KQorCQl1bnB1dCgqLS1lbmQp
OworCisJZnJlZSh0ZXh0KTsKKworCXJldHVybiBvdXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZF9leHBhbmRlZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKmVuZDsK
KwljaGFyICpyZXM7CisKKwlzdHIrKzsKKworCXJlcyA9IGV4cGFuZF9kb2xsYXIoJnN0cik7CisK
KwkvKiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLwor
CWVuZCA9IHN0ciArIHN0cmxlbihzdHIpOworCXdoaWxlIChlbmQgPiBzdHIpCisJCXVucHV0KCot
LWVuZCk7CisKKwlhcHBlbmRfc3RyaW5nKHJlcywgc3RybGVuKHJlcykpOworCisJZnJlZShyZXMp
OworfQorCit2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKQoreworCW5ld19zdHJpbmcoKTsKKwls
YXN0X3RzID0gZmlyc3RfdHMgPSAwOworCUJFR0lOKEhFTFApOworfQorCitzdGF0aWMgdm9pZCB6
Y29uZl9lbmRoZWxwKHZvaWQpCit7CisJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJQkVHSU4oSU5J
VElBTCk7Cit9CisKKworLyoKKyAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBmaWxlIHdpdGggZm9s
bG93aW5nIG5hbWVzOgorICogLi9uYW1lCisgKiAkKHNyY3RyZWUpL25hbWUKKyAqIFRoZSBsYXR0
ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0cmVlCisgKiB3aGVu
IGNvbXBpbGluZyB0aGUga2VybmVsLgorICogUmV0dXJuIE5VTEwgaWYgZmlsZSBpcyBub3QgZm91
bmQuCisgKi8KK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAq
ZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKKwlGSUxFICpmOworCisJZiA9IGZvcGVuKG5hbWUs
ICJyIik7CisJaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcvJykgeworCQll
bnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJCWlmIChlbnYpIHsKKwkJCXNucHJpbnRmKGZ1bGxuYW1l
LCBzaXplb2YoZnVsbG5hbWUpLAorCQkJCSAiJXMvJXMiLCBlbnYsIG5hbWUpOworCQkJZiA9IGZv
cGVuKGZ1bGxuYW1lLCAiciIpOworCQl9CisJfQorCXJldHVybiBmOworfQorCit2b2lkIHpjb25m
X2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJeXlpbiA9IHpjb25mX2ZvcGVuKG5hbWUp
OworCWlmICgheXlpbikgeworCQlmcHJpbnRmKHN0ZGVyciwgImNhbid0IGZpbmQgZmlsZSAlc1xu
IiwgbmFtZSk7CisJCWV4aXQoMSk7CisJfQorCisJY3VycmVudF9idWYgPSB4bWFsbG9jKHNpemVv
ZigqY3VycmVudF9idWYpKTsKKwltZW1zZXQoY3VycmVudF9idWYsIDAsIHNpemVvZigqY3VycmVu
dF9idWYpKTsKKworCWN1cnJlbnRfZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOworCXl5bGluZW5v
ID0gMTsKK30KKwordm9pZCB6Y29uZl9uZXh0ZmlsZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0
cnVjdCBmaWxlICppdGVyOworCXN0cnVjdCBmaWxlICpmaWxlID0gZmlsZV9sb29rdXAobmFtZSk7
CisJc3RydWN0IGJ1ZmZlciAqYnVmID0geG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCW1lbXNldChi
dWYsIDAsIHNpemVvZigqYnVmKSk7CisKKwljdXJyZW50X2J1Zi0+c3RhdGUgPSBZWV9DVVJSRU5U
X0JVRkZFUjsKKwl5eWluID0gemNvbmZfZm9wZW4oZmlsZS0+bmFtZSk7CisJaWYgKCF5eWluKSB7
CisJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGNhbid0IG9wZW4gZmlsZSBcIiVzXCJcbiIsCisJ
CQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBmaWxlLT5uYW1lKTsKKwkJZXhpdCgx
KTsKKwl9CisJeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9jcmVhdGVfYnVmZmVyKHl5aW4sIFlZX0JV
Rl9TSVpFKSk7CisJYnVmLT5wYXJlbnQgPSBjdXJyZW50X2J1ZjsKKwljdXJyZW50X2J1ZiA9IGJ1
ZjsKKworCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5lbm87CisJZmlsZS0+cGFyZW50ID0g
Y3VycmVudF9maWxlOworCisJZm9yIChpdGVyID0gY3VycmVudF9maWxlOyBpdGVyOyBpdGVyID0g
aXRlci0+cGFyZW50KSB7CisJCWlmICghc3RyY21wKGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKSB7
CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC5c
biIKKwkJCQkiSW5jbHVzaW9uIHBhdGg6XG4iCisJCQkJIiAgY3VycmVudCBmaWxlIDogJXNcbiIs
IGZpbGUtPm5hbWUpOworCQkJaXRlciA9IGZpbGU7CisJCQlkbyB7CisJCQkJaXRlciA9IGl0ZXIt
PnBhcmVudDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgaW5jbHVkZWQgZnJvbTogJXM6JWRcbiIs
CisJCQkJCWl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubyAtIDEpOworCQkJfSB3aGlsZSAoc3RyY21w
KGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwl5eWxp
bmVubyA9IDE7CisJY3VycmVudF9maWxlID0gZmlsZTsKK30KKworc3RhdGljIHZvaWQgemNvbmZf
ZW5kZmlsZSh2b2lkKQoreworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKworCWN1cnJlbnRfZmls
ZSA9IGN1cnJlbnRfZmlsZS0+cGFyZW50OworCWlmIChjdXJyZW50X2ZpbGUpCisJCXl5bGluZW5v
ID0gY3VycmVudF9maWxlLT5saW5lbm87CisKKwlwYXJlbnQgPSBjdXJyZW50X2J1Zi0+cGFyZW50
OworCWlmIChwYXJlbnQpIHsKKwkJZmNsb3NlKHl5aW4pOworCQl5eV9kZWxldGVfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSKTsKKwkJeXlfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQtPnN0YXRlKTsK
Kwl9CisJZnJlZShjdXJyZW50X2J1Zik7CisJY3VycmVudF9idWYgPSBwYXJlbnQ7Cit9CisKK2lu
dCB6Y29uZl9saW5lbm8odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9wb3MubGluZW5vOworfQor
Citjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfcG9z
LmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7Cit9CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2IyMzcKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaApAQCAtMCwwICsxLDEzMiBAQAorLyog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNpZm5kZWYgTElTVF9ICisjZGVm
aW5lIExJU1RfSAorCisvKgorICogQ29waWVkIGZyb20gaW5jbHVkZS9saW51eC8uLi4KKyAqLwor
CisjdW5kZWYgb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVf
dCkgJigoVFlQRSAqKTApLT5NRU1CRVIpCisKKy8qKgorICogY29udGFpbmVyX29mIC0gY2FzdCBh
IG1lbWJlciBvZiBhIHN0cnVjdHVyZSBvdXQgdG8gdGhlIGNvbnRhaW5pbmcgc3RydWN0dXJlCisg
KiBAcHRyOiAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4KKyAqIEB0eXBlOiAgICAg
ICB0aGUgdHlwZSBvZiB0aGUgY29udGFpbmVyIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLgor
ICogQG1lbWJlcjogICAgIHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIgd2l0aGluIHRoZSBzdHJ1Y3Qu
CisgKgorICovCisjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikgKHsgICAg
ICAgICAgICAgICAgICAgICAgXAorCWNvbnN0IHR5cGVvZiggKCh0eXBlICopMCktPm1lbWJlciAp
ICpfX21wdHIgPSAocHRyKTsgICAgXAorCSh0eXBlICopKCAoY2hhciAqKV9fbXB0ciAtIG9mZnNl
dG9mKHR5cGUsbWVtYmVyKSApO30pCisKKworc3RydWN0IGxpc3RfaGVhZCB7CisJc3RydWN0IGxp
c3RfaGVhZCAqbmV4dCwgKnByZXY7Cit9OworCisKKyNkZWZpbmUgTElTVF9IRUFEX0lOSVQobmFt
ZSkgeyAmKG5hbWUpLCAmKG5hbWUpIH0KKworI2RlZmluZSBMSVNUX0hFQUQobmFtZSkgXAorCXN0
cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5hbWUpCisKKy8qKgorICogbGlz
dF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5CisgKiBAcHRyOgl0aGUgJnN0
cnVjdCBsaXN0X2hlYWQgcG9pbnRlci4KKyAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgc3RydWN0
IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9o
ZWFkIHdpdGhpbiB0aGUgc3RydWN0LgorICovCisjZGVmaW5lIGxpc3RfZW50cnkocHRyLCB0eXBl
LCBtZW1iZXIpIFwKKwljb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpCisKKy8qKgorICog
bGlzdF9mb3JfZWFjaF9lbnRyeQktCWl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKKyAq
IEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCisgKiBAaGVhZDoJdGhl
IGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X2hl
YWQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeShw
b3MsIGhlYWQsIG1lbWJlcikJCQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5l
eHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFk
KTsgCVwKKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpw
b3MpLCBtZW1iZXIpKQorCisvKioKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSAtIGl0ZXJh
dGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBl
bnRyeQorICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBu
OgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCisgKiBAaGVhZDoJ
dGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0
X2hlYWQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRy
eV9zYWZlKHBvcywgbiwgaGVhZCwgbWVtYmVyKQkJCVwKKwlmb3IgKHBvcyA9IGxpc3RfZW50cnko
KGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlciksCVwKKwkJbiA9IGxpc3RfZW50cnko
cG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJICAgICAmcG9zLT5t
ZW1iZXIgIT0gKGhlYWQpOwkJCQkJXAorCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+
bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9lbXB0eSAt
IHRlc3RzIHdoZXRoZXIgYSBsaXN0IGlzIGVtcHR5CisgKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVz
dC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShjb25zdCBzdHJ1Y3QgbGlzdF9o
ZWFkICpoZWFkKQoreworCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7Cit9CisKKy8qCisgKiBJ
bnNlcnQgYSBuZXcgZW50cnkgYmV0d2VlbiB0d28ga25vd24gY29uc2VjdXRpdmUgZW50cmllcy4K
KyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJl
IHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQorICovCitzdGF0aWMg
aW5saW5lIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpfbmV3LAorCQkJICAgICAg
c3RydWN0IGxpc3RfaGVhZCAqcHJldiwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQp
Cit7CisJbmV4dC0+cHJldiA9IF9uZXc7CisJX25ldy0+bmV4dCA9IG5leHQ7CisJX25ldy0+cHJl
diA9IHByZXY7CisJcHJldi0+bmV4dCA9IF9uZXc7Cit9CisKKy8qKgorICogbGlzdF9hZGRfdGFp
bCAtIGFkZCBhIG5ldyBlbnRyeQorICogQG5ldzogbmV3IGVudHJ5IHRvIGJlIGFkZGVkCisgKiBA
aGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBiZWZvcmUKKyAqCisgKiBJbnNlcnQgYSBuZXcgZW50
cnkgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBs
ZW1lbnRpbmcgcXVldWVzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfdGFpbChz
dHJ1Y3QgbGlzdF9oZWFkICpfbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCV9fbGlz
dF9hZGQoX25ldywgaGVhZC0+cHJldiwgaGVhZCk7Cit9CisKKy8qCisgKiBEZWxldGUgYSBsaXN0
IGVudHJ5IGJ5IG1ha2luZyB0aGUgcHJldi9uZXh0IGVudHJpZXMKKyAqIHBvaW50IHRvIGVhY2gg
b3RoZXIuCisgKgorICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlv
biB3aGVyZSB3ZSBrbm93CisgKiB0aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSEKKyAqLwor
c3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqcHJldiwgc3Ry
dWN0IGxpc3RfaGVhZCAqbmV4dCkKK3sKKwluZXh0LT5wcmV2ID0gcHJldjsKKwlwcmV2LT5uZXh0
ID0gbmV4dDsKK30KKworI2RlZmluZSBMSVNUX1BPSVNPTjEgICgodm9pZCAqKSAweDAwMTAwMTAw
KQorI2RlZmluZSBMSVNUX1BPSVNPTjIgICgodm9pZCAqKSAweDAwMjAwMjAwKQorLyoqCisgKiBs
aXN0X2RlbCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0LgorICogQGVudHJ5OiB0aGUgZWxlbWVu
dCB0byBkZWxldGUgZnJvbSB0aGUgbGlzdC4KKyAqIE5vdGU6IGxpc3RfZW1wdHkoKSBvbiBlbnRy
eSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRlciB0aGlzLCB0aGUgZW50cnkgaXMKKyAqIGluIGFu
IHVuZGVmaW5lZCBzdGF0ZS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVj
dCBsaXN0X2hlYWQgKmVudHJ5KQoreworCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5u
ZXh0KTsKKwllbnRyeS0+bmV4dCA9IChzdHJ1Y3QgbGlzdF9oZWFkKilMSVNUX1BPSVNPTjE7CisJ
ZW50cnktPnByZXYgPSAoc3RydWN0IGxpc3RfaGVhZCopTElTVF9QT0lTT04yOworfQorI2VuZGlm
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9sa2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM3NjU4Ci0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaApAQCAtMCwwICsxLDE1
OSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8K
KworI2lmbmRlZiBMS0NfSAorI2RlZmluZSBMS0NfSAorCisjaW5jbHVkZSAiZXhwci5oIgorCisj
aWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlICJsa2Nf
cHJvdG8uaCIKKworI2RlZmluZSBTUkNUUkVFICJzcmN0cmVlIgorCisjaWZuZGVmIFBBQ0tBR0UK
KyNkZWZpbmUgUEFDS0FHRSAibGludXgiCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfCisjZGVm
aW5lIENPTkZJR18gIkNPTkZJR18iCisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAq
Q09ORklHX3ByZWZpeCh2b2lkKQoreworCXJldHVybiBnZXRlbnYoICJDT05GSUdfIiApID86IENP
TkZJR187Cit9CisjdW5kZWYgQ09ORklHXworI2RlZmluZSBDT05GSUdfIENPTkZJR19wcmVmaXgo
KQorCitlbnVtIGNvbmZfZGVmX21vZGUgeworCWRlZl9kZWZhdWx0LAorCWRlZl95ZXMsCisJZGVm
X21vZCwKKwlkZWZfbm8sCisJZGVmX3JhbmRvbQorfTsKKworZXh0ZXJuIGludCB5eWxpbmVubzsK
K3ZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCk7Cit2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKTsK
K0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCB6Y29uZl9pbml0c2Nh
bihjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFt
ZSk7CitpbnQgemNvbmZfbGluZW5vKHZvaWQpOworY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2
b2lkKTsKKworLyogY29uZmRhdGEuYyAqLworY29uc3QgY2hhciAqY29uZl9nZXRfY29uZmlnbmFt
ZSh2b2lkKTsKK2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCk7Cit2b2lkIHN5
bV9zZXRfY2hhbmdlX2NvdW50KGludCBjb3VudCk7Cit2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50
KGludCBjb3VudCk7Citib29sIGNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVm
X21vZGUgbW9kZSk7Cit2b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpj
c3ltKTsKKworLyogY29uZmRhdGEuYyBhbmQgZXhwci5jICovCitzdGF0aWMgaW5saW5lIHZvaWQg
eGZ3cml0ZShjb25zdCB2b2lkICpzdHIsIHNpemVfdCBsZW4sIHNpemVfdCBjb3VudCwgRklMRSAq
b3V0KQoreworCWFzc2VydChsZW4gIT0gMCk7CisKKwlpZiAoZndyaXRlKHN0ciwgbGVuLCBjb3Vu
dCwgb3V0KSAhPSBjb3VudCkKKwkJZnByaW50ZihzdGRlcnIsICJFcnJvciBpbiB3cml0aW5nIG9y
IGVuZCBvZiBmaWxlLlxuIik7Cit9CisKKy8qIG1lbnUuYyAqLwordm9pZCBfbWVudV9pbml0KHZv
aWQpOwordm9pZCBtZW51X3dhcm4oc3RydWN0IG1lbnUgKm1lbnUsIGNvbnN0IGNoYXIgKmZtdCwg
Li4uKTsKK3N0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOwordm9pZCBtZW51X2VuZF9t
ZW51KHZvaWQpOwordm9pZCBtZW51X2FkZF9lbnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwordm9p
ZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVfYWRkX3Zpc2liaWxp
dHkoc3RydWN0IGV4cHIgKmRlcCk7CitzdHJ1Y3QgcHJvcGVydHkgKm1lbnVfYWRkX3Byb21wdChl
bnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHByICpkZXApOwordm9p
ZCBtZW51X2FkZF9leHByKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBleHByICpleHByLCBz
dHJ1Y3QgZXhwciAqZGVwKTsKK3ZvaWQgbWVudV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5
cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVfYWRk
X29wdGlvbl9tb2R1bGVzKHZvaWQpOwordm9pZCBtZW51X2FkZF9vcHRpb25fZGVmY29uZmlnX2xp
c3Qodm9pZCk7Cit2b2lkIG1lbnVfYWRkX29wdGlvbl9hbGxub2NvbmZpZ195KHZvaWQpOwordm9p
ZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQpOwordm9pZCBtZW51X3NldF90eXBl
KGludCB0eXBlKTsKKworLyogdXRpbC5jICovCitzdHJ1Y3QgZmlsZSAqZmlsZV9sb29rdXAoY29u
c3QgY2hhciAqbmFtZSk7Cit2b2lkICp4bWFsbG9jKHNpemVfdCBzaXplKTsKK3ZvaWQgKnhjYWxs
b2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7Cit2b2lkICp4cmVhbGxvYyh2b2lkICpwLCBz
aXplX3Qgc2l6ZSk7CitjaGFyICp4c3RyZHVwKGNvbnN0IGNoYXIgKnMpOworY2hhciAqeHN0cm5k
dXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pOworCisvKiBsZXhlci5sICovCitpbnQgeXlsZXgo
dm9pZCk7CisKK3N0cnVjdCBnc3RyIHsKKwlzaXplX3QgbGVuOworCWNoYXIgICpzOworCS8qCisJ
KiB3aGVuIG1heF93aWR0aCBpcyBub3QgemVybyBsb25nIGxpbmVzIGluIHN0cmluZyBzIChpZiBh
bnkpIGdldAorCSogd3JhcHBlZCBub3QgdG8gZXhjZWVkIHRoZSBtYXhfd2lkdGggdmFsdWUKKwkq
LworCWludCBtYXhfd2lkdGg7Cit9Oworc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKTsKK3ZvaWQg
c3RyX2ZyZWUoc3RydWN0IGdzdHIgKmdzKTsKK3ZvaWQgc3RyX2FwcGVuZChzdHJ1Y3QgZ3N0ciAq
Z3MsIGNvbnN0IGNoYXIgKnMpOwordm9pZCBzdHJfcHJpbnRmKHN0cnVjdCBnc3RyICpncywgY29u
c3QgY2hhciAqZm10LCAuLi4pOworY29uc3QgY2hhciAqc3RyX2dldChzdHJ1Y3QgZ3N0ciAqZ3Mp
OworCisvKiBzeW1ib2wuYyAqLwordm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpOworc3Ry
dWN0IHN5bWJvbCAqc3ltX2Nob2ljZV9kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSk7CitzdHJ1
Y3QgcHJvcGVydHkgKnN5bV9nZXRfcmFuZ2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworY29u
c3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3Ry
dWN0IHN5bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBw
cm9wZXJ0eSAqcHJvcF9hbGxvYyhlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpz
eW0pOworc3RydWN0IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJv
cCk7CisKK3N0YXRpYyBpbmxpbmUgdHJpc3RhdGUgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzdHJ1
Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+Y3Vyci50cmk7Cit9CisKKworc3RhdGlj
IGlubGluZSBzdHJ1Y3Qgc3ltYm9sICpzeW1fZ2V0X2Nob2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9s
ICpzeW0pCit7CisJcmV0dXJuIChzdHJ1Y3Qgc3ltYm9sICopc3ltLT5jdXJyLnZhbDsKK30KKwor
c3RhdGljIGlubGluZSBib29sIHN5bV9zZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKmNo
LCBzdHJ1Y3Qgc3ltYm9sICpjaHZhbCkKK3sKKwlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1
ZShjaHZhbCwgeWVzKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9pc19jaG9pY2Uoc3Ry
dWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRSA/
IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9pc19jaG9pY2VfdmFs
dWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0NI
T0lDRVZBTCA/IHRydWUgOiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN5bV9pc19v
cHRpb25hbChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1C
T0xfT1BUSU9OQUwgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzeW1f
aGFzX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4gc3ltLT5mbGFncyAmIFNZ
TUJPTF9ERUZfVVNFUiA/IHRydWUgOiBmYWxzZTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9
CisjZW5kaWYKKworI2VuZGlmIC8qIExLQ19IICovCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L2xrY19wcm90by5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmMyNjc1Ci0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaApAQCAtMCwwICsxLDY2IEBACisvKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgor
CisvKiBjb25mZGF0YS5jICovCit2b2lkIGNvbmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSk7Citp
bnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGNvbmZfcmVhZF9zaW1wbGUoY29u
c3QgY2hhciAqbmFtZSwgaW50KTsKK2ludCBjb25mX3dyaXRlX2RlZmNvbmZpZyhjb25zdCBjaGFy
ICpuYW1lKTsKK2ludCBjb25mX3dyaXRlKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IGNvbmZfd3Jp
dGVfYXV0b2NvbmYoaW50IG92ZXJ3cml0ZSk7Citib29sIGNvbmZfZ2V0X2NoYW5nZWQodm9pZCk7
Cit2b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZuKSh2b2lkKSk7Cit2b2lk
IGNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2sodm9pZCAoKmZuKShjb25zdCBjaGFyICpzKSk7CisK
Ky8qIG1lbnUuYyAqLworZXh0ZXJuIHN0cnVjdCBtZW51IHJvb3RtZW51OworCitib29sIG1lbnVf
aXNfZW1wdHkoc3RydWN0IG1lbnUgKm1lbnUpOworYm9vbCBtZW51X2lzX3Zpc2libGUoc3RydWN0
IG1lbnUgKm1lbnUpOworYm9vbCBtZW51X2hhc19wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpOwor
Y29uc3QgY2hhciAqIG1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSk7CitzdHJ1Y3Qg
bWVudSAqIG1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSk7CitzdHJ1Y3QgbWVu
dSAqIG1lbnVfZ2V0X3BhcmVudF9tZW51KHN0cnVjdCBtZW51ICptZW51KTsKK2Jvb2wgbWVudV9o
YXNfaGVscChzdHJ1Y3QgbWVudSAqbWVudSk7Citjb25zdCBjaGFyICogbWVudV9nZXRfaGVscChz
dHJ1Y3QgbWVudSAqbWVudSk7CitzdHJ1Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0cihzdHJ1Y3Qg
c3ltYm9sICoqc3ltX2Fyciwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7Cit2b2lkIG1lbnVfZ2V0
X2V4dF9oZWxwKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCk7CisKKy8qIHN5
bWJvbC5jICovCitleHRlcm4gc3RydWN0IHN5bWJvbCAqIHN5bWJvbF9oYXNoW1NZTUJPTF9IQVNI
U0laRV07CisKK3N0cnVjdCBzeW1ib2wgKiBzeW1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBmbGFncyk7CitzdHJ1Y3Qgc3ltYm9sICogc3ltX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7Citj
b25zdCBjaGFyICogc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciAqaW4pOworc3Ry
dWN0IHN5bWJvbCAqKiBzeW1fcmVfc2VhcmNoKGNvbnN0IGNoYXIgKnBhdHRlcm4pOworY29uc3Qg
Y2hhciAqIHN5bV90eXBlX25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlKTsKK3ZvaWQgc3ltX2Nh
bGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKTsKK2VudW0gc3ltYm9sX3R5cGUgc3ltX2dldF90
eXBlKHN0cnVjdCBzeW1ib2wgKnN5bSk7Citib29sIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uo
c3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSk7Citib29sIHN5bV9zZXRfdHJpc3RhdGVf
dmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSk7Cit0cmlzdGF0ZSBzeW1fdG9n
Z2xlX3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7Citib29sIHN5bV9zdHJpbmdf
dmFsaWQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpOworYm9vbCBzeW1f
c3RyaW5nX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cik7
Citib29sIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hh
ciAqbmV3dmFsKTsKK2Jvb2wgc3ltX2lzX2NoYW5nYWJsZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwor
c3RydWN0IHByb3BlcnR5ICogc3ltX2dldF9jaG9pY2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0p
OworY29uc3QgY2hhciAqIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7
CisKK2NvbnN0IGNoYXIgKiBwcm9wX2dldF90eXBlX25hbWUoZW51bSBwcm9wX3R5cGUgdHlwZSk7
CisKKy8qIHByZXByb2Nlc3MuYyAqLworZW51bSB2YXJpYWJsZV9mbGF2b3IgeworCVZBUl9TSU1Q
TEUsCisJVkFSX1JFQ1VSU0lWRSwKKwlWQVJfQVBQRU5ELAorfTsKK3ZvaWQgZW52X3dyaXRlX2Rl
cChGSUxFICpmLCBjb25zdCBjaGFyICphdXRvX2NvbmZfbmFtZSk7Cit2b2lkIHZhcmlhYmxlX2Fk
ZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKKwkJICBlbnVtIHZhcmlhYmxl
X2ZsYXZvciBmbGF2b3IpOwordm9pZCB2YXJpYWJsZV9hbGxfZGVsKHZvaWQpOworY2hhciAqZXhw
YW5kX3N0cmluZyhjb25zdCBjaGFyICppbik7CitjaGFyICpleHBhbmRfZG9sbGFyKGNvbnN0IGNo
YXIgKipzdHIpOworY2hhciAqZXhwYW5kX29uZV90b2tlbihjb25zdCBjaGFyICoqc3RyKTsKKwor
LyogZXhwci5jICovCit2b2lkIGV4cHJfcHJpbnQoc3RydWN0IGV4cHIgKmUsIHZvaWQgKCpmbiko
dm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKmRhdGEsIGludCBw
cmV2dG9rZW4pOwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcu
RkFULldBUk5JTkcgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklO
RwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Y2I1YTdlCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcKQEAg
LTAsMCArMSw0IEBACitUaGlzIGlzIE5PVCB0aGUgb2ZmaWNpYWwgdmVyc2lvbiBvZiBkaWFsb2cu
ICBUaGlzIHZlcnNpb24gaGFzIGJlZW4KK3NpZ25pZmljYW50bHkgbW9kaWZpZWQgZnJvbSB0aGUg
b3JpZ2luYWwuICBJdCBpcyBmb3IgdXNlIGJ5IHRoZSBMaW51eAora2VybmVsIGNvbmZpZ3VyYXRp
b24gc2NyaXB0LiAgUGxlYXNlIGRvIG5vdCBib3RoZXIgU2F2aW8gTGFtIHdpdGgKK3F1ZXN0aW9u
cyBhYm91dCB0aGlzIHByb2dyYW0uCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4
ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9jaGVja2xp
c3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDE2MWNmCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9jaGVja2xpc3QuYwpAQCAt
MCwwICsxLDMxOSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgor
ICogIGNoZWNrbGlzdC5jIC0tIGltcGxlbWVudHMgdGhlIGNoZWNrbGlzdCBib3gKKyAqCisgKiAg
T1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQorICogICAgIFN0
dWFydCBIZXJiZXJ0IC0gUy5IZXJiZXJ0QHNoZWZmaWVsZC5hYy51azogcmFkaW9saXN0IGV4dGVu
c2lvbgorICogICAgIEFsZXNzYW5kcm8gUnViaW5pIC0gcnViaW5pQGlwdnZpcy51bmlwdi5pdDog
bWVyZ2VkIHRoZSB0d28KKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTog
V2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1ZGUgImRpYWxv
Zy5oIgorCitzdGF0aWMgaW50IGxpc3Rfd2lkdGgsIGNoZWNrX3gsIGl0ZW1feDsKKworLyoKKyAq
IFByaW50IGxpc3QgaXRlbQorICovCitzdGF0aWMgdm9pZCBwcmludF9pdGVtKFdJTkRPVyAqIHdp
biwgaW50IGNob2ljZSwgaW50IHNlbGVjdGVkKQoreworCWludCBpOworCWNoYXIgKmxpc3RfaXRl
bSA9IG1hbGxvYyhsaXN0X3dpZHRoICsgMSk7CisKKwlzdHJuY3B5KGxpc3RfaXRlbSwgaXRlbV9z
dHIoKSwgbGlzdF93aWR0aCAtIGl0ZW1feCk7CisJbGlzdF9pdGVtW2xpc3Rfd2lkdGggLSBpdGVt
X3hdID0gJ1wwJzsKKworCS8qIENsZWFyICdyZXNpZHVlJyBvZiBsYXN0IGl0ZW0gKi8KKwl3YXR0
cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7CisJd21vdmUod2luLCBjaG9pY2UsIDApOworCWZv
ciAoaSA9IDA7IGkgPCBsaXN0X3dpZHRoOyBpKyspCisJCXdhZGRjaCh3aW4sICcgJyk7CisKKwl3
bW92ZSh3aW4sIGNob2ljZSwgY2hlY2tfeCk7CisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRs
Zy5jaGVja19zZWxlY3RlZC5hdHIKKwkJIDogZGxnLmNoZWNrLmF0cik7CisJaWYgKCFpdGVtX2lz
X3RhZygnOicpKQorCQl3cHJpbnR3KHdpbiwgIiglYykiLCBpdGVtX2lzX3RhZygnWCcpID8gJ1gn
IDogJyAnKTsKKworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX3NlbGVjdGVkLmF0
ciA6IGRsZy50YWcuYXRyKTsKKwltdndhZGRjaCh3aW4sIGNob2ljZSwgaXRlbV94LCBsaXN0X2l0
ZW1bMF0pOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuaXRlbV9zZWxlY3RlZC5hdHIg
OiBkbGcuaXRlbS5hdHIpOworCXdhZGRzdHIod2luLCBsaXN0X2l0ZW0gKyAxKTsKKwlpZiAoc2Vs
ZWN0ZWQpIHsKKwkJd21vdmUod2luLCBjaG9pY2UsIGNoZWNrX3ggKyAxKTsKKwkJd3JlZnJlc2go
d2luKTsKKwl9CisJZnJlZShsaXN0X2l0ZW0pOworfQorCisvKgorICogUHJpbnQgdGhlIHNjcm9s
bCBpbmRpY2F0b3JzLgorICovCitzdGF0aWMgdm9pZCBwcmludF9hcnJvd3MoV0lORE9XICogd2lu
LCBpbnQgY2hvaWNlLCBpbnQgaXRlbV9ubywgaW50IHNjcm9sbCwKKwkgICAgIGludCB5LCBpbnQg
eCwgaW50IGhlaWdodCkKK3sKKwl3bW92ZSh3aW4sIHksIHgpOworCisJaWYgKHNjcm9sbCA+IDAp
IHsKKwkJd2F0dHJzZXQod2luLCBkbGcudWFycm93LmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19V
QVJST1cpOworCQl3YWRkc3RyKHdpbiwgIigtKSIpOworCX0gZWxzZSB7CisJCXdhdHRyc2V0KHdp
biwgZGxnLm1lbnVib3guYXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNo
KHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdp
biwgQUNTX0hMSU5FKTsKKwl9CisKKwl5ID0geSArIGhlaWdodCArIDE7CisJd21vdmUod2luLCB5
LCB4KTsKKworCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGNob2ljZSA8IGl0
ZW1fbm8gLSAxKSkgeworCQl3YXR0cnNldCh3aW4sIGRsZy5kYXJyb3cuYXRyKTsKKwkJd2FkZGNo
KHdpbiwgQUNTX0RBUlJPVyk7CisJCXdhZGRzdHIod2luLCAiKCspIik7CisJfSBlbHNlIHsKKwkJ
d2F0dHJzZXQod2luLCBkbGcubWVudWJveF9ib3JkZXIuYXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNT
X0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hM
SU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwl9Cit9CisKKy8qCisgKiAgRGlzcGxh
eSB0aGUgdGVybWluYXRpb24gYnV0dG9ucworICovCitzdGF0aWMgdm9pZCBwcmludF9idXR0b25z
KFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0ZWQpCit7
CisJaW50IHggPSB3aWR0aCAvIDIgLSAxMTsKKwlpbnQgeSA9IGhlaWdodCAtIDI7CisKKwlwcmlu
dF9idXR0b24oZGlhbG9nLCAiU2VsZWN0IiwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7CisJcHJpbnRf
YnV0dG9uKGRpYWxvZywgIiBIZWxwICIsIHksIHggKyAxNCwgc2VsZWN0ZWQgPT0gMSk7CisKKwl3
bW92ZShkaWFsb2csIHksIHggKyAxICsgMTQgKiBzZWxlY3RlZCk7CisJd3JlZnJlc2goZGlhbG9n
KTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBkaWFsb2cgYm94IHdpdGggYSBsaXN0IG9mIG9wdGlv
bnMgdGhhdCBjYW4gYmUgdHVybmVkIG9uIG9yIG9mZgorICogaW4gdGhlIHN0eWxlIG9mIHJhZGlv
bGlzdCAob25seSBvbmUgb3B0aW9uIHR1cm5lZCBvbiBhdCBhIHRpbWUpLgorICovCitpbnQgZGlh
bG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQg
aGVpZ2h0LAorCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0KQoreworCWludCBpLCB4
LCB5LCBib3hfeCwgYm94X3k7CisJaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAsIGNob2ljZSA9IDAs
IHNjcm9sbCA9IDAsIG1heF9jaG9pY2U7CisJV0lORE9XICpkaWFsb2csICpsaXN0OworCisJLyog
d2hpY2ggaXRlbSB0byBoaWdobGlnaHQgKi8KKwlpdGVtX2ZvcmVhY2goKSB7CisJCWlmIChpdGVt
X2lzX3RhZygnWCcpKQorCQkJY2hvaWNlID0gaXRlbV9uKCk7CisJCWlmIChpdGVtX2lzX3NlbGVj
dGVkKCkpIHsKKwkJCWNob2ljZSA9IGl0ZW1fbigpOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2Rv
X3Jlc2l6ZToKKwlpZiAoZ2V0bWF4eShzdGRzY3IpIDwgKGhlaWdodCArIENIRUNLTElTVF9IRUlH
VEhfTUlOKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1heHgoc3Rk
c2NyKSA8ICh3aWR0aCArIENIRUNLTElTVF9XSURUSF9NSU4pKQorCQlyZXR1cm4gLUVSUkRJU1BM
QVlUT09TTUFMTDsKKworCW1heF9jaG9pY2UgPSBNSU4obGlzdF9oZWlnaHQsIGl0ZW1fY291bnQo
KSk7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKGdldG1heHgo
c3Rkc2NyKSAtIHdpZHRoKSAvIDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8g
MjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFs
b2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7
CisKKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9n
LmF0ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIp
OworCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9
IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3
YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRF
RSk7CisKKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChk
aWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwg
d2lkdGggLSAyLCAxLCAzKTsKKworCWxpc3Rfd2lkdGggPSB3aWR0aCAtIDY7CisJYm94X3kgPSBo
ZWlnaHQgLSBsaXN0X2hlaWdodCAtIDU7CisJYm94X3ggPSAod2lkdGggLSBsaXN0X3dpZHRoKSAv
IDIgLSAxOworCisJLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBsaXN0ICovCisJbGlzdCA9
IHN1YndpbihkaWFsb2csIGxpc3RfaGVpZ2h0LCBsaXN0X3dpZHRoLCB5ICsgYm94X3kgKyAxLAor
CQkgICAgICB4ICsgYm94X3ggKyAxKTsKKworCWtleXBhZChsaXN0LCBUUlVFKTsKKworCS8qIGRy
YXcgYSBib3ggYXJvdW5kIHRoZSBsaXN0IGl0ZW1zICovCisJZHJhd19ib3goZGlhbG9nLCBib3hf
eSwgYm94X3gsIGxpc3RfaGVpZ2h0ICsgMiwgbGlzdF93aWR0aCArIDIsCisJCSBkbGcubWVudWJv
eF9ib3JkZXIuYXRyLCBkbGcubWVudWJveC5hdHIpOworCisJLyogRmluZCBsZW5ndGggb2YgbG9u
Z2VzdCBpdGVtIGluIG9yZGVyIHRvIGNlbnRlciBjaGVja2xpc3QgKi8KKwljaGVja194ID0gMDsK
KwlpdGVtX2ZvcmVhY2goKQorCQljaGVja194ID0gTUFYKGNoZWNrX3gsIHN0cmxlbihpdGVtX3N0
cigpKSArIDQpOworCWNoZWNrX3ggPSBNSU4oY2hlY2tfeCwgbGlzdF93aWR0aCk7CisKKwljaGVj
a194ID0gKGxpc3Rfd2lkdGggLSBjaGVja194KSAvIDI7CisJaXRlbV94ID0gY2hlY2tfeCArIDQ7
CisKKwlpZiAoY2hvaWNlID49IGxpc3RfaGVpZ2h0KSB7CisJCXNjcm9sbCA9IGNob2ljZSAtIGxp
c3RfaGVpZ2h0ICsgMTsKKwkJY2hvaWNlIC09IHNjcm9sbDsKKwl9CisKKwkvKiBQcmludCB0aGUg
bGlzdCAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsKKwkJaXRlbV9zZXQo
c2Nyb2xsICsgaSk7CisJCXByaW50X2l0ZW0obGlzdCwgaSwgaSA9PSBjaG9pY2UpOworCX0KKwor
CXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9jb3VudCgpLCBzY3JvbGwsCisJCSAg
ICAgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKKworCXByaW50X2J1
dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKworCXdub3V0cmVmcmVzaChkaWFsb2cp
OworCXdub3V0cmVmcmVzaChsaXN0KTsKKwlkb3VwZGF0ZSgpOworCisJd2hpbGUgKGtleSAhPSBL
RVlfRVNDKSB7CisJCWtleSA9IHdnZXRjaChkaWFsb2cpOworCisJCWZvciAoaSA9IDA7IGkgPCBt
YXhfY2hvaWNlOyBpKyspIHsKKwkJCWl0ZW1fc2V0KGkgKyBzY3JvbGwpOworCQkJaWYgKHRvdXBw
ZXIoa2V5KSA9PSB0b3VwcGVyKGl0ZW1fc3RyKClbMF0pKQorCQkJCWJyZWFrOworCQl9CisKKwkJ
aWYgKGkgPCBtYXhfY2hvaWNlIHx8IGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dOIHx8
CisJCSAgICBrZXkgPT0gJysnIHx8IGtleSA9PSAnLScpIHsKKwkJCWlmIChrZXkgPT0gS0VZX1VQ
IHx8IGtleSA9PSAnLScpIHsKKwkJCQlpZiAoIWNob2ljZSkgeworCQkJCQlpZiAoIXNjcm9sbCkK
KwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBTY3JvbGwgbGlzdCBkb3duICovCisJCQkJCWlmIChs
aXN0X2hlaWdodCA+IDEpIHsKKwkJCQkJCS8qIERlLWhpZ2hsaWdodCBjdXJyZW50IGZpcnN0IGl0
ZW0gKi8KKwkJCQkJCWl0ZW1fc2V0KHNjcm9sbCk7CisJCQkJCQlwcmludF9pdGVtKGxpc3QsIDAs
IEZBTFNFKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIFRSVUUpOworCQkJCQkJd3NjcmwobGlzdCwg
LTEpOworCQkJCQkJc2Nyb2xsb2sobGlzdCwgRkFMU0UpOworCQkJCQl9CisJCQkJCXNjcm9sbC0t
OworCQkJCQlpdGVtX3NldChzY3JvbGwpOworCQkJCQlwcmludF9pdGVtKGxpc3QsIDAsIFRSVUUp
OworCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwKKwkJCQkJ
CSAgICAgc2Nyb2xsLCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOwor
CisJCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCQl3cmVmcmVzaChsaXN0KTsKKworCQkJ
CQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJCQl9IGVsc2UK
KwkJCQkJaSA9IGNob2ljZSAtIDE7CisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBr
ZXkgPT0gJysnKSB7CisJCQkJaWYgKGNob2ljZSA9PSBtYXhfY2hvaWNlIC0gMSkgeworCQkJCQlp
ZiAoc2Nyb2xsICsgY2hvaWNlID49IGl0ZW1fY291bnQoKSAtIDEpCisJCQkJCQljb250aW51ZTsK
KwkJCQkJLyogU2Nyb2xsIGxpc3QgdXAgKi8KKwkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4gMSkgewor
CQkJCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgbGFzdCBpdGVtIGJlZm9yZSBzY3JvbGxpbmcg
dXAgKi8KKwkJCQkJCWl0ZW1fc2V0KHNjcm9sbCArIG1heF9jaG9pY2UgLSAxKTsKKwkJCQkJCXBy
aW50X2l0ZW0obGlzdCwKKwkJCQkJCQkgICAgbWF4X2Nob2ljZSAtIDEsCisJCQkJCQkJICAgIEZB
TFNFKTsKKwkJCQkJCXNjcm9sbG9rKGxpc3QsIFRSVUUpOworCQkJCQkJd3NjcmwobGlzdCwgMSk7
CisJCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7CisJCQkJCX0KKwkJCQkJc2Nyb2xsKys7CisJ
CQkJCWl0ZW1fc2V0KHNjcm9sbCArIG1heF9jaG9pY2UgLSAxKTsKKwkJCQkJcHJpbnRfaXRlbShs
aXN0LCBtYXhfY2hvaWNlIC0gMSwgVFJVRSk7CisKKwkJCQkJcHJpbnRfYXJyb3dzKGRpYWxvZywg
Y2hvaWNlLCBpdGVtX2NvdW50KCksCisJCQkJCQkgICAgIHNjcm9sbCwgYm94X3ksIGJveF94ICsg
Y2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKKworCQkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsK
KwkJCQkJd3JlZnJlc2gobGlzdCk7CisKKwkJCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3Ro
ZXIga2V5IHByZXNzICovCisJCQkJfSBlbHNlCisJCQkJCWkgPSBjaG9pY2UgKyAxOworCQkJfQor
CQkJaWYgKGkgIT0gY2hvaWNlKSB7CisJCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgaXRlbSAq
LworCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGNob2ljZSk7CisJCQkJcHJpbnRfaXRlbShsaXN0LCBj
aG9pY2UsIEZBTFNFKTsKKwkJCQkvKiBIaWdobGlnaHQgbmV3IGl0ZW0gKi8KKwkJCQljaG9pY2Ug
PSBpOworCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGNob2ljZSk7CisJCQkJcHJpbnRfaXRlbShsaXN0
LCBjaG9pY2UsIFRSVUUpOworCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOworCQkJCXdyZWZyZXNo
KGxpc3QpOworCQkJfQorCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNz
ICovCisJCX0KKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAnSCc6CisJCWNhc2UgJ2gnOgorCQlj
YXNlICc/JzoKKwkJCWJ1dHRvbiA9IDE7CisJCQkvKiBmYWxsLXRocm91Z2ggKi8KKwkJY2FzZSAn
Uyc6CisJCWNhc2UgJ3MnOgorCQljYXNlICcgJzoKKwkJY2FzZSAnXG4nOgorCQkJaXRlbV9mb3Jl
YWNoKCkKKwkJCQlpdGVtX3NldF9zZWxlY3RlZCgwKTsKKwkJCWl0ZW1fc2V0KHNjcm9sbCArIGNo
b2ljZSk7CisJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKKwkJCWRlbHdpbihsaXN0KTsKKwkJCWRl
bHdpbihkaWFsb2cpOworCQkJcmV0dXJuIGJ1dHRvbjsKKwkJY2FzZSBUQUI6CisJCWNhc2UgS0VZ
X0xFRlQ6CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQg
PyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApCisJCQkgICAgPyAxIDogKGJ1dHRvbiA+IDEgPyAw
IDogYnV0dG9uKTsKKworCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIGJ1
dHRvbik7CisJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgJ1gnOgorCQlj
YXNlICd4JzoKKwkJCWtleSA9IEtFWV9FU0M7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgor
CQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1JFU0la
RToKKwkJCWRlbHdpbihsaXN0KTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJb25fa2V5X3Jlc2l6
ZSgpOworCQkJZ290byBkb19yZXNpemU7CisJCX0KKworCQkvKiBOb3csIHVwZGF0ZSBldmVyeXRo
aW5nLi4uICovCisJCWRvdXBkYXRlKCk7CisJfQorCWRlbHdpbihsaXN0KTsKKwlkZWx3aW4oZGlh
bG9nKTsKKwlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmggYi9zdXBwb3J0L2tjb25maWcubmV3
L2x4ZGlhbG9nL2RpYWxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4
YjU2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2Rp
YWxvZy5oCkBAIC0wLDAgKzEsMjM4IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMCsgKi8KKy8qCisgKiAgZGlhbG9nLmggLS0gY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgYWxs
IGRpYWxvZyBtb2R1bGVzCisgKgorICogIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Vo
ay5oaykKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxp
Yi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2lmZGVm
IF9fc3VuX18KKyNkZWZpbmUgQ1VSU19NQUNST1MKKyNlbmRpZgorI2luY2x1ZGUgPG5jdXJzZXMu
aD4KKworLyoKKyAqIENvbG9ycyBpbiBuY3Vyc2VzIDEuOS45ZSBkbyBub3Qgd29yayBwcm9wZXJs
eSBzaW5jZSBmb3JlZ3JvdW5kIGFuZAorICogYmFja2dyb3VuZCBjb2xvcnMgYXJlIE9SJ2QgcmF0
aGVyIHRoYW4gc2VwYXJhdGVseSBtYXNrZWQuICBUaGlzIHZlcnNpb24KKyAqIG9mIGRpYWxvZyB3
YXMgaGFja2VkIHRvIHdvcmsgd2l0aCBuY3Vyc2VzIDEuOS45ZSwgbWFraW5nIGl0IGluY29tcGF0
aWJsZQorICogd2l0aCBzdGFuZGFyZCBjdXJzZXMuICBUaGUgc2ltcGxlc3QgZml4ICh0byBtYWtl
IHRoaXMgd29yayB3aXRoIHN0YW5kYXJkCisgKiBjdXJzZXMpIHVzZXMgdGhlIHdia2dkc2V0KCkg
ZnVuY3Rpb24sIG5vdCB1c2VkIGluIHRoZSBvcmlnaW5hbCBoYWNrLgorICogVHVybiBpdCBvZmYg
aWYgd2UncmUgYnVpbGRpbmcgd2l0aCAxLjkuOWUsIHNpbmNlIGl0IGp1c3QgY29uZnVzZXMgdGhp
bmdzLgorICovCisjaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJT04pICYmIGRlZmluZWQoX05FRURf
V1JBUCkgJiYgIWRlZmluZWQoR0NDX1BSSU5URkxJS0UpCisjZGVmaW5lIE9MRF9OQ1VSU0VTIDEK
KyN1bmRlZiAgd2JrZ2RzZXQKKyNkZWZpbmUgd2JrZ2RzZXQodyxwKQkJLypub3RoaW5nICovCisj
ZWxzZQorI2RlZmluZSBPTERfTkNVUlNFUyAwCisjZW5kaWYKKworI2RlZmluZSBUUihwYXJhbXMp
IF90cmFjZWYgcGFyYW1zCisKKyNkZWZpbmUgS0VZX0VTQyAyNworI2RlZmluZSBUQUIgOQorI2Rl
ZmluZSBNQVhfTEVOIDIwNDgKKyNkZWZpbmUgQlVGX1NJWkUgKDEwKjEwMjQpCisjZGVmaW5lIE1J
Tih4LHkpICh4IDwgeSA/IHggOiB5KQorI2RlZmluZSBNQVgoeCx5KSAoeCA+IHkgPyB4IDogeSkK
KworI2lmbmRlZiBBQ1NfVUxDT1JORVIKKyNkZWZpbmUgQUNTX1VMQ09STkVSICcrJworI2VuZGlm
CisjaWZuZGVmIEFDU19MTENPUk5FUgorI2RlZmluZSBBQ1NfTExDT1JORVIgJysnCisjZW5kaWYK
KyNpZm5kZWYgQUNTX1VSQ09STkVSCisjZGVmaW5lIEFDU19VUkNPUk5FUiAnKycKKyNlbmRpZgor
I2lmbmRlZiBBQ1NfTFJDT1JORVIKKyNkZWZpbmUgQUNTX0xSQ09STkVSICcrJworI2VuZGlmCisj
aWZuZGVmIEFDU19ITElORQorI2RlZmluZSBBQ1NfSExJTkUgJy0nCisjZW5kaWYKKyNpZm5kZWYg
QUNTX1ZMSU5FCisjZGVmaW5lIEFDU19WTElORSAnfCcKKyNlbmRpZgorI2lmbmRlZiBBQ1NfTFRF
RQorI2RlZmluZSBBQ1NfTFRFRSAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfUlRFRQorI2RlZmlu
ZSBBQ1NfUlRFRSAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfVUFSUk9XCisjZGVmaW5lIEFDU19V
QVJST1cgJ14nCisjZW5kaWYKKyNpZm5kZWYgQUNTX0RBUlJPVworI2RlZmluZSBBQ1NfREFSUk9X
ICd2JworI2VuZGlmCisKKy8qIGVycm9yIHJldHVybiBjb2RlcyAqLworI2RlZmluZSBFUlJESVNQ
TEFZVE9PU01BTEwgKEtFWV9NQVggKyAxKQorCisvKgorICogICBDb2xvciBkZWZpbml0aW9ucwor
ICovCitzdHJ1Y3QgZGlhbG9nX2NvbG9yIHsKKwljaHR5cGUgYXRyOwkvKiBDb2xvciBhdHRyaWJ1
dGUgKi8KKwlpbnQgZmc7CQkvKiBmb3JlZ3JvdW5kICovCisJaW50IGJnOwkJLyogYmFja2dyb3Vu
ZCAqLworCWludCBobDsJCS8qIGhpZ2hsaWdodCB0aGlzIGl0ZW0gKi8KK307CisKK3N0cnVjdCBz
dWJ0aXRsZV9saXN0IHsKKwlzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqbmV4dDsKKwljb25zdCBjaGFy
ICp0ZXh0OworfTsKKworc3RydWN0IGRpYWxvZ19pbmZvIHsKKwljb25zdCBjaGFyICpiYWNrdGl0
bGU7CisJc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlczsKKwlzdHJ1Y3QgZGlhbG9nX2Nv
bG9yIHNjcmVlbjsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNoYWRvdzsKKwlzdHJ1Y3QgZGlhbG9n
X2NvbG9yIGRpYWxvZzsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRpdGxlOworCXN0cnVjdCBkaWFs
b2dfY29sb3IgYm9yZGVyOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2FjdGl2ZTsKKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9pbmFjdGl2ZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9y
IGJ1dHRvbl9rZXlfYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2tleV9pbmFj
dGl2ZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9sYWJlbF9hY3RpdmU7CisJc3RydWN0
IGRpYWxvZ19jb2xvciBidXR0b25fbGFiZWxfaW5hY3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xv
ciBpbnB1dGJveDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGlucHV0Ym94X2JvcmRlcjsKKwlzdHJ1
Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJv
eF90aXRsZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveF9ib3JkZXI7CisJc3RydWN0
IGRpYWxvZ19jb2xvciBwb3NpdGlvbl9pbmRpY2F0b3I7CisJc3RydWN0IGRpYWxvZ19jb2xvciBt
ZW51Ym94OworCXN0cnVjdCBkaWFsb2dfY29sb3IgbWVudWJveF9ib3JkZXI7CisJc3RydWN0IGRp
YWxvZ19jb2xvciBpdGVtOworCXN0cnVjdCBkaWFsb2dfY29sb3IgaXRlbV9zZWxlY3RlZDsKKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZzsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19zZWxlY3Rl
ZDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19rZXk7CisJc3RydWN0IGRpYWxvZ19jb2xvciB0
YWdfa2V5X3NlbGVjdGVkOworCXN0cnVjdCBkaWFsb2dfY29sb3IgY2hlY2s7CisJc3RydWN0IGRp
YWxvZ19jb2xvciBjaGVja19zZWxlY3RlZDsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHVhcnJvdzsK
KwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGRhcnJvdzsKK307CisKKy8qCisgKiBHbG9iYWwgdmFyaWFi
bGVzCisgKi8KK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2luZm8gZGxnOworZXh0ZXJuIGNoYXIgZGlh
bG9nX2lucHV0X3Jlc3VsdFtdOworZXh0ZXJuIGludCBzYXZlZF94LCBzYXZlZF95OwkJLyogTmVl
ZGVkIGluIHNpZ25hbCBoYW5kbGVyIGluIG1jb25mLmMgKi8KKworLyoKKyAqIEZ1bmN0aW9uIHBy
b3RvdHlwZXMKKyAqLworCisvKiBpdGVtIGxpc3QgYXMgdXNlZCBieSBjaGVja2xpc3QgYW5kIG1l
bnVib3ggKi8KK3ZvaWQgaXRlbV9yZXNldCh2b2lkKTsKK3ZvaWQgaXRlbV9tYWtlKGNvbnN0IGNo
YXIgKmZtdCwgLi4uKTsKK3ZvaWQgaXRlbV9hZGRfc3RyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsK
K3ZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKTsKK3ZvaWQgaXRlbV9zZXRfZGF0YSh2b2lkICpw
KTsKK3ZvaWQgaXRlbV9zZXRfc2VsZWN0ZWQoaW50IHZhbCk7CitpbnQgaXRlbV9hY3RpdmF0ZV9z
ZWxlY3RlZCh2b2lkKTsKK3ZvaWQgKml0ZW1fZGF0YSh2b2lkKTsKK2NoYXIgaXRlbV90YWcodm9p
ZCk7CisKKy8qIGl0ZW0gbGlzdCBtYW5pcHVsYXRpb24gZm9yIGx4ZGlhbG9nIHVzZSAqLworI2Rl
ZmluZSBNQVhJVEVNU1RSIDIwMAorc3RydWN0IGRpYWxvZ19pdGVtIHsKKwljaGFyIHN0cltNQVhJ
VEVNU1RSXTsJLyogcHJvbXB0IGRpc3BsYXllZCAqLworCWNoYXIgdGFnOworCXZvaWQgKmRhdGE7
CS8qIHBvaW50ZXIgdG8gbWVudSBpdGVtIC0gdXNlZCBieSBtZW51Ym94K2NoZWNrbGlzdCAqLwor
CWludCBzZWxlY3RlZDsJLyogU2V0IHRvIDEgYnkgZGlhbG9nXyooKSBmdW5jdGlvbiBpZiBzZWxl
Y3RlZC4gKi8KK307CisKKy8qIGxpc3Qgb2YgbGlhbG9nX2l0ZW1zICovCitzdHJ1Y3QgZGlhbG9n
X2xpc3QgeworCXN0cnVjdCBkaWFsb2dfaXRlbSBub2RlOworCXN0cnVjdCBkaWFsb2dfbGlzdCAq
bmV4dDsKK307CisKK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1fY3VyOworZXh0ZXJu
IHN0cnVjdCBkaWFsb2dfbGlzdCBpdGVtX25pbDsKK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3Qg
Kml0ZW1faGVhZDsKKworaW50IGl0ZW1fY291bnQodm9pZCk7Cit2b2lkIGl0ZW1fc2V0KGludCBu
KTsKK2ludCBpdGVtX24odm9pZCk7Citjb25zdCBjaGFyICppdGVtX3N0cih2b2lkKTsKK2ludCBp
dGVtX2lzX3NlbGVjdGVkKHZvaWQpOworaW50IGl0ZW1faXNfdGFnKGNoYXIgdGFnKTsKKyNkZWZp
bmUgaXRlbV9mb3JlYWNoKCkgXAorCWZvciAoaXRlbV9jdXIgPSBpdGVtX2hlYWQgPyBpdGVtX2hl
YWQ6IGl0ZW1fY3VyOyBcCisJICAgICBpdGVtX2N1ciAmJiAoaXRlbV9jdXIgIT0gJml0ZW1fbmls
KTsgaXRlbV9jdXIgPSBpdGVtX2N1ci0+bmV4dCkKKworLyogZ2VuZXJpYyBrZXkgaGFuZGxlcnMg
Ki8KK2ludCBvbl9rZXlfZXNjKFdJTkRPVyAqd2luKTsKK2ludCBvbl9rZXlfcmVzaXplKHZvaWQp
OworCisvKiBtaW5pbXVtIChyZSlzaXplIHZhbHVlcyAqLworI2RlZmluZSBDSEVDS0xJU1RfSEVJ
R1RIX01JTiA2CS8qIEZvciBkaWFsb2dfY2hlY2tsaXN0KCkgKi8KKyNkZWZpbmUgQ0hFQ0tMSVNU
X1dJRFRIX01JTiA2CisjZGVmaW5lIElOUFVUQk9YX0hFSUdUSF9NSU4gMgkvKiBGb3IgZGlhbG9n
X2lucHV0Ym94KCkgKi8KKyNkZWZpbmUgSU5QVVRCT1hfV0lEVEhfTUlOIDIKKyNkZWZpbmUgTUVO
VUJPWF9IRUlHVEhfTUlOIDE1CS8qIEZvciBkaWFsb2dfbWVudSgpICovCisjZGVmaW5lIE1FTlVC
T1hfV0lEVEhfTUlOIDY1CisjZGVmaW5lIFRFWFRCT1hfSEVJR1RIX01JTiA4CS8qIEZvciBkaWFs
b2dfdGV4dGJveCgpICovCisjZGVmaW5lIFRFWFRCT1hfV0lEVEhfTUlOIDgKKyNkZWZpbmUgWUVT
Tk9fSEVJR1RIX01JTiA0CS8qIEZvciBkaWFsb2dfeWVzbm8oKSAqLworI2RlZmluZSBZRVNOT19X
SURUSF9NSU4gNAorI2RlZmluZSBXSU5ET1dfSEVJR1RIX01JTiAxOQkvKiBGb3IgaW5pdF9kaWFs
b2coKSAqLworI2RlZmluZSBXSU5ET1dfV0lEVEhfTUlOIDgwCisKK2ludCBpbml0X2RpYWxvZyhj
b25zdCBjaGFyICpiYWNrdGl0bGUpOwordm9pZCBzZXRfZGlhbG9nX2JhY2t0aXRsZShjb25zdCBj
aGFyICpiYWNrdGl0bGUpOwordm9pZCBzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdHJ1Y3Qgc3VidGl0
bGVfbGlzdCAqc3VidGl0bGVzKTsKK3ZvaWQgZW5kX2RpYWxvZyhpbnQgeCwgaW50IHkpOwordm9p
ZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUg
YXR0cik7Cit2b2lkIGRpYWxvZ19jbGVhcih2b2lkKTsKK3ZvaWQgcHJpbnRfYXV0b3dyYXAoV0lO
RE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0aCwgaW50IHksIGludCB4KTsK
K3ZvaWQgcHJpbnRfYnV0dG9uKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5
LCBpbnQgeCwgaW50IHNlbGVjdGVkKTsKK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2cs
IGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpOwordm9pZCBkcmF3X2JveChXSU5ET1cgKiB3
aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYm94LAorCSAg
ICAgIGNodHlwZSBib3JkZXIpOwordm9pZCBkcmF3X3NoYWRvdyhXSU5ET1cgKiB3aW4sIGludCB5
LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKKworaW50IGZpcnN0X2FscGhhKGNvbnN0
IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZXhlbXB0KTsKK2ludCBkaWFsb2dfeWVzbm8oY29u
c3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRo
KTsKK2ludCBkaWFsb2dfbXNnYm94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9t
cHQsIGludCBoZWlnaHQsCisJCSAgaW50IHdpZHRoLCBpbnQgcGF1c2UpOworCisKK3R5cGVkZWYg
dm9pZCAoKnVwZGF0ZV90ZXh0X2ZuKShjaGFyICpidWYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVu
ZCwgdm9pZAorCQkJICAgICAgICpfZGF0YSk7CitpbnQgZGlhbG9nX3RleHRib3goY29uc3QgY2hh
ciAqdGl0bGUsIGNoYXIgKnRidWYsIGludCBpbml0aWFsX2hlaWdodCwKKwkJICAgaW50IGluaXRp
YWxfd2lkdGgsIGludCAqa2V5cywgaW50ICpfdnNjcm9sbCwgaW50ICpfaHNjcm9sbCwKKwkJICAg
dXBkYXRlX3RleHRfZm4gdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpOworaW50IGRpYWxvZ19tZW51
KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCisJCWNvbnN0IHZvaWQgKnNl
bGVjdGVkLCBpbnQgKnNfc2Nyb2xsKTsKK2ludCBkaWFsb2dfY2hlY2tsaXN0KGNvbnN0IGNoYXIg
KnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsCisJCSAgICAgaW50IHdpZHRo
LCBpbnQgbGlzdF9oZWlnaHQpOworaW50IGRpYWxvZ19pbnB1dGJveChjb25zdCBjaGFyICp0aXRs
ZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkgICAgaW50IHdpZHRoLCBjb25z
dCBjaGFyICppbml0KTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIGJhc2UgZm9yIGZpY3RpdGlvdXMg
a2V5cywgd2hpY2ggYWN0aXZhdGUKKyAqIHRoZSBidXR0b25zLgorICoKKyAqIE1vdXNlLWdlbmVy
YXRlZCBrZXlzIGFyZSB0aGUgZm9sbG93aW5nOgorICogICAtLSB0aGUgZmlyc3QgMzIgYXJlIHVz
ZWQgYXMgbnVtYmVycywgaW4gYWRkaXRpb24gdG8gJzAnLSc5JworICogICAtLSB0aGUgbG93ZXJj
YXNlIGFyZSB1c2VkIHRvIHNpZ25hbCBtb3VzZS1lbnRlciBldmVudHMgKE1fRVZFTlQgKyAnbycp
CisgKiAgIC0tIHVwcGVyY2FzZSBjaGFycyBhcmUgdXNlZCB0byBpbnZva2UgdGhlIGJ1dHRvbiAo
TV9FVkVOVCArICdPJykKKyAqLworI2RlZmluZSBNX0VWRU5UIChLRVlfTUFYKzEpCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2lucHV0Ym94LmMgYi9zdXBwb3J0L2tj
b25maWcubmV3L2x4ZGlhbG9nL2lucHV0Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMWRjZmIyOAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bHhkaWFsb2cvaW5wdXRib3guYwpAQCAtMCwwICsxLDI4OSBAQAorLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjArCisvKgorICogIGlucHV0Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUg
aW5wdXQgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3Mu
Y3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlh
bSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1ZGUgImRpYWxvZy5oIgor
CitjaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbTUFYX0xFTiArIDFdOworCisvKgorICogIFByaW50
IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMo
V0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKK3sK
KwlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOworCWludCB5ID0gaGVpZ2h0IC0gMjsKKworCXByaW50
X2J1dHRvbihkaWFsb2csICIgIE9rICAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsKKwlwcmludF9i
dXR0b24oZGlhbG9nLCAiIEhlbHAgIiwgeSwgeCArIDE0LCBzZWxlY3RlZCA9PSAxKTsKKworCXdt
b3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxNCAqIHNlbGVjdGVkKTsKKwl3cmVmcmVzaChkaWFsb2cp
OworfQorCisvKgorICogRGlzcGxheSBhIGRpYWxvZyBib3ggZm9yIGlucHV0aW5nIGEgc3RyaW5n
CisgKi8KK2ludCBkaWFsb2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIg
KnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLAorCQkgICAgY29uc3QgY2hhciAqaW5pdCkK
K3sKKwlpbnQgaSwgeCwgeSwgYm94X3ksIGJveF94LCBib3hfd2lkdGg7CisJaW50IGlucHV0X3gg
PSAwLCBrZXkgPSAwLCBidXR0b24gPSAtMTsKKwlpbnQgc2hvd194LCBsZW4sIHBvczsKKwljaGFy
ICppbnN0ciA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7CisJV0lORE9XICpkaWFsb2c7CisKKwlpZiAo
IWluaXQpCisJCWluc3RyWzBdID0gJ1wwJzsKKwllbHNlCisJCXN0cmNweShpbnN0ciwgaW5pdCk7
CisKK2RvX3Jlc2l6ZToKKwlpZiAoZ2V0bWF4eShzdGRzY3IpIDw9IChoZWlnaHQgLSBJTlBVVEJP
WF9IRUlHVEhfTUlOKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisJaWYgKGdldG1h
eHgoc3Rkc2NyKSA8PSAod2lkdGggLSBJTlBVVEJPWF9XSURUSF9NSU4pKQorCQlyZXR1cm4gLUVS
UkRJU1BMQVlUT09TTUFMTDsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLwor
CXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKKwl5ID0gKGdldG1heHkoc3Rkc2Ny
KSAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdp
ZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsKKwlrZXlwYWQo
ZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwK
KwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisJd2F0dHJzZXQoZGlhbG9nLCBk
bGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRF
RSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBB
Q1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXdhZGRjaChk
aWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsK
KworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXByaW50X2F1dG93cmFwKGRp
YWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOworCisJLyogRHJhdyB0aGUgaW5wdXQgZmll
bGQgYm94ICovCisJYm94X3dpZHRoID0gd2lkdGggLSA2OworCWdldHl4KGRpYWxvZywgeSwgeCk7
CisJYm94X3kgPSB5ICsgMjsKKwlib3hfeCA9ICh3aWR0aCAtIGJveF93aWR0aCkgLyAyOworCWRy
YXdfYm94KGRpYWxvZywgeSArIDEsIGJveF94IC0gMSwgMywgYm94X3dpZHRoICsgMiwKKwkJIGRs
Zy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisKKwlwcmludF9idXR0b25zKGRpYWxvZywg
aGVpZ2h0LCB3aWR0aCwgMCk7CisKKwkvKiBTZXQgdXAgdGhlIGluaXRpYWwgdmFsdWUgKi8KKwl3
bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuaW5wdXRi
b3guYXRyKTsKKworCWxlbiA9IHN0cmxlbihpbnN0cik7CisJcG9zID0gbGVuOworCisJaWYgKGxl
biA+PSBib3hfd2lkdGgpIHsKKwkJc2hvd194ID0gbGVuIC0gYm94X3dpZHRoICsgMTsKKwkJaW5w
dXRfeCA9IGJveF93aWR0aCAtIDE7CisJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGggLSAxOyBp
KyspCisJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7CisJfSBlbHNlIHsKKwkJ
c2hvd194ID0gMDsKKwkJaW5wdXRfeCA9IGxlbjsKKwkJd2FkZHN0cihkaWFsb2csIGluc3RyKTsK
Kwl9CisKKwl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOworCisJd3JlZnJl
c2goZGlhbG9nKTsKKworCXdoaWxlIChrZXkgIT0gS0VZX0VTQykgeworCQlrZXkgPSB3Z2V0Y2go
ZGlhbG9nKTsKKworCQlpZiAoYnV0dG9uID09IC0xKSB7CS8qIElucHV0IGJveCBzZWxlY3RlZCAq
LworCQkJc3dpdGNoIChrZXkpIHsKKwkJCWNhc2UgVEFCOgorCQkJY2FzZSBLRVlfVVA6CisJCQlj
YXNlIEtFWV9ET1dOOgorCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfQkFDS1NQQUNFOgorCQkJY2Fz
ZSA4OiAgIC8qIF5IICovCisJCQljYXNlIDEyNzogLyogXj8gKi8KKwkJCQlpZiAocG9zKSB7CisJ
CQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7CisJCQkJCWlmIChpbnB1dF94
ID09IDApIHsKKwkJCQkJCXNob3dfeC0tOworCQkJCQl9IGVsc2UKKwkJCQkJCWlucHV0X3gtLTsK
KworCQkJCQlpZiAocG9zIDwgbGVuKSB7CisJCQkJCQlmb3IgKGkgPSBwb3MgLSAxOyBpIDwgbGVu
OyBpKyspIHsKKwkJCQkJCQlpbnN0cltpXSA9IGluc3RyW2krMV07CisJCQkJCQl9CisJCQkJCX0K
KworCQkJCQlwb3MtLTsKKwkJCQkJbGVuLS07CisJCQkJCWluc3RyW2xlbl0gPSAnXDAnOworCQkJ
CQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hf
d2lkdGg7IGkrKykgeworCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJCXdh
ZGRjaChkaWFsb2csICcgJyk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQl3YWRkY2go
ZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7CisJCQkJCX0KKwkJCQkJd21vdmUoZGlhbG9nLCBi
b3hfeSwgaW5wdXRfeCArIGJveF94KTsKKwkJCQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCQl9CisJ
CQkJY29udGludWU7CisJCQljYXNlIEtFWV9MRUZUOgorCQkJCWlmIChwb3MgPiAwKSB7CisJCQkJ
CWlmIChpbnB1dF94ID4gMCkgeworCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgLS1pbnB1dF94
ICsgYm94X3gpOworCQkJCQl9IGVsc2UgaWYgKGlucHV0X3ggPT0gMCkgeworCQkJCQkJc2hvd194
LS07CisJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCQlmb3IgKGkgPSAw
OyBpIDwgYm94X3dpZHRoOyBpKyspIHsKKwkJCQkJCQlpZiAoIWluc3RyW3Nob3dfeCArIGldKSB7
CisJCQkJCQkJCXdhZGRjaChkaWFsb2csICcgJyk7CisJCQkJCQkJCWJyZWFrOworCQkJCQkJCX0K
KwkJCQkJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7CisJCQkJCQl9CisJCQkJ
CQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7CisJCQkJCX0KKwkJCQkJcG9zLS07CisJCQkJ
fQorCQkJCWNvbnRpbnVlOworCQkJY2FzZSBLRVlfUklHSFQ6CisJCQkJaWYgKHBvcyA8IGxlbikg
eworCQkJCQlpZiAoaW5wdXRfeCA8IGJveF93aWR0aCAtIDEpIHsKKwkJCQkJCXdtb3ZlKGRpYWxv
ZywgYm94X3ksICsraW5wdXRfeCArIGJveF94KTsKKwkJCQkJfSBlbHNlIGlmIChpbnB1dF94ID09
IGJveF93aWR0aCAtIDEpIHsKKwkJCQkJCXNob3dfeCsrOworCQkJCQkJd21vdmUoZGlhbG9nLCBi
b3hfeSwgYm94X3gpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aDsgaSsrKSB7CisJ
CQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAn
ICcpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5z
dHJbc2hvd194ICsgaV0pOworCQkJCQkJfQorCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5w
dXRfeCArIGJveF94KTsKKwkJCQkJfQorCQkJCQlwb3MrKzsKKwkJCQl9CisJCQkJY29udGludWU7
CisJCQlkZWZhdWx0OgorCQkJCWlmIChrZXkgPCAweDEwMCAmJiBpc3ByaW50KGtleSkpIHsKKwkJ
CQkJaWYgKGxlbiA8IE1BWF9MRU4pIHsKKwkJCQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0
Ym94LmF0cik7CisJCQkJCQlpZiAocG9zIDwgbGVuKSB7CisJCQkJCQkJZm9yIChpID0gbGVuOyBp
ID4gcG9zOyBpLS0pCisJCQkJCQkJCWluc3RyW2ldID0gaW5zdHJbaS0xXTsKKwkJCQkJCQlpbnN0
cltwb3NdID0ga2V5OworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpbnN0cltsZW5dID0ga2V5Owor
CQkJCQkJfQorCQkJCQkJcG9zKys7CisJCQkJCQlsZW4rKzsKKwkJCQkJCWluc3RyW2xlbl0gPSAn
XDAnOworCisJCQkJCQlpZiAoaW5wdXRfeCA9PSBib3hfd2lkdGggLSAxKSB7CisJCQkJCQkJc2hv
d194Kys7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCWlucHV0X3grKzsKKwkJCQkJCX0KKworCQkJ
CQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IGJv
eF93aWR0aDsgaSsrKSB7CisJCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJ
CQl3YWRkY2goZGlhbG9nLCAnICcpOworCQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJ
d2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOworCQkJCQkJfQorCQkJCQkJd21vdmUo
ZGlhbG9nLCBib3hfeSwgaW5wdXRfeCArIGJveF94KTsKKwkJCQkJCXdyZWZyZXNoKGRpYWxvZyk7
CisJCQkJCX0gZWxzZQorCQkJCQkJZmxhc2goKTsJLyogQWxhcm0gdXNlciBhYm91dCBvdmVyZmxv
dyAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCX0KKwkJc3dpdGNoIChrZXkpIHsK
KwkJY2FzZSAnTyc6CisJCWNhc2UgJ28nOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1cm4g
MDsKKwkJY2FzZSAnSCc6CisJCWNhc2UgJ2gnOgorCQkJZGVsd2luKGRpYWxvZyk7CisJCQlyZXR1
cm4gMTsKKwkJY2FzZSBLRVlfVVA6CisJCWNhc2UgS0VZX0xFRlQ6CisJCQlzd2l0Y2ggKGJ1dHRv
bikgeworCQkJY2FzZSAtMToKKwkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1
dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdp
ZHRoLCAxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoKKwkJCQlidXR0b24gPSAtMTsJLyogSW5k
aWNhdGVzIGlucHV0IGJveCBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9n
LCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlu
cHV0X3gpOworCQkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJ
CQkJYnV0dG9uID0gMDsJLyogSW5kaWNhdGVzICJPSyIgYnV0dG9uIGlzIHNlbGVjdGVkICovCisJ
CQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCQkJCWJyZWFrOwor
CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgVEFCOgorCQljYXNlIEtFWV9ET1dOOgorCQljYXNlIEtF
WV9SSUdIVDoKKwkJCXN3aXRjaCAoYnV0dG9uKSB7CisJCQljYXNlIC0xOgorCQkJCWJ1dHRvbiA9
IDA7CS8qIEluZGljYXRlcyAiT0siIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1
dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMDoK
KwkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAq
LworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAxKTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgMToKKwkJCQlidXR0b24gPSAtMTsJLyogSW5kaWNhdGVzIGlucHV0IGJveCBp
cyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAw
KTsKKwkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOworCQkJCXdyZWZy
ZXNoKGRpYWxvZyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJ
CWNhc2UgJ1xuJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIChidXR0b24gPT0gLTEg
PyAwIDogYnV0dG9uKTsKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJa2V5ID0gS0VZX0VT
QzsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxv
Zyk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUkVTSVpFOgorCQkJZGVsd2luKGRpYWxvZyk7CisJ
CQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3RvIGRvX3Jlc2l6ZTsKKwkJfQorCX0KKworCWRlbHdp
bihkaWFsb2cpOworCXJldHVybiBLRVlfRVNDOwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNThjMmY4YQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bHhkaWFsb2cvbWVudWJveC5jCkBAIC0wLDAgKzEsNDI0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgbWVudWJveC5jIC0tIGltcGxlbWVudHMgdGhlIG1l
bnUgYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Vo
ay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBS
b2FkY2FwIChyb2FkY2Fwd0BjZncuY29tKQorICovCisKKy8qCisgKiAgQ2hhbmdlcyBieSBDbGlm
Zm9yZCBXb2xmIChnb2RAY2xpZmZvcmQuYXQpCisgKgorICogIFsgMTk5OC0wNi0xMyBdCisgKgor
ICogICAgKikgIEEgYnVnZml4IGZvciB0aGUgUGFnZS1Eb3duIHByb2JsZW0KKyAqCisgKiAgICAq
KSAgRm9ybWVybHkgd2hlbiBJIHVzZWQgUGFnZSBEb3duIGFuZCBQYWdlIFVwLCB0aGUgY3Vyc29y
IHdvdWxkIGJlIHNldAorICogICAgICAgIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgbWVu
dSBib3guICBOb3cgbHhkaWFsb2cgaXMgYSBiaXQKKyAqICAgICAgICBzbWFydGVyIGFuZCB3b3Jr
cyBtb3JlIGxpa2Ugb3RoZXIgbWVudSBzeXN0ZW1zIChqdXN0IGhhdmUgYSBsb29rIGF0CisgKiAg
ICAgICAgaXQpLgorICoKKyAqICAgICopICBGb3JtZXJseSBpZiBJIHNlbGVjdGVkIHNvbWV0aGlu
ZyBteSBzY3JvbGxpbmcgd291bGQgYmUgYnJva2VuIGJlY2F1c2UKKyAqICAgICAgICBseGRpYWxv
ZyBpcyByZS1pbnZva2VkIGJ5IHRoZSBNZW51Y29uZmlnIHNoZWxsIHNjcmlwdCwgY2FuJ3QKKyAq
ICAgICAgICByZW1lbWJlciB0aGUgbGFzdCBzY3JvbGxpbmcgcG9zaXRpb24sIGFuZCBqdXN0IHNl
dHMgaXQgc28gdGhhdCB0aGUKKyAqICAgICAgICBjdXJzb3IgaXMgYXQgdGhlIGJvdHRvbSBvZiB0
aGUgYm94LiAgTm93IGl0IHdyaXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUKKyAqICAgICAgICBseGRp
YWxvZy5zY3JsdG1wIHdoaWNoIGNvbnRhaW5zIHRoaXMgaW5mb3JtYXRpb24uIFRoZSBmaWxlIGlz
CisgKiAgICAgICAgZGVsZXRlZCBieSBseGRpYWxvZyBpZiB0aGUgdXNlciBsZWF2ZXMgYSBzdWJt
ZW51IG9yIGVudGVycyBhIG5ldworICogICAgICAgIG9uZSwgYnV0IGl0IHdvdWxkIGJlIG5pY2Ug
aWYgTWVudWNvbmZpZyBjb3VsZCBtYWtlIGFub3RoZXIgInJtIC1mIgorICogICAgICAgIGp1c3Qg
dG8gYmUgc3VyZS4gIEp1c3QgdHJ5IGl0IG91dCAtIHlvdSB3aWxsIHJlY29nbmlzZSBhIGRpZmZl
cmVuY2UhCisgKgorICogIFsgMTk5OC0wNi0xNCBdCisgKgorICogICAgKikgIE5vdyBseGRpYWxv
ZyBpcyBjcmFzaC1zYWZlIGFnYWluc3QgYnJva2VuICJseGRpYWxvZy5zY3JsdG1wIiBmaWxlcwor
ICogICAgICAgIGFuZCBtZW51cyBjaGFuZ2UgdGhlaXIgc2l6ZSBvbiB0aGUgZmx5LgorICoKKyAq
ICAgICopICBJZiBmb3Igc29tZSByZWFzb24gdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9uIGlz
IG5vdCBzYXZlZCBieQorICogICAgICAgIGx4ZGlhbG9nLCBpdCBzZXRzIHRoZSBzY3JvbGxpbmcg
c28gdGhhdCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBpbiB0aGUKKyAqICAgICAgICBtaWRkbGUgb2Yg
dGhlIG1lbnUgYm94LCBub3QgYXQgdGhlIGJvdHRvbS4KKyAqCisgKiAwMiBKYW51YXJ5IDE5OTks
IE1pY2hhZWwgRWxpemFiZXRoIENoYXN0YWluIChtZWNAc2hvdXQubmV0KQorICogUmVzZXQgJ3Nj
cm9sbCcgdG8gMCBpZiB0aGUgdmFsdWUgZnJvbSBseGRpYWxvZy5zY3JsdG1wIGlzIGJvZ3VzLgor
ICogVGhpcyBmaXhlcyBhIGJ1ZyBpbiBNZW51Y29uZmlnIHdoZXJlIHVzaW5nICcgJyB0byBkZXNj
ZW5kIGludG8gbWVudXMKKyAqIHdvdWxkIGxlYXZlIG1pcy1zeW5jaHJvbml6ZWQgbHhkaWFsb2cu
c2NybHRtcCBmaWxlcyBseWluZyBhcm91bmQsCisgKiBmc2NhbmYgd291bGQgcmVhZCBpbiAnc2Ny
b2xsJywgYW5kIGV2ZW50dWFsbHkgdGhhdCB2YWx1ZSB3b3VsZCBnZXQgdXNlZC4KKyAqLworCisj
aW5jbHVkZSAiZGlhbG9nLmgiCisKK3N0YXRpYyBpbnQgbWVudV93aWR0aCwgaXRlbV94OworCisv
KgorICogUHJpbnQgbWVudSBpdGVtCisgKi8KK3N0YXRpYyB2b2lkIGRvX3ByaW50X2l0ZW0oV0lO
RE9XICogd2luLCBjb25zdCBjaGFyICppdGVtLCBpbnQgbGluZV95LAorCQkJICBpbnQgc2VsZWN0
ZWQsIGludCBob3RrZXkpCit7CisJaW50IGo7CisJY2hhciAqbWVudV9pdGVtID0gbWFsbG9jKG1l
bnVfd2lkdGggKyAxKTsKKworCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0g
aXRlbV94KTsKKwltZW51X2l0ZW1bbWVudV93aWR0aCAtIGl0ZW1feF0gPSAnXDAnOworCWogPSBm
aXJzdF9hbHBoYShtZW51X2l0ZW0sICJZeU5uTW1IaCIpOworCisJLyogQ2xlYXIgJ3Jlc2lkdWUn
IG9mIGxhc3QgaXRlbSAqLworCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsKKwl3bW92
ZSh3aW4sIGxpbmVfeSwgMCk7CisjaWYgT0xEX05DVVJTRVMKKwl7CisJCWludCBpOworCQlmb3Ig
KGkgPSAwOyBpIDwgbWVudV93aWR0aDsgaSsrKQorCQkJd2FkZGNoKHdpbiwgJyAnKTsKKwl9Cisj
ZWxzZQorCXdjbHJ0b2VvbCh3aW4pOworI2VuZGlmCisJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/
IGRsZy5pdGVtX3NlbGVjdGVkLmF0ciA6IGRsZy5pdGVtLmF0cik7CisJbXZ3YWRkc3RyKHdpbiwg
bGluZV95LCBpdGVtX3gsIG1lbnVfaXRlbSk7CisJaWYgKGhvdGtleSkgeworCQl3YXR0cnNldCh3
aW4sIHNlbGVjdGVkID8gZGxnLnRhZ19rZXlfc2VsZWN0ZWQuYXRyCisJCQkgOiBkbGcudGFnX2tl
eS5hdHIpOworCQltdndhZGRjaCh3aW4sIGxpbmVfeSwgaXRlbV94ICsgaiwgbWVudV9pdGVtW2pd
KTsKKwl9CisJaWYgKHNlbGVjdGVkKSB7CisJCXdtb3ZlKHdpbiwgbGluZV95LCBpdGVtX3ggKyAx
KTsKKwl9CisJZnJlZShtZW51X2l0ZW0pOworCXdyZWZyZXNoKHdpbik7Cit9CisKKyNkZWZpbmUg
cHJpbnRfaXRlbShpbmRleCwgY2hvaWNlLCBzZWxlY3RlZCkJCQkJXAorZG8gewkJCQkJCQkJCVwK
KwlpdGVtX3NldChpbmRleCk7CQkJCQkJXAorCWRvX3ByaW50X2l0ZW0obWVudSwgaXRlbV9zdHIo
KSwgY2hvaWNlLCBzZWxlY3RlZCwgIWl0ZW1faXNfdGFnKCc6JykpOyBcCit9IHdoaWxlICgwKQor
CisvKgorICogUHJpbnQgdGhlIHNjcm9sbCBpbmRpY2F0b3JzLgorICovCitzdGF0aWMgdm9pZCBw
cmludF9hcnJvd3MoV0lORE9XICogd2luLCBpbnQgaXRlbV9ubywgaW50IHNjcm9sbCwgaW50IHks
IGludCB4LAorCQkJIGludCBoZWlnaHQpCit7CisJaW50IGN1cl95LCBjdXJfeDsKKworCWdldHl4
KHdpbiwgY3VyX3ksIGN1cl94KTsKKworCXdtb3ZlKHdpbiwgeSwgeCk7CisKKwlpZiAoc2Nyb2xs
ID4gMCkgeworCQl3YXR0cnNldCh3aW4sIGRsZy51YXJyb3cuYXRyKTsKKwkJd2FkZGNoKHdpbiwg
QUNTX1VBUlJPVyk7CisJCXdhZGRzdHIod2luLCAiKC0pIik7CisJfSBlbHNlIHsKKwkJd2F0dHJz
ZXQod2luLCBkbGcubWVudWJveC5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3
YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOworCQl3YWRk
Y2god2luLCBBQ1NfSExJTkUpOworCX0KKworCXkgPSB5ICsgaGVpZ2h0ICsgMTsKKwl3bW92ZSh3
aW4sIHksIHgpOworCXdyZWZyZXNoKHdpbik7CisKKwlpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYm
IChzY3JvbGwgKyBoZWlnaHQgPCBpdGVtX25vKSkgeworCQl3YXR0cnNldCh3aW4sIGRsZy5kYXJy
b3cuYXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0RBUlJPVyk7CisJCXdhZGRzdHIod2luLCAiKCsp
Iik7CisJfSBlbHNlIHsKKwkJd2F0dHJzZXQod2luLCBkbGcubWVudWJveF9ib3JkZXIuYXRyKTsK
KwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJ
d2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwl9CisK
Kwl3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7CisJd3JlZnJlc2god2luKTsKK30KKworLyoKKyAq
IERpc3BsYXkgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMuCisgKi8KK3N0YXRpYyB2b2lkIHByaW50
X2J1dHRvbnMoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3Rl
ZCkKK3sKKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDI4OworCWludCB5ID0gaGVpZ2h0IC0gMjsKKwor
CXByaW50X2J1dHRvbih3aW4sICJTZWxlY3QiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIEV4aXQgIiwgeSwgeCArIDEyLCBzZWxlY3RlZCA9PSAxKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIEhlbHAgIiwgeSwgeCArIDI0LCBzZWxlY3RlZCA9PSAyKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIFNhdmUgIiwgeSwgeCArIDM2LCBzZWxlY3RlZCA9PSAzKTsKKwlwcmlu
dF9idXR0b24od2luLCAiIExvYWQgIiwgeSwgeCArIDQ4LCBzZWxlY3RlZCA9PSA0KTsKKworCXdt
b3ZlKHdpbiwgeSwgeCArIDEgKyAxMiAqIHNlbGVjdGVkKTsKKwl3cmVmcmVzaCh3aW4pOworfQor
CisvKiBzY3JvbGwgdXAgbiBsaW5lcyAobiBtYXkgYmUgbmVnYXRpdmUpICovCitzdGF0aWMgdm9p
ZCBkb19zY3JvbGwoV0lORE9XICp3aW4sIGludCAqc2Nyb2xsLCBpbnQgbikKK3sKKwkvKiBTY3Jv
bGwgbWVudSB1cCAqLworCXNjcm9sbG9rKHdpbiwgVFJVRSk7CisJd3Njcmwod2luLCBuKTsKKwlz
Y3JvbGxvayh3aW4sIEZBTFNFKTsKKwkqc2Nyb2xsID0gKnNjcm9sbCArIG47CisJd3JlZnJlc2go
d2luKTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBtZW51IGZvciBjaG9vc2luZyBhbW9uZyBhIG51
bWJlciBvZiBvcHRpb25zCisgKi8KK2ludCBkaWFsb2dfbWVudShjb25zdCBjaGFyICp0aXRsZSwg
Y29uc3QgY2hhciAqcHJvbXB0LAorCQljb25zdCB2b2lkICpzZWxlY3RlZCwgaW50ICpzX3Njcm9s
bCkKK3sKKwlpbnQgaSwgaiwgeCwgeSwgYm94X3gsIGJveF95OworCWludCBoZWlnaHQsIHdpZHRo
LCBtZW51X2hlaWdodDsKKwlpbnQga2V5ID0gMCwgYnV0dG9uID0gMCwgc2Nyb2xsID0gMCwgY2hv
aWNlID0gMDsKKwlpbnQgZmlyc3RfaXRlbSA9ICAwLCBtYXhfY2hvaWNlOworCVdJTkRPVyAqZGlh
bG9nLCAqbWVudTsKKworZG9fcmVzaXplOgorCWhlaWdodCA9IGdldG1heHkoc3Rkc2NyKTsKKwl3
aWR0aCA9IGdldG1heHgoc3Rkc2NyKTsKKwlpZiAoaGVpZ2h0IDwgTUVOVUJPWF9IRUlHVEhfTUlO
IHx8IHdpZHRoIDwgTUVOVUJPWF9XSURUSF9NSU4pCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NN
QUxMOworCisJaGVpZ2h0IC09IDQ7CisJd2lkdGggIC09IDU7CisJbWVudV9oZWlnaHQgPSBoZWln
aHQgLSAxMDsKKworCW1heF9jaG9pY2UgPSBNSU4obWVudV9oZWlnaHQsIGl0ZW1fY291bnQoKSk7
CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKGdldG1heHgoc3Rk
c2NyKSAtIHdpZHRoKSAvIDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsK
KworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cg
PSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisK
KwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0
ciwgZGxnLmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOwor
CW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7
IGkgPCB3aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0
cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YmtnZHNldChkaWFsb2csIGRsZy5kaWFs
b2cuYXRyICYgQV9DT0xPUik7CisJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOworCisJcHJpbnRf
dGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOworCisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlh
bG9nLmF0cik7CisJcHJpbnRfYXV0b3dyYXAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwg
Myk7CisKKwltZW51X3dpZHRoID0gd2lkdGggLSA2OworCWJveF95ID0gaGVpZ2h0IC0gbWVudV9o
ZWlnaHQgLSA1OworCWJveF94ID0gKHdpZHRoIC0gbWVudV93aWR0aCkgLyAyIC0gMTsKKworCS8q
IGNyZWF0ZSBuZXcgd2luZG93IGZvciB0aGUgbWVudSAqLworCW1lbnUgPSBzdWJ3aW4oZGlhbG9n
LCBtZW51X2hlaWdodCwgbWVudV93aWR0aCwKKwkJICAgICAgeSArIGJveF95ICsgMSwgeCArIGJv
eF94ICsgMSk7CisJa2V5cGFkKG1lbnUsIFRSVUUpOworCisJLyogZHJhdyBhIGJveCBhcm91bmQg
dGhlIG1lbnUgaXRlbXMgKi8KKwlkcmF3X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbWVudV9o
ZWlnaHQgKyAyLCBtZW51X3dpZHRoICsgMiwKKwkJIGRsZy5tZW51Ym94X2JvcmRlci5hdHIsIGRs
Zy5tZW51Ym94LmF0cik7CisKKwlpZiAobWVudV93aWR0aCA+PSA4MCkKKwkJaXRlbV94ID0gKG1l
bnVfd2lkdGggLSA3MCkgLyAyOworCWVsc2UKKwkJaXRlbV94ID0gNDsKKworCS8qIFNldCBjaG9p
Y2UgdG8gZGVmYXVsdCBpdGVtICovCisJaXRlbV9mb3JlYWNoKCkKKwkJaWYgKHNlbGVjdGVkICYm
IChzZWxlY3RlZCA9PSBpdGVtX2RhdGEoKSkpCisJCQljaG9pY2UgPSBpdGVtX24oKTsKKwkvKiBn
ZXQgdGhlIHNhdmVkIHNjcm9sbCBpbmZvICovCisJc2Nyb2xsID0gKnNfc2Nyb2xsOworCWlmICgo
c2Nyb2xsIDw9IGNob2ljZSkgJiYgKHNjcm9sbCArIG1heF9jaG9pY2UgPiBjaG9pY2UpICYmCisJ
ICAgKHNjcm9sbCA+PSAwKSAmJiAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8PSBpdGVtX2NvdW50KCkp
KSB7CisJCWZpcnN0X2l0ZW0gPSBzY3JvbGw7CisJCWNob2ljZSA9IGNob2ljZSAtIHNjcm9sbDsK
Kwl9IGVsc2UgeworCQlzY3JvbGwgPSAwOworCX0KKwlpZiAoKGNob2ljZSA+PSBtYXhfY2hvaWNl
KSkgeworCQlpZiAoY2hvaWNlID49IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2UgLyAyKQorCQkJ
c2Nyb2xsID0gZmlyc3RfaXRlbSA9IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2U7CisJCWVsc2UK
KwkJCXNjcm9sbCA9IGZpcnN0X2l0ZW0gPSBjaG9pY2UgLSBtYXhfY2hvaWNlIC8gMjsKKwkJY2hv
aWNlID0gY2hvaWNlIC0gc2Nyb2xsOworCX0KKworCS8qIFByaW50IHRoZSBtZW51ICovCisJZm9y
IChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQlwcmludF9pdGVtKGZpcnN0X2l0ZW0g
KyBpLCBpLCBpID09IGNob2ljZSk7CisJfQorCisJd25vdXRyZWZyZXNoKG1lbnUpOworCisJcHJp
bnRfYXJyb3dzKGRpYWxvZywgaXRlbV9jb3VudCgpLCBzY3JvbGwsCisJCSAgICAgYm94X3ksIGJv
eF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2cs
IGhlaWdodCwgd2lkdGgsIDApOworCXdtb3ZlKG1lbnUsIGNob2ljZSwgaXRlbV94ICsgMSk7CisJ
d3JlZnJlc2gobWVudSk7CisKKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKKwkJa2V5ID0gd2dl
dGNoKG1lbnUpOworCisJCWlmIChrZXkgPCAyNTYgJiYgaXNhbHBoYShrZXkpKQorCQkJa2V5ID0g
dG9sb3dlcihrZXkpOworCisJCWlmIChzdHJjaHIoInlubWgiLCBrZXkpKQorCQkJaSA9IG1heF9j
aG9pY2U7CisJCWVsc2UgeworCQkJZm9yIChpID0gY2hvaWNlICsgMTsgaSA8IG1heF9jaG9pY2U7
IGkrKykgeworCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGkpOworCQkJCWogPSBmaXJzdF9hbHBoYShp
dGVtX3N0cigpLCAiWXlObk1tSGgiKTsKKwkJCQlpZiAoa2V5ID09IHRvbG93ZXIoaXRlbV9zdHIo
KVtqXSkpCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPT0gbWF4X2Nob2ljZSkKKwkJCQlm
b3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7CisJCQkJCWl0ZW1fc2V0KHNjcm9sbCAr
IGkpOworCQkJCQlqID0gZmlyc3RfYWxwaGEoaXRlbV9zdHIoKSwgIll5Tm5NbUhoIik7CisJCQkJ
CWlmIChrZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pdKSkKKwkJCQkJCWJyZWFrOworCQkJCX0K
KwkJfQorCisJCWlmIChpdGVtX2NvdW50KCkgIT0gMCAmJgorCQkgICAgKGkgPCBtYXhfY2hvaWNl
IHx8CisJCSAgICAga2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gS0VZX0RPV04gfHwKKwkJICAgICBr
ZXkgPT0gJy0nIHx8IGtleSA9PSAnKycgfHwKKwkJICAgICBrZXkgPT0gS0VZX1BQQUdFIHx8IGtl
eSA9PSBLRVlfTlBBR0UpKSB7CisJCQkvKiBSZW1vdmUgaGlnaGxpZ3Qgb2YgY3VycmVudCBpdGVt
ICovCisJCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBGQUxTRSk7CisKKwkJ
CWlmIChrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSAnLScpIHsKKwkJCQlpZiAoY2hvaWNlIDwgMiAm
JiBzY3JvbGwpIHsKKwkJCQkJLyogU2Nyb2xsIG1lbnUgZG93biAqLworCQkJCQlkb19zY3JvbGwo
bWVudSwgJnNjcm9sbCwgLTEpOworCisJCQkJCXByaW50X2l0ZW0oc2Nyb2xsLCAwLCBGQUxTRSk7
CisJCQkJfSBlbHNlCisJCQkJCWNob2ljZSA9IE1BWChjaG9pY2UgLSAxLCAwKTsKKworCQkJfSBl
bHNlIGlmIChrZXkgPT0gS0VZX0RPV04gfHwga2V5ID09ICcrJykgeworCQkJCXByaW50X2l0ZW0o
c2Nyb2xsK2Nob2ljZSwgY2hvaWNlLCBGQUxTRSk7CisKKwkJCQlpZiAoKGNob2ljZSA+IG1heF9j
aG9pY2UgLSAzKSAmJgorCQkJCSAgICAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8IGl0ZW1fY291bnQo
KSkpIHsKKwkJCQkJLyogU2Nyb2xsIG1lbnUgdXAgKi8KKwkJCQkJZG9fc2Nyb2xsKG1lbnUsICZz
Y3JvbGwsIDEpOworCisJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UgLSAxLAorCQkJ
CQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsKKwkJCQl9IGVsc2UKKwkJCQkJY2hvaWNlID0g
TUlOKGNob2ljZSArIDEsIG1heF9jaG9pY2UgLSAxKTsKKworCQkJfSBlbHNlIGlmIChrZXkgPT0g
S0VZX1BQQUdFKSB7CisJCQkJc2Nyb2xsb2sobWVudSwgVFJVRSk7CisJCQkJZm9yIChpID0gMDsg
KGkgPCBtYXhfY2hvaWNlKTsgaSsrKSB7CisJCQkJCWlmIChzY3JvbGwgPiAwKSB7CisJCQkJCQlk
b19zY3JvbGwobWVudSwgJnNjcm9sbCwgLTEpOworCQkJCQkJcHJpbnRfaXRlbShzY3JvbGwsIDAs
IEZBTFNFKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmIChjaG9pY2UgPiAwKQorCQkJCQkJCWNo
b2ljZS0tOworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfTlBBR0Up
IHsKKwkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsKKwkJCQkJaWYgKHNj
cm9sbCArIG1heF9jaG9pY2UgPCBpdGVtX2NvdW50KCkpIHsKKwkJCQkJCWRvX3Njcm9sbChtZW51
LCAmc2Nyb2xsLCAxKTsKKwkJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UtMSwKKwkJ
CQkJCQkgICBtYXhfY2hvaWNlIC0gMSwgRkFMU0UpOworCQkJCQl9IGVsc2UgeworCQkJCQkJaWYg
KGNob2ljZSArIDEgPCBtYXhfY2hvaWNlKQorCQkJCQkJCWNob2ljZSsrOworCQkJCQl9CisJCQkJ
fQorCQkJfSBlbHNlCisJCQkJY2hvaWNlID0gaTsKKworCQkJcHJpbnRfaXRlbShzY3JvbGwgKyBj
aG9pY2UsIGNob2ljZSwgVFJVRSk7CisKKwkJCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fY291
bnQoKSwgc2Nyb2xsLAorCQkJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9o
ZWlnaHQpOworCisJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCXdyZWZyZXNoKG1lbnUpOwor
CisJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KKwkJfQorCisJ
CXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgS0VZX0xFRlQ6CisJCWNhc2UgVEFCOgorCQljYXNlIEtF
WV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1
dHRvbikgPCAwKQorCQkJICAgID8gNCA6IChidXR0b24gPiA0ID8gMCA6IGJ1dHRvbik7CisKKwkJ
CXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOworCQkJd3JlZnJl
c2gobWVudSk7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJCWNhc2UgJ3MnOgorCQljYXNlICd5
JzoKKwkJY2FzZSAnbic6CisJCWNhc2UgJ20nOgorCQljYXNlICcvJzoKKwkJY2FzZSAnaCc6CisJ
CWNhc2UgJz8nOgorCQljYXNlICd6JzoKKwkJY2FzZSAnXG4nOgorCQkJLyogc2F2ZSBzY3JvbGwg
aW5mbyAqLworCQkJKnNfc2Nyb2xsID0gc2Nyb2xsOworCQkJZGVsd2luKG1lbnUpOworCQkJZGVs
d2luKGRpYWxvZyk7CisJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOworCQkJaXRlbV9zZXRf
c2VsZWN0ZWQoMSk7CisJCQlzd2l0Y2ggKGtleSkgeworCQkJY2FzZSAnaCc6CisJCQljYXNlICc/
JzoKKwkJCQlyZXR1cm4gMjsKKwkJCWNhc2UgJ3MnOgorCQkJY2FzZSAneSc6CisJCQkJcmV0dXJu
IDU7CisJCQljYXNlICduJzoKKwkJCQlyZXR1cm4gNjsKKwkJCWNhc2UgJ20nOgorCQkJCXJldHVy
biA3OworCQkJY2FzZSAnICc6CisJCQkJcmV0dXJuIDg7CisJCQljYXNlICcvJzoKKwkJCQlyZXR1
cm4gOTsKKwkJCWNhc2UgJ3onOgorCQkJCXJldHVybiAxMDsKKwkJCWNhc2UgJ1xuJzoKKwkJCQly
ZXR1cm4gYnV0dG9uOworCQkJfQorCQkJcmV0dXJuIDA7CisJCWNhc2UgJ2UnOgorCQljYXNlICd4
JzoKKwkJCWtleSA9IEtFWV9FU0M7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJa2V5
ID0gb25fa2V5X2VzYyhtZW51KTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SRVNJWkU6CisJCQlv
bl9rZXlfcmVzaXplKCk7CisJCQlkZWx3aW4obWVudSk7CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJ
CWdvdG8gZG9fcmVzaXplOworCQl9CisJfQorCWRlbHdpbihtZW51KTsKKwlkZWx3aW4oZGlhbG9n
KTsKKwlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9s
eGRpYWxvZy90ZXh0Ym94LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUz
MzliMQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4
dGJveC5jCkBAIC0wLDAgKzEsMzk1IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMCsKKy8qCisgKiAgdGV4dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIHRleHQgYm94CisgKgor
ICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBN
T0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2Fk
Y2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1ZGUgImRpYWxvZy5oIgorCitzdGF0aWMgdm9pZCBi
YWNrX2xpbmVzKGludCBuKTsKK3N0YXRpYyB2b2lkIHByaW50X3BhZ2UoV0lORE9XICp3aW4sIGlu
dCBoZWlnaHQsIGludCB3aWR0aCwgdXBkYXRlX3RleHRfZm4KKwkJICAgICAgIHVwZGF0ZV90ZXh0
LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoV0lORE9XICp3aW4sIGludCBy
b3csIGludCB3aWR0aCk7CitzdGF0aWMgY2hhciAqZ2V0X2xpbmUodm9pZCk7CitzdGF0aWMgdm9p
ZCBwcmludF9wb3NpdGlvbihXSU5ET1cgKiB3aW4pOworCitzdGF0aWMgaW50IGhzY3JvbGw7Citz
dGF0aWMgaW50IGJlZ2luX3JlYWNoZWQsIGVuZF9yZWFjaGVkLCBwYWdlX2xlbmd0aDsKK3N0YXRp
YyBjaGFyICpidWY7CitzdGF0aWMgY2hhciAqcGFnZTsKKworLyoKKyAqIHJlZnJlc2ggd2luZG93
IGNvbnRlbnQKKyAqLworc3RhdGljIHZvaWQgcmVmcmVzaF90ZXh0X2JveChXSU5ET1cgKmRpYWxv
ZywgV0lORE9XICpib3gsIGludCBib3hoLCBpbnQgYm94dywKKwkJCSAgICAgaW50IGN1cl95LCBp
bnQgY3VyX3gsIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LAorCQkJICAgICB2b2lkICpkYXRh
KQoreworCXByaW50X3BhZ2UoYm94LCBib3hoLCBib3h3LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJ
cHJpbnRfcG9zaXRpb24oZGlhbG9nKTsKKwl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8q
IFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uICovCisJd3JlZnJlc2goZGlhbG9nKTsKK30KKworCisv
KgorICogRGlzcGxheSB0ZXh0IGZyb20gYSBmaWxlIGluIGEgZGlhbG9nIGJveC4KKyAqCisgKiBr
ZXlzIGlzIGEgbnVsbC10ZXJtaW5hdGVkIGFycmF5CisgKiB1cGRhdGVfdGV4dCgpIG1heSBub3Qg
YWRkIG9yIHJlbW92ZSBhbnkgJ1xuJyBvciAnXDAnIGluIHRidWYKKyAqLworaW50IGRpYWxvZ190
ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjaGFyICp0YnVmLCBpbnQgaW5pdGlhbF9oZWlnaHQs
CisJCSAgIGludCBpbml0aWFsX3dpZHRoLCBpbnQgKmtleXMsIGludCAqX3ZzY3JvbGwsIGludCAq
X2hzY3JvbGwsCisJCSAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKQor
eworCWludCBpLCB4LCB5LCBjdXJfeCwgY3VyX3ksIGtleSA9IDA7CisJaW50IGhlaWdodCwgd2lk
dGgsIGJveGgsIGJveHc7CisJV0lORE9XICpkaWFsb2csICpib3g7CisJYm9vbCBkb25lID0gZmFs
c2U7CisKKwliZWdpbl9yZWFjaGVkID0gMTsKKwllbmRfcmVhY2hlZCA9IDA7CisJcGFnZV9sZW5n
dGggPSAwOworCWhzY3JvbGwgPSAwOworCWJ1ZiA9IHRidWY7CisJcGFnZSA9IGJ1ZjsJLyogcGFn
ZSBpcyBwb2ludGVyIHRvIHN0YXJ0IG9mIHBhZ2UgdG8gYmUgZGlzcGxheWVkICovCisKKwlpZiAo
X3ZzY3JvbGwgJiYgKl92c2Nyb2xsKSB7CisJCWJlZ2luX3JlYWNoZWQgPSAwOworCisJCWZvciAo
aSA9IDA7IGkgPCAqX3ZzY3JvbGw7IGkrKykKKwkJCWdldF9saW5lKCk7CisJfQorCWlmIChfaHNj
cm9sbCkKKwkJaHNjcm9sbCA9ICpfaHNjcm9sbDsKKworZG9fcmVzaXplOgorCWdldG1heHl4KHN0
ZHNjciwgaGVpZ2h0LCB3aWR0aCk7CisJaWYgKGhlaWdodCA8IFRFWFRCT1hfSEVJR1RIX01JTiB8
fCB3aWR0aCA8IFRFWFRCT1hfV0lEVEhfTUlOKQorCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFM
TDsKKwlpZiAoaW5pdGlhbF9oZWlnaHQgIT0gMCkKKwkJaGVpZ2h0ID0gaW5pdGlhbF9oZWlnaHQ7
CisJZWxzZQorCQlpZiAoaGVpZ2h0ID4gNCkKKwkJCWhlaWdodCAtPSA0OworCQllbHNlCisJCQlo
ZWlnaHQgPSAwOworCWlmIChpbml0aWFsX3dpZHRoICE9IDApCisJCXdpZHRoID0gaW5pdGlhbF93
aWR0aDsKKwllbHNlCisJCWlmICh3aWR0aCA+IDUpCisJCQl3aWR0aCAtPSA1OworCQllbHNlCisJ
CQl3aWR0aCA9IDA7CisKKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0g
KGdldG1heHgoc3Rkc2NyKSAtIHdpZHRoKSAvIDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBo
ZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7
CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxv
ZywgVFJVRSk7CisKKwkvKiBDcmVhdGUgd2luZG93IGZvciBib3ggcmVnaW9uLCB1c2VkIGZvciBz
Y3JvbGxpbmcgdGV4dCAqLworCWJveGggPSBoZWlnaHQgLSA0OworCWJveHcgPSB3aWR0aCAtIDI7
CisJYm94ID0gc3Vid2luKGRpYWxvZywgYm94aCwgYm94dywgeSArIDEsIHggKyAxKTsKKwl3YXR0
cnNldChib3gsIGRsZy5kaWFsb2cuYXRyKTsKKwl3YmtnZHNldChib3gsIGRsZy5kaWFsb2cuYXRy
ICYgQV9DT0xPUik7CisKKwlrZXlwYWQoYm94LCBUUlVFKTsKKworCS8qIHJlZ2lzdGVyIHRoZSBu
ZXcgd2luZG93LCBhbG9uZyB3aXRoIGl0cyBib3JkZXJzICovCisJZHJhd19ib3goZGlhbG9nLCAw
LCAwLCBoZWlnaHQsIHdpZHRoLAorCQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsK
KworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2FkZGNoKGRpYWxvZywg
aGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkr
KykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5k
aWFsb2cuYXRyKTsKKwl3YmtnZHNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7
CisJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOworCisJcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRs
ZSwgd2lkdGgpOworCisJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiBFeGl0ICIsIGhlaWdodCAtIDIs
IHdpZHRoIC8gMiAtIDQsIFRSVUUpOworCXdub3V0cmVmcmVzaChkaWFsb2cpOworCWdldHl4KGRp
YWxvZywgY3VyX3ksIGN1cl94KTsJLyogU2F2ZSBjdXJzb3IgcG9zaXRpb24gKi8KKworCS8qIFBy
aW50IGZpcnN0IHBhZ2Ugb2YgdGV4dCAqLworCWF0dHJfY2xlYXIoYm94LCBib3hoLCBib3h3LCBk
bGcuZGlhbG9nLmF0cik7CisJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94
dywgY3VyX3ksIGN1cl94LCB1cGRhdGVfdGV4dCwKKwkJCSBkYXRhKTsKKworCXdoaWxlICghZG9u
ZSkgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKwkJc3dpdGNoIChrZXkpIHsKKwkJY2FzZSAn
RSc6CS8qIEV4aXQgKi8KKwkJY2FzZSAnZSc6CisJCWNhc2UgJ1gnOgorCQljYXNlICd4JzoKKwkJ
Y2FzZSAncSc6CisJCWNhc2UgJ1xuJzoKKwkJCWRvbmUgPSB0cnVlOworCQkJYnJlYWs7CisJCWNh
c2UgJ2cnOgkvKiBGaXJzdCBwYWdlICovCisJCWNhc2UgS0VZX0hPTUU6CisJCQlpZiAoIWJlZ2lu
X3JlYWNoZWQpIHsKKwkJCQliZWdpbl9yZWFjaGVkID0gMTsKKwkJCQlwYWdlID0gYnVmOworCQkJ
CXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsCisJCQkJCQkgY3VyX3ks
IGN1cl94LCB1cGRhdGVfdGV4dCwKKwkJCQkJCSBkYXRhKTsKKwkJCX0KKwkJCWJyZWFrOworCQlj
YXNlICdHJzoJLyogTGFzdCBwYWdlICovCisJCWNhc2UgS0VZX0VORDoKKworCQkJZW5kX3JlYWNo
ZWQgPSAxOworCQkJLyogcG9pbnQgdG8gbGFzdCBjaGFyIGluIGJ1ZiAqLworCQkJcGFnZSA9IGJ1
ZiArIHN0cmxlbihidWYpOworCQkJYmFja19saW5lcyhib3hoKTsKKwkJCXJlZnJlc2hfdGV4dF9i
b3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0ZV90
ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICdLJzoJLyogUHJldmlvdXMgbGluZSAqLwor
CQljYXNlICdrJzoKKwkJY2FzZSBLRVlfVVA6CisJCQlpZiAoYmVnaW5fcmVhY2hlZCkKKwkJCQli
cmVhazsKKworCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCArIDEpOworCQkJcmVmcmVzaF90ZXh0
X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksCisJCQkJCSBjdXJfeCwgdXBkYXRl
X3RleHQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgJ0InOgkvKiBQcmV2aW91cyBwYWdlICov
CisJCWNhc2UgJ2InOgorCQljYXNlICd1JzoKKwkJY2FzZSBLRVlfUFBBR0U6CisJCQlpZiAoYmVn
aW5fcmVhY2hlZCkKKwkJCQlicmVhazsKKwkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGggKyBib3ho
KTsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAor
CQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICdKJzoJ
LyogTmV4dCBsaW5lICovCisJCWNhc2UgJ2onOgorCQljYXNlIEtFWV9ET1dOOgorCQkJaWYgKGVu
ZF9yZWFjaGVkKQorCQkJCWJyZWFrOworCisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoIC0gMSk7
CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwKKwkJ
CQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfTlBB
R0U6CS8qIE5leHQgcGFnZSAqLworCQljYXNlICcgJzoKKwkJY2FzZSAnZCc6CisJCQlpZiAoZW5k
X3JlYWNoZWQpCisJCQkJYnJlYWs7CisKKwkJCWJlZ2luX3JlYWNoZWQgPSAwOworCQkJcmVmcmVz
aF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksCisJCQkJCSBjdXJfeCwg
dXBkYXRlX3RleHQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgJzAnOgkvKiBCZWdpbm5pbmcg
b2YgbGluZSAqLworCQljYXNlICdIJzoJLyogU2Nyb2xsIGxlZnQgKi8KKwkJY2FzZSAnaCc6CisJ
CWNhc2UgS0VZX0xFRlQ6CisJCQlpZiAoaHNjcm9sbCA8PSAwKQorCQkJCWJyZWFrOworCisJCQlp
ZiAoa2V5ID09ICcwJykKKwkJCQloc2Nyb2xsID0gMDsKKwkJCWVsc2UKKwkJCQloc2Nyb2xsLS07
CisJCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovCisJ
CQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsKKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBi
b3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsK
KwkJCWJyZWFrOworCQljYXNlICdMJzoJLyogU2Nyb2xsIHJpZ2h0ICovCisJCWNhc2UgJ2wnOgor
CQljYXNlIEtFWV9SSUdIVDoKKwkJCWlmIChoc2Nyb2xsID49IE1BWF9MRU4pCisJCQkJYnJlYWs7
CisJCQloc2Nyb2xsKys7CisJCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9y
aXpvbnRhbGx5ICovCisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsKKwkJCXJlZnJlc2hfdGV4
dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0
ZV90ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FU0M6CisJCQlpZiAob25fa2V5
X2VzYyhkaWFsb2cpID09IEtFWV9FU0MpCisJCQkJZG9uZSA9IHRydWU7CisJCQlicmVhazsKKwkJ
Y2FzZSBLRVlfUkVTSVpFOgorCQkJYmFja19saW5lcyhoZWlnaHQpOworCQkJZGVsd2luKGJveCk7
CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCW9uX2tleV9yZXNpemUoKTsKKwkJCWdvdG8gZG9fcmVz
aXplOworCQlkZWZhdWx0OgorCQkJZm9yIChpID0gMDsga2V5c1tpXTsgaSsrKSB7CisJCQkJaWYg
KGtleSA9PSBrZXlzW2ldKSB7CisJCQkJCWRvbmUgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9
CisJCQl9CisJCX0KKwl9CisJZGVsd2luKGJveCk7CisJZGVsd2luKGRpYWxvZyk7CisJaWYgKF92
c2Nyb2xsKSB7CisJCWNvbnN0IGNoYXIgKnM7CisKKwkJcyA9IGJ1ZjsKKwkJKl92c2Nyb2xsID0g
MDsKKwkJYmFja19saW5lcyhwYWdlX2xlbmd0aCk7CisJCXdoaWxlIChzIDwgcGFnZSAmJiAocyA9
IHN0cmNocihzLCAnXG4nKSkpIHsKKwkJCSgqX3ZzY3JvbGwpKys7CisJCQlzKys7CisJCX0KKwl9
CisJaWYgKF9oc2Nyb2xsKQorCQkqX2hzY3JvbGwgPSBoc2Nyb2xsOworCXJldHVybiBrZXk7Cit9
CisKKy8qCisgKiBHbyBiYWNrICduJyBsaW5lcyBpbiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3Rl
eHRib3goKS4KKyAqICdwYWdlJyB3aWxsIGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGRlc2ly
ZWQgbGluZSBpbiAnYnVmJy4KKyAqLworc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbikKK3sK
KwlpbnQgaTsKKworCWJlZ2luX3JlYWNoZWQgPSAwOworCS8qIEdvIGJhY2sgJ24nIGxpbmVzICov
CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAoKnBhZ2UgPT0gJ1wwJykgeworCQkJ
aWYgKGVuZF9yZWFjaGVkKSB7CisJCQkJZW5kX3JlYWNoZWQgPSAwOworCQkJCWNvbnRpbnVlOwor
CQkJfQorCQl9CisJCWlmIChwYWdlID09IGJ1ZikgeworCQkJYmVnaW5fcmVhY2hlZCA9IDE7CisJ
CQlyZXR1cm47CisJCX0KKwkJcGFnZS0tOworCQlkbyB7CisJCQlpZiAocGFnZSA9PSBidWYpIHsK
KwkJCQliZWdpbl9yZWFjaGVkID0gMTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlwYWdlLS07CisJ
CX0gd2hpbGUgKCpwYWdlICE9ICdcbicpOworCQlwYWdlKys7CisJfQorfQorCisvKgorICogUHJp
bnQgYSBuZXcgcGFnZSBvZiB0ZXh0LgorICovCitzdGF0aWMgdm9pZCBwcmludF9wYWdlKFdJTkRP
VyAqd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIHVwZGF0ZV90ZXh0X2ZuCisJCSAgICAgICB1
cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgaSwgcGFzc2VkX2VuZCA9IDA7CisKKwlp
ZiAodXBkYXRlX3RleHQpIHsKKwkJY2hhciAqZW5kOworCisJCWZvciAoaSA9IDA7IGkgPCBoZWln
aHQ7IGkrKykKKwkJCWdldF9saW5lKCk7CisJCWVuZCA9IHBhZ2U7CisJCWJhY2tfbGluZXMoaGVp
Z2h0KTsKKwkJdXBkYXRlX3RleHQoYnVmLCBwYWdlIC0gYnVmLCBlbmQgLSBidWYsIGRhdGEpOwor
CX0KKworCXBhZ2VfbGVuZ3RoID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsK
KwkJcHJpbnRfbGluZSh3aW4sIGksIHdpZHRoKTsKKwkJaWYgKCFwYXNzZWRfZW5kKQorCQkJcGFn
ZV9sZW5ndGgrKzsKKwkJaWYgKGVuZF9yZWFjaGVkICYmICFwYXNzZWRfZW5kKQorCQkJcGFzc2Vk
X2VuZCA9IDE7CisJfQorCXdub3V0cmVmcmVzaCh3aW4pOworfQorCisvKgorICogUHJpbnQgYSBu
ZXcgbGluZSBvZiB0ZXh0LgorICovCitzdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqIHdp
biwgaW50IHJvdywgaW50IHdpZHRoKQoreworCWNoYXIgKmxpbmU7CisKKwlsaW5lID0gZ2V0X2xp
bmUoKTsKKwlsaW5lICs9IE1JTihzdHJsZW4obGluZSksIGhzY3JvbGwpOwkvKiBTY3JvbGwgaG9y
aXpvbnRhbGx5ICovCisJd21vdmUod2luLCByb3csIDApOwkvKiBtb3ZlIGN1cnNvciB0byBjb3Jy
ZWN0IGxpbmUgKi8KKwl3YWRkY2god2luLCAnICcpOworCXdhZGRuc3RyKHdpbiwgbGluZSwgTUlO
KHN0cmxlbihsaW5lKSwgd2lkdGggLSAyKSk7CisKKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgcHJl
dmlvdXMgbGluZSAqLworI2lmIE9MRF9OQ1VSU0VTCisJeworCQlpbnQgeCA9IGdldGN1cngod2lu
KTsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIHg7IGkrKykKKwkJCXdhZGRj
aCh3aW4sICcgJyk7CisJfQorI2Vsc2UKKwl3Y2xydG9lb2wod2luKTsKKyNlbmRpZgorfQorCisv
KgorICogUmV0dXJuIGN1cnJlbnQgbGluZSBvZiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRi
b3goKSBhbmQgcHJpbnRfbGluZSgpLgorICogJ3BhZ2UnIHNob3VsZCBwb2ludCB0byBzdGFydCBv
ZiBjdXJyZW50IGxpbmUgYmVmb3JlIGNhbGxpbmcsIGFuZCB3aWxsIGJlCisgKiB1cGRhdGVkIHRv
IHBvaW50IHRvIHN0YXJ0IG9mIG5leHQgbGluZS4KKyAqLworc3RhdGljIGNoYXIgKmdldF9saW5l
KHZvaWQpCit7CisJaW50IGkgPSAwOworCXN0YXRpYyBjaGFyIGxpbmVbTUFYX0xFTiArIDFdOwor
CisJZW5kX3JlYWNoZWQgPSAwOworCXdoaWxlICgqcGFnZSAhPSAnXG4nKSB7CisJCWlmICgqcGFn
ZSA9PSAnXDAnKSB7CisJCQllbmRfcmVhY2hlZCA9IDE7CisJCQlicmVhazsKKwkJfSBlbHNlIGlm
IChpIDwgTUFYX0xFTikKKwkJCWxpbmVbaSsrXSA9ICoocGFnZSsrKTsKKwkJZWxzZSB7CisJCQkv
KiBUcnVuY2F0ZSBsaW5lcyBsb25nZXIgdGhhbiBNQVhfTEVOIGNoYXJhY3RlcnMgKi8KKwkJCWlm
IChpID09IE1BWF9MRU4pCisJCQkJbGluZVtpKytdID0gJ1wwJzsKKwkJCXBhZ2UrKzsKKwkJfQor
CX0KKwlpZiAoaSA8PSBNQVhfTEVOKQorCQlsaW5lW2ldID0gJ1wwJzsKKwlpZiAoIWVuZF9yZWFj
aGVkKQorCQlwYWdlKys7CQkvKiBtb3ZlIHBhc3QgJ1xuJyAqLworCisJcmV0dXJuIGxpbmU7Cit9
CisKKy8qCisgKiBQcmludCBjdXJyZW50IHBvc2l0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHByaW50
X3Bvc2l0aW9uKFdJTkRPVyAqIHdpbikKK3sKKwlpbnQgcGVyY2VudDsKKworCXdhdHRyc2V0KHdp
biwgZGxnLnBvc2l0aW9uX2luZGljYXRvci5hdHIpOworCXdia2dkc2V0KHdpbiwgZGxnLnBvc2l0
aW9uX2luZGljYXRvci5hdHIgJiBBX0NPTE9SKTsKKwlwZXJjZW50ID0gKHBhZ2UgLSBidWYpICog
MTAwIC8gc3RybGVuKGJ1Zik7CisJd21vdmUod2luLCBnZXRtYXh5KHdpbikgLSAzLCBnZXRtYXh4
KHdpbikgLSA5KTsKKwl3cHJpbnR3KHdpbiwgIiglM2QlJSkiLCBwZXJjZW50KTsKK30KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9seGRpYWxvZy91dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWI0OTBkNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFs
b2cvdXRpbC5jCkBAIC0wLDAgKzEsNzAwIEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog
R1BMLTIuMCsKKy8qCisgKiAgdXRpbC5jCisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8g
TGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENP
TkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2luY2x1
ZGUgPHN0ZGFyZy5oPgorCisjaW5jbHVkZSAiZGlhbG9nLmgiCisKKy8qIE5lZWRlZCBpbiBzaWdu
YWwgaGFuZGxlciBpbiBtY29uZi5jICovCitpbnQgc2F2ZWRfeCwgc2F2ZWRfeTsKKworc3RydWN0
IGRpYWxvZ19pbmZvIGRsZzsKKworc3RhdGljIHZvaWQgc2V0X21vbm9fdGhlbWUodm9pZCkKK3sK
KwlkbGcuc2NyZWVuLmF0ciA9IEFfTk9STUFMOworCWRsZy5zaGFkb3cuYXRyID0gQV9OT1JNQUw7
CisJZGxnLmRpYWxvZy5hdHIgPSBBX05PUk1BTDsKKwlkbGcudGl0bGUuYXRyID0gQV9CT0xEOwor
CWRsZy5ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxnLmJ1dHRvbl9hY3RpdmUuYXRyID0gQV9S
RVZFUlNFOworCWRsZy5idXR0b25faW5hY3RpdmUuYXRyID0gQV9ESU07CisJZGxnLmJ1dHRvbl9r
ZXlfYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsKKwlkbGcuYnV0dG9uX2tleV9pbmFjdGl2ZS5hdHIg
PSBBX0JPTEQ7CisJZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOworCWRs
Zy5idXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyID0gQV9OT1JNQUw7CisJZGxnLmlucHV0Ym94LmF0
ciA9IEFfTk9STUFMOworCWRsZy5pbnB1dGJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxn
LnNlYXJjaGJveC5hdHIgPSBBX05PUk1BTDsKKwlkbGcuc2VhcmNoYm94X3RpdGxlLmF0ciA9IEFf
Qk9MRDsKKwlkbGcuc2VhcmNoYm94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsKKwlkbGcucG9zaXRp
b25faW5kaWNhdG9yLmF0ciA9IEFfQk9MRDsKKwlkbGcubWVudWJveC5hdHIgPSBBX05PUk1BTDsK
KwlkbGcubWVudWJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxnLml0ZW0uYXRyID0gQV9O
T1JNQUw7CisJZGxnLml0ZW1fc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy50YWcuYXRy
ID0gQV9CT0xEOworCWRsZy50YWdfc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy50YWdf
a2V5LmF0ciA9IEFfQk9MRDsKKwlkbGcudGFnX2tleV9zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7
CisJZGxnLmNoZWNrLmF0ciA9IEFfQk9MRDsKKwlkbGcuY2hlY2tfc2VsZWN0ZWQuYXRyID0gQV9S
RVZFUlNFOworCWRsZy51YXJyb3cuYXRyID0gQV9CT0xEOworCWRsZy5kYXJyb3cuYXRyID0gQV9C
T0xEOworfQorCisjZGVmaW5lIERMR19DT0xPUihkaWFsb2csIGYsIGIsIGgpIFwKK2RvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRsZy5kaWFsb2cuZmcgPSAoZik7ICAgICAg
IFwKKwlkbGcuZGlhbG9nLmJnID0gKGIpOyAgICAgICBcCisJZGxnLmRpYWxvZy5obCA9IChoKTsg
ICAgICAgXAorfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgc2V0X2NsYXNzaWNfdGhlbWUodm9p
ZCkKK3sKKwlETEdfQ09MT1Ioc2NyZWVuLCAgICAgICAgICAgICAgICBDT0xPUl9DWUFOLCAgIENP
TE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKHNoYWRvdywgICAgICAgICAgICAgICAgQ09M
T1JfQkxBQ0ssICBDT0xPUl9CTEFDSywgIHRydWUpOworCURMR19DT0xPUihkaWFsb2csICAgICAg
ICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9S
KHRpdGxlLCAgICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUp
OworCURMR19DT0xPUihib3JkZXIsICAgICAgICAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1Jf
V0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9X
SElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwg
ICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0
dG9uX2tleV9hY3RpdmUsICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJ
RExHX0NPTE9SKGJ1dHRvbl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xPUl9XSElU
RSwgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBDT0xPUl9ZRUxM
T1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9pbmFjdGl2
ZSwgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihpbnB1dGJv
eCwgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExH
X0NPTE9SKGlucHV0Ym94X2JvcmRlciwgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwg
IGZhbHNlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94LCAgICAgICAgICAgICBDT0xPUl9CTEFDSywg
IENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUihzZWFyY2hib3hfdGl0bGUsICAgICAg
IENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94
X2JvcmRlciwgICAgICBDT0xPUl9XSElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NP
TE9SKHBvc2l0aW9uX2luZGljYXRvciwgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRy
dWUpOworCURMR19DT0xPUihtZW51Ym94LCAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09M
T1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKG1lbnVib3hfYm9yZGVyLCAgICAgICAgQ09M
T1JfV0hJVEUsICBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihpdGVtLCAgICAgICAg
ICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9S
KGl0ZW1fc2VsZWN0ZWQsICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUp
OworCURMR19DT0xPUih0YWcsICAgICAgICAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1Jf
V0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IodGFnX3NlbGVjdGVkLCAgICAgICAgICBDT0xPUl9Z
RUxMT1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAg
ICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUih0YWdf
a2V5X3NlbGVjdGVkLCAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlE
TEdfQ09MT1IoY2hlY2ssICAgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRF
LCAgZmFsc2UpOworCURMR19DT0xPUihjaGVja19zZWxlY3RlZCwgICAgICAgIENPTE9SX1dISVRF
LCAgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09MT1IodWFycm93LCAgICAgICAgICAgICAg
ICBDT0xPUl9HUkVFTiwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGRhcnJvdywg
ICAgICAgICAgICAgICAgQ09MT1JfR1JFRU4sICBDT0xPUl9XSElURSwgIHRydWUpOworfQorCitz
dGF0aWMgdm9pZCBzZXRfYmxhY2tiZ190aGVtZSh2b2lkKQoreworCURMR19DT0xPUihzY3JlZW4s
IENPTE9SX1JFRCwgICBDT0xPUl9CTEFDSywgdHJ1ZSk7CisJRExHX0NPTE9SKHNoYWRvdywgQ09M
T1JfQkxBQ0ssIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGRpYWxvZywgQ09MT1Jf
V0hJVEUsIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKHRpdGxlLCAgQ09MT1JfUkVE
LCAgIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKGJvcmRlciwgQ09MT1JfQkxBQ0ss
IENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihidXR0b25fYWN0aXZlLCAgICAgICAg
IENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2lu
YWN0aXZlLCAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExHX0NP
TE9SKGJ1dHRvbl9rZXlfYWN0aXZlLCAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1
ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xP
Ul9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCAgIENPTE9S
X1dISVRFLCAgQ09MT1JfUkVELCAgIGZhbHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2lu
YWN0aXZlLCBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihp
bnB1dGJveCwgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExH
X0NPTE9SKGlucHV0Ym94X2JvcmRlciwgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNl
KTsKKworCURMR19DT0xPUihzZWFyY2hib3gsICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JM
QUNLLCBmYWxzZSk7CisJRExHX0NPTE9SKHNlYXJjaGJveF90aXRsZSwgIENPTE9SX1lFTExPVywg
Q09MT1JfQkxBQ0ssIHRydWUpOworCURMR19DT0xPUihzZWFyY2hib3hfYm9yZGVyLCBDT0xPUl9C
TEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsKKworCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0
b3IsIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssICBmYWxzZSk7CisKKwlETEdfQ09MT1IobWVudWJv
eCwgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xP
UihtZW51Ym94X2JvcmRlciwgICBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsKKwor
CURMR19DT0xPUihpdGVtLCAgICAgICAgICAgICBDT0xPUl9XSElURSwgQ09MT1JfQkxBQ0ssIGZh
bHNlKTsKKwlETEdfQ09MT1IoaXRlbV9zZWxlY3RlZCwgICAgQ09MT1JfV0hJVEUsIENPTE9SX1JF
RCwgICBmYWxzZSk7CisKKwlETEdfQ09MT1IodGFnLCAgICAgICAgICAgICAgQ09MT1JfUkVELCAg
ICBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUih0YWdfc2VsZWN0ZWQsICAgICBDT0xP
Ul9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsKKwlETEdfQ09MT1IodGFnX2tleSwgICAgICAg
ICAgQ09MT1JfUkVELCAgICBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUih0YWdfa2V5
X3NlbGVjdGVkLCBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsKKworCURMR19DT0xP
UihjaGVjaywgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJ
RExHX0NPTE9SKGNoZWNrX3NlbGVjdGVkLCAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRy
dWUpOworCisJRExHX0NPTE9SKHVhcnJvdywgQ09MT1JfUkVELCBDT0xPUl9CTEFDSywgZmFsc2Up
OworCURMR19DT0xPUihkYXJyb3csIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKK30K
Kworc3RhdGljIHZvaWQgc2V0X2JsdWV0aXRsZV90aGVtZSh2b2lkKQoreworCXNldF9jbGFzc2lj
X3RoZW1lKCk7CisJRExHX0NPTE9SKHRpdGxlLCAgICAgICAgICAgICAgIENPTE9SX0JMVUUsICAg
Q09MT1JfV0hJVEUsIHRydWUpOworCURMR19DT0xPUihidXR0b25fa2V5X2FjdGl2ZSwgICBDT0xP
Ul9ZRUxMT1csIENPTE9SX0JMVUUsICB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2Fj
dGl2ZSwgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKHNlYXJj
aGJveF90aXRsZSwgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOworCURMR19D
T0xPUihwb3NpdGlvbl9pbmRpY2F0b3IsICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVl
KTsKKwlETEdfQ09MT1IodGFnLCAgICAgICAgICAgICAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9X
SElURSwgdHJ1ZSk7CisJRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAgICAgIENPTE9SX0JMVUUs
ICAgQ09MT1JfV0hJVEUsIHRydWUpOworCit9CisKKy8qCisgKiBTZWxlY3QgY29sb3IgdGhlbWUK
KyAqLworc3RhdGljIGludCBzZXRfdGhlbWUoY29uc3QgY2hhciAqdGhlbWUpCit7CisJaW50IHVz
ZV9jb2xvciA9IDE7CisJaWYgKCF0aGVtZSkKKwkJc2V0X2JsdWV0aXRsZV90aGVtZSgpOworCWVs
c2UgaWYgKHN0cmNtcCh0aGVtZSwgImNsYXNzaWMiKSA9PSAwKQorCQlzZXRfY2xhc3NpY190aGVt
ZSgpOworCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwgImJsdWV0aXRsZSIpID09IDApCisJCXNldF9i
bHVldGl0bGVfdGhlbWUoKTsKKwllbHNlIGlmIChzdHJjbXAodGhlbWUsICJibGFja2JnIikgPT0g
MCkKKwkJc2V0X2JsYWNrYmdfdGhlbWUoKTsKKwllbHNlIGlmIChzdHJjbXAodGhlbWUsICJtb25v
IikgPT0gMCkKKwkJdXNlX2NvbG9yID0gMDsKKworCXJldHVybiB1c2VfY29sb3I7Cit9CisKK3N0
YXRpYyB2b2lkIGluaXRfb25lX2NvbG9yKHN0cnVjdCBkaWFsb2dfY29sb3IgKmNvbG9yKQorewor
CXN0YXRpYyBpbnQgcGFpciA9IDA7CisKKwlwYWlyKys7CisJaW5pdF9wYWlyKHBhaXIsIGNvbG9y
LT5mZywgY29sb3ItPmJnKTsKKwlpZiAoY29sb3ItPmhsKQorCQljb2xvci0+YXRyID0gQV9CT0xE
IHwgQ09MT1JfUEFJUihwYWlyKTsKKwllbHNlCisJCWNvbG9yLT5hdHIgPSBDT0xPUl9QQUlSKHBh
aXIpOworfQorCitzdGF0aWMgdm9pZCBpbml0X2RpYWxvZ19jb2xvcnModm9pZCkKK3sKKwlpbml0
X29uZV9jb2xvcigmZGxnLnNjcmVlbik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5zaGFkb3cpOwor
CWluaXRfb25lX2NvbG9yKCZkbGcuZGlhbG9nKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRpdGxl
KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJvcmRlcik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5i
dXR0b25fYWN0aXZlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9pbmFjdGl2ZSk7CisJ
aW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fa2V5X2FjdGl2ZSk7CisJaW5pdF9vbmVfY29sb3Io
JmRsZy5idXR0b25fa2V5X2luYWN0aXZlKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9s
YWJlbF9hY3RpdmUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZl
KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmlucHV0Ym94KTsKKwlpbml0X29uZV9jb2xvcigmZGxn
LmlucHV0Ym94X2JvcmRlcik7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5zZWFyY2hib3gpOworCWlu
aXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94X3RpdGxlKTsKKwlpbml0X29uZV9jb2xvcigmZGxn
LnNlYXJjaGJveF9ib3JkZXIpOworCWluaXRfb25lX2NvbG9yKCZkbGcucG9zaXRpb25faW5kaWNh
dG9yKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLm1lbnVib3gpOworCWluaXRfb25lX2NvbG9yKCZk
bGcubWVudWJveF9ib3JkZXIpOworCWluaXRfb25lX2NvbG9yKCZkbGcuaXRlbSk7CisJaW5pdF9v
bmVfY29sb3IoJmRsZy5pdGVtX3NlbGVjdGVkKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZyk7
CisJaW5pdF9vbmVfY29sb3IoJmRsZy50YWdfc2VsZWN0ZWQpOworCWluaXRfb25lX2NvbG9yKCZk
bGcudGFnX2tleSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy50YWdfa2V5X3NlbGVjdGVkKTsKKwlp
bml0X29uZV9jb2xvcigmZGxnLmNoZWNrKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmNoZWNrX3Nl
bGVjdGVkKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnVhcnJvdyk7CisJaW5pdF9vbmVfY29sb3Io
JmRsZy5kYXJyb3cpOworfQorCisvKgorICogU2V0dXAgZm9yIGNvbG9yIGRpc3BsYXkKKyAqLwor
c3RhdGljIHZvaWQgY29sb3Jfc2V0dXAoY29uc3QgY2hhciAqdGhlbWUpCit7CisJaW50IHVzZV9j
b2xvcjsKKworCXVzZV9jb2xvciA9IHNldF90aGVtZSh0aGVtZSk7CisJaWYgKHVzZV9jb2xvciAm
JiBoYXNfY29sb3JzKCkpIHsKKwkJc3RhcnRfY29sb3IoKTsKKwkJaW5pdF9kaWFsb2dfY29sb3Jz
KCk7CisJfSBlbHNlCisJCXNldF9tb25vX3RoZW1lKCk7Cit9CisKKy8qCisgKiBTZXQgd2luZG93
IHRvIGF0dHJpYnV0ZSAnYXR0cicKKyAqLwordm9pZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwg
aW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYXR0cikKK3sKKwlpbnQgaSwgajsKKworCXdh
dHRyc2V0KHdpbiwgYXR0cik7CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXdt
b3ZlKHdpbiwgaSwgMCk7CisJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQorCQkJd2FkZGNo
KHdpbiwgJyAnKTsKKwl9CisJdG91Y2h3aW4od2luKTsKK30KKwordm9pZCBkaWFsb2dfY2xlYXIo
dm9pZCkKK3sKKwlpbnQgbGluZXMsIGNvbHVtbnM7CisKKwlsaW5lcyA9IGdldG1heHkoc3Rkc2Ny
KTsKKwljb2x1bW5zID0gZ2V0bWF4eChzdGRzY3IpOworCisJYXR0cl9jbGVhcihzdGRzY3IsIGxp
bmVzLCBjb2x1bW5zLCBkbGcuc2NyZWVuLmF0cik7CisJLyogRGlzcGxheSBiYWNrZ3JvdW5kIHRp
dGxlIGlmIGl0IGV4aXN0cyAuLi4gLSBTTEggKi8KKwlpZiAoZGxnLmJhY2t0aXRsZSAhPSBOVUxM
KSB7CisJCWludCBpLCBsZW4gPSAwLCBza2lwID0gMDsKKwkJc3RydWN0IHN1YnRpdGxlX2xpc3Qg
KnBvczsKKworCQl3YXR0cnNldChzdGRzY3IsIGRsZy5zY3JlZW4uYXRyKTsKKwkJbXZ3YWRkc3Ry
KHN0ZHNjciwgMCwgMSwgKGNoYXIgKilkbGcuYmFja3RpdGxlKTsKKworCQlmb3IgKHBvcyA9IGRs
Zy5zdWJ0aXRsZXM7IHBvcyAhPSBOVUxMOyBwb3MgPSBwb3MtPm5leHQpIHsKKwkJCS8qIDMgaXMg
Zm9yIHRoZSBhcnJvdyBhbmQgc3BhY2VzICovCisJCQlsZW4gKz0gc3RybGVuKHBvcy0+dGV4dCkg
KyAzOworCQl9CisKKwkJd21vdmUoc3Rkc2NyLCAxLCAxKTsKKwkJaWYgKGxlbiA+IGNvbHVtbnMg
LSAyKSB7CisJCQljb25zdCBjaGFyICplbGxpcHNpcyA9ICJbLi4uXSAiOworCQkJd2FkZHN0cihz
dGRzY3IsIGVsbGlwc2lzKTsKKwkJCXNraXAgPSBsZW4gLSAoY29sdW1ucyAtIDIgLSBzdHJsZW4o
ZWxsaXBzaXMpKTsKKwkJfQorCisJCWZvciAocG9zID0gZGxnLnN1YnRpdGxlczsgcG9zICE9IE5V
TEw7IHBvcyA9IHBvcy0+bmV4dCkgeworCQkJaWYgKHNraXAgPT0gMCkKKwkJCQl3YWRkY2goc3Rk
c2NyLCBBQ1NfUkFSUk9XKTsKKwkJCWVsc2UKKwkJCQlza2lwLS07CisKKwkJCWlmIChza2lwID09
IDApCisJCQkJd2FkZGNoKHN0ZHNjciwgJyAnKTsKKwkJCWVsc2UKKwkJCQlza2lwLS07CisKKwkJ
CWlmIChza2lwIDwgc3RybGVuKHBvcy0+dGV4dCkpIHsKKwkJCQl3YWRkc3RyKHN0ZHNjciwgcG9z
LT50ZXh0ICsgc2tpcCk7CisJCQkJc2tpcCA9IDA7CisJCQl9IGVsc2UKKwkJCQlza2lwIC09IHN0
cmxlbihwb3MtPnRleHQpOworCisJCQlpZiAoc2tpcCA9PSAwKQorCQkJCXdhZGRjaChzdGRzY3Is
ICcgJyk7CisJCQllbHNlCisJCQkJc2tpcC0tOworCQl9CisKKwkJZm9yIChpID0gbGVuICsgMTsg
aSA8IGNvbHVtbnMgLSAxOyBpKyspCisJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfSExJTkUpOworCX0K
Kwl3bm91dHJlZnJlc2goc3Rkc2NyKTsKK30KKworLyoKKyAqIERvIHNvbWUgaW5pdGlhbGl6YXRp
b24gZm9yIGRpYWxvZworICovCitpbnQgaW5pdF9kaWFsb2coY29uc3QgY2hhciAqYmFja3RpdGxl
KQoreworCWludCBoZWlnaHQsIHdpZHRoOworCisJaW5pdHNjcigpOwkJLyogSW5pdCBjdXJzZXMg
Ki8KKworCS8qIEdldCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBmb3Igc2lnbmFsIGhhbmRsZXIg
aW4gbWNvbmYuYyAqLworCWdldHl4KHN0ZHNjciwgc2F2ZWRfeSwgc2F2ZWRfeCk7CisKKwlnZXRt
YXh5eChzdGRzY3IsIGhlaWdodCwgd2lkdGgpOworCWlmIChoZWlnaHQgPCBXSU5ET1dfSEVJR1RI
X01JTiB8fCB3aWR0aCA8IFdJTkRPV19XSURUSF9NSU4pIHsKKwkJZW5kd2luKCk7CisJCXJldHVy
biAtRVJSRElTUExBWVRPT1NNQUxMOworCX0KKworCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7
CisJY29sb3Jfc2V0dXAoZ2V0ZW52KCJNRU5VQ09ORklHX0NPTE9SIikpOworCisJa2V5cGFkKHN0
ZHNjciwgVFJVRSk7CisJY2JyZWFrKCk7CisJbm9lY2hvKCk7CisJZGlhbG9nX2NsZWFyKCk7CisK
KwlyZXR1cm4gMDsKK30KKwordm9pZCBzZXRfZGlhbG9nX2JhY2t0aXRsZShjb25zdCBjaGFyICpi
YWNrdGl0bGUpCit7CisJZGxnLmJhY2t0aXRsZSA9IGJhY2t0aXRsZTsKK30KKwordm9pZCBzZXRf
ZGlhbG9nX3N1YnRpdGxlcyhzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0bGVzKQoreworCWRs
Zy5zdWJ0aXRsZXMgPSBzdWJ0aXRsZXM7Cit9CisKKy8qCisgKiBFbmQgdXNpbmcgZGlhbG9nIGZ1
bmN0aW9ucy4KKyAqLwordm9pZCBlbmRfZGlhbG9nKGludCB4LCBpbnQgeSkKK3sKKwkvKiBtb3Zl
IGN1cnNvciBiYWNrIHRvIG9yaWdpbmFsIHBvc2l0aW9uICovCisJbW92ZSh5LCB4KTsKKwlyZWZy
ZXNoKCk7CisJZW5kd2luKCk7Cit9CisKKy8qIFByaW50IHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9n
LiBDZW50ZXIgdGhlIHRpdGxlIGFuZCB0cnVuY2F0ZQorICogdGlsZSBpZiB3aWRlciB0aGFuIGRp
YWxvZyAoLSAyIGNoYXJzKS4KKyAqKi8KK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2cs
IGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpCit7CisJaWYgKHRpdGxlKSB7CisJCWludCB0
bGVuID0gTUlOKHdpZHRoIC0gMiwgc3RybGVuKHRpdGxlKSk7CisJCXdhdHRyc2V0KGRpYWxvZywg
ZGxnLnRpdGxlLmF0cik7CisJCW12d2FkZGNoKGRpYWxvZywgMCwgKHdpZHRoIC0gdGxlbikgLyAy
IC0gMSwgJyAnKTsKKwkJbXZ3YWRkbnN0cihkaWFsb2csIDAsICh3aWR0aCAtIHRsZW4pLzIsIHRp
dGxlLCB0bGVuKTsKKwkJd2FkZGNoKGRpYWxvZywgJyAnKTsKKwl9Cit9CisKKy8qCisgKiBQcmlu
dCBhIHN0cmluZyBvZiB0ZXh0IGluIGEgd2luZG93LCBhdXRvbWF0aWNhbGx5IHdyYXAgYXJvdW5k
IHRvIHRoZQorICogbmV4dCBsaW5lIGlmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcgdG8gZml0IG9u
IG9uZSBsaW5lLiBOZXdsaW5lCisgKiBjaGFyYWN0ZXJzICdcbicgYXJlIHByb3BwZXJseSBwcm9j
ZXNzZWQuICBXZSBzdGFydCBvbiBhIG5ldyBsaW5lCisgKiBpZiB0aGVyZSBpcyBubyByb29tIGZv
ciBhdCBsZWFzdCA0IG5vbmJsYW5rcyBmb2xsb3dpbmcgYSBkb3VibGUtc3BhY2UuCisgKi8KK3Zv
aWQgcHJpbnRfYXV0b3dyYXAoV0lORE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3
aWR0aCwgaW50IHksIGludCB4KQoreworCWludCBuZXdsLCBjdXJfeCwgY3VyX3k7CisJaW50IHBy
b21wdF9sZW4sIHJvb20sIHdsZW47CisJY2hhciB0ZW1wc3RyW01BWF9MRU4gKyAxXSwgKndvcmQs
ICpzcCwgKnNwMiwgKm5ld2xpbmVfc2VwYXJhdG9yID0gMDsKKworCXN0cmNweSh0ZW1wc3RyLCBw
cm9tcHQpOworCisJcHJvbXB0X2xlbiA9IHN0cmxlbih0ZW1wc3RyKTsKKworCWlmIChwcm9tcHRf
bGVuIDw9IHdpZHRoIC0geCAqIDIpIHsJLyogSWYgcHJvbXB0IGlzIHNob3J0ICovCisJCXdtb3Zl
KHdpbiwgeSwgKHdpZHRoIC0gcHJvbXB0X2xlbikgLyAyKTsKKwkJd2FkZHN0cih3aW4sIHRlbXBz
dHIpOworCX0gZWxzZSB7CisJCWN1cl94ID0geDsKKwkJY3VyX3kgPSB5OworCQluZXdsID0gMTsK
KwkJd29yZCA9IHRlbXBzdHI7CisJCXdoaWxlICh3b3JkICYmICp3b3JkKSB7CisJCQlzcCA9IHN0
cnBicmsod29yZCwgIlxuICIpOworCQkJaWYgKHNwICYmICpzcCA9PSAnXG4nKQorCQkJCW5ld2xp
bmVfc2VwYXJhdG9yID0gc3A7CisKKwkJCWlmIChzcCkKKwkJCQkqc3ArKyA9IDA7CisKKwkJCS8q
IFdyYXAgdG8gbmV4dCBsaW5lIGlmIGVpdGhlciB0aGUgd29yZCBkb2VzIG5vdCBmaXQsCisJCQkg
ICBvciBpdCBpcyB0aGUgZmlyc3Qgd29yZCBvZiBhIG5ldyBzZW50ZW5jZSwgYW5kIGl0IGlzCisJ
CQkgICBzaG9ydCwgYW5kIHRoZSBuZXh0IHdvcmQgZG9lcyBub3QgZml0LiAqLworCQkJcm9vbSA9
IHdpZHRoIC0gY3VyX3g7CisJCQl3bGVuID0gc3RybGVuKHdvcmQpOworCQkJaWYgKHdsZW4gPiBy
b29tIHx8CisJCQkgICAgKG5ld2wgJiYgd2xlbiA8IDQgJiYgc3AKKwkJCSAgICAgJiYgd2xlbiAr
IDEgKyBzdHJsZW4oc3ApID4gcm9vbQorCQkJICAgICAmJiAoIShzcDIgPSBzdHJwYnJrKHNwLCAi
XG4gIikpCisJCQkJIHx8IHdsZW4gKyAxICsgKHNwMiAtIHNwKSA+IHJvb20pKSkgeworCQkJCWN1
cl95Kys7CisJCQkJY3VyX3ggPSB4OworCQkJfQorCQkJd21vdmUod2luLCBjdXJfeSwgY3VyX3gp
OworCQkJd2FkZHN0cih3aW4sIHdvcmQpOworCQkJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOwor
CisJCQkvKiBNb3ZlIHRvIHRoZSBuZXh0IGxpbmUgaWYgdGhlIHdvcmQgc2VwYXJhdG9yIHdhcyBh
IG5ld2xpbmUgKi8KKwkJCWlmIChuZXdsaW5lX3NlcGFyYXRvcikgeworCQkJCWN1cl95Kys7CisJ
CQkJY3VyX3ggPSB4OworCQkJCW5ld2xpbmVfc2VwYXJhdG9yID0gMDsKKwkJCX0gZWxzZQorCQkJ
CWN1cl94Kys7CisKKwkJCWlmIChzcCAmJiAqc3AgPT0gJyAnKSB7CisJCQkJY3VyX3grKzsJLyog
ZG91YmxlIHNwYWNlICovCisJCQkJd2hpbGUgKCorK3NwID09ICcgJykgOworCQkJCW5ld2wgPSAx
OworCQkJfSBlbHNlCisJCQkJbmV3bCA9IDA7CisJCQl3b3JkID0gc3A7CisJCX0KKwl9Cit9CisK
Ky8qCisgKiBQcmludCBhIGJ1dHRvbgorICovCit2b2lkIHByaW50X2J1dHRvbihXSU5ET1cgKiB3
aW4sIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3RlZCkKK3sKKwlp
bnQgaSwgdGVtcDsKKworCXdtb3ZlKHdpbiwgeSwgeCk7CisJd2F0dHJzZXQod2luLCBzZWxlY3Rl
ZCA/IGRsZy5idXR0b25fYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2luYWN0aXZlLmF0cik7
CisJd2FkZHN0cih3aW4sICI8Iik7CisJdGVtcCA9IHN0cnNwbihsYWJlbCwgIiAiKTsKKwlsYWJl
bCArPSB0ZW1wOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2xhYmVsX2Fj
dGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIpOworCWZvciAoaSA9
IDA7IGkgPCB0ZW1wOyBpKyspCisJCXdhZGRjaCh3aW4sICcgJyk7CisJd2F0dHJzZXQod2luLCBz
ZWxlY3RlZCA/IGRsZy5idXR0b25fa2V5X2FjdGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9rZXlf
aW5hY3RpdmUuYXRyKTsKKwl3YWRkY2god2luLCBsYWJlbFswXSk7CisJd2F0dHJzZXQod2luLCBz
ZWxlY3RlZCA/IGRsZy5idXR0b25fbGFiZWxfYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2xh
YmVsX2luYWN0aXZlLmF0cik7CisJd2FkZHN0cih3aW4sIChjaGFyICopbGFiZWwgKyAxKTsKKwl3
YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9hY3RpdmUuYXRyCisJCSA6IGRsZy5i
dXR0b25faW5hY3RpdmUuYXRyKTsKKwl3YWRkc3RyKHdpbiwgIj4iKTsKKwl3bW92ZSh3aW4sIHks
IHggKyB0ZW1wICsgMSk7Cit9CisKKy8qCisgKiBEcmF3IGEgcmVjdGFuZ3VsYXIgYm94IHdpdGgg
bGluZSBkcmF3aW5nIGNoYXJhY3RlcnMKKyAqLwordm9pZAorZHJhd19ib3goV0lORE9XICogd2lu
LCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCwKKwkgY2h0eXBlIGJveCwgY2h0
eXBlIGJvcmRlcikKK3sKKwlpbnQgaSwgajsKKworCXdhdHRyc2V0KHdpbiwgMCk7CisJZm9yIChp
ID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisJCXdtb3ZlKHdpbiwgeSArIGksIHgpOworCQlmb3Ig
KGogPSAwOyBqIDwgd2lkdGg7IGorKykKKwkJCWlmICghaSAmJiAhaikKKwkJCQl3YWRkY2god2lu
LCBib3JkZXIgfCBBQ1NfVUxDT1JORVIpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYm
ICFqKQorCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19MTENPUk5FUik7CisJCQllbHNlIGlm
ICghaSAmJiBqID09IHdpZHRoIC0gMSkKKwkJCQl3YWRkY2god2luLCBib3ggfCBBQ1NfVVJDT1JO
RVIpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmIGogPT0gd2lkdGggLSAxKQorCQkJ
CXdhZGRjaCh3aW4sIGJveCB8IEFDU19MUkNPUk5FUik7CisJCQllbHNlIGlmICghaSkKKwkJCQl3
YWRkY2god2luLCBib3JkZXIgfCBBQ1NfSExJTkUpOworCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQg
LSAxKQorCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19ITElORSk7CisJCQllbHNlIGlmICghaikK
KwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfVkxJTkUpOworCQkJZWxzZSBpZiAoaiA9PSB3
aWR0aCAtIDEpCisJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1ZMSU5FKTsKKwkJCWVsc2UKKwkJ
CQl3YWRkY2god2luLCBib3ggfCAnICcpOworCX0KK30KKworLyoKKyAqIERyYXcgc2hhZG93cyBh
bG9uZyB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdlIHRvIGdpdmUgYSBtb3JlIDNEIGxvb2sKKyAq
IHRvIHRoZSBib3hlcworICovCit2b2lkIGRyYXdfc2hhZG93KFdJTkRPVyAqIHdpbiwgaW50IHks
IGludCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGk7CisKKwlpZiAoaGFzX2Nv
bG9ycygpKSB7CS8qIFdoZXRoZXIgdGVybWluYWwgc3VwcG9ydHMgY29sb3I/ICovCisJCXdhdHRy
c2V0KHdpbiwgZGxnLnNoYWRvdy5hdHIpOworCQl3bW92ZSh3aW4sIHkgKyBoZWlnaHQsIHggKyAy
KTsKKwkJZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspCisJCQl3YWRkY2god2luLCB3aW5jaCh3
aW4pICYgQV9DSEFSVEVYVCk7CisJCWZvciAoaSA9IHkgKyAxOyBpIDwgeSArIGhlaWdodCArIDE7
IGkrKykgeworCQkJd21vdmUod2luLCBpLCB4ICsgd2lkdGgpOworCQkJd2FkZGNoKHdpbiwgd2lu
Y2god2luKSAmIEFfQ0hBUlRFWFQpOworCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hB
UlRFWFQpOworCQl9CisJCXdub3V0cmVmcmVzaCh3aW4pOworCX0KK30KKworLyoKKyAqICBSZXR1
cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBhbHBoYWJldGljIGNoYXJhY3RlciBpbiBhIHN0
cmluZy4KKyAqLworaW50IGZpcnN0X2FscGhhKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hh
ciAqZXhlbXB0KQoreworCWludCBpLCBpbl9wYXJlbiA9IDAsIGM7CisKKwlmb3IgKGkgPSAwOyBp
IDwgc3RybGVuKHN0cmluZyk7IGkrKykgeworCQljID0gdG9sb3dlcihzdHJpbmdbaV0pOworCisJ
CWlmIChzdHJjaHIoIjxbKCIsIGMpKQorCQkJKytpbl9wYXJlbjsKKwkJaWYgKHN0cmNocigiPl0p
IiwgYykgJiYgaW5fcGFyZW4gPiAwKQorCQkJLS1pbl9wYXJlbjsKKworCQlpZiAoKCFpbl9wYXJl
bikgJiYgaXNhbHBoYShjKSAmJiBzdHJjaHIoZXhlbXB0LCBjKSA9PSAwKQorCQkJcmV0dXJuIGk7
CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBuY3Vyc2VzIHVzZXMgRVNDIHRvIGRldGVj
dCBlc2NhcGVkIGNoYXIgc2VxdWVuY2VzLiBUaGlzIHJlc3V0bCBpbgorICogYSBzbWFsbCB0aW1l
b3V0IGJlZm9yZSBFU0MgaXMgYWN0dWFsbHkgZGVsaXZlcmVkIHRvIHRoZSBhcHBsaWNhdGlvbi4K
KyAqIGx4ZGlhbG9nIHN1Z2dlc3QgPEVTQz4gPEVTQz4gd2hpY2ggaXMgY29ycmVjdGx5IHRyYW5z
bGF0ZWQgdG8gdHdvCisgKiB0aW1lcyBlc2MuIEJ1dCB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIHRo
ZSBzZWNvbmQgZXNjIHRvIGF2b2lkIHN0ZXBwaW5nCisgKiBvdXQgb25lIG1lbnUgdG9vIG11Y2gu
IEZpbHRlciBhd2F5IGFsbCBlc2NhcGVkIGtleSBzZXF1ZW5jZXMgc2luY2UKKyAqIGtleXBhZChG
QUxTRSkgdHVybiBvZmYgbmN1cnNlcyBzdXBwb3J0IGZvciBlc2NhcGUgc2VxdWVuY2VzIC0gYW5k
IHRoYXRzCisgKiBuZWVkZWQgdG8gbWFrZSBub3RpbWVvdXQoKSBkbyBhcyBleHBlY3RlZC4KKyAq
LworaW50IG9uX2tleV9lc2MoV0lORE9XICp3aW4pCit7CisJaW50IGtleTsKKwlpbnQga2V5MjsK
KwlpbnQga2V5MzsKKworCW5vZGVsYXkod2luLCBUUlVFKTsKKwlrZXlwYWQod2luLCBGQUxTRSk7
CisJa2V5ID0gd2dldGNoKHdpbik7CisJa2V5MiA9IHdnZXRjaCh3aW4pOworCWRvIHsKKwkJa2V5
MyA9IHdnZXRjaCh3aW4pOworCX0gd2hpbGUgKGtleTMgIT0gRVJSKTsKKwlub2RlbGF5KHdpbiwg
RkFMU0UpOworCWtleXBhZCh3aW4sIFRSVUUpOworCWlmIChrZXkgPT0gS0VZX0VTQyAmJiBrZXky
ID09IEVSUikKKwkJcmV0dXJuIEtFWV9FU0M7CisJZWxzZSBpZiAoa2V5ICE9IEVSUiAmJiBrZXkg
IT0gS0VZX0VTQyAmJiBrZXkyID09IEVSUikKKwkJdW5nZXRjaChrZXkpOworCisJcmV0dXJuIC0x
OworfQorCisvKiByZWRyYXcgc2NyZWVuIGluIG5ldyBzaXplICovCitpbnQgb25fa2V5X3Jlc2l6
ZSh2b2lkKQoreworCWRpYWxvZ19jbGVhcigpOworCXJldHVybiBLRVlfUkVTSVpFOworfQorCitz
dHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1fY3VyOworc3RydWN0IGRpYWxvZ19saXN0IGl0ZW1fbmls
Oworc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2hlYWQ7CisKK3ZvaWQgaXRlbV9yZXNldCh2b2lk
KQoreworCXN0cnVjdCBkaWFsb2dfbGlzdCAqcCwgKm5leHQ7CisKKwlmb3IgKHAgPSBpdGVtX2hl
YWQ7IHA7IHAgPSBuZXh0KSB7CisJCW5leHQgPSBwLT5uZXh0OworCQlmcmVlKHApOworCX0KKwlp
dGVtX2hlYWQgPSBOVUxMOworCWl0ZW1fY3VyID0gJml0ZW1fbmlsOworfQorCit2b2lkIGl0ZW1f
bWFrZShjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXN0cnVjdCBkaWFs
b2dfbGlzdCAqcCA9IG1hbGxvYyhzaXplb2YoKnApKTsKKworCWlmIChpdGVtX2hlYWQpCisJCWl0
ZW1fY3VyLT5uZXh0ID0gcDsKKwllbHNlCisJCWl0ZW1faGVhZCA9IHA7CisJaXRlbV9jdXIgPSBw
OworCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZz
bnByaW50ZihpdGVtX2N1ci0+bm9kZS5zdHIsIHNpemVvZihpdGVtX2N1ci0+bm9kZS5zdHIpLCBm
bXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIGl0ZW1fYWRkX3N0cihjb25zdCBjaGFy
ICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXNpemVfdCBhdmFpbDsKKworCWF2YWlsID0g
c2l6ZW9mKGl0ZW1fY3VyLT5ub2RlLnN0cikgLSBzdHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKTsK
KworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihpdGVtX2N1ci0+bm9kZS5zdHIgKyBz
dHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKSwKKwkJICBhdmFpbCwgZm10LCBhcCk7CisJaXRlbV9j
dXItPm5vZGUuc3RyW3NpemVvZihpdGVtX2N1ci0+bm9kZS5zdHIpIC0gMV0gPSAnXDAnOworCXZh
X2VuZChhcCk7Cit9CisKK3ZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKQoreworCWl0ZW1fY3Vy
LT5ub2RlLnRhZyA9IHRhZzsKK30KK3ZvaWQgaXRlbV9zZXRfZGF0YSh2b2lkICpwdHIpCit7CisJ
aXRlbV9jdXItPm5vZGUuZGF0YSA9IHB0cjsKK30KKwordm9pZCBpdGVtX3NldF9zZWxlY3RlZChp
bnQgdmFsKQoreworCWl0ZW1fY3VyLT5ub2RlLnNlbGVjdGVkID0gdmFsOworfQorCitpbnQgaXRl
bV9hY3RpdmF0ZV9zZWxlY3RlZCh2b2lkKQoreworCWl0ZW1fZm9yZWFjaCgpCisJCWlmIChpdGVt
X2lzX3NlbGVjdGVkKCkpCisJCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCAqaXRl
bV9kYXRhKHZvaWQpCit7CisJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLmRhdGE7Cit9CisKK2NoYXIg
aXRlbV90YWcodm9pZCkKK3sKKwlyZXR1cm4gaXRlbV9jdXItPm5vZGUudGFnOworfQorCitpbnQg
aXRlbV9jb3VudCh2b2lkKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7
CisKKwlmb3IgKHAgPSBpdGVtX2hlYWQ7IHA7IHAgPSBwLT5uZXh0KQorCQluKys7CisJcmV0dXJu
IG47Cit9CisKK3ZvaWQgaXRlbV9zZXQoaW50IG4pCit7CisJaW50IGkgPSAwOworCWl0ZW1fZm9y
ZWFjaCgpCisJCWlmIChpKysgPT0gbikKKwkJCXJldHVybjsKK30KKworaW50IGl0ZW1fbih2b2lk
KQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7CisKKwlmb3IgKHAgPSBp
dGVtX2hlYWQ7IHA7IHAgPSBwLT5uZXh0KSB7CisJCWlmIChwID09IGl0ZW1fY3VyKQorCQkJcmV0
dXJuIG47CisJCW4rKzsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IGNoYXIgKml0ZW1fc3Ry
KHZvaWQpCit7CisJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLnN0cjsKK30KKworaW50IGl0ZW1faXNf
c2VsZWN0ZWQodm9pZCkKK3sKKwlyZXR1cm4gKGl0ZW1fY3VyLT5ub2RlLnNlbGVjdGVkICE9IDAp
OworfQorCitpbnQgaXRlbV9pc190YWcoY2hhciB0YWcpCit7CisJcmV0dXJuIChpdGVtX2N1ci0+
bm9kZS50YWcgPT0gdGFnKTsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhk
aWFsb2cveWVzbm8uYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cveWVzbm8uYwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2FhYzliCi0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNuby5jCkBAIC0wLDAgKzEsMTAxIEBA
CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKKy8qCisgKiAgeWVzbm8uYyAt
LSBpbXBsZW1lbnRzIHRoZSB5ZXMvbm8gYm94CisgKgorICogIE9SSUdJTkFMIEFVVEhPUjogU2F2
aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVM
IENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCisgKi8KKworI2lu
Y2x1ZGUgImRpYWxvZy5oIgorCisvKgorICogRGlzcGxheSB0ZXJtaW5hdGlvbiBidXR0b25zCisg
Ki8KK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0
LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDEwOwor
CWludCB5ID0gaGVpZ2h0IC0gMjsKKworCXByaW50X2J1dHRvbihkaWFsb2csICIgWWVzICIsIHks
IHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbihkaWFsb2csICIgIE5vICAiLCB5LCB4
ICsgMTMsIHNlbGVjdGVkID09IDEpOworCisJd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDEzICog
c2VsZWN0ZWQpOworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgZGlh
bG9nIGJveCB3aXRoIHR3byBidXR0b25zIC0gWWVzIGFuZCBObworICovCitpbnQgZGlhbG9nX3ll
c25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGlu
dCB3aWR0aCkKK3sKKwlpbnQgaSwgeCwgeSwga2V5ID0gMCwgYnV0dG9uID0gMDsKKwlXSU5ET1cg
KmRpYWxvZzsKKworZG9fcmVzaXplOgorCWlmIChnZXRtYXh5KHN0ZHNjcikgPCAoaGVpZ2h0ICsg
WUVTTk9fSEVJR1RIX01JTikpCisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOworCWlmIChn
ZXRtYXh4KHN0ZHNjcikgPCAod2lkdGggKyBZRVNOT19XSURUSF9NSU4pKQorCQlyZXR1cm4gLUVS
UkRJU1BMQVlUT09TTUFMTDsKKworCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLwor
CXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKKwl5ID0gKGdldG1heHkoc3Rkc2Ny
KSAtIGhlaWdodCkgLyAyOworCisJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdp
ZHRoKTsKKworCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsKKwlrZXlwYWQo
ZGlhbG9nLCBUUlVFKTsKKworCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwK
KwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7CisJd2F0dHJzZXQoZGlhbG9nLCBk
bGcuYm9yZGVyLmF0cik7CisJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRF
RSk7CisJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQorCQl3YWRkY2goZGlhbG9nLCBB
Q1NfSExJTkUpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXdhZGRjaChk
aWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsK
KworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXByaW50X2F1dG93cmFwKGRp
YWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOworCisJcHJpbnRfYnV0dG9ucyhkaWFsb2cs
IGhlaWdodCwgd2lkdGgsIDApOworCisJd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7CisJCWtleSA9
IHdnZXRjaChkaWFsb2cpOworCQlzd2l0Y2ggKGtleSkgeworCQljYXNlICdZJzoKKwkJY2FzZSAn
eSc6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiAwOworCQljYXNlICdOJzoKKwkJY2Fz
ZSAnbic6CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCXJldHVybiAxOworCisJCWNhc2UgVEFCOgor
CQljYXNlIEtFWV9MRUZUOgorCQljYXNlIEtFWV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09
IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKSA/IDEgOiAoYnV0dG9uID4gMSA/
IDAgOiBidXR0b24pOworCisJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwg
YnV0dG9uKTsKKwkJCXdyZWZyZXNoKGRpYWxvZyk7CisJCQlicmVhazsKKwkJY2FzZSAnICc6CisJ
CWNhc2UgJ1xuJzoKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIGJ1dHRvbjsKKwkJY2Fz
ZSBLRVlfRVNDOgorCQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOworCQkJYnJlYWs7CisJCWNh
c2UgS0VZX1JFU0laRToKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJb25fa2V5X3Jlc2l6ZSgpOwor
CQkJZ290byBkb19yZXNpemU7CisJCX0KKwl9CisKKwlkZWx3aW4oZGlhbG9nKTsKKwlyZXR1cm4g
a2V5OwkJLyogRVNDIHByZXNzZWQgKi8KK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbWNvbmYtY2ZnLnNoIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1jZmcuc2gKbmV3IGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzgxMjg3MgotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYtY2ZnLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jp
bi9zaAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitQS0c9Im5jdXJzZXN3
IgorUEtHMj0ibmN1cnNlcyIKKworaWYgWyAtbiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBd
OyB0aGVuCisJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHOyB0aGVuCisJCWVjaG8gY2ZsYWdz
PVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cpXCIKKwkJZWNobyBsaWJzPVwiJChwa2ctY29u
ZmlnIC0tbGlicyAkUEtHKVwiCisJCWV4aXQgMAorCWZpCisKKwlpZiBwa2ctY29uZmlnIC0tZXhp
c3RzICRQS0cyOyB0aGVuCisJCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQ
S0cyKVwiCisJCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCIKKwkJZXhp
dCAwCisJZmkKK2ZpCisKKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4gY2FzZSBwa2ctY29u
ZmlnIGlzIG5vdCBpbnN0YWxsZWQuCisjIChFdmVuIGlmIGl0IGlzIGluc3RhbGxlZCwgc29tZSBk
aXN0cmlidXRpb25zIHN1Y2ggYXMgb3BlblNVU0UgY2Fubm90CisjIGZpbmQgbmN1cnNlcyBieSBw
a2ctY29uZmlnLikKK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0
aGVuCisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3
XCIKKwllY2hvIGxpYnM9XCItbG5jdXJzZXN3XCIKKwlleGl0IDAKK2ZpCisKK2lmIFsgLWYgL3Vz
ci9pbmNsdWRlL25jdXJzZXMvbmN1cnNlcy5oIF07IHRoZW4KKwllY2hvIGNmbGFncz1cIi1EX0dO
VV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc1wiCisJZWNobyBsaWJzPVwiLWxuY3Vyc2Vz
XCIKKwlleGl0IDAKK2ZpCisKK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXMuaCBdOyB0aGVu
CisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFXCIKKwllY2hvIGxpYnM9XCItbG5jdXJzZXNc
IgorCWV4aXQgMAorZmkKKworZWNobyA+JjIgIioiCitlY2hvID4mMiAiKiBVbmFibGUgdG8gZmlu
ZCB0aGUgbmN1cnNlcyBwYWNrYWdlLiIKK2VjaG8gPiYyICIqIEluc3RhbGwgbmN1cnNlcyAobmN1
cnNlcy1kZXZlbCBvciBsaWJuY3Vyc2VzLWRldiIKK2VjaG8gPiYyICIqIGRlcGVuZGluZyBvbiB5
b3VyIGRpc3RyaWJ1dGlvbikuIgorZWNobyA+JjIgIioiCitleGl0IDEKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTQwOTFmCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCkBAIC0wLDAgKzEsMTAzOSBAQAorLy8g
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKgorICogSW50cm9kdWNl
ZCBzaW5nbGUgbWVudSBtb2RlIChzaG93IGFsbCBzdWItbWVudXMgaW4gb25lIGxhcmdlIHRyZWUp
LgorICogMjAwMi0xMS0wNiBQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6PgorICoKKyAqIGkxOG4s
IDIwMDUsIEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgor
ICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxrYy5oIgorI2luY2x1ZGUgImx4ZGlh
bG9nL2RpYWxvZy5oIgorCitzdGF0aWMgY29uc3QgY2hhciBtY29uZl9yZWFkbWVbXSA9CisiT3Zl
cnZpZXdcbiIKKyItLS0tLS0tLVxuIgorIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBm
ZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGJ1aWxkLlxuIgorIkZlYXR1cmVzIGNhbiBl
aXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciBpZ25vcmVkLiBQYXJhbWV0ZXJzXG4i
CisibXVzdCBiZSBlbnRlcmVkIGluIGFzIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycyBv
ciB0ZXh0LlxuIgorIlxuIgorIk1lbnUgaXRlbXMgYmVnaW5uaW5nIHdpdGggZm9sbG93aW5nIGJy
YWNlcyByZXByZXNlbnQgZmVhdHVyZXMgdGhhdFxuIgorIiAgWyBdIGNhbiBiZSBidWlsdCBpbiBv
ciByZW1vdmVkXG4iCisiICA8ID4gY2FuIGJlIGJ1aWx0IGluLCBtb2R1bGFyaXplZCBvciByZW1v
dmVkXG4iCisiICB7IH0gY2FuIGJlIGJ1aWx0IGluIG9yIG1vZHVsYXJpemVkIChzZWxlY3RlZCBi
eSBvdGhlciBmZWF0dXJlKVxuIgorIiAgLSAtIGFyZSBzZWxlY3RlZCBieSBvdGhlciBmZWF0dXJl
LFxuIgorIndoaWxlICosIE0gb3Igd2hpdGVzcGFjZSBpbnNpZGUgYnJhY2VzIG1lYW5zIHRvIGJ1
aWxkIGluLCBidWlsZCBhc1xuIgorImEgbW9kdWxlIG9yIHRvIGV4Y2x1ZGUgdGhlIGZlYXR1cmUg
cmVzcGVjdGl2ZWx5LlxuIgorIlxuIgorIlRvIGNoYW5nZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXMs
IGhpZ2hsaWdodCBpdCB3aXRoIHRoZSBjdXJzb3JcbiIKKyJrZXlzIGFuZCBwcmVzcyA8WT4gdG8g
YnVpbGQgaXQgaW4sIDxNPiB0byBtYWtlIGl0IGEgbW9kdWxlIG9yXG4iCisiPE4+IHRvIHJlbW92
ZSBpdC4gIFlvdSBtYXkgYWxzbyBwcmVzcyB0aGUgPFNwYWNlIEJhcj4gdG8gY3ljbGVcbiIKKyJ0
aHJvdWdoIHRoZSBhdmFpbGFibGUgb3B0aW9ucyAoaS5lLiBZLT5OLT5NLT5ZKS5cbiIKKyJcbiIK
KyJTb21lIGFkZGl0aW9uYWwga2V5Ym9hcmQgaGludHM6XG4iCisiXG4iCisiTWVudXNcbiIKKyIt
LS0tLS0tLS0tXG4iCisibyAgVXNlIHRoZSBVcC9Eb3duIGFycm93IGtleXMgKGN1cnNvciBrZXlz
KSB0byBoaWdobGlnaHQgdGhlIGl0ZW0geW91XG4iCisiICAgd2lzaCB0byBjaGFuZ2Ugb3IgdGhl
IHN1Ym1lbnUgeW91IHdpc2ggdG8gc2VsZWN0IGFuZCBwcmVzcyA8RW50ZXI+LlxuIgorIiAgIFN1
Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IFwiLS0tPlwiLCBlbXB0eSBvbmVzIGJ5IFwiLS0tLVwi
LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyB0aGUgb3B0aW9uJ3MgaGlnaGxpZ2h0ZWQg
bGV0dGVyIChob3RrZXkpLlxuIgorIiAgICAgICAgICAgICBQcmVzc2luZyBhIGhvdGtleSBtb3Jl
IHRoYW4gb25jZSB3aWxsIHNlcXVlbmNlXG4iCisiICAgICAgICAgICAgIHRocm91Z2ggYWxsIHZp
c2libGUgaXRlbXMgd2hpY2ggdXNlIHRoYXQgaG90a2V5LlxuIgorIlxuIgorIiAgIFlvdSBtYXkg
YWxzbyB1c2UgdGhlIDxQQUdFIFVQPiBhbmQgPFBBR0UgRE9XTj4ga2V5cyB0byBzY3JvbGxcbiIK
KyIgICB1bnNlZW4gb3B0aW9ucyBpbnRvIHZpZXcuXG4iCisiXG4iCisibyAgVG8gZXhpdCBhIG1l
bnUgdXNlIHRoZSBjdXJzb3Iga2V5cyB0byBoaWdobGlnaHQgdGhlIDxFeGl0PiBidXR0b25cbiIK
KyIgICBhbmQgcHJlc3MgPEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgPEVT
Qz48RVNDPiBvciA8RT4gb3IgPFg+IGlmIHRoZXJlIGlzIG5vIGhvdGtleVxuIgorIiAgICAgICAg
ICAgICB1c2luZyB0aG9zZSBsZXR0ZXJzLiAgWW91IG1heSBwcmVzcyBhIHNpbmdsZSA8RVNDPiwg
YnV0XG4iCisiICAgICAgICAgICAgIHRoZXJlIGlzIGEgZGVsYXllZCByZXNwb25zZSB3aGljaCB5
b3UgbWF5IGZpbmQgYW5ub3lpbmcuXG4iCisiXG4iCisiICAgQWxzbywgdGhlIDxUQUI+IGFuZCBj
dXJzb3Iga2V5cyB3aWxsIGN5Y2xlIGJldHdlZW4gPFNlbGVjdD4sXG4iCisiICAgPEV4aXQ+LCA8
SGVscD4sIDxTYXZlPiwgYW5kIDxMb2FkPi5cbiIKKyJcbiIKKyJvICBUbyBnZXQgaGVscCB3aXRo
IGFuIGl0ZW0sIHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IDxIZWxwPlxuIgorIiAg
IGFuZCBwcmVzcyA8RU5URVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyA8SD4gb3Ig
PD8+LlxuIgorIlxuIgorIm8gIFRvIHRvZ2dsZSB0aGUgZGlzcGxheSBvZiBoaWRkZW4gb3B0aW9u
cywgcHJlc3MgPFo+LlxuIgorIlxuIgorIlxuIgorIlJhZGlvbGlzdHMgIChDaG9pY2UgbGlzdHMp
XG4iCisiLS0tLS0tLS0tLS1cbiIKKyJvICBVc2UgdGhlIGN1cnNvciBrZXlzIHRvIHNlbGVjdCB0
aGUgb3B0aW9uIHlvdSB3aXNoIHRvIHNldCBhbmQgcHJlc3NcbiIKKyIgICA8Uz4gb3IgdGhlIDxT
UEFDRSBCQVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyB0aGUgZmlyc3QgbGV0dGVy
IG9mIHRoZSBvcHRpb24geW91IHdpc2ggdG8gc2V0IHRoZW5cbiIKKyIgICAgICAgICAgICAgcHJl
c3MgPFM+IG9yIDxTUEFDRSBCQVI+LlxuIgorIlxuIgorIm8gIFRvIHNlZSBhdmFpbGFibGUgaGVs
cCBmb3IgdGhlIGl0ZW0sIHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0XG4iCisiICAg
PEhlbHA+IGFuZCBQcmVzcyA8RU5URVI+LlxuIgorIlxuIgorIiAgIFNob3J0Y3V0OiBQcmVzcyA8
SD4gb3IgPD8+LlxuIgorIlxuIgorIiAgIEFsc28sIHRoZSA8VEFCPiBhbmQgY3Vyc29yIGtleXMg
d2lsbCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+IGFuZFxuIgorIiAgIDxIZWxwPlxuIgorIlxuIgor
IlxuIgorIkRhdGEgRW50cnlcbiIKKyItLS0tLS0tLS0tLVxuIgorIm8gIEVudGVyIHRoZSByZXF1
ZXN0ZWQgaW5mb3JtYXRpb24gYW5kIHByZXNzIDxFTlRFUj5cbiIKKyIgICBJZiB5b3UgYXJlIGVu
dGVyaW5nIGhleGFkZWNpbWFsIHZhbHVlcywgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuIgorIiAg
IGFkZCB0aGUgJzB4JyBwcmVmaXggdG8gdGhlIGVudHJ5LlxuIgorIlxuIgorIm8gIEZvciBoZWxw
LCB1c2UgdGhlIDxUQUI+IG9yIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCB0aGUgaGVscCBvcHRp
b25cbiIKKyIgICBhbmQgcHJlc3MgPEVOVEVSPi4gIFlvdSBjYW4gdHJ5IDxUQUI+PEg+IGFzIHdl
bGwuXG4iCisiXG4iCisiXG4iCisiVGV4dCBCb3ggICAgKEhlbHAgV2luZG93KVxuIgorIi0tLS0t
LS0tXG4iCisibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzY3JvbGwgdXAvZG93bi9sZWZ0L3Jp
Z2h0LiAgVGhlIFZJIGVkaXRvclxuIgorIiAgIGtleXMgaCxqLGssbCBmdW5jdGlvbiBoZXJlIGFz
IGRvIDx1PiwgPGQ+LCA8U1BBQ0UgQkFSPiBhbmQgPEI+IGZvclxuIgorIiAgIHRob3NlIHdobyBh
cmUgZmFtaWxpYXIgd2l0aCBsZXNzIGFuZCBseW54LlxuIgorIlxuIgorIm8gIFByZXNzIDxFPiwg
PFg+LCA8cT4sIDxFbnRlcj4gb3IgPEVzYz48RXNjPiB0byBleGl0LlxuIgorIlxuIgorIlxuIgor
IkFsdGVybmF0ZSBDb25maWd1cmF0aW9uIEZpbGVzXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS1cbiIKKyJNZW51Y29uZmlnIHN1cHBvcnRzIHRoZSB1c2Ugb2YgYWx0ZXJuYXRlIGNv
bmZpZ3VyYXRpb24gZmlsZXMgZm9yXG4iCisidGhvc2Ugd2hvLCBmb3IgdmFyaW91cyByZWFzb25z
LCBmaW5kIGl0IG5lY2Vzc2FyeSB0byBzd2l0Y2hcbiIKKyJiZXR3ZWVuIGRpZmZlcmVudCBjb25m
aWd1cmF0aW9ucy5cbiIKKyJcbiIKKyJUaGUgPFNhdmU+IGJ1dHRvbiB3aWxsIGxldCB5b3Ugc2F2
ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHRvXG4iCisiYSBmaWxlIG9mIHlvdXIgY2hvb3Np
bmcuICBVc2UgdGhlIDxMb2FkPiBidXR0b24gdG8gbG9hZCBhIHByZXZpb3VzbHlcbiIKKyJzYXZl
ZCBhbHRlcm5hdGUgY29uZmlndXJhdGlvbi5cbiIKKyJcbiIKKyJFdmVuIGlmIHlvdSBkb24ndCB1
c2UgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJ1dCB5b3UgZmluZFxuIgorImR1cmlu
ZyBhIE1lbnVjb25maWcgc2Vzc2lvbiB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgbWVzc2VkIHVw
IHlvdXJcbiIKKyJzZXR0aW5ncywgeW91IG1heSB1c2UgdGhlIDxMb2FkPiBidXR0b24gdG8gcmVz
dG9yZSB5b3VyIHByZXZpb3VzbHlcbiIKKyJzYXZlZCBzZXR0aW5ncyBmcm9tIFwiLmNvbmZpZ1wi
IHdpdGhvdXQgcmVzdGFydGluZyBNZW51Y29uZmlnLlxuIgorIlxuIgorIk90aGVyIGluZm9ybWF0
aW9uXG4iCisiLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJJZiB5b3UgdXNlIE1lbnVjb25maWcgaW4g
YW4gWFRFUk0gd2luZG93LCBtYWtlIHN1cmUgeW91IGhhdmUgeW91clxuIgorIiRURVJNIHZhcmlh
YmxlIHNldCB0byBwb2ludCB0byBhbiB4dGVybSBkZWZpbml0aW9uIHdoaWNoIHN1cHBvcnRzXG4i
CisiY29sb3IuICBPdGhlcndpc2UsIE1lbnVjb25maWcgd2lsbCBsb29rIHJhdGhlciBiYWQuICBN
ZW51Y29uZmlnIHdpbGxcbiIKKyJub3QgZGlzcGxheSBjb3JyZWN0bHkgaW4gYW4gUlhWVCB3aW5k
b3cgYmVjYXVzZSByeHZ0IGRpc3BsYXlzIG9ubHkgb25lXG4iCisiaW50ZW5zaXR5IG9mIGNvbG9y
LCBicmlnaHQuXG4iCisiXG4iCisiTWVudWNvbmZpZyB3aWxsIGRpc3BsYXkgbGFyZ2VyIG1lbnVz
IG9uIHNjcmVlbnMgb3IgeHRlcm1zIHdoaWNoIGFyZVxuIgorInNldCB0byBkaXNwbGF5IG1vcmUg
dGhhbiB0aGUgc3RhbmRhcmQgMjUgcm93IGJ5IDgwIGNvbHVtbiBnZW9tZXRyeS5cbiIKKyJJbiBv
cmRlciBmb3IgdGhpcyB0byB3b3JrLCB0aGUgXCJzdHR5IHNpemVcIiBjb21tYW5kIG11c3QgYmUg
YWJsZSB0b1xuIgorImRpc3BsYXkgdGhlIHNjcmVlbidzIGN1cnJlbnQgcm93IGFuZCBjb2x1bW4g
Z2VvbWV0cnkuICBJIFNUUk9OR0xZXG4iCisiUkVDT01NRU5EIHRoYXQgeW91IG1ha2Ugc3VyZSB5
b3UgZG8gTk9UIGhhdmUgdGhlIHNoZWxsIHZhcmlhYmxlc1xuIgorIkxJTkVTIGFuZCBDT0xVTU5T
IGV4cG9ydGVkIGludG8geW91ciBlbnZpcm9ubWVudC4gIFNvbWUgZGlzdHJpYnV0aW9uc1xuIgor
ImV4cG9ydCB0aG9zZSB2YXJpYWJsZXMgdmlhIC9ldGMvcHJvZmlsZS4gIFNvbWUgbmN1cnNlcyBw
cm9ncmFtcyBjYW5cbiIKKyJiZWNvbWUgY29uZnVzZWQgd2hlbiB0aG9zZSB2YXJpYWJsZXMgKExJ
TkVTICYgQ09MVU1OUykgZG9uJ3QgcmVmbGVjdFxuIgorInRoZSB0cnVlIHNjcmVlbiBzaXplLlxu
IgorIlxuIgorIk9wdGlvbmFsIHBlcnNvbmFsaXR5IGF2YWlsYWJsZVxuIgorIi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2YgdGhl
IG9wdGlvbnMgbGlzdGVkIGluIGEgc2luZ2xlIG1lbnUsXG4iCisicmF0aGVyIHRoYW4gdGhlIGRl
ZmF1bHQgbXVsdGltZW51IGhpZXJhcmNoeSwgcnVuIHRoZSBtZW51Y29uZmlnIHdpdGhcbiIKKyJN
RU5VQ09ORklHX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiBF
eGFtcGxlOlxuIgorIlxuIgorIm1ha2UgTUVOVUNPTkZJR19NT0RFPXNpbmdsZV9tZW51IG1lbnVj
b25maWdcbiIKKyJcbiIKKyI8RW50ZXI+IHdpbGwgdGhlbiB1bnJvbGwgdGhlIGFwcHJvcHJpYXRl
IGNhdGVnb3J5LCBvciBlbmZvbGQgaXQgaWYgaXRcbiIKKyJpcyBhbHJlYWR5IHVucm9sbGVkLlxu
IgorIlxuIgorIk5vdGUgdGhhdCB0aGlzIG1vZGUgY2FuIGV2ZW50dWFsbHkgYmUgYSBsaXR0bGUg
bW9yZSBDUFUgZXhwZW5zaXZlXG4iCisiKGVzcGVjaWFsbHkgd2l0aCBhIGxhcmdlciBudW1iZXIg
b2YgdW5yb2xsZWQgY2F0ZWdvcmllcykgdGhhbiB0aGVcbiIKKyJkZWZhdWx0IG1vZGUuXG4iCisi
XG4iCisiRGlmZmVyZW50IGNvbG9yIHRoZW1lcyBhdmFpbGFibGVcbiIKKyItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIkl0IGlzIHBvc3NpYmxlIHRvIHNlbGVjdCBkaWZmZXJl
bnQgY29sb3IgdGhlbWVzIHVzaW5nIHRoZSB2YXJpYWJsZVxuIgorIk1FTlVDT05GSUdfQ09MT1Iu
IFRvIHNlbGVjdCBhIHRoZW1lIHVzZTpcbiIKKyJcbiIKKyJtYWtlIE1FTlVDT05GSUdfQ09MT1I9
PHRoZW1lPiBtZW51Y29uZmlnXG4iCisiXG4iCisiQXZhaWxhYmxlIHRoZW1lcyBhcmVcbiIKKyIg
bW9ubyAgICAgICA9PiBzZWxlY3RzIGNvbG9ycyBzdWl0YWJsZSBmb3IgbW9ub2Nocm9tZSBkaXNw
bGF5c1xuIgorIiBibGFja2JnICAgID0+IHNlbGVjdHMgYSBjb2xvciBzY2hlbWUgd2l0aCBibGFj
ayBiYWNrZ3JvdW5kXG4iCisiIGNsYXNzaWMgICAgPT4gdGhlbWUgd2l0aCBibHVlIGJhY2tncm91
bmQuIFRoZSBjbGFzc2ljIGxvb2tcbiIKKyIgYmx1ZXRpdGxlICA9PiBhbiBMQ0QgZnJpZW5kbHkg
dmVyc2lvbiBvZiBjbGFzc2ljLiAoZGVmYXVsdClcbiIKKyJcbiIsCittZW51X2luc3RydWN0aW9u
c1tdID0KKwkiQXJyb3cga2V5cyBuYXZpZ2F0ZSB0aGUgbWVudS4gICIKKwkiPEVudGVyPiBzZWxl
Y3RzIHN1Ym1lbnVzIC0tLT4gKG9yIGVtcHR5IHN1Ym1lbnVzIC0tLS0pLiAgIgorCSJIaWdobGln
aHRlZCBsZXR0ZXJzIGFyZSBob3RrZXlzLiAgIgorCSJQcmVzc2luZyA8WT4gaW5jbHVkZXMsIDxO
PiBleGNsdWRlcywgPE0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLiAgIgorCSJQcmVzcyA8RXNjPjxF
c2M+IHRvIGV4aXQsIDw/PiBmb3IgSGVscCwgPC8+IGZvciBTZWFyY2guICAiCisJIkxlZ2VuZDog
WypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJs
ZSIsCityYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQorCSJVc2UgdGhlIGFycm93IGtleXMgdG8g
bmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgorCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVt
IHlvdSB3aXNoIHRvIHNlbGVjdCAiCisJImZvbGxvd2VkIGJ5IHRoZSA8U1BBQ0UgQkFSPi4gIgor
CSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24u
IiwKK2lucHV0Ym94X2luc3RydWN0aW9uc19pbnRbXSA9CisJIlBsZWFzZSBlbnRlciBhIGRlY2lt
YWwgdmFsdWUuICIKKwkiRnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgIgorCSJVc2Ug
dGhlIDxUQUI+IGtleSB0byBtb3ZlIGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25z
IGJlbG93IGl0LiIsCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQorCSJQbGVhc2UgZW50
ZXIgYSBoZXhhZGVjaW1hbCB2YWx1ZS4gIgorCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3ZlIGZy
b20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsCitpbnB1dGJveF9p
bnN0cnVjdGlvbnNfc3RyaW5nW10gPQorCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuICIK
KwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUg
YnV0dG9ucyBiZWxvdyBpdC4iLAorc2V0bW9kX3RleHRbXSA9CisJIlRoaXMgZmVhdHVyZSBkZXBl
bmRzIG9uIGFub3RoZXIgd2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhIG1vZHVsZS5cbiIK
KwkiQXMgYSByZXN1bHQsIHRoaXMgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiIs
Citsb2FkX2NvbmZpZ190ZXh0W10gPQorCSJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJh
dGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuICAiCisJIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0
byByZXN0b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdSAiCisJImxhc3QgcmV0cmlldmVkLiAgTGVh
dmUgYmxhbmsgdG8gYWJvcnQuIiwKK2xvYWRfY29uZmlnX2hlbHBbXSA9CisJIlxuIgorCSJGb3Ig
dmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxu
IgorCSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKKwki
XG4iCisJIklmIHlvdSBoYXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZp
bGUgb3RoZXIgdGhhbiB0aGVcbiIKKwkiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhl
cmUgd2lsbCBhbGxvdyB5b3UgdG8gbW9kaWZ5IHRoYXRcbiIKKwkiY29uZmlndXJhdGlvbi5cbiIK
KwkiXG4iCisJIklmIHlvdSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5IG5l
dmVyIHVzZWQgYWx0ZXJuYXRlXG4iCisJImNvbmZpZ3VyYXRpb24gZmlsZXMuIFlvdSBzaG91bGQg
dGhlcmVmb3JlIGxlYXZlIHRoaXMgYmxhbmsgdG8gYWJvcnQuXG4iLAorc2F2ZV9jb25maWdfdGV4
dFtdID0KKwkiRW50ZXIgYSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hv
dWxkIGJlIHNhdmVkICIKKwkiYXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQu
IiwKK3NhdmVfY29uZmlnX2hlbHBbXSA9CisJIlxuIgorCSJGb3IgdmFyaW91cyByZWFzb25zLCBv
bmUgbWF5IHdpc2ggdG8ga2VlcCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiIKKwkiYXZhaWxh
YmxlIG9uIGEgc2luZ2xlIG1hY2hpbmUuXG4iCisJIlxuIgorCSJFbnRlcmluZyBhIGZpbGUgbmFt
ZSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIGxhdGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKKwkiYW5k
IHVzZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0ZXZl
clxuIgorCSJjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0
aW1lLlxuIgorCSJcbiIKKwkiSWYgeW91IGFyZSB1bmNlcnRhaW4gd2hhdCBhbGwgdGhpcyBtZWFu
cyB0aGVuIHlvdSBzaG91bGQgcHJvYmFibHlcbiIKKwkibGVhdmUgdGhpcyBibGFuay5cbiIsCitz
ZWFyY2hfaGVscFtdID0KKwkiXG4iCisJIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlzcGxheSB0
aGVpciByZWxhdGlvbnMuXG4iCisJIlJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuXG4i
CisJIkV4YW1wbGU6IHNlYXJjaCBmb3IgXCJeRk9PXCJcbiIKKwkiUmVzdWx0OlxuIgorCSItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIgorCSJTeW1ib2w6IEZPTyBbPW1dXG4iCisJIlR5cGUgIDogdHJpc3RhdGVcbiIKKwki
UHJvbXB0OiBGb28gYnVzIGlzIHVzZWQgdG8gZHJpdmUgdGhlIGJhciBIV1xuIgorCSIgIExvY2F0
aW9uOlxuIgorCSIgICAgLT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EpXG4i
CisJIiAgICAgIC0+IFBDSSBzdXBwb3J0IChQQ0kgWz15XSlcbiIKKwkiKDEpICAgICAtPiBQQ0kg
YWNjZXNzIG1vZGUgKDxjaG9pY2U+IFs9eV0pXG4iCisJIiAgRGVmaW5lZCBhdCBkcml2ZXJzL3Bj
aS9LY29uZmlnOjQ3XG4iCisJIiAgRGVwZW5kcyBvbjogWDg2X0xPQ0FMX0FQSUMgJiYgWDg2X0lP
X0FQSUMgfHwgSUE2NFxuIgorCSIgIFNlbGVjdHM6IExJQkNSQzMyXG4iCisJIiAgU2VsZWN0ZWQg
Ynk6IEJBUiBbPW5dXG4iCisJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJIm8gVGhlIGxpbmUgJ1R5cGU6JyBzaG93
cyB0aGUgdHlwZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yXG4iCisJIiAgdGhpcyBz
eW1ib2wgKGJvb2wsIHRyaXN0YXRlLCBzdHJpbmcsIC4uLilcbiIKKwkibyBUaGUgbGluZSAnUHJv
bXB0Oicgc2hvd3MgdGhlIHRleHQgdXNlZCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgZm9yXG4iCisJ
IiAgdGhpcyBzeW1ib2xcbiIKKwkibyBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQgd2hh
dCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIgorCSIgIGlzIGRlZmluZWRcbiIKKwki
byBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyBuZWVkIHRvIGJlIGRl
ZmluZWQgZm9yXG4iCisJIiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVudSAo
c2VsZWN0YWJsZSlcbiIKKwkibyBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVsbHMgd2hlcmUgaW4g
dGhlIG1lbnUgc3RydWN0dXJlIHRoaXMgc3ltYm9sXG4iCisJIiAgaXMgbG9jYXRlZFxuIgorCSIg
ICAgQSBsb2NhdGlvbiBmb2xsb3dlZCBieSBhIFs9eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBh
XG4iCisJIiAgICBzZWxlY3RhYmxlIG1lbnUgaXRlbSAtIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBp
cyBkaXNwbGF5ZWQgaW5zaWRlXG4iCisJIiAgICBicmFja2V0cy5cbiIKKwkiICAgIFByZXNzIHRo
ZSBrZXkgaW4gdGhlICgjKSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iCisJIiAg
ICBsb2NhdGlvbi4gWW91IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGN1cnJlbnQgc2VhcmNoIHJl
c3VsdHNcbiIKKwkiICAgIGFmdGVyIGV4aXRpbmcgdGhpcyBuZXcgbWVudS5cbiIKKwkibyBUaGUg
J1NlbGVjdHM6JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyB3aWxsIGJlIGF1dG9tYXRpY2FsbHlc
biIKKwkiICBzZWxlY3RlZCBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKVxuIgor
CSJvIFRoZSAnU2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVk
IHRoaXMgc3ltYm9sXG4iCisJIlxuIgorCSJPbmx5IHJlbGV2YW50IGxpbmVzIGFyZSBzaG93bi5c
biIKKwkiXG5cbiIKKwkiU2VhcmNoIGV4YW1wbGVzOlxuIgorCSJFeGFtcGxlczogVVNCCT0+IGZp
bmQgYWxsIHN5bWJvbHMgY29udGFpbmluZyBVU0JcbiIKKwkiICAgICAgICAgIF5VU0IgPT4gZmlu
ZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxuIgorCSIgICAgICAgICAgVVNCJCA9PiBm
aW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIgorCSJcbiI7CisKK3N0YXRpYyBpbnQg
aW5kZW50Oworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7CitzdGF0aWMgaW50IGNo
aWxkX2NvdW50Oworc3RhdGljIGludCBzaW5nbGVfbWVudV9tb2RlOworc3RhdGljIGludCBzaG93
X2FsbF9vcHRpb25zOworc3RhdGljIGludCBzYXZlX2FuZF9leGl0Oworc3RhdGljIGludCBzaWxl
bnQ7CisKK3N0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBtZW51ICph
Y3RpdmVfbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7
CitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9p
ZCBjb25mX2xvYWQodm9pZCk7CitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7CitzdGF0aWMg
aW50IHNob3dfdGV4dGJveF9leHQoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRleHQsIGludCBy
LCBpbnQgYywKKwkJCSAgICBpbnQgKmtleXMsIGludCAqdnNjcm9sbCwgaW50ICpoc2Nyb2xsLAor
CQkJICAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsKK3N0YXRpYyB2
b2lkIHNob3dfdGV4dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdGV4dCwgaW50
IHIsIGludCBjKTsKK3N0YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUs
IGNvbnN0IGNoYXIgKnRleHQpOworc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICpt
ZW51KTsKKworc3RhdGljIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07CitzdGF0aWMgdm9pZCBz
ZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKK3sKKwlzdGF0
aWMgY2hhciBtZW51X2JhY2t0aXRsZVtQQVRIX01BWCsxMjhdOworCWludCBzaXplOworCisJc2l6
ZSA9IHNucHJpbnRmKG1lbnVfYmFja3RpdGxlLCBzaXplb2YobWVudV9iYWNrdGl0bGUpLAorCQkJ
IiVzIC0gJXMiLCBjb25maWdfZmlsZW5hbWUsIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisJaWYg
KHNpemUgPj0gc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSkKKwkJbWVudV9iYWNrdGl0bGVbc2l6ZW9m
KG1lbnVfYmFja3RpdGxlKS0xXSA9ICdcMCc7CisJc2V0X2RpYWxvZ19iYWNrdGl0bGUobWVudV9i
YWNrdGl0bGUpOworCisJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUp
LCAiJXMiLCBjb25maWdfZmlsZW5hbWUpOworCWlmIChzaXplID49IHNpemVvZihmaWxlbmFtZSkp
CisJCWZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAnXDAnOworfQorCitzdHJ1Y3Qgc3Vi
dGl0bGVfcGFydCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOworCWNvbnN0IGNoYXIgKnRl
eHQ7Cit9Oworc3RhdGljIExJU1RfSEVBRCh0cmFpbCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3VidGl0
bGVfbGlzdCAqc3VidGl0bGVzOworc3RhdGljIHZvaWQgc2V0X3N1YnRpdGxlKHZvaWQpCit7CisJ
c3RydWN0IHN1YnRpdGxlX3BhcnQgKnNwOworCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3MsICp0
bXA7CisKKwlmb3IgKHBvcyA9IHN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHRtcCkgewor
CQl0bXAgPSBwb3MtPm5leHQ7CisJCWZyZWUocG9zKTsKKwl9CisKKwlzdWJ0aXRsZXMgPSBOVUxM
OworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3AsICZ0cmFpbCwgZW50cmllcykgeworCQlpZiAoc3At
PnRleHQpIHsKKwkJCWlmIChwb3MpIHsKKwkJCQlwb3MtPm5leHQgPSB4Y2FsbG9jKDEsIHNpemVv
ZigqcG9zKSk7CisJCQkJcG9zID0gcG9zLT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlzdWJ0aXRs
ZXMgPSBwb3MgPSB4Y2FsbG9jKDEsIHNpemVvZigqcG9zKSk7CisJCQl9CisJCQlwb3MtPnRleHQg
PSBzcC0+dGV4dDsKKwkJfQorCX0KKworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7
Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X3N1YnRpdGxlKHZvaWQpCit7CisJc3RydWN0IHN1YnRp
dGxlX2xpc3QgKnBvcywgKnRtcDsKKworCWZvciAocG9zID0gc3VidGl0bGVzOyBwb3MgIT0gTlVM
TDsgcG9zID0gdG1wKSB7CisJCXRtcCA9IHBvcy0+bmV4dDsKKwkJZnJlZShwb3MpOworCX0KKwlz
dWJ0aXRsZXMgPSBOVUxMOworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7Cit9CisK
K3N0cnVjdCBzZWFyY2hfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1Y3Qg
bWVudSAqKnRhcmdldHM7CisJaW50ICprZXlzOworfTsKKworc3RhdGljIHZvaWQgdXBkYXRlX3Rl
eHQoY2hhciAqYnVmLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZvaWQgKl9kYXRhKQorewor
CXN0cnVjdCBzZWFyY2hfZGF0YSAqZGF0YSA9IF9kYXRhOworCXN0cnVjdCBqdW1wX2tleSAqcG9z
OworCWludCBrID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBkYXRhLT5oZWFkLCBl
bnRyaWVzKSB7CisJCWlmIChwb3MtPm9mZnNldCA+PSBzdGFydCAmJiBwb3MtPm9mZnNldCA8IGVu
ZCkgeworCQkJY2hhciBoZWFkZXJbNF07CisKKwkJCWlmIChrIDwgSlVNUF9OQikgeworCQkJCWlu
dCBrZXkgPSAnMCcgKyAocG9zLT5pbmRleCAlIEpVTVBfTkIpICsgMTsKKworCQkJCXNwcmludGYo
aGVhZGVyLCAiKCVjKSIsIGtleSk7CisJCQkJZGF0YS0+a2V5c1trXSA9IGtleTsKKwkJCQlkYXRh
LT50YXJnZXRzW2tdID0gcG9zLT50YXJnZXQ7CisJCQkJaysrOworCQkJfSBlbHNlIHsKKwkJCQlz
cHJpbnRmKGhlYWRlciwgIiAgICIpOworCQkJfQorCisJCQltZW1jcHkoYnVmICsgcG9zLT5vZmZz
ZXQsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikgLSAxKTsKKwkJfQorCX0KKwlkYXRhLT5rZXlzW2td
ID0gMDsKK30KKworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKK3sKKwlzdHJ1Y3Qgc3lt
Ym9sICoqc3ltX2FycjsKKwlzdHJ1Y3QgZ3N0ciByZXM7CisJc3RydWN0IGdzdHIgdGl0bGU7CisJ
Y2hhciAqZGlhbG9nX2lucHV0OworCWludCBkcmVzLCB2c2Nyb2xsID0gMCwgaHNjcm9sbCA9IDA7
CisJYm9vbCBhZ2FpbjsKKwlzdHJ1Y3QgZ3N0ciBzdHRleHQ7CisJc3RydWN0IHN1YnRpdGxlX3Bh
cnQgc3RwYXJ0OworCisJdGl0bGUgPSBzdHJfbmV3KCk7CisJc3RyX3ByaW50ZiggJnRpdGxlLCAi
RW50ZXIgKHN1YilzdHJpbmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIgorCQkJICAgICAgIih3
aXRoIG9yIHdpdGhvdXQgXCIlc1wiKSIsIENPTkZJR18pOworCithZ2FpbjoKKwlkaWFsb2dfY2xl
YXIoKTsKKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJh
bWV0ZXIiLAorCQkJICAgICAgc3RyX2dldCgmdGl0bGUpLAorCQkJICAgICAgMTAsIDc1LCAiIik7
CisJc3dpdGNoIChkcmVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCXNob3df
aGVscHRleHQoIlNlYXJjaCBDb25maWd1cmF0aW9uIiwgc2VhcmNoX2hlbHApOworCQlnb3RvIGFn
YWluOworCWRlZmF1bHQ6CisJCXN0cl9mcmVlKCZ0aXRsZSk7CisJCXJldHVybjsKKwl9CisKKwkv
KiBzdHJpcCB0aGUgcHJlZml4IGlmIG5lY2Vzc2FyeSAqLworCWRpYWxvZ19pbnB1dCA9IGRpYWxv
Z19pbnB1dF9yZXN1bHQ7CisJaWYgKHN0cm5jYXNlY21wKGRpYWxvZ19pbnB1dF9yZXN1bHQsIENP
TkZJR18sIHN0cmxlbihDT05GSUdfKSkgPT0gMCkKKwkJZGlhbG9nX2lucHV0ICs9IHN0cmxlbihD
T05GSUdfKTsKKworCXN0dGV4dCA9IHN0cl9uZXcoKTsKKwlzdHJfcHJpbnRmKCZzdHRleHQsICJT
ZWFyY2ggKCVzKSIsIGRpYWxvZ19pbnB1dF9yZXN1bHQpOworCXN0cGFydC50ZXh0ID0gc3RyX2dl
dCgmc3R0ZXh0KTsKKwlsaXN0X2FkZF90YWlsKCZzdHBhcnQuZW50cmllcywgJnRyYWlsKTsKKwor
CXN5bV9hcnIgPSBzeW1fcmVfc2VhcmNoKGRpYWxvZ19pbnB1dCk7CisJZG8geworCQlMSVNUX0hF
QUQoaGVhZCk7CisJCXN0cnVjdCBtZW51ICp0YXJnZXRzW0pVTVBfTkJdOworCQlpbnQga2V5c1tK
VU1QX05CICsgMV0sIGk7CisJCXN0cnVjdCBzZWFyY2hfZGF0YSBkYXRhID0geworCQkJLmhlYWQg
PSAmaGVhZCwKKwkJCS50YXJnZXRzID0gdGFyZ2V0cywKKwkJCS5rZXlzID0ga2V5cywKKwkJfTsK
KwkJc3RydWN0IGp1bXBfa2V5ICpwb3MsICp0bXA7CisKKwkJcmVzID0gZ2V0X3JlbGF0aW9uc19z
dHIoc3ltX2FyciwgJmhlYWQpOworCQlzZXRfc3VidGl0bGUoKTsKKwkJZHJlcyA9IHNob3dfdGV4
dGJveF9leHQoIlNlYXJjaCBSZXN1bHRzIiwgKGNoYXIgKikKKwkJCQkJc3RyX2dldCgmcmVzKSwg
MCwgMCwga2V5cywgJnZzY3JvbGwsCisJCQkJCSZoc2Nyb2xsLCAmdXBkYXRlX3RleHQsICh2b2lk
ICopCisJCQkJCSZkYXRhKTsKKwkJYWdhaW4gPSBmYWxzZTsKKwkJZm9yIChpID0gMDsgaSA8IEpV
TVBfTkIgJiYga2V5c1tpXTsgaSsrKQorCQkJaWYgKGRyZXMgPT0ga2V5c1tpXSkgeworCQkJCWNv
bmYodGFyZ2V0c1tpXS0+cGFyZW50LCB0YXJnZXRzW2ldKTsKKwkJCQlhZ2FpbiA9IHRydWU7CisJ
CQl9CisJCXN0cl9mcmVlKCZyZXMpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0
bXAsICZoZWFkLCBlbnRyaWVzKQorCQkJZnJlZShwb3MpOworCX0gd2hpbGUgKGFnYWluKTsKKwlm
cmVlKHN5bV9hcnIpOworCXN0cl9mcmVlKCZ0aXRsZSk7CisJbGlzdF9kZWwodHJhaWwucHJldik7
CisJc3RyX2ZyZWUoJnN0dGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3RydWN0
IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAq
cHJvcDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOwor
CXRyaXN0YXRlIHZhbDsKKwljaGFyIGNoOworCWJvb2wgdmlzaWJsZTsKKworCS8qCisJICogbm90
ZTogbWVudV9pc192aXNpYmxlKCkgaGFzIHNpZGUgZWZmZWN0IHRoYXQgaXQgd2lsbAorCSAqIHJl
Y2FsYyB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbC4KKwkgKi8KKwl2aXNpYmxlID0gbWVudV9pc192
aXNpYmxlKG1lbnUpOworCWlmIChzaG93X2FsbF9vcHRpb25zICYmICFtZW51X2hhc19wcm9tcHQo
bWVudSkpCisJCXJldHVybjsKKwllbHNlIGlmICghc2hvd19hbGxfb3B0aW9ucyAmJiAhdmlzaWJs
ZSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCXByb3AgPSBtZW51LT5wcm9tcHQ7
CisJaWYgKCFzeW0pIHsKKwkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsKKwkJ
CWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCXN3aXRjaCAo
cHJvcC0+dHlwZSkgeworCQkJY2FzZSBQX01FTlU6CisJCQkJY2hpbGRfY291bnQrKzsKKwkJCQlp
ZiAoc2luZ2xlX21lbnVfbW9kZSkgeworCQkJCQlpdGVtX21ha2UoIiVzJSpjJXMiLAorCQkJCQkJ
ICBtZW51LT5kYXRhID8gIi0tPiIgOiAiKys+IiwKKwkJCQkJCSAgaW5kZW50ICsgMSwgJyAnLCBw
cm9tcHQpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21ha2UoIiAgICUqYyVzICAlcyIsCisJCQkJ
CQkgIGluZGVudCArIDEsICcgJywgcHJvbXB0LAorCQkJCQkJICBtZW51X2lzX2VtcHR5KG1lbnUp
ID8gIi0tLS0iIDogIi0tLT4iKTsKKwkJCQlpdGVtX3NldF90YWcoJ20nKTsKKwkJCQlpdGVtX3Nl
dF9kYXRhKG1lbnUpOworCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEpCisJ
CQkJCWdvdG8gY29uZl9jaGlsZHM7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQX0NPTU1FTlQ6CisJ
CQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UoIiAg
ICUqYyoqKiAlcyAqKioiLCBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJCWl0ZW1fc2V0
X3RhZygnOicpOworCQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJCX0KKwkJCQlicmVhazsK
KwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJ
CQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOworCQkJCQlp
dGVtX3NldF90YWcoJzonKTsKKwkJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQl9CisJCQl9
CisJCX0gZWxzZQorCQkJZG9pbnQgPSAwOworCQlnb3RvIGNvbmZfY2hpbGRzOworCX0KKworCXR5
cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJCXN0
cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQlzdHJ1
Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOworCisJCWNoaWxkX2NvdW50Kys7CisJCWZvciAoY2hp
bGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKG1l
bnVfaXNfdmlzaWJsZShjaGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQorCQkJCWRlZl9t
ZW51ID0gY2hpbGQ7CisJCX0KKworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7
CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJ
Y2FzZSBTX0JPT0xFQU46CisJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDog
JyonKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkg
eworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2FzZSBtb2Q6IGNoID0gJ00n
OyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOworCQkJCX0KKwkJCQlpdGVt
X21ha2UoIjwlYz4iLCBjaCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpdGVtX3NldF90YWcoJ3Qn
KTsKKwkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJCX0gZWxzZSB7CisJCQlpdGVtX21ha2UoIiAg
ICIpOworCQkJaXRlbV9zZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsKKwkJCWl0ZW1fc2V0
X2RhdGEobWVudSk7CisJCX0KKworCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwg
JyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQlpZiAodmFsID09IHllcykgeworCQkJaWYg
KGRlZl9tZW51KSB7CisJCQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsIG1lbnVfZ2V0X3Byb21wdChk
ZWZfbWVudSkpOworCQkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7CisJCQkJaWYgKGRlZl9tZW51
LT5saXN0KSB7CisJCQkJCWluZGVudCArPSAyOworCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsK
KwkJCQkJaW5kZW50IC09IDI7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuOworCQl9CisJfSBlbHNl
IHsKKwkJaWYgKG1lbnUgPT0gY3VycmVudF9tZW51KSB7CisJCQlpdGVtX21ha2UoIi0tLSUqYyVz
IiwgaW5kZW50ICsgMSwgJyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQkJaXRlbV9zZXRf
dGFnKCc6Jyk7CisJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJZ290byBjb25mX2NoaWxkczsK
KwkJfQorCQljaGlsZF9jb3VudCsrOworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSk7CisJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgeworCQkJ
aXRlbV9tYWtlKCIgICAiKTsKKwkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJaXRlbV9zZXRfZGF0
YShtZW51KTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xF
QU46CisJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQkJaXRlbV9tYWtlKCJbJWNd
IiwgdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQllbHNlCisJCQkJCWl0ZW1fbWFrZSgiLSVj
LSIsIHZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJ
aXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJ
CQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2Fz
ZSBtb2Q6IGNoID0gJ00nOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOwor
CQkJCX0KKwkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCQkJCWlmIChzeW0tPnJl
dl9kZXAudHJpID09IG1vZCkKKwkJCQkJCWl0ZW1fbWFrZSgieyVjfSIsIGNoKTsKKwkJCQkJZWxz
ZQorCQkJCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21h
a2UoIi0lYy0iLCBjaCk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJaXRlbV9zZXRfZGF0
YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wID0gMiArIHN0cmxlbihz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsgLyogKCkgPSAyICovCisJCQkJaXRlbV9tYWtlKCIo
JXMpIiwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCQkJdG1wID0gaW5kZW50IC0gdG1w
ICsgNDsKKwkJCQlpZiAodG1wIDwgMCkKKwkJCQkJdG1wID0gMDsKKwkJCQlpdGVtX2FkZF9zdHIo
IiUqYyVzJXMiLCB0bXAsICcgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpLAorCQkJCQkgICAgIChz
eW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPworCQkJCQkgICAg
ICIiIDogIiAoTkVXKSIpOworCQkJCWl0ZW1fc2V0X3RhZygncycpOworCQkJCWl0ZW1fc2V0X2Rh
dGEobWVudSk7CisJCQkJZ290byBjb25mX2NoaWxkczsKKwkJCX0KKwkJfQorCQlpdGVtX2FkZF9z
dHIoIiUqYyVzJXMiLCBpbmRlbnQgKyAxLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSwKKwkJ
CSAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/CisJCQkg
ICIiIDogIiAoTkVXKSIpOworCQlpZiAobWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgewor
CQkJaXRlbV9hZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICIt
LS0+Iik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKK2NvbmZfY2hpbGRzOgorCWluZGVudCArPSBk
b2ludDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHQpCisJCWJ1aWxkX2NvbmYoY2hpbGQpOworCWluZGVudCAtPSBkb2ludDsKK30KKworc3RhdGlj
IHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IG1lbnUgKmFjdGl2ZV9tZW51KQor
eworCXN0cnVjdCBtZW51ICpzdWJtZW51OworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0
X3Byb21wdChtZW51KTsKKwlzdHJ1Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7CisJc3RydWN0IHN5
bWJvbCAqc3ltOworCWludCByZXM7CisJaW50IHNfc2Nyb2xsID0gMDsKKworCWlmIChtZW51ICE9
ICZyb290bWVudSkKKwkJc3RwYXJ0LnRleHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJZWxz
ZQorCQlzdHBhcnQudGV4dCA9IE5VTEw7CisJbGlzdF9hZGRfdGFpbCgmc3RwYXJ0LmVudHJpZXMs
ICZ0cmFpbCk7CisKKwl3aGlsZSAoMSkgeworCQlpdGVtX3Jlc2V0KCk7CisJCWN1cnJlbnRfbWVu
dSA9IG1lbnU7CisJCWJ1aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJCQli
cmVhazsKKwkJc2V0X3N1YnRpdGxlKCk7CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFs
b2dfbWVudShwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKKwkJCQkgIG1lbnVfaW5zdHJ1
Y3Rpb25zLAorCQkJCSAgYWN0aXZlX21lbnUsICZzX3Njcm9sbCk7CisJCWlmIChyZXMgPT0gMSB8
fCByZXMgPT0gS0VZX0VTQyB8fCByZXMgPT0gLUVSUkRJU1BMQVlUT09TTUFMTCkKKwkJCWJyZWFr
OworCQlpZiAoaXRlbV9jb3VudCgpICE9IDApIHsKKwkJCWlmICghaXRlbV9hY3RpdmF0ZV9zZWxl
Y3RlZCgpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpdGVtX3RhZygpKQorCQkJCWNvbnRpbnVl
OworCQl9CisJCXN1Ym1lbnUgPSBpdGVtX2RhdGEoKTsKKwkJYWN0aXZlX21lbnUgPSBpdGVtX2Rh
dGEoKTsKKwkJaWYgKHN1Ym1lbnUpCisJCQlzeW0gPSBzdWJtZW51LT5zeW07CisJCWVsc2UKKwkJ
CXN5bSA9IE5VTEw7CisKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJc3dpdGNoIChp
dGVtX3RhZygpKSB7CisJCQljYXNlICdtJzoKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkKKwkJ
CQkJc3VibWVudS0+ZGF0YSA9ICh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKKwkJCQll
bHNlCisJCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0JzoK
KwkJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3lt
KSA9PSB5ZXMpCisJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOworCQkJCWVsc2UgaWYgKHN1Ym1l
bnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCisJCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7CisJ
CQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoc3ltKQorCQkJCXNob3df
aGVscChzdWJtZW51KTsKKwkJCWVsc2UgeworCQkJCXJlc2V0X3N1YnRpdGxlKCk7CisJCQkJc2hv
d19oZWxwdGV4dCgiUkVBRE1FIiwgbWNvbmZfcmVhZG1lKTsKKwkJCX0KKwkJCWJyZWFrOworCQlj
YXNlIDM6CisJCQlyZXNldF9zdWJ0aXRsZSgpOworCQkJY29uZl9zYXZlKCk7CisJCQlicmVhazsK
KwkJY2FzZSA0OgorCQkJcmVzZXRfc3VidGl0bGUoKTsKKwkJCWNvbmZfbG9hZCgpOworCQkJYnJl
YWs7CisJCWNhc2UgNToKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7CisJCQkJaWYgKHN5bV9z
ZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc3ltX3Nl
dF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCkpCisJCQkJCXNob3dfdGV4dGJveChOVUxMLCBzZXRt
b2RfdGV4dCwgNiwgNzQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmIChpdGVt
X2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7CisJCQli
cmVhazsKKwkJY2FzZSA3OgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3NldF90
cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCk7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJaWYgKGl0
ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOworCQkJ
ZWxzZSBpZiAoaXRlbV9pc190YWcoJ20nKSkKKwkJCQljb25mKHN1Ym1lbnUsIE5VTEwpOworCQkJ
YnJlYWs7CisJCWNhc2UgOToKKwkJCXNlYXJjaF9jb25mKCk7CisJCQlicmVhazsKKwkJY2FzZSAx
MDoKKwkJCXNob3dfYWxsX29wdGlvbnMgPSAhc2hvd19hbGxfb3B0aW9uczsKKwkJCWJyZWFrOwor
CQl9CisJfQorCisJbGlzdF9kZWwodHJhaWwucHJldik7Cit9CisKK3N0YXRpYyBpbnQgc2hvd190
ZXh0Ym94X2V4dChjb25zdCBjaGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIsIGludCBjLCBp
bnQKKwkJCSAgICAqa2V5cywgaW50ICp2c2Nyb2xsLCBpbnQgKmhzY3JvbGwsIHVwZGF0ZV90ZXh0
X2ZuCisJCQkgICAgdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpCit7CisJZGlhbG9nX2NsZWFyKCk7
CisJcmV0dXJuIGRpYWxvZ190ZXh0Ym94KHRpdGxlLCB0ZXh0LCByLCBjLCBrZXlzLCB2c2Nyb2xs
LCBoc2Nyb2xsLAorCQkJICAgICAgdXBkYXRlX3RleHQsIGRhdGEpOworfQorCitzdGF0aWMgdm9p
ZCBzaG93X3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCBy
LCBpbnQgYykKK3sKKwlzaG93X3RleHRib3hfZXh0KHRpdGxlLCAoY2hhciAqKSB0ZXh0LCByLCBj
LCAoaW50IFtdKSB7MH0sIE5VTEwsIE5VTEwsCisJCQkgTlVMTCwgTlVMTCk7Cit9CisKK3N0YXRp
YyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQp
Cit7CisJc2hvd190ZXh0Ym94KHRpdGxlLCB0ZXh0LCAwLCAwKTsKK30KKworc3RhdGljIHZvaWQg
Y29uZl9tZXNzYWdlX2NhbGxiYWNrKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKHNhdmVfYW5kX2V4
aXQpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlwcmludGYoIiVzIiwgcyk7CisJfSBlbHNlIHsKKwkJ
c2hvd190ZXh0Ym94KE5VTEwsIHMsIDYsIDYwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNob3df
aGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygp
OworCisJaGVscC5tYXhfd2lkdGggPSBnZXRtYXh4KHN0ZHNjcikgLSAxMDsKKwltZW51X2dldF9l
eHRfaGVscChtZW51LCAmaGVscCk7CisKKwlzaG93X2hlbHB0ZXh0KG1lbnVfZ2V0X3Byb21wdCht
ZW51KSwgc3RyX2dldCgmaGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsKK30KKworc3RhdGljIHZv
aWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJY29uc3QgY2hhciAqcHJvbXB0
ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlzdHJ1Y3Qg
c3ltYm9sICphY3RpdmU7CisKKwlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5z
eW0pOworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWludCBzZWxlY3RlZDsKKwkJaXRlbV9y
ZXNldCgpOworCisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWZvciAoY2hpbGQgPSBtZW51LT5s
aXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKCFtZW51X2lzX3Zpc2li
bGUoY2hpbGQpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNoaWxkLT5zeW0pCisJCQkJaXRlbV9t
YWtlKCIlcyIsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQkJZWxzZSB7CisJCQkJaXRlbV9t
YWtlKCIqKiogJXMgKioqIiwgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQkJaXRlbV9zZXRf
dGFnKCc6Jyk7CisJCQl9CisJCQlpdGVtX3NldF9kYXRhKGNoaWxkKTsKKwkJCWlmIChjaGlsZC0+
c3ltID09IGFjdGl2ZSkKKwkJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKKwkJCWlmIChjaGlsZC0+
c3ltID09IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCisJCQkJaXRlbV9zZXRfdGFn
KCdYJyk7CisJCX0KKwkJZGlhbG9nX2NsZWFyKCk7CisJCXJlcyA9IGRpYWxvZ19jaGVja2xpc3Qo
cHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJCXJhZGlvbGlzdF9pbnN0cnVjdGlv
bnMsCisJCQkJCU1FTlVCT1hfSEVJR1RIX01JTiwKKwkJCQkJTUVOVUJPWF9XSURUSF9NSU4sCisJ
CQkJCUNIRUNLTElTVF9IRUlHVEhfTUlOKTsKKwkJc2VsZWN0ZWQgPSBpdGVtX2FjdGl2YXRlX3Nl
bGVjdGVkKCk7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmIChzZWxlY3RlZCkg
eworCQkJCWNoaWxkID0gaXRlbV9kYXRhKCk7CisJCQkJaWYgKCFjaGlsZC0+c3ltKQorCQkJCQli
cmVhazsKKworCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwgeWVzKTsKKwkJ
CX0KKwkJCXJldHVybjsKKwkJY2FzZSAxOgorCQkJaWYgKHNlbGVjdGVkKSB7CisJCQkJY2hpbGQg
PSBpdGVtX2RhdGEoKTsKKwkJCQlzaG93X2hlbHAoY2hpbGQpOworCQkJCWFjdGl2ZSA9IGNoaWxk
LT5zeW07CisJCQl9IGVsc2UKKwkJCQlzaG93X2hlbHAobWVudSk7CisJCQlicmVhazsKKwkJY2Fz
ZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQljYXNlIC1FUlJESVNQTEFZVE9PU01BTEw6CisJCQly
ZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51
ICptZW51KQoreworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsK
KworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWNvbnN0IGNoYXIgKmhlYWRpbmc7CisKKwkJ
c3dpdGNoIChzeW1fZ2V0X3R5cGUobWVudS0+c3ltKSkgeworCQljYXNlIFNfSU5UOgorCQkJaGVh
ZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7CisJCQlicmVhazsKKwkJY2FzZSBTX0hF
WDoKKwkJCWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4OworCQkJYnJlYWs7CisJ
CWNhc2UgU19TVFJJTkc6CisJCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmlu
ZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBtY29uZiBl
cnJvciEiOworCQl9CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFsb2dfaW5wdXRib3go
cHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJICAgICAgaGVhZGluZywgMTAsIDc1
LAorCQkJCSAgICAgIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkpOworCQlzd2l0Y2gg
KHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoc3ltX3NldF9zdHJpbmdfdmFsdWUobWVudS0+c3lt
LCBkaWFsb2dfaW5wdXRfcmVzdWx0KSkKKwkJCQlyZXR1cm47CisJCQlzaG93X3RleHRib3goTlVM
TCwgIllvdSBoYXZlIG1hZGUgYW4gaW52YWxpZCBlbnRyeS4iLCA1LCA0Myk7CisJCQlicmVhazsK
KwkJY2FzZSAxOgorCQkJc2hvd19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VT
QzoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQp
Cit7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgcmVzOworCQlkaWFsb2dfY2xlYXIoKTsKKwkJcmVz
ID0gZGlhbG9nX2lucHV0Ym94KE5VTEwsIGxvYWRfY29uZmlnX3RleHQsCisJCQkJICAgICAgMTEs
IDU1LCBmaWxlbmFtZSk7CisJCXN3aXRjaChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFs
b2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJCXJldHVybjsKKwkJCWlmICghY29uZl9yZWFkKGRpYWxv
Z19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRf
cmVzdWx0KTsKKwkJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKKwkJCQlyZXR1cm47CisJCQl9
CisJCQlzaG93X3RleHRib3goTlVMTCwgIkZpbGUgZG9lcyBub3QgZXhpc3QhIiwgNSwgMzgpOwor
CQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNob3dfaGVscHRleHQoIkxvYWQgQWx0ZXJuYXRlIENv
bmZpZ3VyYXRpb24iLCBsb2FkX2NvbmZpZ19oZWxwKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9F
U0M6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lk
KQoreworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMg
PSBkaWFsb2dfaW5wdXRib3goTlVMTCwgc2F2ZV9jb25maWdfdGV4dCwKKwkJCQkgICAgICAxMSwg
NTUsIGZpbGVuYW1lKTsKKwkJc3dpdGNoKHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoIWRpYWxv
Z19pbnB1dF9yZXN1bHRbMF0pCisJCQkJcmV0dXJuOworCQkJaWYgKCFjb25mX3dyaXRlKGRpYWxv
Z19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRf
cmVzdWx0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlzaG93X3RleHRib3goTlVMTCwgIkNhbid0
IGNyZWF0ZSBmaWxlISIsIDUsIDYwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93X2hl
bHB0ZXh0KCJTYXZlIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiwgc2F2ZV9jb25maWdfaGVscCk7
CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitz
dGF0aWMgaW50IGhhbmRsZV9leGl0KHZvaWQpCit7CisJaW50IHJlczsKKworCXNhdmVfYW5kX2V4
aXQgPSAxOworCXJlc2V0X3N1YnRpdGxlKCk7CisJZGlhbG9nX2NsZWFyKCk7CisJaWYgKGNvbmZf
Z2V0X2NoYW5nZWQoKSkKKwkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsCisJCQkJICAgIkRvIHlv
dSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29uZmlndXJhdGlvbj9cbiIKKwkJCQkgICAgICIoUHJl
c3MgPEVTQz48RVNDPiB0byBjb250aW51ZSBrZXJuZWwgY29uZmlndXJhdGlvbi4pIiwKKwkJCQkg
ICA2LCA2MCk7CisJZWxzZQorCQlyZXMgPSAtMTsKKworCWVuZF9kaWFsb2coc2F2ZWRfeCwgc2F2
ZWRfeSk7CisKKwlzd2l0Y2ggKHJlcykgeworCWNhc2UgMDoKKwkJaWYgKGNvbmZfd3JpdGUoZmls
ZW5hbWUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIlxuXG4iCisJCQkJCSAgIkVycm9yIHdoaWxl
IHdyaXRpbmcgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4iCisJCQkJCSAgIllvdXIgY29uZmlndXJh
dGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIKKwkJCQkJICAiXG5cbiIpOworCQkJcmV0dXJu
IDE7CisJCX0KKwkJY29uZl93cml0ZV9hdXRvY29uZigwKTsKKwkJLyogZmFsbCB0aHJvdWdoICov
CisJY2FzZSAtMToKKwkJaWYgKCFzaWxlbnQpCisJCQlwcmludGYoIlxuXG4iCisJCQkJICIqKiog
RW5kIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuIgorCQkJCSAiKioqIEV4ZWN1dGUgJ21ha2UnIHRv
IHN0YXJ0IHRoZSBidWlsZCBvciB0cnkgJ21ha2UgaGVscCcuIgorCQkJCSAiXG5cbiIpOworCQly
ZXMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoIXNpbGVudCkKKwkJCWZwcmludGYo
c3RkZXJyLCAiXG5cbiIKKwkJCQkJICAiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBO
T1Qgc2F2ZWQuIgorCQkJCQkgICJcblxuIik7CisJCWlmIChyZXMgIT0gS0VZX0VTQykKKwkJCXJl
cyA9IDA7CisJfQorCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgc2lnX2hhbmRsZXIo
aW50IHNpZ25vKQoreworCWV4aXQoaGFuZGxlX2V4aXQoKSk7Cit9CisKK2ludCBtYWluKGludCBh
YywgY2hhciAqKmF2KQoreworCWNoYXIgKm1vZGU7CisJaW50IHJlczsKKworCXNpZ25hbChTSUdJ
TlQsIHNpZ19oYW5kbGVyKTsKKworCWlmIChhYyA+IDEgJiYgc3RyY21wKGF2WzFdLCAiLXMiKSA9
PSAwKSB7CisJCXNpbGVudCA9IDE7CisJCS8qIFNpbGVuY2UgY29uZl9yZWFkKCkgdW50aWwgdGhl
IHJlYWwgY2FsbGJhY2sgaXMgc2V0IHVwICovCisJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2so
TlVMTCk7CisJCWF2Kys7CisJfQorCWNvbmZfcGFyc2UoYXZbMV0pOworCWNvbmZfcmVhZChOVUxM
KTsKKworCW1vZGUgPSBnZXRlbnYoIk1FTlVDT05GSUdfTU9ERSIpOworCWlmIChtb2RlKSB7CisJ
CWlmICghc3RyY2FzZWNtcChtb2RlLCAic2luZ2xlX21lbnUiKSkKKwkJCXNpbmdsZV9tZW51X21v
ZGUgPSAxOworCX0KKworCWlmIChpbml0X2RpYWxvZyhOVUxMKSkgeworCQlmcHJpbnRmKHN0ZGVy
ciwgIllvdXIgZGlzcGxheSBpcyB0b28gc21hbGwgdG8gcnVuIE1lbnVjb25maWchXG4iKTsKKwkJ
ZnByaW50ZihzdGRlcnIsICJJdCBtdXN0IGJlIGF0IGxlYXN0IDE5IGxpbmVzIGJ5IDgwIGNvbHVt
bnMuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJc2V0X2NvbmZpZ19maWxlbmFtZShjb25mX2dl
dF9jb25maWduYW1lKCkpOworCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soY29uZl9tZXNzYWdl
X2NhbGxiYWNrKTsKKwlkbyB7CisJCWNvbmYoJnJvb3RtZW51LCBOVUxMKTsKKwkJcmVzID0gaGFu
ZGxlX2V4aXQoKTsKKwl9IHdoaWxlIChyZXMgPT0gS0VZX0VTQyk7CisKKwlyZXR1cm4gcmVzOwor
fQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMgYi9zdXBwb3J0L2tjb25m
aWcubmV3L21lbnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQxNjQ2
Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMKQEAgLTAsMCAr
MSw4NjcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICov
CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKK3N0YXRp
YyBjb25zdCBjaGFyIG5vaGVscF90ZXh0W10gPSAiVGhlcmUgaXMgbm8gaGVscCBhdmFpbGFibGUg
Zm9yIHRoaXMgb3B0aW9uLiI7CisKK3N0cnVjdCBtZW51IHJvb3RtZW51Oworc3RhdGljIHN0cnVj
dCBtZW51ICoqbGFzdF9lbnRyeV9wdHI7CisKK3N0cnVjdCBmaWxlICpmaWxlX2xpc3Q7CitzdHJ1
Y3QgZmlsZSAqY3VycmVudF9maWxlOworCit2b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVu
dSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwl2YV9zdGFydChhcCwg
Zm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIG1lbnUtPmZpbGUtPm5h
bWUsIG1lbnUtPmxpbmVubyk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlmcHJpbnRm
KHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKworc3RhdGljIHZvaWQgcHJvcF93YXJu
KHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlz
dCBhcDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5p
bmc6ICIsIHByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7CisJdmZwcmludGYoc3RkZXJy
LCBmbXQsIGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKK30KKwor
dm9pZCBfbWVudV9pbml0KHZvaWQpCit7CisJY3VycmVudF9lbnRyeSA9IGN1cnJlbnRfbWVudSA9
ICZyb290bWVudTsKKwlsYXN0X2VudHJ5X3B0ciA9ICZyb290bWVudS5saXN0OworfQorCit2b2lk
IG1lbnVfYWRkX2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgbWVudSAqbWVu
dTsKKworCW1lbnUgPSB4bWFsbG9jKHNpemVvZigqbWVudSkpOworCW1lbXNldChtZW51LCAwLCBz
aXplb2YoKm1lbnUpKTsKKwltZW51LT5zeW0gPSBzeW07CisJbWVudS0+cGFyZW50ID0gY3VycmVu
dF9tZW51OworCW1lbnUtPmZpbGUgPSBjdXJyZW50X2ZpbGU7CisJbWVudS0+bGluZW5vID0gemNv
bmZfbGluZW5vKCk7CisKKwkqbGFzdF9lbnRyeV9wdHIgPSBtZW51OworCWxhc3RfZW50cnlfcHRy
ID0gJm1lbnUtPm5leHQ7CisJY3VycmVudF9lbnRyeSA9IG1lbnU7CisJaWYgKHN5bSkKKwkJbWVu
dV9hZGRfc3ltYm9sKFBfU1lNQk9MLCBzeW0sIE5VTEwpOworfQorCitzdHJ1Y3QgbWVudSAqbWVu
dV9hZGRfbWVudSh2b2lkKQoreworCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfZW50cnktPmxp
c3Q7CisJcmV0dXJuIGN1cnJlbnRfbWVudSA9IGN1cnJlbnRfZW50cnk7Cit9CisKK3ZvaWQgbWVu
dV9lbmRfbWVudSh2b2lkKQoreworCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfbWVudS0+bmV4
dDsKKwljdXJyZW50X21lbnUgPSBjdXJyZW50X21lbnUtPnBhcmVudDsKK30KKworLyoKKyAqIFJl
d3JpdGVzICdtJyB0byAnbScgJiYgTU9EVUxFUywgc28gdGhhdCBpdCBldmFsdWF0ZXMgdG8gJ24n
IHdoZW4gcnVubmluZworICogd2l0aG91dCBtb2R1bGVzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZXhw
ciAqcmV3cml0ZV9tKHN0cnVjdCBleHByICplKQoreworCWlmICghZSkKKwkJcmV0dXJuIGU7CisK
Kwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfTk9UOgorCQllLT5sZWZ0LmV4cHIgPSByZXdy
aXRlX20oZS0+bGVmdC5leHByKTsKKwkJYnJlYWs7CisJY2FzZSBFX09SOgorCWNhc2UgRV9BTkQ6
CisJCWUtPmxlZnQuZXhwciA9IHJld3JpdGVfbShlLT5sZWZ0LmV4cHIpOworCQllLT5yaWdodC5l
eHByID0gcmV3cml0ZV9tKGUtPnJpZ2h0LmV4cHIpOworCQlicmVhazsKKwljYXNlIEVfU1lNQk9M
OgorCQkvKiBjaGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8KKwkJaWYgKGUtPmxlZnQu
c3ltID09ICZzeW1ib2xfbW9kKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfYW5kKGUsIGV4cHJfYWxs
b2Nfc3ltYm9sKG1vZHVsZXNfc3ltKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOwor
CX0KKwlyZXR1cm4gZTsKK30KKwordm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCkK
K3sKKwljdXJyZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJyZW50X2VudHJ5LT5k
ZXAsIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9zZXRfdHlwZShpbnQgdHlwZSkKK3sKKwlzdHJ1Y3Qg
c3ltYm9sICpzeW0gPSBjdXJyZW50X2VudHJ5LT5zeW07CisKKwlpZiAoc3ltLT50eXBlID09IHR5
cGUpCisJCXJldHVybjsKKwlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgeworCQlzeW0tPnR5
cGUgPSB0eXBlOworCQlyZXR1cm47CisJfQorCW1lbnVfd2FybihjdXJyZW50X2VudHJ5LAorCQki
aWdub3JpbmcgdHlwZSByZWRlZmluaXRpb24gb2YgJyVzJyBmcm9tICclcycgdG8gJyVzJyIsCisJ
CXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCXN5bV90eXBlX25hbWUoc3lt
LT50eXBlKSwgc3ltX3R5cGVfbmFtZSh0eXBlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvcGVy
dHkgKm1lbnVfYWRkX3Byb3AoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1
Y3QgZXhwciAqZXhwciwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnBy
b3AgPSBwcm9wX2FsbG9jKHR5cGUsIGN1cnJlbnRfZW50cnktPnN5bSk7CisKKwlwcm9wLT5tZW51
ID0gY3VycmVudF9lbnRyeTsKKwlwcm9wLT5leHByID0gZXhwcjsKKwlwcm9wLT52aXNpYmxlLmV4
cHIgPSBkZXA7CisKKwlpZiAocHJvbXB0KSB7CisJCWlmIChpc3NwYWNlKCpwcm9tcHQpKSB7CisJ
CQlwcm9wX3dhcm4ocHJvcCwgImxlYWRpbmcgd2hpdGVzcGFjZSBpZ25vcmVkIik7CisJCQl3aGls
ZSAoaXNzcGFjZSgqcHJvbXB0KSkKKwkJCQlwcm9tcHQrKzsKKwkJfQorCQlpZiAoY3VycmVudF9l
bnRyeS0+cHJvbXB0ICYmIGN1cnJlbnRfZW50cnkgIT0gJnJvb3RtZW51KQorCQkJcHJvcF93YXJu
KHByb3AsICJwcm9tcHQgcmVkZWZpbmVkIik7CisKKwkJLyogQXBwbHkgYWxsIHVwcGVyIG1lbnVz
JyB2aXNpYmlsaXRpZXMgdG8gYWN0dWFsIHByb21wdHMuICovCisJCWlmKHR5cGUgPT0gUF9QUk9N
UFQpIHsKKwkJCXN0cnVjdCBtZW51ICptZW51ID0gY3VycmVudF9lbnRyeTsKKworCQkJd2hpbGUg
KChtZW51ID0gbWVudS0+cGFyZW50KSAhPSBOVUxMKSB7CisJCQkJc3RydWN0IGV4cHIgKmR1cF9l
eHByOworCisJCQkJaWYgKCFtZW51LT52aXNpYmlsaXR5KQorCQkJCQljb250aW51ZTsKKwkJCQkv
KgorCQkJCSAqIERvIG5vdCBhZGQgYSByZWZlcmVuY2UgdG8gdGhlCisJCQkJICogbWVudSdzIHZp
c2liaWxpdHkgZXhwcmVzc2lvbiBidXQKKwkJCQkgKiB1c2UgYSBjb3B5IG9mIGl0LiAgT3RoZXJ3
aXNlIHRoZQorCQkJCSAqIGV4cHJlc3Npb24gcmVkdWN0aW9uIGZ1bmN0aW9ucworCQkJCSAqIHdp
bGwgbW9kaWZ5IGV4cHJlc3Npb25zIHRoYXQgaGF2ZQorCQkJCSAqIG11bHRpcGxlIHJlZmVyZW5j
ZXMgd2hpY2ggY2FuCisJCQkJICogY2F1c2UgdW53YW50ZWQgc2lkZSBlZmZlY3RzLgorCQkJCSAq
LworCQkJCWR1cF9leHByID0gZXhwcl9jb3B5KG1lbnUtPnZpc2liaWxpdHkpOworCisJCQkJcHJv
cC0+dmlzaWJsZS5leHByCisJCQkJCT0gZXhwcl9hbGxvY19hbmQocHJvcC0+dmlzaWJsZS5leHBy
LAorCQkJCQkJCSBkdXBfZXhwcik7CisJCQl9CisJCX0KKworCQljdXJyZW50X2VudHJ5LT5wcm9t
cHQgPSBwcm9wOworCX0KKwlwcm9wLT50ZXh0ID0gcHJvbXB0OworCisJcmV0dXJuIHByb3A7Cit9
CisKK3N0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRfcHJvbXB0KGVudW0gcHJvcF90eXBlIHR5cGUs
IGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwlyZXR1cm4gbWVudV9hZGRfcHJv
cCh0eXBlLCBwcm9tcHQsIE5VTEwsIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9hZGRfdmlzaWJpbGl0
eShzdHJ1Y3QgZXhwciAqZXhwcikKK3sKKwljdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5ID0gZXhw
cl9hbGxvY19hbmQoY3VycmVudF9lbnRyeS0+dmlzaWJpbGl0eSwKKwkgICAgZXhwcik7Cit9CisK
K3ZvaWQgbWVudV9hZGRfZXhwcihlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZXhw
ciwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4cHIs
IGRlcCk7Cit9CisKK3ZvaWQgbWVudV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0
cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IGV4cHIgKmRlcCkKK3sKKwltZW51X2FkZF9wcm9wKHR5
cGUsIE5VTEwsIGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSksIGRlcCk7Cit9CisKK3ZvaWQgbWVudV9h
ZGRfb3B0aW9uX21vZHVsZXModm9pZCkKK3sKKwlpZiAobW9kdWxlc19zeW0pCisJCXpjb25mX2Vy
cm9yKCJzeW1ib2wgJyVzJyByZWRlZmluZXMgb3B0aW9uICdtb2R1bGVzJyBhbHJlYWR5IGRlZmlu
ZWQgYnkgc3ltYm9sICclcyciLAorCQkJICAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSwgbW9k
dWxlc19zeW0tPm5hbWUpOworCW1vZHVsZXNfc3ltID0gY3VycmVudF9lbnRyeS0+c3ltOworfQor
Cit2b2lkIG1lbnVfYWRkX29wdGlvbl9kZWZjb25maWdfbGlzdCh2b2lkKQoreworCWlmICghc3lt
X2RlZmNvbmZpZ19saXN0KQorCQlzeW1fZGVmY29uZmlnX2xpc3QgPSBjdXJyZW50X2VudHJ5LT5z
eW07CisJZWxzZSBpZiAoc3ltX2RlZmNvbmZpZ19saXN0ICE9IGN1cnJlbnRfZW50cnktPnN5bSkK
KwkJemNvbmZfZXJyb3IoInRyeWluZyB0byByZWRlZmluZSBkZWZjb25maWcgc3ltYm9sIik7CisJ
c3ltX2RlZmNvbmZpZ19saXN0LT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7Cit9CisKK3ZvaWQg
bWVudV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3kodm9pZCkKK3sKKwljdXJyZW50X2VudHJ5LT5z
eW0tPmZsYWdzIHw9IFNZTUJPTF9BTExOT0NPTkZJR19ZOworfQorCitzdGF0aWMgaW50IG1lbnVf
dmFsaWRhdGVfbnVtYmVyKHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IHN5bWJvbCAqc3ltMikK
K3sKKwlyZXR1cm4gc3ltMi0+dHlwZSA9PSBTX0lOVCB8fCBzeW0yLT50eXBlID09IFNfSEVYIHx8
CisJICAgICAgIChzeW0yLT50eXBlID09IFNfVU5LTk9XTiAmJiBzeW1fc3RyaW5nX3ZhbGlkKHN5
bSwgc3ltMi0+bmFtZSkpOworfQorCitzdGF0aWMgdm9pZCBzeW1fY2hlY2tfcHJvcChzdHJ1Y3Qg
c3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wg
KnN5bTI7CisJY2hhciAqdXNlOworCisJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9w
ID0gcHJvcC0+bmV4dCkgeworCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX0RFRkFV
TFQ6CisJCQlpZiAoKHN5bS0+dHlwZSA9PSBTX1NUUklORyB8fCBzeW0tPnR5cGUgPT0gU19JTlQg
fHwgc3ltLT50eXBlID09IFNfSEVYKSAmJgorCQkJICAgIHByb3AtPmV4cHItPnR5cGUgIT0gRV9T
WU1CT0wpCisJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICJkZWZhdWx0IGZvciBjb25maWcg
c3ltYm9sICclcyciCisJCQkJICAgICIgbXVzdCBiZSBhIHNpbmdsZSBzeW1ib2wiLCBzeW0tPm5h
bWUpOworCQkJaWYgKHByb3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCisJCQkJYnJlYWs7CisJ
CQlzeW0yID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX0hF
WCB8fCBzeW0tPnR5cGUgPT0gU19JTlQpIHsKKwkJCQlpZiAoIW1lbnVfdmFsaWRhdGVfbnVtYmVy
KHN5bSwgc3ltMikpCisJCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJCQkgICAgIiclcyc6IG51bWJl
ciBpcyBpbnZhbGlkIiwKKwkJCQkJICAgIHN5bS0+bmFtZSk7CisJCQl9CisJCQlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pKSB7CisJCQkJc3RydWN0IHByb3BlcnR5ICpjaG9pY2VfcHJvcCA9CisJCQkJ
CXN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltMik7CisKKwkJCQlpZiAoIWNob2ljZV9wcm9wIHx8CisJ
CQkJICAgIHByb3BfZ2V0X3N5bWJvbChjaG9pY2VfcHJvcCkgIT0gc3ltKQorCQkJCQlwcm9wX3dh
cm4ocHJvcCwKKwkJCQkJCSAgImNob2ljZSBkZWZhdWx0IHN5bWJvbCAnJXMnIGlzIG5vdCBjb250
YWluZWQgaW4gdGhlIGNob2ljZSIsCisJCQkJCQkgIHN5bTItPm5hbWUpOworCQkJfQorCQkJYnJl
YWs7CisJCWNhc2UgUF9TRUxFQ1Q6CisJCWNhc2UgUF9JTVBMWToKKwkJCXVzZSA9IHByb3AtPnR5
cGUgPT0gUF9TRUxFQ1QgPyAic2VsZWN0IiA6ICJpbXBseSI7CisJCQlzeW0yID0gcHJvcF9nZXRf
c3ltYm9sKHByb3ApOworCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltLT50eXBl
ICE9IFNfVFJJU1RBVEUpCisJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICJjb25maWcgc3lt
Ym9sICclcycgdXNlcyAlcywgYnV0IGlzICIKKwkJCQkgICAgIm5vdCBib29sIG9yIHRyaXN0YXRl
Iiwgc3ltLT5uYW1lLCB1c2UpOworCQkJZWxzZSBpZiAoc3ltMi0+dHlwZSAhPSBTX1VOS05PV04g
JiYKKwkJCQkgc3ltMi0+dHlwZSAhPSBTX0JPT0xFQU4gJiYKKwkJCQkgc3ltMi0+dHlwZSAhPSBT
X1RSSVNUQVRFKQorCQkJCXByb3Bfd2Fybihwcm9wLAorCQkJCSAgICAiJyVzJyBoYXMgd3Jvbmcg
dHlwZS4gJyVzJyBvbmx5ICIKKwkJCQkgICAgImFjY2VwdCBhcmd1bWVudHMgb2YgYm9vbCBhbmQg
IgorCQkJCSAgICAidHJpc3RhdGUgdHlwZSIsIHN5bTItPm5hbWUsIHVzZSk7CisJCQlicmVhazsK
KwkJY2FzZSBQX1JBTkdFOgorCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0lOVCAmJiBzeW0tPnR5cGUg
IT0gU19IRVgpCisJCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBvbmx5IGFsbG93ZWQgIgor
CQkJCQkJImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsKKwkJCWlmICghbWVudV92YWxpZGF0ZV9u
dW1iZXIoc3ltLCBwcm9wLT5leHByLT5sZWZ0LnN5bSkgfHwKKwkJCSAgICAhbWVudV92YWxpZGF0
ZV9udW1iZXIoc3ltLCBwcm9wLT5leHByLT5yaWdodC5zeW0pKQorCQkJCXByb3Bfd2Fybihwcm9w
LCAicmFuZ2UgaXMgaW52YWxpZCIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQk7CisJCX0K
Kwl9Cit9CisKK3ZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KQoreworCXN0
cnVjdCBtZW51ICptZW51LCAqbGFzdF9tZW51OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKnBhcmVudGRlcCwgKmJhc2VkZXAsICpk
ZXAsICpkZXAyLCAqKmVwOworCisJc3ltID0gcGFyZW50LT5zeW07CisJaWYgKHBhcmVudC0+bGlz
dCkgeworCQkvKgorCQkgKiBUaGlzIG1lbnUgbm9kZSBoYXMgY2hpbGRyZW4uIFdlIChyZWN1cnNp
dmVseSkgcHJvY2VzcyB0aGVtCisJCSAqIGFuZCBwcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2ll
cyBiZWZvcmUgbW92aW5nIG9uLgorCQkgKi8KKworCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uo
c3ltKSkgeworCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pIHsKKwkJCQkvKiBmaW5kIHRo
ZSBmaXJzdCBjaG9pY2UgdmFsdWUgdG8gZmluZCBvdXQgY2hvaWNlIHR5cGUgKi8KKwkJCQljdXJy
ZW50X2VudHJ5ID0gcGFyZW50OworCQkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsg
bWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCQkJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5zeW0tPnR5
cGUgIT0gU19VTktOT1dOKSB7CisJCQkJCQltZW51X3NldF90eXBlKG1lbnUtPnN5bS0+dHlwZSk7
CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS8qIHNldCB0aGUgdHlwZSBv
ZiB0aGUgcmVtYWluaW5nIGNob2ljZSB2YWx1ZXMgKi8KKwkJCWZvciAobWVudSA9IHBhcmVudC0+
bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCQljdXJyZW50X2VudHJ5ID0gbWVu
dTsKKwkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSA9PSBTX1VOS05PV04pCisJ
CQkJCW1lbnVfc2V0X3R5cGUoc3ltLT50eXBlKTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIFVzZSB0
aGUgY2hvaWNlIGl0c2VsZiBhcyB0aGUgcGFyZW50IGRlcGVuZGVuY3kgb2YKKwkJCSAqIHRoZSBj
b250YWluZWQgaXRlbXMuIFRoaXMgdHVybnMgdGhlIG1vZGUgb2YgdGhlCisJCQkgKiBjaG9pY2Ug
aW50byBhbiB1cHBlciBib3VuZCBvbiB0aGUgdmlzaWJpbGl0eSBvZiB0aGUKKwkJCSAqIGNob2lj
ZSB2YWx1ZSBzeW1ib2xzLgorCQkJICovCisJCQlwYXJlbnRkZXAgPSBleHByX2FsbG9jX3N5bWJv
bChzeW0pOworCQl9IGVsc2UgaWYgKHBhcmVudC0+cHJvbXB0KQorCQkJLyogTWVudSBub2RlIGZv
ciAnbWVudScgKi8KKwkJCXBhcmVudGRlcCA9IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHI7
CisJCWVsc2UKKwkJCS8qIE1lbnUgbm9kZSBmb3IgJ2lmJyAqLworCQkJcGFyZW50ZGVwID0gcGFy
ZW50LT5kZXA7CisKKwkJLyogRm9yIGVhY2ggY2hpbGQgbWVudSBub2RlLi4uICovCisJCWZvciAo
bWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJCS8qCisJ
CQkgKiBQcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2llcyB0byB0aGUgY2hpbGQgbWVudQorCQkJ
ICogbm9kZSwgYWxzbyByZXdyaXRpbmcgYW5kIHNpbXBsaWZ5aW5nIGV4cHJlc3Npb25zCisJCQkg
Ki8KKwkJCWJhc2VkZXAgPSByZXdyaXRlX20obWVudS0+ZGVwKTsKKwkJCWJhc2VkZXAgPSBleHBy
X3RyYW5zZm9ybShiYXNlZGVwKTsKKwkJCWJhc2VkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2Nv
cHkocGFyZW50ZGVwKSwgYmFzZWRlcCk7CisJCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVw
cyhiYXNlZGVwKTsKKwkJCW1lbnUtPmRlcCA9IGJhc2VkZXA7CisKKwkJCWlmIChtZW51LT5zeW0p
CisJCQkJLyoKKwkJCQkgKiBOb3RlOiBGb3Igc3ltYm9scywgYWxsIHByb21wdHMgYXJlIGluY2x1
ZGVkCisJCQkJICogdG9vIGluIHRoZSBzeW1ib2wncyBvd24gcHJvcGVydHkgbGlzdAorCQkJCSAq
LworCQkJCXByb3AgPSBtZW51LT5zeW0tPnByb3A7CisJCQllbHNlCisJCQkJLyoKKwkJCQkgKiBG
b3Igbm9uLXN5bWJvbCBtZW51IG5vZGVzLCB3ZSBqdXN0IG5lZWQgdG8KKwkJCQkgKiBoYW5kbGUg
dGhlIHByb21wdAorCQkJCSAqLworCQkJCXByb3AgPSBtZW51LT5wcm9tcHQ7CisKKwkJCS8qIEZv
ciBlYWNoIHByb3BlcnR5Li4uICovCisJCQlmb3IgKDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQp
IHsKKwkJCQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQorCQkJCQkvKgorCQkJCQkgKiBUd28gcG9z
c2liaWxpdGllczoKKwkJCQkJICoKKwkJCQkJICogMS4gVGhlIHByb3BlcnR5IGxhY2tzIGRlcGVu
ZGVuY2llcworCQkJCQkgKiAgICBhbmQgc28gaXNuJ3QgbG9jYXRpb24tc3BlY2lmaWMsCisJCQkJ
CSAqICAgIGUuZy4gYW4gJ29wdGlvbicKKwkJCQkJICoKKwkJCQkJICogMi4gVGhlIHByb3BlcnR5
IGJlbG9uZ3MgdG8gYSBzeW1ib2wKKwkJCQkJICogICAgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2Nh
dGlvbnMgYW5kCisJCQkJCSAqICAgIGlzIGZyb20gc29tZSBvdGhlciBsb2NhdGlvbi4gSXQKKwkJ
CQkJICogICAgd2lsbCBiZSBoYW5kbGVkIHRoZXJlIGluIHRoYXQKKwkJCQkJICogICAgY2FzZS4K
KwkJCQkJICoKKwkJCQkJICogU2tpcCB0aGUgcHJvcGVydHkuCisJCQkJCSAqLworCQkJCQljb250
aW51ZTsKKworCQkJCS8qCisJCQkJICogUHJvcGFnYXRlIHBhcmVudCBkZXBlbmRlbmNpZXMgdG8g
dGhlCisJCQkJICogcHJvcGVydHkncyBjb25kaXRpb24sIHJld3JpdGluZyBhbmQKKwkJCQkgKiBz
aW1wbGlmeWluZyBleHByZXNzaW9ucyBhdCB0aGUgc2FtZSB0aW1lCisJCQkJICovCisJCQkJZGVw
ID0gcmV3cml0ZV9tKHByb3AtPnZpc2libGUuZXhwcik7CisJCQkJZGVwID0gZXhwcl90cmFuc2Zv
cm0oZGVwKTsKKwkJCQlkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksIGRl
cCk7CisJCQkJZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhkZXApOworCQkJCWlmIChtZW51LT5z
eW0gJiYgbWVudS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpCisJCQkJCWRlcCA9IGV4cHJfdHJh
bnNfYm9vbChkZXApOworCQkJCXByb3AtPnZpc2libGUuZXhwciA9IGRlcDsKKworCQkJCS8qCisJ
CQkJICogSGFuZGxlIHNlbGVjdHMgYW5kIGltcGxpZXMsIHdoaWNoIG1vZGlmeSB0aGUKKwkJCQkg
KiBkZXBlbmRlbmNpZXMgb2YgdGhlIHNlbGVjdGVkL2ltcGxpZWQgc3ltYm9sCisJCQkJICovCisJ
CQkJaWYgKHByb3AtPnR5cGUgPT0gUF9TRUxFQ1QpIHsKKwkJCQkJc3RydWN0IHN5bWJvbCAqZXMg
PSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCQkJCWVzLT5yZXZfZGVwLmV4cHIgPSBleHByX2Fs
bG9jX29yKGVzLT5yZXZfZGVwLmV4cHIsCisJCQkJCQkJZXhwcl9hbGxvY19hbmQoZXhwcl9hbGxv
Y19zeW1ib2wobWVudS0+c3ltKSwgZXhwcl9jb3B5KGRlcCkpKTsKKwkJCQl9IGVsc2UgaWYgKHBy
b3AtPnR5cGUgPT0gUF9JTVBMWSkgeworCQkJCQlzdHJ1Y3Qgc3ltYm9sICplcyA9IHByb3BfZ2V0
X3N5bWJvbChwcm9wKTsKKwkJCQkJZXMtPmltcGxpZWQuZXhwciA9IGV4cHJfYWxsb2Nfb3IoZXMt
PmltcGxpZWQuZXhwciwKKwkJCQkJCQlleHByX2FsbG9jX2FuZChleHByX2FsbG9jX3N5bWJvbCht
ZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChz
eW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKQorCQkJZXhwcl9mcmVlKHBhcmVudGRlcCk7CisKKwkJ
LyoKKwkJICogUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlbiBpbiB0aGUgc2FtZSBmYXNoaW9u
IGJlZm9yZQorCQkgKiBtb3Zpbmcgb24KKwkJICovCisJCWZvciAobWVudSA9IHBhcmVudC0+bGlz
dDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpCisJCQltZW51X2ZpbmFsaXplKG1lbnUpOworCX0g
ZWxzZSBpZiAoc3ltKSB7CisJCS8qCisJCSAqIEF1dG9tYXRpYyBzdWJtZW51IGNyZWF0aW9uLiBJ
ZiBzeW0gaXMgYSBzeW1ib2wgYW5kIEEsIEIsIEMsCisJCSAqIC4uLiBhcmUgY29uc2VjdXRpdmUg
aXRlbXMgKHN5bWJvbHMsIG1lbnVzLCBpZnMsIGV0Yy4pIHRoYXQKKwkJICogYWxsIGRlcGVuZCBv
biBzeW0sIHRoZW4gdGhlIGZvbGxvd2luZyBtZW51IHN0cnVjdHVyZSBpcworCQkgKiBjcmVhdGVk
OgorCQkgKgorCQkgKglzeW0KKwkJICoJICstQQorCQkgKgkgKy1CCisJCSAqCSArLUMKKwkJICoJ
IC4uLgorCQkgKgorCQkgKiBUaGlzIGFsc28gd29ya3MgcmVjdXJzaXZlbHksIGdpdmluZyB0aGUg
Zm9sbG93aW5nIHN0cnVjdHVyZQorCQkgKiBpZiBBIGlzIGEgc3ltYm9sIGFuZCBCIGRlcGVuZHMg
b24gQToKKwkJICoKKwkJICoJc3ltCisJCSAqCSArLUEKKwkJICoJIHwgKy1CCisJCSAqCSArLUMK
KwkJICoJIC4uLgorCQkgKi8KKworCQliYXNlZGVwID0gcGFyZW50LT5wcm9tcHQgPyBwYXJlbnQt
PnByb21wdC0+dmlzaWJsZS5leHByIDogTlVMTDsKKwkJYmFzZWRlcCA9IGV4cHJfdHJhbnNfY29t
cGFyZShiYXNlZGVwLCBFX1VORVFVQUwsICZzeW1ib2xfbm8pOworCQliYXNlZGVwID0gZXhwcl9l
bGltaW5hdGVfZHVwcyhleHByX3RyYW5zZm9ybShiYXNlZGVwKSk7CisKKwkJLyogRXhhbWluZSBj
b25zZWN1dGl2ZSBlbGVtZW50cyBhZnRlciBzeW0gKi8KKwkJbGFzdF9tZW51ID0gTlVMTDsKKwkJ
Zm9yIChtZW51ID0gcGFyZW50LT5uZXh0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQkJ
ZGVwID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIgOiBtZW51LT5k
ZXA7CisJCQlpZiAoIWV4cHJfY29udGFpbnNfc3ltYm9sKGRlcCwgc3ltKSkKKwkJCQkvKiBObyBk
ZXBlbmRlbmN5LCBxdWl0ICovCisJCQkJYnJlYWs7CisJCQlpZiAoZXhwcl9kZXBlbmRzX3N5bWJv
bChkZXAsIHN5bSkpCisJCQkJLyogQWJzb2x1dGUgZGVwZW5kZW5jeSwgcHV0IGluIHN1Ym1lbnUg
Ki8KKwkJCQlnb3RvIG5leHQ7CisKKwkJCS8qCisJCQkgKiBBbHNvIGNvbnNpZGVyIGl0IGEgZGVw
ZW5kZW5jeSBvbiBzeW0gaWYgb3VyCisJCQkgKiBkZXBlbmRlbmNpZXMgY29udGFpbiBzeW0gYW5k
IGFyZSBhICJzdXBlcnNldCIgb2YKKwkJCSAqIHN5bSdzIGRlcGVuZGVuY2llcywgZS5nLiAnKHN5
bSB8fCBRKSAmJiBSJyB3aGVuIHN5bQorCQkJICogZGVwZW5kcyBvbiBSLgorCQkJICoKKwkJCSAq
IE5vdGUgdGhhdCAnUicgbWlnaHQgYmUgZnJvbSBhbiBlbmNsb3NpbmcgbWVudSBvciBpZiwKKwkJ
CSAqIG1ha2luZyB0aGlzIGEgbW9yZSBjb21tb24gY2FzZSB0aGFuIGl0IG1pZ2h0IHNlZW0uCisJ
CQkgKi8KKwkJCWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShkZXAsIEVfVU5FUVVBTCwgJnN5bWJv
bF9ubyk7CisJCQlkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGV4cHJfdHJhbnNmb3JtKGRlcCkp
OworCQkJZGVwMiA9IGV4cHJfY29weShiYXNlZGVwKTsKKwkJCWV4cHJfZWxpbWluYXRlX2VxKCZk
ZXAsICZkZXAyKTsKKwkJCWV4cHJfZnJlZShkZXApOworCQkJaWYgKCFleHByX2lzX3llcyhkZXAy
KSkgeworCQkJCS8qIE5vdCBzdXBlcnNldCwgcXVpdCAqLworCQkJCWV4cHJfZnJlZShkZXAyKTsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIFN1cGVyc2V0LCBwdXQgaW4gc3VibWVudSAqLworCQkJ
ZXhwcl9mcmVlKGRlcDIpOworCQluZXh0OgorCQkJbWVudV9maW5hbGl6ZShtZW51KTsKKwkJCW1l
bnUtPnBhcmVudCA9IHBhcmVudDsKKwkJCWxhc3RfbWVudSA9IG1lbnU7CisJCX0KKwkJZXhwcl9m
cmVlKGJhc2VkZXApOworCQlpZiAobGFzdF9tZW51KSB7CisJCQlwYXJlbnQtPmxpc3QgPSBwYXJl
bnQtPm5leHQ7CisJCQlwYXJlbnQtPm5leHQgPSBsYXN0X21lbnUtPm5leHQ7CisJCQlsYXN0X21l
bnUtPm5leHQgPSBOVUxMOworCQl9CisKKwkJc3ltLT5kaXJfZGVwLmV4cHIgPSBleHByX2FsbG9j
X29yKHN5bS0+ZGlyX2RlcC5leHByLCBwYXJlbnQtPmRlcCk7CisJfQorCWZvciAobWVudSA9IHBh
cmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKKwkJaWYgKHN5bSAmJiBzeW1f
aXNfY2hvaWNlKHN5bSkgJiYKKwkJICAgIG1lbnUtPnN5bSAmJiAhc3ltX2lzX2Nob2ljZV92YWx1
ZShtZW51LT5zeW0pKSB7CisJCQljdXJyZW50X2VudHJ5ID0gbWVudTsKKwkJCW1lbnUtPnN5bS0+
ZmxhZ3MgfD0gU1lNQk9MX0NIT0lDRVZBTDsKKwkJCWlmICghbWVudS0+cHJvbXB0KQorCQkJCW1l
bnVfd2FybihtZW51LCAiY2hvaWNlIHZhbHVlIG11c3QgaGF2ZSBhIHByb21wdCIpOworCQkJZm9y
IChwcm9wID0gbWVudS0+c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQkJ
CWlmIChwcm9wLT50eXBlID09IFBfREVGQVVMVCkKKwkJCQkJcHJvcF93YXJuKHByb3AsICJkZWZh
dWx0cyBmb3IgY2hvaWNlICIKKwkJCQkJCSAgInZhbHVlcyBub3Qgc3VwcG9ydGVkIik7CisJCQkJ
aWYgKHByb3AtPm1lbnUgPT0gbWVudSkKKwkJCQkJY29udGludWU7CisJCQkJaWYgKHByb3AtPnR5
cGUgPT0gUF9QUk9NUFQgJiYKKwkJCQkgICAgcHJvcC0+bWVudS0+cGFyZW50LT5zeW0gIT0gc3lt
KQorCQkJCQlwcm9wX3dhcm4ocHJvcCwgImNob2ljZSB2YWx1ZSB1c2VkIG91dHNpZGUgaXRzIGNo
b2ljZSBncm91cCIpOworCQkJfQorCQkJLyogTm9uLXRyaXN0YXRlIGNob2ljZSB2YWx1ZXMgb2Yg
dHJpc3RhdGUgY2hvaWNlcyBtdXN0CisJCQkgKiBkZXBlbmQgb24gdGhlIGNob2ljZSBiZWluZyBz
ZXQgdG8gWS4gVGhlIGNob2ljZQorCQkJICogdmFsdWVzJyBkZXBlbmRlbmNpZXMgd2VyZSBwcm9w
YWdhdGVkIHRvIHRoZWlyCisJCQkgKiBwcm9wZXJ0aWVzIGFib3ZlLCBzbyB0aGUgY2hhbmdlIGhl
cmUgbXVzdCBiZSByZS0KKwkJCSAqIHByb3BhZ2F0ZWQuCisJCQkgKi8KKwkJCWlmIChzeW0tPnR5
cGUgPT0gU19UUklTVEFURSAmJiBtZW51LT5zeW0tPnR5cGUgIT0gU19UUklTVEFURSkgeworCQkJ
CWJhc2VkZXAgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltLCAmc3ltYm9sX3llcyk7CisJ
CQkJbWVudS0+ZGVwID0gZXhwcl9hbGxvY19hbmQoYmFzZWRlcCwgbWVudS0+ZGVwKTsKKwkJCQlm
b3IgKHByb3AgPSBtZW51LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJ
CQkJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpCisJCQkJCQljb250aW51ZTsKKwkJCQkJcHJvcC0+
dmlzaWJsZS5leHByID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KGJhc2VkZXApLAorCQkJCQkJ
CQkJICAgIHByb3AtPnZpc2libGUuZXhwcik7CisJCQkJfQorCQkJfQorCQkJbWVudV9hZGRfc3lt
Ym9sKFBfQ0hPSUNFLCBzeW0sIE5VTEwpOworCQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Ao
c3ltKTsKKwkJCWZvciAoZXAgPSAmcHJvcC0+ZXhwcjsgKmVwOyBlcCA9ICYoKmVwKS0+bGVmdC5l
eHByKQorCQkJCTsKKwkJCSplcCA9IGV4cHJfYWxsb2Nfb25lKEVfTElTVCwgTlVMTCk7CisJCQko
KmVwKS0+cmlnaHQuc3ltID0gbWVudS0+c3ltOworCQl9CisKKwkJLyoKKwkJICogVGhpcyBjb2Rl
IHNlcnZlcyB0d28gcHVycG9zZXM6CisJCSAqCisJCSAqICgxKSBGbGF0dGVuaW5nICdpZicgYmxv
Y2tzLCB3aGljaCBkbyBub3Qgc3BlY2lmeSBhIHN1Ym1lbnUKKwkJICogICAgIGFuZCBvbmx5IGFk
ZCBkZXBlbmRlbmNpZXMuCisJCSAqCisJCSAqICAgICAoQXV0b21hdGljIHN1Ym1lbnUgY3JlYXRp
b24gbWlnaHQgc3RpbGwgY3JlYXRlIGEgc3VibWVudQorCQkgKiAgICAgZnJvbSBhbiAnaWYnIGJl
Zm9yZSB0aGlzIGNvZGUgcnVucy4pCisJCSAqCisJCSAqICgyKSAiVW5kb2luZyIgYW55IGF1dG9t
YXRpYyBzdWJtZW51cyBjcmVhdGVkIGVhcmxpZXIgYmVsb3cKKwkJICogICAgIHByb21wdGxlc3Mg
c3ltYm9scy4KKwkJICoKKwkJICogQmVmb3JlOgorCQkgKgorCQkgKglBCisJCSAqCWlmIC4uLiAo
b3IgcHJvbXB0bGVzcyBzeW1ib2wpCisJCSAqCSArLUIKKwkJICoJICstQworCQkgKglECisJCSAq
CisJCSAqIEFmdGVyOgorCQkgKgorCQkgKglBCisJCSAqCWlmIC4uLiAob3IgcHJvbXB0bGVzcyBz
eW1ib2wpCisJCSAqCUIKKwkJICoJQworCQkgKglECisJCSAqLworCQlpZiAobWVudS0+bGlzdCAm
JiAoIW1lbnUtPnByb21wdCB8fCAhbWVudS0+cHJvbXB0LT50ZXh0KSkgeworCQkJZm9yIChsYXN0
X21lbnUgPSBtZW51LT5saXN0OyA7IGxhc3RfbWVudSA9IGxhc3RfbWVudS0+bmV4dCkgeworCQkJ
CWxhc3RfbWVudS0+cGFyZW50ID0gcGFyZW50OworCQkJCWlmICghbGFzdF9tZW51LT5uZXh0KQor
CQkJCQlicmVhazsKKwkJCX0KKwkJCWxhc3RfbWVudS0+bmV4dCA9IG1lbnUtPm5leHQ7CisJCQlt
ZW51LT5uZXh0ID0gbWVudS0+bGlzdDsKKwkJCW1lbnUtPmxpc3QgPSBOVUxMOworCQl9CisJfQor
CisJaWYgKHN5bSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV0FSTkVEKSkgeworCQlpZiAoc3lt
LT50eXBlID09IFNfVU5LTk9XTikKKwkJCW1lbnVfd2FybihwYXJlbnQsICJjb25maWcgc3ltYm9s
IGRlZmluZWQgd2l0aG91dCB0eXBlIik7CisKKwkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiAh
cGFyZW50LT5wcm9tcHQpCisJCQltZW51X3dhcm4ocGFyZW50LCAiY2hvaWNlIG11c3QgaGF2ZSBh
IHByb21wdCIpOworCisJCS8qIENoZWNrIHByb3BlcnRpZXMgY29ubmVjdGVkIHRvIHRoaXMgc3lt
Ym9sICovCisJCXN5bV9jaGVja19wcm9wKHN5bSk7CisJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dB
Uk5FRDsKKwl9CisKKwkvKgorCSAqIEZvciBub24tb3B0aW9uYWwgY2hvaWNlcywgYWRkIGEgcmV2
ZXJzZSBkZXBlbmRlbmN5IChjb3JyZXNwb25kaW5nIHRvCisJICogYSBzZWxlY3QpIG9mICc8dmlz
aWJpbGl0eT4gJiYgbScuIFRoaXMgcHJldmVudHMgdGhlIHVzZXIgZnJvbQorCSAqIHNldHRpbmcg
dGhlIGNob2ljZSBtb2RlIHRvICduJyB3aGVuIHRoZSBjaG9pY2UgaXMgdmlzaWJsZS4KKwkgKgor
CSAqIFRoaXMgd291bGQgYWxzbyB3b3JrIGZvciBub24tY2hvaWNlIHN5bWJvbHMsIGJ1dCBvbmx5
IG5vbi1vcHRpb25hbAorCSAqIGNob2ljZXMgY2xlYXIgU1lNQk9MX09QVElPTkFMIGFzIG9mIHdy
aXRpbmcuIENob2ljZXMgYXJlIGltcGxlbWVudGVkCisJICogYXMgYSB0eXBlIG9mIHN5bWJvbC4K
KwkgKi8KKwlpZiAoc3ltICYmICFzeW1faXNfb3B0aW9uYWwoc3ltKSAmJiBwYXJlbnQtPnByb21w
dCkgeworCQlzeW0tPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5yZXZfZGVwLmV4
cHIsCisJCQkJZXhwcl9hbGxvY19hbmQocGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwciwKKwkJ
CQkJZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9tb2QpKSk7CisJfQorfQorCitib29sIG1lbnVf
aGFzX3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpZiAoIW1lbnUtPnByb21wdCkKKwkJ
cmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCisvKgorICogRGV0ZXJtaW5lIGlmIGEg
bWVudSBpcyBlbXB0eS4KKyAqIEEgbWVudSBpcyBjb25zaWRlcmVkIGVtcHR5IGlmIGl0IGNvbnRh
aW5zIG5vIG9yIG9ubHkKKyAqIGludmlzaWJsZSBlbnRyaWVzLgorICovCitib29sIG1lbnVfaXNf
ZW1wdHkoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCisJZm9y
IChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCWlm
IChtZW51X2lzX3Zpc2libGUoY2hpbGQpKQorCQkJcmV0dXJuKGZhbHNlKTsKKwl9CisJcmV0dXJu
KHRydWUpOworfQorCitib29sIG1lbnVfaXNfdmlzaWJsZShzdHJ1Y3QgbWVudSAqbWVudSkKK3sK
KwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXRyaXN0YXRlIHZp
c2libGU7CisKKwlpZiAoIW1lbnUtPnByb21wdCkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKG1l
bnUtPnZpc2liaWxpdHkpIHsKKwkJaWYgKGV4cHJfY2FsY192YWx1ZShtZW51LT52aXNpYmlsaXR5
KSA9PSBubykKKwkJCXJldHVybiBmYWxzZTsKKwl9CisKKwlzeW0gPSBtZW51LT5zeW07CisJaWYg
KHN5bSkgeworCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQl2aXNpYmxlID0gbWVudS0+cHJvbXB0
LT52aXNpYmxlLnRyaTsKKwl9IGVsc2UKKwkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+dmlzaWJs
ZS50cmkgPSBleHByX2NhbGNfdmFsdWUobWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIpOworCisJ
aWYgKHZpc2libGUgIT0gbm8pCisJCXJldHVybiB0cnVlOworCisJaWYgKCFzeW0gfHwgc3ltX2dl
dF90cmlzdGF0ZV92YWx1ZShtZW51LT5zeW0pID09IG5vKQorCQlyZXR1cm4gZmFsc2U7CisKKwlm
b3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJ
aWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkpIHsKKwkJCWlmIChzeW0pCisJCQkJc3ltLT5mbGFn
cyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVy
biBmYWxzZTsKK30KKworY29uc3QgY2hhciAqbWVudV9nZXRfcHJvbXB0KHN0cnVjdCBtZW51ICpt
ZW51KQoreworCWlmIChtZW51LT5wcm9tcHQpCisJCXJldHVybiBtZW51LT5wcm9tcHQtPnRleHQ7
CisJZWxzZSBpZiAobWVudS0+c3ltKQorCQlyZXR1cm4gbWVudS0+c3ltLT5uYW1lOworCXJldHVy
biBOVUxMOworfQorCitzdHJ1Y3QgbWVudSAqbWVudV9nZXRfcm9vdF9tZW51KHN0cnVjdCBtZW51
ICptZW51KQoreworCXJldHVybiAmcm9vdG1lbnU7Cit9CisKK3N0cnVjdCBtZW51ICptZW51X2dl
dF9wYXJlbnRfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwllbnVtIHByb3BfdHlwZSB0eXBl
OworCisJZm9yICg7IG1lbnUgIT0gJnJvb3RtZW51OyBtZW51ID0gbWVudS0+cGFyZW50KSB7CisJ
CXR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiAwOworCQlpZiAodHlw
ZSA9PSBQX01FTlUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIG1lbnU7Cit9CisKK2Jvb2wgbWVu
dV9oYXNfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlyZXR1cm4gbWVudS0+aGVscCAhPSBO
VUxMOworfQorCitjb25zdCBjaGFyICptZW51X2dldF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQor
eworCWlmIChtZW51LT5oZWxwKQorCQlyZXR1cm4gbWVudS0+aGVscDsKKwllbHNlCisJCXJldHVy
biAiIjsKK30KKworc3RhdGljIHZvaWQgZ2V0X3Byb21wdF9zdHIoc3RydWN0IGdzdHIgKnIsIHN0
cnVjdCBwcm9wZXJ0eSAqcHJvcCwKKwkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJ
aW50IGksIGo7CisJc3RydWN0IG1lbnUgKnN1Ym1lbnVbOF0sICptZW51LCAqbG9jYXRpb24gPSBO
VUxMOworCXN0cnVjdCBqdW1wX2tleSAqanVtcCA9IE5VTEw7CisKKwlzdHJfcHJpbnRmKHIsICJQ
cm9tcHQ6ICVzXG4iLCBwcm9wLT50ZXh0KTsKKwltZW51ID0gcHJvcC0+bWVudS0+cGFyZW50Owor
CWZvciAoaSA9IDA7IG1lbnUgIT0gJnJvb3RtZW51ICYmIGkgPCA4OyBtZW51ID0gbWVudS0+cGFy
ZW50KSB7CisJCWJvb2wgYWNjZXNzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShtZW51KTsKKworCQlz
dWJtZW51W2krK10gPSBtZW51OworCQlpZiAobG9jYXRpb24gPT0gTlVMTCAmJiBhY2Nlc3NpYmxl
KQorCQkJbG9jYXRpb24gPSBtZW51OworCX0KKwlpZiAoaGVhZCAmJiBsb2NhdGlvbikgeworCQlq
dW1wID0geG1hbGxvYyhzaXplb2Yoc3RydWN0IGp1bXBfa2V5KSk7CisKKwkJaWYgKG1lbnVfaXNf
dmlzaWJsZShwcm9wLT5tZW51KSkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIG5vdCBlbm91Z2gg
cm9vbSB0byBwdXQgdGhlIGhpbnQgYXQgdGhlCisJCQkgKiBiZWdpbm5pbmcgb2YgdGhlICJQcm9t
cHQiIGxpbmUuIFB1dCB0aGUgaGludCBvbiB0aGUKKwkJCSAqIGxhc3QgIkxvY2F0aW9uIiBsaW5l
IGV2ZW4gd2hlbiBpdCB3b3VsZCBiZWxvbmcgb24KKwkJCSAqIHRoZSBmb3JtZXIuCisJCQkgKi8K
KwkJCWp1bXAtPnRhcmdldCA9IHByb3AtPm1lbnU7CisJCX0gZWxzZQorCQkJanVtcC0+dGFyZ2V0
ID0gbG9jYXRpb247CisKKwkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCisJCQlqdW1wLT5pbmRleCA9
IDA7CisJCWVsc2UKKwkJCWp1bXAtPmluZGV4ID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1
Y3QganVtcF9rZXksCisJCQkJCQkgZW50cmllcyktPmluZGV4ICsgMTsKKworCQlsaXN0X2FkZF90
YWlsKCZqdW1wLT5lbnRyaWVzLCBoZWFkKTsKKwl9CisKKwlpZiAoaSA+IDApIHsKKwkJc3RyX3By
aW50ZihyLCAiICBMb2NhdGlvbjpcbiIpOworCQlmb3IgKGogPSA0OyAtLWkgPj0gMDsgaiArPSAy
KSB7CisJCQltZW51ID0gc3VibWVudVtpXTsKKwkJCWlmIChqdW1wICYmIG1lbnUgPT0gbG9jYXRp
b24pCisJCQkJanVtcC0+b2Zmc2V0ID0gc3RybGVuKHItPnMpOworCQkJc3RyX3ByaW50ZihyLCAi
JSpjLT4gJXMiLCBqLCAnICcsCisJCQkJICAgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsKKwkJCWlm
IChtZW51LT5zeW0pIHsKKwkJCQlzdHJfcHJpbnRmKHIsICIgKCVzIFs9JXNdKSIsIG1lbnUtPnN5
bS0+bmFtZSA/CisJCQkJCW1lbnUtPnN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJCXN5bV9n
ZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkpOworCQkJfQorCQkJc3RyX2FwcGVuZChyLCAiXG4i
KTsKKwkJfQorCX0KK30KKworLyoKKyAqIGdldCBwcm9wZXJ0eSBvZiB0eXBlIFBfU1lNQk9MCisg
Ki8KK3N0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKmdldF9zeW1ib2xfcHJvcChzdHJ1Y3Qgc3ltYm9s
ICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wID0gTlVMTDsKKworCWZvcl9hbGxfcHJv
cGVydGllcyhzeW0sIHByb3AsIFBfU1lNQk9MKQorCQlicmVhazsKKwlyZXR1cm4gcHJvcDsKK30K
Kworc3RhdGljIHZvaWQgZ2V0X3N5bWJvbF9wcm9wc19zdHIoc3RydWN0IGdzdHIgKnIsIHN0cnVj
dCBzeW1ib2wgKnN5bSwKKwkJCQkgZW51bSBwcm9wX3R5cGUgdG9rLCBjb25zdCBjaGFyICpwcmVm
aXgpCit7CisJYm9vbCBoaXQgPSBmYWxzZTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlm
b3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBwcm9wLCB0b2spIHsKKwkJaWYgKCFoaXQpIHsKKwkJCXN0
cl9hcHBlbmQociwgcHJlZml4KTsKKwkJCWhpdCA9IHRydWU7CisJCX0gZWxzZQorCQkJc3RyX3By
aW50ZihyLCAiICYmICIpOworCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7CisJfQor
CWlmIChoaXQpCisJCXN0cl9hcHBlbmQociwgIlxuIik7Cit9CisKKy8qCisgKiBoZWFkIGlzIG9w
dGlvbmFsIGFuZCBtYXkgYmUgTlVMTAorICovCitzdGF0aWMgdm9pZCBnZXRfc3ltYm9sX3N0cihz
dHJ1Y3QgZ3N0ciAqciwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkgICAgc3RydWN0IGxpc3RfaGVh
ZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlpZiAoc3ltICYmIHN5bS0+
bmFtZSkgeworCQlzdHJfcHJpbnRmKHIsICJTeW1ib2w6ICVzIFs9JXNdXG4iLCBzeW0tPm5hbWUs
CisJCQkgICBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKKwkJc3RyX3ByaW50ZihyLCAiVHlw
ZSAgOiAlc1xuIiwgc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKKwkJaWYgKHN5bS0+dHlwZSA9
PSBTX0lOVCB8fCBzeW0tPnR5cGUgPT0gU19IRVgpIHsKKwkJCXByb3AgPSBzeW1fZ2V0X3Jhbmdl
X3Byb3Aoc3ltKTsKKwkJCWlmIChwcm9wKSB7CisJCQkJc3RyX3ByaW50ZihyLCAiUmFuZ2UgOiAi
KTsKKwkJCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7CisJCQkJc3RyX2FwcGVuZChy
LCAiXG4iKTsKKwkJCX0KKwkJfQorCX0KKwlmb3JfYWxsX3Byb21wdHMoc3ltLCBwcm9wKQorCQln
ZXRfcHJvbXB0X3N0cihyLCBwcm9wLCBoZWFkKTsKKworCXByb3AgPSBnZXRfc3ltYm9sX3Byb3Ao
c3ltKTsKKwlpZiAocHJvcCkgeworCQlzdHJfcHJpbnRmKHIsICIgIERlZmluZWQgYXQgJXM6JWRc
biIsIHByb3AtPm1lbnUtPmZpbGUtPm5hbWUsCisJCQlwcm9wLT5tZW51LT5saW5lbm8pOworCQlp
ZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCXN0cl9hcHBlbmQociwg
IiAgRGVwZW5kcyBvbjogIik7CisJCQlleHByX2dzdHJfcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCByKTsKKwkJCXN0cl9hcHBlbmQociwgIlxuIik7CisJCX0KKwl9CisKKwlnZXRfc3ltYm9sX3By
b3BzX3N0cihyLCBzeW0sIFBfU0VMRUNULCAiICBTZWxlY3RzOiAiKTsKKwlpZiAoc3ltLT5yZXZf
ZGVwLmV4cHIpIHsKKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwg
ciwgeWVzLCAiICBTZWxlY3RlZCBieSBbeV06XG4iKTsKKwkJZXhwcl9nc3RyX3ByaW50X3JldmRl
cChzeW0tPnJldl9kZXAuZXhwciwgciwgbW9kLCAiICBTZWxlY3RlZCBieSBbbV06XG4iKTsKKwkJ
ZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwgciwgbm8sICIgIFNlbGVj
dGVkIGJ5IFtuXTpcbiIpOworCX0KKworCWdldF9zeW1ib2xfcHJvcHNfc3RyKHIsIHN5bSwgUF9J
TVBMWSwgIiAgSW1wbGllczogIik7CisJaWYgKHN5bS0+aW1wbGllZC5leHByKSB7CisJCWV4cHJf
Z3N0cl9wcmludF9yZXZkZXAoc3ltLT5pbXBsaWVkLmV4cHIsIHIsIHllcywgIiAgSW1wbGllZCBi
eSBbeV06XG4iKTsKKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPmltcGxpZWQuZXhwciwg
ciwgbW9kLCAiICBJbXBsaWVkIGJ5IFttXTpcbiIpOworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVw
KHN5bS0+aW1wbGllZC5leHByLCByLCBubywgIiAgSW1wbGllZCBieSBbbl06XG4iKTsKKwl9CisK
KwlzdHJfYXBwZW5kKHIsICJcblxuIik7Cit9CisKK3N0cnVjdCBnc3RyIGdldF9yZWxhdGlvbnNf
c3RyKHN0cnVjdCBzeW1ib2wgKipzeW1fYXJyLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQorewor
CXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgZ3N0ciByZXMgPSBzdHJfbmV3KCk7CisJaW50
IGk7CisKKwlmb3IgKGkgPSAwOyBzeW1fYXJyICYmIChzeW0gPSBzeW1fYXJyW2ldKTsgaSsrKQor
CQlnZXRfc3ltYm9sX3N0cigmcmVzLCBzeW0sIGhlYWQpOworCWlmICghaSkKKwkJc3RyX2FwcGVu
ZCgmcmVzLCAiTm8gbWF0Y2hlcyBmb3VuZC5cbiIpOworCXJldHVybiByZXM7Cit9CisKKwordm9p
ZCBtZW51X2dldF9leHRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IGdzdHIgKmhlbHAp
Cit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOworCWNvbnN0IGNoYXIgKmhlbHBf
dGV4dCA9IG5vaGVscF90ZXh0OworCisJaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpIHsKKwkJaWYg
KHN5bS0+bmFtZSkKKwkJCXN0cl9wcmludGYoaGVscCwgIiVzJXM6XG5cbiIsIENPTkZJR18sIHN5
bS0+bmFtZSk7CisJCWhlbHBfdGV4dCA9IG1lbnVfZ2V0X2hlbHAobWVudSk7CisJfQorCXN0cl9w
cmludGYoaGVscCwgIiVzXG4iLCBoZWxwX3RleHQpOworCWlmIChzeW0pCisJCWdldF9zeW1ib2xf
c3RyKGhlbHAsIHN5bSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L21lcmdlX2NvbmZpZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29uZmlnLnNoCm5l
dyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQ5MjRjNTEKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L21lcmdlX2NvbmZpZy5zaApAQCAtMCwwICsxLDE4OSBA
QAorIyEvYmluL3NoCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjCisjICBt
ZXJnZV9jb25maWcuc2ggLSBUYWtlcyBhIGxpc3Qgb2YgY29uZmlnIGZyYWdtZW50IHZhbHVlcywg
YW5kIG1lcmdlcworIyAgdGhlbSBvbmUgYnkgb25lLiBQcm92aWRlcyB3YXJuaW5ncyBvbiBvdmVy
cmlkZGVuIHZhbHVlcywgYW5kIHNwZWNpZmllZAorIyAgdmFsdWVzIHRoYXQgZGlkIG5vdCBtYWtl
IGl0IHRvIHRoZSByZXN1bHRpbmcgLmNvbmZpZyBmaWxlIChkdWUgdG8gbWlzc2VkCisjICBkZXBl
bmRlbmNpZXMgb3IgY29uZmlnIHN5bWJvbCByZW1vdmFsKS4KKyMKKyMgIFBvcnRpb25zIHJldXNl
ZCBmcm9tIGtjb25mX2NoZWNrIGFuZCBnZW5lcmF0ZV9jZmc6CisjICBodHRwOi8vZ2l0LnlvY3Rv
cHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1rZXJuZWwtdG9vbHMvdHJlZS90b29scy9r
Y29uZl9jaGVjaworIyAgaHR0cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kv
eW9jdG8ta2VybmVsLXRvb2xzL3RyZWUvdG9vbHMvZ2VuZXJhdGVfY2ZnCisjCisjICBDb3B5cmln
aHQgKGMpIDIwMDktMjAxMCBXaW5kIFJpdmVyIFN5c3RlbXMsIEluYy4KKyMgIENvcHlyaWdodCAy
MDExIExpbmFybworCitjbGVhbl91cCgpIHsKKwlybSAtZiAkVE1QX0ZJTEUKKwlybSAtZiAkTUVS
R0VfRklMRQorCWV4aXQKK30KK3RyYXAgY2xlYW5fdXAgSFVQIElOVCBURVJNCisKK3VzYWdlKCkg
eworCWVjaG8gIlVzYWdlOiAkMCBbT1BUSU9OU10gW0NPTkZJRyBbLi4uXV0iCisJZWNobyAiICAt
aCAgICBkaXNwbGF5IHRoaXMgaGVscCB0ZXh0IgorCWVjaG8gIiAgLW0gICAgb25seSBtZXJnZSB0
aGUgZnJhZ21lbnRzLCBkbyBub3QgZXhlY3V0ZSB0aGUgbWFrZSBjb21tYW5kIgorCWVjaG8gIiAg
LW4gICAgdXNlIGFsbG5vY29uZmlnIGluc3RlYWQgb2YgYWxsZGVmY29uZmlnIgorCWVjaG8gIiAg
LXIgICAgbGlzdCByZWR1bmRhbnQgZW50cmllcyB3aGVuIG1lcmdpbmcgZnJhZ21lbnRzIgorCWVj
aG8gIiAgLXkgICAgbWFrZSBidWlsdGluIGhhdmUgcHJlY2VkZW5jZSBvdmVyIG1vZHVsZXMiCisJ
ZWNobyAiICAtTyAgICBkaXIgdG8gcHV0IGdlbmVyYXRlZCBvdXRwdXQgZmlsZXMuICBDb25zaWRl
ciBzZXR0aW5nIFwkS0NPTkZJR19DT05GSUcgaW5zdGVhZC4iCisJZWNobworCWVjaG8gIlVzZWQg
cHJlZml4OiAnJENPTkZJR19QUkVGSVgnLiBZb3UgY2FuIHJlZGVmaW5lIGl0IHdpdGggXCRDT05G
SUdfIGVudmlyb25tZW50IHZhcmlhYmxlLiIKK30KKworUlVOTUFLRT10cnVlCitBTExUQVJHRVQ9
YWxsZGVmY29uZmlnCitXQVJOUkVEVU49ZmFsc2UKK0JVSUxUSU49ZmFsc2UKK09VVFBVVD0uCitD
T05GSUdfUFJFRklYPSR7Q09ORklHXy1DT05GSUdffQorCit3aGlsZSB0cnVlOyBkbworCWNhc2Ug
JDEgaW4KKwkiLW4iKQorCQlBTExUQVJHRVQ9YWxsbm9jb25maWcKKwkJc2hpZnQKKwkJY29udGlu
dWUKKwkJOzsKKwkiLW0iKQorCQlSVU5NQUtFPWZhbHNlCisJCXNoaWZ0CisJCWNvbnRpbnVlCisJ
CTs7CisJIi1oIikKKwkJdXNhZ2UKKwkJZXhpdAorCQk7OworCSItciIpCisJCVdBUk5SRURVTj10
cnVlCisJCXNoaWZ0CisJCWNvbnRpbnVlCisJCTs7CisJIi15IikKKwkJQlVJTFRJTj10cnVlCisJ
CXNoaWZ0CisJCWNvbnRpbnVlCisJCTs7CisJIi1PIikKKwkJaWYgWyAtZCAkMiBdO3RoZW4KKwkJ
CU9VVFBVVD0kKGVjaG8gJDIgfCBzZWQgJ3MvXC8qJC8vJykKKwkJZWxzZQorCQkJZWNobyAib3V0
cHV0IGRpcmVjdG9yeSAkMiBkb2VzIG5vdCBleGlzdCIgMT4mMgorCQkJZXhpdCAxCisJCWZpCisJ
CXNoaWZ0IDIKKwkJY29udGludWUKKwkJOzsKKwkqKQorCQlicmVhaworCQk7OworCWVzYWMKK2Rv
bmUKKworaWYgWyAiJCMiIC1sdCAxIF0gOyB0aGVuCisJdXNhZ2UKKwlleGl0CitmaQorCitpZiBb
IC16ICIkS0NPTkZJR19DT05GSUciIF07IHRoZW4KKwlpZiBbICIkT1VUUFVUIiAhPSAuIF07IHRo
ZW4KKwkJS0NPTkZJR19DT05GSUc9JChyZWFkbGluayAtbSAtLSAiJE9VVFBVVC8uY29uZmlnIikK
KwllbHNlCisJCUtDT05GSUdfQ09ORklHPS5jb25maWcKKwlmaQorZmkKKworSU5JVEZJTEU9JDEK
K3NoaWZ0OworCitpZiBbICEgLXIgIiRJTklURklMRSIgXTsgdGhlbgorCWVjaG8gIlRoZSBiYXNl
IGZpbGUgJyRJTklURklMRScgZG9lcyBub3QgZXhpc3QuICBFeGl0LiIgPiYyCisJZXhpdCAxCitm
aQorCitNRVJHRV9MSVNUPSQqCitTRURfQ09ORklHX0VYUDE9InMvXlwoJHtDT05GSUdfUFJFRklY
fVthLXpBLVowLTlfXSpcKT0uKi9cMS9wIgorU0VEX0NPTkZJR19FWFAyPSJzL14jIFwoJHtDT05G
SUdfUFJFRklYfVthLXpBLVowLTlfXSpcKSBpcyBub3Qgc2V0JC9cMS9wIgorCitUTVBfRklMRT0k
KG1rdGVtcCAuLy50bXAuY29uZmlnLlhYWFhYWFhYWFgpCitNRVJHRV9GSUxFPSQobWt0ZW1wIC4v
Lm1lcmdlX3RtcC5jb25maWcuWFhYWFhYWFhYWCkKKworZWNobyAiVXNpbmcgJElOSVRGSUxFIGFz
IGJhc2UiCitjYXQgJElOSVRGSUxFID4gJFRNUF9GSUxFCisKKyMgTWVyZ2UgZmlsZXMsIHByaW50
aW5nIHdhcm5pbmdzIG9uIG92ZXJyaWRkZW4gdmFsdWVzCitmb3IgT1JJR19NRVJHRV9GSUxFIGlu
ICRNRVJHRV9MSVNUIDsgZG8KKwllY2hvICJNZXJnaW5nICRPUklHX01FUkdFX0ZJTEUiCisJaWYg
WyAhIC1yICIkT1JJR19NRVJHRV9GSUxFIiBdOyB0aGVuCisJCWVjaG8gIlRoZSBtZXJnZSBmaWxl
ICckT1JJR19NRVJHRV9GSUxFJyBkb2VzIG5vdCBleGlzdC4gIEV4aXQuIiA+JjIKKwkJZXhpdCAx
CisJZmkKKwljYXQgJE9SSUdfTUVSR0VfRklMRSA+ICRNRVJHRV9GSUxFCisJQ0ZHX0xJU1Q9JChz
ZWQgLW4gLWUgIiRTRURfQ09ORklHX0VYUDEiIC1lICIkU0VEX0NPTkZJR19FWFAyIiAkTUVSR0Vf
RklMRSkKKworCWZvciBDRkcgaW4gJENGR19MSVNUIDsgZG8KKwkJZ3JlcCAtcSAtdyAkQ0ZHICRU
TVBfRklMRSB8fCBjb250aW51ZQorCQlQUkVWX1ZBTD0kKGdyZXAgLXcgJENGRyAkVE1QX0ZJTEUp
CisJCU5FV19WQUw9JChncmVwIC13ICRDRkcgJE1FUkdFX0ZJTEUpCisJCUJVSUxUSU5fRkxBRz1m
YWxzZQorCQlpZiBbICIkQlVJTFRJTiIgPSAidHJ1ZSIgXSAmJiBbICIke05FV19WQUwjQ09ORklH
Xyo9fSIgPSAibSIgXSAmJiBbICIke1BSRVZfVkFMI0NPTkZJR18qPX0iID0gInkiIF07IHRoZW4K
KwkJCWVjaG8gUHJldmlvdXMgIHZhbHVlOiAkUFJFVl9WQUwKKwkJCWVjaG8gTmV3IHZhbHVlOiAg
ICAgICAkTkVXX1ZBTAorCQkJZWNobyAteSBwYXNzZWQsIHdpbGwgbm90IGRlbW90ZSB5IHRvIG0K
KwkJCWVjaG8KKwkJCUJVSUxUSU5fRkxBRz10cnVlCisJCWVsaWYgWyAieCRQUkVWX1ZBTCIgIT0g
IngkTkVXX1ZBTCIgXSA7IHRoZW4KKwkJCWVjaG8gVmFsdWUgb2YgJENGRyBpcyByZWRlZmluZWQg
YnkgZnJhZ21lbnQgJE9SSUdfTUVSR0VfRklMRToKKwkJCWVjaG8gUHJldmlvdXMgIHZhbHVlOiAk
UFJFVl9WQUwKKwkJCWVjaG8gTmV3IHZhbHVlOiAgICAgICAkTkVXX1ZBTAorCQkJZWNobworCQll
bGlmIFsgIiRXQVJOUkVEVU4iID0gInRydWUiIF07IHRoZW4KKwkJCWVjaG8gVmFsdWUgb2YgJENG
RyBpcyByZWR1bmRhbnQgYnkgZnJhZ21lbnQgJE9SSUdfTUVSR0VfRklMRToKKwkJZmkKKwkJaWYg
WyAiJEJVSUxUSU5fRkxBRyIgPSAiZmFsc2UiIF07IHRoZW4KKwkJCXNlZCAtaSAiLyRDRkdbID1d
L2QiICRUTVBfRklMRQorCQllbHNlCisJCQlzZWQgLWkgIi8kQ0ZHWyA9XS9kIiAkTUVSR0VfRklM
RQorCQlmaQorCWRvbmUKKwljYXQgJE1FUkdFX0ZJTEUgPj4gJFRNUF9GSUxFCitkb25lCisKK2lm
IFsgIiRSVU5NQUtFIiA9ICJmYWxzZSIgXTsgdGhlbgorCWNwIC1UIC0tICIkVE1QX0ZJTEUiICIk
S0NPTkZJR19DT05GSUciCisJZWNobyAiIyIKKwllY2hvICIjIG1lcmdlZCBjb25maWd1cmF0aW9u
IHdyaXR0ZW4gdG8gJEtDT05GSUdfQ09ORklHIChuZWVkcyBtYWtlKSIKKwllY2hvICIjIgorCWNs
ZWFuX3VwCisJZXhpdAorZmkKKworIyBJZiB3ZSBoYXZlIGFuIG91dHB1dCBkaXIsIHNldHVwIHRo
ZSBPPSBhcmd1bWVudCwgb3RoZXJ3aXNlIGxlYXZlCisjIGl0IGJsYW5rLCBzaW5jZSBPPS4gd2ls
bCBjcmVhdGUgYW4gdW5uZWNlc3NhcnkgLi9zb3VyY2Ugc29mdGxpbmsKK09VVFBVVF9BUkc9IiIK
K2lmIFsgIiRPVVRQVVQiICE9ICIuIiBdIDsgdGhlbgorCU9VVFBVVF9BUkc9Ik89JE9VVFBVVCIK
K2ZpCisKKworIyBVc2UgdGhlIG1lcmdlZCBmaWxlIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3I6
CisjIGFsbGRlZmNvbmZpZzogRmlsbHMgaW4gYW55IG1pc3Npbmcgc3ltYm9scyB3aXRoIEtjb25m
aWcgZGVmYXVsdAorIyBhbGxub2NvbmZpZzogRmlsbHMgaW4gYW55IG1pc3Npbmcgc3ltYm9scyB3
aXRoICMgQ09ORklHXyogaXMgbm90IHNldAorbWFrZSBLQ09ORklHX0FMTENPTkZJRz0kVE1QX0ZJ
TEUgJE9VVFBVVF9BUkcgJEFMTFRBUkdFVAorCisKKyMgQ2hlY2sgYWxsIHNwZWNpZmllZCBjb25m
aWcgdmFsdWVzIHRvb2sgKG1pZ2h0IGhhdmUgbWlzc2VkLWRlcGVuZGVuY3kgaXNzdWVzKQorZm9y
IENGRyBpbiAkKHNlZCAtbiAtZSAiJFNFRF9DT05GSUdfRVhQMSIgLWUgIiRTRURfQ09ORklHX0VY
UDIiICRUTVBfRklMRSk7IGRvCisKKwlSRVFVRVNURURfVkFMPSQoZ3JlcCAtdyAtZSAiJENGRyIg
JFRNUF9GSUxFKQorCUFDVFVBTF9WQUw9JChncmVwIC13IC1lICIkQ0ZHIiAiJEtDT05GSUdfQ09O
RklHIikKKwlpZiBbICJ4JFJFUVVFU1RFRF9WQUwiICE9ICJ4JEFDVFVBTF9WQUwiIF0gOyB0aGVu
CisJCWVjaG8gIlZhbHVlIHJlcXVlc3RlZCBmb3IgJENGRyBub3QgaW4gZmluYWwgLmNvbmZpZyIK
KwkJZWNobyAiUmVxdWVzdGVkIHZhbHVlOiAgJFJFUVVFU1RFRF9WQUwiCisJCWVjaG8gIkFjdHVh
bCB2YWx1ZTogICAgICRBQ1RVQUxfVkFMIgorCQllY2hvICIiCisJZmkKK2RvbmUKKworY2xlYW5f
dXAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9uY29uZi1jZmcuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAw
MDAwMC4uMDAxNTU5ZQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNv
bmYtY2ZnLnNoCkBAIC0wLDAgKzEsNDcgQEAKKyMhL2Jpbi9zaAorIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMAorCitQS0c9Im5jdXJzZXN3IG1lbnV3IHBhbmVsdyIKK1BLRzI9Im5j
dXJzZXMgbWVudSBwYW5lbCIKKworaWYgWyAtbiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBd
OyB0aGVuCisJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHOyB0aGVuCisJCWVjaG8gY2ZsYWdz
PVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cpXCIKKwkJZWNobyBsaWJzPVwiJChwa2ctY29u
ZmlnIC0tbGlicyAkUEtHKVwiCisJCWV4aXQgMAorCWZpCisKKwlpZiBwa2ctY29uZmlnIC0tZXhp
c3RzICRQS0cyOyB0aGVuCisJCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQ
S0cyKVwiCisJCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCIKKwkJZXhp
dCAwCisJZmkKK2ZpCisKKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4gY2FzZSBwa2ctY29u
ZmlnIGlzIG5vdCBpbnN0YWxsZWQuCisjIChFdmVuIGlmIGl0IGlzIGluc3RhbGxlZCwgc29tZSBk
aXN0cmlidXRpb25zIHN1Y2ggYXMgb3BlblNVU0UgY2Fubm90CisjIGZpbmQgbmN1cnNlcyBieSBw
a2ctY29uZmlnLikKK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0
aGVuCisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3
XCIKKwllY2hvIGxpYnM9XCItbG5jdXJzZXN3IC1sbWVudXcgLWxwYW5lbHdcIgorCWV4aXQgMAor
ZmkKKworaWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy9uY3Vyc2VzLmggXTsgdGhlbgorCWVj
aG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzXCIKKwllY2hv
IGxpYnM9XCItbG5jdXJzZXMgLWxtZW51IC1scGFuZWxcIgorCWV4aXQgMAorZmkKKworaWYgWyAt
ZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy5oIF07IHRoZW4KKwllY2hvIGNmbGFncz1cIi1EX0dOVV9T
T1VSQ0VcIgorCWVjaG8gbGlicz1cIi1sbmN1cnNlcyAtbG1lbnUgLWxwYW5lbFwiCisJZXhpdCAw
CitmaQorCitlY2hvID4mMiAiKiIKK2VjaG8gPiYyICIqIFVuYWJsZSB0byBmaW5kIHRoZSBuY3Vy
c2VzIHBhY2thZ2UuIgorZWNobyA+JjIgIiogSW5zdGFsbCBuY3Vyc2VzIChuY3Vyc2VzLWRldmVs
IG9yIGxpYm5jdXJzZXMtZGV2IgorZWNobyA+JjIgIiogZGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJp
YnV0aW9uKS4iCitlY2hvID4mMiAiKiIKK2V4aXQgMQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9uY29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYWZlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBw
b3J0L2tjb25maWcubmV3L25jb25mLmMKQEAgLTAsMCArMSwxNTU1IEBACisvLyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIgVHph
Y2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBtZW51Y29u
ZmlnLgorICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIF9HTlVfU09VUkNFCisjZW5k
aWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2luY2x1ZGUg
ImxrYy5oIgorI2luY2x1ZGUgIm5jb25mLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworc3RhdGlj
IGNvbnN0IGNoYXIgbmNvbmZfZ2xvYmFsX2hlbHBbXSA9CisiSGVscCB3aW5kb3dzXG4iCisiLS0t
LS0tLS0tLS0tXG4iCisibyAgR2xvYmFsIGhlbHA6ICBVbmxlc3MgaW4gYSBkYXRhIGVudHJ5IHdp
bmRvdywgcHJlc3NpbmcgPEYxPiB3aWxsIGdpdmUgXG4iCisiICAgeW91IHRoZSBnbG9iYWwgaGVs
cCB3aW5kb3csIHdoaWNoIHlvdSBhcmUganVzdCByZWFkaW5nLlxuIgorIlxuIgorIm8gIEEgc2hv
cnQgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIGhlbHAgaXMgYXZhaWxhYmxlIGJ5IHByZXNzaW5nIDxG
Mz4uXG4iCisiXG4iCisibyAgTG9jYWwgaGVscDogIFRvIGdldCBoZWxwIHJlbGF0ZWQgdG8gdGhl
IGN1cnJlbnQgbWVudSBlbnRyeSwgdXNlIGFueVxuIgorIiAgIG9mIDw/PiA8aD4sIG9yIGlmIGlu
IGEgZGF0YSBlbnRyeSB3aW5kb3cgdGhlbiBwcmVzcyA8RjE+LlxuIgorIlxuIgorIlxuIgorIk1l
bnUgZW50cmllc1xuIgorIi0tLS0tLS0tLS0tLVxuIgorIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91
IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIgorImJ1aWxk
LiAgS2VybmVsIGZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBv
ciByZW1vdmVkLlxuIgorIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVj
aW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzLlxuIgorIlxuIgorIk1lbnUgZW50cmllcyBiZWdp
bm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iCisi
ICBbIF0gIGNhbiBiZSBidWlsdCBpbiBvciByZW1vdmVkXG4iCisiICA8ID4gIGNhbiBiZSBidWls
dCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3ZlZFxuIgorIiAgeyB9ICBjYW4gYmUgYnVpbHQgaW4g
b3IgbW9kdWxhcml6ZWQsIGFyZSBzZWxlY3RlZCBieSBhbm90aGVyIGZlYXR1cmVcbiIKKyIgIC0g
LSAgYXJlIHNlbGVjdGVkIGJ5IGFub3RoZXIgZmVhdHVyZVxuIgorIiAgWFhYICBjYW5ub3QgYmUg
c2VsZWN0ZWQuICBTeW1ib2wgSW5mbyA8RjI+IHRlbGxzIHlvdSB3aHkuXG4iCisiKiwgTSBvciB3
aGl0ZXNwYWNlIGluc2lkZSBicmFjZXMgbWVhbnMgdG8gYnVpbGQgaW4sIGJ1aWxkIGFzIGEgbW9k
dWxlXG4iCisib3IgdG8gZXhjbHVkZSB0aGUgZmVhdHVyZSByZXNwZWN0aXZlbHkuXG4iCisiXG4i
CisiVG8gY2hhbmdlIGFueSBvZiB0aGVzZSBmZWF0dXJlcywgaGlnaGxpZ2h0IGl0IHdpdGggdGhl
IG1vdmVtZW50IGtleXNcbiIKKyJsaXN0ZWQgYmVsb3cgYW5kIHByZXNzIDx5PiB0byBidWlsZCBp
dCBpbiwgPG0+IHRvIG1ha2UgaXQgYSBtb2R1bGUgb3JcbiIKKyI8bj4gdG8gcmVtb3ZlIGl0LiAg
WW91IG1heSBwcmVzcyB0aGUgPFNwYWNlPiBrZXkgdG8gY3ljbGUgdGhyb3VnaCB0aGVcbiIKKyJh
dmFpbGFibGUgb3B0aW9ucy5cbiIKKyJcbiIKKyJBIHRyYWlsaW5nIFwiLS0tPlwiIGRlc2lnbmF0
ZXMgYSBzdWJtZW51LCBhIHRyYWlsaW5nIFwiLS0tLVwiIGFuXG4iCisiZW1wdHkgc3VibWVudS5c
biIKKyJcbiIKKyJNZW51IG5hdmlnYXRpb24ga2V5c1xuIgorIi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJM
aW5ld2lzZSB1cCAgICAgICAgICAgICAgICAgPFVwPlxuIgorIkxpbmV3aXNlIGRvd24gICAgICAg
ICAgICAgICA8RG93bj5cbiIKKyJQYWdld2lzZSB1cCAgICAgICAgICAgICAgICAgPFBhZ2UgVXA+
XG4iCisiUGFnZXdpc2UgZG93biAgICAgICAgICAgICAgIDxQYWdlIERvd24+XG4iCisiRmlyc3Qg
ZW50cnkgICAgICAgICAgICAgICAgIDxIb21lPlxuIgorIkxhc3QgZW50cnkgICAgICAgICAgICAg
ICAgICA8RW5kPlxuIgorIkVudGVyIGEgc3VibWVudSAgICAgICAgICAgICA8UmlnaHQ+ICA8RW50
ZXI+XG4iCisiR28gYmFjayB0byBwYXJlbnQgbWVudSAgICAgIDxMZWZ0PiAgIDxFc2M+ICA8RjU+
XG4iCisiQ2xvc2UgYSBoZWxwIHdpbmRvdyAgICAgICAgIDxFbnRlcj4gIDxFc2M+ICA8RjU+XG4i
CisiQ2xvc2UgZW50cnkgd2luZG93LCBhcHBseSAgIDxFbnRlcj5cbiIKKyJDbG9zZSBlbnRyeSB3
aW5kb3csIGZvcmdldCAgPEVzYz4gIDxGNT5cbiIKKyJTdGFydCBpbmNyZW1lbnRhbCwgY2FzZS1p
bnNlbnNpdGl2ZSBzZWFyY2ggZm9yIFNUUklORyBpbiBtZW51IGVudHJpZXMsXG4iCisiICAgIG5v
IHJlZ2V4IHN1cHBvcnQsIFNUUklORyBpcyBkaXNwbGF5ZWQgaW4gdXBwZXIgbGVmdCBjb3JuZXJc
biIKKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+U1RSSU5HXG4iCisiICAgIFJlbW92
ZSBsYXN0IGNoYXJhY3RlciAgIDxCYWNrc3BhY2U+XG4iCisiICAgIEp1bXAgdG8gbmV4dCBoaXQg
ICAgICAgIDxEb3duPlxuIgorIiAgICBKdW1wIHRvIHByZXZpb3VzIGhpdCAgICA8VXA+XG4iCisi
RXhpdCBtZW51IHNlYXJjaCBtb2RlICAgICAgIDwvPiAgPEVzYz5cbiIKKyJTZWFyY2ggZm9yIGNv
bmZpZ3VyYXRpb24gdmFyaWFibGVzIHdpdGggb3Igd2l0aG91dCBsZWFkaW5nIENPTkZJR19cbiIK
KyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEY4PlJlZ0V4cHI8RW50ZXI+XG4iCisiVmVy
Ym9zZSBzZWFyY2ggaGVscCAgICAgICAgIDxGOD48RjE+XG4iCisiLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgor
IlxuIgorIlVubGVzcyBpbiBhIGRhdGEgZW50cnkgd2luZG93LCBrZXkgPDE+IG1heSBiZSB1c2Vk
IGluc3RlYWQgb2YgPEYxPixcbiIKKyI8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4iCisiXG4i
CisiXG4iCisiUmFkaW9saXN0IChDaG9pY2UgbGlzdClcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIgorIlVzZSB0aGUgbW92ZW1lbnQga2V5cyBsaXN0ZWQgYWJvdmUgdG8gc2VsZWN0IHRo
ZSBvcHRpb24geW91IHdpc2ggdG8gc2V0XG4iCisiYW5kIHByZXNzIDxTcGFjZT4uXG4iCisiXG4i
CisiXG4iCisiRGF0YSBlbnRyeVxuIgorIi0tLS0tLS0tLS1cbiIKKyJFbnRlciB0aGUgcmVxdWVz
dGVkIGluZm9ybWF0aW9uIGFuZCBwcmVzcyA8RW50ZXI+LiAgSGV4YWRlY2ltYWwgdmFsdWVzXG4i
CisibWF5IGJlIGVudGVyZWQgd2l0aG91dCB0aGUgXCIweFwiIHByZWZpeC5cbiIKKyJcbiIKKyJc
biIKKyJUZXh0IEJveCAoSGVscCBXaW5kb3cpXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
IgorIlVzZSBtb3ZlbWVudCBrZXlzIGFzIGxpc3RlZCBpbiB0YWJsZSBhYm92ZS5cbiIKKyJcbiIK
KyJQcmVzcyBhbnkgb2YgPEVudGVyPiA8RXNjPiA8cT4gPEY1PiA8Rjk+IHRvIGV4aXQuXG4iCisi
XG4iCisiXG4iCisiQWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXNcbiIKKyItLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIm5jb25maWcgc3VwcG9ydHMgc3dpdGNoaW5nIGJldHdl
ZW4gZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxuIgorIlByZXNzIDxGNj4gdG8gc2F2ZSB5b3Vy
IGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFByZXNzIDxGNz4gYW5kIGVudGVyXG4iCisiYSBmaWxl
IG5hbWUgdG8gbG9hZCBhIHByZXZpb3VzbHkgc2F2ZWQgY29uZmlndXJhdGlvbi5cbiIKKyJcbiIK
KyJcbiIKKyJUZXJtaW5hbCBjb25maWd1cmF0aW9uXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIgorIklmIHlvdSB1c2UgbmNvbmZpZyBpbiBhIHh0ZXJtIHdpbmRvdywgbWFrZSBzdXJlIHlv
dXIgVEVSTSBlbnZpcm9ubWVudFxuIgorInZhcmlhYmxlIHNwZWNpZmllcyBhIHRlcm1pbmFsIGNv
bmZpZ3VyYXRpb24gd2hpY2ggc3VwcG9ydHMgYXQgbGVhc3RcbiIKKyIxNiBjb2xvcnMuICBPdGhl
cndpc2UgbmNvbmZpZyB3aWxsIGxvb2sgcmF0aGVyIGJhZC5cbiIKKyJcbiIKKyJJZiB0aGUgXCJz
dHR5IHNpemVcIiBjb21tYW5kIHJlcG9ydHMgdGhlIGN1cnJlbnQgdGVybWluYWxzaXplIGNvcnJl
Y3RseSxcbiIKKyJuY29uZmlnIHdpbGwgYWRhcHQgdG8gc2l6ZXMgbGFyZ2VyIHRoYW4gdGhlIHRy
YWRpdGlvbmFsIDgweDI1IFwic3RhbmRhcmRcIlxuIgorImFuZCBkaXNwbGF5IGxvbmdlciBtZW51
cyBwcm9wZXJseS5cbiIKKyJcbiIKKyJcbiIKKyJTaW5nbGUgbWVudSBtb2RlXG4iCisiLS0tLS0t
LS0tLS0tLS0tLVxuIgorIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2YgdGhlIG1lbnUgZW50
cmllcyBsaXN0ZWQgaW4gYSBzaW5nbGUgbWVudSxcbiIKKyJyYXRoZXIgdGhhbiB0aGUgZGVmYXVs
dCBtdWx0aW1lbnUgaGllcmFyY2h5LCBydW4gbmNvbmZpZyB3aXRoXG4iCisiTkNPTkZJR19NT0RF
IGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5nbGVfbWVudS4gIEV4YW1wbGU6XG4iCisi
XG4iCisibWFrZSBOQ09ORklHX01PREU9c2luZ2xlX21lbnUgbmNvbmZpZ1xuIgorIlxuIgorIjxF
bnRlcj4gd2lsbCB0aGVuIHVuZm9sZCB0aGUgYXBwcm9wcmlhdGUgY2F0ZWdvcnksIG9yIGZvbGQg
aXQgaWYgaXRcbiIKKyJpcyBhbHJlYWR5IHVuZm9sZGVkLiAgRm9sZGVkIG1lbnUgZW50cmllcyB3
aWxsIGJlIGRlc2lnbmF0ZWQgYnkgYVxuIgorImxlYWRpbmcgXCIrKz5cIiBhbmQgdW5mb2xkZWQg
ZW50cmllcyBieSBhIGxlYWRpbmcgXCItLT5cIi5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgdGhpcyBt
b2RlIGNhbiBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZSB0aGFuXG4i
CisidGhlIGRlZmF1bHQgbW9kZSwgZXNwZWNpYWxseSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiB1
bmZvbGRlZCBzdWJtZW51cy5cbiIKKyJcbiIsCittZW51X25vX2ZfaW5zdHJ1Y3Rpb25zW10gPQor
IkxlZ2VuZDogIFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9k
dWxlIGNhcGFibGUuXG4iCisiU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgYSB0cmFpbGluZyBc
Ii0tLT5cIiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiIKKyJcbiIKKyJVc2UgdGhlIGZvbGxv
d2luZyBrZXlzIHRvIG5hdmlnYXRlIHRoZSBtZW51czpcbiIKKyJNb3ZlIHVwIG9yIGRvd24gd2l0
aCA8VXA+IGFuZCA8RG93bj4uXG4iCisiRW50ZXIgYSBzdWJtZW51IHdpdGggPEVudGVyPiBvciA8
UmlnaHQ+LlxuIgorIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJlbnQgbWVudSB3aXRoIDxFc2M+
IG9yIDxMZWZ0Pi5cbiIKKyJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxuPiBleGNsdWRlcywgPG0+
IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxuIgorIlByZXNzaW5nIDxTcGFjZT4gY3ljbGVzIHRocm91
Z2ggdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuIgorIlRvIHNlYXJjaCBmb3IgbWVudSBlbnRyaWVz
IHByZXNzIDwvPi5cbiIKKyI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBjdXJyZW50IHdpbmRvdy5c
biIKKyJcbiIKKyJZb3UgZG8gbm90IGhhdmUgZnVuY3Rpb24ga2V5cyBzdXBwb3J0LlxuIgorIlBy
ZXNzIDwxPiBpbnN0ZWFkIG9mIDxGMT4sIDwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiIKKyJG
b3IgdmVyYm9zZSBnbG9iYWwgaGVscCB1c2Uga2V5IDwxPi5cbiIKKyJGb3IgaGVscCByZWxhdGVk
IHRvIHRoZSBjdXJyZW50IG1lbnUgZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiIsCittZW51X2lu
c3RydWN0aW9uc1tdID0KKyJMZWdlbmQ6ICBbKl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+
IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxlLlxuIgorIlN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVk
IGJ5IGEgdHJhaWxpbmcgXCItLS0+XCIsIGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iCisiXG4i
CisiVXNlIHRoZSBmb2xsb3dpbmcga2V5cyB0byBuYXZpZ2F0ZSB0aGUgbWVudXM6XG4iCisiTW92
ZSB1cCBvciBkb3duIHdpdGggPFVwPiBvciA8RG93bj4uXG4iCisiRW50ZXIgYSBzdWJtZW51IHdp
dGggPEVudGVyPiBvciA8UmlnaHQ+LlxuIgorIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJlbnQg
bWVudSB3aXRoIDxFc2M+IG9yIDxMZWZ0Pi5cbiIKKyJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxu
PiBleGNsdWRlcywgPG0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxuIgorIlByZXNzaW5nIDxTcGFj
ZT4gY3ljbGVzIHRocm91Z2ggdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuIgorIlRvIHNlYXJjaCBm
b3IgbWVudSBlbnRyaWVzIHByZXNzIDwvPi5cbiIKKyI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBj
dXJyZW50IHdpbmRvdy5cbiIKKyJcbiIKKyJQcmVzc2luZyA8MT4gbWF5IGJlIHVzZWQgaW5zdGVh
ZCBvZiA8RjE+LCA8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4iCisiRm9yIHZlcmJvc2UgZ2xv
YmFsIGhlbHAgcHJlc3MgPEYxPi5cbiIKKyJGb3IgaGVscCByZWxhdGVkIHRvIHRoZSBjdXJyZW50
IG1lbnUgZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiIsCityYWRpb2xpc3RfaW5zdHJ1Y3Rpb25z
W10gPQorIlByZXNzIDxVcD4sIDxEb3duPiwgPEhvbWU+IG9yIDxFbmQ+IHRvIG5hdmlnYXRlIGEg
cmFkaW9saXN0LCBzZWxlY3RcbiIKKyJ3aXRoIDxTcGFjZT4uXG4iCisiRm9yIGhlbHAgcmVsYXRl
ZCB0byB0aGUgY3VycmVudCBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIgorIkZvciBnbG9iYWwg
aGVscCBwcmVzcyA8RjE+LlxuIiwKK2lucHV0Ym94X2luc3RydWN0aW9uc19pbnRbXSA9CisiUGxl
YXNlIGVudGVyIGEgZGVjaW1hbCB2YWx1ZS5cbiIKKyJGcmFjdGlvbnMgd2lsbCBub3QgYmUgYWNj
ZXB0ZWQuXG4iCisiUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsCitp
bnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQorIlBsZWFzZSBlbnRlciBhIGhleGFkZWNpbWFs
IHZhbHVlLlxuIgorIlByZXNzIDxFbnRlcj4gdG8gYXBwbHksIDxFc2M+IHRvIGNhbmNlbC4iLAor
aW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZ1tdID0KKyJQbGVhc2UgZW50ZXIgYSBzdHJpbmcg
dmFsdWUuXG4iCisiUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsCitz
ZXRtb2RfdGV4dFtdID0KKyJUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiBhbm90aGVyIGZlYXR1cmUg
d2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhXG4iCisibW9kdWxlLiAgQXMgYSByZXN1bHQs
IHRoZSBjdXJyZW50IGZlYXR1cmUgd2lsbCBiZSBidWlsdCBhcyBhIG1vZHVsZSB0b28uIiwKK2xv
YWRfY29uZmlnX3RleHRbXSA9CisiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24g
ZmlsZSB5b3Ugd2lzaCB0byBsb2FkLlxuIgorIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0byByZXN0
b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdSBsYXN0XG4iCisicmV0cmlldmVkLiAgTGVhdmUgZW1w
dHkgdG8gYWJvcnQuIiwKK2xvYWRfY29uZmlnX2hlbHBbXSA9CisiRm9yIHZhcmlvdXMgcmVhc29u
cywgb25lIG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJhbCBkaWZmZXJlbnRcbiIKKyJjb25maWd1cmF0
aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKKyJcbiIKKyJJZiB5b3UgaGF2
ZSBzYXZlZCBhIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gaW4gYSBmaWxlIG90aGVyIHRoYW4gdGhl
XG4iCisiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3Ug
dG8gbG9hZCBhbmQgbW9kaWZ5XG4iCisidGhhdCBjb25maWd1cmF0aW9uLlxuIgorIlxuIgorIkxl
YXZlIGVtcHR5IHRvIGFib3J0LlxuIiwKK3NhdmVfY29uZmlnX3RleHRbXSA9CisiRW50ZXIgYSBm
aWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNhdmVkXG4iCisi
YXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgZW1wdHkgdG8gYWJvcnQuIiwKK3NhdmVfY29uZmlnX2hl
bHBbXSA9CisiRm9yIHZhcmlvdXMgcmVhc29ucywgb25lIG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJh
bCBkaWZmZXJlbnRcbiIKKyJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFj
aGluZS5cbiIKKyJcbiIKKyJFbnRlcmluZyBhIGZpbGUgbmFtZSBoZXJlIHdpbGwgYWxsb3cgeW91
IHRvIGxhdGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKKyJhbmQgdXNlIHRoZSBjdXJyZW50IGNvbmZp
Z3VyYXRpb24gYXMgYW4gYWx0ZXJuYXRlIHRvIHdoYXRldmVyXG4iCisiY29uZmlndXJhdGlvbiBv
cHRpb25zIHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5cbiIKKyJcbiIKKyJMZWF2ZSBl
bXB0eSB0byBhYm9ydC5cbiIsCitzZWFyY2hfaGVscFtdID0KKyJTZWFyY2ggZm9yIHN5bWJvbHMg
KGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgbmFtZXMgQ09ORklHXyopIGFuZCBkaXNwbGF5XG4iCisi
dGhlaXIgcmVsYXRpb25zLiAgUmVndWxhciBleHByZXNzaW9ucyBhcmUgc3VwcG9ydGVkLlxuIgor
IkV4YW1wbGU6ICBTZWFyY2ggZm9yIFwiXkZPT1wiLlxuIgorIlJlc3VsdDpcbiIKKyItLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LVxuIgorIlN5bWJvbDogRk9PIFsgPSBtXVxuIgorIlByb21wdDogRm9vIGJ1cyBpcyB1c2VkIHRv
IGRyaXZlIHRoZSBiYXIgSFdcbiIKKyJEZWZpbmVkIGF0IGRyaXZlcnMvcGNpL0tjb25maWc6NDdc
biIKKyJEZXBlbmRzIG9uOiBYODZfTE9DQUxfQVBJQyAmJiBYODZfSU9fQVBJQyB8fCBJQTY0XG4i
CisiTG9jYXRpb246XG4iCisiICAtPiBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElT
QSlcbiIKKyIgICAgLT4gUENJIHN1cHBvcnQgKFBDSSBbID0geV0pXG4iCisiICAgICAgLT4gUENJ
IGFjY2VzcyBtb2RlICg8Y2hvaWNlPiBbID0geV0pXG4iCisiU2VsZWN0czogTElCQ1JDMzJcbiIK
KyJTZWxlY3RlZCBieTogQkFSXG4iCisiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJvICBUaGUgbGluZSAnUHJvbXB0
Oicgc2hvd3MgdGhlIHRleHQgZGlzcGxheWVkIGZvciB0aGlzIHN5bWJvbCBpblxuIgorIiAgIHRo
ZSBtZW51IGhpZXJhcmNoeS5cbiIKKyJvICBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQg
d2hhdCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbCBpc1xuIgorIiAgIGRlZmluZWQuXG4i
CisibyAgVGhlICdEZXBlbmRzIG9uOicgbGluZSBsaXN0cyBzeW1ib2xzIHRoYXQgbmVlZCB0byBi
ZSBkZWZpbmVkIGZvclxuIgorIiAgIHRoaXMgc3ltYm9sIHRvIGJlIHZpc2libGUgYW5kIHNlbGVj
dGFibGUgaW4gdGhlIG1lbnUuXG4iCisibyAgVGhlICdMb2NhdGlvbjonIGxpbmVzIHRlbGwsIHdo
ZXJlIGluIHRoZSBtZW51IHN0cnVjdHVyZSB0aGlzIHN5bWJvbFxuIgorIiAgIGlzIGxvY2F0ZWQu
ICBBIGxvY2F0aW9uIGZvbGxvd2VkIGJ5IGEgWyA9IHldIGluZGljYXRlcyB0aGF0IHRoaXMgaXNc
biIKKyIgICBhIHNlbGVjdGFibGUgbWVudSBpdGVtLCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMg
ZGlzcGxheWVkIGluc2lkZVxuIgorIiAgIGJyYWNrZXRzLlxuIgorIm8gIFRoZSAnU2VsZWN0czon
IGxpbmUgdGVsbHMsIHdoYXQgc3ltYm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZFxu
IgorIiAgIGlmIHRoaXMgc3ltYm9sIGlzIHNlbGVjdGVkICh5IG9yIG0pLlxuIgorIm8gIFRoZSAn
U2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVkIHRoaXMgc3lt
Ym9sLlxuIgorIlxuIgorIk9ubHkgcmVsZXZhbnQgbGluZXMgYXJlIHNob3duLlxuIgorIlxuXG4i
CisiU2VhcmNoIGV4YW1wbGVzOlxuIgorIlVTQiAgPT4gZmluZCBhbGwgc3ltYm9scyBjb250YWlu
aW5nIFVTQlxuIgorIl5VU0IgPT4gZmluZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxu
IgorIlVTQiQgPT4gZmluZCBhbGwgc3ltYm9scyBlbmRpbmcgd2l0aCBVU0JcbiIKKyJcbiI7CisK
K3N0cnVjdCBtaXRlbSB7CisJY2hhciBzdHJbMjU2XTsKKwljaGFyIHRhZzsKKwl2b2lkICp1c3Jw
dHI7CisJaW50IGlzX3Zpc2libGU7Cit9OworCisjZGVmaW5lIE1BWF9NRU5VX0lURU1TIDQwOTYK
K3N0YXRpYyBpbnQgc2hvd19hbGxfaXRlbXM7CitzdGF0aWMgaW50IGluZGVudDsKK3N0YXRpYyBz
dHJ1Y3QgbWVudSAqY3VycmVudF9tZW51Oworc3RhdGljIGludCBjaGlsZF9jb3VudDsKK3N0YXRp
YyBpbnQgc2luZ2xlX21lbnVfbW9kZTsKKy8qIHRoZSB3aW5kb3cgaW4gd2hpY2ggYWxsIGluZm9y
bWF0aW9uIGFwcGVhcnMgKi8KK3N0YXRpYyBXSU5ET1cgKm1haW5fd2luZG93OworLyogdGhlIGxh
cmdlc3Qgc2l6ZSBvZiB0aGUgbWVudSB3aW5kb3cgKi8KK3N0YXRpYyBpbnQgbXdpbl9tYXhfbGlu
ZXM7CitzdGF0aWMgaW50IG13aW5fbWF4X2NvbHM7CisvKiB0aGUgd2luZG93IGluIHdoaWNoIHdl
IHNob3cgb3B0aW9uIGJ1dHRvbnMgKi8KK3N0YXRpYyBNRU5VICpjdXJzZXNfbWVudTsKK3N0YXRp
YyBJVEVNICpjdXJzZXNfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107CitzdGF0aWMgc3RydWN0
IG1pdGVtIGtfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107CitzdGF0aWMgaW50IGl0ZW1zX251
bTsKK3N0YXRpYyBpbnQgZ2xvYmFsX2V4aXQ7CisvKiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJ1
dHRvbiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gbWVudV9p
bnN0cnVjdGlvbnM7CisKK3N0YXRpYyBjaGFyICpkaWFsb2dfaW5wdXRfcmVzdWx0Oworc3RhdGlj
IGludCBkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbjsKKworc3RhdGljIHZvaWQgY29uZihzdHJ1Y3Qg
bWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7
CitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9p
ZCBjb25mX2xvYWQodm9pZCk7CitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7CitzdGF0aWMg
dm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIGludCBkb19leGl0KHZv
aWQpOworc3RhdGljIHZvaWQgc2V0dXBfd2luZG93cyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNlYXJj
aF9jb25mKHZvaWQpOworCit0eXBlZGVmIHZvaWQgKCpmdW5jdGlvbl9rZXlfaGFuZGxlcl90KShp
bnQgKmtleSwgc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIHZvaWQgaGFuZGxlX2YxKGludCAq
a2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mMihp
bnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9pZCBoYW5kbGVf
ZjMoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGljIHZvaWQgaGFu
ZGxlX2Y0KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lk
IGhhbmRsZV9mNShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMg
dm9pZCBoYW5kbGVfZjYoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3Rh
dGljIHZvaWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsK
K3N0YXRpYyB2b2lkIGhhbmRsZV9mOChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRl
bSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjkoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50
X2l0ZW0pOworCitzdHJ1Y3QgZnVuY3Rpb25fa2V5cyB7CisJY29uc3QgY2hhciAqa2V5X3N0cjsK
Kwljb25zdCBjaGFyICpmdW5jOworCWZ1bmN0aW9uX2tleSBrZXk7CisJZnVuY3Rpb25fa2V5X2hh
bmRsZXJfdCBoYW5kbGVyOworfTsKKworc3RhdGljIGNvbnN0IGludCBmdW5jdGlvbl9rZXlzX251
bSA9IDk7CitzdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2tleXMgZnVuY3Rpb25fa2V5c1tdID0gewor
CXsKKwkJLmtleV9zdHIgPSAiRjEiLAorCQkuZnVuYyA9ICJIZWxwIiwKKwkJLmtleSA9IEZfSEVM
UCwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjEsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkYyIiwK
KwkJLmZ1bmMgPSAiU3ltSW5mbyIsCisJCS5rZXkgPSBGX1NZTUJPTCwKKwkJLmhhbmRsZXIgPSBo
YW5kbGVfZjIsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkYzIiwKKwkJLmZ1bmMgPSAiSGVscCAy
IiwKKwkJLmtleSA9IEZfSU5TVFMsCisJCS5oYW5kbGVyID0gaGFuZGxlX2YzLAorCX0sCisJewor
CQkua2V5X3N0ciA9ICJGNCIsCisJCS5mdW5jID0gIlNob3dBbGwiLAorCQkua2V5ID0gRl9DT05G
LAorCQkuaGFuZGxlciA9IGhhbmRsZV9mNCwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjUiLAor
CQkuZnVuYyA9ICJCYWNrIiwKKwkJLmtleSA9IEZfQkFDSywKKwkJLmhhbmRsZXIgPSBoYW5kbGVf
ZjUsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY2IiwKKwkJLmZ1bmMgPSAiU2F2ZSIsCisJCS5r
ZXkgPSBGX1NBVkUsCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y2LAorCX0sCisJeworCQkua2V5X3N0
ciA9ICJGNyIsCisJCS5mdW5jID0gIkxvYWQiLAorCQkua2V5ID0gRl9MT0FELAorCQkuaGFuZGxl
ciA9IGhhbmRsZV9mNywKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjgiLAorCQkuZnVuYyA9ICJT
eW1TZWFyY2giLAorCQkua2V5ID0gRl9TRUFSQ0gsCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y4LAor
CX0sCisJeworCQkua2V5X3N0ciA9ICJGOSIsCisJCS5mdW5jID0gIkV4aXQiLAorCQkua2V5ID0g
Rl9FWElULAorCQkuaGFuZGxlciA9IGhhbmRsZV9mOSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQg
cHJpbnRfZnVuY3Rpb25fbGluZSh2b2lkKQoreworCWludCBpOworCWludCBvZmZzZXQgPSAxOwor
CWNvbnN0IGludCBza2lwID0gMTsKKwlpbnQgbGluZXMgPSBnZXRtYXh5KHN0ZHNjcik7CisKKwlm
b3IgKGkgPSAwOyBpIDwgZnVuY3Rpb25fa2V5c19udW07IGkrKykgeworCQkodm9pZCkgd2F0dHJz
ZXQobWFpbl93aW5kb3csIGF0dHJpYnV0ZXNbRlVOQ1RJT05fSElHSExJR0hUXSk7CisJCW12d3By
aW50dyhtYWluX3dpbmRvdywgbGluZXMtMywgb2Zmc2V0LAorCQkJCSIlcyIsCisJCQkJZnVuY3Rp
b25fa2V5c1tpXS5rZXlfc3RyKTsKKwkJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRy
aWJ1dGVzW0ZVTkNUSU9OX1RFWFRdKTsKKwkJb2Zmc2V0ICs9IHN0cmxlbihmdW5jdGlvbl9rZXlz
W2ldLmtleV9zdHIpOworCQltdndwcmludHcobWFpbl93aW5kb3csIGxpbmVzLTMsCisJCQkJb2Zm
c2V0LCAiJXMiLAorCQkJCWZ1bmN0aW9uX2tleXNbaV0uZnVuYyk7CisJCW9mZnNldCArPSBzdHJs
ZW4oZnVuY3Rpb25fa2V5c1tpXS5mdW5jKSArIHNraXA7CisJfQorCSh2b2lkKSB3YXR0cnNldCht
YWluX3dpbmRvdywgYXR0cmlidXRlc1tOT1JNQUxdKTsKK30KKworLyogaGVscCAqLworc3RhdGlj
IHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQorewor
CXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywKKwkJCSJHbG9iYWwgaGVscCIsIG5jb25mX2ds
b2JhbF9oZWxwKTsKKwlyZXR1cm47Cit9CisKKy8qIHN5bWJvbGUgaGVscCAqLworc3RhdGljIHZv
aWQgaGFuZGxlX2YyKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCXNo
b3dfaGVscChjdXJyZW50X2l0ZW0pOworCXJldHVybjsKK30KKworLyogaW5zdHJ1Y3Rpb25zICov
CitzdGF0aWMgdm9pZCBoYW5kbGVfZjMoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0
ZW0pCit7CisJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJIlNob3J0IGhlbHAiLAor
CQkJY3VycmVudF9pbnN0cnVjdGlvbnMpOworCXJldHVybjsKK30KKworLyogY29uZmlnICovCitz
dGF0aWMgdm9pZCBoYW5kbGVfZjQoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0p
Cit7CisJaW50IHJlcyA9IGJ0bl9kaWFsb2cobWFpbl93aW5kb3csCisJCQkiU2hvdyBhbGwgc3lt
Ym9scz8iLAorCQkJMiwKKwkJCSIgICA8U2hvdyBBbGw+ICAgIiwKKwkJCSI8RG9uJ3Qgc2hvdyBh
bGw+Iik7CisJaWYgKHJlcyA9PSAwKQorCQlzaG93X2FsbF9pdGVtcyA9IDE7CisJZWxzZSBpZiAo
cmVzID09IDEpCisJCXNob3dfYWxsX2l0ZW1zID0gMDsKKworCXJldHVybjsKK30KKworLyogYmFj
ayAqLworc3RhdGljIHZvaWQgaGFuZGxlX2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9pdGVtKQoreworCSprZXkgPSBLRVlfTEVGVDsKKwlyZXR1cm47Cit9CisKKy8qIHNhdmUgKi8K
K3N0YXRpYyB2b2lkIGhhbmRsZV9mNihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRl
bSkKK3sKKwljb25mX3NhdmUoKTsKKwlyZXR1cm47Cit9CisKKy8qIGxvYWQgKi8KK3N0YXRpYyB2
b2lkIGhhbmRsZV9mNyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlj
b25mX2xvYWQoKTsKKwlyZXR1cm47Cit9CisKKy8qIHNlYXJjaCAqLworc3RhdGljIHZvaWQgaGFu
ZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQoreworCXNlYXJjaF9j
b25mKCk7CisJcmV0dXJuOworfQorCisvKiBleGl0ICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZjko
aW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJZG9fZXhpdCgpOworCXJl
dHVybjsKK30KKworLyogcmV0dXJuICE9IDAgdG8gaW5kaWNhdGUgdGhlIGtleSB3YXMgaGFuZGxl
cyAqLworc3RhdGljIGludCBwcm9jZXNzX3NwZWNpYWxfa2V5cyhpbnQgKmtleSwgc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJaW50IGk7CisKKwlpZiAoKmtleSA9PSBLRVlfUkVTSVpFKSB7CisJCXNl
dHVwX3dpbmRvd3MoKTsKKwkJcmV0dXJuIDE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGZ1bmN0
aW9uX2tleXNfbnVtOyBpKyspIHsKKwkJaWYgKCprZXkgPT0gS0VZX0YoZnVuY3Rpb25fa2V5c1tp
XS5rZXkpIHx8CisJCSAgICAqa2V5ID09ICcwJyArIGZ1bmN0aW9uX2tleXNbaV0ua2V5KXsKKwkJ
CWZ1bmN0aW9uX2tleXNbaV0uaGFuZGxlcihrZXksIG1lbnUpOworCQkJcmV0dXJuIDE7CisJCX0K
Kwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2xlYW5faXRlbXModm9pZCkKK3sK
KwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBjdXJzZXNfbWVudV9pdGVtc1tpXTsgaSsrKQorCQlmcmVl
X2l0ZW0oY3Vyc2VzX21lbnVfaXRlbXNbaV0pOworCWJ6ZXJvKGN1cnNlc19tZW51X2l0ZW1zLCBz
aXplb2YoY3Vyc2VzX21lbnVfaXRlbXMpKTsKKwliemVybyhrX21lbnVfaXRlbXMsIHNpemVvZihr
X21lbnVfaXRlbXMpKTsKKwlpdGVtc19udW0gPSAwOworfQorCit0eXBlZGVmIGVudW0ge01BVENI
X1RJTktFUl9QQVRURVJOX1VQLCBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLAorCUZJTkRfTkVY
VF9NQVRDSF9ET1dOLCBGSU5EX05FWFRfTUFUQ0hfVVB9IG1hdGNoX2Y7CisKKy8qIHJldHVybiB0
aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgaXRlbSwgb3IgLTEgaWYgbm8gc3VjaCBpdGVtIGV4aXN0
cyAqLworc3RhdGljIGludCBnZXRfbWV4dF9tYXRjaChjb25zdCBjaGFyICptYXRjaF9zdHIsIG1h
dGNoX2YgZmxhZykKK3sKKwlpbnQgbWF0Y2hfc3RhcnQgPSBpdGVtX2luZGV4KGN1cnJlbnRfaXRl
bShjdXJzZXNfbWVudSkpOworCWludCBpbmRleDsKKworCWlmIChmbGFnID09IEZJTkRfTkVYVF9N
QVRDSF9ET1dOKQorCQkrK21hdGNoX3N0YXJ0OworCWVsc2UgaWYgKGZsYWcgPT0gRklORF9ORVhU
X01BVENIX1VQKQorCQktLW1hdGNoX3N0YXJ0OworCisJaW5kZXggPSBtYXRjaF9zdGFydDsKKwlp
bmRleCA9IChpbmRleCArIGl0ZW1zX251bSkgJSBpdGVtc19udW07CisJd2hpbGUgKHRydWUpIHsK
KwkJY2hhciAqc3RyID0ga19tZW51X2l0ZW1zW2luZGV4XS5zdHI7CisJCWlmIChzdHJjYXNlc3Ry
KHN0ciwgbWF0Y2hfc3RyKSAhPSBOVUxMKQorCQkJcmV0dXJuIGluZGV4OworCQlpZiAoZmxhZyA9
PSBGSU5EX05FWFRfTUFUQ0hfVVAgfHwKKwkJICAgIGZsYWcgPT0gTUFUQ0hfVElOS0VSX1BBVFRF
Uk5fVVApCisJCQktLWluZGV4OworCQllbHNlCisJCQkrK2luZGV4OworCQlpbmRleCA9IChpbmRl
eCArIGl0ZW1zX251bSkgJSBpdGVtc19udW07CisJCWlmIChpbmRleCA9PSBtYXRjaF9zdGFydCkK
KwkJCXJldHVybiAtMTsKKwl9Cit9CisKKy8qIE1ha2UgYSBuZXcgaXRlbS4gKi8KK3N0YXRpYyB2
b2lkIGl0ZW1fbWFrZShzdHJ1Y3QgbWVudSAqbWVudSwgY2hhciB0YWcsIGNvbnN0IGNoYXIgKmZt
dCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlpZiAoaXRlbXNfbnVtID4gTUFYX01FTlVfSVRF
TVMtMSkKKwkJcmV0dXJuOworCisJYnplcm8oJmtfbWVudV9pdGVtc1tpdGVtc19udW1dLCBzaXpl
b2Yoa19tZW51X2l0ZW1zWzBdKSk7CisJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0udGFnID0gdGFn
OworCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLnVzcnB0ciA9IG1lbnU7CisJaWYgKG1lbnUgIT0g
TlVMTCkKKwkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uaXNfdmlzaWJsZSA9CisJCQltZW51X2lz
X3Zpc2libGUobWVudSk7CisJZWxzZQorCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNp
YmxlID0gMTsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihrX21lbnVfaXRlbXNb
aXRlbXNfbnVtXS5zdHIsCisJCSAgc2l6ZW9mKGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciks
CisJCSAgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKworCWlmICgha19tZW51X2l0ZW1zW2l0ZW1z
X251bV0uaXNfdmlzaWJsZSkKKwkJbWVtY3B5KGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciwg
IlhYWCIsIDMpOworCisJY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSA9IG5ld19pdGVtKAor
CQkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyLAorCQkJa19tZW51X2l0ZW1zW2l0ZW1zX251
bV0uc3RyKTsKKwlzZXRfaXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0ZW1zW2l0ZW1zX251bV0s
CisJCQkma19tZW51X2l0ZW1zW2l0ZW1zX251bV0pOworCS8qCisJaWYgKCFrX21lbnVfaXRlbXNb
aXRlbXNfbnVtXS5pc192aXNpYmxlKQorCQlpdGVtX29wdHNfb2ZmKGN1cnNlc19tZW51X2l0ZW1z
W2l0ZW1zX251bV0sIE9fU0VMRUNUQUJMRSk7CisJKi8KKworCWl0ZW1zX251bSsrOworCWN1cnNl
c19tZW51X2l0ZW1zW2l0ZW1zX251bV0gPSBOVUxMOworfQorCisvKiB2ZXJ5IGhhY2tpc2guIGFk
ZHMgYSBzdHJpbmcgdG8gdGhlIGxhc3QgaXRlbSBhZGRlZCAqLworc3RhdGljIHZvaWQgaXRlbV9h
ZGRfc3RyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJaW50IGluZGV4
ID0gaXRlbXNfbnVtLTE7CisJY2hhciBuZXdfc3RyWzI1Nl07CisJY2hhciB0bXBfc3RyWzI1Nl07
CisKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm47CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2
c25wcmludGYobmV3X3N0ciwgc2l6ZW9mKG5ld19zdHIpLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXAp
OworCXNucHJpbnRmKHRtcF9zdHIsIHNpemVvZih0bXBfc3RyKSwgIiVzJXMiLAorCQkJa19tZW51
X2l0ZW1zW2luZGV4XS5zdHIsIG5ld19zdHIpOworCXN0cm5jcHkoa19tZW51X2l0ZW1zW2luZGV4
XS5zdHIsCisJCXRtcF9zdHIsCisJCXNpemVvZihrX21lbnVfaXRlbXNbaW5kZXhdLnN0cikpOwor
CisJZnJlZV9pdGVtKGN1cnNlc19tZW51X2l0ZW1zW2luZGV4XSk7CisJY3Vyc2VzX21lbnVfaXRl
bXNbaW5kZXhdID0gbmV3X2l0ZW0oCisJCQlrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwKKwkJCWtf
bWVudV9pdGVtc1tpbmRleF0uc3RyKTsKKwlzZXRfaXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0
ZW1zW2luZGV4XSwKKwkJCSZrX21lbnVfaXRlbXNbaW5kZXhdKTsKK30KKworLyogZ2V0IHRoZSB0
YWcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtICovCitzdGF0aWMgY2hhciBpdGVtX3Rh
Zyh2b2lkKQoreworCUlURU0gKmN1cjsKKwlzdHJ1Y3QgbWl0ZW0gKm1jdXI7CisKKwljdXIgPSBj
dXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpOworCWlmIChjdXIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7
CisJbWN1ciA9IChzdHJ1Y3QgbWl0ZW0gKikgaXRlbV91c2VycHRyKGN1cik7CisJcmV0dXJuIG1j
dXItPnRhZzsKK30KKworc3RhdGljIGludCBjdXJzZXNfaXRlbV9pbmRleCh2b2lkKQoreworCXJl
dHVybiAgaXRlbV9pbmRleChjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpKTsKK30KKworc3RhdGlj
IHZvaWQgKml0ZW1fZGF0YSh2b2lkKQoreworCUlURU0gKmN1cjsKKwlzdHJ1Y3QgbWl0ZW0gKm1j
dXI7CisKKwljdXIgPSBjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpOworCWlmICghY3VyKQorCQly
ZXR1cm4gTlVMTDsKKwltY3VyID0gKHN0cnVjdCBtaXRlbSAqKSBpdGVtX3VzZXJwdHIoY3VyKTsK
KwlyZXR1cm4gbWN1ci0+dXNycHRyOworCit9CisKK3N0YXRpYyBpbnQgaXRlbV9pc190YWcoY2hh
ciB0YWcpCit7CisJcmV0dXJuIGl0ZW1fdGFnKCkgPT0gdGFnOworfQorCitzdGF0aWMgY2hhciBm
aWxlbmFtZVtQQVRIX01BWCsxXTsKK3N0YXRpYyBjaGFyIG1lbnVfYmFja3RpdGxlW1BBVEhfTUFY
KzEyOF07CitzdGF0aWMgY29uc3QgY2hhciAqc2V0X2NvbmZpZ19maWxlbmFtZShjb25zdCBjaGFy
ICpjb25maWdfZmlsZW5hbWUpCit7CisJaW50IHNpemU7CisKKwlzaXplID0gc25wcmludGYobWVu
dV9iYWNrdGl0bGUsIHNpemVvZihtZW51X2JhY2t0aXRsZSksCisJCQkiJXMgLSAlcyIsIGNvbmZp
Z19maWxlbmFtZSwgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKKwlpZiAoc2l6ZSA+PSBzaXplb2Yo
bWVudV9iYWNrdGl0bGUpKQorCQltZW51X2JhY2t0aXRsZVtzaXplb2YobWVudV9iYWNrdGl0bGUp
LTFdID0gJ1wwJzsKKworCXNpemUgPSBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1l
KSwgIiVzIiwgY29uZmlnX2ZpbGVuYW1lKTsKKwlpZiAoc2l6ZSA+PSBzaXplb2YoZmlsZW5hbWUp
KQorCQlmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gJ1wwJzsKKwlyZXR1cm4gbWVudV9i
YWNrdGl0bGU7Cit9CisKKy8qIHJldHVybiA9IDAgbWVhbnMgd2UgYXJlIHN1Y2Nlc3NmdWwuCisg
KiAtMSBtZWFucyBnbyBvbiBkb2luZyB3aGF0IHlvdSB3ZXJlIGRvaW5nCisgKi8KK3N0YXRpYyBp
bnQgZG9fZXhpdCh2b2lkKQoreworCWludCByZXM7CisJaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkp
IHsKKwkJZ2xvYmFsX2V4aXQgPSAxOworCQlyZXR1cm4gMDsKKwl9CisJcmVzID0gYnRuX2RpYWxv
ZyhtYWluX3dpbmRvdywKKwkJCSJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3Vy
YXRpb24/XG4iCisJCQkJIjxFU0M+IHRvIGNhbmNlbCBhbmQgcmVzdW1lIG5jb25maWcuIiwKKwkJ
CTIsCisJCQkiICAgPHNhdmU+ICAgIiwKKwkJCSI8ZG9uJ3Qgc2F2ZT4iKTsKKwlpZiAocmVzID09
IEtFWV9FWElUKSB7CisJCWdsb2JhbF9leGl0ID0gMDsKKwkJcmV0dXJuIC0xOworCX0KKworCS8q
IGlmIHdlIGdvdCBoZXJlLCB0aGUgdXNlciByZWFsbHkgd2FudHMgdG8gZXhpdCAqLworCXN3aXRj
aCAocmVzKSB7CisJY2FzZSAwOgorCQlyZXMgPSBjb25mX3dyaXRlKGZpbGVuYW1lKTsKKwkJaWYg
KHJlcykKKwkJCWJ0bl9kaWFsb2coCisJCQkJbWFpbl93aW5kb3csCisJCQkJIkVycm9yIGR1cmlu
ZyB3cml0aW5nIG9mIGNvbmZpZ3VyYXRpb24uXG4iCisJCQkJICAiWW91ciBjb25maWd1cmF0aW9u
IGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIiwKKwkJCQkgIDEsCisJCQkJICAiPE9LPiIpOworCQlj
b25mX3dyaXRlX2F1dG9jb25mKDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlidG5fZGlhbG9n
KAorCQkJbWFpbl93aW5kb3csCisJCQkiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBO
T1Qgc2F2ZWQuIiwKKwkJCTEsCisJCQkiPE9LPiIpOworCQlicmVhazsKKwl9CisJZ2xvYmFsX2V4
aXQgPSAxOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQp
Cit7CisJc3RydWN0IHN5bWJvbCAqKnN5bV9hcnI7CisJc3RydWN0IGdzdHIgcmVzOworCXN0cnVj
dCBnc3RyIHRpdGxlOworCWNoYXIgKmRpYWxvZ19pbnB1dDsKKwlpbnQgZHJlczsKKworCXRpdGxl
ID0gc3RyX25ldygpOworCXN0cl9wcmludGYoICZ0aXRsZSwgIkVudGVyIChzdWIpc3RyaW5nIG9y
IHJlZ2V4cCB0byBzZWFyY2ggZm9yICIKKwkJCSAgICAgICIod2l0aCBvciB3aXRob3V0IFwiJXNc
IikiLCBDT05GSUdfKTsKKworYWdhaW46CisJZHJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dp
bmRvdywKKwkJCSJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiLAorCQkJc3RyX2dldCgm
dGl0bGUpLAorCQkJIiIsICZkaWFsb2dfaW5wdXRfcmVzdWx0LCAmZGlhbG9nX2lucHV0X3Jlc3Vs
dF9sZW4pOworCXN3aXRjaCAoZHJlcykgeworCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgor
CQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJIlNlYXJjaCBDb25maWd1cmF0aW9u
Iiwgc2VhcmNoX2hlbHApOworCQlnb3RvIGFnYWluOworCWRlZmF1bHQ6CisJCXN0cl9mcmVlKCZ0
aXRsZSk7CisJCXJldHVybjsKKwl9CisKKwkvKiBzdHJpcCB0aGUgcHJlZml4IGlmIG5lY2Vzc2Fy
eSAqLworCWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7CisJaWYgKHN0cm5jYXNl
Y21wKGRpYWxvZ19pbnB1dF9yZXN1bHQsIENPTkZJR18sIHN0cmxlbihDT05GSUdfKSkgPT0gMCkK
KwkJZGlhbG9nX2lucHV0ICs9IHN0cmxlbihDT05GSUdfKTsKKworCXN5bV9hcnIgPSBzeW1fcmVf
c2VhcmNoKGRpYWxvZ19pbnB1dCk7CisJcmVzID0gZ2V0X3JlbGF0aW9uc19zdHIoc3ltX2Fyciwg
TlVMTCk7CisJZnJlZShzeW1fYXJyKTsKKwlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJ
CQkiU2VhcmNoIFJlc3VsdHMiLCBzdHJfZ2V0KCZyZXMpKTsKKwlzdHJfZnJlZSgmcmVzKTsKKwlz
dHJfZnJlZSgmdGl0bGUpOworfQorCisKK3N0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJv
cDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOworCXRy
aXN0YXRlIHZhbDsKKwljaGFyIGNoOworCisJaWYgKCFtZW51IHx8ICghc2hvd19hbGxfaXRlbXMg
JiYgIW1lbnVfaXNfdmlzaWJsZShtZW51KSkpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5
bTsKKwlwcm9wID0gbWVudS0+cHJvbXB0OworCWlmICghc3ltKSB7CisJCWlmIChwcm9wICYmIG1l
bnUgIT0gY3VycmVudF9tZW51KSB7CisJCQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9w
cm9tcHQobWVudSk7CisJCQllbnVtIHByb3BfdHlwZSBwdHlwZTsKKwkJCXB0eXBlID0gbWVudS0+
cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCQkJc3dpdGNoIChwdHlw
ZSkgeworCQkJY2FzZSBQX01FTlU6CisJCQkJY2hpbGRfY291bnQrKzsKKwkJCQlwcm9tcHQgPSBw
cm9tcHQ7CisJCQkJaWYgKHNpbmdsZV9tZW51X21vZGUpIHsKKwkJCQkJaXRlbV9tYWtlKG1lbnUs
ICdtJywKKwkJCQkJCSIlcyUqYyVzIiwKKwkJCQkJCW1lbnUtPmRhdGEgPyAiLS0+IiA6ICIrKz4i
LAorCQkJCQkJaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOworCQkJCX0gZWxzZQorCQkJCQlpdGVt
X21ha2UobWVudSwgJ20nLAorCQkJCQkJICAiICAgJSpjJXMgICVzIiwKKwkJCQkJCSAgaW5kZW50
ICsgMSwgJyAnLCBwcm9tcHQsCisJCQkJCQkgIG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0tLSIg
OiAiLS0tPiIpOworCisJCQkJaWYgKHNpbmdsZV9tZW51X21vZGUgJiYgbWVudS0+ZGF0YSkKKwkJ
CQkJZ290byBjb25mX2NoaWxkczsKKwkJCQlyZXR1cm47CisJCQljYXNlIFBfQ09NTUVOVDoKKwkJ
CQlpZiAocHJvbXB0KSB7CisJCQkJCWNoaWxkX2NvdW50Kys7CisJCQkJCWl0ZW1fbWFrZShtZW51
LCAnOicsCisJCQkJCQkiICAgJSpjKioqICVzICoqKiIsCisJCQkJCQlpbmRlbnQgKyAxLCAnICcs
CisJCQkJCQlwcm9tcHQpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJaWYg
KHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2UobWVudSwgJzon
LCAiLS0tJSpjJXMiLAorCQkJCQkJaW5kZW50ICsgMSwgJyAnLAorCQkJCQkJcHJvbXB0KTsKKwkJ
CQl9CisJCQl9CisJCX0gZWxzZQorCQkJZG9pbnQgPSAwOworCQlnb3RvIGNvbmZfY2hpbGRzOwor
CX0KKworCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0p
KSB7CisJCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0p
OworCQlzdHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOworCisJCWNoaWxkX2NvdW50Kys7CisJ
CWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgewor
CQkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQor
CQkJCWRlZl9tZW51ID0gY2hpbGQ7CisJCX0KKworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSk7CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJCXN3aXRjaCAodHlw
ZSkgeworCQkJY2FzZSBTX0JPT0xFQU46CisJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIlslY10i
LAorCQkJCQkJdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19U
UklTVEFURToKKwkJCQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOgorCQkJCQljaCA9ICcq
JzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBtb2Q6CisJCQkJCWNoID0gJ00nOworCQkJCQlicmVh
azsKKwkJCQlkZWZhdWx0OgorCQkJCQljaCA9ICcgJzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
CWl0ZW1fbWFrZShtZW51LCAndCcsICI8JWM+IiwgY2gpOworCQkJCWJyZWFrOworCQkJfQorCQl9
IGVsc2UgeworCQkJaXRlbV9tYWtlKG1lbnUsIGRlZl9tZW51ID8gJ3QnIDogJzonLCAiICAgIik7
CisJCX0KKworCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwKKwkJCQknICcsIG1l
bnVfZ2V0X3Byb21wdChtZW51KSk7CisJCWlmICh2YWwgPT0geWVzKSB7CisJCQlpZiAoZGVmX21l
bnUpIHsKKwkJCQlpdGVtX2FkZF9zdHIoIiAoJXMpIiwKKwkJCQkJbWVudV9nZXRfcHJvbXB0KGRl
Zl9tZW51KSk7CisJCQkJaXRlbV9hZGRfc3RyKCIgIC0tLT4iKTsKKwkJCQlpZiAoZGVmX21lbnUt
Pmxpc3QpIHsKKwkJCQkJaW5kZW50ICs9IDI7CisJCQkJCWJ1aWxkX2NvbmYoZGVmX21lbnUpOwor
CQkJCQlpbmRlbnQgLT0gMjsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm47CisJCX0KKwl9IGVsc2Ug
eworCQlpZiAobWVudSA9PSBjdXJyZW50X21lbnUpIHsKKwkJCWl0ZW1fbWFrZShtZW51LCAnOics
CisJCQkJIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwKKwkJCQknICcsIG1lbnVfZ2V0X3Byb21wdCht
ZW51KSk7CisJCQlnb3RvIGNvbmZfY2hpbGRzOworCQl9CisJCWNoaWxkX2NvdW50Kys7CisJCXZh
bCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9pc19jaG9pY2VfdmFs
dWUoc3ltKSAmJiB2YWwgPT0geWVzKSB7CisJCQlpdGVtX21ha2UobWVudSwgJzonLCAiICAgIik7
CisJCX0gZWxzZSB7CisJCQlzd2l0Y2ggKHR5cGUpIHsKKwkJCWNhc2UgU19CT09MRUFOOgorCQkJ
CWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpCisJCQkJCWl0ZW1fbWFrZShtZW51LCAndCcsICJb
JWNdIiwKKwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJZWxzZQorCQkJCQlpdGVt
X21ha2UobWVudSwgJ3QnLCAiLSVjLSIsCisJCQkJCQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOwor
CQkJCWJyZWFrOworCQkJY2FzZSBTX1RSSVNUQVRFOgorCQkJCXN3aXRjaCAodmFsKSB7CisJCQkJ
Y2FzZSB5ZXM6CisJCQkJCWNoID0gJyonOworCQkJCQlicmVhazsKKwkJCQljYXNlIG1vZDoKKwkJ
CQkJY2ggPSAnTSc7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNoID0gJyAnOwor
CQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQkJ
CQlpZiAoc3ltLT5yZXZfZGVwLnRyaSA9PSBtb2QpCisJCQkJCQlpdGVtX21ha2UobWVudSwKKwkJ
CQkJCQkndCcsICJ7JWN9IiwgY2gpOworCQkJCQllbHNlCisJCQkJCQlpdGVtX21ha2UobWVudSwK
KwkJCQkJCQkndCcsICI8JWM+IiwgY2gpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21ha2UobWVu
dSwgJ3QnLCAiLSVjLSIsIGNoKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wID0g
MiArIHN0cmxlbihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKKwkJCQlpdGVtX21ha2UobWVu
dSwgJ3MnLCAiICAgICglcykiLAorCQkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJ
CQkJdG1wID0gaW5kZW50IC0gdG1wICsgNDsKKwkJCQlpZiAodG1wIDwgMCkKKwkJCQkJdG1wID0g
MDsKKwkJCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCB0bXAsICcgJywKKwkJCQkJCW1lbnVfZ2V0
X3Byb21wdChtZW51KSwKKwkJCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwKKwkJCQkJCSAhc3lt
X2lzX2NoYW5nYWJsZShzeW0pKSA/ICIiIDoKKwkJCQkJCSIgKE5FVykiKTsKKwkJCQlnb3RvIGNv
bmZfY2hpbGRzOworCQkJfQorCQl9CisJCWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIGluZGVudCAr
IDEsICcgJywKKwkJCQltZW51X2dldF9wcm9tcHQobWVudSksCisJCQkJKHN5bV9oYXNfdmFsdWUo
c3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/CisJCQkJIiIgOiAiIChORVcpIik7CisJ
CWlmIChtZW51LT5wcm9tcHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgeworCQkJ
aXRlbV9hZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+
Iik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKK2NvbmZfY2hpbGRzOgorCWluZGVudCArPSBkb2lu
dDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQp
CisJCWJ1aWxkX2NvbmYoY2hpbGQpOworCWluZGVudCAtPSBkb2ludDsKK30KKworc3RhdGljIHZv
aWQgcmVzZXRfbWVudSh2b2lkKQoreworCXVucG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwljbGVh
bl9pdGVtcygpOworfQorCisvKiBhZGp1c3QgdGhlIG1lbnUgdG8gc2hvdyB0aGlzIGl0ZW0uCisg
KiBwcmVmZXIgbm90IHRvIHNjcm9sbCB0aGUgbWVudSBpZiBwb3NzaWJsZSovCitzdGF0aWMgdm9p
ZCBjZW50ZXJfaXRlbShpbnQgc2VsZWN0ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQorewor
CWludCB0b3Byb3c7CisKKwlzZXRfdG9wX3JvdyhjdXJzZXNfbWVudSwgKmxhc3RfdG9wX3Jvdyk7
CisJdG9wcm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7CisJaWYgKHNlbGVjdGVkX2luZGV4IDwg
dG9wcm93IHx8CisJICAgIHNlbGVjdGVkX2luZGV4ID49IHRvcHJvdyttd2luX21heF9saW5lcykg
eworCQl0b3Byb3cgPSBtYXgoc2VsZWN0ZWRfaW5kZXgtbXdpbl9tYXhfbGluZXMvMiwgMCk7CisJ
CWlmICh0b3Byb3cgPj0gaXRlbV9jb3VudChjdXJzZXNfbWVudSktbXdpbl9tYXhfbGluZXMpCisJ
CQl0b3Byb3cgPSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1td2luX21heF9saW5lczsKKwkJc2V0
X3RvcF9yb3coY3Vyc2VzX21lbnUsIHRvcHJvdyk7CisJfQorCXNldF9jdXJyZW50X2l0ZW0oY3Vy
c2VzX21lbnUsCisJCQljdXJzZXNfbWVudV9pdGVtc1tzZWxlY3RlZF9pbmRleF0pOworCSpsYXN0
X3RvcF9yb3cgPSB0b3Byb3c7CisJcG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwlyZWZyZXNoX2Fs
bF93aW5kb3dzKG1haW5fd2luZG93KTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHJl
c2V0X21lbnUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSAqLworc3RhdGljIHZvaWQgc2hvd19tZW51
KGNvbnN0IGNoYXIgKnByb21wdCwgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zLAorCQlpbnQgc2Vs
ZWN0ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQoreworCWludCBtYXh4LCBtYXh5OworCVdJ
TkRPVyAqbWVudV93aW5kb3c7CisKKwljdXJyZW50X2luc3RydWN0aW9ucyA9IGluc3RydWN0aW9u
czsKKworCWNsZWFyKCk7CisJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVz
W05PUk1BTF0pOworCXByaW50X2luX21pZGRsZShzdGRzY3IsIDEsIDAsIGdldG1heHgoc3Rkc2Ny
KSwKKwkJCW1lbnVfYmFja3RpdGxlLAorCQkJYXR0cmlidXRlc1tNQUlOX0hFQURJTkddKTsKKwor
CSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tNQUlOX01FTlVfQk9YXSk7
CisJYm94KG1haW5fd2luZG93LCAwLCAwKTsKKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3cs
IGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0hFQURJTkddKTsKKwltdndwcmludHcobWFpbl93aW5kb3cs
IDAsIDMsICIgJXMgIiwgcHJvbXB0KTsKKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0
dHJpYnV0ZXNbTk9STUFMXSk7CisKKwlzZXRfbWVudV9pdGVtcyhjdXJzZXNfbWVudSwgY3Vyc2Vz
X21lbnVfaXRlbXMpOworCisJLyogcG9zaXRpb24gdGhlIG1lbnUgYXQgdGhlIG1pZGRsZSBvZiB0
aGUgc2NyZWVuICovCisJc2NhbGVfbWVudShjdXJzZXNfbWVudSwgJm1heHksICZtYXh4KTsKKwlt
YXh4ID0gbWluKG1heHgsIG13aW5fbWF4X2NvbHMtMik7CisJbWF4eSA9IG13aW5fbWF4X2xpbmVz
OworCW1lbnVfd2luZG93ID0gZGVyd2luKG1haW5fd2luZG93LAorCQkJbWF4eSwKKwkJCW1heHgs
CisJCQkyLAorCQkJKG13aW5fbWF4X2NvbHMtbWF4eCkvMik7CisJa2V5cGFkKG1lbnVfd2luZG93
LCBUUlVFKTsKKwlzZXRfbWVudV93aW4oY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsKKwlzZXRf
bWVudV9zdWIoY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsKKworCS8qIG11c3QgcmVhc3NlcnQg
dGhpcyBhZnRlciBjaGFuZ2luZyBpdGVtcywgb3RoZXJ3aXNlIHJldHVybnMgdG8gYQorCSAqIGRl
ZmF1bHQgb2YgMTYKKwkgKi8KKwlzZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEp
OworCWNlbnRlcl9pdGVtKHNlbGVjdGVkX2luZGV4LCBsYXN0X3RvcF9yb3cpOworCXNldF9tZW51
X2Zvcm1hdChjdXJzZXNfbWVudSwgbWF4eSwgMSk7CisKKwlwcmludF9mdW5jdGlvbl9saW5lKCk7
CisKKwkvKiBQb3N0IHRoZSBtZW51ICovCisJcG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwlyZWZy
ZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKK30KKworc3RhdGljIHZvaWQgYWRqX21hdGNo
X2RpcihtYXRjaF9mICptYXRjaF9kaXJlY3Rpb24pCit7CisJaWYgKCptYXRjaF9kaXJlY3Rpb24g
PT0gRklORF9ORVhUX01BVENIX0RPV04pCisJCSptYXRjaF9kaXJlY3Rpb24gPQorCQkJTUFUQ0hf
VElOS0VSX1BBVFRFUk5fRE9XTjsKKwllbHNlIGlmICgqbWF0Y2hfZGlyZWN0aW9uID09IEZJTkRf
TkVYVF9NQVRDSF9VUCkKKwkJKm1hdGNoX2RpcmVjdGlvbiA9CisJCQlNQVRDSF9USU5LRVJfUEFU
VEVSTl9VUDsKKwkvKiBlbHNlLCBkbyBubyBjaGFuZ2UuLiAqLworfQorCitzdHJ1Y3QgbWF0Y2hf
c3RhdGUKK3sKKwlpbnQgaW5fc2VhcmNoOworCW1hdGNoX2YgbWF0Y2hfZGlyZWN0aW9uOworCWNo
YXIgcGF0dGVyblsyNTZdOworfTsKKworLyogUmV0dXJuIDAgbWVhbnMgSSBoYXZlIGhhbmRsZWQg
dGhlIGtleS4gSW4gc3VjaCBhIGNhc2UsIGFucyBzaG91bGQgaG9sZCB0aGUKKyAqIGl0ZW0gdG8g
Y2VudGVyLCBvciAtMSBvdGhlcndpc2UuCisgKiBFbHNlIHJldHVybiAtMSAuCisgKi8KK3N0YXRp
YyBpbnQgZG9fbWF0Y2goaW50IGtleSwgc3RydWN0IG1hdGNoX3N0YXRlICpzdGF0ZSwgaW50ICph
bnMpCit7CisJY2hhciBjID0gKGNoYXIpIGtleTsKKwlpbnQgdGVybWluYXRlX3NlYXJjaCA9IDA7
CisJKmFucyA9IC0xOworCWlmIChrZXkgPT0gJy8nIHx8IChzdGF0ZS0+aW5fc2VhcmNoICYmIGtl
eSA9PSAyNykpIHsKKwkJbW92ZSgwLCAwKTsKKwkJcmVmcmVzaCgpOworCQljbHJ0b2VvbCgpOwor
CQlzdGF0ZS0+aW5fc2VhcmNoID0gMS1zdGF0ZS0+aW5fc2VhcmNoOworCQliemVybyhzdGF0ZS0+
cGF0dGVybiwgc2l6ZW9mKHN0YXRlLT5wYXR0ZXJuKSk7CisJCXN0YXRlLT5tYXRjaF9kaXJlY3Rp
b24gPSBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYg
KCFzdGF0ZS0+aW5fc2VhcmNoKQorCQlyZXR1cm4gMTsKKworCWlmIChpc2FsbnVtKGMpIHx8IGlz
Z3JhcGgoYykgfHwgYyA9PSAnICcpIHsKKwkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0YXRlLT5w
YXR0ZXJuKV0gPSBjOworCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4pXSA9
ICdcMCc7CisJCWFkal9tYXRjaF9kaXIoJnN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOworCQkqYW5z
ID0gZ2V0X21leHRfbWF0Y2goc3RhdGUtPnBhdHRlcm4sCisJCQkJc3RhdGUtPm1hdGNoX2RpcmVj
dGlvbik7CisJfSBlbHNlIGlmIChrZXkgPT0gS0VZX0RPV04pIHsKKwkJc3RhdGUtPm1hdGNoX2Rp
cmVjdGlvbiA9IEZJTkRfTkVYVF9NQVRDSF9ET1dOOworCQkqYW5zID0gZ2V0X21leHRfbWF0Y2go
c3RhdGUtPnBhdHRlcm4sCisJCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7CisJfSBlbHNlIGlm
IChrZXkgPT0gS0VZX1VQKSB7CisJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRf
TUFUQ0hfVVA7CisJCSphbnMgPSBnZXRfbWV4dF9tYXRjaChzdGF0ZS0+cGF0dGVybiwKKwkJCQlz
dGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsKKwl9IGVsc2UgaWYgKGtleSA9PSBLRVlfQkFDS1NQQUNF
IHx8IGtleSA9PSA4IHx8IGtleSA9PSAxMjcpIHsKKwkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0
YXRlLT5wYXR0ZXJuKS0xXSA9ICdcMCc7CisJCWFkal9tYXRjaF9kaXIoJnN0YXRlLT5tYXRjaF9k
aXJlY3Rpb24pOworCX0gZWxzZQorCQl0ZXJtaW5hdGVfc2VhcmNoID0gMTsKKworCWlmICh0ZXJt
aW5hdGVfc2VhcmNoKSB7CisJCXN0YXRlLT5pbl9zZWFyY2ggPSAwOworCQliemVybyhzdGF0ZS0+
cGF0dGVybiwgc2l6ZW9mKHN0YXRlLT5wYXR0ZXJuKSk7CisJCW1vdmUoMCwgMCk7CisJCXJlZnJl
c2goKTsKKwkJY2xydG9lb2woKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwor
c3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqc3Vi
bWVudSA9IE5VTEw7CisJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUp
OworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgcmVzOworCWludCBjdXJyZW50X2luZGV4ID0g
MDsKKwlpbnQgbGFzdF90b3Bfcm93ID0gMDsKKwlzdHJ1Y3QgbWF0Y2hfc3RhdGUgbWF0Y2hfc3Rh
dGUgPSB7CisJCS5pbl9zZWFyY2ggPSAwLAorCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElO
S0VSX1BBVFRFUk5fRE9XTiwKKwkJLnBhdHRlcm4gPSAiIiwKKwl9OworCisJd2hpbGUgKCFnbG9i
YWxfZXhpdCkgeworCQlyZXNldF9tZW51KCk7CisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWJ1
aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJCQlicmVhazsKKworCQlzaG93
X21lbnUocHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJbWVudV9pbnN0cnVjdGlv
bnMsCisJCQkJY3VycmVudF9pbmRleCwgJmxhc3RfdG9wX3Jvdyk7CisJCWtleXBhZCgobWVudV93
aW4oY3Vyc2VzX21lbnUpKSwgVFJVRSk7CisJCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsKKwkJCWlm
IChtYXRjaF9zdGF0ZS5pbl9zZWFyY2gpIHsKKwkJCQltdnByaW50dygwLCAwLAorCQkJCQkic2Vh
cmNoaW5nOiAlcyIsIG1hdGNoX3N0YXRlLnBhdHRlcm4pOworCQkJCWNscnRvZW9sKCk7CisJCQl9
CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJCXJlcyA9IHdnZXRjaCht
ZW51X3dpbihjdXJzZXNfbWVudSkpOworCQkJaWYgKCFyZXMpCisJCQkJYnJlYWs7CisJCQlpZiAo
ZG9fbWF0Y2gocmVzLCAmbWF0Y2hfc3RhdGUsICZjdXJyZW50X2luZGV4KSA9PSAwKSB7CisJCQkJ
aWYgKGN1cnJlbnRfaW5kZXggIT0gLTEpCisJCQkJCWNlbnRlcl9pdGVtKGN1cnJlbnRfaW5kZXgs
CisJCQkJCQkgICAgJmxhc3RfdG9wX3Jvdyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAo
cHJvY2Vzc19zcGVjaWFsX2tleXMoJnJlcywKKwkJCQkJCShzdHJ1Y3QgbWVudSAqKSBpdGVtX2Rh
dGEoKSkpCisJCQkJYnJlYWs7CisJCQlzd2l0Y2ggKHJlcykgeworCQkJY2FzZSBLRVlfRE9XTjoK
KwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7CisJCQkJYnJlYWs7
CisJCQljYXNlIEtFWV9VUDoKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1VQX0lU
RU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfTlBBR0U6CisJCQkJbWVudV9kcml2ZXIoY3Vy
c2VzX21lbnUsIFJFUV9TQ1JfRFBBR0UpOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfUFBBR0U6
CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOworCQkJCWJyZWFr
OworCQkJY2FzZSBLRVlfSE9NRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0ZJ
UlNUX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfRU5EOgorCQkJCW1lbnVfZHJpdmVy
KGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2gnOgor
CQkJY2FzZSAnPyc6CisJCQkJc2hvd19oZWxwKChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSk7
CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fAorCQkJ
CXJlcyA9PSAzMiB8fCByZXMgPT0gJ24nIHx8IHJlcyA9PSAneScgfHwKKwkJCQlyZXMgPT0gS0VZ
X0xFRlQgfHwgcmVzID09IEtFWV9SSUdIVCB8fAorCQkJCXJlcyA9PSAnbScpCisJCQkJYnJlYWs7
CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJfQorCisJCXJlZnJlc2hf
YWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQkvKiBpZiBFU0Mgb3IgbGVmdCovCisJCWlmIChy
ZXMgPT0gMjcgfHwgKG1lbnUgIT0gJnJvb3RtZW51ICYmIHJlcyA9PSBLRVlfTEVGVCkpCisJCQli
cmVhazsKKworCQkvKiByZW1lbWJlciBsb2NhdGlvbiBpbiB0aGUgbWVudSAqLworCQlsYXN0X3Rv
cF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKKwkJY3VycmVudF9pbmRleCA9IGN1cnNlc19p
dGVtX2luZGV4KCk7CisKKwkJaWYgKCFpdGVtX3RhZygpKQorCQkJY29udGludWU7CisKKwkJc3Vi
bWVudSA9IChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKTsKKwkJaWYgKCFzdWJtZW51IHx8ICFt
ZW51X2lzX3Zpc2libGUoc3VibWVudSkpCisJCQljb250aW51ZTsKKwkJc3ltID0gc3VibWVudS0+
c3ltOworCisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgJyAnOgorCQkJaWYgKGl0ZW1faXNfdGFn
KCd0JykpCisJCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOworCQkJZWxzZSBpZiAo
aXRlbV9pc190YWcoJ20nKSkKKwkJCQljb25mKHN1Ym1lbnUpOworCQkJYnJlYWs7CisJCWNhc2Ug
S0VZX1JJR0hUOgorCQljYXNlIDEwOiAvKiBFTlRFUiBXQVMgUFJFU1NFRCAqLworCQkJc3dpdGNo
IChpdGVtX3RhZygpKSB7CisJCQljYXNlICdtJzoKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkK
KwkJCQkJc3VibWVudS0+ZGF0YSA9CisJCQkJCQkodm9pZCAqKSAobG9uZykgIXN1Ym1lbnUtPmRh
dGE7CisJCQkJZWxzZQorCQkJCQljb25mKHN1Ym1lbnUpOworCQkJCWJyZWFrOworCQkJY2FzZSAn
dCc6CisJCQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJgorCQkJCSAgICBzeW1fZ2V0X3RyaXN0
YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQorCQkJCQljb25mX2Nob2ljZShzdWJtZW51KTsKKwkJCQll
bHNlIGlmIChzdWJtZW51LT5wcm9tcHQgJiYKKwkJCQkJIHN1Ym1lbnUtPnByb21wdC0+dHlwZSA9
PSBQX01FTlUpCisJCQkJCWNvbmYoc3VibWVudSk7CisJCQkJZWxzZSBpZiAocmVzID09IDEwKQor
CQkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCQkJYnJlYWs7CisJCQljYXNl
ICdzJzoKKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJy
ZWFrOworCQljYXNlICd5JzoKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7CisJCQkJaWYgKHN5
bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc3lt
X3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCkpCisJCQkJCWJ0bl9kaWFsb2cobWFpbl93aW5k
b3csIHNldG1vZF90ZXh0LCAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlICduJzoKKwkJCWlm
IChpdGVtX2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7
CisJCQlicmVhazsKKwkJY2FzZSAnbSc6CisJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkKKwkJCQlz
eW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsKKwkJCWJyZWFrOworCQl9CisJfQorfQor
CitzdGF0aWMgdm9pZCBjb25mX21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykKK3sKKwli
dG5fZGlhbG9nKG1haW5fd2luZG93LCBzLCAxLCAiPE9LPiIpOworfQorCitzdGF0aWMgdm9pZCBz
aG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IGdzdHIgaGVscDsKKworCWlm
ICghbWVudSkKKwkJcmV0dXJuOworCisJaGVscCA9IHN0cl9uZXcoKTsKKwltZW51X2dldF9leHRf
aGVscChtZW51LCAmaGVscCk7CisJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LCBtZW51X2dl
dF9wcm9tcHQobWVudSksIHN0cl9nZXQoJmhlbHApKTsKKwlzdHJfZnJlZSgmaGVscCk7Cit9CisK
K3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQoreworCWNvbnN0IGNo
YXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQg
PSBOVUxMOworCXN0cnVjdCBzeW1ib2wgKmFjdGl2ZTsKKwlpbnQgc2VsZWN0ZWRfaW5kZXggPSAw
OworCWludCBsYXN0X3RvcF9yb3cgPSAwOworCWludCByZXMsIGkgPSAwOworCXN0cnVjdCBtYXRj
aF9zdGF0ZSBtYXRjaF9zdGF0ZSA9IHsKKwkJLmluX3NlYXJjaCA9IDAsCisJCS5tYXRjaF9kaXJl
Y3Rpb24gPSBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLAorCQkucGF0dGVybiA9ICIiLAorCX07
CisKKwlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pOworCS8qIHRoaXMg
aXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSB0aGUgY29uZigpIGZ1bmN0aW9uLiAqLworCXdoaWxl
ICghZ2xvYmFsX2V4aXQpIHsKKwkJcmVzZXRfbWVudSgpOworCisJCWZvciAoaSA9IDAsIGNoaWxk
ID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWlmICghc2hv
d19hbGxfaXRlbXMgJiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisK
KwkJCWlmIChjaGlsZC0+c3ltID09IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCisJ
CQkJaXRlbV9tYWtlKGNoaWxkLCAnOicsICI8WD4gJXMiLAorCQkJCQkJbWVudV9nZXRfcHJvbXB0
KGNoaWxkKSk7CisJCQllbHNlIGlmIChjaGlsZC0+c3ltKQorCQkJCWl0ZW1fbWFrZShjaGlsZCwg
JzonLCAiICAgICVzIiwKKwkJCQkJCW1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQkJZWxzZQor
CQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiKioqICVzICoqKiIsCisJCQkJCQltZW51X2dldF9w
cm9tcHQoY2hpbGQpKTsKKworCQkJaWYgKGNoaWxkLT5zeW0gPT0gYWN0aXZlKXsKKwkJCQlsYXN0
X3RvcF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKKwkJCQlzZWxlY3RlZF9pbmRleCA9IGk7
CisJCQl9CisJCQlpKys7CisJCX0KKwkJc2hvd19tZW51KHByb21wdCA/IHByb21wdCA6ICJDaG9p
Y2UgTWVudSIsCisJCQkJcmFkaW9saXN0X2luc3RydWN0aW9ucywKKwkJCQlzZWxlY3RlZF9pbmRl
eCwKKwkJCQkmbGFzdF90b3Bfcm93KTsKKwkJd2hpbGUgKCFnbG9iYWxfZXhpdCkgeworCQkJaWYg
KG1hdGNoX3N0YXRlLmluX3NlYXJjaCkgeworCQkJCW12cHJpbnR3KDAsIDAsICJzZWFyY2hpbmc6
ICVzIiwKKwkJCQkJIG1hdGNoX3N0YXRlLnBhdHRlcm4pOworCQkJCWNscnRvZW9sKCk7CisJCQl9
CisJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKKwkJCXJlcyA9IHdnZXRjaCht
ZW51X3dpbihjdXJzZXNfbWVudSkpOworCQkJaWYgKCFyZXMpCisJCQkJYnJlYWs7CisJCQlpZiAo
ZG9fbWF0Y2gocmVzLCAmbWF0Y2hfc3RhdGUsICZzZWxlY3RlZF9pbmRleCkgPT0gMCkgeworCQkJ
CWlmIChzZWxlY3RlZF9pbmRleCAhPSAtMSkKKwkJCQkJY2VudGVyX2l0ZW0oc2VsZWN0ZWRfaW5k
ZXgsCisJCQkJCQkgICAgJmxhc3RfdG9wX3Jvdyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlp
ZiAocHJvY2Vzc19zcGVjaWFsX2tleXMoCisJCQkJCQkmcmVzLAorCQkJCQkJKHN0cnVjdCBtZW51
ICopIGl0ZW1fZGF0YSgpKSkKKwkJCQlicmVhazsKKwkJCXN3aXRjaCAocmVzKSB7CisJCQljYXNl
IEtFWV9ET1dOOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfRE9XTl9JVEVNKTsK
KwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX1VQOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51
LCBSRVFfVVBfSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9OUEFHRToKKwkJCQltZW51
X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1NDUl9EUEFHRSk7CisJCQkJYnJlYWs7CisJCQljYXNl
IEtFWV9QUEFHRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1NDUl9VUEFHRSk7
CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9IT01FOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19t
ZW51LCBSRVFfRklSU1RfSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9FTkQ6CisJCQkJ
bWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9MQVNUX0lURU0pOworCQkJCWJyZWFrOworCQkJ
Y2FzZSAnaCc6CisJCQljYXNlICc/JzoKKwkJCQlzaG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0
ZW1fZGF0YSgpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09
IDI3IHx8IHJlcyA9PSAnICcgfHwKKwkJCQkJcmVzID09IEtFWV9MRUZUKXsKKwkJCQlicmVhazsK
KwkJCX0KKwkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQl9CisJCS8qIGlm
IEVTQyBvciBsZWZ0ICovCisJCWlmIChyZXMgPT0gMjcgfHwgcmVzID09IEtFWV9MRUZUKQorCQkJ
YnJlYWs7CisKKwkJY2hpbGQgPSBpdGVtX2RhdGEoKTsKKwkJaWYgKCFjaGlsZCB8fCAhbWVudV9p
c192aXNpYmxlKGNoaWxkKSB8fCAhY2hpbGQtPnN5bSkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2gg
KHJlcykgeworCQljYXNlICcgJzoKKwkJY2FzZSAgMTA6CisJCWNhc2UgS0VZX1JJR0hUOgorCQkJ
c3ltX3NldF90cmlzdGF0ZV92YWx1ZShjaGlsZC0+c3ltLCB5ZXMpOworCQkJcmV0dXJuOworCQlj
YXNlICdoJzoKKwkJY2FzZSAnPyc6CisJCQlzaG93X2hlbHAoY2hpbGQpOworCQkJYWN0aXZlID0g
Y2hpbGQtPnN5bTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9FWElUOgorCQkJcmV0dXJuOworCQl9
CisJfQorfQorCitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkKK3sK
Kwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisKKwl3aGlsZSAo
MSkgeworCQlpbnQgcmVzOworCQljb25zdCBjaGFyICpoZWFkaW5nOworCisJCXN3aXRjaCAoc3lt
X2dldF90eXBlKG1lbnUtPnN5bSkpIHsKKwkJY2FzZSBTX0lOVDoKKwkJCWhlYWRpbmcgPSBpbnB1
dGJveF9pbnN0cnVjdGlvbnNfaW50OworCQkJYnJlYWs7CisJCWNhc2UgU19IRVg6CisJCQloZWFk
aW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleDsKKwkJCWJyZWFrOworCQljYXNlIFNfU1RS
SU5HOgorCQkJaGVhZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19zdHJpbmc7CisJCQlicmVh
azsKKwkJZGVmYXVsdDoKKwkJCWhlYWRpbmcgPSAiSW50ZXJuYWwgbmNvbmYgZXJyb3IhIjsKKwkJ
fQorCQlyZXMgPSBkaWFsb2dfaW5wdXRib3gobWFpbl93aW5kb3csCisJCQkJcHJvbXB0ID8gcHJv
bXB0IDogIk1haW4gTWVudSIsCisJCQkJaGVhZGluZywKKwkJCQlzeW1fZ2V0X3N0cmluZ192YWx1
ZShtZW51LT5zeW0pLAorCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0LAorCQkJCSZkaWFsb2dfaW5w
dXRfcmVzdWx0X2xlbik7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmIChzeW1f
c2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0sCisJCQkJCQlkaWFsb2dfaW5wdXRfcmVzdWx0KSkK
KwkJCQlyZXR1cm47CisJCQlidG5fZGlhbG9nKG1haW5fd2luZG93LAorCQkJCSJZb3UgaGF2ZSBt
YWRlIGFuIGludmFsaWQgZW50cnkuIiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc2hv
d19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VYSVQ6CisJCQlyZXR1cm47CisJ
CX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKQoreworCXdoaWxlICgxKSB7
CisJCWludCByZXM7CisJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywKKwkJCQlO
VUxMLCBsb2FkX2NvbmZpZ190ZXh0LAorCQkJCWZpbGVuYW1lLAorCQkJCSZkaWFsb2dfaW5wdXRf
cmVzdWx0LAorCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7CisJCXN3aXRjaCAocmVzKSB7
CisJCWNhc2UgMDoKKwkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkKKwkJCQlyZXR1cm47
CisJCQlpZiAoIWNvbmZfcmVhZChkaWFsb2dfaW5wdXRfcmVzdWx0KSkgeworCQkJCXNldF9jb25m
aWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7CisJCQkJc3ltX3NldF9jaGFuZ2VfY291
bnQoMSk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywgIkZp
bGUgZG9lcyBub3QgZXhpc3QhIiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJc2hvd19z
Y3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJCQkiTG9hZCBBbHRlcm5hdGUgQ29uZmlndXJhdGlv
biIsCisJCQkJCWxvYWRfY29uZmlnX2hlbHApOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VYSVQ6
CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKQor
eworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWlu
X3dpbmRvdywKKwkJCQlOVUxMLCBzYXZlX2NvbmZpZ190ZXh0LAorCQkJCWZpbGVuYW1lLAorCQkJ
CSZkaWFsb2dfaW5wdXRfcmVzdWx0LAorCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7CisJ
CXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFsw
XSkKKwkJCQlyZXR1cm47CisJCQlyZXMgPSBjb25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1bHQp
OworCQkJaWYgKCFyZXMpIHsKKwkJCQlzZXRfY29uZmlnX2ZpbGVuYW1lKGRpYWxvZ19pbnB1dF9y
ZXN1bHQpOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csICJD
YW4ndCBjcmVhdGUgZmlsZSEiLAorCQkJCTEsICI8T0s+Iik7CisJCQlicmVhazsKKwkJY2FzZSAx
OgorCQkJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJCSJTYXZlIEFsdGVybmF0ZSBD
b25maWd1cmF0aW9uIiwKKwkJCQlzYXZlX2NvbmZpZ19oZWxwKTsKKwkJCWJyZWFrOworCQljYXNl
IEtFWV9FWElUOgorCQkJcmV0dXJuOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBzZXR1cF93
aW5kb3dzKHZvaWQpCit7CisJaW50IGxpbmVzLCBjb2x1bW5zOworCisJZ2V0bWF4eXgoc3Rkc2Ny
LCBsaW5lcywgY29sdW1ucyk7CisKKwlpZiAobWFpbl93aW5kb3cgIT0gTlVMTCkKKwkJZGVsd2lu
KG1haW5fd2luZG93KTsKKworCS8qIHNldCB1cCB0aGUgbWVudSBhbmQgbWVudSB3aW5kb3cgKi8K
KwltYWluX3dpbmRvdyA9IG5ld3dpbihsaW5lcy0yLCBjb2x1bW5zLTIsIDIsIDEpOworCWtleXBh
ZChtYWluX3dpbmRvdywgVFJVRSk7CisJbXdpbl9tYXhfbGluZXMgPSBsaW5lcy03OworCW13aW5f
bWF4X2NvbHMgPSBjb2x1bW5zLTY7CisKKwkvKiBwYW5lbHMgb3JkZXIgaXMgZnJvbSBib3R0b20g
dG8gdG9wICovCisJbmV3X3BhbmVsKG1haW5fd2luZG93KTsKK30KKworaW50IG1haW4oaW50IGFj
LCBjaGFyICoqYXYpCit7CisJaW50IGxpbmVzLCBjb2x1bW5zOworCWNoYXIgKm1vZGU7CisKKwlp
ZiAoYWMgPiAxICYmIHN0cmNtcChhdlsxXSwgIi1zIikgPT0gMCkgeworCQkvKiBTaWxlbmNlIGNv
bmZfcmVhZCgpIHVudGlsIHRoZSByZWFsIGNhbGxiYWNrIGlzIHNldCB1cCAqLworCQljb25mX3Nl
dF9tZXNzYWdlX2NhbGxiYWNrKE5VTEwpOworCQlhdisrOworCX0KKwljb25mX3BhcnNlKGF2WzFd
KTsKKwljb25mX3JlYWQoTlVMTCk7CisKKwltb2RlID0gZ2V0ZW52KCJOQ09ORklHX01PREUiKTsK
KwlpZiAobW9kZSkgeworCQlpZiAoIXN0cmNhc2VjbXAobW9kZSwgInNpbmdsZV9tZW51IikpCisJ
CQlzaW5nbGVfbWVudV9tb2RlID0gMTsKKwl9CisKKwkvKiBJbml0aWFsaXplIGN1cnNlcyAqLwor
CWluaXRzY3IoKTsKKwkvKiBzZXQgY29sb3IgdGhlbWUgKi8KKwlzZXRfY29sb3JzKCk7CisKKwlj
YnJlYWsoKTsKKwlub2VjaG8oKTsKKwlrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKKwljdXJzX3NldCgw
KTsKKworCWdldG1heHl4KHN0ZHNjciwgbGluZXMsIGNvbHVtbnMpOworCWlmIChjb2x1bW5zIDwg
NzUgfHwgbGluZXMgPCAyMCkgeworCQllbmR3aW4oKTsKKwkJcHJpbnRmKCJZb3VyIHRlcm1pbmFs
IHNob3VsZCBoYXZlIGF0ICIKKwkJCSJsZWFzdCAyMCBsaW5lcyBhbmQgNzUgY29sdW1uc1xuIik7
CisJCXJldHVybiAxOworCX0KKworCW5vdGltZW91dChzdGRzY3IsIEZBTFNFKTsKKyNpZiBOQ1VS
U0VTX1JFRU5UUkFOVAorCXNldF9lc2NkZWxheSgxKTsKKyNlbHNlCisJRVNDREVMQVkgPSAxOwor
I2VuZGlmCisKKwkvKiBzZXQgYnRucyBtZW51ICovCisJY3Vyc2VzX21lbnUgPSBuZXdfbWVudShj
dXJzZXNfbWVudV9pdGVtcyk7CisJbWVudV9vcHRzX29mZihjdXJzZXNfbWVudSwgT19TSE9XREVT
Qyk7CisJbWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX1NIT1dNQVRDSCk7CisJbWVudV9vcHRz
X29uKGN1cnNlc19tZW51LCBPX09ORVZBTFVFKTsKKwltZW51X29wdHNfb24oY3Vyc2VzX21lbnUs
IE9fTk9OQ1lDTElDKTsKKwltZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fSUdOT1JFQ0FTRSk7
CisJc2V0X21lbnVfbWFyayhjdXJzZXNfbWVudSwgIiAiKTsKKwlzZXRfbWVudV9mb3JlKGN1cnNl
c19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9GT1JFXSk7CisJc2V0X21lbnVfYmFjayhjdXJz
ZXNfbWVudSwgYXR0cmlidXRlc1tNQUlOX01FTlVfQkFDS10pOworCXNldF9tZW51X2dyZXkoY3Vy
c2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0dSRVldKTsKKworCXNldF9jb25maWdfZmls
ZW5hbWUoY29uZl9nZXRfY29uZmlnbmFtZSgpKTsKKwlzZXR1cF93aW5kb3dzKCk7CisKKwkvKiBj
aGVjayBmb3IgS0VZX0ZVTkMoMSkgKi8KKwlpZiAoaGFzX2tleShLRVlfRigxKSkgPT0gRkFMU0Up
IHsKKwkJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJCSJJbnN0cnVjdGlvbnMiLAor
CQkJCW1lbnVfbm9fZl9pbnN0cnVjdGlvbnMpOworCX0KKworCWNvbmZfc2V0X21lc3NhZ2VfY2Fs
bGJhY2soY29uZl9tZXNzYWdlX2NhbGxiYWNrKTsKKwkvKiBkbyB0aGUgd29yayAqLworCXdoaWxl
ICghZ2xvYmFsX2V4aXQpIHsKKwkJY29uZigmcm9vdG1lbnUpOworCQlpZiAoIWdsb2JhbF9leGl0
ICYmIGRvX2V4aXQoKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCS8qIG9rLCB3ZSBhcmUgZG9uZSAq
LworCXVucG9zdF9tZW51KGN1cnNlc19tZW51KTsKKwlmcmVlX21lbnUoY3Vyc2VzX21lbnUpOwor
CWRlbHdpbihtYWluX3dpbmRvdyk7CisJY2xlYXIoKTsKKwlyZWZyZXNoKCk7CisJZW5kd2luKCk7
CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1
aS5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5ndWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43N2Y1MjVhCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9uY29uZi5ndWkuYwpAQCAtMCwwICsxLDY2NCBAQAorLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlyIFR6YWNoYXIg
PG5pci50emFjaGFyQGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gbWVudWNvbmZpZy4K
KyAqLworI2luY2x1ZGUgIm5jb25mLmgiCisjaW5jbHVkZSAibGtjLmgiCisKKy8qIGEgbGlzdCBv
ZiBhbGwgdGhlIGRpZmZlcmVudCB3aWRnZXRzIHdlIHVzZSAqLworYXR0cmlidXRlc190IGF0dHJp
YnV0ZXNbQVRUUl9NQVgrMV0gPSB7MH07CisKKy8qIGF2YWlsYWJsZSBjb2xvcnM6CisgICBDT0xP
Ul9CTEFDSyAgIDAKKyAgIENPTE9SX1JFRCAgICAgMQorICAgQ09MT1JfR1JFRU4gICAyCisgICBD
T0xPUl9ZRUxMT1cgIDMKKyAgIENPTE9SX0JMVUUgICAgNAorICAgQ09MT1JfTUFHRU5UQSA1Cisg
ICBDT0xPUl9DWUFOICAgIDYKKyAgIENPTE9SX1dISVRFICAgNworICAgKi8KK3N0YXRpYyB2b2lk
IHNldF9ub3JtYWxfY29sb3JzKHZvaWQpCit7CisJaW5pdF9wYWlyKE5PUk1BTCwgLTEsIC0xKTsK
Kwlpbml0X3BhaXIoTUFJTl9IRUFESU5HLCBDT0xPUl9NQUdFTlRBLCAtMSk7CisKKwkvKiBGT1JF
IGlzIGZvciB0aGUgc2VsZWN0ZWQgaXRlbSAqLworCWluaXRfcGFpcihNQUlOX01FTlVfRk9SRSwg
LTEsIC0xKTsKKwkvKiBCQUNLIGZvciBhbGwgdGhlIHJlc3QgKi8KKwlpbml0X3BhaXIoTUFJTl9N
RU5VX0JBQ0ssIC0xLCAtMSk7CisJaW5pdF9wYWlyKE1BSU5fTUVOVV9HUkVZLCAtMSwgLTEpOwor
CWluaXRfcGFpcihNQUlOX01FTlVfSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsKKwlpbml0X3Bh
aXIoTUFJTl9NRU5VX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7CisKKwlpbml0X3BhaXIoU0NST0xM
V0lOX1RFWFQsIC0xLCAtMSk7CisJaW5pdF9wYWlyKFNDUk9MTFdJTl9IRUFESU5HLCBDT0xPUl9H
UkVFTiwgLTEpOworCWluaXRfcGFpcihTQ1JPTExXSU5fQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsK
KworCWluaXRfcGFpcihESUFMT0dfVEVYVCwgLTEsIC0xKTsKKwlpbml0X3BhaXIoRElBTE9HX0JP
WCwgQ09MT1JfWUVMTE9XLCAtMSk7CisJaW5pdF9wYWlyKERJQUxPR19NRU5VX0JBQ0ssIENPTE9S
X1lFTExPVywgLTEpOworCWluaXRfcGFpcihESUFMT0dfTUVOVV9GT1JFLCBDT0xPUl9SRUQsIC0x
KTsKKworCWluaXRfcGFpcihJTlBVVF9CT1gsIENPTE9SX1lFTExPVywgLTEpOworCWluaXRfcGFp
cihJTlBVVF9IRUFESU5HLCBDT0xPUl9HUkVFTiwgLTEpOworCWluaXRfcGFpcihJTlBVVF9URVhU
LCAtMSwgLTEpOworCWluaXRfcGFpcihJTlBVVF9GSUVMRCwgLTEsIC0xKTsKKworCWluaXRfcGFp
cihGVU5DVElPTl9ISUdITElHSFQsIC0xLCAtMSk7CisJaW5pdF9wYWlyKEZVTkNUSU9OX1RFWFQs
IENPTE9SX1lFTExPVywgLTEpOworfQorCisvKiBhdmFpbGFibGUgYXR0cmlidXRlczoKKyAgIEFf
Tk9STUFMICAgICAgICBOb3JtYWwgZGlzcGxheSAobm8gaGlnaGxpZ2h0KQorICAgQV9TVEFORE9V
VCAgICAgIEJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2YgdGhlIHRlcm1pbmFsLgorICAgQV9VTkRF
UkxJTkUgICAgIFVuZGVybGluaW5nCisgICBBX1JFVkVSU0UgICAgICAgUmV2ZXJzZSB2aWRlbwor
ICAgQV9CTElOSyAgICAgICAgIEJsaW5raW5nCisgICBBX0RJTSAgICAgICAgICAgSGFsZiBicmln
aHQKKyAgIEFfQk9MRCAgICAgICAgICBFeHRyYSBicmlnaHQgb3IgYm9sZAorICAgQV9QUk9URUNU
ICAgICAgIFByb3RlY3RlZCBtb2RlCisgICBBX0lOVklTICAgICAgICAgSW52aXNpYmxlIG9yIGJs
YW5rIG1vZGUKKyAgIEFfQUxUQ0hBUlNFVCAgICBBbHRlcm5hdGUgY2hhcmFjdGVyIHNldAorICAg
QV9DSEFSVEVYVCAgICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgYSBjaGFyYWN0ZXIKKyAgIENPTE9S
X1BBSVIobikgICBDb2xvci1wYWlyIG51bWJlciBuCisgICAqLworc3RhdGljIHZvaWQgbm9ybWFs
X2NvbG9yX3RoZW1lKHZvaWQpCit7CisJLyogYXV0b21hdGljYWxseSBhZGQgY29sb3IuLi4gKi8K
KyNkZWZpbmUgbWthdHRyKG5hbWUsIGF0dHIpIGRvIHsgXAorYXR0cmlidXRlc1tuYW1lXSA9IGF0
dHIgfCBDT0xPUl9QQUlSKG5hbWUpOyB9IHdoaWxlICgwKQorCW1rYXR0cihOT1JNQUwsIE5PUk1B
TCk7CisJbWthdHRyKE1BSU5fSEVBRElORywgQV9CT0xEIHwgQV9VTkRFUkxJTkUpOworCisJbWth
dHRyKE1BSU5fTUVOVV9GT1JFLCBBX1JFVkVSU0UpOworCW1rYXR0cihNQUlOX01FTlVfQkFDSywg
QV9OT1JNQUwpOworCW1rYXR0cihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOworCW1rYXR0cihN
QUlOX01FTlVfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHIoTUFJTl9NRU5VX0JPWCwgQV9OT1JN
QUwpOworCisJbWthdHRyKFNDUk9MTFdJTl9URVhULCBBX05PUk1BTCk7CisJbWthdHRyKFNDUk9M
TFdJTl9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cihTQ1JPTExXSU5fQk9YLCBBX0JPTEQpOwor
CisJbWthdHRyKERJQUxPR19URVhULCBBX0JPTEQpOworCW1rYXR0cihESUFMT0dfQk9YLCBBX0JP
TEQpOworCW1rYXR0cihESUFMT0dfTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsKKwlta2F0dHIoRElB
TE9HX01FTlVfQkFDSywgQV9OT1JNQUwpOworCisJbWthdHRyKElOUFVUX0JPWCwgQV9OT1JNQUwp
OworCW1rYXR0cihJTlBVVF9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cihJTlBVVF9URVhULCBB
X05PUk1BTCk7CisJbWthdHRyKElOUFVUX0ZJRUxELCBBX1VOREVSTElORSk7CisKKwlta2F0dHIo
RlVOQ1RJT05fSElHSExJR0hULCBBX0JPTEQpOworCW1rYXR0cihGVU5DVElPTl9URVhULCBBX1JF
VkVSU0UpOworfQorCitzdGF0aWMgdm9pZCBub19jb2xvcnNfdGhlbWUodm9pZCkKK3sKKwkvKiBh
dXRvbWF0aWNhbGx5IGFkZCBoaWdobGlnaHQsIG5vIGNvbG9yICovCisjZGVmaW5lIG1rYXR0cm4o
bmFtZSwgYXR0cikgeyBhdHRyaWJ1dGVzW25hbWVdID0gYXR0cjsgfQorCisJbWthdHRybihOT1JN
QUwsIE5PUk1BTCk7CisJbWthdHRybihNQUlOX0hFQURJTkcsIEFfQk9MRCB8IEFfVU5ERVJMSU5F
KTsKKworCW1rYXR0cm4oTUFJTl9NRU5VX0ZPUkUsIEFfU1RBTkRPVVQpOworCW1rYXR0cm4oTUFJ
Tl9NRU5VX0JBQ0ssIEFfTk9STUFMKTsKKwlta2F0dHJuKE1BSU5fTUVOVV9HUkVZLCBBX05PUk1B
TCk7CisJbWthdHRybihNQUlOX01FTlVfSEVBRElORywgQV9CT0xEKTsKKwlta2F0dHJuKE1BSU5f
TUVOVV9CT1gsIEFfTk9STUFMKTsKKworCW1rYXR0cm4oU0NST0xMV0lOX1RFWFQsIEFfTk9STUFM
KTsKKwlta2F0dHJuKFNDUk9MTFdJTl9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cm4oU0NST0xM
V0lOX0JPWCwgQV9CT0xEKTsKKworCW1rYXR0cm4oRElBTE9HX1RFWFQsIEFfTk9STUFMKTsKKwlt
a2F0dHJuKERJQUxPR19CT1gsIEFfQk9MRCk7CisJbWthdHRybihESUFMT0dfTUVOVV9GT1JFLCBB
X1NUQU5ET1VUKTsKKwlta2F0dHJuKERJQUxPR19NRU5VX0JBQ0ssIEFfTk9STUFMKTsKKworCW1r
YXR0cm4oSU5QVVRfQk9YLCBBX0JPTEQpOworCW1rYXR0cm4oSU5QVVRfSEVBRElORywgQV9CT0xE
KTsKKwlta2F0dHJuKElOUFVUX1RFWFQsIEFfTk9STUFMKTsKKwlta2F0dHJuKElOUFVUX0ZJRUxE
LCBBX1VOREVSTElORSk7CisKKwlta2F0dHJuKEZVTkNUSU9OX0hJR0hMSUdIVCwgQV9CT0xEKTsK
Kwlta2F0dHJuKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7Cit9CisKK3ZvaWQgc2V0X2NvbG9y
cyh2b2lkKQoreworCXN0YXJ0X2NvbG9yKCk7CisJdXNlX2RlZmF1bHRfY29sb3JzKCk7CisJc2V0
X25vcm1hbF9jb2xvcnMoKTsKKwlpZiAoaGFzX2NvbG9ycygpKSB7CisJCW5vcm1hbF9jb2xvcl90
aGVtZSgpOworCX0gZWxzZSB7CisJCS8qIGdpdmUgZGVmYXVsdHMgKi8KKwkJbm9fY29sb3JzX3Ro
ZW1lKCk7CisJfQorfQorCisKKy8qIHRoaXMgY2hhbmdlcyB0aGUgd2luZG93cyBhdHRyaWJ1dGVz
ICEhISAqLwordm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sCisJCWludCBzdGFydHks
CisJCWludCBzdGFydHgsCisJCWludCB3aWR0aCwKKwkJY29uc3QgY2hhciAqc3RyaW5nLAorCQlj
aHR5cGUgY29sb3IpCit7ICAgICAgaW50IGxlbmd0aCwgeCwgeTsKKwlmbG9hdCB0ZW1wOworCisK
KwlpZiAod2luID09IE5VTEwpCisJCXdpbiA9IHN0ZHNjcjsKKwlnZXR5eCh3aW4sIHksIHgpOwor
CWlmIChzdGFydHggIT0gMCkKKwkJeCA9IHN0YXJ0eDsKKwlpZiAoc3RhcnR5ICE9IDApCisJCXkg
PSBzdGFydHk7CisJaWYgKHdpZHRoID09IDApCisJCXdpZHRoID0gODA7CisKKwlsZW5ndGggPSBz
dHJsZW4oc3RyaW5nKTsKKwl0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKSAvIDI7CisJeCA9IHN0YXJ0
eCArIChpbnQpdGVtcDsKKwkodm9pZCkgd2F0dHJzZXQod2luLCBjb2xvcik7CisJbXZ3cHJpbnR3
KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsKKwlyZWZyZXNoKCk7Cit9CisKK2ludCBnZXRfbGlu
ZV9ubyhjb25zdCBjaGFyICp0ZXh0KQoreworCWludCBpOworCWludCB0b3RhbCA9IDE7CisKKwlp
ZiAoIXRleHQpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAnOyBp
KyspCisJCWlmICh0ZXh0W2ldID09ICdcbicpCisJCQl0b3RhbCsrOworCXJldHVybiB0b3RhbDsK
K30KKworY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVfbm8p
Cit7CisJaW50IGk7CisJaW50IGxpbmVzID0gMDsKKworCWlmICghdGV4dCkKKwkJcmV0dXJuIE5V
TEw7CisKKwlmb3IgKGkgPSAwOyB0ZXh0W2ldICE9ICdcMCcgJiYgbGluZXMgPCBsaW5lX25vOyBp
KyspCisJCWlmICh0ZXh0W2ldID09ICdcbicpCisJCQlsaW5lcysrOworCXJldHVybiB0ZXh0K2k7
Cit9CisKK2ludCBnZXRfbGluZV9sZW5ndGgoY29uc3QgY2hhciAqbGluZSkKK3sKKwlpbnQgcmVz
ID0gMDsKKwl3aGlsZSAoKmxpbmUgIT0gJ1wwJyAmJiAqbGluZSAhPSAnXG4nKSB7CisJCWxpbmUr
KzsKKwkJcmVzKys7CisJfQorCXJldHVybiByZXM7Cit9CisKKy8qIHByaW50IGFsbCBsaW5lcyB0
byB0aGUgd2luZG93LiAqLwordm9pZCBmaWxsX3dpbmRvdyhXSU5ET1cgKndpbiwgY29uc3QgY2hh
ciAqdGV4dCkKK3sKKwlpbnQgeCwgeTsKKwlpbnQgdG90YWxfbGluZXMgPSBnZXRfbGluZV9ubyh0
ZXh0KTsKKwlpbnQgaTsKKworCWdldG1heHl4KHdpbiwgeSwgeCk7CisJLyogZG8gbm90IGdvIG92
ZXIgZW5kIG9mIGxpbmUgKi8KKwl0b3RhbF9saW5lcyA9IG1pbih0b3RhbF9saW5lcywgeSk7CisJ
Zm9yIChpID0gMDsgaSA8IHRvdGFsX2xpbmVzOyBpKyspIHsKKwkJY2hhciB0bXBbeCsxMF07CisJ
CWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGluZSh0ZXh0LCBpKTsKKwkJaW50IGxlbiA9IGdldF9s
aW5lX2xlbmd0aChsaW5lKTsKKwkJc3RybmNweSh0bXAsIGxpbmUsIG1pbihsZW4sIHgpKTsKKwkJ
dG1wW2xlbl0gPSAnXDAnOworCQltdndwcmludHcod2luLCBpLCAwLCAiJXMiLCB0bXApOworCX0K
K30KKworLyogZ2V0IHRoZSBtZXNzYWdlLCBhbmQgYnV0dG9ucy4KKyAqIGVhY2ggYnV0dG9uIG11
c3QgYmUgYSBjaGFyKgorICogcmV0dXJuIHRoZSBzZWxlY3RlZCBidXR0b24KKyAqCisgKiB0aGlz
IGRpYWxvZyBpcyB1c2VkIGZvciAyIGRpZmZlcmVudCB0aGluZ3M6CisgKiAxKSBzaG93IGEgdGV4
dCBib3gsIG5vIGJ1dHRvbnMuCisgKiAyKSBzaG93IGEgZGlhbG9nLCB3aXRoIGhvcml6b250YWwg
YnV0dG9ucworICovCitpbnQgYnRuX2RpYWxvZyhXSU5ET1cgKm1haW5fd2luZG93LCBjb25zdCBj
aGFyICptc2csIGludCBidG5fbnVtLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljaGFyICpidG47
CisJaW50IGJ0bnNfd2lkdGggPSAwOworCWludCBtc2dfbGluZXMgPSAwOworCWludCBtc2dfd2lk
dGggPSAwOworCWludCB0b3RhbF93aWR0aDsKKwlpbnQgd2luX3Jvd3MgPSAwOworCVdJTkRPVyAq
d2luOworCVdJTkRPVyAqbXNnX3dpbjsKKwlXSU5ET1cgKm1lbnVfd2luOworCU1FTlUgKm1lbnU7
CisJSVRFTSAqYnRuc1tidG5fbnVtKzFdOworCWludCBpLCB4LCB5OworCWludCByZXMgPSAtMTsK
KworCisJdmFfc3RhcnQoYXAsIGJ0bl9udW0pOworCWZvciAoaSA9IDA7IGkgPCBidG5fbnVtOyBp
KyspIHsKKwkJYnRuID0gdmFfYXJnKGFwLCBjaGFyICopOworCQlidG5zW2ldID0gbmV3X2l0ZW0o
YnRuLCAiIik7CisJCWJ0bnNfd2lkdGggKz0gc3RybGVuKGJ0bikrMTsKKwl9CisJdmFfZW5kKGFw
KTsKKwlidG5zW2J0bl9udW1dID0gTlVMTDsKKworCS8qIGZpbmQgdGhlIHdpZGVzdCBsaW5lIG9m
IG1zZzogKi8KKwltc2dfbGluZXMgPSBnZXRfbGluZV9ubyhtc2cpOworCWZvciAoaSA9IDA7IGkg
PCBtc2dfbGluZXM7IGkrKykgeworCQljb25zdCBjaGFyICpsaW5lID0gZ2V0X2xpbmUobXNnLCBp
KTsKKwkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5lKTsKKwkJaWYgKG1zZ193aWR0aCA8
IGxlbikKKwkJCW1zZ193aWR0aCA9IGxlbjsKKwl9CisKKwl0b3RhbF93aWR0aCA9IG1heChtc2df
d2lkdGgsIGJ0bnNfd2lkdGgpOworCS8qIHBsYWNlIGRpYWxvZyBpbiBtaWRkbGUgb2Ygc2NyZWVu
ICovCisJeSA9IChnZXRtYXh5KHN0ZHNjciktKG1zZ19saW5lcys0KSkvMjsKKwl4ID0gKGdldG1h
eHgoc3Rkc2NyKS0odG90YWxfd2lkdGgrNCkpLzI7CisKKworCS8qIGNyZWF0ZSB0aGUgd2luZG93
cyAqLworCWlmIChidG5fbnVtID4gMCkKKwkJd2luX3Jvd3MgPSBtc2dfbGluZXMrNDsKKwllbHNl
CisJCXdpbl9yb3dzID0gbXNnX2xpbmVzKzI7CisKKwl3aW4gPSBuZXd3aW4od2luX3Jvd3MsIHRv
dGFsX3dpZHRoKzQsIHksIHgpOworCWtleXBhZCh3aW4sIFRSVUUpOworCW1lbnVfd2luID0gZGVy
d2luKHdpbiwgMSwgYnRuc193aWR0aCwgd2luX3Jvd3MtMiwKKwkJCTErKHRvdGFsX3dpZHRoKzIt
YnRuc193aWR0aCkvMik7CisJbWVudSA9IG5ld19tZW51KGJ0bnMpOworCW1zZ193aW4gPSBkZXJ3
aW4od2luLCB3aW5fcm93cy0yLCBtc2dfd2lkdGgsIDEsCisJCQkxKyh0b3RhbF93aWR0aCsyLW1z
Z193aWR0aCkvMik7CisKKwlzZXRfbWVudV9mb3JlKG1lbnUsIGF0dHJpYnV0ZXNbRElBTE9HX01F
TlVfRk9SRV0pOworCXNldF9tZW51X2JhY2sobWVudSwgYXR0cmlidXRlc1tESUFMT0dfTUVOVV9C
QUNLXSk7CisKKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1dGVzW0RJQUxPR19CT1hdKTsK
Kwlib3god2luLCAwLCAwKTsKKworCS8qIHByaW50IG1lc3NhZ2UgKi8KKwkodm9pZCkgd2F0dHJz
ZXQobXNnX3dpbiwgYXR0cmlidXRlc1tESUFMT0dfVEVYVF0pOworCWZpbGxfd2luZG93KG1zZ193
aW4sIG1zZyk7CisKKwlzZXRfbWVudV93aW4obWVudSwgd2luKTsKKwlzZXRfbWVudV9zdWIobWVu
dSwgbWVudV93aW4pOworCXNldF9tZW51X2Zvcm1hdChtZW51LCAxLCBidG5fbnVtKTsKKwltZW51
X29wdHNfb2ZmKG1lbnUsIE9fU0hPV0RFU0MpOworCW1lbnVfb3B0c19vZmYobWVudSwgT19TSE9X
TUFUQ0gpOworCW1lbnVfb3B0c19vbihtZW51LCBPX09ORVZBTFVFKTsKKwltZW51X29wdHNfb24o
bWVudSwgT19OT05DWUNMSUMpOworCXNldF9tZW51X21hcmsobWVudSwgIiIpOworCXBvc3RfbWVu
dShtZW51KTsKKworCisJdG91Y2h3aW4od2luKTsKKwlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5f
d2luZG93KTsKKwl3aGlsZSAoKHJlcyA9IHdnZXRjaCh3aW4pKSkgeworCQlzd2l0Y2ggKHJlcykg
eworCQljYXNlIEtFWV9MRUZUOgorCQkJbWVudV9kcml2ZXIobWVudSwgUkVRX0xFRlRfSVRFTSk7
CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQltZW51X2RyaXZlcihtZW51LCBSRVFf
UklHSFRfSVRFTSk7CisJCQlicmVhazsKKwkJY2FzZSAxMDogLyogRU5URVIgKi8KKwkJY2FzZSAy
NzogLyogRVNDQVBFICovCisJCWNhc2UgJyAnOgorCQljYXNlIEtFWV9GKEZfQkFDSyk6CisJCWNh
c2UgS0VZX0YoRl9FWElUKToKKwkJCWJyZWFrOworCQl9CisJCXRvdWNod2luKHdpbik7CisJCXJl
ZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCisJCWlmIChyZXMgPT0gMTAgfHwgcmVz
ID09ICcgJykgeworCQkJcmVzID0gaXRlbV9pbmRleChjdXJyZW50X2l0ZW0obWVudSkpOworCQkJ
YnJlYWs7CisJCX0gZWxzZSBpZiAocmVzID09IDI3IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8
CisJCQkJcmVzID09IEtFWV9GKEZfRVhJVCkpIHsKKwkJCXJlcyA9IEtFWV9FWElUOworCQkJYnJl
YWs7CisJCX0KKwl9CisKKwl1bnBvc3RfbWVudShtZW51KTsKKwlmcmVlX21lbnUobWVudSk7CisJ
Zm9yIChpID0gMDsgaSA8IGJ0bl9udW07IGkrKykKKwkJZnJlZV9pdGVtKGJ0bnNbaV0pOworCisJ
ZGVsd2luKHdpbik7CisJcmV0dXJuIHJlczsKK30KKworaW50IGRpYWxvZ19pbnB1dGJveChXSU5E
T1cgKm1haW5fd2luZG93LAorCQljb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0
LAorCQljb25zdCBjaGFyICppbml0LCBjaGFyICoqcmVzdWx0cCwgaW50ICpyZXN1bHRfbGVuKQor
eworCWludCBwcm9tcHRfbGluZXMgPSAwOworCWludCBwcm9tcHRfd2lkdGggPSAwOworCVdJTkRP
VyAqd2luOworCVdJTkRPVyAqcHJvbXB0X3dpbjsKKwlXSU5ET1cgKmZvcm1fd2luOworCVBBTkVM
ICpwYW5lbDsKKwlpbnQgaSwgeCwgeSwgbGluZXMsIGNvbHVtbnMsIHdpbl9saW5lcywgd2luX2Nv
bHM7CisJaW50IHJlcyA9IC0xOworCWludCBjdXJzb3JfcG9zaXRpb24gPSBzdHJsZW4oaW5pdCk7
CisJaW50IGN1cnNvcl9mb3JtX3dpbjsKKwljaGFyICpyZXN1bHQgPSAqcmVzdWx0cDsKKworCWdl
dG1heHl4KHN0ZHNjciwgbGluZXMsIGNvbHVtbnMpOworCisJaWYgKHN0cmxlbihpbml0KSsxID4g
KnJlc3VsdF9sZW4pIHsKKwkJKnJlc3VsdF9sZW4gPSBzdHJsZW4oaW5pdCkrMTsKKwkJKnJlc3Vs
dHAgPSByZXN1bHQgPSB4cmVhbGxvYyhyZXN1bHQsICpyZXN1bHRfbGVuKTsKKwl9CisKKwkvKiBm
aW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovCisJcHJvbXB0X2xpbmVzID0gZ2V0X2xpbmVf
bm8ocHJvbXB0KTsKKwlmb3IgKGkgPSAwOyBpIDwgcHJvbXB0X2xpbmVzOyBpKyspIHsKKwkJY29u
c3QgY2hhciAqbGluZSA9IGdldF9saW5lKHByb21wdCwgaSk7CisJCWludCBsZW4gPSBnZXRfbGlu
ZV9sZW5ndGgobGluZSk7CisJCXByb21wdF93aWR0aCA9IG1heChwcm9tcHRfd2lkdGgsIGxlbik7
CisJfQorCisJaWYgKHRpdGxlKQorCQlwcm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBz
dHJsZW4odGl0bGUpKTsKKworCXdpbl9saW5lcyA9IG1pbihwcm9tcHRfbGluZXMrNiwgbGluZXMt
Mik7CisJd2luX2NvbHMgPSBtaW4ocHJvbXB0X3dpZHRoKzcsIGNvbHVtbnMtMik7CisJcHJvbXB0
X2xpbmVzID0gbWF4KHdpbl9saW5lcy02LCAwKTsKKwlwcm9tcHRfd2lkdGggPSBtYXgod2luX2Nv
bHMtNywgMCk7CisKKwkvKiBwbGFjZSBkaWFsb2cgaW4gbWlkZGxlIG9mIHNjcmVlbiAqLworCXkg
PSAobGluZXMtd2luX2xpbmVzKS8yOworCXggPSAoY29sdW1ucy13aW5fY29scykvMjsKKworCXN0
cm5jcHkocmVzdWx0LCBpbml0LCAqcmVzdWx0X2xlbik7CisKKwkvKiBjcmVhdGUgdGhlIHdpbmRv
d3MgKi8KKwl3aW4gPSBuZXd3aW4od2luX2xpbmVzLCB3aW5fY29scywgeSwgeCk7CisJcHJvbXB0
X3dpbiA9IGRlcndpbih3aW4sIHByb21wdF9saW5lcysxLCBwcm9tcHRfd2lkdGgsIDIsIDIpOwor
CWZvcm1fd2luID0gZGVyd2luKHdpbiwgMSwgcHJvbXB0X3dpZHRoLCBwcm9tcHRfbGluZXMrMywg
Mik7CisJa2V5cGFkKGZvcm1fd2luLCBUUlVFKTsKKworCSh2b2lkKSB3YXR0cnNldChmb3JtX3dp
biwgYXR0cmlidXRlc1tJTlBVVF9GSUVMRF0pOworCisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0
cmlidXRlc1tJTlBVVF9CT1hdKTsKKwlib3god2luLCAwLCAwKTsKKwkodm9pZCkgd2F0dHJzZXQo
d2luLCBhdHRyaWJ1dGVzW0lOUFVUX0hFQURJTkddKTsKKwlpZiAodGl0bGUpCisJCW12d3ByaW50
dyh3aW4sIDAsIDMsICIlcyIsIHRpdGxlKTsKKworCS8qIHByaW50IG1lc3NhZ2UgKi8KKwkodm9p
ZCkgd2F0dHJzZXQocHJvbXB0X3dpbiwgYXR0cmlidXRlc1tJTlBVVF9URVhUXSk7CisJZmlsbF93
aW5kb3cocHJvbXB0X3dpbiwgcHJvbXB0KTsKKworCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwg
IiUqcyIsIHByb21wdF93aWR0aCwgIiAiKTsKKwljdXJzb3JfZm9ybV93aW4gPSBtaW4oY3Vyc29y
X3Bvc2l0aW9uLCBwcm9tcHRfd2lkdGgtMSk7CisJbXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAi
JXMiLAorCQkgIHJlc3VsdCArIGN1cnNvcl9wb3NpdGlvbi1jdXJzb3JfZm9ybV93aW4pOworCisJ
LyogY3JlYXRlIHBhbmVscyAqLworCXBhbmVsID0gbmV3X3BhbmVsKHdpbik7CisKKwkvKiBzaG93
IHRoZSBjdXJzb3IgKi8KKwljdXJzX3NldCgxKTsKKworCXRvdWNod2luKHdpbik7CisJcmVmcmVz
aF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisJd2hpbGUgKChyZXMgPSB3Z2V0Y2goZm9ybV93
aW4pKSkgeworCQlpbnQgbGVuID0gc3RybGVuKHJlc3VsdCk7CisJCXN3aXRjaCAocmVzKSB7CisJ
CWNhc2UgMTA6IC8qIEVOVEVSICovCisJCWNhc2UgMjc6IC8qIEVTQ0FQRSAqLworCQljYXNlIEtF
WV9GKEZfSEVMUCk6CisJCWNhc2UgS0VZX0YoRl9FWElUKToKKwkJY2FzZSBLRVlfRihGX0JBQ0sp
OgorCQkJYnJlYWs7CisJCWNhc2UgODogICAvKiBeSCAqLworCQljYXNlIDEyNzogLyogXj8gKi8K
KwkJY2FzZSBLRVlfQkFDS1NQQUNFOgorCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA+IDApIHsKKwkJ
CQltZW1tb3ZlKCZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uLTFdLAorCQkJCQkJJnJlc3VsdFtjdXJz
b3JfcG9zaXRpb25dLAorCQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlvbisxKTsKKwkJCQljdXJzb3Jf
cG9zaXRpb24tLTsKKwkJCQljdXJzb3JfZm9ybV93aW4tLTsKKwkJCQlsZW4tLTsKKwkJCX0KKwkJ
CWJyZWFrOworCQljYXNlIEtFWV9EQzoKKwkJCWlmIChjdXJzb3JfcG9zaXRpb24gPj0gMCAmJiBj
dXJzb3JfcG9zaXRpb24gPCBsZW4pIHsKKwkJCQltZW1tb3ZlKCZyZXN1bHRbY3Vyc29yX3Bvc2l0
aW9uXSwKKwkJCQkJCSZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uKzFdLAorCQkJCQkJbGVuLWN1cnNv
cl9wb3NpdGlvbisxKTsKKwkJCQlsZW4tLTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEtFWV9V
UDoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uIDwgbGVuKSB7CisJ
CQkJY3Vyc29yX3Bvc2l0aW9uKys7CisJCQkJY3Vyc29yX2Zvcm1fd2luKys7CisJCQl9CisJCQli
cmVhazsKKwkJY2FzZSBLRVlfRE9XTjoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJCWlmIChjdXJzb3Jf
cG9zaXRpb24gPiAwKSB7CisJCQkJY3Vyc29yX3Bvc2l0aW9uLS07CisJCQkJY3Vyc29yX2Zvcm1f
d2luLS07CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBLRVlfSE9NRToKKwkJCWN1cnNvcl9wb3Np
dGlvbiA9IDA7CisJCQljdXJzb3JfZm9ybV93aW4gPSAwOworCQkJYnJlYWs7CisJCWNhc2UgS0VZ
X0VORDoKKwkJCWN1cnNvcl9wb3NpdGlvbiA9IGxlbjsKKwkJCWN1cnNvcl9mb3JtX3dpbiA9IG1p
bihjdXJzb3JfcG9zaXRpb24sIHByb21wdF93aWR0aC0xKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJaWYgKChpc2dyYXBoKHJlcykgfHwgaXNzcGFjZShyZXMpKSkgeworCQkJCS8qIG9uZSBm
b3IgbmV3IGNoYXIsIG9uZSBmb3IgJ1wwJyAqLworCQkJCWlmIChsZW4rMiA+ICpyZXN1bHRfbGVu
KSB7CisJCQkJCSpyZXN1bHRfbGVuID0gbGVuKzI7CisJCQkJCSpyZXN1bHRwID0gcmVzdWx0ID0g
cmVhbGxvYyhyZXN1bHQsCisJCQkJCQkJCSpyZXN1bHRfbGVuKTsKKwkJCQl9CisJCQkJLyogaW5z
ZXJ0IHRoZSBjaGFyIGF0IHRoZSBwcm9wZXIgcG9zaXRpb24gKi8KKwkJCQltZW1tb3ZlKCZyZXN1
bHRbY3Vyc29yX3Bvc2l0aW9uKzFdLAorCQkJCQkJJnJlc3VsdFtjdXJzb3JfcG9zaXRpb25dLAor
CQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlvbisxKTsKKwkJCQlyZXN1bHRbY3Vyc29yX3Bvc2l0aW9u
XSA9IHJlczsKKwkJCQljdXJzb3JfcG9zaXRpb24rKzsKKwkJCQljdXJzb3JfZm9ybV93aW4rKzsK
KwkJCQlsZW4rKzsKKwkJCX0gZWxzZSB7CisJCQkJbXZwcmludHcoMCwgMCwgInVua25vd24ga2V5
OiAlZFxuIiwgcmVzKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChjdXJzb3JfZm9ybV93
aW4gPCAwKQorCQkJY3Vyc29yX2Zvcm1fd2luID0gMDsKKwkJZWxzZSBpZiAoY3Vyc29yX2Zvcm1f
d2luID4gcHJvbXB0X3dpZHRoLTEpCisJCQljdXJzb3JfZm9ybV93aW4gPSBwcm9tcHRfd2lkdGgt
MTsKKworCQl3bW92ZShmb3JtX3dpbiwgMCwgMCk7CisJCXdjbHJ0b2VvbChmb3JtX3dpbik7CisJ
CW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiUqcyIsIHByb21wdF93aWR0aCwgIiAiKTsKKwkJ
bXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAiJXMiLAorCQkJcmVzdWx0ICsgY3Vyc29yX3Bvc2l0
aW9uLWN1cnNvcl9mb3JtX3dpbik7CisJCXdtb3ZlKGZvcm1fd2luLCAwLCBjdXJzb3JfZm9ybV93
aW4pOworCQl0b3VjaHdpbih3aW4pOworCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93
KTsKKworCQlpZiAocmVzID09IDEwKSB7CisJCQlyZXMgPSAwOworCQkJYnJlYWs7CisJCX0gZWxz
ZSBpZiAocmVzID09IDI3IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8CisJCQkJcmVzID09IEtF
WV9GKEZfRVhJVCkpIHsKKwkJCXJlcyA9IEtFWV9FWElUOworCQkJYnJlYWs7CisJCX0gZWxzZSBp
ZiAocmVzID09IEtFWV9GKEZfSEVMUCkpIHsKKwkJCXJlcyA9IDE7CisJCQlicmVhazsKKwkJfQor
CX0KKworCS8qIGhpZGUgdGhlIGN1cnNvciAqLworCWN1cnNfc2V0KDApOworCWRlbF9wYW5lbChw
YW5lbCk7CisJZGVsd2luKHByb21wdF93aW4pOworCWRlbHdpbihmb3JtX3dpbik7CisJZGVsd2lu
KHdpbik7CisJcmV0dXJuIHJlczsKK30KKworLyogcmVmcmVzaCBhbGwgd2luZG93cyBpbiB0aGUg
Y29ycmVjdCBvcmRlciAqLwordm9pZCByZWZyZXNoX2FsbF93aW5kb3dzKFdJTkRPVyAqbWFpbl93
aW5kb3cpCit7CisJdXBkYXRlX3BhbmVscygpOworCXRvdWNod2luKG1haW5fd2luZG93KTsKKwly
ZWZyZXNoKCk7Cit9CisKKy8qIGxheW1hbidzIHNjcm9sbGFibGUgd2luZG93Li4uICovCit2b2lk
IHNob3dfc2Nyb2xsX3dpbihXSU5ET1cgKm1haW5fd2luZG93LAorCQljb25zdCBjaGFyICp0aXRs
ZSwKKwkJY29uc3QgY2hhciAqdGV4dCkKK3sKKwlpbnQgcmVzOworCWludCB0b3RhbF9saW5lcyA9
IGdldF9saW5lX25vKHRleHQpOworCWludCB4LCB5LCBsaW5lcywgY29sdW1uczsKKwlpbnQgc3Rh
cnRfeCA9IDAsIHN0YXJ0X3kgPSAwOworCWludCB0ZXh0X2xpbmVzID0gMCwgdGV4dF9jb2xzID0g
MDsKKwlpbnQgdG90YWxfY29scyA9IDA7CisJaW50IHdpbl9jb2xzID0gMDsKKwlpbnQgd2luX2xp
bmVzID0gMDsKKwlpbnQgaSA9IDA7CisJV0lORE9XICp3aW47CisJV0lORE9XICpwYWQ7CisJUEFO
RUwgKnBhbmVsOworCisJZ2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7CisKKwkvKiBm
aW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovCisJdG90YWxfbGluZXMgPSBnZXRfbGluZV9u
byh0ZXh0KTsKKwlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbGluZXM7IGkrKykgeworCQljb25zdCBj
aGFyICpsaW5lID0gZ2V0X2xpbmUodGV4dCwgaSk7CisJCWludCBsZW4gPSBnZXRfbGluZV9sZW5n
dGgobGluZSk7CisJCXRvdGFsX2NvbHMgPSBtYXgodG90YWxfY29scywgbGVuKzIpOworCX0KKwor
CS8qIGNyZWF0ZSB0aGUgcGFkICovCisJcGFkID0gbmV3cGFkKHRvdGFsX2xpbmVzKzEwLCB0b3Rh
bF9jb2xzKzEwKTsKKwkodm9pZCkgd2F0dHJzZXQocGFkLCBhdHRyaWJ1dGVzW1NDUk9MTFdJTl9U
RVhUXSk7CisJZmlsbF93aW5kb3cocGFkLCB0ZXh0KTsKKworCXdpbl9saW5lcyA9IG1pbih0b3Rh
bF9saW5lcys0LCBsaW5lcy0yKTsKKwl3aW5fY29scyA9IG1pbih0b3RhbF9jb2xzKzIsIGNvbHVt
bnMtMik7CisJdGV4dF9saW5lcyA9IG1heCh3aW5fbGluZXMtNCwgMCk7CisJdGV4dF9jb2xzID0g
bWF4KHdpbl9jb2xzLTIsIDApOworCisJLyogcGxhY2Ugd2luZG93IGluIG1pZGRsZSBvZiBzY3Jl
ZW4gKi8KKwl5ID0gKGxpbmVzLXdpbl9saW5lcykvMjsKKwl4ID0gKGNvbHVtbnMtd2luX2NvbHMp
LzI7CisKKwl3aW4gPSBuZXd3aW4od2luX2xpbmVzLCB3aW5fY29scywgeSwgeCk7CisJa2V5cGFk
KHdpbiwgVFJVRSk7CisJLyogc2hvdyB0aGUgaGVscCBpbiB0aGUgaGVscCB3aW5kb3csIGFuZCBz
aG93IHRoZSBoZWxwIHBhbmVsICovCisJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tT
Q1JPTExXSU5fQk9YXSk7CisJYm94KHdpbiwgMCwgMCk7CisJKHZvaWQpIHdhdHRyc2V0KHdpbiwg
YXR0cmlidXRlc1tTQ1JPTExXSU5fSEVBRElOR10pOworCW12d3ByaW50dyh3aW4sIDAsIDMsICIg
JXMgIiwgdGl0bGUpOworCXBhbmVsID0gbmV3X3BhbmVsKHdpbik7CisKKwkvKiBoYW5kbGUgc2Ny
b2xsaW5nICovCisJZG8geworCisJCWNvcHl3aW4ocGFkLCB3aW4sIHN0YXJ0X3ksIHN0YXJ0X3gs
IDIsIDIsIHRleHRfbGluZXMsCisJCQkJdGV4dF9jb2xzLCAwKTsKKwkJcHJpbnRfaW5fbWlkZGxl
KHdpbiwKKwkJCQl0ZXh0X2xpbmVzKzIsCisJCQkJMCwKKwkJCQl0ZXh0X2NvbHMsCisJCQkJIjxP
Sz4iLAorCQkJCWF0dHJpYnV0ZXNbRElBTE9HX01FTlVfRk9SRV0pOworCQl3cmVmcmVzaCh3aW4p
OworCisJCXJlcyA9IHdnZXRjaCh3aW4pOworCQlzd2l0Y2ggKHJlcykgeworCQljYXNlIEtFWV9O
UEFHRToKKwkJY2FzZSAnICc6CisJCWNhc2UgJ2QnOgorCQkJc3RhcnRfeSArPSB0ZXh0X2xpbmVz
LTI7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfUFBBR0U6CisJCWNhc2UgJ3UnOgorCQkJc3RhcnRf
eSAtPSB0ZXh0X2xpbmVzKzI7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfSE9NRToKKwkJCXN0YXJ0
X3kgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VORDoKKwkJCXN0YXJ0X3kgPSB0b3RhbF9s
aW5lcy10ZXh0X2xpbmVzOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0RPV046CisJCWNhc2UgJ2on
OgorCQkJc3RhcnRfeSsrOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1VQOgorCQljYXNlICdrJzoK
KwkJCXN0YXJ0X3ktLTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9MRUZUOgorCQljYXNlICdoJzoK
KwkJCXN0YXJ0X3gtLTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SSUdIVDoKKwkJY2FzZSAnbCc6
CisJCQlzdGFydF94Kys7CisJCQlicmVhazsKKwkJfQorCQlpZiAocmVzID09IDEwIHx8IHJlcyA9
PSAyNyB8fCByZXMgPT0gJ3EnIHx8CisJCQlyZXMgPT0gS0VZX0YoRl9IRUxQKSB8fCByZXMgPT0g
S0VZX0YoRl9CQUNLKSB8fAorCQkJcmVzID09IEtFWV9GKEZfRVhJVCkpCisJCQlicmVhazsKKwkJ
aWYgKHN0YXJ0X3kgPCAwKQorCQkJc3RhcnRfeSA9IDA7CisJCWlmIChzdGFydF95ID49IHRvdGFs
X2xpbmVzLXRleHRfbGluZXMpCisJCQlzdGFydF95ID0gdG90YWxfbGluZXMtdGV4dF9saW5lczsK
KwkJaWYgKHN0YXJ0X3ggPCAwKQorCQkJc3RhcnRfeCA9IDA7CisJCWlmIChzdGFydF94ID49IHRv
dGFsX2NvbHMtdGV4dF9jb2xzKQorCQkJc3RhcnRfeCA9IHRvdGFsX2NvbHMtdGV4dF9jb2xzOwor
CX0gd2hpbGUgKHJlcyk7CisKKwlkZWxfcGFuZWwocGFuZWwpOworCWRlbHdpbih3aW4pOworCXJl
ZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9uY29uZi5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTI0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L25jb25mLmgKQEAgLTAsMCArMSw5MiBAQAorLyogU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmly
IFR6YWNoYXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT4KKyAqCisgKiBEZXJpdmVkIGZyb20gbWVu
dWNvbmZpZy4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
dW5pc3RkLmg+CisjaW5jbHVkZSA8bmN1cnNlcy5oPgorI2luY2x1ZGUgPG1lbnUuaD4KKyNpbmNs
dWRlIDxwYW5lbC5oPgorI2luY2x1ZGUgPGZvcm0uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisKKyNkZWZpbmUgbWF4KGEs
IGIpICh7XAorCQl0eXBlb2YoYSkgX2EgPSBhO1wKKwkJdHlwZW9mKGIpIF9iID0gYjtcCisJCV9h
ID4gX2IgPyBfYSA6IF9iOyB9KQorCisjZGVmaW5lIG1pbihhLCBiKSAoe1wKKwkJdHlwZW9mKGEp
IF9hID0gYTtcCisJCXR5cGVvZihiKSBfYiA9IGI7XAorCQlfYSA8IF9iID8gX2EgOiBfYjsgfSkK
KwordHlwZWRlZiBlbnVtIHsKKwlOT1JNQUwgPSAxLAorCU1BSU5fSEVBRElORywKKwlNQUlOX01F
TlVfQk9YLAorCU1BSU5fTUVOVV9GT1JFLAorCU1BSU5fTUVOVV9CQUNLLAorCU1BSU5fTUVOVV9H
UkVZLAorCU1BSU5fTUVOVV9IRUFESU5HLAorCVNDUk9MTFdJTl9URVhULAorCVNDUk9MTFdJTl9I
RUFESU5HLAorCVNDUk9MTFdJTl9CT1gsCisJRElBTE9HX1RFWFQsCisJRElBTE9HX01FTlVfRk9S
RSwKKwlESUFMT0dfTUVOVV9CQUNLLAorCURJQUxPR19CT1gsCisJSU5QVVRfQk9YLAorCUlOUFVU
X0hFQURJTkcsCisJSU5QVVRfVEVYVCwKKwlJTlBVVF9GSUVMRCwKKwlGVU5DVElPTl9URVhULAor
CUZVTkNUSU9OX0hJR0hMSUdIVCwKKwlBVFRSX01BWAorfSBhdHRyaWJ1dGVzX3Q7CitleHRlcm4g
YXR0cmlidXRlc190IGF0dHJpYnV0ZXNbXTsKKwordHlwZWRlZiBlbnVtIHsKKwlGX0hFTFAgPSAx
LAorCUZfU1lNQk9MID0gMiwKKwlGX0lOU1RTID0gMywKKwlGX0NPTkYgPSA0LAorCUZfQkFDSyA9
IDUsCisJRl9TQVZFID0gNiwKKwlGX0xPQUQgPSA3LAorCUZfU0VBUkNIID0gOCwKKwlGX0VYSVQg
PSA5LAorfSBmdW5jdGlvbl9rZXk7CisKK3ZvaWQgc2V0X2NvbG9ycyh2b2lkKTsKKworLyogdGhp
cyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICovCit2b2lkIHByaW50X2luX21p
ZGRsZShXSU5ET1cgKndpbiwKKwkJaW50IHN0YXJ0eSwKKwkJaW50IHN0YXJ0eCwKKwkJaW50IHdp
ZHRoLAorCQljb25zdCBjaGFyICpzdHJpbmcsCisJCWNodHlwZSBjb2xvcik7CitpbnQgZ2V0X2xp
bmVfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmUpOworaW50IGdldF9saW5lX25vKGNvbnN0IGNoYXIg
KnRleHQpOworY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVf
bm8pOwordm9pZCBmaWxsX3dpbmRvdyhXSU5ET1cgKndpbiwgY29uc3QgY2hhciAqdGV4dCk7Citp
bnQgYnRuX2RpYWxvZyhXSU5ET1cgKm1haW5fd2luZG93LCBjb25zdCBjaGFyICptc2csIGludCBi
dG5fbnVtLCAuLi4pOworaW50IGRpYWxvZ19pbnB1dGJveChXSU5ET1cgKm1haW5fd2luZG93LAor
CQljb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LAorCQljb25zdCBjaGFyICpp
bml0LCBjaGFyICoqcmVzdWx0cCwgaW50ICpyZXN1bHRfbGVuKTsKK3ZvaWQgcmVmcmVzaF9hbGxf
d2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93KTsKK3ZvaWQgc2hvd19zY3JvbGxfd2luKFdJTkRP
VyAqbWFpbl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxlLAorCQljb25zdCBjaGFyICp0ZXh0
KTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkgYi9zdXBwb3J0L2tj
b25maWcubmV3L3BhcnNlci55Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYw
OTM2YzcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55CkBA
IC0wLDAgKzEsNzMxIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhr
Lm9yZz4KKyAqLworJXsKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmlu
ZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQor
CisjZGVmaW5lIFBSSU5URAkJMHgwMDAxCisjZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgorCitp
bnQgY2RlYnVnID0gUFJJTlREOworCitzdGF0aWMgdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKmVy
cik7CitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRp
YyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKK3N0YXRpYyBib29sIHpj
b25mX2VuZHRva2VuKGNvbnN0IGNoYXIgKnRva2VubmFtZSwKKwkJCSAgIGNvbnN0IGNoYXIgKmV4
cGVjdGVkX3Rva2VubmFtZSk7CisKK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZTUJPTF9I
QVNIU0laRV07CisKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9l
bnRyeTsKKworJX0KKworJXVuaW9uCit7CisJY2hhciAqc3RyaW5nOworCXN0cnVjdCBzeW1ib2wg
KnN5bWJvbDsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwllbnVt
IHN5bWJvbF90eXBlIHR5cGU7CisJZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOworfQorCisl
dG9rZW4gPHN0cmluZz4gVF9IRUxQVEVYVAorJXRva2VuIDxzdHJpbmc+IFRfV09SRAorJXRva2Vu
IDxzdHJpbmc+IFRfV09SRF9RVU9URQorJXRva2VuIFRfQUxMTk9DT05GSUdfWQorJXRva2VuIFRf
Qk9PTAorJXRva2VuIFRfQ0hPSUNFCisldG9rZW4gVF9DTE9TRV9QQVJFTgorJXRva2VuIFRfQ09M
T05fRVFVQUwKKyV0b2tlbiBUX0NPTU1FTlQKKyV0b2tlbiBUX0NPTkZJRworJXRva2VuIFRfREVG
QVVMVAorJXRva2VuIFRfREVGQ09ORklHX0xJU1QKKyV0b2tlbiBUX0RFRl9CT09MCisldG9rZW4g
VF9ERUZfVFJJU1RBVEUKKyV0b2tlbiBUX0RFUEVORFMKKyV0b2tlbiBUX0VORENIT0lDRQorJXRv
a2VuIFRfRU5ESUYKKyV0b2tlbiBUX0VORE1FTlUKKyV0b2tlbiBUX0hFTFAKKyV0b2tlbiBUX0hF
WAorJXRva2VuIFRfSUYKKyV0b2tlbiBUX0lNUExZCisldG9rZW4gVF9JTlQKKyV0b2tlbiBUX01B
SU5NRU5VCisldG9rZW4gVF9NRU5VCisldG9rZW4gVF9NRU5VQ09ORklHCisldG9rZW4gVF9NT0RV
TEVTCisldG9rZW4gVF9PTgorJXRva2VuIFRfT1BFTl9QQVJFTgorJXRva2VuIFRfT1BUSU9OCisl
dG9rZW4gVF9PUFRJT05BTAorJXRva2VuIFRfUExVU19FUVVBTAorJXRva2VuIFRfUFJPTVBUCisl
dG9rZW4gVF9SQU5HRQorJXRva2VuIFRfU0VMRUNUCisldG9rZW4gVF9TT1VSQ0UKKyV0b2tlbiBU
X1NUUklORworJXRva2VuIFRfVFJJU1RBVEUKKyV0b2tlbiBUX1ZJU0lCTEUKKyV0b2tlbiBUX0VP
TAorJXRva2VuIDxzdHJpbmc+IFRfQVNTSUdOX1ZBTAorCislbGVmdCBUX09SCislbGVmdCBUX0FO
RAorJWxlZnQgVF9FUVVBTCBUX1VORVFVQUwKKyVsZWZ0IFRfTEVTUyBUX0xFU1NfRVFVQUwgVF9H
UkVBVEVSIFRfR1JFQVRFUl9FUVVBTAorJW5vbmFzc29jIFRfTk9UCisKKyV0eXBlIDxzdHJpbmc+
IHByb21wdAorJXR5cGUgPHN5bWJvbD4gbm9uY29uc3Rfc3ltYm9sCisldHlwZSA8c3ltYm9sPiBz
eW1ib2wKKyV0eXBlIDx0eXBlPiB0eXBlIGxvZ2ljX3R5cGUgZGVmYXVsdAorJXR5cGUgPGV4cHI+
IGV4cHIKKyV0eXBlIDxleHByPiBpZl9leHByCisldHlwZSA8c3RyaW5nPiBlbmQKKyV0eXBlIDxt
ZW51PiBpZl9lbnRyeSBtZW51X2VudHJ5IGNob2ljZV9lbnRyeQorJXR5cGUgPHN0cmluZz4gd29y
ZF9vcHQgYXNzaWduX3ZhbAorJXR5cGUgPGZsYXZvcj4gYXNzaWduX29wCisKKyVkZXN0cnVjdG9y
IHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRo
aXMgZW50cnlcbiIsCisJCSQkLT5maWxlLT5uYW1lLCAkJC0+bGluZW5vKTsKKwlpZiAoY3VycmVu
dF9tZW51ID09ICQkKQorCQltZW51X2VuZF9tZW51KCk7Cit9IGlmX2VudHJ5IG1lbnVfZW50cnkg
Y2hvaWNlX2VudHJ5CisKKyUlCitpbnB1dDogbWFpbm1lbnVfc3RtdCBzdG10X2xpc3QgfCBzdG10
X2xpc3Q7CisKKy8qIG1haW5tZW51IGVudHJ5ICovCisKK21haW5tZW51X3N0bXQ6IFRfTUFJTk1F
TlUgcHJvbXB0IFRfRU9MCit7CisJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5VTEwpOwor
fTsKKworc3RtdF9saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IHN0bXRfbGlzdCBjb21tb25fc3Rt
dAorCXwgc3RtdF9saXN0IGNob2ljZV9zdG10CisJfCBzdG10X2xpc3QgbWVudV9zdG10CisJfCBz
dG10X2xpc3QgVF9XT1JEIGVycm9yIFRfRU9MCXsgemNvbmZfZXJyb3IoInVua25vd24gc3RhdGVt
ZW50IFwiJXNcIiIsICQyKTsgfQorCXwgc3RtdF9saXN0IGVycm9yIFRfRU9MCQl7IHpjb25mX2Vy
cm9yKCJpbnZhbGlkIHN0YXRlbWVudCIpOyB9Cis7CisKK2NvbW1vbl9zdG10OgorCSAgaWZfc3Rt
dAorCXwgY29tbWVudF9zdG10CisJfCBjb25maWdfc3RtdAorCXwgbWVudWNvbmZpZ19zdG10CisJ
fCBzb3VyY2Vfc3RtdAorCXwgYXNzaWdubWVudF9zdG10Cis7CisKKy8qIGNvbmZpZy9tZW51Y29u
ZmlnIGVudHJ5ICovCisKK2NvbmZpZ19lbnRyeV9zdGFydDogVF9DT05GSUcgbm9uY29uc3Rfc3lt
Ym9sIFRfRU9MCit7CisJJDItPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwltZW51X2FkZF9l
bnRyeSgkMik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7Cit9OworCitjb25maWdfc3Rt
dDogY29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlzdAoreworCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSk7Cit9OworCittZW51Y29uZmlnX2VudHJ5X3N0YXJ0OiBUX01FTlVDT05GSUcgbm9uY29u
c3Rfc3ltYm9sIFRfRU9MCit7CisJJDItPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwltZW51
X2FkZF9lbnRyeSgkMik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudWNvbmZpZyAl
c1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDItPm5hbWUpOworfTsKKwor
bWVudWNvbmZpZ19zdG10OiBtZW51Y29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlz
dAoreworCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCisJCWN1cnJlbnRfZW50cnktPnByb21w
dC0+dHlwZSA9IFBfTUVOVTsKKwllbHNlCisJCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25m
aWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisK
K2NvbmZpZ19vcHRpb25fbGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBjb25maWdfb3B0aW9uX2xp
c3QgY29uZmlnX29wdGlvbgorCXwgY29uZmlnX29wdGlvbl9saXN0IGRlcGVuZHMKKwl8IGNvbmZp
Z19vcHRpb25fbGlzdCBoZWxwCis7CisKK2NvbmZpZ19vcHRpb246IHR5cGUgcHJvbXB0X3N0bXRf
b3B0IFRfRU9MCit7CisJbWVudV9zZXRfdHlwZSgkMSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAi
JXM6JWQ6dHlwZSgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJ
CSQxKTsKK307CisKK2NvbmZpZ19vcHRpb246IFRfUFJPTVBUIHByb21wdCBpZl9leHByIFRfRU9M
Cit7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMiwgJDMpOworCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Cit9OworCitjb25maWdfb3B0aW9uOiBkZWZhdWx0IGV4cHIgaWZfZXhwciBUX0VPTAoreworCW1l
bnVfYWRkX2V4cHIoUF9ERUZBVUxULCAkMiwgJDMpOworCWlmICgkMSAhPSBTX1VOS05PV04pCisJ
CW1lbnVfc2V0X3R5cGUoJDEpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHQo
JXUpXG4iLAorCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkkMSk7Cit9Owor
Citjb25maWdfb3B0aW9uOiBUX1NFTEVDVCBub25jb25zdF9zeW1ib2wgaWZfZXhwciBUX0VPTAor
eworCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgJDIsICQzKTsKKwlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDpzZWxlY3RcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwor
fTsKKworY29uZmlnX29wdGlvbjogVF9JTVBMWSBub25jb25zdF9zeW1ib2wgaWZfZXhwciBUX0VP
TAoreworCW1lbnVfYWRkX3N5bWJvbChQX0lNUExZLCAkMiwgJDMpOworCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOmltcGx5XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
K307CisKK2NvbmZpZ19vcHRpb246IFRfUkFOR0Ugc3ltYm9sIHN5bWJvbCBpZl9leHByIFRfRU9M
Cit7CisJbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9SQU5HRSwkMiwg
JDMpLCAkNCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cmFuZ2VcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY29uZmlnX29wdGlvbjogVF9PUFRJT04g
VF9NT0RVTEVTIFRfRU9MCit7CisJbWVudV9hZGRfb3B0aW9uX21vZHVsZXMoKTsKK307CisKK2Nv
bmZpZ19vcHRpb246IFRfT1BUSU9OIFRfREVGQ09ORklHX0xJU1QgVF9FT0wKK3sKKwltZW51X2Fk
ZF9vcHRpb25fZGVmY29uZmlnX2xpc3QoKTsKK307CisKK2NvbmZpZ19vcHRpb246IFRfT1BUSU9O
IFRfQUxMTk9DT05GSUdfWSBUX0VPTAoreworCW1lbnVfYWRkX29wdGlvbl9hbGxub2NvbmZpZ195
KCk7Cit9OworCisvKiBjaG9pY2UgZW50cnkgKi8KKworY2hvaWNlOiBUX0NIT0lDRSB3b3JkX29w
dCBUX0VPTAoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIFNZTUJPTF9D
SE9JQ0UpOworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX05PX1dSSVRFOworCW1lbnVfYWRkX2VudHJ5
KHN5bSk7CisJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7CisJZnJlZSgkMik7
CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1lKCks
IHpjb25mX2xpbmVubygpKTsKK307CisKK2Nob2ljZV9lbnRyeTogY2hvaWNlIGNob2ljZV9vcHRp
b25fbGlzdAoreworCSQkID0gbWVudV9hZGRfbWVudSgpOworfTsKKworY2hvaWNlX2VuZDogZW5k
Cit7CisJaWYgKHpjb25mX2VuZHRva2VuKCQxLCAiY2hvaWNlIikpIHsKKwkJbWVudV9lbmRfbWVu
dSgpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2VcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK307CisKK2Nob2ljZV9zdG10OiBjaG9pY2Vf
ZW50cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQKKzsKKworY2hvaWNlX29wdGlvbl9saXN0Ogor
CSAgLyogZW1wdHkgKi8KKwl8IGNob2ljZV9vcHRpb25fbGlzdCBjaG9pY2Vfb3B0aW9uCisJfCBj
aG9pY2Vfb3B0aW9uX2xpc3QgZGVwZW5kcworCXwgY2hvaWNlX29wdGlvbl9saXN0IGhlbHAKKzsK
KworY2hvaWNlX29wdGlvbjogVF9QUk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wKK3sKKwltZW51
X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQyLCAkMyk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK2No
b2ljZV9vcHRpb246IGxvZ2ljX3R5cGUgcHJvbXB0X3N0bXRfb3B0IFRfRU9MCit7CisJbWVudV9z
ZXRfdHlwZSgkMSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJ
ICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQxKTsKK307CisKK2Nob2lj
ZV9vcHRpb246IFRfT1BUSU9OQUwgVF9FT0wKK3sKKwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdz
IHw9IFNZTUJPTF9PUFRJT05BTDsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpvcHRpb25h
bFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjaG9pY2Vfb3B0
aW9uOiBUX0RFRkFVTFQgbm9uY29uc3Rfc3ltYm9sIGlmX2V4cHIgVF9FT0wKK3sKKwltZW51X2Fk
ZF9zeW1ib2woUF9ERUZBVUxULCAkMiwgJDMpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk
OmRlZmF1bHRcbiIsCisJICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwor
fTsKKwordHlwZToKKwkgIGxvZ2ljX3R5cGUKKwl8IFRfSU5UCQkJeyAkJCA9IFNfSU5UOyB9CisJ
fCBUX0hFWAkJCXsgJCQgPSBTX0hFWDsgfQorCXwgVF9TVFJJTkcJCXsgJCQgPSBTX1NUUklORzsg
fQorCitsb2dpY190eXBlOgorCSAgVF9CT09MCQl7ICQkID0gU19CT09MRUFOOyB9CisJfCBUX1RS
SVNUQVRFCQl7ICQkID0gU19UUklTVEFURTsgfQorCitkZWZhdWx0OgorCSAgVF9ERUZBVUxUCQl7
ICQkID0gU19VTktOT1dOOyB9CisJfCBUX0RFRl9CT09MCQl7ICQkID0gU19CT09MRUFOOyB9CisJ
fCBUX0RFRl9UUklTVEFURQl7ICQkID0gU19UUklTVEFURTsgfQorCitjaG9pY2VfYmxvY2s6CisJ
ICAvKiBlbXB0eSAqLworCXwgY2hvaWNlX2Jsb2NrIGNvbW1vbl9zdG10Cis7CisKKy8qIGlmIGVu
dHJ5ICovCisKK2lmX2VudHJ5OiBUX0lGIGV4cHIgVF9FT0wKK3sKKwlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJbWVu
dV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfZGVwKCQyKTsKKwkkJCA9IG1lbnVfYWRkX21l
bnUoKTsKK307CisKK2lmX2VuZDogZW5kCit7CisJaWYgKHpjb25mX2VuZHRva2VuKCQxLCAiaWYi
KSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVu
ZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9Cit9OworCitpZl9z
dG10OiBpZl9lbnRyeSBzdG10X2xpc3QgaWZfZW5kCis7CisKKy8qIG1lbnUgZW50cnkgKi8KKwor
bWVudTogVF9NRU5VIHByb21wdCBUX0VPTAoreworCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1l
bnVfYWRkX3Byb21wdChQX01FTlUsICQyLCBOVUxMKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIl
czolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK21l
bnVfZW50cnk6IG1lbnUgbWVudV9vcHRpb25fbGlzdAoreworCSQkID0gbWVudV9hZGRfbWVudSgp
OworfTsKKworbWVudV9lbmQ6IGVuZAoreworCWlmICh6Y29uZl9lbmR0b2tlbigkMSwgIm1lbnUi
KSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVu
ZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0KK307CisKK21l
bnVfc3RtdDogbWVudV9lbnRyeSBzdG10X2xpc3QgbWVudV9lbmQKKzsKKworbWVudV9vcHRpb25f
bGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBtZW51X29wdGlvbl9saXN0IHZpc2libGUKKwl8IG1l
bnVfb3B0aW9uX2xpc3QgZGVwZW5kcworOworCitzb3VyY2Vfc3RtdDogVF9TT1VSQ0UgcHJvbXB0
IFRfRU9MCit7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c291cmNlICVzXG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMik7CisJemNvbmZfbmV4dGZpbGUoJDIpOwor
CWZyZWUoJDIpOworfTsKKworLyogY29tbWVudCBlbnRyeSAqLworCitjb21tZW50OiBUX0NPTU1F
TlQgcHJvbXB0IFRfRU9MCit7CisJbWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfcHJv
bXB0KFBfQ09NTUVOVCwgJDIsIE5VTEwpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNv
bW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY29tbWVu
dF9zdG10OiBjb21tZW50IGNvbW1lbnRfb3B0aW9uX2xpc3QKKzsKKworY29tbWVudF9vcHRpb25f
bGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBjb21tZW50X29wdGlvbl9saXN0IGRlcGVuZHMKKzsK
KworLyogaGVscCBvcHRpb24gKi8KKworaGVscF9zdGFydDogVF9IRUxQIFRfRU9MCit7CisJcHJp
bnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSk7CisJemNvbmZfc3RhcnRoZWxwKCk7Cit9OworCitoZWxwOiBoZWxwX3N0YXJ0IFRf
SEVMUFRFWFQKK3sKKwlpZiAoY3VycmVudF9lbnRyeS0+aGVscCkgeworCQlmcmVlKGN1cnJlbnRf
ZW50cnktPmhlbHApOworCQl6Y29uZnByaW50KCJ3YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBt
b3JlIHRoYW4gb25lIGhlbHAgdGV4dCAtLSBvbmx5IHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQi
LAorCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOworCX0KKwor
CS8qIElzIHRoZSBoZWxwIHRleHQgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2U/ICovCisJaWYgKCQy
W3N0cnNwbigkMiwgIiBcZlxuXHJcdFx2IildID09ICdcMCcpCisJCXpjb25mcHJpbnQoIndhcm5p
bmc6ICclcycgZGVmaW5lZCB3aXRoIGJsYW5rIGhlbHAgdGV4dCIsCisJCQkgICBjdXJyZW50X2Vu
dHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7CisKKwljdXJyZW50X2VudHJ5LT5oZWxwID0g
JDI7Cit9OworCisvKiBkZXBlbmRzIG9wdGlvbiAqLworCitkZXBlbmRzOiBUX0RFUEVORFMgVF9P
TiBleHByIFRfRU9MCit7CisJbWVudV9hZGRfZGVwKCQzKTsKKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
K307CisKKy8qIHZpc2liaWxpdHkgb3B0aW9uICovCit2aXNpYmxlOiBUX1ZJU0lCTEUgaWZfZXhw
ciBUX0VPTAoreworCW1lbnVfYWRkX3Zpc2liaWxpdHkoJDIpOworfTsKKworLyogcHJvbXB0IHN0
YXRlbWVudCAqLworCitwcm9tcHRfc3RtdF9vcHQ6CisJICAvKiBlbXB0eSAqLworCXwgcHJvbXB0
IGlmX2V4cHIKK3sKKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQxLCAkMik7Cit9OworCitw
cm9tcHQ6CSAgVF9XT1JECisJfCBUX1dPUkRfUVVPVEUKKzsKKworZW5kOgkgIFRfRU5ETUVOVSBU
X0VPTAl7ICQkID0gIm1lbnUiOyB9CisJfCBUX0VORENIT0lDRSBUX0VPTAl7ICQkID0gImNob2lj
ZSI7IH0KKwl8IFRfRU5ESUYgVF9FT0wJCXsgJCQgPSAiaWYiOyB9Cis7CisKK2lmX2V4cHI6ICAv
KiBlbXB0eSAqLwkJCXsgJCQgPSBOVUxMOyB9CisJfCBUX0lGIGV4cHIJCQl7ICQkID0gJDI7IH0K
KzsKKworZXhwcjoJICBzeW1ib2wJCQkJeyAkJCA9IGV4cHJfYWxsb2Nfc3ltYm9sKCQxKTsgfQor
CXwgc3ltYm9sIFRfTEVTUyBzeW1ib2wJCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfTFRILCAk
MSwgJDMpOyB9CisJfCBzeW1ib2wgVF9MRVNTX0VRVUFMIHN5bWJvbAkJeyAkJCA9IGV4cHJfYWxs
b2NfY29tcChFX0xFUSwgJDEsICQzKTsgfQorCXwgc3ltYm9sIFRfR1JFQVRFUiBzeW1ib2wJCXsg
JCQgPSBleHByX2FsbG9jX2NvbXAoRV9HVEgsICQxLCAkMyk7IH0KKwl8IHN5bWJvbCBUX0dSRUFU
RVJfRVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfR0VRLCAkMSwgJDMpOyB9
CisJfCBzeW1ib2wgVF9FUVVBTCBzeW1ib2wJCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfRVFV
QUwsICQxLCAkMyk7IH0KKwl8IHN5bWJvbCBUX1VORVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9h
bGxvY19jb21wKEVfVU5FUVVBTCwgJDEsICQzKTsgfQorCXwgVF9PUEVOX1BBUkVOIGV4cHIgVF9D
TE9TRV9QQVJFTgl7ICQkID0gJDI7IH0KKwl8IFRfTk9UIGV4cHIJCQkJeyAkJCA9IGV4cHJfYWxs
b2Nfb25lKEVfTk9ULCAkMik7IH0KKwl8IGV4cHIgVF9PUiBleHByCQkJeyAkJCA9IGV4cHJfYWxs
b2NfdHdvKEVfT1IsICQxLCAkMyk7IH0KKwl8IGV4cHIgVF9BTkQgZXhwcgkJCXsgJCQgPSBleHBy
X2FsbG9jX3R3byhFX0FORCwgJDEsICQzKTsgfQorOworCisvKiBGb3Igc3ltYm9sIGRlZmluaXRp
b25zLCBzZWxlY3RzLCBldGMuLCB3aGVyZSBxdW90ZXMgYXJlIG5vdCBhY2NlcHRlZCAqLworbm9u
Y29uc3Rfc3ltYm9sOiBUX1dPUkQgeyAkJCA9IHN5bV9sb29rdXAoJDEsIDApOyBmcmVlKCQxKTsg
fTsKKworc3ltYm9sOgkgIG5vbmNvbnN0X3N5bWJvbAorCXwgVF9XT1JEX1FVT1RFCXsgJCQgPSBz
eW1fbG9va3VwKCQxLCBTWU1CT0xfQ09OU1QpOyBmcmVlKCQxKTsgfQorOworCit3b3JkX29wdDog
LyogZW1wdHkgKi8JCQl7ICQkID0gTlVMTDsgfQorCXwgVF9XT1JECisKKy8qIGFzc2lnbm1lbnQg
c3RhdGVtZW50ICovCisKK2Fzc2lnbm1lbnRfc3RtdDogIFRfV09SRCBhc3NpZ25fb3AgYXNzaWdu
X3ZhbCBUX0VPTAl7IHZhcmlhYmxlX2FkZCgkMSwgJDMsICQyKTsgZnJlZSgkMSk7IGZyZWUoJDMp
OyB9CisKK2Fzc2lnbl9vcDoKKwkgIFRfRVFVQUwJeyAkJCA9IFZBUl9SRUNVUlNJVkU7IH0KKwl8
IFRfQ09MT05fRVFVQUwJeyAkJCA9IFZBUl9TSU1QTEU7IH0KKwl8IFRfUExVU19FUVVBTAl7ICQk
ID0gVkFSX0FQUEVORDsgfQorOworCithc3NpZ25fdmFsOgorCS8qIGVtcHR5ICovCQl7ICQkID0g
eHN0cmR1cCgiIik7IH07CisJfCBUX0FTU0lHTl9WQUwKKzsKKworJSUKKwordm9pZCBjb25mX3Bh
cnNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOwor
CisJemNvbmZfaW5pdHNjYW4obmFtZSk7CisKKwlfbWVudV9pbml0KCk7CisKKwlpZiAoZ2V0ZW52
KCJaQ09ORl9ERUJVRyIpKQorCQl5eWRlYnVnID0gMTsKKwl5eXBhcnNlKCk7CisKKwkvKiBWYXJp
YWJsZXMgYXJlIGV4cGFuZGVkIGluIHRoZSBwYXJzZSBwaGFzZS4gV2UgY2FuIGZyZWUgdGhlbSBo
ZXJlLiAqLworCXZhcmlhYmxlX2FsbF9kZWwoKTsKKworCWlmICh5eW5lcnJzKQorCQlleGl0KDEp
OworCWlmICghbW9kdWxlc19zeW0pCisJCW1vZHVsZXNfc3ltID0gc3ltX2ZpbmQoICJuIiApOwor
CisJaWYgKCFtZW51X2hhc19wcm9tcHQoJnJvb3RtZW51KSkgeworCQljdXJyZW50X2VudHJ5ID0g
JnJvb3RtZW51OworCQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAiTWFpbiBtZW51IiwgTlVMTCk7
CisJfQorCisJbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOworCWZvcl9hbGxfc3ltYm9scyhpLCBz
eW0pIHsKKwkJaWYgKHN5bV9jaGVja19kZXBzKHN5bSkpCisJCQl5eW5lcnJzKys7CisJfQorCWlm
ICh5eW5lcnJzKQorCQlleGl0KDEpOworCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOworfQorCitz
dGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBjaGFyICp0b2tlbm5hbWUsCisJCQkgICBj
b25zdCBjaGFyICpleHBlY3RlZF90b2tlbm5hbWUpCit7CisJaWYgKHN0cmNtcCh0b2tlbm5hbWUs
IGV4cGVjdGVkX3Rva2VubmFtZSkpIHsKKwkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3
aXRoaW4gJXMgYmxvY2siLAorCQkJICAgIHRva2VubmFtZSwgZXhwZWN0ZWRfdG9rZW5uYW1lKTsK
KwkJeXluZXJycysrOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWlmIChjdXJyZW50X21lbnUtPmZp
bGUgIT0gY3VycmVudF9maWxlKSB7CisJCXpjb25mX2Vycm9yKCInJXMnIGluIGRpZmZlcmVudCBm
aWxlIHRoYW4gJyVzJyIsCisJCQkgICAgdG9rZW5uYW1lLCBleHBlY3RlZF90b2tlbm5hbWUpOwor
CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlvbiBvZiB0aGUgJyVzJ1xuIiwKKwkJCWN1
cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sCisJCQlleHBlY3Rl
ZF90b2tlbm5hbWUpOworCQl5eW5lcnJzKys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRm
KHN0ZGVyciwgZXJyLCBhcCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7
Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQorewor
CXZhX2xpc3QgYXA7CisKKwl5eW5lcnJzKys7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJ
dmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJy
LCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICplcnIpCit7CisJ
ZnByaW50ZihzdGRlcnIsICIlczolZDogJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCkgKyAxLCBlcnIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJ
TEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnA7CisJaW50IGxlbjsK
KworCXB1dGMoJyInLCBvdXQpOworCXdoaWxlICgocCA9IHN0cmNocihzdHIsICciJykpKSB7CisJ
CWxlbiA9IHAgLSBzdHI7CisJCWlmIChsZW4pCisJCQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4s
IHN0cik7CisJCWZwdXRzKCJcXFwiIiwgb3V0KTsKKwkJc3RyID0gcCArIDE7CisJfQorCWZwdXRz
KHN0ciwgb3V0KTsKKwlwdXRjKCciJywgb3V0KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3lt
Ym9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3lt
ID0gbWVudS0+c3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWlmIChzeW1faXNfY2hv
aWNlKHN5bSkpCisJCWZwcmludGYob3V0LCAiXG5jaG9pY2VcbiIpOworCWVsc2UKKwkJZnByaW50
ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19CT09MRUFOOgorCQlmcHV0cygiICBib29sXG4iLCBvdXQpOworCQlicmVhazsK
KwljYXNlIFNfVFJJU1RBVEU6CisJCWZwdXRzKCIgIHRyaXN0YXRlXG4iLCBvdXQpOworCQlicmVh
azsKKwljYXNlIFNfU1RSSU5HOgorCQlmcHV0cygiICBzdHJpbmdcbiIsIG91dCk7CisJCWJyZWFr
OworCWNhc2UgU19JTlQ6CisJCWZwdXRzKCIgIGludGVnZXJcbiIsIG91dCk7CisJCWJyZWFrOwor
CWNhc2UgU19IRVg6CisJCWZwdXRzKCIgIGhleFxuIiwgb3V0KTsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJZnB1dHMoIiAgPz8/XG4iLCBvdXQpOworCQlicmVhazsKKwl9CisJZm9yIChwcm9wID0g
c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlpZiAocHJvcC0+bWVudSAh
PSBtZW51KQorCQkJY29udGludWU7CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBf
UFJPTVBUOgorCQkJZnB1dHMoIiAgcHJvbXB0ICIsIG91dCk7CisJCQlwcmludF9xdW90ZWRfc3Ry
aW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUu
ZXhwcikpIHsKKwkJCQlmcHV0cygiIGlmICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQocHJvcC0+
dmlzaWJsZS5leHByLCBvdXQpOworCQkJfQorCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFr
OworCQljYXNlIFBfREVGQVVMVDoKKwkJCWZwdXRzKCAiICBkZWZhdWx0ICIsIG91dCk7CisJCQll
eHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52
aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiBpZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50
KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJCX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJ
CQlicmVhazsKKwkJY2FzZSBQX0NIT0lDRToKKwkJCWZwdXRzKCIgICNjaG9pY2UgdmFsdWVcbiIs
IG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1NFTEVDVDoKKwkJCWZwdXRzKCAiICBzZWxlY3Qg
Iiwgb3V0KTsKKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4n
LCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9JTVBMWToKKwkJCWZwdXRzKCAiICBpbXBseSAi
LCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbics
IG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1JBTkdFOgorCQkJZnB1dHMoICIgIHJhbmdlICIs
IG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywg
b3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfTUVOVToKKwkJCWZwdXRzKCAiICBtZW51ICIsIG91
dCk7CisJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQlmcHV0Yygn
XG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9TWU1CT0w6CisJCQlmcHV0cyggIiAgc3lt
Ym9sICIsIG91dCk7CisJCQlmcHJpbnRmKG91dCwgIiVzXG4iLCBwcm9wLT5zeW0tPm5hbWUpOwor
CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKG91dCwgIiAgdW5rbm93biBwcm9wICVk
IVxuIiwgcHJvcC0+dHlwZSk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAobWVudS0+aGVscCkg
eworCQlpbnQgbGVuID0gc3RybGVuKG1lbnUtPmhlbHApOworCQl3aGlsZSAobWVudS0+aGVscFst
LWxlbl0gPT0gJ1xuJykKKwkJCW1lbnUtPmhlbHBbbGVuXSA9IDA7CisJCWZwcmludGYob3V0LCAi
ICBoZWxwXG4lc1xuIiwgbWVudS0+aGVscCk7CisJfQorfQorCit2b2lkIHpjb25mZHVtcChGSUxF
ICpvdXQpCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKnN5bTsK
KwlzdHJ1Y3QgbWVudSAqbWVudTsKKworCW1lbnUgPSByb290bWVudS5saXN0OworCXdoaWxlICht
ZW51KSB7CisJCWlmICgoc3ltID0gbWVudS0+c3ltKSkKKwkJCXByaW50X3N5bWJvbChvdXQsIG1l
bnUpOworCQllbHNlIGlmICgocHJvcCA9IG1lbnUtPnByb21wdCkpIHsKKwkJCXN3aXRjaCAocHJv
cC0+dHlwZSkgeworCQkJY2FzZSBQX0NPTU1FTlQ6CisJCQkJZnB1dHMoIlxuY29tbWVudCAiLCBv
dXQpOworCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCQlmcHV0
cygiXG4iLCBvdXQpOworCQkJCWJyZWFrOworCQkJY2FzZSBQX01FTlU6CisJCQkJZnB1dHMoIlxu
bWVudSAiLCBvdXQpOworCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsK
KwkJCQlmcHV0cygiXG4iLCBvdXQpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQk7CisJ
CQl9CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCQlmcHV0
cygiICBkZXBlbmRzICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCBvdXQpOworCQkJCWZwdXRjKCdcbicsIG91dCk7CisJCQl9CisJCX0KKworCQlpZiAobWVudS0+
bGlzdCkKKwkJCW1lbnUgPSBtZW51LT5saXN0OworCQllbHNlIGlmIChtZW51LT5uZXh0KQorCQkJ
bWVudSA9IG1lbnUtPm5leHQ7CisJCWVsc2Ugd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkg
eworCQkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQor
CQkJCWZwdXRzKCJcbmVuZG1lbnVcbiIsIG91dCk7CisJCQlpZiAobWVudS0+bmV4dCkgeworCQkJ
CW1lbnUgPSBtZW51LT5uZXh0OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisjaW5j
bHVkZSAidXRpbC5jIgorI2luY2x1ZGUgIm1lbnUuYyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvcHJlcHJvY2Vzcy5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTkyZGZiZgotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNTczIEBA
CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8KKy8vIENvcHlyaWdodCAo
QykgMjAxOCBNYXNhaGlybyBZYW1hZGEgPHlhbWFkYS5tYXNhaGlyb0Bzb2Npb25leHQuY29tPgor
CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRi
b29sLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRl
IDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJsa2MuaCIKKworI2Rl
ZmluZSBBUlJBWV9TSVpFKGFycikJCShzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCisK
K3N0YXRpYyBjaGFyICpleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhjb25zdCBjaGFyICppbiwgaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0
dXJuKSkgcHBlcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOwor
CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgY3VycmVudF9maWxlLT5uYW1lLCB5eWxpbmVu
byk7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFw
KTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCWV4aXQoMSk7Cit9
CisKKy8qCisgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqLworc3RhdGljIExJU1RfSEVBRChl
bnZfbGlzdCk7CisKK3N0cnVjdCBlbnYgeworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsdWU7CisJ
c3RydWN0IGxpc3RfaGVhZCBub2RlOworfTsKKworc3RhdGljIHZvaWQgZW52X2FkZChjb25zdCBj
aGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgZW52ICplOworCisJZSA9
IHhtYWxsb2Moc2l6ZW9mKCplKSk7CisJZS0+bmFtZSA9IHhzdHJkdXAobmFtZSk7CisJZS0+dmFs
dWUgPSB4c3RyZHVwKHZhbHVlKTsKKworCWxpc3RfYWRkX3RhaWwoJmUtPm5vZGUsICZlbnZfbGlz
dCk7Cit9CisKK3N0YXRpYyB2b2lkIGVudl9kZWwoc3RydWN0IGVudiAqZSkKK3sKKwlsaXN0X2Rl
bCgmZS0+bm9kZSk7CisJZnJlZShlLT5uYW1lKTsKKwlmcmVlKGUtPnZhbHVlKTsKKwlmcmVlKGUp
OworfQorCisvKiBUaGUgcmV0dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZSAq
Lworc3RhdGljIGNoYXIgKmVudl9leHBhbmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qg
ZW52ICplOworCWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCEqbmFtZSkKKwkJcmV0dXJuIE5V
TEw7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZlbnZfbGlzdCwgbm9kZSkgeworCQlpZiAo
IXN0cmNtcChuYW1lLCBlLT5uYW1lKSkKKwkJCXJldHVybiB4c3RyZHVwKGUtPnZhbHVlKTsKKwl9
CisKKwl2YWx1ZSA9IGdldGVudihuYW1lKTsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gTlVMTDsK
KworCS8qCisJICogV2UgbmVlZCB0byByZW1lbWJlciBhbGwgcmVmZXJlbmNlZCBlbnZpcm9ubWVu
dCB2YXJpYWJsZXMuCisJICogVGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IHRvIGluY2x1ZGUvY29u
ZmlnL2F1dG8uY29uZi5jbWQKKwkgKi8KKwllbnZfYWRkKG5hbWUsIHZhbHVlKTsKKworCXJldHVy
biB4c3RyZHVwKHZhbHVlKTsKK30KKwordm9pZCBlbnZfd3JpdGVfZGVwKEZJTEUgKmYsIGNvbnN0
IGNoYXIgKmF1dG9jb25maWdfbmFtZSkKK3sKKwlzdHJ1Y3QgZW52ICplLCAqdG1wOworCisJbGlz
dF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIHRtcCwgJmVudl9saXN0LCBub2RlKSB7CisJCWZwcmlu
dGYoZiwgImlmbmVxIFwiJCglcylcIiBcIiVzXCJcbiIsIGUtPm5hbWUsIGUtPnZhbHVlKTsKKwkJ
ZnByaW50ZihmLCAiJXM6IEZPUkNFXG4iLCBhdXRvY29uZmlnX25hbWUpOworCQlmcHJpbnRmKGYs
ICJlbmRpZlxuIik7CisJCWVudl9kZWwoZSk7CisJfQorfQorCisvKgorICogQnVpbHQtaW4gZnVu
Y3Rpb25zCisgKi8KK3N0cnVjdCBmdW5jdGlvbiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNp
Z25lZCBpbnQgbWluX2FyZ3M7CisJdW5zaWduZWQgaW50IG1heF9hcmdzOworCWNoYXIgKigqZnVu
YykoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSk7Cit9OworCitzdGF0aWMgY2hhciAqZG9fZXJyb3Jf
aWYoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAieSIp
KQorCQlwcGVycm9yKCIlcyIsIGFyZ3ZbMV0pOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRp
YyBjaGFyICpkb19maWxlbmFtZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXJldHVybiB4
c3RyZHVwKGN1cnJlbnRfZmlsZS0+bmFtZSk7Cit9CisKK3N0YXRpYyBjaGFyICpkb19pbmZvKGlu
dCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJcHJpbnRmKCIlc1xuIiwgYXJndlswXSk7CisKKwly
ZXR1cm4geHN0cmR1cCgiIik7Cit9CisKK3N0YXRpYyBjaGFyICpkb19saW5lbm8oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKK3sKKwljaGFyIGJ1ZlsxNl07CisKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwg
eXlsaW5lbm8pOworCisJcmV0dXJuIHhzdHJkdXAoYnVmKTsKK30KKworc3RhdGljIGNoYXIgKmRv
X3NoZWxsKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJRklMRSAqcDsKKwljaGFyIGJ1Zlsy
NTZdOworCWNoYXIgKmNtZDsKKwlzaXplX3QgbnJlYWQ7CisJaW50IGk7CisKKwljbWQgPSBhcmd2
WzBdOworCisJcCA9IHBvcGVuKGNtZCwgInIiKTsKKwlpZiAoIXApIHsKKwkJcGVycm9yKGNtZCk7
CisJCWV4aXQoMSk7CisJfQorCisJbnJlYWQgPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBw
KTsKKwlpZiAobnJlYWQgPT0gc2l6ZW9mKGJ1ZikpCisJCW5yZWFkLS07CisKKwkvKiByZW1vdmUg
dHJhaWxpbmcgbmV3IGxpbmVzICovCisJd2hpbGUgKG5yZWFkID4gMCAmJiBidWZbbnJlYWQgLSAx
XSA9PSAnXG4nKQorCQlucmVhZC0tOworCisJYnVmW25yZWFkXSA9IDA7CisKKwkvKiByZXBsYWNl
IGEgbmV3IGxpbmUgd2l0aCBhIHNwYWNlICovCisJZm9yIChpID0gMDsgaSA8IG5yZWFkOyBpKysp
IHsKKwkJaWYgKGJ1ZltpXSA9PSAnXG4nKQorCQkJYnVmW2ldID0gJyAnOworCX0KKworCWlmIChw
Y2xvc2UocCkgPT0gLTEpIHsKKwkJcGVycm9yKGNtZCk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0
dXJuIHhzdHJkdXAoYnVmKTsKK30KKworc3RhdGljIGNoYXIgKmRvX3dhcm5pbmdfaWYoaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAieSIpKQorCQlmcHJp
bnRmKHN0ZGVyciwgIiVzOiVkOiAlc1xuIiwKKwkJCWN1cnJlbnRfZmlsZS0+bmFtZSwgeXlsaW5l
bm8sIGFyZ3ZbMV0pOworCisJcmV0dXJuIHhzdHJkdXAoIiIpOworfQorCitzdGF0aWMgY29uc3Qg
c3RydWN0IGZ1bmN0aW9uIGZ1bmN0aW9uX3RhYmxlW10gPSB7CisJLyogTmFtZQkJTUlOCU1BWAlG
dW5jdGlvbiAqLworCXsgImVycm9yLWlmIiwJMiwJMiwJZG9fZXJyb3JfaWYgfSwKKwl7ICJmaWxl
bmFtZSIsCTAsCTAsCWRvX2ZpbGVuYW1lIH0sCisJeyAiaW5mbyIsCTEsCTEsCWRvX2luZm8gfSwK
Kwl7ICJsaW5lbm8iLAkwLAkwLAlkb19saW5lbm8gfSwKKwl7ICJzaGVsbCIsCTEsCTEsCWRvX3No
ZWxsIH0sCisJeyAid2FybmluZy1pZiIsCTIsCTIsCWRvX3dhcm5pbmdfaWYgfSwKK307CisKKyNk
ZWZpbmUgRlVOQ1RJT05fTUFYX0FSR1MJCTE2CisKK3N0YXRpYyBjaGFyICpmdW5jdGlvbl9leHBh
bmQoY29uc3QgY2hhciAqbmFtZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBz
dHJ1Y3QgZnVuY3Rpb24gKmY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la
RShmdW5jdGlvbl90YWJsZSk7IGkrKykgeworCQlmID0gJmZ1bmN0aW9uX3RhYmxlW2ldOworCQlp
ZiAoc3RyY21wKGYtPm5hbWUsIG5hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGFyZ2MgPCBm
LT5taW5fYXJncykKKwkJCXBwZXJyb3IoInRvbyBmZXcgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3Nl
ZCB0byAnJXMnIiwKKwkJCQluYW1lKTsKKworCQlpZiAoYXJnYyA+IGYtPm1heF9hcmdzKQorCQkJ
cHBlcnJvcigidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCB0byAnJXMnIiwKKwkJ
CQluYW1lKTsKKworCQlyZXR1cm4gZi0+ZnVuYyhhcmdjLCBhcmd2KTsKKwl9CisKKwlyZXR1cm4g
TlVMTDsKK30KKworLyoKKyAqIFZhcmlhYmxlcyAoYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMp
CisgKi8KK3N0YXRpYyBMSVNUX0hFQUQodmFyaWFibGVfbGlzdCk7CisKK3N0cnVjdCB2YXJpYWJs
ZSB7CisJY2hhciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKwllbnVtIHZhcmlhYmxlX2ZsYXZvciBm
bGF2b3I7CisJaW50IGV4cF9jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCitz
dGF0aWMgc3RydWN0IHZhcmlhYmxlICp2YXJpYWJsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkK
K3sKKwlzdHJ1Y3QgdmFyaWFibGUgKnY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHYsICZ2YXJp
YWJsZV9saXN0LCBub2RlKSB7CisJCWlmICghc3RyY21wKG5hbWUsIHYtPm5hbWUpKQorCQkJcmV0
dXJuIHY7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICp2YXJpYWJsZV9l
eHBhbmQoY29uc3QgY2hhciAqbmFtZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1
Y3QgdmFyaWFibGUgKnY7CisJY2hhciAqcmVzOworCisJdiA9IHZhcmlhYmxlX2xvb2t1cChuYW1l
KTsKKwlpZiAoIXYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGFyZ2MgPT0gMCAmJiB2LT5leHBf
Y291bnQpCisJCXBwZXJyb3IoIlJlY3Vyc2l2ZSB2YXJpYWJsZSAnJXMnIHJlZmVyZW5jZXMgaXRz
ZWxmIChldmVudHVhbGx5KSIsCisJCQluYW1lKTsKKworCWlmICh2LT5leHBfY291bnQgPiAxMDAw
KQorCQlwcGVycm9yKCJUb28gZGVlcCByZWN1cnNpdmUgZXhwYW5zaW9uIik7CisKKwl2LT5leHBf
Y291bnQrKzsKKworCWlmICh2LT5mbGF2b3IgPT0gVkFSX1JFQ1VSU0lWRSkKKwkJcmVzID0gZXhw
YW5kX3N0cmluZ193aXRoX2FyZ3Modi0+dmFsdWUsIGFyZ2MsIGFyZ3YpOworCWVsc2UKKwkJcmVz
ID0geHN0cmR1cCh2LT52YWx1ZSk7CisKKwl2LT5leHBfY291bnQtLTsKKworCXJldHVybiByZXM7
Cit9CisKK3ZvaWQgdmFyaWFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZh
bHVlLAorCQkgIGVudW0gdmFyaWFibGVfZmxhdm9yIGZsYXZvcikKK3sKKwlzdHJ1Y3QgdmFyaWFi
bGUgKnY7CisJY2hhciAqbmV3X3ZhbHVlOworCWJvb2wgYXBwZW5kID0gZmFsc2U7CisKKwl2ID0g
dmFyaWFibGVfbG9va3VwKG5hbWUpOworCWlmICh2KSB7CisJCS8qIEZvciBkZWZpbmVkIHZhcmlh
YmxlcywgKz0gaW5oZXJpdHMgdGhlIGV4aXN0aW5nIGZsYXZvciAqLworCQlpZiAoZmxhdm9yID09
IFZBUl9BUFBFTkQpIHsKKwkJCWZsYXZvciA9IHYtPmZsYXZvcjsKKwkJCWFwcGVuZCA9IHRydWU7
CisJCX0gZWxzZSB7CisJCQlmcmVlKHYtPnZhbHVlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZv
ciB1bmRlZmluZWQgdmFyaWFibGVzLCArPSBhc3N1bWVzIHRoZSByZWN1cnNpdmUgZmxhdm9yICov
CisJCWlmIChmbGF2b3IgPT0gVkFSX0FQUEVORCkKKwkJCWZsYXZvciA9IFZBUl9SRUNVUlNJVkU7
CisKKwkJdiA9IHhtYWxsb2Moc2l6ZW9mKCp2KSk7CisJCXYtPm5hbWUgPSB4c3RyZHVwKG5hbWUp
OworCQl2LT5leHBfY291bnQgPSAwOworCQlsaXN0X2FkZF90YWlsKCZ2LT5ub2RlLCAmdmFyaWFi
bGVfbGlzdCk7CisJfQorCisJdi0+Zmxhdm9yID0gZmxhdm9yOworCisJaWYgKGZsYXZvciA9PSBW
QVJfU0lNUExFKQorCQluZXdfdmFsdWUgPSBleHBhbmRfc3RyaW5nKHZhbHVlKTsKKwllbHNlCisJ
CW5ld192YWx1ZSA9IHhzdHJkdXAodmFsdWUpOworCisJaWYgKGFwcGVuZCkgeworCQl2LT52YWx1
ZSA9IHhyZWFsbG9jKHYtPnZhbHVlLAorCQkJCSAgICBzdHJsZW4odi0+dmFsdWUpICsgc3RybGVu
KG5ld192YWx1ZSkgKyAyKTsKKwkJc3RyY2F0KHYtPnZhbHVlLCAiICIpOworCQlzdHJjYXQodi0+
dmFsdWUsIG5ld192YWx1ZSk7CisJCWZyZWUobmV3X3ZhbHVlKTsKKwl9IGVsc2UgeworCQl2LT52
YWx1ZSA9IG5ld192YWx1ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZhcmlhYmxlX2RlbChzdHJ1
Y3QgdmFyaWFibGUgKnYpCit7CisJbGlzdF9kZWwoJnYtPm5vZGUpOworCWZyZWUodi0+bmFtZSk7
CisJZnJlZSh2LT52YWx1ZSk7CisJZnJlZSh2KTsKK30KKwordm9pZCB2YXJpYWJsZV9hbGxfZGVs
KHZvaWQpCit7CisJc3RydWN0IHZhcmlhYmxlICp2LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9l
bnRyeV9zYWZlKHYsIHRtcCwgJnZhcmlhYmxlX2xpc3QsIG5vZGUpCisJCXZhcmlhYmxlX2RlbCh2
KTsKK30KKworLyoKKyAqIEV2YWx1YXRlIGEgY2xhdXNlIHdpdGggYXJndW1lbnRzLiAgYXJnYy9h
cmd2IGFyZSBhcmd1bWVudHMgZnJvbSB0aGUgdXBwZXIKKyAqIGZ1bmN0aW9uIGNhbGwuCisgKgor
ICogUmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBkb25lCisgKi8KK3N0YXRpYyBj
aGFyICpldmFsX2NsYXVzZShjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGludCBhcmdjLCBj
aGFyICphcmd2W10pCit7CisJY2hhciAqdG1wLCAqbmFtZSwgKnJlcywgKmVuZHB0ciwgKnByZXYs
ICpwOworCWludCBuZXdfYXJnYyA9IDA7CisJY2hhciAqbmV3X2FyZ3ZbRlVOQ1RJT05fTUFYX0FS
R1NdOworCWludCBuZXN0ID0gMDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG47CisKKwl0bXAg
PSB4c3RybmR1cChzdHIsIGxlbik7CisKKwkvKgorCSAqIElmIHZhcmlhYmxlIG5hbWUgaXMgJzEn
LCAnMicsIGV0Yy4gIEl0IGlzIGdlbmVyYWxseSBhbiBhcmd1bWVudAorCSAqIGZyb20gYSB1c2Vy
LWZ1bmN0aW9uIGNhbGwgKGkuZS4gbG9jYWwtc2NvcGUgdmFyaWFibGUpLiAgSWYgbm90CisJICog
YXZhaWxhYmxlLCB0aGVuIGxvb2stdXAgZ2xvYmFsLXNjb3BlIHZhcmlhYmxlcy4KKwkgKi8KKwlu
ID0gc3RydG91bCh0bXAsICZlbmRwdHIsIDEwKTsKKwlpZiAoISplbmRwdHIgJiYgbiA+IDAgJiYg
biA8PSBhcmdjKSB7CisJCXJlcyA9IHhzdHJkdXAoYXJndltuIC0gMV0pOworCQlnb3RvIGZyZWVf
dG1wOworCX0KKworCXByZXYgPSBwID0gdG1wOworCisJLyoKKwkgKiBTcGxpdCBpbnRvIHRva2Vu
cworCSAqIFRoZSBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBh
IGNvbW1hLgorCSAqIEZvciBleGFtcGxlLCBpZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBsaWtlIHRo
aXM6CisJICogICAkKGZvbywkKHgpLCQoeSkpCisJICoKKwkgKiBUaGUgaW5wdXQgc3RyaW5nIGZv
ciB0aGlzIGhlbHBlciBzaG91bGQgYmU6CisJICogICBmb28sJCh4KSwkKHkpCisJICoKKwkgKiBh
bmQgc3BsaXQgaW50bzoKKwkgKiAgIG5ld19hcmd2WzBdID0gJ2ZvbycKKwkgKiAgIG5ld19hcmd2
WzFdID0gJyQoeCknCisJICogICBuZXdfYXJndlsyXSA9ICckKHkpJworCSAqLworCXdoaWxlICgq
cCkgeworCQlpZiAobmVzdCA9PSAwICYmICpwID09ICcsJykgeworCQkJKnAgPSAwOworCQkJaWYg
KG5ld19hcmdjID49IEZVTkNUSU9OX01BWF9BUkdTKQorCQkJCXBwZXJyb3IoInRvbyBtYW55IGZ1
bmN0aW9uIGFyZ3VtZW50cyIpOworCQkJbmV3X2FyZ3ZbbmV3X2FyZ2MrK10gPSBwcmV2OworCQkJ
cHJldiA9IHAgKyAxOworCQl9IGVsc2UgaWYgKCpwID09ICcoJykgeworCQkJbmVzdCsrOworCQl9
IGVsc2UgaWYgKCpwID09ICcpJykgeworCQkJbmVzdC0tOworCQl9CisKKwkJcCsrOworCX0KKwlu
ZXdfYXJndltuZXdfYXJnYysrXSA9IHByZXY7CisKKwkvKgorCSAqIFNoaWZ0IGFyZ3VtZW50cwor
CSAqIG5ld19hcmd2WzBdIHJlcHJlc2VudHMgYSBmdW5jdGlvbiBuYW1lIG9yIGEgdmFyaWFibGUg
bmFtZS4gIFB1dCBpdAorCSAqIGludG8gJ25hbWUnLCB0aGVuIHNoaWZ0IHRoZSByZXN0IG9mIHRo
ZSBhcmd1bWVudHMuICBUaGlzIHNpbXBsaWZpZXMKKwkgKiAnY29uc3QnIGhhbmRsaW5nLgorCSAq
LworCW5hbWUgPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdfYXJndlswXSwgYXJnYywgYXJn
dik7CisJbmV3X2FyZ2MtLTsKKwlmb3IgKGkgPSAwOyBpIDwgbmV3X2FyZ2M7IGkrKykKKwkJbmV3
X2FyZ3ZbaV0gPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdfYXJndltpICsgMV0sCisJCQkJ
CQkgICAgICBhcmdjLCBhcmd2KTsKKworCS8qIFNlYXJjaCBmb3IgdmFyaWFibGVzICovCisJcmVz
ID0gdmFyaWFibGVfZXhwYW5kKG5hbWUsIG5ld19hcmdjLCBuZXdfYXJndik7CisJaWYgKHJlcykK
KwkJZ290byBmcmVlOworCisJLyogTG9vayBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zICovCisJcmVz
ID0gZnVuY3Rpb25fZXhwYW5kKG5hbWUsIG5ld19hcmdjLCBuZXdfYXJndik7CisJaWYgKHJlcykK
KwkJZ290byBmcmVlOworCisJLyogTGFzdCwgdHJ5IGVudmlyb25tZW50IHZhcmlhYmxlICovCisJ
aWYgKG5ld19hcmdjID09IDApIHsKKwkJcmVzID0gZW52X2V4cGFuZChuYW1lKTsKKwkJaWYgKHJl
cykKKwkJCWdvdG8gZnJlZTsKKwl9CisKKwlyZXMgPSB4c3RyZHVwKCIiKTsKK2ZyZWU6CisJZm9y
IChpID0gMDsgaSA8IG5ld19hcmdjOyBpKyspCisJCWZyZWUobmV3X2FyZ3ZbaV0pOworCWZyZWUo
bmFtZSk7CitmcmVlX3RtcDoKKwlmcmVlKHRtcCk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgor
ICogRXhwYW5kIGEgc3RyaW5nIHRoYXQgZm9sbG93cyAnJCcKKyAqCisgKiBGb3IgZXhhbXBsZSwg
aWYgdGhlIGlucHV0IHN0cmluZyBpcworICogICAgICgkKEZPTykkKCQoQkFSKSkpJChCQVopCisg
KiB0aGlzIGhlbHBlciBldmFsdWF0ZXMKKyAqICAgICAkKCQoRk9PKSQoJChCQVIpKSkKKyAqIGFu
ZCByZXR1cm5zIGEgbmV3IHN0cmluZyBjb250YWluaW5nIHRoZSBleHBhbnNpb24gKG5vdGUgdGhh
dCB0aGUgc3RyaW5nIGlzCisgKiByZWN1cnNpdmVseSBleHBhbmRlZCksIGFsc28gYWR2YW5jaW5n
ICdzdHInIHRvIHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3RlcgorICogYWZ0ZXIgdGhlIGNvcnJl
c3BvbmRpbmcgY2xvc2luZyBwYXJlbnRoZXNpcywgaW4gdGhpcyBjYXNlLCAqc3RyIHdpbGwgYmUK
KyAqICAgICAkKEJBUikKKyAqLworc3RhdGljIGNoYXIgKmV4cGFuZF9kb2xsYXJfd2l0aF9hcmdz
KGNvbnN0IGNoYXIgKipzdHIsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hh
ciAqcCA9ICpzdHI7CisJY29uc3QgY2hhciAqcTsKKwlpbnQgbmVzdCA9IDA7CisKKwkvKgorCSAq
IEluIEtjb25maWcsIHZhcmlhYmxlL2Z1bmN0aW9uIHJlZmVyZW5jZXMgYWx3YXlzIHN0YXJ0IHdp
dGggIiQoIi4KKwkgKiBOZWl0aGVyIHNpbmdsZS1sZXR0ZXIgdmFyaWFibGVzIGFzIGluICRBIG5v
ciBjdXJseSBicmFjZXMgYXMgaW4gJHtDQ30KKwkgKiBhcmUgc3VwcG9ydGVkLiAgJyQnIG5vdCBm
b2xsb3dlZCBieSAnKCcgbG9zZXMgaXRzIHNwZWNpYWwgbWVhbmluZy4KKwkgKi8KKwlpZiAoKnAg
IT0gJygnKSB7CisJCSpzdHIgPSBwOworCQlyZXR1cm4geHN0cmR1cCgiJCIpOworCX0KKworCXAr
KzsKKwlxID0gcDsKKwl3aGlsZSAoKnEpIHsKKwkJaWYgKCpxID09ICcoJykgeworCQkJbmVzdCsr
OworCQl9IGVsc2UgaWYgKCpxID09ICcpJykgeworCQkJaWYgKG5lc3QtLSA9PSAwKQorCQkJCWJy
ZWFrOworCQl9CisJCXErKzsKKwl9CisKKwlpZiAoISpxKQorCQlwcGVycm9yKCJ1bnRlcm1pbmF0
ZWQgcmVmZXJlbmNlIHRvICclcyc6IG1pc3NpbmcgJyknIiwgcCk7CisKKwkvKiBBZHZhbmNlICdz
dHInIHRvIGFmdGVyIHRoZSBleHBhbmRlZCBpbml0aWFsIHBvcnRpb24gb2YgdGhlIHN0cmluZyAq
LworCSpzdHIgPSBxICsgMTsKKworCXJldHVybiBldmFsX2NsYXVzZShwLCBxIC0gcCwgYXJnYywg
YXJndik7Cit9CisKK2NoYXIgKmV4cGFuZF9kb2xsYXIoY29uc3QgY2hhciAqKnN0cikKK3sKKwly
ZXR1cm4gZXhwYW5kX2RvbGxhcl93aXRoX2FyZ3Moc3RyLCAwLCBOVUxMKTsKK30KKworc3RhdGlj
IGNoYXIgKl9fZXhwYW5kX3N0cmluZyhjb25zdCBjaGFyICoqc3RyLCBib29sICgqaXNfZW5kKShj
aGFyIGMpLAorCQkJICAgICBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIg
KmluLCAqcDsKKwljaGFyICpleHBhbnNpb24sICpvdXQ7CisJc2l6ZV90IGluX2xlbiwgb3V0X2xl
bjsKKworCW91dCA9IHhtYWxsb2MoMSk7CisJKm91dCA9IDA7CisJb3V0X2xlbiA9IDE7CisKKwlw
ID0gaW4gPSAqc3RyOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKCpwID09ICckJykgeworCQkJaW5f
bGVuID0gcCAtIGluOworCQkJcCsrOworCQkJZXhwYW5zaW9uID0gZXhwYW5kX2RvbGxhcl93aXRo
X2FyZ3MoJnAsIGFyZ2MsIGFyZ3YpOworCQkJb3V0X2xlbiArPSBpbl9sZW4gKyBzdHJsZW4oZXhw
YW5zaW9uKTsKKwkJCW91dCA9IHhyZWFsbG9jKG91dCwgb3V0X2xlbik7CisJCQlzdHJuY2F0KG91
dCwgaW4sIGluX2xlbik7CisJCQlzdHJjYXQob3V0LCBleHBhbnNpb24pOworCQkJZnJlZShleHBh
bnNpb24pOworCQkJaW4gPSBwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaXNfZW5kKCpw
KSkKKwkJCWJyZWFrOworCisJCXArKzsKKwl9CisKKwlpbl9sZW4gPSBwIC0gaW47CisJb3V0X2xl
biArPSBpbl9sZW47CisJb3V0ID0geHJlYWxsb2Mob3V0LCBvdXRfbGVuKTsKKwlzdHJuY2F0KG91
dCwgaW4sIGluX2xlbik7CisKKwkvKiBBZHZhbmNlICdzdHInIHRvIHRoZSBlbmQgY2hhcmFjdGVy
ICovCisJKnN0ciA9IHA7CisKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgYm9vbCBpc19lbmRf
b2Zfc3RyKGNoYXIgYykKK3sKKwlyZXR1cm4gIWM7Cit9CisKKy8qCisgKiBFeHBhbmQgdmFyaWFi
bGVzIGFuZCBmdW5jdGlvbnMgaW4gdGhlIGdpdmVuIHN0cmluZy4gIFVuZGVmaW5lZCB2YXJpYWJs
ZXMKKyAqIGV4cGFuZCB0byBhbiBlbXB0eSBzdHJpbmcuCisgKiBUaGUgcmV0dXJuZWQgc3RyaW5n
IG11c3QgYmUgZnJlZWQgd2hlbiBkb25lLgorICovCitzdGF0aWMgY2hhciAqZXhwYW5kX3N0cmlu
Z193aXRoX2FyZ3MoY29uc3QgY2hhciAqaW4sIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJ
cmV0dXJuIF9fZXhwYW5kX3N0cmluZygmaW4sIGlzX2VuZF9vZl9zdHIsIGFyZ2MsIGFyZ3YpOwor
fQorCitjaGFyICpleHBhbmRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKQoreworCXJldHVybiBleHBh
bmRfc3RyaW5nX3dpdGhfYXJncyhpbiwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBib29sIGlzX2Vu
ZF9vZl90b2tlbihjaGFyIGMpCit7CisJcmV0dXJuICEoaXNhbG51bShjKSB8fCBjID09ICdfJyB8
fCBjID09ICctJyk7Cit9CisKKy8qCisgKiBFeHBhbmQgdmFyaWFibGVzIGluIGEgdG9rZW4uICBU
aGUgcGFyc2luZyBzdG9wcyB3aGVuIGEgdG9rZW4gc2VwYXJhdGVyCisgKiAoaW4gbW9zdCBjYXNl
cywgaXQgaXMgYSB3aGl0ZXNwYWNlKSBpcyBlbmNvdW50ZXJlZC4gICdzdHInIGlzIHVwZGF0ZWQg
dG8KKyAqIHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAqCisgKiBUaGUgcmV0dXJuZWQg
c3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBkb25lLgorICovCitjaGFyICpleHBhbmRfb25lX3Rv
a2VuKGNvbnN0IGNoYXIgKipzdHIpCit7CisJcmV0dXJuIF9fZXhwYW5kX3N0cmluZyhzdHIsIGlz
X2VuZF9vZl90b2tlbiwgMCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoCm5ldyBm
aWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjAyY2NjMGEKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLWNmZy5zaApAQCAtMCwwICsxLDMyIEBACisjIS9i
aW4vc2gKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJRdDVDb3Jl
IFF0NUd1aSBRdDVXaWRnZXRzIgorUEtHMj0iUXRDb3JlIFF0R3VpIgorCitpZiBbIC16ICIkKGNv
bW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4KKwllY2hvID4mMiAiKiIKKwllY2hvID4mMiAi
KiAnbWFrZSB4Y29uZmlnJyByZXF1aXJlcyAncGtnLWNvbmZpZycuIFBsZWFzZSBpbnN0YWxsIGl0
LiIKKwllY2hvID4mMiAiKiIKKwlleGl0IDEKK2ZpCisKK2lmIHBrZy1jb25maWcgLS1leGlzdHMg
JFBLRzsgdGhlbgorCWVjaG8gY2ZsYWdzPVwiLXN0ZD1jKysxMSAtZlBJQyAkKHBrZy1jb25maWcg
LS1jZmxhZ3MgUXQ1Q29yZSBRdDVHdWkgUXQ1V2lkZ2V0cylcIgorCWVjaG8gbGlicz1cIiQocGtn
LWNvbmZpZyAtLWxpYnMgJFBLRylcIgorCWVjaG8gbW9jPVwiJChwa2ctY29uZmlnIC0tdmFyaWFi
bGU9aG9zdF9iaW5zIFF0NUNvcmUpL21vY1wiCisJZXhpdCAwCitmaQorCitpZiBwa2ctY29uZmln
IC0tZXhpc3RzICRQS0cyOyB0aGVuCisJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxh
Z3MgJFBLRzIpXCIKKwllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cyKVwiCisJ
ZWNobyBtb2M9XCIkKHBrZy1jb25maWcgLS12YXJpYWJsZT1tb2NfbG9jYXRpb24gUXRDb3JlKVwi
CisJZXhpdCAwCitmaQorCitlY2hvID4mMiAiKiIKK2VjaG8gPiYyICIqIENvdWxkIG5vdCBmaW5k
IFF0IHZpYSBwa2ctY29uZmlnLiIKK2VjaG8gPiYyICIqIFBsZWFzZSBpbnN0YWxsIGVpdGhlciBR
dCA0Ljggb3IgNS54LiBhbmQgbWFrZSBzdXJlIGl0J3MgaW4gUEtHX0NPTkZJR19QQVRIIgorZWNo
byA+JjIgIioiCitleGl0IDEKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYu
Y2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmNlN2ZjODcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLmNjCkBAIC0wLDAgKzEsMTg5NiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBw
ZWxAbGludXgtbTY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zz
a2kgPGJiYXJidWxvdnNraUBnbWFpbC5jb20+CisgKi8KKworI2luY2x1ZGUgPHFnbG9iYWwuaD4K
KworI2luY2x1ZGUgPFFNYWluV2luZG93PgorI2luY2x1ZGUgPFFMaXN0PgorI2luY2x1ZGUgPHF0
ZXh0YnJvd3Nlci5oPgorI2luY2x1ZGUgPFFBY3Rpb24+CisjaW5jbHVkZSA8UUZpbGVEaWFsb2c+
CisjaW5jbHVkZSA8UU1lbnU+CisKKyNpbmNsdWRlIDxxYXBwbGljYXRpb24uaD4KKyNpbmNsdWRl
IDxxZGVza3RvcHdpZGdldC5oPgorI2luY2x1ZGUgPHF0b29sYmFyLmg+CisjaW5jbHVkZSA8cWxh
eW91dC5oPgorI2luY2x1ZGUgPHFzcGxpdHRlci5oPgorI2luY2x1ZGUgPHFsaW5lZWRpdC5oPgor
I2luY2x1ZGUgPHFsYWJlbC5oPgorI2luY2x1ZGUgPHFwdXNoYnV0dG9uLmg+CisjaW5jbHVkZSA8
cW1lbnViYXIuaD4KKyNpbmNsdWRlIDxxbWVzc2FnZWJveC5oPgorI2luY2x1ZGUgPHFyZWdleHAu
aD4KKyNpbmNsdWRlIDxxZXZlbnQuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVk
ZSAibGtjLmgiCisjaW5jbHVkZSAicWNvbmYuaCIKKworI2luY2x1ZGUgInFjb25mLm1vYyIKKyNp
bmNsdWRlICJpbWFnZXMuaCIKKworCitzdGF0aWMgUUFwcGxpY2F0aW9uICpjb25maWdBcHA7Citz
dGF0aWMgQ29uZmlnU2V0dGluZ3MgKmNvbmZpZ1NldHRpbmdzOworCitRQWN0aW9uICpDb25maWdN
YWluV2luZG93OjpzYXZlQWN0aW9uOworCitzdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQo
Y29uc3QgY2hhciogc3RyKQoreworCXJldHVybiBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN0cik7
Cit9CisKK0NvbmZpZ1NldHRpbmdzOjpDb25maWdTZXR0aW5ncygpCisJOiBRU2V0dGluZ3MoImtl
cm5lbC5vcmciLCAicWNvbmYiKQoreworfQorCisvKioKKyAqIFJlYWRzIGEgbGlzdCBvZiBpbnRl
Z2VyIHZhbHVlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiBzZXR0aW5ncy4KKyAqLworUUxpc3Q8aW50
PiBDb25maWdTZXR0aW5nczo6cmVhZFNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2sp
Cit7CisJUUxpc3Q8aW50PiByZXN1bHQ7CisKKwlpZiAoY29udGFpbnMoa2V5KSkKKwl7CisJCVFT
dHJpbmdMaXN0IGVudHJ5TGlzdCA9IHZhbHVlKGtleSkudG9TdHJpbmdMaXN0KCk7CisJCVFTdHJp
bmdMaXN0OjpJdGVyYXRvciBpdDsKKworCQlmb3IgKGl0ID0gZW50cnlMaXN0LmJlZ2luKCk7IGl0
ICE9IGVudHJ5TGlzdC5lbmQoKTsgKytpdCkKKwkJCXJlc3VsdC5wdXNoX2JhY2soKCppdCkudG9J
bnQoKSk7CisKKwkJKm9rID0gdHJ1ZTsKKwl9CisJZWxzZQorCQkqb2sgPSBmYWxzZTsKKworCXJl
dHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogV3JpdGVzIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVl
cyB0byB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3MuCisgKi8KK2Jvb2wgQ29uZmlnU2V0dGluZ3M6
OndyaXRlU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBjb25zdCBRTGlzdDxpbnQ+JiB2YWx1ZSkK
K3sKKwlRU3RyaW5nTGlzdCBzdHJpbmdMaXN0OworCVFMaXN0PGludD46OkNvbnN0SXRlcmF0b3Ig
aXQ7CisKKwlmb3IgKGl0ID0gdmFsdWUuYmVnaW4oKTsgaXQgIT0gdmFsdWUuZW5kKCk7ICsraXQp
CisJCXN0cmluZ0xpc3QucHVzaF9iYWNrKFFTdHJpbmc6Om51bWJlcigqaXQpKTsKKwlzZXRWYWx1
ZShrZXksIHN0cmluZ0xpc3QpOworCisJcmV0dXJuIHRydWU7Cit9CisKKworLyoKKyAqIHNldCB0
aGUgbmV3IGRhdGEKKyAqIFRPRE8gY2hlY2sgdGhlIHZhbHVlCisgKi8KK3ZvaWQgQ29uZmlnSXRl
bTo6b2tSZW5hbWUoaW50IGNvbCkKK3sKK30KKworLyoKKyAqIHVwZGF0ZSB0aGUgZGlzcGxheWVk
IG9mIGEgbWVudSBlbnRyeQorICovCit2b2lkIENvbmZpZ0l0ZW06OnVwZGF0ZU1lbnUodm9pZCkK
K3sKKwlDb25maWdMaXN0KiBsaXN0OworCXN0cnVjdCBzeW1ib2wqIHN5bTsKKwlzdHJ1Y3QgcHJv
cGVydHkgKnByb3A7CisJUVN0cmluZyBwcm9tcHQ7CisJaW50IHR5cGU7CisJdHJpc3RhdGUgZXhw
cjsKKworCWxpc3QgPSBsaXN0VmlldygpOworCWlmIChnb1BhcmVudCkgeworCQlzZXRQaXhtYXAo
cHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51QmFja1BpeCk7CisJCXByb21wdCA9ICIuLiI7CisJCWdv
dG8gc2V0X3Byb21wdDsKKwl9CisKKwlzeW0gPSBtZW51LT5zeW07CisJcHJvcCA9IG1lbnUtPnBy
b21wdDsKKwlwcm9tcHQgPSBxZ2V0dGV4dChtZW51X2dldF9wcm9tcHQobWVudSkpOworCisJaWYg
KHByb3ApIHN3aXRjaCAocHJvcC0+dHlwZSkgeworCWNhc2UgUF9NRU5VOgorCQlpZiAobGlzdC0+
bW9kZSA9PSBzaW5nbGVNb2RlIHx8IGxpc3QtPm1vZGUgPT0gc3ltYm9sTW9kZSkgeworCQkJLyog
YSBtZW51Y29uZmlnIGVudHJ5IGlzIGRpc3BsYXllZCBkaWZmZXJlbnRseQorCQkJICogZGVwZW5k
aW5nIHdoZXRoZXIgaXQncyBhdCB0aGUgdmlldyByb290IG9yIGEgY2hpbGQuCisJCQkgKi8KKwkJ
CWlmIChzeW0gJiYgbGlzdC0+cm9vdEVudHJ5ID09IG1lbnUpCisJCQkJYnJlYWs7CisJCQlzZXRQ
aXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51UGl4KTsKKwkJfSBlbHNlIHsKKwkJCWlmIChz
eW0pCisJCQkJYnJlYWs7CisJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsKKwkJ
fQorCQlnb3RvIHNldF9wcm9tcHQ7CisJY2FzZSBQX0NPTU1FTlQ6CisJCXNldFBpeG1hcChwcm9t
cHRDb2xJZHgsIFFJY29uKCkpOworCQlnb3RvIHNldF9wcm9tcHQ7CisJZGVmYXVsdDoKKwkJOwor
CX0KKwlpZiAoIXN5bSkKKwkJZ290byBzZXRfcHJvbXB0OworCisJc2V0VGV4dChuYW1lQ29sSWR4
LCBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN5bS0+bmFtZSkpOworCisJdHlwZSA9IHN5bV9nZXRf
dHlwZShzeW0pOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19U
UklTVEFURToKKwkJY2hhciBjaDsKKworCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiBs
aXN0LT5vcHRNb2RlID09IG5vcm1hbE9wdCkgeworCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwg
UUljb24oKSk7CisJCQlzZXRUZXh0KG5vQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsKKwkJCXNldFRl
eHQobW9kQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsKKwkJCXNldFRleHQoeWVzQ29sSWR4LCBRU3Ry
aW5nOjpudWxsKTsKKwkJCWJyZWFrOworCQl9CisJCWV4cHIgPSBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSk7CisJCXN3aXRjaCAoZXhwcikgeworCQljYXNlIHllczoKKwkJCWlmIChzeW1faXNf
Y2hvaWNlX3ZhbHVlKHN5bSkgJiYgdHlwZSA9PSBTX0JPT0xFQU4pCisJCQkJc2V0UGl4bWFwKHBy
b21wdENvbElkeCwgbGlzdC0+Y2hvaWNlWWVzUGl4KTsKKwkJCWVsc2UKKwkJCQlzZXRQaXhtYXAo
cHJvbXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xZZXNQaXgpOworCQkJc2V0VGV4dCh5ZXNDb2xJZHgs
ICJZIik7CisJCQljaCA9ICdZJzsKKwkJCWJyZWFrOworCQljYXNlIG1vZDoKKwkJCXNldFBpeG1h
cChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbE1vZFBpeCk7CisJCQlzZXRUZXh0KG1vZENvbElk
eCwgIk0iKTsKKwkJCWNoID0gJ00nOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoc3lt
X2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHR5cGUgPT0gU19CT09MRUFOKQorCQkJCXNldFBpeG1h
cChwcm9tcHRDb2xJZHgsIGxpc3QtPmNob2ljZU5vUGl4KTsKKwkJCWVsc2UKKwkJCQlzZXRQaXht
YXAocHJvbXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xOb1BpeCk7CisJCQlzZXRUZXh0KG5vQ29sSWR4
LCAiTiIpOworCQkJY2ggPSAnTic7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZXhwciAhPSBubykK
KwkJCXNldFRleHQobm9Db2xJZHgsIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubykg
PyAiXyIgOiAwKTsKKwkJaWYgKGV4cHIgIT0gbW9kKQorCQkJc2V0VGV4dChtb2RDb2xJZHgsIHN5
bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpID8gIl8iIDogMCk7CisJCWlmIChleHBy
ICE9IHllcykKKwkJCXNldFRleHQoeWVzQ29sSWR4LCBzeW1fdHJpc3RhdGVfd2l0aGluX3Jhbmdl
KHN5bSwgeWVzKSA/ICJfIiA6IDApOworCisJCXNldFRleHQoZGF0YUNvbElkeCwgUUNoYXIoY2gp
KTsKKwkJYnJlYWs7CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6
CisJCWNvbnN0IGNoYXIqIGRhdGE7CisKKwkJZGF0YSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5
bSk7CisKKwkJc2V0VGV4dChkYXRhQ29sSWR4LCBkYXRhKTsKKwkJaWYgKHR5cGUgPT0gU19TVFJJ
TkcpCisJCQlwcm9tcHQgPSBRU3RyaW5nKCIlMTogJTIiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7
CisJCWVsc2UKKwkJCXByb21wdCA9IFFTdHJpbmcoIiglMikgJTEiKS5hcmcocHJvbXB0KS5hcmco
ZGF0YSk7CisJCWJyZWFrOworCX0KKwlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSAmJiB2aXNpYmxl
KQorCQlwcm9tcHQgKz0gIiAoTkVXKSI7CitzZXRfcHJvbXB0OgorCXNldFRleHQocHJvbXB0Q29s
SWR4LCBwcm9tcHQpOworfQorCit2b2lkIENvbmZpZ0l0ZW06OnRlc3RVcGRhdGVNZW51KGJvb2wg
dikKK3sKKwlDb25maWdJdGVtKiBpOworCisJdmlzaWJsZSA9IHY7CisJaWYgKCFtZW51KQorCQly
ZXR1cm47CisKKwlzeW1fY2FsY192YWx1ZShtZW51LT5zeW0pOworCWlmIChtZW51LT5mbGFncyAm
IE1FTlVfQ0hBTkdFRCkgeworCQkvKiB0aGUgbWVudSBlbnRyeSBjaGFuZ2VkLCBzbyB1cGRhdGUg
YWxsIGxpc3QgaXRlbXMgKi8KKwkJbWVudS0+ZmxhZ3MgJj0gfk1FTlVfQ0hBTkdFRDsKKwkJZm9y
IChpID0gKENvbmZpZ0l0ZW0qKW1lbnUtPmRhdGE7IGk7IGkgPSBpLT5uZXh0SXRlbSkKKwkJCWkt
PnVwZGF0ZU1lbnUoKTsKKwl9IGVsc2UgaWYgKGxpc3RWaWV3KCktPnVwZGF0ZUFsbCkKKwkJdXBk
YXRlTWVudSgpOworfQorCisKKy8qCisgKiBjb25zdHJ1Y3QgYSBtZW51IGVudHJ5CisgKi8KK3Zv
aWQgQ29uZmlnSXRlbTo6aW5pdCh2b2lkKQoreworCWlmIChtZW51KSB7CisJCUNvbmZpZ0xpc3Qq
IGxpc3QgPSBsaXN0VmlldygpOworCQluZXh0SXRlbSA9IChDb25maWdJdGVtKiltZW51LT5kYXRh
OworCQltZW51LT5kYXRhID0gdGhpczsKKworCQlpZiAobGlzdC0+bW9kZSAhPSBmdWxsTW9kZSkK
KwkJCXNldEV4cGFuZGVkKHRydWUpOworCQlzeW1fY2FsY192YWx1ZShtZW51LT5zeW0pOworCX0K
Kwl1cGRhdGVNZW51KCk7Cit9CisKKy8qCisgKiBkZXN0cnVjdCBhIG1lbnUgZW50cnkKKyAqLwor
Q29uZmlnSXRlbTo6fkNvbmZpZ0l0ZW0odm9pZCkKK3sKKwlpZiAobWVudSkgeworCQlDb25maWdJ
dGVtKiogaXAgPSAoQ29uZmlnSXRlbSoqKSZtZW51LT5kYXRhOworCQlmb3IgKDsgKmlwOyBpcCA9
ICYoKmlwKS0+bmV4dEl0ZW0pIHsKKwkJCWlmICgqaXAgPT0gdGhpcykgeworCQkJCSppcCA9IG5l
eHRJdGVtOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCitDb25maWdMaW5lRWRpdDo6
Q29uZmlnTGluZUVkaXQoQ29uZmlnVmlldyogcGFyZW50KQorCTogUGFyZW50KHBhcmVudCkKK3sK
Kwljb25uZWN0KHRoaXMsIFNJR05BTChlZGl0aW5nRmluaXNoZWQoKSksIFNMT1QoaGlkZSgpKSk7
Cit9CisKK3ZvaWQgQ29uZmlnTGluZUVkaXQ6OnNob3coQ29uZmlnSXRlbSogaSkKK3sKKwlpdGVt
ID0gaTsKKwlpZiAoc3ltX2dldF9zdHJpbmdfdmFsdWUoaXRlbS0+bWVudS0+c3ltKSkKKwkJc2V0
VGV4dChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGl0ZW0tPm1l
bnUtPnN5bSkpKTsKKwllbHNlCisJCXNldFRleHQoUVN0cmluZzo6bnVsbCk7CisJUGFyZW50Ojpz
aG93KCk7CisJc2V0Rm9jdXMoKTsKK30KKwordm9pZCBDb25maWdMaW5lRWRpdDo6a2V5UHJlc3NF
dmVudChRS2V5RXZlbnQqIGUpCit7CisJc3dpdGNoIChlLT5rZXkoKSkgeworCWNhc2UgUXQ6Oktl
eV9Fc2NhcGU6CisJCWJyZWFrOworCWNhc2UgUXQ6OktleV9SZXR1cm46CisJY2FzZSBRdDo6S2V5
X0VudGVyOgorCQlzeW1fc2V0X3N0cmluZ192YWx1ZShpdGVtLT5tZW51LT5zeW0sIHRleHQoKS50
b0xhdGluMSgpKTsKKwkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7CisJCWJyZWFrOworCWRl
ZmF1bHQ6CisJCVBhcmVudDo6a2V5UHJlc3NFdmVudChlKTsKKwkJcmV0dXJuOworCX0KKwllLT5h
Y2NlcHQoKTsKKwlwYXJlbnQoKS0+bGlzdC0+c2V0Rm9jdXMoKTsKKwloaWRlKCk7Cit9CisKK0Nv
bmZpZ0xpc3Q6OkNvbmZpZ0xpc3QoQ29uZmlnVmlldyogcCwgY29uc3QgY2hhciAqbmFtZSkKKwk6
IFBhcmVudChwKSwKKwkgIHVwZGF0ZUFsbChmYWxzZSksCisJICBzeW1ib2xZZXNQaXgoeHBtX3N5
bWJvbF95ZXMpLCBzeW1ib2xNb2RQaXgoeHBtX3N5bWJvbF9tb2QpLCBzeW1ib2xOb1BpeCh4cG1f
c3ltYm9sX25vKSwKKwkgIGNob2ljZVllc1BpeCh4cG1fY2hvaWNlX3llcyksIGNob2ljZU5vUGl4
KHhwbV9jaG9pY2Vfbm8pLAorCSAgbWVudVBpeCh4cG1fbWVudSksIG1lbnVJbnZQaXgoeHBtX21l
bnVfaW52KSwgbWVudUJhY2tQaXgoeHBtX21lbnViYWNrKSwgdm9pZFBpeCh4cG1fdm9pZCksCisJ
ICBzaG93TmFtZShmYWxzZSksIHNob3dSYW5nZShmYWxzZSksIHNob3dEYXRhKGZhbHNlKSwgbW9k
ZShzaW5nbGVNb2RlKSwgb3B0TW9kZShub3JtYWxPcHQpLAorCSAgcm9vdEVudHJ5KDApLCBoZWFk
ZXJQb3B1cCgwKQoreworCWludCBpOworCisJc2V0T2JqZWN0TmFtZShuYW1lKTsKKwlzZXRTb3J0
aW5nRW5hYmxlZChmYWxzZSk7CisJc2V0Um9vdElzRGVjb3JhdGVkKHRydWUpOworCisJc2V0VmVy
dGljYWxTY3JvbGxNb2RlKFNjcm9sbFBlclBpeGVsKTsKKwlzZXRIb3Jpem9udGFsU2Nyb2xsTW9k
ZShTY3JvbGxQZXJQaXhlbCk7CisKKwlzZXRIZWFkZXJMYWJlbHMoUVN0cmluZ0xpc3QoKSA8PCAi
T3B0aW9uIiA8PCAiTmFtZSIgPDwgIk4iIDw8ICJNIiA8PCAiWSIgPDwgIlZhbHVlIik7CisKKwlj
b25uZWN0KHRoaXMsIFNJR05BTChpdGVtU2VsZWN0aW9uQ2hhbmdlZCh2b2lkKSksCisJCVNMT1Qo
dXBkYXRlU2VsZWN0aW9uKHZvaWQpKSk7CisKKwlpZiAobmFtZSkgeworCQljb25maWdTZXR0aW5n
cy0+YmVnaW5Hcm91cChuYW1lKTsKKwkJc2hvd05hbWUgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUo
Ii9zaG93TmFtZSIsIGZhbHNlKS50b0Jvb2woKTsKKwkJc2hvd1JhbmdlID0gY29uZmlnU2V0dGlu
Z3MtPnZhbHVlKCIvc2hvd1JhbmdlIiwgZmFsc2UpLnRvQm9vbCgpOworCQlzaG93RGF0YSA9IGNv
bmZpZ1NldHRpbmdzLT52YWx1ZSgiL3Nob3dEYXRhIiwgZmFsc2UpLnRvQm9vbCgpOworCQlvcHRN
b2RlID0gKGVudW0gb3B0aW9uTW9kZSljb25maWdTZXR0aW5ncy0+dmFsdWUoIi9vcHRpb25Nb2Rl
IiwgMCkudG9JbnQoKTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CisJCWNvbm5lY3Qo
Y29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsK
Kwl9CisKKwlhZGRDb2x1bW4ocHJvbXB0Q29sSWR4KTsKKworCXJlaW5pdCgpOworfQorCitib29s
IENvbmZpZ0xpc3Q6Om1lbnVTa2lwKHN0cnVjdCBtZW51ICptZW51KQoreworCWlmIChvcHRNb2Rl
ID09IG5vcm1hbE9wdCAmJiBtZW51X2lzX3Zpc2libGUobWVudSkpCisJCXJldHVybiBmYWxzZTsK
KwlpZiAob3B0TW9kZSA9PSBwcm9tcHRPcHQgJiYgbWVudV9oYXNfcHJvbXB0KG1lbnUpKQorCQly
ZXR1cm4gZmFsc2U7CisJaWYgKG9wdE1vZGUgPT0gYWxsT3B0KQorCQlyZXR1cm4gZmFsc2U7CisJ
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6cmVpbml0KHZvaWQpCit7CisJcmVt
b3ZlQ29sdW1uKGRhdGFDb2xJZHgpOworCXJlbW92ZUNvbHVtbih5ZXNDb2xJZHgpOworCXJlbW92
ZUNvbHVtbihtb2RDb2xJZHgpOworCXJlbW92ZUNvbHVtbihub0NvbElkeCk7CisJcmVtb3ZlQ29s
dW1uKG5hbWVDb2xJZHgpOworCisJaWYgKHNob3dOYW1lKQorCQlhZGRDb2x1bW4obmFtZUNvbElk
eCk7CisJaWYgKHNob3dSYW5nZSkgeworCQlhZGRDb2x1bW4obm9Db2xJZHgpOworCQlhZGRDb2x1
bW4obW9kQ29sSWR4KTsKKwkJYWRkQ29sdW1uKHllc0NvbElkeCk7CisJfQorCWlmIChzaG93RGF0
YSkKKwkJYWRkQ29sdW1uKGRhdGFDb2xJZHgpOworCisJdXBkYXRlTGlzdEFsbCgpOworfQorCit2
b2lkIENvbmZpZ0xpc3Q6OnNhdmVTZXR0aW5ncyh2b2lkKQoreworCWlmICghb2JqZWN0TmFtZSgp
LmlzRW1wdHkoKSkgeworCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkp
OworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93TmFtZSIsIHNob3dOYW1lKTsKKwkJ
Y29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd1JhbmdlIiwgc2hvd1JhbmdlKTsKKwkJY29u
ZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd0RhdGEiLCBzaG93RGF0YSk7CisJCWNvbmZpZ1Nl
dHRpbmdzLT5zZXRWYWx1ZSgiL29wdGlvbk1vZGUiLCAoaW50KW9wdE1vZGUpOworCQljb25maWdT
ZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwl9Cit9CisKK0NvbmZpZ0l0ZW0qIENvbmZpZ0xpc3Q6OmZp
bmRDb25maWdJdGVtKHN0cnVjdCBtZW51ICptZW51KQoreworCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAo
Q29uZmlnSXRlbSopbWVudS0+ZGF0YTsKKworCWZvciAoOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4
dEl0ZW0pIHsKKwkJaWYgKHRoaXMgPT0gaXRlbS0+bGlzdFZpZXcoKSkKKwkJCWJyZWFrOworCX0K
KworCXJldHVybiBpdGVtOworfQorCit2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZVNlbGVjdGlvbih2
b2lkKQoreworCXN0cnVjdCBtZW51ICptZW51OworCWVudW0gcHJvcF90eXBlIHR5cGU7CisKKwlp
ZiAoc2VsZWN0ZWRJdGVtcygpLmNvdW50KCkgPT0gMCkKKwkJcmV0dXJuOworCisJQ29uZmlnSXRl
bSogaXRlbSA9IChDb25maWdJdGVtKilzZWxlY3RlZEl0ZW1zKCkuZmlyc3QoKTsKKwlpZiAoIWl0
ZW0pCisJCXJldHVybjsKKworCW1lbnUgPSBpdGVtLT5tZW51OworCWVtaXQgbWVudUNoYW5nZWQo
bWVudSk7CisJaWYgKCFtZW51KQorCQlyZXR1cm47CisJdHlwZSA9IG1lbnUtPnByb21wdCA/IG1l
bnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKwlpZiAobW9kZSA9PSBtZW51TW9kZSAmJiB0
eXBlID09IFBfTUVOVSkKKwkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7Cit9CisKK3ZvaWQgQ29u
ZmlnTGlzdDo6dXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKQoreworCUNvbmZpZ0l0ZW0qIGxh
c3QgPSAwOworCisJaWYgKCFyb290RW50cnkpIHsKKwkJaWYgKG1vZGUgIT0gbGlzdE1vZGUpCisJ
CQlnb3RvIHVwZGF0ZTsKKwkJUVRyZWVXaWRnZXRJdGVtSXRlcmF0b3IgaXQodGhpcyk7CisJCUNv
bmZpZ0l0ZW0qIGl0ZW07CisKKwkJd2hpbGUgKCppdCkgeworCQkJaXRlbSA9IChDb25maWdJdGVt
KikoKml0KTsKKwkJCWlmICghaXRlbS0+bWVudSkKKwkJCQljb250aW51ZTsKKwkJCWl0ZW0tPnRl
c3RVcGRhdGVNZW51KG1lbnVfaXNfdmlzaWJsZShpdGVtLT5tZW51KSk7CisKKwkJCSsraXQ7CisJ
CX0KKwkJcmV0dXJuOworCX0KKworCWlmIChyb290RW50cnkgIT0gJnJvb3RtZW51ICYmIChtb2Rl
ID09IHNpbmdsZU1vZGUgfHwKKwkgICAgKG1vZGUgPT0gc3ltYm9sTW9kZSAmJiByb290RW50cnkt
PnBhcmVudCAhPSAmcm9vdG1lbnUpKSkgeworCQlpdGVtID0gKENvbmZpZ0l0ZW0gKil0b3BMZXZl
bEl0ZW0oMCk7CisJCWlmICghaXRlbSkKKwkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbSh0aGlzLCAw
LCB0cnVlKTsKKwkJbGFzdCA9IGl0ZW07CisJfQorCWlmICgobW9kZSA9PSBzaW5nbGVNb2RlIHx8
IChtb2RlID09IHN5bWJvbE1vZGUgJiYgIShyb290RW50cnktPmZsYWdzICYgTUVOVV9ST09UKSkp
ICYmCisJICAgIHJvb3RFbnRyeS0+c3ltICYmIHJvb3RFbnRyeS0+cHJvbXB0KSB7CisJCWl0ZW0g
PSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmcoKSA6IGZpcnN0Q2hpbGQoKTsKKwkJaWYgKCFpdGVt
KQorCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHRoaXMsIGxhc3QsIHJvb3RFbnRyeSwgdHJ1ZSk7
CisJCWVsc2UKKwkJCWl0ZW0tPnRlc3RVcGRhdGVNZW51KHRydWUpOworCisJCXVwZGF0ZU1lbnVM
aXN0KGl0ZW0sIHJvb3RFbnRyeSk7CisJCXVwZGF0ZSgpOworCQlyZXNpemVDb2x1bW5Ub0NvbnRl
bnRzKDApOworCQlyZXR1cm47CisJfQordXBkYXRlOgorCXVwZGF0ZU1lbnVMaXN0KHRoaXMsIHJv
b3RFbnRyeSk7CisJdXBkYXRlKCk7CisJcmVzaXplQ29sdW1uVG9Db250ZW50cygwKTsKK30KKwor
dm9pZCBDb25maWdMaXN0OjpzZXRWYWx1ZShDb25maWdJdGVtKiBpdGVtLCB0cmlzdGF0ZSB2YWwp
Cit7CisJc3RydWN0IHN5bWJvbCogc3ltOworCWludCB0eXBlOworCXRyaXN0YXRlIG9sZHZhbDsK
KworCXN5bSA9IGl0ZW0tPm1lbnUgPyBpdGVtLT5tZW51LT5zeW0gOiAwOworCWlmICghc3ltKQor
CQlyZXR1cm47CisKKwl0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisJc3dpdGNoICh0eXBlKSB7
CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlvbGR2YWwgPSBzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisKKwkJaWYgKCFzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSwgdmFsKSkKKwkJCXJldHVybjsKKwkJaWYgKG9sZHZhbCA9PSBubyAmJiBpdGVtLT5tZW51LT5s
aXN0KQorCQkJaXRlbS0+c2V0RXhwYW5kZWQodHJ1ZSk7CisJCXBhcmVudCgpLT51cGRhdGVMaXN0
KGl0ZW0pOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6Y2hhbmdlVmFsdWUo
Q29uZmlnSXRlbSogaXRlbSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07CisJc3RydWN0IG1lbnUq
IG1lbnU7CisJaW50IHR5cGUsIG9sZGV4cHIsIG5ld2V4cHI7CisKKwltZW51ID0gaXRlbS0+bWVu
dTsKKwlpZiAoIW1lbnUpCisJCXJldHVybjsKKwlzeW0gPSBtZW51LT5zeW07CisJaWYgKCFzeW0p
IHsKKwkJaWYgKGl0ZW0tPm1lbnUtPmxpc3QpCisJCQlpdGVtLT5zZXRFeHBhbmRlZCghaXRlbS0+
aXNFeHBhbmRlZCgpKTsKKwkJcmV0dXJuOworCX0KKworCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3lt
KTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6
CisJCW9sZGV4cHIgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCW5ld2V4cHIgPSBz
eW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCWlmIChpdGVtLT5tZW51LT5saXN0KSB7
CisJCQlpZiAob2xkZXhwciA9PSBuZXdleHByKQorCQkJCWl0ZW0tPnNldEV4cGFuZGVkKCFpdGVt
LT5pc0V4cGFuZGVkKCkpOworCQkJZWxzZSBpZiAob2xkZXhwciA9PSBubykKKwkJCQlpdGVtLT5z
ZXRFeHBhbmRlZCh0cnVlKTsKKwkJfQorCQlpZiAob2xkZXhwciAhPSBuZXdleHByKQorCQkJcGFy
ZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7CisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJY2FzZSBT
X0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQlwYXJlbnQoKS0+bGluZUVkaXQtPnNob3coaXRlbSk7
CisJCWJyZWFrOworCX0KK30KKwordm9pZCBDb25maWdMaXN0OjpzZXRSb290TWVudShzdHJ1Y3Qg
bWVudSAqbWVudSkKK3sKKwllbnVtIHByb3BfdHlwZSB0eXBlOworCisJaWYgKHJvb3RFbnRyeSA9
PSBtZW51KQorCQlyZXR1cm47CisJdHlwZSA9IG1lbnUgJiYgbWVudS0+cHJvbXB0ID8gbWVudS0+
cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCWlmICh0eXBlICE9IFBfTUVOVSkKKwkJcmV0dXJu
OworCXVwZGF0ZU1lbnVMaXN0KHRoaXMsIDApOworCXJvb3RFbnRyeSA9IG1lbnU7CisJdXBkYXRl
TGlzdEFsbCgpOworCWlmIChjdXJyZW50SXRlbSgpKSB7CisJCWN1cnJlbnRJdGVtKCktPnNldFNl
bGVjdGVkKGhhc0ZvY3VzKCkpOworCQlzY3JvbGxUb0l0ZW0oY3VycmVudEl0ZW0oKSk7CisJfQor
fQorCit2b2lkIENvbmZpZ0xpc3Q6OnNldFBhcmVudE1lbnUodm9pZCkKK3sKKwlDb25maWdJdGVt
KiBpdGVtOworCXN0cnVjdCBtZW51ICpvbGRyb290OworCisJb2xkcm9vdCA9IHJvb3RFbnRyeTsK
KwlpZiAocm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJcmV0dXJuOworCXNldFJvb3RNZW51KG1l
bnVfZ2V0X3BhcmVudF9tZW51KHJvb3RFbnRyeS0+cGFyZW50KSk7CisKKwlRVHJlZVdpZGdldEl0
ZW1JdGVyYXRvciBpdCh0aGlzKTsKKwl3aGlsZSAoKml0KSB7CisJCWl0ZW0gPSAoQ29uZmlnSXRl
bSAqKSgqaXQpOworCQlpZiAoaXRlbS0+bWVudSA9PSBvbGRyb290KSB7CisJCQlzZXRDdXJyZW50
SXRlbShpdGVtKTsKKwkJCXNjcm9sbFRvSXRlbShpdGVtKTsKKwkJCWJyZWFrOworCQl9CisKKwkJ
KytpdDsKKwl9Cit9CisKKy8qCisgKiB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiBhIG1lbnUg
ZW50cnkKKyAqICAgcmVtb3Zlcy9hZGRzIHRoZSBlbnRyaWVzIGZyb20gdGhlIHBhcmVudCB3aWRn
ZXQgYXMgbmVjZXNzYXJ5CisgKgorICogcGFyZW50OiBlaXRoZXIgdGhlIG1lbnUgbGlzdCB3aWRn
ZXQgb3IgYSBtZW51IGVudHJ5IHdpZGdldAorICogbWVudTogZW50cnkgdG8gYmUgdXBkYXRlZAor
ICovCit2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZU1lbnVMaXN0KENvbmZpZ0l0ZW0gKnBhcmVudCwg
c3RydWN0IG1lbnUqIG1lbnUpCit7CisJc3RydWN0IG1lbnUqIGNoaWxkOworCUNvbmZpZ0l0ZW0q
IGl0ZW07CisJQ29uZmlnSXRlbSogbGFzdDsKKwlib29sIHZpc2libGU7CisJZW51bSBwcm9wX3R5
cGUgdHlwZTsKKworCWlmICghbWVudSkgeworCQl3aGlsZSAocGFyZW50LT5jaGlsZENvdW50KCkg
PiAwKQorCQl7CisJCQlkZWxldGUgcGFyZW50LT50YWtlQ2hpbGQoMCk7CisJCX0KKworCQlyZXR1
cm47CisJfQorCisJbGFzdCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworCWlmIChsYXN0ICYmICFs
YXN0LT5nb1BhcmVudCkKKwkJbGFzdCA9IDA7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNp
YmxpbmcoKSA6IHBhcmVudC0+Zmlyc3RDaGlsZCgpOworCQl0eXBlID0gY2hpbGQtPnByb21wdCA/
IGNoaWxkLT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisKKwkJc3dpdGNoIChtb2RlKSB7CisJ
CWNhc2UgbWVudU1vZGU6CisJCQlpZiAoIShjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQorCQkJ
CWdvdG8gaGlkZTsKKwkJCWJyZWFrOworCQljYXNlIHN5bWJvbE1vZGU6CisJCQlpZiAoY2hpbGQt
PmZsYWdzICYgTUVOVV9ST09UKQorCQkJCWdvdG8gaGlkZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJCX0KKworCQl2aXNpYmxlID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsK
KwkJaWYgKCFtZW51U2tpcChjaGlsZCkpIHsKKwkJCWlmICghY2hpbGQtPnN5bSAmJiAhY2hpbGQt
Pmxpc3QgJiYgIWNoaWxkLT5wcm9tcHQpCisJCQkJY29udGludWU7CisJCQlpZiAoIWl0ZW0gfHwg
aXRlbS0+bWVudSAhPSBjaGlsZCkKKwkJCQlpdGVtID0gbmV3IENvbmZpZ0l0ZW0ocGFyZW50LCBs
YXN0LCBjaGlsZCwgdmlzaWJsZSk7CisJCQllbHNlCisJCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUo
dmlzaWJsZSk7CisKKwkJCWlmIChtb2RlID09IGZ1bGxNb2RlIHx8IG1vZGUgPT0gbWVudU1vZGUg
fHwgdHlwZSAhPSBQX01FTlUpCisJCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgY2hpbGQpOworCQkJ
ZWxzZQorCQkJCXVwZGF0ZU1lbnVMaXN0KGl0ZW0sIDApOworCQkJbGFzdCA9IGl0ZW07CisJCQlj
b250aW51ZTsKKwkJfQorCWhpZGU6CisJCWlmIChpdGVtICYmIGl0ZW0tPm1lbnUgPT0gY2hpbGQp
IHsKKwkJCWxhc3QgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsKKwkJCWlmIChsYXN0ID09IGl0ZW0p
CisJCQkJbGFzdCA9IDA7CisJCQllbHNlIHdoaWxlIChsYXN0LT5uZXh0U2libGluZygpICE9IGl0
ZW0pCisJCQkJbGFzdCA9IGxhc3QtPm5leHRTaWJsaW5nKCk7CisJCQlkZWxldGUgaXRlbTsKKwkJ
fQorCX0KK30KKwordm9pZCBDb25maWdMaXN0Ojp1cGRhdGVNZW51TGlzdChDb25maWdMaXN0ICpw
YXJlbnQsIHN0cnVjdCBtZW51KiBtZW51KQoreworCXN0cnVjdCBtZW51KiBjaGlsZDsKKwlDb25m
aWdJdGVtKiBpdGVtOworCUNvbmZpZ0l0ZW0qIGxhc3Q7CisJYm9vbCB2aXNpYmxlOworCWVudW0g
cHJvcF90eXBlIHR5cGU7CisKKwlpZiAoIW1lbnUpIHsKKwkJd2hpbGUgKHBhcmVudC0+dG9wTGV2
ZWxJdGVtQ291bnQoKSA+IDApCisJCXsKKwkJCWRlbGV0ZSBwYXJlbnQtPnRha2VUb3BMZXZlbEl0
ZW0oMCk7CisJCX0KKworCQlyZXR1cm47CisJfQorCisJbGFzdCA9IChDb25maWdJdGVtKilwYXJl
bnQtPnRvcExldmVsSXRlbSgwKTsKKwlpZiAobGFzdCAmJiAhbGFzdC0+Z29QYXJlbnQpCisJCWxh
c3QgPSAwOworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dCkgeworCQlpdGVtID0gbGFzdCA/IGxhc3QtPm5leHRTaWJsaW5nKCkgOiAoQ29uZmlnSXRl
bSopcGFyZW50LT50b3BMZXZlbEl0ZW0oMCk7CisJCXR5cGUgPSBjaGlsZC0+cHJvbXB0ID8gY2hp
bGQtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2Fz
ZSBtZW51TW9kZToKKwkJCWlmICghKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkpCisJCQkJZ290
byBoaWRlOworCQkJYnJlYWs7CisJCWNhc2Ugc3ltYm9sTW9kZToKKwkJCWlmIChjaGlsZC0+Zmxh
Z3MgJiBNRU5VX1JPT1QpCisJCQkJZ290byBoaWRlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ
CQlicmVhazsKKwkJfQorCisJCXZpc2libGUgPSBtZW51X2lzX3Zpc2libGUoY2hpbGQpOworCQlp
ZiAoIW1lbnVTa2lwKGNoaWxkKSkgeworCQkJaWYgKCFjaGlsZC0+c3ltICYmICFjaGlsZC0+bGlz
dCAmJiAhY2hpbGQtPnByb21wdCkKKwkJCQljb250aW51ZTsKKwkJCWlmICghaXRlbSB8fCBpdGVt
LT5tZW51ICE9IGNoaWxkKQorCQkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbShwYXJlbnQsIGxhc3Qs
IGNoaWxkLCB2aXNpYmxlKTsKKwkJCWVsc2UKKwkJCQlpdGVtLT50ZXN0VXBkYXRlTWVudSh2aXNp
YmxlKTsKKworCQkJaWYgKG1vZGUgPT0gZnVsbE1vZGUgfHwgbW9kZSA9PSBtZW51TW9kZSB8fCB0
eXBlICE9IFBfTUVOVSkKKwkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCBjaGlsZCk7CisJCQllbHNl
CisJCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgMCk7CisJCQlsYXN0ID0gaXRlbTsKKwkJCWNvbnRp
bnVlOworCQl9CisJaGlkZToKKwkJaWYgKGl0ZW0gJiYgaXRlbS0+bWVudSA9PSBjaGlsZCkgewor
CQkJbGFzdCA9IChDb25maWdJdGVtKilwYXJlbnQtPnRvcExldmVsSXRlbSgwKTsKKwkJCWlmIChs
YXN0ID09IGl0ZW0pCisJCQkJbGFzdCA9IDA7CisJCQllbHNlIHdoaWxlIChsYXN0LT5uZXh0U2li
bGluZygpICE9IGl0ZW0pCisJCQkJbGFzdCA9IGxhc3QtPm5leHRTaWJsaW5nKCk7CisJCQlkZWxl
dGUgaXRlbTsKKwkJfQorCX0KK30KKwordm9pZCBDb25maWdMaXN0OjprZXlQcmVzc0V2ZW50KFFL
ZXlFdmVudCogZXYpCit7CisJUVRyZWVXaWRnZXRJdGVtKiBpID0gY3VycmVudEl0ZW0oKTsKKwlD
b25maWdJdGVtKiBpdGVtOworCXN0cnVjdCBtZW51ICptZW51OworCWVudW0gcHJvcF90eXBlIHR5
cGU7CisKKwlpZiAoZXYtPmtleSgpID09IFF0OjpLZXlfRXNjYXBlICYmIG1vZGUgIT0gZnVsbE1v
ZGUgJiYgbW9kZSAhPSBsaXN0TW9kZSkgeworCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7CisJCWV2
LT5hY2NlcHQoKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghaSkgeworCQlQYXJlbnQ6OmtleVBy
ZXNzRXZlbnQoZXYpOworCQlyZXR1cm47CisJfQorCWl0ZW0gPSAoQ29uZmlnSXRlbSopaTsKKwor
CXN3aXRjaCAoZXYtPmtleSgpKSB7CisJY2FzZSBRdDo6S2V5X1JldHVybjoKKwljYXNlIFF0OjpL
ZXlfRW50ZXI6CisJCWlmIChpdGVtLT5nb1BhcmVudCkgeworCQkJZW1pdCBwYXJlbnRTZWxlY3Rl
ZCgpOworCQkJYnJlYWs7CisJCX0KKwkJbWVudSA9IGl0ZW0tPm1lbnU7CisJCWlmICghbWVudSkK
KwkJCWJyZWFrOworCQl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDog
UF9VTktOT1dOOworCQlpZiAodHlwZSA9PSBQX01FTlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYK
KwkJICAgIG1vZGUgIT0gZnVsbE1vZGUgJiYgbW9kZSAhPSBtZW51TW9kZSkgeworCQkJZW1pdCBt
ZW51U2VsZWN0ZWQobWVudSk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgUXQ6OktleV9TcGFjZToK
KwkJY2hhbmdlVmFsdWUoaXRlbSk7CisJCWJyZWFrOworCWNhc2UgUXQ6OktleV9OOgorCQlzZXRW
YWx1ZShpdGVtLCBubyk7CisJCWJyZWFrOworCWNhc2UgUXQ6OktleV9NOgorCQlzZXRWYWx1ZShp
dGVtLCBtb2QpOworCQlicmVhazsKKwljYXNlIFF0OjpLZXlfWToKKwkJc2V0VmFsdWUoaXRlbSwg
eWVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUGFyZW50OjprZXlQcmVzc0V2ZW50KGV2KTsK
KwkJcmV0dXJuOworCX0KKwlldi0+YWNjZXB0KCk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6bW91
c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBlKQoreworCS8vUVBvaW50IHAoY29udGVudHNUb1Zp
ZXdwb3J0KGUtPnBvcygpKSk7CisJLy9wcmludGYoImNvbnRlbnRzTW91c2VQcmVzc0V2ZW50OiAl
ZCwlZFxuIiwgcC54KCksIHAueSgpKTsKKwlQYXJlbnQ6Om1vdXNlUHJlc3NFdmVudChlKTsKK30K
Kwordm9pZCBDb25maWdMaXN0Ojptb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCogZSkKK3sK
KwlRUG9pbnQgcCA9IGUtPnBvcygpOworCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSop
aXRlbUF0KHApOworCXN0cnVjdCBtZW51ICptZW51OworCWVudW0gcHJvcF90eXBlIHB0eXBlOwor
CVFJY29uIGljb247CisJaW50IGlkeCwgeDsKKworCWlmICghaXRlbSkKKwkJZ290byBza2lwOwor
CisJbWVudSA9IGl0ZW0tPm1lbnU7CisJeCA9IGhlYWRlcigpLT5vZmZzZXQoKSArIHAueCgpOwor
CWlkeCA9IGhlYWRlcigpLT5sb2dpY2FsSW5kZXhBdCh4KTsKKwlzd2l0Y2ggKGlkeCkgeworCWNh
c2UgcHJvbXB0Q29sSWR4OgorCQlpY29uID0gaXRlbS0+cGl4bWFwKHByb21wdENvbElkeCk7CisJ
CWlmICghaWNvbi5pc051bGwoKSkgeworCQkJaW50IG9mZiA9IGhlYWRlcigpLT5zZWN0aW9uUG9z
aXRpb24oMCkgKyB2aXN1YWxSZWN0KGluZGV4QXQocCkpLngoKSArIDQ7IC8vIDQgaXMgSGFyZGNv
ZGVkIGltYWdlIG9mZnNldC4gVGhlcmUgbWlnaHQgYmUgYSB3YXkgdG8gZG8gaXQgcHJvcGVybHku
CisJCQlpZiAoeCA+PSBvZmYgJiYgeCA8IG9mZiArIGljb24uYXZhaWxhYmxlU2l6ZXMoKS5maXJz
dCgpLndpZHRoKCkpIHsKKwkJCQlpZiAoaXRlbS0+Z29QYXJlbnQpIHsKKwkJCQkJZW1pdCBwYXJl
bnRTZWxlY3RlZCgpOworCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgaWYgKCFtZW51KQorCQkJCQli
cmVhazsKKwkJCQlwdHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBf
VU5LTk9XTjsKKwkJCQlpZiAocHR5cGUgPT0gUF9NRU5VICYmIHJvb3RFbnRyeSAhPSBtZW51ICYm
CisJCQkJICAgIG1vZGUgIT0gZnVsbE1vZGUgJiYgbW9kZSAhPSBtZW51TW9kZSkKKwkJCQkJZW1p
dCBtZW51U2VsZWN0ZWQobWVudSk7CisJCQkJZWxzZQorCQkJCQljaGFuZ2VWYWx1ZShpdGVtKTsK
KwkJCX0KKwkJfQorCQlicmVhazsKKwljYXNlIG5vQ29sSWR4OgorCQlzZXRWYWx1ZShpdGVtLCBu
byk7CisJCWJyZWFrOworCWNhc2UgbW9kQ29sSWR4OgorCQlzZXRWYWx1ZShpdGVtLCBtb2QpOwor
CQlicmVhazsKKwljYXNlIHllc0NvbElkeDoKKwkJc2V0VmFsdWUoaXRlbSwgeWVzKTsKKwkJYnJl
YWs7CisJY2FzZSBkYXRhQ29sSWR4OgorCQljaGFuZ2VWYWx1ZShpdGVtKTsKKwkJYnJlYWs7CisJ
fQorCitza2lwOgorCS8vcHJpbnRmKCJjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50OiAlZCwlZFxu
IiwgcC54KCksIHAueSgpKTsKKwlQYXJlbnQ6Om1vdXNlUmVsZWFzZUV2ZW50KGUpOworfQorCit2
b2lkIENvbmZpZ0xpc3Q6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiBlKQoreworCS8vUVBv
aW50IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBvcygpKSk7CisJLy9wcmludGYoImNvbnRlbnRz
TW91c2VNb3ZlRXZlbnQ6ICVkLCVkXG4iLCBwLngoKSwgcC55KCkpOworCVBhcmVudDo6bW91c2VN
b3ZlRXZlbnQoZSk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VEb3VibGVDbGlja0V2ZW50
KFFNb3VzZUV2ZW50KiBlKQoreworCVFQb2ludCBwID0gZS0+cG9zKCk7IC8vIFRPRE86IENoZWNr
IGlmIHRoaXMgd29ya3Mod2FzIGNvbnRlbnRzVG9WaWV3cG9ydCkuCisJQ29uZmlnSXRlbSogaXRl
bSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJZW51bSBw
cm9wX3R5cGUgcHR5cGU7CisKKwlpZiAoIWl0ZW0pCisJCWdvdG8gc2tpcDsKKwlpZiAoaXRlbS0+
Z29QYXJlbnQpIHsKKwkJZW1pdCBwYXJlbnRTZWxlY3RlZCgpOworCQlnb3RvIHNraXA7CisJfQor
CW1lbnUgPSBpdGVtLT5tZW51OworCWlmICghbWVudSkKKwkJZ290byBza2lwOworCXB0eXBlID0g
bWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCWlmIChwdHlw
ZSA9PSBQX01FTlUgJiYgKG1vZGUgPT0gc2luZ2xlTW9kZSB8fCBtb2RlID09IHN5bWJvbE1vZGUp
KQorCQllbWl0IG1lbnVTZWxlY3RlZChtZW51KTsKKwllbHNlIGlmIChtZW51LT5zeW0pCisJCWNo
YW5nZVZhbHVlKGl0ZW0pOworCitza2lwOgorCS8vcHJpbnRmKCJjb250ZW50c01vdXNlRG91Ymxl
Q2xpY2tFdmVudDogJWQsJWRcbiIsIHAueCgpLCBwLnkoKSk7CisJUGFyZW50Ojptb3VzZURvdWJs
ZUNsaWNrRXZlbnQoZSk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6Zm9jdXNJbkV2ZW50KFFGb2N1
c0V2ZW50ICplKQoreworCXN0cnVjdCBtZW51ICptZW51ID0gTlVMTDsKKworCVBhcmVudDo6Zm9j
dXNJbkV2ZW50KGUpOworCisJQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtICopY3VycmVu
dEl0ZW0oKTsKKwlpZiAoaXRlbSkgeworCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKKwkJbWVu
dSA9IGl0ZW0tPm1lbnU7CisJfQorCWVtaXQgZ290Rm9jdXMobWVudSk7Cit9CisKK3ZvaWQgQ29u
ZmlnTGlzdDo6Y29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSkKK3sKKwlpZiAo
ZS0+eSgpIDw9IGhlYWRlcigpLT5nZW9tZXRyeSgpLmJvdHRvbSgpKSB7CisJCWlmICghaGVhZGVy
UG9wdXApIHsKKwkJCVFBY3Rpb24gKmFjdGlvbjsKKworCQkJaGVhZGVyUG9wdXAgPSBuZXcgUU1l
bnUodGhpcyk7CisJCQlhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBOYW1lIiwgdGhpcyk7CisJ
CQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCQkJICBjb25uZWN0KGFjdGlvbiwgU0lH
TkFMKHRvZ2dsZWQoYm9vbCkpLAorCQkJCSAgcGFyZW50KCksIFNMT1Qoc2V0U2hvd05hbWUoYm9v
bCkpKTsKKwkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dOYW1lQ2hhbmdlZChib29s
KSksCisJCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsKKwkJCSAgYWN0aW9uLT5zZXRD
aGVja2VkKHNob3dOYW1lKTsKKwkJCSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOwor
CQkJYWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgUmFuZ2UiLCB0aGlzKTsKKwkJCSAgYWN0aW9u
LT5zZXRDaGVja2FibGUodHJ1ZSk7CisJCQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xl
ZChib29sKSksCisJCQkJICBwYXJlbnQoKSwgU0xPVChzZXRTaG93UmFuZ2UoYm9vbCkpKTsKKwkJ
CSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dSYW5nZUNoYW5nZWQoYm9vbCkpLAorCQkJ
CSAgYWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7CisJCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChz
aG93UmFuZ2UpOworCQkJICBoZWFkZXJQb3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7CisJCQlhY3Rp
b24gPSBuZXcgUUFjdGlvbigiU2hvdyBEYXRhIiwgdGhpcyk7CisJCQkgIGFjdGlvbi0+c2V0Q2hl
Y2thYmxlKHRydWUpOworCQkJICBjb25uZWN0KGFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkp
LAorCQkJCSAgcGFyZW50KCksIFNMT1Qoc2V0U2hvd0RhdGEoYm9vbCkpKTsKKwkJCSAgY29ubmVj
dChwYXJlbnQoKSwgU0lHTkFMKHNob3dEYXRhQ2hhbmdlZChib29sKSksCisJCQkJICBhY3Rpb24s
IFNMT1Qoc2V0T24oYm9vbCkpKTsKKwkJCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dEYXRhKTsK
KwkJCSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOworCQl9CisJCWhlYWRlclBvcHVw
LT5leGVjKGUtPmdsb2JhbFBvcygpKTsKKwkJZS0+YWNjZXB0KCk7CisJfSBlbHNlCisJCWUtPmln
bm9yZSgpOworfQorCitDb25maWdWaWV3KkNvbmZpZ1ZpZXc6OnZpZXdMaXN0OworUUFjdGlvbiAq
Q29uZmlnVmlldzo6c2hvd05vcm1hbEFjdGlvbjsKK1FBY3Rpb24gKkNvbmZpZ1ZpZXc6OnNob3dB
bGxBY3Rpb247CitRQWN0aW9uICpDb25maWdWaWV3OjpzaG93UHJvbXB0QWN0aW9uOworCitDb25m
aWdWaWV3OjpDb25maWdWaWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKKwk6
IFBhcmVudChwYXJlbnQpCit7CisJc2V0T2JqZWN0TmFtZShuYW1lKTsKKwlRVkJveExheW91dCAq
dmVydGljYWxMYXlvdXQgPSBuZXcgUVZCb3hMYXlvdXQodGhpcyk7CisJdmVydGljYWxMYXlvdXQt
PnNldENvbnRlbnRzTWFyZ2lucygwLCAwLCAwLCAwKTsKKworCWxpc3QgPSBuZXcgQ29uZmlnTGlz
dCh0aGlzKTsKKwl2ZXJ0aWNhbExheW91dC0+YWRkV2lkZ2V0KGxpc3QpOworCWxpbmVFZGl0ID0g
bmV3IENvbmZpZ0xpbmVFZGl0KHRoaXMpOworCWxpbmVFZGl0LT5oaWRlKCk7CisJdmVydGljYWxM
YXlvdXQtPmFkZFdpZGdldChsaW5lRWRpdCk7CisKKwl0aGlzLT5uZXh0VmlldyA9IHZpZXdMaXN0
OworCXZpZXdMaXN0ID0gdGhpczsKK30KKworQ29uZmlnVmlldzo6fkNvbmZpZ1ZpZXcodm9pZCkK
K3sKKwlDb25maWdWaWV3KiogdnA7CisKKwlmb3IgKHZwID0gJnZpZXdMaXN0OyAqdnA7IHZwID0g
JigqdnApLT5uZXh0VmlldykgeworCQlpZiAoKnZwID09IHRoaXMpIHsKKwkJCSp2cCA9IG5leHRW
aWV3OworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3ZvaWQgQ29uZmlnVmlldzo6c2V0T3B0aW9u
TW9kZShRQWN0aW9uICphY3QpCit7CisJaWYgKGFjdCA9PSBzaG93Tm9ybWFsQWN0aW9uKQorCQls
aXN0LT5vcHRNb2RlID0gbm9ybWFsT3B0OworCWVsc2UgaWYgKGFjdCA9PSBzaG93QWxsQWN0aW9u
KQorCQlsaXN0LT5vcHRNb2RlID0gYWxsT3B0OworCWVsc2UKKwkJbGlzdC0+b3B0TW9kZSA9IHBy
b21wdE9wdDsKKworCWxpc3QtPnVwZGF0ZUxpc3RBbGwoKTsKK30KKwordm9pZCBDb25maWdWaWV3
OjpzZXRTaG93TmFtZShib29sIGIpCit7CisJaWYgKGxpc3QtPnNob3dOYW1lICE9IGIpIHsKKwkJ
bGlzdC0+c2hvd05hbWUgPSBiOworCQlsaXN0LT5yZWluaXQoKTsKKwkJZW1pdCBzaG93TmFtZUNo
YW5nZWQoYik7CisJfQorfQorCit2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dSYW5nZShib29sIGIp
Cit7CisJaWYgKGxpc3QtPnNob3dSYW5nZSAhPSBiKSB7CisJCWxpc3QtPnNob3dSYW5nZSA9IGI7
CisJCWxpc3QtPnJlaW5pdCgpOworCQllbWl0IHNob3dSYW5nZUNoYW5nZWQoYik7CisJfQorfQor
Cit2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dEYXRhKGJvb2wgYikKK3sKKwlpZiAobGlzdC0+c2hv
d0RhdGEgIT0gYikgeworCQlsaXN0LT5zaG93RGF0YSA9IGI7CisJCWxpc3QtPnJlaW5pdCgpOwor
CQllbWl0IHNob3dEYXRhQ2hhbmdlZChiKTsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6c2V0
QWxsT3Blbihib29sIG9wZW4pCit7CisJUVRyZWVXaWRnZXRJdGVtSXRlcmF0b3IgaXQodGhpcyk7
CisKKwl3aGlsZSAoKml0KSB7CisJCSgqaXQpLT5zZXRFeHBhbmRlZChvcGVuKTsKKworCQkrK2l0
OworCX0KK30KKwordm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0KENvbmZpZ0l0ZW0qIGl0ZW0p
Cit7CisJQ29uZmlnVmlldyogdjsKKworCWZvciAodiA9IHZpZXdMaXN0OyB2OyB2ID0gdi0+bmV4
dFZpZXcpCisJCXYtPmxpc3QtPnVwZGF0ZUxpc3QoaXRlbSk7Cit9CisKK3ZvaWQgQ29uZmlnVmll
dzo6dXBkYXRlTGlzdEFsbCh2b2lkKQoreworCUNvbmZpZ1ZpZXcqIHY7CisKKwlmb3IgKHYgPSB2
aWV3TGlzdDsgdjsgdiA9IHYtPm5leHRWaWV3KQorCQl2LT5saXN0LT51cGRhdGVMaXN0QWxsKCk7
Cit9CisKK0NvbmZpZ0luZm9WaWV3OjpDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNv
bnN0IGNoYXIgKm5hbWUpCisJOiBQYXJlbnQocGFyZW50KSwgc3ltKDApLCBfbWVudSgwKQorewor
CXNldE9iamVjdE5hbWUobmFtZSk7CisKKworCWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkg
eworCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkpOworCQlzZXRTaG93
RGVidWcoY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RlYnVnIiwgZmFsc2UpLnRvQm9vbCgp
KTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CisJCWNvbm5lY3QoY29uZmlnQXBwLCBT
SUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsKKwl9Cit9CisKK3Zv
aWQgQ29uZmlnSW5mb1ZpZXc6OnNhdmVTZXR0aW5ncyh2b2lkKQoreworCWlmICghb2JqZWN0TmFt
ZSgpLmlzRW1wdHkoKSkgeworCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1l
KCkpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93RGVidWciLCBzaG93RGVidWco
KSk7CisJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOworCX0KK30KKwordm9pZCBDb25maWdJ
bmZvVmlldzo6c2V0U2hvd0RlYnVnKGJvb2wgYikKK3sKKwlpZiAoX3Nob3dEZWJ1ZyAhPSBiKSB7
CisJCV9zaG93RGVidWcgPSBiOworCQlpZiAoX21lbnUpCisJCQltZW51SW5mbygpOworCQllbHNl
IGlmIChzeW0pCisJCQlzeW1ib2xJbmZvKCk7CisJCWVtaXQgc2hvd0RlYnVnQ2hhbmdlZChiKTsK
Kwl9Cit9CisKK3ZvaWQgQ29uZmlnSW5mb1ZpZXc6OnNldEluZm8oc3RydWN0IG1lbnUgKm0pCit7
CisJaWYgKF9tZW51ID09IG0pCisJCXJldHVybjsKKwlfbWVudSA9IG07CisJc3ltID0gTlVMTDsK
KwlpZiAoIV9tZW51KQorCQljbGVhcigpOworCWVsc2UKKwkJbWVudUluZm8oKTsKK30KKwordm9p
ZCBDb25maWdJbmZvVmlldzo6c3ltYm9sSW5mbyh2b2lkKQoreworCVFTdHJpbmcgc3RyOworCisJ
c3RyICs9ICI8YmlnPlN5bWJvbDogPGI+IjsKKwlzdHIgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFt
ZSk7CisJc3RyICs9ICI8L2I+PC9iaWc+PGJyPjxicj52YWx1ZTogIjsKKwlzdHIgKz0gcHJpbnRf
ZmlsdGVyKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOworCXN0ciArPSAiPGJyPnZpc2liaWxp
dHk6ICI7CisJc3RyICs9IHN5bS0+dmlzaWJsZSA9PSB5ZXMgPyAieSIgOiBzeW0tPnZpc2libGUg
PT0gbW9kID8gIm0iIDogIm4iOworCXN0ciArPSAiPGJyPiI7CisJc3RyICs9IGRlYnVnX2luZm8o
c3ltKTsKKworCXNldFRleHQoc3RyKTsKK30KKwordm9pZCBDb25maWdJbmZvVmlldzo6bWVudUlu
Zm8odm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07CisJUVN0cmluZyBoZWFkLCBkZWJ1Zywg
aGVscDsKKworCXN5bSA9IF9tZW51LT5zeW07CisJaWYgKHN5bSkgeworCQlpZiAoX21lbnUtPnBy
b21wdCkgeworCQkJaGVhZCArPSAiPGJpZz48Yj4iOworCQkJaGVhZCArPSBwcmludF9maWx0ZXIo
X21lbnUtPnByb21wdC0+dGV4dCk7CisJCQloZWFkICs9ICI8L2I+PC9iaWc+IjsKKwkJCWlmIChz
eW0tPm5hbWUpIHsKKwkJCQloZWFkICs9ICIgKCI7CisJCQkJaWYgKHNob3dEZWJ1ZygpKQorCQkJ
CQloZWFkICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+Iiwgc3ltKTsKKwkJ
CQloZWFkICs9IHByaW50X2ZpbHRlcihzeW0tPm5hbWUpOworCQkJCWlmIChzaG93RGVidWcoKSkK
KwkJCQkJaGVhZCArPSAiPC9hPiI7CisJCQkJaGVhZCArPSAiKSI7CisJCQl9CisJCX0gZWxzZSBp
ZiAoc3ltLT5uYW1lKSB7CisJCQloZWFkICs9ICI8YmlnPjxiPiI7CisJCQlpZiAoc2hvd0RlYnVn
KCkpCisJCQkJaGVhZCArPSBRU3RyaW5nKCkuc3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIsIHN5
bSk7CisJCQloZWFkICs9IHByaW50X2ZpbHRlcihzeW0tPm5hbWUpOworCQkJaWYgKHNob3dEZWJ1
ZygpKQorCQkJCWhlYWQgKz0gIjwvYT4iOworCQkJaGVhZCArPSAiPC9iPjwvYmlnPiI7CisJCX0K
KwkJaGVhZCArPSAiPGJyPjxicj4iOworCisJCWlmIChzaG93RGVidWcoKSkKKwkJCWRlYnVnID0g
ZGVidWdfaW5mbyhzeW0pOworCisJCXN0cnVjdCBnc3RyIGhlbHBfZ3N0ciA9IHN0cl9uZXcoKTsK
KwkJbWVudV9nZXRfZXh0X2hlbHAoX21lbnUsICZoZWxwX2dzdHIpOworCQloZWxwID0gcHJpbnRf
ZmlsdGVyKHN0cl9nZXQoJmhlbHBfZ3N0cikpOworCQlzdHJfZnJlZSgmaGVscF9nc3RyKTsKKwl9
IGVsc2UgaWYgKF9tZW51LT5wcm9tcHQpIHsKKwkJaGVhZCArPSAiPGJpZz48Yj4iOworCQloZWFk
ICs9IHByaW50X2ZpbHRlcihfbWVudS0+cHJvbXB0LT50ZXh0KTsKKwkJaGVhZCArPSAiPC9iPjwv
YmlnPjxicj48YnI+IjsKKwkJaWYgKHNob3dEZWJ1ZygpKSB7CisJCQlpZiAoX21lbnUtPnByb21w
dC0+dmlzaWJsZS5leHByKSB7CisJCQkJZGVidWcgKz0gIiZuYnNwOyZuYnNwO2RlcDogIjsKKwkJ
CQlleHByX3ByaW50KF9tZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciwgZXhwcl9wcmludF9oZWxw
LCAmZGVidWcsIEVfTk9ORSk7CisJCQkJZGVidWcgKz0gIjxicj48YnI+IjsKKwkJCX0KKwkJfQor
CX0KKwlpZiAoc2hvd0RlYnVnKCkpCisJCWRlYnVnICs9IFFTdHJpbmcoKS5zcHJpbnRmKCJkZWZp
bmVkIGF0ICVzOiVkPGJyPjxicj4iLCBfbWVudS0+ZmlsZS0+bmFtZSwgX21lbnUtPmxpbmVubyk7
CisKKwlzZXRUZXh0KGhlYWQgKyBkZWJ1ZyArIGhlbHApOworfQorCitRU3RyaW5nIENvbmZpZ0lu
Zm9WaWV3OjpkZWJ1Z19pbmZvKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlRU3RyaW5nIGRlYnVn
OworCisJZGVidWcgKz0gInR5cGU6ICI7CisJZGVidWcgKz0gcHJpbnRfZmlsdGVyKHN5bV90eXBl
X25hbWUoc3ltLT50eXBlKSk7CisJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKKwkJZGVidWcgKz0g
IiAoY2hvaWNlKSI7CisJZGVidWcgKz0gIjxicj4iOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikg
eworCQlkZWJ1ZyArPSAicmV2ZXJzZSBkZXA6ICI7CisJCWV4cHJfcHJpbnQoc3ltLT5yZXZfZGVw
LmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVnLCBFX05PTkUpOworCQlkZWJ1ZyArPSAiPGJy
PiI7CisJfQorCWZvciAoc3RydWN0IHByb3BlcnR5ICpwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBw
cm9wID0gcHJvcC0+bmV4dCkgeworCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX1BS
T01QVDoKKwkJY2FzZSBQX01FTlU6CisJCQlkZWJ1ZyArPSBRU3RyaW5nKCkuc3ByaW50ZigicHJv
bXB0OiA8YSBocmVmPVwibSVwXCI+IiwgcHJvcC0+bWVudSk7CisJCQlkZWJ1ZyArPSBwcmludF9m
aWx0ZXIocHJvcC0+dGV4dCk7CisJCQlkZWJ1ZyArPSAiPC9hPjxicj4iOworCQkJYnJlYWs7CisJ
CWNhc2UgUF9ERUZBVUxUOgorCQljYXNlIFBfU0VMRUNUOgorCQljYXNlIFBfUkFOR0U6CisJCQlk
ZWJ1ZyArPSBwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSk7CisJCQlkZWJ1ZyArPSAiOiAi
OworCQkJZXhwcl9wcmludChwcm9wLT5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9O
T05FKTsKKwkJCWRlYnVnICs9ICI8YnI+IjsKKwkJCWJyZWFrOworCQljYXNlIFBfQ0hPSUNFOgor
CQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJCWRlYnVnICs9ICJjaG9pY2U6ICI7CisJ
CQkJZXhwcl9wcmludChwcm9wLT5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05F
KTsKKwkJCQlkZWJ1ZyArPSAiPGJyPiI7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ
CWRlYnVnICs9ICJ1bmtub3duIHByb3BlcnR5OiAiOworCQkJZGVidWcgKz0gcHJvcF9nZXRfdHlw
ZV9uYW1lKHByb3AtPnR5cGUpOworCQkJZGVidWcgKz0gIjxicj4iOworCQl9CisJCWlmIChwcm9w
LT52aXNpYmxlLmV4cHIpIHsKKwkJCWRlYnVnICs9ICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtk
ZXA6ICI7CisJCQlleHByX3ByaW50KHByb3AtPnZpc2libGUuZXhwciwgZXhwcl9wcmludF9oZWxw
LCAmZGVidWcsIEVfTk9ORSk7CisJCQlkZWJ1ZyArPSAiPGJyPiI7CisJCX0KKwl9CisJZGVidWcg
Kz0gIjxicj4iOworCisJcmV0dXJuIGRlYnVnOworfQorCitRU3RyaW5nIENvbmZpZ0luZm9WaWV3
OjpwcmludF9maWx0ZXIoY29uc3QgUVN0cmluZyAmc3RyKQoreworCVFSZWdFeHAgcmUoIls8PiZc
Ilxcbl0iKTsKKwlRU3RyaW5nIHJlcyA9IHN0cjsKKwlmb3IgKGludCBpID0gMDsgKGkgPSByZXMu
aW5kZXhPZihyZSwgaSkpID49IDA7KSB7CisJCXN3aXRjaCAocmVzW2ldLnRvTGF0aW4xKCkpIHsK
KwkJY2FzZSAnPCc6CisJCQlyZXMucmVwbGFjZShpLCAxLCAiJmx0OyIpOworCQkJaSArPSA0Owor
CQkJYnJlYWs7CisJCWNhc2UgJz4nOgorCQkJcmVzLnJlcGxhY2UoaSwgMSwgIiZndDsiKTsKKwkJ
CWkgKz0gNDsKKwkJCWJyZWFrOworCQljYXNlICcmJzoKKwkJCXJlcy5yZXBsYWNlKGksIDEsICIm
YW1wOyIpOworCQkJaSArPSA1OworCQkJYnJlYWs7CisJCWNhc2UgJyInOgorCQkJcmVzLnJlcGxh
Y2UoaSwgMSwgIiZxdW90OyIpOworCQkJaSArPSA2OworCQkJYnJlYWs7CisJCWNhc2UgJ1xuJzoK
KwkJCXJlcy5yZXBsYWNlKGksIDEsICI8YnI+Iik7CisJCQlpICs9IDQ7CisJCQlicmVhazsKKwkJ
fQorCX0KKwlyZXR1cm4gcmVzOworfQorCit2b2lkIENvbmZpZ0luZm9WaWV3OjpleHByX3ByaW50
X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7
CisJUVN0cmluZyogdGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVN0cmluZyo+KGRhdGEpOworCVFT
dHJpbmcgc3RyMiA9IHByaW50X2ZpbHRlcihzdHIpOworCisJaWYgKHN5bSAmJiBzeW0tPm5hbWUg
JiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkgeworCQkqdGV4dCArPSBRU3RyaW5nKCku
c3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIsIHN5bSk7CisJCSp0ZXh0ICs9IHN0cjI7CisJCSp0
ZXh0ICs9ICI8L2E+IjsKKwl9IGVsc2UKKwkJKnRleHQgKz0gc3RyMjsKK30KKworUU1lbnUqIENv
bmZpZ0luZm9WaWV3OjpjcmVhdGVTdGFuZGFyZENvbnRleHRNZW51KGNvbnN0IFFQb2ludCAmIHBv
cykKK3sKKwlRTWVudSogcG9wdXAgPSBQYXJlbnQ6OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUo
cG9zKTsKKwlRQWN0aW9uKiBhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBEZWJ1ZyBJbmZvIiwg
cG9wdXApOworCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJICBjb25uZWN0KGFjdGlv
biwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOworCSAg
Y29ubmVjdCh0aGlzLCBTSUdOQUwoc2hvd0RlYnVnQ2hhbmdlZChib29sKSksIGFjdGlvbiwgU0xP
VChzZXRPbihib29sKSkpOworCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dEZWJ1ZygpKTsKKwlw
b3B1cC0+YWRkU2VwYXJhdG9yKCk7CisJcG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOworCXJldHVy
biBwb3B1cDsKK30KKwordm9pZCBDb25maWdJbmZvVmlldzo6Y29udGV4dE1lbnVFdmVudChRQ29u
dGV4dE1lbnVFdmVudCAqZSkKK3sKKwlQYXJlbnQ6OmNvbnRleHRNZW51RXZlbnQoZSk7Cit9CisK
K0NvbmZpZ1NlYXJjaFdpbmRvdzo6Q29uZmlnU2VhcmNoV2luZG93KENvbmZpZ01haW5XaW5kb3cq
IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKKwk6IFBhcmVudChwYXJlbnQpLCByZXN1bHQoTlVM
TCkKK3sKKwlzZXRPYmplY3ROYW1lKG5hbWUpOworCXNldFdpbmRvd1RpdGxlKCJTZWFyY2ggQ29u
ZmlnIik7CisKKwlRVkJveExheW91dCogbGF5b3V0MSA9IG5ldyBRVkJveExheW91dCh0aGlzKTsK
KwlsYXlvdXQxLT5zZXRDb250ZW50c01hcmdpbnMoMTEsIDExLCAxMSwgMTEpOworCWxheW91dDEt
PnNldFNwYWNpbmcoNik7CisJUUhCb3hMYXlvdXQqIGxheW91dDIgPSBuZXcgUUhCb3hMYXlvdXQo
MCk7CisJbGF5b3V0Mi0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAsIDApOworCWxheW91dDIt
PnNldFNwYWNpbmcoNik7CisJbGF5b3V0Mi0+YWRkV2lkZ2V0KG5ldyBRTGFiZWwoIkZpbmQ6Iiwg
dGhpcykpOworCWVkaXRGaWVsZCA9IG5ldyBRTGluZUVkaXQodGhpcyk7CisJY29ubmVjdChlZGl0
RmllbGQsIFNJR05BTChyZXR1cm5QcmVzc2VkKCkpLCBTTE9UKHNlYXJjaCgpKSk7CisJbGF5b3V0
Mi0+YWRkV2lkZ2V0KGVkaXRGaWVsZCk7CisJc2VhcmNoQnV0dG9uID0gbmV3IFFQdXNoQnV0dG9u
KCJTZWFyY2giLCB0aGlzKTsKKwlzZWFyY2hCdXR0b24tPnNldEF1dG9EZWZhdWx0KGZhbHNlKTsK
Kwljb25uZWN0KHNlYXJjaEJ1dHRvbiwgU0lHTkFMKGNsaWNrZWQoKSksIFNMT1Qoc2VhcmNoKCkp
KTsKKwlsYXlvdXQyLT5hZGRXaWRnZXQoc2VhcmNoQnV0dG9uKTsKKwlsYXlvdXQxLT5hZGRMYXlv
dXQobGF5b3V0Mik7CisKKwlzcGxpdCA9IG5ldyBRU3BsaXR0ZXIodGhpcyk7CisJc3BsaXQtPnNl
dE9yaWVudGF0aW9uKFF0OjpWZXJ0aWNhbCk7CisJbGlzdCA9IG5ldyBDb25maWdWaWV3KHNwbGl0
LCBuYW1lKTsKKwlsaXN0LT5saXN0LT5tb2RlID0gbGlzdE1vZGU7CisJaW5mbyA9IG5ldyBDb25m
aWdJbmZvVmlldyhzcGxpdCwgbmFtZSk7CisJY29ubmVjdChsaXN0LT5saXN0LCBTSUdOQUwobWVu
dUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLAorCQlpbmZvLCBTTE9UKHNldEluZm8oc3RydWN0IG1l
bnUgKikpKTsKKwljb25uZWN0KGxpc3QtPmxpc3QsIFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3Qg
bWVudSAqKSksCisJCXBhcmVudCwgU0xPVChzZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqKSkpOwor
CisJbGF5b3V0MS0+YWRkV2lkZ2V0KHNwbGl0KTsKKworCWlmIChuYW1lKSB7CisJCVFWYXJpYW50
IHgsIHk7CisJCWludCB3aWR0aCwgaGVpZ2h0OworCQlib29sIG9rOworCisJCWNvbmZpZ1NldHRp
bmdzLT5iZWdpbkdyb3VwKG5hbWUpOworCQl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgi
L3dpbmRvdyB3aWR0aCIsIHBhcmVudC0+d2lkdGgoKSAvIDIpLnRvSW50KCk7CisJCWhlaWdodCA9
IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBwYXJlbnQtPmhlaWdodCgp
IC8gMikudG9JbnQoKTsKKwkJcmVzaXplKHdpZHRoLCBoZWlnaHQpOworCQl4ID0gY29uZmlnU2V0
dGluZ3MtPnZhbHVlKCIvd2luZG93IHgiKTsKKwkJeSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgi
L3dpbmRvdyB5Iik7CisJCWlmICgoeC5pc1ZhbGlkKCkpJiYoeS5pc1ZhbGlkKCkpKQorCQkJbW92
ZSh4LnRvSW50KCksIHkudG9JbnQoKSk7CisJCVFMaXN0PGludD4gc2l6ZXMgPSBjb25maWdTZXR0
aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQiLCAmb2spOworCQlpZiAob2spCisJCQlzcGxpdC0+c2V0
U2l6ZXMoc2l6ZXMpOworCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwkJY29ubmVjdChj
b25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChzYXZlU2V0dGluZ3MoKSkpOwor
CX0KK30KKwordm9pZCBDb25maWdTZWFyY2hXaW5kb3c6OnNhdmVTZXR0aW5ncyh2b2lkKQorewor
CWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgeworCQljb25maWdTZXR0aW5ncy0+YmVnaW5H
cm91cChvYmplY3ROYW1lKCkpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cg
eCIsIHBvcygpLngoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5Iiwg
cG9zKCkueSgpKTsKKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHdpZHRoIiwg
c2l6ZSgpLndpZHRoKCkpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgaGVp
Z2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsKKwkJY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9z
cGxpdCIsIHNwbGl0LT5zaXplcygpKTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7CisJ
fQorfQorCit2b2lkIENvbmZpZ1NlYXJjaFdpbmRvdzo6c2VhcmNoKHZvaWQpCit7CisJc3RydWN0
IHN5bWJvbCAqKnA7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCUNvbmZpZ0l0ZW0gKmxhc3RJ
dGVtID0gTlVMTDsKKworCWZyZWUocmVzdWx0KTsKKwlsaXN0LT5saXN0LT5jbGVhcigpOworCWlu
Zm8tPmNsZWFyKCk7CisKKwlyZXN1bHQgPSBzeW1fcmVfc2VhcmNoKGVkaXRGaWVsZC0+dGV4dCgp
LnRvTGF0aW4xKCkpOworCWlmICghcmVzdWx0KQorCQlyZXR1cm47CisJZm9yIChwID0gcmVzdWx0
OyAqcDsgcCsrKSB7CisJCWZvcl9hbGxfcHJvbXB0cygoKnApLCBwcm9wKQorCQkJbGFzdEl0ZW0g
PSBuZXcgQ29uZmlnSXRlbShsaXN0LT5saXN0LCBsYXN0SXRlbSwgcHJvcC0+bWVudSwKKwkJCQkJ
CSAgbWVudV9pc192aXNpYmxlKHByb3AtPm1lbnUpKTsKKwl9Cit9CisKKy8qCisgKiBDb25zdHJ1
Y3QgdGhlIGNvbXBsZXRlIGNvbmZpZyB3aWRnZXQKKyAqLworQ29uZmlnTWFpbldpbmRvdzo6Q29u
ZmlnTWFpbldpbmRvdyh2b2lkKQorCTogc2VhcmNoV2luZG93KDApCit7CisJUU1lbnVCYXIqIG1l
bnU7CisJYm9vbCBvayA9IHRydWU7CisJUVZhcmlhbnQgeCwgeTsKKwlpbnQgd2lkdGgsIGhlaWdo
dDsKKwljaGFyIHRpdGxlWzI1Nl07CisKKwlRRGVza3RvcFdpZGdldCAqZCA9IGNvbmZpZ0FwcC0+
ZGVza3RvcCgpOworCXNucHJpbnRmKHRpdGxlLCBzaXplb2YodGl0bGUpLCAiJXMlcyIsCisJCXJv
b3RtZW51LnByb21wdC0+dGV4dCwKKwkJIiIKKwkJKTsKKwlzZXRXaW5kb3dUaXRsZSh0aXRsZSk7
CisKKwl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB3aWR0aCIsIGQtPndp
ZHRoKCkgLSA2NCkudG9JbnQoKTsKKwloZWlnaHQgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93
aW5kb3cgaGVpZ2h0IiwgZC0+aGVpZ2h0KCkgLSA2NCkudG9JbnQoKTsKKwlyZXNpemUod2lkdGgs
IGhlaWdodCk7CisJeCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB4Iik7CisJeSA9
IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB5Iik7CisJaWYgKCh4LmlzVmFsaWQoKSkm
Jih5LmlzVmFsaWQoKSkpCisJCW1vdmUoeC50b0ludCgpLCB5LnRvSW50KCkpOworCisJc3BsaXQx
ID0gbmV3IFFTcGxpdHRlcih0aGlzKTsKKwlzcGxpdDEtPnNldE9yaWVudGF0aW9uKFF0OjpIb3Jp
em9udGFsKTsKKwlzZXRDZW50cmFsV2lkZ2V0KHNwbGl0MSk7CisKKwltZW51VmlldyA9IG5ldyBD
b25maWdWaWV3KHNwbGl0MSwgIm1lbnUiKTsKKwltZW51TGlzdCA9IG1lbnVWaWV3LT5saXN0Owor
CisJc3BsaXQyID0gbmV3IFFTcGxpdHRlcihzcGxpdDEpOworCXNwbGl0Mi0+c2V0T3JpZW50YXRp
b24oUXQ6OlZlcnRpY2FsKTsKKworCS8vIGNyZWF0ZSBjb25maWcgdHJlZQorCWNvbmZpZ1ZpZXcg
PSBuZXcgQ29uZmlnVmlldyhzcGxpdDIsICJjb25maWciKTsKKwljb25maWdMaXN0ID0gY29uZmln
Vmlldy0+bGlzdDsKKworCWhlbHBUZXh0ID0gbmV3IENvbmZpZ0luZm9WaWV3KHNwbGl0MiwgImhl
bHAiKTsKKworCXNldFRhYk9yZGVyKGNvbmZpZ0xpc3QsIGhlbHBUZXh0KTsKKwljb25maWdMaXN0
LT5zZXRGb2N1cygpOworCisJbWVudSA9IG1lbnVCYXIoKTsKKwl0b29sQmFyID0gbmV3IFFUb29s
QmFyKCJUb29scyIsIHRoaXMpOworCWFkZFRvb2xCYXIodG9vbEJhcik7CisKKwliYWNrQWN0aW9u
ID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fYmFjayksICJCYWNrIiwgdGhpcyk7CisJICBjb25u
ZWN0KGJhY2tBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKGdvQmFjaygpKSk7
CisJICBiYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKwlRQWN0aW9uICpxdWl0QWN0aW9u
ID0gbmV3IFFBY3Rpb24oIiZRdWl0IiwgdGhpcyk7CisJcXVpdEFjdGlvbi0+c2V0U2hvcnRjdXQo
UXQ6OkNUUkwgKyBRdDo6S2V5X1EpOworCSAgY29ubmVjdChxdWl0QWN0aW9uLCBTSUdOQUwodHJp
Z2dlcmVkKGJvb2wpKSwgU0xPVChjbG9zZSgpKSk7CisJUUFjdGlvbiAqbG9hZEFjdGlvbiA9IG5l
dyBRQWN0aW9uKFFQaXhtYXAoeHBtX2xvYWQpLCAiJkxvYWQiLCB0aGlzKTsKKwlsb2FkQWN0aW9u
LT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfTCk7CisJICBjb25uZWN0KGxvYWRBY3Rp
b24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKGxvYWRDb25maWcoKSkpOworCXNhdmVB
Y3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9zYXZlKSwgIiZTYXZlIiwgdGhpcyk7CisJ
c2F2ZUFjdGlvbi0+c2V0U2hvcnRjdXQoUXQ6OkNUUkwgKyBRdDo6S2V5X1MpOworCSAgY29ubmVj
dChzYXZlQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzYXZlQ29uZmlnKCkp
KTsKKwljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZfY2hhbmdlZCk7CisJLy8gU2V0IHNh
dmVBY3Rpb24ncyBpbml0aWFsIHN0YXRlCisJY29uZl9jaGFuZ2VkKCk7CisJY29uZmlnbmFtZSA9
IHhzdHJkdXAoY29uZl9nZXRfY29uZmlnbmFtZSgpKTsKKworCVFBY3Rpb24gKnNhdmVBc0FjdGlv
biA9IG5ldyBRQWN0aW9uKCJTYXZlICZBcy4uLiIsIHRoaXMpOworCSAgY29ubmVjdChzYXZlQXNB
Y3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNhdmVDb25maWdBcygpKSk7CisJ
UUFjdGlvbiAqc2VhcmNoQWN0aW9uID0gbmV3IFFBY3Rpb24oIiZGaW5kIiwgdGhpcyk7CisJc2Vh
cmNoQWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfRik7CisJICBjb25uZWN0
KHNlYXJjaEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2VhcmNoQ29uZmln
KCkpKTsKKwlzaW5nbGVWaWV3QWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fc2luZ2xl
X3ZpZXcpLCAiU2luZ2xlIFZpZXciLCB0aGlzKTsKKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRDaGVj
a2FibGUodHJ1ZSk7CisJICBjb25uZWN0KHNpbmdsZVZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2Vy
ZWQoYm9vbCkpLCBTTE9UKHNob3dTaW5nbGVWaWV3KCkpKTsKKwlzcGxpdFZpZXdBY3Rpb24gPSBu
ZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9zcGxpdF92aWV3KSwgIlNwbGl0IFZpZXciLCB0aGlzKTsK
KwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKwkgIGNvbm5lY3Qoc3BsaXRW
aWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93U3BsaXRWaWV3KCkp
KTsKKwlmdWxsVmlld0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3RyZWVfdmlldyks
ICJGdWxsIFZpZXciLCB0aGlzKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUp
OworCSAgY29ubmVjdChmdWxsVmlld0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNM
T1Qoc2hvd0Z1bGxWaWV3KCkpKTsKKworCVFBY3Rpb24gKnNob3dOYW1lQWN0aW9uID0gbmV3IFFB
Y3Rpb24oIlNob3cgTmFtZSIsIHRoaXMpOworCSAgc2hvd05hbWVBY3Rpb24tPnNldENoZWNrYWJs
ZSh0cnVlKTsKKwkgIGNvbm5lY3Qoc2hvd05hbWVBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wp
KSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93TmFtZShib29sKSkpOworCSAgc2hvd05hbWVBY3Rp
b24tPnNldENoZWNrZWQoY29uZmlnVmlldy0+c2hvd05hbWUoKSk7CisJUUFjdGlvbiAqc2hvd1Jh
bmdlQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgUmFuZ2UiLCB0aGlzKTsKKwkgIHNob3dSYW5n
ZUFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCSAgY29ubmVjdChzaG93UmFuZ2VBY3Rpb24s
IFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93UmFuZ2UoYm9v
bCkpKTsKKwlRQWN0aW9uICpzaG93RGF0YUFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IERhdGEi
LCB0aGlzKTsKKwkgIHNob3dEYXRhQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJICBjb25u
ZWN0KHNob3dEYXRhQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGNvbmZpZ1ZpZXcsIFNM
T1Qoc2V0U2hvd0RhdGEoYm9vbCkpKTsKKworCVFBY3Rpb25Hcm91cCAqb3B0R3JvdXAgPSBuZXcg
UUFjdGlvbkdyb3VwKHRoaXMpOworCW9wdEdyb3VwLT5zZXRFeGNsdXNpdmUodHJ1ZSk7CisJY29u
bmVjdChvcHRHcm91cCwgU0lHTkFMKHRyaWdnZXJlZChRQWN0aW9uKikpLCBjb25maWdWaWV3LAor
CQlTTE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKSkpOworCWNvbm5lY3Qob3B0R3JvdXAsIFNJ
R05BTCh0cmlnZ2VyZWQoUUFjdGlvbiAqKSksIG1lbnVWaWV3LAorCQlTTE9UKHNldE9wdGlvbk1v
ZGUoUUFjdGlvbiAqKSkpOworCisJY29uZmlnVmlldy0+c2hvd05vcm1hbEFjdGlvbiA9IG5ldyBR
QWN0aW9uKCJTaG93IE5vcm1hbCBPcHRpb25zIiwgb3B0R3JvdXApOworCWNvbmZpZ1ZpZXctPnNo
b3dBbGxBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBBbGwgT3B0aW9ucyIsIG9wdEdyb3VwKTsK
Kwljb25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgUHJvbXB0
IE9wdGlvbnMiLCBvcHRHcm91cCk7CisJY29uZmlnVmlldy0+c2hvd05vcm1hbEFjdGlvbi0+c2V0
Q2hlY2thYmxlKHRydWUpOworCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24tPnNldENoZWNrYWJs
ZSh0cnVlKTsKKwljb25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9uLT5zZXRDaGVja2FibGUodHJ1
ZSk7CisKKwlRQWN0aW9uICpzaG93RGVidWdBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBEZWJ1
ZyBJbmZvIiwgdGhpcyk7CisJICBzaG93RGVidWdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsK
KwkgIGNvbm5lY3Qoc2hvd0RlYnVnQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGhlbHBU
ZXh0LCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOworCSAgc2hvd0RlYnVnQWN0aW9uLT5zZXRD
aGVja2VkKGhlbHBUZXh0LT5zaG93RGVidWcoKSk7CisKKwlRQWN0aW9uICpzaG93SW50cm9BY3Rp
b24gPSBuZXcgUUFjdGlvbigiSW50cm9kdWN0aW9uIiwgdGhpcyk7CisJICBjb25uZWN0KHNob3dJ
bnRyb0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd0ludHJvKCkpKTsK
KwlRQWN0aW9uICpzaG93QWJvdXRBY3Rpb24gPSBuZXcgUUFjdGlvbigiQWJvdXQiLCB0aGlzKTsK
KwkgIGNvbm5lY3Qoc2hvd0Fib3V0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xP
VChzaG93QWJvdXQoKSkpOworCisJLy8gaW5pdCB0b29sIGJhcgorCXRvb2xCYXItPmFkZEFjdGlv
bihiYWNrQWN0aW9uKTsKKwl0b29sQmFyLT5hZGRTZXBhcmF0b3IoKTsKKwl0b29sQmFyLT5hZGRB
Y3Rpb24obG9hZEFjdGlvbik7CisJdG9vbEJhci0+YWRkQWN0aW9uKHNhdmVBY3Rpb24pOworCXRv
b2xCYXItPmFkZFNlcGFyYXRvcigpOworCXRvb2xCYXItPmFkZEFjdGlvbihzaW5nbGVWaWV3QWN0
aW9uKTsKKwl0b29sQmFyLT5hZGRBY3Rpb24oc3BsaXRWaWV3QWN0aW9uKTsKKwl0b29sQmFyLT5h
ZGRBY3Rpb24oZnVsbFZpZXdBY3Rpb24pOworCisJLy8gY3JlYXRlIGNvbmZpZyBtZW51CisJUU1l
bnUqIGNvbmZpZyA9IG1lbnUtPmFkZE1lbnUoIiZGaWxlIik7CisJY29uZmlnLT5hZGRBY3Rpb24o
bG9hZEFjdGlvbik7CisJY29uZmlnLT5hZGRBY3Rpb24oc2F2ZUFjdGlvbik7CisJY29uZmlnLT5h
ZGRBY3Rpb24oc2F2ZUFzQWN0aW9uKTsKKwljb25maWctPmFkZFNlcGFyYXRvcigpOworCWNvbmZp
Zy0+YWRkQWN0aW9uKHF1aXRBY3Rpb24pOworCisJLy8gY3JlYXRlIGVkaXQgbWVudQorCVFNZW51
KiBlZGl0TWVudSA9IG1lbnUtPmFkZE1lbnUoIiZFZGl0Iik7CisJZWRpdE1lbnUtPmFkZEFjdGlv
bihzZWFyY2hBY3Rpb24pOworCisJLy8gY3JlYXRlIG9wdGlvbnMgbWVudQorCVFNZW51KiBvcHRp
b25NZW51ID0gbWVudS0+YWRkTWVudSgiJk9wdGlvbiIpOworCW9wdGlvbk1lbnUtPmFkZEFjdGlv
bihzaG93TmFtZUFjdGlvbik7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dSYW5nZUFjdGlv
bik7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dEYXRhQWN0aW9uKTsKKwlvcHRpb25NZW51
LT5hZGRTZXBhcmF0b3IoKTsKKwlvcHRpb25NZW51LT5hZGRBY3Rpb25zKG9wdEdyb3VwLT5hY3Rp
b25zKCkpOworCW9wdGlvbk1lbnUtPmFkZFNlcGFyYXRvcigpOworCW9wdGlvbk1lbnUtPmFkZEFj
dGlvbihzaG93RGVidWdBY3Rpb24pOworCisJLy8gY3JlYXRlIGhlbHAgbWVudQorCW1lbnUtPmFk
ZFNlcGFyYXRvcigpOworCVFNZW51KiBoZWxwTWVudSA9IG1lbnUtPmFkZE1lbnUoIiZIZWxwIik7
CisJaGVscE1lbnUtPmFkZEFjdGlvbihzaG93SW50cm9BY3Rpb24pOworCWhlbHBNZW51LT5hZGRB
Y3Rpb24oc2hvd0Fib3V0QWN0aW9uKTsKKworCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKG1l
bnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwKKwkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1
Y3QgbWVudSAqKSkpOworCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKG1lbnVTZWxlY3RlZChz
dHJ1Y3QgbWVudSAqKSksCisJCVNMT1QoY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOworCWNv
bm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKHBhcmVudFNlbGVjdGVkKCkpLAorCQlTTE9UKGdvQmFj
aygpKSk7CisJY29ubmVjdChtZW51TGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51
ICopKSwKKwkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOworCWNvbm5l
Y3QobWVudUxpc3QsIFNJR05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLAorCQlTTE9U
KGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKikpKTsKKworCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lH
TkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwKKwkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhz
dHJ1Y3QgbWVudSAqKSkpOworCWNvbm5lY3QobWVudUxpc3QsIFNJR05BTChnb3RGb2N1cyhzdHJ1
Y3QgbWVudSAqKSksCisJCWhlbHBUZXh0LCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsK
Kwljb25uZWN0KG1lbnVMaXN0LCBTSUdOQUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLAorCQlT
TE9UKGxpc3RGb2N1c0NoYW5nZWQodm9pZCkpKTsKKwljb25uZWN0KGhlbHBUZXh0LCBTSUdOQUwo
bWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopKSwKKwkJU0xPVChzZXRNZW51TGluayhzdHJ1Y3Qg
bWVudSAqKSkpOworCisJUVN0cmluZyBsaXN0TW9kZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgi
L2xpc3RNb2RlIiwgInN5bWJvbCIpLnRvU3RyaW5nKCk7CisJaWYgKGxpc3RNb2RlID09ICJzaW5n
bGUiKQorCQlzaG93U2luZ2xlVmlldygpOworCWVsc2UgaWYgKGxpc3RNb2RlID09ICJmdWxsIikK
KwkJc2hvd0Z1bGxWaWV3KCk7CisJZWxzZSAvKmlmIChsaXN0TW9kZSA9PSAic3BsaXQiKSovCisJ
CXNob3dTcGxpdFZpZXcoKTsKKworCS8vIFVJIHNldHVwIGRvbmUsIHJlc3RvcmUgc3BsaXR0ZXIg
cG9zaXRpb25zCisJUUxpc3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMo
Ii9zcGxpdDEiLCAmb2spOworCWlmIChvaykKKwkJc3BsaXQxLT5zZXRTaXplcyhzaXplcyk7CisK
KwlzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxpdDIiLCAmb2spOworCWlm
IChvaykKKwkJc3BsaXQyLT5zZXRTaXplcyhzaXplcyk7Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldp
bmRvdzo6bG9hZENvbmZpZyh2b2lkKQoreworCVFTdHJpbmcgc3RyOworCVFCeXRlQXJyYXkgYmE7
CisJY29uc3QgY2hhciAqbmFtZTsKKworCXN0ciA9IFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5h
bWUodGhpcywgIiIsIGNvbmZpZ25hbWUpOworCWlmIChzdHIuaXNOdWxsKCkpCisJCXJldHVybjsK
KworCWJhID0gc3RyLnRvTG9jYWw4Qml0KCk7CisJbmFtZSA9IGJhLmRhdGEoKTsKKworCWlmIChj
b25mX3JlYWQobmFtZSkpCisJCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCAicWNvbmYi
LCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlvbiEiKTsKKworCWZyZWUoY29uZmlnbmFtZSk7
CisJY29uZmlnbmFtZSA9IHhzdHJkdXAobmFtZSk7CisKKwlDb25maWdWaWV3Ojp1cGRhdGVMaXN0
QWxsKCk7Cit9CisKK2Jvb2wgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUNvbmZpZyh2b2lkKQorewor
CWlmIChjb25mX3dyaXRlKGNvbmZpZ25hbWUpKSB7CisJCVFNZXNzYWdlQm94OjppbmZvcm1hdGlv
bih0aGlzLCAicWNvbmYiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiEiKTsKKwkJcmV0
dXJuIGZhbHNlOworCX0KKwljb25mX3dyaXRlX2F1dG9jb25mKDApOworCisJcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUNvbmZpZ0FzKHZvaWQpCit7CisJUVN0
cmluZyBzdHI7CisJUUJ5dGVBcnJheSBiYTsKKwljb25zdCBjaGFyICpuYW1lOworCisJc3RyID0g
UUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSh0aGlzLCAiIiwgY29uZmlnbmFtZSk7CisJaWYg
KHN0ci5pc051bGwoKSkKKwkJcmV0dXJuOworCisJYmEgPSBzdHIudG9Mb2NhbDhCaXQoKTsKKwlu
YW1lID0gYmEuZGF0YSgpOworCisJaWYgKGNvbmZfd3JpdGUobmFtZSkpIHsKKwkJUU1lc3NhZ2VC
b3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0
aW9uISIpOworCX0KKwljb25mX3dyaXRlX2F1dG9jb25mKDApOworCisJZnJlZShjb25maWduYW1l
KTsKKwljb25maWduYW1lID0geHN0cmR1cChuYW1lKTsKK30KKwordm9pZCBDb25maWdNYWluV2lu
ZG93OjpzZWFyY2hDb25maWcodm9pZCkKK3sKKwlpZiAoIXNlYXJjaFdpbmRvdykKKwkJc2VhcmNo
V2luZG93ID0gbmV3IENvbmZpZ1NlYXJjaFdpbmRvdyh0aGlzLCAic2VhcmNoIik7CisJc2VhcmNo
V2luZG93LT5zaG93KCk7Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Y2hhbmdlTWVudShz
dHJ1Y3QgbWVudSAqbWVudSkKK3sKKwljb25maWdMaXN0LT5zZXRSb290TWVudShtZW51KTsKKwlp
ZiAoY29uZmlnTGlzdC0+cm9vdEVudHJ5LT5wYXJlbnQgPT0gJnJvb3RtZW51KQorCQliYWNrQWN0
aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKwllbHNlCisJCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQo
dHJ1ZSk7Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2V0TWVudUxpbmsoc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJc3RydWN0IG1lbnUgKnBhcmVudDsKKwlDb25maWdMaXN0KiBsaXN0ID0g
TlVMTDsKKwlDb25maWdJdGVtKiBpdGVtOworCisJaWYgKGNvbmZpZ0xpc3QtPm1lbnVTa2lwKG1l
bnUpKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGNvbmZpZ0xpc3QtPm1vZGUpIHsKKwljYXNlIHNp
bmdsZU1vZGU6CisJCWxpc3QgPSBjb25maWdMaXN0OworCQlwYXJlbnQgPSBtZW51X2dldF9wYXJl
bnRfbWVudShtZW51KTsKKwkJaWYgKCFwYXJlbnQpCisJCQlyZXR1cm47CisJCWxpc3QtPnNldFJv
b3RNZW51KHBhcmVudCk7CisJCWJyZWFrOworCWNhc2Ugc3ltYm9sTW9kZToKKwkJaWYgKG1lbnUt
PmZsYWdzICYgTUVOVV9ST09UKSB7CisJCQljb25maWdMaXN0LT5zZXRSb290TWVudShtZW51KTsK
KwkJCWNvbmZpZ0xpc3QtPmNsZWFyU2VsZWN0aW9uKCk7CisJCQlsaXN0ID0gbWVudUxpc3Q7CisJ
CX0gZWxzZSB7CisJCQlsaXN0ID0gY29uZmlnTGlzdDsKKwkJCXBhcmVudCA9IG1lbnVfZ2V0X3Bh
cmVudF9tZW51KG1lbnUtPnBhcmVudCk7CisJCQlpZiAoIXBhcmVudCkKKwkJCQlyZXR1cm47CisJ
CQlpdGVtID0gbWVudUxpc3QtPmZpbmRDb25maWdJdGVtKHBhcmVudCk7CisJCQlpZiAoaXRlbSkg
eworCQkJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOworCQkJCW1lbnVMaXN0LT5zY3JvbGxUb0l0
ZW0oaXRlbSk7CisJCQl9CisJCQlsaXN0LT5zZXRSb290TWVudShwYXJlbnQpOworCQl9CisJCWJy
ZWFrOworCWNhc2UgZnVsbE1vZGU6CisJCWxpc3QgPSBjb25maWdMaXN0OworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAobGlzdCkgeworCQlpdGVtID0gbGlzdC0+Zmlu
ZENvbmZpZ0l0ZW0obWVudSk7CisJCWlmIChpdGVtKSB7CisJCQlpdGVtLT5zZXRTZWxlY3RlZCh0
cnVlKTsKKwkJCWxpc3QtPnNjcm9sbFRvSXRlbShpdGVtKTsKKwkJCWxpc3QtPnNldEZvY3VzKCk7
CisJCX0KKwl9Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6bGlzdEZvY3VzQ2hhbmdlZCh2
b2lkKQoreworCWlmIChtZW51TGlzdC0+bW9kZSA9PSBtZW51TW9kZSkKKwkJY29uZmlnTGlzdC0+
Y2xlYXJTZWxlY3Rpb24oKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93Ojpnb0JhY2sodm9p
ZCkKK3sKKwlDb25maWdJdGVtKiBpdGVtLCAqb2xkU2VsZWN0aW9uOworCisJY29uZmlnTGlzdC0+
c2V0UGFyZW50TWVudSgpOworCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51
KQorCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKworCWlmIChtZW51TGlzdC0+c2Vs
ZWN0ZWRJdGVtcygpLmNvdW50KCkgPT0gMCkKKwkJcmV0dXJuOworCisJaXRlbSA9IChDb25maWdJ
dGVtKiltZW51TGlzdC0+c2VsZWN0ZWRJdGVtcygpLmZpcnN0KCk7CisJb2xkU2VsZWN0aW9uID0g
aXRlbTsKKwl3aGlsZSAoaXRlbSkgeworCQlpZiAoaXRlbS0+bWVudSA9PSBjb25maWdMaXN0LT5y
b290RW50cnkpIHsKKwkJCW9sZFNlbGVjdGlvbi0+c2V0U2VsZWN0ZWQoZmFsc2UpOworCQkJaXRl
bS0+c2V0U2VsZWN0ZWQodHJ1ZSk7CisJCQlicmVhazsKKwkJfQorCQlpdGVtID0gKENvbmZpZ0l0
ZW0qKWl0ZW0tPnBhcmVudCgpOworCX0KK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzaG93
U2luZ2xlVmlldyh2b2lkKQoreworCXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2Up
OworCXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQodHJ1ZSk7CisJc3BsaXRWaWV3QWN0aW9u
LT5zZXRFbmFibGVkKHRydWUpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7
CisJZnVsbFZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7CisJZnVsbFZpZXdBY3Rpb24tPnNl
dENoZWNrZWQoZmFsc2UpOworCisJbWVudVZpZXctPmhpZGUoKTsKKwltZW51TGlzdC0+c2V0Um9v
dE1lbnUoMCk7CisJY29uZmlnTGlzdC0+bW9kZSA9IHNpbmdsZU1vZGU7CisJaWYgKGNvbmZpZ0xp
c3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpCisJCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwo
KTsKKwllbHNlCisJCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7CisJY29uZmln
TGlzdC0+c2V0Rm9jdXMoKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzaG93U3BsaXRW
aWV3KHZvaWQpCit7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKKwlzaW5n
bGVWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsKKwlzcGxpdFZpZXdBY3Rpb24tPnNldEVu
YWJsZWQoZmFsc2UpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZCh0cnVlKTsKKwlmdWxs
Vmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2tl
ZChmYWxzZSk7CisKKwljb25maWdMaXN0LT5tb2RlID0gc3ltYm9sTW9kZTsKKwlpZiAoY29uZmln
TGlzdC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFs
bCgpOworCWVsc2UKKwkJY29uZmlnTGlzdC0+c2V0Um9vdE1lbnUoJnJvb3RtZW51KTsKKwljb25m
aWdMaXN0LT5zZXRBbGxPcGVuKHRydWUpOworCWNvbmZpZ0FwcC0+cHJvY2Vzc0V2ZW50cygpOwor
CW1lbnVMaXN0LT5tb2RlID0gbWVudU1vZGU7CisJbWVudUxpc3QtPnNldFJvb3RNZW51KCZyb290
bWVudSk7CisJbWVudUxpc3QtPnNldEFsbE9wZW4odHJ1ZSk7CisJbWVudVZpZXctPnNob3coKTsK
KwltZW51TGlzdC0+c2V0Rm9jdXMoKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzaG93
RnVsbFZpZXcodm9pZCkKK3sKKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwor
CXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOworCXNwbGl0Vmlld0FjdGlvbi0+
c2V0RW5hYmxlZCh0cnVlKTsKKwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOwor
CWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0
Q2hlY2tlZCh0cnVlKTsKKworCW1lbnVWaWV3LT5oaWRlKCk7CisJbWVudUxpc3QtPnNldFJvb3RN
ZW51KDApOworCWNvbmZpZ0xpc3QtPm1vZGUgPSBmdWxsTW9kZTsKKwlpZiAoY29uZmlnTGlzdC0+
cm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOwor
CWVsc2UKKwkJY29uZmlnTGlzdC0+c2V0Um9vdE1lbnUoJnJvb3RtZW51KTsKKwljb25maWdMaXN0
LT5zZXRGb2N1cygpOworfQorCisvKgorICogYXNrIGZvciBzYXZpbmcgY29uZmlndXJhdGlvbiBi
ZWZvcmUgcXVpdHRpbmcKKyAqIFRPRE8gYXNrIG9ubHkgd2hlbiBzb21ldGhpbmcgY2hhbmdlZAor
ICovCit2b2lkIENvbmZpZ01haW5XaW5kb3c6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQqIGUpCit7
CisJaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpIHsKKwkJZS0+YWNjZXB0KCk7CisJCXJldHVybjsK
Kwl9CisJUU1lc3NhZ2VCb3ggbWIoInFjb25mIiwgIlNhdmUgY29uZmlndXJhdGlvbj8iLCBRTWVz
c2FnZUJveDo6V2FybmluZywKKwkJCVFNZXNzYWdlQm94OjpZZXMgfCBRTWVzc2FnZUJveDo6RGVm
YXVsdCwgUU1lc3NhZ2VCb3g6Ok5vLCBRTWVzc2FnZUJveDo6Q2FuY2VsIHwgUU1lc3NhZ2VCb3g6
OkVzY2FwZSk7CisJbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJveDo6WWVzLCAiJlNhdmUgQ2hh
bmdlcyIpOworCW1iLnNldEJ1dHRvblRleHQoUU1lc3NhZ2VCb3g6Ok5vLCAiJkRpc2NhcmQgQ2hh
bmdlcyIpOworCW1iLnNldEJ1dHRvblRleHQoUU1lc3NhZ2VCb3g6OkNhbmNlbCwgIkNhbmNlbCBF
eGl0Iik7CisJc3dpdGNoIChtYi5leGVjKCkpIHsKKwljYXNlIFFNZXNzYWdlQm94OjpZZXM6CisJ
CWlmIChzYXZlQ29uZmlnKCkpCisJCQllLT5hY2NlcHQoKTsKKwkJZWxzZQorCQkJZS0+aWdub3Jl
KCk7CisJCWJyZWFrOworCWNhc2UgUU1lc3NhZ2VCb3g6Ok5vOgorCQllLT5hY2NlcHQoKTsKKwkJ
YnJlYWs7CisJY2FzZSBRTWVzc2FnZUJveDo6Q2FuY2VsOgorCQllLT5pZ25vcmUoKTsKKwkJYnJl
YWs7CisJfQorfQorCit2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dJbnRybyh2b2lkKQorewor
CXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9ICJXZWxjb21lIHRvIHRoZSBxY29uZiBncmFwaGlj
YWwgY29uZmlndXJhdGlvbiB0b29sLlxuXG4iCisJCSJGb3IgZWFjaCBvcHRpb24sIGEgYmxhbmsg
Ym94IGluZGljYXRlcyB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCwgYSBjaGVja1xuIgorCQkiaW5k
aWNhdGVzIGl0IGlzIGVuYWJsZWQsIGFuZCBhIGRvdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyB0byBi
ZSBjb21waWxlZFxuIgorCQkiYXMgYSBtb2R1bGUuICBDbGlja2luZyBvbiB0aGUgYm94IHdpbGwg
Y3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc3RhdGVzLlxuXG4iCisJCSJJZiB5b3UgZG8gbm90IHNl
ZSBhbiBvcHRpb24gKGUuZy4sIGEgZGV2aWNlIGRyaXZlcikgdGhhdCB5b3UgYmVsaWV2ZVxuIgor
CQkic2hvdWxkIGJlIHByZXNlbnQsIHRyeSB0dXJuaW5nIG9uIFNob3cgQWxsIE9wdGlvbnMgdW5k
ZXIgdGhlIE9wdGlvbnMgbWVudS5cbiIKKwkJIkFsdGhvdWdoIHRoZXJlIGlzIG5vIGNyb3NzIHJl
ZmVyZW5jZSB5ZXQgdG8gaGVscCB5b3UgZmlndXJlIG91dCB3aGF0IG90aGVyXG4iCisJCSJvcHRp
b25zIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0IHRoZSBvcHRpb24geW91IGFyZSBpbnRlcmVz
dGVkIGluLCB5b3UgY2FuXG4iCisJCSJzdGlsbCB2aWV3IHRoZSBoZWxwIG9mIGEgZ3JheWVkLW91
dCBvcHRpb24uXG5cbiIKKwkJIlRvZ2dsaW5nIFNob3cgRGVidWcgSW5mbyB1bmRlciB0aGUgT3B0
aW9ucyBtZW51IHdpbGwgc2hvdyB0aGUgZGVwZW5kZW5jaWVzLFxuIgorCQkid2hpY2ggeW91IGNh
biB0aGVuIG1hdGNoIGJ5IGV4YW1pbmluZyBvdGhlciBvcHRpb25zLlxuXG4iOworCisJUU1lc3Nh
Z2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7Cit9CisKK3ZvaWQgQ29uZmln
TWFpbldpbmRvdzo6c2hvd0Fib3V0KHZvaWQpCit7CisJc3RhdGljIGNvbnN0IFFTdHJpbmcgc3Ry
ID0gInFjb25mIGlzIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51
eC1tNjhrLm9yZz4uXG4iCisJCSJDb3B5cmlnaHQgKEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zza2kg
PGJiYXJidWxvdnNraUBnbWFpbC5jb20+LlxuXG4iCisJCSJCdWcgcmVwb3J0cyBhbmQgZmVhdHVy
ZSByZXF1ZXN0IGNhbiBhbHNvIGJlIGVudGVyZWQgYXQgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5v
cmcvXG4iOworCisJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7
Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZVNldHRpbmdzKHZvaWQpCit7CisJY29u
ZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHgiLCBwb3MoKS54KCkpOworCWNvbmZpZ1Nl
dHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5IiwgcG9zKCkueSgpKTsKKwljb25maWdTZXR0aW5n
cy0+c2V0VmFsdWUoIi93aW5kb3cgd2lkdGgiLCBzaXplKCkud2lkdGgoKSk7CisJY29uZmlnU2V0
dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IGhlaWdodCIsIHNpemUoKS5oZWlnaHQoKSk7CisKKwlR
U3RyaW5nIGVudHJ5OworCXN3aXRjaChjb25maWdMaXN0LT5tb2RlKSB7CisJY2FzZSBzaW5nbGVN
b2RlIDoKKwkJZW50cnkgPSAic2luZ2xlIjsKKwkJYnJlYWs7CisKKwljYXNlIHN5bWJvbE1vZGUg
OgorCQllbnRyeSA9ICJzcGxpdCI7CisJCWJyZWFrOworCisJY2FzZSBmdWxsTW9kZSA6CisJCWVu
dHJ5ID0gImZ1bGwiOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwljb25m
aWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9saXN0TW9kZSIsIGVudHJ5KTsKKworCWNvbmZpZ1NldHRp
bmdzLT53cml0ZVNpemVzKCIvc3BsaXQxIiwgc3BsaXQxLT5zaXplcygpKTsKKwljb25maWdTZXR0
aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0MiIsIHNwbGl0Mi0+c2l6ZXMoKSk7Cit9CisKK3ZvaWQg
Q29uZmlnTWFpbldpbmRvdzo6Y29uZl9jaGFuZ2VkKHZvaWQpCit7CisJaWYgKHNhdmVBY3Rpb24p
CisJCXNhdmVBY3Rpb24tPnNldEVuYWJsZWQoY29uZl9nZXRfY2hhbmdlZCgpKTsKK30KKwordm9p
ZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqY2hp
bGQ7CisJc3RhdGljIGludCBtZW51X2NudCA9IDA7CisKKwltZW51LT5mbGFncyB8PSBNRU5VX1JP
T1Q7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
KSB7CisJCWlmIChjaGlsZC0+cHJvbXB0ICYmIGNoaWxkLT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5V
KSB7CisJCQltZW51X2NudCsrOworCQkJZml4dXBfcm9vdG1lbnUoY2hpbGQpOworCQkJbWVudV9j
bnQtLTsKKwkJfSBlbHNlIGlmICghbWVudV9jbnQpCisJCQlmaXh1cF9yb290bWVudShjaGlsZCk7
CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7CisKK3N0YXRpYyB2b2lkIHVz
YWdlKHZvaWQpCit7CisJcHJpbnRmKCIlcyBbLXNdIDxjb25maWc+XG4iLCBwcm9nbmFtZSk7CisJ
ZXhpdCgwKTsKK30KKworaW50IG1haW4oaW50IGFjLCBjaGFyKiogYXYpCit7CisJQ29uZmlnTWFp
bldpbmRvdyogdjsKKwljb25zdCBjaGFyICpuYW1lOworCisJcHJvZ25hbWUgPSBhdlswXTsKKwlj
b25maWdBcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFjLCBhdik7CisJaWYgKGFjID4gMSAmJiBhdlsx
XVswXSA9PSAnLScpIHsKKwkJc3dpdGNoIChhdlsxXVsxXSkgeworCQljYXNlICdzJzoKKwkJCWNv
bmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJ
CWNhc2UgJz8nOgorCQkJdXNhZ2UoKTsKKwkJfQorCQluYW1lID0gYXZbMl07CisJfSBlbHNlCisJ
CW5hbWUgPSBhdlsxXTsKKwlpZiAoIW5hbWUpCisJCXVzYWdlKCk7CisKKwljb25mX3BhcnNlKG5h
bWUpOworCWZpeHVwX3Jvb3RtZW51KCZyb290bWVudSk7CisJY29uZl9yZWFkKE5VTEwpOworCS8v
emNvbmZkdW1wKHN0ZG91dCk7CisKKwljb25maWdTZXR0aW5ncyA9IG5ldyBDb25maWdTZXR0aW5n
cygpOworCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKCIva2NvbmZpZy9xY29uZiIpOworCXYg
PSBuZXcgQ29uZmlnTWFpbldpbmRvdygpOworCisJLy96Y29uZmR1bXAoc3Rkb3V0KTsKKwljb25m
aWdBcHAtPmNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwobGFzdFdpbmRvd0Nsb3NlZCgpKSwgU0xP
VChxdWl0KCkpKTsKKwljb25maWdBcHAtPmNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRU
b1F1aXQoKSksIHYsIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsKKwl2LT5zaG93KCk7CisJY29uZmln
QXBwLT5leGVjKCk7CisKKwljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwlkZWxldGUgY29u
ZmlnU2V0dGluZ3M7CisJZGVsZXRlIHY7CisJZGVsZXRlIGNvbmZpZ0FwcDsKKworCXJldHVybiAw
OworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5oIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9xY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1
YmZlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmgKQEAg
LTAsMCArMSwzMzEgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisv
KgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsu
b3JnPgorICovCisKKyNpbmNsdWRlIDxRVGV4dEJyb3dzZXI+CisjaW5jbHVkZSA8UVRyZWVXaWRn
ZXQ+CisjaW5jbHVkZSA8UU1haW5XaW5kb3c+CisjaW5jbHVkZSA8UUhlYWRlclZpZXc+CisjaW5j
bHVkZSA8cXNldHRpbmdzLmg+CisjaW5jbHVkZSA8UVB1c2hCdXR0b24+CisjaW5jbHVkZSA8UVNl
dHRpbmdzPgorI2luY2x1ZGUgPFFMaW5lRWRpdD4KKyNpbmNsdWRlIDxRU3BsaXR0ZXI+CisjaW5j
bHVkZSA8UUNoZWNrQm94PgorI2luY2x1ZGUgPFFEaWFsb2c+CisjaW5jbHVkZSAiZXhwci5oIgor
CitjbGFzcyBDb25maWdWaWV3OworY2xhc3MgQ29uZmlnTGlzdDsKK2NsYXNzIENvbmZpZ0l0ZW07
CitjbGFzcyBDb25maWdMaW5lRWRpdDsKK2NsYXNzIENvbmZpZ01haW5XaW5kb3c7CisKK2NsYXNz
IENvbmZpZ1NldHRpbmdzIDogcHVibGljIFFTZXR0aW5ncyB7CitwdWJsaWM6CisJQ29uZmlnU2V0
dGluZ3MoKTsKKwlRTGlzdDxpbnQ+IHJlYWRTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGJvb2wg
Km9rKTsKKwlib29sIHdyaXRlU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBjb25zdCBRTGlzdDxp
bnQ+JiB2YWx1ZSk7Cit9OworCitlbnVtIGNvbElkeCB7CisJcHJvbXB0Q29sSWR4LCBuYW1lQ29s
SWR4LCBub0NvbElkeCwgbW9kQ29sSWR4LCB5ZXNDb2xJZHgsIGRhdGFDb2xJZHgsIGNvbE5yCit9
OworZW51bSBsaXN0TW9kZSB7CisJc2luZ2xlTW9kZSwgbWVudU1vZGUsIHN5bWJvbE1vZGUsIGZ1
bGxNb2RlLCBsaXN0TW9kZQorfTsKK2VudW0gb3B0aW9uTW9kZSB7CisJbm9ybWFsT3B0ID0gMCwg
YWxsT3B0LCBwcm9tcHRPcHQKK307CisKK2NsYXNzIENvbmZpZ0xpc3QgOiBwdWJsaWMgUVRyZWVX
aWRnZXQgeworCVFfT0JKRUNUCisJdHlwZWRlZiBjbGFzcyBRVHJlZVdpZGdldCBQYXJlbnQ7Citw
dWJsaWM6CisJQ29uZmlnTGlzdChDb25maWdWaWV3KiBwLCBjb25zdCBjaGFyICpuYW1lID0gMCk7
CisJdm9pZCByZWluaXQodm9pZCk7CisJQ29uZmlnVmlldyogcGFyZW50KHZvaWQpIGNvbnN0CisJ
eworCQlyZXR1cm4gKENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50KCk7CisJfQorCUNvbmZpZ0l0
ZW0qIGZpbmRDb25maWdJdGVtKHN0cnVjdCBtZW51ICopOworCitwcm90ZWN0ZWQ6CisJdm9pZCBr
ZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZSk7CisJdm9pZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNl
RXZlbnQgKmUpOworCXZvaWQgbW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQgKmUpOworCXZv
aWQgbW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQgKmUpOworCXZvaWQgbW91c2VEb3VibGVDbGlj
a0V2ZW50KFFNb3VzZUV2ZW50ICplKTsKKwl2b2lkIGZvY3VzSW5FdmVudChRRm9jdXNFdmVudCAq
ZSk7CisJdm9pZCBjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKTsKKworcHVi
bGljIHNsb3RzOgorCXZvaWQgc2V0Um9vdE1lbnUoc3RydWN0IG1lbnUgKm1lbnUpOworCisJdm9p
ZCB1cGRhdGVMaXN0KENvbmZpZ0l0ZW0gKml0ZW0pOworCXZvaWQgc2V0VmFsdWUoQ29uZmlnSXRl
bSogaXRlbSwgdHJpc3RhdGUgdmFsKTsKKwl2b2lkIGNoYW5nZVZhbHVlKENvbmZpZ0l0ZW0qIGl0
ZW0pOworCXZvaWQgdXBkYXRlU2VsZWN0aW9uKHZvaWQpOworCXZvaWQgc2F2ZVNldHRpbmdzKHZv
aWQpOworc2lnbmFsczoKKwl2b2lkIG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICptZW51KTsKKwl2
b2lkIG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqbWVudSk7CisJdm9pZCBwYXJlbnRTZWxlY3Rl
ZCh2b2lkKTsKKwl2b2lkIGdvdEZvY3VzKHN0cnVjdCBtZW51ICopOworCitwdWJsaWM6CisJdm9p
ZCB1cGRhdGVMaXN0QWxsKHZvaWQpCisJeworCQl1cGRhdGVBbGwgPSB0cnVlOworCQl1cGRhdGVM
aXN0KE5VTEwpOworCQl1cGRhdGVBbGwgPSBmYWxzZTsKKwl9CisJQ29uZmlnTGlzdCogbGlzdFZp
ZXcoKQorCXsKKwkJcmV0dXJuIHRoaXM7CisJfQorCUNvbmZpZ0l0ZW0qIGZpcnN0Q2hpbGQoKSBj
b25zdAorCXsKKwkJcmV0dXJuIChDb25maWdJdGVtICopY2hpbGRyZW4oKS5maXJzdCgpOworCX0K
Kwl2b2lkIGFkZENvbHVtbihjb2xJZHggaWR4KQorCXsKKwkJc2hvd0NvbHVtbihpZHgpOworCX0K
Kwl2b2lkIHJlbW92ZUNvbHVtbihjb2xJZHggaWR4KQorCXsKKwkJaGlkZUNvbHVtbihpZHgpOwor
CX0KKwl2b2lkIHNldEFsbE9wZW4oYm9vbCBvcGVuKTsKKwl2b2lkIHNldFBhcmVudE1lbnUodm9p
ZCk7CisKKwlib29sIG1lbnVTa2lwKHN0cnVjdCBtZW51ICopOworCisJdm9pZCB1cGRhdGVNZW51
TGlzdChDb25maWdJdGVtICpwYXJlbnQsIHN0cnVjdCBtZW51Kik7CisJdm9pZCB1cGRhdGVNZW51
TGlzdChDb25maWdMaXN0ICpwYXJlbnQsIHN0cnVjdCBtZW51Kik7CisKKwlib29sIHVwZGF0ZUFs
bDsKKworCVFQaXhtYXAgc3ltYm9sWWVzUGl4LCBzeW1ib2xNb2RQaXgsIHN5bWJvbE5vUGl4Owor
CVFQaXhtYXAgY2hvaWNlWWVzUGl4LCBjaG9pY2VOb1BpeDsKKwlRUGl4bWFwIG1lbnVQaXgsIG1l
bnVJbnZQaXgsIG1lbnVCYWNrUGl4LCB2b2lkUGl4OworCisJYm9vbCBzaG93TmFtZSwgc2hvd1Jh
bmdlLCBzaG93RGF0YTsKKwllbnVtIGxpc3RNb2RlIG1vZGU7CisJZW51bSBvcHRpb25Nb2RlIG9w
dE1vZGU7CisJc3RydWN0IG1lbnUgKnJvb3RFbnRyeTsKKwlRUGFsZXR0ZSBkaXNhYmxlZENvbG9y
R3JvdXA7CisJUVBhbGV0dGUgaW5hY3RpdmVkQ29sb3JHcm91cDsKKwlRTWVudSogaGVhZGVyUG9w
dXA7Cit9OworCitjbGFzcyBDb25maWdJdGVtIDogcHVibGljIFFUcmVlV2lkZ2V0SXRlbSB7CisJ
dHlwZWRlZiBjbGFzcyBRVHJlZVdpZGdldEl0ZW0gUGFyZW50OworcHVibGljOgorCUNvbmZpZ0l0
ZW0oQ29uZmlnTGlzdCAqcGFyZW50LCBDb25maWdJdGVtICphZnRlciwgc3RydWN0IG1lbnUgKm0s
IGJvb2wgdikKKwk6IFBhcmVudChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUobSks
IHZpc2libGUodiksIGdvUGFyZW50KGZhbHNlKQorCXsKKwkJaW5pdCgpOworCX0KKwlDb25maWdJ
dGVtKENvbmZpZ0l0ZW0gKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIHN0cnVjdCBtZW51ICpt
LCBib29sIHYpCisJOiBQYXJlbnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KG0p
LCB2aXNpYmxlKHYpLCBnb1BhcmVudChmYWxzZSkKKwl7CisJCWluaXQoKTsKKwl9CisJQ29uZmln
SXRlbShDb25maWdMaXN0ICpwYXJlbnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBib29sIHYpCisJOiBQ
YXJlbnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KDApLCB2aXNpYmxlKHYpLCBn
b1BhcmVudCh0cnVlKQorCXsKKwkJaW5pdCgpOworCX0KKwl+Q29uZmlnSXRlbSh2b2lkKTsKKwl2
b2lkIGluaXQodm9pZCk7CisJdm9pZCBva1JlbmFtZShpbnQgY29sKTsKKwl2b2lkIHVwZGF0ZU1l
bnUodm9pZCk7CisJdm9pZCB0ZXN0VXBkYXRlTWVudShib29sIHYpOworCUNvbmZpZ0xpc3QqIGxp
c3RWaWV3KCkgY29uc3QKKwl7CisJCXJldHVybiAoQ29uZmlnTGlzdCopUGFyZW50Ojp0cmVlV2lk
Z2V0KCk7CisJfQorCUNvbmZpZ0l0ZW0qIGZpcnN0Q2hpbGQoKSBjb25zdAorCXsKKwkJcmV0dXJu
IChDb25maWdJdGVtICopUGFyZW50OjpjaGlsZCgwKTsKKwl9CisJQ29uZmlnSXRlbSogbmV4dFNp
YmxpbmcoKQorCXsKKwkJQ29uZmlnSXRlbSAqcmV0ID0gTlVMTDsKKwkJQ29uZmlnSXRlbSAqX3Bh
cmVudCA9IChDb25maWdJdGVtICopcGFyZW50KCk7CisKKwkJaWYoX3BhcmVudCkgeworCQkJcmV0
ID0gKENvbmZpZ0l0ZW0gKilfcGFyZW50LT5jaGlsZChfcGFyZW50LT5pbmRleE9mQ2hpbGQodGhp
cykrMSk7CisJCX0gZWxzZSB7CisJCQlRVHJlZVdpZGdldCAqX3RyZWVXaWRnZXQgPSB0cmVlV2lk
Z2V0KCk7CisJCQlyZXQgPSAoQ29uZmlnSXRlbSAqKV90cmVlV2lkZ2V0LT50b3BMZXZlbEl0ZW0o
X3RyZWVXaWRnZXQtPmluZGV4T2ZUb3BMZXZlbEl0ZW0odGhpcykrMSk7CisJCX0KKworCQlyZXR1
cm4gcmV0OworCX0KKwl2b2lkIHNldFRleHQoY29sSWR4IGlkeCwgY29uc3QgUVN0cmluZyYgdGV4
dCkKKwl7CisJCVBhcmVudDo6c2V0VGV4dChpZHgsIHRleHQpOworCX0KKwlRU3RyaW5nIHRleHQo
Y29sSWR4IGlkeCkgY29uc3QKKwl7CisJCXJldHVybiBQYXJlbnQ6OnRleHQoaWR4KTsKKwl9CisJ
dm9pZCBzZXRQaXhtYXAoY29sSWR4IGlkeCwgY29uc3QgUUljb24gJmljb24pCisJeworCQlQYXJl
bnQ6OnNldEljb24oaWR4LCBpY29uKTsKKwl9CisJY29uc3QgUUljb24gcGl4bWFwKGNvbElkeCBp
ZHgpIGNvbnN0CisJeworCQlyZXR1cm4gaWNvbihpZHgpOworCX0KKwkvLyBUT0RPOiBJbXBsZW1l
bnQgcGFpbnRDZWxsCisKKwlDb25maWdJdGVtKiBuZXh0SXRlbTsKKwlzdHJ1Y3QgbWVudSAqbWVu
dTsKKwlib29sIHZpc2libGU7CisJYm9vbCBnb1BhcmVudDsKK307CisKK2NsYXNzIENvbmZpZ0xp
bmVFZGl0IDogcHVibGljIFFMaW5lRWRpdCB7CisJUV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFM
aW5lRWRpdCBQYXJlbnQ7CitwdWJsaWM6CisJQ29uZmlnTGluZUVkaXQoQ29uZmlnVmlldyogcGFy
ZW50KTsKKwlDb25maWdWaWV3KiBwYXJlbnQodm9pZCkgY29uc3QKKwl7CisJCXJldHVybiAoQ29u
ZmlnVmlldyopUGFyZW50OjpwYXJlbnQoKTsKKwl9CisJdm9pZCBzaG93KENvbmZpZ0l0ZW0gKmkp
OworCXZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKmUpOworCitwdWJsaWM6CisJQ29uZmln
SXRlbSAqaXRlbTsKK307CisKK2NsYXNzIENvbmZpZ1ZpZXcgOiBwdWJsaWMgUVdpZGdldCB7CisJ
UV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFXaWRnZXQgUGFyZW50OworcHVibGljOgorCUNvbmZp
Z1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCk7CisJfkNvbmZpZ1Zp
ZXcodm9pZCk7CisJc3RhdGljIHZvaWQgdXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKTsKKwlz
dGF0aWMgdm9pZCB1cGRhdGVMaXN0QWxsKHZvaWQpOworCisJYm9vbCBzaG93TmFtZSh2b2lkKSBj
b25zdCB7IHJldHVybiBsaXN0LT5zaG93TmFtZTsgfQorCWJvb2wgc2hvd1JhbmdlKHZvaWQpIGNv
bnN0IHsgcmV0dXJuIGxpc3QtPnNob3dSYW5nZTsgfQorCWJvb2wgc2hvd0RhdGEodm9pZCkgY29u
c3QgeyByZXR1cm4gbGlzdC0+c2hvd0RhdGE7IH0KK3B1YmxpYyBzbG90czoKKwl2b2lkIHNldFNo
b3dOYW1lKGJvb2wpOworCXZvaWQgc2V0U2hvd1JhbmdlKGJvb2wpOworCXZvaWQgc2V0U2hvd0Rh
dGEoYm9vbCk7CisJdm9pZCBzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKik7CitzaWduYWxzOgorCXZv
aWQgc2hvd05hbWVDaGFuZ2VkKGJvb2wpOworCXZvaWQgc2hvd1JhbmdlQ2hhbmdlZChib29sKTsK
Kwl2b2lkIHNob3dEYXRhQ2hhbmdlZChib29sKTsKK3B1YmxpYzoKKwlDb25maWdMaXN0KiBsaXN0
OworCUNvbmZpZ0xpbmVFZGl0KiBsaW5lRWRpdDsKKworCXN0YXRpYyBDb25maWdWaWV3KiB2aWV3
TGlzdDsKKwlDb25maWdWaWV3KiBuZXh0VmlldzsKKworCXN0YXRpYyBRQWN0aW9uICpzaG93Tm9y
bWFsQWN0aW9uOworCXN0YXRpYyBRQWN0aW9uICpzaG93QWxsQWN0aW9uOworCXN0YXRpYyBRQWN0
aW9uICpzaG93UHJvbXB0QWN0aW9uOworfTsKKworY2xhc3MgQ29uZmlnSW5mb1ZpZXcgOiBwdWJs
aWMgUVRleHRCcm93c2VyIHsKKwlRX09CSkVDVAorCXR5cGVkZWYgY2xhc3MgUVRleHRCcm93c2Vy
IFBhcmVudDsKK3B1YmxpYzoKKwlDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0
IGNoYXIgKm5hbWUgPSAwKTsKKwlib29sIHNob3dEZWJ1Zyh2b2lkKSBjb25zdCB7IHJldHVybiBf
c2hvd0RlYnVnOyB9CisKK3B1YmxpYyBzbG90czoKKwl2b2lkIHNldEluZm8oc3RydWN0IG1lbnUg
Km1lbnUpOworCXZvaWQgc2F2ZVNldHRpbmdzKHZvaWQpOworCXZvaWQgc2V0U2hvd0RlYnVnKGJv
b2wpOworCitzaWduYWxzOgorCXZvaWQgc2hvd0RlYnVnQ2hhbmdlZChib29sKTsKKwl2b2lkIG1l
bnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqKTsKKworcHJvdGVjdGVkOgorCXZvaWQgc3ltYm9sSW5m
byh2b2lkKTsKKwl2b2lkIG1lbnVJbmZvKHZvaWQpOworCVFTdHJpbmcgZGVidWdfaW5mbyhzdHJ1
Y3Qgc3ltYm9sICpzeW0pOworCXN0YXRpYyBRU3RyaW5nIHByaW50X2ZpbHRlcihjb25zdCBRU3Ry
aW5nICZzdHIpOworCXN0YXRpYyB2b2lkIGV4cHJfcHJpbnRfaGVscCh2b2lkICpkYXRhLCBzdHJ1
Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cik7CisJUU1lbnUgKmNyZWF0ZVN0YW5kYXJk
Q29udGV4dE1lbnUoY29uc3QgUVBvaW50ICYgcG9zKTsKKwl2b2lkIGNvbnRleHRNZW51RXZlbnQo
UUNvbnRleHRNZW51RXZlbnQgKmUpOworCisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBt
ZW51ICpfbWVudTsKKwlib29sIF9zaG93RGVidWc7Cit9OworCitjbGFzcyBDb25maWdTZWFyY2hX
aW5kb3cgOiBwdWJsaWMgUURpYWxvZyB7CisJUV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFEaWFs
b2cgUGFyZW50OworcHVibGljOgorCUNvbmZpZ1NlYXJjaFdpbmRvdyhDb25maWdNYWluV2luZG93
KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsKKworcHVibGljIHNsb3RzOgorCXZvaWQg
c2F2ZVNldHRpbmdzKHZvaWQpOworCXZvaWQgc2VhcmNoKHZvaWQpOworCitwcm90ZWN0ZWQ6CisJ
UUxpbmVFZGl0KiBlZGl0RmllbGQ7CisJUVB1c2hCdXR0b24qIHNlYXJjaEJ1dHRvbjsKKwlRU3Bs
aXR0ZXIqIHNwbGl0OworCUNvbmZpZ1ZpZXcqIGxpc3Q7CisJQ29uZmlnSW5mb1ZpZXcqIGluZm87
CisKKwlzdHJ1Y3Qgc3ltYm9sICoqcmVzdWx0OworfTsKKworY2xhc3MgQ29uZmlnTWFpbldpbmRv
dyA6IHB1YmxpYyBRTWFpbldpbmRvdyB7CisJUV9PQkpFQ1QKKworCWNoYXIgKmNvbmZpZ25hbWU7
CisJc3RhdGljIFFBY3Rpb24gKnNhdmVBY3Rpb247CisJc3RhdGljIHZvaWQgY29uZl9jaGFuZ2Vk
KHZvaWQpOworcHVibGljOgorCUNvbmZpZ01haW5XaW5kb3codm9pZCk7CitwdWJsaWMgc2xvdHM6
CisJdm9pZCBjaGFuZ2VNZW51KHN0cnVjdCBtZW51ICopOworCXZvaWQgc2V0TWVudUxpbmsoc3Ry
dWN0IG1lbnUgKik7CisJdm9pZCBsaXN0Rm9jdXNDaGFuZ2VkKHZvaWQpOworCXZvaWQgZ29CYWNr
KHZvaWQpOworCXZvaWQgbG9hZENvbmZpZyh2b2lkKTsKKwlib29sIHNhdmVDb25maWcodm9pZCk7
CisJdm9pZCBzYXZlQ29uZmlnQXModm9pZCk7CisJdm9pZCBzZWFyY2hDb25maWcodm9pZCk7CisJ
dm9pZCBzaG93U2luZ2xlVmlldyh2b2lkKTsKKwl2b2lkIHNob3dTcGxpdFZpZXcodm9pZCk7CisJ
dm9pZCBzaG93RnVsbFZpZXcodm9pZCk7CisJdm9pZCBzaG93SW50cm8odm9pZCk7CisJdm9pZCBz
aG93QWJvdXQodm9pZCk7CisJdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7CisKK3Byb3RlY3RlZDoK
Kwl2b2lkIGNsb3NlRXZlbnQoUUNsb3NlRXZlbnQgKmUpOworCisJQ29uZmlnU2VhcmNoV2luZG93
ICpzZWFyY2hXaW5kb3c7CisJQ29uZmlnVmlldyAqbWVudVZpZXc7CisJQ29uZmlnTGlzdCAqbWVu
dUxpc3Q7CisJQ29uZmlnVmlldyAqY29uZmlnVmlldzsKKwlDb25maWdMaXN0ICpjb25maWdMaXN0
OworCUNvbmZpZ0luZm9WaWV3ICpoZWxwVGV4dDsKKwlRVG9vbEJhciAqdG9vbEJhcjsKKwlRQWN0
aW9uICpiYWNrQWN0aW9uOworCVFBY3Rpb24gKnNpbmdsZVZpZXdBY3Rpb247CisJUUFjdGlvbiAq
c3BsaXRWaWV3QWN0aW9uOworCVFBY3Rpb24gKmZ1bGxWaWV3QWN0aW9uOworCVFTcGxpdHRlciAq
c3BsaXQxOworCVFTcGxpdHRlciAqc3BsaXQyOworfTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwgYi9zdXBwb3J0L2tjb25maWcubmV3L3N0cmVh
bWxpbmVfY29uZmlnLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjA4ZDc2
ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3N0cmVhbWxpbmVfY29u
ZmlnLnBsCkBAIC0wLDAgKzEsNjgyIEBACisjIS91c3IvYmluL2VudiBwZXJsCisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjCisjIENvcHlyaWdodCAyMDA1LTIwMDkgLSBTdGV2
ZW4gUm9zdGVkdAorIworIyAgSXQncyBzaW1wbGUgZW5vdWdoIHRvIGZpZ3VyZSBvdXQgaG93IHRo
aXMgd29ya3MuCisjICBJZiBub3QsIHRoZW4geW91IGNhbiBhc2sgbWUgYXQgc3RyaXBjb25maWdA
Z29vZG1pcy5vcmcKKyMKKyMgV2hhdCBpdCBkb2VzPworIworIyAgIElmIHlvdSBoYXZlIGluc3Rh
bGxlZCBhIExpbnV4IGtlcm5lbCBmcm9tIGEgZGlzdHJpYnV0aW9uCisjICAgdGhhdCB0dXJucyBv
biB3YXkgdG9vIG1hbnkgbW9kdWxlcyB0aGFuIHlvdSBuZWVkLCBhbmQKKyMgICB5b3Ugb25seSB3
YW50IHRoZSBtb2R1bGVzIHlvdSB1c2UsIHRoZW4gdGhpcyBwcm9ncmFtCisjICAgaXMgcGVyZmVj
dCBmb3IgeW91LgorIworIyAgIEl0IGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byB0dXJuIG9mZiBh
bGwgdGhlIG1vZHVsZXMgdGhhdCBhcmUKKyMgICBub3QgbG9hZGVkIG9uIHlvdXIgc3lzdGVtLgor
IworIyBIb3d0bzoKKyMKKyMgIDEuIEJvb3QgdXAgdGhlIGtlcm5lbCB0aGF0IHlvdSB3YW50IHRv
IHN0cmVhbSBsaW5lIHRoZSBjb25maWcgb24uCisjICAyLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRo
ZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc291cmNlIG9mIHRoZQorIyAgICAgICBrZXJuZWwgdGhh
dCB5b3UganVzdCBib290ZWQuCisjICAzLiBDb3B5IHRoZSBjb25maWd1cmF0b24gZmlsZSB0byB0
aGlzIGRpcmVjdG9yeSBhcyAuY29uZmlnCisjICA0LiBIYXZlIGFsbCB5b3VyIGRldmljZXMgdGhh
dCB5b3UgbmVlZCBtb2R1bGVzIGZvciBjb25uZWN0ZWQgYW5kCisjICAgICAgb3BlcmF0aW9uYWwg
KG1ha2Ugc3VyZSB0aGF0IHRoZWlyIGNvcnJlc3BvbmRpbmcgbW9kdWxlcyBhcmUgbG9hZGVkKQor
IyAgNS4gUnVuIHRoaXMgc2NyaXB0IHJlZGlyZWN0aW5nIHRoZSBvdXRwdXQgdG8gc29tZSBvdGhl
ciBmaWxlCisjICAgICAgIGxpa2UgY29uZmlnX3N0cmlwLgorIyAgNi4gQmFjayB1cCB5b3VyIG9s
ZCBjb25maWcgKGlmIHlvdSB3YW50IHRvbykuCisjICA3LiBjb3B5IHRoZSBjb25maWdfc3RyaXAg
ZmlsZSB0byAuY29uZmlnCisjICA4LiBSdW4gIm1ha2Ugb2xkY29uZmlnIgorIworIyAgTm93IHlv
dXIga2VybmVsIGlzIHJlYWR5IHRvIGJlIGJ1aWx0IHdpdGggb25seSB0aGUgbW9kdWxlcyB0aGF0
CisjICBhcmUgbG9hZGVkLgorIworIyBIZXJlJ3Mgd2hhdCBJIGRpZCB3aXRoIG15IERlYmlhbiBk
aXN0cmlidXRpb24uCisjCisjICAgIGNkIC91c3Ivc3JjL2xpbnV4LTIuNi4xMAorIyAgICBjcCAv
Ym9vdC9jb25maWctMi42LjEwLTEtNjg2LXNtcCAuY29uZmlnCisjICAgIH4vYmluL3N0cmVhbWxp
bmVfY29uZmlnID4gY29uZmlnX3N0cmlwCisjICAgIG12IC5jb25maWcgY29uZmlnX3NhdgorIyAg
ICBtdiBjb25maWdfc3RyaXAgLmNvbmZpZworIyAgICBtYWtlIG9sZGNvbmZpZworIwordXNlIHdh
cm5pbmdzOwordXNlIHN0cmljdDsKK3VzZSBHZXRvcHQ6Okxvbmc7CisKKyMgc2V0IHRoZSBlbnZp
cm9ubWVudCB2YXJpYWJsZSBMT0NBTE1PRENPTkZJR19ERUJVRyB0byBnZXQKKyMgZGVidWcgb3V0
cHV0LgorbXkgJGRlYnVncHJpbnQgPSAwOworJGRlYnVncHJpbnQgPSAxIGlmIChkZWZpbmVkKCRF
TlZ7TE9DQUxNT0RDT05GSUdfREVCVUd9KSk7CisKK3N1YiBkcHJpbnQgeworICAgIHJldHVybiBp
ZiAoISRkZWJ1Z3ByaW50KTsKKyAgICBwcmludCBTVERFUlIgQF87Cit9CisKK215ICRjb25maWcg
PSAiLmNvbmZpZyI7CisKK215ICR1bmFtZSA9IGB1bmFtZSAtcmA7CitjaG9tcCAkdW5hbWU7CisK
K215IEBzZWFyY2hjb25maWdzID0gKAorCXsKKwkgICAgImZpbGUiID0+ICIuY29uZmlnIiwKKwkg
ICAgImV4ZWMiID0+ICJjYXQiLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gIi9wcm9jL2NvbmZp
Zy5neiIsCisJICAgICJleGVjIiA9PiAiemNhdCIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAi
L2Jvb3QvY29uZmlnLSR1bmFtZSIsCisJICAgICJleGVjIiA9PiAiY2F0IiwKKwl9LAorCXsKKwkg
ICAgImZpbGUiID0+ICIvYm9vdC92bWxpbnV6LSR1bmFtZSIsCisJICAgICJleGVjIiA9PiAic2Ny
aXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3Qt
aWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gInZtbGludXgiLAorCSAgICAiZXhl
YyIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJICAgICJ0ZXN0IiA9PiAic2NyaXB0
cy9leHRyYWN0LWlrY29uZmlnIiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+ICIvbGliL21vZHVs
ZXMvJHVuYW1lL2tlcm5lbC9rZXJuZWwvY29uZmlncy5rbyIsCisJICAgICJleGVjIiA9PiAic2Ny
aXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3Qt
aWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gImtlcm5lbC9jb25maWdzLmtvIiwK
KwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIg
PT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAi
a2VybmVsL2NvbmZpZ3MubyIsCisJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29u
ZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCX0sCisp
OworCitzdWIgcmVhZF9jb25maWcgeworICAgIGZvcmVhY2ggbXkgJGNvbmYgKEBzZWFyY2hjb25m
aWdzKSB7CisJbXkgJGZpbGUgPSAkY29uZi0+eyJmaWxlIn07CisKKwluZXh0IGlmICggISAtZiAi
JGZpbGUiKTsKKworCWlmIChkZWZpbmVkKCRjb25mLT57InRlc3QifSkpIHsKKwkgICAgYCRjb25m
LT57InRlc3QifSAkY29uZi0+eyJmaWxlIn0gMj4vZGV2L251bGxgOworCSAgICBuZXh0IGlmICgk
Pyk7CisJfQorCisJbXkgJGV4ZWMgPSAkY29uZi0+eyJleGVjIn07CisKKwlwcmludCBTVERFUlIg
InVzaW5nIGNvbmZpZzogJyRmaWxlJ1xuIjsKKworCW9wZW4obXkgJGluZmlsZSwgJy18JywgIiRl
eGVjICRmaWxlIikgfHwgZGllICJGYWlsZWQgdG8gcnVuICRleGVjICRmaWxlIjsKKwlteSBAeCA9
IDwkaW5maWxlPjsKKwljbG9zZSAkaW5maWxlOworCXJldHVybiBAeDsKKyAgICB9CisgICAgZGll
ICJObyBjb25maWcgZmlsZSBmb3VuZCI7Cit9CisKK215IEBjb25maWdfZmlsZSA9IHJlYWRfY29u
ZmlnOworCisjIFBhcnNlIG9wdGlvbnMKK215ICRsb2NhbG1vZGNvbmZpZyA9IDA7CitteSAkbG9j
YWx5ZXNjb25maWcgPSAwOworCitHZXRPcHRpb25zKCJsb2NhbG1vZGNvbmZpZyIgPT4gXCRsb2Nh
bG1vZGNvbmZpZywKKwkgICAibG9jYWx5ZXNjb25maWciID0+IFwkbG9jYWx5ZXNjb25maWcpOwor
CisjIEdldCB0aGUgYnVpbGQgc291cmNlIGFuZCB0b3AgbGV2ZWwgS2NvbmZpZyBmaWxlIChwYXNz
ZWQgaW4pCitteSAka3NvdXJjZSA9ICgkQVJHVlswXSA/ICRBUkdWWzBdIDogJy4nKTsKK215ICRr
Y29uZmlnID0gJEFSR1ZbMV07CitteSAkbHNtb2RfZmlsZSA9ICRFTlZ7J0xTTU9EJ307CisKK215
IEBtYWtlZmlsZXMgPSBgZmluZCAka3NvdXJjZSAtbmFtZSBNYWtlZmlsZSAtb3IgLW5hbWUgS2J1
aWxkIDI+L2Rldi9udWxsYDsKK2Nob21wIEBtYWtlZmlsZXM7CisKK215ICVkZXBlbmRzOworbXkg
JXNlbGVjdHM7CitteSAlcHJvbXB0czsKK215ICVvYmplY3RzOworbXkgJHZhcjsKK215ICRpZmxl
dmVsID0gMDsKK215IEBpZmRlcHM7CisKKyMgcHJldmVudCByZWN1cnNpb24KK215ICVyZWFkX2tj
b25maWdzOworCitzdWIgcmVhZF9rY29uZmlnIHsKKyAgICBteSAoJGtjb25maWcpID0gQF87CisK
KyAgICBteSAkc3RhdGUgPSAiTk9ORSI7CisgICAgbXkgJGNvbmZpZzsKKworICAgIG15ICRjb250
ID0gMDsKKyAgICBteSAkbGluZTsKKworICAgIG15ICRzb3VyY2UgPSAiJGtzb3VyY2UvJGtjb25m
aWciOworICAgIG15ICRsYXN0X3NvdXJjZSA9ICIiOworCisgICAgIyBDaGVjayBmb3IgYW55IGVu
dmlyb25tZW50IHZhcmlhYmxlcyB1c2VkCisgICAgd2hpbGUgKCRzb3VyY2UgPX4gL1wkXCgoXHcr
KVwpLyAmJiAkbGFzdF9zb3VyY2UgbmUgJHNvdXJjZSkgeworCW15ICRlbnYgPSAkMTsKKwkkbGFz
dF9zb3VyY2UgPSAkc291cmNlOworCSRzb3VyY2UgPX4gcy9cJFwoJGVudlwpLyRFTlZ7JGVudn0v
OworICAgIH0KKworICAgIG9wZW4obXkgJGtpbmZpbGUsICc8JywgJHNvdXJjZSkgfHwgZGllICJD
YW4ndCBvcGVuICRrY29uZmlnIjsKKyAgICB3aGlsZSAoPCRraW5maWxlPikgeworCWNob21wOwor
CisJIyBNYWtlIHN1cmUgdGhhdCBsaW5lcyBlbmRpbmcgd2l0aCBcIGNvbnRpbnVlCisJaWYgKCRj
b250KSB7CisJICAgICRfID0gJGxpbmUgLiAiICIgLiAkXzsKKwl9CisKKwlpZiAocy9cXCQvLykg
eworCSAgICAkY29udCA9IDE7CisJICAgICRsaW5lID0gJF87CisJICAgIG5leHQ7CisJfQorCisJ
JGNvbnQgPSAwOworCisJIyBjb2xsZWN0IGFueSBLY29uZmlnIHNvdXJjZXMKKwlpZiAoL15zb3Vy
Y2VccysiPyhbXiJdKykvKSB7CisJICAgIG15ICRrY29uZmlnID0gJDE7CisJICAgICMgcHJldmVu
dCByZWFkaW5nIHR3aWNlLgorCSAgICBpZiAoIWRlZmluZWQoJHJlYWRfa2NvbmZpZ3N7JGtjb25m
aWd9KSkgeworCQkkcmVhZF9rY29uZmlnc3ska2NvbmZpZ30gPSAxOworCQlyZWFkX2tjb25maWco
JGtjb25maWcpOworCSAgICB9CisJICAgIG5leHQ7CisJfQorCisJIyBjb25maWdzIGZvdW5kCisJ
aWYgKC9eXHMqKG1lbnUpP2NvbmZpZ1xzKyhcUyspXHMqJC8pIHsKKwkgICAgJHN0YXRlID0gIk5F
VyI7CisJICAgICRjb25maWcgPSAkMjsKKworCSAgICAjIEFkZCBkZXBlbmRzIGZvciAnaWYnIG5l
c3RpbmcKKwkgICAgZm9yIChteSAkaSA9IDA7ICRpIDwgJGlmbGV2ZWw7ICRpKyspIHsKKwkJaWYg
KCRpKSB7CisJCSAgICAkZGVwZW5kc3skY29uZmlnfSAuPSAiICIgLiAkaWZkZXBzWyRpXTsKKwkJ
fSBlbHNlIHsKKwkJICAgICRkZXBlbmRzeyRjb25maWd9ID0gJGlmZGVwc1skaV07CisJCX0KKwkJ
JHN0YXRlID0gIkRFUCI7CisJICAgIH0KKworCSMgY29sbGVjdCB0aGUgZGVwZW5kcyBmb3IgdGhl
IGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBlcSAiTkVXIiAmJiAvXlxzKmRlcGVuZHNccytvblxz
KyguKikkLykgeworCSAgICAkc3RhdGUgPSAiREVQIjsKKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30g
PSAkMTsKKwl9IGVsc2lmICgkc3RhdGUgZXEgIkRFUCIgJiYgL15ccypkZXBlbmRzXHMrb25ccyso
LiopJC8pIHsKKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJDE7CisJfSBlbHNpZiAo
JHN0YXRlIGVxICJERVAiICYmIC9eXHMqZGVmKF8oYm9vbHx0cmlzdGF0ZSl8YXVsdClccysoXFMu
KikkLykgeworCSAgICBteSAkZGVwID0gJDM7CisJICAgIGlmICgkZGVwICF+IC9eXHMqKHl8bXxu
KVxzKiQvKSB7CisJCSRkZXAgPX4gcy8uKlxzaWZccysvLzsKKwkJJGRlcGVuZHN7JGNvbmZpZ30g
Lj0gIiAiIC4gJGRlcDsKKwkJZHByaW50ICJBZGRlZCBkZWZhdWx0IGRlcGVuZHMgJGRlcCB0byAk
Y29uZmlnXG4iOworCSAgICB9CisKKwkjIEdldCB0aGUgY29uZmlncyB0aGF0IHNlbGVjdCB0aGlz
IGNvbmZpZworCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYgL15ccypzZWxlY3RccysoXFMr
KS8pIHsKKwkgICAgbXkgJGNvbmYgPSAkMTsKKwkgICAgaWYgKGRlZmluZWQoJHNlbGVjdHN7JGNv
bmZ9KSkgeworCQkkc2VsZWN0c3skY29uZn0gLj0gIiAiIC4gJGNvbmZpZzsKKwkgICAgfSBlbHNl
IHsKKwkJJHNlbGVjdHN7JGNvbmZ9ID0gJGNvbmZpZzsKKwkgICAgfQorCisJIyBjb25maWdzIHdp
dGhvdXQgcHJvbXB0cyBtdXN0IGJlIHNlbGVjdGVkCisJfSBlbHNpZiAoJHN0YXRlIG5lICJOT05F
IiAmJiAvXlxzKih0cmlzdGF0ZVxzK1xTfHByb21wdFxiKS8pIHsKKwkgICAgIyBub3RlIGlmIHRo
ZSBjb25maWcgaGFzIGEgcHJvbXB0CisJICAgICRwcm9tcHRzeyRjb25maWd9ID0gMTsKKworCSMg
Q2hlY2sgZm9yIGlmIHN0YXRlbWVudHMKKwl9IGVsc2lmICgvXmlmXHMrKC4qXFMpXHMqJC8pIHsK
KwkgICAgbXkgJGRlcHMgPSAkMTsKKwkgICAgIyByZW1vdmUgYmVnaW5uaW5nIGFuZCBlbmRpbmcg
bm9uIHRleHQKKwkgICAgJGRlcHMgPX4gcy9eW15hLXpBLVowLTlfXSovLzsKKwkgICAgJGRlcHMg
PX4gcy9bXmEtekEtWjAtOV9dKiQvLzsKKworCSAgICBteSBAZGVwcyA9IHNwbGl0IC9bXmEtekEt
WjAtOV9dKy8sICRkZXBzOworCisJICAgICRpZmRlcHNbJGlmbGV2ZWwrK10gPSBqb2luICc6Jywg
QGRlcHM7CisKKwl9IGVsc2lmICgvXmVuZGlmLykgeworCisJICAgICRpZmxldmVsLS0gaWYgKCRp
ZmxldmVsKTsKKworCSMgc3RvcCBvbiAiaGVscCIgYW5kIGtleXdvcmRzIHRoYXQgZW5kIGEgbWVu
dSBlbnRyeQorCX0gZWxzaWYgKC9eXHMqKC0tLSk/aGVscCgtLS0pP1xzKiQvIHx8IC9eKGNvbW1l
bnR8Y2hvaWNlfG1lbnUpXGIvKSB7CisJICAgICRzdGF0ZSA9ICJOT05FIjsKKwl9CisgICAgfQor
ICAgIGNsb3NlKCRraW5maWxlKTsKK30KKworaWYgKCRrY29uZmlnKSB7CisgICAgcmVhZF9rY29u
ZmlnKCRrY29uZmlnKTsKK30KKworIyBNYWtlZmlsZXMgY2FuIHVzZSB2YXJpYWJsZXMgdG8gZGVm
aW5lIHRoZWlyIGRlcGVuZGVuY2llcworc3ViIGNvbnZlcnRfdmFycyB7CisgICAgbXkgKCRsaW5l
LCAldmFycykgPSBAXzsKKworICAgIG15ICRwcm9jZXNzID0gIiI7CisKKyAgICB3aGlsZSAoJGxp
bmUgPX4gcy9eKC4qPykoXCRcKCguKj8pXCkpLy8pIHsKKwlteSAkc3RhcnQgPSAkMTsKKwlteSAk
dmFyaWFibGUgPSAkMjsKKwlteSAkdmFyID0gJDM7CisKKwlpZiAoZGVmaW5lZCgkdmFyc3skdmFy
fSkpIHsKKwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcnN7JHZhcn07CisJfSBlbHNlIHsK
KwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcmlhYmxlOworCX0KKyAgICB9CisKKyAgICAk
cHJvY2VzcyAuPSAkbGluZTsKKworICAgIHJldHVybiAkcHJvY2VzczsKK30KKworIyBSZWFkIGFs
bCBNYWtlZmlsZXMgdG8gbWFwIHRoZSBjb25maWdzIHRvIHRoZSBvYmplY3RzCitmb3JlYWNoIG15
ICRtYWtlZmlsZSAoQG1ha2VmaWxlcykgeworCisgICAgbXkgJGxpbmUgPSAiIjsKKyAgICBteSAl
bWFrZV92YXJzOworCisgICAgb3BlbihteSAkaW5maWxlLCAnPCcsICRtYWtlZmlsZSkgfHwgZGll
ICJDYW4ndCBvcGVuICRtYWtlZmlsZSI7CisgICAgd2hpbGUgKDwkaW5maWxlPikgeworCSMgaWYg
dGhpcyBsaW5lIGVuZHMgd2l0aCBhIGJhY2tzbGFzaCwgY29udGludWUKKwljaG9tcDsKKwlpZiAo
L14oLiopXFwkLykgeworCSAgICAkbGluZSAuPSAkMTsKKwkgICAgbmV4dDsKKwl9CisKKwkkbGlu
ZSAuPSAkXzsKKwkkXyA9ICRsaW5lOworCSRsaW5lID0gIiI7CisKKwlteSAkb2JqczsKKworCSMg
Q29udmVydCB2YXJpYWJsZXMgaW4gYSBsaW5lIChjb3VsZCBkZWZpbmUgY29uZmlncykKKwkkXyA9
IGNvbnZlcnRfdmFycygkXywgJW1ha2VfdmFycyk7CisKKwkjIGNvbGxlY3Qgb2JqZWN0cyBhZnRl
ciBvYmotJChDT05GSUdfRk9PX0JBUikKKwlpZiAoL29iai1cJFwoKENPTkZJR19bXlwpXSopXClc
cypbKzpdPz1ccyooLiopLykgeworCSAgICAkdmFyID0gJDE7CisJICAgICRvYmpzID0gJDI7CisK
KwkjIGNoZWNrIGlmIHZhcmlhYmxlcyBhcmUgc2V0CisJfSBlbHNpZiAoL15ccyooXFMrKVxzKls6
XT89XHMqKC4qXFMpLykgeworCSAgICAkbWFrZV92YXJzeyQxfSA9ICQyOworCX0KKwlpZiAoZGVm
aW5lZCgkb2JqcykpIHsKKwkgICAgZm9yZWFjaCBteSAkb2JqIChzcGxpdCAvXHMrLywkb2Jqcykg
eworCQkkb2JqID1+IHMvLS9fL2c7CisJCWlmICgkb2JqID1+IC8oLiopXC5vJC8pIHsKKwkJICAg
ICMgT2JqZWN0cyBtYXkgYmUgZW5hYmxlZCBieSBtb3JlIHRoYW4gb25lIGNvbmZpZy4KKwkJICAg
ICMgU3RvcmUgY29uZmlncyBpbiBhbiBhcnJheS4KKwkJICAgIG15IEBhcnI7CisKKwkJICAgIGlm
IChkZWZpbmVkKCRvYmplY3RzeyQxfSkpIHsKKwkJCUBhcnIgPSBAeyRvYmplY3RzeyQxfX07CisJ
CSAgICB9CisKKwkJICAgICRhcnJbJCNhcnIrMV0gPSAkdmFyOworCisJCSAgICAjIFRoZSBvYmpl
Y3RzIGhhdmUgYSBoYXNoIG1hcHBpbmcgdG8gYSByZWZlcmVuY2UKKwkJICAgICMgb2YgYW4gYXJy
YXkgb2YgY29uZmlncy4KKwkJICAgICRvYmplY3RzeyQxfSA9IFxAYXJyOworCQl9CisJICAgIH0K
Kwl9CisgICAgfQorICAgIGNsb3NlKCRpbmZpbGUpOworfQorCitteSAlbW9kdWxlczsKK215ICRs
aW5maWxlOworCitpZiAoZGVmaW5lZCgkbHNtb2RfZmlsZSkpIHsKKyAgICBpZiAoICEgLWYgJGxz
bW9kX2ZpbGUpIHsKKwlpZiAoIC1mICRFTlZ7J29ianRyZWUnfS4iLyIuJGxzbW9kX2ZpbGUpIHsK
KwkgICAgJGxzbW9kX2ZpbGUgPSAkRU5WeydvYmp0cmVlJ30uIi8iLiRsc21vZF9maWxlOworCX0g
ZWxzZSB7CisJCWRpZSAiJGxzbW9kX2ZpbGUgbm90IGZvdW5kIjsKKwl9CisgICAgfQorCisgICAg
bXkgJG90eXBlID0gKCAteCAkbHNtb2RfZmlsZSkgPyAnLXwnIDogJzwnOworICAgIG9wZW4oJGxp
bmZpbGUsICRvdHlwZSwgJGxzbW9kX2ZpbGUpOworCit9IGVsc2UgeworCisgICAgIyBzZWUgd2hh
dCBtb2R1bGVzIGFyZSBsb2FkZWQgb24gdGhpcyBzeXN0ZW0KKyAgICBteSAkbHNtb2Q7CisKKyAg
ICBmb3JlYWNoIG15ICRkaXIgKCAoIi9zYmluIiwgIi9iaW4iLCAiL3Vzci9zYmluIiwgIi91c3Iv
YmluIikgKSB7CisJaWYgKCAteCAiJGRpci9sc21vZCIgKSB7CisJICAgICRsc21vZCA9ICIkZGly
L2xzbW9kIjsKKwkgICAgbGFzdDsKKwl9Cit9CisgICAgaWYgKCFkZWZpbmVkKCRsc21vZCkpIHsK
KwkjIHRyeSBqdXN0IHRoZSBwYXRoCisJJGxzbW9kID0gImxzbW9kIjsKKyAgICB9CisKKyAgICBv
cGVuKCRsaW5maWxlLCAnLXwnLCAkbHNtb2QpIHx8IGRpZSAiQ2FuIG5vdCBjYWxsIGxzbW9kIHdp
dGggJGxzbW9kIjsKK30KKword2hpbGUgKDwkbGluZmlsZT4pIHsKKwluZXh0IGlmICgvXk1vZHVs
ZS8pOyAgIyBTa2lwIHRoZSBmaXJzdCBsaW5lLgorCWlmICgvXihcUyspLykgeworCQkkbW9kdWxl
c3skMX0gPSAxOworCX0KK30KK2Nsb3NlICgkbGluZmlsZSk7CisKKyMgYWRkIHRvIHRoZSBjb25m
aWdzIGhhc2ggYWxsIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkIHRvIGVuYWJsZQorIyBhIGxvYWRl
ZCBtb2R1bGUuIFRoaXMgaXMgYSBkaXJlY3Qgb2JqLSR7Q09ORklHX0ZPT30gKz0gYmFyLm8KKyMg
d2hlcmUgd2Uga25vdyB3ZSBuZWVkIGJhci5vIHNvIHdlIGFkZCBGT08gdG8gdGhlIGxpc3QuCitt
eSAlY29uZmlnczsKK2ZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cyglbW9kdWxlcykpIHsKKyAgICBp
ZiAoZGVmaW5lZCgkb2JqZWN0c3skbW9kdWxlfSkpIHsKKwlteSBAYXJyID0gQHskb2JqZWN0c3sk
bW9kdWxlfX07CisJZm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICAkY29uZmlnc3skY29u
Zn0gPSAkbW9kdWxlOworCSAgICBkcHJpbnQgIiRjb25mIGFkZGVkIGJ5IGRpcmVjdCAoJG1vZHVs
ZSlcbiI7CisJICAgIGlmICgkZGVidWdwcmludCkgeworCQlteSAkYz0kY29uZjsKKwkJJGMgPX4g
cy9eQ09ORklHXy8vOworCQlpZiAoZGVmaW5lZCgkZGVwZW5kc3skY30pKSB7CisJCSAgICBkcHJp
bnQgIiBkZXBzID0gJGRlcGVuZHN7JGN9XG4iOworCQl9IGVsc2UgeworCQkgICAgZHByaW50ICIg
bm8gZGVwc1xuIjsKKwkJfQorCSAgICB9CisJfQorICAgIH0gZWxzZSB7CisJIyBNb3N0IGxpa2Vs
eSwgc29tZW9uZSBoYXMgYSBjdXN0b20gKGJpbmFyeT8pIG1vZHVsZSBsb2FkZWQuCisJcHJpbnQg
U1RERVJSICIkbW9kdWxlIGNvbmZpZyBub3QgZm91bmQhIVxuIjsKKyAgICB9Cit9CisKKyMgUmVh
ZCB0aGUgY3VycmVudCBjb25maWcsIGFuZCBzZWUgd2hhdCBpcyBlbmFibGVkLiBXZSB3YW50IHRv
CisjIGlnbm9yZSBjb25maWdzIHRoYXQgd2Ugd291bGQgbm90IGVuYWJsZSBhbnl3YXkuCisKK215
ICVvcmlnX2NvbmZpZ3M7CitteSAkdmFsaWQgPSAiQS1aYS16XzAtOSI7CisKK2ZvcmVhY2ggbXkg
JGxpbmUgKEBjb25maWdfZmlsZSkgeworICAgICRfID0gJGxpbmU7CisKKyAgICBpZiAoLyhDT05G
SUdfWyR2YWxpZF0qKT0obXx5KS8pIHsKKwkkb3JpZ19jb25maWdzeyQxfSA9ICQyOworICAgIH0K
K30KKworbXkgJHJlcGVhdCA9IDE7CisKK215ICRkZXBjb25maWc7CisKKyMKKyMgTm90ZSwgd2Ug
ZG8gbm90IGNhcmUgYWJvdXQgb3BlcmFuZHMgKGxpa2U6ICYmLCB8fCwgISkgd2Ugd2FudCB0byBh
ZGQgYW55CisjIGNvbmZpZyB0aGF0IGlzIGluIHRoZSBkZXBlbmQgbGlzdCBvZiBhbm90aGVyIGNv
bmZpZy4gVGhpcyBzY3JpcHQgZG9lcworIyBub3QgZW5hYmxlIGNvbmZpZ3MgdGhhdCBhcmUgbm90
IGFscmVhZHkgZW5hYmxlZC4gSWYgd2UgY29tZSBhY3Jvc3MgYQorIyBjb25maWcgQSB0aGF0IGRl
cGVuZHMgb24gIUIsIHdlIGNhbiBzdGlsbCBhZGQgQiB0byB0aGUgbGlzdCBvZiBkZXBlbmRzCisj
IHRvIGtlZXAgb24uIElmIEEgd2FzIG9uIGluIHRoZSBvcmlnaW5hbCBjb25maWcsIEIgd291bGQg
bm90IGhhdmUgYmVlbgorIyBhbmQgQiB3b3VsZCBub3QgYmUgdHVybmVkIG9uIGJ5IHRoaXMgc2Ny
aXB0LgorIworc3ViIHBhcnNlX2NvbmZpZ19kZXBlbmRzCit7CisgICAgbXkgKCRwKSA9IEBfOwor
CisgICAgd2hpbGUgKCRwID1+IC9bJHZhbGlkXS8pIHsKKworCWlmICgkcCA9fiAvXlteJHZhbGlk
XSooWyR2YWxpZF0rKS8pIHsKKwkgICAgbXkgJGNvbmYgPSAiQ09ORklHXyIgLiAkMTsKKworCSAg
ICAkcCA9fiBzL15bXiR2YWxpZF0qWyR2YWxpZF0rLy87CisKKwkgICAgIyBXZSBvbmx5IG5lZWQg
dG8gcHJvY2VzcyBpZiB0aGUgZGVwZW5kIGNvbmZpZyBpcyBhIG1vZHVsZQorCSAgICBpZiAoIWRl
ZmluZWQoJG9yaWdfY29uZmlnc3skY29uZn0pIHx8ICRvcmlnX2NvbmZpZ3N7JGNvbmZ9IGVxICJ5
IikgeworCQluZXh0OworCSAgICB9CisKKwkgICAgaWYgKCFkZWZpbmVkKCRjb25maWdzeyRjb25m
fSkpIHsKKwkJIyBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGhhcyBpdHMKKwkJ
IyBkZXBlbmRlbmNpZXMgbWV0LgorCQkkcmVwZWF0ID0gMTsgIyBkbyBhZ2FpbgorCQlkcHJpbnQg
IiRjb25mIHNlbGVjdGVkIGJ5IGRlcGVuZCAkZGVwY29uZmlnXG4iOworCQkkY29uZmlnc3skY29u
Zn0gPSAxOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZGllICJ0aGlzIHNob3VsZCBuZXZlciBo
YXBwZW4iOworCX0KKyAgICB9Cit9CisKKyMgU2VsZWN0IGlzIHRyZWF0ZWQgYSBiaXQgZGlmZmVy
ZW50bHkgdGhhbiBkZXBlbmRzLiBXZSBjYWxsIHRoaXMKKyMgd2hlbiBhIGNvbmZpZyBoYXMgbm8g
cHJvbXB0IGFuZCByZXF1aXJlcyBhbm90aGVyIGNvbmZpZyB0byBiZQorIyBzZWxlY3RlZC4gV2Ug
dXNlIHRvIGp1c3Qgc2VsZWN0IGFsbCBjb25maWdzIHRoYXQgc2VsZWN0ZWQgdGhpcworIyBjb25m
aWcsIGJ1dCBmb3VuZCB0aGF0IHRoYXQgY2FuIGJhbGxvb24gaW50byBlbmFibGluZyBodW5kcmVk
cworIyBvZiBjb25maWdzIHRoYXQgd2UgZG8gbm90IGNhcmUgYWJvdXQuCisjCisjIFRoZSBpZGVh
IGlzIHdlIGxvb2sgYXQgYWxsIHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IGl0LiBJZiBvbmUKKyMg
aXMgYWxyZWFkeSBpbiBvdXIgbGlzdCBvZiBjb25maWdzIHRvIGVuYWJsZSwgdGhlbiB0aGVyZSdz
IG5vdGhpbmcKKyMgZWxzZSB0byBkby4gSWYgdGhlcmUgaXNuJ3QsIHdlIHBpY2sgdGhlIGZpcnN0
IGNvbmZpZyB0aGF0IHdhcworIyBlbmFibGVkIGluIHRoZSBvcmlnbmFsIGNvbmZpZyBhbmQgdXNl
IHRoYXQuCitzdWIgcGFyc2VfY29uZmlnX3NlbGVjdHMKK3sKKyAgICBteSAoJGNvbmZpZywgJHAp
ID0gQF87CisKKyAgICBteSAkbmV4dF9jb25maWc7CisKKyAgICB3aGlsZSAoJHAgPX4gL1skdmFs
aWRdLykgeworCisJaWYgKCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykgeworCSAgICBt
eSAkY29uZiA9ICJDT05GSUdfIiAuICQxOworCisJICAgICRwID1+IHMvXlteJHZhbGlkXSpbJHZh
bGlkXSsvLzsKKworCSAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGV4aXN0cyBpbiB0
aGUgY3VycmVudCAuY29uZmlnIGZpbGUKKwkgICAgaWYgKCFkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7
JGNvbmZ9KSkgeworCQlkcHJpbnQgIiRjb25mIG5vdCBzZXQgZm9yICRjb25maWcgc2VsZWN0XG4i
OworCQluZXh0OworCSAgICB9CisKKwkgICAgIyBDaGVjayBpZiBzb21ldGhpbmcgb3RoZXIgdGhh
biBhIG1vZHVsZSBzZWxlY3RzIHRoaXMgY29uZmlnCisJICAgIGlmIChkZWZpbmVkKCRvcmlnX2Nv
bmZpZ3N7JGNvbmZ9KSAmJiAkb3JpZ19jb25maWdzeyRjb25mfSBuZSAibSIpIHsKKwkJZHByaW50
ICIkY29uZiAobm9uIG1vZHVsZSkgc2VsZWN0cyBjb25maWcsIHdlIGFyZSBnb29kXG4iOworCQkj
IHdlIGFyZSBnb29kIHdpdGggdGhpcworCQlyZXR1cm47CisJICAgIH0KKwkgICAgaWYgKGRlZmlu
ZWQoJGNvbmZpZ3N7JGNvbmZ9KSkgeworCQlkcHJpbnQgIiRjb25mIHNlbGVjdHMgJGNvbmZpZyBz
byB3ZSBhcmUgZ29vZFxuIjsKKwkJIyBBIHNldCBjb25maWcgc2VsZWN0cyB0aGlzIGNvbmZpZywg
d2UgYXJlIGdvb2QKKwkJcmV0dXJuOworCSAgICB9CisJICAgICMgU2V0IHRoaXMgY29uZmlnIHRv
IGJlIHNlbGVjdGVkCisJICAgIGlmICghZGVmaW5lZCgkbmV4dF9jb25maWcpKSB7CisJCSRuZXh0
X2NvbmZpZyA9ICRjb25mOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgZGllICJ0aGlzIHNob3Vs
ZCBuZXZlciBoYXBwZW4iOworCX0KKyAgICB9CisKKyAgICAjIElmIG5vIHBvc3NpYmxlIGNvbmZp
ZyBzZWxlY3RlZCB0aGlzLCB0aGVuIHNvbWV0aGluZyBoYXBwZW5lZC4KKyAgICBpZiAoIWRlZmlu
ZWQoJG5leHRfY29uZmlnKSkgeworCXByaW50IFNUREVSUiAiV0FSTklORzogJGNvbmZpZyBpcyBy
ZXF1aXJlZCwgYnV0IG5vdGhpbmcgaW4gdGhlXG4iOworCXByaW50IFNUREVSUiAiICBjdXJyZW50
IGNvbmZpZyBzZWxlY3RzIGl0LlxuIjsKKwlyZXR1cm47CisgICAgfQorCisgICAgIyBJZiB3ZSBh
cmUgaGVyZSwgdGhlbiB3ZSBmb3VuZCBubyBjb25maWcgdGhhdCBpcyBzZXQgYW5kCisgICAgIyBz
ZWxlY3RzIHRoaXMgY29uZmlnLiBSZXBlYXQuCisgICAgJHJlcGVhdCA9IDE7CisgICAgIyBNYWtl
IHRoaXMgY29uZmlnIG5lZWQgdG8gYmUgc2VsZWN0ZWQKKyAgICAkY29uZmlnc3skbmV4dF9jb25m
aWd9ID0gMTsKKyAgICBkcHJpbnQgIiRuZXh0X2NvbmZpZyBzZWxlY3RlZCBieSBzZWxlY3QgJGNv
bmZpZ1xuIjsKK30KKworbXkgJXByb2Nlc3Nfc2VsZWN0czsKKworIyBsb29wIHRocm91Z2ggYWxs
IGNvbmZpZ3MsIHNlbGVjdCB0aGVpciBkZXBlbmRlbmNpZXMuCitzdWIgbG9vcF9kZXBlbmQgewor
ICAgICRyZXBlYXQgPSAxOworCisgICAgd2hpbGUgKCRyZXBlYXQpIHsKKwkkcmVwZWF0ID0gMDsK
KworICAgICAgZm9ybG9vcDoKKwlmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJWNvbmZpZ3MpIHsK
KworCSAgICAjIElmIHRoaXMgY29uZmlnIGlzIG5vdCBhIG1vZHVsZSwgd2UgZG8gbm90IG5lZWQg
dG8gcHJvY2VzcyBpdAorCSAgICBpZiAoZGVmaW5lZCgkb3JpZ19jb25maWdzeyRjb25maWd9KSAm
JiAkb3JpZ19jb25maWdzeyRjb25maWd9IG5lICJtIikgeworCQluZXh0IGZvcmxvb3A7CisJICAg
IH0KKworCSAgICAkY29uZmlnID1+IHMvXkNPTkZJR18vLzsKKwkgICAgJGRlcGNvbmZpZyA9ICRj
b25maWc7CisKKwkgICAgaWYgKGRlZmluZWQoJGRlcGVuZHN7JGNvbmZpZ30pKSB7CisJCSMgVGhp
cyBjb25maWcgaGFzIGRlcGVuZGVuY2llcy4gTWFrZSBzdXJlIHRoZXkgYXJlIGFsc28gaW5jbHVk
ZWQKKwkJcGFyc2VfY29uZmlnX2RlcGVuZHMgJGRlcGVuZHN7JGNvbmZpZ307CisJICAgIH0KKwor
CSAgICAjIElmIHRoZSBjb25maWcgaGFzIG5vIHByb21wdCwgdGhlbiB3ZSBuZWVkIHRvIGNoZWNr
IGlmIGEgY29uZmlnCisJICAgICMgdGhhdCBpcyBlbmFibGVkIHNlbGVjdGVkIGl0LiBPciBpZiB3
ZSBuZWVkIHRvIGVuYWJsZSBvbmUuCisJICAgIGlmICghZGVmaW5lZCgkcHJvbXB0c3skY29uZmln
fSkgJiYgZGVmaW5lZCgkc2VsZWN0c3skY29uZmlnfSkpIHsKKwkJJHByb2Nlc3Nfc2VsZWN0c3sk
Y29uZmlnfSA9IDE7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdWIgbG9vcF9zZWxlY3Qgewor
CisgICAgZm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVwcm9jZXNzX3NlbGVjdHMpIHsKKwkkY29u
ZmlnID1+IHMvXkNPTkZJR18vLzsKKworCWRwcmludCAiUHJvY2VzcyBzZWxlY3QgJGNvbmZpZ1xu
IjsKKworCSMgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIG11c3QgYmUgc2VsZWN0ZWQuCisJcGFy
c2VfY29uZmlnX3NlbGVjdHMgJGNvbmZpZywgJHNlbGVjdHN7JGNvbmZpZ307CisgICAgfQorfQor
Cit3aGlsZSAoJHJlcGVhdCkgeworICAgICMgR2V0IHRoZSBmaXJzdCBzZXQgb2YgY29uZmlncyBh
bmQgdGhlaXIgZGVwZW5kZW5jaWVzLgorICAgIGxvb3BfZGVwZW5kOworCisgICAgJHJlcGVhdCA9
IDA7CisKKyAgICAjIE5vdyB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSBoYXZlIHRvIGNoZWNrIHNlbGVj
dHM7CisgICAgbG9vcF9zZWxlY3Q7Cit9CisKK215ICVzZXRjb25maWdzOworCisjIEZpbmFsbHks
IHJlYWQgdGhlIC5jb25maWcgZmlsZSBhbmQgdHVybiBvZmYgYW55IG1vZHVsZSBlbmFibGVkIHRo
YXQKKyMgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb24gdG8ga2VlcCBlbmFibGVkLgorZm9yZWFj
aCBteSAkbGluZSAoQGNvbmZpZ19maWxlKSB7CisgICAgJF8gPSAkbGluZTsKKworICAgIGlmICgv
Q09ORklHX0lLQ09ORklHLykgeworCWlmICgvIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldC8p
IHsKKwkgICAgIyBlbmFibGUgSUtDT05GSUcgYXQgbGVhc3QgYXMgYSBtb2R1bGUKKwkgICAgcHJp
bnQgIkNPTkZJR19JS0NPTkZJRz1tXG4iOworCSAgICAjIGRvbid0IGFzayBhYm91dCBQUk9DCisJ
ICAgIHByaW50ICIjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXRcbiI7CisJfSBlbHNl
IHsKKwkgICAgcHJpbnQ7CisJfQorCW5leHQ7CisgICAgfQorCisgICAgaWYgKC9DT05GSUdfTU9E
VUxFX1NJR19LRVk9IiguKykiLykgeworICAgICAgICBteSAkb3JpZ19jZXJ0ID0gJDE7CisgICAg
ICAgIG15ICRkZWZhdWx0X2NlcnQgPSAiY2VydHMvc2lnbmluZ19rZXkucGVtIjsKKworICAgICAg
ICAjIENoZWNrIHRoYXQgdGhlIGxvZ2ljIGluIHRoaXMgc2NyaXB0IHN0aWxsIG1hdGNoZXMgdGhl
IG9uZSBpbiBLY29uZmlnCisgICAgICAgIGlmICghZGVmaW5lZCgkZGVwZW5kc3siTU9EVUxFX1NJ
R19LRVkifSkgfHwKKyAgICAgICAgICAgICRkZXBlbmRzeyJNT0RVTEVfU0lHX0tFWSJ9ICF+IC8i
XFEkZGVmYXVsdF9jZXJ0XEUiLykgeworICAgICAgICAgICAgcHJpbnQgU1RERVJSICJXQVJOSU5H
OiBNT0RVTEVfU0lHX0tFWSBhc3NlcnRpb24gZmFpbHVyZSwgIiwKKyAgICAgICAgICAgICAgICAi
dXBkYXRlIG5lZWRlZCB0byAiLCBfX0ZJTEVfXywgIiBsaW5lICIsIF9fTElORV9fLCAiXG4iOwor
ICAgICAgICAgICAgcHJpbnQ7CisgICAgICAgIH0gZWxzaWYgKCRvcmlnX2NlcnQgbmUgJGRlZmF1
bHRfY2VydCAmJiAhIC1mICRvcmlnX2NlcnQpIHsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAi
TW9kdWxlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZW5hYmxlZCBidXQgIiwKKyAgICAgICAgICAg
ICAgICAibW9kdWxlIHNpZ25pbmcga2V5IFwiJG9yaWdfY2VydFwiIG5vdCBmb3VuZC4gUmVzZXR0
aW5nICIsCisgICAgICAgICAgICAgICAgInNpZ25pbmcga2V5IHRvIGRlZmF1bHQgdmFsdWUuXG4i
OworICAgICAgICAgICAgcHJpbnQgIkNPTkZJR19NT0RVTEVfU0lHX0tFWT1cIiRkZWZhdWx0X2Nl
cnRcIlxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50OworICAgICAgICB9
CisgICAgICAgIG5leHQ7CisgICAgfQorCisgICAgaWYgKC9DT05GSUdfU1lTVEVNX1RSVVNURURf
S0VZUz0iKC4rKSIvKSB7CisgICAgICAgIG15ICRvcmlnX2tleXMgPSAkMTsKKworICAgICAgICBp
ZiAoISAtZiAkb3JpZ19rZXlzKSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIlN5c3RlbSBr
ZXlyaW5nIGVuYWJsZWQgYnV0IGtleXMgXCIkb3JpZ19rZXlzXCIgIiwKKyAgICAgICAgICAgICAg
ICAibm90IGZvdW5kLiBSZXNldHRpbmcga2V5cyB0byBkZWZhdWx0IHZhbHVlLlxuIjsKKyAgICAg
ICAgICAgIHByaW50ICJDT05GSUdfU1lTVEVNX1RSVVNURURfS0VZUz1cIlwiXG4iOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQ7CisgICAgICAgIH0KKyAgICAgICAgbmV4dDsK
KyAgICB9CisKKyAgICBpZiAoL14oQ09ORklHLiopPShtfHkpLykgeworCWlmIChkZWZpbmVkKCRj
b25maWdzeyQxfSkpIHsKKwkgICAgaWYgKCRsb2NhbHllc2NvbmZpZykgeworCSAgICAgICAgJHNl
dGNvbmZpZ3N7JDF9ID0gJ3knOworCQlwcmludCAiJDE9eVxuIjsKKwkJbmV4dDsKKwkgICAgfSBl
bHNlIHsKKwkgICAgICAgICRzZXRjb25maWdzeyQxfSA9ICQyOworCSAgICB9CisJfSBlbHNpZiAo
JDIgZXEgIm0iKSB7CisJICAgIHByaW50ICIjICQxIGlzIG5vdCBzZXRcbiI7CisJICAgIG5leHQ7
CisJfQorICAgIH0KKyAgICBwcmludDsKK30KKworIyBJbnRlZ3JpdHkgY2hlY2ssIG1ha2Ugc3Vy
ZSBhbGwgbW9kdWxlcyB0aGF0IHdlIHdhbnQgZW5hYmxlZCBkbworIyBpbmRlZWQgaGF2ZSB0aGVp
ciBjb25maWdzIHNldC4KK2xvb3A6Citmb3JlYWNoIG15ICRtb2R1bGUgKGtleXMoJW1vZHVsZXMp
KSB7CisgICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JG1vZHVsZX0pKSB7CisJbXkgQGFyciA9IEB7
JG9iamVjdHN7JG1vZHVsZX19OworCWZvcmVhY2ggbXkgJGNvbmYgKEBhcnIpIHsKKwkgICAgaWYg
KGRlZmluZWQoJHNldGNvbmZpZ3N7JGNvbmZ9KSkgeworCQluZXh0IGxvb3A7CisJICAgIH0KKwl9
CisJcHJpbnQgU1RERVJSICJtb2R1bGUgJG1vZHVsZSBkaWQgbm90IGhhdmUgY29uZmlncyI7CisJ
Zm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICBwcmludCBTVERFUlIgIiAiICwgJGNvbmY7
CisJfQorCXByaW50IFNUREVSUiAiXG4iOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvc3ltYm9sLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L3N5bWJvbC5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTI2NmQKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3N5bWJvbC5jCkBAIC0wLDAgKzEsMTMzMSBAQAorLy8gU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIg
Um9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPGN0
eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVk
ZSA8cmVnZXguaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorCisjaW5jbHVkZSAibGtjLmgi
CisKK3N0cnVjdCBzeW1ib2wgc3ltYm9sX3llcyA9IHsKKwkubmFtZSA9ICJ5IiwKKwkuY3VyciA9
IHsgInkiLCB5ZXMgfSwKKwkuZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAorfSwg
c3ltYm9sX21vZCA9IHsKKwkubmFtZSA9ICJtIiwKKwkuY3VyciA9IHsgIm0iLCBtb2QgfSwKKwku
ZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAorfSwgc3ltYm9sX25vID0geworCS5u
YW1lID0gIm4iLAorCS5jdXJyID0geyAibiIsIG5vIH0sCisJLmZsYWdzID0gU1lNQk9MX0NPTlNU
fFNZTUJPTF9WQUxJRCwKK30sIHN5bWJvbF9lbXB0eSA9IHsKKwkubmFtZSA9ICIiLAorCS5jdXJy
ID0geyAiIiwgbm8gfSwKKwkuZmxhZ3MgPSBTWU1CT0xfVkFMSUQsCit9OworCitzdHJ1Y3Qgc3lt
Ym9sICpzeW1fZGVmY29uZmlnX2xpc3Q7CitzdHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsKK3Ry
aXN0YXRlIG1vZHVsZXNfdmFsOworCitlbnVtIHN5bWJvbF90eXBlIHN5bV9nZXRfdHlwZShzdHJ1
Y3Qgc3ltYm9sICpzeW0pCit7CisJZW51bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltLT50eXBlOwor
CisJaWYgKHR5cGUgPT0gU19UUklTVEFURSkgeworCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShz
eW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpCisJCQl0eXBlID0gU19CT09MRUFOOworCQllbHNl
IGlmIChtb2R1bGVzX3ZhbCA9PSBubykKKwkJCXR5cGUgPSBTX0JPT0xFQU47CisJfQorCXJldHVy
biB0eXBlOworfQorCitjb25zdCBjaGFyICpzeW1fdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5cGUg
dHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwkJcmV0dXJuICJi
b29sIjsKKwljYXNlIFNfVFJJU1RBVEU6CisJCXJldHVybiAidHJpc3RhdGUiOworCWNhc2UgU19J
TlQ6CisJCXJldHVybiAiaW50ZWdlciI7CisJY2FzZSBTX0hFWDoKKwkJcmV0dXJuICJoZXgiOwor
CWNhc2UgU19TVFJJTkc6CisJCXJldHVybiAic3RyaW5nIjsKKwljYXNlIFNfVU5LTk9XTjoKKwkJ
cmV0dXJuICJ1bmtub3duIjsKKwl9CisJcmV0dXJuICI/Pz8iOworfQorCitzdHJ1Y3QgcHJvcGVy
dHkgKnN5bV9nZXRfY2hvaWNlX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBw
cm9wZXJ0eSAqcHJvcDsKKworCWZvcl9hbGxfY2hvaWNlcyhzeW0sIHByb3ApCisJCXJldHVybiBw
cm9wOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0
X2RlZmF1bHRfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpw
cm9wOworCisJZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHByb3ApIHsKKwkJcHJvcC0+dmlzaWJsZS50
cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsKKwkJaWYgKHByb3AtPnZp
c2libGUudHJpICE9IG5vKQorCQkJcmV0dXJuIHByb3A7CisJfQorCXJldHVybiBOVUxMOworfQor
CitzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfcmFuZ2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0p
Cit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCisJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwg
cHJvcCwgUF9SQU5HRSkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShw
cm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAocHJvcC0+dmlzaWJsZS50cmkgIT0gbm8pCisJCQly
ZXR1cm4gcHJvcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBsb25nIGxvbmcgc3lt
X2dldF9yYW5nZV92YWwoc3RydWN0IHN5bWJvbCAqc3ltLCBpbnQgYmFzZSkKK3sKKwlzeW1fY2Fs
Y192YWx1ZShzeW0pOworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0lOVDoKKwkJYmFz
ZSA9IDEwOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQliYXNlID0gMTY7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gc3RydG9sbChzeW0tPmN1cnIudmFsLCBO
VUxMLCBiYXNlKTsKK30KKworc3RhdGljIHZvaWQgc3ltX3ZhbGlkYXRlX3JhbmdlKHN0cnVjdCBz
eW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJaW50IGJhc2U7CisJbG9u
ZyBsb25nIHZhbCwgdmFsMjsKKwljaGFyIHN0cls2NF07CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
eworCWNhc2UgU19JTlQ6CisJCWJhc2UgPSAxMDsKKwkJYnJlYWs7CisJY2FzZSBTX0hFWDoKKwkJ
YmFzZSA9IDE2OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCXByb3AgPSBz
eW1fZ2V0X3JhbmdlX3Byb3Aoc3ltKTsKKwlpZiAoIXByb3ApCisJCXJldHVybjsKKwl2YWwgPSBz
dHJ0b2xsKHN5bS0+Y3Vyci52YWwsIE5VTEwsIGJhc2UpOworCXZhbDIgPSBzeW1fZ2V0X3Jhbmdl
X3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgYmFzZSk7CisJaWYgKHZhbCA+PSB2YWwyKSB7CisJ
CXZhbDIgPSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIGJhc2UpOwor
CQlpZiAodmFsIDw9IHZhbDIpCisJCQlyZXR1cm47CisJfQorCWlmIChzeW0tPnR5cGUgPT0gU19J
TlQpCisJCXNwcmludGYoc3RyLCAiJWxsZCIsIHZhbDIpOworCWVsc2UKKwkJc3ByaW50ZihzdHIs
ICIweCVsbHgiLCB2YWwyKTsKKwlzeW0tPmN1cnIudmFsID0geHN0cmR1cChzdHIpOworfQorCitz
dGF0aWMgdm9pZCBzeW1fc2V0X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsKKworCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIQU5HRUQ7CisJZm9y
IChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlpZiAocHJv
cC0+bWVudSkKKwkJCXByb3AtPm1lbnUtPmZsYWdzIHw9IE1FTlVfQ0hBTkdFRDsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkIHN5bV9zZXRfYWxsX2NoYW5nZWQodm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9s
ICpzeW07CisJaW50IGk7CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKQorCQlzeW1fc2V0X2No
YW5nZWQoc3ltKTsKK30KKworc3RhdGljIHZvaWQgc3ltX2NhbGNfdmlzaWJpbGl0eShzdHJ1Y3Qg
c3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wg
KmNob2ljZV9zeW0gPSBOVUxMOworCXRyaXN0YXRlIHRyaTsKKworCS8qIGFueSBwcm9tcHQgdmlz
aWJsZT8gKi8KKwl0cmkgPSBubzsKKworCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpCisJ
CWNob2ljZV9zeW0gPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsK
KworCWZvcl9hbGxfcHJvbXB0cyhzeW0sIHByb3ApIHsKKwkJcHJvcC0+dmlzaWJsZS50cmkgPSBl
eHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsKKwkJLyoKKwkJICogVHJpc3RhdGUg
Y2hvaWNlX3ZhbHVlcyB3aXRoIHZpc2liaWxpdHkgJ21vZCcgYXJlCisJCSAqIG5vdCB2aXNpYmxl
IGlmIHRoZSBjb3JyZXNwb25kaW5nIGNob2ljZSdzIHZhbHVlIGlzCisJCSAqICd5ZXMnLgorCQkg
Ki8KKwkJaWYgKGNob2ljZV9zeW0gJiYgc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYKKwkJICAg
IHByb3AtPnZpc2libGUudHJpID09IG1vZCAmJiBjaG9pY2Vfc3ltLT5jdXJyLnRyaSA9PSB5ZXMp
CisJCQlwcm9wLT52aXNpYmxlLnRyaSA9IG5vOworCisJCXRyaSA9IEVYUFJfT1IodHJpLCBwcm9w
LT52aXNpYmxlLnRyaSk7CisJfQorCWlmICh0cmkgPT0gbW9kICYmIChzeW0tPnR5cGUgIT0gU19U
UklTVEFURSB8fCBtb2R1bGVzX3ZhbCA9PSBubykpCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT52
aXNpYmxlICE9IHRyaSkgeworCQlzeW0tPnZpc2libGUgPSB0cmk7CisJCXN5bV9zZXRfY2hhbmdl
ZChzeW0pOworCX0KKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQorCQlyZXR1cm47CisJ
LyogZGVmYXVsdGluZyB0byAieWVzIiBpZiBubyBleHBsaWNpdCAiZGVwZW5kcyBvbiIgYXJlIGdp
dmVuICovCisJdHJpID0geWVzOworCWlmIChzeW0tPmRpcl9kZXAuZXhwcikKKwkJdHJpID0gZXhw
cl9jYWxjX3ZhbHVlKHN5bS0+ZGlyX2RlcC5leHByKTsKKwlpZiAodHJpID09IG1vZCAmJiBzeW1f
Z2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pCisJCXRyaSA9IHllczsKKwlpZiAoc3ltLT5kaXJf
ZGVwLnRyaSAhPSB0cmkpIHsKKwkJc3ltLT5kaXJfZGVwLnRyaSA9IHRyaTsKKwkJc3ltX3NldF9j
aGFuZ2VkKHN5bSk7CisJfQorCXRyaSA9IG5vOworCWlmIChzeW0tPnJldl9kZXAuZXhwcikKKwkJ
dHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+cmV2X2RlcC5leHByKTsKKwlpZiAodHJpID09IG1v
ZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pCisJCXRyaSA9IHllczsKKwlpZiAo
c3ltLT5yZXZfZGVwLnRyaSAhPSB0cmkpIHsKKwkJc3ltLT5yZXZfZGVwLnRyaSA9IHRyaTsKKwkJ
c3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJfQorCXRyaSA9IG5vOworCWlmIChzeW0tPmltcGxpZWQu
ZXhwciAmJiBzeW0tPmRpcl9kZXAudHJpICE9IG5vKQorCQl0cmkgPSBleHByX2NhbGNfdmFsdWUo
c3ltLT5pbXBsaWVkLmV4cHIpOworCWlmICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0p
ID09IFNfQk9PTEVBTikKKwkJdHJpID0geWVzOworCWlmIChzeW0tPmltcGxpZWQudHJpICE9IHRy
aSkgeworCQlzeW0tPmltcGxpZWQudHJpID0gdHJpOworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsK
Kwl9Cit9CisKKy8qCisgKiBGaW5kIHRoZSBkZWZhdWx0IHN5bWJvbCBmb3IgYSBjaG9pY2UuCisg
KiBGaXJzdCB0cnkgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0aGUgY2hvaWNlIHN5bWJvbAorICog
TmV4dCBsb2NhdGUgdGhlIGZpcnN0IHZpc2libGUgY2hvaWNlIHZhbHVlCisgKiBSZXR1cm4gTlVM
TCBpZiBub25lIHdhcyBmb3VuZAorICovCitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1
bHQoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07CisJc3Ry
dWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCisJLyogYW55IG9mIHRoZSBk
ZWZhdWx0cyB2aXNpYmxlPyAqLworCWZvcl9hbGxfZGVmYXVsdHMoc3ltLCBwcm9wKSB7CisJCXBy
b3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7CisJ
CWlmIChwcm9wLT52aXNpYmxlLnRyaSA9PSBubykKKwkJCWNvbnRpbnVlOworCQlkZWZfc3ltID0g
cHJvcF9nZXRfc3ltYm9sKHByb3ApOworCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJ
CXJldHVybiBkZWZfc3ltOworCX0KKworCS8qIGp1c3QgZ2V0IHRoZSBmaXJzdCB2aXNpYmxlIHZh
bHVlICovCisJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwlleHByX2xpc3RfZm9y
X2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIGRlZl9zeW0pCisJCWlmIChkZWZfc3ltLT52aXNpYmxl
ICE9IG5vKQorCQkJcmV0dXJuIGRlZl9zeW07CisKKwkvKiBmYWlsZWQgdG8gbG9jYXRlIGFueSBk
ZWZhdWx0cyAqLworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3lt
X2NhbGNfY2hvaWNlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpkZWZf
c3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgZmxh
Z3M7CisKKwkvKiBmaXJzdCBjYWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGll
cyAqLworCWZsYWdzID0gc3ltLT5mbGFnczsKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChz
eW0pOworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkgewor
CQlzeW1fY2FsY192aXNpYmlsaXR5KGRlZl9zeW0pOworCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAh
PSBubykKKwkJCWZsYWdzICY9IGRlZl9zeW0tPmZsYWdzOworCX0KKworCXN5bS0+ZmxhZ3MgJj0g
ZmxhZ3MgfCB+U1lNQk9MX0RFRl9VU0VSOworCisJLyogaXMgdGhlIHVzZXIgY2hvaWNlIHZpc2li
bGU/ICovCisJZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKKwlpZiAoZGVmX3N5
bSAmJiBkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQlyZXR1cm4gZGVmX3N5bTsKKworCWRlZl9z
eW0gPSBzeW1fY2hvaWNlX2RlZmF1bHQoc3ltKTsKKworCWlmIChkZWZfc3ltID09IE5VTEwpCisJ
CS8qIG5vIGNob2ljZT8gcmVzZXQgdHJpc3RhdGUgdmFsdWUgKi8KKwkJc3ltLT5jdXJyLnRyaSA9
IG5vOworCisJcmV0dXJuIGRlZl9zeW07Cit9CisKK3N0YXRpYyB2b2lkIHN5bV93YXJuX3VubWV0
X2RlcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IGdzdHIgZ3MgPSBzdHJfbmV3KCk7
CisKKwlzdHJfcHJpbnRmKCZncywKKwkJICAgIlxuV0FSTklORzogdW5tZXQgZGlyZWN0IGRlcGVu
ZGVuY2llcyBkZXRlY3RlZCBmb3IgJXNcbiIsCisJCSAgIHN5bS0+bmFtZSk7CisJc3RyX3ByaW50
ZigmZ3MsCisJCSAgICIgIERlcGVuZHMgb24gWyVjXTogIiwKKwkJICAgc3ltLT5kaXJfZGVwLnRy
aSA9PSBtb2QgPyAnbScgOiAnbicpOworCWV4cHJfZ3N0cl9wcmludChzeW0tPmRpcl9kZXAuZXhw
ciwgJmdzKTsKKwlzdHJfcHJpbnRmKCZncywgIlxuIik7CisKKwlleHByX2dzdHJfcHJpbnRfcmV2
ZGVwKHN5bS0+cmV2X2RlcC5leHByLCAmZ3MsIHllcywKKwkJCSAgICAgICAiICBTZWxlY3RlZCBi
eSBbeV06XG4iKTsKKwlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCAm
Z3MsIG1vZCwKKwkJCSAgICAgICAiICBTZWxlY3RlZCBieSBbbV06XG4iKTsKKworCWZwdXRzKHN0
cl9nZXQoJmdzKSwgc3RkZXJyKTsKK30KKwordm9pZCBzeW1fY2FsY192YWx1ZShzdHJ1Y3Qgc3lt
Ym9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbF92YWx1ZSBuZXd2YWwsIG9sZHZhbDsKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisKKwlpZiAoIXN5bSkKKwkJcmV0
dXJuOworCisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpCisJCXJldHVybjsKKworCWlm
IChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYKKwkgICAgc3ltLT5mbGFncyAmIFNZTUJPTF9O
RUVEX1NFVF9DSE9JQ0VfVkFMVUVTKSB7CisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORUVEX1NF
VF9DSE9JQ0VfVkFMVUVTOworCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCQlz
eW1fY2FsY192YWx1ZShwcm9wX2dldF9zeW1ib2wocHJvcCkpOworCX0KKworCXN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX1ZBTElEOworCisJb2xkdmFsID0gc3ltLT5jdXJyOworCisJc3dpdGNoIChzeW0t
PnR5cGUpIHsKKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NUUklORzoKKwkJ
bmV3dmFsID0gc3ltYm9sX2VtcHR5LmN1cnI7CisJCWJyZWFrOworCWNhc2UgU19CT09MRUFOOgor
CWNhc2UgU19UUklTVEFURToKKwkJbmV3dmFsID0gc3ltYm9sX25vLmN1cnI7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCXN5bS0+Y3Vyci52YWwgPSBzeW0tPm5hbWU7CisJCXN5bS0+Y3Vyci50cmkg
PSBubzsKKwkJcmV0dXJuOworCX0KKwlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisKKwlz
eW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisKKwlpZiAoc3ltLT52aXNpYmxlICE9IG5vKQorCQlz
eW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKworCS8qIHNldCBkZWZhdWx0IGlmIHJlY3Vyc2l2
ZWx5IGNhbGxlZCAqLworCXN5bS0+Y3VyciA9IG5ld3ZhbDsKKworCXN3aXRjaCAoc3ltX2dldF90
eXBlKHN5bSkpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCWlmIChz
eW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykgeworCQkJcHJv
cCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKKwkJCW5ld3ZhbC50cmkgPSAocHJvcF9nZXRf
c3ltYm9sKHByb3ApLT5jdXJyLnZhbCA9PSBzeW0pID8geWVzIDogbm87CisJCX0gZWxzZSB7CisJ
CQlpZiAoc3ltLT52aXNpYmxlICE9IG5vKSB7CisJCQkJLyogaWYgdGhlIHN5bWJvbCBpcyB2aXNp
YmxlIHVzZSB0aGUgdXNlciB2YWx1ZQorCQkJCSAqIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRy
eSB0aGUgZGVmYXVsdCB2YWx1ZQorCQkJCSAqLworCQkJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkp
IHsKKwkJCQkJbmV3dmFsLnRyaSA9IEVYUFJfQU5EKHN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSwK
KwkJCQkJCQkgICAgICBzeW0tPnZpc2libGUpOworCQkJCQlnb3RvIGNhbGNfbmV3dmFsOworCQkJ
CX0KKwkJCX0KKwkJCWlmIChzeW0tPnJldl9kZXAudHJpICE9IG5vKQorCQkJCXN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX1dSSVRFOworCQkJaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsKKwkJCQlwcm9w
ID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKKwkJCQlpZiAocHJvcCkgeworCQkJCQluZXd2
YWwudHJpID0gRVhQUl9BTkQoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLAorCQkJCQkJCSAg
ICAgIHByb3AtPnZpc2libGUudHJpKTsKKwkJCQkJaWYgKG5ld3ZhbC50cmkgIT0gbm8pCisJCQkJ
CQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCQl9CisJCQkJaWYgKHN5bS0+aW1wbGll
ZC50cmkgIT0gbm8pIHsKKwkJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7CisJCQkJCW5l
d3ZhbC50cmkgPSBFWFBSX09SKG5ld3ZhbC50cmksIHN5bS0+aW1wbGllZC50cmkpOworCQkJCX0K
KwkJCX0KKwkJY2FsY19uZXd2YWw6CisJCQlpZiAoc3ltLT5kaXJfZGVwLnRyaSA8IHN5bS0+cmV2
X2RlcC50cmkpCisJCQkJc3ltX3dhcm5fdW5tZXRfZGVwKHN5bSk7CisJCQluZXd2YWwudHJpID0g
RVhQUl9PUihuZXd2YWwudHJpLCBzeW0tPnJldl9kZXAudHJpKTsKKwkJfQorCQlpZiAobmV3dmFs
LnRyaSA9PSBtb2QgJiYKKwkJICAgIChzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4gfHwg
c3ltLT5pbXBsaWVkLnRyaSA9PSB5ZXMpKQorCQkJbmV3dmFsLnRyaSA9IHllczsKKwkJYnJlYWs7
CisJY2FzZSBTX1NUUklORzoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19JTlQ6CisJCWlmIChzeW0t
PnZpc2libGUgIT0gbm8gJiYgc3ltX2hhc192YWx1ZShzeW0pKSB7CisJCQluZXd2YWwudmFsID0g
c3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOworCQkJYnJlYWs7CisJCX0KKwkJcHJvcCA9IHN5bV9n
ZXRfZGVmYXVsdF9wcm9wKHN5bSk7CisJCWlmIChwcm9wKSB7CisJCQlzdHJ1Y3Qgc3ltYm9sICpk
cyA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKKwkJCWlmIChkcykgeworCQkJCXN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX1dSSVRFOworCQkJCXN5bV9jYWxjX3ZhbHVlKGRzKTsKKwkJCQluZXd2YWwudmFs
ID0gZHMtPmN1cnIudmFsOworCQkJfQorCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCTsKKwl9
CisKKwlzeW0tPmN1cnIgPSBuZXd2YWw7CisJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBuZXd2
YWwudHJpID09IHllcykKKwkJc3ltLT5jdXJyLnZhbCA9IHN5bV9jYWxjX2Nob2ljZShzeW0pOwor
CXN5bV92YWxpZGF0ZV9yYW5nZShzeW0pOworCisJaWYgKG1lbWNtcCgmb2xkdmFsLCAmc3ltLT5j
dXJyLCBzaXplb2Yob2xkdmFsKSkpIHsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJCWlmICht
b2R1bGVzX3N5bSA9PSBzeW0pIHsKKwkJCXN5bV9zZXRfYWxsX2NoYW5nZWQoKTsKKwkJCW1vZHVs
ZXNfdmFsID0gbW9kdWxlc19zeW0tPmN1cnIudHJpOworCQl9CisJfQorCisJaWYgKHN5bV9pc19j
aG9pY2Uoc3ltKSkgeworCQlzdHJ1Y3Qgc3ltYm9sICpjaG9pY2Vfc3ltOworCisJCXByb3AgPSBz
eW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+
ZXhwciwgZSwgY2hvaWNlX3N5bSkgeworCQkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRF
KSAmJgorCQkJICAgIGNob2ljZV9zeW0tPnZpc2libGUgIT0gbm8pCisJCQkJY2hvaWNlX3N5bS0+
ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOworCQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hBTkdF
RCkKKwkJCQlzeW1fc2V0X2NoYW5nZWQoY2hvaWNlX3N5bSk7CisJCX0KKwl9CisKKwlpZiAoc3lt
LT5mbGFncyAmIFNZTUJPTF9OT19XUklURSkKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRF
OworCisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUykKKwkJ
c2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN5bSk7Cit9CisKK3ZvaWQgc3ltX2NsZWFyX2FsbF92YWxp
ZCh2b2lkKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgaTsKKworCWZvcl9hbGxfc3lt
Ym9scyhpLCBzeW0pCisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsKKwlzeW1fYWRkX2No
YW5nZV9jb3VudCgxKTsKKwlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7Cit9CisKK2Jvb2wg
c3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIHRyaXN0YXRlIHZh
bCkKK3sKKwlpbnQgdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCisJaWYgKHN5bS0+dmlzaWJs
ZSA9PSBubykKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgIT0gU19CT09MRUFOICYmIHR5
cGUgIT0gU19UUklTVEFURSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKHR5cGUgPT0gU19CT09M
RUFOICYmIHZhbCA9PSBtb2QpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltLT52aXNpYmxlIDw9
IHN5bS0+cmV2X2RlcC50cmkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoc3ltLT5pbXBsaWVkLnRy
aSA9PSB5ZXMgJiYgdmFsID09IG1vZCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzeW1faXNfY2hv
aWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykKKwkJcmV0dXJuIHZhbCA9PSB5
ZXM7CisJcmV0dXJuIHZhbCA+PSBzeW0tPnJldl9kZXAudHJpICYmIHZhbCA8PSBzeW0tPnZpc2li
bGU7Cit9CisKK2Jvb2wgc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0s
IHRyaXN0YXRlIHZhbCkKK3sKKwl0cmlzdGF0ZSBvbGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSk7CisKKwlpZiAob2xkdmFsICE9IHZhbCAmJiAhc3ltX3RyaXN0YXRlX3dpdGhpbl9y
YW5nZShzeW0sIHZhbCkpCisJCXJldHVybiBmYWxzZTsKKworCWlmICghKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfREVGX1VTRVIpKSB7CisJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQlz
eW1fc2V0X2NoYW5nZWQoc3ltKTsKKwl9CisJLyoKKwkgKiBzZXR0aW5nIGEgY2hvaWNlIHZhbHVl
IGFsc28gcmVzZXRzIHRoZSBuZXcgZmxhZyBvZiB0aGUgY2hvaWNlCisJICogc3ltYm9sIGFuZCBh
bGwgb3RoZXIgY2hvaWNlIHZhbHVlcy4KKwkgKi8KKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShz
eW0pICYmIHZhbCA9PSB5ZXMpIHsKKwkJc3RydWN0IHN5bWJvbCAqY3MgPSBwcm9wX2dldF9zeW1i
b2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKKwkJc3RydWN0IHByb3BlcnR5ICpwcm9wOwor
CQlzdHJ1Y3QgZXhwciAqZTsKKworCQljcy0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsKKwkJ
Y3MtPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3By
b3AoY3MpOworCQlmb3IgKGUgPSBwcm9wLT5leHByOyBlOyBlID0gZS0+bGVmdC5leHByKSB7CisJ
CQlpZiAoZS0+cmlnaHQuc3ltLT52aXNpYmxlICE9IG5vKQorCQkJCWUtPnJpZ2h0LnN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0RFRl9VU0VSOworCQl9CisJfQorCisJc3ltLT5kZWZbU19ERUZfVVNFUl0u
dHJpID0gdmFsOworCWlmIChvbGR2YWwgIT0gdmFsKQorCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7
CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordHJpc3RhdGUgc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7CisKKwlv
bGR2YWwgPSBuZXd2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJZG8geworCQlz
d2l0Y2ggKG5ld3ZhbCkgeworCQljYXNlIG5vOgorCQkJbmV3dmFsID0gbW9kOworCQkJYnJlYWs7
CisJCWNhc2UgbW9kOgorCQkJbmV3dmFsID0geWVzOworCQkJYnJlYWs7CisJCWNhc2UgeWVzOgor
CQkJbmV3dmFsID0gbm87CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92
YWx1ZShzeW0sIG5ld3ZhbCkpCisJCQlicmVhazsKKwl9IHdoaWxlIChvbGR2YWwgIT0gbmV3dmFs
KTsKKwlyZXR1cm4gbmV3dmFsOworfQorCitib29sIHN5bV9zdHJpbmdfdmFsaWQoc3RydWN0IHN5
bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCit7CisJc2lnbmVkIGNoYXIgY2g7CisKKwlzd2l0
Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19TVFJJTkc6CisJCXJldHVybiB0cnVlOworCWNhc2Ug
U19JTlQ6CisJCWNoID0gKnN0cisrOworCQlpZiAoY2ggPT0gJy0nKQorCQkJY2ggPSAqc3RyKys7
CisJCWlmICghaXNkaWdpdChjaCkpCisJCQlyZXR1cm4gZmFsc2U7CisJCWlmIChjaCA9PSAnMCcg
JiYgKnN0ciAhPSAwKQorCQkJcmV0dXJuIGZhbHNlOworCQl3aGlsZSAoKGNoID0gKnN0cisrKSkg
eworCQkJaWYgKCFpc2RpZ2l0KGNoKSkKKwkJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJcmV0dXJu
IHRydWU7CisJY2FzZSBTX0hFWDoKKwkJaWYgKHN0clswXSA9PSAnMCcgJiYgKHN0clsxXSA9PSAn
eCcgfHwgc3RyWzFdID09ICdYJykpCisJCQlzdHIgKz0gMjsKKwkJY2ggPSAqc3RyKys7CisJCWRv
IHsKKwkJCWlmICghaXN4ZGlnaXQoY2gpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfSB3aGlsZSAo
KGNoID0gKnN0cisrKSk7CisJCXJldHVybiB0cnVlOworCWNhc2UgU19CT09MRUFOOgorCWNhc2Ug
U19UUklTVEFURToKKwkJc3dpdGNoIChzdHJbMF0pIHsKKwkJY2FzZSAneSc6IGNhc2UgJ1knOgor
CQljYXNlICdtJzogY2FzZSAnTSc6CisJCWNhc2UgJ24nOiBjYXNlICdOJzoKKwkJCXJldHVybiB0
cnVlOworCQl9CisJCXJldHVybiBmYWxzZTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gZmFsc2U7CisJ
fQorfQorCitib29sIHN5bV9zdHJpbmdfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSwg
Y29uc3QgY2hhciAqc3RyKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlsb25nIGxvbmcg
dmFsOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfU1RSSU5HOgorCQlyZXR1cm4g
c3ltX3N0cmluZ192YWxpZChzeW0sIHN0cik7CisJY2FzZSBTX0lOVDoKKwkJaWYgKCFzeW1fc3Ry
aW5nX3ZhbGlkKHN5bSwgc3RyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcHJvcCA9IHN5bV9nZXRf
cmFuZ2VfcHJvcChzeW0pOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gdHJ1ZTsKKwkJdmFsID0g
c3RydG9sbChzdHIsIE5VTEwsIDEwKTsKKwkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0X3JhbmdlX3Zh
bChwcm9wLT5leHByLT5sZWZ0LnN5bSwgMTApICYmCisJCSAgICAgICB2YWwgPD0gc3ltX2dldF9y
YW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxMCk7CisJY2FzZSBTX0hFWDoKKwkJaWYg
KCFzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3RyKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJcHJvcCA9
IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOworCQlpZiAoIXByb3ApCisJCQlyZXR1cm4gdHJ1ZTsK
KwkJdmFsID0gc3RydG9sbChzdHIsIE5VTEwsIDE2KTsKKwkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0
X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgMTYpICYmCisJCSAgICAgICB2YWwgPD0g
c3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxNik7CisJY2FzZSBTX0JP
T0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlzd2l0Y2ggKHN0clswXSkgeworCQljYXNlICd5
JzogY2FzZSAnWSc6CisJCQlyZXR1cm4gc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHll
cyk7CisJCWNhc2UgJ20nOiBjYXNlICdNJzoKKwkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGlu
X3JhbmdlKHN5bSwgbW9kKTsKKwkJY2FzZSAnbic6IGNhc2UgJ04nOgorCQkJcmV0dXJuIHN5bV90
cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubyk7CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCWRl
ZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK2Jvb2wgc3ltX3NldF9zdHJpbmdfdmFs
dWUoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpCit7CisJY29uc3QgY2hh
ciAqb2xkdmFsOworCWNoYXIgKnZhbDsKKwlpbnQgc2l6ZTsKKworCXN3aXRjaCAoc3ltLT50eXBl
KSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQlzd2l0Y2ggKG5ld3Zh
bFswXSkgeworCQljYXNlICd5JzogY2FzZSAnWSc6CisJCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0
ZV92YWx1ZShzeW0sIHllcyk7CisJCWNhc2UgJ20nOiBjYXNlICdNJzoKKwkJCXJldHVybiBzeW1f
c2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsKKwkJY2FzZSAnbic6IGNhc2UgJ04nOgorCQkJ
cmV0dXJuIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7CisJCX0KKwkJcmV0dXJuIGZh
bHNlOworCWRlZmF1bHQ6CisJCTsKKwl9CisKKwlpZiAoIXN5bV9zdHJpbmdfd2l0aGluX3Jhbmdl
KHN5bSwgbmV3dmFsKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCEoc3ltLT5mbGFncyAmIFNZ
TUJPTF9ERUZfVVNFUikpIHsKKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCXN5
bV9zZXRfY2hhbmdlZChzeW0pOworCX0KKworCW9sZHZhbCA9IHN5bS0+ZGVmW1NfREVGX1VTRVJd
LnZhbDsKKwlzaXplID0gc3RybGVuKG5ld3ZhbCkgKyAxOworCWlmIChzeW0tPnR5cGUgPT0gU19I
RVggJiYgKG5ld3ZhbFswXSAhPSAnMCcgfHwgKG5ld3ZhbFsxXSAhPSAneCcgJiYgbmV3dmFsWzFd
ICE9ICdYJykpKSB7CisJCXNpemUgKz0gMjsKKwkJc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0g
dmFsID0geG1hbGxvYyhzaXplKTsKKwkJKnZhbCsrID0gJzAnOworCQkqdmFsKysgPSAneCc7CisJ
fSBlbHNlIGlmICghb2xkdmFsIHx8IHN0cmNtcChvbGR2YWwsIG5ld3ZhbCkpCisJCXN5bS0+ZGVm
W1NfREVGX1VTRVJdLnZhbCA9IHZhbCA9IHhtYWxsb2Moc2l6ZSk7CisJZWxzZQorCQlyZXR1cm4g
dHJ1ZTsKKworCXN0cmNweSh2YWwsIG5ld3ZhbCk7CisJZnJlZSgodm9pZCAqKW9sZHZhbCk7CisJ
c3ltX2NsZWFyX2FsbF92YWxpZCgpOworCisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBGaW5k
IHRoZSBkZWZhdWx0IHZhbHVlIGFzc29jaWF0ZWQgdG8gYSBzeW1ib2wuCisgKiBGb3IgdHJpc3Rh
dGUgc3ltYm9sIGhhbmRsZSB0aGUgbW9kdWxlcz1uIGNhc2UKKyAqIGluIHdoaWNoIGNhc2UgIm0i
IGJlY29tZXMgInkiLgorICogSWYgdGhlIHN5bWJvbCBkb2VzIG5vdCBoYXZlIGFueSBkZWZhdWx0
IHRoZW4gZmFsbGJhY2sKKyAqIHRvIHRoZSBmaXhlZCBkZWZhdWx0IHZhbHVlcy4KKyAqLworY29u
c3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJ
c3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKmRzOworCWNvbnN0IGNoYXIg
KnN0cjsKKwl0cmlzdGF0ZSB2YWw7CisKKwlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7CisJc3lt
X2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCXZhbCA9IHN5bWJvbF9uby5jdXJyLnRyaTsKKwlz
dHIgPSBzeW1ib2xfZW1wdHkuY3Vyci52YWw7CisKKwkvKiBJZiBzeW1ib2wgaGFzIGEgZGVmYXVs
dCB2YWx1ZSBsb29rIGl0IHVwICovCisJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7
CisJaWYgKHByb3AgIT0gTlVMTCkgeworCQlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCQljYXNlIFNf
Qk9PTEVBTjoKKwkJY2FzZSBTX1RSSVNUQVRFOgorCQkJLyogVGhlIHZpc2liaWxpdHkgbWF5IGxp
bWl0IHRoZSB2YWx1ZSBmcm9tIHllcyA9PiBtb2QgKi8KKwkJCXZhbCA9IEVYUFJfQU5EKGV4cHJf
Y2FsY192YWx1ZShwcm9wLT5leHByKSwgcHJvcC0+dmlzaWJsZS50cmkpOworCQkJYnJlYWs7CisJ
CWRlZmF1bHQ6CisJCQkvKgorCQkJICogVGhlIGZvbGxvd2luZyBmYWlscyB0byBoYW5kbGUgdGhl
IHNpdHVhdGlvbgorCQkJICogd2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGZ1cnRoZXIgbGltaXRl
ZCBieQorCQkJICogdGhlIHZhbGlkIHJhbmdlLgorCQkJICovCisJCQlkcyA9IHByb3BfZ2V0X3N5
bWJvbChwcm9wKTsKKwkJCWlmIChkcyAhPSBOVUxMKSB7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMp
OworCQkJCXN0ciA9IChjb25zdCBjaGFyICopZHMtPmN1cnIudmFsOworCQkJfQorCQl9CisJfQor
CisJLyogSGFuZGxlIHNlbGVjdCBzdGF0ZW1lbnRzICovCisJdmFsID0gRVhQUl9PUih2YWwsIHN5
bS0+cmV2X2RlcC50cmkpOworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgbW9kdWxlcyBh
cmUgbm90IGVuYWJsZWQgKi8KKwlpZiAodmFsID09IG1vZCkKKwkJaWYgKCFzeW1faXNfY2hvaWNl
X3ZhbHVlKHN5bSkgJiYgbW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKQorCQkJdmFsID0geWVz
OworCisJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgdHlwZSBpcyBib29sICovCisJaWYgKHN5
bS0+dHlwZSA9PSBTX0JPT0xFQU4gJiYgdmFsID09IG1vZCkKKwkJdmFsID0geWVzOworCisJLyog
YWRqdXN0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoaXMgc3ltYm9sIGlzIGltcGxpZWQgYnkgYW5v
dGhlciAqLworCWlmICh2YWwgPCBzeW0tPmltcGxpZWQudHJpKQorCQl2YWwgPSBzeW0tPmltcGxp
ZWQudHJpOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNl
IFNfVFJJU1RBVEU6CisJCXN3aXRjaCAodmFsKSB7CisJCWNhc2Ugbm86IHJldHVybiAibiI7CisJ
CWNhc2UgbW9kOiByZXR1cm4gIm0iOworCQljYXNlIHllczogcmV0dXJuICJ5IjsKKwkJfQorCWNh
c2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwkJcmV0dXJuIHN0cjsKKwljYXNlIFNfU1RSSU5HOgor
CQlyZXR1cm4gc3RyOworCWNhc2UgU19VTktOT1dOOgorCQlicmVhazsKKwl9CisJcmV0dXJuICIi
OworfQorCitjb25zdCBjaGFyICpzeW1fZ2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpz
eW0pCit7CisJdHJpc3RhdGUgdmFsOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNf
Qk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFs
dWUoc3ltKTsKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAibiI7CisJ
CWNhc2UgbW9kOgorCQkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCQkJcmV0dXJuICht
b2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pID8gIm4iIDogIm0iOworCQljYXNlIHllczoKKwkJ
CXJldHVybiAieSI7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4g
KGNvbnN0IGNoYXIgKilzeW0tPmN1cnIudmFsOworfQorCitib29sIHN5bV9pc19jaGFuZ2FibGUo
c3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBzeW0tPnZpc2libGUgPiBzeW0tPnJldl9k
ZXAudHJpOworfQorCitzdGF0aWMgdW5zaWduZWQgc3RyaGFzaChjb25zdCBjaGFyICpzKQorewor
CS8qIGZudjMyIGhhc2ggKi8KKwl1bnNpZ25lZCBoYXNoID0gMjE2NjEzNjI2MVU7CisJZm9yICg7
ICpzOyBzKyspCisJCWhhc2ggPSAoaGFzaCBeICpzKSAqIDB4MDEwMDAxOTM7CisJcmV0dXJuIGhh
c2g7Cit9CisKK3N0cnVjdCBzeW1ib2wgKnN5bV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgaW50
IGZsYWdzKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsKKwljaGFyICpuZXdfbmFtZTsKKwlp
bnQgaGFzaDsKKworCWlmIChuYW1lKSB7CisJCWlmIChuYW1lWzBdICYmICFuYW1lWzFdKSB7CisJ
CQlzd2l0Y2ggKG5hbWVbMF0pIHsKKwkJCWNhc2UgJ3knOiByZXR1cm4gJnN5bWJvbF95ZXM7CisJ
CQljYXNlICdtJzogcmV0dXJuICZzeW1ib2xfbW9kOworCQkJY2FzZSAnbic6IHJldHVybiAmc3lt
Ym9sX25vOworCQkJfQorCQl9CisJCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hT
SVpFOworCisJCWZvciAoc3ltYm9sID0gc3ltYm9sX2hhc2hbaGFzaF07IHN5bWJvbDsgc3ltYm9s
ID0gc3ltYm9sLT5uZXh0KSB7CisJCQlpZiAoc3ltYm9sLT5uYW1lICYmCisJCQkgICAgIXN0cmNt
cChzeW1ib2wtPm5hbWUsIG5hbWUpICYmCisJCQkgICAgKGZsYWdzID8gc3ltYm9sLT5mbGFncyAm
IGZsYWdzCisJCQkJICAgOiAhKHN5bWJvbC0+ZmxhZ3MgJiAoU1lNQk9MX0NPTlNUfFNZTUJPTF9D
SE9JQ0UpKSkpCisJCQkJcmV0dXJuIHN5bWJvbDsKKwkJfQorCQluZXdfbmFtZSA9IHhzdHJkdXAo
bmFtZSk7CisJfSBlbHNlIHsKKwkJbmV3X25hbWUgPSBOVUxMOworCQloYXNoID0gMDsKKwl9CisK
KwlzeW1ib2wgPSB4bWFsbG9jKHNpemVvZigqc3ltYm9sKSk7CisJbWVtc2V0KHN5bWJvbCwgMCwg
c2l6ZW9mKCpzeW1ib2wpKTsKKwlzeW1ib2wtPm5hbWUgPSBuZXdfbmFtZTsKKwlzeW1ib2wtPnR5
cGUgPSBTX1VOS05PV047CisJc3ltYm9sLT5mbGFncyB8PSBmbGFnczsKKworCXN5bWJvbC0+bmV4
dCA9IHN5bWJvbF9oYXNoW2hhc2hdOworCXN5bWJvbF9oYXNoW2hhc2hdID0gc3ltYm9sOworCisJ
cmV0dXJuIHN5bWJvbDsKK30KKworc3RydWN0IHN5bWJvbCAqc3ltX2ZpbmQoY29uc3QgY2hhciAq
bmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2wgPSBOVUxMOworCWludCBoYXNoID0gMDsK
KworCWlmICghbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobmFtZVswXSAmJiAhbmFtZVsx
XSkgeworCQlzd2l0Y2ggKG5hbWVbMF0pIHsKKwkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3ll
czsKKwkJY2FzZSAnbSc6IHJldHVybiAmc3ltYm9sX21vZDsKKwkJY2FzZSAnbic6IHJldHVybiAm
c3ltYm9sX25vOworCQl9CisJfQorCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hT
SVpFOworCisJZm9yIChzeW1ib2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3ltYm9sOyBzeW1ib2wg
PSBzeW1ib2wtPm5leHQpIHsKKwkJaWYgKHN5bWJvbC0+bmFtZSAmJgorCQkgICAgIXN0cmNtcChz
eW1ib2wtPm5hbWUsIG5hbWUpICYmCisJCSAgICAhKHN5bWJvbC0+ZmxhZ3MgJiBTWU1CT0xfQ09O
U1QpKQorCQkJCWJyZWFrOworCX0KKworCXJldHVybiBzeW1ib2w7Cit9CisKK2NvbnN0IGNoYXIg
KnN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIgKmluKQoreworCWNvbnN0IGNoYXIg
KnA7CisJc2l6ZV90IHJlc2xlbjsKKwljaGFyICpyZXM7CisJc2l6ZV90IGw7CisKKwlyZXNsZW4g
PSBzdHJsZW4oaW4pICsgc3RybGVuKCJcIlwiIikgKyAxOworCisJcCA9IGluOworCWZvciAoOzsp
IHsKKwkJbCA9IHN0cmNzcG4ocCwgIlwiXFwiKTsKKwkJcCArPSBsOworCisJCWlmIChwWzBdID09
ICdcMCcpCisJCQlicmVhazsKKworCQlyZXNsZW4rKzsKKwkJcCsrOworCX0KKworCXJlcyA9IHht
YWxsb2MocmVzbGVuKTsKKwlyZXNbMF0gPSAnXDAnOworCisJc3RyY2F0KHJlcywgIlwiIik7CisK
KwlwID0gaW47CisJZm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOworCQlzdHJu
Y2F0KHJlcywgcCwgbCk7CisJCXAgKz0gbDsKKworCQlpZiAocFswXSA9PSAnXDAnKQorCQkJYnJl
YWs7CisKKwkJc3RyY2F0KHJlcywgIlxcIik7CisJCXN0cm5jYXQocmVzLCBwKyssIDEpOworCX0K
KworCXN0cmNhdChyZXMsICJcIiIpOworCXJldHVybiByZXM7Cit9CisKK3N0cnVjdCBzeW1fbWF0
Y2ggeworCXN0cnVjdCBzeW1ib2wJKnN5bTsKKwlvZmZfdAkJc28sIGVvOworfTsKKworLyogQ29t
cGFyZSBtYXRjaGVkIHN5bWJvbHMgYXMgdGh1czoKKyAqIC0gZmlyc3QsIHN5bWJvbHMgdGhhdCBt
YXRjaCBleGFjdGx5CisgKiAtIHRoZW4sIGFscGhhYmV0aWNhbCBzb3J0CisgKi8KK3N0YXRpYyBp
bnQgc3ltX3JlbF9jb21wKGNvbnN0IHZvaWQgKnN5bTEsIGNvbnN0IHZvaWQgKnN5bTIpCit7CisJ
Y29uc3Qgc3RydWN0IHN5bV9tYXRjaCAqczEgPSBzeW0xOworCWNvbnN0IHN0cnVjdCBzeW1fbWF0
Y2ggKnMyID0gc3ltMjsKKwlpbnQgZXhhY3QxLCBleGFjdDI7CisKKwkvKiBFeGFjdCBtYXRjaDoK
KwkgKiAtIGlmIG1hdGNoZWQgbGVuZ3RoIG9uIHN5bWJvbCBzMSBpcyB0aGUgbGVuZ3RoIG9mIHRo
YXQgc3ltYm9sLAorCSAqICAgdGhlbiB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdDsKKwkg
KiAtIGlmIG1hdGNoZWQgbGVuZ3RoIG9uIHN5bWJvbCBzMiBpcyB0aGUgbGVuZ3RoIG9mIHRoYXQg
c3ltYm9sLAorCSAqICAgdGhlbiB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdC4KKwkgKiBO
b3RlOiBzaW5jZSB0aGUgc2VhcmNoIGNhbiBiZSBhIHJlZ2V4cCwgYm90aCBzeW1ib2xzIG1heSBt
YXRjaAorCSAqIGV4YWN0bHk7IGlmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGNhbid0IGRlY2lkZSB3
aGljaCBjb21lcyBmaXJzdCwKKwkgKiBhbmQgd2UgZmFsbGJhY2sgdG8gc29ydGluZyBhbHBoYWJl
dGljYWxseS4KKwkgKi8KKwlleGFjdDEgPSAoczEtPmVvIC0gczEtPnNvKSA9PSBzdHJsZW4oczEt
PnN5bS0+bmFtZSk7CisJZXhhY3QyID0gKHMyLT5lbyAtIHMyLT5zbykgPT0gc3RybGVuKHMyLT5z
eW0tPm5hbWUpOworCWlmIChleGFjdDEgJiYgIWV4YWN0MikKKwkJcmV0dXJuIC0xOworCWlmICgh
ZXhhY3QxICYmIGV4YWN0MikKKwkJcmV0dXJuIDE7CisKKwkvKiBBcyBhIGZhbGxiYWNrLCBzb3J0
IHN5bWJvbHMgYWxwaGFiZXRpY2FsbHkgKi8KKwlyZXR1cm4gc3RyY21wKHMxLT5zeW0tPm5hbWUs
IHMyLT5zeW0tPm5hbWUpOworfQorCitzdHJ1Y3Qgc3ltYm9sICoqc3ltX3JlX3NlYXJjaChjb25z
dCBjaGFyICpwYXR0ZXJuKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKipzeW1fYXJyID0gTlVM
TDsKKwlzdHJ1Y3Qgc3ltX21hdGNoICpzeW1fbWF0Y2hfYXJyID0gTlVMTDsKKwlpbnQgaSwgY250
LCBzaXplOworCXJlZ2V4X3QgcmU7CisJcmVnbWF0Y2hfdCBtYXRjaFsxXTsKKworCWNudCA9IHNp
emUgPSAwOworCS8qIFNraXAgaWYgZW1wdHkgKi8KKwlpZiAoc3RybGVuKHBhdHRlcm4pID09IDAp
CisJCXJldHVybiBOVUxMOworCWlmIChyZWdjb21wKCZyZSwgcGF0dGVybiwgUkVHX0VYVEVOREVE
fFJFR19JQ0FTRSkpCisJCXJldHVybiBOVUxMOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkg
eworCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCB8fCAhc3ltLT5uYW1lKQorCQkJY29u
dGludWU7CisJCWlmIChyZWdleGVjKCZyZSwgc3ltLT5uYW1lLCAxLCBtYXRjaCwgMCkpCisJCQlj
b250aW51ZTsKKwkJaWYgKGNudCA+PSBzaXplKSB7CisJCQl2b2lkICp0bXA7CisJCQlzaXplICs9
IDE2OworCQkJdG1wID0gcmVhbGxvYyhzeW1fbWF0Y2hfYXJyLCBzaXplICogc2l6ZW9mKHN0cnVj
dCBzeW1fbWF0Y2gpKTsKKwkJCWlmICghdG1wKQorCQkJCWdvdG8gc3ltX3JlX3NlYXJjaF9mcmVl
OworCQkJc3ltX21hdGNoX2FyciA9IHRtcDsKKwkJfQorCQlzeW1fY2FsY192YWx1ZShzeW0pOwor
CQkvKiBBcyByZWdleGVjIHJldHVybmVkIDAsIHdlIGtub3cgd2UgaGF2ZSBhIG1hdGNoLCBzbwor
CQkgKiB3ZSBjYW4gdXNlIG1hdGNoWzBdLnJtX1tzZV1vIHdpdGhvdXQgZnVydGhlciBjaGVja3MK
KwkJICovCisJCXN5bV9tYXRjaF9hcnJbY250XS5zbyA9IG1hdGNoWzBdLnJtX3NvOworCQlzeW1f
bWF0Y2hfYXJyW2NudF0uZW8gPSBtYXRjaFswXS5ybV9lbzsKKwkJc3ltX21hdGNoX2FycltjbnQr
K10uc3ltID0gc3ltOworCX0KKwlpZiAoc3ltX21hdGNoX2FycikgeworCQlxc29ydChzeW1fbWF0
Y2hfYXJyLCBjbnQsIHNpemVvZihzdHJ1Y3Qgc3ltX21hdGNoKSwgc3ltX3JlbF9jb21wKTsKKwkJ
c3ltX2FyciA9IG1hbGxvYygoY250KzEpICogc2l6ZW9mKHN0cnVjdCBzeW1ib2wgKikpOworCQlp
ZiAoIXN5bV9hcnIpCisJCQlnb3RvIHN5bV9yZV9zZWFyY2hfZnJlZTsKKwkJZm9yIChpID0gMDsg
aSA8IGNudDsgaSsrKQorCQkJc3ltX2FycltpXSA9IHN5bV9tYXRjaF9hcnJbaV0uc3ltOworCQlz
eW1fYXJyW2NudF0gPSBOVUxMOworCX0KK3N5bV9yZV9zZWFyY2hfZnJlZToKKwkvKiBzeW1fbWF0
Y2hfYXJyIGNhbiBiZSBOVUxMIGlmIG5vIG1hdGNoLCBidXQgZnJlZShOVUxMKSBpcyBPSyAqLwor
CWZyZWUoc3ltX21hdGNoX2Fycik7CisJcmVnZnJlZSgmcmUpOworCisJcmV0dXJuIHN5bV9hcnI7
Cit9CisKKy8qCisgKiBXaGVuIHdlIGNoZWNrIGZvciByZWN1cnNpdmUgZGVwZW5kZW5jaWVzIHdl
IHVzZSBhIHN0YWNrIHRvIHNhdmUKKyAqIGN1cnJlbnQgc3RhdGUgc28gd2UgY2FuIHByaW50IG91
dCByZWxldmFudCBpbmZvIHRvIHVzZXIuCisgKiBUaGUgZW50cmllcyBhcmUgbG9jYXRlZCBvbiB0
aGUgY2FsbCBzdGFjayBzbyBubyBuZWVkIHRvIGZyZWUgbWVtb3J5LgorICogTm90ZSBpbnNlcnQo
KSByZW1vdmUoKSBtdXN0IGFsd2F5cyBtYXRjaCB0byBwcm9wZXJseSBjbGVhciB0aGUgc3RhY2su
CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVwX3N0YWNrIHsKKwlzdHJ1Y3QgZGVwX3N0YWNrICpwcmV2
LCAqbmV4dDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOwor
CXN0cnVjdCBleHByICoqZXhwcjsKK30gKmNoZWNrX3RvcDsKKworc3RhdGljIHZvaWQgZGVwX3N0
YWNrX2luc2VydChzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAqc3ltKQor
eworCW1lbXNldChzdGFjaywgMCwgc2l6ZW9mKCpzdGFjaykpOworCWlmIChjaGVja190b3ApCisJ
CWNoZWNrX3RvcC0+bmV4dCA9IHN0YWNrOworCXN0YWNrLT5wcmV2ID0gY2hlY2tfdG9wOworCXN0
YWNrLT5zeW0gPSBzeW07CisJY2hlY2tfdG9wID0gc3RhY2s7Cit9CisKK3N0YXRpYyB2b2lkIGRl
cF9zdGFja19yZW1vdmUodm9pZCkKK3sKKwljaGVja190b3AgPSBjaGVja190b3AtPnByZXY7CisJ
aWYgKGNoZWNrX3RvcCkKKwkJY2hlY2tfdG9wLT5uZXh0ID0gTlVMTDsKK30KKworLyoKKyAqIENh
bGxlZCB3aGVuIHdlIGhhdmUgZGV0ZWN0ZWQgYSByZWN1cnNpdmUgZGVwZW5kZW5jeS4KKyAqIGNo
ZWNrX3RvcCBwb2ludCB0byB0aGUgdG9wIG9mIHRoZSBzdGFjdCBzbyB3ZSB1c2UKKyAqIHRoZSAt
PnByZXYgcG9pbnRlciB0byBsb2NhdGUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCisgKi8KK3N0
YXRpYyB2b2lkIHN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3RydWN0IHN5bWJvbCAqbGFzdF9z
eW0pCit7CisJc3RydWN0IGRlcF9zdGFjayAqc3RhY2s7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAq
bmV4dF9zeW07CisJc3RydWN0IG1lbnUgKm1lbnUgPSBOVUxMOworCXN0cnVjdCBwcm9wZXJ0eSAq
cHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIGN2X3N0YWNrOworCisJaWYgKHN5bV9pc19jaG9pY2Vf
dmFsdWUobGFzdF9zeW0pKSB7CisJCWRlcF9zdGFja19pbnNlcnQoJmN2X3N0YWNrLCBsYXN0X3N5
bSk7CisJCWxhc3Rfc3ltID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3AobGFz
dF9zeW0pKTsKKwl9CisKKwlmb3IgKHN0YWNrID0gY2hlY2tfdG9wOyBzdGFjayAhPSBOVUxMOyBz
dGFjayA9IHN0YWNrLT5wcmV2KQorCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKKwkJCWJy
ZWFrOworCWlmICghc3RhY2spIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHJlY3Vy
c2l2ZSBkZXBlbmRlbmN5IGVycm9yXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZvciAoOyBzdGFj
azsgc3RhY2sgPSBzdGFjay0+bmV4dCkgeworCQlzeW0gPSBzdGFjay0+c3ltOworCQluZXh0X3N5
bSA9IHN0YWNrLT5uZXh0ID8gc3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOworCQlwcm9wID0g
c3RhY2stPnByb3A7CisJCWlmIChwcm9wID09IE5VTEwpCisJCQlwcm9wID0gc3RhY2stPnN5bS0+
cHJvcDsKKworCQkvKiBmb3IgY2hvaWNlIHZhbHVlcyBmaW5kIHRoZSBtZW51IGVudHJ5ICh1c2Vk
IGJlbG93KSAqLworCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pIHx8IHN5bV9pc19jaG9pY2VfdmFs
dWUoc3ltKSkgeworCQkJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+
bmV4dCkgeworCQkJCW1lbnUgPSBwcm9wLT5tZW51OworCQkJCWlmIChwcm9wLT5tZW51KQorCQkJ
CQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKKwkJCWZw
cmludGYoc3RkZXJyLCAiJXM6JWQ6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVk
IVxuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8pOworCisJCWlmIChzeW1f
aXNfY2hvaWNlKHN5bSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRjaG9pY2UgJXMg
Y29udGFpbnMgc3ltYm9sICVzXG4iLAorCQkJCW1lbnUtPmZpbGUtPm5hbWUsIG1lbnUtPmxpbmVu
bywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3lt
LT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIGlmIChzeW1f
aXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1i
b2wgJXMgaXMgcGFydCBvZiBjaG9pY2UgJXNcbiIsCisJCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVu
dS0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJ
bmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2Ug
aWYgKHN0YWNrLT5leHByID09ICZzeW0tPmRpcl9kZXAuZXhwcikgeworCQkJZnByaW50ZihzdGRl
cnIsICIlczolZDpcdHN5bWJvbCAlcyBkZXBlbmRzIG9uICVzXG4iLAorCQkJCXByb3AtPmZpbGUt
Pm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2lj
ZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsK
KwkJfSBlbHNlIGlmIChzdGFjay0+ZXhwciA9PSAmc3ltLT5yZXZfZGVwLmV4cHIpIHsKKwkJCWZw
cmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgc2VsZWN0ZWQgYnkgJXNcbiIsCisJ
CQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+
bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6
ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN0YWNrLT5leHByID09ICZzeW0tPmltcGxpZWQu
ZXhwcikgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBpbXBsaWVk
IGJ5ICVzXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0t
Pm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4
dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKKwkJfSBlbHNlIGlmIChzdGFjay0+ZXhwcikgewor
CQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyAlcyB2YWx1ZSBjb250YWlucyAl
c1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCisJCQkJc3ltLT5uYW1l
ID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQlwcm9wX2dldF90eXBlX25hbWUocHJvcC0+
dHlwZSksCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIp
OworCQl9IGVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyAlcyBp
cyB2aXNpYmxlIGRlcGVuZGluZyBvbiAlc1xuIiwKKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9w
LT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQlw
cm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSksCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0
X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9CisJfQorCisJZnByaW50ZihzdGRlcnIsCisJ
CSJGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWct
bGFuZ3VhZ2UudHh0XG4iCisJCSJzdWJzZWN0aW9uIFwiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5k
ZW5jeSBsaW1pdGF0aW9uc1wiXG4iCisJCSJcbiIpOworCisJaWYgKGNoZWNrX3RvcCA9PSAmY3Zf
c3RhY2spCisJCWRlcF9zdGFja19yZW1vdmUoKTsKK30KKworc3RhdGljIHN0cnVjdCBzeW1ib2wg
KnN5bV9jaGVja19leHByX2RlcHMoc3RydWN0IGV4cHIgKmUpCit7CisJc3RydWN0IHN5bWJvbCAq
c3ltOworCisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwlj
YXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJc3ltID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5s
ZWZ0LmV4cHIpOworCQlpZiAoc3ltKQorCQkJcmV0dXJuIHN5bTsKKwkJcmV0dXJuIHN5bV9jaGVj
a19leHByX2RlcHMoZS0+cmlnaHQuZXhwcik7CisJY2FzZSBFX05PVDoKKwkJcmV0dXJuIHN5bV9j
aGVja19leHByX2RlcHMoZS0+bGVmdC5leHByKTsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dF
UToKKwljYXNlIEVfR1RIOgorCWNhc2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5F
UVVBTDoKKwkJc3ltID0gc3ltX2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOworCQlpZiAoc3ltKQor
CQkJcmV0dXJuIHN5bTsKKwkJcmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPnJpZ2h0LnN5bSk7CisJ
Y2FzZSBFX1NZTUJPTDoKKwkJcmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPmxlZnQuc3ltKTsKKwlk
ZWZhdWx0OgorCQlicmVhazsKKwl9CisJZnByaW50ZihzdGRlcnIsICJPb3BzISBIb3cgdG8gY2hl
Y2sgJWQ/XG4iLCBlLT50eXBlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworLyogcmV0dXJuIE5VTEwg
d2hlbiBkZXBlbmRlbmNpZXMgYXJlIE9LICovCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2No
ZWNrX3N5bV9kZXBzKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0y
OworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJ
ZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIHN5bSk7CisKKwlzdGFjay5leHByID0gJnN5bS0+ZGly
X2RlcC5leHByOworCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+ZGlyX2RlcC5leHBy
KTsKKwlpZiAoc3ltMikKKwkJZ290byBvdXQ7CisKKwlzdGFjay5leHByID0gJnN5bS0+cmV2X2Rl
cC5leHByOworCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+cmV2X2RlcC5leHByKTsK
KwlpZiAoc3ltMikKKwkJZ290byBvdXQ7CisKKwlzdGFjay5leHByID0gJnN5bS0+aW1wbGllZC5l
eHByOworCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+aW1wbGllZC5leHByKTsKKwlp
ZiAoc3ltMikKKwkJZ290byBvdXQ7CisKKwlzdGFjay5leHByID0gTlVMTDsKKworCWZvciAocHJv
cCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJaWYgKHByb3AtPnR5
cGUgPT0gUF9DSE9JQ0UgfHwgcHJvcC0+dHlwZSA9PSBQX1NFTEVDVCB8fAorCQkgICAgcHJvcC0+
dHlwZSA9PSBQX0lNUExZKQorCQkJY29udGludWU7CisJCXN0YWNrLnByb3AgPSBwcm9wOworCQlz
eW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhwcm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAoc3lt
MikKKwkJCWJyZWFrOworCQlpZiAocHJvcC0+dHlwZSAhPSBQX0RFRkFVTFQgfHwgc3ltX2lzX2No
b2ljZShzeW0pKQorCQkJY29udGludWU7CisJCXN0YWNrLmV4cHIgPSAmcHJvcC0+ZXhwcjsKKwkJ
c3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMocHJvcC0+ZXhwcik7CisJCWlmIChzeW0yKQorCQkJ
YnJlYWs7CisJCXN0YWNrLmV4cHIgPSBOVUxMOworCX0KKworb3V0OgorCWRlcF9zdGFja19yZW1v
dmUoKTsKKworCXJldHVybiBzeW0yOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2No
ZWNrX2Nob2ljZV9kZXBzKHN0cnVjdCBzeW1ib2wgKmNob2ljZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9s
ICpzeW0sICpzeW0yOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsK
KwlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIGNo
b2ljZSk7CisKKwlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjaG9pY2UpOworCWV4cHJfbGlz
dF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQorCQlzeW0tPmZsYWdzIHw9IChTWU1C
T0xfQ0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7CisKKwljaG9pY2UtPmZsYWdzIHw9IChTWU1CT0xf
Q0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7CisJc3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhjaG9p
Y2UpOworCWNob2ljZS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsKKwlpZiAoc3ltMikKKwkJZ290
byBvdXQ7CisKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgewor
CQlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKHN5bSk7CisJCWlmIChzeW0yKQorCQkJYnJlYWs7
CisJfQorb3V0OgorCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQor
CQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7CisKKwlpZiAoc3ltMiAmJiBzeW1faXNfY2hv
aWNlX3ZhbHVlKHN5bTIpICYmCisJICAgIHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9w
cm9wKHN5bTIpKSA9PSBjaG9pY2UpCisJCXN5bTIgPSBjaG9pY2U7CisKKwlkZXBfc3RhY2tfcmVt
b3ZlKCk7CisKKwlyZXR1cm4gc3ltMjsKK30KKworc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2Rl
cHMoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTI7CisJc3RydWN0
IHByb3BlcnR5ICpwcm9wOworCisJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0spIHsKKwkJ
c3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2ZShzeW0pOworCQlyZXR1cm4gc3ltOworCX0KKwlpZiAo
c3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDS0VEKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChzeW1f
aXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJc3RydWN0IGRlcF9zdGFjayBzdGFjazsKKworCQkv
KiBmb3IgY2hvaWNlIGdyb3VwcyBzdGFydCB0aGUgY2hlY2sgd2l0aCBtYWluIGNob2ljZSBzeW1i
b2wgKi8KKwkJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIHN5bSk7CisJCXByb3AgPSBzeW1fZ2V0
X2Nob2ljZV9wcm9wKHN5bSk7CisJCXN5bTIgPSBzeW1fY2hlY2tfZGVwcyhwcm9wX2dldF9zeW1i
b2wocHJvcCkpOworCQlkZXBfc3RhY2tfcmVtb3ZlKCk7CisJfSBlbHNlIGlmIChzeW1faXNfY2hv
aWNlKHN5bSkpIHsKKwkJc3ltMiA9IHN5bV9jaGVja19jaG9pY2VfZGVwcyhzeW0pOworCX0gZWxz
ZSB7CisJCXN5bS0+ZmxhZ3MgfD0gKFNZTUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsKKwkJ
c3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhzeW0pOworCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xf
Q0hFQ0s7CisJfQorCisJcmV0dXJuIHN5bTI7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqcHJvcF9h
bGxvYyhlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0
IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBwcm9wZXJ0eSAqKnByb3BwOworCisJcHJvcCA9IHht
YWxsb2Moc2l6ZW9mKCpwcm9wKSk7CisJbWVtc2V0KHByb3AsIDAsIHNpemVvZigqcHJvcCkpOwor
CXByb3AtPnR5cGUgPSB0eXBlOworCXByb3AtPnN5bSA9IHN5bTsKKwlwcm9wLT5maWxlID0gY3Vy
cmVudF9maWxlOworCXByb3AtPmxpbmVubyA9IHpjb25mX2xpbmVubygpOworCisJLyogYXBwZW5k
IHByb3BlcnR5IHRvIHRoZSBwcm9wIGxpc3Qgb2Ygc3ltYm9sICovCisJaWYgKHN5bSkgeworCQlm
b3IgKHByb3BwID0gJnN5bS0+cHJvcDsgKnByb3BwOyBwcm9wcCA9ICYoKnByb3BwKS0+bmV4dCkK
KwkJCTsKKwkJKnByb3BwID0gcHJvcDsKKwl9CisKKwlyZXR1cm4gcHJvcDsKK30KKworc3RydWN0
IHN5bWJvbCAqcHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKK3sKKwlpZiAo
cHJvcC0+ZXhwciAmJiAocHJvcC0+ZXhwci0+dHlwZSA9PSBFX1NZTUJPTCB8fAorCQkJICAgcHJv
cC0+ZXhwci0+dHlwZSA9PSBFX0xJU1QpKQorCQlyZXR1cm4gcHJvcC0+ZXhwci0+bGVmdC5zeW07
CisJcmV0dXJuIE5VTEw7Cit9CisKK2NvbnN0IGNoYXIgKnByb3BfZ2V0X3R5cGVfbmFtZShlbnVt
IHByb3BfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUF9QUk9NUFQ6CisJ
CXJldHVybiAicHJvbXB0IjsKKwljYXNlIFBfQ09NTUVOVDoKKwkJcmV0dXJuICJjb21tZW50IjsK
KwljYXNlIFBfTUVOVToKKwkJcmV0dXJuICJtZW51IjsKKwljYXNlIFBfREVGQVVMVDoKKwkJcmV0
dXJuICJkZWZhdWx0IjsKKwljYXNlIFBfQ0hPSUNFOgorCQlyZXR1cm4gImNob2ljZSI7CisJY2Fz
ZSBQX1NFTEVDVDoKKwkJcmV0dXJuICJzZWxlY3QiOworCWNhc2UgUF9JTVBMWToKKwkJcmV0dXJu
ICJpbXBseSI7CisJY2FzZSBQX1JBTkdFOgorCQlyZXR1cm4gInJhbmdlIjsKKwljYXNlIFBfU1lN
Qk9MOgorCQlyZXR1cm4gInN5bWJvbCI7CisJY2FzZSBQX1VOS05PV046CisJCWJyZWFrOworCX0K
KwlyZXR1cm4gInVua25vd24iOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0
b19zdWJtZW51L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIw
NzYxZQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19z
dWJtZW51L0tjb25maWcKQEAgLTAsMCArMSw1MiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMAorCitjb25maWcgQQorCWJvb2wgIkEiCisJZGVmYXVsdCB5CisKK2NvbmZpZyBB
MAorCWJvb2wgIkEwIgorCWRlcGVuZHMgb24gQQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMg
ZGVwZW5kcyBvbiBBLCBzbyBzaG91bGQgYmUgYSBzdWJtZW51IG9mIEEuCisKK2NvbmZpZyBBMF8w
CisJYm9vbCAiQTFfMCIKKwlkZXBlbmRzIG9uIEEwCisJaGVscAorCSAgU3VibWVudXMgYXJlIGNy
ZWF0ZWQgcmVjdXJzaXZlbHkuCisJICBUaGlzIHNob3VsZCBiZSBhIHN1Ym1lbnUgb2YgQTAuCisK
K2NvbmZpZyBBMQorCWJvb2wgIkExIgorCWRlcGVuZHMgb24gQQorCWRlZmF1bHQgeQorCWhlbHAK
KwkgIFRoaXMgc2hvdWxkIGxpbmUgdXAgd2l0aCBBMC4KKworY2hvaWNlCisJcHJvbXB0ICJjaG9p
Y2UiCisJZGVwZW5kcyBvbiBBMQorCWhlbHAKKwkgIENob2ljZSBzaG91bGQgYmVjb21lIGEgc3Vi
bWVudSBhcyB3ZWxsLgorCitjb25maWcgQTFfMAorCWJvb2wgIkExXzAiCisKK2NvbmZpZyBBMV8x
CisJYm9vbCAiQTFfMSIKKworZW5kY2hvaWNlCisKK2NvbmZpZyBCCisJYm9vbCAiQiIKKwloZWxw
CisJICBUaGlzIGlzIGluZGVwZW5kZW50IG9mIEEuCisKK2NvbmZpZyBDCisJYm9vbCAiQyIKKwlk
ZXBlbmRzIG9uIEEKKwloZWxwCisJICBUaGlzIGRlcGVuZHMgb24gQSwgYnV0IG5vdCBhIGNvbnNl
Y3V0aXZlIGl0ZW0sIHNvIGNhbi9zaG91bGQgbm90CisJICBiZSBhIHN1Ym1lbnUuCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weSBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1YWJkOTIKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQpAQCAt
MCwwICsxLDEzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0Ny
ZWF0ZSBzdWJtZW51IGZvciBzeW1ib2xzIHRoYXQgZGVwZW5kIG9uIHRoZSBwcmVjZWRpbmcgb25l
LgorCitJZiBhIHN5bWJvbHMgaGFzIGRlcGVuZGVuY3kgb24gdGhlIHByZWNlZGluZyBzeW1ib2ws
IHRoZSBtZW51IGVudHJ5CitzaG91bGQgYmVjb21lIHRoZSBzdWJtZW51IG9mIHRoZSBwcmVjZWRp
bmcgb25lLCBhbmQgZGlzcGxheWVkIHdpdGgKK2RlZXBlciBpbmRlbnRhdGlvbi4KKyIiIgorCisK
K2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDAKKyAg
ICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRv
dXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRv
dXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1MjM2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVjdGVk
X3N0ZG91dApAQCAtMCwwICsxLDEwIEBACitBIChBKSBbWS9uLz9dIChORVcpIAorICBBMCAoQTAp
IFtZL24vP10gKE5FVykgCisgICAgQTFfMCAoQTBfMCkgW04veS8/XSAoTkVXKSAKKyAgQTEgKEEx
KSBbWS9uLz9dIChORVcpIAorICAgIGNob2ljZQorICAgID4gMS4gQTFfMCAoQTFfMCkgKE5FVykK
KyAgICAgIDIuIEExXzEgKEExXzEpIChORVcpCisgICAgY2hvaWNlWzEtMj9dOiAKK0IgKEIpIFtO
L3kvP10gKE5FVykgCitDIChDKSBbTi95Lz9dIChORVcpIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvY2hvaWNlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQx
MjIwNQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
L0tjb25maWcKQEAgLTAsMCArMSw1NiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMAorCitjb25maWcgTU9EVUxFUworCWJvb2wgIkVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3Vw
cG9ydCIKKwlvcHRpb24gbW9kdWxlcworCWRlZmF1bHQgeQorCitjaG9pY2UKKwlwcm9tcHQgImJv
b2xlYW4gY2hvaWNlIgorCWRlZmF1bHQgQk9PTF9DSE9JQ0UxCisKK2NvbmZpZyBCT09MX0NIT0lD
RTAKKwlib29sICJjaG9pY2UgMCIKKworY29uZmlnIEJPT0xfQ0hPSUNFMQorCWJvb2wgImNob2lj
ZSAxIgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJvcHRpb25hbCBib29sZWFuIGNo
b2ljZSIKKwlvcHRpb25hbAorCWRlZmF1bHQgT1BUX0JPT0xfQ0hPSUNFMQorCitjb25maWcgT1BU
X0JPT0xfQ0hPSUNFMAorCWJvb2wgImNob2ljZSAwIgorCitjb25maWcgT1BUX0JPT0xfQ0hPSUNF
MQorCWJvb2wgImNob2ljZSAxIgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJ0cmlz
dGF0ZSBjaG9pY2UiCisJZGVmYXVsdCBUUklfQ0hPSUNFMQorCitjb25maWcgVFJJX0NIT0lDRTAK
Kwl0cmlzdGF0ZSAiY2hvaWNlIDAiCisKK2NvbmZpZyBUUklfQ0hPSUNFMQorCXRyaXN0YXRlICJj
aG9pY2UgMSIKKworZW5kY2hvaWNlCisKK2Nob2ljZQorCXByb21wdCAib3B0aW9uYWwgdHJpc3Rh
dGUgY2hvaWNlIgorCW9wdGlvbmFsCisJZGVmYXVsdCBPUFRfVFJJX0NIT0lDRTEKKworY29uZmln
IE9QVF9UUklfQ0hPSUNFMAorCXRyaXN0YXRlICJjaG9pY2UgMCIKKworY29uZmlnIE9QVF9UUklf
Q0hPSUNFMQorCXRyaXN0YXRlICJjaG9pY2UgMSIKKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjQzMThmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDQxIEBACisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0Jhc2ljIGNob2ljZSB0ZXN0cy4KKworVGhl
IGhhbmRsaW5nIG9mICdjaG9pY2UnIGlzIGEgYml0IGNvbXBsaWNhdGVkIHBhcnQgaW4gS2NvbmZp
Zy4KKworVGhlIGJlaGF2aW9yIG9mICd5JyBjaG9pY2UgaXMgaW50dWl0aXZlLiAgSWYgY2hvaWNl
IHZhbHVlcyBhcmUgdHJpc3RhdGUsCit0aGUgY2hvaWNlIGNhbiBiZSAnbScgd2hlcmUgZWFjaCB2
YWx1ZSBjYW4gYmUgZW5hYmxlZCBpbmRlcGVuZGVudGx5LgorQWxzbywgaWYgYSBjaG9pY2UgaXMg
bWFya2VkIGFzICdvcHRpb25hbCcsIHRoZSB3aG9sZSBjaG9pY2UgY2FuIGJlCitpbnZpc2libGUu
CisiIiIKKworCitkZWYgdGVzdF9vbGRhc2swKGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFz
a2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ29sZGFzazBf
ZXhwZWN0ZWRfc3Rkb3V0JykKKworCitkZWYgdGVzdF9vbGRhc2sxKGNvbmYpOgorICAgIGFzc2Vy
dCBjb25mLm9sZGFza2NvbmZpZygnb2xkYXNrMV9jb25maWcnKSA9PSAwCisgICAgYXNzZXJ0IGNv
bmYuc3Rkb3V0X2NvbnRhaW5zKCdvbGRhc2sxX2V4cGVjdGVkX3N0ZG91dCcpCisKKworZGVmIHRl
c3RfYWxseWVzKGNvbmYpOgorICAgIGFzc2VydCBjb25mLmFsbHllc2NvbmZpZygpID09IDAKKyAg
ICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbHllc19leHBlY3RlZF9jb25maWcnKQor
CisKK2RlZiB0ZXN0X2FsbG1vZChjb25mKToKKyAgICBhc3NlcnQgY29uZi5hbGxtb2Rjb25maWco
KSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRhaW5zKCdhbGxtb2RfZXhwZWN0ZWRf
Y29uZmlnJykKKworCitkZWYgdGVzdF9hbGxubyhjb25mKToKKyAgICBhc3NlcnQgY29uZi5hbGxu
b2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbG5vX2V4
cGVjdGVkX2NvbmZpZycpCisKKworZGVmIHRlc3RfYWxsZGVmKGNvbmYpOgorICAgIGFzc2VydCBj
b25mLmFsbGRlZmNvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMo
J2FsbGRlZl9leHBlY3RlZF9jb25maWcnKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2E3NTRiZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcKQEAgLTAsMCArMSw1
IEBACitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19CT09MX0NIT0lDRTAgaXMgbm90IHNldAor
Q09ORklHX0JPT0xfQ0hPSUNFMT15CisjIENPTkZJR19UUklfQ0hPSUNFMCBpcyBub3Qgc2V0Cisj
IENPTkZJR19UUklfQ0hPSUNFMSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWY1ZGNkCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwpAQCAtMCww
ICsxLDkgQEAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qg
c2V0CitDT05GSUdfQk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklHX09QVF9CT09MX0NIT0lDRTAgaXMg
bm90IHNldAorQ09ORklHX09QVF9CT09MX0NIT0lDRTE9eQorQ09ORklHX1RSSV9DSE9JQ0UwPW0K
K0NPTkZJR19UUklfQ0hPSUNFMT1tCitDT05GSUdfT1BUX1RSSV9DSE9JQ0UwPW0KK0NPTkZJR19P
UFRfVFJJX0NIT0lDRTE9bQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9j
aG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9j
aG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI4OGVlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcKQEAgLTAsMCArMSw1IEBACisjIENPTkZJ
R19NT0RVTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitD
T05GSUdfQk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklHX1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NP
TkZJR19UUklfQ0hPSUNFMT15CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNWEwNjJhCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK0NP
TkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdf
Qk9PTF9DSE9JQ0UxPXkKKyMgQ09ORklHX09QVF9CT09MX0NIT0lDRTAgaXMgbm90IHNldAorQ09O
RklHX09QVF9CT09MX0NIT0lDRTE9eQorIyBDT05GSUdfVFJJX0NIT0lDRTAgaXMgbm90IHNldAor
Q09ORklHX1RSSV9DSE9JQ0UxPXkKKyMgQ09ORklHX09QVF9UUklfQ0hPSUNFMCBpcyBub3Qgc2V0
CitDT05GSUdfT1BUX1RSSV9DSE9JQ0UxPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1MWJiYQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0CkBAIC0wLDAg
KzEsMTAgQEAKK0VuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAoTU9EVUxFUykgW1kvbi8/
XSAoTkVXKSAKK2Jvb2xlYW4gY2hvaWNlCisgIDEuIGNob2ljZSAwIChCT09MX0NIT0lDRTApIChO
RVcpCis+IDIuIGNob2ljZSAxIChCT09MX0NIT0lDRTEpIChORVcpCitjaG9pY2VbMS0yP106IAor
b3B0aW9uYWwgYm9vbGVhbiBjaG9pY2UgW04veS8/XSAoTkVXKSAKK3RyaXN0YXRlIGNob2ljZSBb
TS95Lz9dIChORVcpIAorICBjaG9pY2UgMCAoVFJJX0NIT0lDRTApIFtOL20vP10gKE5FVykgCisg
IGNob2ljZSAxIChUUklfQ0hPSUNFMSkgW04vbS8/XSAoTkVXKSAKK29wdGlvbmFsIHRyaXN0YXRl
IGNob2ljZSBbTi9tL3kvP10gKE5FVykgCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlL29sZGFzazFfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmI2N2JmZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZS9vbGRhc2sxX2NvbmZpZwpAQCAtMCwwICsxLDIgQEAKKyMgQ09ORklHX01PRFVMRVMgaXMg
bm90IHNldAorQ09ORklHX09QVF9CT09MX0NIT0lDRTA9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjEyNWU5Ci0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQK
QEAgLTAsMCArMSwxNSBAQAorRW5hYmxlIGxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0IChNT0RVTEVT
KSBbTi95Lz9dIAorYm9vbGVhbiBjaG9pY2UKKyAgMS4gY2hvaWNlIDAgKEJPT0xfQ0hPSUNFMCkg
KE5FVykKKz4gMi4gY2hvaWNlIDEgKEJPT0xfQ0hPSUNFMSkgKE5FVykKK2Nob2ljZVsxLTI/XTog
CitvcHRpb25hbCBib29sZWFuIGNob2ljZSBbWS9uLz9dIChORVcpIAorb3B0aW9uYWwgYm9vbGVh
biBjaG9pY2UKKz4gMS4gY2hvaWNlIDAgKE9QVF9CT09MX0NIT0lDRTApCisgIDIuIGNob2ljZSAx
IChPUFRfQk9PTF9DSE9JQ0UxKSAoTkVXKQorY2hvaWNlWzEtMj9dOiAKK3RyaXN0YXRlIGNob2lj
ZQorICAxLiBjaG9pY2UgMCAoVFJJX0NIT0lDRTApIChORVcpCis+IDIuIGNob2ljZSAxIChUUklf
Q0hPSUNFMSkgKE5FVykKK2Nob2ljZVsxLTI/XTogCitvcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2Ug
W04veS8/XSAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3Zh
bHVlX3dpdGhfbV9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
X3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi43MTA2YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnCkBAIC0wLDAgKzEsMjEgQEAKKyMgU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworY29uZmlnIE1PRFVMRVMKKwlkZWZfYm9v
bCB5CisJb3B0aW9uIG1vZHVsZXMKKworY29uZmlnIERFUAorCXRyaXN0YXRlCisJZGVmYXVsdCBt
CisKK2Nob2ljZQorCXByb21wdCAiVHJpc3RhdGUgQ2hvaWNlIgorCitjb25maWcgQ0hPSUNFMAor
CXRyaXN0YXRlICJDaG9pY2UgMCIKKworY29uZmlnIENIT0lDRTEKKwl0cmlzdGF0ZSAiQ2hvaWNl
IDEiCisJZGVwZW5kcyBvbiBERVAKKworZW5kY2hvaWNlCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5IGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5w
eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzViNGUwCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2Rl
cC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE2IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCisiIiIKK0hpZGUgdHJpc3RhdGUgY2hvaWNlIHZhbHVlcyB3aXRoIG1vZCBkZXBl
bmRlbmN5IGluIHkgY2hvaWNlLgorCitJZiB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIGRlcGVuZCBv
biBzeW1ib2xzIHNldCB0byAnbScsIHRoZXkgc2hvdWxkIGJlCitoaWRkZW4gd2hlbiB0aGUgY2hv
aWNlIGNvbnRhaW5pbmcgdGhlbSBpcyBjaGFuZ2VkIGZyb20gJ20nIHRvICd5JworKGkuZS4gZXhj
bHVzaXZlIGNob2ljZSkuCisKK1JlbGF0ZWQgTGludXggY29tbWl0OiBmYTY0ZTVmNmEzNWVmZDVl
NzdkNjM5MTI1ZDk3MzA3N2NhNTA2MDc0CisiIiIKKworCitkZWYgdGVzdChjb25mKToKKyAgICBh
c3NlcnQgY29uZi5vbGRhc2tjb25maWcoJ2NvbmZpZycsICd5JykgPT0gMAorICAgIGFzc2VydCBj
b25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfY29uZmlnJykKKyAgICBhc3NlcnQgY29uZi5z
dGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMTI2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZwpA
QCAtMCwwICsxLDIgQEAKK0NPTkZJR19DSE9JQ0UwPW0KK0NPTkZJR19DSE9JQ0UxPW0KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAv
ZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVf
d2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNGQwN2I0NAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnCkBAIC0wLDAgKzEsMyBA
QAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX0RFUD1tCitDT05GSUdfQ0hPSUNFMD15CmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVl
X3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjJiNTBhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dApAQCAtMCwwICsxLDQg
QEAKK1RyaXN0YXRlIENob2ljZSBbTS95Lz9dIHkKK1RyaXN0YXRlIENob2ljZQorPiAxLiBDaG9p
Y2UgMCAoQ0hPSUNFMCkKK2Nob2ljZVsxXTogMQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9jb25mdGVzdC5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRl
c3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0NWVmNgotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkKQEAgLTAs
MCArMSwyOTEgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyMKKyMgQ29w
eXJpZ2h0IChDKSAyMDE4IE1hc2FoaXJvIFlhbWFkYSA8eWFtYWRhLm1hc2FoaXJvQHNvY2lvbmV4
dC5jb20+CisjCisKKyIiIgorS2NvbmZpZyB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLgorCitUaGlz
IHByb3ZpZGVzIGZpeHR1cmUgZnVuY3Rpb25zIGNvbW1vbmx5IHVzZWQgZnJvbSB0ZXN0IGZpbGVz
LgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHB5dGVzdAoraW1wb3J0IHNodXRpbAoraW1wb3J0
IHN1YnByb2Nlc3MKK2ltcG9ydCB0ZW1wZmlsZQorCitDT05GX1BBVEggPSBvcy5wYXRoLmFic3Bh
dGgob3MucGF0aC5qb2luKCdzY3JpcHRzJywgJ2tjb25maWcnLCAnY29uZicpKQorCisKK2NsYXNz
IENvbmY6CisgICAgIiIiS2NvbmZpZyBydW5uZXIgYW5kIHJlc3VsdCBjaGVja2VyLgorCisgICAg
VGhpcyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIHRvIHJ1biB0ZXh0LWJhc2VkIGludGVyZmFjZSBv
ZiBLY29uZmlnCisgICAgKHNjcmlwdHMva2NvbmZpZy9jb25mKSBhbmQgcmV0cmlldmUgdGhlIHJl
c3VsdGVkIGNvbmZpZ3VyYXRpb24sCisgICAgc3Rkb3V0LCBhbmQgc3RkZXJyLiAgSXQgYWxzbyBw
cm92aWRlcyBtZXRob2RzIHRvIGNvbXBhcmUgdGhvc2UKKyAgICByZXN1bHRzIHdpdGggZXhwZWN0
YXRpb25zLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QpOgorICAg
ICAgICAiIiJDcmVhdGUgYSBuZXcgQ29uZiBpbnN0YW5jZS4KKworICAgICAgICByZXF1ZXN0OiBv
YmplY3QgdG8gaW50cm9zcGVjdCB0aGUgcmVxdWVzdGluZyB0ZXN0IG1vZHVsZQorICAgICAgICAi
IiIKKyAgICAgICAgIyB0aGUgZGlyZWN0b3J5IG9mIHRoZSB0ZXN0IGJlaW5nIHJ1bgorICAgICAg
ICBzZWxmLl90ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShzdHIocmVxdWVzdC5mc3BhdGgpKQor
CisgICAgIyBydW5uZXJzCisgICAgZGVmIF9ydW5fY29uZihzZWxmLCBtb2RlLCBkb3RfY29uZmln
PU5vbmUsIG91dF9maWxlPScuY29uZmlnJywKKyAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZl
PUZhbHNlLCBpbl9rZXlzPU5vbmUsIGV4dHJhX2Vudj17fSk6CisgICAgICAgICIiIlJ1biB0ZXh0
LWJhc2VkIEtjb25maWcgZXhlY3V0YWJsZSBhbmQgc2F2ZSB0aGUgcmVzdWx0LgorCisgICAgICAg
IG1vZGU6IGlucHV0IG1vZGUgb3B0aW9uICgtLW9sZGFza2NvbmZpZywgLS1kZWZjb25maWc9PGZp
bGU+IGV0Yy4pCisgICAgICAgIGRvdF9jb25maWc6IC5jb25maWcgZmlsZSB0byB1c2UgZm9yIGNv
bmZpZ3VyYXRpb24gYmFzZQorICAgICAgICBvdXRfZmlsZTogZmlsZSBuYW1lIHRvIGNvbnRhaW4g
dGhlIG91dHB1dCBjb25maWcgZGF0YQorICAgICAgICBpbnRlcmFjdGl2ZTogZmxhZyB0byBzcGVj
aWZ5IHRoZSBpbnRlcmFjdGl2ZSBtb2RlCisgICAgICAgIGluX2tleXM6IGtleSBpbnB1dHMgZm9y
IGludGVyYWN0aXZlIG1vZGVzCisgICAgICAgIGV4dHJhX2VudjogYWRkaXRpb25hbCBlbnZpcm9u
bWVudHMKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhl
Y3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgY29tbWFuZCA9IFtDT05GX1BBVEgsIG1vZGUs
ICdLY29uZmlnJ10KKworICAgICAgICAjIE92ZXJyaWRlICdzcmN0cmVlJyBlbnZpcm9ubWVudCB0
byBtYWtlIHRoZSB0ZXN0IGFzIHRoZSB0b3AgZGlyZWN0b3J5CisgICAgICAgIGV4dHJhX2Vudlsn
c3JjdHJlZSddID0gc2VsZi5fdGVzdF9kaXIKKworICAgICAgICAjIFJ1biBLY29uZmlnIGluIGEg
dGVtcG9yYXJ5IGRpcmVjdG9yeS4KKyAgICAgICAgIyBUaGlzIGRpcmVjdG9yeSBpcyBhdXRvbWF0
aWNhbGx5IHJlbW92ZWQgd2hlbiBkb25lLgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFy
eURpcmVjdG9yeSgpIGFzIHRlbXBfZGlyOgorCisgICAgICAgICAgICAjIGlmIC5jb25maWcgaXMg
Z2l2ZW4sIGNvcHkgaXQgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5CisgICAgICAgICAgICBpZiBk
b3RfY29uZmlnOgorICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4o
c2VsZi5fdGVzdF9kaXIsIGRvdF9jb25maWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcy5wYXRoLmpvaW4odGVtcF9kaXIsICcuY29uZmlnJykpCisKKyAgICAgICAgICAgIHBz
ID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3dkPXRlbXBfZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVudj1kaWN0KG9zLmVudmlyb24sICoqZXh0cmFfZW52KSkKKworICAgICAgICAgICAgIyBJ
ZiBpbnB1dCBrZXkgc2VxdWVuY2UgaXMgZ2l2ZW4sIGZlZWQgaXQgdG8gc3RkaW4uCisgICAgICAg
ICAgICBpZiBpbl9rZXlzOgorICAgICAgICAgICAgICAgIHBzLnN0ZGluLndyaXRlKGluX2tleXMu
ZW5jb2RlKCd1dGYtOCcpKQorCisgICAgICAgICAgICB3aGlsZSBwcy5wb2xsKCkgaXMgTm9uZToK
KyAgICAgICAgICAgICAgICAjIEZvciBpbnRlcmFjdGl2ZSBtb2RlcyBzdWNoIGFzIG9sZGFza2Nv
bmZpZywgb2xkY29uZmlnLAorICAgICAgICAgICAgICAgICMgc2VuZCAnRW50ZXInIGtleSB1bnRp
bCB0aGUgcHJvZ3JhbSBmaW5pc2hlcy4KKyAgICAgICAgICAgICAgICBpZiBpbnRlcmFjdGl2ZToK
KyAgICAgICAgICAgICAgICAgICAgcHMuc3RkaW4ud3JpdGUoYidcbicpCisKKyAgICAgICAgICAg
IHNlbGYucmV0Y29kZSA9IHBzLnJldHVybmNvZGUKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0g
cHMuc3Rkb3V0LnJlYWQoKS5kZWNvZGUoKQorICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBwcy5z
dGRlcnIucmVhZCgpLmRlY29kZSgpCisKKyAgICAgICAgICAgICMgUmV0cmlldmUgdGhlIHJlc3Vs
dGVkIGNvbmZpZyBkYXRhIG9ubHkgd2hlbiAuY29uZmlnIGlzIHN1cHBvc2VkCisgICAgICAgICAg
ICAjIHRvIGV4aXN0LiAgSWYgdGhlIGNvbW1hbmQgZmFpbHMsIHRoZSAuY29uZmlnIGRvZXMgbm90
IGV4aXN0LgorICAgICAgICAgICAgIyAnbGlzdG5ld2NvbmZpZycgZG9lcyBub3QgcHJvZHVjZSAu
Y29uZmlnIGluIHRoZSBmaXJzdCBwbGFjZS4KKyAgICAgICAgICAgIGlmIHNlbGYucmV0Y29kZSA9
PSAwIGFuZCBvdXRfZmlsZToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2lu
KHRlbXBfZGlyLCBvdXRfZmlsZSkpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY29u
ZmlnID0gZi5yZWFkKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5j
b25maWcgPSBOb25lCisKKyAgICAgICAgIyBMb2dnaW5nOgorICAgICAgICAjIFB5dGVzdCBjYXB0
dXJlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGJ5IGRlZmF1bHQuICBJbiBmYWlsdXJlCisg
ICAgICAgICMgb2YgdGVzdHMsIHRoZSBjYXB0dXJlZCBsb2cgd2lsbCBiZSBkaXNwbGF5ZWQuICBU
aGlzIHdpbGwgYmUgdXNlZnVsIHRvCisgICAgICAgICMgZmlndXJlIG91dCB3aGF0IGhhcyBoYXBw
ZW5lZC4KKworICAgICAgICBwcmludCgiW2NvbW1hbmRdXG57fVxuIi5mb3JtYXQoJyAnLmpvaW4o
Y29tbWFuZCkpKQorCisgICAgICAgIHByaW50KCJbcmV0Y29kZV1cbnt9XG4iLmZvcm1hdChzZWxm
LnJldGNvZGUpKQorCisgICAgICAgIHByaW50KCJbc3Rkb3V0XSIpCisgICAgICAgIHByaW50KHNl
bGYuc3Rkb3V0KQorCisgICAgICAgIHByaW50KCJbc3RkZXJyXSIpCisgICAgICAgIHByaW50KHNl
bGYuc3RkZXJyKQorCisgICAgICAgIGlmIHNlbGYuY29uZmlnIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgcHJpbnQoIltvdXRwdXQgZm9yICd7fSddIi5mb3JtYXQob3V0X2ZpbGUpKQorICAgICAg
ICAgICAgcHJpbnQoc2VsZi5jb25maWcpCisKKyAgICAgICAgcmV0dXJuIHNlbGYucmV0Y29kZQor
CisgICAgZGVmIG9sZGFza2NvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUsIGluX2tleXM9Tm9u
ZSk6CisgICAgICAgICIiIlJ1biBvbGRhc2tjb25maWcuCisKKyAgICAgICAgZG90X2NvbmZpZzog
LmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25hbCkKKyAg
ICAgICAgaW5fa2V5OiBrZXkgaW5wdXRzIChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29kZTog
ZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLW9sZGFza2NvbmZpZycsIGRvdF9jb25maWc9ZG90
X2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPVRydWUs
IGluX2tleXM9aW5fa2V5cykKKworICAgIGRlZiBvbGRjb25maWcoc2VsZiwgZG90X2NvbmZpZz1O
b25lLCBpbl9rZXlzPU5vbmUpOgorICAgICAgICAiIiJSdW4gb2xkY29uZmlnLgorCisgICAgICAg
IGRvdF9jb25maWc6IC5jb25maWcgZmlsZSB0byB1c2UgZm9yIGNvbmZpZ3VyYXRpb24gYmFzZSAo
b3B0aW9uYWwpCisgICAgICAgIGluX2tleToga2V5IGlucHV0cyAob3B0aW9uYWwpCisgICAgICAg
IHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1vbGRjb25maWcnLCBkb3Rf
Y29uZmlnPWRvdF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFj
dGl2ZT1UcnVlLCBpbl9rZXlzPWluX2tleXMpCisKKyAgICBkZWYgb2xkZGVmY29uZmlnKHNlbGYs
IGRvdF9jb25maWc9Tm9uZSk6CisgICAgICAgICIiIlJ1biBvbGRkZWZjb25maWcuCisKKyAgICAg
ICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNl
IChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25m
aWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25m
KCctLW9sZGRlZmNvbmZpZycsIGRvdF9jb25maWc9ZG90X2NvbmZpZykKKworICAgIGRlZiBkZWZj
b25maWcoc2VsZiwgZGVmY29uZmlnKToKKyAgICAgICAgIiIiUnVuIGRlZmNvbmZpZy4KKworICAg
ICAgICBkZWZjb25maWc6IGRlZmNvbmZpZyBmaWxlIGZvciBpbnB1dAorICAgICAgICByZXR1cm5j
b2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgor
ICAgICAgICBkZWZjb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgZGVm
Y29uZmlnKQorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tZGVmY29uZmlnPXt9Jy5m
b3JtYXQoZGVmY29uZmlnX3BhdGgpKQorCisgICAgZGVmIF9hbGxjb25maWcoc2VsZiwgbW9kZSwg
YWxsX2NvbmZpZyk6CisgICAgICAgIGlmIGFsbF9jb25maWc6CisgICAgICAgICAgICBhbGxfY29u
ZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGFsbF9jb25maWcpCisgICAg
ICAgICAgICBleHRyYV9lbnYgPSB7J0tDT05GSUdfQUxMQ09ORklHJzogYWxsX2NvbmZpZ19wYXRo
fQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0cmFfZW52ID0ge30KKworICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0te31jb25maWcnLmZvcm1hdChtb2RlKSwgZXh0cmFfZW52
PWV4dHJhX2VudikKKworICAgIGRlZiBhbGx5ZXNjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25l
KToKKyAgICAgICAgIiIiUnVuIGFsbHllc2NvbmZpZy4KKworICAgICAgICBhbGxfY29uZmlnOiBm
cmFnbWVudCBjb25maWcgZmlsZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQorICAg
ICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisg
ICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdhbGx5ZXMnLCBhbGxf
Y29uZmlnKQorCisgICAgZGVmIGFsbG1vZGNvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgor
ICAgICAgICAiIiJSdW4gYWxsbW9kY29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6IGZyYWdt
ZW50IGNvbmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisgICAgICAg
IHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG1vZCcsIGFsbF9jb25m
aWcpCisKKyAgICBkZWYgYWxsbm9jb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKKyAgICAg
ICAgIiIiUnVuIGFsbG5vY29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNv
bmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisgICAgICAgIHJldHVy
bmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIi
CisgICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG5vJywgYWxsX2NvbmZpZykKKwor
ICAgIGRlZiBhbGxkZWZjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKKyAgICAgICAgIiIi
UnVuIGFsbGRlZmNvbmZpZy4KKworICAgICAgICBhbGxfY29uZmlnOiBmcmFnbWVudCBjb25maWcg
ZmlsZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQorICAgICAgICByZXR1cm5jb2Rl
OiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdhbGxkZWYnLCBhbGxfY29uZmlnKQorCisgICAg
ZGVmIHJhbmRjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKKyAgICAgICAgIiIiUnVuIHJh
bmRjb25maWcuCisKKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9y
IEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBz
dGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2FsbGNvbmZpZygncmFuZCcsIGFsbF9jb25maWcpCisKKyAgICBkZWYgc2F2ZWRl
ZmNvbmZpZyhzZWxmLCBkb3RfY29uZmlnKToKKyAgICAgICAgIiIiUnVuIHNhdmVkZWZjb25maWcu
CisKKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIGZvciBpbnB1dAorICAgICAgICBy
ZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAg
ICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tc2F2ZWRlZmNvbmZpZycsIG91
dF9maWxlPSdkZWZjb25maWcnKQorCisgICAgZGVmIGxpc3RuZXdjb25maWcoc2VsZiwgZG90X2Nv
bmZpZz1Ob25lKToKKyAgICAgICAgIiIiUnVuIGxpc3RuZXdjb25maWcuCisKKyAgICAgICAgZG90
X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRp
b25hbCkKKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhl
Y3V0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLWxp
c3RuZXdjb25maWcnLCBkb3RfY29uZmlnPWRvdF9jb25maWcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRfZmlsZT1Ob25lKQorCisgICAgIyBjaGVja2VycworICAgIGRlZiBfcmVh
ZF9hbmRfY29tcGFyZShzZWxmLCBjb21wYXJlLCBleHBlY3RlZCk6CisgICAgICAgICIiIkNvbXBh
cmUgdGhlIHJlc3VsdCB3aXRoIGV4cGVjdGF0aW9uLgorCisgICAgICAgIGNvbXBhcmU6IGZ1bmN0
aW9uIHRvIGNvbXBhcmUgdGhlIHJlc3VsdCB3aXRoIGV4cGVjdGF0aW9uCisgICAgICAgIGV4cGVj
dGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgIiIiCisg
ICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGV4cGVjdGVkKSkg
YXMgZjoKKyAgICAgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBmLnJlYWQoKQorICAgICAgICByZXR1
cm4gY29tcGFyZShzZWxmLCBleHBlY3RlZF9kYXRhKQorCisgICAgZGVmIF9jb250YWlucyhzZWxm
LCBhdHRyLCBleHBlY3RlZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FuZF9jb21wYXJl
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHMsIGU6IGdldGF0
dHIocywgYXR0cikuZmluZChlKSA+PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWQpCisKKyAgICBkZWYgX21hdGNoZXMoc2VsZiwgYXR0ciwgZXhwZWN0ZWQp
OgorICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbmRfY29tcGFyZShsYW1iZGEgcywgZTogZ2V0
YXR0cihzLCBhdHRyKSA9PSBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZCkKKworICAgIGRlZiBjb25maWdfY29udGFpbnMoc2VsZiwgZXhwZWN0ZWQpOgor
ICAgICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGV4cGVj
dGVkIGRhdGEuCisKKyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhw
ZWN0ZWQgZGF0YQorICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0
aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fY29udGFpbnMoJ2NvbmZpZycsIGV4cGVjdGVkKQorCisgICAgZGVmIGNvbmZp
Z19tYXRjaGVzKHNlbGYsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQg
Y29uZmlndXJhdGlvbiBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KKworICAgICAgICBl
eHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCisgICAgICAgIHJl
dHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNl
IG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ2Nv
bmZpZycsIGV4cGVjdGVkKQorCisgICAgZGVmIHN0ZG91dF9jb250YWlucyhzZWxmLCBleHBlY3Rl
ZCk6CisgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZG91dCBjb250YWlucyBleHBlY3Rl
ZCBkYXRhLgorCisgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVj
dGVkIGRhdGEKKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhl
IGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0
dXJuIHNlbGYuX2NvbnRhaW5zKCdzdGRvdXQnLCBleHBlY3RlZCkKKworICAgIGRlZiBzdGRvdXRf
bWF0Y2hlcyhzZWxmLCBleHBlY3RlZCk6CisgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0
ZG91dCBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KKworICAgICAgICBleHBlY3RlZDog
ZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCisgICAgICAgIHJldHVybmNvZGU6
IFRydWUgaWYgcmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lz
ZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ3N0ZG91dCcsIGV4
cGVjdGVkKQorCisgICAgZGVmIHN0ZGVycl9jb250YWlucyhzZWxmLCBleHBlY3RlZCk6CisgICAg
ICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBjb250YWlucyBleHBlY3RlZCBkYXRhLgor
CisgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEK
KyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhlIGV4cGVjdGVk
IGRhdGEsIEZhbHNlIG90aGVyd2lzZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYu
X2NvbnRhaW5zKCdzdGRlcnInLCBleHBlY3RlZCkKKworICAgIGRlZiBzdGRlcnJfbWF0Y2hlcyhz
ZWxmLCBleHBlY3RlZCk6CisgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBleGFj
dGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KKworICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0
IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCisgICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYg
cmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQorICAgICAg
ICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ3N0ZGVycicsIGV4cGVjdGVkKQor
CisKK0BweXRlc3QuZml4dHVyZShzY29wZT0ibW9kdWxlIikKK2RlZiBjb25mKHJlcXVlc3QpOgor
ICAgICIiIkNyZWF0ZSBhIENvbmYgaW5zdGFuY2UgYW5kIHByb3ZpZGUgaXQgdG8gdGVzdCBmdW5j
dGlvbnMuIiIiCisgICAgcmV0dXJuIENvbmYocmVxdWVzdCkKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lYmRiM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnCkBAIC0wLDAgKzEsNjMg
QEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworIyBkZXBlbmRzIG9uIGl0
c2VsZgorCitjb25maWcgQQorCWJvb2wgIkEiCisJZGVwZW5kcyBvbiBBCisKKyMgc2VsZWN0IGl0
c2VsZgorCitjb25maWcgQgorCWJvb2wKKwlzZWxlY3QgQgorCisjIGRlcGVuZHMgb24gZWFjaCBv
dGhlcgorCitjb25maWcgQzEKKwlib29sICJDMSIKKwlkZXBlbmRzIG9uIEMyCisKK2NvbmZpZyBD
MgorCWJvb2wgIkMyIgorCWRlcGVuZHMgb24gQzEKKworIyBkZXBlbmRzIG9uIGFuZCBzZWxlY3QK
KworY29uZmlnIEQxCisJYm9vbCAiRDEiCisJZGVwZW5kcyBvbiBEMgorCXNlbGVjdCBEMgorCitj
b25maWcgRDIKKwlib29sCisKKyMgZGVwZW5kcyBvbiBhbmQgaW1wbHkKKworY29uZmlnIEUxCisJ
Ym9vbCAiRTEiCisJZGVwZW5kcyBvbiBFMgorCWltcGx5IEUyCisKK2NvbmZpZyBFMgorCWJvb2wg
IkUyIgorCisjIHByb3BlcnR5CisKK2NvbmZpZyBGMQorCWJvb2wgIkYxIgorCWRlZmF1bHQgRjIK
KworY29uZmlnIEYyCisJYm9vbCAiRjIiCisJZGVwZW5kcyBvbiBGMQorCisjIG1lbnUKKworbWVu
dSAibWVudSBkZXBlbmRpbmcgb24gaXRzIGNvbnRlbnQiCisJZGVwZW5kcyBvbiBHCisKK2NvbmZp
ZyBHCisJYm9vbCAiRyIKKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNWYzODIxYgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKQEAgLTAsMCArMSwx
MCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitEZXRlY3QgcmVj
dXJzaXZlIGRlcGVuZGVuY3kgZXJyb3IuCisKK1JlY3Vyc2l2ZSBkZXBlbmRlbmN5IHNob3VsZCBi
ZSB0cmVhdGVkIGFzIGFuIGVycm9yLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2Vy
dCBjb25mLm9sZGFza2NvbmZpZygpID09IDEKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFp
bnMoJ2V4cGVjdGVkX3N0ZGVycicpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Njc5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycgpAQCAt
MCwwICsxLDM4IEBACitLY29uZmlnOjExOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRl
Y3RlZCEKK0tjb25maWc6MTE6CXN5bWJvbCBCIGlzIHNlbGVjdGVkIGJ5IEIKK0ZvciBhIHJlc29s
dXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQK
K3N1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiCisK
K0tjb25maWc6NTplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmln
OjU6CXN5bWJvbCBBIGRlcGVuZHMgb24gQQorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1
bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZp
ZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZpZzoxNzplcnJvcjog
cmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmlnOjE3OglzeW1ib2wgQzEgZGVw
ZW5kcyBvbiBDMgorS2NvbmZpZzoyMToJc3ltYm9sIEMyIGRlcGVuZHMgb24gQzEKK0ZvciBhIHJl
c29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50
eHQKK3N1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMi
CisKK0tjb25maWc6MzI6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQorS2Nv
bmZpZzozMjoJc3ltYm9sIEQyIGlzIHNlbGVjdGVkIGJ5IEQxCitLY29uZmlnOjI3OglzeW1ib2wg
RDEgZGVwZW5kcyBvbiBEMgorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9u
L2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNp
dmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZpZzozNzplcnJvcjogcmVjdXJzaXZl
IGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmlnOjM3OglzeW1ib2wgRTEgZGVwZW5kcyBvbiBF
MgorS2NvbmZpZzo0MjoJc3ltYm9sIEUyIGlzIGltcGxpZWQgYnkgRTEKK0ZvciBhIHJlc29sdXRp
b24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQKK3N1
YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiCisKK0tj
b25maWc6NjA6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQorS2NvbmZpZzo2
MDoJc3ltYm9sIEcgZGVwZW5kcyBvbiBHCitGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3Vt
ZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CitzdWJzZWN0aW9uICJLY29uZmln
IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIgorCitLY29uZmlnOjUxOmVycm9yOiBy
ZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCEKK0tjb25maWc6NTE6CXN5bWJvbCBGMiBkZXBl
bmRzIG9uIEYxCitLY29uZmlnOjQ5OglzeW1ib2wgRjEgZGVmYXVsdCB2YWx1ZSBjb250YWlucyBG
MgorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmln
LWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBs
aW1pdGF0aW9ucyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNmY0
YWRlCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVj
dXJzaXZlX2luYy9LY29uZmlnCkBAIC0wLDAgKzEsMiBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMC1vbmx5Citzb3VyY2UgIktjb25maWcuaW5jMSIKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzEK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjYmYwZAotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
Zy5pbmMxCkBAIC0wLDAgKzEsNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu
MC1vbmx5CisKKworCitzb3VyY2UgIktjb25maWcuaW5jMiIKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNTEwNwotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMy
CkBAIC0wLDAgKzEsNCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5
CisKKworc291cmNlICJLY29uZmlnLmluYzMiCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZjRhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMwpAQCAtMCww
ICsxLDIgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorc291cmNl
ICJLY29uZmlnLmluYzEiCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9l
cnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yN2FhMTg5Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDExIEBACisjIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0RldGVjdCByZWN1cnNpdmUgaW5j
bHVzaW9uIGVycm9yLgorCitJZiByZWN1cnNpdmUgaW5jbHVzaW9uIGlzIGRldGVjdGVkLCBpdCBz
aG91bGQgZmFpbCB3aXRoIGVycm9yIG1lc3NhZ2VzLgorIiIiCisKKworZGVmIHRlc3QoY29uZik6
CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgIT0gMAorICAgIGFzc2VydCBjb25mLnN0
ZGVycl9jb250YWlucygnZXhwZWN0ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnIKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3MGEzMQotLS0gL2Rldi9udWxsCisr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRf
c3RkZXJyCkBAIC0wLDAgKzEsNiBAQAorUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC4KK0lu
Y2x1c2lvbiBwYXRoOgorICBjdXJyZW50IGZpbGUgOiBLY29uZmlnLmluYzEKKyAgaW5jbHVkZWQg
ZnJvbTogS2NvbmZpZy5pbmMzOjIKKyAgaW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMyOjQKKyAg
aW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMxOjUKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2ludGVyX2Nob2ljZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjU2OThhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2ludGVyX2Nob2ljZS9LY29uZmlnCkBAIC0wLDAgKzEsMjUgQEAKKyMgU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKworY29uZmlnIE1PRFVMRVMKKwlkZWZfYm9vbCB5CisJb3B0aW9u
IG1vZHVsZXMKKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UiCisKK2NvbmZpZyBDSE9JQ0VfVkFM
MAorCXRyaXN0YXRlICJDaG9pY2UgMCIKKworY29uZmlnIENIT0lWRV9WQUwxCisJdHJpc3RhdGUg
IkNob2ljZSAxIgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJBbm90aGVyIGNob2lj
ZSIKKwlkZXBlbmRzIG9uIENIT0lDRV9WQUwwCisKK2NvbmZpZyBEVU1NWQorCWJvb2wgImR1bW15
IgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50
ZXJfY2hvaWNlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9j
aG9pY2UvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZl
YTZiMQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJf
Y2hvaWNlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjAKKyIiIgorRG8gbm90IGFmZmVjdCB1c2VyLWFzc2lnbmVkIGNob2ljZSB2
YWx1ZSBieSBhbm90aGVyIGNob2ljZS4KKworSGFuZGxpbmcgb2Ygc3RhdGUgZmxhZ3MgZm9yIGNo
b2ljZXMgaXMgY29tcGxlY2F0ZWQuICBJbiBvbGQgZGF5cywKK3RoZSBkZWZjb25maWcgcmVzdWx0
IG9mIGEgY2hvaWNlIGNvdWxkIGJlIGFmZmVjdGVkIGJ5IGFub3RoZXIgY2hvaWNlCitpZiB0aG9z
ZSBjaG9pY2VzIGludGVyYWN0IGJ5ICdkZXBlbmRzIG9uJywgJ3NlbGVjdCcsIGV0Yy4KKworUmVs
YXRlZCBMaW51eCBjb21taXQ6IGZiZTk4YmI5ZWQzZGFlMjNlMzIwYzZiMTEzZTM1ZjEyOTUzOGQx
NGEKKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLmRlZmNvbmZpZygn
ZGVmY29uZmlnJykgPT0gMAorICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0
ZWRfY29uZmlnJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJf
Y2hvaWNlL2RlZmNvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNl
L2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJjNDE0Ci0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2Uv
ZGVmY29uZmlnCkBAIC0wLDAgKzEgQEAKK0NPTkZJR19DSE9JQ0VfVkFMMD15CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWRjZWVmYgotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2Nv
bmZpZwpAQCAtMCwwICsxLDQgQEAKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19DSE9JQ0VfVkFM
MD15CisjIENPTkZJR19DSE9JVkVfVkFMMSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVk9eQpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tj
b25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2Nv
bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjc3MzFjCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVw
L0tjb25maWcKQEAgLTAsMCArMSwzOSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMAorCitjb25maWcgQQorCWJvb2wgIkEiCisJaGVscAorCSAgVGhpcyBpcyBhIG5ldyBzeW1i
b2wuCisKK2Nob2ljZQorCXByb21wdCAiQ2hvaWNlID8iCisJZGVwZW5kcyBvbiBBCisJaGVscAor
CSAgImRlcGVuZHMgb24gQSIgaGFzIGJlZW4gbmV3bHkgYWRkZWQuCisKK2NvbmZpZyBDSE9JQ0Vf
QgorCWJvb2wgIkNob2ljZSBCIgorCitjb25maWcgQ0hPSUNFX0MKKwlib29sICJDaG9pY2UgQyIK
KwloZWxwCisJICBUaGlzIGlzIGEgbmV3IHN5bWJvbCwgc28gc2hvdWxkIGJlIGFza2VkLgorCitl
bmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UyID8iCisKK2NvbmZpZyBDSE9JQ0Vf
RAorCWJvb2wgIkNob2ljZSBEIgorCitjb25maWcgQ0hPSUNFX0UKKwlib29sICJDaG9pY2UgRSIK
KworY29uZmlnIENIT0lDRV9GCisJYm9vbCAiQ2hvaWNlIEYiCisJZGVwZW5kcyBvbiBBCisJaGVs
cAorCSAgVGhpcyBpcyBhIG5ldyBzeW1ib2wsIHNvIHNob3VsZCBiZSBhc2tlZC4KKworZW5kY2hv
aWNlCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0
aF9kZXAvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZmU5ZDMyMgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3
X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDE1IEBACisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0FzayBuZXcgY2hvaWNlIHZhbHVlcyB3aGVu
IHRoZXkgYmVjb21lIHZpc2libGUuCisKK0lmIG5ldyBjaG9pY2UgdmFsdWVzIGFyZSBhZGRlZCB3
aXRoIG5ldyBkZXBlbmRlbmN5LCBhbmQgdGhleSBiZWNvbWUKK3Zpc2libGUgZHVyaW5nIHVzZXIg
Y29uZmlndXJhdGlvbiwgb2xkY29uZmlnIHNob3VsZCByZWNvZ25pemUgdGhlbQorYXMgKE5FVyks
IGFuZCBhc2sgdGhlIHVzZXIgZm9yIGNob2ljZS4KKworUmVsYXRlZCBMaW51eCBjb21taXQ6IDVk
MDk1OThkNDg4ZjA4MWUzYmUyM2Y4ODVlZDY1Y2JiZTJkMDczYjUKKyIiIgorCisKK2RlZiB0ZXN0
KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGNvbmZpZygnY29uZmlnJywgJ3knKSA9PSAwCisg
ICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQnKQpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZp
ZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZjk1ZAotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25m
aWcKQEAgLTAsMCArMSwzIEBACitDT05GSUdfQ0hPSUNFX0I9eQorIyBDT05GSUdfQ0hPSUNFX0Qg
aXMgbm90IHNldAorQ09ORklHX0NIT0lDRV9FPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZGMwYmMKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0
ZWRfc3Rkb3V0CkBAIC0wLDAgKzEsMTAgQEAKK0EgKEEpIFtOL3kvP10gKE5FVykgeQorICBDaG9p
Y2UgPworICA+IDEuIENob2ljZSBCIChDSE9JQ0VfQikKKyAgICAyLiBDaG9pY2UgQyAoQ0hPSUNF
X0MpIChORVcpCisgIGNob2ljZVsxLTI/XTogCitDaG9pY2UyID8KKyAgMS4gQ2hvaWNlIEQgKENI
T0lDRV9EKQorPiAyLiBDaG9pY2UgRSAoQ0hPSUNFX0UpCisgIDMuIENob2ljZSBGIChDSE9JQ0Vf
RikgKE5FVykKK2Nob2ljZVsxLTM/XTogCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi40NzY3YWFiCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwpAQCAtMCwwICsxLDE2
IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK2NvbmZpZyBBCisJYm9v
bCAiQSIKKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UgPyIKKwlkZXBlbmRzIG9uIEEKKworY29u
ZmlnIENIT0lDRV9CCisJYm9vbCAiQ2hvaWNlIEIiCisKK2NvbmZpZyBDSE9JQ0VfQworCWJvb2wg
IkNob2ljZSBDIgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkNDY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5CkBA
IC0wLDAgKzEsMjAgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgor
RG8gbm90IHdyaXRlIGNob2ljZSB2YWx1ZXMgdG8gLmNvbmZpZyBpZiB0aGUgZGVwZW5kZW5jeSBp
cyB1bm1ldC4KKworIiMgQ09ORklHXy4uLiBpcyBub3Qgc2V0IiBzaG91bGQgbm90IGJlIHdyaXR0
ZW4gaW50byB0aGUgLmNvbmZpZyBmaWxlCitmb3Igc3ltYm9scyB3aXRoIHVubWV0IGRlcGVuZGVu
Y3kuCisKK1RoaXMgd2FzIG5vdCB3b3JraW5nIGNvcnJlY3RseSBmb3IgY2hvaWNlIHZhbHVlcyBi
ZWNhdXNlIGNob2ljZSBuZWVkcworYSBiaXQgZGlmZmVyZW50IHN5bWJvbCBjb21wdXRhdGlvbi4K
KworVGhpcyBjaGVja3MgdGhhdCBubyB1bm5lZWRlZCAiIyBDT0ZJR18uLi4gaXMgbm90IHNldCIg
aXMgY29udGFpbmVkIGluCit0aGUgLmNvbmZpZyBmaWxlLgorCitSZWxhdGVkIExpbnV4IGNvbW1p
dDogY2I2N2FiMmNkMmI4YWJkOTY1MDI5MmM5ODZjNzk5MDFlMzA3M2E1OQorIiIiCisKKworZGVm
IHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCdjb25maWcnLCAnbicp
ID09IDAKKyAgICBhc3NlcnQgY29uZi5jb25maWdfbWF0Y2hlcygnZXhwZWN0ZWRfY29uZmlnJykK
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3Vu
bWV0L2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3Vu
bWV0L2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQyODBlCi0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvY29uZmlnCkBAIC0wLDAgKzEgQEAKK0NPTkZJR19BPXkKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2Nv
bmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4
cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMyMjg4
Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9p
Zl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnCkBAIC0wLDAgKzEsNSBAQAorIworIyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJVC4KKyMgTWFpbiBtZW51CisjCisjIENP
TkZJR19BIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iYWEzMjg4Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnCkBAIC0wLDAgKzEsMjcg
QEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworIyAnaW5mbycgcHJpbnRz
IHRoZSBhcmd1bWVudCB0byBzdGRvdXQuCiskKGluZm8saGVsbG8gd29ybGQgMCkKKworIyAnd2Fy
bmluZy1pZicsIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB5LCBzZW5kcyB0aGUgc2Vjb25kIGFy
Z3VtZW50IHRvIHN0ZGVyciwKKyMgYW5kIHRoZSBtZXNzYWdlIGlzIHByZWZpeGVkIHdpdGggdGhl
IGN1cnJlbnQgZmlsZSBuYW1lIGFuZCBsaW5lIG51bWJlci4KKyQod2FybmluZy1pZix5LGhlbGxv
IHdvcmxkIDEpCisKKyMgJ2Vycm9yLWlmJyBpcyBzaW1pbGFyLCBidXQgaXQgdGVybWluYXRlcyB0
aGUgcGFyc2luZyBpbW1lZGlhdGVseS4KKyMgVGhlIGZvbGxvd2luZyBpcyBqdXN0IG5vLW9wIHNp
bmNlIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgeS4KKyQoZXJyb3ItaWYsbix0aGlzIHNob3Vs
ZCBub3QgYmUgcHJpbnRlZCkKKworIyBTaG9ydGhhbmQKK3dhcm5pbmcgPSAkKHdhcm5pbmctaWYs
eSwkKDEpKQorCisjICdzaGVsbCcgZXhlY3V0ZXMgYSBjb21tYW5kLCBhbmQgcmV0dXJucyBpdHMg
c3Rkb3V0LgorJCh3YXJuaW5nLCQoc2hlbGwsZWNobyBoZWxsbyB3b3JsZCAzKSkKKworIyBFdmVy
eSBuZXdsaW5lIGluIHRoZSBvdXRwdXQgaXMgcmVwbGFjZWQgd2l0aCBhIHNwYWNlLAorIyBidXQg
YW55IHRyYWlsaW5nIG5ld2xpbmVzIGFyZSBkZWxldGVkLgorJCh3YXJuaW5nLCQoc2hlbGwscHJp
bnRmICdoZWxsb1xud29ybGRcblxuNFxuXG5cbicpKQorCisjICdmaWxlbmFtZScgaXMgZXhwYW5k
ZWQgdG8gdGhlIGN1cnJlbnRseSBwYXJzZWQgZmlsZSBuYW1lLAorIyAnbGluZW5vJyB0byB0aGUg
bGluZSBudW1iZXIuCiskKHdhcm5pbmcsZmlsZW5hbWU9JChmaWxlbmFtZSkpCiskKHdhcm5pbmcs
bGluZW5vPSQobGluZW5vKSkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTNiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5CkBA
IC0wLDAgKzEsOSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitC
dWlsdC1pbiBmdW5jdGlvbiB0ZXN0cy4KKyIiIgorCitkZWYgdGVzdChjb25mKToKKyAgICBhc3Nl
cnQgY29uZi5vbGRhc2tjb25maWcoKSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRh
aW5zKCdleHBlY3RlZF9zdGRvdXQnKQorICAgIGFzc2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdl
eHBlY3RlZF9zdGRlcnInKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9w
cmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VhOWNhCi0tLSAvZGV2L251bGwKKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3Rl
ZF9zdGRlcnIKQEAgLTAsMCArMSw1IEBACitLY29uZmlnOjg6IGhlbGxvIHdvcmxkIDEKK0tjb25m
aWc6MTg6IGhlbGxvIHdvcmxkIDMKK0tjb25maWc6MjI6IGhlbGxvIHdvcmxkICA0CitLY29uZmln
OjI2OiBmaWxlbmFtZT1LY29uZmlnCitLY29uZmlnOjI3OiBsaW5lbm89MjcKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0
ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5f
ZnVuYy9leHBlY3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODJkZTNhNwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0CkBAIC0wLDAgKzEgQEAKK2hlbGxv
IHdvcmxkIDAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vz
cy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi42ODM4OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnCkBAIC0w
LDAgKzEsNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitYID0gJChZ
KQorWSA9ICQoWCkKKyQoaW5mbyAkKFgpKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weSBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0
X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE5YmRhMwotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxh
cl9leHBhbnNpb24vX19pbml0X18ucHkKQEAgLTAsMCArMSwxMSBAQAorIyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitEZXRlY3QgY2lyY3VsYXIgdmFyaWFibGUgZXhwYW5z
aW9uLgorCitJZiBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlIHJlZmVyZW5jZXMgaXRz
ZWxmIChldmVudHVhbGx5KSwKK2l0IHNob3VsZCBmYWlsIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4K
KyIiIgorCitkZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSAh
PSAwCisgICAgYXNzZXJ0IGNvbmYuc3RkZXJyX21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJf
ZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZTY4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVk
X3N0ZGVycgpAQCAtMCwwICsxIEBACitLY29uZmlnOjU6IFJlY3Vyc2l2ZSB2YXJpYWJsZSAnWCcg
cmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGUzZjQ0NAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZwpAQCAtMCwwICsxLDQ0IEBACisj
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgU2hvcnRoYW5kCit3YXJuaW5n
ID0gJCh3YXJuaW5nLWlmLHksJCgxKSkKKworIyBZb3UgY2FuIG5vdCBwYXNzIGNvbW1hcyBkaXJl
Y3RseSB0byBhIGZ1bmN0aW9uIHNpbmNlIHRoZXkgYXJlIHRyZWF0ZWQgYXMKKyMgZGVsaW1pdGVy
cy4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0cmljayB0byBkbyBzby4KK2NvbW1hICAgOj0g
LAorJCh3YXJuaW5nLGhlbGxvJChjb21tYSkgd29ybGQpCisKKyMgTGlrZSBNYWtlLCBzaW5nbGUg
cXVvdGVzLCBkb3VibGUgcXVvdGVzLCBzcGFjZXMgYXJlIHRyZWF0ZWQgdmVyYmF0aW0uCisjIFRo
ZSBmb2xsb3dpbmcgcHJpbnRzIHRoZSB0ZXh0IGFzLWlzLgorJCh3YXJuaW5nLCAgJyAiICciICAg
JyAnJycgIiciKQorCisjIFVubGlrZSBNYWtlLCAnJCcgaGFzIHNwZWNpYWwgbWVhbmluZyBvbmx5
IHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgJygnLgorIyBObyBuZWVkIHRvIGVzY2FwZSAnJCcgaXRz
ZWxmLgorJCh3YXJuaW5nLCQpCiskKHdhcm5pbmcsJCQpCiskIDo9IDEKKyQod2FybmluZywkKCQp
KQorCisjIFlvdSBuZWVkIGEgdHJpY2sgdG8gZXNjYXBlICckJyBmb2xsb3dlZCBieSAnKCcKKyMg
VGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiLiBJdCBzaG91bGQgbm90IGJlIGV4cGFu
ZGVkIGZ1cnRoZXIuCitkb2xsYXIgOj0gJAorJCh3YXJuaW5nLCQoZG9sbGFyKShYKSkKKworIyBZ
b3UgbmVlZCBhIHRyaWNrIHRvIHRyZWF0IHVuYmFsYW5jZWQgcGFyZW50aGVzZXMuCisjIFRoZSBm
b2xsb3dpbmcgc2hvdWxkIHByaW50ICIoIi4KK2xlZnRfcGFyZW4gOj0gKAorJCh3YXJuaW5nLCQo
bGVmdF9wYXJlbikpCisKKyMgQSBzaW1wbGUgZXhwYW5kZWQgc2hvdWxkIG5vdCBiZSBleHBhbmRl
ZCBtdWx0aXBsZSB0aW1lcy4KKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiLiBJ
dCBzaG91bGQgbm90IGJlIGV4cGFuZGVkIGZ1cnRoZXIuCitZIDo9ICQoZG9sbGFyKShYKQorJCh3
YXJuaW5nLCQoWSkpCisKKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCkiIGFzIHdl
bGwuCitZID0gJChkb2xsYXIpKFgpCiskKHdhcm5pbmcsJChZKSkKKworIyBUaGUgZm9sbG93aW5n
IHNob3VsZCBwcmludCAiJCgiLgorIyBJdCBzaG91bGQgbm90IGJlIGVtaXQgInVudGVybWluYXRl
ZCByZWZlcmVuY2UiIGVycm9yLgordW50ZXJtaW5hdGVkIDo9ICQoZG9sbGFyKSgKKyQod2Fybmlu
ZywkKHVudGVybWluYXRlZCkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43ZWU4ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDggQEAKKyMg
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgorRXNjYXBlIHNlcXVlbmNlIHRl
c3RzLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZp
ZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRfc3RkZXJy
JykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2Nh
cGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNz
L2VzY2FwZS9leHBlY3RlZF9zdGRlcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWMwMDk1NwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3RkZXJyCkBAIC0wLDAgKzEsMTAgQEAKK0tjb25m
aWc6OTogaGVsbG8sIHdvcmxkCitLY29uZmlnOjEzOiAgICcgIiAnIiAgICcgJycnICInIgorS2Nv
bmZpZzoxNzogJAorS2NvbmZpZzoxODogJCQKK0tjb25maWc6MjA6IDEKK0tjb25maWc6MjU6ICQo
WCkKK0tjb25maWc6MzA6ICgKK0tjb25maWc6MzU6ICQoWCkKK0tjb25maWc6Mzk6ICQoWCkKK0tj
b25maWc6NDQ6ICQoCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJv
Y2Vzcy92YXJpYWJsZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjljZTJmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3By
ZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZwpAQCAtMCwwICsxLDUzIEBACisjIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKyMgU2hvcnRoYW5kCit3YXJuaW5nID0gJCh3YXJuaW5n
LWlmLHksJCgxKSkKKworIyBTaW1wbHkgZXhwYW5kZWQgdmFyaWFibGUuCitYIDo9IDEKK1NJTVBM
RSA6PSAkKFgpCitYIDo9IDIKKyQod2FybmluZyxTSU1QTEUgPSAkKFNJTVBMRSkpCisKKyMgUmVj
dXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUuCitYIDo9IDEKK1JFQ1VSU0lWRSA9ICQoWCkKK1gg
Oj0gMgorJCh3YXJuaW5nLFJFQ1VSU0lWRSA9ICQoUkVDVVJTSVZFKSkKKworIyBBcHBlbmQgc29t
ZXRoaW5nIHRvIGEgc2ltcGx5IGV4cGFuZGVkIHZhcmlhYmxlLgorWSA6PSAzCitTSU1QTEUgKz0g
JChZKQorWSA6PSA0CiskKHdhcm5pbmcsU0lNUExFID0gJChTSU1QTEUpKQorCisjIEFwcGVuZCBz
b21ldGhpbmcgdG8gYSByZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJsZS4KK1kgOj0gMworUkVD
VVJTSVZFICs9ICQoWSkKK1kgOj0gNAorJCh3YXJuaW5nLFJFQ1VSU0lWRSA9ICQoUkVDVVJTSVZF
KSkKKworIyBVc2UgKz0gb3BlcmF0b3IgdG8gYW4gdW5kZWZpbmVkIHZhcmlhYmxlLgorIyBUaGlz
IHdvcmtzIGFzIGEgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUuCitZIDo9IDMKK1VOREVG
SU5FRF9WQVJJQUJMRSArPSAkKFkpCitZIDo9IDQKKyQod2FybmluZyxVTkRFRklORURfVkFSSUFC
TEUgPSAkKFVOREVGSU5FRF9WQVJJQUJMRSkpCisKKyMgWW91IGNhbiB1c2UgdmFyaWFibGUgcmVm
ZXJlbmNlcyBmb3IgdGhlIGxlZnRoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBzdGF0ZW1lbnQuCitY
IDo9IEEKK1kgOj0gQgorJChYKSQoWSkgOj0gNQorJCh3YXJuaW5nLEFCID0gJChBQikpCisKKyMg
VXNlci1kZWZpbmVkIGZ1bmN0aW9uLgorZ3JlZXRpbmcgPSAkKDEpLCBteSBuYW1lIGlzICQoMiku
CiskKHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2huKSkKKworIyBUaGUgbnVtYmVyIG9mIGFy
Z3VtZW50cyBpcyBub3QgY2hlY2tlZCBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4KKyMgSWYg
c29tZSBhcmd1bWVudHMgYXJlIG9wdGlvbmFsLCBpdCBpcyB1c2VmdWwgdG8gcGFzcyBmZXdlciBw
YXJhbWV0ZXJzLgorIyAkKDIpIHdpbGwgYmUgYmxhbmsgaW4gdGhpcyBjYXNlLgorJCh3YXJuaW5n
LCQoZ3JlZXRpbmcsSGVsbG8pKQorCisjIFVucmVmZXJlbmNlZCBwYXJhbWV0ZXJzIGFyZSBqdXN0
IGlnbm9yZWQuCiskKHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2huLGlnbm9yZWQsaWdub3Jl
ZCkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFy
aWFibGUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3Mv
dmFyaWFibGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZTg4YjE3MAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weQpAQCAtMCwwICsxLDggQEAKKyMgU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgorVmFyaWFibGUgYW5kIHVzZXItZGVmaW5lZCBm
dW5jdGlvbiB0ZXN0cy4KKyIiIgorCitkZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5v
bGRhc2tjb25maWcoKSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuc3RkZXJyX21hdGNoZXMoJ2V4cGVj
dGVkX3N0ZGVycicpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hNDg0MWMzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgpAQCAtMCww
ICsxLDkgQEAKK0tjb25maWc6MTA6IFNJTVBMRSA9IDEKK0tjb25maWc6MTY6IFJFQ1VSU0lWRSA9
IDIKK0tjb25maWc6MjI6IFNJTVBMRSA9IDEgMworS2NvbmZpZzoyODogUkVDVVJTSVZFID0gMiA0
CitLY29uZmlnOjM1OiBVTkRFRklORURfVkFSSUFCTEUgPSA0CitLY29uZmlnOjQxOiBBQiA9IDUK
K0tjb25maWc6NDU6IEhlbGxvLCBteSBuYW1lIGlzIEpvaG4uCitLY29uZmlnOjUwOiBIZWxsbywg
bXkgbmFtZSBpcyAuCitLY29uZmlnOjUzOiBIZWxsbywgbXkgbmFtZSBpcyBKb2huLgpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjg1ZDdjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3B5dGVzdC5pbmkKQEAgLTAsMCArMSw3IEBACitbcHl0ZXN0XQorYWRkb3B0cyA9IC0tdmVyYm9z
ZQorCisjIFB5dGVzdCByZXF1aXJlcyB0aGF0IHRlc3QgZmlsZXMgaGF2ZSB1bmlxdWUgbmFtZXMs
IGJlY2F1c2UgcHl0ZXN0IGltcG9ydHMKKyMgdGhlbSBhcyB0b3AtbGV2ZWwgbW9kdWxlcy4gIEl0
IGlzIHNpbGx5IHRvIHByZWZpeCBvciBzdWZmaXggYSB0ZXN0IGZpbGUgd2l0aAorIyB0aGUgZGly
ZWN0b3J5IG5hbWUgdGhhdCBjb250YWlucyBpdC4gIFVzZSBfX2luaXRfXy5weSBmb3IgYWxsIHRl
c3QgZmlsZXMuCitweXRob25fZmlsZXMgPSBfX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1MGRlNwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcKQEAgLTAsMCAr
MSwzNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitjaG9pY2UKKwlw
cm9tcHQgImNob2ljZSIKKworY29uZmlnIEEKKwlib29sICJBIgorCitjb25maWcgQgorCWJvb2wg
IkIiCisKK2lmIEIKK2Nob2ljZQorCXByb21wdCAic3ViIGNob2ljZSIKKworY29uZmlnIEMKKwli
b29sICJDIgorCitjb25maWcgRAorCWJvb2wgIkQiCisKK2lmIEQKK2Nob2ljZQorCXByb21wdCAi
c3Vic3ViIGNob2ljZSIKKworY29uZmlnIEUKKwlib29sICJFIgorCitlbmRjaG9pY2UKK2VuZGlm
ICMgRAorCitlbmRjaG9pY2UKK2VuZGlmICMgQgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5IGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0YjJkYgotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5p
dF9fLnB5CkBAIC0wLDAgKzEsMTcgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjAKKyIiIgorU2V0IHJhbmRvbSB2YWx1ZXMgcmVjdXJzaXZlbHkgaW4gbmVzdGVkIGNob2ljZXMu
CisKK0tjb25maWcgY2FuIGNyZWF0ZSBhIGNob2ljZS1pbi1jaG9pY2Ugc3RydWN0dXJlIGJ5IHVz
aW5nICdpZicgc3RhdGVtZW50LgorcmFuZGNvbmZpZyBzaG91bGQgY29ycmVjdGx5IHNldCByYW5k
b20gY2hvaWNlIHZhbHVlcy4KKworUmVsYXRlZCBMaW51eCBjb21taXQ6IDNiOWExOWUwODk2MGU1
Y2RhZDUyNTM5OTg2Mzc2NTNlNTkyYTNjMjkKKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAg
IGZvciBpIGluIHJhbmdlKDIwKToKKyAgICAgICAgYXNzZXJ0IGNvbmYucmFuZGNvbmZpZygpID09
IDAKKyAgICAgICAgYXNzZXJ0IChjb25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0
MCcpIG9yCisgICAgICAgICAgICAgICAgY29uZi5jb25maWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0
ZG91dDEnKSBvcgorICAgICAgICAgICAgICAgIGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3Rl
ZF9zdGRvdXQyJykpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRf
bmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wNTQ1MGYzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MApAQCAtMCww
ICsxLDIgQEAKK0NPTkZJR19BPXkKKyMgQ09ORklHX0IgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVj
dGVkX3N0ZG91dDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhYjI5NQot
LS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRf
Y2hvaWNlL2V4cGVjdGVkX3N0ZG91dDEKQEAgLTAsMCArMSw0IEBACisjIENPTkZJR19BIGlzIG5v
dCBzZXQKK0NPTkZJR19CPXkKK0NPTkZJR19DPXkKKyMgQ09ORklHX0QgaXMgbm90IHNldApkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhw
ZWN0ZWRfc3Rkb3V0MiBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hv
aWNlL2V4cGVjdGVkX3N0ZG91dDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ODQ5ZmY0NwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFu
ZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIKQEAgLTAsMCArMSw1IEBACisjIENPTkZJ
R19BIGlzIG5vdCBzZXQKK0NPTkZJR19CPXkKKyMgQ09ORklHX0MgaXMgbm90IHNldAorQ09ORklH
X0Q9eQorQ09ORklHX0U9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yOTU4NTM5Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy91
dGlsLmMKQEAgLTAsMCArMSwxMjkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgUm9tYW4gWmlwcGVsIDx6aXBwZWxA
bGludXgtbTY4ay5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBTYW0gUmF2bmJvcmcg
PHNhbUByYXZuYm9yZy5vcmc+CisgKi8KKworI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxrYy5oIgorCisvKiBm
aWxlIGFscmVhZHkgcHJlc2VudCBpbiBsaXN0PyBJZiBub3QgYWRkIGl0ICovCitzdHJ1Y3QgZmls
ZSAqZmlsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsK
KworCWZvciAoZmlsZSA9IGZpbGVfbGlzdDsgZmlsZTsgZmlsZSA9IGZpbGUtPm5leHQpIHsKKwkJ
aWYgKCFzdHJjbXAobmFtZSwgZmlsZS0+bmFtZSkpIHsKKwkJCXJldHVybiBmaWxlOworCQl9CisJ
fQorCisJZmlsZSA9IHhtYWxsb2Moc2l6ZW9mKCpmaWxlKSk7CisJbWVtc2V0KGZpbGUsIDAsIHNp
emVvZigqZmlsZSkpOworCWZpbGUtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCWZpbGUtPm5leHQg
PSBmaWxlX2xpc3Q7CisJZmlsZV9saXN0ID0gZmlsZTsKKwlyZXR1cm4gZmlsZTsKK30KKworLyog
QWxsb2NhdGUgaW5pdGlhbCBncm93YWJsZSBzdHJpbmcgKi8KK3N0cnVjdCBnc3RyIHN0cl9uZXco
dm9pZCkKK3sKKwlzdHJ1Y3QgZ3N0ciBnczsKKwlncy5zID0geG1hbGxvYyhzaXplb2YoY2hhcikg
KiA2NCk7CisJZ3MubGVuID0gNjQ7CisJZ3MubWF4X3dpZHRoID0gMDsKKwlzdHJjcHkoZ3Mucywg
IlwwIik7CisJcmV0dXJuIGdzOworfQorCisvKiBGcmVlIHN0b3JhZ2UgZm9yIGdyb3dhYmxlIHN0
cmluZyAqLwordm9pZCBzdHJfZnJlZShzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJaWYgKGdzLT5zKQor
CQlmcmVlKGdzLT5zKTsKKwlncy0+cyA9IE5VTEw7CisJZ3MtPmxlbiA9IDA7Cit9CisKKy8qIEFw
cGVuZCB0byBncm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX2FwcGVuZChzdHJ1Y3QgZ3N0ciAq
Z3MsIGNvbnN0IGNoYXIgKnMpCit7CisJc2l6ZV90IGw7CisJaWYgKHMpIHsKKwkJbCA9IHN0cmxl
bihncy0+cykgKyBzdHJsZW4ocykgKyAxOworCQlpZiAobCA+IGdzLT5sZW4pIHsKKwkJCWdzLT5z
ID0geHJlYWxsb2MoZ3MtPnMsIGwpOworCQkJZ3MtPmxlbiA9IGw7CisJCX0KKwkJc3RyY2F0KGdz
LT5zLCBzKTsKKwl9Cit9CisKKy8qIEFwcGVuZCBwcmludGYgZm9ybWF0dGVkIHN0cmluZyB0byBn
cm93YWJsZSBzdHJpbmcgKi8KK3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0
IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciBzWzEwMDAwXTsgLyogYmln
IGVub3VnaC4uLiAqLworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzbnByaW50ZihzLCBzaXplb2Yo
cyksIGZtdCwgYXApOworCXN0cl9hcHBlbmQoZ3MsIHMpOworCXZhX2VuZChhcCk7Cit9CisKKy8q
IFJldHJpZXZlIHZhbHVlIG9mIGdyb3dhYmxlIHN0cmluZyAqLworY29uc3QgY2hhciAqc3RyX2dl
dChzdHJ1Y3QgZ3N0ciAqZ3MpCit7CisJcmV0dXJuIGdzLT5zOworfQorCit2b2lkICp4bWFsbG9j
KHNpemVfdCBzaXplKQoreworCXZvaWQgKnAgPSBtYWxsb2Moc2l6ZSk7CisJaWYgKHApCisJCXJl
dHVybiBwOworCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOworCWV4aXQoMSk7
Cit9CisKK3ZvaWQgKnhjYWxsb2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSkKK3sKKwl2b2lk
ICpwID0gY2FsbG9jKG5tZW1iLCBzaXplKTsKKwlpZiAocCkKKwkJcmV0dXJuIHA7CisJZnByaW50
ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisJZXhpdCgxKTsKK30KKwordm9pZCAqeHJl
YWxsb2Modm9pZCAqcCwgc2l6ZV90IHNpemUpCit7CisJcCA9IHJlYWxsb2MocCwgc2l6ZSk7CisJ
aWYgKHApCisJCXJldHVybiBwOworCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIp
OworCWV4aXQoMSk7Cit9CisKK2NoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcykKK3sKKwljaGFy
ICpwOworCisJcCA9IHN0cmR1cChzKTsKKwlpZiAocCkKKwkJcmV0dXJuIHA7CisJZnByaW50Zihz
dGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisJZXhpdCgxKTsKK30KKworY2hhciAqeHN0cm5k
dXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pCit7CisJY2hhciAqcDsKKworCXAgPSBzdHJuZHVw
KHMsIG4pOworCWlmIChwKQorCQlyZXR1cm4gcDsKKwlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBt
ZW1vcnkuXG4iKTsKKwlleGl0KDEpOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy96Y29uZi5sZXguYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYubGV4LmMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1ODc3NgotLS0gL2Rldi9udWxsCisrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvemNvbmYubGV4LmMKQEAgLTAsMCArMSwyODIwIEBACisKKyNkZWZp
bmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisvKiBBIGxleGljYWwgc2Nhbm5lciBnZW5l
cmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhfU0NBTk5FUgorI2RlZmluZSBZWV9GTEVY
X01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNgorI2RlZmlu
ZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMQorI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lP
TiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKworLyogRmlyc3QsIHdlIGRlYWwgd2l0
aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLworCisv
KiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgor
CisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisvKiBmbGV4IGludGVnZXIgdHlwZSBk
ZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAorI2RlZmluZSBGTEVYSU5UX0gKKwor
LyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3Ig
bWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19W
RVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlU
X01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAorICogaWYgeW91IHdhbnQgdGhlIGxp
bWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCisgKi8KKyNpZm5kZWYgX19TVERD
X0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKKyNlbmRpZgorCisj
aW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwordHlwZWRl
ZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Cit0
eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVmIGludDMyX3QgZmxleF9pbnQz
Ml90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OworI2Vsc2UKK3R5cGVkZWYgc2ln
bmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Cit0
eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50
OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Cit0eXBlZGVm
IHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlw
ZXMuICovCisjaWZuZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAg
KC0xMjgpCisjZW5kaWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAg
ICAgICAgICAgKC0zMjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJ
TlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElO
VDhfTUFYCisjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lm
bmRlZiBJTlQxNl9NQVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisj
ZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAg
KDIxNDc0ODM2NDcpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01B
WCAgICAgICAgICAgICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmlu
ZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMy
X01BWAorI2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRp
ZgorCisjZW5kaWYgLyogISBDOTkgKi8KKworI2VuZGlmIC8qICEgRkxFWElOVF9IICovCisKKy8q
IFRPRE86IHRoaXMgaXMgYWx3YXlzIGRlZmluZWQsIHNvIGlubGluZSBpdCAqLworI2RlZmluZSB5
eWNvbnN0IGNvbnN0CisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisj
ZGVmaW5lIHl5bm9yZXR1cm4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNlbHNlCisj
ZGVmaW5lIHl5bm9yZXR1cm4KKyNlbmRpZgorCisvKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxl
LiAqLworI2RlZmluZSBZWV9OVUxMIDAKKworLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2
ZSwgcG9zc2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKKyAqIGludGVnZXIgZm9yIHVz
ZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKKyAq
IHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBo
ZW5jZSB0aGUKKyAqIGRvdWJsZSBjYXN0LgorICovCisjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgo
dW5zaWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKKworLyogRW50ZXIgYSBzdGFydCBjb25k
aXRpb24uICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICog
YnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRo
ZSAoKS1sZXNzCisgKiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOICh5
eV9zdGFydCkgPSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0
ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byBy
ZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29t
cGF0aWJpbGl0eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKCh5eV9zdGFydCkgLSAxKSAvIDIp
CisjZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1
bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRl
KSAoWVlfRU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVh
bmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJ
TEUgeXlyZXN0YXJ0KHl5aW4gICkKKworI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAor
CisvKiBTaXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLworI2lmbmRlZiBZWV9CVUZfU0la
RQorI2lmZGVmIF9faWE2NF9fCisvKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywg
bm90IDhrLgorICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBp
biB0aGUgZ2VuZXJhbCBjYXNlLgorICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29y
ZGluZ2x5LgorICovCisjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4CisjZWxzZQorI2RlZmluZSBZ
WV9CVUZfU0laRSAxNjM4NAorI2VuZGlmIC8qIF9faWE2NF9fICovCisjZW5kaWYKKworLyogVGhl
IHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hh
cmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0la
RSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRl
ZiBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZF
Ul9TVEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7
CisjZW5kaWYKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9UWVBF
REVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKK2V4dGVy
biBpbnQgeXlsZW5nOworCitleHRlcm4gRklMRSAqeXlpbiwgKnl5b3V0OworCisjZGVmaW5lIEVP
Ql9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQorI2Rl
ZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5
IG9taXQgdGhlIHRlc3QgZm9yIHl5X3J1bGVfY2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVp
cmVzCisgICAgICogICAgICAgYWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNp
bmNlIHl5bGVzcygpIGlzIGEgbWFjcm8sIGl0IHdvdWxkIGJyZWFrCisgICAgICogICAgICAgZXhp
c3Rpbmcgc2Nhbm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSB5eWxleC4KKyAg
ICAgKiAgICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2Jh
bC4gSSB0cmllZCB0aGF0LCBhbmQgc2F3CisgICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBo
aXQgaW4gYSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKKyAgICAgKiAg
ICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMg
bm90IHdvcnRoIGl0LgorICAgICAqLworICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwK
KyAgICAgICAgICAgIGRvIHsgXAorICAgICAgICAgICAgICAgIGludCB5eWw7XAorICAgICAgICAg
ICAgICAgIGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCisgICAgICAgICAgICAgICAgICAg
ICAgICAtLXl5bGluZW5vO1wKKyAgICAgICAgICAgIH13aGlsZSgwKQorICAgICNkZWZpbmUgWVlf
TElORU5PX1JFV0lORF9UTyhkc3QpIFwKKyAgICAgICAgICAgIGRvIHtcCisgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqcDtcCisgICAgICAgICAgICAgICAgZm9yICggcCA9IHl5X2NwLTE7IHAg
Pj0gKGRzdCk7IC0tcClcCisgICAgICAgICAgICAgICAgICAgIGlmICggKnAgPT0gJ1xuJyApXAor
ICAgICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCisgICAgICAgICAgICB9d2hpbGUo
MCkKKyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0
ZXJzIGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlk
byBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwK
KyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19M
SU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgXAor
CQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJKHl5X2NfYnVmX3ApID0geXlfY3AgPSB5
eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZPUkVf
QUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAwICkK
KworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCAoeXl0ZXh0X3B0cikgICkKKworI2lmbmRl
ZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsK
KworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9w
b3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBv
ZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICog
Y2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIgb2YgY2hh
cmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAqIGNoYXJh
Y3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdlICJvd24iIHRo
ZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNhbiByZWFs
bG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBkZWxldGUg
aXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVyIHRoaXMgaXMg
YW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3ZSdyZSB1
c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJICogaW5z
dGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRl
cgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7CisKKwkv
KiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxp
bmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRj
aCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisKKyAgICBpbnQg
eXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5eV9ic19jb2x1
bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKworCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZp
bGwgdGhlIGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQorCSAqIGVuZCBvZiBpdC4KKwkg
Ki8KKwlpbnQgeXlfZmlsbF9idWZmZXI7CisKKwlpbnQgeXlfYnVmZmVyX3N0YXR1czsKKworI2Rl
ZmluZSBZWV9CVUZGRVJfTkVXIDAKKyNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCisJLyogV2hl
biBhbiBFT0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nl
c3MKKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5k
aWNhdGUgdGhhdCB3ZQorCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBz
b3VyY2UgYW55IG1vcmUuICBXZSBtaWdodAorCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tl
bnMgdG8gbWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgorCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAu
CisJICoKKwkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0
YXR1cyB0byAibmV3IgorCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNh
biBjb250aW51ZSBzY2FubmluZyBieQorCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBp
bnB1dCBmaWxlLgorCSAqLworI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgorCisJfTsK
KyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLworCisvKiBTdGFjayBvZiBp
bnB1dCBidWZmZXJzLiAqLworc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wID0gMDsg
LyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9z
dGFja19tYXggPSAwOyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworc3RhdGljIFlZX0JVRkZF
Ul9TVEFURSAqIHl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXku
ICovCisKKy8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBp
biBjYXNlIGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVz
IGluIGEgbW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0
aGUgdG9wIG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JV
RkZFUiAoICh5eV9idWZmZXJfc3RhY2spIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyAo
eXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNl
ZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxMIG9y
IHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLworI2Rl
ZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgKHl5X2J1ZmZlcl9zdGFjaylbKHl5X2J1ZmZl
cl9zdGFja190b3ApXQorCisvKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0
IHdoZW4geXl0ZXh0IGlzIGZvcm1lZC4gKi8KK3N0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKK3N0
YXRpYyBpbnQgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5
eV9jaF9idWYgKi8KK2ludCB5eWxlbmc7CisKKy8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3Rl
ciBpbiBidWZmZXIuICovCitzdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IE5VTEw7CitzdGF0aWMg
aW50IHl5X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KK3N0
YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KKworLyogRmxh
ZyB3aGljaCBpcyB1c2VkIHRvIGFsbG93IHl5d3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVz
CisgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCB5eWluLiAgQSBiaXQgb2YgYSBoYWNr
IC4uLgorICovCitzdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKwordm9p
ZCB5eXJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7Cit2b2lkIHl5X3N3aXRjaF90b19idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOworWVlfQlVGRkVSX1NUQVRFIHl5X2Ny
ZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7Cit2b2lkIHl5X2RlbGV0ZV9idWZm
ZXIgKFlZX0JVRkZFUl9TVEFURSBiICApOwordm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZF
Ul9TVEFURSBiICApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUg
bmV3X2J1ZmZlciAgKTsKK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkICk7CisKK3N0YXRp
YyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCApOworc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgYixGSUxFICpmaWxlICApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5
eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKQorCitZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgICk7CitZWV9CVUZGRVJfU1RB
VEUgeXlfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICApOworWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAgKTsKKwordm9p
ZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICApOwordm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6
ZV90ICApOwordm9pZCB5eWZyZWUgKHZvaWQgKiAgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVy
IHl5X2NyZWF0ZV9idWZmZXIKKworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJh
Y3RpdmUpIFwKKwl7IFwKKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5
eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
ICAgXAorICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7IFwK
Kwl9IFwKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNf
aW50ZXJhY3RpdmU7IFwKKwl9CisKKyNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKKwl7IFwK
KwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCisgICAgICAgICAg
ICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCisJfQorCisjZGVmaW5lIFlZ
X0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKKworLyogQmVn
aW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHl5d3JhcCgpICgvKkNPTlNUQ09ORCovMSkKKyNk
ZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7CisK
K0ZJTEUgKnl5aW4gPSBOVUxMLCAqeXlvdXQgPSBOVUxMOworCit0eXBlZGVmIGludCB5eV9zdGF0
ZV90eXBlOworCitleHRlcm4gaW50IHl5bGluZW5vOworCitpbnQgeXlsaW5lbm8gPSAxOworCitl
eHRlcm4gY2hhciAqeXl0ZXh0OworI2lmZGVmIHl5dGV4dF9wdHIKKyN1bmRlZiB5eXRleHRfcHRy
CisjZW5kaWYKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHQKKworc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X254dFtdWzIxXSA9CisgICAgeworICAgIHsKKyAgICAgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwK
KyAgICAgICAgMAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgMTQsICAgMTUsICAgMTYs
ICAgMTQsICAgMTQsICAgMTcsICAgMTQsICAgMTQsICAgMTQsCisgICAgICAgMTQsICAgMTQsICAg
MTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCisgICAgICAgMTQK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE0LCAgIDE0
LCAgIDE3LCAgIDE0LCAgIDE0LCAgIDE0LAorICAgICAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAg
IDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LAorICAgICAgIDE0CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgICAxOCwgICAxOSwgICAyMCwgICAxOCwgICAxOCwgICAxOCwgICAy
MSwgICAxOCwgICAxOCwKKworICAgICAgIDE4LCAgIDE4LCAgIDIyLCAgIDIzLCAgIDE4LCAgIDI0
LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDE4LAorICAgICAgIDE4CisgICAgfSwKKworICAgIHsKKyAg
ICAgICAxMywgICAxOCwgICAxOSwgICAyMCwgICAxOCwgICAxOCwgICAxOCwgICAyMSwgICAxOCwg
ICAxOCwKKyAgICAgICAxOCwgICAxOCwgICAyMiwgICAyMywgICAxOCwgICAyNCwgICAxOCwgICAy
NSwgICAxOCwgICAxOCwKKyAgICAgICAxOAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAg
MjYsICAgMjcsICAgMjgsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsCisgICAg
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsCisgICAgICAgMjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDI2LCAgIDI3LCAg
IDI4LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorICAgICAgIDI2LCAgIDI2
LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LAorCisgICAg
ICAgMjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDI5LCAgIDI5LCAgIDMwLCAgIDI5
LCAgIDMxLCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMxLAorICAgICAgIDI5LCAgIDI5LCAgIDI5LCAg
IDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDMzLAorICAgICAgIDI5CisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgICAyOSwgICAyOSwgICAzMCwgICAyOSwgICAzMSwgICAy
OSwgICAzMiwgICAyOSwgICAzMSwKKyAgICAgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwg
ICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAzMywKKyAgICAgICAyOQorICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAg
NDEsICAgMzgsCisgICAgICAgNDIsICAgNDMsICAgMzQsICAgNDQsICAgNDQsICAgMzQsICAgNDUs
ICAgNDYsICAgNDcsICAgNDgsCisgICAgICAgNDkKKworICAgIH0sCisKKyAgICB7CisgICAgICAg
MTMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgMzgs
CisgICAgICAgNDIsICAgNDMsICAgMzQsICAgNDQsICAgNDQsICAgMzQsICAgNDUsICAgNDYsICAg
NDcsICAgNDgsCisgICAgICAgNDkKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDUwLCAg
IDUxLCAgIDUyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorICAgICAgIDUw
LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAor
ICAgICAgIDUwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1MCwgICA1MSwgICA1Miwg
ICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKKyAgICAgICA1MCwgICA1MCwgICA1
MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKKyAgICAgICA1MAor
ICAgIH0sCisKKyAgICB7CisgICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMs
ICAtMTMsICAtMTMsICAtMTMsICAtMTMsCisKKyAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywg
IC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywKKyAgICAgIC0xMworICAgIH0sCisK
KyAgICB7CisgICAgICAgMTMsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAt
MTQsICAtMTQsICAtMTQsCisgICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQs
ICAtMTQsICAtMTQsICAtMTQsICAtMTQsCisgICAgICAtMTQKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTE1LCAgIDUzLCAgIDU0LCAgLTE1LCAgLTE1LCAgIDU1LCAgLTE1LCAgLTE1LCAg
LTE1LAorICAgICAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1
LCAgLTE1LCAgLTE1LAorICAgICAgLTE1CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0x
NiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKKyAgICAg
IC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0x
NiwKKworICAgICAgLTE2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1NiwgICA1Niwg
ICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAgICA1NiwgICA1
NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAg
ICA1NgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMTgsICAtMTgsICAtMTgsICAtMTgs
ICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsCisgICAgICAtMTgsICAtMTgsICAtMTgsICAt
MTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsCisgICAgICAtMTgKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTE5LCAgIDU4LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5
LCAgLTE5LCAgLTE5LCAgLTE5LAorICAgICAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAg
LTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LAorICAgICAgLTE5CisKKyAgICB9LAorCisgICAg
eworICAgICAgIDEzLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAg
LTIwLCAgLTIwLAorICAgICAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIw
LCAgLTIwLCAgLTIwLCAgLTIwLAorICAgICAgLTIwCisgICAgfSwKKworICAgIHsKKyAgICAgICAx
MywgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgICA1OSwgIC0yMSwgIC0yMSwK
KyAgICAgIC0yMSwgIC0yMSwgIC0yMSwgICA1OSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0y
MSwgIC0yMSwKKyAgICAgIC0yMQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMjIsICAt
MjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsCisgICAgICAtMjIs
ICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAgNjAsICAtMjIsICAtMjIsCisg
ICAgICAtMjIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTIzLCAgLTIzLCAgLTIzLCAg
LTIzLCAgLTIzLCAgLTIzLCAgIDU5LCAgLTIzLCAgLTIzLAorCisgICAgICAtMjMsICAtMjMsICAt
MjMsICAgNjEsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsCisgICAgICAtMjMK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0
LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LAorICAgICAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAg
LTI0LCAgLTI0LCAgLTI0LCAgIDYyLCAgLTI0LCAgLTI0LAorICAgICAgLTI0CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0y
NSwgIC0yNSwgIC0yNSwKKyAgICAgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwg
IC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwKKyAgICAgIC0yNQorICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAgNjMsICAgNjMsICAtMjYsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsCisgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsCisKKyAgICAgICA2MworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAt
MjcsICAgNjQsICAgNjUsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsCisgICAg
ICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAt
MjcsCisgICAgICAtMjcKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDY2LCAgLTI4LCAg
LTI4LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAorICAgICAgIDY2LCAgIDY2
LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAorICAgICAg
IDY2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA2NywgICA2NywgICA2OCwgICA2Nywg
IC0yOSwgICA2NywgIC0yOSwgICA2NywgIC0yOSwKKyAgICAgICA2NywgICA2NywgICA2NywgICA2
NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgIC0yOSwKKyAgICAgICA2NworCisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0z
MCwgIC0zMCwgIC0zMCwgIC0zMCwKKyAgICAgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwg
IC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwKKyAgICAgIC0zMAorICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAt
MzEsICAtMzEsCisgICAgICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEs
ICAtMzEsICAtMzEsICAtMzEsCisgICAgICAtMzEKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgIDY5LCAgIDY5LCAgLTMyLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LAor
ICAgICAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5
LCAgIDY5LAorICAgICAgIDY5CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA3MCwgICA3
MCwgICA3MSwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwKKworICAgICAgIDcw
LCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLAor
ICAgICAgIDcwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0zNCwgIC0zNCwgIC0zNCwg
IC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwKKyAgICAgIC0zNCwgIC0zNCwgIC0z
NCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwKKyAgICAgIC0zNAor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMzUsICAgNzIsICAtMzUsICAtMzUsICAtMzUs
ICAtMzUsICAtMzUsICAtMzUsICAtMzUsCisgICAgICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAt
MzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsCisgICAgICAtMzUKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2
LCAgLTM2LCAgLTM2LAorICAgICAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAg
LTM2LCAgLTM2LCAgLTM2LCAgLTM2LAorCisgICAgICAtMzYKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAg
LTM3LAorICAgICAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgIDcz
LCAgLTM3LCAgLTM3LAorICAgICAgLTM3CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0z
OCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKKyAgICAg
IC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0z
OCwKKyAgICAgIC0zOAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgNzQsICAgNzQsICAt
MzksICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCisgICAgICAg
NzQKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNDAsICAtNDAsICAtNDAsICAtNDAs
ICAtNDAsICAtNDAsICAgNzUsICAtNDAsICAtNDAsCisgICAgICAtNDAsICAtNDAsICAtNDAsICAg
NzUsICAgNzUsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAsCisgICAgICAtNDAKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQx
LCAgLTQxLCAgIDc2LCAgLTQxLAorICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAg
LTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLAorICAgICAgLTQxCisgICAgfSwKKworICAgIHsK
KyAgICAgICAxMywgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00
MiwgIC00MiwKKyAgICAgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00Miwg
IC00MiwgIC00MiwgIC00MiwKKyAgICAgIC00MgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMs
ICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsCisK
KyAgICAgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00
MywgIC00MywKKyAgICAgIC00MworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNDQsICAt
NDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAgNzUsICAtNDQsICAtNDQsCisgICAgICAtNDQs
ICAtNDQsICAtNDQsICAgNzcsICAgNzcsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsCisg
ICAgICAtNDQKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ1LCAgLTQ1LCAgLTQ1LCAg
LTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LAorICAgICAgLTQ1LCAgLTQ1LCAgLTQ1
LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgIDc4LCAgLTQ1LCAgLTQ1LAorICAgICAgLTQ1Cisg
ICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00Niwg
IC00NiwgIC00NiwgIC00NiwgIC00NiwKKyAgICAgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00
NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwKKworICAgICAgLTQ2CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00
NywgIC00NywgIC00NywKKyAgICAgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00Nywg
IC00NywgICA3OSwgIC00NywgIC00NywKKyAgICAgIC00NworICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAtNDgsICAtNDgsICAgODAsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAt
NDgsCisgICAgICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgs
ICAtNDgsICAtNDgsCisgICAgICAtNDgKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ5
LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LAorICAgICAg
LTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5
LAorICAgICAgIDgxCisKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDgyLCAgIDgzLCAg
LTUwLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAgIDgyLCAgIDgy
LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLAorICAgICAg
IDgyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC01MSwgIC01MSwgIC01MSwgIC01MSwg
IC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwKKyAgICAgIC01MSwgIC01MSwgIC01MSwgIC01
MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwKKyAgICAgIC01MQorICAgIH0s
CisKKyAgICB7CisgICAgICAgMTMsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIs
ICAtNTIsICAtNTIsICAtNTIsCisgICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAt
NTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsCisgICAgICAtNTIKKyAgICB9LAorCisgICAgewor
ICAgICAgIDEzLCAgLTUzLCAgIDUzLCAgIDU0LCAgLTUzLCAgLTUzLCAgIDU1LCAgLTUzLCAgLTUz
LCAgLTUzLAorCisgICAgICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMs
ICAtNTMsICAtNTMsICAtNTMsCisgICAgICAtNTMKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LAor
ICAgICAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0
LCAgLTU0LAorICAgICAgLTU0CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1NiwgICA1
NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAgICA1Niwg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAg
ICAgICA1NgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgNTYsICAgNTYsICAgNTcsICAg
NTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCisgICAgICAgNTYsICAgNTYsICAgNTYs
ICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCisKKyAgICAgICA1Ngor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcs
ICAtNTcsICAtNTcsICAtNTcsICAtNTcsCisgICAgICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAt
NTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsCisgICAgICAtNTcKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTU4LCAgIDU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4
LCAgLTU4LCAgLTU4LAorICAgICAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAg
LTU4LCAgLTU4LCAgLTU4LCAgLTU4LAorICAgICAgLTU4CisgICAgfSwKKworICAgIHsKKyAgICAg
ICAxMywgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgICA1OSwgIC01OSwgIC01
OSwKKyAgICAgIC01OSwgIC01OSwgIC01OSwgICA1OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwg
IC01OSwgIC01OSwKKyAgICAgIC01OQorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC02
MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwKKyAgICAg
IC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02
MCwKKyAgICAgIC02MAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNjEsICAtNjEsICAt
NjEsICAtNjEsICAtNjEsICAtNjEsICAgNTksICAtNjEsICAtNjEsCisgICAgICAtNjEsICAtNjEs
ICAtNjEsICAgNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsCisgICAgICAt
NjEKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAg
LTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLAorICAgICAgLTYyLCAgLTYyLCAgLTYyLCAgLTYy
LCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLAorICAgICAgLTYyCisgICAgfSwK
KworICAgIHsKKyAgICAgICAxMywgICA2MywgICA2MywgIC02MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywKKworICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLAorICAgICAgIDYzCisgICAgfSwKKworICAgIHsK
KyAgICAgICAxMywgIC02NCwgICA2NCwgICA2NSwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02
NCwgIC02NCwKKyAgICAgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwg
IC02NCwgIC02NCwgIC02NCwKKyAgICAgIC02NAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMs
ICAgNjYsICAtNjUsICAtNjUsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsCisg
ICAgICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYs
ICAgNjYsCisgICAgICAgNjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTY2LCAgLTY2
LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LAorICAgICAgLTY2LCAg
LTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LAorCisg
ICAgICAtNjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDY3LCAgIDY3LCAgIDY4LCAg
IDY3LCAgLTY3LCAgIDY3LCAgLTY3LCAgIDY3LCAgLTY3LAorICAgICAgIDY3LCAgIDY3LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgLTY3LAorICAgICAgIDY3Cisg
ICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwg
IC02OCwgIC02OCwgIC02OCwgIC02OCwKKyAgICAgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02
OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwKKyAgICAgIC02OAorICAgIH0sCisKKyAg
ICB7CisgICAgICAgMTMsICAgNjksICAgNjksICAtNjksICAgNjksICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjksCisgICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksICAgNjksCisgICAgICAgNjkKKworICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAtNzAsICAtNzAsICAgNzEsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAt
NzAsCisgICAgICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAs
ICAtNzAsICAtNzAsCisgICAgICAtNzAKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTcx
LCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLAorICAgICAg
LTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcx
LAorICAgICAgLTcxCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03MiwgICA3MiwgIC03
MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwKKyAgICAgIC03MiwgIC03Miwg
IC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwKKyAgICAgIC03
MgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNzMsICAtNzMsICAtNzMsICAtNzMsICAt
NzMsICAtNzMsICAtNzMsICAtNzMsICAtNzMsCisKKyAgICAgIC03MywgIC03MywgIC03MywgIC03
MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywKKyAgICAgIC03MworICAgIH0s
CisKKyAgICB7CisgICAgICAgMTMsICAgNzQsICAgNzQsICAtNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQKKyAgICB9LAorCisgICAgewor
ICAgICAgIDEzLCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgLTc1
LCAgLTc1LAorICAgICAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgIDc1LCAgLTc1LCAgLTc1LCAg
LTc1LCAgLTc1LCAgLTc1LAorICAgICAgLTc1CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywg
IC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwKKyAg
ICAgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03Niwg
IC03NiwKKworICAgICAgLTc2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03NywgIC03
NywgIC03NywgIC03NywgIC03NywgIC03NywgICA3NSwgIC03NywgIC03NywKKyAgICAgIC03Nywg
IC03NywgIC03NywgICA3NywgICA3NywgIC03NywgIC03NywgIC03NywgIC03NywgIC03NywKKyAg
ICAgIC03NworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNzgsICAtNzgsICAtNzgsICAt
NzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsCisgICAgICAtNzgsICAtNzgsICAtNzgs
ICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsCisgICAgICAtNzgKKyAg
ICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAg
LTc5LCAgLTc5LCAgLTc5LCAgLTc5LAorICAgICAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5
LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LAorICAgICAgLTc5CisKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgw
LCAgLTgwLCAgLTgwLAorICAgICAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAg
LTgwLCAgLTgwLCAgLTgwLCAgLTgwLAorICAgICAgLTgwCisgICAgfSwKKworICAgIHsKKyAgICAg
ICAxMywgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04
MSwKKyAgICAgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwg
IC04MSwgIC04MSwKKyAgICAgIC04MQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgODIs
ICAgODMsICAtODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsCisgICAgICAg
ODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIs
CisgICAgICAgODIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDgzLCAgIDgzLCAgLTgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAorCisgICAgICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisgICAgICAg
ODMKKyAgICB9LAorCisgICAgfSA7CisKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2
aW91c19zdGF0ZSAodm9pZCApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFu
cyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICApOworc3RhdGljIGludCB5eV9nZXRfbmV4
dF9idWZmZXIgKHZvaWQgKTsKK3N0YXRpYyB2b2lkIHl5bm9yZXR1cm4geXlfZmF0YWxfZXJyb3Ig
KHl5Y29uc3QgY2hhciogbXNnICApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRl
cm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rp
b24gLSBzZXRzIHVwIHl5dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwK
KwkoeXl0ZXh0X3B0cikgPSB5eV9icDsgXAorCXl5bGVuZyA9IChpbnQpICh5eV9jcCAtIHl5X2Jw
KTsgXAorCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCSh5
eV9jX2J1Zl9wKSA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyA0NworI2RlZmluZSBZ
WV9FTkRfT0ZfQlVGRkVSIDQ4CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNj
YW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5eV90
cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90IHl5
X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4NF0gPQor
ICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLAorICAgICAgICAwLCAgICAwLCAgIDQ4LCAgICA1LCAgICA0LCAg
ICAyLCAgICAzLCAgIDEyLCAgIDExLCAgIDEzLAorICAgICAgICA3LCAgIDEyLCAgICA2LCAgIDEy
LCAgICA4LCAgIDQ2LCAgIDQzLCAgIDQ1LCAgIDM4LCAgIDQyLAorICAgICAgIDQxLCAgIDM2LCAg
IDQwLCAgIDM1LCAgIDM0LCAgIDI5LCAgIDIxLCAgIDI4LCAgIDMyLCAgIDMxLAorICAgICAgIDM1
LCAgIDE5LCAgIDIwLCAgIDMwLCAgIDI2LCAgIDIyLCAgIDI3LCAgIDM1LCAgIDM1LCAgIDE0LAor
ICAgICAgIDE2LCAgIDE1LCAgICA0LCAgICAyLCAgICAzLCAgICAzLCAgICAxLCAgIDExLCAgICA3
LCAgIDEwLAorICAgICAgICA2LCAgICA5LCAgIDQ2LCAgIDQzLCAgIDQ1LCAgIDQ0LCAgIDM4LCAg
IDM3LCAgIDM2LCAgIDQwLAorICAgICAgIDM5LCAgIDM0LCAgIDIzLCAgIDMyLCAgIDMxLCAgIDE3
LCAgIDMwLCAgIDI0LCAgIDI1LCAgIDMzLAorICAgICAgIDE4LCAgIDE0LCAgIDE0CisgICAgfSA7
CisKK3N0YXRpYyB5eWNvbnN0IFlZX0NIQVIgeXlfZWNbMjU2XSA9CisgICAgeyAgIDAsCisgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAg
IDMsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDIsICAgIDQsICAgIDUsICAgIDYs
ICAgIDcsICAgIDEsICAgIDgsICAgIDksICAgMTAsCisgICAgICAgMTEsICAgIDEsICAgMTIsICAg
IDEsICAgMTMsICAgMTQsICAgMTQsICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTUsICAgIDEsICAgMTYsCisgICAgICAg
MTcsICAgMTgsICAgIDEsICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMs
CisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAg
MTMsICAgMTMsCisgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsCisgICAgICAgIDEsICAgMTksICAgIDEsICAgIDEsICAgMTMsICAg
IDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsCisKKyAgICAgICAxMywgICAxMywgICAxMywgICAx
MywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKKyAgICAgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKKyAgICAgICAx
MywgICAxMywgICAgMSwgICAyMCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKworICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxCisgICAgfSA7CisKKy8qIFRhYmxlIG9mIGJv
b2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLworc3RhdGljIHl5Y29uc3Qg
ZmxleF9pbnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFs0OF0gPQorICAgIHsgICAwLAorMSwg
MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgCisg
ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwg
MCwgMSwgCisgICAgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgICAgIH07CisKK2V4dGVybiBpbnQg
eXlfZmxleF9kZWJ1ZzsKK2ludCB5eV9mbGV4X2RlYnVnID0gMDsKKworLyogVGhlIGludGVudCBi
ZWhpbmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3Vz
ZWRfYnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90
X2RldGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9N
T1JFX09GRlNFVAorY2hhciAqeXl0ZXh0OworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJv
bWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGFzc2VydC5oPgor
I2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGli
Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRl
ICJsa2MuaCIKKworI2RlZmluZSBTVEFSVF9TVFJTSVpFCTE2CisKK3N0YXRpYyBzdHJ1Y3Qgewor
CXN0cnVjdCBmaWxlICpmaWxlOworCWludCBsaW5lbm87Cit9IGN1cnJlbnRfcG9zOworCitzdGF0
aWMgY2hhciAqdGV4dDsKK3N0YXRpYyBpbnQgdGV4dF9zaXplLCB0ZXh0X2FzaXplOworCitzdHJ1
Y3QgYnVmZmVyIHsKKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7CisJWVlfQlVGRkVSX1NUQVRFIHN0
YXRlOworfTsKKworc3RydWN0IGJ1ZmZlciAqY3VycmVudF9idWY7CisKK3N0YXRpYyBpbnQgbGFz
dF90cywgZmlyc3RfdHM7CisKK3N0YXRpYyBjaGFyICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAq
aW4sIHNpemVfdCBuKTsKK3N0YXRpYyB2b2lkIGFwcGVuZF9leHBhbmRlZF9zdHJpbmcoY29uc3Qg
Y2hhciAqaW4pOworc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKK3N0YXRpYyB2b2lk
IHpjb25mX2VuZGZpbGUodm9pZCk7CisKK3N0YXRpYyB2b2lkIG5ld19zdHJpbmcodm9pZCkKK3sK
Kwl0ZXh0ID0geG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKKwl0ZXh0X2FzaXplID0gU1RBUlRfU1RS
U0laRTsKKwl0ZXh0X3NpemUgPSAwOworCSp0ZXh0ID0gMDsKK30KKworc3RhdGljIHZvaWQgYXBw
ZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQoreworCWludCBuZXdfc2l6ZSA9
IHRleHRfc2l6ZSArIHNpemUgKyAxOworCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKKwkJ
bmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7CisJCW5ld19zaXplICY9IC1TVEFSVF9TVFJT
SVpFOworCQl0ZXh0ID0geHJlYWxsb2ModGV4dCwgbmV3X3NpemUpOworCQl0ZXh0X2FzaXplID0g
bmV3X3NpemU7CisJfQorCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBzdHIsIHNpemUpOworCXRl
eHRfc2l6ZSArPSBzaXplOworCXRleHRbdGV4dF9zaXplXSA9IDA7Cit9CisKK3N0YXRpYyB2b2lk
IGFsbG9jX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQoreworCXRleHQgPSB4bWFs
bG9jKHNpemUgKyAxKTsKKwltZW1jcHkodGV4dCwgc3RyLCBzaXplKTsKKwl0ZXh0W3NpemVdID0g
MDsKK30KKworc3RhdGljIHZvaWQgd2Fybl9pZ25vcmVkX2NoYXJhY3RlcihjaGFyIGNocikKK3sK
KwlmcHJpbnRmKHN0ZGVyciwKKwkgICAgICAgICIlczolZDp3YXJuaW5nOiBpZ25vcmluZyB1bnN1
cHBvcnRlZCBjaGFyYWN0ZXIgJyVjJ1xuIiwKKwkgICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNv
bmZfbGluZW5vKCksIGNocik7Cit9CisKKyNkZWZpbmUgSU5JVElBTCAwCisjZGVmaW5lIENPTU1B
TkQgMQorI2RlZmluZSBIRUxQIDIKKyNkZWZpbmUgU1RSSU5HIDMKKyNkZWZpbmUgUEFSQU0gNAor
I2RlZmluZSBBU1NJR05fVkFMIDUKKworI2lmbmRlZiBZWV9OT19VTklTVERfSAorLyogU3BlY2lh
bCBjYXNlIGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBp
dCB3YXkKKyAqIGRvd24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHVzZXIncyBzZWN0aW9uIDEg
dG8gaGF2ZSBiZWVuIHNjYW5uZWQgZmlyc3QuCisgKiBUaGUgdXNlciBoYXMgYSBjaGFuY2UgdG8g
b3ZlcnJpZGUgaXQgd2l0aCBhbiBvcHRpb24uCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNl
bmRpZgorCisjaWZuZGVmIFlZX0VYVFJBX1RZUEUKKyNkZWZpbmUgWVlfRVhUUkFfVFlQRSB2b2lk
ICoKKyNlbmRpZgorCitzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCApOworCisvKiBB
Y2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRv
IG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLworCitpbnQgeXlsZXhf
ZGVzdHJveSAodm9pZCApOworCitpbnQgeXlnZXRfZGVidWcgKHZvaWQgKTsKKwordm9pZCB5eXNl
dF9kZWJ1ZyAoaW50IGRlYnVnX2ZsYWcgICk7CisKK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEg
KHZvaWQgKTsKKwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQg
ICk7CisKK0ZJTEUgKnl5Z2V0X2luICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfaW4gIChGSUxFICog
X2luX3N0ciAgKTsKKworRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7CisKK3ZvaWQgeXlzZXRfb3V0
ICAoRklMRSAqIF9vdXRfc3RyICApOworCisJCQlpbnQgeXlnZXRfbGVuZyAodm9pZCApOworCitj
aGFyICp5eWdldF90ZXh0ICh2b2lkICk7CisKK2ludCB5eWdldF9saW5lbm8gKHZvaWQgKTsKKwor
dm9pZCB5eXNldF9saW5lbm8gKGludCBfbGluZV9udW1iZXIgICk7CisKKy8qIE1hY3JvcyBhZnRl
ciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGlu
CisgKiBzZWN0aW9uIDEuCisgKi8KKworI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAorI2lmZGVmIF9f
Y3BsdXNwbHVzCitleHRlcm4gIkMiIGludCB5eXdyYXAgKHZvaWQgKTsKKyNlbHNlCitleHRlcm4g
aW50IHl5d3JhcCAodm9pZCApOworI2VuZGlmCisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19VTlBV
VAorICAgIAorICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLGNoYXIgKmJ1Zl9wdHIgICk7
CisgICAgCisjZW5kaWYKKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4
X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgKTsKKyNlbmRpZgorCisjaWZkZWYg
WVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAq
ICk7CisjZW5kaWYKKworI2lmbmRlZiBZWV9OT19JTlBVVAorCisjaWZkZWYgX19jcGx1c3BsdXMK
K3N0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHZv
aWQgKTsKKyNlbmRpZgorCisjZW5kaWYKKworLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVw
IHdpdGggZWFjaCByZWFkLiAqLworI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCisjaWZkZWYgX19p
YTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KKyNk
ZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NAorI2Vsc2UKKyNkZWZpbmUgWVlfUkVBRF9CVUZf
U0laRSA4MTkyCisjZW5kaWYgLyogX19pYTY0X18gKi8KKyNlbmRpZgorCisvKiBDb3B5IHdoYXRl
dmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lm
bmRlZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBz
dHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8K
KyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgKHNpemVfdCkgeXlsZW5nLCAx
LCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIEdldHMgaW5wdXQgYW5kIHN0
dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVM
TCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgorICovCisjaWZuZGVmIFlZX0lOUFVUCisj
ZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKKwllcnJubz0wOyBcCisJd2hp
bGUgKCAocmVzdWx0ID0gKGludCkgcmVhZCggZmlsZW5vKHl5aW4pLCBidWYsIG1heF9zaXplICkp
IDwgMCApIFwKKwl7IFwKKwkJaWYoIGVycm5vICE9IEVJTlRSKSBcCisJCXsgXAorCQkJWVlfRkFU
QUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCisJCQlicmVhazsg
XAorCQl9IFwKKwkJZXJybm89MDsgXAorCQljbGVhcmVycih5eWluKTsgXAorCX1cCitcCisKKyNl
bmRpZgorCisvKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0
byB3cml0ZSAieXl0ZXJtaW5hdGUoKTsiIC0KKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsn
IGFmdGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQorICogc29tZSBjb21w
aWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KKyAqLworI2lm
bmRlZiB5eXRlcm1pbmF0ZQorI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCisj
ZW5kaWYKKworLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0
YWNrIGdyb3dzLiAqLworI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCisjZGVmaW5lIFlZX1NU
QVJUX1NUQUNLX0lOQ1IgMjUKKyNlbmRpZgorCisvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8K
KyNpZm5kZWYgWVlfRkFUQUxfRVJST1IKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9m
YXRhbF9lcnJvciggbXNnICkKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24g
c3RydWN0dXJlcyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9m
IGdlbmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkg
YWRkIHBhcmFtZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lT
X09VUlMgMQorCitleHRlcm4gaW50IHl5bGV4ICh2b2lkKTsKKworI2RlZmluZSBZWV9ERUNMIGlu
dCB5eWxleCAodm9pZCkKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVk
IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZwor
ICogaGF2ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmlu
ZSBZWV9VU0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBv
ZiBlYWNoIHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIC8qTElO
VEVEKi9icmVhazsKKyNlbmRpZgorCisjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAorCVlZX1VTRVJf
QUNUSU9OCisKKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRo
ZSB3b3JrLgorICovCitZWV9ERUNMCit7CisJeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRl
OworCWNoYXIgKnl5X2NwLCAqeXlfYnA7CisJaW50IHl5X2FjdDsKKyAgICAKKwlpZiAoICEoeXlf
aW5pdCkgKQorCQl7CisJCSh5eV9pbml0KSA9IDE7CisKKyNpZmRlZiBZWV9VU0VSX0lOSVQKKwkJ
WVlfVVNFUl9JTklUOworI2VuZGlmCisKKwkJaWYgKCAhICh5eV9zdGFydCkgKQorCQkJKHl5X3N0
YXJ0KSA9IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCisKKwkJaWYgKCAhIHl5aW4gKQorCQkJ
eXlpbiA9IHN0ZGluOworCisJCWlmICggISB5eW91dCApCisJCQl5eW91dCA9IHN0ZG91dDsKKwor
CQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7CisJCQl5eWVuc3VyZV9idWZmZXJfc3RhY2sg
KCk7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQorCQkJCXl5X2NyZWF0ZV9idWZmZXIo
eXlpbixZWV9CVUZfU0laRSApOworCQl9CisKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJ
CX0KKworCXsKKworCWludCBzdHIgPSAwOworCWludCB0cywgaTsKKworCXdoaWxlICggLypDT05T
VENPTkQqLzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLworCQl7
CisJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCisJCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwor
CQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKworCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBv
c2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKKwkJICogdGhlIGN1cnJlbnQgcnVu
LgorCQkgKi8KKwkJeXlfYnAgPSB5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0
YXJ0KTsKK3l5X21hdGNoOgorCQl3aGlsZSAoICh5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5
X2N1cnJlbnRfc3RhdGVdWyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSAgXSkgPiAwICkKKwkJ
CSsreXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9IC15eV9jdXJyZW50X3N0YXRlOworCit5
eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwor
CisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKKwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JV
RkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisJCQl7CisJCQlpbnQgeXls
OworCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYgKCB5eXRl
eHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJCisgICAgeXlsaW5lbm8rKzsKKzsKKwkJCX0KKworZG9f
YWN0aW9uOgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMu
ICovCisKKwkJc3dpdGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dp
dGNoICovCitjYXNlIDE6CisvKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLworY2FzZSAyOgorLyog
cnVsZSAyIGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwlyZXR1cm4gVF9FT0w7
Cit9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNl
IDQ6CitZWV9SVUxFX1NFVFVQCit7CisJQkVHSU4oQ09NTUFORCk7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgNToKK1lZX1JVTEVfU0VUVVAKK3sKKwl1bnB1dCh5eXRleHRbMF0pOworCUJFR0lOKENPTU1B
TkQpOworfQorCVlZX0JSRUFLCisKK2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJY29uc3Qg
c3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5eXRleHQsIHl5bGVuZyk7CisJ
CWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7CisJCWN1cnJlbnRfcG9zLmxpbmVubyA9
IHl5bGluZW5vOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfQ09NTUFORCkgeworCQkJQkVH
SU4oUEFSQU0pOworCQkJeXlsdmFsLmlkID0gaWQ7CisJCQlyZXR1cm4gaWQtPnRva2VuOworCQl9
CisJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0
OworCQlyZXR1cm4gVF9WQVJJQUJMRTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNzoKK1lZX1JVTEVf
U0VUVVAKK3sKKwkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgJyQnICovCisJ
CXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxlbmcpOworCQlpZiAoc3Ry
bGVuKHl5bHZhbC5zdHJpbmcpKQorCQkJcmV0dXJuIFRfVkFSSUFCTEU7CisJCWZyZWUoeXlsdmFs
LnN0cmluZyk7CisJfQorCVlZX0JSRUFLCitjYXNlIDg6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lO
KEFTU0lHTl9WQUwpOyB5eWx2YWwuZmxhdm9yID0gVkFSX1JFQ1VSU0lWRTsgcmV0dXJuIFRfQVNT
SUdOOyB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQVNTSUdO
X1ZBTCk7IHl5bHZhbC5mbGF2b3IgPSBWQVJfU0lNUExFOyByZXR1cm4gVF9BU1NJR047IH0KKwlZ
WV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oQVNTSUdOX1ZBTCk7IHl5
bHZhbC5mbGF2b3IgPSBWQVJfQVBQRU5EOyByZXR1cm4gVF9BU1NJR047IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKKworCVlZX0JSRUFLCitjYXNlIDEyOgorWVlfUlVMRV9T
RVRVUAord2Fybl9pZ25vcmVkX2NoYXJhY3RlcigqeXl0ZXh0KTsKKwlZWV9CUkVBSworY2FzZSAx
MzoKKy8qIHJ1bGUgMTMgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworCQlCRUdJ
TihJTklUSUFMKTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlZWV9CUkVBSworCitjYXNlIDE0Ogor
WVlfUlVMRV9TRVRVUAoreworCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCQl5eWx2
YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfQVNTSUdOX1ZBTDsKKwl9CisJWVlfQlJFQUsK
K2Nhc2UgMTU6CisvKiBydWxlIDE1IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sg
QkVHSU4oSU5JVElBTCk7IHJldHVybiBUX0VPTDsgfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlf
UlVMRV9TRVRVUAorCisJWVlfQlJFQUsKKworY2FzZSAxNzoKK1lZX1JVTEVfU0VUVVAKK3JldHVy
biBUX0FORDsKKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX09S
OworCVlZX0JSRUFLCitjYXNlIDE5OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfT1BFTl9QQVJF
TjsKKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX0NMT1NFX1BB
UkVOOworCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfTk9UOwor
CVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfRVFVQUw7CisJWVlf
QlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9VTkVRVUFMOworCVlZX0JS
RUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfTEVTU19FUVVBTDsKKwlZWV9C
UkVBSworY2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX0dSRUFURVJfRVFVQUw7CisJ
WVlfQlJFQUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9MRVNTOworCVlZX0JS
RUFLCitjYXNlIDI3OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfR1JFQVRFUjsKKwlZWV9CUkVB
SworY2FzZSAyODoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJc3RyID0geXl0ZXh0WzBdOworCQluZXdf
c3RyaW5nKCk7CisJCUJFR0lOKFNUUklORyk7CisJfQorCVlZX0JSRUFLCitjYXNlIDI5OgorLyog
cnVsZSAyOSBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCitCRUdJTihJTklUSUFMKTsg
cmV0dXJuIFRfRU9MOworCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreworCQlj
b25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5n
KTsKKwkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX1BBUkFNKSB7CisJCQl5eWx2YWwuaWQgPSBp
ZDsKKwkJCXJldHVybiBpZC0+dG9rZW47CisJCX0KKwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXls
ZW5nKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkQ7CisJfQorCVlZ
X0JSRUFLCitjYXNlIDMxOgorWVlfUlVMRV9TRVRVUAoreworCQkvKiB0aGlzIHRva2VuIGluY2x1
ZGVzIGF0IGxlYXN0IG9uZSAnJCcgKi8KKwkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5
eXRleHQsIHl5bGVuZyk7CisJCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpCisJCQlyZXR1cm4g
VF9XT1JEOworCQlmcmVlKHl5bHZhbC5zdHJpbmcpOworCX0KKwlZWV9CUkVBSworY2FzZSAzMjoK
K1lZX1JVTEVfU0VUVVAKKy8qIGNvbW1lbnQgKi8KKwlZWV9CUkVBSworY2FzZSAzMzoKKy8qIHJ1
bGUgMzMgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorOworCVlZX0JSRUFLCitjYXNl
IDM0OgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgMzU6CitZWV9SVUxFX1NFVFVQ
Cit3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOworCVlZX0JSRUFLCitjYXNlIFlZX1NU
QVRFX0VPRihQQVJBTSk6Cit7CisJCUJFR0lOKElOSVRJQUwpOworCX0KKwlZWV9CUkVBSworCitj
YXNlIDM2OgorWVlfUlVMRV9TRVRVUAorYXBwZW5kX2V4cGFuZGVkX3N0cmluZyh5eXRleHQpOwor
CVlZX0JSRUFLCitjYXNlIDM3OgorLyogcnVsZSAzNyBjYW4gbWF0Y2ggZW9sICovCisqeXlfY3Ag
PSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICov
CitZWV9MSU5FTk9fUkVXSU5EX1RPKHl5X2NwIC0gMSk7CisoeXlfY19idWZfcCkgPSB5eV9jcCAt
PSAxOworWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLworWVlf
UlVMRV9TRVRVUAoreworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKKwkJeXlsdmFs
LnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJfQorCVlZX0JSRUFLCitj
YXNlIDM4OgorWVlfUlVMRV9TRVRVUAoreworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5n
KTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMzk6CisvKiBydWxlIDM5IGNhbiBtYXRjaCBlb2wgKi8K
Kyp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5
eXRleHQgKi8KK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKKyh5eV9jX2J1Zl9wKSA9
IHl5X2NwIC09IDE7CitZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWlu
ICovCitZWV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0ICsgMSwgeXlsZW5n
IC0gMSk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwor
CX0KKwlZWV9CUkVBSworY2FzZSA0MDoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmlu
Zyh5eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNDE6CitZWV9S
VUxFX1NFVFVQCit7CisJCWlmIChzdHIgPT0geXl0ZXh0WzBdKSB7CisJCQlCRUdJTihQQVJBTSk7
CisJCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJCXJldHVybiBUX1dPUkRfUVVPVEU7CisJCX0g
ZWxzZQorCQkJYXBwZW5kX3N0cmluZyh5eXRleHQsIDEpOworCX0KKwlZWV9CUkVBSworY2FzZSA0
MjoKKy8qIHJ1bGUgNDIgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworCQlmcHJp
bnRmKHN0ZGVyciwKKwkJCSIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1
cHBvcnRlZFxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCQlCRUdJ
TihJTklUSUFMKTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlZWV9CUkVBSworY2FzZSBZWV9TVEFU
RV9FT0YoU1RSSU5HKToKK3sKKwkJQkVHSU4oSU5JVElBTCk7CisJfQorCVlZX0JSRUFLCisKK2Nh
c2UgNDM6CitZWV9SVUxFX1NFVFVQCit7CisJCXRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHl5
bGVuZzsgaSsrKSB7CisJCQlpZiAoeXl0ZXh0W2ldID09ICdcdCcpCisJCQkJdHMgPSAodHMgJiB+
NykgKyA4OworCQkJZWxzZQorCQkJCXRzKys7CisJCX0KKwkJbGFzdF90cyA9IHRzOworCQlpZiAo
Zmlyc3RfdHMpIHsKKwkJCWlmICh0cyA8IGZpcnN0X3RzKSB7CisJCQkJemNvbmZfZW5kaGVscCgp
OworCQkJCXJldHVybiBUX0hFTFBURVhUOworCQkJfQorCQkJdHMgLT0gZmlyc3RfdHM7CisJCQl3
aGlsZSAodHMgPiA4KSB7CisJCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCA4KTsKKwkJCQl0
cyAtPSA4OworCQkJfQorCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCB0cyk7CisJCX0KKwl9
CisJWVlfQlJFQUsKK2Nhc2UgNDQ6CisvKiBydWxlIDQ0IGNhbiBtYXRjaCBlb2wgKi8KKyp5eV9j
cCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQg
Ki8KK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKKyh5eV9jX2J1Zl9wKSA9IHl5X2Nw
IC09IDE7CitZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCitZ
WV9SVUxFX1NFVFVQCit7CisJCXpjb25mX2VuZGhlbHAoKTsKKwkJcmV0dXJuIFRfSEVMUFRFWFQ7
CisJfQorCVlZX0JSRUFLCitjYXNlIDQ1OgorLyogcnVsZSA0NSBjYW4gbWF0Y2ggZW9sICovCitZ
WV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoIlxuIiwgMSk7CisJfQorCVlZX0JSRUFL
CitjYXNlIDQ2OgorWVlfUlVMRV9TRVRVUAoreworCQl3aGlsZSAoeXlsZW5nKSB7CisJCQlpZiAo
KHl5dGV4dFt5eWxlbmctMV0gIT0gJyAnKSAmJiAoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnXHQnKSkK
KwkJCQlicmVhazsKKwkJCXl5bGVuZy0tOworCQl9CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5
eWxlbmcpOworCQlpZiAoIWZpcnN0X3RzKQorCQkJZmlyc3RfdHMgPSBsYXN0X3RzOworCX0KKwlZ
WV9CUkVBSworY2FzZSBZWV9TVEFURV9FT0YoSEVMUCk6Cit7CisJCXpjb25mX2VuZGhlbHAoKTsK
KwkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJfQorCVlZX0JSRUFLCisKK2Nhc2UgWVlfU1RBVEVfRU9G
KElOSVRJQUwpOgorY2FzZSBZWV9TVEFURV9FT0YoQ09NTUFORCk6CitjYXNlIFlZX1NUQVRFX0VP
RihBU1NJR05fVkFMKToKK3sKKwlpZiAoY3VycmVudF9maWxlKSB7CisJCXpjb25mX2VuZGZpbGUo
KTsKKwkJcmV0dXJuIFRfRU9MOworCX0KKwlmY2xvc2UoeXlpbik7CisJeXl0ZXJtaW5hdGUoKTsK
K30KKwlZWV9CUkVBSworY2FzZSA0NzoKK1lZX1JVTEVfU0VUVVAKK1lZX0ZBVEFMX0VSUk9SKCAi
ZmxleCBzY2FubmVyIGphbW1lZCIgKTsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVG
RkVSOgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUg
RU9CIGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5
X2NwIC0gKHl5dGV4dF9wdHIpKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfUkVT
VE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUgc2Nh
bm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJsZSB0
aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVkIHl5
aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhl
biB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5U
X0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2Ug
dG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIg
dGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBu
ZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRoYXQgaGVy
ZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAqIG9mIHRo
ZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJCSAqIGFs
cmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKKwkJICog
KHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJCSAqIGVu
ZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJCSAqIGlu
IGlucHV0KCkuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8PSAmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCisJCQl7IC8qIFRoaXMgd2FzIHJl
YWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKKworCQkJKHl5
X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKKwor
CQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCS8q
IE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNp
dGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdv
IGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhv
dyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2Ug
ZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBp
dAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgorCQkJICovCisKKwkJCXl5X25leHRfc3Rh
dGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICk7CisKKwkJCXl5X2JwID0g
KHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7CisKKwkJCWlmICggeXlfbmV4dF9zdGF0ZSApCisJ
CQkJeworCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KKwkJCQl5eV9jcCA9ICsrKHl5X2NfYnVm
X3ApOworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOworCQkJCWdvdG8geXlf
bWF0Y2g7CisJCQkJfQorCisJCQllbHNlCisJCQkJeworCQkJCXl5X2NwID0gKHl5X2NfYnVmX3Ap
OworCQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQkJfQorCQkJfQorCisJCWVsc2Ugc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCAgKSApCisJCQl7CisJCQljYXNlIEVPQl9BQ1RfRU5EX09G
X0ZJTEU6CisJCQkJeworCQkJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMDsKKwor
CQkJCWlmICggeXl3cmFwKCApICkKKwkJCQkJeworCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3Zl
IHRha2VuIGNhcmUgaW4KKwkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQg
dXAKKwkJCQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAorCQkJCQkgKiB5eV9jX2J1Zl9w
IHNvIHRoYXQgaWYgc29tZSB0b3RhbAorCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikg
d2FudHMgdG8KKwkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCisJ
CQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCisJCQkJCSAqIFlZX05V
TEwgd2lsbCBnZXQgcmV0dXJuZWQuCisJCQkJCSAqLworCQkJCQkoeXlfY19idWZfcCkgPSAoeXl0
ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKworCQkJCQl5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlf
U1RBUlQpOworCQkJCQlnb3RvIGRvX2FjdGlvbjsKKwkJCQkJfQorCisJCQkJZWxzZQorCQkJCQl7
CisJCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCisJCQkJCQlZWV9O
RVdfRklMRTsKKwkJCQkJfQorCQkJCWJyZWFrOworCQkJCX0KKworCQkJY2FzZSBFT0JfQUNUX0NP
TlRJTlVFX1NDQU46CisJCQkJKHl5X2NfYnVmX3ApID0KKwkJCQkJKHl5dGV4dF9wdHIpICsgeXlf
YW1vdW50X29mX21hdGNoZWRfdGV4dDsKKworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRf
cHJldmlvdXNfc3RhdGUoICApOworCisJCQkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisJCQkJeXlf
YnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKwkJCQlnb3RvIHl5X21hdGNoOworCisJ
CQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCSZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldOworCisJCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCQl5eV9jcCA9
ICh5eV9jX2J1Zl9wKTsKKwkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOwor
CQkJCWdvdG8geXlfZmluZF9hY3Rpb247CisJCQl9CisJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0
OgorCQlZWV9GQVRBTF9FUlJPUigKKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJy
b3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsKKwl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovCisJ
CX0gLyogZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLworCX0gLyogZW5kIG9mIHVzZXIncyBk
ZWNsYXJhdGlvbnMgKi8KK30gLyogZW5kIG9mIHl5bGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1
ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2Rl
IHJlcHJlc2VudGluZyBhbiBhY3Rpb246CisgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9C
X0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0
aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGlu
dCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQpCit7CisgICAgCWNoYXIgKmRlc3QgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwljaGFyICpzb3VyY2UgPSAoeXl0ZXh0X3B0
cik7CisJaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRfdmFsOworCisJaWYgKCAoeXlf
Y19idWZfcCkgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hh
cnMpICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRl
cm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7CisKKwlpZiAoIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCisJCXsgLyogRG9uJ3QgdHJ5IHRv
IGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCisJCWlmICggKHl5X2NfYnVm
X3ApIC0gKHl5dGV4dF9wdHIpIC0gWVlfTU9SRV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBt
YXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMg
YXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwor
CQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRv
IHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9jZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9C
X0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEu
ICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwor
CW51bWJlcl90b19tb3ZlID0gKGludCkgKCh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAtIDEp
OworCisJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0Kysp
ID0gKihzb3VyY2UrKyk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
ZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUg
cmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZv
cmNlIGFuIEVPRgorCQkgKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0gKHl5X25fY2hhcnMpID0gMDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0K
KwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92
ZSAtIDE7CisKKwkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3Vn
aCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRl
ciBuYW1lIGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOworCisJCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQor
CQkJCShpbnQpICgoeXlfY19idWZfcCkgLSBiLT55eV9jaF9idWYpOworCisJCQlpZiAoIGItPnl5
X2lzX291cl9idWZmZXIgKQorCQkJCXsKKwkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6
ZSAqIDI7CisKKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQorCQkJCQliLT55eV9idWZfc2l6ZSAr
PSBiLT55eV9idWZfc2l6ZSAvIDg7CisJCQkJZWxzZQorCQkJCQliLT55eV9idWZfc2l6ZSAqPSAy
OworCisJCQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKKwkJCQkJLyogSW5jbHVkZSByb29tIGlu
IGZvciAyIEVPQiBjaGFycy4gKi8KKwkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1
ZixiLT55eV9idWZfc2l6ZSArIDIgICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdy
b3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSBOVUxMOworCisJ
CQlpZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwg
ZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJKHl5X2NfYnVm
X3ApID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFk
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJf
dG9fbW92ZSAtIDE7CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZf
U0laRSApCisJCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBp
biBtb3JlIGRhdGEuICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXSksCisJCQkoeXlfbl9jaGFycyksIG51bV90b19yZWFk
ICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hh
cnMpOworCQl9CisKKwlpZiAoICh5eV9uX2NoYXJzKSA9PSAwICkKKwkJeworCQlpZiAoIG51bWJl
cl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0VO
RF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KHl5aW4gICk7CisJCQl9CisKKwkJZWxzZQorCQkJewor
CQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOworCQkJ
fQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47CisKKwlp
ZiAoKCh5eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMg
dGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KKwkJaW50IG5ld19zaXplID0gKHl5X25fY2hh
cnMpICsgbnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsKKwkJaWYgKCAh
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKKwkJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOworCX0K
KworCSh5eV9uX2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwor
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0g
WVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJKHl5dGV4dF9wdHIpID0gJllZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmWzBdOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBj
aGFyIHdhcyByZWFjaGVkICovCisKKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJl
dmlvdXNfc3RhdGUgKHZvaWQpCit7CisJeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwor
CWNoYXIgKnl5X2NwOworICAgIAorCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOworCisJ
Zm9yICggeXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCAoeXlfY19i
dWZfcCk7ICsreXlfY3AgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3Vy
cmVudF9zdGF0ZV1bKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSldOwor
CQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05VTF90cmFu
cyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgorICoKKyAq
IHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0
ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSApCit7CisJaW50IHl5X2lzX2phbTsKKyAgICAK
Kwl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVdWzFdOworCXl5X2lz
X2phbSA9ICh5eV9jdXJyZW50X3N0YXRlIDw9IDApOworCisJCXJldHVybiB5eV9pc19qYW0gPyAw
IDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lmbmRlZiBZWV9OT19VTlBVVAorCisgICAgc3Rh
dGljIHZvaWQgeXl1bnB1dCAoaW50IGMsIGNoYXIgKiB5eV9icCApCit7CisJY2hhciAqeXlfY3A7
CisgICAgCisgICAgeXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwkvKiB1bmRvIGVmZmVjdHMgb2Yg
c2V0dGluZyB1cCB5eXRleHQgKi8KKwkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKKworCWlmICgg
eXlfY3AgPCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQl7IC8q
IG5lZWQgdG8gc2hpZnQgdGhpbmdzIHVwIHRvIG1ha2Ugcm9vbSAqLworCQkvKiArMiBmb3IgRU9C
IGNoYXJzLiAqLworCQlpbnQgbnVtYmVyX3RvX21vdmUgPSAoeXlfbl9jaGFycykgKyAyOworCQlj
aGFyICpkZXN0ID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWworCQkJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplICsgMl07CisJCWNoYXIgKnNvdXJj
ZSA9CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19t
b3ZlXTsKKworCQl3aGlsZSAoIHNvdXJjZSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmICkKKwkJCSotLWRlc3QgPSAqLS1zb3VyY2U7CisKKwkJeXlfY3AgKz0gKGludCkgKGRl
c3QgLSBzb3VyY2UpOworCQl5eV9icCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7CisJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9CisJCQkoeXlfbl9jaGFycykgPSAoaW50
KSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplOworCisJCWlmICggeXlfY3Ag
PCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQorCQkJWVlfRkFUQUxf
RVJST1IoICJmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93IiApOworCQl9CisKKwkqLS15
eV9jcCA9IChjaGFyKSBjOworCisgICAgaWYgKCBjID09ICdcbicgKXsKKyAgICAgICAgLS15eWxp
bmVubzsKKyAgICB9CisKKwkoeXl0ZXh0X3B0cikgPSB5eV9icDsKKwkoeXlfaG9sZF9jaGFyKSA9
ICp5eV9jcDsKKwkoeXlfY19idWZfcCkgPSB5eV9jcDsKK30KKworI2VuZGlmCisKKyNpZm5kZWYg
WVlfTk9fSU5QVVQKKyNpZmRlZiBfX2NwbHVzcGx1cworICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAo
dm9pZCkKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpCisjZW5kaWYKKworewor
CWludCBjOworICAgIAorCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKworCWlmICgg
Kih5eV9jX2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2Nf
YnVmX3Agbm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkg
KiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBh
CisJCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBi
dWZmZXIuCisJCSAqLworCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBh
IE5VTC4gKi8KKwkJCSooeXlfY19idWZfcCkgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVl
ZCBtb3JlIGlucHV0ICovCisJCQlpbnQgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9w
dHIpOworCQkJKysoeXlfY19idWZfcCk7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJCQkJLyogVGhp
cyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNj
dW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCisJCQkJ
CSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2NlZWRpbmcuICBC
dXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIu
CisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJCQkgKiB0byBF
T0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBidWZmZXIgc3Rh
dHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiApOworCisJCQkJCS8qRkFMTFRIUk9VR0gqLwor
CisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJCQkJCWlmICggeXl3cmFw
KCApICkKKwkJCQkJCXJldHVybiAwOworCisJCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mKSApCisJCQkJCQlZWV9ORVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJ
CQlyZXR1cm4geXlpbnB1dCgpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KCk7CisjZW5kaWYK
KwkJCQkJfQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCSh5eV9jX2J1
Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3Ig
OC1iaXQgY2hhcidzICovCisJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4
dCAqLworCSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVmX3ApOworCisJaWYgKCBjID09ICdc
bicgKQorCQkKKyAgICB5eWxpbmVubysrOworOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyog
aWZuZGVmIFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZm
ZXJlbnQgaW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uCisgKiAKKyAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0
IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4KKyAqLworICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklM
RSAqIGlucHV0X2ZpbGUgKQoreworICAgIAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewor
ICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRSA9CisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsK
Kwl9CisKKwl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICk7CisJ
eXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Cit9CisKKy8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQg
aW5wdXQgYnVmZmVyLgorICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIu
CisgKiAKKyAqLworICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFU
RSAgbmV3X2J1ZmZlciApCit7CisgICAgCisJLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8g
cmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5CisJICogd2l0aAorCSAqCQl5eXBvcF9i
dWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAg
ICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiAp
CisJCXsKKwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkq
KHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworCisJLyogV2Ug
ZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkg
KiBFT0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcK
KwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNh
ZmUKKwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwkoeXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVy
X3N0YXRlICAodm9pZCkKK3sKKyAgICAJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9uX2NoYXJzOworCSh5eXRleHRfcHRyKSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKKwl5eWluID0gWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1Zl9w
KTsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0
ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhl
IGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZ
X0JVRl9TSVpFLgorICogCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgor
ICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwg
aW50ICBzaXplICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKyAgICAKKwliID0gKFlZX0JVRkZF
Ul9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKKwlp
ZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5
X2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gKHl5X3NpemVfdClzaXpl
OworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhl
IHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZl
ciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+
eXlfYnVmX3NpemUgKyAyICApOworCWlmICggISBiLT55eV9jaF9idWYgKQorCQlZWV9GQVRBTF9F
UlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7CisK
KwliLT55eV9pc19vdXJfYnVmZmVyID0gMTsKKworCXl5X2luaXRfYnVmZmVyKGIsZmlsZSApOwor
CisJcmV0dXJuIGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBh
IGJ1ZmZlciBjcmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZlcigpCisgKiAKKyAqLworICAgIHZv
aWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKK3sKKyAgICAKKwlpZiAo
ICEgYiApCisJCXJldHVybjsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5v
dCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsKKworCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciAp
CisJCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgICk7CisKKwl5eWZyZWUoKHZvaWQgKikg
YiAgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KKyAq
IFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUg
c2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4K
KyAqLworICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBi
LCBGSUxFICogZmlsZSApCisKK3sKKwlpbnQgb2Vycm5vID0gZXJybm87CisgICAgCisJeXlfZmx1
c2hfYnVmZmVyKGIgKTsKKworCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxf
YnVmZmVyID0gMTsKKworICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5
X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlfCisgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0
KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3
ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAg
IGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0g
MTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlf
aXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAorCWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlz
Y2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQg
d2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNo
ZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCisgKiAKKyAqLworICAgIHZvaWQgeXlf
Zmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgKQoreworICAgIAlpZiAoICEgYiApCisJ
CXJldHVybjsKKworCWItPnl5X25fY2hhcnMgPSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdv
IGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5z
aXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAq
IGEgamFtIGluIHRoYXQgc3RhdGUuCisJICovCisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09G
X0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsK
KworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0g
MTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZ
WV9DVVJSRU5UX0JVRkZFUiApCisJCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOworfQorCisvKiog
UHVzaGVzIHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21l
cworICogIHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhl
IHN0YWNrCisgKiAgaWYgbmVjZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcg
c3RhdGUuCisgKiAgCisgKi8KK3ZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NU
QVRFIG5ld19idWZmZXIgKQoreworICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1
cm47CisKKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soKTsKKworCS8qIFRoaXMgYmxvY2sgaXMgY29w
aWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
ICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCisJ
CSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCS8qIE9ubHkgcHVzaCBpZiB0
b3AgZXhpc3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLworCWlmIChZWV9DVVJSRU5UX0JV
RkZFUikKKwkJKHl5X2J1ZmZlcl9zdGFja190b3ApKys7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gbmV3X2J1ZmZlcjsKKworCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIu
ICovCisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7CisJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZikgPSAxOworfQorCisvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBz
dGFjaywgaWYgcHJlc2VudC4KKyAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0
b3AuCisgKiAgCisgKi8KK3ZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkKQoreworICAgIAlp
ZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSICk7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwlp
ZiAoKHl5X2J1ZmZlcl9zdGFja190b3ApID4gMCkKKwkJLS0oeXlfYnVmZmVyX3N0YWNrX3RvcCk7
CisKKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7
CisJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKKwl9Cit9CisKKy8qIEFsbG9j
YXRlcyB0aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCisgKiAgR3VhcmFudGVlcyBzcGFj
ZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guCisgKi8KK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZl
cl9zdGFjayAodm9pZCkKK3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIAorCWlmICghKHl5X2J1
ZmZlcl9zdGFjaykpIHsKKworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxl
bWVudHMsIHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZl
biBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBp
bW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKyAgICAgIG51
bV90b19hbGxvYyA9IDE7IC8qIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAx
IGFueXdheXMuLi4gKi8KKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSoqKXl5YWxsb2MKKwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlf
YnVmZmVyX3N0YXRlKikKKwkJCQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkK
KwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1
ZmZlcl9zdGFjaygpIiApOworCisJCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwgbnVtX3Rv
X2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisKKwkJKHl5X2J1ZmZl
cl9zdGFja19tYXgpID0gbnVtX3RvX2FsbG9jOworCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAw
OworCQlyZXR1cm47CisJfQorCisJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAoKHl5X2J1
ZmZlcl9zdGFja19tYXgpKSAtIDEpeworCisJCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJl
cGFyZSBmb3IgYSBwb3NzaWJsZSBwdXNoLiAqLworCQl5eV9zaXplX3QgZ3Jvd19zaXplID0gOCAv
KiBhcmJpdHJhcnkgZ3JvdyBzaXplICovOworCisJCW51bV90b19hbGxvYyA9ICh5eV9idWZmZXJf
c3RhY2tfbWF4KSArIGdyb3dfc2l6ZTsKKwkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSoqKXl5cmVhbGxvYworCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCisJ
CQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKKwkJ
CQkJCQkJKTsKKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKKwkJCVlZX0ZBVEFMX0VSUk9S
KCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwor
CisJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCgoeXlfYnVmZmVyX3N0
YWNrKSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUqKSk7CisJCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19h
bGxvYzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4g
ZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFy
YW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4g
Ynl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIAorICogQHJldHVybiB0aGUgbmV3bHkg
YWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9z
Y2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgKQoreworCVlZX0JVRkZF
Ul9TVEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAh
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUg
RU9CJ3MuICovCisJCXJldHVybiBOVUxMOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxs
b2Moc2l6ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgICk7CisJaWYgKCAhIGIgKQorCQlZ
WV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigp
IiApOworCisJYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJl
IG9mIEVPQidzICovCisJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7CisJYi0+
eXlfaXNfb3VyX2J1ZmZlciA9IDA7CisJYi0+eXlfaW5wdXRfZmlsZSA9IE5VTEw7CisJYi0+eXlf
bl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOworCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKwli
LT55eV9hdF9ib2wgPSAxOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKKwliLT55eV9idWZmZXJf
c3RhdHVzID0gWVlfQlVGRkVSX05FVzsKKworCXl5X3N3aXRjaF90b19idWZmZXIoYiAgKTsKKwor
CXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2Fu
IGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAorICogc2NhbiBmcm9tIGEg
QGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJp
bmcgdG8gc2NhbgorICogCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0
YXRlIG9iamVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkg
Y29udGFpbiBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGlu
c3RlYWQuCisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICogeXlzdHIgKQoreworICAgIAorCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLChpbnQpIHN0
cmxlbih5eXN0cikgKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8g
c2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBz
Y2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5
dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBi
eXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiAKKyAqIEByZXR1
cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZG
RVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5
Ynl0ZXNfbGVuICkKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJeXlfc2l6
ZV90IG47CisJaW50IGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGlu
Y2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9ICh5eV9zaXplX3QpIChf
eXlieXRlc19sZW4gKyAyKTsKKwlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gICk7CisJaWYgKCAh
IGJ1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3Nj
YW5fYnl0ZXMoKSIgKTsKKworCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQor
CQlidWZbaV0gPSB5eWJ5dGVzW2ldOworCisJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYiA9IHl5X3NjYW5fYnVmZmVy
KGJ1ZixuICk7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4g
eXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1
ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgor
CSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7Cit9CisKKyNpZm5k
ZWYgWVlfRVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKwor
c3RhdGljIHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cg
KQoreworCQkJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKKwlleGl0KCBZ
WV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3Mg
aW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUgeXlsZXNzKG4p
IFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQu
ICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlf
TEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5nXSA9ICh5eV9o
b2xkX2NoYXIpOyBcCisJCSh5eV9jX2J1Zl9wKSA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7
IFwKKwkJKHl5X2hvbGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOyBcCisJCSooeXlfY19idWZfcCkg
PSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKKwkJfSBcCisJd2hpbGUg
KCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1
Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KKyAqIAor
ICovCitpbnQgeXlnZXRfbGluZW5vICAodm9pZCkKK3sKKyAgICAKKyAgICByZXR1cm4geXlsaW5l
bm87Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KKyAqIAorICovCitGSUxFICp5eWdl
dF9pbiAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB5eWluOworfQorCisvKiogR2V0IHRoZSBv
dXRwdXQgc3RyZWFtLgorICogCisgKi8KK0ZJTEUgKnl5Z2V0X291dCAgKHZvaWQpCit7CisgICAg
ICAgIHJldHVybiB5eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50
IHRva2VuLgorICogCisgKi8KK2ludCB5eWdldF9sZW5nICAodm9pZCkKK3sKKyAgICAgICAgcmV0
dXJuIHl5bGVuZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIAorICovCisK
K2NoYXIgKnl5Z2V0X3RleHQgICh2b2lkKQoreworICAgICAgICByZXR1cm4geXl0ZXh0OworfQor
CisvKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIF9saW5lX251bWJl
ciBsaW5lIG51bWJlcgorICogCisgKi8KK3ZvaWQgeXlzZXRfbGluZW5vIChpbnQgIF9saW5lX251
bWJlciApCit7CisgICAgCisgICAgeXlsaW5lbm8gPSBfbGluZV9udW1iZXI7Cit9CisKKy8qKiBT
ZXQgdGhlIGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Cisg
KiBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gX2luX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KKyAq
IAorICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCisgKi8KK3ZvaWQgeXlzZXRfaW4gKEZJTEUg
KiAgX2luX3N0ciApCit7CisgICAgICAgIHl5aW4gPSBfaW5fc3RyIDsKK30KKwordm9pZCB5eXNl
dF9vdXQgKEZJTEUgKiAgX291dF9zdHIgKQoreworICAgICAgICB5eW91dCA9IF9vdXRfc3RyIDsK
K30KKworaW50IHl5Z2V0X2RlYnVnICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5X2ZsZXhf
ZGVidWc7Cit9CisKK3ZvaWQgeXlzZXRfZGVidWcgKGludCAgX2JkZWJ1ZyApCit7CisgICAgICAg
IHl5X2ZsZXhfZGVidWcgPSBfYmRlYnVnIDsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2Jh
bHMgKHZvaWQpCit7CisgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZv
ciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2Fs
bGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAgICAq
LworCisgICAgLyogV2UgZG8gbm90IHRvdWNoIHl5bGluZW5vIHVubGVzcyB0aGUgb3B0aW9uIGlz
IGVuYWJsZWQuICovCisgICAgeXlsaW5lbm8gPSAgMTsKKyAgICAKKyAgICAoeXlfYnVmZmVyX3N0
YWNrKSA9IE5VTEw7CisgICAgKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsKKyAgICAoeXlfYnVm
ZmVyX3N0YWNrX21heCkgPSAwOworICAgICh5eV9jX2J1Zl9wKSA9IE5VTEw7CisgICAgKHl5X2lu
aXQpID0gMDsKKyAgICAoeXlfc3RhcnQpID0gMDsKKworLyogRGVmaW5lZCBpbiBtYWluLmMgKi8K
KyNpZmRlZiBZWV9TVERJTklUCisgICAgeXlpbiA9IHN0ZGluOworICAgIHl5b3V0ID0gc3Rkb3V0
OworI2Vsc2UKKyAgICB5eWluID0gTlVMTDsKKyAgICB5eW91dCA9IE5VTEw7CisjZW5kaWYKKwor
ICAgIC8qIEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdl
IGFyZSBjYWxsZWQgYnkKKyAgICAgKiB5eWxleF9pbml0KCkKKyAgICAgKi8KKyAgICByZXR1cm4g
MDsKK30KKworLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMuICovCitpbnQgeXlsZXhfZGVzdHJveSAgKHZvaWQpCit7CisgICAg
CisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAq
LworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUiAgKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKKwkJeXlw
b3BfYnVmZmVyX3N0YXRlKCk7CisJfQorCisJLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAq
LworCXl5ZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOworCSh5eV9idWZmZXJfc3RhY2spID0gTlVM
TDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5v
bi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBpcyBj
YWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9iYWxz
KCApOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRp
bmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlfZmxleF9zdHJu
Y3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICkKK3sKKwkJCisJaW50IGk7
CisJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQorCQlzMVtpXSA9IHMyW2ldOworfQorI2VuZGlm
CisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogcyApCit7CisJaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsrbiApCisJ
CTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAg
c2l6ZSApCit7CisJCQlyZXR1cm4gbWFsbG9jKHNpemUpOworfQorCit2b2lkICp5eXJlYWxsb2Mg
ICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgKQoreworCQkKKwkvKiBUaGUgY2FzdCB0byAo
Y2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50
YXRpb25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRo
YXQgdXNlIHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIK
KwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVu
dCBmcm9tCisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1
bWVudCBjb252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAq
LworCXJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Cit9CisKK3ZvaWQgeXlmcmVlICh2b2lkICog
cHRyICkKK3sKKwkJCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9y
IChjaGFyICopIGNhc3QgKi8KK30KKworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIK
Kworc3RhdGljIGNoYXIgKmV4cGFuZF90b2tlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IG4pCit7
CisJY2hhciAqb3V0OworCWludCBjOworCWNoYXIgYzI7CisJY29uc3QgY2hhciAqcmVzdCwgKmVu
ZDsKKworCW5ld19zdHJpbmcoKTsKKwlhcHBlbmRfc3RyaW5nKGluLCBuKTsKKworCS8qIGdldCB0
aGUgd2hvbGUgbGluZSBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IHRoZSBlbmQgb2YgdG9rZW4uICov
CisJd2hpbGUgKChjID0gaW5wdXQoKSkgIT0gRU9GKSB7CisJCWlmIChjID09ICdcbicpIHsKKwkJ
CXVucHV0KGMpOworCQkJYnJlYWs7CisJCX0KKwkJYzIgPSBjOworCQlhcHBlbmRfc3RyaW5nKCZj
MiwgMSk7CisJfQorCisJcmVzdCA9IHRleHQ7CisJb3V0ID0gZXhwYW5kX29uZV90b2tlbigmcmVz
dCk7CisKKwkvKiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVh
bSAqLworCWVuZCA9IHJlc3QgKyBzdHJsZW4ocmVzdCk7CisJd2hpbGUgKGVuZCA+IHJlc3QpCisJ
CXVucHV0KCotLWVuZCk7CisKKwlmcmVlKHRleHQpOworCisJcmV0dXJuIG91dDsKK30KKworc3Rh
dGljIHZvaWQgYXBwZW5kX2V4cGFuZGVkX3N0cmluZyhjb25zdCBjaGFyICpzdHIpCit7CisJY29u
c3QgY2hhciAqZW5kOworCWNoYXIgKnJlczsKKworCXN0cisrOworCisJcmVzID0gZXhwYW5kX2Rv
bGxhcigmc3RyKTsKKworCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5w
dXQgc3RyZWFtICovCisJZW5kID0gc3RyICsgc3RybGVuKHN0cik7CisJd2hpbGUgKGVuZCA+IHN0
cikKKwkJdW5wdXQoKi0tZW5kKTsKKworCWFwcGVuZF9zdHJpbmcocmVzLCBzdHJsZW4ocmVzKSk7
CisKKwlmcmVlKHJlcyk7Cit9CisKK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpCit7CisJbmV3
X3N0cmluZygpOworCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7CisJQkVHSU4oSEVMUCk7Cit9CisK
K3N0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCkKK3sKKwl5eWx2YWwuc3RyaW5nID0gdGV4
dDsKKwlCRUdJTihJTklUSUFMKTsKK30KKworLyoKKyAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBm
aWxlIHdpdGggZm9sbG93aW5nIG5hbWVzOgorICogLi9uYW1lCisgKiAkKHNyY3RyZWUpL25hbWUK
KyAqIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0
cmVlCisgKiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgorICogUmV0dXJuIE5VTEwgaWYgZmls
ZSBpcyBub3QgZm91bmQuCisgKi8KK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUp
Cit7CisJY2hhciAqZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKKwlGSUxFICpmOworCisJZiA9
IGZvcGVuKG5hbWUsICJyIik7CisJaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9
ICcvJykgeworCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7CisJCWlmIChlbnYpIHsKKwkJCXNwcmlu
dGYoZnVsbG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7CisJCQlmID0gZm9wZW4oZnVsbG5hbWUs
ICJyIik7CisJCX0KKwl9CisJcmV0dXJuIGY7Cit9CisKK3ZvaWQgemNvbmZfaW5pdHNjYW4oY29u
c3QgY2hhciAqbmFtZSkKK3sKKwl5eWluID0gemNvbmZfZm9wZW4obmFtZSk7CisJaWYgKCF5eWlu
KSB7CisJCWZwcmludGYoc3RkZXJyLCAiY2FuJ3QgZmluZCBmaWxlICVzXG4iLCBuYW1lKTsKKwkJ
ZXhpdCgxKTsKKwl9CisKKwljdXJyZW50X2J1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1
ZikpOworCW1lbXNldChjdXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOworCisJ
Y3VycmVudF9maWxlID0gZmlsZV9sb29rdXAobmFtZSk7CisJeXlsaW5lbm8gPSAxOworfQorCit2
b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZpbGUgKml0
ZXI7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKKwlzdHJ1Y3QgYnVm
ZmVyICpidWYgPSB4bWFsbG9jKHNpemVvZigqYnVmKSk7CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9m
KCpidWYpKTsKKworCWN1cnJlbnRfYnVmLT5zdGF0ZSA9IFlZX0NVUlJFTlRfQlVGRkVSOworCXl5
aW4gPSB6Y29uZl9mb3BlbihmaWxlLT5uYW1lKTsKKwlpZiAoIXl5aW4pIHsKKwkJZnByaW50Zihz
dGRlcnIsICIlczolZDogY2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIlxuIiwKKwkJCXpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCksIGZpbGUtPm5hbWUpOworCQlleGl0KDEpOworCX0KKwl5eV9z
d2l0Y2hfdG9fYnVmZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSkpOworCWJ1
Zi0+cGFyZW50ID0gY3VycmVudF9idWY7CisJY3VycmVudF9idWYgPSBidWY7CisKKwljdXJyZW50
X2ZpbGUtPmxpbmVubyA9IHl5bGluZW5vOworCWZpbGUtPnBhcmVudCA9IGN1cnJlbnRfZmlsZTsK
KworCWZvciAoaXRlciA9IGN1cnJlbnRfZmlsZTsgaXRlcjsgaXRlciA9IGl0ZXItPnBhcmVudCkg
eworCQlpZiAoIXN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5uYW1lKSkgeworCQkJZnByaW50Zihz
dGRlcnIsCisJCQkJIlJlY3Vyc2l2ZSBpbmNsdXNpb24gZGV0ZWN0ZWQuXG4iCisJCQkJIkluY2x1
c2lvbiBwYXRoOlxuIgorCQkJCSIgIGN1cnJlbnQgZmlsZSA6ICVzXG4iLCBmaWxlLT5uYW1lKTsK
KwkJCWl0ZXIgPSBmaWxlOworCQkJZG8geworCQkJCWl0ZXIgPSBpdGVyLT5wYXJlbnQ7CisJCQkJ
ZnByaW50ZihzdGRlcnIsICIgIGluY2x1ZGVkIGZyb206ICVzOiVkXG4iLAorCQkJCQlpdGVyLT5u
YW1lLCBpdGVyLT5saW5lbm8gLSAxKTsKKwkJCX0gd2hpbGUgKHN0cmNtcChpdGVyLT5uYW1lLCBm
aWxlLT5uYW1lKSk7CisJCQlleGl0KDEpOworCQl9CisJfQorCisJeXlsaW5lbm8gPSAxOworCWN1
cnJlbnRfZmlsZSA9IGZpbGU7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkK
K3sKKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7CisKKwljdXJyZW50X2ZpbGUgPSBjdXJyZW50X2Zp
bGUtPnBhcmVudDsKKwlpZiAoY3VycmVudF9maWxlKQorCQl5eWxpbmVubyA9IGN1cnJlbnRfZmls
ZS0+bGluZW5vOworCisJcGFyZW50ID0gY3VycmVudF9idWYtPnBhcmVudDsKKwlpZiAocGFyZW50
KSB7CisJCWZjbG9zZSh5eWluKTsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
Uik7CisJCXl5X3N3aXRjaF90b19idWZmZXIocGFyZW50LT5zdGF0ZSk7CisJfQorCWZyZWUoY3Vy
cmVudF9idWYpOworCWN1cnJlbnRfYnVmID0gcGFyZW50OworfQorCitpbnQgemNvbmZfbGluZW5v
KHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfcG9zLmxpbmVubzsKK30KKworY29uc3QgY2hhciAq
emNvbmZfY3VybmFtZSh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3Bvcy5maWxlID8gY3VycmVu
dF9wb3MuZmlsZS0+bmFtZSA6ICI8bm9uZT4iOworfQorCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3pjb25mLnRhYi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNmYmNiCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYwpAQCAtMCwwICsxLDI1MDQgQEAK
Ky8qIEEgQmlzb24gcGFyc2VyLCBtYWRlIGJ5IEdOVSBCaXNvbiAzLjAuNC4gICovCisKKy8qIEJp
c29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCisKKyAgIENvcHly
aWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAwLTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK
KyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5v
dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKy8qIEFzIGEgc3Bl
Y2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlu
cworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJp
YnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFz
IHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0aGUg
c2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEgcGFyc2VyIHNr
ZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUKKyAg
IHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVt
b3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBza2Vs
ZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vu
c2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0aG91dCB0aGlz
IHNwZWNpYWwgZXhjZXB0aW9uLgorCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9uIDIuMiBvZiBC
aXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNo
YXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAi
c2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hv
dWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5nIG9uIHVzZXIg
bmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwKKyAgIHZhcmlh
YmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNlciBtYWNyb3Mu
CisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRl
IGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhleSBhcmUg
bm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovCisKKy8q
IElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQorCisvKiBCaXNv
biB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjAuNCIKKworLyogU2tl
bGV0b24gbmFtZS4gICovCisjZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIgorCisvKiBQ
dXJlIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBVUkUgMAorCisvKiBQdXNoIHBhcnNlcnMuICAq
LworI2RlZmluZSBZWVBVU0ggMAorCisvKiBQdWxsIHBhcnNlcnMuICAqLworI2RlZmluZSBZWVBV
TEwgMQorCisKKworCisvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25z
LiAgKi8KKworCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVs
QGxpbnV4LW02OGsub3JnPgorICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
R1BMIHYyLjAuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmlu
ZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQor
CisjZGVmaW5lIFBSSU5URAkJMHgwMDAxCisjZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMgorCitp
bnQgY2RlYnVnID0gUFJJTlREOworCitpbnQgeXlsZXgodm9pZCk7CitzdGF0aWMgdm9pZCB5eWVy
cm9yKGNvbnN0IGNoYXIgKmVycik7CitzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIg
KmVyciwgLi4uKTsKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4u
KTsKK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQs
IGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOworCitzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xf
aGFzaFtTWU1CT0xfSEFTSFNJWkVdOworCitzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVu
dSwgKmN1cnJlbnRfZW50cnk7CisKKworCisKKyMgaWZuZGVmIFlZX05VTExQVFIKKyMgIGlmIGRl
ZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cworIyAgIGRlZmluZSBZ
WV9OVUxMUFRSIG51bGxwdHIKKyMgIGVsc2UKKyMgICBkZWZpbmUgWVlfTlVMTFBUUiAwCisjICBl
bmRpZgorIyBlbmRpZgorCisvKiBFbmFibGluZyB2ZXJib3NlIGVycm9yIG1lc3NhZ2VzLiAgKi8K
KyNpZmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFCisjIGRlZmlu
ZSBZWUVSUk9SX1ZFUkJPU0UgMQorI2Vsc2UKKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwCisj
ZW5kaWYKKworCisvKiBEZWJ1ZyB0cmFjZXMuICAqLworI2lmbmRlZiBZWURFQlVHCisjIGRlZmlu
ZSBZWURFQlVHIDEKKyNlbmRpZgorI2lmIFlZREVCVUcKK2V4dGVybiBpbnQgeXlkZWJ1ZzsKKyNl
bmRpZgorCisvKiBUb2tlbiB0eXBlLiAgKi8KKyNpZm5kZWYgWVlUT0tFTlRZUEUKKyMgZGVmaW5l
IFlZVE9LRU5UWVBFCisgIGVudW0geXl0b2tlbnR5cGUKKyAgeworICAgIFRfTUFJTk1FTlUgPSAy
NTgsCisgICAgVF9NRU5VID0gMjU5LAorICAgIFRfRU5ETUVOVSA9IDI2MCwKKyAgICBUX1NPVVJD
RSA9IDI2MSwKKyAgICBUX0NIT0lDRSA9IDI2MiwKKyAgICBUX0VORENIT0lDRSA9IDI2MywKKyAg
ICBUX0NPTU1FTlQgPSAyNjQsCisgICAgVF9DT05GSUcgPSAyNjUsCisgICAgVF9NRU5VQ09ORklH
ID0gMjY2LAorICAgIFRfSEVMUCA9IDI2NywKKyAgICBUX0hFTFBURVhUID0gMjY4LAorICAgIFRf
SUYgPSAyNjksCisgICAgVF9FTkRJRiA9IDI3MCwKKyAgICBUX0RFUEVORFMgPSAyNzEsCisgICAg
VF9PUFRJT05BTCA9IDI3MiwKKyAgICBUX1BST01QVCA9IDI3MywKKyAgICBUX1RZUEUgPSAyNzQs
CisgICAgVF9ERUZBVUxUID0gMjc1LAorICAgIFRfU0VMRUNUID0gMjc2LAorICAgIFRfSU1QTFkg
PSAyNzcsCisgICAgVF9SQU5HRSA9IDI3OCwKKyAgICBUX1ZJU0lCTEUgPSAyNzksCisgICAgVF9P
UFRJT04gPSAyODAsCisgICAgVF9PTiA9IDI4MSwKKyAgICBUX1dPUkQgPSAyODIsCisgICAgVF9X
T1JEX1FVT1RFID0gMjgzLAorICAgIFRfVU5FUVVBTCA9IDI4NCwKKyAgICBUX0xFU1MgPSAyODUs
CisgICAgVF9MRVNTX0VRVUFMID0gMjg2LAorICAgIFRfR1JFQVRFUiA9IDI4NywKKyAgICBUX0dS
RUFURVJfRVFVQUwgPSAyODgsCisgICAgVF9DTE9TRV9QQVJFTiA9IDI4OSwKKyAgICBUX09QRU5f
UEFSRU4gPSAyOTAsCisgICAgVF9FT0wgPSAyOTEsCisgICAgVF9WQVJJQUJMRSA9IDI5MiwKKyAg
ICBUX0FTU0lHTiA9IDI5MywKKyAgICBUX0FTU0lHTl9WQUwgPSAyOTQsCisgICAgVF9PUiA9IDI5
NSwKKyAgICBUX0FORCA9IDI5NiwKKyAgICBUX0VRVUFMID0gMjk3LAorICAgIFRfTk9UID0gMjk4
CisgIH07CisjZW5kaWYKKworLyogVmFsdWUgdHlwZS4gICovCisjaWYgISBkZWZpbmVkIFlZU1RZ
UEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKKwordW5pb24gWVlTVFlQRQorewor
CisKKwljaGFyICpzdHJpbmc7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJc3RydWN0IHN5bWJvbCAq
c3ltYm9sOworCXN0cnVjdCBleHByICpleHByOworCXN0cnVjdCBtZW51ICptZW51OworCWNvbnN0
IHN0cnVjdCBrY29uZl9pZCAqaWQ7CisJZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOworCisK
K307CisKK3R5cGVkZWYgdW5pb24gWVlTVFlQRSBZWVNUWVBFOworIyBkZWZpbmUgWVlTVFlQRV9J
U19UUklWSUFMIDEKKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorI2VuZGlmCisKKwor
ZXh0ZXJuIFlZU1RZUEUgeXlsdmFsOworCitpbnQgeXlwYXJzZSAodm9pZCk7CisKKworCisvKiBD
b3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworLyogSW5j
bHVkZSBrY29uZl9pZC5jIGhlcmUgc28gaXQgY2FuIHNlZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAq
LworI2luY2x1ZGUgImtjb25mX2lkLmMiCisKKworCisjaWZkZWYgc2hvcnQKKyMgdW5kZWYgc2hv
cnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVmIFlZVFlQRV9VSU5UOCB5
eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHl5dHlwZV91aW50ODsK
KyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBl
X2ludDg7CisjZWxzZQordHlwZWRlZiBzaWduZWQgY2hhciB5eXR5cGVfaW50ODsKKyNlbmRpZgor
CisjaWZkZWYgWVlUWVBFX1VJTlQxNgordHlwZWRlZiBZWVRZUEVfVUlOVDE2IHl5dHlwZV91aW50
MTY7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgeXl0eXBlX3VpbnQxNjsKKyNl
bmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDE2Cit0eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVf
aW50MTY7CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2OworI2VuZGlmCisK
KyNpZm5kZWYgWVlTSVpFX1QKKyMgaWZkZWYgX19TSVpFX1RZUEVfXworIyAgZGVmaW5lIFlZU0la
RV9UIF9fU0laRV9UWVBFX18KKyMgZWxpZiBkZWZpbmVkIHNpemVfdAorIyAgZGVmaW5lIFlZU0la
RV9UIHNpemVfdAorIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVAorIyAgaW5jbHVkZSA8c3RkZGVm
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVf
VCBzaXplX3QKKyMgZWxzZQorIyAgZGVmaW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRp
ZgorI2VuZGlmCisKKyNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNp
Zm5kZWYgWVlfCisjIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUworIyAg
aWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVT
RVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24t
cnVudGltZSIsIE1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZXworIyAgZGVm
aW5lIFlZXyhNc2dpZCkgTXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFlZX0FUVFJJ
QlVURQorIyBpZiAoZGVmaW5lZCBfX0dOVUNfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgJiYgKDIgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18g
PT0gMiAmJiA5NiA8PSBfX0dOVUNfTUlOT1JfXykpKSAgXAorICAgICB8fCBkZWZpbmVkIF9fU1VO
UFJPX0MgJiYgMHg1MTEwIDw9IF9fU1VOUFJPX0MKKyMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3Bl
YykgX19hdHRyaWJ1dGVfXyhTcGVjKQorIyBlbHNlCisjICBkZWZpbmUgWVlfQVRUUklCVVRFKFNw
ZWMpIC8qIGVtcHR5ICovCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBZWV9BVFRSSUJVVEVf
UFVSRQorIyBkZWZpbmUgWVlfQVRUUklCVVRFX1BVUkUgICBZWV9BVFRSSUJVVEUgKChfX3B1cmVf
XykpCisjZW5kaWYKKworI2lmbmRlZiBZWV9BVFRSSUJVVEVfVU5VU0VECisjIGRlZmluZSBZWV9B
VFRSSUJVVEVfVU5VU0VEIFlZX0FUVFJJQlVURSAoKF9fdW51c2VkX18pKQorI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZCBfTm9yZXR1cm4gXAorICAgICAmJiAoIWRlZmluZWQgX19TVERDX1ZFUlNJT05f
XyB8fCBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyKQorIyBpZiBkZWZpbmVkIF9NU0NfVkVSICYm
IDEyMDAgPD0gX01TQ19WRVIKKyMgIGRlZmluZSBfTm9yZXR1cm4gX19kZWNsc3BlYyAobm9yZXR1
cm4pCisjIGVsc2UKKyMgIGRlZmluZSBfTm9yZXR1cm4gWVlfQVRUUklCVVRFICgoX19ub3JldHVy
bl9fKSkKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBwcmVzcyB1bnVzZWQtdmFyaWFibGUgd2Fy
bmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9f
R05VQ19fCisjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChFKSkKKyNlbHNlCisjIGRlZmluZSBZ
WVVTRShFKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQw
NyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05VQ19NSU5PUl9fCisvKiBTdXBwcmVzcyBhbiBpbmNv
cnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovCisj
IGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTiBcCisgICAgX1ByYWdt
YSAoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGlj
IGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25v
c3RpYyBpZ25vcmVkIFwiLVdtYXliZS11bmluaXRpYWxpemVkXCIiKQorIyBkZWZpbmUgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgcG9wIikKKyNlbHNlCisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSBWYWx1ZQor
I2VuZGlmCisjaWZuZGVmIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRl
ZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgorIyBkZWZpbmUgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECisjZW5kaWYKKyNpZm5kZWYgWVlfSU5JVElBTF9W
QUxVRQorIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgLyogTm90aGluZy4gKi8KKyNl
bmRpZgorCisKKyNpZiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKwor
LyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNz
YXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYgWVlT
VEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYgX19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJH
X0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2NhLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQgX0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19BTExP
QyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5lZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxtYWxs
b2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUgYWxs
b2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQor
IyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MKKyMg
ICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CisgICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmguICAq
LworIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUworIyAgICAgIGRlZmluZSBFWElUX1NVQ0NFU1Mg
MAorIyAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYK
KworIyBpZmRlZiBZWVNUQUNLX0FMTE9DCisgICAvKiBQYWNpZnkgR0NDJ3MgJ2VtcHR5IGlmLWJv
ZHknIHdhcm5pbmcuICAqLworIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRShQdHIpIGRvIHsgLyogZW1w
dHkgKi87IH0gd2hpbGUgKDApCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAg
LyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0
b20gb2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwg
YXMgNDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2Nh
IChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisg
ICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3Rh
Y2sgc2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiBy
ZWFzb25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNU
QUNLX0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZu
ZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElN
VU0gWVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAm
JiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKKyAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExP
QyB8fCBkZWZpbmVkIG1hbGxvYykgXAorICAgICAgICAgICAgICYmIChkZWZpbmVkIFlZRlJFRSB8
fCBkZWZpbmVkIGZyZWUpKSkKKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKKyMgICAgZGVmaW5l
IEVYSVRfU1VDQ0VTUyAwCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYgWVlNQUxMT0MK
KyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAh
IGRlZmluZWQgRVhJVF9TVUNDRVNTCit2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVm
IFlZRlJFRQorIyAgIGRlZmluZSBZWUZSRUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYm
ICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2Vu
ZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNp
ZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVz
IFwKKyAgICAgICAgIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNfVFJJVklBTCAmJiBZWVNUWVBFX0lT
X1RSSVZJQUwpKSkKKworLyogQSB0eXBlIHRoYXQgaXMgcHJvcGVybHkgYWxpZ25lZCBmb3IgYW55
IHN0YWNrIG1lbWJlci4gICovCit1bmlvbiB5eWFsbG9jCit7CisgIHl5dHlwZV9pbnQxNiB5eXNz
X2FsbG9jOworICBZWVNUWVBFIHl5dnNfYWxsb2M7Cit9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUg
bWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLwor
IyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEp
CisKKy8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBz
dGFja3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZ
VEVTKE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZ
U1RZUEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKyMgZGVmaW5lIFlZQ09Q
WV9ORUVERUQgMQorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8g
dGhlIG5ldyBvbmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tT
SVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0
YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAg
QWR2YW5jZSBZWVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0
CisgICBzdGFjay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBT
dGFjaykgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFlZQ09QWSAoJnl5cHRyLT5T
dGFja19hbGxvYywgU3RhY2ssIHl5c2l6ZSk7ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IFN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0
YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwKKyAgICAgICAgeXlwdHIgKz0geXluZXdieXRl
cyAvIHNpemVvZiAoKnl5cHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkIFlZQ09QWV9O
RUVERUQgJiYgWVlDT1BZX05FRURFRAorLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gU1JDIHRv
IERTVC4gIFRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvCisgICBub3Qgb3ZlcmxhcC4gICov
CisjIGlmbmRlZiBZWUNPUFkKKyMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19f
CisjICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQpIFwKKyAgICAgIF9fYnVpbHRpbl9t
ZW1jcHkgKERzdCwgU3JjLCAoQ291bnQpICogc2l6ZW9mICgqKFNyYykpKQorIyAgZWxzZQorIyAg
IGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSAgICAgICAgICAgICAgXAorICAgICAgZG8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIFlZU0laRV9UIHl5
aTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgIGZvciAoeXlpID0gMDsgeXlp
IDwgKENvdW50KTsgeXlpKyspICAgXAorICAgICAgICAgICAgKERzdClbeXlpXSA9IChTcmMpW3l5
aV07ICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgd2hpbGUgKDApCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmIC8q
ICFZWUNPUFlfTkVFREVEICovCisKKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0
ZXJtaW5hdGlvbiBzdGF0ZS4gICovCisjZGVmaW5lIFlZRklOQUwgIDExCisvKiBZWUxBU1QgLS0g
TGFzdCBpbmRleCBpbiBZWVRBQkxFLiAgKi8KKyNkZWZpbmUgWVlMQVNUICAgMzMyCisKKy8qIFlZ
TlRPS0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICA0
NAorLyogWVlOTlRTIC0tIE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5O
VFMgIDUzCisvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5S
VUxFUyAgMTI5CisvKiBZWU5TVEFURVMgLS0gTnVtYmVyIG9mIHN0YXRlcy4gICovCisjZGVmaW5l
IFlZTlNUQVRFUyAgMjExCisKKy8qIFlZVFJBTlNMQVRFW1lZWF0gLS0gU3ltYm9sIG51bWJlciBj
b3JyZXNwb25kaW5nIHRvIFlZWCBhcyByZXR1cm5lZAorICAgYnkgeXlsZXgsIHdpdGggb3V0LW9m
LWJvdW5kcyBjaGVja2luZy4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlN
QVhVVE9LICAgMjk4CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgKCh1bnNpZ25lZCBpbnQpIChZWVgp
IDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9LKQorCisvKiBZWVRS
QU5TTEFURVtUT0tFTi1OVU1dIC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBUT0tF
Ti1OVU0KKyAgIGFzIHJldHVybmVkIGJ5IHl5bGV4LCB3aXRob3V0IG91dC1vZi1ib3VuZHMgY2hl
Y2tpbmcuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0KK3sK
KyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAg
IDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsCisgICAgICAzNSwgICAgMzYsICAg
IDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzCit9OworCisjaWYg
WVlERUJVRworICAvKiBZWVJMSU5FW1lZTl0gLS0gU291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1i
ZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxp
bmVbXSA9Cit7CisgICAgICAgMCwgICAxMTQsICAgMTE0LCAgIDExNCwgICAxMTYsICAgMTE2LCAg
IDEyMCwgICAxMjUsICAgMTI3LCAgIDEyOCwKKyAgICAgMTI5LCAgIDEzMCwgICAxMzEsICAgMTMy
LCAgIDEzNiwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLAorICAgICAxNDAsICAg
MTQwLCAgIDE0MCwgICAxNDAsICAgMTQ0LCAgIDE0NSwgICAxNDYsICAgMTQ3LCAgIDE0OCwgICAx
NDksCisgICAgIDE1MCwgICAxNTQsICAgMTU1LCAgIDE2MSwgICAxNjgsICAgMTczLCAgIDE4MCwg
ICAxODksICAgMTkxLCAgIDE5MiwKKyAgICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LCAgIDE5
OSwgICAyMDcsICAgMjEzLCAgIDIyMywgICAyMjksICAgMjM1LAorICAgICAyNDEsICAgMjQ0LCAg
IDI0NiwgICAyNTksICAgMjYwLCAgIDI2NSwgICAyNzUsICAgMjgwLCAgIDI4OCwgICAyOTEsCisg
ICAgIDI5MywgICAyOTQsICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMzAwLCAgIDMwNiwgICAzMTcs
ICAgMzIzLCAgIDMzMywKKyAgICAgMzM1LCAgIDM0MCwgICAzNDgsICAgMzU2LCAgIDM1OSwgICAz
NjEsICAgMzYyLCAgIDM2MywgICAzNjgsICAgMzc1LAorICAgICAzODAsICAgMzg4LCAgIDM5MSwg
ICAzOTMsICAgMzk0LCAgIDM5NSwgICAzOTgsICAgNDA3LCAgIDQxNCwgICA0MTksCisgICAgIDQy
NSwgICA0NDMsICAgNDQ1LCAgIDQ0NiwgICA0NDcsICAgNDUwLCAgIDQ1OCwgICA0NjAsICAgNDYx
LCAgIDQ2NCwKKyAgICAgNDcxLCAgIDQ3MywgICA0NzgsICAgNDc5LCAgIDQ4MiwgICA0ODMsICAg
NDg0LCAgIDQ4OCwgICA0ODksICAgNDkyLAorICAgICA0OTMsICAgNDk2LCAgIDQ5NywgICA0OTgs
ICAgNDk5LCAgIDUwMCwgICA1MDEsICAgNTAyLCAgIDUwMywgICA1MDQsCisgICAgIDUwNSwgICA1
MDYsICAgNTEwLCAgIDUxMiwgICA1MTMsICAgNTE2LCAgIDUxNywgICA1MjEsICAgNTI0LCAgIDUy
NQorfTsKKyNlbmRpZgorCisjaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgMAorLyog
WVlUTkFNRVtTWU1CT0wtTlVNXSAtLSBTdHJpbmcgbmFtZSBvZiB0aGUgc3ltYm9sIFNZTUJPTC1O
VU0uCisgICBGaXJzdCwgdGhlIHRlcm1pbmFscywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5T
LCBub250ZXJtaW5hbHMuICAqLworc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9
Cit7CisgICIkZW5kIiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVF9NQUlOTUVOVSIsICJUX01F
TlUiLCAiVF9FTkRNRU5VIiwKKyAgIlRfU09VUkNFIiwgIlRfQ0hPSUNFIiwgIlRfRU5EQ0hPSUNF
IiwgIlRfQ09NTUVOVCIsICJUX0NPTkZJRyIsCisgICJUX01FTlVDT05GSUciLCAiVF9IRUxQIiwg
IlRfSEVMUFRFWFQiLCAiVF9JRiIsICJUX0VORElGIiwgIlRfREVQRU5EUyIsCisgICJUX09QVElP
TkFMIiwgIlRfUFJPTVBUIiwgIlRfVFlQRSIsICJUX0RFRkFVTFQiLCAiVF9TRUxFQ1QiLCAiVF9J
TVBMWSIsCisgICJUX1JBTkdFIiwgIlRfVklTSUJMRSIsICJUX09QVElPTiIsICJUX09OIiwgIlRf
V09SRCIsICJUX1dPUkRfUVVPVEUiLAorICAiVF9VTkVRVUFMIiwgIlRfTEVTUyIsICJUX0xFU1Nf
RVFVQUwiLCAiVF9HUkVBVEVSIiwgIlRfR1JFQVRFUl9FUVVBTCIsCisgICJUX0NMT1NFX1BBUkVO
IiwgIlRfT1BFTl9QQVJFTiIsICJUX0VPTCIsICJUX1ZBUklBQkxFIiwgIlRfQVNTSUdOIiwKKyAg
IlRfQVNTSUdOX1ZBTCIsICJUX09SIiwgIlRfQU5EIiwgIlRfRVFVQUwiLCAiVF9OT1QiLCAiJGFj
Y2VwdCIsICJpbnB1dCIsCisgICJzdGFydCIsICJtYWlubWVudV9zdG10IiwgInN0bXRfbGlzdCIs
ICJvcHRpb25fbmFtZSIsICJjb21tb25fc3RtdCIsCisgICJvcHRpb25fZXJyb3IiLCAiY29uZmln
X2VudHJ5X3N0YXJ0IiwgImNvbmZpZ19zdG10IiwKKyAgIm1lbnVjb25maWdfZW50cnlfc3RhcnQi
LCAibWVudWNvbmZpZ19zdG10IiwgImNvbmZpZ19vcHRpb25fbGlzdCIsCisgICJjb25maWdfb3B0
aW9uIiwgInN5bWJvbF9vcHRpb24iLCAic3ltYm9sX29wdGlvbl9saXN0IiwKKyAgInN5bWJvbF9v
cHRpb25fYXJnIiwgImNob2ljZSIsICJjaG9pY2VfZW50cnkiLCAiY2hvaWNlX2VuZCIsCisgICJj
aG9pY2Vfc3RtdCIsICJjaG9pY2Vfb3B0aW9uX2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9p
Y2VfYmxvY2siLAorICAiaWZfZW50cnkiLCAiaWZfZW5kIiwgImlmX3N0bXQiLCAiaWZfYmxvY2si
LCAibWVudSIsICJtZW51X2VudHJ5IiwKKyAgIm1lbnVfZW5kIiwgIm1lbnVfc3RtdCIsICJtZW51
X2Jsb2NrIiwgInNvdXJjZV9zdG10IiwgImNvbW1lbnQiLAorICAiY29tbWVudF9zdG10IiwgImhl
bHBfc3RhcnQiLCAiaGVscCIsICJkZXBlbmRzX2xpc3QiLCAiZGVwZW5kcyIsCisgICJ2aXNpYmls
aXR5X2xpc3QiLCAidmlzaWJsZSIsICJwcm9tcHRfc3RtdF9vcHQiLCAicHJvbXB0IiwgImVuZCIs
ICJubCIsCisgICJpZl9leHByIiwgImV4cHIiLCAibm9uY29uc3Rfc3ltYm9sIiwgInN5bWJvbCIs
ICJ3b3JkX29wdCIsCisgICJhc3NpZ25tZW50X3N0bXQiLCAiYXNzaWduX3ZhbCIsIFlZX05VTExQ
VFIKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtOVU1dIC0tIChF
eHRlcm5hbCkgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisgICAoaW50ZXJuYWwp
IHN5bWJvbCBudW1iZXIgTlVNICh3aGljaCBtdXN0IGJlIHRoYXQgb2YgYSB0b2tlbikuICAqLwor
c3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Cit7CisgICAgICAgMCwgICAy
NTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2
NCwKKyAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAyNzAsICAgMjcxLCAg
IDI3MiwgICAyNzMsICAgMjc0LAorICAgICAyNzUsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5
LCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAyODQsCisgICAgIDI4NSwgICAyODYsICAg
Mjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTIsICAgMjkzLCAgIDI5NCwKKyAg
ICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMjk4Cit9OworIyBlbmRpZgorCisjZGVmaW5lIFlZUEFD
VF9OSU5GIC05MgorCisjZGVmaW5lIHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0KFl5c3RhdGUpIFwK
KyAgKCEhKChZeXN0YXRlKSA9PSAoLTkyKSkpCisKKyNkZWZpbmUgWVlUQUJMRV9OSU5GIC04OQor
CisjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXAorICAwCisK
KyAgLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlv
biBkZXNjcmliaW5nCisgICAgIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDE2IHl5cGFjdFtdID0KK3sKKyAgICAgIDIxLCAgICAzOCwgICAtOTIsICAgICA0LCAgIC05Miwg
ICAtOTIsICAgMTU3LCAgICAyMywgICAtOTIsICAgLTkyLAorICAgICAtMTksICAgLTkyLCAgIDE5
MSwgICAtMTYsICAgIDM4LCAgIC0xMywgICAgMzgsICAgICA2LCAgICAyNCwgICAgMzgsCisgICAg
ICA0OCwgICAgNDgsICAgIDM0LCAgICA0MywgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwKKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgIDk2LCAgIC05MiwgICAgNDQs
ICAgMTExLCAgIC05MiwgICAtOTIsICAgLTkyLAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCisgICAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
ICA4MywKKyAgICAgLTkyLCAgICA4OSwgICAtOTIsICAgMTE2LCAgIC05MiwgICAxMzMsICAgLTky
LCAgIDEzNCwgICAxNDYsICAgLTkyLAorICAgICAgMzQsICAgIDM0LCAgIDExMywgICAtOTIsICAg
IDczLCAgIC05MiwgICAxNTAsICAgIDYyLCAgIDE1MSwgICAgMzEsCisgICAgIDEyMywgICAyNTgs
ICAgMjkzLCAgIDI4MiwgICAgLTIsICAgMjgyLCAgIDIyNSwgICAtOTIsICAgLTkyLCAgIC05MiwK
KyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgIDMwLCAgIC05MiwgICAtOTIsICAgIDM0LCAgICAz
NCwgICAgNjUsICAgIDY1LAorICAgICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjUsICAgLTkyLCAg
IC05MiwgICAxNTIsICAgLTkyLCAgIDE1MywgICAxNTQsCisgICAgIDExMCwgICAgMzgsICAgIDM4
LCAgICAzNCwgICAgNDgsICAgIDQ4LCAgICA2NSwgICAtOTIsICAgMjAyLCAgIC05MiwKKyAgICAg
LTkyLCAgIC05MiwgICAtOTIsICAgMjAzLCAgIC05MiwgICAtOTIsICAgMTgxLCAgICAzOCwgICAg
MzgsICAgIDQ4LAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIDIw
NSwgICAtOTIsICAgIDgwLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgMTc5LCAgIC05MiwgICAtOTIsICAg
LTkyLAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIs
ICAgIDM0LCAgIDIwNSwgICAxODUsCisgICAgIDIwNSwgICAtMTEsICAgMjA1LCAgIDIwNSwgICAg
NjUsICAgIDM2LCAgIDE4NiwgICAtOTIsICAgLTkyLCAgIDIwNSwKKyAgICAgMTg3LCAgIDIwNSwg
ICAgMzQsICAgLTkyLCAgIDExNSwgICAxODgsICAgLTkyLCAgIC05MiwgICAyMDEsICAgMjE0LAor
ICAgICAyMTUsICAgMjA1LCAgIDE5NiwgICAtOTIsICAgLTkyLCAgIDIxNywgICAtOTIsICAgMjE4
LCAgICA4MSwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAyMTksICAg
IDM4LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyCit9OworCisgIC8qIFlZ
REVGQUNUW1NUQVRFLU5VTV0gLS0gRGVmYXVsdCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNU
QVRFLU5VTS4KKyAgICAgUGVyZm9ybWVkIHdoZW4gWVlUQUJMRSBkb2VzIG5vdCBzcGVjaWZ5IHNv
bWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBl
cnJvci4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5ZGVmYWN0W10gPQoreworICAg
ICAgIDcsICAgICAwLCAgIDEwNywgICAgIDAsICAgICAzLCAgICAgNywgICAgIDAsICAgICA3LCAg
IDEwMiwgICAxMDMsCisgICAgICAgMCwgICAgIDEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxMjUsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxNSwgICAgMjAsICAgIDE2LCAgICAxNywgICAgMjIsICAgIDE4LAorICAgICAgMTks
ICAgIDIxLCAgICAyMywgICAgIDAsICAgIDI0LCAgICAgMCwgICAgIDAsICAgICA4LCAgICAzNywg
ICAgMjcsCisgICAgICAzNywgICAgMjgsICAgIDU5LCAgICA2OSwgICAgIDksICAgIDc0LCAgICAy
NSwgICAgOTYsICAgIDgyLCAgICAxMCwKKyAgICAgIDI5LCAgICA5MSwgICAgMjYsICAgIDExLCAg
ICAzMCwgICAxMDgsICAgICAyLCAgICAgNiwgICAgMTQsICAgICAwLAorICAgICAxMDQsICAgICAw
LCAgIDEyNiwgICAgIDAsICAgMTA1LCAgICAgMCwgICAxMjIsICAgICAwLCAgICAgMCwgICAxMjQs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyMywgICAxMTEsICAgMTA2LCAgICAgMCwgICAx
MjgsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5MSwg
ICAgIDAsICAgICAwLCAgICA3OCwgICAgODYsICAgIDU1LAorICAgICAgODcsICAgIDMzLCAgICAz
NSwgICAgIDAsICAgMTE5LCAgICA3MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTIsICAgMTI5LCAgICAgMCwgICAgMTMsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAxMDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA1MSwgICAgIDAsICAgIDQzLAorICAgICAgNDIsICAgIDM4LCAgICAzOSwgICAg
IDAsICAgIDQxLCAgICA0MCwgICAgIDAsICAgICAwLCAgIDEwMCwgICAgIDAsCisgICAgICA2Mywg
ICAgNjQsICAgIDYwLCAgICA2MiwgICAgNjEsICAgIDcwLCAgICA1OCwgICAgNTcsICAgIDc1LCAg
ICA3NywKKyAgICAgIDczLCAgICA3NiwgICAgNzIsICAgMTA5LCAgICA5OCwgICAgIDAsICAgIDk3
LCAgICA4MywgICAgODUsICAgIDgxLAorICAgICAgODQsICAgIDgwLCAgICA5MywgICAgOTQsICAg
IDkyLCAgIDExOCwgICAxMjAsICAgMTIxLCAgIDExNywgICAxMTIsCisgICAgIDExMywgICAxMTQs
ICAgMTE1LCAgIDExNiwgICAxMjcsICAgIDMyLCAgICA4OSwgICAgIDAsICAgMTA5LCAgICAgMCwK
KyAgICAgMTA5LCAgIDEwOSwgICAxMDksICAgMTA5LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5
MCwgICAgNjcsICAgMTA5LAorICAgICAgIDAsICAgMTA5LCAgICAgMCwgICAgOTksICAgICAwLCAg
ICAgMCwgICAgNDQsICAgMTAxLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxMDksICAgIDUz
LCAgICA1MCwgICAgMzEsICAgICAwLCAgICA2NiwgICAgIDAsICAgMTEwLCAgICA5NSwKKyAgICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAgMCwgICAgIDAsICAgIDUyLCAgICA2NSwgICAg
NjgsICAgIDQ5LAorICAgICAgNTQKK307CisKKyAgLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8K
K3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlwZ290b1tdID0KK3sKKyAgICAgLTkyLCAgIC05
MiwgICAyNDksICAgLTkyLCAgIDI1MiwgICAtOTIsICAgIC05LCAgIC02NywgICAtOTIsICAgLTky
LAorICAgICAtOTIsICAgLTkyLCAgIDIyMCwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsCisgICAgICAzNSwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIs
ICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAgIDEwMCwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDE3NywgICAxOTUsICAgLTY1LAorICAg
ICAtOTIsICAgLTkyLCAgIDEzNywgICAgLTEsICAgIDI2LCAgIC05MiwgICAxNDEsICAgLTY5LCAg
IC0xNSwgICAtOTEsCisgICAgIC05MiwgICAtOTIsICAgLTkyCit9OworCisgIC8qIFlZREVGR09U
T1tOVEVSTS1OVU1dLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10g
PQoreworICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAzNiwgICAgMzcs
ICAgMTIwLCAgICAzOCwgICAgMzksCisgICAgICA0MCwgICAgNDEsICAgIDc5LCAgIDEyMSwgICAx
MjIsICAgMTc1LCAgIDIwNiwgICAgNDIsICAgIDQzLCAgIDEzNiwKKyAgICAgIDQ0LCAgICA4MSwg
ICAxMzIsICAgIDgyLCAgICA0NSwgICAxNDAsICAgIDQ2LCAgICA4MywgICAgNDcsICAgIDQ4LAor
ICAgICAxNDksICAgIDQ5LCAgICA4NSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAxMjMsICAgMTI0
LCAgICA4NiwgICAxMjUsCisgICAgICA4NCwgICAxNDYsICAgMTY5LCAgIDE3MCwgICAgNTMsICAg
ICA3LCAgIDE4MywgICAgNzIsICAgIDczLCAgICA3NCwKKyAgICAgIDYzLCAgICA1NCwgICAxMDYK
K307CisKKyAgLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0gLS0gV2hhdCB0byBkbyBpbiBz
dGF0ZSBTVEFURS1OVU0uICBJZgorICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElm
IG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hvc2UKKyAgICAgbnVtYmVyIGlzIHRoZSBvcHBv
c2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KK3sKKyAgICAgIDEwLCAgICA5MywgICAgOTQsICAgMTgy
LCAgICAxMSwgICAgNjcsICAgIDY4LCAgIDE1OCwgICAxNTksICAgMTYwLAorICAgICAxNjEsICAg
MTYyLCAgIDE2MywgICAgNTksICAgMTMxLCAgICA2MSwgICAxMzQsICAgIDU3LCAgICA2NSwgICAx
NTMsCisgICAgICA1OCwgICAxNTQsICAgMTQzLCAgICA2MCwgICAgIDEsICAgMTc0LCAgICAgMSwg
ICAxNTYsICAgMTU3LCAgICA5NiwKKyAgICAgIDk3LCAgIC0zNCwgICAxMDgsICAgIDYyLCAgIDE0
NCwgICAtMzQsICAgLTM0LCAgIC0zNCwgICAtMzQsICAgLTM0LAorICAgICAtMzQsICAgLTM0LCAg
IC0zNCwgICAxMDksICAgMTcxLCAgIC0zNCwgICAtMzQsICAgMTEwLCAgIC0zNCwgICAxMTEsCisg
ICAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgLTM0LCAgIDExNywgICAgIDIs
ICAgMTE4LCAgICA1NSwKKyAgICAgIDY0LCAgICA2NiwgICAgNjksICAgMTkyLCAgIDE1NSwgICAg
IDgsICAgICA5LCAgIDExOSwgICAtMzQsICAgIDcwLAorICAgICAgOTYsICAgIDk3LCAgIDE5Mywg
ICAxMzUsICAgMTM4LCAgICA2NiwgICAxNDcsICAgIDcxLCAgIDE1MywgICAgNzUsCisgICAgIDE1
NCwgICAxMDgsICAgIDc3LCAgIDE5MSwgICAtNzksICAgLTc5LCAgIC03OSwgICAtNzksICAgLTc5
LCAgIC03OSwKKyAgICAgLTc5LCAgIC03OSwgICAgNjYsICAgIDY5LCAgIC03OSwgICAtNzksICAg
MTEwLCAgICA3NiwgICAxODQsICAgMTcyLAorICAgICAxNzMsICAgMTA1LCAgICA5OCwgICAgOTks
ICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTE4LCAgIDEzNywgICAxNDIsCisgICAgIDE2OCwgICAx
NTEsICAgIDc4LCAgIDE5OCwgICAxODEsICAgMTAzLCAgIDE1MiwgICAtNzksICAgMTM5LCAgICA4
NywKKyAgICAgMTQ4LCAgICA5NiwgICAgOTcsICAgLTM2LCAgIDEwOCwgICAgODgsICAgMTc5LCAg
IC0zNiwgICAtMzYsICAgLTM2LAorICAgICAtMzYsICAgLTM2LCAgIC0zNiwgICAtMzYsICAgLTM2
LCAgIDEwOSwgICAxNjcsICAgLTM2LCAgIC0zNiwgICAxMTAsCisgICAgIC0zNiwgICAxMTEsICAg
MTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAtMzYsICAgMTE3LCAgICA5NSwKKyAg
ICAgMTE4LCAgIDE5OSwgICAgODksICAgIDk2LCAgICA5NywgICAgOTYsICAgIDk3LCAgICAtNSwg
ICAgMTMsICAgMTE5LAorICAgICAtMzYsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgOTAsCisgICAgICA5MSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMx
LCAgICAzMiwgICAgOTIsICAgMTQxLCAgICAzMywgICAxNTAsICAgMTA0LCAgIDEwNywgICAxNjQs
ICAgMTY1LAorICAgICAxNjYsICAgIC00LCAgICAxMywgICAgMzQsICAgIDM1LCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgIDE3Niwg
ICAyMTAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAy
OCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgMTc3LCAgIDE3OCwgICAgMzMsICAgMTgy
LAorICAgICAgOTcsICAgMTg2LCAgIDE5NCwgICAxOTYsICAgMjAwLCAgIC04OCwgICAxMDgsICAg
IDM0LCAgICAzNSwgICAtODgsCisgICAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgs
ICAgLTg4LCAgIC04OCwgICAyMDEsICAgMjA1LCAgIC04OCwKKyAgICAgLTg4LCAgIDExMCwgICAt
ODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LAorICAg
ICAyMDIsICAgMjAzLCAgIDExOCwgICAyMDcsICAgMjA4LCAgIDIwOSwgICAgNTYsICAgIDEyLCAg
IDEzMywgICAxMDgsCisgICAgICA4MCwgICAxNTIsICAgLTg4LCAgIC01NiwgICAtNTYsICAgMTgw
LCAgIC01NiwgICAtNTYsICAgLTU2LCAgIC01NiwKKyAgICAgMTA5LCAgICAgMCwgICAtNTYsICAg
LTU2LCAgIDExMCwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTQ1LAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDExOCwgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsCisgICAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAxMzAsICAgLTU2LCAgICAy
MiwgICAgMjMsICAgIDE1LCAgICAxNiwKKyAgICAgICAwLCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgIDAsICAgICAwLCAgICAyMiwgICAgMjMsICAgMTg1LAorICAgICAgIDAsICAgMTg3
LCAgIDE4OCwgICAxODksICAgMTkwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAzNCwgICAgMzUs
CisgICAgIDE5NSwgICAgIDAsICAgMTk3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzNCwKKyAgICAgIDM1LCAgICAgMCwgICAyMDQKK307CisKK3N0YXRpYyBj
b25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0KK3sKKyAgICAgICAxLCAgICA3MCwgICAgNzEs
ICAgIDE0LCAgICAgMCwgICAgMjAsICAgIDIxLCAgICA5OCwgICAgOTksICAgMTAwLAorICAgICAx
MDEsICAgMTAyLCAgIDEwMywgICAgMTQsICAgIDgxLCAgICAxNiwgICAgODEsICAgIDM2LCAgICAx
OSwgICAgODYsCisgICAgICAzNiwgICAgODYsICAgIDI0LCAgICAzNiwgICAgIDMsICAgMTE2LCAg
ICAgMywgICAgOTYsICAgIDk3LCAgICA0MCwKKyAgICAgIDQxLCAgICAgMCwgICAgIDEsICAgIDI3
LCAgICAzNiwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgMTEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsCisgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMzYsICAgIDI3LCAgICAzNiwKKyAgICAgIDM2LCAgICAyNywgICAgMjgsICAgIDI3LCAgICAz
NCwgICAgMjcsICAgIDI4LCAgICAzNiwgICAgMzcsICAgIDM1LAorICAgICAgNDAsICAgIDQxLCAg
ICAzNiwgICAgODIsICAgIDgzLCAgICAyNywgICAgODUsICAgIDQzLCAgIDE0NSwgICAgMzYsCisg
ICAgIDE0NSwgICAgIDEsICAgIDM4LCAgIDE3NCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwKKyAgICAgIDEwLCAgICAxMSwgICAgMjcsICAgIDI4LCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAgMSwgICAxNjcsICAgMTE0LAorICAgICAxMTUsICAgIDM5LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDI3LCAgICA4MiwgICAgODMsCisgICAgIDEx
MSwgICAgODUsICAgICAxLCAgIDE4MiwgICAxMjksICAgIDQyLCAgICAzNiwgICAgMzcsICAgIDgz
LCAgICAzNiwKKyAgICAgIDg1LCAgICA0MCwgICAgNDEsICAgICAwLCAgICAgMSwgICAgMzYsICAg
MTI3LCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMjYsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAz
NiwKKyAgICAgIDI3LCAgICAzNiwgICAgMzYsICAgIDQwLCAgICA0MSwgICAgNDAsICAgIDQxLCAg
ICAgMCwgICAgIDEsICAgIDM2LAorICAgICAgMzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsCisgICAgICAzNiwgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAg
ICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDgzLCAgICAyNywgICAgODUsICAgIDM2LCAgICAzNiwg
ICAgMzYsICAgIDM2LAorICAgICAgMzYsICAgICAwLCAgICAgMSwgICAgMzYsICAgIDM3LCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgIDExLCAg
ICAgMSwgICAyMDUsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5
LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDEzLCAgICAzNiwgICAgMjcs
ICAgIDE0LAorICAgICAgNDEsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAgMCwgICAg
IDEsICAgIDM2LCAgICAzNywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsICAgIDQyLCAgICAxNCwKKyAgICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LAorICAgICAgMzYsICAgIDM2LCAgICAyNywgICAgMzYsICAgIDM2LCAgICAzNiwgICAgIDcsICAg
ICA1LCAgICA4MSwgICAgIDEsCisgICAgICA0MCwgICAgMzYsICAgIDM3LCAgICAgNSwgICAgIDYs
ICAgMTI4LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAtMSwgICAg
MTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDg0LAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsCisgICAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsICAgIDM3
LCAgICAxNCwgICAgMTUsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAxNCwgICAgMTUsICAgMTY4LAorICAgICAgLTEs
ICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwg
ICAgMzcsCisgICAgIDE3OSwgICAgLTEsICAgMTgxLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzNiwKKyAgICAgIDM3LCAgICAtMSwgICAxOTEKK307CisKKyAg
LyogWVlTVE9TW1NUQVRFLU5VTV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nl
c3NpbmcKKyAgICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovCitzdGF0aWMgY29uc3Qg
eXl0eXBlX3VpbnQ4IHl5c3Rvc1tdID0KK3sKKyAgICAgICAwLCAgICAgMywgICAgMzYsICAgIDQ1
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA4OSwgICAgMjcsICAgIDI4LAorICAgICAgODcsICAg
ICAwLCAgICA0OCwgICAgIDEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksCisgICAgICAxMCwgICAgMTEsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwg
ICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI3LCAgICAz
NiwgICAgMzcsICAgIDQ5LCAgICA1MCwgICAgNTIsICAgIDUzLAorICAgICAgNTQsICAgIDU1LCAg
ICA2MSwgICAgNjIsICAgIDY0LCAgICA2OCwgICAgNzAsICAgIDcyLCAgICA3MywgICAgNzUsCisg
ICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4OCwgICAgOTUsICAgIDM2LCAgICA0NiwgICAgMzYs
ICAgIDM2LCAgICA4NywKKyAgICAgIDM2LCAgICA4NywgICAgMjcsICAgIDk0LCAgICAzNiwgICAg
ODcsICAgIDI3LCAgICA5MiwgICAgOTIsICAgIDI4LAorICAgICAgMzUsICAgIDQzLCAgICA5MSwg
ICAgOTIsICAgIDkzLCAgICAzNiwgICAgIDEsICAgIDM4LCAgICAgMSwgICAgNTYsCisgICAgICA1
NiwgICAgNjUsICAgIDY3LCAgICA3MSwgICAgODQsICAgIDc2LCAgICA4MiwgICAgMzYsICAgIDM2
LCAgICAzNiwKKyAgICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDkxLCAgICA5MSwgICAgMzYsICAg
IDQwLCAgICA0MSwgICAgMjksICAgIDMwLAorICAgICAgMzEsICAgIDMyLCAgICAzMywgICAgNDIs
ICAgIDM2LCAgICAzOSwgICAgOTYsICAgIDM2LCAgICAgMSwgICAgMTIsCisgICAgICAxNiwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjUsICAgIDI3LCAgICAz
NiwKKyAgICAgIDUxLCAgICA1NywgICAgNTgsICAgIDgwLCAgICA4MSwgICAgODMsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMzYsICAgIDUxLCAgICA2NiwgICAgODEsICAgIDgz
LCAgICA1MCwgICAgNjMsICAgIDg4LCAgICA1MCwgICAgNjQsCisgICAgICA2OSwgICAgNzUsICAg
IDg4LCAgICAyNCwgICAgMzYsICAgIDgyLCAgICA4NSwgICAgNTAsICAgIDY0LCAgICA3NCwKKyAg
ICAgIDc1LCAgICA4OCwgICAgMzYsICAgIDUxLCAgICA4MywgICAgMzQsICAgIDkxLCAgICA5MSwg
ICAgOTMsICAgIDkzLAorICAgICAgOTMsICAgIDkzLCAgICA5MywgICAgOTMsICAgIDM2LCAgICAz
NiwgICAgMzYsICAgIDI2LCAgICA4NywgICAgODYsCisgICAgICA4NywgICAgOTEsICAgIDkyLCAg
ICA5MiwgICAgOTMsICAgIDU5LCAgICAgMSwgICAgMTMsICAgIDM2LCAgICA4NywKKyAgICAgIDg2
LCAgICA5MiwgICAgMTQsICAgIDkwLCAgICA5MSwgICAgOTAsICAgIDM2LCAgICA5MCwgICAgOTAs
ICAgIDkwLAorICAgICAgOTAsICAgIDkzLCAgICAyNywgICAgMzYsICAgIDM2LCAgICA5MCwgICAg
MzYsICAgIDkwLCAgICA5MSwgICAgMzYsCisgICAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwg
ICAgOTAsICAgIDQyLCAgICA2MCwgICAgMzYsICAgIDM2LCAgICAzNiwKKyAgICAgIDg3Cit9Owor
CisgIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlO
IGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10gPQoreworICAg
ICAgIDAsICAgIDQ0LCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OCwgICAgNDgsCisgICAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDgsICAgIDQ5
LCAgICA0OSwgICAgNDksICAgIDQ5LCAgICA0OSwKKyAgICAgIDQ5LCAgICA0OSwgICAgNDksICAg
IDQ5LCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUwLAorICAgICAgNTAs
ICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1Niwg
ICAgNTYsCisgICAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1
NywgICAgNTcsICAgIDU3LCAgICA1NywKKyAgICAgIDU4LCAgICA1OSwgICAgNTksICAgIDYwLCAg
ICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LAorICAgICAgNjUsICAgIDY1
LCAgICA2NSwgICAgNjUsICAgIDY1LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjcs
CisgICAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcxLCAgICA3MSwgICAg
NzEsICAgIDcyLCAgICA3MywKKyAgICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc2LCAgICA3Niwg
ICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLAorICAgICAgODEsICAgIDgyLCAgICA4
MiwgICAgODIsICAgIDgyLCAgICA4MywgICAgODQsICAgIDg0LCAgICA4NCwgICAgODUsCisgICAg
ICA4NiwgICAgODYsICAgIDg3LCAgICA4NywgICAgODgsICAgIDg4LCAgICA4OCwgICAgODksICAg
IDg5LCAgICA5MCwKKyAgICAgIDkwLCAgICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEs
ICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLAorICAgICAgOTEsICAgIDkxLCAgICA5MiwgICAg
OTMsICAgIDkzLCAgICA5NCwgICAgOTQsICAgIDk1LCAgICA5NiwgICAgOTYKK307CisKKyAgLyog
WVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2Yg
cnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAg
ICAgIDAsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLCAg
ICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICA0LCAgICAgNCwgICAgIDMsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEs
ICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMiwg
ICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
NCwgICAgIDQsICAgICA0LCAgICAgNSwKKyAgICAgICAzLCAgICAgMCwgICAgIDMsICAgICAwLCAg
ICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgNCwgICAgIDAs
CisgICAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAzLCAgICAgMywKKyAgICAgICAxLCAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAzLCAgICAgMywgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAwLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAg
ICAyLCAgICAgMCwKKyAgICAgICAyLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMs
ICAgICAzLCAgICAgMywgICAgIDMsICAgICAyLAorICAgICAgIDMsICAgICAzLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMCwgICAgIDEsICAgICA0LCAgICAgMCwgICAgIDEKK307CisKKworI2Rl
ZmluZSB5eWVycm9rICAgICAgICAgKHl5ZXJyc3RhdHVzID0gMCkKKyNkZWZpbmUgeXljbGVhcmlu
ICAgICAgICh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZICAgICAgICAgKC0yKQor
I2RlZmluZSBZWUVPRiAgICAgICAgICAgMAorCisjZGVmaW5lIFlZQUNDRVBUICAgICAgICBnb3Rv
IHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQgICAgICAgICBnb3RvIHl5YWJvcnRsYWIKKyNk
ZWZpbmUgWVlFUlJPUiAgICAgICAgIGdvdG8geXllcnJvcmxhYgorCisKKyNkZWZpbmUgWVlSRUNP
VkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQorCisjZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1
ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHl5
Y2hhciA9PSBZWUVNUFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBZWVBPUFNUQUNLICh5eWxlbik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeXlzdGF0ZSA9
ICp5eXNzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
IGdvdG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eWVycm9yIChZWV8oInN5
bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwKKyAgICAgIFlZRVJST1I7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAord2hp
bGUgKDApCisKKy8qIEVycm9yIHRva2VuIG51bWJlciAqLworI2RlZmluZSBZWVRFUlJPUiAgICAg
ICAgMQorI2RlZmluZSBZWUVSUkNPREUgICAgICAgMjU2CisKKworCisvKiBFbmFibGUgZGVidWdn
aW5nIGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYK
KyMgIGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgIGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklO
VEYoQXJncykgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgWVlGUFJJTlRGIEFyZ3M7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisvKiBUaGlzIG1hY3JvIGlzIHByb3ZpZGVk
IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLworI2lmbmRlZiBZWV9MT0NBVElPTl9QUklO
VAorIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisjZW5k
aWYKKworCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2Nh
dGlvbikgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoeXlk
ZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
JXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
eXlfc3ltYm9sX3ByaW50IChzdGRlcnIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICBUeXBlLCBWYWx1ZSk7IFwKKyAgICAgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wn
cyB2YWx1ZSBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3l5X3N5bWJvbF92YWx1ZV9wcmludCAoRklMRSAq
eXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCkKK3sK
KyAgRklMRSAqeXlvID0geXlvdXRwdXQ7CisgIFlZVVNFICh5eW8pOworICBpZiAoIXl5dmFsdWVw
KQorICAgIHJldHVybjsKKyMgaWZkZWYgWVlQUklOVAorICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5T
KQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOwor
IyBlbmRpZgorICBZWVVTRSAoeXl0eXBlKTsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xf
cHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3Qg
eXl2YWx1ZXApCit7CisgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIlcyAlcyAoIiwKKyAgICAgICAg
ICAgICB5eXR5cGUgPCBZWU5UT0tFTlMgPyAidG9rZW4iIDogIm50ZXJtIiwgeXl0bmFtZVt5eXR5
cGVdKTsKKworICB5eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFs
dWVwKTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00g
dXAgdG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit5
eV9zdGFja19wcmludCAoeXl0eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRv
cCkKK3sKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IHl5Ym90
dG9tIDw9IHl5dG9wOyB5eWJvdHRvbSsrKQorICAgIHsKKyAgICAgIGludCB5eWJvdCA9ICp5eWJv
dHRvbTsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3QpOworICAgIH0KKyAg
WVlGUFJJTlRGIChzdGRlcnIsICJcbiIpOworfQorCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChC
b3R0b20sIFRvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYg
KHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9wKSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBn
b2luZyB0byBiZSByZWR1Y2VkLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dHlw
ZV9pbnQxNiAqeXlzc3AsIFlZU1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlKQoreworICB1bnNpZ25l
ZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsKKyAgaW50IHl5bnJocyA9IHl5cjJb
eXlydWxlXTsKKyAgaW50IHl5aTsKKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFj
ayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLAorICAgICAgICAgICAgIHl5cnVsZSAtIDEsIHl5
bG5vKTsKKyAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0g
MDsgeXlpIDwgeXlucmhzOyB5eWkrKykKKyAgICB7CisgICAgICBZWUZQUklOVEYgKHN0ZGVyciwg
IiAgICQlZCA9ICIsIHl5aSArIDEpOworICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsCisg
ICAgICAgICAgICAgICAgICAgICAgIHl5c3Rvc1t5eXNzcFt5eWkgKyAxIC0geXlucmhzXV0sCisg
ICAgICAgICAgICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7CisgICAgfQorfQorCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJ
TlQoUnVsZSkgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeXlf
cmVkdWNlX3ByaW50ICh5eXNzcCwgeXl2c3AsIFJ1bGUpOyBcCit9IHdoaWxlICgwKQorCisvKiBO
b256ZXJvIG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVk
IHNvIHRoYXQKKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVi
dWc7CisjZWxzZSAvKiAhWVlERUJVRyAqLworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRl
ZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVm
aW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5U
KFJ1bGUpCisjZW5kaWYgLyogIVlZREVCVUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0
aWFsIHNpemUgb2YgdGhlIHBhcnNlcidzIHN0YWNrcy4gICovCisjaWZuZGVmIFlZSU5JVERFUFRI
CisjIGRlZmluZSBZWUlOSVRERVBUSCAyMDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1h
eGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYg
dGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVuc2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5v
dCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlm
CisgICBZWVNUQUNLX0FMTE9DX01BWElNVU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQor
ICAgZXZhbHVhdGVkIHdpdGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4g
ICovCisKKyNpZm5kZWYgWVlNQVhERVBUSAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2Vu
ZGlmCisKKworI2lmIFlZRVJST1JfVkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYg
ZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJs
ZW4gc3RybGVuCisjICBlbHNlCisvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCitz
dGF0aWMgWVlTSVpFX1QKK3l5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgWVlTSVpF
X1QgeXlsZW47CisgIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAg
Y29udGludWU7CisgIHJldHVybiB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZu
ZGVmIHl5c3RwY3B5CisjICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdf
SCAmJiBkZWZpbmVkIF9HTlVfU09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAg
ZWxzZQorLyogQ29weSBZWVNSQyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0
aGUgdGVybWluYXRpbmcgJ1wwJyBpbgorICAgWVlERVNULiAgKi8KK3N0YXRpYyBjaGFyICoKK3l5
c3RwY3B5IChjaGFyICp5eWRlc3QsIGNvbnN0IGNoYXIgKnl5c3JjKQoreworICBjaGFyICp5eWQg
PSB5eWRlc3Q7CisgIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOworCisgIHdoaWxlICgoKnl5ZCsr
ID0gKnl5cysrKSAhPSAnXDAnKQorICAgIGNvbnRpbnVlOworCisgIHJldHVybiB5eWQgLSAxOwor
fQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5kZWYgeXl0bmFtZXJyCisvKiBDb3B5IHRvIFlZ
UkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2Fy
eQorICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRhYmxlIGZvciB5
eWVycm9yLiAgVGhlCisgICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5l
Y2Vzc2FyeSB1bmxlc3MgdGhlIHN0cmluZworICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBj
b21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuCisgICBiYWNrc2xhc2gtYmFja3NsYXNoKS4g
IFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElmIFlZUkVTIGlzCisgICBudWxsLCBkbyBu
b3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0aGUgcmVzdWx0Cisg
ICB3b3VsZCBoYXZlIGJlZW4uICAqLworc3RhdGljIFlZU0laRV9UCit5eXRuYW1lcnIgKGNoYXIg
Knl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikKK3sKKyAgaWYgKCp5eXN0ciA9PSAnIicpCisgICAg
eworICAgICAgWVlTSVpFX1QgeXluID0gMDsKKyAgICAgIGNoYXIgY29uc3QgKnl5cCA9IHl5c3Ry
OworCisgICAgICBmb3IgKDs7KQorICAgICAgICBzd2l0Y2ggKCorK3l5cCkKKyAgICAgICAgICB7
CisgICAgICAgICAgY2FzZSAnXCcnOgorICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAg
Z290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCisgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAg
ICAgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorICAgICAgICAgICAgICBnb3RvIGRvX25vdF9zdHJp
cF9xdW90ZXM7CisgICAgICAgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBpZiAoeXlyZXMpCisgICAgICAgICAgICAgIHl5cmVzW3l5bl0g
PSAqeXlwOworICAgICAgICAgICAgeXluKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICAgIGNhc2UgJyInOgorICAgICAgICAgICAgaWYgKHl5cmVzKQorICAgICAgICAgICAgICB5eXJl
c1t5eW5dID0gJ1wwJzsKKyAgICAgICAgICAgIHJldHVybiB5eW47CisgICAgICAgICAgfQorICAg
IGRvX25vdF9zdHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0
dXJuIHl5c3RybGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIp
IC0geXlyZXM7Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byAqWVlNU0csIHdoaWNoIGlzIG9m
IHNpemUgKllZTVNHX0FMTE9DLCBhbiBlcnJvciBtZXNzYWdlCisgICBhYm91dCB0aGUgdW5leHBl
Y3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzCisgICBZ
WVNTUC4KKworICAgUmV0dXJuIDAgaWYgKllZTVNHIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4g
IFJldHVybiAxIGlmICpZWU1TRyBpcworICAgbm90IGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBt
ZXNzYWdlLiAgSW4gdGhhdCBjYXNlLCBhbHNvIHNldAorICAgKllZTVNHX0FMTE9DIHRvIHRoZSBy
ZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMuICBSZXR1cm4gMiBpZiB0aGUKKyAgIHJlcXVpcmVkIG51
bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2UgdG8gc3RvcmUuICAqLworc3RhdGljIGludAoreXlz
eW50YXhfZXJyb3IgKFlZU0laRV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLAorICAgICAg
ICAgICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQoreworICBZWVNJWkVf
VCB5eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5dG9rZW5dKTsKKyAg
WVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKKyAgZW51bSB7IFlZRVJST1JfVkVSQk9TRV9BUkdT
X01BWElNVU0gPSA1IH07CisgIC8qIEludGVybmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICov
CisgIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTFBUUjsKKyAgLyogQXJndW1lbnRzIG9m
IHl5Zm9ybWF0LiAqLworICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNXTsKKyAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVu
ZXhwZWN0ZWQiLCBvbmUgcGVyCisgICAgICJleHBlY3RlZCIpLiAqLworICBpbnQgeXljb3VudCA9
IDA7CisKKyAgLyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxpdGllcyBoZXJlIHRvIGNvbnNpZGVy
OgorICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZh
dWx0IGFjdGlvbiwgdGhlbgorICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBp
bnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbgorICAgICAgIGlzIGFuIGVycm9yIGFjdGlv
bi4gIEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hlY2sgZm9yIGV4cGVjdGVkCisgICAgICAgdG9rZW5z
IGJlY2F1c2UgdGhlcmUgYXJlIG5vbmUuCisgICAgIC0gVGhlIG9ubHkgd2F5IHRoZXJlIGNhbiBi
ZSBubyBsb29rYWhlYWQgcHJlc2VudCAoaW4geXljaGFyKSBpcyBpZgorICAgICAgIHRoaXMgc3Rh
dGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRodXMsCisg
ICAgICAgZGV0ZWN0aW5nIHRoZSBhYnNlbmNlIG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQg
dG8gZGV0ZXJtaW5lCisgICAgICAgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIG9yIGV4cGVj
dGVkIHRva2VuIHRvIHJlcG9ydC4gIEluIHRoYXQKKyAgICAgICBjYXNlLCBqdXN0IHJlcG9ydCBh
IHNpbXBsZSAic3ludGF4IGVycm9yIi4KKyAgICAgLSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3Qg
YSBsb29rYWhlYWQganVzdCBiZWNhdXNlIHRoaXMgc3RhdGUgaXMgYQorICAgICAgIGNvbnNpc3Rl
bnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGEK
KyAgICAgICBwcmV2aW91cyBpbmNvbnNpc3RlbnQgc3RhdGUsIGNvbnNpc3RlbnQgc3RhdGUgd2l0
aCBhIG5vbi1kZWZhdWx0CisgICAgICAgYWN0aW9uLCBvciB1c2VyIHNlbWFudGljIGFjdGlvbiB0
aGF0IG1hbmlwdWxhdGVkIHl5Y2hhci4KKyAgICAgLSBPZiBjb3Vyc2UsIHRoZSBleHBlY3RlZCB0
b2tlbiBsaXN0IGRlcGVuZHMgb24gc3RhdGVzIHRvIGhhdmUKKyAgICAgICBjb3JyZWN0IGxvb2th
aGVhZCBpbmZvcm1hdGlvbiwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIHBhcnNlciBub3QKKyAgICAg
ICB0byBwZXJmb3JtIGV4dHJhIHJlZHVjdGlvbnMgYWZ0ZXIgZmV0Y2hpbmcgYSBsb29rYWhlYWQg
ZnJvbSB0aGUKKyAgICAgICBzY2FubmVyIGFuZCBiZWZvcmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVy
cm9yLiAgVGh1cywgc3RhdGUgbWVyZ2luZworICAgICAgIChmcm9tIExBTFIgb3IgSUVMUikgYW5k
IGRlZmF1bHQgcmVkdWN0aW9ucyBjb3JydXB0IHRoZSBleHBlY3RlZAorICAgICAgIHRva2VuIGxp
c3QuICBIb3dldmVyLCB0aGUgbGlzdCBpcyBjb3JyZWN0IGZvciBjYW5vbmljYWwgTFIgd2l0aAor
ICAgICAgIG9uZSBleGNlcHRpb246IGl0IHdpbGwgc3RpbGwgY29udGFpbiBhbnkgdG9rZW4gdGhh
dCB3aWxsIG5vdCBiZQorICAgICAgIGFjY2VwdGVkIGR1ZSB0byBhbiBlcnJvciBhY3Rpb24gaW4g
YSBsYXRlciBzdGF0ZS4KKyAgKi8KKyAgaWYgKHl5dG9rZW4gIT0gWVlFTVBUWSkKKyAgICB7Cisg
ICAgICBpbnQgeXluID0geXlwYWN0Wyp5eXNzcF07CisgICAgICB5eWFyZ1t5eWNvdW50KytdID0g
eXl0bmFtZVt5eXRva2VuXTsKKyAgICAgIGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5
bikpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2
ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisgICAgICAgICAgICAgWVlDSEVDSy4gIElu
IG90aGVyIHdvcmRzLCBza2lwIHRoZSBmaXJzdCAtWVlOIGFjdGlvbnMgZm9yCisgICAgICAgICAg
ICAgdGhpcyBzdGF0ZSBiZWNhdXNlIHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy4gICovCisgICAg
ICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworICAgICAgICAgIC8qIFN0
YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAg
ICAgIGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgICAgICBpbnQgeXl4
ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7Cisg
ICAgICAgICAgaW50IHl5eDsKKworICAgICAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8
IHl5eGVuZDsgKyt5eXgpCisgICAgICAgICAgICBpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5
eCAmJiB5eXggIT0gWVlURVJST1IKKyAgICAgICAgICAgICAgICAmJiAheXl0YWJsZV92YWx1ZV9p
c19lcnJvciAoeXl0YWJsZVt5eXggKyB5eW5dKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01BWElNVU0pCisgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHl5Y291bnQgPSAxOworICAgICAg
ICAgICAgICAgICAgICB5eXNpemUgPSB5eXNpemUwOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB5eWFyZ1t5eWNvdW50Kytd
ID0geXl0bmFtZVt5eXhdOworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIFlZ
U0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVb
eXl4XSk7CisgICAgICAgICAgICAgICAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICAgICAgICAgICAgeXlzaXpl
ID0geXlzaXplMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICBzd2l0Y2ggKHl5Y291bnQpCisgICAgeworIyBkZWZpbmUgWVlDQVNFXyhO
LCBTKSAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBjYXNlIE46ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeXlmb3JtYXQgPSBTOyAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgYnJlYWsKKyAgICAgIFlZQ0FTRV8oMCwgWVlfKCJzeW50YXggZXJyb3Ii
KSk7CisgICAgICBZWUNBU0VfKDEsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikp
OworICAgICAgWVlDQVNFXygyLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhw
ZWN0aW5nICVzIikpOworICAgICAgWVlDQVNFXygzLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIikpOworICAgICAgWVlDQVNFXyg0LCBZWV8oInN5
bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIikpOwor
ICAgICAgWVlDQVNFXyg1LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0
aW5nICVzIG9yICVzIG9yICVzIG9yICVzIikpOworIyB1bmRlZiBZWUNBU0VfCisgICAgfQorCisg
IHsKKyAgICBZWVNJWkVfVCB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zm9ybWF0KTsK
KyAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9D
X01BWElNVU0pKQorICAgICAgcmV0dXJuIDI7CisgICAgeXlzaXplID0geXlzaXplMTsKKyAgfQor
CisgIGlmICgqeXltc2dfYWxsb2MgPCB5eXNpemUpCisgICAgeworICAgICAgKnl5bXNnX2FsbG9j
ID0gMiAqIHl5c2l6ZTsKKyAgICAgIGlmICghICh5eXNpemUgPD0gKnl5bXNnX2FsbG9jCisgICAg
ICAgICAgICAgJiYgKnl5bXNnX2FsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCisgICAg
ICAgICp5eW1zZ19hbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKyAgICAgIHJldHVybiAx
OworICAgIH0KKworICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUg
dXNlcidzIG5hbWUgc3BhY2UuCisgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2
ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisgICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdy
b25nIG51bWJlciBvZiAiJXMicy4gICovCisgIHsKKyAgICBjaGFyICp5eXAgPSAqeXltc2c7Cisg
ICAgaW50IHl5aSA9IDA7CisgICAgd2hpbGUgKCgqeXlwID0gKnl5Zm9ybWF0KSAhPSAnXDAnKQor
ICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5Zm9ybWF0WzFdID09ICdzJyAmJiB5eWkgPCB5eWNv
dW50KQorICAgICAgICB7CisgICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5
eWkrK10pOworICAgICAgICAgIHl5Zm9ybWF0ICs9IDI7CisgICAgICAgIH0KKyAgICAgIGVsc2UK
KyAgICAgICAgeworICAgICAgICAgIHl5cCsrOworICAgICAgICAgIHl5Zm9ybWF0Kys7CisgICAg
ICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8K
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
UmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9p
ZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5
dmFsdWVwKQoreworICBZWVVTRSAoeXl2YWx1ZXApOworICBpZiAoIXl5bXNnKQorICAgIHl5bXNn
ID0gIkRlbGV0aW5nIjsKKyAgWVlfU1lNQk9MX1BSSU5UICh5eW1zZywgeXl0eXBlLCB5eXZhbHVl
cCwgeXlsb2NhdGlvbnApOworCisgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lO
CisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgICAgICBjYXNlIDYyOiAvKiBjaG9pY2Vf
ZW50cnkgICovCisKKyAgICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVu
ZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSgoKnl5dmFsdWVwKS5tZW51KS0+Zmls
ZS0+bmFtZSwgKCgqeXl2YWx1ZXApLm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUg
PT0gKCgqeXl2YWx1ZXApLm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9CisKKyAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIDY4OiAvKiBpZl9lbnRyeSAgKi8KKworICAgICAgeworCWZwcmlu
dGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxu
IiwKKwkJKCgqeXl2YWx1ZXApLm1lbnUpLT5maWxlLT5uYW1lLCAoKCp5eXZhbHVlcCkubWVudSkt
PmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVudSA9PSAoKCp5eXZhbHVlcCkubWVudSkpCisJCW1l
bnVfZW5kX21lbnUoKTsKK30KKworICAgICAgICBicmVhazsKKworICAgIGNhc2UgNzM6IC8qIG1l
bnVfZW50cnkgICovCisKKyAgICAgIHsKKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5n
IGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsCisJCSgoKnl5dmFsdWVwKS5tZW51KS0+
ZmlsZS0+bmFtZSwgKCgqeXl2YWx1ZXApLm1lbnUpLT5saW5lbm8pOworCWlmIChjdXJyZW50X21l
bnUgPT0gKCgqeXl2YWx1ZXApLm1lbnUpKQorCQltZW51X2VuZF9tZW51KCk7Cit9CisKKyAgICAg
ICAgYnJlYWs7CisKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICBZ
WV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKK30KKworCisKKworLyogVGhlIGxvb2th
aGVhZCBzeW1ib2wuICAqLworaW50IHl5Y2hhcjsKKworLyogVGhlIHNlbWFudGljIHZhbHVlIG9m
IHRoZSBsb29rYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworLyogTnVtYmVyIG9m
IHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8KK2ludCB5eW5lcnJzOworCisKKy8qLS0tLS0tLS0t
LS4KK3wgeXlwYXJzZS4gIHwKK2AtLS0tLS0tLS0tKi8KKworaW50Cit5eXBhcnNlICh2b2lkKQor
eworICAgIGludCB5eXN0YXRlOworICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVm
b3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLworICAgIGludCB5eWVycnN0YXR1czsKKwor
ICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOgorICAgICAgICd5eXNzJzogcmVsYXRl
ZCB0byBzdGF0ZXMuCisgICAgICAgJ3l5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4K
KworICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhyb3VnaCBzZXBhcmF0ZSBwb2ludGVycywg
dG8gYWxsb3cgeXlvdmVyZmxvdworICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNld2hlcmUu
ICAqLworCisgICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8KKyAgICB5eXR5cGVfaW50MTYgeXlz
c2FbWVlJTklUREVQVEhdOworICAgIHl5dHlwZV9pbnQxNiAqeXlzczsKKyAgICB5eXR5cGVfaW50
MTYgKnl5c3NwOworCisgICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgICBZ
WVNUWVBFIHl5dnNhW1lZSU5JVERFUFRIXTsKKyAgICBZWVNUWVBFICp5eXZzOworICAgIFlZU1RZ
UEUgKnl5dnNwOworCisgICAgWVlTSVpFX1QgeXlzdGFja3NpemU7CisKKyAgaW50IHl5bjsKKyAg
aW50IHl5cmVzdWx0OworICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5z
bGF0ZWQpIHRva2VuIG51bWJlci4gICovCisgIGludCB5eXRva2VuID0gMDsKKyAgLyogVGhlIHZh
cmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0
aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8KKyAgWVlTVFlQRSB5eXZhbDsKKworI2lmIFlZ
RVJST1JfVkVSQk9TRQorICAvKiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFs
bG9jYXRlZCBzaXplLiAgKi8KKyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9
IHl5bXNnYnVmOworICBZWVNJWkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNl
bmRpZgorCisjZGVmaW5lIFlZUE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAo
TikpCisKKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVj
ZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJvIHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3Bw
ZWQuICAqLworICBpbnQgeXlsZW4gPSAwOworCisgIHl5c3NwID0geXlzcyA9IHl5c3NhOworICB5
eXZzcCA9IHl5dnMgPSB5eXZzYTsKKyAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICBZ
WURQUklOVEYgKChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAw
OworICB5eWVycnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZ
OyAvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworICBnb3RvIHl5c2V0c3RhdGU7CisK
Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3RhdGUsIHdoaWNoIGlzIGZvdW5k
IGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgorICAvKiBJbiBhbGwgY2FzZXMs
IHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcworICAgICBo
YXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUg
c3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6CisgICp5eXNzcCA9IHl5c3Rh
dGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgeworICAg
ICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUgdGhyZWUgc3RhY2tzLCBpbiBl
bGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOwor
CisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworICAgICAgICAvKiBHaXZlIHVzZXIgYSBjaGFu
Y2UgdG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisgICAgICAgICAgIHRo
ZXNlIHNvIHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8KKyAgICAg
ICAgICAgbWVtb3J5LiAgKi8KKyAgICAgICAgWVlTVFlQRSAqeXl2czEgPSB5eXZzOworICAgICAg
ICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKworICAgICAgICAvKiBFYWNoIHN0YWNrIHBv
aW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6ZSBvZiB0aGUKKyAgICAgICAgICAg
ZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQor
ICAgICAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1
dCB0aGF0IG1pZ2h0CisgICAgICAgICAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEg
bWFjcm8uICAqLworICAgICAgICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwK
KyAgICAgICAgICAgICAgICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisg
ICAgICAgICAgICAgICAgICAgICZ5eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorICAg
ICAgICAgICAgICAgICAgICAmeXlzdGFja3NpemUpOworCisgICAgICAgIHl5c3MgPSB5eXNzMTsK
KyAgICAgICAgeXl2cyA9IHl5dnMxOworICAgICAgfQorI2Vsc2UgLyogbm8geXlvdmVyZmxvdyAq
LworIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQorICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsK
KyMgZWxzZQorICAgICAgLyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovCisgICAg
ICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkKKyAgICAgICAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5
c3RhY2tzaXplKQorICAgICAgICB5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsK
KyAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7CisgICAgICAgIHVuaW9uIHl5YWxs
b2MgKnl5cHRyID0KKyAgICAgICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZ
WVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworICAgICAgICBpZiAoISB5eXB0cikKKyAgICAg
ICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNz
X2FsbG9jLCB5eXNzKTsKKyAgICAgICAgWVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2
cyk7CisjICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICAgIGlmICh5eXNzMSAhPSB5eXNz
YSkKKyAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5c3MxKTsKKyAgICAgIH0KKyMgZW5kaWYKKyNl
bmRpZiAvKiBubyB5eW92ZXJmbG93ICovCisKKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAt
IDE7CisgICAgICB5eXZzcCA9IHl5dnMgKyB5eXNpemUgLSAxOworCisgICAgICBZWURQUklOVEYg
KChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsCisgICAgICAgICAgICAg
ICAgICAodW5zaWduZWQgbG9uZyBpbnQpIHl5c3RhY2tzaXplKSk7CisKKyAgICAgIGlmICh5eXNz
ICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgICAgICBZWUFCT1JUOworICAgIH0KKwor
ICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0ZSkpOwor
CisgIGlmICh5eXN0YXRlID09IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgZ290byB5eWJh
Y2t1cDsKKworLyotLS0tLS0tLS0tLS4KK3wgeXliYWNrdXAuICB8CitgLS0tLS0tLS0tLS0qLwor
eXliYWNrdXA6CisKKyAgLyogRG8gYXBwcm9wcmlhdGUgcHJvY2Vzc2luZyBnaXZlbiB0aGUgY3Vy
cmVudCBzdGF0ZS4gIFJlYWQgYQorICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUg
YW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0IHRyeSB0byBkZWNp
ZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rYWhlYWQgdG9rZW4uICAqLwor
ICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAo
eXluKSkKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKworICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9v
a2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZQ0hB
UiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wu
ICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIgPSB5eWxleCAoKTsK
KyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5eWNoYXIgPSB5
eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9m
IGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9rZW4gPSBZWVRS
QU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMi
LCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYgdGhlIHByb3Bl
ciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvCisgICAg
IGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biArPSB5eXRva2Vu
OworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5dICE9IHl5dG9r
ZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsKKyAgaWYgKHl5
biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eW4pKQor
ICAgICAgICBnb3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXly
ZWR1Y2U7CisgICAgfQorCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBh
ZnRlciB0aHJlZSwgdHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJy
c3RhdHVzKQorICAgIHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0
b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXl0b2tlbiwgJnl5bHZh
bCwgJnl5bGxvYyk7CisKKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovCisgIHl5
Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgWVlfSUdOT1JFX01BWUJFX1VO
SU5JVElBTElaRURfQkVHSU4KKyAgKisreXl2c3AgPSB5eWx2YWw7CisgIFlZX0lHTk9SRV9NQVlC
RV9VTklOSVRJQUxJWkVEX0VORAorCisgIGdvdG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5
eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4g
IHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCit5eWRlZmF1bHQ6CisgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOworICBpZiAo
eXluID09IDApCisgICAgZ290byB5eWVycmxhYjsKKyAgZ290byB5eXJlZHVjZTsKKworCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eXJlZHVjZSAtLSBEbyBhIHJlZHVjdGlv
bi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eXJlZHVjZToKKyAgLyog
eXluIGlzIHRoZSBudW1iZXIgb2YgYSBydWxlIHRvIHJlZHVjZSB3aXRoLiAgKi8KKyAgeXlsZW4g
PSB5eXIyW3l5bl07CisKKyAgLyogSWYgWVlMRU4gaXMgbm9uemVybywgaW1wbGVtZW50IHRoZSBk
ZWZhdWx0IHZhbHVlIG9mIHRoZSBhY3Rpb246CisgICAgICckJCA9ICQxJy4KKworICAgICBPdGhl
cndpc2UsIHRoZSBmb2xsb3dpbmcgbGluZSBzZXRzIFlZVkFMIHRvIGdhcmJhZ2UuCisgICAgIFRo
aXMgYmVoYXZpb3IgaXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbgorICAgICB1c2VycyBzaG91bGQg
bm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTAorICAgICB1bmNvbmRpdGlvbmFs
bHkgbWFrZXMgdGhlIHBhcnNlciBhIGJpdCBzbWFsbGVyLCBhbmQgaXQgYXZvaWRzIGEKKyAgICAg
R0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8KKyAg
eXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsKKworCisgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsKKyAg
c3dpdGNoICh5eW4pCisgICAgeworICAgICAgICBjYXNlIDY6CisKKyAgICB7CisJbWVudV9hZGRf
cHJvbXB0KFBfTUVOVSwgKHl5dnNwWy0xXS5zdHJpbmcpLCBOVUxMKTsKK30KKworICAgIGJyZWFr
OworCisgIGNhc2UgMTE6CisKKyAgICB7IHpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkIGVuZCBzdGF0
ZW1lbnQiKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsgemNvbmZfZXJy
b3IoInVua25vd24gc3RhdGVtZW50IFwiJXNcIiIsICh5eXZzcFstMl0uc3RyaW5nKSk7IH0KKwor
ICAgIGJyZWFrOworCisgIGNhc2UgMTM6CisKKyAgICB7CisJemNvbmZfZXJyb3IoInVuZXhwZWN0
ZWQgb3B0aW9uIFwiJXNcIiIsICh5eXZzcFstMl0uaWQpLT5uYW1lKTsKK30KKworICAgIGJyZWFr
OworCisgIGNhc2UgMTQ6CisKKyAgICB7IHpjb25mX2Vycm9yKCJpbnZhbGlkIHN0YXRlbWVudCIp
OyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDMxOgorCisgICAgeyB6Y29uZl9lcnJvcigidW5r
bm93biBvcHRpb24gXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsgfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAzMjoKKworICAgIHsgemNvbmZfZXJyb3IoImludmFsaWQgb3B0aW9uIik7IH0K
KworICAgIGJyZWFrOworCisgIGNhc2UgMzM6CisKKyAgICB7CisJKHl5dnNwWy0xXS5zeW1ib2wp
LT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7CisJbWVudV9hZGRfZW50cnkoKHl5dnNwWy0xXS5z
eW1ib2wpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFstMV0uc3ltYm9sKS0+bmFtZSk7Cit9
CisKKyAgICBicmVhazsKKworICBjYXNlIDM0OgorCisgICAgeworCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDM1OgorCisgICAgeworCSh5eXZzcFstMV0uc3lt
Ym9sKS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRkX2VudHJ5KCh5eXZzcFst
MV0uc3ltYm9sKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudWNvbmZpZyAlc1xu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zeW1ib2wpLT5u
YW1lKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgMzY6CisKKyAgICB7CisJaWYgKGN1cnJl
bnRfZW50cnktPnByb21wdCkKKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0LT50eXBlID0gUF9NRU5V
OworCWVsc2UKKwkJemNvbmZwcmludCgid2FybmluZzogbWVudWNvbmZpZyBzdGF0ZW1lbnQgd2l0
aG91dCBwcm9tcHQiKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIs
IHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisKKyAg
Y2FzZSA0NDoKKworICAgIHsKKwltZW51X3NldF90eXBlKCh5eXZzcFstMl0uaWQpLT5zdHlwZSk7
CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCisJCXpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCksCisJCSh5eXZzcFstMl0uaWQpLT5zdHlwZSk7Cit9CisKKyAg
ICBicmVhazsKKworICBjYXNlIDQ1OgorCisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01Q
VCwgKHl5dnNwWy0yXS5zdHJpbmcpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA0NjoKKworICAgIHsKKwltZW51X2FkZF9leHBy
KFBfREVGQVVMVCwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWy0xXS5leHByKSk7CisJaWYgKCh5
eXZzcFstM10uaWQpLT5zdHlwZSAhPSBTX1VOS05PV04pCisJCW1lbnVfc2V0X3R5cGUoKHl5dnNw
Wy0zXS5pZCktPnN0eXBlKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0KCV1
KVxuIiwKKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJKHl5dnNwWy0zXS5p
ZCktPnN0eXBlKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNDc6CisKKyAgICB7CisJbWVu
dV9hZGRfc3ltYm9sKFBfU0VMRUNULCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFstMV0uZXhw
cikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDQ4OgorCisg
ICAgeworCW1lbnVfYWRkX3N5bWJvbChQX0lNUExZLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZz
cFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmltcGx5XG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2Ug
NDk6CisKKyAgICB7CisJbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9S
QU5HRSwoeXl2c3BbLTNdLnN5bWJvbCksICh5eXZzcFstMl0uc3ltYm9sKSksICh5eXZzcFstMV0u
ZXhwcikpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNTI6CisK
KyAgICB7CisJY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCgoeXl2
c3BbLTFdLnN0cmluZyksIHN0cmxlbigoeXl2c3BbLTFdLnN0cmluZykpKTsKKwlpZiAoaWQgJiYg
aWQtPmZsYWdzICYgVEZfT1BUSU9OKSB7CisJCW1lbnVfYWRkX29wdGlvbihpZC0+dG9rZW4sICh5
eXZzcFswXS5zdHJpbmcpKTsKKwkJZnJlZSgoeXl2c3BbMF0uc3RyaW5nKSk7CisJfQorCWVsc2UK
KwkJemNvbmZwcmludCgid2FybmluZzogaWdub3JpbmcgdW5rbm93biBvcHRpb24gJXMiLCAoeXl2
c3BbLTFdLnN0cmluZykpOworCWZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsKK30KKworICAgIGJy
ZWFrOworCisgIGNhc2UgNTM6CisKKyAgICB7ICh5eXZhbC5zdHJpbmcpID0gTlVMTDsgfQorCisg
ICAgYnJlYWs7CisKKyAgY2FzZSA1NDoKKworICAgIHsgKHl5dmFsLnN0cmluZykgPSAoeXl2c3Bb
MF0uc3RyaW5nKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA1NToKKworICAgIHsKKwlzdHJ1
Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKCh5eXZzcFstMV0uc3RyaW5nKSwgU1lNQk9MX0NI
T0lDRSk7CisJc3ltLT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7CisJbWVudV9hZGRfZW50cnko
c3ltKTsKKwltZW51X2FkZF9leHByKFBfQ0hPSUNFLCBOVUxMLCBOVUxMKTsKKwlmcmVlKCh5eXZz
cFstMV0uc3RyaW5nKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y2hvaWNlXG4iLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNh
c2UgNTY6CisKKyAgICB7CisJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOworfQorCisg
ICAgYnJlYWs7CisKKyAgY2FzZSA1NzoKKworICAgIHsKKwlpZiAoemNvbmZfZW5kdG9rZW4oKHl5
dnNwWzBdLmlkKSwgVF9DSE9JQ0UsIFRfRU5EQ0hPSUNFKSkgeworCQltZW51X2VuZF9tZW51KCk7
CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNob2ljZVxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQorfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA2NToK
KworICAgIHsKKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICh5eXZzcFstMl0uc3RyaW5nKSwg
KHl5dnNwWy0xXS5leHByKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisg
IGNhc2UgNjY6CisKKyAgICB7CisJaWYgKCh5eXZzcFstMl0uaWQpLT5zdHlwZSA9PSBTX0JPT0xF
QU4gfHwgKHl5dnNwWy0yXS5pZCktPnN0eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJbWVudV9zZXRf
dHlwZSgoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOworCQlwcmludGQoREVCVUdfUEFSU0UsICIlczol
ZDp0eXBlKCV1KVxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCisJCQko
eXl2c3BbLTJdLmlkKS0+c3R5cGUpOworCX0gZWxzZQorCQlZWUVSUk9SOworfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSA2NzoKKworICAgIHsKKwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9
IFNZTUJPTF9PUFRJT05BTDsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpvcHRpb25hbFxu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKwor
ICBjYXNlIDY4OgorCisgICAgeworCWlmICgoeXl2c3BbLTNdLmlkKS0+c3R5cGUgPT0gU19VTktO
T1dOKSB7CisJCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsICh5eXZzcFstMl0uc3ltYm9sKSwg
KHl5dnNwWy0xXS5leHByKSk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHRc
biIsCisJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9IGVsc2UKKwkJWVlF
UlJPUjsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNzE6CisKKyAgICB7CisJcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6aWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIp
KTsKKwkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7Cit9CisKKyAgICBicmVhazsKKwor
ICBjYXNlIDcyOgorCisgICAgeworCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2c3BbMF0uaWQpLCBU
X0lGLCBUX0VORElGKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmVuZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKKwl9
Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDc4OgorCisgICAgeworCW1lbnVfYWRkX2VudHJ5
KE5VTEwpOworCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVM
TCk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudVxuIiwgemNvbmZfY3VybmFtZSgp
LCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDc5OgorCisgICAg
eworCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKK30KKworICAgIGJyZWFrOworCisg
IGNhc2UgODA6CisKKyAgICB7CisJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRf
TUVOVSwgVF9FTkRNRU5VKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOmVuZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworCX0KK30KKworICAgIGJyZWFrOworCisgIGNhc2UgODY6CisKKyAgICB7CisJcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6c291cmNlICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpLCAoeXl2c3BbLTFdLnN0cmluZykpOworCXpjb25mX25leHRmaWxlKCh5eXZzcFstMV0u
c3RyaW5nKSk7CisJZnJlZSgoeXl2c3BbLTFdLnN0cmluZykpOworfQorCisgICAgYnJlYWs7CisK
KyAgY2FzZSA4NzoKKworICAgIHsKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9w
cm9tcHQoUF9DT01NRU5ULCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwpOworCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmNvbW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCkpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA4OToKKworICAgIHsKKwlwcmludGQoREVC
VUdfUEFSU0UsICIlczolZDpoZWxwXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsKKwl6Y29uZl9zdGFydGhlbHAoKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgOTA6CisK
KyAgICB7CisJaWYgKGN1cnJlbnRfZW50cnktPmhlbHApIHsKKwkJZnJlZShjdXJyZW50X2VudHJ5
LT5oZWxwKTsKKwkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVkIHdpdGggbW9yZSB0
aGFuIG9uZSBoZWxwIHRleHQgLS0gb25seSB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkIiwKKwkJ
CSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsKKwl9CisKKwkvKiBJ
cyB0aGUgaGVscCB0ZXh0IGVtcHR5IG9yIGFsbCB3aGl0ZXNwYWNlPyAqLworCWlmICgoeXl2c3Bb
MF0uc3RyaW5nKVtzdHJzcG4oKHl5dnNwWzBdLnN0cmluZyksICIgXGZcblxyXHRcdiIpXSA9PSAn
XDAnKQorCQl6Y29uZnByaW50KCJ3YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBibGFuayBoZWxw
IHRleHQiLAorCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOwor
CisJY3VycmVudF9lbnRyeS0+aGVscCA9ICh5eXZzcFswXS5zdHJpbmcpOworfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSA5NToKKworICAgIHsKKwltZW51X2FkZF9kZXAoKHl5dnNwWy0xXS5leHBy
KSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVwZW5kcyBvblxuIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDk5Ogor
CisgICAgeworCW1lbnVfYWRkX3Zpc2liaWxpdHkoKHl5dnNwWzBdLmV4cHIpKTsKK30KKworICAg
IGJyZWFrOworCisgIGNhc2UgMTAxOgorCisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01Q
VCwgKHl5dnNwWy0xXS5zdHJpbmcpLCAoeXl2c3BbMF0uZXhwcikpOworfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3BbLTFdLmlkKTsgfQor
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDU6CisKKyAgICB7ICh5eXZhbC5pZCkgPSAoeXl2c3Bb
LTFdLmlkKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDY6CisKKyAgICB7ICh5eXZhbC5p
ZCkgPSAoeXl2c3BbLTFdLmlkKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDk6CisKKyAg
ICB7ICh5eXZhbC5leHByKSA9IE5VTEw7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTEwOgor
CisgICAgeyAoeXl2YWwuZXhwcikgPSAoeXl2c3BbMF0uZXhwcik7IH0KKworICAgIGJyZWFrOwor
CisgIGNhc2UgMTExOgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3N5bWJvbCgo
eXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTEyOgorCisgICAg
eyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9MVEgsICh5eXZzcFstMl0uc3ltYm9s
KSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDExMzoKKwor
ICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfTEVRLCAoeXl2c3BbLTJdLnN5
bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTQ6
CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0dUSCwgKHl5dnNwWy0y
XS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2Ug
MTE1OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9HRVEsICh5eXZz
cFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsKKworICBj
YXNlIDExNjoKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUws
ICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsK
KworICBjYXNlIDExNzoKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVf
VU5FUVVBTCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAg
IGJyZWFrOworCisgIGNhc2UgMTE4OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSAoeXl2c3BbLTFd
LmV4cHIpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsgKHl5dmFsLmV4
cHIpID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsICh5eXZzcFswXS5leHByKSk7IH0KKworICAgIGJy
ZWFrOworCisgIGNhc2UgMTIwOgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3R3
byhFX09SLCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbMF0uZXhwcikpOyB9CisKKyAgICBicmVh
azsKKworICBjYXNlIDEyMToKKworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY190d28o
RV9BTkQsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFswXS5leHByKSk7IH0KKworICAgIGJyZWFr
OworCisgIGNhc2UgMTIyOgorCisgICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5
dnNwWzBdLnN0cmluZyksIDApOyBmcmVlKCh5eXZzcFswXS5zdHJpbmcpKTsgfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgo
eXl2c3BbMF0uc3RyaW5nKSwgU1lNQk9MX0NPTlNUKTsgZnJlZSgoeXl2c3BbMF0uc3RyaW5nKSk7
IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTI1OgorCisgICAgeyAoeXl2YWwuc3RyaW5nKSA9
IE5VTEw7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTI3OgorCisgICAgeyB2YXJpYWJsZV9h
ZGQoKHl5dnNwWy0zXS5zdHJpbmcpLCAoeXl2c3BbLTFdLnN0cmluZyksICh5eXZzcFstMl0uZmxh
dm9yKSk7IGZyZWUoKHl5dnNwWy0zXS5zdHJpbmcpKTsgZnJlZSgoeXl2c3BbLTFdLnN0cmluZykp
OyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEyODoKKworICAgIHsgKHl5dmFsLnN0cmluZykg
PSB4c3RyZHVwKCIiKTsgfQorCisgICAgYnJlYWs7CisKKworCisgICAgICBkZWZhdWx0OiBicmVh
azsKKyAgICB9CisgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXlj
aGFyLCBhbmQgdGhhdCByZXF1aXJlcworICAgICB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRo
IHRoZSBuZXcgdHJhbnNsYXRpb24uICBXZSB0YWtlIHRoZQorICAgICBhcHByb2FjaCBvZiB0cmFu
c2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCisgICAgIE9u
ZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFj
dGlvbiwKKyAgICAgYnV0IHRoYXQgdHJhbnNsYXRpb24gd291bGQgYmUgbWlzc2VkIGlmIHRoZSBz
ZW1hbnRpYyBhY3Rpb24gaW52b2tlcworICAgICBZWUFCT1JULCBZWUFDQ0VQVCwgb3IgWVlFUlJP
UiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKKyAgICAgaWYgaXQgaW52b2tl
cyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuCisgICAg
IGluY29ycmVjdCBkZXN0cnVjdG9yIG1pZ2h0IHRoZW4gYmUgaW52b2tlZCBpbW1lZGlhdGVseS4g
IEluIHRoZQorICAgICBjYXNlIG9mIFlZRVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFy
c2VyIGFjdGlvbnMgbWlnaHQgbGVhZAorICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBj
YWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UKKyAgICAgYmVmb3JlIHRoZSBsb29r
YWhlYWQgaXMgdHJhbnNsYXRlZC4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5
eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKworICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5
bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9
IHl5dmFsOworCisgIC8qIE5vdyAnc2hpZnQnIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbi4g
IERldGVybWluZSB3aGF0IHN0YXRlCisgICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0
YXRlIHdlIHBvcHBlZCBiYWNrIHRvIGFuZCB0aGUgcnVsZQorICAgICBudW1iZXIgcmVkdWNlZCBi
eS4gICovCisKKyAgeXluID0geXlyMVt5eW5dOworCisgIHl5c3RhdGUgPSB5eXBnb3RvW3l5biAt
IFlZTlRPS0VOU10gKyAqeXlzc3A7CisgIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlzdGF0ZSA8PSBZ
WUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApCisgICAgeXlzdGF0ZSA9IHl5dGFi
bGVbeXlzdGF0ZV07CisgIGVsc2UKKyAgICB5eXN0YXRlID0geXlkZWZnb3RvW3l5biAtIFlZTlRP
S0VOU107CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9y
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJybGFi
OgorICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAg
U2VlIGNvbW1lbnRzIGF0CisgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMg
aXMgbmVjZXNzYXJ5LiAgKi8KKyAgeXl0b2tlbiA9IHl5Y2hhciA9PSBZWUVNUFRZID8gWVlFTVBU
WSA6IFlZVFJBTlNMQVRFICh5eWNoYXIpOworCisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJp
bmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3Rh
dHVzKQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAg
ICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorIyBkZWZpbmUgWVlTWU5U
QVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5dG9rZW4pCisgICAgICB7
CisgICAgICAgIGNoYXIgY29uc3QgKnl5bXNncCA9IFlZXygic3ludGF4IGVycm9yIik7CisgICAg
ICAgIGludCB5eXN5bnRheF9lcnJvcl9zdGF0dXM7CisgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0
YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVz
ID09IDApCisgICAgICAgICAgeXltc2dwID0geXltc2c7CisgICAgICAgIGVsc2UgaWYgKHl5c3lu
dGF4X2Vycm9yX3N0YXR1cyA9PSAxKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh5eW1z
ZyAhPSB5eW1zZ2J1ZikKKyAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisgICAg
ICAgICAgICB5eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5bXNnX2FsbG9jKTsKKyAg
ICAgICAgICAgIGlmICgheXltc2cpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB5
eW1zZyA9IHl5bXNnYnVmOworICAgICAgICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5
bXNnYnVmOworICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7CisgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOworICAgICAgICAg
ICAgICAgIHl5bXNncCA9IHl5bXNnOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAg
ICAgICB5eWVycm9yICh5eW1zZ3ApOworICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVz
ID09IDIpCisgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKyAgICAgIH0KKyMgdW5kZWYg
WVlTWU5UQVhfRVJST1IKKyNlbmRpZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09
IDMpCisgICAgeworICAgICAgLyogSWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbiBhZnRlciBhbgorICAgICAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLwor
CisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQorICAgICAgICB7CisgICAgICAgICAgLyogUmV0
dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlucHV0LiAgKi8KKyAgICAgICAgICBpZiAoeXljaGFy
ID09IFlZRU9GKQorICAgICAgICAgICAgWVlBQk9SVDsKKyAgICAgICAgfQorICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5nIiwKKyAg
ICAgICAgICAgICAgICAgICAgICB5eXRva2VuLCAmeXlsdmFsKTsKKyAgICAgICAgICB5eWNoYXIg
PSBZWUVNUFRZOworICAgICAgICB9CisgICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1
c2UgbG9va2FoZWFkIHRva2VuIGFmdGVyIHNoaWZ0aW5nIHRoZSBlcnJvcgorICAgICB0b2tlbi4g
ICovCisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWVycm9ybGFiIC0tIGVycm9yIHJhaXNlZCBl
eHBsaWNpdGx5IGJ5IFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJyb3JsYWI6CisKKyAgLyogUGFjaWZ5IGNvbXBp
bGVycyBsaWtlIEdDQyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcworICAgICBZWUVS
Uk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1
c2VyCisgICAgIGNvZGUuICAqLworICBpZiAoLypDT05TVENPTkQqLyAwKQorICAgICBnb3RvIHl5
ZXJyb3JsYWI7CisKKyAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUg
d2hvc2UgYWN0aW9uIHRyaWdnZXJlZAorICAgICB0aGlzIFlZRVJST1IuICAqLworICBZWVBPUFNU
QUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgeXlzdGF0ZSA9ICp5eXNzcDsKKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgor
fCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVS
Uk9SLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWIxOgorICB5eWVycnN0YXR1cyA9IDM7ICAgICAgLyog
RWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8KKworICBmb3IgKDs7
KQorICAgIHsKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgICAgIGlmICgheXlwYWN0
X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCisgICAgICAgIHsKKyAgICAgICAgICB5eW4gKz0gWVlU
RVJST1I7CisgICAgICAgICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVj
a1t5eW5dID09IFlZVEVSUk9SKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICB5eW4gPSB5
eXRhYmxlW3l5bl07CisgICAgICAgICAgICAgIGlmICgwIDwgeXluKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgIC8qIFBvcCB0aGUgY3Vy
cmVudCBzdGF0ZSBiZWNhdXNlIGl0IGNhbm5vdCBoYW5kbGUgdGhlIGVycm9yIHRva2VuLiAgKi8K
KyAgICAgIGlmICh5eXNzcCA9PSB5eXNzKQorICAgICAgICBZWUFCT1JUOworCisKKyAgICAgIHl5
ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisgICAgICAgICAgICAgICAgICB5eXN0b3NbeXlz
dGF0ZV0sIHl5dnNwKTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgICAgeXlzdGF0ZSA9ICp5
eXNzcDsKKyAgICAgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgICAgfQorCisgIFlZ
X0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisgICorK3l5dnNwID0geXlsdmFsOwor
ICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKworCisgIC8qIFNoaWZ0IHRoZSBl
cnJvciB0b2tlbi4gICovCisgIFlZX1NZTUJPTF9QUklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5
bl0sIHl5dnNwLCB5eWxzcCk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAgZ290byB5eW5ld3N0YXRl
OworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlhY2Nl
cHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KK3l5YWNjZXB0bGFiOgorICB5eXJlc3VsdCA9IDA7CisgIGdvdG8g
eXlyZXR1cm47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KK3l5YWJvcnRsYWI6CisgIHl5cmVzdWx0ID0gMTsKKyAgZ290byB5
eXJldHVybjsKKworI2lmICFkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCisv
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNvbWVzIGhlcmUuICB8CitgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWV4aGF1c3Rl
ZGxhYjoKKyAgeXllcnJvciAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOworICB5eXJlc3VsdCA9
IDI7CisgIC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKworeXlyZXR1cm46CisgIGlmICh5
eWNoYXIgIT0gWVlFTVBUWSkKKyAgICB7CisgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRl
c3QgbG9va2FoZWFkIHRyYW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0CisgICAgICAgICB1c2Vy
IHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS4gICovCisgICAgICB5
eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51
cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5
bHZhbCk7CisgICAgfQorICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVs
ZSB3aG9zZSBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4g
ICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3Nw
KTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAoIkNs
ZWFudXA6IHBvcHBpbmciLAorICAgICAgICAgICAgICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNw
KTsKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBp
ZiAoeXlzcyAhPSB5eXNzYSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYg
WVlFUlJPUl9WRVJCT1NFCisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZS
RUUgKHl5bXNnKTsKKyNlbmRpZgorICByZXR1cm4geXlyZXN1bHQ7Cit9CisKKworCit2b2lkIGNv
bmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJaW50
IGk7CisKKwl6Y29uZl9pbml0c2NhbihuYW1lKTsKKworCV9tZW51X2luaXQoKTsKKworCWlmIChn
ZXRlbnYoIlpDT05GX0RFQlVHIikpCisJCXl5ZGVidWcgPSAxOworCXl5cGFyc2UoKTsKKworCS8q
IFZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgaW4gdGhlIHBhcnNlIHBoYXNlLiBXZSBjYW4gZnJlZSB0
aGVtIGhlcmUuICovCisJdmFyaWFibGVfYWxsX2RlbCgpOworCisJaWYgKHl5bmVycnMpCisJCWV4
aXQoMSk7CisJaWYgKCFtb2R1bGVzX3N5bSkKKwkJbW9kdWxlc19zeW0gPSBzeW1fZmluZCggIm4i
ICk7CisKKwlpZiAoIW1lbnVfaGFzX3Byb21wdCgmcm9vdG1lbnUpKSB7CisJCWN1cnJlbnRfZW50
cnkgPSAmcm9vdG1lbnU7CisJCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICJNYWluIG1lbnUiLCBO
VUxMKTsKKwl9CisKKwltZW51X2ZpbmFsaXplKCZyb290bWVudSk7CisJZm9yX2FsbF9zeW1ib2xz
KGksIHN5bSkgeworCQlpZiAoc3ltX2NoZWNrX2RlcHMoc3ltKSkKKwkJCXl5bmVycnMrKzsKKwl9
CisJaWYgKHl5bmVycnMpCisJCWV4aXQoMSk7CisJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7Cit9
CisKK3N0YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQoreworCXN3
aXRjaCAodG9rZW4pIHsKKwljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7CisJY2FzZSBUX0VO
RE1FTlU6CQlyZXR1cm4gImVuZG1lbnUiOworCWNhc2UgVF9DSE9JQ0U6CQlyZXR1cm4gImNob2lj
ZSI7CisJY2FzZSBUX0VORENIT0lDRToJcmV0dXJuICJlbmRjaG9pY2UiOworCWNhc2UgVF9JRjoJ
CXJldHVybiAiaWYiOworCWNhc2UgVF9FTkRJRjoJCXJldHVybiAiZW5kaWYiOworCWNhc2UgVF9E
RVBFTkRTOgkJcmV0dXJuICJkZXBlbmRzIjsKKwljYXNlIFRfVklTSUJMRToJCXJldHVybiAidmlz
aWJsZSI7CisJfQorCXJldHVybiAiPHRva2VuPiI7Cit9CisKK3N0YXRpYyBib29sIHpjb25mX2Vu
ZHRva2VuKGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5k
dG9rZW4pCit7CisJaWYgKGlkLT50b2tlbiAhPSBlbmR0b2tlbikgeworCQl6Y29uZl9lcnJvcigi
dW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9jayIsCisJCQlpZC0+bmFtZSwgemNvbmZfdG9r
ZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJeXluZXJycysrOworCQlyZXR1cm4gZmFsc2U7CisJfQor
CWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9maWxlKSB7CisJCXpjb25mX2Vycm9y
KCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIsCisJCQlpZC0+bmFtZSwgemNvbmZf
dG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczolZDogbG9jYXRp
b24gb2YgdGhlICclcydcbiIsCisJCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRf
bWVudS0+bGluZW5vLAorCQkJemNvbmZfdG9rZW5uYW1lKHN0YXJ0dG9rZW4pKTsKKwkJeXluZXJy
cysrOworCQlyZXR1cm4gZmFsc2U7CisJfQorCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9p
ZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlm
cHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsKKwl2YV9zdGFydChhcCwgZXJyKTsKKwl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOworCXZh
X2VuZChhcCk7CisJZnByaW50ZihzdGRlcnIsICJcbiIpOworfQorCitzdGF0aWMgdm9pZCB6Y29u
Zl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJeXluZXJy
cysrOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZf
bGluZW5vKCkpOworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBh
cCk7CisJdmFfZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2
b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqZXJyKQoreworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6
ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsKK30KKwor
c3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0
cikKK3sKKwljb25zdCBjaGFyICpwOworCWludCBsZW47CisKKwlwdXRjKCciJywgb3V0KTsKKwl3
aGlsZSAoKHAgPSBzdHJjaHIoc3RyLCAnIicpKSkgeworCQlsZW4gPSBwIC0gc3RyOworCQlpZiAo
bGVuKQorCQkJZnByaW50ZihvdXQsICIlLipzIiwgbGVuLCBzdHIpOworCQlmcHV0cygiXFxcIiIs
IG91dCk7CisJCXN0ciA9IHAgKyAxOworCX0KKwlmcHV0cyhzdHIsIG91dCk7CisJcHV0YygnIics
IG91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBt
ZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKKwlzdHJ1Y3Qg
cHJvcGVydHkgKnByb3A7CisKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKQorCQlmcHJpbnRmKG91
dCwgIlxuY2hvaWNlXG4iKTsKKwllbHNlCisJCWZwcmludGYob3V0LCAiXG5jb25maWcgJXNcbiIs
IHN5bS0+bmFtZSk7CisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwkJ
ZnB1dHMoIiAgYm9vbFxuIiwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBTX1RSSVNUQVRFOgorCQlm
cHV0cygiICB0cmlzdGF0ZVxuIiwgb3V0KTsKKwkJYnJlYWs7CisJY2FzZSBTX1NUUklORzoKKwkJ
ZnB1dHMoIiAgc3RyaW5nXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfSU5UOgorCQlmcHV0
cygiICBpbnRlZ2VyXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQlmcHV0cygi
ICBoZXhcbiIsIG91dCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZwdXRzKCIgID8/P1xuIiwg
b3V0KTsKKwkJYnJlYWs7CisJfQorCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9
IHByb3AtPm5leHQpIHsKKwkJaWYgKHByb3AtPm1lbnUgIT0gbWVudSkKKwkJCWNvbnRpbnVlOwor
CQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX1BST01QVDoKKwkJCWZwdXRzKCIgIHBy
b21wdCAiLCBvdXQpOworCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOwor
CQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiBp
ZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJ
CX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0RFRkFVTFQ6CisJ
CQlmcHV0cyggIiAgZGVmYXVsdCAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwg
b3V0KTsKKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJCWZw
dXRzKCIgaWYgIiwgb3V0KTsKKwkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91
dCk7CisJCQl9CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9DSE9J
Q0U6CisJCQlmcHV0cygiICAjY2hvaWNlIHZhbHVlXG4iLCBvdXQpOworCQkJYnJlYWs7CisJCWNh
c2UgUF9TRUxFQ1Q6CisJCQlmcHV0cyggIiAgc2VsZWN0ICIsIG91dCk7CisJCQlleHByX2Zwcmlu
dChwcm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQlj
YXNlIFBfSU1QTFk6CisJCQlmcHV0cyggIiAgaW1wbHkgIiwgb3V0KTsKKwkJCWV4cHJfZnByaW50
KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNh
c2UgUF9SQU5HRToKKwkJCWZwdXRzKCAiICByYW5nZSAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQo
cHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2Fz
ZSBQX01FTlU6CisJCQlmcHV0cyggIiAgbWVudSAiLCBvdXQpOworCQkJcHJpbnRfcXVvdGVkX3N0
cmluZyhvdXQsIHByb3AtPnRleHQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOwor
CQljYXNlIFBfU1lNQk9MOgorCQkJZnB1dHMoICIgIHN5bWJvbCAiLCBvdXQpOworCQkJZnByaW50
ZihvdXQsICIlc1xuIiwgcHJvcC0+c3ltLT5uYW1lKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0Ogor
CQkJZnByaW50ZihvdXQsICIgIHVua25vd24gcHJvcCAlZCFcbiIsIHByb3AtPnR5cGUpOworCQkJ
YnJlYWs7CisJCX0KKwl9CisJaWYgKG1lbnUtPmhlbHApIHsKKwkJaW50IGxlbiA9IHN0cmxlbiht
ZW51LT5oZWxwKTsKKwkJd2hpbGUgKG1lbnUtPmhlbHBbLS1sZW5dID09ICdcbicpCisJCQltZW51
LT5oZWxwW2xlbl0gPSAwOworCQlmcHJpbnRmKG91dCwgIiAgaGVscFxuJXNcbiIsIG1lbnUtPmhl
bHApOworCX0KK30KKwordm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KQoreworCXN0cnVjdCBwcm9w
ZXJ0eSAqcHJvcDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKm1lbnU7CisK
KwltZW51ID0gcm9vdG1lbnUubGlzdDsKKwl3aGlsZSAobWVudSkgeworCQlpZiAoKHN5bSA9IG1l
bnUtPnN5bSkpCisJCQlwcmludF9zeW1ib2wob3V0LCBtZW51KTsKKwkJZWxzZSBpZiAoKHByb3Ag
PSBtZW51LT5wcm9tcHQpKSB7CisJCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKKwkJCWNhc2UgUF9D
T01NRU5UOgorCQkJCWZwdXRzKCJcbmNvbW1lbnQgIiwgb3V0KTsKKwkJCQlwcmludF9xdW90ZWRf
c3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQkJZnB1dHMoIlxuIiwgb3V0KTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgUF9NRU5VOgorCQkJCWZwdXRzKCJcbm1lbnUgIiwgb3V0KTsKKwkJCQlwcmlu
dF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQkJZnB1dHMoIlxuIiwgb3V0KTsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJOworCQkJfQorCQkJaWYgKCFleHByX2lzX3ll
cyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiAgZGVwZW5kcyAiLCBvdXQpOwor
CQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJCQlmcHV0YygnXG4n
LCBvdXQpOworCQkJfQorCQl9CisKKwkJaWYgKG1lbnUtPmxpc3QpCisJCQltZW51ID0gbWVudS0+
bGlzdDsKKwkJZWxzZSBpZiAobWVudS0+bmV4dCkKKwkJCW1lbnUgPSBtZW51LT5uZXh0OworCQll
bHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsKKwkJCWlmIChtZW51LT5wcm9tcHQg
JiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkKKwkJCQlmcHV0cygiXG5lbmRtZW51XG4i
LCBvdXQpOworCQkJaWYgKG1lbnUtPm5leHQpIHsKKwkJCQltZW51ID0gbWVudS0+bmV4dDsKKwkJ
CQlicmVhazsKKwkJCX0KKwkJfQorCX0KK30KKworI2luY2x1ZGUgInpjb25mLmxleC5jIgorI2lu
Y2x1ZGUgInV0aWwuYyIKKyNpbmNsdWRlICJjb25mZGF0YS5jIgorI2luY2x1ZGUgImV4cHIuYyIK
KyNpbmNsdWRlICJzeW1ib2wuYyIKKyNpbmNsdWRlICJtZW51LmMiCisjaW5jbHVkZSAicHJlcHJv
Y2Vzcy5jIgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 12:07:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 12:07:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAvDM-0000Bw-VU; Thu, 19 Sep 2019 12:07:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsYj-0006mg-Q9
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:05 +0000
X-Inumbo-ID: 3abc300e-dabe-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 3abc300e-dabe-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 09:16:58 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 37A071056E1;
 Thu, 19 Sep 2019 11:16:57 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id lNfrw8F6ll2U; Thu, 19 Sep 2019 11:16:55 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 0CFE9105583
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:16:55 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:16:52 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:15:58 +0200
Message-ID: <20190919091607.23327-15-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Thu, 19 Sep 2019 12:07:11 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH v3 14/23] kconfig: Import kconfiglib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: multipart/mixed; boundary="===============5837648016574421209=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============5837648016574421209==
Content-Type: text/plain; charset="y"
Content-Transfer-Encoding: 8bit

Import Kconfiglib for providing python based front end to the kconfig.

URL: https://github.com/ulfalizer/Kconfiglib
TAG: v12.13.0

Signed-off-by: Sharan Santhanam <sharan.santhanam@neclab.eu>
---
 support/kconfiglib/LICENSE.txt                     |    5 +
 support/kconfiglib/MANIFEST.in                     |    2 +
 support/kconfiglib/README.rst                      |  806 +++
 support/kconfiglib/alldefconfig.py                 |   27 +
 support/kconfiglib/allmodconfig.py                 |   46 +
 support/kconfiglib/allnoconfig.py                  |   45 +
 support/kconfiglib/allyesconfig.py                 |   56 +
 support/kconfiglib/defconfig.py                    |   43 +
 support/kconfiglib/examples/Kmenuconfig            |  102 +
 support/kconfiglib/examples/allnoconfig_walk.py    |   66 +
 support/kconfiglib/examples/defconfig_oldconfig.py |   39 +
 support/kconfiglib/examples/dumpvars.py            |   15 +
 support/kconfiglib/examples/eval_expr.py           |   24 +
 support/kconfiglib/examples/find_symbol.py         |  112 +
 support/kconfiglib/examples/help_grep.py           |   64 +
 support/kconfiglib/examples/kconfiglib.py          |    1 +
 support/kconfiglib/examples/list_undefined.py      |  156 +
 support/kconfiglib/examples/menuconfig_example.py  |  341 +
 support/kconfiglib/examples/merge_config.py        |  133 +
 support/kconfiglib/examples/print_config_tree.py   |  199 +
 support/kconfiglib/examples/print_sym_info.py      |   54 +
 support/kconfiglib/examples/print_tree.py          |   75 +
 support/kconfiglib/genconfig.py                    |  132 +
 support/kconfiglib/guiconfig.py                    | 2316 +++++++
 support/kconfiglib/kconfiglib.py                   | 7018 ++++++++++++++++++++
 support/kconfiglib/listnewconfig.py                |   47 +
 support/kconfiglib/makefile.patch                  |   48 +
 support/kconfiglib/menuconfig.py                   | 3264 +++++++++
 support/kconfiglib/oldconfig.py                    |  246 +
 support/kconfiglib/olddefconfig.py                 |   28 +
 support/kconfiglib/savedefconfig.py                |   49 +
 support/kconfiglib/setconfig.py                    |   92 +
 support/kconfiglib/setup.cfg                       |    7 +
 support/kconfiglib/setup.py                        |  100 +
 support/kconfiglib/tests/Kappend                   |   12 +
 support/kconfiglib/tests/Kassignable               |  230 +
 support/kconfiglib/tests/Kchoice                   |  198 +
 support/kconfiglib/tests/Kdefconfig_existent       |    8 +
 support/kconfiglib/tests/Kdefconfig_existent_but_n |   10 +
 support/kconfiglib/tests/Kdefconfig_nonexistent    |    5 +
 support/kconfiglib/tests/Kdefconfig_srctree        |    5 +
 support/kconfiglib/tests/Kdepcopy                  |  173 +
 support/kconfiglib/tests/Kdeploop0                 |    3 +
 support/kconfiglib/tests/Kdeploop1                 |    3 +
 support/kconfiglib/tests/Kdeploop10                |   48 +
 support/kconfiglib/tests/Kdeploop2                 |    3 +
 support/kconfiglib/tests/Kdeploop3                 |    3 +
 support/kconfiglib/tests/Kdeploop4                 |    7 +
 support/kconfiglib/tests/Kdeploop5                 |    7 +
 support/kconfiglib/tests/Kdeploop6                 |    6 +
 support/kconfiglib/tests/Kdeploop7                 |   11 +
 support/kconfiglib/tests/Kdeploop8                 |    8 +
 support/kconfiglib/tests/Kdeploop9                 |    7 +
 support/kconfiglib/tests/Kdirdep                   |   30 +
 support/kconfiglib/tests/Kescape                   |    3 +
 support/kconfiglib/tests/Keval                     |   34 +
 support/kconfiglib/tests/Kexpr_items               |   11 +
 support/kconfiglib/tests/Khelp                     |   50 +
 support/kconfiglib/tests/Kifremoval                |   99 +
 support/kconfiglib/tests/Kimply                    |  145 +
 support/kconfiglib/tests/Kinclude_path             |   12 +
 support/kconfiglib/tests/Kinclude_path_sourced_1   |   12 +
 support/kconfiglib/tests/Kinclude_path_sourced_2   |   11 +
 support/kconfiglib/tests/Kitemlists                |   36 +
 support/kconfiglib/tests/Klocation                 |   72 +
 support/kconfiglib/tests/Klocation_sourced         |   18 +
 support/kconfiglib/tests/Kmainmenu                 |    5 +
 support/kconfiglib/tests/Kmenuconfig               |   37 +
 support/kconfiglib/tests/Kmisc                     |   82 +
 support/kconfiglib/tests/Kmissingrsource           |    1 +
 support/kconfiglib/tests/Kmissingsource            |    1 +
 support/kconfiglib/tests/Korder                    |   35 +
 support/kconfiglib/tests/Kpreprocess               |  147 +
 support/kconfiglib/tests/Krange                    |  133 +
 support/kconfiglib/tests/Krecursive1               |    1 +
 support/kconfiglib/tests/Krecursive2               |    1 +
 support/kconfiglib/tests/Kreferenced               |   63 +
 support/kconfiglib/tests/Krelation                 |   36 +
 support/kconfiglib/tests/Krepr                     |   64 +
 support/kconfiglib/tests/Kstr                      |  293 +
 support/kconfiglib/tests/Kundef                    |   23 +
 support/kconfiglib/tests/Kuserfunctions            |   11 +
 support/kconfiglib/tests/Kvisibility               |  342 +
 support/kconfiglib/tests/config_indented           |    3 +
 support/kconfiglib/tests/config_set_bool           |    1 +
 support/kconfiglib/tests/config_set_string         |    1 +
 support/kconfiglib/tests/defconfig_1               |    0
 support/kconfiglib/tests/defconfig_2               |    0
 support/kconfiglib/tests/empty                     |    0
 support/kconfiglib/tests/kconfigfunctions.py       |   14 +
 support/kconfiglib/tests/reltest                   |   51 +
 support/kconfiglib/tests/sub/Kconfig_symlink_2     |    1 +
 support/kconfiglib/tests/sub/Kconfig_symlink_3     |    2 +
 support/kconfiglib/tests/sub/Klocation_grsourced1  |    1 +
 support/kconfiglib/tests/sub/Klocation_grsourced2  |    1 +
 support/kconfiglib/tests/sub/Klocation_gsourced1   |    1 +
 support/kconfiglib/tests/sub/Klocation_gsourced2   |    1 +
 support/kconfiglib/tests/sub/Klocation_rsourced    |    2 +
 support/kconfiglib/tests/sub/defconfig_in_sub      |    0
 support/kconfiglib/tests/sub/sub/Kconfig_symlink_1 |    2 +
 support/kconfiglib/tests/symlink                   |    1 +
 support/kconfiglib/testsuite.py                    | 3136 +++++++++
 102 files changed, 21531 insertions(+)
 create mode 100644 support/kconfiglib/LICENSE.txt
 create mode 100644 support/kconfiglib/MANIFEST.in
 create mode 100644 support/kconfiglib/README.rst
 create mode 100755 support/kconfiglib/alldefconfig.py
 create mode 100755 support/kconfiglib/allmodconfig.py
 create mode 100755 support/kconfiglib/allnoconfig.py
 create mode 100755 support/kconfiglib/allyesconfig.py
 create mode 100755 support/kconfiglib/defconfig.py
 create mode 100644 support/kconfiglib/examples/Kmenuconfig
 create mode 100644 support/kconfiglib/examples/allnoconfig_walk.py
 create mode 100644 support/kconfiglib/examples/defconfig_oldconfig.py
 create mode 100644 support/kconfiglib/examples/dumpvars.py
 create mode 100644 support/kconfiglib/examples/eval_expr.py
 create mode 100644 support/kconfiglib/examples/find_symbol.py
 create mode 100644 support/kconfiglib/examples/help_grep.py
 create mode 120000 support/kconfiglib/examples/kconfiglib.py
 create mode 100644 support/kconfiglib/examples/list_undefined.py
 create mode 100755 support/kconfiglib/examples/menuconfig_example.py
 create mode 100755 support/kconfiglib/examples/merge_config.py
 create mode 100644 support/kconfiglib/examples/print_config_tree.py
 create mode 100644 support/kconfiglib/examples/print_sym_info.py
 create mode 100644 support/kconfiglib/examples/print_tree.py
 create mode 100755 support/kconfiglib/genconfig.py
 create mode 100755 support/kconfiglib/guiconfig.py
 create mode 100644 support/kconfiglib/kconfiglib.py
 create mode 100755 support/kconfiglib/listnewconfig.py
 create mode 100644 support/kconfiglib/makefile.patch
 create mode 100755 support/kconfiglib/menuconfig.py
 create mode 100755 support/kconfiglib/oldconfig.py
 create mode 100755 support/kconfiglib/olddefconfig.py
 create mode 100755 support/kconfiglib/savedefconfig.py
 create mode 100755 support/kconfiglib/setconfig.py
 create mode 100644 support/kconfiglib/setup.cfg
 create mode 100644 support/kconfiglib/setup.py
 create mode 100644 support/kconfiglib/tests/Kappend
 create mode 100644 support/kconfiglib/tests/Kassignable
 create mode 100644 support/kconfiglib/tests/Kchoice
 create mode 100644 support/kconfiglib/tests/Kdefconfig_existent
 create mode 100644 support/kconfiglib/tests/Kdefconfig_existent_but_n
 create mode 100644 support/kconfiglib/tests/Kdefconfig_nonexistent
 create mode 100644 support/kconfiglib/tests/Kdefconfig_srctree
 create mode 100644 support/kconfiglib/tests/Kdepcopy
 create mode 100644 support/kconfiglib/tests/Kdeploop0
 create mode 100644 support/kconfiglib/tests/Kdeploop1
 create mode 100644 support/kconfiglib/tests/Kdeploop10
 create mode 100644 support/kconfiglib/tests/Kdeploop2
 create mode 100644 support/kconfiglib/tests/Kdeploop3
 create mode 100644 support/kconfiglib/tests/Kdeploop4
 create mode 100644 support/kconfiglib/tests/Kdeploop5
 create mode 100644 support/kconfiglib/tests/Kdeploop6
 create mode 100644 support/kconfiglib/tests/Kdeploop7
 create mode 100644 support/kconfiglib/tests/Kdeploop8
 create mode 100644 support/kconfiglib/tests/Kdeploop9
 create mode 100644 support/kconfiglib/tests/Kdirdep
 create mode 100644 support/kconfiglib/tests/Kescape
 create mode 100644 support/kconfiglib/tests/Keval
 create mode 100644 support/kconfiglib/tests/Kexpr_items
 create mode 100644 support/kconfiglib/tests/Khelp
 create mode 100644 support/kconfiglib/tests/Kifremoval
 create mode 100644 support/kconfiglib/tests/Kimply
 create mode 100644 support/kconfiglib/tests/Kinclude_path
 create mode 100644 support/kconfiglib/tests/Kinclude_path_sourced_1
 create mode 100644 support/kconfiglib/tests/Kinclude_path_sourced_2
 create mode 100644 support/kconfiglib/tests/Kitemlists
 create mode 100644 support/kconfiglib/tests/Klocation
 create mode 100644 support/kconfiglib/tests/Klocation_sourced
 create mode 100644 support/kconfiglib/tests/Kmainmenu
 create mode 100644 support/kconfiglib/tests/Kmenuconfig
 create mode 100644 support/kconfiglib/tests/Kmisc
 create mode 100644 support/kconfiglib/tests/Kmissingrsource
 create mode 100644 support/kconfiglib/tests/Kmissingsource
 create mode 100644 support/kconfiglib/tests/Korder
 create mode 100644 support/kconfiglib/tests/Kpreprocess
 create mode 100644 support/kconfiglib/tests/Krange
 create mode 100644 support/kconfiglib/tests/Krecursive1
 create mode 100644 support/kconfiglib/tests/Krecursive2
 create mode 100644 support/kconfiglib/tests/Kreferenced
 create mode 100644 support/kconfiglib/tests/Krelation
 create mode 100644 support/kconfiglib/tests/Krepr
 create mode 100644 support/kconfiglib/tests/Kstr
 create mode 100644 support/kconfiglib/tests/Kundef
 create mode 100644 support/kconfiglib/tests/Kuserfunctions
 create mode 100644 support/kconfiglib/tests/Kvisibility
 create mode 100644 support/kconfiglib/tests/config_indented
 create mode 100644 support/kconfiglib/tests/config_set_bool
 create mode 100644 support/kconfiglib/tests/config_set_string
 create mode 100644 support/kconfiglib/tests/defconfig_1
 create mode 100644 support/kconfiglib/tests/defconfig_2
 create mode 100644 support/kconfiglib/tests/empty
 create mode 100644 support/kconfiglib/tests/kconfigfunctions.py
 create mode 100755 support/kconfiglib/tests/reltest
 create mode 100644 support/kconfiglib/tests/sub/Kconfig_symlink_2
 create mode 100644 support/kconfiglib/tests/sub/Kconfig_symlink_3
 create mode 100644 support/kconfiglib/tests/sub/Klocation_grsourced1
 create mode 100644 support/kconfiglib/tests/sub/Klocation_grsourced2
 create mode 100644 support/kconfiglib/tests/sub/Klocation_gsourced1
 create mode 100644 support/kconfiglib/tests/sub/Klocation_gsourced2
 create mode 100644 support/kconfiglib/tests/sub/Klocation_rsourced
 create mode 100644 support/kconfiglib/tests/sub/defconfig_in_sub
 create mode 100644 support/kconfiglib/tests/sub/sub/Kconfig_symlink_1
 create mode 120000 support/kconfiglib/tests/symlink
 create mode 100644 support/kconfiglib/testsuite.py

diff --git a/support/kconfiglib/LICENSE.txt b/support/kconfiglib/LICENSE.txt
new file mode 100644
index 0000000..8b31efc
--- /dev/null
+++ b/support/kconfiglib/LICENSE.txt
@@ -0,0 +1,5 @@
+Copyright (c) 2011-2019, Ulf Magnusson <ulfalizer@gmail.com>
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/support/kconfiglib/MANIFEST.in b/support/kconfiglib/MANIFEST.in
new file mode 100644
index 0000000..881a794
--- /dev/null
+++ b/support/kconfiglib/MANIFEST.in
@@ -0,0 +1,2 @@
+# Include the license file in source distributions
+include LICENSE.txt
diff --git a/support/kconfiglib/README.rst b/support/kconfiglib/README.rst
new file mode 100644
index 0000000..bdbd457
--- /dev/null
+++ b/support/kconfiglib/README.rst
@@ -0,0 +1,806 @@
+.. contents:: Table of contents
+   :backlinks: none
+
+Overview
+--------
+
+Kconfiglib is a `Kconfig
+<https://github.com/torvalds/linux/blob/master/Documentation/kbuild/kconfig-language.rst>`__
+implementation in Python 2/3. It started out as a helper library, but now has a
+enough functionality to also work well as a standalone Kconfig implementation
+(including `terminal and GUI menuconfig interfaces <Menuconfig interfaces_>`_
+and `Kconfig extensions`_).
+
+The entire library is contained in `kconfiglib.py
+<https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_. The
+bundled scripts are implemented on top of it. Implementing your own scripts
+should be relatively easy, if needed.
+
+Kconfiglib is used exclusively by e.g. the `Zephyr <https://www.zephyrproject.org/>`_ 
+and `ACRN <https://projectacrn.org/>`_ projects. It is also used for many small helper
+scripts in various projects.
+
+Since Kconfiglib is based around a library, it can be used e.g. to generate a
+`Kconfig cross-reference <https://docs.zephyrproject.org/latest/reference/kconfig/index.html>`_ (note: heavy page),
+using the same robust Kconfig parser used for other Kconfig tools, instead of brittle ad-hoc parsing. The documentation generation script can be found `here <https://github.com/zephyrproject-rtos/zephyr/blob/master/doc/scripts/genrest.py>`__.
+
+Kconfiglib implements the recently added `Kconfig preprocessor
+<https://github.com/torvalds/linux/blob/master/Documentation/kbuild/kconfig-macro-language.rst>`__.
+For backwards compatibility, environment variables can be referenced both as
+``$(FOO)`` (the new syntax) and as ``$FOO`` (the old syntax). The old syntax is
+deprecated, but will probably be supported for a long time, as its needed to
+stay compatible with older Linux kernels. The major version will be increased
+if support is ever dropped. Using the old syntax with an undefined environment
+variable keeps the string as is.
+
+Note: See `this issue <https://github.com/ulfalizer/Kconfiglib/issues/47>`_ if you run into
+a "macro expanded to blank string" error with kernel 4.18+.
+
+See `this page
+<https://docs.zephyrproject.org/latest/guides/kconfig/index.html>`__ for some
+Kconfig tips and best practices.
+
+Installation
+------------
+
+Installation with pip
+~~~~~~~~~~~~~~~~~~~~~
+
+Kconfiglib is available on `PyPI <https://pypi.python.org/pypi/kconfiglib/>`_ and can be
+installed with e.g.
+
+.. code::
+
+    $ pip(3) install kconfiglib
+
+Microsoft Windows is supported.
+
+The ``pip`` installation will give you both the base library and the following
+executables. All but two (``genconfig`` and ``setconfig``) mirror functionality
+available in the C tools.
+
+- `menuconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_
+
+- `guiconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/guiconfig.py>`_
+
+- `oldconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/oldconfig.py>`_
+
+- `olddefconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/olddefconfig.py>`_
+
+- `savedefconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/savedefconfig.py>`_
+
+- `defconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/defconfig.py>`_
+
+- `alldefconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/alldefconfig.py>`_
+
+- `allnoconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/allnoconfig.py>`_
+
+- `allmodconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/allmodconfig.py>`_
+
+- `allyesconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/allyesconfig.py>`_
+
+- `listnewconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/listnewconfig.py>`_
+
+- `genconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/genconfig.py>`_
+
+- `setconfig <https://github.com/ulfalizer/Kconfiglib/blob/master/setconfig.py>`_
+
+``genconfig`` is intended to be run at build time. It generates a C header from
+the configuration and (optionally) information that can be used to rebuild only
+files that reference Kconfig symbols that have changed value.
+
+Starting with Kconfiglib version 12.2.0, all utilities are compatible with both
+Python 2 and Python 3. Previously, ``menuconfig.py`` only ran under Python 3
+(i.e., it's now more backwards compatible than before).
+
+**Note:** If you install Kconfiglib with ``pip``'s ``--user`` flag, make sure
+that your ``PATH`` includes the directory where the executables end up. You can
+list the installed files with ``pip(3) show -f kconfiglib``.
+
+All releases have a corresponding tag in the git repository, e.g. ``v12.13.0``
+(the latest version).
+
+`Semantic versioning <http://semver.org/>`_ is used. There's been
+ten small changes (`1 <https://github.com/ulfalizer/Kconfiglib/commit/e8b4ecb6ff6ccc1c7be0818314fbccda2ef2b2ee>`_,
+`2 <https://github.com/ulfalizer/Kconfiglib/commit/db633015a4d7b0ba1e882f665e191f350932b2af>`_,
+`3 <https://github.com/ulfalizer/Kconfiglib/commit/8983f7eb297dd614faf0beee3129559bc8ba338e>`_,
+`4 <https://github.com/ulfalizer/Kconfiglib/commit/cbf32e29a130d22bc734b7778e6304ac9df2a3e8>`_,
+`5 <https://github.com/ulfalizer/Kconfiglib/commit/eb6c21a9b33a2d6e2bed9882d4f930d0cab2f03b>`_,
+`6 <https://github.com/ulfalizer/Kconfiglib/commit/c19fc11355b13d75d97286402c7a933fb23d3b70>`_,
+`7 <https://github.com/ulfalizer/Kconfiglib/commit/7a428aa415606820a44291f475248b08e3952c4b>`_,
+`8 <https://github.com/ulfalizer/Kconfiglib/commit/f247ddf618ad29718e5efd3e69f8baf75d4d347b>`_,
+`9 <https://github.com/ulfalizer/Kconfiglib/commit/4fed39d9271ceb68be4157ab3f96a45b94f77dc0>`_,
+`10 <https://github.com/ulfalizer/Kconfiglib/commit/55bc8c380869ea663092212e8fe388ad7abae596>`_)
+to the behavior of the API, which is why the major version is at 12 rather than
+2. I do major version bumps for all behavior changes, even tiny ones, and most of these were
+fixes for baby issues in the early days of the Kconfiglib 2 API.
+
+Manual installation
+~~~~~~~~~~~~~~~~~~~
+
+Just drop ``kconfiglib.py`` and the scripts you want somewhere. There are no
+third-party dependencies (except for the `windows-curses
+<https://github.com/zephyrproject-rtos/windows-curses>`_ package on Windows,
+when running the terminal ``menuconfig`` implementation).
+
+Installation for the Linux kernel
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+See the module docstring at the top of `kconfiglib.py <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_.
+
+Python version compatibility (2.7/3.2+)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Kconfiglib and all utilities run under both Python 2.7 and Python 3.2 and
+later. The code mostly uses basic Python features and has no third-party
+dependencies, so keeping it backwards-compatible is pretty low effort.
+
+The 3.2 requirement comes from ``argparse``. ``format()`` with unnumbered
+``{}`` is used as well.
+
+A recent Python 3 version is recommended if you have a choice, as it'll give
+you better Unicode handling.
+
+Getting started
+---------------
+
+1. `Install <Installation_>`_ the library and the utilities.
+
+2. Write `Kconfig
+   <https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt>`__
+   files that describe the available configuration options.
+
+3. Generate an initial configuration with e.g. ``menuconfig``/``guiconfig`` or
+   ``alldefconfig``. The configuration is saved as ``.config`` by default.
+
+   For more advanced projects, the ``defconfig`` utility can be used to
+   generate the initial configuration from an existing configuration file.
+   Usually, this existing configuration file would be a minimal configuration
+   file, as generated by e.g. ``savedefconfig``.
+
+4. Run ``genconfig`` to generate a header file. By default, it is saved as
+   ``config.h``.
+
+   Normally, ``genconfig`` would be run automatically as part of the build.
+
+   Before writing a header file or other configuration output, Kconfiglib
+   compares the old contents of the file against the new contents. If there's
+   no change, the write is skipped. This avoids updating file metadata like the
+   modification time, and might save work depending on your build setup.
+   
+   Adding new configuration output formats should be relatively straightforward.
+   See the implementation of ``write_config()`` in `kconfiglib.py
+   <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_.
+   The documentation for the ``Symbol.config_string`` property has some tips as
+   well.
+   
+5. To update an old ``.config`` file after the Kconfig files have changed (e.g.
+   to add new options), run ``oldconfig`` (prompts for values for new options)
+   or ``olddefconfig`` (gives new options their default value). Entering the
+   ``menuconfig`` or ``guiconfig`` interface and saving the configuration will
+   also update it (the configuration interfaces always prompt for saving
+   on exit if it would modify the contents of the ``.config`` file).
+
+   Due to Kconfig semantics, simply loading an old ``.config`` file performs an
+   implicit ``olddefconfig``, so building will normally not be affected by
+   having an outdated configuration.
+
+Whenever ``.config`` is overwritten, the previous version of the file is saved
+to ``.config.old`` (or, more generally, to ``$KCONFIG_CONFIG.old``).
+
+For some general Kconfig advice, see `this page
+<https://docs.zephyrproject.org/latest/guides/kconfig/index.html>`__.
+
+Using ``.config`` files as Make input
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+``.config`` files use Make syntax and can be included directly in Makefiles to
+read configuration values from there. This is why ``n``-valued
+``bool``/``tristate`` values are written out as ``# CONFIG_FOO is not set`` (a
+Make comment) in ``.config``, allowing them to be tested with ``ifdef`` in
+Make.
+
+If you make use of this, you might want to pass ``--config-out <filename>`` to
+``genconfig`` and include the configuration file it generates instead of
+including ``.config`` directly. This has the advantage that the generated
+configuration file will always be a "full" configuration file, even if
+``.config`` is outdated. Otherwise, it might be necessary to run
+``old(def)config`` or ``menuconfig``/``guiconfig`` before rebuilding with an
+outdated ``.config``.
+
+If you use ``--sync-deps`` to generate incremental build information, you can
+include ``deps/auto.conf`` instead, which is also a full configuration file.
+
+Useful helper macros
+~~~~~~~~~~~~~~~~~~~~
+
+The `include/linux/kconfig.h
+<https://github.com/torvalds/linux/blob/master/include/linux/kconfig.h>`_
+header in the Linux kernel defines some useful helper macros for testing
+Kconfig configuration values.
+
+``IS_ENABLED()`` is generally useful, allowing configuration values to be
+tested in ``if`` statements with no runtime overhead.
+
+Incremental building
+~~~~~~~~~~~~~~~~~~~~
+
+See the docstring for ``Kconfig.sync_deps()`` in `kconfiglib.py
+<https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_ for hints
+on implementing incremental builds (rebuilding just source files that reference
+changed configuration values).
+
+Running the ``scripts/basic/fixdep.c`` tool from the kernel on the output of
+``gcc -MD <source file>`` might give you an idea of how it all fits together.
+
+Library documentation
+---------------------
+
+Kconfiglib comes with extensive documentation in the form of docstrings. To view it, run e.g.
+the following command:
+
+.. code:: sh
+
+    $ pydoc(3) kconfiglib
+
+For HTML output, add ``-w``:
+
+.. code:: sh
+
+    $ pydoc(3) -w kconfiglib
+
+This will also work after installing Kconfiglib with ``pip(3)``.
+
+Documentation for the ``menuconfig`` and ``guiconfig`` interfaces can be viewed
+in the same way:
+
+.. code:: sh
+
+    $ pydoc3 menuconfig/guiconfig
+
+A good starting point for learning the library is to read the module docstring
+(which you could also just read directly at the beginning of `kconfiglib.py
+<https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_). It
+gives an introduction to symbol values, the menu tree, and expressions.
+
+After reading the module docstring, a good next step is to read the ``Kconfig``
+class documentation, and then the documentation for the ``Symbol``, ``Choice``,
+and ``MenuNode`` classes.
+
+Please tell me if something is unclear or can be explained better.
+
+Library features
+----------------
+
+Kconfiglib can do the following, among other things:
+
+- **Programmatically get and set symbol values**
+
+  See `allnoconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/allnoconfig.py>`_ and
+  `allyesconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/allyesconfig.py>`_,
+  which are automatically verified to produce identical output to the standard
+  ``make allnoconfig`` and ``make allyesconfig``.
+
+- **Read and write .config and defconfig files**
+
+  The generated ``.config`` and ``defconfig`` (minimal configuration) files are
+  character-for-character identical to what the C implementation would generate
+  (except for the header comment). The test suite relies on this, as it
+  compares the generated files.
+  
+- **Write C headers**
+
+  The generated headers use the same format as ``include/generated/autoconf.h``
+  from the Linux kernel.
+
+- **Implement incremental builds**
+
+  This uses the same scheme as the ``include/config`` directory in the kernel:
+  Symbols are translated into files that are touched when the symbol's value
+  changes between builds, which can be used to avoid having to do a full
+  rebuild whenever the configuration is changed.
+
+  See the ``sync_deps()`` function for more information.
+
+- **Inspect symbols**
+
+  Printing a symbol or other item (which calls ``__str__()``) returns its
+  definition in Kconfig format. This also works for symbols defined in multiple
+  locations.
+
+  A helpful ``__repr__()`` is  on all objects too.
+
+  All ``__str__()`` and ``__repr__()`` methods are deliberately implemented
+  with just public APIs, so all symbol information can be fetched separately as
+  well.
+
+- **Inspect expressions**
+
+  Expressions use a simple tuple-based format that can be processed manually
+  if needed. Expression printing and evaluation functions are provided,
+  implemented with public APIs.
+
+- **Inspect the menu tree**
+
+  The underlying menu tree is exposed, including submenus created implicitly
+  from symbols depending on preceding symbols. This can be used e.g. to
+  implement menuconfig-like functionality.
+  
+  See `menuconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_/`guiconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/guiconfig.py>`_ and the
+  minimalistic `menuconfig_example.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/menuconfig_example.py>`_
+  example.
+
+Kconfig extensions
+~~~~~~~~~~~~~~~~~~
+
+The following Kconfig extensions are available:
+
+- ``source`` supports glob patterns and includes each matching file. A pattern
+  is required to match at least one file.
+
+  A separate ``osource`` statement is available for cases where it's okay for
+  the pattern to match no files (in which case ``osource`` turns into a no-op).
+  
+- A relative ``source`` statement (``rsource``) is available, where file paths
+  are specified relative to the directory of the current Kconfig file. An
+  ``orsource`` statement is available as well, analogous to ``osource``.
+
+- Preprocessor user functions can be defined in Python, which makes it simple
+  to integrate information from existing Python tools into Kconfig (e.g. to
+  have Kconfig symbols depend on hardware information stored in some other
+  format).
+
+  See the *Kconfig extensions* section in the
+  `kconfiglib.py <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_
+  module docstring for more information.
+
+- ``def_int``, ``def_hex``, and ``def_string`` are available in addition to
+  ``def_bool`` and ``def_tristate``, allowing ``int``, ``hex``, and ``string``
+  symbols to be given a type and a default at the same time.
+
+  These can be useful in projects that make use of symbols defined in multiple
+  locations, and remove some Kconfig inconsistency.
+  
+- Environment variables are expanded directly in e.g. ``source`` and
+  ``mainmenu`` statements, meaning ``option env`` symbols are redundant.
+
+  This is the standard behavior with the new `Kconfig preprocessor
+  <https://github.com/torvalds/linux/blob/master/Documentation/kbuild/kconfig-macro-language.txt>`__,
+  which Kconfiglib implements.
+
+  ``option env`` symbols are accepted but ignored, which leads the caveat that
+  they must have the same name as the environment variables they reference
+  (Kconfiglib warns if the names differ). This keeps Kconfiglib compatible with
+  older Linux kernels, where the name of the ``option env`` symbol always
+  matched the environment variable. Compatibility with older Linux kernels is
+  the main reason ``option env`` is still supported.
+
+  The C tools have dropped support for ``option env``.
+
+- Two extra optional warnings can be enabled by setting environment variables,
+  covering cases that are easily missed when making changes to Kconfig files:
+
+  * ``KCONFIG_WARN_UNDEF``: If set to ``y``, warnings will be generated for all
+    references to undefined symbols within Kconfig files. The only gotcha is
+    that all hex literals must be prefixed with ``0x`` or ``0X``, to make it
+    possible to distinguish them from symbol references.
+
+    Some projects (e.g. the Linux kernel) use multiple Kconfig trees with many
+    shared Kconfig files, leading to some safe undefined symbol references.
+    ``KCONFIG_WARN_UNDEF`` is useful in projects that only have a single
+    Kconfig tree though.
+
+    ``KCONFIG_STRICT`` is an older alias for this environment variable,
+    supported for backwards compatibility.
+
+  * ``KCONFIG_WARN_UNDEF_ASSIGN``: If set to ``y``, warnings will be generated
+    for all assignments to undefined symbols within ``.config`` files. By
+    default, no such warnings are generated.
+
+    This warning can also be enabled/disabled by setting
+    ``Kconfig.warn_assign_undef`` to ``True``/``False``.
+
+Other features
+--------------
+
+- **Single-file implementation**
+  
+  The entire library is contained in `kconfiglib.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/kconfiglib.py>`_.
+
+  The tools implemented on top of it are one file each.
+
+- **Robust and highly compatible with the C Kconfig tools**
+  
+  The `test suite <https://github.com/ulfalizer/Kconfiglib/blob/master/testsuite.py>`_
+  automatically compares output from Kconfiglib and the C tools
+  by diffing the generated ``.config`` files for the real kernel Kconfig and
+  defconfig files, for all ARCHes.
+  
+  This currently involves comparing the output for 36 ARCHes and 498 defconfig
+  files (or over 18000 ARCH/defconfig combinations in "obsessive" test suite
+  mode). All tests are expected to pass.
+
+  A comprehensive suite of selftests is included as well.
+
+- **Not horribly slow despite being a pure Python implementation**
+  
+  The `allyesconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/allyesconfig.py>`_
+  script currently runs in about 1.3 seconds on the Linux kernel on a Core i7
+  2600K (with a warm file cache), including the ``make`` overhead from ``make
+  scriptconfig``. Note that the Linux kernel Kconfigs are absolutely massive
+  (over 14k symbols for x86) compared to most projects, and also have overhead
+  from running shell commands via the Kconfig preprocessor.
+  
+  Kconfiglib is especially speedy in cases where multiple ``.config`` files
+  need to be processed, because the ``Kconfig`` files will only need to be parsed
+  once.
+
+  For long-running jobs, `PyPy <https://pypy.org/>`_ gives a big performance
+  boost. CPython is faster for short-running jobs as PyPy needs some time to
+  warm up.
+  
+  Kconfiglib also works well with the
+  `multiprocessing <https://docs.python.org/3/library/multiprocessing.html>`_
+  module. No global state is kept.
+
+- **Generates more warnings than the C implementation**
+
+  Generates the same warnings as the C implementation, plus additional ones.
+  Also detects dependency and ``source`` loops.
+
+  All warnings point out the location(s) in the ``Kconfig`` files where a
+  symbol is defined, where applicable.
+
+- **Unicode support**
+
+  Unicode characters in string literals in ``Kconfig`` and ``.config`` files are
+  correctly handled. This support mostly comes for free from Python.
+
+- **Windows support**
+
+  Nothing Linux-specific is used. Universal newlines mode is used for both
+  Python 2 and Python 3.
+  
+  The `Zephyr <https://www.zephyrproject.org/>`_ project uses Kconfiglib to
+  generate ``.config`` files and C headers on Linux as well as Windows.
+
+- **Internals that (mostly) mirror the C implementation**
+  
+  While being simpler to understand and tweak.
+
+Menuconfig interfaces
+---------------------
+
+Three configuration interfaces are currently available:
+
+- `menuconfig.py <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_
+  is a terminal-based configuration interface implemented using the standard
+  Python ``curses`` module. ``xconfig`` features like showing invisible symbols and
+  showing symbol names are included, and it's possible to jump directly to a symbol
+  in the menu tree (even if it's currently invisible).
+  
+  .. image:: https://raw.githubusercontent.com/ulfalizer/Kconfiglib/screenshots/screenshots/menuconfig.gif
+
+  *There is now also a show-help mode that shows the help text of the currently
+  selected symbol in the help window at the bottom.*
+
+  Starting with Kconfiglib 12.2.0, ``menuconfig.py`` runs under both Python 2
+  and Python 3 (previously, it only ran under Python 3, so this was a
+  backport). Running it under Python 3 provides better support for Unicode text
+  entry (``get_wch()`` is not available in the ``curses`` module on Python 2).
+
+  There are no third-party dependencies on \*nix. On Windows,
+  the ``curses`` modules is not available by default, but support
+  can be added by installing the ``windows-curses`` package (which is
+  installed automatically when Kconfiglib is installed via ``pip``
+  on Windows):
+  
+  .. code-block:: shell
+
+      $ pip install windows-curses
+
+  This uses wheels built from `this repository
+  <https://github.com/zephyrproject-rtos/windows-curses>`_, which is in turn
+  based on Christoph Gohlke's `Python Extension Packages for Windows
+  <https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses>`_.
+
+  See the docstring at the top of `menuconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/menuconfig.py>`_ for
+  more information about the terminal menuconfig implementation.
+
+- `guiconfig.py
+  <https://github.com/ulfalizer/Kconfiglib/blob/master/guiconfig.py>`_ is a
+  graphical configuration interface written in `Tkinter
+  <https://docs.python.org/3/library/tkinter.html>`_. Like ``menuconfig.py``,
+  it supports showing all symbols (with invisible symbols in red) and jumping
+  directly to symbols. Symbol values can also be changed directly from the
+  jump-to dialog.
+
+  When single-menu mode is enabled, a single menu is shown at a time, like in
+  the terminal menuconfig. Only this mode distinguishes between symbols defined
+  with ``config`` and symbols defined with ``menuconfig``.
+
+  ``guiconfig.py`` has been tested on X11, Windows, and macOS, and is
+  compatible with both Python 2 and Python 3.
+
+  Despite being part of the Python standard library, ``tkinter`` often isn't
+  included by default in Python installations on Linux. These commands will
+  install it on a few different distributions:
+
+  - Ubuntu: ``sudo apt install python-tk``/``sudo apt install python3-tk``
+
+  - Fedora: ``dnf install python2-tkinter``/``dnf install python3-tkinter``
+
+  - Arch: ``sudo pacman -S tk``
+
+  - Clear Linux: ``sudo swupd bundle-add python3-tcl``
+
+  Screenshot below, with show-all mode enabled and the jump-to dialog open:
+
+  .. image:: https://raw.githubusercontent.com/ulfalizer/Kconfiglib/screenshots/screenshots/guiconfig.png
+
+  To avoid having to carry around a bunch of GIFs, the image data is embedded
+  in ``guiconfig.py``. To use separate GIF files instead, change
+  ``_USE_EMBEDDED_IMAGES`` to ``False`` in ``guiconfig.py``. The image files
+  can be found in the `screenshots
+  <https://github.com/ulfalizer/Kconfiglib/tree/screenshots/guiconfig>`_
+  branch.
+
+  I did my best with the images, but some are definitely only art adjacent.
+  Touch-ups are welcome. :)
+
+- `pymenuconfig <https://github.com/RomaVis/pymenuconfig>`_, built by `RomaVis
+  <https://github.com/RomaVis>`_, is an older portable Python 2/3 TkInter
+  menuconfig implementation.
+
+  Screenshot below:
+
+  .. image:: https://raw.githubusercontent.com/RomaVis/pymenuconfig/master/screenshot.PNG
+
+  While working on the terminal menuconfig implementation, I added a few APIs
+  to Kconfiglib that turned out to be handy. ``pymenuconfig`` predates
+  ``menuconfig.py`` and ``guiconfig.py``, and so didn't have them available.
+  Blame me for any workarounds.
+
+Examples
+--------
+
+Example scripts
+~~~~~~~~~~~~~~~
+
+The `examples/ <https://github.com/ulfalizer/Kconfiglib/blob/master/examples>`_ directory contains some simple example scripts. Among these are the following ones. Make sure you run them with the latest version of Kconfiglib, as they might make use of newly added features.
+
+- `eval_expr.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/eval_expr.py>`_ evaluates an expression in the context of a configuration.
+
+- `find_symbol.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/find_symbol.py>`_ searches through expressions to find references to a symbol, also printing a "backtrace" with parents for each reference found.
+
+- `help_grep.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/help_grep.py>`_ searches for a string in all help texts.
+
+- `print_tree.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/print_tree.py>`_ prints a tree of all configuration items.
+
+- `print_config_tree.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/print_config_tree.py>`_ is similar to ``print_tree.py``, but dumps the tree as it would appear in ``menuconfig``, including values. This can be handy for visually diffing between ``.config`` files and different versions of ``Kconfig`` files.
+
+- `list_undefined.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/list_undefined.py>`_ finds references to symbols that are not defined by any architecture in the Linux kernel.
+
+- `merge_config.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/merge_config.py>`_ merges configuration fragments to produce a complete .config, similarly to ``scripts/kconfig/merge_config.sh`` from the kernel.
+
+- `menuconfig_example.py <https://github.com/ulfalizer/Kconfiglib/blob/master/examples/menuconfig_example.py>`_ implements a configuration interface that uses notation similar to ``make menuconfig``. It's deliberately kept as simple as possible to demonstrate just the core concepts.
+
+Real-world examples
+~~~~~~~~~~~~~~~~~~~
+
+- `kconfig.py
+  <https://github.com/zephyrproject-rtos/zephyr/blob/master/scripts/kconfig/kconfig.py>`_
+  from the `Zephyr <https://www.zephyrproject.org/>`_ project handles
+  ``.config`` and header file generation, also doing configuration fragment
+  merging
+
+- `genrest.py
+  <https://github.com/zephyrproject-rtos/zephyr/blob/master/doc/scripts/genrest.py>`_
+  generates a Kconfig symbol cross-reference, which can be viewed `here
+  <http://docs.zephyrproject.org/reference/kconfig/index.html>`__
+
+- `CMake and IDE integration
+  <https://github.com/espressif/esp-idf/tree/master/tools/kconfig_new>`_ from
+  the ESP-IDF project, via a configuration server program.
+
+- `A script for turning on USB-related options
+  <https://github.com/google/syzkaller/blob/master/dashboard/config/kconfiglib-merge-usb-configs.py>`_,
+  from the `syzkaller <https://github.com/google/syzkaller>`_ project.
+
+- `Various automated checks
+  <https://github.com/zephyrproject-rtos/ci-tools/blob/master/scripts/check_compliance.py>`_,
+  including a check for references to undefined Kconfig symbols in source code.
+  See the ``KconfigCheck`` class.
+
+- `Various utilities
+  <https://github.com/projectacrn/acrn-hypervisor/tree/master/scripts/kconfig>`_
+  from the `ACRN <https://projectacrn.org/>`_ project
+
+These use the older Kconfiglib 1 API, which was clunkier and not as general
+(functions instead of properties, no direct access to the menu structure or
+properties, uglier ``__str__()`` output):
+
+- `genboardscfg.py <http://git.denx.de/?p=u-boot.git;a=blob;f=tools/genboardscfg.py;hb=HEAD>`_ from `Das U-Boot <http://www.denx.de/wiki/U-Boot>`_ generates some sort of legacy board database by pulling information from a newly added Kconfig-based configuration system (as far as I understand it :).
+
+- `gen-manual-lists.py <https://git.busybox.net/buildroot/tree/support/scripts/gen-manual-lists.py?id=5676a2deea896f38123b99781da0a612865adeb0>`_ generated listings for an appendix in the `Buildroot <https://buildroot.org>`_ manual. (The listing has since been removed.)
+
+- `gen_kconfig_doc.py <https://github.com/espressif/esp-idf/blob/master/docs/gen-kconfig-doc.py>`_ from the `esp-idf <https://github.com/espressif/esp-idf>`_ project generates documentation from Kconfig files.
+
+- `SConf <https://github.com/CoryXie/SConf>`_ builds an interactive configuration interface (like ``menuconfig``) on top of Kconfiglib, for use e.g. with `SCons <scons.org>`_.
+
+- `kconfig-diff.py <https://gist.github.com/dubiousjim/5638961>`_ -- a script by `dubiousjim <https://github.com/dubiousjim>`_ that compares kernel configurations.
+
+- Originally, Kconfiglib was used in chapter 4 of my `master's thesis <http://liu.diva-portal.org/smash/get/diva2:473038/FULLTEXT01.pdf>`_ to automatically generate a "minimal" kernel for a given system. Parts of it bother me a bit now, but that's how it goes with old work.
+
+Sample ``make iscriptconfig`` session
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following log should give some idea of the functionality available in the API:
+
+.. code-block::
+
+    $ make iscriptconfig
+    A Kconfig instance 'kconf' for the architecture x86 has been created.
+    >>> kconf  # Calls Kconfig.__repr__()
+    <configuration with 13711 symbols, main menu prompt "Linux/x86 4.14.0-rc7 Kernel Configuration", srctree ".", config symbol prefix "CONFIG_", warnings enabled, undef. symbol assignment warnings disabled>
+    >>> kconf.mainmenu_text  # Expanded main menu text
+    'Linux/x86 4.14.0-rc7 Kernel Configuration'
+    >>> kconf.top_node  # The implicit top-level menu
+    <menu node for menu, prompt "Linux/x86 4.14.0-rc7 Kernel Configuration" (visibility y), deps y, 'visible if' deps y, has child, Kconfig:5>
+    >>> kconf.top_node.list  # First child menu node
+    <menu node for symbol SRCARCH, deps y, has next, Kconfig:7>
+    >>> print(kconf.top_node.list)  # Calls MenuNode.__str__()
+    config SRCARCH
+    	string
+    	option env="SRCARCH"
+    	default "x86"
+    >>> sym = kconf.top_node.list.next.item  # Item contained in next menu node
+    >>> print(sym)  # Calls Symbol.__str__()
+    config 64BIT
+    	bool "64-bit kernel" if ARCH = "x86"
+    	default ARCH != "i386"
+    	help
+    	  Say yes to build a 64-bit kernel - formerly known as x86_64
+    	  Say no to build a 32-bit kernel - formerly known as i386
+    >>> sym  # Calls Symbol.__repr__()
+    <symbol 64BIT, bool, "64-bit kernel", value y, visibility y, direct deps y, arch/x86/Kconfig:2>
+    >>> sym.assignable  # Currently assignable values (0, 1, 2 = n, m, y)
+    (0, 2)
+    >>> sym.set_value(0)  # Set it to n
+    True
+    >>> sym.tri_value  # Check the new value
+    0
+    >>> sym = kconf.syms["X86_MPPARSE"]  # Look up symbol by name
+    >>> print(sym)
+    config X86_MPPARSE
+    	bool "Enable MPS table" if (ACPI || SFI) && X86_LOCAL_APIC
+    	default y if X86_LOCAL_APIC
+    	help
+    	  For old smp systems that do not have proper acpi support. Newer systems
+    	  (esp with 64bit cpus) with acpi support, MADT and DSDT will override it
+    >>> default = sym.defaults[0]  # Fetch its first default
+    >>> sym = default[1]  # Fetch the default's condition (just a Symbol here)
+    >>> print(sym)
+    config X86_LOCAL_APIC
+    	bool
+    	default y
+    	select IRQ_DOMAIN_HIERARCHY
+    	select PCI_MSI_IRQ_DOMAIN if PCI_MSI
+    	depends on X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI
+    >>> sym.nodes  # Show the MenuNode(s) associated with it
+    [<menu node for symbol X86_LOCAL_APIC, deps n, has next, arch/x86/Kconfig:1015>]
+    >>> kconfiglib.expr_str(sym.defaults[0][1])  # Print the default's condition
+    'X86_64 || SMP || X86_32_NON_STANDARD || X86_UP_APIC || PCI_MSI'
+    >>> kconfiglib.expr_value(sym.defaults[0][1])  # Evaluate it (0 = n)
+    0
+    >>> kconf.syms["64BIT"].set_value(2)
+    True
+    >>> kconfiglib.expr_value(sym.defaults[0][1])  # Evaluate it again (2 = y)
+    2
+    >>> kconf.write_config("myconfig")  # Save a .config
+    >>> ^D
+    $ cat myconfig
+    # Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)
+    CONFIG_64BIT=y
+    CONFIG_X86_64=y
+    CONFIG_X86=y
+    CONFIG_INSTRUCTION_DECODER=y
+    CONFIG_OUTPUT_FORMAT="elf64-x86-64"
+    CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+    CONFIG_LOCKDEP_SUPPORT=y
+    CONFIG_STACKTRACE_SUPPORT=y
+    CONFIG_MMU=y
+    ...
+ 
+Test suite
+----------
+
+The test suite is run with
+
+.. code::
+
+    $ python(3) Kconfiglib/testsuite.py
+    
+`pypy <https://pypy.org/>`_ works too, and is much speedier for everything except ``allnoconfig.py``/``allnoconfig_simpler.py``/``allyesconfig.py``, where it doesn't have time to warm up since
+the scripts are run via ``make scriptconfig``.
+
+The test suite must be run from the top-level kernel directory. It requires that the
+Kconfiglib git repository has been cloned into it and that the makefile patch has been applied.
+
+To get rid of warnings generated for the kernel ``Kconfig`` files, add ``2>/dev/null`` to the command to
+discard ``stderr``.
+
+**NOTE: Forgetting to apply the Makefile patch will cause some tests that compare generated configurations to fail**
+
+**NOTE: The test suite overwrites .config in the kernel root, so make sure to back it up.**
+
+The test suite consists of a set of selftests and a set of compatibility tests that
+compare configurations generated by Kconfiglib with
+configurations generated by the C tools, for a number of cases. See
+`testsuite.py <https://github.com/ulfalizer/Kconfiglib/blob/master/testsuite.py>`_
+for the available options.
+
+The `tests/reltest <https://github.com/ulfalizer/Kconfiglib/blob/master/tests/reltest>`_ script runs the test suite
+and all the example scripts for both Python 2 and Python 3, verifying that everything works.
+
+Rarely, the output from the C tools is changed slightly (most recently due to a
+`change <https://www.spinics.net/lists/linux-kbuild/msg17074.html>`_ I added).
+If you get test suite failures, try running the test suite again against the
+`linux-next tree <https://www.kernel.org/doc/man-pages/linux-next.html>`_,
+which has all the latest changes. I will make it clear if any
+non-backwards-compatible changes appear.
+
+A lot of time is spent waiting around for ``make`` and the C utilities (which need to reparse all the
+Kconfig files for each defconfig test). Adding some multiprocessing to the test suite would make sense
+too.
+
+Notes
+-----
+
+* This is version 2 of Kconfiglib, which is not backwards-compatible with
+  Kconfiglib 1. A summary of changes between Kconfiglib 1 and Kconfiglib
+  2 can be found `here
+  <https://github.com/ulfalizer/Kconfiglib/blob/screenshots/kconfiglib-2-changes.txt>`__.
+
+* I sometimes see people add custom output formats, which is pretty
+  straightforward to do (see the implementations of ``write_autoconf()`` and
+  ``write_config()`` for a template, and also the documentation of the
+  ``Symbol.config_string`` property). If you come up with something you think
+  might be useful to other people, I'm happy to take it in upstream. Batteries
+  included and all that.
+
+* Kconfiglib assumes the modules symbol is ``MODULES``, which is backwards-compatible.
+  A warning is printed by default if ``option modules`` is set on some other symbol.
+  
+  Let me know if you need proper ``option modules`` support. It wouldn't be that
+  hard to add.
+
+Thanks
+------
+
+- To `RomaVis <https://github.com/RomaVis>`_, for making
+  `pymenuconfig <https://github.com/RomaVis/pymenuconfig>`_ and suggesting
+  the ``rsource`` keyword.
+
+- To `Mitja Horvat <https://github.com/pinkfluid>`_, for adding support
+  for user-defined styles to the terminal menuconfig.
+
+- To `Philip Craig <https://github.com/philipc>`_ for adding
+  support for the ``allnoconfig_y`` option and fixing an obscure issue
+  with ``comment``\s inside ``choice``\s (that didn't affect correctness but
+  made outputs differ). ``allnoconfig_y`` is used to force certain symbols
+  to ``y`` during ``make allnoconfig`` to improve coverage.
+
+License
+-------
+
+See `LICENSE.txt <https://github.com/ulfalizer/Kconfiglib/blob/master/LICENSE.txt>`_. SPDX license identifiers are used in the
+source code.
diff --git a/support/kconfiglib/alldefconfig.py b/support/kconfiglib/alldefconfig.py
new file mode 100755
index 0000000..5082fcb
--- /dev/null
+++ b/support/kconfiglib/alldefconfig.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where all symbols are set to their their default
+values.
+
+The default output filename is '.config'. A different filename can be passed in
+the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/alldefconfig.py
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+    kconfiglib.load_allconfig(kconf, "alldef.config")
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/allmodconfig.py b/support/kconfiglib/allmodconfig.py
new file mode 100755
index 0000000..9ae0b3b
--- /dev/null
+++ b/support/kconfiglib/allmodconfig.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where as many symbols as possible are set to 'm'.
+
+The default output filename is '.config'. A different filename can be passed
+in the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allmodconfig.py
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+
+    # See allnoconfig.py
+    kconf.warn = False
+
+    for sym in kconf.unique_defined_syms:
+        if sym.orig_type == kconfiglib.BOOL:
+            # 'bool' choice symbols get their default value, as determined by
+            # e.g. 'default's on the choice
+            if not sym.choice:
+                # All other bool symbols get set to 'y', like for allyesconfig
+                sym.set_value(2)
+        elif sym.orig_type == kconfiglib.TRISTATE:
+            sym.set_value(1)
+
+    for choice in kconf.unique_choices:
+        choice.set_value(2 if choice.orig_type == kconfiglib.BOOL else 1)
+
+    kconf.warn = True
+
+    kconfiglib.load_allconfig(kconf, "allmod.config")
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/allnoconfig.py b/support/kconfiglib/allnoconfig.py
new file mode 100755
index 0000000..e162ccb
--- /dev/null
+++ b/support/kconfiglib/allnoconfig.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where as many symbols as possible are set to 'n'.
+
+The default output filename is '.config'. A different filename can be passed
+in the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allmodconfig.py
+
+See the examples/allnoconfig_walk.py example script for another way to
+implement this script.
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+
+    # Avoid warnings that would otherwise get printed by Kconfiglib for the
+    # following:
+    #
+    # 1. Assigning a value to a symbol without a prompt, which never has any
+    #    effect
+    #
+    # 2. Assigning values invalid for the type (only bool/tristate symbols
+    #    accept 0/1/2, for n/m/y). The assignments will be ignored for other
+    #    symbol types, which is what we want.
+    kconf.warn = False
+    for sym in kconf.unique_defined_syms:
+        sym.set_value(2 if sym.is_allnoconfig_y else 0)
+    kconf.warn = True
+
+    kconfiglib.load_allconfig(kconf, "allno.config")
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/allyesconfig.py b/support/kconfiglib/allyesconfig.py
new file mode 100755
index 0000000..e19ab31
--- /dev/null
+++ b/support/kconfiglib/allyesconfig.py
@@ -0,0 +1,56 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Writes a configuration file where as many symbols as possible are set to 'y'.
+
+The default output filename is '.config'. A different filename can be passed
+in the KCONFIG_CONFIG environment variable.
+
+Usage for the Linux kernel:
+
+  $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allmodconfig.py
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+
+    # See allnoconfig.py
+    kconf.warn = False
+
+    # Try to set all symbols to 'y'. Dependencies might truncate the value down
+    # later, but this will at least give the highest possible value.
+    #
+    # Assigning 0/1/2 to non-bool/tristate symbols has no effect (int/hex
+    # symbols still take a string, because they preserve formatting).
+    for sym in kconf.unique_defined_syms:
+        # Set choice symbols to 'm'. This value will be ignored for choices in
+        # 'y' mode (the "normal" mode), which will instead just get their
+        # default selection, but will set all symbols in m-mode choices to 'm',
+        # which is as high as they can go.
+        #
+        # Here's a convoluted example of how you might get an m-mode choice
+        # even during allyesconfig:
+        #
+        #   choice
+        #           tristate "weird choice"
+        #           depends on m
+        sym.set_value(1 if sym.choice else 2)
+
+    # Set all choices to the highest possible mode
+    for choice in kconf.unique_choices:
+        choice.set_value(2)
+
+    kconf.warn = True
+
+    kconfiglib.load_allconfig(kconf, "allyes.config")
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/defconfig.py b/support/kconfiglib/defconfig.py
new file mode 100755
index 0000000..d1b1e4e
--- /dev/null
+++ b/support/kconfiglib/defconfig.py
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Reads a specified configuration file, then writes a new configuration file.
+This can be used to initialize the configuration from e.g. an arch-specific
+configuration file. This input configuration file would usually be a minimal
+configuration file, as generated by e.g. savedefconfig.
+
+The default output filename is '.config'. A different filename can be passed in
+the KCONFIG_CONFIG environment variable.
+"""
+import argparse
+
+import kconfiglib
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--kconfig",
+        default="Kconfig",
+        help="Base Kconfig file (default: Kconfig)")
+
+    parser.add_argument(
+        "config",
+        metavar="CONFIGURATION",
+        help="Input configuration file")
+
+    args = parser.parse_args()
+
+    kconf = kconfiglib.Kconfig(args.kconfig)
+    print(kconf.load_config(args.config))
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/examples/Kmenuconfig b/support/kconfiglib/examples/Kmenuconfig
new file mode 100644
index 0000000..f1cb67b
--- /dev/null
+++ b/support/kconfiglib/examples/Kmenuconfig
@@ -0,0 +1,102 @@
+mainmenu "Example Kconfig configuration"
+
+config MODULES
+	bool "Enable loadable module support"
+	option modules
+	default y
+
+menu "Bool and tristate symbols"
+
+config BOOL
+	bool "Bool symbol"
+	default y
+
+config BOOL_DEP
+	bool "Dependent bool symbol"
+	depends on BOOL
+
+# Mix it up a bit with an 'if' instead of a 'depends on'
+if BOOL
+
+config TRI_DEP
+	tristate "Dependent tristate symbol"
+	select SELECTED_BY_TRI_DEP
+	imply IMPLIED_BY_TRI_DEP
+
+endif
+
+config TWO_MENU_NODES
+	bool "First prompt"
+	depends on BOOL
+
+config TRI
+	tristate "Tristate symbol"
+
+config TWO_MENU_NODES
+	bool "Second prompt"
+
+comment "These are selected by TRI_DEP"
+
+config SELECTED_BY_TRI_DEP
+	tristate "Tristate selected by TRI_DEP"
+
+config IMPLIED_BY_TRI_DEP
+	tristate "Tristate implied by TRI_DEP"
+
+endmenu
+
+
+menu "String, int, and hex symbols"
+
+config STRING
+	string "String symbol"
+	default "foo"
+
+config INT
+	int "Int symbol"
+	default 747
+
+config HEX
+	hex "Hex symbol"
+	default 0xABC
+
+endmenu
+
+
+menu "Various choices"
+
+choice BOOL_CHOICE
+	bool "Bool choice"
+
+config BOOL_CHOICE_SYM_1
+	bool "Bool choice sym 1"
+
+config BOOL_CHOICE_SYM_2
+	bool "Bool choice sym 2"
+
+endchoice
+
+choice TRI_CHOICE
+	tristate "Tristate choice"
+
+config TRI_CHOICE_SYM_1
+	tristate "Tristate choice sym 1"
+
+config TRI_CHOICE_SYM_2
+	tristate "Tristate choice sym 2"
+
+endchoice
+
+choice OPT_BOOL_CHOICE
+	bool "Optional bool choice"
+	optional
+
+config OPT_BOOL_CHOICE_SYM_1
+	bool "Optional bool choice sym 1"
+
+config OPT_BOOL_CHOICE_SYM_2
+	bool "Optional bool choice sym 2"
+
+endchoice
+
+endmenu
diff --git a/support/kconfiglib/examples/allnoconfig_walk.py b/support/kconfiglib/examples/allnoconfig_walk.py
new file mode 100644
index 0000000..5a8cc23
--- /dev/null
+++ b/support/kconfiglib/examples/allnoconfig_walk.py
@@ -0,0 +1,66 @@
+# This is tree-walking version of allnoconfig.py, for demonstration purposes.
+# Verified by the test suite to generate identical output to 'make allnoconfig'
+# for all ARCHes.
+#
+# Note: A more practical version would use Kconfig.node_iter(). The manual tree
+# walking is for demonstration purposes.
+#
+# Usage for the Linux kernel:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/allnoconfig_walk.py
+
+import sys
+
+from kconfiglib import Kconfig, Symbol
+
+
+def do_allnoconfig(node):
+    global changed
+
+    # Walk the tree of menu nodes. You can imagine this as going down/into menu
+    # entries in the menuconfig interface, setting each to n (or the lowest
+    # assignable value).
+
+    while node:
+        if isinstance(node.item, Symbol):
+            sym = node.item
+
+            # Is the symbol a non-allnoconfig_y symbol that can be set to a
+            # lower value than its current value?
+            if (not sym.is_allnoconfig_y and
+                sym.assignable and
+                sym.assignable[0] < sym.tri_value):
+
+                # Yup, lower it
+                sym.set_value(sym.assignable[0])
+                changed = True
+
+        # Recursively lower children
+        if node.list:
+            do_allnoconfig(node.list)
+
+        node = node.next
+
+
+# Parse the Kconfig files
+kconf = Kconfig(sys.argv[1])
+
+# Do an initial pass to set 'option allnoconfig_y' symbols to y
+for sym in kconf.unique_defined_syms:
+    if sym.is_allnoconfig_y:
+        sym.set_value(2)
+
+while True:
+    # Changing later symbols in the configuration can sometimes allow earlier
+    # symbols to be lowered, e.g. if a later symbol 'select's an earlier
+    # symbol. To handle such situations, we do additional passes over the tree
+    # until we're no longer able to change the value of any symbol in a pass.
+    changed = False
+
+    do_allnoconfig(kconf.top_node)
+
+    # Did the pass change any symbols?
+    if not changed:
+        break
+
+print(kconf.write_config())
diff --git a/support/kconfiglib/examples/defconfig_oldconfig.py b/support/kconfiglib/examples/defconfig_oldconfig.py
new file mode 100644
index 0000000..68336c6
--- /dev/null
+++ b/support/kconfiglib/examples/defconfig_oldconfig.py
@@ -0,0 +1,39 @@
+# Produces exactly the same output as the following script:
+#
+# make defconfig
+# echo CONFIG_ETHERNET=n >> .config
+# make oldconfig
+# echo CONFIG_ETHERNET=y >> .config
+# yes n | make oldconfig
+#
+# This came up in https://github.com/ulfalizer/Kconfiglib/issues/15.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/defconfig_oldconfig.py
+
+import sys
+
+import kconfiglib
+
+
+kconf = kconfiglib.Kconfig(sys.argv[1])
+
+# Mirrors defconfig
+kconf.load_config("arch/x86/configs/x86_64_defconfig")
+kconf.write_config()
+
+# Mirrors the first oldconfig
+kconf.load_config()
+kconf.syms["ETHERNET"].set_value(0)
+kconf.write_config()
+
+# Mirrors the second oldconfig
+kconf.load_config()
+kconf.syms["ETHERNET"].set_value(2)
+for s in kconf.unique_defined_syms:
+    if s.user_value is None and 0 in s.assignable:
+        s.set_value(0)
+
+# Write the final configuration
+print(kconf.write_config())
diff --git a/support/kconfiglib/examples/dumpvars.py b/support/kconfiglib/examples/dumpvars.py
new file mode 100644
index 0000000..0f8ab43
--- /dev/null
+++ b/support/kconfiglib/examples/dumpvars.py
@@ -0,0 +1,15 @@
+# Prints all (set) environment variables referenced in the Kconfig files
+# together with their values, as a list of assignments.
+#
+# Note: This only works for environment variables referenced via the $(FOO)
+# preprocessor syntax. The older $FOO syntax is maintained for backwards
+# compatibility.
+
+import os
+import sys
+
+import kconfiglib
+
+
+print(" ".join("{}='{}'".format(var, os.environ[var])
+               for var in kconfiglib.Kconfig(sys.argv[1]).env_vars))
diff --git a/support/kconfiglib/examples/eval_expr.py b/support/kconfiglib/examples/eval_expr.py
new file mode 100644
index 0000000..23eedb4
--- /dev/null
+++ b/support/kconfiglib/examples/eval_expr.py
@@ -0,0 +1,24 @@
+# Evaluates an expression (e.g. "X86_64 || (X86_32 && X86_LOCAL_APIC)") in the
+# context of a configuration. Note that this always yields a tristate value (n,
+# m, or y).
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/eval_expr.py SCRIPT_ARG=<expr>
+
+import sys
+
+import kconfiglib
+
+
+if len(sys.argv) < 3:
+    sys.exit("Pass the expression to evaluate with SCRIPT_ARG=<expression>")
+
+kconf = kconfiglib.Kconfig(sys.argv[1])
+expr = sys.argv[2]
+
+# Enable modules so that m doesn't get demoted to n
+kconf.modules.set_value(2)
+
+print("the expression '{}' evaluates to {}"
+      .format(expr, kconf.eval_string(expr)))
diff --git a/support/kconfiglib/examples/find_symbol.py b/support/kconfiglib/examples/find_symbol.py
new file mode 100644
index 0000000..f747103
--- /dev/null
+++ b/support/kconfiglib/examples/find_symbol.py
@@ -0,0 +1,112 @@
+# Prints all menu nodes that reference a given symbol any of their properties
+# or property conditions, along with their parent menu nodes.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/find_symbol.py SCRIPT_ARG=<name>
+#
+# Example output for SCRIPT_ARG=X86:
+#
+#   Found 470 locations that reference X86:
+#
+#   ========== Location 1 (init/Kconfig:1108) ==========
+#
+#   config SGETMASK_SYSCALL
+#   	bool
+#   	prompt "sgetmask/ssetmask syscalls support" if EXPERT
+#   	default PARISC || M68K || PPC || MIPS || X86 || SPARC || MICROBLAZE || SUPERH
+#   	help
+#   	  sys_sgetmask and sys_ssetmask are obsolete system calls
+#   	  no longer supported in libc but still enabled by default in some
+#   	  architectures.
+#
+#   	  If unsure, leave the default option here.
+#
+#   ---------- Parent 1 (init/Kconfig:1077)  ----------
+#
+#   menuconfig EXPERT
+#   	bool
+#   	prompt "Configure standard kernel features (expert users)"
+#   	select DEBUG_KERNEL
+#   	help
+#   	  This option allows certain base kernel options and settings
+#   	  to be disabled or tweaked. This is for specialized
+#   	  environments which can tolerate a "non-standard" kernel.
+#   	  Only use this if you really know what you are doing.
+#
+#   ---------- Parent 2 (init/Kconfig:39)  ----------
+#
+#   menu "General setup"
+#
+#   ========== Location 2 (arch/Kconfig:29) ==========
+#
+#   config OPROFILE_EVENT_MULTIPLEX
+#   	bool
+#   	prompt "OProfile multiplexing support (EXPERIMENTAL)"
+#   	default "n"
+#   	depends on OPROFILE && X86
+#   	help
+#   	  The number of hardware counters is limited. The multiplexing
+#   	  feature enables OProfile to gather more events than counters
+#   	  are provided by the hardware. This is realized by switching
+#   	  between events at a user specified time interval.
+#
+#   	  If unsure, say N.
+#
+#   ---------- Parent 1 (arch/Kconfig:16)  ----------
+#
+#   config OPROFILE
+#   	tristate
+#   	prompt "OProfile system profiling"
+#   	select RING_BUFFER
+#   	select RING_BUFFER_ALLOW_SWAP
+#   	depends on PROFILING && HAVE_OPROFILE
+#   	help
+#   	  OProfile is a profiling system capable of profiling the
+#   	  whole system, include the kernel, kernel modules, libraries,
+#   	  and applications.
+#
+#   	  If unsure, say N.
+#
+#   ---------- Parent 2 (init/Kconfig:39)  ----------
+#
+#   menu "General setup"
+#
+#   ... (tons more)
+
+import sys
+
+import kconfiglib
+
+
+if len(sys.argv) < 3:
+    sys.exit('Pass symbol name (without "CONFIG_" prefix) with SCRIPT_ARG=<name>')
+
+kconf = kconfiglib.Kconfig(sys.argv[1])
+sym_name = sys.argv[2]
+if sym_name not in kconf.syms:
+    print("No symbol {} exists in the configuration".format(sym_name))
+    sys.exit(0)
+
+referencing = [node for node in kconf.node_iter()
+               if kconf.syms[sym_name] in node.referenced]
+if not referencing:
+    print("No references to {} found".format(sym_name))
+    sys.exit(0)
+
+print("Found {} locations that reference {}:\n"
+      .format(len(referencing), sym_name))
+
+for i, node in enumerate(referencing, 1):
+    print("========== Location {} ({}:{}) ==========\n\n{}"
+          .format(i, node.filename, node.linenr, node))
+
+    # Print the parents of the menu node too
+
+    node = node.parent
+    parent_i = 1
+    while node is not kconf.top_node:
+        print("---------- Parent {} ({}:{})  ----------\n\n{}"
+              .format(parent_i, node.filename, node.linenr, node))
+        node = node.parent
+        parent_i += 1
diff --git a/support/kconfiglib/examples/help_grep.py b/support/kconfiglib/examples/help_grep.py
new file mode 100644
index 0000000..157d8f2
--- /dev/null
+++ b/support/kconfiglib/examples/help_grep.py
@@ -0,0 +1,64 @@
+# Does a case-insensitive search for a regular expression in the help texts of
+# symbols and choices and the prompts of menus and comments. Prints the
+# matching items together with their locations and the matching text.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/help_grep.py SCRIPT_ARG=<regex>
+#
+# Shortened example output for SCRIPT_ARG=general:
+#
+#   menu "General setup"
+#   location: init/Kconfig:39
+#
+#   config SYSVIPC
+#   	bool
+#   	prompt "System V IPC"
+#   	help
+#   	  ...
+#   	  exchange information. It is generally considered to be a good thing,
+#   	  ...
+#
+#   location: init/Kconfig:233
+#
+#   config BSD_PROCESS_ACCT
+#   	bool
+#   	prompt "BSD Process Accounting" if MULTIUSER
+#   	help
+#   	  ...
+#   	  information.  This is generally a good idea, so say Y.
+#
+#   location: init/Kconfig:403
+#
+#   ...
+
+
+import re
+import sys
+
+from kconfiglib import Kconfig, Symbol, Choice, MENU, COMMENT
+
+
+if len(sys.argv) < 3:
+    sys.exit("Pass the regex with SCRIPT_ARG=<regex>")
+
+search = re.compile(sys.argv[2], re.IGNORECASE).search
+
+for node in Kconfig(sys.argv[1]).node_iter():
+    match = False
+
+    if isinstance(node.item, (Symbol, Choice)) and \
+       node.help is not None and search(node.help):
+        print(node.item)
+        match = True
+
+    elif node.item == MENU and search(node.prompt[0]):
+        print('menu "{}"'.format(node.prompt[0]))
+        match = True
+
+    elif node.item == COMMENT and search(node.prompt[0]):
+        print('comment "{}"'.format(node.prompt[0]))
+        match = True
+
+    if match:
+        print("location: {}:{}\n".format(node.filename, node.linenr))
diff --git a/support/kconfiglib/examples/kconfiglib.py b/support/kconfiglib/examples/kconfiglib.py
new file mode 120000
index 0000000..b9dfb64
--- /dev/null
+++ b/support/kconfiglib/examples/kconfiglib.py
@@ -0,0 +1 @@
+../kconfiglib.py
\ No newline at end of file
diff --git a/support/kconfiglib/examples/list_undefined.py b/support/kconfiglib/examples/list_undefined.py
new file mode 100644
index 0000000..4a3bc9b
--- /dev/null
+++ b/support/kconfiglib/examples/list_undefined.py
@@ -0,0 +1,156 @@
+# Prints a list of symbols that are referenced in the Kconfig files of some
+# architecture but not defined by the Kconfig files of any architecture.
+#
+# A Kconfig file might be shared between many architectures and legitimately
+# reference undefined symbols for some of them, but if no architecture defines
+# the symbol, it usually indicates a problem or potential cleanup.
+#
+# This script could be sped up a lot if needed. See the comment near the
+# referencing_nodes() call.
+#
+# Run with the following command in the kernel root:
+#
+#   $ python(3) Kconfiglib/examples/list_undefined.py
+#
+# Example output:
+#
+#   Registering defined and undefined symbols for all arches
+#     Processing mips
+#     Processing ia64
+#     Processing metag
+#     ...
+#
+#   Finding references to each undefined symbol
+#     Processing mips
+#     Processing ia64
+#     Processing metag
+#     ...
+#
+#   The following globally undefined symbols were found, listed here
+#   together with the locations of the items that reference them.
+#   References might come from enclosing menus and ifs.
+#
+#     ARM_ERRATA_753970: arch/arm/mach-mvebu/Kconfig:56, arch/arm/mach-mvebu/Kconfig:39
+#     SUNXI_CCU_MP: drivers/clk/sunxi-ng/Kconfig:14
+#     SUNXI_CCU_DIV: drivers/clk/sunxi-ng/Kconfig:14
+#     AC97: sound/ac97/Kconfig:6
+#     ...
+
+import os
+import subprocess
+
+from kconfiglib import Kconfig
+
+
+# Referenced inside the Kconfig files
+os.environ["KERNELVERSION"] = str(
+    subprocess.check_output(("make", "kernelversion")).decode("utf-8").rstrip()
+)
+
+
+def all_arch_srcarch_pairs():
+    """
+    Generates all valid (ARCH, SRCARCH) tuples for the kernel, corresponding to
+    different architectures. SRCARCH holds the arch/ subdirectory.
+    """
+    for srcarch in os.listdir("arch"):
+        # Each subdirectory of arch/ containing a Kconfig file corresponds to
+        # an architecture
+        if os.path.exists(os.path.join("arch", srcarch, "Kconfig")):
+            yield (srcarch, srcarch)
+
+    # Some architectures define additional ARCH settings with ARCH != SRCARCH
+    # (search for "Additional ARCH settings for" in the top-level Makefile)
+
+    yield ("i386", "x86")
+    yield ("x86_64", "x86")
+
+    yield ("sparc32", "sparc")
+    yield ("sparc64", "sparc")
+
+    yield ("sh64", "sh")
+
+    yield ("um", "um")
+
+
+def all_arch_srcarch_kconfigs():
+    """
+    Generates Kconfig instances for all the architectures in the kernel
+    """
+
+    os.environ["srctree"] = "."
+    os.environ["HOSTCC"] = "gcc"
+    os.environ["HOSTCXX"] = "g++"
+    os.environ["CC"] = "gcc"
+    os.environ["LD"] = "ld"
+
+    for arch, srcarch in all_arch_srcarch_pairs():
+        print("  Processing " + arch)
+
+        os.environ["ARCH"] = arch
+        os.environ["SRCARCH"] = srcarch
+
+        # um (User Mode Linux) uses a different base Kconfig file
+        yield Kconfig("Kconfig" if arch != "um" else "arch/x86/um/Kconfig",
+                      warn=False)
+
+
+print("Registering defined and undefined symbols for all arches")
+
+# Sets holding the names of all defined and undefined symbols, for all
+# architectures
+defined = set()
+undefined = set()
+
+for kconf in all_arch_srcarch_kconfigs():
+    for name, sym in kconf.syms.items():
+        if sym.nodes:
+            # If the symbol has a menu node, it is defined
+            defined.add(name)
+        else:
+            # Undefined symbol. We skip some of the uninteresting ones.
+
+            # Due to how Kconfig works, integer literals show up as symbols
+            # (from e.g. 'default 1'). Skip those.
+            try:
+                int(name, 0)
+                continue
+            except ValueError:
+                # Interesting undefined symbol
+                undefined.add(name)
+
+
+print("\nFinding references to each undefined symbol")
+
+def referencing_nodes(kconf, name):
+    # Returns a list of all menu nodes that reference a symbol named 'name' in
+    # any of their properties or property conditions
+    res = []
+
+    for node in kconf.node_iter():
+        for ref in node.referenced:
+            if ref.name == name:
+                res.append(node)
+
+    return res
+
+
+# Maps each globally undefined symbol to the menu nodes that reference it
+undef_sym_refs = [(name, set()) for name in undefined - defined]
+
+for kconf in all_arch_srcarch_kconfigs():
+    for name, refs in undef_sym_refs:
+        # This means that we search the entire configuration tree for each
+        # undefined symbol, which is terribly inefficient. We could speed
+        # things up by tweaking referencing_nodes() to compare each symbol to
+        # multiple symbols while walking the configuration tree.
+        for node in referencing_nodes(kconf, name):
+            refs.add("{}:{}".format(node.filename, node.linenr))
+
+
+print("\nThe following globally undefined symbols were found, listed here\n"
+      "together with the locations of the items that reference them.\n"
+      "References might come from enclosing menus and ifs.\n")
+
+for name, refs in undef_sym_refs:
+    print("  {}: {}".format(name, ", ".join(refs)))
diff --git a/support/kconfiglib/examples/menuconfig_example.py b/support/kconfiglib/examples/menuconfig_example.py
new file mode 100755
index 0000000..a06b05e
--- /dev/null
+++ b/support/kconfiglib/examples/menuconfig_example.py
@@ -0,0 +1,341 @@
+#!/usr/bin/env python
+
+# Implements a simple configuration interface on top of Kconfiglib to
+# demonstrate concepts for building a menuconfig-like. Emulates how the
+# standard menuconfig prints menu entries.
+#
+# Always displays the entire Kconfig tree to keep things as simple as possible
+# (all symbols, choices, menus, and comments).
+#
+# Usage:
+#
+#   $ python(3) Kconfiglib/examples/menuconfig.py <Kconfig file>
+#
+# A sample Kconfig is available in Kconfiglib/examples/Kmenuconfig.
+#
+# Here's a notation guide. The notation matches the one used by menuconfig
+# (scripts/kconfig/mconf):
+#
+#   [ ] prompt      - Bool
+#   < > prompt      - Tristate
+#   {M} prompt      - Tristate selected to m. Can only be set to m or y.
+#   -*- prompt      - Bool/tristate selected to y, pinning it
+#   -M- prompt      - Tristate selected to m that also has m visibility,
+#                     pinning it to m
+#   (foo) prompt    - String/int/hex symbol with value "foo"
+#   --> prompt      - The selected symbol in a choice in y mode. This
+#                     syntax is unique to this example.
+#
+# When modules are disabled, the .type attribute of TRISTATE symbols and
+# choices automatically changes to BOOL. This trick is used by the C
+# implementation as well, and gives the expected behavior without having to do
+# anything extra here. The original type is available in .orig_type if needed.
+#
+# The Kconfiglib/examples/Kmenuconfig example uses named choices to be able to
+# refer to choices by name. Named choices are supported in the C tools too, but
+# I don't think I've ever seen them used in the wild.
+#
+# Sample session:
+#
+#   $ python Kconfiglib/examples/menuconfig.py Kconfiglib/examples/Kmenuconfig
+#
+#   ======== Example Kconfig configuration ========
+#
+#   [*] Enable loadable module support (MODULES)
+#       Bool and tristate symbols
+#           [*] Bool symbol (BOOL)
+#                   [ ] Dependent bool symbol (BOOL_DEP)
+#                   < > Dependent tristate symbol (TRI_DEP)
+#                   [ ] First prompt (TWO_MENU_NODES)
+#           < > Tristate symbol (TRI)
+#           [ ] Second prompt (TWO_MENU_NODES)
+#               *** These are selected by TRI_DEP ***
+#           < > Tristate selected by TRI_DEP (SELECTED_BY_TRI_DEP)
+#           < > Tristate implied by TRI_DEP (IMPLIED_BY_TRI_DEP)
+#       String, int, and hex symbols
+#           (foo) String symbol (STRING)
+#           (747) Int symbol (INT)
+#           (0xABC) Hex symbol (HEX)
+#       Various choices
+#           -*- Bool choice (BOOL_CHOICE)
+#                   --> Bool choice sym 1 (BOOL_CHOICE_SYM_1)
+#                       Bool choice sym 2 (BOOL_CHOICE_SYM_2)
+#           {M} Tristate choice (TRI_CHOICE)
+#                   < > Tristate choice sym 1 (TRI_CHOICE_SYM_1)
+#                   < > Tristate choice sym 2 (TRI_CHOICE_SYM_2)
+#           [ ] Optional bool choice (OPT_BOOL_CHOICE)
+#
+#   Enter a symbol/choice name, "load_config", or "write_config" (or press CTRL+D to exit): BOOL
+#   Value for BOOL (available: n, y): n
+#
+#   ======== Example Kconfig configuration ========
+#
+#   [*] Enable loadable module support (MODULES)
+#       Bool and tristate symbols
+#           [ ] Bool symbol (BOOL)
+#           < > Tristate symbol (TRI)
+#           [ ] Second prompt (TWO_MENU_NODES)
+#               *** These are selected by TRI_DEP ***
+#           < > Tristate selected by TRI_DEP (SELECTED_BY_TRI_DEP)
+#           < > Tristate implied by TRI_DEP (IMPLIED_BY_TRI_DEP)
+#       String, int, and hex symbols
+#           (foo) String symbol (STRING)
+#           (747) Int symbol (INT)
+#           (0xABC) Hex symbol (HEX)
+#       Various choices
+#           -*- Bool choice (BOOL_CHOICE)
+#                   --> Bool choice sym 1 (BOOL_CHOICE_SYM_1)
+#                       Bool choice sym 2 (BOOL_CHOICE_SYM_2)
+#           {M} Tristate choice (TRI_CHOICE)
+#                   < > Tristate choice sym 1 (TRI_CHOICE_SYM_1)
+#                   < > Tristate choice sym 2 (TRI_CHOICE_SYM_2)
+#          [ ] Optional bool choice (OPT_BOOL_CHOICE)
+#
+#   Enter a symbol/choice name, "load_config", or "write_config" (or press CTRL+D to exit): MODULES
+#   Value for MODULES (available: n, y): n
+#
+#   ======== Example Kconfig configuration ========
+#
+#   [ ] Enable loadable module support (MODULES)
+#       Bool and tristate symbols
+#           [ ] Bool symbol (BOOL)
+#           [ ] Tristate symbol (TRI)
+#           [ ] Second prompt (TWO_MENU_NODES)
+#               *** These are selected by TRI_DEP ***
+#           [ ] Tristate selected by TRI_DEP (SELECTED_BY_TRI_DEP)
+#           [ ] Tristate implied by TRI_DEP (IMPLIED_BY_TRI_DEP)
+#       String, int, and hex symbols
+#           (foo) String symbol (STRING)
+#           (747) Int symbol (INT)
+#           (0xABC) Hex symbol (HEX)
+#       Various choices
+#           -*- Bool choice (BOOL_CHOICE)
+#                   --> Bool choice sym 1 (BOOL_CHOICE_SYM_1)
+#                       Bool choice sym 2 (BOOL_CHOICE_SYM_2)
+#           -*- Tristate choice (TRI_CHOICE)
+#                   --> Tristate choice sym 1 (TRI_CHOICE_SYM_1)
+#                       Tristate choice sym 2 (TRI_CHOICE_SYM_2)
+#           [ ] Optional bool choice (OPT_BOOL_CHOICE)
+#
+#   Enter a symbol/choice name, "load_config", or "write_config" (or press CTRL+D to exit): ^D
+
+from __future__ import print_function
+import readline
+import sys
+
+from kconfiglib import Kconfig, \
+                       Symbol, MENU, COMMENT, \
+                       BOOL, TRISTATE, STRING, INT, HEX, UNKNOWN, \
+                       expr_value, \
+                       TRI_TO_STR
+
+
+# Python 2/3 compatibility hack
+if sys.version_info[0] < 3:
+    input = raw_input
+
+
+def indent_print(s, indent):
+    print(indent*" " + s)
+
+
+def value_str(sc):
+    """
+    Returns the value part ("[*]", "<M>", "(foo)" etc.) of a menu entry.
+
+    sc: Symbol or Choice.
+    """
+    if sc.type in (STRING, INT, HEX):
+        return "({})".format(sc.str_value)
+
+    # BOOL or TRISTATE
+
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    if isinstance(sc, Symbol) and sc.choice and sc.visibility == 2:
+        # For choices in y mode, print '-->' next to the selected symbol
+        return "-->" if sc.choice.selection is sc else "   "
+
+    tri_val_str = (" ", "M", "*")[sc.tri_value]
+
+    if len(sc.assignable) == 1:
+        # Pinned to a single value
+        return "-{}-".format(tri_val_str)
+
+    if sc.type == BOOL:
+        return "[{}]".format(tri_val_str)
+
+    if sc.type == TRISTATE:
+        if sc.assignable == (1, 2):
+            # m and y available
+            return "{" + tri_val_str + "}"  # Gets a bit confusing with .format()
+        return "<{}>".format(tri_val_str)
+
+
+def node_str(node):
+    """
+    Returns the complete menu entry text for a menu node, or "" for invisible
+    menu nodes. Invisible menu nodes are those that lack a prompt or that do
+    not have a satisfied prompt condition.
+
+    Example return value: "[*] Bool symbol (BOOL)"
+
+    The symbol name is printed in parentheses to the right of the prompt. This
+    is so that symbols can easily be referred to in the configuration
+    interface.
+    """
+    if not node.prompt:
+        return ""
+
+    # Even for menu nodes for symbols and choices, it's wrong to check
+    # Symbol.visibility / Choice.visibility here. The reason is that a symbol
+    # (and a choice, in theory) can be defined in multiple locations, giving it
+    # multiple menu nodes, which do not necessarily all have the same prompt
+    # visibility. Symbol.visibility / Choice.visibility is calculated as the OR
+    # of the visibility of all the prompts.
+    prompt, prompt_cond = node.prompt
+    if not expr_value(prompt_cond):
+        return ""
+
+    if node.item == MENU:
+        return "    " + prompt
+
+    if node.item == COMMENT:
+        return "    *** {} ***".format(prompt)
+
+    # Symbol or Choice
+
+    sc = node.item
+
+    if sc.type == UNKNOWN:
+        # Skip symbols defined without a type (these are obscure and generate
+        # a warning)
+        return ""
+
+    # {:3} sets the field width to three. Gives nice alignment for empty string
+    # values.
+    res = "{:3} {}".format(value_str(sc), prompt)
+
+    # Don't print the name for unnamed choices (the normal kind)
+    if sc.name is not None:
+        res += " ({})".format(sc.name)
+
+    return res
+
+
+def print_menuconfig_nodes(node, indent):
+    """
+    Prints a tree with all the menu entries rooted at 'node'. Child menu
+    entries are indented.
+    """
+    while node:
+        string = node_str(node)
+        if string:
+            indent_print(string, indent)
+
+        if node.list:
+            print_menuconfig_nodes(node.list, indent + 8)
+
+        node = node.next
+
+
+def print_menuconfig(kconf):
+    """
+    Prints all menu entries for the configuration.
+    """
+    # Print the expanded mainmenu text at the top. This is the same as
+    # kconf.top_node.prompt[0], but with variable references expanded.
+    print("\n======== {} ========\n".format(kconf.mainmenu_text))
+
+    print_menuconfig_nodes(kconf.top_node.list, 0)
+    print("")
+
+
+def get_value_from_user(sc):
+    """
+    Prompts the user for a value for the symbol or choice 'sc'. For
+    bool/tristate symbols and choices, provides a list of all the assignable
+    values.
+    """
+    if not sc.visibility:
+        print(sc.name + " is not currently visible")
+        return False
+
+    prompt = "Value for {}".format(sc.name)
+    if sc.type in (BOOL, TRISTATE):
+        prompt += " (available: {})" \
+                  .format(", ".join(TRI_TO_STR[val] for val in sc.assignable))
+    prompt += ": "
+
+    val = input(prompt)
+
+    # Automatically add a "0x" prefix for hex symbols, like the menuconfig
+    # interface does. This isn't done when loading .config files, hence why
+    # set_value() doesn't do it automatically.
+    if sc.type == HEX and not val.startswith(("0x", "0X")):
+        val = "0x" + val
+
+    # Let Kconfiglib itself print a warning here if the value is invalid. We
+    # could also disable warnings temporarily with 'kconf.warn = False' and
+    # print our own warning.
+    return sc.set_value(val)
+
+
+if __name__ == "__main__":
+    if len(sys.argv) != 2:
+        sys.exit("usage: menuconfig.py <Kconfig file>")
+
+    # Load Kconfig configuration files
+    kconf = Kconfig(sys.argv[1])
+
+    # Print the initial configuration tree
+    print_menuconfig(kconf)
+
+    while True:
+        try:
+            cmd = input('Enter a symbol/choice name, "load_config", or '
+                        '"write_config" (or press CTRL+D to exit): ').strip()
+        except EOFError:
+            print("")
+            break
+
+        if cmd == "load_config":
+            config_filename = input(".config file to load: ")
+            try:
+                # Returns a message telling which file got loaded
+                print(kconf.load_config(config_filename))
+            except EnvironmentError as e:
+                print(e, file=sys.stderr)
+
+            print_menuconfig(kconf)
+            continue
+
+        if cmd == "write_config":
+            config_filename = input("To this file: ")
+            try:
+                # Returns a message telling which file got saved
+                print(kconf.write_config(config_filename))
+            except EnvironmentError as e:
+                print(e, file=sys.stderr)
+
+            continue
+
+        # Assume 'cmd' is the name of a symbol or choice if it isn't one of the
+        # commands above, prompt the user for a value for it, and print the new
+        # configuration tree
+
+        if cmd in kconf.syms:
+            if get_value_from_user(kconf.syms[cmd]):
+                print_menuconfig(kconf)
+
+            continue
+
+        if cmd in kconf.named_choices:
+            if get_value_from_user(kconf.named_choices[cmd]):
+                print_menuconfig(kconf)
+
+            continue
+
+        print("No symbol/choice named '{}' in the configuration".format(cmd),
+              file=sys.stderr)
diff --git a/support/kconfiglib/examples/merge_config.py b/support/kconfiglib/examples/merge_config.py
new file mode 100755
index 0000000..ef11d79
--- /dev/null
+++ b/support/kconfiglib/examples/merge_config.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+
+# This script functions similarly to scripts/kconfig/merge_config.sh from the
+# kernel tree, merging multiple configurations fragments to produce a complete
+# .config, with unspecified values filled in as for alldefconfig.
+#
+# The generated .config respects symbol dependencies, and a warning is printed
+# if any symbol gets a different value from the assigned value.
+#
+# For a real-world merging example based on this script, see
+# https://github.com/zephyrproject-rtos/zephyr/blob/master/scripts/kconfig/kconfig.py.
+#
+# Here's a demo:
+#
+# Kconfig contents:
+#
+#     config FOO
+#         bool "FOO"
+#
+#     config BAR
+#         bool "BAR"
+#
+#     config BAZ
+#         string "BAZ"
+#
+#     config QAZ
+#         bool "QAZ" if n
+#
+#
+# conf1 contents:
+#
+#     CONFIG_FOO=y
+#
+#
+# conf2 contents:
+#
+#     CONFIG_BAR=y
+#
+#
+# conf3 contents:
+#
+#     # Assigned twice (would generate warning if 'warn_assign_override' was
+#     # True)
+#     # CONFIG_FOO is not set
+#
+#     # Ops... this symbol doesn't exist
+#     CONFIG_OPS=y
+#
+#     CONFIG_BAZ="baz string"
+#
+#
+# conf4 contents:
+#
+#     CONFIG_QAZ=y
+#
+#
+# Running:
+#
+#     $ python(3) merge_config.py Kconfig merged conf1 conf2 conf3 conf4
+#     Merged configuration 'conf1'
+#     Merged configuration 'conf2'
+#     conf3:5: warning: attempt to assign the value 'y' to the undefined symbol OPS
+#     Merged configuration 'conf3'
+#     Merged configuration 'conf4'
+#     Configuration saved to 'merged'
+#     warning: QAZ (defined at Kconfig:10) was assigned the value 'y' but got the value 'n' -- check dependencies
+#     $ cat merged
+#     Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)
+#     # CONFIG_FOO is not set
+#     CONFIG_BAR=y
+#     CONFIG_BAZ="baz string"
+
+from __future__ import print_function
+import sys
+
+from kconfiglib import Kconfig, BOOL, TRISTATE, TRI_TO_STR
+
+
+if len(sys.argv) < 4:
+    sys.exit("usage: merge_config.py Kconfig merged_config config1 [config2 ...]")
+
+kconf = Kconfig(sys.argv[1])
+
+# Enable warnings for assignments to undefined symbols
+kconf.warn_assign_undef = True
+
+# (This script uses alldefconfig as the base. Other starting states could be
+# set up here as well. The approach in examples/allnoconfig_simpler.py could
+# provide an allnoconfig starting state for example.)
+
+# Disable warnings generated for multiple assignments to the same symbol within
+# a (set of) configuration files. Assigning a symbol multiple times might be
+# done intentionally when merging configuration files.
+kconf.warn_assign_override = False
+kconf.warn_assign_redun = False
+
+# Create a merged configuration by loading the fragments with replace=False.
+# load_config() and write_config() returns a message to print.
+for config in sys.argv[3:]:
+    print(kconf.load_config(config, replace=False))
+
+# Write the merged configuration
+print(kconf.write_config(sys.argv[2]))
+
+# Print warnings for symbols whose actual value doesn't match the assigned
+# value
+
+def name_and_loc(sym):
+    # Helper for printing symbol names and Kconfig file location(s) in warnings
+
+    if not sym.nodes:
+        return sym.name + " (undefined)"
+
+    return "{} (defined at {})".format(
+        sym.name,
+        ", ".join("{}:{}".format(node.filename, node.linenr)
+                  for node in sym.nodes))
+
+for sym in kconf.defined_syms:
+    # Was the symbol assigned to?
+    if sym.user_value is not None:
+        # Tristate values are represented as 0, 1, 2. Having them as
+        # "n", "m", "y" is more convenient here, so convert.
+        if sym.type in (BOOL, TRISTATE):
+            user_value = TRI_TO_STR[sym.user_value]
+        else:
+            user_value = sym.user_value
+
+        if user_value != sym.str_value:
+            print("warning: {} was assigned the value '{}' but got the "
+                  "value '{}' -- check dependencies".format(
+                      name_and_loc(sym), user_value, sym.str_value),
+                  file=sys.stderr)
diff --git a/support/kconfiglib/examples/print_config_tree.py b/support/kconfiglib/examples/print_config_tree.py
new file mode 100644
index 0000000..dc81d9d
--- /dev/null
+++ b/support/kconfiglib/examples/print_config_tree.py
@@ -0,0 +1,199 @@
+# Prints menu entries as a tree with its value in the .config file. This can be
+# handy e.g. for diffing between different .config files or versions of Kconfig files.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=print_config_tree.py [SCRIPT_ARG=<.config>]
+#
+#   If the variable WITH_HELP_DESC is modified to 'True', the help is added
+#   to the symbols.
+#
+# Here's a notation guide. The notation matches the one used by menuconfig
+# (scripts/kconfig/mconf):
+#
+#   [ ] prompt      - Bool
+#   < > prompt      - Tristate
+#   {M} prompt      - Tristate selected to m. Can only be set to m or y.
+#   -*- prompt      - Bool/tristate selected to y, pinning it
+#   -M- prompt      - Tristate selected to m that also has m visibility,
+#                     pinning it to m
+#   (foo) prompt    - String/int/hex symbol with value "foo"
+#   --> prompt      - The selected symbol in a choice in y mode. This
+#                     syntax is unique to this example.
+#
+# When modules are disabled, the .type attribute of TRISTATE symbols and
+# choices automatically changes to BOOL. This trick is used by the C
+# implementation as well, and gives the expected behavior without having to do
+# anything extra here. The original type is available in .orig_type if needed.
+#
+# Example output:
+#
+#   $ make scriptconfig SCRIPT=Kconfiglib/examples/print_config_tree.py [SCRIPT_ARG=<.config file>]
+#
+#   ======== Linux/x86 4.9.82 Kernel Configuration ========
+#
+#   [*] 64-bit kernel (64BIT)
+#       General setup
+#          ()  Cross-compiler tool prefix (CROSS_COMPILE)
+#          [ ] Compile also drivers which will not load (COMPILE_TEST)
+#          ()  Local version - append to kernel release (LOCALVERSION)
+#          [*] Automatically append version information to the version string (LOCALVERSION_AUTO)
+#          -*- Kernel compression mode
+#          ...
+#
+# With the variable WITH_HELP_DESC modified to 'True':
+#
+#   ======== Linux/x86 4.9.82 Kernel Configuration ========
+#
+#   [*] 64-bit kernel - Say yes to build a 64-bit kernel - formerly known as x86_64 Say no to build a 32-bit kernel - formerly known as i386  (64BIT)
+#       General setup
+#           ()  Cross-compiler tool prefix - Same as running 'make CROSS_COMPILE=prefix-' but stored for default make runs in this kernel build directory.  You don't need to set this unless you want the configured kernel build directory to select the cross-compiler automatically.  (CROSS_COMPILE)
+#           [ ] Compile also drivers which will not load - Some drivers can be compiled on a different platform than they are intended to be run on. Despite they cannot be loaded there (or even when they load they cannot be used due to missing HW support), developers still, opposing to distributors, might want to build such drivers to compile-test them.  If you are a developer and want to build everything available, say Y here. If you are a user/distributor, say N here to exclude useless drivers to be distributed.  (COMPILE_TEST)
+#           ...
+
+import sys
+
+from kconfiglib import Kconfig, \
+                       Symbol, MENU, COMMENT, \
+                       BOOL, TRISTATE, STRING, INT, HEX, UNKNOWN, \
+                       expr_value
+
+
+# Add help description to output
+WITH_HELP_DESC = False
+
+
+def indent_print(s, indent):
+    print(indent*" " + s)
+
+
+def value_str(sc):
+    """
+    Returns the value part ("[*]", "<M>", "(foo)" etc.) of a menu entry.
+
+    sc: Symbol or Choice.
+    """
+    if sc.type in (STRING, INT, HEX):
+        return "({})".format(sc.str_value)
+
+    # BOOL or TRISTATE
+
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    if isinstance(sc, Symbol) and sc.choice and sc.visibility == 2:
+        # For choices in y mode, print '-->' next to the selected symbol
+        return "-->" if sc.choice.selection is sc else "   "
+
+    tri_val_str = (" ", "M", "*")[sc.tri_value]
+
+    if len(sc.assignable) == 1:
+        # Pinned to a single value
+        return "-{}-".format(tri_val_str)
+
+    if sc.type == BOOL:
+        return "[{}]".format(tri_val_str)
+
+    if sc.type == TRISTATE:
+        if sc.assignable == (1, 2):
+            # m and y available
+            return "{" + tri_val_str + "}"  # Gets a bit confusing with .format()
+        return "<{}>".format(tri_val_str)
+
+
+def node_str(node):
+    """
+    Returns the complete menu entry text for a menu node, or "" for invisible
+    menu nodes. Invisible menu nodes are those that lack a prompt or that do
+    not have a satisfied prompt condition.
+
+    Example return value: "[*] Bool symbol (BOOL)"
+
+    The symbol name is printed in parentheses to the right of the prompt.
+    """
+    if not node.prompt:
+        return ""
+
+    # Even for menu nodes for symbols and choices, it's wrong to check
+    # Symbol.visibility / Choice.visibility here. The reason is that a symbol
+    # (and a choice, in theory) can be defined in multiple locations, giving it
+    # multiple menu nodes, which do not necessarily all have the same prompt
+    # visibility. Symbol.visibility / Choice.visibility is calculated as the OR
+    # of the visibility of all the prompts.
+    prompt, prompt_cond = node.prompt
+    if not expr_value(prompt_cond):
+        return ""
+
+    if node.item == MENU:
+        return "    " + prompt
+
+    if node.item == COMMENT:
+        return "    *** {} ***".format(prompt)
+
+    # Symbol or Choice
+
+    sc = node.item
+
+    if sc.type == UNKNOWN:
+        # Skip symbols defined without a type (these are obscure and generate
+        # a warning)
+        return ""
+
+    # Add help text
+    if WITH_HELP_DESC:
+        prompt += ' - ' + str(node.help).replace('\n', ' ').replace('\r', '')
+
+    # {:3} sets the field width to three. Gives nice alignment for empty string
+    # values.
+    res = "{:3} {}".format(value_str(sc), prompt)
+
+    # Don't print the name for unnamed choices (the normal kind)
+    if sc.name is not None:
+        res += " ({})".format(sc.name)
+
+    return res
+
+
+def print_menuconfig_nodes(node, indent):
+    """
+    Prints a tree with all the menu entries rooted at 'node'. Child menu
+    entries are indented.
+    """
+    while node:
+        string = node_str(node)
+        if string:
+            indent_print(string, indent)
+
+        if node.list:
+            print_menuconfig_nodes(node.list, indent + 8)
+
+        node = node.next
+
+
+def print_menuconfig(kconf):
+    """
+    Prints all menu entries for the configuration.
+    """
+    # Print the expanded mainmenu text at the top. This is the same as
+    # kconf.top_node.prompt[0], but with variable references expanded.
+    print("\n======== {} ========\n".format(kconf.mainmenu_text))
+
+    print_menuconfig_nodes(kconf.top_node.list, 0)
+    print("")
+
+
+if __name__ == "__main__":
+
+    # Load Kconfig configuration files
+    kconf = Kconfig(sys.argv[1])
+
+    # Set default .config file or load it from argv
+    if len(sys.argv) == 2:
+        config_filename = '.config'
+    else:
+        config_filename = sys.argv[2]
+
+    kconf.load_config(config_filename)
+
+    # Print the configuration tree
+    print_menuconfig(kconf)
diff --git a/support/kconfiglib/examples/print_sym_info.py b/support/kconfiglib/examples/print_sym_info.py
new file mode 100644
index 0000000..ea6fc72
--- /dev/null
+++ b/support/kconfiglib/examples/print_sym_info.py
@@ -0,0 +1,54 @@
+# Loads a Kconfig and a .config and prints a symbol.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/print_sym_info.py SCRIPT_ARG=<name>
+#
+# Example output for SCRIPT_ARG=MODULES:
+#
+# menuconfig MODULES
+# 	bool
+# 	prompt "Enable loadable module support"
+# 	option modules
+# 	help
+# 	  Kernel modules are small pieces of compiled code which can
+# 	  be inserted in the running kernel, rather than being
+# 	  permanently built into the kernel.  You use the "modprobe"
+# 	  tool to add (and sometimes remove) them.  If you say Y here,
+# 	  many parts of the kernel can be built as modules (by
+# 	  answering M instead of Y where indicated): this is most
+# 	  useful for infrequently used options which are not required
+# 	  for booting.  For more information, see the man pages for
+# 	  modprobe, lsmod, modinfo, insmod and rmmod.
+#
+# 	  If you say Y here, you will need to run "make
+# 	  modules_install" to put the modules under /lib/modules/
+# 	  where modprobe can find them (you may need to be root to do
+# 	  this).
+#
+# 	  If unsure, say Y.
+#
+# value = n
+# visibility = y
+# currently assignable values: n, y
+# defined at init/Kconfig:1674
+
+import sys
+
+from kconfiglib import Kconfig, TRI_TO_STR
+
+
+if len(sys.argv) < 3:
+    sys.exit('Pass symbol name (without "CONFIG_" prefix) with SCRIPT_ARG=<name>')
+
+kconf = Kconfig(sys.argv[1])
+sym = kconf.syms[sys.argv[2]]
+
+print(sym)
+print("value = " + sym.str_value)
+print("visibility = " + TRI_TO_STR[sym.visibility])
+print("currently assignable values: " +
+      ", ".join([TRI_TO_STR[v] for v in sym.assignable]))
+
+for node in sym.nodes:
+    print("defined at {}:{}".format(node.filename, node.linenr))
diff --git a/support/kconfiglib/examples/print_tree.py b/support/kconfiglib/examples/print_tree.py
new file mode 100644
index 0000000..49cb954
--- /dev/null
+++ b/support/kconfiglib/examples/print_tree.py
@@ -0,0 +1,75 @@
+# Prints the menu tree of the configuration. Dependencies between symbols can
+# sometimes implicitly alter the menu structure (see kconfig-language.txt), and
+# that's implemented too.
+#
+# Note: See the Kconfig.node_iter() function as well, which provides a simpler
+# interface for walking the menu tree.
+#
+# Usage:
+#
+#   $ make [ARCH=<arch>] scriptconfig SCRIPT=Kconfiglib/examples/print_tree.py
+#
+# Example output:
+#
+#   ...
+#   config HAVE_KERNEL_LZO
+#   config HAVE_KERNEL_LZ4
+#   choice
+#     config KERNEL_GZIP
+#     config KERNEL_BZIP2
+#     config KERNEL_LZMA
+#     config KERNEL_XZ
+#     config KERNEL_LZO
+#     config KERNEL_LZ4
+#   config DEFAULT_HOSTNAME
+#   config SWAP
+#   config SYSVIPC
+#     config SYSVIPC_SYSCTL
+#   config POSIX_MQUEUE
+#     config POSIX_MQUEUE_SYSCTL
+#   config CROSS_MEMORY_ATTACH
+#   config FHANDLE
+#   config USELIB
+#   config AUDIT
+#   config HAVE_ARCH_AUDITSYSCALL
+#   config AUDITSYSCALL
+#   config AUDIT_WATCH
+#   config AUDIT_TREE
+#   menu "IRQ subsystem"
+#     config MAY_HAVE_SPARSE_IRQ
+#     config GENERIC_IRQ_LEGACY
+#     config GENERIC_IRQ_PROBE
+#   ...
+
+import sys
+
+from kconfiglib import Kconfig, Symbol, Choice, MENU, COMMENT
+
+
+def indent_print(s, indent):
+    print(indent*" " + s)
+
+
+def print_items(node, indent):
+    while node:
+        if isinstance(node.item, Symbol):
+            indent_print("config " + node.item.name, indent)
+
+        elif isinstance(node.item, Choice):
+            indent_print("choice", indent)
+
+        elif node.item == MENU:
+            indent_print('menu "{}"'.format(node.prompt[0]), indent)
+
+        elif node.item == COMMENT:
+            indent_print('comment "{}"'.format(node.prompt[0]), indent)
+
+
+        if node.list:
+            print_items(node.list, indent + 2)
+
+        node = node.next
+
+
+kconf = Kconfig(sys.argv[1])
+print_items(kconf.top_node, 0)
diff --git a/support/kconfiglib/genconfig.py b/support/kconfiglib/genconfig.py
new file mode 100755
index 0000000..bb3e6ff
--- /dev/null
+++ b/support/kconfiglib/genconfig.py
@@ -0,0 +1,132 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Generates a header file with #defines from the configuration, matching the
+format of include/generated/autoconf.h in the Linux kernel.
+
+Optionally, also writes the configuration output as a .config file. See
+--config-out.
+
+The --sync-deps, --file-list, and --env-list options generate information that
+can be used to avoid needless rebuilds/reconfigurations.
+
+Before writing a header or configuration file, Kconfiglib compares the old
+contents of the file against the new contents. If there's no change, the write
+is skipped. This avoids updating file metadata like the modification time, and
+might save work depending on your build setup.
+
+By default, the configuration is generated from '.config'. A different
+configuration file can be passed in the KCONFIG_CONFIG environment variable.
+"""
+import argparse
+import os
+import sys
+
+import kconfiglib
+
+
+DEFAULT_HEADER_PATH = "config.h"
+DEFAULT_SYNC_DEPS_PATH = "deps/"
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--header-path",
+        metavar="HEADER_FILE",
+        default=DEFAULT_HEADER_PATH,
+        help="Path for the generated header file (default: {})"
+             .format(DEFAULT_HEADER_PATH))
+
+    parser.add_argument(
+        "--config-out",
+        metavar="CONFIG_FILE",
+        help="""
+Write the configuration to CONFIG_FILE. This is useful if you include .config
+files in Makefiles, as the generated configuration file will be a full .config
+file even if .config is outdated. The generated configuration matches what
+olddefconfig would produce. If you use sync-deps, you can include
+deps/auto.conf instead. --config-out is meant for cases where incremental build
+information isn't needed.
+""")
+
+    parser.add_argument(
+        "--sync-deps",
+        metavar="OUTPUT_DIR",
+        nargs="?",
+        const=DEFAULT_SYNC_DEPS_PATH,
+        help="""
+Enable generation of symbol dependency information for incremental builds,
+optionally specifying the output directory (default: {}). See the docstring of
+Kconfig.sync_deps() in Kconfiglib for more information.
+""".format(DEFAULT_SYNC_DEPS_PATH))
+
+    parser.add_argument(
+        "--file-list",
+        metavar="OUTPUT_FILE",
+        help="""
+Write a list of all Kconfig files to OUTPUT_FILE, with one file per line. The
+paths are relative to $srctree (or to the current directory if $srctree is
+unset). Files appear in the order they're 'source'd.
+""")
+
+    parser.add_argument(
+        "--env-list",
+        metavar="OUTPUT_FILE",
+        help="""
+Write a list of all environment variables referenced in Kconfig files to
+OUTPUT_FILE, with one variable per line. Each line has the format NAME=VALUE.
+Only environment variables referenced with the preprocessor $(VAR) syntax are
+included, and not variables referenced with the older $VAR syntax (which is
+only supported for backwards compatibility).
+""")
+
+    parser.add_argument(
+        "kconfig_filename",
+        metavar="KCONFIG_FILENAME",
+        nargs="?",
+        default="Kconfig",
+        help="Top-level Kconfig file (default: Kconfig)")
+
+    args = parser.parse_args()
+
+
+    kconf = kconfiglib.Kconfig(args.kconfig_filename)
+    kconf.load_config()
+
+    kconf.write_autoconf(args.header_path)
+
+    if args.config_out is not None:
+        kconf.write_config(args.config_out, save_old=False)
+
+    if args.sync_deps is not None:
+        kconf.sync_deps(args.sync_deps)
+
+    if args.file_list is not None:
+        with _open_write(args.file_list) as f:
+            for path in kconf.kconfig_filenames:
+                f.write(path + "\n")
+
+    if args.env_list is not None:
+        with _open_write(args.env_list) as f:
+            for env_var in kconf.env_vars:
+                f.write("{}={}\n".format(env_var, os.environ[env_var]))
+
+
+def _open_write(path):
+    # Python 2/3 compatibility. io.open() is available on both, but makes
+    # write() expect 'unicode' strings on Python 2.
+
+    if sys.version_info[0] < 3:
+        return open(path, "w")
+    return open(path, "w", encoding="utf-8")
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/guiconfig.py b/support/kconfiglib/guiconfig.py
new file mode 100755
index 0000000..050789a
--- /dev/null
+++ b/support/kconfiglib/guiconfig.py
@@ -0,0 +1,2316 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Overview
+========
+
+A Tkinter-based menuconfig implementation, based around a treeview control and
+a help display. The interface should feel familiar to people used to qconf
+('make xconfig'). Compatible with both Python 2 and Python 3.
+
+The display can be toggled between showing the full tree and showing just a
+single menu (like menuconfig.py). Only single-menu mode distinguishes between
+symbols defined with 'config' and symbols defined with 'menuconfig'.
+
+A show-all mode is available that shows invisible items in red.
+
+Supports both mouse and keyboard controls. The following keyboard shortcuts are
+available:
+
+  Ctrl-S   : Save configuration
+  Ctrl-O   : Open configuration
+  Ctrl-A   : Toggle show-all mode
+  Ctrl-N   : Toggle show-name mode
+  Ctrl-M   : Toggle single-menu mode
+  Ctrl-F, /: Open jump-to dialog
+  ESC      : Close
+
+Running
+=======
+
+guiconfig.py can be run either as a standalone executable or by calling the
+menuconfig() function with an existing Kconfig instance. The second option is a
+bit inflexible in that it will still load and save .config, etc.
+
+When run in standalone mode, the top-level Kconfig file to load can be passed
+as a command-line argument. With no argument, it defaults to "Kconfig".
+
+The KCONFIG_CONFIG environment variable specifies the .config file to load (if
+it exists) and save. If KCONFIG_CONFIG is unset, ".config" is used.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+
+$srctree is supported through Kconfiglib.
+"""
+
+# Note: There's some code duplication with menuconfig.py below, especially for
+# the help text. Maybe some of it could be moved into kconfiglib.py or a shared
+# helper script, but OTOH it's pretty nice to have things standalone and
+# customizable.
+
+import errno
+import os
+import sys
+
+_PY2 = sys.version_info[0] < 3
+
+if _PY2:
+    # Python 2
+    from Tkinter import *
+    import ttk
+    import tkFont as font
+    import tkFileDialog as filedialog
+    import tkMessageBox as messagebox
+else:
+    # Python 3
+    from tkinter import *
+    import tkinter.ttk as ttk
+    import tkinter.font as font
+    from tkinter import filedialog, messagebox
+
+from kconfiglib import Symbol, Choice, MENU, COMMENT, MenuNode, \
+                       BOOL, TRISTATE, STRING, INT, HEX, \
+                       AND, OR, \
+                       expr_str, expr_value, split_expr, \
+                       standard_sc_expr_str, \
+                       TRI_TO_STR, TYPE_TO_STR, \
+                       standard_kconfig, standard_config_filename
+
+
+# If True, use GIF image data embedded in this file instead of separate GIF
+# files. See _load_images().
+_USE_EMBEDDED_IMAGES = True
+
+
+# Help text for the jump-to dialog
+_JUMP_TO_HELP = """\
+Type one or more strings/regexes and press Enter to list items that match all
+of them. Python's regex flavor is used (see the 're' module). Double-clicking
+an item will jump to it. Item values can be toggled directly within the dialog.\
+"""
+
+
+def _main():
+    menuconfig(standard_kconfig())
+
+
+# Global variables used below:
+#
+#   _root:
+#     The Toplevel instance for the main window
+#
+#   _tree:
+#     The Treeview in the main window
+#
+#   _jump_to_tree:
+#     The Treeview in the jump-to dialog. None if the jump-to dialog isn't
+#     open. Doubles as a flag.
+#
+#   _jump_to_matches:
+#     List of Nodes shown in the jump-to dialog
+#
+#   _menupath:
+#     The Label that shows the menu path of the selected item
+#
+#   _backbutton:
+#     The button shown in single-menu mode for jumping to the parent menu
+#
+#   _status_label:
+#     Label with status text shown at the bottom of the main window
+#     ("Modified", "Saved to ...", etc.)
+#
+#   _id_to_node:
+#     We can't use Node objects directly as Treeview item IDs, so we use their
+#     id()s instead. This dictionary maps Node id()s back to Nodes. (The keys
+#     are actually str(id(node)), just to simplify lookups.)
+#
+#   _cur_menu:
+#     The current menu. Ignored outside single-menu mode.
+#
+#   _show_all_var/_show_name_var/_single_menu_var:
+#     Tkinter Variable instances bound to the corresponding checkboxes
+#
+#   _show_all/_single_menu:
+#     Plain Python bools that track _show_all_var and _single_menu_var, to
+#     speed up and simplify things a bit
+#
+#   _conf_filename:
+#     File to save the configuration to
+#
+#   _minconf_filename:
+#     File to save minimal configurations to
+#
+#   _conf_changed:
+#     True if the configuration has been changed. If False, we don't bother
+#     showing the save-and-quit dialog.
+#
+#     We reset this to False whenever the configuration is saved.
+#
+#   _*_img:
+#     PhotoImage instances for images
+
+
+def menuconfig(kconf):
+    """
+    Launches the configuration interface, returning after the user exits.
+
+    kconf:
+      Kconfig instance to be configured
+    """
+    global _kconf
+    global _conf_filename
+    global _minconf_filename
+    global _jump_to_tree
+    global _cur_menu
+
+    _kconf = kconf
+
+    _jump_to_tree = None
+
+    _create_id_to_node()
+
+    _create_ui()
+
+    # Filename to save configuration to
+    _conf_filename = standard_config_filename()
+
+    # Load existing configuration and check if it's outdated
+    _set_conf_changed(_load_config())
+
+    # Filename to save minimal configuration to
+    _minconf_filename = "defconfig"
+
+    # Current menu in single-menu mode
+    _cur_menu = _kconf.top_node
+
+    # Any visible items in the top menu?
+    if not _shown_menu_nodes(kconf.top_node):
+        # Nothing visible. Start in show-all mode and try again.
+        _show_all_var.set(True)
+        if not _shown_menu_nodes(kconf.top_node):
+            # Give up and show an error. It's nice to be able to assume that
+            # the tree is non-empty in the rest of the code.
+            _root.wait_visibility()
+            messagebox.showerror(
+                "Error",
+                "Empty configuration -- nothing to configure.\n\n"
+                "Check that environment variables are set properly.")
+            _root.destroy()
+            return
+
+    # Build the initial tree
+    _update_tree()
+
+    # Select the first item and focus the Treeview, so that keyboard controls
+    # work immediately
+    _select(_tree, _tree.get_children()[0])
+    _tree.focus_set()
+
+    # Make geometry information available for centering the window. This
+    # indirectly creates the window, so hide it so that it's never shown at the
+    # old location.
+    _root.withdraw()
+    _root.update_idletasks()
+
+    # Center the window
+    _root.geometry("+{}+{}".format(
+        (_root.winfo_screenwidth() - _root.winfo_reqwidth())//2,
+        (_root.winfo_screenheight() - _root.winfo_reqheight())//2))
+
+    # Show it
+    _root.deiconify()
+
+    # Prevent the window from being automatically resized. Otherwise, it
+    # changes size when scrollbars appear/disappear before the user has
+    # manually resized it.
+    _root.geometry(_root.geometry())
+
+    _root.mainloop()
+
+
+def _load_config():
+    # Loads any existing .config file. See the Kconfig.load_config() docstring.
+    #
+    # Returns True if .config is missing or outdated. We always prompt for
+    # saving the configuration in that case.
+
+    print(_kconf.load_config())
+    if not os.path.exists(_conf_filename):
+        # No .config
+        return True
+
+    return _needs_save()
+
+
+def _needs_save():
+    # Returns True if a just-loaded .config file is outdated (would get
+    # modified when saving)
+
+    if _kconf.missing_syms:
+        # Assignments to undefined symbols in the .config
+        return True
+
+    for sym in _kconf.unique_defined_syms:
+        if sym.user_value is None:
+            if sym.config_string:
+                # Unwritten symbol
+                return True
+        elif sym.orig_type in (BOOL, TRISTATE):
+            if sym.tri_value != sym.user_value:
+                # Written bool/tristate symbol, new value
+                return True
+        elif sym.str_value != sym.user_value:
+            # Written string/int/hex symbol, new value
+            return True
+
+    # No need to prompt for save
+    return False
+
+
+def _create_id_to_node():
+    global _id_to_node
+
+    _id_to_node = {str(id(node)): node for node in _kconf.node_iter()}
+
+
+def _create_ui():
+    # Creates the main window UI
+
+    global _root
+    global _tree
+
+    # Create the root window. This initializes Tkinter and makes e.g.
+    # PhotoImage available, so do it early.
+    _root = Tk()
+
+    _load_images()
+    _init_misc_ui()
+    _fix_treeview_issues()
+
+    _create_top_widgets()
+    # Create the pane with the Kconfig tree and description text
+    panedwindow, _tree = _create_kconfig_tree_and_desc(_root)
+    panedwindow.grid(column=0, row=1, sticky="nsew")
+    _create_status_bar()
+
+    _root.columnconfigure(0, weight=1)
+    # Only the pane with the Kconfig tree and description grows vertically
+    _root.rowconfigure(1, weight=1)
+
+    # Start with show-name disabled
+    _do_showname()
+
+    _tree.bind("<Left>", _tree_left_key)
+    _tree.bind("<Right>", _tree_right_key)
+    # Note: Binding this for the jump-to tree as well would cause issues due to
+    # the Tk bug mentioned in _tree_open()
+    _tree.bind("<<TreeviewOpen>>", _tree_open)
+    # add=True to avoid overriding the description text update
+    _tree.bind("<<TreeviewSelect>>", _update_menu_path, add=True)
+
+    _root.bind("<Control-s>", _save)
+    _root.bind("<Control-o>", _open)
+    _root.bind("<Control-a>", _toggle_showall)
+    _root.bind("<Control-n>", _toggle_showname)
+    _root.bind("<Control-m>", _toggle_tree_mode)
+    _root.bind("<Control-f>", _jump_to_dialog)
+    _root.bind("/", _jump_to_dialog)
+    _root.bind("<Escape>", _on_quit)
+
+
+def _load_images():
+    # Loads GIF images, creating the global _*_img PhotoImage variables.
+    # Base64-encoded images embedded in this script are used if
+    # _USE_EMBEDDED_IMAGES is True, and separate image files in the same
+    # directory as the script otherwise.
+    #
+    # Using a global variable indirectly prevents the image from being
+    # garbage-collected. Passing an image to a Tkinter function isn't enough to
+    # keep it alive.
+
+    def load_image(name, data):
+        var_name = "_{}_img".format(name)
+
+        if _USE_EMBEDDED_IMAGES:
+            globals()[var_name] = PhotoImage(data=data, format="gif")
+        else:
+            globals()[var_name] = PhotoImage(
+                file=os.path.join(os.path.dirname(__file__), name + ".gif"),
+                format="gif")
+
+    # Note: Base64 data can be put on the clipboard with
+    #   $ base64 -w0 foo.gif | xclip
+
+    load_image("icon", "R0lGODlhMAAwAPEDAAAAAADQAO7u7v///yH5BAUKAAMALAAAAAAwADAAAAL/nI+gy+2Pokyv2jazuZxryQjiSJZmyXxHeLbumH6sEATvW8OLNtf5bfLZRLFITzgEipDJ4mYxYv6A0ubuqYhWk66tVTE4enHer7jcKvt0LLUw6P45lvEprT6c0+v7OBuqhYdHohcoqIbSAHc4ljhDwrh1UlgSydRCWWlp5wiYZvmSuSh4IzrqV6p4cwhkCsmY+nhK6uJ6t1mrOhuJqfu6+WYiCiwl7HtLjNSZZZis/MeM7NY3TaRKS40ooDeoiVqIultsrav92bi9c3a5KkkOsOJZpSS99m4k/0zPng4Gks9JSbB+8DIcoQfnjwpZCHv5W+ip4aQrKrB0uOikYhiMCBw1/uPoQUMBADs=")
+    load_image("n_bool", "R0lGODdhEAAQAPAAAAgICP///ywAAAAAEAAQAAACIISPacHtvp5kcb5qG85hZ2+BkyiRF8BBaEqtrKkqslEAADs=")
+    load_image("y_bool", "R0lGODdhEAAQAPEAAAgICADQAP///wAAACwAAAAAEAAQAAACMoSPacLtvlh4YrIYsst2cV19AvaVF9CUXBNJJoum7ymrsKuCnhiupIWjSSjAFuWhSCIKADs=")
+    load_image("n_tri", "R0lGODlhEAAQAPD/AAEBAf///yH5BAUKAAIALAAAAAAQABAAAAInlI+pBrAKQnCPSUlXvFhznlkfeGwjKZhnJ65h6nrfi6h0st2QXikFADs=")
+    load_image("m_tri", "R0lGODlhEAAQAPEDAAEBAeQMuv///wAAACH5BAUKAAMALAAAAAAQABAAAAI5nI+pBrAWAhPCjYhiAJQCnWmdoElHGVBoiK5M21ofXFpXRIrgiecqxkuNciZIhNOZFRNI24PhfEoLADs=")
+    load_image("y_tri", "R0lGODlhEAAQAPEDAAICAgDQAP///wAAACH5BAUKAAMALAAAAAAQABAAAAI0nI+pBrAYBhDCRRUypfmergmgZ4xjMpmaw2zmxk7cCB+pWiVqp4MzDwn9FhGZ5WFjIZeGAgA7")
+    load_image("m_my", "R0lGODlhEAAQAPEDAAAAAOQMuv///wAAACH5BAUKAAMALAAAAAAQABAAAAI5nIGpxiAPI2ghxFinq/ZygQhc94zgZopmOLYf67anGr+oZdp02emfV5n9MEHN5QhqICETxkABbQ4KADs=")
+    load_image("y_my", "R0lGODlhEAAQAPH/AAAAAADQAAPRA////yH5BAUKAAQALAAAAAAQABAAAAM+SArcrhCMSSuIM9Q8rxxBWIXawIBkmWonupLd565Um9G1PIs59fKmzw8WnAlusBYR2SEIN6DmAmqBLBxYSAIAOw==")
+    load_image("n_locked", "R0lGODlhEAAQAPABAAAAAP///yH5BAUKAAEALAAAAAAQABAAAAIgjB8AyKwN04pu0vMutpqqz4Hih4ydlnUpyl2r23pxUAAAOw==")
+    load_image("m_locked", "R0lGODlhEAAQAPD/AAAAAOQMuiH5BAUKAAIALAAAAAAQABAAAAIylC8AyKwN04ohnGcqqlZmfXDWI26iInZoyiore05walolV39ftxsYHgL9QBBMBGFEFAAAOw==")
+    load_image("y_locked", "R0lGODlhEAAQAPD/AAAAAADQACH5BAUKAAIALAAAAAAQABAAAAIylC8AyKzNgnlCtoDTwvZwrHydIYpQmR3KWq4uK74IOnp0HQPmnD3cOVlUIAgKsShkFAAAOw==")
+    load_image("not_selected", "R0lGODlhEAAQAPD/AAAAAP///yH5BAUKAAIALAAAAAAQABAAAAIrlA2px6IBw2IpWglOvTYhzmUbGD3kNZ5QqrKn2YrqigCxZoMelU6No9gdCgA7")
+    load_image("selected", "R0lGODlhEAAQAPD/AAAAAP///yH5BAUKAAIALAAAAAAQABAAAAIzlA2px6IBw2IpWglOvTah/kTZhimASJomiqonlLov1qptHTsgKSEzh9H8QI0QzNPwmRoFADs=")
+    load_image("edit", "R0lGODlhEAAQAPIFAAAAAKOLAMuuEPvXCvrxvgAAAAAAAAAAACH5BAUKAAUALAAAAAAQABAAAANCWLqw/gqMBp8cszJxcwVC2FEOEIAi5kVBi3IqWZhuCGMyfdpj2e4pnK+WAshmvxeAcETWlsxPkkBtsqBMa8TIBSQAADs=")
+
+
+def _fix_treeview_issues():
+    # Fixes some Treeview issues
+
+    global _treeview_rowheight
+
+    style = ttk.Style()
+
+    # The treeview rowheight isn't adjusted automatically on high-DPI displays,
+    # so do it ourselves. The font will probably always be TkDefaultFont, but
+    # play it safe and look it up.
+
+    _treeview_rowheight = font.Font(font=style.lookup("Treeview", "font")) \
+        .metrics("linespace") + 2
+
+    style.configure("Treeview", rowheight=_treeview_rowheight)
+
+    # Work around regression in https://core.tcl.tk/tk/tktview?name=509cafafae,
+    # which breaks tag background colors
+
+    for option in "foreground", "background":
+        # Filter out any styles starting with ("!disabled", "!selected", ...).
+        # style.map() returns an empty list for missing options, so this should
+        # be future-safe.
+        style.map(
+            "Treeview",
+            **{option: [elm for elm in style.map("Treeview", query_opt=option)
+                        if elm[:2] != ("!disabled", "!selected")]})
+
+
+def _init_misc_ui():
+    # Does misc. UI initialization, like setting the title, icon, and theme
+
+    _root.title(_kconf.mainmenu_text)
+    # iconphoto() isn't available in Python 2's Tkinter
+    _root.tk.call("wm", "iconphoto", _root._w, "-default", _icon_img)
+    # Reducing the width of the window to 1 pixel makes it move around, at
+    # least on GNOME. Prevent weird stuff like that.
+    _root.minsize(128, 128)
+    _root.protocol("WM_DELETE_WINDOW", _on_quit)
+
+    # Use the 'clam' theme on *nix if it's available. It looks nicer than the
+    # 'default' theme.
+    if _root.tk.call("tk", "windowingsystem") == "x11":
+        style = ttk.Style()
+        if "clam" in style.theme_names():
+            style.theme_use("clam")
+
+
+def _create_top_widgets():
+    # Creates the controls above the Kconfig tree in the main window
+
+    global _show_all_var
+    global _show_name_var
+    global _single_menu_var
+    global _menupath
+    global _backbutton
+
+    topframe = ttk.Frame(_root)
+    topframe.grid(column=0, row=0, sticky="ew")
+
+    ttk.Button(topframe, text="Save", command=_save) \
+        .grid(column=0, row=0, sticky="ew", padx=".05c", pady=".05c")
+
+    ttk.Button(topframe, text="Save as...", command=_save_as) \
+        .grid(column=1, row=0, sticky="ew")
+
+    ttk.Button(topframe, text="Save minimal (advanced)...",
+               command=_save_minimal) \
+        .grid(column=2, row=0, sticky="ew", padx=".05c")
+
+    ttk.Button(topframe, text="Open...", command=_open) \
+        .grid(column=3, row=0)
+
+    ttk.Button(topframe, text="Jump to...", command=_jump_to_dialog) \
+        .grid(column=4, row=0, padx=".05c")
+
+    _show_name_var = BooleanVar()
+    ttk.Checkbutton(topframe, text="Show name", command=_do_showname,
+                    variable=_show_name_var) \
+        .grid(column=0, row=1, sticky="nsew", padx=".05c", pady="0 .05c",
+              ipady=".2c")
+
+    _show_all_var = BooleanVar()
+    ttk.Checkbutton(topframe, text="Show all", command=_do_showall,
+                    variable=_show_all_var) \
+        .grid(column=1, row=1, sticky="nsew", pady="0 .05c")
+
+    # Allow the show-all and single-menu status to be queried via plain global
+    # Python variables, which is faster and simpler
+
+    def show_all_updated(*_):
+        global _show_all
+        _show_all = _show_all_var.get()
+
+    _trace_write(_show_all_var, show_all_updated)
+    _show_all_var.set(False)
+
+    _single_menu_var = BooleanVar()
+    ttk.Checkbutton(topframe, text="Single-menu mode", command=_do_tree_mode,
+                    variable=_single_menu_var) \
+        .grid(column=2, row=1, sticky="nsew", padx=".05c", pady="0 .05c")
+
+    _backbutton = ttk.Button(topframe, text="<--", command=_leave_menu,
+                             state="disabled")
+    _backbutton.grid(column=0, row=4, sticky="nsew", padx=".05c", pady="0 .05c")
+
+    def tree_mode_updated(*_):
+        global _single_menu
+        _single_menu = _single_menu_var.get()
+
+        if _single_menu:
+            _backbutton.grid()
+        else:
+            _backbutton.grid_remove()
+
+    _trace_write(_single_menu_var, tree_mode_updated)
+    _single_menu_var.set(False)
+
+    # Column to the right of the buttons that the menu path extends into, so
+    # that it can grow wider than the buttons
+    topframe.columnconfigure(5, weight=1)
+
+    _menupath = ttk.Label(topframe)
+    _menupath.grid(column=0, row=3, columnspan=6, sticky="w", padx="0.05c",
+                   pady="0 .05c")
+
+
+def _create_kconfig_tree_and_desc(parent):
+    # Creates a Panedwindow with a Treeview that shows Kconfig nodes and a Text
+    # that shows a description of the selected node. Returns a tuple with the
+    # Panedwindow and the Treeview. This code is shared between the main window
+    # and the jump-to dialog.
+
+    panedwindow = ttk.Panedwindow(parent, orient=VERTICAL)
+
+    tree_frame, tree = _create_kconfig_tree(panedwindow)
+    desc_frame, desc = _create_kconfig_desc(panedwindow)
+
+    panedwindow.add(tree_frame, weight=1)
+    panedwindow.add(desc_frame)
+
+    def tree_select(_):
+        # The Text widget does not allow editing the text in its disabled
+        # state. We need to temporarily enable it.
+        desc["state"] = "normal"
+
+        sel = tree.selection()
+        if not sel:
+            desc.delete("1.0", "end")
+            desc["state"] = "disabled"
+            return
+
+        # Text.replace() is not available in Python 2's Tkinter
+        desc.delete("1.0", "end")
+        desc.insert("end", _info_str(_id_to_node[sel[0]]))
+
+        desc["state"] = "disabled"
+
+    tree.bind("<<TreeviewSelect>>", tree_select)
+    tree.bind("<1>", _tree_click)
+    tree.bind("<Double-1>", _tree_double_click)
+    tree.bind("<Return>", _tree_enter)
+    tree.bind("<KP_Enter>", _tree_enter)
+    tree.bind("<space>", _tree_toggle)
+    tree.bind("n", _tree_set_val(0))
+    tree.bind("m", _tree_set_val(1))
+    tree.bind("y", _tree_set_val(2))
+
+    return panedwindow, tree
+
+
+def _create_kconfig_tree(parent):
+    # Creates a Treeview for showing Kconfig nodes
+
+    frame = ttk.Frame(parent)
+
+    tree = ttk.Treeview(frame, selectmode="browse", height=20,
+                        columns=("name",))
+    tree.heading("#0", text="Option", anchor="w")
+    tree.heading("name", text="Name", anchor="w")
+
+    tree.tag_configure("n-bool", image=_n_bool_img)
+    tree.tag_configure("y-bool", image=_y_bool_img)
+    tree.tag_configure("m-tri", image=_m_tri_img)
+    tree.tag_configure("n-tri", image=_n_tri_img)
+    tree.tag_configure("m-tri", image=_m_tri_img)
+    tree.tag_configure("y-tri", image=_y_tri_img)
+    tree.tag_configure("m-my", image=_m_my_img)
+    tree.tag_configure("y-my", image=_y_my_img)
+    tree.tag_configure("n-locked", image=_n_locked_img)
+    tree.tag_configure("m-locked", image=_m_locked_img)
+    tree.tag_configure("y-locked", image=_y_locked_img)
+    tree.tag_configure("not-selected", image=_not_selected_img)
+    tree.tag_configure("selected", image=_selected_img)
+    tree.tag_configure("edit", image=_edit_img)
+    tree.tag_configure("invisible", foreground="red")
+
+    tree.grid(column=0, row=0, sticky="nsew")
+
+    _add_vscrollbar(frame, tree)
+
+    frame.columnconfigure(0, weight=1)
+    frame.rowconfigure(0, weight=1)
+
+    # Create items for all menu nodes. These can be detached/moved later.
+    # Micro-optimize this a bit.
+    insert = tree.insert
+    id_ = id
+    Symbol_ = Symbol
+    for node in _kconf.node_iter():
+        item = node.item
+        insert("", "end", iid=id_(node),
+               values=item.name if item.__class__ is Symbol_ else "")
+
+    return frame, tree
+
+
+def _create_kconfig_desc(parent):
+    # Creates a Text for showing the description of the selected Kconfig node
+
+    frame = ttk.Frame(parent)
+
+    desc = Text(frame, height=12, wrap="none", borderwidth=0,
+                state="disabled")
+    desc.grid(column=0, row=0, sticky="nsew")
+
+    # Work around not being to Ctrl-C/V text from a disabled Text widget, with a
+    # tip found in https://stackoverflow.com/questions/3842155/is-there-a-way-to-make-the-tkinter-text-widget-read-only
+    desc.bind("<1>", lambda _: desc.focus_set())
+
+    _add_vscrollbar(frame, desc)
+
+    frame.columnconfigure(0, weight=1)
+    frame.rowconfigure(0, weight=1)
+
+    return frame, desc
+
+
+def _add_vscrollbar(parent, widget):
+    # Adds a vertical scrollbar to 'widget' that's only shown as needed
+
+    vscrollbar = ttk.Scrollbar(parent, orient="vertical",
+                               command=widget.yview)
+    vscrollbar.grid(column=1, row=0, sticky="ns")
+
+    def yscrollcommand(first, last):
+        # Only show the scrollbar when needed. 'first' and 'last' are
+        # strings.
+        if float(first) <= 0.0 and float(last) >= 1.0:
+            vscrollbar.grid_remove()
+        else:
+            vscrollbar.grid()
+
+        vscrollbar.set(first, last)
+
+    widget["yscrollcommand"] = yscrollcommand
+
+
+def _create_status_bar():
+    # Creates the status bar at the bottom of the main window
+
+    global _status_label
+
+    _status_label = ttk.Label(_root, anchor="e", padding="0 0 0.4c 0")
+    _status_label.grid(column=0, row=3, sticky="ew")
+
+
+def _set_status(s):
+    # Sets the text in the status bar to 's'
+
+    _status_label["text"] = s
+
+
+def _set_conf_changed(changed):
+    # Updates the status re. whether there are unsaved changes
+
+    global _conf_changed
+
+    _conf_changed = changed
+    if changed:
+        _set_status("Modified")
+
+
+def _update_tree():
+    # Updates the Kconfig tree in the main window by first detaching all nodes
+    # and then updating and reattaching them. The tree structure might have
+    # changed.
+
+    # If a selected/focused item is detached and later reattached, it stays
+    # selected/focused. That can give multiple selections even though
+    # selectmode=browse. Save and later restore the selection and focus as a
+    # workaround.
+    old_selection = _tree.selection()
+    old_focus = _tree.focus()
+
+    # Detach all tree items before re-stringing them. This is relatively fast,
+    # luckily.
+    _tree.detach(*_id_to_node.keys())
+
+    if _single_menu:
+        _build_menu_tree()
+    else:
+        _build_full_tree(_kconf.top_node)
+
+    _tree.selection_set(old_selection)
+    _tree.focus(old_focus)
+
+
+def _build_full_tree(menu):
+    # Updates the tree starting from menu.list, in full-tree mode. To speed
+    # things up, only open menus are updated. The menu-at-a-time logic here is
+    # to deal with invisible items that can show up outside show-all mode (see
+    # _shown_full_nodes()).
+
+    for node in _shown_full_nodes(menu):
+        _add_to_tree(node, _kconf.top_node)
+
+        # _shown_full_nodes() includes nodes from menus rooted at symbols, so
+        # we only need to check "real" menus/choices here
+        if node.list and not isinstance(node.item, Symbol):
+            if _tree.item(id(node), "open"):
+                _build_full_tree(node)
+            else:
+                # We're just probing here, so _shown_menu_nodes() will work
+                # fine, and might be a bit faster
+                shown = _shown_menu_nodes(node)
+                if shown:
+                    # Dummy element to make the open/closed toggle appear
+                    _tree.move(id(shown[0]), id(shown[0].parent), "end")
+
+
+def _shown_full_nodes(menu):
+    # Returns the list of menu nodes shown in 'menu' (a menu node for a menu)
+    # for full-tree mode. A tricky detail is that invisible items need to be
+    # shown if they have visible children.
+
+    def rec(node):
+        res = []
+
+        while node:
+            if _visible(node) or _show_all:
+                res.append(node)
+                if node.list and isinstance(node.item, Symbol):
+                    # Nodes from menu created from dependencies
+                    res += rec(node.list)
+
+            elif node.list and isinstance(node.item, Symbol):
+                # Show invisible symbols (defined with either 'config' and
+                # 'menuconfig') if they have visible children. This can happen
+                # for an m/y-valued symbol with an optional prompt
+                # ('prompt "foo" is COND') that is currently disabled.
+                shown_children = rec(node.list)
+                if shown_children:
+                    res.append(node)
+                    res += shown_children
+
+            node = node.next
+
+        return res
+
+    return rec(menu.list)
+
+
+def _build_menu_tree():
+    # Updates the tree in single-menu mode. See _build_full_tree() as well.
+
+    for node in _shown_menu_nodes(_cur_menu):
+        _add_to_tree(node, _cur_menu)
+
+
+def _shown_menu_nodes(menu):
+    # Used for single-menu mode. Similar to _shown_full_nodes(), but doesn't
+    # include children of symbols defined with 'menuconfig'.
+
+    def rec(node):
+        res = []
+
+        while node:
+            if _visible(node) or _show_all:
+                res.append(node)
+                if node.list and not node.is_menuconfig:
+                    res += rec(node.list)
+
+            elif node.list and isinstance(node.item, Symbol):
+                shown_children = rec(node.list)
+                if shown_children:
+                    # Invisible item with visible children
+                    res.append(node)
+                    if not node.is_menuconfig:
+                        res += shown_children
+
+            node = node.next
+
+        return res
+
+    return rec(menu.list)
+
+
+def _visible(node):
+    # Returns True if the node should appear in the menu (outside show-all
+    # mode)
+
+    return node.prompt and expr_value(node.prompt[1]) and not \
+        (node.item == MENU and not expr_value(node.visibility))
+
+
+def _add_to_tree(node, top):
+    # Adds 'node' to the tree, at the end of its menu. We rely on going through
+    # the nodes linearly to get the correct order. 'top' holds the menu that
+    # corresponds to the top-level menu, and can vary in single-menu mode.
+
+    parent = node.parent
+    _tree.move(id(node), "" if parent is top else id(parent), "end")
+    _tree.item(
+        id(node),
+        text=_node_str(node),
+        # The _show_all test avoids showing invisible items in red outside
+        # show-all mode, which could look confusing/broken. Invisible symbols
+        # are shown outside show-all mode if an invisible symbol has visible
+        # children in an implicit menu.
+        tags=_img_tag(node) if _visible(node) or not _show_all else
+            _img_tag(node) + " invisible")
+
+
+def _node_str(node):
+    # Returns the string shown to the right of the image (if any) for the node
+
+    if node.prompt:
+        if node.item == COMMENT:
+            s = "*** {} ***".format(node.prompt[0])
+        else:
+            s = node.prompt[0]
+
+        if isinstance(node.item, Symbol):
+            sym = node.item
+
+            # Print "(NEW)" next to symbols without a user value (from e.g. a
+            # .config), but skip it for choice symbols in choices in y mode,
+            # and for symbols of UNKNOWN type (which generate a warning though)
+            if sym.user_value is None and sym.type and not \
+                (sym.choice and sym.choice.tri_value == 2):
+
+                s += " (NEW)"
+
+    elif isinstance(node.item, Symbol):
+        # Symbol without prompt (can show up in show-all)
+        s = "<{}>".format(node.item.name)
+
+    else:
+        # Choice without prompt. Use standard_sc_expr_str() so that it shows up
+        # as '<choice (name if any)>'.
+        s = standard_sc_expr_str(node.item)
+
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+        if sym.orig_type == STRING:
+            s += ": " + sym.str_value
+        elif sym.orig_type in (INT, HEX):
+            s = "({}) {}".format(sym.str_value, s)
+
+    elif isinstance(node.item, Choice) and node.item.tri_value == 2:
+        # Print the prompt of the selected symbol after the choice for
+        # choices in y mode
+        sym = node.item.selection
+        if sym:
+            for sym_node in sym.nodes:
+                # Use the prompt used at this choice location, in case the
+                # choice symbol is defined in multiple locations
+                if sym_node.parent is node and sym_node.prompt:
+                    s += " ({})".format(sym_node.prompt[0])
+                    break
+            else:
+                # If the symbol isn't defined at this choice location, then
+                # just use whatever prompt we can find for it
+                for sym_node in sym.nodes:
+                    if sym_node.prompt:
+                        s += " ({})".format(sym_node.prompt[0])
+                        break
+
+    # In single-menu mode, print "--->" next to nodes that have menus that can
+    # potentially be entered. Print "----" if the menu is empty. We don't allow
+    # those to be entered.
+    if _single_menu and node.is_menuconfig:
+        s += "  --->" if _shown_menu_nodes(node) else "  ----"
+
+    return s
+
+
+def _img_tag(node):
+    # Returns the tag for the image that should be shown next to 'node', or the
+    # empty string if it shouldn't have an image
+
+    item = node.item
+
+    if item in (MENU, COMMENT) or not item.orig_type:
+        return ""
+
+    if item.orig_type in (STRING, INT, HEX):
+        return "edit"
+
+    # BOOL or TRISTATE
+
+    if _is_y_mode_choice_sym(item):
+        # Choice symbol in y-mode choice
+        return "selected" if item.choice.selection is item else "not-selected"
+
+    if len(item.assignable) <= 1:
+        # Pinned to a single value
+        return "" if isinstance(item, Choice) else item.str_value + "-locked"
+
+    if item.type == BOOL:
+        return item.str_value + "-bool"
+
+    # item.type == TRISTATE
+    if item.assignable == (1, 2):
+        return item.str_value + "-my"
+    return item.str_value + "-tri"
+
+
+def _is_y_mode_choice_sym(item):
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    return isinstance(item, Symbol) and item.choice and item.visibility == 2
+
+
+def _tree_click(event):
+    # Click on the Kconfig Treeview
+
+    tree = event.widget
+    if tree.identify_element(event.x, event.y) == "image":
+        item = tree.identify_row(event.y)
+        # Select the item before possibly popping up a dialog for
+        # string/int/hex items, so that its help is visible
+        _select(tree, item)
+        _change_node(_id_to_node[item], tree.winfo_toplevel())
+        return "break"
+
+
+def _tree_double_click(event):
+    # Double-click on the Kconfig treeview
+
+    # Do an extra check to avoid weirdness when double-clicking in the tree
+    # heading area
+    if not _in_heading(event):
+        return _tree_enter(event)
+
+
+def _in_heading(event):
+    # Returns True if 'event' took place in the tree heading
+
+    tree = event.widget
+    return hasattr(tree, "identify_region") and \
+        tree.identify_region(event.x, event.y) in ("heading", "separator")
+
+
+def _tree_enter(event):
+    # Enter press or double-click within the Kconfig treeview. Prefer to
+    # open/close/enter menus, but toggle the value if that's not possible.
+
+    tree = event.widget
+    sel = tree.focus()
+    if sel:
+        node = _id_to_node[sel]
+
+        if tree.get_children(sel):
+            _tree_toggle_open(sel)
+        elif _single_menu_mode_menu(node, tree):
+            _enter_menu_and_select_first(node)
+        else:
+            _change_node(node, tree.winfo_toplevel())
+
+        return "break"
+
+
+def _tree_toggle(event):
+    # Space press within the Kconfig treeview. Prefer to toggle the value, but
+    # open/close/enter the menu if that's not possible.
+
+    tree = event.widget
+    sel = tree.focus()
+    if sel:
+        node = _id_to_node[sel]
+
+        if _changeable(node):
+            _change_node(node, tree.winfo_toplevel())
+        elif _single_menu_mode_menu(node, tree):
+            _enter_menu_and_select_first(node)
+        elif tree.get_children(sel):
+            _tree_toggle_open(sel)
+
+        return "break"
+
+
+def _tree_left_key(_):
+    # Left arrow key press within the Kconfig treeview
+
+    if _single_menu:
+        # Leave the current menu in single-menu mode
+        _leave_menu()
+        return "break"
+
+    # Otherwise, default action
+
+
+def _tree_right_key(_):
+    # Right arrow key press within the Kconfig treeview
+
+    sel = _tree.focus()
+    if sel:
+        node = _id_to_node[sel]
+        # If the node can be entered in single-menu mode, do it
+        if _single_menu_mode_menu(node, _tree):
+            _enter_menu_and_select_first(node)
+            return "break"
+
+    # Otherwise, default action
+
+
+def _single_menu_mode_menu(node, tree):
+    # Returns True if single-menu mode is on and 'node' is an (interface)
+    # menu that can be entered
+
+    return _single_menu and tree is _tree and node.is_menuconfig and \
+           _shown_menu_nodes(node)
+
+
+def _changeable(node):
+    # Returns True if 'node' is a Symbol/Choice whose value can be changed
+
+    sc = node.item
+
+    if not isinstance(sc, (Symbol, Choice)):
+        return False
+
+    # This will hit for invisible symbols, which appear in show-all mode and
+    # when an invisible symbol has visible children (which can happen e.g. for
+    # symbols with optional prompts)
+    if not (node.prompt and expr_value(node.prompt[1])):
+        return False
+
+    return sc.orig_type in (STRING, INT, HEX) or len(sc.assignable) > 1 \
+           or _is_y_mode_choice_sym(sc)
+
+
+def _tree_toggle_open(item):
+    # Opens/closes the Treeview item 'item'
+
+    if _tree.item(item, "open"):
+        _tree.item(item, open=False)
+    else:
+        node = _id_to_node[item]
+        if not isinstance(node.item, Symbol):
+            # Can only get here in full-tree mode
+            _build_full_tree(node)
+        _tree.item(item, open=True)
+
+
+def _tree_set_val(tri_val):
+    def tree_set_val(event):
+        # n/m/y press within the Kconfig treeview
+
+        # Sets the value of the currently selected item to 'tri_val', if that
+        # value can be assigned
+
+        sel = event.widget.focus()
+        if sel:
+            sc = _id_to_node[sel].item
+            if isinstance(sc, (Symbol, Choice)) and tri_val in sc.assignable:
+                _set_val(sc, tri_val)
+
+    return tree_set_val
+
+
+def _tree_open(_):
+    # Lazily populates the Kconfig tree when menus are opened in full-tree mode
+
+    if _single_menu:
+        # Work around https://core.tcl.tk/tk/tktview?name=368fa4561e
+        # ("ttk::treeview open/closed indicators can be toggled while hidden").
+        # Clicking on the hidden indicator will call _build_full_tree() in
+        # single-menu mode otherwise.
+        return
+
+    node = _id_to_node[_tree.focus()]
+    # _shown_full_nodes() includes nodes from menus rooted at symbols, so we
+    # only need to check "real" menus and choices here
+    if not isinstance(node.item, Symbol):
+        _build_full_tree(node)
+
+
+def _update_menu_path(_):
+    # Updates the displayed menu path when nodes are selected in the Kconfig
+    # treeview
+
+    sel = _tree.selection()
+    _menupath["text"] = _menu_path_info(_id_to_node[sel[0]]) if sel else ""
+
+
+def _item_row(item):
+    # Returns the row number 'item' appears on within the Kconfig treeview,
+    # starting from the top of the tree. Used to preserve scrolling.
+    #
+    # ttkTreeview.c in the Tk sources defines a RowNumber() function that does
+    # the same thing, but it's not exposed.
+
+    row = 0
+
+    while True:
+        prev = _tree.prev(item)
+        if prev:
+            item = prev
+            row += _n_rows(item)
+        else:
+            item = _tree.parent(item)
+            if not item:
+                return row
+            row += 1
+
+
+def _n_rows(item):
+    # _item_row() helper. Returns the number of rows occupied by 'item' and #
+    # its children.
+
+    rows = 1
+
+    if _tree.item(item, "open"):
+        for child in _tree.get_children(item):
+            rows += _n_rows(child)
+
+    return rows
+
+
+def _attached(item):
+    # Heuristic for checking if a Treeview item is attached. Doesn't seem to be
+    # good APIs for this. Might fail for super-obscure cases with tiny trees,
+    # but you'd just get a small scroll mess-up.
+
+    return bool(_tree.next(item) or _tree.prev(item) or _tree.parent(item))
+
+
+def _change_node(node, parent):
+    # Toggles/changes the value of 'node'. 'parent' is the parent window
+    # (either the main window or the jump-to dialog), in case we need to pop up
+    # a dialog.
+
+    if not _changeable(node):
+        return
+
+    # sc = symbol/choice
+    sc = node.item
+
+    if sc.type in (INT, HEX, STRING):
+        s = _set_val_dialog(node, parent)
+
+        # Tkinter can return 'unicode' strings on Python 2, which Kconfiglib
+        # can't deal with. UTF-8-encode the string to work around it.
+        if _PY2 and isinstance(s, unicode):
+            s = s.encode("utf-8", "ignore")
+
+        if s is not None:
+            _set_val(sc, s)
+
+    elif len(sc.assignable) == 1:
+        # Handles choice symbols for choices in y mode, which are a special
+        # case: .assignable can be (2,) while .tri_value is 0.
+        _set_val(sc, sc.assignable[0])
+
+    else:
+        # Set the symbol to the value after the current value in
+        # sc.assignable, with wrapping
+        val_index = sc.assignable.index(sc.tri_value)
+        _set_val(sc, sc.assignable[(val_index + 1) % len(sc.assignable)])
+
+
+def _set_val(sc, val):
+    # Wrapper around Symbol/Choice.set_value() for updating the menu state and
+    # _conf_changed
+
+    # Use the string representation of tristate values. This makes the format
+    # consistent for all symbol types.
+    if val in TRI_TO_STR:
+        val = TRI_TO_STR[val]
+
+    if val != sc.str_value:
+        sc.set_value(val)
+        _set_conf_changed(True)
+
+        # Update the tree and try to preserve the scroll. Do a cheaper variant
+        # than in the show-all case, that might mess up the scroll slightly in
+        # rare cases, but is fast and flicker-free.
+
+        stayput = _loc_ref_item()  # Item to preserve scroll for
+        old_row = _item_row(stayput)
+
+        _update_tree()
+
+        # If the reference item disappeared (can happen if the change was done
+        # from the jump-to dialog), then avoid messing with the scroll and hope
+        # for the best
+        if _attached(stayput):
+            _tree.yview_scroll(_item_row(stayput) - old_row, "units")
+
+        if _jump_to_tree:
+            _update_jump_to_display()
+
+
+def _set_val_dialog(node, parent):
+    # Pops up a dialog for setting the value of the string/int/hex
+    # symbol at node 'node'. 'parent' is the parent window.
+
+    def ok(_=None):
+        # No 'nonlocal' in Python 2
+        global _entry_res
+
+        s = entry.get()
+        if sym.type == HEX and not s.startswith(("0x", "0X")):
+            s = "0x" + s
+
+        if _check_valid(dialog, entry, sym, s):
+            _entry_res = s
+            dialog.destroy()
+
+    def cancel(_=None):
+        global _entry_res
+        _entry_res = None
+        dialog.destroy()
+
+    sym = node.item
+
+    dialog = Toplevel(parent)
+    dialog.title("Enter {} value".format(TYPE_TO_STR[sym.type]))
+    dialog.resizable(False, False)
+    dialog.transient(parent)
+    dialog.protocol("WM_DELETE_WINDOW", cancel)
+
+    ttk.Label(dialog, text=node.prompt[0] + ":") \
+        .grid(column=0, row=0, columnspan=2, sticky="w", padx=".3c",
+              pady=".2c .05c")
+
+    entry = ttk.Entry(dialog, width=30)
+    # Start with the previous value in the editbox, selected
+    entry.insert(0, sym.str_value)
+    entry.selection_range(0, "end")
+    entry.grid(column=0, row=1, columnspan=2, sticky="ew", padx=".3c")
+    entry.focus_set()
+
+    range_info = _range_info(sym)
+    if range_info:
+        ttk.Label(dialog, text=range_info) \
+            .grid(column=0, row=2, columnspan=2, sticky="w", padx=".3c",
+                  pady=".2c 0")
+
+    ttk.Button(dialog, text="OK", command=ok) \
+        .grid(column=0, row=4 if range_info else 3, sticky="e", padx=".3c",
+              pady=".4c")
+
+    ttk.Button(dialog, text="Cancel", command=cancel) \
+        .grid(column=1, row=4 if range_info else 3, padx="0 .3c")
+
+    # Give all horizontal space to the grid cell with the OK button, so that
+    # Cancel moves to the right
+    dialog.columnconfigure(0, weight=1)
+
+    _center_on_root(dialog)
+
+    # Hack to scroll the entry so that the end of the text is shown, from
+    # https://stackoverflow.com/questions/29334544/why-does-tkinters-entry-xview-moveto-fail.
+    # Related Tk ticket: https://core.tcl.tk/tk/info/2513186fff
+    def scroll_entry(_):
+        _root.update_idletasks()
+        entry.unbind("<Expose>")
+        entry.xview_moveto(1)
+    entry.bind("<Expose>", scroll_entry)
+
+    # The dialog must be visible before we can grab the input
+    dialog.wait_visibility()
+    dialog.grab_set()
+
+    dialog.bind("<Return>", ok)
+    dialog.bind("<KP_Enter>", ok)
+    dialog.bind("<Escape>", cancel)
+
+    # Wait for the user to be done with the dialog
+    parent.wait_window(dialog)
+
+    # Regrab the input in the parent
+    parent.grab_set()
+
+    return _entry_res
+
+
+def _center_on_root(dialog):
+    # Centers 'dialog' on the root window. It often ends up at some bad place
+    # like the top-left corner of the screen otherwise. See the menuconfig()
+    # function, which has similar logic.
+
+    dialog.withdraw()
+    _root.update_idletasks()
+
+    dialog_width = dialog.winfo_reqwidth()
+    dialog_height = dialog.winfo_reqheight()
+
+    screen_width = _root.winfo_screenwidth()
+    screen_height = _root.winfo_screenheight()
+
+    x = _root.winfo_rootx() + (_root.winfo_width() - dialog_width)//2
+    y = _root.winfo_rooty() + (_root.winfo_height() - dialog_height)//2
+
+    # Clamp so that no part of the dialog is outside the screen
+    if x + dialog_width > screen_width:
+        x = screen_width - dialog_width
+    elif x < 0:
+        x = 0
+    if y + dialog_height > screen_height:
+        y = screen_height - dialog_height
+    elif y < 0:
+        y = 0
+
+    dialog.geometry("+{}+{}".format(x, y))
+
+    dialog.deiconify()
+
+
+def _check_valid(dialog, entry, sym, s):
+    # Returns True if the string 's' is a well-formed value for 'sym'.
+    # Otherwise, pops up an error and returns False.
+
+    if sym.type not in (INT, HEX):
+        # Anything goes for non-int/hex symbols
+        return True
+
+    base = 10 if sym.type == INT else 16
+    try:
+        int(s, base)
+    except ValueError:
+        messagebox.showerror(
+            "Bad value",
+            "'{}' is a malformed {} value".format(
+                s, TYPE_TO_STR[sym.type]),
+            parent=dialog)
+        entry.focus_set()
+        return False
+
+    for low_sym, high_sym, cond in sym.ranges:
+        if expr_value(cond):
+            low_s = low_sym.str_value
+            high_s = high_sym.str_value
+
+            if not int(low_s, base) <= int(s, base) <= int(high_s, base):
+                messagebox.showerror(
+                    "Value out of range",
+                    "{} is outside the range {}-{}".format(s, low_s, high_s),
+                    parent=dialog)
+                entry.focus_set()
+                return False
+
+            break
+
+    return True
+
+
+def _range_info(sym):
+    # Returns a string with information about the valid range for the symbol
+    # 'sym', or None if 'sym' doesn't have a range
+
+    if sym.type in (INT, HEX):
+        for low, high, cond in sym.ranges:
+            if expr_value(cond):
+                return "Range: {}-{}".format(low.str_value, high.str_value)
+
+    return None
+
+
+def _save(_=None):
+    # Tries to save the configuration
+
+    if _try_save(_kconf.write_config, _conf_filename, "configuration"):
+        _set_conf_changed(False)
+
+    _tree.focus_set()
+
+
+def _save_as():
+    # Pops up a dialog for saving the configuration to a specific location
+
+    global _conf_filename
+
+    filename = _conf_filename
+    while True:
+        filename = filedialog.asksaveasfilename(
+            title="Save configuration as",
+            initialdir=os.path.dirname(filename),
+            initialfile=os.path.basename(filename),
+            parent=_root)
+
+        if not filename:
+            break
+
+        if _try_save(_kconf.write_config, filename, "configuration"):
+            _conf_filename = filename
+            break
+
+    _tree.focus_set()
+
+
+def _save_minimal():
+    # Pops up a dialog for saving a minimal configuration (defconfig) to a
+    # specific location
+
+    global _minconf_filename
+
+    filename = _minconf_filename
+    while True:
+        filename = filedialog.asksaveasfilename(
+            title="Save minimal configuration as",
+            initialdir=os.path.dirname(filename),
+            initialfile=os.path.basename(filename),
+            parent=_root)
+
+        if not filename:
+            break
+
+        if _try_save(_kconf.write_min_config, filename,
+                     "minimal configuration"):
+
+            _minconf_filename = filename
+            break
+
+    _tree.focus_set()
+
+
+def _open(_=None):
+    # Pops up a dialog for loading a configuration
+
+    global _conf_filename
+
+    if _conf_changed and \
+        not messagebox.askokcancel(
+            "Unsaved changes",
+            "You have unsaved changes. Load new configuration anyway?"):
+
+        return
+
+    filename = _conf_filename
+    while True:
+        filename = filedialog.askopenfilename(
+            title="Open configuration",
+            initialdir=os.path.dirname(filename),
+            initialfile=os.path.basename(filename),
+            parent=_root)
+
+        if not filename:
+            break
+
+        if _try_load(filename):
+            # Maybe something fancier could be done here later to try to
+            # preserve the scroll
+
+            _conf_filename = filename
+            _set_conf_changed(_needs_save())
+
+            if _single_menu and not _shown_menu_nodes(_cur_menu):
+                # Turn on show-all if we're in single-menu mode and would end
+                # up with an empty menu
+                _show_all_var.set(True)
+
+            _update_tree()
+
+            break
+
+    _tree.focus_set()
+
+
+def _toggle_showname(_):
+    # Toggles show-name mode on/off
+
+    _show_name_var.set(not _show_name_var.get())
+    _do_showname()
+
+
+def _do_showname():
+    # Updates the UI for the current show-name setting
+
+    # Columns do not automatically shrink/expand, so we have to update
+    # column widths ourselves
+
+    tree_width = _tree.winfo_width()
+
+    if _show_name_var.get():
+        _tree["displaycolumns"] = ("name",)
+        _tree["show"] = "tree headings"
+        name_width = tree_width//3
+        _tree.column("#0", width=max(tree_width - name_width, 1))
+        _tree.column("name", width=name_width)
+    else:
+        _tree["displaycolumns"] = ()
+        _tree["show"] = "tree"
+        _tree.column("#0", width=tree_width)
+
+    _tree.focus_set()
+
+
+def _toggle_showall(_):
+    # Toggles show-all mode on/off
+
+    _show_all_var.set(not _show_all)
+    _do_showall()
+
+
+def _do_showall():
+    # Updates the UI for the current show-all setting
+
+    # Don't allow turning off show-all if we're in single-menu mode and the
+    # current menu would become empty
+    if _single_menu and not _shown_menu_nodes(_cur_menu):
+        _show_all_var.set(True)
+        return
+
+    # Save scroll information. old_scroll can end up negative here, if the
+    # reference item isn't shown (only invisible items on the screen, and
+    # show-all being turned off).
+
+    stayput = _vis_loc_ref_item()
+    # Probe the middle of the first row, to play it safe. identify_row(0) seems
+    # to return the row before the top row.
+    old_scroll = _item_row(stayput) - \
+        _item_row(_tree.identify_row(_treeview_rowheight//2))
+
+    _update_tree()
+
+    if _show_all:
+        # Deep magic: Unless we call update_idletasks(), the scroll adjustment
+        # below is restricted to the height of the old tree, instead of the
+        # height of the new tree. Since the tree with show-all on is guaranteed
+        # to be taller, and we want the maximum range, we only call it when
+        # turning show-all on.
+        #
+        # Strictly speaking, something similar ought to be done when changing
+        # symbol values, but it causes annoying flicker, and in 99% of cases
+        # things work anyway there (with usually minor scroll mess-ups in the
+        # 1% case).
+        _root.update_idletasks()
+
+    # Restore scroll
+    _tree.yview(_item_row(stayput) - old_scroll)
+
+    _tree.focus_set()
+
+
+def _toggle_tree_mode(_):
+    # Toggles single-menu mode on/off
+
+    _single_menu_var.set(not _single_menu)
+    _do_tree_mode()
+
+
+def _do_tree_mode():
+    # Updates the UI for the current tree mode (full-tree or single-menu)
+
+    loc_ref_node = _id_to_node[_loc_ref_item()]
+
+    if not _single_menu:
+        # _jump_to() -> _enter_menu() already updates the tree, but
+        # _jump_to() -> load_parents() doesn't, because it isn't always needed.
+        # We always need to update the tree here, e.g. to add/remove "--->".
+        _update_tree()
+
+    _jump_to(loc_ref_node)
+    _tree.focus_set()
+
+
+def _enter_menu_and_select_first(menu):
+    # Enters the menu 'menu' and selects the first item. Used in single-menu
+    # mode.
+
+    _enter_menu(menu)
+    _select(_tree, _tree.get_children()[0])
+
+
+def _enter_menu(menu):
+    # Enters the menu 'menu'. Used in single-menu mode.
+
+    global _cur_menu
+
+    _cur_menu = menu
+    _update_tree()
+
+    _backbutton["state"] = "disabled" if menu is _kconf.top_node else "normal"
+
+
+def _leave_menu():
+    # Leaves the current menu. Used in single-menu mode.
+
+    global _cur_menu
+
+    if _cur_menu is not _kconf.top_node:
+        old_menu = _cur_menu
+
+        _cur_menu = _parent_menu(_cur_menu)
+        _update_tree()
+
+        _select(_tree, id(old_menu))
+
+        if _cur_menu is _kconf.top_node:
+            _backbutton["state"] = "disabled"
+
+    _tree.focus_set()
+
+
+def _select(tree, item):
+    # Selects, focuses, and see()s 'item' in 'tree'
+
+    tree.selection_set(item)
+    tree.focus(item)
+    tree.see(item)
+
+
+def _loc_ref_item():
+    # Returns a Treeview item that can serve as a reference for the current
+    # scroll location. We try to make this item stay on the same row on the
+    # screen when updating the tree.
+
+    # If the selected item is visible, use that
+    sel = _tree.selection()
+    if sel and _tree.bbox(sel[0]):
+        return sel[0]
+
+    # Otherwise, use the middle item on the screen. If it doesn't exist, the
+    # tree is probably really small, so use the first item in the entire tree.
+    return _tree.identify_row(_tree.winfo_height()//2) or \
+        _tree.get_children()[0]
+
+
+def _vis_loc_ref_item():
+    # Like _loc_ref_item(), but finds a visible item around the reference item.
+    # Used when changing show-all mode, where non-visible (red) items will
+    # disappear.
+
+    item = _loc_ref_item()
+
+    vis_before = _vis_before(item)
+    if vis_before and _tree.bbox(vis_before):
+        return vis_before
+
+    vis_after = _vis_after(item)
+    if vis_after and _tree.bbox(vis_after):
+        return vis_after
+
+    return vis_before or vis_after
+
+
+def _vis_before(item):
+    # _vis_loc_ref_item() helper. Returns the first visible (not red) item,
+    # searching backwards from 'item'.
+
+    while item:
+        if not _tree.tag_has("invisible", item):
+            return item
+
+        prev = _tree.prev(item)
+        item = prev if prev else _tree.parent(item)
+
+    return None
+
+
+def _vis_after(item):
+    # _vis_loc_ref_item() helper. Returns the first visible (not red) item,
+    # searching forwards from 'item'.
+
+    while item:
+        if not _tree.tag_has("invisible", item):
+            return item
+
+        next = _tree.next(item)
+        if next:
+            item = next
+        else:
+            item = _tree.parent(item)
+            if not item:
+                break
+            item = _tree.next(item)
+
+    return None
+
+
+def _on_quit(_=None):
+    # Called when the user wants to exit
+
+    if not _conf_changed:
+        _quit("No changes to save (for '{}')".format(_conf_filename))
+        return
+
+    while True:
+        ync = messagebox.askyesnocancel("Quit", "Save changes?")
+        if ync is None:
+            return
+
+        if not ync:
+            _quit("Configuration ({}) was not saved".format(_conf_filename))
+            return
+
+        if _try_save(_kconf.write_config, _conf_filename, "configuration"):
+            # _try_save() already prints the "Configuration saved to ..."
+            # message
+            _quit()
+            return
+
+
+def _quit(msg=None):
+    # Quits the application
+
+    # Do not call sys.exit() here, in case we're being run from a script
+    _root.destroy()
+    if msg:
+        print(msg)
+
+
+def _try_save(save_fn, filename, description):
+    # Tries to save a configuration file. Pops up an error and returns False on
+    # failure.
+    #
+    # save_fn:
+    #   Function to call with 'filename' to save the file
+    #
+    # description:
+    #   String describing the thing being saved
+
+    try:
+        # save_fn() returns a message to print
+        msg = save_fn(filename)
+        _set_status(msg)
+        print(msg)
+        return True
+    except EnvironmentError as e:
+        messagebox.showerror(
+            "Error saving " + description,
+            "Error saving {} to '{}': {} (errno: {})"
+            .format(description, e.filename, e.strerror,
+                    errno.errorcode[e.errno]))
+        return False
+
+
+def _try_load(filename):
+    # Tries to load a configuration file. Pops up an error and returns False on
+    # failure.
+    #
+    # filename:
+    #   Configuration file to load
+
+    try:
+        msg = _kconf.load_config(filename)
+        _set_status(msg)
+        print(msg)
+        return True
+    except EnvironmentError as e:
+        messagebox.showerror(
+            "Error loading configuration",
+            "Error loading '{}': {} (errno: {})"
+            .format(filename, e.strerror, errno.errorcode[e.errno]))
+        return False
+
+
+def _jump_to_dialog(_=None):
+    # Pops up a dialog for jumping directly to a particular node. Symbol values
+    # can also be changed within the dialog.
+    #
+    # Note: There's nothing preventing this from doing an incremental search
+    # like menuconfig.py does, but currently it's a bit jerky for large Kconfig
+    # trees, at least when inputting the beginning of the search string. We'd
+    # need to somehow only update the tree items that are shown in the Treeview
+    # to fix it.
+
+    global _jump_to_tree
+
+    def search(_=None):
+        _update_jump_to_matches(msglabel, entry.get())
+
+    def jump_to_selected(event=None):
+        # Jumps to the selected node and closes the dialog
+
+        # Ignore double clicks on the image and in the heading area
+        if event and (tree.identify_element(event.x, event.y) == "image" or
+                      _in_heading(event)):
+            return
+
+        sel = tree.selection()
+        if not sel:
+            return
+
+        node = _id_to_node[sel[0]]
+
+        if node not in _shown_menu_nodes(_parent_menu(node)):
+            _show_all_var.set(True)
+            if not _single_menu:
+                # See comment in _do_tree_mode()
+                _update_tree()
+
+        _jump_to(node)
+
+        dialog.destroy()
+
+    def tree_select(_):
+        jumpto_button["state"] = "normal" if tree.selection() else "disabled"
+
+
+    dialog = Toplevel(_root)
+    dialog.geometry("+{}+{}".format(
+        _root.winfo_rootx() + 50, _root.winfo_rooty() + 50))
+    dialog.title("Jump to symbol/choice/menu/comment")
+    dialog.minsize(128, 128)  # See _create_ui()
+    dialog.transient(_root)
+
+    ttk.Label(dialog, text=_JUMP_TO_HELP) \
+        .grid(column=0, row=0, columnspan=2, sticky="w", padx=".1c",
+              pady=".1c")
+
+    entry = ttk.Entry(dialog)
+    entry.grid(column=0, row=1, sticky="ew", padx=".1c", pady=".1c")
+    entry.focus_set()
+
+    entry.bind("<Return>", search)
+    entry.bind("<KP_Enter>", search)
+
+    ttk.Button(dialog, text="Search", command=search) \
+        .grid(column=1, row=1, padx="0 .1c", pady="0 .1c")
+
+    msglabel = ttk.Label(dialog)
+    msglabel.grid(column=0, row=2, sticky="w", pady="0 .1c")
+
+    panedwindow, tree = _create_kconfig_tree_and_desc(dialog)
+    panedwindow.grid(column=0, row=3, columnspan=2, sticky="nsew")
+
+    # Clear tree
+    tree.set_children("")
+
+    _jump_to_tree = tree
+
+    jumpto_button = ttk.Button(dialog, text="Jump to selected item",
+                               state="disabled", command=jump_to_selected)
+    jumpto_button.grid(column=0, row=4, columnspan=2, sticky="ns", pady=".1c")
+
+    dialog.columnconfigure(0, weight=1)
+    # Only the pane with the Kconfig tree and description grows vertically
+    dialog.rowconfigure(3, weight=1)
+
+    # See the menuconfig() function
+    _root.update_idletasks()
+    dialog.geometry(dialog.geometry())
+
+    # The dialog must be visible before we can grab the input
+    dialog.wait_visibility()
+    dialog.grab_set()
+
+    tree.bind("<Double-1>", jump_to_selected)
+    tree.bind("<Return>", jump_to_selected)
+    tree.bind("<KP_Enter>", jump_to_selected)
+    # add=True to avoid overriding the description text update
+    tree.bind("<<TreeviewSelect>>", tree_select, add=True)
+
+    dialog.bind("<Escape>", lambda _: dialog.destroy())
+
+    # Wait for the user to be done with the dialog
+    _root.wait_window(dialog)
+
+    _jump_to_tree = None
+
+    _tree.focus_set()
+
+
+def _update_jump_to_matches(msglabel, search_string):
+    # Searches for nodes matching the search string and updates
+    # _jump_to_matches. Puts a message in 'msglabel' if there are no matches,
+    # or regex errors.
+
+    global _jump_to_matches
+
+    _jump_to_tree.selection_set(())
+
+    try:
+        # We could use re.IGNORECASE here instead of lower(), but this is
+        # faster for regexes like '.*debug$' (though the '.*' is redundant
+        # there). Those probably have bad interactions with re.search(), which
+        # matches anywhere in the string.
+        regex_searches = [re.compile(regex).search
+                          for regex in search_string.lower().split()]
+    except re.error as e:
+        msg = "Bad regular expression"
+        # re.error.msg was added in Python 3.5
+        if hasattr(e, "msg"):
+            msg += ": " + e.msg
+        msglabel["text"] = msg
+        # Clear tree
+        _jump_to_tree.set_children("")
+        return
+
+    _jump_to_matches = []
+    add_match = _jump_to_matches.append
+
+    for node in _sorted_sc_nodes():
+        # Symbol/choice
+        sc = node.item
+
+        for search in regex_searches:
+            # Both the name and the prompt might be missing, since
+            # we're searching both symbols and choices
+
+            # Does the regex match either the symbol name or the
+            # prompt (if any)?
+            if not (sc.name and search(sc.name.lower()) or
+                    node.prompt and search(node.prompt[0].lower())):
+
+                # Give up on the first regex that doesn't match, to
+                # speed things up a bit when multiple regexes are
+                # entered
+                break
+
+        else:
+            add_match(node)
+
+    # Search menus and comments
+
+    for node in _sorted_menu_comment_nodes():
+        for search in regex_searches:
+            if not search(node.prompt[0].lower()):
+                break
+        else:
+            add_match(node)
+
+    msglabel["text"] = "" if _jump_to_matches else "No matches"
+
+    _update_jump_to_display()
+
+    if _jump_to_matches:
+        item = id(_jump_to_matches[0])
+        _jump_to_tree.selection_set(item)
+        _jump_to_tree.focus(item)
+
+
+def _update_jump_to_display():
+    # Updates the images and text for the items in _jump_to_matches, and sets
+    # them as the items of _jump_to_tree
+
+    # Micro-optimize a bit
+    item = _jump_to_tree.item
+    id_ = id
+    node_str = _node_str
+    img_tag = _img_tag
+    visible = _visible
+    for node in _jump_to_matches:
+        item(id_(node),
+             text=node_str(node),
+             tags=img_tag(node) if visible(node) else
+                 img_tag(node) + " invisible")
+
+    _jump_to_tree.set_children("", *map(id, _jump_to_matches))
+
+
+def _jump_to(node):
+    # Jumps directly to 'node' and selects it
+
+    if _single_menu:
+        _enter_menu(_parent_menu(node))
+    else:
+        _load_parents(node)
+
+    _select(_tree, id(node))
+
+
+# Obscure Python: We never pass a value for cached_nodes, and it keeps pointing
+# to the same list. This avoids a global.
+def _sorted_sc_nodes(cached_nodes=[]):
+    # Returns a sorted list of symbol and choice nodes to search. The symbol
+    # nodes appear first, sorted by name, and then the choice nodes, sorted by
+    # prompt and (secondarily) name.
+
+    if not cached_nodes:
+        # Add symbol nodes
+        for sym in sorted(_kconf.unique_defined_syms,
+                          key=lambda sym: sym.name):
+            # += is in-place for lists
+            cached_nodes += sym.nodes
+
+        # Add choice nodes
+
+        choices = sorted(_kconf.unique_choices,
+                         key=lambda choice: choice.name or "")
+
+        cached_nodes += sorted(
+            [node
+             for choice in choices
+                 for node in choice.nodes],
+            key=lambda node: node.prompt[0] if node.prompt else "")
+
+    return cached_nodes
+
+
+def _sorted_menu_comment_nodes(cached_nodes=[]):
+    # Returns a list of menu and comment nodes to search, sorted by prompt,
+    # with the menus first
+
+    if not cached_nodes:
+        def prompt_text(mc):
+            return mc.prompt[0]
+
+        cached_nodes += sorted(_kconf.menus, key=prompt_text)
+        cached_nodes += sorted(_kconf.comments, key=prompt_text)
+
+    return cached_nodes
+
+
+def _load_parents(node):
+    # Menus are lazily populated as they're opened in full-tree mode, but
+    # jumping to an item needs its parent menus to be populated. This function
+    # populates 'node's parents.
+
+    # Get all parents leading up to 'node', sorted with the root first
+    parents = []
+    cur = node.parent
+    while cur is not _kconf.top_node:
+        parents.append(cur)
+        cur = cur.parent
+    parents.reverse()
+
+    for i, parent in enumerate(parents):
+        if not _tree.item(id(parent), "open"):
+            # Found a closed menu. Populate it and all the remaining menus
+            # leading up to 'node'.
+            for parent in parents[i:]:
+                # We only need to populate "real" menus/choices. Implicit menus
+                # are populated when their parents menus are entered.
+                if not isinstance(parent.item, Symbol):
+                    _build_full_tree(parent)
+            return
+
+
+def _parent_menu(node):
+    # Returns the menu node of the menu that contains 'node'. In addition to
+    # proper 'menu's, this might also be a 'menuconfig' symbol or a 'choice'.
+    # "Menu" here means a menu in the interface.
+
+    menu = node.parent
+    while not menu.is_menuconfig:
+        menu = menu.parent
+    return menu
+
+
+def _trace_write(var, fn):
+    # Makes fn() be called whenever the Tkinter Variable 'var' changes value
+
+    # trace_variable() is deprecated according to the docstring,
+    # which recommends trace_add()
+    if hasattr(var, "trace_add"):
+        var.trace_add("write", fn)
+    else:
+        var.trace_variable("w", fn)
+
+
+def _info_str(node):
+    # Returns information about the menu node 'node' as a string.
+    #
+    # The helper functions are responsible for adding newlines. This allows
+    # them to return "" if they don't want to add any output.
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+
+        return (
+            _name_info(sym) +
+            _help_info(sym) +
+            _direct_dep_info(sym) +
+            _defaults_info(sym) +
+            _select_imply_info(sym) +
+            _kconfig_def_info(sym)
+        )
+
+    if isinstance(node.item, Choice):
+        choice = node.item
+
+        return (
+            _name_info(choice) +
+            _help_info(choice) +
+            'Mode: {}\n\n'.format(choice.str_value) +
+            _choice_syms_info(choice) +
+            _direct_dep_info(choice) +
+            _defaults_info(choice) +
+            _kconfig_def_info(choice)
+        )
+
+    # node.item in (MENU, COMMENT)
+    return _kconfig_def_info(node)
+
+
+def _name_info(sc):
+    # Returns a string with the name of the symbol/choice. Choices are shown as
+    # <choice (name if any)>.
+
+    return (sc.name if sc.name else standard_sc_expr_str(sc)) + "\n\n"
+
+
+def _value_info(sym):
+    # Returns a string showing 'sym's value
+
+    # Only put quotes around the value for string symbols
+    return "Value: {}\n".format(
+        '"{}"'.format(sym.str_value)
+        if sym.orig_type == STRING
+        else sym.str_value)
+
+
+def _choice_syms_info(choice):
+    # Returns a string listing the choice symbols in 'choice'. Adds
+    # "(selected)" next to the selected one.
+
+    s = "Choice symbols:\n"
+
+    for sym in choice.syms:
+        s += "  - " + sym.name
+        if sym is choice.selection:
+            s += " (selected)"
+        s += "\n"
+
+    return s + "\n"
+
+
+def _help_info(sc):
+    # Returns a string with the help text(s) of 'sc' (Symbol or Choice).
+    # Symbols and choices defined in multiple locations can have multiple help
+    # texts.
+
+    s = ""
+
+    for node in sc.nodes:
+        if node.help is not None:
+            s += node.help + "\n\n"
+
+    return s
+
+
+def _direct_dep_info(sc):
+    # Returns a string describing the direct dependencies of 'sc' (Symbol or
+    # Choice). The direct dependencies are the OR of the dependencies from each
+    # definition location. The dependencies at each definition location come
+    # from 'depends on' and dependencies inherited from parent items.
+
+    return "" if sc.direct_dep is _kconf.y else \
+        'Direct dependencies (={}):\n{}\n' \
+        .format(TRI_TO_STR[expr_value(sc.direct_dep)],
+                _split_expr_info(sc.direct_dep, 2))
+
+
+def _defaults_info(sc):
+    # Returns a string describing the defaults of 'sc' (Symbol or Choice)
+
+    if not sc.defaults:
+        return ""
+
+    s = "Default"
+    if len(sc.defaults) > 1:
+        s += "s"
+    s += ":\n"
+
+    for val, cond in sc.orig_defaults:
+        s += "  - "
+        if isinstance(sc, Symbol):
+            s += _expr_str(val)
+
+            # Skip the tristate value hint if the expression is just a single
+            # symbol. _expr_str() already shows its value as a string.
+            #
+            # This also avoids showing the tristate value for string/int/hex
+            # defaults, which wouldn't make any sense.
+            if isinstance(val, tuple):
+                s += '  (={})'.format(TRI_TO_STR[expr_value(val)])
+        else:
+            # Don't print the value next to the symbol name for choice
+            # defaults, as it looks a bit confusing
+            s += val.name
+        s += "\n"
+
+        if cond is not _kconf.y:
+            s += "    Condition (={}):\n{}" \
+                 .format(TRI_TO_STR[expr_value(cond)],
+                         _split_expr_info(cond, 4))
+
+    return s + "\n"
+
+
+def _split_expr_info(expr, indent):
+    # Returns a string with 'expr' split into its top-level && or || operands,
+    # with one operand per line, together with the operand's value. This is
+    # usually enough to get something readable for long expressions. A fancier
+    # recursive thingy would be possible too.
+    #
+    # indent:
+    #   Number of leading spaces to add before the split expression.
+
+    if len(split_expr(expr, AND)) > 1:
+        split_op = AND
+        op_str = "&&"
+    else:
+        split_op = OR
+        op_str = "||"
+
+    s = ""
+    for i, term in enumerate(split_expr(expr, split_op)):
+        s += "{}{} {}".format(indent*" ",
+                              "  " if i == 0 else op_str,
+                              _expr_str(term))
+
+        # Don't bother showing the value hint if the expression is just a
+        # single symbol. _expr_str() already shows its value.
+        if isinstance(term, tuple):
+            s += "  (={})".format(TRI_TO_STR[expr_value(term)])
+
+        s += "\n"
+
+    return s
+
+
+def _select_imply_info(sym):
+    # Returns a string with information about which symbols 'select' or 'imply'
+    # 'sym'. The selecting/implying symbols are grouped according to which
+    # value they select/imply 'sym' to (n/m/y).
+
+    def sis(expr, val, title):
+        # sis = selects/implies
+        sis = [si for si in split_expr(expr, OR) if expr_value(si) == val]
+        if not sis:
+            return ""
+
+        res = title
+        for si in sis:
+            res += "  - {}\n".format(split_expr(si, AND)[0].name)
+        return res + "\n"
+
+    s = ""
+
+    if sym.rev_dep is not _kconf.n:
+        s += sis(sym.rev_dep, 2,
+                 "Symbols currently y-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 1,
+                 "Symbols currently m-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 0,
+                 "Symbols currently n-selecting this symbol (no effect):\n")
+
+    if sym.weak_rev_dep is not _kconf.n:
+        s += sis(sym.weak_rev_dep, 2,
+                 "Symbols currently y-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 1,
+                 "Symbols currently m-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 0,
+                 "Symbols currently n-implying this symbol (no effect):\n")
+
+    return s
+
+
+def _kconfig_def_info(item):
+    # Returns a string with the definition of 'item' in Kconfig syntax,
+    # together with the definition location(s) and their include and menu paths
+
+    nodes = [item] if isinstance(item, MenuNode) else item.nodes
+
+    s = "Kconfig definition{}, with parent deps. propagated to 'depends on'\n" \
+        .format("s" if len(nodes) > 1 else "")
+    s += (len(s) - 1)*"="
+
+    for node in nodes:
+        s += "\n\n" \
+             "At {}:{}\n" \
+             "{}" \
+             "Menu path: {}\n\n" \
+             "{}" \
+             .format(node.filename, node.linenr,
+                     _include_path_info(node),
+                     _menu_path_info(node),
+                     node.custom_str(_name_and_val_str))
+
+    return s
+
+
+def _include_path_info(node):
+    if not node.include_path:
+        # In the top-level Kconfig file
+        return ""
+
+    return "Included via {}\n".format(
+        " -> ".join("{}:{}".format(filename, linenr)
+                    for filename, linenr in node.include_path))
+
+
+def _menu_path_info(node):
+    # Returns a string describing the menu path leading up to 'node'
+
+    path = ""
+
+    while node.parent is not _kconf.top_node:
+        node = node.parent
+
+        # Promptless choices might appear among the parents. Use
+        # standard_sc_expr_str() for them, so that they show up as
+        # '<choice (name if any)>'.
+        path = " -> " + (node.prompt[0] if node.prompt else
+                         standard_sc_expr_str(node.item)) + path
+
+    return "(Top)" + path
+
+
+def _name_and_val_str(sc):
+    # Custom symbol/choice printer that shows symbol values after symbols
+
+    # Show the values of non-constant (non-quoted) symbols that don't look like
+    # numbers. Things like 123 are actually symbol references, and only work as
+    # expected due to undefined symbols getting their name as their value.
+    # Showing the symbol value for those isn't helpful though.
+    if isinstance(sc, Symbol) and not sc.is_constant and not _is_num(sc.name):
+        if not sc.nodes:
+            # Undefined symbol reference
+            return "{}(undefined/n)".format(sc.name)
+
+        return '{}(={})'.format(sc.name, sc.str_value)
+
+    # For other items, use the standard format
+    return standard_sc_expr_str(sc)
+
+
+def _expr_str(expr):
+    # Custom expression printer that shows symbol values
+    return expr_str(expr, _name_and_val_str)
+
+
+def _is_num(name):
+    # Heuristic to see if a symbol name looks like a number, for nicer output
+    # when printing expressions. Things like 16 are actually symbol names, only
+    # they get their name as their value when the symbol is undefined.
+
+    try:
+        int(name)
+    except ValueError:
+        if not name.startswith(("0x", "0X")):
+            return False
+
+        try:
+            int(name, 16)
+        except ValueError:
+            return False
+
+    return True
+
+
+if __name__ == "__main__":
+    _main()
diff --git a/support/kconfiglib/kconfiglib.py b/support/kconfiglib/kconfiglib.py
new file mode 100644
index 0000000..410db28
--- /dev/null
+++ b/support/kconfiglib/kconfiglib.py
@@ -0,0 +1,7018 @@
+# Copyright (c) 2011-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Overview
+========
+
+Kconfiglib is a Python 2/3 library for scripting and extracting information
+from Kconfig (https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt)
+configuration systems.
+
+See the homepage at https://github.com/ulfalizer/Kconfiglib for a longer
+overview.
+
+Since Kconfiglib 12.0.0, the library version is available in
+kconfiglib.VERSION, which is a (<major>, <minor>, <patch>) tuple, e.g.
+(12, 0, 0).
+
+
+Using Kconfiglib on the Linux kernel with the Makefile targets
+==============================================================
+
+For the Linux kernel, a handy interface is provided by the
+scripts/kconfig/Makefile patch, which can be applied with either 'git am' or
+the 'patch' utility:
+
+  $ wget -qO- https://raw.githubusercontent.com/ulfalizer/Kconfiglib/master/makefile.patch | git am
+  $ wget -qO- https://raw.githubusercontent.com/ulfalizer/Kconfiglib/master/makefile.patch | patch -p1
+
+Warning: Not passing -p1 to patch will cause the wrong file to be patched.
+
+Please tell me if the patch does not apply. It should be trivial to apply
+manually, as it's just a block of text that needs to be inserted near the other
+*conf: targets in scripts/kconfig/Makefile.
+
+Look further down for a motivation for the Makefile patch and for instructions
+on how you can use Kconfiglib without it.
+
+If you do not wish to install Kconfiglib via pip, the Makefile patch is set up
+so that you can also just clone Kconfiglib into the kernel root:
+
+  $ git clone git://github.com/ulfalizer/Kconfiglib.git
+  $ git am Kconfiglib/makefile.patch  (or 'patch -p1 < Kconfiglib/makefile.patch')
+
+Warning: The directory name Kconfiglib/ is significant in this case, because
+it's added to PYTHONPATH by the new targets in makefile.patch.
+
+The targets added by the Makefile patch are described in the following
+sections.
+
+
+make kmenuconfig
+----------------
+
+This target runs the curses menuconfig interface with Python 3. As of
+Kconfiglib 12.2.0, both Python 2 and Python 3 are supported (previously, only
+Python 3 was supported, so this was a backport).
+
+
+make guiconfig
+--------------
+
+This target runs the Tkinter menuconfig interface. Both Python 2 and Python 3
+are supported. To change the Python interpreter used, pass
+PYTHONCMD=<executable> to 'make'. The default is 'python'.
+
+
+make [ARCH=<arch>] iscriptconfig
+--------------------------------
+
+This target gives an interactive Python prompt where a Kconfig instance has
+been preloaded and is available in 'kconf'. To change the Python interpreter
+used, pass PYTHONCMD=<executable> to 'make'. The default is 'python'.
+
+To get a feel for the API, try evaluating and printing the symbols in
+kconf.defined_syms, and explore the MenuNode menu tree starting at
+kconf.top_node by following 'next' and 'list' pointers.
+
+The item contained in a menu node is found in MenuNode.item (note that this can
+be one of the constants kconfiglib.MENU and kconfiglib.COMMENT), and all
+symbols and choices have a 'nodes' attribute containing their menu nodes
+(usually only one). Printing a menu node will print its item, in Kconfig
+format.
+
+If you want to look up a symbol by name, use the kconf.syms dictionary.
+
+
+make scriptconfig SCRIPT=<script> [SCRIPT_ARG=<arg>]
+----------------------------------------------------
+
+This target runs the Python script given by the SCRIPT parameter on the
+configuration. sys.argv[1] holds the name of the top-level Kconfig file
+(currently always "Kconfig" in practice), and sys.argv[2] holds the SCRIPT_ARG
+argument, if given.
+
+See the examples/ subdirectory for example scripts.
+
+
+make dumpvarsconfig
+-------------------
+
+This target prints a list of all environment variables referenced from the
+Kconfig files, together with their values. See the
+Kconfiglib/examples/dumpvars.py script.
+
+Only environment variables that are referenced via the Kconfig preprocessor
+$(FOO) syntax are included. The preprocessor was added in Linux 4.18.
+
+
+Using Kconfiglib without the Makefile targets
+=============================================
+
+The make targets are only needed to pick up environment variables exported from
+the Kbuild makefiles and referenced inside Kconfig files, via e.g.
+'source "arch/$(SRCARCH)/Kconfig" and commands run via '$(shell,...)'.
+
+These variables are referenced as of writing (Linux 4.18), together with sample
+values:
+
+  srctree          (.)
+  ARCH             (x86)
+  SRCARCH          (x86)
+  KERNELVERSION    (4.18.0)
+  CC               (gcc)
+  HOSTCC           (gcc)
+  HOSTCXX          (g++)
+  CC_VERSION_TEXT  (gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0)
+
+Older kernels only reference ARCH, SRCARCH, and KERNELVERSION.
+
+If your kernel is recent enough (4.18+), you can get a list of referenced
+environment variables via 'make dumpvarsconfig' (see above). Note that this
+command is added by the Makefile patch.
+
+To run Kconfiglib without the Makefile patch, set the environment variables
+manually:
+
+  $ srctree=. ARCH=x86 SRCARCH=x86 KERNELVERSION=`make kernelversion` ... python(3)
+  >>> import kconfiglib
+  >>> kconf = kconfiglib.Kconfig()  # filename defaults to "Kconfig"
+
+Search the top-level Makefile for "Additional ARCH settings" to see other
+possibilities for ARCH and SRCARCH.
+
+
+Intro to symbol values
+======================
+
+Kconfiglib has the same assignment semantics as the C implementation.
+
+Any symbol can be assigned a value by the user (via Kconfig.load_config() or
+Symbol.set_value()), but this user value is only respected if the symbol is
+visible, which corresponds to it (currently) being visible in the menuconfig
+interface.
+
+For symbols with prompts, the visibility of the symbol is determined by the
+condition on the prompt. Symbols without prompts are never visible, so setting
+a user value on them is pointless. A warning will be printed by default if
+Symbol.set_value() is called on a promptless symbol. Assignments to promptless
+symbols are normal within a .config file, so no similar warning will be printed
+by load_config().
+
+Dependencies from parents and 'if'/'depends on' are propagated to properties,
+including prompts, so these two configurations are logically equivalent:
+
+(1)
+
+  menu "menu"
+      depends on A
+
+  if B
+
+  config FOO
+      tristate "foo" if D
+      default y
+      depends on C
+
+  endif
+
+  endmenu
+
+(2)
+
+  menu "menu"
+      depends on A
+
+  config FOO
+      tristate "foo" if A && B && C && D
+      default y if A && B && C
+
+  endmenu
+
+In this example, A && B && C && D (the prompt condition) needs to be non-n for
+FOO to be visible (assignable). If its value is m, the symbol can only be
+assigned the value m: The visibility sets an upper bound on the value that can
+be assigned by the user, and any higher user value will be truncated down.
+
+'default' properties are independent of the visibility, though a 'default' will
+often get the same condition as the prompt due to dependency propagation.
+'default' properties are used if the symbol is not visible or has no user
+value.
+
+Symbols with no user value (or that have a user value but are not visible) and
+no (active) 'default' default to n for bool/tristate symbols, and to the empty
+string for other symbol types.
+
+'select' works similarly to symbol visibility, but sets a lower bound on the
+value of the symbol. The lower bound is determined by the value of the
+select*ing* symbol. 'select' does not respect visibility, so non-visible
+symbols can be forced to a particular (minimum) value by a select as well.
+
+For non-bool/tristate symbols, it only matters whether the visibility is n or
+non-n: m visibility acts the same as y visibility.
+
+Conditions on 'default' and 'select' work in mostly intuitive ways. If the
+condition is n, the 'default' or 'select' is disabled. If it is m, the
+'default' or 'select' value (the value of the selecting symbol) is truncated
+down to m.
+
+When writing a configuration with Kconfig.write_config(), only symbols that are
+visible, have an (active) default, or are selected will get written out (note
+that this includes all symbols that would accept user values). Kconfiglib
+matches the .config format produced by the C implementations down to the
+character. This eases testing.
+
+For a visible bool/tristate symbol FOO with value n, this line is written to
+.config:
+
+    # CONFIG_FOO is not set
+
+The point is to remember the user n selection (which might differ from the
+default value the symbol would get), while at the same sticking to the rule
+that undefined corresponds to n (.config uses Makefile format, making the line
+above a comment). When the .config file is read back in, this line will be
+treated the same as the following assignment:
+
+    CONFIG_FOO=n
+
+In Kconfiglib, the set of (currently) assignable values for a bool/tristate
+symbol appear in Symbol.assignable. For other symbol types, just check if
+sym.visibility is non-0 (non-n) to see whether the user value will have an
+effect.
+
+
+Intro to the menu tree
+======================
+
+The menu structure, as seen in e.g. menuconfig, is represented by a tree of
+MenuNode objects. The top node of the configuration corresponds to an implicit
+top-level menu, the title of which is shown at the top in the standard
+menuconfig interface. (The title is also available in Kconfig.mainmenu_text in
+Kconfiglib.)
+
+The top node is found in Kconfig.top_node. From there, you can visit child menu
+nodes by following the 'list' pointer, and any following menu nodes by
+following the 'next' pointer. Usually, a non-None 'list' pointer indicates a
+menu or Choice, but menu nodes for symbols can sometimes have a non-None 'list'
+pointer too due to submenus created implicitly from dependencies.
+
+MenuNode.item is either a Symbol or a Choice object, or one of the constants
+MENU and COMMENT. The prompt of the menu node can be found in MenuNode.prompt,
+which also holds the title for menus and comments. For Symbol and Choice,
+MenuNode.help holds the help text (if any, otherwise None).
+
+Most symbols will only have a single menu node. A symbol defined in multiple
+locations will have one menu node for each location. The list of menu nodes for
+a Symbol or Choice can be found in the Symbol/Choice.nodes attribute.
+
+Note that prompts and help texts for symbols and choices are stored in their
+menu node(s) rather than in the Symbol or Choice objects themselves. This makes
+it possible to define a symbol in multiple locations with a different prompt or
+help text in each location. To get the help text or prompt for a symbol with a
+single menu node, do sym.nodes[0].help and sym.nodes[0].prompt, respectively.
+The prompt is a (text, condition) tuple, where condition determines the
+visibility (see 'Intro to expressions' below).
+
+This organization mirrors the C implementation. MenuNode is called
+'struct menu' there, but I thought "menu" was a confusing name.
+
+It is possible to give a Choice a name and define it in multiple locations,
+hence why Choice.nodes is also a list.
+
+As a convenience, the properties added at a particular definition location are
+available on the MenuNode itself, in e.g. MenuNode.defaults. This is helpful
+when generating documentation, so that symbols/choices defined in multiple
+locations can be shown with the correct properties at each location.
+
+
+Intro to expressions
+====================
+
+Expressions can be evaluated with the expr_value() function and printed with
+the expr_str() function (these are used internally as well). Evaluating an
+expression always yields a tristate value, where n, m, and y are represented as
+0, 1, and 2, respectively.
+
+The following table should help you figure out how expressions are represented.
+A, B, C, ... are symbols (Symbol instances), NOT is the kconfiglib.NOT
+constant, etc.
+
+Expression            Representation
+----------            --------------
+A                     A
+"A"                   A (constant symbol)
+!A                    (NOT, A)
+A && B                (AND, A, B)
+A && B && C           (AND, A, (AND, B, C))
+A || B                (OR, A, B)
+A || (B && C && D)    (OR, A, (AND, B, (AND, C, D)))
+A = B                 (EQUAL, A, B)
+A != "foo"            (UNEQUAL, A, foo (constant symbol))
+A && B = C && D       (AND, A, (AND, (EQUAL, B, C), D))
+n                     Kconfig.n (constant symbol)
+m                     Kconfig.m (constant symbol)
+y                     Kconfig.y (constant symbol)
+"y"                   Kconfig.y (constant symbol)
+
+Strings like "foo" in 'default "foo"' or 'depends on SYM = "foo"' are
+represented as constant symbols, so the only values that appear in expressions
+are symbols***. This mirrors the C implementation.
+
+***For choice symbols, the parent Choice will appear in expressions as well,
+but it's usually invisible as the value interfaces of Symbol and Choice are
+identical. This mirrors the C implementation and makes different choice modes
+"just work".
+
+Manual evaluation examples:
+
+  - The value of A && B is min(A.tri_value, B.tri_value)
+
+  - The value of A || B is max(A.tri_value, B.tri_value)
+
+  - The value of !A is 2 - A.tri_value
+
+  - The value of A = B is 2 (y) if A.str_value == B.str_value, and 0 (n)
+    otherwise. Note that str_value is used here instead of tri_value.
+
+    For constant (as well as undefined) symbols, str_value matches the name of
+    the symbol. This mirrors the C implementation and explains why
+    'depends on SYM = "foo"' above works as expected.
+
+n/m/y are automatically converted to the corresponding constant symbols
+"n"/"m"/"y" (Kconfig.n/m/y) during parsing.
+
+Kconfig.const_syms is a dictionary like Kconfig.syms but for constant symbols.
+
+If a condition is missing (e.g., <cond> when the 'if <cond>' is removed from
+'default A if <cond>'), it is actually Kconfig.y. The standard __str__()
+functions just avoid printing 'if y' conditions to give cleaner output.
+
+
+Kconfig extensions
+==================
+
+Kconfiglib includes a couple of Kconfig extensions:
+
+'source' with relative path
+---------------------------
+
+The 'rsource' statement sources Kconfig files with a path relative to directory
+of the Kconfig file containing the 'rsource' statement, instead of relative to
+the project root.
+
+Consider following directory tree:
+
+  Project
+  +--Kconfig
+  |
+  +--src
+     +--Kconfig
+     |
+     +--SubSystem1
+        +--Kconfig
+        |
+        +--ModuleA
+           +--Kconfig
+
+In this example, assume that src/SubSystem1/Kconfig wants to source
+src/SubSystem1/ModuleA/Kconfig.
+
+With 'source', this statement would be used:
+
+  source "src/SubSystem1/ModuleA/Kconfig"
+
+With 'rsource', this turns into
+
+  rsource "ModuleA/Kconfig"
+
+If an absolute path is given to 'rsource', it acts the same as 'source'.
+
+'rsource' can be used to create "position-independent" Kconfig trees that can
+be moved around freely.
+
+
+Globbing 'source'
+-----------------
+
+'source' and 'rsource' accept glob patterns, sourcing all matching Kconfig
+files. They require at least one matching file, raising a KconfigError
+otherwise.
+
+For example, the following statement might source sub1/foofoofoo and
+sub2/foobarfoo:
+
+  source "sub[12]/foo*foo"
+
+The glob patterns accepted are the same as for the standard glob.glob()
+function.
+
+Two additional statements are provided for cases where it's acceptable for a
+pattern to match no files: 'osource' and 'orsource' (the o is for "optional").
+
+For example, the following statements will be no-ops if neither "foo" nor any
+files matching "bar*" exist:
+
+  osource "foo"
+  osource "bar*"
+
+'orsource' does a relative optional source.
+
+'source' and 'osource' are analogous to 'include' and '-include' in Make.
+
+
+Generalized def_* keywords
+--------------------------
+
+def_int, def_hex, and def_string are available in addition to def_bool and
+def_tristate, allowing int, hex, and string symbols to be given a type and a
+default at the same time.
+
+
+Extra optional warnings
+-----------------------
+
+Some optional warnings can be controlled via environment variables:
+
+  - KCONFIG_WARN_UNDEF: If set to 'y', warnings will be generated for all
+    references to undefined symbols within Kconfig files. The only gotcha is
+    that all hex literals must be prefixed with "0x" or "0X", to make it
+    possible to distinguish them from symbol references.
+
+    Some projects (e.g. the Linux kernel) use multiple Kconfig trees with many
+    shared Kconfig files, leading to some safe undefined symbol references.
+    KCONFIG_WARN_UNDEF is useful in projects that only have a single Kconfig
+    tree though.
+
+    KCONFIG_STRICT is an older alias for this environment variable, supported
+    for backwards compatibility.
+
+  - KCONFIG_WARN_UNDEF_ASSIGN: If set to 'y', warnings will be generated for
+    all assignments to undefined symbols within .config files. By default, no
+    such warnings are generated.
+
+    This warning can also be enabled/disabled via the Kconfig.warn_assign_undef
+    variable.
+
+
+Preprocessor user functions defined in Python
+---------------------------------------------
+
+Preprocessor functions can be defined in Python, which makes it simple to
+integrate information from existing Python tools into Kconfig (e.g. to have
+Kconfig symbols depend on hardware information stored in some other format).
+
+Putting a Python module named kconfigfunctions(.py) anywhere in sys.path will
+cause it to be imported by Kconfiglib (in Kconfig.__init__()). Note that
+sys.path can be customized via PYTHONPATH, and includes the directory of the
+module being run by default, as well as installation directories.
+
+If the KCONFIG_FUNCTIONS environment variable is set, it gives a different
+module name to use instead of 'kconfigfunctions'.
+
+The imported module is expected to define a global dictionary named 'functions'
+that maps function names to Python functions, as follows:
+
+  def my_fn(kconf, name, arg_1, arg_2, ...):
+      # kconf:
+      #   Kconfig instance
+      #
+      # name:
+      #   Name of the user-defined function ("my-fn"). Think argv[0].
+      #
+      # arg_1, arg_2, ...:
+      #   Arguments passed to the function from Kconfig (strings)
+      #
+      # Returns a string to be substituted as the result of calling the
+      # function
+      ...
+
+  def my_other_fn(kconf, name, arg_1, arg_2, ...):
+      ...
+
+  functions = {
+      "my-fn":       (my_fn,       <min.args>, <max.args>/None),
+      "my-other-fn": (my_other_fn, <min.args>, <max.args>/None),
+      ...
+  }
+
+  ...
+
+<min.args> and <max.args> are the minimum and maximum number of arguments
+expected by the function (excluding the implicit 'name' argument). If
+<max.args> is None, there is no upper limit to the number of arguments. Passing
+an invalid number of arguments will generate a KconfigError exception.
+
+Once defined, user functions can be called from Kconfig in the same way as
+other preprocessor functions:
+
+    config FOO
+        ...
+        depends on $(my-fn,arg1,arg2)
+
+If my_fn() returns "n", this will result in
+
+    config FOO
+        ...
+        depends on n
+
+Warning
+*******
+
+User-defined preprocessor functions are called as they're encountered at parse
+time, before all Kconfig files have been processed, and before the menu tree
+has been finalized. There are no guarantees that accessing Kconfig symbols or
+the menu tree via the 'kconf' parameter will work, and it could potentially
+lead to a crash. The 'kconf' parameter is provided for future extension (and
+because the predefined functions take it anyway).
+
+Preferably, user-defined functions should be stateless.
+
+
+Feedback
+========
+
+Send bug reports, suggestions, and questions to ulfalizer a.t Google's email
+service, or open a ticket on the GitHub page.
+"""
+import errno
+import importlib
+import os
+import re
+import sys
+
+# Get rid of some attribute lookups. These are obvious in context.
+from glob import iglob
+from os.path import dirname, exists, expandvars, islink, join, realpath
+
+
+VERSION = (12, 13, 0)
+
+
+# File layout:
+#
+# Public classes
+# Public functions
+# Internal functions
+# Global constants
+
+# Line length: 79 columns
+
+
+#
+# Public classes
+#
+
+
+class Kconfig(object):
+    """
+    Represents a Kconfig configuration, e.g. for x86 or ARM. This is the set of
+    symbols, choices, and menu nodes appearing in the configuration. Creating
+    any number of Kconfig objects (including for different architectures) is
+    safe. Kconfiglib doesn't keep any global state.
+
+    The following attributes are available. They should be treated as
+    read-only, and some are implemented through @property magic.
+
+    syms:
+      A dictionary with all symbols in the configuration, indexed by name. Also
+      includes all symbols that are referenced in expressions but never
+      defined, except for constant (quoted) symbols.
+
+      Undefined symbols can be recognized by Symbol.nodes being empty -- see
+      the 'Intro to the menu tree' section in the module docstring.
+
+    const_syms:
+      A dictionary like 'syms' for constant (quoted) symbols
+
+    named_choices:
+      A dictionary like 'syms' for named choices (choice FOO)
+
+    defined_syms:
+      A list with all defined symbols, in the same order as they appear in the
+      Kconfig files. Symbols defined in multiple locations appear multiple
+      times.
+
+      Note: You probably want to use 'unique_defined_syms' instead. This
+      attribute is mostly maintained for backwards compatibility.
+
+    unique_defined_syms:
+      A list like 'defined_syms', but with duplicates removed. Just the first
+      instance is kept for symbols defined in multiple locations. Kconfig order
+      is preserved otherwise.
+
+      Using this attribute instead of 'defined_syms' can save work, and
+      automatically gives reasonable behavior when writing configuration output
+      (symbols defined in multiple locations only generate output once, while
+      still preserving Kconfig order for readability).
+
+    choices:
+      A list with all choices, in the same order as they appear in the Kconfig
+      files.
+
+      Note: You probably want to use 'unique_choices' instead. This attribute
+      is mostly maintained for backwards compatibility.
+
+    unique_choices:
+      Analogous to 'unique_defined_syms', for choices. Named choices can have
+      multiple definition locations.
+
+    menus:
+      A list with all menus, in the same order as they appear in the Kconfig
+      files
+
+    comments:
+      A list with all comments, in the same order as they appear in the Kconfig
+      files
+
+    kconfig_filenames:
+      A list with the filenames of all Kconfig files included in the
+      configuration, relative to $srctree (or relative to the current directory
+      if $srctree isn't set), except absolute paths (e.g.
+      'source "/foo/Kconfig"') are kept as-is.
+
+      The files are listed in the order they are source'd, starting with the
+      top-level Kconfig file. If a file is source'd multiple times, it will
+      appear multiple times. Use set() to get unique filenames.
+
+      Note that Kconfig.sync_deps() already indirectly catches any file
+      modifications that change configuration output.
+
+    env_vars:
+      A set() with the names of all environment variables referenced in the
+      Kconfig files.
+
+      Only environment variables referenced with the preprocessor $(FOO) syntax
+      will be registered. The older $FOO syntax is only supported for backwards
+      compatibility.
+
+      Also note that $(FOO) won't be registered unless the environment variable
+      $FOO is actually set. If it isn't, $(FOO) is an expansion of an unset
+      preprocessor variable (which gives the empty string).
+
+      Another gotcha is that environment variables referenced in the values of
+      recursively expanded preprocessor variables (those defined with =) will
+      only be registered if the variable is actually used (expanded) somewhere.
+
+      The note from the 'kconfig_filenames' documentation applies here too.
+
+    n/m/y:
+      The predefined constant symbols n/m/y. Also available in const_syms.
+
+    modules:
+      The Symbol instance for the modules symbol. Currently hardcoded to
+      MODULES, which is backwards compatible. Kconfiglib will warn if
+      'option modules' is set on some other symbol. Tell me if you need proper
+      'option modules' support.
+
+      'modules' is never None. If the MODULES symbol is not explicitly defined,
+      its tri_value will be 0 (n), as expected.
+
+      A simple way to enable modules is to do 'kconf.modules.set_value(2)'
+      (provided the MODULES symbol is defined and visible). Modules are
+      disabled by default in the kernel Kconfig files as of writing, though
+      nearly all defconfig files enable them (with 'CONFIG_MODULES=y').
+
+    defconfig_list:
+      The Symbol instance for the 'option defconfig_list' symbol, or None if no
+      defconfig_list symbol exists. The defconfig filename derived from this
+      symbol can be found in Kconfig.defconfig_filename.
+
+    defconfig_filename:
+      The filename given by the defconfig_list symbol. This is taken from the
+      first 'default' with a satisfied condition where the specified file
+      exists (can be opened for reading). If a defconfig file foo/defconfig is
+      not found and $srctree was set when the Kconfig was created,
+      $srctree/foo/defconfig is looked up as well.
+
+      'defconfig_filename' is None if either no defconfig_list symbol exists,
+      or if the defconfig_list symbol has no 'default' with a satisfied
+      condition that specifies a file that exists.
+
+      Gotcha: scripts/kconfig/Makefile might pass --defconfig=<defconfig> to
+      scripts/kconfig/conf when running e.g. 'make defconfig'. This option
+      overrides the defconfig_list symbol, meaning defconfig_filename might not
+      always match what 'make defconfig' would use.
+
+    top_node:
+      The menu node (see the MenuNode class) of the implicit top-level menu.
+      Acts as the root of the menu tree.
+
+    mainmenu_text:
+      The prompt (title) of the top menu (top_node). Defaults to "Main menu".
+      Can be changed with the 'mainmenu' statement (see kconfig-language.txt).
+
+    variables:
+      A dictionary with all preprocessor variables, indexed by name. See the
+      Variable class.
+
+    warn:
+      Set this variable to True/False to enable/disable warnings. See
+      Kconfig.__init__().
+
+      When 'warn' is False, the values of the other warning-related variables
+      are ignored.
+
+      This variable as well as the other warn* variables can be read to check
+      the current warning settings.
+
+    warn_to_stderr:
+      Set this variable to True/False to enable/disable warnings on stderr. See
+      Kconfig.__init__().
+
+    warn_assign_undef:
+      Set this variable to True to generate warnings for assignments to
+      undefined symbols in configuration files.
+
+      This variable is False by default unless the KCONFIG_WARN_UNDEF_ASSIGN
+      environment variable was set to 'y' when the Kconfig instance was
+      created.
+
+    warn_assign_override:
+      Set this variable to True to generate warnings for multiple assignments
+      to the same symbol in configuration files, where the assignments set
+      different values (e.g. CONFIG_FOO=m followed by CONFIG_FOO=y, where the
+      last value would get used).
+
+      This variable is True by default. Disabling it might be useful when
+      merging configurations.
+
+    warn_assign_redun:
+      Like warn_assign_override, but for multiple assignments setting a symbol
+      to the same value.
+
+      This variable is True by default. Disabling it might be useful when
+      merging configurations.
+
+    warnings:
+      A list of strings containing all warnings that have been generated, for
+      cases where more flexibility is needed.
+
+      See the 'warn_to_stderr' parameter to Kconfig.__init__() and the
+      Kconfig.warn_to_stderr variable as well. Note that warnings still get
+      added to Kconfig.warnings when 'warn_to_stderr' is True.
+
+      Just as for warnings printed to stderr, only warnings that are enabled
+      will get added to Kconfig.warnings. See the various Kconfig.warn*
+      variables.
+
+    missing_syms:
+      A list with (name, value) tuples for all assignments to undefined symbols
+      within the most recently loaded .config file(s). 'name' is the symbol
+      name without the 'CONFIG_' prefix. 'value' is a string that gives the
+      right-hand side of the assignment verbatim.
+
+      See Kconfig.load_config() as well.
+
+    srctree:
+      The value of the $srctree environment variable when the configuration was
+      loaded, or the empty string if $srctree wasn't set. This gives nice
+      behavior with os.path.join(), which treats "" as the current directory,
+      without adding "./".
+
+      Kconfig files are looked up relative to $srctree (unless absolute paths
+      are used), and .config files are looked up relative to $srctree if they
+      are not found in the current directory. This is used to support
+      out-of-tree builds. The C tools use this environment variable in the same
+      way.
+
+      Changing $srctree after creating the Kconfig instance has no effect. Only
+      the value when the configuration is loaded matters. This avoids surprises
+      if multiple configurations are loaded with different values for $srctree.
+
+    config_prefix:
+      The value of the $CONFIG_ environment variable when the configuration was
+      loaded. This is the prefix used (and expected) on symbol names in .config
+      files and C headers. Defaults to "CONFIG_". Used in the same way in the C
+      tools.
+
+      Like for srctree, only the value of $CONFIG_ when the configuration is
+      loaded matters.
+    """
+    __slots__ = (
+        "_encoding",
+        "_functions",
+        "_set_match",
+        "_srctree_prefix",
+        "_unset_match",
+        "_warn_assign_no_prompt",
+        "choices",
+        "comments",
+        "config_prefix",
+        "const_syms",
+        "defconfig_list",
+        "defined_syms",
+        "env_vars",
+        "kconfig_filenames",
+        "m",
+        "menus",
+        "missing_syms",
+        "modules",
+        "n",
+        "named_choices",
+        "srctree",
+        "syms",
+        "top_node",
+        "unique_choices",
+        "unique_defined_syms",
+        "variables",
+        "warn",
+        "warn_assign_override",
+        "warn_assign_redun",
+        "warn_assign_undef",
+        "warn_to_stderr",
+        "warnings",
+        "y",
+
+        # Parsing-related
+        "_parsing_kconfigs",
+        "_readline",
+        "_filename",
+        "_linenr",
+        "_include_path",
+        "_filestack",
+        "_line",
+        "_tokens",
+        "_tokens_i",
+        "_reuse_tokens",
+    )
+
+    #
+    # Public interface
+    #
+
+    def __init__(self, filename="Kconfig", warn=True, warn_to_stderr=True,
+                 encoding="utf-8"):
+        """
+        Creates a new Kconfig object by parsing Kconfig files.
+        Note that Kconfig files are not the same as .config files (which store
+        configuration symbol values).
+
+        See the module docstring for some environment variables that influence
+        default warning settings (KCONFIG_WARN_UNDEF and
+        KCONFIG_WARN_UNDEF_ASSIGN).
+
+        Raises KconfigError on syntax/semantic errors, and OSError or (possibly
+        a subclass of) IOError on IO errors ('errno', 'strerror', and
+        'filename' are available). Note that IOError is an alias for OSError on
+        Python 3, so it's enough to catch OSError there. If you need Python 2/3
+        compatibility, it's easiest to catch EnvironmentError, which is a
+        common base class of OSError/IOError on Python 2 and an alias for
+        OSError on Python 3.
+
+        filename (default: "Kconfig"):
+          The Kconfig file to load. For the Linux kernel, you'll want "Kconfig"
+          from the top-level directory, as environment variables will make sure
+          the right Kconfig is included from there (arch/$SRCARCH/Kconfig as of
+          writing).
+
+          If $srctree is set, 'filename' will be looked up relative to it.
+          $srctree is also used to look up source'd files within Kconfig files.
+          See the class documentation.
+
+          If you are using Kconfiglib via 'make scriptconfig', the filename of
+          the base base Kconfig file will be in sys.argv[1]. It's currently
+          always "Kconfig" in practice.
+
+        warn (default: True):
+          True if warnings related to this configuration should be generated.
+          This can be changed later by setting Kconfig.warn to True/False. It
+          is provided as a constructor argument since warnings might be
+          generated during parsing.
+
+          See the other Kconfig.warn_* variables as well, which enable or
+          suppress certain warnings when warnings are enabled.
+
+          All generated warnings are added to the Kconfig.warnings list. See
+          the class documentation.
+
+        warn_to_stderr (default: True):
+          True if warnings should be printed to stderr in addition to being
+          added to Kconfig.warnings.
+
+          This can be changed later by setting Kconfig.warn_to_stderr to
+          True/False.
+
+        encoding (default: "utf-8"):
+          The encoding to use when reading and writing files, and when decoding
+          output from commands run via $(shell). If None, the encoding
+          specified in the current locale will be used.
+
+          The "utf-8" default avoids exceptions on systems that are configured
+          to use the C locale, which implies an ASCII encoding.
+
+          This parameter has no effect on Python 2, due to implementation
+          issues (regular strings turning into Unicode strings, which are
+          distinct in Python 2). Python 2 doesn't decode regular strings
+          anyway.
+
+          Related PEP: https://www.python.org/dev/peps/pep-0538/
+        """
+        self._encoding = encoding
+
+        self.srctree = os.getenv("srctree", "")
+        # A prefix we can reliably strip from glob() results to get a filename
+        # relative to $srctree. relpath() can cause issues for symlinks,
+        # because it assumes symlink/../foo is the same as foo/.
+        self._srctree_prefix = realpath(self.srctree) + os.sep
+
+        self.warn = warn
+        self.warn_to_stderr = warn_to_stderr
+        self.warn_assign_undef = os.getenv("KCONFIG_WARN_UNDEF_ASSIGN") == "y"
+        self.warn_assign_override = True
+        self.warn_assign_redun = True
+        self._warn_assign_no_prompt = True
+
+        self.warnings = []
+
+        self.config_prefix = os.getenv("CONFIG_", "CONFIG_")
+        # Regular expressions for parsing .config files
+        self._set_match = _re_match(self.config_prefix + r"([^=]+)=(.*)")
+        self._unset_match = _re_match(r"# {}([^ ]+) is not set".format(
+            self.config_prefix))
+
+        self.syms = {}
+        self.const_syms = {}
+        self.defined_syms = []
+        self.missing_syms = []
+        self.named_choices = {}
+        self.choices = []
+        self.menus = []
+        self.comments = []
+
+        for nmy in "n", "m", "y":
+            sym = Symbol()
+            sym.kconfig = self
+            sym.name = nmy
+            sym.is_constant = True
+            sym.orig_type = TRISTATE
+            sym._cached_tri_val = STR_TO_TRI[nmy]
+
+            self.const_syms[nmy] = sym
+
+        self.n = self.const_syms["n"]
+        self.m = self.const_syms["m"]
+        self.y = self.const_syms["y"]
+
+        # Make n/m/y well-formed symbols
+        for nmy in "n", "m", "y":
+            sym = self.const_syms[nmy]
+            sym.rev_dep = sym.weak_rev_dep = sym.direct_dep = self.n
+
+        # Maps preprocessor variables names to Variable instances
+        self.variables = {}
+
+        # Predefined preprocessor functions, with min/max number of arguments
+        self._functions = {
+            "info":       (_info_fn,       1, 1),
+            "error-if":   (_error_if_fn,   2, 2),
+            "filename":   (_filename_fn,   0, 0),
+            "lineno":     (_lineno_fn,     0, 0),
+            "shell":      (_shell_fn,      1, 1),
+            "warning-if": (_warning_if_fn, 2, 2),
+        }
+
+        # Add any user-defined preprocessor functions
+        try:
+            self._functions.update(
+                importlib.import_module(
+                    os.getenv("KCONFIG_FUNCTIONS", "kconfigfunctions")
+                ).functions)
+        except ImportError:
+            pass
+
+        # This determines whether previously unseen symbols are registered.
+        # They shouldn't be if we parse expressions after parsing, as part of
+        # Kconfig.eval_string().
+        self._parsing_kconfigs = True
+
+        self.modules = self._lookup_sym("MODULES")
+        self.defconfig_list = None
+
+        self.top_node = MenuNode()
+        self.top_node.kconfig = self
+        self.top_node.item = MENU
+        self.top_node.is_menuconfig = True
+        self.top_node.visibility = self.y
+        self.top_node.prompt = ("Main menu", self.y)
+        self.top_node.parent = None
+        self.top_node.dep = self.y
+        self.top_node.filename = filename
+        self.top_node.linenr = 1
+        self.top_node.include_path = ()
+
+        # Parse the Kconfig files
+
+        # Not used internally. Provided as a convenience.
+        self.kconfig_filenames = [filename]
+        self.env_vars = set()
+
+        # Keeps track of the location in the parent Kconfig files. Kconfig
+        # files usually source other Kconfig files. See _enter_file().
+        self._filestack = []
+        self._include_path = ()
+
+        # The current parsing location
+        self._filename = filename
+        self._linenr = 0
+
+        # Used to avoid retokenizing lines when we discover that they're not
+        # part of the construct currently being parsed. This is kinda like an
+        # unget operation.
+        self._reuse_tokens = False
+
+        # Open the top-level Kconfig file. Store the readline() method directly
+        # as a small optimization.
+        self._readline = self._open(join(self.srctree, filename), "r").readline
+
+        try:
+            # Parse the Kconfig files
+            self._parse_block(None, self.top_node, self.top_node)
+            self.top_node.list = self.top_node.next
+            self.top_node.next = None
+        except UnicodeDecodeError as e:
+            _decoding_error(e, self._filename)
+
+        # Close the top-level Kconfig file. __self__ fetches the 'file' object
+        # for the method.
+        self._readline.__self__.close()
+
+        self._parsing_kconfigs = False
+
+        # Do various menu tree post-processing
+        self._finalize_node(self.top_node, self.y)
+
+        self.unique_defined_syms = _ordered_unique(self.defined_syms)
+        self.unique_choices = _ordered_unique(self.choices)
+
+        # Do sanity checks. Some of these depend on everything being finalized.
+        self._check_sym_sanity()
+        self._check_choice_sanity()
+
+        # KCONFIG_STRICT is an older alias for KCONFIG_WARN_UNDEF, supported
+        # for backwards compatibility
+        if os.getenv("KCONFIG_WARN_UNDEF") == "y" or \
+           os.getenv("KCONFIG_STRICT") == "y":
+
+            self._check_undef_syms()
+
+        # Build Symbol._dependents for all symbols and choices
+        self._build_dep()
+
+        # Check for dependency loops
+        check_dep_loop_sym = _check_dep_loop_sym  # Micro-optimization
+        for sym in self.unique_defined_syms:
+            check_dep_loop_sym(sym, False)
+
+        # Add extra dependencies from choices to choice symbols that get
+        # awkward during dependency loop detection
+        self._add_choice_deps()
+
+    @property
+    def mainmenu_text(self):
+        """
+        See the class documentation.
+        """
+        return self.top_node.prompt[0]
+
+    @property
+    def defconfig_filename(self):
+        """
+        See the class documentation.
+        """
+        if self.defconfig_list:
+            for filename, cond in self.defconfig_list.defaults:
+                if expr_value(cond):
+                    try:
+                        with self._open_config(filename.str_value) as f:
+                            return f.name
+                    except EnvironmentError:
+                        continue
+
+        return None
+
+    def load_config(self, filename=None, replace=True, verbose=None):
+        """
+        Loads symbol values from a file in the .config format. Equivalent to
+        calling Symbol.set_value() to set each of the values.
+
+        "# CONFIG_FOO is not set" within a .config file sets the user value of
+        FOO to n. The C tools work the same way.
+
+        For each symbol, the Symbol.user_value attribute holds the value the
+        symbol was assigned in the .config file (if any). The user value might
+        differ from Symbol.str/tri_value if there are unsatisfied dependencies.
+
+        Calling this function also updates the Kconfig.missing_syms attribute
+        with a list of all assignments to undefined symbols within the
+        configuration file. Kconfig.missing_syms is cleared if 'replace' is
+        True, and appended to otherwise. See the documentation for
+        Kconfig.missing_syms as well.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        filename (default: None):
+          Path to load configuration from (a string). Respects $srctree if set
+          (see the class documentation).
+
+          If 'filename' is None (the default), the configuration file to load
+          (if any) is calculated automatically, giving the behavior you'd
+          usually want:
+
+            1. If the KCONFIG_CONFIG environment variable is set, it gives the
+               path to the configuration file to load. Otherwise, ".config" is
+               used. See standard_config_filename().
+
+            2. If the path from (1.) doesn't exist, the configuration file
+               given by kconf.defconfig_filename is loaded instead, which is
+               derived from the 'option defconfig_list' symbol.
+
+            3. If (1.) and (2.) fail to find a configuration file to load, no
+               configuration file is loaded, and symbols retain their current
+               values (e.g., their default values). This is not an error.
+
+           See the return value as well.
+
+        replace (default: True):
+          If True, all existing user values will be cleared before loading the
+          .config. Pass False to merge configurations.
+
+        verbose (default: None):
+          Limited backwards compatibility to prevent crashes. A warning is
+          printed if anything but None is passed.
+
+          Prior to Kconfiglib 12.0.0, this option enabled printing of messages
+          to stdout when 'filename' was None. A message is (always) returned
+          now instead, which is more flexible.
+
+          Will probably be removed in some future version.
+
+        Returns a string with a message saying which file got loaded (or
+        possibly that no file got loaded, when 'filename' is None). This is
+        meant to reduce boilerplate in tools, which can do e.g.
+        print(kconf.load_config()). The returned message distinguishes between
+        loading (replace == True) and merging (replace == False).
+        """
+        if verbose is not None:
+            _warn_verbose_deprecated("load_config")
+
+        msg = None
+        if filename is None:
+            filename = standard_config_filename()
+            if not exists(filename) and \
+               not exists(join(self.srctree, filename)):
+                defconfig = self.defconfig_filename
+                if defconfig is None:
+                    return "Using default symbol values (no '{}')" \
+                           .format(filename)
+
+                msg = " default configuration '{}' (no '{}')" \
+                      .format(defconfig, filename)
+                filename = defconfig
+
+        if not msg:
+            msg = " configuration '{}'".format(filename)
+
+        # Disable the warning about assigning to symbols without prompts. This
+        # is normal and expected within a .config file.
+        self._warn_assign_no_prompt = False
+
+        # This stub only exists to make sure _warn_assign_no_prompt gets
+        # reenabled
+        try:
+            self._load_config(filename, replace)
+        except UnicodeDecodeError as e:
+            _decoding_error(e, filename)
+        finally:
+            self._warn_assign_no_prompt = True
+
+        return ("Loaded" if replace else "Merged") + msg
+
+    def _load_config(self, filename, replace):
+        with self._open_config(filename) as f:
+            if replace:
+                self.missing_syms = []
+
+                # If we're replacing the configuration, keep track of which
+                # symbols and choices got set so that we can unset the rest
+                # later. This avoids invalidating everything and is faster.
+                # Another benefit is that invalidation must be rock solid for
+                # it to work, making it a good test.
+
+                for sym in self.unique_defined_syms:
+                    sym._was_set = False
+
+                for choice in self.unique_choices:
+                    choice._was_set = False
+
+            # Small optimizations
+            set_match = self._set_match
+            unset_match = self._unset_match
+            get_sym = self.syms.get
+
+            for linenr, line in enumerate(f, 1):
+                # The C tools ignore trailing whitespace
+                line = line.rstrip()
+
+                match = set_match(line)
+                if match:
+                    name, val = match.groups()
+                    sym = get_sym(name)
+                    if not sym or not sym.nodes:
+                        self._undef_assign(name, val, filename, linenr)
+                        continue
+
+                    if sym.orig_type in _BOOL_TRISTATE:
+                        # The C implementation only checks the first character
+                        # to the right of '=', for whatever reason
+                        if not (sym.orig_type is BOOL
+                                and val.startswith(("y", "n")) or
+                                sym.orig_type is TRISTATE
+                                and val.startswith(("y", "m", "n"))):
+                            self._warn("'{}' is not a valid value for the {} "
+                                       "symbol {}. Assignment ignored."
+                                       .format(val, TYPE_TO_STR[sym.orig_type],
+                                               _name_and_loc(sym)),
+                                       filename, linenr)
+                            continue
+
+                        val = val[0]
+
+                        if sym.choice and val != "n":
+                            # During .config loading, we infer the mode of the
+                            # choice from the kind of values that are assigned
+                            # to the choice symbols
+
+                            prev_mode = sym.choice.user_value
+                            if prev_mode is not None and \
+                               TRI_TO_STR[prev_mode] != val:
+
+                                self._warn("both m and y assigned to symbols "
+                                           "within the same choice",
+                                           filename, linenr)
+
+                            # Set the choice's mode
+                            sym.choice.set_value(val)
+
+                    elif sym.orig_type is STRING:
+                        match = _conf_string_match(val)
+                        if not match:
+                            self._warn("malformed string literal in "
+                                       "assignment to {}. Assignment ignored."
+                                       .format(_name_and_loc(sym)),
+                                       filename, linenr)
+                            continue
+
+                        val = unescape(match.group(1))
+
+                else:
+                    match = unset_match(line)
+                    if not match:
+                        # Print a warning for lines that match neither
+                        # set_match() nor unset_match() and that are not blank
+                        # lines or comments. 'line' has already been
+                        # rstrip()'d, so blank lines show up as "" here.
+                        if line and not line.lstrip().startswith("#"):
+                            self._warn("ignoring malformed line '{}'"
+                                       .format(line),
+                                       filename, linenr)
+
+                        continue
+
+                    name = match.group(1)
+                    sym = get_sym(name)
+                    if not sym or not sym.nodes:
+                        self._undef_assign(name, "n", filename, linenr)
+                        continue
+
+                    if sym.orig_type not in _BOOL_TRISTATE:
+                        continue
+
+                    val = "n"
+
+                # Done parsing the assignment. Set the value.
+
+                if sym._was_set:
+                    self._assigned_twice(sym, val, filename, linenr)
+
+                sym.set_value(val)
+
+        if replace:
+            # If we're replacing the configuration, unset the symbols that
+            # didn't get set
+
+            for sym in self.unique_defined_syms:
+                if not sym._was_set:
+                    sym.unset_value()
+
+            for choice in self.unique_choices:
+                if not choice._was_set:
+                    choice.unset_value()
+
+    def _undef_assign(self, name, val, filename, linenr):
+        # Called for assignments to undefined symbols during .config loading
+
+        self.missing_syms.append((name, val))
+        if self.warn_assign_undef:
+            self._warn(
+                "attempt to assign the value '{}' to the undefined symbol {}"
+                .format(val, name), filename, linenr)
+
+    def _assigned_twice(self, sym, new_val, filename, linenr):
+        # Called when a symbol is assigned more than once in a .config file
+
+        # Use strings for bool/tristate user values in the warning
+        if sym.orig_type in _BOOL_TRISTATE:
+            user_val = TRI_TO_STR[sym.user_value]
+        else:
+            user_val = sym.user_value
+
+        msg = '{} set more than once. Old value "{}", new value "{}".'.format(
+            _name_and_loc(sym), user_val, new_val)
+
+        if user_val == new_val:
+            if self.warn_assign_redun:
+                self._warn(msg, filename, linenr)
+        elif self.warn_assign_override:
+            self._warn(msg, filename, linenr)
+
+    def write_autoconf(self, filename,
+                       header="/* Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) */\n"):
+        r"""
+        Writes out symbol values as a C header file, matching the format used
+        by include/generated/autoconf.h in the kernel.
+
+        The ordering of the #defines matches the one generated by
+        write_config(). The order in the C implementation depends on the hash
+        table implementation as of writing, and so won't match.
+
+        If 'filename' exists and its contents is identical to what would get
+        written out, it is left untouched. This avoids updating file metadata
+        like the modification time and possibly triggering redundant work in
+        build tools.
+
+        filename:
+          Self-explanatory.
+
+        header (default: "/* Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib) */\n"):
+          Text that will be inserted verbatim at the beginning of the file. You
+          would usually want it enclosed in '/* */' to make it a C comment,
+          and include a final terminating newline.
+        """
+        self._write_if_changed(filename, self._autoconf_contents(header))
+
+    def _autoconf_contents(self, header):
+        # write_autoconf() helper. Returns the contents to write as a string,
+        # with 'header' at the beginning.
+
+        # "".join()ed later
+        chunks = [header]
+        add = chunks.append
+
+        for sym in self.unique_defined_syms:
+            # _write_to_conf is determined when the value is calculated. This
+            # is a hidden function call due to property magic.
+            #
+            # Note: In client code, you can check if sym.config_string is empty
+            # instead, to avoid accessing the internal _write_to_conf variable
+            # (though it's likely to keep working).
+            val = sym.str_value
+            if not sym._write_to_conf:
+                continue
+
+            if sym.orig_type in _BOOL_TRISTATE:
+                if val == "y":
+                    add("#define {}{} 1\n"
+                        .format(self.config_prefix, sym.name))
+                elif val == "m":
+                    add("#define {}{}_MODULE 1\n"
+                        .format(self.config_prefix, sym.name))
+
+            elif sym.orig_type is STRING:
+                add('#define {}{} "{}"\n'
+                    .format(self.config_prefix, sym.name, escape(val)))
+
+            else:  # sym.orig_type in _INT_HEX:
+                if sym.orig_type is HEX and \
+                   not val.startswith(("0x", "0X")):
+                    val = "0x" + val
+
+                add("#define {}{} {}\n"
+                    .format(self.config_prefix, sym.name, val))
+
+        return "".join(chunks)
+
+    def write_config(self, filename=None,
+                     header="# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n",
+                     save_old=True, verbose=None):
+        r"""
+        Writes out symbol values in the .config format. The format matches the
+        C implementation, including ordering.
+
+        Symbols appear in the same order in generated .config files as they do
+        in the Kconfig files. For symbols defined in multiple locations, a
+        single assignment is written out corresponding to the first location
+        where the symbol is defined.
+
+        See the 'Intro to symbol values' section in the module docstring to
+        understand which symbols get written out.
+
+        If 'filename' exists and its contents is identical to what would get
+        written out, it is left untouched. This avoids updating file metadata
+        like the modification time and possibly triggering redundant work in
+        build tools.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        filename (default: None):
+          Filename to save configuration to (a string).
+
+          If None (the default), the filename in the environment variable
+          KCONFIG_CONFIG is used if set, and ".config" otherwise. See
+          standard_config_filename().
+
+        header (default: "# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n"):
+          Text that will be inserted verbatim at the beginning of the file. You
+          would usually want each line to start with '#' to make it a comment,
+          and include a final terminating newline.
+
+        save_old (default: True):
+          If True and <filename> already exists, a copy of it will be saved to
+          <filename>.old in the same directory before the new configuration is
+          written.
+
+          Errors are silently ignored if <filename>.old cannot be written (e.g.
+          due to being a directory, or <filename> being something like
+          /dev/null).
+
+        verbose (default: None):
+          Limited backwards compatibility to prevent crashes. A warning is
+          printed if anything but None is passed.
+
+          Prior to Kconfiglib 12.0.0, this option enabled printing of messages
+          to stdout when 'filename' was None. A message is (always) returned
+          now instead, which is more flexible.
+
+          Will probably be removed in some future version.
+
+        Returns a string with a message saying which file got saved. This is
+        meant to reduce boilerplate in tools, which can do e.g.
+        print(kconf.write_config()).
+        """
+        if verbose is not None:
+            _warn_verbose_deprecated("write_config")
+
+        if filename is None:
+            filename = standard_config_filename()
+
+        contents = self._config_contents(header)
+        if self._contents_eq(filename, contents):
+            return "No change to '{}'".format(filename)
+
+        if save_old:
+            _save_old(filename)
+
+        with self._open(filename, "w") as f:
+            f.write(contents)
+
+        return "Configuration saved to '{}'".format(filename)
+
+    def _config_contents(self, header):
+        # write_config() helper. Returns the contents to write as a string,
+        # with 'header' at the beginning.
+        #
+        # More memory friendly would be to 'yield' the strings and
+        # "".join(_config_contents()), but it was a bit slower on my system.
+
+        # node_iter() was used here before commit 3aea9f7 ("Add '# end of
+        # <menu>' after menus in .config"). Those comments get tricky to
+        # implement with it.
+
+        for sym in self.unique_defined_syms:
+            sym._visited = False
+
+        # Did we just print an '# end of ...' comment?
+        after_end_comment = False
+
+        # "".join()ed later
+        chunks = [header]
+        add = chunks.append
+
+        node = self.top_node
+        while 1:
+            # Jump to the next node with an iterative tree walk
+            if node.list:
+                node = node.list
+            elif node.next:
+                node = node.next
+            else:
+                while node.parent:
+                    node = node.parent
+
+                    # Add a comment when leaving visible menus
+                    if node.item is MENU and expr_value(node.dep) and \
+                       expr_value(node.visibility) and \
+                       node is not self.top_node:
+                        add("# end of {}\n".format(node.prompt[0]))
+                        after_end_comment = True
+
+                    if node.next:
+                        node = node.next
+                        break
+                else:
+                    # No more nodes
+                    return "".join(chunks)
+
+            # Generate configuration output for the node
+
+            item = node.item
+
+            if item.__class__ is Symbol:
+                if item._visited:
+                    continue
+                item._visited = True
+
+                conf_string = item.config_string
+                if not conf_string:
+                    continue
+
+                if after_end_comment:
+                    # Add a blank line before the first symbol printed after an
+                    # '# end of ...' comment
+                    after_end_comment = False
+                    add("\n")
+                add(conf_string)
+
+            elif expr_value(node.dep) and \
+                 ((item is MENU and expr_value(node.visibility)) or
+                  item is COMMENT):
+
+                add("\n#\n# {}\n#\n".format(node.prompt[0]))
+                after_end_comment = False
+
+    def write_min_config(self, filename,
+                         header="# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n"):
+        """
+        Writes out a "minimal" configuration file, omitting symbols whose value
+        matches their default value. The format matches the one produced by
+        'make savedefconfig'.
+
+        The resulting configuration file is incomplete, but a complete
+        configuration can be derived from it by loading it. Minimal
+        configuration files can serve as a more manageable configuration format
+        compared to a "full" .config file, especially when configurations files
+        are merged or edited by hand.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        filename:
+          Self-explanatory.
+
+        header (default: "# Generated by Kconfiglib (https://github.com/ulfalizer/Kconfiglib)\n"):
+          Text that will be inserted verbatim at the beginning of the file. You
+          would usually want each line to start with '#' to make it a comment,
+          and include a final terminating newline.
+
+        Returns a string with a message saying which file got saved. This is
+        meant to reduce boilerplate in tools, which can do e.g.
+        print(kconf.write_min_config()).
+        """
+        contents = self._min_config_contents(header)
+        if self._contents_eq(filename, contents):
+            return "No change to '{}'".format(filename)
+
+        with self._open(filename, "w") as f:
+            f.write(contents)
+
+        return "Minimal configuration saved to '{}'".format(filename)
+
+    def _min_config_contents(self, header):
+        # write_min_config() helper. Returns the contents to write as a string,
+        # with 'header' at the beginning.
+
+        chunks = [header]
+        add = chunks.append
+
+        for sym in self.unique_defined_syms:
+            # Skip symbols that cannot be changed. Only check
+            # non-choice symbols, as selects don't affect choice
+            # symbols.
+            if not sym.choice and \
+               sym.visibility <= expr_value(sym.rev_dep):
+                continue
+
+            # Skip symbols whose value matches their default
+            if sym.str_value == sym._str_default():
+                continue
+
+            # Skip symbols that would be selected by default in a
+            # choice, unless the choice is optional or the symbol type
+            # isn't bool (it might be possible to set the choice mode
+            # to n or the symbol to m in those cases).
+            if sym.choice and \
+               not sym.choice.is_optional and \
+               sym.choice._selection_from_defaults() is sym and \
+               sym.orig_type is BOOL and \
+               sym.tri_value == 2:
+                continue
+
+            add(sym.config_string)
+
+        return "".join(chunks)
+
+    def sync_deps(self, path):
+        """
+        Creates or updates a directory structure that can be used to avoid
+        doing a full rebuild whenever the configuration is changed, mirroring
+        include/config/ in the kernel.
+
+        This function is intended to be called during each build, before
+        compiling source files that depend on configuration symbols.
+
+        See the Kconfig.__init__() docstring for raised exceptions
+        (OSError/IOError). KconfigError is never raised here.
+
+        path:
+          Path to directory
+
+        sync_deps(path) does the following:
+
+          1. If the directory <path> does not exist, it is created.
+
+          2. If <path>/auto.conf exists, old symbol values are loaded from it,
+             which are then compared against the current symbol values. If a
+             symbol has changed value (would generate different output in
+             autoconf.h compared to before), the change is signaled by
+             touch'ing a file corresponding to the symbol.
+
+             The first time sync_deps() is run on a directory, <path>/auto.conf
+             won't exist, and no old symbol values will be available. This
+             logically has the same effect as updating the entire
+             configuration.
+
+             The path to a symbol's file is calculated from the symbol's name
+             by replacing all '_' with '/' and appending '.h'. For example, the
+             symbol FOO_BAR_BAZ gets the file <path>/foo/bar/baz.h, and FOO
+             gets the file <path>/foo.h.
+
+             This scheme matches the C tools. The point is to avoid having a
+             single directory with a huge number of files, which the underlying
+             filesystem might not handle well.
+
+          3. A new auto.conf with the current symbol values is written, to keep
+             track of them for the next build.
+
+             If auto.conf exists and its contents is identical to what would
+             get written out, it is left untouched. This avoids updating file
+             metadata like the modification time and possibly triggering
+             redundant work in build tools.
+
+
+        The last piece of the puzzle is knowing what symbols each source file
+        depends on. Knowing that, dependencies can be added from source files
+        to the files corresponding to the symbols they depends on. The source
+        file will then get recompiled (only) when the symbol value changes
+        (provided sync_deps() is run first during each build).
+
+        The tool in the kernel that extracts symbol dependencies from source
+        files is scripts/basic/fixdep.c. Missing symbol files also correspond
+        to "not changed", which fixdep deals with by using the $(wildcard) Make
+        function when adding symbol prerequisites to source files.
+
+        In case you need a different scheme for your project, the sync_deps()
+        implementation can be used as a template.
+        """
+        if not exists(path):
+            os.mkdir(path, 0o755)
+
+        # Load old values from auto.conf, if any
+        self._load_old_vals(path)
+
+        for sym in self.unique_defined_syms:
+            # _write_to_conf is determined when the value is calculated. This
+            # is a hidden function call due to property magic.
+            #
+            # Note: In client code, you can check if sym.config_string is empty
+            # instead, to avoid accessing the internal _write_to_conf variable
+            # (though it's likely to keep working).
+            val = sym.str_value
+
+            # n tristate values do not get written to auto.conf and autoconf.h,
+            # making a missing symbol logically equivalent to n
+
+            if sym._write_to_conf:
+                if sym._old_val is None and \
+                   sym.orig_type in _BOOL_TRISTATE and \
+                   val == "n":
+                    # No old value (the symbol was missing or n), new value n.
+                    # No change.
+                    continue
+
+                if val == sym._old_val:
+                    # New value matches old. No change.
+                    continue
+
+            elif sym._old_val is None:
+                # The symbol wouldn't appear in autoconf.h (because
+                # _write_to_conf is false), and it wouldn't have appeared in
+                # autoconf.h previously either (because it didn't appear in
+                # auto.conf). No change.
+                continue
+
+            # 'sym' has a new value. Flag it.
+            _touch_dep_file(path, sym.name)
+
+        # Remember the current values as the "new old" values.
+        #
+        # This call could go anywhere after the call to _load_old_vals(), but
+        # putting it last means _sync_deps() can be safely rerun if it fails
+        # before this point.
+        self._write_old_vals(path)
+
+    def _load_old_vals(self, path):
+        # Loads old symbol values from auto.conf into a dedicated
+        # Symbol._old_val field. Mirrors load_config().
+        #
+        # The extra field could be avoided with some trickery involving dumping
+        # symbol values and restoring them later, but this is simpler and
+        # faster. The C tools also use a dedicated field for this purpose.
+
+        for sym in self.unique_defined_syms:
+            sym._old_val = None
+
+        try:
+            auto_conf = self._open(join(path, "auto.conf"), "r")
+        except EnvironmentError as e:
+            if e.errno == errno.ENOENT:
+                # No old values
+                return
+            raise
+
+        with auto_conf as f:
+            for line in f:
+                match = self._set_match(line)
+                if not match:
+                    # We only expect CONFIG_FOO=... (and possibly a header
+                    # comment) in auto.conf
+                    continue
+
+                name, val = match.groups()
+                if name in self.syms:
+                    sym = self.syms[name]
+
+                    if sym.orig_type is STRING:
+                        match = _conf_string_match(val)
+                        if not match:
+                            continue
+                        val = unescape(match.group(1))
+
+                    self.syms[name]._old_val = val
+                else:
+                    # Flag that the symbol no longer exists, in
+                    # case something still depends on it
+                    _touch_dep_file(path, name)
+
+    def _write_old_vals(self, path):
+        # Helper for writing auto.conf. Basically just a simplified
+        # write_config() that doesn't write any comments (including
+        # '# CONFIG_FOO is not set' comments). The format matches the C
+        # implementation, though the ordering is arbitrary there (depends on
+        # the hash table implementation).
+        #
+        # A separate helper function is neater than complicating write_config()
+        # by passing a flag to it, plus we only need to look at symbols here.
+
+        self._write_if_changed(
+            os.path.join(path, "auto.conf"),
+            self._old_vals_contents())
+
+    def _old_vals_contents(self):
+        # _write_old_vals() helper. Returns the contents to write as a string.
+
+        # Temporary list instead of generator makes this a bit faster
+        return "".join([
+            sym.config_string for sym in self.unique_defined_syms
+                if not (sym.orig_type in _BOOL_TRISTATE and not sym.tri_value)
+        ])
+
+    def node_iter(self, unique_syms=False):
+        """
+        Returns a generator for iterating through all MenuNode's in the Kconfig
+        tree. The iteration is done in Kconfig definition order (each node is
+        visited before its children, and the children of a node are visited
+        before the next node).
+
+        The Kconfig.top_node menu node is skipped. It contains an implicit menu
+        that holds the top-level items.
+
+        As an example, the following code will produce a list equal to
+        Kconfig.defined_syms:
+
+          defined_syms = [node.item for node in kconf.node_iter()
+                          if isinstance(node.item, Symbol)]
+
+        unique_syms (default: False):
+          If True, only the first MenuNode will be included for symbols defined
+          in multiple locations.
+
+          Using kconf.node_iter(True) in the example above would give a list
+          equal to unique_defined_syms.
+        """
+        if unique_syms:
+            for sym in self.unique_defined_syms:
+                sym._visited = False
+
+        node = self.top_node
+        while 1:
+            # Jump to the next node with an iterative tree walk
+            if node.list:
+                node = node.list
+            elif node.next:
+                node = node.next
+            else:
+                while node.parent:
+                    node = node.parent
+                    if node.next:
+                        node = node.next
+                        break
+                else:
+                    # No more nodes
+                    return
+
+            if unique_syms and node.item.__class__ is Symbol:
+                if node.item._visited:
+                    continue
+                node.item._visited = True
+
+            yield node
+
+    def eval_string(self, s):
+        """
+        Returns the tristate value of the expression 's', represented as 0, 1,
+        and 2 for n, m, and y, respectively. Raises KconfigError on syntax
+        errors. Warns if undefined symbols are referenced.
+
+        As an example, if FOO and BAR are tristate symbols at least one of
+        which has the value y, then eval_string("y && (FOO || BAR)") returns
+        2 (y).
+
+        To get the string value of non-bool/tristate symbols, use
+        Symbol.str_value. eval_string() always returns a tristate value, and
+        all non-bool/tristate symbols have the tristate value 0 (n).
+
+        The expression parsing is consistent with how parsing works for
+        conditional ('if ...') expressions in the configuration, and matches
+        the C implementation. m is rewritten to 'm && MODULES', so
+        eval_string("m") will return 0 (n) unless modules are enabled.
+        """
+        # The parser is optimized to be fast when parsing Kconfig files (where
+        # an expression can never appear at the beginning of a line). We have
+        # to monkey-patch things a bit here to reuse it.
+
+        self._filename = None
+
+        self._tokens = self._tokenize("if " + s)
+        # Strip "if " to avoid giving confusing error messages
+        self._line = s
+        self._tokens_i = 1  # Skip the 'if' token
+
+        return expr_value(self._expect_expr_and_eol())
+
+    def unset_values(self):
+        """
+        Removes any user values from all symbols, as if Kconfig.load_config()
+        or Symbol.set_value() had never been called.
+        """
+        self._warn_assign_no_prompt = False
+        try:
+            # set_value() already rejects undefined symbols, and they don't
+            # need to be invalidated (because their value never changes), so we
+            # can just iterate over defined symbols
+            for sym in self.unique_defined_syms:
+                sym.unset_value()
+
+            for choice in self.unique_choices:
+                choice.unset_value()
+        finally:
+            self._warn_assign_no_prompt = True
+
+    def enable_warnings(self):
+        """
+        Do 'Kconfig.warn = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn = True
+
+    def disable_warnings(self):
+        """
+        Do 'Kconfig.warn = False' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn = False
+
+    def enable_stderr_warnings(self):
+        """
+        Do 'Kconfig.warn_to_stderr = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_to_stderr = True
+
+    def disable_stderr_warnings(self):
+        """
+        Do 'Kconfig.warn_to_stderr = False' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_to_stderr = False
+
+    def enable_undef_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_undef = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_assign_undef = True
+
+    def disable_undef_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_undef = False' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_undef = False
+
+    def enable_override_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_override = True' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_override = True
+
+    def disable_override_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_override = False' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_override = False
+
+    def enable_redun_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_redun = True' instead. Maintained for backwards
+        compatibility.
+        """
+        self.warn_assign_redun = True
+
+    def disable_redun_warnings(self):
+        """
+        Do 'Kconfig.warn_assign_redun = False' instead. Maintained for
+        backwards compatibility.
+        """
+        self.warn_assign_redun = False
+
+    def __repr__(self):
+        """
+        Returns a string with information about the Kconfig object when it is
+        evaluated on e.g. the interactive Python prompt.
+        """
+        def status(flag):
+            return "enabled" if flag else "disabled"
+
+        return "<{}>".format(", ".join((
+            "configuration with {} symbols".format(len(self.syms)),
+            'main menu prompt "{}"'.format(self.mainmenu_text),
+            "srctree is current directory" if not self.srctree else
+                'srctree "{}"'.format(self.srctree),
+            'config symbol prefix "{}"'.format(self.config_prefix),
+            "warnings " + status(self.warn),
+            "printing of warnings to stderr " + status(self.warn_to_stderr),
+            "undef. symbol assignment warnings " +
+                status(self.warn_assign_undef),
+            "overriding symbol assignment warnings " +
+                status(self.warn_assign_override),
+            "redundant symbol assignment warnings " +
+                status(self.warn_assign_redun)
+        )))
+
+    #
+    # Private methods
+    #
+
+
+    #
+    # File reading
+    #
+
+    def _open_config(self, filename):
+        # Opens a .config file. First tries to open 'filename', then
+        # '$srctree/filename' if $srctree was set when the configuration was
+        # loaded.
+
+        try:
+            return self._open(filename, "r")
+        except EnvironmentError as e:
+            # This will try opening the same file twice if $srctree is unset,
+            # but it's not a big deal
+            try:
+                return self._open(join(self.srctree, filename), "r")
+            except EnvironmentError as e2:
+                # This is needed for Python 3, because e2 is deleted after
+                # the try block:
+                #
+                # https://docs.python.org/3/reference/compound_stmts.html#the-try-statement
+                e = e2
+
+            raise _KconfigIOError(
+                e, "Could not open '{}' ({}: {}). Check that the $srctree "
+                   "environment variable ({}) is set correctly."
+                   .format(filename, errno.errorcode[e.errno], e.strerror,
+                           "set to '{}'".format(self.srctree) if self.srctree
+                               else "unset or blank"))
+
+    def _enter_file(self, filename):
+        # Jumps to the beginning of a sourced Kconfig file, saving the previous
+        # position and file object.
+        #
+        # filename:
+        #   Absolute path to file
+
+        # Path relative to $srctree, stored in e.g. self._filename
+        # (which makes it indirectly show up in MenuNode.filename). Equals
+        # 'filename' for absolute paths passed to 'source'.
+        if filename.startswith(self._srctree_prefix):
+            # Relative path (or a redundant absolute path to within $srctree,
+            # but it's probably fine to reduce those too)
+            rel_filename = filename[len(self._srctree_prefix):]
+        else:
+            # Absolute path
+            rel_filename = filename
+
+        self.kconfig_filenames.append(rel_filename)
+
+        # The parent Kconfig files are represented as a list of
+        # (<include path>, <Python 'file' object for Kconfig file>) tuples.
+        #
+        # <include path> is immutable and holds a *tuple* of
+        # (<filename>, <linenr>) tuples, giving the locations of the 'source'
+        # statements in the parent Kconfig files. The current include path is
+        # also available in Kconfig._include_path.
+        #
+        # The point of this redundant setup is to allow Kconfig._include_path
+        # to be assigned directly to MenuNode.include_path without having to
+        # copy it, sharing it wherever possible.
+
+        # Save include path and 'file' object (via its 'readline' function)
+        # before entering the file
+        self._filestack.append((self._include_path, self._readline))
+
+        # _include_path is a tuple, so this rebinds the variable instead of
+        # doing in-place modification
+        self._include_path += ((self._filename, self._linenr),)
+
+        # Check for recursive 'source'
+        for name, _ in self._include_path:
+            if name == rel_filename:
+                raise KconfigError(
+                    "\n{}:{}: recursive 'source' of '{}' detected. Check that "
+                    "environment variables are set correctly.\n"
+                    "Include path:\n{}"
+                    .format(self._filename, self._linenr, rel_filename,
+                            "\n".join("{}:{}".format(name, linenr)
+                                      for name, linenr in self._include_path)))
+
+        try:
+            self._readline = self._open(filename, "r").readline
+        except EnvironmentError as e:
+            # We already know that the file exists
+            raise _KconfigIOError(
+                e, "{}:{}: Could not open '{}' (in '{}') ({}: {})"
+                   .format(self._filename, self._linenr, filename,
+                           self._line.strip(),
+                           errno.errorcode[e.errno], e.strerror))
+
+        self._filename = rel_filename
+        self._linenr = 0
+
+    def _leave_file(self):
+        # Returns from a Kconfig file to the file that sourced it. See
+        # _enter_file().
+
+        # Restore location from parent Kconfig file
+        self._filename, self._linenr = self._include_path[-1]
+        # Restore include path and 'file' object
+        self._readline.__self__.close()  # __self__ fetches the 'file' object
+        self._include_path, self._readline = self._filestack.pop()
+
+    def _next_line(self):
+        # Fetches and tokenizes the next line from the current Kconfig file.
+        # Returns False at EOF and True otherwise.
+
+        # We might already have tokens from parsing a line and discovering that
+        # it's part of a different construct
+        if self._reuse_tokens:
+            self._reuse_tokens = False
+            # self._tokens_i is known to be 1 here, because _parse_properties()
+            # leaves it like that when it can't recognize a line (or parses
+            # a help text)
+            return True
+
+        # readline() returns '' over and over at EOF, which we rely on for help
+        # texts at the end of files (see _line_after_help())
+        line = self._readline()
+        if not line:
+            return False
+        self._linenr += 1
+
+        # Handle line joining
+        while line.endswith("\\\n"):
+            line = line[:-2] + self._readline()
+            self._linenr += 1
+
+        self._tokens = self._tokenize(line)
+        # Initialize to 1 instead of 0 to factor out code from _parse_block()
+        # and _parse_properties(). They immediately fetch self._tokens[0].
+        self._tokens_i = 1
+
+        return True
+
+    def _line_after_help(self, line):
+        # Tokenizes a line after a help text. This case is special in that the
+        # line has already been fetched (to discover that it isn't part of the
+        # help text).
+        #
+        # An earlier version used a _saved_line variable instead that was
+        # checked in _next_line(). This special-casing gets rid of it and makes
+        # _reuse_tokens alone sufficient to handle unget.
+
+        # Handle line joining
+        while line.endswith("\\\n"):
+            line = line[:-2] + self._readline()
+            self._linenr += 1
+
+        self._tokens = self._tokenize(line)
+        self._reuse_tokens = True
+
+    def _write_if_changed(self, filename, contents):
+        # Writes 'contents' into 'filename', but only if it differs from the
+        # current contents of the file.
+        #
+        # Another variant would be write a temporary file on the same
+        # filesystem, compare the files, and rename() the temporary file if it
+        # differs, but it breaks stuff like write_config("/dev/null"), which is
+        # used out there to force evaluation-related warnings to be generated.
+        # This simple version is pretty failsafe and portable.
+
+        if not self._contents_eq(filename, contents):
+            with self._open(filename, "w") as f:
+                f.write(contents)
+
+    def _contents_eq(self, filename, contents):
+        # Returns True if the contents of 'filename' is 'contents' (a string),
+        # and False otherwise (including if 'filename' can't be opened/read)
+
+        try:
+            with self._open(filename, "r") as f:
+                # Robust re. things like encoding and line endings (mmap()
+                # trickery isn't)
+                return f.read(len(contents) + 1) == contents
+        except EnvironmentError:
+            # If the error here would prevent writing the file as well, we'll
+            # notice it later
+            return False
+
+    #
+    # Tokenization
+    #
+
+    def _lookup_sym(self, name):
+        # Fetches the symbol 'name' from the symbol table, creating and
+        # registering it if it does not exist. If '_parsing_kconfigs' is False,
+        # it means we're in eval_string(), and new symbols won't be registered.
+
+        if name in self.syms:
+            return self.syms[name]
+
+        sym = Symbol()
+        sym.kconfig = self
+        sym.name = name
+        sym.is_constant = False
+        sym.rev_dep = sym.weak_rev_dep = sym.direct_dep = self.n
+
+        if self._parsing_kconfigs:
+            self.syms[name] = sym
+        else:
+            self._warn("no symbol {} in configuration".format(name))
+
+        return sym
+
+    def _lookup_const_sym(self, name):
+        # Like _lookup_sym(), for constant (quoted) symbols
+
+        if name in self.const_syms:
+            return self.const_syms[name]
+
+        sym = Symbol()
+        sym.kconfig = self
+        sym.name = name
+        sym.is_constant = True
+        sym.rev_dep = sym.weak_rev_dep = sym.direct_dep = self.n
+
+        if self._parsing_kconfigs:
+            self.const_syms[name] = sym
+
+        return sym
+
+    def _tokenize(self, s):
+        # Parses 's', returning a None-terminated list of tokens. Registers any
+        # new symbols encountered with _lookup(_const)_sym().
+        #
+        # Tries to be reasonably speedy by processing chunks of text via
+        # regexes and string operations where possible. This is the biggest
+        # hotspot during parsing.
+        #
+        # It might be possible to rewrite this to 'yield' tokens instead,
+        # working across multiple lines. Lookback and compatibility with old
+        # janky versions of the C tools complicate things though.
+
+        self._line = s  # Used for error reporting
+
+        # Initial token on the line
+        match = _command_match(s)
+        if not match:
+            if s.isspace() or s.lstrip().startswith("#"):
+                return (None,)
+            self._parse_error("unknown token at start of line")
+
+        # Tricky implementation detail: While parsing a token, 'token' refers
+        # to the previous token. See _STRING_LEX for why this is needed.
+        token = _get_keyword(match.group(1))
+        if not token:
+            # Backwards compatibility with old versions of the C tools, which
+            # (accidentally) accepted stuff like "--help--" and "-help---".
+            # This was fixed in the C tools by commit c2264564 ("kconfig: warn
+            # of unhandled characters in Kconfig commands"), committed in July
+            # 2015, but it seems people still run Kconfiglib on older kernels.
+            if s.strip(" \t\n-") == "help":
+                return (_T_HELP, None)
+
+            # If the first token is not a keyword (and not a weird help token),
+            # we have a preprocessor variable assignment (or a bare macro on a
+            # line)
+            self._parse_assignment(s)
+            return (None,)
+
+        tokens = [token]
+        # The current index in the string being tokenized
+        i = match.end()
+
+        # Main tokenization loop (for tokens past the first one)
+        while i < len(s):
+            # Test for an identifier/keyword first. This is the most common
+            # case.
+            match = _id_keyword_match(s, i)
+            if match:
+                # We have an identifier or keyword
+
+                # Check what it is. lookup_sym() will take care of allocating
+                # new symbols for us the first time we see them. Note that
+                # 'token' still refers to the previous token.
+
+                name = match.group(1)
+                keyword = _get_keyword(name)
+                if keyword:
+                    # It's a keyword
+                    token = keyword
+                    # Jump past it
+                    i = match.end()
+
+                elif token not in _STRING_LEX:
+                    # It's a non-const symbol, except we translate n, m, and y
+                    # into the corresponding constant symbols, like the C
+                    # implementation
+
+                    if "$" in name:
+                        # Macro expansion within symbol name
+                        name, s, i = self._expand_name(s, i)
+                    else:
+                        i = match.end()
+
+                    token = self.const_syms[name] if name in STR_TO_TRI else \
+                        self._lookup_sym(name)
+
+                else:
+                    # It's a case of missing quotes. For example, the
+                    # following is accepted:
+                    #
+                    #   menu unquoted_title
+                    #
+                    #   config A
+                    #       tristate unquoted_prompt
+                    #
+                    #   endmenu
+                    #
+                    # Named choices ('choice FOO') also end up here.
+
+                    if token is not _T_CHOICE:
+                        self._warn("style: quotes recommended around '{}' in '{}'"
+                                   .format(name, self._line.strip()),
+                                   self._filename, self._linenr)
+
+                    token = name
+                    i = match.end()
+
+            else:
+                # Neither a keyword nor a non-const symbol
+
+                # We always strip whitespace after tokens, so it is safe to
+                # assume that s[i] is the start of a token here.
+                c = s[i]
+
+                if c in "\"'":
+                    if "$" not in s and "\\" not in s:
+                        # Fast path for lines without $ and \. Find the
+                        # matching quote.
+                        end_i = s.find(c, i + 1) + 1
+                        if not end_i:
+                            self._parse_error("unterminated string")
+                        val = s[i + 1:end_i - 1]
+                        i = end_i
+                    else:
+                        # Slow path
+                        s, end_i = self._expand_str(s, i)
+
+                        # os.path.expandvars() and the $UNAME_RELEASE replace()
+                        # is a backwards compatibility hack, which should be
+                        # reasonably safe as expandvars() leaves references to
+                        # undefined env. vars. as is.
+                        #
+                        # The preprocessor functionality changed how
+                        # environment variables are referenced, to $(FOO).
+                        val = expandvars(s[i + 1:end_i - 1]
+                                         .replace("$UNAME_RELEASE",
+                                                  _UNAME_RELEASE))
+
+                        i = end_i
+
+                    # This is the only place where we don't survive with a
+                    # single token of lookback: 'option env="FOO"' does not
+                    # refer to a constant symbol named "FOO".
+                    token = \
+                        val if token in _STRING_LEX or tokens[0] is _T_OPTION \
+                        else self._lookup_const_sym(val)
+
+                elif s.startswith("&&", i):
+                    token = _T_AND
+                    i += 2
+
+                elif s.startswith("||", i):
+                    token = _T_OR
+                    i += 2
+
+                elif c == "=":
+                    token = _T_EQUAL
+                    i += 1
+
+                elif s.startswith("!=", i):
+                    token = _T_UNEQUAL
+                    i += 2
+
+                elif c == "!":
+                    token = _T_NOT
+                    i += 1
+
+                elif c == "(":
+                    token = _T_OPEN_PAREN
+                    i += 1
+
+                elif c == ")":
+                    token = _T_CLOSE_PAREN
+                    i += 1
+
+                elif c == "#":
+                    break
+
+
+                # Very rare
+
+                elif s.startswith("<=", i):
+                    token = _T_LESS_EQUAL
+                    i += 2
+
+                elif c == "<":
+                    token = _T_LESS
+                    i += 1
+
+                elif s.startswith(">=", i):
+                    token = _T_GREATER_EQUAL
+                    i += 2
+
+                elif c == ">":
+                    token = _T_GREATER
+                    i += 1
+
+
+                else:
+                    self._parse_error("unknown tokens in line")
+
+
+                # Skip trailing whitespace
+                while i < len(s) and s[i].isspace():
+                    i += 1
+
+
+            # Add the token
+            tokens.append(token)
+
+        # None-terminating the token list makes token fetching simpler/faster
+        tokens.append(None)
+
+        return tokens
+
+    # Helpers for syntax checking and token fetching. See the
+    # 'Intro to expressions' section for what a constant symbol is.
+    #
+    # More of these could be added, but the single-use cases are inlined as an
+    # optimization.
+
+    def _expect_sym(self):
+        token = self._tokens[self._tokens_i]
+        self._tokens_i += 1
+
+        if token.__class__ is not Symbol:
+            self._parse_error("expected symbol")
+
+        return token
+
+    def _expect_nonconst_sym(self):
+        # Used for 'select' and 'imply' only. We know the token indices.
+
+        token = self._tokens[1]
+        self._tokens_i = 2
+
+        if token.__class__ is not Symbol or token.is_constant:
+            self._parse_error("expected nonconstant symbol")
+
+        return token
+
+    def _expect_str_and_eol(self):
+        token = self._tokens[self._tokens_i]
+        self._tokens_i += 1
+
+        if token.__class__ is not str:
+            self._parse_error("expected string")
+
+        if self._tokens[self._tokens_i] is not None:
+            self._trailing_tokens_error()
+
+        return token
+
+    def _expect_expr_and_eol(self):
+        expr = self._parse_expr(True)
+
+        if self._tokens[self._tokens_i] is not None:
+            self._trailing_tokens_error()
+
+        return expr
+
+    def _check_token(self, token):
+        # If the next token is 'token', removes it and returns True
+
+        if self._tokens[self._tokens_i] is token:
+            self._tokens_i += 1
+            return True
+        return False
+
+    #
+    # Preprocessor logic
+    #
+
+    def _parse_assignment(self, s):
+        # Parses a preprocessor variable assignment, registering the variable
+        # if it doesn't already exist. Also takes care of bare macros on lines
+        # (which are allowed, and can be useful for their side effects).
+
+        # Expand any macros in the left-hand side of the assignment (the
+        # variable name)
+        s = s.lstrip()
+        i = 0
+        while 1:
+            i = _assignment_lhs_fragment_match(s, i).end()
+            if s.startswith("$(", i):
+                s, i = self._expand_macro(s, i, ())
+            else:
+                break
+
+        if s.isspace():
+            # We also accept a bare macro on a line (e.g.
+            # $(warning-if,$(foo),ops)), provided it expands to a blank string
+            return
+
+        # Assigned variable
+        name = s[:i]
+
+
+        # Extract assignment operator (=, :=, or +=) and value
+        rhs_match = _assignment_rhs_match(s, i)
+        if not rhs_match:
+            self._parse_error("syntax error")
+
+        op, val = rhs_match.groups()
+
+
+        if name in self.variables:
+            # Already seen variable
+            var = self.variables[name]
+        else:
+            # New variable
+            var = Variable()
+            var.kconfig = self
+            var.name = name
+            var._n_expansions = 0
+            self.variables[name] = var
+
+            # += acts like = on undefined variables (defines a recursive
+            # variable)
+            if op == "+=":
+                op = "="
+
+        if op == "=":
+            var.is_recursive = True
+            var.value = val
+        elif op == ":=":
+            var.is_recursive = False
+            var.value = self._expand_whole(val, ())
+        else:  # op == "+="
+            # += does immediate expansion if the variable was last set
+            # with :=
+            var.value += " " + (val if var.is_recursive else
+                                self._expand_whole(val, ()))
+
+    def _expand_whole(self, s, args):
+        # Expands preprocessor macros in all of 's'. Used whenever we don't
+        # have to worry about delimiters. See _expand_macro() re. the 'args'
+        # parameter.
+        #
+        # Returns the expanded string.
+
+        i = 0
+        while 1:
+            i = s.find("$(", i)
+            if i == -1:
+                break
+            s, i = self._expand_macro(s, i, args)
+        return s
+
+    def _expand_name(self, s, i):
+        # Expands a symbol name starting at index 'i' in 's'.
+        #
+        # Returns the expanded name, the expanded 's' (including the part
+        # before the name), and the index of the first character in the next
+        # token after the name.
+
+        s, end_i = self._expand_name_iter(s, i)
+        name = s[i:end_i]
+        # isspace() is False for empty strings
+        if not name.strip():
+            # Avoid creating a Kconfig symbol with a blank name. It's almost
+            # guaranteed to be an error.
+            self._parse_error("macro expanded to blank string")
+
+        # Skip trailing whitespace
+        while end_i < len(s) and s[end_i].isspace():
+            end_i += 1
+
+        return name, s, end_i
+
+    def _expand_name_iter(self, s, i):
+        # Expands a symbol name starting at index 'i' in 's'.
+        #
+        # Returns the expanded 's' (including the part before the name) and the
+        # index of the first character after the expanded name in 's'.
+
+        while 1:
+            match = _name_special_search(s, i)
+
+            if match.group() == "$(":
+                s, i = self._expand_macro(s, match.start(), ())
+            else:
+                return (s, match.start())
+
+    def _expand_str(self, s, i):
+        # Expands a quoted string starting at index 'i' in 's'. Handles both
+        # backslash escapes and macro expansion.
+        #
+        # Returns the expanded 's' (including the part before the string) and
+        # the index of the first character after the expanded string in 's'.
+
+        quote = s[i]
+        i += 1  # Skip over initial "/'
+        while 1:
+            match = _string_special_search(s, i)
+            if not match:
+                self._parse_error("unterminated string")
+
+
+            if match.group() == quote:
+                # Found the end of the string
+                return (s, match.end())
+
+            elif match.group() == "\\":
+                # Replace '\x' with 'x'. 'i' ends up pointing to the character
+                # after 'x', which allows macros to be canceled with '\$(foo)'.
+                i = match.end()
+                s = s[:match.start()] + s[i:]
+
+            elif match.group() == "$(":
+                # A macro call within the string
+                s, i = self._expand_macro(s, match.start(), ())
+
+            else:
+                # A ' quote within " quotes or vice versa
+                i += 1
+
+    def _expand_macro(self, s, i, args):
+        # Expands a macro starting at index 'i' in 's'. If this macro resulted
+        # from the expansion of another macro, 'args' holds the arguments
+        # passed to that macro.
+        #
+        # Returns the expanded 's' (including the part before the macro) and
+        # the index of the first character after the expanded macro in 's'.
+
+        start = i
+        i += 2  # Skip over "$("
+
+        # Start of current macro argument
+        arg_start = i
+
+        # Arguments of this macro call
+        new_args = []
+
+        while 1:
+            match = _macro_special_search(s, i)
+            if not match:
+                self._parse_error("missing end parenthesis in macro expansion")
+
+
+            if match.group() == ")":
+                # Found the end of the macro
+
+                new_args.append(s[arg_start:match.start()])
+
+                prefix = s[:start]
+
+                # $(1) is replaced by the first argument to the function, etc.,
+                # provided at least that many arguments were passed
+
+                try:
+                    # Does the macro look like an integer, with a corresponding
+                    # argument? If so, expand it to the value of the argument.
+                    prefix += args[int(new_args[0])]
+                except (ValueError, IndexError):
+                    # Regular variables are just functions without arguments,
+                    # and also go through the function value path
+                    prefix += self._fn_val(new_args)
+
+                return (prefix + s[match.end():],
+                        len(prefix))
+
+            elif match.group() == ",":
+                # Found the end of a macro argument
+                new_args.append(s[arg_start:match.start()])
+                arg_start = i = match.end()
+
+            else:  # match.group() == "$("
+                # A nested macro call within the macro
+                s, i = self._expand_macro(s, match.start(), args)
+
+    def _fn_val(self, args):
+        # Returns the result of calling the function args[0] with the arguments
+        # args[1..len(args)-1]. Plain variables are treated as functions
+        # without arguments.
+
+        fn = args[0]
+
+        if fn in self.variables:
+            var = self.variables[fn]
+
+            if len(args) == 1:
+                # Plain variable
+                if var._n_expansions:
+                    self._parse_error("Preprocessor variable {} recursively "
+                                      "references itself".format(var.name))
+            elif var._n_expansions > 100:
+                # Allow functions to call themselves, but guess that functions
+                # that are overly recursive are stuck
+                self._parse_error("Preprocessor function {} seems stuck "
+                                  "in infinite recursion".format(var.name))
+
+            var._n_expansions += 1
+            res = self._expand_whole(self.variables[fn].value, args)
+            var._n_expansions -= 1
+            return res
+
+        if fn in self._functions:
+            # Built-in or user-defined function
+
+            py_fn, min_arg, max_arg = self._functions[fn]
+
+            if len(args) - 1 < min_arg or \
+               (max_arg is not None and len(args) - 1 > max_arg):
+
+                if min_arg == max_arg:
+                    expected_args = min_arg
+                elif max_arg is None:
+                    expected_args = "{} or more".format(min_arg)
+                else:
+                    expected_args = "{}-{}".format(min_arg, max_arg)
+
+                raise KconfigError("{}:{}: bad number of arguments in call "
+                                   "to {}, expected {}, got {}"
+                                   .format(self._filename, self._linenr, fn,
+                                           expected_args, len(args) - 1))
+
+            return py_fn(self, *args)
+
+        # Environment variables are tried last
+        if fn in os.environ:
+            self.env_vars.add(fn)
+            return os.environ[fn]
+
+        return ""
+
+    #
+    # Parsing
+    #
+
+    def _make_and(self, e1, e2):
+        # Constructs an AND (&&) expression. Performs trivial simplification.
+
+        if e1 is self.y:
+            return e2
+
+        if e2 is self.y:
+            return e1
+
+        if e1 is self.n or e2 is self.n:
+            return self.n
+
+        return (AND, e1, e2)
+
+    def _make_or(self, e1, e2):
+        # Constructs an OR (||) expression. Performs trivial simplification.
+
+        if e1 is self.n:
+            return e2
+
+        if e2 is self.n:
+            return e1
+
+        if e1 is self.y or e2 is self.y:
+            return self.y
+
+        return (OR, e1, e2)
+
+    def _parse_block(self, end_token, parent, prev):
+        # Parses a block, which is the contents of either a file or an if,
+        # menu, or choice statement.
+        #
+        # end_token:
+        #   The token that ends the block, e.g. _T_ENDIF ("endif") for ifs.
+        #   None for files.
+        #
+        # parent:
+        #   The parent menu node, corresponding to a menu, Choice, or 'if'.
+        #   'if's are flattened after parsing.
+        #
+        # prev:
+        #   The previous menu node. New nodes will be added after this one (by
+        #   modifying their 'next' pointer).
+        #
+        #   'prev' is reused to parse a list of child menu nodes (for a menu or
+        #   Choice): After parsing the children, the 'next' pointer is assigned
+        #   to the 'list' pointer to "tilt up" the children above the node.
+        #
+        # Returns the final menu node in the block (or 'prev' if the block is
+        # empty). This allows chaining.
+
+        while self._next_line():
+            t0 = self._tokens[0]
+
+            if t0 is _T_CONFIG or t0 is _T_MENUCONFIG:
+                # The tokenizer allocates Symbol objects for us
+                sym = self._tokens[1]
+
+                if sym.__class__ is not Symbol or sym.is_constant:
+                    self._parse_error("missing or bad symbol name")
+
+                if self._tokens[2] is not None:
+                    self._trailing_tokens_error()
+
+                self.defined_syms.append(sym)
+
+                node = MenuNode()
+                node.kconfig = self
+                node.item = sym
+                node.is_menuconfig = (t0 is _T_MENUCONFIG)
+                node.prompt = node.help = node.list = None
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                sym.nodes.append(node)
+
+                self._parse_properties(node)
+
+                if node.is_menuconfig and not node.prompt:
+                    self._warn("the menuconfig symbol {} has no prompt"
+                               .format(_name_and_loc(sym)))
+
+                # Equivalent to
+                #
+                #   prev.next = node
+                #   prev = node
+                #
+                # due to tricky Python semantics. The order matters.
+                prev.next = prev = node
+
+            elif t0 is None:
+                # Blank line
+                continue
+
+            elif t0 in _SOURCE_TOKENS:
+                pattern = self._expect_str_and_eol()
+
+                if t0 in _REL_SOURCE_TOKENS:
+                    # Relative source
+                    pattern = join(dirname(self._filename), pattern)
+
+                # - glob() doesn't support globbing relative to a directory, so
+                #   we need to prepend $srctree to 'pattern'. Use join()
+                #   instead of '+' so that an absolute path in 'pattern' is
+                #   preserved.
+                #
+                # - Sort the glob results to ensure a consistent ordering of
+                #   Kconfig symbols, which indirectly ensures a consistent
+                #   ordering in e.g. .config files
+                filenames = sorted(iglob(join(self._srctree_prefix, pattern)))
+
+                if not filenames and t0 in _OBL_SOURCE_TOKENS:
+                    raise KconfigError(
+                        "{}:{}: '{}' not found (in '{}'). Check that "
+                        "environment variables are set correctly (e.g. "
+                        "$srctree, which is {}). Also note that unset "
+                        "environment variables expand to the empty string."
+                        .format(self._filename, self._linenr, pattern,
+                                self._line.strip(),
+                                "set to '{}'".format(self.srctree)
+                                    if self.srctree else "unset or blank"))
+
+                for filename in filenames:
+                    self._enter_file(filename)
+                    prev = self._parse_block(None, parent, prev)
+                    self._leave_file()
+
+            elif t0 is end_token:
+                # Reached the end of the block. Terminate the final node and
+                # return it.
+
+                if self._tokens[1] is not None:
+                    self._trailing_tokens_error()
+
+                prev.next = None
+                return prev
+
+            elif t0 is _T_IF:
+                node = MenuNode()
+                node.item = node.prompt = None
+                node.parent = parent
+                node.dep = self._expect_expr_and_eol()
+
+                self._parse_block(_T_ENDIF, node, node)
+                node.list = node.next
+
+                prev.next = prev = node
+
+            elif t0 is _T_MENU:
+                node = MenuNode()
+                node.kconfig = self
+                node.item = t0  # _T_MENU == MENU
+                node.is_menuconfig = True
+                node.prompt = (self._expect_str_and_eol(), self.y)
+                node.visibility = self.y
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                self.menus.append(node)
+
+                self._parse_properties(node)
+                self._parse_block(_T_ENDMENU, node, node)
+                node.list = node.next
+
+                prev.next = prev = node
+
+            elif t0 is _T_COMMENT:
+                node = MenuNode()
+                node.kconfig = self
+                node.item = t0  # _T_COMMENT == COMMENT
+                node.is_menuconfig = False
+                node.prompt = (self._expect_str_and_eol(), self.y)
+                node.list = None
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                self.comments.append(node)
+
+                self._parse_properties(node)
+
+                prev.next = prev = node
+
+            elif t0 is _T_CHOICE:
+                if self._tokens[1] is None:
+                    choice = Choice()
+                    choice.direct_dep = self.n
+                else:
+                    # Named choice
+                    name = self._expect_str_and_eol()
+                    choice = self.named_choices.get(name)
+                    if not choice:
+                        choice = Choice()
+                        choice.name = name
+                        choice.direct_dep = self.n
+                        self.named_choices[name] = choice
+
+                self.choices.append(choice)
+
+                node = MenuNode()
+                node.kconfig = choice.kconfig = self
+                node.item = choice
+                node.is_menuconfig = True
+                node.prompt = node.help = None
+                node.parent = parent
+                node.filename = self._filename
+                node.linenr = self._linenr
+                node.include_path = self._include_path
+
+                choice.nodes.append(node)
+
+                self._parse_properties(node)
+                self._parse_block(_T_ENDCHOICE, node, node)
+                node.list = node.next
+
+                prev.next = prev = node
+
+            elif t0 is _T_MAINMENU:
+                self.top_node.prompt = (self._expect_str_and_eol(), self.y)
+
+            else:
+                # A valid endchoice/endif/endmenu is caught by the 'end_token'
+                # check above
+                self._parse_error(
+                    "no corresponding 'choice'" if t0 is _T_ENDCHOICE else
+                    "no corresponding 'if'"     if t0 is _T_ENDIF else
+                    "no corresponding 'menu'"   if t0 is _T_ENDMENU else
+                    "unrecognized construct")
+
+        # End of file reached. Terminate the final node and return it.
+
+        if end_token:
+            raise KconfigError(
+                "expected '{}' at end of '{}'"
+                .format("endchoice" if end_token is _T_ENDCHOICE else
+                        "endif"     if end_token is _T_ENDIF else
+                        "endmenu",
+                        self._filename))
+
+        prev.next = None
+        return prev
+
+    def _parse_cond(self):
+        # Parses an optional 'if <expr>' construct and returns the parsed
+        # <expr>, or self.y if the next token is not _T_IF
+
+        expr = self._parse_expr(True) if self._check_token(_T_IF) else self.y
+
+        if self._tokens[self._tokens_i] is not None:
+            self._trailing_tokens_error()
+
+        return expr
+
+    def _parse_properties(self, node):
+        # Parses and adds properties to the MenuNode 'node' (type, 'prompt',
+        # 'default's, etc.) Properties are later copied up to symbols and
+        # choices in a separate pass after parsing, in e.g.
+        # _add_props_to_sym().
+        #
+        # An older version of this code added properties directly to symbols
+        # and choices instead of to their menu nodes (and handled dependency
+        # propagation simultaneously), but that loses information on where a
+        # property is added when a symbol or choice is defined in multiple
+        # locations. Some Kconfig configuration systems rely heavily on such
+        # symbols, and better docs can be generated by keeping track of where
+        # properties are added.
+        #
+        # node:
+        #   The menu node we're parsing properties on
+
+        # Dependencies from 'depends on'. Will get propagated to the properties
+        # below.
+        node.dep = self.y
+
+        while self._next_line():
+            t0 = self._tokens[0]
+
+            if t0 in _TYPE_TOKENS:
+                # Relies on '_T_BOOL is BOOL', etc., to save a conversion
+                self._set_type(node, t0)
+                if self._tokens[1] is not None:
+                    self._parse_prompt(node)
+
+            elif t0 is _T_DEPENDS:
+                if not self._check_token(_T_ON):
+                    self._parse_error("expected 'on' after 'depends'")
+
+                node.dep = self._make_and(node.dep,
+                                          self._expect_expr_and_eol())
+
+            elif t0 is _T_HELP:
+                self._parse_help(node)
+
+            elif t0 is _T_SELECT:
+                if node.item.__class__ is not Symbol:
+                    self._parse_error("only symbols can select")
+
+                node.selects.append((self._expect_nonconst_sym(),
+                                     self._parse_cond()))
+
+            elif t0 is None:
+                # Blank line
+                continue
+
+            elif t0 is _T_DEFAULT:
+                node.defaults.append((self._parse_expr(False),
+                                      self._parse_cond()))
+
+            elif t0 in _DEF_TOKEN_TO_TYPE:
+                self._set_type(node, _DEF_TOKEN_TO_TYPE[t0])
+                node.defaults.append((self._parse_expr(False),
+                                      self._parse_cond()))
+
+            elif t0 is _T_PROMPT:
+                self._parse_prompt(node)
+
+            elif t0 is _T_RANGE:
+                node.ranges.append((self._expect_sym(), self._expect_sym(),
+                                    self._parse_cond()))
+
+            elif t0 is _T_IMPLY:
+                if node.item.__class__ is not Symbol:
+                    self._parse_error("only symbols can imply")
+
+                node.implies.append((self._expect_nonconst_sym(),
+                                     self._parse_cond()))
+
+            elif t0 is _T_VISIBLE:
+                if not self._check_token(_T_IF):
+                    self._parse_error("expected 'if' after 'visible'")
+
+                node.visibility = self._make_and(node.visibility,
+                                                 self._expect_expr_and_eol())
+
+            elif t0 is _T_OPTION:
+                if self._check_token(_T_ENV):
+                    if not self._check_token(_T_EQUAL):
+                        self._parse_error("expected '=' after 'env'")
+
+                    env_var = self._expect_str_and_eol()
+                    node.item.env_var = env_var
+
+                    if env_var in os.environ:
+                        node.defaults.append(
+                            (self._lookup_const_sym(os.environ[env_var]),
+                             self.y))
+                    else:
+                        self._warn("{1} has 'option env=\"{0}\"', "
+                                   "but the environment variable {0} is not "
+                                   "set".format(node.item.name, env_var),
+                                   self._filename, self._linenr)
+
+                    if env_var != node.item.name:
+                        self._warn("Kconfiglib expands environment variables "
+                                   "in strings directly, meaning you do not "
+                                   "need 'option env=...' \"bounce\" symbols. "
+                                   "For compatibility with the C tools, "
+                                   "rename {} to {} (so that the symbol name "
+                                   "matches the environment variable name)."
+                                   .format(node.item.name, env_var),
+                                   self._filename, self._linenr)
+
+                elif self._check_token(_T_DEFCONFIG_LIST):
+                    if not self.defconfig_list:
+                        self.defconfig_list = node.item
+                    else:
+                        self._warn("'option defconfig_list' set on multiple "
+                                   "symbols ({0} and {1}). Only {0} will be "
+                                   "used.".format(self.defconfig_list.name,
+                                                  node.item.name),
+                                   self._filename, self._linenr)
+
+                elif self._check_token(_T_MODULES):
+                    # To reduce warning spam, only warn if 'option modules' is
+                    # set on some symbol that isn't MODULES, which should be
+                    # safe. I haven't run into any projects that make use
+                    # modules besides the kernel yet, and there it's likely to
+                    # keep being called "MODULES".
+                    if node.item is not self.modules:
+                        self._warn("the 'modules' option is not supported. "
+                                   "Let me know if this is a problem for you, "
+                                   "as it wouldn't be that hard to implement. "
+                                   "Note that modules are supported -- "
+                                   "Kconfiglib just assumes the symbol name "
+                                   "MODULES, like older versions of the C "
+                                   "implementation did when 'option modules' "
+                                   "wasn't used.",
+                                   self._filename, self._linenr)
+
+                elif self._check_token(_T_ALLNOCONFIG_Y):
+                    if node.item.__class__ is not Symbol:
+                        self._parse_error("the 'allnoconfig_y' option is only "
+                                          "valid for symbols")
+
+                    node.item.is_allnoconfig_y = True
+
+                else:
+                    self._parse_error("unrecognized option")
+
+            elif t0 is _T_OPTIONAL:
+                if node.item.__class__ is not Choice:
+                    self._parse_error('"optional" is only valid for choices')
+
+                node.item.is_optional = True
+
+            else:
+                # Reuse the tokens for the non-property line later
+                self._reuse_tokens = True
+                return
+
+    def _set_type(self, node, new_type):
+        # UNKNOWN is falsy
+        if node.item.orig_type and node.item.orig_type is not new_type:
+            self._warn("{} defined with multiple types, {} will be used"
+                       .format(_name_and_loc(node.item),
+                               TYPE_TO_STR[new_type]))
+
+        node.item.orig_type = new_type
+
+    def _parse_prompt(self, node):
+        # 'prompt' properties override each other within a single definition of
+        # a symbol, but additional prompts can be added by defining the symbol
+        # multiple times
+
+        if node.prompt:
+            self._warn(_name_and_loc(node.item) +
+                       " defined with multiple prompts in single location")
+
+        prompt = self._tokens[1]
+        self._tokens_i = 2
+
+        if prompt.__class__ is not str:
+            self._parse_error("expected prompt string")
+
+        if prompt != prompt.strip():
+            self._warn(_name_and_loc(node.item) +
+                       " has leading or trailing whitespace in its prompt")
+
+            # This avoid issues for e.g. reStructuredText documentation, where
+            # '*prompt *' is invalid
+            prompt = prompt.strip()
+
+        node.prompt = (prompt, self._parse_cond())
+
+    def _parse_help(self, node):
+        if node.help is not None:
+            self._warn(_name_and_loc(node.item) + " defined with more than "
+                       "one help text -- only the last one will be used")
+
+        # Micro-optimization. This code is pretty hot.
+        readline = self._readline
+
+        # Find first non-blank (not all-space) line and get its
+        # indentation
+
+        while 1:
+            line = readline()
+            self._linenr += 1
+            if not line:
+                self._empty_help(node, line)
+                return
+            if not line.isspace():
+                break
+
+        len_ = len  # Micro-optimization
+
+        # Use a separate 'expline' variable here and below to avoid stomping on
+        # any tabs people might've put deliberately into the first line after
+        # the help text
+        expline = line.expandtabs()
+        indent = len_(expline) - len_(expline.lstrip())
+        if not indent:
+            self._empty_help(node, line)
+            return
+
+        # The help text goes on till the first non-blank line with less indent
+        # than the first line
+
+        # Add the first line
+        lines = [expline[indent:]]
+        add_line = lines.append  # Micro-optimization
+
+        while 1:
+            line = readline()
+            if line.isspace():
+                # No need to preserve the exact whitespace in these
+                add_line("\n")
+            elif not line:
+                # End of file
+                break
+            else:
+                expline = line.expandtabs()
+                if len_(expline) - len_(expline.lstrip()) < indent:
+                    break
+                add_line(expline[indent:])
+
+        self._linenr += len_(lines)
+        node.help = "".join(lines).rstrip()
+        if line:
+            self._line_after_help(line)
+
+    def _empty_help(self, node, line):
+        self._warn(_name_and_loc(node.item) +
+                   " has 'help' but empty help text")
+        node.help = ""
+        if line:
+            self._line_after_help(line)
+
+    def _parse_expr(self, transform_m):
+        # Parses an expression from the tokens in Kconfig._tokens using a
+        # simple top-down approach. See the module docstring for the expression
+        # format.
+        #
+        # transform_m:
+        #   True if m should be rewritten to m && MODULES. See the
+        #   Kconfig.eval_string() documentation.
+
+        # Grammar:
+        #
+        #   expr:     and_expr ['||' expr]
+        #   and_expr: factor ['&&' and_expr]
+        #   factor:   <symbol> ['='/'!='/'<'/... <symbol>]
+        #             '!' factor
+        #             '(' expr ')'
+        #
+        # It helps to think of the 'expr: and_expr' case as a single-operand OR
+        # (no ||), and of the 'and_expr: factor' case as a single-operand AND
+        # (no &&). Parsing code is always a bit tricky.
+
+        # Mind dump: parse_factor() and two nested loops for OR and AND would
+        # work as well. The straightforward implementation there gives a
+        # (op, (op, (op, A, B), C), D) parse for A op B op C op D. Representing
+        # expressions as (op, [list of operands]) instead goes nicely with that
+        # version, but is wasteful for short expressions and complicates
+        # expression evaluation and other code that works on expressions (more
+        # complicated code likely offsets any performance gain from less
+        # recursion too). If we also try to optimize the list representation by
+        # merging lists when possible (e.g. when ANDing two AND expressions),
+        # we end up allocating a ton of lists instead of reusing expressions,
+        # which is bad.
+
+        and_expr = self._parse_and_expr(transform_m)
+
+        # Return 'and_expr' directly if we have a "single-operand" OR.
+        # Otherwise, parse the expression on the right and make an OR node.
+        # This turns A || B || C || D into (OR, A, (OR, B, (OR, C, D))).
+        return and_expr if not self._check_token(_T_OR) else \
+            (OR, and_expr, self._parse_expr(transform_m))
+
+    def _parse_and_expr(self, transform_m):
+        factor = self._parse_factor(transform_m)
+
+        # Return 'factor' directly if we have a "single-operand" AND.
+        # Otherwise, parse the right operand and make an AND node. This turns
+        # A && B && C && D into (AND, A, (AND, B, (AND, C, D))).
+        return factor if not self._check_token(_T_AND) else \
+            (AND, factor, self._parse_and_expr(transform_m))
+
+    def _parse_factor(self, transform_m):
+        token = self._tokens[self._tokens_i]
+        self._tokens_i += 1
+
+        if token.__class__ is Symbol:
+            # Plain symbol or relation
+
+            if self._tokens[self._tokens_i] not in _RELATIONS:
+                # Plain symbol
+
+                # For conditional expressions ('depends on <expr>',
+                # '... if <expr>', etc.), m is rewritten to m && MODULES.
+                if transform_m and token is self.m:
+                    return (AND, self.m, self.modules)
+
+                return token
+
+            # Relation
+            #
+            # _T_EQUAL, _T_UNEQUAL, etc., deliberately have the same values as
+            # EQUAL, UNEQUAL, etc., so we can just use the token directly
+            self._tokens_i += 1
+            return (self._tokens[self._tokens_i - 1], token,
+                    self._expect_sym())
+
+        if token is _T_NOT:
+            # token == _T_NOT == NOT
+            return (token, self._parse_factor(transform_m))
+
+        if token is _T_OPEN_PAREN:
+            expr_parse = self._parse_expr(transform_m)
+            if self._check_token(_T_CLOSE_PAREN):
+                return expr_parse
+
+        self._parse_error("malformed expression")
+
+    #
+    # Caching and invalidation
+    #
+
+    def _build_dep(self):
+        # Populates the Symbol/Choice._dependents sets, which contain all other
+        # items (symbols and choices) that immediately depend on the item in
+        # the sense that changing the value of the item might affect the value
+        # of the dependent items. This is used for caching/invalidation.
+        #
+        # The calculated sets might be larger than necessary as we don't do any
+        # complex analysis of the expressions.
+
+        make_depend_on = _make_depend_on  # Micro-optimization
+
+        # Only calculate _dependents for defined symbols. Constant and
+        # undefined symbols could theoretically be selected/implied, but it
+        # wouldn't change their value, so it's not a true dependency.
+        for sym in self.unique_defined_syms:
+            # Symbols depend on the following:
+
+            # The prompt conditions
+            for node in sym.nodes:
+                if node.prompt:
+                    make_depend_on(sym, node.prompt[1])
+
+            # The default values and their conditions
+            for value, cond in sym.defaults:
+                make_depend_on(sym, value)
+                make_depend_on(sym, cond)
+
+            # The reverse and weak reverse dependencies
+            make_depend_on(sym, sym.rev_dep)
+            make_depend_on(sym, sym.weak_rev_dep)
+
+            # The ranges along with their conditions
+            for low, high, cond in sym.ranges:
+                make_depend_on(sym, low)
+                make_depend_on(sym, high)
+                make_depend_on(sym, cond)
+
+            # The direct dependencies. This is usually redundant, as the direct
+            # dependencies get propagated to properties, but it's needed to get
+            # invalidation solid for 'imply', which only checks the direct
+            # dependencies (even if there are no properties to propagate it
+            # to).
+            make_depend_on(sym, sym.direct_dep)
+
+            # In addition to the above, choice symbols depend on the choice
+            # they're in, but that's handled automatically since the Choice is
+            # propagated to the conditions of the properties before
+            # _build_dep() runs.
+
+        for choice in self.unique_choices:
+            # Choices depend on the following:
+
+            # The prompt conditions
+            for node in choice.nodes:
+                if node.prompt:
+                    make_depend_on(choice, node.prompt[1])
+
+            # The default symbol conditions
+            for _, cond in choice.defaults:
+                make_depend_on(choice, cond)
+
+    def _add_choice_deps(self):
+        # Choices also depend on the choice symbols themselves, because the
+        # y-mode selection of the choice might change if a choice symbol's
+        # visibility changes.
+        #
+        # We add these dependencies separately after dependency loop detection.
+        # The invalidation algorithm can handle the resulting
+        # <choice symbol> <-> <choice> dependency loops, but they make loop
+        # detection awkward.
+
+        for choice in self.unique_choices:
+            for sym in choice.syms:
+                sym._dependents.add(choice)
+
+    def _invalidate_all(self):
+        # Undefined symbols never change value and don't need to be
+        # invalidated, so we can just iterate over defined symbols.
+        # Invalidating constant symbols would break things horribly.
+        for sym in self.unique_defined_syms:
+            sym._invalidate()
+
+        for choice in self.unique_choices:
+            choice._invalidate()
+
+    #
+    # Post-parsing menu tree processing, including dependency propagation and
+    # implicit submenu creation
+    #
+
+    def _finalize_node(self, node, visible_if):
+        # Finalizes a menu node and its children:
+        #
+        #  - Copies properties from menu nodes up to their contained
+        #    symbols/choices
+        #
+        #  - Propagates dependencies from parent to child nodes
+        #
+        #  - Creates implicit menus (see kconfig-language.txt)
+        #
+        #  - Removes 'if' nodes
+        #
+        #  - Sets 'choice' types and registers choice symbols
+        #
+        # menu_finalize() in the C implementation is similar.
+        #
+        # node:
+        #   The menu node to finalize. This node and its children will have
+        #   been finalized when the function returns, and any implicit menus
+        #   will have been created.
+        #
+        # visible_if:
+        #   Dependencies from 'visible if' on parent menus. These are added to
+        #   the prompts of symbols and choices.
+
+        if node.item.__class__ is Symbol:
+            # Copy defaults, ranges, selects, and implies to the Symbol
+            self._add_props_to_sym(node)
+
+            # Find any items that should go in an implicit menu rooted at the
+            # symbol
+            cur = node
+            while cur.next and _auto_menu_dep(node, cur.next):
+                # This makes implicit submenu creation work recursively, with
+                # implicit menus inside implicit menus
+                self._finalize_node(cur.next, visible_if)
+                cur = cur.next
+                cur.parent = node
+
+            if cur is not node:
+                # Found symbols that should go in an implicit submenu. Tilt
+                # them up above us.
+                node.list = node.next
+                node.next = cur.next
+                cur.next = None
+
+        elif node.list:
+            # The menu node is a choice, menu, or if. Finalize each child node.
+
+            if node.item is MENU:
+                visible_if = self._make_and(visible_if, node.visibility)
+
+            # Propagate the menu node's dependencies to each child menu node.
+            #
+            # This needs to go before the recursive _finalize_node() call so
+            # that implicit submenu creation can look ahead at dependencies.
+            self._propagate_deps(node, visible_if)
+
+            # Finalize the children
+            cur = node.list
+            while cur:
+                self._finalize_node(cur, visible_if)
+                cur = cur.next
+
+        if node.list:
+            # node's children have been individually finalized. Do final steps
+            # to finalize this "level" in the menu tree.
+            _flatten(node.list)
+            _remove_ifs(node)
+
+        # Empty choices (node.list None) are possible, so this needs to go
+        # outside
+        if node.item.__class__ is Choice:
+            # Add the node's non-node-specific properties to the choice, like
+            # _add_props_to_sym() does
+            choice = node.item
+            choice.direct_dep = self._make_or(choice.direct_dep, node.dep)
+            choice.defaults += node.defaults
+
+            _finalize_choice(node)
+
+    def _propagate_deps(self, node, visible_if):
+        # Propagates 'node's dependencies to its child menu nodes
+
+        # If the parent node holds a Choice, we use the Choice itself as the
+        # parent dependency. This makes sense as the value (mode) of the choice
+        # limits the visibility of the contained choice symbols. The C
+        # implementation works the same way.
+        #
+        # Due to the similar interface, Choice works as a drop-in replacement
+        # for Symbol here.
+        basedep = node.item if node.item.__class__ is Choice else node.dep
+
+        cur = node.list
+        while cur:
+            dep = cur.dep = self._make_and(cur.dep, basedep)
+
+            if cur.item.__class__ in _SYMBOL_CHOICE:
+                # Propagate 'visible if' and dependencies to the prompt
+                if cur.prompt:
+                    cur.prompt = (cur.prompt[0],
+                                  self._make_and(
+                                      cur.prompt[1],
+                                      self._make_and(visible_if, dep)))
+
+                # Propagate dependencies to defaults
+                if cur.defaults:
+                    cur.defaults = [(default, self._make_and(cond, dep))
+                                    for default, cond in cur.defaults]
+
+                # Propagate dependencies to ranges
+                if cur.ranges:
+                    cur.ranges = [(low, high, self._make_and(cond, dep))
+                                  for low, high, cond in cur.ranges]
+
+                # Propagate dependencies to selects
+                if cur.selects:
+                    cur.selects = [(target, self._make_and(cond, dep))
+                                   for target, cond in cur.selects]
+
+                # Propagate dependencies to implies
+                if cur.implies:
+                    cur.implies = [(target, self._make_and(cond, dep))
+                                   for target, cond in cur.implies]
+
+            elif cur.prompt:  # Not a symbol/choice
+                # Propagate dependencies to the prompt. 'visible if' is only
+                # propagated to symbols/choices.
+                cur.prompt = (cur.prompt[0],
+                              self._make_and(cur.prompt[1], dep))
+
+            cur = cur.next
+
+    def _add_props_to_sym(self, node):
+        # Copies properties from the menu node 'node' up to its contained
+        # symbol, and adds (weak) reverse dependencies to selected/implied
+        # symbols.
+        #
+        # This can't be rolled into _propagate_deps(), because that function
+        # traverses the menu tree roughly breadth-first, meaning properties on
+        # symbols defined in multiple locations could end up in the wrong
+        # order.
+
+        sym = node.item
+
+        # See the Symbol class docstring
+        sym.direct_dep = self._make_or(sym.direct_dep, node.dep)
+
+        sym.defaults += node.defaults
+        sym.ranges += node.ranges
+        sym.selects += node.selects
+        sym.implies += node.implies
+
+        # Modify the reverse dependencies of the selected symbol
+        for target, cond in node.selects:
+            target.rev_dep = self._make_or(
+                target.rev_dep,
+                self._make_and(sym, cond))
+
+        # Modify the weak reverse dependencies of the implied
+        # symbol
+        for target, cond in node.implies:
+            target.weak_rev_dep = self._make_or(
+                target.weak_rev_dep,
+                self._make_and(sym, cond))
+
+    #
+    # Misc.
+    #
+
+    def _check_sym_sanity(self):
+        # Checks various symbol properties that are handiest to check after
+        # parsing. Only generates errors and warnings.
+
+        def num_ok(sym, type_):
+            # Returns True if the (possibly constant) symbol 'sym' is valid as a value
+            # for a symbol of type type_ (INT or HEX)
+
+            # 'not sym.nodes' implies a constant or undefined symbol, e.g. a plain
+            # "123"
+            if not sym.nodes:
+                return _is_base_n(sym.name, _TYPE_TO_BASE[type_])
+
+            return sym.orig_type is type_
+
+        for sym in self.unique_defined_syms:
+            if sym.orig_type in _BOOL_TRISTATE:
+                # A helper function could be factored out here, but keep it
+                # speedy/straightforward
+
+                for target_sym, _ in sym.selects:
+                    if target_sym.orig_type not in _BOOL_TRISTATE_UNKNOWN:
+                        self._warn("{} selects the {} symbol {}, which is not "
+                                   "bool or tristate"
+                                   .format(_name_and_loc(sym),
+                                           TYPE_TO_STR[target_sym.orig_type],
+                                           _name_and_loc(target_sym)))
+
+                for target_sym, _ in sym.implies:
+                    if target_sym.orig_type not in _BOOL_TRISTATE_UNKNOWN:
+                        self._warn("{} implies the {} symbol {}, which is not "
+                                   "bool or tristate"
+                                   .format(_name_and_loc(sym),
+                                           TYPE_TO_STR[target_sym.orig_type],
+                                           _name_and_loc(target_sym)))
+
+            elif sym.orig_type:  # STRING/INT/HEX
+                for default, _ in sym.defaults:
+                    if default.__class__ is not Symbol:
+                        raise KconfigError(
+                            "the {} symbol {} has a malformed default {} -- expected "
+                            "a single symbol"
+                            .format(TYPE_TO_STR[sym.orig_type], _name_and_loc(sym),
+                                    expr_str(default)))
+
+                    if sym.orig_type is STRING:
+                        if not default.is_constant and not default.nodes and \
+                           not default.name.isupper():
+                            # 'default foo' on a string symbol could be either a symbol
+                            # reference or someone leaving out the quotes. Guess that
+                            # the quotes were left out if 'foo' isn't all-uppercase
+                            # (and no symbol named 'foo' exists).
+                            self._warn("style: quotes recommended around "
+                                       "default value for string symbol "
+                                       + _name_and_loc(sym))
+
+                    elif not num_ok(default, sym.orig_type):  # INT/HEX
+                        self._warn("the {0} symbol {1} has a non-{0} default {2}"
+                                   .format(TYPE_TO_STR[sym.orig_type],
+                                           _name_and_loc(sym),
+                                           _name_and_loc(default)))
+
+                if sym.selects or sym.implies:
+                    self._warn("the {} symbol {} has selects or implies"
+                               .format(TYPE_TO_STR[sym.orig_type],
+                                       _name_and_loc(sym)))
+
+            else:  # UNKNOWN
+                self._warn("{} defined without a type"
+                           .format(_name_and_loc(sym)))
+
+
+            if sym.ranges:
+                if sym.orig_type not in _INT_HEX:
+                    self._warn(
+                        "the {} symbol {} has ranges, but is not int or hex"
+                        .format(TYPE_TO_STR[sym.orig_type],
+                                _name_and_loc(sym)))
+                else:
+                    for low, high, _ in sym.ranges:
+                        if not num_ok(low, sym.orig_type) or \
+                           not num_ok(high, sym.orig_type):
+
+                            self._warn("the {0} symbol {1} has a non-{0} "
+                                       "range [{2}, {3}]"
+                                       .format(TYPE_TO_STR[sym.orig_type],
+                                               _name_and_loc(sym),
+                                               _name_and_loc(low),
+                                               _name_and_loc(high)))
+
+    def _check_choice_sanity(self):
+        # Checks various choice properties that are handiest to check after
+        # parsing. Only generates errors and warnings.
+
+        def warn_select_imply(sym, expr, expr_type):
+            msg = "the choice symbol {} is {} by the following symbols, but " \
+                  "select/imply has no effect on choice symbols" \
+                  .format(_name_and_loc(sym), expr_type)
+
+            # si = select/imply
+            for si in split_expr(expr, OR):
+                msg += "\n - " + _name_and_loc(split_expr(si, AND)[0])
+
+            self._warn(msg)
+
+        for choice in self.unique_choices:
+            if choice.orig_type not in _BOOL_TRISTATE:
+                self._warn("{} defined with type {}"
+                           .format(_name_and_loc(choice),
+                                   TYPE_TO_STR[choice.orig_type]))
+
+            for node in choice.nodes:
+                if node.prompt:
+                    break
+            else:
+                self._warn(_name_and_loc(choice) + " defined without a prompt")
+
+            for default, _ in choice.defaults:
+                if default.__class__ is not Symbol:
+                    raise KconfigError(
+                        "{} has a malformed default {}"
+                        .format(_name_and_loc(choice), expr_str(default)))
+
+                if default.choice is not choice:
+                    self._warn("the default selection {} of {} is not "
+                               "contained in the choice"
+                               .format(_name_and_loc(default),
+                                       _name_and_loc(choice)))
+
+            for sym in choice.syms:
+                if sym.defaults:
+                    self._warn("default on the choice symbol {} will have "
+                               "no effect, as defaults do not affect choice "
+                               "symbols".format(_name_and_loc(sym)))
+
+                if sym.rev_dep is not sym.kconfig.n:
+                    warn_select_imply(sym, sym.rev_dep, "selected")
+
+                if sym.weak_rev_dep is not sym.kconfig.n:
+                    warn_select_imply(sym, sym.weak_rev_dep, "implied")
+
+                for node in sym.nodes:
+                    if node.parent.item is choice:
+                        if not node.prompt:
+                            self._warn("the choice symbol {} has no prompt"
+                                       .format(_name_and_loc(sym)))
+
+                    elif node.prompt:
+                        self._warn("the choice symbol {} is defined with a "
+                                   "prompt outside the choice"
+                                   .format(_name_and_loc(sym)))
+
+    def _parse_error(self, msg):
+        raise KconfigError("{}couldn't parse '{}': {}".format(
+            "" if self._filename is None else
+                "{}:{}: ".format(self._filename, self._linenr),
+            self._line.strip(), msg))
+
+    def _trailing_tokens_error(self):
+        self._parse_error("extra tokens at end of line")
+
+    def _open(self, filename, mode):
+        # open() wrapper:
+        #
+        # - Enable universal newlines mode on Python 2 to ease
+        #   interoperability between Linux and Windows. It's already the
+        #   default on Python 3.
+        #
+        #   The "U" flag would currently work for both Python 2 and 3, but it's
+        #   deprecated on Python 3, so play it future-safe.
+        #
+        #   io.open() defaults to universal newlines on Python 2 (and is an
+        #   alias for open() on Python 3), but it returns 'unicode' strings and
+        #   slows things down:
+        #
+        #     Parsing x86 Kconfigs on Python 2
+        #
+        #     with open(..., "rU"):
+        #
+        #       real  0m0.930s
+        #       user  0m0.905s
+        #       sys   0m0.025s
+        #
+        #     with io.open():
+        #
+        #       real  0m1.069s
+        #       user  0m1.040s
+        #       sys   0m0.029s
+        #
+        #   There's no appreciable performance difference between "r" and
+        #   "rU" for parsing performance on Python 2.
+        #
+        # - For Python 3, force the encoding. Forcing the encoding on Python 2
+        #   turns strings into Unicode strings, which gets messy. Python 2
+        #   doesn't decode regular strings anyway.
+        return open(filename, "rU" if mode == "r" else mode) if _IS_PY2 else \
+               open(filename, mode, encoding=self._encoding)
+
+    def _check_undef_syms(self):
+        # Prints warnings for all references to undefined symbols within the
+        # Kconfig files
+
+        def is_num(s):
+            # Returns True if the string 's' looks like a number.
+            #
+            # Internally, all operands in Kconfig are symbols, only undefined symbols
+            # (which numbers usually are) get their name as their value.
+            #
+            # Only hex numbers that start with 0x/0X are classified as numbers.
+            # Otherwise, symbols whose names happen to contain only the letters A-F
+            # would trigger false positives.
+
+            try:
+                int(s)
+            except ValueError:
+                if not s.startswith(("0x", "0X")):
+                    return False
+
+                try:
+                    int(s, 16)
+                except ValueError:
+                    return False
+
+            return True
+
+        for sym in (self.syms.viewvalues if _IS_PY2 else self.syms.values)():
+            # - sym.nodes empty means the symbol is undefined (has no
+            #   definition locations)
+            #
+            # - Due to Kconfig internals, numbers show up as undefined Kconfig
+            #   symbols, but shouldn't be flagged
+            #
+            # - The MODULES symbol always exists
+            if not sym.nodes and not is_num(sym.name) and \
+               sym.name != "MODULES":
+
+                msg = "undefined symbol {}:".format(sym.name)
+                for node in self.node_iter():
+                    if sym in node.referenced:
+                        msg += "\n\n- Referenced at {}:{}:\n\n{}" \
+                               .format(node.filename, node.linenr, node)
+                self._warn(msg)
+
+    def _warn(self, msg, filename=None, linenr=None):
+        # For printing general warnings
+
+        if not self.warn:
+            return
+
+        msg = "warning: " + msg
+        if filename is not None:
+            msg = "{}:{}: {}".format(filename, linenr, msg)
+
+        self.warnings.append(msg)
+        if self.warn_to_stderr:
+            sys.stderr.write(msg + "\n")
+
+
+class Symbol(object):
+    """
+    Represents a configuration symbol:
+
+      (menu)config FOO
+          ...
+
+    The following attributes are available. They should be viewed as read-only,
+    and some are implemented through @property magic (but are still efficient
+    to access due to internal caching).
+
+    Note: Prompts, help texts, and locations are stored in the Symbol's
+    MenuNode(s) rather than in the Symbol itself. Check the MenuNode class and
+    the Symbol.nodes attribute. This organization matches the C tools.
+
+    name:
+      The name of the symbol, e.g. "FOO" for 'config FOO'.
+
+    type:
+      The type of the symbol. One of BOOL, TRISTATE, STRING, INT, HEX, UNKNOWN.
+      UNKNOWN is for undefined symbols, (non-special) constant symbols, and
+      symbols defined without a type.
+
+      When running without modules (MODULES having the value n), TRISTATE
+      symbols magically change type to BOOL. This also happens for symbols
+      within choices in "y" mode. This matches the C tools, and makes sense for
+      menuconfig-like functionality.
+
+    orig_type:
+      The type as given in the Kconfig file, without any magic applied. Used
+      when printing the symbol.
+
+    str_value:
+      The value of the symbol as a string. Gives the value for string/int/hex
+      symbols. For bool/tristate symbols, gives "n", "m", or "y".
+
+      This is the symbol value that's used in relational expressions
+      (A = B, A != B, etc.)
+
+      Gotcha: For int/hex symbols, the exact format of the value must often be
+      preserved (e.g., when writing a .config file), hence why you can't get it
+      directly as an int. Do int(int_sym.str_value) or
+      int(hex_sym.str_value, 16) to get the integer value.
+
+    tri_value:
+      The tristate value of the symbol as an integer. One of 0, 1, 2,
+      representing n, m, y. Always 0 (n) for non-bool/tristate symbols.
+
+      This is the symbol value that's used outside of relation expressions
+      (A, !A, A && B, A || B).
+
+    assignable:
+      A tuple containing the tristate user values that can currently be
+      assigned to the symbol (that would be respected), ordered from lowest (0,
+      representing n) to highest (2, representing y). This corresponds to the
+      selections available in the menuconfig interface. The set of assignable
+      values is calculated from the symbol's visibility and selects/implies.
+
+      Returns the empty set for non-bool/tristate symbols and for symbols with
+      visibility n. The other possible values are (0, 2), (0, 1, 2), (1, 2),
+      (1,), and (2,). A (1,) or (2,) result means the symbol is visible but
+      "locked" to m or y through a select, perhaps in combination with the
+      visibility. menuconfig represents this as -M- and -*-, respectively.
+
+      For string/hex/int symbols, check if Symbol.visibility is non-0 (non-n)
+      instead to determine if the value can be changed.
+
+      Some handy 'assignable' idioms:
+
+        # Is 'sym' an assignable (visible) bool/tristate symbol?
+        if sym.assignable:
+            # What's the highest value it can be assigned? [-1] in Python
+            # gives the last element.
+            sym_high = sym.assignable[-1]
+
+            # The lowest?
+            sym_low = sym.assignable[0]
+
+            # Can the symbol be set to at least m?
+            if sym.assignable[-1] >= 1:
+                ...
+
+        # Can the symbol be set to m?
+        if 1 in sym.assignable:
+            ...
+
+    visibility:
+      The visibility of the symbol. One of 0, 1, 2, representing n, m, y. See
+      the module documentation for an overview of symbol values and visibility.
+
+    user_value:
+      The user value of the symbol. None if no user value has been assigned
+      (via Kconfig.load_config() or Symbol.set_value()).
+
+      Holds 0, 1, or 2 for bool/tristate symbols, and a string for the other
+      symbol types.
+
+      WARNING: Do not assign directly to this. It will break things. Use
+      Symbol.set_value().
+
+    config_string:
+      The .config assignment string that would get written out for the symbol
+      by Kconfig.write_config(). Returns the empty string if no .config
+      assignment would get written out.
+
+      In general, visible symbols, symbols with (active) defaults, and selected
+      symbols get written out. This includes all non-n-valued bool/tristate
+      symbols, and all visible string/int/hex symbols.
+
+      Symbols with the (no longer needed) 'option env=...' option generate no
+      configuration output, and neither does the special
+      'option defconfig_list' symbol.
+
+      Tip: This field is useful when generating custom configuration output,
+      even for non-.config-like formats. To write just the symbols that would
+      get written out to .config files, do this:
+
+        if sym.config_string:
+            *Write symbol, e.g. by looking sym.str_value*
+
+      This is a superset of the symbols written out by write_autoconf().
+      That function skips all n-valued symbols.
+
+      There usually won't be any great harm in just writing all symbols either,
+      though you might get some special symbols and possibly some "redundant"
+      n-valued symbol entries in there.
+
+    nodes:
+      A list of MenuNodes for this symbol. Will contain a single MenuNode for
+      most symbols. Undefined and constant symbols have an empty nodes list.
+      Symbols defined in multiple locations get one node for each location.
+
+    choice:
+      Holds the parent Choice for choice symbols, and None for non-choice
+      symbols. Doubles as a flag for whether a symbol is a choice symbol.
+
+    defaults:
+      List of (default, cond) tuples for the symbol's 'default' properties. For
+      example, 'default A && B if C || D' is represented as
+      ((AND, A, B), (OR, C, D)). If no condition was given, 'cond' is
+      self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to
+      'default' conditions.
+
+    selects:
+      List of (symbol, cond) tuples for the symbol's 'select' properties. For
+      example, 'select A if B && C' is represented as (A, (AND, B, C)). If no
+      condition was given, 'cond' is self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to 'select'
+      conditions.
+
+    implies:
+      Like 'selects', for imply.
+
+    ranges:
+      List of (low, high, cond) tuples for the symbol's 'range' properties. For
+      example, 'range 1 2 if A' is represented as (1, 2, A). If there is no
+      condition, 'cond' is self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to 'range'
+      conditions.
+
+      Gotcha: 1 and 2 above will be represented as (undefined) Symbols rather
+      than plain integers. Undefined symbols get their name as their string
+      value, so this works out. The C tools work the same way.
+
+    orig_defaults:
+    orig_selects:
+    orig_implies:
+    orig_ranges:
+      See the corresponding attributes on the MenuNode class.
+
+    rev_dep:
+      Reverse dependency expression from other symbols selecting this symbol.
+      Multiple selections get ORed together. A condition on a select is ANDed
+      with the selecting symbol.
+
+      For example, if A has 'select FOO' and B has 'select FOO if C', then
+      FOO's rev_dep will be (OR, A, (AND, B, C)).
+
+    weak_rev_dep:
+      Like rev_dep, for imply.
+
+    direct_dep:
+      The direct ('depends on') dependencies for the symbol, or self.kconfig.y
+      if there are no direct dependencies.
+
+      This attribute includes any dependencies from surrounding menus and ifs.
+      Those get propagated to the direct dependencies, and the resulting direct
+      dependencies in turn get propagated to the conditions of all properties.
+
+      If the symbol is defined in multiple locations, the dependencies from the
+      different locations get ORed together.
+
+    referenced:
+      A set() with all symbols and choices referenced in the properties and
+      property conditions of the symbol.
+
+      Also includes dependencies from surrounding menus and ifs, because those
+      get propagated to the symbol (see the 'Intro to symbol values' section in
+      the module docstring).
+
+      Choices appear in the dependencies of choice symbols.
+
+      For the following definitions, only B and not C appears in A's
+      'referenced'. To get transitive references, you'll have to recursively
+      expand 'references' until no new items appear.
+
+        config A
+                bool
+                depends on B
+
+        config B
+                bool
+                depends on C
+
+        config C
+                bool
+
+      See the Symbol.direct_dep attribute if you're only interested in the
+      direct dependencies of the symbol (its 'depends on'). You can extract the
+      symbols in it with the global expr_items() function.
+
+    env_var:
+      If the Symbol has an 'option env="FOO"' option, this contains the name
+      ("FOO") of the environment variable. None for symbols without no
+      'option env'.
+
+      'option env="FOO"' acts like a 'default' property whose value is the
+      value of $FOO.
+
+      Symbols with 'option env' are never written out to .config files, even if
+      they are visible. env_var corresponds to a flag called SYMBOL_AUTO in the
+      C implementation.
+
+    is_allnoconfig_y:
+      True if the symbol has 'option allnoconfig_y' set on it. This has no
+      effect internally (except when printing symbols), but can be checked by
+      scripts.
+
+    is_constant:
+      True if the symbol is a constant (quoted) symbol.
+
+    kconfig:
+      The Kconfig instance this symbol is from.
+    """
+    __slots__ = (
+        "_cached_assignable",
+        "_cached_str_val",
+        "_cached_tri_val",
+        "_cached_vis",
+        "_dependents",
+        "_old_val",
+        "_visited",
+        "_was_set",
+        "_write_to_conf",
+        "choice",
+        "defaults",
+        "direct_dep",
+        "env_var",
+        "implies",
+        "is_allnoconfig_y",
+        "is_constant",
+        "kconfig",
+        "name",
+        "nodes",
+        "orig_type",
+        "ranges",
+        "rev_dep",
+        "selects",
+        "user_value",
+        "weak_rev_dep",
+    )
+
+    #
+    # Public interface
+    #
+
+    @property
+    def type(self):
+        """
+        See the class documentation.
+        """
+        if self.orig_type is TRISTATE and \
+           (self.choice and self.choice.tri_value == 2 or
+            not self.kconfig.modules.tri_value):
+
+            return BOOL
+
+        return self.orig_type
+
+    @property
+    def str_value(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_str_val is not None:
+            return self._cached_str_val
+
+        if self.orig_type in _BOOL_TRISTATE:
+            # Also calculates the visibility, so invalidation safe
+            self._cached_str_val = TRI_TO_STR[self.tri_value]
+            return self._cached_str_val
+
+        # As a quirk of Kconfig, undefined symbols get their name as their
+        # string value. This is why things like "FOO = bar" work for seeing if
+        # FOO has the value "bar".
+        if not self.orig_type:  # UNKNOWN
+            self._cached_str_val = self.name
+            return self.name
+
+        val = ""
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+
+        self._write_to_conf = (vis != 0)
+
+        if self.orig_type in _INT_HEX:
+            # The C implementation checks the user value against the range in a
+            # separate code path (post-processing after loading a .config).
+            # Checking all values here instead makes more sense for us. It
+            # requires that we check for a range first.
+
+            base = _TYPE_TO_BASE[self.orig_type]
+
+            # Check if a range is in effect
+            for low_expr, high_expr, cond in self.ranges:
+                if expr_value(cond):
+                    has_active_range = True
+
+                    # The zeros are from the C implementation running strtoll()
+                    # on empty strings
+                    low = int(low_expr.str_value, base) if \
+                      _is_base_n(low_expr.str_value, base) else 0
+                    high = int(high_expr.str_value, base) if \
+                      _is_base_n(high_expr.str_value, base) else 0
+
+                    break
+            else:
+                has_active_range = False
+
+            # Defaults are used if the symbol is invisible, lacks a user value,
+            # or has an out-of-range user value
+            use_defaults = True
+
+            if vis and self.user_value:
+                user_val = int(self.user_value, base)
+                if has_active_range and not low <= user_val <= high:
+                    num2str = str if base == 10 else hex
+                    self.kconfig._warn(
+                        "user value {} on the {} symbol {} ignored due to "
+                        "being outside the active range ([{}, {}]) -- falling "
+                        "back on defaults"
+                        .format(num2str(user_val), TYPE_TO_STR[self.orig_type],
+                                _name_and_loc(self),
+                                num2str(low), num2str(high)))
+                else:
+                    # If the user value is well-formed and satisfies range
+                    # contraints, it is stored in exactly the same form as
+                    # specified in the assignment (with or without "0x", etc.)
+                    val = self.user_value
+                    use_defaults = False
+
+            if use_defaults:
+                # No user value or invalid user value. Look at defaults.
+
+                # Used to implement the warning below
+                has_default = False
+
+                for sym, cond in self.defaults:
+                    if expr_value(cond):
+                        has_default = self._write_to_conf = True
+
+                        val = sym.str_value
+
+                        if _is_base_n(val, base):
+                            val_num = int(val, base)
+                        else:
+                            val_num = 0  # strtoll() on empty string
+
+                        break
+                else:
+                    val_num = 0  # strtoll() on empty string
+
+                # This clamping procedure runs even if there's no default
+                if has_active_range:
+                    clamp = None
+                    if val_num < low:
+                        clamp = low
+                    elif val_num > high:
+                        clamp = high
+
+                    if clamp is not None:
+                        # The value is rewritten to a standard form if it is
+                        # clamped
+                        val = str(clamp) \
+                              if self.orig_type is INT else \
+                              hex(clamp)
+
+                        if has_default:
+                            num2str = str if base == 10 else hex
+                            self.kconfig._warn(
+                                "default value {} on {} clamped to {} due to "
+                                "being outside the active range ([{}, {}])"
+                                .format(val_num, _name_and_loc(self),
+                                        num2str(clamp), num2str(low),
+                                        num2str(high)))
+
+        elif self.orig_type is STRING:
+            if vis and self.user_value is not None:
+                # If the symbol is visible and has a user value, use that
+                val = self.user_value
+            else:
+                # Otherwise, look at defaults
+                for sym, cond in self.defaults:
+                    if expr_value(cond):
+                        val = sym.str_value
+                        self._write_to_conf = True
+                        break
+
+        # env_var corresponds to SYMBOL_AUTO in the C implementation, and is
+        # also set on the defconfig_list symbol there. Test for the
+        # defconfig_list symbol explicitly instead here, to avoid a nonsensical
+        # env_var setting and the defconfig_list symbol being printed
+        # incorrectly. This code is pretty cold anyway.
+        if self.env_var is not None or self is self.kconfig.defconfig_list:
+            self._write_to_conf = False
+
+        self._cached_str_val = val
+        return val
+
+    @property
+    def tri_value(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_tri_val is not None:
+            return self._cached_tri_val
+
+        if self.orig_type not in _BOOL_TRISTATE:
+            if self.orig_type:  # != UNKNOWN
+                # Would take some work to give the location here
+                self.kconfig._warn(
+                    "The {} symbol {} is being evaluated in a logical context "
+                    "somewhere. It will always evaluate to n."
+                    .format(TYPE_TO_STR[self.orig_type], _name_and_loc(self)))
+
+            self._cached_tri_val = 0
+            return 0
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+        self._write_to_conf = (vis != 0)
+
+        val = 0
+
+        if not self.choice:
+            # Non-choice symbol
+
+            if vis and self.user_value is not None:
+                # If the symbol is visible and has a user value, use that
+                val = min(self.user_value, vis)
+
+            else:
+                # Otherwise, look at defaults and weak reverse dependencies
+                # (implies)
+
+                for default, cond in self.defaults:
+                    dep_val = expr_value(cond)
+                    if dep_val:
+                        val = min(expr_value(default), dep_val)
+                        if val:
+                            self._write_to_conf = True
+                        break
+
+                # Weak reverse dependencies are only considered if our
+                # direct dependencies are met
+                dep_val = expr_value(self.weak_rev_dep)
+                if dep_val and expr_value(self.direct_dep):
+                    val = max(dep_val, val)
+                    self._write_to_conf = True
+
+            # Reverse (select-related) dependencies take precedence
+            dep_val = expr_value(self.rev_dep)
+            if dep_val:
+                if expr_value(self.direct_dep) < dep_val:
+                    self._warn_select_unsatisfied_deps()
+
+                val = max(dep_val, val)
+                self._write_to_conf = True
+
+            # m is promoted to y for (1) bool symbols and (2) symbols with a
+            # weak_rev_dep (from imply) of y
+            if val == 1 and \
+               (self.type is BOOL or expr_value(self.weak_rev_dep) == 2):
+                val = 2
+
+        elif vis == 2:
+            # Visible choice symbol in y-mode choice. The choice mode limits
+            # the visibility of choice symbols, so it's sufficient to just
+            # check the visibility of the choice symbols themselves.
+            val = 2 if self.choice.selection is self else 0
+
+        elif vis and self.user_value:
+            # Visible choice symbol in m-mode choice, with set non-0 user value
+            val = 1
+
+        self._cached_tri_val = val
+        return val
+
+    @property
+    def assignable(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_assignable is None:
+            self._cached_assignable = self._assignable()
+        return self._cached_assignable
+
+    @property
+    def visibility(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_vis is None:
+            self._cached_vis = _visibility(self)
+        return self._cached_vis
+
+    @property
+    def config_string(self):
+        """
+        See the class documentation.
+        """
+        # _write_to_conf is determined when the value is calculated. This is a
+        # hidden function call due to property magic.
+        val = self.str_value
+        if not self._write_to_conf:
+            return ""
+
+        if self.orig_type in _BOOL_TRISTATE:
+            return "{}{}={}\n" \
+                   .format(self.kconfig.config_prefix, self.name, val) \
+                   if val != "n" else \
+                   "# {}{} is not set\n" \
+                   .format(self.kconfig.config_prefix, self.name)
+
+        if self.orig_type in _INT_HEX:
+            return "{}{}={}\n" \
+                   .format(self.kconfig.config_prefix, self.name, val)
+
+        # sym.orig_type is STRING
+        return '{}{}="{}"\n' \
+               .format(self.kconfig.config_prefix, self.name, escape(val))
+
+    def set_value(self, value):
+        """
+        Sets the user value of the symbol.
+
+        Equal in effect to assigning the value to the symbol within a .config
+        file. For bool and tristate symbols, use the 'assignable' attribute to
+        check which values can currently be assigned. Setting values outside
+        'assignable' will cause Symbol.user_value to differ from
+        Symbol.str/tri_value (be truncated down or up).
+
+        Setting a choice symbol to 2 (y) sets Choice.user_selection to the
+        choice symbol in addition to setting Symbol.user_value.
+        Choice.user_selection is considered when the choice is in y mode (the
+        "normal" mode).
+
+        Other symbols that depend (possibly indirectly) on this symbol are
+        automatically recalculated to reflect the assigned value.
+
+        value:
+          The user value to give to the symbol. For bool and tristate symbols,
+          n/m/y can be specified either as 0/1/2 (the usual format for tristate
+          values in Kconfiglib) or as one of the strings "n"/"m"/"y". For other
+          symbol types, pass a string.
+
+          Note that the value for an int/hex symbol is passed as a string, e.g.
+          "123" or "0x0123". The format of this string is preserved in the
+          output.
+
+          Values that are invalid for the type (such as "foo" or 1 (m) for a
+          BOOL or "0x123" for an INT) are ignored and won't be stored in
+          Symbol.user_value. Kconfiglib will print a warning by default for
+          invalid assignments, and set_value() will return False.
+
+        Returns True if the value is valid for the type of the symbol, and
+        False otherwise. This only looks at the form of the value. For BOOL and
+        TRISTATE symbols, check the Symbol.assignable attribute to see what
+        values are currently in range and would actually be reflected in the
+        value of the symbol. For other symbol types, check whether the
+        visibility is non-n.
+        """
+        if self.orig_type in _BOOL_TRISTATE and value in STR_TO_TRI:
+            value = STR_TO_TRI[value]
+
+        # If the new user value matches the old, nothing changes, and we can
+        # avoid invalidating cached values.
+        #
+        # This optimization is skipped for choice symbols: Setting a choice
+        # symbol's user value to y might change the state of the choice, so it
+        # wouldn't be safe (symbol user values always match the values set in a
+        # .config file or via set_value(), and are never implicitly updated).
+        if value == self.user_value and not self.choice:
+            self._was_set = True
+            return True
+
+        # Check if the value is valid for our type
+        if not (self.orig_type is BOOL     and value in (2, 0)     or
+                self.orig_type is TRISTATE and value in TRI_TO_STR or
+                value.__class__ is str and
+                (self.orig_type is STRING                        or
+                 self.orig_type is INT and _is_base_n(value, 10) or
+                 self.orig_type is HEX and _is_base_n(value, 16)
+                                       and int(value, 16) >= 0)):
+
+            # Display tristate values as n, m, y in the warning
+            self.kconfig._warn(
+                "the value {} is invalid for {}, which has type {} -- "
+                "assignment ignored"
+                .format(TRI_TO_STR[value] if value in TRI_TO_STR else
+                            "'{}'".format(value),
+                        _name_and_loc(self), TYPE_TO_STR[self.orig_type]))
+
+            return False
+
+        self.user_value = value
+        self._was_set = True
+
+        if self.choice and value == 2:
+            # Setting a choice symbol to y makes it the user selection of the
+            # choice. Like for symbol user values, the user selection is not
+            # guaranteed to match the actual selection of the choice, as
+            # dependencies come into play.
+            self.choice.user_selection = self
+            self.choice._was_set = True
+            self.choice._rec_invalidate()
+        else:
+            self._rec_invalidate_if_has_prompt()
+
+        return True
+
+    def unset_value(self):
+        """
+        Removes any user value from the symbol, as if the symbol had never
+        gotten a user value via Kconfig.load_config() or Symbol.set_value().
+        """
+        if self.user_value is not None:
+            self.user_value = None
+            self._rec_invalidate_if_has_prompt()
+
+    @property
+    def referenced(self):
+        """
+        See the class documentation.
+        """
+        return {item for node in self.nodes for item in node.referenced}
+
+    @property
+    def orig_defaults(self):
+        """
+        See the class documentation.
+        """
+        return [d for node in self.nodes for d in node.orig_defaults]
+
+    @property
+    def orig_selects(self):
+        """
+        See the class documentation.
+        """
+        return [s for node in self.nodes for s in node.orig_selects]
+
+    @property
+    def orig_implies(self):
+        """
+        See the class documentation.
+        """
+        return [i for node in self.nodes for i in node.orig_implies]
+
+    @property
+    def orig_ranges(self):
+        """
+        See the class documentation.
+        """
+        return [r for node in self.nodes for r in node.orig_ranges]
+
+    def __repr__(self):
+        """
+        Returns a string with information about the symbol (including its name,
+        value, visibility, and location(s)) when it is evaluated on e.g. the
+        interactive Python prompt.
+        """
+        fields = ["symbol " + self.name, TYPE_TO_STR[self.type]]
+        add = fields.append
+
+        for node in self.nodes:
+            if node.prompt:
+                add('"{}"'.format(node.prompt[0]))
+
+        # Only add quotes for non-bool/tristate symbols
+        add("value " + (self.str_value if self.orig_type in _BOOL_TRISTATE
+                        else '"{}"'.format(self.str_value)))
+
+        if not self.is_constant:
+            # These aren't helpful to show for constant symbols
+
+            if self.user_value is not None:
+                # Only add quotes for non-bool/tristate symbols
+                add("user value " + (TRI_TO_STR[self.user_value]
+                                     if self.orig_type in _BOOL_TRISTATE
+                                     else '"{}"'.format(self.user_value)))
+
+            add("visibility " + TRI_TO_STR[self.visibility])
+
+            if self.choice:
+                add("choice symbol")
+
+            if self.is_allnoconfig_y:
+                add("allnoconfig_y")
+
+            if self is self.kconfig.defconfig_list:
+                add("is the defconfig_list symbol")
+
+            if self.env_var is not None:
+                add("from environment variable " + self.env_var)
+
+            if self is self.kconfig.modules:
+                add("is the modules symbol")
+
+            add("direct deps " + TRI_TO_STR[expr_value(self.direct_dep)])
+
+        if self.nodes:
+            for node in self.nodes:
+                add("{}:{}".format(node.filename, node.linenr))
+        else:
+            add("constant" if self.is_constant else "undefined")
+
+        return "<{}>".format(", ".join(fields))
+
+    def __str__(self):
+        """
+        Returns a string representation of the symbol when it is printed.
+        Matches the Kconfig format, with any parent dependencies propagated to
+        the 'depends on' condition.
+
+        The string is constructed by joining the strings returned by
+        MenuNode.__str__() for each of the symbol's menu nodes, so symbols
+        defined in multiple locations will return a string with all
+        definitions.
+
+        The returned string does not end in a newline. An empty string is
+        returned for undefined and constant symbols.
+        """
+        return self.custom_str(standard_sc_expr_str)
+
+    def custom_str(self, sc_expr_str_fn):
+        """
+        Works like Symbol.__str__(), but allows a custom format to be used for
+        all symbol/choice references. See expr_str().
+        """
+        return "\n\n".join(node.custom_str(sc_expr_str_fn)
+                           for node in self.nodes)
+
+    #
+    # Private methods
+    #
+
+    def __init__(self):
+        """
+        Symbol constructor -- not intended to be called directly by Kconfiglib
+        clients.
+        """
+        # These attributes are always set on the instance from outside and
+        # don't need defaults:
+        #   kconfig
+        #   direct_dep
+        #   is_constant
+        #   name
+        #   rev_dep
+        #   weak_rev_dep
+
+        # - UNKNOWN == 0
+        # - _visited is used during tree iteration and dep. loop detection
+        self.orig_type = self._visited = 0
+
+        self.nodes = []
+
+        self.defaults = []
+        self.selects = []
+        self.implies = []
+        self.ranges = []
+
+        self.user_value = \
+        self.choice = \
+        self.env_var = \
+        self._cached_str_val = self._cached_tri_val = self._cached_vis = \
+        self._cached_assignable = None
+
+        # _write_to_conf is calculated along with the value. If True, the
+        # Symbol gets a .config entry.
+
+        self.is_allnoconfig_y = \
+        self._was_set = \
+        self._write_to_conf = False
+
+        # See Kconfig._build_dep()
+        self._dependents = set()
+
+    def _assignable(self):
+        # Worker function for the 'assignable' attribute
+
+        if self.orig_type not in _BOOL_TRISTATE:
+            return ()
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+        if not vis:
+            return ()
+
+        rev_dep_val = expr_value(self.rev_dep)
+
+        if vis == 2:
+            if self.choice:
+                return (2,)
+
+            if not rev_dep_val:
+                if self.type is BOOL or expr_value(self.weak_rev_dep) == 2:
+                    return (0, 2)
+                return (0, 1, 2)
+
+            if rev_dep_val == 2:
+                return (2,)
+
+            # rev_dep_val == 1
+
+            if self.type is BOOL or expr_value(self.weak_rev_dep) == 2:
+                return (2,)
+            return (1, 2)
+
+        # vis == 1
+
+        # Must be a tristate here, because bool m visibility gets promoted to y
+
+        if not rev_dep_val:
+            return (0, 1) if expr_value(self.weak_rev_dep) != 2 else (0, 2)
+
+        if rev_dep_val == 2:
+            return (2,)
+
+        # vis == rev_dep_val == 1
+
+        return (1,)
+
+    def _invalidate(self):
+        # Marks the symbol as needing to be recalculated
+
+        self._cached_str_val = self._cached_tri_val = self._cached_vis = \
+        self._cached_assignable = None
+
+    def _rec_invalidate(self):
+        # Invalidates the symbol and all items that (possibly) depend on it
+
+        if self is self.kconfig.modules:
+            # Invalidating MODULES has wide-ranging effects
+            self.kconfig._invalidate_all()
+        else:
+            self._invalidate()
+
+            for item in self._dependents:
+                # _cached_vis doubles as a flag that tells us whether 'item'
+                # has cached values, because it's calculated as a side effect
+                # of calculating all other (non-constant) cached values.
+                #
+                # If item._cached_vis is None, it means there can't be cached
+                # values on other items that depend on 'item', because if there
+                # were, some value on 'item' would have been calculated and
+                # item._cached_vis set as a side effect. It's therefore safe to
+                # stop the invalidation at symbols with _cached_vis None.
+                #
+                # This approach massively speeds up scripts that set a lot of
+                # values, vs simply invalidating all possibly dependent symbols
+                # (even when you already have a list of all the dependent
+                # symbols, because some symbols get huge dependency trees).
+                #
+                # This gracefully handles dependency loops too, which is nice
+                # for choices, where the choice depends on the choice symbols
+                # and vice versa.
+                if item._cached_vis is not None:
+                    item._rec_invalidate()
+
+    def _rec_invalidate_if_has_prompt(self):
+        # Invalidates the symbol and its dependent symbols, but only if the
+        # symbol has a prompt. User values never have an effect on promptless
+        # symbols, so we skip invalidation for them as an optimization.
+        #
+        # This also prevents constant (quoted) symbols from being invalidated
+        # if set_value() is called on them, which would make them lose their
+        # value and break things.
+        #
+        # Prints a warning if the symbol has no prompt. In some contexts (e.g.
+        # when loading a .config files) assignments to promptless symbols are
+        # normal and expected, so the warning can be disabled.
+
+        for node in self.nodes:
+            if node.prompt:
+                self._rec_invalidate()
+                return
+
+        if self.kconfig._warn_assign_no_prompt:
+            self.kconfig._warn(_name_and_loc(self) + " has no prompt, meaning "
+                               "user values have no effect on it")
+
+    def _str_default(self):
+        # write_min_config() helper function. Returns the value the symbol
+        # would get from defaults if it didn't have a user value. Uses exactly
+        # the same algorithm as the C implementation (though a bit cleaned up),
+        # for compatibility.
+
+        if self.orig_type in _BOOL_TRISTATE:
+            val = 0
+
+            # Defaults, selects, and implies do not affect choice symbols
+            if not self.choice:
+                for default, cond in self.defaults:
+                    cond_val = expr_value(cond)
+                    if cond_val:
+                        val = min(expr_value(default), cond_val)
+                        break
+
+                val = max(expr_value(self.rev_dep),
+                          expr_value(self.weak_rev_dep),
+                          val)
+
+                # Transpose mod to yes if type is bool (possibly due to modules
+                # being disabled)
+                if val == 1 and self.type is BOOL:
+                    val = 2
+
+            return TRI_TO_STR[val]
+
+        if self.orig_type:  # STRING/INT/HEX
+            for default, cond in self.defaults:
+                if expr_value(cond):
+                    return default.str_value
+
+        return ""
+
+    def _warn_select_unsatisfied_deps(self):
+        # Helper for printing an informative warning when a symbol with
+        # unsatisfied direct dependencies (dependencies from 'depends on', ifs,
+        # and menus) is selected by some other symbol. Also warn if a symbol
+        # whose direct dependencies evaluate to m is selected to y.
+
+        msg = "{} has direct dependencies {} with value {}, but is " \
+              "currently being {}-selected by the following symbols:" \
+              .format(_name_and_loc(self), expr_str(self.direct_dep),
+                      TRI_TO_STR[expr_value(self.direct_dep)],
+                      TRI_TO_STR[expr_value(self.rev_dep)])
+
+        # The reverse dependencies from each select are ORed together
+        for select in split_expr(self.rev_dep, OR):
+            if expr_value(select) <= expr_value(self.direct_dep):
+                # Only include selects that exceed the direct dependencies
+                continue
+
+            # - 'select A if B' turns into A && B
+            # - 'select A' just turns into A
+            #
+            # In both cases, we can split on AND and pick the first operand
+            selecting_sym = split_expr(select, AND)[0]
+
+            msg += "\n - {}, with value {}, direct dependencies {} " \
+                   "(value: {})" \
+                   .format(_name_and_loc(selecting_sym),
+                           selecting_sym.str_value,
+                           expr_str(selecting_sym.direct_dep),
+                           TRI_TO_STR[expr_value(selecting_sym.direct_dep)])
+
+            if select.__class__ is tuple:
+                msg += ", and select condition {} (value: {})" \
+                       .format(expr_str(select[2]),
+                               TRI_TO_STR[expr_value(select[2])])
+
+        self.kconfig._warn(msg)
+
+
+class Choice(object):
+    """
+    Represents a choice statement:
+
+      choice
+          ...
+      endchoice
+
+    The following attributes are available on Choice instances. They should be
+    treated as read-only, and some are implemented through @property magic (but
+    are still efficient to access due to internal caching).
+
+    Note: Prompts, help texts, and locations are stored in the Choice's
+    MenuNode(s) rather than in the Choice itself. Check the MenuNode class and
+    the Choice.nodes attribute. This organization matches the C tools.
+
+    name:
+      The name of the choice, e.g. "FOO" for 'choice FOO', or None if the
+      Choice has no name.
+
+    type:
+      The type of the choice. One of BOOL, TRISTATE, UNKNOWN. UNKNOWN is for
+      choices defined without a type where none of the contained symbols have a
+      type either (otherwise the choice inherits the type of the first symbol
+      defined with a type).
+
+      When running without modules (CONFIG_MODULES=n), TRISTATE choices
+      magically change type to BOOL. This matches the C tools, and makes sense
+      for menuconfig-like functionality.
+
+    orig_type:
+      The type as given in the Kconfig file, without any magic applied. Used
+      when printing the choice.
+
+    tri_value:
+      The tristate value (mode) of the choice. A choice can be in one of three
+      modes:
+
+        0 (n) - The choice is disabled and no symbols can be selected. For
+                visible choices, this mode is only possible for choices with
+                the 'optional' flag set (see kconfig-language.txt).
+
+        1 (m) - Any number of choice symbols can be set to m, the rest will
+                be n.
+
+        2 (y) - One symbol will be y, the rest n.
+
+      Only tristate choices can be in m mode. The visibility of the choice is
+      an upper bound on the mode, and the mode in turn is an upper bound on the
+      visibility of the choice symbols.
+
+      To change the mode, use Choice.set_value().
+
+      Implementation note:
+        The C tools internally represent choices as a type of symbol, with
+        special-casing in many code paths. This is why there is a lot of
+        similarity to Symbol. The value (mode) of a choice is really just a
+        normal symbol value, and an implicit reverse dependency forces its
+        lower bound to m for visible non-optional choices (the reverse
+        dependency is 'm && <visibility>').
+
+        Symbols within choices get the choice propagated as a dependency to
+        their properties. This turns the mode of the choice into an upper bound
+        on e.g. the visibility of choice symbols, and explains the gotcha
+        related to printing choice symbols mentioned in the module docstring.
+
+        Kconfiglib uses a separate Choice class only because it makes the code
+        and interface less confusing (especially in a user-facing interface).
+        Corresponding attributes have the same name in the Symbol and Choice
+        classes, for consistency and compatibility.
+
+    assignable:
+      See the symbol class documentation. Gives the assignable values (modes).
+
+    visibility:
+      See the Symbol class documentation. Acts on the value (mode).
+
+    selection:
+      The Symbol instance of the currently selected symbol. None if the Choice
+      is not in y mode or has no selected symbol (due to unsatisfied
+      dependencies on choice symbols).
+
+      WARNING: Do not assign directly to this. It will break things. Call
+      sym.set_value(2) on the choice symbol you want to select instead.
+
+    user_value:
+      The value (mode) selected by the user through Choice.set_value(). Either
+      0, 1, or 2, or None if the user hasn't selected a mode. See
+      Symbol.user_value.
+
+      WARNING: Do not assign directly to this. It will break things. Use
+      Choice.set_value() instead.
+
+    user_selection:
+      The symbol selected by the user (by setting it to y). Ignored if the
+      choice is not in y mode, but still remembered so that the choice "snaps
+      back" to the user selection if the mode is changed back to y. This might
+      differ from 'selection' due to unsatisfied dependencies.
+
+      WARNING: Do not assign directly to this. It will break things. Call
+      sym.set_value(2) on the choice symbol to be selected instead.
+
+    syms:
+      List of symbols contained in the choice.
+
+      Obscure gotcha: If a symbol depends on the previous symbol within a
+      choice so that an implicit menu is created, it won't be a choice symbol,
+      and won't be included in 'syms'.
+
+    nodes:
+      A list of MenuNodes for this choice. In practice, the list will probably
+      always contain a single MenuNode, but it is possible to give a choice a
+      name and define it in multiple locations.
+
+    defaults:
+      List of (symbol, cond) tuples for the choice's 'defaults' properties. For
+      example, 'default A if B && C' is represented as (A, (AND, B, C)). If
+      there is no condition, 'cond' is self.kconfig.y.
+
+      Note that 'depends on' and parent dependencies are propagated to
+      'default' conditions.
+
+    orig_defaults:
+      See the corresponding attribute on the MenuNode class.
+
+    direct_dep:
+      See Symbol.direct_dep.
+
+    referenced:
+      A set() with all symbols referenced in the properties and property
+      conditions of the choice.
+
+      Also includes dependencies from surrounding menus and ifs, because those
+      get propagated to the choice (see the 'Intro to symbol values' section in
+      the module docstring).
+
+    is_optional:
+      True if the choice has the 'optional' flag set on it and can be in
+      n mode.
+
+    kconfig:
+      The Kconfig instance this choice is from.
+    """
+    __slots__ = (
+        "_cached_assignable",
+        "_cached_selection",
+        "_cached_vis",
+        "_dependents",
+        "_visited",
+        "_was_set",
+        "defaults",
+        "direct_dep",
+        "is_constant",
+        "is_optional",
+        "kconfig",
+        "name",
+        "nodes",
+        "orig_type",
+        "syms",
+        "user_selection",
+        "user_value",
+    )
+
+    #
+    # Public interface
+    #
+
+    @property
+    def type(self):
+        """
+        Returns the type of the choice. See Symbol.type.
+        """
+        if self.orig_type is TRISTATE and not self.kconfig.modules.tri_value:
+            return BOOL
+        return self.orig_type
+
+    @property
+    def str_value(self):
+        """
+        See the class documentation.
+        """
+        return TRI_TO_STR[self.tri_value]
+
+    @property
+    def tri_value(self):
+        """
+        See the class documentation.
+        """
+        # This emulates a reverse dependency of 'm && visibility' for
+        # non-optional choices, which is how the C implementation does it
+
+        val = 0 if self.is_optional else 1
+
+        if self.user_value is not None:
+            val = max(val, self.user_value)
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        val = min(val, self.visibility)
+
+        # Promote m to y for boolean choices
+        return 2 if val == 1 and self.type is BOOL else val
+
+    @property
+    def assignable(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_assignable is None:
+            self._cached_assignable = self._assignable()
+        return self._cached_assignable
+
+    @property
+    def visibility(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_vis is None:
+            self._cached_vis = _visibility(self)
+        return self._cached_vis
+
+    @property
+    def selection(self):
+        """
+        See the class documentation.
+        """
+        if self._cached_selection is _NO_CACHED_SELECTION:
+            self._cached_selection = self._selection()
+        return self._cached_selection
+
+    def set_value(self, value):
+        """
+        Sets the user value (mode) of the choice. Like for Symbol.set_value(),
+        the visibility might truncate the value. Choices without the 'optional'
+        attribute (is_optional) can never be in n mode, but 0/"n" is still
+        accepted since it's not a malformed value (though it will have no
+        effect).
+
+        Returns True if the value is valid for the type of the choice, and
+        False otherwise. This only looks at the form of the value. Check the
+        Choice.assignable attribute to see what values are currently in range
+        and would actually be reflected in the mode of the choice.
+        """
+        if value in STR_TO_TRI:
+            value = STR_TO_TRI[value]
+
+        if value == self.user_value:
+            # We know the value must be valid if it was successfully set
+            # previously
+            self._was_set = True
+            return True
+
+        if not (self.orig_type is BOOL     and value in (2, 0) or
+                self.orig_type is TRISTATE and value in TRI_TO_STR):
+
+            # Display tristate values as n, m, y in the warning
+            self.kconfig._warn(
+                "the value {} is invalid for {}, which has type {} -- "
+                "assignment ignored"
+                .format(TRI_TO_STR[value] if value in TRI_TO_STR else
+                            "'{}'".format(value),
+                        _name_and_loc(self), TYPE_TO_STR[self.orig_type]))
+
+            return False
+
+        self.user_value = value
+        self._was_set = True
+        self._rec_invalidate()
+
+        return True
+
+    def unset_value(self):
+        """
+        Resets the user value (mode) and user selection of the Choice, as if
+        the user had never touched the mode or any of the choice symbols.
+        """
+        if self.user_value is not None or self.user_selection:
+            self.user_value = self.user_selection = None
+            self._rec_invalidate()
+
+    @property
+    def referenced(self):
+        """
+        See the class documentation.
+        """
+        return {item for node in self.nodes for item in node.referenced}
+
+    @property
+    def orig_defaults(self):
+        """
+        See the class documentation.
+        """
+        return [d for node in self.nodes for d in node.orig_defaults]
+
+    def __repr__(self):
+        """
+        Returns a string with information about the choice when it is evaluated
+        on e.g. the interactive Python prompt.
+        """
+        fields = ["choice " + self.name if self.name else "choice",
+                  TYPE_TO_STR[self.type]]
+        add = fields.append
+
+        for node in self.nodes:
+            if node.prompt:
+                add('"{}"'.format(node.prompt[0]))
+
+        add("mode " + self.str_value)
+
+        if self.user_value is not None:
+            add('user mode {}'.format(TRI_TO_STR[self.user_value]))
+
+        if self.selection:
+            add("{} selected".format(self.selection.name))
+
+        if self.user_selection:
+            user_sel_str = "{} selected by user" \
+                           .format(self.user_selection.name)
+
+            if self.selection is not self.user_selection:
+                user_sel_str += " (overridden)"
+
+            add(user_sel_str)
+
+        add("visibility " + TRI_TO_STR[self.visibility])
+
+        if self.is_optional:
+            add("optional")
+
+        for node in self.nodes:
+            add("{}:{}".format(node.filename, node.linenr))
+
+        return "<{}>".format(", ".join(fields))
+
+    def __str__(self):
+        """
+        Returns a string representation of the choice when it is printed.
+        Matches the Kconfig format (though without the contained choice
+        symbols), with any parent dependencies propagated to the 'depends on'
+        condition.
+
+        The returned string does not end in a newline.
+
+        See Symbol.__str__() as well.
+        """
+        return self.custom_str(standard_sc_expr_str)
+
+    def custom_str(self, sc_expr_str_fn):
+        """
+        Works like Choice.__str__(), but allows a custom format to be used for
+        all symbol/choice references. See expr_str().
+        """
+        return "\n\n".join(node.custom_str(sc_expr_str_fn)
+                           for node in self.nodes)
+
+    #
+    # Private methods
+    #
+
+    def __init__(self):
+        """
+        Choice constructor -- not intended to be called directly by Kconfiglib
+        clients.
+        """
+        # These attributes are always set on the instance from outside and
+        # don't need defaults:
+        #   direct_dep
+        #   kconfig
+
+        # - UNKNOWN == 0
+        # - _visited is used during dep. loop detection
+        self.orig_type = self._visited = 0
+
+        self.nodes = []
+
+        self.syms = []
+        self.defaults = []
+
+        self.name = \
+        self.user_value = self.user_selection = \
+        self._cached_vis = self._cached_assignable = None
+
+        self._cached_selection = _NO_CACHED_SELECTION
+
+        # is_constant is checked by _make_depend_on(). Just set it to avoid
+        # having to special-case choices.
+        self.is_constant = self.is_optional = False
+
+        # See Kconfig._build_dep()
+        self._dependents = set()
+
+    def _assignable(self):
+        # Worker function for the 'assignable' attribute
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        vis = self.visibility
+
+        if not vis:
+            return ()
+
+        if vis == 2:
+            if not self.is_optional:
+                return (2,) if self.type is BOOL else (1, 2)
+            return (0, 2) if self.type is BOOL else (0, 1, 2)
+
+        # vis == 1
+
+        return (0, 1) if self.is_optional else (1,)
+
+    def _selection(self):
+        # Worker function for the 'selection' attribute
+
+        # Warning: See Symbol._rec_invalidate(), and note that this is a hidden
+        # function call (property magic)
+        if self.tri_value != 2:
+            # Not in y mode, so no selection
+            return None
+
+        # Use the user selection if it's visible
+        if self.user_selection and self.user_selection.visibility:
+            return self.user_selection
+
+        # Otherwise, check if we have a default
+        return self._selection_from_defaults()
+
+    def _selection_from_defaults(self):
+        # Check if we have a default
+        for sym, cond in self.defaults:
+            # The default symbol must be visible too
+            if expr_value(cond) and sym.visibility:
+                return sym
+
+        # Otherwise, pick the first visible symbol, if any
+        for sym in self.syms:
+            if sym.visibility:
+                return sym
+
+        # Couldn't find a selection
+        return None
+
+    def _invalidate(self):
+        self._cached_vis = self._cached_assignable = None
+        self._cached_selection = _NO_CACHED_SELECTION
+
+    def _rec_invalidate(self):
+        # See Symbol._rec_invalidate()
+
+        self._invalidate()
+
+        for item in self._dependents:
+            if item._cached_vis is not None:
+                item._rec_invalidate()
+
+
+class MenuNode(object):
+    """
+    Represents a menu node in the configuration. This corresponds to an entry
+    in e.g. the 'make menuconfig' interface, though non-visible choices, menus,
+    and comments also get menu nodes. If a symbol or choice is defined in
+    multiple locations, it gets one menu node for each location.
+
+    The top-level menu node, corresponding to the implicit top-level menu, is
+    available in Kconfig.top_node.
+
+    The menu nodes for a Symbol or Choice can be found in the
+    Symbol/Choice.nodes attribute. Menus and comments are represented as plain
+    menu nodes, with their text stored in the prompt attribute (prompt[0]).
+    This mirrors the C implementation.
+
+    The following attributes are available on MenuNode instances. They should
+    be viewed as read-only.
+
+    item:
+      Either a Symbol, a Choice, or one of the constants MENU and COMMENT.
+      Menus and comments are represented as plain menu nodes. Ifs are collapsed
+      (matching the C implementation) and do not appear in the final menu tree.
+
+    next:
+      The following menu node. None if there is no following node.
+
+    list:
+      The first child menu node. None if there are no children.
+
+      Choices and menus naturally have children, but Symbols can also have
+      children because of menus created automatically from dependencies (see
+      kconfig-language.txt).
+
+    parent:
+      The parent menu node. None if there is no parent.
+
+    prompt:
+      A (string, cond) tuple with the prompt for the menu node and its
+      conditional expression (which is self.kconfig.y if there is no
+      condition). None if there is no prompt.
+
+      For symbols and choices, the prompt is stored in the MenuNode rather than
+      the Symbol or Choice instance. For menus and comments, the prompt holds
+      the text.
+
+    defaults:
+      The 'default' properties for this particular menu node. See
+      symbol.defaults.
+
+      When evaluating defaults, you should use Symbol/Choice.defaults instead,
+      as it include properties from all menu nodes (a symbol/choice can have
+      multiple definition locations/menu nodes). MenuNode.defaults is meant for
+      documentation generation.
+
+    selects:
+      Like MenuNode.defaults, for selects.
+
+    implies:
+      Like MenuNode.defaults, for implies.
+
+    ranges:
+      Like MenuNode.defaults, for ranges.
+
+    orig_prompt:
+    orig_defaults:
+    orig_selects:
+    orig_implies:
+    orig_ranges:
+      These work the like the corresponding attributes without orig_*, but omit
+      any dependencies propagated from 'depends on' and surrounding 'if's (the
+      direct dependencies, stored in MenuNode.dep).
+
+      One use for this is generating less cluttered documentation, by only
+      showing the direct dependencies in one place.
+
+    help:
+      The help text for the menu node for Symbols and Choices. None if there is
+      no help text. Always stored in the node rather than the Symbol or Choice.
+      It is possible to have a separate help text at each location if a symbol
+      is defined in multiple locations.
+
+      Trailing whitespace (including a final newline) is stripped from the help
+      text. This was not the case before Kconfiglib 10.21.0, where the format
+      was undocumented.
+
+    dep:
+      The direct ('depends on') dependencies for the menu node, or
+      self.kconfig.y if there are no direct dependencies.
+
+      This attribute includes any dependencies from surrounding menus and ifs.
+      Those get propagated to the direct dependencies, and the resulting direct
+      dependencies in turn get propagated to the conditions of all properties.
+
+      If a symbol or choice is defined in multiple locations, only the
+      properties defined at a particular location get the corresponding
+      MenuNode.dep dependencies propagated to them.
+
+    visibility:
+      The 'visible if' dependencies for the menu node (which must represent a
+      menu), or self.kconfig.y if there are no 'visible if' dependencies.
+      'visible if' dependencies are recursively propagated to the prompts of
+      symbols and choices within the menu.
+
+    referenced:
+      A set() with all symbols and choices referenced in the properties and
+      property conditions of the menu node.
+
+      Also includes dependencies inherited from surrounding menus and ifs.
+      Choices appear in the dependencies of choice symbols.
+
+    is_menuconfig:
+      Set to True if the children of the menu node should be displayed in a
+      separate menu. This is the case for the following items:
+
+        - Menus (node.item == MENU)
+
+        - Choices
+
+        - Symbols defined with the 'menuconfig' keyword. The children come from
+          implicitly created submenus, and should be displayed in a separate
+          menu rather than being indented.
+
+      'is_menuconfig' is just a hint on how to display the menu node. It's
+      ignored internally by Kconfiglib, except when printing symbols.
+
+    filename/linenr:
+      The location where the menu node appears. The filename is relative to
+      $srctree (or to the current directory if $srctree isn't set), except
+      absolute paths are used for paths outside $srctree.
+
+    include_path:
+      A tuple of (filename, linenr) tuples, giving the locations of the
+      'source' statements via which the Kconfig file containing this menu node
+      was included. The first element is the location of the 'source' statement
+      in the top-level Kconfig file passed to Kconfig.__init__(), etc.
+
+      Note that the Kconfig file of the menu node itself isn't included. Check
+      'filename' and 'linenr' for that.
+
+    kconfig:
+      The Kconfig instance the menu node is from.
+    """
+    __slots__ = (
+        "dep",
+        "filename",
+        "help",
+        "include_path",
+        "is_menuconfig",
+        "item",
+        "kconfig",
+        "linenr",
+        "list",
+        "next",
+        "parent",
+        "prompt",
+        "visibility",
+
+        # Properties
+        "defaults",
+        "selects",
+        "implies",
+        "ranges",
+    )
+
+    def __init__(self):
+        # Properties defined on this particular menu node. A local 'depends on'
+        # only applies to these, in case a symbol is defined in multiple
+        # locations.
+        self.defaults = []
+        self.selects = []
+        self.implies = []
+        self.ranges = []
+
+    @property
+    def orig_prompt(self):
+        """
+        See the class documentation.
+        """
+        if not self.prompt:
+            return None
+        return (self.prompt[0], self._strip_dep(self.prompt[1]))
+
+    @property
+    def orig_defaults(self):
+        """
+        See the class documentation.
+        """
+        return [(default, self._strip_dep(cond))
+                for default, cond in self.defaults]
+
+    @property
+    def orig_selects(self):
+        """
+        See the class documentation.
+        """
+        return [(select, self._strip_dep(cond))
+                for select, cond in self.selects]
+
+    @property
+    def orig_implies(self):
+        """
+        See the class documentation.
+        """
+        return [(imply, self._strip_dep(cond))
+                for imply, cond in self.implies]
+
+    @property
+    def orig_ranges(self):
+        """
+        See the class documentation.
+        """
+        return [(low, high, self._strip_dep(cond))
+                for low, high, cond in self.ranges]
+
+    @property
+    def referenced(self):
+        """
+        See the class documentation.
+        """
+        # self.dep is included to catch dependencies from a lone 'depends on'
+        # when there are no properties to propagate it to
+        res = expr_items(self.dep)
+
+        if self.prompt:
+            res |= expr_items(self.prompt[1])
+
+        if self.item is MENU:
+            res |= expr_items(self.visibility)
+
+        for value, cond in self.defaults:
+            res |= expr_items(value)
+            res |= expr_items(cond)
+
+        for value, cond in self.selects:
+            res.add(value)
+            res |= expr_items(cond)
+
+        for value, cond in self.implies:
+            res.add(value)
+            res |= expr_items(cond)
+
+        for low, high, cond in self.ranges:
+            res.add(low)
+            res.add(high)
+            res |= expr_items(cond)
+
+        return res
+
+    def __repr__(self):
+        """
+        Returns a string with information about the menu node when it is
+        evaluated on e.g. the interactive Python prompt.
+        """
+        fields = []
+        add = fields.append
+
+        if self.item.__class__ is Symbol:
+            add("menu node for symbol " + self.item.name)
+
+        elif self.item.__class__ is Choice:
+            s = "menu node for choice"
+            if self.item.name is not None:
+                s += " " + self.item.name
+            add(s)
+
+        elif self.item is MENU:
+            add("menu node for menu")
+
+        else:  # self.item is COMMENT
+            add("menu node for comment")
+
+        if self.prompt:
+            add('prompt "{}" (visibility {})'.format(
+                self.prompt[0], TRI_TO_STR[expr_value(self.prompt[1])]))
+
+        if self.item.__class__ is Symbol and self.is_menuconfig:
+            add("is menuconfig")
+
+        add("deps " + TRI_TO_STR[expr_value(self.dep)])
+
+        if self.item is MENU:
+            add("'visible if' deps " + TRI_TO_STR[expr_value(self.visibility)])
+
+        if self.item.__class__ in _SYMBOL_CHOICE and self.help is not None:
+            add("has help")
+
+        if self.list:
+            add("has child")
+
+        if self.next:
+            add("has next")
+
+        add("{}:{}".format(self.filename, self.linenr))
+
+        return "<{}>".format(", ".join(fields))
+
+    def __str__(self):
+        """
+        Returns a string representation of the menu node. Matches the Kconfig
+        format, with any parent dependencies propagated to the 'depends on'
+        condition.
+
+        The output could (almost) be fed back into a Kconfig parser to redefine
+        the object associated with the menu node. See the module documentation
+        for a gotcha related to choice symbols.
+
+        For symbols and choices with multiple menu nodes (multiple definition
+        locations), properties that aren't associated with a particular menu
+        node are shown on all menu nodes ('option env=...', 'optional' for
+        choices, etc.).
+
+        The returned string does not end in a newline.
+        """
+        return self.custom_str(standard_sc_expr_str)
+
+    def custom_str(self, sc_expr_str_fn):
+        """
+        Works like MenuNode.__str__(), but allows a custom format to be used
+        for all symbol/choice references. See expr_str().
+        """
+        return self._menu_comment_node_str(sc_expr_str_fn) \
+               if self.item in _MENU_COMMENT else \
+               self._sym_choice_node_str(sc_expr_str_fn)
+
+    def _menu_comment_node_str(self, sc_expr_str_fn):
+        s = '{} "{}"'.format("menu" if self.item is MENU else "comment",
+                             self.prompt[0])
+
+        if self.dep is not self.kconfig.y:
+            s += "\n\tdepends on {}".format(expr_str(self.dep, sc_expr_str_fn))
+
+        if self.item is MENU and self.visibility is not self.kconfig.y:
+            s += "\n\tvisible if {}".format(expr_str(self.visibility,
+                                                     sc_expr_str_fn))
+
+        return s
+
+    def _sym_choice_node_str(self, sc_expr_str_fn):
+        def indent_add(s):
+            lines.append("\t" + s)
+
+        def indent_add_cond(s, cond):
+            if cond is not self.kconfig.y:
+                s += " if " + expr_str(cond, sc_expr_str_fn)
+            indent_add(s)
+
+        sc = self.item
+
+        if sc.__class__ is Symbol:
+            lines = [("menuconfig " if self.is_menuconfig else "config ")
+                     + sc.name]
+        else:
+            lines = ["choice " + sc.name if sc.name else "choice"]
+
+        if sc.orig_type and not self.prompt:  # sc.orig_type != UNKNOWN
+            # If there's a prompt, we'll use the '<type> "prompt"' shorthand
+            # instead
+            indent_add(TYPE_TO_STR[sc.orig_type])
+
+        if self.prompt:
+            if sc.orig_type:
+                prefix = TYPE_TO_STR[sc.orig_type]
+            else:
+                # Symbol defined without a type (which generates a warning)
+                prefix = "prompt"
+
+            indent_add_cond(prefix + ' "{}"'.format(escape(self.prompt[0])),
+                            self.orig_prompt[1])
+
+        if sc.__class__ is Symbol:
+            if sc.is_allnoconfig_y:
+                indent_add("option allnoconfig_y")
+
+            if sc is sc.kconfig.defconfig_list:
+                indent_add("option defconfig_list")
+
+            if sc.env_var is not None:
+                indent_add('option env="{}"'.format(sc.env_var))
+
+            if sc is sc.kconfig.modules:
+                indent_add("option modules")
+
+            for low, high, cond in self.orig_ranges:
+                indent_add_cond(
+                    "range {} {}".format(sc_expr_str_fn(low),
+                                         sc_expr_str_fn(high)),
+                    cond)
+
+        for default, cond in self.orig_defaults:
+            indent_add_cond("default " + expr_str(default, sc_expr_str_fn),
+                            cond)
+
+        if sc.__class__ is Choice and sc.is_optional:
+            indent_add("optional")
+
+        if sc.__class__ is Symbol:
+            for select, cond in self.orig_selects:
+                indent_add_cond("select " + sc_expr_str_fn(select), cond)
+
+            for imply, cond in self.orig_implies:
+                indent_add_cond("imply " + sc_expr_str_fn(imply), cond)
+
+        if self.dep is not sc.kconfig.y:
+            indent_add("depends on " + expr_str(self.dep, sc_expr_str_fn))
+
+        if self.help is not None:
+            indent_add("help")
+            for line in self.help.splitlines():
+                indent_add("  " + line)
+
+        return "\n".join(lines)
+
+    def _strip_dep(self, expr):
+        # Helper function for removing MenuNode.dep from 'expr'. Uses two
+        # pieces of internal knowledge: (1) Expressions are reused rather than
+        # copied, and (2) the direct dependencies always appear at the end.
+
+        # ... if dep -> ... if y
+        if self.dep is expr:
+            return self.kconfig.y
+
+        # (AND, X, dep) -> X
+        if expr.__class__ is tuple and expr[0] is AND and expr[2] is self.dep:
+            return expr[1]
+
+        return expr
+
+
+class Variable(object):
+    """
+    Represents a preprocessor variable/function.
+
+    The following attributes are available:
+
+    name:
+      The name of the variable.
+
+    value:
+      The unexpanded value of the variable.
+
+    expanded_value:
+      The expanded value of the variable. For simple variables (those defined
+      with :=), this will equal 'value'. Accessing this property will raise a
+      KconfigError if the expansion seems to be stuck in a loop.
+
+      Accessing this field is the same as calling expanded_value_w_args() with
+      no arguments. I hadn't considered function arguments when adding it. It
+      is retained for backwards compatibility though.
+
+    is_recursive:
+      True if the variable is recursive (defined with =).
+    """
+    __slots__ = (
+        "_n_expansions",
+        "is_recursive",
+        "kconfig",
+        "name",
+        "value",
+    )
+
+    @property
+    def expanded_value(self):
+        """
+        See the class documentation.
+        """
+        return self.expanded_value_w_args()
+
+    def expanded_value_w_args(self, *args):
+        """
+        Returns the expanded value of the variable/function. Any arguments
+        passed will be substituted for $(1), $(2), etc.
+
+        Raises a KconfigError if the expansion seems to be stuck in a loop.
+        """
+        return self.kconfig._fn_val((self.name,) + args)
+
+    def __repr__(self):
+        return "<variable {}, {}, value '{}'>" \
+               .format(self.name,
+                       "recursive" if self.is_recursive else "immediate",
+                       self.value)
+
+
+class KconfigError(Exception):
+    """
+    Exception raised for Kconfig-related errors.
+
+    KconfigError and KconfigSyntaxError are the same class. The
+    KconfigSyntaxError alias is only maintained for backwards compatibility.
+    """
+
+KconfigSyntaxError = KconfigError  # Backwards compatibility
+
+
+class InternalError(Exception):
+    "Never raised. Kept around for backwards compatibility."
+
+
+# Workaround:
+#
+# If 'errno' and 'strerror' are set on IOError, then __str__() always returns
+# "[Errno <errno>] <strerror>", ignoring any custom message passed to the
+# constructor. By defining our own subclass, we can use a custom message while
+# also providing 'errno', 'strerror', and 'filename' to scripts.
+class _KconfigIOError(IOError):
+    def __init__(self, ioerror, msg):
+        self.msg = msg
+        super(_KconfigIOError, self).__init__(
+            ioerror.errno, ioerror.strerror, ioerror.filename)
+
+    def __str__(self):
+        return self.msg
+
+
+#
+# Public functions
+#
+
+
+def expr_value(expr):
+    """
+    Evaluates the expression 'expr' to a tristate value. Returns 0 (n), 1 (m),
+    or 2 (y).
+
+    'expr' must be an already-parsed expression from a Symbol, Choice, or
+    MenuNode property. To evaluate an expression represented as a string, use
+    Kconfig.eval_string().
+
+    Passing subexpressions of expressions to this function works as expected.
+    """
+    if expr.__class__ is not tuple:
+        return expr.tri_value
+
+    if expr[0] is AND:
+        v1 = expr_value(expr[1])
+        # Short-circuit the n case as an optimization (~5% faster
+        # allnoconfig.py and allyesconfig.py, as of writing)
+        return 0 if not v1 else min(v1, expr_value(expr[2]))
+
+    if expr[0] is OR:
+        v1 = expr_value(expr[1])
+        # Short-circuit the y case as an optimization
+        return 2 if v1 == 2 else max(v1, expr_value(expr[2]))
+
+    if expr[0] is NOT:
+        return 2 - expr_value(expr[1])
+
+    # Relation
+    #
+    # Implements <, <=, >, >= comparisons as well. These were added to
+    # kconfig in 31847b67 (kconfig: allow use of relations other than
+    # (in)equality).
+
+    rel, v1, v2 = expr
+
+    # If both operands are strings...
+    if v1.orig_type is STRING and v2.orig_type is STRING:
+        # ...then compare them lexicographically
+        comp = _strcmp(v1.str_value, v2.str_value)
+    else:
+        # Otherwise, try to compare them as numbers
+        try:
+            comp = _sym_to_num(v1) - _sym_to_num(v2)
+        except ValueError:
+            # Fall back on a lexicographic comparison if the operands don't
+            # parse as numbers
+            comp = _strcmp(v1.str_value, v2.str_value)
+
+    return 2*(comp == 0 if rel is EQUAL else
+              comp != 0 if rel is UNEQUAL else
+              comp <  0 if rel is LESS else
+              comp <= 0 if rel is LESS_EQUAL else
+              comp >  0 if rel is GREATER else
+              comp >= 0)
+
+
+def standard_sc_expr_str(sc):
+    """
+    Standard symbol/choice printing function. Uses plain Kconfig syntax, and
+    displays choices as <choice> (or <choice NAME>, for named choices).
+
+    See expr_str().
+    """
+    if sc.__class__ is Symbol:
+        if sc.is_constant and sc.name not in STR_TO_TRI:
+            return '"{}"'.format(escape(sc.name))
+        return sc.name
+
+    return "<choice {}>".format(sc.name) if sc.name else "<choice>"
+
+
+def expr_str(expr, sc_expr_str_fn=standard_sc_expr_str):
+    """
+    Returns the string representation of the expression 'expr', as in a Kconfig
+    file.
+
+    Passing subexpressions of expressions to this function works as expected.
+
+    sc_expr_str_fn (default: standard_sc_expr_str):
+      This function is called for every symbol/choice (hence "sc") appearing in
+      the expression, with the symbol/choice as the argument. It is expected to
+      return a string to be used for the symbol/choice.
+
+      This can be used e.g. to turn symbols/choices into links when generating
+      documentation, or for printing the value of each symbol/choice after it.
+
+      Note that quoted values are represented as constants symbols
+      (Symbol.is_constant == True).
+    """
+    if expr.__class__ is not tuple:
+        return sc_expr_str_fn(expr)
+
+    if expr[0] is AND:
+        return "{} && {}".format(_parenthesize(expr[1], OR, sc_expr_str_fn),
+                                 _parenthesize(expr[2], OR, sc_expr_str_fn))
+
+    if expr[0] is OR:
+        # This turns A && B || C && D into "(A && B) || (C && D)", which is
+        # redundant, but more readable
+        return "{} || {}".format(_parenthesize(expr[1], AND, sc_expr_str_fn),
+                                 _parenthesize(expr[2], AND, sc_expr_str_fn))
+
+    if expr[0] is NOT:
+        if expr[1].__class__ is tuple:
+            return "!({})".format(expr_str(expr[1], sc_expr_str_fn))
+        return "!" + sc_expr_str_fn(expr[1])  # Symbol
+
+    # Relation
+    #
+    # Relation operands are always symbols (quoted strings are constant
+    # symbols)
+    return "{} {} {}".format(sc_expr_str_fn(expr[1]), REL_TO_STR[expr[0]],
+                             sc_expr_str_fn(expr[2]))
+
+
+def expr_items(expr):
+    """
+    Returns a set() of all items (symbols and choices) that appear in the
+    expression 'expr'.
+
+    Passing subexpressions of expressions to this function works as expected.
+    """
+    res = set()
+
+    def rec(subexpr):
+        if subexpr.__class__ is tuple:
+            # AND, OR, NOT, or relation
+
+            rec(subexpr[1])
+
+            # NOTs only have a single operand
+            if subexpr[0] is not NOT:
+                rec(subexpr[2])
+
+        else:
+            # Symbol or choice
+            res.add(subexpr)
+
+    rec(expr)
+    return res
+
+
+def split_expr(expr, op):
+    """
+    Returns a list containing the top-level AND or OR operands in the
+    expression 'expr', in the same (left-to-right) order as they appear in
+    the expression.
+
+    This can be handy e.g. for splitting (weak) reverse dependencies
+    from 'select' and 'imply' into individual selects/implies.
+
+    op:
+      Either AND to get AND operands, or OR to get OR operands.
+
+      (Having this as an operand might be more future-safe than having two
+      hardcoded functions.)
+
+
+    Pseudo-code examples:
+
+      split_expr( A                    , OR  )  ->  [A]
+      split_expr( A && B               , OR  )  ->  [A && B]
+      split_expr( A || B               , OR  )  ->  [A, B]
+      split_expr( A || B               , AND )  ->  [A || B]
+      split_expr( A || B || (C && D)   , OR  )  ->  [A, B, C && D]
+
+      # Second || is not at the top level
+      split_expr( A || (B && (C || D)) , OR )  ->  [A, B && (C || D)]
+
+      # Parentheses don't matter as long as we stay at the top level (don't
+      # encounter any non-'op' nodes)
+      split_expr( (A || B) || C        , OR )  ->  [A, B, C]
+      split_expr( A || (B || C)        , OR )  ->  [A, B, C]
+    """
+    res = []
+
+    def rec(subexpr):
+        if subexpr.__class__ is tuple and subexpr[0] is op:
+            rec(subexpr[1])
+            rec(subexpr[2])
+        else:
+            res.append(subexpr)
+
+    rec(expr)
+    return res
+
+
+def escape(s):
+    r"""
+    Escapes the string 's' in the same fashion as is done for display in
+    Kconfig format and when writing strings to a .config file. " and \ are
+    replaced by \" and \\, respectively.
+    """
+    # \ must be escaped before " to avoid double escaping
+    return s.replace("\\", r"\\").replace('"', r'\"')
+
+
+def unescape(s):
+    r"""
+    Unescapes the string 's'. \ followed by any character is replaced with just
+    that character. Used internally when reading .config files.
+    """
+    return _unescape_sub(r"\1", s)
+
+# unescape() helper
+_unescape_sub = re.compile(r"\\(.)").sub
+
+
+def standard_kconfig():
+    """
+    Helper for tools. Loads the top-level Kconfig specified as the first
+    command-line argument, or "Kconfig" if there are no command-line arguments.
+    Returns the Kconfig instance.
+
+    Exits with sys.exit() (which raises a SystemExit exception) and prints a
+    usage note to stderr if more than one command-line argument is passed.
+    """
+    if len(sys.argv) > 2:
+        sys.exit("usage: {} [Kconfig]".format(sys.argv[0]))
+
+    # Only show backtraces for unexpected exceptions
+    try:
+        return Kconfig("Kconfig" if len(sys.argv) < 2 else sys.argv[1])
+    except (EnvironmentError, KconfigError) as e:
+        # Some long exception messages have extra newlines for better
+        # formatting when reported as an unhandled exception. Strip them here.
+        sys.exit(str(e).strip())
+
+
+def standard_config_filename():
+    """
+    Helper for tools. Returns the value of KCONFIG_CONFIG (which specifies the
+    .config file to load/save) if it is set, and ".config" otherwise.
+
+    Calling load_config() with filename=None might give the behavior you want,
+    without having to use this function.
+    """
+    return os.getenv("KCONFIG_CONFIG", ".config")
+
+
+def load_allconfig(kconf, filename):
+    """
+    Helper for all*config. Loads (merges) the configuration file specified by
+    KCONFIG_ALLCONFIG, if any. See Documentation/kbuild/kconfig.txt in the
+    Linux kernel.
+
+    Disables warnings for duplicated assignments within configuration files for
+    the duration of the call (kconf.warn_assign_override/warn_assign_redun = False),
+    and restores the previous warning settings at the end. The
+    KCONFIG_ALLCONFIG configuration file is expected to override symbols.
+
+    Exits with sys.exit() (which raises a SystemExit exception) and prints an
+    error to stderr if KCONFIG_ALLCONFIG is set but the configuration file
+    can't be opened.
+
+    kconf:
+      Kconfig instance to load the configuration in.
+
+    filename:
+      Command-specific configuration filename - "allyes.config",
+      "allno.config", etc.
+    """
+    allconfig = os.getenv("KCONFIG_ALLCONFIG")
+    if allconfig is None:
+        return
+
+    def std_msg(e):
+        # "Upcasts" a _KconfigIOError to an IOError, removing the custom
+        # __str__() message. The standard message is better here.
+        #
+        # This might also convert an OSError to an IOError in obscure cases,
+        # but it's probably not a big deal. The distinction is shaky (see
+        # PEP-3151).
+        return IOError(e.errno, e.strerror, e.filename)
+
+    old_warn_assign_override = kconf.warn_assign_override
+    old_warn_assign_redun = kconf.warn_assign_redun
+    kconf.warn_assign_override = kconf.warn_assign_redun = False
+
+    if allconfig in ("", "1"):
+        try:
+            print(kconf.load_config(filename, False))
+        except EnvironmentError as e1:
+            try:
+                print(kconf.load_config("all.config", False))
+            except EnvironmentError as e2:
+                sys.exit("error: KCONFIG_ALLCONFIG is set, but neither {} "
+                         "nor all.config could be opened: {}, {}"
+                         .format(filename, std_msg(e1), std_msg(e2)))
+    else:
+        try:
+            print(kconf.load_config(allconfig, False))
+        except EnvironmentError as e:
+            sys.exit("error: KCONFIG_ALLCONFIG is set to '{}', which "
+                     "could not be opened: {}"
+                     .format(allconfig, std_msg(e)))
+
+    kconf.warn_assign_override = old_warn_assign_override
+    kconf.warn_assign_redun = old_warn_assign_redun
+
+
+#
+# Internal functions
+#
+
+
+def _visibility(sc):
+    # Symbols and Choices have a "visibility" that acts as an upper bound on
+    # the values a user can set for them, corresponding to the visibility in
+    # e.g. 'make menuconfig'. This function calculates the visibility for the
+    # Symbol or Choice 'sc' -- the logic is nearly identical.
+
+    vis = 0
+
+    for node in sc.nodes:
+        if node.prompt:
+            vis = max(vis, expr_value(node.prompt[1]))
+
+    if sc.__class__ is Symbol and sc.choice:
+        if sc.choice.orig_type is TRISTATE and \
+           sc.orig_type is not TRISTATE and sc.choice.tri_value != 2:
+            # Non-tristate choice symbols are only visible in y mode
+            return 0
+
+        if sc.orig_type is TRISTATE and vis == 1 and sc.choice.tri_value == 2:
+            # Choice symbols with m visibility are not visible in y mode
+            return 0
+
+    # Promote m to y if we're dealing with a non-tristate (possibly due to
+    # modules being disabled)
+    if vis == 1 and sc.type is not TRISTATE:
+        return 2
+
+    return vis
+
+
+def _make_depend_on(sc, expr):
+    # Adds 'sc' (symbol or choice) as a "dependee" to all symbols in 'expr'.
+    # Constant symbols in 'expr' are skipped as they can never change value
+    # anyway.
+
+    if expr.__class__ is tuple:
+        # AND, OR, NOT, or relation
+
+        _make_depend_on(sc, expr[1])
+
+        # NOTs only have a single operand
+        if expr[0] is not NOT:
+            _make_depend_on(sc, expr[2])
+
+    elif not expr.is_constant:
+        # Non-constant symbol, or choice
+        expr._dependents.add(sc)
+
+
+def _parenthesize(expr, type_, sc_expr_str_fn):
+    # expr_str() helper. Adds parentheses around expressions of type 'type_'.
+
+    if expr.__class__ is tuple and expr[0] is type_:
+        return "({})".format(expr_str(expr, sc_expr_str_fn))
+    return expr_str(expr, sc_expr_str_fn)
+
+
+def _ordered_unique(lst):
+    # Returns 'lst' with any duplicates removed, preserving order. This hacky
+    # version seems to be a common idiom. It relies on short-circuit evaluation
+    # and set.add() returning None, which is falsy.
+
+    seen = set()
+    seen_add = seen.add
+    return [x for x in lst if x not in seen and not seen_add(x)]
+
+
+def _is_base_n(s, n):
+    try:
+        int(s, n)
+        return True
+    except ValueError:
+        return False
+
+
+def _strcmp(s1, s2):
+    # strcmp()-alike that returns -1, 0, or 1
+
+    return (s1 > s2) - (s1 < s2)
+
+
+def _sym_to_num(sym):
+    # expr_value() helper for converting a symbol to a number. Raises
+    # ValueError for symbols that can't be converted.
+
+    # For BOOL and TRISTATE, n/m/y count as 0/1/2. This mirrors 9059a3493ef
+    # ("kconfig: fix relational operators for bool and tristate symbols") in
+    # the C implementation.
+    return sym.tri_value if sym.orig_type in _BOOL_TRISTATE else \
+           int(sym.str_value, _TYPE_TO_BASE[sym.orig_type])
+
+
+def _touch_dep_file(path, sym_name):
+    # If sym_name is MY_SYM_NAME, touches my/sym/name.h. See the sync_deps()
+    # docstring.
+
+    sym_path = path + os.sep + sym_name.lower().replace("_", os.sep) + ".h"
+    sym_path_dir = dirname(sym_path)
+    if not exists(sym_path_dir):
+        os.makedirs(sym_path_dir, 0o755)
+
+    # A kind of truncating touch, mirroring the C tools
+    os.close(os.open(
+        sym_path, os.O_WRONLY | os.O_CREAT | os.O_TRUNC, 0o644))
+
+
+def _save_old(path):
+    # See write_config()
+
+    def copy(src, dst):
+        # Import as needed, to save some startup time
+        import shutil
+        shutil.copyfile(src, dst)
+
+    if islink(path):
+        # Preserve symlinks
+        copy_fn = copy
+    elif hasattr(os, "replace"):
+        # Python 3 (3.3+) only. Best choice when available, because it
+        # removes <filename>.old on both *nix and Windows.
+        copy_fn = os.replace
+    elif os.name == "posix":
+        # Removes <filename>.old on POSIX systems
+        copy_fn = os.rename
+    else:
+        # Fall back on copying
+        copy_fn = copy
+
+    try:
+        copy_fn(path, path + ".old")
+    except Exception:
+        # Ignore errors from 'path' missing as well as other errors.
+        # <filename>.old file is usually more of a nice-to-have, and not worth
+        # erroring out over e.g. if <filename>.old happens to be a directory or
+        # <filename> is something like /dev/null.
+        pass
+
+
+def _name_and_loc(sc):
+    # Helper for giving the symbol/choice name and location(s) in e.g. warnings
+
+    # Reuse the expression format. That way choices show up as
+    # '<choice (name, if any)>'
+    name = standard_sc_expr_str(sc)
+
+    if not sc.nodes:
+        return name + " (undefined)"
+
+    return "{} (defined at {})".format(
+        name,
+        ", ".join("{}:{}".format(node.filename, node.linenr)
+                  for node in sc.nodes))
+
+
+# Menu manipulation
+
+
+def _expr_depends_on(expr, sym):
+    # Reimplementation of expr_depends_symbol() from mconf.c. Used to determine
+    # if a submenu should be implicitly created. This also influences which
+    # items inside choice statements are considered choice items.
+
+    if expr.__class__ is not tuple:
+        return expr is sym
+
+    if expr[0] in _EQUAL_UNEQUAL:
+        # Check for one of the following:
+        # sym = m/y, m/y = sym, sym != n, n != sym
+
+        left, right = expr[1:]
+
+        if right is sym:
+            left, right = right, left
+        elif left is not sym:
+            return False
+
+        return (expr[0] is EQUAL and right is sym.kconfig.m or
+                                     right is sym.kconfig.y) or \
+               (expr[0] is UNEQUAL and right is sym.kconfig.n)
+
+    return expr[0] is AND and \
+           (_expr_depends_on(expr[1], sym) or
+            _expr_depends_on(expr[2], sym))
+
+
+def _auto_menu_dep(node1, node2):
+    # Returns True if node2 has an "automatic menu dependency" on node1. If
+    # node2 has a prompt, we check its condition. Otherwise, we look directly
+    # at node2.dep.
+
+    return _expr_depends_on(node2.prompt[1] if node2.prompt else node2.dep,
+                            node1.item)
+
+
+def _flatten(node):
+    # "Flattens" menu nodes without prompts (e.g. 'if' nodes and non-visible
+    # symbols with children from automatic menu creation) so that their
+    # children appear after them instead. This gives a clean menu structure
+    # with no unexpected "jumps" in the indentation.
+    #
+    # Do not flatten promptless choices (which can appear "legitimately" if a
+    # named choice is defined in multiple locations to add on symbols). It
+    # looks confusing, and the menuconfig already shows all choice symbols if
+    # you enter the choice at some location with a prompt.
+
+    while node:
+        if node.list and not node.prompt and \
+           node.item.__class__ is not Choice:
+
+            last_node = node.list
+            while 1:
+                last_node.parent = node.parent
+                if not last_node.next:
+                    break
+                last_node = last_node.next
+
+            last_node.next = node.next
+            node.next = node.list
+            node.list = None
+
+        node = node.next
+
+
+def _remove_ifs(node):
+    # Removes 'if' nodes (which can be recognized by MenuNode.item being None),
+    # which are assumed to already have been flattened. The C implementation
+    # doesn't bother to do this, but we expose the menu tree directly, and it
+    # makes it nicer to work with.
+
+    cur = node.list
+    while cur and not cur.item:
+        cur = cur.next
+
+    node.list = cur
+
+    while cur:
+        next = cur.next
+        while next and not next.item:
+            next = next.next
+
+        # Equivalent to
+        #
+        #   cur.next = next
+        #   cur = next
+        #
+        # due to tricky Python semantics. The order matters.
+        cur.next = cur = next
+
+
+def _finalize_choice(node):
+    # Finalizes a choice, marking each symbol whose menu node has the choice as
+    # the parent as a choice symbol, and automatically determining types if not
+    # specified.
+
+    choice = node.item
+
+    cur = node.list
+    while cur:
+        if cur.item.__class__ is Symbol:
+            cur.item.choice = choice
+            choice.syms.append(cur.item)
+        cur = cur.next
+
+    # If no type is specified for the choice, its type is that of
+    # the first choice item with a specified type
+    if not choice.orig_type:
+        for item in choice.syms:
+            if item.orig_type:
+                choice.orig_type = item.orig_type
+                break
+
+    # Each choice item of UNKNOWN type gets the type of the choice
+    for sym in choice.syms:
+        if not sym.orig_type:
+            sym.orig_type = choice.orig_type
+
+
+def _check_dep_loop_sym(sym, ignore_choice):
+    # Detects dependency loops using depth-first search on the dependency graph
+    # (which is calculated earlier in Kconfig._build_dep()).
+    #
+    # Algorithm:
+    #
+    #  1. Symbols/choices start out with _visited = 0, meaning unvisited.
+    #
+    #  2. When a symbol/choice is first visited, _visited is set to 1, meaning
+    #     "visited, potentially part of a dependency loop". The recursive
+    #     search then continues from the symbol/choice.
+    #
+    #  3. If we run into a symbol/choice X with _visited already set to 1,
+    #     there's a dependency loop. The loop is found on the call stack by
+    #     recording symbols while returning ("on the way back") until X is seen
+    #     again.
+    #
+    #  4. Once a symbol/choice and all its dependencies (or dependents in this
+    #     case) have been checked recursively without detecting any loops, its
+    #     _visited is set to 2, meaning "visited, not part of a dependency
+    #     loop".
+    #
+    #     This saves work if we run into the symbol/choice again in later calls
+    #     to _check_dep_loop_sym(). We just return immediately.
+    #
+    # Choices complicate things, as every choice symbol depends on every other
+    # choice symbol in a sense. When a choice is "entered" via a choice symbol
+    # X, we visit all choice symbols from the choice except X, and prevent
+    # immediately revisiting the choice with a flag (ignore_choice).
+    #
+    # Maybe there's a better way to handle this (different flags or the
+    # like...)
+
+    if not sym._visited:
+        # sym._visited == 0, unvisited
+
+        sym._visited = 1
+
+        for dep in sym._dependents:
+            # Choices show up in Symbol._dependents when the choice has the
+            # symbol in a 'prompt' or 'default' condition (e.g.
+            # 'default ... if SYM').
+            #
+            # Since we aren't entering the choice via a choice symbol, all
+            # choice symbols need to be checked, hence the None.
+            loop = _check_dep_loop_choice(dep, None) \
+                   if dep.__class__ is Choice \
+                   else _check_dep_loop_sym(dep, False)
+
+            if loop:
+                # Dependency loop found
+                return _found_dep_loop(loop, sym)
+
+        if sym.choice and not ignore_choice:
+            loop = _check_dep_loop_choice(sym.choice, sym)
+            if loop:
+                # Dependency loop found
+                return _found_dep_loop(loop, sym)
+
+        # The symbol is not part of a dependency loop
+        sym._visited = 2
+
+        # No dependency loop found
+        return None
+
+    if sym._visited == 2:
+        # The symbol was checked earlier and is already known to not be part of
+        # a dependency loop
+        return None
+
+    # sym._visited == 1, found a dependency loop. Return the symbol as the
+    # first element in it.
+    return (sym,)
+
+
+def _check_dep_loop_choice(choice, skip):
+    if not choice._visited:
+        # choice._visited == 0, unvisited
+
+        choice._visited = 1
+
+        # Check for loops involving choice symbols. If we came here via a
+        # choice symbol, skip that one, as we'd get a false positive
+        # '<sym FOO> -> <choice> -> <sym FOO>' loop otherwise.
+        for sym in choice.syms:
+            if sym is not skip:
+                # Prevent the choice from being immediately re-entered via the
+                # "is a choice symbol" path by passing True
+                loop = _check_dep_loop_sym(sym, True)
+                if loop:
+                    # Dependency loop found
+                    return _found_dep_loop(loop, choice)
+
+        # The choice is not part of a dependency loop
+        choice._visited = 2
+
+        # No dependency loop found
+        return None
+
+    if choice._visited == 2:
+        # The choice was checked earlier and is already known to not be part of
+        # a dependency loop
+        return None
+
+    # choice._visited == 1, found a dependency loop. Return the choice as the
+    # first element in it.
+    return (choice,)
+
+
+def _found_dep_loop(loop, cur):
+    # Called "on the way back" when we know we have a loop
+
+    # Is the symbol/choice 'cur' where the loop started?
+    if cur is not loop[0]:
+        # Nope, it's just a part of the loop
+        return loop + (cur,)
+
+    # Yep, we have the entire loop. Throw an exception that shows it.
+
+    msg = "\nDependency loop\n" \
+            "===============\n\n"
+
+    for item in loop:
+        if item is not loop[0]:
+            msg += "...depends on "
+            if item.__class__ is Symbol and item.choice:
+                msg += "the choice symbol "
+
+        msg += "{}, with definition...\n\n{}\n\n" \
+               .format(_name_and_loc(item), item)
+
+        # Small wart: Since we reuse the already calculated
+        # Symbol/Choice._dependents sets for recursive dependency detection, we
+        # lose information on whether a dependency came from a 'select'/'imply'
+        # condition or e.g. a 'depends on'.
+        #
+        # This might cause selecting symbols to "disappear". For example,
+        # a symbol B having 'select A if C' gives a direct dependency from A to
+        # C, since it corresponds to a reverse dependency of B && C.
+        #
+        # Always print reverse dependencies for symbols that have them to make
+        # sure information isn't lost. I wonder if there's some neat way to
+        # improve this.
+
+        if item.__class__ is Symbol:
+            if item.rev_dep is not item.kconfig.n:
+                msg += "(select-related dependencies: {})\n\n" \
+                       .format(expr_str(item.rev_dep))
+
+            if item.weak_rev_dep is not item.kconfig.n:
+                msg += "(imply-related dependencies: {})\n\n" \
+                       .format(expr_str(item.rev_dep))
+
+    msg += "...depends again on {}".format(_name_and_loc(loop[0]))
+
+    raise KconfigError(msg)
+
+
+def _decoding_error(e, filename, macro_linenr=None):
+    # Gives the filename and context for UnicodeDecodeError's, which are a pain
+    # to debug otherwise. 'e' is the UnicodeDecodeError object.
+    #
+    # If the decoding error is for the output of a $(shell,...) command,
+    # macro_linenr holds the line number where it was run (the exact line
+    # number isn't available for decoding errors in files).
+
+    raise KconfigError(
+        "\n"
+        "Malformed {} in {}\n"
+        "Context: {}\n"
+        "Problematic data: {}\n"
+        "Reason: {}".format(
+            e.encoding,
+            "'{}'".format(filename) if macro_linenr is None else
+                "output from macro at {}:{}".format(filename, macro_linenr),
+            e.object[max(e.start - 40, 0):e.end + 40],
+            e.object[e.start:e.end],
+            e.reason))
+
+
+def _warn_verbose_deprecated(fn_name):
+    sys.stderr.write(
+        "Deprecation warning: {0}()'s 'verbose' argument has no effect. Since "
+        "Kconfiglib 12.0.0, the message is returned from {0}() instead, "
+        "and is always generated. Do e.g. print(kconf.{0}()) if you want to "
+        "want to show a message like \"Loaded configuration '.config'\" on "
+        "stdout. The old API required ugly hacks to reuse messages in "
+        "configuration interfaces.\n".format(fn_name))
+
+
+# Predefined preprocessor functions
+
+
+def _filename_fn(kconf, _):
+    return kconf._filename
+
+
+def _lineno_fn(kconf, _):
+    return str(kconf._linenr)
+
+
+def _info_fn(kconf, _, msg):
+    print("{}:{}: {}".format(kconf._filename, kconf._linenr, msg))
+
+    return ""
+
+
+def _warning_if_fn(kconf, _, cond, msg):
+    if cond == "y":
+        kconf._warn(msg, kconf._filename, kconf._linenr)
+
+    return ""
+
+
+def _error_if_fn(kconf, _, cond, msg):
+    if cond == "y":
+        raise KconfigError("{}:{}: {}".format(
+            kconf._filename, kconf._linenr, msg))
+
+    return ""
+
+
+def _shell_fn(kconf, _, command):
+    # Only import as needed, to save some startup time
+    import subprocess
+
+    stdout, stderr = subprocess.Popen(
+        command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+    ).communicate()
+
+    if not _IS_PY2:
+        try:
+            stdout = stdout.decode(kconf._encoding)
+            stderr = stderr.decode(kconf._encoding)
+        except UnicodeDecodeError as e:
+            _decoding_error(e, kconf._filename, kconf._linenr)
+
+    if stderr:
+        kconf._warn("'{}' wrote to stderr: {}".format(
+                        command, "\n".join(stderr.splitlines())),
+                    kconf._filename, kconf._linenr)
+
+    # Universal newlines with splitlines() (to prevent e.g. stray \r's in
+    # command output on Windows), trailing newline removal, and
+    # newline-to-space conversion.
+    #
+    # On Python 3 versions before 3.6, it's not possible to specify the
+    # encoding when passing universal_newlines=True to Popen() (the 'encoding'
+    # parameter was added in 3.6), so we do this manual version instead.
+    return "\n".join(stdout.splitlines()).rstrip("\n").replace("\n", " ")
+
+#
+# Global constants
+#
+
+TRI_TO_STR = {
+    0: "n",
+    1: "m",
+    2: "y",
+}
+
+STR_TO_TRI = {
+    "n": 0,
+    "m": 1,
+    "y": 2,
+}
+
+# Constant representing that there's no cached choice selection. This is
+# distinct from a cached None (no selection). Any object that's not None or a
+# Symbol will do. We test this with 'is'.
+_NO_CACHED_SELECTION = 0
+
+# Are we running on Python 2?
+_IS_PY2 = sys.version_info[0] < 3
+
+try:
+    _UNAME_RELEASE = os.uname()[2]
+except AttributeError:
+    # Only import as needed, to save some startup time
+    import platform
+    _UNAME_RELEASE = platform.uname()[2]
+
+# The token and type constants below are safe to test with 'is', which is a bit
+# faster (~30% faster on my machine, and a few % faster for total parsing
+# time), even without assuming Python's small integer optimization (which
+# caches small integer objects). The constants end up pointing to unique
+# integer objects, and since we consistently refer to them via the names below,
+# we always get the same object.
+#
+# Client code should use == though.
+
+# Tokens, with values 1, 2, ... . Avoiding 0 simplifies some checks by making
+# all tokens except empty strings truthy.
+(
+    _T_ALLNOCONFIG_Y,
+    _T_AND,
+    _T_BOOL,
+    _T_CHOICE,
+    _T_CLOSE_PAREN,
+    _T_COMMENT,
+    _T_CONFIG,
+    _T_DEFAULT,
+    _T_DEFCONFIG_LIST,
+    _T_DEF_BOOL,
+    _T_DEF_HEX,
+    _T_DEF_INT,
+    _T_DEF_STRING,
+    _T_DEF_TRISTATE,
+    _T_DEPENDS,
+    _T_ENDCHOICE,
+    _T_ENDIF,
+    _T_ENDMENU,
+    _T_ENV,
+    _T_EQUAL,
+    _T_GREATER,
+    _T_GREATER_EQUAL,
+    _T_HELP,
+    _T_HEX,
+    _T_IF,
+    _T_IMPLY,
+    _T_INT,
+    _T_LESS,
+    _T_LESS_EQUAL,
+    _T_MAINMENU,
+    _T_MENU,
+    _T_MENUCONFIG,
+    _T_MODULES,
+    _T_NOT,
+    _T_ON,
+    _T_OPEN_PAREN,
+    _T_OPTION,
+    _T_OPTIONAL,
+    _T_OR,
+    _T_ORSOURCE,
+    _T_OSOURCE,
+    _T_PROMPT,
+    _T_RANGE,
+    _T_RSOURCE,
+    _T_SELECT,
+    _T_SOURCE,
+    _T_STRING,
+    _T_TRISTATE,
+    _T_UNEQUAL,
+    _T_VISIBLE,
+) = range(1, 51)
+
+# Keyword to token map, with the get() method assigned directly as a small
+# optimization
+_get_keyword = {
+    "---help---":     _T_HELP,
+    "allnoconfig_y":  _T_ALLNOCONFIG_Y,
+    "bool":           _T_BOOL,
+    "boolean":        _T_BOOL,
+    "choice":         _T_CHOICE,
+    "comment":        _T_COMMENT,
+    "config":         _T_CONFIG,
+    "def_bool":       _T_DEF_BOOL,
+    "def_hex":        _T_DEF_HEX,
+    "def_int":        _T_DEF_INT,
+    "def_string":     _T_DEF_STRING,
+    "def_tristate":   _T_DEF_TRISTATE,
+    "default":        _T_DEFAULT,
+    "defconfig_list": _T_DEFCONFIG_LIST,
+    "depends":        _T_DEPENDS,
+    "endchoice":      _T_ENDCHOICE,
+    "endif":          _T_ENDIF,
+    "endmenu":        _T_ENDMENU,
+    "env":            _T_ENV,
+    "grsource":       _T_ORSOURCE,  # Backwards compatibility
+    "gsource":        _T_OSOURCE,   # Backwards compatibility
+    "help":           _T_HELP,
+    "hex":            _T_HEX,
+    "if":             _T_IF,
+    "imply":          _T_IMPLY,
+    "int":            _T_INT,
+    "mainmenu":       _T_MAINMENU,
+    "menu":           _T_MENU,
+    "menuconfig":     _T_MENUCONFIG,
+    "modules":        _T_MODULES,
+    "on":             _T_ON,
+    "option":         _T_OPTION,
+    "optional":       _T_OPTIONAL,
+    "orsource":       _T_ORSOURCE,
+    "osource":        _T_OSOURCE,
+    "prompt":         _T_PROMPT,
+    "range":          _T_RANGE,
+    "rsource":        _T_RSOURCE,
+    "select":         _T_SELECT,
+    "source":         _T_SOURCE,
+    "string":         _T_STRING,
+    "tristate":       _T_TRISTATE,
+    "visible":        _T_VISIBLE,
+}.get
+
+# The constants below match the value of the corresponding tokens to remove the
+# need for conversion
+
+# Node types
+MENU    = _T_MENU
+COMMENT = _T_COMMENT
+
+# Expression types
+AND           = _T_AND
+OR            = _T_OR
+NOT           = _T_NOT
+EQUAL         = _T_EQUAL
+UNEQUAL       = _T_UNEQUAL
+LESS          = _T_LESS
+LESS_EQUAL    = _T_LESS_EQUAL
+GREATER       = _T_GREATER
+GREATER_EQUAL = _T_GREATER_EQUAL
+
+REL_TO_STR = {
+    EQUAL:         "=",
+    UNEQUAL:       "!=",
+    LESS:          "<",
+    LESS_EQUAL:    "<=",
+    GREATER:       ">",
+    GREATER_EQUAL: ">=",
+}
+
+# Symbol/choice types. UNKNOWN is 0 (falsy) to simplify some checks.
+# Client code shouldn't rely on it though, as it was non-zero in
+# older versions.
+UNKNOWN  = 0
+BOOL     = _T_BOOL
+TRISTATE = _T_TRISTATE
+STRING   = _T_STRING
+INT      = _T_INT
+HEX      = _T_HEX
+
+TYPE_TO_STR = {
+    UNKNOWN:  "unknown",
+    BOOL:     "bool",
+    TRISTATE: "tristate",
+    STRING:   "string",
+    INT:      "int",
+    HEX:      "hex",
+}
+
+# Used in comparisons. 0 means the base is inferred from the format of the
+# string.
+_TYPE_TO_BASE = {
+    HEX:      16,
+    INT:      10,
+    STRING:   0,
+    UNKNOWN:  0,
+}
+
+# def_bool -> BOOL, etc.
+_DEF_TOKEN_TO_TYPE = {
+    _T_DEF_BOOL:     BOOL,
+    _T_DEF_HEX:      HEX,
+    _T_DEF_INT:      INT,
+    _T_DEF_STRING:   STRING,
+    _T_DEF_TRISTATE: TRISTATE,
+}
+
+# Tokens after which strings are expected. This is used to tell strings from
+# constant symbol references during tokenization, both of which are enclosed in
+# quotes.
+#
+# Identifier-like lexemes ("missing quotes") are also treated as strings after
+# these tokens. _T_CHOICE is included to avoid symbols being registered for
+# named choices.
+_STRING_LEX = frozenset({
+    _T_BOOL,
+    _T_CHOICE,
+    _T_COMMENT,
+    _T_HEX,
+    _T_INT,
+    _T_MAINMENU,
+    _T_MENU,
+    _T_ORSOURCE,
+    _T_OSOURCE,
+    _T_PROMPT,
+    _T_RSOURCE,
+    _T_SOURCE,
+    _T_STRING,
+    _T_TRISTATE,
+})
+
+# Various sets for quick membership tests. Gives a single global lookup and
+# avoids creating temporary dicts/tuples.
+
+_TYPE_TOKENS = frozenset({
+    _T_BOOL,
+    _T_TRISTATE,
+    _T_INT,
+    _T_HEX,
+    _T_STRING,
+})
+
+_SOURCE_TOKENS = frozenset({
+    _T_SOURCE,
+    _T_RSOURCE,
+    _T_OSOURCE,
+    _T_ORSOURCE,
+})
+
+_REL_SOURCE_TOKENS = frozenset({
+    _T_RSOURCE,
+    _T_ORSOURCE,
+})
+
+# Obligatory (non-optional) sources
+_OBL_SOURCE_TOKENS = frozenset({
+    _T_SOURCE,
+    _T_RSOURCE,
+})
+
+_BOOL_TRISTATE = frozenset({
+    BOOL,
+    TRISTATE,
+})
+
+_BOOL_TRISTATE_UNKNOWN = frozenset({
+    BOOL,
+    TRISTATE,
+    UNKNOWN,
+})
+
+_INT_HEX = frozenset({
+    INT,
+    HEX,
+})
+
+_SYMBOL_CHOICE = frozenset({
+    Symbol,
+    Choice,
+})
+
+_MENU_COMMENT = frozenset({
+    MENU,
+    COMMENT,
+})
+
+_EQUAL_UNEQUAL = frozenset({
+    EQUAL,
+    UNEQUAL,
+})
+
+_RELATIONS = frozenset({
+    EQUAL,
+    UNEQUAL,
+    LESS,
+    LESS_EQUAL,
+    GREATER,
+    GREATER_EQUAL,
+})
+
+# Helper functions for getting compiled regular expressions, with the needed
+# matching function returned directly as a small optimization.
+#
+# Use ASCII regex matching on Python 3. It's already the default on Python 2.
+
+
+def _re_match(regex):
+    return re.compile(regex, 0 if _IS_PY2 else re.ASCII).match
+
+
+def _re_search(regex):
+    return re.compile(regex, 0 if _IS_PY2 else re.ASCII).search
+
+
+# Various regular expressions used during parsing
+
+# The initial token on a line. Also eats leading and trailing whitespace, so
+# that we can jump straight to the next token (or to the end of the line if
+# there is only one token).
+#
+# This regex will also fail to match for empty lines and comment lines.
+#
+# '$' is included to detect preprocessor variable assignments with macro
+# expansions in the left-hand side.
+_command_match = _re_match(r"\s*([A-Za-z0-9_$-]+)\s*")
+
+# An identifier/keyword after the first token. Also eats trailing whitespace.
+# '$' is included to detect identifiers containing macro expansions.
+_id_keyword_match = _re_match(r"([A-Za-z0-9_$/.-]+)\s*")
+
+# A fragment in the left-hand side of a preprocessor variable assignment. These
+# are the portions between macro expansions ($(foo)). Macros are supported in
+# the LHS (variable name).
+_assignment_lhs_fragment_match = _re_match("[A-Za-z0-9_-]*")
+
+# The assignment operator and value (right-hand side) in a preprocessor
+# variable assignment
+_assignment_rhs_match = _re_match(r"\s*(=|:=|\+=)\s*(.*)")
+
+# Special characters/strings while expanding a macro (')', ',', and '$(')
+_macro_special_search = _re_search(r"\)|,|\$\(")
+
+# Special characters/strings while expanding a string (quotes, '\', and '$(')
+_string_special_search = _re_search(r'"|\'|\\|\$\(')
+
+# Special characters/strings while expanding a symbol name. Also includes
+# end-of-line, in case the macro is the last thing on the line.
+_name_special_search = _re_search(r'[^A-Za-z0-9_$/.-]|\$\(|$')
+
+# A valid right-hand side for an assignment to a string symbol in a .config
+# file, including escaped characters. Extracts the contents.
+_conf_string_match = _re_match(r'"((?:[^\\"]|\\.)*)"')
diff --git a/support/kconfiglib/listnewconfig.py b/support/kconfiglib/listnewconfig.py
new file mode 100755
index 0000000..59de141
--- /dev/null
+++ b/support/kconfiglib/listnewconfig.py
@@ -0,0 +1,47 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+List all user-modifiable symbols that are not given a value in the configuration
+file. Usually, these are new symbols that have been added to the Kconfig files.
+
+The default configuration filename is '.config'. A different filename can be
+passed in the KCONFIG_CONFIG environment variable.
+"""
+import sys
+
+from kconfiglib import standard_kconfig, BOOL, TRISTATE, INT, HEX, STRING, \
+                       TRI_TO_STR
+
+
+def main():
+    kconf = standard_kconfig()
+    # Make it possible to filter this message out
+    sys.stderr.write(kconf.load_config() + "\n")
+
+    for sym in kconf.unique_defined_syms:
+        # Only show symbols that can be toggled. Choice symbols are a special
+        # case in that sym.assignable will be (2,) (length 1) for visible
+        # symbols in choices in y mode, but they can still be toggled by
+        # selecting some other symbol.
+        if sym.user_value is None and \
+           (len(sym.assignable) > 1 or
+            (sym.visibility and (sym.orig_type in (INT, HEX, STRING) or
+                                 sym.choice))):
+
+            # Don't reuse the 'config_string' format for bool/tristate symbols,
+            # to show n-valued symbols as 'CONFIG_FOO=n' instead of
+            # '# CONFIG_FOO is not set'. This matches the C tools.
+            if sym.orig_type in (BOOL, TRISTATE):
+                s = "{}{}={}\n".format(kconf.config_prefix, sym.name,
+                                       TRI_TO_STR[sym.tri_value])
+            else:
+                s = sym.config_string
+
+            sys.stdout.write(s)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/makefile.patch b/support/kconfiglib/makefile.patch
new file mode 100644
index 0000000..a617ebd
--- /dev/null
+++ b/support/kconfiglib/makefile.patch
@@ -0,0 +1,48 @@
+From 93daf46f309b0c8f86149ef58c4906387d054c22 Mon Sep 17 00:00:00 2001
+From: Ulf Magnusson <ulfalizer@gmail.com>
+Date: Tue, 9 Jun 2015 13:01:34 +0200
+Subject: [PATCH] Kconfiglib scripts/kconfig/Makefile patch
+
+---
+ scripts/kconfig/Makefile | 29 +++++++++++++++++++++++++++++
+ 1 file changed, 29 insertions(+)
+
+diff --git a/scripts/kconfig/Makefile b/scripts/kconfig/Makefile
+index 3f327e21f60e..8b7dd1292005 100644
+--- a/scripts/kconfig/Makefile
++++ b/scripts/kconfig/Makefile
+@@ -27,2 +27,31 @@ gconfig: $(obj)/gconf
+ 
++PHONY += scriptconfig iscriptconfig kmenuconfig guiconfig dumpvarsconfig
++
++PYTHONCMD ?= python
++kpython := PYTHONPATH=$(srctree)/Kconfiglib:$$PYTHONPATH $(PYTHONCMD)
++
++ifneq ($(filter scriptconfig,$(MAKECMDGOALS)),)
++ifndef SCRIPT
++$(error Use "make scriptconfig SCRIPT=<path to script> [SCRIPT_ARG=<argument>]")
++endif
++endif
++
++scriptconfig:
++	$(Q)$(kpython) $(SCRIPT) $(Kconfig) $(if $(SCRIPT_ARG),"$(SCRIPT_ARG)")
++
++iscriptconfig:
++	$(Q)$(kpython) -i -c \
++	  "import kconfiglib; \
++	   kconf = kconfiglib.Kconfig('$(Kconfig)'); \
++	   print('A Kconfig instance \'kconf\' for the architecture $(ARCH) has been created.')"
++
++kmenuconfig:
++	$(Q)$(kpython) $(srctree)/Kconfiglib/menuconfig.py $(Kconfig)
++
++guiconfig:
++	$(Q)$(kpython) $(srctree)/Kconfiglib/guiconfig.py $(Kconfig)
++
++dumpvarsconfig:
++	$(Q)$(kpython) $(srctree)/Kconfiglib/examples/dumpvars.py $(Kconfig)
++
+ menuconfig: $(obj)/mconf
+-- 
+2.20.1
+
diff --git a/support/kconfiglib/menuconfig.py b/support/kconfiglib/menuconfig.py
new file mode 100755
index 0000000..4815c7f
--- /dev/null
+++ b/support/kconfiglib/menuconfig.py
@@ -0,0 +1,3264 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Nordic Semiconductor ASA and Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Overview
+========
+
+A curses-based Python 2/3 menuconfig implementation. The interface should feel
+familiar to people used to mconf ('make menuconfig').
+
+Supports the same keys as mconf, and also supports a set of keybindings
+inspired by Vi:
+
+  J/K     : Down/Up
+  L       : Enter menu/Toggle item
+  H       : Leave menu
+  Ctrl-D/U: Page Down/Page Up
+  G/End   : Jump to end of list
+  g/Home  : Jump to beginning of list
+
+[Space] toggles values if possible, and enters menus otherwise. [Enter] works
+the other way around.
+
+The mconf feature where pressing a key jumps to a menu entry with that
+character in it in the current menu isn't supported. A jump-to feature for
+jumping directly to any symbol (including invisible symbols), choice, menu or
+comment (as in a Kconfig 'comment "Foo"') is available instead.
+
+A few different modes are available:
+
+  F: Toggle show-help mode, which shows the help text of the currently selected
+  item in the window at the bottom of the menu display. This is handy when
+  browsing through options.
+
+  C: Toggle show-name mode, which shows the symbol name before each symbol menu
+  entry
+
+  A: Toggle show-all mode, which shows all items, including currently invisible
+  items and items that lack a prompt. Invisible items are drawn in a different
+  style to make them stand out.
+
+
+Running
+=======
+
+menuconfig.py can be run either as a standalone executable or by calling the
+menuconfig() function with an existing Kconfig instance. The second option is a
+bit inflexible in that it will still load and save .config, etc.
+
+When run in standalone mode, the top-level Kconfig file to load can be passed
+as a command-line argument. With no argument, it defaults to "Kconfig".
+
+The KCONFIG_CONFIG environment variable specifies the .config file to load (if
+it exists) and save. If KCONFIG_CONFIG is unset, ".config" is used.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+
+$srctree is supported through Kconfiglib.
+
+
+Color schemes
+=============
+
+It is possible to customize the color scheme by setting the MENUCONFIG_STYLE
+environment variable. For example, setting it to 'aquatic' will enable an
+alternative, less yellow, more 'make menuconfig'-like color scheme, contributed
+by Mitja Horvat (pinkfluid).
+
+This is the current list of built-in styles:
+    - default       classic Kconfiglib theme with a yellow accent
+    - monochrome    colorless theme (uses only bold and standout) attributes,
+                    this style is used if the terminal doesn't support colors
+    - aquatic       blue tinted style loosely resembling the lxdialog theme
+
+It is possible to customize the current style by changing colors of UI
+elements on the screen. This is the list of elements that can be stylized:
+
+    - path          Top row in the main display, with the menu path
+    - separator     Separator lines between windows. Also used for the top line
+                    in the symbol information display.
+    - list          List of items, e.g. the main display
+    - selection     Style for the selected item
+    - inv-list      Like list, but for invisible items. Used in show-all mode.
+    - inv-selection Like selection, but for invisible items. Used in show-all
+                    mode.
+    - help          Help text windows at the bottom of various fullscreen
+                    dialogs
+    - show-help     Window showing the help text in show-help mode
+    - frame         Frame around dialog boxes
+    - body          Body of dialog boxes
+    - edit          Edit box in pop-up dialogs
+    - jump-edit     Edit box in jump-to dialog
+    - text          Symbol information text
+
+The color definition is a comma separated list of attributes:
+
+    - fg:COLOR      Set the foreground/background colors. COLOR can be one of
+      * or *        the basic 16 colors (black, red, green, yellow, blue,
+    - bg:COLOR      magenta, cyan, white and brighter versions, for example,
+                    brightred). On terminals that support more than 8 colors,
+                    you can also directly put in a color number, e.g. fg:123
+                    (hexadecimal and octal constants are accepted as well).
+                    Colors outside the range -1..curses.COLORS-1 (which is
+                    terminal-dependent) are ignored (with a warning). The COLOR
+                    can be also specified using a RGB value in the HTML
+                    notation, for example #RRGGBB. If the terminal supports
+                    color changing, the color is rendered accurately.
+                    Otherwise, the visually nearest color is used.
+
+                    If the background or foreground color of an element is not
+                    specified, it defaults to -1, representing the default
+                    terminal foreground or background color.
+
+                    Note: On some terminals a bright version of the color
+                    implies bold.
+    - bold          Use bold text
+    - underline     Use underline text
+    - standout      Standout text attribute (reverse color)
+
+More often than not, some UI elements share the same color definition. In such
+cases the right value may specify an UI element from which the color definition
+will be copied. For example, "separator=help" will apply the current color
+definition for "help" to "separator".
+
+A keyword without the '=' is assumed to be a style template. The template name
+is looked up in the built-in styles list and the style definition is expanded
+in-place. With this, built-in styles can be used as basis for new styles.
+
+For example, take the aquatic theme and give it a red selection bar:
+
+MENUCONFIG_STYLE="aquatic selection=fg:white,bg:red"
+
+If there's an error in the style definition or if a missing style is assigned
+to, the assignment will be ignored, along with a warning being printed on
+stderr.
+
+The 'default' theme is always implicitly parsed first (or the 'monochrome'
+theme if the terminal lacks colors), so the following two settings have the
+same effect:
+
+    MENUCONFIG_STYLE="selection=fg:white,bg:red"
+    MENUCONFIG_STYLE="default selection=fg:white,bg:red"
+
+
+Other features
+==============
+
+  - Seamless terminal resizing
+
+  - No dependencies on *nix, as the 'curses' module is in the Python standard
+    library
+
+  - Unicode text entry
+
+  - Improved information screen compared to mconf:
+
+      * Expressions are split up by their top-level &&/|| operands to improve
+        readability
+
+      * Undefined symbols in expressions are pointed out
+
+      * Menus and comments have information displays
+
+      * Kconfig definitions are printed
+
+      * The include path is shown, listing the locations of the 'source'
+        statements that included the Kconfig file of the symbol (or other
+        item)
+
+
+Limitations
+===========
+
+Doesn't work out of the box on Windows, but can be made to work with 'pip
+install windows-curses'. See the
+https://github.com/zephyrproject-rtos/windows-curses repository.
+
+'pip install kconfiglib' on Windows automatically installs windows-curses
+to make the menuconfig usable.
+"""
+from __future__ import print_function
+
+import curses
+import errno
+import locale
+import os
+import re
+import sys
+import textwrap
+
+from kconfiglib import Symbol, Choice, MENU, COMMENT, MenuNode, \
+                       BOOL, TRISTATE, STRING, INT, HEX, \
+                       AND, OR, \
+                       expr_str, expr_value, split_expr, \
+                       standard_sc_expr_str, \
+                       TRI_TO_STR, TYPE_TO_STR, \
+                       standard_kconfig, standard_config_filename
+
+
+#
+# Configuration variables
+#
+
+# If True, try to change LC_CTYPE to a UTF-8 locale if it is set to the C
+# locale (which implies ASCII). This fixes curses Unicode I/O issues on systems
+# with bad defaults. ncurses configures itself from the locale settings.
+#
+# Related PEP: https://www.python.org/dev/peps/pep-0538/
+_CHANGE_C_LC_CTYPE_TO_UTF8 = True
+
+# How many steps an implicit submenu will be indented. Implicit submenus are
+# created when an item depends on the symbol before it. Note that symbols
+# defined with 'menuconfig' create a separate menu instead of indenting.
+_SUBMENU_INDENT = 4
+
+# Number of steps for Page Up/Down to jump
+_PG_JUMP = 6
+
+# Height of the help window in show-help mode
+_SHOW_HELP_HEIGHT = 8
+
+# How far the cursor needs to be from the edge of the window before it starts
+# to scroll. Used for the main menu display, the information display, the
+# search display, and for text boxes.
+_SCROLL_OFFSET = 5
+
+# Minimum width of dialogs that ask for text input
+_INPUT_DIALOG_MIN_WIDTH = 30
+
+# Number of arrows pointing up/down to draw when a window is scrolled
+_N_SCROLL_ARROWS = 14
+
+# Lines of help text shown at the bottom of the "main" display
+_MAIN_HELP_LINES = """
+[Space/Enter] Toggle/enter  [ESC] Leave menu           [S] Save
+[O] Load                    [?] Symbol info            [/] Jump to symbol
+[F] Toggle show-help mode   [C] Toggle show-name mode  [A] Toggle show-all mode
+[Q] Quit (prompts for save) [D] Save minimal config (advanced)
+"""[1:-1].split("\n")
+
+# Lines of help text shown at the bottom of the information dialog
+_INFO_HELP_LINES = """
+[ESC/q] Return to menu      [/] Jump to symbol
+"""[1:-1].split("\n")
+
+# Lines of help text shown at the bottom of the search dialog
+_JUMP_TO_HELP_LINES = """
+Type text to narrow the search. Regexes are supported (via Python's 're'
+module). The up/down cursor keys step in the list. [Enter] jumps to the
+selected symbol. [ESC] aborts the search. Type multiple space-separated
+strings/regexes to find entries that match all of them. Type Ctrl-F to
+view the help of the selected item without leaving the dialog.
+"""[1:-1].split("\n")
+
+#
+# Styling
+#
+
+_STYLES = {
+    "default": """
+    path=fg:black,bg:white,bold
+    separator=fg:black,bg:yellow,bold
+    list=fg:black,bg:white
+    selection=fg:white,bg:blue,bold
+    inv-list=fg:red,bg:white
+    inv-selection=fg:red,bg:blue
+    help=path
+    show-help=list
+    frame=fg:black,bg:yellow,bold
+    body=fg:white,bg:black
+    edit=fg:white,bg:blue
+    jump-edit=edit
+    text=list
+    """,
+
+    # This style is forced on terminals that do no support colors
+    "monochrome": """
+    path=bold
+    separator=bold,standout
+    list=
+    selection=bold,standout
+    inv-list=bold
+    inv-selection=bold,standout
+    help=bold
+    show-help=
+    frame=bold,standout
+    body=
+    edit=standout
+    jump-edit=
+    text=
+    """,
+
+    # Blue tinted style loosely resembling lxdialog
+    "aquatic": """
+    path=fg:cyan,bg:blue,bold
+    separator=fg:white,bg:cyan,bold
+    help=path
+    frame=fg:white,bg:cyan,bold
+    body=fg:brightwhite,bg:blue
+    edit=fg:black,bg:white
+    """
+}
+
+# Standard colors definition
+_STYLE_STD_COLORS = {
+    # Basic colors
+    "black":         curses.COLOR_BLACK,
+    "red":           curses.COLOR_RED,
+    "green":         curses.COLOR_GREEN,
+    "yellow":        curses.COLOR_YELLOW,
+    "blue":          curses.COLOR_BLUE,
+    "magenta":       curses.COLOR_MAGENTA,
+    "cyan":          curses.COLOR_CYAN,
+    "white":         curses.COLOR_WHITE,
+
+    # Bright versions
+    "brightblack":   curses.COLOR_BLACK + 8,
+    "brightred":     curses.COLOR_RED + 8,
+    "brightgreen":   curses.COLOR_GREEN + 8,
+    "brightyellow":  curses.COLOR_YELLOW + 8,
+    "brightblue":    curses.COLOR_BLUE + 8,
+    "brightmagenta": curses.COLOR_MAGENTA + 8,
+    "brightcyan":    curses.COLOR_CYAN + 8,
+    "brightwhite":   curses.COLOR_WHITE + 8,
+
+    # Aliases
+    "purple":        curses.COLOR_MAGENTA,
+    "brightpurple":  curses.COLOR_MAGENTA + 8,
+}
+
+
+def _rgb_to_6cube(rgb):
+    # Converts an 888 RGB color to a 3-tuple (nice in that it's hashable)
+    # representing the closest xterm 256-color 6x6x6 color cube color.
+    #
+    # The xterm 256-color extension uses a RGB color palette with components in
+    # the range 0-5 (a 6x6x6 cube). The catch is that the mapping is nonlinear.
+    # Index 0 in the 6x6x6 cube is mapped to 0, index 1 to 95, then 135, 175,
+    # etc., in increments of 40. See the links below:
+    #
+    #   https://commons.wikimedia.org/wiki/File:Xterm_256color_chart.svg
+    #   https://github.com/tmux/tmux/blob/master/colour.c
+
+    # 48 is the middle ground between 0 and 95.
+    return tuple(0 if x < 48 else int(round(max(1, (x - 55)/40))) for x in rgb)
+
+
+def _6cube_to_rgb(r6g6b6):
+    # Returns the 888 RGB color for a 666 xterm color cube index
+
+    return tuple(0 if x == 0 else 40*x + 55 for x in r6g6b6)
+
+
+def _rgb_to_gray(rgb):
+    # Converts an 888 RGB color to the index of an xterm 256-color grayscale
+    # color with approx. the same perceived brightness
+
+    # Calculate the luminance (gray intensity) of the color. See
+    #   https://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color
+    # and
+    #   https://www.w3.org/TR/AERT/#color-contrast
+    luma = 0.299*rgb[0] + 0.587*rgb[1] + 0.114*rgb[2]
+
+    # Closest index in the grayscale palette, which starts at RGB 0x080808,
+    # with stepping 0x0A0A0A
+    index = int(round((luma - 8)/10))
+
+    # Clamp the index to 0-23, corresponding to 232-255
+    return max(0, min(index, 23))
+
+
+def _gray_to_rgb(index):
+    # Convert a grayscale index to its closet single RGB component
+
+    return 3*(10*index + 8,)  # Returns a 3-tuple
+
+
+# Obscure Python: We never pass a value for rgb2index, and it keeps pointing to
+# the same dict. This avoids a global.
+def _alloc_rgb(rgb, rgb2index={}):
+    # Initialize a new entry in the xterm palette to the given RGB color,
+    # returning its index. If the color has already been initialized, the index
+    # of the existing entry is returned.
+    #
+    # ncurses is palette-based, so we need to overwrite palette entries to make
+    # new colors.
+    #
+    # The colors from 0 to 15 are user-defined, and there's no way to query
+    # their RGB values, so we better leave them untouched. Also leave any
+    # hypothetical colors above 255 untouched (though we're unlikely to
+    # allocate that many colors anyway).
+
+    if rgb in rgb2index:
+        return rgb2index[rgb]
+
+    # Many terminals allow the user to customize the first 16 colors. Avoid
+    # changing their values.
+    color_index = 16 + len(rgb2index)
+    if color_index >= 256:
+        _warn("Unable to allocate new RGB color ", rgb, ". Too many colors "
+              "allocated.")
+        return 0
+
+    # Map each RGB component from the range 0-255 to the range 0-1000, which is
+    # what curses uses
+    curses.init_color(color_index, *(int(round(1000*x/255)) for x in rgb))
+    rgb2index[rgb] = color_index
+
+    return color_index
+
+
+def _color_from_num(num):
+    # Returns the index of a color that looks like color 'num' in the xterm
+    # 256-color palette (but that might not be 'num', if we're redefining
+    # colors)
+
+    # - _alloc_rgb() won't touch the first 16 colors or any (hypothetical)
+    #   colors above 255, so we can always return them as-is
+    #
+    # - If the terminal doesn't support changing color definitions, or if
+    #   curses.COLORS < 256, _alloc_rgb() won't touch any color, and all colors
+    #   can be returned as-is
+    if num < 16 or num > 255 or not curses.can_change_color() or \
+       curses.COLORS < 256:
+        return num
+
+    # _alloc_rgb() might redefine colors, so emulate the xterm 256-color
+    # palette by allocating new colors instead of returning color numbers
+    # directly
+
+    if num < 232:
+        num -= 16
+        return _alloc_rgb(_6cube_to_rgb(((num//36)%6, (num//6)%6, num%6)))
+
+    return _alloc_rgb(_gray_to_rgb(num - 232))
+
+
+def _color_from_rgb(rgb):
+    # Returns the index of a color matching the 888 RGB color 'rgb'. The
+    # returned color might be an ~exact match or an approximation, depending on
+    # terminal capabilities.
+
+    # Calculates the Euclidean distance between two RGB colors
+    def dist(r1, r2): return sum((x - y)**2 for x, y in zip(r1, r2))
+
+    if curses.COLORS >= 256:
+        # Assume we're dealing with xterm's 256-color extension
+
+        if curses.can_change_color():
+            # Best case -- the terminal supports changing palette entries via
+            # curses.init_color(). Initialize an unused palette entry and
+            # return it.
+            return _alloc_rgb(rgb)
+
+        # Second best case -- pick between the xterm 256-color extension colors
+
+        # Closest 6-cube "color" color
+        c6 = _rgb_to_6cube(rgb)
+        # Closest gray color
+        gray = _rgb_to_gray(rgb)
+
+        if dist(rgb, _6cube_to_rgb(c6)) < dist(rgb, _gray_to_rgb(gray)):
+            # Use the "color" color from the 6x6x6 color palette. Calculate the
+            # color number from the 6-cube index triplet.
+            return 16 + 36*c6[0] + 6*c6[1] + c6[2]
+
+        # Use the color from the gray palette
+        return 232 + gray
+
+    # Terminal not in xterm 256-color mode. This is probably the best we can
+    # do, or is it? Submit patches. :)
+    min_dist = float('inf')
+    best = -1
+    for color in range(curses.COLORS):
+        # ncurses uses the range 0..1000. Scale that down to 0..255.
+        d = dist(rgb, tuple(int(round(255*c/1000))
+                            for c in curses.color_content(color)))
+        if d < min_dist:
+            min_dist = d
+            best = color
+
+    return best
+
+
+def _parse_style(style_str, parsing_default):
+    # Parses a string with '<element>=<style>' assignments. Anything not
+    # containing '=' is assumed to be a reference to a built-in style, which is
+    # treated as if all the assignments from the style were inserted at that
+    # point in the string.
+    #
+    # The parsing_default flag is set to True when we're implicitly parsing the
+    # 'default'/'monochrome' style, to prevent warnings.
+
+    for sline in style_str.split():
+        # Words without a "=" character represents a style template
+        if "=" in sline:
+            key, data = sline.split("=", 1)
+
+            # The 'default' style template is assumed to define all keys. We
+            # run _style_to_curses() for non-existing keys as well, so that we
+            # print warnings for errors to the right of '=' for those too.
+            if key not in _style and not parsing_default:
+                _warn("Ignoring non-existent style", key)
+
+            # If data is a reference to another key, copy its style
+            if data in _style:
+                _style[key] = _style[data]
+            else:
+                _style[key] = _style_to_curses(data)
+
+        elif sline in _STYLES:
+            # Recursively parse style template. Ignore styles that don't exist,
+            # for backwards/forwards compatibility.
+            _parse_style(_STYLES[sline], parsing_default)
+
+        else:
+            _warn("Ignoring non-existent style template", sline)
+
+# Dictionary mapping element types to the curses attributes used to display
+# them
+_style = {}
+
+
+def _style_to_curses(style_def):
+    # Parses a style definition string (<element>=<style>), returning
+    # a (fg_color, bg_color, attributes) tuple.
+
+    def parse_color(color_def):
+        color_def = color_def.split(":", 1)[1]
+
+        if color_def in _STYLE_STD_COLORS:
+            return _color_from_num(_STYLE_STD_COLORS[color_def])
+
+        # HTML format, #RRGGBB
+        if re.match("#[A-Fa-f0-9]{6}", color_def):
+            return _color_from_rgb((
+                int(color_def[1:3], 16),
+                int(color_def[3:5], 16),
+                int(color_def[5:7], 16)))
+
+        try:
+            color_num = _color_from_num(int(color_def, 0))
+        except ValueError:
+            _warn("Ignoring color ", color_def, "that's neither predefined "
+                  "nor a number")
+
+            return -1
+
+        if not -1 <= color_num < curses.COLORS:
+            _warn("Ignoring color {}, which is outside the range "
+                  "-1..curses.COLORS-1 (-1..{})"
+                  .format(color_def, curses.COLORS - 1))
+
+            return -1
+
+        return color_num
+
+    fg_color = -1
+    bg_color = -1
+    attrs = 0
+
+    if style_def:
+        for field in style_def.split(","):
+            if field.startswith("fg:"):
+                fg_color = parse_color(field)
+            elif field.startswith("bg:"):
+                bg_color = parse_color(field)
+            elif field == "bold":
+                # A_BOLD tends to produce faint and hard-to-read text on the
+                # Windows console, especially with the old color scheme, before
+                # the introduction of
+                # https://blogs.msdn.microsoft.com/commandline/2017/08/02/updating-the-windows-console-colors/
+                attrs |= curses.A_NORMAL if _IS_WINDOWS else curses.A_BOLD
+            elif field == "standout":
+                attrs |= curses.A_STANDOUT
+            elif field == "underline":
+                attrs |= curses.A_UNDERLINE
+            else:
+                _warn("Ignoring unknown style attribute", field)
+
+    return _style_attr(fg_color, bg_color, attrs)
+
+
+def _init_styles():
+    if curses.has_colors():
+        curses.use_default_colors()
+
+    # Use the 'monochrome' style template as the base on terminals without
+    # color
+    _parse_style("default" if curses.has_colors() else "monochrome", True)
+
+    # Add any user-defined style from the environment
+    if "MENUCONFIG_STYLE" in os.environ:
+        _parse_style(os.environ["MENUCONFIG_STYLE"], False)
+
+
+# color_attribs holds the color pairs we've already created, indexed by a
+# (<foreground color>, <background color>) tuple.
+#
+# Obscure Python: We never pass a value for color_attribs, and it keeps
+# pointing to the same dict. This avoids a global.
+def _style_attr(fg_color, bg_color, attribs, color_attribs={}):
+    # Returns an attribute with the specified foreground and background color
+    # and the attributes in 'attribs'. Reuses color pairs already created if
+    # possible, and creates a new color pair otherwise.
+    #
+    # Returns 'attribs' if colors aren't supported.
+
+    if not curses.has_colors():
+        return attribs
+
+    if (fg_color, bg_color) not in color_attribs:
+        # Create new color pair. Color pair number 0 is hardcoded and cannot be
+        # changed, hence the +1s.
+        curses.init_pair(len(color_attribs) + 1, fg_color, bg_color)
+        color_attribs[(fg_color, bg_color)] = \
+            curses.color_pair(len(color_attribs) + 1)
+
+    return color_attribs[(fg_color, bg_color)] | attribs
+
+
+#
+# Main application
+#
+
+
+def _main():
+    menuconfig(standard_kconfig())
+
+
+def menuconfig(kconf):
+    """
+    Launches the configuration interface, returning after the user exits.
+
+    kconf:
+      Kconfig instance to be configured
+    """
+    global _kconf
+    global _conf_filename
+    global _conf_changed
+    global _minconf_filename
+    global _show_all
+
+    _kconf = kconf
+
+    # Filename to save configuration to
+    _conf_filename = standard_config_filename()
+
+    # Load existing configuration and set _conf_changed True if it is outdated
+    _conf_changed = _load_config()
+
+    # Filename to save minimal configuration to
+    _minconf_filename = "defconfig"
+
+    # Any visible items in the top menu?
+    _show_all = False
+    if not _shown_nodes(kconf.top_node):
+        # Nothing visible. Start in show-all mode and try again.
+        _show_all = True
+        if not _shown_nodes(kconf.top_node):
+            # Give up. The implementation relies on always having a selected
+            # node.
+            print("Empty configuration -- nothing to configure.\n"
+                  "Check that environment variables are set properly.")
+            return
+
+    # Disable warnings. They get mangled in curses mode, and we deal with
+    # errors ourselves.
+    kconf.warn = False
+
+    # Make curses use the locale settings specified in the environment
+    locale.setlocale(locale.LC_ALL, "")
+
+    # Try to fix Unicode issues on systems with bad defaults
+    if _CHANGE_C_LC_CTYPE_TO_UTF8:
+        _change_c_lc_ctype_to_utf8()
+
+    # Get rid of the delay between pressing ESC and jumping to the parent menu,
+    # unless the user has set ESCDELAY (see ncurses(3)). This makes the UI much
+    # smoother to work with.
+    #
+    # Note: This is strictly pretty iffy, since escape codes for e.g. cursor
+    # keys start with ESC, but I've never seen it cause problems in practice
+    # (probably because it's unlikely that the escape code for a key would get
+    # split up across read()s, at least with a terminal emulator). Please
+    # report if you run into issues. Some suitable small default value could be
+    # used here instead in that case. Maybe it's silly to not put in the
+    # smallest imperceptible delay here already, though I don't like guessing.
+    #
+    # (From a quick glance at the ncurses source code, ESCDELAY might only be
+    # relevant for mouse events there, so maybe escapes are assumed to arrive
+    # in one piece already...)
+    os.environ.setdefault("ESCDELAY", "0")
+
+    # Enter curses mode. _menuconfig() returns a string to print on exit, after
+    # curses has been de-initialized.
+    print(curses.wrapper(_menuconfig))
+
+
+def _load_config():
+    # Loads any existing .config file. See the Kconfig.load_config() docstring.
+    #
+    # Returns True if .config is missing or outdated. We always prompt for
+    # saving the configuration in that case.
+
+    print(_kconf.load_config())
+    if not os.path.exists(_conf_filename):
+        # No .config
+        return True
+
+    return _needs_save()
+
+
+def _needs_save():
+    # Returns True if a just-loaded .config file is outdated (would get
+    # modified when saving)
+
+    if _kconf.missing_syms:
+        # Assignments to undefined symbols in the .config
+        return True
+
+    for sym in _kconf.unique_defined_syms:
+        if sym.user_value is None:
+            if sym.config_string:
+                # Unwritten symbol
+                return True
+        elif sym.orig_type in (BOOL, TRISTATE):
+            if sym.tri_value != sym.user_value:
+                # Written bool/tristate symbol, new value
+                return True
+        elif sym.str_value != sym.user_value:
+            # Written string/int/hex symbol, new value
+            return True
+
+    # No need to prompt for save
+    return False
+
+
+# Global variables used below:
+#
+#   _stdscr:
+#     stdscr from curses
+#
+#   _cur_menu:
+#     Menu node of the menu (or menuconfig symbol, or choice) currently being
+#     shown
+#
+#   _shown:
+#     List of items in _cur_menu that are shown (ignoring scrolling). In
+#     show-all mode, this list contains all items in _cur_menu. Otherwise, it
+#     contains just the visible items.
+#
+#   _sel_node_i:
+#     Index in _shown of the currently selected node
+#
+#   _menu_scroll:
+#     Index in _shown of the top row of the main display
+#
+#   _parent_screen_rows:
+#     List/stack of the row numbers that the selections in the parent menus
+#     appeared on. This is used to prevent the scrolling from jumping around
+#     when going in and out of menus.
+#
+#   _show_help/_show_name/_show_all:
+#     If True, the corresponding mode is on. See the module docstring.
+#
+#   _conf_filename:
+#     File to save the configuration to
+#
+#   _minconf_filename:
+#     File to save minimal configurations to
+#
+#   _conf_changed:
+#     True if the configuration has been changed. If False, we don't bother
+#     showing the save-and-quit dialog.
+#
+#     We reset this to False whenever the configuration is saved explicitly
+#     from the save dialog.
+
+
+def _menuconfig(stdscr):
+    # Logic for the main display, with the list of symbols, etc.
+
+    global _stdscr
+    global _conf_filename
+    global _conf_changed
+    global _minconf_filename
+    global _show_help
+    global _show_name
+
+    _stdscr = stdscr
+
+    _init()
+
+    while True:
+        _draw_main()
+        curses.doupdate()
+
+
+        c = _getch_compat(_menu_win)
+
+        if c == curses.KEY_RESIZE:
+            _resize_main()
+
+        elif c in (curses.KEY_DOWN, "j", "J"):
+            _select_next_menu_entry()
+
+        elif c in (curses.KEY_UP, "k", "K"):
+            _select_prev_menu_entry()
+
+        elif c in (curses.KEY_NPAGE, "\x04"):  # Page Down/Ctrl-D
+            # Keep it simple. This way we get sane behavior for small windows,
+            # etc., for free.
+            for _ in range(_PG_JUMP):
+                _select_next_menu_entry()
+
+        elif c in (curses.KEY_PPAGE, "\x15"):  # Page Up/Ctrl-U
+            for _ in range(_PG_JUMP):
+                _select_prev_menu_entry()
+
+        elif c in (curses.KEY_END, "G"):
+            _select_last_menu_entry()
+
+        elif c in (curses.KEY_HOME, "g"):
+            _select_first_menu_entry()
+
+        elif c == " ":
+            # Toggle the node if possible
+            sel_node = _shown[_sel_node_i]
+            if not _change_node(sel_node):
+                _enter_menu(sel_node)
+
+        elif c in (curses.KEY_RIGHT, "\n", "l", "L"):
+            # Enter the node if possible
+            sel_node = _shown[_sel_node_i]
+            if not _enter_menu(sel_node):
+                _change_node(sel_node)
+
+        elif c in ("n", "N"):
+            _set_sel_node_tri_val(0)
+
+        elif c in ("m", "M"):
+            _set_sel_node_tri_val(1)
+
+        elif c in ("y", "Y"):
+            _set_sel_node_tri_val(2)
+
+        elif c in (curses.KEY_LEFT, curses.KEY_BACKSPACE, _ERASE_CHAR,
+                   "\x1B", "h", "H"):  # \x1B = ESC
+
+            if c == "\x1B" and _cur_menu is _kconf.top_node:
+                res = _quit_dialog()
+                if res:
+                    return res
+            else:
+                _leave_menu()
+
+        elif c in ("o", "O"):
+            _load_dialog()
+
+        elif c in ("s", "S"):
+            filename = _save_dialog(_kconf.write_config, _conf_filename,
+                                    "configuration")
+            if filename:
+                _conf_filename = filename
+                _conf_changed = False
+
+        elif c in ("d", "D"):
+            filename = _save_dialog(_kconf.write_min_config, _minconf_filename,
+                                    "minimal configuration")
+            if filename:
+                _minconf_filename = filename
+
+        elif c == "/":
+            _jump_to_dialog()
+            # The terminal might have been resized while the fullscreen jump-to
+            # dialog was open
+            _resize_main()
+
+        elif c == "?":
+            _info_dialog(_shown[_sel_node_i], False)
+            # The terminal might have been resized while the fullscreen info
+            # dialog was open
+            _resize_main()
+
+        elif c in ("f", "F"):
+            _show_help = not _show_help
+            _set_style(_help_win, "show-help" if _show_help else "help")
+            _resize_main()
+
+        elif c in ("c", "C"):
+            _show_name = not _show_name
+
+        elif c in ("a", "A"):
+            _toggle_show_all()
+
+        elif c in ("q", "Q"):
+            res = _quit_dialog()
+            if res:
+                return res
+
+
+def _quit_dialog():
+    if not _conf_changed:
+        return "No changes to save (for '{}')".format(_conf_filename)
+
+    while True:
+        c = _key_dialog(
+            "Quit",
+            " Save configuration?\n"
+            "\n"
+            "(Y)es  (N)o  (C)ancel",
+            "ync")
+
+        if c is None or c == "c":
+            return None
+
+        if c == "y":
+            # Returns a message to print
+            msg = _try_save(_kconf.write_config, _conf_filename, "configuration")
+            if msg:
+                return msg
+
+        elif c == "n":
+            return "Configuration ({}) was not saved".format(_conf_filename)
+
+
+def _init():
+    # Initializes the main display with the list of symbols, etc. Also does
+    # misc. global initialization that needs to happen after initializing
+    # curses.
+
+    global _ERASE_CHAR
+
+    global _path_win
+    global _top_sep_win
+    global _menu_win
+    global _bot_sep_win
+    global _help_win
+
+    global _parent_screen_rows
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    global _show_help
+    global _show_name
+
+    # Looking for this in addition to KEY_BACKSPACE (which is unreliable) makes
+    # backspace work with TERM=vt100. That makes it likely to work in sane
+    # environments.
+    _ERASE_CHAR = curses.erasechar()
+    if sys.version_info[0] >= 3:
+        # erasechar() returns a one-byte bytes object on Python 3. This sets
+        # _ERASE_CHAR to a blank string if it can't be decoded, which should be
+        # harmless.
+        _ERASE_CHAR = _ERASE_CHAR.decode("utf-8", "ignore")
+
+    _init_styles()
+
+    # Hide the cursor
+    _safe_curs_set(0)
+
+    # Initialize windows
+
+    # Top row, with menu path
+    _path_win = _styled_win("path")
+
+    # Separator below menu path, with title and arrows pointing up
+    _top_sep_win = _styled_win("separator")
+
+    # List of menu entries with symbols, etc.
+    _menu_win = _styled_win("list")
+    _menu_win.keypad(True)
+
+    # Row below menu list, with arrows pointing down
+    _bot_sep_win = _styled_win("separator")
+
+    # Help window with keys at the bottom. Shows help texts in show-help mode.
+    _help_win = _styled_win("help")
+
+    # The rows we'd like the nodes in the parent menus to appear on. This
+    # prevents the scroll from jumping around when going in and out of menus.
+    _parent_screen_rows = []
+
+    # Initial state
+
+    _cur_menu = _kconf.top_node
+    _shown = _shown_nodes(_cur_menu)
+    _sel_node_i = _menu_scroll = 0
+
+    _show_help = _show_name = False
+
+    # Give windows their initial size
+    _resize_main()
+
+
+def _resize_main():
+    # Resizes the main display, with the list of symbols, etc., to fill the
+    # terminal
+
+    global _menu_scroll
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    _path_win.resize(1, screen_width)
+    _top_sep_win.resize(1, screen_width)
+    _bot_sep_win.resize(1, screen_width)
+
+    help_win_height = _SHOW_HELP_HEIGHT if _show_help else \
+        len(_MAIN_HELP_LINES)
+
+    menu_win_height = screen_height - help_win_height - 3
+
+    if menu_win_height >= 1:
+        _menu_win.resize(menu_win_height, screen_width)
+        _help_win.resize(help_win_height, screen_width)
+
+        _top_sep_win.mvwin(1, 0)
+        _menu_win.mvwin(2, 0)
+        _bot_sep_win.mvwin(2 + menu_win_height, 0)
+        _help_win.mvwin(2 + menu_win_height + 1, 0)
+    else:
+        # Degenerate case. Give up on nice rendering and just prevent errors.
+
+        menu_win_height = 1
+
+        _menu_win.resize(1, screen_width)
+        _help_win.resize(1, screen_width)
+
+        for win in _top_sep_win, _menu_win, _bot_sep_win, _help_win:
+            win.mvwin(0, 0)
+
+    # Adjust the scroll so that the selected node is still within the window,
+    # if needed
+    if _sel_node_i - _menu_scroll >= menu_win_height:
+        _menu_scroll = _sel_node_i - menu_win_height + 1
+
+
+def _height(win):
+    # Returns the height of 'win'
+
+    return win.getmaxyx()[0]
+
+
+def _width(win):
+    # Returns the width of 'win'
+
+    return win.getmaxyx()[1]
+
+
+def _enter_menu(menu):
+    # Makes 'menu' the currently displayed menu. In addition to actual 'menu's,
+    # "menu" here includes choices and symbols defined with the 'menuconfig'
+    # keyword.
+    #
+    # Returns False if 'menu' can't be entered.
+
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    if not menu.is_menuconfig:
+        # Not a menu
+        return False
+
+    shown_sub = _shown_nodes(menu)
+    # Never enter empty menus. We depend on having a current node.
+    if not shown_sub:
+        return False
+
+    # Remember where the current node appears on the screen, so we can try
+    # to get it to appear in the same place when we leave the menu
+    _parent_screen_rows.append(_sel_node_i - _menu_scroll)
+
+    # Jump into menu
+    _cur_menu = menu
+    _shown = shown_sub
+    _sel_node_i = _menu_scroll = 0
+
+    if isinstance(menu.item, Choice):
+        _select_selected_choice_sym()
+
+    return True
+
+
+def _select_selected_choice_sym():
+    # Puts the cursor on the currently selected (y-valued) choice symbol, if
+    # any. Does nothing if if the choice has no selection (is not visible/in y
+    # mode).
+
+    global _sel_node_i
+
+    choice = _cur_menu.item
+    if choice.selection:
+        # Search through all menu nodes to handle choice symbols being defined
+        # in multiple locations
+        for node in choice.selection.nodes:
+            if node in _shown:
+                _sel_node_i = _shown.index(node)
+                _center_vertically()
+                return
+
+
+def _jump_to(node):
+    # Jumps directly to the menu node 'node'
+
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+    global _show_all
+    global _parent_screen_rows
+
+    # Clear remembered menu locations. We might not even have been in the
+    # parent menus before.
+    _parent_screen_rows = []
+
+    old_show_all = _show_all
+    jump_into = (isinstance(node.item, Choice) or node.item == MENU) and \
+                node.list
+
+    # If we're jumping to a non-empty choice or menu, jump to the first entry
+    # in it instead of jumping to its menu node
+    if jump_into:
+        _cur_menu = node
+        node = node.list
+    else:
+        _cur_menu = _parent_menu(node)
+
+    _shown = _shown_nodes(_cur_menu)
+    if node not in _shown:
+        # The node wouldn't be shown. Turn on show-all to show it.
+        _show_all = True
+        _shown = _shown_nodes(_cur_menu)
+
+    _sel_node_i = _shown.index(node)
+
+    if jump_into and not old_show_all and _show_all:
+        # If we're jumping into a choice or menu and were forced to turn on
+        # show-all because the first entry wasn't visible, try turning it off.
+        # That will land us at the first visible node if there are visible
+        # nodes, and is a no-op otherwise.
+        _toggle_show_all()
+
+    _center_vertically()
+
+    # If we're jumping to a non-empty choice, jump to the selected symbol, if
+    # any
+    if jump_into and isinstance(_cur_menu.item, Choice):
+        _select_selected_choice_sym()
+
+
+def _leave_menu():
+    # Jumps to the parent menu of the current menu. Does nothing if we're in
+    # the top menu.
+
+    global _cur_menu
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    if _cur_menu is _kconf.top_node:
+        return
+
+    # Jump to parent menu
+    parent = _parent_menu(_cur_menu)
+    _shown = _shown_nodes(parent)
+    _sel_node_i = _shown.index(_cur_menu)
+    _cur_menu = parent
+
+    # Try to make the menu entry appear on the same row on the screen as it did
+    # before we entered the menu.
+
+    if _parent_screen_rows:
+        # The terminal might have shrunk since we were last in the parent menu
+        screen_row = min(_parent_screen_rows.pop(), _height(_menu_win) - 1)
+        _menu_scroll = max(_sel_node_i - screen_row, 0)
+    else:
+        # No saved parent menu locations, meaning we jumped directly to some
+        # node earlier
+        _center_vertically()
+
+
+def _select_next_menu_entry():
+    # Selects the menu entry after the current one, adjusting the scroll if
+    # necessary. Does nothing if we're already at the last menu entry.
+
+    global _sel_node_i
+    global _menu_scroll
+
+    if _sel_node_i < len(_shown) - 1:
+        # Jump to the next node
+        _sel_node_i += 1
+
+        # If the new node is sufficiently close to the edge of the menu window
+        # (as determined by _SCROLL_OFFSET), increase the scroll by one. This
+        # gives nice and non-jumpy behavior even when
+        # _SCROLL_OFFSET >= _height(_menu_win).
+        if _sel_node_i >= _menu_scroll + _height(_menu_win) - _SCROLL_OFFSET \
+           and _menu_scroll < _max_scroll(_shown, _menu_win):
+
+            _menu_scroll += 1
+
+
+def _select_prev_menu_entry():
+    # Selects the menu entry before the current one, adjusting the scroll if
+    # necessary. Does nothing if we're already at the first menu entry.
+
+    global _sel_node_i
+    global _menu_scroll
+
+    if _sel_node_i > 0:
+        # Jump to the previous node
+        _sel_node_i -= 1
+
+        # See _select_next_menu_entry()
+        if _sel_node_i < _menu_scroll + _SCROLL_OFFSET:
+            _menu_scroll = max(_menu_scroll - 1, 0)
+
+
+def _select_last_menu_entry():
+    # Selects the last menu entry in the current menu
+
+    global _sel_node_i
+    global _menu_scroll
+
+    _sel_node_i = len(_shown) - 1
+    _menu_scroll = _max_scroll(_shown, _menu_win)
+
+
+def _select_first_menu_entry():
+    # Selects the first menu entry in the current menu
+
+    global _sel_node_i
+    global _menu_scroll
+
+    _sel_node_i = _menu_scroll = 0
+
+
+def _toggle_show_all():
+    # Toggles show-all mode on/off. If turning it off would give no visible
+    # items in the current menu, it is left on.
+
+    global _show_all
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    # Row on the screen the cursor is on. Preferably we want the same row to
+    # stay highlighted.
+    old_row = _sel_node_i - _menu_scroll
+
+    _show_all = not _show_all
+    # List of new nodes to be shown after toggling _show_all
+    new_shown = _shown_nodes(_cur_menu)
+
+    # Find a good node to select. The selected node might disappear if show-all
+    # mode is turned off.
+
+    # Select the previously selected node itself if it is still visible. If
+    # there are visible nodes before it, select the closest one.
+    for node in _shown[_sel_node_i::-1]:
+        if node in new_shown:
+            _sel_node_i = new_shown.index(node)
+            break
+    else:
+        # No visible nodes before the previously selected node. Select the
+        # closest visible node after it instead.
+        for node in _shown[_sel_node_i + 1:]:
+            if node in new_shown:
+                _sel_node_i = new_shown.index(node)
+                break
+        else:
+            # No visible nodes at all, meaning show-all was turned off inside
+            # an invisible menu. Don't allow that, as the implementation relies
+            # on always having a selected node.
+            _show_all = True
+            return
+
+    _shown = new_shown
+
+    # Try to make the cursor stay on the same row in the menu window. This
+    # might be impossible if too many nodes have disappeared above the node.
+    _menu_scroll = max(_sel_node_i - old_row, 0)
+
+
+def _center_vertically():
+    # Centers the selected node vertically, if possible
+
+    global _menu_scroll
+
+    _menu_scroll = min(max(_sel_node_i - _height(_menu_win)//2, 0),
+                       _max_scroll(_shown, _menu_win))
+
+
+def _draw_main():
+    # Draws the "main" display, with the list of symbols, the header, and the
+    # footer.
+    #
+    # This could be optimized to only update the windows that have actually
+    # changed, but keep it simple for now and let curses sort it out.
+
+    term_width = _width(_stdscr)
+
+
+    #
+    # Update the separator row below the menu path
+    #
+
+    _top_sep_win.erase()
+
+    # Draw arrows pointing up if the symbol window is scrolled down. Draw them
+    # before drawing the title, so the title ends up on top for small windows.
+    if _menu_scroll > 0:
+        _safe_hline(_top_sep_win, 0, 4, curses.ACS_UARROW, _N_SCROLL_ARROWS)
+
+    # Add the 'mainmenu' text as the title, centered at the top
+    _safe_addstr(_top_sep_win,
+                 0, max((term_width - len(_kconf.mainmenu_text))//2, 0),
+                 _kconf.mainmenu_text)
+
+    _top_sep_win.noutrefresh()
+
+    # Note: The menu path at the top is deliberately updated last. See below.
+
+    #
+    # Update the symbol window
+    #
+
+    _menu_win.erase()
+
+    # Draw the _shown nodes starting from index _menu_scroll up to either as
+    # many as fit in the window, or to the end of _shown
+    for i in range(_menu_scroll,
+                   min(_menu_scroll + _height(_menu_win), len(_shown))):
+
+        node = _shown[i]
+
+        # The 'not _show_all' test avoids showing invisible items in red
+        # outside show-all mode, which could look confusing/broken. Invisible
+        # symbols show up outside show-all mode if an invisible symbol has
+        # visible children in an implicit (indented) menu.
+        if _visible(node) or not _show_all:
+            style = _style["selection" if i == _sel_node_i else "list"]
+        else:
+            style = _style["inv-selection" if i == _sel_node_i else "inv-list"]
+
+        _safe_addstr(_menu_win, i - _menu_scroll, 0, _node_str(node), style)
+
+    _menu_win.noutrefresh()
+
+
+    #
+    # Update the bottom separator window
+    #
+
+    _bot_sep_win.erase()
+
+    # Draw arrows pointing down if the symbol window is scrolled up
+    if _menu_scroll < _max_scroll(_shown, _menu_win):
+        _safe_hline(_bot_sep_win, 0, 4, curses.ACS_DARROW, _N_SCROLL_ARROWS)
+
+    # Indicate when show-name/show-help/show-all mode is enabled
+    enabled_modes = []
+    if _show_help:
+        enabled_modes.append("show-help (toggle with [F])")
+    if _show_name:
+        enabled_modes.append("show-name")
+    if _show_all:
+        enabled_modes.append("show-all")
+    if enabled_modes:
+        s = " and ".join(enabled_modes) + " mode enabled"
+        _safe_addstr(_bot_sep_win, 0, max(term_width - len(s) - 2, 0), s)
+
+    _bot_sep_win.noutrefresh()
+
+
+    #
+    # Update the help window, which shows either key bindings or help texts
+    #
+
+    _help_win.erase()
+
+    if _show_help:
+        node = _shown[_sel_node_i]
+        if isinstance(node.item, (Symbol, Choice)) and node.help:
+            help_lines = textwrap.wrap(node.help, _width(_help_win))
+            for i in range(min(_height(_help_win), len(help_lines))):
+                _safe_addstr(_help_win, i, 0, help_lines[i])
+        else:
+            _safe_addstr(_help_win, 0, 0, "(no help)")
+    else:
+        for i, line in enumerate(_MAIN_HELP_LINES):
+            _safe_addstr(_help_win, i, 0, line)
+
+    _help_win.noutrefresh()
+
+
+    #
+    # Update the top row with the menu path.
+    #
+    # Doing this last leaves the cursor on the top row, which avoids some minor
+    # annoying jumpiness in gnome-terminal when reducing the height of the
+    # terminal. It seems to happen whenever the row with the cursor on it
+    # disappears.
+    #
+
+    _path_win.erase()
+
+    # Draw the menu path ("(Top) -> Menu -> Submenu -> ...")
+
+    menu_prompts = []
+
+    menu = _cur_menu
+    while menu is not _kconf.top_node:
+        # Promptless choices can be entered in show-all mode. Use
+        # standard_sc_expr_str() for them, so they show up as
+        # '<choice (name if any)>'.
+        menu_prompts.append(menu.prompt[0] if menu.prompt else
+                            standard_sc_expr_str(menu.item))
+        menu = menu.parent
+    menu_prompts.append("(Top)")
+    menu_prompts.reverse()
+
+    # Hack: We can't put ACS_RARROW directly in the string. Temporarily
+    # represent it with NULL.
+    menu_path_str = " \0 ".join(menu_prompts)
+
+    # Scroll the menu path to the right if needed to make the current menu's
+    # title visible
+    if len(menu_path_str) > term_width:
+        menu_path_str = menu_path_str[len(menu_path_str) - term_width:]
+
+    # Print the path with the arrows reinserted
+    split_path = menu_path_str.split("\0")
+    _safe_addstr(_path_win, split_path[0])
+    for s in split_path[1:]:
+        _safe_addch(_path_win, curses.ACS_RARROW)
+        _safe_addstr(_path_win, s)
+
+    _path_win.noutrefresh()
+
+
+def _parent_menu(node):
+    # Returns the menu node of the menu that contains 'node'. In addition to
+    # proper 'menu's, this might also be a 'menuconfig' symbol or a 'choice'.
+    # "Menu" here means a menu in the interface.
+
+    menu = node.parent
+    while not menu.is_menuconfig:
+        menu = menu.parent
+    return menu
+
+
+def _shown_nodes(menu):
+    # Returns the list of menu nodes from 'menu' (see _parent_menu()) that
+    # would be shown when entering it
+
+    def rec(node):
+        res = []
+
+        while node:
+            if _visible(node) or _show_all:
+                res.append(node)
+                if node.list and not node.is_menuconfig:
+                    # Nodes from implicit menu created from dependencies. Will
+                    # be shown indented. Note that is_menuconfig is True for
+                    # menus and choices as well as 'menuconfig' symbols.
+                    res += rec(node.list)
+
+            elif node.list and isinstance(node.item, Symbol):
+                # Show invisible symbols if they have visible children. This
+                # can happen for an m/y-valued symbol with an optional prompt
+                # ('prompt "foo" is COND') that is currently disabled. Note
+                # that it applies to both 'config' and 'menuconfig' symbols.
+                shown_children = rec(node.list)
+                if shown_children:
+                    res.append(node)
+                    if not node.is_menuconfig:
+                        res += shown_children
+
+            node = node.next
+
+        return res
+
+    if isinstance(menu.item, Choice):
+        # For named choices defined in multiple locations, entering the choice
+        # at a particular menu node would normally only show the choice symbols
+        # defined there (because that's what the MenuNode tree looks like).
+        #
+        # That might look confusing, and makes extending choices by defining
+        # them in multiple locations less useful. Instead, gather all the child
+        # menu nodes for all the choices whenever a choice is entered. That
+        # makes all choice symbols visible at all locations.
+        #
+        # Choices can contain non-symbol items (people do all sorts of weird
+        # stuff with them), hence the generality here. We really need to
+        # preserve the menu tree at each choice location.
+        #
+        # Note: Named choices are pretty broken in the C tools, and this is
+        # super obscure, so you probably won't find much that relies on this.
+        # This whole 'if' could be deleted if you don't care about defining
+        # choices in multiple locations to add symbols (which will still work,
+        # just with things being displayed in a way that might be unexpected).
+
+        # Do some additional work to avoid listing choice symbols twice if all
+        # or part of the choice is copied in multiple locations (e.g. by
+        # including some Kconfig file multiple times). We give the prompts at
+        # the current location precedence.
+        seen_syms = {node.item for node in rec(menu.list)
+                     if isinstance(node.item, Symbol)}
+        res = []
+        for choice_node in menu.item.nodes:
+            for node in rec(choice_node.list):
+                # 'choice_node is menu' checks if we're dealing with the
+                # current location
+                if node.item not in seen_syms or choice_node is menu:
+                    res.append(node)
+                    if isinstance(node.item, Symbol):
+                        seen_syms.add(node.item)
+        return res
+
+    return rec(menu.list)
+
+
+def _visible(node):
+    # Returns True if the node should appear in the menu (outside show-all
+    # mode)
+
+    return node.prompt and expr_value(node.prompt[1]) and not \
+        (node.item == MENU and not expr_value(node.visibility))
+
+
+def _change_node(node):
+    # Changes the value of the menu node 'node' if it is a symbol. Bools and
+    # tristates are toggled, while other symbol types pop up a text entry
+    # dialog.
+    #
+    # Returns False if the value of 'node' can't be changed.
+
+    if not _changeable(node):
+        return False
+
+    # sc = symbol/choice
+    sc = node.item
+
+    if sc.orig_type in (INT, HEX, STRING):
+        s = sc.str_value
+
+        while True:
+            s = _input_dialog(
+                "{} ({})".format(node.prompt[0], TYPE_TO_STR[sc.orig_type]),
+                s, _range_info(sc))
+
+            if s is None:
+                break
+
+            if sc.orig_type in (INT, HEX):
+                s = s.strip()
+
+                # 'make menuconfig' does this too. Hex values not starting with
+                # '0x' are accepted when loading .config files though.
+                if sc.orig_type == HEX and not s.startswith(("0x", "0X")):
+                    s = "0x" + s
+
+            if _check_valid(sc, s):
+                _set_val(sc, s)
+                break
+
+    elif len(sc.assignable) == 1:
+        # Handles choice symbols for choices in y mode, which are a special
+        # case: .assignable can be (2,) while .tri_value is 0.
+        _set_val(sc, sc.assignable[0])
+
+    else:
+        # Set the symbol to the value after the current value in
+        # sc.assignable, with wrapping
+        val_index = sc.assignable.index(sc.tri_value)
+        _set_val(sc, sc.assignable[(val_index + 1) % len(sc.assignable)])
+
+
+    if _is_y_mode_choice_sym(sc) and not node.list:
+        # Immediately jump to the parent menu after making a choice selection,
+        # like 'make menuconfig' does, except if the menu node has children
+        # (which can happen if a symbol 'depends on' a choice symbol that
+        # immediately precedes it).
+        _leave_menu()
+
+
+    return True
+
+
+def _changeable(node):
+    # Returns True if the value if 'node' can be changed
+
+    sc = node.item
+
+    if not isinstance(sc, (Symbol, Choice)):
+        return False
+
+    # This will hit for invisible symbols, which appear in show-all mode and
+    # when an invisible symbol has visible children (which can happen e.g. for
+    # symbols with optional prompts)
+    if not (node.prompt and expr_value(node.prompt[1])):
+        return False
+
+    return sc.orig_type in (STRING, INT, HEX) or len(sc.assignable) > 1 \
+        or _is_y_mode_choice_sym(sc)
+
+
+def _set_sel_node_tri_val(tri_val):
+    # Sets the value of the currently selected menu entry to 'tri_val', if that
+    # value can be assigned
+
+    sc = _shown[_sel_node_i].item
+    if isinstance(sc, (Symbol, Choice)) and tri_val in sc.assignable:
+        _set_val(sc, tri_val)
+
+
+def _set_val(sc, val):
+    # Wrapper around Symbol/Choice.set_value() for updating the menu state and
+    # _conf_changed
+
+    global _conf_changed
+
+    # Use the string representation of tristate values. This makes the format
+    # consistent for all symbol types.
+    if val in TRI_TO_STR:
+        val = TRI_TO_STR[val]
+
+    if val != sc.str_value:
+        sc.set_value(val)
+        _conf_changed = True
+
+        # Changing the value of the symbol might have changed what items in the
+        # current menu are visible. Recalculate the state.
+        _update_menu()
+
+
+def _update_menu():
+    # Updates the current menu after the value of a symbol or choice has been
+    # changed. Changing a value might change which items in the menu are
+    # visible.
+    #
+    # If possible, preserves the location of the cursor on the screen when
+    # items are added/removed above the selected item.
+
+    global _shown
+    global _sel_node_i
+    global _menu_scroll
+
+    # Row on the screen the cursor was on
+    old_row = _sel_node_i - _menu_scroll
+
+    sel_node = _shown[_sel_node_i]
+
+    # New visible nodes
+    _shown = _shown_nodes(_cur_menu)
+
+    # New index of selected node
+    _sel_node_i = _shown.index(sel_node)
+
+    # Try to make the cursor stay on the same row in the menu window. This
+    # might be impossible if too many nodes have disappeared above the node.
+    _menu_scroll = max(_sel_node_i - old_row, 0)
+
+
+def _input_dialog(title, initial_text, info_text=None):
+    # Pops up a dialog that prompts the user for a string
+    #
+    # title:
+    #   Title to display at the top of the dialog window's border
+    #
+    # initial_text:
+    #   Initial text to prefill the input field with
+    #
+    # info_text:
+    #   String to show next to the input field. If None, just the input field
+    #   is shown.
+
+    win = _styled_win("body")
+    win.keypad(True)
+
+    info_lines = info_text.split("\n") if info_text else []
+
+    # Give the input dialog its initial size
+    _resize_input_dialog(win, title, info_lines)
+
+    _safe_curs_set(2)
+
+    # Input field text
+    s = initial_text
+
+    # Cursor position
+    i = len(initial_text)
+
+    def edit_width():
+        return _width(win) - 4
+
+    # Horizontal scroll offset
+    hscroll = max(i - edit_width() + 1, 0)
+
+    while True:
+        # Draw the "main" display with the menu, etc., so that resizing still
+        # works properly. This is like a stack of windows, only hardcoded for
+        # now.
+        _draw_main()
+        _draw_input_dialog(win, title, info_lines, s, i, hscroll)
+        curses.doupdate()
+
+
+        c = _getch_compat(win)
+
+        if c == curses.KEY_RESIZE:
+            # Resize the main display too. The dialog floats above it.
+            _resize_main()
+            _resize_input_dialog(win, title, info_lines)
+
+        elif c == "\n":
+            _safe_curs_set(0)
+            return s
+
+        elif c == "\x1B":  # \x1B = ESC
+            _safe_curs_set(0)
+            return None
+
+        else:
+            s, i, hscroll = _edit_text(c, s, i, hscroll, edit_width())
+
+
+def _resize_input_dialog(win, title, info_lines):
+    # Resizes the input dialog to a size appropriate for the terminal size
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    win_height = 5
+    if info_lines:
+        win_height += len(info_lines) + 1
+    win_height = min(win_height, screen_height)
+
+    win_width = max(_INPUT_DIALOG_MIN_WIDTH,
+                    len(title) + 4,
+                    *(len(line) + 4 for line in info_lines))
+    win_width = min(win_width, screen_width)
+
+    win.resize(win_height, win_width)
+    win.mvwin((screen_height - win_height)//2,
+              (screen_width - win_width)//2)
+
+
+def _draw_input_dialog(win, title, info_lines, s, i, hscroll):
+    edit_width = _width(win) - 4
+
+    win.erase()
+
+    # Note: Perhaps having a separate window for the input field would be nicer
+    visible_s = s[hscroll:hscroll + edit_width]
+    _safe_addstr(win, 2, 2, visible_s + " "*(edit_width - len(visible_s)),
+                 _style["edit"])
+
+    for linenr, line in enumerate(info_lines):
+        _safe_addstr(win, 4 + linenr, 2, line)
+
+    # Draw the frame last so that it overwrites the body text for small windows
+    _draw_frame(win, title)
+
+    _safe_move(win, 2, 2 + i - hscroll)
+
+    win.noutrefresh()
+
+
+def _load_dialog():
+    # Dialog for loading a new configuration
+
+    global _conf_changed
+    global _conf_filename
+    global _show_all
+
+    if _conf_changed:
+        c = _key_dialog(
+            "Load",
+            "You have unsaved changes. Load new\n"
+            "configuration anyway?\n"
+            "\n"
+            "         (O)K  (C)ancel",
+            "oc")
+
+        if c is None or c == "c":
+            return
+
+    filename = _conf_filename
+    while True:
+        filename = _input_dialog("File to load", filename, _load_save_info())
+        if filename is None:
+            return
+
+        filename = os.path.expanduser(filename)
+
+        if _try_load(filename):
+            _conf_filename = filename
+            _conf_changed = _needs_save()
+
+            # Turn on show-all mode if the selected node is not visible after
+            # loading the new configuration. _shown still holds the old state.
+            if _shown[_sel_node_i] not in _shown_nodes(_cur_menu):
+                _show_all = True
+
+            _update_menu()
+
+            # The message dialog indirectly updates the menu display, so _msg()
+            # must be called after the new state has been initialized
+            _msg("Success", "Loaded " + filename)
+            return
+
+
+def _try_load(filename):
+    # Tries to load a configuration file. Pops up an error and returns False on
+    # failure.
+    #
+    # filename:
+    #   Configuration file to load
+
+    try:
+        _kconf.load_config(filename)
+        return True
+    except EnvironmentError as e:
+        _error("Error loading '{}'\n\n{} (errno: {})"
+               .format(filename, e.strerror, errno.errorcode[e.errno]))
+        return False
+
+
+def _save_dialog(save_fn, default_filename, description):
+    # Dialog for saving the current configuration
+    #
+    # save_fn:
+    #   Function to call with 'filename' to save the file
+    #
+    # default_filename:
+    #   Prefilled filename in the input field
+    #
+    # description:
+    #   String describing the thing being saved
+    #
+    # Return value:
+    #   The path to the saved file, or None if no file was saved
+
+    filename = default_filename
+    while True:
+        filename = _input_dialog("Filename to save {} to".format(description),
+                                 filename, _load_save_info())
+        if filename is None:
+            return None
+
+        filename = os.path.expanduser(filename)
+
+        msg = _try_save(save_fn, filename, description)
+        if msg:
+            _msg("Success", msg)
+            return filename
+
+
+def _try_save(save_fn, filename, description):
+    # Tries to save a configuration file. Returns a message to print on
+    # success.
+    #
+    # save_fn:
+    #   Function to call with 'filename' to save the file
+    #
+    # description:
+    #   String describing the thing being saved
+    #
+    # Return value:
+    #   A message to print on success, and None on failure
+
+    try:
+        # save_fn() returns a message to print
+        return save_fn(filename)
+    except EnvironmentError as e:
+        _error("Error saving {} to '{}'\n\n{} (errno: {})"
+               .format(description, e.filename, e.strerror,
+                       errno.errorcode[e.errno]))
+        return None
+
+
+def _key_dialog(title, text, keys):
+    # Pops up a dialog that can be closed by pressing a key
+    #
+    # title:
+    #   Title to display at the top of the dialog window's border
+    #
+    # text:
+    #   Text to show in the dialog
+    #
+    # keys:
+    #   List of keys that will close the dialog. Other keys (besides ESC) are
+    #   ignored. The caller is responsible for providing a hint about which
+    #   keys can be pressed in 'text'.
+    #
+    # Return value:
+    #   The key that was pressed to close the dialog. Uppercase characters are
+    #   converted to lowercase. ESC will always close the dialog, and returns
+    #   None.
+
+    win = _styled_win("body")
+    win.keypad(True)
+
+    _resize_key_dialog(win, text)
+
+    while True:
+        # See _input_dialog()
+        _draw_main()
+        _draw_key_dialog(win, title, text)
+        curses.doupdate()
+
+
+        c = _getch_compat(win)
+
+        if c == curses.KEY_RESIZE:
+            # Resize the main display too. The dialog floats above it.
+            _resize_main()
+            _resize_key_dialog(win, text)
+
+        elif c == "\x1B":  # \x1B = ESC
+            return None
+
+        elif isinstance(c, str):
+            c = c.lower()
+            if c in keys:
+                return c
+
+
+def _resize_key_dialog(win, text):
+    # Resizes the key dialog to a size appropriate for the terminal size
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    lines = text.split("\n")
+
+    win_height = min(len(lines) + 4, screen_height)
+    win_width = min(max(len(line) for line in lines) + 4, screen_width)
+
+    win.resize(win_height, win_width)
+    win.mvwin((screen_height - win_height)//2,
+              (screen_width - win_width)//2)
+
+
+def _draw_key_dialog(win, title, text):
+    win.erase()
+
+    for i, line in enumerate(text.split("\n")):
+        _safe_addstr(win, 2 + i, 2, line)
+
+    # Draw the frame last so that it overwrites the body text for small windows
+    _draw_frame(win, title)
+
+    win.noutrefresh()
+
+
+def _draw_frame(win, title):
+    # Draw a frame around the inner edges of 'win', with 'title' at the top
+
+    win_height, win_width = win.getmaxyx()
+
+    win.attron(_style["frame"])
+
+    # Draw top/bottom edge
+    _safe_hline(win,              0, 0, " ", win_width)
+    _safe_hline(win, win_height - 1, 0, " ", win_width)
+
+    # Draw left/right edge
+    _safe_vline(win, 0,             0, " ", win_height)
+    _safe_vline(win, 0, win_width - 1, " ", win_height)
+
+    # Draw title
+    _safe_addstr(win, 0, max((win_width - len(title))//2, 0), title)
+
+    win.attroff(_style["frame"])
+
+
+def _jump_to_dialog():
+    # Implements the jump-to dialog, where symbols can be looked up via
+    # incremental search and jumped to.
+    #
+    # Returns True if the user jumped to a symbol, and False if the dialog was
+    # canceled.
+
+    s = ""  # Search text
+    prev_s = None  # Previous search text
+    s_i = 0  # Search text cursor position
+    hscroll = 0  # Horizontal scroll offset
+
+    sel_node_i = 0  # Index of selected row
+    scroll = 0  # Index in 'matches' of the top row of the list
+
+    # Edit box at the top
+    edit_box = _styled_win("jump-edit")
+    edit_box.keypad(True)
+
+    # List of matches
+    matches_win = _styled_win("list")
+
+    # Bottom separator, with arrows pointing down
+    bot_sep_win = _styled_win("separator")
+
+    # Help window with instructions at the bottom
+    help_win = _styled_win("help")
+
+    # Give windows their initial size
+    _resize_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                           sel_node_i, scroll)
+
+    _safe_curs_set(2)
+
+    # Logic duplication with _select_{next,prev}_menu_entry(), except we do a
+    # functional variant that returns the new (sel_node_i, scroll) values to
+    # avoid 'nonlocal'. TODO: Can this be factored out in some nice way?
+
+    def select_next_match():
+        if sel_node_i == len(matches) - 1:
+            return sel_node_i, scroll
+
+        if sel_node_i + 1 >= scroll + _height(matches_win) - _SCROLL_OFFSET \
+           and scroll < _max_scroll(matches, matches_win):
+
+            return sel_node_i + 1, scroll + 1
+
+        return sel_node_i + 1, scroll
+
+    def select_prev_match():
+        if sel_node_i == 0:
+            return sel_node_i, scroll
+
+        if sel_node_i - 1 < scroll + _SCROLL_OFFSET:
+            return sel_node_i - 1, max(scroll - 1, 0)
+
+        return sel_node_i - 1, scroll
+
+    while True:
+        if s != prev_s:
+            # The search text changed. Find new matching nodes.
+
+            prev_s = s
+
+            try:
+                # We could use re.IGNORECASE here instead of lower(), but this
+                # is noticeably less jerky while inputting regexes like
+                # '.*debug$' (though the '.*' is redundant there). Those
+                # probably have bad interactions with re.search(), which
+                # matches anywhere in the string.
+                #
+                # It's not horrible either way. Just a bit smoother.
+                regex_searches = [re.compile(regex).search
+                                  for regex in s.lower().split()]
+
+                # No exception thrown, so the regexes are okay
+                bad_re = None
+
+                # List of matching nodes
+                matches = []
+                add_match = matches.append
+
+                # Search symbols and choices
+
+                for node in _sorted_sc_nodes():
+                    # Symbol/choice
+                    sc = node.item
+
+                    for search in regex_searches:
+                        # Both the name and the prompt might be missing, since
+                        # we're searching both symbols and choices
+
+                        # Does the regex match either the symbol name or the
+                        # prompt (if any)?
+                        if not (sc.name and search(sc.name.lower()) or
+                                node.prompt and search(node.prompt[0].lower())):
+
+                            # Give up on the first regex that doesn't match, to
+                            # speed things up a bit when multiple regexes are
+                            # entered
+                            break
+
+                    else:
+                        add_match(node)
+
+                # Search menus and comments
+
+                for node in _sorted_menu_comment_nodes():
+                    for search in regex_searches:
+                        if not search(node.prompt[0].lower()):
+                            break
+                    else:
+                        add_match(node)
+
+            except re.error as e:
+                # Bad regex. Remember the error message so we can show it.
+                bad_re = "Bad regular expression"
+                # re.error.msg was added in Python 3.5
+                if hasattr(e, "msg"):
+                    bad_re += ": " + e.msg
+
+                matches = []
+
+            # Reset scroll and jump to the top of the list of matches
+            sel_node_i = scroll = 0
+
+        _draw_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                             s, s_i, hscroll,
+                             bad_re, matches, sel_node_i, scroll)
+        curses.doupdate()
+
+
+        c = _getch_compat(edit_box)
+
+        if c == "\n":
+            if matches:
+                _jump_to(matches[sel_node_i])
+                _safe_curs_set(0)
+                return True
+
+        elif c == "\x1B":  # \x1B = ESC
+            _safe_curs_set(0)
+            return False
+
+        elif c == curses.KEY_RESIZE:
+            # We adjust the scroll so that the selected node stays visible in
+            # the list when the terminal is resized, hence the 'scroll'
+            # assignment
+            scroll = _resize_jump_to_dialog(
+                edit_box, matches_win, bot_sep_win, help_win,
+                sel_node_i, scroll)
+
+        elif c == "\x06":  # \x06 = Ctrl-F
+            if matches:
+                _safe_curs_set(0)
+                _info_dialog(matches[sel_node_i], True)
+                _safe_curs_set(2)
+
+                scroll = _resize_jump_to_dialog(
+                    edit_box, matches_win, bot_sep_win, help_win,
+                    sel_node_i, scroll)
+
+        elif c == curses.KEY_DOWN:
+            sel_node_i, scroll = select_next_match()
+
+        elif c == curses.KEY_UP:
+            sel_node_i, scroll = select_prev_match()
+
+        elif c in (curses.KEY_NPAGE, "\x04"):  # Page Down/Ctrl-D
+            # Keep it simple. This way we get sane behavior for small windows,
+            # etc., for free.
+            for _ in range(_PG_JUMP):
+                sel_node_i, scroll = select_next_match()
+
+        # Page Up (no Ctrl-U, as it's already used by the edit box)
+        elif c == curses.KEY_PPAGE:
+            for _ in range(_PG_JUMP):
+                sel_node_i, scroll = select_prev_match()
+
+        elif c == curses.KEY_END:
+            sel_node_i = len(matches) - 1
+            scroll = _max_scroll(matches, matches_win)
+
+        elif c == curses.KEY_HOME:
+            sel_node_i = scroll = 0
+
+        else:
+            s, s_i, hscroll = _edit_text(c, s, s_i, hscroll,
+                                         _width(edit_box) - 2)
+
+
+# Obscure Python: We never pass a value for cached_nodes, and it keeps pointing
+# to the same list. This avoids a global.
+def _sorted_sc_nodes(cached_nodes=[]):
+    # Returns a sorted list of symbol and choice nodes to search. The symbol
+    # nodes appear first, sorted by name, and then the choice nodes, sorted by
+    # prompt and (secondarily) name.
+
+    if not cached_nodes:
+        # Add symbol nodes
+        for sym in sorted(_kconf.unique_defined_syms,
+                          key=lambda sym: sym.name):
+            # += is in-place for lists
+            cached_nodes += sym.nodes
+
+        # Add choice nodes
+
+        choices = sorted(_kconf.unique_choices,
+                         key=lambda choice: choice.name or "")
+
+        cached_nodes += sorted(
+            [node
+             for choice in choices
+                 for node in choice.nodes],
+            key=lambda node: node.prompt[0] if node.prompt else "")
+
+    return cached_nodes
+
+
+def _sorted_menu_comment_nodes(cached_nodes=[]):
+    # Returns a list of menu and comment nodes to search, sorted by prompt,
+    # with the menus first
+
+    if not cached_nodes:
+        def prompt_text(mc):
+            return mc.prompt[0]
+
+        cached_nodes += sorted(_kconf.menus, key=prompt_text)
+        cached_nodes += sorted(_kconf.comments, key=prompt_text)
+
+    return cached_nodes
+
+
+def _resize_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                           sel_node_i, scroll):
+    # Resizes the jump-to dialog to fill the terminal.
+    #
+    # Returns the new scroll index. We adjust the scroll if needed so that the
+    # selected node stays visible.
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    bot_sep_win.resize(1, screen_width)
+
+    help_win_height = len(_JUMP_TO_HELP_LINES)
+    matches_win_height = screen_height - help_win_height - 4
+
+    if matches_win_height >= 1:
+        edit_box.resize(3, screen_width)
+        matches_win.resize(matches_win_height, screen_width)
+        help_win.resize(help_win_height, screen_width)
+
+        matches_win.mvwin(3, 0)
+        bot_sep_win.mvwin(3 + matches_win_height, 0)
+        help_win.mvwin(3 + matches_win_height + 1, 0)
+    else:
+        # Degenerate case. Give up on nice rendering and just prevent errors.
+
+        matches_win_height = 1
+
+        edit_box.resize(screen_height, screen_width)
+        matches_win.resize(1, screen_width)
+        help_win.resize(1, screen_width)
+
+        for win in matches_win, bot_sep_win, help_win:
+            win.mvwin(0, 0)
+
+    # Adjust the scroll so that the selected row is still within the window, if
+    # needed
+    if sel_node_i - scroll >= matches_win_height:
+        return sel_node_i - matches_win_height + 1
+    return scroll
+
+
+def _draw_jump_to_dialog(edit_box, matches_win, bot_sep_win, help_win,
+                         s, s_i, hscroll,
+                         bad_re, matches, sel_node_i, scroll):
+
+    edit_width = _width(edit_box) - 2
+
+
+    #
+    # Update list of matches
+    #
+
+    matches_win.erase()
+
+    if matches:
+        for i in range(scroll,
+                       min(scroll + _height(matches_win), len(matches))):
+
+            node = matches[i]
+
+            if isinstance(node.item, (Symbol, Choice)):
+                node_str = _name_and_val_str(node.item)
+                if node.prompt:
+                    node_str += ' "{}"'.format(node.prompt[0])
+            elif node.item == MENU:
+                node_str = 'menu "{}"'.format(node.prompt[0])
+            else:  # node.item == COMMENT
+                node_str = 'comment "{}"'.format(node.prompt[0])
+
+            _safe_addstr(matches_win, i - scroll, 0, node_str,
+                         _style["selection" if i == sel_node_i else "list"])
+
+    else:
+        # bad_re holds the error message from the re.error exception on errors
+        _safe_addstr(matches_win, 0, 0, bad_re or "No matches")
+
+    matches_win.noutrefresh()
+
+
+    #
+    # Update bottom separator line
+    #
+
+    bot_sep_win.erase()
+
+    # Draw arrows pointing down if the symbol list is scrolled up
+    if scroll < _max_scroll(matches, matches_win):
+        _safe_hline(bot_sep_win, 0, 4, curses.ACS_DARROW, _N_SCROLL_ARROWS)
+
+    bot_sep_win.noutrefresh()
+
+
+    #
+    # Update help window at bottom
+    #
+
+    help_win.erase()
+
+    for i, line in enumerate(_JUMP_TO_HELP_LINES):
+        _safe_addstr(help_win, i, 0, line)
+
+    help_win.noutrefresh()
+
+
+    #
+    # Update edit box. We do this last since it makes it handy to position the
+    # cursor.
+    #
+
+    edit_box.erase()
+
+    _draw_frame(edit_box, "Jump to symbol/choice/menu/comment")
+
+    # Draw arrows pointing up if the symbol list is scrolled down
+    if scroll > 0:
+        # TODO: Bit ugly that _style["frame"] is repeated here
+        _safe_hline(edit_box, 2, 4, curses.ACS_UARROW, _N_SCROLL_ARROWS,
+                    _style["frame"])
+
+    visible_s = s[hscroll:hscroll + edit_width]
+    _safe_addstr(edit_box, 1, 1, visible_s)
+
+    _safe_move(edit_box, 1, 1 + s_i - hscroll)
+
+    edit_box.noutrefresh()
+
+
+def _info_dialog(node, from_jump_to_dialog):
+    # Shows a fullscreen window with information about 'node'.
+    #
+    # If 'from_jump_to_dialog' is True, the information dialog was opened from
+    # within the jump-to-dialog. In this case, we make '/' from within the
+    # information dialog just return, to avoid a confusing recursive invocation
+    # of the jump-to-dialog.
+
+    # Top row, with title and arrows point up
+    top_line_win = _styled_win("separator")
+
+    # Text display
+    text_win = _styled_win("text")
+    text_win.keypad(True)
+
+    # Bottom separator, with arrows pointing down
+    bot_sep_win = _styled_win("separator")
+
+    # Help window with keys at the bottom
+    help_win = _styled_win("help")
+
+    # Give windows their initial size
+    _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win)
+
+
+    # Get lines of help text
+    lines = _info_str(node).split("\n")
+
+    # Index of first row in 'lines' to show
+    scroll = 0
+
+    while True:
+        _draw_info_dialog(node, lines, scroll, top_line_win, text_win,
+                          bot_sep_win, help_win)
+        curses.doupdate()
+
+
+        c = _getch_compat(text_win)
+
+        if c == curses.KEY_RESIZE:
+            _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win)
+
+        elif c in (curses.KEY_DOWN, "j", "J"):
+            if scroll < _max_scroll(lines, text_win):
+                scroll += 1
+
+        elif c in (curses.KEY_NPAGE, "\x04"):  # Page Down/Ctrl-D
+            scroll = min(scroll + _PG_JUMP, _max_scroll(lines, text_win))
+
+        elif c in (curses.KEY_PPAGE, "\x15"):  # Page Up/Ctrl-U
+            scroll = max(scroll - _PG_JUMP, 0)
+
+        elif c in (curses.KEY_END, "G"):
+            scroll = _max_scroll(lines, text_win)
+
+        elif c in (curses.KEY_HOME, "g"):
+            scroll = 0
+
+        elif c in (curses.KEY_UP, "k", "K"):
+            if scroll > 0:
+                scroll -= 1
+
+        elif c == "/":
+            # Support starting a search from within the information dialog
+
+            if from_jump_to_dialog:
+                # Avoid recursion
+                return
+
+            if _jump_to_dialog():
+                # Jumped to a symbol. Cancel the information dialog.
+                return
+
+            # Stay in the information dialog if the jump-to dialog was
+            # canceled. Resize it in case the terminal was resized while the
+            # fullscreen jump-to dialog was open.
+            _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win)
+
+        elif c in (curses.KEY_LEFT, curses.KEY_BACKSPACE, _ERASE_CHAR,
+                   "\x1B",  # \x1B = ESC
+                   "q", "Q", "h", "H"):
+
+            return
+
+
+def _resize_info_dialog(top_line_win, text_win, bot_sep_win, help_win):
+    # Resizes the info dialog to fill the terminal
+
+    screen_height, screen_width = _stdscr.getmaxyx()
+
+    top_line_win.resize(1, screen_width)
+    bot_sep_win.resize(1, screen_width)
+
+    help_win_height = len(_INFO_HELP_LINES)
+    text_win_height = screen_height - help_win_height - 2
+
+    if text_win_height >= 1:
+        text_win.resize(text_win_height, screen_width)
+        help_win.resize(help_win_height, screen_width)
+
+        text_win.mvwin(1, 0)
+        bot_sep_win.mvwin(1 + text_win_height, 0)
+        help_win.mvwin(1 + text_win_height + 1, 0)
+    else:
+        # Degenerate case. Give up on nice rendering and just prevent errors.
+
+        text_win.resize(1, screen_width)
+        help_win.resize(1, screen_width)
+
+        for win in text_win, bot_sep_win, help_win:
+            win.mvwin(0, 0)
+
+
+def _draw_info_dialog(node, lines, scroll, top_line_win, text_win,
+                      bot_sep_win, help_win):
+
+    text_win_height, text_win_width = text_win.getmaxyx()
+
+
+    # Note: The top row is deliberately updated last. See _draw_main().
+
+    #
+    # Update text display
+    #
+
+    text_win.erase()
+
+    for i, line in enumerate(lines[scroll:scroll + text_win_height]):
+        _safe_addstr(text_win, i, 0, line)
+
+    text_win.noutrefresh()
+
+
+    #
+    # Update bottom separator line
+    #
+
+    bot_sep_win.erase()
+
+    # Draw arrows pointing down if the symbol window is scrolled up
+    if scroll < _max_scroll(lines, text_win):
+        _safe_hline(bot_sep_win, 0, 4, curses.ACS_DARROW, _N_SCROLL_ARROWS)
+
+    bot_sep_win.noutrefresh()
+
+
+    #
+    # Update help window at bottom
+    #
+
+    help_win.erase()
+
+    for i, line in enumerate(_INFO_HELP_LINES):
+        _safe_addstr(help_win, i, 0, line)
+
+    help_win.noutrefresh()
+
+
+    #
+    # Update top row
+    #
+
+    top_line_win.erase()
+
+    # Draw arrows pointing up if the information window is scrolled down. Draw
+    # them before drawing the title, so the title ends up on top for small
+    # windows.
+    if scroll > 0:
+        _safe_hline(top_line_win, 0, 4, curses.ACS_UARROW, _N_SCROLL_ARROWS)
+
+    title = ("Symbol" if isinstance(node.item, Symbol) else
+             "Choice" if isinstance(node.item, Choice) else
+             "Menu"   if node.item == MENU else
+             "Comment") + " information"
+    _safe_addstr(top_line_win, 0, max((text_win_width - len(title))//2, 0),
+                 title)
+
+    top_line_win.noutrefresh()
+
+
+def _info_str(node):
+    # Returns information about the menu node 'node' as a string.
+    #
+    # The helper functions are responsible for adding newlines. This allows
+    # them to return "" if they don't want to add any output.
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+
+        return (
+            _name_info(sym) +
+            _prompt_info(sym) +
+            "Type: {}\n".format(TYPE_TO_STR[sym.type]) +
+            _value_info(sym) +
+            _help_info(sym) +
+            _direct_dep_info(sym) +
+            _defaults_info(sym) +
+            _select_imply_info(sym) +
+            _kconfig_def_info(sym)
+        )
+
+    if isinstance(node.item, Choice):
+        choice = node.item
+
+        return (
+            _name_info(choice) +
+            _prompt_info(choice) +
+            "Type: {}\n".format(TYPE_TO_STR[choice.type]) +
+            'Mode: {}\n'.format(choice.str_value) +
+            _help_info(choice) +
+            _choice_syms_info(choice) +
+            _direct_dep_info(choice) +
+            _defaults_info(choice) +
+            _kconfig_def_info(choice)
+        )
+
+    # node.item in (MENU, COMMENT)
+    return _kconfig_def_info(node)
+
+
+def _name_info(sc):
+    # Returns a string with the name of the symbol/choice. Names are optional
+    # for choices.
+
+    return "Name: {}\n".format(sc.name) if sc.name else ""
+
+
+def _prompt_info(sc):
+    # Returns a string listing the prompts of 'sc' (Symbol or Choice)
+
+    s = ""
+
+    for node in sc.nodes:
+        if node.prompt:
+            s += "Prompt: {}\n".format(node.prompt[0])
+
+    return s
+
+
+def _value_info(sym):
+    # Returns a string showing 'sym's value
+
+    # Only put quotes around the value for string symbols
+    return "Value: {}\n".format(
+        '"{}"'.format(sym.str_value)
+        if sym.orig_type == STRING
+        else sym.str_value)
+
+
+def _choice_syms_info(choice):
+    # Returns a string listing the choice symbols in 'choice'. Adds
+    # "(selected)" next to the selected one.
+
+    s = "Choice symbols:\n"
+
+    for sym in choice.syms:
+        s += "  - " + sym.name
+        if sym is choice.selection:
+            s += " (selected)"
+        s += "\n"
+
+    return s + "\n"
+
+
+def _help_info(sc):
+    # Returns a string with the help text(s) of 'sc' (Symbol or Choice).
+    # Symbols and choices defined in multiple locations can have multiple help
+    # texts.
+
+    s = "\n"
+
+    for node in sc.nodes:
+        if node.help is not None:
+            s += "Help:\n\n{}\n\n".format(_indent(node.help, 2))
+
+    return s
+
+
+def _direct_dep_info(sc):
+    # Returns a string describing the direct dependencies of 'sc' (Symbol or
+    # Choice). The direct dependencies are the OR of the dependencies from each
+    # definition location. The dependencies at each definition location come
+    # from 'depends on' and dependencies inherited from parent items.
+
+    return "" if sc.direct_dep is _kconf.y else \
+        'Direct dependencies (={}):\n{}\n' \
+        .format(TRI_TO_STR[expr_value(sc.direct_dep)],
+                _split_expr_info(sc.direct_dep, 2))
+
+
+def _defaults_info(sc):
+    # Returns a string describing the defaults of 'sc' (Symbol or Choice)
+
+    if not sc.defaults:
+        return ""
+
+    s = "Default"
+    if len(sc.defaults) > 1:
+        s += "s"
+    s += ":\n"
+
+    for val, cond in sc.orig_defaults:
+        s += "  - "
+        if isinstance(sc, Symbol):
+            s += _expr_str(val)
+
+            # Skip the tristate value hint if the expression is just a single
+            # symbol. _expr_str() already shows its value as a string.
+            #
+            # This also avoids showing the tristate value for string/int/hex
+            # defaults, which wouldn't make any sense.
+            if isinstance(val, tuple):
+                s += '  (={})'.format(TRI_TO_STR[expr_value(val)])
+        else:
+            # Don't print the value next to the symbol name for choice
+            # defaults, as it looks a bit confusing
+            s += val.name
+        s += "\n"
+
+        if cond is not _kconf.y:
+            s += "    Condition (={}):\n{}" \
+                 .format(TRI_TO_STR[expr_value(cond)],
+                         _split_expr_info(cond, 4))
+
+    return s + "\n"
+
+
+def _split_expr_info(expr, indent):
+    # Returns a string with 'expr' split into its top-level && or || operands,
+    # with one operand per line, together with the operand's value. This is
+    # usually enough to get something readable for long expressions. A fancier
+    # recursive thingy would be possible too.
+    #
+    # indent:
+    #   Number of leading spaces to add before the split expression.
+
+    if len(split_expr(expr, AND)) > 1:
+        split_op = AND
+        op_str = "&&"
+    else:
+        split_op = OR
+        op_str = "||"
+
+    s = ""
+    for i, term in enumerate(split_expr(expr, split_op)):
+        s += "{}{} {}".format(indent*" ",
+                              "  " if i == 0 else op_str,
+                              _expr_str(term))
+
+        # Don't bother showing the value hint if the expression is just a
+        # single symbol. _expr_str() already shows its value.
+        if isinstance(term, tuple):
+            s += "  (={})".format(TRI_TO_STR[expr_value(term)])
+
+        s += "\n"
+
+    return s
+
+
+def _select_imply_info(sym):
+    # Returns a string with information about which symbols 'select' or 'imply'
+    # 'sym'. The selecting/implying symbols are grouped according to which
+    # value they select/imply 'sym' to (n/m/y).
+
+    def sis(expr, val, title):
+        # sis = selects/implies
+        sis = [si for si in split_expr(expr, OR) if expr_value(si) == val]
+        if not sis:
+            return ""
+
+        res = title
+        for si in sis:
+            res += "  - {}\n".format(split_expr(si, AND)[0].name)
+        return res + "\n"
+
+    s = ""
+
+    if sym.rev_dep is not _kconf.n:
+        s += sis(sym.rev_dep, 2,
+                 "Symbols currently y-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 1,
+                 "Symbols currently m-selecting this symbol:\n")
+        s += sis(sym.rev_dep, 0,
+                 "Symbols currently n-selecting this symbol (no effect):\n")
+
+    if sym.weak_rev_dep is not _kconf.n:
+        s += sis(sym.weak_rev_dep, 2,
+                 "Symbols currently y-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 1,
+                 "Symbols currently m-implying this symbol:\n")
+        s += sis(sym.weak_rev_dep, 0,
+                 "Symbols currently n-implying this symbol (no effect):\n")
+
+    return s
+
+
+def _kconfig_def_info(item):
+    # Returns a string with the definition of 'item' in Kconfig syntax,
+    # together with the definition location(s) and their include and menu paths
+
+    nodes = [item] if isinstance(item, MenuNode) else item.nodes
+
+    s = "Kconfig definition{}, with parent deps. propagated to 'depends on'\n" \
+        .format("s" if len(nodes) > 1 else "")
+    s += (len(s) - 1)*"="
+
+    for node in nodes:
+        s += "\n\n" \
+             "At {}:{}\n" \
+             "{}" \
+             "Menu path: {}\n\n" \
+             "{}" \
+             .format(node.filename, node.linenr,
+                     _include_path_info(node),
+                     _menu_path_info(node),
+                     _indent(node.custom_str(_name_and_val_str), 2))
+
+    return s
+
+
+def _include_path_info(node):
+    if not node.include_path:
+        # In the top-level Kconfig file
+        return ""
+
+    return "Included via {}\n".format(
+        " -> ".join("{}:{}".format(filename, linenr)
+                    for filename, linenr in node.include_path))
+
+
+def _menu_path_info(node):
+    # Returns a string describing the menu path leading up to 'node'
+
+    path = ""
+
+    while node.parent is not _kconf.top_node:
+        node = node.parent
+
+        # Promptless choices might appear among the parents. Use
+        # standard_sc_expr_str() for them, so that they show up as
+        # '<choice (name if any)>'.
+        path = " -> " + (node.prompt[0] if node.prompt else
+                         standard_sc_expr_str(node.item)) + path
+
+    return "(Top)" + path
+
+
+def _indent(s, n):
+    # Returns 's' with each line indented 'n' spaces. textwrap.indent() is not
+    # available in Python 2 (it's 3.3+).
+
+    return "\n".join(n*" " + line for line in s.split("\n"))
+
+
+def _name_and_val_str(sc):
+    # Custom symbol/choice printer that shows symbol values after symbols
+
+    # Show the values of non-constant (non-quoted) symbols that don't look like
+    # numbers. Things like 123 are actually symbol references, and only work as
+    # expected due to undefined symbols getting their name as their value.
+    # Showing the symbol value for those isn't helpful though.
+    if isinstance(sc, Symbol) and not sc.is_constant and not _is_num(sc.name):
+        if not sc.nodes:
+            # Undefined symbol reference
+            return "{}(undefined/n)".format(sc.name)
+
+        return '{}(={})'.format(sc.name, sc.str_value)
+
+    # For other items, use the standard format
+    return standard_sc_expr_str(sc)
+
+
+def _expr_str(expr):
+    # Custom expression printer that shows symbol values
+    return expr_str(expr, _name_and_val_str)
+
+
+def _styled_win(style):
+    # Returns a new curses window with style 'style' and space as the fill
+    # character. The initial dimensions are (1, 1), so the window needs to be
+    # sized and positioned separately.
+
+    win = curses.newwin(1, 1)
+    _set_style(win, style)
+    return win
+
+
+def _set_style(win, style):
+    # Changes the style of an existing window
+
+    win.bkgdset(" ", _style[style])
+
+
+def _max_scroll(lst, win):
+    # Assuming 'lst' is a list of items to be displayed in 'win',
+    # returns the maximum number of steps 'win' can be scrolled down.
+    # We stop scrolling when the bottom item is visible.
+
+    return max(0, len(lst) - _height(win))
+
+
+def _edit_text(c, s, i, hscroll, width):
+    # Implements text editing commands for edit boxes. Takes a character (which
+    # could also be e.g. curses.KEY_LEFT) and the edit box state, and returns
+    # the new state after the character has been processed.
+    #
+    # c:
+    #   Character from user
+    #
+    # s:
+    #   Current contents of string
+    #
+    # i:
+    #   Current cursor index in string
+    #
+    # hscroll:
+    #   Index in s of the leftmost character in the edit box, for horizontal
+    #   scrolling
+    #
+    # width:
+    #   Width in characters of the edit box
+    #
+    # Return value:
+    #   An (s, i, hscroll) tuple for the new state
+
+    if c == curses.KEY_LEFT:
+        if i > 0:
+            i -= 1
+
+    elif c == curses.KEY_RIGHT:
+        if i < len(s):
+            i += 1
+
+    elif c in (curses.KEY_HOME, "\x01"):  # \x01 = CTRL-A
+        i = 0
+
+    elif c in (curses.KEY_END, "\x05"):  # \x05 = CTRL-E
+        i = len(s)
+
+    elif c in (curses.KEY_BACKSPACE, _ERASE_CHAR):
+        if i > 0:
+            s = s[:i-1] + s[i:]
+            i -= 1
+
+    elif c == curses.KEY_DC:
+        s = s[:i] + s[i+1:]
+
+    elif c == "\x17":  # \x17 = CTRL-W
+        # The \W removes characters like ',' one at a time
+        new_i = re.search(r"(?:\w*|\W)\s*$", s[:i]).start()
+        s = s[:new_i] + s[i:]
+        i = new_i
+
+    elif c == "\x0B":  # \x0B = CTRL-K
+        s = s[:i]
+
+    elif c == "\x15":  # \x15 = CTRL-U
+        s = s[i:]
+        i = 0
+
+    elif isinstance(c, str):
+        # Insert character
+        s = s[:i] + c + s[i:]
+        i += 1
+
+    # Adjust the horizontal scroll so that the cursor never touches the left or
+    # right edges of the edit box, except when it's at the beginning or the end
+    # of the string
+    if i < hscroll + _SCROLL_OFFSET:
+        hscroll = max(i - _SCROLL_OFFSET, 0)
+    elif i >= hscroll + width - _SCROLL_OFFSET:
+        max_scroll = max(len(s) - width + 1, 0)
+        hscroll = min(i - width + _SCROLL_OFFSET + 1, max_scroll)
+
+
+    return s, i, hscroll
+
+
+def _load_save_info():
+    # Returns an information string for load/save dialog boxes
+
+    return "(Relative to {})\n\nRefer to your home directory with ~" \
+           .format(os.path.join(os.getcwd(), ""))
+
+
+def _msg(title, text):
+    # Pops up a message dialog that can be dismissed with Space/Enter/ESC
+
+    _key_dialog(title, text, " \n")
+
+
+def _error(text):
+    # Pops up an error dialog that can be dismissed with Space/Enter/ESC
+
+    _msg("Error", text)
+
+
+def _node_str(node):
+    # Returns the complete menu entry text for a menu node.
+    #
+    # Example return value: "[*] Support for X"
+
+    # Calculate the indent to print the item with by checking how many levels
+    # above it the closest 'menuconfig' item is (this includes menus and
+    # choices as well as menuconfig symbols)
+    indent = 0
+    parent = node.parent
+    while not parent.is_menuconfig:
+        indent += _SUBMENU_INDENT
+        parent = parent.parent
+
+    # This approach gives nice alignment for empty string symbols ("()  Foo")
+    s = "{:{}}".format(_value_str(node), 3 + indent)
+
+    if _should_show_name(node):
+        if isinstance(node.item, Symbol):
+            s += " <{}>".format(node.item.name)
+        else:
+            # For choices, use standard_sc_expr_str(). That way they show up as
+            # '<choice (name if any)>'.
+            s += " " + standard_sc_expr_str(node.item)
+
+    if node.prompt:
+        if node.item == COMMENT:
+            s += " *** {} ***".format(node.prompt[0])
+        else:
+            s += " " + node.prompt[0]
+
+        if isinstance(node.item, Symbol):
+            sym = node.item
+
+            # Print "(NEW)" next to symbols without a user value (from e.g. a
+            # .config), but skip it for choice symbols in choices in y mode,
+            # and for symbols of UNKNOWN type (which generate a warning though)
+            if sym.user_value is None and sym.orig_type and \
+               not (sym.choice and sym.choice.tri_value == 2):
+
+                s += " (NEW)"
+
+    if isinstance(node.item, Choice) and node.item.tri_value == 2:
+        # Print the prompt of the selected symbol after the choice for
+        # choices in y mode
+        sym = node.item.selection
+        if sym:
+            for sym_node in sym.nodes:
+                # Use the prompt used at this choice location, in case the
+                # choice symbol is defined in multiple locations
+                if sym_node.parent is node and sym_node.prompt:
+                    s += " ({})".format(sym_node.prompt[0])
+                    break
+            else:
+                # If the symbol isn't defined at this choice location, then
+                # just use whatever prompt we can find for it
+                for sym_node in sym.nodes:
+                    if sym_node.prompt:
+                        s += " ({})".format(sym_node.prompt[0])
+                        break
+
+    # Print "--->" next to nodes that have menus that can potentially be
+    # entered. Print "----" if the menu is empty. We don't allow those to be
+    # entered.
+    if node.is_menuconfig:
+        s += "  --->" if _shown_nodes(node) else "  ----"
+
+    return s
+
+
+def _should_show_name(node):
+    # Returns True if 'node' is a symbol or choice whose name should shown (if
+    # any, as names are optional for choices)
+
+    # The 'not node.prompt' case only hits in show-all mode, for promptless
+    # symbols and choices
+    return not node.prompt or \
+           (_show_name and isinstance(node.item, (Symbol, Choice)))
+
+
+def _value_str(node):
+    # Returns the value part ("[*]", "<M>", "(foo)" etc.) of a menu node
+
+    item = node.item
+
+    if item in (MENU, COMMENT):
+        return ""
+
+    # Wouldn't normally happen, and generates a warning
+    if not item.orig_type:
+        return ""
+
+    if item.orig_type in (STRING, INT, HEX):
+        return "({})".format(item.str_value)
+
+    # BOOL or TRISTATE
+
+    if _is_y_mode_choice_sym(item):
+        return "(X)" if item.choice.selection is item else "( )"
+
+    tri_val_str = (" ", "M", "*")[item.tri_value]
+
+    if len(item.assignable) <= 1:
+        # Pinned to a single value
+        return "" if isinstance(item, Choice) else "-{}-".format(tri_val_str)
+
+    if item.type == BOOL:
+        return "[{}]".format(tri_val_str)
+
+    # item.type == TRISTATE
+    if item.assignable == (1, 2):
+        return "{{{}}}".format(tri_val_str)  # {M}/{*}
+    return "<{}>".format(tri_val_str)
+
+
+def _is_y_mode_choice_sym(item):
+    # The choice mode is an upper bound on the visibility of choice symbols, so
+    # we can check the choice symbols' own visibility to see if the choice is
+    # in y mode
+    return isinstance(item, Symbol) and item.choice and item.visibility == 2
+
+
+def _check_valid(sym, s):
+    # Returns True if the string 's' is a well-formed value for 'sym'.
+    # Otherwise, displays an error and returns False.
+
+    if sym.orig_type not in (INT, HEX):
+        # Anything goes for non-int/hex symbols
+        return True
+
+    base = 10 if sym.orig_type == INT else 16
+    try:
+        int(s, base)
+    except ValueError:
+        _error("'{}' is a malformed {} value"
+               .format(s, TYPE_TO_STR[sym.orig_type]))
+        return False
+
+    for low_sym, high_sym, cond in sym.ranges:
+        if expr_value(cond):
+            low_s = low_sym.str_value
+            high_s = high_sym.str_value
+
+            if not int(low_s, base) <= int(s, base) <= int(high_s, base):
+                _error("{} is outside the range {}-{}"
+                       .format(s, low_s, high_s))
+                return False
+
+            break
+
+    return True
+
+
+def _range_info(sym):
+    # Returns a string with information about the valid range for the symbol
+    # 'sym', or None if 'sym' doesn't have a range
+
+    if sym.orig_type in (INT, HEX):
+        for low, high, cond in sym.ranges:
+            if expr_value(cond):
+                return "Range: {}-{}".format(low.str_value, high.str_value)
+
+    return None
+
+
+def _is_num(name):
+    # Heuristic to see if a symbol name looks like a number, for nicer output
+    # when printing expressions. Things like 16 are actually symbol names, only
+    # they get their name as their value when the symbol is undefined.
+
+    try:
+        int(name)
+    except ValueError:
+        if not name.startswith(("0x", "0X")):
+            return False
+
+        try:
+            int(name, 16)
+        except ValueError:
+            return False
+
+    return True
+
+
+def _getch_compat(win):
+    # Uses get_wch() if available (Python 3.3+) and getch() otherwise. Also
+    # handles a PDCurses resizing quirk.
+
+    if hasattr(win, "get_wch"):
+        c = win.get_wch()
+    else:
+        c = win.getch()
+        if 0 <= c <= 255:
+            c = chr(c)
+
+    # Decent resizing behavior on PDCurses requires calling resize_term(0, 0)
+    # after receiving KEY_RESIZE, while ncurses (usually) handles terminal
+    # resizing automatically in get(_w)ch() (see the end of the
+    # resizeterm(3NCURSES) man page).
+    #
+    # resize_term(0, 0) reliably fails and does nothing on ncurses, so this
+    # hack gives ncurses/PDCurses compatibility for resizing. I don't know
+    # whether it would cause trouble for other implementations.
+    if c == curses.KEY_RESIZE:
+        try:
+            curses.resize_term(0, 0)
+        except curses.error:
+            pass
+
+    return c
+
+
+def _warn(*args):
+    # Temporarily returns from curses to shell mode and prints a warning to
+    # stderr. The warning would get lost in curses mode.
+    curses.endwin()
+    print("menuconfig warning: ", end="", file=sys.stderr)
+    print(*args, file=sys.stderr)
+    curses.doupdate()
+
+
+# Ignore exceptions from some functions that might fail, e.g. for small
+# windows. They usually do reasonable things anyway.
+
+
+def _safe_curs_set(visibility):
+    try:
+        curses.curs_set(visibility)
+    except curses.error:
+        pass
+
+
+def _safe_addstr(win, *args):
+    # Clip the line to avoid wrapping to the next line, which looks glitchy.
+    # addchstr() would do it for us, but it's not available in the 'curses'
+    # module.
+
+    attr = None
+    if isinstance(args[0], str):
+        y, x = win.getyx()
+        s = args[0]
+        if len(args) == 2:
+            attr = args[1]
+    else:
+        y, x, s = args[:3]
+        if len(args) == 4:
+            attr = args[3]
+
+    maxlen = _width(win) - x
+    s = s.expandtabs()
+
+    try:
+        # The 'curses' module uses wattr_set() internally if you pass 'attr',
+        # overwriting the background style, so setting 'attr' to 0 in the first
+        # case won't do the right thing
+        if attr is None:
+            win.addnstr(y, x, s, maxlen)
+        else:
+            win.addnstr(y, x, s, maxlen, attr)
+    except curses.error:
+        pass
+
+
+def _safe_addch(win, *args):
+    try:
+        win.addch(*args)
+    except curses.error:
+        pass
+
+
+def _safe_hline(win, *args):
+    try:
+        win.hline(*args)
+    except curses.error:
+        pass
+
+
+def _safe_vline(win, *args):
+    try:
+        win.vline(*args)
+    except curses.error:
+        pass
+
+
+def _safe_move(win, *args):
+    try:
+        win.move(*args)
+    except curses.error:
+        pass
+
+
+def _change_c_lc_ctype_to_utf8():
+    # See _CHANGE_C_LC_CTYPE_TO_UTF8
+
+    if _IS_WINDOWS:
+        # Windows rarely has issues here, and the PEP 538 implementation avoids
+        # changing the locale on it. None of the UTF-8 locales below were
+        # supported from some quick testing either. Play it safe.
+        return
+
+    def try_set_locale(loc):
+        try:
+            locale.setlocale(locale.LC_CTYPE, loc)
+            return True
+        except locale.Error:
+            return False
+
+    # Is LC_CTYPE set to the C locale?
+    if locale.setlocale(locale.LC_CTYPE) == "C":
+        # This list was taken from the PEP 538 implementation in the CPython
+        # code, in Python/pylifecycle.c
+        for loc in "C.UTF-8", "C.utf8", "UTF-8":
+            if try_set_locale(loc):
+                # LC_CTYPE successfully changed
+                return
+
+
+# Are we running on Windows?
+_IS_WINDOWS = os.name == "nt"
+
+if __name__ == "__main__":
+    _main()
diff --git a/support/kconfiglib/oldconfig.py b/support/kconfiglib/oldconfig.py
new file mode 100755
index 0000000..042ab44
--- /dev/null
+++ b/support/kconfiglib/oldconfig.py
@@ -0,0 +1,246 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Implements oldconfig functionality.
+
+  1. Loads existing .config
+  2. Prompts for the value of all modifiable symbols/choices that
+     aren't already set in the .config
+  3. Writes an updated .config
+
+The default input/output filename is '.config'. A different filename can be
+passed in the KCONFIG_CONFIG environment variable.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+
+Entering '?' displays the help text of the symbol/choice, if any.
+
+Unlike 'make oldconfig', this script doesn't print menu titles and comments,
+but gives Kconfig definition locations. Printing menus and comments would be
+pretty easy to add: Look at the parents of each item, and print all menu
+prompts and comments unless they have already been printed (assuming you want
+to skip "irrelevant" menus).
+"""
+from __future__ import print_function
+
+import sys
+
+from kconfiglib import Symbol, Choice, BOOL, TRISTATE, HEX, standard_kconfig
+
+
+# Python 2/3 compatibility hack
+if sys.version_info[0] < 3:
+    input = raw_input
+
+
+def _main():
+    # Earlier symbols in Kconfig files might depend on later symbols and become
+    # visible if their values change. This flag is set to True if the value of
+    # any symbol changes, in which case we rerun the oldconfig to check for new
+    # visible symbols.
+    global conf_changed
+
+    kconf = standard_kconfig()
+    print(kconf.load_config())
+
+    while True:
+        conf_changed = False
+
+        for node in kconf.node_iter():
+            oldconfig(node)
+
+        if not conf_changed:
+            break
+
+    print(kconf.write_config())
+
+
+def oldconfig(node):
+    """
+    Prompts the user for a value if node.item is a visible symbol/choice with
+    no user value.
+    """
+    # See main()
+    global conf_changed
+
+    # Only symbols and choices can be configured
+    if not isinstance(node.item, (Symbol, Choice)):
+        return
+
+    # Skip symbols and choices that aren't visible
+    if not node.item.visibility:
+        return
+
+    # Skip symbols and choices that don't have a prompt (at this location)
+    if not node.prompt:
+        return
+
+    if isinstance(node.item, Symbol):
+        sym = node.item
+
+        # Skip symbols that already have a user value
+        if sym.user_value is not None:
+            return
+
+        # Skip symbols that can only have a single value, due to selects
+        if len(sym.assignable) == 1:
+            return
+
+        # Skip symbols in choices in y mode. We ask once for the entire choice
+        # instead.
+        if sym.choice and sym.choice.tri_value == 2:
+            return
+
+        # Loop until the user enters a valid value or enters a blank string
+        # (for the default value)
+        while True:
+            val = input("{} ({}) [{}] ".format(
+                node.prompt[0], _name_and_loc_str(sym),
+                _default_value_str(sym)))
+
+            if val == "?":
+                _print_help(node)
+                continue
+
+            # Substitute a blank string with the default value the symbol
+            # would get
+            if not val:
+                val = sym.str_value
+
+            # Automatically add a "0x" prefix for hex symbols, like the
+            # menuconfig interface does. This isn't done when loading .config
+            # files, hence why set_value() doesn't do it automatically.
+            if sym.type == HEX and not val.startswith(("0x", "0X")):
+                val = "0x" + val
+
+            old_str_val = sym.str_value
+
+            # Kconfiglib itself will print a warning here if the value
+            # is invalid, so we don't need to bother
+            if sym.set_value(val):
+                # Valid value input. We're done with this node.
+
+                if sym.str_value != old_str_val:
+                    conf_changed = True
+
+                return
+
+    else:
+        choice = node.item
+
+        # Skip choices that already have a visible user selection...
+        if choice.user_selection and choice.user_selection.visibility == 2:
+            # ...unless there are new visible symbols in the choice. (We know
+            # they have y (2) visibility in that case, because m-visible
+            # symbols get demoted to n-visibility in y-mode choices, and the
+            # user-selected symbol had visibility y.)
+            for sym in choice.syms:
+                if sym is not choice.user_selection and sym.visibility and \
+                   sym.user_value is None:
+                    # New visible symbols in the choice
+                    break
+            else:
+                # No new visible symbols in the choice
+                return
+
+        # Get a list of available selections. The mode of the choice limits
+        # the visibility of the choice value symbols, so this will indirectly
+        # skip choices in n and m mode.
+        options = [sym for sym in choice.syms if sym.visibility == 2]
+
+        if not options:
+            # No y-visible choice value symbols
+            return
+
+        # Loop until the user enters a valid selection or a blank string (for
+        # the default selection)
+        while True:
+            print("{} ({})".format(node.prompt[0], _name_and_loc_str(choice)))
+
+            for i, sym in enumerate(options, 1):
+                print("{} {}. {} ({})".format(
+                    ">" if sym is choice.selection else " ",
+                    i,
+                    # Assume people don't define choice symbols with multiple
+                    # prompts. That generates a warning anyway.
+                    sym.nodes[0].prompt[0],
+                    sym.name))
+
+            sel_index = input("choice[1-{}]: ".format(len(options)))
+
+            if sel_index == "?":
+                _print_help(node)
+                continue
+
+            # Pick the default selection if the string is blank
+            if not sel_index:
+                choice.selection.set_value(2)
+                break
+
+            try:
+                sel_index = int(sel_index)
+            except ValueError:
+                print("Bad index", file=sys.stderr)
+                continue
+
+            if not 1 <= sel_index <= len(options):
+                print("Bad index", file=sys.stderr)
+                continue
+
+            # Valid selection
+
+            if options[sel_index - 1].tri_value != 2:
+                conf_changed = True
+
+            options[sel_index - 1].set_value(2)
+            break
+
+        # Give all of the non-selected visible choice symbols the user value n.
+        # This makes it so that the choice is no longer considered new once we
+        # do additional passes, if the reason that it was considered new was
+        # that it had new visible choice symbols.
+        #
+        # Only giving visible choice symbols the user value n means we will
+        # prompt for the choice again if later user selections make more new
+        # choice symbols visible, which is correct.
+        for sym in choice.syms:
+            if sym is not choice.user_selection and sym.visibility:
+                sym.set_value(0)
+
+
+def _name_and_loc_str(sc):
+    # Helper for printing the name of the symbol/choice 'sc' along with the
+    # location(s) in the Kconfig files where it is defined. Unnamed choices
+    # return "choice" instead of the name.
+
+    return "{}, defined at {}".format(
+        sc.name or "choice",
+        ", ".join("{}:{}".format(node.filename, node.linenr)
+                  for node in sc.nodes))
+
+
+def _print_help(node):
+    print("\n" + (node.help or "No help text\n"))
+
+
+def _default_value_str(sym):
+    # Returns the "m/M/y" string in e.g.
+    #
+    #   TRISTATE_SYM prompt (TRISTATE_SYM, defined at Kconfig:9) [n/M/y]:
+    #
+    # For string/int/hex, returns the default value as-is.
+
+    if sym.type in (BOOL, TRISTATE):
+        return "/".join(("NMY" if sym.tri_value == tri else "nmy")[tri]
+                        for tri in sym.assignable)
+
+    # string/int/hex
+    return sym.str_value
+
+
+if __name__ == "__main__":
+    _main()
diff --git a/support/kconfiglib/olddefconfig.py b/support/kconfiglib/olddefconfig.py
new file mode 100755
index 0000000..a59a7d4
--- /dev/null
+++ b/support/kconfiglib/olddefconfig.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2018-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Updates an old .config file or creates a new one, by filling in default values
+for all new symbols. This is the same as picking the default selection for all
+symbols in oldconfig, or entering the menuconfig interface and immediately
+saving.
+
+The default input/output filename is '.config'. A different filename can be
+passed in the KCONFIG_CONFIG environment variable.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+"""
+import kconfiglib
+
+
+def main():
+    kconf = kconfiglib.standard_kconfig()
+    print(kconf.load_config())
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/savedefconfig.py b/support/kconfiglib/savedefconfig.py
new file mode 100755
index 0000000..c388f1a
--- /dev/null
+++ b/support/kconfiglib/savedefconfig.py
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Saves a minimal configuration file that only lists symbols that differ in value
+from their defaults. Loading such a configuration file is equivalent to loading
+the "full" configuration file.
+
+Minimal configuration files are handy to start from when editing configuration
+files by hand.
+
+The default input configuration file is '.config'. A different input filename
+can be passed in the KCONFIG_CONFIG environment variable.
+
+Note: Minimal configurations can also be generated from within the menuconfig
+interface.
+"""
+import argparse
+
+import kconfiglib
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--kconfig",
+        default="Kconfig",
+        help="Base Kconfig file (default: Kconfig)")
+
+    parser.add_argument(
+        "--out",
+        metavar="MINIMAL_CONFIGURATION",
+        default="defconfig",
+        help="Output filename for minimal configuration (default: defconfig)")
+
+    args = parser.parse_args()
+
+    kconf = kconfiglib.Kconfig(args.kconfig)
+    print(kconf.load_config())
+    print(kconf.write_min_config(args.out))
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/setconfig.py b/support/kconfiglib/setconfig.py
new file mode 100755
index 0000000..b689754
--- /dev/null
+++ b/support/kconfiglib/setconfig.py
@@ -0,0 +1,92 @@
+#!/usr/bin/env python
+
+# Copyright (c) 2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+"""
+Simple utility for setting configuration values from the command line.
+
+Sample usage:
+
+  $ setconfig FOO_SUPPORT=y BAR_BITS=8
+
+Note: Symbol names should not be prefixed with 'CONFIG_'.
+
+The exit status on errors is 1.
+
+The default input/output configuration file is '.config'. A different filename
+can be passed in the KCONFIG_CONFIG environment variable.
+
+When overwriting a configuration file, the old version is saved to
+<filename>.old (e.g. .config.old).
+"""
+import argparse
+import sys
+
+import kconfiglib
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        formatter_class=argparse.RawDescriptionHelpFormatter,
+        description=__doc__)
+
+    parser.add_argument(
+        "--kconfig",
+        default="Kconfig",
+        help="Base Kconfig file (default: Kconfig)")
+
+    parser.add_argument(
+        "--no-check-exists",
+        dest="check_exists",
+        action="store_false",
+        help="Ignore assignments to non-existent symbols instead of erroring "
+             "out")
+
+    parser.add_argument(
+        "--no-check-value",
+        dest="check_value",
+        action="store_false",
+        help="Ignore assignments that didn't \"take\" (where the symbol got a "
+             "different value, e.g. due to unsatisfied dependencies) instead "
+             "of erroring out")
+
+    parser.add_argument(
+        "assignments",
+        metavar="ASSIGNMENT",
+        nargs="*",
+        help="A 'NAME=value' assignment")
+
+    args = parser.parse_args()
+
+    kconf = kconfiglib.Kconfig(args.kconfig)
+    print(kconf.load_config())
+
+    for arg in args.assignments:
+        if "=" not in arg:
+            sys.exit("error: no '=' in assignment: '{}'".format(arg))
+        name, value = arg.split("=", 1)
+
+        if name not in kconf.syms:
+            if not args.check_exists:
+                continue
+            sys.exit("error: no symbol '{}' in configuration".format(name))
+
+        sym = kconf.syms[name]
+
+        if not sym.set_value(value):
+            sys.exit("error: '{}' is an invalid value for the {} symbol {}"
+                     .format(value, kconfiglib.TYPE_TO_STR[sym.orig_type],
+                             name))
+
+        if args.check_value and sym.str_value != value:
+            sys.exit("error: {} was assigned the value '{}', but got the "
+                     "value '{}'. Check the symbol's dependencies, and make "
+                     "sure that it has a prompt."
+                     .format(name, value, sym.str_value))
+
+    print(kconf.write_config())
+
+
+if __name__ == "__main__":
+    main()
diff --git a/support/kconfiglib/setup.cfg b/support/kconfiglib/setup.cfg
new file mode 100644
index 0000000..185845e
--- /dev/null
+++ b/support/kconfiglib/setup.cfg
@@ -0,0 +1,7 @@
+[bdist_wheel]
+# We support both Python 2 and Python 3
+universal = 1
+
+[metadata]
+# Include the license file in wheels
+license_file = LICENSE.txt
diff --git a/support/kconfiglib/setup.py b/support/kconfiglib/setup.py
new file mode 100644
index 0000000..9a3947e
--- /dev/null
+++ b/support/kconfiglib/setup.py
@@ -0,0 +1,100 @@
+import io
+import os
+
+import setuptools
+
+
+setuptools.setup(
+    name="kconfiglib",
+    # MAJOR.MINOR.PATCH, per http://semver.org
+    version="12.13.0",
+    description="A flexible Python Kconfig implementation",
+
+    # Make sure that README.rst decodes on Python 3 in environments that use
+    # the C locale (which implies ASCII), by explicitly giving the encoding.
+    #
+    # io.open() has the 'encoding' parameter on both Python 2 and 3. open()
+    # doesn't have it on Python 2. This lets us use the same code for both.
+    long_description=io.open(
+        os.path.join(os.path.dirname(__file__), "README.rst"),
+        encoding="utf-8"
+    ).read(),
+
+    url="https://github.com/ulfalizer/Kconfiglib",
+    author='Ulf "Ulfalizer" Magnusson',
+    author_email="ulfalizer@gmail.com",
+    keywords="kconfig, kbuild, menuconfig, configuration-management",
+    license="ISC",
+
+    py_modules=(
+        "kconfiglib",
+        "menuconfig",
+        "guiconfig",
+        "genconfig",
+        "oldconfig",
+        "olddefconfig",
+        "savedefconfig",
+        "defconfig",
+        "alldefconfig",
+        "allnoconfig",
+        "allmodconfig",
+        "allyesconfig",
+        "listnewconfig",
+        "setconfig",
+    ),
+
+    entry_points={
+        "console_scripts": (
+            "menuconfig = menuconfig:_main",
+            "guiconfig = guiconfig:_main",
+            "genconfig = genconfig:main",
+            "oldconfig = oldconfig:_main",
+            "olddefconfig = olddefconfig:main",
+            "savedefconfig = savedefconfig:main",
+            "defconfig = defconfig:main",
+            "alldefconfig = alldefconfig:main",
+            "allnoconfig = allnoconfig:main",
+            "allmodconfig = allmodconfig:main",
+            "allyesconfig = allyesconfig:main",
+            "listnewconfig = listnewconfig:main",
+            "setconfig = setconfig:main",
+        )
+    },
+
+    # The terminal menuconfig implementation uses the standard Python 'curses'
+    # module. The windows-curses package makes it available on Windows. See
+    # https://github.com/zephyrproject-rtos/windows-curses.
+    install_requires=(
+        'windows-curses; sys_platform == "win32"',
+    ),
+
+    # Needs support for unnumbered {} in format() and argparse
+    python_requires=">=2.7,!=3.0.*,!=3.1.*",
+
+    project_urls={
+        "GitHub repository": "https://github.com/ulfalizer/Kconfiglib",
+        "Examples": "https://github.com/ulfalizer/Kconfiglib/tree/master/examples",
+    },
+
+    classifiers=[
+        "Development Status :: 5 - Production/Stable",
+        "Intended Audience :: Developers",
+        "Topic :: Software Development :: Build Tools",
+        "Topic :: System :: Operating System Kernels :: Linux",
+        "License :: OSI Approved :: ISC License (ISCL)",
+        "Operating System :: POSIX",
+        "Operating System :: Microsoft :: Windows",
+        "Programming Language :: Python :: 2",
+        "Programming Language :: Python :: 2.7",
+        "Programming Language :: Python :: 3",
+        "Programming Language :: Python :: 3.2",
+        "Programming Language :: Python :: 3.3",
+        "Programming Language :: Python :: 3.4",
+        "Programming Language :: Python :: 3.5",
+        "Programming Language :: Python :: 3.6",
+        "Programming Language :: Python :: 3.7",
+        "Programming Language :: Python :: 3.8",
+        "Programming Language :: Python :: Implementation :: CPython",
+        "Programming Language :: Python :: Implementation :: PyPy",
+    ]
+)
diff --git a/support/kconfiglib/tests/Kappend b/support/kconfiglib/tests/Kappend
new file mode 100644
index 0000000..ce1478f
--- /dev/null
+++ b/support/kconfiglib/tests/Kappend
@@ -0,0 +1,12 @@
+config MODULES
+    def_bool y
+
+config BOOL
+    bool "bool 1"
+
+config STRING
+    string "string"
+
+config IGNOREME
+    bool "ignore me"
+    default y
diff --git a/support/kconfiglib/tests/Kassignable b/support/kconfiglib/tests/Kassignable
new file mode 100644
index 0000000..26b4177
--- /dev/null
+++ b/support/kconfiglib/tests/Kassignable
@@ -0,0 +1,230 @@
+config MODULES
+	bool "modules"
+	option modules
+
+
+# Things that should never be .assignable
+
+if UNDEFINED && "const"
+endif
+
+config NO_PROMPT
+	bool
+
+config STRING
+	string "string"
+
+config INT
+	int "int"
+
+config HEX
+	hex "hex"
+
+
+# Non-selected symbols
+
+config Y_VIS_BOOL
+	bool "y-vis bool"
+
+config M_VIS_BOOL
+	bool "m-vis bool" if m
+
+config N_VIS_BOOL
+	bool "n-vis bool" if n
+
+config Y_VIS_TRI
+	tristate "y-vis tri"
+
+config M_VIS_TRI
+	tristate "m-vis tri" if m
+
+config N_VIS_TRI
+	tristate "n-vis tri" if n
+
+
+# Symbols selected to y
+
+config Y_SELECTOR
+	def_tristate y
+
+	select Y_SEL_Y_VIS_BOOL
+	select Y_SEL_M_VIS_BOOL
+	select Y_SEL_N_VIS_BOOL
+
+	select Y_SEL_Y_VIS_TRI
+	select Y_SEL_M_VIS_TRI
+	select Y_SEL_N_VIS_TRI
+
+config Y_SEL_Y_VIS_BOOL
+	bool "y-sel y-vis bool"
+
+config Y_SEL_M_VIS_BOOL
+	bool "y-sel m-vis bool" if m
+
+config Y_SEL_N_VIS_BOOL
+	bool "y-sel n-vis bool" if n
+
+config Y_SEL_Y_VIS_TRI
+	tristate "y-sel y-vis tri"
+
+config Y_SEL_M_VIS_TRI
+	tristate "y-sel m-vis tri" if m
+
+config Y_SEL_N_VIS_TRI
+	tristate "y-sel n-vis tri" if n
+
+
+# Symbols selected to m
+
+config M_SELECTOR
+	def_tristate m
+
+	select M_SEL_Y_VIS_BOOL
+	select M_SEL_M_VIS_BOOL
+	select M_SEL_N_VIS_BOOL
+
+	select M_SEL_Y_VIS_TRI
+	select M_SEL_M_VIS_TRI
+	select M_SEL_N_VIS_TRI
+
+config M_SEL_Y_VIS_BOOL
+	bool "m-sel y-vis bool"
+
+config M_SEL_M_VIS_BOOL
+	bool "m-sel m-vis bool" if m
+
+config M_SEL_N_VIS_BOOL
+	bool "m-sel n-vis bool" if n
+
+config M_SEL_Y_VIS_TRI
+	tristate "m-sel y-vis tri"
+
+config M_SEL_M_VIS_TRI
+	tristate "m-sel m-vis tri" if m
+
+config M_SEL_N_VIS_TRI
+	tristate "m-sel n-vis tri" if n
+
+
+# Symbols implied to y
+
+config Y_IMPLIER
+	def_tristate y
+
+	imply Y_IMP_Y_VIS_BOOL
+	imply Y_IMP_M_VIS_BOOL
+	imply Y_IMP_N_VIS_BOOL
+
+	imply Y_IMP_Y_VIS_TRI
+	imply Y_IMP_M_VIS_TRI
+	imply Y_IMP_N_VIS_TRI
+
+config Y_IMP_Y_VIS_BOOL
+	bool "y-imp y-vis bool"
+
+config Y_IMP_M_VIS_BOOL
+	bool "y-imp m-vis bool" if m
+
+config Y_IMP_N_VIS_BOOL
+	bool "y-imp n-vis bool" if n
+
+config Y_IMP_Y_VIS_TRI
+	tristate "y-imp y-vis tri"
+
+config Y_IMP_M_VIS_TRI
+	tristate "y-imp m-vis tri" if m
+
+config Y_IMP_N_VIS_TRI
+	tristate "y-imp n-vis tri" if n
+
+
+# Symbols implied to m (never affects assignable values)
+
+config M_IMPLIER
+	def_tristate m
+
+	imply M_IMP_Y_VIS_BOOL
+	imply M_IMP_M_VIS_BOOL
+	imply M_IMP_N_VIS_BOOL
+
+	imply M_IMP_Y_VIS_TRI
+	imply M_IMP_M_VIS_TRI
+	imply M_IMP_N_VIS_TRI
+
+config M_IMP_Y_VIS_BOOL
+	bool "m-imp y-vis bool"
+
+config M_IMP_M_VIS_BOOL
+	bool "m-imp m-vis bool" if m
+
+config M_IMP_N_VIS_BOOL
+	bool "m-imp n-vis bool" if n
+
+config M_IMP_Y_VIS_TRI
+	tristate "m-imp y-vis tri"
+
+config M_IMP_M_VIS_TRI
+	tristate "m-imp m-vis tri" if m
+
+config M_IMP_N_VIS_TRI
+	tristate "m-imp n-vis tri" if n
+
+
+# Symbols in y-mode choice
+
+choice Y_CHOICE
+	bool "y-mode choice"
+
+config Y_CHOICE_BOOL
+	bool "y-mode choice bool"
+
+config Y_CHOICE_TRISTATE
+	tristate "y-mode choice tristate"
+
+config Y_CHOICE_N_VIS_TRISTATE
+	tristate "y-mode choice tristate invisible" if n
+
+endchoice
+
+
+# Symbols in m/y-mode choice
+
+choice MY_CHOICE
+	tristate "m/y-mode choice"
+
+config MY_CHOICE_BOOL
+	bool "m/y-mode choice bool"
+
+config MY_CHOICE_TRISTATE
+	tristate "m/y-mode choice tristate"
+
+config MY_CHOICE_N_VIS_TRISTATE
+	tristate "m/y-mode choice tristate invisible" if n
+
+endchoice
+
+
+# Choices with some other possible modes
+
+choice NMY_CHOICE
+	tristate "n/m/y-mode choice"
+	optional
+endchoice
+
+choice NY_CHOICE
+	bool "n/y-mode choice"
+	optional
+endchoice
+
+choice NM_CHOICE
+	tristate "n/m-mode choice" if m
+	optional
+endchoice
+
+choice M_CHOICE
+	tristate "m-mode choice" if m
+endchoice
+
+choice N_CHOICE
+	tristate "n-mode choice" if n
+endchoice
diff --git a/support/kconfiglib/tests/Kchoice b/support/kconfiglib/tests/Kchoice
new file mode 100644
index 0000000..16b38d4
--- /dev/null
+++ b/support/kconfiglib/tests/Kchoice
@@ -0,0 +1,198 @@
+config MODULES
+    bool "modules"
+
+# bool/tristate and optional
+
+choice BOOL
+    bool "bool"
+config B_1
+    tristate "B_1"
+config B_2
+    tristate "B_2"
+endchoice
+
+choice BOOL_OPT
+    bool "bool optional"
+    optional
+config BO_1
+    tristate "BO_1"
+config BO_2
+    tristate "BO_2"
+endchoice
+
+choice TRISTATE
+    tristate "tristate"
+config T_1
+    tristate "T_1"
+config T_2
+    tristate "T_2"
+endchoice
+
+choice TRISTATE_OPT
+    tristate "tristate optional"
+    optional
+config TO_1
+    tristate "TO_1"
+config TO_2
+    tristate "TO_2"
+endchoice
+
+# m-visibility
+
+choice BOOL_M
+    bool "bool m" if m
+config BM_1
+    tristate "BM_1"
+config BM_2
+    tristate "BM_2"
+endchoice
+
+choice TRISTATE_M
+    tristate "tristate m" if m
+config TM_1
+    tristate "TM_1"
+config TM_2
+    tristate "TM_2"
+endchoice
+
+# Defaults
+
+config TRISTATE_SYM
+    tristate "tristate"
+
+choice DEFAULTS
+    bool "defaults"
+    default OPT_1 if n
+    default OPT_2 if TRISTATE_SYM
+    default OPT_4
+config OPT_1
+    tristate "OPT_1"
+config OPT_2
+    tristate "OPT_2"
+config OPT_3
+    tristate "OPT_3"
+config OPT_4
+    tristate "OPT_4"
+endchoice
+
+choice DEFAULTS_NOT_VISIBLE
+    bool "defaults not visible"
+    # Skipped due to condition
+    default OPT_6 if n
+    # Skipped because OPT_7 is not visible
+    default OPT_7
+    # This one should apply
+    default OPT_8
+config OPT_5
+    tristate "OPT_5"
+config OPT_6
+    tristate "OPT_6"
+config OPT_7
+    tristate "OPT_7" if n
+config OPT_8
+    tristate "OPT_8"
+config OPT_9
+    tristate "OPT_9"
+endchoice
+
+# Choices without an explicitly specified type should get the type of the first
+# symbol with a type
+
+choice NO_TYPE_BOOL
+    prompt "no type bool"
+config NTB_1
+    bool "NTB_1"
+config NTB_2
+    tristate "NTB_2"
+endchoice
+
+choice NO_TYPE_TRISTATE
+    prompt "no type tristate"
+config NTT_1
+config NTT_2
+    tristate "NTB_2"
+config NTT_3
+    bool "NTT_3"
+endchoice
+
+# Choice items without an explicitly specified type should get the type of the
+# choice
+
+choice MISSING_MEMBER_TYPES_1
+    bool "missing member types"
+config MMT_1
+config MMT_2
+config MMT_3
+    tristate
+endchoice
+
+choice MISSING_MEMBER_TYPES_2
+config MMT_4
+config MMT_5
+    bool
+endchoice
+
+# Choice where the default selection (the first symbol) depends on another
+# symbol. If that symbol becomes 'n', the default selection should change to
+# the first visible symbol in the choice.
+
+choice DEFAULT_WITH_DEP
+    bool "default with dep"
+
+config A
+    bool "A"
+    depends on DEP
+
+config B
+    bool "B"
+
+endchoice
+
+config DEP
+    bool "dep"
+
+# Choice with symbols that shouldn't be considered choice symbols because they
+# depend on the preceding symbol. This might be a kconfig bug, but some things
+# use it, so we need to emulate it.
+
+choice WEIRD_SYMS
+    bool "weird symbols that aren't considered part of the choice"
+
+# Only WS1 is part of the choice
+config WS1
+    bool "WS1"
+
+config WS2
+    bool "WS2"
+    depends on WS1
+
+config WS3
+    bool
+    depends on WS2
+
+config WS4
+    bool
+    depends on WS1
+
+config WS5
+    bool "WS5" if WS1
+
+# 'if' has the same effect, so only WS6 is part of the choice
+config WS6
+    bool "WS6"
+
+if WS6
+
+config WS7
+    bool
+
+config WS8
+    bool "WS8"
+
+endif
+
+# Should also be part of the choice
+config WS9
+    bool "WS9"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdefconfig_existent b/support/kconfiglib/tests/Kdefconfig_existent
new file mode 100644
index 0000000..304cae6
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_existent
@@ -0,0 +1,8 @@
+# $FOO is "defconfig_2"
+
+config A
+    string
+    option defconfig_list
+    default "Kconfiglib/tests/defconfig_1" if y && !n && n
+    default "Kconfiglib/tests/$FOO"
+    default "Kconfiglib/tests/defconfig_1"
diff --git a/support/kconfiglib/tests/Kdefconfig_existent_but_n b/support/kconfiglib/tests/Kdefconfig_existent_but_n
new file mode 100644
index 0000000..2fdaaa9
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_existent_but_n
@@ -0,0 +1,10 @@
+# $FOO is "defconfig_2"
+# Should produce None due to the "depends on n"
+
+config A
+    string
+    depends on n
+    option defconfig_list
+    default "Kconfiglib/tests/defconfig_1" if y && !n && n
+    default "Kconfiglib/tests/$FOO"
+    default "Kconfiglib/tests/defconfig_1"
diff --git a/support/kconfiglib/tests/Kdefconfig_nonexistent b/support/kconfiglib/tests/Kdefconfig_nonexistent
new file mode 100644
index 0000000..5b7230f
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_nonexistent
@@ -0,0 +1,5 @@
+config A
+    string
+    option defconfig_list
+    default "Kconfiglib/tests/non_existent_1"
+    default "Kconfiglib/tests/non_existent_2"
diff --git a/support/kconfiglib/tests/Kdefconfig_srctree b/support/kconfiglib/tests/Kdefconfig_srctree
new file mode 100644
index 0000000..d2591fa
--- /dev/null
+++ b/support/kconfiglib/tests/Kdefconfig_srctree
@@ -0,0 +1,5 @@
+config A
+    string
+    option defconfig_list
+    default "sub/defconfig_in_sub" # Assume this doesn't exist
+    default "Kconfiglib/tests/defconfig_2"
diff --git a/support/kconfiglib/tests/Kdepcopy b/support/kconfiglib/tests/Kdepcopy
new file mode 100644
index 0000000..6abe898
--- /dev/null
+++ b/support/kconfiglib/tests/Kdepcopy
@@ -0,0 +1,173 @@
+# We verify that the properties below end up in definition order
+
+config MULTIDEF
+    bool
+    default A
+    default B
+    select AA
+    imply AA
+
+if FOO
+
+config MULTIDEF
+    default C
+    default D
+    select BB
+    imply BB
+
+if BAR
+
+config MULTIDEF
+    default E
+    default F
+    select CC
+    imply CC
+
+menu "menu"
+
+config MULTIDEF
+    default G
+    default H
+    select DD
+    imply DD
+
+config MULTIDEF
+    default I
+    default J
+    select EE
+    imply EE
+
+endmenu
+
+config MULTIDEF
+    default K
+    default L
+    select FF
+    imply FF
+
+config MULTIDEF
+    default M
+    default N
+    select GG
+    imply GG
+
+endif
+
+config MULTIDEF
+    default O
+    default P
+    select HH
+    select II
+    imply HH
+    imply II
+
+endif
+
+config MULTIDEF
+    default Q
+    default R
+    select JJ
+    imply JJ
+
+
+# Same test with choice symbols involved
+
+config MULTIDEF_CHOICE
+    bool
+    select A
+
+choice
+    bool "choice"
+
+config MULTIDEF_CHOICE
+    bool "multidef choice"
+    select B
+
+endchoice
+
+config MULTIDEF_CHOICE
+    bool
+    select C
+
+
+# Same test with ranges involved
+
+config MULTIDEF_RANGE
+    int
+    range A _
+
+menu "menu"
+
+config MULTIDEF_RANGE
+    int
+    range B _
+
+if FOO
+
+config MULTIDEF_RANGE
+    int
+    range C _
+
+endif
+
+config MULTIDEF_RANGE
+    int
+    range D _
+
+endmenu
+
+config MULTIDEF_RANGE
+    int
+    range E _
+
+config MULTIDEF_RANGE
+    int
+    range F _
+
+
+# Same test for a choice
+
+choice MULTICHOICE
+    bool "choice"
+    default A
+
+config A
+    bool "A"
+
+config B
+    bool "B"
+
+config C
+    bool "C"
+
+config D
+    bool "C"
+
+config E
+    bool "C"
+
+endchoice
+
+if FOO
+
+choice MULTICHOICE
+    default B
+endchoice
+
+menu "menu"
+
+choice MULTICHOICE
+    default C
+endchoice
+
+endmenu
+
+choice MULTICHOICE
+    default D
+endchoice
+
+endif
+
+choice MULTICHOICE
+    default E
+endchoice
diff --git a/support/kconfiglib/tests/Kdeploop0 b/support/kconfiglib/tests/Kdeploop0
new file mode 100644
index 0000000..98d3e3c
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop0
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    depends on FOO
diff --git a/support/kconfiglib/tests/Kdeploop1 b/support/kconfiglib/tests/Kdeploop1
new file mode 100644
index 0000000..134cd29
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop1
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    select FOO
diff --git a/support/kconfiglib/tests/Kdeploop10 b/support/kconfiglib/tests/Kdeploop10
new file mode 100644
index 0000000..2e616ae
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop10
@@ -0,0 +1,48 @@
+config A
+    bool
+    depends on B
+
+config B
+    bool
+    depends on C = 7
+
+config C
+    int
+    range D 8
+
+config D
+    int
+    default 3 if E
+    default 8
+
+config E
+    bool
+
+config F
+    bool
+    select E if G
+
+config G
+    bool
+    depends on H
+
+choice
+    bool "choice"
+
+config H
+    bool "H"
+    depends on I
+
+endchoice
+
+choice
+    bool "choice" if J
+
+config I
+    bool "I"
+
+endchoice
+
+config J
+    bool
+    depends on A
diff --git a/support/kconfiglib/tests/Kdeploop2 b/support/kconfiglib/tests/Kdeploop2
new file mode 100644
index 0000000..c997243
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop2
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    default FOO
diff --git a/support/kconfiglib/tests/Kdeploop3 b/support/kconfiglib/tests/Kdeploop3
new file mode 100644
index 0000000..90c83d5
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop3
@@ -0,0 +1,3 @@
+config FOO
+    bool
+    default y if FOO
diff --git a/support/kconfiglib/tests/Kdeploop4 b/support/kconfiglib/tests/Kdeploop4
new file mode 100644
index 0000000..789d8b7
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop4
@@ -0,0 +1,7 @@
+config FOO
+    bool
+    depends on BAR
+
+config BAR
+    bool
+    depends on FOO
diff --git a/support/kconfiglib/tests/Kdeploop5 b/support/kconfiglib/tests/Kdeploop5
new file mode 100644
index 0000000..f12fe6b
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop5
@@ -0,0 +1,7 @@
+config FOO
+    bool
+    select BAR
+
+config BAR
+    bool
+    select FOO
diff --git a/support/kconfiglib/tests/Kdeploop6 b/support/kconfiglib/tests/Kdeploop6
new file mode 100644
index 0000000..cb1e701
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop6
@@ -0,0 +1,6 @@
+config FOO
+    bool
+
+config BAR
+    bool
+    select FOO if FOO
diff --git a/support/kconfiglib/tests/Kdeploop7 b/support/kconfiglib/tests/Kdeploop7
new file mode 100644
index 0000000..63d2c57
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop7
@@ -0,0 +1,11 @@
+choice
+    bool "choice"
+
+config FOO
+    bool "foo"
+    depends on BAR
+
+config BAR
+    bool "bar"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdeploop8 b/support/kconfiglib/tests/Kdeploop8
new file mode 100644
index 0000000..84efd8d
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop8
@@ -0,0 +1,8 @@
+choice
+    bool "choice"
+    default FOO if FOO
+
+config FOO
+    bool "foo"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdeploop9 b/support/kconfiglib/tests/Kdeploop9
new file mode 100644
index 0000000..939f7f4
--- /dev/null
+++ b/support/kconfiglib/tests/Kdeploop9
@@ -0,0 +1,7 @@
+choice
+    bool "choice" if FOO
+
+config FOO
+    bool "foo"
+
+endchoice
diff --git a/support/kconfiglib/tests/Kdirdep b/support/kconfiglib/tests/Kdirdep
new file mode 100644
index 0000000..cbb88b9
--- /dev/null
+++ b/support/kconfiglib/tests/Kdirdep
@@ -0,0 +1,30 @@
+config NO_DEP_SYM
+    bool
+
+config DEP_SYM
+    bool
+    depends on A
+
+config DEP_SYM
+    depends on B && C
+
+config DEP_SYM
+    depends on !D
+
+
+choice NO_DEP_CHOICE
+    bool "no dep. choice"
+endchoice
+
+choice DEP_CHOICE
+    bool "dep. choice"
+    depends on A
+endchoice
+
+choice DEP_CHOICE
+    depends on B
+endchoice
+
+choice DEP_CHOICE
+    depends on C
+endchoice
diff --git a/support/kconfiglib/tests/Kescape b/support/kconfiglib/tests/Kescape
new file mode 100644
index 0000000..ee6b2b6
--- /dev/null
+++ b/support/kconfiglib/tests/Kescape
@@ -0,0 +1,3 @@
+config STRING
+    string "string"
+    default "\"\\"
diff --git a/support/kconfiglib/tests/Keval b/support/kconfiglib/tests/Keval
new file mode 100644
index 0000000..1e64b83
--- /dev/null
+++ b/support/kconfiglib/tests/Keval
@@ -0,0 +1,34 @@
+# Enabled/disabled in the test
+config MODULES
+    bool "modules"
+    option modules
+
+config N
+    def_tristate n
+
+config M
+    def_tristate m
+
+menuconfig Y
+    def_tristate y
+    prompt "foo"
+
+config Y_STRING
+    string
+    default "y"
+
+config FOO_BAR_STRING
+    string
+    default "foo bar"
+
+config INT_37
+    int
+    default 37
+
+config HEX_0X37
+    hex
+    default 0x37
+
+config HEX_37
+    hex
+    default 37
diff --git a/support/kconfiglib/tests/Kexpr_items b/support/kconfiglib/tests/Kexpr_items
new file mode 100644
index 0000000..fb97ace
--- /dev/null
+++ b/support/kconfiglib/tests/Kexpr_items
@@ -0,0 +1,11 @@
+config TEST
+    bool
+    default A && (B || !C && D = "E") || F > G || !!!H
+
+choice CHOICE
+    bool "choice"
+
+config TEST_CHOICE
+    bool "test choice" if A
+
+endchoice
diff --git a/support/kconfiglib/tests/Khelp b/support/kconfiglib/tests/Khelp
new file mode 100644
index 0000000..b80c2eb
--- /dev/null
+++ b/support/kconfiglib/tests/Khelp
@@ -0,0 +1,50 @@
+config TWO_HELP_STRINGS
+    bool
+    help
+      first help string
+
+
+
+
+config TWO_HELP_STRINGS
+    help
+      second help string
+
+config NO_BLANK_AFTER_HELP
+    bool
+    help
+      help for
+      NO_BLANK_AFTER_HELP
+choice CHOICE_HELP
+    bool "choice with help"
+    help
+  help for
+  CHOICE_HELP
+endchoice
+
+config HELP_TERMINATED_BY_COMMENT
+  bool
+  help
+ a
+ b
+ c
+#
+
+config TRICKY_HELP
+  bool
+  -help---
+
+
+  a
+   b
+    c
+
+   d
+    e
+     f
+
+
+  g
+   h
+    i
+#
diff --git a/support/kconfiglib/tests/Kifremoval b/support/kconfiglib/tests/Kifremoval
new file mode 100644
index 0000000..f94472c
--- /dev/null
+++ b/support/kconfiglib/tests/Kifremoval
@@ -0,0 +1,99 @@
+# Test some tricky cases that give consecutive 'if' nodes even after
+# flattening. Simple cases are exercised a ton elsewhere.
+
+if X
+endif
+if X
+endif
+
+config A
+
+if X
+endif
+if X
+endif
+
+config B
+
+if X
+endif
+if X
+endif
+if X
+endif
+
+config C
+
+if X
+  if X
+    if X
+    endif
+    if X
+    endif
+  endif
+  if X
+    if X
+    endif
+    if X
+    endif
+  endif
+  config D
+endif
+if X
+endif
+
+menu "E"
+  if X
+    if X
+    endif
+  endif
+  if X
+    if X
+    endif
+  endif
+endmenu
+
+menu "F"
+  if X
+  endif
+  if X
+  endif
+  if X
+    if X
+    endif
+    if X
+    endif
+    menu "G"
+    endmenu
+  endif
+endmenu
+
+choice H
+  if X
+    if X
+    endif
+  endif
+  if X
+    if X
+    endif
+  endif
+endchoice
+
+choice I
+  if X
+  endif
+  if X
+  endif
+  if X
+    if X
+    endif
+    if X
+    endif
+    config J
+  endif
+endchoice
+
+if X
+endif
+if X
+endif
diff --git a/support/kconfiglib/tests/Kimply b/support/kconfiglib/tests/Kimply
new file mode 100644
index 0000000..3ce346f
--- /dev/null
+++ b/support/kconfiglib/tests/Kimply
@@ -0,0 +1,145 @@
+config MODULES
+    def_bool y
+    option modules
+
+#
+# Implied symbols with unmet and met direct dependencies
+#
+
+config IMPLY_DIRECT_DEPS
+    def_tristate y
+    imply UNMET_DIRECT_1
+    imply UNMET_DIRECT_2
+    imply UNMET_DIRECT_3
+    imply MET_DIRECT_1
+    imply MET_DIRECT_2
+    imply MET_DIRECT_3
+    imply MET_DIRECT_4
+
+config UNMET_DIRECT_1
+    tristate
+    depends on n
+
+if n
+config UNMET_DIRECT_2
+    tristate
+endif
+
+menu "menu"
+    depends on n
+
+config UNMET_DIRECT_3
+    tristate
+
+endmenu
+
+config MET_DIRECT_1
+    tristate
+
+config MET_DIRECT_2
+    depends on y
+    tristate
+
+if y
+config MET_DIRECT_3
+    tristate
+endif
+
+menu "menu"
+    depends on y
+
+config MET_DIRECT_4
+    tristate
+
+endmenu
+
+#
+# 'imply' with condition
+#
+
+config IMPLY_COND
+    def_tristate y
+    tristate
+    imply IMPLIED_N_COND if n
+    imply IMPLIED_M_COND if m
+    imply IMPLIED_Y_COND if y
+
+config IMPLIED_N_COND
+    tristate
+
+config IMPLIED_M_COND
+    tristate
+
+config IMPLIED_Y_COND
+    tristate
+
+#
+# Implying from symbol with value n
+#
+
+# Will default to 'n'
+config IMPLY_N_1
+    tristate
+    imply IMPLIED_FROM_N_1
+
+# This test also disables the imply, so it's kinda redundant, but why not
+if n
+config IMPLY_N_2
+    tristate
+    imply IMPLIED_FROM_N_2
+endif
+
+config IMPLIED_FROM_N_1
+    tristate
+
+config IMPLIED_FROM_N_2
+    tristate
+
+#
+# Implying from symbol with value m
+#
+
+config IMPLY_M
+    def_tristate m
+    imply IMPLIED_M
+    # Implying a bool to 'm' makes it default to 'y'
+    imply IMPLIED_M_BOOL
+
+config IMPLIED_M
+    tristate
+
+config IMPLIED_M_BOOL
+    bool
+
+#
+# 'imply' which should raise an 'm' default to 'y'
+#
+
+config IMPLY_M_TO_Y
+    tristate
+    default y
+    imply IMPLIED_M_TO_Y
+
+config IMPLIED_M_TO_Y
+    tristate
+    default m
+
+#
+# Used for testing user values
+#
+
+config DIRECT_DEP
+    tristate "direct dep"
+
+config IMPLY
+    tristate "imply"
+    imply IMPLIED_TRISTATE
+    imply IMPLIED_BOOL
+
+config IMPLIED_TRISTATE
+    tristate "implied tristate"
+    depends on DIRECT_DEP
+
+config IMPLIED_BOOL
+    bool "implied bool"
+    depends on DIRECT_DEP
diff --git a/support/kconfiglib/tests/Kinclude_path b/support/kconfiglib/tests/Kinclude_path
new file mode 100644
index 0000000..7a3badb
--- /dev/null
+++ b/support/kconfiglib/tests/Kinclude_path
@@ -0,0 +1,12 @@
+config TOP
+	bool
+
+source "Kinclude_path_sourced_1"
+
+config TOP
+	bool
+
+source "Kinclude_path_sourced_1"
+
+config TOP
+	bool
diff --git a/support/kconfiglib/tests/Kinclude_path_sourced_1 b/support/kconfiglib/tests/Kinclude_path_sourced_1
new file mode 100644
index 0000000..f4dee98
--- /dev/null
+++ b/support/kconfiglib/tests/Kinclude_path_sourced_1
@@ -0,0 +1,12 @@
+config ONE_DOWN
+	bool
+
+source "Kinclude_path_sourced_2"
+
+config ONE_DOWN
+	bool
+
+source "Kinclude_path_sourced_2"
+
+config ONE_DOWN
+	bool
diff --git a/support/kconfiglib/tests/Kinclude_path_sourced_2 b/support/kconfiglib/tests/Kinclude_path_sourced_2
new file mode 100644
index 0000000..068f18d
--- /dev/null
+++ b/support/kconfiglib/tests/Kinclude_path_sourced_2
@@ -0,0 +1,11 @@
+config TWO_DOWN
+	bool
+
+menu "menu"
+endmenu
+
+comment "comment"
+
+choice
+	bool "choice"
+endchoice
diff --git a/support/kconfiglib/tests/Kitemlists b/support/kconfiglib/tests/Kitemlists
new file mode 100644
index 0000000..8aa7107
--- /dev/null
+++ b/support/kconfiglib/tests/Kitemlists
@@ -0,0 +1,36 @@
+comment "comment 1"
+
+choice
+    bool "choice 1"
+endchoice
+
+menu "menu 1"
+
+choice NAMED
+    bool "choice 2"
+endchoice
+
+menu "menu 2"
+menu "menu 3"
+comment "comment 2"
+endmenu
+
+choice
+    bool "choice 3"
+endchoice
+
+choice NAMED
+    bool
+endchoice
+
+endmenu
+
+menu "menu 4"
+endmenu
+
+comment "comment 3"
+
+endmenu
+
+menu "menu 5"
+endmenu
diff --git a/support/kconfiglib/tests/Klocation b/support/kconfiglib/tests/Klocation
new file mode 100644
index 0000000..f997055
--- /dev/null
+++ b/support/kconfiglib/tests/Klocation
@@ -0,0 +1,72 @@
+if UNDEFINED
+endif
+
+config SINGLE_DEF
+    bool
+
+config MULTI_DEF
+    bool
+
+# Throw in some line continuations too to make sure it doesn't mess up the line
+# numbers
+if y && \
+   y
+if y && \
+   y && \
+   y
+
+# Throw in some help texts too
+
+config HELP_1
+    bool "help 1"
+    help
+config HELP_2
+    bool "help 2"
+    help
+      foo
+      bar
+
+        baz
+
+config HELP_3
+    help
+      foo
+      bar
+    bool
+config \
+MULTI_DEF
+
+config MULTI_DEF
+
+endif
+endif
+
+# Expands to "tests/Klocation_sourced"
+source "$TESTS_DIR_FROM_ENV/Klocation$_SOURCED"
+
+# Expands to "sub/Klocation_rsourced"
+rsource "$SUB_DIR_FROM_ENV/Klocation$_RSOURCED"
+
+# Expands to "tests/*ub/Klocation_gsourced[12]", matching
+# tests/sub/Klocation_gsourced{1,2}
+source "$TESTS_DIR_FROM_ENV/*ub/Klocation$_GSOURCED[12]"
+# Test old syntax too
+gsource "$TESTS_DIR_FROM_ENV/*ub/Klocation$_GSOURCED[12]"
+
+# Expands to "sub/Klocation_grsourced[12]", matching
+# tests/sub/Klocation_grsourced{1,2}
+rsource "$SUB_DIR_FROM_ENV/Klocation$_GRSOURCED[12]"
+# Test old syntax too
+grsource "$SUB_DIR_FROM_ENV/Klocation$_GRSOURCED[12]"
+
+# No-ops
+osource "nonexistent"
+osource "nonexistent*"
+gsource "nonexistent"
+gsource "nonexistent*"
+orsource "nonexistent"
+orsource "nonexistent*"
+grsource "nonexistent"
+grsource "nonexistent*"
+
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/Klocation_sourced b/support/kconfiglib/tests/Klocation_sourced
new file mode 100644
index 0000000..6e19f76
--- /dev/null
+++ b/support/kconfiglib/tests/Klocation_sourced
@@ -0,0 +1,18 @@
+
+
+config MULTI_DEF
+
+choice CHOICE
+	bool "choice"
+endchoice
+
+config MENU_HOOK
+	bool
+
+menu "menu"
+endmenu
+
+config COMMENT_HOOK
+	bool
+
+comment "comment"
diff --git a/support/kconfiglib/tests/Kmainmenu b/support/kconfiglib/tests/Kmainmenu
new file mode 100644
index 0000000..80713c0
--- /dev/null
+++ b/support/kconfiglib/tests/Kmainmenu
@@ -0,0 +1,5 @@
+config FOO
+    string
+    option env="FOO"
+
+mainmenu "---$FOO---"
diff --git a/support/kconfiglib/tests/Kmenuconfig b/support/kconfiglib/tests/Kmenuconfig
new file mode 100644
index 0000000..9a4cc11
--- /dev/null
+++ b/support/kconfiglib/tests/Kmenuconfig
@@ -0,0 +1,37 @@
+# Menu nodes with is_menuconfig False
+
+config NOT_MENUCONFIG_1
+	bool
+
+config NOT_MENUCONFIG_2
+	bool "not menuconfig 2"
+
+config MENUCONFIG_MULTI_DEF
+	bool "menuconfig multi def 1"
+
+config COMMENT_HOOK
+	bool
+
+comment "not menuconfig 3"
+
+
+# Menu nodes with is_menuconfig True
+
+menuconfig MENUCONFIG_1
+	bool "menuconfig 1"
+
+menuconfig MENUCONFIG_MULTI_DEF
+	bool "menuconfig multi def 2"
+
+config MENU_HOOK
+	bool
+
+menu "menuconfig 2"
+endmenu
+
+config CHOICE_HOOK
+	bool
+
+choice
+	bool "menuconfig 3"
+endchoice
diff --git a/support/kconfiglib/tests/Kmisc b/support/kconfiglib/tests/Kmisc
new file mode 100644
index 0000000..d9a799d
--- /dev/null
+++ b/support/kconfiglib/tests/Kmisc
@@ -0,0 +1,82 @@
+# For testing various minor APIs
+
+# optional choices
+
+choice NOT_OPTIONAL
+    bool "not optional"
+config A
+    bool "A"
+config B
+    bool "B"
+endchoice
+
+choice OPTIONAL
+    tristate "optional"
+    optional
+config C
+    tristate "C"
+config D
+    tristate "D"
+# Quirky symbols - not proper choice symbol
+
+config Q1
+    tristate "Q1"
+    depends on D
+
+config Q2
+    tristate "Q2"
+    depends on Q1
+
+config Q3
+    tristate "Q3"
+    depends on D
+
+endchoice
+
+# User values
+
+config BOOL
+    bool "bool" if NOT_DEFINED_1
+
+config TRISTATE
+    tristate # Visibility should not affect user value
+
+config STRING
+    string "string"
+
+config INT
+    int # Visibility should not affect user value
+
+config HEX
+    hex "hex"
+    depends on NOT_DEFINED_2
+
+config COMMENT_HOOK
+comment "comment"
+
+config MENU_HOOK
+menu "menu"
+    depends on NOT_DEFINED_3 || NOT_DEFINED_2
+    depends on !NOT_DEFINED_4
+endmenu
+
+config FROM_ENV
+    string "from env"
+    option env="ENV_VAR"
+
+config FROM_ENV_MISSING
+    string "from env missing"
+    option env="MISSING_ENV_VAR"
+    default "missing"
+
+config FROM_ENV_WEIRD
+    string
+    default "weird"
+    option env="ENV_VAR"
+
+config NOT_ALLNOCONFIG_Y
+    bool "not allnoconfig_y"
+
+config ALLNOCONFIG_Y
+    bool "allnoconfig_y"
+    option allnoconfig_y
diff --git a/support/kconfiglib/tests/Kmissingrsource b/support/kconfiglib/tests/Kmissingrsource
new file mode 100644
index 0000000..924b0b3
--- /dev/null
+++ b/support/kconfiglib/tests/Kmissingrsource
@@ -0,0 +1 @@
+rsource "nonexistent"
diff --git a/support/kconfiglib/tests/Kmissingsource b/support/kconfiglib/tests/Kmissingsource
new file mode 100644
index 0000000..a3a6c25
--- /dev/null
+++ b/support/kconfiglib/tests/Kmissingsource
@@ -0,0 +1 @@
+source "nonexistent"
diff --git a/support/kconfiglib/tests/Korder b/support/kconfiglib/tests/Korder
new file mode 100644
index 0000000..3a8dffa
--- /dev/null
+++ b/support/kconfiglib/tests/Korder
@@ -0,0 +1,35 @@
+config O
+	int "O"
+	default 0
+
+config R
+	int "R"
+	default 1
+
+config D
+	int "D"
+	default 2
+
+config E
+	int "E"
+	default 3
+
+# Defined twice
+config R
+	int "R"
+
+config R2
+	int "R2"
+	default 4
+
+config I
+	int "I"
+	default 5
+
+config N
+	int "N"
+	default 6
+
+config G
+	int "G"
+	default 7
diff --git a/support/kconfiglib/tests/Kpreprocess b/support/kconfiglib/tests/Kpreprocess
new file mode 100644
index 0000000..e30b389
--- /dev/null
+++ b/support/kconfiglib/tests/Kpreprocess
@@ -0,0 +1,147 @@
+# Simple assignments (with bad formatting, as an additional test)
+
+simple-recursive=foo
+simple-immediate:=bar
+# Should become recursive
+simple-recursive-2+=baz
+
+	 whitespaced	 =	 foo
+
+
+# Simple += test. += should preserve the flavor of the variable (simple vs.
+# recursive).
+
+preserve-recursive = foo
+preserve-recursive += bar
+
+preserve-immediate := foo
+preserve-immediate += bar
+
+
+# Recursive substitution
+
+recursive = $(foo) $(bar) $($(b-char)a$(z-char))
+recursive += $(indir)
+
+foo = abc
+bar = def
+baz = ghi
+
+b-char = b
+z-char = z
+
+indir = jkl $(indir-2)
+indir-2 = mno
+
+
+# Immediate substitution
+
+def = foo
+immediate := $(undef)$(def)$(undef)$(def)
+def = bar
+undef = bar
+
+
+# Function calls
+
+# Chained function call
+quote = "$(1)" "$(2)"
+rev-quote = $(quote,$(2),$(1))
+surround-rev-quote = $(0) $(rev-quote,$(1),$(2)) $(0)
+surround-rev-quote-unused-arg = $(surround-rev-quote,$(1),$(2)) $(3)
+# No value is passed for $(3), so it expands to nothing
+fn-indir = surround-rev-quote
+messy-fn-res = $($(fn-indir)-unused-arg, a  b , c  d )
+
+# Special characters in function call
+comma = ,
+right-paren = )
+dollar = $
+left-paren = (
+fn = "$(1)"
+special-chars-fn-res = $(fn,$(comma)$(dollar)$(left-paren)foo$(right-paren))
+
+
+# Variable expansions in various locations (verified by checking how the symbol
+# prints)
+
+qaz = QAZ
+echo = $(1)
+ignore-first = $(2)
+
+config PRINT_ME
+	string "$(ENV_1)" if ($(echo,FOO) && $(echo,BAR)) || !$(echo,BAZ) || !(($(qaz)))
+	default "$(echo,"foo")" if "foo $(echo,"bar") baz" = "$(undefined)"
+
+# Expansion within a symbol token, with deliberate sloppiness
+config PRINT_$(ignore-first,  ,ME)_TOO
+	bool "foo"
+	default FOO$(ignore-first,    ,BAR)BAZ$(qaz) if $(qaz)&&$(qaz)FOO&&x$(ignore-first,  ,xx)
+
+
+# Recursive expansion (throws an exception)
+
+rec-1 = x $(rec-2) y
+rec-2 = x $(rec-3) y
+rec-3 = x $(rec-1) y
+
+# Functions are allowed to reference themselves, but an exception is thrown if
+# the function seems to be stuck (the recursion gets too deep)
+safe-fn-rec = $($(1))
+safe-fn-rec-2 = $(safe-fn-rec,safe-fn-rec-3)
+safe-fn-rec-3 = foo
+safe-fn-rec-res = $(safe-fn-rec,safe-fn-rec-2)
+
+unsafe-fn-rec = $(unsafe-fn-rec,$(1))
+
+
+# Expansion in the left-hand side of assignments
+
+dummy-arg-fn = bar
+lhs-indir-1 = lhs-indir-2
+lhs-indir-2 = -baz
+rhs = value
+# LHS expands to foo-bar-baz
+foo-$(dummy-arg-fn, ignored argument )$($(lhs-indir-1)) = $(rhs)
+# Expands to empty string, accepted
+  $(undefined)  
+
+# Variable with a space in its name
+empty =
+space = $(empty) $(empty)
+foo$(space)bar = value
+space-var-res = $(foo bar)
+
+
+# Built-in functions
+
+# Expands to "baz qaz"
+shell-res = $(shell,false && echo foo bar || echo baz qaz)
+
+# Warns about output on stderr, expands to nothing
+shell-stderr-res := $(shell,echo message on stderr >&2)
+
+# Expands to the current location
+location-res := $(filename):$(lineno)
+
+# Adds one warning, expands to nothing
+$(warning-if,,no warning)
+$(warning-if,n,no warning)
+warning-res := $(warning-if,y,a warning)
+
+# Does not cause an error, expands to nothing
+error-n-res := $(error-if,n,oops)
+
+# Causes an error when expanded
+error-y-res = $(error-if,y,oops)
+
+
+# Environment variables (for testing Kconfig.env_vars). ENV_1 is already
+# referenced above.
+env_ref_1 := xxx $(ENV_2) xxx
+env_ref_2 := $(shell,echo $(ENV_3))
+env_ref_3 :=
+env_ref_3 += $(ENV_4)
+$(warning-if,$(ENV_5),$(ENV_UNDEFINED))
+source "$(ENV_6)"
+env_ref_4 = $(ENV_7)  # Never evaluated
diff --git a/support/kconfiglib/tests/Krange b/support/kconfiglib/tests/Krange
new file mode 100644
index 0000000..3057483
--- /dev/null
+++ b/support/kconfiglib/tests/Krange
@@ -0,0 +1,133 @@
+#
+# No ranges
+#
+
+config HEX_NO_RANGE
+    hex "hex no range"
+
+config INT_NO_RANGE
+    int "int no range"
+
+#
+# Disabled ranges
+#
+
+config HEX_ALL_RANGES_DISABLED
+    hex "hex all ranges disabled"
+    range 0x10 0x20 if n
+    range 0x30 0x40 if n
+
+config INT_ALL_RANGES_DISABLED
+    int "int all ranges disabled"
+    range 10 20 if n
+    range 30 40 if n
+
+#
+# Ranges with defaults
+#
+
+# hex
+
+config HEX_RANGE_10_20_LOW_DEFAULT
+    hex "int range 10-20 low default"
+    range 0x10 0x20
+    default 0x9
+
+config HEX_RANGE_10_20_HIGH_DEFAULT
+    hex "int range 10-20 high default"
+    range 0x10 0x20
+    default 0x21
+
+config HEX_RANGE_10_20_OK_DEFAULT
+    hex "int range 10-20 ok default"
+    range 0x10 0x20
+    default 0x15
+
+config HEX_RANGE_10_20_OK_DEFAULT_ALTERNATE
+    hex "int range 10-20 ok default alternate"
+    range 0x10 0x20
+    default 15
+
+# int
+
+config INT_RANGE_10_20_LOW_DEFAULT
+    int "int range 10-20 low default"
+    range 10 20
+    default 9
+
+config INT_RANGE_10_20_HIGH_DEFAULT
+    int "int range 10-20 high default"
+    range 10 20
+    default 21
+
+config INT_RANGE_10_20_OK_DEFAULT
+    int "int range 10-20 ok default"
+    range 10 20
+    default 15
+
+#
+# Ranges with no defaults (should default to low end of range if > 0)
+#
+
+config HEX_RANGE_10_20
+    hex "hex range 10-20"    
+    range 0x10 0x20
+
+config HEX_RANGE_0_10
+    hex "hex range 0-10"
+    range 0x0 0x10
+
+config INT_RANGE_10_20
+    int "int range 10-20"    
+    range 10 20
+
+config INT_RANGE_0_10
+    int "int range 0-10"
+    range 0 10
+
+config INT_RANGE_NEG_10_10
+    int "int range -10-10"
+    range -10 10
+
+#
+# Dependent ranges
+#
+
+config HEX_40
+    hex
+    default 40
+
+config HEX_RANGE_10_40_DEPENDENT
+    hex "hex range 10-40 dependent"
+    range HEX_RANGE_10_20 HEX_40
+
+config INT_40
+    int
+    default 40
+
+config INT_RANGE_10_40_DEPENDENT
+    int "int range 10-40 dependent"
+    range INT_RANGE_10_20 INT_40
+
+#
+# Ranges on symbols defined in multiple locations
+#
+
+if n
+config INACTIVE_RANGE
+    range 0 1
+endif
+
+config INACTIVE_RANGE
+    int
+    # Default will apply and should not get clamped,
+    # because the range does not apply
+    default 2
+
+config ACTIVE_RANGE
+    range 0 1
+
+config ACTIVE_RANGE
+    int
+    # Default will apply and should be clamped to 1
+    default 2
diff --git a/support/kconfiglib/tests/Krecursive1 b/support/kconfiglib/tests/Krecursive1
new file mode 100644
index 0000000..35b521a
--- /dev/null
+++ b/support/kconfiglib/tests/Krecursive1
@@ -0,0 +1 @@
+source "tests/Krecursive2"
diff --git a/support/kconfiglib/tests/Krecursive2 b/support/kconfiglib/tests/Krecursive2
new file mode 100644
index 0000000..9f9f00e
--- /dev/null
+++ b/support/kconfiglib/tests/Krecursive2
@@ -0,0 +1 @@
+source "tests/Krecursive1"
diff --git a/support/kconfiglib/tests/Kreferenced b/support/kconfiglib/tests/Kreferenced
new file mode 100644
index 0000000..9da94c8
--- /dev/null
+++ b/support/kconfiglib/tests/Kreferenced
@@ -0,0 +1,63 @@
+config NO_REFS
+    bool
+
+config JUST_DEPENDS_ON_REFS
+    bool
+    depends on A && B
+
+if A
+
+menu "menu"
+    depends on B
+    visible if C
+    visible if D
+
+config LOTS_OF_REFS
+    bool "lots" if C || D
+    default E || F if G || H
+    default I || J if K || L
+    select M if N || O
+    select P if Q || R
+    imply S if T || U
+    imply V if W || X
+    depends on Y || Z
+
+endmenu
+
+endif
+
+config INT_REFS
+    int "int"
+    range A B if C && D
+    range E F if G && H
+
+choice CHOICE
+    bool "choice"
+
+config CHOICE_REF
+    bool "choice ref"
+
+endchoice
+
+comment "comment"
+    depends on A || B
+
+
+config MULTI_DEF_SYM
+    def_bool A && B
+
+config MULTI_DEF_SYM
+    depends on C
+
+
+choice MULTI_DEF_CHOICE
+    bool "choice"
+    depends on A && B
+
+endchoice
+
+choice MULTI_DEF_CHOICE
+    bool "choice"
+    depends on C
+
+endchoice
diff --git a/support/kconfiglib/tests/Krelation b/support/kconfiglib/tests/Krelation
new file mode 100644
index 0000000..940eff8
--- /dev/null
+++ b/support/kconfiglib/tests/Krelation
@@ -0,0 +1,36 @@
+config A
+    bool
+    depends on UNDEFINED
+
+choice CHOICE_1
+    bool "C"
+config B
+    bool "B"
+config C
+    bool "C" if B
+config D
+    bool "D"
+endchoice
+
+menu "m1"
+config E
+    bool
+menu "m2"
+config F
+    bool
+choice CHOICE_2
+    tristate "foo"
+config G
+    bool "g"
+config H
+    bool "h"
+endchoice
+endmenu
+config I
+    bool
+endmenu
+
+menu "m3"
+endmenu
+menu "m4"
+endmenu
diff --git a/support/kconfiglib/tests/Krepr b/support/kconfiglib/tests/Krepr
new file mode 100644
index 0000000..fe6d8f0
--- /dev/null
+++ b/support/kconfiglib/tests/Krepr
@@ -0,0 +1,64 @@
+config MODULES
+    bool
+    option modules
+    default y
+
+if UNDEFINED
+endif
+
+config BASIC
+    bool
+    default y
+    ---help---
+
+config VISIBLE
+    bool "visible"
+
+config STRING
+    string "visible"
+
+config DIR_DEP_N
+    depends on n
+
+config OPTIONS
+    option allnoconfig_y
+    option defconfig_list
+    option env="ENV"
+
+config MULTI_DEF
+config MULTI_DEF
+
+menuconfig MENUCONFIG
+
+choice CHOICE
+    tristate "choice"
+
+config CHOICE_1
+    tristate "choice sym"
+
+config CHOICE_2
+    tristate "choice sym"
+
+endchoice
+
+config CHOICE_HOOK
+
+choice
+    tristate "optional choice" if n
+    optional
+endchoice
+
+config NO_VISIBLE_IF_HOOK
+
+menu "no visible if"
+endmenu
+
+config VISIBLE_IF_HOOK
+
+menu "visible if"
+    visible if m
+endmenu
+
+config COMMENT_HOOK
+
+comment "comment"
diff --git a/support/kconfiglib/tests/Kstr b/support/kconfiglib/tests/Kstr
new file mode 100644
index 0000000..f55c830
--- /dev/null
+++ b/support/kconfiglib/tests/Kstr
@@ -0,0 +1,293 @@
+if UNDEFINED
+endif
+
+config NO_TYPE
+
+config BASIC_NO_PROMPT
+    bool
+    help
+      blah blah
+
+        blah blah blah
+
+       blah
+
+config BASIC_PROMPT
+    bool "basic"
+
+config ADVANCED
+    tristate "prompt" if DEP
+    default DEFAULT_1
+    default DEFAULT_2 if DEP
+    select SELECTED_1
+    select SELECTED_2 if DEP
+    imply IMPLIED_1
+    imply IMPLIED_2 if DEP
+    help
+      first help text
+
+config ADVANCED
+    prompt "prompt 2"
+
+menuconfig ADVANCED
+    prompt "prompt 3"
+
+if DEP3
+
+menu "foo"
+    depends on DEP4
+    visible if VIS
+
+config ADVANCED
+    help
+      second help text
+    depends on A || !B || (C && D) || !(E && F) || G = H || \
+              (I && !J && (K || L) && !(M || N) && O = P)
+
+config ADVANCED
+    # Used to verify that the direct dependencies appear to the right of VIS
+    prompt "prompt 4"
+
+endmenu
+
+endif
+
+config ONLY_DIRECT_DEPS
+    int
+    depends on DEP1
+    depends on DEP2
+
+config STRING
+    def_string "foo"
+    default "bar" if DEP
+    default STRING2
+    default STRING3 if DEP
+
+config INT
+    def_int 7 if DEP
+    range 1 2
+    range FOO BAR
+    range BAZ QAZ if DEP
+
+config HEX
+    def_hex 0x123
+    range 0x100 0x200
+    range FOO BAR
+    range BAZ QAZ if DEP
+
+config MODULES
+    bool "MODULES"
+    option modules
+
+config OPTIONS
+    option allnoconfig_y
+    option defconfig_list
+    option env="ENV"
+
+if LOC_1
+config CORRECT_PROP_LOCS_BOOL
+    prompt "prompt 1"
+    default DEFAULT_1
+    default DEFAULT_2
+    select SELECT_1
+    select SELECT_2
+    imply IMPLY_1
+    imply IMPLY_2
+    help
+      help 1
+endif
+
+if LOC_2
+menuconfig CORRECT_PROP_LOCS_BOOL
+    bool "prompt 2"
+    default DEFAULT_3
+    default DEFAULT_4
+    select SELECT_3
+    select SELECT_4
+    imply IMPLY_3
+    imply IMPLY_4
+    help
+      help 2
+endif
+
+if LOC_3
+config CORRECT_PROP_LOCS_BOOL
+    prompt "prompt 3"
+    default DEFAULT_5
+    default DEFAULT_6
+    select SELECT_5
+    select SELECT_6
+    imply IMPLY_5
+    imply IMPLY_6
+    help
+      help 2
+endif
+
+if LOC_1
+config CORRECT_PROP_LOCS_INT
+    int
+    range 1 2
+    range 3 4
+endif
+
+if LOC_2
+config CORRECT_PROP_LOCS_INT
+    range 5 6
+    range 7 8
+endif
+
+choice CHOICE
+    tristate "foo"
+    default CHOICE_1
+    default CHOICE_2 if dep
+
+config CHOICE_1
+    tristate "choice 1"
+
+config CHOICE_2
+    tristate "choice 2"
+
+endchoice
+
+choice
+    tristate "no name"
+    optional
+endchoice
+
+if LOC_1
+choice CORRECT_PROP_LOCS_CHOICE
+    bool
+    default CHOICE_3
+
+config CHOICE_3
+    bool "choice 3"
+
+config CHOICE_4
+    bool "choice 3"
+
+config CHOICE_5
+    bool "choice 3"
+
+endchoice
+endif
+
+if LOC_2
+choice CORRECT_PROP_LOCS_CHOICE
+    default CHOICE_4
+endchoice
+endif
+
+if LOC_3
+choice CORRECT_PROP_LOCS_CHOICE
+    default CHOICE_5
+endchoice
+endif
+
+config SIMPLE_MENU_HOOK
+menu "simple menu"
+endmenu
+
+config ADVANCED_MENU_HOOK
+menu "advanced menu"
+    depends on A
+    visible if B
+    visible if C || D
+endmenu
+
+config SIMPLE_COMMENT_HOOK
+comment "simple comment"
+
+config ADVANCED_COMMENT_HOOK
+comment "advanced comment"
+    depends on A
+    depends on B
+
+# Corner cases when removing direct dependencies
+
+config DEP_REM_CORNER_CASES
+    bool
+    default A
+    depends on n
+
+config DEP_REM_CORNER_CASES
+    default B if n
+
+config DEP_REM_CORNER_CASES
+    default C
+    depends on m
+
+config DEP_REM_CORNER_CASES
+    default D if A && y
+    depends on y
+
+config DEP_REM_CORNER_CASES
+    default E if !E1
+    default F if F1 = F2
+    default G if G1 || H1
+    depends on !H
+
+config DEP_REM_CORNER_CASES
+    default H
+    depends on "foo" = "bar"
+
+menu "menu"
+    visible if FOO || BAR
+
+config DEP_REM_CORNER_CASES
+    prompt "prompt"
+    depends on BAZ && QAZ
+
+endmenu
+
+# Only prompt, no type
+config PROMPT_ONLY
+    prompt "prompt only"
+
+# {Symbol,Choice}.orig_*
+
+if BASE_DEP
+
+config BOOL_SYM_ORIG
+    bool
+    default D1 if DEP
+    default D2
+    select S1
+    select S2 if DEP
+    imply I1
+    imply I1
+
+config BOOL_SYM_ORIG
+    default D3
+    select S3
+    imply I3 if DEP
+
+config INT_SYM_ORIG
+    int
+    range 1 2 if DEP
+    range 3 4
+
+config INT_SYM_ORIG
+    range 5 6 if DEP
+
+choice CHOICE_ORIG
+    bool "choice orig"
+    default A
+    default B if DEP
+
+config A
+    bool
+
+config B
+    bool
+
+endchoice
+
+choice CHOICE_ORIG
+    default C if DEP
+
+config C
+    bool
+
+endchoice
+
+endif
diff --git a/support/kconfiglib/tests/Kundef b/support/kconfiglib/tests/Kundef
new file mode 100644
index 0000000..fae521a
--- /dev/null
+++ b/support/kconfiglib/tests/Kundef
@@ -0,0 +1,23 @@
+config DEF
+	bool
+
+config BOOL
+	bool "foo" if DEF || !UNDEF_1
+	default UNDEF_2
+
+config INT
+	int
+	range UNDEF_2 8
+	default 10
+	range 5 15
+
+config HEX
+	hex
+	range 0x123 0X456
+	default 0x200
+
+menu "menu"
+	depends on UNDEF_1
+	visible if UNDEF_3
+
+endmenu
diff --git a/support/kconfiglib/tests/Kuserfunctions b/support/kconfiglib/tests/Kuserfunctions
new file mode 100644
index 0000000..89b4442
--- /dev/null
+++ b/support/kconfiglib/tests/Kuserfunctions
@@ -0,0 +1,11 @@
+add-zero  = $(add)
+add-one   = $(add,1)
+add-three = $(add,1,-1,2,1)
+
+one-zero = $(one)
+one-one  = $(one,foo bar)
+one-two  = $(one,foo bar,baz)
+
+one-or-more-zero  = $(one-or-more)
+one-or-more-one   = $(one-or-more,foo)
+one-or-more-three = $(one-or-more,foo,bar,baz)
diff --git a/support/kconfiglib/tests/Kvisibility b/support/kconfiglib/tests/Kvisibility
new file mode 100644
index 0000000..91def0a
--- /dev/null
+++ b/support/kconfiglib/tests/Kvisibility
@@ -0,0 +1,342 @@
+config MODULES
+    bool "MODULES"
+    option modules
+
+#
+# Symbol visibility
+#
+
+config NO_PROMPT
+    bool
+
+# Not rewritten, so MOD will have the value 'y' when running without modules
+config MOD
+    def_tristate m
+
+config BOOL_N
+    bool "bool n" if n
+
+config BOOL_M
+    # Rewritten to m && MODULES
+    bool "bool m" if m
+
+config BOOL_MOD
+    bool "bool MOD"
+    # Not rewritten
+    depends on MOD
+
+config BOOL_Y
+    bool "bool y"
+    # Rewritten to m && MODULES
+    depends on y || m
+
+config TRISTATE_N
+    tristate "tristate n" if n
+
+config TRISTATE_M
+    # Rewritten to m && MODULES
+    tristate "tristate m" if m
+
+config TRISTATE_MOD
+    tristate "tristate MOD"
+    # Not rewritten
+    depends on MOD
+
+config TRISTATE_Y
+    bool "tristate y"
+    # Rewritten to m && MODULES
+    depends on y || m
+
+# Symbols nested in 'if'
+
+if n
+
+config BOOL_IF_N
+    bool "bool if n"
+
+config TRISTATE_IF_N
+    tristate "tristate if n"
+
+endif
+
+if m
+
+config BOOL_IF_M
+    bool "bool if m"
+
+config TRISTATE_IF_M
+    tristate "tristate if n"
+
+endif
+
+if y
+
+config BOOL_IF_Y
+    bool "bool if y"
+
+config TRISTATE_IF_Y
+    tristate "tristate if y"
+
+endif
+
+# Symbols nested in 'menu'
+
+menu "menu 1"
+    depends on n
+
+config BOOL_MENU_N
+    bool "bool menu n"
+
+config TRISTATE_MENU_N
+    tristate "tristate menu n"
+
+endmenu
+
+menu "menu 2"
+    depends on m
+
+config BOOL_MENU_M
+    bool "bool menu m"
+
+config TRISTATE_MENU_M
+    tristate "tristate menu n"
+
+endmenu
+
+menu "menu 3"
+    depends on y
+
+config BOOL_MENU_Y
+    bool "bool menu y"
+
+config TRISTATE_MENU_Y
+    tristate "tristate menu y"
+
+endmenu
+
+# Symbols nested in choices
+
+choice C1
+    tristate "choice n" if n
+
+config BOOL_CHOICE_N
+    bool "bool choice n"
+
+config TRISTATE_CHOICE_N
+    tristate "tristate choice n"
+
+endchoice
+
+choice C2
+    tristate "choice m" if m
+
+config BOOL_CHOICE_M
+    bool "bool choice m"
+
+config TRISTATE_CHOICE_M
+    tristate "tristate choice n"
+
+endchoice
+
+choice C3
+    tristate "choice y" if y
+
+config BOOL_CHOICE_Y
+    bool "bool choice y"
+
+config TRISTATE_CHOICE_Y
+    tristate "tristate choice y"
+
+endchoice
+
+#
+# Choice visibility
+#
+
+choice BOOL_CHOICE_N
+    bool "bool choice n" if n
+endchoice
+
+choice BOOL_CHOICE_M
+    bool "bool choice m" if m
+endchoice
+
+choice BOOL_CHOICE_Y
+    bool "bool choice y" if y
+endchoice
+
+choice TRISTATE_CHOICE_N
+    tristate "tristate choice n" if n
+endchoice
+
+choice TRISTATE_CHOICE_M
+    tristate "tristate choice m" if m
+endchoice
+
+choice TRISTATE_CHOICE_Y
+    tristate "tristate choice y" if y
+
+config K
+    tristate "K"
+
+config L
+    tristate "L"
+
+endchoice
+
+if m
+choice TRISTATE_CHOICE_IF_M_AND_Y
+    tristate "tristate choice if m and y" if y
+
+config M
+    bool "M"
+
+config N
+    bool "N"
+
+endchoice
+endif
+
+menu "choice-containing menu"
+    depends on n && y
+
+choice TRISTATE_CHOICE_MENU_N_AND_Y
+    tristate "tristate choice if n and y"
+
+config O
+    tristate "O"
+
+config P
+    tristate "P"
+
+endchoice
+
+endmenu
+
+#
+# Menu visibility
+#
+
+menu "menu n"
+    depends on n
+endmenu
+
+menu "menu m"
+    depends on m
+endmenu
+
+menu "menu y"
+    depends on y
+endmenu
+
+if n
+menu "menu if n"
+endmenu
+endif
+
+if m
+menu "menu if m"
+endmenu
+endif
+
+if y
+menu "menu if y"
+endmenu
+endif
+
+if m
+menu "menu if m and y"
+    depends on y
+endmenu
+endif
+
+#
+# Comment visibility
+#
+
+comment "comment n"
+    depends on n
+comment "comment m"
+    depends on m
+comment "comment y"
+    depends on y
+
+if n
+comment "comment if n"
+endif
+
+if m
+comment "comment if m"
+endif
+
+if y
+comment "comment if y"
+endif
+
+if "y"
+
+menu "menu with comment"
+    depends on m
+
+comment "double-nested m comment"
+    depends on y
+
+endmenu
+
+endif
+
+# Used to verify that string/int/hex symbols with m visibility accept a user
+# value
+
+if m
+
+config STRING_m
+    string "string"
+
+config INT_m
+    int "int"
+
+config HEX_m
+    hex "hex"
+
+endif
+
+# Menu 'visible if' visibility
+
+menu "n-visible menu"
+    visible if n
+
+config VISIBLE_IF_N
+    tristate "visible if n"
+
+endmenu
+
+menu "m-visible menu"
+    visible if m
+
+config VISIBLE_IF_M
+    tristate "visible if m"
+
+endmenu
+
+menu "y-visible menu"
+    visible if y
+
+config VISIBLE_IF_Y
+    tristate "visible if m"
+
+endmenu
+
+menu "m-visible menu 2"
+    visible if y || n
+    visible if m && y
+    visible if y
+
+if y
+
+config VISIBLE_IF_M_2
+    tristate "visible if m 2"
+
+endif
+
+endmenu
diff --git a/support/kconfiglib/tests/config_indented b/support/kconfiglib/tests/config_indented
new file mode 100644
index 0000000..d57d8b4
--- /dev/null
+++ b/support/kconfiglib/tests/config_indented
@@ -0,0 +1,3 @@
+# Indented assignments should be ignored to be compatible with the C
+# implementation
+ CONFIG_IGNOREME=n
diff --git a/support/kconfiglib/tests/config_set_bool b/support/kconfiglib/tests/config_set_bool
new file mode 100644
index 0000000..d2dccbf
--- /dev/null
+++ b/support/kconfiglib/tests/config_set_bool
@@ -0,0 +1 @@
+CONFIG_BOOL=y
diff --git a/support/kconfiglib/tests/config_set_string b/support/kconfiglib/tests/config_set_string
new file mode 100644
index 0000000..3a1250a
--- /dev/null
+++ b/support/kconfiglib/tests/config_set_string
@@ -0,0 +1 @@
+CONFIG_STRING="foo bar"
diff --git a/support/kconfiglib/tests/defconfig_1 b/support/kconfiglib/tests/defconfig_1
new file mode 100644
index 0000000..e69de29
diff --git a/support/kconfiglib/tests/defconfig_2 b/support/kconfiglib/tests/defconfig_2
new file mode 100644
index 0000000..e69de29
diff --git a/support/kconfiglib/tests/empty b/support/kconfiglib/tests/empty
new file mode 100644
index 0000000..e69de29
diff --git a/support/kconfiglib/tests/kconfigfunctions.py b/support/kconfiglib/tests/kconfigfunctions.py
new file mode 100644
index 0000000..e760468
--- /dev/null
+++ b/support/kconfiglib/tests/kconfigfunctions.py
@@ -0,0 +1,14 @@
+def add(kconf, name, *args):
+    return str(sum(map(int, args)))
+
+def one(kconf, name, s):
+    return name + 2*s
+
+def one_or_more(kconf, name, arg, *args):
+    return arg + " + " + ",".join(args)
+
+functions = {
+    "add":         (add,         0, None),
+    "one":         (one,         1,    1),
+    "one-or-more": (one_or_more, 1, None),
+}
diff --git a/support/kconfiglib/tests/reltest b/support/kconfiglib/tests/reltest
new file mode 100755
index 0000000..3e09e5f
--- /dev/null
+++ b/support/kconfiglib/tests/reltest
@@ -0,0 +1,51 @@
+#!/usr/bin/env bash
+
+# Runs the test suite and all examples scripts with Python 2 and Python 3,
+# bailing immediately if anything fails. For the examples that aren't tested in
+# the test suite, we just confirm that they at least run.
+#
+# Should be run from the kernel root with  $ Kconfiglib/tests/reltest
+
+test_script() {
+    echo -e "\n================= $1 with $py =================\n"
+    if (($# == 1)); then
+        make scriptconfig PYTHONCMD=$py SCRIPT=$1
+    else
+        make scriptconfig PYTHONCMD=$py SCRIPT=$1 SCRIPT_ARG="$2"
+    fi
+
+    if (($?)); then
+        echo "$1 failed to run with $py"
+        exit 1
+    fi
+}
+
+for py in python2 python3; do
+    echo -e "\n================= Test suite with $py =================\n"
+
+    if ! $py Kconfiglib/testsuite.py; then
+        echo "test suite failed for $py"
+        exit 1
+    fi
+
+    # Check that the example scripts that aren't tested by the test suite run
+    # at least
+
+    test_script Kconfiglib/examples/defconfig_oldconfig.py
+    test_script Kconfiglib/examples/eval_expr.py MODULES
+    test_script Kconfiglib/examples/find_symbol.py X86
+    test_script Kconfiglib/examples/help_grep.py general
+    test_script Kconfiglib/examples/print_sym_info.py MODULES
+    test_script Kconfiglib/examples/print_tree.py
+
+    $py Kconfiglib/examples/menuconfig_example.py Kconfiglib/examples/Kmenuconfig <<END
+BOOL
+n
+END
+    if (($?)); then
+        echo "menuconfig_example.py failed with $py"
+        exit 1
+    fi
+done
+
+echo "everything okay"
diff --git a/support/kconfiglib/tests/sub/Kconfig_symlink_2 b/support/kconfiglib/tests/sub/Kconfig_symlink_2
new file mode 100644
index 0000000..aeba985
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Kconfig_symlink_2
@@ -0,0 +1 @@
+rsource "Kconfig_symlink_3"
diff --git a/support/kconfiglib/tests/sub/Kconfig_symlink_3 b/support/kconfiglib/tests/sub/Kconfig_symlink_3
new file mode 100644
index 0000000..20b4e06
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Kconfig_symlink_3
@@ -0,0 +1,2 @@
+config FOUNDME
+    bool
diff --git a/support/kconfiglib/tests/sub/Klocation_grsourced1 b/support/kconfiglib/tests/sub/Klocation_grsourced1
new file mode 100644
index 0000000..49dac36
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_grsourced1
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_grsourced2 b/support/kconfiglib/tests/sub/Klocation_grsourced2
new file mode 100644
index 0000000..49dac36
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_grsourced2
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_gsourced1 b/support/kconfiglib/tests/sub/Klocation_gsourced1
new file mode 100644
index 0000000..49dac36
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_gsourced1
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_gsourced2 b/support/kconfiglib/tests/sub/Klocation_gsourced2
new file mode 100644
index 0000000..49dac36
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_gsourced2
@@ -0,0 +1 @@
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/Klocation_rsourced b/support/kconfiglib/tests/sub/Klocation_rsourced
new file mode 100644
index 0000000..c6f185d
--- /dev/null
+++ b/support/kconfiglib/tests/sub/Klocation_rsourced
@@ -0,0 +1,2 @@
+
+config MULTI_DEF
diff --git a/support/kconfiglib/tests/sub/defconfig_in_sub b/support/kconfiglib/tests/sub/defconfig_in_sub
new file mode 100644
index 0000000..e69de29
diff --git a/support/kconfiglib/tests/sub/sub/Kconfig_symlink_1 b/support/kconfiglib/tests/sub/sub/Kconfig_symlink_1
new file mode 100644
index 0000000..bceec8b
--- /dev/null
+++ b/support/kconfiglib/tests/sub/sub/Kconfig_symlink_1
@@ -0,0 +1,2 @@
+# Sources tests/sub/Kconfig_symlink_2, with an absolute path
+source "$(KCONFIG_SYMLINK_2)"
diff --git a/support/kconfiglib/tests/symlink b/support/kconfiglib/tests/symlink
new file mode 120000
index 0000000..565623e
--- /dev/null
+++ b/support/kconfiglib/tests/symlink
@@ -0,0 +1 @@
+sub/sub
\ No newline at end of file
diff --git a/support/kconfiglib/testsuite.py b/support/kconfiglib/testsuite.py
new file mode 100644
index 0000000..3a6a3a6
--- /dev/null
+++ b/support/kconfiglib/testsuite.py
@@ -0,0 +1,3136 @@
+# Copyright (c) 2011-2019, Ulf Magnusson
+# SPDX-License-Identifier: ISC
+
+# This is the Kconfiglib test suite. It runs selftests on Kconfigs provided by
+# us and tests compatibility with the C Kconfig implementation by comparing the
+# output of Kconfiglib with the output of the scripts/kconfig/*conf utilities
+# for different targets and defconfigs. It should be run from the top-level
+# kernel directory with
+#
+#   $ python Kconfiglib/testsuite.py
+#
+# Some additional options can be turned on by passing them as arguments. They
+# default to off.
+#
+#  - obsessive:
+#    By default, only valid arch/defconfig pairs are tested. In obsessive mode,
+#    every arch will be tested with every defconfig. Increases the testing time
+#    by an order of magnitude. Occasionally finds (usually obscure) bugs, and I
+#    make sure everything passes with it.
+#
+#  - obsessive-min-config:
+#    Like obsessive, for the minimal configuation (defconfig) tests.
+#
+#  - log:
+#    Log timestamped defconfig test failures to the file test_defconfig_fails.
+#    Handy in obsessive mode.
+#
+# For example, this commands runs the test suite in obsessive mode with logging
+# enabled:
+#
+#   $ python(3) Kconfiglib/testsuite.py obsessive log
+#
+# pypy works too, and runs most tests much faster than CPython.
+#
+# All tests should pass. Report regressions to ulfalizer a.t Google's email
+# service.
+
+import difflib
+import errno
+import os
+import platform
+import re
+import shutil
+import subprocess
+import sys
+import tempfile
+import textwrap
+
+from kconfiglib import Kconfig, Symbol, Choice, COMMENT, MENU, MenuNode, \
+                       BOOL, TRISTATE, HEX, STRING, \
+                       TRI_TO_STR, \
+                       escape, unescape, \
+                       expr_str, expr_value, expr_items, split_expr, \
+                       _ordered_unique, \
+                       OR, AND, \
+                       KconfigError
+
+
+def shell(cmd):
+    with open(os.devnull, "w") as devnull:
+        subprocess.call(cmd, shell=True, stdout=devnull, stderr=devnull)
+
+
+all_passed = True
+
+
+def fail(msg=None):
+    global all_passed
+    all_passed = False
+    if msg is not None:
+        print("fail: " + msg)
+
+
+def verify(cond, msg):
+    if not cond:
+        fail(msg)
+
+
+def verify_equal(x, y):
+    if x != y:
+        fail("'{}' does not equal '{}'".format(x, y))
+
+
+# Prevent accidental loading of configuration files by removing
+# KCONFIG_ALLCONFIG from the environment
+os.environ.pop("KCONFIG_ALLCONFIG", None)
+
+obsessive = False
+obsessive_min_config = False
+log = False
+
+
+def run_tests():
+    global obsessive, log
+    for s in sys.argv[1:]:
+        if s == "obsessive":
+            obsessive = True
+            print("Obsessive mode enabled")
+        elif s == "obsessive-min-config":
+            obsessive_min_config = True
+            print("Obsessive minimal config mode enabled")
+        elif s == "log":
+            log = True
+            print("Log mode enabled")
+        else:
+            print("Unrecognized option '{}'".format(s))
+            return
+
+    run_selftests()
+    run_compatibility_tests()
+
+
+def run_selftests():
+    #
+    # Common helper functions. These all expect 'c' to hold the current
+    # configuration.
+    #
+
+    def verify_value(sym_name, val):
+        # Verifies that a symbol has a particular value.
+
+        if isinstance(val, int):
+            val = TRI_TO_STR[val]
+
+        sym = c.syms[sym_name]
+        verify(sym.str_value == val,
+               'expected {} to have the value "{}", had the value "{}"'
+               .format(sym_name, val, sym.str_value))
+
+    def assign_and_verify_value(sym_name, val, new_val):
+        # Assigns 'val' to a symbol and verifies that its value becomes
+        # 'new_val'. Assumes (and tests) that 'val' is valid for the
+        # symbol type.
+
+        if isinstance(new_val, int):
+            new_val = TRI_TO_STR[new_val]
+
+        sym = c.syms[sym_name]
+        old_val = sym.str_value
+        verify(sym.set_value(val),
+               "assigning '{}' to {} unexpectedly failed"
+               .format(val, sym_name))
+        verify(sym.str_value == new_val,
+               "expected {} to have the value '{}' after being assigned the "
+               "value '{}'. Instead, the value is '{}'. The old value was "
+               "'{}'."
+               .format(sym_name, new_val, val, sym.str_value, old_val))
+
+    def assign_and_verify(sym_name, user_val):
+        # Like assign_and_verify_value(), with the expected value being the
+        # value just set.
+
+        assign_and_verify_value(sym_name, user_val, user_val)
+
+    def assign_and_verify_user_value(sym_name, val, user_val, valid):
+        # Assigns a user value to the symbol and verifies the new user value.
+        # If valid is True, the user value is valid for the type, otherwise
+        # not. This is used to test the set_value() return value.
+
+        sym = c.syms[sym_name]
+        sym_old_user_val = sym.user_value
+
+        verify(sym.set_value(val) == valid,
+               "expected the user value '{}' to be {} for {}, was not"
+               .format(val, "valid" if valid else "invalid", sym_name))
+        verify(sym.user_value == user_val,
+               "the assigned user value '{}' wasn't reflected in user_value "
+               "on the symbol {}. Instead, the new user_value was '{}'. The "
+               "old user value was '{}'."
+               .format(user_val, sym_name, sym.user_value, sym_old_user_val))
+
+    #
+    # Selftests
+    #
+
+    print("Testing string literal lexing")
+
+    # Dummy empty configuration just to get a Kconfig object
+    c = Kconfig("Kconfiglib/tests/empty")
+
+    def verify_string_lex(s, expected):
+        # Verifies that a constant symbol with the name 'res' is produced from
+        # lexing 's'
+
+        res = c._tokenize("if " + s)[1].name
+        verify(res == expected,
+               "expected <{}> to produced the constant symbol <{}>, "
+               'produced <{}>'.format(s[1:-1], expected, res))
+
+    verify_string_lex(r""" "" """, "")
+    verify_string_lex(r""" '' """, "")
+
+    verify_string_lex(r""" "a" """, "a")
+    verify_string_lex(r""" 'a' """, "a")
+    verify_string_lex(r""" "ab" """, "ab")
+    verify_string_lex(r""" 'ab' """, "ab")
+    verify_string_lex(r""" "abc" """, "abc")
+    verify_string_lex(r""" 'abc' """, "abc")
+
+    verify_string_lex(r""" "'" """, "'")
+    verify_string_lex(r""" '"' """, '"')
+
+    verify_string_lex(r""" "\"" """, '"')
+    verify_string_lex(r""" '\'' """, "'")
+
+    verify_string_lex(r""" "\"\"" """, '""')
+    verify_string_lex(r""" '\'\'' """, "''")
+
+    verify_string_lex(r""" "\'" """, "'")
+    verify_string_lex(r""" '\"' """, '"')
+
+    verify_string_lex(r""" "\\" """, "\\")
+    verify_string_lex(r""" '\\' """, "\\")
+
+    verify_string_lex(r""" "\a\\'\b\c\"'d" """, 'a\\\'bc"\'d')
+    verify_string_lex(r""" '\a\\"\b\c\'"d' """, "a\\\"bc'\"d")
+
+    def verify_string_bad(s):
+        # Verifies that tokenizing 's' throws a KconfigError. Strips the first
+        # and last characters from 's' so we can use readable raw strings as
+        # input.
+
+        try:
+            c.eval_string(s)
+        except KconfigError:
+            pass
+        else:
+            fail("expected tokenization of {} to fail, didn't".format(s[1:-1]))
+
+    verify_string_bad(r""" " """)
+    verify_string_bad(r""" ' """)
+    verify_string_bad(r""" "' """)
+    verify_string_bad(r""" '" """)
+    verify_string_bad(r""" "\" """)
+    verify_string_bad(r""" '\' """)
+    verify_string_bad(r""" "foo """)
+    verify_string_bad(r""" 'foo """)
+
+
+    print("Testing escape() and unescape()")
+
+    def verify_escape_unescape(s, sesc):
+        # Verify that 's' escapes to 'sesc' and that 'sesc' unescapes to 's'
+        verify_equal(escape(s), sesc)
+        verify_equal(unescape(sesc), s)
+
+    verify_escape_unescape(r''          , r''              )
+    verify_escape_unescape(r'foo'       , r'foo'           )
+    verify_escape_unescape(r'"'         , r'\"'            )
+    verify_escape_unescape(r'""'        , r'\"\"'          )
+    verify_escape_unescape('\\'         , r'\\'            )
+    verify_escape_unescape(r'\\'        , r'\\\\'          )
+    verify_escape_unescape(r'\"'        , r'\\\"'          )
+    verify_escape_unescape(r'"ab\cd"ef"', r'\"ab\\cd\"ef\"')
+
+    # Backslashes before any character should be unescaped, not just before "
+    # and \
+    verify_equal(unescape(r"\afoo\b\c\\d\\\e\\\\f"), r"afoobc\d\e\\f")
+
+
+    print("Testing _ordered_unique()")
+
+    verify_equal(_ordered_unique([]), [])
+    verify_equal(_ordered_unique([1]), [1])
+    verify_equal(_ordered_unique([1, 2]), [1, 2])
+    verify_equal(_ordered_unique([1, 1]), [1])
+    verify_equal(_ordered_unique([1, 1, 2]), [1, 2])
+    verify_equal(_ordered_unique([1, 2, 1]), [1, 2])
+    verify_equal(_ordered_unique([1, 2, 2]), [1, 2])
+    verify_equal(_ordered_unique([1, 2, 3, 2, 1, 2, 3, 4, 3, 2, 1, 0]),
+                                 [1, 2, 3, 4, 0])
+
+
+    print("Testing expression evaluation")
+
+    c = Kconfig("Kconfiglib/tests/Keval", warn=False)
+
+    def verify_eval(expr, val):
+        res = c.eval_string(expr)
+        verify(res == val,
+               "'{}' evaluated to {}, expected {}".format(expr, res, val))
+
+    # No modules
+    verify_eval("n", 0)
+    verify_eval("m", 0)
+    verify_eval("y", 2)
+    verify_eval("'n'", 0)
+    verify_eval("'m'", 0)
+    verify_eval("'y'", 2)
+    verify_eval("M", 2)
+
+    # Modules
+    c.modules.set_value(2)
+    verify_eval("n", 0)
+    verify_eval("m", 1)
+    verify_eval("y", 2)
+    verify_eval("'n'", 0)
+    verify_eval("'m'", 1)
+    verify_eval("'y'", 2)
+    verify_eval("M", 1)
+    verify_eval("(Y || N) && (m && y)", 1)
+
+    # Non-bool/non-tristate symbols are always n in a tristate sense
+    verify_eval("Y_STRING", 0)
+    verify_eval("Y_STRING || m", 1)
+
+    # As are all constants besides y and m
+    verify_eval('"foo"', 0)
+    verify_eval('"foo" || "bar"', 0)
+    verify_eval('"foo" || m', 1)
+
+    # Test equality for symbols
+
+    verify_eval("N = N", 2)
+    verify_eval("N = n", 2)
+    verify_eval("N = 'n'", 2)
+    verify_eval("N != N", 0)
+    verify_eval("N != n", 0)
+    verify_eval("N != 'n'", 0)
+
+    verify_eval("M = M", 2)
+    verify_eval("M = m", 2)
+    verify_eval("M = 'm'", 2)
+    verify_eval("M != M", 0)
+    verify_eval("M != m", 0)
+    verify_eval("M != 'm'", 0)
+
+    verify_eval("Y = Y", 2)
+    verify_eval("Y = y", 2)
+    verify_eval("Y = 'y'", 2)
+    verify_eval("Y != Y", 0)
+    verify_eval("Y != y", 0)
+    verify_eval("Y != 'y'", 0)
+
+    verify_eval("N != M", 2)
+    verify_eval("N != Y", 2)
+    verify_eval("M != Y", 2)
+
+    verify_eval("Y_STRING = y", 2)
+    verify_eval("Y_STRING = 'y'", 2)
+    verify_eval('FOO_BAR_STRING = "foo bar"', 2)
+    verify_eval('FOO_BAR_STRING != "foo bar baz"', 2)
+    verify_eval('INT_37 = 37', 2)
+    verify_eval("INT_37 = '37'", 2)
+    verify_eval('HEX_0X37 = 0x37', 2)
+    verify_eval("HEX_0X37 = '0x37'", 2)
+
+    # These should also hold after 31847b67 (kconfig: allow use of relations
+    # other than (in)equality)
+    verify_eval("HEX_0X37 = '0x037'", 2)
+    verify_eval("HEX_0X37 = '0x0037'", 2)
+
+    # Constant symbol comparisons
+    verify_eval('"foo" != "bar"', 2)
+    verify_eval('"foo" = "bar"', 0)
+    verify_eval('"foo" = "foo"', 2)
+
+    # Undefined symbols get their name as their value
+    c.warn = False
+    verify_eval("'not_defined' = not_defined", 2)
+    verify_eval("not_defined_2 = not_defined_2", 2)
+    verify_eval("not_defined_1 != not_defined_2", 2)
+
+    # Test less than/greater than
+
+    # Basic evaluation
+    verify_eval("INT_37 < 38", 2)
+    verify_eval("38 < INT_37", 0)
+    verify_eval("INT_37 < '38'", 2)
+    verify_eval("'38' < INT_37", 0)
+    verify_eval("INT_37 < 138", 2)
+    verify_eval("138 < INT_37", 0)
+    verify_eval("INT_37 < '138'", 2)
+    verify_eval("'138' < INT_37", 0)
+    verify_eval("INT_37 < -138", 0)
+    verify_eval("-138 < INT_37", 2)
+    verify_eval("INT_37 < '-138'", 0)
+    verify_eval("'-138' < INT_37", 2)
+    verify_eval("INT_37 < 37", 0)
+    verify_eval("37 < INT_37", 0)
+    verify_eval("INT_37 < 36", 0)
+    verify_eval("36 < INT_37", 2)
+
+    # Different formats in comparison
+    verify_eval("INT_37 < 0x26", 2) # 38
+    verify_eval("INT_37 < 0x25", 0) # 37
+    verify_eval("INT_37 < 0x24", 0) # 36
+    verify_eval("HEX_0X37 < 56", 2) # 0x38
+    verify_eval("HEX_0X37 < 55", 0) # 0x37
+    verify_eval("HEX_0X37 < 54", 0) # 0x36
+
+    # Other int comparisons
+    verify_eval("INT_37 <= 38", 2)
+    verify_eval("INT_37 <= 37", 2)
+    verify_eval("INT_37 <= 36", 0)
+    verify_eval("INT_37 >  38", 0)
+    verify_eval("INT_37 >  37", 0)
+    verify_eval("INT_37 >  36", 2)
+    verify_eval("INT_37 >= 38", 0)
+    verify_eval("INT_37 >= 37", 2)
+    verify_eval("INT_37 >= 36", 2)
+
+    # Other hex comparisons
+    verify_eval("HEX_0X37 <= 0x38", 2)
+    verify_eval("HEX_0X37 <= 0x37", 2)
+    verify_eval("HEX_0X37 <= 0x36", 0)
+    verify_eval("HEX_0X37 >  0x38", 0)
+    verify_eval("HEX_0X37 >  0x37", 0)
+    verify_eval("HEX_0X37 >  0x36", 2)
+    verify_eval("HEX_0X37 >= 0x38", 0)
+    verify_eval("HEX_0X37 >= 0x37", 2)
+    verify_eval("HEX_0X37 >= 0x36", 2)
+
+    # A hex holding a value without a "0x" prefix should still be treated as
+    # hexadecimal
+    verify_eval("HEX_37 < 0x38", 2)
+    verify_eval("HEX_37 < 0x37", 0)
+    verify_eval("HEX_37 < 0x36", 0)
+
+    # Symbol comparisons
+    verify_eval("INT_37   <  HEX_0X37", 2)
+    verify_eval("INT_37   >  HEX_0X37", 0)
+    verify_eval("HEX_0X37 <  INT_37  ", 0)
+    verify_eval("HEX_0X37 >  INT_37  ", 2)
+    verify_eval("INT_37   <  INT_37  ", 0)
+    verify_eval("INT_37   <= INT_37  ", 2)
+    verify_eval("INT_37   >  INT_37  ", 0)
+    verify_eval("INT_37   <= INT_37  ", 2)
+
+    # Tristate value comparisons
+    verify_eval("n < n", 0)
+    verify_eval("n < m", 2)
+    verify_eval("n < y", 2)
+    verify_eval("n < N", 0)
+    verify_eval("n < M", 2)
+    verify_eval("n < Y", 2)
+    verify_eval("0 > n", 0)
+    verify_eval("1 > n", 2)
+    verify_eval("2 > n", 2)
+    verify_eval("m < n", 0)
+    verify_eval("m < m", 0)
+    verify_eval("m < y", 2)
+
+    # Strings compare lexicographically
+    verify_eval("'aa' < 'ab'", 2)
+    verify_eval("'aa' > 'ab'", 0)
+    verify_eval("'ab' < 'aa'", 0)
+    verify_eval("'ab' > 'aa'", 2)
+
+    # Comparisons where one of the operands doesn't parse as a number also give
+    # a lexicographic comparison
+    verify_eval("INT_37 <  '37a' ", 2)
+    verify_eval("'37a'  >  INT_37", 2)
+    verify_eval("INT_37 <= '37a' ", 2)
+    verify_eval("'37a'  >= INT_37", 2)
+    verify_eval("INT_37 >= '37a' ", 0)
+    verify_eval("INT_37 >  '37a' ", 0)
+    verify_eval("'37a'  <  INT_37", 0)
+    verify_eval("'37a'  <= INT_37", 0)
+
+    def verify_eval_bad(expr):
+        try:
+            c.eval_string(expr)
+        except KconfigError:
+            pass
+        else:
+            fail('expected eval_string("{}") to throw KconfigError, '
+                 "didn't".format(expr))
+
+    # Verify that some bad stuff throws KconfigError's
+    verify_eval_bad("")
+    verify_eval_bad("&")
+    verify_eval_bad("|")
+    verify_eval_bad("!")
+    verify_eval_bad("(")
+    verify_eval_bad(")")
+    verify_eval_bad("=")
+    verify_eval_bad("(X")
+    verify_eval_bad("X)")
+    verify_eval_bad("X X")
+    verify_eval_bad("!X X")
+    verify_eval_bad("X !X")
+    verify_eval_bad("(X) X")
+    verify_eval_bad("X &&")
+    verify_eval_bad("&& X")
+    verify_eval_bad("X && && X")
+    verify_eval_bad("X && !&&")
+    verify_eval_bad("X ||")
+    verify_eval_bad("|| X")
+
+
+    print("Testing Symbol.__str__()/custom_str() and def_{int,hex,string}")
+
+    def verify_str(item, s):
+        verify_equal(str(item), s[1:-1])
+
+    def verify_custom_str(item, s):
+        verify_equal(item.custom_str(lambda sc: "[{}]".format(sc.name)),
+                     s[1:-1])
+
+    c = Kconfig("Kconfiglib/tests/Kstr", warn=False)
+
+    c.modules.set_value(2)
+
+    verify_str(c.syms["UNDEFINED"], """
+""")
+
+    verify_str(c.syms["BASIC_NO_PROMPT"], """
+config BASIC_NO_PROMPT
+	bool
+	help
+	  blah blah
+	  
+	    blah blah blah
+	  
+	   blah
+""")
+
+    verify_str(c.syms["BASIC_PROMPT"], """
+config BASIC_PROMPT
+	bool "basic"
+""")
+
+    verify_str(c.syms["ADVANCED"], """
+config ADVANCED
+	tristate "prompt" if DEP
+	default DEFAULT_1
+	default DEFAULT_2 if DEP
+	select SELECTED_1
+	select SELECTED_2 if DEP
+	imply IMPLIED_1
+	imply IMPLIED_2 if DEP
+	help
+	  first help text
+
+config ADVANCED
+	tristate "prompt 2"
+
+menuconfig ADVANCED
+	tristate "prompt 3"
+
+config ADVANCED
+	tristate
+	depends on (A || !B || (C && D) || !(E && F) || G = H || (I && !J && (K || L) && !(M || N) && O = P)) && DEP4 && DEP3
+	help
+	  second help text
+
+config ADVANCED
+	tristate "prompt 4" if VIS
+	depends on DEP4 && DEP3
+""")
+
+    verify_custom_str(c.syms["ADVANCED"], """
+config ADVANCED
+	tristate "prompt" if [DEP]
+	default [DEFAULT_1]
+	default [DEFAULT_2] if [DEP]
+	select [SELECTED_1]
+	select [SELECTED_2] if [DEP]
+	imply [IMPLIED_1]
+	imply [IMPLIED_2] if [DEP]
+	help
+	  first help text
+
+config ADVANCED
+	tristate "prompt 2"
+
+menuconfig ADVANCED
+	tristate "prompt 3"
+
+config ADVANCED
+	tristate
+	depends on ([A] || ![B] || ([C] && [D]) || !([E] && [F]) || [G] = [H] || ([I] && ![J] && ([K] || [L]) && !([M] || [N]) && [O] = [P])) && [DEP4] && [DEP3]
+	help
+	  second help text
+
+config ADVANCED
+	tristate "prompt 4" if [VIS]
+	depends on [DEP4] && [DEP3]
+""")
+
+
+    verify_str(c.syms["ONLY_DIRECT_DEPS"], """
+config ONLY_DIRECT_DEPS
+	int
+	depends on DEP1 && DEP2
+""")
+
+    verify_str(c.syms["STRING"], """
+config STRING
+	string
+	default "foo"
+	default "bar" if DEP
+	default STRING2
+	default STRING3 if DEP
+""")
+
+    verify_str(c.syms["INT"], """
+config INT
+	int
+	range 1 2
+	range FOO BAR
+	range BAZ QAZ if DEP
+	default 7 if DEP
+""")
+
+    verify_str(c.syms["HEX"], """
+config HEX
+	hex
+	range 0x100 0x200
+	range FOO BAR
+	range BAZ QAZ if DEP
+	default 0x123
+""")
+
+    verify_str(c.modules, """
+config MODULES
+	bool "MODULES"
+	option modules
+""")
+
+    verify_str(c.syms["OPTIONS"], """
+config OPTIONS
+	option allnoconfig_y
+	option defconfig_list
+	option env="ENV"
+""")
+
+    verify_str(c.syms["CORRECT_PROP_LOCS_BOOL"], """
+config CORRECT_PROP_LOCS_BOOL
+	bool "prompt 1"
+	default DEFAULT_1
+	default DEFAULT_2
+	select SELECT_1
+	select SELECT_2
+	imply IMPLY_1
+	imply IMPLY_2
+	depends on LOC_1
+	help
+	  help 1
+
+menuconfig CORRECT_PROP_LOCS_BOOL
+	bool "prompt 2"
+	default DEFAULT_3
+	default DEFAULT_4
+	select SELECT_3
+	select SELECT_4
+	imply IMPLY_3
+	imply IMPLY_4
+	depends on LOC_2
+	help
+	  help 2
+
+config CORRECT_PROP_LOCS_BOOL
+	bool "prompt 3"
+	default DEFAULT_5
+	default DEFAULT_6
+	select SELECT_5
+	select SELECT_6
+	imply IMPLY_5
+	imply IMPLY_6
+	depends on LOC_3
+	help
+	  help 2
+""")
+
+    verify_str(c.syms["CORRECT_PROP_LOCS_INT"], """
+config CORRECT_PROP_LOCS_INT
+	int
+	range 1 2
+	range 3 4
+	depends on LOC_1
+
+config CORRECT_PROP_LOCS_INT
+	int
+	range 5 6
+	range 7 8
+	depends on LOC_2
+""")
+
+    verify_str(c.syms["PROMPT_ONLY"], """
+config PROMPT_ONLY
+	prompt "prompt only"
+""")
+
+    verify_custom_str(c.syms["CORRECT_PROP_LOCS_INT"], """
+config CORRECT_PROP_LOCS_INT
+	int
+	range [1] [2]
+	range [3] [4]
+	depends on [LOC_1]
+
+config CORRECT_PROP_LOCS_INT
+	int
+	range [5] [6]
+	range [7] [8]
+	depends on [LOC_2]
+""")
+
+
+
+    print("Testing Choice.__str__()/custom_str()")
+
+    verify_str(c.named_choices["CHOICE"], """
+choice CHOICE
+	tristate "foo"
+	default CHOICE_1
+	default CHOICE_2 if dep
+""")
+
+    verify_str(c.named_choices["CHOICE"].nodes[0].next.item, """
+choice
+	tristate "no name"
+	optional
+""")
+
+    verify_str(c.named_choices["CORRECT_PROP_LOCS_CHOICE"], """
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default CHOICE_3
+	depends on LOC_1
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default CHOICE_4
+	depends on LOC_2
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default CHOICE_5
+	depends on LOC_3
+""")
+
+    verify_custom_str(c.named_choices["CORRECT_PROP_LOCS_CHOICE"], """
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default [CHOICE_3]
+	depends on [LOC_1]
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default [CHOICE_4]
+	depends on [LOC_2]
+
+choice CORRECT_PROP_LOCS_CHOICE
+	bool
+	default [CHOICE_5]
+	depends on [LOC_3]
+""")
+
+
+    print("Testing MenuNode.__str__()/custom_str() for menus and comments")
+
+    verify_str(c.syms["SIMPLE_MENU_HOOK"].nodes[0].next, """
+menu "simple menu"
+""")
+
+    verify_str(c.syms["ADVANCED_MENU_HOOK"].nodes[0].next, """
+menu "advanced menu"
+	depends on A
+	visible if B && (C || D)
+""")
+
+    verify_custom_str(c.syms["ADVANCED_MENU_HOOK"].nodes[0].next, """
+menu "advanced menu"
+	depends on [A]
+	visible if [B] && ([C] || [D])
+""")
+
+    verify_str(c.syms["SIMPLE_COMMENT_HOOK"].nodes[0].next, """
+comment "simple comment"
+""")
+
+    verify_str(c.syms["ADVANCED_COMMENT_HOOK"].nodes[0].next, """
+comment "advanced comment"
+	depends on A && B
+""")
+
+    verify_custom_str(c.syms["ADVANCED_COMMENT_HOOK"].nodes[0].next, """
+comment "advanced comment"
+	depends on [A] && [B]
+""")
+
+
+    print("Testing {MenuNode,Symbol,Choice}.orig_*")
+
+    # Just test some corner cases here re. MenuNode.orig_*. They are already
+    # indirectly tested above. Use MenuNode.__str__() as a proxy.
+
+    verify_str(c.syms["DEP_REM_CORNER_CASES"], """
+config DEP_REM_CORNER_CASES
+	bool
+	default A
+	depends on n
+
+config DEP_REM_CORNER_CASES
+	bool
+	default B if n
+
+config DEP_REM_CORNER_CASES
+	bool
+	default C
+	depends on m && MODULES
+
+config DEP_REM_CORNER_CASES
+	bool
+	default D if A
+
+config DEP_REM_CORNER_CASES
+	bool
+	default E if !E1
+	default F if F1 = F2
+	default G if G1 || H1
+	depends on !H
+
+config DEP_REM_CORNER_CASES
+	bool
+	default H
+	depends on "foo" = "bar"
+
+config DEP_REM_CORNER_CASES
+	bool "prompt" if FOO || BAR
+	depends on BAZ && QAZ
+""")
+
+    # Test {Symbol,Choice}.orig_*
+
+    def verify_deps(elms, dep_index, expected):
+        verify_equal(" ".join(expr_str(elm[dep_index]) for elm in elms),
+                     expected)
+
+    verify_deps(c.syms["BOOL_SYM_ORIG"].orig_defaults,        1, "DEP y y")
+    verify_deps(c.syms["BOOL_SYM_ORIG"].orig_selects,         1, "y DEP y")
+    verify_deps(c.syms["BOOL_SYM_ORIG"].orig_implies,         1, "y y DEP")
+    verify_deps(c.syms["INT_SYM_ORIG"].orig_ranges,           2, "DEP y DEP")
+    verify_deps(c.named_choices["CHOICE_ORIG"].orig_defaults, 1, "y DEP DEP")
+
+
+    print("Testing Symbol.__repr__()")
+
+    def verify_repr(item, s):
+        verify_equal(repr(item) + "\n", s[1:])
+
+    c = Kconfig("Kconfiglib/tests/Krepr", warn=False)
+
+    verify_repr(c.n, """
+<symbol n, tristate, value n, constant>
+""")
+
+    verify_repr(c.m, """
+<symbol m, tristate, value m, constant>
+""")
+
+    verify_repr(c.y, """
+<symbol y, tristate, value y, constant>
+""")
+
+    verify_repr(c.syms["UNDEFINED"], """
+<symbol UNDEFINED, unknown, value "UNDEFINED", visibility n, direct deps n, undefined>
+""")
+
+    verify_repr(c.syms["BASIC"], """
+<symbol BASIC, bool, value y, visibility n, direct deps y, Kconfiglib/tests/Krepr:9>
+""")
+
+    verify_repr(c.syms["VISIBLE"], """
+<symbol VISIBLE, bool, "visible", value n, visibility y, direct deps y, Kconfiglib/tests/Krepr:14>
+""")
+
+    c.syms["VISIBLE"].set_value(2)
+    c.syms["STRING"].set_value("foo")
+
+    verify_repr(c.syms["VISIBLE"], """
+<symbol VISIBLE, bool, "visible", value y, user value y, visibility y, direct deps y, Kconfiglib/tests/Krepr:14>
+""")
+
+    verify_repr(c.syms["STRING"], """
+<symbol STRING, string, "visible", value "foo", user value "foo", visibility y, direct deps y, Kconfiglib/tests/Krepr:17>
+""")
+
+    verify_repr(c.syms["DIR_DEP_N"], """
+<symbol DIR_DEP_N, unknown, value "DIR_DEP_N", visibility n, direct deps n, Kconfiglib/tests/Krepr:20>
+""")
+
+    verify_repr(c.syms["OPTIONS"], """
+<symbol OPTIONS, unknown, value "OPTIONS", visibility n, allnoconfig_y, is the defconfig_list symbol, from environment variable ENV, direct deps y, Kconfiglib/tests/Krepr:23>
+""")
+
+    verify_repr(c.syms["MULTI_DEF"], """
+<symbol MULTI_DEF, unknown, value "MULTI_DEF", visibility n, direct deps y, Kconfiglib/tests/Krepr:28, Kconfiglib/tests/Krepr:29>
+""")
+
+    verify_repr(c.syms["CHOICE_1"], """
+<symbol CHOICE_1, tristate, "choice sym", value n, visibility m, choice symbol, direct deps m, Kconfiglib/tests/Krepr:36>
+""")
+
+    verify_repr(c.modules, """
+<symbol MODULES, bool, value y, visibility n, is the modules symbol, direct deps y, Kconfiglib/tests/Krepr:1>
+""")
+
+
+    print("Testing Choice.__repr__()")
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode m, visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    c.named_choices["CHOICE"].set_value(2)
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode y, user mode y, CHOICE_1 selected, visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    c.syms["CHOICE_2"].set_value(2)
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode y, user mode y, CHOICE_2 selected, CHOICE_2 selected by user, visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    c.named_choices["CHOICE"].set_value(1)
+
+    verify_repr(c.named_choices["CHOICE"], """
+<choice CHOICE, tristate, "choice", mode m, user mode m, CHOICE_2 selected by user (overridden), visibility y, Kconfiglib/tests/Krepr:33>
+""")
+
+    verify_repr(c.syms["CHOICE_HOOK"].nodes[0].next.item, """
+<choice, tristate, "optional choice", mode n, visibility n, optional, Kconfiglib/tests/Krepr:46>
+""")
+
+
+    print("Testing MenuNode.__repr__()")
+
+    verify_repr(c.syms["BASIC"].nodes[0], """
+<menu node for symbol BASIC, deps y, has help, has next, Kconfiglib/tests/Krepr:9>
+""")
+
+    verify_repr(c.syms["DIR_DEP_N"].nodes[0], """
+<menu node for symbol DIR_DEP_N, deps n, has next, Kconfiglib/tests/Krepr:20>
+""")
+
+    verify_repr(c.syms["MULTI_DEF"].nodes[0], """
+<menu node for symbol MULTI_DEF, deps y, has next, Kconfiglib/tests/Krepr:28>
+""")
+
+    verify_repr(c.syms["MULTI_DEF"].nodes[1], """
+<menu node for symbol MULTI_DEF, deps y, has next, Kconfiglib/tests/Krepr:29>
+""")
+
+    verify_repr(c.syms["MENUCONFIG"].nodes[0], """
+<menu node for symbol MENUCONFIG, is menuconfig, deps y, has next, Kconfiglib/tests/Krepr:31>
+""")
+
+    verify_repr(c.named_choices["CHOICE"].nodes[0], """
+<menu node for choice CHOICE, prompt "choice" (visibility y), deps y, has child, has next, Kconfiglib/tests/Krepr:33>
+""")
+
+    verify_repr(c.syms["CHOICE_HOOK"].nodes[0].next, """
+<menu node for choice, prompt "optional choice" (visibility n), deps y, has next, Kconfiglib/tests/Krepr:46>
+""")
+
+    verify_repr(c.syms["NO_VISIBLE_IF_HOOK"].nodes[0].next, """
+<menu node for menu, prompt "no visible if" (visibility y), deps y, 'visible if' deps y, has next, Kconfiglib/tests/Krepr:53>
+""")
+
+    verify_repr(c.syms["VISIBLE_IF_HOOK"].nodes[0].next, """
+<menu node for menu, prompt "visible if" (visibility y), deps y, 'visible if' deps m, has next, Kconfiglib/tests/Krepr:58>
+""")
+
+    verify_repr(c.syms["COMMENT_HOOK"].nodes[0].next, """
+<menu node for comment, prompt "comment" (visibility y), deps y, Kconfiglib/tests/Krepr:64>
+""")
+
+
+    print("Testing Kconfig.__repr__()")
+
+    verify_repr(c, """
+<configuration with 15 symbols, main menu prompt "Main menu", srctree is current directory, config symbol prefix "CONFIG_", warnings disabled, printing of warnings to stderr enabled, undef. symbol assignment warnings disabled, overriding symbol assignment warnings enabled, redundant symbol assignment warnings enabled>
+""")
+
+    os.environ["srctree"] = "Kconfiglib"
+    os.environ["CONFIG_"] = "CONFIG_ value"
+
+    c = Kconfig("tests/Krepr", warn=False)
+    c.warn = True
+    c.warn_to_stderr = False
+    c.warn_assign_override = False
+    c.warn_assign_redun = False
+    c.warn_assign_undef = True
+
+    verify_repr(c, """
+<configuration with 15 symbols, main menu prompt "Main menu", srctree "Kconfiglib", config symbol prefix "CONFIG_ value", warnings enabled, printing of warnings to stderr disabled, undef. symbol assignment warnings enabled, overriding symbol assignment warnings disabled, redundant symbol assignment warnings disabled>
+""")
+
+    os.environ.pop("srctree", None)
+    os.environ.pop("CONFIG_", None)
+
+
+    print("Testing tricky help strings")
+
+    c = Kconfig("Kconfiglib/tests/Khelp")
+
+    def verify_help(node, s):
+        verify_equal(node.help, s[1:-1])
+
+    verify_help(c.syms["TWO_HELP_STRINGS"].nodes[0], """
+first help string
+""")
+
+    verify_help(c.syms["TWO_HELP_STRINGS"].nodes[1], """
+second help string
+""")
+
+    verify_help(c.syms["NO_BLANK_AFTER_HELP"].nodes[0], """
+help for
+NO_BLANK_AFTER_HELP
+""")
+
+    verify_help(c.named_choices["CHOICE_HELP"].nodes[0], """
+help for
+CHOICE_HELP
+""")
+
+    verify_help(c.syms["HELP_TERMINATED_BY_COMMENT"].nodes[0], """
+a
+b
+c
+""")
+
+    verify_help(c.syms["TRICKY_HELP"].nodes[0], """
+a
+ b
+  c
+
+ d
+  e
+   f
+
+
+g
+ h
+  i
+""")
+
+
+    print("Testing locations, source/rsource/gsource/grsource, and "
+          "Kconfig.kconfig_filenames")
+
+    def verify_locations(nodes, *expected_locs):
+        verify(len(nodes) == len(expected_locs),
+               "Wrong number of locations for " + repr(nodes))
+
+        for node, expected_loc in zip(nodes, expected_locs):
+            node_loc = "{}:{}".format(node.filename, node.linenr)
+            verify(node_loc == expected_loc,
+                   "expected {} to have the location {}, had the location {}"
+                   .format(repr(node), expected_loc, node_loc))
+
+    # Expanded in the 'source' statement in Klocation
+
+    os.environ["TESTS_DIR_FROM_ENV"] = "tests"
+    os.environ["SUB_DIR_FROM_ENV"] = "sub"
+
+    os.environ["_SOURCED"] = "_sourced"
+    os.environ["_RSOURCED"] = "_rsourced"
+    os.environ["_GSOURCED"] = "_gsourced"
+    os.environ["_GRSOURCED"] = "_grsourced"
+
+    # Test twice, with $srctree as a relative and an absolute path,
+    # respectively
+    for srctree in "Kconfiglib", os.path.abspath("Kconfiglib"):
+        os.environ["srctree"] = srctree
+
+        # Has symbol with empty help text, so disable warnings
+        c = Kconfig("tests/Klocation", warn=False)
+
+        verify_locations(c.syms["SINGLE_DEF"].nodes, "tests/Klocation:4")
+
+        verify_locations(c.syms["MULTI_DEF"].nodes,
+          "tests/Klocation:7",
+          "tests/Klocation:37",
+          "tests/Klocation:39",
+          "tests/Klocation_sourced:3",
+          "tests/sub/Klocation_rsourced:2",
+          "tests/sub/Klocation_gsourced1:1",
+          "tests/sub/Klocation_gsourced2:1",
+          "tests/sub/Klocation_gsourced1:1",
+          "tests/sub/Klocation_gsourced2:1",
+          "tests/sub/Klocation_grsourced1:1",
+          "tests/sub/Klocation_grsourced2:1",
+          "tests/sub/Klocation_grsourced1:1",
+          "tests/sub/Klocation_grsourced2:1",
+          "tests/Klocation:72")
+
+        verify_locations(c.named_choices["CHOICE"].nodes,
+                         "tests/Klocation_sourced:5")
+
+        verify_locations([c.syms["MENU_HOOK"].nodes[0].next],
+                         "tests/Klocation_sourced:12")
+
+        verify_locations([c.syms["COMMENT_HOOK"].nodes[0].next],
+                         "tests/Klocation_sourced:18")
+
+        # Test Kconfig.kconfig_filenames
+
+        verify_equal(c.kconfig_filenames, [
+            "tests/Klocation",
+            "tests/Klocation_sourced",
+            "tests/sub/Klocation_rsourced",
+            "tests/sub/Klocation_gsourced1",
+            "tests/sub/Klocation_gsourced2",
+            "tests/sub/Klocation_gsourced1",
+            "tests/sub/Klocation_gsourced2",
+            "tests/sub/Klocation_grsourced1",
+            "tests/sub/Klocation_grsourced2",
+            "tests/sub/Klocation_grsourced1",
+            "tests/sub/Klocation_grsourced2"
+        ])
+
+        # Test recursive 'source' detection
+
+        try:
+            Kconfig("tests/Krecursive1")
+        except KconfigError as e:
+            verify_equal(str(e), """
+tests/Krecursive2:1: recursive 'source' of 'tests/Krecursive1' detected. Check that environment variables are set correctly.
+Include path:
+tests/Krecursive1:1
+tests/Krecursive2:1
+"""[:-1])
+        except:
+            fail("recursive 'source' raised wrong exception")
+        else:
+            fail("recursive 'source' did not raise exception")
+
+        # Verify that source and rsource throw exceptions for missing files
+
+        # TODO: Make an exception test helper
+
+        try:
+            Kconfig("tests/Kmissingsource")
+        except KconfigError as e:
+            if "not found" not in str(e):
+                fail("'source' with missing file raised wrong KconfigError")
+        except:
+            fail("'source' with missing file raised wrong exception")
+        else:
+            fail("'source' with missing file did not raise exception")
+
+        try:
+            Kconfig("tests/Kmissingrsource")
+        except KconfigError as e:
+            if "not found" not in str(e):
+                fail("'rsource' with missing file raised wrong KconfigError")
+        except:
+            fail("'rsource' with missing file raised wrong exception")
+        else:
+            fail("'rsource' with missing file did not raise exception")
+
+    # Test a tricky case involving symlinks. $srctree is tests/symlink, which
+    # points to tests/sub/sub, meaning tests/symlink/.. != tests/. Previously,
+    # using 'rsource' from a file sourced with an absolute path triggered an
+    # unsafe relpath() with tests/symlink/.. in it, crashing.
+
+    os.environ["srctree"] = "Kconfiglib/tests/symlink"
+    os.environ["KCONFIG_SYMLINK_2"] = os.path.abspath(
+        "Kconfiglib/tests/sub/Kconfig_symlink_2")
+    if not os.path.isabs(
+        Kconfig("Kconfig_symlink_1").syms["FOUNDME"].nodes[0].filename):
+
+        fail("Symlink + rsource issues")
+
+
+    print("Testing Kconfig.node_iter()")
+
+    # Reuse tests/Klocation. The node_iter(unique_syms=True) case already gets
+    # plenty of testing from write_config() as well.
+
+    os.environ["srctree"] = "Kconfiglib"
+    c = Kconfig("tests/Klocation", warn=False)
+
+    verify_equal(
+        [node.item.name for node in c.node_iter()
+         if isinstance(node.item, Symbol)],
+        ["SINGLE_DEF", "MULTI_DEF", "HELP_1", "HELP_2", "HELP_3", "MULTI_DEF",
+         "MULTI_DEF", "MULTI_DEF", "MENU_HOOK", "COMMENT_HOOK"] + \
+        10*["MULTI_DEF"])
+
+    verify_equal(
+        [node.item.name for node in c.node_iter(True)
+         if isinstance(node.item, Symbol)],
+        ["SINGLE_DEF", "MULTI_DEF", "HELP_1", "HELP_2", "HELP_3", "MENU_HOOK",
+         "COMMENT_HOOK"])
+
+    verify_equal(
+        [node.prompt[0] for node in c.node_iter()
+         if not isinstance(node.item, Symbol)],
+        ["choice", "menu", "comment"])
+
+    verify_equal(
+        [node.prompt[0] for node in c.node_iter(True)
+         if not isinstance(node.item, Symbol)],
+        ["choice", "menu", "comment"])
+
+
+    print("Testing MenuNode.include_path")
+
+    os.environ["srctree"] = "Kconfiglib/tests"
+
+    c = Kconfig("Kinclude_path")
+
+    def verify_node_path(node, *expected):
+        if node.include_path != expected:
+            fail("Wrong include path for node {!r}. Got {}, expected {}."
+                 .format(node, node.include_path, expected))
+
+    def verify_sym_path(sym_name, node_i, *expected):
+        verify_node_path(c.syms[sym_name].nodes[node_i], *expected)
+
+    verify_sym_path("TOP", 0)
+    verify_sym_path("TOP", 1)
+    verify_sym_path("TOP", 2)
+
+    verify_sym_path("ONE_DOWN", 0, ("Kinclude_path", 4))
+    verify_sym_path("ONE_DOWN", 1, ("Kinclude_path", 4))
+    verify_sym_path("ONE_DOWN", 2, ("Kinclude_path", 4))
+    verify_sym_path("ONE_DOWN", 3, ("Kinclude_path", 9))
+    verify_sym_path("ONE_DOWN", 4, ("Kinclude_path", 9))
+    verify_sym_path("ONE_DOWN", 5, ("Kinclude_path", 9))
+
+    verify_sym_path("TWO_DOWN", 0,
+                    ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+    verify_sym_path("TWO_DOWN", 1,
+                    ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 9))
+    verify_sym_path("TWO_DOWN", 2,
+                    ("Kinclude_path", 9), ("Kinclude_path_sourced_1", 4))
+    verify_sym_path("TWO_DOWN", 3,
+                    ("Kinclude_path", 9), ("Kinclude_path_sourced_1", 9))
+
+    verify_node_path(c.top_node)
+    verify_node_path(c.menus[0], ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+    verify_node_path(c.comments[0], ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+    verify_node_path(c.choices[0].nodes[0], ("Kinclude_path", 4), ("Kinclude_path_sourced_1", 4))
+
+    os.environ.pop("srctree", None)
+
+
+    print("Testing Kconfig.choices/menus/comments")
+
+    c = Kconfig("Kconfiglib/tests/Kitemlists")
+
+    def verify_prompts(items, *expected_prompts):
+        verify(len(items) == len(expected_prompts),
+               "Wrong number of prompts for {}".format(items))
+
+        for item, expected_prompt in zip(items, expected_prompts):
+            if not isinstance(item, MenuNode):
+                item = item.nodes[0]
+
+            verify(item.prompt[0] == expected_prompt,
+                   "Wrong prompt for {}, expected '{}'"
+                   .format(repr(item), expected_prompt))
+
+    verify_prompts(c.choices, "choice 1", "choice 2", "choice 3", "choice 2")
+    verify_prompts(c.menus, "menu 1", "menu 2", "menu 3", "menu 4", "menu 5")
+    verify_prompts(c.comments, "comment 1", "comment 2", "comment 3")
+
+
+    print("Testing Symbol/Choice.direct_dep")
+
+    c = Kconfig("Kconfiglib/tests/Kdirdep")
+
+    verify_equal(expr_str(c.syms["NO_DEP_SYM"].direct_dep), 'y')
+    verify_equal(expr_str(c.syms["DEP_SYM"].direct_dep), "A || (B && C) || !D")
+
+    verify_equal(expr_str(c.named_choices["NO_DEP_CHOICE"].direct_dep), 'y')
+    verify_equal(expr_str(c.named_choices["DEP_CHOICE"].direct_dep),
+                 "A || B || C")
+
+
+    print("Testing expr_items()")
+
+    c = Kconfig("Kconfiglib/tests/Kexpr_items")
+
+    def verify_expr_items(expr, *sym_names):
+        verify_equal(tuple(sorted(item.name for item in expr_items(expr))),
+                     sym_names)
+
+    verify_expr_items(
+        c.syms["TEST"].defaults[0][0],
+        "A", "B", "C", "D", "E", "F", "G", "H"
+    )
+
+    verify_expr_items(
+        c.syms["TEST_CHOICE"].nodes[0].prompt[1],
+        "A", "CHOICE"
+    )
+
+
+    print("Testing MenuNode/Symbol/Choice.referenced")
+
+    c = Kconfig("Kconfiglib/tests/Kreferenced", warn=False)
+
+    def verify_deps(item, *dep_names):
+        verify_equal(tuple(sorted(item.name for item in item.referenced)),
+                     dep_names)
+
+    verify_deps(c.top_node, "y")
+
+    verify_deps(c.syms["NO_REFS"].nodes[0], "y")
+
+    verify_deps(c.syms["JUST_DEPENDS_ON_REFS"].nodes[0], "A", "B")
+
+    verify_deps(c.syms["LOTS_OF_REFS"].nodes[0],
+                *(chr(n) for n in range(ord("A"), ord("Z") + 1)))
+
+    verify_deps(c.syms["INT_REFS"].nodes[0],
+                "A", "B", "C", "D", "E", "F", "G", "H", "y")
+
+    verify_deps(c.syms["CHOICE_REF"].nodes[0], "CHOICE")
+
+    verify_deps(c.menus[0], "A", "B", "C", "D")
+
+    verify_deps(c.comments[0], "A", "B")
+
+    verify_deps(c.syms["MULTI_DEF_SYM"], "A", "B", "C", "y")
+    verify_deps(c.named_choices["MULTI_DEF_CHOICE"], "A", "B", "C")
+
+
+    print("Testing split_expr()")
+
+    c = Kconfig("Kconfiglib/tests/empty")
+    c.warn = False
+
+    def verify_split(to_split, op, operand_strs):
+        # The same hackage as in Kconfig.eval_string()
+        c._tokens = c._tokenize("if " + to_split)[1:]
+        c._tokens_i = 0
+
+        operands = split_expr(c._parse_expr(False), op)
+
+        verify(len(operands) == len(operand_strs),
+               "Wrong number of operands when {} was split by {}"
+               .format(to_split, "OR" if op == OR else "AND"))
+
+        for operand, operand_str in zip(operands, operand_strs):
+            verify_equal(expr_str(operand), operand_str)
+
+    verify_split("A",                    OR, ("A",                ))
+    verify_split("!A",                   OR, ("!A",               ))
+    verify_split("A = B",                OR, ("A = B",            ))
+    verify_split("A && B",               OR, ("A && B",           ))
+    verify_split("A || B",               OR, ("A", "B"            ))
+    verify_split("(A || B) || C",        OR, ("A", "B", "C"       ))
+    verify_split("A || (B || C)",        OR, ("A", "B", "C"       ))
+    verify_split("A || !(B || C)",       OR, ("A", "!(B || C)"    ))
+    verify_split("A || (B && (C || D))", OR, ("A", "B && (C || D)"))
+    verify_split("(A && (B || C)) || D", OR, ("A && (B || C)", "D"))
+
+    verify_split("A",                    AND, ("A",                ))
+    verify_split("!A",                   AND, ("!A",               ))
+    verify_split("A = B",                AND, ("A = B",            ))
+    verify_split("A || B",               AND, ("A || B",           ))
+    verify_split("A && B",               AND, ("A", "B"            ))
+    verify_split("(A && B) && C",        AND, ("A", "B", "C"       ))
+    verify_split("A && (B && C)",        AND, ("A", "B", "C"       ))
+    verify_split("A && !(B && C)",       AND, ("A", "!(B && C)"    ))
+    verify_split("A && (B || (C && D))", AND, ("A", "B || (C && D)"))
+    verify_split("(A || (B && C)) && D", AND, ("A || (B && C)", "D"))
+
+
+    print("Testing visibility")
+
+    c = Kconfig("Kconfiglib/tests/Kvisibility")
+
+    def verify_visibility(item, no_module_vis, module_vis):
+        c.modules.set_value(0)
+        verify(item.visibility == no_module_vis,
+               "expected {} to have visibility {} without modules, had "
+               "visibility {}".
+               format(repr(item), no_module_vis, item.visibility))
+
+        c.modules.set_value(2)
+        verify(item.visibility == module_vis,
+               "expected {} to have visibility {} with modules, had "
+               "visibility {}".
+               format(repr(item), module_vis, item.visibility))
+
+    # Symbol visibility
+
+    verify_visibility(c.syms["NO_PROMPT"],     0, 0)
+    verify_visibility(c.syms["BOOL_N"],        0, 0)
+    verify_visibility(c.syms["BOOL_M"],        0, 2)
+    verify_visibility(c.syms["BOOL_MOD"],      2, 2)
+    verify_visibility(c.syms["BOOL_Y"],        2, 2)
+    verify_visibility(c.syms["TRISTATE_M"],    0, 1)
+    verify_visibility(c.syms["TRISTATE_MOD"],  2, 1)
+    verify_visibility(c.syms["TRISTATE_Y"],    2, 2)
+    verify_visibility(c.syms["BOOL_IF_N"],     0, 0)
+    verify_visibility(c.syms["BOOL_IF_M"],     0, 2)
+    verify_visibility(c.syms["BOOL_IF_Y"],     2, 2)
+    verify_visibility(c.syms["BOOL_MENU_N"],   0, 0)
+    verify_visibility(c.syms["BOOL_MENU_M"],   0, 2)
+    verify_visibility(c.syms["BOOL_MENU_Y"],   2, 2)
+    verify_visibility(c.syms["BOOL_CHOICE_N"], 0, 0)
+
+    # Non-tristate symbols in tristate choices are only visible if the choice
+    # is in y mode
+
+    # The choice can't be brought to y mode because of the 'if m'
+    verify_visibility(c.syms["BOOL_CHOICE_M"], 0, 0)
+    c.syms["BOOL_CHOICE_M"].choice.set_value(2)
+    verify_visibility(c.syms["BOOL_CHOICE_M"], 0, 0)
+
+    # The choice gets y mode only when running without modules, because it
+    # defaults to m mode
+    verify_visibility(c.syms["BOOL_CHOICE_Y"], 2, 0)
+    c.syms["BOOL_CHOICE_Y"].choice.set_value(2)
+    # When set to y mode, the choice symbol becomes visible both with and
+    # without modules
+    verify_visibility(c.syms["BOOL_CHOICE_Y"], 2, 2)
+
+    verify_visibility(c.syms["TRISTATE_IF_N"],     0, 0)
+    verify_visibility(c.syms["TRISTATE_IF_M"],     0, 1)
+    verify_visibility(c.syms["TRISTATE_IF_Y"],     2, 2)
+    verify_visibility(c.syms["TRISTATE_MENU_N"],   0, 0)
+    verify_visibility(c.syms["TRISTATE_MENU_M"],   0, 1)
+    verify_visibility(c.syms["TRISTATE_MENU_Y"],   2, 2)
+    verify_visibility(c.syms["TRISTATE_CHOICE_N"], 0, 0)
+    verify_visibility(c.syms["TRISTATE_CHOICE_M"], 0, 1)
+    verify_visibility(c.syms["TRISTATE_CHOICE_Y"], 2, 2)
+
+    verify_visibility(c.named_choices["BOOL_CHOICE_N"],     0, 0)
+    verify_visibility(c.named_choices["BOOL_CHOICE_M"],     0, 2)
+    verify_visibility(c.named_choices["BOOL_CHOICE_Y"],     2, 2)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_N"], 0, 0)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_M"], 0, 1)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_Y"], 2, 2)
+
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_IF_M_AND_Y"],   0, 1)
+    verify_visibility(c.named_choices["TRISTATE_CHOICE_MENU_N_AND_Y"], 0, 0)
+
+    # Verify that 'visible if' visibility gets propagated to prompts
+
+    verify_visibility(c.syms["VISIBLE_IF_N"], 0, 0)
+    verify_visibility(c.syms["VISIBLE_IF_M"], 0, 1)
+    verify_visibility(c.syms["VISIBLE_IF_Y"], 2, 2)
+    verify_visibility(c.syms["VISIBLE_IF_M_2"], 0, 1)
+
+    # Verify that string/int/hex symbols with m visibility accept a user value
+
+    assign_and_verify("STRING_m", "foo bar")
+    assign_and_verify("INT_m", "123")
+    assign_and_verify("HEX_m", "0x123")
+
+
+    print("Testing .assignable")
+
+    c = Kconfig("Kconfiglib/tests/Kassignable")
+
+    def verify_assignable_imp(item, assignable_no_modules, assignable_modules):
+        # Verifies the assignable values for 'item', with and without modules.
+
+        for modules_val, assignable in (0, assignable_no_modules), \
+                                       (2, assignable_modules):
+
+            c.modules.set_value(modules_val)
+            module_msg = "without modules" if modules_val == 0 else \
+                         "with modules"
+
+            verify(item.assignable == assignable,
+                   "Incorrect assignable values for {} {}. Should be {}, "
+                   "was {}."
+                   .format(item.name, module_msg, assignable, item.assignable))
+
+            # Verify that the values can actually be assigned too
+
+            for val in item.assignable:
+                item.set_value(val)
+                verify(item.tri_value == val,
+                       "Unable to set {} to {} {}, even though it was in "
+                       ".assignable".format(item.name, val, module_msg))
+
+    def verify_assignable(sym_name, assignable_no_modules, assignable_modules):
+        verify_assignable_imp(c.syms[sym_name],
+                              assignable_no_modules,
+                              assignable_modules)
+
+    def verify_const_unassignable(sym_name):
+        verify_assignable_imp(c.const_syms[sym_name], (), ())
+
+    # Things that shouldn't be .assignable
+    verify_const_unassignable("n")
+    verify_const_unassignable("m")
+    verify_const_unassignable("y")
+    verify_const_unassignable("const")
+    verify_assignable("UNDEFINED", (), ())
+    verify_assignable("NO_PROMPT", (), ())
+    verify_assignable("STRING", (), ())
+    verify_assignable("INT", (), ())
+    verify_assignable("HEX", (), ())
+
+    # Non-selected symbols
+    verify_assignable("Y_VIS_BOOL", (0, 2), (0,    2))
+    verify_assignable("M_VIS_BOOL", (    ), (0,    2))  # Vis. promoted
+    verify_assignable("N_VIS_BOOL", (    ), (       ))
+    verify_assignable("Y_VIS_TRI",  (0, 2), (0, 1, 2))
+    verify_assignable("M_VIS_TRI",  (    ), (0, 1   ))
+    verify_assignable("N_VIS_TRI",  (    ), (       ))
+
+    # Symbols selected to y
+    verify_assignable("Y_SEL_Y_VIS_BOOL", (2,), (2,))
+    verify_assignable("Y_SEL_M_VIS_BOOL", (  ), (2,))  # Vis. promoted
+    verify_assignable("Y_SEL_N_VIS_BOOL", (  ), (  ))
+    verify_assignable("Y_SEL_Y_VIS_TRI",  (2,), (2,))
+    verify_assignable("Y_SEL_M_VIS_TRI",  (  ), (2,))
+    verify_assignable("Y_SEL_N_VIS_TRI",  (  ), (  ))
+
+    # Symbols selected to m
+    verify_assignable("M_SEL_Y_VIS_BOOL", (2,), (   2,))  # Value promoted
+    verify_assignable("M_SEL_M_VIS_BOOL", (  ), (   2,))  # Vis./value promoted
+    verify_assignable("M_SEL_N_VIS_BOOL", (  ), (     ))
+    verify_assignable("M_SEL_Y_VIS_TRI",  (2,), (1, 2 ))
+    verify_assignable("M_SEL_M_VIS_TRI",  (  ), (1,   ))
+    verify_assignable("M_SEL_N_VIS_TRI",  (  ), (     ))
+
+    # Symbols implied to y
+    verify_assignable("Y_IMP_Y_VIS_BOOL", (0, 2), (0, 2))
+    verify_assignable("Y_IMP_M_VIS_BOOL", (    ), (0, 2))  # Vis. promoted
+    verify_assignable("Y_IMP_N_VIS_BOOL", (    ), (    ))
+    verify_assignable("Y_IMP_Y_VIS_TRI",  (0, 2), (0, 2))  # m removed by imply
+    verify_assignable("Y_IMP_M_VIS_TRI",  (    ), (0, 2))  # m promoted to y by imply
+    verify_assignable("Y_IMP_N_VIS_TRI",  (    ), (    ))
+
+    # Symbols implied to m (never affects assignable values)
+    verify_assignable("M_IMP_Y_VIS_BOOL", (0, 2), (0,    2))
+    verify_assignable("M_IMP_M_VIS_BOOL", (    ), (0,    2))  # Vis. promoted
+    verify_assignable("M_IMP_N_VIS_BOOL", (    ), (       ))
+    verify_assignable("M_IMP_Y_VIS_TRI",  (0, 2), (0, 1, 2))
+    verify_assignable("M_IMP_M_VIS_TRI",  (    ), (0, 1   ))
+    verify_assignable("M_IMP_N_VIS_TRI",  (    ), (       ))
+
+    # Symbols in y-mode choice
+    verify_assignable("Y_CHOICE_BOOL",           (2,), (2,))
+    verify_assignable("Y_CHOICE_TRISTATE",       (2,), (2,))
+    verify_assignable("Y_CHOICE_N_VIS_TRISTATE", (  ), (  ))
+
+    # Symbols in m/y-mode choice, starting out in m mode, or y mode when
+    # running without modules
+    verify_assignable("MY_CHOICE_BOOL",           (2,), (    ))
+    verify_assignable("MY_CHOICE_TRISTATE",       (2,), (0, 1))
+    verify_assignable("MY_CHOICE_N_VIS_TRISTATE", (  ), (    ))
+
+    c.named_choices["MY_CHOICE"].set_value(2)
+
+    # Symbols in m/y-mode choice, now in y mode
+    verify_assignable("MY_CHOICE_BOOL",           (2,), (2,))
+    verify_assignable("MY_CHOICE_TRISTATE",       (2,), (2,))
+    verify_assignable("MY_CHOICE_N_VIS_TRISTATE", (  ), (  ))
+
+    def verify_choice_assignable(choice_name, assignable_no_modules,
+                                 assignable_modules):
+        verify_assignable_imp(c.named_choices[choice_name],
+                              assignable_no_modules,
+                              assignable_modules)
+
+    # Choices with various possible modes
+    verify_choice_assignable("Y_CHOICE",   (2,  ), (      2,))
+    verify_choice_assignable("MY_CHOICE",  (2,  ), (   1, 2 ))
+    verify_choice_assignable("NMY_CHOICE", (0, 2), (0, 1, 2 ))
+    verify_choice_assignable("NY_CHOICE",  (0, 2), (0,    2 ))
+    verify_choice_assignable("NM_CHOICE",  (    ), (0, 1    ))
+    verify_choice_assignable("M_CHOICE",   (    ), (   1,   ))
+    verify_choice_assignable("N_CHOICE",   (    ), (        ))
+
+
+    print("Testing object relations")
+
+    c = Kconfig("Kconfiglib/tests/Krelation")
+
+    verify(c.syms["A"].nodes[0].parent is c.top_node,
+           "A's parent should be the top node")
+
+    verify(c.syms["B"].nodes[0].parent.item is c.named_choices["CHOICE_1"],
+           "B's parent should be the first choice")
+
+    verify(c.syms["C"].nodes[0].parent.item is c.syms["B"],
+           "C's parent should be B (due to auto menus)")
+
+    verify(c.syms["E"].nodes[0].parent.item == MENU,
+           "E's parent should be a menu")
+
+    verify(c.syms["E"].nodes[0].parent.parent is c.top_node,
+           "E's grandparent should be the top node")
+
+    verify(c.syms["G"].nodes[0].parent.item is c.named_choices["CHOICE_2"],
+           "G's parent should be the second choice")
+
+    verify(c.syms["G"].nodes[0].parent.parent.item == MENU,
+           "G's grandparent should be a menu")
+
+
+    print("Testing hex/int ranges")
+
+    c = Kconfig("Kconfiglib/tests/Krange", warn=False)
+
+    for sym_name in "HEX_NO_RANGE", "INT_NO_RANGE", "HEX_40", "INT_40":
+        sym = c.syms[sym_name]
+        verify(not sym.ranges,
+               "{} should not have ranges".format(sym_name))
+
+    for sym_name in "HEX_ALL_RANGES_DISABLED", "INT_ALL_RANGES_DISABLED", \
+                    "HEX_RANGE_10_20_LOW_DEFAULT", \
+                    "INT_RANGE_10_20_LOW_DEFAULT":
+        sym = c.syms[sym_name]
+        verify(sym.ranges, "{} should have ranges".format(sym_name))
+
+    # hex/int symbols without defaults should get no default value
+    verify_value("HEX_NO_RANGE", "")
+    verify_value("INT_NO_RANGE", "")
+    # And neither if all ranges are disabled
+    verify_value("HEX_ALL_RANGES_DISABLED", "")
+    verify_value("INT_ALL_RANGES_DISABLED", "")
+    # Make sure they are assignable though, and test that the form of the user
+    # value is reflected in the value for hex symbols
+    assign_and_verify("HEX_NO_RANGE", "0x123")
+    assign_and_verify("HEX_NO_RANGE", "123")
+    assign_and_verify("INT_NO_RANGE", "123")
+
+    # Defaults outside of the valid range should be clamped
+    verify_value("HEX_RANGE_10_20_LOW_DEFAULT", "0x10")
+    verify_value("HEX_RANGE_10_20_HIGH_DEFAULT", "0x20")
+    verify_value("INT_RANGE_10_20_LOW_DEFAULT", "10")
+    verify_value("INT_RANGE_10_20_HIGH_DEFAULT", "20")
+    # Defaults inside the valid range should be preserved. For hex symbols,
+    # they should additionally use the same form as in the assignment.
+    verify_value("HEX_RANGE_10_20_OK_DEFAULT", "0x15")
+    verify_value("HEX_RANGE_10_20_OK_DEFAULT_ALTERNATE", "15")
+    verify_value("INT_RANGE_10_20_OK_DEFAULT", "15")
+
+    # hex/int symbols with no defaults but valid ranges should default to the
+    # lower end of the range if it's > 0
+    verify_value("HEX_RANGE_10_20", "0x10")
+    verify_value("HEX_RANGE_0_10", "")
+    verify_value("INT_RANGE_10_20", "10")
+    verify_value("INT_RANGE_0_10", "")
+    verify_value("INT_RANGE_NEG_10_10", "")
+
+    # User values and dependent ranges
+
+    # Avoid warnings for assigning values outside the active range
+    c.warn = False
+
+    def verify_range(sym_name, low, high, default):
+        # Verifies that all values in the range 'low'-'high' can be assigned,
+        # and that assigning values outside the range reverts the value back to
+        # 'default' (None if it should revert back to "").
+
+        is_hex = (c.syms[sym_name].type == HEX)
+
+        for i in range(low, high + 1):
+            assign_and_verify_user_value(sym_name, str(i), str(i), True)
+            if is_hex:
+                # The form of the user value should be preserved for hex
+                # symbols
+                assign_and_verify_user_value(sym_name, hex(i), hex(i), True)
+
+        # Verify that assigning a user value just outside the range causes
+        # defaults to be used
+
+        if default is None:
+            default_str = ""
+        else:
+            default_str = hex(default) if is_hex else str(default)
+
+        if is_hex:
+            too_low_str = hex(low - 1)
+            too_high_str = hex(high + 1)
+        else:
+            too_low_str = str(low - 1)
+            too_high_str = str(high + 1)
+
+        assign_and_verify_value(sym_name, too_low_str, default_str)
+        assign_and_verify_value(sym_name, too_high_str, default_str)
+
+    verify_range("HEX_RANGE_10_20_LOW_DEFAULT",  0x10, 0x20,  0x10)
+    verify_range("HEX_RANGE_10_20_HIGH_DEFAULT", 0x10, 0x20,  0x20)
+    verify_range("HEX_RANGE_10_20_OK_DEFAULT",   0x10, 0x20,  0x15)
+
+    verify_range("INT_RANGE_10_20_LOW_DEFAULT",  10,   20,    10)
+    verify_range("INT_RANGE_10_20_HIGH_DEFAULT", 10,   20,    20)
+    verify_range("INT_RANGE_10_20_OK_DEFAULT",   10,   20,    15)
+
+    verify_range("HEX_RANGE_10_20",              0x10, 0x20,  0x10)
+
+    verify_range("INT_RANGE_10_20",              10,  20,     10)
+    verify_range("INT_RANGE_0_10",               0,   10,     None)
+    verify_range("INT_RANGE_NEG_10_10",          -10, 10,     None)
+
+    # Dependent ranges
+
+    verify_value("HEX_40", "40")
+    verify_value("INT_40", "40")
+
+    c.syms["HEX_RANGE_10_20"].unset_value()
+    c.syms["INT_RANGE_10_20"].unset_value()
+    verify_value("HEX_RANGE_10_40_DEPENDENT", "0x10")
+    verify_value("INT_RANGE_10_40_DEPENDENT", "10")
+    c.syms["HEX_RANGE_10_20"].set_value("15")
+    c.syms["INT_RANGE_10_20"].set_value("15")
+    verify_value("HEX_RANGE_10_40_DEPENDENT", "0x15")
+    verify_value("INT_RANGE_10_40_DEPENDENT", "15")
+    c.unset_values()
+    verify_range("HEX_RANGE_10_40_DEPENDENT", 0x10, 0x40,  0x10)
+    verify_range("INT_RANGE_10_40_DEPENDENT", 10,   40,    10)
+
+    # Ranges and symbols defined in multiple locations
+
+    verify_value("INACTIVE_RANGE", "2")
+    verify_value("ACTIVE_RANGE", "1")
+
+
+    print("Testing defconfig_filename")
+
+    c = Kconfig("Kconfiglib/tests/empty")
+    verify(c.defconfig_filename is None,
+           "defconfig_filename should be None with no defconfig_list symbol")
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_nonexistent")
+    verify(c.defconfig_filename is None,
+           "defconfig_filename should be None when none of the files in the "
+           "defconfig_list symbol exist")
+
+    # Referenced in Kdefconfig_existent(_but_n)
+    os.environ["FOO"] = "defconfig_2"
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_existent_but_n")
+    verify(c.defconfig_filename is None,
+           "defconfig_filename should be None when the condition is n for all "
+           "the defaults")
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_existent")
+    verify(c.defconfig_filename == "Kconfiglib/tests/defconfig_2",
+           "defconfig_filename should return the existing file "
+           "Kconfiglib/tests/defconfig_2")
+
+    # Should also look relative to $srctree if the specified defconfig is a
+    # relative path and can't be opened
+
+    c = Kconfig("Kconfiglib/tests/Kdefconfig_srctree")
+    verify(c.defconfig_filename == "Kconfiglib/tests/defconfig_2",
+           "defconfig_filename gave wrong file with $srctree unset")
+
+    os.environ["srctree"] = "Kconfiglib/tests"
+    c = Kconfig("Kdefconfig_srctree")
+    verify(c.defconfig_filename == "Kconfiglib/tests/sub/defconfig_in_sub",
+           "defconfig_filename gave wrong file with $srctree set")
+
+    os.environ.pop("srctree", None)
+
+
+    print("Testing mainmenu_text")
+
+    c = Kconfig("Kconfiglib/tests/empty")
+    verify(c.mainmenu_text == "Main menu",
+           "An empty Kconfig should get a default main menu prompt")
+
+    # Expanded in the mainmenu text
+    os.environ["FOO"] = "bar baz"
+    c = Kconfig("Kconfiglib/tests/Kmainmenu")
+    verify(c.mainmenu_text == "---bar baz---",
+           "Wrong mainmenu text")
+
+
+    print("Testing user_value")
+
+    # References undefined env. var. Disable warnings.
+    c = Kconfig("Kconfiglib/tests/Kmisc", warn=False)
+
+    # Avoid warnings from assigning invalid user values and assigning user
+    # values to symbols without prompts
+    c.warn = False
+
+    syms = [c.syms[name] for name in
+            ("BOOL", "TRISTATE", "STRING", "INT", "HEX")]
+
+    for sym in syms:
+        verify(sym.user_value is None,
+               "{} should not have a user value to begin with")
+
+    # Assign valid values for the types
+
+    assign_and_verify_user_value("BOOL", 0, 0, True)
+    assign_and_verify_user_value("BOOL", 2, 2, True)
+    assign_and_verify_user_value("TRISTATE", 0, 0, True)
+    assign_and_verify_user_value("TRISTATE", 1, 1, True)
+    assign_and_verify_user_value("TRISTATE", 2, 2, True)
+    assign_and_verify_user_value("STRING", "foo bar", "foo bar", True)
+    assign_and_verify_user_value("INT", "123", "123", True)
+    assign_and_verify_user_value("HEX", "0x123", "0x123", True)
+
+    # Assign invalid values for the types. They should retain their old user
+    # value.
+
+    assign_and_verify_user_value("BOOL", 1, 2, False)
+    assign_and_verify_user_value("BOOL", "foo", 2, False)
+    assign_and_verify_user_value("BOOL", "1", 2, False)
+    assign_and_verify_user_value("TRISTATE", "foo", 2, False)
+    assign_and_verify_user_value("TRISTATE", "1", 2, False)
+    assign_and_verify_user_value("STRING", 0, "foo bar", False)
+    assign_and_verify_user_value("INT", "foo", "123", False)
+    assign_and_verify_user_value("INT", 0, "123", False)
+    assign_and_verify_user_value("HEX", "foo", "0x123", False)
+    assign_and_verify_user_value("HEX", 0, "0x123", False)
+    assign_and_verify_user_value("HEX", "-0x1", "0x123", False)
+
+    for s in syms:
+        s.unset_value()
+        verify(s.user_value is None,
+               "{} should not have a user value after being reset".
+               format(s.name))
+
+
+    print("Testing is_menuconfig")
+
+    c = Kconfig("Kconfiglib/tests/Kmenuconfig")
+
+    for not_menuconfig in c.syms["NOT_MENUCONFIG_1"].nodes[0], \
+                          c.syms["NOT_MENUCONFIG_2"].nodes[0], \
+                          c.syms["MENUCONFIG_MULTI_DEF"].nodes[0], \
+                          c.syms["COMMENT_HOOK"].nodes[0].next:
+
+        verify(not not_menuconfig.is_menuconfig,
+               "'{}' should have is_menuconfig False".format(not_menuconfig))
+
+    for menuconfig in c.top_node, \
+                      c.syms["MENUCONFIG_1"].nodes[0], \
+                      c.syms["MENUCONFIG_MULTI_DEF"].nodes[1], \
+                      c.syms["MENU_HOOK"].nodes[0].next, \
+                      c.syms["CHOICE_HOOK"].nodes[0].next:
+
+        verify(menuconfig.is_menuconfig,
+               "'{}' should have is_menuconfig True".format(menuconfig))
+
+
+    print("Testing 'option env' semantics")
+
+    os.environ["ENV_VAR"] = "ENV_VAR value"
+
+    # References undefined env. var., so disable warnings
+    c = Kconfig("Kconfiglib/tests/Kmisc", warn=False)
+
+    # Verify that 'option env' is treated like a default
+    verify_value("FROM_ENV", "ENV_VAR value")
+    verify_value("FROM_ENV_MISSING", "missing")
+
+    verify_value("FROM_ENV_WEIRD", "weird")
+
+
+    print("Testing defined vs undefined symbols")
+
+    for name in "A", "B", "C", "D", "BOOL", "TRISTATE", "STRING", "INT", "HEX":
+        verify(c.syms[name].nodes,
+               "{} should be defined".format(name))
+
+    for name in "NOT_DEFINED_1", "NOT_DEFINED_2", "NOT_DEFINED_3", \
+                "NOT_DEFINED_4":
+        sym = c.syms[name]
+        verify(not c.syms[name].nodes,
+               "{} should not be defined".format(name))
+
+
+    print("Testing Symbol.choice")
+
+    for name in "A", "B", "C", "D":
+        verify(c.syms[name].choice is not None,
+               "{} should be a choice symbol".format(name))
+
+    for name in "Q1", "Q2", "Q3", "BOOL", "TRISTATE", "STRING", "INT", "HEX", \
+                "FROM_ENV", "FROM_ENV_MISSING", "NOT_DEFINED_1", \
+                "NOT_DEFINED_2", "NOT_DEFINED_3", "NOT_DEFINED_4":
+        verify(c.syms[name].choice is None,
+               "{} should not be a choice symbol".format(name))
+
+
+    print("Testing is_allnoconfig_y")
+
+    verify(not c.syms["NOT_ALLNOCONFIG_Y"].is_allnoconfig_y,
+           "NOT_ALLNOCONFIG_Y should not be allnoconfig_y")
+    verify(c.syms["ALLNOCONFIG_Y"].is_allnoconfig_y,
+           "ALLNOCONFIG_Y should be allnoconfig_y")
+
+
+    print("Testing .config reading and writing")
+
+    config_test_file = "Kconfiglib/tests/config_test"
+
+    def verify_file_contents(fname, contents):
+        with open(fname, "r") as f:
+            file_contents = f.read()
+            verify(file_contents == contents,
+                   "{} contains '{}'. Expected '{}'."
+                   .format(fname, file_contents, contents))
+
+    # Writing/reading strings with characters that need to be escaped
+
+    c = Kconfig("Kconfiglib/tests/Kescape")
+
+    # Test the default value
+    c.write_config(config_test_file + "_from_def", header="")
+    verify_file_contents(config_test_file + "_from_def",
+                         r'''CONFIG_STRING="\"\\"''' "\n")
+    # Write our own value
+    c.syms["STRING"].set_value(r'''\"a'\\''')
+    c.write_config(config_test_file + "_from_user", header="")
+    verify_file_contents(config_test_file + "_from_user",
+                         r'''CONFIG_STRING="\\\"a'\\\\"''' "\n")
+
+    # Read back the two configs and verify the respective values
+    c.load_config(config_test_file + "_from_def")
+    verify_value("STRING", '"\\')
+    c.load_config(config_test_file + "_from_user")
+    verify_value("STRING", r'''\"a'\\''')
+
+    # Appending values from a .config
+
+    c = Kconfig("Kconfiglib/tests/Kappend")
+
+    # Values before assigning
+    verify_value("BOOL", "n")
+    verify_value("STRING", "")
+
+    # Assign BOOL
+    c.load_config("Kconfiglib/tests/config_set_bool", replace=False)
+    verify_value("BOOL", "y")
+    verify_value("STRING", "")
+
+    # Assign STRING
+    c.load_config("Kconfiglib/tests/config_set_string", replace=False)
+    verify_value("BOOL", "y")
+    verify_value("STRING", "foo bar")
+
+    # Reset BOOL
+    c.load_config("Kconfiglib/tests/config_set_string")
+    verify_value("BOOL", "n")
+    verify_value("STRING", "foo bar")
+
+    # Loading a completely empty .config should reset values
+    c.load_config("Kconfiglib/tests/empty")
+    verify_value("STRING", "")
+
+    # An indented assignment in a .config should be ignored
+    c.load_config("Kconfiglib/tests/config_indented")
+    verify_value("IGNOREME", "y")
+
+    # Symbol order in headers and minimal configuration files should match
+    # definition order, like in .config files
+
+    c = Kconfig("Kconfiglib/tests/Korder")
+
+    c.write_autoconf(config_test_file, header="")
+    verify_file_contents(config_test_file, """
+#define CONFIG_O 0
+#define CONFIG_R 1
+#define CONFIG_D 2
+#define CONFIG_E 3
+#define CONFIG_R2 4
+#define CONFIG_I 5
+#define CONFIG_N 6
+#define CONFIG_G 7
+"""[1:])
+
+    # Differs from defaults
+    c.syms["O"].set_value("-1")
+    c.syms["R"].set_value("-1")
+    c.syms["E"].set_value("-1")
+    c.syms["R2"].set_value("-1")
+    c.syms["N"].set_value("-1")
+    c.syms["G"].set_value("-1")
+    c.write_min_config(config_test_file, header="")
+    verify_file_contents(config_test_file, """
+CONFIG_O=-1
+CONFIG_R=-1
+CONFIG_E=-1
+CONFIG_R2=-1
+CONFIG_N=-1
+CONFIG_G=-1
+"""[1:])
+
+
+    print("Testing Kconfig fetching and separation")
+
+    for c in Kconfig("Kconfiglib/tests/Kmisc", warn=False), \
+             Kconfig("Kconfiglib/tests/Kmisc", warn=False):
+        for item in c.syms["BOOL"], \
+                    c.syms["BOOL"].nodes[0], \
+                    c.named_choices["OPTIONAL"], \
+                    c.named_choices["OPTIONAL"].nodes[0], \
+                    c.syms["MENU_HOOK"].nodes[0].next, \
+                    c.syms["COMMENT_HOOK"].nodes[0].next:
+            verify(item.kconfig is c,
+                   ".kconfig not properly set for " + repr(item))
+
+
+    print("Testing imply semantics")
+
+    c = Kconfig("Kconfiglib/tests/Kimply")
+
+    verify_value("IMPLY_DIRECT_DEPS", "y")
+    verify_value("UNMET_DIRECT_1", "n")
+    verify_value("UNMET_DIRECT_2", "n")
+    verify_value("UNMET_DIRECT_3", "n")
+    verify_value("MET_DIRECT_1", "y")
+    verify_value("MET_DIRECT_2", "y")
+    verify_value("MET_DIRECT_3", "y")
+    verify_value("MET_DIRECT_4", "y")
+
+    verify_value("IMPLY_COND", "y")
+    verify_value("IMPLIED_N_COND", "n")
+    verify_value("IMPLIED_M_COND", "m")
+    verify_value("IMPLIED_Y_COND", "y")
+
+    verify_value("IMPLY_N_1", "n")
+    verify_value("IMPLY_N_2", "n")
+    verify_value("IMPLIED_FROM_N_1", "n")
+    verify_value("IMPLIED_FROM_N_2", "n")
+
+    verify_value("IMPLY_M", "m")
+    verify_value("IMPLIED_M", "m")
+    verify_value("IMPLIED_M_BOOL", "y")
+
+    verify_value("IMPLY_M_TO_Y", "y")
+    verify_value("IMPLIED_M_TO_Y", "y")
+
+    # Test user value semantics
+
+    # Verify that IMPLIED_TRISTATE is invalidated if the direct
+    # dependencies change
+
+    assign_and_verify("IMPLY", 2)
+    assign_and_verify("DIRECT_DEP", 2)
+    verify_value("IMPLIED_TRISTATE", 2)
+    assign_and_verify("DIRECT_DEP", 0)
+    verify_value("IMPLIED_TRISTATE", 0)
+    # Set back for later tests
+    assign_and_verify("DIRECT_DEP", 2)
+
+    # Verify that IMPLIED_TRISTATE can be set to anything when IMPLY has value
+    # n, and that it gets the value n by default (for non-imply-related
+    # reasons)
+
+    assign_and_verify("IMPLY", 0)
+    assign_and_verify("IMPLIED_TRISTATE", 0)
+    assign_and_verify("IMPLIED_TRISTATE", 1)
+    assign_and_verify("IMPLIED_TRISTATE", 2)
+    c.syms["IMPLIED_TRISTATE"].unset_value()
+    verify_value("IMPLIED_TRISTATE", "n")
+
+    # Same as above for m. Anything still goes, but m by default now.
+
+    assign_and_verify("IMPLY", 1)
+    assign_and_verify("IMPLIED_TRISTATE", 0)
+    assign_and_verify("IMPLIED_TRISTATE", 1)
+    assign_and_verify("IMPLIED_TRISTATE", 2)
+    c.syms["IMPLIED_TRISTATE"].unset_value()
+    verify_value("IMPLIED_TRISTATE", 1)
+
+    # Same as above for y. Only n and y should be accepted. m gets promoted to
+    # y. Default should be y.
+
+    assign_and_verify("IMPLY", 2)
+    assign_and_verify("IMPLIED_TRISTATE", 0)
+    assign_and_verify_value("IMPLIED_TRISTATE", 1, 2)
+    assign_and_verify("IMPLIED_TRISTATE", 2)
+    c.syms["IMPLIED_TRISTATE"].unset_value()
+    verify_value("IMPLIED_TRISTATE", 2)
+
+    # Being implied to either m or y should give a bool the value y
+
+    c.syms["IMPLY"].unset_value()
+    verify_value("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLY", 0)
+    verify_value("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLY", 1)
+    verify_value("IMPLIED_BOOL", 2)
+    assign_and_verify("IMPLY", 2)
+    verify_value("IMPLIED_BOOL", 2)
+
+    # A bool implied to m or y can take the values n and y
+
+    c.syms["IMPLY"].set_value(1)
+    assign_and_verify("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLIED_BOOL", 2)
+
+    c.syms["IMPLY"].set_value(2)
+    assign_and_verify("IMPLIED_BOOL", 0)
+    assign_and_verify("IMPLIED_BOOL", 2)
+
+
+    print("Testing choice semantics")
+
+    # Would warn for choice value symbols defined without a type, even
+    # though the type is automatically derived. This is probably more
+    # helpful than ignoring those cases, as this feature isn't used
+    # deliberately anywhere from what I've seen.
+    c = Kconfig("Kconfiglib/tests/Kchoice", warn=False)
+
+    for name in "BOOL", "BOOL_OPT", "BOOL_M", "DEFAULTS":
+        verify(c.named_choices[name].orig_type == BOOL,
+               "choice {} should have type bool".format(name))
+
+    for name in "TRISTATE", "TRISTATE_OPT", "TRISTATE_M":
+        verify(c.named_choices[name].orig_type == TRISTATE,
+               "choice {} should have type tristate".format(name))
+
+    def select_and_verify(sym):
+        choice = sym.nodes[0].parent.item
+        choice.set_value(2)
+
+        sym.set_value(2)
+
+        verify(sym.choice.selection is sym,
+               sym.name + " should be the selected symbol")
+
+        verify(choice.user_selection is sym,
+               sym.name + " should be the user selection of the choice")
+
+        verify(sym.tri_value == 2,
+               sym.name + " should have value y when selected")
+
+        verify(sym.user_value == 2,
+               sym.name + " should have user value y when selected")
+
+        for sibling in choice.syms:
+            if sibling is not sym:
+                verify(sibling.tri_value == 0,
+                       sibling.name + " should be n when not selected")
+
+    def select_and_verify_all(choice_name):
+        choice = c.named_choices[choice_name]
+
+        # Select in forward order
+        for sym in choice.syms:
+            select_and_verify(sym)
+
+        # Select in reverse order
+        for sym in reversed(choice.syms):
+            select_and_verify(sym)
+
+    def verify_mode(choice_name, no_modules_mode, modules_mode):
+        choice = c.named_choices[choice_name]
+
+        c.modules.set_value(0)
+        verify(choice.tri_value == no_modules_mode,
+               'Wrong mode for choice {} with no modules. Expected {}, got {}.'
+               .format(choice.name, no_modules_mode, choice.tri_value))
+
+        c.modules.set_value(2)
+        verify(choice.tri_value == modules_mode,
+               'Wrong mode for choice {} with modules. Expected {}, got {}.'
+               .format(choice.name, modules_mode, choice.tri_value))
+
+    verify_mode("BOOL",         2, 2)
+    verify_mode("BOOL_OPT",     0, 0)
+    verify_mode("TRISTATE",     2, 1)
+    verify_mode("TRISTATE_OPT", 0, 0)
+    verify_mode("BOOL_M",       0, 2)
+    verify_mode("TRISTATE_M",   0, 1)
+
+    # Test defaults
+
+    choice = c.named_choices["DEFAULTS"]
+
+    c.syms["TRISTATE_SYM"].set_value(0)
+    verify(choice.selection is c.syms["OPT_4"],
+           "Wrong choice default with TRISTATE_SYM = n")
+
+    c.syms["TRISTATE_SYM"].set_value(2)
+    verify(choice.selection is c.syms["OPT_2"],
+           "Wrong choice default with TRISTATE_SYM = y")
+
+    c.syms["OPT_1"].set_value(2)
+    verify(choice.selection is c.syms["OPT_1"],
+           "User selection should override defaults")
+
+    verify(c.named_choices["DEFAULTS_NOT_VISIBLE"].selection
+           is c.syms["OPT_8"],
+           "Non-visible choice symbols should cause the next default to be "
+           "considered")
+
+    # Test y mode selection
+
+    c.modules.set_value(2)
+
+    select_and_verify_all("BOOL")
+    select_and_verify_all("BOOL_OPT")
+    select_and_verify_all("TRISTATE")
+    select_and_verify_all("TRISTATE_OPT")
+    # For BOOL_M, the mode should have been promoted
+    select_and_verify_all("BOOL_M")
+
+    # Test m mode selection
+
+    c.named_choices["TRISTATE"].set_value(1)
+
+    verify(c.named_choices["TRISTATE"].tri_value == 1,
+           "TRISTATE choice should have mode m after explicit mode assignment")
+
+    assign_and_verify_value("T_1", 0, 0)
+    assign_and_verify_value("T_2", 0, 0)
+    assign_and_verify_value("T_1", 1, 1)
+    assign_and_verify_value("T_2", 1, 1)
+    assign_and_verify_value("T_1", 2, 1)
+    assign_and_verify_value("T_2", 2, 1)
+
+    # Switching to y mode should cause T_2 to become selected
+    c.named_choices["TRISTATE"].set_value(2)
+    verify_value("T_1", 0)
+    verify_value("T_2", 2)
+
+    # Verify that choices with no explicitly specified type get the type of the
+    # first contained symbol with a type
+
+    verify(c.named_choices["NO_TYPE_BOOL"].orig_type == BOOL,
+           "Expected first choice without explicit type to have type bool")
+
+    verify(c.named_choices["NO_TYPE_TRISTATE"].orig_type == TRISTATE,
+           "Expected second choice without explicit type to have type "
+           "tristate")
+
+    # Verify that symbols without a type in the choice get the type of the
+    # choice
+
+    for name in "MMT_1", "MMT_2", "MMT_4", "MMT_5":
+        verify(c.syms[name].orig_type == BOOL,
+               "Expected {} to get type bool".format(name))
+
+    verify(c.syms["MMT_3"].orig_type == TRISTATE,
+           "Expected MMT_3 to have type tristate")
+
+    # Verify that the default selection can change depending on the
+    # visibility of the choice symbols
+
+    default_with_dep_choice = c.named_choices["DEFAULT_WITH_DEP"]
+
+    verify(default_with_dep_choice.selection is c.syms["B"],
+           "Wrong choice default with unsatisfied deps on default")
+
+    c.syms["DEP"].set_value("y")
+
+    verify(default_with_dep_choice.selection is c.syms["A"],
+           "Wrong choice default with satisfied deps on default")
+
+    c.syms["DEP"].set_value("n")
+
+    verify(default_with_dep_choice.selection is c.syms["B"],
+           "Wrong choice default with unsatisfied deps on default (round two)")
+
+    # Verify that symbols in choices that depend on the preceding symbol aren't
+    # considered choice symbols
+
+    weird_choice = c.named_choices["WEIRD_SYMS"]
+
+    def verify_is_normal_choice_symbol(name):
+        sym = c.syms[name]
+        verify(sym.choice is not None and
+               sym in weird_choice.syms and
+               sym.nodes[0].parent.item is weird_choice,
+               "{} should be a normal choice symbol".format(sym.name))
+
+    def verify_is_weird_choice_symbol(name):
+        sym = c.syms[name]
+        verify(sym.choice is None and
+               sym not in weird_choice.syms,
+               "{} should be a weird (non-)choice symbol"
+               .format(sym.name))
+
+    verify_is_normal_choice_symbol("WS1")
+    verify_is_weird_choice_symbol("WS2")
+    verify_is_weird_choice_symbol("WS3")
+    verify_is_weird_choice_symbol("WS4")
+    verify_is_weird_choice_symbol("WS5")
+    verify_is_normal_choice_symbol("WS6")
+    verify_is_weird_choice_symbol("WS7")
+    verify_is_weird_choice_symbol("WS8")
+    verify_is_normal_choice_symbol("WS9")
+
+
+    print("Testing 'if' node removal")
+
+    c = Kconfig("Kconfiglib/tests/Kifremoval", warn=False)
+
+    nodes = tuple(c.node_iter())
+    verify_equal(nodes[0].item.name, "A")
+    verify_equal(nodes[1].item.name, "B")
+    verify_equal(nodes[2].item.name, "C")
+    verify_equal(nodes[3].item.name, "D")
+    verify_equal(nodes[4].prompt[0], "E")
+    verify_equal(nodes[5].prompt[0], "F")
+    verify_equal(nodes[6].prompt[0], "G")
+    verify_equal(nodes[7].item.name, "H")
+    verify_equal(nodes[8].item.name, "I")
+    verify_equal(nodes[9].item.name, "J")
+    verify(len(nodes) == 10,
+           "Wrong number of nodes after 'if' removal")
+
+
+    print("Testing multi.def. property copying")
+
+    c = Kconfig("Kconfiglib/tests/Kdepcopy", warn=False)
+
+    def verify_props(desc, props, prop_names):
+        actual = [prop[0].name for prop in props]
+        expected = prop_names.split()
+
+        verify(actual == expected,
+               "Wrong {} properties, expected '{}', got '{}'"
+               .format(desc, expected, actual))
+
+    verify_props("default", c.syms["MULTIDEF"].defaults,
+                 "A B C D E F G H I J K L M N O P Q R")
+
+    verify_props("select", c.syms["MULTIDEF"].selects,
+                 "AA BB CC DD EE FF GG HH II JJ")
+
+    verify_props("imply", c.syms["MULTIDEF"].selects,
+                 "AA BB CC DD EE FF GG HH II JJ")
+
+    verify_props("select", c.syms["MULTIDEF_CHOICE"].selects,
+                 "A B C")
+
+    verify_props("range", c.syms["MULTIDEF_RANGE"].ranges,
+                 "A B C D E F")
+
+    verify_props("default", c.choices[1].defaults,
+                 "A B C D E")
+
+
+    print("Testing dependency loop detection")
+
+    # These are all expected to raise dependency loop errors
+    for i in range(11):
+        filename = "Kconfiglib/tests/Kdeploop" + str(i)
+        try:
+            Kconfig(filename)
+        except KconfigError as e:
+            if "Dependency loop" not in str(e):
+                fail("dependency loop in {} raised wrong KconfigError"
+                     .format(filename))
+        except:
+            fail("dependency loop in {} raised wrong exception"
+                 .format(filename))
+        else:
+            fail("dependency loop in {} not detected".format(filename))
+
+    # Check the most complicated message completely
+    try:
+        Kconfig("Kconfiglib/tests/Kdeploop10")
+    except KconfigError as e:
+        verify_equal(str(e), """
+Dependency loop
+===============
+
+A (defined at Kconfiglib/tests/Kdeploop10:1), with definition...
+
+config A
+	bool
+	depends on B
+
+...depends on B (defined at Kconfiglib/tests/Kdeploop10:5), with definition...
+
+config B
+	bool
+	depends on C = 7
+
+...depends on C (defined at Kconfiglib/tests/Kdeploop10:9), with definition...
+
+config C
+	int
+	range D 8
+
+...depends on D (defined at Kconfiglib/tests/Kdeploop10:13), with definition...
+
+config D
+	int
+	default 3 if E
+	default 8
+
+...depends on E (defined at Kconfiglib/tests/Kdeploop10:18), with definition...
+
+config E
+	bool
+
+(select-related dependencies: F && G)
+
+...depends on G (defined at Kconfiglib/tests/Kdeploop10:25), with definition...
+
+config G
+	bool
+	depends on H
+
+...depends on the choice symbol H (defined at Kconfiglib/tests/Kdeploop10:32), with definition...
+
+config H
+	bool "H"
+	depends on I && <choice>
+
+...depends on the choice symbol I (defined at Kconfiglib/tests/Kdeploop10:41), with definition...
+
+config I
+	bool "I"
+	depends on <choice>
+
+...depends on <choice> (defined at Kconfiglib/tests/Kdeploop10:38), with definition...
+
+choice
+	bool "choice" if J
+
+...depends on J (defined at Kconfiglib/tests/Kdeploop10:46), with definition...
+
+config J
+	bool
+	depends on A
+
+...depends again on A (defined at Kconfiglib/tests/Kdeploop10:1)
+"""[:-1])
+    except:
+        fail("Loop detection message check raised wrong exception")
+    else:
+        fail("Loop detection message check did not raise exception")
+
+
+    print("Testing preprocessor")
+
+    os.environ["ENV_1"] = "env_1"
+    os.environ["ENV_2"] = "env_2"
+    os.environ["ENV_3"] = "env_3"
+    os.environ["ENV_4"] = "env_4"
+    os.environ["ENV_5"] = "n"
+    os.environ["ENV_6"] = "Kconfiglib/tests/empty"
+    os.environ["ENV_7"] = "env_7"
+    # We verify warnings manually
+    c = Kconfig("Kconfiglib/tests/Kpreprocess", warn_to_stderr=False)
+
+    def verify_variable(name, unexp_value, exp_value, recursive, *args):
+        var = c.variables[name]
+
+        verify(var.value == unexp_value,
+               "expected variable '{}' to have the unexpanded value '{}', had "
+               "the value '{}'".format(name, unexp_value, var.value))
+
+        if not args:
+            verify(var.expanded_value == exp_value,
+                   "expected expanded_value for {} to be '{}', was '{}'"
+                   .format(name, exp_value, var.expanded_value))
+
+        verify(var.expanded_value_w_args(*args) == exp_value,
+               "expected expanded_value_w_args() for '{}' to be '{}', was '{}'"
+               .format(name, exp_value, var.expanded_value_w_args(*args)))
+
+        verify(var.is_recursive == recursive,
+               "{} was {}, shouldn't be"
+               .format(name, "recursive" if var.is_recursive else "simple"))
+
+    verify_variable("simple-recursive", "foo", "foo", True)
+    verify_variable("simple-immediate", "bar", "bar", False)
+    verify_variable("simple-recursive-2", "baz", "baz", True)
+
+    verify_variable("whitespaced", "foo", "foo", True)
+
+    verify_variable("preserve-recursive", "foo bar", "foo bar", True)
+    verify_variable("preserve-immediate", "foo bar", "foo bar", False)
+
+    verify_variable("recursive",
+                    "$(foo) $(bar) $($(b-char)a$(z-char)) $(indir)",
+                    "abc def ghi jkl mno",
+                    True)
+
+    verify_variable("immediate", "foofoo", "foofoo", False)
+
+    verify_variable("messy-fn-res",
+                    "$($(fn-indir)-unused-arg, a  b , c  d )",
+                    'surround-rev-quote " c  d " " a  b " surround-rev-quote ',
+                    True)
+
+    verify_variable("special-chars-fn-res",
+                    "$(fn,$(comma)$(dollar)$(left-paren)foo$(right-paren))",
+                    '",$(foo)"',
+                    True)
+
+    verify_variable("quote", '"$(1)" "$(2)"', '"" ""', True)
+    verify_variable("quote", '"$(1)" "$(2)"', '"one" ""', True,
+                    "one")
+    verify_variable("quote", '"$(1)" "$(2)"', '"one" "two"', True,
+                    "one", "two")
+    verify_variable("quote", '"$(1)" "$(2)"', '"one" "two"', True,
+                    "one", "two", "three")
+
+    verify_str(c.syms["PRINT_ME"], r"""
+config PRINT_ME
+	string "env_1" if (FOO && BAR) || !BAZ || !QAZ
+	default "\"foo\"" if "foo \"bar\" baz" = ""
+""")
+
+    verify_str(c.syms["PRINT_ME_TOO"], r"""
+config PRINT_ME_TOO
+	bool "foo"
+	default FOOBARBAZQAZ if QAZ && QAZFOO && xxx
+""")
+
+    def verify_repr(name, s):
+        verify_equal(repr(c.variables[name]), s)
+
+    verify_repr(
+        "simple-immediate",
+        "<variable simple-immediate, immediate, value 'bar'>")
+
+    verify_repr(
+        "messy-fn-res",
+        "<variable messy-fn-res, recursive, value '$($(fn-indir)-unused-arg, a  b , c  d )'>")
+
+    def verify_recursive(name):
+        try:
+            c.variables[name].expanded_value
+        except KconfigError:
+            pass
+        else:
+            fail("Expected '{}' expansion to flag recursive expansion, didn't"
+                 .format(name))
+
+    verify_recursive("rec-1")
+    # Indirectly verifies that it's not recursive
+    verify_variable("safe-fn-rec-res",
+                    "$(safe-fn-rec,safe-fn-rec-2)",
+                    "foo",
+                    True)
+    verify_recursive("unsafe-fn-rec")
+
+    verify_variable("foo-bar-baz", "$(rhs)", "value", True)
+
+    verify_variable("space-var-res", "$(foo bar)", "value", True)
+
+    verify_variable("shell-res",
+                    "$(shell,false && echo foo bar || echo baz qaz)",
+                    "baz qaz",
+                    True)
+
+    verify_variable("shell-stderr-res", "", "", False)
+
+    verify_variable("location-res",
+                    "Kconfiglib/tests/Kpreprocess:125",
+                    "Kconfiglib/tests/Kpreprocess:125",
+                    False)
+
+    verify_variable("warning-res", "", "", False)
+    verify_variable("error-n-res", "", "", False)
+
+    try:
+        c.variables["error-y-res"].expanded_value
+    except KconfigError:
+        pass
+    else:
+        fail("expanding error-y-res didn't raise an exception")
+
+    # Check Kconfig.env_vars
+    verify_equal(c.env_vars,
+                 set(("ENV_1", "ENV_2", "ENV_3", "ENV_4", "ENV_5", "ENV_6")))
+
+    # Check that the expected warnings were generated
+    verify_equal(c.warnings, [
+        "Kconfiglib/tests/Kpreprocess:122: warning: 'echo message on stderr >&2' wrote to stderr: message on stderr",
+        "Kconfiglib/tests/Kpreprocess:130: warning: a warning"
+    ])
+
+
+    print("Testing user-defined preprocessor functions")
+
+    # Make Kconfiglib/tests/kconfigfunctions.py importable
+    sys.path.insert(0, "Kconfiglib/tests")
+
+    c = Kconfig("Kconfiglib/tests/Kuserfunctions")
+
+    verify_variable("add-zero",  "$(add)",          "0", True)
+    verify_variable("add-one",   "$(add,1)",        "1", True)
+    verify_variable("add-three", "$(add,1,-1,2,1)", "3", True)
+
+    verify_variable("one-one", "$(one,foo bar)", "onefoo barfoo bar", True)
+
+    verify_variable("one-or-more-one", "$(one-or-more,foo)", "foo + ", True)
+    verify_variable("one-or-more-three", "$(one-or-more,foo,bar,baz)",
+                    "foo + bar,baz", True)
+
+    def verify_bad_argno(name):
+        try:
+            c.variables[name].expanded_value
+        except KconfigError:
+            pass
+        else:
+            fail("Expected '{}' expansion to flag wrong number of arguments, "
+                 "didn't".format(name))
+
+    verify_bad_argno("one-zero")
+    verify_bad_argno("one-two")
+    verify_bad_argno("one-or-more-zero")
+
+    sys.path.pop(0)
+
+    # This test can fail on older Python 3.x versions, because they don't
+    # preserve dict insertion order during iteration. The output is still
+    # correct, just different.
+    if not (3, 0) <= sys.version_info <= (3, 5):
+        print("Testing KCONFIG_WARN_UNDEF")
+
+        os.environ["KCONFIG_WARN_UNDEF"] = "y"
+        c = Kconfig("Kconfiglib/tests/Kundef", warn_to_stderr=False)
+
+        verify_equal("\n".join(c.warnings), """
+warning: the int symbol INT (defined at Kconfiglib/tests/Kundef:8) has a non-int range [UNDEF_2 (undefined), 8 (undefined)]
+warning: undefined symbol UNDEF_1:
+
+- Referenced at Kconfiglib/tests/Kundef:4:
+
+config BOOL
+	bool "foo" if DEF || !UNDEF_1
+	default UNDEF_2
+
+- Referenced at Kconfiglib/tests/Kundef:19:
+
+menu "menu"
+	depends on UNDEF_1
+	visible if UNDEF_3
+warning: undefined symbol UNDEF_2:
+
+- Referenced at Kconfiglib/tests/Kundef:4:
+
+config BOOL
+	bool "foo" if DEF || !UNDEF_1
+	default UNDEF_2
+
+- Referenced at Kconfiglib/tests/Kundef:8:
+
+config INT
+	int
+	range UNDEF_2 8
+	range 5 15
+	default 10
+warning: undefined symbol UNDEF_3:
+
+- Referenced at Kconfiglib/tests/Kundef:19:
+
+menu "menu"
+	depends on UNDEF_1
+	visible if UNDEF_3
+"""[1:-1])
+
+        os.environ.pop("KCONFIG_WARN_UNDEF")
+
+
+    print("\nAll selftests passed\n" if all_passed else
+          "\nSome selftests failed\n")
+
+
+def run_compatibility_tests():
+    # Runs tests on configurations from the kernel. Tests compability with the
+    # C implementation by comparing outputs.
+
+    # Referenced inside the kernel Kconfig files.
+    #
+    # The str() makes the type of the value 'str' on both Python 2 and Python 3,
+    # which is nice for some later dictionary key sanity checks.
+
+    os.environ["KERNELVERSION"] = str(
+        subprocess.check_output("make kernelversion", shell=True)
+            .decode("utf-8").rstrip()
+    )
+
+    os.environ["CC_VERSION_TEXT"] = str(
+        subprocess.check_output("gcc --version | head -n1", shell=True)
+            .decode("utf-8").rstrip()
+    )
+
+    os.environ["srctree"] = "."
+    os.environ["CC"] = "gcc"
+    os.environ["LD"] = "ld"
+
+
+    if not os.path.exists("scripts/kconfig/conf"):
+        print("\nscripts/kconfig/conf does not exist -- running "
+              "'make allnoconfig' to build it...")
+        shell("make allnoconfig")
+
+
+    print("Running compatibility tests...\n")
+
+    test_fns = (test_defconfig,
+                # Fails for a few defconfigs due to a bug in the C tools. Will
+                # be enabled once patches get in.
+                #test_min_config,
+                test_alldefconfig,
+                test_allnoconfig,
+                test_allnoconfig_walk,
+                test_allmodconfig,
+                test_allyesconfig,
+                test_sanity)
+
+    for test_fn in test_fns:
+        # The test description is taken from the docstring of the corresponding
+        # function
+        print(textwrap.dedent(test_fn.__doc__))
+
+        for arch, srcarch in all_arch_srcarch():
+            # Referenced inside the Kconfig files
+            os.environ["ARCH"] = arch
+            os.environ["SRCARCH"] = srcarch
+
+            rm_configs()
+
+            test_fn(arch, srcarch)
+
+    if all_passed:
+        print("All selftests and compatibility tests passed")
+    else:
+        sys.exit("Some tests failed")
+
+
+def all_arch_srcarch():
+    for srcarch in os.listdir("arch"):
+        # arc and h8300 are currently broken with the C tools on linux-next as
+        # well. Perhaps they require cross-compilers to be installed.
+        #
+        # User-mode Linux has an unorthodox Kconfig setup that would require a
+        # different testing setup. Skip it too.
+        if srcarch in ("arc", "h8300", "um"):
+            continue
+
+        if os.path.exists(os.path.join("arch", srcarch, "Kconfig")):
+            yield (srcarch, srcarch)
+
+    # Some arches define additional ARCH settings with ARCH != SRCARCH
+    # (search for "Additional ARCH settings for" in the top-level Makefile)
+
+    yield ("i386", "x86")
+    yield ("x86_64", "x86")
+
+    yield ("sparc32", "sparc")
+    yield ("sparc64", "sparc")
+
+    yield ("sh64", "sh")
+
+
+def test_allnoconfig(arch, srcarch):
+    """
+    Verify that allnoconfig.py generates the same .config as
+    'make allnoconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/allnoconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allnoconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_allnoconfig_walk(arch, srcarch):
+    """
+    Verify that examples/allnoconfig_walk.py generates the same .config as
+    'make allnoconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/examples/allnoconfig_walk.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allnoconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_allmodconfig(arch, srcarch):
+    """
+    Verify that allmodconfig.py generates the same .config as
+    'make allmodconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/allmodconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allmodconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_allyesconfig(arch, srcarch):
+    """
+    Verify that allyesconfig.py generates the same .config as
+    'make allyesconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/allyesconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --allyesconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_sanity(arch, srcarch):
+    """
+    Do sanity checks on each configuration and call all public methods on all
+    symbols, choices, and menu nodes for all architectures to make sure we
+    never crash or hang.
+    """
+    print("For {}...".format(arch))
+
+    kconf = Kconfig()
+
+    for sym in kconf.defined_syms:
+        verify(sym._visited == 2,
+               "{} has broken dependency loop detection (_visited = {})"
+               .format(sym.name, sym._visited))
+
+    kconf.modules
+    kconf.defconfig_list
+    kconf.defconfig_filename
+
+    # Legacy warning functions
+    kconf.enable_redun_warnings()
+    kconf.disable_redun_warnings()
+    kconf.enable_undef_warnings()
+    kconf.disable_undef_warnings()
+    kconf.enable_warnings()
+    kconf.disable_warnings()
+    kconf.enable_stderr_warnings()
+    kconf.disable_stderr_warnings()
+
+    kconf.mainmenu_text
+    kconf.unset_values()
+
+    kconf.write_autoconf("/dev/null")
+
+    # No tempfile.TemporaryDirectory in Python 2
+    tmpdir = tempfile.mkdtemp()
+    kconf.sync_deps(os.path.join(tmpdir, "deps"))  # Create
+    kconf.sync_deps(os.path.join(tmpdir, "deps"))  # Update
+    shutil.rmtree(tmpdir)
+
+    # Python 2/3 compatible
+    for key, sym in kconf.syms.items():
+        verify(isinstance(key, str), "weird key '{}' in syms dict".format(key))
+
+        verify(not sym.is_constant, sym.name + " in 'syms' and constant")
+
+        verify(sym not in kconf.const_syms,
+               sym.name + " in both 'syms' and 'const_syms'")
+
+        for dep in sym._dependents:
+            verify(not dep.is_constant,
+                   "the constant symbol {} depends on {}"
+                   .format(dep.name, sym.name))
+
+        sym.__repr__()
+        sym.__str__()
+        sym.assignable
+        kconf.disable_warnings()
+        sym.set_value(2)
+        sym.set_value("foo")
+        sym.unset_value()
+        kconf.enable_warnings()  # Legacy warning function
+        sym.str_value
+        sym.tri_value
+        sym.type
+        sym.user_value
+        sym.visibility
+
+    for sym in kconf.defined_syms:
+        verify(sym.nodes, sym.name + " is defined but lacks menu nodes")
+
+        verify(not (sym.orig_type not in (BOOL, TRISTATE) and sym.choice),
+               sym.name + " is a choice symbol but not bool/tristate")
+
+    for key, sym in kconf.const_syms.items():
+        verify(isinstance(key, str),
+               "weird key '{}' in const_syms dict".format(key))
+
+        verify(sym.is_constant,
+               '"{}" is in const_syms but not marked constant'
+               .format(sym.name))
+
+        verify(not sym.nodes,
+               '"{}" is constant but has menu nodes'.format(sym.name))
+
+        verify(not sym._dependents,
+               '"{}" is constant but is a dependency of some symbol'
+               .format(sym.name))
+
+        verify(not sym.choice,
+               '"{}" is constant and a choice symbol'.format(sym.name))
+
+        sym.__repr__()
+        sym.__str__()
+        sym.assignable
+        kconf.disable_warnings()
+        sym.set_value(2)
+        sym.set_value("foo")
+        sym.unset_value()
+        kconf.enable_warnings()  # Legacy warning function
+        sym.str_value
+        sym.tri_value
+        sym.type
+        sym.visibility
+
+    for choice in kconf.choices:
+        for sym in choice.syms:
+            verify(sym.choice is choice,
+                   "{0} is in choice.syms but 'sym.choice' is not the choice"
+                   .format(sym.name))
+
+            verify(sym.type in (BOOL, TRISTATE),
+                   "{} is a choice symbol but is not a bool/tristate"
+                   .format(sym.name))
+
+        choice.__str__()
+        choice.__repr__()
+        choice.str_value
+        choice.tri_value
+        choice.user_value
+        choice.assignable
+        choice.selection
+        choice.type
+        choice.visibility
+
+    # Menu nodes
+
+    node = kconf.top_node
+
+    while 1:
+        # Everything else should be well exercised elsewhere
+        node.__repr__()
+        node.__str__()
+        verify(isinstance(node.item, (Symbol, Choice)) or \
+               node.item in (MENU, COMMENT),
+               "'{}' appeared as a menu item".format(node.item))
+
+        if node.list is not None:
+            node = node.list
+
+        elif node.next is not None:
+            node = node.next
+
+        else:
+            while node.parent is not None:
+                node = node.parent
+                if node.next is not None:
+                    node = node.next
+                    break
+            else:
+                break
+
+
+def test_alldefconfig(arch, srcarch):
+    """
+    Verify that alldefconfig.py generates the same .config as
+    'make alldefconfig', for each architecture. Runs the script via
+    'make scriptconfig'.
+    """
+    shell("make scriptconfig SCRIPT=Kconfiglib/alldefconfig.py "
+          "PYTHONCMD='{}'".format(sys.executable))
+    shell("mv .config ._config")
+    shell("scripts/kconfig/conf --alldefconfig Kconfig")
+
+    compare_configs(arch)
+
+
+def test_defconfig(arch, srcarch):
+    """
+    Verify that Kconfiglib generates the same .config as scripts/kconfig/conf,
+    for each architecture/defconfig pair. In obsessive mode, this test includes
+    nonsensical groupings of arches with defconfigs from other arches (every
+    arch/defconfig combination) and takes an order of magnitude longer time to
+    run.
+
+    With logging enabled, this test appends any failures to a file
+    test_defconfig_fails in the root.
+    """
+    kconf = Kconfig()
+
+    if obsessive:
+        defconfigs = []
+
+        # Collect all defconfigs. This could be done once instead, but it's
+        # a speedy operation comparatively.
+        for srcarch_ in os.listdir("arch"):
+            defconfigs.extend(defconfig_files(srcarch_))
+    else:
+        defconfigs = defconfig_files(srcarch)
+
+    # Test architecture for each defconfig
+
+    for defconfig in defconfigs:
+        rm_configs()
+
+        kconf.load_config(defconfig)
+        kconf.write_config("._config")
+        shell("scripts/kconfig/conf --defconfig='{}' Kconfig".
+              format(defconfig))
+
+        arch_defconfig_str = "  {:14}with {:60} ".format(arch, defconfig)
+
+        if equal_configs():
+            print(arch_defconfig_str + "OK")
+        else:
+            print(arch_defconfig_str + "FAIL")
+            fail()
+            if log:
+                with open("test_defconfig_fails", "a") as fail_log:
+                    fail_log.write("{} with {} did not match\n"
+                                   .format(arch, defconfig))
+
+
+def test_min_config(arch, srcarch):
+    """
+    Verify that Kconfiglib generates the same .config as 'make savedefconfig'
+    for each architecture/defconfig pair.
+    """
+    kconf = Kconfig()
+
+    if obsessive_min_config:
+        defconfigs = []
+        for srcarch_ in os.listdir("arch"):
+            defconfigs.extend(defconfig_files(srcarch_))
+    else:
+        defconfigs = defconfig_files(srcarch)
+
+    for defconfig in defconfigs:
+        rm_configs()
+
+        kconf.load_config(defconfig)
+        kconf.write_min_config("._config")
+
+        shell("cp {} .config".format(defconfig))
+
+        shell("scripts/kconfig/conf --savedefconfig=.config Kconfig")
+
+        arch_defconfig_str = "  {:14}with {:60} ".format(arch, defconfig)
+
+        if equal_configs():
+            print(arch_defconfig_str + "OK")
+        else:
+            print(arch_defconfig_str + "FAIL")
+
+
+#
+# Helper functions
+#
+
+
+def defconfig_files(srcarch):
+    # Yields a list of defconfig file filenames for a particular srcarch
+    # subdirectory (arch/<srcarch>/)
+
+    srcarch_dir = os.path.join("arch", srcarch)
+
+    # Some arches have a defconfig in the root of their arch/<arch>/ directory
+    root_defconfig = os.path.join(srcarch_dir, "defconfig")
+    if os.path.exists(root_defconfig):
+        yield root_defconfig
+
+    # Assume all files in the arch/<arch>/configs/ directory (if it exists) are
+    # configurations
+    defconfigs_dir = os.path.join(srcarch_dir, "configs")
+
+    if not os.path.isdir(defconfigs_dir):
+        return
+
+    for dirpath, _, filenames in os.walk(defconfigs_dir):
+        for filename in filenames:
+            yield os.path.join(dirpath, filename)
+
+
+def rm_configs():
+    # Delete any old ".config" (generated by the C implementation) and
+    # "._config" (generated by us), if present.
+
+    def rm_if_exists(f):
+        if os.path.exists(f):
+            os.remove(f)
+
+    rm_if_exists(".config")
+    rm_if_exists("._config")
+
+
+def compare_configs(arch):
+    if equal_configs():
+        print("{:14}OK".format(arch))
+    else:
+        print("{:14}FAIL".format(arch))
+        fail()
+
+
+def equal_configs():
+    with open(".config") as f:
+        their = f.readlines()
+
+    # Strip the header generated by 'conf'
+    i = 0
+    for line in their:
+        if not line.startswith("#") or \
+           re.match(r"# CONFIG_(\w+) is not set", line):
+            break
+        i += 1
+    their = their[i:]
+
+    try:
+        f = open("._config")
+    except EnvironmentError as e:
+        if e.errno != errno.ENOENT:
+            raise
+        print("._config not found. Did you forget to apply the Makefile patch?")
+        return False
+    else:
+        with f:
+            # [1:] strips the default header
+            our = f.readlines()[1:]
+
+    if their == our:
+        return True
+
+    # Print a unified diff to help debugging
+    print("Mismatched .config's! Unified diff:")
+    sys.stdout.writelines(difflib.unified_diff(their, our, fromfile="their",
+                                               tofile="our"))
+
+    return False
+
+
+if __name__ == "__main__":
+    run_tests()
-- 
2.7.4




--===============5837648016574421209==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============5837648016574421209==--

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 12:07:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 12:07:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAvDN-0000CO-6j; Thu, 19 Sep 2019 12:07:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsZ8-0006to-RK
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:30 +0000
X-Inumbo-ID: 4c63ff76-dabe-11e9-a337-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 4c63ff76-dabe-11e9-a337-bc764e2007e4;
 Thu, 19 Sep 2019 09:17:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id E1EB6105583;
 Thu, 19 Sep 2019 11:17:26 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id IwoWL395jIie; Thu, 19 Sep 2019 11:17:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 9F21A105581
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:25 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:23 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:06 +0200
Message-ID: <20190919091607.23327-23-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Thu, 19 Sep 2019 12:07:11 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH v3 22/23] kconfig: Remove the old
 kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: multipart/mixed; boundary="===============1337069668052425768=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============1337069668052425768==
Content-Type: text/plain; charset="y"
Content-Transfer-Encoding: 8bit

Signed-off-by: Sharan Santhanam <sharan.santhanam@neclab.eu>
---
 support/kconfig/Makefile                           |  321 ---
 support/kconfig/Makefile.br                        |   53 -
 support/kconfig/POTFILES.in                        |   12 -
 support/kconfig/README.unikraft                    |   21 -
 support/kconfig/check.sh                           |   14 -
 support/kconfig/conf.c                             |  717 ------
 support/kconfig/confdata.c                         | 1279 ----------
 support/kconfig/expr.c                             | 1168 ---------
 support/kconfig/expr.h                             |  238 --
 support/kconfig/fixdep.c                           |  409 ----
 support/kconfig/foo.h                              |   12 -
 support/kconfig/gconf.c                            | 1542 ------------
 support/kconfig/gconf.glade                        |  661 -----
 support/kconfig/images.c                           |  326 ---
 support/kconfig/kxgettext.c                        |  235 --
 support/kconfig/list.h                             |  131 -
 support/kconfig/lkc.h                              |  199 --
 support/kconfig/lkc_proto.h                        |   57 -
 support/kconfig/lxdialog/.gitignore                |    4 -
 support/kconfig/lxdialog/BIG.FAT.WARNING           |    4 -
 support/kconfig/lxdialog/check-lxdialog.sh         |   91 -
 support/kconfig/lxdialog/checklist.c               |  332 ---
 support/kconfig/lxdialog/dialog.h                  |  257 --
 support/kconfig/lxdialog/inputbox.c                |  301 ---
 support/kconfig/lxdialog/menubox.c                 |  437 ----
 support/kconfig/lxdialog/textbox.c                 |  408 ----
 support/kconfig/lxdialog/util.c                    |  713 ------
 support/kconfig/lxdialog/yesno.c                   |  114 -
 support/kconfig/mconf.c                            | 1037 --------
 support/kconfig/menu.c                             |  694 ------
 support/kconfig/merge_config.sh                    |  150 --
 support/kconfig/nconf.c                            | 1557 ------------
 support/kconfig/nconf.gui.c                        |  656 -----
 support/kconfig/nconf.h                            |   96 -
 .../01-kconfig-kernel-to-buildroot-unikore.patch   |   98 -
 .../patches/06-br-build-system-integration.patch   |   35 -
 support/kconfig/patches/10-br-build-system.patch   |   80 -
 .../patches/11-use-mktemp-for-lxdialog.patch       |   17 -
 .../kconfig/patches/12-fix-glade-file-path.patch   |   17 -
 .../patches/14-support-out-of-tree-config.patch    |  207 --
 .../kconfig/patches/15-fix-qconf-moc-rule.patch    |   24 -
 ...dialog-get-ncurses-CFLAGS-with-pkg-config.patch |   50 -
 support/kconfig/patches/series                     |    8 -
 support/kconfig/qconf.cc                           | 1795 --------------
 support/kconfig/qconf.h                            |  338 ---
 support/kconfig/streamline_config.pl               |  640 -----
 support/kconfig/symbol.c                           | 1373 -----------
 support/kconfig/util.c                             |  171 --
 support/kconfig/zconf.gperf                        |   47 -
 support/kconfig/zconf.hash.c_shipped               |  286 ---
 support/kconfig/zconf.l                            |  363 ---
 support/kconfig/zconf.lex.c_shipped                | 2420 -------------------
 support/kconfig/zconf.tab.c_shipped                | 2538 --------------------
 support/kconfig/zconf.y                            |  733 ------
 54 files changed, 25486 deletions(-)
 delete mode 100644 support/kconfig/Makefile
 delete mode 100644 support/kconfig/Makefile.br
 delete mode 100644 support/kconfig/POTFILES.in
 delete mode 100644 support/kconfig/README.unikraft
 delete mode 100755 support/kconfig/check.sh
 delete mode 100644 support/kconfig/conf.c
 delete mode 100644 support/kconfig/confdata.c
 delete mode 100644 support/kconfig/expr.c
 delete mode 100644 support/kconfig/expr.h
 delete mode 100644 support/kconfig/fixdep.c
 delete mode 100644 support/kconfig/foo.h
 delete mode 100644 support/kconfig/gconf.c
 delete mode 100644 support/kconfig/gconf.glade
 delete mode 100644 support/kconfig/images.c
 delete mode 100644 support/kconfig/kxgettext.c
 delete mode 100644 support/kconfig/list.h
 delete mode 100644 support/kconfig/lkc.h
 delete mode 100644 support/kconfig/lkc_proto.h
 delete mode 100644 support/kconfig/lxdialog/.gitignore
 delete mode 100644 support/kconfig/lxdialog/BIG.FAT.WARNING
 delete mode 100755 support/kconfig/lxdialog/check-lxdialog.sh
 delete mode 100644 support/kconfig/lxdialog/checklist.c
 delete mode 100644 support/kconfig/lxdialog/dialog.h
 delete mode 100644 support/kconfig/lxdialog/inputbox.c
 delete mode 100644 support/kconfig/lxdialog/menubox.c
 delete mode 100644 support/kconfig/lxdialog/textbox.c
 delete mode 100644 support/kconfig/lxdialog/util.c
 delete mode 100644 support/kconfig/lxdialog/yesno.c
 delete mode 100644 support/kconfig/mconf.c
 delete mode 100644 support/kconfig/menu.c
 delete mode 100755 support/kconfig/merge_config.sh
 delete mode 100644 support/kconfig/nconf.c
 delete mode 100644 support/kconfig/nconf.gui.c
 delete mode 100644 support/kconfig/nconf.h
 delete mode 100644 support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch
 delete mode 100644 support/kconfig/patches/06-br-build-system-integration.patch
 delete mode 100644 support/kconfig/patches/10-br-build-system.patch
 delete mode 100644 support/kconfig/patches/11-use-mktemp-for-lxdialog.patch
 delete mode 100644 support/kconfig/patches/12-fix-glade-file-path.patch
 delete mode 100644 support/kconfig/patches/14-support-out-of-tree-config.patch
 delete mode 100644 support/kconfig/patches/15-fix-qconf-moc-rule.patch
 delete mode 100644 support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
 delete mode 100644 support/kconfig/patches/series
 delete mode 100644 support/kconfig/qconf.cc
 delete mode 100644 support/kconfig/qconf.h
 delete mode 100644 support/kconfig/streamline_config.pl
 delete mode 100644 support/kconfig/symbol.c
 delete mode 100644 support/kconfig/util.c
 delete mode 100644 support/kconfig/zconf.gperf
 delete mode 100644 support/kconfig/zconf.hash.c_shipped
 delete mode 100644 support/kconfig/zconf.l
 delete mode 100644 support/kconfig/zconf.lex.c_shipped
 delete mode 100644 support/kconfig/zconf.tab.c_shipped
 delete mode 100644 support/kconfig/zconf.y

diff --git a/support/kconfig/Makefile b/support/kconfig/Makefile
deleted file mode 100644
index 6d5b611..0000000
--- a/support/kconfig/Makefile
+++ /dev/null
@@ -1,321 +0,0 @@
-# ===========================================================================
-# Kernel configuration targets
-# These targets are used from top-level makefile
-
-PHONY += oldconfig xconfig gconfig menuconfig config silentoldconfig update-po-config \
-	localmodconfig localyesconfig
-
-ifdef KBUILD_KCONFIG
-Kconfig := $(KBUILD_KCONFIG)
-else
-Kconfig := Kconfig
-endif
-
-# We need this, in case the user has it in its environment
-unexport CONFIG_
-
-xconfig: $(obj)/qconf
-	$< $(Kconfig)
-
-gconfig: $(obj)/gconf
-	$< $(Kconfig)
-
-menuconfig: $(obj)/mconf
-	$< $(Kconfig)
-
-config: $(obj)/conf
-	$< --oldaskconfig $(Kconfig)
-
-nconfig: $(obj)/nconf
-	$< $(Kconfig)
-
-oldconfig: $(obj)/conf
-	$< --$@ $(Kconfig)
-
-silentoldconfig: $(obj)/conf
-	$(Q)mkdir -p include/generated
-	$< --$@ $(Kconfig)
-
-localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
-	$(Q)mkdir -p include/generated
-	$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
-	$(Q)if [ -f .config ]; then 					\
-			cmp -s .tmp.config .config ||			\
-			(mv -f .config .config.old.1;			\
-			 mv -f .tmp.config .config;			\
-			 $(obj)/conf --silentoldconfig $(Kconfig);	\
-			 mv -f .config.old.1 .config.old)		\
-	else								\
-			mv -f .tmp.config .config;			\
-			$(obj)/conf --silentoldconfig $(Kconfig);	\
-	fi
-	$(Q)rm -f .tmp.config
-
-# Create new linux.pot file
-# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
-update-po-config: $(obj)/kxgettext $(obj)/gconf.glade.h
-	$(Q)echo "  GEN     config.pot"
-	$(Q)xgettext --default-domain=linux                         \
-	    --add-comments --keyword=_ --keyword=N_                 \
-	    --from-code=UTF-8                                       \
-	    --files-from=$(srctree)/scripts/kconfig/POTFILES.in     \
-	    --directory=$(srctree) --directory=$(objtree)           \
-	    --output $(obj)/config.pot
-	$(Q)sed -i s/CHARSET/UTF-8/ $(obj)/config.pot
-	$(Q)(for i in `ls $(srctree)/arch/*/Kconfig      \
-	    $(srctree)/arch/*/um/Kconfig`;               \
-	    do                                           \
-		echo "  GEN     $$i";                    \
-		$(obj)/kxgettext $$i                     \
-		     >> $(obj)/config.pot;               \
-	    done )
-	$(Q)echo "  GEN     linux.pot"
-	$(Q)msguniq --sort-by-file --to-code=UTF-8 $(obj)/config.pot \
-	    --output $(obj)/linux.pot
-	$(Q)rm -f $(obj)/config.pot
-
-PHONY += allnoconfig allyesconfig allmodconfig alldefconfig randconfig
-
-allnoconfig allyesconfig allmodconfig alldefconfig randconfig: $(obj)/conf
-	$< --$@ $(Kconfig)
-
-PHONY += listnewconfig olddefconfig oldnoconfig savedefconfig defconfig
-
-listnewconfig olddefconfig: $(obj)/conf
-	$< --$@ $(Kconfig)
-
-# oldnoconfig is an alias of olddefconfig, because people already are dependent
-# on its behavior(sets new symbols to their default value but not 'n') with the
-# counter-intuitive name.
-oldnoconfig: $(obj)/conf
-	$< --olddefconfig $(Kconfig)
-
-savedefconfig: $(obj)/conf
-	$< --$@=defconfig $(Kconfig)
-
-defconfig: $(obj)/conf
-ifeq ($(KBUILD_DEFCONFIG),)
-	$< --defconfig $(Kconfig)
-else
-	@echo "*** Default configuration is based on '$(KBUILD_DEFCONFIG)'"
-	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$(KBUILD_DEFCONFIG) $(Kconfig)
-endif
-
-%_defconfig: $(obj)/conf
-	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
-
-# Help text used by make help
-help:
-	@echo  '  config	  - Update current config utilising a line-oriented program'
-	@echo  '  nconfig         - Update current config utilising a ncurses menu based program'
-	@echo  '  menuconfig	  - Update current config utilising a menu based program'
-	@echo  '  xconfig	  - Update current config utilising a QT based front-end'
-	@echo  '  gconfig	  - Update current config utilising a GTK based front-end'
-	@echo  '  oldconfig	  - Update current config utilising a provided .config as base'
-	@echo  '  localmodconfig  - Update current config disabling modules not loaded'
-	@echo  '  localyesconfig  - Update current config converting local mods to core'
-	@echo  '  silentoldconfig - Same as oldconfig, but quietly, additionally update deps'
-	@echo  '  defconfig	  - New config with default from ARCH supplied defconfig'
-	@echo  '  savedefconfig   - Save current config as ./defconfig (minimal config)'
-	@echo  '  allnoconfig	  - New config where all options are answered with no'
-	@echo  '  allyesconfig	  - New config where all options are accepted with yes'
-	@echo  '  allmodconfig	  - New config selecting modules when possible'
-	@echo  '  alldefconfig    - New config with all symbols set to default'
-	@echo  '  randconfig	  - New config with random answer to all options'
-	@echo  '  listnewconfig   - List new options'
-	@echo  '  olddefconfig	  - Same as silentoldconfig but sets new symbols to their default value'
-
-# lxdialog stuff
-check-lxdialog  := $(srctree)/$(src)/lxdialog/check-lxdialog.sh
-
-# Use recursively expanded variables so we do not call gcc unless
-# we really need to do so. (Do not call gcc as part of make mrproper)
-HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags) \
-                    -DLOCALE
-
-# ===========================================================================
-# Shared Makefile for the various kconfig executables:
-# conf:	  Used for defconfig, oldconfig and related targets
-# nconf:  Used for the nconfig target.
-#         Utilizes ncurses
-# mconf:  Used for the menuconfig target
-#         Utilizes the lxdialog package
-# qconf:  Used for the xconfig target
-#         Based on QT which needs to be installed to compile it
-# gconf:  Used for the gconfig target
-#         Based on GTK which needs to be installed to compile it
-# object files used by all kconfig flavours
-
-lxdialog := lxdialog/checklist.o lxdialog/util.o lxdialog/inputbox.o
-lxdialog += lxdialog/textbox.o lxdialog/yesno.o lxdialog/menubox.o
-
-conf-objs	:= conf.o  zconf.tab.o
-mconf-objs     := mconf.o zconf.tab.o $(lxdialog)
-nconf-objs     := nconf.o zconf.tab.o nconf.gui.o
-kxgettext-objs	:= kxgettext.o zconf.tab.o
-qconf-cxxobjs	:= qconf.o
-qconf-objs	:= zconf.tab.o
-gconf-objs	:= gconf.o zconf.tab.o
-fixdep-obj	:= fixdep.o
-
-hostprogs-y := conf
-hostprogs-y += fixdep
-
-ifeq ($(MAKECMDGOALS),nconf)
-	hostprogs-y += nconf
-endif
-
-ifeq ($(MAKECMDGOALS),mconf)
-	hostprogs-y += mconf
-endif
-
-ifeq ($(MAKECMDGOALS),update-po-config)
-	hostprogs-y += kxgettext
-endif
-
-ifeq ($(MAKECMDGOALS),qconf)
-	qconf-target := 1
-endif
-ifeq ($(MAKECMDGOALS),gconf)
-	gconf-target := 1
-endif
-
-
-ifeq ($(qconf-target),1)
-	hostprogs-y += qconf
-endif
-
-ifeq ($(gconf-target),1)
-	hostprogs-y += gconf
-endif
-
-clean-files	:= qconf.moc .tmp_qtcheck .tmp_gtkcheck
-clean-files	+= zconf.tab.c zconf.lex.c zconf.hash.c gconf.glade.h
-clean-files     += mconf qconf gconf nconf
-clean-files     += config.pot linux.pot
-
-# Check that we have the required ncurses stuff installed for lxdialog (menuconfig)
-PHONY += $(obj)/dochecklxdialog
-$(addprefix $(obj)/,$(lxdialog)): $(obj)/dochecklxdialog
-$(obj)/dochecklxdialog:
-	$(Q)$(CONFIG_SHELL) $(check-lxdialog) -check $(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTLOADLIBES_mconf)
-
-always := dochecklxdialog
-
-# Add environment specific flags
-HOST_EXTRACFLAGS += $(shell $(CONFIG_SHELL) $(srctree)/$(src)/check.sh $(HOSTCC) $(HOSTCFLAGS))
-
-# generated files seem to need this to find local include files
-HOSTCFLAGS_zconf.lex.o	:= -I$(src)
-HOSTCFLAGS_zconf.tab.o	:= -I$(src)
-
-LEX_PREFIX_zconf	:= zconf
-YACC_PREFIX_zconf	:= zconf
-
-HOSTLOADLIBES_qconf	= $(KC_QT_LIBS)
-HOSTCXXFLAGS_qconf.o	= $(KC_QT_CFLAGS)
-
-HOSTLOADLIBES_gconf	= `pkg-config --libs gtk+-2.0 gmodule-2.0 libglade-2.0`
-HOSTCFLAGS_gconf.o	= `pkg-config --cflags gtk+-2.0 gmodule-2.0 libglade-2.0` \
-                          -Wno-missing-prototypes
-
-HOSTLOADLIBES_mconf   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
-
-HOSTLOADLIBES_nconf	= $(shell \
-				pkg-config --libs menu panel ncurses 2>/dev/null \
-				|| echo "-lmenu -lpanel -lncurses"  )
-$(obj)/qconf.o: $(obj)/.tmp_qtcheck
-
-ifeq ($(qconf-target),1)
-$(obj)/.tmp_qtcheck: $(src)/Makefile
--include $(obj)/.tmp_qtcheck
-
-# QT needs some extra effort...
-$(obj)/.tmp_qtcheck:
-	@set -e; echo "  CHECK   qt"; dir=""; pkg=""; \
-	if ! pkg-config --exists QtCore 2> /dev/null; then \
-	    echo "* Unable to find the QT4 tool qmake. Trying to use QT3"; \
-	    pkg-config --exists qt 2> /dev/null && pkg=qt; \
-	    pkg-config --exists qt-mt 2> /dev/null && pkg=qt-mt; \
-	    if [ -n "$$pkg" ]; then \
-	      cflags="\$$(shell pkg-config $$pkg --cflags)"; \
-	      libs="\$$(shell pkg-config $$pkg --libs)"; \
-	      moc="\$$(shell pkg-config $$pkg --variable=prefix)/bin/moc"; \
-	      dir="$$(pkg-config $$pkg --variable=prefix)"; \
-	    else \
-	      for d in $$QTDIR /usr/share/qt* /usr/lib/qt*; do \
-	        if [ -f $$d/include/qconfig.h ]; then dir=$$d; break; fi; \
-	      done; \
-	      if [ -z "$$dir" ]; then \
-	        echo >&2 "*"; \
-	        echo >&2 "* Unable to find any QT installation. Please make sure that"; \
-	        echo >&2 "* the QT4 or QT3 development package is correctly installed and"; \
-	        echo >&2 "* either qmake can be found or install pkg-config or set"; \
-	        echo >&2 "* the QTDIR environment variable to the correct location."; \
-	        echo >&2 "*"; \
-	        false; \
-	      fi; \
-	      libpath=$$dir/lib; lib=qt; osdir=""; \
-	      $(HOSTCXX) -print-multi-os-directory > /dev/null 2>&1 && \
-	        osdir=x$$($(HOSTCXX) -print-multi-os-directory); \
-	      test -d $$libpath/$$osdir && libpath=$$libpath/$$osdir; \
-	      test -f $$libpath/libqt-mt.so && lib=qt-mt; \
-	      cflags="-I$$dir/include"; \
-	      libs="-L$$libpath -Wl,-rpath,$$libpath -l$$lib"; \
-	      moc="$$dir/bin/moc"; \
-	    fi; \
-	    if [ ! -x $$dir/bin/moc -a -x /usr/bin/moc ]; then \
-	      echo "*"; \
-	      echo "* Unable to find $$dir/bin/moc, using /usr/bin/moc instead."; \
-	      echo "*"; \
-	      moc="/usr/bin/moc"; \
-	    fi; \
-	else \
-	  cflags="\$$(shell pkg-config QtCore QtGui Qt3Support --cflags)"; \
-	  libs="\$$(shell pkg-config QtCore QtGui Qt3Support --libs)"; \
-	  moc="\$$(shell pkg-config QtCore --variable=moc_location)"; \
-	  [ -n "$$moc" ] || moc="\$$(shell pkg-config QtCore --variable=prefix)/bin/moc"; \
-	fi; \
-	echo "KC_QT_CFLAGS=$$cflags" > $@; \
-	echo "KC_QT_LIBS=$$libs" >> $@; \
-	echo "KC_QT_MOC=$$moc" >> $@
-endif
-
-$(obj)/gconf.o: $(obj)/.tmp_gtkcheck
-
-ifeq ($(gconf-target),1)
--include $(obj)/.tmp_gtkcheck
-
-# GTK needs some extra effort, too...
-$(obj)/.tmp_gtkcheck:
-	@if `pkg-config --exists gtk+-2.0 gmodule-2.0 libglade-2.0`; then		\
-		if `pkg-config --atleast-version=2.0.0 gtk+-2.0`; then			\
-			touch $@;								\
-		else									\
-			echo >&2 "*"; 							\
-			echo >&2 "* GTK+ is present but version >= 2.0.0 is required.";	\
-			echo >&2 "*";							\
-			false;								\
-		fi									\
-	else										\
-		echo >&2 "*"; 								\
-		echo >&2 "* Unable to find the GTK+ installation. Please make sure that"; 	\
-		echo >&2 "* the GTK+ 2.0 development package is correctly installed..."; 	\
-		echo >&2 "* You need gtk+-2.0, glib-2.0 and libglade-2.0."; 		\
-		echo >&2 "*"; 								\
-		false;									\
-	fi
-endif
-
-$(obj)/zconf.tab.o: $(obj)/zconf.lex.c $(obj)/zconf.hash.c
-
-$(obj)/qconf.o: $(obj)/qconf.moc
-
-$(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
-	$(KC_QT_MOC) -i $< -o $@
-
-# Extract gconf menu items for I18N support
-$(obj)/gconf.glade.h: $(obj)/gconf.glade
-	$(Q)intltool-extract --type=gettext/glade --srcdir=$(srctree) \
-	$(obj)/gconf.glade
-
diff --git a/support/kconfig/Makefile.br b/support/kconfig/Makefile.br
deleted file mode 100644
index 41c5ce1..0000000
--- a/support/kconfig/Makefile.br
+++ /dev/null
@@ -1,53 +0,0 @@
-src := .
-top_srcdir=../../
-top_builddir=../../
-srctree := .
-obj ?= .
-
-include Makefile
-#HOSTCFLAGS+=-Dinline="" -include foo.h
--include $(obj)/.depend
-$(obj)/.depend: $(wildcard *.h *.c)
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) -MM *.c > $@ 2>/dev/null || :
-
-__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
-host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
-host-cmulti := $(foreach m,$(__hostprogs),\
-           $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
-host-cxxmulti := $(foreach m,$(__hostprogs),\
-           $(if $($(m)-cxxobjs),$(m),$(if $($(m)-objs),)))
-host-cobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-objs))))
-host-cxxobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-cxxobjs))))
-
-HOST_EXTRACFLAGS += -I$(obj) -DCONFIG_=\"\"
-
-$(host-csingle): %: %.c
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $< -o $(obj)/$@
-
-$(host-cmulti): %: $(host-cobjs) $(host-cshlib)
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-
-$(host-cxxmulti): %: $(host-cxxobjs) $(host-cobjs) $(host-cshlib)
-	$(HOSTCXX) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs) $($(@F)-cxxobjs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-
-$(obj)/%.o: %.c
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-
-$(obj)/%.o: $(obj)/%.c
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-
-$(obj)/%.o: %.cc
-	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$(@F)) -c $< -o $@
-
-$(obj)/%:: $(src)/%_shipped
-	$(Q)cat $< > $@
-
-clean:
-	$(Q)rm -f $(addprefix $(obj)/,$(clean-files))
-distclean: clean
-	$(Q)rm -f $(addprefix $(obj)/,$(lxdialog) $(conf-objs) $(mconf-objs) $(kxgettext-objs) \
-		$(hostprogs-y) $(qconf-cxxobjs) $(qconf-objs) $(gconf-objs) \
-		mconf .depend)
-
-FORCE:
-.PHONY: FORCE clean distclean
diff --git a/support/kconfig/POTFILES.in b/support/kconfig/POTFILES.in
deleted file mode 100644
index 9674573..0000000
--- a/support/kconfig/POTFILES.in
+++ /dev/null
@@ -1,12 +0,0 @@
-scripts/kconfig/lxdialog/checklist.c
-scripts/kconfig/lxdialog/inputbox.c
-scripts/kconfig/lxdialog/menubox.c
-scripts/kconfig/lxdialog/textbox.c
-scripts/kconfig/lxdialog/util.c
-scripts/kconfig/lxdialog/yesno.c
-scripts/kconfig/mconf.c
-scripts/kconfig/conf.c
-scripts/kconfig/confdata.c
-scripts/kconfig/gconf.c
-scripts/kconfig/gconf.glade.h
-scripts/kconfig/qconf.cc
diff --git a/support/kconfig/README.unikraft b/support/kconfig/README.unikraft
deleted file mode 100644
index ee8a31f..0000000
--- a/support/kconfig/README.unikraft
+++ /dev/null
@@ -1,21 +0,0 @@
-This is a copy of the kconfig code in the kernel (currently 3.13-rc5) tweaked
-to suit Unikraft. It was retrieved and modified from buildroot 2016.05-git
-(c0293c3).
-
-To update (from linux):
-	cp -r /usr/src/linux/scripts/kconfig support/kconfig.new
-	cd support/kconfig.new
-	cp -a ../kconfig/patches ../kconfig/README.unikraft ../kconfig/.gitignore .
-	quilt push -a
-	# Fix any conflict
-	cd ..
-	rm -rf kconfig
-	mv kconfig.new kconfig
-
-Then verify the toplevel targets work:
-	config
-	defconfig
-	menuconfig
-	xconfig
-	gconfig
-	oldconfig
diff --git a/support/kconfig/check.sh b/support/kconfig/check.sh
deleted file mode 100755
index 854d9c7..0000000
--- a/support/kconfig/check.sh
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/sh
-# Needed for systems without gettext
-$* -x c -o /dev/null - > /dev/null 2>&1 << EOF
-#include <libintl.h>
-int main()
-{
-	gettext("");
-	return 0;
-}
-EOF
-if [ ! "$?" -eq "0"  ]; then
-	echo -DKBUILD_NO_NLS;
-fi
-
diff --git a/support/kconfig/conf.c b/support/kconfig/conf.c
deleted file mode 100644
index 553fc76..0000000
--- a/support/kconfig/conf.c
+++ /dev/null
@@ -1,717 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <locale.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <getopt.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <errno.h>
-
-#include "lkc.h"
-
-static void conf(struct menu *menu);
-static void check_conf(struct menu *menu);
-static void xfgets(char *str, int size, FILE *in);
-
-enum input_mode {
-	oldaskconfig,
-	silentoldconfig,
-	oldconfig,
-	allnoconfig,
-	allyesconfig,
-	allmodconfig,
-	alldefconfig,
-	randconfig,
-	defconfig,
-	savedefconfig,
-	listnewconfig,
-	olddefconfig,
-} input_mode = oldaskconfig;
-
-static int indent = 1;
-static int tty_stdio;
-static int valid_stdin = 1;
-static int sync_kconfig;
-static int conf_cnt;
-static char line[128];
-static struct menu *rootEntry;
-
-static void print_help(struct menu *menu)
-{
-	struct gstr help = str_new();
-
-	menu_get_ext_help(menu, &help);
-
-	printf("\n%s\n", str_get(&help));
-	str_free(&help);
-}
-
-static void strip(char *str)
-{
-	char *p = str;
-	int l;
-
-	while ((isspace(*p)))
-		p++;
-	l = strlen(p);
-	if (p != str)
-		memmove(str, p, l + 1);
-	if (!l)
-		return;
-	p = str + l - 1;
-	while ((isspace(*p)))
-		*p-- = 0;
-}
-
-static void check_stdin(void)
-{
-	if (!valid_stdin) {
-		printf(_("aborted!\n\n"));
-		printf(_("Console input/output is redirected. "));
-		printf(_("Run 'make oldconfig' to update configuration.\n\n"));
-		exit(1);
-	}
-}
-
-static int conf_askvalue(struct symbol *sym, const char *def)
-{
-	enum symbol_type type = sym_get_type(sym);
-
-	if (!sym_has_value(sym))
-		printf(_("(NEW) "));
-
-	line[0] = '\n';
-	line[1] = 0;
-
-	if (!sym_is_changable(sym)) {
-		printf("%s\n", def);
-		line[0] = '\n';
-		line[1] = 0;
-		return 0;
-	}
-
-	switch (input_mode) {
-	case oldconfig:
-	case silentoldconfig:
-		if (sym_has_value(sym)) {
-			printf("%s\n", def);
-			return 0;
-		}
-		check_stdin();
-		/* fall through */
-	case oldaskconfig:
-		fflush(stdout);
-		xfgets(line, 128, stdin);
-		if (!tty_stdio)
-			printf("\n");
-		return 1;
-	default:
-		break;
-	}
-
-	switch (type) {
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		printf("%s\n", def);
-		return 1;
-	default:
-		;
-	}
-	printf("%s", line);
-	return 1;
-}
-
-static int conf_string(struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	const char *def;
-
-	while (1) {
-		printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
-		printf("(%s) ", sym->name);
-		def = sym_get_string_value(sym);
-		if (sym_get_string_value(sym))
-			printf("[%s] ", def);
-		if (!conf_askvalue(sym, def))
-			return 0;
-		switch (line[0]) {
-		case '\n':
-			break;
-		case '?':
-			/* print help */
-			if (line[1] == '\n') {
-				print_help(menu);
-				def = NULL;
-				break;
-			}
-			/* fall through */
-		default:
-			line[strlen(line)-1] = 0;
-			def = line;
-		}
-		if (def && sym_set_string_value(sym, def))
-			return 0;
-	}
-}
-
-static int conf_sym(struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	tristate oldval, newval;
-
-	while (1) {
-		printf("%*s%s ", indent - 1, "", _(menu->prompt->text));
-		if (sym->name)
-			printf("(%s) ", sym->name);
-		putchar('[');
-		oldval = sym_get_tristate_value(sym);
-		switch (oldval) {
-		case no:
-			putchar('N');
-			break;
-		case mod:
-			putchar('M');
-			break;
-		case yes:
-			putchar('Y');
-			break;
-		}
-		if (oldval != no && sym_tristate_within_range(sym, no))
-			printf("/n");
-		if (oldval != mod && sym_tristate_within_range(sym, mod))
-			printf("/m");
-		if (oldval != yes && sym_tristate_within_range(sym, yes))
-			printf("/y");
-		if (menu_has_help(menu))
-			printf("/?");
-		printf("] ");
-		if (!conf_askvalue(sym, sym_get_string_value(sym)))
-			return 0;
-		strip(line);
-
-		switch (line[0]) {
-		case 'n':
-		case 'N':
-			newval = no;
-			if (!line[1] || !strcmp(&line[1], "o"))
-				break;
-			continue;
-		case 'm':
-		case 'M':
-			newval = mod;
-			if (!line[1])
-				break;
-			continue;
-		case 'y':
-		case 'Y':
-			newval = yes;
-			if (!line[1] || !strcmp(&line[1], "es"))
-				break;
-			continue;
-		case 0:
-			newval = oldval;
-			break;
-		case '?':
-			goto help;
-		default:
-			continue;
-		}
-		if (sym_set_tristate_value(sym, newval))
-			return 0;
-help:
-		print_help(menu);
-	}
-}
-
-static int conf_choice(struct menu *menu)
-{
-	struct symbol *sym, *def_sym;
-	struct menu *child;
-	bool is_new;
-
-	sym = menu->sym;
-	is_new = !sym_has_value(sym);
-	if (sym_is_changable(sym)) {
-		conf_sym(menu);
-		sym_calc_value(sym);
-		switch (sym_get_tristate_value(sym)) {
-		case no:
-			return 1;
-		case mod:
-			return 0;
-		case yes:
-			break;
-		}
-	} else {
-		switch (sym_get_tristate_value(sym)) {
-		case no:
-			return 1;
-		case mod:
-			printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
-			return 0;
-		case yes:
-			break;
-		}
-	}
-
-	while (1) {
-		int cnt, def;
-
-		printf("%*s%s\n", indent - 1, "", _(menu_get_prompt(menu)));
-		def_sym = sym_get_choice_value(sym);
-		cnt = def = 0;
-		line[0] = 0;
-		for (child = menu->list; child; child = child->next) {
-			if (!menu_is_visible(child))
-				continue;
-			if (!child->sym) {
-				printf("%*c %s\n", indent, '*', _(menu_get_prompt(child)));
-				continue;
-			}
-			cnt++;
-			if (child->sym == def_sym) {
-				def = cnt;
-				printf("%*c", indent, '>');
-			} else
-				printf("%*c", indent, ' ');
-			printf(" %d. %s", cnt, _(menu_get_prompt(child)));
-			if (child->sym->name)
-				printf(" (%s)", child->sym->name);
-			if (!sym_has_value(child->sym))
-				printf(_(" (NEW)"));
-			printf("\n");
-		}
-		printf(_("%*schoice"), indent - 1, "");
-		if (cnt == 1) {
-			printf("[1]: 1\n");
-			goto conf_childs;
-		}
-		printf("[1-%d", cnt);
-		if (menu_has_help(menu))
-			printf("?");
-		printf("]: ");
-		switch (input_mode) {
-		case oldconfig:
-		case silentoldconfig:
-			if (!is_new) {
-				cnt = def;
-				printf("%d\n", cnt);
-				break;
-			}
-			check_stdin();
-			/* fall through */
-		case oldaskconfig:
-			fflush(stdout);
-			xfgets(line, 128, stdin);
-			strip(line);
-			if (line[0] == '?') {
-				print_help(menu);
-				continue;
-			}
-			if (!line[0])
-				cnt = def;
-			else if (isdigit(line[0]))
-				cnt = atoi(line);
-			else
-				continue;
-			break;
-		default:
-			break;
-		}
-
-	conf_childs:
-		for (child = menu->list; child; child = child->next) {
-			if (!child->sym || !menu_is_visible(child))
-				continue;
-			if (!--cnt)
-				break;
-		}
-		if (!child)
-			continue;
-		if (line[0] && line[strlen(line) - 1] == '?') {
-			print_help(child);
-			continue;
-		}
-		sym_set_choice_value(sym, child->sym);
-		for (child = child->list; child; child = child->next) {
-			indent += 2;
-			conf(child);
-			indent -= 2;
-		}
-		return 1;
-	}
-}
-
-static void conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-
-	if (!menu_is_visible(menu))
-		return;
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	if (prop) {
-		const char *prompt;
-
-		switch (prop->type) {
-		case P_MENU:
-			if ((input_mode == silentoldconfig ||
-			     input_mode == listnewconfig ||
-			     input_mode == olddefconfig) &&
-			    rootEntry != menu) {
-				check_conf(menu);
-				return;
-			}
-			/* fall through */
-		case P_COMMENT:
-			prompt = menu_get_prompt(menu);
-			if (prompt)
-				printf("%*c\n%*c %s\n%*c\n",
-					indent, '*',
-					indent, '*', _(prompt),
-					indent, '*');
-		default:
-			;
-		}
-	}
-
-	if (!sym)
-		goto conf_childs;
-
-	if (sym_is_choice(sym)) {
-		conf_choice(menu);
-		if (sym->curr.tri != mod)
-			return;
-		goto conf_childs;
-	}
-
-	switch (sym->type) {
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		conf_string(menu);
-		break;
-	default:
-		conf_sym(menu);
-		break;
-	}
-
-conf_childs:
-	if (sym)
-		indent += 2;
-	for (child = menu->list; child; child = child->next)
-		conf(child);
-	if (sym)
-		indent -= 2;
-}
-
-static void check_conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct menu *child;
-
-	if (!menu_is_visible(menu))
-		return;
-
-	sym = menu->sym;
-	if (sym && !sym_has_value(sym)) {
-		if (sym_is_changable(sym) ||
-		    (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
-			if (input_mode == listnewconfig) {
-				if (sym->name && !sym_is_choice_value(sym)) {
-					printf("%s%s\n", CONFIG_, sym->name);
-				}
-			} else if (input_mode != olddefconfig) {
-				if (!conf_cnt++)
-					printf(_("*\n* Restart config...\n*\n"));
-				rootEntry = menu_get_parent_menu(menu);
-				conf(rootEntry);
-			}
-		}
-	}
-
-	for (child = menu->list; child; child = child->next)
-		check_conf(child);
-}
-
-static struct option long_opts[] = {
-	{"oldaskconfig",    no_argument,       NULL, oldaskconfig},
-	{"oldconfig",       no_argument,       NULL, oldconfig},
-	{"silentoldconfig", no_argument,       NULL, silentoldconfig},
-	{"defconfig",       optional_argument, NULL, defconfig},
-	{"savedefconfig",   required_argument, NULL, savedefconfig},
-	{"allnoconfig",     no_argument,       NULL, allnoconfig},
-	{"allyesconfig",    no_argument,       NULL, allyesconfig},
-	{"allmodconfig",    no_argument,       NULL, allmodconfig},
-	{"alldefconfig",    no_argument,       NULL, alldefconfig},
-	{"randconfig",      no_argument,       NULL, randconfig},
-	{"listnewconfig",   no_argument,       NULL, listnewconfig},
-	{"olddefconfig",    no_argument,       NULL, olddefconfig},
-	/*
-	 * oldnoconfig is an alias of olddefconfig, because people already
-	 * are dependent on its behavior(sets new symbols to their default
-	 * value but not 'n') with the counter-intuitive name.
-	 */
-	{"oldnoconfig",     no_argument,       NULL, olddefconfig},
-	{NULL, 0, NULL, 0}
-};
-
-static void conf_usage(const char *progname)
-{
-
-	printf("Usage: %s [option] <kconfig-file>\n", progname);
-	printf("[option] is _one_ of the following:\n");
-	printf("  --listnewconfig         List new options\n");
-	printf("  --oldaskconfig          Start a new configuration using a line-oriented program\n");
-	printf("  --oldconfig             Update a configuration using a provided .config as base\n");
-	printf("  --silentoldconfig       Same as oldconfig, but quietly, additionally update deps\n");
-	printf("  --olddefconfig          Same as silentoldconfig but sets new symbols to their default value\n");
-	printf("  --oldnoconfig           An alias of olddefconfig\n");
-	printf("  --defconfig <file>      New config with default defined in <file>\n");
-	printf("  --savedefconfig <file>  Save the minimal current configuration to <file>\n");
-	printf("  --allnoconfig           New config where all options are answered with no\n");
-	printf("  --allyesconfig          New config where all options are answered with yes\n");
-	printf("  --allmodconfig          New config where all options are answered with mod\n");
-	printf("  --alldefconfig          New config with all symbols set to default\n");
-	printf("  --randconfig            New config with random answer to all options\n");
-}
-
-int main(int ac, char **av)
-{
-	const char *progname = av[0];
-	int opt;
-	const char *name, *defconfig_file = NULL /* gcc uninit */;
-	struct stat tmpstat;
-
-	setlocale(LC_ALL, "");
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	tty_stdio = isatty(0) && isatty(1) && isatty(2);
-
-	while ((opt = getopt_long(ac, av, "", long_opts, NULL)) != -1) {
-		input_mode = (enum input_mode)opt;
-		switch (opt) {
-		case silentoldconfig:
-			sync_kconfig = 1;
-			break;
-		case defconfig:
-		case savedefconfig:
-			defconfig_file = optarg;
-			break;
-		case randconfig:
-		{
-			struct timeval now;
-			unsigned int seed;
-			char *seed_env;
-
-			/*
-			 * Use microseconds derived seed,
-			 * compensate for systems where it may be zero
-			 */
-			gettimeofday(&now, NULL);
-			seed = (unsigned int)((now.tv_sec + 1) * (now.tv_usec + 1));
-
-			seed_env = getenv("KCONFIG_SEED");
-			if( seed_env && *seed_env ) {
-				char *endp;
-				int tmp = (int)strtol(seed_env, &endp, 0);
-				if (*endp == '\0') {
-					seed = tmp;
-				}
-			}
-			fprintf( stderr, "KCONFIG_SEED=0x%X\n", seed );
-			srand(seed);
-			break;
-		}
-		case oldaskconfig:
-		case oldconfig:
-		case allnoconfig:
-		case allyesconfig:
-		case allmodconfig:
-		case alldefconfig:
-		case listnewconfig:
-		case olddefconfig:
-			break;
-		case '?':
-			conf_usage(progname);
-			exit(1);
-			break;
-		}
-	}
-	if (ac == optind) {
-		printf(_("%s: Kconfig file missing\n"), av[0]);
-		conf_usage(progname);
-		exit(1);
-	}
-	name = av[optind];
-	conf_parse(name);
-	if (sync_kconfig) {
-		name = conf_get_configname();
-		if (stat(name, &tmpstat)) {
-			fprintf(stderr, _("***\n"
-				"*** Configuration file \"%s\" not found!\n"
-				"***\n"
-				"*** Please run some configurator (e.g. \"make oldconfig\" or\n"
-				"*** \"make menuconfig\" or \"make xconfig\").\n"
-				"***\n"), name);
-			exit(1);
-		}
-	}
-
-	switch (input_mode) {
-	case defconfig:
-		if (!defconfig_file)
-			defconfig_file = conf_get_default_confname();
-		if (conf_read(defconfig_file)) {
-			printf(_("***\n"
-				"*** Can't find default configuration \"%s\"!\n"
-				"***\n"), defconfig_file);
-			exit(1);
-		}
-		break;
-	case savedefconfig:
-	case silentoldconfig:
-	case oldaskconfig:
-	case oldconfig:
-	case listnewconfig:
-	case olddefconfig:
-		conf_read(NULL);
-		break;
-	case allnoconfig:
-	case allyesconfig:
-	case allmodconfig:
-	case alldefconfig:
-	case randconfig:
-		name = getenv("KCONFIG_ALLCONFIG");
-		if (!name)
-			break;
-		if ((strcmp(name, "") != 0) && (strcmp(name, "1") != 0)) {
-			if (conf_read_simple(name, S_DEF_USER)) {
-				fprintf(stderr,
-					_("*** Can't read seed configuration \"%s\"!\n"),
-					name);
-				exit(1);
-			}
-			break;
-		}
-		switch (input_mode) {
-		case allnoconfig:	name = "allno.config"; break;
-		case allyesconfig:	name = "allyes.config"; break;
-		case allmodconfig:	name = "allmod.config"; break;
-		case alldefconfig:	name = "alldef.config"; break;
-		case randconfig:	name = "allrandom.config"; break;
-		default: break;
-		}
-		if (conf_read_simple(name, S_DEF_USER) &&
-		    conf_read_simple("all.config", S_DEF_USER)) {
-			fprintf(stderr,
-				_("*** KCONFIG_ALLCONFIG set, but no \"%s\" or \"all.config\" file found\n"),
-				name);
-			exit(1);
-		}
-		break;
-	default:
-		break;
-	}
-
-	if (sync_kconfig) {
-		if (conf_get_changed()) {
-			name = getenv("KCONFIG_NOSILENTUPDATE");
-			if (name && *name) {
-				fprintf(stderr,
-					_("\n*** The configuration requires explicit update.\n\n"));
-				return 1;
-			}
-		}
-		valid_stdin = tty_stdio;
-	}
-
-	switch (input_mode) {
-	case allnoconfig:
-		conf_set_all_new_symbols(def_no);
-		break;
-	case allyesconfig:
-		conf_set_all_new_symbols(def_yes);
-		break;
-	case allmodconfig:
-		conf_set_all_new_symbols(def_mod);
-		break;
-	case alldefconfig:
-		conf_set_all_new_symbols(def_default);
-		break;
-	case randconfig:
-		/* Really nothing to do in this loop */
-		while (conf_set_all_new_symbols(def_random)) ;
-		break;
-	case defconfig:
-		conf_set_all_new_symbols(def_default);
-		break;
-	case savedefconfig:
-		break;
-	case oldaskconfig:
-		rootEntry = &rootmenu;
-		conf(&rootmenu);
-		input_mode = silentoldconfig;
-		/* fall through */
-	case oldconfig:
-	case listnewconfig:
-	case olddefconfig:
-	case silentoldconfig:
-		/* Update until a loop caused no more changes */
-		do {
-			conf_cnt = 0;
-			check_conf(&rootmenu);
-		} while (conf_cnt &&
-			 (input_mode != listnewconfig &&
-			  input_mode != olddefconfig));
-		break;
-	}
-
-	if (sync_kconfig) {
-		/* silentoldconfig is used during the build so we shall update autoconf.
-		 * All other commands are only used to generate a config.
-		 */
-		if (conf_get_changed() && conf_write(NULL)) {
-			fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
-			exit(1);
-		}
-		if (conf_write_autoconf()) {
-			fprintf(stderr, _("\n*** Error during update of the configuration.\n\n"));
-			return 1;
-		}
-	} else if (input_mode == savedefconfig) {
-		if (conf_write_defconfig(defconfig_file)) {
-			fprintf(stderr, _("n*** Error while saving defconfig to: %s\n\n"),
-			        defconfig_file);
-			return 1;
-		}
-	} else if (input_mode != listnewconfig) {
-		if (conf_write(NULL)) {
-			fprintf(stderr, _("\n*** Error during writing of the configuration.\n\n"));
-			exit(1);
-		}
-	}
-	return 0;
-}
-
-/*
- * Helper function to facilitate fgets() by Jean Sacren.
- */
-void xfgets(char *str, int size, FILE *in)
-{
-	if (fgets(str, size, in) == NULL)
-		fprintf(stderr, "\nError in reading or end of file.\n");
-}
diff --git a/support/kconfig/confdata.c b/support/kconfig/confdata.c
deleted file mode 100644
index 4d8c9ac..0000000
--- a/support/kconfig/confdata.c
+++ /dev/null
@@ -1,1279 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <sys/stat.h>
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <unistd.h>
-#include <libgen.h>
-
-#include "lkc.h"
-
-static void conf_warning(const char *fmt, ...)
-	__attribute__ ((format (printf, 1, 2)));
-
-static void conf_message(const char *fmt, ...)
-	__attribute__ ((format (printf, 1, 2)));
-
-static const char *conf_filename;
-static int conf_lineno, conf_warnings, conf_unsaved;
-
-const char conf_defname[] = ".defconfig";
-
-static void conf_warning(const char *fmt, ...)
-{
-	va_list ap;
-	va_start(ap, fmt);
-	fprintf(stderr, "%s:%d:warning: ", conf_filename, conf_lineno);
-	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-	conf_warnings++;
-}
-
-static void conf_default_message_callback(const char *fmt, va_list ap)
-{
-	printf("#\n# ");
-	vprintf(fmt, ap);
-	printf("\n#\n");
-}
-
-static void (*conf_message_callback) (const char *fmt, va_list ap) =
-	conf_default_message_callback;
-void conf_set_message_callback(void (*fn) (const char *fmt, va_list ap))
-{
-	conf_message_callback = fn;
-}
-
-static void conf_message(const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-	if (conf_message_callback)
-		conf_message_callback(fmt, ap);
-}
-
-const char *conf_get_configname(void)
-{
-	char *name = getenv("BR2_CONFIG");
-
-	return name ? name : ".config";
-}
-
-const char *conf_get_autoconfig_name(void)
-{
-	return getenv("KCONFIG_AUTOCONFIG");
-}
-
-static char *conf_expand_value(const char *in)
-{
-	struct symbol *sym;
-	const char *src;
-	static char res_value[SYMBOL_MAXLENGTH];
-	char *dst, name[SYMBOL_MAXLENGTH];
-
-	res_value[0] = 0;
-	dst = name;
-	while ((src = strchr(in, '$'))) {
-		strncat(res_value, in, src - in);
-		src++;
-		dst = name;
-		while (isalnum(*src) || *src == '_')
-			*dst++ = *src++;
-		*dst = 0;
-		sym = sym_lookup(name, 0);
-		sym_calc_value(sym);
-		strcat(res_value, sym_get_string_value(sym));
-		in = src;
-	}
-	strcat(res_value, in);
-
-	return res_value;
-}
-
-char *conf_get_default_confname(void)
-{
-	struct stat buf;
-	static char fullname[PATH_MAX+1];
-	char *env, *name;
-
-	name = conf_expand_value(conf_defname);
-	env = getenv(SRCTREE);
-	if (env) {
-		sprintf(fullname, "%s/%s", env, name);
-		if (!stat(fullname, &buf))
-			return fullname;
-	}
-	return name;
-}
-
-static int conf_set_sym_val(struct symbol *sym, int def, int def_flags, char *p)
-{
-	char *p2;
-
-	switch (sym->type) {
-	case S_TRISTATE:
-		if (p[0] == 'm') {
-			sym->def[def].tri = mod;
-			sym->flags |= def_flags;
-			break;
-		}
-		/* fall through */
-	case S_BOOLEAN:
-		if (p[0] == 'y') {
-			sym->def[def].tri = yes;
-			sym->flags |= def_flags;
-			break;
-		}
-		if (p[0] == 'n') {
-			sym->def[def].tri = no;
-			sym->flags |= def_flags;
-			break;
-		}
-		if (def != S_DEF_AUTO)
-			conf_warning("symbol value '%s' invalid for %s",
-				     p, sym->name);
-		return 1;
-	case S_OTHER:
-		if (*p != '"') {
-			for (p2 = p; *p2 && !isspace(*p2); p2++)
-				;
-			sym->type = S_STRING;
-			goto done;
-		}
-		/* fall through */
-	case S_STRING:
-		if (*p++ != '"')
-			break;
-		for (p2 = p; (p2 = strpbrk(p2, "\"\\")); p2++) {
-			if (*p2 == '"') {
-				*p2 = 0;
-				break;
-			}
-			memmove(p2, p2 + 1, strlen(p2));
-		}
-		if (!p2) {
-			if (def != S_DEF_AUTO)
-				conf_warning("invalid string found");
-			return 1;
-		}
-		/* fall through */
-	case S_INT:
-	case S_HEX:
-	done:
-		if (sym_string_valid(sym, p)) {
-			sym->def[def].val = strdup(p);
-			sym->flags |= def_flags;
-		} else {
-			if (def != S_DEF_AUTO)
-				conf_warning("symbol value '%s' invalid for %s",
-					     p, sym->name);
-			return 1;
-		}
-		break;
-	default:
-		;
-	}
-	return 0;
-}
-
-#define LINE_GROWTH 16
-static int add_byte(int c, char **lineptr, size_t slen, size_t *n)
-{
-	char *nline;
-	size_t new_size = slen + 1;
-	if (new_size > *n) {
-		new_size += LINE_GROWTH - 1;
-		new_size *= 2;
-		nline = realloc(*lineptr, new_size);
-		if (!nline)
-			return -1;
-
-		*lineptr = nline;
-		*n = new_size;
-	}
-
-	(*lineptr)[slen] = c;
-
-	return 0;
-}
-
-static ssize_t compat_getline(char **lineptr, size_t *n, FILE *stream)
-{
-	char *line = *lineptr;
-	size_t slen = 0;
-
-	for (;;) {
-		int c = getc(stream);
-
-		switch (c) {
-		case '\n':
-			if (add_byte(c, &line, slen, n) < 0)
-				goto e_out;
-			slen++;
-			/* fall through */
-		case EOF:
-			if (add_byte('\0', &line, slen, n) < 0)
-				goto e_out;
-			*lineptr = line;
-			if (slen == 0)
-				return -1;
-			return slen;
-		default:
-			if (add_byte(c, &line, slen, n) < 0)
-				goto e_out;
-			slen++;
-		}
-	}
-
-e_out:
-	line[slen-1] = '\0';
-	*lineptr = line;
-	return -1;
-}
-
-int conf_read_simple(const char *name, int def)
-{
-	FILE *in = NULL;
-	char   *line = NULL;
-	size_t  line_asize = 0;
-	char *p, *p2;
-	struct symbol *sym;
-	int i, def_flags;
-
-	if (name) {
-		in = zconf_fopen(name);
-	} else {
-		struct property *prop;
-
-		name = conf_get_configname();
-		in = zconf_fopen(name);
-		if (in)
-			goto load;
-		sym_add_change_count(1);
-		if (!sym_defconfig_list) {
-			if (modules_sym)
-				sym_calc_value(modules_sym);
-			return 1;
-		}
-
-		for_all_defaults(sym_defconfig_list, prop) {
-			if (expr_calc_value(prop->visible.expr) == no ||
-			    prop->expr->type != E_SYMBOL)
-				continue;
-			name = conf_expand_value(prop->expr->left.sym->name);
-			in = zconf_fopen(name);
-			if (in) {
-				conf_message(_("using defaults found in %s"),
-					 name);
-				goto load;
-			}
-		}
-	}
-	if (!in)
-		return 1;
-
-load:
-	conf_filename = name;
-	conf_lineno = 0;
-	conf_warnings = 0;
-	conf_unsaved = 0;
-
-	def_flags = SYMBOL_DEF << def;
-	for_all_symbols(i, sym) {
-		sym->flags |= SYMBOL_CHANGED;
-		sym->flags &= ~(def_flags|SYMBOL_VALID);
-		if (sym_is_choice(sym))
-			sym->flags |= def_flags;
-		switch (sym->type) {
-		case S_INT:
-		case S_HEX:
-		case S_STRING:
-			if (sym->def[def].val)
-				free(sym->def[def].val);
-			/* fall through */
-		default:
-			sym->def[def].val = NULL;
-			sym->def[def].tri = no;
-		}
-	}
-
-	while (compat_getline(&line, &line_asize, in) != -1) {
-		conf_lineno++;
-		sym = NULL;
-		if (line[0] == '#') {
-			if (memcmp(line + 2, CONFIG_, strlen(CONFIG_)))
-				continue;
-			p = strchr(line + 2 + strlen(CONFIG_), ' ');
-			if (!p)
-				continue;
-			*p++ = 0;
-			if (strncmp(p, "is not set", 10))
-				continue;
-			if (def == S_DEF_USER) {
-				sym = sym_find(line + 2 + strlen(CONFIG_));
-				if (!sym) {
-					sym_add_change_count(1);
-					goto setsym;
-				}
-			} else {
-				sym = sym_lookup(line + 2 + strlen(CONFIG_), 0);
-				if (sym->type == S_UNKNOWN)
-					sym->type = S_BOOLEAN;
-			}
-			if (sym->flags & def_flags) {
-				conf_warning("override: reassigning to symbol %s", sym->name);
-			}
-			switch (sym->type) {
-			case S_BOOLEAN:
-			case S_TRISTATE:
-				sym->def[def].tri = no;
-				sym->flags |= def_flags;
-				break;
-			default:
-				;
-			}
-		} else if (memcmp(line, CONFIG_, strlen(CONFIG_)) == 0) {
-			p = strchr(line + strlen(CONFIG_), '=');
-			if (!p)
-				continue;
-			*p++ = 0;
-			p2 = strchr(p, '\n');
-			if (p2) {
-				*p2-- = 0;
-				if (*p2 == '\r')
-					*p2 = 0;
-			}
-			if (def == S_DEF_USER) {
-				sym = sym_find(line + strlen(CONFIG_));
-				if (!sym) {
-					sym_add_change_count(1);
-					goto setsym;
-				}
-			} else {
-				sym = sym_lookup(line + strlen(CONFIG_), 0);
-				if (sym->type == S_UNKNOWN)
-					sym->type = S_OTHER;
-			}
-			if (sym->flags & def_flags) {
-				conf_warning("override: reassigning to symbol %s", sym->name);
-			}
-			if (conf_set_sym_val(sym, def, def_flags, p))
-				continue;
-		} else {
-			if (line[0] != '\r' && line[0] != '\n')
-				conf_warning("unexpected data");
-			continue;
-		}
-setsym:
-		if (sym && sym_is_choice_value(sym)) {
-			struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
-			switch (sym->def[def].tri) {
-			case no:
-				break;
-			case mod:
-				if (cs->def[def].tri == yes) {
-					conf_warning("%s creates inconsistent choice state", sym->name);
-					cs->flags &= ~def_flags;
-				}
-				break;
-			case yes:
-				if (cs->def[def].tri != no)
-					conf_warning("override: %s changes choice state", sym->name);
-				cs->def[def].val = sym;
-				break;
-			}
-			cs->def[def].tri = EXPR_OR(cs->def[def].tri, sym->def[def].tri);
-		}
-	}
-	free(line);
-	fclose(in);
-
-	if (modules_sym)
-		sym_calc_value(modules_sym);
-	return 0;
-}
-
-int conf_read(const char *name)
-{
-	struct symbol *sym;
-	int i;
-
-	sym_set_change_count(0);
-
-	if (conf_read_simple(name, S_DEF_USER))
-		return 1;
-
-	for_all_symbols(i, sym) {
-		sym_calc_value(sym);
-		if (sym_is_choice(sym) || (sym->flags & SYMBOL_AUTO))
-			continue;
-		if (sym_has_value(sym) && (sym->flags & SYMBOL_WRITE)) {
-			/* check that calculated value agrees with saved value */
-			switch (sym->type) {
-			case S_BOOLEAN:
-			case S_TRISTATE:
-				if (sym->def[S_DEF_USER].tri != sym_get_tristate_value(sym))
-					break;
-				if (!sym_is_choice(sym))
-					continue;
-				/* fall through */
-			default:
-				if (!strcmp(sym->curr.val, sym->def[S_DEF_USER].val))
-					continue;
-				break;
-			}
-		} else if (!sym_has_value(sym) && !(sym->flags & SYMBOL_WRITE))
-			/* no previous value and not saved */
-			continue;
-		conf_unsaved++;
-		/* maybe print value in verbose mode... */
-	}
-
-	for_all_symbols(i, sym) {
-		if (sym_has_value(sym) && !sym_is_choice_value(sym)) {
-			/* Reset values of generates values, so they'll appear
-			 * as new, if they should become visible, but that
-			 * doesn't quite work if the Kconfig and the saved
-			 * configuration disagree.
-			 */
-			if (sym->visible == no && !conf_unsaved)
-				sym->flags &= ~SYMBOL_DEF_USER;
-			switch (sym->type) {
-			case S_STRING:
-			case S_INT:
-			case S_HEX:
-				/* Reset a string value if it's out of range */
-				if (sym_string_within_range(sym, sym->def[S_DEF_USER].val))
-					break;
-				sym->flags &= ~(SYMBOL_VALID|SYMBOL_DEF_USER);
-				conf_unsaved++;
-				break;
-			default:
-				break;
-			}
-		}
-	}
-
-	sym_add_change_count(conf_warnings || conf_unsaved);
-
-	return 0;
-}
-
-/*
- * Kconfig configuration printer
- *
- * This printer is used when generating the resulting configuration after
- * kconfig invocation and `defconfig' files. Unset symbol might be omitted by
- * passing a non-NULL argument to the printer.
- *
- */
-static void
-kconfig_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		if (*value == 'n') {
-			bool skip_unset = (arg != NULL);
-
-			if (!skip_unset)
-				fprintf(fp, "# %s%s is not set\n",
-				    CONFIG_, sym->name);
-			return;
-		}
-		break;
-	default:
-		break;
-	}
-
-	fprintf(fp, "%s%s=%s\n", CONFIG_, sym->name, value);
-}
-
-static void
-kconfig_print_comment(FILE *fp, const char *value, void *arg)
-{
-	const char *p = value;
-	size_t l;
-
-	for (;;) {
-		l = strcspn(p, "\n");
-		fprintf(fp, "#");
-		if (l) {
-			fprintf(fp, " ");
-			xfwrite(p, l, 1, fp);
-			p += l;
-		}
-		fprintf(fp, "\n");
-		if (*p++ == '\0')
-			break;
-	}
-}
-
-static struct conf_printer kconfig_printer_cb =
-{
-	.print_symbol = kconfig_print_symbol,
-	.print_comment = kconfig_print_comment,
-};
-
-/*
- * Header printer
- *
- * This printer is used when generating the `include/generated/autoconf.h' file.
- */
-static void
-header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE: {
-		const char *suffix = "";
-
-		switch (*value) {
-		case 'n':
-			break;
-		case 'm':
-			suffix = "_MODULE";
-			/* fall through */
-		default:
-			fprintf(fp, "#define %s%s%s 1\n",
-			    CONFIG_, sym->name, suffix);
-		}
-		break;
-	}
-	case S_HEX: {
-		const char *prefix = "";
-
-		if (value[0] != '0' || (value[1] != 'x' && value[1] != 'X'))
-			prefix = "0x";
-		fprintf(fp, "#define %s%s %s%s\n",
-		    CONFIG_, sym->name, prefix, value);
-		break;
-	}
-	case S_STRING:
-	case S_INT:
-		fprintf(fp, "#define %s%s %s\n",
-		    CONFIG_, sym->name, value);
-		break;
-	default:
-		break;
-	}
-
-}
-
-static void
-header_print_comment(FILE *fp, const char *value, void *arg)
-{
-	const char *p = value;
-	size_t l;
-
-	fprintf(fp, "/*\n");
-	for (;;) {
-		l = strcspn(p, "\n");
-		fprintf(fp, " *");
-		if (l) {
-			fprintf(fp, " ");
-			xfwrite(p, l, 1, fp);
-			p += l;
-		}
-		fprintf(fp, "\n");
-		if (*p++ == '\0')
-			break;
-	}
-	fprintf(fp, " */\n");
-}
-
-static struct conf_printer header_printer_cb =
-{
-	.print_symbol = header_print_symbol,
-	.print_comment = header_print_comment,
-};
-
-/*
- * Tristate printer
- *
- * This printer is used when generating the `include/config/tristate.conf' file.
- */
-static void
-tristate_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
-{
-
-	if (sym->type == S_TRISTATE && *value != 'n')
-		fprintf(fp, "%s%s=%c\n", CONFIG_, sym->name, (char)toupper(*value));
-}
-
-static struct conf_printer tristate_printer_cb =
-{
-	.print_symbol = tristate_print_symbol,
-	.print_comment = kconfig_print_comment,
-};
-
-static void conf_write_symbol(FILE *fp, struct symbol *sym,
-			      struct conf_printer *printer, void *printer_arg)
-{
-	const char *str;
-
-	switch (sym->type) {
-	case S_OTHER:
-	case S_UNKNOWN:
-		break;
-	case S_STRING:
-		str = sym_get_string_value(sym);
-		str = sym_escape_string_value(str);
-		printer->print_symbol(fp, sym, str, printer_arg);
-		free((void *)str);
-		break;
-	default:
-		str = sym_get_string_value(sym);
-		printer->print_symbol(fp, sym, str, printer_arg);
-	}
-}
-
-static void
-conf_write_heading(FILE *fp, struct conf_printer *printer, void *printer_arg)
-{
-	char buf[256];
-
-	snprintf(buf, sizeof(buf),
-	    "\n"
-	    "Automatically generated file; DO NOT EDIT.\n"
-	    "%s\n",
-	    rootmenu.prompt->text);
-
-	printer->print_comment(fp, buf, printer_arg);
-}
-
-/*
- * Write out a minimal config.
- * All values that has default values are skipped as this is redundant.
- */
-int conf_write_defconfig(const char *filename)
-{
-	struct symbol *sym;
-	struct menu *menu;
-	FILE *out;
-
-	out = fopen(filename, "w");
-	if (!out)
-		return 1;
-
-	sym_clear_all_valid();
-
-	/* Traverse all menus to find all relevant symbols */
-	menu = rootmenu.list;
-
-	while (menu != NULL)
-	{
-		sym = menu->sym;
-		if (sym == NULL) {
-			if (!menu_is_visible(menu))
-				goto next_menu;
-		} else if (!sym_is_choice(sym)) {
-			sym_calc_value(sym);
-			if (!(sym->flags & SYMBOL_WRITE))
-				goto next_menu;
-			sym->flags &= ~SYMBOL_WRITE;
-			/* If we cannot change the symbol - skip */
-			if (!sym_is_changable(sym))
-				goto next_menu;
-			/* If symbol equals to default value - skip */
-			if (strcmp(sym_get_string_value(sym), sym_get_string_default(sym)) == 0)
-				goto next_menu;
-
-			/*
-			 * If symbol is a choice value and equals to the
-			 * default for a choice - skip.
-			 * But only if value is bool and equal to "y" and
-			 * choice is not "optional".
-			 * (If choice is "optional" then all values can be "n")
-			 */
-			if (sym_is_choice_value(sym)) {
-				struct symbol *cs;
-				struct symbol *ds;
-
-				cs = prop_get_symbol(sym_get_choice_prop(sym));
-				ds = sym_choice_default(cs);
-				if (!sym_is_optional(cs) && sym == ds) {
-					if ((sym->type == S_BOOLEAN) &&
-					    sym_get_tristate_value(sym) == yes)
-						goto next_menu;
-				}
-			}
-			conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
-		}
-next_menu:
-		if (menu->list != NULL) {
-			menu = menu->list;
-		}
-		else if (menu->next != NULL) {
-			menu = menu->next;
-		} else {
-			while ((menu = menu->parent)) {
-				if (menu->next != NULL) {
-					menu = menu->next;
-					break;
-				}
-			}
-		}
-	}
-	fclose(out);
-	return 0;
-}
-
-int conf_write(const char *name)
-{
-	FILE *out;
-	struct symbol *sym;
-	struct menu *menu;
-	const char *basename;
-	const char *str;
-	char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
-	char *env;
-
-	if (!name)
-		name = conf_get_configname();
-
-	dirname[0] = 0;
-	if (name && name[0]) {
-		struct stat st;
-		char *slash;
-
-		if (!stat(name, &st) && S_ISDIR(st.st_mode)) {
-			strcpy(dirname, name);
-			strcat(dirname, "/");
-			basename = conf_get_configname();
-		} else if ((slash = strrchr(name, '/'))) {
-			int size = slash - name + 1;
-			memcpy(dirname, name, size);
-			dirname[size] = 0;
-			if (slash[1])
-				basename = slash + 1;
-			else
-				basename = conf_get_configname();
-		} else
-			basename = name;
-	} else
-		basename = conf_get_configname();
-
-	sprintf(newname, "%s%s", dirname, basename);
-	env = getenv("KCONFIG_OVERWRITECONFIG");
-	if (!env || !*env) {
-		sprintf(tmpname, "%s.tmpconfig.%d", dirname, (int)getpid());
-		out = fopen(tmpname, "w");
-	} else {
-		*tmpname = 0;
-		out = fopen(newname, "w");
-	}
-	if (!out)
-		return 1;
-
-	conf_write_heading(out, &kconfig_printer_cb, NULL);
-
-	if (!conf_get_changed())
-		sym_clear_all_valid();
-
-	menu = rootmenu.list;
-	while (menu) {
-		sym = menu->sym;
-		if (!sym) {
-			if (!menu_is_visible(menu))
-				goto next;
-			str = menu_get_prompt(menu);
-			fprintf(out, "\n"
-				     "#\n"
-				     "# %s\n"
-				     "#\n", str);
-		} else if (!(sym->flags & SYMBOL_CHOICE)) {
-			sym_calc_value(sym);
-			if (!(sym->flags & SYMBOL_WRITE))
-				goto next;
-			sym->flags &= ~SYMBOL_WRITE;
-
-			conf_write_symbol(out, sym, &kconfig_printer_cb, NULL);
-		}
-
-next:
-		if (menu->list) {
-			menu = menu->list;
-			continue;
-		}
-		if (menu->next)
-			menu = menu->next;
-		else while ((menu = menu->parent)) {
-			if (menu->next) {
-				menu = menu->next;
-				break;
-			}
-		}
-	}
-	fclose(out);
-
-	if (*tmpname) {
-		strcat(dirname, basename);
-		strcat(dirname, ".old");
-		rename(newname, dirname);
-		if (rename(tmpname, newname))
-			return 1;
-	}
-
-	conf_message(_("configuration written to %s"), newname);
-
-	sym_set_change_count(0);
-
-	return 0;
-}
-
-static int conf_split_config(void)
-{
-	const char *name;
-	char path[PATH_MAX+1];
-	char *opwd, *dir, *_name;
-	char *s, *d, c;
-	struct symbol *sym;
-	struct stat sb;
-	int res, i, fd;
-
-	name = conf_get_autoconfig_name();
-	conf_read_simple(name, S_DEF_AUTO);
-
-	opwd = malloc(256);
-	_name = strdup(name);
-	if (opwd == NULL || _name == NULL)
- 		return 1;
-	opwd = getcwd(opwd, 256);
-	dir = dirname(_name);
-	if (dir == NULL) {
-		res = 1;
-		goto err;
-	}
-
-	snprintf(path, sizeof(path), "%s/%s", dir, "depinclude");
-	if (stat(path, &sb) && mkdir(path, 0755)) {
-		res = 1;
-		goto err;
-	}
-
-	if (chdir(path)) {
-		res = 1;
-		goto err;
-	}
-
-	res = 0;
-	for_all_symbols(i, sym) {
-		sym_calc_value(sym);
-		if ((sym->flags & SYMBOL_AUTO) || !sym->name)
-			continue;
-		if (sym->flags & SYMBOL_WRITE) {
-			if (sym->flags & SYMBOL_DEF_AUTO) {
-				/*
-				 * symbol has old and new value,
-				 * so compare them...
-				 */
-				switch (sym->type) {
-				case S_BOOLEAN:
-				case S_TRISTATE:
-					if (sym_get_tristate_value(sym) ==
-					    sym->def[S_DEF_AUTO].tri)
-						continue;
-					break;
-				case S_STRING:
-				case S_HEX:
-				case S_INT:
-					if (!strcmp(sym_get_string_value(sym),
-						    sym->def[S_DEF_AUTO].val))
-						continue;
-					break;
-				default:
-					break;
-				}
-			} else {
-				/*
-				 * If there is no old value, only 'no' (unset)
-				 * is allowed as new value.
-				 */
-				switch (sym->type) {
-				case S_BOOLEAN:
-				case S_TRISTATE:
-					if (sym_get_tristate_value(sym) == no)
-						continue;
-					break;
-				default:
-					break;
-				}
-			}
-		} else if (!(sym->flags & SYMBOL_DEF_AUTO))
-			/* There is neither an old nor a new value. */
-			continue;
-		/* else
-		 *	There is an old value, but no new value ('no' (unset)
-		 *	isn't saved in auto.conf, so the old value is always
-		 *	different from 'no').
-		 */
-
-		/* Replace all '_' and append ".h" */
-		s = sym->name;
-		d = path;
-		while ((c = *s++)) {
-			c = tolower(c);
-			*d++ = (c == '_') ? '/' : c;
-		}
-		strcpy(d, ".h");
-
-		/* Assume directory path already exists. */
-		fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-		if (fd == -1) {
-			if (errno != ENOENT) {
-				res = 1;
-				break;
-			}
-			/*
-			 * Create directory components,
-			 * unless they exist already.
-			 */
-			d = path;
-			while ((d = strchr(d, '/'))) {
-				*d = 0;
-				if (stat(path, &sb) && mkdir(path, 0755)) {
-					res = 1;
-					goto out;
-				}
-				*d++ = '/';
-			}
-			/* Try it again. */
-			fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-			if (fd == -1) {
-				res = 1;
-				break;
-			}
-		}
-		close(fd);
-	}
-out:
-	if (chdir(opwd))
-		res = 1;
-err:
-	free(opwd);
-	free(_name);
-	return res;
-}
-
-int conf_write_autoconf(void)
-{
-	struct symbol *sym;
-	const char *name;
-	FILE *out, *tristate, *out_h;
-	int i;
-	char dir[PATH_MAX+1], buf[PATH_MAX+1];
-	char *s;
-
-	strcpy(dir, conf_get_configname());
-	s = strrchr(dir, '/');
-	if (s)
-		s[1] = 0;
-	else
-		dir[0] = 0;
-
-	sym_clear_all_valid();
-
-	sprintf(buf, "%s.config.cmd", dir);
-	file_write_dep(buf);
-
-	if (conf_split_config())
-		return 1;
-
-	sprintf(buf, "%s.tmpconfig", dir);
-	out = fopen(buf, "w");
-	if (!out)
-		return 1;
-
-	sprintf(buf, "%s.tmpconfig_tristate", dir);
-	tristate = fopen(buf, "w");
-	if (!tristate) {
-		fclose(out);
-		return 1;
-	}
-
-	sprintf(buf, "%s.tmpconfig.h", dir);
-	out_h = fopen(buf, "w");
-	if (!out_h) {
-		fclose(out);
-		fclose(tristate);
-		return 1;
-	}
-
-	conf_write_heading(out, &kconfig_printer_cb, NULL);
-
-	conf_write_heading(tristate, &tristate_printer_cb, NULL);
-
-	conf_write_heading(out_h, &header_printer_cb, NULL);
-
-	for_all_symbols(i, sym) {
-		sym_calc_value(sym);
-		if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
-			continue;
-
-		/* write symbol to auto.conf, tristate and header files */
-		conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
-
-		conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
-
-		conf_write_symbol(out_h, sym, &header_printer_cb, NULL);
-	}
-	fclose(out);
-	fclose(tristate);
-	fclose(out_h);
-
-	name = getenv("KCONFIG_AUTOHEADER");
-	if (!name)
-		name = "include/generated/autoconf.h";
-	sprintf(buf, "%s.tmpconfig.h", dir);
-	if (rename(buf, name))
-		return 1;
-	name = getenv("KCONFIG_TRISTATE");
-	if (!name)
-		name = "include/config/tristate.conf";
-	sprintf(buf, "%s.tmpconfig_tristate", dir);
-	if (rename(buf, name))
-		return 1;
-	name = conf_get_autoconfig_name();
-	/*
-	 * This must be the last step, kbuild has a dependency on auto.conf
-	 * and this marks the successful completion of the previous steps.
-	 */
-	sprintf(buf, "%s.tmpconfig", dir);
-	if (rename(buf, name))
-		return 1;
-
-	return 0;
-}
-
-static int sym_change_count;
-static void (*conf_changed_callback)(void);
-
-void sym_set_change_count(int count)
-{
-	int _sym_change_count = sym_change_count;
-	sym_change_count = count;
-	if (conf_changed_callback &&
-	    (bool)_sym_change_count != (bool)count)
-		conf_changed_callback();
-}
-
-void sym_add_change_count(int count)
-{
-	sym_set_change_count(count + sym_change_count);
-}
-
-bool conf_get_changed(void)
-{
-	return sym_change_count;
-}
-
-void conf_set_changed_callback(void (*fn)(void))
-{
-	conf_changed_callback = fn;
-}
-
-static bool randomize_choice_values(struct symbol *csym)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct expr *e;
-	int cnt, def;
-
-	/*
-	 * If choice is mod then we may have more items selected
-	 * and if no then no-one.
-	 * In both cases stop.
-	 */
-	if (csym->curr.tri != yes)
-		return false;
-
-	prop = sym_get_choice_prop(csym);
-
-	/* count entries in choice block */
-	cnt = 0;
-	expr_list_for_each_sym(prop->expr, e, sym)
-		cnt++;
-
-	/*
-	 * find a random value and set it to yes,
-	 * set the rest to no so we have only one set
-	 */
-	def = (rand() % cnt);
-
-	cnt = 0;
-	expr_list_for_each_sym(prop->expr, e, sym) {
-		if (def == cnt++) {
-			sym->def[S_DEF_USER].tri = yes;
-			csym->def[S_DEF_USER].val = sym;
-		}
-		else {
-			sym->def[S_DEF_USER].tri = no;
-		}
-		sym->flags |= SYMBOL_DEF_USER;
-		/* clear VALID to get value calculated */
-		sym->flags &= ~SYMBOL_VALID;
-	}
-	csym->flags |= SYMBOL_DEF_USER;
-	/* clear VALID to get value calculated */
-	csym->flags &= ~(SYMBOL_VALID);
-
-	return true;
-}
-
-void set_all_choice_values(struct symbol *csym)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct expr *e;
-
-	prop = sym_get_choice_prop(csym);
-
-	/*
-	 * Set all non-assinged choice values to no
-	 */
-	expr_list_for_each_sym(prop->expr, e, sym) {
-		if (!sym_has_value(sym))
-			sym->def[S_DEF_USER].tri = no;
-	}
-	csym->flags |= SYMBOL_DEF_USER;
-	/* clear VALID to get value calculated */
-	csym->flags &= ~(SYMBOL_VALID | SYMBOL_NEED_SET_CHOICE_VALUES);
-}
-
-bool conf_set_all_new_symbols(enum conf_def_mode mode)
-{
-	struct symbol *sym, *csym;
-	int i, cnt, pby, pty, ptm;	/* pby: probability of boolean  = y
-					 * pty: probability of tristate = y
-					 * ptm: probability of tristate = m
-					 */
-
-	pby = 50; pty = ptm = 33; /* can't go as the default in switch-case
-				   * below, otherwise gcc whines about
-				   * -Wmaybe-uninitialized */
-	if (mode == def_random) {
-		int n, p[3];
-		char *env = getenv("KCONFIG_PROBABILITY");
-		n = 0;
-		while( env && *env ) {
-			char *endp;
-			int tmp = strtol( env, &endp, 10 );
-			if( tmp >= 0 && tmp <= 100 ) {
-				p[n++] = tmp;
-			} else {
-				errno = ERANGE;
-				perror( "KCONFIG_PROBABILITY" );
-				exit( 1 );
-			}
-			env = (*endp == ':') ? endp+1 : endp;
-			if( n >=3 ) {
-				break;
-			}
-		}
-		switch( n ) {
-		case 1:
-			pby = p[0]; ptm = pby/2; pty = pby-ptm;
-			break;
-		case 2:
-			pty = p[0]; ptm = p[1]; pby = pty + ptm;
-			break;
-		case 3:
-			pby = p[0]; pty = p[1]; ptm = p[2];
-			break;
-		}
-
-		if( pty+ptm > 100 ) {
-			errno = ERANGE;
-			perror( "KCONFIG_PROBABILITY" );
-			exit( 1 );
-		}
-	}
-	bool has_changed = false;
-
-	for_all_symbols(i, sym) {
-		if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID))
-			continue;
-		switch (sym_get_type(sym)) {
-		case S_BOOLEAN:
-		case S_TRISTATE:
-			has_changed = true;
-			switch (mode) {
-			case def_yes:
-				sym->def[S_DEF_USER].tri = yes;
-				break;
-			case def_mod:
-				sym->def[S_DEF_USER].tri = mod;
-				break;
-			case def_no:
-				sym->def[S_DEF_USER].tri = no;
-				break;
-			case def_random:
-				sym->def[S_DEF_USER].tri = no;
-				cnt = rand() % 100;
-				if (sym->type == S_TRISTATE) {
-					if (cnt < pty)
-						sym->def[S_DEF_USER].tri = yes;
-					else if (cnt < (pty+ptm))
-						sym->def[S_DEF_USER].tri = mod;
-				} else if (cnt < pby)
-					sym->def[S_DEF_USER].tri = yes;
-				break;
-			default:
-				continue;
-			}
-			if (!(sym_is_choice(sym) && mode == def_random))
-				sym->flags |= SYMBOL_DEF_USER;
-			break;
-		default:
-			break;
-		}
-
-	}
-
-	sym_clear_all_valid();
-
-	/*
-	 * We have different type of choice blocks.
-	 * If curr.tri equals to mod then we can select several
-	 * choice symbols in one block.
-	 * In this case we do nothing.
-	 * If curr.tri equals yes then only one symbol can be
-	 * selected in a choice block and we set it to yes,
-	 * and the rest to no.
-	 */
-	if (mode != def_random) {
-		for_all_symbols(i, csym) {
-			if ((sym_is_choice(csym) && !sym_has_value(csym)) ||
-			    sym_is_choice_value(csym))
-				csym->flags |= SYMBOL_NEED_SET_CHOICE_VALUES;
-		}
-	}
-
-	for_all_symbols(i, csym) {
-		if (sym_has_value(csym) || !sym_is_choice(csym))
-			continue;
-
-		sym_calc_value(csym);
-		if (mode == def_random)
-			has_changed = randomize_choice_values(csym);
-		else {
-			set_all_choice_values(csym);
-			has_changed = true;
-		}
-	}
-
-	return has_changed;
-}
diff --git a/support/kconfig/expr.c b/support/kconfig/expr.c
deleted file mode 100644
index d662652..0000000
--- a/support/kconfig/expr.c
+++ /dev/null
@@ -1,1168 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "lkc.h"
-
-#define DEBUG_EXPR	0
-
-struct expr *expr_alloc_symbol(struct symbol *sym)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = E_SYMBOL;
-	e->left.sym = sym;
-	return e;
-}
-
-struct expr *expr_alloc_one(enum expr_type type, struct expr *ce)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = type;
-	e->left.expr = ce;
-	return e;
-}
-
-struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = type;
-	e->left.expr = e1;
-	e->right.expr = e2;
-	return e;
-}
-
-struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2)
-{
-	struct expr *e = xcalloc(1, sizeof(*e));
-	e->type = type;
-	e->left.sym = s1;
-	e->right.sym = s2;
-	return e;
-}
-
-struct expr *expr_alloc_and(struct expr *e1, struct expr *e2)
-{
-	if (!e1)
-		return e2;
-	return e2 ? expr_alloc_two(E_AND, e1, e2) : e1;
-}
-
-struct expr *expr_alloc_or(struct expr *e1, struct expr *e2)
-{
-	if (!e1)
-		return e2;
-	return e2 ? expr_alloc_two(E_OR, e1, e2) : e1;
-}
-
-struct expr *expr_copy(const struct expr *org)
-{
-	struct expr *e;
-
-	if (!org)
-		return NULL;
-
-	e = xmalloc(sizeof(*org));
-	memcpy(e, org, sizeof(*org));
-	switch (org->type) {
-	case E_SYMBOL:
-		e->left = org->left;
-		break;
-	case E_NOT:
-		e->left.expr = expr_copy(org->left.expr);
-		break;
-	case E_EQUAL:
-	case E_UNEQUAL:
-		e->left.sym = org->left.sym;
-		e->right.sym = org->right.sym;
-		break;
-	case E_AND:
-	case E_OR:
-	case E_LIST:
-		e->left.expr = expr_copy(org->left.expr);
-		e->right.expr = expr_copy(org->right.expr);
-		break;
-	default:
-		printf("can't copy type %d\n", e->type);
-		free(e);
-		e = NULL;
-		break;
-	}
-
-	return e;
-}
-
-void expr_free(struct expr *e)
-{
-	if (!e)
-		return;
-
-	switch (e->type) {
-	case E_SYMBOL:
-		break;
-	case E_NOT:
-		expr_free(e->left.expr);
-		return;
-	case E_EQUAL:
-	case E_UNEQUAL:
-		break;
-	case E_OR:
-	case E_AND:
-		expr_free(e->left.expr);
-		expr_free(e->right.expr);
-		break;
-	default:
-		printf("how to free type %d?\n", e->type);
-		break;
-	}
-	free(e);
-}
-
-static int trans_count;
-
-#define e1 (*ep1)
-#define e2 (*ep2)
-
-static void __expr_eliminate_eq(enum expr_type type, struct expr **ep1, struct expr **ep2)
-{
-	if (e1->type == type) {
-		__expr_eliminate_eq(type, &e1->left.expr, &e2);
-		__expr_eliminate_eq(type, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		__expr_eliminate_eq(type, &e1, &e2->left.expr);
-		__expr_eliminate_eq(type, &e1, &e2->right.expr);
-		return;
-	}
-	if (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
-	    e1->left.sym == e2->left.sym &&
-	    (e1->left.sym == &symbol_yes || e1->left.sym == &symbol_no))
-		return;
-	if (!expr_eq(e1, e2))
-		return;
-	trans_count++;
-	expr_free(e1); expr_free(e2);
-	switch (type) {
-	case E_OR:
-		e1 = expr_alloc_symbol(&symbol_no);
-		e2 = expr_alloc_symbol(&symbol_no);
-		break;
-	case E_AND:
-		e1 = expr_alloc_symbol(&symbol_yes);
-		e2 = expr_alloc_symbol(&symbol_yes);
-		break;
-	default:
-		;
-	}
-}
-
-void expr_eliminate_eq(struct expr **ep1, struct expr **ep2)
-{
-	if (!e1 || !e2)
-		return;
-	switch (e1->type) {
-	case E_OR:
-	case E_AND:
-		__expr_eliminate_eq(e1->type, ep1, ep2);
-	default:
-		;
-	}
-	if (e1->type != e2->type) switch (e2->type) {
-	case E_OR:
-	case E_AND:
-		__expr_eliminate_eq(e2->type, ep1, ep2);
-	default:
-		;
-	}
-	e1 = expr_eliminate_yn(e1);
-	e2 = expr_eliminate_yn(e2);
-}
-
-#undef e1
-#undef e2
-
-int expr_eq(struct expr *e1, struct expr *e2)
-{
-	int res, old_count;
-
-	if (e1->type != e2->type)
-		return 0;
-	switch (e1->type) {
-	case E_EQUAL:
-	case E_UNEQUAL:
-		return e1->left.sym == e2->left.sym && e1->right.sym == e2->right.sym;
-	case E_SYMBOL:
-		return e1->left.sym == e2->left.sym;
-	case E_NOT:
-		return expr_eq(e1->left.expr, e2->left.expr);
-	case E_AND:
-	case E_OR:
-		e1 = expr_copy(e1);
-		e2 = expr_copy(e2);
-		old_count = trans_count;
-		expr_eliminate_eq(&e1, &e2);
-		res = (e1->type == E_SYMBOL && e2->type == E_SYMBOL &&
-		       e1->left.sym == e2->left.sym);
-		expr_free(e1);
-		expr_free(e2);
-		trans_count = old_count;
-		return res;
-	case E_LIST:
-	case E_RANGE:
-	case E_NONE:
-		/* panic */;
-	}
-
-	if (DEBUG_EXPR) {
-		expr_fprint(e1, stdout);
-		printf(" = ");
-		expr_fprint(e2, stdout);
-		printf(" ?\n");
-	}
-
-	return 0;
-}
-
-struct expr *expr_eliminate_yn(struct expr *e)
-{
-	struct expr *tmp;
-
-	if (e) switch (e->type) {
-	case E_AND:
-		e->left.expr = expr_eliminate_yn(e->left.expr);
-		e->right.expr = expr_eliminate_yn(e->right.expr);
-		if (e->left.expr->type == E_SYMBOL) {
-			if (e->left.expr->left.sym == &symbol_no) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_no;
-				e->right.expr = NULL;
-				return e;
-			} else if (e->left.expr->left.sym == &symbol_yes) {
-				free(e->left.expr);
-				tmp = e->right.expr;
-				*e = *(e->right.expr);
-				free(tmp);
-				return e;
-			}
-		}
-		if (e->right.expr->type == E_SYMBOL) {
-			if (e->right.expr->left.sym == &symbol_no) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_no;
-				e->right.expr = NULL;
-				return e;
-			} else if (e->right.expr->left.sym == &symbol_yes) {
-				free(e->right.expr);
-				tmp = e->left.expr;
-				*e = *(e->left.expr);
-				free(tmp);
-				return e;
-			}
-		}
-		break;
-	case E_OR:
-		e->left.expr = expr_eliminate_yn(e->left.expr);
-		e->right.expr = expr_eliminate_yn(e->right.expr);
-		if (e->left.expr->type == E_SYMBOL) {
-			if (e->left.expr->left.sym == &symbol_no) {
-				free(e->left.expr);
-				tmp = e->right.expr;
-				*e = *(e->right.expr);
-				free(tmp);
-				return e;
-			} else if (e->left.expr->left.sym == &symbol_yes) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_yes;
-				e->right.expr = NULL;
-				return e;
-			}
-		}
-		if (e->right.expr->type == E_SYMBOL) {
-			if (e->right.expr->left.sym == &symbol_no) {
-				free(e->right.expr);
-				tmp = e->left.expr;
-				*e = *(e->left.expr);
-				free(tmp);
-				return e;
-			} else if (e->right.expr->left.sym == &symbol_yes) {
-				expr_free(e->left.expr);
-				expr_free(e->right.expr);
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_yes;
-				e->right.expr = NULL;
-				return e;
-			}
-		}
-		break;
-	default:
-		;
-	}
-	return e;
-}
-
-/*
- * bool FOO!=n => FOO
- */
-struct expr *expr_trans_bool(struct expr *e)
-{
-	if (!e)
-		return NULL;
-	switch (e->type) {
-	case E_AND:
-	case E_OR:
-	case E_NOT:
-		e->left.expr = expr_trans_bool(e->left.expr);
-		e->right.expr = expr_trans_bool(e->right.expr);
-		break;
-	case E_UNEQUAL:
-		// FOO!=n -> FOO
-		if (e->left.sym->type == S_TRISTATE) {
-			if (e->right.sym == &symbol_no) {
-				e->type = E_SYMBOL;
-				e->right.sym = NULL;
-			}
-		}
-		break;
-	default:
-		;
-	}
-	return e;
-}
-
-/*
- * e1 || e2 -> ?
- */
-static struct expr *expr_join_or(struct expr *e1, struct expr *e2)
-{
-	struct expr *tmp;
-	struct symbol *sym1, *sym2;
-
-	if (expr_eq(e1, e2))
-		return expr_copy(e1);
-	if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT)
-		return NULL;
-	if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
-		return NULL;
-	if (e1->type == E_NOT) {
-		tmp = e1->left.expr;
-		if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL)
-			return NULL;
-		sym1 = tmp->left.sym;
-	} else
-		sym1 = e1->left.sym;
-	if (e2->type == E_NOT) {
-		if (e2->left.expr->type != E_SYMBOL)
-			return NULL;
-		sym2 = e2->left.expr->left.sym;
-	} else
-		sym2 = e2->left.sym;
-	if (sym1 != sym2)
-		return NULL;
-	if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE)
-		return NULL;
-	if (sym1->type == S_TRISTATE) {
-		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
-		    ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
-		     (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes))) {
-			// (a='y') || (a='m') -> (a!='n')
-			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_no);
-		}
-		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
-		    ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
-		     (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes))) {
-			// (a='y') || (a='n') -> (a!='m')
-			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_mod);
-		}
-		if (e1->type == E_EQUAL && e2->type == E_EQUAL &&
-		    ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
-		     (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod))) {
-			// (a='m') || (a='n') -> (a!='y')
-			return expr_alloc_comp(E_UNEQUAL, sym1, &symbol_yes);
-		}
-	}
-	if (sym1->type == S_BOOLEAN && sym1 == sym2) {
-		if ((e1->type == E_NOT && e1->left.expr->type == E_SYMBOL && e2->type == E_SYMBOL) ||
-		    (e2->type == E_NOT && e2->left.expr->type == E_SYMBOL && e1->type == E_SYMBOL))
-			return expr_alloc_symbol(&symbol_yes);
-	}
-
-	if (DEBUG_EXPR) {
-		printf("optimize (");
-		expr_fprint(e1, stdout);
-		printf(") || (");
-		expr_fprint(e2, stdout);
-		printf(")?\n");
-	}
-	return NULL;
-}
-
-static struct expr *expr_join_and(struct expr *e1, struct expr *e2)
-{
-	struct expr *tmp;
-	struct symbol *sym1, *sym2;
-
-	if (expr_eq(e1, e2))
-		return expr_copy(e1);
-	if (e1->type != E_EQUAL && e1->type != E_UNEQUAL && e1->type != E_SYMBOL && e1->type != E_NOT)
-		return NULL;
-	if (e2->type != E_EQUAL && e2->type != E_UNEQUAL && e2->type != E_SYMBOL && e2->type != E_NOT)
-		return NULL;
-	if (e1->type == E_NOT) {
-		tmp = e1->left.expr;
-		if (tmp->type != E_EQUAL && tmp->type != E_UNEQUAL && tmp->type != E_SYMBOL)
-			return NULL;
-		sym1 = tmp->left.sym;
-	} else
-		sym1 = e1->left.sym;
-	if (e2->type == E_NOT) {
-		if (e2->left.expr->type != E_SYMBOL)
-			return NULL;
-		sym2 = e2->left.expr->left.sym;
-	} else
-		sym2 = e2->left.sym;
-	if (sym1 != sym2)
-		return NULL;
-	if (sym1->type != S_BOOLEAN && sym1->type != S_TRISTATE)
-		return NULL;
-
-	if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_yes) ||
-	    (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_yes))
-		// (a) && (a='y') -> (a='y')
-		return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
-
-	if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_no) ||
-	    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_no))
-		// (a) && (a!='n') -> (a)
-		return expr_alloc_symbol(sym1);
-
-	if ((e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_mod) ||
-	    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_mod))
-		// (a) && (a!='m') -> (a='y')
-		return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
-
-	if (sym1->type == S_TRISTATE) {
-		if (e1->type == E_EQUAL && e2->type == E_UNEQUAL) {
-			// (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
-			sym2 = e1->right.sym;
-			if ((e2->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
-				return sym2 != e2->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
-							     : expr_alloc_symbol(&symbol_no);
-		}
-		if (e1->type == E_UNEQUAL && e2->type == E_EQUAL) {
-			// (a='b') && (a!='c') -> 'b'='c' ? 'n' : a='b'
-			sym2 = e2->right.sym;
-			if ((e1->right.sym->flags & SYMBOL_CONST) && (sym2->flags & SYMBOL_CONST))
-				return sym2 != e1->right.sym ? expr_alloc_comp(E_EQUAL, sym1, sym2)
-							     : expr_alloc_symbol(&symbol_no);
-		}
-		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
-			   ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_no) ||
-			    (e1->right.sym == &symbol_no && e2->right.sym == &symbol_yes)))
-			// (a!='y') && (a!='n') -> (a='m')
-			return expr_alloc_comp(E_EQUAL, sym1, &symbol_mod);
-
-		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
-			   ((e1->right.sym == &symbol_yes && e2->right.sym == &symbol_mod) ||
-			    (e1->right.sym == &symbol_mod && e2->right.sym == &symbol_yes)))
-			// (a!='y') && (a!='m') -> (a='n')
-			return expr_alloc_comp(E_EQUAL, sym1, &symbol_no);
-
-		if (e1->type == E_UNEQUAL && e2->type == E_UNEQUAL &&
-			   ((e1->right.sym == &symbol_mod && e2->right.sym == &symbol_no) ||
-			    (e1->right.sym == &symbol_no && e2->right.sym == &symbol_mod)))
-			// (a!='m') && (a!='n') -> (a='m')
-			return expr_alloc_comp(E_EQUAL, sym1, &symbol_yes);
-
-		if ((e1->type == E_SYMBOL && e2->type == E_EQUAL && e2->right.sym == &symbol_mod) ||
-		    (e2->type == E_SYMBOL && e1->type == E_EQUAL && e1->right.sym == &symbol_mod) ||
-		    (e1->type == E_SYMBOL && e2->type == E_UNEQUAL && e2->right.sym == &symbol_yes) ||
-		    (e2->type == E_SYMBOL && e1->type == E_UNEQUAL && e1->right.sym == &symbol_yes))
-			return NULL;
-	}
-
-	if (DEBUG_EXPR) {
-		printf("optimize (");
-		expr_fprint(e1, stdout);
-		printf(") && (");
-		expr_fprint(e2, stdout);
-		printf(")?\n");
-	}
-	return NULL;
-}
-
-static void expr_eliminate_dups1(enum expr_type type, struct expr **ep1, struct expr **ep2)
-{
-#define e1 (*ep1)
-#define e2 (*ep2)
-	struct expr *tmp;
-
-	if (e1->type == type) {
-		expr_eliminate_dups1(type, &e1->left.expr, &e2);
-		expr_eliminate_dups1(type, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		expr_eliminate_dups1(type, &e1, &e2->left.expr);
-		expr_eliminate_dups1(type, &e1, &e2->right.expr);
-		return;
-	}
-	if (e1 == e2)
-		return;
-
-	switch (e1->type) {
-	case E_OR: case E_AND:
-		expr_eliminate_dups1(e1->type, &e1, &e1);
-	default:
-		;
-	}
-
-	switch (type) {
-	case E_OR:
-		tmp = expr_join_or(e1, e2);
-		if (tmp) {
-			expr_free(e1); expr_free(e2);
-			e1 = expr_alloc_symbol(&symbol_no);
-			e2 = tmp;
-			trans_count++;
-		}
-		break;
-	case E_AND:
-		tmp = expr_join_and(e1, e2);
-		if (tmp) {
-			expr_free(e1); expr_free(e2);
-			e1 = expr_alloc_symbol(&symbol_yes);
-			e2 = tmp;
-			trans_count++;
-		}
-		break;
-	default:
-		;
-	}
-#undef e1
-#undef e2
-}
-
-static void expr_eliminate_dups2(enum expr_type type, struct expr **ep1, struct expr **ep2)
-{
-#define e1 (*ep1)
-#define e2 (*ep2)
-	struct expr *tmp, *tmp1, *tmp2;
-
-	if (e1->type == type) {
-		expr_eliminate_dups2(type, &e1->left.expr, &e2);
-		expr_eliminate_dups2(type, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		expr_eliminate_dups2(type, &e1, &e2->left.expr);
-		expr_eliminate_dups2(type, &e1, &e2->right.expr);
-	}
-	if (e1 == e2)
-		return;
-
-	switch (e1->type) {
-	case E_OR:
-		expr_eliminate_dups2(e1->type, &e1, &e1);
-		// (FOO || BAR) && (!FOO && !BAR) -> n
-		tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
-		tmp2 = expr_copy(e2);
-		tmp = expr_extract_eq_and(&tmp1, &tmp2);
-		if (expr_is_yes(tmp1)) {
-			expr_free(e1);
-			e1 = expr_alloc_symbol(&symbol_no);
-			trans_count++;
-		}
-		expr_free(tmp2);
-		expr_free(tmp1);
-		expr_free(tmp);
-		break;
-	case E_AND:
-		expr_eliminate_dups2(e1->type, &e1, &e1);
-		// (FOO && BAR) || (!FOO || !BAR) -> y
-		tmp1 = expr_transform(expr_alloc_one(E_NOT, expr_copy(e1)));
-		tmp2 = expr_copy(e2);
-		tmp = expr_extract_eq_or(&tmp1, &tmp2);
-		if (expr_is_no(tmp1)) {
-			expr_free(e1);
-			e1 = expr_alloc_symbol(&symbol_yes);
-			trans_count++;
-		}
-		expr_free(tmp2);
-		expr_free(tmp1);
-		expr_free(tmp);
-		break;
-	default:
-		;
-	}
-#undef e1
-#undef e2
-}
-
-struct expr *expr_eliminate_dups(struct expr *e)
-{
-	int oldcount;
-	if (!e)
-		return e;
-
-	oldcount = trans_count;
-	while (1) {
-		trans_count = 0;
-		switch (e->type) {
-		case E_OR: case E_AND:
-			expr_eliminate_dups1(e->type, &e, &e);
-			expr_eliminate_dups2(e->type, &e, &e);
-		default:
-			;
-		}
-		if (!trans_count)
-			break;
-		e = expr_eliminate_yn(e);
-	}
-	trans_count = oldcount;
-	return e;
-}
-
-struct expr *expr_transform(struct expr *e)
-{
-	struct expr *tmp;
-
-	if (!e)
-		return NULL;
-	switch (e->type) {
-	case E_EQUAL:
-	case E_UNEQUAL:
-	case E_SYMBOL:
-	case E_LIST:
-		break;
-	default:
-		e->left.expr = expr_transform(e->left.expr);
-		e->right.expr = expr_transform(e->right.expr);
-	}
-
-	switch (e->type) {
-	case E_EQUAL:
-		if (e->left.sym->type != S_BOOLEAN)
-			break;
-		if (e->right.sym == &symbol_no) {
-			e->type = E_NOT;
-			e->left.expr = expr_alloc_symbol(e->left.sym);
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_mod) {
-			printf("boolean symbol %s tested for 'm'? test forced to 'n'\n", e->left.sym->name);
-			e->type = E_SYMBOL;
-			e->left.sym = &symbol_no;
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_yes) {
-			e->type = E_SYMBOL;
-			e->right.sym = NULL;
-			break;
-		}
-		break;
-	case E_UNEQUAL:
-		if (e->left.sym->type != S_BOOLEAN)
-			break;
-		if (e->right.sym == &symbol_no) {
-			e->type = E_SYMBOL;
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_mod) {
-			printf("boolean symbol %s tested for 'm'? test forced to 'y'\n", e->left.sym->name);
-			e->type = E_SYMBOL;
-			e->left.sym = &symbol_yes;
-			e->right.sym = NULL;
-			break;
-		}
-		if (e->right.sym == &symbol_yes) {
-			e->type = E_NOT;
-			e->left.expr = expr_alloc_symbol(e->left.sym);
-			e->right.sym = NULL;
-			break;
-		}
-		break;
-	case E_NOT:
-		switch (e->left.expr->type) {
-		case E_NOT:
-			// !!a -> a
-			tmp = e->left.expr->left.expr;
-			free(e->left.expr);
-			free(e);
-			e = tmp;
-			e = expr_transform(e);
-			break;
-		case E_EQUAL:
-		case E_UNEQUAL:
-			// !a='x' -> a!='x'
-			tmp = e->left.expr;
-			free(e);
-			e = tmp;
-			e->type = e->type == E_EQUAL ? E_UNEQUAL : E_EQUAL;
-			break;
-		case E_OR:
-			// !(a || b) -> !a && !b
-			tmp = e->left.expr;
-			e->type = E_AND;
-			e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
-			tmp->type = E_NOT;
-			tmp->right.expr = NULL;
-			e = expr_transform(e);
-			break;
-		case E_AND:
-			// !(a && b) -> !a || !b
-			tmp = e->left.expr;
-			e->type = E_OR;
-			e->right.expr = expr_alloc_one(E_NOT, tmp->right.expr);
-			tmp->type = E_NOT;
-			tmp->right.expr = NULL;
-			e = expr_transform(e);
-			break;
-		case E_SYMBOL:
-			if (e->left.expr->left.sym == &symbol_yes) {
-				// !'y' -> 'n'
-				tmp = e->left.expr;
-				free(e);
-				e = tmp;
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_no;
-				break;
-			}
-			if (e->left.expr->left.sym == &symbol_mod) {
-				// !'m' -> 'm'
-				tmp = e->left.expr;
-				free(e);
-				e = tmp;
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_mod;
-				break;
-			}
-			if (e->left.expr->left.sym == &symbol_no) {
-				// !'n' -> 'y'
-				tmp = e->left.expr;
-				free(e);
-				e = tmp;
-				e->type = E_SYMBOL;
-				e->left.sym = &symbol_yes;
-				break;
-			}
-			break;
-		default:
-			;
-		}
-		break;
-	default:
-		;
-	}
-	return e;
-}
-
-int expr_contains_symbol(struct expr *dep, struct symbol *sym)
-{
-	if (!dep)
-		return 0;
-
-	switch (dep->type) {
-	case E_AND:
-	case E_OR:
-		return expr_contains_symbol(dep->left.expr, sym) ||
-		       expr_contains_symbol(dep->right.expr, sym);
-	case E_SYMBOL:
-		return dep->left.sym == sym;
-	case E_EQUAL:
-	case E_UNEQUAL:
-		return dep->left.sym == sym ||
-		       dep->right.sym == sym;
-	case E_NOT:
-		return expr_contains_symbol(dep->left.expr, sym);
-	default:
-		;
-	}
-	return 0;
-}
-
-bool expr_depends_symbol(struct expr *dep, struct symbol *sym)
-{
-	if (!dep)
-		return false;
-
-	switch (dep->type) {
-	case E_AND:
-		return expr_depends_symbol(dep->left.expr, sym) ||
-		       expr_depends_symbol(dep->right.expr, sym);
-	case E_SYMBOL:
-		return dep->left.sym == sym;
-	case E_EQUAL:
-		if (dep->left.sym == sym) {
-			if (dep->right.sym == &symbol_yes || dep->right.sym == &symbol_mod)
-				return true;
-		}
-		break;
-	case E_UNEQUAL:
-		if (dep->left.sym == sym) {
-			if (dep->right.sym == &symbol_no)
-				return true;
-		}
-		break;
-	default:
-		;
-	}
- 	return false;
-}
-
-struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2)
-{
-	struct expr *tmp = NULL;
-	expr_extract_eq(E_AND, &tmp, ep1, ep2);
-	if (tmp) {
-		*ep1 = expr_eliminate_yn(*ep1);
-		*ep2 = expr_eliminate_yn(*ep2);
-	}
-	return tmp;
-}
-
-struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2)
-{
-	struct expr *tmp = NULL;
-	expr_extract_eq(E_OR, &tmp, ep1, ep2);
-	if (tmp) {
-		*ep1 = expr_eliminate_yn(*ep1);
-		*ep2 = expr_eliminate_yn(*ep2);
-	}
-	return tmp;
-}
-
-void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2)
-{
-#define e1 (*ep1)
-#define e2 (*ep2)
-	if (e1->type == type) {
-		expr_extract_eq(type, ep, &e1->left.expr, &e2);
-		expr_extract_eq(type, ep, &e1->right.expr, &e2);
-		return;
-	}
-	if (e2->type == type) {
-		expr_extract_eq(type, ep, ep1, &e2->left.expr);
-		expr_extract_eq(type, ep, ep1, &e2->right.expr);
-		return;
-	}
-	if (expr_eq(e1, e2)) {
-		*ep = *ep ? expr_alloc_two(type, *ep, e1) : e1;
-		expr_free(e2);
-		if (type == E_AND) {
-			e1 = expr_alloc_symbol(&symbol_yes);
-			e2 = expr_alloc_symbol(&symbol_yes);
-		} else if (type == E_OR) {
-			e1 = expr_alloc_symbol(&symbol_no);
-			e2 = expr_alloc_symbol(&symbol_no);
-		}
-	}
-#undef e1
-#undef e2
-}
-
-struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym)
-{
-	struct expr *e1, *e2;
-
-	if (!e) {
-		e = expr_alloc_symbol(sym);
-		if (type == E_UNEQUAL)
-			e = expr_alloc_one(E_NOT, e);
-		return e;
-	}
-	switch (e->type) {
-	case E_AND:
-		e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
-		e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
-		if (sym == &symbol_yes)
-			e = expr_alloc_two(E_AND, e1, e2);
-		if (sym == &symbol_no)
-			e = expr_alloc_two(E_OR, e1, e2);
-		if (type == E_UNEQUAL)
-			e = expr_alloc_one(E_NOT, e);
-		return e;
-	case E_OR:
-		e1 = expr_trans_compare(e->left.expr, E_EQUAL, sym);
-		e2 = expr_trans_compare(e->right.expr, E_EQUAL, sym);
-		if (sym == &symbol_yes)
-			e = expr_alloc_two(E_OR, e1, e2);
-		if (sym == &symbol_no)
-			e = expr_alloc_two(E_AND, e1, e2);
-		if (type == E_UNEQUAL)
-			e = expr_alloc_one(E_NOT, e);
-		return e;
-	case E_NOT:
-		return expr_trans_compare(e->left.expr, type == E_EQUAL ? E_UNEQUAL : E_EQUAL, sym);
-	case E_UNEQUAL:
-	case E_EQUAL:
-		if (type == E_EQUAL) {
-			if (sym == &symbol_yes)
-				return expr_copy(e);
-			if (sym == &symbol_mod)
-				return expr_alloc_symbol(&symbol_no);
-			if (sym == &symbol_no)
-				return expr_alloc_one(E_NOT, expr_copy(e));
-		} else {
-			if (sym == &symbol_yes)
-				return expr_alloc_one(E_NOT, expr_copy(e));
-			if (sym == &symbol_mod)
-				return expr_alloc_symbol(&symbol_yes);
-			if (sym == &symbol_no)
-				return expr_copy(e);
-		}
-		break;
-	case E_SYMBOL:
-		return expr_alloc_comp(type, e->left.sym, sym);
-	case E_LIST:
-	case E_RANGE:
-	case E_NONE:
-		/* panic */;
-	}
-	return NULL;
-}
-
-tristate expr_calc_value(struct expr *e)
-{
-	tristate val1, val2;
-	const char *str1, *str2;
-
-	if (!e)
-		return yes;
-
-	switch (e->type) {
-	case E_SYMBOL:
-		sym_calc_value(e->left.sym);
-		return e->left.sym->curr.tri;
-	case E_AND:
-		val1 = expr_calc_value(e->left.expr);
-		val2 = expr_calc_value(e->right.expr);
-		return EXPR_AND(val1, val2);
-	case E_OR:
-		val1 = expr_calc_value(e->left.expr);
-		val2 = expr_calc_value(e->right.expr);
-		return EXPR_OR(val1, val2);
-	case E_NOT:
-		val1 = expr_calc_value(e->left.expr);
-		return EXPR_NOT(val1);
-	case E_EQUAL:
-		sym_calc_value(e->left.sym);
-		sym_calc_value(e->right.sym);
-		str1 = sym_get_string_value(e->left.sym);
-		str2 = sym_get_string_value(e->right.sym);
-		return !strcmp(str1, str2) ? yes : no;
-	case E_UNEQUAL:
-		sym_calc_value(e->left.sym);
-		sym_calc_value(e->right.sym);
-		str1 = sym_get_string_value(e->left.sym);
-		str2 = sym_get_string_value(e->right.sym);
-		return !strcmp(str1, str2) ? no : yes;
-	default:
-		printf("expr_calc_value: %d?\n", e->type);
-		return no;
-	}
-}
-
-int expr_compare_type(enum expr_type t1, enum expr_type t2)
-{
-#if 0
-	return 1;
-#else
-	if (t1 == t2)
-		return 0;
-	switch (t1) {
-	case E_EQUAL:
-	case E_UNEQUAL:
-		if (t2 == E_NOT)
-			return 1;
-	case E_NOT:
-		if (t2 == E_AND)
-			return 1;
-	case E_AND:
-		if (t2 == E_OR)
-			return 1;
-	case E_OR:
-		if (t2 == E_LIST)
-			return 1;
-	case E_LIST:
-		if (t2 == 0)
-			return 1;
-	default:
-		return -1;
-	}
-	printf("[%dgt%d?]", t1, t2);
-	return 0;
-#endif
-}
-
-static inline struct expr *
-expr_get_leftmost_symbol(const struct expr *e)
-{
-
-	if (e == NULL)
-		return NULL;
-
-	while (e->type != E_SYMBOL)
-		e = e->left.expr;
-
-	return expr_copy(e);
-}
-
-/*
- * Given expression `e1' and `e2', returns the leaf of the longest
- * sub-expression of `e1' not containing 'e2.
- */
-struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2)
-{
-	struct expr *ret;
-
-	switch (e1->type) {
-	case E_OR:
-		return expr_alloc_and(
-		    expr_simplify_unmet_dep(e1->left.expr, e2),
-		    expr_simplify_unmet_dep(e1->right.expr, e2));
-	case E_AND: {
-		struct expr *e;
-		e = expr_alloc_and(expr_copy(e1), expr_copy(e2));
-		e = expr_eliminate_dups(e);
-		ret = (!expr_eq(e, e1)) ? e1 : NULL;
-		expr_free(e);
-		break;
-		}
-	default:
-		ret = e1;
-		break;
-	}
-
-	return expr_get_leftmost_symbol(ret);
-}
-
-void expr_print(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken)
-{
-	if (!e) {
-		fn(data, NULL, "y");
-		return;
-	}
-
-	if (expr_compare_type(prevtoken, e->type) > 0)
-		fn(data, NULL, "(");
-	switch (e->type) {
-	case E_SYMBOL:
-		if (e->left.sym->name)
-			fn(data, e->left.sym, e->left.sym->name);
-		else
-			fn(data, NULL, "<choice>");
-		break;
-	case E_NOT:
-		fn(data, NULL, "!");
-		expr_print(e->left.expr, fn, data, E_NOT);
-		break;
-	case E_EQUAL:
-		if (e->left.sym->name)
-			fn(data, e->left.sym, e->left.sym->name);
-		else
-			fn(data, NULL, "<choice>");
-		fn(data, NULL, "=");
-		fn(data, e->right.sym, e->right.sym->name);
-		break;
-	case E_UNEQUAL:
-		if (e->left.sym->name)
-			fn(data, e->left.sym, e->left.sym->name);
-		else
-			fn(data, NULL, "<choice>");
-		fn(data, NULL, "!=");
-		fn(data, e->right.sym, e->right.sym->name);
-		break;
-	case E_OR:
-		expr_print(e->left.expr, fn, data, E_OR);
-		fn(data, NULL, " || ");
-		expr_print(e->right.expr, fn, data, E_OR);
-		break;
-	case E_AND:
-		expr_print(e->left.expr, fn, data, E_AND);
-		fn(data, NULL, " && ");
-		expr_print(e->right.expr, fn, data, E_AND);
-		break;
-	case E_LIST:
-		fn(data, e->right.sym, e->right.sym->name);
-		if (e->left.expr) {
-			fn(data, NULL, " ^ ");
-			expr_print(e->left.expr, fn, data, E_LIST);
-		}
-		break;
-	case E_RANGE:
-		fn(data, NULL, "[");
-		fn(data, e->left.sym, e->left.sym->name);
-		fn(data, NULL, " ");
-		fn(data, e->right.sym, e->right.sym->name);
-		fn(data, NULL, "]");
-		break;
-	default:
-	  {
-		char buf[32];
-		sprintf(buf, "<unknown type %d>", e->type);
-		fn(data, NULL, buf);
-		break;
-	  }
-	}
-	if (expr_compare_type(prevtoken, e->type) > 0)
-		fn(data, NULL, ")");
-}
-
-static void expr_print_file_helper(void *data, struct symbol *sym, const char *str)
-{
-	xfwrite(str, strlen(str), 1, data);
-}
-
-void expr_fprint(struct expr *e, FILE *out)
-{
-	expr_print(e, expr_print_file_helper, out, E_NONE);
-}
-
-static void expr_print_gstr_helper(void *data, struct symbol *sym, const char *str)
-{
-	struct gstr *gs = (struct gstr*)data;
-	const char *sym_str = NULL;
-
-	if (sym)
-		sym_str = sym_get_string_value(sym);
-
-	if (gs->max_width) {
-		unsigned extra_length = strlen(str);
-		const char *last_cr = strrchr(gs->s, '\n');
-		unsigned last_line_length;
-
-		if (sym_str)
-			extra_length += 4 + strlen(sym_str);
-
-		if (!last_cr)
-			last_cr = gs->s;
-
-		last_line_length = strlen(gs->s) - (last_cr - gs->s);
-
-		if ((last_line_length + extra_length) > gs->max_width)
-			str_append(gs, "\\\n");
-	}
-
-	str_append(gs, str);
-	if (sym && sym->type != S_UNKNOWN)
-		str_printf(gs, " [=%s]", sym_str);
-}
-
-void expr_gstr_print(struct expr *e, struct gstr *gs)
-{
-	expr_print(e, expr_print_gstr_helper, gs, E_NONE);
-}
diff --git a/support/kconfig/expr.h b/support/kconfig/expr.h
deleted file mode 100644
index ba663e1..0000000
--- a/support/kconfig/expr.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#ifndef EXPR_H
-#define EXPR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#include <assert.h>
-#include <stdio.h>
-#include "list.h"
-#ifndef __cplusplus
-#include <stdbool.h>
-#endif
-
-struct file {
-	struct file *next;
-	struct file *parent;
-	const char *name;
-	int lineno;
-};
-
-typedef enum tristate {
-	no, mod, yes
-} tristate;
-
-enum expr_type {
-	E_NONE, E_OR, E_AND, E_NOT, E_EQUAL, E_UNEQUAL, E_LIST, E_SYMBOL, E_RANGE
-};
-
-union expr_data {
-	struct expr *expr;
-	struct symbol *sym;
-};
-
-struct expr {
-	enum expr_type type;
-	union expr_data left, right;
-};
-
-#define EXPR_OR(dep1, dep2)	(((dep1)>(dep2))?(dep1):(dep2))
-#define EXPR_AND(dep1, dep2)	(((dep1)<(dep2))?(dep1):(dep2))
-#define EXPR_NOT(dep)		(2-(dep))
-
-#define expr_list_for_each_sym(l, e, s) \
-	for (e = (l); e && (s = e->right.sym); e = e->left.expr)
-
-struct expr_value {
-	struct expr *expr;
-	tristate tri;
-};
-
-struct symbol_value {
-	void *val;
-	tristate tri;
-};
-
-enum symbol_type {
-	S_UNKNOWN, S_BOOLEAN, S_TRISTATE, S_INT, S_HEX, S_STRING, S_OTHER
-};
-
-/* enum values are used as index to symbol.def[] */
-enum {
-	S_DEF_USER,		/* main user value */
-	S_DEF_AUTO,		/* values read from auto.conf */
-	S_DEF_DEF3,		/* Reserved for UI usage */
-	S_DEF_DEF4,		/* Reserved for UI usage */
-	S_DEF_COUNT
-};
-
-struct symbol {
-	struct symbol *next;
-	char *name;
-	enum symbol_type type;
-	struct symbol_value curr;
-	struct symbol_value def[S_DEF_COUNT];
-	tristate visible;
-	int flags;
-	struct property *prop;
-	struct expr_value dir_dep;
-	struct expr_value rev_dep;
-};
-
-#define for_all_symbols(i, sym) for (i = 0; i < SYMBOL_HASHSIZE; i++) for (sym = symbol_hash[i]; sym; sym = sym->next) if (sym->type != S_OTHER)
-
-#define SYMBOL_CONST      0x0001  /* symbol is const */
-#define SYMBOL_CHECK      0x0008  /* used during dependency checking */
-#define SYMBOL_CHOICE     0x0010  /* start of a choice block (null name) */
-#define SYMBOL_CHOICEVAL  0x0020  /* used as a value in a choice block */
-#define SYMBOL_VALID      0x0080  /* set when symbol.curr is calculated */
-#define SYMBOL_OPTIONAL   0x0100  /* choice is optional - values can be 'n' */
-#define SYMBOL_WRITE      0x0200  /* write symbol to file (KCONFIG_CONFIG) */
-#define SYMBOL_CHANGED    0x0400  /* ? */
-#define SYMBOL_AUTO       0x1000  /* value from environment variable */
-#define SYMBOL_CHECKED    0x2000  /* used during dependency checking */
-#define SYMBOL_WARNED     0x8000  /* warning has been issued */
-
-/* Set when symbol.def[] is used */
-#define SYMBOL_DEF        0x10000  /* First bit of SYMBOL_DEF */
-#define SYMBOL_DEF_USER   0x10000  /* symbol.def[S_DEF_USER] is valid */
-#define SYMBOL_DEF_AUTO   0x20000  /* symbol.def[S_DEF_AUTO] is valid */
-#define SYMBOL_DEF3       0x40000  /* symbol.def[S_DEF_3] is valid */
-#define SYMBOL_DEF4       0x80000  /* symbol.def[S_DEF_4] is valid */
-
-/* choice values need to be set before calculating this symbol value */
-#define SYMBOL_NEED_SET_CHOICE_VALUES  0x100000
-
-#define SYMBOL_MAXLENGTH	256
-#define SYMBOL_HASHSIZE		9973
-
-/* A property represent the config options that can be associated
- * with a config "symbol".
- * Sample:
- * config FOO
- *         default y
- *         prompt "foo prompt"
- *         select BAR
- * config BAZ
- *         int "BAZ Value"
- *         range 1..255
- */
-enum prop_type {
-	P_UNKNOWN,
-	P_PROMPT,   /* prompt "foo prompt" or "BAZ Value" */
-	P_COMMENT,  /* text associated with a comment */
-	P_MENU,     /* prompt associated with a menuconfig option */
-	P_DEFAULT,  /* default y */
-	P_CHOICE,   /* choice value */
-	P_SELECT,   /* select BAR */
-	P_RANGE,    /* range 7..100 (for a symbol) */
-	P_ENV,      /* value from environment variable */
-	P_SYMBOL,   /* where a symbol is defined */
-};
-
-struct property {
-	struct property *next;     /* next property - null if last */
-	struct symbol *sym;        /* the symbol for which the property is associated */
-	enum prop_type type;       /* type of property */
-	const char *text;          /* the prompt value - P_PROMPT, P_MENU, P_COMMENT */
-	struct expr_value visible;
-	struct expr *expr;         /* the optional conditional part of the property */
-	struct menu *menu;         /* the menu the property are associated with
-	                            * valid for: P_SELECT, P_RANGE, P_CHOICE,
-	                            * P_PROMPT, P_DEFAULT, P_MENU, P_COMMENT */
-	struct file *file;         /* what file was this property defined */
-	int lineno;                /* what lineno was this property defined */
-};
-
-#define for_all_properties(sym, st, tok) \
-	for (st = sym->prop; st; st = st->next) \
-		if (st->type == (tok))
-#define for_all_defaults(sym, st) for_all_properties(sym, st, P_DEFAULT)
-#define for_all_choices(sym, st) for_all_properties(sym, st, P_CHOICE)
-#define for_all_prompts(sym, st) \
-	for (st = sym->prop; st; st = st->next) \
-		if (st->text)
-
-struct menu {
-	struct menu *next;
-	struct menu *parent;
-	struct menu *list;
-	struct symbol *sym;
-	struct property *prompt;
-	struct expr *visibility;
-	struct expr *dep;
-	unsigned int flags;
-	char *help;
-	struct file *file;
-	int lineno;
-	void *data;
-};
-
-#define MENU_CHANGED		0x0001
-#define MENU_ROOT		0x0002
-
-struct jump_key {
-	struct list_head entries;
-	size_t offset;
-	struct menu *target;
-	int index;
-};
-
-#define JUMP_NB			9
-
-extern struct file *file_list;
-extern struct file *current_file;
-struct file *lookup_file(const char *name);
-
-extern struct symbol symbol_yes, symbol_no, symbol_mod;
-extern struct symbol *modules_sym;
-extern struct symbol *sym_defconfig_list;
-extern int cdebug;
-struct expr *expr_alloc_symbol(struct symbol *sym);
-struct expr *expr_alloc_one(enum expr_type type, struct expr *ce);
-struct expr *expr_alloc_two(enum expr_type type, struct expr *e1, struct expr *e2);
-struct expr *expr_alloc_comp(enum expr_type type, struct symbol *s1, struct symbol *s2);
-struct expr *expr_alloc_and(struct expr *e1, struct expr *e2);
-struct expr *expr_alloc_or(struct expr *e1, struct expr *e2);
-struct expr *expr_copy(const struct expr *org);
-void expr_free(struct expr *e);
-int expr_eq(struct expr *e1, struct expr *e2);
-void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
-tristate expr_calc_value(struct expr *e);
-struct expr *expr_eliminate_yn(struct expr *e);
-struct expr *expr_trans_bool(struct expr *e);
-struct expr *expr_eliminate_dups(struct expr *e);
-struct expr *expr_transform(struct expr *e);
-int expr_contains_symbol(struct expr *dep, struct symbol *sym);
-bool expr_depends_symbol(struct expr *dep, struct symbol *sym);
-struct expr *expr_extract_eq_and(struct expr **ep1, struct expr **ep2);
-struct expr *expr_extract_eq_or(struct expr **ep1, struct expr **ep2);
-void expr_extract_eq(enum expr_type type, struct expr **ep, struct expr **ep1, struct expr **ep2);
-struct expr *expr_trans_compare(struct expr *e, enum expr_type type, struct symbol *sym);
-struct expr *expr_simplify_unmet_dep(struct expr *e1, struct expr *e2);
-
-void expr_fprint(struct expr *e, FILE *out);
-struct gstr; /* forward */
-void expr_gstr_print(struct expr *e, struct gstr *gs);
-
-static inline int expr_is_yes(struct expr *e)
-{
-	return !e || (e->type == E_SYMBOL && e->left.sym == &symbol_yes);
-}
-
-static inline int expr_is_no(struct expr *e)
-{
-	return e && (e->type == E_SYMBOL && e->left.sym == &symbol_no);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* EXPR_H */
diff --git a/support/kconfig/fixdep.c b/support/kconfig/fixdep.c
deleted file mode 100644
index f80a0c4..0000000
--- a/support/kconfig/fixdep.c
+++ /dev/null
@@ -1,409 +0,0 @@
-/*
- * "Optimize" a list of dependencies as spit out by gcc -MD
- * for the kernel build
- * ===========================================================================
- *
- * Author       Kai Germaschewski
- * Copyright    2002 by Kai Germaschewski  <kai.germaschewski@gmx.de>
- *
- * This software may be used and distributed according to the terms
- * of the GNU General Public License, incorporated herein by reference.
- *
- *
- * Introduction:
- *
- * gcc produces a very nice and correct list of dependencies which
- * tells make when to remake a file.
- *
- * To use this list as-is however has the drawback that virtually
- * every file in the kernel includes autoconf.h.
- *
- * If the user re-runs make *config, autoconf.h will be
- * regenerated.  make notices that and will rebuild every file which
- * includes autoconf.h, i.e. basically all files. This is extremely
- * annoying if the user just changed CONFIG_HIS_DRIVER from n to m.
- *
- * So we play the same trick that "mkdep" played before. We replace
- * the dependency on autoconf.h by a dependency on every config
- * option which is mentioned in any of the listed prerequisites.
- *
- * kconfig populates a tree in include/config/ with an empty file
- * for each config symbol and when the configuration is updated
- * the files representing changed config options are touched
- * which then let make pick up the changes and the files that use
- * the config symbols are rebuilt.
- *
- * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
- * which depend on "include/config/his/driver.h" will be rebuilt,
- * so most likely only his driver ;-)
- *
- * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
- *
- * So to get dependencies right, there are two issues:
- * o if any of the files the compiler read changed, we need to rebuild
- * o if the command line given to the compile the file changed, we
- *   better rebuild as well.
- *
- * The former is handled by using the -MD output, the later by saving
- * the command line used to compile the old object and comparing it
- * to the one we would now use.
- *
- * Again, also this idea is pretty old and has been discussed on
- * kbuild-devel a long time ago. I don't have a sensibly working
- * internet connection right now, so I rather don't mention names
- * without double checking.
- *
- * This code here has been based partially based on mkdep.c, which
- * says the following about its history:
- *
- *   Copyright abandoned, Michael Chastain, <mailto:mec@shout.net>.
- *   This is a C version of syncdep.pl by Werner Almesberger.
- *
- *
- * It is invoked as
- *
- *   fixdep <depfile> <target> <cmdline>
- *
- * and will read the dependency file <depfile>
- *
- * The transformed dependency snipped is written to stdout.
- *
- * It first generates a line
- *
- *   cmd_<target> = <cmdline>
- *
- * and then basically copies the .<target>.d file to stdout, in the
- * process filtering out the dependency on autoconf.h and adding
- * dependencies on include/config/my/option.h for every
- * CONFIG_MY_OPTION encountered in any of the prerequisites.
- *
- * It will also filter out all the dependencies on *.ver. We need
- * to make sure that the generated version checksum are globally up
- * to date before even starting the recursive build, so it's too late
- * at this point anyway.
- *
- * We don't even try to really parse the header files, but
- * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will
- * be picked up as well. It's not a problem with respect to
- * correctness, since that can only give too many dependencies, thus
- * we cannot miss a rebuild. Since people tend to not mention totally
- * unrelated CONFIG_ options all over the place, it's not an
- * efficiency problem either.
- *
- * (Note: it'd be easy to port over the complete mkdep state machine,
- *  but I don't think the added complexity is worth it)
- *
- * This source is copied from linux kernel
- * (scripts/basic/fixdep.c). Tag 4.17-rc1, commit
- * 60cc43fc888428bb2f18f08997432d426a243338
- */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <ctype.h>
-
-/* The global variable is a bit against the style of fixdep. But this
- * reduces number of changed lines significantly. Which hopefully will
- * make it easier to merge with newer version from linux source tree.
- */
-static const char *builddir;
-
-static void usage(void)
-{
-	fprintf(stderr, "Usage: fixdep [-e] <depfile> <target> <cmdline> <builddir>\n");
-	fprintf(stderr, " -e  insert extra dependencies given on stdin\n");
-	exit(1);
-}
-
-/*
- * Print out a dependency path from a symbol name
- */
-static void print_dep(const char *m, int slen, const char *dir)
-{
-	int c, i;
-
-	printf("    $(wildcard %s/%s/", builddir, dir);
-	for (i = 0; i < slen; i++) {
-		c = m[i];
-		if (c == '_')
-			c = '/';
-		else
-			c = tolower(c);
-		putchar(c);
-	}
-	printf(".h) \\\n");
-}
-
-static void do_extra_deps(void)
-{
-	char buf[80];
-
-	while (fgets(buf, sizeof(buf), stdin)) {
-		int len = strlen(buf);
-
-		if (len < 2 || buf[len - 1] != '\n') {
-			fprintf(stderr, "fixdep: bad data on stdin\n");
-			exit(1);
-		}
-		print_dep(buf, len - 1, "include/ksym");
-	}
-}
-
-struct item {
-	struct item	*next;
-	unsigned int	len;
-	unsigned int	hash;
-	char		name[0];
-};
-
-#define HASHSZ 256
-static struct item *hashtab[HASHSZ];
-
-static unsigned int strhash(const char *str, unsigned int sz)
-{
-	/* fnv32 hash */
-	unsigned int i, hash = 2166136261U;
-
-	for (i = 0; i < sz; i++)
-		hash = (hash ^ str[i]) * 0x01000193;
-	return hash;
-}
-
-/*
- * Lookup a value in the configuration string.
- */
-static int is_defined_config(const char *name, int len, unsigned int hash)
-{
-	struct item *aux;
-
-	for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) {
-		if (aux->hash == hash && aux->len == len &&
-		    memcmp(aux->name, name, len) == 0)
-			return 1;
-	}
-	return 0;
-}
-
-/*
- * Add a new value to the configuration string.
- */
-static void define_config(const char *name, int len, unsigned int hash)
-{
-	struct item *aux = malloc(sizeof(*aux) + len);
-
-	if (!aux) {
-		perror("fixdep:malloc");
-		exit(1);
-	}
-	memcpy(aux->name, name, len);
-	aux->len = len;
-	aux->hash = hash;
-	aux->next = hashtab[hash % HASHSZ];
-	hashtab[hash % HASHSZ] = aux;
-}
-
-/*
- * Record the use of a CONFIG_* word.
- */
-static void use_config(const char *m, int slen)
-{
-	unsigned int hash = strhash(m, slen);
-
-	if (is_defined_config(m, slen, hash))
-		return;
-
-	define_config(m, slen, hash);
-	print_dep(m, slen, "kconfig/depinclude");
-}
-
-/* test if s ends in sub */
-static int str_ends_with(const char *s, int slen, const char *sub)
-{
-	int sublen = strlen(sub);
-
-	if (sublen > slen)
-		return 0;
-
-	return !memcmp(s + slen - sublen, sub, sublen);
-}
-
-static void parse_config_file(const char *p)
-{
-	const char *q, *r;
-	const char *start = p;
-
-	while ((p = strstr(p, "CONFIG_"))) {
-		if (p > start && (isalnum(p[-1]) || p[-1] == '_')) {
-			p += 7;
-			continue;
-		}
-		p += 7;
-		q = p;
-		while (*q && (isalnum(*q) || *q == '_'))
-			q++;
-		if (str_ends_with(p, q - p, "_MODULE"))
-			r = q - 7;
-		else
-			r = q;
-		if (r > p)
-			use_config(p, r - p);
-		p = q;
-	}
-}
-
-static void *read_file(const char *filename)
-{
-	struct stat st;
-	int fd;
-	char *buf;
-
-	fd = open(filename, O_RDONLY);
-	if (fd < 0) {
-		fprintf(stderr, "fixdep: error opening file: ");
-		perror(filename);
-		exit(2);
-	}
-	if (fstat(fd, &st) < 0) {
-		fprintf(stderr, "fixdep: error fstat'ing file: ");
-		perror(filename);
-		exit(2);
-	}
-	buf = malloc(st.st_size + 1);
-	if (!buf) {
-		perror("fixdep: malloc");
-		exit(2);
-	}
-	if (read(fd, buf, st.st_size) != st.st_size) {
-		perror("fixdep: read");
-		exit(2);
-	}
-	buf[st.st_size] = '\0';
-	close(fd);
-
-	return buf;
-}
-
-/* Ignore certain dependencies */
-static int is_ignored_file(const char *s, int len)
-{
-	return str_ends_with(s, len, "build/include/uk/_config.h");
-}
-
-/*
- * Important: The below generated source_foo.o and deps_foo.o variable
- * assignments are parsed not only by make, but also by the rather simple
- * parser in scripts/mod/sumversion.c.
- */
-static void parse_dep_file(char *m, const char *target, int insert_extra_deps)
-{
-	char *p;
-	int is_last, is_target;
-	int saw_any_target = 0;
-	int is_first_dep = 0;
-	void *buf;
-
-	while (1) {
-		/* Skip any "white space" */
-		while (*m == ' ' || *m == '\\' || *m == '\n')
-			m++;
-
-		if (!*m)
-			break;
-
-		/* Find next "white space" */
-		p = m;
-		while (*p && *p != ' ' && *p != '\\' && *p != '\n')
-			p++;
-		is_last = (*p == '\0');
-		/* Is the token we found a target name? */
-		is_target = (*(p-1) == ':');
-		/* Don't write any target names into the dependency file */
-		if (is_target) {
-			/* The /next/ file is the first dependency */
-			is_first_dep = 1;
-		} else if (!is_ignored_file(m, p - m)) {
-			*p = '\0';
-
-			/*
-			 * Do not list the source file as dependency, so that
-			 * kbuild is not confused if a .c file is rewritten
-			 * into .S or vice versa. Storing it in source_* is
-			 * needed for modpost to compute srcversions.
-			 */
-			if (is_first_dep) {
-				/*
-				 * If processing the concatenation of multiple
-				 * dependency files, only process the first
-				 * target name, which will be the original
-				 * source name, and ignore any other target
-				 * names, which will be intermediate temporary
-				 * files.
-				 */
-				if (!saw_any_target) {
-					saw_any_target = 1;
-					printf("source_%s := %s\n\n",
-					       target, m);
-					printf("deps_%s := \\\n", target);
-				}
-				is_first_dep = 0;
-			} else {
-				printf("  %s \\\n", m);
-			}
-
-			buf = read_file(m);
-			parse_config_file(buf);
-			free(buf);
-		}
-
-		if (is_last)
-			break;
-
-		/*
-		 * Start searching for next token immediately after the first
-		 * "whitespace" character that follows this token.
-		 */
-		m = p + 1;
-	}
-
-	if (!saw_any_target) {
-		fprintf(stderr, "fixdep: parse error; no targets found\n");
-		exit(1);
-	}
-
-	if (insert_extra_deps)
-		do_extra_deps();
-
-	printf("\n%s: $(deps_%s)\n\n", target, target);
-	printf("$(deps_%s):\n", target);
-}
-
-int main(int argc, char *argv[])
-{
-	const char *depfile, *target, *cmdline;
-	int insert_extra_deps = 0;
-	void *buf;
-
-	if (argc == 6 && !strcmp(argv[1], "-e")) {
-		insert_extra_deps = 1;
-		argv++;
-	} else if (argc != 5)
-		usage();
-
-	depfile = argv[1];
-	target = argv[2];
-	cmdline = argv[3];
-	builddir = argv[4];
-
-	printf("cmd_%s := %s\n\n", target, cmdline);
-
-	buf = read_file(depfile);
-	parse_dep_file(buf, target, insert_extra_deps);
-	free(buf);
-
-	return 0;
-}
diff --git a/support/kconfig/foo.h b/support/kconfig/foo.h
deleted file mode 100644
index b9cfdf8..0000000
--- a/support/kconfig/foo.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef __KCONFIG_FOO_H
-#define __KCONFIG_FOO_H
-
-#ifndef __APPLE__
-#include <features.h>
-#endif
-#include <limits.h>
-
-#ifndef PATH_MAX
-#define PATH_MAX 1024
-#endif
-#endif /* __KCONFIG_FOO_H */
diff --git a/support/kconfig/gconf.c b/support/kconfig/gconf.c
deleted file mode 100644
index 7cbe68e..0000000
--- a/support/kconfig/gconf.c
+++ /dev/null
@@ -1,1542 +0,0 @@
-/* Hey EMACS -*- linux-c -*- */
-/*
- *
- * Copyright (C) 2002-2003 Romain Lievin <roms@tilp.info>
- * Released under the terms of the GNU GPL v2.0.
- *
- */
-
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
-#include <stdlib.h>
-#include "lkc.h"
-#include "images.c"
-
-#include <glade/glade.h>
-#include <gtk/gtk.h>
-#include <glib.h>
-#include <gdk/gdkkeysyms.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-#include <time.h>
-
-//#define DEBUG
-
-enum {
-	SINGLE_VIEW, SPLIT_VIEW, FULL_VIEW
-};
-
-enum {
-	OPT_NORMAL, OPT_ALL, OPT_PROMPT
-};
-
-static gint view_mode = FULL_VIEW;
-static gboolean show_name = TRUE;
-static gboolean show_range = TRUE;
-static gboolean show_value = TRUE;
-static gboolean resizeable = FALSE;
-static int opt_mode = OPT_NORMAL;
-
-GtkWidget *main_wnd = NULL;
-GtkWidget *tree1_w = NULL;	// left  frame
-GtkWidget *tree2_w = NULL;	// right frame
-GtkWidget *text_w = NULL;
-GtkWidget *hpaned = NULL;
-GtkWidget *vpaned = NULL;
-GtkWidget *back_btn = NULL;
-GtkWidget *save_btn = NULL;
-GtkWidget *save_menu_item = NULL;
-
-GtkTextTag *tag1, *tag2;
-GdkColor color;
-
-GtkTreeStore *tree1, *tree2, *tree;
-GtkTreeModel *model1, *model2;
-static GtkTreeIter *parents[256];
-static gint indent;
-
-static struct menu *current; // current node for SINGLE view
-static struct menu *browsed; // browsed node for SPLIT view
-
-enum {
-	COL_OPTION, COL_NAME, COL_NO, COL_MOD, COL_YES, COL_VALUE,
-	COL_MENU, COL_COLOR, COL_EDIT, COL_PIXBUF,
-	COL_PIXVIS, COL_BTNVIS, COL_BTNACT, COL_BTNINC, COL_BTNRAD,
-	COL_NUMBER
-};
-
-static void display_list(void);
-static void display_tree(struct menu *menu);
-static void display_tree_part(void);
-static void update_tree(struct menu *src, GtkTreeIter * dst);
-static void set_node(GtkTreeIter * node, struct menu *menu, gchar ** row);
-static gchar **fill_row(struct menu *menu);
-static void conf_changed(void);
-
-/* Helping/Debugging Functions */
-
-const char *dbg_sym_flags(int val)
-{
-	static char buf[256];
-
-	bzero(buf, 256);
-
-	if (val & SYMBOL_CONST)
-		strcat(buf, "const/");
-	if (val & SYMBOL_CHECK)
-		strcat(buf, "check/");
-	if (val & SYMBOL_CHOICE)
-		strcat(buf, "choice/");
-	if (val & SYMBOL_CHOICEVAL)
-		strcat(buf, "choiceval/");
-	if (val & SYMBOL_VALID)
-		strcat(buf, "valid/");
-	if (val & SYMBOL_OPTIONAL)
-		strcat(buf, "optional/");
-	if (val & SYMBOL_WRITE)
-		strcat(buf, "write/");
-	if (val & SYMBOL_CHANGED)
-		strcat(buf, "changed/");
-	if (val & SYMBOL_AUTO)
-		strcat(buf, "auto/");
-
-	buf[strlen(buf) - 1] = '\0';
-
-	return buf;
-}
-
-void replace_button_icon(GladeXML * xml, GdkDrawable * window,
-			 GtkStyle * style, gchar * btn_name, gchar ** xpm)
-{
-	GdkPixmap *pixmap;
-	GdkBitmap *mask;
-	GtkToolButton *button;
-	GtkWidget *image;
-
-	pixmap = gdk_pixmap_create_from_xpm_d(window, &mask,
-					      &style->bg[GTK_STATE_NORMAL],
-					      xpm);
-
-	button = GTK_TOOL_BUTTON(glade_xml_get_widget(xml, btn_name));
-	image = gtk_image_new_from_pixmap(pixmap, mask);
-	gtk_widget_show(image);
-	gtk_tool_button_set_icon_widget(button, image);
-}
-
-/* Main Window Initialization */
-void init_main_window(const gchar * glade_file)
-{
-	GladeXML *xml;
-	GtkWidget *widget;
-	GtkTextBuffer *txtbuf;
-	GtkStyle *style;
-
-	xml = glade_xml_new(glade_file, "window1", NULL);
-	if (!xml)
-		g_error(_("GUI loading failed !\n"));
-	glade_xml_signal_autoconnect(xml);
-
-	main_wnd = glade_xml_get_widget(xml, "window1");
-	hpaned = glade_xml_get_widget(xml, "hpaned1");
-	vpaned = glade_xml_get_widget(xml, "vpaned1");
-	tree1_w = glade_xml_get_widget(xml, "treeview1");
-	tree2_w = glade_xml_get_widget(xml, "treeview2");
-	text_w = glade_xml_get_widget(xml, "textview3");
-
-	back_btn = glade_xml_get_widget(xml, "button1");
-	gtk_widget_set_sensitive(back_btn, FALSE);
-
-	widget = glade_xml_get_widget(xml, "show_name1");
-	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,
-				       show_name);
-
-	widget = glade_xml_get_widget(xml, "show_range1");
-	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,
-				       show_range);
-
-	widget = glade_xml_get_widget(xml, "show_data1");
-	gtk_check_menu_item_set_active((GtkCheckMenuItem *) widget,
-				       show_value);
-
-	save_btn = glade_xml_get_widget(xml, "button3");
-	save_menu_item = glade_xml_get_widget(xml, "save1");
-	conf_set_changed_callback(conf_changed);
-
-	style = gtk_widget_get_style(main_wnd);
-	widget = glade_xml_get_widget(xml, "toolbar1");
-
-#if 0	/* Use stock Gtk icons instead */
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button1", (gchar **) xpm_back);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button2", (gchar **) xpm_load);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button3", (gchar **) xpm_save);
-#endif
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button4", (gchar **) xpm_single_view);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button5", (gchar **) xpm_split_view);
-	replace_button_icon(xml, main_wnd->window, style,
-			    "button6", (gchar **) xpm_tree_view);
-
-#if 0
-	switch (view_mode) {
-	case SINGLE_VIEW:
-		widget = glade_xml_get_widget(xml, "button4");
-		g_signal_emit_by_name(widget, "clicked");
-		break;
-	case SPLIT_VIEW:
-		widget = glade_xml_get_widget(xml, "button5");
-		g_signal_emit_by_name(widget, "clicked");
-		break;
-	case FULL_VIEW:
-		widget = glade_xml_get_widget(xml, "button6");
-		g_signal_emit_by_name(widget, "clicked");
-		break;
-	}
-#endif
-	txtbuf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));
-	tag1 = gtk_text_buffer_create_tag(txtbuf, "mytag1",
-					  "foreground", "red",
-					  "weight", PANGO_WEIGHT_BOLD,
-					  NULL);
-	tag2 = gtk_text_buffer_create_tag(txtbuf, "mytag2",
-					  /*"style", PANGO_STYLE_OBLIQUE, */
-					  NULL);
-
-	gtk_window_set_title(GTK_WINDOW(main_wnd), rootmenu.prompt->text);
-
-	gtk_widget_show(main_wnd);
-}
-
-void init_tree_model(void)
-{
-	gint i;
-
-	tree = tree2 = gtk_tree_store_new(COL_NUMBER,
-					  G_TYPE_STRING, G_TYPE_STRING,
-					  G_TYPE_STRING, G_TYPE_STRING,
-					  G_TYPE_STRING, G_TYPE_STRING,
-					  G_TYPE_POINTER, GDK_TYPE_COLOR,
-					  G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF,
-					  G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-					  G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-					  G_TYPE_BOOLEAN);
-	model2 = GTK_TREE_MODEL(tree2);
-
-	for (parents[0] = NULL, i = 1; i < 256; i++)
-		parents[i] = (GtkTreeIter *) g_malloc(sizeof(GtkTreeIter));
-
-	tree1 = gtk_tree_store_new(COL_NUMBER,
-				   G_TYPE_STRING, G_TYPE_STRING,
-				   G_TYPE_STRING, G_TYPE_STRING,
-				   G_TYPE_STRING, G_TYPE_STRING,
-				   G_TYPE_POINTER, GDK_TYPE_COLOR,
-				   G_TYPE_BOOLEAN, GDK_TYPE_PIXBUF,
-				   G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-				   G_TYPE_BOOLEAN, G_TYPE_BOOLEAN,
-				   G_TYPE_BOOLEAN);
-	model1 = GTK_TREE_MODEL(tree1);
-}
-
-void init_left_tree(void)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(tree1_w);
-	GtkCellRenderer *renderer;
-	GtkTreeSelection *sel;
-	GtkTreeViewColumn *column;
-
-	gtk_tree_view_set_model(view, model1);
-	gtk_tree_view_set_headers_visible(view, TRUE);
-	gtk_tree_view_set_rules_hint(view, TRUE);
-
-	column = gtk_tree_view_column_new();
-	gtk_tree_view_append_column(view, column);
-	gtk_tree_view_column_set_title(column, _("Options"));
-
-	renderer = gtk_cell_renderer_toggle_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "active", COL_BTNACT,
-					    "inconsistent", COL_BTNINC,
-					    "visible", COL_BTNVIS,
-					    "radio", COL_BTNRAD, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "text", COL_OPTION,
-					    "foreground-gdk",
-					    COL_COLOR, NULL);
-
-	sel = gtk_tree_view_get_selection(view);
-	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
-	gtk_widget_realize(tree1_w);
-}
-
-static void renderer_edited(GtkCellRendererText * cell,
-			    const gchar * path_string,
-			    const gchar * new_text, gpointer user_data);
-
-void init_right_tree(void)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(tree2_w);
-	GtkCellRenderer *renderer;
-	GtkTreeSelection *sel;
-	GtkTreeViewColumn *column;
-	gint i;
-
-	gtk_tree_view_set_model(view, model2);
-	gtk_tree_view_set_headers_visible(view, TRUE);
-	gtk_tree_view_set_rules_hint(view, TRUE);
-
-	column = gtk_tree_view_column_new();
-	gtk_tree_view_append_column(view, column);
-	gtk_tree_view_column_set_title(column, _("Options"));
-
-	renderer = gtk_cell_renderer_pixbuf_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "pixbuf", COL_PIXBUF,
-					    "visible", COL_PIXVIS, NULL);
-	renderer = gtk_cell_renderer_toggle_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "active", COL_BTNACT,
-					    "inconsistent", COL_BTNINC,
-					    "visible", COL_BTNVIS,
-					    "radio", COL_BTNRAD, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_column_pack_start(GTK_TREE_VIEW_COLUMN(column),
-					renderer, FALSE);
-	gtk_tree_view_column_set_attributes(GTK_TREE_VIEW_COLUMN(column),
-					    renderer,
-					    "text", COL_OPTION,
-					    "foreground-gdk",
-					    COL_COLOR, NULL);
-
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    _("Name"), renderer,
-						    "text", COL_NAME,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    "N", renderer,
-						    "text", COL_NO,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    "M", renderer,
-						    "text", COL_MOD,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    "Y", renderer,
-						    "text", COL_YES,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	renderer = gtk_cell_renderer_text_new();
-	gtk_tree_view_insert_column_with_attributes(view, -1,
-						    _("Value"), renderer,
-						    "text", COL_VALUE,
-						    "editable",
-						    COL_EDIT,
-						    "foreground-gdk",
-						    COL_COLOR, NULL);
-	g_signal_connect(G_OBJECT(renderer), "edited",
-			 G_CALLBACK(renderer_edited), NULL);
-
-	column = gtk_tree_view_get_column(view, COL_NAME);
-	gtk_tree_view_column_set_visible(column, show_name);
-	column = gtk_tree_view_get_column(view, COL_NO);
-	gtk_tree_view_column_set_visible(column, show_range);
-	column = gtk_tree_view_get_column(view, COL_MOD);
-	gtk_tree_view_column_set_visible(column, show_range);
-	column = gtk_tree_view_get_column(view, COL_YES);
-	gtk_tree_view_column_set_visible(column, show_range);
-	column = gtk_tree_view_get_column(view, COL_VALUE);
-	gtk_tree_view_column_set_visible(column, show_value);
-
-	if (resizeable) {
-		for (i = 0; i < COL_VALUE; i++) {
-			column = gtk_tree_view_get_column(view, i);
-			gtk_tree_view_column_set_resizable(column, TRUE);
-		}
-	}
-
-	sel = gtk_tree_view_get_selection(view);
-	gtk_tree_selection_set_mode(sel, GTK_SELECTION_SINGLE);
-}
-
-
-/* Utility Functions */
-
-
-static void text_insert_help(struct menu *menu)
-{
-	GtkTextBuffer *buffer;
-	GtkTextIter start, end;
-	const char *prompt = _(menu_get_prompt(menu));
-	struct gstr help = str_new();
-
-	menu_get_ext_help(menu, &help);
-
-	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));
-	gtk_text_buffer_get_bounds(buffer, &start, &end);
-	gtk_text_buffer_delete(buffer, &start, &end);
-	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15);
-
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, prompt, -1, tag1,
-					 NULL);
-	gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2);
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, str_get(&help), -1, tag2,
-					 NULL);
-	str_free(&help);
-}
-
-
-static void text_insert_msg(const char *title, const char *message)
-{
-	GtkTextBuffer *buffer;
-	GtkTextIter start, end;
-	const char *msg = message;
-
-	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_w));
-	gtk_text_buffer_get_bounds(buffer, &start, &end);
-	gtk_text_buffer_delete(buffer, &start, &end);
-	gtk_text_view_set_left_margin(GTK_TEXT_VIEW(text_w), 15);
-
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, title, -1, tag1,
-					 NULL);
-	gtk_text_buffer_insert_at_cursor(buffer, "\n\n", 2);
-	gtk_text_buffer_get_end_iter(buffer, &end);
-	gtk_text_buffer_insert_with_tags(buffer, &end, msg, -1, tag2,
-					 NULL);
-}
-
-
-/* Main Windows Callbacks */
-
-void on_save_activate(GtkMenuItem * menuitem, gpointer user_data);
-gboolean on_window1_delete_event(GtkWidget * widget, GdkEvent * event,
-				 gpointer user_data)
-{
-	GtkWidget *dialog, *label;
-	gint result;
-
-	if (!conf_get_changed())
-		return FALSE;
-
-	dialog = gtk_dialog_new_with_buttons(_("Warning !"),
-					     GTK_WINDOW(main_wnd),
-					     (GtkDialogFlags)
-					     (GTK_DIALOG_MODAL |
-					      GTK_DIALOG_DESTROY_WITH_PARENT),
-					     GTK_STOCK_OK,
-					     GTK_RESPONSE_YES,
-					     GTK_STOCK_NO,
-					     GTK_RESPONSE_NO,
-					     GTK_STOCK_CANCEL,
-					     GTK_RESPONSE_CANCEL, NULL);
-	gtk_dialog_set_default_response(GTK_DIALOG(dialog),
-					GTK_RESPONSE_CANCEL);
-
-	label = gtk_label_new(_("\nSave configuration ?\n"));
-	gtk_container_add(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox), label);
-	gtk_widget_show(label);
-
-	result = gtk_dialog_run(GTK_DIALOG(dialog));
-	switch (result) {
-	case GTK_RESPONSE_YES:
-		on_save_activate(NULL, NULL);
-		return FALSE;
-	case GTK_RESPONSE_NO:
-		return FALSE;
-	case GTK_RESPONSE_CANCEL:
-	case GTK_RESPONSE_DELETE_EVENT:
-	default:
-		gtk_widget_destroy(dialog);
-		return TRUE;
-	}
-
-	return FALSE;
-}
-
-
-void on_window1_destroy(GtkObject * object, gpointer user_data)
-{
-	gtk_main_quit();
-}
-
-
-void
-on_window1_size_request(GtkWidget * widget,
-			GtkRequisition * requisition, gpointer user_data)
-{
-	static gint old_h;
-	gint w, h;
-
-	if (widget->window == NULL)
-		gtk_window_get_default_size(GTK_WINDOW(main_wnd), &w, &h);
-	else
-		gdk_window_get_size(widget->window, &w, &h);
-
-	if (h == old_h)
-		return;
-	old_h = h;
-
-	gtk_paned_set_position(GTK_PANED(vpaned), 2 * h / 3);
-}
-
-
-/* Menu & Toolbar Callbacks */
-
-
-static void
-load_filename(GtkFileSelection * file_selector, gpointer user_data)
-{
-	const gchar *fn;
-
-	fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION
-					     (user_data));
-
-	if (conf_read(fn))
-		text_insert_msg(_("Error"), _("Unable to load configuration !"));
-	else
-		display_tree(&rootmenu);
-}
-
-void on_load1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *fs;
-
-	fs = gtk_file_selection_new(_("Load file..."));
-	g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
-			 "clicked",
-			 G_CALLBACK(load_filename), (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->ok_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->cancel_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	gtk_widget_show(fs);
-}
-
-
-void on_save_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	if (conf_write(NULL))
-		text_insert_msg(_("Error"), _("Unable to save configuration !"));
-}
-
-
-static void
-store_filename(GtkFileSelection * file_selector, gpointer user_data)
-{
-	const gchar *fn;
-
-	fn = gtk_file_selection_get_filename(GTK_FILE_SELECTION
-					     (user_data));
-
-	if (conf_write(fn))
-		text_insert_msg(_("Error"), _("Unable to save configuration !"));
-
-	gtk_widget_destroy(GTK_WIDGET(user_data));
-}
-
-void on_save_as1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *fs;
-
-	fs = gtk_file_selection_new(_("Save file as..."));
-	g_signal_connect(GTK_OBJECT(GTK_FILE_SELECTION(fs)->ok_button),
-			 "clicked",
-			 G_CALLBACK(store_filename), (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->ok_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	g_signal_connect_swapped(GTK_OBJECT
-				 (GTK_FILE_SELECTION(fs)->cancel_button),
-				 "clicked", G_CALLBACK(gtk_widget_destroy),
-				 (gpointer) fs);
-	gtk_widget_show(fs);
-}
-
-
-void on_quit1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	if (!on_window1_delete_event(NULL, NULL, NULL))
-		gtk_widget_destroy(GTK_WIDGET(main_wnd));
-}
-
-
-void on_show_name1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkTreeViewColumn *col;
-
-	show_name = GTK_CHECK_MENU_ITEM(menuitem)->active;
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_NAME);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_name);
-}
-
-
-void on_show_range1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkTreeViewColumn *col;
-
-	show_range = GTK_CHECK_MENU_ITEM(menuitem)->active;
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_NO);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_range);
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_MOD);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_range);
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_YES);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_range);
-
-}
-
-
-void on_show_data1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkTreeViewColumn *col;
-
-	show_value = GTK_CHECK_MENU_ITEM(menuitem)->active;
-	col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), COL_VALUE);
-	if (col)
-		gtk_tree_view_column_set_visible(col, show_value);
-}
-
-
-void
-on_set_option_mode1_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
-	opt_mode = OPT_NORMAL;
-	gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);	/* instead of update_tree to speed-up */
-}
-
-
-void
-on_set_option_mode2_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
-	opt_mode = OPT_ALL;
-	gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);	/* instead of update_tree to speed-up */
-}
-
-
-void
-on_set_option_mode3_activate(GtkMenuItem *menuitem, gpointer user_data)
-{
-	opt_mode = OPT_PROMPT;
-	gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);	/* instead of update_tree to speed-up */
-}
-
-
-void on_introduction1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *dialog;
-	const gchar *intro_text = _(
-	    "Welcome to gkc, the GTK+ graphical configuration tool\n"
-	    "For each option, a blank box indicates the feature is disabled, a\n"
-	    "check indicates it is enabled, and a dot indicates that it is to\n"
-	    "be compiled as a module.  Clicking on the box will cycle through the three states.\n"
-	    "\n"
-	    "If you do not see an option (e.g., a device driver) that you\n"
-	    "believe should be present, try turning on Show All Options\n"
-	    "under the Options menu.\n"
-	    "Although there is no cross reference yet to help you figure out\n"
-	    "what other options must be enabled to support the option you\n"
-	    "are interested in, you can still view the help of a grayed-out\n"
-	    "option.\n"
-	    "\n"
-	    "Toggling Show Debug Info under the Options menu will show \n"
-	    "the dependencies, which you can then match by examining other options.");
-
-	dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_INFO,
-					GTK_BUTTONS_CLOSE, "%s", intro_text);
-	g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
-				 G_CALLBACK(gtk_widget_destroy),
-				 GTK_OBJECT(dialog));
-	gtk_widget_show_all(dialog);
-}
-
-
-void on_about1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *dialog;
-	const gchar *about_text =
-	    _("gkc is copyright (c) 2002 Romain Lievin <roms@lpg.ticalc.org>.\n"
-	      "Based on the source code from Roman Zippel.\n");
-
-	dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_INFO,
-					GTK_BUTTONS_CLOSE, "%s", about_text);
-	g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
-				 G_CALLBACK(gtk_widget_destroy),
-				 GTK_OBJECT(dialog));
-	gtk_widget_show_all(dialog);
-}
-
-
-void on_license1_activate(GtkMenuItem * menuitem, gpointer user_data)
-{
-	GtkWidget *dialog;
-	const gchar *license_text =
-	    _("gkc is released under the terms of the GNU GPL v2.\n"
-	      "For more information, please see the source code or\n"
-	      "visit http://www.fsf.org/licenses/licenses.html\n");
-
-	dialog = gtk_message_dialog_new(GTK_WINDOW(main_wnd),
-					GTK_DIALOG_DESTROY_WITH_PARENT,
-					GTK_MESSAGE_INFO,
-					GTK_BUTTONS_CLOSE, "%s", license_text);
-	g_signal_connect_swapped(GTK_OBJECT(dialog), "response",
-				 G_CALLBACK(gtk_widget_destroy),
-				 GTK_OBJECT(dialog));
-	gtk_widget_show_all(dialog);
-}
-
-
-void on_back_clicked(GtkButton * button, gpointer user_data)
-{
-	enum prop_type ptype;
-
-	current = current->parent;
-	ptype = current->prompt ? current->prompt->type : P_UNKNOWN;
-	if (ptype != P_MENU)
-		current = current->parent;
-	display_tree_part();
-
-	if (current == &rootmenu)
-		gtk_widget_set_sensitive(back_btn, FALSE);
-}
-
-
-void on_load_clicked(GtkButton * button, gpointer user_data)
-{
-	on_load1_activate(NULL, user_data);
-}
-
-
-void on_single_clicked(GtkButton * button, gpointer user_data)
-{
-	view_mode = SINGLE_VIEW;
-	gtk_widget_hide(tree1_w);
-	current = &rootmenu;
-	display_tree_part();
-}
-
-
-void on_split_clicked(GtkButton * button, gpointer user_data)
-{
-	gint w, h;
-	view_mode = SPLIT_VIEW;
-	gtk_widget_show(tree1_w);
-	gtk_window_get_default_size(GTK_WINDOW(main_wnd), &w, &h);
-	gtk_paned_set_position(GTK_PANED(hpaned), w / 2);
-	if (tree2)
-		gtk_tree_store_clear(tree2);
-	display_list();
-
-	/* Disable back btn, like in full mode. */
-	gtk_widget_set_sensitive(back_btn, FALSE);
-}
-
-
-void on_full_clicked(GtkButton * button, gpointer user_data)
-{
-	view_mode = FULL_VIEW;
-	gtk_widget_hide(tree1_w);
-	if (tree2)
-		gtk_tree_store_clear(tree2);
-	display_tree(&rootmenu);
-	gtk_widget_set_sensitive(back_btn, FALSE);
-}
-
-
-void on_collapse_clicked(GtkButton * button, gpointer user_data)
-{
-	gtk_tree_view_collapse_all(GTK_TREE_VIEW(tree2_w));
-}
-
-
-void on_expand_clicked(GtkButton * button, gpointer user_data)
-{
-	gtk_tree_view_expand_all(GTK_TREE_VIEW(tree2_w));
-}
-
-
-/* CTree Callbacks */
-
-/* Change hex/int/string value in the cell */
-static void renderer_edited(GtkCellRendererText * cell,
-			    const gchar * path_string,
-			    const gchar * new_text, gpointer user_data)
-{
-	GtkTreePath *path = gtk_tree_path_new_from_string(path_string);
-	GtkTreeIter iter;
-	const char *old_def, *new_def;
-	struct menu *menu;
-	struct symbol *sym;
-
-	if (!gtk_tree_model_get_iter(model2, &iter, path))
-		return;
-
-	gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-	sym = menu->sym;
-
-	gtk_tree_model_get(model2, &iter, COL_VALUE, &old_def, -1);
-	new_def = new_text;
-
-	sym_set_string_value(sym, new_def);
-
-	update_tree(&rootmenu, NULL);
-
-	gtk_tree_path_free(path);
-}
-
-/* Change the value of a symbol and update the tree */
-static void change_sym_value(struct menu *menu, gint col)
-{
-	struct symbol *sym = menu->sym;
-	tristate newval;
-
-	if (!sym)
-		return;
-
-	if (col == COL_NO)
-		newval = no;
-	else if (col == COL_MOD)
-		newval = mod;
-	else if (col == COL_YES)
-		newval = yes;
-	else
-		return;
-
-	switch (sym_get_type(sym)) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		if (!sym_tristate_within_range(sym, newval))
-			newval = yes;
-		sym_set_tristate_value(sym, newval);
-		if (view_mode == FULL_VIEW)
-			update_tree(&rootmenu, NULL);
-		else if (view_mode == SPLIT_VIEW) {
-			update_tree(browsed, NULL);
-			display_list();
-		}
-		else if (view_mode == SINGLE_VIEW)
-			display_tree_part();	//fixme: keep exp/coll
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-	default:
-		break;
-	}
-}
-
-static void toggle_sym_value(struct menu *menu)
-{
-	if (!menu->sym)
-		return;
-
-	sym_toggle_tristate_value(menu->sym);
-	if (view_mode == FULL_VIEW)
-		update_tree(&rootmenu, NULL);
-	else if (view_mode == SPLIT_VIEW) {
-		update_tree(browsed, NULL);
-		display_list();
-	}
-	else if (view_mode == SINGLE_VIEW)
-		display_tree_part();	//fixme: keep exp/coll
-}
-
-static gint column2index(GtkTreeViewColumn * column)
-{
-	gint i;
-
-	for (i = 0; i < COL_NUMBER; i++) {
-		GtkTreeViewColumn *col;
-
-		col = gtk_tree_view_get_column(GTK_TREE_VIEW(tree2_w), i);
-		if (col == column)
-			return i;
-	}
-
-	return -1;
-}
-
-
-/* User click: update choice (full) or goes down (single) */
-gboolean
-on_treeview2_button_press_event(GtkWidget * widget,
-				GdkEventButton * event, gpointer user_data)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(widget);
-	GtkTreePath *path;
-	GtkTreeViewColumn *column;
-	GtkTreeIter iter;
-	struct menu *menu;
-	gint col;
-
-#if GTK_CHECK_VERSION(2,1,4) // bug in ctree with earlier version of GTK
-	gint tx = (gint) event->x;
-	gint ty = (gint) event->y;
-	gint cx, cy;
-
-	gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx,
-				      &cy);
-#else
-	gtk_tree_view_get_cursor(view, &path, &column);
-#endif
-	if (path == NULL)
-		return FALSE;
-
-	if (!gtk_tree_model_get_iter(model2, &iter, path))
-		return FALSE;
-	gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-
-	col = column2index(column);
-	if (event->type == GDK_2BUTTON_PRESS) {
-		enum prop_type ptype;
-		ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-
-		if (ptype == P_MENU && view_mode != FULL_VIEW && col == COL_OPTION) {
-			// goes down into menu
-			current = menu;
-			display_tree_part();
-			gtk_widget_set_sensitive(back_btn, TRUE);
-		} else if ((col == COL_OPTION)) {
-			toggle_sym_value(menu);
-			gtk_tree_view_expand_row(view, path, TRUE);
-		}
-	} else {
-		if (col == COL_VALUE) {
-			toggle_sym_value(menu);
-			gtk_tree_view_expand_row(view, path, TRUE);
-		} else if (col == COL_NO || col == COL_MOD
-			   || col == COL_YES) {
-			change_sym_value(menu, col);
-			gtk_tree_view_expand_row(view, path, TRUE);
-		}
-	}
-
-	return FALSE;
-}
-
-/* Key pressed: update choice */
-gboolean
-on_treeview2_key_press_event(GtkWidget * widget,
-			     GdkEventKey * event, gpointer user_data)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(widget);
-	GtkTreePath *path;
-	GtkTreeViewColumn *column;
-	GtkTreeIter iter;
-	struct menu *menu;
-	gint col;
-
-	gtk_tree_view_get_cursor(view, &path, &column);
-	if (path == NULL)
-		return FALSE;
-
-	if (event->keyval == GDK_space) {
-		if (gtk_tree_view_row_expanded(view, path))
-			gtk_tree_view_collapse_row(view, path);
-		else
-			gtk_tree_view_expand_row(view, path, FALSE);
-		return TRUE;
-	}
-	if (event->keyval == GDK_KP_Enter) {
-	}
-	if (widget == tree1_w)
-		return FALSE;
-
-	gtk_tree_model_get_iter(model2, &iter, path);
-	gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-
-	if (!strcasecmp(event->string, "n"))
-		col = COL_NO;
-	else if (!strcasecmp(event->string, "m"))
-		col = COL_MOD;
-	else if (!strcasecmp(event->string, "y"))
-		col = COL_YES;
-	else
-		col = -1;
-	change_sym_value(menu, col);
-
-	return FALSE;
-}
-
-
-/* Row selection changed: update help */
-void
-on_treeview2_cursor_changed(GtkTreeView * treeview, gpointer user_data)
-{
-	GtkTreeSelection *selection;
-	GtkTreeIter iter;
-	struct menu *menu;
-
-	selection = gtk_tree_view_get_selection(treeview);
-	if (gtk_tree_selection_get_selected(selection, &model2, &iter)) {
-		gtk_tree_model_get(model2, &iter, COL_MENU, &menu, -1);
-		text_insert_help(menu);
-	}
-}
-
-
-/* User click: display sub-tree in the right frame. */
-gboolean
-on_treeview1_button_press_event(GtkWidget * widget,
-				GdkEventButton * event, gpointer user_data)
-{
-	GtkTreeView *view = GTK_TREE_VIEW(widget);
-	GtkTreePath *path;
-	GtkTreeViewColumn *column;
-	GtkTreeIter iter;
-	struct menu *menu;
-
-	gint tx = (gint) event->x;
-	gint ty = (gint) event->y;
-	gint cx, cy;
-
-	gtk_tree_view_get_path_at_pos(view, tx, ty, &path, &column, &cx,
-				      &cy);
-	if (path == NULL)
-		return FALSE;
-
-	gtk_tree_model_get_iter(model1, &iter, path);
-	gtk_tree_model_get(model1, &iter, COL_MENU, &menu, -1);
-
-	if (event->type == GDK_2BUTTON_PRESS) {
-		toggle_sym_value(menu);
-		current = menu;
-		display_tree_part();
-	} else {
-		browsed = menu;
-		display_tree_part();
-	}
-
-	gtk_widget_realize(tree2_w);
-	gtk_tree_view_set_cursor(view, path, NULL, FALSE);
-	gtk_widget_grab_focus(tree2_w);
-
-	return FALSE;
-}
-
-
-/* Fill a row of strings */
-static gchar **fill_row(struct menu *menu)
-{
-	static gchar *row[COL_NUMBER];
-	struct symbol *sym = menu->sym;
-	const char *def;
-	int stype;
-	tristate val;
-	enum prop_type ptype;
-	int i;
-
-	for (i = COL_OPTION; i <= COL_COLOR; i++)
-		g_free(row[i]);
-	bzero(row, sizeof(row));
-
-	row[COL_OPTION] =
-	    g_strdup_printf("%s %s", _(menu_get_prompt(menu)),
-			    sym && !sym_has_value(sym) ? "(NEW)" : "");
-
-	if (opt_mode == OPT_ALL && !menu_is_visible(menu))
-		row[COL_COLOR] = g_strdup("DarkGray");
-	else if (opt_mode == OPT_PROMPT &&
-			menu_has_prompt(menu) && !menu_is_visible(menu))
-		row[COL_COLOR] = g_strdup("DarkGray");
-	else
-		row[COL_COLOR] = g_strdup("Black");
-
-	ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	switch (ptype) {
-	case P_MENU:
-		row[COL_PIXBUF] = (gchar *) xpm_menu;
-		if (view_mode == SINGLE_VIEW)
-			row[COL_PIXVIS] = GINT_TO_POINTER(TRUE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-		break;
-	case P_COMMENT:
-		row[COL_PIXBUF] = (gchar *) xpm_void;
-		row[COL_PIXVIS] = GINT_TO_POINTER(FALSE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-		break;
-	default:
-		row[COL_PIXBUF] = (gchar *) xpm_void;
-		row[COL_PIXVIS] = GINT_TO_POINTER(FALSE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
-		break;
-	}
-
-	if (!sym)
-		return row;
-	row[COL_NAME] = g_strdup(sym->name);
-
-	sym_calc_value(sym);
-	sym->flags &= ~SYMBOL_CHANGED;
-
-	if (sym_is_choice(sym)) {	// parse childs for getting final value
-		struct menu *child;
-		struct symbol *def_sym = sym_get_choice_value(sym);
-		struct menu *def_menu = NULL;
-
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-
-		for (child = menu->list; child; child = child->next) {
-			if (menu_is_visible(child)
-			    && child->sym == def_sym)
-				def_menu = child;
-		}
-
-		if (def_menu)
-			row[COL_VALUE] =
-			    g_strdup(_(menu_get_prompt(def_menu)));
-	}
-	if (sym->flags & SYMBOL_CHOICEVAL)
-		row[COL_BTNRAD] = GINT_TO_POINTER(TRUE);
-
-	stype = sym_get_type(sym);
-	switch (stype) {
-	case S_BOOLEAN:
-		if (GPOINTER_TO_INT(row[COL_PIXVIS]) == FALSE)
-			row[COL_BTNVIS] = GINT_TO_POINTER(TRUE);
-		if (sym_is_choice(sym))
-			break;
-		/* fall through */
-	case S_TRISTATE:
-		val = sym_get_tristate_value(sym);
-		switch (val) {
-		case no:
-			row[COL_NO] = g_strdup("N");
-			row[COL_VALUE] = g_strdup("N");
-			row[COL_BTNACT] = GINT_TO_POINTER(FALSE);
-			row[COL_BTNINC] = GINT_TO_POINTER(FALSE);
-			break;
-		case mod:
-			row[COL_MOD] = g_strdup("M");
-			row[COL_VALUE] = g_strdup("M");
-			row[COL_BTNINC] = GINT_TO_POINTER(TRUE);
-			break;
-		case yes:
-			row[COL_YES] = g_strdup("Y");
-			row[COL_VALUE] = g_strdup("Y");
-			row[COL_BTNACT] = GINT_TO_POINTER(TRUE);
-			row[COL_BTNINC] = GINT_TO_POINTER(FALSE);
-			break;
-		}
-
-		if (val != no && sym_tristate_within_range(sym, no))
-			row[COL_NO] = g_strdup("_");
-		if (val != mod && sym_tristate_within_range(sym, mod))
-			row[COL_MOD] = g_strdup("_");
-		if (val != yes && sym_tristate_within_range(sym, yes))
-			row[COL_YES] = g_strdup("_");
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		def = sym_get_string_value(sym);
-		row[COL_VALUE] = g_strdup(def);
-		row[COL_EDIT] = GINT_TO_POINTER(TRUE);
-		row[COL_BTNVIS] = GINT_TO_POINTER(FALSE);
-		break;
-	}
-
-	return row;
-}
-
-
-/* Set the node content with a row of strings */
-static void set_node(GtkTreeIter * node, struct menu *menu, gchar ** row)
-{
-	GdkColor color;
-	gboolean success;
-	GdkPixbuf *pix;
-
-	pix = gdk_pixbuf_new_from_xpm_data((const char **)
-					   row[COL_PIXBUF]);
-
-	gdk_color_parse(row[COL_COLOR], &color);
-	gdk_colormap_alloc_colors(gdk_colormap_get_system(), &color, 1,
-				  FALSE, FALSE, &success);
-
-	gtk_tree_store_set(tree, node,
-			   COL_OPTION, row[COL_OPTION],
-			   COL_NAME, row[COL_NAME],
-			   COL_NO, row[COL_NO],
-			   COL_MOD, row[COL_MOD],
-			   COL_YES, row[COL_YES],
-			   COL_VALUE, row[COL_VALUE],
-			   COL_MENU, (gpointer) menu,
-			   COL_COLOR, &color,
-			   COL_EDIT, GPOINTER_TO_INT(row[COL_EDIT]),
-			   COL_PIXBUF, pix,
-			   COL_PIXVIS, GPOINTER_TO_INT(row[COL_PIXVIS]),
-			   COL_BTNVIS, GPOINTER_TO_INT(row[COL_BTNVIS]),
-			   COL_BTNACT, GPOINTER_TO_INT(row[COL_BTNACT]),
-			   COL_BTNINC, GPOINTER_TO_INT(row[COL_BTNINC]),
-			   COL_BTNRAD, GPOINTER_TO_INT(row[COL_BTNRAD]),
-			   -1);
-
-	g_object_unref(pix);
-}
-
-
-/* Add a node to the tree */
-static void place_node(struct menu *menu, char **row)
-{
-	GtkTreeIter *parent = parents[indent - 1];
-	GtkTreeIter *node = parents[indent];
-
-	gtk_tree_store_append(tree, node, parent);
-	set_node(node, menu, row);
-}
-
-
-/* Find a node in the GTK+ tree */
-static GtkTreeIter found;
-
-/*
- * Find a menu in the GtkTree starting at parent.
- */
-GtkTreeIter *gtktree_iter_find_node(GtkTreeIter * parent,
-				    struct menu *tofind)
-{
-	GtkTreeIter iter;
-	GtkTreeIter *child = &iter;
-	gboolean valid;
-	GtkTreeIter *ret;
-
-	valid = gtk_tree_model_iter_children(model2, child, parent);
-	while (valid) {
-		struct menu *menu;
-
-		gtk_tree_model_get(model2, child, 6, &menu, -1);
-
-		if (menu == tofind) {
-			memcpy(&found, child, sizeof(GtkTreeIter));
-			return &found;
-		}
-
-		ret = gtktree_iter_find_node(child, tofind);
-		if (ret)
-			return ret;
-
-		valid = gtk_tree_model_iter_next(model2, child);
-	}
-
-	return NULL;
-}
-
-
-/*
- * Update the tree by adding/removing entries
- * Does not change other nodes
- */
-static void update_tree(struct menu *src, GtkTreeIter * dst)
-{
-	struct menu *child1;
-	GtkTreeIter iter, tmp;
-	GtkTreeIter *child2 = &iter;
-	gboolean valid;
-	GtkTreeIter *sibling;
-	struct symbol *sym;
-	struct menu *menu1, *menu2;
-
-	if (src == &rootmenu)
-		indent = 1;
-
-	valid = gtk_tree_model_iter_children(model2, child2, dst);
-	for (child1 = src->list; child1; child1 = child1->next) {
-
-		sym = child1->sym;
-
-	      reparse:
-		menu1 = child1;
-		if (valid)
-			gtk_tree_model_get(model2, child2, COL_MENU,
-					   &menu2, -1);
-		else
-			menu2 = NULL;	// force adding of a first child
-
-#ifdef DEBUG
-		printf("%*c%s | %s\n", indent, ' ',
-		       menu1 ? menu_get_prompt(menu1) : "nil",
-		       menu2 ? menu_get_prompt(menu2) : "nil");
-#endif
-
-		if ((opt_mode == OPT_NORMAL && !menu_is_visible(child1)) ||
-		    (opt_mode == OPT_PROMPT && !menu_has_prompt(child1)) ||
-		    (opt_mode == OPT_ALL    && !menu_get_prompt(child1))) {
-
-			/* remove node */
-			if (gtktree_iter_find_node(dst, menu1) != NULL) {
-				memcpy(&tmp, child2, sizeof(GtkTreeIter));
-				valid = gtk_tree_model_iter_next(model2,
-								 child2);
-				gtk_tree_store_remove(tree2, &tmp);
-				if (!valid)
-					return;		/* next parent */
-				else
-					goto reparse;	/* next child */
-			} else
-				continue;
-		}
-
-		if (menu1 != menu2) {
-			if (gtktree_iter_find_node(dst, menu1) == NULL) {	// add node
-				if (!valid && !menu2)
-					sibling = NULL;
-				else
-					sibling = child2;
-				gtk_tree_store_insert_before(tree2,
-							     child2,
-							     dst, sibling);
-				set_node(child2, menu1, fill_row(menu1));
-				if (menu2 == NULL)
-					valid = TRUE;
-			} else {	// remove node
-				memcpy(&tmp, child2, sizeof(GtkTreeIter));
-				valid = gtk_tree_model_iter_next(model2,
-								 child2);
-				gtk_tree_store_remove(tree2, &tmp);
-				if (!valid)
-					return;	// next parent
-				else
-					goto reparse;	// next child
-			}
-		} else if (sym && (sym->flags & SYMBOL_CHANGED)) {
-			set_node(child2, menu1, fill_row(menu1));
-		}
-
-		indent++;
-		update_tree(child1, child2);
-		indent--;
-
-		valid = gtk_tree_model_iter_next(model2, child2);
-	}
-}
-
-
-/* Display the whole tree (single/split/full view) */
-static void display_tree(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-	enum prop_type ptype;
-
-	if (menu == &rootmenu) {
-		indent = 1;
-		current = &rootmenu;
-	}
-
-	for (child = menu->list; child; child = child->next) {
-		prop = child->prompt;
-		sym = child->sym;
-		ptype = prop ? prop->type : P_UNKNOWN;
-
-		if (sym)
-			sym->flags &= ~SYMBOL_CHANGED;
-
-		if ((view_mode == SPLIT_VIEW)
-		    && !(child->flags & MENU_ROOT) && (tree == tree1))
-			continue;
-
-		if ((view_mode == SPLIT_VIEW) && (child->flags & MENU_ROOT)
-		    && (tree == tree2))
-			continue;
-
-		if ((opt_mode == OPT_NORMAL && menu_is_visible(child)) ||
-		    (opt_mode == OPT_PROMPT && menu_has_prompt(child)) ||
-		    (opt_mode == OPT_ALL    && menu_get_prompt(child)))
-			place_node(child, fill_row(child));
-#ifdef DEBUG
-		printf("%*c%s: ", indent, ' ', menu_get_prompt(child));
-		printf("%s", child->flags & MENU_ROOT ? "rootmenu | " : "");
-		printf("%s", prop_get_type_name(ptype));
-		printf(" | ");
-		if (sym) {
-			printf("%s", sym_type_name(sym->type));
-			printf(" | ");
-			printf("%s", dbg_sym_flags(sym->flags));
-			printf("\n");
-		} else
-			printf("\n");
-#endif
-		if ((view_mode != FULL_VIEW) && (ptype == P_MENU)
-		    && (tree == tree2))
-			continue;
-/*
-                if (((menu != &rootmenu) && !(menu->flags & MENU_ROOT))
-		    || (view_mode == FULL_VIEW)
-		    || (view_mode == SPLIT_VIEW))*/
-
-		/* Change paned position if the view is not in 'split mode' */
-		if (view_mode == SINGLE_VIEW || view_mode == FULL_VIEW) {
-			gtk_paned_set_position(GTK_PANED(hpaned), 0);
-		}
-
-		if (((view_mode == SINGLE_VIEW) && (menu->flags & MENU_ROOT))
-		    || (view_mode == FULL_VIEW)
-		    || (view_mode == SPLIT_VIEW)) {
-			indent++;
-			display_tree(child);
-			indent--;
-		}
-	}
-}
-
-/* Display a part of the tree starting at current node (single/split view) */
-static void display_tree_part(void)
-{
-	if (tree2)
-		gtk_tree_store_clear(tree2);
-	if (view_mode == SINGLE_VIEW)
-		display_tree(current);
-	else if (view_mode == SPLIT_VIEW)
-		display_tree(browsed);
-	gtk_tree_view_expand_all(GTK_TREE_VIEW(tree2_w));
-}
-
-/* Display the list in the left frame (split view) */
-static void display_list(void)
-{
-	if (tree1)
-		gtk_tree_store_clear(tree1);
-
-	tree = tree1;
-	display_tree(&rootmenu);
-	gtk_tree_view_expand_all(GTK_TREE_VIEW(tree1_w));
-	tree = tree2;
-}
-
-void fixup_rootmenu(struct menu *menu)
-{
-	struct menu *child;
-	static int menu_cnt = 0;
-
-	menu->flags |= MENU_ROOT;
-	for (child = menu->list; child; child = child->next) {
-		if (child->prompt && child->prompt->type == P_MENU) {
-			menu_cnt++;
-			fixup_rootmenu(child);
-			menu_cnt--;
-		} else if (!menu_cnt)
-			fixup_rootmenu(child);
-	}
-}
-
-
-/* Main */
-int main(int ac, char *av[])
-{
-	const char *name;
-	char *env;
-	gchar *glade_file;
-
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	bind_textdomain_codeset(PACKAGE, "UTF-8");
-	textdomain(PACKAGE);
-
-	/* GTK stuffs */
-	gtk_set_locale();
-	gtk_init(&ac, &av);
-	glade_init();
-
-	//add_pixmap_directory (PACKAGE_DATA_DIR "/" PACKAGE "/pixmaps");
-	//add_pixmap_directory (PACKAGE_SOURCE_DIR "/pixmaps");
-
-	/* Determine GUI path */
-	env = getenv(SRCTREE);
-	if (env)
-		glade_file = g_strconcat(env, "/support/kconfig/gconf.glade", NULL);
-	else if (av[0][0] == '/')
-		glade_file = g_strconcat(av[0], ".glade", NULL);
-	else
-		glade_file = g_strconcat(g_get_current_dir(), "/", av[0], ".glade", NULL);
-
-	/* Conf stuffs */
-	if (ac > 1 && av[1][0] == '-') {
-		switch (av[1][1]) {
-		case 'a':
-			//showAll = 1;
-			break;
-		case 'h':
-		case '?':
-			printf("%s <config>\n", av[0]);
-			exit(0);
-		}
-		name = av[2];
-	} else
-		name = av[1];
-
-	conf_parse(name);
-	fixup_rootmenu(&rootmenu);
-	conf_read(NULL);
-
-	/* Load the interface and connect signals */
-	init_main_window(glade_file);
-	init_tree_model();
-	init_left_tree();
-	init_right_tree();
-
-	switch (view_mode) {
-	case SINGLE_VIEW:
-		display_tree_part();
-		break;
-	case SPLIT_VIEW:
-		display_list();
-		break;
-	case FULL_VIEW:
-		display_tree(&rootmenu);
-		break;
-	}
-
-	gtk_main();
-
-	return 0;
-}
-
-static void conf_changed(void)
-{
-	bool changed = conf_get_changed();
-	gtk_widget_set_sensitive(save_btn, changed);
-	gtk_widget_set_sensitive(save_menu_item, changed);
-}
diff --git a/support/kconfig/gconf.glade b/support/kconfig/gconf.glade
deleted file mode 100644
index 03e97d7..0000000
--- a/support/kconfig/gconf.glade
+++ /dev/null
@@ -1,661 +0,0 @@
-<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
-
-<glade-interface>
-
-<widget class="GtkWindow" id="window1">
-  <property name="visible">True</property>
-  <property name="title" translatable="yes">Gtk Unikraft Configurator</property>
-  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-  <property name="window_position">GTK_WIN_POS_NONE</property>
-  <property name="modal">False</property>
-  <property name="default_width">640</property>
-  <property name="default_height">480</property>
-  <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="decorated">True</property>
-  <property name="skip_taskbar_hint">False</property>
-  <property name="skip_pager_hint">False</property>
-  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <signal name="destroy" handler="on_window1_destroy" object="window1"/>
-  <signal name="size_request" handler="on_window1_size_request" object="vpaned1" last_modification_time="Fri, 11 Jan 2002 16:17:11 GMT"/>
-  <signal name="delete_event" handler="on_window1_delete_event" object="window1" last_modification_time="Sun, 09 Mar 2003 19:42:46 GMT"/>
-
-  <child>
-    <widget class="GtkVBox" id="vbox1">
-      <property name="visible">True</property>
-      <property name="homogeneous">False</property>
-      <property name="spacing">0</property>
-
-      <child>
-	<widget class="GtkMenuBar" id="menubar1">
-	  <property name="visible">True</property>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="file1">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_File</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="file1_menu">
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="load1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Load a config file</property>
-		      <property name="label" translatable="yes">_Load</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_load1_activate"/>
-		      <accelerator key="L" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image39">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-open</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="save1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Save the config in .config</property>
-		      <property name="label" translatable="yes">_Save</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_save_activate"/>
-		      <accelerator key="S" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image40">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-save</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="save_as1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Save the config in a file</property>
-		      <property name="label" translatable="yes">Save _as</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_save_as1_activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image41">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-save-as</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkSeparatorMenuItem" id="separator1">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="quit1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_Quit</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_quit1_activate"/>
-		      <accelerator key="Q" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image42">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-quit</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="options1">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_Options</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="options1_menu">
-
-		  <child>
-		    <widget class="GtkCheckMenuItem" id="show_name1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show name</property>
-		      <property name="label" translatable="yes">Show _name</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <signal name="activate" handler="on_show_name1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkCheckMenuItem" id="show_range1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show range (Y/M/N)</property>
-		      <property name="label" translatable="yes">Show _range</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <signal name="activate" handler="on_show_range1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkCheckMenuItem" id="show_data1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show value of the option</property>
-		      <property name="label" translatable="yes">Show _data</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <signal name="activate" handler="on_show_data1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkSeparatorMenuItem" id="separator2">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkRadioMenuItem" id="set_option_mode1">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show normal options</property>
-		      <property name="label" translatable="yes">Show normal options</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">True</property>
-		      <signal name="activate" handler="on_set_option_mode1_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkRadioMenuItem" id="set_option_mode2">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show all options</property>
-		      <property name="label" translatable="yes">Show all _options</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <property name="group">set_option_mode1</property>
-		      <signal name="activate" handler="on_set_option_mode2_activate"/>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkRadioMenuItem" id="set_option_mode3">
-		      <property name="visible">True</property>
-		      <property name="tooltip" translatable="yes">Show all options with prompts</property>
-		      <property name="label" translatable="yes">Show all prompt options</property>
-		      <property name="use_underline">True</property>
-		      <property name="active">False</property>
-		      <property name="group">set_option_mode1</property>
-		      <signal name="activate" handler="on_set_option_mode3_activate"/>
-		    </widget>
-		  </child>
-
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkMenuItem" id="help1">
-	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">_Help</property>
-	      <property name="use_underline">True</property>
-
-	      <child>
-		<widget class="GtkMenu" id="help1_menu">
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="introduction1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_Introduction</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_introduction1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/>
-		      <accelerator key="I" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image43">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-dialog-question</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="about1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_About</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_about1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/>
-		      <accelerator key="A" modifiers="GDK_CONTROL_MASK" signal="activate"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image44">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-properties</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-
-		  <child>
-		    <widget class="GtkImageMenuItem" id="license1">
-		      <property name="visible">True</property>
-		      <property name="label" translatable="yes">_License</property>
-		      <property name="use_underline">True</property>
-		      <signal name="activate" handler="on_license1_activate" last_modification_time="Fri, 15 Nov 2002 20:26:30 GMT"/>
-
-		      <child internal-child="image">
-			<widget class="GtkImage" id="image45">
-			  <property name="visible">True</property>
-			  <property name="stock">gtk-justify-fill</property>
-			  <property name="icon_size">1</property>
-			  <property name="xalign">0.5</property>
-			  <property name="yalign">0.5</property>
-			  <property name="xpad">0</property>
-			  <property name="ypad">0</property>
-			</widget>
-		      </child>
-		    </widget>
-		  </child>
-		</widget>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">False</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkHandleBox" id="handlebox1">
-	  <property name="visible">True</property>
-	  <property name="shadow_type">GTK_SHADOW_OUT</property>
-	  <property name="handle_position">GTK_POS_LEFT</property>
-	  <property name="snap_edge">GTK_POS_TOP</property>
-
-	  <child>
-	    <widget class="GtkToolbar" id="toolbar1">
-	      <property name="visible">True</property>
-	      <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
-	      <property name="toolbar_style">GTK_TOOLBAR_BOTH</property>
-	      <property name="tooltips">True</property>
-	      <property name="show_arrow">True</property>
-
-	      <child>
-		<widget class="GtkToolButton" id="button1">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Goes up of one level (single view)</property>
-		  <property name="label" translatable="yes">Back</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-undo</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_back_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolItem" id="toolitem1">
-		  <property name="visible">True</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-
-		  <child>
-		    <widget class="GtkVSeparator" id="vseparator1">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button2">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Load a config file</property>
-		  <property name="label" translatable="yes">Load</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-open</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_load_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button3">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Save a config file</property>
-		  <property name="label" translatable="yes">Save</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-save</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_save_activate"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolItem" id="toolitem2">
-		  <property name="visible">True</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-
-		  <child>
-		    <widget class="GtkVSeparator" id="vseparator2">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button4">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Single view</property>
-		  <property name="label" translatable="yes">Single</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-missing-image</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_single_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:39 GMT"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button5">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Split view</property>
-		  <property name="label" translatable="yes">Split</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-missing-image</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_split_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:45 GMT"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button6">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Full view</property>
-		  <property name="label" translatable="yes">Full</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-missing-image</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_full_clicked" last_modification_time="Sun, 12 Jan 2003 14:28:50 GMT"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolItem" id="toolitem3">
-		  <property name="visible">True</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-
-		  <child>
-		    <widget class="GtkVSeparator" id="vseparator3">
-		      <property name="visible">True</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button7">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Collapse the whole tree in the right frame</property>
-		  <property name="label" translatable="yes">Collapse</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-remove</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_collapse_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkToolButton" id="button8">
-		  <property name="visible">True</property>
-		  <property name="tooltip" translatable="yes">Expand the whole tree in the right frame</property>
-		  <property name="label" translatable="yes">Expand</property>
-		  <property name="use_underline">True</property>
-		  <property name="stock_id">gtk-add</property>
-		  <property name="visible_horizontal">True</property>
-		  <property name="visible_vertical">True</property>
-		  <property name="is_important">False</property>
-		  <signal name="clicked" handler="on_expand_clicked"/>
-		</widget>
-		<packing>
-		  <property name="expand">False</property>
-		  <property name="homogeneous">True</property>
-		</packing>
-	      </child>
-	    </widget>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">False</property>
-	  <property name="fill">False</property>
-	</packing>
-      </child>
-
-      <child>
-	<widget class="GtkHPaned" id="hpaned1">
-	  <property name="width_request">1</property>
-	  <property name="visible">True</property>
-	  <property name="can_focus">True</property>
-	  <property name="position">0</property>
-
-	  <child>
-	    <widget class="GtkScrolledWindow" id="scrolledwindow1">
-	      <property name="visible">True</property>
-	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-	      <property name="shadow_type">GTK_SHADOW_IN</property>
-	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-	      <child>
-		<widget class="GtkTreeView" id="treeview1">
-		  <property name="visible">True</property>
-		  <property name="can_focus">True</property>
-		  <property name="headers_visible">True</property>
-		  <property name="rules_hint">False</property>
-		  <property name="reorderable">False</property>
-		  <property name="enable_search">False</property>
-		  <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:58:22 GMT"/>
-		  <signal name="button_press_event" handler="on_treeview1_button_press_event" last_modification_time="Sun, 12 Jan 2003 16:03:52 GMT"/>
-		  <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 16:11:44 GMT"/>
-		</widget>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="shrink">True</property>
-	      <property name="resize">False</property>
-	    </packing>
-	  </child>
-
-	  <child>
-	    <widget class="GtkVPaned" id="vpaned1">
-	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="position">0</property>
-
-	      <child>
-		<widget class="GtkScrolledWindow" id="scrolledwindow2">
-		  <property name="visible">True</property>
-		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="shadow_type">GTK_SHADOW_IN</property>
-		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-		  <child>
-		    <widget class="GtkTreeView" id="treeview2">
-		      <property name="visible">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="has_focus">True</property>
-		      <property name="headers_visible">True</property>
-		      <property name="rules_hint">False</property>
-		      <property name="reorderable">False</property>
-		      <property name="enable_search">False</property>
-		      <signal name="cursor_changed" handler="on_treeview2_cursor_changed" last_modification_time="Sun, 12 Jan 2003 15:57:55 GMT"/>
-		      <signal name="button_press_event" handler="on_treeview2_button_press_event" last_modification_time="Sun, 12 Jan 2003 15:57:58 GMT"/>
-		      <signal name="key_press_event" handler="on_treeview2_key_press_event" last_modification_time="Sun, 12 Jan 2003 15:58:01 GMT"/>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="shrink">True</property>
-		  <property name="resize">False</property>
-		</packing>
-	      </child>
-
-	      <child>
-		<widget class="GtkScrolledWindow" id="scrolledwindow3">
-		  <property name="visible">True</property>
-		  <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-		  <property name="shadow_type">GTK_SHADOW_IN</property>
-		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-		  <child>
-		    <widget class="GtkTextView" id="textview3">
-		      <property name="visible">True</property>
-		      <property name="can_focus">True</property>
-		      <property name="editable">False</property>
-		      <property name="overwrite">False</property>
-		      <property name="accepts_tab">True</property>
-		      <property name="justification">GTK_JUSTIFY_LEFT</property>
-		      <property name="wrap_mode">GTK_WRAP_WORD</property>
-		      <property name="cursor_visible">True</property>
-		      <property name="pixels_above_lines">0</property>
-		      <property name="pixels_below_lines">0</property>
-		      <property name="pixels_inside_wrap">0</property>
-		      <property name="left_margin">0</property>
-		      <property name="right_margin">0</property>
-		      <property name="indent">0</property>
-		      <property name="text" translatable="yes">Sorry, no help available for this option yet.</property>
-		    </widget>
-		  </child>
-		</widget>
-		<packing>
-		  <property name="shrink">True</property>
-		  <property name="resize">True</property>
-		</packing>
-	      </child>
-	    </widget>
-	    <packing>
-	      <property name="shrink">True</property>
-	      <property name="resize">True</property>
-	    </packing>
-	  </child>
-	</widget>
-	<packing>
-	  <property name="padding">0</property>
-	  <property name="expand">True</property>
-	  <property name="fill">True</property>
-	</packing>
-      </child>
-    </widget>
-  </child>
-</widget>
-
-</glade-interface>
diff --git a/support/kconfig/images.c b/support/kconfig/images.c
deleted file mode 100644
index d4f84bd..0000000
--- a/support/kconfig/images.c
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-static const char *xpm_load[] = {
-"22 22 5 1",
-". c None",
-"# c #000000",
-"c c #838100",
-"a c #ffff00",
-"b c #ffffff",
-"......................",
-"......................",
-"......................",
-"............####....#.",
-"...........#....##.##.",
-"..................###.",
-".................####.",
-".####...........#####.",
-"#abab##########.......",
-"#babababababab#.......",
-"#ababababababa#.......",
-"#babababababab#.......",
-"#ababab###############",
-"#babab##cccccccccccc##",
-"#abab##cccccccccccc##.",
-"#bab##cccccccccccc##..",
-"#ab##cccccccccccc##...",
-"#b##cccccccccccc##....",
-"###cccccccccccc##.....",
-"##cccccccccccc##......",
-"###############.......",
-"......................"};
-
-static const char *xpm_save[] = {
-"22 22 5 1",
-". c None",
-"# c #000000",
-"a c #838100",
-"b c #c5c2c5",
-"c c #cdb6d5",
-"......................",
-".####################.",
-".#aa#bbbbbbbbbbbb#bb#.",
-".#aa#bbbbbbbbbbbb#bb#.",
-".#aa#bbbbbbbbbcbb####.",
-".#aa#bbbccbbbbbbb#aa#.",
-".#aa#bbbccbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aa#bbbbbbbbbbbb#aa#.",
-".#aaa############aaa#.",
-".#aaaaaaaaaaaaaaaaaa#.",
-".#aaaaaaaaaaaaaaaaaa#.",
-".#aaa#############aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-".#aaa#########bbb#aa#.",
-"..##################..",
-"......................"};
-
-static const char *xpm_back[] = {
-"22 22 3 1",
-". c None",
-"# c #000083",
-"a c #838183",
-"......................",
-"......................",
-"......................",
-"......................",
-"......................",
-"...........######a....",
-"..#......##########...",
-"..##...####......##a..",
-"..###.###.........##..",
-"..######..........##..",
-"..#####...........##..",
-"..######..........##..",
-"..#######.........##..",
-"..########.......##a..",
-"...............a###...",
-"...............###....",
-"......................",
-"......................",
-"......................",
-"......................",
-"......................",
-"......................"};
-
-static const char *xpm_tree_view[] = {
-"22 22 2 1",
-". c None",
-"# c #000000",
-"......................",
-"......................",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......########........",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......########........",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......#...............",
-"......########........",
-"......................",
-"......................"};
-
-static const char *xpm_single_view[] = {
-"22 22 2 1",
-". c None",
-"# c #000000",
-"......................",
-"......................",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"..........#...........",
-"......................",
-"......................"};
-
-static const char *xpm_split_view[] = {
-"22 22 2 1",
-". c None",
-"# c #000000",
-"......................",
-"......................",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......#......#........",
-"......................",
-"......................"};
-
-static const char *xpm_symbol_no[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_symbol_mod[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .        . ",
-" .   ..   . ",
-" .  ....  . ",
-" .  ....  . ",
-" .   ..   . ",
-" .        . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_symbol_yes[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .        . ",
-" .      . . ",
-" .     .. . ",
-" . .  ..  . ",
-" . ....   . ",
-" .  ..    . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_choice_no[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-"    ....    ",
-"  ..    ..  ",
-"  .      .  ",
-" .        . ",
-" .        . ",
-" .        . ",
-" .        . ",
-"  .      .  ",
-"  ..    ..  ",
-"    ....    ",
-"            "};
-
-static const char *xpm_choice_yes[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-"    ....    ",
-"  ..    ..  ",
-"  .      .  ",
-" .   ..   . ",
-" .  ....  . ",
-" .  ....  . ",
-" .   ..   . ",
-"  .      .  ",
-"  ..    ..  ",
-"    ....    ",
-"            "};
-
-static const char *xpm_menu[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" . ..     . ",
-" . ....   . ",
-" . ...... . ",
-" . ...... . ",
-" . ....   . ",
-" . ..     . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_menu_inv[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .......... ",
-" ..  ...... ",
-" ..    .... ",
-" ..      .. ",
-" ..      .. ",
-" ..    .... ",
-" ..  ...... ",
-" .......... ",
-" .......... ",
-"            "};
-
-static const char *xpm_menuback[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-" .......... ",
-" .        . ",
-" .     .. . ",
-" .   .... . ",
-" . ...... . ",
-" . ...... . ",
-" .   .... . ",
-" .     .. . ",
-" .        . ",
-" .......... ",
-"            "};
-
-static const char *xpm_void[] = {
-"12 12 2 1",
-"  c white",
-". c black",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            ",
-"            "};
diff --git a/support/kconfig/kxgettext.c b/support/kconfig/kxgettext.c
deleted file mode 100644
index 2858738..0000000
--- a/support/kconfig/kxgettext.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Arnaldo Carvalho de Melo <acme@conectiva.com.br>, 2005
- *
- * Released under the terms of the GNU GPL v2.0
- */
-
-#include <stdlib.h>
-#include <string.h>
-
-#include "lkc.h"
-
-static char *escape(const char* text, char *bf, int len)
-{
-	char *bfp = bf;
-	int multiline = strchr(text, '\n') != NULL;
-	int eol = 0;
-	int textlen = strlen(text);
-
-	if ((textlen > 0) && (text[textlen-1] == '\n'))
-		eol = 1;
-
-	*bfp++ = '"';
-	--len;
-
-	if (multiline) {
-		*bfp++ = '"';
-		*bfp++ = '\n';
-		*bfp++ = '"';
-		len -= 3;
-	}
-
-	while (*text != '\0' && len > 1) {
-		if (*text == '"')
-			*bfp++ = '\\';
-		else if (*text == '\n') {
-			*bfp++ = '\\';
-			*bfp++ = 'n';
-			*bfp++ = '"';
-			*bfp++ = '\n';
-			*bfp++ = '"';
-			len -= 5;
-			++text;
-			goto next;
-		}
-		else if (*text == '\\') {
-			*bfp++ = '\\';
-			len--;
-		}
-		*bfp++ = *text++;
-next:
-		--len;
-	}
-
-	if (multiline && eol)
-		bfp -= 3;
-
-	*bfp++ = '"';
-	*bfp = '\0';
-
-	return bf;
-}
-
-struct file_line {
-	struct file_line *next;
-	const char *file;
-	int lineno;
-};
-
-static struct file_line *file_line__new(const char *file, int lineno)
-{
-	struct file_line *self = malloc(sizeof(*self));
-
-	if (self == NULL)
-		goto out;
-
-	self->file   = file;
-	self->lineno = lineno;
-	self->next   = NULL;
-out:
-	return self;
-}
-
-struct message {
-	const char	 *msg;
-	const char	 *option;
-	struct message	 *next;
-	struct file_line *files;
-};
-
-static struct message *message__list;
-
-static struct message *message__new(const char *msg, char *option,
-				    const char *file, int lineno)
-{
-	struct message *self = malloc(sizeof(*self));
-
-	if (self == NULL)
-		goto out;
-
-	self->files = file_line__new(file, lineno);
-	if (self->files == NULL)
-		goto out_fail;
-
-	self->msg = strdup(msg);
-	if (self->msg == NULL)
-		goto out_fail_msg;
-
-	self->option = option;
-	self->next = NULL;
-out:
-	return self;
-out_fail_msg:
-	free(self->files);
-out_fail:
-	free(self);
-	self = NULL;
-	goto out;
-}
-
-static struct message *mesage__find(const char *msg)
-{
-	struct message *m = message__list;
-
-	while (m != NULL) {
-		if (strcmp(m->msg, msg) == 0)
-			break;
-		m = m->next;
-	}
-
-	return m;
-}
-
-static int message__add_file_line(struct message *self, const char *file,
-				  int lineno)
-{
-	int rc = -1;
-	struct file_line *fl = file_line__new(file, lineno);
-
-	if (fl == NULL)
-		goto out;
-
-	fl->next    = self->files;
-	self->files = fl;
-	rc = 0;
-out:
-	return rc;
-}
-
-static int message__add(const char *msg, char *option, const char *file,
-			int lineno)
-{
-	int rc = 0;
-	char bf[16384];
-	char *escaped = escape(msg, bf, sizeof(bf));
-	struct message *m = mesage__find(escaped);
-
-	if (m != NULL)
-		rc = message__add_file_line(m, file, lineno);
-	else {
-		m = message__new(escaped, option, file, lineno);
-
-		if (m != NULL) {
-			m->next	      = message__list;
-			message__list = m;
-		} else
-			rc = -1;
-	}
-	return rc;
-}
-
-static void menu_build_message_list(struct menu *menu)
-{
-	struct menu *child;
-
-	message__add(menu_get_prompt(menu), NULL,
-		     menu->file == NULL ? "Root Menu" : menu->file->name,
-		     menu->lineno);
-
-	if (menu->sym != NULL && menu_has_help(menu))
-		message__add(menu_get_help(menu), menu->sym->name,
-			     menu->file == NULL ? "Root Menu" : menu->file->name,
-			     menu->lineno);
-
-	for (child = menu->list; child != NULL; child = child->next)
-		if (child->prompt != NULL)
-			menu_build_message_list(child);
-}
-
-static void message__print_file_lineno(struct message *self)
-{
-	struct file_line *fl = self->files;
-
-	putchar('\n');
-	if (self->option != NULL)
-		printf("# %s:00000\n", self->option);
-
-	printf("#: %s:%d", fl->file, fl->lineno);
-	fl = fl->next;
-
-	while (fl != NULL) {
-		printf(", %s:%d", fl->file, fl->lineno);
-		fl = fl->next;
-	}
-
-	putchar('\n');
-}
-
-static void message__print_gettext_msgid_msgstr(struct message *self)
-{
-	message__print_file_lineno(self);
-
-	printf("msgid %s\n"
-	       "msgstr \"\"\n", self->msg);
-}
-
-static void menu__xgettext(void)
-{
-	struct message *m = message__list;
-
-	while (m != NULL) {
-		/* skip empty lines ("") */
-		if (strlen(m->msg) > sizeof("\"\""))
-			message__print_gettext_msgid_msgstr(m);
-		m = m->next;
-	}
-}
-
-int main(int ac, char **av)
-{
-	conf_parse(av[1]);
-
-	menu_build_message_list(menu_get_root_menu(NULL));
-	menu__xgettext();
-	return 0;
-}
diff --git a/support/kconfig/list.h b/support/kconfig/list.h
deleted file mode 100644
index 685d80e..0000000
--- a/support/kconfig/list.h
+++ /dev/null
@@ -1,131 +0,0 @@
-#ifndef LIST_H
-#define LIST_H
-
-/*
- * Copied from include/linux/...
- */
-
-#undef offsetof
-#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
-
-/**
- * container_of - cast a member of a structure out to the containing structure
- * @ptr:        the pointer to the member.
- * @type:       the type of the container struct this is embedded in.
- * @member:     the name of the member within the struct.
- *
- */
-#define container_of(ptr, type, member) ({                      \
-	const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
-	(type *)( (char *)__mptr - offsetof(type,member) );})
-
-
-struct list_head {
-	struct list_head *next, *prev;
-};
-
-
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
-#define LIST_HEAD(name) \
-	struct list_head name = LIST_HEAD_INIT(name)
-
-/**
- * list_entry - get the struct for this entry
- * @ptr:	the &struct list_head pointer.
- * @type:	the type of the struct this is embedded in.
- * @member:	the name of the list_struct within the struct.
- */
-#define list_entry(ptr, type, member) \
-	container_of(ptr, type, member)
-
-/**
- * list_for_each_entry	-	iterate over list of given type
- * @pos:	the type * to use as a loop cursor.
- * @head:	the head for your list.
- * @member:	the name of the list_struct within the struct.
- */
-#define list_for_each_entry(pos, head, member)				\
-	for (pos = list_entry((head)->next, typeof(*pos), member);	\
-	     &pos->member != (head); 	\
-	     pos = list_entry(pos->member.next, typeof(*pos), member))
-
-/**
- * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @pos:	the type * to use as a loop cursor.
- * @n:		another type * to use as temporary storage
- * @head:	the head for your list.
- * @member:	the name of the list_struct within the struct.
- */
-#define list_for_each_entry_safe(pos, n, head, member)			\
-	for (pos = list_entry((head)->next, typeof(*pos), member),	\
-		n = list_entry(pos->member.next, typeof(*pos), member);	\
-	     &pos->member != (head);					\
-	     pos = n, n = list_entry(n->member.next, typeof(*n), member))
-
-/**
- * list_empty - tests whether a list is empty
- * @head: the list to test.
- */
-static inline int list_empty(const struct list_head *head)
-{
-	return head->next == head;
-}
-
-/*
- * Insert a new entry between two known consecutive entries.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_add(struct list_head *_new,
-			      struct list_head *prev,
-			      struct list_head *next)
-{
-	next->prev = _new;
-	_new->next = next;
-	_new->prev = prev;
-	prev->next = _new;
-}
-
-/**
- * list_add_tail - add a new entry
- * @new: new entry to be added
- * @head: list head to add it before
- *
- * Insert a new entry before the specified head.
- * This is useful for implementing queues.
- */
-static inline void list_add_tail(struct list_head *_new, struct list_head *head)
-{
-	__list_add(_new, head->prev, head);
-}
-
-/*
- * Delete a list entry by making the prev/next entries
- * point to each other.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static inline void __list_del(struct list_head *prev, struct list_head *next)
-{
-	next->prev = prev;
-	prev->next = next;
-}
-
-#define LIST_POISON1  ((void *) 0x00100100)
-#define LIST_POISON2  ((void *) 0x00200200)
-/**
- * list_del - deletes entry from list.
- * @entry: the element to delete from the list.
- * Note: list_empty() on entry does not return true after this, the entry is
- * in an undefined state.
- */
-static inline void list_del(struct list_head *entry)
-{
-	__list_del(entry->prev, entry->next);
-	entry->next = (struct list_head*)LIST_POISON1;
-	entry->prev = (struct list_head*)LIST_POISON2;
-}
-#endif
diff --git a/support/kconfig/lkc.h b/support/kconfig/lkc.h
deleted file mode 100644
index 09f4edf..0000000
--- a/support/kconfig/lkc.h
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#ifndef LKC_H
-#define LKC_H
-
-#include "expr.h"
-
-#ifndef KBUILD_NO_NLS
-# include <libintl.h>
-#else
-static inline const char *gettext(const char *txt) { return txt; }
-static inline void textdomain(const char *domainname) {}
-static inline void bindtextdomain(const char *name, const char *dir) {}
-static inline char *bind_textdomain_codeset(const char *dn, char *c) { return c; }
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define P(name,type,arg)	extern type name arg
-#include "lkc_proto.h"
-#undef P
-
-#define SRCTREE "srctree"
-
-#ifndef PACKAGE
-#define PACKAGE "linux"
-#endif
-
-#define LOCALEDIR "/usr/share/locale"
-
-#define _(text) gettext(text)
-#define N_(text) (text)
-
-#ifndef CONFIG_
-#define CONFIG_ "CONFIG_"
-#endif
-static inline const char *CONFIG_prefix(void)
-{
-	return getenv( "CONFIG_" ) ?: CONFIG_;
-}
-#undef CONFIG_
-#define CONFIG_ CONFIG_prefix()
-
-#define TF_COMMAND	0x0001
-#define TF_PARAM	0x0002
-#define TF_OPTION	0x0004
-
-enum conf_def_mode {
-	def_default,
-	def_yes,
-	def_mod,
-	def_no,
-	def_random
-};
-
-#define T_OPT_MODULES		1
-#define T_OPT_DEFCONFIG_LIST	2
-#define T_OPT_ENV		3
-
-struct kconf_id {
-	int name;
-	int token;
-	unsigned int flags;
-	enum symbol_type stype;
-};
-
-extern int zconfdebug;
-
-int zconfparse(void);
-void zconfdump(FILE *out);
-void zconf_starthelp(void);
-FILE *zconf_fopen(const char *name);
-void zconf_initscan(const char *name);
-void zconf_nextfile(const char *name);
-int zconf_lineno(void);
-const char *zconf_curname(void);
-
-/* confdata.c */
-const char *conf_get_configname(void);
-const char *conf_get_autoconfig_name(void);
-char *conf_get_default_confname(void);
-void sym_set_change_count(int count);
-void sym_add_change_count(int count);
-bool conf_set_all_new_symbols(enum conf_def_mode mode);
-void set_all_choice_values(struct symbol *csym);
-
-struct conf_printer {
-	void (*print_symbol)(FILE *, struct symbol *, const char *, void *);
-	void (*print_comment)(FILE *, const char *, void *);
-};
-
-/* confdata.c and expr.c */
-static inline void xfwrite(const void *str, size_t len, size_t count, FILE *out)
-{
-	assert(len != 0);
-
-	if (fwrite(str, len, count, out) != count)
-		fprintf(stderr, "Error in writing or end of file.\n");
-}
-
-/* menu.c */
-void _menu_init(void);
-void menu_warn(struct menu *menu, const char *fmt, ...);
-struct menu *menu_add_menu(void);
-void menu_end_menu(void);
-void menu_add_entry(struct symbol *sym);
-void menu_end_entry(void);
-void menu_add_dep(struct expr *dep);
-void menu_add_visibility(struct expr *dep);
-struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep);
-struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep);
-void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep);
-void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep);
-void menu_add_option(int token, char *arg);
-void menu_finalize(struct menu *parent);
-void menu_set_type(int type);
-
-/* util.c */
-struct file *file_lookup(const char *name);
-int file_write_dep(const char *name);
-void *xmalloc(size_t size);
-void *xcalloc(size_t nmemb, size_t size);
-
-struct gstr {
-	size_t len;
-	char  *s;
-	/*
-	* when max_width is not zero long lines in string s (if any) get
-	* wrapped not to exceed the max_width value
-	*/
-	int max_width;
-};
-struct gstr str_new(void);
-struct gstr str_assign(const char *s);
-void str_free(struct gstr *gs);
-void str_append(struct gstr *gs, const char *s);
-void str_printf(struct gstr *gs, const char *fmt, ...);
-const char *str_get(struct gstr *gs);
-
-/* symbol.c */
-extern struct expr *sym_env_list;
-
-void sym_init(void);
-void sym_clear_all_valid(void);
-void sym_set_all_changed(void);
-void sym_set_changed(struct symbol *sym);
-struct symbol *sym_choice_default(struct symbol *sym);
-const char *sym_get_string_default(struct symbol *sym);
-struct symbol *sym_check_deps(struct symbol *sym);
-struct property *prop_alloc(enum prop_type type, struct symbol *sym);
-struct symbol *prop_get_symbol(struct property *prop);
-struct property *sym_get_env_prop(struct symbol *sym);
-
-static inline tristate sym_get_tristate_value(struct symbol *sym)
-{
-	return sym->curr.tri;
-}
-
-
-static inline struct symbol *sym_get_choice_value(struct symbol *sym)
-{
-	return (struct symbol *)sym->curr.val;
-}
-
-static inline bool sym_set_choice_value(struct symbol *ch, struct symbol *chval)
-{
-	return sym_set_tristate_value(chval, yes);
-}
-
-static inline bool sym_is_choice(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_CHOICE ? true : false;
-}
-
-static inline bool sym_is_choice_value(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_CHOICEVAL ? true : false;
-}
-
-static inline bool sym_is_optional(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_OPTIONAL ? true : false;
-}
-
-static inline bool sym_has_value(struct symbol *sym)
-{
-	return sym->flags & SYMBOL_DEF_USER ? true : false;
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* LKC_H */
diff --git a/support/kconfig/lkc_proto.h b/support/kconfig/lkc_proto.h
deleted file mode 100644
index ecdb965..0000000
--- a/support/kconfig/lkc_proto.h
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <stdarg.h>
-
-/* confdata.c */
-P(conf_parse,void,(const char *name));
-P(conf_read,int,(const char *name));
-P(conf_read_simple,int,(const char *name, int));
-P(conf_write_defconfig,int,(const char *name));
-P(conf_write,int,(const char *name));
-P(conf_write_autoconf,int,(void));
-P(conf_get_changed,bool,(void));
-P(conf_set_changed_callback, void,(void (*fn)(void)));
-P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));
-
-/* menu.c */
-P(rootmenu,struct menu,);
-
-P(menu_is_empty, bool, (struct menu *menu));
-P(menu_is_visible, bool, (struct menu *menu));
-P(menu_has_prompt, bool, (struct menu *menu));
-P(menu_get_prompt,const char *,(struct menu *menu));
-P(menu_get_root_menu,struct menu *,(struct menu *menu));
-P(menu_get_parent_menu,struct menu *,(struct menu *menu));
-P(menu_has_help,bool,(struct menu *menu));
-P(menu_get_help,const char *,(struct menu *menu));
-P(get_symbol_str, void, (struct gstr *r, struct symbol *sym, struct list_head
-			 *head));
-P(get_relations_str, struct gstr, (struct symbol **sym_arr, struct list_head
-				   *head));
-P(menu_get_ext_help,void,(struct menu *menu, struct gstr *help));
-
-/* symbol.c */
-P(symbol_hash,struct symbol *,[SYMBOL_HASHSIZE]);
-
-P(sym_lookup,struct symbol *,(const char *name, int flags));
-P(sym_find,struct symbol *,(const char *name));
-P(sym_expand_string_value,const char *,(const char *in));
-P(sym_escape_string_value, const char *,(const char *in));
-P(sym_re_search,struct symbol **,(const char *pattern));
-P(sym_type_name,const char *,(enum symbol_type type));
-P(sym_calc_value,void,(struct symbol *sym));
-P(sym_get_type,enum symbol_type,(struct symbol *sym));
-P(sym_tristate_within_range,bool,(struct symbol *sym,tristate tri));
-P(sym_set_tristate_value,bool,(struct symbol *sym,tristate tri));
-P(sym_toggle_tristate_value,tristate,(struct symbol *sym));
-P(sym_string_valid,bool,(struct symbol *sym, const char *newval));
-P(sym_string_within_range,bool,(struct symbol *sym, const char *str));
-P(sym_set_string_value,bool,(struct symbol *sym, const char *newval));
-P(sym_is_changable,bool,(struct symbol *sym));
-P(sym_get_choice_prop,struct property *,(struct symbol *sym));
-P(sym_get_default_prop,struct property *,(struct symbol *sym));
-P(sym_get_string_value,const char *,(struct symbol *sym));
-
-P(prop_get_type_name,const char *,(enum prop_type type));
-
-/* expr.c */
-P(expr_compare_type,int,(enum expr_type t1, enum expr_type t2));
-P(expr_print,void,(struct expr *e, void (*fn)(void *, struct symbol *, const char *), void *data, int prevtoken));
diff --git a/support/kconfig/lxdialog/.gitignore b/support/kconfig/lxdialog/.gitignore
deleted file mode 100644
index 90b08ff..0000000
--- a/support/kconfig/lxdialog/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-#
-# Generated files
-#
-lxdialog
diff --git a/support/kconfig/lxdialog/BIG.FAT.WARNING b/support/kconfig/lxdialog/BIG.FAT.WARNING
deleted file mode 100644
index a8999d8..0000000
--- a/support/kconfig/lxdialog/BIG.FAT.WARNING
+++ /dev/null
@@ -1,4 +0,0 @@
-This is NOT the official version of dialog.  This version has been
-significantly modified from the original.  It is for use by the Linux
-kernel configuration script.  Please do not bother Savio Lam with 
-questions about this program.
diff --git a/support/kconfig/lxdialog/check-lxdialog.sh b/support/kconfig/lxdialog/check-lxdialog.sh
deleted file mode 100755
index 3ce0a23..0000000
--- a/support/kconfig/lxdialog/check-lxdialog.sh
+++ /dev/null
@@ -1,91 +0,0 @@
-#!/bin/sh
-# Check ncurses compatibility
-
-# What library to link
-ldflags()
-{
-	pkg-config --libs ncursesw 2>/dev/null && exit
-	pkg-config --libs ncurses 2>/dev/null && exit
-	for ext in so a dll.a dylib ; do
-		for lib in ncursesw ncurses curses ; do
-			$cc -print-file-name=lib${lib}.${ext} | grep -q /
-			if [ $? -eq 0 ]; then
-				echo "-l${lib}"
-				exit
-			fi
-		done
-	done
-	exit 1
-}
-
-# Where is ncurses.h?
-ccflags()
-{
-	if pkg-config --cflags ncursesw 2>/dev/null; then
-		echo '-DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1'
-	elif pkg-config --cflags ncurses 2>/dev/null; then
-		echo '-DCURSES_LOC="<ncurses.h>"'
-	elif [ -f /usr/include/ncursesw/curses.h ]; then
-		echo '-I/usr/include/ncursesw -DCURSES_LOC="<curses.h>"'
-		echo ' -DNCURSES_WIDECHAR=1'
-	elif [ -f /usr/include/ncurses/ncurses.h ]; then
-		echo '-I/usr/include/ncurses -DCURSES_LOC="<ncurses.h>"'
-	elif [ -f /usr/include/ncurses/curses.h ]; then
-		echo '-I/usr/include/ncurses -DCURSES_LOC="<curses.h>"'
-	elif [ -f /usr/include/ncurses.h ]; then
-		echo '-DCURSES_LOC="<ncurses.h>"'
-	else
-		echo '-DCURSES_LOC="<curses.h>"'
-	fi
-}
-
-# Temp file, try to clean up after us
-tmp=$(mktemp)
-trap "rm -f $tmp" 0 1 2 3 15
-
-# Check if we can link to ncurses
-check() {
-        $cc -x c - -o $tmp 2>/dev/null <<'EOF'
-#include CURSES_LOC
-main() {}
-EOF
-	if [ $? != 0 ]; then
-	    echo " *** Unable to find the ncurses libraries or the"       1>&2
-	    echo " *** required header files."                            1>&2
-	    echo " *** 'make menuconfig' requires the ncurses libraries." 1>&2
-	    echo " *** "                                                  1>&2
-	    echo " *** Install ncurses (ncurses-devel) and try again."    1>&2
-	    echo " *** "                                                  1>&2
-	    exit 1
-	fi
-}
-
-usage() {
-	printf "Usage: $0 [-check compiler options|-ccflags|-ldflags compiler options]\n"
-}
-
-if [ $# -eq 0 ]; then
-	usage
-	exit 1
-fi
-
-cc=""
-case "$1" in
-	"-check")
-		shift
-		cc="$@"
-		check
-		;;
-	"-ccflags")
-		ccflags
-		;;
-	"-ldflags")
-		shift
-		cc="$@"
-		ldflags
-		;;
-	"*")
-		usage
-		exit 1
-		;;
-esac
diff --git a/support/kconfig/lxdialog/checklist.c b/support/kconfig/lxdialog/checklist.c
deleted file mode 100644
index 3b15c08..0000000
--- a/support/kconfig/lxdialog/checklist.c
+++ /dev/null
@@ -1,332 +0,0 @@
-/*
- *  checklist.c -- implements the checklist box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *     Stuart Herbert - S.Herbert@sheffield.ac.uk: radiolist extension
- *     Alessandro Rubini - rubini@ipvvis.unipv.it: merged the two
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-static int list_width, check_x, item_x;
-
-/*
- * Print list item
- */
-static void print_item(WINDOW * win, int choice, int selected)
-{
-	int i;
-	char *list_item = malloc(list_width + 1);
-
-	strncpy(list_item, item_str(), list_width - item_x);
-	list_item[list_width - item_x] = '\0';
-
-	/* Clear 'residue' of last item */
-	wattrset(win, dlg.menubox.atr);
-	wmove(win, choice, 0);
-	for (i = 0; i < list_width; i++)
-		waddch(win, ' ');
-
-	wmove(win, choice, check_x);
-	wattrset(win, selected ? dlg.check_selected.atr
-		 : dlg.check.atr);
-	if (!item_is_tag(':'))
-		wprintw(win, "(%c)", item_is_tag('X') ? 'X' : ' ');
-
-	wattrset(win, selected ? dlg.tag_selected.atr : dlg.tag.atr);
-	mvwaddch(win, choice, item_x, list_item[0]);
-	wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
-	waddstr(win, list_item + 1);
-	if (selected) {
-		wmove(win, choice, check_x + 1);
-		wrefresh(win);
-	}
-	free(list_item);
-}
-
-/*
- * Print the scroll indicators.
- */
-static void print_arrows(WINDOW * win, int choice, int item_no, int scroll,
-	     int y, int x, int height)
-{
-	wmove(win, y, x);
-
-	if (scroll > 0) {
-		wattrset(win, dlg.uarrow.atr);
-		waddch(win, ACS_UARROW);
-		waddstr(win, "(-)");
-	} else {
-		wattrset(win, dlg.menubox.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-
-	y = y + height + 1;
-	wmove(win, y, x);
-
-	if ((height < item_no) && (scroll + choice < item_no - 1)) {
-		wattrset(win, dlg.darrow.atr);
-		waddch(win, ACS_DARROW);
-		waddstr(win, "(+)");
-	} else {
-		wattrset(win, dlg.menubox_border.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-}
-
-/*
- *  Display the termination buttons
- */
-static void print_buttons(WINDOW * dialog, int height, int width, int selected)
-{
-	int x = width / 2 - 11;
-	int y = height - 2;
-
-	print_button(dialog, gettext("Select"), y, x, selected == 0);
-	print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
-
-	wmove(dialog, y, x + 1 + 14 * selected);
-	wrefresh(dialog);
-}
-
-/*
- * Display a dialog box with a list of options that can be turned on or off
- * in the style of radiolist (only one option turned on at a time).
- */
-int dialog_checklist(const char *title, const char *prompt, int height,
-		     int width, int list_height)
-{
-	int i, x, y, box_x, box_y;
-	int key = 0, button = 0, choice = 0, scroll = 0, max_choice;
-	WINDOW *dialog, *list;
-
-	/* which item to highlight */
-	item_foreach() {
-		if (item_is_tag('X'))
-			choice = item_n();
-		if (item_is_selected()) {
-			choice = item_n();
-			break;
-		}
-	}
-
-do_resize:
-	if (getmaxy(stdscr) < (height + CHECKLIST_HEIGTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-	if (getmaxx(stdscr) < (width + CHECKLIST_WIDTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-
-	max_choice = MIN(list_height, item_count());
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	list_width = width - 6;
-	box_y = height - list_height - 5;
-	box_x = (width - list_width) / 2 - 1;
-
-	/* create new window for the list */
-	list = subwin(dialog, list_height, list_width, y + box_y + 1,
-	              x + box_x + 1);
-
-	keypad(list, TRUE);
-
-	/* draw a box around the list items */
-	draw_box(dialog, box_y, box_x, list_height + 2, list_width + 2,
-	         dlg.menubox_border.atr, dlg.menubox.atr);
-
-	/* Find length of longest item in order to center checklist */
-	check_x = 0;
-	item_foreach()
-		check_x = MAX(check_x, strlen(item_str()) + 4);
-	check_x = MIN(check_x, list_width);
-
-	check_x = (list_width - check_x) / 2;
-	item_x = check_x + 4;
-
-	if (choice >= list_height) {
-		scroll = choice - list_height + 1;
-		choice -= scroll;
-	}
-
-	/* Print the list */
-	for (i = 0; i < max_choice; i++) {
-		item_set(scroll + i);
-		print_item(list, i, i == choice);
-	}
-
-	print_arrows(dialog, choice, item_count(), scroll,
-		     box_y, box_x + check_x + 5, list_height);
-
-	print_buttons(dialog, height, width, 0);
-
-	wnoutrefresh(dialog);
-	wnoutrefresh(list);
-	doupdate();
-
-	while (key != KEY_ESC) {
-		key = wgetch(dialog);
-
-		for (i = 0; i < max_choice; i++) {
-			item_set(i + scroll);
-			if (toupper(key) == toupper(item_str()[0]))
-				break;
-		}
-
-		if (i < max_choice || key == KEY_UP || key == KEY_DOWN ||
-		    key == '+' || key == '-') {
-			if (key == KEY_UP || key == '-') {
-				if (!choice) {
-					if (!scroll)
-						continue;
-					/* Scroll list down */
-					if (list_height > 1) {
-						/* De-highlight current first item */
-						item_set(scroll);
-						print_item(list, 0, FALSE);
-						scrollok(list, TRUE);
-						wscrl(list, -1);
-						scrollok(list, FALSE);
-					}
-					scroll--;
-					item_set(scroll);
-					print_item(list, 0, TRUE);
-					print_arrows(dialog, choice, item_count(),
-						     scroll, box_y, box_x + check_x + 5, list_height);
-
-					wnoutrefresh(dialog);
-					wrefresh(list);
-
-					continue;	/* wait for another key press */
-				} else
-					i = choice - 1;
-			} else if (key == KEY_DOWN || key == '+') {
-				if (choice == max_choice - 1) {
-					if (scroll + choice >= item_count() - 1)
-						continue;
-					/* Scroll list up */
-					if (list_height > 1) {
-						/* De-highlight current last item before scrolling up */
-						item_set(scroll + max_choice - 1);
-						print_item(list,
-							    max_choice - 1,
-							    FALSE);
-						scrollok(list, TRUE);
-						wscrl(list, 1);
-						scrollok(list, FALSE);
-					}
-					scroll++;
-					item_set(scroll + max_choice - 1);
-					print_item(list, max_choice - 1, TRUE);
-
-					print_arrows(dialog, choice, item_count(),
-						     scroll, box_y, box_x + check_x + 5, list_height);
-
-					wnoutrefresh(dialog);
-					wrefresh(list);
-
-					continue;	/* wait for another key press */
-				} else
-					i = choice + 1;
-			}
-			if (i != choice) {
-				/* De-highlight current item */
-				item_set(scroll + choice);
-				print_item(list, choice, FALSE);
-				/* Highlight new item */
-				choice = i;
-				item_set(scroll + choice);
-				print_item(list, choice, TRUE);
-				wnoutrefresh(dialog);
-				wrefresh(list);
-			}
-			continue;	/* wait for another key press */
-		}
-		switch (key) {
-		case 'H':
-		case 'h':
-		case '?':
-			button = 1;
-			/* fall-through */
-		case 'S':
-		case 's':
-		case ' ':
-		case '\n':
-			item_foreach()
-				item_set_selected(0);
-			item_set(scroll + choice);
-			item_set_selected(1);
-			delwin(list);
-			delwin(dialog);
-			return button;
-		case TAB:
-		case KEY_LEFT:
-		case KEY_RIGHT:
-			button = ((key == KEY_LEFT ? --button : ++button) < 0)
-			    ? 1 : (button > 1 ? 0 : button);
-
-			print_buttons(dialog, height, width, button);
-			wrefresh(dialog);
-			break;
-		case 'X':
-		case 'x':
-			key = KEY_ESC;
-			break;
-		case KEY_ESC:
-			key = on_key_esc(dialog);
-			break;
-		case KEY_RESIZE:
-			delwin(list);
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		}
-
-		/* Now, update everything... */
-		doupdate();
-	}
-	delwin(list);
-	delwin(dialog);
-	return key;		/* ESC pressed */
-}
diff --git a/support/kconfig/lxdialog/dialog.h b/support/kconfig/lxdialog/dialog.h
deleted file mode 100644
index b4343d3..0000000
--- a/support/kconfig/lxdialog/dialog.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/*
- *  dialog.h -- common declarations for all dialog modules
- *
- *  AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <sys/types.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#ifndef KBUILD_NO_NLS
-# include <libintl.h>
-#else
-# define gettext(Msgid) ((const char *) (Msgid))
-#endif
-
-#ifdef __sun__
-#define CURS_MACROS
-#endif
-#include CURSES_LOC
-
-/*
- * Colors in ncurses 1.9.9e do not work properly since foreground and
- * background colors are OR'd rather than separately masked.  This version
- * of dialog was hacked to work with ncurses 1.9.9e, making it incompatible
- * with standard curses.  The simplest fix (to make this work with standard
- * curses) uses the wbkgdset() function, not used in the original hack.
- * Turn it off if we're building with 1.9.9e, since it just confuses things.
- */
-#if defined(NCURSES_VERSION) && defined(_NEED_WRAP) && !defined(GCC_PRINTFLIKE)
-#define OLD_NCURSES 1
-#undef  wbkgdset
-#define wbkgdset(w,p)		/*nothing */
-#else
-#define OLD_NCURSES 0
-#endif
-
-#define TR(params) _tracef params
-
-#define KEY_ESC 27
-#define TAB 9
-#define MAX_LEN 2048
-#define BUF_SIZE (10*1024)
-#define MIN(x,y) (x < y ? x : y)
-#define MAX(x,y) (x > y ? x : y)
-
-#ifndef ACS_ULCORNER
-#define ACS_ULCORNER '+'
-#endif
-#ifndef ACS_LLCORNER
-#define ACS_LLCORNER '+'
-#endif
-#ifndef ACS_URCORNER
-#define ACS_URCORNER '+'
-#endif
-#ifndef ACS_LRCORNER
-#define ACS_LRCORNER '+'
-#endif
-#ifndef ACS_HLINE
-#define ACS_HLINE '-'
-#endif
-#ifndef ACS_VLINE
-#define ACS_VLINE '|'
-#endif
-#ifndef ACS_LTEE
-#define ACS_LTEE '+'
-#endif
-#ifndef ACS_RTEE
-#define ACS_RTEE '+'
-#endif
-#ifndef ACS_UARROW
-#define ACS_UARROW '^'
-#endif
-#ifndef ACS_DARROW
-#define ACS_DARROW 'v'
-#endif
-
-/* error return codes */
-#define ERRDISPLAYTOOSMALL (KEY_MAX + 1)
-
-/*
- *   Color definitions
- */
-struct dialog_color {
-	chtype atr;	/* Color attribute */
-	int fg;		/* foreground */
-	int bg;		/* background */
-	int hl;		/* highlight this item */
-};
-
-struct subtitle_list {
-	struct subtitle_list *next;
-	const char *text;
-};
-
-struct dialog_info {
-	const char *backtitle;
-	struct subtitle_list *subtitles;
-	struct dialog_color screen;
-	struct dialog_color shadow;
-	struct dialog_color dialog;
-	struct dialog_color title;
-	struct dialog_color border;
-	struct dialog_color button_active;
-	struct dialog_color button_inactive;
-	struct dialog_color button_key_active;
-	struct dialog_color button_key_inactive;
-	struct dialog_color button_label_active;
-	struct dialog_color button_label_inactive;
-	struct dialog_color inputbox;
-	struct dialog_color inputbox_border;
-	struct dialog_color searchbox;
-	struct dialog_color searchbox_title;
-	struct dialog_color searchbox_border;
-	struct dialog_color position_indicator;
-	struct dialog_color menubox;
-	struct dialog_color menubox_border;
-	struct dialog_color item;
-	struct dialog_color item_selected;
-	struct dialog_color tag;
-	struct dialog_color tag_selected;
-	struct dialog_color tag_key;
-	struct dialog_color tag_key_selected;
-	struct dialog_color check;
-	struct dialog_color check_selected;
-	struct dialog_color uarrow;
-	struct dialog_color darrow;
-};
-
-/*
- * Global variables
- */
-extern struct dialog_info dlg;
-extern char dialog_input_result[];
-extern int saved_x, saved_y;		/* Needed in signal handler in mconf.c */
-
-/*
- * Function prototypes
- */
-
-/* item list as used by checklist and menubox */
-void item_reset(void);
-void item_make(const char *fmt, ...);
-void item_add_str(const char *fmt, ...);
-void item_set_tag(char tag);
-void item_set_data(void *p);
-void item_set_selected(int val);
-int item_activate_selected(void);
-void *item_data(void);
-char item_tag(void);
-
-/* item list manipulation for lxdialog use */
-#define MAXITEMSTR 200
-struct dialog_item {
-	char str[MAXITEMSTR];	/* promtp displayed */
-	char tag;
-	void *data;	/* pointer to menu item - used by menubox+checklist */
-	int selected;	/* Set to 1 by dialog_*() function if selected. */
-};
-
-/* list of lialog_items */
-struct dialog_list {
-	struct dialog_item node;
-	struct dialog_list *next;
-};
-
-extern struct dialog_list *item_cur;
-extern struct dialog_list item_nil;
-extern struct dialog_list *item_head;
-
-int item_count(void);
-void item_set(int n);
-int item_n(void);
-const char *item_str(void);
-int item_is_selected(void);
-int item_is_tag(char tag);
-#define item_foreach() \
-	for (item_cur = item_head ? item_head: item_cur; \
-	     item_cur && (item_cur != &item_nil); item_cur = item_cur->next)
-
-/* generic key handlers */
-int on_key_esc(WINDOW *win);
-int on_key_resize(void);
-
-/* minimum (re)size values */
-#define CHECKLIST_HEIGTH_MIN 6	/* For dialog_checklist() */
-#define CHECKLIST_WIDTH_MIN 6
-#define INPUTBOX_HEIGTH_MIN 2	/* For dialog_inputbox() */
-#define INPUTBOX_WIDTH_MIN 2
-#define MENUBOX_HEIGTH_MIN 15	/* For dialog_menu() */
-#define MENUBOX_WIDTH_MIN 65
-#define TEXTBOX_HEIGTH_MIN 8	/* For dialog_textbox() */
-#define TEXTBOX_WIDTH_MIN 8
-#define YESNO_HEIGTH_MIN 4	/* For dialog_yesno() */
-#define YESNO_WIDTH_MIN 4
-#define WINDOW_HEIGTH_MIN 19	/* For init_dialog() */
-#define WINDOW_WIDTH_MIN 80
-
-int init_dialog(const char *backtitle);
-void set_dialog_backtitle(const char *backtitle);
-void set_dialog_subtitles(struct subtitle_list *subtitles);
-void end_dialog(int x, int y);
-void attr_clear(WINDOW * win, int height, int width, chtype attr);
-void dialog_clear(void);
-void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x);
-void print_button(WINDOW * win, const char *label, int y, int x, int selected);
-void print_title(WINDOW *dialog, const char *title, int width);
-void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box,
-	      chtype border);
-void draw_shadow(WINDOW * win, int y, int x, int height, int width);
-
-int first_alpha(const char *string, const char *exempt);
-int dialog_yesno(const char *title, const char *prompt, int height, int width);
-int dialog_msgbox(const char *title, const char *prompt, int height,
-		  int width, int pause);
-
-
-typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void
-			       *_data);
-int dialog_textbox(const char *title, char *tbuf, int initial_height,
-		   int initial_width, int *keys, int *_vscroll, int *_hscroll,
-		   update_text_fn update_text, void *data);
-int dialog_menu(const char *title, const char *prompt,
-		const void *selected, int *s_scroll);
-int dialog_checklist(const char *title, const char *prompt, int height,
-		     int width, int list_height);
-int dialog_inputbox(const char *title, const char *prompt, int height,
-		    int width, const char *init);
-
-/*
- * This is the base for fictitious keys, which activate
- * the buttons.
- *
- * Mouse-generated keys are the following:
- *   -- the first 32 are used as numbers, in addition to '0'-'9'
- *   -- the lowercase are used to signal mouse-enter events (M_EVENT + 'o')
- *   -- uppercase chars are used to invoke the button (M_EVENT + 'O')
- */
-#define M_EVENT (KEY_MAX+1)
diff --git a/support/kconfig/lxdialog/inputbox.c b/support/kconfig/lxdialog/inputbox.c
deleted file mode 100644
index 447a582..0000000
--- a/support/kconfig/lxdialog/inputbox.c
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- *  inputbox.c -- implements the input box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-char dialog_input_result[MAX_LEN + 1];
-
-/*
- *  Print the termination buttons
- */
-static void print_buttons(WINDOW * dialog, int height, int width, int selected)
-{
-	int x = width / 2 - 11;
-	int y = height - 2;
-
-	print_button(dialog, gettext("  Ok  "), y, x, selected == 0);
-	print_button(dialog, gettext(" Help "), y, x + 14, selected == 1);
-
-	wmove(dialog, y, x + 1 + 14 * selected);
-	wrefresh(dialog);
-}
-
-/*
- * Display a dialog box for inputing a string
- */
-int dialog_inputbox(const char *title, const char *prompt, int height, int width,
-                    const char *init)
-{
-	int i, x, y, box_y, box_x, box_width;
-	int input_x = 0, key = 0, button = -1;
-	int show_x, len, pos;
-	char *instr = dialog_input_result;
-	WINDOW *dialog;
-
-	if (!init)
-		instr[0] = '\0';
-	else
-		strcpy(instr, init);
-
-do_resize:
-	if (getmaxy(stdscr) <= (height - INPUTBOX_HEIGTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-	if (getmaxx(stdscr) <= (width - INPUTBOX_WIDTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	/* Draw the input field box */
-	box_width = width - 6;
-	getyx(dialog, y, x);
-	box_y = y + 2;
-	box_x = (width - box_width) / 2;
-	draw_box(dialog, y + 1, box_x - 1, 3, box_width + 2,
-		 dlg.dialog.atr, dlg.border.atr);
-
-	print_buttons(dialog, height, width, 0);
-
-	/* Set up the initial value */
-	wmove(dialog, box_y, box_x);
-	wattrset(dialog, dlg.inputbox.atr);
-
-	len = strlen(instr);
-	pos = len;
-
-	if (len >= box_width) {
-		show_x = len - box_width + 1;
-		input_x = box_width - 1;
-		for (i = 0; i < box_width - 1; i++)
-			waddch(dialog, instr[show_x + i]);
-	} else {
-		show_x = 0;
-		input_x = len;
-		waddstr(dialog, instr);
-	}
-
-	wmove(dialog, box_y, box_x + input_x);
-
-	wrefresh(dialog);
-
-	while (key != KEY_ESC) {
-		key = wgetch(dialog);
-
-		if (button == -1) {	/* Input box selected */
-			switch (key) {
-			case TAB:
-			case KEY_UP:
-			case KEY_DOWN:
-				break;
-			case KEY_BACKSPACE:
-			case 127:
-				if (pos) {
-					wattrset(dialog, dlg.inputbox.atr);
-					if (input_x == 0) {
-						show_x--;
-					} else
-						input_x--;
-
-					if (pos < len) {
-						for (i = pos - 1; i < len; i++) {
-							instr[i] = instr[i+1];
-						}
-					}
-
-					pos--;
-					len--;
-					instr[len] = '\0';
-					wmove(dialog, box_y, box_x);
-					for (i = 0; i < box_width; i++) {
-						if (!instr[show_x + i]) {
-							waddch(dialog, ' ');
-							break;
-						}
-						waddch(dialog, instr[show_x + i]);
-					}
-					wmove(dialog, box_y, input_x + box_x);
-					wrefresh(dialog);
-				}
-				continue;
-			case KEY_LEFT:
-				if (pos > 0) {
-					if (input_x > 0) {
-						wmove(dialog, box_y, --input_x + box_x);
-					} else if (input_x == 0) {
-						show_x--;
-						wmove(dialog, box_y, box_x);
-						for (i = 0; i < box_width; i++) {
-							if (!instr[show_x + i]) {
-								waddch(dialog, ' ');
-								break;
-							}
-							waddch(dialog, instr[show_x + i]);
-						}
-						wmove(dialog, box_y, box_x);
-					}
-					pos--;
-				}
-				continue;
-			case KEY_RIGHT:
-				if (pos < len) {
-					if (input_x < box_width - 1) {
-						wmove(dialog, box_y, ++input_x + box_x);
-					} else if (input_x == box_width - 1) {
-						show_x++;
-						wmove(dialog, box_y, box_x);
-						for (i = 0; i < box_width; i++) {
-							if (!instr[show_x + i]) {
-								waddch(dialog, ' ');
-								break;
-							}
-							waddch(dialog, instr[show_x + i]);
-						}
-						wmove(dialog, box_y, input_x + box_x);
-					}
-					pos++;
-				}
-				continue;
-			default:
-				if (key < 0x100 && isprint(key)) {
-					if (len < MAX_LEN) {
-						wattrset(dialog, dlg.inputbox.atr);
-						if (pos < len) {
-							for (i = len; i > pos; i--)
-								instr[i] = instr[i-1];
-							instr[pos] = key;
-						} else {
-							instr[len] = key;
-						}
-						pos++;
-						len++;
-						instr[len] = '\0';
-
-						if (input_x == box_width - 1) {
-							show_x++;
-						} else {
-							input_x++;
-						}
-
-						wmove(dialog, box_y, box_x);
-						for (i = 0; i < box_width; i++) {
-							if (!instr[show_x + i]) {
-								waddch(dialog, ' ');
-								break;
-							}
-							waddch(dialog, instr[show_x + i]);
-						}
-						wmove(dialog, box_y, input_x + box_x);
-						wrefresh(dialog);
-					} else
-						flash();	/* Alarm user about overflow */
-					continue;
-				}
-			}
-		}
-		switch (key) {
-		case 'O':
-		case 'o':
-			delwin(dialog);
-			return 0;
-		case 'H':
-		case 'h':
-			delwin(dialog);
-			return 1;
-		case KEY_UP:
-		case KEY_LEFT:
-			switch (button) {
-			case -1:
-				button = 1;	/* Indicates "Help" button is selected */
-				print_buttons(dialog, height, width, 1);
-				break;
-			case 0:
-				button = -1;	/* Indicates input box is selected */
-				print_buttons(dialog, height, width, 0);
-				wmove(dialog, box_y, box_x + input_x);
-				wrefresh(dialog);
-				break;
-			case 1:
-				button = 0;	/* Indicates "OK" button is selected */
-				print_buttons(dialog, height, width, 0);
-				break;
-			}
-			break;
-		case TAB:
-		case KEY_DOWN:
-		case KEY_RIGHT:
-			switch (button) {
-			case -1:
-				button = 0;	/* Indicates "OK" button is selected */
-				print_buttons(dialog, height, width, 0);
-				break;
-			case 0:
-				button = 1;	/* Indicates "Help" button is selected */
-				print_buttons(dialog, height, width, 1);
-				break;
-			case 1:
-				button = -1;	/* Indicates input box is selected */
-				print_buttons(dialog, height, width, 0);
-				wmove(dialog, box_y, box_x + input_x);
-				wrefresh(dialog);
-				break;
-			}
-			break;
-		case ' ':
-		case '\n':
-			delwin(dialog);
-			return (button == -1 ? 0 : button);
-		case 'X':
-		case 'x':
-			key = KEY_ESC;
-			break;
-		case KEY_ESC:
-			key = on_key_esc(dialog);
-			break;
-		case KEY_RESIZE:
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		}
-	}
-
-	delwin(dialog);
-	return KEY_ESC;		/* ESC pressed */
-}
diff --git a/support/kconfig/lxdialog/menubox.c b/support/kconfig/lxdialog/menubox.c
deleted file mode 100644
index c93de0b..0000000
--- a/support/kconfig/lxdialog/menubox.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- *  menubox.c -- implements the menu box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcapw@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-/*
- *  Changes by Clifford Wolf (god@clifford.at)
- *
- *  [ 1998-06-13 ]
- *
- *    *)  A bugfix for the Page-Down problem
- *
- *    *)  Formerly when I used Page Down and Page Up, the cursor would be set
- *        to the first position in the menu box.  Now lxdialog is a bit
- *        smarter and works more like other menu systems (just have a look at
- *        it).
- *
- *    *)  Formerly if I selected something my scrolling would be broken because
- *        lxdialog is re-invoked by the Menuconfig shell script, can't
- *        remember the last scrolling position, and just sets it so that the
- *        cursor is at the bottom of the box.  Now it writes the temporary file
- *        lxdialog.scrltmp which contains this information. The file is
- *        deleted by lxdialog if the user leaves a submenu or enters a new
- *        one, but it would be nice if Menuconfig could make another "rm -f"
- *        just to be sure.  Just try it out - you will recognise a difference!
- *
- *  [ 1998-06-14 ]
- *
- *    *)  Now lxdialog is crash-safe against broken "lxdialog.scrltmp" files
- *        and menus change their size on the fly.
- *
- *    *)  If for some reason the last scrolling position is not saved by
- *        lxdialog, it sets the scrolling so that the selected item is in the
- *        middle of the menu box, not at the bottom.
- *
- * 02 January 1999, Michael Elizabeth Chastain (mec@shout.net)
- * Reset 'scroll' to 0 if the value from lxdialog.scrltmp is bogus.
- * This fixes a bug in Menuconfig where using ' ' to descend into menus
- * would leave mis-synchronized lxdialog.scrltmp files lying around,
- * fscanf would read in 'scroll', and eventually that value would get used.
- */
-
-#include "dialog.h"
-
-static int menu_width, item_x;
-
-/*
- * Print menu item
- */
-static void do_print_item(WINDOW * win, const char *item, int line_y,
-                          int selected, int hotkey)
-{
-	int j;
-	char *menu_item = malloc(menu_width + 1);
-
-	strncpy(menu_item, item, menu_width - item_x);
-	menu_item[menu_width - item_x] = '\0';
-	j = first_alpha(menu_item, "YyNnMmHh");
-
-	/* Clear 'residue' of last item */
-	wattrset(win, dlg.menubox.atr);
-	wmove(win, line_y, 0);
-#if OLD_NCURSES
-	{
-		int i;
-		for (i = 0; i < menu_width; i++)
-			waddch(win, ' ');
-	}
-#else
-	wclrtoeol(win);
-#endif
-	wattrset(win, selected ? dlg.item_selected.atr : dlg.item.atr);
-	mvwaddstr(win, line_y, item_x, menu_item);
-	if (hotkey) {
-		wattrset(win, selected ? dlg.tag_key_selected.atr
-			 : dlg.tag_key.atr);
-		mvwaddch(win, line_y, item_x + j, menu_item[j]);
-	}
-	if (selected) {
-		wmove(win, line_y, item_x + 1);
-	}
-	free(menu_item);
-	wrefresh(win);
-}
-
-#define print_item(index, choice, selected)				\
-do {									\
-	item_set(index);						\
-	do_print_item(menu, item_str(), choice, selected, !item_is_tag(':')); \
-} while (0)
-
-/*
- * Print the scroll indicators.
- */
-static void print_arrows(WINDOW * win, int item_no, int scroll, int y, int x,
-			 int height)
-{
-	int cur_y, cur_x;
-
-	getyx(win, cur_y, cur_x);
-
-	wmove(win, y, x);
-
-	if (scroll > 0) {
-		wattrset(win, dlg.uarrow.atr);
-		waddch(win, ACS_UARROW);
-		waddstr(win, "(-)");
-	} else {
-		wattrset(win, dlg.menubox.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-
-	y = y + height + 1;
-	wmove(win, y, x);
-	wrefresh(win);
-
-	if ((height < item_no) && (scroll + height < item_no)) {
-		wattrset(win, dlg.darrow.atr);
-		waddch(win, ACS_DARROW);
-		waddstr(win, "(+)");
-	} else {
-		wattrset(win, dlg.menubox_border.atr);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-		waddch(win, ACS_HLINE);
-	}
-
-	wmove(win, cur_y, cur_x);
-	wrefresh(win);
-}
-
-/*
- * Display the termination buttons.
- */
-static void print_buttons(WINDOW * win, int height, int width, int selected)
-{
-	int x = width / 2 - 28;
-	int y = height - 2;
-
-	print_button(win, gettext("Select"), y, x, selected == 0);
-	print_button(win, gettext(" Exit "), y, x + 12, selected == 1);
-	print_button(win, gettext(" Help "), y, x + 24, selected == 2);
-	print_button(win, gettext(" Save "), y, x + 36, selected == 3);
-	print_button(win, gettext(" Load "), y, x + 48, selected == 4);
-
-	wmove(win, y, x + 1 + 12 * selected);
-	wrefresh(win);
-}
-
-/* scroll up n lines (n may be negative) */
-static void do_scroll(WINDOW *win, int *scroll, int n)
-{
-	/* Scroll menu up */
-	scrollok(win, TRUE);
-	wscrl(win, n);
-	scrollok(win, FALSE);
-	*scroll = *scroll + n;
-	wrefresh(win);
-}
-
-/*
- * Display a menu for choosing among a number of options
- */
-int dialog_menu(const char *title, const char *prompt,
-                const void *selected, int *s_scroll)
-{
-	int i, j, x, y, box_x, box_y;
-	int height, width, menu_height;
-	int key = 0, button = 0, scroll = 0, choice = 0;
-	int first_item =  0, max_choice;
-	WINDOW *dialog, *menu;
-
-do_resize:
-	height = getmaxy(stdscr);
-	width = getmaxx(stdscr);
-	if (height < MENUBOX_HEIGTH_MIN || width < MENUBOX_WIDTH_MIN)
-		return -ERRDISPLAYTOOSMALL;
-
-	height -= 4;
-	width  -= 5;
-	menu_height = height - 10;
-
-	max_choice = MIN(menu_height, item_count());
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	wbkgdset(dialog, dlg.dialog.atr & A_COLOR);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	menu_width = width - 6;
-	box_y = height - menu_height - 5;
-	box_x = (width - menu_width) / 2 - 1;
-
-	/* create new window for the menu */
-	menu = subwin(dialog, menu_height, menu_width,
-		      y + box_y + 1, x + box_x + 1);
-	keypad(menu, TRUE);
-
-	/* draw a box around the menu items */
-	draw_box(dialog, box_y, box_x, menu_height + 2, menu_width + 2,
-		 dlg.menubox_border.atr, dlg.menubox.atr);
-
-	if (menu_width >= 80)
-		item_x = (menu_width - 70) / 2;
-	else
-		item_x = 4;
-
-	/* Set choice to default item */
-	item_foreach()
-		if (selected && (selected == item_data()))
-			choice = item_n();
-	/* get the saved scroll info */
-	scroll = *s_scroll;
-	if ((scroll <= choice) && (scroll + max_choice > choice) &&
-	   (scroll >= 0) && (scroll + max_choice <= item_count())) {
-		first_item = scroll;
-		choice = choice - scroll;
-	} else {
-		scroll = 0;
-	}
-	if ((choice >= max_choice)) {
-		if (choice >= item_count() - max_choice / 2)
-			scroll = first_item = item_count() - max_choice;
-		else
-			scroll = first_item = choice - max_choice / 2;
-		choice = choice - scroll;
-	}
-
-	/* Print the menu */
-	for (i = 0; i < max_choice; i++) {
-		print_item(first_item + i, i, i == choice);
-	}
-
-	wnoutrefresh(menu);
-
-	print_arrows(dialog, item_count(), scroll,
-		     box_y, box_x + item_x + 1, menu_height);
-
-	print_buttons(dialog, height, width, 0);
-	wmove(menu, choice, item_x + 1);
-	wrefresh(menu);
-
-	while (key != KEY_ESC) {
-		key = wgetch(menu);
-
-		if (key < 256 && isalpha(key))
-			key = tolower(key);
-
-		if (strchr("ynmh", key))
-			i = max_choice;
-		else {
-			for (i = choice + 1; i < max_choice; i++) {
-				item_set(scroll + i);
-				j = first_alpha(item_str(), "YyNnMmHh");
-				if (key == tolower(item_str()[j]))
-					break;
-			}
-			if (i == max_choice)
-				for (i = 0; i < max_choice; i++) {
-					item_set(scroll + i);
-					j = first_alpha(item_str(), "YyNnMmHh");
-					if (key == tolower(item_str()[j]))
-						break;
-				}
-		}
-
-		if (item_count() != 0 &&
-		    (i < max_choice ||
-		     key == KEY_UP || key == KEY_DOWN ||
-		     key == '-' || key == '+' ||
-		     key == KEY_PPAGE || key == KEY_NPAGE)) {
-			/* Remove highligt of current item */
-			print_item(scroll + choice, choice, FALSE);
-
-			if (key == KEY_UP || key == '-') {
-				if (choice < 2 && scroll) {
-					/* Scroll menu down */
-					do_scroll(menu, &scroll, -1);
-
-					print_item(scroll, 0, FALSE);
-				} else
-					choice = MAX(choice - 1, 0);
-
-			} else if (key == KEY_DOWN || key == '+') {
-				print_item(scroll+choice, choice, FALSE);
-
-				if ((choice > max_choice - 3) &&
-				    (scroll + max_choice < item_count())) {
-					/* Scroll menu up */
-					do_scroll(menu, &scroll, 1);
-
-					print_item(scroll+max_choice - 1,
-						   max_choice - 1, FALSE);
-				} else
-					choice = MIN(choice + 1, max_choice - 1);
-
-			} else if (key == KEY_PPAGE) {
-				scrollok(menu, TRUE);
-				for (i = 0; (i < max_choice); i++) {
-					if (scroll > 0) {
-						do_scroll(menu, &scroll, -1);
-						print_item(scroll, 0, FALSE);
-					} else {
-						if (choice > 0)
-							choice--;
-					}
-				}
-
-			} else if (key == KEY_NPAGE) {
-				for (i = 0; (i < max_choice); i++) {
-					if (scroll + max_choice < item_count()) {
-						do_scroll(menu, &scroll, 1);
-						print_item(scroll+max_choice-1,
-							   max_choice - 1, FALSE);
-					} else {
-						if (choice + 1 < max_choice)
-							choice++;
-					}
-				}
-			} else
-				choice = i;
-
-			print_item(scroll + choice, choice, TRUE);
-
-			print_arrows(dialog, item_count(), scroll,
-				     box_y, box_x + item_x + 1, menu_height);
-
-			wnoutrefresh(dialog);
-			wrefresh(menu);
-
-			continue;	/* wait for another key press */
-		}
-
-		switch (key) {
-		case KEY_LEFT:
-		case TAB:
-		case KEY_RIGHT:
-			button = ((key == KEY_LEFT ? --button : ++button) < 0)
-			    ? 4 : (button > 4 ? 0 : button);
-
-			print_buttons(dialog, height, width, button);
-			wrefresh(menu);
-			break;
-		case ' ':
-		case 's':
-		case 'y':
-		case 'n':
-		case 'm':
-		case '/':
-		case 'h':
-		case '?':
-		case 'z':
-		case '\n':
-			/* save scroll info */
-			*s_scroll = scroll;
-			delwin(menu);
-			delwin(dialog);
-			item_set(scroll + choice);
-			item_set_selected(1);
-			switch (key) {
-			case 'h':
-			case '?':
-				return 2;
-			case 's':
-			case 'y':
-				return 5;
-			case 'n':
-				return 6;
-			case 'm':
-				return 7;
-			case ' ':
-				return 8;
-			case '/':
-				return 9;
-			case 'z':
-				return 10;
-			case '\n':
-				return button;
-			}
-			return 0;
-		case 'e':
-		case 'x':
-			key = KEY_ESC;
-			break;
-		case KEY_ESC:
-			key = on_key_esc(menu);
-			break;
-		case KEY_RESIZE:
-			on_key_resize();
-			delwin(menu);
-			delwin(dialog);
-			goto do_resize;
-		}
-	}
-	delwin(menu);
-	delwin(dialog);
-	return key;		/* ESC pressed */
-}
diff --git a/support/kconfig/lxdialog/textbox.c b/support/kconfig/lxdialog/textbox.c
deleted file mode 100644
index 1773319..0000000
--- a/support/kconfig/lxdialog/textbox.c
+++ /dev/null
@@ -1,408 +0,0 @@
-/*
- *  textbox.c -- implements the text box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-static void back_lines(int n);
-static void print_page(WINDOW *win, int height, int width, update_text_fn
-		       update_text, void *data);
-static void print_line(WINDOW *win, int row, int width);
-static char *get_line(void);
-static void print_position(WINDOW * win);
-
-static int hscroll;
-static int begin_reached, end_reached, page_length;
-static char *buf;
-static char *page;
-
-/*
- * refresh window content
- */
-static void refresh_text_box(WINDOW *dialog, WINDOW *box, int boxh, int boxw,
-			     int cur_y, int cur_x, update_text_fn update_text,
-			     void *data)
-{
-	print_page(box, boxh, boxw, update_text, data);
-	print_position(dialog);
-	wmove(dialog, cur_y, cur_x);	/* Restore cursor position */
-	wrefresh(dialog);
-}
-
-
-/*
- * Display text from a file in a dialog box.
- *
- * keys is a null-terminated array
- * update_text() may not add or remove any '\n' or '\0' in tbuf
- */
-int dialog_textbox(const char *title, char *tbuf, int initial_height,
-		   int initial_width, int *keys, int *_vscroll, int *_hscroll,
-		   update_text_fn update_text, void *data)
-{
-	int i, x, y, cur_x, cur_y, key = 0;
-	int height, width, boxh, boxw;
-	WINDOW *dialog, *box;
-	bool done = false;
-
-	begin_reached = 1;
-	end_reached = 0;
-	page_length = 0;
-	hscroll = 0;
-	buf = tbuf;
-	page = buf;	/* page is pointer to start of page to be displayed */
-
-	if (_vscroll && *_vscroll) {
-		begin_reached = 0;
-
-		for (i = 0; i < *_vscroll; i++)
-			get_line();
-	}
-	if (_hscroll)
-		hscroll = *_hscroll;
-
-do_resize:
-	getmaxyx(stdscr, height, width);
-	if (height < TEXTBOX_HEIGTH_MIN || width < TEXTBOX_WIDTH_MIN)
-		return -ERRDISPLAYTOOSMALL;
-	if (initial_height != 0)
-		height = initial_height;
-	else
-		if (height > 4)
-			height -= 4;
-		else
-			height = 0;
-	if (initial_width != 0)
-		width = initial_width;
-	else
-		if (width > 5)
-			width -= 5;
-		else
-			width = 0;
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	/* Create window for box region, used for scrolling text */
-	boxh = height - 4;
-	boxw = width - 2;
-	box = subwin(dialog, boxh, boxw, y + 1, x + 1);
-	wattrset(box, dlg.dialog.atr);
-	wbkgdset(box, dlg.dialog.atr & A_COLOR);
-
-	keypad(box, TRUE);
-
-	/* register the new window, along with its borders */
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	wbkgdset(dialog, dlg.dialog.atr & A_COLOR);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	print_button(dialog, gettext(" Exit "), height - 2, width / 2 - 4, TRUE);
-	wnoutrefresh(dialog);
-	getyx(dialog, cur_y, cur_x);	/* Save cursor position */
-
-	/* Print first page of text */
-	attr_clear(box, boxh, boxw, dlg.dialog.atr);
-	refresh_text_box(dialog, box, boxh, boxw, cur_y, cur_x, update_text,
-			 data);
-
-	while (!done) {
-		key = wgetch(dialog);
-		switch (key) {
-		case 'E':	/* Exit */
-		case 'e':
-		case 'X':
-		case 'x':
-		case 'q':
-		case '\n':
-			done = true;
-			break;
-		case 'g':	/* First page */
-		case KEY_HOME:
-			if (!begin_reached) {
-				begin_reached = 1;
-				page = buf;
-				refresh_text_box(dialog, box, boxh, boxw,
-						 cur_y, cur_x, update_text,
-						 data);
-			}
-			break;
-		case 'G':	/* Last page */
-		case KEY_END:
-
-			end_reached = 1;
-			/* point to last char in buf */
-			page = buf + strlen(buf);
-			back_lines(boxh);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'K':	/* Previous line */
-		case 'k':
-		case KEY_UP:
-			if (begin_reached)
-				break;
-
-			back_lines(page_length + 1);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'B':	/* Previous page */
-		case 'b':
-		case 'u':
-		case KEY_PPAGE:
-			if (begin_reached)
-				break;
-			back_lines(page_length + boxh);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'J':	/* Next line */
-		case 'j':
-		case KEY_DOWN:
-			if (end_reached)
-				break;
-
-			back_lines(page_length - 1);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case KEY_NPAGE:	/* Next page */
-		case ' ':
-		case 'd':
-			if (end_reached)
-				break;
-
-			begin_reached = 0;
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case '0':	/* Beginning of line */
-		case 'H':	/* Scroll left */
-		case 'h':
-		case KEY_LEFT:
-			if (hscroll <= 0)
-				break;
-
-			if (key == '0')
-				hscroll = 0;
-			else
-				hscroll--;
-			/* Reprint current page to scroll horizontally */
-			back_lines(page_length);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case 'L':	/* Scroll right */
-		case 'l':
-		case KEY_RIGHT:
-			if (hscroll >= MAX_LEN)
-				break;
-			hscroll++;
-			/* Reprint current page to scroll horizontally */
-			back_lines(page_length);
-			refresh_text_box(dialog, box, boxh, boxw, cur_y,
-					 cur_x, update_text, data);
-			break;
-		case KEY_ESC:
-			if (on_key_esc(dialog) == KEY_ESC)
-				done = true;
-			break;
-		case KEY_RESIZE:
-			back_lines(height);
-			delwin(box);
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		default:
-			for (i = 0; keys[i]; i++) {
-				if (key == keys[i]) {
-					done = true;
-					break;
-				}
-			}
-		}
-	}
-	delwin(box);
-	delwin(dialog);
-	if (_vscroll) {
-		const char *s;
-
-		s = buf;
-		*_vscroll = 0;
-		back_lines(page_length);
-		while (s < page && (s = strchr(s, '\n'))) {
-			(*_vscroll)++;
-			s++;
-		}
-	}
-	if (_hscroll)
-		*_hscroll = hscroll;
-	return key;
-}
-
-/*
- * Go back 'n' lines in text. Called by dialog_textbox().
- * 'page' will be updated to point to the desired line in 'buf'.
- */
-static void back_lines(int n)
-{
-	int i;
-
-	begin_reached = 0;
-	/* Go back 'n' lines */
-	for (i = 0; i < n; i++) {
-		if (*page == '\0') {
-			if (end_reached) {
-				end_reached = 0;
-				continue;
-			}
-		}
-		if (page == buf) {
-			begin_reached = 1;
-			return;
-		}
-		page--;
-		do {
-			if (page == buf) {
-				begin_reached = 1;
-				return;
-			}
-			page--;
-		} while (*page != '\n');
-		page++;
-	}
-}
-
-/*
- * Print a new page of text.
- */
-static void print_page(WINDOW *win, int height, int width, update_text_fn
-		       update_text, void *data)
-{
-	int i, passed_end = 0;
-
-	if (update_text) {
-		char *end;
-
-		for (i = 0; i < height; i++)
-			get_line();
-		end = page;
-		back_lines(height);
-		update_text(buf, page - buf, end - buf, data);
-	}
-
-	page_length = 0;
-	for (i = 0; i < height; i++) {
-		print_line(win, i, width);
-		if (!passed_end)
-			page_length++;
-		if (end_reached && !passed_end)
-			passed_end = 1;
-	}
-	wnoutrefresh(win);
-}
-
-/*
- * Print a new line of text.
- */
-static void print_line(WINDOW * win, int row, int width)
-{
-	char *line;
-
-	line = get_line();
-	line += MIN(strlen(line), hscroll);	/* Scroll horizontally */
-	wmove(win, row, 0);	/* move cursor to correct line */
-	waddch(win, ' ');
-	waddnstr(win, line, MIN(strlen(line), width - 2));
-
-	/* Clear 'residue' of previous line */
-#if OLD_NCURSES
-	{
-		int x = getcurx(win);
-		int i;
-		for (i = 0; i < width - x; i++)
-			waddch(win, ' ');
-	}
-#else
-	wclrtoeol(win);
-#endif
-}
-
-/*
- * Return current line of text. Called by dialog_textbox() and print_line().
- * 'page' should point to start of current line before calling, and will be
- * updated to point to start of next line.
- */
-static char *get_line(void)
-{
-	int i = 0;
-	static char line[MAX_LEN + 1];
-
-	end_reached = 0;
-	while (*page != '\n') {
-		if (*page == '\0') {
-			end_reached = 1;
-			break;
-		} else if (i < MAX_LEN)
-			line[i++] = *(page++);
-		else {
-			/* Truncate lines longer than MAX_LEN characters */
-			if (i == MAX_LEN)
-				line[i++] = '\0';
-			page++;
-		}
-	}
-	if (i <= MAX_LEN)
-		line[i] = '\0';
-	if (!end_reached)
-		page++;		/* move past '\n' */
-
-	return line;
-}
-
-/*
- * Print current position
- */
-static void print_position(WINDOW * win)
-{
-	int percent;
-
-	wattrset(win, dlg.position_indicator.atr);
-	wbkgdset(win, dlg.position_indicator.atr & A_COLOR);
-	percent = (page - buf) * 100 / strlen(buf);
-	wmove(win, getmaxy(win) - 3, getmaxx(win) - 9);
-	wprintw(win, "(%3d%%)", percent);
-}
diff --git a/support/kconfig/lxdialog/util.c b/support/kconfig/lxdialog/util.c
deleted file mode 100644
index 58a8289..0000000
--- a/support/kconfig/lxdialog/util.c
+++ /dev/null
@@ -1,713 +0,0 @@
-/*
- *  util.c
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include <stdarg.h>
-
-#include "dialog.h"
-
-/* Needed in signal handler in mconf.c */
-int saved_x, saved_y;
-
-struct dialog_info dlg;
-
-static void set_mono_theme(void)
-{
-	dlg.screen.atr = A_NORMAL;
-	dlg.shadow.atr = A_NORMAL;
-	dlg.dialog.atr = A_NORMAL;
-	dlg.title.atr = A_BOLD;
-	dlg.border.atr = A_NORMAL;
-	dlg.button_active.atr = A_REVERSE;
-	dlg.button_inactive.atr = A_DIM;
-	dlg.button_key_active.atr = A_REVERSE;
-	dlg.button_key_inactive.atr = A_BOLD;
-	dlg.button_label_active.atr = A_REVERSE;
-	dlg.button_label_inactive.atr = A_NORMAL;
-	dlg.inputbox.atr = A_NORMAL;
-	dlg.inputbox_border.atr = A_NORMAL;
-	dlg.searchbox.atr = A_NORMAL;
-	dlg.searchbox_title.atr = A_BOLD;
-	dlg.searchbox_border.atr = A_NORMAL;
-	dlg.position_indicator.atr = A_BOLD;
-	dlg.menubox.atr = A_NORMAL;
-	dlg.menubox_border.atr = A_NORMAL;
-	dlg.item.atr = A_NORMAL;
-	dlg.item_selected.atr = A_REVERSE;
-	dlg.tag.atr = A_BOLD;
-	dlg.tag_selected.atr = A_REVERSE;
-	dlg.tag_key.atr = A_BOLD;
-	dlg.tag_key_selected.atr = A_REVERSE;
-	dlg.check.atr = A_BOLD;
-	dlg.check_selected.atr = A_REVERSE;
-	dlg.uarrow.atr = A_BOLD;
-	dlg.darrow.atr = A_BOLD;
-}
-
-#define DLG_COLOR(dialog, f, b, h) \
-do {                               \
-	dlg.dialog.fg = (f);       \
-	dlg.dialog.bg = (b);       \
-	dlg.dialog.hl = (h);       \
-} while (0)
-
-static void set_classic_theme(void)
-{
-	DLG_COLOR(screen,                COLOR_CYAN,   COLOR_BLUE,   true);
-	DLG_COLOR(shadow,                COLOR_BLACK,  COLOR_BLACK,  true);
-	DLG_COLOR(dialog,                COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(title,                 COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(border,                COLOR_WHITE,  COLOR_WHITE,  true);
-	DLG_COLOR(button_active,         COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(button_inactive,       COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(button_key_active,     COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(button_key_inactive,   COLOR_RED,    COLOR_WHITE,  false);
-	DLG_COLOR(button_label_active,   COLOR_YELLOW, COLOR_BLUE,   true);
-	DLG_COLOR(button_label_inactive, COLOR_BLACK,  COLOR_WHITE,  true);
-	DLG_COLOR(inputbox,              COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(inputbox_border,       COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(searchbox,             COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(searchbox_title,       COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(searchbox_border,      COLOR_WHITE,  COLOR_WHITE,  true);
-	DLG_COLOR(position_indicator,    COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(menubox,               COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(menubox_border,        COLOR_WHITE,  COLOR_WHITE,  true);
-	DLG_COLOR(item,                  COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(item_selected,         COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(tag,                   COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(tag_selected,          COLOR_YELLOW, COLOR_BLUE,   true);
-	DLG_COLOR(tag_key,               COLOR_YELLOW, COLOR_WHITE,  true);
-	DLG_COLOR(tag_key_selected,      COLOR_YELLOW, COLOR_BLUE,   true);
-	DLG_COLOR(check,                 COLOR_BLACK,  COLOR_WHITE,  false);
-	DLG_COLOR(check_selected,        COLOR_WHITE,  COLOR_BLUE,   true);
-	DLG_COLOR(uarrow,                COLOR_GREEN,  COLOR_WHITE,  true);
-	DLG_COLOR(darrow,                COLOR_GREEN,  COLOR_WHITE,  true);
-}
-
-static void set_blackbg_theme(void)
-{
-	DLG_COLOR(screen, COLOR_RED,   COLOR_BLACK, true);
-	DLG_COLOR(shadow, COLOR_BLACK, COLOR_BLACK, false);
-	DLG_COLOR(dialog, COLOR_WHITE, COLOR_BLACK, false);
-	DLG_COLOR(title,  COLOR_RED,   COLOR_BLACK, false);
-	DLG_COLOR(border, COLOR_BLACK, COLOR_BLACK, true);
-
-	DLG_COLOR(button_active,         COLOR_YELLOW, COLOR_RED,   false);
-	DLG_COLOR(button_inactive,       COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(button_key_active,     COLOR_YELLOW, COLOR_RED,   true);
-	DLG_COLOR(button_key_inactive,   COLOR_RED,    COLOR_BLACK, false);
-	DLG_COLOR(button_label_active,   COLOR_WHITE,  COLOR_RED,   false);
-	DLG_COLOR(button_label_inactive, COLOR_BLACK,  COLOR_BLACK, true);
-
-	DLG_COLOR(inputbox,         COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(inputbox_border,  COLOR_YELLOW, COLOR_BLACK, false);
-
-	DLG_COLOR(searchbox,        COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(searchbox_title,  COLOR_YELLOW, COLOR_BLACK, true);
-	DLG_COLOR(searchbox_border, COLOR_BLACK,  COLOR_BLACK, true);
-
-	DLG_COLOR(position_indicator, COLOR_RED, COLOR_BLACK,  false);
-
-	DLG_COLOR(menubox,          COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(menubox_border,   COLOR_BLACK,  COLOR_BLACK, true);
-
-	DLG_COLOR(item,             COLOR_WHITE, COLOR_BLACK, false);
-	DLG_COLOR(item_selected,    COLOR_WHITE, COLOR_RED,   false);
-
-	DLG_COLOR(tag,              COLOR_RED,    COLOR_BLACK, false);
-	DLG_COLOR(tag_selected,     COLOR_YELLOW, COLOR_RED,   true);
-	DLG_COLOR(tag_key,          COLOR_RED,    COLOR_BLACK, false);
-	DLG_COLOR(tag_key_selected, COLOR_YELLOW, COLOR_RED,   true);
-
-	DLG_COLOR(check,            COLOR_YELLOW, COLOR_BLACK, false);
-	DLG_COLOR(check_selected,   COLOR_YELLOW, COLOR_RED,   true);
-
-	DLG_COLOR(uarrow, COLOR_RED, COLOR_BLACK, false);
-	DLG_COLOR(darrow, COLOR_RED, COLOR_BLACK, false);
-}
-
-static void set_bluetitle_theme(void)
-{
-	set_classic_theme();
-	DLG_COLOR(title,               COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(button_key_active,   COLOR_YELLOW, COLOR_BLUE,  true);
-	DLG_COLOR(button_label_active, COLOR_WHITE,  COLOR_BLUE,  true);
-	DLG_COLOR(searchbox_title,     COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(position_indicator,  COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(tag,                 COLOR_BLUE,   COLOR_WHITE, true);
-	DLG_COLOR(tag_key,             COLOR_BLUE,   COLOR_WHITE, true);
-
-}
-
-/*
- * Select color theme
- */
-static int set_theme(const char *theme)
-{
-	int use_color = 1;
-	if (!theme)
-		set_bluetitle_theme();
-	else if (strcmp(theme, "classic") == 0)
-		set_classic_theme();
-	else if (strcmp(theme, "bluetitle") == 0)
-		set_bluetitle_theme();
-	else if (strcmp(theme, "blackbg") == 0)
-		set_blackbg_theme();
-	else if (strcmp(theme, "mono") == 0)
-		use_color = 0;
-
-	return use_color;
-}
-
-static void init_one_color(struct dialog_color *color)
-{
-	static int pair = 0;
-
-	pair++;
-	init_pair(pair, color->fg, color->bg);
-	if (color->hl)
-		color->atr = A_BOLD | COLOR_PAIR(pair);
-	else
-		color->atr = COLOR_PAIR(pair);
-}
-
-static void init_dialog_colors(void)
-{
-	init_one_color(&dlg.screen);
-	init_one_color(&dlg.shadow);
-	init_one_color(&dlg.dialog);
-	init_one_color(&dlg.title);
-	init_one_color(&dlg.border);
-	init_one_color(&dlg.button_active);
-	init_one_color(&dlg.button_inactive);
-	init_one_color(&dlg.button_key_active);
-	init_one_color(&dlg.button_key_inactive);
-	init_one_color(&dlg.button_label_active);
-	init_one_color(&dlg.button_label_inactive);
-	init_one_color(&dlg.inputbox);
-	init_one_color(&dlg.inputbox_border);
-	init_one_color(&dlg.searchbox);
-	init_one_color(&dlg.searchbox_title);
-	init_one_color(&dlg.searchbox_border);
-	init_one_color(&dlg.position_indicator);
-	init_one_color(&dlg.menubox);
-	init_one_color(&dlg.menubox_border);
-	init_one_color(&dlg.item);
-	init_one_color(&dlg.item_selected);
-	init_one_color(&dlg.tag);
-	init_one_color(&dlg.tag_selected);
-	init_one_color(&dlg.tag_key);
-	init_one_color(&dlg.tag_key_selected);
-	init_one_color(&dlg.check);
-	init_one_color(&dlg.check_selected);
-	init_one_color(&dlg.uarrow);
-	init_one_color(&dlg.darrow);
-}
-
-/*
- * Setup for color display
- */
-static void color_setup(const char *theme)
-{
-	int use_color;
-
-	use_color = set_theme(theme);
-	if (use_color && has_colors()) {
-		start_color();
-		init_dialog_colors();
-	} else
-		set_mono_theme();
-}
-
-/*
- * Set window to attribute 'attr'
- */
-void attr_clear(WINDOW * win, int height, int width, chtype attr)
-{
-	int i, j;
-
-	wattrset(win, attr);
-	for (i = 0; i < height; i++) {
-		wmove(win, i, 0);
-		for (j = 0; j < width; j++)
-			waddch(win, ' ');
-	}
-	touchwin(win);
-}
-
-void dialog_clear(void)
-{
-	int lines, columns;
-
-	lines = getmaxy(stdscr);
-	columns = getmaxx(stdscr);
-
-	attr_clear(stdscr, lines, columns, dlg.screen.atr);
-	/* Display background title if it exists ... - SLH */
-	if (dlg.backtitle != NULL) {
-		int i, len = 0, skip = 0;
-		struct subtitle_list *pos;
-
-		wattrset(stdscr, dlg.screen.atr);
-		mvwaddstr(stdscr, 0, 1, (char *)dlg.backtitle);
-
-		for (pos = dlg.subtitles; pos != NULL; pos = pos->next) {
-			/* 3 is for the arrow and spaces */
-			len += strlen(pos->text) + 3;
-		}
-
-		wmove(stdscr, 1, 1);
-		if (len > columns - 2) {
-			const char *ellipsis = "[...] ";
-			waddstr(stdscr, ellipsis);
-			skip = len - (columns - 2 - strlen(ellipsis));
-		}
-
-		for (pos = dlg.subtitles; pos != NULL; pos = pos->next) {
-			if (skip == 0)
-				waddch(stdscr, ACS_RARROW);
-			else
-				skip--;
-
-			if (skip == 0)
-				waddch(stdscr, ' ');
-			else
-				skip--;
-
-			if (skip < strlen(pos->text)) {
-				waddstr(stdscr, pos->text + skip);
-				skip = 0;
-			} else
-				skip -= strlen(pos->text);
-
-			if (skip == 0)
-				waddch(stdscr, ' ');
-			else
-				skip--;
-		}
-
-		for (i = len + 1; i < columns - 1; i++)
-			waddch(stdscr, ACS_HLINE);
-	}
-	wnoutrefresh(stdscr);
-}
-
-/*
- * Do some initialization for dialog
- */
-int init_dialog(const char *backtitle)
-{
-	int height, width;
-
-	initscr();		/* Init curses */
-
-	/* Get current cursor position for signal handler in mconf.c */
-	getyx(stdscr, saved_y, saved_x);
-
-	getmaxyx(stdscr, height, width);
-	if (height < WINDOW_HEIGTH_MIN || width < WINDOW_WIDTH_MIN) {
-		endwin();
-		return -ERRDISPLAYTOOSMALL;
-	}
-
-	dlg.backtitle = backtitle;
-	color_setup(getenv("MENUCONFIG_COLOR"));
-
-	keypad(stdscr, TRUE);
-	cbreak();
-	noecho();
-	dialog_clear();
-
-	return 0;
-}
-
-void set_dialog_backtitle(const char *backtitle)
-{
-	dlg.backtitle = backtitle;
-}
-
-void set_dialog_subtitles(struct subtitle_list *subtitles)
-{
-	dlg.subtitles = subtitles;
-}
-
-/*
- * End using dialog functions.
- */
-void end_dialog(int x, int y)
-{
-	/* move cursor back to original position */
-	move(y, x);
-	refresh();
-	endwin();
-}
-
-/* Print the title of the dialog. Center the title and truncate
- * tile if wider than dialog (- 2 chars).
- **/
-void print_title(WINDOW *dialog, const char *title, int width)
-{
-	if (title) {
-		int tlen = MIN(width - 2, strlen(title));
-		wattrset(dialog, dlg.title.atr);
-		mvwaddch(dialog, 0, (width - tlen) / 2 - 1, ' ');
-		mvwaddnstr(dialog, 0, (width - tlen)/2, title, tlen);
-		waddch(dialog, ' ');
-	}
-}
-
-/*
- * Print a string of text in a window, automatically wrap around to the
- * next line if the string is too long to fit on one line. Newline
- * characters '\n' are propperly processed.  We start on a new line
- * if there is no room for at least 4 nonblanks following a double-space.
- */
-void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x)
-{
-	int newl, cur_x, cur_y;
-	int prompt_len, room, wlen;
-	char tempstr[MAX_LEN + 1], *word, *sp, *sp2, *newline_separator = 0;
-
-	strcpy(tempstr, prompt);
-
-	prompt_len = strlen(tempstr);
-
-	if (prompt_len <= width - x * 2) {	/* If prompt is short */
-		wmove(win, y, (width - prompt_len) / 2);
-		waddstr(win, tempstr);
-	} else {
-		cur_x = x;
-		cur_y = y;
-		newl = 1;
-		word = tempstr;
-		while (word && *word) {
-			sp = strpbrk(word, "\n ");
-			if (sp && *sp == '\n')
-				newline_separator = sp;
-
-			if (sp)
-				*sp++ = 0;
-
-			/* Wrap to next line if either the word does not fit,
-			   or it is the first word of a new sentence, and it is
-			   short, and the next word does not fit. */
-			room = width - cur_x;
-			wlen = strlen(word);
-			if (wlen > room ||
-			    (newl && wlen < 4 && sp
-			     && wlen + 1 + strlen(sp) > room
-			     && (!(sp2 = strpbrk(sp, "\n "))
-				 || wlen + 1 + (sp2 - sp) > room))) {
-				cur_y++;
-				cur_x = x;
-			}
-			wmove(win, cur_y, cur_x);
-			waddstr(win, word);
-			getyx(win, cur_y, cur_x);
-
-			/* Move to the next line if the word separator was a newline */
-			if (newline_separator) {
-				cur_y++;
-				cur_x = x;
-				newline_separator = 0;
-			} else
-				cur_x++;
-
-			if (sp && *sp == ' ') {
-				cur_x++;	/* double space */
-				while (*++sp == ' ') ;
-				newl = 1;
-			} else
-				newl = 0;
-			word = sp;
-		}
-	}
-}
-
-/*
- * Print a button
- */
-void print_button(WINDOW * win, const char *label, int y, int x, int selected)
-{
-	int i, temp;
-
-	wmove(win, y, x);
-	wattrset(win, selected ? dlg.button_active.atr
-		 : dlg.button_inactive.atr);
-	waddstr(win, "<");
-	temp = strspn(label, " ");
-	label += temp;
-	wattrset(win, selected ? dlg.button_label_active.atr
-		 : dlg.button_label_inactive.atr);
-	for (i = 0; i < temp; i++)
-		waddch(win, ' ');
-	wattrset(win, selected ? dlg.button_key_active.atr
-		 : dlg.button_key_inactive.atr);
-	waddch(win, label[0]);
-	wattrset(win, selected ? dlg.button_label_active.atr
-		 : dlg.button_label_inactive.atr);
-	waddstr(win, (char *)label + 1);
-	wattrset(win, selected ? dlg.button_active.atr
-		 : dlg.button_inactive.atr);
-	waddstr(win, ">");
-	wmove(win, y, x + temp + 1);
-}
-
-/*
- * Draw a rectangular box with line drawing characters
- */
-void
-draw_box(WINDOW * win, int y, int x, int height, int width,
-	 chtype box, chtype border)
-{
-	int i, j;
-
-	wattrset(win, 0);
-	for (i = 0; i < height; i++) {
-		wmove(win, y + i, x);
-		for (j = 0; j < width; j++)
-			if (!i && !j)
-				waddch(win, border | ACS_ULCORNER);
-			else if (i == height - 1 && !j)
-				waddch(win, border | ACS_LLCORNER);
-			else if (!i && j == width - 1)
-				waddch(win, box | ACS_URCORNER);
-			else if (i == height - 1 && j == width - 1)
-				waddch(win, box | ACS_LRCORNER);
-			else if (!i)
-				waddch(win, border | ACS_HLINE);
-			else if (i == height - 1)
-				waddch(win, box | ACS_HLINE);
-			else if (!j)
-				waddch(win, border | ACS_VLINE);
-			else if (j == width - 1)
-				waddch(win, box | ACS_VLINE);
-			else
-				waddch(win, box | ' ');
-	}
-}
-
-/*
- * Draw shadows along the right and bottom edge to give a more 3D look
- * to the boxes
- */
-void draw_shadow(WINDOW * win, int y, int x, int height, int width)
-{
-	int i;
-
-	if (has_colors()) {	/* Whether terminal supports color? */
-		wattrset(win, dlg.shadow.atr);
-		wmove(win, y + height, x + 2);
-		for (i = 0; i < width; i++)
-			waddch(win, winch(win) & A_CHARTEXT);
-		for (i = y + 1; i < y + height + 1; i++) {
-			wmove(win, i, x + width);
-			waddch(win, winch(win) & A_CHARTEXT);
-			waddch(win, winch(win) & A_CHARTEXT);
-		}
-		wnoutrefresh(win);
-	}
-}
-
-/*
- *  Return the position of the first alphabetic character in a string.
- */
-int first_alpha(const char *string, const char *exempt)
-{
-	int i, in_paren = 0, c;
-
-	for (i = 0; i < strlen(string); i++) {
-		c = tolower(string[i]);
-
-		if (strchr("<[(", c))
-			++in_paren;
-		if (strchr(">])", c) && in_paren > 0)
-			--in_paren;
-
-		if ((!in_paren) && isalpha(c) && strchr(exempt, c) == 0)
-			return i;
-	}
-
-	return 0;
-}
-
-/*
- * ncurses uses ESC to detect escaped char sequences. This resutl in
- * a small timeout before ESC is actually delivered to the application.
- * lxdialog suggest <ESC> <ESC> which is correctly translated to two
- * times esc. But then we need to ignore the second esc to avoid stepping
- * out one menu too much. Filter away all escaped key sequences since
- * keypad(FALSE) turn off ncurses support for escape sequences - and thats
- * needed to make notimeout() do as expected.
- */
-int on_key_esc(WINDOW *win)
-{
-	int key;
-	int key2;
-	int key3;
-
-	nodelay(win, TRUE);
-	keypad(win, FALSE);
-	key = wgetch(win);
-	key2 = wgetch(win);
-	do {
-		key3 = wgetch(win);
-	} while (key3 != ERR);
-	nodelay(win, FALSE);
-	keypad(win, TRUE);
-	if (key == KEY_ESC && key2 == ERR)
-		return KEY_ESC;
-	else if (key != ERR && key != KEY_ESC && key2 == ERR)
-		ungetch(key);
-
-	return -1;
-}
-
-/* redraw screen in new size */
-int on_key_resize(void)
-{
-	dialog_clear();
-	return KEY_RESIZE;
-}
-
-struct dialog_list *item_cur;
-struct dialog_list item_nil;
-struct dialog_list *item_head;
-
-void item_reset(void)
-{
-	struct dialog_list *p, *next;
-
-	for (p = item_head; p; p = next) {
-		next = p->next;
-		free(p);
-	}
-	item_head = NULL;
-	item_cur = &item_nil;
-}
-
-void item_make(const char *fmt, ...)
-{
-	va_list ap;
-	struct dialog_list *p = malloc(sizeof(*p));
-
-	if (item_head)
-		item_cur->next = p;
-	else
-		item_head = p;
-	item_cur = p;
-	memset(p, 0, sizeof(*p));
-
-	va_start(ap, fmt);
-	vsnprintf(item_cur->node.str, sizeof(item_cur->node.str), fmt, ap);
-	va_end(ap);
-}
-
-void item_add_str(const char *fmt, ...)
-{
-	va_list ap;
-        size_t avail;
-
-	avail = sizeof(item_cur->node.str) - strlen(item_cur->node.str);
-
-	va_start(ap, fmt);
-	vsnprintf(item_cur->node.str + strlen(item_cur->node.str),
-		  avail, fmt, ap);
-	item_cur->node.str[sizeof(item_cur->node.str) - 1] = '\0';
-	va_end(ap);
-}
-
-void item_set_tag(char tag)
-{
-	item_cur->node.tag = tag;
-}
-void item_set_data(void *ptr)
-{
-	item_cur->node.data = ptr;
-}
-
-void item_set_selected(int val)
-{
-	item_cur->node.selected = val;
-}
-
-int item_activate_selected(void)
-{
-	item_foreach()
-		if (item_is_selected())
-			return 1;
-	return 0;
-}
-
-void *item_data(void)
-{
-	return item_cur->node.data;
-}
-
-char item_tag(void)
-{
-	return item_cur->node.tag;
-}
-
-int item_count(void)
-{
-	int n = 0;
-	struct dialog_list *p;
-
-	for (p = item_head; p; p = p->next)
-		n++;
-	return n;
-}
-
-void item_set(int n)
-{
-	int i = 0;
-	item_foreach()
-		if (i++ == n)
-			return;
-}
-
-int item_n(void)
-{
-	int n = 0;
-	struct dialog_list *p;
-
-	for (p = item_head; p; p = p->next) {
-		if (p == item_cur)
-			return n;
-		n++;
-	}
-	return 0;
-}
-
-const char *item_str(void)
-{
-	return item_cur->node.str;
-}
-
-int item_is_selected(void)
-{
-	return (item_cur->node.selected != 0);
-}
-
-int item_is_tag(char tag)
-{
-	return (item_cur->node.tag == tag);
-}
diff --git a/support/kconfig/lxdialog/yesno.c b/support/kconfig/lxdialog/yesno.c
deleted file mode 100644
index 676fb2f..0000000
--- a/support/kconfig/lxdialog/yesno.c
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *  yesno.c -- implements the yes/no box
- *
- *  ORIGINAL AUTHOR: Savio Lam (lam836@cs.cuhk.hk)
- *  MODIFIED FOR LINUX KERNEL CONFIG BY: William Roadcap (roadcap@cfw.com)
- *
- *  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 2
- *  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, write to the Free Software
- *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
-#include "dialog.h"
-
-/*
- * Display termination buttons
- */
-static void print_buttons(WINDOW * dialog, int height, int width, int selected)
-{
-	int x = width / 2 - 10;
-	int y = height - 2;
-
-	print_button(dialog, gettext(" Yes "), y, x, selected == 0);
-	print_button(dialog, gettext("  No  "), y, x + 13, selected == 1);
-
-	wmove(dialog, y, x + 1 + 13 * selected);
-	wrefresh(dialog);
-}
-
-/*
- * Display a dialog box with two buttons - Yes and No
- */
-int dialog_yesno(const char *title, const char *prompt, int height, int width)
-{
-	int i, x, y, key = 0, button = 0;
-	WINDOW *dialog;
-
-do_resize:
-	if (getmaxy(stdscr) < (height + YESNO_HEIGTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-	if (getmaxx(stdscr) < (width + YESNO_WIDTH_MIN))
-		return -ERRDISPLAYTOOSMALL;
-
-	/* center dialog box on screen */
-	x = (getmaxx(stdscr) - width) / 2;
-	y = (getmaxy(stdscr) - height) / 2;
-
-	draw_shadow(stdscr, y, x, height, width);
-
-	dialog = newwin(height, width, y, x);
-	keypad(dialog, TRUE);
-
-	draw_box(dialog, 0, 0, height, width,
-		 dlg.dialog.atr, dlg.border.atr);
-	wattrset(dialog, dlg.border.atr);
-	mvwaddch(dialog, height - 3, 0, ACS_LTEE);
-	for (i = 0; i < width - 2; i++)
-		waddch(dialog, ACS_HLINE);
-	wattrset(dialog, dlg.dialog.atr);
-	waddch(dialog, ACS_RTEE);
-
-	print_title(dialog, title, width);
-
-	wattrset(dialog, dlg.dialog.atr);
-	print_autowrap(dialog, prompt, width - 2, 1, 3);
-
-	print_buttons(dialog, height, width, 0);
-
-	while (key != KEY_ESC) {
-		key = wgetch(dialog);
-		switch (key) {
-		case 'Y':
-		case 'y':
-			delwin(dialog);
-			return 0;
-		case 'N':
-		case 'n':
-			delwin(dialog);
-			return 1;
-
-		case TAB:
-		case KEY_LEFT:
-		case KEY_RIGHT:
-			button = ((key == KEY_LEFT ? --button : ++button) < 0) ? 1 : (button > 1 ? 0 : button);
-
-			print_buttons(dialog, height, width, button);
-			wrefresh(dialog);
-			break;
-		case ' ':
-		case '\n':
-			delwin(dialog);
-			return button;
-		case KEY_ESC:
-			key = on_key_esc(dialog);
-			break;
-		case KEY_RESIZE:
-			delwin(dialog);
-			on_key_resize();
-			goto do_resize;
-		}
-	}
-
-	delwin(dialog);
-	return key;		/* ESC pressed */
-}
diff --git a/support/kconfig/mconf.c b/support/kconfig/mconf.c
deleted file mode 100644
index 12f8c6c..0000000
--- a/support/kconfig/mconf.c
+++ /dev/null
@@ -1,1037 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- *
- * Introduced single menu mode (show all sub-menus in one large tree).
- * 2002-11-06 Petr Baudis <pasky@ucw.cz>
- *
- * i18n, 2005, Arnaldo Carvalho de Melo <acme@conectiva.com.br>
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <signal.h>
-#include <unistd.h>
-#include <locale.h>
-
-#include "lkc.h"
-#include "lxdialog/dialog.h"
-
-static const char mconf_readme[] = N_(
-"Overview\n"
-"--------\n"
-"This interface lets you select features and parameters for the build.\n"
-"Features can either be built-in, modularized, or ignored. Parameters\n"
-"must be entered in as decimal or hexadecimal numbers or text.\n"
-"\n"
-"Menu items beginning with following braces represent features that\n"
-"  [ ] can be built in or removed\n"
-"  < > can be built in, modularized or removed\n"
-"  { } can be built in or modularized (selected by other feature)\n"
-"  - - are selected by other feature,\n"
-"while *, M or whitespace inside braces means to build in, build as\n"
-"a module or to exclude the feature respectively.\n"
-"\n"
-"To change any of these features, highlight it with the cursor\n"
-"keys and press <Y> to build it in, <M> to make it a module or\n"
-"<N> to remove it.  You may also press the <Space Bar> to cycle\n"
-"through the available options (i.e. Y->N->M->Y).\n"
-"\n"
-"Some additional keyboard hints:\n"
-"\n"
-"Menus\n"
-"----------\n"
-"o  Use the Up/Down arrow keys (cursor keys) to highlight the item you\n"
-"   wish to change or the submenu you wish to select and press <Enter>.\n"
-"   Submenus are designated by \"--->\", empty ones by \"----\".\n"
-"\n"
-"   Shortcut: Press the option's highlighted letter (hotkey).\n"
-"             Pressing a hotkey more than once will sequence\n"
-"             through all visible items which use that hotkey.\n"
-"\n"
-"   You may also use the <PAGE UP> and <PAGE DOWN> keys to scroll\n"
-"   unseen options into view.\n"
-"\n"
-"o  To exit a menu use the cursor keys to highlight the <Exit> button\n"
-"   and press <ENTER>.\n"
-"\n"
-"   Shortcut: Press <ESC><ESC> or <E> or <X> if there is no hotkey\n"
-"             using those letters.  You may press a single <ESC>, but\n"
-"             there is a delayed response which you may find annoying.\n"
-"\n"
-"   Also, the <TAB> and cursor keys will cycle between <Select>,\n"
-"   <Exit>, <Help>, <Save>, and <Load>.\n"
-"\n"
-"o  To get help with an item, use the cursor keys to highlight <Help>\n"
-"   and press <ENTER>.\n"
-"\n"
-"   Shortcut: Press <H> or <?>.\n"
-"\n"
-"o  To toggle the display of hidden options, press <Z>.\n"
-"\n"
-"\n"
-"Radiolists  (Choice lists)\n"
-"-----------\n"
-"o  Use the cursor keys to select the option you wish to set and press\n"
-"   <S> or the <SPACE BAR>.\n"
-"\n"
-"   Shortcut: Press the first letter of the option you wish to set then\n"
-"             press <S> or <SPACE BAR>.\n"
-"\n"
-"o  To see available help for the item, use the cursor keys to highlight\n"
-"   <Help> and Press <ENTER>.\n"
-"\n"
-"   Shortcut: Press <H> or <?>.\n"
-"\n"
-"   Also, the <TAB> and cursor keys will cycle between <Select> and\n"
-"   <Help>\n"
-"\n"
-"\n"
-"Data Entry\n"
-"-----------\n"
-"o  Enter the requested information and press <ENTER>\n"
-"   If you are entering hexadecimal values, it is not necessary to\n"
-"   add the '0x' prefix to the entry.\n"
-"\n"
-"o  For help, use the <TAB> or cursor keys to highlight the help option\n"
-"   and press <ENTER>.  You can try <TAB><H> as well.\n"
-"\n"
-"\n"
-"Text Box    (Help Window)\n"
-"--------\n"
-"o  Use the cursor keys to scroll up/down/left/right.  The VI editor\n"
-"   keys h,j,k,l function here as do <u>, <d>, <SPACE BAR> and <B> for\n"
-"   those who are familiar with less and lynx.\n"
-"\n"
-"o  Press <E>, <X>, <q>, <Enter> or <Esc><Esc> to exit.\n"
-"\n"
-"\n"
-"Alternate Configuration Files\n"
-"-----------------------------\n"
-"Menuconfig supports the use of alternate configuration files for\n"
-"those who, for various reasons, find it necessary to switch\n"
-"between different configurations.\n"
-"\n"
-"The <Save> button will let you save the current configuration to\n"
-"a file of your choosing.  Use the <Load> button to load a previously\n"
-"saved alternate configuration.\n"
-"\n"
-"Even if you don't use alternate configuration files, but you find\n"
-"during a Menuconfig session that you have completely messed up your\n"
-"settings, you may use the <Load> button to restore your previously\n"
-"saved settings from \".config\" without restarting Menuconfig.\n"
-"\n"
-"Other information\n"
-"-----------------\n"
-"If you use Menuconfig in an XTERM window, make sure you have your\n"
-"$TERM variable set to point to an xterm definition which supports\n"
-"color.  Otherwise, Menuconfig will look rather bad.  Menuconfig will\n"
-"not display correctly in an RXVT window because rxvt displays only one\n"
-"intensity of color, bright.\n"
-"\n"
-"Menuconfig will display larger menus on screens or xterms which are\n"
-"set to display more than the standard 25 row by 80 column geometry.\n"
-"In order for this to work, the \"stty size\" command must be able to\n"
-"display the screen's current row and column geometry.  I STRONGLY\n"
-"RECOMMEND that you make sure you do NOT have the shell variables\n"
-"LINES and COLUMNS exported into your environment.  Some distributions\n"
-"export those variables via /etc/profile.  Some ncurses programs can\n"
-"become confused when those variables (LINES & COLUMNS) don't reflect\n"
-"the true screen size.\n"
-"\n"
-"Optional personality available\n"
-"------------------------------\n"
-"If you prefer to have all of the options listed in a single menu,\n"
-"rather than the default multimenu hierarchy, run the menuconfig with\n"
-"MENUCONFIG_MODE environment variable set to single_menu. Example:\n"
-"\n"
-"make MENUCONFIG_MODE=single_menu menuconfig\n"
-"\n"
-"<Enter> will then unroll the appropriate category, or enfold it if it\n"
-"is already unrolled.\n"
-"\n"
-"Note that this mode can eventually be a little more CPU expensive\n"
-"(especially with a larger number of unrolled categories) than the\n"
-"default mode.\n"
-"\n"
-"Different color themes available\n"
-"--------------------------------\n"
-"It is possible to select different color themes using the variable\n"
-"MENUCONFIG_COLOR. To select a theme use:\n"
-"\n"
-"make MENUCONFIG_COLOR=<theme> menuconfig\n"
-"\n"
-"Available themes are\n"
-" mono       => selects colors suitable for monochrome displays\n"
-" blackbg    => selects a color scheme with black background\n"
-" classic    => theme with blue background. The classic look\n"
-" bluetitle  => an LCD friendly version of classic. (default)\n"
-"\n"),
-menu_instructions[] = N_(
-	"Arrow keys navigate the menu.  "
-	"<Enter> selects submenus ---> (or empty submenus ----).  "
-	"Highlighted letters are hotkeys.  "
-	"Pressing <Y> selectes a feature, while <N> will exclude a feature.  "
-	"Press <Esc><Esc> to exit, <?> for Help, </> for Search.  "
-	"Legend: [*] feature is selected  [ ] feature is excluded"),
-radiolist_instructions[] = N_(
-	"Use the arrow keys to navigate this window or "
-	"press the hotkey of the item you wish to select "
-	"followed by the <SPACE BAR>. "
-	"Press <?> for additional information about this option."),
-inputbox_instructions_int[] = N_(
-	"Please enter a decimal value. "
-	"Fractions will not be accepted.  "
-	"Use the <TAB> key to move from the input field to the buttons below it."),
-inputbox_instructions_hex[] = N_(
-	"Please enter a hexadecimal value. "
-	"Use the <TAB> key to move from the input field to the buttons below it."),
-inputbox_instructions_string[] = N_(
-	"Please enter a string value. "
-	"Use the <TAB> key to move from the input field to the buttons below it."),
-setmod_text[] = N_(
-	"This feature depends on another which has been configured as a module.\n"
-	"As a result, this feature will be built as a module."),
-load_config_text[] = N_(
-	"Enter the name of the configuration file you wish to load.  "
-	"Accept the name shown to restore the configuration you "
-	"last retrieved.  Leave blank to abort."),
-load_config_help[] = N_(
-	"\n"
-	"For various reasons, one may wish to keep several different\n"
-	"configurations available on a single machine.\n"
-	"\n"
-	"If you have saved a previous configuration in a file other than the\n"
-	"default one, entering its name here will allow you to modify that\n"
-	"configuration.\n"
-	"\n"
-	"If you are uncertain, then you have probably never used alternate\n"
-	"configuration files. You should therefore leave this blank to abort.\n"),
-save_config_text[] = N_(
-	"Enter a filename to which this configuration should be saved "
-	"as an alternate.  Leave blank to abort."),
-save_config_help[] = N_(
-	"\n"
-	"For various reasons, one may wish to keep different configurations\n"
-	"available on a single machine.\n"
-	"\n"
-	"Entering a file name here will allow you to later retrieve, modify\n"
-	"and use the current configuration as an alternate to whatever\n"
-	"configuration options you have selected at that time.\n"
-	"\n"
-	"If you are uncertain what all this means then you should probably\n"
-	"leave this blank.\n"),
-search_help[] = N_(
-	"\n"
-	"Search for symbols and display their relations.\n"
-	"Regular expressions are allowed.\n"
-	"Example: search for \"^FOO\"\n"
-	"Result:\n"
-	"-----------------------------------------------------------------\n"
-	"Symbol: FOO [=m]\n"
-	"Type  : tristate\n"
-	"Prompt: Foo bus is used to drive the bar HW\n"
-	"  Location:\n"
-	"    -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
-	"      -> PCI support (PCI [=y])\n"
-	"(1)     -> PCI access mode (<choice> [=y])\n"
-	"  Defined at drivers/pci/Kconfig:47\n"
-	"  Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
-	"  Selects: LIBCRC32\n"
-	"  Selected by: BAR [=n]\n"
-	"-----------------------------------------------------------------\n"
-	"o The line 'Type:' shows the type of the configuration option for\n"
-	"  this symbol (boolean, tristate, string, ...)\n"
-	"o The line 'Prompt:' shows the text used in the menu structure for\n"
-	"  this symbol\n"
-	"o The 'Defined at' line tells at what file / line number the symbol\n"
-	"  is defined\n"
-	"o The 'Depends on:' line tells what symbols need to be defined for\n"
-	"  this symbol to be visible in the menu (selectable)\n"
-	"o The 'Location:' lines tells where in the menu structure this symbol\n"
-	"  is located\n"
-	"    A location followed by a [=y] indicates that this is a\n"
-	"    selectable menu item - and the current value is displayed inside\n"
-	"    brackets.\n"
-	"    Press the key in the (#) prefix to jump directly to that\n"
-	"    location. You will be returned to the current search results\n"
-	"    after exiting this new menu.\n"
-	"o The 'Selects:' line tells what symbols will be automatically\n"
-	"  selected if this symbol is selected (y or m)\n"
-	"o The 'Selected by' line tells what symbol has selected this symbol\n"
-	"\n"
-	"Only relevant lines are shown.\n"
-	"\n\n"
-	"Search examples:\n"
-	"Examples: USB	=> find all symbols containing USB\n"
-	"          ^USB => find all symbols starting with USB\n"
-	"          USB$ => find all symbols ending with USB\n"
-	"\n");
-
-static int indent;
-static struct menu *current_menu;
-static int child_count;
-static int single_menu_mode;
-static int show_all_options;
-static int save_and_exit;
-
-static void conf(struct menu *menu, struct menu *active_menu);
-static void conf_choice(struct menu *menu);
-static void conf_string(struct menu *menu);
-static void conf_load(void);
-static void conf_save(void);
-static int show_textbox_ext(const char *title, char *text, int r, int c,
-			    int *keys, int *vscroll, int *hscroll,
-			    update_text_fn update_text, void *data);
-static void show_textbox(const char *title, const char *text, int r, int c);
-static void show_helptext(const char *title, const char *text);
-static void show_help(struct menu *menu);
-
-static char filename[PATH_MAX+1];
-static void set_config_filename(const char *config_filename)
-{
-	static char menu_backtitle[PATH_MAX+128];
-	int size;
-
-	size = snprintf(menu_backtitle, sizeof(menu_backtitle),
-	                "%s - %s", config_filename, rootmenu.prompt->text);
-	if (size >= sizeof(menu_backtitle))
-		menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
-	set_dialog_backtitle(menu_backtitle);
-
-	size = snprintf(filename, sizeof(filename), "%s", config_filename);
-	if (size >= sizeof(filename))
-		filename[sizeof(filename)-1] = '\0';
-}
-
-struct subtitle_part {
-	struct list_head entries;
-	const char *text;
-};
-static LIST_HEAD(trail);
-
-static struct subtitle_list *subtitles;
-static void set_subtitle(void)
-{
-	struct subtitle_part *sp;
-	struct subtitle_list *pos, *tmp;
-
-	for (pos = subtitles; pos != NULL; pos = tmp) {
-		tmp = pos->next;
-		free(pos);
-	}
-
-	subtitles = NULL;
-	list_for_each_entry(sp, &trail, entries) {
-		if (sp->text) {
-			if (pos) {
-				pos->next = xcalloc(sizeof(*pos), 1);
-				pos = pos->next;
-			} else {
-				subtitles = pos = xcalloc(sizeof(*pos), 1);
-			}
-			pos->text = sp->text;
-		}
-	}
-
-	set_dialog_subtitles(subtitles);
-}
-
-static void reset_subtitle(void)
-{
-	struct subtitle_list *pos, *tmp;
-
-	for (pos = subtitles; pos != NULL; pos = tmp) {
-		tmp = pos->next;
-		free(pos);
-	}
-	subtitles = NULL;
-	set_dialog_subtitles(subtitles);
-}
-
-struct search_data {
-	struct list_head *head;
-	struct menu **targets;
-	int *keys;
-};
-
-static void update_text(char *buf, size_t start, size_t end, void *_data)
-{
-	struct search_data *data = _data;
-	struct jump_key *pos;
-	int k = 0;
-
-	list_for_each_entry(pos, data->head, entries) {
-		if (pos->offset >= start && pos->offset < end) {
-			char header[4];
-
-			if (k < JUMP_NB) {
-				int key = '0' + (pos->index % JUMP_NB) + 1;
-
-				sprintf(header, "(%c)", key);
-				data->keys[k] = key;
-				data->targets[k] = pos->target;
-				k++;
-			} else {
-				sprintf(header, "   ");
-			}
-
-			memcpy(buf + pos->offset, header, sizeof(header) - 1);
-		}
-	}
-	data->keys[k] = 0;
-}
-
-static void search_conf(void)
-{
-	struct symbol **sym_arr;
-	struct gstr res;
-	struct gstr title;
-	char *dialog_input;
-	int dres, vscroll = 0, hscroll = 0;
-	bool again;
-	struct gstr sttext;
-	struct subtitle_part stpart;
-
-	title = str_new();
-	str_printf( &title, _("Enter (sub)string or regexp to search for "
-			      "(with or without \"%s\")"), CONFIG_);
-
-again:
-	dialog_clear();
-	dres = dialog_inputbox(_("Search Configuration Parameter"),
-			      str_get(&title),
-			      10, 75, "");
-	switch (dres) {
-	case 0:
-		break;
-	case 1:
-		show_helptext(_("Search Configuration"), search_help);
-		goto again;
-	default:
-		str_free(&title);
-		return;
-	}
-
-	/* strip the prefix if necessary */
-	dialog_input = dialog_input_result;
-	if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
-		dialog_input += strlen(CONFIG_);
-
-	sttext = str_new();
-	str_printf(&sttext, "Search (%s)", dialog_input_result);
-	stpart.text = str_get(&sttext);
-	list_add_tail(&stpart.entries, &trail);
-
-	sym_arr = sym_re_search(dialog_input);
-	do {
-		LIST_HEAD(head);
-		struct menu *targets[JUMP_NB];
-		int keys[JUMP_NB + 1], i;
-		struct search_data data = {
-			.head = &head,
-			.targets = targets,
-			.keys = keys,
-		};
-		struct jump_key *pos, *tmp;
-
-		res = get_relations_str(sym_arr, &head);
-		set_subtitle();
-		dres = show_textbox_ext(_("Search Results"), (char *)
-					str_get(&res), 0, 0, keys, &vscroll,
-					&hscroll, &update_text, (void *)
-					&data);
-		again = false;
-		for (i = 0; i < JUMP_NB && keys[i]; i++)
-			if (dres == keys[i]) {
-				conf(targets[i]->parent, targets[i]);
-				again = true;
-			}
-		str_free(&res);
-		list_for_each_entry_safe(pos, tmp, &head, entries)
-			free(pos);
-	} while (again);
-	free(sym_arr);
-	str_free(&title);
-	list_del(trail.prev);
-	str_free(&sttext);
-}
-
-static void build_conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-	int type, tmp, doint = 2;
-	tristate val;
-	char ch;
-	bool visible;
-
-	/*
-	 * note: menu_is_visible() has side effect that it will
-	 * recalc the value of the symbol.
-	 */
-	visible = menu_is_visible(menu);
-	if (show_all_options && !menu_has_prompt(menu))
-		return;
-	else if (!show_all_options && !visible)
-		return;
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	if (!sym) {
-		if (prop && menu != current_menu) {
-			const char *prompt = menu_get_prompt(menu);
-			switch (prop->type) {
-			case P_MENU:
-				child_count++;
-				prompt = _(prompt);
-				if (single_menu_mode) {
-					item_make("%s%*c%s",
-						  menu->data ? "-->" : "++>",
-						  indent + 1, ' ', prompt);
-				} else
-					item_make("   %*c%s  %s",
-						  indent + 1, ' ', prompt,
-						  menu_is_empty(menu) ? "----" : "--->");
-				item_set_tag('m');
-				item_set_data(menu);
-				if (single_menu_mode && menu->data)
-					goto conf_childs;
-				return;
-			case P_COMMENT:
-				if (prompt) {
-					child_count++;
-					item_make("   %*c*** %s ***", indent + 1, ' ', _(prompt));
-					item_set_tag(':');
-					item_set_data(menu);
-				}
-				break;
-			default:
-				if (prompt) {
-					child_count++;
-					item_make("---%*c%s", indent + 1, ' ', _(prompt));
-					item_set_tag(':');
-					item_set_data(menu);
-				}
-			}
-		} else
-			doint = 0;
-		goto conf_childs;
-	}
-
-	type = sym_get_type(sym);
-	if (sym_is_choice(sym)) {
-		struct symbol *def_sym = sym_get_choice_value(sym);
-		struct menu *def_menu = NULL;
-
-		child_count++;
-		for (child = menu->list; child; child = child->next) {
-			if (menu_is_visible(child) && child->sym == def_sym)
-				def_menu = child;
-		}
-
-		val = sym_get_tristate_value(sym);
-		if (sym_is_changable(sym)) {
-			switch (type) {
-			case S_BOOLEAN:
-				item_make("[%c]", val == no ? ' ' : '*');
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes: ch = '*'; break;
-				case mod: ch = 'M'; break;
-				default:  ch = ' '; break;
-				}
-				item_make("<%c>", ch);
-				break;
-			}
-			item_set_tag('t');
-			item_set_data(menu);
-		} else {
-			item_make("   ");
-			item_set_tag(def_menu ? 't' : ':');
-			item_set_data(menu);
-		}
-
-		item_add_str("%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
-		if (val == yes) {
-			if (def_menu) {
-				item_add_str(" (%s)", _(menu_get_prompt(def_menu)));
-				item_add_str("  --->");
-				if (def_menu->list) {
-					indent += 2;
-					build_conf(def_menu);
-					indent -= 2;
-				}
-			}
-			return;
-		}
-	} else {
-		if (menu == current_menu) {
-			item_make("---%*c%s", indent + 1, ' ', _(menu_get_prompt(menu)));
-			item_set_tag(':');
-			item_set_data(menu);
-			goto conf_childs;
-		}
-		child_count++;
-		val = sym_get_tristate_value(sym);
-		if (sym_is_choice_value(sym) && val == yes) {
-			item_make("   ");
-			item_set_tag(':');
-			item_set_data(menu);
-		} else {
-			switch (type) {
-			case S_BOOLEAN:
-				if (sym_is_changable(sym))
-					item_make("[%c]", val == no ? ' ' : '*');
-				else
-					item_make("-%c-", val == no ? ' ' : '*');
-				item_set_tag('t');
-				item_set_data(menu);
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes: ch = '*'; break;
-				case mod: ch = 'M'; break;
-				default:  ch = ' '; break;
-				}
-				if (sym_is_changable(sym)) {
-					if (sym->rev_dep.tri == mod)
-						item_make("{%c}", ch);
-					else
-						item_make("<%c>", ch);
-				} else
-					item_make("-%c-", ch);
-				item_set_tag('t');
-				item_set_data(menu);
-				break;
-			default:
-				tmp = 2 + strlen(sym_get_string_value(sym)); /* () = 2 */
-				item_make("(%s)", sym_get_string_value(sym));
-				tmp = indent - tmp + 4;
-				if (tmp < 0)
-					tmp = 0;
-				item_add_str("%*c%s%s", tmp, ' ', _(menu_get_prompt(menu)),
-					     (sym_has_value(sym) || !sym_is_changable(sym)) ?
-					     "" : _(" (NEW)"));
-				item_set_tag('s');
-				item_set_data(menu);
-				goto conf_childs;
-			}
-		}
-		item_add_str("%*c%s%s", indent + 1, ' ', _(menu_get_prompt(menu)),
-			  (sym_has_value(sym) || !sym_is_changable(sym)) ?
-			  "" : _(" (NEW)"));
-		if (menu->prompt->type == P_MENU) {
-			item_add_str("  %s", menu_is_empty(menu) ? "----" : "--->");
-			return;
-		}
-	}
-
-conf_childs:
-	indent += doint;
-	for (child = menu->list; child; child = child->next)
-		build_conf(child);
-	indent -= doint;
-}
-
-static void conf(struct menu *menu, struct menu *active_menu)
-{
-	struct menu *submenu;
-	const char *prompt = menu_get_prompt(menu);
-	struct subtitle_part stpart;
-	struct symbol *sym;
-	int res;
-	int s_scroll = 0;
-
-	if (menu != &rootmenu)
-		stpart.text = menu_get_prompt(menu);
-	else
-		stpart.text = NULL;
-	list_add_tail(&stpart.entries, &trail);
-
-	while (1) {
-		item_reset();
-		current_menu = menu;
-		build_conf(menu);
-		if (!child_count)
-			break;
-		set_subtitle();
-		dialog_clear();
-		res = dialog_menu(prompt ? _(prompt) : _("Main Menu"),
-				  _(menu_instructions),
-				  active_menu, &s_scroll);
-		if (res == 1 || res == KEY_ESC || res == -ERRDISPLAYTOOSMALL)
-			break;
-		if (item_count() != 0) {
-			if (!item_activate_selected())
-				continue;
-			if (!item_tag())
-				continue;
-		}
-		submenu = item_data();
-		active_menu = item_data();
-		if (submenu)
-			sym = submenu->sym;
-		else
-			sym = NULL;
-
-		switch (res) {
-		case 0:
-			switch (item_tag()) {
-			case 'm':
-				if (single_menu_mode)
-					submenu->data = (void *) (long) !submenu->data;
-				else
-					conf(submenu, NULL);
-				break;
-			case 't':
-				if (sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)
-					conf_choice(submenu);
-				else if (submenu->prompt->type == P_MENU)
-					conf(submenu, NULL);
-				break;
-			case 's':
-				conf_string(submenu);
-				break;
-			}
-			break;
-		case 2:
-			if (sym)
-				show_help(submenu);
-			else {
-				reset_subtitle();
-				show_helptext(_("README"), _(mconf_readme));
-			}
-			break;
-		case 3:
-			reset_subtitle();
-			conf_save();
-			break;
-		case 4:
-			reset_subtitle();
-			conf_load();
-			break;
-		case 5:
-			if (item_is_tag('t')) {
-				if (sym_set_tristate_value(sym, yes))
-					break;
-				if (sym_set_tristate_value(sym, mod))
-					show_textbox(NULL, setmod_text, 6, 74);
-			}
-			break;
-		case 6:
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, no);
-			break;
-		case 7:
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, mod);
-			break;
-		case 8:
-			if (item_is_tag('t'))
-				sym_toggle_tristate_value(sym);
-			else if (item_is_tag('m'))
-				conf(submenu, NULL);
-			break;
-		case 9:
-			search_conf();
-			break;
-		case 10:
-			show_all_options = !show_all_options;
-			break;
-		}
-	}
-
-	list_del(trail.prev);
-}
-
-static int show_textbox_ext(const char *title, char *text, int r, int c, int
-			    *keys, int *vscroll, int *hscroll, update_text_fn
-			    update_text, void *data)
-{
-	dialog_clear();
-	return dialog_textbox(title, text, r, c, keys, vscroll, hscroll,
-			      update_text, data);
-}
-
-static void show_textbox(const char *title, const char *text, int r, int c)
-{
-	show_textbox_ext(title, (char *) text, r, c, (int []) {0}, NULL, NULL,
-			 NULL, NULL);
-}
-
-static void show_helptext(const char *title, const char *text)
-{
-	show_textbox(title, text, 0, 0);
-}
-
-static void conf_message_callback(const char *fmt, va_list ap)
-{
-	char buf[PATH_MAX+1];
-
-	vsnprintf(buf, sizeof(buf), fmt, ap);
-	if (save_and_exit)
-		printf("%s", buf);
-	else
-		show_textbox(NULL, buf, 6, 60);
-}
-
-static void show_help(struct menu *menu)
-{
-	struct gstr help = str_new();
-
-	help.max_width = getmaxx(stdscr) - 10;
-	menu_get_ext_help(menu, &help);
-
-	show_helptext(_(menu_get_prompt(menu)), str_get(&help));
-	str_free(&help);
-}
-
-static void conf_choice(struct menu *menu)
-{
-	const char *prompt = _(menu_get_prompt(menu));
-	struct menu *child;
-	struct symbol *active;
-
-	active = sym_get_choice_value(menu->sym);
-	while (1) {
-		int res;
-		int selected;
-		item_reset();
-
-		current_menu = menu;
-		for (child = menu->list; child; child = child->next) {
-			if (!menu_is_visible(child))
-				continue;
-			if (child->sym)
-				item_make("%s", _(menu_get_prompt(child)));
-			else {
-				item_make("*** %s ***", _(menu_get_prompt(child)));
-				item_set_tag(':');
-			}
-			item_set_data(child);
-			if (child->sym == active)
-				item_set_selected(1);
-			if (child->sym == sym_get_choice_value(menu->sym))
-				item_set_tag('X');
-		}
-		dialog_clear();
-		res = dialog_checklist(prompt ? _(prompt) : _("Main Menu"),
-					_(radiolist_instructions),
-					MENUBOX_HEIGTH_MIN,
-					MENUBOX_WIDTH_MIN,
-					CHECKLIST_HEIGTH_MIN);
-		selected = item_activate_selected();
-		switch (res) {
-		case 0:
-			if (selected) {
-				child = item_data();
-				if (!child->sym)
-					break;
-
-				sym_set_tristate_value(child->sym, yes);
-			}
-			return;
-		case 1:
-			if (selected) {
-				child = item_data();
-				show_help(child);
-				active = child->sym;
-			} else
-				show_help(menu);
-			break;
-		case KEY_ESC:
-			return;
-		case -ERRDISPLAYTOOSMALL:
-			return;
-		}
-	}
-}
-
-static void conf_string(struct menu *menu)
-{
-	const char *prompt = menu_get_prompt(menu);
-
-	while (1) {
-		int res;
-		const char *heading;
-
-		switch (sym_get_type(menu->sym)) {
-		case S_INT:
-			heading = _(inputbox_instructions_int);
-			break;
-		case S_HEX:
-			heading = _(inputbox_instructions_hex);
-			break;
-		case S_STRING:
-			heading = _(inputbox_instructions_string);
-			break;
-		default:
-			heading = _("Internal mconf error!");
-		}
-		dialog_clear();
-		res = dialog_inputbox(prompt ? _(prompt) : _("Main Menu"),
-				      heading, 10, 75,
-				      sym_get_string_value(menu->sym));
-		switch (res) {
-		case 0:
-			if (sym_set_string_value(menu->sym, dialog_input_result))
-				return;
-			show_textbox(NULL, _("You have made an invalid entry."), 5, 43);
-			break;
-		case 1:
-			show_help(menu);
-			break;
-		case KEY_ESC:
-			return;
-		}
-	}
-}
-
-static void conf_load(void)
-{
-
-	while (1) {
-		int res;
-		dialog_clear();
-		res = dialog_inputbox(NULL, load_config_text,
-				      11, 55, filename);
-		switch(res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			if (!conf_read(dialog_input_result)) {
-				set_config_filename(dialog_input_result);
-				sym_set_change_count(1);
-				return;
-			}
-			show_textbox(NULL, _("File does not exist!"), 5, 38);
-			break;
-		case 1:
-			show_helptext(_("Load Alternate Configuration"), load_config_help);
-			break;
-		case KEY_ESC:
-			return;
-		}
-	}
-}
-
-static void conf_save(void)
-{
-	while (1) {
-		int res;
-		dialog_clear();
-		res = dialog_inputbox(NULL, save_config_text,
-				      11, 55, filename);
-		switch(res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			if (!conf_write(dialog_input_result)) {
-				set_config_filename(dialog_input_result);
-				return;
-			}
-			show_textbox(NULL, _("Can't create file!  Probably a nonexistent directory."), 5, 60);
-			break;
-		case 1:
-			show_helptext(_("Save Alternate Configuration"), save_config_help);
-			break;
-		case KEY_ESC:
-			return;
-		}
-	}
-}
-
-static int handle_exit(void)
-{
-	int res;
-
-	save_and_exit = 1;
-	reset_subtitle();
-	dialog_clear();
-	if (conf_get_changed())
-		res = dialog_yesno(NULL,
-				   _("Do you wish to save your new configuration?\n"
-				     "(Press <ESC><ESC> to continue Unikraft configuration.)"),
-				   6, 60);
-	else
-		res = -1;
-
-	end_dialog(saved_x, saved_y);
-
-	switch (res) {
-	case 0:
-		if (conf_write(filename)) {
-			fprintf(stderr, _("\n\n"
-					  "Error while writing of the configuration.\n"
-					  "Your configuration changes were NOT saved."
-					  "\n\n"));
-			return 1;
-		}
-		/* fall through */
-	case -1:
-		printf(_("\n\n"
-			 "*** End of the configuration.\n"
-			 "*** Execute 'make' to start the build or try 'make help'."
-			 "\n\n"));
-		res = 0;
-		break;
-	default:
-		fprintf(stderr, _("\n\n"
-				  "Your configuration changes were NOT saved."
-				  "\n\n"));
-		if (res != KEY_ESC)
-			res = 0;
-	}
-
-	return res;
-}
-
-static void sig_handler(int signo)
-{
-	exit(handle_exit());
-}
-
-int main(int ac, char **av)
-{
-	char *mode;
-	int res;
-
-	setlocale(LC_ALL, "");
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	signal(SIGINT, sig_handler);
-
-	conf_parse(av[1]);
-	conf_read(NULL);
-
-	mode = getenv("MENUCONFIG_MODE");
-	if (mode) {
-		if (!strcasecmp(mode, "single_menu"))
-			single_menu_mode = 1;
-	}
-
-	if (init_dialog(NULL)) {
-		fprintf(stderr, N_("Your display is too small to run Menuconfig!\n"));
-		fprintf(stderr, N_("It must be at least 19 lines by 80 columns.\n"));
-		return 1;
-	}
-
-	set_config_filename(conf_get_configname());
-	conf_set_message_callback(conf_message_callback);
-	do {
-		conf(&rootmenu, NULL);
-		res = handle_exit();
-	} while (res == KEY_ESC);
-
-	return res;
-}
-
diff --git a/support/kconfig/menu.c b/support/kconfig/menu.c
deleted file mode 100644
index db1512a..0000000
--- a/support/kconfig/menu.c
+++ /dev/null
@@ -1,694 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "lkc.h"
-
-static const char nohelp_text[] = "There is no help available for this option.";
-
-struct menu rootmenu;
-static struct menu **last_entry_ptr;
-
-struct file *file_list;
-struct file *current_file;
-
-void menu_warn(struct menu *menu, const char *fmt, ...)
-{
-	va_list ap;
-	va_start(ap, fmt);
-	fprintf(stderr, "%s:%d:warning: ", menu->file->name, menu->lineno);
-	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-}
-
-static void prop_warn(struct property *prop, const char *fmt, ...)
-{
-	va_list ap;
-	va_start(ap, fmt);
-	fprintf(stderr, "%s:%d:warning: ", prop->file->name, prop->lineno);
-	vfprintf(stderr, fmt, ap);
-	fprintf(stderr, "\n");
-	va_end(ap);
-}
-
-void _menu_init(void)
-{
-	current_entry = current_menu = &rootmenu;
-	last_entry_ptr = &rootmenu.list;
-}
-
-void menu_add_entry(struct symbol *sym)
-{
-	struct menu *menu;
-
-	menu = xmalloc(sizeof(*menu));
-	memset(menu, 0, sizeof(*menu));
-	menu->sym = sym;
-	menu->parent = current_menu;
-	menu->file = current_file;
-	menu->lineno = zconf_lineno();
-
-	*last_entry_ptr = menu;
-	last_entry_ptr = &menu->next;
-	current_entry = menu;
-	if (sym)
-		menu_add_symbol(P_SYMBOL, sym, NULL);
-}
-
-void menu_end_entry(void)
-{
-}
-
-struct menu *menu_add_menu(void)
-{
-	menu_end_entry();
-	last_entry_ptr = &current_entry->list;
-	return current_menu = current_entry;
-}
-
-void menu_end_menu(void)
-{
-	last_entry_ptr = &current_menu->next;
-	current_menu = current_menu->parent;
-}
-
-static struct expr *menu_check_dep(struct expr *e)
-{
-	if (!e)
-		return e;
-
-	switch (e->type) {
-	case E_NOT:
-		e->left.expr = menu_check_dep(e->left.expr);
-		break;
-	case E_OR:
-	case E_AND:
-		e->left.expr = menu_check_dep(e->left.expr);
-		e->right.expr = menu_check_dep(e->right.expr);
-		break;
-	case E_SYMBOL:
-		/* change 'm' into 'm' && MODULES */
-		if (e->left.sym == &symbol_mod)
-			return expr_alloc_and(e, expr_alloc_symbol(modules_sym));
-		break;
-	default:
-		break;
-	}
-	return e;
-}
-
-void menu_add_dep(struct expr *dep)
-{
-	current_entry->dep = expr_alloc_and(current_entry->dep, menu_check_dep(dep));
-}
-
-void menu_set_type(int type)
-{
-	struct symbol *sym = current_entry->sym;
-
-	if (sym->type == type)
-		return;
-	if (sym->type == S_UNKNOWN) {
-		sym->type = type;
-		return;
-	}
-	menu_warn(current_entry,
-		"ignoring type redefinition of '%s' from '%s' to '%s'",
-		sym->name ? sym->name : "<choice>",
-		sym_type_name(sym->type), sym_type_name(type));
-}
-
-struct property *menu_add_prop(enum prop_type type, char *prompt, struct expr *expr, struct expr *dep)
-{
-	struct property *prop = prop_alloc(type, current_entry->sym);
-
-	prop->menu = current_entry;
-	prop->expr = expr;
-	prop->visible.expr = menu_check_dep(dep);
-
-	if (prompt) {
-		if (isspace(*prompt)) {
-			prop_warn(prop, "leading whitespace ignored");
-			while (isspace(*prompt))
-				prompt++;
-		}
-		if (current_entry->prompt && current_entry != &rootmenu)
-			prop_warn(prop, "prompt redefined");
-
-		/* Apply all upper menus' visibilities to actual prompts. */
-		if(type == P_PROMPT) {
-			struct menu *menu = current_entry;
-
-			while ((menu = menu->parent) != NULL) {
-				struct expr *dup_expr;
-
-				if (!menu->visibility)
-					continue;
-				/*
-				 * Do not add a reference to the
-				 * menu's visibility expression but
-				 * use a copy of it.  Otherwise the
-				 * expression reduction functions
-				 * will modify expressions that have
-				 * multiple references which can
-				 * cause unwanted side effects.
-				 */
-				dup_expr = expr_copy(menu->visibility);
-
-				prop->visible.expr
-					= expr_alloc_and(prop->visible.expr,
-							 dup_expr);
-			}
-		}
-
-		current_entry->prompt = prop;
-	}
-	prop->text = prompt;
-
-	return prop;
-}
-
-struct property *menu_add_prompt(enum prop_type type, char *prompt, struct expr *dep)
-{
-	return menu_add_prop(type, prompt, NULL, dep);
-}
-
-void menu_add_visibility(struct expr *expr)
-{
-	current_entry->visibility = expr_alloc_and(current_entry->visibility,
-	    expr);
-}
-
-void menu_add_expr(enum prop_type type, struct expr *expr, struct expr *dep)
-{
-	menu_add_prop(type, NULL, expr, dep);
-}
-
-void menu_add_symbol(enum prop_type type, struct symbol *sym, struct expr *dep)
-{
-	menu_add_prop(type, NULL, expr_alloc_symbol(sym), dep);
-}
-
-void menu_add_option(int token, char *arg)
-{
-	switch (token) {
-	case T_OPT_MODULES:
-		if (modules_sym)
-			zconf_error("symbol '%s' redefines option 'modules'"
-				    " already defined by symbol '%s'",
-				    current_entry->sym->name,
-				    modules_sym->name
-				    );
-		modules_sym = current_entry->sym;
-		break;
-	case T_OPT_DEFCONFIG_LIST:
-		if (!sym_defconfig_list)
-			sym_defconfig_list = current_entry->sym;
-		else if (sym_defconfig_list != current_entry->sym)
-			zconf_error("trying to redefine defconfig symbol");
-		break;
-	case T_OPT_ENV:
-		prop_add_env(arg);
-		break;
-	}
-}
-
-static int menu_validate_number(struct symbol *sym, struct symbol *sym2)
-{
-	return sym2->type == S_INT || sym2->type == S_HEX ||
-	       (sym2->type == S_UNKNOWN && sym_string_valid(sym, sym2->name));
-}
-
-static void sym_check_prop(struct symbol *sym)
-{
-	struct property *prop;
-	struct symbol *sym2;
-	for (prop = sym->prop; prop; prop = prop->next) {
-		switch (prop->type) {
-		case P_DEFAULT:
-			if ((sym->type == S_STRING || sym->type == S_INT || sym->type == S_HEX) &&
-			    prop->expr->type != E_SYMBOL)
-				prop_warn(prop,
-				    "default for config symbol '%s'"
-				    " must be a single symbol", sym->name);
-			if (prop->expr->type != E_SYMBOL)
-				break;
-			sym2 = prop_get_symbol(prop);
-			if (sym->type == S_HEX || sym->type == S_INT) {
-				if (!menu_validate_number(sym, sym2))
-					prop_warn(prop,
-					    "'%s': number is invalid",
-					    sym->name);
-			}
-			break;
-		case P_SELECT:
-			sym2 = prop_get_symbol(prop);
-			if (sym->type != S_BOOLEAN && sym->type != S_TRISTATE)
-				prop_warn(prop,
-				    "config symbol '%s' uses select, but is "
-				    "not boolean or tristate", sym->name);
-			else if (sym2->type != S_UNKNOWN &&
-			         sym2->type != S_BOOLEAN &&
-			         sym2->type != S_TRISTATE)
-				prop_warn(prop,
-				    "'%s' has wrong type. 'select' only "
-				    "accept arguments of boolean and "
-				    "tristate type", sym2->name);
-			break;
-		case P_RANGE:
-			if (sym->type != S_INT && sym->type != S_HEX)
-				prop_warn(prop, "range is only allowed "
-				                "for int or hex symbols");
-			if (!menu_validate_number(sym, prop->expr->left.sym) ||
-			    !menu_validate_number(sym, prop->expr->right.sym))
-				prop_warn(prop, "range is invalid");
-			break;
-		default:
-			;
-		}
-	}
-}
-
-void menu_finalize(struct menu *parent)
-{
-	struct menu *menu, *last_menu;
-	struct symbol *sym;
-	struct property *prop;
-	struct expr *parentdep, *basedep, *dep, *dep2, **ep;
-
-	sym = parent->sym;
-	if (parent->list) {
-		if (sym && sym_is_choice(sym)) {
-			if (sym->type == S_UNKNOWN) {
-				/* find the first choice value to find out choice type */
-				current_entry = parent;
-				for (menu = parent->list; menu; menu = menu->next) {
-					if (menu->sym && menu->sym->type != S_UNKNOWN) {
-						menu_set_type(menu->sym->type);
-						break;
-					}
-				}
-			}
-			/* set the type of the remaining choice values */
-			for (menu = parent->list; menu; menu = menu->next) {
-				current_entry = menu;
-				if (menu->sym && menu->sym->type == S_UNKNOWN)
-					menu_set_type(sym->type);
-			}
-			parentdep = expr_alloc_symbol(sym);
-		} else if (parent->prompt)
-			parentdep = parent->prompt->visible.expr;
-		else
-			parentdep = parent->dep;
-
-		for (menu = parent->list; menu; menu = menu->next) {
-			basedep = expr_transform(menu->dep);
-			basedep = expr_alloc_and(expr_copy(parentdep), basedep);
-			basedep = expr_eliminate_dups(basedep);
-			menu->dep = basedep;
-			if (menu->sym)
-				prop = menu->sym->prop;
-			else
-				prop = menu->prompt;
-			for (; prop; prop = prop->next) {
-				if (prop->menu != menu)
-					continue;
-				dep = expr_transform(prop->visible.expr);
-				dep = expr_alloc_and(expr_copy(basedep), dep);
-				dep = expr_eliminate_dups(dep);
-				if (menu->sym && menu->sym->type != S_TRISTATE)
-					dep = expr_trans_bool(dep);
-				prop->visible.expr = dep;
-				if (prop->type == P_SELECT) {
-					struct symbol *es = prop_get_symbol(prop);
-					es->rev_dep.expr = expr_alloc_or(es->rev_dep.expr,
-							expr_alloc_and(expr_alloc_symbol(menu->sym), expr_copy(dep)));
-				}
-			}
-		}
-		for (menu = parent->list; menu; menu = menu->next)
-			menu_finalize(menu);
-	} else if (sym) {
-		basedep = parent->prompt ? parent->prompt->visible.expr : NULL;
-		basedep = expr_trans_compare(basedep, E_UNEQUAL, &symbol_no);
-		basedep = expr_eliminate_dups(expr_transform(basedep));
-		last_menu = NULL;
-		for (menu = parent->next; menu; menu = menu->next) {
-			dep = menu->prompt ? menu->prompt->visible.expr : menu->dep;
-			if (!expr_contains_symbol(dep, sym))
-				break;
-			if (expr_depends_symbol(dep, sym))
-				goto next;
-			dep = expr_trans_compare(dep, E_UNEQUAL, &symbol_no);
-			dep = expr_eliminate_dups(expr_transform(dep));
-			dep2 = expr_copy(basedep);
-			expr_eliminate_eq(&dep, &dep2);
-			expr_free(dep);
-			if (!expr_is_yes(dep2)) {
-				expr_free(dep2);
-				break;
-			}
-			expr_free(dep2);
-		next:
-			menu_finalize(menu);
-			menu->parent = parent;
-			last_menu = menu;
-		}
-		if (last_menu) {
-			parent->list = parent->next;
-			parent->next = last_menu->next;
-			last_menu->next = NULL;
-		}
-
-		sym->dir_dep.expr = expr_alloc_or(sym->dir_dep.expr, parent->dep);
-	}
-	for (menu = parent->list; menu; menu = menu->next) {
-		if (sym && sym_is_choice(sym) &&
-		    menu->sym && !sym_is_choice_value(menu->sym)) {
-			current_entry = menu;
-			menu->sym->flags |= SYMBOL_CHOICEVAL;
-			if (!menu->prompt)
-				menu_warn(menu, "choice value must have a prompt");
-			for (prop = menu->sym->prop; prop; prop = prop->next) {
-				if (prop->type == P_DEFAULT)
-					prop_warn(prop, "defaults for choice "
-						  "values not supported");
-				if (prop->menu == menu)
-					continue;
-				if (prop->type == P_PROMPT &&
-				    prop->menu->parent->sym != sym)
-					prop_warn(prop, "choice value used outside its choice group");
-			}
-			/* Non-tristate choice values of tristate choices must
-			 * depend on the choice being set to Y. The choice
-			 * values' dependencies were propagated to their
-			 * properties above, so the change here must be re-
-			 * propagated.
-			 */
-			if (sym->type == S_TRISTATE && menu->sym->type != S_TRISTATE) {
-				basedep = expr_alloc_comp(E_EQUAL, sym, &symbol_yes);
-				menu->dep = expr_alloc_and(basedep, menu->dep);
-				for (prop = menu->sym->prop; prop; prop = prop->next) {
-					if (prop->menu != menu)
-						continue;
-					prop->visible.expr = expr_alloc_and(expr_copy(basedep),
-									    prop->visible.expr);
-				}
-			}
-			menu_add_symbol(P_CHOICE, sym, NULL);
-			prop = sym_get_choice_prop(sym);
-			for (ep = &prop->expr; *ep; ep = &(*ep)->left.expr)
-				;
-			*ep = expr_alloc_one(E_LIST, NULL);
-			(*ep)->right.sym = menu->sym;
-		}
-		if (menu->list && (!menu->prompt || !menu->prompt->text)) {
-			for (last_menu = menu->list; ; last_menu = last_menu->next) {
-				last_menu->parent = parent;
-				if (!last_menu->next)
-					break;
-			}
-			last_menu->next = menu->next;
-			menu->next = menu->list;
-			menu->list = NULL;
-		}
-	}
-
-	if (sym && !(sym->flags & SYMBOL_WARNED)) {
-		if (sym->type == S_UNKNOWN)
-			menu_warn(parent, "config symbol defined without type");
-
-		if (sym_is_choice(sym) && !parent->prompt)
-			menu_warn(parent, "choice must have a prompt");
-
-		/* Check properties connected to this symbol */
-		sym_check_prop(sym);
-		sym->flags |= SYMBOL_WARNED;
-	}
-
-	if (sym && !sym_is_optional(sym) && parent->prompt) {
-		sym->rev_dep.expr = expr_alloc_or(sym->rev_dep.expr,
-				expr_alloc_and(parent->prompt->visible.expr,
-					expr_alloc_symbol(&symbol_mod)));
-	}
-}
-
-bool menu_has_prompt(struct menu *menu)
-{
-	if (!menu->prompt)
-		return false;
-	return true;
-}
-
-/*
- * Determine if a menu is empty.
- * A menu is considered empty if it contains no or only
- * invisible entries.
- */
-bool menu_is_empty(struct menu *menu)
-{
-	struct menu *child;
-
-	for (child = menu->list; child; child = child->next) {
-		if (menu_is_visible(child))
-			return(false);
-	}
-	return(true);
-}
-
-bool menu_is_visible(struct menu *menu)
-{
-	struct menu *child;
-	struct symbol *sym;
-	tristate visible;
-
-	if (!menu->prompt)
-		return false;
-
-	if (menu->visibility) {
-		if (expr_calc_value(menu->visibility) == no)
-			return no;
-	}
-
-	sym = menu->sym;
-	if (sym) {
-		sym_calc_value(sym);
-		visible = menu->prompt->visible.tri;
-	} else
-		visible = menu->prompt->visible.tri = expr_calc_value(menu->prompt->visible.expr);
-
-	if (visible != no)
-		return true;
-
-	if (!sym || sym_get_tristate_value(menu->sym) == no)
-		return false;
-
-	for (child = menu->list; child; child = child->next) {
-		if (menu_is_visible(child)) {
-			if (sym)
-				sym->flags |= SYMBOL_DEF_USER;
-			return true;
-		}
-	}
-
-	return false;
-}
-
-const char *menu_get_prompt(struct menu *menu)
-{
-	if (menu->prompt)
-		return menu->prompt->text;
-	else if (menu->sym)
-		return menu->sym->name;
-	return NULL;
-}
-
-struct menu *menu_get_root_menu(struct menu *menu)
-{
-	return &rootmenu;
-}
-
-struct menu *menu_get_parent_menu(struct menu *menu)
-{
-	enum prop_type type;
-
-	for (; menu != &rootmenu; menu = menu->parent) {
-		type = menu->prompt ? menu->prompt->type : 0;
-		if (type == P_MENU)
-			break;
-	}
-	return menu;
-}
-
-bool menu_has_help(struct menu *menu)
-{
-	return menu->help != NULL;
-}
-
-const char *menu_get_help(struct menu *menu)
-{
-	if (menu->help)
-		return menu->help;
-	else
-		return "";
-}
-
-static void get_prompt_str(struct gstr *r, struct property *prop,
-			   struct list_head *head)
-{
-	int i, j;
-	struct menu *submenu[8], *menu, *location = NULL;
-	struct jump_key *jump;
-
-	str_printf(r, _("Prompt: %s\n"), _(prop->text));
-	menu = prop->menu->parent;
-	for (i = 0; menu != &rootmenu && i < 8; menu = menu->parent) {
-		bool accessible = menu_is_visible(menu);
-
-		submenu[i++] = menu;
-		if (location == NULL && accessible)
-			location = menu;
-	}
-	if (head && location) {
-		jump = xmalloc(sizeof(struct jump_key));
-
-		if (menu_is_visible(prop->menu)) {
-			/*
-			 * There is not enough room to put the hint at the
-			 * beginning of the "Prompt" line. Put the hint on the
-			 * last "Location" line even when it would belong on
-			 * the former.
-			 */
-			jump->target = prop->menu;
-		} else
-			jump->target = location;
-
-		if (list_empty(head))
-			jump->index = 0;
-		else
-			jump->index = list_entry(head->prev, struct jump_key,
-						 entries)->index + 1;
-
-		list_add_tail(&jump->entries, head);
-	}
-
-	if (i > 0) {
-		str_printf(r, _("  Location:\n"));
-		for (j = 4; --i >= 0; j += 2) {
-			menu = submenu[i];
-			if (head && location && menu == location)
-				jump->offset = strlen(r->s);
-			str_printf(r, "%*c-> %s", j, ' ',
-				   _(menu_get_prompt(menu)));
-			if (menu->sym) {
-				str_printf(r, " (%s [=%s])", menu->sym->name ?
-					menu->sym->name : _("<choice>"),
-					sym_get_string_value(menu->sym));
-			}
-			str_append(r, "\n");
-		}
-	}
-}
-
-/*
- * get property of type P_SYMBOL
- */
-static struct property *get_symbol_prop(struct symbol *sym)
-{
-	struct property *prop = NULL;
-
-	for_all_properties(sym, prop, P_SYMBOL)
-		break;
-	return prop;
-}
-
-/*
- * head is optional and may be NULL
- */
-void get_symbol_str(struct gstr *r, struct symbol *sym,
-		    struct list_head *head)
-{
-	bool hit;
-	struct property *prop;
-
-	if (sym && sym->name) {
-		str_printf(r, "Symbol: %s [=%s]\n", sym->name,
-			   sym_get_string_value(sym));
-		str_printf(r, "Type  : %s\n", sym_type_name(sym->type));
-		if (sym->type == S_INT || sym->type == S_HEX) {
-			prop = sym_get_range_prop(sym);
-			if (prop) {
-				str_printf(r, "Range : ");
-				expr_gstr_print(prop->expr, r);
-				str_append(r, "\n");
-			}
-		}
-	}
-	for_all_prompts(sym, prop)
-		get_prompt_str(r, prop, head);
-
-	prop = get_symbol_prop(sym);
-	if (prop) {
-		str_printf(r, _("  Defined at %s:%d\n"), prop->menu->file->name,
-			prop->menu->lineno);
-		if (!expr_is_yes(prop->visible.expr)) {
-			str_append(r, _("  Depends on: "));
-			expr_gstr_print(prop->visible.expr, r);
-			str_append(r, "\n");
-		}
-	}
-
-	hit = false;
-	for_all_properties(sym, prop, P_SELECT) {
-		if (!hit) {
-			str_append(r, "  Selects: ");
-			hit = true;
-		} else
-			str_printf(r, " && ");
-		expr_gstr_print(prop->expr, r);
-	}
-	if (hit)
-		str_append(r, "\n");
-	if (sym->rev_dep.expr) {
-		str_append(r, _("  Selected by: "));
-		expr_gstr_print(sym->rev_dep.expr, r);
-		str_append(r, "\n");
-	}
-	str_append(r, "\n\n");
-}
-
-struct gstr get_relations_str(struct symbol **sym_arr, struct list_head *head)
-{
-	struct symbol *sym;
-	struct gstr res = str_new();
-	int i;
-
-	for (i = 0; sym_arr && (sym = sym_arr[i]); i++)
-		get_symbol_str(&res, sym, head);
-	if (!i)
-		str_append(&res, _("No matches found.\n"));
-	return res;
-}
-
-
-void menu_get_ext_help(struct menu *menu, struct gstr *help)
-{
-	struct symbol *sym = menu->sym;
-	const char *help_text = nohelp_text;
-
-	if (menu_has_help(menu)) {
-		if (sym->name)
-			str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
-		help_text = menu_get_help(menu);
-	}
-	str_printf(help, "%s\n", _(help_text));
-	if (sym)
-		get_symbol_str(help, sym, NULL);
-}
diff --git a/support/kconfig/merge_config.sh b/support/kconfig/merge_config.sh
deleted file mode 100755
index 8a1708b..0000000
--- a/support/kconfig/merge_config.sh
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/bin/sh
-#  merge_config.sh - Takes a list of config fragment values, and merges
-#  them one by one. Provides warnings on overridden values, and specified
-#  values that did not make it to the resulting .config file (due to missed
-#  dependencies or config symbol removal).
-#
-#  Portions reused from kconf_check and generate_cfg:
-#  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/kconf_check
-#  http://git.yoctoproject.org/cgit/cgit.cgi/yocto-kernel-tools/tree/tools/generate_cfg
-#
-#  Copyright (c) 2009-2010 Wind River Systems, Inc.
-#  Copyright 2011 Linaro
-#
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License version 2 as
-#  published by the Free Software Foundation.
-#
-#  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.
-
-clean_up() {
-	rm -f $TMP_FILE
-	exit
-}
-trap clean_up HUP INT TERM
-
-usage() {
-	echo "Usage: $0 [OPTIONS] [CONFIG [...]]"
-	echo "  -h    display this help text"
-	echo "  -m    only merge the fragments, do not execute the make command"
-	echo "  -n    use allnoconfig instead of alldefconfig"
-	echo "  -r    list redundant entries when merging fragments"
-	echo "  -O    dir to put generated output files"
-}
-
-MAKE=true
-ALLTARGET=alldefconfig
-WARNREDUN=false
-OUTPUT=.
-
-while true; do
-	case $1 in
-	"-n")
-		ALLTARGET=allnoconfig
-		shift
-		continue
-		;;
-	"-m")
-		MAKE=false
-		shift
-		continue
-		;;
-	"-h")
-		usage
-		exit
-		;;
-	"-r")
-		WARNREDUN=true
-		shift
-		continue
-		;;
-	"-O")
-		if [ -d $2 ];then
-			OUTPUT=$(echo $2 | sed 's/\/*$//')
-		else
-			echo "output directory $2 does not exist" 1>&2
-			exit 1
-		fi
-		shift 2
-		continue
-		;;
-	*)
-		break
-		;;
-	esac
-done
-
-INITFILE=$1
-shift;
-
-MERGE_LIST=$*
-SED_CONFIG_EXP="s/^\(# \)\{0,1\}\(CONFIG_[a-zA-Z0-9_]*\)[= ].*/\2/p"
-TMP_FILE=$(mktemp -t .tmp.config.XXXXXXXXXX)
-
-echo "Using $INITFILE as base"
-cat $INITFILE > $TMP_FILE
-
-# Merge files, printing warnings on overrided values
-for MERGE_FILE in $MERGE_LIST ; do
-	echo "Merging $MERGE_FILE"
-	CFG_LIST=$(sed -n "$SED_CONFIG_EXP" $MERGE_FILE)
-
-	for CFG in $CFG_LIST ; do
-		grep -q -w $CFG $TMP_FILE
-		if [ $? -eq 0 ] ; then
-			PREV_VAL=$(grep -w $CFG $TMP_FILE)
-			NEW_VAL=$(grep -w $CFG $MERGE_FILE)
-			if [ "x$PREV_VAL" != "x$NEW_VAL" ] ; then
-			echo Value of $CFG is redefined by fragment $MERGE_FILE:
-			echo Previous  value: $PREV_VAL
-			echo New value:       $NEW_VAL
-			echo
-			elif [ "$WARNREDUN" = "true" ]; then
-			echo Value of $CFG is redundant by fragment $MERGE_FILE:
-			fi
-			sed -i "/$CFG[ =]/d" $TMP_FILE
-		fi
-	done
-	cat $MERGE_FILE >> $TMP_FILE
-done
-
-if [ "$MAKE" = "false" ]; then
-	cp $TMP_FILE $OUTPUT/.config
-	echo "#"
-	echo "# merged configuration written to $OUTPUT/.config (needs make)"
-	echo "#"
-	clean_up
-	exit
-fi
-
-# If we have an output dir, setup the O= argument, otherwise leave
-# it blank, since O=. will create an unnecessary ./source softlink
-OUTPUT_ARG=""
-if [ "$OUTPUT" != "." ] ; then
-	OUTPUT_ARG="O=$OUTPUT"
-fi
-
-
-# Use the merged file as the starting point for:
-# alldefconfig: Fills in any missing symbols with Kconfig default
-# allnoconfig: Fills in any missing symbols with # CONFIG_* is not set
-make KCONFIG_ALLCONFIG=$TMP_FILE $OUTPUT_ARG $ALLTARGET
-
-
-# Check all specified config values took (might have missed-dependency issues)
-for CFG in $(sed -n "$SED_CONFIG_EXP" $TMP_FILE); do
-
-	REQUESTED_VAL=$(grep -w -e "$CFG" $TMP_FILE)
-	ACTUAL_VAL=$(grep -w -e "$CFG" $OUTPUT/.config)
-	if [ "x$REQUESTED_VAL" != "x$ACTUAL_VAL" ] ; then
-		echo "Value requested for $CFG not in final .config"
-		echo "Requested value:  $REQUESTED_VAL"
-		echo "Actual value:     $ACTUAL_VAL"
-		echo ""
-	fi
-done
-
-clean_up
diff --git a/support/kconfig/nconf.c b/support/kconfig/nconf.c
deleted file mode 100644
index 4fbecd2..0000000
--- a/support/kconfig/nconf.c
+++ /dev/null
@@ -1,1557 +0,0 @@
-/*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
- *
- * Derived from menuconfig.
- *
- */
-#define _GNU_SOURCE
-#include <string.h>
-#include <stdlib.h>
-
-#include "lkc.h"
-#include "nconf.h"
-#include <ctype.h>
-
-static const char nconf_global_help[] = N_(
-"Help windows\n"
-"------------\n"
-"o  Global help:  Unless in a data entry window, pressing <F1> will give \n"
-"   you the global help window, which you are just reading.\n"
-"\n"
-"o  A short version of the global help is available by pressing <F3>.\n"
-"\n"
-"o  Local help:  To get help related to the current menu entry, use any\n"
-"   of <?> <h>, or if in a data entry window then press <F1>.\n"
-"\n"
-"\n"
-"Menu entries\n"
-"------------\n"
-"This interface lets you select features and parameters for the kernel\n"
-"build.  Kernel features can either be built-in, modularized, or removed.\n"
-"Parameters must be entered as text or decimal or hexadecimal numbers.\n"
-"\n"
-"Menu entries beginning with following braces represent features that\n"
-"  [ ]  can be built in or removed\n"
-"  < >  can be built in, modularized or removed\n"
-"  { }  can be built in or modularized, are selected by another feature\n"
-"  - -  are selected by another feature\n"
-"  XXX  cannot be selected.  Symbol Info <F2> tells you why.\n"
-"*, M or whitespace inside braces means to build in, build as a module\n"
-"or to exclude the feature respectively.\n"
-"\n"
-"To change any of these features, highlight it with the movement keys\n"
-"listed below and press <y> to build it in, <m> to make it a module or\n"
-"<n> to remove it.  You may press the <Space> key to cycle through the\n"
-"available options.\n"
-"\n"
-"A trailing \"--->\" designates a submenu, a trailing \"----\" an\n"
-"empty submenu.\n"
-"\n"
-"Menu navigation keys\n"
-"----------------------------------------------------------------------\n"
-"Linewise up                 <Up>\n"
-"Linewise down               <Down>\n"
-"Pagewise up                 <Page Up>\n"
-"Pagewise down               <Page Down>\n"
-"First entry                 <Home>\n"
-"Last entry                  <End>\n"
-"Enter a submenu             <Right>  <Enter>\n"
-"Go back to parent menu      <Left>   <Esc>  <F5>\n"
-"Close a help window         <Enter>  <Esc>  <F5>\n"
-"Close entry window, apply   <Enter>\n"
-"Close entry window, forget  <Esc>  <F5>\n"
-"Start incremental, case-insensitive search for STRING in menu entries,\n"
-"    no regex support, STRING is displayed in upper left corner\n"
-"                            </>STRING\n"
-"    Remove last character   <Backspace>\n"
-"    Jump to next hit        <Down>\n"
-"    Jump to previous hit    <Up>\n"
-"Exit menu search mode       </>  <Esc>\n"
-"Search for configuration variables with or without leading CONFIG_\n"
-"                            <F8>RegExpr<Enter>\n"
-"Verbose search help         <F8><F1>\n"
-"----------------------------------------------------------------------\n"
-"\n"
-"Unless in a data entry window, key <1> may be used instead of <F1>,\n"
-"<2> instead of <F2>, etc.\n"
-"\n"
-"\n"
-"Radiolist (Choice list)\n"
-"-----------------------\n"
-"Use the movement keys listed above to select the option you wish to set\n"
-"and press <Space>.\n"
-"\n"
-"\n"
-"Data entry\n"
-"----------\n"
-"Enter the requested information and press <Enter>.  Hexadecimal values\n"
-"may be entered without the \"0x\" prefix.\n"
-"\n"
-"\n"
-"Text Box (Help Window)\n"
-"----------------------\n"
-"Use movement keys as listed in table above.\n"
-"\n"
-"Press any of <Enter> <Esc> <q> <F5> <F9> to exit.\n"
-"\n"
-"\n"
-"Alternate configuration files\n"
-"-----------------------------\n"
-"nconfig supports switching between different configurations.\n"
-"Press <F6> to save your current configuration.  Press <F7> and enter\n"
-"a file name to load a previously saved configuration.\n"
-"\n"
-"\n"
-"Terminal configuration\n"
-"----------------------\n"
-"If you use nconfig in a xterm window, make sure your TERM environment\n"
-"variable specifies a terminal configuration which supports at least\n"
-"16 colors.  Otherwise nconfig will look rather bad.\n"
-"\n"
-"If the \"stty size\" command reports the current terminalsize correctly,\n"
-"nconfig will adapt to sizes larger than the traditional 80x25 \"standard\"\n"
-"and display longer menus properly.\n"
-"\n"
-"\n"
-"Single menu mode\n"
-"----------------\n"
-"If you prefer to have all of the menu entries listed in a single menu,\n"
-"rather than the default multimenu hierarchy, run nconfig with\n"
-"NCONFIG_MODE environment variable set to single_menu.  Example:\n"
-"\n"
-"make NCONFIG_MODE=single_menu nconfig\n"
-"\n"
-"<Enter> will then unfold the appropriate category, or fold it if it\n"
-"is already unfolded.  Folded menu entries will be designated by a\n"
-"leading \"++>\" and unfolded entries by a leading \"-->\".\n"
-"\n"
-"Note that this mode can eventually be a little more CPU expensive than\n"
-"the default mode, especially with a larger number of unfolded submenus.\n"
-"\n"),
-menu_no_f_instructions[] = N_(
-"Legend:  [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
-"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n"
-"\n"
-"Use the following keys to navigate the menus:\n"
-"Move up or down with <Up> and <Down>.\n"
-"Enter a submenu with <Enter> or <Right>.\n"
-"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
-"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
-"Pressing <Space> cycles through the available options.\n"
-"To search for menu entries press </>.\n"
-"<Esc> always leaves the current window.\n"
-"\n"
-"You do not have function keys support.\n"
-"Press <1> instead of <F1>, <2> instead of <F2>, etc.\n"
-"For verbose global help use key <1>.\n"
-"For help related to the current menu entry press <?> or <h>.\n"),
-menu_instructions[] = N_(
-"Legend:  [*] built-in  [ ] excluded  <M> module  < > module capable.\n"
-"Submenus are designated by a trailing \"--->\", empty ones by \"----\".\n"
-"\n"
-"Use the following keys to navigate the menus:\n"
-"Move up or down with <Up> or <Down>.\n"
-"Enter a submenu with <Enter> or <Right>.\n"
-"Exit a submenu to its parent menu with <Esc> or <Left>.\n"
-"Pressing <y> includes, <n> excludes, <m> modularizes features.\n"
-"Pressing <Space> cycles through the available options.\n"
-"To search for menu entries press </>.\n"
-"<Esc> always leaves the current window.\n"
-"\n"
-"Pressing <1> may be used instead of <F1>, <2> instead of <F2>, etc.\n"
-"For verbose global help press <F1>.\n"
-"For help related to the current menu entry press <?> or <h>.\n"),
-radiolist_instructions[] = N_(
-"Press <Up>, <Down>, <Home> or <End> to navigate a radiolist, select\n"
-"with <Space>.\n"
-"For help related to the current entry press <?> or <h>.\n"
-"For global help press <F1>.\n"),
-inputbox_instructions_int[] = N_(
-"Please enter a decimal value.\n"
-"Fractions will not be accepted.\n"
-"Press <Enter> to apply, <Esc> to cancel."),
-inputbox_instructions_hex[] = N_(
-"Please enter a hexadecimal value.\n"
-"Press <Enter> to apply, <Esc> to cancel."),
-inputbox_instructions_string[] = N_(
-"Please enter a string value.\n"
-"Press <Enter> to apply, <Esc> to cancel."),
-setmod_text[] = N_(
-"This feature depends on another feature which has been configured as a\n"
-"module.  As a result, the current feature will be built as a module too."),
-load_config_text[] = N_(
-"Enter the name of the configuration file you wish to load.\n"
-"Accept the name shown to restore the configuration you last\n"
-"retrieved.  Leave empty to abort."),
-load_config_help[] = N_(
-"For various reasons, one may wish to keep several different\n"
-"configurations available on a single machine.\n"
-"\n"
-"If you have saved a previous configuration in a file other than the\n"
-"default one, entering its name here will allow you to load and modify\n"
-"that configuration.\n"
-"\n"
-"Leave empty to abort.\n"),
-save_config_text[] = N_(
-"Enter a filename to which this configuration should be saved\n"
-"as an alternate.  Leave empty to abort."),
-save_config_help[] = N_(
-"For various reasons, one may wish to keep several different\n"
-"configurations available on a single machine.\n"
-"\n"
-"Entering a file name here will allow you to later retrieve, modify\n"
-"and use the current configuration as an alternate to whatever\n"
-"configuration options you have selected at that time.\n"
-"\n"
-"Leave empty to abort.\n"),
-search_help[] = N_(
-"Search for symbols (configuration variable names CONFIG_*) and display\n"
-"their relations.  Regular expressions are supported.\n"
-"Example:  Search for \"^FOO\".\n"
-"Result:\n"
-"-----------------------------------------------------------------\n"
-"Symbol: FOO [ = m]\n"
-"Prompt: Foo bus is used to drive the bar HW\n"
-"Defined at drivers/pci/Kconfig:47\n"
-"Depends on: X86_LOCAL_APIC && X86_IO_APIC || IA64\n"
-"Location:\n"
-"  -> Bus options (PCI, PCMCIA, EISA, ISA)\n"
-"    -> PCI support (PCI [ = y])\n"
-"      -> PCI access mode (<choice> [ = y])\n"
-"Selects: LIBCRC32\n"
-"Selected by: BAR\n"
-"-----------------------------------------------------------------\n"
-"o  The line 'Prompt:' shows the text displayed for this symbol in\n"
-"   the menu hierarchy.\n"
-"o  The 'Defined at' line tells at what file / line number the symbol is\n"
-"   defined.\n"
-"o  The 'Depends on:' line lists symbols that need to be defined for\n"
-"   this symbol to be visible and selectable in the menu.\n"
-"o  The 'Location:' lines tell, where in the menu structure this symbol\n"
-"   is located.  A location followed by a [ = y] indicates that this is\n"
-"   a selectable menu item, and the current value is displayed inside\n"
-"   brackets.\n"
-"o  The 'Selects:' line tells, what symbol will be automatically selected\n"
-"   if this symbol is selected (y or m).\n"
-"o  The 'Selected by' line tells what symbol has selected this symbol.\n"
-"\n"
-"Only relevant lines are shown.\n"
-"\n\n"
-"Search examples:\n"
-"USB  => find all symbols containing USB\n"
-"^USB => find all symbols starting with USB\n"
-"USB$ => find all symbols ending with USB\n"
-"\n");
-
-struct mitem {
-	char str[256];
-	char tag;
-	void *usrptr;
-	int is_visible;
-};
-
-#define MAX_MENU_ITEMS 4096
-static int show_all_items;
-static int indent;
-static struct menu *current_menu;
-static int child_count;
-static int single_menu_mode;
-/* the window in which all information appears */
-static WINDOW *main_window;
-/* the largest size of the menu window */
-static int mwin_max_lines;
-static int mwin_max_cols;
-/* the window in which we show option buttons */
-static MENU *curses_menu;
-static ITEM *curses_menu_items[MAX_MENU_ITEMS];
-static struct mitem k_menu_items[MAX_MENU_ITEMS];
-static int items_num;
-static int global_exit;
-/* the currently selected button */
-const char *current_instructions = menu_instructions;
-
-static char *dialog_input_result;
-static int dialog_input_result_len;
-
-static void conf(struct menu *menu);
-static void conf_choice(struct menu *menu);
-static void conf_string(struct menu *menu);
-static void conf_load(void);
-static void conf_save(void);
-static void show_help(struct menu *menu);
-static int do_exit(void);
-static void setup_windows(void);
-static void search_conf(void);
-
-typedef void (*function_key_handler_t)(int *key, struct menu *menu);
-static void handle_f1(int *key, struct menu *current_item);
-static void handle_f2(int *key, struct menu *current_item);
-static void handle_f3(int *key, struct menu *current_item);
-static void handle_f4(int *key, struct menu *current_item);
-static void handle_f5(int *key, struct menu *current_item);
-static void handle_f6(int *key, struct menu *current_item);
-static void handle_f7(int *key, struct menu *current_item);
-static void handle_f8(int *key, struct menu *current_item);
-static void handle_f9(int *key, struct menu *current_item);
-
-struct function_keys {
-	const char *key_str;
-	const char *func;
-	function_key key;
-	function_key_handler_t handler;
-};
-
-static const int function_keys_num = 9;
-struct function_keys function_keys[] = {
-	{
-		.key_str = "F1",
-		.func = "Help",
-		.key = F_HELP,
-		.handler = handle_f1,
-	},
-	{
-		.key_str = "F2",
-		.func = "SymInfo",
-		.key = F_SYMBOL,
-		.handler = handle_f2,
-	},
-	{
-		.key_str = "F3",
-		.func = "Help 2",
-		.key = F_INSTS,
-		.handler = handle_f3,
-	},
-	{
-		.key_str = "F4",
-		.func = "ShowAll",
-		.key = F_CONF,
-		.handler = handle_f4,
-	},
-	{
-		.key_str = "F5",
-		.func = "Back",
-		.key = F_BACK,
-		.handler = handle_f5,
-	},
-	{
-		.key_str = "F6",
-		.func = "Save",
-		.key = F_SAVE,
-		.handler = handle_f6,
-	},
-	{
-		.key_str = "F7",
-		.func = "Load",
-		.key = F_LOAD,
-		.handler = handle_f7,
-	},
-	{
-		.key_str = "F8",
-		.func = "SymSearch",
-		.key = F_SEARCH,
-		.handler = handle_f8,
-	},
-	{
-		.key_str = "F9",
-		.func = "Exit",
-		.key = F_EXIT,
-		.handler = handle_f9,
-	},
-};
-
-static void print_function_line(void)
-{
-	int i;
-	int offset = 1;
-	const int skip = 1;
-	int lines = getmaxy(stdscr);
-
-	for (i = 0; i < function_keys_num; i++) {
-		(void) wattrset(main_window, attributes[FUNCTION_HIGHLIGHT]);
-		mvwprintw(main_window, lines-3, offset,
-				"%s",
-				function_keys[i].key_str);
-		(void) wattrset(main_window, attributes[FUNCTION_TEXT]);
-		offset += strlen(function_keys[i].key_str);
-		mvwprintw(main_window, lines-3,
-				offset, "%s",
-				function_keys[i].func);
-		offset += strlen(function_keys[i].func) + skip;
-	}
-	(void) wattrset(main_window, attributes[NORMAL]);
-}
-
-/* help */
-static void handle_f1(int *key, struct menu *current_item)
-{
-	show_scroll_win(main_window,
-			_("Global help"), _(nconf_global_help));
-	return;
-}
-
-/* symbole help */
-static void handle_f2(int *key, struct menu *current_item)
-{
-	show_help(current_item);
-	return;
-}
-
-/* instructions */
-static void handle_f3(int *key, struct menu *current_item)
-{
-	show_scroll_win(main_window,
-			_("Short help"),
-			_(current_instructions));
-	return;
-}
-
-/* config */
-static void handle_f4(int *key, struct menu *current_item)
-{
-	int res = btn_dialog(main_window,
-			_("Show all symbols?"),
-			2,
-			"   <Show All>   ",
-			"<Don't show all>");
-	if (res == 0)
-		show_all_items = 1;
-	else if (res == 1)
-		show_all_items = 0;
-
-	return;
-}
-
-/* back */
-static void handle_f5(int *key, struct menu *current_item)
-{
-	*key = KEY_LEFT;
-	return;
-}
-
-/* save */
-static void handle_f6(int *key, struct menu *current_item)
-{
-	conf_save();
-	return;
-}
-
-/* load */
-static void handle_f7(int *key, struct menu *current_item)
-{
-	conf_load();
-	return;
-}
-
-/* search */
-static void handle_f8(int *key, struct menu *current_item)
-{
-	search_conf();
-	return;
-}
-
-/* exit */
-static void handle_f9(int *key, struct menu *current_item)
-{
-	do_exit();
-	return;
-}
-
-/* return != 0 to indicate the key was handles */
-static int process_special_keys(int *key, struct menu *menu)
-{
-	int i;
-
-	if (*key == KEY_RESIZE) {
-		setup_windows();
-		return 1;
-	}
-
-	for (i = 0; i < function_keys_num; i++) {
-		if (*key == KEY_F(function_keys[i].key) ||
-		    *key == '0' + function_keys[i].key){
-			function_keys[i].handler(key, menu);
-			return 1;
-		}
-	}
-
-	return 0;
-}
-
-static void clean_items(void)
-{
-	int i;
-	for (i = 0; curses_menu_items[i]; i++)
-		free_item(curses_menu_items[i]);
-	bzero(curses_menu_items, sizeof(curses_menu_items));
-	bzero(k_menu_items, sizeof(k_menu_items));
-	items_num = 0;
-}
-
-typedef enum {MATCH_TINKER_PATTERN_UP, MATCH_TINKER_PATTERN_DOWN,
-	FIND_NEXT_MATCH_DOWN, FIND_NEXT_MATCH_UP} match_f;
-
-/* return the index of the matched item, or -1 if no such item exists */
-static int get_mext_match(const char *match_str, match_f flag)
-{
-	int match_start = item_index(current_item(curses_menu));
-	int index;
-
-	if (flag == FIND_NEXT_MATCH_DOWN)
-		++match_start;
-	else if (flag == FIND_NEXT_MATCH_UP)
-		--match_start;
-
-	index = match_start;
-	index = (index + items_num) % items_num;
-	while (true) {
-		char *str = k_menu_items[index].str;
-		if (strcasestr(str, match_str) != 0)
-			return index;
-		if (flag == FIND_NEXT_MATCH_UP ||
-		    flag == MATCH_TINKER_PATTERN_UP)
-			--index;
-		else
-			++index;
-		index = (index + items_num) % items_num;
-		if (index == match_start)
-			return -1;
-	}
-}
-
-/* Make a new item. */
-static void item_make(struct menu *menu, char tag, const char *fmt, ...)
-{
-	va_list ap;
-
-	if (items_num > MAX_MENU_ITEMS-1)
-		return;
-
-	bzero(&k_menu_items[items_num], sizeof(k_menu_items[0]));
-	k_menu_items[items_num].tag = tag;
-	k_menu_items[items_num].usrptr = menu;
-	if (menu != NULL)
-		k_menu_items[items_num].is_visible =
-			menu_is_visible(menu);
-	else
-		k_menu_items[items_num].is_visible = 1;
-
-	va_start(ap, fmt);
-	vsnprintf(k_menu_items[items_num].str,
-		  sizeof(k_menu_items[items_num].str),
-		  fmt, ap);
-	va_end(ap);
-
-	if (!k_menu_items[items_num].is_visible)
-		memcpy(k_menu_items[items_num].str, "XXX", 3);
-
-	curses_menu_items[items_num] = new_item(
-			k_menu_items[items_num].str,
-			k_menu_items[items_num].str);
-	set_item_userptr(curses_menu_items[items_num],
-			&k_menu_items[items_num]);
-	/*
-	if (!k_menu_items[items_num].is_visible)
-		item_opts_off(curses_menu_items[items_num], O_SELECTABLE);
-	*/
-
-	items_num++;
-	curses_menu_items[items_num] = NULL;
-}
-
-/* very hackish. adds a string to the last item added */
-static void item_add_str(const char *fmt, ...)
-{
-	va_list ap;
-	int index = items_num-1;
-	char new_str[256];
-	char tmp_str[256];
-
-	if (index < 0)
-		return;
-
-	va_start(ap, fmt);
-	vsnprintf(new_str, sizeof(new_str), fmt, ap);
-	va_end(ap);
-	snprintf(tmp_str, sizeof(tmp_str), "%s%s",
-			k_menu_items[index].str, new_str);
-	strncpy(k_menu_items[index].str,
-		tmp_str,
-		sizeof(k_menu_items[index].str));
-
-	free_item(curses_menu_items[index]);
-	curses_menu_items[index] = new_item(
-			k_menu_items[index].str,
-			k_menu_items[index].str);
-	set_item_userptr(curses_menu_items[index],
-			&k_menu_items[index]);
-}
-
-/* get the tag of the currently selected item */
-static char item_tag(void)
-{
-	ITEM *cur;
-	struct mitem *mcur;
-
-	cur = current_item(curses_menu);
-	if (cur == NULL)
-		return 0;
-	mcur = (struct mitem *) item_userptr(cur);
-	return mcur->tag;
-}
-
-static int curses_item_index(void)
-{
-	return  item_index(current_item(curses_menu));
-}
-
-static void *item_data(void)
-{
-	ITEM *cur;
-	struct mitem *mcur;
-
-	cur = current_item(curses_menu);
-	if (!cur)
-		return NULL;
-	mcur = (struct mitem *) item_userptr(cur);
-	return mcur->usrptr;
-
-}
-
-static int item_is_tag(char tag)
-{
-	return item_tag() == tag;
-}
-
-static char filename[PATH_MAX+1];
-static char menu_backtitle[PATH_MAX+128];
-static const char *set_config_filename(const char *config_filename)
-{
-	int size;
-
-	size = snprintf(menu_backtitle, sizeof(menu_backtitle),
-			"%s - %s", config_filename, rootmenu.prompt->text);
-	if (size >= sizeof(menu_backtitle))
-		menu_backtitle[sizeof(menu_backtitle)-1] = '\0';
-
-	size = snprintf(filename, sizeof(filename), "%s", config_filename);
-	if (size >= sizeof(filename))
-		filename[sizeof(filename)-1] = '\0';
-	return menu_backtitle;
-}
-
-/* return = 0 means we are successful.
- * -1 means go on doing what you were doing
- */
-static int do_exit(void)
-{
-	int res;
-	if (!conf_get_changed()) {
-		global_exit = 1;
-		return 0;
-	}
-	res = btn_dialog(main_window,
-			_("Do you wish to save your new configuration?\n"
-				"<ESC> to cancel and resume nconfig."),
-			2,
-			"   <save>   ",
-			"<don't save>");
-	if (res == KEY_EXIT) {
-		global_exit = 0;
-		return -1;
-	}
-
-	/* if we got here, the user really wants to exit */
-	switch (res) {
-	case 0:
-		res = conf_write(filename);
-		if (res)
-			btn_dialog(
-				main_window,
-				_("Error during writing of configuration.\n"
-				  "Your configuration changes were NOT saved."),
-				  1,
-				  "<OK>");
-		break;
-	default:
-		btn_dialog(
-			main_window,
-			_("Your configuration changes were NOT saved."),
-			1,
-			"<OK>");
-		break;
-	}
-	global_exit = 1;
-	return 0;
-}
-
-
-static void search_conf(void)
-{
-	struct symbol **sym_arr;
-	struct gstr res;
-	struct gstr title;
-	char *dialog_input;
-	int dres;
-
-	title = str_new();
-	str_printf( &title, _("Enter (sub)string or regexp to search for "
-			      "(with or without \"%s\")"), CONFIG_);
-
-again:
-	dres = dialog_inputbox(main_window,
-			_("Search Configuration Parameter"),
-			str_get(&title),
-			"", &dialog_input_result, &dialog_input_result_len);
-	switch (dres) {
-	case 0:
-		break;
-	case 1:
-		show_scroll_win(main_window,
-				_("Search Configuration"), search_help);
-		goto again;
-	default:
-		str_free(&title);
-		return;
-	}
-
-	/* strip the prefix if necessary */
-	dialog_input = dialog_input_result;
-	if (strncasecmp(dialog_input_result, CONFIG_, strlen(CONFIG_)) == 0)
-		dialog_input += strlen(CONFIG_);
-
-	sym_arr = sym_re_search(dialog_input);
-	res = get_relations_str(sym_arr, NULL);
-	free(sym_arr);
-	show_scroll_win(main_window,
-			_("Search Results"), str_get(&res));
-	str_free(&res);
-	str_free(&title);
-}
-
-
-static void build_conf(struct menu *menu)
-{
-	struct symbol *sym;
-	struct property *prop;
-	struct menu *child;
-	int type, tmp, doint = 2;
-	tristate val;
-	char ch;
-
-	if (!menu || (!show_all_items && !menu_is_visible(menu)))
-		return;
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	if (!sym) {
-		if (prop && menu != current_menu) {
-			const char *prompt = menu_get_prompt(menu);
-			enum prop_type ptype;
-			ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-			switch (ptype) {
-			case P_MENU:
-				child_count++;
-				prompt = _(prompt);
-				if (single_menu_mode) {
-					item_make(menu, 'm',
-						"%s%*c%s",
-						menu->data ? "-->" : "++>",
-						indent + 1, ' ', prompt);
-				} else
-					item_make(menu, 'm',
-						  "   %*c%s  %s",
-						  indent + 1, ' ', prompt,
-						  menu_is_empty(menu) ? "----" : "--->");
-
-				if (single_menu_mode && menu->data)
-					goto conf_childs;
-				return;
-			case P_COMMENT:
-				if (prompt) {
-					child_count++;
-					item_make(menu, ':',
-						"   %*c*** %s ***",
-						indent + 1, ' ',
-						_(prompt));
-				}
-				break;
-			default:
-				if (prompt) {
-					child_count++;
-					item_make(menu, ':', "---%*c%s",
-						indent + 1, ' ',
-						_(prompt));
-				}
-			}
-		} else
-			doint = 0;
-		goto conf_childs;
-	}
-
-	type = sym_get_type(sym);
-	if (sym_is_choice(sym)) {
-		struct symbol *def_sym = sym_get_choice_value(sym);
-		struct menu *def_menu = NULL;
-
-		child_count++;
-		for (child = menu->list; child; child = child->next) {
-			if (menu_is_visible(child) && child->sym == def_sym)
-				def_menu = child;
-		}
-
-		val = sym_get_tristate_value(sym);
-		if (sym_is_changable(sym)) {
-			switch (type) {
-			case S_BOOLEAN:
-				item_make(menu, 't', "[%c]",
-						val == no ? ' ' : '*');
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes:
-					ch = '*';
-					break;
-				case mod:
-					ch = 'M';
-					break;
-				default:
-					ch = ' ';
-					break;
-				}
-				item_make(menu, 't', "<%c>", ch);
-				break;
-			}
-		} else {
-			item_make(menu, def_menu ? 't' : ':', "   ");
-		}
-
-		item_add_str("%*c%s", indent + 1,
-				' ', _(menu_get_prompt(menu)));
-		if (val == yes) {
-			if (def_menu) {
-				item_add_str(" (%s)",
-					_(menu_get_prompt(def_menu)));
-				item_add_str("  --->");
-				if (def_menu->list) {
-					indent += 2;
-					build_conf(def_menu);
-					indent -= 2;
-				}
-			}
-			return;
-		}
-	} else {
-		if (menu == current_menu) {
-			item_make(menu, ':',
-				"---%*c%s", indent + 1,
-				' ', _(menu_get_prompt(menu)));
-			goto conf_childs;
-		}
-		child_count++;
-		val = sym_get_tristate_value(sym);
-		if (sym_is_choice_value(sym) && val == yes) {
-			item_make(menu, ':', "   ");
-		} else {
-			switch (type) {
-			case S_BOOLEAN:
-				if (sym_is_changable(sym))
-					item_make(menu, 't', "[%c]",
-						val == no ? ' ' : '*');
-				else
-					item_make(menu, 't', "-%c-",
-						val == no ? ' ' : '*');
-				break;
-			case S_TRISTATE:
-				switch (val) {
-				case yes:
-					ch = '*';
-					break;
-				case mod:
-					ch = 'M';
-					break;
-				default:
-					ch = ' ';
-					break;
-				}
-				if (sym_is_changable(sym)) {
-					if (sym->rev_dep.tri == mod)
-						item_make(menu,
-							't', "{%c}", ch);
-					else
-						item_make(menu,
-							't', "<%c>", ch);
-				} else
-					item_make(menu, 't', "-%c-", ch);
-				break;
-			default:
-				tmp = 2 + strlen(sym_get_string_value(sym));
-				item_make(menu, 's', "    (%s)",
-						sym_get_string_value(sym));
-				tmp = indent - tmp + 4;
-				if (tmp < 0)
-					tmp = 0;
-				item_add_str("%*c%s%s", tmp, ' ',
-						_(menu_get_prompt(menu)),
-						(sym_has_value(sym) ||
-						 !sym_is_changable(sym)) ? "" :
-						_(" (NEW)"));
-				goto conf_childs;
-			}
-		}
-		item_add_str("%*c%s%s", indent + 1, ' ',
-				_(menu_get_prompt(menu)),
-				(sym_has_value(sym) || !sym_is_changable(sym)) ?
-				"" : _(" (NEW)"));
-		if (menu->prompt && menu->prompt->type == P_MENU) {
-			item_add_str("  %s", menu_is_empty(menu) ? "----" : "--->");
-			return;
-		}
-	}
-
-conf_childs:
-	indent += doint;
-	for (child = menu->list; child; child = child->next)
-		build_conf(child);
-	indent -= doint;
-}
-
-static void reset_menu(void)
-{
-	unpost_menu(curses_menu);
-	clean_items();
-}
-
-/* adjust the menu to show this item.
- * prefer not to scroll the menu if possible*/
-static void center_item(int selected_index, int *last_top_row)
-{
-	int toprow;
-
-	set_top_row(curses_menu, *last_top_row);
-	toprow = top_row(curses_menu);
-	if (selected_index < toprow ||
-	    selected_index >= toprow+mwin_max_lines) {
-		toprow = max(selected_index-mwin_max_lines/2, 0);
-		if (toprow >= item_count(curses_menu)-mwin_max_lines)
-			toprow = item_count(curses_menu)-mwin_max_lines;
-		set_top_row(curses_menu, toprow);
-	}
-	set_current_item(curses_menu,
-			curses_menu_items[selected_index]);
-	*last_top_row = toprow;
-	post_menu(curses_menu);
-	refresh_all_windows(main_window);
-}
-
-/* this function assumes reset_menu has been called before */
-static void show_menu(const char *prompt, const char *instructions,
-		int selected_index, int *last_top_row)
-{
-	int maxx, maxy;
-	WINDOW *menu_window;
-
-	current_instructions = instructions;
-
-	clear();
-	(void) wattrset(main_window, attributes[NORMAL]);
-	print_in_middle(stdscr, 1, 0, getmaxx(stdscr),
-			menu_backtitle,
-			attributes[MAIN_HEADING]);
-
-	(void) wattrset(main_window, attributes[MAIN_MENU_BOX]);
-	box(main_window, 0, 0);
-	(void) wattrset(main_window, attributes[MAIN_MENU_HEADING]);
-	mvwprintw(main_window, 0, 3, " %s ", prompt);
-	(void) wattrset(main_window, attributes[NORMAL]);
-
-	set_menu_items(curses_menu, curses_menu_items);
-
-	/* position the menu at the middle of the screen */
-	scale_menu(curses_menu, &maxy, &maxx);
-	maxx = min(maxx, mwin_max_cols-2);
-	maxy = mwin_max_lines;
-	menu_window = derwin(main_window,
-			maxy,
-			maxx,
-			2,
-			(mwin_max_cols-maxx)/2);
-	keypad(menu_window, TRUE);
-	set_menu_win(curses_menu, menu_window);
-	set_menu_sub(curses_menu, menu_window);
-
-	/* must reassert this after changing items, otherwise returns to a
-	 * default of 16
-	 */
-	set_menu_format(curses_menu, maxy, 1);
-	center_item(selected_index, last_top_row);
-	set_menu_format(curses_menu, maxy, 1);
-
-	print_function_line();
-
-	/* Post the menu */
-	post_menu(curses_menu);
-	refresh_all_windows(main_window);
-}
-
-static void adj_match_dir(match_f *match_direction)
-{
-	if (*match_direction == FIND_NEXT_MATCH_DOWN)
-		*match_direction =
-			MATCH_TINKER_PATTERN_DOWN;
-	else if (*match_direction == FIND_NEXT_MATCH_UP)
-		*match_direction =
-			MATCH_TINKER_PATTERN_UP;
-	/* else, do no change.. */
-}
-
-struct match_state
-{
-	int in_search;
-	match_f match_direction;
-	char pattern[256];
-};
-
-/* Return 0 means I have handled the key. In such a case, ans should hold the
- * item to center, or -1 otherwise.
- * Else return -1 .
- */
-static int do_match(int key, struct match_state *state, int *ans)
-{
-	char c = (char) key;
-	int terminate_search = 0;
-	*ans = -1;
-	if (key == '/' || (state->in_search && key == 27)) {
-		move(0, 0);
-		refresh();
-		clrtoeol();
-		state->in_search = 1-state->in_search;
-		bzero(state->pattern, sizeof(state->pattern));
-		state->match_direction = MATCH_TINKER_PATTERN_DOWN;
-		return 0;
-	} else if (!state->in_search)
-		return 1;
-
-	if (isalnum(c) || isgraph(c) || c == ' ') {
-		state->pattern[strlen(state->pattern)] = c;
-		state->pattern[strlen(state->pattern)] = '\0';
-		adj_match_dir(&state->match_direction);
-		*ans = get_mext_match(state->pattern,
-				state->match_direction);
-	} else if (key == KEY_DOWN) {
-		state->match_direction = FIND_NEXT_MATCH_DOWN;
-		*ans = get_mext_match(state->pattern,
-				state->match_direction);
-	} else if (key == KEY_UP) {
-		state->match_direction = FIND_NEXT_MATCH_UP;
-		*ans = get_mext_match(state->pattern,
-				state->match_direction);
-	} else if (key == KEY_BACKSPACE || key == 127) {
-		state->pattern[strlen(state->pattern)-1] = '\0';
-		adj_match_dir(&state->match_direction);
-	} else
-		terminate_search = 1;
-
-	if (terminate_search) {
-		state->in_search = 0;
-		bzero(state->pattern, sizeof(state->pattern));
-		move(0, 0);
-		refresh();
-		clrtoeol();
-		return -1;
-	}
-	return 0;
-}
-
-static void conf(struct menu *menu)
-{
-	struct menu *submenu = 0;
-	const char *prompt = menu_get_prompt(menu);
-	struct symbol *sym;
-	int res;
-	int current_index = 0;
-	int last_top_row = 0;
-	struct match_state match_state = {
-		.in_search = 0,
-		.match_direction = MATCH_TINKER_PATTERN_DOWN,
-		.pattern = "",
-	};
-
-	while (!global_exit) {
-		reset_menu();
-		current_menu = menu;
-		build_conf(menu);
-		if (!child_count)
-			break;
-
-		show_menu(prompt ? _(prompt) : _("Main Menu"),
-				_(menu_instructions),
-				current_index, &last_top_row);
-		keypad((menu_win(curses_menu)), TRUE);
-		while (!global_exit) {
-			if (match_state.in_search) {
-				mvprintw(0, 0,
-					"searching: %s", match_state.pattern);
-				clrtoeol();
-			}
-			refresh_all_windows(main_window);
-			res = wgetch(menu_win(curses_menu));
-			if (!res)
-				break;
-			if (do_match(res, &match_state, &current_index) == 0) {
-				if (current_index != -1)
-					center_item(current_index,
-						    &last_top_row);
-				continue;
-			}
-			if (process_special_keys(&res,
-						(struct menu *) item_data()))
-				break;
-			switch (res) {
-			case KEY_DOWN:
-				menu_driver(curses_menu, REQ_DOWN_ITEM);
-				break;
-			case KEY_UP:
-				menu_driver(curses_menu, REQ_UP_ITEM);
-				break;
-			case KEY_NPAGE:
-				menu_driver(curses_menu, REQ_SCR_DPAGE);
-				break;
-			case KEY_PPAGE:
-				menu_driver(curses_menu, REQ_SCR_UPAGE);
-				break;
-			case KEY_HOME:
-				menu_driver(curses_menu, REQ_FIRST_ITEM);
-				break;
-			case KEY_END:
-				menu_driver(curses_menu, REQ_LAST_ITEM);
-				break;
-			case 'h':
-			case '?':
-				show_help((struct menu *) item_data());
-				break;
-			}
-			if (res == 10 || res == 27 ||
-				res == 32 || res == 'n' || res == 'y' ||
-				res == KEY_LEFT || res == KEY_RIGHT ||
-				res == 'm')
-				break;
-			refresh_all_windows(main_window);
-		}
-
-		refresh_all_windows(main_window);
-		/* if ESC or left*/
-		if (res == 27 || (menu != &rootmenu && res == KEY_LEFT))
-			break;
-
-		/* remember location in the menu */
-		last_top_row = top_row(curses_menu);
-		current_index = curses_item_index();
-
-		if (!item_tag())
-			continue;
-
-		submenu = (struct menu *) item_data();
-		if (!submenu || !menu_is_visible(submenu))
-			continue;
-		sym = submenu->sym;
-
-		switch (res) {
-		case ' ':
-			if (item_is_tag('t'))
-				sym_toggle_tristate_value(sym);
-			else if (item_is_tag('m'))
-				conf(submenu);
-			break;
-		case KEY_RIGHT:
-		case 10: /* ENTER WAS PRESSED */
-			switch (item_tag()) {
-			case 'm':
-				if (single_menu_mode)
-					submenu->data =
-						(void *) (long) !submenu->data;
-				else
-					conf(submenu);
-				break;
-			case 't':
-				if (sym_is_choice(sym) &&
-				    sym_get_tristate_value(sym) == yes)
-					conf_choice(submenu);
-				else if (submenu->prompt &&
-					 submenu->prompt->type == P_MENU)
-					conf(submenu);
-				else if (res == 10)
-					sym_toggle_tristate_value(sym);
-				break;
-			case 's':
-				conf_string(submenu);
-				break;
-			}
-			break;
-		case 'y':
-			if (item_is_tag('t')) {
-				if (sym_set_tristate_value(sym, yes))
-					break;
-				if (sym_set_tristate_value(sym, mod))
-					btn_dialog(main_window, setmod_text, 0);
-			}
-			break;
-		case 'n':
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, no);
-			break;
-		case 'm':
-			if (item_is_tag('t'))
-				sym_set_tristate_value(sym, mod);
-			break;
-		}
-	}
-}
-
-static void conf_message_callback(const char *fmt, va_list ap)
-{
-	char buf[1024];
-
-	vsnprintf(buf, sizeof(buf), fmt, ap);
-	btn_dialog(main_window, buf, 1, "<OK>");
-}
-
-static void show_help(struct menu *menu)
-{
-	struct gstr help;
-
-	if (!menu)
-		return;
-
-	help = str_new();
-	menu_get_ext_help(menu, &help);
-	show_scroll_win(main_window, _(menu_get_prompt(menu)), str_get(&help));
-	str_free(&help);
-}
-
-static void conf_choice(struct menu *menu)
-{
-	const char *prompt = _(menu_get_prompt(menu));
-	struct menu *child = 0;
-	struct symbol *active;
-	int selected_index = 0;
-	int last_top_row = 0;
-	int res, i = 0;
-	struct match_state match_state = {
-		.in_search = 0,
-		.match_direction = MATCH_TINKER_PATTERN_DOWN,
-		.pattern = "",
-	};
-
-	active = sym_get_choice_value(menu->sym);
-	/* this is mostly duplicated from the conf() function. */
-	while (!global_exit) {
-		reset_menu();
-
-		for (i = 0, child = menu->list; child; child = child->next) {
-			if (!show_all_items && !menu_is_visible(child))
-				continue;
-
-			if (child->sym == sym_get_choice_value(menu->sym))
-				item_make(child, ':', "<X> %s",
-						_(menu_get_prompt(child)));
-			else if (child->sym)
-				item_make(child, ':', "    %s",
-						_(menu_get_prompt(child)));
-			else
-				item_make(child, ':', "*** %s ***",
-						_(menu_get_prompt(child)));
-
-			if (child->sym == active){
-				last_top_row = top_row(curses_menu);
-				selected_index = i;
-			}
-			i++;
-		}
-		show_menu(prompt ? _(prompt) : _("Choice Menu"),
-				_(radiolist_instructions),
-				selected_index,
-				&last_top_row);
-		while (!global_exit) {
-			if (match_state.in_search) {
-				mvprintw(0, 0, "searching: %s",
-					 match_state.pattern);
-				clrtoeol();
-			}
-			refresh_all_windows(main_window);
-			res = wgetch(menu_win(curses_menu));
-			if (!res)
-				break;
-			if (do_match(res, &match_state, &selected_index) == 0) {
-				if (selected_index != -1)
-					center_item(selected_index,
-						    &last_top_row);
-				continue;
-			}
-			if (process_special_keys(
-						&res,
-						(struct menu *) item_data()))
-				break;
-			switch (res) {
-			case KEY_DOWN:
-				menu_driver(curses_menu, REQ_DOWN_ITEM);
-				break;
-			case KEY_UP:
-				menu_driver(curses_menu, REQ_UP_ITEM);
-				break;
-			case KEY_NPAGE:
-				menu_driver(curses_menu, REQ_SCR_DPAGE);
-				break;
-			case KEY_PPAGE:
-				menu_driver(curses_menu, REQ_SCR_UPAGE);
-				break;
-			case KEY_HOME:
-				menu_driver(curses_menu, REQ_FIRST_ITEM);
-				break;
-			case KEY_END:
-				menu_driver(curses_menu, REQ_LAST_ITEM);
-				break;
-			case 'h':
-			case '?':
-				show_help((struct menu *) item_data());
-				break;
-			}
-			if (res == 10 || res == 27 || res == ' ' ||
-					res == KEY_LEFT){
-				break;
-			}
-			refresh_all_windows(main_window);
-		}
-		/* if ESC or left */
-		if (res == 27 || res == KEY_LEFT)
-			break;
-
-		child = item_data();
-		if (!child || !menu_is_visible(child) || !child->sym)
-			continue;
-		switch (res) {
-		case ' ':
-		case  10:
-		case KEY_RIGHT:
-			sym_set_tristate_value(child->sym, yes);
-			return;
-		case 'h':
-		case '?':
-			show_help(child);
-			active = child->sym;
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-static void conf_string(struct menu *menu)
-{
-	const char *prompt = menu_get_prompt(menu);
-
-	while (1) {
-		int res;
-		const char *heading;
-
-		switch (sym_get_type(menu->sym)) {
-		case S_INT:
-			heading = _(inputbox_instructions_int);
-			break;
-		case S_HEX:
-			heading = _(inputbox_instructions_hex);
-			break;
-		case S_STRING:
-			heading = _(inputbox_instructions_string);
-			break;
-		default:
-			heading = _("Internal nconf error!");
-		}
-		res = dialog_inputbox(main_window,
-				prompt ? _(prompt) : _("Main Menu"),
-				heading,
-				sym_get_string_value(menu->sym),
-				&dialog_input_result,
-				&dialog_input_result_len);
-		switch (res) {
-		case 0:
-			if (sym_set_string_value(menu->sym,
-						dialog_input_result))
-				return;
-			btn_dialog(main_window,
-				_("You have made an invalid entry."), 0);
-			break;
-		case 1:
-			show_help(menu);
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-static void conf_load(void)
-{
-	while (1) {
-		int res;
-		res = dialog_inputbox(main_window,
-				NULL, load_config_text,
-				filename,
-				&dialog_input_result,
-				&dialog_input_result_len);
-		switch (res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			if (!conf_read(dialog_input_result)) {
-				set_config_filename(dialog_input_result);
-				sym_set_change_count(1);
-				return;
-			}
-			btn_dialog(main_window, _("File does not exist!"), 0);
-			break;
-		case 1:
-			show_scroll_win(main_window,
-					_("Load Alternate Configuration"),
-					load_config_help);
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-static void conf_save(void)
-{
-	while (1) {
-		int res;
-		res = dialog_inputbox(main_window,
-				NULL, save_config_text,
-				filename,
-				&dialog_input_result,
-				&dialog_input_result_len);
-		switch (res) {
-		case 0:
-			if (!dialog_input_result[0])
-				return;
-			res = conf_write(dialog_input_result);
-			if (!res) {
-				set_config_filename(dialog_input_result);
-				return;
-			}
-			btn_dialog(main_window, _("Can't create file! "
-				"Probably a nonexistent directory."),
-				1, "<OK>");
-			break;
-		case 1:
-			show_scroll_win(main_window,
-				_("Save Alternate Configuration"),
-				save_config_help);
-			break;
-		case KEY_EXIT:
-			return;
-		}
-	}
-}
-
-void setup_windows(void)
-{
-	int lines, columns;
-
-	getmaxyx(stdscr, lines, columns);
-
-	if (main_window != NULL)
-		delwin(main_window);
-
-	/* set up the menu and menu window */
-	main_window = newwin(lines-2, columns-2, 2, 1);
-	keypad(main_window, TRUE);
-	mwin_max_lines = lines-7;
-	mwin_max_cols = columns-6;
-
-	/* panels order is from bottom to top */
-	new_panel(main_window);
-}
-
-int main(int ac, char **av)
-{
-	int lines, columns;
-	char *mode;
-
-	setlocale(LC_ALL, "");
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	conf_parse(av[1]);
-	conf_read(NULL);
-
-	mode = getenv("NCONFIG_MODE");
-	if (mode) {
-		if (!strcasecmp(mode, "single_menu"))
-			single_menu_mode = 1;
-	}
-
-	/* Initialize curses */
-	initscr();
-	/* set color theme */
-	set_colors();
-
-	cbreak();
-	noecho();
-	keypad(stdscr, TRUE);
-	curs_set(0);
-
-	getmaxyx(stdscr, lines, columns);
-	if (columns < 75 || lines < 20) {
-		endwin();
-		printf("Your terminal should have at "
-			"least 20 lines and 75 columns\n");
-		return 1;
-	}
-
-	notimeout(stdscr, FALSE);
-#if NCURSES_REENTRANT
-	set_escdelay(1);
-#else
-	ESCDELAY = 1;
-#endif
-
-	/* set btns menu */
-	curses_menu = new_menu(curses_menu_items);
-	menu_opts_off(curses_menu, O_SHOWDESC);
-	menu_opts_on(curses_menu, O_SHOWMATCH);
-	menu_opts_on(curses_menu, O_ONEVALUE);
-	menu_opts_on(curses_menu, O_NONCYCLIC);
-	menu_opts_on(curses_menu, O_IGNORECASE);
-	set_menu_mark(curses_menu, " ");
-	set_menu_fore(curses_menu, attributes[MAIN_MENU_FORE]);
-	set_menu_back(curses_menu, attributes[MAIN_MENU_BACK]);
-	set_menu_grey(curses_menu, attributes[MAIN_MENU_GREY]);
-
-	set_config_filename(conf_get_configname());
-	setup_windows();
-
-	/* check for KEY_FUNC(1) */
-	if (has_key(KEY_F(1)) == FALSE) {
-		show_scroll_win(main_window,
-				_("Instructions"),
-				_(menu_no_f_instructions));
-	}
-
-	conf_set_message_callback(conf_message_callback);
-	/* do the work */
-	while (!global_exit) {
-		conf(&rootmenu);
-		if (!global_exit && do_exit() == 0)
-			break;
-	}
-	/* ok, we are done */
-	unpost_menu(curses_menu);
-	free_menu(curses_menu);
-	delwin(main_window);
-	clear();
-	refresh();
-	endwin();
-	return 0;
-}
-
diff --git a/support/kconfig/nconf.gui.c b/support/kconfig/nconf.gui.c
deleted file mode 100644
index 8275f0e..0000000
--- a/support/kconfig/nconf.gui.c
+++ /dev/null
@@ -1,656 +0,0 @@
-/*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
- *
- * Derived from menuconfig.
- *
- */
-#include "nconf.h"
-
-/* a list of all the different widgets we use */
-attributes_t attributes[ATTR_MAX+1] = {0};
-
-/* available colors:
-   COLOR_BLACK   0
-   COLOR_RED     1
-   COLOR_GREEN   2
-   COLOR_YELLOW  3
-   COLOR_BLUE    4
-   COLOR_MAGENTA 5
-   COLOR_CYAN    6
-   COLOR_WHITE   7
-   */
-static void set_normal_colors(void)
-{
-	init_pair(NORMAL, -1, -1);
-	init_pair(MAIN_HEADING, COLOR_MAGENTA, -1);
-
-	/* FORE is for the selected item */
-	init_pair(MAIN_MENU_FORE, -1, -1);
-	/* BACK for all the rest */
-	init_pair(MAIN_MENU_BACK, -1, -1);
-	init_pair(MAIN_MENU_GREY, -1, -1);
-	init_pair(MAIN_MENU_HEADING, COLOR_GREEN, -1);
-	init_pair(MAIN_MENU_BOX, COLOR_YELLOW, -1);
-
-	init_pair(SCROLLWIN_TEXT, -1, -1);
-	init_pair(SCROLLWIN_HEADING, COLOR_GREEN, -1);
-	init_pair(SCROLLWIN_BOX, COLOR_YELLOW, -1);
-
-	init_pair(DIALOG_TEXT, -1, -1);
-	init_pair(DIALOG_BOX, COLOR_YELLOW, -1);
-	init_pair(DIALOG_MENU_BACK, COLOR_YELLOW, -1);
-	init_pair(DIALOG_MENU_FORE, COLOR_RED, -1);
-
-	init_pair(INPUT_BOX, COLOR_YELLOW, -1);
-	init_pair(INPUT_HEADING, COLOR_GREEN, -1);
-	init_pair(INPUT_TEXT, -1, -1);
-	init_pair(INPUT_FIELD, -1, -1);
-
-	init_pair(FUNCTION_HIGHLIGHT, -1, -1);
-	init_pair(FUNCTION_TEXT, COLOR_YELLOW, -1);
-}
-
-/* available attributes:
-   A_NORMAL        Normal display (no highlight)
-   A_STANDOUT      Best highlighting mode of the terminal.
-   A_UNDERLINE     Underlining
-   A_REVERSE       Reverse video
-   A_BLINK         Blinking
-   A_DIM           Half bright
-   A_BOLD          Extra bright or bold
-   A_PROTECT       Protected mode
-   A_INVIS         Invisible or blank mode
-   A_ALTCHARSET    Alternate character set
-   A_CHARTEXT      Bit-mask to extract a character
-   COLOR_PAIR(n)   Color-pair number n
-   */
-static void normal_color_theme(void)
-{
-	/* automatically add color... */
-#define mkattr(name, attr) do { \
-attributes[name] = attr | COLOR_PAIR(name); } while (0)
-	mkattr(NORMAL, NORMAL);
-	mkattr(MAIN_HEADING, A_BOLD | A_UNDERLINE);
-
-	mkattr(MAIN_MENU_FORE, A_REVERSE);
-	mkattr(MAIN_MENU_BACK, A_NORMAL);
-	mkattr(MAIN_MENU_GREY, A_NORMAL);
-	mkattr(MAIN_MENU_HEADING, A_BOLD);
-	mkattr(MAIN_MENU_BOX, A_NORMAL);
-
-	mkattr(SCROLLWIN_TEXT, A_NORMAL);
-	mkattr(SCROLLWIN_HEADING, A_BOLD);
-	mkattr(SCROLLWIN_BOX, A_BOLD);
-
-	mkattr(DIALOG_TEXT, A_BOLD);
-	mkattr(DIALOG_BOX, A_BOLD);
-	mkattr(DIALOG_MENU_FORE, A_STANDOUT);
-	mkattr(DIALOG_MENU_BACK, A_NORMAL);
-
-	mkattr(INPUT_BOX, A_NORMAL);
-	mkattr(INPUT_HEADING, A_BOLD);
-	mkattr(INPUT_TEXT, A_NORMAL);
-	mkattr(INPUT_FIELD, A_UNDERLINE);
-
-	mkattr(FUNCTION_HIGHLIGHT, A_BOLD);
-	mkattr(FUNCTION_TEXT, A_REVERSE);
-}
-
-static void no_colors_theme(void)
-{
-	/* automatically add highlight, no color */
-#define mkattrn(name, attr) { attributes[name] = attr; }
-
-	mkattrn(NORMAL, NORMAL);
-	mkattrn(MAIN_HEADING, A_BOLD | A_UNDERLINE);
-
-	mkattrn(MAIN_MENU_FORE, A_STANDOUT);
-	mkattrn(MAIN_MENU_BACK, A_NORMAL);
-	mkattrn(MAIN_MENU_GREY, A_NORMAL);
-	mkattrn(MAIN_MENU_HEADING, A_BOLD);
-	mkattrn(MAIN_MENU_BOX, A_NORMAL);
-
-	mkattrn(SCROLLWIN_TEXT, A_NORMAL);
-	mkattrn(SCROLLWIN_HEADING, A_BOLD);
-	mkattrn(SCROLLWIN_BOX, A_BOLD);
-
-	mkattrn(DIALOG_TEXT, A_NORMAL);
-	mkattrn(DIALOG_BOX, A_BOLD);
-	mkattrn(DIALOG_MENU_FORE, A_STANDOUT);
-	mkattrn(DIALOG_MENU_BACK, A_NORMAL);
-
-	mkattrn(INPUT_BOX, A_BOLD);
-	mkattrn(INPUT_HEADING, A_BOLD);
-	mkattrn(INPUT_TEXT, A_NORMAL);
-	mkattrn(INPUT_FIELD, A_UNDERLINE);
-
-	mkattrn(FUNCTION_HIGHLIGHT, A_BOLD);
-	mkattrn(FUNCTION_TEXT, A_REVERSE);
-}
-
-void set_colors()
-{
-	start_color();
-	use_default_colors();
-	set_normal_colors();
-	if (has_colors()) {
-		normal_color_theme();
-	} else {
-		/* give defaults */
-		no_colors_theme();
-	}
-}
-
-
-/* this changes the windows attributes !!! */
-void print_in_middle(WINDOW *win,
-		int starty,
-		int startx,
-		int width,
-		const char *string,
-		chtype color)
-{      int length, x, y;
-	float temp;
-
-
-	if (win == NULL)
-		win = stdscr;
-	getyx(win, y, x);
-	if (startx != 0)
-		x = startx;
-	if (starty != 0)
-		y = starty;
-	if (width == 0)
-		width = 80;
-
-	length = strlen(string);
-	temp = (width - length) / 2;
-	x = startx + (int)temp;
-	(void) wattrset(win, color);
-	mvwprintw(win, y, x, "%s", string);
-	refresh();
-}
-
-int get_line_no(const char *text)
-{
-	int i;
-	int total = 1;
-
-	if (!text)
-		return 0;
-
-	for (i = 0; text[i] != '\0'; i++)
-		if (text[i] == '\n')
-			total++;
-	return total;
-}
-
-const char *get_line(const char *text, int line_no)
-{
-	int i;
-	int lines = 0;
-
-	if (!text)
-		return 0;
-
-	for (i = 0; text[i] != '\0' && lines < line_no; i++)
-		if (text[i] == '\n')
-			lines++;
-	return text+i;
-}
-
-int get_line_length(const char *line)
-{
-	int res = 0;
-	while (*line != '\0' && *line != '\n') {
-		line++;
-		res++;
-	}
-	return res;
-}
-
-/* print all lines to the window. */
-void fill_window(WINDOW *win, const char *text)
-{
-	int x, y;
-	int total_lines = get_line_no(text);
-	int i;
-
-	getmaxyx(win, y, x);
-	/* do not go over end of line */
-	total_lines = min(total_lines, y);
-	for (i = 0; i < total_lines; i++) {
-		char tmp[x+10];
-		const char *line = get_line(text, i);
-		int len = get_line_length(line);
-		strncpy(tmp, line, min(len, x));
-		tmp[len] = '\0';
-		mvwprintw(win, i, 0, "%s", tmp);
-	}
-}
-
-/* get the message, and buttons.
- * each button must be a char*
- * return the selected button
- *
- * this dialog is used for 2 different things:
- * 1) show a text box, no buttons.
- * 2) show a dialog, with horizontal buttons
- */
-int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
-{
-	va_list ap;
-	char *btn;
-	int btns_width = 0;
-	int msg_lines = 0;
-	int msg_width = 0;
-	int total_width;
-	int win_rows = 0;
-	WINDOW *win;
-	WINDOW *msg_win;
-	WINDOW *menu_win;
-	MENU *menu;
-	ITEM *btns[btn_num+1];
-	int i, x, y;
-	int res = -1;
-
-
-	va_start(ap, btn_num);
-	for (i = 0; i < btn_num; i++) {
-		btn = va_arg(ap, char *);
-		btns[i] = new_item(btn, "");
-		btns_width += strlen(btn)+1;
-	}
-	va_end(ap);
-	btns[btn_num] = NULL;
-
-	/* find the widest line of msg: */
-	msg_lines = get_line_no(msg);
-	for (i = 0; i < msg_lines; i++) {
-		const char *line = get_line(msg, i);
-		int len = get_line_length(line);
-		if (msg_width < len)
-			msg_width = len;
-	}
-
-	total_width = max(msg_width, btns_width);
-	/* place dialog in middle of screen */
-	y = (getmaxy(stdscr)-(msg_lines+4))/2;
-	x = (getmaxx(stdscr)-(total_width+4))/2;
-
-
-	/* create the windows */
-	if (btn_num > 0)
-		win_rows = msg_lines+4;
-	else
-		win_rows = msg_lines+2;
-
-	win = newwin(win_rows, total_width+4, y, x);
-	keypad(win, TRUE);
-	menu_win = derwin(win, 1, btns_width, win_rows-2,
-			1+(total_width+2-btns_width)/2);
-	menu = new_menu(btns);
-	msg_win = derwin(win, win_rows-2, msg_width, 1,
-			1+(total_width+2-msg_width)/2);
-
-	set_menu_fore(menu, attributes[DIALOG_MENU_FORE]);
-	set_menu_back(menu, attributes[DIALOG_MENU_BACK]);
-
-	(void) wattrset(win, attributes[DIALOG_BOX]);
-	box(win, 0, 0);
-
-	/* print message */
-	(void) wattrset(msg_win, attributes[DIALOG_TEXT]);
-	fill_window(msg_win, msg);
-
-	set_menu_win(menu, win);
-	set_menu_sub(menu, menu_win);
-	set_menu_format(menu, 1, btn_num);
-	menu_opts_off(menu, O_SHOWDESC);
-	menu_opts_off(menu, O_SHOWMATCH);
-	menu_opts_on(menu, O_ONEVALUE);
-	menu_opts_on(menu, O_NONCYCLIC);
-	set_menu_mark(menu, "");
-	post_menu(menu);
-
-
-	touchwin(win);
-	refresh_all_windows(main_window);
-	while ((res = wgetch(win))) {
-		switch (res) {
-		case KEY_LEFT:
-			menu_driver(menu, REQ_LEFT_ITEM);
-			break;
-		case KEY_RIGHT:
-			menu_driver(menu, REQ_RIGHT_ITEM);
-			break;
-		case 10: /* ENTER */
-		case 27: /* ESCAPE */
-		case ' ':
-		case KEY_F(F_BACK):
-		case KEY_F(F_EXIT):
-			break;
-		}
-		touchwin(win);
-		refresh_all_windows(main_window);
-
-		if (res == 10 || res == ' ') {
-			res = item_index(current_item(menu));
-			break;
-		} else if (res == 27 || res == KEY_F(F_BACK) ||
-				res == KEY_F(F_EXIT)) {
-			res = KEY_EXIT;
-			break;
-		}
-	}
-
-	unpost_menu(menu);
-	free_menu(menu);
-	for (i = 0; i < btn_num; i++)
-		free_item(btns[i]);
-
-	delwin(win);
-	return res;
-}
-
-int dialog_inputbox(WINDOW *main_window,
-		const char *title, const char *prompt,
-		const char *init, char **resultp, int *result_len)
-{
-	int prompt_lines = 0;
-	int prompt_width = 0;
-	WINDOW *win;
-	WINDOW *prompt_win;
-	WINDOW *form_win;
-	PANEL *panel;
-	int i, x, y;
-	int res = -1;
-	int cursor_position = strlen(init);
-	int cursor_form_win;
-	char *result = *resultp;
-
-	if (strlen(init)+1 > *result_len) {
-		*result_len = strlen(init)+1;
-		*resultp = result = realloc(result, *result_len);
-	}
-
-	/* find the widest line of msg: */
-	prompt_lines = get_line_no(prompt);
-	for (i = 0; i < prompt_lines; i++) {
-		const char *line = get_line(prompt, i);
-		int len = get_line_length(line);
-		prompt_width = max(prompt_width, len);
-	}
-
-	if (title)
-		prompt_width = max(prompt_width, strlen(title));
-
-	/* place dialog in middle of screen */
-	y = (getmaxy(stdscr)-(prompt_lines+4))/2;
-	x = (getmaxx(stdscr)-(prompt_width+4))/2;
-
-	strncpy(result, init, *result_len);
-
-	/* create the windows */
-	win = newwin(prompt_lines+6, prompt_width+7, y, x);
-	prompt_win = derwin(win, prompt_lines+1, prompt_width, 2, 2);
-	form_win = derwin(win, 1, prompt_width, prompt_lines+3, 2);
-	keypad(form_win, TRUE);
-
-	(void) wattrset(form_win, attributes[INPUT_FIELD]);
-
-	(void) wattrset(win, attributes[INPUT_BOX]);
-	box(win, 0, 0);
-	(void) wattrset(win, attributes[INPUT_HEADING]);
-	if (title)
-		mvwprintw(win, 0, 3, "%s", title);
-
-	/* print message */
-	(void) wattrset(prompt_win, attributes[INPUT_TEXT]);
-	fill_window(prompt_win, prompt);
-
-	mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
-	cursor_form_win = min(cursor_position, prompt_width-1);
-	mvwprintw(form_win, 0, 0, "%s",
-		  result + cursor_position-cursor_form_win);
-
-	/* create panels */
-	panel = new_panel(win);
-
-	/* show the cursor */
-	curs_set(1);
-
-	touchwin(win);
-	refresh_all_windows(main_window);
-	while ((res = wgetch(form_win))) {
-		int len = strlen(result);
-		switch (res) {
-		case 10: /* ENTER */
-		case 27: /* ESCAPE */
-		case KEY_F(F_HELP):
-		case KEY_F(F_EXIT):
-		case KEY_F(F_BACK):
-			break;
-		case 127:
-		case KEY_BACKSPACE:
-			if (cursor_position > 0) {
-				memmove(&result[cursor_position-1],
-						&result[cursor_position],
-						len-cursor_position+1);
-				cursor_position--;
-				cursor_form_win--;
-				len--;
-			}
-			break;
-		case KEY_DC:
-			if (cursor_position >= 0 && cursor_position < len) {
-				memmove(&result[cursor_position],
-						&result[cursor_position+1],
-						len-cursor_position+1);
-				len--;
-			}
-			break;
-		case KEY_UP:
-		case KEY_RIGHT:
-			if (cursor_position < len) {
-				cursor_position++;
-				cursor_form_win++;
-			}
-			break;
-		case KEY_DOWN:
-		case KEY_LEFT:
-			if (cursor_position > 0) {
-				cursor_position--;
-				cursor_form_win--;
-			}
-			break;
-		case KEY_HOME:
-			cursor_position = 0;
-			cursor_form_win = 0;
-			break;
-		case KEY_END:
-			cursor_position = len;
-			cursor_form_win = min(cursor_position, prompt_width-1);
-			break;
-		default:
-			if ((isgraph(res) || isspace(res))) {
-				/* one for new char, one for '\0' */
-				if (len+2 > *result_len) {
-					*result_len = len+2;
-					*resultp = result = realloc(result,
-								*result_len);
-				}
-				/* insert the char at the proper position */
-				memmove(&result[cursor_position+1],
-						&result[cursor_position],
-						len-cursor_position+1);
-				result[cursor_position] = res;
-				cursor_position++;
-				cursor_form_win++;
-				len++;
-			} else {
-				mvprintw(0, 0, "unknown key: %d\n", res);
-			}
-			break;
-		}
-		if (cursor_form_win < 0)
-			cursor_form_win = 0;
-		else if (cursor_form_win > prompt_width-1)
-			cursor_form_win = prompt_width-1;
-
-		wmove(form_win, 0, 0);
-		wclrtoeol(form_win);
-		mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
-		mvwprintw(form_win, 0, 0, "%s",
-			result + cursor_position-cursor_form_win);
-		wmove(form_win, 0, cursor_form_win);
-		touchwin(win);
-		refresh_all_windows(main_window);
-
-		if (res == 10) {
-			res = 0;
-			break;
-		} else if (res == 27 || res == KEY_F(F_BACK) ||
-				res == KEY_F(F_EXIT)) {
-			res = KEY_EXIT;
-			break;
-		} else if (res == KEY_F(F_HELP)) {
-			res = 1;
-			break;
-		}
-	}
-
-	/* hide the cursor */
-	curs_set(0);
-	del_panel(panel);
-	delwin(prompt_win);
-	delwin(form_win);
-	delwin(win);
-	return res;
-}
-
-/* refresh all windows in the correct order */
-void refresh_all_windows(WINDOW *main_window)
-{
-	update_panels();
-	touchwin(main_window);
-	refresh();
-}
-
-/* layman's scrollable window... */
-void show_scroll_win(WINDOW *main_window,
-		const char *title,
-		const char *text)
-{
-	int res;
-	int total_lines = get_line_no(text);
-	int x, y, lines, columns;
-	int start_x = 0, start_y = 0;
-	int text_lines = 0, text_cols = 0;
-	int total_cols = 0;
-	int win_cols = 0;
-	int win_lines = 0;
-	int i = 0;
-	WINDOW *win;
-	WINDOW *pad;
-	PANEL *panel;
-
-	getmaxyx(stdscr, lines, columns);
-
-	/* find the widest line of msg: */
-	total_lines = get_line_no(text);
-	for (i = 0; i < total_lines; i++) {
-		const char *line = get_line(text, i);
-		int len = get_line_length(line);
-		total_cols = max(total_cols, len+2);
-	}
-
-	/* create the pad */
-	pad = newpad(total_lines+10, total_cols+10);
-	(void) wattrset(pad, attributes[SCROLLWIN_TEXT]);
-	fill_window(pad, text);
-
-	win_lines = min(total_lines+4, lines-2);
-	win_cols = min(total_cols+2, columns-2);
-	text_lines = max(win_lines-4, 0);
-	text_cols = max(win_cols-2, 0);
-
-	/* place window in middle of screen */
-	y = (lines-win_lines)/2;
-	x = (columns-win_cols)/2;
-
-	win = newwin(win_lines, win_cols, y, x);
-	keypad(win, TRUE);
-	/* show the help in the help window, and show the help panel */
-	(void) wattrset(win, attributes[SCROLLWIN_BOX]);
-	box(win, 0, 0);
-	(void) wattrset(win, attributes[SCROLLWIN_HEADING]);
-	mvwprintw(win, 0, 3, " %s ", title);
-	panel = new_panel(win);
-
-	/* handle scrolling */
-	do {
-
-		copywin(pad, win, start_y, start_x, 2, 2, text_lines,
-				text_cols, 0);
-		print_in_middle(win,
-				text_lines+2,
-				0,
-				text_cols,
-				"<OK>",
-				attributes[DIALOG_MENU_FORE]);
-		wrefresh(win);
-
-		res = wgetch(win);
-		switch (res) {
-		case KEY_NPAGE:
-		case ' ':
-		case 'd':
-			start_y += text_lines-2;
-			break;
-		case KEY_PPAGE:
-		case 'u':
-			start_y -= text_lines+2;
-			break;
-		case KEY_HOME:
-			start_y = 0;
-			break;
-		case KEY_END:
-			start_y = total_lines-text_lines;
-			break;
-		case KEY_DOWN:
-		case 'j':
-			start_y++;
-			break;
-		case KEY_UP:
-		case 'k':
-			start_y--;
-			break;
-		case KEY_LEFT:
-		case 'h':
-			start_x--;
-			break;
-		case KEY_RIGHT:
-		case 'l':
-			start_x++;
-			break;
-		}
-		if (res == 10 || res == 27 || res == 'q' ||
-			res == KEY_F(F_HELP) || res == KEY_F(F_BACK) ||
-			res == KEY_F(F_EXIT))
-			break;
-		if (start_y < 0)
-			start_y = 0;
-		if (start_y >= total_lines-text_lines)
-			start_y = total_lines-text_lines;
-		if (start_x < 0)
-			start_x = 0;
-		if (start_x >= total_cols-text_cols)
-			start_x = total_cols-text_cols;
-	} while (res);
-
-	del_panel(panel);
-	delwin(win);
-	refresh_all_windows(main_window);
-}
diff --git a/support/kconfig/nconf.h b/support/kconfig/nconf.h
deleted file mode 100644
index 0d52617..0000000
--- a/support/kconfig/nconf.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2008 Nir Tzachar <nir.tzachar@gmail.com?
- * Released under the terms of the GNU GPL v2.0.
- *
- * Derived from menuconfig.
- *
- */
-
-#include <ctype.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <locale.h>
-#include <curses.h>
-#include <menu.h>
-#include <panel.h>
-#include <form.h>
-
-#include <stdio.h>
-#include <time.h>
-#include <sys/time.h>
-
-#include "ncurses.h"
-
-#define max(a, b) ({\
-		typeof(a) _a = a;\
-		typeof(b) _b = b;\
-		_a > _b ? _a : _b; })
-
-#define min(a, b) ({\
-		typeof(a) _a = a;\
-		typeof(b) _b = b;\
-		_a < _b ? _a : _b; })
-
-typedef enum {
-	NORMAL = 1,
-	MAIN_HEADING,
-	MAIN_MENU_BOX,
-	MAIN_MENU_FORE,
-	MAIN_MENU_BACK,
-	MAIN_MENU_GREY,
-	MAIN_MENU_HEADING,
-	SCROLLWIN_TEXT,
-	SCROLLWIN_HEADING,
-	SCROLLWIN_BOX,
-	DIALOG_TEXT,
-	DIALOG_MENU_FORE,
-	DIALOG_MENU_BACK,
-	DIALOG_BOX,
-	INPUT_BOX,
-	INPUT_HEADING,
-	INPUT_TEXT,
-	INPUT_FIELD,
-	FUNCTION_TEXT,
-	FUNCTION_HIGHLIGHT,
-	ATTR_MAX
-} attributes_t;
-extern attributes_t attributes[];
-
-typedef enum {
-	F_HELP = 1,
-	F_SYMBOL = 2,
-	F_INSTS = 3,
-	F_CONF = 4,
-	F_BACK = 5,
-	F_SAVE = 6,
-	F_LOAD = 7,
-	F_SEARCH = 8,
-	F_EXIT = 9,
-} function_key;
-
-void set_colors(void);
-
-/* this changes the windows attributes !!! */
-void print_in_middle(WINDOW *win,
-		int starty,
-		int startx,
-		int width,
-		const char *string,
-		chtype color);
-int get_line_length(const char *line);
-int get_line_no(const char *text);
-const char *get_line(const char *text, int line_no);
-void fill_window(WINDOW *win, const char *text);
-int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...);
-int dialog_inputbox(WINDOW *main_window,
-		const char *title, const char *prompt,
-		const char *init, char **resultp, int *result_len);
-void refresh_all_windows(WINDOW *main_window);
-void show_scroll_win(WINDOW *main_window,
-		const char *title,
-		const char *text);
diff --git a/support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch b/support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch
deleted file mode 100644
index eccc68c..0000000
--- a/support/kconfig/patches/01-kconfig-kernel-to-buildroot-unikore.patch
+++ /dev/null
@@ -1,98 +0,0 @@
----
- confdata.c          |    4 ++--
- gconf.glade         |    2 +-
- mconf.c             |    4 ++--
- zconf.tab.c_shipped |    2 +-
- zconf.y             |    2 +-
- 5 files changed, 7 insertions(+), 7 deletions(-)
-
-Index: kconfig/gconf.glade
-===================================================================
---- kconfig.orig/gconf.glade	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/gconf.glade	2013-12-27 22:14:32.387630158 +0100
-@@ -4,7 +4,7 @@
- 
- <widget class="GtkWindow" id="window1">
-   <property name="visible">True</property>
--  <property name="title" translatable="yes">Gtk Kernel Configurator</property>
-+  <property name="title" translatable="yes">Gtk Unikraft Configurator</property>
-   <property name="type">GTK_WINDOW_TOPLEVEL</property>
-   <property name="window_position">GTK_WIN_POS_NONE</property>
-   <property name="modal">False</property>
-Index: kconfig/mconf.c
-===================================================================
---- kconfig.orig/mconf.c	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/mconf.c	2013-12-27 22:14:42.179244153 +0100
-@@ -176,9 +176,9 @@
- 	"Arrow keys navigate the menu.  "
- 	"<Enter> selects submenus ---> (or empty submenus ----).  "
- 	"Highlighted letters are hotkeys.  "
--	"Pressing <Y> includes, <N> excludes, <M> modularizes features.  "
-+	"Pressing <Y> selectes a feature, while <N> will exclude a feature.  "
- 	"Press <Esc><Esc> to exit, <?> for Help, </> for Search.  "
--	"Legend: [*] built-in  [ ] excluded  <M> module  < > module capable"),
-+	"Legend: [*] feature is selected  [ ] feature is excluded"),
- radiolist_instructions[] = N_(
- 	"Use the arrow keys to navigate this window or "
- 	"press the hotkey of the item you wish to select "
-@@ -959,7 +959,7 @@
- 	if (conf_get_changed())
- 		res = dialog_yesno(NULL,
- 				   _("Do you wish to save your new configuration?\n"
--				     "(Press <ESC><ESC> to continue kernel configuration.)"),
-+				     "(Press <ESC><ESC> to continue Unikraft configuration.)"),
- 				   6, 60);
- 	else
- 		res = -1;
-Index: kconfig/zconf.tab.c_shipped
-===================================================================
---- kconfig.orig/zconf.tab.c_shipped	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/zconf.tab.c_shipped	2013-12-27 22:14:32.391630000 +0100
-@@ -2297,7 +2297,7 @@
- 
- 	sym_init();
- 	_menu_init();
--	rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
-+	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
- 
- 	if (getenv("ZCONF_DEBUG"))
- 		zconfdebug = 1;
-Index: kconfig/zconf.y
-===================================================================
---- kconfig.orig/zconf.y	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/zconf.y	2013-12-27 22:14:32.391630000 +0100
-@@ -493,7 +493,7 @@
- 
- 	sym_init();
- 	_menu_init();
--	rootmenu.prompt = menu_add_prompt(P_MENU, "Linux Kernel Configuration", NULL);
-+	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
- 
- 	if (getenv("ZCONF_DEBUG"))
- 		zconfdebug = 1;
-Index: kconfig/confdata.c
-===================================================================
---- kconfig.orig/confdata.c	2013-12-27 22:14:32.395629843 +0100
-+++ kconfig/confdata.c	2013-12-27 22:14:32.391630000 +0100
-@@ -63,7 +63,7 @@
- 
- const char *conf_get_configname(void)
- {
--	char *name = getenv("KCONFIG_CONFIG");
-+	char *name = getenv("UC_CONFIG");
- 
- 	return name ? name : ".config";
- }
-Index: kconfig/qconf.cc
-===================================================================
---- kconfig.orig/qconf.cc	2013-12-27 22:12:15.825013567 +0100
-+++ kconfig/qconf.cc	2013-12-27 22:14:57.826627300 +0100
-@@ -70,7 +70,7 @@
- }
- 
- ConfigSettings::ConfigSettings()
--	: QSettings("kernel.org", "qconf")
-+	: QSettings("cnp.neclab.eu", "qconf")
- {
- }
- 
diff --git a/support/kconfig/patches/06-br-build-system-integration.patch b/support/kconfig/patches/06-br-build-system-integration.patch
deleted file mode 100644
index 3faa39e..0000000
--- a/support/kconfig/patches/06-br-build-system-integration.patch
+++ /dev/null
@@ -1,35 +0,0 @@
----
- Makefile |    8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-Index: b/Makefile
-===================================================================
---- a/Makefile
-+++ b/Makefile
-@@ -159,11 +159,11 @@
- 
- hostprogs-y := conf
- 
--ifeq ($(MAKECMDGOALS),nconfig)
-+ifeq ($(MAKECMDGOALS),nconf)
- 	hostprogs-y += nconf
- endif
- 
--ifeq ($(MAKECMDGOALS),menuconfig)
-+ifeq ($(MAKECMDGOALS),mconf)
- 	hostprogs-y += mconf
- endif
- 
-@@ -171,10 +171,10 @@
- 	hostprogs-y += kxgettext
- endif
- 
--ifeq ($(MAKECMDGOALS),xconfig)
-+ifeq ($(MAKECMDGOALS),qconf)
- 	qconf-target := 1
- endif
--ifeq ($(MAKECMDGOALS),gconfig)
-+ifeq ($(MAKECMDGOALS),gconf)
- 	gconf-target := 1
- endif
- 
diff --git a/support/kconfig/patches/10-br-build-system.patch b/support/kconfig/patches/10-br-build-system.patch
deleted file mode 100644
index be6fda0..0000000
--- a/support/kconfig/patches/10-br-build-system.patch
+++ /dev/null
@@ -1,80 +0,0 @@
----
- Makefile.br |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- foo.h       |   12 ++++++++++++
- 2 files changed, 65 insertions(+)
-
-Index: b/Makefile.br
-===================================================================
---- /dev/null
-+++ b/Makefile.br
-@@ -0,0 +1,53 @@
-+src := .
-+top_srcdir=../../
-+top_builddir=../../
-+srctree := .
-+obj ?= .
-+
-+include Makefile
-+#HOSTCFLAGS+=-Dinline="" -include foo.h
-+-include $(obj)/.depend
-+$(obj)/.depend: $(wildcard *.h *.c)
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) -MM *.c > $@ 2>/dev/null || :
-+
-+__hostprogs := $(sort $(hostprogs-y) $(hostprogs-m))
-+host-csingle := $(foreach m,$(__hostprogs),$(if $($(m)-objs),,$(m)))
-+host-cmulti := $(foreach m,$(__hostprogs),\
-+           $(if $($(m)-cxxobjs),,$(if $($(m)-objs),$(m))))
-+host-cxxmulti := $(foreach m,$(__hostprogs),\
-+           $(if $($(m)-cxxobjs),$(m),$(if $($(m)-objs),)))
-+host-cobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-objs))))
-+host-cxxobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(__hostprogs),$($(m)-cxxobjs))))
-+
-+HOST_EXTRACFLAGS += -I$(obj) -DCONFIG_=\"\"
-+
-+$(host-csingle): %: %.c
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $< -o $(obj)/$@
-+
-+$(host-cmulti): %: $(host-cobjs) $(host-cshlib)
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-+
-+$(host-cxxmulti): %: $(host-cxxobjs) $(host-cobjs) $(host-cshlib)
-+	$(HOSTCXX) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$@) $(addprefix $(obj)/,$($(@F)-objs) $($(@F)-cxxobjs)) $(HOSTLOADLIBES_$(@F)) -o $(obj)/$@
-+
-+$(obj)/%.o: %.c
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-+
-+$(obj)/%.o: $(obj)/%.c
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCFLAGS_$(@F)) -c $< -o $@
-+
-+$(obj)/%.o: %.cc
-+	$(HOSTCC) $(HOST_EXTRACFLAGS) $(HOSTCFLAGS) $(HOSTCXXFLAGS_$(@F)) -c $< -o $@
-+
-+$(obj)/%:: $(src)/%_shipped
-+	$(Q)cat $< > $@
-+
-+clean:
-+	$(Q)rm -f $(addprefix $(obj)/,$(clean-files))
-+distclean: clean
-+	$(Q)rm -f $(addprefix $(obj)/,$(lxdialog) $(conf-objs) $(mconf-objs) $(kxgettext-objs) \
-+		$(hostprogs-y) $(qconf-cxxobjs) $(qconf-objs) $(gconf-objs) \
-+		mconf .depend)
-+
-+FORCE:
-+.PHONY: FORCE clean distclean
-Index: b/foo.h
-===================================================================
---- /dev/null
-+++ b/foo.h
-@@ -0,0 +1,12 @@
-+#ifndef __KCONFIG_FOO_H
-+#define __KCONFIG_FOO_H
-+
-+#ifndef __APPLE__
-+#include <features.h>
-+#endif
-+#include <limits.h>
-+
-+#ifndef PATH_MAX
-+#define PATH_MAX 1024
-+#endif
-+#endif /* __KCONFIG_FOO_H */
diff --git a/support/kconfig/patches/11-use-mktemp-for-lxdialog.patch b/support/kconfig/patches/11-use-mktemp-for-lxdialog.patch
deleted file mode 100644
index b38af26..0000000
--- a/support/kconfig/patches/11-use-mktemp-for-lxdialog.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- lxdialog/check-lxdialog.sh |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: b/lxdialog/check-lxdialog.sh
-===================================================================
---- a/lxdialog/check-lxdialog.sh
-+++ b/lxdialog/check-lxdialog.sh
-@@ -36,7 +36,7 @@
- }
- 
- # Temp file, try to clean up after us
--tmp=.lxdialog.tmp
-+tmp=$(mktemp)
- trap "rm -f $tmp" 0 1 2 3 15
- 
- # Check if we can link to ncurses
diff --git a/support/kconfig/patches/12-fix-glade-file-path.patch b/support/kconfig/patches/12-fix-glade-file-path.patch
deleted file mode 100644
index a5777da..0000000
--- a/support/kconfig/patches/12-fix-glade-file-path.patch
+++ /dev/null
@@ -1,17 +0,0 @@
----
- gconf.c |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-Index: b/gconf.c
-===================================================================
---- a/gconf.c
-+++ b/gconf.c
-@@ -1486,7 +1486,7 @@
- 	/* Determine GUI path */
- 	env = getenv(SRCTREE);
- 	if (env)
--		glade_file = g_strconcat(env, "/scripts/kconfig/gconf.glade", NULL);
-+		glade_file = g_strconcat(env, "/support/kconfig/gconf.glade", NULL);
- 	else if (av[0][0] == '/')
- 		glade_file = g_strconcat(av[0], ".glade", NULL);
- 	else
diff --git a/support/kconfig/patches/14-support-out-of-tree-config.patch b/support/kconfig/patches/14-support-out-of-tree-config.patch
deleted file mode 100644
index ec3134f..0000000
--- a/support/kconfig/patches/14-support-out-of-tree-config.patch
+++ /dev/null
@@ -1,207 +0,0 @@
----
- conf.c     |    1 
- confdata.c |   62 ++++++++++++++++++++++++++++++++++++++++++++++---------------
- util.c     |   16 +++++++++++++--
- 3 files changed, 61 insertions(+), 18 deletions(-)
-
-Index: b/conf.c
-===================================================================
---- a/conf.c
-+++ b/conf.c
-@@ -558,7 +558,6 @@
- 	}
- 	name = av[optind];
- 	conf_parse(name);
--	//zconfdump(stdout);
- 	if (sync_kconfig) {
- 		name = conf_get_configname();
- 		if (stat(name, &tmpstat)) {
-Index: b/confdata.c
-===================================================================
---- a/confdata.c
-+++ b/confdata.c
-@@ -13,6 +13,7 @@
- #include <string.h>
- #include <time.h>
- #include <unistd.h>
-+#include <libgen.h>
- 
- #include "lkc.h"
- 
-@@ -70,9 +71,7 @@
- 
- const char *conf_get_autoconfig_name(void)
- {
--	char *name = getenv("KCONFIG_AUTOCONFIG");
--
--	return name ? name : "include/config/auto.conf";
-+	return getenv("KCONFIG_AUTOCONFIG");
- }
- 
- static char *conf_expand_value(const char *in)
-@@ -742,6 +741,9 @@
- 	char dirname[PATH_MAX+1], tmpname[PATH_MAX+1], newname[PATH_MAX+1];
- 	char *env;
- 
-+	if (!name)
-+		name = conf_get_configname();
-+
- 	dirname[0] = 0;
- 	if (name && name[0]) {
- 		struct stat st;
-@@ -836,6 +838,7 @@
- {
- 	const char *name;
- 	char path[PATH_MAX+1];
-+	char *opwd, *dir, *_name;
- 	char *s, *d, c;
- 	struct symbol *sym;
- 	struct stat sb;
-@@ -844,8 +847,20 @@
- 	name = conf_get_autoconfig_name();
- 	conf_read_simple(name, S_DEF_AUTO);
- 
--	if (chdir("include/config"))
--		return 1;
-+	opwd = malloc(256);
-+	_name = strdup(name);
-+	if (opwd == NULL || _name == NULL)
-+ 		return 1;
-+	opwd = getcwd(opwd, 256);
-+	dir = dirname(_name);
-+	if (dir == NULL) {
-+		res = 1;
-+		goto err;
-+	}
-+	if (chdir(dir)) {
-+		res = 1;
-+		goto err;
-+	}
- 
- 	res = 0;
- 	for_all_symbols(i, sym) {
-@@ -938,9 +953,11 @@
- 		close(fd);
- 	}
- out:
--	if (chdir("../.."))
--		return 1;
--
-+	if (chdir(opwd))
-+		res = 1;
-+err:
-+	free(opwd);
-+	free(_name);
- 	return res;
- }
- 
-@@ -950,25 +967,38 @@
- 	const char *name;
- 	FILE *out, *tristate, *out_h;
- 	int i;
-+	char dir[PATH_MAX+1], buf[PATH_MAX+1];
-+	char *s;
-+
-+	strcpy(dir, conf_get_configname());
-+	s = strrchr(dir, '/');
-+	if (s)
-+		s[1] = 0;
-+	else
-+		dir[0] = 0;
- 
- 	sym_clear_all_valid();
- 
--	file_write_dep("include/config/auto.conf.cmd");
-+	sprintf(buf, "%s.config.cmd", dir);
-+	file_write_dep(buf);
- 
- 	if (conf_split_config())
- 		return 1;
- 
--	out = fopen(".tmpconfig", "w");
-+	sprintf(buf, "%s.tmpconfig", dir);
-+	out = fopen(buf, "w");
- 	if (!out)
- 		return 1;
- 
--	tristate = fopen(".tmpconfig_tristate", "w");
-+	sprintf(buf, "%s.tmpconfig_tristate", dir);
-+	tristate = fopen(buf, "w");
- 	if (!tristate) {
- 		fclose(out);
- 		return 1;
- 	}
- 
--	out_h = fopen(".tmpconfig.h", "w");
-+	sprintf(buf, "%s.tmpconfig.h", dir);
-+	out_h = fopen(buf, "w");
- 	if (!out_h) {
- 		fclose(out);
- 		fclose(tristate);
-@@ -1000,19 +1030,22 @@
- 	name = getenv("KCONFIG_AUTOHEADER");
- 	if (!name)
- 		name = "include/generated/autoconf.h";
--	if (rename(".tmpconfig.h", name))
-+	sprintf(buf, "%s.tmpconfig.h", dir);
-+	if (rename(buf, name))
- 		return 1;
- 	name = getenv("KCONFIG_TRISTATE");
- 	if (!name)
- 		name = "include/config/tristate.conf";
--	if (rename(".tmpconfig_tristate", name))
-+	sprintf(buf, "%s.tmpconfig_tristate", dir);
-+	if (rename(buf, name))
- 		return 1;
- 	name = conf_get_autoconfig_name();
- 	/*
- 	 * This must be the last step, kbuild has a dependency on auto.conf
- 	 * and this marks the successful completion of the previous steps.
- 	 */
--	if (rename(".tmpconfig", name))
-+	sprintf(buf, "%s.tmpconfig", dir);
-+	if (rename(buf, name))
- 		return 1;
- 
- 	return 0;
-Index: b/util.c
-===================================================================
---- a/util.c
-+++ b/util.c
-@@ -34,6 +34,8 @@
- /* write a dependency file as used by kbuild to track dependencies */
- int file_write_dep(const char *name)
- {
-+	char *str;
-+	char buf[PATH_MAX+1], buf2[PATH_MAX+1], dir[PATH_MAX+1];
- 	struct symbol *sym, *env_sym;
- 	struct expr *e;
- 	struct file *file;
-@@ -41,7 +43,16 @@
- 
- 	if (!name)
- 		name = ".kconfig.d";
--	out = fopen("..config.tmp", "w");
-+
-+	strcpy(dir, conf_get_configname());
-+	str = strrchr(dir, '/');
-+	if (str)
-+		str[1] = 0;
-+	else
-+		dir[0] = 0;
-+
-+	sprintf(buf, "%s..config.tmp", dir);
-+	out = fopen(buf, "w");
- 	if (!out)
- 		return 1;
- 	fprintf(out, "deps_config := \\\n");
-@@ -72,7 +83,8 @@
- 
- 	fprintf(out, "\n$(deps_config): ;\n");
- 	fclose(out);
--	rename("..config.tmp", name);
-+	sprintf(buf2, "%s%s", dir, name);
-+	rename(buf, buf2);
- 	return 0;
- }
- 
diff --git a/support/kconfig/patches/15-fix-qconf-moc-rule.patch b/support/kconfig/patches/15-fix-qconf-moc-rule.patch
deleted file mode 100644
index c1848d7..0000000
--- a/support/kconfig/patches/15-fix-qconf-moc-rule.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-Fix the rule that generates the .moc file
-
-The Linux kernel has a "cmd" make function, but we don't have it in
-Buildroot, so we need to adjust this rule.
-
-Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
-
-Index: b/Makefile
-===================================================================
---- a/Makefile
-+++ b/Makefile
-@@ -309,11 +309,8 @@
- 
- $(obj)/qconf.o: $(obj)/qconf.moc
- 
--quiet_cmd_moc = MOC     $@
--      cmd_moc = $(KC_QT_MOC) -i $< -o $@
--
- $(obj)/%.moc: $(src)/%.h $(obj)/.tmp_qtcheck
--	$(call cmd,moc)
-+	$(KC_QT_MOC) -i $< -o $@
- 
- # Extract gconf menu items for I18N support
- $(obj)/gconf.glade.h: $(obj)/gconf.glade
diff --git a/support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch b/support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
deleted file mode 100644
index 1eb48ef..0000000
--- a/support/kconfig/patches/17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From be8af2d54a66911693eddc556e4f7a866670082b Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Bj=C3=B8rn=20Forsman?= <bjorn.forsman@gmail.com>
-Date: Sun, 14 Sep 2014 12:57:50 +0200
-Subject: [PATCH] kconfig/lxdialog: get ncurses CFLAGS with pkg-config
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This makes "make menuconfig" also work on systems where ncurses is not
-installed in a standard location (such as on NixOS).
-
-This patch changes ccflags() so that it tries pkg-config first, and only
-if pkg-config fails does it go back to the fallback/manual checks. This
-is the same algorithm that ldflags() already uses.
-
-Signed-off-by: Bjørn Forsman <bjorn.forsman@gmail.com>
-Signed-off-by: Michal Marek <mmarek@suse.cz>
----
-[This patch is already applied upstream (is part of linux v3.18):
-https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=be8af2d54a66911693eddc556e4f7a866670082b
-
-I'm adding this instead of doing a full upstream kconfig sync because
-there was a conflict in one of the Buildroot kconfig patches (against
-linux 3.18-rc1), which I was unable to resolve. Just drop this patch next time
-Buildroot kconfig is synced against upstream.
-]
-
- scripts/kconfig/lxdialog/check-lxdialog.sh | 6 +++++-
- 1 file changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/scripts/kconfig/lxdialog/check-lxdialog.sh b/scripts/kconfig/lxdialog/check-lxdialog.sh
-index 9d2a4c5..5075ebf 100755
---- a/lxdialog/check-lxdialog.sh
-+++ b/lxdialog/check-lxdialog.sh
-@@ -21,7 +21,11 @@ ldflags()
- # Where is ncurses.h?
- ccflags()
- {
--	if [ -f /usr/include/ncursesw/curses.h ]; then
-+	if pkg-config --cflags ncursesw 2>/dev/null; then
-+		echo '-DCURSES_LOC="<ncurses.h>" -DNCURSES_WIDECHAR=1'
-+	elif pkg-config --cflags ncurses 2>/dev/null; then
-+		echo '-DCURSES_LOC="<ncurses.h>"'
-+	elif [ -f /usr/include/ncursesw/curses.h ]; then
- 		echo '-I/usr/include/ncursesw -DCURSES_LOC="<curses.h>"'
- 		echo ' -DNCURSES_WIDECHAR=1'
- 	elif [ -f /usr/include/ncurses/ncurses.h ]; then
--- 
-2.1.3
-
diff --git a/support/kconfig/patches/series b/support/kconfig/patches/series
deleted file mode 100644
index 47f1b8e..0000000
--- a/support/kconfig/patches/series
+++ /dev/null
@@ -1,8 +0,0 @@
-01-kconfig-kernel-to-buildroot.patch
-06-br-build-system-integration.patch
-10-br-build-system.patch
-11-use-mktemp-for-lxdialog.patch
-12-fix-glade-file-path.patch
-14-support-out-of-tree-config.patch
-15-fix-qconf-moc-rule.patch
-17-kconfig-lxdialog-get-ncurses-CFLAGS-with-pkg-config.patch
diff --git a/support/kconfig/qconf.cc b/support/kconfig/qconf.cc
deleted file mode 100644
index 70ef5c0..0000000
--- a/support/kconfig/qconf.cc
+++ /dev/null
@@ -1,1795 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <qglobal.h>
-
-#if QT_VERSION < 0x040000
-#include <stddef.h>
-#include <qmainwindow.h>
-#include <qvbox.h>
-#include <qvaluelist.h>
-#include <qtextbrowser.h>
-#include <qaction.h>
-#include <qheader.h>
-#include <qfiledialog.h>
-#include <qdragobject.h>
-#include <qpopupmenu.h>
-#else
-#include <q3mainwindow.h>
-#include <q3vbox.h>
-#include <q3valuelist.h>
-#include <q3textbrowser.h>
-#include <q3action.h>
-#include <q3header.h>
-#include <q3filedialog.h>
-#include <q3dragobject.h>
-#include <q3popupmenu.h>
-#endif
-
-#include <qapplication.h>
-#include <qdesktopwidget.h>
-#include <qtoolbar.h>
-#include <qlayout.h>
-#include <qsplitter.h>
-#include <qlineedit.h>
-#include <qlabel.h>
-#include <qpushbutton.h>
-#include <qmenubar.h>
-#include <qmessagebox.h>
-#include <qregexp.h>
-#include <qevent.h>
-
-#include <stdlib.h>
-
-#include "lkc.h"
-#include "qconf.h"
-
-#include "qconf.moc"
-#include "images.c"
-
-#ifdef _
-# undef _
-# define _ qgettext
-#endif
-
-static QApplication *configApp;
-static ConfigSettings *configSettings;
-
-Q3Action *ConfigMainWindow::saveAction;
-
-static inline QString qgettext(const char* str)
-{
-	return QString::fromLocal8Bit(gettext(str));
-}
-
-static inline QString qgettext(const QString& str)
-{
-	return QString::fromLocal8Bit(gettext(str.latin1()));
-}
-
-ConfigSettings::ConfigSettings()
-	: QSettings("cnp.neclab.eu", "qconf")
-{
-}
-
-/**
- * Reads a list of integer values from the application settings.
- */
-Q3ValueList<int> ConfigSettings::readSizes(const QString& key, bool *ok)
-{
-	Q3ValueList<int> result;
-	QStringList entryList = readListEntry(key, ok);
-	QStringList::Iterator it;
-
-	for (it = entryList.begin(); it != entryList.end(); ++it)
-		result.push_back((*it).toInt());
-
-	return result;
-}
-
-/**
- * Writes a list of integer values to the application settings.
- */
-bool ConfigSettings::writeSizes(const QString& key, const Q3ValueList<int>& value)
-{
-	QStringList stringList;
-	Q3ValueList<int>::ConstIterator it;
-
-	for (it = value.begin(); it != value.end(); ++it)
-		stringList.push_back(QString::number(*it));
-	return writeEntry(key, stringList);
-}
-
-
-/*
- * set the new data
- * TODO check the value
- */
-void ConfigItem::okRename(int col)
-{
-	Parent::okRename(col);
-	sym_set_string_value(menu->sym, text(dataColIdx).latin1());
-	listView()->updateList(this);
-}
-
-/*
- * update the displayed of a menu entry
- */
-void ConfigItem::updateMenu(void)
-{
-	ConfigList* list;
-	struct symbol* sym;
-	struct property *prop;
-	QString prompt;
-	int type;
-	tristate expr;
-
-	list = listView();
-	if (goParent) {
-		setPixmap(promptColIdx, list->menuBackPix);
-		prompt = "..";
-		goto set_prompt;
-	}
-
-	sym = menu->sym;
-	prop = menu->prompt;
-	prompt = _(menu_get_prompt(menu));
-
-	if (prop) switch (prop->type) {
-	case P_MENU:
-		if (list->mode == singleMode || list->mode == symbolMode) {
-			/* a menuconfig entry is displayed differently
-			 * depending whether it's at the view root or a child.
-			 */
-			if (sym && list->rootEntry == menu)
-				break;
-			setPixmap(promptColIdx, list->menuPix);
-		} else {
-			if (sym)
-				break;
-			setPixmap(promptColIdx, 0);
-		}
-		goto set_prompt;
-	case P_COMMENT:
-		setPixmap(promptColIdx, 0);
-		goto set_prompt;
-	default:
-		;
-	}
-	if (!sym)
-		goto set_prompt;
-
-	setText(nameColIdx, QString::fromLocal8Bit(sym->name));
-
-	type = sym_get_type(sym);
-	switch (type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		char ch;
-
-		if (!sym_is_changable(sym) && list->optMode == normalOpt) {
-			setPixmap(promptColIdx, 0);
-			setText(noColIdx, QString::null);
-			setText(modColIdx, QString::null);
-			setText(yesColIdx, QString::null);
-			break;
-		}
-		expr = sym_get_tristate_value(sym);
-		switch (expr) {
-		case yes:
-			if (sym_is_choice_value(sym) && type == S_BOOLEAN)
-				setPixmap(promptColIdx, list->choiceYesPix);
-			else
-				setPixmap(promptColIdx, list->symbolYesPix);
-			setText(yesColIdx, "Y");
-			ch = 'Y';
-			break;
-		case mod:
-			setPixmap(promptColIdx, list->symbolModPix);
-			setText(modColIdx, "M");
-			ch = 'M';
-			break;
-		default:
-			if (sym_is_choice_value(sym) && type == S_BOOLEAN)
-				setPixmap(promptColIdx, list->choiceNoPix);
-			else
-				setPixmap(promptColIdx, list->symbolNoPix);
-			setText(noColIdx, "N");
-			ch = 'N';
-			break;
-		}
-		if (expr != no)
-			setText(noColIdx, sym_tristate_within_range(sym, no) ? "_" : 0);
-		if (expr != mod)
-			setText(modColIdx, sym_tristate_within_range(sym, mod) ? "_" : 0);
-		if (expr != yes)
-			setText(yesColIdx, sym_tristate_within_range(sym, yes) ? "_" : 0);
-
-		setText(dataColIdx, QChar(ch));
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		const char* data;
-
-		data = sym_get_string_value(sym);
-
-		int i = list->mapIdx(dataColIdx);
-		if (i >= 0)
-			setRenameEnabled(i, TRUE);
-		setText(dataColIdx, data);
-		if (type == S_STRING)
-			prompt = QString("%1: %2").arg(prompt).arg(data);
-		else
-			prompt = QString("(%2) %1").arg(prompt).arg(data);
-		break;
-	}
-	if (!sym_has_value(sym) && visible)
-		prompt += _(" (NEW)");
-set_prompt:
-	setText(promptColIdx, prompt);
-}
-
-void ConfigItem::testUpdateMenu(bool v)
-{
-	ConfigItem* i;
-
-	visible = v;
-	if (!menu)
-		return;
-
-	sym_calc_value(menu->sym);
-	if (menu->flags & MENU_CHANGED) {
-		/* the menu entry changed, so update all list items */
-		menu->flags &= ~MENU_CHANGED;
-		for (i = (ConfigItem*)menu->data; i; i = i->nextItem)
-			i->updateMenu();
-	} else if (listView()->updateAll)
-		updateMenu();
-}
-
-void ConfigItem::paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align)
-{
-	ConfigList* list = listView();
-
-	if (visible) {
-		if (isSelected() && !list->hasFocus() && list->mode == menuMode)
-			Parent::paintCell(p, list->inactivedColorGroup, column, width, align);
-		else
-			Parent::paintCell(p, cg, column, width, align);
-	} else
-		Parent::paintCell(p, list->disabledColorGroup, column, width, align);
-}
-
-/*
- * construct a menu entry
- */
-void ConfigItem::init(void)
-{
-	if (menu) {
-		ConfigList* list = listView();
-		nextItem = (ConfigItem*)menu->data;
-		menu->data = this;
-
-		if (list->mode != fullMode)
-			setOpen(TRUE);
-		sym_calc_value(menu->sym);
-	}
-	updateMenu();
-}
-
-/*
- * destruct a menu entry
- */
-ConfigItem::~ConfigItem(void)
-{
-	if (menu) {
-		ConfigItem** ip = (ConfigItem**)&menu->data;
-		for (; *ip; ip = &(*ip)->nextItem) {
-			if (*ip == this) {
-				*ip = nextItem;
-				break;
-			}
-		}
-	}
-}
-
-ConfigLineEdit::ConfigLineEdit(ConfigView* parent)
-	: Parent(parent)
-{
-	connect(this, SIGNAL(lostFocus()), SLOT(hide()));
-}
-
-void ConfigLineEdit::show(ConfigItem* i)
-{
-	item = i;
-	if (sym_get_string_value(item->menu->sym))
-		setText(QString::fromLocal8Bit(sym_get_string_value(item->menu->sym)));
-	else
-		setText(QString::null);
-	Parent::show();
-	setFocus();
-}
-
-void ConfigLineEdit::keyPressEvent(QKeyEvent* e)
-{
-	switch (e->key()) {
-	case Qt::Key_Escape:
-		break;
-	case Qt::Key_Return:
-	case Qt::Key_Enter:
-		sym_set_string_value(item->menu->sym, text().latin1());
-		parent()->updateList(item);
-		break;
-	default:
-		Parent::keyPressEvent(e);
-		return;
-	}
-	e->accept();
-	parent()->list->setFocus();
-	hide();
-}
-
-ConfigList::ConfigList(ConfigView* p, const char *name)
-	: Parent(p, name),
-	  updateAll(false),
-	  symbolYesPix(xpm_symbol_yes), symbolModPix(xpm_symbol_mod), symbolNoPix(xpm_symbol_no),
-	  choiceYesPix(xpm_choice_yes), choiceNoPix(xpm_choice_no),
-	  menuPix(xpm_menu), menuInvPix(xpm_menu_inv), menuBackPix(xpm_menuback), voidPix(xpm_void),
-	  showName(false), showRange(false), showData(false), optMode(normalOpt),
-	  rootEntry(0), headerPopup(0)
-{
-	int i;
-
-	setSorting(-1);
-	setRootIsDecorated(TRUE);
-	disabledColorGroup = palette().active();
-	disabledColorGroup.setColor(QColorGroup::Text, palette().disabled().text());
-	inactivedColorGroup = palette().active();
-	inactivedColorGroup.setColor(QColorGroup::Highlight, palette().disabled().highlight());
-
-	connect(this, SIGNAL(selectionChanged(void)),
-		SLOT(updateSelection(void)));
-
-	if (name) {
-		configSettings->beginGroup(name);
-		showName = configSettings->readBoolEntry("/showName", false);
-		showRange = configSettings->readBoolEntry("/showRange", false);
-		showData = configSettings->readBoolEntry("/showData", false);
-		optMode = (enum optionMode)configSettings->readNumEntry("/optionMode", false);
-		configSettings->endGroup();
-		connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
-	}
-
-	for (i = 0; i < colNr; i++)
-		colMap[i] = colRevMap[i] = -1;
-	addColumn(promptColIdx, _("Option"));
-
-	reinit();
-}
-
-bool ConfigList::menuSkip(struct menu *menu)
-{
-	if (optMode == normalOpt && menu_is_visible(menu))
-		return false;
-	if (optMode == promptOpt && menu_has_prompt(menu))
-		return false;
-	if (optMode == allOpt)
-		return false;
-	return true;
-}
-
-void ConfigList::reinit(void)
-{
-	removeColumn(dataColIdx);
-	removeColumn(yesColIdx);
-	removeColumn(modColIdx);
-	removeColumn(noColIdx);
-	removeColumn(nameColIdx);
-
-	if (showName)
-		addColumn(nameColIdx, _("Name"));
-	if (showRange) {
-		addColumn(noColIdx, "N");
-		addColumn(modColIdx, "M");
-		addColumn(yesColIdx, "Y");
-	}
-	if (showData)
-		addColumn(dataColIdx, _("Value"));
-
-	updateListAll();
-}
-
-void ConfigList::saveSettings(void)
-{
-	if (name()) {
-		configSettings->beginGroup(name());
-		configSettings->writeEntry("/showName", showName);
-		configSettings->writeEntry("/showRange", showRange);
-		configSettings->writeEntry("/showData", showData);
-		configSettings->writeEntry("/optionMode", (int)optMode);
-		configSettings->endGroup();
-	}
-}
-
-ConfigItem* ConfigList::findConfigItem(struct menu *menu)
-{
-	ConfigItem* item = (ConfigItem*)menu->data;
-
-	for (; item; item = item->nextItem) {
-		if (this == item->listView())
-			break;
-	}
-
-	return item;
-}
-
-void ConfigList::updateSelection(void)
-{
-	struct menu *menu;
-	enum prop_type type;
-
-	ConfigItem* item = (ConfigItem*)selectedItem();
-	if (!item)
-		return;
-
-	menu = item->menu;
-	emit menuChanged(menu);
-	if (!menu)
-		return;
-	type = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	if (mode == menuMode && type == P_MENU)
-		emit menuSelected(menu);
-}
-
-void ConfigList::updateList(ConfigItem* item)
-{
-	ConfigItem* last = 0;
-
-	if (!rootEntry) {
-		if (mode != listMode)
-			goto update;
-		Q3ListViewItemIterator it(this);
-		ConfigItem* item;
-
-		for (; it.current(); ++it) {
-			item = (ConfigItem*)it.current();
-			if (!item->menu)
-				continue;
-			item->testUpdateMenu(menu_is_visible(item->menu));
-		}
-		return;
-	}
-
-	if (rootEntry != &rootmenu && (mode == singleMode ||
-	    (mode == symbolMode && rootEntry->parent != &rootmenu))) {
-		item = firstChild();
-		if (!item)
-			item = new ConfigItem(this, 0, true);
-		last = item;
-	}
-	if ((mode == singleMode || (mode == symbolMode && !(rootEntry->flags & MENU_ROOT))) &&
-	    rootEntry->sym && rootEntry->prompt) {
-		item = last ? last->nextSibling() : firstChild();
-		if (!item)
-			item = new ConfigItem(this, last, rootEntry, true);
-		else
-			item->testUpdateMenu(true);
-
-		updateMenuList(item, rootEntry);
-		triggerUpdate();
-		return;
-	}
-update:
-	updateMenuList(this, rootEntry);
-	triggerUpdate();
-}
-
-void ConfigList::setValue(ConfigItem* item, tristate val)
-{
-	struct symbol* sym;
-	int type;
-	tristate oldval;
-
-	sym = item->menu ? item->menu->sym : 0;
-	if (!sym)
-		return;
-
-	type = sym_get_type(sym);
-	switch (type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		oldval = sym_get_tristate_value(sym);
-
-		if (!sym_set_tristate_value(sym, val))
-			return;
-		if (oldval == no && item->menu->list)
-			item->setOpen(TRUE);
-		parent()->updateList(item);
-		break;
-	}
-}
-
-void ConfigList::changeValue(ConfigItem* item)
-{
-	struct symbol* sym;
-	struct menu* menu;
-	int type, oldexpr, newexpr;
-
-	menu = item->menu;
-	if (!menu)
-		return;
-	sym = menu->sym;
-	if (!sym) {
-		if (item->menu->list)
-			item->setOpen(!item->isOpen());
-		return;
-	}
-
-	type = sym_get_type(sym);
-	switch (type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		oldexpr = sym_get_tristate_value(sym);
-		newexpr = sym_toggle_tristate_value(sym);
-		if (item->menu->list) {
-			if (oldexpr == newexpr)
-				item->setOpen(!item->isOpen());
-			else if (oldexpr == no)
-				item->setOpen(TRUE);
-		}
-		if (oldexpr != newexpr)
-			parent()->updateList(item);
-		break;
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		if (colMap[dataColIdx] >= 0)
-			item->startRename(colMap[dataColIdx]);
-		else
-			parent()->lineEdit->show(item);
-		break;
-	}
-}
-
-void ConfigList::setRootMenu(struct menu *menu)
-{
-	enum prop_type type;
-
-	if (rootEntry == menu)
-		return;
-	type = menu && menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	if (type != P_MENU)
-		return;
-	updateMenuList(this, 0);
-	rootEntry = menu;
-	updateListAll();
-	setSelected(currentItem(), hasFocus());
-	ensureItemVisible(currentItem());
-}
-
-void ConfigList::setParentMenu(void)
-{
-	ConfigItem* item;
-	struct menu *oldroot;
-
-	oldroot = rootEntry;
-	if (rootEntry == &rootmenu)
-		return;
-	setRootMenu(menu_get_parent_menu(rootEntry->parent));
-
-	Q3ListViewItemIterator it(this);
-	for (; (item = (ConfigItem*)it.current()); it++) {
-		if (item->menu == oldroot) {
-			setCurrentItem(item);
-			ensureItemVisible(item);
-			break;
-		}
-	}
-}
-
-/*
- * update all the children of a menu entry
- *   removes/adds the entries from the parent widget as necessary
- *
- * parent: either the menu list widget or a menu entry widget
- * menu: entry to be updated
- */
-template <class P>
-void ConfigList::updateMenuList(P* parent, struct menu* menu)
-{
-	struct menu* child;
-	ConfigItem* item;
-	ConfigItem* last;
-	bool visible;
-	enum prop_type type;
-
-	if (!menu) {
-		while ((item = parent->firstChild()))
-			delete item;
-		return;
-	}
-
-	last = parent->firstChild();
-	if (last && !last->goParent)
-		last = 0;
-	for (child = menu->list; child; child = child->next) {
-		item = last ? last->nextSibling() : parent->firstChild();
-		type = child->prompt ? child->prompt->type : P_UNKNOWN;
-
-		switch (mode) {
-		case menuMode:
-			if (!(child->flags & MENU_ROOT))
-				goto hide;
-			break;
-		case symbolMode:
-			if (child->flags & MENU_ROOT)
-				goto hide;
-			break;
-		default:
-			break;
-		}
-
-		visible = menu_is_visible(child);
-		if (!menuSkip(child)) {
-			if (!child->sym && !child->list && !child->prompt)
-				continue;
-			if (!item || item->menu != child)
-				item = new ConfigItem(parent, last, child, visible);
-			else
-				item->testUpdateMenu(visible);
-
-			if (mode == fullMode || mode == menuMode || type != P_MENU)
-				updateMenuList(item, child);
-			else
-				updateMenuList(item, 0);
-			last = item;
-			continue;
-		}
-	hide:
-		if (item && item->menu == child) {
-			last = parent->firstChild();
-			if (last == item)
-				last = 0;
-			else while (last->nextSibling() != item)
-				last = last->nextSibling();
-			delete item;
-		}
-	}
-}
-
-void ConfigList::keyPressEvent(QKeyEvent* ev)
-{
-	Q3ListViewItem* i = currentItem();
-	ConfigItem* item;
-	struct menu *menu;
-	enum prop_type type;
-
-	if (ev->key() == Qt::Key_Escape && mode != fullMode && mode != listMode) {
-		emit parentSelected();
-		ev->accept();
-		return;
-	}
-
-	if (!i) {
-		Parent::keyPressEvent(ev);
-		return;
-	}
-	item = (ConfigItem*)i;
-
-	switch (ev->key()) {
-	case Qt::Key_Return:
-	case Qt::Key_Enter:
-		if (item->goParent) {
-			emit parentSelected();
-			break;
-		}
-		menu = item->menu;
-		if (!menu)
-			break;
-		type = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-		if (type == P_MENU && rootEntry != menu &&
-		    mode != fullMode && mode != menuMode) {
-			emit menuSelected(menu);
-			break;
-		}
-	case Qt::Key_Space:
-		changeValue(item);
-		break;
-	case Qt::Key_N:
-		setValue(item, no);
-		break;
-	case Qt::Key_M:
-		setValue(item, mod);
-		break;
-	case Qt::Key_Y:
-		setValue(item, yes);
-		break;
-	default:
-		Parent::keyPressEvent(ev);
-		return;
-	}
-	ev->accept();
-}
-
-void ConfigList::contentsMousePressEvent(QMouseEvent* e)
-{
-	//QPoint p(contentsToViewport(e->pos()));
-	//printf("contentsMousePressEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMousePressEvent(e);
-}
-
-void ConfigList::contentsMouseReleaseEvent(QMouseEvent* e)
-{
-	QPoint p(contentsToViewport(e->pos()));
-	ConfigItem* item = (ConfigItem*)itemAt(p);
-	struct menu *menu;
-	enum prop_type ptype;
-	const QPixmap* pm;
-	int idx, x;
-
-	if (!item)
-		goto skip;
-
-	menu = item->menu;
-	x = header()->offset() + p.x();
-	idx = colRevMap[header()->sectionAt(x)];
-	switch (idx) {
-	case promptColIdx:
-		pm = item->pixmap(promptColIdx);
-		if (pm) {
-			int off = header()->sectionPos(0) + itemMargin() +
-				treeStepSize() * (item->depth() + (rootIsDecorated() ? 1 : 0));
-			if (x >= off && x < off + pm->width()) {
-				if (item->goParent) {
-					emit parentSelected();
-					break;
-				} else if (!menu)
-					break;
-				ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-				if (ptype == P_MENU && rootEntry != menu &&
-				    mode != fullMode && mode != menuMode)
-					emit menuSelected(menu);
-				else
-					changeValue(item);
-			}
-		}
-		break;
-	case noColIdx:
-		setValue(item, no);
-		break;
-	case modColIdx:
-		setValue(item, mod);
-		break;
-	case yesColIdx:
-		setValue(item, yes);
-		break;
-	case dataColIdx:
-		changeValue(item);
-		break;
-	}
-
-skip:
-	//printf("contentsMouseReleaseEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMouseReleaseEvent(e);
-}
-
-void ConfigList::contentsMouseMoveEvent(QMouseEvent* e)
-{
-	//QPoint p(contentsToViewport(e->pos()));
-	//printf("contentsMouseMoveEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMouseMoveEvent(e);
-}
-
-void ConfigList::contentsMouseDoubleClickEvent(QMouseEvent* e)
-{
-	QPoint p(contentsToViewport(e->pos()));
-	ConfigItem* item = (ConfigItem*)itemAt(p);
-	struct menu *menu;
-	enum prop_type ptype;
-
-	if (!item)
-		goto skip;
-	if (item->goParent) {
-		emit parentSelected();
-		goto skip;
-	}
-	menu = item->menu;
-	if (!menu)
-		goto skip;
-	ptype = menu->prompt ? menu->prompt->type : P_UNKNOWN;
-	if (ptype == P_MENU && (mode == singleMode || mode == symbolMode))
-		emit menuSelected(menu);
-	else if (menu->sym)
-		changeValue(item);
-
-skip:
-	//printf("contentsMouseDoubleClickEvent: %d,%d\n", p.x(), p.y());
-	Parent::contentsMouseDoubleClickEvent(e);
-}
-
-void ConfigList::focusInEvent(QFocusEvent *e)
-{
-	struct menu *menu = NULL;
-
-	Parent::focusInEvent(e);
-
-	ConfigItem* item = (ConfigItem *)currentItem();
-	if (item) {
-		setSelected(item, TRUE);
-		menu = item->menu;
-	}
-	emit gotFocus(menu);
-}
-
-void ConfigList::contextMenuEvent(QContextMenuEvent *e)
-{
-	if (e->y() <= header()->geometry().bottom()) {
-		if (!headerPopup) {
-			Q3Action *action;
-
-			headerPopup = new Q3PopupMenu(this);
-			action = new Q3Action(NULL, _("Show Name"), 0, this);
-			  action->setToggleAction(TRUE);
-			  connect(action, SIGNAL(toggled(bool)),
-				  parent(), SLOT(setShowName(bool)));
-			  connect(parent(), SIGNAL(showNameChanged(bool)),
-				  action, SLOT(setOn(bool)));
-			  action->setOn(showName);
-			  action->addTo(headerPopup);
-			action = new Q3Action(NULL, _("Show Range"), 0, this);
-			  action->setToggleAction(TRUE);
-			  connect(action, SIGNAL(toggled(bool)),
-				  parent(), SLOT(setShowRange(bool)));
-			  connect(parent(), SIGNAL(showRangeChanged(bool)),
-				  action, SLOT(setOn(bool)));
-			  action->setOn(showRange);
-			  action->addTo(headerPopup);
-			action = new Q3Action(NULL, _("Show Data"), 0, this);
-			  action->setToggleAction(TRUE);
-			  connect(action, SIGNAL(toggled(bool)),
-				  parent(), SLOT(setShowData(bool)));
-			  connect(parent(), SIGNAL(showDataChanged(bool)),
-				  action, SLOT(setOn(bool)));
-			  action->setOn(showData);
-			  action->addTo(headerPopup);
-		}
-		headerPopup->exec(e->globalPos());
-		e->accept();
-	} else
-		e->ignore();
-}
-
-ConfigView*ConfigView::viewList;
-QAction *ConfigView::showNormalAction;
-QAction *ConfigView::showAllAction;
-QAction *ConfigView::showPromptAction;
-
-ConfigView::ConfigView(QWidget* parent, const char *name)
-	: Parent(parent, name)
-{
-	list = new ConfigList(this, name);
-	lineEdit = new ConfigLineEdit(this);
-	lineEdit->hide();
-
-	this->nextView = viewList;
-	viewList = this;
-}
-
-ConfigView::~ConfigView(void)
-{
-	ConfigView** vp;
-
-	for (vp = &viewList; *vp; vp = &(*vp)->nextView) {
-		if (*vp == this) {
-			*vp = nextView;
-			break;
-		}
-	}
-}
-
-void ConfigView::setOptionMode(QAction *act)
-{
-	if (act == showNormalAction)
-		list->optMode = normalOpt;
-	else if (act == showAllAction)
-		list->optMode = allOpt;
-	else
-		list->optMode = promptOpt;
-
-	list->updateListAll();
-}
-
-void ConfigView::setShowName(bool b)
-{
-	if (list->showName != b) {
-		list->showName = b;
-		list->reinit();
-		emit showNameChanged(b);
-	}
-}
-
-void ConfigView::setShowRange(bool b)
-{
-	if (list->showRange != b) {
-		list->showRange = b;
-		list->reinit();
-		emit showRangeChanged(b);
-	}
-}
-
-void ConfigView::setShowData(bool b)
-{
-	if (list->showData != b) {
-		list->showData = b;
-		list->reinit();
-		emit showDataChanged(b);
-	}
-}
-
-void ConfigList::setAllOpen(bool open)
-{
-	Q3ListViewItemIterator it(this);
-
-	for (; it.current(); it++)
-		it.current()->setOpen(open);
-}
-
-void ConfigView::updateList(ConfigItem* item)
-{
-	ConfigView* v;
-
-	for (v = viewList; v; v = v->nextView)
-		v->list->updateList(item);
-}
-
-void ConfigView::updateListAll(void)
-{
-	ConfigView* v;
-
-	for (v = viewList; v; v = v->nextView)
-		v->list->updateListAll();
-}
-
-ConfigInfoView::ConfigInfoView(QWidget* parent, const char *name)
-	: Parent(parent, name), sym(0), _menu(0)
-{
-	if (name) {
-		configSettings->beginGroup(name);
-		_showDebug = configSettings->readBoolEntry("/showDebug", false);
-		configSettings->endGroup();
-		connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
-	}
-}
-
-void ConfigInfoView::saveSettings(void)
-{
-	if (name()) {
-		configSettings->beginGroup(name());
-		configSettings->writeEntry("/showDebug", showDebug());
-		configSettings->endGroup();
-	}
-}
-
-void ConfigInfoView::setShowDebug(bool b)
-{
-	if (_showDebug != b) {
-		_showDebug = b;
-		if (_menu)
-			menuInfo();
-		else if (sym)
-			symbolInfo();
-		emit showDebugChanged(b);
-	}
-}
-
-void ConfigInfoView::setInfo(struct menu *m)
-{
-	if (_menu == m)
-		return;
-	_menu = m;
-	sym = NULL;
-	if (!_menu)
-		clear();
-	else
-		menuInfo();
-}
-
-void ConfigInfoView::symbolInfo(void)
-{
-	QString str;
-
-	str += "<big>Symbol: <b>";
-	str += print_filter(sym->name);
-	str += "</b></big><br><br>value: ";
-	str += print_filter(sym_get_string_value(sym));
-	str += "<br>visibility: ";
-	str += sym->visible == yes ? "y" : sym->visible == mod ? "m" : "n";
-	str += "<br>";
-	str += debug_info(sym);
-
-	setText(str);
-}
-
-void ConfigInfoView::menuInfo(void)
-{
-	struct symbol* sym;
-	QString head, debug, help;
-
-	sym = _menu->sym;
-	if (sym) {
-		if (_menu->prompt) {
-			head += "<big><b>";
-			head += print_filter(_(_menu->prompt->text));
-			head += "</b></big>";
-			if (sym->name) {
-				head += " (";
-				if (showDebug())
-					head += QString().sprintf("<a href=\"s%p\">", sym);
-				head += print_filter(sym->name);
-				if (showDebug())
-					head += "</a>";
-				head += ")";
-			}
-		} else if (sym->name) {
-			head += "<big><b>";
-			if (showDebug())
-				head += QString().sprintf("<a href=\"s%p\">", sym);
-			head += print_filter(sym->name);
-			if (showDebug())
-				head += "</a>";
-			head += "</b></big>";
-		}
-		head += "<br><br>";
-
-		if (showDebug())
-			debug = debug_info(sym);
-
-		struct gstr help_gstr = str_new();
-		menu_get_ext_help(_menu, &help_gstr);
-		help = print_filter(str_get(&help_gstr));
-		str_free(&help_gstr);
-	} else if (_menu->prompt) {
-		head += "<big><b>";
-		head += print_filter(_(_menu->prompt->text));
-		head += "</b></big><br><br>";
-		if (showDebug()) {
-			if (_menu->prompt->visible.expr) {
-				debug += "&nbsp;&nbsp;dep: ";
-				expr_print(_menu->prompt->visible.expr, expr_print_help, &debug, E_NONE);
-				debug += "<br><br>";
-			}
-		}
-	}
-	if (showDebug())
-		debug += QString().sprintf("defined at %s:%d<br><br>", _menu->file->name, _menu->lineno);
-
-	setText(head + debug + help);
-}
-
-QString ConfigInfoView::debug_info(struct symbol *sym)
-{
-	QString debug;
-
-	debug += "type: ";
-	debug += print_filter(sym_type_name(sym->type));
-	if (sym_is_choice(sym))
-		debug += " (choice)";
-	debug += "<br>";
-	if (sym->rev_dep.expr) {
-		debug += "reverse dep: ";
-		expr_print(sym->rev_dep.expr, expr_print_help, &debug, E_NONE);
-		debug += "<br>";
-	}
-	for (struct property *prop = sym->prop; prop; prop = prop->next) {
-		switch (prop->type) {
-		case P_PROMPT:
-		case P_MENU:
-			debug += QString().sprintf("prompt: <a href=\"m%p\">", prop->menu);
-			debug += print_filter(_(prop->text));
-			debug += "</a><br>";
-			break;
-		case P_DEFAULT:
-		case P_SELECT:
-		case P_RANGE:
-		case P_ENV:
-			debug += prop_get_type_name(prop->type);
-			debug += ": ";
-			expr_print(prop->expr, expr_print_help, &debug, E_NONE);
-			debug += "<br>";
-			break;
-		case P_CHOICE:
-			if (sym_is_choice(sym)) {
-				debug += "choice: ";
-				expr_print(prop->expr, expr_print_help, &debug, E_NONE);
-				debug += "<br>";
-			}
-			break;
-		default:
-			debug += "unknown property: ";
-			debug += prop_get_type_name(prop->type);
-			debug += "<br>";
-		}
-		if (prop->visible.expr) {
-			debug += "&nbsp;&nbsp;&nbsp;&nbsp;dep: ";
-			expr_print(prop->visible.expr, expr_print_help, &debug, E_NONE);
-			debug += "<br>";
-		}
-	}
-	debug += "<br>";
-
-	return debug;
-}
-
-QString ConfigInfoView::print_filter(const QString &str)
-{
-	QRegExp re("[<>&\"\\n]");
-	QString res = str;
-	for (int i = 0; (i = res.find(re, i)) >= 0;) {
-		switch (res[i].latin1()) {
-		case '<':
-			res.replace(i, 1, "&lt;");
-			i += 4;
-			break;
-		case '>':
-			res.replace(i, 1, "&gt;");
-			i += 4;
-			break;
-		case '&':
-			res.replace(i, 1, "&amp;");
-			i += 5;
-			break;
-		case '"':
-			res.replace(i, 1, "&quot;");
-			i += 6;
-			break;
-		case '\n':
-			res.replace(i, 1, "<br>");
-			i += 4;
-			break;
-		}
-	}
-	return res;
-}
-
-void ConfigInfoView::expr_print_help(void *data, struct symbol *sym, const char *str)
-{
-	QString* text = reinterpret_cast<QString*>(data);
-	QString str2 = print_filter(str);
-
-	if (sym && sym->name && !(sym->flags & SYMBOL_CONST)) {
-		*text += QString().sprintf("<a href=\"s%p\">", sym);
-		*text += str2;
-		*text += "</a>";
-	} else
-		*text += str2;
-}
-
-Q3PopupMenu* ConfigInfoView::createPopupMenu(const QPoint& pos)
-{
-	Q3PopupMenu* popup = Parent::createPopupMenu(pos);
-	Q3Action* action = new Q3Action(NULL, _("Show Debug Info"), 0, popup);
-	  action->setToggleAction(TRUE);
-	  connect(action, SIGNAL(toggled(bool)), SLOT(setShowDebug(bool)));
-	  connect(this, SIGNAL(showDebugChanged(bool)), action, SLOT(setOn(bool)));
-	  action->setOn(showDebug());
-	popup->insertSeparator();
-	action->addTo(popup);
-	return popup;
-}
-
-void ConfigInfoView::contentsContextMenuEvent(QContextMenuEvent *e)
-{
-	Parent::contentsContextMenuEvent(e);
-}
-
-ConfigSearchWindow::ConfigSearchWindow(ConfigMainWindow* parent, const char *name)
-	: Parent(parent, name), result(NULL)
-{
-	setCaption("Search Config");
-
-	QVBoxLayout* layout1 = new QVBoxLayout(this, 11, 6);
-	QHBoxLayout* layout2 = new QHBoxLayout(0, 0, 6);
-	layout2->addWidget(new QLabel(_("Find:"), this));
-	editField = new QLineEdit(this);
-	connect(editField, SIGNAL(returnPressed()), SLOT(search()));
-	layout2->addWidget(editField);
-	searchButton = new QPushButton(_("Search"), this);
-	searchButton->setAutoDefault(FALSE);
-	connect(searchButton, SIGNAL(clicked()), SLOT(search()));
-	layout2->addWidget(searchButton);
-	layout1->addLayout(layout2);
-
-	split = new QSplitter(this);
-	split->setOrientation(Qt::Vertical);
-	list = new ConfigView(split, name);
-	list->list->mode = listMode;
-	info = new ConfigInfoView(split, name);
-	connect(list->list, SIGNAL(menuChanged(struct menu *)),
-		info, SLOT(setInfo(struct menu *)));
-	connect(list->list, SIGNAL(menuChanged(struct menu *)),
-		parent, SLOT(setMenuLink(struct menu *)));
-
-	layout1->addWidget(split);
-
-	if (name) {
-		int x, y, width, height;
-		bool ok;
-
-		configSettings->beginGroup(name);
-		width = configSettings->readNumEntry("/window width", parent->width() / 2);
-		height = configSettings->readNumEntry("/window height", parent->height() / 2);
-		resize(width, height);
-		x = configSettings->readNumEntry("/window x", 0, &ok);
-		if (ok)
-			y = configSettings->readNumEntry("/window y", 0, &ok);
-		if (ok)
-			move(x, y);
-		Q3ValueList<int> sizes = configSettings->readSizes("/split", &ok);
-		if (ok)
-			split->setSizes(sizes);
-		configSettings->endGroup();
-		connect(configApp, SIGNAL(aboutToQuit()), SLOT(saveSettings()));
-	}
-}
-
-void ConfigSearchWindow::saveSettings(void)
-{
-	if (name()) {
-		configSettings->beginGroup(name());
-		configSettings->writeEntry("/window x", pos().x());
-		configSettings->writeEntry("/window y", pos().y());
-		configSettings->writeEntry("/window width", size().width());
-		configSettings->writeEntry("/window height", size().height());
-		configSettings->writeSizes("/split", split->sizes());
-		configSettings->endGroup();
-	}
-}
-
-void ConfigSearchWindow::search(void)
-{
-	struct symbol **p;
-	struct property *prop;
-	ConfigItem *lastItem = NULL;
-
-	free(result);
-	list->list->clear();
-	info->clear();
-
-	result = sym_re_search(editField->text().latin1());
-	if (!result)
-		return;
-	for (p = result; *p; p++) {
-		for_all_prompts((*p), prop)
-			lastItem = new ConfigItem(list->list, lastItem, prop->menu,
-						  menu_is_visible(prop->menu));
-	}
-}
-
-/*
- * Construct the complete config widget
- */
-ConfigMainWindow::ConfigMainWindow(void)
-	: searchWindow(0)
-{
-	QMenuBar* menu;
-	bool ok;
-	int x, y, width, height;
-	char title[256];
-
-	QDesktopWidget *d = configApp->desktop();
-	snprintf(title, sizeof(title), "%s%s",
-		rootmenu.prompt->text,
-#if QT_VERSION < 0x040000
-		" (Qt3)"
-#else
-		""
-#endif
-		);
-	setCaption(title);
-
-	width = configSettings->readNumEntry("/window width", d->width() - 64);
-	height = configSettings->readNumEntry("/window height", d->height() - 64);
-	resize(width, height);
-	x = configSettings->readNumEntry("/window x", 0, &ok);
-	if (ok)
-		y = configSettings->readNumEntry("/window y", 0, &ok);
-	if (ok)
-		move(x, y);
-
-	split1 = new QSplitter(this);
-	split1->setOrientation(Qt::Horizontal);
-	setCentralWidget(split1);
-
-	menuView = new ConfigView(split1, "menu");
-	menuList = menuView->list;
-
-	split2 = new QSplitter(split1);
-	split2->setOrientation(Qt::Vertical);
-
-	// create config tree
-	configView = new ConfigView(split2, "config");
-	configList = configView->list;
-
-	helpText = new ConfigInfoView(split2, "help");
-	helpText->setTextFormat(Qt::RichText);
-
-	setTabOrder(configList, helpText);
-	configList->setFocus();
-
-	menu = menuBar();
-	toolBar = new Q3ToolBar("Tools", this);
-
-	backAction = new Q3Action("Back", QPixmap(xpm_back), _("Back"), 0, this);
-	  connect(backAction, SIGNAL(activated()), SLOT(goBack()));
-	  backAction->setEnabled(FALSE);
-	Q3Action *quitAction = new Q3Action("Quit", _("&Quit"), Qt::CTRL + Qt::Key_Q, this);
-	  connect(quitAction, SIGNAL(activated()), SLOT(close()));
-	Q3Action *loadAction = new Q3Action("Load", QPixmap(xpm_load), _("&Load"), Qt::CTRL + Qt::Key_L, this);
-	  connect(loadAction, SIGNAL(activated()), SLOT(loadConfig()));
-	saveAction = new Q3Action("Save", QPixmap(xpm_save), _("&Save"), Qt::CTRL + Qt::Key_S, this);
-	  connect(saveAction, SIGNAL(activated()), SLOT(saveConfig()));
-	conf_set_changed_callback(conf_changed);
-	// Set saveAction's initial state
-	conf_changed();
-	Q3Action *saveAsAction = new Q3Action("Save As...", _("Save &As..."), 0, this);
-	  connect(saveAsAction, SIGNAL(activated()), SLOT(saveConfigAs()));
-	Q3Action *searchAction = new Q3Action("Find", _("&Find"), Qt::CTRL + Qt::Key_F, this);
-	  connect(searchAction, SIGNAL(activated()), SLOT(searchConfig()));
-	Q3Action *singleViewAction = new Q3Action("Single View", QPixmap(xpm_single_view), _("Single View"), 0, this);
-	  connect(singleViewAction, SIGNAL(activated()), SLOT(showSingleView()));
-	Q3Action *splitViewAction = new Q3Action("Split View", QPixmap(xpm_split_view), _("Split View"), 0, this);
-	  connect(splitViewAction, SIGNAL(activated()), SLOT(showSplitView()));
-	Q3Action *fullViewAction = new Q3Action("Full View", QPixmap(xpm_tree_view), _("Full View"), 0, this);
-	  connect(fullViewAction, SIGNAL(activated()), SLOT(showFullView()));
-
-	Q3Action *showNameAction = new Q3Action(NULL, _("Show Name"), 0, this);
-	  showNameAction->setToggleAction(TRUE);
-	  connect(showNameAction, SIGNAL(toggled(bool)), configView, SLOT(setShowName(bool)));
-	  connect(configView, SIGNAL(showNameChanged(bool)), showNameAction, SLOT(setOn(bool)));
-	  showNameAction->setOn(configView->showName());
-	Q3Action *showRangeAction = new Q3Action(NULL, _("Show Range"), 0, this);
-	  showRangeAction->setToggleAction(TRUE);
-	  connect(showRangeAction, SIGNAL(toggled(bool)), configView, SLOT(setShowRange(bool)));
-	  connect(configView, SIGNAL(showRangeChanged(bool)), showRangeAction, SLOT(setOn(bool)));
-	  showRangeAction->setOn(configList->showRange);
-	Q3Action *showDataAction = new Q3Action(NULL, _("Show Data"), 0, this);
-	  showDataAction->setToggleAction(TRUE);
-	  connect(showDataAction, SIGNAL(toggled(bool)), configView, SLOT(setShowData(bool)));
-	  connect(configView, SIGNAL(showDataChanged(bool)), showDataAction, SLOT(setOn(bool)));
-	  showDataAction->setOn(configList->showData);
-
-	QActionGroup *optGroup = new QActionGroup(this);
-	optGroup->setExclusive(TRUE);
-	connect(optGroup, SIGNAL(selected(QAction *)), configView,
-		SLOT(setOptionMode(QAction *)));
-	connect(optGroup, SIGNAL(selected(QAction *)), menuView,
-		SLOT(setOptionMode(QAction *)));
-
-#if QT_VERSION >= 0x040000
-	configView->showNormalAction = new QAction(_("Show Normal Options"), optGroup);
-	configView->showAllAction = new QAction(_("Show All Options"), optGroup);
-	configView->showPromptAction = new QAction(_("Show Prompt Options"), optGroup);
-#else
-	configView->showNormalAction = new QAction(_("Show Normal Options"), 0, optGroup);
-	configView->showAllAction = new QAction(_("Show All Options"), 0, optGroup);
-	configView->showPromptAction = new QAction(_("Show Prompt Options"), 0, optGroup);
-#endif
-	configView->showNormalAction->setToggleAction(TRUE);
-	configView->showNormalAction->setOn(configList->optMode == normalOpt);
-	configView->showAllAction->setToggleAction(TRUE);
-	configView->showAllAction->setOn(configList->optMode == allOpt);
-	configView->showPromptAction->setToggleAction(TRUE);
-	configView->showPromptAction->setOn(configList->optMode == promptOpt);
-
-	Q3Action *showDebugAction = new Q3Action(NULL, _("Show Debug Info"), 0, this);
-	  showDebugAction->setToggleAction(TRUE);
-	  connect(showDebugAction, SIGNAL(toggled(bool)), helpText, SLOT(setShowDebug(bool)));
-	  connect(helpText, SIGNAL(showDebugChanged(bool)), showDebugAction, SLOT(setOn(bool)));
-	  showDebugAction->setOn(helpText->showDebug());
-
-	Q3Action *showIntroAction = new Q3Action(NULL, _("Introduction"), 0, this);
-	  connect(showIntroAction, SIGNAL(activated()), SLOT(showIntro()));
-	Q3Action *showAboutAction = new Q3Action(NULL, _("About"), 0, this);
-	  connect(showAboutAction, SIGNAL(activated()), SLOT(showAbout()));
-
-	// init tool bar
-	backAction->addTo(toolBar);
-	toolBar->addSeparator();
-	loadAction->addTo(toolBar);
-	saveAction->addTo(toolBar);
-	toolBar->addSeparator();
-	singleViewAction->addTo(toolBar);
-	splitViewAction->addTo(toolBar);
-	fullViewAction->addTo(toolBar);
-
-	// create config menu
-	Q3PopupMenu* config = new Q3PopupMenu(this);
-	menu->insertItem(_("&File"), config);
-	loadAction->addTo(config);
-	saveAction->addTo(config);
-	saveAsAction->addTo(config);
-	config->insertSeparator();
-	quitAction->addTo(config);
-
-	// create edit menu
-	Q3PopupMenu* editMenu = new Q3PopupMenu(this);
-	menu->insertItem(_("&Edit"), editMenu);
-	searchAction->addTo(editMenu);
-
-	// create options menu
-	Q3PopupMenu* optionMenu = new Q3PopupMenu(this);
-	menu->insertItem(_("&Option"), optionMenu);
-	showNameAction->addTo(optionMenu);
-	showRangeAction->addTo(optionMenu);
-	showDataAction->addTo(optionMenu);
-	optionMenu->insertSeparator();
-	optGroup->addTo(optionMenu);
-	optionMenu->insertSeparator();
-
-	// create help menu
-	Q3PopupMenu* helpMenu = new Q3PopupMenu(this);
-	menu->insertSeparator();
-	menu->insertItem(_("&Help"), helpMenu);
-	showIntroAction->addTo(helpMenu);
-	showAboutAction->addTo(helpMenu);
-
-	connect(configList, SIGNAL(menuChanged(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(configList, SIGNAL(menuSelected(struct menu *)),
-		SLOT(changeMenu(struct menu *)));
-	connect(configList, SIGNAL(parentSelected()),
-		SLOT(goBack()));
-	connect(menuList, SIGNAL(menuChanged(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(menuList, SIGNAL(menuSelected(struct menu *)),
-		SLOT(changeMenu(struct menu *)));
-
-	connect(configList, SIGNAL(gotFocus(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(menuList, SIGNAL(gotFocus(struct menu *)),
-		helpText, SLOT(setInfo(struct menu *)));
-	connect(menuList, SIGNAL(gotFocus(struct menu *)),
-		SLOT(listFocusChanged(void)));
-	connect(helpText, SIGNAL(menuSelected(struct menu *)),
-		SLOT(setMenuLink(struct menu *)));
-
-	QString listMode = configSettings->readEntry("/listMode", "symbol");
-	if (listMode == "single")
-		showSingleView();
-	else if (listMode == "full")
-		showFullView();
-	else /*if (listMode == "split")*/
-		showSplitView();
-
-	// UI setup done, restore splitter positions
-	Q3ValueList<int> sizes = configSettings->readSizes("/split1", &ok);
-	if (ok)
-		split1->setSizes(sizes);
-
-	sizes = configSettings->readSizes("/split2", &ok);
-	if (ok)
-		split2->setSizes(sizes);
-}
-
-void ConfigMainWindow::loadConfig(void)
-{
-	QString s = Q3FileDialog::getOpenFileName(conf_get_configname(), NULL, this);
-	if (s.isNull())
-		return;
-	if (conf_read(QFile::encodeName(s)))
-		QMessageBox::information(this, "qconf", _("Unable to load configuration!"));
-	ConfigView::updateListAll();
-}
-
-bool ConfigMainWindow::saveConfig(void)
-{
-	if (conf_write(NULL)) {
-		QMessageBox::information(this, "qconf", _("Unable to save configuration!"));
-		return false;
-	}
-	return true;
-}
-
-void ConfigMainWindow::saveConfigAs(void)
-{
-	QString s = Q3FileDialog::getSaveFileName(conf_get_configname(), NULL, this);
-	if (s.isNull())
-		return;
-	saveConfig();
-}
-
-void ConfigMainWindow::searchConfig(void)
-{
-	if (!searchWindow)
-		searchWindow = new ConfigSearchWindow(this, "search");
-	searchWindow->show();
-}
-
-void ConfigMainWindow::changeMenu(struct menu *menu)
-{
-	configList->setRootMenu(menu);
-	if (configList->rootEntry->parent == &rootmenu)
-		backAction->setEnabled(FALSE);
-	else
-		backAction->setEnabled(TRUE);
-}
-
-void ConfigMainWindow::setMenuLink(struct menu *menu)
-{
-	struct menu *parent;
-	ConfigList* list = NULL;
-	ConfigItem* item;
-
-	if (configList->menuSkip(menu))
-		return;
-
-	switch (configList->mode) {
-	case singleMode:
-		list = configList;
-		parent = menu_get_parent_menu(menu);
-		if (!parent)
-			return;
-		list->setRootMenu(parent);
-		break;
-	case symbolMode:
-		if (menu->flags & MENU_ROOT) {
-			configList->setRootMenu(menu);
-			configList->clearSelection();
-			list = menuList;
-		} else {
-			list = configList;
-			parent = menu_get_parent_menu(menu->parent);
-			if (!parent)
-				return;
-			item = menuList->findConfigItem(parent);
-			if (item) {
-				menuList->setSelected(item, TRUE);
-				menuList->ensureItemVisible(item);
-			}
-			list->setRootMenu(parent);
-		}
-		break;
-	case fullMode:
-		list = configList;
-		break;
-	default:
-		break;
-	}
-
-	if (list) {
-		item = list->findConfigItem(menu);
-		if (item) {
-			list->setSelected(item, TRUE);
-			list->ensureItemVisible(item);
-			list->setFocus();
-		}
-	}
-}
-
-void ConfigMainWindow::listFocusChanged(void)
-{
-	if (menuList->mode == menuMode)
-		configList->clearSelection();
-}
-
-void ConfigMainWindow::goBack(void)
-{
-	ConfigItem* item;
-
-	configList->setParentMenu();
-	if (configList->rootEntry == &rootmenu)
-		backAction->setEnabled(FALSE);
-	item = (ConfigItem*)menuList->selectedItem();
-	while (item) {
-		if (item->menu == configList->rootEntry) {
-			menuList->setSelected(item, TRUE);
-			break;
-		}
-		item = (ConfigItem*)item->parent();
-	}
-}
-
-void ConfigMainWindow::showSingleView(void)
-{
-	menuView->hide();
-	menuList->setRootMenu(0);
-	configList->mode = singleMode;
-	if (configList->rootEntry == &rootmenu)
-		configList->updateListAll();
-	else
-		configList->setRootMenu(&rootmenu);
-	configList->setAllOpen(TRUE);
-	configList->setFocus();
-}
-
-void ConfigMainWindow::showSplitView(void)
-{
-	configList->mode = symbolMode;
-	if (configList->rootEntry == &rootmenu)
-		configList->updateListAll();
-	else
-		configList->setRootMenu(&rootmenu);
-	configList->setAllOpen(TRUE);
-	configApp->processEvents();
-	menuList->mode = menuMode;
-	menuList->setRootMenu(&rootmenu);
-	menuList->setAllOpen(TRUE);
-	menuView->show();
-	menuList->setFocus();
-}
-
-void ConfigMainWindow::showFullView(void)
-{
-	menuView->hide();
-	menuList->setRootMenu(0);
-	configList->mode = fullMode;
-	if (configList->rootEntry == &rootmenu)
-		configList->updateListAll();
-	else
-		configList->setRootMenu(&rootmenu);
-	configList->setAllOpen(FALSE);
-	configList->setFocus();
-}
-
-/*
- * ask for saving configuration before quitting
- * TODO ask only when something changed
- */
-void ConfigMainWindow::closeEvent(QCloseEvent* e)
-{
-	if (!conf_get_changed()) {
-		e->accept();
-		return;
-	}
-	QMessageBox mb("qconf", _("Save configuration?"), QMessageBox::Warning,
-			QMessageBox::Yes | QMessageBox::Default, QMessageBox::No, QMessageBox::Cancel | QMessageBox::Escape);
-	mb.setButtonText(QMessageBox::Yes, _("&Save Changes"));
-	mb.setButtonText(QMessageBox::No, _("&Discard Changes"));
-	mb.setButtonText(QMessageBox::Cancel, _("Cancel Exit"));
-	switch (mb.exec()) {
-	case QMessageBox::Yes:
-		if (saveConfig())
-			e->accept();
-		else
-			e->ignore();
-		break;
-	case QMessageBox::No:
-		e->accept();
-		break;
-	case QMessageBox::Cancel:
-		e->ignore();
-		break;
-	}
-}
-
-void ConfigMainWindow::showIntro(void)
-{
-	static const QString str = _("Welcome to the qconf graphical configuration tool.\n\n"
-		"For each option, a blank box indicates the feature is disabled, a check\n"
-		"indicates it is enabled, and a dot indicates that it is to be compiled\n"
-		"as a module.  Clicking on the box will cycle through the three states.\n\n"
-		"If you do not see an option (e.g., a device driver) that you believe\n"
-		"should be present, try turning on Show All Options under the Options menu.\n"
-		"Although there is no cross reference yet to help you figure out what other\n"
-		"options must be enabled to support the option you are interested in, you can\n"
-		"still view the help of a grayed-out option.\n\n"
-		"Toggling Show Debug Info under the Options menu will show the dependencies,\n"
-		"which you can then match by examining other options.\n\n");
-
-	QMessageBox::information(this, "qconf", str);
-}
-
-void ConfigMainWindow::showAbout(void)
-{
-	static const QString str = _("qconf is Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>.\n\n"
-		"Bug reports and feature request can also be entered at http://bugzilla.kernel.org/\n");
-
-	QMessageBox::information(this, "qconf", str);
-}
-
-void ConfigMainWindow::saveSettings(void)
-{
-	configSettings->writeEntry("/window x", pos().x());
-	configSettings->writeEntry("/window y", pos().y());
-	configSettings->writeEntry("/window width", size().width());
-	configSettings->writeEntry("/window height", size().height());
-
-	QString entry;
-	switch(configList->mode) {
-	case singleMode :
-		entry = "single";
-		break;
-
-	case symbolMode :
-		entry = "split";
-		break;
-
-	case fullMode :
-		entry = "full";
-		break;
-
-	default:
-		break;
-	}
-	configSettings->writeEntry("/listMode", entry);
-
-	configSettings->writeSizes("/split1", split1->sizes());
-	configSettings->writeSizes("/split2", split2->sizes());
-}
-
-void ConfigMainWindow::conf_changed(void)
-{
-	if (saveAction)
-		saveAction->setEnabled(conf_get_changed());
-}
-
-void fixup_rootmenu(struct menu *menu)
-{
-	struct menu *child;
-	static int menu_cnt = 0;
-
-	menu->flags |= MENU_ROOT;
-	for (child = menu->list; child; child = child->next) {
-		if (child->prompt && child->prompt->type == P_MENU) {
-			menu_cnt++;
-			fixup_rootmenu(child);
-			menu_cnt--;
-		} else if (!menu_cnt)
-			fixup_rootmenu(child);
-	}
-}
-
-static const char *progname;
-
-static void usage(void)
-{
-	printf(_("%s <config>\n"), progname);
-	exit(0);
-}
-
-int main(int ac, char** av)
-{
-	ConfigMainWindow* v;
-	const char *name;
-
-	bindtextdomain(PACKAGE, LOCALEDIR);
-	textdomain(PACKAGE);
-
-	progname = av[0];
-	configApp = new QApplication(ac, av);
-	if (ac > 1 && av[1][0] == '-') {
-		switch (av[1][1]) {
-		case 'h':
-		case '?':
-			usage();
-		}
-		name = av[2];
-	} else
-		name = av[1];
-	if (!name)
-		usage();
-
-	conf_parse(name);
-	fixup_rootmenu(&rootmenu);
-	conf_read(NULL);
-	//zconfdump(stdout);
-
-	configSettings = new ConfigSettings();
-	configSettings->beginGroup("/kconfig/qconf");
-	v = new ConfigMainWindow();
-
-	//zconfdump(stdout);
-	configApp->setMainWidget(v);
-	configApp->connect(configApp, SIGNAL(lastWindowClosed()), SLOT(quit()));
-	configApp->connect(configApp, SIGNAL(aboutToQuit()), v, SLOT(saveSettings()));
-	v->show();
-	configApp->exec();
-
-	configSettings->endGroup();
-	delete configSettings;
-
-	return 0;
-}
diff --git a/support/kconfig/qconf.h b/support/kconfig/qconf.h
deleted file mode 100644
index bde0c6b..0000000
--- a/support/kconfig/qconf.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#if QT_VERSION < 0x040000
-#include <qlistview.h>
-#else
-#include <q3listview.h>
-#endif
-#include <qsettings.h>
-
-#if QT_VERSION < 0x040000
-#define Q3ValueList             QValueList
-#define Q3PopupMenu             QPopupMenu
-#define Q3ListView              QListView
-#define Q3ListViewItem          QListViewItem
-#define Q3VBox                  QVBox
-#define Q3TextBrowser           QTextBrowser
-#define Q3MainWindow            QMainWindow
-#define Q3Action                QAction
-#define Q3ToolBar               QToolBar
-#define Q3ListViewItemIterator  QListViewItemIterator
-#define Q3FileDialog            QFileDialog
-#endif
-
-class ConfigView;
-class ConfigList;
-class ConfigItem;
-class ConfigLineEdit;
-class ConfigMainWindow;
-
-class ConfigSettings : public QSettings {
-public:
-	ConfigSettings();
-	Q3ValueList<int> readSizes(const QString& key, bool *ok);
-	bool writeSizes(const QString& key, const Q3ValueList<int>& value);
-};
-
-enum colIdx {
-	promptColIdx, nameColIdx, noColIdx, modColIdx, yesColIdx, dataColIdx, colNr
-};
-enum listMode {
-	singleMode, menuMode, symbolMode, fullMode, listMode
-};
-enum optionMode {
-	normalOpt = 0, allOpt, promptOpt
-};
-
-class ConfigList : public Q3ListView {
-	Q_OBJECT
-	typedef class Q3ListView Parent;
-public:
-	ConfigList(ConfigView* p, const char *name = 0);
-	void reinit(void);
-	ConfigView* parent(void) const
-	{
-		return (ConfigView*)Parent::parent();
-	}
-	ConfigItem* findConfigItem(struct menu *);
-
-protected:
-	void keyPressEvent(QKeyEvent *e);
-	void contentsMousePressEvent(QMouseEvent *e);
-	void contentsMouseReleaseEvent(QMouseEvent *e);
-	void contentsMouseMoveEvent(QMouseEvent *e);
-	void contentsMouseDoubleClickEvent(QMouseEvent *e);
-	void focusInEvent(QFocusEvent *e);
-	void contextMenuEvent(QContextMenuEvent *e);
-
-public slots:
-	void setRootMenu(struct menu *menu);
-
-	void updateList(ConfigItem *item);
-	void setValue(ConfigItem* item, tristate val);
-	void changeValue(ConfigItem* item);
-	void updateSelection(void);
-	void saveSettings(void);
-signals:
-	void menuChanged(struct menu *menu);
-	void menuSelected(struct menu *menu);
-	void parentSelected(void);
-	void gotFocus(struct menu *);
-
-public:
-	void updateListAll(void)
-	{
-		updateAll = true;
-		updateList(NULL);
-		updateAll = false;
-	}
-	ConfigList* listView()
-	{
-		return this;
-	}
-	ConfigItem* firstChild() const
-	{
-		return (ConfigItem *)Parent::firstChild();
-	}
-	int mapIdx(colIdx idx)
-	{
-		return colMap[idx];
-	}
-	void addColumn(colIdx idx, const QString& label)
-	{
-		colMap[idx] = Parent::addColumn(label);
-		colRevMap[colMap[idx]] = idx;
-	}
-	void removeColumn(colIdx idx)
-	{
-		int col = colMap[idx];
-		if (col >= 0) {
-			Parent::removeColumn(col);
-			colRevMap[col] = colMap[idx] = -1;
-		}
-	}
-	void setAllOpen(bool open);
-	void setParentMenu(void);
-
-	bool menuSkip(struct menu *);
-
-	template <class P>
-	void updateMenuList(P*, struct menu*);
-
-	bool updateAll;
-
-	QPixmap symbolYesPix, symbolModPix, symbolNoPix;
-	QPixmap choiceYesPix, choiceNoPix;
-	QPixmap menuPix, menuInvPix, menuBackPix, voidPix;
-
-	bool showName, showRange, showData;
-	enum listMode mode;
-	enum optionMode optMode;
-	struct menu *rootEntry;
-	QColorGroup disabledColorGroup;
-	QColorGroup inactivedColorGroup;
-	Q3PopupMenu* headerPopup;
-
-private:
-	int colMap[colNr];
-	int colRevMap[colNr];
-};
-
-class ConfigItem : public Q3ListViewItem {
-	typedef class Q3ListViewItem Parent;
-public:
-	ConfigItem(Q3ListView *parent, ConfigItem *after, struct menu *m, bool v)
-	: Parent(parent, after), menu(m), visible(v), goParent(false)
-	{
-		init();
-	}
-	ConfigItem(ConfigItem *parent, ConfigItem *after, struct menu *m, bool v)
-	: Parent(parent, after), menu(m), visible(v), goParent(false)
-	{
-		init();
-	}
-	ConfigItem(Q3ListView *parent, ConfigItem *after, bool v)
-	: Parent(parent, after), menu(0), visible(v), goParent(true)
-	{
-		init();
-	}
-	~ConfigItem(void);
-	void init(void);
-	void okRename(int col);
-	void updateMenu(void);
-	void testUpdateMenu(bool v);
-	ConfigList* listView() const
-	{
-		return (ConfigList*)Parent::listView();
-	}
-	ConfigItem* firstChild() const
-	{
-		return (ConfigItem *)Parent::firstChild();
-	}
-	ConfigItem* nextSibling() const
-	{
-		return (ConfigItem *)Parent::nextSibling();
-	}
-	void setText(colIdx idx, const QString& text)
-	{
-		Parent::setText(listView()->mapIdx(idx), text);
-	}
-	QString text(colIdx idx) const
-	{
-		return Parent::text(listView()->mapIdx(idx));
-	}
-	void setPixmap(colIdx idx, const QPixmap& pm)
-	{
-		Parent::setPixmap(listView()->mapIdx(idx), pm);
-	}
-	const QPixmap* pixmap(colIdx idx) const
-	{
-		return Parent::pixmap(listView()->mapIdx(idx));
-	}
-	void paintCell(QPainter* p, const QColorGroup& cg, int column, int width, int align);
-
-	ConfigItem* nextItem;
-	struct menu *menu;
-	bool visible;
-	bool goParent;
-};
-
-class ConfigLineEdit : public QLineEdit {
-	Q_OBJECT
-	typedef class QLineEdit Parent;
-public:
-	ConfigLineEdit(ConfigView* parent);
-	ConfigView* parent(void) const
-	{
-		return (ConfigView*)Parent::parent();
-	}
-	void show(ConfigItem *i);
-	void keyPressEvent(QKeyEvent *e);
-
-public:
-	ConfigItem *item;
-};
-
-class ConfigView : public Q3VBox {
-	Q_OBJECT
-	typedef class Q3VBox Parent;
-public:
-	ConfigView(QWidget* parent, const char *name = 0);
-	~ConfigView(void);
-	static void updateList(ConfigItem* item);
-	static void updateListAll(void);
-
-	bool showName(void) const { return list->showName; }
-	bool showRange(void) const { return list->showRange; }
-	bool showData(void) const { return list->showData; }
-public slots:
-	void setShowName(bool);
-	void setShowRange(bool);
-	void setShowData(bool);
-	void setOptionMode(QAction *);
-signals:
-	void showNameChanged(bool);
-	void showRangeChanged(bool);
-	void showDataChanged(bool);
-public:
-	ConfigList* list;
-	ConfigLineEdit* lineEdit;
-
-	static ConfigView* viewList;
-	ConfigView* nextView;
-
-	static QAction *showNormalAction;
-	static QAction *showAllAction;
-	static QAction *showPromptAction;
-};
-
-class ConfigInfoView : public Q3TextBrowser {
-	Q_OBJECT
-	typedef class Q3TextBrowser Parent;
-public:
-	ConfigInfoView(QWidget* parent, const char *name = 0);
-	bool showDebug(void) const { return _showDebug; }
-
-public slots:
-	void setInfo(struct menu *menu);
-	void saveSettings(void);
-	void setShowDebug(bool);
-
-signals:
-	void showDebugChanged(bool);
-	void menuSelected(struct menu *);
-
-protected:
-	void symbolInfo(void);
-	void menuInfo(void);
-	QString debug_info(struct symbol *sym);
-	static QString print_filter(const QString &str);
-	static void expr_print_help(void *data, struct symbol *sym, const char *str);
-	Q3PopupMenu* createPopupMenu(const QPoint& pos);
-	void contentsContextMenuEvent(QContextMenuEvent *e);
-
-	struct symbol *sym;
-	struct menu *_menu;
-	bool _showDebug;
-};
-
-class ConfigSearchWindow : public QDialog {
-	Q_OBJECT
-	typedef class QDialog Parent;
-public:
-	ConfigSearchWindow(ConfigMainWindow* parent, const char *name = 0);
-
-public slots:
-	void saveSettings(void);
-	void search(void);
-
-protected:
-	QLineEdit* editField;
-	QPushButton* searchButton;
-	QSplitter* split;
-	ConfigView* list;
-	ConfigInfoView* info;
-
-	struct symbol **result;
-};
-
-class ConfigMainWindow : public Q3MainWindow {
-	Q_OBJECT
-
-	static Q3Action *saveAction;
-	static void conf_changed(void);
-public:
-	ConfigMainWindow(void);
-public slots:
-	void changeMenu(struct menu *);
-	void setMenuLink(struct menu *);
-	void listFocusChanged(void);
-	void goBack(void);
-	void loadConfig(void);
-	bool saveConfig(void);
-	void saveConfigAs(void);
-	void searchConfig(void);
-	void showSingleView(void);
-	void showSplitView(void);
-	void showFullView(void);
-	void showIntro(void);
-	void showAbout(void);
-	void saveSettings(void);
-
-protected:
-	void closeEvent(QCloseEvent *e);
-
-	ConfigSearchWindow *searchWindow;
-	ConfigView *menuView;
-	ConfigList *menuList;
-	ConfigView *configView;
-	ConfigList *configList;
-	ConfigInfoView *helpText;
-	Q3ToolBar *toolBar;
-	Q3Action *backAction;
-	QSplitter* split1;
-	QSplitter* split2;
-};
diff --git a/support/kconfig/streamline_config.pl b/support/kconfig/streamline_config.pl
deleted file mode 100644
index 4606cdf..0000000
--- a/support/kconfig/streamline_config.pl
+++ /dev/null
@@ -1,640 +0,0 @@
-#!/usr/bin/perl -w
-#
-# Copyright 2005-2009 - Steven Rostedt
-# Licensed under the terms of the GNU GPL License version 2
-#
-#  It's simple enough to figure out how this works.
-#  If not, then you can ask me at stripconfig@goodmis.org
-#
-# What it does?
-#
-#   If you have installed a Linux kernel from a distribution
-#   that turns on way too many modules than you need, and
-#   you only want the modules you use, then this program
-#   is perfect for you.
-#
-#   It gives you the ability to turn off all the modules that are
-#   not loaded on your system.
-#
-# Howto:
-#
-#  1. Boot up the kernel that you want to stream line the config on.
-#  2. Change directory to the directory holding the source of the
-#       kernel that you just booted.
-#  3. Copy the configuraton file to this directory as .config
-#  4. Have all your devices that you need modules for connected and
-#      operational (make sure that their corresponding modules are loaded)
-#  5. Run this script redirecting the output to some other file
-#       like config_strip.
-#  6. Back up your old config (if you want too).
-#  7. copy the config_strip file to .config
-#  8. Run "make oldconfig"
-#
-#  Now your kernel is ready to be built with only the modules that
-#  are loaded.
-#
-# Here's what I did with my Debian distribution.
-#
-#    cd /usr/src/linux-2.6.10
-#    cp /boot/config-2.6.10-1-686-smp .config
-#    ~/bin/streamline_config > config_strip
-#    mv .config config_sav
-#    mv config_strip .config
-#    make oldconfig
-#
-use strict;
-use Getopt::Long;
-
-# set the environment variable LOCALMODCONFIG_DEBUG to get
-# debug output.
-my $debugprint = 0;
-$debugprint = 1 if (defined($ENV{LOCALMODCONFIG_DEBUG}));
-
-sub dprint {
-    return if (!$debugprint);
-    print STDERR @_;
-}
-
-my $config = ".config";
-
-my $uname = `uname -r`;
-chomp $uname;
-
-my @searchconfigs = (
-	{
-	    "file" => ".config",
-	    "exec" => "cat",
-	},
-	{
-	    "file" => "/proc/config.gz",
-	    "exec" => "zcat",
-	},
-	{
-	    "file" => "/boot/config-$uname",
-	    "exec" => "cat",
-	},
-	{
-	    "file" => "/boot/vmlinuz-$uname",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "vmlinux",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "/lib/modules/$uname/kernel/kernel/configs.ko",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "kernel/configs.ko",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-	{
-	    "file" => "kernel/configs.o",
-	    "exec" => "scripts/extract-ikconfig",
-	    "test" => "scripts/extract-ikconfig",
-	},
-);
-
-sub read_config {
-    foreach my $conf (@searchconfigs) {
-	my $file = $conf->{"file"};
-
-	next if ( ! -f "$file");
-
-	if (defined($conf->{"test"})) {
-	    `$conf->{"test"} $conf->{"file"} 2>/dev/null`;
-	    next if ($?);
-	}
-
-	my $exec = $conf->{"exec"};
-
-	print STDERR "using config: '$file'\n";
-
-	open(my $infile, '-|', "$exec $file") || die "Failed to run $exec $file";
-	my @x = <$infile>;
-	close $infile;
-	return @x;
-    }
-    die "No config file found";
-}
-
-my @config_file = read_config;
-
-# Parse options
-my $localmodconfig = 0;
-my $localyesconfig = 0;
-
-GetOptions("localmodconfig" => \$localmodconfig,
-	   "localyesconfig" => \$localyesconfig);
-
-# Get the build source and top level Kconfig file (passed in)
-my $ksource = ($ARGV[0] ? $ARGV[0] : '.');
-my $kconfig = $ARGV[1];
-my $lsmod_file = $ENV{'LSMOD'};
-
-my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
-chomp @makefiles;
-
-my %depends;
-my %selects;
-my %prompts;
-my %objects;
-my $var;
-my $iflevel = 0;
-my @ifdeps;
-
-# prevent recursion
-my %read_kconfigs;
-
-sub read_kconfig {
-    my ($kconfig) = @_;
-
-    my $state = "NONE";
-    my $config;
-
-    my $cont = 0;
-    my $line;
-
-    my $source = "$ksource/$kconfig";
-    my $last_source = "";
-
-    # Check for any environment variables used
-    while ($source =~ /\$(\w+)/ && $last_source ne $source) {
-	my $env = $1;
-	$last_source = $source;
-	$source =~ s/\$$env/$ENV{$env}/;
-    }
-
-    open(my $kinfile, '<', $source) || die "Can't open $kconfig";
-    while (<$kinfile>) {
-	chomp;
-
-	# Make sure that lines ending with \ continue
-	if ($cont) {
-	    $_ = $line . " " . $_;
-	}
-
-	if (s/\\$//) {
-	    $cont = 1;
-	    $line = $_;
-	    next;
-	}
-
-	$cont = 0;
-
-	# collect any Kconfig sources
-	if (/^source\s*"(.*)"/) {
-	    my $kconfig = $1;
-	    # prevent reading twice.
-	    if (!defined($read_kconfigs{$kconfig})) {
-		$read_kconfigs{$kconfig} = 1;
-		read_kconfig($kconfig);
-	    }
-	    next;
-	}
-
-	# configs found
-	if (/^\s*(menu)?config\s+(\S+)\s*$/) {
-	    $state = "NEW";
-	    $config = $2;
-
-	    # Add depends for 'if' nesting
-	    for (my $i = 0; $i < $iflevel; $i++) {
-		if ($i) {
-		    $depends{$config} .= " " . $ifdeps[$i];
-		} else {
-		    $depends{$config} = $ifdeps[$i];
-		}
-		$state = "DEP";
-	    }
-
-	# collect the depends for the config
-	} elsif ($state eq "NEW" && /^\s*depends\s+on\s+(.*)$/) {
-	    $state = "DEP";
-	    $depends{$config} = $1;
-	} elsif ($state eq "DEP" && /^\s*depends\s+on\s+(.*)$/) {
-	    $depends{$config} .= " " . $1;
-
-	# Get the configs that select this config
-	} elsif ($state ne "NONE" && /^\s*select\s+(\S+)/) {
-	    my $conf = $1;
-	    if (defined($selects{$conf})) {
-		$selects{$conf} .= " " . $config;
-	    } else {
-		$selects{$conf} = $config;
-	    }
-
-	# configs without prompts must be selected
-	} elsif ($state ne "NONE" && /^\s*tristate\s\S/) {
-	    # note if the config has a prompt
-	    $prompts{$config} = 1;
-
-	# Check for if statements
-	} elsif (/^if\s+(.*\S)\s*$/) {
-	    my $deps = $1;
-	    # remove beginning and ending non text
-	    $deps =~ s/^[^a-zA-Z0-9_]*//;
-	    $deps =~ s/[^a-zA-Z0-9_]*$//;
-
-	    my @deps = split /[^a-zA-Z0-9_]+/, $deps;
-
-	    $ifdeps[$iflevel++] = join ':', @deps;
-
-	} elsif (/^endif/) {
-
-	    $iflevel-- if ($iflevel);
-
-	# stop on "help"
-	} elsif (/^\s*help\s*$/) {
-	    $state = "NONE";
-	}
-    }
-    close($kinfile);
-}
-
-if ($kconfig) {
-    read_kconfig($kconfig);
-}
-
-# Makefiles can use variables to define their dependencies
-sub convert_vars {
-    my ($line, %vars) = @_;
-
-    my $process = "";
-
-    while ($line =~ s/^(.*?)(\$\((.*?)\))//) {
-	my $start = $1;
-	my $variable = $2;
-	my $var = $3;
-
-	if (defined($vars{$var})) {
-	    $process .= $start . $vars{$var};
-	} else {
-	    $process .= $start . $variable;
-	}
-    }
-
-    $process .= $line;
-
-    return $process;
-}
-
-# Read all Makefiles to map the configs to the objects
-foreach my $makefile (@makefiles) {
-
-    my $line = "";
-    my %make_vars;
-
-    open(my $infile, '<', $makefile) || die "Can't open $makefile";
-    while (<$infile>) {
-	# if this line ends with a backslash, continue
-	chomp;
-	if (/^(.*)\\$/) {
-	    $line .= $1;
-	    next;
-	}
-
-	$line .= $_;
-	$_ = $line;
-	$line = "";
-
-	my $objs;
-
-	# Convert variables in a line (could define configs)
-	$_ = convert_vars($_, %make_vars);
-
-	# collect objects after obj-$(CONFIG_FOO_BAR)
-	if (/obj-\$\((CONFIG_[^\)]*)\)\s*[+:]?=\s*(.*)/) {
-	    $var = $1;
-	    $objs = $2;
-
-	# check if variables are set
-	} elsif (/^\s*(\S+)\s*[:]?=\s*(.*\S)/) {
-	    $make_vars{$1} = $2;
-	}
-	if (defined($objs)) {
-	    foreach my $obj (split /\s+/,$objs) {
-		$obj =~ s/-/_/g;
-		if ($obj =~ /(.*)\.o$/) {
-		    # Objects may be enabled by more than one config.
-		    # Store configs in an array.
-		    my @arr;
-
-		    if (defined($objects{$1})) {
-			@arr = @{$objects{$1}};
-		    }
-
-		    $arr[$#arr+1] = $var;
-
-		    # The objects have a hash mapping to a reference
-		    # of an array of configs.
-		    $objects{$1} = \@arr;
-		}
-	    }
-	}
-    }
-    close($infile);
-}
-
-my %modules;
-my $linfile;
-
-if (defined($lsmod_file)) {
-    if ( ! -f $lsmod_file) {
-	if ( -f $ENV{'objtree'}."/".$lsmod_file) {
-	    $lsmod_file = $ENV{'objtree'}."/".$lsmod_file;
-	} else {
-		die "$lsmod_file not found";
-	}
-    }
-
-    my $otype = ( -x $lsmod_file) ? '-|' : '<';
-    open($linfile, $otype, $lsmod_file);
-
-} else {
-
-    # see what modules are loaded on this system
-    my $lsmod;
-
-    foreach my $dir ( ("/sbin", "/bin", "/usr/sbin", "/usr/bin") ) {
-	if ( -x "$dir/lsmod" ) {
-	    $lsmod = "$dir/lsmod";
-	    last;
-	}
-}
-    if (!defined($lsmod)) {
-	# try just the path
-	$lsmod = "lsmod";
-    }
-
-    open($linfile, '-|', $lsmod) || die "Can not call lsmod with $lsmod";
-}
-
-while (<$linfile>) {
-	next if (/^Module/);  # Skip the first line.
-	if (/^(\S+)/) {
-		$modules{$1} = 1;
-	}
-}
-close ($linfile);
-
-# add to the configs hash all configs that are needed to enable
-# a loaded module. This is a direct obj-${CONFIG_FOO} += bar.o
-# where we know we need bar.o so we add FOO to the list.
-my %configs;
-foreach my $module (keys(%modules)) {
-    if (defined($objects{$module})) {
-	my @arr = @{$objects{$module}};
-	foreach my $conf (@arr) {
-	    $configs{$conf} = $module;
-	    dprint "$conf added by direct ($module)\n";
-	    if ($debugprint) {
-		my $c=$conf;
-		$c =~ s/^CONFIG_//;
-		if (defined($depends{$c})) {
-		    dprint " deps = $depends{$c}\n";
-		} else {
-		    dprint " no deps\n";
-		}
-	    }
-	}
-    } else {
-	# Most likely, someone has a custom (binary?) module loaded.
-	print STDERR "$module config not found!!\n";
-    }
-}
-
-# Read the current config, and see what is enabled. We want to
-# ignore configs that we would not enable anyway.
-
-my %orig_configs;
-my $valid = "A-Za-z_0-9";
-
-foreach my $line (@config_file) {
-    $_ = $line;
-
-    if (/(CONFIG_[$valid]*)=(m|y)/) {
-	$orig_configs{$1} = $2;
-    }
-}
-
-my $repeat = 1;
-
-my $depconfig;
-
-#
-# Note, we do not care about operands (like: &&, ||, !) we want to add any
-# config that is in the depend list of another config. This script does
-# not enable configs that are not already enabled. If we come across a
-# config A that depends on !B, we can still add B to the list of depends
-# to keep on. If A was on in the original config, B would not have been
-# and B would not be turned on by this script.
-#
-sub parse_config_depends
-{
-    my ($p) = @_;
-
-    while ($p =~ /[$valid]/) {
-
-	if ($p =~ /^[^$valid]*([$valid]+)/) {
-	    my $conf = "CONFIG_" . $1;
-
-	    $p =~ s/^[^$valid]*[$valid]+//;
-
-	    # We only need to process if the depend config is a module
-	    if (!defined($orig_configs{$conf}) || !$orig_configs{conf} eq "m") {
-		next;
-	    }
-
-	    if (!defined($configs{$conf})) {
-		# We must make sure that this config has its
-		# dependencies met.
-		$repeat = 1; # do again
-		dprint "$conf selected by depend $depconfig\n";
-		$configs{$conf} = 1;
-	    }
-	} else {
-	    die "this should never happen";
-	}
-    }
-}
-
-# Select is treated a bit differently than depends. We call this
-# when a config has no prompt and requires another config to be
-# selected. We use to just select all configs that selected this
-# config, but found that that can balloon into enabling hundreds
-# of configs that we do not care about.
-#
-# The idea is we look at all the configs that select it. If one
-# is already in our list of configs to enable, then there's nothing
-# else to do. If there isn't, we pick the first config that was
-# enabled in the orignal config and use that.
-sub parse_config_selects
-{
-    my ($config, $p) = @_;
-
-    my $next_config;
-
-    while ($p =~ /[$valid]/) {
-
-	if ($p =~ /^[^$valid]*([$valid]+)/) {
-	    my $conf = "CONFIG_" . $1;
-
-	    $p =~ s/^[^$valid]*[$valid]+//;
-
-	    # Make sure that this config exists in the current .config file
-	    if (!defined($orig_configs{$conf})) {
-		dprint "$conf not set for $config select\n";
-		next;
-	    }
-
-	    # Check if something other than a module selects this config
-	    if (defined($orig_configs{$conf}) && $orig_configs{$conf} ne "m") {
-		dprint "$conf (non module) selects config, we are good\n";
-		# we are good with this
-		return;
-	    }
-	    if (defined($configs{$conf})) {
-		dprint "$conf selects $config so we are good\n";
-		# A set config selects this config, we are good
-		return;
-	    }
-	    # Set this config to be selected
-	    if (!defined($next_config)) {
-		$next_config = $conf;
-	    }
-	} else {
-	    die "this should never happen";
-	}
-    }
-
-    # If no possible config selected this, then something happened.
-    if (!defined($next_config)) {
-	print STDERR "WARNING: $config is required, but nothing in the\n";
-	print STDERR "  current config selects it.\n";
-	return;
-    }
-
-    # If we are here, then we found no config that is set and
-    # selects this config. Repeat.
-    $repeat = 1;
-    # Make this config need to be selected
-    $configs{$next_config} = 1;
-    dprint "$next_config selected by select $config\n";
-}
-
-my %process_selects;
-
-# loop through all configs, select their dependencies.
-sub loop_depend {
-    $repeat = 1;
-
-    while ($repeat) {
-	$repeat = 0;
-
-      forloop:
-	foreach my $config (keys %configs) {
-
-	    # If this config is not a module, we do not need to process it
-	    if (defined($orig_configs{$config}) && $orig_configs{$config} ne "m") {
-		next forloop;
-	    }
-
-	    $config =~ s/^CONFIG_//;
-	    $depconfig = $config;
-
-	    if (defined($depends{$config})) {
-		# This config has dependencies. Make sure they are also included
-		parse_config_depends $depends{$config};
-	    }
-
-	    # If the config has no prompt, then we need to check if a config
-	    # that is enabled selected it. Or if we need to enable one.
-	    if (!defined($prompts{$config}) && defined($selects{$config})) {
-		$process_selects{$config} = 1;
-	    }
-	}
-    }
-}
-
-sub loop_select {
-
-    foreach my $config (keys %process_selects) {
-	$config =~ s/^CONFIG_//;
-
-	dprint "Process select $config\n";
-
-	# config has no prompt and must be selected.
-	parse_config_selects $config, $selects{$config};
-    }
-}
-
-while ($repeat) {
-    # Get the first set of configs and their dependencies.
-    loop_depend;
-
-    $repeat = 0;
-
-    # Now we need to see if we have to check selects;
-    loop_select;
-}	    
-
-my %setconfigs;
-
-# Finally, read the .config file and turn off any module enabled that
-# we could not find a reason to keep enabled.
-foreach my $line (@config_file) {
-    $_ = $line;
-
-    if (/CONFIG_IKCONFIG/) {
-	if (/# CONFIG_IKCONFIG is not set/) {
-	    # enable IKCONFIG at least as a module
-	    print "CONFIG_IKCONFIG=m\n";
-	    # don't ask about PROC
-	    print "# CONFIG_IKCONFIG_PROC is not set\n";
-	} else {
-	    print;
-	}
-	next;
-    }
-
-    if (/^(CONFIG.*)=(m|y)/) {
-	if (defined($configs{$1})) {
-	    if ($localyesconfig) {
-	        $setconfigs{$1} = 'y';
-		print "$1=y\n";
-		next;
-	    } else {
-	        $setconfigs{$1} = $2;
-	    }
-	} elsif ($2 eq "m") {
-	    print "# $1 is not set\n";
-	    next;
-	}
-    }
-    print;
-}
-
-# Integrity check, make sure all modules that we want enabled do
-# indeed have their configs set.
-loop:
-foreach my $module (keys(%modules)) {
-    if (defined($objects{$module})) {
-	my @arr = @{$objects{$module}};
-	foreach my $conf (@arr) {
-	    if (defined($setconfigs{$conf})) {
-		next loop;
-	    }
-	}
-	print STDERR "module $module did not have configs";
-	foreach my $conf (@arr) {
-	    print STDERR " " , $conf;
-	}
-	print STDERR "\n";
-    }
-}
diff --git a/support/kconfig/symbol.c b/support/kconfig/symbol.c
deleted file mode 100644
index 7caabdb..0000000
--- a/support/kconfig/symbol.c
+++ /dev/null
@@ -1,1373 +0,0 @@
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <regex.h>
-#include <sys/utsname.h>
-
-#include "lkc.h"
-
-struct symbol symbol_yes = {
-	.name = "y",
-	.curr = { "y", yes },
-	.flags = SYMBOL_CONST|SYMBOL_VALID,
-}, symbol_mod = {
-	.name = "m",
-	.curr = { "m", mod },
-	.flags = SYMBOL_CONST|SYMBOL_VALID,
-}, symbol_no = {
-	.name = "n",
-	.curr = { "n", no },
-	.flags = SYMBOL_CONST|SYMBOL_VALID,
-}, symbol_empty = {
-	.name = "",
-	.curr = { "", no },
-	.flags = SYMBOL_VALID,
-};
-
-struct symbol *sym_defconfig_list;
-struct symbol *modules_sym;
-tristate modules_val;
-
-struct expr *sym_env_list;
-
-static void sym_add_default(struct symbol *sym, const char *def)
-{
-	struct property *prop = prop_alloc(P_DEFAULT, sym);
-
-	prop->expr = expr_alloc_symbol(sym_lookup(def, SYMBOL_CONST));
-}
-
-void sym_init(void)
-{
-	struct symbol *sym;
-	struct utsname uts;
-	static bool inited = false;
-
-	if (inited)
-		return;
-	inited = true;
-
-	uname(&uts);
-
-	sym = sym_lookup("UNAME_RELEASE", 0);
-	sym->type = S_STRING;
-	sym->flags |= SYMBOL_AUTO;
-	sym_add_default(sym, uts.release);
-}
-
-enum symbol_type sym_get_type(struct symbol *sym)
-{
-	enum symbol_type type = sym->type;
-
-	if (type == S_TRISTATE) {
-		if (sym_is_choice_value(sym) && sym->visible == yes)
-			type = S_BOOLEAN;
-		else if (modules_val == no)
-			type = S_BOOLEAN;
-	}
-	return type;
-}
-
-const char *sym_type_name(enum symbol_type type)
-{
-	switch (type) {
-	case S_BOOLEAN:
-		return "boolean";
-	case S_TRISTATE:
-		return "tristate";
-	case S_INT:
-		return "integer";
-	case S_HEX:
-		return "hex";
-	case S_STRING:
-		return "string";
-	case S_UNKNOWN:
-		return "unknown";
-	case S_OTHER:
-		break;
-	}
-	return "???";
-}
-
-struct property *sym_get_choice_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_choices(sym, prop)
-		return prop;
-	return NULL;
-}
-
-struct property *sym_get_env_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_properties(sym, prop, P_ENV)
-		return prop;
-	return NULL;
-}
-
-struct property *sym_get_default_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_defaults(sym, prop) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		if (prop->visible.tri != no)
-			return prop;
-	}
-	return NULL;
-}
-
-static struct property *sym_get_range_prop(struct symbol *sym)
-{
-	struct property *prop;
-
-	for_all_properties(sym, prop, P_RANGE) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		if (prop->visible.tri != no)
-			return prop;
-	}
-	return NULL;
-}
-
-static long long sym_get_range_val(struct symbol *sym, int base)
-{
-	sym_calc_value(sym);
-	switch (sym->type) {
-	case S_INT:
-		base = 10;
-		break;
-	case S_HEX:
-		base = 16;
-		break;
-	default:
-		break;
-	}
-	return strtoll(sym->curr.val, NULL, base);
-}
-
-static void sym_validate_range(struct symbol *sym)
-{
-	struct property *prop;
-	int base;
-	long long val, val2;
-	char str[64];
-
-	switch (sym->type) {
-	case S_INT:
-		base = 10;
-		break;
-	case S_HEX:
-		base = 16;
-		break;
-	default:
-		return;
-	}
-	prop = sym_get_range_prop(sym);
-	if (!prop)
-		return;
-	val = strtoll(sym->curr.val, NULL, base);
-	val2 = sym_get_range_val(prop->expr->left.sym, base);
-	if (val >= val2) {
-		val2 = sym_get_range_val(prop->expr->right.sym, base);
-		if (val <= val2)
-			return;
-	}
-	if (sym->type == S_INT)
-		sprintf(str, "%lld", val2);
-	else
-		sprintf(str, "0x%llx", val2);
-	sym->curr.val = strdup(str);
-}
-
-static void sym_calc_visibility(struct symbol *sym)
-{
-	struct property *prop;
-	tristate tri;
-
-	/* any prompt visible? */
-	tri = no;
-	for_all_prompts(sym, prop) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		tri = EXPR_OR(tri, prop->visible.tri);
-	}
-	if (tri == mod && (sym->type != S_TRISTATE || modules_val == no))
-		tri = yes;
-	if (sym->visible != tri) {
-		sym->visible = tri;
-		sym_set_changed(sym);
-	}
-	if (sym_is_choice_value(sym))
-		return;
-	/* defaulting to "yes" if no explicit "depends on" are given */
-	tri = yes;
-	if (sym->dir_dep.expr)
-		tri = expr_calc_value(sym->dir_dep.expr);
-	if (tri == mod)
-		tri = yes;
-	if (sym->dir_dep.tri != tri) {
-		sym->dir_dep.tri = tri;
-		sym_set_changed(sym);
-	}
-	tri = no;
-	if (sym->rev_dep.expr)
-		tri = expr_calc_value(sym->rev_dep.expr);
-	if (tri == mod && sym_get_type(sym) == S_BOOLEAN)
-		tri = yes;
-	if (sym->rev_dep.tri != tri) {
-		sym->rev_dep.tri = tri;
-		sym_set_changed(sym);
-	}
-}
-
-/*
- * Find the default symbol for a choice.
- * First try the default values for the choice symbol
- * Next locate the first visible choice value
- * Return NULL if none was found
- */
-struct symbol *sym_choice_default(struct symbol *sym)
-{
-	struct symbol *def_sym;
-	struct property *prop;
-	struct expr *e;
-
-	/* any of the defaults visible? */
-	for_all_defaults(sym, prop) {
-		prop->visible.tri = expr_calc_value(prop->visible.expr);
-		if (prop->visible.tri == no)
-			continue;
-		def_sym = prop_get_symbol(prop);
-		if (def_sym->visible != no)
-			return def_sym;
-	}
-
-	/* just get the first visible value */
-	prop = sym_get_choice_prop(sym);
-	expr_list_for_each_sym(prop->expr, e, def_sym)
-		if (def_sym->visible != no)
-			return def_sym;
-
-	/* failed to locate any defaults */
-	return NULL;
-}
-
-static struct symbol *sym_calc_choice(struct symbol *sym)
-{
-	struct symbol *def_sym;
-	struct property *prop;
-	struct expr *e;
-	int flags;
-
-	/* first calculate all choice values' visibilities */
-	flags = sym->flags;
-	prop = sym_get_choice_prop(sym);
-	expr_list_for_each_sym(prop->expr, e, def_sym) {
-		sym_calc_visibility(def_sym);
-		if (def_sym->visible != no)
-			flags &= def_sym->flags;
-	}
-
-	sym->flags &= flags | ~SYMBOL_DEF_USER;
-
-	/* is the user choice visible? */
-	def_sym = sym->def[S_DEF_USER].val;
-	if (def_sym && def_sym->visible != no)
-		return def_sym;
-
-	def_sym = sym_choice_default(sym);
-
-	if (def_sym == NULL)
-		/* no choice? reset tristate value */
-		sym->curr.tri = no;
-
-	return def_sym;
-}
-
-void sym_calc_value(struct symbol *sym)
-{
-	struct symbol_value newval, oldval;
-	struct property *prop;
-	struct expr *e;
-
-	if (!sym)
-		return;
-
-	if (sym->flags & SYMBOL_VALID)
-		return;
-
-	if (sym_is_choice_value(sym) &&
-	    sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES) {
-		sym->flags &= ~SYMBOL_NEED_SET_CHOICE_VALUES;
-		prop = sym_get_choice_prop(sym);
-		sym_calc_value(prop_get_symbol(prop));
-	}
-
-	sym->flags |= SYMBOL_VALID;
-
-	oldval = sym->curr;
-
-	switch (sym->type) {
-	case S_INT:
-	case S_HEX:
-	case S_STRING:
-		newval = symbol_empty.curr;
-		break;
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		newval = symbol_no.curr;
-		break;
-	default:
-		sym->curr.val = sym->name;
-		sym->curr.tri = no;
-		return;
-	}
-	if (!sym_is_choice_value(sym))
-		sym->flags &= ~SYMBOL_WRITE;
-
-	sym_calc_visibility(sym);
-
-	/* set default if recursively called */
-	sym->curr = newval;
-
-	switch (sym_get_type(sym)) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		if (sym_is_choice_value(sym) && sym->visible == yes) {
-			prop = sym_get_choice_prop(sym);
-			newval.tri = (prop_get_symbol(prop)->curr.val == sym) ? yes : no;
-		} else {
-			if (sym->visible != no) {
-				/* if the symbol is visible use the user value
-				 * if available, otherwise try the default value
-				 */
-				sym->flags |= SYMBOL_WRITE;
-				if (sym_has_value(sym)) {
-					newval.tri = EXPR_AND(sym->def[S_DEF_USER].tri,
-							      sym->visible);
-					goto calc_newval;
-				}
-			}
-			if (sym->rev_dep.tri != no)
-				sym->flags |= SYMBOL_WRITE;
-			if (!sym_is_choice(sym)) {
-				prop = sym_get_default_prop(sym);
-				if (prop) {
-					sym->flags |= SYMBOL_WRITE;
-					newval.tri = EXPR_AND(expr_calc_value(prop->expr),
-							      prop->visible.tri);
-				}
-			}
-		calc_newval:
-			if (sym->dir_dep.tri == no && sym->rev_dep.tri != no) {
-				struct expr *e;
-				e = expr_simplify_unmet_dep(sym->rev_dep.expr,
-				    sym->dir_dep.expr);
-				fprintf(stderr, "warning: (");
-				expr_fprint(e, stderr);
-				fprintf(stderr, ") selects %s which has unmet direct dependencies (",
-					sym->name);
-				expr_fprint(sym->dir_dep.expr, stderr);
-				fprintf(stderr, ")\n");
-				expr_free(e);
-			}
-			newval.tri = EXPR_OR(newval.tri, sym->rev_dep.tri);
-		}
-		if (newval.tri == mod && sym_get_type(sym) == S_BOOLEAN)
-			newval.tri = yes;
-		break;
-	case S_STRING:
-	case S_HEX:
-	case S_INT:
-		if (sym->visible != no) {
-			sym->flags |= SYMBOL_WRITE;
-			if (sym_has_value(sym)) {
-				newval.val = sym->def[S_DEF_USER].val;
-				break;
-			}
-		}
-		prop = sym_get_default_prop(sym);
-		if (prop) {
-			struct symbol *ds = prop_get_symbol(prop);
-			if (ds) {
-				sym->flags |= SYMBOL_WRITE;
-				sym_calc_value(ds);
-				newval.val = ds->curr.val;
-			}
-		}
-		break;
-	default:
-		;
-	}
-
-	sym->curr = newval;
-	if (sym_is_choice(sym) && newval.tri == yes)
-		sym->curr.val = sym_calc_choice(sym);
-	sym_validate_range(sym);
-
-	if (memcmp(&oldval, &sym->curr, sizeof(oldval))) {
-		sym_set_changed(sym);
-		if (modules_sym == sym) {
-			sym_set_all_changed();
-			modules_val = modules_sym->curr.tri;
-		}
-	}
-
-	if (sym_is_choice(sym)) {
-		struct symbol *choice_sym;
-
-		prop = sym_get_choice_prop(sym);
-		expr_list_for_each_sym(prop->expr, e, choice_sym) {
-			if ((sym->flags & SYMBOL_WRITE) &&
-			    choice_sym->visible != no)
-				choice_sym->flags |= SYMBOL_WRITE;
-			if (sym->flags & SYMBOL_CHANGED)
-				sym_set_changed(choice_sym);
-		}
-	}
-
-	if (sym->flags & SYMBOL_AUTO)
-		sym->flags &= ~SYMBOL_WRITE;
-
-	if (sym->flags & SYMBOL_NEED_SET_CHOICE_VALUES)
-		set_all_choice_values(sym);
-}
-
-void sym_clear_all_valid(void)
-{
-	struct symbol *sym;
-	int i;
-
-	for_all_symbols(i, sym)
-		sym->flags &= ~SYMBOL_VALID;
-	sym_add_change_count(1);
-	if (modules_sym)
-		sym_calc_value(modules_sym);
-}
-
-void sym_set_changed(struct symbol *sym)
-{
-	struct property *prop;
-
-	sym->flags |= SYMBOL_CHANGED;
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->menu)
-			prop->menu->flags |= MENU_CHANGED;
-	}
-}
-
-void sym_set_all_changed(void)
-{
-	struct symbol *sym;
-	int i;
-
-	for_all_symbols(i, sym)
-		sym_set_changed(sym);
-}
-
-bool sym_tristate_within_range(struct symbol *sym, tristate val)
-{
-	int type = sym_get_type(sym);
-
-	if (sym->visible == no)
-		return false;
-
-	if (type != S_BOOLEAN && type != S_TRISTATE)
-		return false;
-
-	if (type == S_BOOLEAN && val == mod)
-		return false;
-	if (sym->visible <= sym->rev_dep.tri)
-		return false;
-	if (sym_is_choice_value(sym) && sym->visible == yes)
-		return val == yes;
-	return val >= sym->rev_dep.tri && val <= sym->visible;
-}
-
-bool sym_set_tristate_value(struct symbol *sym, tristate val)
-{
-	tristate oldval = sym_get_tristate_value(sym);
-
-	if (oldval != val && !sym_tristate_within_range(sym, val))
-		return false;
-
-	if (!(sym->flags & SYMBOL_DEF_USER)) {
-		sym->flags |= SYMBOL_DEF_USER;
-		sym_set_changed(sym);
-	}
-	/*
-	 * setting a choice value also resets the new flag of the choice
-	 * symbol and all other choice values.
-	 */
-	if (sym_is_choice_value(sym) && val == yes) {
-		struct symbol *cs = prop_get_symbol(sym_get_choice_prop(sym));
-		struct property *prop;
-		struct expr *e;
-
-		cs->def[S_DEF_USER].val = sym;
-		cs->flags |= SYMBOL_DEF_USER;
-		prop = sym_get_choice_prop(cs);
-		for (e = prop->expr; e; e = e->left.expr) {
-			if (e->right.sym->visible != no)
-				e->right.sym->flags |= SYMBOL_DEF_USER;
-		}
-	}
-
-	sym->def[S_DEF_USER].tri = val;
-	if (oldval != val)
-		sym_clear_all_valid();
-
-	return true;
-}
-
-tristate sym_toggle_tristate_value(struct symbol *sym)
-{
-	tristate oldval, newval;
-
-	oldval = newval = sym_get_tristate_value(sym);
-	do {
-		switch (newval) {
-		case no:
-			newval = mod;
-			break;
-		case mod:
-			newval = yes;
-			break;
-		case yes:
-			newval = no;
-			break;
-		}
-		if (sym_set_tristate_value(sym, newval))
-			break;
-	} while (oldval != newval);
-	return newval;
-}
-
-bool sym_string_valid(struct symbol *sym, const char *str)
-{
-	signed char ch;
-
-	switch (sym->type) {
-	case S_STRING:
-		return true;
-	case S_INT:
-		ch = *str++;
-		if (ch == '-')
-			ch = *str++;
-		if (!isdigit(ch))
-			return false;
-		if (ch == '0' && *str != 0)
-			return false;
-		while ((ch = *str++)) {
-			if (!isdigit(ch))
-				return false;
-		}
-		return true;
-	case S_HEX:
-		if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
-			str += 2;
-		ch = *str++;
-		do {
-			if (!isxdigit(ch))
-				return false;
-		} while ((ch = *str++));
-		return true;
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (str[0]) {
-		case 'y': case 'Y':
-		case 'm': case 'M':
-		case 'n': case 'N':
-			return true;
-		}
-		return false;
-	default:
-		return false;
-	}
-}
-
-bool sym_string_within_range(struct symbol *sym, const char *str)
-{
-	struct property *prop;
-	long long val;
-
-	switch (sym->type) {
-	case S_STRING:
-		return sym_string_valid(sym, str);
-	case S_INT:
-		if (!sym_string_valid(sym, str))
-			return false;
-		prop = sym_get_range_prop(sym);
-		if (!prop)
-			return true;
-		val = strtoll(str, NULL, 10);
-		return val >= sym_get_range_val(prop->expr->left.sym, 10) &&
-		       val <= sym_get_range_val(prop->expr->right.sym, 10);
-	case S_HEX:
-		if (!sym_string_valid(sym, str))
-			return false;
-		prop = sym_get_range_prop(sym);
-		if (!prop)
-			return true;
-		val = strtoll(str, NULL, 16);
-		return val >= sym_get_range_val(prop->expr->left.sym, 16) &&
-		       val <= sym_get_range_val(prop->expr->right.sym, 16);
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (str[0]) {
-		case 'y': case 'Y':
-			return sym_tristate_within_range(sym, yes);
-		case 'm': case 'M':
-			return sym_tristate_within_range(sym, mod);
-		case 'n': case 'N':
-			return sym_tristate_within_range(sym, no);
-		}
-		return false;
-	default:
-		return false;
-	}
-}
-
-bool sym_set_string_value(struct symbol *sym, const char *newval)
-{
-	const char *oldval;
-	char *val;
-	int size;
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (newval[0]) {
-		case 'y': case 'Y':
-			return sym_set_tristate_value(sym, yes);
-		case 'm': case 'M':
-			return sym_set_tristate_value(sym, mod);
-		case 'n': case 'N':
-			return sym_set_tristate_value(sym, no);
-		}
-		return false;
-	default:
-		;
-	}
-
-	if (!sym_string_within_range(sym, newval))
-		return false;
-
-	if (!(sym->flags & SYMBOL_DEF_USER)) {
-		sym->flags |= SYMBOL_DEF_USER;
-		sym_set_changed(sym);
-	}
-
-	oldval = sym->def[S_DEF_USER].val;
-	size = strlen(newval) + 1;
-	if (sym->type == S_HEX && (newval[0] != '0' || (newval[1] != 'x' && newval[1] != 'X'))) {
-		size += 2;
-		sym->def[S_DEF_USER].val = val = xmalloc(size);
-		*val++ = '0';
-		*val++ = 'x';
-	} else if (!oldval || strcmp(oldval, newval))
-		sym->def[S_DEF_USER].val = val = xmalloc(size);
-	else
-		return true;
-
-	strcpy(val, newval);
-	free((void *)oldval);
-	sym_clear_all_valid();
-
-	return true;
-}
-
-/*
- * Find the default value associated to a symbol.
- * For tristate symbol handle the modules=n case
- * in which case "m" becomes "y".
- * If the symbol does not have any default then fallback
- * to the fixed default values.
- */
-const char *sym_get_string_default(struct symbol *sym)
-{
-	struct property *prop;
-	struct symbol *ds;
-	const char *str;
-	tristate val;
-
-	sym_calc_visibility(sym);
-	sym_calc_value(modules_sym);
-	val = symbol_no.curr.tri;
-	str = symbol_empty.curr.val;
-
-	/* If symbol has a default value look it up */
-	prop = sym_get_default_prop(sym);
-	if (prop != NULL) {
-		switch (sym->type) {
-		case S_BOOLEAN:
-		case S_TRISTATE:
-			/* The visibility may limit the value from yes => mod */
-			val = EXPR_AND(expr_calc_value(prop->expr), prop->visible.tri);
-			break;
-		default:
-			/*
-			 * The following fails to handle the situation
-			 * where a default value is further limited by
-			 * the valid range.
-			 */
-			ds = prop_get_symbol(prop);
-			if (ds != NULL) {
-				sym_calc_value(ds);
-				str = (const char *)ds->curr.val;
-			}
-		}
-	}
-
-	/* Handle select statements */
-	val = EXPR_OR(val, sym->rev_dep.tri);
-
-	/* transpose mod to yes if modules are not enabled */
-	if (val == mod)
-		if (!sym_is_choice_value(sym) && modules_sym->curr.tri == no)
-			val = yes;
-
-	/* transpose mod to yes if type is bool */
-	if (sym->type == S_BOOLEAN && val == mod)
-		val = yes;
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		switch (val) {
-		case no: return "n";
-		case mod: return "m";
-		case yes: return "y";
-		}
-	case S_INT:
-	case S_HEX:
-		return str;
-	case S_STRING:
-		return str;
-	case S_OTHER:
-	case S_UNKNOWN:
-		break;
-	}
-	return "";
-}
-
-const char *sym_get_string_value(struct symbol *sym)
-{
-	tristate val;
-
-	switch (sym->type) {
-	case S_BOOLEAN:
-	case S_TRISTATE:
-		val = sym_get_tristate_value(sym);
-		switch (val) {
-		case no:
-			return "n";
-		case mod:
-			sym_calc_value(modules_sym);
-			return (modules_sym->curr.tri == no) ? "n" : "m";
-		case yes:
-			return "y";
-		}
-		break;
-	default:
-		;
-	}
-	return (const char *)sym->curr.val;
-}
-
-bool sym_is_changable(struct symbol *sym)
-{
-	return sym->visible > sym->rev_dep.tri;
-}
-
-static unsigned strhash(const char *s)
-{
-	/* fnv32 hash */
-	unsigned hash = 2166136261U;
-	for (; *s; s++)
-		hash = (hash ^ *s) * 0x01000193;
-	return hash;
-}
-
-struct symbol *sym_lookup(const char *name, int flags)
-{
-	struct symbol *symbol;
-	char *new_name;
-	int hash;
-
-	if (name) {
-		if (name[0] && !name[1]) {
-			switch (name[0]) {
-			case 'y': return &symbol_yes;
-			case 'm': return &symbol_mod;
-			case 'n': return &symbol_no;
-			}
-		}
-		hash = strhash(name) % SYMBOL_HASHSIZE;
-
-		for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
-			if (symbol->name &&
-			    !strcmp(symbol->name, name) &&
-			    (flags ? symbol->flags & flags
-				   : !(symbol->flags & (SYMBOL_CONST|SYMBOL_CHOICE))))
-				return symbol;
-		}
-		new_name = strdup(name);
-	} else {
-		new_name = NULL;
-		hash = 0;
-	}
-
-	symbol = xmalloc(sizeof(*symbol));
-	memset(symbol, 0, sizeof(*symbol));
-	symbol->name = new_name;
-	symbol->type = S_UNKNOWN;
-	symbol->flags |= flags;
-
-	symbol->next = symbol_hash[hash];
-	symbol_hash[hash] = symbol;
-
-	return symbol;
-}
-
-struct symbol *sym_find(const char *name)
-{
-	struct symbol *symbol = NULL;
-	int hash = 0;
-
-	if (!name)
-		return NULL;
-
-	if (name[0] && !name[1]) {
-		switch (name[0]) {
-		case 'y': return &symbol_yes;
-		case 'm': return &symbol_mod;
-		case 'n': return &symbol_no;
-		}
-	}
-	hash = strhash(name) % SYMBOL_HASHSIZE;
-
-	for (symbol = symbol_hash[hash]; symbol; symbol = symbol->next) {
-		if (symbol->name &&
-		    !strcmp(symbol->name, name) &&
-		    !(symbol->flags & SYMBOL_CONST))
-				break;
-	}
-
-	return symbol;
-}
-
-/*
- * Expand symbol's names embedded in the string given in argument. Symbols'
- * name to be expanded shall be prefixed by a '$'. Unknown symbol expands to
- * the empty string.
- */
-const char *sym_expand_string_value(const char *in)
-{
-	const char *src;
-	char *res;
-	size_t reslen;
-
-	reslen = strlen(in) + 1;
-	res = xmalloc(reslen);
-	res[0] = '\0';
-
-	while ((src = strchr(in, '$'))) {
-		char *p, name[SYMBOL_MAXLENGTH];
-		const char *symval = "";
-		struct symbol *sym;
-		size_t newlen;
-
-		strncat(res, in, src - in);
-		src++;
-
-		p = name;
-		while (isalnum(*src) || *src == '_')
-			*p++ = *src++;
-		*p = '\0';
-
-		sym = sym_find(name);
-		if (sym != NULL) {
-			sym_calc_value(sym);
-			symval = sym_get_string_value(sym);
-		}
-
-		newlen = strlen(res) + strlen(symval) + strlen(src) + 1;
-		if (newlen > reslen) {
-			reslen = newlen;
-			res = realloc(res, reslen);
-		}
-
-		strcat(res, symval);
-		in = src;
-	}
-	strcat(res, in);
-
-	return res;
-}
-
-const char *sym_escape_string_value(const char *in)
-{
-	const char *p;
-	size_t reslen;
-	char *res;
-	size_t l;
-
-	reslen = strlen(in) + strlen("\"\"") + 1;
-
-	p = in;
-	for (;;) {
-		l = strcspn(p, "\"\\");
-		p += l;
-
-		if (p[0] == '\0')
-			break;
-
-		reslen++;
-		p++;
-	}
-
-	res = xmalloc(reslen);
-	res[0] = '\0';
-
-	strcat(res, "\"");
-
-	p = in;
-	for (;;) {
-		l = strcspn(p, "\"\\");
-		strncat(res, p, l);
-		p += l;
-
-		if (p[0] == '\0')
-			break;
-
-		strcat(res, "\\");
-		strncat(res, p++, 1);
-	}
-
-	strcat(res, "\"");
-	return res;
-}
-
-struct sym_match {
-	struct symbol	*sym;
-	off_t		so, eo;
-};
-
-/* Compare matched symbols as thus:
- * - first, symbols that match exactly
- * - then, alphabetical sort
- */
-static int sym_rel_comp(const void *sym1, const void *sym2)
-{
-	const struct sym_match *s1 = sym1;
-	const struct sym_match *s2 = sym2;
-	int exact1, exact2;
-
-	/* Exact match:
-	 * - if matched length on symbol s1 is the length of that symbol,
-	 *   then this symbol should come first;
-	 * - if matched length on symbol s2 is the length of that symbol,
-	 *   then this symbol should come first.
-	 * Note: since the search can be a regexp, both symbols may match
-	 * exactly; if this is the case, we can't decide which comes first,
-	 * and we fallback to sorting alphabetically.
-	 */
-	exact1 = (s1->eo - s1->so) == strlen(s1->sym->name);
-	exact2 = (s2->eo - s2->so) == strlen(s2->sym->name);
-	if (exact1 && !exact2)
-		return -1;
-	if (!exact1 && exact2)
-		return 1;
-
-	/* As a fallback, sort symbols alphabetically */
-	return strcmp(s1->sym->name, s2->sym->name);
-}
-
-struct symbol **sym_re_search(const char *pattern)
-{
-	struct symbol *sym, **sym_arr = NULL;
-	struct sym_match *sym_match_arr = NULL;
-	int i, cnt, size;
-	regex_t re;
-	regmatch_t match[1];
-
-	cnt = size = 0;
-	/* Skip if empty */
-	if (strlen(pattern) == 0)
-		return NULL;
-	if (regcomp(&re, pattern, REG_EXTENDED|REG_ICASE))
-		return NULL;
-
-	for_all_symbols(i, sym) {
-		if (sym->flags & SYMBOL_CONST || !sym->name)
-			continue;
-		if (regexec(&re, sym->name, 1, match, 0))
-			continue;
-		if (cnt >= size) {
-			void *tmp;
-			size += 16;
-			tmp = realloc(sym_match_arr, size * sizeof(struct sym_match));
-			if (!tmp)
-				goto sym_re_search_free;
-			sym_match_arr = tmp;
-		}
-		sym_calc_value(sym);
-		/* As regexec returned 0, we know we have a match, so
-		 * we can use match[0].rm_[se]o without further checks
-		 */
-		sym_match_arr[cnt].so = match[0].rm_so;
-		sym_match_arr[cnt].eo = match[0].rm_eo;
-		sym_match_arr[cnt++].sym = sym;
-	}
-	if (sym_match_arr) {
-		qsort(sym_match_arr, cnt, sizeof(struct sym_match), sym_rel_comp);
-		sym_arr = malloc((cnt+1) * sizeof(struct symbol));
-		if (!sym_arr)
-			goto sym_re_search_free;
-		for (i = 0; i < cnt; i++)
-			sym_arr[i] = sym_match_arr[i].sym;
-		sym_arr[cnt] = NULL;
-	}
-sym_re_search_free:
-	/* sym_match_arr can be NULL if no match, but free(NULL) is OK */
-	free(sym_match_arr);
-	regfree(&re);
-
-	return sym_arr;
-}
-
-/*
- * When we check for recursive dependencies we use a stack to save
- * current state so we can print out relevant info to user.
- * The entries are located on the call stack so no need to free memory.
- * Note insert() remove() must always match to properly clear the stack.
- */
-static struct dep_stack {
-	struct dep_stack *prev, *next;
-	struct symbol *sym;
-	struct property *prop;
-	struct expr *expr;
-} *check_top;
-
-static void dep_stack_insert(struct dep_stack *stack, struct symbol *sym)
-{
-	memset(stack, 0, sizeof(*stack));
-	if (check_top)
-		check_top->next = stack;
-	stack->prev = check_top;
-	stack->sym = sym;
-	check_top = stack;
-}
-
-static void dep_stack_remove(void)
-{
-	check_top = check_top->prev;
-	if (check_top)
-		check_top->next = NULL;
-}
-
-/*
- * Called when we have detected a recursive dependency.
- * check_top point to the top of the stact so we use
- * the ->prev pointer to locate the bottom of the stack.
- */
-static void sym_check_print_recursive(struct symbol *last_sym)
-{
-	struct dep_stack *stack;
-	struct symbol *sym, *next_sym;
-	struct menu *menu = NULL;
-	struct property *prop;
-	struct dep_stack cv_stack;
-
-	if (sym_is_choice_value(last_sym)) {
-		dep_stack_insert(&cv_stack, last_sym);
-		last_sym = prop_get_symbol(sym_get_choice_prop(last_sym));
-	}
-
-	for (stack = check_top; stack != NULL; stack = stack->prev)
-		if (stack->sym == last_sym)
-			break;
-	if (!stack) {
-		fprintf(stderr, "unexpected recursive dependency error\n");
-		return;
-	}
-
-	for (; stack; stack = stack->next) {
-		sym = stack->sym;
-		next_sym = stack->next ? stack->next->sym : last_sym;
-		prop = stack->prop;
-		if (prop == NULL)
-			prop = stack->sym->prop;
-
-		/* for choice values find the menu entry (used below) */
-		if (sym_is_choice(sym) || sym_is_choice_value(sym)) {
-			for (prop = sym->prop; prop; prop = prop->next) {
-				menu = prop->menu;
-				if (prop->menu)
-					break;
-			}
-		}
-		if (stack->sym == last_sym)
-			fprintf(stderr, "%s:%d:error: recursive dependency detected!\n",
-				prop->file->name, prop->lineno);
-		if (stack->expr) {
-			fprintf(stderr, "%s:%d:\tsymbol %s %s value contains %s\n",
-				prop->file->name, prop->lineno,
-				sym->name ? sym->name : "<choice>",
-				prop_get_type_name(prop->type),
-				next_sym->name ? next_sym->name : "<choice>");
-		} else if (stack->prop) {
-			fprintf(stderr, "%s:%d:\tsymbol %s depends on %s\n",
-				prop->file->name, prop->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		} else if (sym_is_choice(sym)) {
-			fprintf(stderr, "%s:%d:\tchoice %s contains symbol %s\n",
-				menu->file->name, menu->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		} else if (sym_is_choice_value(sym)) {
-			fprintf(stderr, "%s:%d:\tsymbol %s is part of choice %s\n",
-				menu->file->name, menu->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		} else {
-			fprintf(stderr, "%s:%d:\tsymbol %s is selected by %s\n",
-				prop->file->name, prop->lineno,
-				sym->name ? sym->name : "<choice>",
-				next_sym->name ? next_sym->name : "<choice>");
-		}
-	}
-
-	if (check_top == &cv_stack)
-		dep_stack_remove();
-}
-
-static struct symbol *sym_check_expr_deps(struct expr *e)
-{
-	struct symbol *sym;
-
-	if (!e)
-		return NULL;
-	switch (e->type) {
-	case E_OR:
-	case E_AND:
-		sym = sym_check_expr_deps(e->left.expr);
-		if (sym)
-			return sym;
-		return sym_check_expr_deps(e->right.expr);
-	case E_NOT:
-		return sym_check_expr_deps(e->left.expr);
-	case E_EQUAL:
-	case E_UNEQUAL:
-		sym = sym_check_deps(e->left.sym);
-		if (sym)
-			return sym;
-		return sym_check_deps(e->right.sym);
-	case E_SYMBOL:
-		return sym_check_deps(e->left.sym);
-	default:
-		break;
-	}
-	printf("Oops! How to check %d?\n", e->type);
-	return NULL;
-}
-
-/* return NULL when dependencies are OK */
-static struct symbol *sym_check_sym_deps(struct symbol *sym)
-{
-	struct symbol *sym2;
-	struct property *prop;
-	struct dep_stack stack;
-
-	dep_stack_insert(&stack, sym);
-
-	sym2 = sym_check_expr_deps(sym->rev_dep.expr);
-	if (sym2)
-		goto out;
-
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->type == P_CHOICE || prop->type == P_SELECT)
-			continue;
-		stack.prop = prop;
-		sym2 = sym_check_expr_deps(prop->visible.expr);
-		if (sym2)
-			break;
-		if (prop->type != P_DEFAULT || sym_is_choice(sym))
-			continue;
-		stack.expr = prop->expr;
-		sym2 = sym_check_expr_deps(prop->expr);
-		if (sym2)
-			break;
-		stack.expr = NULL;
-	}
-
-out:
-	dep_stack_remove();
-
-	return sym2;
-}
-
-static struct symbol *sym_check_choice_deps(struct symbol *choice)
-{
-	struct symbol *sym, *sym2;
-	struct property *prop;
-	struct expr *e;
-	struct dep_stack stack;
-
-	dep_stack_insert(&stack, choice);
-
-	prop = sym_get_choice_prop(choice);
-	expr_list_for_each_sym(prop->expr, e, sym)
-		sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
-
-	choice->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
-	sym2 = sym_check_sym_deps(choice);
-	choice->flags &= ~SYMBOL_CHECK;
-	if (sym2)
-		goto out;
-
-	expr_list_for_each_sym(prop->expr, e, sym) {
-		sym2 = sym_check_sym_deps(sym);
-		if (sym2)
-			break;
-	}
-out:
-	expr_list_for_each_sym(prop->expr, e, sym)
-		sym->flags &= ~SYMBOL_CHECK;
-
-	if (sym2 && sym_is_choice_value(sym2) &&
-	    prop_get_symbol(sym_get_choice_prop(sym2)) == choice)
-		sym2 = choice;
-
-	dep_stack_remove();
-
-	return sym2;
-}
-
-struct symbol *sym_check_deps(struct symbol *sym)
-{
-	struct symbol *sym2;
-	struct property *prop;
-
-	if (sym->flags & SYMBOL_CHECK) {
-		sym_check_print_recursive(sym);
-		return sym;
-	}
-	if (sym->flags & SYMBOL_CHECKED)
-		return NULL;
-
-	if (sym_is_choice_value(sym)) {
-		struct dep_stack stack;
-
-		/* for choice groups start the check with main choice symbol */
-		dep_stack_insert(&stack, sym);
-		prop = sym_get_choice_prop(sym);
-		sym2 = sym_check_deps(prop_get_symbol(prop));
-		dep_stack_remove();
-	} else if (sym_is_choice(sym)) {
-		sym2 = sym_check_choice_deps(sym);
-	} else {
-		sym->flags |= (SYMBOL_CHECK | SYMBOL_CHECKED);
-		sym2 = sym_check_sym_deps(sym);
-		sym->flags &= ~SYMBOL_CHECK;
-	}
-
-	if (sym2 && sym2 == sym)
-		sym2 = NULL;
-
-	return sym2;
-}
-
-struct property *prop_alloc(enum prop_type type, struct symbol *sym)
-{
-	struct property *prop;
-	struct property **propp;
-
-	prop = xmalloc(sizeof(*prop));
-	memset(prop, 0, sizeof(*prop));
-	prop->type = type;
-	prop->sym = sym;
-	prop->file = current_file;
-	prop->lineno = zconf_lineno();
-
-	/* append property to the prop list of symbol */
-	if (sym) {
-		for (propp = &sym->prop; *propp; propp = &(*propp)->next)
-			;
-		*propp = prop;
-	}
-
-	return prop;
-}
-
-struct symbol *prop_get_symbol(struct property *prop)
-{
-	if (prop->expr && (prop->expr->type == E_SYMBOL ||
-			   prop->expr->type == E_LIST))
-		return prop->expr->left.sym;
-	return NULL;
-}
-
-const char *prop_get_type_name(enum prop_type type)
-{
-	switch (type) {
-	case P_PROMPT:
-		return "prompt";
-	case P_ENV:
-		return "env";
-	case P_COMMENT:
-		return "comment";
-	case P_MENU:
-		return "menu";
-	case P_DEFAULT:
-		return "default";
-	case P_CHOICE:
-		return "choice";
-	case P_SELECT:
-		return "select";
-	case P_RANGE:
-		return "range";
-	case P_SYMBOL:
-		return "symbol";
-	case P_UNKNOWN:
-		break;
-	}
-	return "unknown";
-}
-
-static void prop_add_env(const char *env)
-{
-	struct symbol *sym, *sym2;
-	struct property *prop;
-	char *p;
-
-	sym = current_entry->sym;
-	sym->flags |= SYMBOL_AUTO;
-	for_all_properties(sym, prop, P_ENV) {
-		sym2 = prop_get_symbol(prop);
-		if (strcmp(sym2->name, env))
-			menu_warn(current_entry, "redefining environment symbol from %s",
-				  sym2->name);
-		return;
-	}
-
-	prop = prop_alloc(P_ENV, sym);
-	prop->expr = expr_alloc_symbol(sym_lookup(env, SYMBOL_CONST));
-
-	sym_env_list = expr_alloc_one(E_LIST, sym_env_list);
-	sym_env_list->right.sym = sym;
-
-	p = getenv(env);
-	if (p)
-		sym_add_default(sym, p);
-	else
-		menu_warn(current_entry, "environment variable %s undefined", env);
-}
diff --git a/support/kconfig/util.c b/support/kconfig/util.c
deleted file mode 100644
index 60eb566..0000000
--- a/support/kconfig/util.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2002-2005 Roman Zippel <zippel@linux-m68k.org>
- * Copyright (C) 2002-2005 Sam Ravnborg <sam@ravnborg.org>
- *
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <stdarg.h>
-#include <stdlib.h>
-#include <string.h>
-#include "lkc.h"
-
-/* file already present in list? If not add it */
-struct file *file_lookup(const char *name)
-{
-	struct file *file;
-	const char *file_name = sym_expand_string_value(name);
-
-	for (file = file_list; file; file = file->next) {
-		if (!strcmp(name, file->name)) {
-			free((void *)file_name);
-			return file;
-		}
-	}
-
-	file = xmalloc(sizeof(*file));
-	memset(file, 0, sizeof(*file));
-	file->name = file_name;
-	file->next = file_list;
-	file_list = file;
-	return file;
-}
-
-/* write a dependency file as used by kbuild to track dependencies */
-int file_write_dep(const char *name)
-{
-	char *str;
-	char buf[PATH_MAX+1], buf2[PATH_MAX+1], dir[PATH_MAX+1];
-	struct symbol *sym, *env_sym;
-	struct expr *e;
-	struct file *file;
-	FILE *out;
-
-	if (!name)
-		name = ".kconfig.d";
-
-	strcpy(dir, conf_get_configname());
-	str = strrchr(dir, '/');
-	if (str)
-		str[1] = 0;
-	else
-		dir[0] = 0;
-
-	sprintf(buf, "%s..config.tmp", dir);
-	out = fopen(buf, "w");
-	if (!out)
-		return 1;
-	fprintf(out, "deps_config := \\\n");
-	for (file = file_list; file; file = file->next) {
-		if (file->next)
-			fprintf(out, "\t%s \\\n", file->name);
-		else
-			fprintf(out, "\t%s\n", file->name);
-	}
-	fprintf(out, "\n%s: \\\n"
-		     "\t$(deps_config)\n\n", conf_get_autoconfig_name());
-
-	expr_list_for_each_sym(sym_env_list, e, sym) {
-		struct property *prop;
-		const char *value;
-
-		prop = sym_get_env_prop(sym);
-		env_sym = prop_get_symbol(prop);
-		if (!env_sym)
-			continue;
-		value = getenv(env_sym->name);
-		if (!value)
-			value = "";
-		fprintf(out, "ifneq \"$(%s)\" \"%s\"\n", env_sym->name, value);
-		fprintf(out, "%s: FORCE\n", conf_get_autoconfig_name());
-		fprintf(out, "endif\n");
-	}
-
-	fprintf(out, "\n$(deps_config): ;\n");
-	fclose(out);
-	sprintf(buf2, "%s%s", dir, name);
-	rename(buf, buf2);
-	return 0;
-}
-
-
-/* Allocate initial growable string */
-struct gstr str_new(void)
-{
-	struct gstr gs;
-	gs.s = xmalloc(sizeof(char) * 64);
-	gs.len = 64;
-	gs.max_width = 0;
-	strcpy(gs.s, "\0");
-	return gs;
-}
-
-/* Allocate and assign growable string */
-struct gstr str_assign(const char *s)
-{
-	struct gstr gs;
-	gs.s = strdup(s);
-	gs.len = strlen(s) + 1;
-	gs.max_width = 0;
-	return gs;
-}
-
-/* Free storage for growable string */
-void str_free(struct gstr *gs)
-{
-	if (gs->s)
-		free(gs->s);
-	gs->s = NULL;
-	gs->len = 0;
-}
-
-/* Append to growable string */
-void str_append(struct gstr *gs, const char *s)
-{
-	size_t l;
-	if (s) {
-		l = strlen(gs->s) + strlen(s) + 1;
-		if (l > gs->len) {
-			gs->s   = realloc(gs->s, l);
-			gs->len = l;
-		}
-		strcat(gs->s, s);
-	}
-}
-
-/* Append printf formatted string to growable string */
-void str_printf(struct gstr *gs, const char *fmt, ...)
-{
-	va_list ap;
-	char s[10000]; /* big enough... */
-	va_start(ap, fmt);
-	vsnprintf(s, sizeof(s), fmt, ap);
-	str_append(gs, s);
-	va_end(ap);
-}
-
-/* Retrieve value of growable string */
-const char *str_get(struct gstr *gs)
-{
-	return gs->s;
-}
-
-void *xmalloc(size_t size)
-{
-	void *p = malloc(size);
-	if (p)
-		return p;
-	fprintf(stderr, "Out of memory.\n");
-	exit(1);
-}
-
-void *xcalloc(size_t nmemb, size_t size)
-{
-	void *p = calloc(nmemb, size);
-	if (p)
-		return p;
-	fprintf(stderr, "Out of memory.\n");
-	exit(1);
-}
-
-
diff --git a/support/kconfig/zconf.gperf b/support/kconfig/zconf.gperf
deleted file mode 100644
index f14ab41..0000000
--- a/support/kconfig/zconf.gperf
+++ /dev/null
@@ -1,47 +0,0 @@
-%language=ANSI-C
-%define hash-function-name kconf_id_hash
-%define lookup-function-name kconf_id_lookup
-%define string-pool-name kconf_id_strings
-%compare-strncmp
-%enum
-%pic
-%struct-type
-
-struct kconf_id;
-
-static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
-
-%%
-mainmenu,	T_MAINMENU,	TF_COMMAND
-menu,		T_MENU,		TF_COMMAND
-endmenu,	T_ENDMENU,	TF_COMMAND
-source,		T_SOURCE,	TF_COMMAND
-choice,		T_CHOICE,	TF_COMMAND
-endchoice,	T_ENDCHOICE,	TF_COMMAND
-comment,	T_COMMENT,	TF_COMMAND
-config,		T_CONFIG,	TF_COMMAND
-menuconfig,	T_MENUCONFIG,	TF_COMMAND
-help,		T_HELP,		TF_COMMAND
-if,		T_IF,		TF_COMMAND|TF_PARAM
-endif,		T_ENDIF,	TF_COMMAND
-depends,	T_DEPENDS,	TF_COMMAND
-optional,	T_OPTIONAL,	TF_COMMAND
-default,	T_DEFAULT,	TF_COMMAND, S_UNKNOWN
-prompt,		T_PROMPT,	TF_COMMAND
-tristate,	T_TYPE,		TF_COMMAND, S_TRISTATE
-def_tristate,	T_DEFAULT,	TF_COMMAND, S_TRISTATE
-bool,		T_TYPE,		TF_COMMAND, S_BOOLEAN
-boolean,	T_TYPE,		TF_COMMAND, S_BOOLEAN
-def_bool,	T_DEFAULT,	TF_COMMAND, S_BOOLEAN
-int,		T_TYPE,		TF_COMMAND, S_INT
-hex,		T_TYPE,		TF_COMMAND, S_HEX
-string,		T_TYPE,		TF_COMMAND, S_STRING
-select,		T_SELECT,	TF_COMMAND
-range,		T_RANGE,	TF_COMMAND
-visible,	T_VISIBLE,	TF_COMMAND
-option,		T_OPTION,	TF_COMMAND
-on,		T_ON,		TF_PARAM
-modules,	T_OPT_MODULES,	TF_OPTION
-defconfig_list,	T_OPT_DEFCONFIG_LIST,TF_OPTION
-env,		T_OPT_ENV,	TF_OPTION
-%%
diff --git a/support/kconfig/zconf.hash.c_shipped b/support/kconfig/zconf.hash.c_shipped
deleted file mode 100644
index 40df000..0000000
--- a/support/kconfig/zconf.hash.c_shipped
+++ /dev/null
@@ -1,286 +0,0 @@
-/* ANSI-C code produced by gperf version 3.0.4 */
-/* Command-line: gperf -t --output-file scripts/kconfig/zconf.hash.c_shipped -a -C -E -g -k '1,3,$' -p -t scripts/kconfig/zconf.gperf  */
-
-#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
-      && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
-      && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
-      && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
-      && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
-      && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
-      && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
-      && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
-      && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
-      && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
-      && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
-      && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
-      && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
-      && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
-      && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
-      && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
-      && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
-      && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
-      && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
-      && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
-      && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
-      && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
-      && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
-/* The character set is not based on ISO-646.  */
-#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gnu-gperf@gnu.org>."
-#endif
-
-#line 10 "scripts/kconfig/zconf.gperf"
-struct kconf_id;
-
-static const struct kconf_id *kconf_id_lookup(register const char *str, register unsigned int len);
-/* maximum key range = 71, duplicates = 0 */
-
-#ifdef __GNUC__
-__inline
-#else
-#ifdef __cplusplus
-inline
-#endif
-#endif
-static unsigned int
-kconf_id_hash (register const char *str, register unsigned int len)
-{
-  static const unsigned char asso_values[] =
-    {
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 25, 25,
-       0,  0,  0,  5,  0,  0, 73, 73,  5,  0,
-      10,  5, 45, 73, 20, 20,  0, 15, 15, 73,
-      20, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
-      73, 73, 73, 73, 73, 73
-    };
-  register int hval = len;
-
-  switch (hval)
-    {
-      default:
-        hval += asso_values[(unsigned char)str[2]];
-      /*FALLTHROUGH*/
-      case 2:
-      case 1:
-        hval += asso_values[(unsigned char)str[0]];
-        break;
-    }
-  return hval + asso_values[(unsigned char)str[len - 1]];
-}
-
-struct kconf_id_strings_t
-  {
-    char kconf_id_strings_str2[sizeof("if")];
-    char kconf_id_strings_str3[sizeof("int")];
-    char kconf_id_strings_str5[sizeof("endif")];
-    char kconf_id_strings_str7[sizeof("default")];
-    char kconf_id_strings_str8[sizeof("tristate")];
-    char kconf_id_strings_str9[sizeof("endchoice")];
-    char kconf_id_strings_str12[sizeof("def_tristate")];
-    char kconf_id_strings_str13[sizeof("def_bool")];
-    char kconf_id_strings_str14[sizeof("defconfig_list")];
-    char kconf_id_strings_str17[sizeof("on")];
-    char kconf_id_strings_str18[sizeof("optional")];
-    char kconf_id_strings_str21[sizeof("option")];
-    char kconf_id_strings_str22[sizeof("endmenu")];
-    char kconf_id_strings_str23[sizeof("mainmenu")];
-    char kconf_id_strings_str25[sizeof("menuconfig")];
-    char kconf_id_strings_str27[sizeof("modules")];
-    char kconf_id_strings_str29[sizeof("menu")];
-    char kconf_id_strings_str31[sizeof("select")];
-    char kconf_id_strings_str32[sizeof("comment")];
-    char kconf_id_strings_str33[sizeof("env")];
-    char kconf_id_strings_str35[sizeof("range")];
-    char kconf_id_strings_str36[sizeof("choice")];
-    char kconf_id_strings_str39[sizeof("bool")];
-    char kconf_id_strings_str41[sizeof("source")];
-    char kconf_id_strings_str42[sizeof("visible")];
-    char kconf_id_strings_str43[sizeof("hex")];
-    char kconf_id_strings_str46[sizeof("config")];
-    char kconf_id_strings_str47[sizeof("boolean")];
-    char kconf_id_strings_str51[sizeof("string")];
-    char kconf_id_strings_str54[sizeof("help")];
-    char kconf_id_strings_str56[sizeof("prompt")];
-    char kconf_id_strings_str72[sizeof("depends")];
-  };
-static const struct kconf_id_strings_t kconf_id_strings_contents =
-  {
-    "if",
-    "int",
-    "endif",
-    "default",
-    "tristate",
-    "endchoice",
-    "def_tristate",
-    "def_bool",
-    "defconfig_list",
-    "on",
-    "optional",
-    "option",
-    "endmenu",
-    "mainmenu",
-    "menuconfig",
-    "modules",
-    "menu",
-    "select",
-    "comment",
-    "env",
-    "range",
-    "choice",
-    "bool",
-    "source",
-    "visible",
-    "hex",
-    "config",
-    "boolean",
-    "string",
-    "help",
-    "prompt",
-    "depends"
-  };
-#define kconf_id_strings ((const char *) &kconf_id_strings_contents)
-#ifdef __GNUC__
-__inline
-#if defined __GNUC_STDC_INLINE__ || defined __GNUC_GNU_INLINE__
-__attribute__ ((__gnu_inline__))
-#endif
-#endif
-const struct kconf_id *
-kconf_id_lookup (register const char *str, register unsigned int len)
-{
-  enum
-    {
-      TOTAL_KEYWORDS = 32,
-      MIN_WORD_LENGTH = 2,
-      MAX_WORD_LENGTH = 14,
-      MIN_HASH_VALUE = 2,
-      MAX_HASH_VALUE = 72
-    };
-
-  static const struct kconf_id wordlist[] =
-    {
-      {-1}, {-1},
-#line 25 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str2,		T_IF,		TF_COMMAND|TF_PARAM},
-#line 36 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str3,		T_TYPE,		TF_COMMAND, S_INT},
-      {-1},
-#line 26 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str5,		T_ENDIF,	TF_COMMAND},
-      {-1},
-#line 29 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str7,	T_DEFAULT,	TF_COMMAND, S_UNKNOWN},
-#line 31 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str8,	T_TYPE,		TF_COMMAND, S_TRISTATE},
-#line 20 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str9,	T_ENDCHOICE,	TF_COMMAND},
-      {-1}, {-1},
-#line 32 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str12,	T_DEFAULT,	TF_COMMAND, S_TRISTATE},
-#line 35 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str13,	T_DEFAULT,	TF_COMMAND, S_BOOLEAN},
-#line 45 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str14,	T_OPT_DEFCONFIG_LIST,TF_OPTION},
-      {-1}, {-1},
-#line 43 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str17,		T_ON,		TF_PARAM},
-#line 28 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str18,	T_OPTIONAL,	TF_COMMAND},
-      {-1}, {-1},
-#line 42 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str21,		T_OPTION,	TF_COMMAND},
-#line 17 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str22,	T_ENDMENU,	TF_COMMAND},
-#line 15 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str23,	T_MAINMENU,	TF_COMMAND},
-      {-1},
-#line 23 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str25,	T_MENUCONFIG,	TF_COMMAND},
-      {-1},
-#line 44 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str27,	T_OPT_MODULES,	TF_OPTION},
-      {-1},
-#line 16 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str29,		T_MENU,		TF_COMMAND},
-      {-1},
-#line 39 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str31,		T_SELECT,	TF_COMMAND},
-#line 21 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str32,	T_COMMENT,	TF_COMMAND},
-#line 46 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str33,		T_OPT_ENV,	TF_OPTION},
-      {-1},
-#line 40 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str35,		T_RANGE,	TF_COMMAND},
-#line 19 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str36,		T_CHOICE,	TF_COMMAND},
-      {-1}, {-1},
-#line 33 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str39,		T_TYPE,		TF_COMMAND, S_BOOLEAN},
-      {-1},
-#line 18 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str41,		T_SOURCE,	TF_COMMAND},
-#line 41 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str42,	T_VISIBLE,	TF_COMMAND},
-#line 37 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str43,		T_TYPE,		TF_COMMAND, S_HEX},
-      {-1}, {-1},
-#line 22 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str46,		T_CONFIG,	TF_COMMAND},
-#line 34 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str47,	T_TYPE,		TF_COMMAND, S_BOOLEAN},
-      {-1}, {-1}, {-1},
-#line 38 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str51,		T_TYPE,		TF_COMMAND, S_STRING},
-      {-1}, {-1},
-#line 24 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str54,		T_HELP,		TF_COMMAND},
-      {-1},
-#line 30 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str56,		T_PROMPT,	TF_COMMAND},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-      {-1}, {-1}, {-1}, {-1}, {-1}, {-1},
-#line 27 "scripts/kconfig/zconf.gperf"
-      {(int)(long)&((struct kconf_id_strings_t *)0)->kconf_id_strings_str72,	T_DEPENDS,	TF_COMMAND}
-    };
-
-  if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
-    {
-      register int key = kconf_id_hash (str, len);
-
-      if (key <= MAX_HASH_VALUE && key >= 0)
-        {
-          register int o = wordlist[key].name;
-          if (o >= 0)
-            {
-              register const char *s = o + kconf_id_strings;
-
-              if (*str == *s && !strncmp (str + 1, s + 1, len - 1) && s[len] == '\0')
-                return &wordlist[key];
-            }
-        }
-    }
-  return 0;
-}
-#line 47 "scripts/kconfig/zconf.gperf"
-
diff --git a/support/kconfig/zconf.l b/support/kconfig/zconf.l
deleted file mode 100644
index 1a9f53e..0000000
--- a/support/kconfig/zconf.l
+++ /dev/null
@@ -1,363 +0,0 @@
-%option nostdinit noyywrap never-interactive full ecs
-%option 8bit nodefault perf-report perf-report
-%option noinput
-%x COMMAND HELP STRING PARAM
-%{
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "lkc.h"
-
-#define START_STRSIZE	16
-
-static struct {
-	struct file *file;
-	int lineno;
-} current_pos;
-
-static char *text;
-static int text_size, text_asize;
-
-struct buffer {
-        struct buffer *parent;
-        YY_BUFFER_STATE state;
-};
-
-struct buffer *current_buf;
-
-static int last_ts, first_ts;
-
-static void zconf_endhelp(void);
-static void zconf_endfile(void);
-
-static void new_string(void)
-{
-	text = xmalloc(START_STRSIZE);
-	text_asize = START_STRSIZE;
-	text_size = 0;
-	*text = 0;
-}
-
-static void append_string(const char *str, int size)
-{
-	int new_size = text_size + size + 1;
-	if (new_size > text_asize) {
-		new_size += START_STRSIZE - 1;
-		new_size &= -START_STRSIZE;
-		text = realloc(text, new_size);
-		text_asize = new_size;
-	}
-	memcpy(text + text_size, str, size);
-	text_size += size;
-	text[text_size] = 0;
-}
-
-static void alloc_string(const char *str, int size)
-{
-	text = xmalloc(size + 1);
-	memcpy(text, str, size);
-	text[size] = 0;
-}
-%}
-
-n	[A-Za-z0-9_]
-
-%%
-	int str = 0;
-	int ts, i;
-
-[ \t]*#.*\n	|
-[ \t]*\n	{
-	current_file->lineno++;
-	return T_EOL;
-}
-[ \t]*#.*
-
-
-[ \t]+	{
-	BEGIN(COMMAND);
-}
-
-.	{
-	unput(yytext[0]);
-	BEGIN(COMMAND);
-}
-
-
-<COMMAND>{
-	{n}+	{
-		const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
-		BEGIN(PARAM);
-		current_pos.file = current_file;
-		current_pos.lineno = current_file->lineno;
-		if (id && id->flags & TF_COMMAND) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(yytext, yyleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	.
-	\n	{
-		BEGIN(INITIAL);
-		current_file->lineno++;
-		return T_EOL;
-	}
-}
-
-<PARAM>{
-	"&&"	return T_AND;
-	"||"	return T_OR;
-	"("	return T_OPEN_PAREN;
-	")"	return T_CLOSE_PAREN;
-	"!"	return T_NOT;
-	"="	return T_EQUAL;
-	"!="	return T_UNEQUAL;
-	\"|\'	{
-		str = yytext[0];
-		new_string();
-		BEGIN(STRING);
-	}
-	\n	BEGIN(INITIAL); current_file->lineno++; return T_EOL;
-	---	/* ignore */
-	({n}|[-/.])+	{
-		const struct kconf_id *id = kconf_id_lookup(yytext, yyleng);
-		if (id && id->flags & TF_PARAM) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(yytext, yyleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	#.*	/* comment */
-	\\\n	current_file->lineno++;
-	.
-	<<EOF>> {
-		BEGIN(INITIAL);
-	}
-}
-
-<STRING>{
-	[^'"\\\n]+/\n	{
-		append_string(yytext, yyleng);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	[^'"\\\n]+	{
-		append_string(yytext, yyleng);
-	}
-	\\.?/\n	{
-		append_string(yytext + 1, yyleng - 1);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	\\.?	{
-		append_string(yytext + 1, yyleng - 1);
-	}
-	\'|\"	{
-		if (str == yytext[0]) {
-			BEGIN(PARAM);
-			zconflval.string = text;
-			return T_WORD_QUOTE;
-		} else
-			append_string(yytext, 1);
-	}
-	\n	{
-		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
-		current_file->lineno++;
-		BEGIN(INITIAL);
-		return T_EOL;
-	}
-	<<EOF>>	{
-		BEGIN(INITIAL);
-	}
-}
-
-<HELP>{
-	[ \t]+	{
-		ts = 0;
-		for (i = 0; i < yyleng; i++) {
-			if (yytext[i] == '\t')
-				ts = (ts & ~7) + 8;
-			else
-				ts++;
-		}
-		last_ts = ts;
-		if (first_ts) {
-			if (ts < first_ts) {
-				zconf_endhelp();
-				return T_HELPTEXT;
-			}
-			ts -= first_ts;
-			while (ts > 8) {
-				append_string("        ", 8);
-				ts -= 8;
-			}
-			append_string("        ", ts);
-		}
-	}
-	[ \t]*\n/[^ \t\n] {
-		current_file->lineno++;
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-	[ \t]*\n	{
-		current_file->lineno++;
-		append_string("\n", 1);
-	}
-	[^ \t\n].* {
-		while (yyleng) {
-			if ((yytext[yyleng-1] != ' ') && (yytext[yyleng-1] != '\t'))
-				break;
-			yyleng--;
-		}
-		append_string(yytext, yyleng);
-		if (!first_ts)
-			first_ts = last_ts;
-	}
-	<<EOF>>	{
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-}
-
-<<EOF>>	{
-	if (current_file) {
-		zconf_endfile();
-		return T_EOL;
-	}
-	fclose(yyin);
-	yyterminate();
-}
-
-%%
-void zconf_starthelp(void)
-{
-	new_string();
-	last_ts = first_ts = 0;
-	BEGIN(HELP);
-}
-
-static void zconf_endhelp(void)
-{
-	zconflval.string = text;
-	BEGIN(INITIAL);
-}
-
-
-/*
- * Try to open specified file with following names:
- * ./name
- * $(srctree)/name
- * The latter is used when srctree is separate from objtree
- * when compiling the kernel.
- * Return NULL if file is not found.
- */
-FILE *zconf_fopen(const char *name)
-{
-	char *env, fullname[PATH_MAX+1];
-	FILE *f;
-
-	f = fopen(name, "r");
-	if (!f && name != NULL && name[0] != '/') {
-		env = getenv(SRCTREE);
-		if (env) {
-			sprintf(fullname, "%s/%s", env, name);
-			f = fopen(fullname, "r");
-		}
-	}
-	return f;
-}
-
-void zconf_initscan(const char *name)
-{
-	yyin = zconf_fopen(name);
-	if (!yyin) {
-		printf("can't find file %s\n", name);
-		exit(1);
-	}
-
-	current_buf = xmalloc(sizeof(*current_buf));
-	memset(current_buf, 0, sizeof(*current_buf));
-
-	current_file = file_lookup(name);
-	current_file->lineno = 1;
-}
-
-void zconf_nextfile(const char *name)
-{
-	struct file *iter;
-	struct file *file = file_lookup(name);
-	struct buffer *buf = xmalloc(sizeof(*buf));
-	memset(buf, 0, sizeof(*buf));
-
-	current_buf->state = YY_CURRENT_BUFFER;
-	yyin = zconf_fopen(file->name);
-	if (!yyin) {
-		printf("%s:%d: can't open file \"%s\"\n",
-		    zconf_curname(), zconf_lineno(), file->name);
-		exit(1);
-	}
-	yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
-	buf->parent = current_buf;
-	current_buf = buf;
-
-	for (iter = current_file->parent; iter; iter = iter->parent ) {
-		if (!strcmp(current_file->name,iter->name) ) {
-			printf("%s:%d: recursive inclusion detected. "
-			       "Inclusion path:\n  current file : '%s'\n",
-			       zconf_curname(), zconf_lineno(),
-			       zconf_curname());
-			iter = current_file->parent;
-			while (iter && \
-			       strcmp(iter->name,current_file->name)) {
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno-1);
-				iter = iter->parent;
-			}
-			if (iter)
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno+1);
-			exit(1);
-		}
-	}
-	file->lineno = 1;
-	file->parent = current_file;
-	current_file = file;
-}
-
-static void zconf_endfile(void)
-{
-	struct buffer *parent;
-
-	current_file = current_file->parent;
-
-	parent = current_buf->parent;
-	if (parent) {
-		fclose(yyin);
-		yy_delete_buffer(YY_CURRENT_BUFFER);
-		yy_switch_to_buffer(parent->state);
-	}
-	free(current_buf);
-	current_buf = parent;
-}
-
-int zconf_lineno(void)
-{
-	return current_pos.lineno;
-}
-
-const char *zconf_curname(void)
-{
-	return current_pos.file ? current_pos.file->name : "<none>";
-}
diff --git a/support/kconfig/zconf.lex.c_shipped b/support/kconfig/zconf.lex.c_shipped
deleted file mode 100644
index a0521aa..0000000
--- a/support/kconfig/zconf.lex.c_shipped
+++ /dev/null
@@ -1,2420 +0,0 @@
-
-#line 3 "scripts/kconfig/zconf.lex.c_shipped"
-
-#define  YY_INT_ALIGNED short int
-
-/* A lexical scanner generated by flex */
-
-#define yy_create_buffer zconf_create_buffer
-#define yy_delete_buffer zconf_delete_buffer
-#define yy_flex_debug zconf_flex_debug
-#define yy_init_buffer zconf_init_buffer
-#define yy_flush_buffer zconf_flush_buffer
-#define yy_load_buffer_state zconf_load_buffer_state
-#define yy_switch_to_buffer zconf_switch_to_buffer
-#define yyin zconfin
-#define yyleng zconfleng
-#define yylex zconflex
-#define yylineno zconflineno
-#define yyout zconfout
-#define yyrestart zconfrestart
-#define yytext zconftext
-#define yywrap zconfwrap
-#define yyalloc zconfalloc
-#define yyrealloc zconfrealloc
-#define yyfree zconffree
-
-#define FLEX_SCANNER
-#define YY_FLEX_MAJOR_VERSION 2
-#define YY_FLEX_MINOR_VERSION 5
-#define YY_FLEX_SUBMINOR_VERSION 35
-#if YY_FLEX_SUBMINOR_VERSION > 0
-#define FLEX_BETA
-#endif
-
-/* First, we deal with  platform-specific or compiler-specific issues. */
-
-/* begin standard C headers. */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <stdlib.h>
-
-/* end standard C headers. */
-
-/* flex integer type definitions */
-
-#ifndef FLEXINT_H
-#define FLEXINT_H
-
-/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
-
-#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-
-/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
- * if you want the limit (max/min) macros for int types. 
- */
-#ifndef __STDC_LIMIT_MACROS
-#define __STDC_LIMIT_MACROS 1
-#endif
-
-#include <inttypes.h>
-typedef int8_t flex_int8_t;
-typedef uint8_t flex_uint8_t;
-typedef int16_t flex_int16_t;
-typedef uint16_t flex_uint16_t;
-typedef int32_t flex_int32_t;
-typedef uint32_t flex_uint32_t;
-#else
-typedef signed char flex_int8_t;
-typedef short int flex_int16_t;
-typedef int flex_int32_t;
-typedef unsigned char flex_uint8_t; 
-typedef unsigned short int flex_uint16_t;
-typedef unsigned int flex_uint32_t;
-#endif /* ! C99 */
-
-/* Limits of integral types. */
-#ifndef INT8_MIN
-#define INT8_MIN               (-128)
-#endif
-#ifndef INT16_MIN
-#define INT16_MIN              (-32767-1)
-#endif
-#ifndef INT32_MIN
-#define INT32_MIN              (-2147483647-1)
-#endif
-#ifndef INT8_MAX
-#define INT8_MAX               (127)
-#endif
-#ifndef INT16_MAX
-#define INT16_MAX              (32767)
-#endif
-#ifndef INT32_MAX
-#define INT32_MAX              (2147483647)
-#endif
-#ifndef UINT8_MAX
-#define UINT8_MAX              (255U)
-#endif
-#ifndef UINT16_MAX
-#define UINT16_MAX             (65535U)
-#endif
-#ifndef UINT32_MAX
-#define UINT32_MAX             (4294967295U)
-#endif
-
-#endif /* ! FLEXINT_H */
-
-#ifdef __cplusplus
-
-/* The "const" storage-class-modifier is valid. */
-#define YY_USE_CONST
-
-#else	/* ! __cplusplus */
-
-/* C99 requires __STDC__ to be defined as 1. */
-#if defined (__STDC__)
-
-#define YY_USE_CONST
-
-#endif	/* defined (__STDC__) */
-#endif	/* ! __cplusplus */
-
-#ifdef YY_USE_CONST
-#define yyconst const
-#else
-#define yyconst
-#endif
-
-/* Returned upon end-of-file. */
-#define YY_NULL 0
-
-/* Promotes a possibly negative, possibly signed char to an unsigned
- * integer for use as an array index.  If the signed char is negative,
- * we want to instead treat it as an 8-bit unsigned char, hence the
- * double cast.
- */
-#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
-
-/* Enter a start condition.  This macro really ought to take a parameter,
- * but we do it the disgusting crufty way forced on us by the ()-less
- * definition of BEGIN.
- */
-#define BEGIN (yy_start) = 1 + 2 *
-
-/* Translate the current start state into a value that can be later handed
- * to BEGIN to return to the state.  The YYSTATE alias is for lex
- * compatibility.
- */
-#define YY_START (((yy_start) - 1) / 2)
-#define YYSTATE YY_START
-
-/* Action number for EOF rule of a given start state. */
-#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
-
-/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE zconfrestart(zconfin  )
-
-#define YY_END_OF_BUFFER_CHAR 0
-
-/* Size of default input buffer. */
-#ifndef YY_BUF_SIZE
-#define YY_BUF_SIZE 16384
-#endif
-
-/* The state buf must be large enough to hold one state per character in the main buffer.
- */
-#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
-
-#ifndef YY_TYPEDEF_YY_BUFFER_STATE
-#define YY_TYPEDEF_YY_BUFFER_STATE
-typedef struct yy_buffer_state *YY_BUFFER_STATE;
-#endif
-
-extern int zconfleng;
-
-extern FILE *zconfin, *zconfout;
-
-#define EOB_ACT_CONTINUE_SCAN 0
-#define EOB_ACT_END_OF_FILE 1
-#define EOB_ACT_LAST_MATCH 2
-
-    #define YY_LESS_LINENO(n)
-    
-/* Return all but the first "n" matched characters back to the input stream. */
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up zconftext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		*yy_cp = (yy_hold_char); \
-		YY_RESTORE_YY_MORE_OFFSET \
-		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
-		YY_DO_BEFORE_ACTION; /* set up zconftext again */ \
-		} \
-	while ( 0 )
-
-#define unput(c) yyunput( c, (yytext_ptr)  )
-
-#ifndef YY_TYPEDEF_YY_SIZE_T
-#define YY_TYPEDEF_YY_SIZE_T
-typedef size_t yy_size_t;
-#endif
-
-#ifndef YY_STRUCT_YY_BUFFER_STATE
-#define YY_STRUCT_YY_BUFFER_STATE
-struct yy_buffer_state
-	{
-	FILE *yy_input_file;
-
-	char *yy_ch_buf;		/* input buffer */
-	char *yy_buf_pos;		/* current position in input buffer */
-
-	/* Size of input buffer in bytes, not including room for EOB
-	 * characters.
-	 */
-	yy_size_t yy_buf_size;
-
-	/* Number of characters read into yy_ch_buf, not including EOB
-	 * characters.
-	 */
-	int yy_n_chars;
-
-	/* Whether we "own" the buffer - i.e., we know we created it,
-	 * and can realloc() it to grow it, and should free() it to
-	 * delete it.
-	 */
-	int yy_is_our_buffer;
-
-	/* Whether this is an "interactive" input source; if so, and
-	 * if we're using stdio for input, then we want to use getc()
-	 * instead of fread(), to make sure we stop fetching input after
-	 * each newline.
-	 */
-	int yy_is_interactive;
-
-	/* Whether we're considered to be at the beginning of a line.
-	 * If so, '^' rules will be active on the next match, otherwise
-	 * not.
-	 */
-	int yy_at_bol;
-
-    int yy_bs_lineno; /**< The line count. */
-    int yy_bs_column; /**< The column count. */
-    
-	/* Whether to try to fill the input buffer when we reach the
-	 * end of it.
-	 */
-	int yy_fill_buffer;
-
-	int yy_buffer_status;
-
-#define YY_BUFFER_NEW 0
-#define YY_BUFFER_NORMAL 1
-	/* When an EOF's been seen but there's still some text to process
-	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
-	 * shouldn't try reading from the input source any more.  We might
-	 * still have a bunch of tokens to match, though, because of
-	 * possible backing-up.
-	 *
-	 * When we actually see the EOF, we change the status to "new"
-	 * (via zconfrestart()), so that the user can continue scanning by
-	 * just pointing zconfin at a new input file.
-	 */
-#define YY_BUFFER_EOF_PENDING 2
-
-	};
-#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-
-/* Stack of input buffers. */
-static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
-static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
-static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
-
-/* We provide macros for accessing buffer states in case in the
- * future we want to put the buffer states in a more general
- * "scanner state".
- *
- * Returns the top of the stack, or NULL.
- */
-#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
-                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
-                          : NULL)
-
-/* Same as previous macro, but useful when we know that the buffer stack is not
- * NULL or when we need an lvalue. For internal use only.
- */
-#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-
-/* yy_hold_char holds the character lost when zconftext is formed. */
-static char yy_hold_char;
-static int yy_n_chars;		/* number of characters read into yy_ch_buf */
-int zconfleng;
-
-/* Points to current character in buffer. */
-static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 0;		/* whether we need to initialize */
-static int yy_start = 0;	/* start state number */
-
-/* Flag which is used to allow zconfwrap()'s to do buffer switches
- * instead of setting up a fresh zconfin.  A bit of a hack ...
- */
-static int yy_did_buffer_switch_on_eof;
-
-void zconfrestart (FILE *input_file  );
-void zconf_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
-YY_BUFFER_STATE zconf_create_buffer (FILE *file,int size  );
-void zconf_delete_buffer (YY_BUFFER_STATE b  );
-void zconf_flush_buffer (YY_BUFFER_STATE b  );
-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer  );
-void zconfpop_buffer_state (void );
-
-static void zconfensure_buffer_stack (void );
-static void zconf_load_buffer_state (void );
-static void zconf_init_buffer (YY_BUFFER_STATE b,FILE *file  );
-
-#define YY_FLUSH_BUFFER zconf_flush_buffer(YY_CURRENT_BUFFER )
-
-YY_BUFFER_STATE zconf_scan_buffer (char *base,yy_size_t size  );
-YY_BUFFER_STATE zconf_scan_string (yyconst char *yy_str  );
-YY_BUFFER_STATE zconf_scan_bytes (yyconst char *bytes,int len  );
-
-void *zconfalloc (yy_size_t  );
-void *zconfrealloc (void *,yy_size_t  );
-void zconffree (void *  );
-
-#define yy_new_buffer zconf_create_buffer
-
-#define yy_set_interactive(is_interactive) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){ \
-        zconfensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
-	}
-
-#define yy_set_bol(at_bol) \
-	{ \
-	if ( ! YY_CURRENT_BUFFER ){\
-        zconfensure_buffer_stack (); \
-		YY_CURRENT_BUFFER_LVALUE =    \
-            zconf_create_buffer(zconfin,YY_BUF_SIZE ); \
-	} \
-	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
-	}
-
-#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
-
-/* Begin user sect3 */
-
-#define zconfwrap(n) 1
-#define YY_SKIP_YYWRAP
-
-typedef unsigned char YY_CHAR;
-
-FILE *zconfin = (FILE *) 0, *zconfout = (FILE *) 0;
-
-typedef int yy_state_type;
-
-extern int zconflineno;
-
-int zconflineno = 1;
-
-extern char *zconftext;
-#define yytext_ptr zconftext
-static yyconst flex_int16_t yy_nxt[][17] =
-    {
-    {
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0
-    },
-
-    {
-       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12
-    },
-
-    {
-       11,   12,   13,   14,   12,   12,   15,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,   12
-    },
-
-    {
-       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   18,   16,   16,   16
-    },
-
-    {
-       11,   16,   16,   17,   16,   16,   16,   16,   16,   16,
-       16,   16,   16,   18,   16,   16,   16
-
-    },
-
-    {
-       11,   19,   20,   21,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   19,   19,   19
-    },
-
-    {
-       11,   19,   20,   21,   19,   19,   19,   19,   19,   19,
-       19,   19,   19,   19,   19,   19,   19
-    },
-
-    {
-       11,   22,   22,   23,   22,   24,   22,   22,   24,   22,
-       22,   22,   22,   22,   22,   25,   22
-    },
-
-    {
-       11,   22,   22,   23,   22,   24,   22,   22,   24,   22,
-       22,   22,   22,   22,   22,   25,   22
-    },
-
-    {
-       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
-       33,   34,   35,   35,   36,   37,   38
-
-    },
-
-    {
-       11,   26,   26,   27,   28,   29,   30,   31,   29,   32,
-       33,   34,   35,   35,   36,   37,   38
-    },
-
-    {
-      -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,  -11,
-      -11,  -11,  -11,  -11,  -11,  -11,  -11
-    },
-
-    {
-       11,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,  -12,
-      -12,  -12,  -12,  -12,  -12,  -12,  -12
-    },
-
-    {
-       11,  -13,   39,   40,  -13,  -13,   41,  -13,  -13,  -13,
-      -13,  -13,  -13,  -13,  -13,  -13,  -13
-    },
-
-    {
-       11,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,  -14,
-      -14,  -14,  -14,  -14,  -14,  -14,  -14
-
-    },
-
-    {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
-    },
-
-    {
-       11,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,  -16,
-      -16,  -16,  -16,  -16,  -16,  -16,  -16
-    },
-
-    {
-       11,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,  -17,
-      -17,  -17,  -17,  -17,  -17,  -17,  -17
-    },
-
-    {
-       11,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,  -18,
-      -18,  -18,  -18,   44,  -18,  -18,  -18
-    },
-
-    {
-       11,   45,   45,  -19,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45
-
-    },
-
-    {
-       11,  -20,   46,   47,  -20,  -20,  -20,  -20,  -20,  -20,
-      -20,  -20,  -20,  -20,  -20,  -20,  -20
-    },
-
-    {
-       11,   48,  -21,  -21,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   48
-    },
-
-    {
-       11,   49,   49,   50,   49,  -22,   49,   49,  -22,   49,
-       49,   49,   49,   49,   49,  -22,   49
-    },
-
-    {
-       11,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,  -23,
-      -23,  -23,  -23,  -23,  -23,  -23,  -23
-    },
-
-    {
-       11,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,  -24,
-      -24,  -24,  -24,  -24,  -24,  -24,  -24
-
-    },
-
-    {
-       11,   51,   51,   52,   51,   51,   51,   51,   51,   51,
-       51,   51,   51,   51,   51,   51,   51
-    },
-
-    {
-       11,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,  -26,
-      -26,  -26,  -26,  -26,  -26,  -26,  -26
-    },
-
-    {
-       11,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,  -27,
-      -27,  -27,  -27,  -27,  -27,  -27,  -27
-    },
-
-    {
-       11,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,  -28,
-      -28,  -28,  -28,  -28,   53,  -28,  -28
-    },
-
-    {
-       11,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  -29,
-      -29,  -29,  -29,  -29,  -29,  -29,  -29
-
-    },
-
-    {
-       11,   54,   54,  -30,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54
-    },
-
-    {
-       11,  -31,  -31,  -31,  -31,  -31,  -31,   55,  -31,  -31,
-      -31,  -31,  -31,  -31,  -31,  -31,  -31
-    },
-
-    {
-       11,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,  -32,
-      -32,  -32,  -32,  -32,  -32,  -32,  -32
-    },
-
-    {
-       11,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,  -33,
-      -33,  -33,  -33,  -33,  -33,  -33,  -33
-    },
-
-    {
-       11,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,  -34,
-      -34,   56,   57,   57,  -34,  -34,  -34
-
-    },
-
-    {
-       11,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,  -35,
-      -35,   57,   57,   57,  -35,  -35,  -35
-    },
-
-    {
-       11,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,  -36,
-      -36,  -36,  -36,  -36,  -36,  -36,  -36
-    },
-
-    {
-       11,  -37,  -37,   58,  -37,  -37,  -37,  -37,  -37,  -37,
-      -37,  -37,  -37,  -37,  -37,  -37,  -37
-    },
-
-    {
-       11,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,  -38,
-      -38,  -38,  -38,  -38,  -38,  -38,   59
-    },
-
-    {
-       11,  -39,   39,   40,  -39,  -39,   41,  -39,  -39,  -39,
-      -39,  -39,  -39,  -39,  -39,  -39,  -39
-
-    },
-
-    {
-       11,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,  -40,
-      -40,  -40,  -40,  -40,  -40,  -40,  -40
-    },
-
-    {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
-    },
-
-    {
-       11,   42,   42,   43,   42,   42,   42,   42,   42,   42,
-       42,   42,   42,   42,   42,   42,   42
-    },
-
-    {
-       11,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,  -43,
-      -43,  -43,  -43,  -43,  -43,  -43,  -43
-    },
-
-    {
-       11,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,  -44,
-      -44,  -44,  -44,   44,  -44,  -44,  -44
-
-    },
-
-    {
-       11,   45,   45,  -45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45
-    },
-
-    {
-       11,  -46,   46,   47,  -46,  -46,  -46,  -46,  -46,  -46,
-      -46,  -46,  -46,  -46,  -46,  -46,  -46
-    },
-
-    {
-       11,   48,  -47,  -47,   48,   48,   48,   48,   48,   48,
-       48,   48,   48,   48,   48,   48,   48
-    },
-
-    {
-       11,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,  -48,
-      -48,  -48,  -48,  -48,  -48,  -48,  -48
-    },
-
-    {
-       11,   49,   49,   50,   49,  -49,   49,   49,  -49,   49,
-       49,   49,   49,   49,   49,  -49,   49
-
-    },
-
-    {
-       11,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,  -50,
-      -50,  -50,  -50,  -50,  -50,  -50,  -50
-    },
-
-    {
-       11,  -51,  -51,   52,  -51,  -51,  -51,  -51,  -51,  -51,
-      -51,  -51,  -51,  -51,  -51,  -51,  -51
-    },
-
-    {
-       11,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,  -52,
-      -52,  -52,  -52,  -52,  -52,  -52,  -52
-    },
-
-    {
-       11,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,  -53,
-      -53,  -53,  -53,  -53,  -53,  -53,  -53
-    },
-
-    {
-       11,   54,   54,  -54,   54,   54,   54,   54,   54,   54,
-       54,   54,   54,   54,   54,   54,   54
-
-    },
-
-    {
-       11,  -55,  -55,  -55,  -55,  -55,  -55,  -55,  -55,  -55,
-      -55,  -55,  -55,  -55,  -55,  -55,  -55
-    },
-
-    {
-       11,  -56,  -56,  -56,  -56,  -56,  -56,  -56,  -56,  -56,
-      -56,   60,   57,   57,  -56,  -56,  -56
-    },
-
-    {
-       11,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,  -57,
-      -57,   57,   57,   57,  -57,  -57,  -57
-    },
-
-    {
-       11,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,  -58,
-      -58,  -58,  -58,  -58,  -58,  -58,  -58
-    },
-
-    {
-       11,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,  -59,
-      -59,  -59,  -59,  -59,  -59,  -59,  -59
-
-    },
-
-    {
-       11,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,  -60,
-      -60,   57,   57,   57,  -60,  -60,  -60
-    },
-
-    } ;
-
-static yy_state_type yy_get_previous_state (void );
-static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
-static int yy_get_next_buffer (void );
-static void yy_fatal_error (yyconst char msg[]  );
-
-/* Done after the current pattern has been matched and before the
- * corresponding action - sets up zconftext.
- */
-#define YY_DO_BEFORE_ACTION \
-	(yytext_ptr) = yy_bp; \
-	zconfleng = (size_t) (yy_cp - yy_bp); \
-	(yy_hold_char) = *yy_cp; \
-	*yy_cp = '\0'; \
-	(yy_c_buf_p) = yy_cp;
-
-#define YY_NUM_RULES 33
-#define YY_END_OF_BUFFER 34
-/* This struct is not used in this scanner,
-   but its presence is necessary. */
-struct yy_trans_info
-	{
-	flex_int32_t yy_verify;
-	flex_int32_t yy_nxt;
-	};
-static yyconst flex_int16_t yy_accept[61] =
-    {   0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       34,    5,    4,    2,    3,    7,    8,    6,   32,   29,
-       31,   24,   28,   27,   26,   22,   17,   13,   16,   20,
-       22,   11,   12,   19,   19,   14,   22,   22,    4,    2,
-        3,    3,    1,    6,   32,   29,   31,   30,   24,   23,
-       26,   25,   15,   20,    9,   19,   19,   21,   10,   18
-    } ;
-
-static yyconst flex_int32_t yy_ec[256] =
-    {   0,
-        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    2,    4,    5,    6,    1,    1,    7,    8,    9,
-       10,    1,    1,    1,   11,   12,   12,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,    1,    1,    1,
-       14,    1,    1,    1,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-        1,   15,    1,    1,   13,    1,   13,   13,   13,   13,
-
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
-       13,   13,    1,   16,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1
-    } ;
-
-extern int zconf_flex_debug;
-int zconf_flex_debug = 0;
-
-/* The intent behind this definition is that it'll catch
- * any uses of REJECT which flex missed.
- */
-#define REJECT reject_used_but_not_detected
-#define yymore() yymore_used_but_not_detected
-#define YY_MORE_ADJ 0
-#define YY_RESTORE_YY_MORE_OFFSET
-char *zconftext;
-#define YY_NO_INPUT 1
-
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <limits.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "lkc.h"
-
-#define START_STRSIZE	16
-
-static struct {
-	struct file *file;
-	int lineno;
-} current_pos;
-
-static char *text;
-static int text_size, text_asize;
-
-struct buffer {
-        struct buffer *parent;
-        YY_BUFFER_STATE state;
-};
-
-struct buffer *current_buf;
-
-static int last_ts, first_ts;
-
-static void zconf_endhelp(void);
-static void zconf_endfile(void);
-
-static void new_string(void)
-{
-	text = xmalloc(START_STRSIZE);
-	text_asize = START_STRSIZE;
-	text_size = 0;
-	*text = 0;
-}
-
-static void append_string(const char *str, int size)
-{
-	int new_size = text_size + size + 1;
-	if (new_size > text_asize) {
-		new_size += START_STRSIZE - 1;
-		new_size &= -START_STRSIZE;
-		text = realloc(text, new_size);
-		text_asize = new_size;
-	}
-	memcpy(text + text_size, str, size);
-	text_size += size;
-	text[text_size] = 0;
-}
-
-static void alloc_string(const char *str, int size)
-{
-	text = xmalloc(size + 1);
-	memcpy(text, str, size);
-	text[size] = 0;
-}
-
-#define INITIAL 0
-#define COMMAND 1
-#define HELP 2
-#define STRING 3
-#define PARAM 4
-
-#ifndef YY_NO_UNISTD_H
-/* Special case for "unistd.h", since it is non-ANSI. We include it way
- * down here because we want the user's section 1 to have been scanned first.
- * The user has a chance to override it with an option.
- */
-#include <unistd.h>
-#endif
-
-#ifndef YY_EXTRA_TYPE
-#define YY_EXTRA_TYPE void *
-#endif
-
-static int yy_init_globals (void );
-
-/* Accessor methods to globals.
-   These are made visible to non-reentrant scanners for convenience. */
-
-int zconflex_destroy (void );
-
-int zconfget_debug (void );
-
-void zconfset_debug (int debug_flag  );
-
-YY_EXTRA_TYPE zconfget_extra (void );
-
-void zconfset_extra (YY_EXTRA_TYPE user_defined  );
-
-FILE *zconfget_in (void );
-
-void zconfset_in  (FILE * in_str  );
-
-FILE *zconfget_out (void );
-
-void zconfset_out  (FILE * out_str  );
-
-int zconfget_leng (void );
-
-char *zconfget_text (void );
-
-int zconfget_lineno (void );
-
-void zconfset_lineno (int line_number  );
-
-/* Macros after this point can all be overridden by user definitions in
- * section 1.
- */
-
-#ifndef YY_SKIP_YYWRAP
-#ifdef __cplusplus
-extern "C" int zconfwrap (void );
-#else
-extern int zconfwrap (void );
-#endif
-#endif
-
-    static void yyunput (int c,char *buf_ptr  );
-    
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char *,yyconst char *,int );
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * );
-#endif
-
-#ifndef YY_NO_INPUT
-
-#ifdef __cplusplus
-static int yyinput (void );
-#else
-static int input (void );
-#endif
-
-#endif
-
-/* Amount of stuff to slurp up with each read. */
-#ifndef YY_READ_BUF_SIZE
-#define YY_READ_BUF_SIZE 8192
-#endif
-
-/* Copy whatever the last rule matched to the standard output. */
-#ifndef ECHO
-/* This used to be an fputs(), but since the string might contain NUL's,
- * we now use fwrite().
- */
-#define ECHO do { if (fwrite( zconftext, zconfleng, 1, zconfout )) {} } while (0)
-#endif
-
-/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
- * is returned in "result".
- */
-#ifndef YY_INPUT
-#define YY_INPUT(buf,result,max_size) \
-	errno=0; \
-	while ( (result = read( fileno(zconfin), (char *) buf, max_size )) < 0 ) \
-	{ \
-		if( errno != EINTR) \
-		{ \
-			YY_FATAL_ERROR( "input in flex scanner failed" ); \
-			break; \
-		} \
-		errno=0; \
-		clearerr(zconfin); \
-	}\
-\
-
-#endif
-
-/* No semi-colon after return; correct usage is to write "yyterminate();" -
- * we don't want an extra ';' after the "return" because that will cause
- * some compilers to complain about unreachable statements.
- */
-#ifndef yyterminate
-#define yyterminate() return YY_NULL
-#endif
-
-/* Number of entries by which start-condition stack grows. */
-#ifndef YY_START_STACK_INCR
-#define YY_START_STACK_INCR 25
-#endif
-
-/* Report a fatal error. */
-#ifndef YY_FATAL_ERROR
-#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
-#endif
-
-/* end tables serialization structures and prototypes */
-
-/* Default declaration of generated scanner - a define so the user can
- * easily add parameters.
- */
-#ifndef YY_DECL
-#define YY_DECL_IS_OURS 1
-
-extern int zconflex (void);
-
-#define YY_DECL int zconflex (void)
-#endif /* !YY_DECL */
-
-/* Code executed at the beginning of each rule, after zconftext and zconfleng
- * have been set up.
- */
-#ifndef YY_USER_ACTION
-#define YY_USER_ACTION
-#endif
-
-/* Code executed at the end of each rule. */
-#ifndef YY_BREAK
-#define YY_BREAK break;
-#endif
-
-#define YY_RULE_SETUP \
-	YY_USER_ACTION
-
-/** The main scanner function which does all the work.
- */
-YY_DECL
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp, *yy_bp;
-	register int yy_act;
-    
-	int str = 0;
-	int ts, i;
-
-	if ( !(yy_init) )
-		{
-		(yy_init) = 1;
-
-#ifdef YY_USER_INIT
-		YY_USER_INIT;
-#endif
-
-		if ( ! (yy_start) )
-			(yy_start) = 1;	/* first start state */
-
-		if ( ! zconfin )
-			zconfin = stdin;
-
-		if ( ! zconfout )
-			zconfout = stdout;
-
-		if ( ! YY_CURRENT_BUFFER ) {
-			zconfensure_buffer_stack ();
-			YY_CURRENT_BUFFER_LVALUE =
-				zconf_create_buffer(zconfin,YY_BUF_SIZE );
-		}
-
-		zconf_load_buffer_state( );
-		}
-
-	while ( 1 )		/* loops until end-of-file is reached */
-		{
-		yy_cp = (yy_c_buf_p);
-
-		/* Support of zconftext. */
-		*yy_cp = (yy_hold_char);
-
-		/* yy_bp points to the position in yy_ch_buf of the start of
-		 * the current run.
-		 */
-		yy_bp = yy_cp;
-
-		yy_current_state = (yy_start);
-yy_match:
-		while ( (yy_current_state = yy_nxt[yy_current_state][ yy_ec[YY_SC_TO_UI(*yy_cp)]  ]) > 0 )
-			++yy_cp;
-
-		yy_current_state = -yy_current_state;
-
-yy_find_action:
-		yy_act = yy_accept[yy_current_state];
-
-		YY_DO_BEFORE_ACTION;
-
-do_action:	/* This label is used only to access EOF actions. */
-
-		switch ( yy_act )
-	{ /* beginning of action switch */
-case 1:
-/* rule 1 can match eol */
-case 2:
-/* rule 2 can match eol */
-YY_RULE_SETUP
-{
-	current_file->lineno++;
-	return T_EOL;
-}
-	YY_BREAK
-case 3:
-YY_RULE_SETUP
-
-	YY_BREAK
-case 4:
-YY_RULE_SETUP
-{
-	BEGIN(COMMAND);
-}
-	YY_BREAK
-case 5:
-YY_RULE_SETUP
-{
-	unput(zconftext[0]);
-	BEGIN(COMMAND);
-}
-	YY_BREAK
-
-case 6:
-YY_RULE_SETUP
-{
-		const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
-		BEGIN(PARAM);
-		current_pos.file = current_file;
-		current_pos.lineno = current_file->lineno;
-		if (id && id->flags & TF_COMMAND) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(zconftext, zconfleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	YY_BREAK
-case 7:
-YY_RULE_SETUP
-
-	YY_BREAK
-case 8:
-/* rule 8 can match eol */
-YY_RULE_SETUP
-{
-		BEGIN(INITIAL);
-		current_file->lineno++;
-		return T_EOL;
-	}
-	YY_BREAK
-
-case 9:
-YY_RULE_SETUP
-return T_AND;
-	YY_BREAK
-case 10:
-YY_RULE_SETUP
-return T_OR;
-	YY_BREAK
-case 11:
-YY_RULE_SETUP
-return T_OPEN_PAREN;
-	YY_BREAK
-case 12:
-YY_RULE_SETUP
-return T_CLOSE_PAREN;
-	YY_BREAK
-case 13:
-YY_RULE_SETUP
-return T_NOT;
-	YY_BREAK
-case 14:
-YY_RULE_SETUP
-return T_EQUAL;
-	YY_BREAK
-case 15:
-YY_RULE_SETUP
-return T_UNEQUAL;
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-{
-		str = zconftext[0];
-		new_string();
-		BEGIN(STRING);
-	}
-	YY_BREAK
-case 17:
-/* rule 17 can match eol */
-YY_RULE_SETUP
-BEGIN(INITIAL); current_file->lineno++; return T_EOL;
-	YY_BREAK
-case 18:
-YY_RULE_SETUP
-/* ignore */
-	YY_BREAK
-case 19:
-YY_RULE_SETUP
-{
-		const struct kconf_id *id = kconf_id_lookup(zconftext, zconfleng);
-		if (id && id->flags & TF_PARAM) {
-			zconflval.id = id;
-			return id->token;
-		}
-		alloc_string(zconftext, zconfleng);
-		zconflval.string = text;
-		return T_WORD;
-	}
-	YY_BREAK
-case 20:
-YY_RULE_SETUP
-/* comment */
-	YY_BREAK
-case 21:
-/* rule 21 can match eol */
-YY_RULE_SETUP
-current_file->lineno++;
-	YY_BREAK
-case 22:
-YY_RULE_SETUP
-
-	YY_BREAK
-case YY_STATE_EOF(PARAM):
-{
-		BEGIN(INITIAL);
-	}
-	YY_BREAK
-
-case 23:
-/* rule 23 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-		append_string(zconftext, zconfleng);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	YY_BREAK
-case 24:
-YY_RULE_SETUP
-{
-		append_string(zconftext, zconfleng);
-	}
-	YY_BREAK
-case 25:
-/* rule 25 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-		append_string(zconftext + 1, zconfleng - 1);
-		zconflval.string = text;
-		return T_WORD_QUOTE;
-	}
-	YY_BREAK
-case 26:
-YY_RULE_SETUP
-{
-		append_string(zconftext + 1, zconfleng - 1);
-	}
-	YY_BREAK
-case 27:
-YY_RULE_SETUP
-{
-		if (str == zconftext[0]) {
-			BEGIN(PARAM);
-			zconflval.string = text;
-			return T_WORD_QUOTE;
-		} else
-			append_string(zconftext, 1);
-	}
-	YY_BREAK
-case 28:
-/* rule 28 can match eol */
-YY_RULE_SETUP
-{
-		printf("%s:%d:warning: multi-line strings not supported\n", zconf_curname(), zconf_lineno());
-		current_file->lineno++;
-		BEGIN(INITIAL);
-		return T_EOL;
-	}
-	YY_BREAK
-case YY_STATE_EOF(STRING):
-{
-		BEGIN(INITIAL);
-	}
-	YY_BREAK
-
-case 29:
-YY_RULE_SETUP
-{
-		ts = 0;
-		for (i = 0; i < zconfleng; i++) {
-			if (zconftext[i] == '\t')
-				ts = (ts & ~7) + 8;
-			else
-				ts++;
-		}
-		last_ts = ts;
-		if (first_ts) {
-			if (ts < first_ts) {
-				zconf_endhelp();
-				return T_HELPTEXT;
-			}
-			ts -= first_ts;
-			while (ts > 8) {
-				append_string("        ", 8);
-				ts -= 8;
-			}
-			append_string("        ", ts);
-		}
-	}
-	YY_BREAK
-case 30:
-/* rule 30 can match eol */
-*yy_cp = (yy_hold_char); /* undo effects of setting up zconftext */
-(yy_c_buf_p) = yy_cp -= 1;
-YY_DO_BEFORE_ACTION; /* set up zconftext again */
-YY_RULE_SETUP
-{
-		current_file->lineno++;
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-	YY_BREAK
-case 31:
-/* rule 31 can match eol */
-YY_RULE_SETUP
-{
-		current_file->lineno++;
-		append_string("\n", 1);
-	}
-	YY_BREAK
-case 32:
-YY_RULE_SETUP
-{
-		while (zconfleng) {
-			if ((zconftext[zconfleng-1] != ' ') && (zconftext[zconfleng-1] != '\t'))
-				break;
-			zconfleng--;
-		}
-		append_string(zconftext, zconfleng);
-		if (!first_ts)
-			first_ts = last_ts;
-	}
-	YY_BREAK
-case YY_STATE_EOF(HELP):
-{
-		zconf_endhelp();
-		return T_HELPTEXT;
-	}
-	YY_BREAK
-
-case YY_STATE_EOF(INITIAL):
-case YY_STATE_EOF(COMMAND):
-{
-	if (current_file) {
-		zconf_endfile();
-		return T_EOL;
-	}
-	fclose(zconfin);
-	yyterminate();
-}
-	YY_BREAK
-case 33:
-YY_RULE_SETUP
-YY_FATAL_ERROR( "flex scanner jammed" );
-	YY_BREAK
-
-	case YY_END_OF_BUFFER:
-		{
-		/* Amount of text matched not including the EOB char. */
-		int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
-
-		/* Undo the effects of YY_DO_BEFORE_ACTION. */
-		*yy_cp = (yy_hold_char);
-		YY_RESTORE_YY_MORE_OFFSET
-
-		if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
-			{
-			/* We're scanning a new file or input source.  It's
-			 * possible that this happened because the user
-			 * just pointed zconfin at a new source and called
-			 * zconflex().  If so, then we have to assure
-			 * consistency between YY_CURRENT_BUFFER and our
-			 * globals.  Here is the right place to do so, because
-			 * this is the first action (other than possibly a
-			 * back-up) that will match for the new input source.
-			 */
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-			YY_CURRENT_BUFFER_LVALUE->yy_input_file = zconfin;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
-			}
-
-		/* Note that here we test for yy_c_buf_p "<=" to the position
-		 * of the first EOB in the buffer, since yy_c_buf_p will
-		 * already have been incremented past the NUL character
-		 * (since all states make transitions on EOB to the
-		 * end-of-buffer state).  Contrast this with the test
-		 * in input().
-		 */
-		if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			{ /* This was really a NUL. */
-			yy_state_type yy_next_state;
-
-			(yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
-
-			yy_current_state = yy_get_previous_state(  );
-
-			/* Okay, we're now positioned to make the NUL
-			 * transition.  We couldn't have
-			 * yy_get_previous_state() go ahead and do it
-			 * for us because it doesn't know how to deal
-			 * with the possibility of jamming (and we don't
-			 * want to build jamming into it because then it
-			 * will run more slowly).
-			 */
-
-			yy_next_state = yy_try_NUL_trans( yy_current_state );
-
-			yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-
-			if ( yy_next_state )
-				{
-				/* Consume the NUL. */
-				yy_cp = ++(yy_c_buf_p);
-				yy_current_state = yy_next_state;
-				goto yy_match;
-				}
-
-			else
-				{
-				yy_cp = (yy_c_buf_p);
-				goto yy_find_action;
-				}
-			}
-
-		else switch ( yy_get_next_buffer(  ) )
-			{
-			case EOB_ACT_END_OF_FILE:
-				{
-				(yy_did_buffer_switch_on_eof) = 0;
-
-				if ( zconfwrap( ) )
-					{
-					/* Note: because we've taken care in
-					 * yy_get_next_buffer() to have set up
-					 * zconftext, we can now set up
-					 * yy_c_buf_p so that if some total
-					 * hoser (like flex itself) wants to
-					 * call the scanner after we return the
-					 * YY_NULL, it'll still work - another
-					 * YY_NULL will get returned.
-					 */
-					(yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
-
-					yy_act = YY_STATE_EOF(YY_START);
-					goto do_action;
-					}
-
-				else
-					{
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-					}
-				break;
-				}
-
-			case EOB_ACT_CONTINUE_SCAN:
-				(yy_c_buf_p) =
-					(yytext_ptr) + yy_amount_of_matched_text;
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_match;
-
-			case EOB_ACT_LAST_MATCH:
-				(yy_c_buf_p) =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
-
-				yy_current_state = yy_get_previous_state(  );
-
-				yy_cp = (yy_c_buf_p);
-				yy_bp = (yytext_ptr) + YY_MORE_ADJ;
-				goto yy_find_action;
-			}
-		break;
-		}
-
-	default:
-		YY_FATAL_ERROR(
-			"fatal flex scanner internal error--no action found" );
-	} /* end of action switch */
-		} /* end of scanning one token */
-} /* end of zconflex */
-
-/* yy_get_next_buffer - try to read in a new buffer
- *
- * Returns a code representing an action:
- *	EOB_ACT_LAST_MATCH -
- *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
- *	EOB_ACT_END_OF_FILE - end of file
- */
-static int yy_get_next_buffer (void)
-{
-    	register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
-	register char *source = (yytext_ptr);
-	register int number_to_move, i;
-	int ret_val;
-
-	if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
-		YY_FATAL_ERROR(
-		"fatal flex scanner internal error--end of buffer missed" );
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
-		{ /* Don't try to fill the buffer, so this is an EOF. */
-		if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
-			{
-			/* We matched a single character, the EOB, so
-			 * treat this as a final EOF.
-			 */
-			return EOB_ACT_END_OF_FILE;
-			}
-
-		else
-			{
-			/* We matched some text prior to the EOB, first
-			 * process it.
-			 */
-			return EOB_ACT_LAST_MATCH;
-			}
-		}
-
-	/* Try to read more data. */
-
-	/* First move last chars to start of buffer. */
-	number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
-
-	for ( i = 0; i < number_to_move; ++i )
-		*(dest++) = *(source++);
-
-	if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
-		/* don't do the read, it's not guaranteed to return an EOF,
-		 * just force an EOF
-		 */
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
-
-	else
-		{
-			int num_to_read =
-			YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
-
-		while ( num_to_read <= 0 )
-			{ /* Not enough room in the buffer - grow it. */
-
-			/* just a shorter name for the current buffer */
-			YY_BUFFER_STATE b = YY_CURRENT_BUFFER;
-
-			int yy_c_buf_p_offset =
-				(int) ((yy_c_buf_p) - b->yy_ch_buf);
-
-			if ( b->yy_is_our_buffer )
-				{
-				int new_size = b->yy_buf_size * 2;
-
-				if ( new_size <= 0 )
-					b->yy_buf_size += b->yy_buf_size / 8;
-				else
-					b->yy_buf_size *= 2;
-
-				b->yy_ch_buf = (char *)
-					/* Include room in for 2 EOB chars. */
-					zconfrealloc((void *) b->yy_ch_buf,b->yy_buf_size + 2  );
-				}
-			else
-				/* Can't grow it, we don't own it. */
-				b->yy_ch_buf = 0;
-
-			if ( ! b->yy_ch_buf )
-				YY_FATAL_ERROR(
-				"fatal error - scanner input buffer overflow" );
-
-			(yy_c_buf_p) = &b->yy_ch_buf[yy_c_buf_p_offset];
-
-			num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size -
-						number_to_move - 1;
-
-			}
-
-		if ( num_to_read > YY_READ_BUF_SIZE )
-			num_to_read = YY_READ_BUF_SIZE;
-
-		/* Read in more data. */
-		YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
-			(yy_n_chars), (size_t) num_to_read );
-
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	if ( (yy_n_chars) == 0 )
-		{
-		if ( number_to_move == YY_MORE_ADJ )
-			{
-			ret_val = EOB_ACT_END_OF_FILE;
-			zconfrestart(zconfin  );
-			}
-
-		else
-			{
-			ret_val = EOB_ACT_LAST_MATCH;
-			YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
-				YY_BUFFER_EOF_PENDING;
-			}
-		}
-
-	else
-		ret_val = EOB_ACT_CONTINUE_SCAN;
-
-	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
-		/* Extend the array by 50%, plus the number we really need. */
-		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
-		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) zconfrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
-		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
-	}
-
-	(yy_n_chars) += number_to_move;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
-	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
-
-	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
-
-	return ret_val;
-}
-
-/* yy_get_previous_state - get the state just before the EOB char was reached */
-
-    static yy_state_type yy_get_previous_state (void)
-{
-	register yy_state_type yy_current_state;
-	register char *yy_cp;
-    
-	yy_current_state = (yy_start);
-
-	for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
-		{
-		yy_current_state = yy_nxt[yy_current_state][(*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1)];
-		}
-
-	return yy_current_state;
-}
-
-/* yy_try_NUL_trans - try to make a transition on the NUL character
- *
- * synopsis
- *	next_state = yy_try_NUL_trans( current_state );
- */
-    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
-{
-	register int yy_is_jam;
-    
-	yy_current_state = yy_nxt[yy_current_state][1];
-	yy_is_jam = (yy_current_state <= 0);
-
-	return yy_is_jam ? 0 : yy_current_state;
-}
-
-    static void yyunput (int c, register char * yy_bp )
-{
-	register char *yy_cp;
-    
-    yy_cp = (yy_c_buf_p);
-
-	/* undo effects of setting up zconftext */
-	*yy_cp = (yy_hold_char);
-
-	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-		{ /* need to shift things up to make room */
-		/* +2 for EOB chars. */
-		register int number_to_move = (yy_n_chars) + 2;
-		register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
-					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
-		register char *source =
-				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
-
-		while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
-			*--dest = *--source;
-
-		yy_cp += (int) (dest - source);
-		yy_bp += (int) (dest - source);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
-			(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
-
-		if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
-			YY_FATAL_ERROR( "flex scanner push-back overflow" );
-		}
-
-	*--yy_cp = (char) c;
-
-	(yytext_ptr) = yy_bp;
-	(yy_hold_char) = *yy_cp;
-	(yy_c_buf_p) = yy_cp;
-}
-
-#ifndef YY_NO_INPUT
-#ifdef __cplusplus
-    static int yyinput (void)
-#else
-    static int input  (void)
-#endif
-
-{
-	int c;
-    
-	*(yy_c_buf_p) = (yy_hold_char);
-
-	if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
-		{
-		/* yy_c_buf_p now points to the character we want to return.
-		 * If this occurs *before* the EOB characters, then it's a
-		 * valid NUL; if not, then we've hit the end of the buffer.
-		 */
-		if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
-			/* This was really a NUL. */
-			*(yy_c_buf_p) = '\0';
-
-		else
-			{ /* need more input */
-			int offset = (yy_c_buf_p) - (yytext_ptr);
-			++(yy_c_buf_p);
-
-			switch ( yy_get_next_buffer(  ) )
-				{
-				case EOB_ACT_LAST_MATCH:
-					/* This happens because yy_g_n_b()
-					 * sees that we've accumulated a
-					 * token and flags that we need to
-					 * try matching the token before
-					 * proceeding.  But for input(),
-					 * there's no matching to consider.
-					 * So convert the EOB_ACT_LAST_MATCH
-					 * to EOB_ACT_END_OF_FILE.
-					 */
-
-					/* Reset buffer status. */
-					zconfrestart(zconfin );
-
-					/*FALLTHROUGH*/
-
-				case EOB_ACT_END_OF_FILE:
-					{
-					if ( zconfwrap( ) )
-						return EOF;
-
-					if ( ! (yy_did_buffer_switch_on_eof) )
-						YY_NEW_FILE;
-#ifdef __cplusplus
-					return yyinput();
-#else
-					return input();
-#endif
-					}
-
-				case EOB_ACT_CONTINUE_SCAN:
-					(yy_c_buf_p) = (yytext_ptr) + offset;
-					break;
-				}
-			}
-		}
-
-	c = *(unsigned char *) (yy_c_buf_p);	/* cast for 8-bit char's */
-	*(yy_c_buf_p) = '\0';	/* preserve zconftext */
-	(yy_hold_char) = *++(yy_c_buf_p);
-
-	return c;
-}
-#endif	/* ifndef YY_NO_INPUT */
-
-/** Immediately switch to a different input stream.
- * @param input_file A readable stream.
- * 
- * @note This function does not reset the start condition to @c INITIAL .
- */
-    void zconfrestart  (FILE * input_file )
-{
-    
-	if ( ! YY_CURRENT_BUFFER ){
-        zconfensure_buffer_stack ();
-		YY_CURRENT_BUFFER_LVALUE =
-            zconf_create_buffer(zconfin,YY_BUF_SIZE );
-	}
-
-	zconf_init_buffer(YY_CURRENT_BUFFER,input_file );
-	zconf_load_buffer_state( );
-}
-
-/** Switch to a different input buffer.
- * @param new_buffer The new input buffer.
- * 
- */
-    void zconf_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
-{
-    
-	/* TODO. We should be able to replace this entire function body
-	 * with
-	 *		zconfpop_buffer_state();
-	 *		zconfpush_buffer_state(new_buffer);
-     */
-	zconfensure_buffer_stack ();
-	if ( YY_CURRENT_BUFFER == new_buffer )
-		return;
-
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-	zconf_load_buffer_state( );
-
-	/* We don't actually know whether we did this switch during
-	 * EOF (zconfwrap()) processing, but the only time this flag
-	 * is looked at is after zconfwrap() is called, so it's safe
-	 * to go ahead and always set it.
-	 */
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-static void zconf_load_buffer_state  (void)
-{
-    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
-	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
-	zconfin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
-	(yy_hold_char) = *(yy_c_buf_p);
-}
-
-/** Allocate and initialize an input buffer state.
- * @param file A readable stream.
- * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
- * 
- * @return the allocated buffer state.
- */
-    YY_BUFFER_STATE zconf_create_buffer  (FILE * file, int  size )
-{
-	YY_BUFFER_STATE b;
-    
-	b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
-
-	b->yy_buf_size = size;
-
-	/* yy_ch_buf has to be 2 characters longer than the size given because
-	 * we need to put in 2 end-of-buffer characters.
-	 */
-	b->yy_ch_buf = (char *) zconfalloc(b->yy_buf_size + 2  );
-	if ( ! b->yy_ch_buf )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_create_buffer()" );
-
-	b->yy_is_our_buffer = 1;
-
-	zconf_init_buffer(b,file );
-
-	return b;
-}
-
-/** Destroy the buffer.
- * @param b a buffer created with zconf_create_buffer()
- * 
- */
-    void zconf_delete_buffer (YY_BUFFER_STATE  b )
-{
-    
-	if ( ! b )
-		return;
-
-	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
-		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
-
-	if ( b->yy_is_our_buffer )
-		zconffree((void *) b->yy_ch_buf  );
-
-	zconffree((void *) b  );
-}
-
-/* Initializes or reinitializes a buffer.
- * This function is sometimes called more than once on the same buffer,
- * such as during a zconfrestart() or at EOF.
- */
-    static void zconf_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
-
-{
-	int oerrno = errno;
-    
-	zconf_flush_buffer(b );
-
-	b->yy_input_file = file;
-	b->yy_fill_buffer = 1;
-
-    /* If b is the current buffer, then zconf_init_buffer was _probably_
-     * called from zconfrestart() or through yy_get_next_buffer.
-     * In that case, we don't want to reset the lineno or column.
-     */
-    if (b != YY_CURRENT_BUFFER){
-        b->yy_bs_lineno = 1;
-        b->yy_bs_column = 0;
-    }
-
-        b->yy_is_interactive = 0;
-    
-	errno = oerrno;
-}
-
-/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
- * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
- * 
- */
-    void zconf_flush_buffer (YY_BUFFER_STATE  b )
-{
-    	if ( ! b )
-		return;
-
-	b->yy_n_chars = 0;
-
-	/* We always need two end-of-buffer characters.  The first causes
-	 * a transition to the end-of-buffer state.  The second causes
-	 * a jam in that state.
-	 */
-	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
-	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
-
-	b->yy_buf_pos = &b->yy_ch_buf[0];
-
-	b->yy_at_bol = 1;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	if ( b == YY_CURRENT_BUFFER )
-		zconf_load_buffer_state( );
-}
-
-/** Pushes the new state onto the stack. The new state becomes
- *  the current state. This function will allocate the stack
- *  if necessary.
- *  @param new_buffer The new state.
- *  
- */
-void zconfpush_buffer_state (YY_BUFFER_STATE new_buffer )
-{
-    	if (new_buffer == NULL)
-		return;
-
-	zconfensure_buffer_stack();
-
-	/* This block is copied from zconf_switch_to_buffer. */
-	if ( YY_CURRENT_BUFFER )
-		{
-		/* Flush out information for old buffer. */
-		*(yy_c_buf_p) = (yy_hold_char);
-		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
-		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
-		}
-
-	/* Only push if top exists. Otherwise, replace top. */
-	if (YY_CURRENT_BUFFER)
-		(yy_buffer_stack_top)++;
-	YY_CURRENT_BUFFER_LVALUE = new_buffer;
-
-	/* copied from zconf_switch_to_buffer. */
-	zconf_load_buffer_state( );
-	(yy_did_buffer_switch_on_eof) = 1;
-}
-
-/** Removes and deletes the top of the stack, if present.
- *  The next element becomes the new top.
- *  
- */
-void zconfpop_buffer_state (void)
-{
-    	if (!YY_CURRENT_BUFFER)
-		return;
-
-	zconf_delete_buffer(YY_CURRENT_BUFFER );
-	YY_CURRENT_BUFFER_LVALUE = NULL;
-	if ((yy_buffer_stack_top) > 0)
-		--(yy_buffer_stack_top);
-
-	if (YY_CURRENT_BUFFER) {
-		zconf_load_buffer_state( );
-		(yy_did_buffer_switch_on_eof) = 1;
-	}
-}
-
-/* Allocates the stack if it does not exist.
- *  Guarantees space for at least one push.
- */
-static void zconfensure_buffer_stack (void)
-{
-	int num_to_alloc;
-    
-	if (!(yy_buffer_stack)) {
-
-		/* First allocation is just for 2 elements, since we don't know if this
-		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
-		 * immediate realloc on the next call.
-         */
-		num_to_alloc = 1;
-		(yy_buffer_stack) = (struct yy_buffer_state**)zconfalloc
-								(num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
-								  
-		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
-				
-		(yy_buffer_stack_max) = num_to_alloc;
-		(yy_buffer_stack_top) = 0;
-		return;
-	}
-
-	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
-
-		/* Increase the buffer to prepare for a possible push. */
-		int grow_size = 8 /* arbitrary grow size */;
-
-		num_to_alloc = (yy_buffer_stack_max) + grow_size;
-		(yy_buffer_stack) = (struct yy_buffer_state**)zconfrealloc
-								((yy_buffer_stack),
-								num_to_alloc * sizeof(struct yy_buffer_state*)
-								);
-		if ( ! (yy_buffer_stack) )
-			YY_FATAL_ERROR( "out of dynamic memory in zconfensure_buffer_stack()" );
-
-		/* zero only the new slots.*/
-		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
-		(yy_buffer_stack_max) = num_to_alloc;
-	}
-}
-
-/** Setup the input buffer state to scan directly from a user-specified character buffer.
- * @param base the character buffer
- * @param size the size in bytes of the character buffer
- * 
- * @return the newly allocated buffer state object. 
- */
-YY_BUFFER_STATE zconf_scan_buffer  (char * base, yy_size_t  size )
-{
-	YY_BUFFER_STATE b;
-    
-	if ( size < 2 ||
-	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
-	     base[size-1] != YY_END_OF_BUFFER_CHAR )
-		/* They forgot to leave room for the EOB's. */
-		return 0;
-
-	b = (YY_BUFFER_STATE) zconfalloc(sizeof( struct yy_buffer_state )  );
-	if ( ! b )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_buffer()" );
-
-	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
-	b->yy_buf_pos = b->yy_ch_buf = base;
-	b->yy_is_our_buffer = 0;
-	b->yy_input_file = 0;
-	b->yy_n_chars = b->yy_buf_size;
-	b->yy_is_interactive = 0;
-	b->yy_at_bol = 1;
-	b->yy_fill_buffer = 0;
-	b->yy_buffer_status = YY_BUFFER_NEW;
-
-	zconf_switch_to_buffer(b  );
-
-	return b;
-}
-
-/** Setup the input buffer state to scan a string. The next call to zconflex() will
- * scan from a @e copy of @a str.
- * @param yystr a NUL-terminated string to scan
- * 
- * @return the newly allocated buffer state object.
- * @note If you want to scan bytes that may contain NUL values, then use
- *       zconf_scan_bytes() instead.
- */
-YY_BUFFER_STATE zconf_scan_string (yyconst char * yystr )
-{
-    
-	return zconf_scan_bytes(yystr,strlen(yystr) );
-}
-
-/** Setup the input buffer state to scan the given bytes. The next call to zconflex() will
- * scan from a @e copy of @a bytes.
- * @param bytes the byte buffer to scan
- * @param len the number of bytes in the buffer pointed to by @a bytes.
- * 
- * @return the newly allocated buffer state object.
- */
-YY_BUFFER_STATE zconf_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
-{
-	YY_BUFFER_STATE b;
-	char *buf;
-	yy_size_t n;
-	int i;
-    
-	/* Get memory for full buffer, including space for trailing EOB's. */
-	n = _yybytes_len + 2;
-	buf = (char *) zconfalloc(n  );
-	if ( ! buf )
-		YY_FATAL_ERROR( "out of dynamic memory in zconf_scan_bytes()" );
-
-	for ( i = 0; i < _yybytes_len; ++i )
-		buf[i] = yybytes[i];
-
-	buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
-
-	b = zconf_scan_buffer(buf,n );
-	if ( ! b )
-		YY_FATAL_ERROR( "bad buffer in zconf_scan_bytes()" );
-
-	/* It's okay to grow etc. this buffer, and we should throw it
-	 * away when we're done.
-	 */
-	b->yy_is_our_buffer = 1;
-
-	return b;
-}
-
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
-
-static void yy_fatal_error (yyconst char* msg )
-{
-    	(void) fprintf( stderr, "%s\n", msg );
-	exit( YY_EXIT_FAILURE );
-}
-
-/* Redefine yyless() so it works in section 3 code. */
-
-#undef yyless
-#define yyless(n) \
-	do \
-		{ \
-		/* Undo effects of setting up zconftext. */ \
-        int yyless_macro_arg = (n); \
-        YY_LESS_LINENO(yyless_macro_arg);\
-		zconftext[zconfleng] = (yy_hold_char); \
-		(yy_c_buf_p) = zconftext + yyless_macro_arg; \
-		(yy_hold_char) = *(yy_c_buf_p); \
-		*(yy_c_buf_p) = '\0'; \
-		zconfleng = yyless_macro_arg; \
-		} \
-	while ( 0 )
-
-/* Accessor  methods (get/set functions) to struct members. */
-
-/** Get the current line number.
- * 
- */
-int zconfget_lineno  (void)
-{
-        
-    return zconflineno;
-}
-
-/** Get the input stream.
- * 
- */
-FILE *zconfget_in  (void)
-{
-        return zconfin;
-}
-
-/** Get the output stream.
- * 
- */
-FILE *zconfget_out  (void)
-{
-        return zconfout;
-}
-
-/** Get the length of the current token.
- * 
- */
-int zconfget_leng  (void)
-{
-        return zconfleng;
-}
-
-/** Get the current token.
- * 
- */
-
-char *zconfget_text  (void)
-{
-        return zconftext;
-}
-
-/** Set the current line number.
- * @param line_number
- * 
- */
-void zconfset_lineno (int  line_number )
-{
-    
-    zconflineno = line_number;
-}
-
-/** Set the input stream. This does not discard the current
- * input buffer.
- * @param in_str A readable stream.
- * 
- * @see zconf_switch_to_buffer
- */
-void zconfset_in (FILE *  in_str )
-{
-        zconfin = in_str ;
-}
-
-void zconfset_out (FILE *  out_str )
-{
-        zconfout = out_str ;
-}
-
-int zconfget_debug  (void)
-{
-        return zconf_flex_debug;
-}
-
-void zconfset_debug (int  bdebug )
-{
-        zconf_flex_debug = bdebug ;
-}
-
-static int yy_init_globals (void)
-{
-        /* Initialization is the same as for the non-reentrant scanner.
-     * This function is called from zconflex_destroy(), so don't allocate here.
-     */
-
-    (yy_buffer_stack) = 0;
-    (yy_buffer_stack_top) = 0;
-    (yy_buffer_stack_max) = 0;
-    (yy_c_buf_p) = (char *) 0;
-    (yy_init) = 0;
-    (yy_start) = 0;
-
-/* Defined in main.c */
-#ifdef YY_STDINIT
-    zconfin = stdin;
-    zconfout = stdout;
-#else
-    zconfin = (FILE *) 0;
-    zconfout = (FILE *) 0;
-#endif
-
-    /* For future reference: Set errno on error, since we are called by
-     * zconflex_init()
-     */
-    return 0;
-}
-
-/* zconflex_destroy is for both reentrant and non-reentrant scanners. */
-int zconflex_destroy  (void)
-{
-    
-    /* Pop the buffer stack, destroying each element. */
-	while(YY_CURRENT_BUFFER){
-		zconf_delete_buffer(YY_CURRENT_BUFFER  );
-		YY_CURRENT_BUFFER_LVALUE = NULL;
-		zconfpop_buffer_state();
-	}
-
-	/* Destroy the stack itself. */
-	zconffree((yy_buffer_stack) );
-	(yy_buffer_stack) = NULL;
-
-    /* Reset the globals. This is important in a non-reentrant scanner so the next time
-     * zconflex() is called, initialization will occur. */
-    yy_init_globals( );
-
-    return 0;
-}
-
-/*
- * Internal utility routines.
- */
-
-#ifndef yytext_ptr
-static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
-{
-	register int i;
-	for ( i = 0; i < n; ++i )
-		s1[i] = s2[i];
-}
-#endif
-
-#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen (yyconst char * s )
-{
-	register int n;
-	for ( n = 0; s[n]; ++n )
-		;
-
-	return n;
-}
-#endif
-
-void *zconfalloc (yy_size_t  size )
-{
-	return (void *) malloc( size );
-}
-
-void *zconfrealloc  (void * ptr, yy_size_t  size )
-{
-	/* The cast to (char *) in the following accommodates both
-	 * implementations that use char* generic pointers, and those
-	 * that use void* generic pointers.  It works with the latter
-	 * because both ANSI C and C++ allow castless assignment from
-	 * any pointer type to void*, and deal with argument conversions
-	 * as though doing an assignment.
-	 */
-	return (void *) realloc( (char *) ptr, size );
-}
-
-void zconffree (void * ptr )
-{
-	free( (char *) ptr );	/* see zconfrealloc() for (char *) cast */
-}
-
-#define YYTABLES_NAME "yytables"
-
-void zconf_starthelp(void)
-{
-	new_string();
-	last_ts = first_ts = 0;
-	BEGIN(HELP);
-}
-
-static void zconf_endhelp(void)
-{
-	zconflval.string = text;
-	BEGIN(INITIAL);
-}
-
-/*
- * Try to open specified file with following names:
- * ./name
- * $(srctree)/name
- * The latter is used when srctree is separate from objtree
- * when compiling the kernel.
- * Return NULL if file is not found.
- */
-FILE *zconf_fopen(const char *name)
-{
-	char *env, fullname[PATH_MAX+1];
-	FILE *f;
-
-	f = fopen(name, "r");
-	if (!f && name != NULL && name[0] != '/') {
-		env = getenv(SRCTREE);
-		if (env) {
-			sprintf(fullname, "%s/%s", env, name);
-			f = fopen(fullname, "r");
-		}
-	}
-	return f;
-}
-
-void zconf_initscan(const char *name)
-{
-	zconfin = zconf_fopen(name);
-	if (!zconfin) {
-		printf("can't find file %s\n", name);
-		exit(1);
-	}
-
-	current_buf = xmalloc(sizeof(*current_buf));
-	memset(current_buf, 0, sizeof(*current_buf));
-
-	current_file = file_lookup(name);
-	current_file->lineno = 1;
-}
-
-void zconf_nextfile(const char *name)
-{
-	struct file *iter;
-	struct file *file = file_lookup(name);
-	struct buffer *buf = xmalloc(sizeof(*buf));
-	memset(buf, 0, sizeof(*buf));
-
-	current_buf->state = YY_CURRENT_BUFFER;
-	zconfin = zconf_fopen(file->name);
-	if (!zconfin) {
-		printf("%s:%d: can't open file \"%s\"\n",
-		    zconf_curname(), zconf_lineno(), file->name);
-		exit(1);
-	}
-	zconf_switch_to_buffer(zconf_create_buffer(zconfin,YY_BUF_SIZE));
-	buf->parent = current_buf;
-	current_buf = buf;
-
-	for (iter = current_file->parent; iter; iter = iter->parent ) {
-		if (!strcmp(current_file->name,iter->name) ) {
-			printf("%s:%d: recursive inclusion detected. "
-			       "Inclusion path:\n  current file : '%s'\n",
-			       zconf_curname(), zconf_lineno(),
-			       zconf_curname());
-			iter = current_file->parent;
-			while (iter && \
-			       strcmp(iter->name,current_file->name)) {
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno-1);
-				iter = iter->parent;
-			}
-			if (iter)
-				printf("  included from: '%s:%d'\n",
-				       iter->name, iter->lineno+1);
-			exit(1);
-		}
-	}
-	file->lineno = 1;
-	file->parent = current_file;
-	current_file = file;
-}
-
-static void zconf_endfile(void)
-{
-	struct buffer *parent;
-
-	current_file = current_file->parent;
-
-	parent = current_buf->parent;
-	if (parent) {
-		fclose(zconfin);
-		zconf_delete_buffer(YY_CURRENT_BUFFER);
-		zconf_switch_to_buffer(parent->state);
-	}
-	free(current_buf);
-	current_buf = parent;
-}
-
-int zconf_lineno(void)
-{
-	return current_pos.lineno;
-}
-
-const char *zconf_curname(void)
-{
-	return current_pos.file ? current_pos.file->name : "<none>";
-}
-
diff --git a/support/kconfig/zconf.tab.c_shipped b/support/kconfig/zconf.tab.c_shipped
deleted file mode 100644
index 73d9250..0000000
--- a/support/kconfig/zconf.tab.c_shipped
+++ /dev/null
@@ -1,2538 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.5.  */
-
-/* Bison implementation for Yacc-like parsers in C
-   
-      Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
-   
-   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 <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-   
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* C LALR(1) parser skeleton written by Richard Stallman, by
-   simplifying the original so-called "semantic" parser.  */
-
-/* All symbols defined below should begin with yy or YY, to avoid
-   infringing on user name space.  This should be done even for local
-   variables, as they might otherwise be expanded by user macros.
-   There are some unavoidable exceptions within include files to
-   define necessary library symbols; they are noted "INFRINGES ON
-   USER NAME SPACE" below.  */
-
-/* Identify Bison output.  */
-#define YYBISON 1
-
-/* Bison version.  */
-#define YYBISON_VERSION "2.5"
-
-/* Skeleton name.  */
-#define YYSKELETON_NAME "yacc.c"
-
-/* Pure parsers.  */
-#define YYPURE 0
-
-/* Push parsers.  */
-#define YYPUSH 0
-
-/* Pull parsers.  */
-#define YYPULL 1
-
-/* Using locations.  */
-#define YYLSP_NEEDED 0
-
-/* Substitute the variable and function names.  */
-#define yyparse         zconfparse
-#define yylex           zconflex
-#define yyerror         zconferror
-#define yylval          zconflval
-#define yychar          zconfchar
-#define yydebug         zconfdebug
-#define yynerrs         zconfnerrs
-
-
-/* Copy the first part of user declarations.  */
-
-
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#include "lkc.h"
-
-#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
-
-#define PRINTD		0x0001
-#define DEBUG_PARSE	0x0002
-
-int cdebug = PRINTD;
-
-extern int zconflex(void);
-static void zconfprint(const char *err, ...);
-static void zconf_error(const char *err, ...);
-static void zconferror(const char *err);
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
-
-struct symbol *symbol_hash[SYMBOL_HASHSIZE];
-
-static struct menu *current_menu, *current_entry;
-
-
-
-
-/* Enabling traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 1
-#endif
-
-/* Enabling verbose error messages.  */
-#ifdef YYERROR_VERBOSE
-# undef YYERROR_VERBOSE
-# define YYERROR_VERBOSE 1
-#else
-# define YYERROR_VERBOSE 0
-#endif
-
-/* Enabling the token table.  */
-#ifndef YYTOKEN_TABLE
-# define YYTOKEN_TABLE 0
-#endif
-
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     T_MAINMENU = 258,
-     T_MENU = 259,
-     T_ENDMENU = 260,
-     T_SOURCE = 261,
-     T_CHOICE = 262,
-     T_ENDCHOICE = 263,
-     T_COMMENT = 264,
-     T_CONFIG = 265,
-     T_MENUCONFIG = 266,
-     T_HELP = 267,
-     T_HELPTEXT = 268,
-     T_IF = 269,
-     T_ENDIF = 270,
-     T_DEPENDS = 271,
-     T_OPTIONAL = 272,
-     T_PROMPT = 273,
-     T_TYPE = 274,
-     T_DEFAULT = 275,
-     T_SELECT = 276,
-     T_RANGE = 277,
-     T_VISIBLE = 278,
-     T_OPTION = 279,
-     T_ON = 280,
-     T_WORD = 281,
-     T_WORD_QUOTE = 282,
-     T_UNEQUAL = 283,
-     T_CLOSE_PAREN = 284,
-     T_OPEN_PAREN = 285,
-     T_EOL = 286,
-     T_OR = 287,
-     T_AND = 288,
-     T_EQUAL = 289,
-     T_NOT = 290
-   };
-#endif
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-{
-
-
-	char *string;
-	struct file *file;
-	struct symbol *symbol;
-	struct expr *expr;
-	struct menu *menu;
-	const struct kconf_id *id;
-
-
-
-} YYSTYPE;
-# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-/* Copy the second part of user declarations.  */
-
-
-/* Include zconf.hash.c here so it can see the token constants. */
-#include "zconf.hash.c"
-
-
-
-#ifdef short
-# undef short
-#endif
-
-#ifdef YYTYPE_UINT8
-typedef YYTYPE_UINT8 yytype_uint8;
-#else
-typedef unsigned char yytype_uint8;
-#endif
-
-#ifdef YYTYPE_INT8
-typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
-#else
-typedef short int yytype_int8;
-#endif
-
-#ifdef YYTYPE_UINT16
-typedef YYTYPE_UINT16 yytype_uint16;
-#else
-typedef unsigned short int yytype_uint16;
-#endif
-
-#ifdef YYTYPE_INT16
-typedef YYTYPE_INT16 yytype_int16;
-#else
-typedef short int yytype_int16;
-#endif
-
-#ifndef YYSIZE_T
-# ifdef __SIZE_TYPE__
-#  define YYSIZE_T __SIZE_TYPE__
-# elif defined size_t
-#  define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYSIZE_T size_t
-# else
-#  define YYSIZE_T unsigned int
-# endif
-#endif
-
-#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
-
-#ifndef YY_
-# if defined YYENABLE_NLS && YYENABLE_NLS
-#  if ENABLE_NLS
-#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
-#   define YY_(msgid) dgettext ("bison-runtime", msgid)
-#  endif
-# endif
-# ifndef YY_
-#  define YY_(msgid) msgid
-# endif
-#endif
-
-/* Suppress unused-variable warnings by "using" E.  */
-#if ! defined lint || defined __GNUC__
-# define YYUSE(e) ((void) (e))
-#else
-# define YYUSE(e) /* empty */
-#endif
-
-/* Identity function, used to suppress warnings about constant conditions.  */
-#ifndef lint
-# define YYID(n) (n)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
-#else
-static int
-YYID (yyi)
-    int yyi;
-#endif
-{
-  return yyi;
-}
-#endif
-
-#if ! defined yyoverflow || YYERROR_VERBOSE
-
-/* The parser invokes alloca or malloc; define the necessary symbols.  */
-
-# ifdef YYSTACK_USE_ALLOCA
-#  if YYSTACK_USE_ALLOCA
-#   ifdef __GNUC__
-#    define YYSTACK_ALLOC __builtin_alloca
-#   elif defined __BUILTIN_VA_ARG_INCR
-#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
-#   elif defined _AIX
-#    define YYSTACK_ALLOC __alloca
-#   elif defined _MSC_VER
-#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
-#    define alloca _alloca
-#   else
-#    define YYSTACK_ALLOC alloca
-#    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#     ifndef EXIT_SUCCESS
-#      define EXIT_SUCCESS 0
-#     endif
-#    endif
-#   endif
-#  endif
-# endif
-
-# ifdef YYSTACK_ALLOC
-   /* Pacify GCC's `empty if-body' warning.  */
-#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-    /* The OS might guarantee only one guard page at the bottom of the stack,
-       and a page size can be as small as 4096 bytes.  So we cannot safely
-       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
-       to allow for a few compiler-allocated temporary stack slots.  */
-#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
-#  endif
-# else
-#  define YYSTACK_ALLOC YYMALLOC
-#  define YYSTACK_FREE YYFREE
-#  ifndef YYSTACK_ALLOC_MAXIMUM
-#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
-#  endif
-#  if (defined __cplusplus && ! defined EXIT_SUCCESS \
-       && ! ((defined YYMALLOC || defined malloc) \
-	     && (defined YYFREE || defined free)))
-#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
-#   ifndef EXIT_SUCCESS
-#    define EXIT_SUCCESS 0
-#   endif
-#  endif
-#  ifndef YYMALLOC
-#   define YYMALLOC malloc
-#   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-#  ifndef YYFREE
-#   define YYFREE free
-#   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-void free (void *); /* INFRINGES ON USER NAME SPACE */
-#   endif
-#  endif
-# endif
-#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
-
-
-#if (! defined yyoverflow \
-     && (! defined __cplusplus \
-	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
-
-/* A type that is properly aligned for any stack member.  */
-union yyalloc
-{
-  yytype_int16 yyss_alloc;
-  YYSTYPE yyvs_alloc;
-};
-
-/* The size of the maximum gap between one aligned stack and the next.  */
-# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
-
-/* The size of an array large to enough to hold all stacks, each with
-   N elements.  */
-# define YYSTACK_BYTES(N) \
-     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
-      + YYSTACK_GAP_MAXIMUM)
-
-# define YYCOPY_NEEDED 1
-
-/* Relocate STACK from its old location to the new one.  The
-   local variables YYSIZE and YYSTACKSIZE give the old and new number of
-   elements in the stack, and YYPTR gives the new location of the
-   stack.  Advance YYPTR to a properly aligned location for the next
-   stack.  */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack)				\
-    do									\
-      {									\
-	YYSIZE_T yynewbytes;						\
-	YYCOPY (&yyptr->Stack_alloc, Stack, yysize);			\
-	Stack = &yyptr->Stack_alloc;					\
-	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
-	yyptr += yynewbytes / sizeof (*yyptr);				\
-      }									\
-    while (YYID (0))
-
-#endif
-
-#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
-/* Copy COUNT objects from FROM to TO.  The source and destination do
-   not overlap.  */
-# ifndef YYCOPY
-#  if defined __GNUC__ && 1 < __GNUC__
-#   define YYCOPY(To, From, Count) \
-      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
-#  else
-#   define YYCOPY(To, From, Count)		\
-      do					\
-	{					\
-	  YYSIZE_T yyi;				\
-	  for (yyi = 0; yyi < (Count); yyi++)	\
-	    (To)[yyi] = (From)[yyi];		\
-	}					\
-      while (YYID (0))
-#  endif
-# endif
-#endif /* !YYCOPY_NEEDED */
-
-/* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  11
-/* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   290
-
-/* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  36
-/* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  50
-/* YYNRULES -- Number of rules.  */
-#define YYNRULES  118
-/* YYNRULES -- Number of states.  */
-#define YYNSTATES  191
-
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
-#define YYUNDEFTOK  2
-#define YYMAXUTOK   290
-
-#define YYTRANSLATE(YYX)						\
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
-static const yytype_uint8 yytranslate[] =
-{
-       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35
-};
-
-#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
-   YYRHS.  */
-static const yytype_uint16 yyprhs[] =
-{
-       0,     0,     3,     6,     8,    11,    13,    14,    17,    20,
-      23,    26,    31,    36,    40,    42,    44,    46,    48,    50,
-      52,    54,    56,    58,    60,    62,    64,    66,    68,    72,
-      75,    79,    82,    86,    89,    90,    93,    96,    99,   102,
-     105,   108,   112,   117,   122,   127,   133,   137,   138,   142,
-     143,   146,   150,   153,   155,   159,   160,   163,   166,   169,
-     172,   175,   180,   184,   187,   192,   193,   196,   200,   202,
-     206,   207,   210,   213,   216,   220,   224,   228,   230,   234,
-     235,   238,   241,   244,   248,   252,   255,   258,   261,   262,
-     265,   268,   271,   276,   277,   280,   283,   286,   287,   290,
-     292,   294,   297,   300,   303,   305,   308,   309,   312,   314,
-     318,   322,   326,   329,   333,   337,   339,   341,   342
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
-static const yytype_int8 yyrhs[] =
-{
-      37,     0,    -1,    81,    38,    -1,    38,    -1,    63,    39,
-      -1,    39,    -1,    -1,    39,    41,    -1,    39,    55,    -1,
-      39,    67,    -1,    39,    80,    -1,    39,    26,     1,    31,
-      -1,    39,    40,     1,    31,    -1,    39,     1,    31,    -1,
-      16,    -1,    18,    -1,    19,    -1,    21,    -1,    17,    -1,
-      22,    -1,    20,    -1,    23,    -1,    31,    -1,    61,    -1,
-      71,    -1,    44,    -1,    46,    -1,    69,    -1,    26,     1,
-      31,    -1,     1,    31,    -1,    10,    26,    31,    -1,    43,
-      47,    -1,    11,    26,    31,    -1,    45,    47,    -1,    -1,
-      47,    48,    -1,    47,    49,    -1,    47,    75,    -1,    47,
-      73,    -1,    47,    42,    -1,    47,    31,    -1,    19,    78,
-      31,    -1,    18,    79,    82,    31,    -1,    20,    83,    82,
-      31,    -1,    21,    26,    82,    31,    -1,    22,    84,    84,
-      82,    31,    -1,    24,    50,    31,    -1,    -1,    50,    26,
-      51,    -1,    -1,    34,    79,    -1,     7,    85,    31,    -1,
-      52,    56,    -1,    80,    -1,    53,    58,    54,    -1,    -1,
-      56,    57,    -1,    56,    75,    -1,    56,    73,    -1,    56,
-      31,    -1,    56,    42,    -1,    18,    79,    82,    31,    -1,
-      19,    78,    31,    -1,    17,    31,    -1,    20,    26,    82,
-      31,    -1,    -1,    58,    41,    -1,    14,    83,    81,    -1,
-      80,    -1,    59,    62,    60,    -1,    -1,    62,    41,    -1,
-      62,    67,    -1,    62,    55,    -1,     3,    79,    81,    -1,
-       4,    79,    31,    -1,    64,    76,    74,    -1,    80,    -1,
-      65,    68,    66,    -1,    -1,    68,    41,    -1,    68,    67,
-      -1,    68,    55,    -1,     6,    79,    31,    -1,     9,    79,
-      31,    -1,    70,    74,    -1,    12,    31,    -1,    72,    13,
-      -1,    -1,    74,    75,    -1,    74,    31,    -1,    74,    42,
-      -1,    16,    25,    83,    31,    -1,    -1,    76,    77,    -1,
-      76,    31,    -1,    23,    82,    -1,    -1,    79,    82,    -1,
-      26,    -1,    27,    -1,     5,    31,    -1,     8,    31,    -1,
-      15,    31,    -1,    31,    -1,    81,    31,    -1,    -1,    14,
-      83,    -1,    84,    -1,    84,    34,    84,    -1,    84,    28,
-      84,    -1,    30,    83,    29,    -1,    35,    83,    -1,    83,
-      32,    83,    -1,    83,    33,    83,    -1,    26,    -1,    27,
-      -1,    -1,    26,    -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
-static const yytype_uint16 yyrline[] =
-{
-       0,   103,   103,   103,   105,   105,   107,   109,   110,   111,
-     112,   113,   114,   118,   122,   122,   122,   122,   122,   122,
-     122,   122,   126,   127,   128,   129,   130,   131,   135,   136,
-     142,   150,   156,   164,   174,   176,   177,   178,   179,   180,
-     181,   184,   192,   198,   208,   214,   220,   223,   225,   236,
-     237,   242,   251,   256,   264,   267,   269,   270,   271,   272,
-     273,   276,   282,   293,   299,   309,   311,   316,   324,   332,
-     335,   337,   338,   339,   344,   351,   358,   363,   371,   374,
-     376,   377,   378,   381,   389,   396,   403,   409,   416,   418,
-     419,   420,   423,   431,   433,   434,   437,   444,   446,   451,
-     452,   455,   456,   457,   461,   462,   465,   466,   469,   470,
-     471,   472,   473,   474,   475,   478,   479,   482,   483
-};
-#endif
-
-#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
-/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
-   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
-static const char *const yytname[] =
-{
-  "$end", "error", "$undefined", "T_MAINMENU", "T_MENU", "T_ENDMENU",
-  "T_SOURCE", "T_CHOICE", "T_ENDCHOICE", "T_COMMENT", "T_CONFIG",
-  "T_MENUCONFIG", "T_HELP", "T_HELPTEXT", "T_IF", "T_ENDIF", "T_DEPENDS",
-  "T_OPTIONAL", "T_PROMPT", "T_TYPE", "T_DEFAULT", "T_SELECT", "T_RANGE",
-  "T_VISIBLE", "T_OPTION", "T_ON", "T_WORD", "T_WORD_QUOTE", "T_UNEQUAL",
-  "T_CLOSE_PAREN", "T_OPEN_PAREN", "T_EOL", "T_OR", "T_AND", "T_EQUAL",
-  "T_NOT", "$accept", "input", "start", "stmt_list", "option_name",
-  "common_stmt", "option_error", "config_entry_start", "config_stmt",
-  "menuconfig_entry_start", "menuconfig_stmt", "config_option_list",
-  "config_option", "symbol_option", "symbol_option_list",
-  "symbol_option_arg", "choice", "choice_entry", "choice_end",
-  "choice_stmt", "choice_option_list", "choice_option", "choice_block",
-  "if_entry", "if_end", "if_stmt", "if_block", "mainmenu_stmt", "menu",
-  "menu_entry", "menu_end", "menu_stmt", "menu_block", "source_stmt",
-  "comment", "comment_stmt", "help_start", "help", "depends_list",
-  "depends", "visibility_list", "visible", "prompt_stmt_opt", "prompt",
-  "end", "nl", "if_expr", "expr", "symbol", "word_opt", 0
-};
-#endif
-
-# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
-   token YYLEX-NUM.  */
-static const yytype_uint16 yytoknum[] =
-{
-       0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290
-};
-# endif
-
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
-static const yytype_uint8 yyr1[] =
-{
-       0,    36,    37,    37,    38,    38,    39,    39,    39,    39,
-      39,    39,    39,    39,    40,    40,    40,    40,    40,    40,
-      40,    40,    41,    41,    41,    41,    41,    41,    42,    42,
-      43,    44,    45,    46,    47,    47,    47,    47,    47,    47,
-      47,    48,    48,    48,    48,    48,    49,    50,    50,    51,
-      51,    52,    53,    54,    55,    56,    56,    56,    56,    56,
-      56,    57,    57,    57,    57,    58,    58,    59,    60,    61,
-      62,    62,    62,    62,    63,    64,    65,    66,    67,    68,
-      68,    68,    68,    69,    70,    71,    72,    73,    74,    74,
-      74,    74,    75,    76,    76,    76,    77,    78,    78,    79,
-      79,    80,    80,    80,    81,    81,    82,    82,    83,    83,
-      83,    83,    83,    83,    83,    84,    84,    85,    85
-};
-
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
-static const yytype_uint8 yyr2[] =
-{
-       0,     2,     2,     1,     2,     1,     0,     2,     2,     2,
-       2,     4,     4,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     2,
-       3,     2,     3,     2,     0,     2,     2,     2,     2,     2,
-       2,     3,     4,     4,     4,     5,     3,     0,     3,     0,
-       2,     3,     2,     1,     3,     0,     2,     2,     2,     2,
-       2,     4,     3,     2,     4,     0,     2,     3,     1,     3,
-       0,     2,     2,     2,     3,     3,     3,     1,     3,     0,
-       2,     2,     2,     3,     3,     2,     2,     2,     0,     2,
-       2,     2,     4,     0,     2,     2,     2,     0,     2,     1,
-       1,     2,     2,     2,     1,     2,     0,     2,     1,     3,
-       3,     3,     2,     3,     3,     1,     1,     0,     1
-};
-
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
-   Performed when YYTABLE doesn't specify something else to do.  Zero
-   means the default is an error.  */
-static const yytype_uint8 yydefact[] =
-{
-       6,     0,   104,     0,     3,     0,     6,     6,    99,   100,
-       0,     1,     0,     0,     0,     0,   117,     0,     0,     0,
-       0,     0,     0,    14,    18,    15,    16,    20,    17,    19,
-      21,     0,    22,     0,     7,    34,    25,    34,    26,    55,
-      65,     8,    70,    23,    93,    79,     9,    27,    88,    24,
-      10,     0,   105,     2,    74,    13,     0,   101,     0,   118,
-       0,   102,     0,     0,     0,   115,   116,     0,     0,     0,
-     108,   103,     0,     0,     0,     0,     0,     0,     0,    88,
-       0,     0,    75,    83,    51,    84,    30,    32,     0,   112,
-       0,     0,    67,     0,     0,    11,    12,     0,     0,     0,
-       0,    97,     0,     0,     0,    47,     0,    40,    39,    35,
-      36,     0,    38,    37,     0,     0,    97,     0,    59,    60,
-      56,    58,    57,    66,    54,    53,    71,    73,    69,    72,
-      68,   106,    95,     0,    94,    80,    82,    78,    81,    77,
-      90,    91,    89,   111,   113,   114,   110,   109,    29,    86,
-       0,   106,     0,   106,   106,   106,     0,     0,     0,    87,
-      63,   106,     0,   106,     0,    96,     0,     0,    41,    98,
-       0,     0,   106,    49,    46,    28,     0,    62,     0,   107,
-      92,    42,    43,    44,     0,     0,    48,    61,    64,    45,
-      50
-};
-
-/* YYDEFGOTO[NTERM-NUM].  */
-static const yytype_int16 yydefgoto[] =
-{
-      -1,     3,     4,     5,    33,    34,   108,    35,    36,    37,
-      38,    74,   109,   110,   157,   186,    39,    40,   124,    41,
-      76,   120,    77,    42,   128,    43,    78,     6,    44,    45,
-     137,    46,    80,    47,    48,    49,   111,   112,    81,   113,
-      79,   134,   152,   153,    50,     7,   165,    69,    70,    60
-};
-
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
-   STATE-NUM.  */
-#define YYPACT_NINF -90
-static const yytype_int16 yypact[] =
-{
-       4,    42,   -90,    96,   -90,   111,   -90,    15,   -90,   -90,
-      75,   -90,    82,    42,   104,    42,   110,   107,    42,   115,
-     125,    -4,   121,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   162,   -90,   163,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   139,   -90,   -90,   138,   -90,   142,   -90,   143,   -90,
-     152,   -90,   164,   167,   168,   -90,   -90,    -4,    -4,    77,
-     -18,   -90,   177,   185,    33,    71,   195,   247,   236,    -2,
-     236,   171,   -90,   -90,   -90,   -90,   -90,   -90,    41,   -90,
-      -4,    -4,   138,    97,    97,   -90,   -90,   186,   187,   194,
-      42,    42,    -4,   196,    97,   -90,   219,   -90,   -90,   -90,
-     -90,   210,   -90,   -90,   204,    42,    42,   199,   -90,   -90,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   222,   -90,   223,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -90,   -90,   -90,   215,   -90,   -90,   -90,   -90,   -90,
-      -4,   222,   228,   222,    -5,   222,    97,    35,   229,   -90,
-     -90,   222,   232,   222,    -4,   -90,   135,   233,   -90,   -90,
-     234,   235,   222,   240,   -90,   -90,   237,   -90,   239,   -13,
-     -90,   -90,   -90,   -90,   244,    42,   -90,   -90,   -90,   -90,
-     -90
-};
-
-/* YYPGOTO[NTERM-NUM].  */
-static const yytype_int16 yypgoto[] =
-{
-     -90,   -90,   269,   271,   -90,    23,   -70,   -90,   -90,   -90,
-     -90,   243,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -48,
-     -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,   -90,
-     -90,   -20,   -90,   -90,   -90,   -90,   -90,   206,   205,   -68,
-     -90,   -90,   169,    -1,    27,    -7,   118,   -66,   -89,   -90
-};
-
-/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
-   positive, shift that token.  If negative, reduce the rule which
-   number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -86
-static const yytype_int16 yytable[] =
-{
-      10,    88,    89,    54,   146,   147,   119,     1,   122,   164,
-      93,   141,    56,   142,    58,   156,    94,    62,     1,    90,
-      91,   131,    65,    66,   144,   145,    67,    90,    91,   132,
-     127,    68,   136,   -31,    97,     2,   154,   -31,   -31,   -31,
-     -31,   -31,   -31,   -31,   -31,    98,    52,   -31,   -31,    99,
-     -31,   100,   101,   102,   103,   104,   -31,   105,   129,   106,
-     138,   173,    92,   141,   107,   142,   174,   172,     8,     9,
-     143,   -33,    97,    90,    91,   -33,   -33,   -33,   -33,   -33,
-     -33,   -33,   -33,    98,   166,   -33,   -33,    99,   -33,   100,
-     101,   102,   103,   104,   -33,   105,    11,   106,   179,   151,
-     123,   126,   107,   135,   125,   130,     2,   139,     2,    90,
-      91,    -5,    12,    55,   161,    13,    14,    15,    16,    17,
-      18,    19,    20,    65,    66,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    57,    59,    31,    61,    -4,
-      12,    63,    32,    13,    14,    15,    16,    17,    18,    19,
-      20,    64,    71,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    72,    73,    31,   180,    90,    91,    52,
-      32,   -85,    97,    82,    83,   -85,   -85,   -85,   -85,   -85,
-     -85,   -85,   -85,    84,   190,   -85,   -85,    99,   -85,   -85,
-     -85,   -85,   -85,   -85,   -85,    85,    97,   106,    86,    87,
-     -52,   -52,   140,   -52,   -52,   -52,   -52,    98,    95,   -52,
-     -52,    99,   114,   115,   116,   117,    96,   148,   149,   150,
-     158,   106,   155,   159,    97,   163,   118,   -76,   -76,   -76,
-     -76,   -76,   -76,   -76,   -76,   160,   164,   -76,   -76,    99,
-      13,    14,    15,    16,    17,    18,    19,    20,    91,   106,
-      21,    22,    14,    15,   140,    17,    18,    19,    20,   168,
-     175,    21,    22,   177,   181,   182,   183,    32,   187,   167,
-     188,   169,   170,   171,   185,   189,    53,    51,    32,   176,
-      75,   178,   121,     0,   133,   162,     0,     0,     0,     0,
-     184
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-90))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       1,    67,    68,    10,    93,    94,    76,     3,    76,    14,
-      28,    81,    13,    81,    15,   104,    34,    18,     3,    32,
-      33,    23,    26,    27,    90,    91,    30,    32,    33,    31,
-      78,    35,    80,     0,     1,    31,   102,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    31,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    78,    26,
-      80,    26,    69,   133,    31,   133,    31,   156,    26,    27,
-      29,     0,     1,    32,    33,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,   150,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,    26,   164,   100,
-      77,    78,    31,    80,    77,    78,    31,    80,    31,    32,
-      33,     0,     1,    31,   115,     4,     5,     6,     7,     8,
-       9,    10,    11,    26,    27,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    31,    26,    26,    31,     0,
-       1,    26,    31,     4,     5,     6,     7,     8,     9,    10,
-      11,    26,    31,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,     1,     1,    26,    31,    32,    33,    31,
-      31,     0,     1,    31,    31,     4,     5,     6,     7,     8,
-       9,    10,    11,    31,   185,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    31,     1,    26,    31,    31,
-       5,     6,    31,     8,     9,    10,    11,    12,    31,    14,
-      15,    16,    17,    18,    19,    20,    31,    31,    31,    25,
-       1,    26,    26,    13,     1,    26,    31,     4,     5,     6,
-       7,     8,     9,    10,    11,    31,    14,    14,    15,    16,
-       4,     5,     6,     7,     8,     9,    10,    11,    33,    26,
-      14,    15,     5,     6,    31,     8,     9,    10,    11,    31,
-      31,    14,    15,    31,    31,    31,    31,    31,    31,   151,
-      31,   153,   154,   155,    34,    31,     7,     6,    31,   161,
-      37,   163,    76,    -1,    79,   116,    -1,    -1,    -1,    -1,
-     172
-};
-
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
-   symbol of state STATE-NUM.  */
-static const yytype_uint8 yystos[] =
-{
-       0,     3,    31,    37,    38,    39,    63,    81,    26,    27,
-      79,     0,     1,     4,     5,     6,     7,     8,     9,    10,
-      11,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    26,    31,    40,    41,    43,    44,    45,    46,    52,
-      53,    55,    59,    61,    64,    65,    67,    69,    70,    71,
-      80,    39,    31,    38,    81,    31,    79,    31,    79,    26,
-      85,    31,    79,    26,    26,    26,    27,    30,    35,    83,
-      84,    31,     1,     1,    47,    47,    56,    58,    62,    76,
-      68,    74,    31,    31,    31,    31,    31,    31,    83,    83,
-      32,    33,    81,    28,    34,    31,    31,     1,    12,    16,
-      18,    19,    20,    21,    22,    24,    26,    31,    42,    48,
-      49,    72,    73,    75,    17,    18,    19,    20,    31,    42,
-      57,    73,    75,    41,    54,    80,    41,    55,    60,    67,
-      80,    23,    31,    74,    77,    41,    55,    66,    67,    80,
-      31,    42,    75,    29,    83,    83,    84,    84,    31,    31,
-      25,    79,    78,    79,    83,    26,    84,    50,     1,    13,
-      31,    79,    78,    26,    14,    82,    83,    82,    31,    82,
-      82,    82,    84,    26,    31,    31,    82,    31,    82,    83,
-      31,    31,    31,    31,    82,    34,    51,    31,    31,    31,
-      79
-};
-
-#define yyerrok		(yyerrstatus = 0)
-#define yyclearin	(yychar = YYEMPTY)
-#define YYEMPTY		(-2)
-#define YYEOF		0
-
-#define YYACCEPT	goto yyacceptlab
-#define YYABORT		goto yyabortlab
-#define YYERROR		goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror.  This remains here temporarily
-   to ease the transition to the new meaning of YYERROR, for GCC.
-   Once GCC version 2 has supplanted version 1, this can go.  However,
-   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
-   in Bison 2.4.2's NEWS entry, where a plan to phase it out is
-   discussed.  */
-
-#define YYFAIL		goto yyerrlab
-#if defined YYFAIL
-  /* This is here to suppress warnings from the GCC cpp's
-     -Wunused-macros.  Normally we don't worry about that warning, but
-     some users do, and we want to make it easy for users to remove
-     YYFAIL uses, which will produce warnings from Bison 2.5.  */
-#endif
-
-#define YYRECOVERING()  (!!yyerrstatus)
-
-#define YYBACKUP(Token, Value)					\
-do								\
-  if (yychar == YYEMPTY && yylen == 1)				\
-    {								\
-      yychar = (Token);						\
-      yylval = (Value);						\
-      YYPOPSTACK (1);						\
-      goto yybackup;						\
-    }								\
-  else								\
-    {								\
-      yyerror (YY_("syntax error: cannot back up")); \
-      YYERROR;							\
-    }								\
-while (YYID (0))
-
-
-#define YYTERROR	1
-#define YYERRCODE	256
-
-
-/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
-   If N is 0, then set CURRENT to the empty location which ends
-   the previous symbol: RHS[0] (always defined).  */
-
-#define YYRHSLOC(Rhs, K) ((Rhs)[K])
-#ifndef YYLLOC_DEFAULT
-# define YYLLOC_DEFAULT(Current, Rhs, N)				\
-    do									\
-      if (YYID (N))                                                    \
-	{								\
-	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
-	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
-	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
-	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
-	}								\
-      else								\
-	{								\
-	  (Current).first_line   = (Current).last_line   =		\
-	    YYRHSLOC (Rhs, 0).last_line;				\
-	  (Current).first_column = (Current).last_column =		\
-	    YYRHSLOC (Rhs, 0).last_column;				\
-	}								\
-    while (YYID (0))
-#endif
-
-
-/* This macro is provided for backward compatibility. */
-
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
-
-
-/* YYLEX -- calling `yylex' with the right arguments.  */
-
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
-
-/* Enable debugging if requested.  */
-#if YYDEBUG
-
-# ifndef YYFPRINTF
-#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
-#  define YYFPRINTF fprintf
-# endif
-
-# define YYDPRINTF(Args)			\
-do {						\
-  if (yydebug)					\
-    YYFPRINTF Args;				\
-} while (YYID (0))
-
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
-do {									  \
-  if (yydebug)								  \
-    {									  \
-      YYFPRINTF (stderr, "%s ", Title);					  \
-      yy_symbol_print (stderr,						  \
-		  Type, Value); \
-      YYFPRINTF (stderr, "\n");						  \
-    }									  \
-} while (YYID (0))
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
-{
-  if (!yyvaluep)
-    return;
-# ifdef YYPRINT
-  if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
-  YYUSE (yyoutput);
-# endif
-  switch (yytype)
-    {
-      default:
-	break;
-    }
-}
-
-
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
-    FILE *yyoutput;
-    int yytype;
-    YYSTYPE const * const yyvaluep;
-#endif
-{
-  if (yytype < YYNTOKENS)
-    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
-  else
-    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
-
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
-}
-
-/*------------------------------------------------------------------.
-| yy_stack_print -- Print the state stack from its BOTTOM up to its |
-| TOP (included).                                                   |
-`------------------------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
-    yytype_int16 *yybottom;
-    yytype_int16 *yytop;
-#endif
-{
-  YYFPRINTF (stderr, "Stack now");
-  for (; yybottom <= yytop; yybottom++)
-    {
-      int yybot = *yybottom;
-      YYFPRINTF (stderr, " %d", yybot);
-    }
-  YYFPRINTF (stderr, "\n");
-}
-
-# define YY_STACK_PRINT(Bottom, Top)				\
-do {								\
-  if (yydebug)							\
-    yy_stack_print ((Bottom), (Top));				\
-} while (YYID (0))
-
-
-/*------------------------------------------------.
-| Report that the YYRULE is going to be reduced.  |
-`------------------------------------------------*/
-
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
-    YYSTYPE *yyvsp;
-    int yyrule;
-#endif
-{
-  int yynrhs = yyr2[yyrule];
-  int yyi;
-  unsigned long int yylno = yyrline[yyrule];
-  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
-	     yyrule - 1, yylno);
-  /* The symbols being reduced.  */
-  for (yyi = 0; yyi < yynrhs; yyi++)
-    {
-      YYFPRINTF (stderr, "   $%d = ", yyi + 1);
-      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
-		       &(yyvsp[(yyi + 1) - (yynrhs)])
-		       		       );
-      YYFPRINTF (stderr, "\n");
-    }
-}
-
-# define YY_REDUCE_PRINT(Rule)		\
-do {					\
-  if (yydebug)				\
-    yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
-
-/* Nonzero means print parse trace.  It is left uninitialized so that
-   multiple parsers can coexist.  */
-int yydebug;
-#else /* !YYDEBUG */
-# define YYDPRINTF(Args)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
-# define YY_STACK_PRINT(Bottom, Top)
-# define YY_REDUCE_PRINT(Rule)
-#endif /* !YYDEBUG */
-
-
-/* YYINITDEPTH -- initial size of the parser's stacks.  */
-#ifndef	YYINITDEPTH
-# define YYINITDEPTH 200
-#endif
-
-/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
-   if the built-in stack extension method is used).
-
-   Do not make this value too large; the results are undefined if
-   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
-   evaluated with infinite-precision integer arithmetic.  */
-
-#ifndef YYMAXDEPTH
-# define YYMAXDEPTH 10000
-#endif
-
-
-#if YYERROR_VERBOSE
-
-# ifndef yystrlen
-#  if defined __GLIBC__ && defined _STRING_H
-#   define yystrlen strlen
-#  else
-/* Return the length of YYSTR.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static YYSIZE_T
-yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
-    const char *yystr;
-#endif
-{
-  YYSIZE_T yylen;
-  for (yylen = 0; yystr[yylen]; yylen++)
-    continue;
-  return yylen;
-}
-#  endif
-# endif
-
-# ifndef yystpcpy
-#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
-#   define yystpcpy stpcpy
-#  else
-/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
-   YYDEST.  */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static char *
-yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
-    char *yydest;
-    const char *yysrc;
-#endif
-{
-  char *yyd = yydest;
-  const char *yys = yysrc;
-
-  while ((*yyd++ = *yys++) != '\0')
-    continue;
-
-  return yyd - 1;
-}
-#  endif
-# endif
-
-# ifndef yytnamerr
-/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
-   quotes and backslashes, so that it's suitable for yyerror.  The
-   heuristic is that double-quoting is unnecessary unless the string
-   contains an apostrophe, a comma, or backslash (other than
-   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
-   null, do not copy; instead, return the length of what the result
-   would have been.  */
-static YYSIZE_T
-yytnamerr (char *yyres, const char *yystr)
-{
-  if (*yystr == '"')
-    {
-      YYSIZE_T yyn = 0;
-      char const *yyp = yystr;
-
-      for (;;)
-	switch (*++yyp)
-	  {
-	  case '\'':
-	  case ',':
-	    goto do_not_strip_quotes;
-
-	  case '\\':
-	    if (*++yyp != '\\')
-	      goto do_not_strip_quotes;
-	    /* Fall through.  */
-	  default:
-	    if (yyres)
-	      yyres[yyn] = *yyp;
-	    yyn++;
-	    break;
-
-	  case '"':
-	    if (yyres)
-	      yyres[yyn] = '\0';
-	    return yyn;
-	  }
-    do_not_strip_quotes: ;
-    }
-
-  if (! yyres)
-    return yystrlen (yystr);
-
-  return yystpcpy (yyres, yystr) - yyres;
-}
-# endif
-
-/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
-   about the unexpected token YYTOKEN for the state stack whose top is
-   YYSSP.
-
-   Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
-   not large enough to hold the message.  In that case, also set
-   *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
-   required number of bytes is too large to store.  */
-static int
-yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
-                yytype_int16 *yyssp, int yytoken)
-{
-  YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
-  YYSIZE_T yysize = yysize0;
-  YYSIZE_T yysize1;
-  enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
-  /* Internationalized format string. */
-  const char *yyformat = 0;
-  /* Arguments of yyformat. */
-  char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
-  /* Number of reported tokens (one for the "unexpected", one per
-     "expected"). */
-  int yycount = 0;
-
-  /* There are many possibilities here to consider:
-     - Assume YYFAIL is not used.  It's too flawed to consider.  See
-       <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
-       for details.  YYERROR is fine as it does not invoke this
-       function.
-     - If this state is a consistent state with a default action, then
-       the only way this function was invoked is if the default action
-       is an error action.  In that case, don't check for expected
-       tokens because there are none.
-     - The only way there can be no lookahead present (in yychar) is if
-       this state is a consistent state with a default action.  Thus,
-       detecting the absence of a lookahead is sufficient to determine
-       that there is no unexpected or expected token to report.  In that
-       case, just report a simple "syntax error".
-     - Don't assume there isn't a lookahead just because this state is a
-       consistent state with a default action.  There might have been a
-       previous inconsistent state, consistent state with a non-default
-       action, or user semantic action that manipulated yychar.
-     - Of course, the expected token list depends on states to have
-       correct lookahead information, and it depends on the parser not
-       to perform extra reductions after fetching a lookahead from the
-       scanner and before detecting a syntax error.  Thus, state merging
-       (from LALR or IELR) and default reductions corrupt the expected
-       token list.  However, the list is correct for canonical LR with
-       one exception: it will still contain any token that will not be
-       accepted due to an error action in a later state.
-  */
-  if (yytoken != YYEMPTY)
-    {
-      int yyn = yypact[*yyssp];
-      yyarg[yycount++] = yytname[yytoken];
-      if (!yypact_value_is_default (yyn))
-        {
-          /* Start YYX at -YYN if negative to avoid negative indexes in
-             YYCHECK.  In other words, skip the first -YYN actions for
-             this state because they are default actions.  */
-          int yyxbegin = yyn < 0 ? -yyn : 0;
-          /* Stay within bounds of both yycheck and yytname.  */
-          int yychecklim = YYLAST - yyn + 1;
-          int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
-          int yyx;
-
-          for (yyx = yyxbegin; yyx < yyxend; ++yyx)
-            if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
-                && !yytable_value_is_error (yytable[yyx + yyn]))
-              {
-                if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
-                  {
-                    yycount = 1;
-                    yysize = yysize0;
-                    break;
-                  }
-                yyarg[yycount++] = yytname[yyx];
-                yysize1 = yysize + yytnamerr (0, yytname[yyx]);
-                if (! (yysize <= yysize1
-                       && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-                  return 2;
-                yysize = yysize1;
-              }
-        }
-    }
-
-  switch (yycount)
-    {
-# define YYCASE_(N, S)                      \
-      case N:                               \
-        yyformat = S;                       \
-      break
-      YYCASE_(0, YY_("syntax error"));
-      YYCASE_(1, YY_("syntax error, unexpected %s"));
-      YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
-      YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
-      YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
-      YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
-# undef YYCASE_
-    }
-
-  yysize1 = yysize + yystrlen (yyformat);
-  if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
-    return 2;
-  yysize = yysize1;
-
-  if (*yymsg_alloc < yysize)
-    {
-      *yymsg_alloc = 2 * yysize;
-      if (! (yysize <= *yymsg_alloc
-             && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
-        *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
-      return 1;
-    }
-
-  /* Avoid sprintf, as that infringes on the user's name space.
-     Don't have undefined behavior even if the translation
-     produced a string with the wrong number of "%s"s.  */
-  {
-    char *yyp = *yymsg;
-    int yyi = 0;
-    while ((*yyp = *yyformat) != '\0')
-      if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
-        {
-          yyp += yytnamerr (yyp, yyarg[yyi++]);
-          yyformat += 2;
-        }
-      else
-        {
-          yyp++;
-          yyformat++;
-        }
-  }
-  return 0;
-}
-#endif /* YYERROR_VERBOSE */
-
-/*-----------------------------------------------.
-| Release the memory associated to this symbol.  |
-`-----------------------------------------------*/
-
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-static void
-yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
-    const char *yymsg;
-    int yytype;
-    YYSTYPE *yyvaluep;
-#endif
-{
-  YYUSE (yyvaluep);
-
-  if (!yymsg)
-    yymsg = "Deleting";
-  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
-
-  switch (yytype)
-    {
-      case 53: /* "choice_entry" */
-
-	{
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		(yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
-	if (current_menu == (yyvaluep->menu))
-		menu_end_menu();
-};
-
-	break;
-      case 59: /* "if_entry" */
-
-	{
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		(yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
-	if (current_menu == (yyvaluep->menu))
-		menu_end_menu();
-};
-
-	break;
-      case 65: /* "menu_entry" */
-
-	{
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		(yyvaluep->menu)->file->name, (yyvaluep->menu)->lineno);
-	if (current_menu == (yyvaluep->menu))
-		menu_end_menu();
-};
-
-	break;
-
-      default:
-	break;
-    }
-}
-
-
-/* Prevent warnings from -Wmissing-prototypes.  */
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-
-
-/* The lookahead symbol.  */
-int yychar;
-
-/* The semantic value of the lookahead symbol.  */
-YYSTYPE yylval;
-
-/* Number of syntax errors so far.  */
-int yynerrs;
-
-
-/*----------.
-| yyparse.  |
-`----------*/
-
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
-    void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
-     || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
-{
-    int yystate;
-    /* Number of tokens to shift before error messages enabled.  */
-    int yyerrstatus;
-
-    /* The stacks and their tools:
-       `yyss': related to states.
-       `yyvs': related to semantic values.
-
-       Refer to the stacks thru separate pointers, to allow yyoverflow
-       to reallocate them elsewhere.  */
-
-    /* The state stack.  */
-    yytype_int16 yyssa[YYINITDEPTH];
-    yytype_int16 *yyss;
-    yytype_int16 *yyssp;
-
-    /* The semantic value stack.  */
-    YYSTYPE yyvsa[YYINITDEPTH];
-    YYSTYPE *yyvs;
-    YYSTYPE *yyvsp;
-
-    YYSIZE_T yystacksize;
-
-  int yyn;
-  int yyresult;
-  /* Lookahead token as an internal (translated) token number.  */
-  int yytoken;
-  /* The variables used to return semantic value and location from the
-     action routines.  */
-  YYSTYPE yyval;
-
-#if YYERROR_VERBOSE
-  /* Buffer for error messages, and its allocated size.  */
-  char yymsgbuf[128];
-  char *yymsg = yymsgbuf;
-  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
-#endif
-
-#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
-
-  /* The number of symbols on the RHS of the reduced rule.
-     Keep to zero when no symbol should be popped.  */
-  int yylen = 0;
-
-  yytoken = 0;
-  yyss = yyssa;
-  yyvs = yyvsa;
-  yystacksize = YYINITDEPTH;
-
-  YYDPRINTF ((stderr, "Starting parse\n"));
-
-  yystate = 0;
-  yyerrstatus = 0;
-  yynerrs = 0;
-  yychar = YYEMPTY; /* Cause a token to be read.  */
-
-  /* Initialize stack pointers.
-     Waste one element of value and location stack
-     so that they stay on the same level as the state stack.
-     The wasted elements are never initialized.  */
-  yyssp = yyss;
-  yyvsp = yyvs;
-
-  goto yysetstate;
-
-/*------------------------------------------------------------.
-| yynewstate -- Push a new state, which is found in yystate.  |
-`------------------------------------------------------------*/
- yynewstate:
-  /* In all cases, when you get here, the value and location stacks
-     have just been pushed.  So pushing a state here evens the stacks.  */
-  yyssp++;
-
- yysetstate:
-  *yyssp = yystate;
-
-  if (yyss + yystacksize - 1 <= yyssp)
-    {
-      /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
-
-#ifdef yyoverflow
-      {
-	/* Give user a chance to reallocate the stack.  Use copies of
-	   these so that the &'s don't force the real ones into
-	   memory.  */
-	YYSTYPE *yyvs1 = yyvs;
-	yytype_int16 *yyss1 = yyss;
-
-	/* Each stack pointer address is followed by the size of the
-	   data in use in that stack, in bytes.  This used to be a
-	   conditional around just the two extra args, but that might
-	   be undefined if yyoverflow is a macro.  */
-	yyoverflow (YY_("memory exhausted"),
-		    &yyss1, yysize * sizeof (*yyssp),
-		    &yyvs1, yysize * sizeof (*yyvsp),
-		    &yystacksize);
-
-	yyss = yyss1;
-	yyvs = yyvs1;
-      }
-#else /* no yyoverflow */
-# ifndef YYSTACK_RELOCATE
-      goto yyexhaustedlab;
-# else
-      /* Extend the stack our own way.  */
-      if (YYMAXDEPTH <= yystacksize)
-	goto yyexhaustedlab;
-      yystacksize *= 2;
-      if (YYMAXDEPTH < yystacksize)
-	yystacksize = YYMAXDEPTH;
-
-      {
-	yytype_int16 *yyss1 = yyss;
-	union yyalloc *yyptr =
-	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
-	if (! yyptr)
-	  goto yyexhaustedlab;
-	YYSTACK_RELOCATE (yyss_alloc, yyss);
-	YYSTACK_RELOCATE (yyvs_alloc, yyvs);
-#  undef YYSTACK_RELOCATE
-	if (yyss1 != yyssa)
-	  YYSTACK_FREE (yyss1);
-      }
-# endif
-#endif /* no yyoverflow */
-
-      yyssp = yyss + yysize - 1;
-      yyvsp = yyvs + yysize - 1;
-
-      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-		  (unsigned long int) yystacksize));
-
-      if (yyss + yystacksize - 1 <= yyssp)
-	YYABORT;
-    }
-
-  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
-
-  if (yystate == YYFINAL)
-    YYACCEPT;
-
-  goto yybackup;
-
-/*-----------.
-| yybackup.  |
-`-----------*/
-yybackup:
-
-  /* Do appropriate processing given the current state.  Read a
-     lookahead token if we need one and don't already have one.  */
-
-  /* First try to decide what to do without reference to lookahead token.  */
-  yyn = yypact[yystate];
-  if (yypact_value_is_default (yyn))
-    goto yydefault;
-
-  /* Not known => get a lookahead token if don't already have one.  */
-
-  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
-  if (yychar == YYEMPTY)
-    {
-      YYDPRINTF ((stderr, "Reading a token: "));
-      yychar = YYLEX;
-    }
-
-  if (yychar <= YYEOF)
-    {
-      yychar = yytoken = YYEOF;
-      YYDPRINTF ((stderr, "Now at end of input.\n"));
-    }
-  else
-    {
-      yytoken = YYTRANSLATE (yychar);
-      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
-    }
-
-  /* If the proper action on seeing token YYTOKEN is to reduce or to
-     detect an error, take that action.  */
-  yyn += yytoken;
-  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
-    goto yydefault;
-  yyn = yytable[yyn];
-  if (yyn <= 0)
-    {
-      if (yytable_value_is_error (yyn))
-        goto yyerrlab;
-      yyn = -yyn;
-      goto yyreduce;
-    }
-
-  /* Count tokens shifted since error; after three, turn off error
-     status.  */
-  if (yyerrstatus)
-    yyerrstatus--;
-
-  /* Shift the lookahead token.  */
-  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
-
-  /* Discard the shifted token.  */
-  yychar = YYEMPTY;
-
-  yystate = yyn;
-  *++yyvsp = yylval;
-
-  goto yynewstate;
-
-
-/*-----------------------------------------------------------.
-| yydefault -- do the default action for the current state.  |
-`-----------------------------------------------------------*/
-yydefault:
-  yyn = yydefact[yystate];
-  if (yyn == 0)
-    goto yyerrlab;
-  goto yyreduce;
-
-
-/*-----------------------------.
-| yyreduce -- Do a reduction.  |
-`-----------------------------*/
-yyreduce:
-  /* yyn is the number of a rule to reduce with.  */
-  yylen = yyr2[yyn];
-
-  /* If YYLEN is nonzero, implement the default value of the action:
-     `$$ = $1'.
-
-     Otherwise, the following line sets YYVAL to garbage.
-     This behavior is undocumented and Bison
-     users should not rely upon it.  Assigning to YYVAL
-     unconditionally makes the parser a bit smaller, and it avoids a
-     GCC warning that YYVAL may be used uninitialized.  */
-  yyval = yyvsp[1-yylen];
-
-
-  YY_REDUCE_PRINT (yyn);
-  switch (yyn)
-    {
-        case 10:
-
-    { zconf_error("unexpected end statement"); }
-    break;
-
-  case 11:
-
-    { zconf_error("unknown statement \"%s\"", (yyvsp[(2) - (4)].string)); }
-    break;
-
-  case 12:
-
-    {
-	zconf_error("unexpected option \"%s\"", kconf_id_strings + (yyvsp[(2) - (4)].id)->name);
-}
-    break;
-
-  case 13:
-
-    { zconf_error("invalid statement"); }
-    break;
-
-  case 28:
-
-    { zconf_error("unknown option \"%s\"", (yyvsp[(1) - (3)].string)); }
-    break;
-
-  case 29:
-
-    { zconf_error("invalid option"); }
-    break;
-
-  case 30:
-
-    {
-	struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 31:
-
-    {
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 32:
-
-    {
-	struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 33:
-
-    {
-	if (current_entry->prompt)
-		current_entry->prompt->type = P_MENU;
-	else
-		zconfprint("warning: menuconfig statement without prompt");
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 41:
-
-    {
-	menu_set_type((yyvsp[(1) - (3)].id)->stype);
-	printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		(yyvsp[(1) - (3)].id)->stype);
-}
-    break;
-
-  case 42:
-
-    {
-	menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 43:
-
-    {
-	menu_add_expr(P_DEFAULT, (yyvsp[(2) - (4)].expr), (yyvsp[(3) - (4)].expr));
-	if ((yyvsp[(1) - (4)].id)->stype != S_UNKNOWN)
-		menu_set_type((yyvsp[(1) - (4)].id)->stype);
-	printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		(yyvsp[(1) - (4)].id)->stype);
-}
-    break;
-
-  case 44:
-
-    {
-	menu_add_symbol(P_SELECT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 45:
-
-    {
-	menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,(yyvsp[(2) - (5)].symbol), (yyvsp[(3) - (5)].symbol)), (yyvsp[(4) - (5)].expr));
-	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 48:
-
-    {
-	const struct kconf_id *id = kconf_id_lookup((yyvsp[(2) - (3)].string), strlen((yyvsp[(2) - (3)].string)));
-	if (id && id->flags & TF_OPTION)
-		menu_add_option(id->token, (yyvsp[(3) - (3)].string));
-	else
-		zconfprint("warning: ignoring unknown option %s", (yyvsp[(2) - (3)].string));
-	free((yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 49:
-
-    { (yyval.string) = NULL; }
-    break;
-
-  case 50:
-
-    { (yyval.string) = (yyvsp[(2) - (2)].string); }
-    break;
-
-  case 51:
-
-    {
-	struct symbol *sym = sym_lookup((yyvsp[(2) - (3)].string), SYMBOL_CHOICE);
-	sym->flags |= SYMBOL_AUTO;
-	menu_add_entry(sym);
-	menu_add_expr(P_CHOICE, NULL, NULL);
-	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 52:
-
-    {
-	(yyval.menu) = menu_add_menu();
-}
-    break;
-
-  case 53:
-
-    {
-	if (zconf_endtoken((yyvsp[(1) - (1)].id), T_CHOICE, T_ENDCHOICE)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
-	}
-}
-    break;
-
-  case 61:
-
-    {
-	menu_add_prompt(P_PROMPT, (yyvsp[(2) - (4)].string), (yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 62:
-
-    {
-	if ((yyvsp[(1) - (3)].id)->stype == S_BOOLEAN || (yyvsp[(1) - (3)].id)->stype == S_TRISTATE) {
-		menu_set_type((yyvsp[(1) - (3)].id)->stype);
-		printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-			zconf_curname(), zconf_lineno(),
-			(yyvsp[(1) - (3)].id)->stype);
-	} else
-		YYERROR;
-}
-    break;
-
-  case 63:
-
-    {
-	current_entry->sym->flags |= SYMBOL_OPTIONAL;
-	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 64:
-
-    {
-	if ((yyvsp[(1) - (4)].id)->stype == S_UNKNOWN) {
-		menu_add_symbol(P_DEFAULT, sym_lookup((yyvsp[(2) - (4)].string), 0), (yyvsp[(3) - (4)].expr));
-		printd(DEBUG_PARSE, "%s:%d:default\n",
-			zconf_curname(), zconf_lineno());
-	} else
-		YYERROR;
-}
-    break;
-
-  case 67:
-
-    {
-	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
-	menu_add_entry(NULL);
-	menu_add_dep((yyvsp[(2) - (3)].expr));
-	(yyval.menu) = menu_add_menu();
-}
-    break;
-
-  case 68:
-
-    {
-	if (zconf_endtoken((yyvsp[(1) - (1)].id), T_IF, T_ENDIF)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
-	}
-}
-    break;
-
-  case 74:
-
-    {
-	menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
-}
-    break;
-
-  case 75:
-
-    {
-	menu_add_entry(NULL);
-	menu_add_prompt(P_MENU, (yyvsp[(2) - (3)].string), NULL);
-	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 76:
-
-    {
-	(yyval.menu) = menu_add_menu();
-}
-    break;
-
-  case 77:
-
-    {
-	if (zconf_endtoken((yyvsp[(1) - (1)].id), T_MENU, T_ENDMENU)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
-	}
-}
-    break;
-
-  case 83:
-
-    {
-	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), (yyvsp[(2) - (3)].string));
-	zconf_nextfile((yyvsp[(2) - (3)].string));
-}
-    break;
-
-  case 84:
-
-    {
-	menu_add_entry(NULL);
-	menu_add_prompt(P_COMMENT, (yyvsp[(2) - (3)].string), NULL);
-	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 85:
-
-    {
-	menu_end_entry();
-}
-    break;
-
-  case 86:
-
-    {
-	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
-	zconf_starthelp();
-}
-    break;
-
-  case 87:
-
-    {
-	current_entry->help = (yyvsp[(2) - (2)].string);
-}
-    break;
-
-  case 92:
-
-    {
-	menu_add_dep((yyvsp[(3) - (4)].expr));
-	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
-}
-    break;
-
-  case 96:
-
-    {
-	menu_add_visibility((yyvsp[(2) - (2)].expr));
-}
-    break;
-
-  case 98:
-
-    {
-	menu_add_prompt(P_PROMPT, (yyvsp[(1) - (2)].string), (yyvsp[(2) - (2)].expr));
-}
-    break;
-
-  case 101:
-
-    { (yyval.id) = (yyvsp[(1) - (2)].id); }
-    break;
-
-  case 102:
-
-    { (yyval.id) = (yyvsp[(1) - (2)].id); }
-    break;
-
-  case 103:
-
-    { (yyval.id) = (yyvsp[(1) - (2)].id); }
-    break;
-
-  case 106:
-
-    { (yyval.expr) = NULL; }
-    break;
-
-  case 107:
-
-    { (yyval.expr) = (yyvsp[(2) - (2)].expr); }
-    break;
-
-  case 108:
-
-    { (yyval.expr) = expr_alloc_symbol((yyvsp[(1) - (1)].symbol)); }
-    break;
-
-  case 109:
-
-    { (yyval.expr) = expr_alloc_comp(E_EQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); }
-    break;
-
-  case 110:
-
-    { (yyval.expr) = expr_alloc_comp(E_UNEQUAL, (yyvsp[(1) - (3)].symbol), (yyvsp[(3) - (3)].symbol)); }
-    break;
-
-  case 111:
-
-    { (yyval.expr) = (yyvsp[(2) - (3)].expr); }
-    break;
-
-  case 112:
-
-    { (yyval.expr) = expr_alloc_one(E_NOT, (yyvsp[(2) - (2)].expr)); }
-    break;
-
-  case 113:
-
-    { (yyval.expr) = expr_alloc_two(E_OR, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
-    break;
-
-  case 114:
-
-    { (yyval.expr) = expr_alloc_two(E_AND, (yyvsp[(1) - (3)].expr), (yyvsp[(3) - (3)].expr)); }
-    break;
-
-  case 115:
-
-    { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), 0); free((yyvsp[(1) - (1)].string)); }
-    break;
-
-  case 116:
-
-    { (yyval.symbol) = sym_lookup((yyvsp[(1) - (1)].string), SYMBOL_CONST); free((yyvsp[(1) - (1)].string)); }
-    break;
-
-  case 117:
-
-    { (yyval.string) = NULL; }
-    break;
-
-
-
-      default: break;
-    }
-  /* User semantic actions sometimes alter yychar, and that requires
-     that yytoken be updated with the new translation.  We take the
-     approach of translating immediately before every use of yytoken.
-     One alternative is translating here after every semantic action,
-     but that translation would be missed if the semantic action invokes
-     YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
-     if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
-     incorrect destructor might then be invoked immediately.  In the
-     case of YYERROR or YYBACKUP, subsequent parser actions might lead
-     to an incorrect destructor call or verbose syntax error message
-     before the lookahead is translated.  */
-  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
-
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-
-  *++yyvsp = yyval;
-
-  /* Now `shift' the result of the reduction.  Determine what state
-     that goes to, based on the state we popped back to and the rule
-     number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
-
-  goto yynewstate;
-
-
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
-yyerrlab:
-  /* Make sure we have latest lookahead translation.  See comments at
-     user semantic actions for why this is necessary.  */
-  yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
-
-  /* If not already recovering from an error, report this error.  */
-  if (!yyerrstatus)
-    {
-      ++yynerrs;
-#if ! YYERROR_VERBOSE
-      yyerror (YY_("syntax error"));
-#else
-# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
-                                        yyssp, yytoken)
-      {
-        char const *yymsgp = YY_("syntax error");
-        int yysyntax_error_status;
-        yysyntax_error_status = YYSYNTAX_ERROR;
-        if (yysyntax_error_status == 0)
-          yymsgp = yymsg;
-        else if (yysyntax_error_status == 1)
-          {
-            if (yymsg != yymsgbuf)
-              YYSTACK_FREE (yymsg);
-            yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
-            if (!yymsg)
-              {
-                yymsg = yymsgbuf;
-                yymsg_alloc = sizeof yymsgbuf;
-                yysyntax_error_status = 2;
-              }
-            else
-              {
-                yysyntax_error_status = YYSYNTAX_ERROR;
-                yymsgp = yymsg;
-              }
-          }
-        yyerror (yymsgp);
-        if (yysyntax_error_status == 2)
-          goto yyexhaustedlab;
-      }
-# undef YYSYNTAX_ERROR
-#endif
-    }
-
-
-
-  if (yyerrstatus == 3)
-    {
-      /* If just tried and failed to reuse lookahead token after an
-	 error, discard it.  */
-
-      if (yychar <= YYEOF)
-	{
-	  /* Return failure if at end of input.  */
-	  if (yychar == YYEOF)
-	    YYABORT;
-	}
-      else
-	{
-	  yydestruct ("Error: discarding",
-		      yytoken, &yylval);
-	  yychar = YYEMPTY;
-	}
-    }
-
-  /* Else will try to reuse lookahead token after shifting the error
-     token.  */
-  goto yyerrlab1;
-
-
-/*---------------------------------------------------.
-| yyerrorlab -- error raised explicitly by YYERROR.  |
-`---------------------------------------------------*/
-yyerrorlab:
-
-  /* Pacify compilers like GCC when the user code never invokes
-     YYERROR and the label yyerrorlab therefore never appears in user
-     code.  */
-  if (/*CONSTCOND*/ 0)
-     goto yyerrorlab;
-
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYERROR.  */
-  YYPOPSTACK (yylen);
-  yylen = 0;
-  YY_STACK_PRINT (yyss, yyssp);
-  yystate = *yyssp;
-  goto yyerrlab1;
-
-
-/*-------------------------------------------------------------.
-| yyerrlab1 -- common code for both syntax error and YYERROR.  |
-`-------------------------------------------------------------*/
-yyerrlab1:
-  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
-
-  for (;;)
-    {
-      yyn = yypact[yystate];
-      if (!yypact_value_is_default (yyn))
-	{
-	  yyn += YYTERROR;
-	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
-	    {
-	      yyn = yytable[yyn];
-	      if (0 < yyn)
-		break;
-	    }
-	}
-
-      /* Pop the current state because it cannot handle the error token.  */
-      if (yyssp == yyss)
-	YYABORT;
-
-
-      yydestruct ("Error: popping",
-		  yystos[yystate], yyvsp);
-      YYPOPSTACK (1);
-      yystate = *yyssp;
-      YY_STACK_PRINT (yyss, yyssp);
-    }
-
-  *++yyvsp = yylval;
-
-
-  /* Shift the error token.  */
-  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
-
-  yystate = yyn;
-  goto yynewstate;
-
-
-/*-------------------------------------.
-| yyacceptlab -- YYACCEPT comes here.  |
-`-------------------------------------*/
-yyacceptlab:
-  yyresult = 0;
-  goto yyreturn;
-
-/*-----------------------------------.
-| yyabortlab -- YYABORT comes here.  |
-`-----------------------------------*/
-yyabortlab:
-  yyresult = 1;
-  goto yyreturn;
-
-#if !defined(yyoverflow) || YYERROR_VERBOSE
-/*-------------------------------------------------.
-| yyexhaustedlab -- memory exhaustion comes here.  |
-`-------------------------------------------------*/
-yyexhaustedlab:
-  yyerror (YY_("memory exhausted"));
-  yyresult = 2;
-  /* Fall through.  */
-#endif
-
-yyreturn:
-  if (yychar != YYEMPTY)
-    {
-      /* Make sure we have latest lookahead translation.  See comments at
-         user semantic actions for why this is necessary.  */
-      yytoken = YYTRANSLATE (yychar);
-      yydestruct ("Cleanup: discarding lookahead",
-                  yytoken, &yylval);
-    }
-  /* Do not reclaim the symbols of the rule which action triggered
-     this YYABORT or YYACCEPT.  */
-  YYPOPSTACK (yylen);
-  YY_STACK_PRINT (yyss, yyssp);
-  while (yyssp != yyss)
-    {
-      yydestruct ("Cleanup: popping",
-		  yystos[*yyssp], yyvsp);
-      YYPOPSTACK (1);
-    }
-#ifndef yyoverflow
-  if (yyss != yyssa)
-    YYSTACK_FREE (yyss);
-#endif
-#if YYERROR_VERBOSE
-  if (yymsg != yymsgbuf)
-    YYSTACK_FREE (yymsg);
-#endif
-  /* Make sure YYID is used.  */
-  return YYID (yyresult);
-}
-
-
-
-
-
-void conf_parse(const char *name)
-{
-	struct symbol *sym;
-	int i;
-
-	zconf_initscan(name);
-
-	sym_init();
-	_menu_init();
-	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
-
-	if (getenv("ZCONF_DEBUG"))
-		zconfdebug = 1;
-	zconfparse();
-	if (zconfnerrs)
-		exit(1);
-	if (!modules_sym)
-		modules_sym = sym_find( "n" );
-
-	rootmenu.prompt->text = _(rootmenu.prompt->text);
-	rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
-
-	menu_finalize(&rootmenu);
-	for_all_symbols(i, sym) {
-		if (sym_check_deps(sym))
-			zconfnerrs++;
-        }
-	if (zconfnerrs)
-		exit(1);
-	sym_set_change_count(1);
-}
-
-static const char *zconf_tokenname(int token)
-{
-	switch (token) {
-	case T_MENU:		return "menu";
-	case T_ENDMENU:		return "endmenu";
-	case T_CHOICE:		return "choice";
-	case T_ENDCHOICE:	return "endchoice";
-	case T_IF:		return "if";
-	case T_ENDIF:		return "endif";
-	case T_DEPENDS:		return "depends";
-	case T_VISIBLE:		return "visible";
-	}
-	return "<token>";
-}
-
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
-{
-	if (id->token != endtoken) {
-		zconf_error("unexpected '%s' within %s block",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	if (current_menu->file != current_file) {
-		zconf_error("'%s' in different file than '%s'",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		fprintf(stderr, "%s:%d: location of the '%s'\n",
-			current_menu->file->name, current_menu->lineno,
-			zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	return true;
-}
-
-static void zconfprint(const char *err, ...)
-{
-	va_list ap;
-
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconf_error(const char *err, ...)
-{
-	va_list ap;
-
-	zconfnerrs++;
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconferror(const char *err)
-{
-	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
-}
-
-static void print_quoted_string(FILE *out, const char *str)
-{
-	const char *p;
-	int len;
-
-	putc('"', out);
-	while ((p = strchr(str, '"'))) {
-		len = p - str;
-		if (len)
-			fprintf(out, "%.*s", len, str);
-		fputs("\\\"", out);
-		str = p + 1;
-	}
-	fputs(str, out);
-	putc('"', out);
-}
-
-static void print_symbol(FILE *out, struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	struct property *prop;
-
-	if (sym_is_choice(sym))
-		fprintf(out, "\nchoice\n");
-	else
-		fprintf(out, "\nconfig %s\n", sym->name);
-	switch (sym->type) {
-	case S_BOOLEAN:
-		fputs("  boolean\n", out);
-		break;
-	case S_TRISTATE:
-		fputs("  tristate\n", out);
-		break;
-	case S_STRING:
-		fputs("  string\n", out);
-		break;
-	case S_INT:
-		fputs("  integer\n", out);
-		break;
-	case S_HEX:
-		fputs("  hex\n", out);
-		break;
-	default:
-		fputs("  ???\n", out);
-		break;
-	}
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->menu != menu)
-			continue;
-		switch (prop->type) {
-		case P_PROMPT:
-			fputs("  prompt ", out);
-			print_quoted_string(out, prop->text);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_DEFAULT:
-			fputs( "  default ", out);
-			expr_fprint(prop->expr, out);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_CHOICE:
-			fputs("  #choice value\n", out);
-			break;
-		case P_SELECT:
-			fputs( "  select ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_RANGE:
-			fputs( "  range ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_MENU:
-			fputs( "  menu ", out);
-			print_quoted_string(out, prop->text);
-			fputc('\n', out);
-			break;
-		default:
-			fprintf(out, "  unknown prop %d!\n", prop->type);
-			break;
-		}
-	}
-	if (menu->help) {
-		int len = strlen(menu->help);
-		while (menu->help[--len] == '\n')
-			menu->help[len] = 0;
-		fprintf(out, "  help\n%s\n", menu->help);
-	}
-}
-
-void zconfdump(FILE *out)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct menu *menu;
-
-	menu = rootmenu.list;
-	while (menu) {
-		if ((sym = menu->sym))
-			print_symbol(out, menu);
-		else if ((prop = menu->prompt)) {
-			switch (prop->type) {
-			case P_COMMENT:
-				fputs("\ncomment ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			case P_MENU:
-				fputs("\nmenu ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			default:
-				;
-			}
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs("  depends ", out);
-				expr_fprint(prop->visible.expr, out);
-				fputc('\n', out);
-			}
-		}
-
-		if (menu->list)
-			menu = menu->list;
-		else if (menu->next)
-			menu = menu->next;
-		else while ((menu = menu->parent)) {
-			if (menu->prompt && menu->prompt->type == P_MENU)
-				fputs("\nendmenu\n", out);
-			if (menu->next) {
-				menu = menu->next;
-				break;
-			}
-		}
-	}
-}
-
-#include "zconf.lex.c"
-#include "util.c"
-#include "confdata.c"
-#include "expr.c"
-#include "symbol.c"
-#include "menu.c"
-
diff --git a/support/kconfig/zconf.y b/support/kconfig/zconf.y
deleted file mode 100644
index 9b02d02..0000000
--- a/support/kconfig/zconf.y
+++ /dev/null
@@ -1,733 +0,0 @@
-%{
-/*
- * Copyright (C) 2002 Roman Zippel <zippel@linux-m68k.org>
- * Released under the terms of the GNU GPL v2.0.
- */
-
-#include <ctype.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdbool.h>
-
-#include "lkc.h"
-
-#define printd(mask, fmt...) if (cdebug & (mask)) printf(fmt)
-
-#define PRINTD		0x0001
-#define DEBUG_PARSE	0x0002
-
-int cdebug = PRINTD;
-
-extern int zconflex(void);
-static void zconfprint(const char *err, ...);
-static void zconf_error(const char *err, ...);
-static void zconferror(const char *err);
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken);
-
-struct symbol *symbol_hash[SYMBOL_HASHSIZE];
-
-static struct menu *current_menu, *current_entry;
-
-%}
-%expect 30
-
-%union
-{
-	char *string;
-	struct file *file;
-	struct symbol *symbol;
-	struct expr *expr;
-	struct menu *menu;
-	const struct kconf_id *id;
-}
-
-%token <id>T_MAINMENU
-%token <id>T_MENU
-%token <id>T_ENDMENU
-%token <id>T_SOURCE
-%token <id>T_CHOICE
-%token <id>T_ENDCHOICE
-%token <id>T_COMMENT
-%token <id>T_CONFIG
-%token <id>T_MENUCONFIG
-%token <id>T_HELP
-%token <string> T_HELPTEXT
-%token <id>T_IF
-%token <id>T_ENDIF
-%token <id>T_DEPENDS
-%token <id>T_OPTIONAL
-%token <id>T_PROMPT
-%token <id>T_TYPE
-%token <id>T_DEFAULT
-%token <id>T_SELECT
-%token <id>T_RANGE
-%token <id>T_VISIBLE
-%token <id>T_OPTION
-%token <id>T_ON
-%token <string> T_WORD
-%token <string> T_WORD_QUOTE
-%token T_UNEQUAL
-%token T_CLOSE_PAREN
-%token T_OPEN_PAREN
-%token T_EOL
-
-%left T_OR
-%left T_AND
-%left T_EQUAL T_UNEQUAL
-%nonassoc T_NOT
-
-%type <string> prompt
-%type <symbol> symbol
-%type <expr> expr
-%type <expr> if_expr
-%type <id> end
-%type <id> option_name
-%type <menu> if_entry menu_entry choice_entry
-%type <string> symbol_option_arg word_opt
-
-%destructor {
-	fprintf(stderr, "%s:%d: missing end statement for this entry\n",
-		$$->file->name, $$->lineno);
-	if (current_menu == $$)
-		menu_end_menu();
-} if_entry menu_entry choice_entry
-
-%{
-/* Include zconf.hash.c here so it can see the token constants. */
-#include "zconf.hash.c"
-%}
-
-%%
-input: nl start | start;
-
-start: mainmenu_stmt stmt_list | stmt_list;
-
-stmt_list:
-	  /* empty */
-	| stmt_list common_stmt
-	| stmt_list choice_stmt
-	| stmt_list menu_stmt
-	| stmt_list end			{ zconf_error("unexpected end statement"); }
-	| stmt_list T_WORD error T_EOL	{ zconf_error("unknown statement \"%s\"", $2); }
-	| stmt_list option_name error T_EOL
-{
-	zconf_error("unexpected option \"%s\"", kconf_id_strings + $2->name);
-}
-	| stmt_list error T_EOL		{ zconf_error("invalid statement"); }
-;
-
-option_name:
-	T_DEPENDS | T_PROMPT | T_TYPE | T_SELECT | T_OPTIONAL | T_RANGE | T_DEFAULT | T_VISIBLE
-;
-
-common_stmt:
-	  T_EOL
-	| if_stmt
-	| comment_stmt
-	| config_stmt
-	| menuconfig_stmt
-	| source_stmt
-;
-
-option_error:
-	  T_WORD error T_EOL		{ zconf_error("unknown option \"%s\"", $1); }
-	| error T_EOL			{ zconf_error("invalid option"); }
-;
-
-
-/* config/menuconfig entry */
-
-config_entry_start: T_CONFIG T_WORD T_EOL
-{
-	struct symbol *sym = sym_lookup($2, 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:config %s\n", zconf_curname(), zconf_lineno(), $2);
-};
-
-config_stmt: config_entry_start config_option_list
-{
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-};
-
-menuconfig_entry_start: T_MENUCONFIG T_WORD T_EOL
-{
-	struct symbol *sym = sym_lookup($2, 0);
-	sym->flags |= SYMBOL_OPTIONAL;
-	menu_add_entry(sym);
-	printd(DEBUG_PARSE, "%s:%d:menuconfig %s\n", zconf_curname(), zconf_lineno(), $2);
-};
-
-menuconfig_stmt: menuconfig_entry_start config_option_list
-{
-	if (current_entry->prompt)
-		current_entry->prompt->type = P_MENU;
-	else
-		zconfprint("warning: menuconfig statement without prompt");
-	menu_end_entry();
-	printd(DEBUG_PARSE, "%s:%d:endconfig\n", zconf_curname(), zconf_lineno());
-};
-
-config_option_list:
-	  /* empty */
-	| config_option_list config_option
-	| config_option_list symbol_option
-	| config_option_list depends
-	| config_option_list help
-	| config_option_list option_error
-	| config_option_list T_EOL
-;
-
-config_option: T_TYPE prompt_stmt_opt T_EOL
-{
-	menu_set_type($1->stype);
-	printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		$1->stype);
-};
-
-config_option: T_PROMPT prompt if_expr T_EOL
-{
-	menu_add_prompt(P_PROMPT, $2, $3);
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_DEFAULT expr if_expr T_EOL
-{
-	menu_add_expr(P_DEFAULT, $2, $3);
-	if ($1->stype != S_UNKNOWN)
-		menu_set_type($1->stype);
-	printd(DEBUG_PARSE, "%s:%d:default(%u)\n",
-		zconf_curname(), zconf_lineno(),
-		$1->stype);
-};
-
-config_option: T_SELECT T_WORD if_expr T_EOL
-{
-	menu_add_symbol(P_SELECT, sym_lookup($2, 0), $3);
-	printd(DEBUG_PARSE, "%s:%d:select\n", zconf_curname(), zconf_lineno());
-};
-
-config_option: T_RANGE symbol symbol if_expr T_EOL
-{
-	menu_add_expr(P_RANGE, expr_alloc_comp(E_RANGE,$2, $3), $4);
-	printd(DEBUG_PARSE, "%s:%d:range\n", zconf_curname(), zconf_lineno());
-};
-
-symbol_option: T_OPTION symbol_option_list T_EOL
-;
-
-symbol_option_list:
-	  /* empty */
-	| symbol_option_list T_WORD symbol_option_arg
-{
-	const struct kconf_id *id = kconf_id_lookup($2, strlen($2));
-	if (id && id->flags & TF_OPTION)
-		menu_add_option(id->token, $3);
-	else
-		zconfprint("warning: ignoring unknown option %s", $2);
-	free($2);
-};
-
-symbol_option_arg:
-	  /* empty */		{ $$ = NULL; }
-	| T_EQUAL prompt	{ $$ = $2; }
-;
-
-/* choice entry */
-
-choice: T_CHOICE word_opt T_EOL
-{
-	struct symbol *sym = sym_lookup($2, SYMBOL_CHOICE);
-	sym->flags |= SYMBOL_AUTO;
-	menu_add_entry(sym);
-	menu_add_expr(P_CHOICE, NULL, NULL);
-	printd(DEBUG_PARSE, "%s:%d:choice\n", zconf_curname(), zconf_lineno());
-};
-
-choice_entry: choice choice_option_list
-{
-	$$ = menu_add_menu();
-};
-
-choice_end: end
-{
-	if (zconf_endtoken($1, T_CHOICE, T_ENDCHOICE)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endchoice\n", zconf_curname(), zconf_lineno());
-	}
-};
-
-choice_stmt: choice_entry choice_block choice_end
-;
-
-choice_option_list:
-	  /* empty */
-	| choice_option_list choice_option
-	| choice_option_list depends
-	| choice_option_list help
-	| choice_option_list T_EOL
-	| choice_option_list option_error
-;
-
-choice_option: T_PROMPT prompt if_expr T_EOL
-{
-	menu_add_prompt(P_PROMPT, $2, $3);
-	printd(DEBUG_PARSE, "%s:%d:prompt\n", zconf_curname(), zconf_lineno());
-};
-
-choice_option: T_TYPE prompt_stmt_opt T_EOL
-{
-	if ($1->stype == S_BOOLEAN || $1->stype == S_TRISTATE) {
-		menu_set_type($1->stype);
-		printd(DEBUG_PARSE, "%s:%d:type(%u)\n",
-			zconf_curname(), zconf_lineno(),
-			$1->stype);
-	} else
-		YYERROR;
-};
-
-choice_option: T_OPTIONAL T_EOL
-{
-	current_entry->sym->flags |= SYMBOL_OPTIONAL;
-	printd(DEBUG_PARSE, "%s:%d:optional\n", zconf_curname(), zconf_lineno());
-};
-
-choice_option: T_DEFAULT T_WORD if_expr T_EOL
-{
-	if ($1->stype == S_UNKNOWN) {
-		menu_add_symbol(P_DEFAULT, sym_lookup($2, 0), $3);
-		printd(DEBUG_PARSE, "%s:%d:default\n",
-			zconf_curname(), zconf_lineno());
-	} else
-		YYERROR;
-};
-
-choice_block:
-	  /* empty */
-	| choice_block common_stmt
-;
-
-/* if entry */
-
-if_entry: T_IF expr nl
-{
-	printd(DEBUG_PARSE, "%s:%d:if\n", zconf_curname(), zconf_lineno());
-	menu_add_entry(NULL);
-	menu_add_dep($2);
-	$$ = menu_add_menu();
-};
-
-if_end: end
-{
-	if (zconf_endtoken($1, T_IF, T_ENDIF)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endif\n", zconf_curname(), zconf_lineno());
-	}
-};
-
-if_stmt: if_entry if_block if_end
-;
-
-if_block:
-	  /* empty */
-	| if_block common_stmt
-	| if_block menu_stmt
-	| if_block choice_stmt
-;
-
-/* mainmenu entry */
-
-mainmenu_stmt: T_MAINMENU prompt nl
-{
-	menu_add_prompt(P_MENU, $2, NULL);
-};
-
-/* menu entry */
-
-menu: T_MENU prompt T_EOL
-{
-	menu_add_entry(NULL);
-	menu_add_prompt(P_MENU, $2, NULL);
-	printd(DEBUG_PARSE, "%s:%d:menu\n", zconf_curname(), zconf_lineno());
-};
-
-menu_entry: menu visibility_list depends_list
-{
-	$$ = menu_add_menu();
-};
-
-menu_end: end
-{
-	if (zconf_endtoken($1, T_MENU, T_ENDMENU)) {
-		menu_end_menu();
-		printd(DEBUG_PARSE, "%s:%d:endmenu\n", zconf_curname(), zconf_lineno());
-	}
-};
-
-menu_stmt: menu_entry menu_block menu_end
-;
-
-menu_block:
-	  /* empty */
-	| menu_block common_stmt
-	| menu_block menu_stmt
-	| menu_block choice_stmt
-;
-
-source_stmt: T_SOURCE prompt T_EOL
-{
-	printd(DEBUG_PARSE, "%s:%d:source %s\n", zconf_curname(), zconf_lineno(), $2);
-	zconf_nextfile($2);
-};
-
-/* comment entry */
-
-comment: T_COMMENT prompt T_EOL
-{
-	menu_add_entry(NULL);
-	menu_add_prompt(P_COMMENT, $2, NULL);
-	printd(DEBUG_PARSE, "%s:%d:comment\n", zconf_curname(), zconf_lineno());
-};
-
-comment_stmt: comment depends_list
-{
-	menu_end_entry();
-};
-
-/* help option */
-
-help_start: T_HELP T_EOL
-{
-	printd(DEBUG_PARSE, "%s:%d:help\n", zconf_curname(), zconf_lineno());
-	zconf_starthelp();
-};
-
-help: help_start T_HELPTEXT
-{
-	current_entry->help = $2;
-};
-
-/* depends option */
-
-depends_list:
-	  /* empty */
-	| depends_list depends
-	| depends_list T_EOL
-	| depends_list option_error
-;
-
-depends: T_DEPENDS T_ON expr T_EOL
-{
-	menu_add_dep($3);
-	printd(DEBUG_PARSE, "%s:%d:depends on\n", zconf_curname(), zconf_lineno());
-};
-
-/* visibility option */
-
-visibility_list:
-	  /* empty */
-	| visibility_list visible
-	| visibility_list T_EOL
-;
-
-visible: T_VISIBLE if_expr
-{
-	menu_add_visibility($2);
-};
-
-/* prompt statement */
-
-prompt_stmt_opt:
-	  /* empty */
-	| prompt if_expr
-{
-	menu_add_prompt(P_PROMPT, $1, $2);
-};
-
-prompt:	  T_WORD
-	| T_WORD_QUOTE
-;
-
-end:	  T_ENDMENU T_EOL	{ $$ = $1; }
-	| T_ENDCHOICE T_EOL	{ $$ = $1; }
-	| T_ENDIF T_EOL		{ $$ = $1; }
-;
-
-nl:
-	  T_EOL
-	| nl T_EOL
-;
-
-if_expr:  /* empty */			{ $$ = NULL; }
-	| T_IF expr			{ $$ = $2; }
-;
-
-expr:	  symbol				{ $$ = expr_alloc_symbol($1); }
-	| symbol T_EQUAL symbol			{ $$ = expr_alloc_comp(E_EQUAL, $1, $3); }
-	| symbol T_UNEQUAL symbol		{ $$ = expr_alloc_comp(E_UNEQUAL, $1, $3); }
-	| T_OPEN_PAREN expr T_CLOSE_PAREN	{ $$ = $2; }
-	| T_NOT expr				{ $$ = expr_alloc_one(E_NOT, $2); }
-	| expr T_OR expr			{ $$ = expr_alloc_two(E_OR, $1, $3); }
-	| expr T_AND expr			{ $$ = expr_alloc_two(E_AND, $1, $3); }
-;
-
-symbol:	  T_WORD	{ $$ = sym_lookup($1, 0); free($1); }
-	| T_WORD_QUOTE	{ $$ = sym_lookup($1, SYMBOL_CONST); free($1); }
-;
-
-word_opt: /* empty */			{ $$ = NULL; }
-	| T_WORD
-
-%%
-
-void conf_parse(const char *name)
-{
-	struct symbol *sym;
-	int i;
-
-	zconf_initscan(name);
-
-	sym_init();
-	_menu_init();
-	rootmenu.prompt = menu_add_prompt(P_MENU, "Unikraft Configuration", NULL);
-
-	if (getenv("ZCONF_DEBUG"))
-		zconfdebug = 1;
-	zconfparse();
-	if (zconfnerrs)
-		exit(1);
-	if (!modules_sym)
-		modules_sym = sym_find( "n" );
-
-	rootmenu.prompt->text = _(rootmenu.prompt->text);
-	rootmenu.prompt->text = sym_expand_string_value(rootmenu.prompt->text);
-
-	menu_finalize(&rootmenu);
-	for_all_symbols(i, sym) {
-		if (sym_check_deps(sym))
-			zconfnerrs++;
-        }
-	if (zconfnerrs)
-		exit(1);
-	sym_set_change_count(1);
-}
-
-static const char *zconf_tokenname(int token)
-{
-	switch (token) {
-	case T_MENU:		return "menu";
-	case T_ENDMENU:		return "endmenu";
-	case T_CHOICE:		return "choice";
-	case T_ENDCHOICE:	return "endchoice";
-	case T_IF:		return "if";
-	case T_ENDIF:		return "endif";
-	case T_DEPENDS:		return "depends";
-	case T_VISIBLE:		return "visible";
-	}
-	return "<token>";
-}
-
-static bool zconf_endtoken(const struct kconf_id *id, int starttoken, int endtoken)
-{
-	if (id->token != endtoken) {
-		zconf_error("unexpected '%s' within %s block",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	if (current_menu->file != current_file) {
-		zconf_error("'%s' in different file than '%s'",
-			kconf_id_strings + id->name, zconf_tokenname(starttoken));
-		fprintf(stderr, "%s:%d: location of the '%s'\n",
-			current_menu->file->name, current_menu->lineno,
-			zconf_tokenname(starttoken));
-		zconfnerrs++;
-		return false;
-	}
-	return true;
-}
-
-static void zconfprint(const char *err, ...)
-{
-	va_list ap;
-
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconf_error(const char *err, ...)
-{
-	va_list ap;
-
-	zconfnerrs++;
-	fprintf(stderr, "%s:%d: ", zconf_curname(), zconf_lineno());
-	va_start(ap, err);
-	vfprintf(stderr, err, ap);
-	va_end(ap);
-	fprintf(stderr, "\n");
-}
-
-static void zconferror(const char *err)
-{
-	fprintf(stderr, "%s:%d: %s\n", zconf_curname(), zconf_lineno() + 1, err);
-}
-
-static void print_quoted_string(FILE *out, const char *str)
-{
-	const char *p;
-	int len;
-
-	putc('"', out);
-	while ((p = strchr(str, '"'))) {
-		len = p - str;
-		if (len)
-			fprintf(out, "%.*s", len, str);
-		fputs("\\\"", out);
-		str = p + 1;
-	}
-	fputs(str, out);
-	putc('"', out);
-}
-
-static void print_symbol(FILE *out, struct menu *menu)
-{
-	struct symbol *sym = menu->sym;
-	struct property *prop;
-
-	if (sym_is_choice(sym))
-		fprintf(out, "\nchoice\n");
-	else
-		fprintf(out, "\nconfig %s\n", sym->name);
-	switch (sym->type) {
-	case S_BOOLEAN:
-		fputs("  boolean\n", out);
-		break;
-	case S_TRISTATE:
-		fputs("  tristate\n", out);
-		break;
-	case S_STRING:
-		fputs("  string\n", out);
-		break;
-	case S_INT:
-		fputs("  integer\n", out);
-		break;
-	case S_HEX:
-		fputs("  hex\n", out);
-		break;
-	default:
-		fputs("  ???\n", out);
-		break;
-	}
-	for (prop = sym->prop; prop; prop = prop->next) {
-		if (prop->menu != menu)
-			continue;
-		switch (prop->type) {
-		case P_PROMPT:
-			fputs("  prompt ", out);
-			print_quoted_string(out, prop->text);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_DEFAULT:
-			fputs( "  default ", out);
-			expr_fprint(prop->expr, out);
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs(" if ", out);
-				expr_fprint(prop->visible.expr, out);
-			}
-			fputc('\n', out);
-			break;
-		case P_CHOICE:
-			fputs("  #choice value\n", out);
-			break;
-		case P_SELECT:
-			fputs( "  select ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_RANGE:
-			fputs( "  range ", out);
-			expr_fprint(prop->expr, out);
-			fputc('\n', out);
-			break;
-		case P_MENU:
-			fputs( "  menu ", out);
-			print_quoted_string(out, prop->text);
-			fputc('\n', out);
-			break;
-		default:
-			fprintf(out, "  unknown prop %d!\n", prop->type);
-			break;
-		}
-	}
-	if (menu->help) {
-		int len = strlen(menu->help);
-		while (menu->help[--len] == '\n')
-			menu->help[len] = 0;
-		fprintf(out, "  help\n%s\n", menu->help);
-	}
-}
-
-void zconfdump(FILE *out)
-{
-	struct property *prop;
-	struct symbol *sym;
-	struct menu *menu;
-
-	menu = rootmenu.list;
-	while (menu) {
-		if ((sym = menu->sym))
-			print_symbol(out, menu);
-		else if ((prop = menu->prompt)) {
-			switch (prop->type) {
-			case P_COMMENT:
-				fputs("\ncomment ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			case P_MENU:
-				fputs("\nmenu ", out);
-				print_quoted_string(out, prop->text);
-				fputs("\n", out);
-				break;
-			default:
-				;
-			}
-			if (!expr_is_yes(prop->visible.expr)) {
-				fputs("  depends ", out);
-				expr_fprint(prop->visible.expr, out);
-				fputc('\n', out);
-			}
-		}
-
-		if (menu->list)
-			menu = menu->list;
-		else if (menu->next)
-			menu = menu->next;
-		else while ((menu = menu->parent)) {
-			if (menu->prompt && menu->prompt->type == P_MENU)
-				fputs("\nendmenu\n", out);
-			if (menu->next) {
-				menu = menu->next;
-				break;
-			}
-		}
-	}
-}
-
-#include "zconf.lex.c"
-#include "util.c"
-#include "confdata.c"
-#include "expr.c"
-#include "symbol.c"
-#include "menu.c"
-- 
2.7.4



--===============1337069668052425768==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============1337069668052425768==--

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 12:07:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 12:07:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAvDN-0000Cr-I5; Thu, 19 Sep 2019 12:07:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=LYY3=XO=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iAsZF-0006vA-FQ
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 09:17:37 +0000
X-Inumbo-ID: 516eee86-dabe-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 516eee86-dabe-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 09:17:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 24E67F2025;
 Thu, 19 Sep 2019 11:17:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id WsxQTDtfLU4q; Thu, 19 Sep 2019 11:17:32 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 01B48F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 11:17:30 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 11:17:24 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Thu, 19 Sep 2019 11:16:07 +0200
Message-ID: <20190919091607.23327-24-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
X-Mailman-Approved-At: Thu, 19 Sep 2019 12:07:11 +0000
Subject: [Minios-devel] [UNIKRAFT PATCH v3 23/23] kconfig: Replace the
 kconfig with the update
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UmV2ZXJ0IGtjb25maWcubmV3IGJhY2sgdG8ga2NvbmZpZy4KClNpZ25lZC1vZmYtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIE1ha2VmaWxlICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAgMjA4IC0tCiBz
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAgICAgICAgICB8ICAxNDEg
LQogc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcyAgICAgICAgICAgICAgICAgfCAg
IDg0IC0KIHN1cHBvcnQva2NvbmZpZy5uZXcvUkVBRE1FLnVuaWtyYWZ0ICAgICAgICAgICAgICAg
IHwgICAyMSAtCiBzdXBwb3J0L2tjb25maWcubmV3L2NvbmYuYyAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICA3MDIgLS0tLS0KIHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYyAgICAgICAg
ICAgICAgICAgICAgIHwgMTM4MCAtLS0tLS0tLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L2V4cHIu
YyAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyOTcgLS0tLS0tLS0tCiBzdXBwb3J0L2tjb25m
aWcubmV3L2V4cHIuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMzEgLS0tCiBzdXBwb3J0
L2tjb25maWcubmV3L2ZpeGRlcC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAzODAgLS0tCiBz
dXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICB8ICAgMzAg
LQogc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAx
NTE2IC0tLS0tLS0tLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlICAgICAgICAg
ICAgICAgICAgICB8ICA2NjEgLS0tLS0KIHN1cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2VzLmMgICAg
ICAgICAgICAgICAgICAgICAgIHwgIDMyOCAtLS0KIHN1cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2Vz
LmggICAgICAgICAgICAgICAgICAgICAgIHwgICAzMyAtCiBzdXBwb3J0L2tjb25maWcubmV3L2xl
eGVyLmwgICAgICAgICAgICAgICAgICAgICAgICB8ICA0OTggLS0tLQogc3VwcG9ydC9rY29uZmln
Lm5ldy9saXN0LmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMyIC0KIHN1cHBvcnQva2Nv
bmZpZy5uZXcvbGtjLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE2MCAtLQogc3VwcG9y
dC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaCAgICAgICAgICAgICAgICAgICAgfCAgIDY2IC0KIHN1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HICAgICAgIHwgICAgNCAt
CiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2NoZWNrbGlzdC5jICAgICAgICAgICB8ICAz
MTkgLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2RpYWxvZy5oICAgICAgICAgICAg
ICB8ICAyMzggLS0KIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvaW5wdXRib3guYyAgICAg
ICAgICAgIHwgIDI4OSAtLQogc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMg
ICAgICAgICAgICAgfCAgNDI0IC0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy90ZXh0
Ym94LmMgICAgICAgICAgICAgfCAgMzk1IC0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxv
Zy91dGlsLmMgICAgICAgICAgICAgICAgfCAgNzAwIC0tLS0tCiBzdXBwb3J0L2tjb25maWcubmV3
L2x4ZGlhbG9nL3llc25vLmMgICAgICAgICAgICAgICB8ICAxMDEgLQogc3VwcG9ydC9rY29uZmln
Lm5ldy9tY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICAgfCAgIDQ3IC0KIHN1cHBvcnQva2Nv
bmZpZy5uZXcvbWNvbmYuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAzOSAtLS0tLS0tLQog
c3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgODY3
IC0tLS0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2ggICAgICAgICAgICAg
ICAgfCAgMTg5IC0tCiBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLWNmZy5zaCAgICAgICAgICAg
ICAgICAgICB8ICAgNDcgLQogc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jICAgICAgICAgICAg
ICAgICAgICAgICAgfCAxNTU1IC0tLS0tLS0tLS0tCiBzdXBwb3J0L2tjb25maWcubmV3L25jb25m
Lmd1aS5jICAgICAgICAgICAgICAgICAgICB8ICA2NjQgLS0tLS0KIHN1cHBvcnQva2NvbmZpZy5u
ZXcvbmNvbmYuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5MiAtCiBzdXBwb3J0L2tjb25m
aWcubmV3L3BhcnNlci55ICAgICAgICAgICAgICAgICAgICAgICB8ICA3MzEgLS0tLS0KIC4uLi9w
YXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoICAgIHwgICA3NiAtCiBz
dXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyICB8ICAgNTkg
LQogLi4uL3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwgfCAg
MTAyIC0KIHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxl
IHwgICAyNiAtCiAuLi4vcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlciAgICAg
ICAgICB8ICAgMTIgLQogLi4uL2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0
LXJ1bGVzICAgfCAgIDEzIC0KIC4uLi9rY29uZmlnLm5ldy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0
LXRvb2xzLXJ1bGVzIHwgIDE0MiAtCiAuLi4va2NvbmZpZy5uZXcvcGF0Y2hlcy8wOC1maXhkZXAt
YW5kLWNvbmZpZy1mbGFnICB8ICAgMTkgLQogLi4uL2tjb25maWcubmV3L3BhdGNoZXMvMDktc3Vw
cG9ydC1nbG9iLWluLWtjb25maWcgfCAgIDcwIC0KIHN1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJv
Y2Vzcy5jICAgICAgICAgICAgICAgICAgIHwgIDU3MyAtLS0tCiBzdXBwb3J0L2tjb25maWcubmV3
L3Fjb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICB8ICAgMzIgLQogc3VwcG9ydC9rY29uZmln
Lm5ldy9xY29uZi5jYyAgICAgICAgICAgICAgICAgICAgICAgfCAxODk2IC0tLS0tLS0tLS0tLS0K
IHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMz
MSAtLS0KIHN1cHBvcnQva2NvbmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwgICAgICAgICAg
IHwgIDY4MiAtLS0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy9zeW1ib2wuYyAgICAgICAgICAgICAg
ICAgICAgICAgfCAxMzMxIC0tLS0tLS0tLQogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRv
X3N1Ym1lbnUvS2NvbmZpZyAgICAgfCAgIDUyIC0KIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
YXV0b19zdWJtZW51L19faW5pdF9fLnB5IHwgICAxMyAtCiAuLi4va2NvbmZpZy5uZXcvdGVzdHMv
YXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dCB8ICAgMTAgLQogc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvS2NvbmZpZyAgICAgICAgICAgfCAgIDU2IC0KIHN1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvY2hvaWNlL19faW5pdF9fLnB5ICAgICAgIHwgICA0MSAtCiAuLi4vdGVzdHMv
Y2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcgICAgICAgICAgICB8ICAgIDUgLQogLi4uL3Rl
c3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnICAgICAgICAgICAgfCAgICA5IC0KIC4u
Li9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnIHwgICAgNSAt
CiAuLi4vdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcgICAgICAgICAgICB8ICAg
IDkgLQogLi4uL3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dCAgICAgICAgICAg
fCAgIDEwIC0KIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmln
ICAgIHwgICAgMiAtCiAuLi4vdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0ICAg
ICAgICAgICB8ICAgMTUgLQogLi4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25m
aWcgICAgICAgICAgfCAgIDIxIC0KIC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9f
X2luaXRfXy5weSAgICAgIHwgICAxNiAtCiAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9k
ZXAvY29uZmlnICAgICAgICAgICB8ICAgIDIgLQogLi4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRo
X21fZGVwL2V4cGVjdGVkX2NvbmZpZyAgfCAgICAzIC0KIC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVf
d2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQgIHwgICAgNCAtCiBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2NvbmZ0ZXN0LnB5ICAgICAgICAgICAgICB8ICAyOTEgLS0KIC4uLi9rY29uZmlnLm5l
dy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnICAgIHwgICA2MyAtCiAuLi4vdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkgICAgICAgICAgICB8ICAgMTAgLQogLi4uL3Rl
c3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVyciAgICAgICAgfCAgIDM4IC0KIC4u
Li9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnICAgIHwgICAgMiAt
CiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxICAgICAgICAgICB8ICAg
IDUgLQogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMiAgICAgICAgICAg
fCAgICA0IC0KIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMgICAgICAg
ICAgIHwgICAgMiAtCiAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkgICAg
ICAgICAgICB8ICAgMTEgLQogLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0
ZGVyciAgICAgICAgfCAgICA2IC0KIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hv
aWNlL0tjb25maWcgICAgIHwgICAyNSAtCiBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVy
X2Nob2ljZS9fX2luaXRfXy5weSB8ICAgMTUgLQogc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9p
bnRlcl9jaG9pY2UvZGVmY29uZmlnICAgfCAgICAxIC0KIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9p
bnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnIHwgICAgNCAtCiAuLi4va2NvbmZpZy5uZXcvdGVz
dHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnICB8ICAgMzkgLQogLi4uL3Rlc3RzL25ld19j
aG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkgICAgICAgICAgfCAgIDE1IC0KIC4uLi9rY29uZmln
Lm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZyAgIHwgICAgMyAtCiAuLi4vdGVz
dHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQgICAgICB8ICAgMTAgLQogLi4u
L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnICAgICAgICAgICAgfCAgIDE2IC0K
IC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkgICAgICAgIHwgICAy
MCAtCiAuLi4va2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZyB8
ICAgIDEgLQogLi4uL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcg
ICAgfCAgICA1IC0KIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnICAg
ICAgICAgIHwgICAyNyAtCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0
X18ucHkgICAgICB8ICAgIDkgLQogLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4
cGVjdGVkX3N0ZGVyciAgfCAgICA1IC0KIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVu
Yy9leHBlY3RlZF9zdGRvdXQgIHwgICAgMSAtCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxh
cl9leHBhbnNpb24vS2NvbmZpZyAgICB8ICAgIDUgLQogLi4uL3ByZXByb2Nlc3MvY2lyY3VsYXJf
ZXhwYW5zaW9uL19faW5pdF9fLnB5ICAgICAgfCAgIDExIC0KIC4uLi9wcmVwcm9jZXNzL2NpcmN1
bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIgIHwgICAgMSAtCiAuLi4va2NvbmZpZy5uZXcv
dGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZyAgICB8ICAgNDQgLQogLi4uL3Rlc3RzL3By
ZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5ICAgICAgICAgICAgfCAgICA4IC0KIC4uLi90ZXN0
cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAxMCAtCiAuLi4v
a2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnICB8ICAgNTMgLQog
Li4uL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkgICAgICAgICAgfCAgICA4
IC0KIC4uLi90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVyciAgICAgIHwg
ICAgOSAtCiBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3B5dGVzdC5pbmkgICAgICAgICAgICAg
ICB8ICAgIDcgLQogLi4uL2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29u
ZmlnICAgfCAgIDM1IC0KIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkg
ICAgICAgICAgIHwgICAxNyAtCiAuLi4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVk
X3N0ZG91dDAgICAgICB8ICAgIDIgLQogLi4uL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBl
Y3RlZF9zdGRvdXQxICAgICAgfCAgICA0IC0KIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2Uv
ZXhwZWN0ZWRfc3Rkb3V0MiAgICAgIHwgICAgNSAtCiBzdXBwb3J0L2tjb25maWcubmV3L3V0aWwu
YyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMjkgLQogc3VwcG9ydC9rY29uZmlnLm5ldy96
Y29uZi5sZXguYyAgICAgICAgICAgICAgICAgICAgfCAyODIwIC0tLS0tLS0tLS0tLS0tLS0tLS0t
CiBzdXBwb3J0L2tjb25maWcubmV3L3pjb25mLnRhYi5jICAgICAgICAgICAgICAgICAgICB8IDI1
MDQgLS0tLS0tLS0tLS0tLS0tLS0KIHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDIwOCArKwogc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLmJyICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTQxICsKIHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5y
dWxlcyAgICAgICAgICAgICAgICAgICAgIHwgICA4NCArCiBzdXBwb3J0L2tjb25maWcvUkVBRE1F
LnVuaWtyYWZ0ICAgICAgICAgICAgICAgICAgICB8ICAgMjEgKwogc3VwcG9ydC9rY29uZmlnL2Nv
bmYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzAyICsrKysrCiBzdXBwb3J0L2tj
b25maWcvY29uZmRhdGEuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDEzODAgKysrKysrKysr
Kwogc3VwcG9ydC9rY29uZmlnL2V4cHIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAx
Mjk3ICsrKysrKysrKwogc3VwcG9ydC9rY29uZmlnL2V4cHIuaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMzMxICsrKwogc3VwcG9ydC9rY29uZmlnL2ZpeGRlcC5jICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMzgwICsrKwogc3VwcG9ydC9rY29uZmlnL2djb25mLWNmZy5zaCAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDMwICsKIHN1cHBvcnQva2NvbmZpZy9nY29uZi5jICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTUxNiArKysrKysrKysrKwogc3VwcG9ydC9rY29u
ZmlnL2djb25mLmdsYWRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjYxICsrKysrCiBzdXBw
b3J0L2tjb25maWcvaW1hZ2VzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMjggKysr
CiBzdXBwb3J0L2tjb25maWcvaW1hZ2VzLmggICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MzMgKwogc3VwcG9ydC9rY29uZmlnL2xleGVyLmwgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgNDk4ICsrKysKIHN1cHBvcnQva2NvbmZpZy9saXN0LmggICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDEzMiArCiBzdXBwb3J0L2tjb25maWcvbGtjLmggICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAxNjAgKysKIHN1cHBvcnQva2NvbmZpZy9sa2NfcHJvdG8uaCAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA2NiArCiBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvQklHLkZB
VC5XQVJOSU5HICAgICAgICAgICB8ICAgIDQgKwogc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2No
ZWNrbGlzdC5jICAgICAgICAgICAgICAgfCAgMzE5ICsrKwogc3VwcG9ydC9rY29uZmlnL2x4ZGlh
bG9nL2RpYWxvZy5oICAgICAgICAgICAgICAgICAgfCAgMjM4ICsrCiBzdXBwb3J0L2tjb25maWcv
bHhkaWFsb2cvaW5wdXRib3guYyAgICAgICAgICAgICAgICB8ICAyODkgKysKIHN1cHBvcnQva2Nv
bmZpZy9seGRpYWxvZy9tZW51Ym94LmMgICAgICAgICAgICAgICAgIHwgIDQyNCArKysKIHN1cHBv
cnQva2NvbmZpZy9seGRpYWxvZy90ZXh0Ym94LmMgICAgICAgICAgICAgICAgIHwgIDM5NSArKysK
IHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy91dGlsLmMgICAgICAgICAgICAgICAgICAgIHwgIDcw
MCArKysrKwogc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3llc25vLmMgICAgICAgICAgICAgICAg
ICAgfCAgMTAxICsKIHN1cHBvcnQva2NvbmZpZy9tY29uZi1jZmcuc2ggICAgICAgICAgICAgICAg
ICAgICAgIHwgICA0NyArCiBzdXBwb3J0L2tjb25maWcvbWNvbmYuYyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IDEwMzkgKysrKysrKysKIHN1cHBvcnQva2NvbmZpZy9tZW51LmMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDg2NyArKysrKysKIHN1cHBvcnQva2NvbmZpZy9tZXJn
ZV9jb25maWcuc2ggICAgICAgICAgICAgICAgICAgIHwgIDE4OSArKwogc3VwcG9ydC9rY29uZmln
L25jb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsKIHN1cHBvcnQva2Nv
bmZpZy9uY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTU1NSArKysrKysrKysr
Kwogc3VwcG9ydC9rY29uZmlnL25jb25mLmd1aS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAg
NjY0ICsrKysrCiBzdXBwb3J0L2tjb25maWcvbmNvbmYuaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgOTIgKwogc3VwcG9ydC9rY29uZmlnL3BhcnNlci55ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgNzMxICsrKysrCiAuLi4vcGF0Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by11
bmlrcmFmdC5wYXRjaCAgICB8ICAgNzYgKwogc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDItaW1w
b3J0LW1ha2VmaWxlLmJyICAgICAgfCAgIDU5ICsKIC4uLi9wYXRjaGVzLzAzLWluY2x1ZGUtbWFr
ZWZpbGUtaGVscGVyLWZyb20ta2VybmVsIHwgIDEwMiArCiBzdXBwb3J0L2tjb25maWcvcGF0Y2hl
cy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlICAgICB8ICAgMjYgKwogLi4uL2tjb25maWcvcGF0Y2hl
cy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlciAgfCAgIDEyICsKIHN1cHBvcnQva2NvbmZp
Zy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBsaWNpdC1ydWxlcyAgIHwgICAxMyArCiBzdXBwb3J0L2tj
b25maWcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcyB8ICAxNDIgKwogc3VwcG9y
dC9rY29uZmlnL3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZyAgfCAgIDE5ICsKIHN1
cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmlnIHwgICA3MCAr
CiBzdXBwb3J0L2tjb25maWcvcHJlcHJvY2Vzcy5jICAgICAgICAgICAgICAgICAgICAgICB8ICA1
NzMgKysrKwogc3VwcG9ydC9rY29uZmlnL3Fjb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDMyICsKIHN1cHBvcnQva2NvbmZpZy9xY29uZi5jYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgMTg5NiArKysrKysrKysrKysrCiBzdXBwb3J0L2tjb25maWcvcWNvbmYuaCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAzMzEgKysrCiBzdXBwb3J0L2tjb25maWcvc3RyZWFt
bGluZV9jb25maWcucGwgICAgICAgICAgICAgICB8ICA2ODIgKysrKysKIHN1cHBvcnQva2NvbmZp
Zy9zeW1ib2wuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMzMSArKysrKysrKysKIHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZyAgICAgICAgIHwgICA1MiAr
CiBzdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5ICAgICB8ICAg
MTMgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQg
fCAgIDEwICsKIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvS2NvbmZpZyAgICAgICAgICAg
ICAgIHwgICA1NiArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL19faW5pdF9fLnB5ICAg
ICAgICAgICB8ICAgNDEgKwogLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3Rl
ZF9jb25maWcgICAgfCAgICA1ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhw
ZWN0ZWRfY29uZmlnICAgIHwgICAgOSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2Fs
bG5vX2V4cGVjdGVkX2NvbmZpZyB8ICAgIDUgKwogLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlL2Fs
bHllc19leHBlY3RlZF9jb25maWcgICAgfCAgICA5ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2lj
ZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dCAgIHwgICAxMCArCiBzdXBwb3J0L2tjb25maWcvdGVz
dHMvY2hvaWNlL29sZGFzazFfY29uZmlnICAgICAgICB8ICAgIDIgKwogLi4uL2tjb25maWcvdGVz
dHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0ICAgfCAgIDE1ICsKIC4uLi9rY29uZmln
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcgIHwgICAyMSArCiAuLi4vdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvX19pbml0X18ucHkgICAgICB8ICAgMTYgKwogLi4u
L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnICAgfCAgICAyICsK
IC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcgIHwgICAg
MyArCiAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0ICB8
ICAgIDQgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2NvbmZ0ZXN0LnB5ICAgICAgICAgICAgICAg
ICAgfCAgMjkxICsrCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2Nv
bmZpZyAgICB8ICAgNjMgKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19p
bml0X18ucHkgICAgfCAgIDEwICsKIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3Rl
ZF9zdGRlcnIgICAgICAgIHwgICAzOCArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZyAgICB8ICAgIDIgKwogLi4uL2tjb25maWcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZy5pbmMxICAgfCAgICA1ICsKIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9y
ZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMiAgIHwgICAgNCArCiAuLi4va2NvbmZpZy90ZXN0cy9l
cnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMgICB8ICAgIDIgKwogLi4uL2tjb25maWcvdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkgICAgfCAgIDExICsKIC4uLi90ZXN0cy9l
cnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAgNiArCiBzdXBwb3J0
L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcgICAgICAgICB8ICAgMjUgKwogc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weSAgICAgfCAgIDE1ICsK
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnICAgICAgIHwgICAg
MSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZyB8
ICAgIDQgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZp
ZyAgfCAgIDM5ICsKIC4uLi9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0
X18ucHkgIHwgICAxNSArCiBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2Rl
cC9jb25maWcgICB8ICAgIDMgKwogLi4uL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0
ZWRfc3Rkb3V0ICAgICAgfCAgIDEwICsKIC4uLi9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2Rl
cF91bm1ldC9LY29uZmlnICAgIHwgICAxNiArCiAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3Vu
bWV0L19faW5pdF9fLnB5ICAgICAgICB8ICAgMjAgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25v
X3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcgfCAgICAxICsKIC4uLi90ZXN0cy9ub193cml0ZV9p
Zl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnICAgIHwgICAgNSArCiAuLi4va2NvbmZpZy90ZXN0
cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnICB8ICAgMjcgKwogLi4uL3Rlc3RzL3By
ZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5ICAgICAgfCAgICA5ICsKIC4uLi90ZXN0
cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIgIHwgICAgNSArCiAuLi4v
dGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0ICB8ICAgIDEgKwog
Li4uL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcgICAgfCAgICA1
ICsKIC4uLi9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weSAgICAgIHwg
ICAxMSArCiAuLi4vcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJy
ICB8ICAgIDEgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25m
aWcgICAgfCAgIDQ0ICsKIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5p
dF9fLnB5ICAgIHwgICAgOCArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRf
c3RkZXJyICAgICAgICB8ICAgMTAgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3Mv
dmFyaWFibGUvS2NvbmZpZyAgfCAgIDUzICsKIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3Mv
dmFyaWFibGUvX19pbml0X18ucHkgIHwgICAgOCArCiAuLi4vdGVzdHMvcHJlcHJvY2Vzcy92YXJp
YWJsZS9leHBlY3RlZF9zdGRlcnIgICAgICB8ICAgIDkgKwogc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L3B5dGVzdC5pbmkgICAgICAgICAgICAgICAgICAgfCAgICA3ICsKIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZyAgIHwgICAzNSArCiAuLi4va2NvbmZpZy90
ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkgICB8ICAgMTcgKwogLi4uL3Rlc3Rz
L3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwICAgICAgfCAgICAyICsKIC4uLi90
ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MSAgICAgIHwgICAgNCArCiAu
Li4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIgICAgICB8ICAgIDUg
Kwogc3VwcG9ydC9rY29uZmlnL3V0aWwuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
MTI5ICsKIHN1cHBvcnQva2NvbmZpZy96Y29uZi5sZXguYyAgICAgICAgICAgICAgICAgICAgICAg
IHwgMjgyMCArKysrKysrKysrKysrKysrKysrKwogc3VwcG9ydC9rY29uZmlnL3pjb25mLnRhYi5j
ICAgICAgICAgICAgICAgICAgICAgICAgfCAyNTA0ICsrKysrKysrKysrKysrKysrCiAyMjMgZmls
ZXMgY2hhbmdlZCwgMjc2MDkgaW5zZXJ0aW9ucygrKSwgMjc2MDkgZGVsZXRpb25zKC0pCiBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQogZGVsZXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzCiBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQKIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L2NvbmYuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvY29uZmRhdGEuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvZXhwci5jCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmgK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jCiBkZWxldGUg
bW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi1jZmcuc2gKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnLm5ldy9pbWFnZXMuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy5uZXcvaW1hZ2VzLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2xl
eGVyLmwKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaAogZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKIGRlbGV0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2xrY19wcm90by5oCiBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2NoZWNrbGlzdC5jCiBkZWxldGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9kaWFsb2cuaAogZGVsZXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvaW5wdXRib3guYwogZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jCiBk
ZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy90ZXh0Ym94LmMK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3V0aWwuYwog
ZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cveWVzbm8uYwog
ZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYtY2ZnLnNoCiBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCiBkZWxldGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9tZW51LmMKIGRlbGV0ZSBtb2RlIDEwMDc1NSBzdXBw
b3J0L2tjb25maWcubmV3L21lcmdlX2NvbmZpZy5zaAogZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBv
cnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9uY29uZi5jCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy9uY29uZi5ndWkuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNv
bmYuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1r
ZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2gKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyCiBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZy
b20ta2VybmVsCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVz
LzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZpeGRlcC1oZWFkZXIKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1
bGVzCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA3LWlt
cG9ydC1ob3N0LXRvb2xzLXJ1bGVzCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcKIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDktc3VwcG9ydC1nbG9iLWluLWtjb25maWcK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3ByZXByb2Nlc3MuYwogZGVs
ZXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoCiBkZWxldGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYwogZGVsZXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuaAogZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBv
cnQva2NvbmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwKIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3N5bWJvbC5jCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZwogZGVsZXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5CiBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhw
ZWN0ZWRfc3Rkb3V0CiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2UvS2NvbmZpZwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvY2hvaWNlL19faW5pdF9fLnB5CiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZwogZGVsZXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9j
b25maWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2lj
ZS9hbGxub19leHBlY3RlZF9jb25maWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnCiBkZWxldGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9z
dGRvdXQKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2lj
ZS9vbGRhc2sxX2NvbmZpZwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0CiBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmln
CiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFs
dWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weQogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCiBkZWxldGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2Rl
cC9leHBlY3RlZF9jb25maWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dAogZGVsZXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tj
b25maWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9y
ZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5CiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnIKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tj
b25maWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9y
ZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMQogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMyCiBkZWxldGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29u
ZmlnLmluYzMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5CiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnIKIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9LY29u
ZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9j
aG9pY2UvX19pbml0X18ucHkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2ludGVyX2Nob2ljZS9kZWZjb25maWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAv
S2NvbmZpZwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3
X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weQogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcKIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhw
ZWN0ZWRfc3Rkb3V0CiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5CiBk
ZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvY29uZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnCiBkZWxldGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9L
Y29uZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVw
cm9jZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weQogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rk
ZXJyCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25m
aWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nl
c3MvY2lyY3VsYXJfZXhwYW5zaW9uL19faW5pdF9fLnB5CiBkZWxldGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBl
Y3RlZF9zdGRlcnIKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5CiBkZWxldGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBl
Y3RlZF9zdGRlcnIKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weQogZGVsZXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJs
ZS9leHBlY3RlZF9zdGRlcnIKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL3B5dGVzdC5pbmkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnCiBkZWxldGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkKIGRl
bGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2No
b2ljZS9leHBlY3RlZF9zdGRvdXQwCiBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MQogZGVsZXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4
cGVjdGVkX3N0ZG91dDIKIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3V0
aWwuYwogZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYubGV4LmMK
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3pjb25mLnRhYi5jCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLmJyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnL01ha2VmaWxlLnJ1bGVzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL1JFQURNRS51bmlrcmFmdAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9j
b25mLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvY29uZmRhdGEuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9leHByLmMKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvZXhwci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL2ZpeGRlcC5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnL2djb25mLWNm
Zy5zaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9nY29uZi5jCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2djb25mLmdsYWRlCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL2ltYWdlcy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2xleGVy
LmwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbGlzdC5oCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2xrYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnL2xrY19wcm90by5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy9seGRpYWxvZy9kaWFsb2cuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy9seGRpYWxvZy9pbnB1dGJveC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL21lbnVib3guYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9s
eGRpYWxvZy90ZXh0Ym94LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhk
aWFsb2cvdXRpbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9n
L3llc25vLmMKIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcvbWNvbmYtY2ZnLnNo
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL21jb25mLmMKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbWVudS5jCiBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9y
dC9rY29uZmlnL21lcmdlX2NvbmZpZy5zaAogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2Nv
bmZpZy9uY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbmNv
bmYuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9uY29uZi5ndWkuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9uY29uZi5oCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3BhcnNlci55CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2gKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUu
YnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wMy1pbmNsdWRl
LW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlcgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBs
aWNpdC1ydWxlcwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA3
LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmlnCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3ByZXByb2Nlc3MuYwogY3JlYXRlIG1vZGUg
MTAwNzU1IHN1cHBvcnQva2NvbmZpZy9xY29uZi1jZmcuc2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvcWNvbmYuY2MKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvcWNvbmYuaAogY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5l
X2NvbmZpZy5wbAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9zeW1ib2wuYwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUvS2Nv
bmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1l
bnUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
YXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2UvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9j
b25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2Fs
bG5vX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmln
CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sx
X2V4cGVjdGVkX3N0ZG91dAogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5CiBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRo
X21fZGVwL2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9j
aG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRf
c3Rkb3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2NvbmZ0ZXN0
LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNp
dmVfZGVwL0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25m
aWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2
ZV9pbmMvS2NvbmZpZy5pbmMxCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzMKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19p
bml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weQogY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnCiBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3Rl
ZF9jb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2No
b2ljZV93aXRoX2RlcC9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9l
eHBlY3RlZF9zdGRvdXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
bm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5CiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9j
b25maWcKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVf
aWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19f
aW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXBy
b2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRv
dXQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9j
aXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFy
X2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9l
eHBlY3RlZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
cHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBlY3Rl
ZF9zdGRlcnIKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHl0ZXN0
LmluaQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3Rl
ZF9jaG9pY2UvS2NvbmZpZwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDAKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNl
L2V4cGVjdGVkX3N0ZG91dDEKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdXRpbC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL3pjb25mLmxleC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25m
LnRhYi5jCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA2NWFlMzFiLi44
MzQxMzEwIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMTM5LDEyICsx
MzksMTIgQEAgRUxJQl9ESVIgOj0gJChyZWFscGF0aCAkKHBhdHN1YnN0ICUvLCUsJChwYXRzdWJz
dCAlLiwlLCQoRUxJQl9ESVIpKSkpCiBDT05GSUdfVUtfUExBVCAgICAgICAgOj0gJChDT05GSUdf
VUtfQkFTRSkvcGxhdC8KIENPTkZJR19ESVIgICAgICAgICAgICA6PSAkKENPTkZJR19VS19BUFAp
CiBDT05GSUdfQ09ORklHX0lOICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkvQ29uZmlnLnVrCi1D
T05GSUcgICAgICAgICAgICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkvc3VwcG9ydC9rY29uZmln
Lm5ldworQ09ORklHICAgICAgICAgICAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0UpL3N1cHBvcnQv
a2NvbmZpZwogQ09ORklHTElCCSAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0UpL3N1cHBvcnQva2Nv
bmZpZ2xpYgogVUtfQ09ORklHICAgICAgICAgICAgIDo9ICQoQ09ORklHX0RJUikvLmNvbmZpZwog
VUtfQ09ORklHX09VVCAgICAgICAgIDo9ICQoQlVJTERfRElSKS9jb25maWcKIFVLX0dFTkVSQVRF
RF9JTkNMVURFUyA6PSAkKEJVSUxEX0RJUikvaW5jbHVkZQotS0NPTkZJR19ESVIgICAgICAgICAg
IDo9ICQoQlVJTERfRElSKS9rY29uZmlnLm5ldworS0NPTkZJR19ESVIgICAgICAgICAgIDo9ICQo
QlVJTERfRElSKS9rY29uZmlnCiBVS19GSVhERVAgICAgICAgICAgICAgOj0gJChLQ09ORklHX0RJ
UikvZml4ZGVwCiBLQ09ORklHX0FVVE9DT05GSUcgICAgOj0gJChLQ09ORklHX0RJUikvYXV0by5j
b25mCiBLQ09ORklHX1RSSVNUQVRFICAgICAgOj0gJChLQ09ORklHX0RJUikvdHJpc3RhdGUuY29u
ZmlnCkBAIC01MTksNyArNTE5LDcgQEAgQ1hYRkxBR1MJKz0gLURDQ19WRVJTSU9OPSQoQ0NfVkVS
U0lPTikKIEdPQ0ZMQUdTCSs9IC1EQ0NfVkVSU0lPTj0kKENDX1ZFUlNJT04pCiAKICMgZW5zdXJl
ICQoQlVJTERfRElSKS9rY29uZmlnLCAkKEJVSUxEX0RJUikvaW5jbHVkZSBhbmQgJChCVUlMRF9E
SVIpL2luY2x1ZGUvdWsgZXhpc3RzCi0kKGNhbGwgbWtfc3ViX2J1aWxkX2RpcixrY29uZmlnLm5l
dykKKyQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGtjb25maWcpCiAkKGNhbGwgbWtfc3ViX2J1aWxk
X2RpcixpbmNsdWRlKQogJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsaW5jbHVkZS91aykKIApkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNTMyYzUuLjAwMDAw
MDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0x
LDIwOCArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0jID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotIyBVbmlrcmFmdCBjb25maWd1cmF0aW9uIHRhcmdldHMKLSMgVGhlc2Ug
dGFyZ2V0cyBhcmUgdXNlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQotCi1QSE9OWSArPSB4Y29u
ZmlnIGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25m
aWcgXAotCWJ1aWxkX21lbnVjb25maWcgYnVpbGRfbmNvbmZpZyBidWlsZF9nY29uZmlnIGJ1aWxk
X3hjb25maWcKLQotaWZkZWYgS0JVSUxEX0tDT05GSUcKLUtjb25maWcgOj0gJChLQlVJTERfS0NP
TkZJRykKLWVsc2UKLUtjb25maWcgOj0gS2NvbmZpZwotZW5kaWYKLQotaWZlcSAoJChxdWlldCks
c2lsZW50XykKLXNpbGVudCA6PSAtcwotZW5kaWYKLQotIyBXZSBuZWVkIHRoaXMsIGluIGNhc2Ug
dGhlIHVzZXIgaGFzIGl0IGluIGl0cyBlbnZpcm9ubWVudAotdW5leHBvcnQgQ09ORklHXwotCi14
Y29uZmlnOiAkKG9iaikvcWNvbmYKLQkkPCAkKHNpbGVudCkgJChLY29uZmlnKQotCi1nY29uZmln
OiAkKG9iaikvZ2NvbmYKLQkkPCAkKHNpbGVudCkgJChLY29uZmlnKQotCi1tZW51Y29uZmlnOiAk
KG9iaikvbWNvbmYKLQkkPCAkKHNpbGVudCkgJChLY29uZmlnKQotCi1jb25maWc6ICQob2JqKS9j
b25mCi0JJDwgJChzaWxlbnQpIC0tb2xkYXNrY29uZmlnICQoS2NvbmZpZykKLQotbmNvbmZpZzog
JChvYmopL25jb25mCi0JJDwgJChzaWxlbnQpICQoS2NvbmZpZykKLQotYnVpbGRfbWVudWNvbmZp
ZzogJChvYmopL21jb25mCi0KLWJ1aWxkX25jb25maWc6ICQob2JqKS9uY29uZgotCi1idWlsZF9n
Y29uZmlnOiAkKG9iaikvZ2NvbmYKLQotYnVpbGRfeGNvbmZpZzogJChvYmopL3Fjb25mCi0KLWxv
Y2FseWVzY29uZmlnIGxvY2FsbW9kY29uZmlnOiAkKG9iaikvY29uZgotCSQoUSlwZXJsICQoc3Jj
dHJlZSkvJChzcmMpL3N0cmVhbWxpbmVfY29uZmlnLnBsIC0tJEAgJChzcmN0cmVlKSAkKEtjb25m
aWcpID4gLnRtcC5jb25maWcKLQkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCQlcCi0J
CQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJCVwKLQkJCShtdiAtZiAuY29uZmlnIC5j
b25maWcub2xkLjE7CQkJXAotCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXAotCQkJ
ICQ8ICQoc2lsZW50KSAtLW9sZGNvbmZpZyAkKEtjb25maWcpOwkJXAotCQkJIG12IC1mIC5jb25m
aWcub2xkLjEgLmNvbmZpZy5vbGQpCQlcCi0JZWxzZQkJCQkJCQkJXAotCQkJbXYgLWYgLnRtcC5j
b25maWcgLmNvbmZpZzsJCQlcCi0JCQkkPCAkKHNpbGVudCkgLS1vbGRjb25maWcgJChLY29uZmln
KTsJCVwKLQlmaQotCSQoUSlybSAtZiAudG1wLmNvbmZpZwotCi0jIFRoZXNlIHRhcmdldHMgbWFw
IDE6MSB0byB0aGUgY29tbWFuZGxpbmUgb3B0aW9ucyBvZiAnY29uZicKLSMKLSMgTm90ZToKLSMg
IHN5bmNjb25maWcgaGFzIGJlY29tZSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwg
YW5kIGlzIG5vdwotIyAgZGVwcmVjYXRlZCBmb3IgZXh0ZXJuYWwgdXNlCi1zaW1wbGUtdGFyZ2V0
cyA6PSBvbGRjb25maWcgYWxsbm9jb25maWcgYWxseWVzY29uZmlnIGFsbG1vZGNvbmZpZyBcCi0J
YWxsZGVmY29uZmlnIHJhbmRjb25maWcgbGlzdG5ld2NvbmZpZyBvbGRkZWZjb25maWcgc3luY2Nv
bmZpZwotUEhPTlkgKz0gJChzaW1wbGUtdGFyZ2V0cykKLQotJChzaW1wbGUtdGFyZ2V0cyk6ICQo
b2JqKS9jb25mCi0JJDwgJChzaWxlbnQpIC0tJEAgJChLY29uZmlnKQotCi1QSE9OWSArPSBzYXZl
ZGVmY29uZmlnIGRlZmNvbmZpZwotCi1zYXZlZGVmY29uZmlnOiAkKG9iaikvY29uZgotCSQ8ICQo
c2lsZW50KSAtLSRAPWRlZmNvbmZpZyAkKEtjb25maWcpCi0KLWRlZmNvbmZpZzogJChvYmopL2Nv
bmYKLWlmZXEgKCQoS0JVSUxEX0RFRkNPTkZJRyksKQotCSQ8ICQoc2lsZW50KSAtLWRlZmNvbmZp
ZyAkKEtjb25maWcpCi1lbHNlIGlmbmVxICgkKHdpbGRjYXJkICQoc3JjdHJlZSkvYXJjaC8kKFNS
Q0FSQ0gpL2NvbmZpZ3MvJChLQlVJTERfREVGQ09ORklHKSksKQotCUAkKGtlY2hvKSAiKioqIERl
ZmF1bHQgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiAnJChLQlVJTERfREVGQ09ORklHKSciCi0J
JChRKSQ8ICQoc2lsZW50KSAtLWRlZmNvbmZpZz1hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kKEtC
VUlMRF9ERUZDT05GSUcpICQoS2NvbmZpZykKLWVsc2UKLQlAJChrZWNobykgIioqKiBEZWZhdWx0
IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24gdGFyZ2V0ICckKEtCVUlMRF9ERUZDT05GSUcpJyIK
LQkkKFEpJChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2VmaWxlICQoS0JVSUxEX0RFRkNPTkZJRykK
LWVuZGlmCi0KLSVfZGVmY29uZmlnOiAkKG9iaikvY29uZgotCSQoUSkkPCAkKHNpbGVudCkgLS1k
ZWZjb25maWc9YXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3MvJEAgJChLY29uZmlnKQotCi1jb25maWdm
aWxlcz0kKHdpbGRjYXJkICQoc3JjdHJlZSkva2VybmVsL2NvbmZpZ3MvJEAgJChzcmN0cmVlKS9h
cmNoLyQoU1JDQVJDSCkvY29uZmlncy8kQCkKLQotJS5jb25maWc6ICQob2JqKS9jb25mCi0JJChp
ZiAkKGNhbGwgY29uZmlnZmlsZXMpLCwgJChlcnJvciBObyBjb25maWd1cmF0aW9uIGV4aXN0cyBm
b3IgdGhpcyB0YXJnZXQgb24gdGhpcyBhcmNoaXRlY3R1cmUpKQotCSQoUSkkKENPTkZJR19TSEVM
TCkgJChzcmN0cmVlKS9zY3JpcHRzL2tjb25maWcvbWVyZ2VfY29uZmlnLnNoIC1tIC5jb25maWcg
JChjb25maWdmaWxlcykKLQkrJChRKXllcyAiIiB8ICQoTUFLRSkgLWYgJChzcmN0cmVlKS9NYWtl
ZmlsZSBvbGRjb25maWcKLQotUEhPTlkgKz0ga3ZtY29uZmlnCi1rdm1jb25maWc6IGt2bV9ndWVz
dC5jb25maWcKLQlAOgotCi1QSE9OWSArPSB4ZW5jb25maWcKLXhlbmNvbmZpZzogeGVuLmNvbmZp
ZwotCUA6Ci0KLVBIT05ZICs9IHRpbnljb25maWcKLXRpbnljb25maWc6Ci0JJChRKSQoTUFLRSkg
LWYgJChzcmN0cmVlKS9NYWtlZmlsZSBhbGxub2NvbmZpZyB0aW55LmNvbmZpZwotCi0jIENIRUNL
OiAtbyBjYWNoZV9kaXI9PHBhdGg+IHdvcmtpbmc/Ci1QSE9OWSArPSB0ZXN0Y29uZmlnCi10ZXN0
Y29uZmlnOiAkKG9iaikvY29uZgotCSQoUFlUSE9OMykgLUIgLW0gcHl0ZXN0ICQoc3JjdHJlZSkv
JChzcmMpL3Rlc3RzIFwKLQktbyBjYWNoZV9kaXI9JChhYnNwYXRoICQob2JqKS90ZXN0cy8uY2Fj
aGUpIFwKLQkkKGlmICQoZmluZHN0cmluZyAxLCQoS0JVSUxEX1ZFUkJPU0UpKSwtLWNhcHR1cmU9
bm8pCi1jbGVhbi1kaXJzICs9IHRlc3RzLy5jYWNoZQotCi0jIEhlbHAgdGV4dCB1c2VkIGJ5IG1h
a2UgaGVscAotaGVscDoKLQlAZWNobyAgJyAgY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25m
aWcgdXRpbGlzaW5nIGEgbGluZS1vcmllbnRlZCBwcm9ncmFtJwotCUBlY2hvICAnICBuY29uZmln
ICAgICAgICAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbmN1cnNlcyBtZW51
IGJhc2VkIHByb2dyYW0nCi0JQGVjaG8gICcgIG1lbnVjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50
IGNvbmZpZyB1dGlsaXNpbmcgYSBtZW51IGJhc2VkIHByb2dyYW0nCi0JQGVjaG8gICcgIHhjb25m
aWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBRdCBiYXNlZCBmcm9udC1l
bmQnCi0JQGVjaG8gICcgIGdjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNp
bmcgYSBHVEsrIGJhc2VkIGZyb250LWVuZCcKLQlAZWNobyAgJyAgb2xkY29uZmlnCSAgLSBVcGRh
dGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlJwot
CUBlY2hvICAnICBsb2NhbG1vZGNvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgZGlzYWJs
aW5nIG1vZHVsZXMgbm90IGxvYWRlZCcKLQlAZWNobyAgJyAgbG9jYWx5ZXNjb25maWcgIC0gVXBk
YXRlIGN1cnJlbnQgY29uZmlnIGNvbnZlcnRpbmcgbG9jYWwgbW9kcyB0byBjb3JlJwotCUBlY2hv
ICAnICBkZWZjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGZyb20gQVJDSCBzdXBw
bGllZCBkZWZjb25maWcnCi0JQGVjaG8gICcgIHNhdmVkZWZjb25maWcgICAtIFNhdmUgY3VycmVu
dCBjb25maWcgYXMgLi9kZWZjb25maWcgKG1pbmltYWwgY29uZmlnKScKLQlAZWNobyAgJyAgYWxs
bm9jb25maWcJICAtIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdp
dGggbm8nCi0JQGVjaG8gICcgIGFsbHllc2NvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aGVyZSBhbGwg
b3B0aW9ucyBhcmUgYWNjZXB0ZWQgd2l0aCB5ZXMnCi0JQGVjaG8gICcgIGFsbG1vZGNvbmZpZwkg
IC0gTmV3IGNvbmZpZyBzZWxlY3RpbmcgbW9kdWxlcyB3aGVuIHBvc3NpYmxlJwotCUBlY2hvICAn
ICBhbGxkZWZjb25maWcgICAgLSBOZXcgY29uZmlnIHdpdGggYWxsIHN5bWJvbHMgc2V0IHRvIGRl
ZmF1bHQnCi0JQGVjaG8gICcgIHJhbmRjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCByYW5kb20g
YW5zd2VyIHRvIGFsbCBvcHRpb25zJwotCUBlY2hvICAnICBsaXN0bmV3Y29uZmlnICAgLSBMaXN0
IG5ldyBvcHRpb25zJwotCUBlY2hvICAnICBvbGRkZWZjb25maWcJICAtIFNhbWUgYXMgb2xkY29u
ZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRoZWlyJwotCUBlY2hvICAnICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0IHZhbHVlIHdpdGhvdXQgcHJvbXB0aW5nJwotCUBlY2hvICAnICBrdm1j
b25maWcJICAtIEVuYWJsZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGt2bSBndWVzdCBrZXJuZWwg
c3VwcG9ydCcKLQlAZWNobyAgJyAgeGVuY29uZmlnICAgICAgIC0gRW5hYmxlIGFkZGl0aW9uYWwg
b3B0aW9ucyBmb3IgeGVuIGRvbTAgYW5kIGd1ZXN0IGtlcm5lbCBzdXBwb3J0JwotCUBlY2hvICAn
ICB0aW55Y29uZmlnCSAgLSBDb25maWd1cmUgdGhlIHRpbmllc3QgcG9zc2libGUga2VybmVsJwot
CUBlY2hvICAnICB0ZXN0Y29uZmlnCSAgLSBSdW4gS2NvbmZpZyB1bml0IHRlc3RzIChyZXF1aXJl
cyBweXRob24zIGFuZCBweXRlc3QpJwotCi0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotIyBvYmplY3Qg
ZmlsZXMgdXNlZCBieSBhbGwga2NvbmZpZyBmbGF2b3VycwotY29tbW9uLW9ianMJOj0gY29uZmRh
dGEubyBleHByLm8gbGV4ZXIubGV4Lm8gcGFyc2VyLnRhYi5vIHByZXByb2Nlc3MubyBcCi0JCSAg
IHN5bWJvbC5vCi0KLSQob2JqKS9sZXhlci5sZXgubzogJChvYmopL3BhcnNlci50YWIuaAotSE9T
VENGTEFHU19sZXhlci5sZXgubwk6PSAtSSAkKHNyY3RyZWUpLyQoc3JjKQotSE9TVENGTEFHU19w
YXJzZXIudGFiLm8JOj0gLUkgJChzcmN0cmVlKS8kKHNyYykKLQotIyBjb25mOiBVc2VkIGZvciBk
ZWZjb25maWcsIG9sZGNvbmZpZyBhbmQgcmVsYXRlZCB0YXJnZXRzCi1ob3N0cHJvZ3MteQkrPSBj
b25mCi1jb25mLW9ianMJOj0gY29uZi5vICQoY29tbW9uLW9ianMpCi0KLSMgbmNvbmY6IFVzZWQg
Zm9yIHRoZSBuY29uZmlnIHRhcmdldCBiYXNlZCBvbiBuY3Vyc2VzCi1ob3N0cHJvZ3MteQkrPSBu
Y29uZgotbmNvbmYtb2Jqcwk6PSBuY29uZi5vIG5jb25mLmd1aS5vICQoY29tbW9uLW9ianMpCi0K
LUhPU1RMRExJQlNfbmNvbmYJPSAkKHNoZWxsIC4gJChvYmopL25jb25mLWNmZyAmJiBlY2hvICQk
bGlicykKLUhPU1RDRkxBR1NfbmNvbmYubwk9ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2ZnICYm
IGVjaG8gJCRjZmxhZ3MpCi1IT1NUQ0ZMQUdTX25jb25mLmd1aS5vCT0gJChzaGVsbCAuICQob2Jq
KS9uY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykKLQotJChvYmopL25jb25mLm8gJChvYmopL25j
b25mLmd1aS5vOiAkKG9iaikvbmNvbmYtY2ZnCi0KLSMgbWNvbmY6IFVzZWQgZm9yIHRoZSBtZW51
Y29uZmlnIHRhcmdldCBiYXNlZCBvbiBseGRpYWxvZwotaG9zdHByb2dzLXkJKz0gbWNvbmYKLWx4
ZGlhbG9nCTo9IGNoZWNrbGlzdC5vIGlucHV0Ym94Lm8gbWVudWJveC5vIHRleHRib3gubyB1dGls
Lm8geWVzbm8ubwotbWNvbmYtb2Jqcwk6PSBtY29uZi5vICQoYWRkcHJlZml4IGx4ZGlhbG9nLywg
JChseGRpYWxvZykpICQoY29tbW9uLW9ianMpCi0KLUhPU1RMRExJQlNfbWNvbmYgPSAkKHNoZWxs
IC4gJChvYmopL21jb25mLWNmZyAmJiBlY2hvICQkbGlicykKLSQoZm9yZWFjaCBmLCBtY29uZi5v
ICQobHhkaWFsb2cpLCBcCi0gICQoZXZhbCBIT1NUQ0ZMQUdTXyRmID0gJCQoc2hlbGwgLiAkKG9i
aikvbWNvbmYtY2ZnICYmIGVjaG8gJCQkJGNmbGFncykpKQotCi0kKG9iaikvbWNvbmYubzogJChv
YmopL21jb25mLWNmZwotJChhZGRwcmVmaXggJChvYmopL2x4ZGlhbG9nLywgJChseGRpYWxvZykp
OiAkKG9iaikvbWNvbmYtY2ZnCi0KLSMgcWNvbmY6IFVzZWQgZm9yIHRoZSB4Y29uZmlnIHRhcmdl
dCBiYXNlZCBvbiBRdAotaG9zdHByb2dzLXkJKz0gcWNvbmYKLXFjb25mLWN4eG9ianMJOj0gcWNv
bmYubwotcWNvbmYtb2Jqcwk6PSBpbWFnZXMubyAkKGNvbW1vbi1vYmpzKQotCi1IT1NUTERMSUJT
X3Fjb25mCT0gJChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcgJiYgZWNobyAkJGxpYnMpCi1IT1NU
Q1hYRkxBR1NfcWNvbmYubwk9ICQoc2hlbGwgLiAkKG9iaikvcWNvbmYtY2ZnICYmIGVjaG8gJCRj
ZmxhZ3MpCi0KLSQob2JqKS9xY29uZi5vOiAkKG9iaikvcWNvbmYtY2ZnICQob2JqKS9xY29uZi5t
b2MKLQotcXVpZXRfY21kX21vYyA9IE1PQyAgICAgJEAKLSAgICAgIGNtZF9tb2MgPSAkKHNoZWxs
IC4gJChvYmopL3Fjb25mLWNmZyAmJiBlY2hvICQkbW9jKSAtaSAkPCAtbyAkQAotCi0kKG9iaikv
JS5tb2M6ICQoc3JjKS8lLmggJChvYmopL3Fjb25mLWNmZwotCSQoY2FsbCBjbWQsbW9jKQotCi0j
IGdjb25mOiBVc2VkIGZvciB0aGUgZ2NvbmZpZyB0YXJnZXQgYmFzZWQgb24gR1RLKwotaG9zdHBy
b2dzLXkJKz0gZ2NvbmYKLWdjb25mLW9ianMJOj0gZ2NvbmYubyBpbWFnZXMubyAkKGNvbW1vbi1v
YmpzKQotCi1IT1NUTERMSUJTX2djb25mICAgID0gJChzaGVsbCAuICQob2JqKS9nY29uZi1jZmcg
JiYgZWNobyAkJGxpYnMpCi1IT1NUQ0ZMQUdTX2djb25mLm8gID0gJChzaGVsbCAuICQob2JqKS9n
Y29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykKLQotJChvYmopL2djb25mLm86ICQob2JqKS9nY29u
Zi1jZmcKLQotIyBjaGVjayBpZiBuZWNlc3NhcnkgcGFja2FnZXMgYXJlIGF2YWlsYWJsZSwgYW5k
IGNvbmZpZ3VyZSBidWlsZCBmbGFncwotZmlsZWNoa19jb25mX2NmZyA9ICQoQ09ORklHX1NIRUxM
KSAkPAotCi0kKG9iaikvJWNvbmYtY2ZnOiAkKHNyYykvJWNvbmYtY2ZnLnNoIEZPUkNFCi0JJChj
YWxsIGZpbGVjaGssY29uZl9jZmcpCi0KLWNsZWFuLWZpbGVzICs9ICpjb25mLWNmZwpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvTWFrZWZpbGUuYnIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkOWE1Y2YuLjAw
MDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorKysgL2Rldi9udWxs
CkBAIC0xLDE0MSArMCwwIEBACi1zcmMgOj0gLgotdG9wX3NyY2Rpcj0uLi8uLi8KLXRvcF9idWls
ZGRpcj0uLi8uLi8KLXNyY3RyZWUgOj0gLgotb2JqID89IC4KLQotLlNVRkZJWEVTIDoKLQotaW5j
bHVkZSBNYWtlZmlsZS5ydWxlcwotaW5jbHVkZSBNYWtlZmlsZQotI0hPU1RDRkxBR1MrPS1EaW5s
aW5lPSIiIC1pbmNsdWRlIGZvby5oCi0taW5jbHVkZSAkKG9iaikvLmRlcGVuZAotCi1fX2hvc3Rw
cm9ncyA6PSAkKHNvcnQgJChob3N0cHJvZ3MteSkgJChob3N0cHJvZ3MtbSkpCi1ob3N0LWNzaGxp
YiA6PSAkKHNvcnQgJChob3N0bGlicy15KSAkKGhvc3RsaWJzLW0pKQotaG9zdC1jeHhzaGxpYiA6
PSAkKHNvcnQgJChob3N0Y3h4bGlicy15KSAkKGhvc3RjeHhsaWJzLW0pKQotCi0jIEMgY29kZQot
IyBFeGVjdXRhYmxlcyBjb21waWxlZCBmcm9tIGEgc2luZ2xlIC5jIGZpbGUKLWhvc3QtY3Npbmds
ZTo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCBcCi0gICAgICAgICAgICAgJChpZiAkKCQo
bSktb2JqcykkKCQobSktY3h4b2JqcyksLCQobSkpKQotaG9zdC1jbXVsdGkgOj0gJChmb3JlYWNo
IG0sJChfX2hvc3Rwcm9ncyksXAotCQkgICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSws
JChpZiAkKCQobSktb2JqcyksJChtKSkpKQotIyBPYmplY3QgKC5vKSBmaWxlcyBjb21waWxlZCBm
cm9tIC5jIGZpbGVzCi1ob3N0LWNvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rw
cm9ncyksJCgkKG0pLW9ianMpKSkKLQotIyBDKysgY29kZQotIyBDKysgZXhlY3V0YWJsZXMgY29t
cGlsZWQgZnJvbSBhdCBsZWFzdCBvbmUgLmNjIGZpbGUKLSMgYW5kIHplcm8gb3IgbW9yZSAuYyBm
aWxlcwotIGhvc3QtY3h4bXVsdGkgICA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlm
ICQoJChtKS1jeHhvYmpzKSwkKG0pKSkKLSMgQysrIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBpbGVk
IGZyb20gLmNjIGZpbGVzCi1ob3N0LWN4eG9ianMgICAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQo
aG9zdC1jeHhtdWx0aSksJCgkKG0pLWN4eG9ianMpKSkKLSNPYmplY3QgKC5vKSBmaWxlcyB1c2Vk
IGJ5IHRoZSBzaGFyZWQgbGliYXJpZXMKLWhvc3QtY3Nob2JqcyAgICA6PSAkKHNvcnQgJChmb3Jl
YWNoIG0sJChob3N0LWNzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQotaG9zdC1jeHhzaG9ianMg
IDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3h4c2hsaWIpLCQoJChtOi5zbz0tb2Jqcykp
KSkKLQotCi1ob3N0LWNzaW5nbGUgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3Npbmds
ZSkpCi1ob3N0LWNtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY211bHRpKSkK
LWhvc3QtY3h4bXVsdGkgIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG11bHRpKSkK
LWhvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY29ianMpKQotaG9zdC1j
eHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQotZml4ZGVwLW9i
anMgOj0gJChvYmopL2ZpeGRlcC5vCi0KLUhPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKHNyYykgLUkk
KG9iaikgLURDT05GSUdfPVwiXCIKLQotX2hvc3RjX2ZsYWdzID0gJChIT1NUQ0ZMQUdTKSAkKEhP
U1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHU18kKGJhc2V0YXJnZXQpLm8pCi1faG9zdGN4eF9m
bGFncyA9ICQoSE9TVENYWEZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENYWEZMQUdT
XyQoYmFzZXRhcmdldCkubykKLQotaG9zdGNfZmxhZ3MgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkg
JChfaG9zdGNfZmxhZ3MpCi1ob3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9o
b3N0Y3h4X2ZsYWdzKQotCi0kKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQotCSQoSE9TVEND
KSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAk
PCAtbyAkQAotCi0kKGZpeGRlcC1vYmpzKTogJChzcmMpL2ZpeGRlcC5jCi0JJChIT1NUQ0MpICQo
SE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8
IC1vICRACi0KLSMjIyMjCi0jIENvbXBpbGUgcHJvZ3JhbXMgb24gdGhlIGhvc3QKLQotIyBDcmVh
dGUgZXhlY3V0YWJsZSBmcm9tIGEgc2luZ2xlIC5jIGZpbGUKLSMgaG9zdC1jc2luZ2xlIC0+IEV4
ZWN1dGFibGUKLXF1aWV0X2NtZF9ob3N0LWNzaW5nbGUgCT0gSE9TVENDICAkQAotICAgICAgY21k
X2hvc3QtY3NpbmdsZQk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RMREZMQUdTKSAt
byAkQCAkPCBcCi0JCSQoSE9TVExETElCUykgJChIT1NUTERMSUJTXyQoQEYpKQotJChob3N0LWNz
aW5nbGUpOiAkKG9iaikvJTogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCi0JJChjYWxs
IGlmX2NoYW5nZWRfZGVwLGhvc3QtY3NpbmdsZSkKLQotIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFz
ZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYWxsIHBsYWluIGMKLSMgaG9zdC1jbXVsdGkgLT4gZXhl
Y3V0YWJsZQotcXVpZXRfY21kX2hvc3QtY211bHRpCT0gSE9TVExEICAkQAotICAgICAgY21kX2hv
c3QtY211bHRpCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpIC1vICRAIFwKLQkJCSAgJChhZGRw
cmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpKSBcCi0JCQkgICQoSE9TVF9MREZMQUdTKSAkKEhP
U1RMRExJQlNfJChARikpCi0kKGhvc3QtY211bHRpKTogJChvYmopL2ZpeGRlcCBGT1JDRQotCSQo
Y2FsbCBpZl9jaGFuZ2VkLGhvc3QtY211bHRpKQotJChjYWxsIG11bHRpX2RlcGVuZCwkKGhvc3Qt
Y211bHRpKSwgLCAtb2JqcykKLQotCi0jIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmMg
ZmlsZQotIyBob3N0LWNvYmpzIC0+IC5vCi1xdWlldF9jbWRfaG9zdC1jb2Jqcwk9IEhPU1RDQyAg
JEAKLSAgICAgIGNtZF9ob3N0LWNvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9T
VENGTEFHU18kKEBGKSlcCi0JCQkgIC1jIC1vICRAICQ8Ci0kKGZpbHRlci1vdXQgJS50YWIubywg
JChmaWx0ZXItb3V0ICUubGV4Lm8sJChob3N0LWNvYmpzKSkpOiAkKG9iaikvJS5vOlwKLQkJJChz
cmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3Qt
Y29ianMpCi0KLSQoZmlsdGVyICUubGV4Lm8sJChob3N0LWNvYmpzKSk6ICQob2JqKS8lLmxleC5v
OiAgJChvYmopLyUubGV4LmMgJChvYmopL2ZpeGRlcCBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2Vk
X2RlcCxob3N0LWNvYmpzKQotCi0kKGZpbHRlciAlLnRhYi5vLCQoaG9zdC1jb2JqcykpOiAkKG9i
aikvJS50YWIubzogICQob2JqKS8lLnRhYi5jICQob2JqKS9maXhkZXAgRk9SQ0UKLQkkKGNhbGwg
aWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykKLQotIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFzZWQg
b24gbGlzdCBvZiAubyBmaWxlcywgYSBtaXh0dXJlIG9mIC5jIGFuZCAuY2MKLSMgaG9zdC1jeHht
dWx0aSAtPiBleGVjdXRhYmxlCi1xdWlldF9jbWRfaG9zdC1jeHhtdWx0aQk9IEhPU1RMRCAgJEAK
LSAgICAgIGNtZF9ob3N0LWN4eG11bHRpCT0gJChIT1NUQ1hYKSAkKEhPU1RMREZMQUdTKSAtbyAk
QFwKLQkJCSAgJChmb3JlYWNoIG8sb2JqcyBjeHhvYmpzLFwKLQkJCSAgJChhZGRwcmVmaXggJChv
YmopLywkKCQoQEYpLSQobykpKSkgXAotCQkJICAkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18k
KEBGKSkKLSQoaG9zdC1jeHhtdWx0aSk6IEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWQsaG9zdC1j
eHhtdWx0aSkKLSQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWN4eG11bHRpKSwgLCAtb2JqcyAt
Y3h4b2JqcykKLQotCi0jIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmNjIChDKyspIGZp
bGUKLXF1aWV0X2NtZF9ob3N0LWN4eG9ianMJPSBIT1NUQ1hYICRACi0gICAgICBjbWRfaG9zdC1j
eHhvYmpzCT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3MpICQoSE9TVENYWEZMQUdTXyQoQEYp
KSBcCi0JCQkgIC1jIC1vICRAICQ8Ci0kKGhvc3QtY3h4b2Jqcyk6ICQob2JqKS8lLm86ICQoc3Jj
KS8lLmNjIEZPUkNFCi0JJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3h4b2JqcykKLQotIyBD
b21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxlCi0jIGhv
c3QtY3Nob2JqcyAtPiAubwotcXVpZXRfY21kX2hvc3QtY3Nob2Jqcwk9IEhPU1RDQyAgLWZQSUMg
JEAKLSAgICAgIGNtZF9ob3N0LWNzaG9ianMJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgLWZQ
SUMgLWMgLW8gJEAgJDwKLSQoaG9zdC1jc2hvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuYyBG
T1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNzaG9ianMpCi0KLSMgQ29tcGlsZSAu
YyBmaWxlLCBjcmVhdGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgLm8gZmlsZQotIyBOb3RlIHRoYXQg
cGx1Z2luIGNhcGFibGUgZ2NjIHZlcnNpb25zIGNhbiBiZSBlaXRoZXIgQyBvciBDKysgYmFzZWQK
LSMgdGhlcmVmb3JlIHBsdWdpbiBzb3VyY2UgZmlsZXMgaGF2ZSB0byBiZSBjb21waWxhYmxlIGlu
IGJvdGggQyBhbmQgQysrIG1vZGUuCi0jIFRoaXMgaXMgd2h5IGEgQysrIGNvbXBpbGVyIGlzIGlu
dm9rZWQgb24gYSAuYyBmaWxlLgotIyBob3N0LWN4eHNob2JqcyAtPiAubwotcXVpZXRfY21kX2hv
c3QtY3h4c2hvYmpzCT0gSE9TVENYWCAtZlBJQyAkQAotICAgICAgY21kX2hvc3QtY3h4c2hvYmpz
CT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3MpIC1mUElDIC1jIC1vICRAICQ8Ci0kKGhvc3Qt
Y3h4c2hvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCi0J
QGVjaG8gdGVzdC0tJEAKLQkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jeHhzaG9ianMpCi0K
LWNsZWFuOgotCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQot
ZGlzdGNsZWFuOiBjbGVhbgotCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQobHhkaWFs
b2cpICQoY29uZi1vYmpzKSAkKG1jb25mLW9ianMpICQoa3hnZXR0ZXh0LW9ianMpIFwKLQkJJCho
b3N0cHJvZ3MteSkgJChxY29uZi1jeHhvYmpzKSAkKHFjb25mLW9ianMpICQoZ2NvbmYtb2Jqcykg
XAotCQltY29uZiAuZGVwZW5kKQotCi1GT1JDRToKLS5QSE9OWTogRk9SQ0UgY2xlYW4gZGlzdGNs
ZWFuCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzhhOWM4MS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LnJ1bGVzCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAota2VjaG8gOj0gZWNobwotY29t
bWEgOj0gLAotCi0KLWRvdC10YXJnZXQgPSAkKGRpciAkQCkuJChub3RkaXIgJEApCi0KLWFueS1w
cmVyZXEgPSAkKGZpbHRlci1vdXQgJChQSE9OWSksJD8pICQoZmlsdGVyLW91dCAkKFBIT05ZKSAk
KHdpbGRjYXJkICReKSwkXikKLQotYXJnLWNoZWNrID0gJChpZiAkKHN0cmlwICQoY21kXyRAKSks
LDEpCi0KLW1ha2UtY21kID0gJChjYWxsIGVzY3NxLCQoc3Vic3QgJChwb3VuZCksJCQocG91bmQp
LCQoc3Vic3QgJCQsJCQkJCwkKGNtZF8kKDEpKSkpKQotCi0jIHByaW50aW5nIGNvbW1hbmRzCi1j
bWQgPSBAc2V0IC1lOyAkKGVjaG8tY21kKSAkKGNtZF8kKDEpKQotCi1kZXBmaWxlID0gJChzdWJz
dCAkKGNvbW1hKSxfLCQoZG90LXRhcmdldCkuZCkKLWRlcGZsYWdzID0gLVdwJChjb21tYSktTUQk
KGNvbW1hKSQoY2FsbCBkb3QtdGFyZ2V0KQotCi1jbWRfYW5kX2ZpeGRlcCA9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSQoY21kKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSQob2JqKS9m
aXhkZXAgJChkZXBmaWxlKSAkQCAnJChtYWtlLWNtZCknID4gJChkb3QtdGFyZ2V0KS5jbWQ7XAot
CXJtIC1mICQoZGVwZmlsZSkKLQotaWZfY2hhbmdlZF9kZXAgPSAkKGlmICQoc3RyaXAgJChhbnkt
cHJlcmVxKSAkKGFyZy1jaGVjaykpLCQoY21kX2FuZF9maXhkZXApLEA6KQotCi1kZWZpbmUgbXVs
dGlfZGVwZW5kCi0kKGZvcmVhY2ggbSwgJChub3RkaXIgJDEpLCBcCi0gICAgJChldmFsICQob2Jq
KS8kbTogXAotICAgICQoYWRkcHJlZml4ICQob2JqKS8sICQoZm9yZWFjaCBzLCAkMywgJCgkKG06
JSQoc3RyaXAgJDIpPSUkKHMpKSkpKSkpCi1lbmRlZgotCi0jIyMKLSMgZmlsZWNoayBpcyB1c2Vk
IHRvIGNoZWNrIGlmIHRoZSBjb250ZW50IG9mIGEgZ2VuZXJhdGVkIGZpbGUgaXMgdXBkYXRlZC4K
LSMgU2FtcGxlIHVzYWdlOgotIwotIyBmaWxlY2hrX3NhbXBsZSA9IGVjaG8gJChLRVJORUxSRUxF
QVNFKQotIyB2ZXJzaW9uLmg6IEZPUkNFCi0jICAgJChjYWxsIGZpbGVjaGssc2FtcGxlKQotIwot
IyBUaGUgcnVsZSBkZWZpbmVkIHNoYWxsIHdyaXRlIHRvIHN0ZG91dCB0aGUgY29udGVudCBvZiB0
aGUgbmV3IGZpbGUuCi0jIFRoZSBleGlzdGluZyBmaWxlIHdpbGwgYmUgY29tcGFyZWQgd2l0aCB0
aGUgbmV3IG9uZS4KLSMgLSBJZiBubyBmaWxlIGV4aXN0IGl0IGlzIGNyZWF0ZWQKLSMgLSBJZiB0
aGUgY29udGVudCBkaWZmZXIgdGhlIG5ldyBmaWxlIGlzIHVzZWQKLSMgLSBJZiB0aGV5IGFyZSBl
cXVhbCBubyBjaGFuZ2UsIGFuZCBubyB0aW1lc3RhbXAgdXBkYXRlCi0jIC0gc3RkaW4gaXMgcGlw
ZWQgaW4gZnJvbSB0aGUgZmlyc3QgcHJlcmVxdWlzaXRlICgkPCkgc28gb25lIGhhcwotIyAgIHRv
IHNwZWNpZnkgYSB2YWxpZCBmaWxlIGFzIGZpcnN0IHByZXJlcXVpc2l0ZSAob2Z0ZW4gdGhlIGti
dWlsZCBmaWxlKQotZGVmaW5lIGZpbGVjaGsKLQkkKFEpc2V0IC1lOyAgICAgICAgICAgICBcCi0J
bWtkaXIgLXAgJChkaXIgJEApOyAgICAgICAgIFwKLQl7ICQoZmlsZWNoa18kKDEpKTsgfSA+ICRA
LnRtcDsgICAgICBcCi0JaWYgWyAtciAkQCBdICYmIGNtcCAtcyAkQCAkQC50bXA7IHRoZW4gIFwK
LQkgICAgcm0gLWYgJEAudG1wOyAgICAgICAgICAgXAotCWVsc2UgICAgICAgICAgICAgICAgICAg
IFwKLQkgICAgJChrZWNobykgJyAgVVBEICAgICAkQCc7ICAgIFwKLQkgICAgbXYgLWYgJEAudG1w
ICRAOyAgICAgICAgXAotCWZpCi1lbmRlZgotCi0jIEV4ZWN1dGUgY29tbWFuZCBpZiBjb21tYW5k
IGhhcyBjaGFuZ2VkIG9yIHByZXJlcXVpc2l0ZShzKSBhcmUgdXBkYXRlZC4KLWlmX2NoYW5nZWQg
PSAkKGlmICQoc3RyaXAgJChhbnktcHJlcmVxKSAkKGFyZy1jaGVjaykpLAkJXAotCSQoY21kKTtc
Ci0JcHJpbnRmICclc1xuJyAnY21kXyRAIDo9ICQobWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCku
Y21kLCBAOikKLQotIyBMRVgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1xdWlldF9jbWRfZmxleCA9
IExFWCAkQAotY21kX2ZsZXggPSAkKExFWCkgLW8kQCAtTCAkPAotCi0kKG9iaikvJS5sZXguYzog
JChzcmMpLyUubCBGT1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGZsZXgpCi0KLSMgWUFDQwotIyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLXF1aWV0X2NtZF9iaXNvbiA9IFlBQ0MgICAgJEAKLWNtZF9iaXNv
biA9ICQoWUFDQykgLW8kQCAtdCAtbCAkPAotCi0kKG9iaikvJS50YWIuYzogJChzcmMpLyUueSBG
T1JDRQotCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uKQotCi1xdWlldF9jbWRfYmlzb25faCA9IFlB
Q0MgICAgJEAKLWNtZF9iaXNvbl9oID0gJChZQUNDKSAtby9kZXYvbnVsbCAtLWRlZmluZXM9JEAg
LXQgLWwgJDwKLQotJChvYmopLyUudGFiLmg6ICQoc3JjKS8lLnkgRk9SQ0UKLQkkKGNhbGwgaWZf
Y2hhbmdlZCxiaXNvbl9oKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUu
dW5pa3JhZnQgYi9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZGUzN2Y5Zi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L1JFQURNRS51bmlrcmFmdAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLVRo
aXMgaXMgYSBjb3B5IG9mIHRoZSBrY29uZmlnIGNvZGUgaW4gdGhlIGtlcm5lbCAoY3VycmVudGx5
IHY1LjIpIHR3ZWFrZWQKLXRvIHN1aXQgVW5pa3JhZnQuCi0KLVRvIHVwZGF0ZSAoZnJvbSBsaW51
eCk6Ci0JY3AgLXIgL3Vzci9zcmMvbGludXgvc2NyaXB0cy9rY29uZmlnIHN1cHBvcnQva2NvbmZp
Zy5uZXcKLQljZCBzdXBwb3J0L2tjb25maWcubmV3Ci0JY3AgLWEgLi4va2NvbmZpZy9wYXRjaGVz
IC4uL2tjb25maWcvUkVBRE1FLnVuaWtyYWZ0IC4uL2tjb25maWcvLmdpdGlnbm9yZSAuCi0JcXVp
bHQgcHVzaCAtYQotCSMgRml4IGFueSBjb25mbGljdAotCWNkIC4uCi0Jcm0gLXJmIGtjb25maWcK
LQltdiBrY29uZmlnLm5ldyBrY29uZmlnCi0KLVRoZW4gdmVyaWZ5IHRoZSB0b3BsZXZlbCB0YXJn
ZXRzIHdvcms6Ci0JY29uZmlnCi0JZGVmY29uZmlnCi0JbWVudWNvbmZpZwotCXhjb25maWcKLQln
Y29uZmlnCi0Jb2xkY29uZmlnCi0JcWNvbmZpZwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9jb25mLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2NvbmYuYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWYzNjc4Yy4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3
L2NvbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDcwMiArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBw
ZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KLSAqLwotCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNp
bmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx1bmlz
dGQuaD4KLSNpbmNsdWRlIDxnZXRvcHQuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1
ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2luY2x1ZGUgImxrYy5oIgot
Ci1zdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KTsKLXN0YXRpYyB2b2lkIGNoZWNr
X2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpOwotCi1lbnVtIGlucHV0X21vZGUgewotCW9sZGFza2Nv
bmZpZywKLQlzeW5jY29uZmlnLAotCW9sZGNvbmZpZywKLQlhbGxub2NvbmZpZywKLQlhbGx5ZXNj
b25maWcsCi0JYWxsbW9kY29uZmlnLAotCWFsbGRlZmNvbmZpZywKLQlyYW5kY29uZmlnLAotCWRl
ZmNvbmZpZywKLQlzYXZlZGVmY29uZmlnLAotCWxpc3RuZXdjb25maWcsCi0Jb2xkZGVmY29uZmln
LAotfTsKLXN0YXRpYyBlbnVtIGlucHV0X21vZGUgaW5wdXRfbW9kZSA9IG9sZGFza2NvbmZpZzsK
LQotc3RhdGljIGludCBpbmRlbnQgPSAxOwotc3RhdGljIGludCB0dHlfc3RkaW87Ci1zdGF0aWMg
aW50IHN5bmNfa2NvbmZpZzsKLXN0YXRpYyBpbnQgY29uZl9jbnQ7Ci1zdGF0aWMgY2hhciBsaW5l
W1BBVEhfTUFYXTsKLXN0YXRpYyBzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5OwotCi1zdGF0aWMgdm9p
ZCBwcmludF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQotewotCXN0cnVjdCBnc3RyIGhlbHAgPSBz
dHJfbmV3KCk7Ci0KLQltZW51X2dldF9leHRfaGVscChtZW51LCAmaGVscCk7Ci0KLQlwcmludGYo
IlxuJXNcbiIsIHN0cl9nZXQoJmhlbHApKTsKLQlzdHJfZnJlZSgmaGVscCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHN0cmlwKGNoYXIgKnN0cikKLXsKLQljaGFyICpwID0gc3RyOwotCWludCBsOwotCi0J
d2hpbGUgKChpc3NwYWNlKCpwKSkpCi0JCXArKzsKLQlsID0gc3RybGVuKHApOwotCWlmIChwICE9
IHN0cikKLQkJbWVtbW92ZShzdHIsIHAsIGwgKyAxKTsKLQlpZiAoIWwpCi0JCXJldHVybjsKLQlw
ID0gc3RyICsgbCAtIDE7Ci0Jd2hpbGUgKChpc3NwYWNlKCpwKSkpCi0JCSpwLS0gPSAwOwotfQot
Ci0vKiBIZWxwZXIgZnVuY3Rpb24gdG8gZmFjaWxpdGF0ZSBmZ2V0cygpIGJ5IEplYW4gU2FjcmVu
LiAqLwotc3RhdGljIHZvaWQgeGZnZXRzKGNoYXIgKnN0ciwgaW50IHNpemUsIEZJTEUgKmluKQot
ewotCWlmICghZmdldHMoc3RyLCBzaXplLCBpbikpCi0JCWZwcmludGYoc3RkZXJyLCAiXG5FcnJv
ciBpbiByZWFkaW5nIG9yIGVuZCBvZiBmaWxlLlxuIik7Ci0KLQlpZiAoIXR0eV9zdGRpbykKLQkJ
cHJpbnRmKCIlcyIsIHN0cik7Ci19Ci0KLXN0YXRpYyBpbnQgY29uZl9hc2t2YWx1ZShzdHJ1Y3Qg
c3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKmRlZikKLXsKLQllbnVtIHN5bWJvbF90eXBlIHR5cGUg
PSBzeW1fZ2V0X3R5cGUoc3ltKTsKLQotCWlmICghc3ltX2hhc192YWx1ZShzeW0pKQotCQlwcmlu
dGYoIihORVcpICIpOwotCi0JbGluZVswXSA9ICdcbic7Ci0JbGluZVsxXSA9IDA7Ci0KLQlpZiAo
IXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgewotCQlwcmludGYoIiVzXG4iLCBkZWYpOwotCQlsaW5l
WzBdID0gJ1xuJzsKLQkJbGluZVsxXSA9IDA7Ci0JCXJldHVybiAwOwotCX0KLQotCXN3aXRjaCAo
aW5wdXRfbW9kZSkgewotCWNhc2Ugb2xkY29uZmlnOgotCWNhc2Ugc3luY2NvbmZpZzoKLQkJaWYg
KHN5bV9oYXNfdmFsdWUoc3ltKSkgewotCQkJcHJpbnRmKCIlc1xuIiwgZGVmKTsKLQkJCXJldHVy
biAwOwotCQl9Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugb2xkYXNrY29uZmlnOgotCQlm
Zmx1c2goc3Rkb3V0KTsKLQkJeGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3RkaW4pOwotCQly
ZXR1cm4gMTsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQlj
YXNlIFNfSU5UOgotCWNhc2UgU19IRVg6Ci0JY2FzZSBTX1NUUklORzoKLQkJcHJpbnRmKCIlc1xu
IiwgZGVmKTsKLQkJcmV0dXJuIDE7Ci0JZGVmYXVsdDoKLQkJOwotCX0KLQlwcmludGYoIiVzIiwg
bGluZSk7Ci0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgY29uZl9zdHJpbmcoc3RydWN0IG1l
bnUgKm1lbnUpCi17Ci0Jc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOwotCWNvbnN0IGNo
YXIgKmRlZjsKLQotCXdoaWxlICgxKSB7Ci0JCXByaW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwg
IiIsIG1lbnUtPnByb21wdC0+dGV4dCk7Ci0JCXByaW50ZigiKCVzKSAiLCBzeW0tPm5hbWUpOwot
CQlkZWYgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOwotCQlpZiAoc3ltX2dldF9zdHJpbmdf
dmFsdWUoc3ltKSkKLQkJCXByaW50ZigiWyVzXSAiLCBkZWYpOwotCQlpZiAoIWNvbmZfYXNrdmFs
dWUoc3ltLCBkZWYpKQotCQkJcmV0dXJuIDA7Ci0JCXN3aXRjaCAobGluZVswXSkgewotCQljYXNl
ICdcbic6Ci0JCQlicmVhazsKLQkJY2FzZSAnPyc6Ci0JCQkvKiBwcmludCBoZWxwICovCi0JCQlp
ZiAobGluZVsxXSA9PSAnXG4nKSB7Ci0JCQkJcHJpbnRfaGVscChtZW51KTsKLQkJCQlkZWYgPSBO
VUxMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWRlZmF1bHQ6
Ci0JCQlsaW5lW3N0cmxlbihsaW5lKS0xXSA9IDA7Ci0JCQlkZWYgPSBsaW5lOwotCQl9Ci0JCWlm
IChkZWYgJiYgc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBkZWYpKQotCQkJcmV0dXJuIDA7Ci0J
fQotfQotCi1zdGF0aWMgaW50IGNvbmZfc3ltKHN0cnVjdCBtZW51ICptZW51KQotewotCXN0cnVj
dCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsKLQl0cmlzdGF0ZSBvbGR2YWwsIG5ld3ZhbDsKLQot
CXdoaWxlICgxKSB7Ci0JCXByaW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwgIiIsIG1lbnUtPnBy
b21wdC0+dGV4dCk7Ci0JCWlmIChzeW0tPm5hbWUpCi0JCQlwcmludGYoIiglcykgIiwgc3ltLT5u
YW1lKTsKLQkJcHV0Y2hhcignWycpOwotCQlvbGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVl
KHN5bSk7Ci0JCXN3aXRjaCAob2xkdmFsKSB7Ci0JCWNhc2Ugbm86Ci0JCQlwdXRjaGFyKCdOJyk7
Ci0JCQlicmVhazsKLQkJY2FzZSBtb2Q6Ci0JCQlwdXRjaGFyKCdNJyk7Ci0JCQlicmVhazsKLQkJ
Y2FzZSB5ZXM6Ci0JCQlwdXRjaGFyKCdZJyk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAob2xkdmFs
ICE9IG5vICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubykpCi0JCQlwcmludGYo
Ii9uIik7Ci0JCWlmIChvbGR2YWwgIT0gbW9kICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uo
c3ltLCBtb2QpKQotCQkJcHJpbnRmKCIvbSIpOwotCQlpZiAob2xkdmFsICE9IHllcyAmJiBzeW1f
dHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKSkKLQkJCXByaW50ZigiL3kiKTsKLQkJcHJp
bnRmKCIvP10gIik7Ci0JCWlmICghY29uZl9hc2t2YWx1ZShzeW0sIHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKHN5bSkpKQotCQkJcmV0dXJuIDA7Ci0JCXN0cmlwKGxpbmUpOwotCi0JCXN3aXRjaCAobGlu
ZVswXSkgewotCQljYXNlICduJzoKLQkJY2FzZSAnTic6Ci0JCQluZXd2YWwgPSBubzsKLQkJCWlm
ICghbGluZVsxXSB8fCAhc3RyY21wKCZsaW5lWzFdLCAibyIpKQotCQkJCWJyZWFrOwotCQkJY29u
dGludWU7Ci0JCWNhc2UgJ20nOgotCQljYXNlICdNJzoKLQkJCW5ld3ZhbCA9IG1vZDsKLQkJCWlm
ICghbGluZVsxXSkKLQkJCQlicmVhazsKLQkJCWNvbnRpbnVlOwotCQljYXNlICd5JzoKLQkJY2Fz
ZSAnWSc6Ci0JCQluZXd2YWwgPSB5ZXM7Ci0JCQlpZiAoIWxpbmVbMV0gfHwgIXN0cmNtcCgmbGlu
ZVsxXSwgImVzIikpCi0JCQkJYnJlYWs7Ci0JCQljb250aW51ZTsKLQkJY2FzZSAwOgotCQkJbmV3
dmFsID0gb2xkdmFsOwotCQkJYnJlYWs7Ci0JCWNhc2UgJz8nOgotCQkJZ290byBoZWxwOwotCQlk
ZWZhdWx0OgotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUo
c3ltLCBuZXd2YWwpKQotCQkJcmV0dXJuIDA7Ci1oZWxwOgotCQlwcmludF9oZWxwKG1lbnUpOwot
CX0KLX0KLQotc3RhdGljIGludCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQlz
dHJ1Y3Qgc3ltYm9sICpzeW0sICpkZWZfc3ltOwotCXN0cnVjdCBtZW51ICpjaGlsZDsKLQlib29s
IGlzX25ldzsKLQotCXN5bSA9IG1lbnUtPnN5bTsKLQlpc19uZXcgPSAhc3ltX2hhc192YWx1ZShz
eW0pOwotCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKLQkJY29uZl9zeW0obWVudSk7Ci0J
CXN5bV9jYWxjX3ZhbHVlKHN5bSk7Ci0JCXN3aXRjaCAoc3ltX2dldF90cmlzdGF0ZV92YWx1ZShz
eW0pKSB7Ci0JCWNhc2Ugbm86Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSBtb2Q6Ci0JCQlyZXR1cm4g
MDsKLQkJY2FzZSB5ZXM6Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoc3lt
X2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKSB7Ci0JCWNhc2Ugbm86Ci0JCQlyZXR1cm4gMTsKLQkJ
Y2FzZSBtb2Q6Ci0JCQlwcmludGYoIiUqcyVzXG4iLCBpbmRlbnQgLSAxLCAiIiwgbWVudV9nZXRf
cHJvbXB0KG1lbnUpKTsKLQkJCXJldHVybiAwOwotCQljYXNlIHllczoKLQkJCWJyZWFrOwotCQl9
Ci0JfQotCi0Jd2hpbGUgKDEpIHsKLQkJaW50IGNudCwgZGVmOwotCi0JCXByaW50ZigiJSpzJXNc
biIsIGluZGVudCAtIDEsICIiLCBtZW51X2dldF9wcm9tcHQobWVudSkpOwotCQlkZWZfc3ltID0g
c3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsKLQkJY250ID0gZGVmID0gMDsKLQkJbGluZVswXSA9
IDA7Ci0JCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dCkgewotCQkJaWYgKCFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQotCQkJCWNvbnRpbnVlOwotCQkJ
aWYgKCFjaGlsZC0+c3ltKSB7Ci0JCQkJcHJpbnRmKCIlKmMgJXNcbiIsIGluZGVudCwgJyonLCBt
ZW51X2dldF9wcm9tcHQoY2hpbGQpKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWNudCsrOwot
CQkJaWYgKGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkgewotCQkJCWRlZiA9IGNudDsKLQkJCQlwcmlu
dGYoIiUqYyIsIGluZGVudCwgJz4nKTsKLQkJCX0gZWxzZQotCQkJCXByaW50ZigiJSpjIiwgaW5k
ZW50LCAnICcpOwotCQkJcHJpbnRmKCIgJWQuICVzIiwgY250LCBtZW51X2dldF9wcm9tcHQoY2hp
bGQpKTsKLQkJCWlmIChjaGlsZC0+c3ltLT5uYW1lKQotCQkJCXByaW50ZigiICglcykiLCBjaGls
ZC0+c3ltLT5uYW1lKTsKLQkJCWlmICghc3ltX2hhc192YWx1ZShjaGlsZC0+c3ltKSkKLQkJCQlw
cmludGYoIiAoTkVXKSIpOwotCQkJcHJpbnRmKCJcbiIpOwotCQl9Ci0JCXByaW50ZigiJSpzY2hv
aWNlIiwgaW5kZW50IC0gMSwgIiIpOwotCQlpZiAoY250ID09IDEpIHsKLQkJCXByaW50ZigiWzFd
OiAxXG4iKTsKLQkJCWdvdG8gY29uZl9jaGlsZHM7Ci0JCX0KLQkJcHJpbnRmKCJbMS0lZD9dOiAi
LCBjbnQpOwotCQlzd2l0Y2ggKGlucHV0X21vZGUpIHsKLQkJY2FzZSBvbGRjb25maWc6Ci0JCWNh
c2Ugc3luY2NvbmZpZzoKLQkJCWlmICghaXNfbmV3KSB7Ci0JCQkJY250ID0gZGVmOwotCQkJCXBy
aW50ZigiJWRcbiIsIGNudCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2gg
Ki8KLQkJY2FzZSBvbGRhc2tjb25maWc6Ci0JCQlmZmx1c2goc3Rkb3V0KTsKLQkJCXhmZ2V0cyhs
aW5lLCBzaXplb2YobGluZSksIHN0ZGluKTsKLQkJCXN0cmlwKGxpbmUpOwotCQkJaWYgKGxpbmVb
MF0gPT0gJz8nKSB7Ci0JCQkJcHJpbnRfaGVscChtZW51KTsKLQkJCQljb250aW51ZTsKLQkJCX0K
LQkJCWlmICghbGluZVswXSkKLQkJCQljbnQgPSBkZWY7Ci0JCQllbHNlIGlmIChpc2RpZ2l0KGxp
bmVbMF0pKQotCQkJCWNudCA9IGF0b2kobGluZSk7Ci0JCQllbHNlCi0JCQkJY29udGludWU7Ci0J
CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0KLQljb25mX2NoaWxkczoKLQkJ
Zm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7Ci0J
CQlpZiAoIWNoaWxkLT5zeW0gfHwgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCi0JCQkJY29udGlu
dWU7Ci0JCQlpZiAoIS0tY250KQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmICghY2hpbGQpCi0JCQlj
b250aW51ZTsKLQkJaWYgKGxpbmVbMF0gJiYgbGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAnPycp
IHsKLQkJCXByaW50X2hlbHAoY2hpbGQpOwotCQkJY29udGludWU7Ci0JCX0KLQkJc3ltX3NldF9j
aG9pY2VfdmFsdWUoc3ltLCBjaGlsZC0+c3ltKTsKLQkJZm9yIChjaGlsZCA9IGNoaWxkLT5saXN0
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgewotCQkJaW5kZW50ICs9IDI7Ci0JCQljb25m
KGNoaWxkKTsKLQkJCWluZGVudCAtPSAyOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLX0KLQotc3Rh
dGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW07
Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBtZW51ICpjaGlsZDsKLQotCWlmICgh
bWVudV9pc192aXNpYmxlKG1lbnUpKQotCQlyZXR1cm47Ci0KLQlzeW0gPSBtZW51LT5zeW07Ci0J
cHJvcCA9IG1lbnUtPnByb21wdDsKLQlpZiAocHJvcCkgewotCQljb25zdCBjaGFyICpwcm9tcHQ7
Ci0KLQkJc3dpdGNoIChwcm9wLT50eXBlKSB7Ci0JCWNhc2UgUF9NRU5VOgotCQkJLyoKLQkJCSAq
IEV4Y2VwdCBpbiBvbGRhc2tjb25maWcgbW9kZSwgd2Ugc2hvdyBvbmx5IG1lbnVzIHRoYXQKLQkJ
CSAqIGNvbnRhaW4gbmV3IHN5bWJvbHMuCi0JCQkgKi8KLQkJCWlmIChpbnB1dF9tb2RlICE9IG9s
ZGFza2NvbmZpZyAmJiByb290RW50cnkgIT0gbWVudSkgewotCQkJCWNoZWNrX2NvbmYobWVudSk7
Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgUF9DT01N
RU5UOgotCQkJcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOwotCQkJaWYgKHByb21wdCkK
LQkJCQlwcmludGYoIiUqY1xuJSpjICVzXG4lKmNcbiIsCi0JCQkJCWluZGVudCwgJyonLAotCQkJ
CQlpbmRlbnQsICcqJywgcHJvbXB0LAotCQkJCQlpbmRlbnQsICcqJyk7Ci0JCWRlZmF1bHQ6Ci0J
CQk7Ci0JCX0KLQl9Ci0KLQlpZiAoIXN5bSkKLQkJZ290byBjb25mX2NoaWxkczsKLQotCWlmIChz
eW1faXNfY2hvaWNlKHN5bSkpIHsKLQkJY29uZl9jaG9pY2UobWVudSk7Ci0JCWlmIChzeW0tPmN1
cnIudHJpICE9IG1vZCkKLQkJCXJldHVybjsKLQkJZ290byBjb25mX2NoaWxkczsKLQl9Ci0KLQlz
d2l0Y2ggKHN5bS0+dHlwZSkgewotCWNhc2UgU19JTlQ6Ci0JY2FzZSBTX0hFWDoKLQljYXNlIFNf
U1RSSU5HOgotCQljb25mX3N0cmluZyhtZW51KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJY29u
Zl9zeW0obWVudSk7Ci0JCWJyZWFrOwotCX0KLQotY29uZl9jaGlsZHM6Ci0JaWYgKHN5bSkKLQkJ
aW5kZW50ICs9IDI7Ci0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0KQotCQljb25mKGNoaWxkKTsKLQlpZiAoc3ltKQotCQlpbmRlbnQgLT0gMjsKLX0K
LQotc3RhdGljIHZvaWQgY2hlY2tfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQlzdHJ1Y3Qg
c3ltYm9sICpzeW07Ci0Jc3RydWN0IG1lbnUgKmNoaWxkOwotCi0JaWYgKCFtZW51X2lzX3Zpc2li
bGUobWVudSkpCi0JCXJldHVybjsKLQotCXN5bSA9IG1lbnUtPnN5bTsKLQlpZiAoc3ltICYmICFz
eW1faGFzX3ZhbHVlKHN5bSkpIHsKLQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSB8fAotCQkg
ICAgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0g
eWVzKSkgewotCQkJaWYgKGlucHV0X21vZGUgPT0gbGlzdG5ld2NvbmZpZykgewotCQkJCWlmIChz
eW0tPm5hbWUpIHsKLQkJCQkJY29uc3QgY2hhciAqc3RyOwotCi0JCQkJCWlmIChzeW0tPnR5cGUg
PT0gU19TVFJJTkcpIHsKLQkJCQkJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7Ci0J
CQkJCQlzdHIgPSBzeW1fZXNjYXBlX3N0cmluZ192YWx1ZShzdHIpOwotCQkJCQkJcHJpbnRmKCIl
cyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIHN0cik7Ci0JCQkJCQlmcmVlKCh2b2lkICop
c3RyKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5
bSk7Ci0JCQkJCQlwcmludGYoIiVzJXM9JXNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSwgc3RyKTsK
LQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCFjb25mX2NudCsrKQotCQkJCQlw
cmludGYoIipcbiogUmVzdGFydCBjb25maWcuLi5cbipcbiIpOwotCQkJCXJvb3RFbnRyeSA9IG1l
bnVfZ2V0X3BhcmVudF9tZW51KG1lbnUpOwotCQkJCWNvbmYocm9vdEVudHJ5KTsKLQkJCX0KLQkJ
fQotCX0KLQotCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dCkKLQkJY2hlY2tfY29uZihjaGlsZCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxv
bmdfb3B0c1tdID0gewotCXsib2xkYXNrY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5V
TEwsIG9sZGFza2NvbmZpZ30sCi0JeyJvbGRjb25maWciLCAgICAgICBub19hcmd1bWVudCwgICAg
ICAgTlVMTCwgb2xkY29uZmlnfSwKLQl7InN5bmNjb25maWciLCAgICAgIG5vX2FyZ3VtZW50LCAg
ICAgICBOVUxMLCBzeW5jY29uZmlnfSwKLQl7ImRlZmNvbmZpZyIsICAgICAgIG9wdGlvbmFsX2Fy
Z3VtZW50LCBOVUxMLCBkZWZjb25maWd9LAotCXsic2F2ZWRlZmNvbmZpZyIsICAgcmVxdWlyZWRf
YXJndW1lbnQsIE5VTEwsIHNhdmVkZWZjb25maWd9LAotCXsiYWxsbm9jb25maWciLCAgICAgbm9f
YXJndW1lbnQsICAgICAgIE5VTEwsIGFsbG5vY29uZmlnfSwKLQl7ImFsbHllc2NvbmZpZyIsICAg
IG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGx5ZXNjb25maWd9LAotCXsiYWxsbW9kY29uZmln
IiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbG1vZGNvbmZpZ30sCi0JeyJhbGxkZWZj
b25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxsZGVmY29uZmlnfSwKLQl7InJh
bmRjb25maWciLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCByYW5kY29uZmlnfSwKLQl7
Imxpc3RuZXdjb25maWciLCAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBsaXN0bmV3Y29uZmln
fSwKLQl7Im9sZGRlZmNvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBvbGRkZWZj
b25maWd9LAotCXtOVUxMLCAwLCBOVUxMLCAwfQotfTsKLQotc3RhdGljIHZvaWQgY29uZl91c2Fn
ZShjb25zdCBjaGFyICpwcm9nbmFtZSkKLXsKLQotCXByaW50ZigiVXNhZ2U6ICVzIFstc10gW29w
dGlvbl0gPGtjb25maWctZmlsZT5cbiIsIHByb2duYW1lKTsKLQlwcmludGYoIltvcHRpb25dIGlz
IF9vbmVfIG9mIHRoZSBmb2xsb3dpbmc6XG4iKTsKLQlwcmludGYoIiAgLS1saXN0bmV3Y29uZmln
ICAgICAgICAgTGlzdCBuZXcgb3B0aW9uc1xuIik7Ci0JcHJpbnRmKCIgIC0tb2xkYXNrY29uZmln
ICAgICAgICAgIFN0YXJ0IGEgbmV3IGNvbmZpZ3VyYXRpb24gdXNpbmcgYSBsaW5lLW9yaWVudGVk
IHByb2dyYW1cbiIpOwotCXByaW50ZigiICAtLW9sZGNvbmZpZyAgICAgICAgICAgICBVcGRhdGUg
YSBjb25maWd1cmF0aW9uIHVzaW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlXG4iKTsKLQlw
cmludGYoIiAgLS1zeW5jY29uZmlnICAgICAgICAgICAgU2ltaWxhciB0byBvbGRjb25maWcgYnV0
IGdlbmVyYXRlcyBjb25maWd1cmF0aW9uIGluXG4iCi0JICAgICAgICIgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluY2x1ZGUve2dlbmVyYXRlZC8sY29uZmlnL31cbiIpOwotCXByaW50ZigiICAt
LW9sZGRlZmNvbmZpZyAgICAgICAgICBTYW1lIGFzIG9sZGNvbmZpZyBidXQgc2V0cyBuZXcgc3lt
Ym9scyB0byB0aGVpciBkZWZhdWx0IHZhbHVlXG4iKTsKLQlwcmludGYoIiAgLS1kZWZjb25maWcg
PGZpbGU+ICAgICAgTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZGVmaW5lZCBpbiA8ZmlsZT5cbiIp
OwotCXByaW50ZigiICAtLXNhdmVkZWZjb25maWcgPGZpbGU+ICBTYXZlIHRoZSBtaW5pbWFsIGN1
cnJlbnQgY29uZmlndXJhdGlvbiB0byA8ZmlsZT5cbiIpOwotCXByaW50ZigiICAtLWFsbG5vY29u
ZmlnICAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3
aXRoIG5vXG4iKTsKLQlwcmludGYoIiAgLS1hbGx5ZXNjb25maWcgICAgICAgICAgTmV3IGNvbmZp
ZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCB5ZXNcbiIpOwotCXByaW50Zigi
ICAtLWFsbG1vZGNvbmZpZyAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFy
ZSBhbnN3ZXJlZCB3aXRoIG1vZFxuIik7Ci0JcHJpbnRmKCIgIC0tYWxsZGVmY29uZmlnICAgICAg
ICAgIE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdFxuIik7Ci0JcHJp
bnRmKCIgIC0tcmFuZGNvbmZpZyAgICAgICAgICAgIE5ldyBjb25maWcgd2l0aCByYW5kb20gYW5z
d2VyIHRvIGFsbCBvcHRpb25zXG4iKTsKLX0KLQotaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYp
Ci17Ci0JY29uc3QgY2hhciAqcHJvZ25hbWUgPSBhdlswXTsKLQlpbnQgb3B0OwotCWNvbnN0IGNo
YXIgKm5hbWUsICpkZWZjb25maWdfZmlsZSA9IE5VTEwgLyogZ2NjIHVuaW5pdCAqLzsKLQlpbnQg
bm9fY29uZl93cml0ZSA9IDA7Ci0KLQl0dHlfc3RkaW8gPSBpc2F0dHkoMCkgJiYgaXNhdHR5KDEp
OwotCi0Jd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhYywgYXYsICJzIiwgbG9uZ19vcHRzLCBO
VUxMKSkgIT0gLTEpIHsKLQkJaWYgKG9wdCA9PSAncycpIHsKLQkJCWNvbmZfc2V0X21lc3NhZ2Vf
Y2FsbGJhY2soTlVMTCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpbnB1dF9tb2RlID0gKGVudW0g
aW5wdXRfbW9kZSlvcHQ7Ci0JCXN3aXRjaCAob3B0KSB7Ci0JCWNhc2Ugc3luY2NvbmZpZzoKLQkJ
CS8qCi0JCQkgKiBzeW5jY29uZmlnIGlzIGludm9rZWQgZHVyaW5nIHRoZSBidWlsZCBzdGFnZS4K
LQkJCSAqIFN1cHByZXNzIGRpc3RyYWN0aW5nICJjb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gLi4u
IgotCQkJICovCi0JCQljb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKE5VTEwpOwotCQkJc3luY19r
Y29uZmlnID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIGRlZmNvbmZpZzoKLQkJY2FzZSBzYXZlZGVm
Y29uZmlnOgotCQkJZGVmY29uZmlnX2ZpbGUgPSBvcHRhcmc7Ci0JCQlicmVhazsKLQkJY2FzZSBy
YW5kY29uZmlnOgotCQl7Ci0JCQlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0JCQl1bnNpZ25lZCBpbnQg
c2VlZDsKLQkJCWNoYXIgKnNlZWRfZW52OwotCi0JCQkvKgotCQkJICogVXNlIG1pY3Jvc2Vjb25k
cyBkZXJpdmVkIHNlZWQsCi0JCQkgKiBjb21wZW5zYXRlIGZvciBzeXN0ZW1zIHdoZXJlIGl0IG1h
eSBiZSB6ZXJvCi0JCQkgKi8KLQkJCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKLQkJCXNlZWQg
PSAodW5zaWduZWQgaW50KSgobm93LnR2X3NlYyArIDEpICogKG5vdy50dl91c2VjICsgMSkpOwot
Ci0JCQlzZWVkX2VudiA9IGdldGVudigiS0NPTkZJR19TRUVEIik7Ci0JCQlpZiggc2VlZF9lbnYg
JiYgKnNlZWRfZW52ICkgewotCQkJCWNoYXIgKmVuZHA7Ci0JCQkJaW50IHRtcCA9IChpbnQpc3Ry
dG9sKHNlZWRfZW52LCAmZW5kcCwgMCk7Ci0JCQkJaWYgKCplbmRwID09ICdcMCcpIHsKLQkJCQkJ
c2VlZCA9IHRtcDsKLQkJCQl9Ci0JCQl9Ci0JCQlmcHJpbnRmKCBzdGRlcnIsICJLQ09ORklHX1NF
RUQ9MHglWFxuIiwgc2VlZCApOwotCQkJc3JhbmQoc2VlZCk7Ci0JCQlicmVhazsKLQkJfQotCQlj
YXNlIG9sZGFza2NvbmZpZzoKLQkJY2FzZSBvbGRjb25maWc6Ci0JCWNhc2UgYWxsbm9jb25maWc6
Ci0JCWNhc2UgYWxseWVzY29uZmlnOgotCQljYXNlIGFsbG1vZGNvbmZpZzoKLQkJY2FzZSBhbGxk
ZWZjb25maWc6Ci0JCWNhc2UgbGlzdG5ld2NvbmZpZzoKLQkJY2FzZSBvbGRkZWZjb25maWc6Ci0J
CQlicmVhazsKLQkJY2FzZSAnPyc6Ci0JCQljb25mX3VzYWdlKHByb2duYW1lKTsKLQkJCWV4aXQo
MSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoYWMgPT0gb3B0aW5kKSB7Ci0JCWZwcmludGYo
c3RkZXJyLCAiJXM6IEtjb25maWcgZmlsZSBtaXNzaW5nXG4iLCBhdlswXSk7Ci0JCWNvbmZfdXNh
Z2UocHJvZ25hbWUpOwotCQlleGl0KDEpOwotCX0KLQluYW1lID0gYXZbb3B0aW5kXTsKLQljb25m
X3BhcnNlKG5hbWUpOwotCS8vemNvbmZkdW1wKHN0ZG91dCk7Ci0KLQlzd2l0Y2ggKGlucHV0X21v
ZGUpIHsKLQljYXNlIGRlZmNvbmZpZzoKLQkJaWYgKCFkZWZjb25maWdfZmlsZSkKLQkJCWRlZmNv
bmZpZ19maWxlID0gY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSgpOwotCQlpZiAoY29uZl9yZWFk
KGRlZmNvbmZpZ19maWxlKSkgewotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIioqKlxuIgotCQkJ
CSAgIioqKiBDYW4ndCBmaW5kIGRlZmF1bHQgY29uZmlndXJhdGlvbiBcIiVzXCIhXG4iCi0JCQkJ
ICAiKioqXG4iLAotCQkJCWRlZmNvbmZpZ19maWxlKTsKLQkJCWV4aXQoMSk7Ci0JCX0KLQkJYnJl
YWs7Ci0JY2FzZSBzYXZlZGVmY29uZmlnOgotCWNhc2Ugc3luY2NvbmZpZzoKLQljYXNlIG9sZGFz
a2NvbmZpZzoKLQljYXNlIG9sZGNvbmZpZzoKLQljYXNlIGxpc3RuZXdjb25maWc6Ci0JY2FzZSBv
bGRkZWZjb25maWc6Ci0JCWNvbmZfcmVhZChOVUxMKTsKLQkJYnJlYWs7Ci0JY2FzZSBhbGxub2Nv
bmZpZzoKLQljYXNlIGFsbHllc2NvbmZpZzoKLQljYXNlIGFsbG1vZGNvbmZpZzoKLQljYXNlIGFs
bGRlZmNvbmZpZzoKLQljYXNlIHJhbmRjb25maWc6Ci0JCW5hbWUgPSBnZXRlbnYoIktDT05GSUdf
QUxMQ09ORklHIik7Ci0JCWlmICghbmFtZSkKLQkJCWJyZWFrOwotCQlpZiAoKHN0cmNtcChuYW1l
LCAiIikgIT0gMCkgJiYgKHN0cmNtcChuYW1lLCAiMSIpICE9IDApKSB7Ci0JCQlpZiAoY29uZl9y
ZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VSKSkgewotCQkJCWZwcmludGYoc3RkZXJyLAotCQkJ
CQkiKioqIENhbid0IHJlYWQgc2VlZCBjb25maWd1cmF0aW9uIFwiJXNcIiFcbiIsCi0JCQkJCW5h
bWUpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlzd2l0Y2ggKGlucHV0
X21vZGUpIHsKLQkJY2FzZSBhbGxub2NvbmZpZzoJbmFtZSA9ICJhbGxuby5jb25maWciOyBicmVh
azsKLQkJY2FzZSBhbGx5ZXNjb25maWc6CW5hbWUgPSAiYWxseWVzLmNvbmZpZyI7IGJyZWFrOwot
CQljYXNlIGFsbG1vZGNvbmZpZzoJbmFtZSA9ICJhbGxtb2QuY29uZmlnIjsgYnJlYWs7Ci0JCWNh
c2UgYWxsZGVmY29uZmlnOgluYW1lID0gImFsbGRlZi5jb25maWciOyBicmVhazsKLQkJY2FzZSBy
YW5kY29uZmlnOgluYW1lID0gImFsbHJhbmRvbS5jb25maWciOyBicmVhazsKLQkJZGVmYXVsdDog
YnJlYWs7Ci0JCX0KLQkJaWYgKGNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikgJiYK
LQkJICAgIGNvbmZfcmVhZF9zaW1wbGUoImFsbC5jb25maWciLCBTX0RFRl9VU0VSKSkgewotCQkJ
ZnByaW50ZihzdGRlcnIsCi0JCQkJIioqKiBLQ09ORklHX0FMTENPTkZJRyBzZXQsIGJ1dCBubyBc
IiVzXCIgb3IgXCJhbGwuY29uZmlnXCIgZmlsZSBmb3VuZFxuIiwKLQkJCQluYW1lKTsKLQkJCWV4
aXQoMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKHN5
bmNfa2NvbmZpZykgewotCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX05PU0lMRU5UVVBEQVRFIik7
Ci0JCWlmIChuYW1lICYmICpuYW1lKSB7Ci0JCQlpZiAoY29uZl9nZXRfY2hhbmdlZCgpKSB7Ci0J
CQkJZnByaW50ZihzdGRlcnIsCi0JCQkJCSJcbioqKiBUaGUgY29uZmlndXJhdGlvbiByZXF1aXJl
cyBleHBsaWNpdCB1cGRhdGUuXG5cbiIpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQkJbm9fY29u
Zl93cml0ZSA9IDE7Ci0JCX0KLQl9Ci0KLQlzd2l0Y2ggKGlucHV0X21vZGUpIHsKLQljYXNlIGFs
bG5vY29uZmlnOgotCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX25vKTsKLQkJYnJlYWs7
Ci0JY2FzZSBhbGx5ZXNjb25maWc6Ci0JCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfeWVz
KTsKLQkJYnJlYWs7Ci0JY2FzZSBhbGxtb2Rjb25maWc6Ci0JCWNvbmZfc2V0X2FsbF9uZXdfc3lt
Ym9scyhkZWZfbW9kKTsKLQkJYnJlYWs7Ci0JY2FzZSBhbGxkZWZjb25maWc6Ci0JCWNvbmZfc2V0
X2FsbF9uZXdfc3ltYm9scyhkZWZfZGVmYXVsdCk7Ci0JCWJyZWFrOwotCWNhc2UgcmFuZGNvbmZp
ZzoKLQkJLyogUmVhbGx5IG5vdGhpbmcgdG8gZG8gaW4gdGhpcyBsb29wICovCi0JCXdoaWxlIChj
b25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX3JhbmRvbSkpIDsKLQkJYnJlYWs7Ci0JY2FzZSBk
ZWZjb25maWc6Ci0JCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfZGVmYXVsdCk7Ci0JCWJy
ZWFrOwotCWNhc2Ugc2F2ZWRlZmNvbmZpZzoKLQkJYnJlYWs7Ci0JY2FzZSBvbGRhc2tjb25maWc6
Ci0JCXJvb3RFbnRyeSA9ICZyb290bWVudTsKLQkJY29uZigmcm9vdG1lbnUpOwotCQlpbnB1dF9t
b2RlID0gb2xkY29uZmlnOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIG9sZGNvbmZpZzoK
LQljYXNlIGxpc3RuZXdjb25maWc6Ci0JY2FzZSBzeW5jY29uZmlnOgotCQkvKiBVcGRhdGUgdW50
aWwgYSBsb29wIGNhdXNlZCBubyBtb3JlIGNoYW5nZXMgKi8KLQkJZG8gewotCQkJY29uZl9jbnQg
PSAwOwotCQkJY2hlY2tfY29uZigmcm9vdG1lbnUpOwotCQl9IHdoaWxlIChjb25mX2NudCk7Ci0J
CWJyZWFrOwotCWNhc2Ugb2xkZGVmY29uZmlnOgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQot
CWlmIChpbnB1dF9tb2RlID09IHNhdmVkZWZjb25maWcpIHsKLQkJaWYgKGNvbmZfd3JpdGVfZGVm
Y29uZmlnKGRlZmNvbmZpZ19maWxlKSkgewotCQkJZnByaW50ZihzdGRlcnIsICJuKioqIEVycm9y
IHdoaWxlIHNhdmluZyBkZWZjb25maWcgdG86ICVzXG5cbiIsCi0JCQkJZGVmY29uZmlnX2ZpbGUp
OwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9IGVsc2UgaWYgKGlucHV0X21vZGUgIT0gbGlzdG5ld2Nv
bmZpZykgewotCQlpZiAoIW5vX2NvbmZfd3JpdGUgJiYgY29uZl93cml0ZShOVUxMKSkgewotCQkJ
ZnByaW50ZihzdGRlcnIsICJcbioqKiBFcnJvciBkdXJpbmcgd3JpdGluZyBvZiB0aGUgY29uZmln
dXJhdGlvbi5cblxuIik7Ci0JCQlleGl0KDEpOwotCQl9Ci0KLQkJLyoKLQkJICogQ3JlYXRlIGF1
dG8uY29uZiBpZiBpdCBkb2VzIG5vdCBleGlzdC4KLQkJICogVGhpcyBwcmV2ZW50cyBHTlUgTWFr
ZSA0LjEgb3Igb2xkZXIgZnJvbSBlbWl0dGluZwotCQkgKiAiaW5jbHVkZS9jb25maWcvYXV0by5j
b25mOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgotCQkgKiBpbiB0aGUgdG9wLWxldmVsIE1h
a2VmaWxlCi0JCSAqCi0JCSAqIHN5bmNjb25maWcgYWx3YXlzIGNyZWF0ZXMgb3IgdXBkYXRlcyBh
dXRvLmNvbmYgYmVjYXVzZSBpdCBpcwotCQkgKiB1c2VkIGR1cmluZyB0aGUgYnVpbGQuCi0JCSAq
LwotCQlpZiAoY29uZl93cml0ZV9hdXRvY29uZihzeW5jX2tjb25maWcpICYmIHN5bmNfa2NvbmZp
ZykgewotCQkJZnByaW50ZihzdGRlcnIsCi0JCQkJIlxuKioqIEVycm9yIGR1cmluZyBzeW5jIG9m
IHRoZSBjb25maWd1cmF0aW9uLlxuXG4iKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JfQotCXJldHVy
biAwOwotfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5jIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2MDA2MTU0Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYwor
KysgL2Rldi9udWxsCkBAIC0xLDEzODAgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBw
ZWxAbGludXgtbTY4ay5vcmc+Ci0gKi8KLQotI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0jaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0j
aW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRhcmcu
aD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0
cmluZy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotI2luY2x1
ZGUgImxrYy5oIgotCi0vKiByZXR1cm4gdHJ1ZSBpZiAncGF0aCcgZXhpc3RzLCBmYWxzZSBvdGhl
cndpc2UgKi8KLXN0YXRpYyBib29sIGlzX3ByZXNlbnQoY29uc3QgY2hhciAqcGF0aCkKLXsKLQlz
dHJ1Y3Qgc3RhdCBzdDsKLQotCXJldHVybiAhc3RhdChwYXRoLCAmc3QpOwotfQotCi0vKiByZXR1
cm4gdHJ1ZSBpZiAncGF0aCcgZXhpc3RzIGFuZCBpdCBpcyBhIGRpcmVjdG9yeSwgZmFsc2Ugb3Ro
ZXJ3aXNlICovCi1zdGF0aWMgYm9vbCBpc19kaXIoY29uc3QgY2hhciAqcGF0aCkKLXsKLQlzdHJ1
Y3Qgc3RhdCBzdDsKLQotCWlmIChzdGF0KHBhdGgsICZzdCkpCi0JCXJldHVybiAwOwotCi0JcmV0
dXJuIFNfSVNESVIoc3Quc3RfbW9kZSk7Ci19Ci0KLS8qIHJldHVybiB0cnVlIGlmIHRoZSBnaXZl
biB0d28gZmlsZXMgYXJlIHRoZSBzYW1lLCBmYWxzZSBvdGhlcndpc2UgKi8KLXN0YXRpYyBib29s
IGlzX3NhbWUoY29uc3QgY2hhciAqZmlsZTEsIGNvbnN0IGNoYXIgKmZpbGUyKQotewotCWludCBm
ZDEsIGZkMjsKLQlzdHJ1Y3Qgc3RhdCBzdDEsIHN0MjsKLQl2b2lkICptYXAxLCAqbWFwMjsKLQli
b29sIHJldCA9IGZhbHNlOwotCi0JZmQxID0gb3BlbihmaWxlMSwgT19SRE9OTFkpOwotCWlmIChm
ZDEgPCAwKQotCQlyZXR1cm4gcmV0OwotCi0JZmQyID0gb3BlbihmaWxlMiwgT19SRE9OTFkpOwot
CWlmIChmZDIgPCAwKQotCQlnb3RvIGNsb3NlMTsKLQotCXJldCA9IGZzdGF0KGZkMSwgJnN0MSk7
Ci0JaWYgKHJldCkKLQkJZ290byBjbG9zZTI7Ci0JcmV0ID0gZnN0YXQoZmQyLCAmc3QyKTsKLQlp
ZiAocmV0KQotCQlnb3RvIGNsb3NlMjsKLQotCWlmIChzdDEuc3Rfc2l6ZSAhPSBzdDIuc3Rfc2l6
ZSkKLQkJZ290byBjbG9zZTI7Ci0KLQltYXAxID0gbW1hcChOVUxMLCBzdDEuc3Rfc2l6ZSwgUFJP
VF9SRUFELCBNQVBfUFJJVkFURSwgZmQxLCAwKTsKLQlpZiAobWFwMSA9PSBNQVBfRkFJTEVEKQot
CQlnb3RvIGNsb3NlMjsKLQotCW1hcDIgPSBtbWFwKE5VTEwsIHN0Mi5zdF9zaXplLCBQUk9UX1JF
QUQsIE1BUF9QUklWQVRFLCBmZDIsIDApOwotCWlmIChtYXAyID09IE1BUF9GQUlMRUQpCi0JCWdv
dG8gY2xvc2UyOwotCi0JaWYgKGJjbXAobWFwMSwgbWFwMiwgc3QxLnN0X3NpemUpKQotCQlnb3Rv
IGNsb3NlMjsKLQotCXJldCA9IHRydWU7Ci1jbG9zZTI6Ci0JY2xvc2UoZmQyKTsKLWNsb3NlMToK
LQljbG9zZShmZDEpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIENyZWF0ZSB0aGUgcGFy
ZW50IGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gcGF0aC4KLSAqCi0gKiBGb3IgZXhhbXBsZSwgaWYg
J2luY2x1ZGUvY29uZmlnL2F1dG8uY29uZicgaXMgZ2l2ZW4sIGNyZWF0ZSAnaW5jbHVkZS9jb25m
aWcnLgotICovCi1zdGF0aWMgaW50IG1ha2VfcGFyZW50X2Rpcihjb25zdCBjaGFyICpwYXRoKQot
ewotCWNoYXIgdG1wW1BBVEhfTUFYICsgMV07Ci0JY2hhciAqcDsKLQotCXN0cm5jcHkodG1wLCBw
YXRoLCBzaXplb2YodG1wKSk7Ci0JdG1wW3NpemVvZih0bXApIC0gMV0gPSAwOwotCi0JLyogUmVt
b3ZlIHRoZSBiYXNlIG5hbWUuIEp1c3QgcmV0dXJuIGlmIG5vdGhpbmcgaXMgbGVmdCAqLwotCXAg
PSBzdHJyY2hyKHRtcCwgJy8nKTsKLQlpZiAoIXApCi0JCXJldHVybiAwOwotCSoocCArIDEpID0g
MDsKLQotCS8qIEp1c3QgaW4gY2FzZSBpdCBpcyBhbiBhYnNvbHV0ZSBwYXRoICovCi0JcCA9IHRt
cDsKLQl3aGlsZSAoKnAgPT0gJy8nKQotCQlwKys7Ci0KLQl3aGlsZSAoKHAgPSBzdHJjaHIocCwg
Jy8nKSkpIHsKLQkJKnAgPSAwOwotCi0JCS8qIHNraXAgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMg
Ki8KLQkJaWYgKCFpc19kaXIodG1wKSAmJiBta2Rpcih0bXAsIDA3NTUpKQotCQkJcmV0dXJuIC0x
OwotCi0JCSpwID0gJy8nOwotCQl3aGlsZSAoKnAgPT0gJy8nKQotCQkJcCsrOwotCX0KLQotCXJl
dHVybiAwOwotfQotCi1zdGF0aWMgY2hhciBkZXBmaWxlX3BhdGhbUEFUSF9NQVhdOwotc3RhdGlj
IHNpemVfdCBkZXBmaWxlX3ByZWZpeF9sZW47Ci0KLS8qIHRvdWNoIGRlcGZpbGUgZm9yIHN5bWJv
bCAnbmFtZScgKi8KLXN0YXRpYyBpbnQgY29uZl90b3VjaF9kZXAoY29uc3QgY2hhciAqbmFtZSkK
LXsKLQlpbnQgZmQsIHJldDsKLQljb25zdCBjaGFyICpzOwotCWNoYXIgKmQsIGM7Ci0KLQkvKiBj
aGVjayBvdmVyZmxvdzogcHJlZml4ICsgbmFtZSArICIuaCIgKyAnXDAnIG11c3QgZml0IGluIGJ1
ZmZlci4gKi8KLQlpZiAoZGVwZmlsZV9wcmVmaXhfbGVuICsgc3RybGVuKG5hbWUpICsgMyA+IHNp
emVvZihkZXBmaWxlX3BhdGgpKQotCQlyZXR1cm4gLTE7Ci0KLQlkID0gZGVwZmlsZV9wYXRoICsg
ZGVwZmlsZV9wcmVmaXhfbGVuOwotCXMgPSBuYW1lOwotCi0Jd2hpbGUgKChjID0gKnMrKykpCi0J
CSpkKysgPSAoYyA9PSAnXycpID8gJy8nIDogdG9sb3dlcihjKTsKLQlzdHJjcHkoZCwgIi5oIik7
Ci0KLQkvKiBBc3N1bWUgZGlyZWN0b3J5IHBhdGggYWxyZWFkeSBleGlzdHMuICovCi0JZmQgPSBv
cGVuKGRlcGZpbGVfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7Ci0J
aWYgKGZkID09IC0xKSB7Ci0JCWlmIChlcnJubyAhPSBFTk9FTlQpCi0JCQlyZXR1cm4gLTE7Ci0K
LQkJcmV0ID0gbWFrZV9wYXJlbnRfZGlyKGRlcGZpbGVfcGF0aCk7Ci0JCWlmIChyZXQpCi0JCQly
ZXR1cm4gcmV0OwotCi0JCS8qIFRyeSBpdCBhZ2Fpbi4gKi8KLQkJZmQgPSBvcGVuKGRlcGZpbGVf
cGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7Ci0JCWlmIChmZCA9PSAt
MSkKLQkJCXJldHVybiAtMTsKLQl9Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0
cnVjdCBjb25mX3ByaW50ZXIgewotCXZvaWQgKCpwcmludF9zeW1ib2wpKEZJTEUgKiwgc3RydWN0
IHN5bWJvbCAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7Ci0Jdm9pZCAoKnByaW50X2NvbW1lbnQp
KEZJTEUgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOwotfTsKLQotc3RhdGljIHZvaWQgY29uZl93
YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHBy
aW50ZiwgMSwgMikpKTsKLQotc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZt
dCwgLi4uKQotCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsKLQotc3Rh
dGljIGNvbnN0IGNoYXIgKmNvbmZfZmlsZW5hbWU7Ci1zdGF0aWMgaW50IGNvbmZfbGluZW5vLCBj
b25mX3dhcm5pbmdzOwotCi1jb25zdCBjaGFyIGNvbmZfZGVmbmFtZVtdID0gImFyY2gvJChBUkNI
KS9kZWZjb25maWciOwotCi1zdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10
LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQl2YV9zdGFydChhcCwgZm10KTsKLQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIGNvbmZfZmlsZW5hbWUsIGNvbmZfbGluZW5vKTsKLQl2
ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOwotCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLQl2YV9l
bmQoYXApOwotCWNvbmZfd2FybmluZ3MrKzsKLX0KLQotc3RhdGljIHZvaWQgY29uZl9kZWZhdWx0
X21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykKLXsKLQlwcmludGYoIiNcbiMgIik7Ci0J
cHJpbnRmKCIlcyIsIHMpOwotCXByaW50ZigiXG4jXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgKCpj
b25mX21lc3NhZ2VfY2FsbGJhY2spKGNvbnN0IGNoYXIgKnMpID0KLQljb25mX2RlZmF1bHRfbWVz
c2FnZV9jYWxsYmFjazsKLXZvaWQgY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayh2b2lkICgqZm4p
KGNvbnN0IGNoYXIgKnMpKQotewotCWNvbmZfbWVzc2FnZV9jYWxsYmFjayA9IGZuOwotfQotCi1z
dGF0aWMgdm9pZCBjb25mX21lc3NhZ2UoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlz
dCBhcDsKLQljaGFyIGJ1Zls0MDk2XTsKLQotCWlmICghY29uZl9tZXNzYWdlX2NhbGxiYWNrKQot
CQlyZXR1cm47Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQotCXZzbnByaW50ZihidWYsIHNpemVv
ZihidWYpLCBmbXQsIGFwKTsKLQljb25mX21lc3NhZ2VfY2FsbGJhY2soYnVmKTsKLQl2YV9lbmQo
YXApOwotfQotCi1jb25zdCBjaGFyICpjb25mX2dldF9jb25maWduYW1lKHZvaWQpCi17Ci0JY2hh
ciAqbmFtZSA9IGdldGVudigiS0NPTkZJR19DT05GSUciKTsKLQotCXJldHVybiBuYW1lID8gbmFt
ZSA6ICIuY29uZmlnIjsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIgKmNvbmZfZ2V0X2F1dG9jb25m
aWdfbmFtZSh2b2lkKQotewotCWNoYXIgKm5hbWUgPSBnZXRlbnYoIktDT05GSUdfQVVUT0NPTkZJ
RyIpOwotCi0JcmV0dXJuIG5hbWUgPyBuYW1lIDogImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZiI7
Ci19Ci0KLWNoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCkKLXsKLQlzdGF0aWMg
Y2hhciBmdWxsbmFtZVtQQVRIX01BWCsxXTsKLQljaGFyICplbnYsICpuYW1lOwotCi0JbmFtZSA9
IGV4cGFuZF9zdHJpbmcoY29uZl9kZWZuYW1lKTsKLQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7Ci0J
aWYgKGVudikgewotCQlzbnByaW50ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwgIiVzLyVz
IiwgZW52LCBuYW1lKTsKLQkJaWYgKGlzX3ByZXNlbnQoZnVsbG5hbWUpKQotCQkJcmV0dXJuIGZ1
bGxuYW1lOwotCX0KLQlyZXR1cm4gbmFtZTsKLX0KLQotc3RhdGljIGludCBjb25mX3NldF9zeW1f
dmFsKHN0cnVjdCBzeW1ib2wgKnN5bSwgaW50IGRlZiwgaW50IGRlZl9mbGFncywgY2hhciAqcCkK
LXsKLQljaGFyICpwMjsKLQotCXN3aXRjaCAoc3ltLT50eXBlKSB7Ci0JY2FzZSBTX1RSSVNUQVRF
OgotCQlpZiAocFswXSA9PSAnbScpIHsKLQkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbW9kOwotCQkJ
c3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBmYWxsIHRocm91
Z2ggKi8KLQljYXNlIFNfQk9PTEVBTjoKLQkJaWYgKHBbMF0gPT0gJ3knKSB7Ci0JCQlzeW0tPmRl
ZltkZWZdLnRyaSA9IHllczsKLQkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOwotCQkJYnJlYWs7
Ci0JCX0KLQkJaWYgKHBbMF0gPT0gJ24nKSB7Ci0JCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOwot
CQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoZGVmICE9
IFNfREVGX0FVVE8pCi0JCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQg
Zm9yICVzIiwKLQkJCQkgICAgIHAsIHN5bS0+bmFtZSk7Ci0JCXJldHVybiAxOwotCWNhc2UgU19T
VFJJTkc6Ci0JCWlmICgqcCsrICE9ICciJykKLQkJCWJyZWFrOwotCQlmb3IgKHAyID0gcDsgKHAy
ID0gc3RycGJyayhwMiwgIlwiXFwiKSk7IHAyKyspIHsKLQkJCWlmICgqcDIgPT0gJyInKSB7Ci0J
CQkJKnAyID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCW1lbW1vdmUocDIsIHAyICsgMSwgc3Ry
bGVuKHAyKSk7Ci0JCX0KLQkJaWYgKCFwMikgewotCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQot
CQkJCWNvbmZfd2FybmluZygiaW52YWxpZCBzdHJpbmcgZm91bmQiKTsKLQkJCXJldHVybiAxOwot
CQl9Ci0JCS8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2UgU19JTlQ6Ci0JY2FzZSBTX0hFWDoKLQkJ
aWYgKHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBwKSkgewotCQkJc3ltLT5kZWZbZGVmXS52YWwgPSB4
c3RyZHVwKHApOwotCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7Ci0JCX0gZWxzZSB7Ci0JCQlp
ZiAoZGVmICE9IFNfREVGX0FVVE8pCi0JCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVz
JyBpbnZhbGlkIGZvciAlcyIsCi0JCQkJCSAgICAgcCwgc3ltLT5uYW1lKTsKLQkJCXJldHVybiAx
OwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLSNk
ZWZpbmUgTElORV9HUk9XVEggMTYKLXN0YXRpYyBpbnQgYWRkX2J5dGUoaW50IGMsIGNoYXIgKips
aW5lcHRyLCBzaXplX3Qgc2xlbiwgc2l6ZV90ICpuKQotewotCWNoYXIgKm5saW5lOwotCXNpemVf
dCBuZXdfc2l6ZSA9IHNsZW4gKyAxOwotCWlmIChuZXdfc2l6ZSA+ICpuKSB7Ci0JCW5ld19zaXpl
ICs9IExJTkVfR1JPV1RIIC0gMTsKLQkJbmV3X3NpemUgKj0gMjsKLQkJbmxpbmUgPSB4cmVhbGxv
YygqbGluZXB0ciwgbmV3X3NpemUpOwotCQlpZiAoIW5saW5lKQotCQkJcmV0dXJuIC0xOwotCi0J
CSpsaW5lcHRyID0gbmxpbmU7Ci0JCSpuID0gbmV3X3NpemU7Ci0JfQotCi0JKCpsaW5lcHRyKVtz
bGVuXSA9IGM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgY29tcGF0X2dldGxp
bmUoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAqbiwgRklMRSAqc3RyZWFtKQotewotCWNoYXIgKmxp
bmUgPSAqbGluZXB0cjsKLQlzaXplX3Qgc2xlbiA9IDA7Ci0KLQlmb3IgKDs7KSB7Ci0JCWludCBj
ID0gZ2V0YyhzdHJlYW0pOwotCi0JCXN3aXRjaCAoYykgewotCQljYXNlICdcbic6Ci0JCQlpZiAo
YWRkX2J5dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkKLQkJCQlnb3RvIGVfb3V0OwotCQkJc2xl
bisrOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgRU9GOgotCQkJaWYgKGFkZF9ieXRl
KCdcMCcsICZsaW5lLCBzbGVuLCBuKSA8IDApCi0JCQkJZ290byBlX291dDsKLQkJCSpsaW5lcHRy
ID0gbGluZTsKLQkJCWlmIChzbGVuID09IDApCi0JCQkJcmV0dXJuIC0xOwotCQkJcmV0dXJuIHNs
ZW47Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoYWRkX2J5dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkK
LQkJCQlnb3RvIGVfb3V0OwotCQkJc2xlbisrOwotCQl9Ci0JfQotCi1lX291dDoKLQlsaW5lW3Ns
ZW4tMV0gPSAnXDAnOwotCSpsaW5lcHRyID0gbGluZTsKLQlyZXR1cm4gLTE7Ci19Ci0KLWludCBj
b25mX3JlYWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCBkZWYpCi17Ci0JRklMRSAqaW4g
PSBOVUxMOwotCWNoYXIgICAqbGluZSA9IE5VTEw7Ci0Jc2l6ZV90ICBsaW5lX2FzaXplID0gMDsK
LQljaGFyICpwLCAqcDI7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCWludCBpLCBkZWZfZmxhZ3M7
Ci0KLQlpZiAobmFtZSkgewotCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOwotCX0gZWxzZSB7Ci0J
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQotCQluYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgp
OwotCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOwotCQlpZiAoaW4pCi0JCQlnb3RvIGxvYWQ7Ci0J
CXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOwotCQlpZiAoIXN5bV9kZWZjb25maWdfbGlzdCkKLQkJ
CXJldHVybiAxOwotCi0JCWZvcl9hbGxfZGVmYXVsdHMoc3ltX2RlZmNvbmZpZ19saXN0LCBwcm9w
KSB7Ci0JCQlpZiAoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcikgPT0gbm8gfHwK
LQkJCSAgICBwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQotCQkJCWNvbnRpbnVlOwotCQkJ
c3ltX2NhbGNfdmFsdWUocHJvcC0+ZXhwci0+bGVmdC5zeW0pOwotCQkJbmFtZSA9IHN5bV9nZXRf
c3RyaW5nX3ZhbHVlKHByb3AtPmV4cHItPmxlZnQuc3ltKTsKLQkJCWluID0gemNvbmZfZm9wZW4o
bmFtZSk7Ci0JCQlpZiAoaW4pIHsKLQkJCQljb25mX21lc3NhZ2UoInVzaW5nIGRlZmF1bHRzIGZv
dW5kIGluICVzIiwKLQkJCQkJIG5hbWUpOwotCQkJCWdvdG8gbG9hZDsKLQkJCX0KLQkJfQotCX0K
LQlpZiAoIWluKQotCQlyZXR1cm4gMTsKLQotbG9hZDoKLQljb25mX2ZpbGVuYW1lID0gbmFtZTsK
LQljb25mX2xpbmVubyA9IDA7Ci0JY29uZl93YXJuaW5ncyA9IDA7Ci0KLQlkZWZfZmxhZ3MgPSBT
WU1CT0xfREVGIDw8IGRlZjsKLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7Ci0JCXN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0NIQU5HRUQ7Ci0JCXN5bS0+ZmxhZ3MgJj0gfihkZWZfZmxhZ3N8U1lNQk9M
X1ZBTElEKTsKLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKLQkJCXN5bS0+ZmxhZ3MgfD0gZGVm
X2ZsYWdzOwotCQlzd2l0Y2ggKHN5bS0+dHlwZSkgewotCQljYXNlIFNfSU5UOgotCQljYXNlIFNf
SEVYOgotCQljYXNlIFNfU1RSSU5HOgotCQkJaWYgKHN5bS0+ZGVmW2RlZl0udmFsKQotCQkJCWZy
ZWUoc3ltLT5kZWZbZGVmXS52YWwpOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWRlZmF1bHQ6
Ci0JCQlzeW0tPmRlZltkZWZdLnZhbCA9IE5VTEw7Ci0JCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5v
OwotCQl9Ci0JfQotCi0Jd2hpbGUgKGNvbXBhdF9nZXRsaW5lKCZsaW5lLCAmbGluZV9hc2l6ZSwg
aW4pICE9IC0xKSB7Ci0JCWNvbmZfbGluZW5vKys7Ci0JCXN5bSA9IE5VTEw7Ci0JCWlmIChsaW5l
WzBdID09ICcjJykgewotCQkJaWYgKG1lbWNtcChsaW5lICsgMiwgQ09ORklHXywgc3RybGVuKENP
TkZJR18pKSkKLQkJCQljb250aW51ZTsKLQkJCXAgPSBzdHJjaHIobGluZSArIDIgKyBzdHJsZW4o
Q09ORklHXyksICcgJyk7Ci0JCQlpZiAoIXApCi0JCQkJY29udGludWU7Ci0JCQkqcCsrID0gMDsK
LQkJCWlmIChzdHJuY21wKHAsICJpcyBub3Qgc2V0IiwgMTApKQotCQkJCWNvbnRpbnVlOwotCQkJ
aWYgKGRlZiA9PSBTX0RFRl9VU0VSKSB7Ci0JCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDIgKyBz
dHJsZW4oQ09ORklHXykpOwotCQkJCWlmICghc3ltKSB7Ci0JCQkJCXN5bV9hZGRfY2hhbmdlX2Nv
dW50KDEpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXN5bSA9IHN5
bV9sb29rdXAobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksIDApOwotCQkJCWlmIChzeW0tPnR5
cGUgPT0gU19VTktOT1dOKQotCQkJCQlzeW0tPnR5cGUgPSBTX0JPT0xFQU47Ci0JCQl9Ci0JCQlp
ZiAoc3ltLT5mbGFncyAmIGRlZl9mbGFncykgewotCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6
IHJlYXNzaWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7Ci0JCQl9Ci0JCQlzd2l0Y2gg
KHN5bS0+dHlwZSkgewotCQkJY2FzZSBTX0JPT0xFQU46Ci0JCQljYXNlIFNfVFJJU1RBVEU6Ci0J
CQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsKLQkJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsK
LQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJOwotCQkJfQotCQl9IGVsc2UgaWYgKG1lbWNt
cChsaW5lLCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsKLQkJCXAgPSBzdHJjaHIo
bGluZSArIHN0cmxlbihDT05GSUdfKSwgJz0nKTsKLQkJCWlmICghcCkKLQkJCQljb250aW51ZTsK
LQkJCSpwKysgPSAwOwotCQkJcDIgPSBzdHJjaHIocCwgJ1xuJyk7Ci0JCQlpZiAocDIpIHsKLQkJ
CQkqcDItLSA9IDA7Ci0JCQkJaWYgKCpwMiA9PSAnXHInKQotCQkJCQkqcDIgPSAwOwotCQkJfQot
Ci0JCQlzeW0gPSBzeW1fZmluZChsaW5lICsgc3RybGVuKENPTkZJR18pKTsKLQkJCWlmICghc3lt
KSB7Ci0JCQkJaWYgKGRlZiA9PSBTX0RFRl9BVVRPKQotCQkJCQkvKgotCQkJCQkgKiBSZWFkaW5n
IGZyb20gaW5jbHVkZS9jb25maWcvYXV0by5jb25mCi0JCQkJCSAqIElmIENPTkZJR19GT08gcHJl
dmlvdXNseSBleGlzdGVkIGluCi0JCQkJCSAqIGF1dG8uY29uZiBidXQgaXQgaXMgbWlzc2luZyBu
b3csCi0JCQkJCSAqIGluY2x1ZGUvY29uZmlnL2Zvby5oIG11c3QgYmUgdG91Y2hlZC4KLQkJCQkJ
ICovCi0JCQkJCWNvbmZfdG91Y2hfZGVwKGxpbmUgKyBzdHJsZW4oQ09ORklHXykpOwotCQkJCWVs
c2UKLQkJCQkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0K
LQkJCWlmIChzeW0tPmZsYWdzICYgZGVmX2ZsYWdzKSB7Ci0JCQkJY29uZl93YXJuaW5nKCJvdmVy
cmlkZTogcmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsKLQkJCX0KLQkJCWlm
IChjb25mX3NldF9zeW1fdmFsKHN5bSwgZGVmLCBkZWZfZmxhZ3MsIHApKQotCQkJCWNvbnRpbnVl
OwotCQl9IGVsc2UgewotCQkJaWYgKGxpbmVbMF0gIT0gJ1xyJyAmJiBsaW5lWzBdICE9ICdcbicp
Ci0JCQkJY29uZl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGE6ICUuKnMiLAotCQkJCQkgICAgIChp
bnQpc3RyY3NwbihsaW5lLCAiXHJcbiIpLCBsaW5lKTsKLQotCQkJY29udGludWU7Ci0JCX0KLQot
CQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgewotCQkJc3RydWN0IHN5bWJv
bCAqY3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKLQkJCXN3
aXRjaCAoc3ltLT5kZWZbZGVmXS50cmkpIHsKLQkJCWNhc2Ugbm86Ci0JCQkJYnJlYWs7Ci0JCQlj
YXNlIG1vZDoKLQkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSA9PSB5ZXMpIHsKLQkJCQkJY29uZl93
YXJuaW5nKCIlcyBjcmVhdGVzIGluY29uc2lzdGVudCBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUp
OwotCQkJCQljcy0+ZmxhZ3MgJj0gfmRlZl9mbGFnczsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQlj
YXNlIHllczoKLQkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSAhPSBubykKLQkJCQkJY29uZl93YXJu
aW5nKCJvdmVycmlkZTogJXMgY2hhbmdlcyBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOwotCQkJ
CWNzLT5kZWZbZGVmXS52YWwgPSBzeW07Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljcy0+ZGVmW2Rl
Zl0udHJpID0gRVhQUl9PUihjcy0+ZGVmW2RlZl0udHJpLCBzeW0tPmRlZltkZWZdLnRyaSk7Ci0J
CX0KLQl9Ci0JZnJlZShsaW5lKTsKLQlmY2xvc2UoaW4pOwotCXJldHVybiAwOwotfQotCi1pbnQg
Y29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCWlu
dCBjb25mX3Vuc2F2ZWQgPSAwOwotCWludCBpOwotCi0Jc3ltX3NldF9jaGFuZ2VfY291bnQoMCk7
Ci0KLQlpZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VSKSkgewotCQlzeW1fY2Fs
Y192YWx1ZShtb2R1bGVzX3N5bSk7Ci0JCXJldHVybiAxOwotCX0KLQotCXN5bV9jYWxjX3ZhbHVl
KG1vZHVsZXNfc3ltKTsKLQotCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKLQkJc3ltX2NhbGNf
dmFsdWUoc3ltKTsKLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZ
TUJPTF9OT19XUklURSkpCi0JCQljb250aW51ZTsKLQkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSAm
JiAoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkpIHsKLQkJCS8qIGNoZWNrIHRoYXQgY2FsY3Vs
YXRlZCB2YWx1ZSBhZ3JlZXMgd2l0aCBzYXZlZCB2YWx1ZSAqLwotCQkJc3dpdGNoIChzeW0tPnR5
cGUpIHsKLQkJCWNhc2UgU19CT09MRUFOOgotCQkJY2FzZSBTX1RSSVNUQVRFOgotCQkJCWlmIChz
eW0tPmRlZltTX0RFRl9VU0VSXS50cmkgIT0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pKQot
CQkJCQlicmVhazsKLQkJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkKLQkJCQkJY29udGludWU7
Ci0JCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCQlkZWZhdWx0OgotCQkJCWlmICghc3RyY21wKHN5
bS0+Y3Vyci52YWwsIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCi0JCQkJCWNvbnRpbnVlOwot
CQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIShz
eW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKLQkJCS8qIG5vIHByZXZpb3VzIHZhbHVlIGFuZCBu
b3Qgc2F2ZWQgKi8KLQkJCWNvbnRpbnVlOwotCQljb25mX3Vuc2F2ZWQrKzsKLQkJLyogbWF5YmUg
cHJpbnQgdmFsdWUgaW4gdmVyYm9zZSBtb2RlLi4uICovCi0JfQotCi0JZm9yX2FsbF9zeW1ib2xz
KGksIHN5bSkgewotCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmICFzeW1faXNfY2hvaWNlX3Zh
bHVlKHN5bSkpIHsKLQkJCS8qIFJlc2V0IHZhbHVlcyBvZiBnZW5lcmF0ZXMgdmFsdWVzLCBzbyB0
aGV5J2xsIGFwcGVhcgotCQkJICogYXMgbmV3LCBpZiB0aGV5IHNob3VsZCBiZWNvbWUgdmlzaWJs
ZSwgYnV0IHRoYXQKLQkJCSAqIGRvZXNuJ3QgcXVpdGUgd29yayBpZiB0aGUgS2NvbmZpZyBhbmQg
dGhlIHNhdmVkCi0JCQkgKiBjb25maWd1cmF0aW9uIGRpc2FncmVlLgotCQkJICovCi0JCQlpZiAo
c3ltLT52aXNpYmxlID09IG5vICYmICFjb25mX3Vuc2F2ZWQpCi0JCQkJc3ltLT5mbGFncyAmPSB+
U1lNQk9MX0RFRl9VU0VSOwotCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKLQkJCWNhc2UgU19TVFJJ
Tkc6Ci0JCQljYXNlIFNfSU5UOgotCQkJY2FzZSBTX0hFWDoKLQkJCQkvKiBSZXNldCBhIHN0cmlu
ZyB2YWx1ZSBpZiBpdCdzIG91dCBvZiByYW5nZSAqLwotCQkJCWlmIChzeW1fc3RyaW5nX3dpdGhp
bl9yYW5nZShzeW0sIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpCi0JCQkJCWJyZWFrOwotCQkJ
CXN5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUR8U1lNQk9MX0RFRl9VU0VSKTsKLQkJCQljb25m
X3Vuc2F2ZWQrKzsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0J
CX0KLQl9Ci0KLQlzeW1fYWRkX2NoYW5nZV9jb3VudChjb25mX3dhcm5pbmdzIHx8IGNvbmZfdW5z
YXZlZCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIEtjb25maWcgY29uZmlndXJhdGlvbiBw
cmludGVyCi0gKgotICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBy
ZXN1bHRpbmcgY29uZmlndXJhdGlvbiBhZnRlcgotICoga2NvbmZpZyBpbnZvY2F0aW9uIGFuZCBg
ZGVmY29uZmlnJyBmaWxlcy4gVW5zZXQgc3ltYm9sIG1pZ2h0IGJlIG9taXR0ZWQgYnkKLSAqIHBh
c3NpbmcgYSBub24tTlVMTCBhcmd1bWVudCB0byB0aGUgcHJpbnRlci4KLSAqCi0gKi8KLXN0YXRp
YyB2b2lkCi1rY29uZmlnX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3lt
LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQotewotCi0Jc3dpdGNoIChzeW0tPnR5cGUp
IHsKLQljYXNlIFNfQk9PTEVBTjoKLQljYXNlIFNfVFJJU1RBVEU6Ci0JCWlmICgqdmFsdWUgPT0g
J24nKSB7Ci0JCQlib29sIHNraXBfdW5zZXQgPSAoYXJnICE9IE5VTEwpOwotCi0JCQlpZiAoIXNr
aXBfdW5zZXQpCi0JCQkJZnByaW50ZihmcCwgIiMgJXMlcyBpcyBub3Qgc2V0XG4iLAotCQkJCSAg
ICBDT05GSUdfLCBzeW0tPm5hbWUpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1
bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWZwcmludGYoZnAsICIlcyVzPSVzXG4iLCBDT05GSUdfLCBz
eW0tPm5hbWUsIHZhbHVlKTsKLX0KLQotc3RhdGljIHZvaWQKLWtjb25maWdfcHJpbnRfY29tbWVu
dChGSUxFICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKLXsKLQljb25zdCBjaGFy
ICpwID0gdmFsdWU7Ci0Jc2l6ZV90IGw7Ci0KLQlmb3IgKDs7KSB7Ci0JCWwgPSBzdHJjc3BuKHAs
ICJcbiIpOwotCQlmcHJpbnRmKGZwLCAiIyIpOwotCQlpZiAobCkgewotCQkJZnByaW50ZihmcCwg
IiAiKTsKLQkJCXhmd3JpdGUocCwgbCwgMSwgZnApOwotCQkJcCArPSBsOwotCQl9Ci0JCWZwcmlu
dGYoZnAsICJcbiIpOwotCQlpZiAoKnArKyA9PSAnXDAnKQotCQkJYnJlYWs7Ci0JfQotfQotCi1z
dGF0aWMgc3RydWN0IGNvbmZfcHJpbnRlciBrY29uZmlnX3ByaW50ZXJfY2IgPQotewotCS5wcmlu
dF9zeW1ib2wgPSBrY29uZmlnX3ByaW50X3N5bWJvbCwKLQkucHJpbnRfY29tbWVudCA9IGtjb25m
aWdfcHJpbnRfY29tbWVudCwKLX07Ci0KLS8qCi0gKiBIZWFkZXIgcHJpbnRlcgotICoKLSAqIFRo
aXMgcHJpbnRlciBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgYGluY2x1ZGUvZ2VuZXJhdGVk
L2F1dG9jb25mLmgnIGZpbGUuCi0gKi8KLXN0YXRpYyB2b2lkCi1oZWFkZXJfcHJpbnRfc3ltYm9s
KEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICph
cmcpCi17Ci0KLQlzd2l0Y2ggKHN5bS0+dHlwZSkgewotCWNhc2UgU19CT09MRUFOOgotCWNhc2Ug
U19UUklTVEFURTogewotCQljb25zdCBjaGFyICpzdWZmaXggPSAiIjsKLQotCQlzd2l0Y2ggKCp2
YWx1ZSkgewotCQljYXNlICduJzoKLQkJCWJyZWFrOwotCQljYXNlICdtJzoKLQkJCXN1ZmZpeCA9
ICJfTU9EVUxFIjsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQlkZWZhdWx0OgotCQkJZnByaW50
ZihmcCwgIiNkZWZpbmUgJXMlcyVzIDFcbiIsCi0JCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBz
dWZmaXgpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNfSEVYOiB7Ci0JCWNvbnN0IGNoYXIg
KnByZWZpeCA9ICIiOwotCi0JCWlmICh2YWx1ZVswXSAhPSAnMCcgfHwgKHZhbHVlWzFdICE9ICd4
JyAmJiB2YWx1ZVsxXSAhPSAnWCcpKQotCQkJcHJlZml4ID0gIjB4IjsKLQkJZnByaW50ZihmcCwg
IiNkZWZpbmUgJXMlcyAlcyVzXG4iLAotCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBwcmVmaXgs
IHZhbHVlKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU19TVFJJTkc6Ci0JY2FzZSBTX0lOVDoKLQkJ
ZnByaW50ZihmcCwgIiNkZWZpbmUgJXMlcyAlc1xuIiwKLQkJICAgIENPTkZJR18sIHN5bS0+bmFt
ZSwgdmFsdWUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLX0KLQotc3Rh
dGljIHZvaWQKLWhlYWRlcl9wcmludF9jb21tZW50KEZJTEUgKmZwLCBjb25zdCBjaGFyICp2YWx1
ZSwgdm9pZCAqYXJnKQotewotCWNvbnN0IGNoYXIgKnAgPSB2YWx1ZTsKLQlzaXplX3QgbDsKLQot
CWZwcmludGYoZnAsICIvKlxuIik7Ci0JZm9yICg7OykgewotCQlsID0gc3RyY3NwbihwLCAiXG4i
KTsKLQkJZnByaW50ZihmcCwgIiAqIik7Ci0JCWlmIChsKSB7Ci0JCQlmcHJpbnRmKGZwLCAiICIp
OwotCQkJeGZ3cml0ZShwLCBsLCAxLCBmcCk7Ci0JCQlwICs9IGw7Ci0JCX0KLQkJZnByaW50Zihm
cCwgIlxuIik7Ci0JCWlmICgqcCsrID09ICdcMCcpCi0JCQlicmVhazsKLQl9Ci0JZnByaW50Zihm
cCwgIiAqL1xuIik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGhlYWRlcl9wcmlu
dGVyX2NiID0KLXsKLQkucHJpbnRfc3ltYm9sID0gaGVhZGVyX3ByaW50X3N5bWJvbCwKLQkucHJp
bnRfY29tbWVudCA9IGhlYWRlcl9wcmludF9jb21tZW50LAotfTsKLQotLyoKLSAqIFRyaXN0YXRl
IHByaW50ZXIKLSAqCi0gKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhl
IGBpbmNsdWRlL2NvbmZpZy90cmlzdGF0ZS5jb25mJyBmaWxlLgotICovCi1zdGF0aWMgdm9pZAot
dHJpc3RhdGVfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0
IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpCi17Ci0KLQlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RB
VEUgJiYgKnZhbHVlICE9ICduJykKLQkJZnByaW50ZihmcCwgIiVzJXM9JWNcbiIsIENPTkZJR18s
IHN5bS0+bmFtZSwgKGNoYXIpdG91cHBlcigqdmFsdWUpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBj
b25mX3ByaW50ZXIgdHJpc3RhdGVfcHJpbnRlcl9jYiA9Ci17Ci0JLnByaW50X3N5bWJvbCA9IHRy
aXN0YXRlX3ByaW50X3N5bWJvbCwKLQkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJpbnRfY29t
bWVudCwKLX07Ci0KLXN0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1
Y3Qgc3ltYm9sICpzeW0sCi0JCQkgICAgICBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2
b2lkICpwcmludGVyX2FyZykKLXsKLQljb25zdCBjaGFyICpzdHI7Ci0KLQlzd2l0Y2ggKHN5bS0+
dHlwZSkgewotCWNhc2UgU19VTktOT1dOOgotCQlicmVhazsKLQljYXNlIFNfU1RSSU5HOgotCQlz
dHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOwotCQlzdHIgPSBzeW1fZXNjYXBlX3N0cmlu
Z192YWx1ZShzdHIpOwotCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5bSwgc3RyLCBwcmlu
dGVyX2FyZyk7Ci0JCWZyZWUoKHZvaWQgKilzdHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlz
dHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOwotCQlwcmludGVyLT5wcmludF9zeW1ib2wo
ZnAsIHN5bSwgc3RyLCBwcmludGVyX2FyZyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotY29uZl93
cml0ZV9oZWFkaW5nKEZJTEUgKmZwLCBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lk
ICpwcmludGVyX2FyZykKLXsKLQljaGFyIGJ1ZlsyNTZdOwotCi0Jc25wcmludGYoYnVmLCBzaXpl
b2YoYnVmKSwKLQkgICAgIlxuIgotCSAgICAiQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZTsg
RE8gTk9UIEVESVQuXG4iCi0JICAgICIlc1xuIiwKLQkgICAgcm9vdG1lbnUucHJvbXB0LT50ZXh0
KTsKLQotCXByaW50ZXItPnByaW50X2NvbW1lbnQoZnAsIGJ1ZiwgcHJpbnRlcl9hcmcpOwotfQot
Ci0vKgotICogV3JpdGUgb3V0IGEgbWluaW1hbCBjb25maWcuCi0gKiBBbGwgdmFsdWVzIHRoYXQg
aGFzIGRlZmF1bHQgdmFsdWVzIGFyZSBza2lwcGVkIGFzIHRoaXMgaXMgcmVkdW5kYW50LgotICov
Ci1pbnQgY29uZl93cml0ZV9kZWZjb25maWcoY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0Jc3Ry
dWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBtZW51ICptZW51OwotCUZJTEUgKm91dDsKLQotCW91
dCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOwotCWlmICghb3V0KQotCQlyZXR1cm4gMTsKLQotCXN5
bV9jbGVhcl9hbGxfdmFsaWQoKTsKLQotCS8qIFRyYXZlcnNlIGFsbCBtZW51cyB0byBmaW5kIGFs
bCByZWxldmFudCBzeW1ib2xzICovCi0JbWVudSA9IHJvb3RtZW51Lmxpc3Q7Ci0KLQl3aGlsZSAo
bWVudSAhPSBOVUxMKQotCXsKLQkJc3ltID0gbWVudS0+c3ltOwotCQlpZiAoc3ltID09IE5VTEwp
IHsKLQkJCWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQotCQkJCWdvdG8gbmV4dF9tZW51Owot
CQl9IGVsc2UgaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsKLQkJCXN5bV9jYWxjX3ZhbHVlKHN5
bSk7Ci0JCQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkKLQkJCQlnb3RvIG5leHRf
bWVudTsKLQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKLQkJCS8qIElmIHdlIGNhbm5v
dCBjaGFuZ2UgdGhlIHN5bWJvbCAtIHNraXAgKi8KLQkJCWlmICghc3ltX2lzX2NoYW5nYWJsZShz
eW0pKQotCQkJCWdvdG8gbmV4dF9tZW51OwotCQkJLyogSWYgc3ltYm9sIGVxdWFscyB0byBkZWZh
dWx0IHZhbHVlIC0gc2tpcCAqLwotCQkJaWYgKHN0cmNtcChzeW1fZ2V0X3N0cmluZ192YWx1ZShz
eW0pLCBzeW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN5bSkpID09IDApCi0JCQkJZ290byBuZXh0X21l
bnU7Ci0KLQkJCS8qCi0JCQkgKiBJZiBzeW1ib2wgaXMgYSBjaG9pY2UgdmFsdWUgYW5kIGVxdWFs
cyB0byB0aGUKLQkJCSAqIGRlZmF1bHQgZm9yIGEgY2hvaWNlIC0gc2tpcC4KLQkJCSAqIEJ1dCBv
bmx5IGlmIHZhbHVlIGlzIGJvb2wgYW5kIGVxdWFsIHRvICJ5IiBhbmQKLQkJCSAqIGNob2ljZSBp
cyBub3QgIm9wdGlvbmFsIi4KLQkJCSAqIChJZiBjaG9pY2UgaXMgIm9wdGlvbmFsIiB0aGVuIGFs
bCB2YWx1ZXMgY2FuIGJlICJuIikKLQkJCSAqLwotCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUo
c3ltKSkgewotCQkJCXN0cnVjdCBzeW1ib2wgKmNzOwotCQkJCXN0cnVjdCBzeW1ib2wgKmRzOwot
Ci0JCQkJY3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKLQkJ
CQlkcyA9IHN5bV9jaG9pY2VfZGVmYXVsdChjcyk7Ci0JCQkJaWYgKCFzeW1faXNfb3B0aW9uYWwo
Y3MpICYmIHN5bSA9PSBkcykgewotCQkJCQlpZiAoKHN5bS0+dHlwZSA9PSBTX0JPT0xFQU4pICYm
Ci0JCQkJCSAgICBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQotCQkJCQkJZ290
byBuZXh0X21lbnU7Ci0JCQkJfQotCQkJfQotCQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0s
ICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwpOwotCQl9Ci1uZXh0X21lbnU6Ci0JCWlmIChtZW51
LT5saXN0ICE9IE5VTEwpIHsKLQkJCW1lbnUgPSBtZW51LT5saXN0OwotCQl9Ci0JCWVsc2UgaWYg
KG1lbnUtPm5leHQgIT0gTlVMTCkgewotCQkJbWVudSA9IG1lbnUtPm5leHQ7Ci0JCX0gZWxzZSB7
Ci0JCQl3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7Ci0JCQkJaWYgKG1lbnUtPm5leHQg
IT0gTlVMTCkgewotCQkJCQltZW51ID0gbWVudS0+bmV4dDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQot
CQkJfQotCQl9Ci0JfQotCWZjbG9zZShvdXQpOwotCXJldHVybiAwOwotfQotCi1pbnQgY29uZl93
cml0ZShjb25zdCBjaGFyICpuYW1lKQotewotCUZJTEUgKm91dDsKLQlzdHJ1Y3Qgc3ltYm9sICpz
eW07Ci0Jc3RydWN0IG1lbnUgKm1lbnU7Ci0JY29uc3QgY2hhciAqc3RyOwotCWNoYXIgdG1wbmFt
ZVtQQVRIX01BWCArIDFdLCBvbGRuYW1lW1BBVEhfTUFYICsgMV07Ci0JY2hhciAqZW52OwotCWJv
b2wgbmVlZF9uZXdsaW5lID0gZmFsc2U7Ci0KLQlpZiAoIW5hbWUpCi0JCW5hbWUgPSBjb25mX2dl
dF9jb25maWduYW1lKCk7Ci0KLQlpZiAoISpuYW1lKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiY29u
ZmlnIG5hbWUgaXMgZW1wdHlcbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKGlzX2Rpcihu
YW1lKSkgewotCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJcyBhIGRpcmVjdG9yeVxuIiwgbmFtZSk7
Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQotCQlyZXR1
cm4gLTE7Ci0KLQllbnYgPSBnZXRlbnYoIktDT05GSUdfT1ZFUldSSVRFQ09ORklHIik7Ci0JaWYg
KGVudiAmJiAqZW52KSB7Ci0JCSp0bXBuYW1lID0gMDsKLQkJb3V0ID0gZm9wZW4obmFtZSwgInci
KTsKLQl9IGVsc2UgewotCQlzbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSksICIlcy4l
ZC50bXAiLAotCQkJIG5hbWUsIChpbnQpZ2V0cGlkKCkpOwotCQlvdXQgPSBmb3Blbih0bXBuYW1l
LCAidyIpOwotCX0KLQlpZiAoIW91dCkKLQkJcmV0dXJuIDE7Ci0KLQljb25mX3dyaXRlX2hlYWRp
bmcob3V0LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKLQotCWlmICghY29uZl9nZXRfY2hh
bmdlZCgpKQotCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7Ci0KLQltZW51ID0gcm9vdG1lbnUubGlz
dDsKLQl3aGlsZSAobWVudSkgewotCQlzeW0gPSBtZW51LT5zeW07Ci0JCWlmICghc3ltKSB7Ci0J
CQlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSkKLQkJCQlnb3RvIG5leHQ7Ci0JCQlzdHIgPSBt
ZW51X2dldF9wcm9tcHQobWVudSk7Ci0JCQlmcHJpbnRmKG91dCwgIlxuIgotCQkJCSAgICAgIiNc
biIKLQkJCQkgICAgICIjICVzXG4iCi0JCQkJICAgICAiI1xuIiwgc3RyKTsKLQkJCW5lZWRfbmV3
bGluZSA9IGZhbHNlOwotCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0Up
KSB7Ci0JCQlzeW1fY2FsY192YWx1ZShzeW0pOwotCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJP
TF9XUklURSkpCi0JCQkJZ290byBuZXh0OwotCQkJaWYgKG5lZWRfbmV3bGluZSkgewotCQkJCWZw
cmludGYob3V0LCAiXG4iKTsKLQkJCQluZWVkX25ld2xpbmUgPSBmYWxzZTsKLQkJCX0KLQkJCXN5
bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKLQkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3lt
LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKLQkJfQotCi1uZXh0OgotCQlpZiAobWVudS0+
bGlzdCkgewotCQkJbWVudSA9IG1lbnUtPmxpc3Q7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAo
bWVudS0+bmV4dCkKLQkJCW1lbnUgPSBtZW51LT5uZXh0OwotCQllbHNlIHdoaWxlICgobWVudSA9
IG1lbnUtPnBhcmVudCkpIHsKLQkJCWlmICghbWVudS0+c3ltICYmIG1lbnVfaXNfdmlzaWJsZSht
ZW51KSAmJgotCQkJICAgIG1lbnUgIT0gJnJvb3RtZW51KSB7Ci0JCQkJc3RyID0gbWVudV9nZXRf
cHJvbXB0KG1lbnUpOwotCQkJCWZwcmludGYob3V0LCAiIyBlbmQgb2YgJXNcbiIsIHN0cik7Ci0J
CQkJbmVlZF9uZXdsaW5lID0gdHJ1ZTsKLQkJCX0KLQkJCWlmIChtZW51LT5uZXh0KSB7Ci0JCQkJ
bWVudSA9IG1lbnUtPm5leHQ7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JZmNsb3NlKG91
dCk7Ci0KLQlpZiAoKnRtcG5hbWUpIHsKLQkJaWYgKGlzX3NhbWUobmFtZSwgdG1wbmFtZSkpIHsK
LQkJCWNvbmZfbWVzc2FnZSgiTm8gY2hhbmdlIHRvICVzIiwgbmFtZSk7Ci0JCQl1bmxpbmsodG1w
bmFtZSk7Ci0JCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKLQkJCXJldHVybiAwOwotCQl9Ci0K
LQkJc25wcmludGYob2xkbmFtZSwgc2l6ZW9mKG9sZG5hbWUpLCAiJXMub2xkIiwgbmFtZSk7Ci0J
CXJlbmFtZShuYW1lLCBvbGRuYW1lKTsKLQkJaWYgKHJlbmFtZSh0bXBuYW1lLCBuYW1lKSkKLQkJ
CXJldHVybiAxOwotCX0KLQotCWNvbmZfbWVzc2FnZSgiY29uZmlndXJhdGlvbiB3cml0dGVuIHRv
ICVzIiwgbmFtZSk7Ci0KLQlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsKLQotCXJldHVybiAwOwot
fQotCi0vKiB3cml0ZSBhIGRlcGVuZGVuY3kgZmlsZSBhcyB1c2VkIGJ5IGtidWlsZCB0byB0cmFj
ayBkZXBlbmRlbmNpZXMgKi8KLXN0YXRpYyBpbnQgY29uZl93cml0ZV9kZXAoY29uc3QgY2hhciAq
bmFtZSkKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlGSUxFICpvdXQ7Ci0KLQlvdXQgPSBmb3Bl
bigiLi5jb25maWcudG1wIiwgInciKTsKLQlpZiAoIW91dCkKLQkJcmV0dXJuIDE7Ci0JZnByaW50
ZihvdXQsICJkZXBzX2NvbmZpZyA6PSBcXFxuIik7Ci0JZm9yIChmaWxlID0gZmlsZV9saXN0OyBm
aWxlOyBmaWxlID0gZmlsZS0+bmV4dCkgewotCQlpZiAoZmlsZS0+bmV4dCkKLQkJCWZwcmludGYo
b3V0LCAiXHQlcyBcXFxuIiwgZmlsZS0+bmFtZSk7Ci0JCWVsc2UKLQkJCWZwcmludGYob3V0LCAi
XHQlc1xuIiwgZmlsZS0+bmFtZSk7Ci0JfQotCWZwcmludGYob3V0LCAiXG4lczogXFxcbiIKLQkJ
ICAgICAiXHQkKGRlcHNfY29uZmlnKVxuXG4iLCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7
Ci0KLQllbnZfd3JpdGVfZGVwKG91dCwgY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCkpOwotCi0J
ZnByaW50ZihvdXQsICJcbiQoZGVwc19jb25maWcpOiA7XG4iKTsKLQlmY2xvc2Uob3V0KTsKLQot
CWlmIChtYWtlX3BhcmVudF9kaXIobmFtZSkpCi0JCXJldHVybiAxOwotCXJlbmFtZSgiLi5jb25m
aWcudG1wIiwgbmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY29uZl90b3VjaF9k
ZXBzKHZvaWQpCi17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW07Ci0J
aW50IHJlcywgaTsKLQotCXN0cmNweShkZXBmaWxlX3BhdGgsICJpbmNsdWRlL2NvbmZpZy8iKTsK
LQlkZXBmaWxlX3ByZWZpeF9sZW4gPSBzdHJsZW4oZGVwZmlsZV9wYXRoKTsKLQotCW5hbWUgPSBj
b25mX2dldF9hdXRvY29uZmlnX25hbWUoKTsKLQljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVG
X0FVVE8pOwotCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKLQotCWZvcl9hbGxfc3ltYm9s
cyhpLCBzeW0pIHsKLQkJc3ltX2NhbGNfdmFsdWUoc3ltKTsKLQkJaWYgKChzeW0tPmZsYWdzICYg
U1lNQk9MX05PX1dSSVRFKSB8fCAhc3ltLT5uYW1lKQotCQkJY29udGludWU7Ci0JCWlmIChzeW0t
PmZsYWdzICYgU1lNQk9MX1dSSVRFKSB7Ci0JCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZf
QVVUTykgewotCQkJCS8qCi0JCQkJICogc3ltYm9sIGhhcyBvbGQgYW5kIG5ldyB2YWx1ZSwKLQkJ
CQkgKiBzbyBjb21wYXJlIHRoZW0uLi4KLQkJCQkgKi8KLQkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkg
ewotCQkJCWNhc2UgU19CT09MRUFOOgotCQkJCWNhc2UgU19UUklTVEFURToKLQkJCQkJaWYgKHN5
bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PQotCQkJCQkgICAgc3ltLT5kZWZbU19ERUZfQVVU
T10udHJpKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgU19TVFJJTkc6
Ci0JCQkJY2FzZSBTX0hFWDoKLQkJCQljYXNlIFNfSU5UOgotCQkJCQlpZiAoIXN0cmNtcChzeW1f
Z2V0X3N0cmluZ192YWx1ZShzeW0pLAotCQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnZh
bCkpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJYnJl
YWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIElmIHRoZXJlIGlzIG5vIG9s
ZCB2YWx1ZSwgb25seSAnbm8nICh1bnNldCkKLQkJCQkgKiBpcyBhbGxvd2VkIGFzIG5ldyB2YWx1
ZS4KLQkJCQkgKi8KLQkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgewotCQkJCWNhc2UgU19CT09MRUFO
OgotCQkJCWNhc2UgU19UUklTVEFURToKLQkJCQkJaWYgKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUo
c3ltKSA9PSBubykKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0Ogot
CQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lN
Qk9MX0RFRl9BVVRPKSkKLQkJCS8qIFRoZXJlIGlzIG5laXRoZXIgYW4gb2xkIG5vciBhIG5ldyB2
YWx1ZS4gKi8KLQkJCWNvbnRpbnVlOwotCQkvKiBlbHNlCi0JCSAqCVRoZXJlIGlzIGFuIG9sZCB2
YWx1ZSwgYnV0IG5vIG5ldyB2YWx1ZSAoJ25vJyAodW5zZXQpCi0JCSAqCWlzbid0IHNhdmVkIGlu
IGF1dG8uY29uZiwgc28gdGhlIG9sZCB2YWx1ZSBpcyBhbHdheXMKLQkJICoJZGlmZmVyZW50IGZy
b20gJ25vJykuCi0JCSAqLwotCi0JCXJlcyA9IGNvbmZfdG91Y2hfZGVwKHN5bS0+bmFtZSk7Ci0J
CWlmIChyZXMpCi0JCQlyZXR1cm4gcmVzOwotCX0KLQotCXJldHVybiAwOwotfQotCi1pbnQgY29u
Zl93cml0ZV9hdXRvY29uZihpbnQgb3ZlcndyaXRlKQotewotCXN0cnVjdCBzeW1ib2wgKnN5bTsK
LQljb25zdCBjaGFyICpuYW1lOwotCWNvbnN0IGNoYXIgKmF1dG9jb25mX25hbWUgPSBjb25mX2dl
dF9hdXRvY29uZmlnX25hbWUoKTsKLQlGSUxFICpvdXQsICp0cmlzdGF0ZSwgKm91dF9oOwotCWlu
dCBpOwotCi0JaWYgKCFvdmVyd3JpdGUgJiYgaXNfcHJlc2VudChhdXRvY29uZl9uYW1lKSkKLQkJ
cmV0dXJuIDA7Ci0KLQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7Ci0KLQljb25mX3dyaXRlX2RlcCgi
aW5jbHVkZS9jb25maWcvYXV0by5jb25mLmNtZCIpOwotCi0JaWYgKGNvbmZfdG91Y2hfZGVwcygp
KQotCQlyZXR1cm4gMTsKLQotCW91dCA9IGZvcGVuKCIudG1wY29uZmlnIiwgInciKTsKLQlpZiAo
IW91dCkKLQkJcmV0dXJuIDE7Ci0KLQl0cmlzdGF0ZSA9IGZvcGVuKCIudG1wY29uZmlnX3RyaXN0
YXRlIiwgInciKTsKLQlpZiAoIXRyaXN0YXRlKSB7Ci0JCWZjbG9zZShvdXQpOwotCQlyZXR1cm4g
MTsKLQl9Ci0KLQlvdXRfaCA9IGZvcGVuKCIudG1wY29uZmlnLmgiLCAidyIpOwotCWlmICghb3V0
X2gpIHsKLQkJZmNsb3NlKG91dCk7Ci0JCWZjbG9zZSh0cmlzdGF0ZSk7Ci0JCXJldHVybiAxOwot
CX0KLQotCWNvbmZfd3JpdGVfaGVhZGluZyhvdXQsICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwp
OwotCi0JY29uZl93cml0ZV9oZWFkaW5nKHRyaXN0YXRlLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwg
TlVMTCk7Ci0KLQljb25mX3dyaXRlX2hlYWRpbmcob3V0X2gsICZoZWFkZXJfcHJpbnRlcl9jYiwg
TlVMTCk7Ci0KLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7Ci0JCXN5bV9jYWxjX3ZhbHVlKHN5
bSk7Ci0JCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8ICFzeW0tPm5hbWUpCi0J
CQljb250aW51ZTsKLQotCQkvKiB3cml0ZSBzeW1ib2wgdG8gYXV0by5jb25mLCB0cmlzdGF0ZSBh
bmQgaGVhZGVyIGZpbGVzICovCi0JCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZp
Z19wcmludGVyX2NiLCAodm9pZCAqKTEpOwotCi0JCWNvbmZfd3JpdGVfc3ltYm9sKHRyaXN0YXRl
LCBzeW0sICZ0cmlzdGF0ZV9wcmludGVyX2NiLCAodm9pZCAqKTEpOwotCi0JCWNvbmZfd3JpdGVf
c3ltYm9sKG91dF9oLCBzeW0sICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7Ci0JfQotCWZjbG9z
ZShvdXQpOwotCWZjbG9zZSh0cmlzdGF0ZSk7Ci0JZmNsb3NlKG91dF9oKTsKLQotCW5hbWUgPSBn
ZXRlbnYoIktDT05GSUdfQVVUT0hFQURFUiIpOwotCWlmICghbmFtZSkKLQkJbmFtZSA9ICJpbmNs
dWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIjsKLQlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQot
CQlyZXR1cm4gMTsKLQlpZiAocmVuYW1lKCIudG1wY29uZmlnLmgiLCBuYW1lKSkKLQkJcmV0dXJu
IDE7Ci0KLQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX1RSSVNUQVRFIik7Ci0JaWYgKCFuYW1lKQot
CQluYW1lID0gImluY2x1ZGUvY29uZmlnL3RyaXN0YXRlLmNvbmYiOwotCWlmIChtYWtlX3BhcmVu
dF9kaXIobmFtZSkpCi0JCXJldHVybiAxOwotCWlmIChyZW5hbWUoIi50bXBjb25maWdfdHJpc3Rh
dGUiLCBuYW1lKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAobWFrZV9wYXJlbnRfZGlyKGF1dG9jb25m
X25hbWUpKQotCQlyZXR1cm4gMTsKLQkvKgotCSAqIFRoaXMgbXVzdCBiZSB0aGUgbGFzdCBzdGVw
LCBrYnVpbGQgaGFzIGEgZGVwZW5kZW5jeSBvbiBhdXRvLmNvbmYKLQkgKiBhbmQgdGhpcyBtYXJr
cyB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBzdGVwcy4KLQkgKi8K
LQlpZiAocmVuYW1lKCIudG1wY29uZmlnIiwgYXV0b2NvbmZfbmFtZSkpCi0JCXJldHVybiAxOwot
Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc3ltX2NoYW5nZV9jb3VudDsKLXN0YXRpYyB2
b2lkICgqY29uZl9jaGFuZ2VkX2NhbGxiYWNrKSh2b2lkKTsKLQotdm9pZCBzeW1fc2V0X2NoYW5n
ZV9jb3VudChpbnQgY291bnQpCi17Ci0JaW50IF9zeW1fY2hhbmdlX2NvdW50ID0gc3ltX2NoYW5n
ZV9jb3VudDsKLQlzeW1fY2hhbmdlX2NvdW50ID0gY291bnQ7Ci0JaWYgKGNvbmZfY2hhbmdlZF9j
YWxsYmFjayAmJgotCSAgICAoYm9vbClfc3ltX2NoYW5nZV9jb3VudCAhPSAoYm9vbCljb3VudCkK
LQkJY29uZl9jaGFuZ2VkX2NhbGxiYWNrKCk7Ci19Ci0KLXZvaWQgc3ltX2FkZF9jaGFuZ2VfY291
bnQoaW50IGNvdW50KQotewotCXN5bV9zZXRfY2hhbmdlX2NvdW50KGNvdW50ICsgc3ltX2NoYW5n
ZV9jb3VudCk7Ci19Ci0KLWJvb2wgY29uZl9nZXRfY2hhbmdlZCh2b2lkKQotewotCXJldHVybiBz
eW1fY2hhbmdlX2NvdW50OwotfQotCi12b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9p
ZCAoKmZuKSh2b2lkKSkKLXsKLQljb25mX2NoYW5nZWRfY2FsbGJhY2sgPSBmbjsKLX0KLQotc3Rh
dGljIGJvb2wgcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoc3RydWN0IHN5bWJvbCAqY3N5bSkKLXsK
LQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBl
eHByICplOwotCWludCBjbnQsIGRlZjsKLQotCS8qCi0JICogSWYgY2hvaWNlIGlzIG1vZCB0aGVu
IHdlIG1heSBoYXZlIG1vcmUgaXRlbXMgc2VsZWN0ZWQKLQkgKiBhbmQgaWYgbm8gdGhlbiBuby1v
bmUuCi0JICogSW4gYm90aCBjYXNlcyBzdG9wLgotCSAqLwotCWlmIChjc3ltLT5jdXJyLnRyaSAh
PSB5ZXMpCi0JCXJldHVybiBmYWxzZTsKLQotCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNz
eW0pOwotCi0JLyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8KLQljbnQgPSAwOwot
CWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQotCQljbnQrKzsKLQot
CS8qCi0JICogZmluZCBhIHJhbmRvbSB2YWx1ZSBhbmQgc2V0IGl0IHRvIHllcywKLQkgKiBzZXQg
dGhlIHJlc3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9uZSBzZXQKLQkgKi8KLQlkZWYgPSAocmFu
ZCgpICUgY250KTsKLQotCWNudCA9IDA7Ci0JZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5l
eHByLCBlLCBzeW0pIHsKLQkJaWYgKGRlZiA9PSBjbnQrKykgewotCQkJc3ltLT5kZWZbU19ERUZf
VVNFUl0udHJpID0geWVzOwotCQkJY3N5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsKLQkJ
fQotCQllbHNlIHsKLQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOwotCQl9Ci0JCXN5
bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOwotCQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFs
dWUgY2FsY3VsYXRlZCAqLwotCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfVkFMSUQ7Ci0JfQotCWNz
eW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKLQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFs
dWUgY2FsY3VsYXRlZCAqLwotCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsKLQotCXJl
dHVybiB0cnVlOwotfQotCi12b2lkIHNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9s
ICpjc3ltKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW07
Ci0Jc3RydWN0IGV4cHIgKmU7Ci0KLQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsK
LQotCS8qCi0JICogU2V0IGFsbCBub24tYXNzaW5nZWQgY2hvaWNlIHZhbHVlcyB0byBubwotCSAq
LwotCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7Ci0JCWlmICgh
c3ltX2hhc192YWx1ZShzeW0pKQotCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87Ci0J
fQotCWNzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKLQkvKiBjbGVhciBWQUxJRCB0byBn
ZXQgdmFsdWUgY2FsY3VsYXRlZCAqLwotCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEIHwg
U1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMpOwotfQotCi1ib29sIGNvbmZfc2V0X2FsbF9u
ZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpz
eW0sICpjc3ltOwotCWludCBpLCBjbnQsIHBieSwgcHR5LCBwdG07CS8qIHBieTogcHJvYmFiaWxp
dHkgb2YgYm9vbCAgICAgPSB5Ci0JCQkJCSAqIHB0eTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUg
PSB5Ci0JCQkJCSAqIHB0bTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSBtCi0JCQkJCSAqLwot
Ci0JcGJ5ID0gNTA7IHB0eSA9IHB0bSA9IDMzOyAvKiBjYW4ndCBnbyBhcyB0aGUgZGVmYXVsdCBp
biBzd2l0Y2gtY2FzZQotCQkJCSAgICogYmVsb3csIG90aGVyd2lzZSBnY2Mgd2hpbmVzIGFib3V0
Ci0JCQkJICAgKiAtV21heWJlLXVuaW5pdGlhbGl6ZWQgKi8KLQlpZiAobW9kZSA9PSBkZWZfcmFu
ZG9tKSB7Ci0JCWludCBuLCBwWzNdOwotCQljaGFyICplbnYgPSBnZXRlbnYoIktDT05GSUdfUFJP
QkFCSUxJVFkiKTsKLQkJbiA9IDA7Ci0JCXdoaWxlKCBlbnYgJiYgKmVudiApIHsKLQkJCWNoYXIg
KmVuZHA7Ci0JCQlpbnQgdG1wID0gc3RydG9sKCBlbnYsICZlbmRwLCAxMCApOwotCQkJaWYoIHRt
cCA+PSAwICYmIHRtcCA8PSAxMDAgKSB7Ci0JCQkJcFtuKytdID0gdG1wOwotCQkJfSBlbHNlIHsK
LQkJCQllcnJubyA9IEVSQU5HRTsKLQkJCQlwZXJyb3IoICJLQ09ORklHX1BST0JBQklMSVRZIiAp
OwotCQkJCWV4aXQoIDEgKTsKLQkJCX0KLQkJCWVudiA9ICgqZW5kcCA9PSAnOicpID8gZW5kcCsx
IDogZW5kcDsKLQkJCWlmKCBuID49MyApIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlzd2l0
Y2goIG4gKSB7Ci0JCWNhc2UgMToKLQkJCXBieSA9IHBbMF07IHB0bSA9IHBieS8yOyBwdHkgPSBw
YnktcHRtOwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXB0eSA9IHBbMF07IHB0bSA9IHBbMV07
IHBieSA9IHB0eSArIHB0bTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlwYnkgPSBwWzBdOyBw
dHkgPSBwWzFdOyBwdG0gPSBwWzJdOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiggcHR5K3B0bSA+
IDEwMCApIHsKLQkJCWVycm5vID0gRVJBTkdFOwotCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJ
TElUWSIgKTsKLQkJCWV4aXQoIDEgKTsKLQkJfQotCX0KLQlib29sIGhhc19jaGFuZ2VkID0gZmFs
c2U7Ci0KLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7Ci0JCWlmIChzeW1faGFzX3ZhbHVlKHN5
bSkgfHwgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpKQotCQkJY29udGludWU7Ci0JCXN3aXRj
aCAoc3ltX2dldF90eXBlKHN5bSkpIHsKLQkJY2FzZSBTX0JPT0xFQU46Ci0JCWNhc2UgU19UUklT
VEFURToKLQkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsKLQkJCXN3aXRjaCAobW9kZSkgewotCQkJY2Fz
ZSBkZWZfeWVzOgotCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKLQkJCQlicmVh
azsKLQkJCWNhc2UgZGVmX21vZDoKLQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7
Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIGRlZl9ubzoKLQkJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJP
TF9BTExOT0NPTkZJR19ZKQotCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7Ci0J
CQkJZWxzZQotCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsKLQkJCQlicmVhazsK
LQkJCWNhc2UgZGVmX3JhbmRvbToKLQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsK
LQkJCQljbnQgPSByYW5kKCkgJSAxMDA7Ci0JCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRF
KSB7Ci0JCQkJCWlmIChjbnQgPCBwdHkpCi0JCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkg
PSB5ZXM7Ci0JCQkJCWVsc2UgaWYgKGNudCA8IChwdHkrcHRtKSkKLQkJCQkJCXN5bS0+ZGVmW1Nf
REVGX1VTRVJdLnRyaSA9IG1vZDsKLQkJCQl9IGVsc2UgaWYgKGNudCA8IHBieSkKLQkJCQkJc3lt
LT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJ
CQljb250aW51ZTsKLQkJCX0KLQkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09
IGRlZl9yYW5kb20pKQotCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOwotCQkJYnJl
YWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JfQotCi0Jc3ltX2NsZWFyX2FsbF92
YWxpZCgpOwotCi0JLyoKLQkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9j
a3MuCi0JICogSWYgY3Vyci50cmkgZXF1YWxzIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2
ZXJhbAotCSAqIGNob2ljZSBzeW1ib2xzIGluIG9uZSBibG9jay4KLQkgKiBJbiB0aGlzIGNhc2Ug
d2UgZG8gbm90aGluZy4KLQkgKiBJZiBjdXJyLnRyaSBlcXVhbHMgeWVzIHRoZW4gb25seSBvbmUg
c3ltYm9sIGNhbiBiZQotCSAqIHNlbGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQg
aXQgdG8geWVzLAotCSAqIGFuZCB0aGUgcmVzdCB0byBuby4KLQkgKi8KLQlpZiAobW9kZSAhPSBk
ZWZfcmFuZG9tKSB7Ci0JCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7Ci0JCQlpZiAoKHN5bV9p
c19jaG9pY2UoY3N5bSkgJiYgIXN5bV9oYXNfdmFsdWUoY3N5bSkpIHx8Ci0JCQkgICAgc3ltX2lz
X2Nob2ljZV92YWx1ZShjc3ltKSkKLQkJCQljc3ltLT5mbGFncyB8PSBTWU1CT0xfTkVFRF9TRVRf
Q0hPSUNFX1ZBTFVFUzsKLQkJfQotCX0KLQotCWZvcl9hbGxfc3ltYm9scyhpLCBjc3ltKSB7Ci0J
CWlmIChzeW1faGFzX3ZhbHVlKGNzeW0pIHx8ICFzeW1faXNfY2hvaWNlKGNzeW0pKQotCQkJY29u
dGludWU7Ci0KLQkJc3ltX2NhbGNfdmFsdWUoY3N5bSk7Ci0JCWlmIChtb2RlID09IGRlZl9yYW5k
b20pCi0JCQloYXNfY2hhbmdlZCA9IHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKGNzeW0pOwotCQll
bHNlIHsKLQkJCXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhjc3ltKTsKLQkJCWhhc19jaGFuZ2VkID0g
dHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBoYXNfY2hhbmdlZDsKLX0KZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZmZmZjMuLjAwMDAwMDAKLS0tIGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9leHByLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjk3ICswLDAgQEAKLS8v
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICovCi0KLSNpbmNsdWRl
IDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2luY2x1ZGUgImxrYy5oIgot
Ci0jZGVmaW5lIERFQlVHX0VYUFIJMAotCi1zdGF0aWMgaW50IGV4cHJfZXEoc3RydWN0IGV4cHIg
KmUxLCBzdHJ1Y3QgZXhwciAqZTIpOwotc3RhdGljIHN0cnVjdCBleHByICpleHByX2VsaW1pbmF0
ZV95bihzdHJ1Y3QgZXhwciAqZSk7Ci0KLXN0cnVjdCBleHByICpleHByX2FsbG9jX3N5bWJvbChz
dHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0Jc3RydWN0IGV4cHIgKmUgPSB4Y2FsbG9jKDEsIHNpemVv
ZigqZSkpOwotCWUtPnR5cGUgPSBFX1NZTUJPTDsKLQllLT5sZWZ0LnN5bSA9IHN5bTsKLQlyZXR1
cm4gZTsKLX0KLQotc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfb25lKGVudW0gZXhwcl90eXBlIHR5
cGUsIHN0cnVjdCBleHByICpjZSkKLXsKLQlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6
ZW9mKCplKSk7Ci0JZS0+dHlwZSA9IHR5cGU7Ci0JZS0+bGVmdC5leHByID0gY2U7Ci0JcmV0dXJu
IGU7Ci19Ci0KLXN0cnVjdCBleHByICpleHByX2FsbG9jX3R3byhlbnVtIGV4cHJfdHlwZSB0eXBl
LCBzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKLXsKLQlzdHJ1Y3QgZXhwciAqZSA9
IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7Ci0JZS0+dHlwZSA9IHR5cGU7Ci0JZS0+bGVmdC5leHBy
ID0gZTE7Ci0JZS0+cmlnaHQuZXhwciA9IGUyOwotCXJldHVybiBlOwotfQotCi1zdHJ1Y3QgZXhw
ciAqZXhwcl9hbGxvY19jb21wKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnMx
LCBzdHJ1Y3Qgc3ltYm9sICpzMikKLXsKLQlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6
ZW9mKCplKSk7Ci0JZS0+dHlwZSA9IHR5cGU7Ci0JZS0+bGVmdC5zeW0gPSBzMTsKLQllLT5yaWdo
dC5zeW0gPSBzMjsKLQlyZXR1cm4gZTsKLX0KLQotc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfYW5k
KHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQotewotCWlmICghZTEpCi0JCXJldHVy
biBlMjsKLQlyZXR1cm4gZTIgPyBleHByX2FsbG9jX3R3byhFX0FORCwgZTEsIGUyKSA6IGUxOwot
fQotCi1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBl
eHByICplMikKLXsKLQlpZiAoIWUxKQotCQlyZXR1cm4gZTI7Ci0JcmV0dXJuIGUyID8gZXhwcl9h
bGxvY190d28oRV9PUiwgZTEsIGUyKSA6IGUxOwotfQotCi1zdHJ1Y3QgZXhwciAqZXhwcl9jb3B5
KGNvbnN0IHN0cnVjdCBleHByICpvcmcpCi17Ci0Jc3RydWN0IGV4cHIgKmU7Ci0KLQlpZiAoIW9y
ZykKLQkJcmV0dXJuIE5VTEw7Ci0KLQllID0geG1hbGxvYyhzaXplb2YoKm9yZykpOwotCW1lbWNw
eShlLCBvcmcsIHNpemVvZigqb3JnKSk7Ci0Jc3dpdGNoIChvcmctPnR5cGUpIHsKLQljYXNlIEVf
U1lNQk9MOgotCQllLT5sZWZ0ID0gb3JnLT5sZWZ0OwotCQlicmVhazsKLQljYXNlIEVfTk9UOgot
CQllLT5sZWZ0LmV4cHIgPSBleHByX2NvcHkob3JnLT5sZWZ0LmV4cHIpOwotCQlicmVhazsKLQlj
YXNlIEVfRVFVQUw6Ci0JY2FzZSBFX0dFUToKLQljYXNlIEVfR1RIOgotCWNhc2UgRV9MRVE6Ci0J
Y2FzZSBFX0xUSDoKLQljYXNlIEVfVU5FUVVBTDoKLQkJZS0+bGVmdC5zeW0gPSBvcmctPmxlZnQu
c3ltOwotCQllLT5yaWdodC5zeW0gPSBvcmctPnJpZ2h0LnN5bTsKLQkJYnJlYWs7Ci0JY2FzZSBF
X0FORDoKLQljYXNlIEVfT1I6Ci0JY2FzZSBFX0xJU1Q6Ci0JCWUtPmxlZnQuZXhwciA9IGV4cHJf
Y29weShvcmctPmxlZnQuZXhwcik7Ci0JCWUtPnJpZ2h0LmV4cHIgPSBleHByX2NvcHkob3JnLT5y
aWdodC5leHByKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZnByaW50ZihzdGRlcnIsICJjYW4n
dCBjb3B5IHR5cGUgJWRcbiIsIGUtPnR5cGUpOwotCQlmcmVlKGUpOwotCQllID0gTlVMTDsKLQkJ
YnJlYWs7Ci0JfQotCi0JcmV0dXJuIGU7Ci19Ci0KLXZvaWQgZXhwcl9mcmVlKHN0cnVjdCBleHBy
ICplKQotewotCWlmICghZSkKLQkJcmV0dXJuOwotCi0Jc3dpdGNoIChlLT50eXBlKSB7Ci0JY2Fz
ZSBFX1NZTUJPTDoKLQkJYnJlYWs7Ci0JY2FzZSBFX05PVDoKLQkJZXhwcl9mcmVlKGUtPmxlZnQu
ZXhwcik7Ci0JCWJyZWFrOwotCWNhc2UgRV9FUVVBTDoKLQljYXNlIEVfR0VROgotCWNhc2UgRV9H
VEg6Ci0JY2FzZSBFX0xFUToKLQljYXNlIEVfTFRIOgotCWNhc2UgRV9VTkVRVUFMOgotCQlicmVh
azsKLQljYXNlIEVfT1I6Ci0JY2FzZSBFX0FORDoKLQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7
Ci0JCWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZnBy
aW50ZihzdGRlcnIsICJob3cgdG8gZnJlZSB0eXBlICVkP1xuIiwgZS0+dHlwZSk7Ci0JCWJyZWFr
OwotCX0KLQlmcmVlKGUpOwotfQotCi1zdGF0aWMgaW50IHRyYW5zX2NvdW50OwotCi0jZGVmaW5l
IGUxICgqZXAxKQotI2RlZmluZSBlMiAoKmVwMikKLQotLyoKLSAqIGV4cHJfZWxpbWluYXRlX2Vx
KCkgaGVscGVyLgotICoKLSAqIFdhbGtzIHRoZSB0d28gZXhwcmVzc2lvbiB0cmVlcyBnaXZlbiBp
biAnZXAxJyBhbmQgJ2VwMicuIEFueSBub2RlIHRoYXQgZG9lcwotICogbm90IGhhdmUgdHlwZSAn
dHlwZScgKEVfT1IvRV9BTkQpIGlzIGNvbnNpZGVyZWQgYSBsZWFmLCBhbmQgaXMgY29tcGFyZWQK
LSAqIGFnYWluc3QgYWxsIG90aGVyIGxlYXZlcy4gVHdvIGVxdWFsIGxlYXZlcyBhcmUgYm90aCBy
ZXBsYWNlZCB3aXRoIGVpdGhlciAneScKLSAqIG9yICduJyBhcyBhcHByb3ByaWF0ZSBmb3IgJ3R5
cGUnLCB0byBiZSBlbGltaW5hdGVkIGxhdGVyLgotICovCi1zdGF0aWMgdm9pZCBfX2V4cHJfZWxp
bWluYXRlX2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3Qg
ZXhwciAqKmVwMikKLXsKLQkvKiBSZWN1cnNlIGRvd24gdG8gbGVhdmVzICovCi0KLQlpZiAoZTEt
PnR5cGUgPT0gdHlwZSkgewotCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+bGVmdC5l
eHByLCAmZTIpOwotCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+cmlnaHQuZXhwciwg
JmUyKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZTItPnR5cGUgPT0gdHlwZSkgewotCQlfX2V4cHJf
ZWxpbWluYXRlX2VxKHR5cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOwotCQlfX2V4cHJfZWxpbWlu
YXRlX2VxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsKLQkJcmV0dXJuOwotCX0KLQotCS8q
IGUxIGFuZCBlMiBhcmUgbGVhdmVzLiBDb21wYXJlIHRoZW0uICovCi0KLQlpZiAoZTEtPnR5cGUg
PT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYKLQkgICAgZTEtPmxlZnQuc3lt
ID09IGUyLT5sZWZ0LnN5bSAmJgotCSAgICAoZTEtPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzIHx8
IGUxLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSkKLQkJcmV0dXJuOwotCWlmICghZXhwcl9lcShl
MSwgZTIpKQotCQlyZXR1cm47Ci0KLQkvKiBlMSBhbmQgZTIgYXJlIGVxdWFsIGxlYXZlcy4gUHJl
cGFyZSB0aGVtIGZvciBlbGltaW5hdGlvbi4gKi8KLQotCXRyYW5zX2NvdW50Kys7Ci0JZXhwcl9m
cmVlKGUxKTsgZXhwcl9mcmVlKGUyKTsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEVfT1I6Ci0J
CWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7Ci0JCWUyID0gZXhwcl9hbGxvY19z
eW1ib2woJnN5bWJvbF9ubyk7Ci0JCWJyZWFrOwotCWNhc2UgRV9BTkQ6Ci0JCWUxID0gZXhwcl9h
bGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOwotCQllMiA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1i
b2xfeWVzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJOwotCX0KLX0KLQotLyoKLSAqIFJld3Jp
dGVzIHRoZSBleHByZXNzaW9ucyAnZXAxJyBhbmQgJ2VwMicgdG8gcmVtb3ZlIG9wZXJhbmRzIGNv
bW1vbiB0byBib3RoLgotICogRXhhbXBsZSByZWR1Y3Rpb25zOgotICoKLSAqCWVwMTogQSAmJiBC
ICAgICAgICAgICAtPiAgZXAxOiB5Ci0gKgllcDI6IEEgJiYgQiAmJiBDICAgICAgLT4gIGVwMjog
QwotICoKLSAqCWVwMTogQSB8fCBCICAgICAgICAgICAtPiAgZXAxOiBuCi0gKgllcDI6IEEgfHwg
QiB8fCBDICAgICAgLT4gIGVwMjogQwotICoKLSAqCWVwMTogQSAmJiAoQiAmJiBGT08pICAtPiAg
ZXAxOiBGT08KLSAqCWVwMjogKEJBUiAmJiBCKSAmJiBBICAtPiAgZXAyOiBCQVIKLSAqCi0gKgll
cDE6IEEgJiYgKEIgfHwgQykgICAgLT4gIGVwMTogeQotICoJZXAyOiAoQyB8fCBCKSAmJiBBICAg
IC0+ICBlcDI6IHkKLSAqCi0gKiBDb21wYXJpc29ucyBhcmUgZG9uZSBiZXR3ZWVuIGFsbCBvcGVy
YW5kcyBhdCB0aGUgc2FtZSAibGV2ZWwiIG9mICYmIG9yIHx8LgotICogRm9yIGV4YW1wbGUsIGlu
IHRoZSBleHByZXNzaW9uICdlMSAmJiAoZTIgfHwgZTMpICYmIChlNCB8fCBlNSknLCB0aGUKLSAq
IGZvbGxvd2luZyBvcGVyYW5kcyB3aWxsIGJlIGNvbXBhcmVkOgotICoKLSAqCS0gJ2UxJywgJ2Uy
IHx8IGUzJywgYW5kICdlNCB8fCBlNScsIGFnYWluc3QgZWFjaCBvdGhlcgotICoJLSBlMiBhZ2Fp
bnN0IGUzCi0gKgktIGU0IGFnYWluc3QgZTUKLSAqCi0gKiBQYXJlbnRoZXNlcyBhcmUgaXJyZWxl
dmFudCB3aXRoaW4gYSBzaW5nbGUgbGV2ZWwuICdlMSAmJiAoZTIgJiYgZTMpJyBhbmQKLSAqICco
ZTEgJiYgZTIpICYmIGUzJyBhcmUgYm90aCBhIHNpbmdsZSBsZXZlbC4KLSAqCi0gKiBTZWUgX19l
eHByX2VsaW1pbmF0ZV9lcSgpIGFzIHdlbGwuCi0gKi8KLXZvaWQgZXhwcl9lbGltaW5hdGVfZXEo
c3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQotewotCWlmICghZTEgfHwgIWUy
KQotCQlyZXR1cm47Ci0Jc3dpdGNoIChlMS0+dHlwZSkgewotCWNhc2UgRV9PUjoKLQljYXNlIEVf
QU5EOgotCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUxLT50eXBlLCBlcDEsIGVwMik7Ci0JZGVmYXVs
dDoKLQkJOwotCX0KLQlpZiAoZTEtPnR5cGUgIT0gZTItPnR5cGUpIHN3aXRjaCAoZTItPnR5cGUp
IHsKLQljYXNlIEVfT1I6Ci0JY2FzZSBFX0FORDoKLQkJX19leHByX2VsaW1pbmF0ZV9lcShlMi0+
dHlwZSwgZXAxLCBlcDIpOwotCWRlZmF1bHQ6Ci0JCTsKLQl9Ci0JZTEgPSBleHByX2VsaW1pbmF0
ZV95bihlMSk7Ci0JZTIgPSBleHByX2VsaW1pbmF0ZV95bihlMik7Ci19Ci0KLSN1bmRlZiBlMQot
I3VuZGVmIGUyCi0KLS8qCi0gKiBSZXR1cm5zIHRydWUgaWYgJ2UxJyBhbmQgJ2UyJyBhcmUgZXF1
YWwsIGFmdGVyIG1pbm9yIHNpbXBsaWZpY2F0aW9uLiBUd28KLSAqICYmL3x8IGV4cHJlc3Npb25z
IGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmIGV2ZXJ5IG9wZXJhbmQgaW4gb25lIGV4cHJlc3Npb24K
LSAqIGVxdWFscyBzb21lIG9wZXJhbmQgaW4gdGhlIG90aGVyIChvcGVyYW5kcyBkbyBub3QgbmVl
ZCB0byBhcHBlYXIgaW4gdGhlIHNhbWUKLSAqIG9yZGVyKSwgcmVjdXJzaXZlbHkuCi0gKi8KLXN0
YXRpYyBpbnQgZXhwcl9lcShzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKLXsKLQlp
bnQgcmVzLCBvbGRfY291bnQ7Ci0KLQlpZiAoZTEtPnR5cGUgIT0gZTItPnR5cGUpCi0JCXJldHVy
biAwOwotCXN3aXRjaCAoZTEtPnR5cGUpIHsKLQljYXNlIEVfRVFVQUw6Ci0JY2FzZSBFX0dFUToK
LQljYXNlIEVfR1RIOgotCWNhc2UgRV9MRVE6Ci0JY2FzZSBFX0xUSDoKLQljYXNlIEVfVU5FUVVB
TDoKLQkJcmV0dXJuIGUxLT5sZWZ0LnN5bSA9PSBlMi0+bGVmdC5zeW0gJiYgZTEtPnJpZ2h0LnN5
bSA9PSBlMi0+cmlnaHQuc3ltOwotCWNhc2UgRV9TWU1CT0w6Ci0JCXJldHVybiBlMS0+bGVmdC5z
eW0gPT0gZTItPmxlZnQuc3ltOwotCWNhc2UgRV9OT1Q6Ci0JCXJldHVybiBleHByX2VxKGUxLT5s
ZWZ0LmV4cHIsIGUyLT5sZWZ0LmV4cHIpOwotCWNhc2UgRV9BTkQ6Ci0JY2FzZSBFX09SOgotCQll
MSA9IGV4cHJfY29weShlMSk7Ci0JCWUyID0gZXhwcl9jb3B5KGUyKTsKLQkJb2xkX2NvdW50ID0g
dHJhbnNfY291bnQ7Ci0JCWV4cHJfZWxpbWluYXRlX2VxKCZlMSwgJmUyKTsKLQkJcmVzID0gKGUx
LT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MICYmCi0JCSAgICAgICBl
MS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltKTsKLQkJZXhwcl9mcmVlKGUxKTsKLQkJZXhwcl9m
cmVlKGUyKTsKLQkJdHJhbnNfY291bnQgPSBvbGRfY291bnQ7Ci0JCXJldHVybiByZXM7Ci0JY2Fz
ZSBFX0xJU1Q6Ci0JY2FzZSBFX1JBTkdFOgotCWNhc2UgRV9OT05FOgotCQkvKiBwYW5pYyAqLzsK
LQl9Ci0KLQlpZiAoREVCVUdfRVhQUikgewotCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsKLQkJ
cHJpbnRmKCIgPSAiKTsKLQkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7Ci0JCXByaW50ZigiID9c
biIpOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogUmVjdXJzaXZlbHkgcGVyZm9ybXMg
dGhlIGZvbGxvd2luZyBzaW1wbGlmaWNhdGlvbnMgaW4tcGxhY2UgKGFzIHdlbGwgYXMgdGhlCi0g
KiBjb3JyZXNwb25kaW5nIHNpbXBsaWZpY2F0aW9ucyB3aXRoIHN3YXBwZWQgb3BlcmFuZHMpOgot
ICoKLSAqCWV4cHIgJiYgbiAgLT4gIG4KLSAqCWV4cHIgJiYgeSAgLT4gIGV4cHIKLSAqCWV4cHIg
fHwgbiAgLT4gIGV4cHIKLSAqCWV4cHIgfHwgeSAgLT4gIHkKLSAqCi0gKiBSZXR1cm5zIHRoZSBv
cHRpbWl6ZWQgZXhwcmVzc2lvbi4KLSAqLwotc3RhdGljIHN0cnVjdCBleHByICpleHByX2VsaW1p
bmF0ZV95bihzdHJ1Y3QgZXhwciAqZSkKLXsKLQlzdHJ1Y3QgZXhwciAqdG1wOwotCi0JaWYgKGUp
IHN3aXRjaCAoZS0+dHlwZSkgewotCWNhc2UgRV9BTkQ6Ci0JCWUtPmxlZnQuZXhwciA9IGV4cHJf
ZWxpbWluYXRlX3luKGUtPmxlZnQuZXhwcik7Ci0JCWUtPnJpZ2h0LmV4cHIgPSBleHByX2VsaW1p
bmF0ZV95bihlLT5yaWdodC5leHByKTsKLQkJaWYgKGUtPmxlZnQuZXhwci0+dHlwZSA9PSBFX1NZ
TUJPTCkgewotCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgewot
CQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOwotCQkJCWV4cHJfZnJlZShlLT5yaWdodC5leHBy
KTsKLQkJCQllLT50eXBlID0gRV9TWU1CT0w7Ci0JCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX25v
OwotCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOwotCQkJCXJldHVybiBlOwotCQkJfSBlbHNlIGlm
IChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7Ci0JCQkJZnJlZShlLT5s
ZWZ0LmV4cHIpOwotCQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7Ci0JCQkJKmUgPSAqKGUtPnJpZ2h0
LmV4cHIpOwotCQkJCWZyZWUodG1wKTsKLQkJCQlyZXR1cm4gZTsKLQkJCX0KLQkJfQotCQlpZiAo
ZS0+cmlnaHQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCkgewotCQkJaWYgKGUtPnJpZ2h0LmV4cHIt
PmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKLQkJCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsK
LQkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7Ci0JCQkJZS0+dHlwZSA9IEVfU1lNQk9MOwot
CQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsKLQkJCQllLT5yaWdodC5leHByID0gTlVMTDsK
LQkJCQlyZXR1cm4gZTsKLQkJCX0gZWxzZSBpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0g
JnN5bWJvbF95ZXMpIHsKLQkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOwotCQkJCXRtcCA9IGUtPmxl
ZnQuZXhwcjsKLQkJCQkqZSA9ICooZS0+bGVmdC5leHByKTsKLQkJCQlmcmVlKHRtcCk7Ci0JCQkJ
cmV0dXJuIGU7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBFX09SOgotCQllLT5sZWZ0LmV4
cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5sZWZ0LmV4cHIpOwotCQllLT5yaWdodC5leHByID0g
ZXhwcl9lbGltaW5hdGVfeW4oZS0+cmlnaHQuZXhwcik7Ci0JCWlmIChlLT5sZWZ0LmV4cHItPnR5
cGUgPT0gRV9TWU1CT0wpIHsKLQkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1i
b2xfbm8pIHsKLQkJCQlmcmVlKGUtPmxlZnQuZXhwcik7Ci0JCQkJdG1wID0gZS0+cmlnaHQuZXhw
cjsKLQkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7Ci0JCQkJZnJlZSh0bXApOwotCQkJCXJldHVy
biBlOwotCQkJfSBlbHNlIGlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVz
KSB7Ci0JCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7Ci0JCQkJZXhwcl9mcmVlKGUtPnJpZ2h0
LmV4cHIpOwotCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1i
b2xfeWVzOwotCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOwotCQkJCXJldHVybiBlOwotCQkJfQot
CQl9Ci0JCWlmIChlLT5yaWdodC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7Ci0JCQlpZiAoZS0+
cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgewotCQkJCWZyZWUoZS0+cmlnaHQu
ZXhwcik7Ci0JCQkJdG1wID0gZS0+bGVmdC5leHByOwotCQkJCSplID0gKihlLT5sZWZ0LmV4cHIp
OwotCQkJCWZyZWUodG1wKTsKLQkJCQlyZXR1cm4gZTsKLQkJCX0gZWxzZSBpZiAoZS0+cmlnaHQu
ZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKLQkJCQlleHByX2ZyZWUoZS0+bGVmdC5l
eHByKTsKLQkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7Ci0JCQkJZS0+dHlwZSA9IEVfU1lN
Qk9MOwotCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7Ci0JCQkJZS0+cmlnaHQuZXhwciA9
IE5VTEw7Ci0JCQkJcmV0dXJuIGU7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ
OwotCX0KLQlyZXR1cm4gZTsKLX0KLQotLyoKLSAqIGJvb2wgRk9PIT1uID0+IEZPTwotICovCi1z
dHJ1Y3QgZXhwciAqZXhwcl90cmFuc19ib29sKHN0cnVjdCBleHByICplKQotewotCWlmICghZSkK
LQkJcmV0dXJuIE5VTEw7Ci0Jc3dpdGNoIChlLT50eXBlKSB7Ci0JY2FzZSBFX0FORDoKLQljYXNl
IEVfT1I6Ci0JY2FzZSBFX05PVDoKLQkJZS0+bGVmdC5leHByID0gZXhwcl90cmFuc19ib29sKGUt
PmxlZnQuZXhwcik7Ci0JCWUtPnJpZ2h0LmV4cHIgPSBleHByX3RyYW5zX2Jvb2woZS0+cmlnaHQu
ZXhwcik7Ci0JCWJyZWFrOwotCWNhc2UgRV9VTkVRVUFMOgotCQkvLyBGT08hPW4gLT4gRk9PCi0J
CWlmIChlLT5sZWZ0LnN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7Ci0JCQlpZiAoZS0+cmlnaHQu
c3ltID09ICZzeW1ib2xfbm8pIHsKLQkJCQllLT50eXBlID0gRV9TWU1CT0w7Ci0JCQkJZS0+cmln
aHQuc3ltID0gTlVMTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQk7Ci0JfQot
CXJldHVybiBlOwotfQotCi0vKgotICogZTEgfHwgZTIgLT4gPwotICovCi1zdGF0aWMgc3RydWN0
IGV4cHIgKmV4cHJfam9pbl9vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKLXsK
LQlzdHJ1Y3QgZXhwciAqdG1wOwotCXN0cnVjdCBzeW1ib2wgKnN5bTEsICpzeW0yOwotCi0JaWYg
KGV4cHJfZXEoZTEsIGUyKSkKLQkJcmV0dXJuIGV4cHJfY29weShlMSk7Ci0JaWYgKGUxLT50eXBl
ICE9IEVfRVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9VTkVRVUFMICYmIGUxLT50eXBlICE9IEVfU1lN
Qk9MICYmIGUxLT50eXBlICE9IEVfTk9UKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoZTItPnR5cGUg
IT0gRV9FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTItPnR5cGUgIT0gRV9TWU1C
T0wgJiYgZTItPnR5cGUgIT0gRV9OT1QpCi0JCXJldHVybiBOVUxMOwotCWlmIChlMS0+dHlwZSA9
PSBFX05PVCkgewotCQl0bXAgPSBlMS0+bGVmdC5leHByOwotCQlpZiAodG1wLT50eXBlICE9IEVf
RVFVQUwgJiYgdG1wLT50eXBlICE9IEVfVU5FUVVBTCAmJiB0bXAtPnR5cGUgIT0gRV9TWU1CT0wp
Ci0JCQlyZXR1cm4gTlVMTDsKLQkJc3ltMSA9IHRtcC0+bGVmdC5zeW07Ci0JfSBlbHNlCi0JCXN5
bTEgPSBlMS0+bGVmdC5zeW07Ci0JaWYgKGUyLT50eXBlID09IEVfTk9UKSB7Ci0JCWlmIChlMi0+
bGVmdC5leHByLT50eXBlICE9IEVfU1lNQk9MKQotCQkJcmV0dXJuIE5VTEw7Ci0JCXN5bTIgPSBl
Mi0+bGVmdC5leHByLT5sZWZ0LnN5bTsKLQl9IGVsc2UKLQkJc3ltMiA9IGUyLT5sZWZ0LnN5bTsK
LQlpZiAoc3ltMSAhPSBzeW0yKQotCQlyZXR1cm4gTlVMTDsKLQlpZiAoc3ltMS0+dHlwZSAhPSBT
X0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNUQVRFKQotCQlyZXR1cm4gTlVMTDsKLQlp
ZiAoc3ltMS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7Ci0JCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFM
ICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYKLQkJICAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX3llcyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAotCQkgICAgIChlMS0+
cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMp
KSkgewotCQkJLy8gKGE9J3knKSB8fCAoYT0nbScpIC0+IChhIT0nbicpCi0JCQlyZXR1cm4gZXhw
cl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF9ubyk7Ci0JCX0KLQkJaWYgKGUx
LT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJgotCQkgICAgKChlMS0+
cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykg
fHwKLQkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF95ZXMpKSkgewotCQkJLy8gKGE9J3knKSB8fCAoYT0nbicpIC0+IChhIT0nbScp
Ci0JCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF9tb2Qp
OwotCQl9Ci0JCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwg
JiYKLQkJICAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3lt
ID09ICZzeW1ib2xfbm8pIHx8Ci0JCSAgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAm
JiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSkpIHsKLQkJCS8vIChhPSdtJykgfHwgKGE9
J24nKSAtPiAoYSE9J3knKQotCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsIHN5
bTEsICZzeW1ib2xfeWVzKTsKLQkJfQotCX0KLQlpZiAoc3ltMS0+dHlwZSA9PSBTX0JPT0xFQU4g
JiYgc3ltMSA9PSBzeW0yKSB7Ci0JCWlmICgoZTEtPnR5cGUgPT0gRV9OT1QgJiYgZTEtPmxlZnQu
ZXhwci0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJPTCkgfHwKLQkJICAg
IChlMi0+dHlwZSA9PSBFX05PVCAmJiBlMi0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MICYm
IGUxLT50eXBlID09IEVfU1lNQk9MKSkKLQkJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbCgmc3lt
Ym9sX3llcyk7Ci0JfQotCi0JaWYgKERFQlVHX0VYUFIpIHsKLQkJcHJpbnRmKCJvcHRpbWl6ZSAo
Iik7Ci0JCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOwotCQlwcmludGYoIikgfHwgKCIpOwotCQll
eHByX2ZwcmludChlMiwgc3Rkb3V0KTsKLQkJcHJpbnRmKCIpP1xuIik7Ci0JfQotCXJldHVybiBO
VUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfam9pbl9hbmQoc3RydWN0IGV4cHIg
KmUxLCBzdHJ1Y3QgZXhwciAqZTIpCi17Ci0Jc3RydWN0IGV4cHIgKnRtcDsKLQlzdHJ1Y3Qgc3lt
Ym9sICpzeW0xLCAqc3ltMjsKLQotCWlmIChleHByX2VxKGUxLCBlMikpCi0JCXJldHVybiBleHBy
X2NvcHkoZTEpOwotCWlmIChlMS0+dHlwZSAhPSBFX0VRVUFMICYmIGUxLT50eXBlICE9IEVfVU5F
UVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMS0+dHlwZSAhPSBFX05PVCkKLQkJcmV0
dXJuIE5VTEw7Ci0JaWYgKGUyLT50eXBlICE9IEVfRVFVQUwgJiYgZTItPnR5cGUgIT0gRV9VTkVR
VUFMICYmIGUyLT50eXBlICE9IEVfU1lNQk9MICYmIGUyLT50eXBlICE9IEVfTk9UKQotCQlyZXR1
cm4gTlVMTDsKLQlpZiAoZTEtPnR5cGUgPT0gRV9OT1QpIHsKLQkJdG1wID0gZTEtPmxlZnQuZXhw
cjsKLQkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1VORVFVQUwg
JiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQotCQkJcmV0dXJuIE5VTEw7Ci0JCXN5bTEgPSB0bXAt
PmxlZnQuc3ltOwotCX0gZWxzZQotCQlzeW0xID0gZTEtPmxlZnQuc3ltOwotCWlmIChlMi0+dHlw
ZSA9PSBFX05PVCkgewotCQlpZiAoZTItPmxlZnQuZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKLQkJ
CXJldHVybiBOVUxMOwotCQlzeW0yID0gZTItPmxlZnQuZXhwci0+bGVmdC5zeW07Ci0JfSBlbHNl
Ci0JCXN5bTIgPSBlMi0+bGVmdC5zeW07Ci0JaWYgKHN5bTEgIT0gc3ltMikKLQkJcmV0dXJuIE5V
TEw7Ci0JaWYgKHN5bTEtPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bTEtPnR5cGUgIT0gU19UUklT
VEFURSkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUy
LT50eXBlID09IEVfRVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgfHwKLQkg
ICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTEtPnJp
Z2h0LnN5bSA9PSAmc3ltYm9sX3llcykpCi0JCS8vIChhKSAmJiAoYT0neScpIC0+IChhPSd5JykK
LQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7Ci0K
LQlpZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJiBl
Mi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8Ci0JICAgIChlMi0+dHlwZSA9PSBFX1NZTUJP
TCAmJiBlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25v
KSkKLQkJLy8gKGEpICYmIChhIT0nbicpIC0+IChhKQotCQlyZXR1cm4gZXhwcl9hbGxvY19zeW1i
b2woc3ltMSk7Ci0KLQlpZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVf
VU5FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAotCSAgICAoZTItPnR5
cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9tb2QpKQotCQkvLyAoYSkgJiYgKGEhPSdtJykgLT4gKGE9J3knKQotCQlyZXR1
cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsKLQotCWlmIChz
eW0xLT50eXBlID09IFNfVFJJU1RBVEUpIHsKLQkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYg
ZTItPnR5cGUgPT0gRV9VTkVRVUFMKSB7Ci0JCQkvLyAoYT0nYicpICYmIChhIT0nYycpIC0+ICdi
Jz0nYycgPyAnbicgOiBhPSdiJwotCQkJc3ltMiA9IGUxLT5yaWdodC5zeW07Ci0JCQlpZiAoKGUy
LT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSAmJiAoc3ltMi0+ZmxhZ3MgJiBTWU1C
T0xfQ09OU1QpKQotCQkJCXJldHVybiBzeW0yICE9IGUyLT5yaWdodC5zeW0gPyBleHByX2FsbG9j
X2NvbXAoRV9FUVVBTCwgc3ltMSwgc3ltMikKLQkJCQkJCQkgICAgIDogZXhwcl9hbGxvY19zeW1i
b2woJnN5bWJvbF9ubyk7Ci0JCX0KLQkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+
dHlwZSA9PSBFX0VRVUFMKSB7Ci0JCQkvLyAoYT0nYicpICYmIChhIT0nYycpIC0+ICdiJz0nYycg
PyAnbicgOiBhPSdiJwotCQkJc3ltMiA9IGUyLT5yaWdodC5zeW07Ci0JCQlpZiAoKGUxLT5yaWdo
dC5zeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSAmJiAoc3ltMi0+ZmxhZ3MgJiBTWU1CT0xfQ09O
U1QpKQotCQkJCXJldHVybiBzeW0yICE9IGUxLT5yaWdodC5zeW0gPyBleHByX2FsbG9jX2NvbXAo
RV9FUVVBTCwgc3ltMSwgc3ltMikKLQkJCQkJCQkgICAgIDogZXhwcl9hbGxvY19zeW1ib2woJnN5
bWJvbF9ubyk7Ci0JCX0KLQkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSA9
PSBFX1VORVFVQUwgJiYKLQkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyAmJiBl
Mi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8Ci0JCQkgICAgKGUxLT5yaWdodC5zeW0gPT0g
JnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpCi0JCQkvLyAoYSE9
J3knKSAmJiAoYSE9J24nKSAtPiAoYT0nbScpCi0JCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVf
RVFVQUwsIHN5bTEsICZzeW1ib2xfbW9kKTsKLQotCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFM
ICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJgotCQkJICAgKChlMS0+cmlnaHQuc3ltID09ICZz
eW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8Ci0JCQkgICAgKGUx
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3ll
cykpKQotCQkJLy8gKGEhPSd5JykgJiYgKGEhPSdtJykgLT4gKGE9J24nKQotCQkJcmV0dXJuIGV4
cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX25vKTsKLQotCQlpZiAoZTEtPnR5
cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJgotCQkJICAgKChlMS0+
cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykg
fHwKLQkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9tb2QpKSkKLQkJCS8vIChhIT0nbScpICYmIChhIT0nbicpIC0+IChhPSdtJykK
LQkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOwot
Ci0JCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJiBl
Mi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAotCQkgICAgKGUyLT50eXBlID09IEVfU1lN
Qk9MICYmIGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21v
ZCkgfHwKLQkJICAgIChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFV
QUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgfHwKLQkJICAgIChlMi0+dHlwZSA9
PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAm
c3ltYm9sX3llcykpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpZiAoREVCVUdfRVhQUikgewot
CQlwcmludGYoIm9wdGltaXplICgiKTsKLQkJZXhwcl9mcHJpbnQoZTEsIHN0ZG91dCk7Ci0JCXBy
aW50ZigiKSAmJiAoIik7Ci0JCWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOwotCQlwcmludGYoIik/
XG4iKTsKLQl9Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBleHByX2VsaW1pbmF0ZV9kdXBz
KCkgaGVscGVyLgotICoKLSAqIFdhbGtzIHRoZSB0d28gZXhwcmVzc2lvbiB0cmVlcyBnaXZlbiBp
biAnZXAxJyBhbmQgJ2VwMicuIEFueSBub2RlIHRoYXQgZG9lcwotICogbm90IGhhdmUgdHlwZSAn
dHlwZScgKEVfT1IvRV9BTkQpIGlzIGNvbnNpZGVyZWQgYSBsZWFmLCBhbmQgaXMgY29tcGFyZWQK
LSAqIGFnYWluc3QgYWxsIG90aGVyIGxlYXZlcyB0byBsb29rIGZvciBzaW1wbGlmaWNhdGlvbnMu
Ci0gKi8KLXN0YXRpYyB2b2lkIGV4cHJfZWxpbWluYXRlX2R1cHMxKGVudW0gZXhwcl90eXBlIHR5
cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKLXsKLSNkZWZpbmUgZTEg
KCplcDEpCi0jZGVmaW5lIGUyICgqZXAyKQotCXN0cnVjdCBleHByICp0bXA7Ci0KLQkvKiBSZWN1
cnNlIGRvd24gdG8gbGVhdmVzICovCi0KLQlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgewotCQlleHBy
X2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUyKTsKLQkJZXhwcl9lbGlt
aW5hdGVfZHVwczEodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOwotCQlyZXR1cm47Ci0JfQot
CWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7Ci0JCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZl
MSwgJmUyLT5sZWZ0LmV4cHIpOwotCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEsICZl
Mi0+cmlnaHQuZXhwcik7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBlMSBhbmQgZTIgYXJlIGxlYXZl
cy4gQ29tcGFyZSBhbmQgcHJvY2VzcyB0aGVtLiAqLwotCi0JaWYgKGUxID09IGUyKQotCQlyZXR1
cm47Ci0KLQlzd2l0Y2ggKGUxLT50eXBlKSB7Ci0JY2FzZSBFX09SOiBjYXNlIEVfQU5EOgotCQll
eHByX2VsaW1pbmF0ZV9kdXBzMShlMS0+dHlwZSwgJmUxLCAmZTEpOwotCWRlZmF1bHQ6Ci0JCTsK
LQl9Ci0KLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIEVfT1I6Ci0JCXRtcCA9IGV4cHJfam9pbl9v
cihlMSwgZTIpOwotCQlpZiAodG1wKSB7Ci0JCQlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUoZTIp
OwotCQkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKLQkJCWUyID0gdG1wOwot
CQkJdHJhbnNfY291bnQrKzsKLQkJfQotCQlicmVhazsKLQljYXNlIEVfQU5EOgotCQl0bXAgPSBl
eHByX2pvaW5fYW5kKGUxLCBlMik7Ci0JCWlmICh0bXApIHsKLQkJCWV4cHJfZnJlZShlMSk7IGV4
cHJfZnJlZShlMik7Ci0JCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsKLQkJ
CWUyID0gdG1wOwotCQkJdHJhbnNfY291bnQrKzsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0Ogot
CQk7Ci0JfQotI3VuZGVmIGUxCi0jdW5kZWYgZTIKLX0KLQotLyoKLSAqIFJld3JpdGVzICdlJyBp
bi1wbGFjZSB0byByZW1vdmUgKCJqb2luIikgZHVwbGljYXRlIGFuZCBvdGhlciByZWR1bmRhbnQK
LSAqIG9wZXJhbmRzLgotICoKLSAqIEV4YW1wbGUgc2ltcGxpZmljYXRpb25zOgotICoKLSAqCUEg
fHwgQiB8fCBBICAgIC0+ICBBIHx8IEIKLSAqCUEgJiYgQiAmJiBBPXkgIC0+ICBBPXkgJiYgQgot
ICoKLSAqIFJldHVybnMgdGhlIGRlZHVwbGljYXRlZCBleHByZXNzaW9uLgotICovCi1zdHJ1Y3Qg
ZXhwciAqZXhwcl9lbGltaW5hdGVfZHVwcyhzdHJ1Y3QgZXhwciAqZSkKLXsKLQlpbnQgb2xkY291
bnQ7Ci0JaWYgKCFlKQotCQlyZXR1cm4gZTsKLQotCW9sZGNvdW50ID0gdHJhbnNfY291bnQ7Ci0J
d2hpbGUgKDEpIHsKLQkJdHJhbnNfY291bnQgPSAwOwotCQlzd2l0Y2ggKGUtPnR5cGUpIHsKLQkJ
Y2FzZSBFX09SOiBjYXNlIEVfQU5EOgotCQkJZXhwcl9lbGltaW5hdGVfZHVwczEoZS0+dHlwZSwg
JmUsICZlKTsKLQkJZGVmYXVsdDoKLQkJCTsKLQkJfQotCQlpZiAoIXRyYW5zX2NvdW50KQotCQkJ
LyogTm8gc2ltcGxpZmljYXRpb25zIGRvbmUgaW4gdGhpcyBwYXNzLiBXZSdyZSBkb25lICovCi0J
CQlicmVhazsKLQkJZSA9IGV4cHJfZWxpbWluYXRlX3luKGUpOwotCX0KLQl0cmFuc19jb3VudCA9
IG9sZGNvdW50OwotCXJldHVybiBlOwotfQotCi0vKgotICogUGVyZm9ybXMgdmFyaW91cyBzaW1w
bGlmaWNhdGlvbnMgaW52b2x2aW5nIGxvZ2ljYWwgb3BlcmF0b3JzIGFuZAotICogY29tcGFyaXNv
bnMuCi0gKgotICogQWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGV4cHJlc3Npb24uCi0gKi8K
LXN0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAqZSkKLXsKLQlzdHJ1Y3Qg
ZXhwciAqdG1wOwotCi0JaWYgKCFlKQotCQlyZXR1cm4gTlVMTDsKLQlzd2l0Y2ggKGUtPnR5cGUp
IHsKLQljYXNlIEVfRVFVQUw6Ci0JY2FzZSBFX0dFUToKLQljYXNlIEVfR1RIOgotCWNhc2UgRV9M
RVE6Ci0JY2FzZSBFX0xUSDoKLQljYXNlIEVfVU5FUVVBTDoKLQljYXNlIEVfU1lNQk9MOgotCWNh
c2UgRV9MSVNUOgotCQlicmVhazsKLQlkZWZhdWx0OgotCQllLT5sZWZ0LmV4cHIgPSBleHByX3Ry
YW5zZm9ybShlLT5sZWZ0LmV4cHIpOwotCQllLT5yaWdodC5leHByID0gZXhwcl90cmFuc2Zvcm0o
ZS0+cmlnaHQuZXhwcik7Ci0JfQotCi0Jc3dpdGNoIChlLT50eXBlKSB7Ci0JY2FzZSBFX0VRVUFM
OgotCQlpZiAoZS0+bGVmdC5zeW0tPnR5cGUgIT0gU19CT09MRUFOKQotCQkJYnJlYWs7Ci0JCWlm
IChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgewotCQkJZS0+dHlwZSA9IEVfTk9UOwotCQkJ
ZS0+bGVmdC5leHByID0gZXhwcl9hbGxvY19zeW1ib2woZS0+bGVmdC5zeW0pOwotCQkJZS0+cmln
aHQuc3ltID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5
bWJvbF9tb2QpIHsKLQkJCXByaW50ZigiYm9vbGVhbiBzeW1ib2wgJXMgdGVzdGVkIGZvciAnbSc/
IHRlc3QgZm9yY2VkIHRvICduJ1xuIiwgZS0+bGVmdC5zeW0tPm5hbWUpOwotCQkJZS0+dHlwZSA9
IEVfU1lNQk9MOwotCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX25vOwotCQkJZS0+cmlnaHQuc3lt
ID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95
ZXMpIHsKLQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKLQkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7Ci0J
CQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIEVfVU5FUVVBTDoKLQkJaWYgKGUtPmxlZnQu
c3ltLT50eXBlICE9IFNfQk9PTEVBTikKLQkJCWJyZWFrOwotCQlpZiAoZS0+cmlnaHQuc3ltID09
ICZzeW1ib2xfbm8pIHsKLQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKLQkJCWUtPnJpZ2h0LnN5bSA9
IE5VTEw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9k
KSB7Ci0JCQlwcmludGYoImJvb2xlYW4gc3ltYm9sICVzIHRlc3RlZCBmb3IgJ20nPyB0ZXN0IGZv
cmNlZCB0byAneSdcbiIsIGUtPmxlZnQuc3ltLT5uYW1lKTsKLQkJCWUtPnR5cGUgPSBFX1NZTUJP
TDsKLQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7Ci0JCQllLT5yaWdodC5zeW0gPSBOVUxM
OwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgewot
CQkJZS0+dHlwZSA9IEVfTk9UOwotCQkJZS0+bGVmdC5leHByID0gZXhwcl9hbGxvY19zeW1ib2wo
ZS0+bGVmdC5zeW0pOwotCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKLQkJCWJyZWFrOwotCQl9Ci0J
CWJyZWFrOwotCWNhc2UgRV9OT1Q6Ci0JCXN3aXRjaCAoZS0+bGVmdC5leHByLT50eXBlKSB7Ci0J
CWNhc2UgRV9OT1Q6Ci0JCQkvLyAhIWEgLT4gYQotCQkJdG1wID0gZS0+bGVmdC5leHByLT5sZWZ0
LmV4cHI7Ci0JCQlmcmVlKGUtPmxlZnQuZXhwcik7Ci0JCQlmcmVlKGUpOwotCQkJZSA9IHRtcDsK
LQkJCWUgPSBleHByX3RyYW5zZm9ybShlKTsKLQkJCWJyZWFrOwotCQljYXNlIEVfRVFVQUw6Ci0J
CWNhc2UgRV9VTkVRVUFMOgotCQkJLy8gIWE9J3gnIC0+IGEhPSd4JwotCQkJdG1wID0gZS0+bGVm
dC5leHByOwotCQkJZnJlZShlKTsKLQkJCWUgPSB0bXA7Ci0JCQllLT50eXBlID0gZS0+dHlwZSA9
PSBFX0VRVUFMID8gRV9VTkVRVUFMIDogRV9FUVVBTDsKLQkJCWJyZWFrOwotCQljYXNlIEVfTEVR
OgotCQljYXNlIEVfR0VROgotCQkJLy8gIWE8PSd4JyAtPiBhPid4JwotCQkJdG1wID0gZS0+bGVm
dC5leHByOwotCQkJZnJlZShlKTsKLQkJCWUgPSB0bXA7Ci0JCQllLT50eXBlID0gZS0+dHlwZSA9
PSBFX0xFUSA/IEVfR1RIIDogRV9MVEg7Ci0JCQlicmVhazsKLQkJY2FzZSBFX0xUSDoKLQkJY2Fz
ZSBFX0dUSDoKLQkJCS8vICFhPCd4JyAtPiBhPj0neCcKLQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsK
LQkJCWZyZWUoZSk7Ci0JCQllID0gdG1wOwotCQkJZS0+dHlwZSA9IGUtPnR5cGUgPT0gRV9MVEgg
PyBFX0dFUSA6IEVfTEVROwotCQkJYnJlYWs7Ci0JCWNhc2UgRV9PUjoKLQkJCS8vICEoYSB8fCBi
KSAtPiAhYSAmJiAhYgotCQkJdG1wID0gZS0+bGVmdC5leHByOwotCQkJZS0+dHlwZSA9IEVfQU5E
OwotCQkJZS0+cmlnaHQuZXhwciA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCB0bXAtPnJpZ2h0LmV4
cHIpOwotCQkJdG1wLT50eXBlID0gRV9OT1Q7Ci0JCQl0bXAtPnJpZ2h0LmV4cHIgPSBOVUxMOwot
CQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRV9BTkQ6Ci0JCQkv
LyAhKGEgJiYgYikgLT4gIWEgfHwgIWIKLQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKLQkJCWUtPnR5
cGUgPSBFX09SOwotCQkJZS0+cmlnaHQuZXhwciA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCB0bXAt
PnJpZ2h0LmV4cHIpOwotCQkJdG1wLT50eXBlID0gRV9OT1Q7Ci0JCQl0bXAtPnJpZ2h0LmV4cHIg
PSBOVUxMOwotCQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRV9T
WU1CT0w6Ci0JCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgewot
CQkJCS8vICEneScgLT4gJ24nCi0JCQkJdG1wID0gZS0+bGVmdC5leHByOwotCQkJCWZyZWUoZSk7
Ci0JCQkJZSA9IHRtcDsKLQkJCQllLT50eXBlID0gRV9TWU1CT0w7Ci0JCQkJZS0+bGVmdC5zeW0g
PSAmc3ltYm9sX25vOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVm
dC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsKLQkJCQkvLyAhJ20nIC0+ICdtJwotCQkJCXRtcCA9IGUt
PmxlZnQuZXhwcjsKLQkJCQlmcmVlKGUpOwotCQkJCWUgPSB0bXA7Ci0JCQkJZS0+dHlwZSA9IEVf
U1lNQk9MOwotCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9tb2Q7Ci0JCQkJYnJlYWs7Ci0JCQl9
Ci0JCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7Ci0JCQkJLy8g
ISduJyAtPiAneScKLQkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7Ci0JCQkJZnJlZShlKTsKLQkJCQll
ID0gdG1wOwotCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1i
b2xfeWVzOwotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQk7Ci0J
CX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJOwotCX0KLQlyZXR1cm4gZTsKLX0KLQotaW50IGV4
cHJfY29udGFpbnNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSkK
LXsKLQlpZiAoIWRlcCkKLQkJcmV0dXJuIDA7Ci0KLQlzd2l0Y2ggKGRlcC0+dHlwZSkgewotCWNh
c2UgRV9BTkQ6Ci0JY2FzZSBFX09SOgotCQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVw
LT5sZWZ0LmV4cHIsIHN5bSkgfHwKLQkJICAgICAgIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+
cmlnaHQuZXhwciwgc3ltKTsKLQljYXNlIEVfU1lNQk9MOgotCQlyZXR1cm4gZGVwLT5sZWZ0LnN5
bSA9PSBzeW07Ci0JY2FzZSBFX0VRVUFMOgotCWNhc2UgRV9HRVE6Ci0JY2FzZSBFX0dUSDoKLQlj
YXNlIEVfTEVROgotCWNhc2UgRV9MVEg6Ci0JY2FzZSBFX1VORVFVQUw6Ci0JCXJldHVybiBkZXAt
PmxlZnQuc3ltID09IHN5bSB8fAotCQkgICAgICAgZGVwLT5yaWdodC5zeW0gPT0gc3ltOwotCWNh
c2UgRV9OT1Q6Ci0JCXJldHVybiBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAtPmxlZnQuZXhwciwg
c3ltKTsKLQlkZWZhdWx0OgotCQk7Ci0JfQotCXJldHVybiAwOwotfQotCi1ib29sIGV4cHJfZGVw
ZW5kc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKQotewotCWlm
ICghZGVwKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlzd2l0Y2ggKGRlcC0+dHlwZSkgewotCWNhc2Ug
RV9BTkQ6Ci0JCXJldHVybiBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+bGVmdC5leHByLCBzeW0p
IHx8Ci0JCSAgICAgICBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+cmlnaHQuZXhwciwgc3ltKTsK
LQljYXNlIEVfU1lNQk9MOgotCQlyZXR1cm4gZGVwLT5sZWZ0LnN5bSA9PSBzeW07Ci0JY2FzZSBF
X0VRVUFMOgotCQlpZiAoZGVwLT5sZWZ0LnN5bSA9PSBzeW0pIHsKLQkJCWlmIChkZXAtPnJpZ2h0
LnN5bSA9PSAmc3ltYm9sX3llcyB8fCBkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkKLQkJ
CQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlicmVhazsKLQljYXNlIEVfVU5FUVVBTDoKLQkJaWYgKGRl
cC0+bGVmdC5zeW0gPT0gc3ltKSB7Ci0JCQlpZiAoZGVwLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9u
bykKLQkJCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQk7Ci0JfQot
IAlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qCi0gKiBJbnNlcnRzIGV4cGxpY2l0IGNvbXBhcmlzb25z
IG9mIHR5cGUgJ3R5cGUnIHRvIHN5bWJvbCAnc3ltJyBpbnRvIHRoZQotICogZXhwcmVzc2lvbiAn
ZScuCi0gKgotICogRXhhbXBsZXMgdHJhbnNmb3JtYXRpb25zIGZvciB0eXBlID09IEVfVU5FUVVB
TCwgc3ltID09ICZzeW1ib2xfbm86Ci0gKgotICoJQSAgICAgICAgICAgICAgLT4gIEEhPW4KLSAq
CSFBICAgICAgICAgICAgIC0+ICBBPW4KLSAqCUEgJiYgQiAgICAgICAgIC0+ICAhKEE9biB8fCBC
PW4pCi0gKglBIHx8IEIgICAgICAgICAtPiAgIShBPW4gJiYgQj1uKQotICoJQSAmJiAoQiB8fCBD
KSAgLT4gICEoQT1uIHx8IChCPW4gJiYgQz1uKSkKLSAqCi0gKiBBbGxvY2F0ZXMgYW5kIHJldHVy
bnMgYSBuZXcgZXhwcmVzc2lvbi4KLSAqLwotc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNfY29tcGFy
ZShzdHJ1Y3QgZXhwciAqZSwgZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3lt
KQotewotCXN0cnVjdCBleHByICplMSwgKmUyOwotCi0JaWYgKCFlKSB7Ci0JCWUgPSBleHByX2Fs
bG9jX3N5bWJvbChzeW0pOwotCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpCi0JCQllID0gZXhwcl9h
bGxvY19vbmUoRV9OT1QsIGUpOwotCQlyZXR1cm4gZTsKLQl9Ci0Jc3dpdGNoIChlLT50eXBlKSB7
Ci0JY2FzZSBFX0FORDoKLQkJZTEgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+bGVmdC5leHByLCBF
X0VRVUFMLCBzeW0pOwotCQllMiA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5yaWdodC5leHByLCBF
X0VRVUFMLCBzeW0pOwotCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQotCQkJZSA9IGV4cHJfYWxs
b2NfdHdvKEVfQU5ELCBlMSwgZTIpOwotCQlpZiAoc3ltID09ICZzeW1ib2xfbm8pCi0JCQllID0g
ZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKTsKLQkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQot
CQkJZSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBlKTsKLQkJcmV0dXJuIGU7Ci0JY2FzZSBFX09S
OgotCQllMSA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIEVfRVFVQUwsIHN5bSk7
Ci0JCWUyID0gZXhwcl90cmFuc19jb21wYXJlKGUtPnJpZ2h0LmV4cHIsIEVfRVFVQUwsIHN5bSk7
Ci0JCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpCi0JCQllID0gZXhwcl9hbGxvY190d28oRV9PUiwg
ZTEsIGUyKTsKLQkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQotCQkJZSA9IGV4cHJfYWxsb2NfdHdv
KEVfQU5ELCBlMSwgZTIpOwotCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpCi0JCQllID0gZXhwcl9h
bGxvY19vbmUoRV9OT1QsIGUpOwotCQlyZXR1cm4gZTsKLQljYXNlIEVfTk9UOgotCQlyZXR1cm4g
ZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgdHlwZSA9PSBFX0VRVUFMID8gRV9VTkVR
VUFMIDogRV9FUVVBTCwgc3ltKTsKLQljYXNlIEVfVU5FUVVBTDoKLQljYXNlIEVfTFRIOgotCWNh
c2UgRV9MRVE6Ci0JY2FzZSBFX0dUSDoKLQljYXNlIEVfR0VROgotCWNhc2UgRV9FUVVBTDoKLQkJ
aWYgKHR5cGUgPT0gRV9FUVVBTCkgewotCQkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKLQkJCQly
ZXR1cm4gZXhwcl9jb3B5KGUpOwotCQkJaWYgKHN5bSA9PSAmc3ltYm9sX21vZCkKLQkJCQlyZXR1
cm4gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7Ci0JCQlpZiAoc3ltID09ICZzeW1ib2xf
bm8pCi0JCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2NvcHkoZSkpOwotCQl9
IGVsc2UgewotCQkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKLQkJCQlyZXR1cm4gZXhwcl9hbGxv
Y19vbmUoRV9OT1QsIGV4cHJfY29weShlKSk7Ci0JCQlpZiAoc3ltID09ICZzeW1ib2xfbW9kKQot
CQkJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7Ci0JCQlpZiAoc3ltID09
ICZzeW1ib2xfbm8pCi0JCQkJcmV0dXJuIGV4cHJfY29weShlKTsKLQkJfQotCQlicmVhazsKLQlj
YXNlIEVfU1lNQk9MOgotCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKHR5cGUsIGUtPmxlZnQuc3lt
LCBzeW0pOwotCWNhc2UgRV9MSVNUOgotCWNhc2UgRV9SQU5HRToKLQljYXNlIEVfTk9ORToKLQkJ
LyogcGFuaWMgKi87Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1lbnVtIHN0cmluZ192YWx1ZV9r
aW5kIHsKLQlrX3N0cmluZywKLQlrX3NpZ25lZCwKLQlrX3Vuc2lnbmVkLAotfTsKLQotdW5pb24g
c3RyaW5nX3ZhbHVlIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgdTsKLQlzaWduZWQgbG9uZyBsb25n
IHM7Ci19OwotCi1zdGF0aWMgZW51bSBzdHJpbmdfdmFsdWVfa2luZCBleHByX3BhcnNlX3N0cmlu
Zyhjb25zdCBjaGFyICpzdHIsCi0JCQkJCQllbnVtIHN5bWJvbF90eXBlIHR5cGUsCi0JCQkJCQl1
bmlvbiBzdHJpbmdfdmFsdWUgKnZhbCkKLXsKLQljaGFyICp0YWlsOwotCWVudW0gc3RyaW5nX3Zh
bHVlX2tpbmQga2luZDsKLQotCWVycm5vID0gMDsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFNf
Qk9PTEVBTjoKLQljYXNlIFNfVFJJU1RBVEU6Ci0JCXZhbC0+cyA9ICFzdHJjbXAoc3RyLCAibiIp
ID8gMCA6Ci0JCQkgIXN0cmNtcChzdHIsICJtIikgPyAxIDoKLQkJCSAhc3RyY21wKHN0ciwgInki
KSA/IDIgOiAtMTsKLQkJcmV0dXJuIGtfc2lnbmVkOwotCWNhc2UgU19JTlQ6Ci0JCXZhbC0+cyA9
IHN0cnRvbGwoc3RyLCAmdGFpbCwgMTApOwotCQlraW5kID0ga19zaWduZWQ7Ci0JCWJyZWFrOwot
CWNhc2UgU19IRVg6Ci0JCXZhbC0+dSA9IHN0cnRvdWxsKHN0ciwgJnRhaWwsIDE2KTsKLQkJa2lu
ZCA9IGtfdW5zaWduZWQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXZhbC0+cyA9IHN0cnRvbGwo
c3RyLCAmdGFpbCwgMCk7Ci0JCWtpbmQgPSBrX3NpZ25lZDsKLQkJYnJlYWs7Ci0JfQotCXJldHVy
biAhZXJybm8gJiYgISp0YWlsICYmIHRhaWwgPiBzdHIgJiYgaXN4ZGlnaXQodGFpbFstMV0pCi0J
ICAgICAgID8ga2luZCA6IGtfc3RyaW5nOwotfQotCi10cmlzdGF0ZSBleHByX2NhbGNfdmFsdWUo
c3RydWN0IGV4cHIgKmUpCi17Ci0JdHJpc3RhdGUgdmFsMSwgdmFsMjsKLQljb25zdCBjaGFyICpz
dHIxLCAqc3RyMjsKLQllbnVtIHN0cmluZ192YWx1ZV9raW5kIGsxID0ga19zdHJpbmcsIGsyID0g
a19zdHJpbmc7Ci0JdW5pb24gc3RyaW5nX3ZhbHVlIGx2YWwgPSB7fSwgcnZhbCA9IHt9OwotCWlu
dCByZXM7Ci0KLQlpZiAoIWUpCi0JCXJldHVybiB5ZXM7Ci0KLQlzd2l0Y2ggKGUtPnR5cGUpIHsK
LQljYXNlIEVfU1lNQk9MOgotCQlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5bSk7Ci0JCXJldHVy
biBlLT5sZWZ0LnN5bS0+Y3Vyci50cmk7Ci0JY2FzZSBFX0FORDoKLQkJdmFsMSA9IGV4cHJfY2Fs
Y192YWx1ZShlLT5sZWZ0LmV4cHIpOwotCQl2YWwyID0gZXhwcl9jYWxjX3ZhbHVlKGUtPnJpZ2h0
LmV4cHIpOwotCQlyZXR1cm4gRVhQUl9BTkQodmFsMSwgdmFsMik7Ci0JY2FzZSBFX09SOgotCQl2
YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7Ci0JCXZhbDIgPSBleHByX2NhbGNf
dmFsdWUoZS0+cmlnaHQuZXhwcik7Ci0JCXJldHVybiBFWFBSX09SKHZhbDEsIHZhbDIpOwotCWNh
c2UgRV9OT1Q6Ci0JCXZhbDEgPSBleHByX2NhbGNfdmFsdWUoZS0+bGVmdC5leHByKTsKLQkJcmV0
dXJuIEVYUFJfTk9UKHZhbDEpOwotCWNhc2UgRV9FUVVBTDoKLQljYXNlIEVfR0VROgotCWNhc2Ug
RV9HVEg6Ci0JY2FzZSBFX0xFUToKLQljYXNlIEVfTFRIOgotCWNhc2UgRV9VTkVRVUFMOgotCQli
cmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYoImV4cHJfY2FsY192YWx1ZTogJWQ/XG4iLCBlLT50
eXBlKTsKLQkJcmV0dXJuIG5vOwotCX0KLQotCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsK
LQlzeW1fY2FsY192YWx1ZShlLT5yaWdodC5zeW0pOwotCXN0cjEgPSBzeW1fZ2V0X3N0cmluZ192
YWx1ZShlLT5sZWZ0LnN5bSk7Ci0Jc3RyMiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPnJpZ2h0
LnN5bSk7Ci0KLQlpZiAoZS0+bGVmdC5zeW0tPnR5cGUgIT0gU19TVFJJTkcgfHwgZS0+cmlnaHQu
c3ltLT50eXBlICE9IFNfU1RSSU5HKSB7Ci0JCWsxID0gZXhwcl9wYXJzZV9zdHJpbmcoc3RyMSwg
ZS0+bGVmdC5zeW0tPnR5cGUsICZsdmFsKTsKLQkJazIgPSBleHByX3BhcnNlX3N0cmluZyhzdHIy
LCBlLT5yaWdodC5zeW0tPnR5cGUsICZydmFsKTsKLQl9Ci0KLQlpZiAoazEgPT0ga19zdHJpbmcg
fHwgazIgPT0ga19zdHJpbmcpCi0JCXJlcyA9IHN0cmNtcChzdHIxLCBzdHIyKTsKLQllbHNlIGlm
IChrMSA9PSBrX3Vuc2lnbmVkIHx8IGsyID09IGtfdW5zaWduZWQpCi0JCXJlcyA9IChsdmFsLnUg
PiBydmFsLnUpIC0gKGx2YWwudSA8IHJ2YWwudSk7Ci0JZWxzZSAvKiBpZiAoazEgPT0ga19zaWdu
ZWQgJiYgazIgPT0ga19zaWduZWQpICovCi0JCXJlcyA9IChsdmFsLnMgPiBydmFsLnMpIC0gKGx2
YWwucyA8IHJ2YWwucyk7Ci0KLQlzd2l0Y2goZS0+dHlwZSkgewotCWNhc2UgRV9FUVVBTDoKLQkJ
cmV0dXJuIHJlcyA/IG5vIDogeWVzOwotCWNhc2UgRV9HRVE6Ci0JCXJldHVybiByZXMgPj0gMCA/
IHllcyA6IG5vOwotCWNhc2UgRV9HVEg6Ci0JCXJldHVybiByZXMgPiAwID8geWVzIDogbm87Ci0J
Y2FzZSBFX0xFUToKLQkJcmV0dXJuIHJlcyA8PSAwID8geWVzIDogbm87Ci0JY2FzZSBFX0xUSDoK
LQkJcmV0dXJuIHJlcyA8IDAgPyB5ZXMgOiBubzsKLQljYXNlIEVfVU5FUVVBTDoKLQkJcmV0dXJu
IHJlcyA/IHllcyA6IG5vOwotCWRlZmF1bHQ6Ci0JCXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiBy
ZWxhdGlvbiAlZD9cbiIsIGUtPnR5cGUpOwotCQlyZXR1cm4gbm87Ci0JfQotfQotCi1zdGF0aWMg
aW50IGV4cHJfY29tcGFyZV90eXBlKGVudW0gZXhwcl90eXBlIHQxLCBlbnVtIGV4cHJfdHlwZSB0
MikKLXsKLQlpZiAodDEgPT0gdDIpCi0JCXJldHVybiAwOwotCXN3aXRjaCAodDEpIHsKLQljYXNl
IEVfTEVROgotCWNhc2UgRV9MVEg6Ci0JY2FzZSBFX0dFUToKLQljYXNlIEVfR1RIOgotCQlpZiAo
dDIgPT0gRV9FUVVBTCB8fCB0MiA9PSBFX1VORVFVQUwpCi0JCQlyZXR1cm4gMTsKLQljYXNlIEVf
RVFVQUw6Ci0JY2FzZSBFX1VORVFVQUw6Ci0JCWlmICh0MiA9PSBFX05PVCkKLQkJCXJldHVybiAx
OwotCWNhc2UgRV9OT1Q6Ci0JCWlmICh0MiA9PSBFX0FORCkKLQkJCXJldHVybiAxOwotCWNhc2Ug
RV9BTkQ6Ci0JCWlmICh0MiA9PSBFX09SKQotCQkJcmV0dXJuIDE7Ci0JY2FzZSBFX09SOgotCQlp
ZiAodDIgPT0gRV9MSVNUKQotCQkJcmV0dXJuIDE7Ci0JY2FzZSBFX0xJU1Q6Ci0JCWlmICh0MiA9
PSAwKQotCQkJcmV0dXJuIDE7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC0xOwotCX0KLQlwcmludGYo
IlslZGd0JWQ/XSIsIHQxLCB0Mik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgZXhwcl9wcmludChz
dHJ1Y3QgZXhwciAqZSwKLQkJdm9pZCAoKmZuKSh2b2lkICosIHN0cnVjdCBzeW1ib2wgKiwgY29u
c3QgY2hhciAqKSwKLQkJdm9pZCAqZGF0YSwgaW50IHByZXZ0b2tlbikKLXsKLQlpZiAoIWUpIHsK
LQkJZm4oZGF0YSwgTlVMTCwgInkiKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChleHByX2NvbXBh
cmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkKLQkJZm4oZGF0YSwgTlVMTCwgIigiKTsK
LQlzd2l0Y2ggKGUtPnR5cGUpIHsKLQljYXNlIEVfU1lNQk9MOgotCQlpZiAoZS0+bGVmdC5zeW0t
Pm5hbWUpCi0JCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOwotCQll
bHNlCi0JCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBFX05P
VDoKLQkJZm4oZGF0YSwgTlVMTCwgIiEiKTsKLQkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZu
LCBkYXRhLCBFX05PVCk7Ci0JCWJyZWFrOwotCWNhc2UgRV9FUVVBTDoKLQkJaWYgKGUtPmxlZnQu
c3ltLT5uYW1lKQotCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsK
LQkJZWxzZQotCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7Ci0JCWZuKGRhdGEsIE5VTEws
ICI9Iik7Ci0JCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKLQkJ
YnJlYWs7Ci0JY2FzZSBFX0xFUToKLQljYXNlIEVfTFRIOgotCQlpZiAoZS0+bGVmdC5zeW0tPm5h
bWUpCi0JCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOwotCQllbHNl
Ci0JCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKLQkJZm4oZGF0YSwgTlVMTCwgZS0+dHlw
ZSA9PSBFX0xFUSA/ICI8PSIgOiAiPCIpOwotCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJp
Z2h0LnN5bS0+bmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgRV9HRVE6Ci0JY2FzZSBFX0dUSDoKLQkJ
aWYgKGUtPmxlZnQuc3ltLT5uYW1lKQotCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQu
c3ltLT5uYW1lKTsKLQkJZWxzZQotCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7Ci0JCWZu
KGRhdGEsIE5VTEwsIGUtPnR5cGUgPT0gRV9HRVEgPyAiPj0iIDogIj4iKTsKLQkJZm4oZGF0YSwg
ZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOwotCQlicmVhazsKLQljYXNlIEVfVU5F
UVVBTDoKLQkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQotCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0s
IGUtPmxlZnQuc3ltLT5uYW1lKTsKLQkJZWxzZQotCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+
Iik7Ci0JCWZuKGRhdGEsIE5VTEwsICIhPSIpOwotCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUt
PnJpZ2h0LnN5bS0+bmFtZSk7Ci0JCWJyZWFrOwotCWNhc2UgRV9PUjoKLQkJZXhwcl9wcmludChl
LT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsKLQkJZm4oZGF0YSwgTlVMTCwgIiB8fCAiKTsK
LQkJZXhwcl9wcmludChlLT5yaWdodC5leHByLCBmbiwgZGF0YSwgRV9PUik7Ci0JCWJyZWFrOwot
CWNhc2UgRV9BTkQ6Ci0JCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgRV9BTkQp
OwotCQlmbihkYXRhLCBOVUxMLCAiICYmICIpOwotCQlleHByX3ByaW50KGUtPnJpZ2h0LmV4cHIs
IGZuLCBkYXRhLCBFX0FORCk7Ci0JCWJyZWFrOwotCWNhc2UgRV9MSVNUOgotCQlmbihkYXRhLCBl
LT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7Ci0JCWlmIChlLT5sZWZ0LmV4cHIpIHsK
LQkJCWZuKGRhdGEsIE5VTEwsICIgXiAiKTsKLQkJCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBm
biwgZGF0YSwgRV9MSVNUKTsKLQkJfQotCQlicmVhazsKLQljYXNlIEVfUkFOR0U6Ci0JCWZuKGRh
dGEsIE5VTEwsICJbIik7Ci0JCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFt
ZSk7Ci0JCWZuKGRhdGEsIE5VTEwsICIgIik7Ci0JCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+
cmlnaHQuc3ltLT5uYW1lKTsKLQkJZm4oZGF0YSwgTlVMTCwgIl0iKTsKLQkJYnJlYWs7Ci0JZGVm
YXVsdDoKLQkgIHsKLQkJY2hhciBidWZbMzJdOwotCQlzcHJpbnRmKGJ1ZiwgIjx1bmtub3duIHR5
cGUgJWQ+IiwgZS0+dHlwZSk7Ci0JCWZuKGRhdGEsIE5VTEwsIGJ1Zik7Ci0JCWJyZWFrOwotCSAg
fQotCX0KLQlpZiAoZXhwcl9jb21wYXJlX3R5cGUocHJldnRva2VuLCBlLT50eXBlKSA+IDApCi0J
CWZuKGRhdGEsIE5VTEwsICIpIik7Ci19Ci0KLXN0YXRpYyB2b2lkIGV4cHJfcHJpbnRfZmlsZV9o
ZWxwZXIodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCi17
Ci0JeGZ3cml0ZShzdHIsIHN0cmxlbihzdHIpLCAxLCBkYXRhKTsKLX0KLQotdm9pZCBleHByX2Zw
cmludChzdHJ1Y3QgZXhwciAqZSwgRklMRSAqb3V0KQotewotCWV4cHJfcHJpbnQoZSwgZXhwcl9w
cmludF9maWxlX2hlbHBlciwgb3V0LCBFX05PTkUpOwotfQotCi1zdGF0aWMgdm9pZCBleHByX3By
aW50X2dzdHJfaGVscGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hh
ciAqc3RyKQotewotCXN0cnVjdCBnc3RyICpncyA9IChzdHJ1Y3QgZ3N0ciopZGF0YTsKLQljb25z
dCBjaGFyICpzeW1fc3RyID0gTlVMTDsKLQotCWlmIChzeW0pCi0JCXN5bV9zdHIgPSBzeW1fZ2V0
X3N0cmluZ192YWx1ZShzeW0pOwotCi0JaWYgKGdzLT5tYXhfd2lkdGgpIHsKLQkJdW5zaWduZWQg
ZXh0cmFfbGVuZ3RoID0gc3RybGVuKHN0cik7Ci0JCWNvbnN0IGNoYXIgKmxhc3RfY3IgPSBzdHJy
Y2hyKGdzLT5zLCAnXG4nKTsKLQkJdW5zaWduZWQgbGFzdF9saW5lX2xlbmd0aDsKLQotCQlpZiAo
c3ltX3N0cikKLQkJCWV4dHJhX2xlbmd0aCArPSA0ICsgc3RybGVuKHN5bV9zdHIpOwotCi0JCWlm
ICghbGFzdF9jcikKLQkJCWxhc3RfY3IgPSBncy0+czsKLQotCQlsYXN0X2xpbmVfbGVuZ3RoID0g
c3RybGVuKGdzLT5zKSAtIChsYXN0X2NyIC0gZ3MtPnMpOwotCi0JCWlmICgobGFzdF9saW5lX2xl
bmd0aCArIGV4dHJhX2xlbmd0aCkgPiBncy0+bWF4X3dpZHRoKQotCQkJc3RyX2FwcGVuZChncywg
IlxcXG4iKTsKLQl9Ci0KLQlzdHJfYXBwZW5kKGdzLCBzdHIpOwotCWlmIChzeW0gJiYgc3ltLT50
eXBlICE9IFNfVU5LTk9XTikKLQkJc3RyX3ByaW50ZihncywgIiBbPSVzXSIsIHN5bV9zdHIpOwot
fQotCi12b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdz
KQotewotCWV4cHJfcHJpbnQoZSwgZXhwcl9wcmludF9nc3RyX2hlbHBlciwgZ3MsIEVfTk9ORSk7
Ci19Ci0KLS8qCi0gKiBUcmFuc2Zvcm0gdGhlIHRvcCBsZXZlbCAifHwiIHRva2VucyBpbnRvIG5l
d2xpbmVzIGFuZCBwcmVwZW5kIGVhY2gKLSAqIGxpbmUgd2l0aCBhIG1pbnVzLiBUaGlzIG1ha2Vz
IGV4cHJlc3Npb25zIG11Y2ggZWFzaWVyIHRvIHJlYWQuCi0gKiBTdWl0YWJsZSBmb3IgcmV2ZXJz
ZSBkZXBlbmRlbmN5IGV4cHJlc3Npb25zLgotICovCi1zdGF0aWMgdm9pZCBleHByX3ByaW50X3Jl
dmRlcChzdHJ1Y3QgZXhwciAqZSwKLQkJCSAgICAgIHZvaWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qg
c3ltYm9sICosIGNvbnN0IGNoYXIgKiksCi0JCQkgICAgICB2b2lkICpkYXRhLCB0cmlzdGF0ZSBw
cl90eXBlLCBjb25zdCBjaGFyICoqdGl0bGUpCi17Ci0JaWYgKGUtPnR5cGUgPT0gRV9PUikgewot
CQlleHByX3ByaW50X3JldmRlcChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBwcl90eXBlLCB0aXRs
ZSk7Ci0JCWV4cHJfcHJpbnRfcmV2ZGVwKGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBwcl90eXBl
LCB0aXRsZSk7Ci0JfSBlbHNlIGlmIChleHByX2NhbGNfdmFsdWUoZSkgPT0gcHJfdHlwZSkgewot
CQlpZiAoKnRpdGxlKSB7Ci0JCQlmbihkYXRhLCBOVUxMLCAqdGl0bGUpOwotCQkJKnRpdGxlID0g
TlVMTDsKLQkJfQotCi0JCWZuKGRhdGEsIE5VTEwsICIgIC0gIik7Ci0JCWV4cHJfcHJpbnQoZSwg
Zm4sIGRhdGEsIEVfTk9ORSk7Ci0JCWZuKGRhdGEsIE5VTEwsICJcbiIpOwotCX0KLX0KLQotdm9p
ZCBleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAqZ3Ms
Ci0JCQkgICAgdHJpc3RhdGUgcHJfdHlwZSwgY29uc3QgY2hhciAqdGl0bGUpCi17Ci0JZXhwcl9w
cmludF9yZXZkZXAoZSwgZXhwcl9wcmludF9nc3RyX2hlbHBlciwgZ3MsIHByX3R5cGUsICZ0aXRs
ZSk7Ci19CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2V4cHIuaCBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZXhwci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGRlNjVi
Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oCisrKyAvZGV2L251bGwK
QEAgLTEsMzMxICswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02
OGsub3JnPgotICovCi0KLSNpZm5kZWYgRVhQUl9ICi0jZGVmaW5lIEVYUFJfSAotCi0jaWZkZWYg
X19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi0KLSNpbmNsdWRlIDxhc3NlcnQuaD4K
LSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgImxpc3QuaCIKLSNpZm5kZWYgX19jcGx1c3Bs
dXMKLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0jZW5kaWYKLQotc3RydWN0IGZpbGUgewotCXN0cnVj
dCBmaWxlICpuZXh0OwotCXN0cnVjdCBmaWxlICpwYXJlbnQ7Ci0JY29uc3QgY2hhciAqbmFtZTsK
LQlpbnQgbGluZW5vOwotfTsKLQotdHlwZWRlZiBlbnVtIHRyaXN0YXRlIHsKLQlubywgbW9kLCB5
ZXMKLX0gdHJpc3RhdGU7Ci0KLWVudW0gZXhwcl90eXBlIHsKLQlFX05PTkUsIEVfT1IsIEVfQU5E
LCBFX05PVCwKLQlFX0VRVUFMLCBFX1VORVFVQUwsIEVfTFRILCBFX0xFUSwgRV9HVEgsIEVfR0VR
LAotCUVfTElTVCwgRV9TWU1CT0wsIEVfUkFOR0UKLX07Ci0KLXVuaW9uIGV4cHJfZGF0YSB7Ci0J
c3RydWN0IGV4cHIgKmV4cHI7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotfTsKLQotc3RydWN0IGV4
cHIgewotCWVudW0gZXhwcl90eXBlIHR5cGU7Ci0JdW5pb24gZXhwcl9kYXRhIGxlZnQsIHJpZ2h0
OwotfTsKLQotI2RlZmluZSBFWFBSX09SKGRlcDEsIGRlcDIpCSgoKGRlcDEpPihkZXAyKSk/KGRl
cDEpOihkZXAyKSkKLSNkZWZpbmUgRVhQUl9BTkQoZGVwMSwgZGVwMikJKCgoZGVwMSk8KGRlcDIp
KT8oZGVwMSk6KGRlcDIpKQotI2RlZmluZSBFWFBSX05PVChkZXApCQkoMi0oZGVwKSkKLQotI2Rl
ZmluZSBleHByX2xpc3RfZm9yX2VhY2hfc3ltKGwsIGUsIHMpIFwKLQlmb3IgKGUgPSAobCk7IGUg
JiYgKHMgPSBlLT5yaWdodC5zeW0pOyBlID0gZS0+bGVmdC5leHByKQotCi1zdHJ1Y3QgZXhwcl92
YWx1ZSB7Ci0Jc3RydWN0IGV4cHIgKmV4cHI7Ci0JdHJpc3RhdGUgdHJpOwotfTsKLQotc3RydWN0
IHN5bWJvbF92YWx1ZSB7Ci0Jdm9pZCAqdmFsOwotCXRyaXN0YXRlIHRyaTsKLX07Ci0KLWVudW0g
c3ltYm9sX3R5cGUgewotCVNfVU5LTk9XTiwgU19CT09MRUFOLCBTX1RSSVNUQVRFLCBTX0lOVCwg
U19IRVgsIFNfU1RSSU5HCi19OwotCi0vKiBlbnVtIHZhbHVlcyBhcmUgdXNlZCBhcyBpbmRleCB0
byBzeW1ib2wuZGVmW10gKi8KLWVudW0gewotCVNfREVGX1VTRVIsCQkvKiBtYWluIHVzZXIgdmFs
dWUgKi8KLQlTX0RFRl9BVVRPLAkJLyogdmFsdWVzIHJlYWQgZnJvbSBhdXRvLmNvbmYgKi8KLQlT
X0RFRl9ERUYzLAkJLyogUmVzZXJ2ZWQgZm9yIFVJIHVzYWdlICovCi0JU19ERUZfREVGNCwJCS8q
IFJlc2VydmVkIGZvciBVSSB1c2FnZSAqLwotCVNfREVGX0NPVU5UCi19OwotCi0vKgotICogUmVw
cmVzZW50cyBhIGNvbmZpZ3VyYXRpb24gc3ltYm9sLgotICoKLSAqIENob2ljZXMgYXJlIHJlcHJl
c2VudGVkIGFzIGEgc3BlY2lhbCBraW5kIG9mIHN5bWJvbCBhbmQgaGF2ZSB0aGUKLSAqIFNZTUJP
TF9DSE9JQ0UgYml0IHNldCBpbiAnZmxhZ3MnLgotICovCi1zdHJ1Y3Qgc3ltYm9sIHsKLQkvKiBU
aGUgbmV4dCBzeW1ib2wgaW4gdGhlIHNhbWUgYnVja2V0IGluIHRoZSBzeW1ib2wgaGFzaCB0YWJs
ZSAqLwotCXN0cnVjdCBzeW1ib2wgKm5leHQ7Ci0KLQkvKiBUaGUgbmFtZSBvZiB0aGUgc3ltYm9s
LCBlLmcuICJGT08iIGZvciAnY29uZmlnIEZPTycgKi8KLQljaGFyICpuYW1lOwotCi0JLyogU19C
T09MRUFOLCBTX1RSSVNUQVRFLCAuLi4gKi8KLQllbnVtIHN5bWJvbF90eXBlIHR5cGU7Ci0KLQkv
KgotCSAqIFRoZSBjYWxjdWxhdGVkIHZhbHVlIG9mIHRoZSBzeW1ib2wuIFRoZSBTWU1CT0xfVkFM
SUQgYml0IGlzIHNldCBpbgotCSAqICdmbGFncycgd2hlbiB0aGlzIGlzIHVwIHRvIGRhdGUuIE5v
dGUgdGhhdCB0aGlzIHZhbHVlIG1pZ2h0IGRpZmZlcgotCSAqIGZyb20gdGhlIHVzZXIgdmFsdWUg
c2V0IGluIGUuZy4gYSAuY29uZmlnIGZpbGUsIGR1ZSB0byB2aXNpYmlsaXR5LgotCSAqLwotCXN0
cnVjdCBzeW1ib2xfdmFsdWUgY3VycjsKLQotCS8qCi0JICogVmFsdWVzIGZvciB0aGUgc3ltYm9s
IHByb3ZpZGVkIGZyb20gb3V0c2lkZS4gZGVmW1NfREVGX1VTRVJdIGhvbGRzCi0JICogdGhlIC5j
b25maWcgdmFsdWUuCi0JICovCi0Jc3RydWN0IHN5bWJvbF92YWx1ZSBkZWZbU19ERUZfQ09VTlRd
OwotCi0JLyoKLQkgKiBBbiB1cHBlciBib3VuZCBvbiB0aGUgdHJpc3RhdGUgdmFsdWUgdGhlIHVz
ZXIgY2FuIHNldCBmb3IgdGhlIHN5bWJvbAotCSAqIGlmIGl0IGlzIGEgYm9vbGVhbiBvciB0cmlz
dGF0ZS4gQ2FsY3VsYXRlZCBmcm9tIHByb21wdCBkZXBlbmRlbmNpZXMsCi0JICogd2hpY2ggYWxz
byBpbmhlcml0IGRlcGVuZGVuY2llcyBmcm9tIGVuY2xvc2luZyBtZW51cywgY2hvaWNlcywgYW5k
Ci0JICogaWZzLiBJZiAnbicsIHRoZSB1c2VyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4KLQkgKgot
CSAqIFN5bWJvbHMgbGFja2luZyBwcm9tcHRzIGFsd2F5cyBoYXZlIHZpc2liaWxpdHkgJ24nLgot
CSAqLwotCXRyaXN0YXRlIHZpc2libGU7Ci0KLQkvKiBTWU1CT0xfKiBmbGFncyAqLwotCWludCBm
bGFnczsKLQotCS8qIExpc3Qgb2YgcHJvcGVydGllcy4gU2VlIHByb3BfdHlwZS4gKi8KLQlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7Ci0KLQkvKiBEZXBlbmRlbmNpZXMgZnJvbSBlbmNsb3NpbmcgbWVu
dXMsIGNob2ljZXMsIGFuZCBpZnMgKi8KLQlzdHJ1Y3QgZXhwcl92YWx1ZSBkaXJfZGVwOwotCi0J
LyogUmV2ZXJzZSBkZXBlbmRlbmNpZXMgdGhyb3VnaCBiZWluZyBzZWxlY3RlZCBieSBvdGhlciBz
eW1ib2xzICovCi0Jc3RydWN0IGV4cHJfdmFsdWUgcmV2X2RlcDsKLQotCS8qCi0JICogIldlYWsi
IHJldmVyc2UgZGVwZW5kZW5jaWVzIHRocm91Z2ggYmVpbmcgaW1wbGllZCBieSBvdGhlciBzeW1i
b2xzCi0JICovCi0Jc3RydWN0IGV4cHJfdmFsdWUgaW1wbGllZDsKLX07Ci0KLSNkZWZpbmUgZm9y
X2FsbF9zeW1ib2xzKGksIHN5bSkgZm9yIChpID0gMDsgaSA8IFNZTUJPTF9IQVNIU0laRTsgaSsr
KSBmb3IgKHN5bSA9IHN5bWJvbF9oYXNoW2ldOyBzeW07IHN5bSA9IHN5bS0+bmV4dCkKLQotI2Rl
ZmluZSBTWU1CT0xfQ09OU1QgICAgICAweDAwMDEgIC8qIHN5bWJvbCBpcyBjb25zdCAqLwotI2Rl
ZmluZSBTWU1CT0xfQ0hFQ0sgICAgICAweDAwMDggIC8qIHVzZWQgZHVyaW5nIGRlcGVuZGVuY3kg
Y2hlY2tpbmcgKi8KLSNkZWZpbmUgU1lNQk9MX0NIT0lDRSAgICAgMHgwMDEwICAvKiBzdGFydCBv
ZiBhIGNob2ljZSBibG9jayAobnVsbCBuYW1lKSAqLwotI2RlZmluZSBTWU1CT0xfQ0hPSUNFVkFM
ICAweDAwMjAgIC8qIHVzZWQgYXMgYSB2YWx1ZSBpbiBhIGNob2ljZSBibG9jayAqLwotI2RlZmlu
ZSBTWU1CT0xfVkFMSUQgICAgICAweDAwODAgIC8qIHNldCB3aGVuIHN5bWJvbC5jdXJyIGlzIGNh
bGN1bGF0ZWQgKi8KLSNkZWZpbmUgU1lNQk9MX09QVElPTkFMICAgMHgwMTAwICAvKiBjaG9pY2Ug
aXMgb3B0aW9uYWwgLSB2YWx1ZXMgY2FuIGJlICduJyAqLwotI2RlZmluZSBTWU1CT0xfV1JJVEUg
ICAgICAweDAyMDAgIC8qIHdyaXRlIHN5bWJvbCB0byBmaWxlIChLQ09ORklHX0NPTkZJRykgKi8K
LSNkZWZpbmUgU1lNQk9MX0NIQU5HRUQgICAgMHgwNDAwICAvKiA/ICovCi0jZGVmaW5lIFNZTUJP
TF9OT19XUklURSAgIDB4MTAwMCAgLyogU3ltYm9sIGZvciBpbnRlcm5hbCB1c2Ugb25seTsgaXQg
d2lsbCBub3QgYmUgd3JpdHRlbiAqLwotI2RlZmluZSBTWU1CT0xfQ0hFQ0tFRCAgICAweDIwMDAg
IC8qIHVzZWQgZHVyaW5nIGRlcGVuZGVuY3kgY2hlY2tpbmcgKi8KLSNkZWZpbmUgU1lNQk9MX1dB
Uk5FRCAgICAgMHg4MDAwICAvKiB3YXJuaW5nIGhhcyBiZWVuIGlzc3VlZCAqLwotCi0vKiBTZXQg
d2hlbiBzeW1ib2wuZGVmW10gaXMgdXNlZCAqLwotI2RlZmluZSBTWU1CT0xfREVGICAgICAgICAw
eDEwMDAwICAvKiBGaXJzdCBiaXQgb2YgU1lNQk9MX0RFRiAqLwotI2RlZmluZSBTWU1CT0xfREVG
X1VTRVIgICAweDEwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGX1VTRVJdIGlzIHZhbGlkICovCi0j
ZGVmaW5lIFNZTUJPTF9ERUZfQVVUTyAgIDB4MjAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfQVVU
T10gaXMgdmFsaWQgKi8KLSNkZWZpbmUgU1lNQk9MX0RFRjMgICAgICAgMHg0MDAwMCAgLyogc3lt
Ym9sLmRlZltTX0RFRl8zXSBpcyB2YWxpZCAqLwotI2RlZmluZSBTWU1CT0xfREVGNCAgICAgICAw
eDgwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGXzRdIGlzIHZhbGlkICovCi0KLS8qIGNob2ljZSB2
YWx1ZXMgbmVlZCB0byBiZSBzZXQgYmVmb3JlIGNhbGN1bGF0aW5nIHRoaXMgc3ltYm9sIHZhbHVl
ICovCi0jZGVmaW5lIFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTICAweDEwMDAwMAotCi0v
KiBTZXQgc3ltYm9sIHRvIHkgaWYgYWxsbm9jb25maWc7IHVzZWQgZm9yIHN5bWJvbHMgdGhhdCBo
aWRlIG90aGVycyAqLwotI2RlZmluZSBTWU1CT0xfQUxMTk9DT05GSUdfWSAweDIwMDAwMAotCi0j
ZGVmaW5lIFNZTUJPTF9NQVhMRU5HVEgJMjU2Ci0jZGVmaW5lIFNZTUJPTF9IQVNIU0laRQkJOTk3
MwotCi0vKiBBIHByb3BlcnR5IHJlcHJlc2VudCB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBjYW4g
YmUgYXNzb2NpYXRlZAotICogd2l0aCBhIGNvbmZpZyAic3ltYm9sIi4KLSAqIFNhbXBsZToKLSAq
IGNvbmZpZyBGT08KLSAqICAgICAgICAgZGVmYXVsdCB5Ci0gKiAgICAgICAgIHByb21wdCAiZm9v
IHByb21wdCIKLSAqICAgICAgICAgc2VsZWN0IEJBUgotICogY29uZmlnIEJBWgotICogICAgICAg
ICBpbnQgIkJBWiBWYWx1ZSIKLSAqICAgICAgICAgcmFuZ2UgMS4uMjU1Ci0gKgotICogUGxlYXNl
LCBhbHNvIGNoZWNrIHBhcnNlci55OnByaW50X3N5bWJvbCgpIHdoZW4gbW9kaWZ5aW5nIHRoZQot
ICogbGlzdCBvZiBwcm9wZXJ0eSB0eXBlcyEKLSAqLwotZW51bSBwcm9wX3R5cGUgewotCVBfVU5L
Tk9XTiwKLQlQX1BST01QVCwgICAvKiBwcm9tcHQgImZvbyBwcm9tcHQiIG9yICJCQVogVmFsdWUi
ICovCi0JUF9DT01NRU5ULCAgLyogdGV4dCBhc3NvY2lhdGVkIHdpdGggYSBjb21tZW50ICovCi0J
UF9NRU5VLCAgICAgLyogcHJvbXB0IGFzc29jaWF0ZWQgd2l0aCBhIG1lbnUgb3IgbWVudWNvbmZp
ZyBzeW1ib2wgKi8KLQlQX0RFRkFVTFQsICAvKiBkZWZhdWx0IHkgKi8KLQlQX0NIT0lDRSwgICAv
KiBjaG9pY2UgdmFsdWUgKi8KLQlQX1NFTEVDVCwgICAvKiBzZWxlY3QgQkFSICovCi0JUF9JTVBM
WSwgICAgLyogaW1wbHkgQkFSICovCi0JUF9SQU5HRSwgICAgLyogcmFuZ2UgNy4uMTAwIChmb3Ig
YSBzeW1ib2wpICovCi0JUF9TWU1CT0wsICAgLyogd2hlcmUgYSBzeW1ib2wgaXMgZGVmaW5lZCAq
LwotfTsKLQotc3RydWN0IHByb3BlcnR5IHsKLQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQ7ICAgICAv
KiBuZXh0IHByb3BlcnR5IC0gbnVsbCBpZiBsYXN0ICovCi0Jc3RydWN0IHN5bWJvbCAqc3ltOyAg
ICAgICAgLyogdGhlIHN5bWJvbCBmb3Igd2hpY2ggdGhlIHByb3BlcnR5IGlzIGFzc29jaWF0ZWQg
Ki8KLQllbnVtIHByb3BfdHlwZSB0eXBlOyAgICAgICAvKiB0eXBlIG9mIHByb3BlcnR5ICovCi0J
Y29uc3QgY2hhciAqdGV4dDsgICAgICAgICAgLyogdGhlIHByb21wdCB2YWx1ZSAtIFBfUFJPTVBU
LCBQX01FTlUsIFBfQ09NTUVOVCAqLwotCXN0cnVjdCBleHByX3ZhbHVlIHZpc2libGU7Ci0Jc3Ry
dWN0IGV4cHIgKmV4cHI7ICAgICAgICAgLyogdGhlIG9wdGlvbmFsIGNvbmRpdGlvbmFsIHBhcnQg
b2YgdGhlIHByb3BlcnR5ICovCi0Jc3RydWN0IG1lbnUgKm1lbnU7ICAgICAgICAgLyogdGhlIG1l
bnUgdGhlIHByb3BlcnR5IGFyZSBhc3NvY2lhdGVkIHdpdGgKLQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKiB2YWxpZCBmb3I6IFBfU0VMRUNULCBQX1JBTkdFLCBQX0NIT0lDRSwKLQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBQX1BST01QVCwgUF9ERUZBVUxULCBQX01FTlUsIFBf
Q09NTUVOVCAqLwotCXN0cnVjdCBmaWxlICpmaWxlOyAgICAgICAgIC8qIHdoYXQgZmlsZSB3YXMg
dGhpcyBwcm9wZXJ0eSBkZWZpbmVkICovCi0JaW50IGxpbmVubzsgICAgICAgICAgICAgICAgLyog
d2hhdCBsaW5lbm8gd2FzIHRoaXMgcHJvcGVydHkgZGVmaW5lZCAqLwotfTsKLQotI2RlZmluZSBm
b3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgdG9rKSBcCi0JZm9yIChzdCA9IHN5bS0+cHJvcDsg
c3Q7IHN0ID0gc3QtPm5leHQpIFwKLQkJaWYgKHN0LT50eXBlID09ICh0b2spKQotI2RlZmluZSBm
b3JfYWxsX2RlZmF1bHRzKHN5bSwgc3QpIGZvcl9hbGxfcHJvcGVydGllcyhzeW0sIHN0LCBQX0RF
RkFVTFQpCi0jZGVmaW5lIGZvcl9hbGxfY2hvaWNlcyhzeW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRp
ZXMoc3ltLCBzdCwgUF9DSE9JQ0UpCi0jZGVmaW5lIGZvcl9hbGxfcHJvbXB0cyhzeW0sIHN0KSBc
Ci0JZm9yIChzdCA9IHN5bS0+cHJvcDsgc3Q7IHN0ID0gc3QtPm5leHQpIFwKLQkJaWYgKHN0LT50
ZXh0KQotCi0vKgotICogUmVwcmVzZW50cyBhIG5vZGUgaW4gdGhlIG1lbnUgdHJlZSwgYXMgc2Vl
biBpbiBlLmcuIG1lbnVjb25maWcgKHRob3VnaCB1c2VkCi0gKiBmb3IgYWxsIGZyb250IGVuZHMp
LiBFYWNoIHN5bWJvbCwgbWVudSwgZXRjLiBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzCi0g
KiBnZXRzIGEgbm9kZS4gQSBzeW1ib2wgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgZ2V0
cyBvbmUgbm9kZSBhdCBlYWNoCi0gKiBsb2NhdGlvbi4KLSAqLwotc3RydWN0IG1lbnUgewotCS8q
IFRoZSBuZXh0IG1lbnUgbm9kZSBhdCB0aGUgc2FtZSBsZXZlbCAqLwotCXN0cnVjdCBtZW51ICpu
ZXh0OwotCi0JLyogVGhlIHBhcmVudCBtZW51IG5vZGUsIGNvcnJlc3BvbmRpbmcgdG8gZS5nLiBh
IG1lbnUgb3IgY2hvaWNlICovCi0Jc3RydWN0IG1lbnUgKnBhcmVudDsKLQotCS8qIFRoZSBmaXJz
dCBjaGlsZCBtZW51IG5vZGUsIGZvciBlLmcuIG1lbnVzIGFuZCBjaG9pY2VzICovCi0Jc3RydWN0
IG1lbnUgKmxpc3Q7Ci0KLQkvKgotCSAqIFRoZSBzeW1ib2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBt
ZW51IG5vZGUuIENob2ljZXMgYXJlIGltcGxlbWVudGVkIGFzCi0JICogYSBzcGVjaWFsIGtpbmQg
b2Ygc3ltYm9sLiBOVUxMIGZvciBtZW51cywgY29tbWVudHMsIGFuZCBpZnMuCi0JICovCi0Jc3Ry
dWN0IHN5bWJvbCAqc3ltOwotCi0JLyoKLQkgKiBUaGUgcHJvbXB0IGFzc29jaWF0ZWQgd2l0aCB0
aGUgbm9kZS4gVGhpcyBob2xkcyB0aGUgcHJvbXB0IGZvciBhCi0JICogc3ltYm9sIGFzIHdlbGwg
YXMgdGhlIHRleHQgZm9yIGEgbWVudSBvciBjb21tZW50LCBhbG9uZyB3aXRoIHRoZQotCSAqIHR5
cGUgKFBfUFJPTVBULCBQX01FTlUsIGV0Yy4pCi0JICovCi0Jc3RydWN0IHByb3BlcnR5ICpwcm9t
cHQ7Ci0KLQkvKgotCSAqICd2aXNpYmxlIGlmJyBkZXBlbmRlbmNpZXMuIElmIG1vcmUgdGhhbiBv
bmUgaXMgZ2l2ZW4sIHRoZXkgd2lsbCBiZQotCSAqIEFORGVkIHRvZ2V0aGVyLgotCSAqLwotCXN0
cnVjdCBleHByICp2aXNpYmlsaXR5OwotCi0JLyoKLQkgKiBPcmRpbmFyeSBkZXBlbmRlbmNpZXMg
ZnJvbSBlLmcuICdkZXBlbmRzIG9uJyBhbmQgJ2lmJywgQU5EZWQKLQkgKiB0b2dldGhlcgotCSAq
LwotCXN0cnVjdCBleHByICpkZXA7Ci0KLQkvKiBNRU5VXyogZmxhZ3MgKi8KLQl1bnNpZ25lZCBp
bnQgZmxhZ3M7Ci0KLQkvKiBBbnkgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZSAq
LwotCWNoYXIgKmhlbHA7Ci0KLQkvKiBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIG1lbnUgbm9kZSBh
cHBlYXJzIGluIHRoZSBLY29uZmlnIGZpbGVzICovCi0Jc3RydWN0IGZpbGUgKmZpbGU7Ci0JaW50
IGxpbmVubzsKLQotCS8qIEZvciB1c2UgYnkgZnJvbnQgZW5kcyB0aGF0IG5lZWQgdG8gc3RvcmUg
YXV4aWxpYXJ5IGRhdGEgKi8KLQl2b2lkICpkYXRhOwotfTsKLQotLyoKLSAqIFNldCBvbiBhIG1l
bnUgbm9kZSB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbCBjaGFuZ2VzIHN0YXRlIGluIHNv
bWUgd2F5LgotICogQ2FuIGJlIGNoZWNrZWQgYnkgZnJvbnQgZW5kcy4KLSAqLwotI2RlZmluZSBN
RU5VX0NIQU5HRUQJCTB4MDAwMQotCi0jZGVmaW5lIE1FTlVfUk9PVAkJMHgwMDAyCi0KLXN0cnVj
dCBqdW1wX2tleSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwotCXNpemVfdCBvZmZzZXQ7
Ci0Jc3RydWN0IG1lbnUgKnRhcmdldDsKLQlpbnQgaW5kZXg7Ci19OwotCi0jZGVmaW5lIEpVTVBf
TkIJCQk5Ci0KLWV4dGVybiBzdHJ1Y3QgZmlsZSAqZmlsZV9saXN0OwotZXh0ZXJuIHN0cnVjdCBm
aWxlICpjdXJyZW50X2ZpbGU7Ci1zdHJ1Y3QgZmlsZSAqbG9va3VwX2ZpbGUoY29uc3QgY2hhciAq
bmFtZSk7Ci0KLWV4dGVybiBzdHJ1Y3Qgc3ltYm9sIHN5bWJvbF95ZXMsIHN5bWJvbF9ubywgc3lt
Ym9sX21vZDsKLWV4dGVybiBzdHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsKLWV4dGVybiBzdHJ1
Y3Qgc3ltYm9sICpzeW1fZGVmY29uZmlnX2xpc3Q7Ci1leHRlcm4gaW50IGNkZWJ1ZzsKLXN0cnVj
dCBleHByICpleHByX2FsbG9jX3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0pOwotc3RydWN0IGV4
cHIgKmV4cHJfYWxsb2Nfb25lKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICpjZSk7
Ci1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY190d28oZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOwotc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfY29t
cChlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzMSwgc3RydWN0IHN5bWJvbCAq
czIpOwotc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfYW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0
IGV4cHIgKmUyKTsKLXN0cnVjdCBleHByICpleHByX2FsbG9jX29yKHN0cnVjdCBleHByICplMSwg
c3RydWN0IGV4cHIgKmUyKTsKLXN0cnVjdCBleHByICpleHByX2NvcHkoY29uc3Qgc3RydWN0IGV4
cHIgKm9yZyk7Ci12b2lkIGV4cHJfZnJlZShzdHJ1Y3QgZXhwciAqZSk7Ci12b2lkIGV4cHJfZWxp
bWluYXRlX2VxKHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMik7Ci10cmlzdGF0
ZSBleHByX2NhbGNfdmFsdWUoc3RydWN0IGV4cHIgKmUpOwotc3RydWN0IGV4cHIgKmV4cHJfdHJh
bnNfYm9vbChzdHJ1Y3QgZXhwciAqZSk7Ci1zdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfZHVw
cyhzdHJ1Y3QgZXhwciAqZSk7Ci1zdHJ1Y3QgZXhwciAqZXhwcl90cmFuc2Zvcm0oc3RydWN0IGV4
cHIgKmUpOwotaW50IGV4cHJfY29udGFpbnNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVj
dCBzeW1ib2wgKnN5bSk7Ci1ib29sIGV4cHJfZGVwZW5kc19zeW1ib2woc3RydWN0IGV4cHIgKmRl
cCwgc3RydWN0IHN5bWJvbCAqc3ltKTsKLXN0cnVjdCBleHByICpleHByX3RyYW5zX2NvbXBhcmUo
c3RydWN0IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSk7
Ci0KLXZvaWQgZXhwcl9mcHJpbnQoc3RydWN0IGV4cHIgKmUsIEZJTEUgKm91dCk7Ci1zdHJ1Y3Qg
Z3N0cjsgLyogZm9yd2FyZCAqLwotdm9pZCBleHByX2dzdHJfcHJpbnQoc3RydWN0IGV4cHIgKmUs
IHN0cnVjdCBnc3RyICpncyk7Ci12b2lkIGV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3RydWN0IGV4
cHIgKmUsIHN0cnVjdCBnc3RyICpncywKLQkJCSAgICB0cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBj
aGFyICp0aXRsZSk7Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGV4cHJfaXNfeWVzKHN0cnVjdCBleHBy
ICplKQotewotCXJldHVybiAhZSB8fCAoZS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlLT5sZWZ0LnN5
bSA9PSAmc3ltYm9sX3llcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGV4cHJfaXNfbm8oc3Ry
dWN0IGV4cHIgKmUpCi17Ci0JcmV0dXJuIGUgJiYgKGUtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZS0+
bGVmdC5zeW0gPT0gJnN5bWJvbF9ubyk7Ci19Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2Vu
ZGlmCi0KLSNlbmRpZiAvKiBFWFBSX0ggKi8KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvZml4ZGVwLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5N2FmYjcwLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvZml4ZGVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzODAgKzAsMCBAQAotLyoKLSAqICJPcHRp
bWl6ZSIgYSBsaXN0IG9mIGRlcGVuZGVuY2llcyBhcyBzcGl0IG91dCBieSBnY2MgLU1ECi0gKiBm
b3IgdGhlIGtlcm5lbCBidWlsZAotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKgotICogQXV0aG9y
ICAgICAgIEthaSBHZXJtYXNjaGV3c2tpCi0gKiBDb3B5cmlnaHQgICAgMjAwMiBieSBLYWkgR2Vy
bWFzY2hld3NraSAgPGthaS5nZXJtYXNjaGV3c2tpQGdteC5kZT4KLSAqCi0gKiBUaGlzIHNvZnR3
YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCi0g
KiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4g
YnkgcmVmZXJlbmNlLgotICoKLSAqCi0gKiBJbnRyb2R1Y3Rpb246Ci0gKgotICogZ2NjIHByb2R1
Y2VzIGEgdmVyeSBuaWNlIGFuZCBjb3JyZWN0IGxpc3Qgb2YgZGVwZW5kZW5jaWVzIHdoaWNoCi0g
KiB0ZWxscyBtYWtlIHdoZW4gdG8gcmVtYWtlIGEgZmlsZS4KLSAqCi0gKiBUbyB1c2UgdGhpcyBs
aXN0IGFzLWlzIGhvd2V2ZXIgaGFzIHRoZSBkcmF3YmFjayB0aGF0IHZpcnR1YWxseQotICogZXZl
cnkgZmlsZSBpbiB0aGUga2VybmVsIGluY2x1ZGVzIGF1dG9jb25mLmguCi0gKgotICogSWYgdGhl
IHVzZXIgcmUtcnVucyBtYWtlICpjb25maWcsIGF1dG9jb25mLmggd2lsbCBiZQotICogcmVnZW5l
cmF0ZWQuICBtYWtlIG5vdGljZXMgdGhhdCBhbmQgd2lsbCByZWJ1aWxkIGV2ZXJ5IGZpbGUgd2hp
Y2gKLSAqIGluY2x1ZGVzIGF1dG9jb25mLmgsIGkuZS4gYmFzaWNhbGx5IGFsbCBmaWxlcy4gVGhp
cyBpcyBleHRyZW1lbHkKLSAqIGFubm95aW5nIGlmIHRoZSB1c2VyIGp1c3QgY2hhbmdlZCBDT05G
SUdfSElTX0RSSVZFUiBmcm9tIG4gdG8gbS4KLSAqCi0gKiBTbyB3ZSBwbGF5IHRoZSBzYW1lIHRy
aWNrIHRoYXQgIm1rZGVwIiBwbGF5ZWQgYmVmb3JlLiBXZSByZXBsYWNlCi0gKiB0aGUgZGVwZW5k
ZW5jeSBvbiBhdXRvY29uZi5oIGJ5IGEgZGVwZW5kZW5jeSBvbiBldmVyeSBjb25maWcKLSAqIG9w
dGlvbiB3aGljaCBpcyBtZW50aW9uZWQgaW4gYW55IG9mIHRoZSBsaXN0ZWQgcHJlcmVxdWlzaXRl
cy4KLSAqCi0gKiBrY29uZmlnIHBvcHVsYXRlcyBhIHRyZWUgaW4gaW5jbHVkZS9jb25maWcvIHdp
dGggYW4gZW1wdHkgZmlsZQotICogZm9yIGVhY2ggY29uZmlnIHN5bWJvbCBhbmQgd2hlbiB0aGUg
Y29uZmlndXJhdGlvbiBpcyB1cGRhdGVkCi0gKiB0aGUgZmlsZXMgcmVwcmVzZW50aW5nIGNoYW5n
ZWQgY29uZmlnIG9wdGlvbnMgYXJlIHRvdWNoZWQKLSAqIHdoaWNoIHRoZW4gbGV0IG1ha2UgcGlj
ayB1cCB0aGUgY2hhbmdlcyBhbmQgdGhlIGZpbGVzIHRoYXQgdXNlCi0gKiB0aGUgY29uZmlnIHN5
bWJvbHMgYXJlIHJlYnVpbHQuCi0gKgotICogU28gaWYgdGhlIHVzZXIgY2hhbmdlcyBoaXMgQ09O
RklHX0hJU19EUklWRVIgb3B0aW9uLCBvbmx5IHRoZSBvYmplY3RzCi0gKiB3aGljaCBkZXBlbmQg
b24gImluY2x1ZGUvY29uZmlnL2hpcy9kcml2ZXIuaCIgd2lsbCBiZSByZWJ1aWx0LAotICogc28g
bW9zdCBsaWtlbHkgb25seSBoaXMgZHJpdmVyIDstKQotICoKLSAqIFRoZSBpZGVhIGFib3ZlIGRh
dGVzLCBieSB0aGUgd2F5LCBiYWNrIHRvIE1pY2hhZWwgRSBDaGFzdGFpbiwgQUZBSUsuCi0gKgot
ICogU28gdG8gZ2V0IGRlcGVuZGVuY2llcyByaWdodCwgdGhlcmUgYXJlIHR3byBpc3N1ZXM6Ci0g
KiBvIGlmIGFueSBvZiB0aGUgZmlsZXMgdGhlIGNvbXBpbGVyIHJlYWQgY2hhbmdlZCwgd2UgbmVl
ZCB0byByZWJ1aWxkCi0gKiBvIGlmIHRoZSBjb21tYW5kIGxpbmUgZ2l2ZW4gdG8gdGhlIGNvbXBp
bGUgdGhlIGZpbGUgY2hhbmdlZCwgd2UKLSAqICAgYmV0dGVyIHJlYnVpbGQgYXMgd2VsbC4KLSAq
Ci0gKiBUaGUgZm9ybWVyIGlzIGhhbmRsZWQgYnkgdXNpbmcgdGhlIC1NRCBvdXRwdXQsIHRoZSBs
YXRlciBieSBzYXZpbmcKLSAqIHRoZSBjb21tYW5kIGxpbmUgdXNlZCB0byBjb21waWxlIHRoZSBv
bGQgb2JqZWN0IGFuZCBjb21wYXJpbmcgaXQKLSAqIHRvIHRoZSBvbmUgd2Ugd291bGQgbm93IHVz
ZS4KLSAqCi0gKiBBZ2FpbiwgYWxzbyB0aGlzIGlkZWEgaXMgcHJldHR5IG9sZCBhbmQgaGFzIGJl
ZW4gZGlzY3Vzc2VkIG9uCi0gKiBrYnVpbGQtZGV2ZWwgYSBsb25nIHRpbWUgYWdvLiBJIGRvbid0
IGhhdmUgYSBzZW5zaWJseSB3b3JraW5nCi0gKiBpbnRlcm5ldCBjb25uZWN0aW9uIHJpZ2h0IG5v
dywgc28gSSByYXRoZXIgZG9uJ3QgbWVudGlvbiBuYW1lcwotICogd2l0aG91dCBkb3VibGUgY2hl
Y2tpbmcuCi0gKgotICogVGhpcyBjb2RlIGhlcmUgaGFzIGJlZW4gYmFzZWQgcGFydGlhbGx5IGJh
c2VkIG9uIG1rZGVwLmMsIHdoaWNoCi0gKiBzYXlzIHRoZSBmb2xsb3dpbmcgYWJvdXQgaXRzIGhp
c3Rvcnk6Ci0gKgotICogICBDb3B5cmlnaHQgYWJhbmRvbmVkLCBNaWNoYWVsIENoYXN0YWluLCA8
bWFpbHRvOm1lY0BzaG91dC5uZXQ+LgotICogICBUaGlzIGlzIGEgQyB2ZXJzaW9uIG9mIHN5bmNk
ZXAucGwgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLgotICoKLSAqCi0gKiBJdCBpcyBpbnZva2VkIGFz
Ci0gKgotICogICBmaXhkZXAgPGRlcGZpbGU+IDx0YXJnZXQ+IDxjbWRsaW5lPgotICoKLSAqIGFu
ZCB3aWxsIHJlYWQgdGhlIGRlcGVuZGVuY3kgZmlsZSA8ZGVwZmlsZT4KLSAqCi0gKiBUaGUgdHJh
bnNmb3JtZWQgZGVwZW5kZW5jeSBzbmlwcGVkIGlzIHdyaXR0ZW4gdG8gc3Rkb3V0LgotICoKLSAq
IEl0IGZpcnN0IGdlbmVyYXRlcyBhIGxpbmUKLSAqCi0gKiAgIGNtZF88dGFyZ2V0PiA9IDxjbWRs
aW5lPgotICoKLSAqIGFuZCB0aGVuIGJhc2ljYWxseSBjb3BpZXMgdGhlIC48dGFyZ2V0Pi5kIGZp
bGUgdG8gc3Rkb3V0LCBpbiB0aGUKLSAqIHByb2Nlc3MgZmlsdGVyaW5nIG91dCB0aGUgZGVwZW5k
ZW5jeSBvbiBhdXRvY29uZi5oIGFuZCBhZGRpbmcKLSAqIGRlcGVuZGVuY2llcyBvbiBpbmNsdWRl
L2NvbmZpZy9teS9vcHRpb24uaCBmb3IgZXZlcnkKLSAqIENPTkZJR19NWV9PUFRJT04gZW5jb3Vu
dGVyZWQgaW4gYW55IG9mIHRoZSBwcmVyZXF1aXNpdGVzLgotICoKLSAqIEl0IHdpbGwgYWxzbyBm
aWx0ZXIgb3V0IGFsbCB0aGUgZGVwZW5kZW5jaWVzIG9uICoudmVyLiBXZSBuZWVkCi0gKiB0byBt
YWtlIHN1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkIHZlcnNpb24gY2hlY2tzdW0gYXJlIGdsb2JhbGx5
IHVwCi0gKiB0byBkYXRlIGJlZm9yZSBldmVuIHN0YXJ0aW5nIHRoZSByZWN1cnNpdmUgYnVpbGQs
IHNvIGl0J3MgdG9vIGxhdGUKLSAqIGF0IHRoaXMgcG9pbnQgYW55d2F5LgotICoKLSAqIFdlIGRv
bid0IGV2ZW4gdHJ5IHRvIHJlYWxseSBwYXJzZSB0aGUgaGVhZGVyIGZpbGVzLCBidXQKLSAqIG1l
cmVseSBncmVwLCBpLmUuIGlmIENPTkZJR19GT08gaXMgbWVudGlvbmVkIGluIGEgY29tbWVudCwg
aXQgd2lsbAotICogYmUgcGlja2VkIHVwIGFzIHdlbGwuIEl0J3Mgbm90IGEgcHJvYmxlbSB3aXRo
IHJlc3BlY3QgdG8KLSAqIGNvcnJlY3RuZXNzLCBzaW5jZSB0aGF0IGNhbiBvbmx5IGdpdmUgdG9v
IG1hbnkgZGVwZW5kZW5jaWVzLCB0aHVzCi0gKiB3ZSBjYW5ub3QgbWlzcyBhIHJlYnVpbGQuIFNp
bmNlIHBlb3BsZSB0ZW5kIHRvIG5vdCBtZW50aW9uIHRvdGFsbHkKLSAqIHVucmVsYXRlZCBDT05G
SUdfIG9wdGlvbnMgYWxsIG92ZXIgdGhlIHBsYWNlLCBpdCdzIG5vdCBhbgotICogZWZmaWNpZW5j
eSBwcm9ibGVtIGVpdGhlci4KLSAqCi0gKiAoTm90ZTogaXQnZCBiZSBlYXN5IHRvIHBvcnQgb3Zl
ciB0aGUgY29tcGxldGUgbWtkZXAgc3RhdGUgbWFjaGluZSwKLSAqICBidXQgSSBkb24ndCB0aGlu
ayB0aGUgYWRkZWQgY29tcGxleGl0eSBpcyB3b3J0aCBpdCkKLSAqLwotCi0jaW5jbHVkZSA8c3lz
L3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNp
bmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotc3RhdGljIHZvaWQg
dXNhZ2Uodm9pZCkKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBmaXhkZXAgPGRlcGZpbGU+
IDx0YXJnZXQ+IDxjbWRsaW5lPlxuIik7Ci0JZXhpdCgxKTsKLX0KLQotLyoKLSAqIFByaW50IG91
dCBhIGRlcGVuZGVuY3kgcGF0aCBmcm9tIGEgc3ltYm9sIG5hbWUKLSAqLwotc3RhdGljIHZvaWQg
cHJpbnRfZGVwKGNvbnN0IGNoYXIgKm0sIGludCBzbGVuLCBjb25zdCBjaGFyICpkaXIpCi17Ci0J
aW50IGMsIHByZXZfYyA9ICcvJywgaTsKLQotCXByaW50ZigiICAgICQod2lsZGNhcmQgJXMvIiwg
ZGlyKTsKLQlmb3IgKGkgPSAwOyBpIDwgc2xlbjsgaSsrKSB7Ci0JCWMgPSBtW2ldOwotCQlpZiAo
YyA9PSAnXycpCi0JCQljID0gJy8nOwotCQllbHNlCi0JCQljID0gdG9sb3dlcihjKTsKLQkJaWYg
KGMgIT0gJy8nIHx8IHByZXZfYyAhPSAnLycpCi0JCQlwdXRjaGFyKGMpOwotCQlwcmV2X2MgPSBj
OwotCX0KLQlwcmludGYoIi5oKSBcXFxuIik7Ci19Ci0KLXN0cnVjdCBpdGVtIHsKLQlzdHJ1Y3Qg
aXRlbQkqbmV4dDsKLQl1bnNpZ25lZCBpbnQJbGVuOwotCXVuc2lnbmVkIGludAloYXNoOwotCWNo
YXIJCW5hbWVbMF07Ci19OwotCi0jZGVmaW5lIEhBU0hTWiAyNTYKLXN0YXRpYyBzdHJ1Y3QgaXRl
bSAqaGFzaHRhYltIQVNIU1pdOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHN0cmhhc2goY29uc3Qg
Y2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgc3opCi17Ci0JLyogZm52MzIgaGFzaCAqLwotCXVuc2ln
bmVkIGludCBpLCBoYXNoID0gMjE2NjEzNjI2MVU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc3o7IGkr
KykKLQkJaGFzaCA9IChoYXNoIF4gc3RyW2ldKSAqIDB4MDEwMDAxOTM7Ci0JcmV0dXJuIGhhc2g7
Ci19Ci0KLS8qCi0gKiBMb29rdXAgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBzdHJpbmcu
Ci0gKi8KLXN0YXRpYyBpbnQgaXNfZGVmaW5lZF9jb25maWcoY29uc3QgY2hhciAqbmFtZSwgaW50
IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpCi17Ci0Jc3RydWN0IGl0ZW0gKmF1eDsKLQotCWZvciAo
YXV4ID0gaGFzaHRhYltoYXNoICUgSEFTSFNaXTsgYXV4OyBhdXggPSBhdXgtPm5leHQpIHsKLQkJ
aWYgKGF1eC0+aGFzaCA9PSBoYXNoICYmIGF1eC0+bGVuID09IGxlbiAmJgotCQkgICAgbWVtY21w
KGF1eC0+bmFtZSwgbmFtZSwgbGVuKSA9PSAwKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAw
OwotfQotCi0vKgotICogQWRkIGEgbmV3IHZhbHVlIHRvIHRoZSBjb25maWd1cmF0aW9uIHN0cmlu
Zy4KLSAqLwotc3RhdGljIHZvaWQgZGVmaW5lX2NvbmZpZyhjb25zdCBjaGFyICpuYW1lLCBpbnQg
bGVuLCB1bnNpZ25lZCBpbnQgaGFzaCkKLXsKLQlzdHJ1Y3QgaXRlbSAqYXV4ID0gbWFsbG9jKHNp
emVvZigqYXV4KSArIGxlbik7Ci0KLQlpZiAoIWF1eCkgewotCQlwZXJyb3IoImZpeGRlcDptYWxs
b2MiKTsKLQkJZXhpdCgxKTsKLQl9Ci0JbWVtY3B5KGF1eC0+bmFtZSwgbmFtZSwgbGVuKTsKLQlh
dXgtPmxlbiA9IGxlbjsKLQlhdXgtPmhhc2ggPSBoYXNoOwotCWF1eC0+bmV4dCA9IGhhc2h0YWJb
aGFzaCAlIEhBU0hTWl07Ci0JaGFzaHRhYltoYXNoICUgSEFTSFNaXSA9IGF1eDsKLX0KLQotLyoK
LSAqIFJlY29yZCB0aGUgdXNlIG9mIGEgQ09ORklHXyogd29yZC4KLSAqLwotc3RhdGljIHZvaWQg
dXNlX2NvbmZpZyhjb25zdCBjaGFyICptLCBpbnQgc2xlbikKLXsKLQl1bnNpZ25lZCBpbnQgaGFz
aCA9IHN0cmhhc2gobSwgc2xlbik7Ci0KLQlpZiAoaXNfZGVmaW5lZF9jb25maWcobSwgc2xlbiwg
aGFzaCkpCi0JICAgIHJldHVybjsKLQotCWRlZmluZV9jb25maWcobSwgc2xlbiwgaGFzaCk7Ci0J
cHJpbnRfZGVwKG0sIHNsZW4sICJpbmNsdWRlL2NvbmZpZyIpOwotfQotCi0vKiB0ZXN0IGlmIHMg
ZW5kcyBpbiBzdWIgKi8KLXN0YXRpYyBpbnQgc3RyX2VuZHNfd2l0aChjb25zdCBjaGFyICpzLCBp
bnQgc2xlbiwgY29uc3QgY2hhciAqc3ViKQotewotCWludCBzdWJsZW4gPSBzdHJsZW4oc3ViKTsK
LQotCWlmIChzdWJsZW4gPiBzbGVuKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAhbWVtY21wKHMg
KyBzbGVuIC0gc3VibGVuLCBzdWIsIHN1Ymxlbik7Ci19Ci0KLXN0YXRpYyB2b2lkIHBhcnNlX2Nv
bmZpZ19maWxlKGNvbnN0IGNoYXIgKnApCi17Ci0JY29uc3QgY2hhciAqcSwgKnI7Ci0JY29uc3Qg
Y2hhciAqc3RhcnQgPSBwOwotCi0Jd2hpbGUgKChwID0gc3Ryc3RyKHAsICJDT05GSUdfIikpKSB7
Ci0JCWlmIChwID4gc3RhcnQgJiYgKGlzYWxudW0ocFstMV0pIHx8IHBbLTFdID09ICdfJykpIHsK
LQkJCXAgKz0gNzsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXAgKz0gNzsKLQkJcSA9IHA7Ci0JCXdo
aWxlICgqcSAmJiAoaXNhbG51bSgqcSkgfHwgKnEgPT0gJ18nKSkKLQkJCXErKzsKLQkJaWYgKHN0
cl9lbmRzX3dpdGgocCwgcSAtIHAsICJfTU9EVUxFIikpCi0JCQlyID0gcSAtIDc7Ci0JCWVsc2UK
LQkJCXIgPSBxOwotCQlpZiAociA+IHApCi0JCQl1c2VfY29uZmlnKHAsIHIgLSBwKTsKLQkJcCA9
IHE7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCAqcmVhZF9maWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1l
KQotewotCXN0cnVjdCBzdGF0IHN0OwotCWludCBmZDsKLQljaGFyICpidWY7Ci0KLQlmZCA9IG9w
ZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKLQlpZiAoZmQgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJy
LCAiZml4ZGVwOiBlcnJvciBvcGVuaW5nIGZpbGU6ICIpOwotCQlwZXJyb3IoZmlsZW5hbWUpOwot
CQlleGl0KDIpOwotCX0KLQlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKSB7Ci0JCWZwcmludGYoc3Rk
ZXJyLCAiZml4ZGVwOiBlcnJvciBmc3RhdCdpbmcgZmlsZTogIik7Ci0JCXBlcnJvcihmaWxlbmFt
ZSk7Ci0JCWV4aXQoMik7Ci0JfQotCWJ1ZiA9IG1hbGxvYyhzdC5zdF9zaXplICsgMSk7Ci0JaWYg
KCFidWYpIHsKLQkJcGVycm9yKCJmaXhkZXA6IG1hbGxvYyIpOwotCQlleGl0KDIpOwotCX0KLQlp
ZiAocmVhZChmZCwgYnVmLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKSB7Ci0JCXBlcnJvcigi
Zml4ZGVwOiByZWFkIik7Ci0JCWV4aXQoMik7Ci0JfQotCWJ1ZltzdC5zdF9zaXplXSA9ICdcMCc7
Ci0JY2xvc2UoZmQpOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLQotLyogSWdub3JlIGNlcnRhaW4gZGVw
ZW5kZW5jaWVzICovCi1zdGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBjaGFyICpzLCBp
bnQgbGVuKQotewotCXJldHVybiBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1ZGUvZ2VuZXJh
dGVkL2F1dG9jb25mLmgiKSB8fAotCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1
ZGUvZ2VuZXJhdGVkL2F1dG9rc3ltcy5oIikgfHwKLQkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBs
ZW4sICJidWlsZC9pbmNsdWRlL3VrL19jb25maWcuaCIpIHx8Ci0JICAgICAgIHN0cl9lbmRzX3dp
dGgocywgbGVuLCAiLnZlciIpOwotfQotCi0vKgotICogSW1wb3J0YW50OiBUaGUgYmVsb3cgZ2Vu
ZXJhdGVkIHNvdXJjZV9mb28ubyBhbmQgZGVwc19mb28ubyB2YXJpYWJsZQotICogYXNzaWdubWVu
dHMgYXJlIHBhcnNlZCBub3Qgb25seSBieSBtYWtlLCBidXQgYWxzbyBieSB0aGUgcmF0aGVyIHNp
bXBsZQotICogcGFyc2VyIGluIHNjcmlwdHMvbW9kL3N1bXZlcnNpb24uYy4KLSAqLwotc3RhdGlj
IHZvaWQgcGFyc2VfZGVwX2ZpbGUoY2hhciAqbSwgY29uc3QgY2hhciAqdGFyZ2V0KQotewotCWNo
YXIgKnA7Ci0JaW50IGlzX2xhc3QsIGlzX3RhcmdldDsKLQlpbnQgc2F3X2FueV90YXJnZXQgPSAw
OwotCWludCBpc19maXJzdF9kZXAgPSAwOwotCXZvaWQgKmJ1ZjsKLQotCXdoaWxlICgxKSB7Ci0J
CS8qIFNraXAgYW55ICJ3aGl0ZSBzcGFjZSIgKi8KLQkJd2hpbGUgKCptID09ICcgJyB8fCAqbSA9
PSAnXFwnIHx8ICptID09ICdcbicpCi0JCQltKys7Ci0KLQkJaWYgKCEqbSkKLQkJCWJyZWFrOwot
Ci0JCS8qIEZpbmQgbmV4dCAid2hpdGUgc3BhY2UiICovCi0JCXAgPSBtOwotCQl3aGlsZSAoKnAg
JiYgKnAgIT0gJyAnICYmICpwICE9ICdcXCcgJiYgKnAgIT0gJ1xuJykKLQkJCXArKzsKLQkJaXNf
bGFzdCA9ICgqcCA9PSAnXDAnKTsKLQkJLyogSXMgdGhlIHRva2VuIHdlIGZvdW5kIGEgdGFyZ2V0
IG5hbWU/ICovCi0JCWlzX3RhcmdldCA9ICgqKHAtMSkgPT0gJzonKTsKLQkJLyogRG9uJ3Qgd3Jp
dGUgYW55IHRhcmdldCBuYW1lcyBpbnRvIHRoZSBkZXBlbmRlbmN5IGZpbGUgKi8KLQkJaWYgKGlz
X3RhcmdldCkgewotCQkJLyogVGhlIC9uZXh0LyBmaWxlIGlzIHRoZSBmaXJzdCBkZXBlbmRlbmN5
ICovCi0JCQlpc19maXJzdF9kZXAgPSAxOwotCQl9IGVsc2UgaWYgKCFpc19pZ25vcmVkX2ZpbGUo
bSwgcCAtIG0pKSB7Ci0JCQkqcCA9ICdcMCc7Ci0KLQkJCS8qCi0JCQkgKiBEbyBub3QgbGlzdCB0
aGUgc291cmNlIGZpbGUgYXMgZGVwZW5kZW5jeSwgc28gdGhhdAotCQkJICoga2J1aWxkIGlzIG5v
dCBjb25mdXNlZCBpZiBhIC5jIGZpbGUgaXMgcmV3cml0dGVuCi0JCQkgKiBpbnRvIC5TIG9yIHZp
Y2UgdmVyc2EuIFN0b3JpbmcgaXQgaW4gc291cmNlXyogaXMKLQkJCSAqIG5lZWRlZCBmb3IgbW9k
cG9zdCB0byBjb21wdXRlIHNyY3ZlcnNpb25zLgotCQkJICovCi0JCQlpZiAoaXNfZmlyc3RfZGVw
KSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiBwcm9jZXNzaW5nIHRoZSBjb25jYXRlbmF0aW9uIG9mIG11
bHRpcGxlCi0JCQkJICogZGVwZW5kZW5jeSBmaWxlcywgb25seSBwcm9jZXNzIHRoZSBmaXJzdAot
CQkJCSAqIHRhcmdldCBuYW1lLCB3aGljaCB3aWxsIGJlIHRoZSBvcmlnaW5hbAotCQkJCSAqIHNv
dXJjZSBuYW1lLCBhbmQgaWdub3JlIGFueSBvdGhlciB0YXJnZXQKLQkJCQkgKiBuYW1lcywgd2hp
Y2ggd2lsbCBiZSBpbnRlcm1lZGlhdGUgdGVtcG9yYXJ5Ci0JCQkJICogZmlsZXMuCi0JCQkJICov
Ci0JCQkJaWYgKCFzYXdfYW55X3RhcmdldCkgewotCQkJCQlzYXdfYW55X3RhcmdldCA9IDE7Ci0J
CQkJCXByaW50Zigic291cmNlXyVzIDo9ICVzXG5cbiIsCi0JCQkJCSAgICAgICB0YXJnZXQsIG0p
OwotCQkJCQlwcmludGYoImRlcHNfJXMgOj0gXFxcbiIsIHRhcmdldCk7Ci0JCQkJfQotCQkJCWlz
X2ZpcnN0X2RlcCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ZigiICAlcyBcXFxuIiwgbSk7
Ci0JCQl9Ci0KLQkJCWJ1ZiA9IHJlYWRfZmlsZShtKTsKLQkJCXBhcnNlX2NvbmZpZ19maWxlKGJ1
Zik7Ci0JCQlmcmVlKGJ1Zik7Ci0JCX0KLQotCQlpZiAoaXNfbGFzdCkKLQkJCWJyZWFrOwotCi0J
CS8qCi0JCSAqIFN0YXJ0IHNlYXJjaGluZyBmb3IgbmV4dCB0b2tlbiBpbW1lZGlhdGVseSBhZnRl
ciB0aGUgZmlyc3QKLQkJICogIndoaXRlc3BhY2UiIGNoYXJhY3RlciB0aGF0IGZvbGxvd3MgdGhp
cyB0b2tlbi4KLQkJICovCi0JCW0gPSBwICsgMTsKLQl9Ci0KLQlpZiAoIXNhd19hbnlfdGFyZ2V0
KSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiZml4ZGVwOiBwYXJzZSBlcnJvcjsgbm8gdGFyZ2V0cyBm
b3VuZFxuIik7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JcHJpbnRmKCJcbiVzOiAkKGRlcHNfJXMpXG5c
biIsIHRhcmdldCwgdGFyZ2V0KTsKLQlwcmludGYoIiQoZGVwc18lcyk6XG4iLCB0YXJnZXQpOwot
fQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWNvbnN0IGNoYXIgKmRl
cGZpbGUsICp0YXJnZXQsICpjbWRsaW5lOwotCXZvaWQgKmJ1ZjsKLQotCWlmIChhcmdjICE9IDQp
Ci0JCXVzYWdlKCk7Ci0KLQlkZXBmaWxlID0gYXJndlsxXTsKLQl0YXJnZXQgPSBhcmd2WzJdOwot
CWNtZGxpbmUgPSBhcmd2WzNdOwotCi0JcHJpbnRmKCJjbWRfJXMgOj0gJXNcblxuIiwgdGFyZ2V0
LCBjbWRsaW5lKTsKLQotCWJ1ZiA9IHJlYWRfZmlsZShkZXBmaWxlKTsKLQlwYXJzZV9kZXBfZmls
ZShidWYsIHRhcmdldCk7Ci0JZnJlZShidWYpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
Z2NvbmYtY2ZnLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA0ODBlY2Q4Li4wMDAw
MDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2ZnLnNoCisrKyAvZGV2L251bGwK
QEAgLTEsMzAgKzAsMCBAQAotIyEvYmluL3NoCi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wCi0KLVBLRz0iZ3RrKy0yLjAgZ21vZHVsZS0yLjAgbGliZ2xhZGUtMi4wIgotCi1pZiBb
IC16ICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4KLQllY2hvID4mMiAiKiIKLQll
Y2hvID4mMiAiKiAnbWFrZSBnY29uZmlnJyByZXF1aXJlcyAncGtnLWNvbmZpZycuIFBsZWFzZSBp
bnN0YWxsIGl0LiIKLQllY2hvID4mMiAiKiIKLQlleGl0IDEKLWZpCi0KLWlmICEgcGtnLWNvbmZp
ZyAtLWV4aXN0cyAkUEtHOyB0aGVuCi0JZWNobyA+JjIgIioiCi0JZWNobyA+JjIgIiogVW5hYmxl
IHRvIGZpbmQgdGhlIEdUSysgaW5zdGFsbGF0aW9uLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQiCi0J
ZWNobyA+JjIgIiogdGhlIEdUSysgMi4wIGRldmVsb3BtZW50IHBhY2thZ2UgaXMgY29ycmVjdGx5
IGluc3RhbGxlZC4iCi0JZWNobyA+JjIgIiogWW91IG5lZWQgJFBLRyIKLQllY2hvID4mMiAiKiIK
LQlleGl0IDEKLWZpCi0KLWlmICEgcGtnLWNvbmZpZyAtLWF0bGVhc3QtdmVyc2lvbj0yLjAuMCBn
dGsrLTIuMDsgdGhlbgotCWVjaG8gPiYyICIqIgotCWVjaG8gPiYyICIqIEdUSysgaXMgcHJlc2Vu
dCBidXQgdmVyc2lvbiA+PSAyLjAuMCBpcyByZXF1aXJlZC4iCi0JZWNobyA+JjIgIioiCi0JZXhp
dCAxCi1maQotCi1lY2hvIGNmbGFncz1cIiQocGtnLWNvbmZpZyAtLWNmbGFncyAkUEtHKVwiCi1l
Y2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCIKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvZ2NvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuYwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM2YjM0Mi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L2djb25mLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTE2ICswLDAgQEAKLS8v
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDAyLTIwMDMgUm9tYWluIExpZXZpbiA8cm9tc0B0aWxwLmluZm8+Ci0gKi8KLQotI2lmZGVmIEhB
VkVfQ09ORklHX0gKLSMgIGluY2x1ZGUgPGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlICJsa2MuaCIKLSNpbmNsdWRlICJpbWFnZXMuaCIKLQotI2luY2x1
ZGUgPGdsYWRlL2dsYWRlLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPGdsaWIu
aD4KLSNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx0aW1lLmg+
Ci0KLS8vI2RlZmluZSBERUJVRwotCi1lbnVtIHsKLQlTSU5HTEVfVklFVywgU1BMSVRfVklFVywg
RlVMTF9WSUVXCi19OwotCi1lbnVtIHsKLQlPUFRfTk9STUFMLCBPUFRfQUxMLCBPUFRfUFJPTVBU
Ci19OwotCi1zdGF0aWMgZ2ludCB2aWV3X21vZGUgPSBGVUxMX1ZJRVc7Ci1zdGF0aWMgZ2Jvb2xl
YW4gc2hvd19uYW1lID0gVFJVRTsKLXN0YXRpYyBnYm9vbGVhbiBzaG93X3JhbmdlID0gVFJVRTsK
LXN0YXRpYyBnYm9vbGVhbiBzaG93X3ZhbHVlID0gVFJVRTsKLXN0YXRpYyBnYm9vbGVhbiByZXNp
emVhYmxlID0gRkFMU0U7Ci1zdGF0aWMgaW50IG9wdF9tb2RlID0gT1BUX05PUk1BTDsKLQotR3Rr
V2lkZ2V0ICptYWluX3duZCA9IE5VTEw7Ci1HdGtXaWRnZXQgKnRyZWUxX3cgPSBOVUxMOwkvLyBs
ZWZ0ICBmcmFtZQotR3RrV2lkZ2V0ICp0cmVlMl93ID0gTlVMTDsJLy8gcmlnaHQgZnJhbWUKLUd0
a1dpZGdldCAqdGV4dF93ID0gTlVMTDsKLUd0a1dpZGdldCAqaHBhbmVkID0gTlVMTDsKLUd0a1dp
ZGdldCAqdnBhbmVkID0gTlVMTDsKLUd0a1dpZGdldCAqYmFja19idG4gPSBOVUxMOwotR3RrV2lk
Z2V0ICpzYXZlX2J0biA9IE5VTEw7Ci1HdGtXaWRnZXQgKnNhdmVfbWVudV9pdGVtID0gTlVMTDsK
LQotR3RrVGV4dFRhZyAqdGFnMSwgKnRhZzI7Ci1HZGtDb2xvciBjb2xvcjsKLQotR3RrVHJlZVN0
b3JlICp0cmVlMSwgKnRyZWUyLCAqdHJlZTsKLUd0a1RyZWVNb2RlbCAqbW9kZWwxLCAqbW9kZWwy
Owotc3RhdGljIEd0a1RyZWVJdGVyICpwYXJlbnRzWzI1Nl07Ci1zdGF0aWMgZ2ludCBpbmRlbnQ7
Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudDsgLy8gY3VycmVudCBub2RlIGZvciBTSU5H
TEUgdmlldwotc3RhdGljIHN0cnVjdCBtZW51ICpicm93c2VkOyAvLyBicm93c2VkIG5vZGUgZm9y
IFNQTElUIHZpZXcKLQotZW51bSB7Ci0JQ09MX09QVElPTiwgQ09MX05BTUUsIENPTF9OTywgQ09M
X01PRCwgQ09MX1lFUywgQ09MX1ZBTFVFLAotCUNPTF9NRU5VLCBDT0xfQ09MT1IsIENPTF9FRElU
LCBDT0xfUElYQlVGLAotCUNPTF9QSVhWSVMsIENPTF9CVE5WSVMsIENPTF9CVE5BQ1QsIENPTF9C
VE5JTkMsIENPTF9CVE5SQUQsCi0JQ09MX05VTUJFUgotfTsKLQotc3RhdGljIHZvaWQgZGlzcGxh
eV9saXN0KHZvaWQpOwotc3RhdGljIHZvaWQgZGlzcGxheV90cmVlKHN0cnVjdCBtZW51ICptZW51
KTsKLXN0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZV9wYXJ0KHZvaWQpOwotc3RhdGljIHZvaWQgdXBk
YXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJlZUl0ZXIgKiBkc3QpOwotc3RhdGljIHZv
aWQgc2V0X25vZGUoR3RrVHJlZUl0ZXIgKiBub2RlLCBzdHJ1Y3QgbWVudSAqbWVudSwgZ2NoYXIg
Kiogcm93KTsKLXN0YXRpYyBnY2hhciAqKmZpbGxfcm93KHN0cnVjdCBtZW51ICptZW51KTsKLXN0
YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKTsKLQotLyogSGVscGluZy9EZWJ1Z2dpbmcgRnVu
Y3Rpb25zICovCi0jaWZkZWYgREVCVUcKLXN0YXRpYyBjb25zdCBjaGFyICpkYmdfc3ltX2ZsYWdz
KGludCB2YWwpCi17Ci0Jc3RhdGljIGNoYXIgYnVmWzI1Nl07Ci0KLQliemVybyhidWYsIDI1Nik7
Ci0KLQlpZiAodmFsICYgU1lNQk9MX0NPTlNUKQotCQlzdHJjYXQoYnVmLCAiY29uc3QvIik7Ci0J
aWYgKHZhbCAmIFNZTUJPTF9DSEVDSykKLQkJc3RyY2F0KGJ1ZiwgImNoZWNrLyIpOwotCWlmICh2
YWwgJiBTWU1CT0xfQ0hPSUNFKQotCQlzdHJjYXQoYnVmLCAiY2hvaWNlLyIpOwotCWlmICh2YWwg
JiBTWU1CT0xfQ0hPSUNFVkFMKQotCQlzdHJjYXQoYnVmLCAiY2hvaWNldmFsLyIpOwotCWlmICh2
YWwgJiBTWU1CT0xfVkFMSUQpCi0JCXN0cmNhdChidWYsICJ2YWxpZC8iKTsKLQlpZiAodmFsICYg
U1lNQk9MX09QVElPTkFMKQotCQlzdHJjYXQoYnVmLCAib3B0aW9uYWwvIik7Ci0JaWYgKHZhbCAm
IFNZTUJPTF9XUklURSkKLQkJc3RyY2F0KGJ1ZiwgIndyaXRlLyIpOwotCWlmICh2YWwgJiBTWU1C
T0xfQ0hBTkdFRCkKLQkJc3RyY2F0KGJ1ZiwgImNoYW5nZWQvIik7Ci0JaWYgKHZhbCAmIFNZTUJP
TF9OT19XUklURSkKLQkJc3RyY2F0KGJ1ZiwgIm5vX3dyaXRlLyIpOwotCi0JYnVmW3N0cmxlbihi
dWYpIC0gMV0gPSAnXDAnOwotCi0JcmV0dXJuIGJ1ZjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9p
ZCByZXBsYWNlX2J1dHRvbl9pY29uKEdsYWRlWE1MICp4bWwsIEdka0RyYXdhYmxlICp3aW5kb3cs
Ci0JCQkJR3RrU3R5bGUgKnN0eWxlLCBnY2hhciAqYnRuX25hbWUsIGdjaGFyICoqeHBtKQotewot
CUdka1BpeG1hcCAqcGl4bWFwOwotCUdka0JpdG1hcCAqbWFzazsKLQlHdGtUb29sQnV0dG9uICpi
dXR0b247Ci0JR3RrV2lkZ2V0ICppbWFnZTsKLQotCXBpeG1hcCA9IGdka19waXhtYXBfY3JlYXRl
X2Zyb21feHBtX2Qod2luZG93LCAmbWFzaywKLQkJCQkJICAgICAgJnN0eWxlLT5iZ1tHVEtfU1RB
VEVfTk9STUFMXSwKLQkJCQkJICAgICAgeHBtKTsKLQotCWJ1dHRvbiA9IEdUS19UT09MX0JVVFRP
TihnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsIGJ0bl9uYW1lKSk7Ci0JaW1hZ2UgPSBndGtfaW1h
Z2VfbmV3X2Zyb21fcGl4bWFwKHBpeG1hcCwgbWFzayk7Ci0JZ3RrX3dpZGdldF9zaG93KGltYWdl
KTsKLQlndGtfdG9vbF9idXR0b25fc2V0X2ljb25fd2lkZ2V0KGJ1dHRvbiwgaW1hZ2UpOwotfQot
Ci0vKiBNYWluIFdpbmRvdyBJbml0aWFsaXphdGlvbiAqLwotc3RhdGljIHZvaWQgaW5pdF9tYWlu
X3dpbmRvdyhjb25zdCBnY2hhciAqZ2xhZGVfZmlsZSkKLXsKLQlHbGFkZVhNTCAqeG1sOwotCUd0
a1dpZGdldCAqd2lkZ2V0OwotCUd0a1RleHRCdWZmZXIgKnR4dGJ1ZjsKLQlHdGtTdHlsZSAqc3R5
bGU7Ci0KLQl4bWwgPSBnbGFkZV94bWxfbmV3KGdsYWRlX2ZpbGUsICJ3aW5kb3cxIiwgTlVMTCk7
Ci0JaWYgKCF4bWwpCi0JCWdfZXJyb3IoIkdVSSBsb2FkaW5nIGZhaWxlZCAhXG4iKTsKLQlnbGFk
ZV94bWxfc2lnbmFsX2F1dG9jb25uZWN0KHhtbCk7Ci0KLQltYWluX3duZCA9IGdsYWRlX3htbF9n
ZXRfd2lkZ2V0KHhtbCwgIndpbmRvdzEiKTsKLQlocGFuZWQgPSBnbGFkZV94bWxfZ2V0X3dpZGdl
dCh4bWwsICJocGFuZWQxIik7Ci0JdnBhbmVkID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAi
dnBhbmVkMSIpOwotCXRyZWUxX3cgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0cmVldmll
dzEiKTsKLQl0cmVlMl93ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAidHJlZXZpZXcyIik7
Ci0JdGV4dF93ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAidGV4dHZpZXczIik7Ci0KLQli
YWNrX2J0biA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgImJ1dHRvbjEiKTsKLQlndGtfd2lk
Z2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsKLQotCXdpZGdldCA9IGdsYWRlX3ht
bF9nZXRfd2lkZ2V0KHhtbCwgInNob3dfbmFtZTEiKTsKLQlndGtfY2hlY2tfbWVudV9pdGVtX3Nl
dF9hY3RpdmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lkZ2V0LAotCQkJCSAgICAgICBzaG93X25h
bWUpOwotCi0Jd2lkZ2V0ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAic2hvd19yYW5nZTEi
KTsKLQlndGtfY2hlY2tfbWVudV9pdGVtX3NldF9hY3RpdmUoKEd0a0NoZWNrTWVudUl0ZW0gKikg
d2lkZ2V0LAotCQkJCSAgICAgICBzaG93X3JhbmdlKTsKLQotCXdpZGdldCA9IGdsYWRlX3htbF9n
ZXRfd2lkZ2V0KHhtbCwgInNob3dfZGF0YTEiKTsKLQlndGtfY2hlY2tfbWVudV9pdGVtX3NldF9h
Y3RpdmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lkZ2V0LAotCQkJCSAgICAgICBzaG93X3ZhbHVl
KTsKLQotCXNhdmVfYnRuID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiYnV0dG9uMyIpOwot
CXNhdmVfbWVudV9pdGVtID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAic2F2ZTEiKTsKLQlj
b25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZfY2hhbmdlZCk7Ci0KLQlzdHlsZSA9IGd0a193
aWRnZXRfZ2V0X3N0eWxlKG1haW5fd25kKTsKLQl3aWRnZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdl
dCh4bWwsICJ0b29sYmFyMSIpOwotCi0JcmVwbGFjZV9idXR0b25faWNvbih4bWwsIG1haW5fd25k
LT53aW5kb3csIHN0eWxlLAotCQkJICAgICJidXR0b240IiwgKGdjaGFyICoqKSB4cG1fc2luZ2xl
X3ZpZXcpOwotCXJlcGxhY2VfYnV0dG9uX2ljb24oeG1sLCBtYWluX3duZC0+d2luZG93LCBzdHls
ZSwKLQkJCSAgICAiYnV0dG9uNSIsIChnY2hhciAqKikgeHBtX3NwbGl0X3ZpZXcpOwotCXJlcGxh
Y2VfYnV0dG9uX2ljb24oeG1sLCBtYWluX3duZC0+d2luZG93LCBzdHlsZSwKLQkJCSAgICAiYnV0
dG9uNiIsIChnY2hhciAqKikgeHBtX3RyZWVfdmlldyk7Ci0KLQl0eHRidWYgPSBndGtfdGV4dF92
aWV3X2dldF9idWZmZXIoR1RLX1RFWFRfVklFVyh0ZXh0X3cpKTsKLQl0YWcxID0gZ3RrX3RleHRf
YnVmZmVyX2NyZWF0ZV90YWcodHh0YnVmLCAibXl0YWcxIiwKLQkJCQkJICAiZm9yZWdyb3VuZCIs
ICJyZWQiLAotCQkJCQkgICJ3ZWlnaHQiLCBQQU5HT19XRUlHSFRfQk9MRCwKLQkJCQkJICBOVUxM
KTsKLQl0YWcyID0gZ3RrX3RleHRfYnVmZmVyX2NyZWF0ZV90YWcodHh0YnVmLCAibXl0YWcyIiwK
LQkJCQkJICAvKiJzdHlsZSIsIFBBTkdPX1NUWUxFX09CTElRVUUsICovCi0JCQkJCSAgTlVMTCk7
Ci0KLQlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKG1haW5fd25kKSwgcm9vdG1lbnUu
cHJvbXB0LT50ZXh0KTsKLQotCWd0a193aWRnZXRfc2hvdyhtYWluX3duZCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGluaXRfdHJlZV9tb2RlbCh2b2lkKQotewotCWdpbnQgaTsKLQotCXRyZWUgPSB0cmVl
MiA9IGd0a190cmVlX3N0b3JlX25ldyhDT0xfTlVNQkVSLAotCQkJCQkgIEdfVFlQRV9TVFJJTkcs
IEdfVFlQRV9TVFJJTkcsCi0JCQkJCSAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywKLQkJ
CQkJICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLAotCQkJCQkgIEdfVFlQRV9QT0lOVEVS
LCBHREtfVFlQRV9DT0xPUiwKLQkJCQkJICBHX1RZUEVfQk9PTEVBTiwgR0RLX1RZUEVfUElYQlVG
LAotCQkJCQkgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfQk9PTEVBTiwKLQkJCQkJICBHX1RZUEVf
Qk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sCi0JCQkJCSAgR19UWVBFX0JPT0xFQU4pOwotCW1vZGVs
MiA9IEdUS19UUkVFX01PREVMKHRyZWUyKTsKLQotCWZvciAocGFyZW50c1swXSA9IE5VTEwsIGkg
PSAxOyBpIDwgMjU2OyBpKyspCi0JCXBhcmVudHNbaV0gPSAoR3RrVHJlZUl0ZXIgKikgZ19tYWxs
b2Moc2l6ZW9mKEd0a1RyZWVJdGVyKSk7Ci0KLQl0cmVlMSA9IGd0a190cmVlX3N0b3JlX25ldyhD
T0xfTlVNQkVSLAotCQkJCSAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsCi0JCQkJICAg
R19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywKLQkJCQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZ
UEVfU1RSSU5HLAotCQkJCSAgIEdfVFlQRV9QT0lOVEVSLCBHREtfVFlQRV9DT0xPUiwKLQkJCQkg
ICBHX1RZUEVfQk9PTEVBTiwgR0RLX1RZUEVfUElYQlVGLAotCQkJCSAgIEdfVFlQRV9CT09MRUFO
LCBHX1RZUEVfQk9PTEVBTiwKLQkJCQkgICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4s
Ci0JCQkJICAgR19UWVBFX0JPT0xFQU4pOwotCW1vZGVsMSA9IEdUS19UUkVFX01PREVMKHRyZWUx
KTsKLX0KLQotc3RhdGljIHZvaWQgaW5pdF9sZWZ0X3RyZWUodm9pZCkKLXsKLQlHdGtUcmVlVmll
dyAqdmlldyA9IEdUS19UUkVFX1ZJRVcodHJlZTFfdyk7Ci0JR3RrQ2VsbFJlbmRlcmVyICpyZW5k
ZXJlcjsKLQlHdGtUcmVlU2VsZWN0aW9uICpzZWw7Ci0JR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVt
bjsKLQotCWd0a190cmVlX3ZpZXdfc2V0X21vZGVsKHZpZXcsIG1vZGVsMSk7Ci0JZ3RrX3RyZWVf
dmlld19zZXRfaGVhZGVyc192aXNpYmxlKHZpZXcsIFRSVUUpOwotCWd0a190cmVlX3ZpZXdfc2V0
X3J1bGVzX2hpbnQodmlldywgVFJVRSk7Ci0KLQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2NvbHVt
bl9uZXcoKTsKLQlndGtfdHJlZV92aWV3X2FwcGVuZF9jb2x1bW4odmlldywgY29sdW1uKTsKLQln
dGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdGl0bGUoY29sdW1uLCAiT3B0aW9ucyIpOwotCi0JcmVu
ZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVfbmV3KCk7Ci0JZ3RrX3RyZWVfdmlld19j
b2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAotCQkJCQlyZW5k
ZXJlciwgRkFMU0UpOwotCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19U
UkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCi0JCQkJCSAgICByZW5kZXJlciwKLQkJCQkJICAgICJh
Y3RpdmUiLCBDT0xfQlROQUNULAotCQkJCQkgICAgImluY29uc2lzdGVudCIsIENPTF9CVE5JTkMs
Ci0JCQkJCSAgICAidmlzaWJsZSIsIENPTF9CVE5WSVMsCi0JCQkJCSAgICAicmFkaW8iLCBDT0xf
QlROUkFELCBOVUxMKTsKLQlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7
Ci0JZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihj
b2x1bW4pLAotCQkJCQlyZW5kZXJlciwgRkFMU0UpOwotCWd0a190cmVlX3ZpZXdfY29sdW1uX3Nl
dF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCi0JCQkJCSAgICByZW5k
ZXJlciwKLQkJCQkJICAgICJ0ZXh0IiwgQ09MX09QVElPTiwKLQkJCQkJICAgICJmb3JlZ3JvdW5k
LWdkayIsCi0JCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOwotCi0Jc2VsID0gZ3RrX3RyZWVfdmll
d19nZXRfc2VsZWN0aW9uKHZpZXcpOwotCWd0a190cmVlX3NlbGVjdGlvbl9zZXRfbW9kZShzZWws
IEdUS19TRUxFQ1RJT05fU0lOR0xFKTsKLQlndGtfd2lkZ2V0X3JlYWxpemUodHJlZTFfdyk7Ci19
Ci0KLXN0YXRpYyB2b2lkIHJlbmRlcmVyX2VkaXRlZChHdGtDZWxsUmVuZGVyZXJUZXh0ICogY2Vs
bCwKLQkJCSAgICBjb25zdCBnY2hhciAqIHBhdGhfc3RyaW5nLAotCQkJICAgIGNvbnN0IGdjaGFy
ICogbmV3X3RleHQsIGdwb2ludGVyIHVzZXJfZGF0YSk7Ci0KLXN0YXRpYyB2b2lkIGluaXRfcmln
aHRfdHJlZSh2b2lkKQotewotCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh0cmVl
Ml93KTsKLQlHdGtDZWxsUmVuZGVyZXIgKnJlbmRlcmVyOwotCUd0a1RyZWVTZWxlY3Rpb24gKnNl
bDsKLQlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOwotCWdpbnQgaTsKLQotCWd0a190cmVlX3Zp
ZXdfc2V0X21vZGVsKHZpZXcsIG1vZGVsMik7Ci0JZ3RrX3RyZWVfdmlld19zZXRfaGVhZGVyc192
aXNpYmxlKHZpZXcsIFRSVUUpOwotCWd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQodmlldywg
VFJVRSk7Ci0KLQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2NvbHVtbl9uZXcoKTsKLQlndGtfdHJl
ZV92aWV3X2FwcGVuZF9jb2x1bW4odmlldywgY29sdW1uKTsKLQlndGtfdHJlZV92aWV3X2NvbHVt
bl9zZXRfdGl0bGUoY29sdW1uLCAiT3B0aW9ucyIpOwotCi0JcmVuZGVyZXIgPSBndGtfY2VsbF9y
ZW5kZXJlcl9waXhidWZfbmV3KCk7Ci0JZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChH
VEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAotCQkJCQlyZW5kZXJlciwgRkFMU0UpOwotCWd0
a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNv
bHVtbiksCi0JCQkJCSAgICByZW5kZXJlciwKLQkJCQkJICAgICJwaXhidWYiLCBDT0xfUElYQlVG
LAotCQkJCQkgICAgInZpc2libGUiLCBDT0xfUElYVklTLCBOVUxMKTsKLQlyZW5kZXJlciA9IGd0
a19jZWxsX3JlbmRlcmVyX3RvZ2dsZV9uZXcoKTsKLQlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNr
X3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCi0JCQkJCXJlbmRlcmVyLCBGQUxT
RSk7Ci0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0dHJpYnV0ZXMoR1RLX1RSRUVfVklFV19D
T0xVTU4oY29sdW1uKSwKLQkJCQkJICAgIHJlbmRlcmVyLAotCQkJCQkgICAgImFjdGl2ZSIsIENP
TF9CVE5BQ1QsCi0JCQkJCSAgICAiaW5jb25zaXN0ZW50IiwgQ09MX0JUTklOQywKLQkJCQkJICAg
ICJ2aXNpYmxlIiwgQ09MX0JUTlZJUywKLQkJCQkJICAgICJyYWRpbyIsIENPTF9CVE5SQUQsIE5V
TEwpOwotCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsKLQlndGtfdHJl
ZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCi0J
CQkJCXJlbmRlcmVyLCBGQUxTRSk7Ci0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0dHJpYnV0
ZXMoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKLQkJCQkJICAgIHJlbmRlcmVyLAotCQkJ
CQkgICAgInRleHQiLCBDT0xfT1BUSU9OLAotCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwKLQkJ
CQkJICAgIENPTF9DT0xPUiwgTlVMTCk7Ci0KLQlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVy
X3RleHRfbmV3KCk7Ci0JZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRl
cyh2aWV3LCAtMSwKLQkJCQkJCSAgICAiTmFtZSIsIHJlbmRlcmVyLAotCQkJCQkJICAgICJ0ZXh0
IiwgQ09MX05BTUUsCi0JCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwKLQkJCQkJCSAgICBDT0xf
Q09MT1IsIE5VTEwpOwotCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsK
LQlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLAot
CQkJCQkJICAgICJOIiwgcmVuZGVyZXIsCi0JCQkJCQkgICAgInRleHQiLCBDT0xfTk8sCi0JCQkJ
CQkgICAgImZvcmVncm91bmQtZ2RrIiwKLQkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOwotCXJl
bmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsKLQlndGtfdHJlZV92aWV3X2lu
c2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLAotCQkJCQkJICAgICJNIiwgcmVu
ZGVyZXIsCi0JCQkJCQkgICAgInRleHQiLCBDT0xfTU9ELAotCQkJCQkJICAgICJmb3JlZ3JvdW5k
LWdkayIsCi0JCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKLQlyZW5kZXJlciA9IGd0a19jZWxs
X3JlbmRlcmVyX3RleHRfbmV3KCk7Ci0JZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhf
YXR0cmlidXRlcyh2aWV3LCAtMSwKLQkJCQkJCSAgICAiWSIsIHJlbmRlcmVyLAotCQkJCQkJICAg
ICJ0ZXh0IiwgQ09MX1lFUywKLQkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLAotCQkJCQkJICAg
IENPTF9DT0xPUiwgTlVMTCk7Ci0JcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25l
dygpOwotCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywg
LTEsCi0JCQkJCQkgICAgIlZhbHVlIiwgcmVuZGVyZXIsCi0JCQkJCQkgICAgInRleHQiLCBDT0xf
VkFMVUUsCi0JCQkJCQkgICAgImVkaXRhYmxlIiwKLQkJCQkJCSAgICBDT0xfRURJVCwKLQkJCQkJ
CSAgICAiZm9yZWdyb3VuZC1nZGsiLAotCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7Ci0JZ19z
aWduYWxfY29ubmVjdChHX09CSkVDVChyZW5kZXJlciksICJlZGl0ZWQiLAotCQkJIEdfQ0FMTEJB
Q0socmVuZGVyZXJfZWRpdGVkKSwgTlVMTCk7Ci0KLQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dl
dF9jb2x1bW4odmlldywgQ09MX05BTUUpOwotCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNp
YmxlKGNvbHVtbiwgc2hvd19uYW1lKTsKLQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1
bW4odmlldywgQ09MX05PKTsKLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1
bW4sIHNob3dfcmFuZ2UpOwotCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3
LCBDT0xfTU9EKTsKLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNo
b3dfcmFuZ2UpOwotCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xf
WUVTKTsKLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfcmFu
Z2UpOwotCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xfVkFMVUUp
OwotCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwgc2hvd192YWx1ZSk7
Ci0KLQlpZiAocmVzaXplYWJsZSkgewotCQlmb3IgKGkgPSAwOyBpIDwgQ09MX1ZBTFVFOyBpKysp
IHsKLQkJCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBpKTsKLQkJCWd0
a190cmVlX3ZpZXdfY29sdW1uX3NldF9yZXNpemFibGUoY29sdW1uLCBUUlVFKTsKLQkJfQotCX0K
LQotCXNlbCA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbih2aWV3KTsKLQlndGtfdHJlZV9z
ZWxlY3Rpb25fc2V0X21vZGUoc2VsLCBHVEtfU0VMRUNUSU9OX1NJTkdMRSk7Ci19Ci0KLQotLyog
VXRpbGl0eSBGdW5jdGlvbnMgKi8KLQotCi1zdGF0aWMgdm9pZCB0ZXh0X2luc2VydF9oZWxwKHN0
cnVjdCBtZW51ICptZW51KQotewotCUd0a1RleHRCdWZmZXIgKmJ1ZmZlcjsKLQlHdGtUZXh0SXRl
ciBzdGFydCwgZW5kOwotCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51
KTsKLQlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygpOwotCi0JbWVudV9nZXRfZXh0X2hlbHAo
bWVudSwgJmhlbHApOwotCi0JYnVmZmVyID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVyKEdUS19U
RVhUX1ZJRVcodGV4dF93KSk7Ci0JZ3RrX3RleHRfYnVmZmVyX2dldF9ib3VuZHMoYnVmZmVyLCAm
c3RhcnQsICZlbmQpOwotCWd0a190ZXh0X2J1ZmZlcl9kZWxldGUoYnVmZmVyLCAmc3RhcnQsICZl
bmQpOwotCWd0a190ZXh0X3ZpZXdfc2V0X2xlZnRfbWFyZ2luKEdUS19URVhUX1ZJRVcodGV4dF93
KSwgMTUpOwotCi0JZ3RrX3RleHRfYnVmZmVyX2dldF9lbmRfaXRlcihidWZmZXIsICZlbmQpOwot
CWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwgcHJvbXB0LCAt
MSwgdGFnMSwKLQkJCQkJIE5VTEwpOwotCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfYXRfY3Vyc29y
KGJ1ZmZlciwgIlxuXG4iLCAyKTsKLQlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZl
ciwgJmVuZCk7Ci0JZ3RrX3RleHRfYnVmZmVyX2luc2VydF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5k
LCBzdHJfZ2V0KCZoZWxwKSwgLTEsIHRhZzIsCi0JCQkJCSBOVUxMKTsKLQlzdHJfZnJlZSgmaGVs
cCk7Ci19Ci0KLQotc3RhdGljIHZvaWQgdGV4dF9pbnNlcnRfbXNnKGNvbnN0IGNoYXIgKnRpdGxl
LCBjb25zdCBjaGFyICptZXNzYWdlKQotewotCUd0a1RleHRCdWZmZXIgKmJ1ZmZlcjsKLQlHdGtU
ZXh0SXRlciBzdGFydCwgZW5kOwotCWNvbnN0IGNoYXIgKm1zZyA9IG1lc3NhZ2U7Ci0KLQlidWZm
ZXIgPSBndGtfdGV4dF92aWV3X2dldF9idWZmZXIoR1RLX1RFWFRfVklFVyh0ZXh0X3cpKTsKLQln
dGtfdGV4dF9idWZmZXJfZ2V0X2JvdW5kcyhidWZmZXIsICZzdGFydCwgJmVuZCk7Ci0JZ3RrX3Rl
eHRfYnVmZmVyX2RlbGV0ZShidWZmZXIsICZzdGFydCwgJmVuZCk7Ci0JZ3RrX3RleHRfdmlld19z
ZXRfbGVmdF9tYXJnaW4oR1RLX1RFWFRfVklFVyh0ZXh0X3cpLCAxNSk7Ci0KLQlndGtfdGV4dF9i
dWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7Ci0JZ3RrX3RleHRfYnVmZmVyX2luc2Vy
dF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCB0aXRsZSwgLTEsIHRhZzEsCi0JCQkJCSBOVUxMKTsK
LQlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X2F0X2N1cnNvcihidWZmZXIsICJcblxuIiwgMik7Ci0J
Z3RrX3RleHRfYnVmZmVyX2dldF9lbmRfaXRlcihidWZmZXIsICZlbmQpOwotCWd0a190ZXh0X2J1
ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwgbXNnLCAtMSwgdGFnMiwKLQkJCQkJ
IE5VTEwpOwotfQotCi0KLS8qIE1haW4gV2luZG93cyBDYWxsYmFja3MgKi8KLQotdm9pZCBvbl9z
YXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSk7
Ci1nYm9vbGVhbiBvbl93aW5kb3cxX2RlbGV0ZV9ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsIEdk
a0V2ZW50ICogZXZlbnQsCi0JCQkJIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHdGtXaWRnZXQg
KmRpYWxvZywgKmxhYmVsOwotCWdpbnQgcmVzdWx0OwotCi0JaWYgKCFjb25mX2dldF9jaGFuZ2Vk
KCkpCi0JCXJldHVybiBGQUxTRTsKLQotCWRpYWxvZyA9IGd0a19kaWFsb2dfbmV3X3dpdGhfYnV0
dG9ucygiV2FybmluZyAhIiwKLQkJCQkJICAgICBHVEtfV0lORE9XKG1haW5fd25kKSwKLQkJCQkJ
ICAgICAoR3RrRGlhbG9nRmxhZ3MpCi0JCQkJCSAgICAgKEdUS19ESUFMT0dfTU9EQUwgfAotCQkJ
CQkgICAgICBHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQpLAotCQkJCQkgICAgIEdUS19T
VE9DS19PSywKLQkJCQkJICAgICBHVEtfUkVTUE9OU0VfWUVTLAotCQkJCQkgICAgIEdUS19TVE9D
S19OTywKLQkJCQkJICAgICBHVEtfUkVTUE9OU0VfTk8sCi0JCQkJCSAgICAgR1RLX1NUT0NLX0NB
TkNFTCwKLQkJCQkJICAgICBHVEtfUkVTUE9OU0VfQ0FOQ0VMLCBOVUxMKTsKLQlndGtfZGlhbG9n
X3NldF9kZWZhdWx0X3Jlc3BvbnNlKEdUS19ESUFMT0coZGlhbG9nKSwKLQkJCQkJR1RLX1JFU1BP
TlNFX0NBTkNFTCk7Ci0KLQlsYWJlbCA9IGd0a19sYWJlbF9uZXcoIlxuU2F2ZSBjb25maWd1cmF0
aW9uID9cbiIpOwotCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoR1RLX0RJQUxPRyhk
aWFsb2cpLT52Ym94KSwgbGFiZWwpOwotCWd0a193aWRnZXRfc2hvdyhsYWJlbCk7Ci0KLQlyZXN1
bHQgPSBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOwotCXN3aXRjaCAocmVzdWx0
KSB7Ci0JY2FzZSBHVEtfUkVTUE9OU0VfWUVTOgotCQlvbl9zYXZlX2FjdGl2YXRlKE5VTEwsIE5V
TEwpOwotCQlyZXR1cm4gRkFMU0U7Ci0JY2FzZSBHVEtfUkVTUE9OU0VfTk86Ci0JCXJldHVybiBG
QUxTRTsKLQljYXNlIEdUS19SRVNQT05TRV9DQU5DRUw6Ci0JY2FzZSBHVEtfUkVTUE9OU0VfREVM
RVRFX0VWRU5UOgotCWRlZmF1bHQ6Ci0JCWd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwotCQly
ZXR1cm4gVFJVRTsKLQl9Ci0KLQlyZXR1cm4gRkFMU0U7Ci19Ci0KLQotdm9pZCBvbl93aW5kb3cx
X2Rlc3Ryb3koR3RrT2JqZWN0ICogb2JqZWN0LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JZ3Rr
X21haW5fcXVpdCgpOwotfQotCi0KLXZvaWQKLW9uX3dpbmRvdzFfc2l6ZV9yZXF1ZXN0KEd0a1dp
ZGdldCAqIHdpZGdldCwKLQkJCUd0a1JlcXVpc2l0aW9uICogcmVxdWlzaXRpb24sIGdwb2ludGVy
IHVzZXJfZGF0YSkKLXsKLQlzdGF0aWMgZ2ludCBvbGRfaDsKLQlnaW50IHcsIGg7Ci0KLQlpZiAo
d2lkZ2V0LT53aW5kb3cgPT0gTlVMTCkKLQkJZ3RrX3dpbmRvd19nZXRfZGVmYXVsdF9zaXplKEdU
S19XSU5ET1cobWFpbl93bmQpLCAmdywgJmgpOwotCWVsc2UKLQkJZ2RrX3dpbmRvd19nZXRfc2l6
ZSh3aWRnZXQtPndpbmRvdywgJncsICZoKTsKLQotCWlmIChoID09IG9sZF9oKQotCQlyZXR1cm47
Ci0Jb2xkX2ggPSBoOwotCi0JZ3RrX3BhbmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQodnBhbmVk
KSwgMiAqIGggLyAzKTsKLX0KLQotCi0vKiBNZW51ICYgVG9vbGJhciBDYWxsYmFja3MgKi8KLQot
Ci1zdGF0aWMgdm9pZAotbG9hZF9maWxlbmFtZShHdGtGaWxlU2VsZWN0aW9uICogZmlsZV9zZWxl
Y3RvciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCWNvbnN0IGdjaGFyICpmbjsKLQotCWZuID0g
Z3RrX2ZpbGVfc2VsZWN0aW9uX2dldF9maWxlbmFtZShHVEtfRklMRV9TRUxFQ1RJT04KLQkJCQkJ
ICAgICAodXNlcl9kYXRhKSk7Ci0KLQlpZiAoY29uZl9yZWFkKGZuKSkKLQkJdGV4dF9pbnNlcnRf
bXNnKCJFcnJvciIsICJVbmFibGUgdG8gbG9hZCBjb25maWd1cmF0aW9uICEiKTsKLQllbHNlCi0J
CWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOwotfQotCi12b2lkIG9uX2xvYWQxX2FjdGl2YXRlKEd0
a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHdGtXaWRnZXQg
KmZzOwotCi0JZnMgPSBndGtfZmlsZV9zZWxlY3Rpb25fbmV3KCJMb2FkIGZpbGUuLi4iKTsKLQln
X3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+b2tfYnV0
dG9uKSwKLQkJCSAiY2xpY2tlZCIsCi0JCQkgR19DQUxMQkFDSyhsb2FkX2ZpbGVuYW1lKSwgKGdw
b2ludGVyKSBmcyk7Ci0JZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QKLQkJCQkg
KEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksCi0JCQkJICJjbGlja2VkIiwgR19D
QUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLAotCQkJCSAoZ3BvaW50ZXIpIGZzKTsKLQlnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVAotCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9O
KGZzKS0+Y2FuY2VsX2J1dHRvbiksCi0JCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lk
Z2V0X2Rlc3Ryb3kpLAotCQkJCSAoZ3BvaW50ZXIpIGZzKTsKLQlndGtfd2lkZ2V0X3Nob3coZnMp
OwotfQotCi0KLXZvaWQgb25fc2F2ZV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBn
cG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JaWYgKGNvbmZfd3JpdGUoTlVMTCkpCi0JCXRleHRfaW5z
ZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiAhIik7Ci0JY29u
Zl93cml0ZV9hdXRvY29uZigwKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotc3RvcmVfZmlsZW5hbWUo
R3RrRmlsZVNlbGVjdGlvbiAqIGZpbGVfc2VsZWN0b3IsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsK
LQljb25zdCBnY2hhciAqZm47Ci0KLQlmbiA9IGd0a19maWxlX3NlbGVjdGlvbl9nZXRfZmlsZW5h
bWUoR1RLX0ZJTEVfU0VMRUNUSU9OCi0JCQkJCSAgICAgKHVzZXJfZGF0YSkpOwotCi0JaWYgKGNv
bmZfd3JpdGUoZm4pKQotCQl0ZXh0X2luc2VydF9tc2coIkVycm9yIiwgIlVuYWJsZSB0byBzYXZl
IGNvbmZpZ3VyYXRpb24gISIpOwotCi0JZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQodXNl
cl9kYXRhKSk7Ci19Ci0KLXZvaWQgb25fc2F2ZV9hczFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBt
ZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCUd0a1dpZGdldCAqZnM7Ci0KLQlmcyA9
IGd0a19maWxlX3NlbGVjdGlvbl9uZXcoIlNhdmUgZmlsZSBhcy4uLiIpOwotCWdfc2lnbmFsX2Nv
bm5lY3QoR1RLX09CSkVDVChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLAotCQkJ
ICJjbGlja2VkIiwKLQkJCSBHX0NBTExCQUNLKHN0b3JlX2ZpbGVuYW1lKSwgKGdwb2ludGVyKSBm
cyk7Ci0JZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QKLQkJCQkgKEdUS19GSUxF
X1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksCi0JCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhn
dGtfd2lkZ2V0X2Rlc3Ryb3kpLAotCQkJCSAoZ3BvaW50ZXIpIGZzKTsKLQlnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQoR1RLX09CSkVDVAotCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+Y2Fu
Y2VsX2J1dHRvbiksCi0JCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ry
b3kpLAotCQkJCSAoZ3BvaW50ZXIpIGZzKTsKLQlndGtfd2lkZ2V0X3Nob3coZnMpOwotfQotCi0K
LXZvaWQgb25fcXVpdDFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIg
dXNlcl9kYXRhKQotewotCWlmICghb25fd2luZG93MV9kZWxldGVfZXZlbnQoTlVMTCwgTlVMTCwg
TlVMTCkpCi0JCWd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1haW5fd25kKSk7Ci19Ci0K
LQotdm9pZCBvbl9zaG93X25hbWUxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdw
b2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHdGtUcmVlVmlld0NvbHVtbiAqY29sOwotCi0Jc2hvd19u
YW1lID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSktPmFjdGl2ZTsKLQljb2wgPSBndGtf
dHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09MX05BTUUpOwot
CWlmIChjb2wpCi0JCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19u
YW1lKTsKLX0KLQotCi12b2lkIG9uX3Nob3dfcmFuZ2UxX2FjdGl2YXRlKEd0a01lbnVJdGVtICog
bWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHdGtUcmVlVmlld0NvbHVtbiAqY29s
OwotCi0Jc2hvd19yYW5nZSA9IEdUS19DSEVDS19NRU5VX0lURU0obWVudWl0ZW0pLT5hY3RpdmU7
Ci0JY29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyks
IENPTF9OTyk7Ci0JaWYgKGNvbCkKLQkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUo
Y29sLCBzaG93X3JhbmdlKTsKLQljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RS
RUVfVklFVyh0cmVlMl93KSwgQ09MX01PRCk7Ci0JaWYgKGNvbCkKLQkJZ3RrX3RyZWVfdmlld19j
b2x1bW5fc2V0X3Zpc2libGUoY29sLCBzaG93X3JhbmdlKTsKLQljb2wgPSBndGtfdHJlZV92aWV3
X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09MX1lFUyk7Ci0JaWYgKGNvbCkK
LQkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sLCBzaG93X3JhbmdlKTsKLQot
fQotCi0KLXZvaWQgb25fc2hvd19kYXRhMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVt
LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR3RrVHJlZVZpZXdDb2x1bW4gKmNvbDsKLQotCXNo
b3dfdmFsdWUgPSBHVEtfQ0hFQ0tfTUVOVV9JVEVNKG1lbnVpdGVtKS0+YWN0aXZlOwotCWNvbCA9
IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBDT0xfVkFM
VUUpOwotCWlmIChjb2wpCi0JCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwg
c2hvd192YWx1ZSk7Ci19Ci0KLQotdm9pZAotb25fc2V0X29wdGlvbl9tb2RlMV9hY3RpdmF0ZShH
dGtNZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlvcHRfbW9kZSA9
IE9QVF9OT1JNQUw7Ci0JZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOwotCWRpc3BsYXlfdHJl
ZSgmcm9vdG1lbnUpOwkvKiBpbnN0ZWFkIG9mIHVwZGF0ZV90cmVlIHRvIHNwZWVkLXVwICovCi19
Ci0KLQotdm9pZAotb25fc2V0X29wdGlvbl9tb2RlMl9hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVu
dWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlvcHRfbW9kZSA9IE9QVF9BTEw7Ci0JZ3Rr
X3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOwotCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOwkvKiBp
bnN0ZWFkIG9mIHVwZGF0ZV90cmVlIHRvIHNwZWVkLXVwICovCi19Ci0KLQotdm9pZAotb25fc2V0
X29wdGlvbl9tb2RlM19hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVz
ZXJfZGF0YSkKLXsKLQlvcHRfbW9kZSA9IE9QVF9QUk9NUFQ7Ci0JZ3RrX3RyZWVfc3RvcmVfY2xl
YXIodHJlZTIpOwotCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOwkvKiBpbnN0ZWFkIG9mIHVwZGF0
ZV90cmVlIHRvIHNwZWVkLXVwICovCi19Ci0KLQotdm9pZCBvbl9pbnRyb2R1Y3Rpb24xX2FjdGl2
YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHdGtX
aWRnZXQgKmRpYWxvZzsKLQljb25zdCBnY2hhciAqaW50cm9fdGV4dCA9Ci0JICAgICJXZWxjb21l
IHRvIGdrYywgdGhlIEdUSysgZ3JhcGhpY2FsIGNvbmZpZ3VyYXRpb24gdG9vbFxuIgotCSAgICAi
Rm9yIGVhY2ggb3B0aW9uLCBhIGJsYW5rIGJveCBpbmRpY2F0ZXMgdGhlIGZlYXR1cmUgaXMgZGlz
YWJsZWQsIGFcbiIKLQkgICAgImNoZWNrIGluZGljYXRlcyBpdCBpcyBlbmFibGVkLCBhbmQgYSBk
b3QgaW5kaWNhdGVzIHRoYXQgaXQgaXMgdG9cbiIKLQkgICAgImJlIGNvbXBpbGVkIGFzIGEgbW9k
dWxlLiAgQ2xpY2tpbmcgb24gdGhlIGJveCB3aWxsIGN5Y2xlIHRocm91Z2ggdGhlIHRocmVlIHN0
YXRlcy5cbiIKLQkgICAgIlxuIgotCSAgICAiSWYgeW91IGRvIG5vdCBzZWUgYW4gb3B0aW9uIChl
LmcuLCBhIGRldmljZSBkcml2ZXIpIHRoYXQgeW91XG4iCi0JICAgICJiZWxpZXZlIHNob3VsZCBi
ZSBwcmVzZW50LCB0cnkgdHVybmluZyBvbiBTaG93IEFsbCBPcHRpb25zXG4iCi0JICAgICJ1bmRl
ciB0aGUgT3B0aW9ucyBtZW51LlxuIgotCSAgICAiQWx0aG91Z2ggdGhlcmUgaXMgbm8gY3Jvc3Mg
cmVmZXJlbmNlIHlldCB0byBoZWxwIHlvdSBmaWd1cmUgb3V0XG4iCi0JICAgICJ3aGF0IG90aGVy
IG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIHRvIHN1cHBvcnQgdGhlIG9wdGlvbiB5b3VcbiIKLQkg
ICAgImFyZSBpbnRlcmVzdGVkIGluLCB5b3UgY2FuIHN0aWxsIHZpZXcgdGhlIGhlbHAgb2YgYSBn
cmF5ZWQtb3V0XG4iCi0JICAgICJvcHRpb24uXG4iCi0JICAgICJcbiIKLQkgICAgIlRvZ2dsaW5n
IFNob3cgRGVidWcgSW5mbyB1bmRlciB0aGUgT3B0aW9ucyBtZW51IHdpbGwgc2hvdyBcbiIKLQkg
ICAgInRoZSBkZXBlbmRlbmNpZXMsIHdoaWNoIHlvdSBjYW4gdGhlbiBtYXRjaCBieSBleGFtaW5p
bmcgb3RoZXIgb3B0aW9ucy4iOwotCi0JZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhH
VEtfV0lORE9XKG1haW5fd25kKSwKLQkJCQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5U
LAotCQkJCQlHVEtfTUVTU0FHRV9JTkZPLAotCQkJCQlHVEtfQlVUVE9OU19DTE9TRSwgIiVzIiwg
aW50cm9fdGV4dCk7Ci0JZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QoZGlhbG9n
KSwgInJlc3BvbnNlIiwKLQkJCQkgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLAotCQkJ
CSBHVEtfT0JKRUNUKGRpYWxvZykpOwotCWd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTsKLX0K
LQotCi12b2lkIG9uX2Fib3V0MV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9p
bnRlciB1c2VyX2RhdGEpCi17Ci0JR3RrV2lkZ2V0ICpkaWFsb2c7Ci0JY29uc3QgZ2NoYXIgKmFi
b3V0X3RleHQgPQotCSAgICAiZ2tjIGlzIGNvcHlyaWdodCAoYykgMjAwMiBSb21haW4gTGlldmlu
IDxyb21zQGxwZy50aWNhbGMub3JnPi5cbiIKLQkgICAgICAiQmFzZWQgb24gdGhlIHNvdXJjZSBj
b2RlIGZyb20gUm9tYW4gWmlwcGVsLlxuIjsKLQotCWRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxv
Z19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksCi0JCQkJCUdUS19ESUFMT0dfREVTVFJPWV9XSVRI
X1BBUkVOVCwKLQkJCQkJR1RLX01FU1NBR0VfSU5GTywKLQkJCQkJR1RLX0JVVFRPTlNfQ0xPU0Us
ICIlcyIsIGFib3V0X3RleHQpOwotCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNU
KGRpYWxvZyksICJyZXNwb25zZSIsCi0JCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95
KSwKLQkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsKLQlndGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxv
Zyk7Ci19Ci0KLQotdm9pZCBvbl9saWNlbnNlMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVp
dGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR3RrV2lkZ2V0ICpkaWFsb2c7Ci0JY29uc3Qg
Z2NoYXIgKmxpY2Vuc2VfdGV4dCA9Ci0JICAgICJna2MgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR1BMIHYyLlxuIgotCSAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiwg
cGxlYXNlIHNlZSB0aGUgc291cmNlIGNvZGUgb3JcbiIKLQkgICAgICAidmlzaXQgaHR0cDovL3d3
dy5mc2Yub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWxcbiI7Ci0KLQlkaWFsb2cgPSBndGtfbWVz
c2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93bmQpLAotCQkJCQlHVEtfRElBTE9HX0RF
U1RST1lfV0lUSF9QQVJFTlQsCi0JCQkJCUdUS19NRVNTQUdFX0lORk8sCi0JCQkJCUdUS19CVVRU
T05TX0NMT1NFLCAiJXMiLCBsaWNlbnNlX3RleHQpOwotCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChHVEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25zZSIsCi0JCQkJIEdfQ0FMTEJBQ0soZ3RrX3dp
ZGdldF9kZXN0cm95KSwKLQkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsKLQlndGtfd2lkZ2V0X3No
b3dfYWxsKGRpYWxvZyk7Ci19Ci0KLQotdm9pZCBvbl9iYWNrX2NsaWNrZWQoR3RrQnV0dG9uICog
YnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JZW51bSBwcm9wX3R5cGUgcHR5cGU7Ci0K
LQljdXJyZW50ID0gY3VycmVudC0+cGFyZW50OwotCXB0eXBlID0gY3VycmVudC0+cHJvbXB0ID8g
Y3VycmVudC0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwotCWlmIChwdHlwZSAhPSBQX01FTlUp
Ci0JCWN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQ7Ci0JZGlzcGxheV90cmVlX3BhcnQoKTsKLQot
CWlmIChjdXJyZW50ID09ICZyb290bWVudSkKLQkJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJh
Y2tfYnRuLCBGQUxTRSk7Ci19Ci0KLQotdm9pZCBvbl9sb2FkX2NsaWNrZWQoR3RrQnV0dG9uICog
YnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0Jb25fbG9hZDFfYWN0aXZhdGUoTlVMTCwg
dXNlcl9kYXRhKTsKLX0KLQotCi12b2lkIG9uX3NpbmdsZV9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1
dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCXZpZXdfbW9kZSA9IFNJTkdMRV9WSUVXOwot
CWd0a193aWRnZXRfaGlkZSh0cmVlMV93KTsKLQljdXJyZW50ID0gJnJvb3RtZW51OwotCWRpc3Bs
YXlfdHJlZV9wYXJ0KCk7Ci19Ci0KLQotdm9pZCBvbl9zcGxpdF9jbGlja2VkKEd0a0J1dHRvbiAq
IGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCWdpbnQgdywgaDsKLQl2aWV3X21vZGUg
PSBTUExJVF9WSUVXOwotCWd0a193aWRnZXRfc2hvdyh0cmVlMV93KTsKLQlndGtfd2luZG93X2dl
dF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhtYWluX3duZCksICZ3LCAmaCk7Ci0JZ3RrX3BhbmVk
X3NldF9wb3NpdGlvbihHVEtfUEFORUQoaHBhbmVkKSwgdyAvIDIpOwotCWlmICh0cmVlMikKLQkJ
Z3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOwotCWRpc3BsYXlfbGlzdCgpOwotCi0JLyogRGlz
YWJsZSBiYWNrIGJ0biwgbGlrZSBpbiBmdWxsIG1vZGUuICovCi0JZ3RrX3dpZGdldF9zZXRfc2Vu
c2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7Ci19Ci0KLQotdm9pZCBvbl9mdWxsX2NsaWNrZWQoR3Rr
QnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0Jdmlld19tb2RlID0gRlVM
TF9WSUVXOwotCWd0a193aWRnZXRfaGlkZSh0cmVlMV93KTsKLQlpZiAodHJlZTIpCi0JCWd0a190
cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKLQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsKLQlndGtf
d2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsKLX0KLQotCi12b2lkIG9uX2Nv
bGxhcHNlX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCi17
Ci0JZ3RrX3RyZWVfdmlld19jb2xsYXBzZV9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMl93KSk7Ci19
Ci0KLQotdm9pZCBvbl9leHBhbmRfY2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVy
IHVzZXJfZGF0YSkKLXsKLQlndGtfdHJlZV92aWV3X2V4cGFuZF9hbGwoR1RLX1RSRUVfVklFVyh0
cmVlMl93KSk7Ci19Ci0KLQotLyogQ1RyZWUgQ2FsbGJhY2tzICovCi0KLS8qIENoYW5nZSBoZXgv
aW50L3N0cmluZyB2YWx1ZSBpbiB0aGUgY2VsbCAqLwotc3RhdGljIHZvaWQgcmVuZGVyZXJfZWRp
dGVkKEd0a0NlbGxSZW5kZXJlclRleHQgKiBjZWxsLAotCQkJICAgIGNvbnN0IGdjaGFyICogcGF0
aF9zdHJpbmcsCi0JCQkgICAgY29uc3QgZ2NoYXIgKiBuZXdfdGV4dCwgZ3BvaW50ZXIgdXNlcl9k
YXRhKQotewotCUd0a1RyZWVQYXRoICpwYXRoID0gZ3RrX3RyZWVfcGF0aF9uZXdfZnJvbV9zdHJp
bmcocGF0aF9zdHJpbmcpOwotCUd0a1RyZWVJdGVyIGl0ZXI7Ci0JY29uc3QgY2hhciAqb2xkX2Rl
ZiwgKm5ld19kZWY7Ci0Jc3RydWN0IG1lbnUgKm1lbnU7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwot
Ci0JaWYgKCFndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbDIsICZpdGVyLCBwYXRoKSkKLQkJ
cmV0dXJuOwotCi0JZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAm
bWVudSwgLTEpOwotCXN5bSA9IG1lbnUtPnN5bTsKLQotCWd0a190cmVlX21vZGVsX2dldChtb2Rl
bDIsICZpdGVyLCBDT0xfVkFMVUUsICZvbGRfZGVmLCAtMSk7Ci0JbmV3X2RlZiA9IG5ld190ZXh0
OwotCi0Jc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBuZXdfZGVmKTsKLQotCXVwZGF0ZV90cmVl
KCZyb290bWVudSwgTlVMTCk7Ci0KLQlndGtfdHJlZV9wYXRoX2ZyZWUocGF0aCk7Ci19Ci0KLS8q
IENoYW5nZSB0aGUgdmFsdWUgb2YgYSBzeW1ib2wgYW5kIHVwZGF0ZSB0aGUgdHJlZSAqLwotc3Rh
dGljIHZvaWQgY2hhbmdlX3N5bV92YWx1ZShzdHJ1Y3QgbWVudSAqbWVudSwgZ2ludCBjb2wpCi17
Ci0Jc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOwotCXRyaXN0YXRlIG5ld3ZhbDsKLQot
CWlmICghc3ltKQotCQlyZXR1cm47Ci0KLQlpZiAoY29sID09IENPTF9OTykKLQkJbmV3dmFsID0g
bm87Ci0JZWxzZSBpZiAoY29sID09IENPTF9NT0QpCi0JCW5ld3ZhbCA9IG1vZDsKLQllbHNlIGlm
IChjb2wgPT0gQ09MX1lFUykKLQkJbmV3dmFsID0geWVzOwotCWVsc2UKLQkJcmV0dXJuOwotCi0J
c3dpdGNoIChzeW1fZ2V0X3R5cGUoc3ltKSkgewotCWNhc2UgU19CT09MRUFOOgotCWNhc2UgU19U
UklTVEFURToKLQkJaWYgKCFzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbmV3dmFsKSkK
LQkJCW5ld3ZhbCA9IHllczsKLQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCk7
Ci0JCWlmICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQotCQkJdXBkYXRlX3RyZWUoJnJvb3RtZW51
LCBOVUxMKTsKLQkJZWxzZSBpZiAodmlld19tb2RlID09IFNQTElUX1ZJRVcpIHsKLQkJCXVwZGF0
ZV90cmVlKGJyb3dzZWQsIE5VTEwpOwotCQkJZGlzcGxheV9saXN0KCk7Ci0JCX0KLQkJZWxzZSBp
ZiAodmlld19tb2RlID09IFNJTkdMRV9WSUVXKQotCQkJZGlzcGxheV90cmVlX3BhcnQoKTsJLy9m
aXhtZToga2VlcCBleHAvY29sbAotCQlicmVhazsKLQljYXNlIFNfSU5UOgotCWNhc2UgU19IRVg6
Ci0JY2FzZSBTX1NUUklORzoKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyB2
b2lkIHRvZ2dsZV9zeW1fdmFsdWUoc3RydWN0IG1lbnUgKm1lbnUpCi17Ci0JaWYgKCFtZW51LT5z
eW0pCi0JCXJldHVybjsKLQotCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUobWVudS0+c3ltKTsK
LQlpZiAodmlld19tb2RlID09IEZVTExfVklFVykKLQkJdXBkYXRlX3RyZWUoJnJvb3RtZW51LCBO
VUxMKTsKLQllbHNlIGlmICh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykgewotCQl1cGRhdGVfdHJl
ZShicm93c2VkLCBOVUxMKTsKLQkJZGlzcGxheV9saXN0KCk7Ci0JfQotCWVsc2UgaWYgKHZpZXdf
bW9kZSA9PSBTSU5HTEVfVklFVykKLQkJZGlzcGxheV90cmVlX3BhcnQoKTsJLy9maXhtZToga2Vl
cCBleHAvY29sbAotfQotCi1zdGF0aWMgZ2ludCBjb2x1bW4yaW5kZXgoR3RrVHJlZVZpZXdDb2x1
bW4gKiBjb2x1bW4pCi17Ci0JZ2ludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IENPTF9OVU1CRVI7
IGkrKykgewotCQlHdGtUcmVlVmlld0NvbHVtbiAqY29sOwotCi0JCWNvbCA9IGd0a190cmVlX3Zp
ZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBpKTsKLQkJaWYgKGNvbCA9PSBj
b2x1bW4pCi0JCQlyZXR1cm4gaTsKLQl9Ci0KLQlyZXR1cm4gLTE7Ci19Ci0KLQotLyogVXNlciBj
bGljazogdXBkYXRlIGNob2ljZSAoZnVsbCkgb3IgZ29lcyBkb3duIChzaW5nbGUpICovCi1nYm9v
bGVhbgotb25fdHJlZXZpZXcyX2J1dHRvbl9wcmVzc19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQs
Ci0JCQkJR2RrRXZlbnRCdXR0b24gKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCUd0
a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh3aWRnZXQpOwotCUd0a1RyZWVQYXRoICpw
YXRoOwotCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47Ci0JR3RrVHJlZUl0ZXIgaXRlcjsKLQlz
dHJ1Y3QgbWVudSAqbWVudTsKLQlnaW50IGNvbDsKLQotI2lmIEdUS19DSEVDS19WRVJTSU9OKDIs
MSw0KSAvLyBidWcgaW4gY3RyZWUgd2l0aCBlYXJsaWVyIHZlcnNpb24gb2YgR1RLCi0JZ2ludCB0
eCA9IChnaW50KSBldmVudC0+eDsKLQlnaW50IHR5ID0gKGdpbnQpIGV2ZW50LT55OwotCWdpbnQg
Y3gsIGN5OwotCi0JZ3RrX3RyZWVfdmlld19nZXRfcGF0aF9hdF9wb3ModmlldywgdHgsIHR5LCAm
cGF0aCwgJmNvbHVtbiwgJmN4LAotCQkJCSAgICAgICZjeSk7Ci0jZWxzZQotCWd0a190cmVlX3Zp
ZXdfZ2V0X2N1cnNvcih2aWV3LCAmcGF0aCwgJmNvbHVtbik7Ci0jZW5kaWYKLQlpZiAocGF0aCA9
PSBOVUxMKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlpZiAoIWd0a190cmVlX21vZGVsX2dldF9pdGVy
KG1vZGVsMiwgJml0ZXIsIHBhdGgpKQotCQlyZXR1cm4gRkFMU0U7Ci0JZ3RrX3RyZWVfbW9kZWxf
Z2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOwotCi0JY29sID0gY29sdW1u
MmluZGV4KGNvbHVtbik7Ci0JaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKSB7
Ci0JCWVudW0gcHJvcF90eXBlIHB0eXBlOwotCQlwdHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUt
PnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKLQotCQlpZiAocHR5cGUgPT0gUF9NRU5VICYmIHZp
ZXdfbW9kZSAhPSBGVUxMX1ZJRVcgJiYgY29sID09IENPTF9PUFRJT04pIHsKLQkJCS8vIGdvZXMg
ZG93biBpbnRvIG1lbnUKLQkJCWN1cnJlbnQgPSBtZW51OwotCQkJZGlzcGxheV90cmVlX3BhcnQo
KTsKLQkJCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgVFJVRSk7Ci0JCX0gZWxz
ZSBpZiAoY29sID09IENPTF9PUFRJT04pIHsKLQkJCXRvZ2dsZV9zeW1fdmFsdWUobWVudSk7Ci0J
CQlndGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywgcGF0aCwgVFJVRSk7Ci0JCX0KLQl9IGVs
c2UgewotCQlpZiAoY29sID09IENPTF9WQUxVRSkgewotCQkJdG9nZ2xlX3N5bV92YWx1ZShtZW51
KTsKLQkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBUUlVFKTsKLQkJfSBl
bHNlIGlmIChjb2wgPT0gQ09MX05PIHx8IGNvbCA9PSBDT0xfTU9ECi0JCQkgICB8fCBjb2wgPT0g
Q09MX1lFUykgewotCQkJY2hhbmdlX3N5bV92YWx1ZShtZW51LCBjb2wpOwotCQkJZ3RrX3RyZWVf
dmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgsIFRSVUUpOwotCQl9Ci0JfQotCi0JcmV0dXJuIEZB
TFNFOwotfQotCi0vKiBLZXkgcHJlc3NlZDogdXBkYXRlIGNob2ljZSAqLwotZ2Jvb2xlYW4KLW9u
X3RyZWV2aWV3Ml9rZXlfcHJlc3NfZXZlbnQoR3RrV2lkZ2V0ICogd2lkZ2V0LAotCQkJICAgICBH
ZGtFdmVudEtleSAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCi17Ci0JR3RrVHJlZVZpZXcg
KnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7Ci0JR3RrVHJlZVBhdGggKnBhdGg7Ci0JR3Rr
VHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKLQlHdGtUcmVlSXRlciBpdGVyOwotCXN0cnVjdCBtZW51
ICptZW51OwotCWdpbnQgY29sOwotCi0JZ3RrX3RyZWVfdmlld19nZXRfY3Vyc29yKHZpZXcsICZw
YXRoLCAmY29sdW1uKTsKLQlpZiAocGF0aCA9PSBOVUxMKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlp
ZiAoZXZlbnQtPmtleXZhbCA9PSBHREtfc3BhY2UpIHsKLQkJaWYgKGd0a190cmVlX3ZpZXdfcm93
X2V4cGFuZGVkKHZpZXcsIHBhdGgpKQotCQkJZ3RrX3RyZWVfdmlld19jb2xsYXBzZV9yb3codmll
dywgcGF0aCk7Ci0JCWVsc2UKLQkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRo
LCBGQUxTRSk7Ci0JCXJldHVybiBUUlVFOwotCX0KLQlpZiAoZXZlbnQtPmtleXZhbCA9PSBHREtf
S1BfRW50ZXIpIHsKLQl9Ci0JaWYgKHdpZGdldCA9PSB0cmVlMV93KQotCQlyZXR1cm4gRkFMU0U7
Ci0KLQlndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbDIsICZpdGVyLCBwYXRoKTsKLQlndGtf
dHJlZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7Ci0KLQlp
ZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgIm4iKSkKLQkJY29sID0gQ09MX05POwotCWVs
c2UgaWYgKCFzdHJjYXNlY21wKGV2ZW50LT5zdHJpbmcsICJtIikpCi0JCWNvbCA9IENPTF9NT0Q7
Ci0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgInkiKSkKLQkJY29sID0gQ09M
X1lFUzsKLQllbHNlCi0JCWNvbCA9IC0xOwotCWNoYW5nZV9zeW1fdmFsdWUobWVudSwgY29sKTsK
LQotCXJldHVybiBGQUxTRTsKLX0KLQotCi0vKiBSb3cgc2VsZWN0aW9uIGNoYW5nZWQ6IHVwZGF0
ZSBoZWxwICovCi12b2lkCi1vbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQoR3RrVHJlZVZpZXcg
KiB0cmVldmlldywgZ3BvaW50ZXIgdXNlcl9kYXRhKQotewotCUd0a1RyZWVTZWxlY3Rpb24gKnNl
bGVjdGlvbjsKLQlHdGtUcmVlSXRlciBpdGVyOwotCXN0cnVjdCBtZW51ICptZW51OwotCi0Jc2Vs
ZWN0aW9uID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHRyZWV2aWV3KTsKLQlpZiAoZ3Rr
X3RyZWVfc2VsZWN0aW9uX2dldF9zZWxlY3RlZChzZWxlY3Rpb24sICZtb2RlbDIsICZpdGVyKSkg
ewotCQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAt
MSk7Ci0JCXRleHRfaW5zZXJ0X2hlbHAobWVudSk7Ci0JfQotfQotCi0KLS8qIFVzZXIgY2xpY2s6
IGRpc3BsYXkgc3ViLXRyZWUgaW4gdGhlIHJpZ2h0IGZyYW1lLiAqLwotZ2Jvb2xlYW4KLW9uX3Ry
ZWV2aWV3MV9idXR0b25fcHJlc3NfZXZlbnQoR3RrV2lkZ2V0ICogd2lkZ2V0LAotCQkJCUdka0V2
ZW50QnV0dG9uICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKLXsKLQlHdGtUcmVlVmlldyAq
dmlldyA9IEdUS19UUkVFX1ZJRVcod2lkZ2V0KTsKLQlHdGtUcmVlUGF0aCAqcGF0aDsKLQlHdGtU
cmVlVmlld0NvbHVtbiAqY29sdW1uOwotCUd0a1RyZWVJdGVyIGl0ZXI7Ci0Jc3RydWN0IG1lbnUg
Km1lbnU7Ci0KLQlnaW50IHR4ID0gKGdpbnQpIGV2ZW50LT54OwotCWdpbnQgdHkgPSAoZ2ludCkg
ZXZlbnQtPnk7Ci0JZ2ludCBjeCwgY3k7Ci0KLQlndGtfdHJlZV92aWV3X2dldF9wYXRoX2F0X3Bv
cyh2aWV3LCB0eCwgdHksICZwYXRoLCAmY29sdW1uLCAmY3gsCi0JCQkJICAgICAgJmN5KTsKLQlp
ZiAocGF0aCA9PSBOVUxMKQotCQlyZXR1cm4gRkFMU0U7Ci0KLQlndGtfdHJlZV9tb2RlbF9nZXRf
aXRlcihtb2RlbDEsICZpdGVyLCBwYXRoKTsKLQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwxLCAm
aXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7Ci0KLQlpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJC
VVRUT05fUFJFU1MpIHsKLQkJdG9nZ2xlX3N5bV92YWx1ZShtZW51KTsKLQkJY3VycmVudCA9IG1l
bnU7Ci0JCWRpc3BsYXlfdHJlZV9wYXJ0KCk7Ci0JfSBlbHNlIHsKLQkJYnJvd3NlZCA9IG1lbnU7
Ci0JCWRpc3BsYXlfdHJlZV9wYXJ0KCk7Ci0JfQotCi0JZ3RrX3dpZGdldF9yZWFsaXplKHRyZWUy
X3cpOwotCWd0a190cmVlX3ZpZXdfc2V0X2N1cnNvcih2aWV3LCBwYXRoLCBOVUxMLCBGQUxTRSk7
Ci0JZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHRyZWUyX3cpOwotCi0JcmV0dXJuIEZBTFNFOwotfQot
Ci0KLS8qIEZpbGwgYSByb3cgb2Ygc3RyaW5ncyAqLwotc3RhdGljIGdjaGFyICoqZmlsbF9yb3co
c3RydWN0IG1lbnUgKm1lbnUpCi17Ci0Jc3RhdGljIGdjaGFyICpyb3dbQ09MX05VTUJFUl07Ci0J
c3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOwotCWNvbnN0IGNoYXIgKmRlZjsKLQlpbnQg
c3R5cGU7Ci0JdHJpc3RhdGUgdmFsOwotCWVudW0gcHJvcF90eXBlIHB0eXBlOwotCWludCBpOwot
Ci0JZm9yIChpID0gQ09MX09QVElPTjsgaSA8PSBDT0xfQ09MT1I7IGkrKykKLQkJZ19mcmVlKHJv
d1tpXSk7Ci0JYnplcm8ocm93LCBzaXplb2Yocm93KSk7Ci0KLQlyb3dbQ09MX09QVElPTl0gPQot
CSAgICBnX3N0cmR1cF9wcmludGYoIiVzICVzIiwgbWVudV9nZXRfcHJvbXB0KG1lbnUpLAotCQkJ
ICAgIHN5bSAmJiAhc3ltX2hhc192YWx1ZShzeW0pID8gIihORVcpIiA6ICIiKTsKLQotCWlmIChv
cHRfbW9kZSA9PSBPUFRfQUxMICYmICFtZW51X2lzX3Zpc2libGUobWVudSkpCi0JCXJvd1tDT0xf
Q09MT1JdID0gZ19zdHJkdXAoIkRhcmtHcmF5Iik7Ci0JZWxzZSBpZiAob3B0X21vZGUgPT0gT1BU
X1BST01QVCAmJgotCQkJbWVudV9oYXNfcHJvbXB0KG1lbnUpICYmICFtZW51X2lzX3Zpc2libGUo
bWVudSkpCi0JCXJvd1tDT0xfQ09MT1JdID0gZ19zdHJkdXAoIkRhcmtHcmF5Iik7Ci0JZWxzZQot
CQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJCbGFjayIpOwotCi0JcHR5cGUgPSBtZW51LT5w
cm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047Ci0Jc3dpdGNoIChwdHlwZSkg
ewotCWNhc2UgUF9NRU5VOgotCQlyb3dbQ09MX1BJWEJVRl0gPSAoZ2NoYXIgKikgeHBtX21lbnU7
Ci0JCWlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcpCi0JCQlyb3dbQ09MX1BJWFZJU10gPSBH
SU5UX1RPX1BPSU5URVIoVFJVRSk7Ci0JCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRF
UihGQUxTRSk7Ci0JCWJyZWFrOwotCWNhc2UgUF9DT01NRU5UOgotCQlyb3dbQ09MX1BJWEJVRl0g
PSAoZ2NoYXIgKikgeHBtX3ZvaWQ7Ci0JCXJvd1tDT0xfUElYVklTXSA9IEdJTlRfVE9fUE9JTlRF
UihGQUxTRSk7Ci0JCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7Ci0J
CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJvd1tDT0xfUElYQlVGXSA9IChnY2hhciAqKSB4cG1fdm9p
ZDsKLQkJcm93W0NPTF9QSVhWSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsKLQkJcm93W0NP
TF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOwotCQlicmVhazsKLQl9Ci0KLQlpZiAo
IXN5bSkKLQkJcmV0dXJuIHJvdzsKLQlyb3dbQ09MX05BTUVdID0gZ19zdHJkdXAoc3ltLT5uYW1l
KTsKLQotCXN5bV9jYWxjX3ZhbHVlKHN5bSk7Ci0Jc3ltLT5mbGFncyAmPSB+U1lNQk9MX0NIQU5H
RUQ7Ci0KLQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CS8vIHBhcnNlIGNoaWxkcyBmb3IgZ2V0
dGluZyBmaW5hbCB2YWx1ZQotCQlzdHJ1Y3QgbWVudSAqY2hpbGQ7Ci0JCXN0cnVjdCBzeW1ib2wg
KmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOwotCQlzdHJ1Y3QgbWVudSAqZGVm
X21lbnUgPSBOVUxMOwotCi0JCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxT
RSk7Ci0KLQkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0KSB7Ci0JCQlpZiAobWVudV9pc192aXNpYmxlKGNoaWxkKQotCQkJICAgICYmIGNoaWxkLT5z
eW0gPT0gZGVmX3N5bSkKLQkJCQlkZWZfbWVudSA9IGNoaWxkOwotCQl9Ci0KLQkJaWYgKGRlZl9t
ZW51KQotCQkJcm93W0NPTF9WQUxVRV0gPQotCQkJICAgIGdfc3RyZHVwKG1lbnVfZ2V0X3Byb21w
dChkZWZfbWVudSkpOwotCX0KLQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0VWQUwpCi0J
CXJvd1tDT0xfQlROUkFEXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKLQotCXN0eXBlID0gc3lt
X2dldF90eXBlKHN5bSk7Ci0Jc3dpdGNoIChzdHlwZSkgewotCWNhc2UgU19CT09MRUFOOgotCQlp
ZiAoR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfUElYVklTXSkgPT0gRkFMU0UpCi0JCQlyb3dbQ09M
X0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7Ci0JCWlmIChzeW1faXNfY2hvaWNlKHN5
bSkpCi0JCQlicmVhazsKLQkJLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBTX1RSSVNUQVRFOgot
CQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0JCXN3aXRjaCAodmFsKSB7Ci0J
CWNhc2Ugbm86Ci0JCQlyb3dbQ09MX05PXSA9IGdfc3RyZHVwKCJOIik7Ci0JCQlyb3dbQ09MX1ZB
TFVFXSA9IGdfc3RyZHVwKCJOIik7Ci0JCQlyb3dbQ09MX0JUTkFDVF0gPSBHSU5UX1RPX1BPSU5U
RVIoRkFMU0UpOwotCQkJcm93W0NPTF9CVE5JTkNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsK
LQkJCWJyZWFrOwotCQljYXNlIG1vZDoKLQkJCXJvd1tDT0xfTU9EXSA9IGdfc3RyZHVwKCJNIik7
Ci0JCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3RyZHVwKCJNIik7Ci0JCQlyb3dbQ09MX0JUTklOQ10g
PSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7Ci0JCQlicmVhazsKLQkJY2FzZSB5ZXM6Ci0JCQlyb3db
Q09MX1lFU10gPSBnX3N0cmR1cCgiWSIpOwotCQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cCgi
WSIpOwotCQkJcm93W0NPTF9CVE5BQ1RdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOwotCQkJcm93
W0NPTF9CVE5JTkNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsKLQkJCWJyZWFrOwotCQl9Ci0K
LQkJaWYgKHZhbCAhPSBubyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbm8pKQot
CQkJcm93W0NPTF9OT10gPSBnX3N0cmR1cCgiXyIpOwotCQlpZiAodmFsICE9IG1vZCAmJiBzeW1f
dHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbW9kKSkKLQkJCXJvd1tDT0xfTU9EXSA9IGdfc3Ry
ZHVwKCJfIik7Ci0JCWlmICh2YWwgIT0geWVzICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uo
c3ltLCB5ZXMpKQotCQkJcm93W0NPTF9ZRVNdID0gZ19zdHJkdXAoIl8iKTsKLQkJYnJlYWs7Ci0J
Y2FzZSBTX0lOVDoKLQljYXNlIFNfSEVYOgotCWNhc2UgU19TVFJJTkc6Ci0JCWRlZiA9IHN5bV9n
ZXRfc3RyaW5nX3ZhbHVlKHN5bSk7Ci0JCXJvd1tDT0xfVkFMVUVdID0gZ19zdHJkdXAoZGVmKTsK
LQkJcm93W0NPTF9FRElUXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKLQkJcm93W0NPTF9CVE5W
SVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJv
dzsKLX0KLQotCi0vKiBTZXQgdGhlIG5vZGUgY29udGVudCB3aXRoIGEgcm93IG9mIHN0cmluZ3Mg
Ki8KLXN0YXRpYyB2b2lkIHNldF9ub2RlKEd0a1RyZWVJdGVyICogbm9kZSwgc3RydWN0IG1lbnUg
Km1lbnUsIGdjaGFyICoqIHJvdykKLXsKLQlHZGtDb2xvciBjb2xvcjsKLQlnYm9vbGVhbiBzdWNj
ZXNzOwotCUdka1BpeGJ1ZiAqcGl4OwotCi0JcGl4ID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV94cG1f
ZGF0YSgoY29uc3QgY2hhciAqKikKLQkJCQkJICAgcm93W0NPTF9QSVhCVUZdKTsKLQotCWdka19j
b2xvcl9wYXJzZShyb3dbQ09MX0NPTE9SXSwgJmNvbG9yKTsKLQlnZGtfY29sb3JtYXBfYWxsb2Nf
Y29sb3JzKGdka19jb2xvcm1hcF9nZXRfc3lzdGVtKCksICZjb2xvciwgMSwKLQkJCQkgIEZBTFNF
LCBGQUxTRSwgJnN1Y2Nlc3MpOwotCi0JZ3RrX3RyZWVfc3RvcmVfc2V0KHRyZWUsIG5vZGUsCi0J
CQkgICBDT0xfT1BUSU9OLCByb3dbQ09MX09QVElPTl0sCi0JCQkgICBDT0xfTkFNRSwgcm93W0NP
TF9OQU1FXSwKLQkJCSAgIENPTF9OTywgcm93W0NPTF9OT10sCi0JCQkgICBDT0xfTU9ELCByb3db
Q09MX01PRF0sCi0JCQkgICBDT0xfWUVTLCByb3dbQ09MX1lFU10sCi0JCQkgICBDT0xfVkFMVUUs
IHJvd1tDT0xfVkFMVUVdLAotCQkJICAgQ09MX01FTlUsIChncG9pbnRlcikgbWVudSwKLQkJCSAg
IENPTF9DT0xPUiwgJmNvbG9yLAotCQkJICAgQ09MX0VESVQsIEdQT0lOVEVSX1RPX0lOVChyb3db
Q09MX0VESVRdKSwKLQkJCSAgIENPTF9QSVhCVUYsIHBpeCwKLQkJCSAgIENPTF9QSVhWSVMsIEdQ
T0lOVEVSX1RPX0lOVChyb3dbQ09MX1BJWFZJU10pLAotCQkJICAgQ09MX0JUTlZJUywgR1BPSU5U
RVJfVE9fSU5UKHJvd1tDT0xfQlROVklTXSksCi0JCQkgICBDT0xfQlROQUNULCBHUE9JTlRFUl9U
T19JTlQocm93W0NPTF9CVE5BQ1RdKSwKLQkJCSAgIENPTF9CVE5JTkMsIEdQT0lOVEVSX1RPX0lO
VChyb3dbQ09MX0JUTklOQ10pLAotCQkJICAgQ09MX0JUTlJBRCwgR1BPSU5URVJfVE9fSU5UKHJv
d1tDT0xfQlROUkFEXSksCi0JCQkgICAtMSk7Ci0KLQlnX29iamVjdF91bnJlZihwaXgpOwotfQot
Ci0KLS8qIEFkZCBhIG5vZGUgdG8gdGhlIHRyZWUgKi8KLXN0YXRpYyB2b2lkIHBsYWNlX25vZGUo
c3RydWN0IG1lbnUgKm1lbnUsIGNoYXIgKipyb3cpCi17Ci0JR3RrVHJlZUl0ZXIgKnBhcmVudCA9
IHBhcmVudHNbaW5kZW50IC0gMV07Ci0JR3RrVHJlZUl0ZXIgKm5vZGUgPSBwYXJlbnRzW2luZGVu
dF07Ci0KLQlndGtfdHJlZV9zdG9yZV9hcHBlbmQodHJlZSwgbm9kZSwgcGFyZW50KTsKLQlzZXRf
bm9kZShub2RlLCBtZW51LCByb3cpOwotfQotCi0KLS8qIEZpbmQgYSBub2RlIGluIHRoZSBHVEsr
IHRyZWUgKi8KLXN0YXRpYyBHdGtUcmVlSXRlciBmb3VuZDsKLQotLyoKLSAqIEZpbmQgYSBtZW51
IGluIHRoZSBHdGtUcmVlIHN0YXJ0aW5nIGF0IHBhcmVudC4KLSAqLwotc3RhdGljIEd0a1RyZWVJ
dGVyICpndGt0cmVlX2l0ZXJfZmluZF9ub2RlKEd0a1RyZWVJdGVyICpwYXJlbnQsCi0JCQkJCSAg
IHN0cnVjdCBtZW51ICp0b2ZpbmQpCi17Ci0JR3RrVHJlZUl0ZXIgaXRlcjsKLQlHdGtUcmVlSXRl
ciAqY2hpbGQgPSAmaXRlcjsKLQlnYm9vbGVhbiB2YWxpZDsKLQlHdGtUcmVlSXRlciAqcmV0Owot
Ci0JdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX2NoaWxkcmVuKG1vZGVsMiwgY2hpbGQsIHBh
cmVudCk7Ci0Jd2hpbGUgKHZhbGlkKSB7Ci0JCXN0cnVjdCBtZW51ICptZW51OwotCi0JCWd0a190
cmVlX21vZGVsX2dldChtb2RlbDIsIGNoaWxkLCA2LCAmbWVudSwgLTEpOwotCi0JCWlmIChtZW51
ID09IHRvZmluZCkgewotCQkJbWVtY3B5KCZmb3VuZCwgY2hpbGQsIHNpemVvZihHdGtUcmVlSXRl
cikpOwotCQkJcmV0dXJuICZmb3VuZDsKLQkJfQotCi0JCXJldCA9IGd0a3RyZWVfaXRlcl9maW5k
X25vZGUoY2hpbGQsIHRvZmluZCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXZh
bGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwgY2hpbGQpOwotCX0KLQotCXJl
dHVybiBOVUxMOwotfQotCi0KLS8qCi0gKiBVcGRhdGUgdGhlIHRyZWUgYnkgYWRkaW5nL3JlbW92
aW5nIGVudHJpZXMKLSAqIERvZXMgbm90IGNoYW5nZSBvdGhlciBub2RlcwotICovCi1zdGF0aWMg
dm9pZCB1cGRhdGVfdHJlZShzdHJ1Y3QgbWVudSAqc3JjLCBHdGtUcmVlSXRlciAqIGRzdCkKLXsK
LQlzdHJ1Y3QgbWVudSAqY2hpbGQxOwotCUd0a1RyZWVJdGVyIGl0ZXIsIHRtcDsKLQlHdGtUcmVl
SXRlciAqY2hpbGQyID0gJml0ZXI7Ci0JZ2Jvb2xlYW4gdmFsaWQ7Ci0JR3RrVHJlZUl0ZXIgKnNp
Ymxpbmc7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBtZW51ICptZW51MSwgKm1lbnUy
OwotCi0JaWYgKHNyYyA9PSAmcm9vdG1lbnUpCi0JCWluZGVudCA9IDE7Ci0KLQl2YWxpZCA9IGd0
a190cmVlX21vZGVsX2l0ZXJfY2hpbGRyZW4obW9kZWwyLCBjaGlsZDIsIGRzdCk7Ci0JZm9yIChj
aGlsZDEgPSBzcmMtPmxpc3Q7IGNoaWxkMTsgY2hpbGQxID0gY2hpbGQxLT5uZXh0KSB7Ci0KLQkJ
c3ltID0gY2hpbGQxLT5zeW07Ci0KLQkgICAgICByZXBhcnNlOgotCQltZW51MSA9IGNoaWxkMTsK
LQkJaWYgKHZhbGlkKQotCQkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgY2hpbGQyLCBDT0xf
TUVOVSwKLQkJCQkJICAgJm1lbnUyLCAtMSk7Ci0JCWVsc2UKLQkJCW1lbnUyID0gTlVMTDsJLy8g
Zm9yY2UgYWRkaW5nIG9mIGEgZmlyc3QgY2hpbGQKLQotI2lmZGVmIERFQlVHCi0JCXByaW50Zigi
JSpjJXMgfCAlc1xuIiwgaW5kZW50LCAnICcsCi0JCSAgICAgICBtZW51MSA/IG1lbnVfZ2V0X3By
b21wdChtZW51MSkgOiAibmlsIiwKLQkJICAgICAgIG1lbnUyID8gbWVudV9nZXRfcHJvbXB0KG1l
bnUyKSA6ICJuaWwiKTsKLSNlbmRpZgotCi0JCWlmICgob3B0X21vZGUgPT0gT1BUX05PUk1BTCAm
JiAhbWVudV9pc192aXNpYmxlKGNoaWxkMSkpIHx8Ci0JCSAgICAob3B0X21vZGUgPT0gT1BUX1BS
T01QVCAmJiAhbWVudV9oYXNfcHJvbXB0KGNoaWxkMSkpIHx8Ci0JCSAgICAob3B0X21vZGUgPT0g
T1BUX0FMTCAgICAmJiAhbWVudV9nZXRfcHJvbXB0KGNoaWxkMSkpKSB7Ci0KLQkJCS8qIHJlbW92
ZSBub2RlICovCi0JCQlpZiAoZ3RrdHJlZV9pdGVyX2ZpbmRfbm9kZShkc3QsIG1lbnUxKSAhPSBO
VUxMKSB7Ci0JCQkJbWVtY3B5KCZ0bXAsIGNoaWxkMiwgc2l6ZW9mKEd0a1RyZWVJdGVyKSk7Ci0J
CQkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQobW9kZWwyLAotCQkJCQkJCQkgY2hp
bGQyKTsKLQkJCQlndGtfdHJlZV9zdG9yZV9yZW1vdmUodHJlZTIsICZ0bXApOwotCQkJCWlmICgh
dmFsaWQpCi0JCQkJCXJldHVybjsJCS8qIG5leHQgcGFyZW50ICovCi0JCQkJZWxzZQotCQkJCQln
b3RvIHJlcGFyc2U7CS8qIG5leHQgY2hpbGQgKi8KLQkJCX0gZWxzZQotCQkJCWNvbnRpbnVlOwot
CQl9Ci0KLQkJaWYgKG1lbnUxICE9IG1lbnUyKSB7Ci0JCQlpZiAoZ3RrdHJlZV9pdGVyX2ZpbmRf
bm9kZShkc3QsIG1lbnUxKSA9PSBOVUxMKSB7CS8vIGFkZCBub2RlCi0JCQkJaWYgKCF2YWxpZCAm
JiAhbWVudTIpCi0JCQkJCXNpYmxpbmcgPSBOVUxMOwotCQkJCWVsc2UKLQkJCQkJc2libGluZyA9
IGNoaWxkMjsKLQkJCQlndGtfdHJlZV9zdG9yZV9pbnNlcnRfYmVmb3JlKHRyZWUyLAotCQkJCQkJ
CSAgICAgY2hpbGQyLAotCQkJCQkJCSAgICAgZHN0LCBzaWJsaW5nKTsKLQkJCQlzZXRfbm9kZShj
aGlsZDIsIG1lbnUxLCBmaWxsX3JvdyhtZW51MSkpOwotCQkJCWlmIChtZW51MiA9PSBOVUxMKQot
CQkJCQl2YWxpZCA9IFRSVUU7Ci0JCQl9IGVsc2UgewkvLyByZW1vdmUgbm9kZQotCQkJCW1lbWNw
eSgmdG1wLCBjaGlsZDIsIHNpemVvZihHdGtUcmVlSXRlcikpOwotCQkJCXZhbGlkID0gZ3RrX3Ry
ZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwKLQkJCQkJCQkJIGNoaWxkMik7Ci0JCQkJZ3RrX3Ry
ZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAmdG1wKTsKLQkJCQlpZiAoIXZhbGlkKQotCQkJCQlyZXR1
cm47CS8vIG5leHQgcGFyZW50Ci0JCQkJZWxzZQotCQkJCQlnb3RvIHJlcGFyc2U7CS8vIG5leHQg
Y2hpbGQKLQkJCX0KLQkJfSBlbHNlIGlmIChzeW0gJiYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hB
TkdFRCkpIHsKLQkJCXNldF9ub2RlKGNoaWxkMiwgbWVudTEsIGZpbGxfcm93KG1lbnUxKSk7Ci0J
CX0KLQotCQlpbmRlbnQrKzsKLQkJdXBkYXRlX3RyZWUoY2hpbGQxLCBjaGlsZDIpOwotCQlpbmRl
bnQtLTsKLQotCQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChtb2RlbDIsIGNoaWxk
Mik7Ci0JfQotfQotCi0KLS8qIERpc3BsYXkgdGhlIHdob2xlIHRyZWUgKHNpbmdsZS9zcGxpdC9m
dWxsIHZpZXcpICovCi1zdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWUoc3RydWN0IG1lbnUgKm1lbnUp
Ci17Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1
Y3QgbWVudSAqY2hpbGQ7Ci0JZW51bSBwcm9wX3R5cGUgcHR5cGU7Ci0KLQlpZiAobWVudSA9PSAm
cm9vdG1lbnUpIHsKLQkJaW5kZW50ID0gMTsKLQkJY3VycmVudCA9ICZyb290bWVudTsKLQl9Ci0K
LQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsK
LQkJcHJvcCA9IGNoaWxkLT5wcm9tcHQ7Ci0JCXN5bSA9IGNoaWxkLT5zeW07Ci0JCXB0eXBlID0g
cHJvcCA/IHByb3AtPnR5cGUgOiBQX1VOS05PV047Ci0KLQkJaWYgKHN5bSkKLQkJCXN5bS0+Zmxh
Z3MgJj0gflNZTUJPTF9DSEFOR0VEOwotCi0JCWlmICgodmlld19tb2RlID09IFNQTElUX1ZJRVcp
Ci0JCSAgICAmJiAhKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkgJiYgKHRyZWUgPT0gdHJlZTEp
KQotCQkJY29udGludWU7Ci0KLQkJaWYgKCh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykgJiYgKGNo
aWxkLT5mbGFncyAmIE1FTlVfUk9PVCkKLQkJICAgICYmICh0cmVlID09IHRyZWUyKSkKLQkJCWNv
bnRpbnVlOwotCi0JCWlmICgob3B0X21vZGUgPT0gT1BUX05PUk1BTCAmJiBtZW51X2lzX3Zpc2li
bGUoY2hpbGQpKSB8fAotCQkgICAgKG9wdF9tb2RlID09IE9QVF9QUk9NUFQgJiYgbWVudV9oYXNf
cHJvbXB0KGNoaWxkKSkgfHwKLQkJICAgIChvcHRfbW9kZSA9PSBPUFRfQUxMICAgICYmIG1lbnVf
Z2V0X3Byb21wdChjaGlsZCkpKQotCQkJcGxhY2Vfbm9kZShjaGlsZCwgZmlsbF9yb3coY2hpbGQp
KTsKLSNpZmRlZiBERUJVRwotCQlwcmludGYoIiUqYyVzOiAiLCBpbmRlbnQsICcgJywgbWVudV9n
ZXRfcHJvbXB0KGNoaWxkKSk7Ci0JCXByaW50ZigiJXMiLCBjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JP
T1QgPyAicm9vdG1lbnUgfCAiIDogIiIpOwotCQlwcmludGYoIiVzIiwgcHJvcF9nZXRfdHlwZV9u
YW1lKHB0eXBlKSk7Ci0JCXByaW50ZigiIHwgIik7Ci0JCWlmIChzeW0pIHsKLQkJCXByaW50Zigi
JXMiLCBzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOwotCQkJcHJpbnRmKCIgfCAiKTsKLQkJCXBy
aW50ZigiJXMiLCBkYmdfc3ltX2ZsYWdzKHN5bS0+ZmxhZ3MpKTsKLQkJCXByaW50ZigiXG4iKTsK
LQkJfSBlbHNlCi0JCQlwcmludGYoIlxuIik7Ci0jZW5kaWYKLQkJaWYgKCh2aWV3X21vZGUgIT0g
RlVMTF9WSUVXKSAmJiAocHR5cGUgPT0gUF9NRU5VKQotCQkgICAgJiYgKHRyZWUgPT0gdHJlZTIp
KQotCQkJY29udGludWU7Ci0vKgotCQlpZiAoKChtZW51ICE9ICZyb290bWVudSkgJiYgIShtZW51
LT5mbGFncyAmIE1FTlVfUk9PVCkpCi0JCSAgICB8fCAodmlld19tb2RlID09IEZVTExfVklFVykK
LQkJICAgIHx8ICh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykpKi8KLQotCQkvKiBDaGFuZ2UgcGFu
ZWQgcG9zaXRpb24gaWYgdGhlIHZpZXcgaXMgbm90IGluICdzcGxpdCBtb2RlJyAqLwotCQlpZiAo
dmlld19tb2RlID09IFNJTkdMRV9WSUVXIHx8IHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpIHsKLQkJ
CWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKGhwYW5lZCksIDApOwotCQl9Ci0KLQkJ
aWYgKCgodmlld19tb2RlID09IFNJTkdMRV9WSUVXKSAmJiAobWVudS0+ZmxhZ3MgJiBNRU5VX1JP
T1QpKQotCQkgICAgfHwgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpCi0JCSAgICB8fCAodmlld19t
b2RlID09IFNQTElUX1ZJRVcpKSB7Ci0JCQlpbmRlbnQrKzsKLQkJCWRpc3BsYXlfdHJlZShjaGls
ZCk7Ci0JCQlpbmRlbnQtLTsKLQkJfQotCX0KLX0KLQotLyogRGlzcGxheSBhIHBhcnQgb2YgdGhl
IHRyZWUgc3RhcnRpbmcgYXQgY3VycmVudCBub2RlIChzaW5nbGUvc3BsaXQgdmlldykgKi8KLXN0
YXRpYyB2b2lkIGRpc3BsYXlfdHJlZV9wYXJ0KHZvaWQpCi17Ci0JaWYgKHRyZWUyKQotCQlndGtf
dHJlZV9zdG9yZV9jbGVhcih0cmVlMik7Ci0JaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykK
LQkJZGlzcGxheV90cmVlKGN1cnJlbnQpOwotCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTUExJVF9W
SUVXKQotCQlkaXNwbGF5X3RyZWUoYnJvd3NlZCk7Ci0JZ3RrX3RyZWVfdmlld19leHBhbmRfYWxs
KEdUS19UUkVFX1ZJRVcodHJlZTJfdykpOwotfQotCi0vKiBEaXNwbGF5IHRoZSBsaXN0IGluIHRo
ZSBsZWZ0IGZyYW1lIChzcGxpdCB2aWV3KSAqLwotc3RhdGljIHZvaWQgZGlzcGxheV9saXN0KHZv
aWQpCi17Ci0JaWYgKHRyZWUxKQotCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMSk7Ci0KLQl0
cmVlID0gdHJlZTE7Ci0JZGlzcGxheV90cmVlKCZyb290bWVudSk7Ci0JZ3RrX3RyZWVfdmlld19l
eHBhbmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTFfdykpOwotCXRyZWUgPSB0cmVlMjsKLX0KLQot
c3RhdGljIHZvaWQgZml4dXBfcm9vdG1lbnUoc3RydWN0IG1lbnUgKm1lbnUpCi17Ci0Jc3RydWN0
IG1lbnUgKmNoaWxkOwotCXN0YXRpYyBpbnQgbWVudV9jbnQgPSAwOwotCi0JbWVudS0+ZmxhZ3Mg
fD0gTUVOVV9ST09UOwotCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dCkgewotCQlpZiAoY2hpbGQtPnByb21wdCAmJiBjaGlsZC0+cHJvbXB0LT50eXBl
ID09IFBfTUVOVSkgewotCQkJbWVudV9jbnQrKzsKLQkJCWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsK
LQkJCW1lbnVfY250LS07Ci0JCX0gZWxzZSBpZiAoIW1lbnVfY250KQotCQkJZml4dXBfcm9vdG1l
bnUoY2hpbGQpOwotCX0KLX0KLQotCi0vKiBNYWluICovCi1pbnQgbWFpbihpbnQgYWMsIGNoYXIg
KmF2W10pCi17Ci0JY29uc3QgY2hhciAqbmFtZTsKLQljaGFyICplbnY7Ci0JZ2NoYXIgKmdsYWRl
X2ZpbGU7Ci0KLQkvKiBHVEsgc3R1ZmZzICovCi0JZ3RrX3NldF9sb2NhbGUoKTsKLQlndGtfaW5p
dCgmYWMsICZhdik7Ci0JZ2xhZGVfaW5pdCgpOwotCi0JLy9hZGRfcGl4bWFwX2RpcmVjdG9yeSAo
UEFDS0FHRV9EQVRBX0RJUiAiLyIgUEFDS0FHRSAiL3BpeG1hcHMiKTsKLQkvL2FkZF9waXhtYXBf
ZGlyZWN0b3J5IChQQUNLQUdFX1NPVVJDRV9ESVIgIi9waXhtYXBzIik7Ci0KLQkvKiBEZXRlcm1p
bmUgR1VJIHBhdGggKi8KLQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7Ci0JaWYgKGVudikKLQkJZ2xh
ZGVfZmlsZSA9IGdfc3RyY29uY2F0KGVudiwgIi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuZ2xhZGUi
LCBOVUxMKTsKLQllbHNlIGlmIChhdlswXVswXSA9PSAnLycpCi0JCWdsYWRlX2ZpbGUgPSBnX3N0
cmNvbmNhdChhdlswXSwgIi5nbGFkZSIsIE5VTEwpOwotCWVsc2UKLQkJZ2xhZGVfZmlsZSA9IGdf
c3RyY29uY2F0KGdfZ2V0X2N1cnJlbnRfZGlyKCksICIvIiwgYXZbMF0sICIuZ2xhZGUiLCBOVUxM
KTsKLQotCS8qIENvbmYgc3R1ZmZzICovCi0JaWYgKGFjID4gMSAmJiBhdlsxXVswXSA9PSAnLScp
IHsKLQkJc3dpdGNoIChhdlsxXVsxXSkgewotCQljYXNlICdhJzoKLQkJCS8vc2hvd0FsbCA9IDE7
Ci0JCQlicmVhazsKLQkJY2FzZSAncyc6Ci0JCQljb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKE5V
TEwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ2gnOgotCQljYXNlICc/JzoKLQkJCXByaW50ZigiJXMg
Wy1zXSA8Y29uZmlnPlxuIiwgYXZbMF0pOwotCQkJZXhpdCgwKTsKLQkJfQotCQluYW1lID0gYXZb
Ml07Ci0JfSBlbHNlCi0JCW5hbWUgPSBhdlsxXTsKLQotCWNvbmZfcGFyc2UobmFtZSk7Ci0JZml4
dXBfcm9vdG1lbnUoJnJvb3RtZW51KTsKLQljb25mX3JlYWQoTlVMTCk7Ci0KLQkvKiBMb2FkIHRo
ZSBpbnRlcmZhY2UgYW5kIGNvbm5lY3Qgc2lnbmFscyAqLwotCWluaXRfbWFpbl93aW5kb3coZ2xh
ZGVfZmlsZSk7Ci0JaW5pdF90cmVlX21vZGVsKCk7Ci0JaW5pdF9sZWZ0X3RyZWUoKTsKLQlpbml0
X3JpZ2h0X3RyZWUoKTsKLQotCXN3aXRjaCAodmlld19tb2RlKSB7Ci0JY2FzZSBTSU5HTEVfVklF
VzoKLQkJZGlzcGxheV90cmVlX3BhcnQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTUExJVF9WSUVXOgot
CQlkaXNwbGF5X2xpc3QoKTsKLQkJYnJlYWs7Ci0JY2FzZSBGVUxMX1ZJRVc6Ci0JCWRpc3BsYXlf
dHJlZSgmcm9vdG1lbnUpOwotCQlicmVhazsKLQl9Ci0KLQlndGtfbWFpbigpOwotCi0JcmV0dXJu
IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKQotewotCWJvb2wgY2hhbmdl
ZCA9IGNvbmZfZ2V0X2NoYW5nZWQoKTsKLQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoc2F2ZV9i
dG4sIGNoYW5nZWQpOwotCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShzYXZlX21lbnVfaXRlbSwg
Y2hhbmdlZCk7Ci19CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRl
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDNlOTdkNy4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25m
LmdsYWRlCisrKyAvZGV2L251bGwKQEAgLTEsNjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEu
MCIgc3RhbmRhbG9uZT0ibm8iPz4gPCEtLSotIG1vZGU6IHhtbCAtKi0tPgotCi08Z2xhZGUtaW50
ZXJmYWNlPgotCi08d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cxIj4KLSAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotICA8cHJvcGVydHkgbmFtZT0i
dGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgVW5pa3JhZnQgQ29uZmlndXJhdG9yPC9wcm9w
ZXJ0eT4KLSAgPHByb3BlcnR5IG5hbWU9InR5cGUiPkdUS19XSU5ET1dfVE9QTEVWRUw8L3Byb3Bl
cnR5PgotICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19OT05F
PC9wcm9wZXJ0eT4KLSAgPHByb3BlcnR5IG5hbWU9Im1vZGFsIj5GYWxzZTwvcHJvcGVydHk+Ci0g
IDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0X3dpZHRoIj42NDA8L3Byb3BlcnR5PgotICA8cHJvcGVy
dHkgbmFtZT0iZGVmYXVsdF9oZWlnaHQiPjQ4MDwvcHJvcGVydHk+Ci0gIDxwcm9wZXJ0eSBuYW1l
PSJyZXNpemFibGUiPlRydWU8L3Byb3BlcnR5PgotICA8cHJvcGVydHkgbmFtZT0iZGVzdHJveV93
aXRoX3BhcmVudCI+RmFsc2U8L3Byb3BlcnR5PgotICA8cHJvcGVydHkgbmFtZT0iZGVjb3JhdGVk
Ij5UcnVlPC9wcm9wZXJ0eT4KLSAgPHByb3BlcnR5IG5hbWU9InNraXBfdGFza2Jhcl9oaW50Ij5G
YWxzZTwvcHJvcGVydHk+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJza2lwX3BhZ2VyX2hpbnQiPkZhbHNl
PC9wcm9wZXJ0eT4KLSAgPHByb3BlcnR5IG5hbWU9InR5cGVfaGludCI+R0RLX1dJTkRPV19UWVBF
X0hJTlRfTk9STUFMPC9wcm9wZXJ0eT4KLSAgPHByb3BlcnR5IG5hbWU9ImdyYXZpdHkiPkdES19H
UkFWSVRZX05PUlRIX1dFU1Q8L3Byb3BlcnR5PgotICA8c2lnbmFsIG5hbWU9ImRlc3Ryb3kiIGhh
bmRsZXI9Im9uX3dpbmRvdzFfZGVzdHJveSIgb2JqZWN0PSJ3aW5kb3cxIi8+Ci0gIDxzaWduYWwg
bmFtZT0ic2l6ZV9yZXF1ZXN0IiBoYW5kbGVyPSJvbl93aW5kb3cxX3NpemVfcmVxdWVzdCIgb2Jq
ZWN0PSJ2cGFuZWQxIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDExIEphbiAyMDAyIDE2
OjE3OjExIEdNVCIvPgotICA8c2lnbmFsIG5hbWU9ImRlbGV0ZV9ldmVudCIgaGFuZGxlcj0ib25f
d2luZG93MV9kZWxldGVfZXZlbnQiIG9iamVjdD0id2luZG93MSIgbGFzdF9tb2RpZmljYXRpb25f
dGltZT0iU3VuLCAwOSBNYXIgMjAwMyAxOTo0Mjo0NiBHTVQiLz4KLQotICA8Y2hpbGQ+Ci0gICAg
PHdpZGdldCBjbGFzcz0iR3RrVkJveCIgaWQ9InZib3gxIj4KLSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2Vu
ZW91cyI+RmFsc2U8L3Byb3BlcnR5PgotICAgICAgPHByb3BlcnR5IG5hbWU9InNwYWNpbmciPjA8
L3Byb3BlcnR5PgotCi0gICAgICA8Y2hpbGQ+Ci0JPHdpZGdldCBjbGFzcz0iR3RrTWVudUJhciIg
aWQ9Im1lbnViYXIxIj4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4KLQotCSAgPGNoaWxkPgotCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9ImZp
bGUxIj4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0J
ICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0ZpbGU8L3By
b3BlcnR5PgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9w
ZXJ0eT4KLQotCSAgICAgIDxjaGlsZD4KLQkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9ImZp
bGUxX21lbnUiPgotCi0JCSAgPGNoaWxkPgotCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VN
ZW51SXRlbSIgaWQ9ImxvYWQxIj4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRh
YmxlPSJ5ZXMiPkxvYWQgYSBjb25maWcgZmlsZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9Mb2FkPC9wcm9wZXJ0eT4KLQkJICAg
ICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgotCQkgICAg
ICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9sb2FkMV9hY3RpdmF0ZSIvPgot
CQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJMIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0si
IHNpZ25hbD0iYWN0aXZhdGUiLz4KLQotCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9Imlt
YWdlIj4KLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2UzOSI+Ci0JCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJCSAgPHByb3BlcnR5IG5h
bWU9InN0b2NrIj5ndGstb3BlbjwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29u
X3NpemUiPjE8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3By
b3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5PgotCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ5cGFkIj4wPC9wcm9wZXJ0eT4KLQkJCTwvd2lkZ2V0PgotCQkgICAgICA8L2NoaWxkPgotCQkg
ICAgPC93aWRnZXQ+Ci0JCSAgPC9jaGlsZD4KLQotCQkgIDxjaGlsZD4KLQkJICAgIDx3aWRnZXQg
Y2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJzYXZlMSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InRv
b2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZlIHRoZSBjb25maWcgaW4gLmNvbmZpZzwvcHJv
cGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
Pl9TYXZlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUi
PlRydWU8L3Byb3BlcnR5PgotCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVy
PSJvbl9zYXZlX2FjdGl2YXRlIi8+Ci0JCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IlMiIG1vZGlm
aWVycz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPgotCi0JCSAgICAgIDxj
aGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPgotCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2Ui
IGlkPSJpbWFnZTQwIj4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1zYXZlPC9wcm9wZXJ0eT4KLQkJ
CSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxp
Z24iPjAuNTwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0
eT4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5PgotCQkJPC93aWRnZXQ+
Ci0JCSAgICAgIDwvY2hpbGQ+Ci0JCSAgICA8L3dpZGdldD4KLQkJICA8L2NoaWxkPgotCi0JCSAg
PGNoaWxkPgotCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9InNhdmVf
YXMxIj4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pgot
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUg
dGhlIGNvbmZpZyBpbiBhIGZpbGU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
bGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZlIF9hczwvcHJvcGVydHk+Ci0JCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHNp
Z25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2F2ZV9hczFfYWN0aXZhdGUiLz4KLQot
CQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4KLQkJCTx3aWRnZXQgY2xhc3M9
Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0MSI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstc2F2ZS1hczwv
cHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5Pgot
CQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVy
dHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieHBh
ZCI+MDwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4K
LQkJCTwvd2lkZ2V0PgotCQkgICAgICA8L2NoaWxkPgotCQkgICAgPC93aWRnZXQ+Ci0JCSAgPC9j
aGlsZD4KLQotCQkgIDxjaGlsZD4KLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1NlcGFyYXRvck1l
bnVJdGVtIiBpZD0ic2VwYXJhdG9yMSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgIDwvd2lkZ2V0PgotCQkgIDwvY2hpbGQ+Ci0KLQkJICA8
Y2hpbGQ+Ci0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0icXVpdDEi
PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9RdWl0PC9wcm9w
ZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5PgotCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9xdWl0MV9h
Y3RpdmF0ZSIvPgotCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJRIiBtb2RpZmllcnM9IkdES19D
T05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4KLQotCQkgICAgICA8Y2hpbGQgaW50ZXJu
YWwtY2hpbGQ9ImltYWdlIj4KLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0
MiI+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJCSAg
PHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstcXVpdDwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0
eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieGFs
aWduIj4wLjU8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3By
b3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+Ci0JCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KLQkJCTwvd2lkZ2V0PgotCQkgICAgICA8
L2NoaWxkPgotCQkgICAgPC93aWRnZXQ+Ci0JCSAgPC9jaGlsZD4KLQkJPC93aWRnZXQ+Ci0JICAg
ICAgPC9jaGlsZD4KLQkgICAgPC93aWRnZXQ+Ci0JICA8L2NoaWxkPgotCi0JICA8Y2hpbGQ+Ci0J
ICAgIDx3aWRnZXQgY2xhc3M9Ikd0a01lbnVJdGVtIiBpZD0ib3B0aW9uczEiPgotCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkgICAgICA8cHJvcGVydHkg
bmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fT3B0aW9uczwvcHJvcGVydHk+Ci0JICAg
ICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgotCi0JICAg
ICAgPGNoaWxkPgotCQk8d2lkZ2V0IGNsYXNzPSJHdGtNZW51IiBpZD0ib3B0aW9uczFfbWVudSI+
Ci0KLQkJICA8Y2hpbGQ+Ci0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDaGVja01lbnVJdGVtIiBp
ZD0ic2hvd19uYW1lMSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0i
eWVzIj5TaG93IG5hbWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwi
IHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IF9uYW1lPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3Bl
cnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxzaWduYWwgbmFtZT0i
YWN0aXZhdGUiIGhhbmRsZXI9Im9uX3Nob3dfbmFtZTFfYWN0aXZhdGUiLz4KLQkJICAgIDwvd2lk
Z2V0PgotCQkgIDwvY2hpbGQ+Ci0KLQkJICA8Y2hpbGQ+Ci0JCSAgICA8d2lkZ2V0IGNsYXNzPSJH
dGtDaGVja01lbnVJdGVtIiBpZD0ic2hvd19yYW5nZTEiPgotCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29s
dGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyByYW5nZSAoWS9NL04pPC9wcm9wZXJ0eT4KLQkJ
ICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfcmFu
Z2U8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPkZhbHNlPC9wcm9w
ZXJ0eT4KLQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2hvd19y
YW5nZTFfYWN0aXZhdGUiLz4KLQkJICAgIDwvd2lkZ2V0PgotCQkgIDwvY2hpbGQ+Ci0KLQkJICA8
Y2hpbGQ+Ci0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDaGVja01lbnVJdGVtIiBpZD0ic2hvd19k
YXRhMSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4K
LQkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93
IHZhbHVlIG9mIHRoZSBvcHRpb248L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
bGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IF9kYXRhPC9wcm9wZXJ0eT4KLQkJICAgICAg
PHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgotCQkgICAgICA8
cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxzaWduYWwg
bmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3Nob3dfZGF0YTFfYWN0aXZhdGUiLz4KLQkJICAg
IDwvd2lkZ2V0PgotCQkgIDwvY2hpbGQ+Ci0KLQkJICA8Y2hpbGQ+Ci0JCSAgICA8d2lkZ2V0IGNs
YXNzPSJHdGtTZXBhcmF0b3JNZW51SXRlbSIgaWQ9InNlcGFyYXRvcjIiPgotCQkgICAgICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICA8L3dpZGdldD4KLQkJ
ICA8L2NoaWxkPgotCi0JCSAgPGNoaWxkPgotCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9N
ZW51SXRlbSIgaWQ9InNldF9vcHRpb25fbW9kZTEiPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlw
IiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBub3JtYWwgb3B0aW9uczwvcHJvcGVydHk+Ci0JCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgbm9ybWFs
IG9wdGlvbnM8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGlu
ZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPlRydWU8
L3Byb3BlcnR5PgotCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9z
ZXRfb3B0aW9uX21vZGUxX2FjdGl2YXRlIi8+Ci0JCSAgICA8L3dpZGdldD4KLQkJICA8L2NoaWxk
PgotCi0JCSAgPGNoaWxkPgotCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9NZW51SXRlbSIg
aWQ9InNldF9vcHRpb25fbW9kZTIiPgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xh
dGFibGU9InllcyI+U2hvdyBhbGwgb3B0aW9uczwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgYWxsIF9vcHRpb25zPC9wcm9w
ZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+Ci0J
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJncm91cCI+c2V0X29wdGlvbl9tb2RlMTwvcHJvcGVydHk+
Ci0JCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NldF9vcHRpb25f
bW9kZTJfYWN0aXZhdGUiLz4KLQkJICAgIDwvd2lkZ2V0PgotCQkgIDwvY2hpbGQ+Ci0KLQkJICA8
Y2hpbGQ+Ci0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtSYWRpb01lbnVJdGVtIiBpZD0ic2V0X29w
dGlvbl9tb2RlMyI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVz
Ij5TaG93IGFsbCBvcHRpb25zIHdpdGggcHJvbXB0czwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgYWxsIHByb21wdCBvcHRp
b25zPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRy
dWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJv
cGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJncm91cCI+c2V0X29wdGlvbl9tb2RlMTwv
cHJvcGVydHk+Ci0JCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3Nl
dF9vcHRpb25fbW9kZTNfYWN0aXZhdGUiLz4KLQkJICAgIDwvd2lkZ2V0PgotCQkgIDwvY2hpbGQ+
Ci0KLQkJPC93aWRnZXQ+Ci0JICAgICAgPC9jaGlsZD4KLQkgICAgPC93aWRnZXQ+Ci0JICA8L2No
aWxkPgotCi0JICA8Y2hpbGQ+Ci0JICAgIDx3aWRnZXQgY2xhc3M9Ikd0a01lbnVJdGVtIiBpZD0i
aGVscDEiPgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4K
LQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fSGVscDwv
cHJvcGVydHk+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3By
b3BlcnR5PgotCi0JICAgICAgPGNoaWxkPgotCQk8d2lkZ2V0IGNsYXNzPSJHdGtNZW51IiBpZD0i
aGVscDFfbWVudSI+Ci0KLQkJICA8Y2hpbGQ+Ci0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFn
ZU1lbnVJdGVtIiBpZD0iaW50cm9kdWN0aW9uMSI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0
cmFuc2xhdGFibGU9InllcyI+X0ludHJvZHVjdGlvbjwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHNpZ25h
bCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25faW50cm9kdWN0aW9uMV9hY3RpdmF0ZSIgbGFz
dF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBHTVQiLz4KLQkJ
ICAgICAgPGFjY2VsZXJhdG9yIGtleT0iSSIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBz
aWduYWw9ImFjdGl2YXRlIi8+Ci0KLQkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFn
ZSI+Ci0JCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDMiPgotCQkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1l
PSJzdG9jayI+Z3RrLWRpYWxvZy1xdWVzdGlvbjwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBu
YW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWdu
Ij4wLjU8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3Bl
cnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+Ci0JCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KLQkJCTwvd2lkZ2V0PgotCQkgICAgICA8L2No
aWxkPgotCQkgICAgPC93aWRnZXQ+Ci0JCSAgPC9jaGlsZD4KLQotCQkgIDxjaGlsZD4KLQkJICAg
IDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJhYm91dDEiPgotCQkgICAgICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9BYm91dDwvcHJvcGVydHk+Ci0JCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAg
ICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fYWJvdXQxX2FjdGl2YXRlIiBs
YXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDE1IE5vdiAyMDAyIDIwOjI2OjMwIEdNVCIvPgot
CQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJBIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0si
IHNpZ25hbD0iYWN0aXZhdGUiLz4KLQotCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9Imlt
YWdlIj4KLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0NCI+Ci0JCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJCSAgPHByb3BlcnR5IG5h
bWU9InN0b2NrIj5ndGstcHJvcGVydGllczwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0eSBuYW1l
PSJpY29uX3NpemUiPjE8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4w
LjU8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5
PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+Ci0JCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KLQkJCTwvd2lkZ2V0PgotCQkgICAgICA8L2NoaWxk
PgotCQkgICAgPC93aWRnZXQ+Ci0JCSAgPC9jaGlsZD4KLQotCQkgIDxjaGlsZD4KLQkJICAgIDx3
aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJsaWNlbnNlMSI+Ci0JCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0xpY2Vuc2U8L3Byb3BlcnR5PgotCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAg
ICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2xpY2Vuc2UxX2FjdGl2YXRl
IiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDE1IE5vdiAyMDAyIDIwOjI2OjMwIEdNVCIv
PgotCi0JCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPgotCQkJPHdpZGdldCBj
bGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQ1Ij4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGUiPlRydWU8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1qdXN0
aWZ5LWZpbGw8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9w
cm9wZXJ0eT4KLQkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KLQkJ
CSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KLQkJCSAgPHByb3BlcnR5
IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgotCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwv
cHJvcGVydHk+Ci0JCQk8L3dpZGdldD4KLQkJICAgICAgPC9jaGlsZD4KLQkJICAgIDwvd2lkZ2V0
PgotCQkgIDwvY2hpbGQ+Ci0JCTwvd2lkZ2V0PgotCSAgICAgIDwvY2hpbGQ+Ci0JICAgIDwvd2lk
Z2V0PgotCSAgPC9jaGlsZD4KLQk8L3dpZGdldD4KLQk8cGFja2luZz4KLQkgIDxwcm9wZXJ0eSBu
YW1lPSJwYWRkaW5nIj4wPC9wcm9wZXJ0eT4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZh
bHNlPC9wcm9wZXJ0eT4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5GYWxzZTwvcHJvcGVydHk+
Ci0JPC9wYWNraW5nPgotICAgICAgPC9jaGlsZD4KLQotICAgICAgPGNoaWxkPgotCTx3aWRnZXQg
Y2xhc3M9Ikd0a0hhbmRsZUJveCIgaWQ9ImhhbmRsZWJveDEiPgotCSAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCSAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBl
Ij5HVEtfU0hBRE9XX09VVDwvcHJvcGVydHk+Ci0JICA8cHJvcGVydHkgbmFtZT0iaGFuZGxlX3Bv
c2l0aW9uIj5HVEtfUE9TX0xFRlQ8L3Byb3BlcnR5PgotCSAgPHByb3BlcnR5IG5hbWU9InNuYXBf
ZWRnZSI+R1RLX1BPU19UT1A8L3Byb3BlcnR5PgotCi0JICA8Y2hpbGQ+Ci0JICAgIDx3aWRnZXQg
Y2xhc3M9Ikd0a1Rvb2xiYXIiIGlkPSJ0b29sYmFyMSI+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmllbnRh
dGlvbiI+R1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw8L3Byb3BlcnR5PgotCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ0b29sYmFyX3N0eWxlIj5HVEtfVE9PTEJBUl9CT1RIPC9wcm9wZXJ0eT4KLQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcHMiPlRydWU8L3Byb3BlcnR5PgotCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJzaG93X2Fycm93Ij5UcnVlPC9wcm9wZXJ0eT4KLQotCSAgICAgIDxjaGls
ZD4KLQkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjEiPgotCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFt
ZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkdvZXMgdXAgb2Ygb25lIGxldmVsIChzaW5n
bGUgdmlldyk8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRh
YmxlPSJ5ZXMiPkJhY2s8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJs
aW5lIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay11
bmRvPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5U
cnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1
ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3By
b3BlcnR5PgotCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fYmFja19jbGlj
a2VkIi8+Ci0JCTwvd2lkZ2V0PgotCQk8cGFja2luZz4KLQkJICA8cHJvcGVydHkgbmFtZT0iZXhw
YW5kIj5GYWxzZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5U
cnVlPC9wcm9wZXJ0eT4KLQkJPC9wYWNraW5nPgotCSAgICAgIDwvY2hpbGQ+Ci0KLQkgICAgICA8
Y2hpbGQ+Ci0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0ZW0xIj4KLQkJ
ICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5
IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5
IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBu
YW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KLQotCQkgIDxjaGlsZD4KLQkJICAg
IDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2c2VwYXJhdG9yMSI+Ci0JCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgIDwvd2lkZ2V0
PgotCQkgIDwvY2hpbGQ+Ci0JCTwvd2lkZ2V0PgotCQk8cGFja2luZz4KLQkJICA8cHJvcGVydHkg
bmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9n
ZW5lb3VzIj5GYWxzZTwvcHJvcGVydHk+Ci0JCTwvcGFja2luZz4KLQkgICAgICA8L2NoaWxkPgot
Ci0JICAgICAgPGNoaWxkPgotCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0
dG9uMiI+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+TG9hZCBhIGNvbmZp
ZyBmaWxlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJs
ZT0ieWVzIj5Mb2FkPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGlu
ZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstb3Bl
bjwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1
ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8
L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9w
ZXJ0eT4KLQkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2xvYWRfY2xpY2tl
ZCIvPgotCQk8L3dpZGdldD4KLQkJPHBhY2tpbmc+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFu
ZCI+RmFsc2U8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1
ZTwvcHJvcGVydHk+Ci0JCTwvcGFja2luZz4KLQkgICAgICA8L2NoaWxkPgotCi0JICAgICAgPGNo
aWxkPgotCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uMyI+Ci0JCSAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZSBhIGNvbmZpZyBmaWxlPC9wcm9w
ZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZl
PC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJv
cGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstc2F2ZTwvcHJvcGVydHk+
Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+
Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5Pgot
CQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KLQkJICA8
c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX3NhdmVfYWN0aXZhdGUiLz4KLQkJPC93
aWRnZXQ+Ci0JCTxwYWNraW5nPgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9w
cm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5
PgotCQk8L3BhY2tpbmc+Ci0JICAgICAgPC9jaGlsZD4KLQotCSAgICAgIDxjaGlsZD4KLQkJPHdp
ZGdldCBjbGFzcz0iR3RrVG9vbEl0ZW0iIGlkPSJ0b29saXRlbTIiPgotCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9y
dGFudCI+RmFsc2U8L3Byb3BlcnR5PgotCi0JCSAgPGNoaWxkPgotCQkgICAgPHdpZGdldCBjbGFz
cz0iR3RrVlNlcGFyYXRvciIgaWQ9InZzZXBhcmF0b3IyIj4KLQkJICAgICAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCQkgICAgPC93aWRnZXQ+Ci0JCSAgPC9jaGls
ZD4KLQkJPC93aWRnZXQ+Ci0JCTxwYWNraW5nPgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQi
PkZhbHNlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPkZhbHNl
PC9wcm9wZXJ0eT4KLQkJPC9wYWNraW5nPgotCSAgICAgIDwvY2hpbGQ+Ci0KLQkgICAgICA8Y2hp
bGQ+Ci0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b240Ij4KLQkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5h
bWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaW5nbGUgdmlldzwvcHJvcGVydHk+Ci0J
CSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2luZ2xlPC9wcm9w
ZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
Ci0JCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVy
dHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVy
dHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5
PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KLQkJ
ICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX3NpbmdsZV9jbGlja2VkIiBsYXN0
X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE0OjI4OjM5IEdNVCIvPgotCQk8
L3dpZGdldD4KLQkJPHBhY2tpbmc+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8
L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVy
dHk+Ci0JCTwvcGFja2luZz4KLQkgICAgICA8L2NoaWxkPgotCi0JICAgICAgPGNoaWxkPgotCQk8
d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uNSI+Ci0JCSAgPHByb3BlcnR5
IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29s
dGlwIiB0cmFuc2xhdGFibGU9InllcyI+U3BsaXQgdmlldzwvcHJvcGVydHk+Ci0JCSAgPHByb3Bl
cnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U3BsaXQ8L3Byb3BlcnR5PgotCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJv
cGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1taXNzaW5nLWltYWdlPC9wcm9wZXJ0eT4KLQkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHBy
b3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5PgotCQkgIDxzaWduYWwg
bmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fc3BsaXRfY2xpY2tlZCIgbGFzdF9tb2RpZmljYXRp
b25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODo0NSBHTVQiLz4KLQkJPC93aWRnZXQ+Ci0J
CTxwYWNraW5nPgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4K
LQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5PgotCQk8L3Bh
Y2tpbmc+Ci0JICAgICAgPC9jaGlsZD4KLQotCSAgICAgIDxjaGlsZD4KLQkJPHdpZGdldCBjbGFz
cz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjYiPgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPkZ1bGwgdmlldzwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9Imxh
YmVsIiB0cmFuc2xhdGFibGU9InllcyI+RnVsbDwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5h
bWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJz
dG9ja19pZCI+Z3RrLW1pc3NpbmctaW1hZ2U8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0i
aXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+Ci0JCSAgPHNpZ25hbCBuYW1lPSJjbGlja2Vk
IiBoYW5kbGVyPSJvbl9mdWxsX2NsaWNrZWQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwg
MTIgSmFuIDIwMDMgMTQ6Mjg6NTAgR01UIi8+Ci0JCTwvd2lkZ2V0PgotCQk8cGFja2luZz4KLQkJ
ICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5
IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4KLQkJPC9wYWNraW5nPgotCSAgICAg
IDwvY2hpbGQ+Ci0KLQkgICAgICA8Y2hpbGQ+Ci0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVt
IiBpZD0idG9vbGl0ZW0zIj4KLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJv
cGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJv
cGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3Bl
cnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4K
LQotCQkgIDxjaGlsZD4KLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2
c2VwYXJhdG9yMyI+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4KLQkJICAgIDwvd2lkZ2V0PgotCQkgIDwvY2hpbGQ+Ci0JCTwvd2lkZ2V0PgotCQk8cGFj
a2luZz4KLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+Ci0JCSAg
PHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxzZTwvcHJvcGVydHk+Ci0JCTwvcGFja2lu
Zz4KLQkgICAgICA8L2NoaWxkPgotCi0JICAgICAgPGNoaWxkPgotCQk8d2lkZ2V0IGNsYXNzPSJH
dGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uNyI+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFi
bGU9InllcyI+Q29sbGFwc2UgdGhlIHdob2xlIHRyZWUgaW4gdGhlIHJpZ2h0IGZyYW1lPC9wcm9w
ZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5Db2xs
YXBzZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8
L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLXJlbW92ZTwvcHJv
cGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJv
cGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3Bl
cnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4K
LQkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2NvbGxhcHNlX2NsaWNrZWQi
Lz4KLQkJPC93aWRnZXQ+Ci0JCTxwYWNraW5nPgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQi
PkZhbHNlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8
L3Byb3BlcnR5PgotCQk8L3BhY2tpbmc+Ci0JICAgICAgPC9jaGlsZD4KLQotCSAgICAgIDxjaGls
ZD4KLQkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjgiPgotCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFt
ZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkV4cGFuZCB0aGUgd2hvbGUgdHJlZSBpbiB0
aGUgcmlnaHQgZnJhbWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJh
bnNsYXRhYmxlPSJ5ZXMiPkV4cGFuZDwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InVz
ZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19p
ZCI+Z3RrLWFkZDwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpv
bnRhbCI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGlj
YWwiPlRydWU8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZh
bHNlPC9wcm9wZXJ0eT4KLQkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2V4
cGFuZF9jbGlja2VkIi8+Ci0JCTwvd2lkZ2V0PgotCQk8cGFja2luZz4KLQkJICA8cHJvcGVydHkg
bmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9n
ZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4KLQkJPC9wYWNraW5nPgotCSAgICAgIDwvY2hpbGQ+Ci0J
ICAgIDwvd2lkZ2V0PgotCSAgPC9jaGlsZD4KLQk8L3dpZGdldD4KLQk8cGFja2luZz4KLQkgIDxw
cm9wZXJ0eSBuYW1lPSJwYWRkaW5nIj4wPC9wcm9wZXJ0eT4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJl
eHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5GYWxzZTwv
cHJvcGVydHk+Ci0JPC9wYWNraW5nPgotICAgICAgPC9jaGlsZD4KLQotICAgICAgPGNoaWxkPgot
CTx3aWRnZXQgY2xhc3M9Ikd0a0hQYW5lZCIgaWQ9ImhwYW5lZDEiPgotCSAgPHByb3BlcnR5IG5h
bWU9IndpZHRoX3JlcXVlc3QiPjE8L3Byb3BlcnR5PgotCSAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGUiPlRydWU8L3Byb3BlcnR5PgotCSAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwv
cHJvcGVydHk+Ci0JICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjA8L3Byb3BlcnR5PgotCi0J
ICA8Y2hpbGQ+Ci0JICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Ny
b2xsZWR3aW5kb3cxIj4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJv
cGVydHk+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9M
SUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+Ci0JICAgICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxi
YXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+Ci0JICAgICAgPHByb3Bl
cnR5IG5hbWU9InNoYWRvd190eXBlIj5HVEtfU0hBRE9XX0lOPC9wcm9wZXJ0eT4KLQkgICAgICA8
cHJvcGVydHkgbmFtZT0id2luZG93X3BsYWNlbWVudCI+R1RLX0NPUk5FUl9UT1BfTEVGVDwvcHJv
cGVydHk+Ci0KLQkgICAgICA8Y2hpbGQ+Ci0JCTx3aWRnZXQgY2xhc3M9Ikd0a1RyZWVWaWV3IiBp
ZD0idHJlZXZpZXcxIj4KLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAg
PHByb3BlcnR5IG5hbWU9ImhlYWRlcnNfdmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHBy
b3BlcnR5IG5hbWU9InJ1bGVzX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkg
bmFtZT0icmVvcmRlcmFibGUiPkZhbHNlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0i
ZW5hYmxlX3NlYXJjaCI+RmFsc2U8L3Byb3BlcnR5PgotCQkgIDxzaWduYWwgbmFtZT0iY3Vyc29y
X2NoYW5nZWQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9jdXJzb3JfY2hhbmdlZCIgbGFzdF9tb2Rp
ZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNTo1ODoyMiBHTVQiLz4KLQkJICA8c2ln
bmFsIG5hbWU9ImJ1dHRvbl9wcmVzc19ldmVudCIgaGFuZGxlcj0ib25fdHJlZXZpZXcxX2J1dHRv
bl9wcmVzc19ldmVudCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAx
NjowMzo1MiBHTVQiLz4KLQkJICA8c2lnbmFsIG5hbWU9ImtleV9wcmVzc19ldmVudCIgaGFuZGxl
cj0ib25fdHJlZXZpZXcyX2tleV9wcmVzc19ldmVudCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0i
U3VuLCAxMiBKYW4gMjAwMyAxNjoxMTo0NCBHTVQiLz4KLQkJPC93aWRnZXQ+Ci0JICAgICAgPC9j
aGlsZD4KLQkgICAgPC93aWRnZXQ+Ci0JICAgIDxwYWNraW5nPgotCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJzaHJpbmsiPlRydWU8L3Byb3BlcnR5PgotCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNp
emUiPkZhbHNlPC9wcm9wZXJ0eT4KLQkgICAgPC9wYWNraW5nPgotCSAgPC9jaGlsZD4KLQotCSAg
PGNoaWxkPgotCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWUGFuZWQiIGlkPSJ2cGFuZWQxIj4KLQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JICAgICAgPHBy
b3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+Ci0JICAgICAgPHByb3BlcnR5
IG5hbWU9InBvc2l0aW9uIj4wPC9wcm9wZXJ0eT4KLQotCSAgICAgIDxjaGlsZD4KLQkJPHdpZGdl
dCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzIiPgotCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFt
ZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4KLQkJ
ICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElD
PC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUiPkdUS19TSEFET1df
SU48L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxhY2VtZW50Ij5HVEtf
Q09STkVSX1RPUF9MRUZUPC9wcm9wZXJ0eT4KLQotCQkgIDxjaGlsZD4KLQkJICAgIDx3aWRnZXQg
Y2xhc3M9Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcyIj4KLQkJICAgICAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2Fu
X2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9Imhhc19mb2N1
cyI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoZWFkZXJzX3Zpc2li
bGUiPlRydWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icnVsZXNfaGludCI+
RmFsc2U8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icmVvcmRlcmFibGUiPkZh
bHNlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImVuYWJsZV9zZWFyY2giPkZh
bHNlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHNpZ25hbCBuYW1lPSJjdXJzb3JfY2hhbmdlZCIgaGFu
ZGxlcj0ib25fdHJlZXZpZXcyX2N1cnNvcl9jaGFuZ2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1l
PSJTdW4sIDEyIEphbiAyMDAzIDE1OjU3OjU1IEdNVCIvPgotCQkgICAgICA8c2lnbmFsIG5hbWU9
ImJ1dHRvbl9wcmVzc19ldmVudCIgaGFuZGxlcj0ib25fdHJlZXZpZXcyX2J1dHRvbl9wcmVzc19l
dmVudCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNTo1Nzo1OCBH
TVQiLz4KLQkJICAgICAgPHNpZ25hbCBuYW1lPSJrZXlfcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9u
X3RyZWV2aWV3Ml9rZXlfcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwg
MTIgSmFuIDIwMDMgMTU6NTg6MDEgR01UIi8+Ci0JCSAgICA8L3dpZGdldD4KLQkJICA8L2NoaWxk
PgotCQk8L3dpZGdldD4KLQkJPHBhY2tpbmc+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InNocmluayI+
VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+RmFsc2U8L3Byb3Bl
cnR5PgotCQk8L3BhY2tpbmc+Ci0JICAgICAgPC9jaGlsZD4KLQotCSAgICAgIDxjaGlsZD4KLQkJ
PHdpZGdldCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzMiPgot
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJvcGVy
dHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfTkVWRVI8L3Byb3BlcnR5Pgot
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFU
SUM8L3Byb3BlcnR5PgotCQkgIDxwcm9wZXJ0eSBuYW1lPSJzaGFkb3dfdHlwZSI+R1RLX1NIQURP
V19JTjwvcHJvcGVydHk+Ci0JCSAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wbGFjZW1lbnQiPkdU
S19DT1JORVJfVE9QX0xFRlQ8L3Byb3BlcnR5PgotCi0JCSAgPGNoaWxkPgotCQkgICAgPHdpZGdl
dCBjbGFzcz0iR3RrVGV4dFZpZXciIGlkPSJ0ZXh0dmlldzMiPgotCQkgICAgICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJj
YW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZWRpdGFi
bGUiPkZhbHNlPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9Im92ZXJ3cml0ZSI+
RmFsc2U8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWNjZXB0c190YWIiPlRy
dWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0ianVzdGlmaWNhdGlvbiI+R1RL
X0pVU1RJRllfTEVGVDwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3cmFwX21v
ZGUiPkdUS19XUkFQX1dPUkQ8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY3Vy
c29yX3Zpc2libGUiPlRydWU8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGl4
ZWxzX2Fib3ZlX2xpbmVzIj4wPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InBp
eGVsc19iZWxvd19saW5lcyI+MDwvcHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJw
aXhlbHNfaW5zaWRlX3dyYXAiPjA8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
bGVmdF9tYXJnaW4iPjA8L3Byb3BlcnR5PgotCQkgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRf
bWFyZ2luIj4wPC9wcm9wZXJ0eT4KLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImluZGVudCI+MDwv
cHJvcGVydHk+Ci0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB0cmFuc2xhdGFibGU9Inll
cyI+U29ycnksIG5vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbiB5ZXQuPC9wcm9wZXJ0
eT4KLQkJICAgIDwvd2lkZ2V0PgotCQkgIDwvY2hpbGQ+Ci0JCTwvd2lkZ2V0PgotCQk8cGFja2lu
Zz4KLQkJICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KLQkJICA8cHJv
cGVydHkgbmFtZT0icmVzaXplIj5UcnVlPC9wcm9wZXJ0eT4KLQkJPC9wYWNraW5nPgotCSAgICAg
IDwvY2hpbGQ+Ci0JICAgIDwvd2lkZ2V0PgotCSAgICA8cGFja2luZz4KLQkgICAgICA8cHJvcGVy
dHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4KLQkgICAgICA8cHJvcGVydHkgbmFtZT0i
cmVzaXplIj5UcnVlPC9wcm9wZXJ0eT4KLQkgICAgPC9wYWNraW5nPgotCSAgPC9jaGlsZD4KLQk8
L3dpZGdldD4KLQk8cGFja2luZz4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJwYWRkaW5nIj4wPC9wcm9w
ZXJ0eT4KLQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPlRydWU8L3Byb3BlcnR5PgotCSAgPHBy
b3BlcnR5IG5hbWU9ImZpbGwiPlRydWU8L3Byb3BlcnR5PgotCTwvcGFja2luZz4KLSAgICAgIDwv
Y2hpbGQ+Ci0gICAgPC93aWRnZXQ+Ci0gIDwvY2hpbGQ+Ci08L3dpZGdldD4KLQotPC9nbGFkZS1p
bnRlcmZhY2U+CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5jIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjRmYTBlNC4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMzI4ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxp
bnV4LW02OGsub3JnPgotICovCi0KLSNpbmNsdWRlICJpbWFnZXMuaCIKLQotY29uc3QgY2hhciAq
eHBtX2xvYWRbXSA9IHsKLSIyMiAyMiA1IDEiLAotIi4gYyBOb25lIiwKLSIjIGMgIzAwMDAwMCIs
Ci0iYyBjICM4MzgxMDAiLAotImEgYyAjZmZmZjAwIiwKLSJiIGMgI2ZmZmZmZiIsCi0iLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLi4uIyMjIy4uLi4jLiIsCi0iLi4uLi4uLi4uLi4j
Li4uLiMjLiMjLiIsCi0iLi4uLi4uLi4uLi4uLi4uLi4uIyMjLiIsCi0iLi4uLi4uLi4uLi4uLi4u
Li4jIyMjLiIsCi0iLiMjIyMuLi4uLi4uLi4uLiMjIyMjLiIsCi0iI2FiYWIjIyMjIyMjIyMjLi4u
Li4uLiIsCi0iI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCi0iI2FiYWJhYmFiYWJhYmEjLi4uLi4u
LiIsCi0iI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsCi0iI2FiYWJhYiMjIyMjIyMjIyMjIyMjIyIs
Ci0iI2JhYmFiIyNjY2NjY2NjY2NjY2MjIyIsCi0iI2FiYWIjI2NjY2NjY2NjY2NjYyMjLiIsCi0i
I2JhYiMjY2NjY2NjY2NjY2NjIyMuLiIsCi0iI2FiIyNjY2NjY2NjY2NjY2MjIy4uLiIsCi0iI2Ij
I2NjY2NjY2NjY2NjYyMjLi4uLiIsCi0iIyMjY2NjY2NjY2NjY2NjIyMuLi4uLiIsCi0iIyNjY2Nj
Y2NjY2NjY2MjIy4uLi4uLiIsCi0iIyMjIyMjIyMjIyMjIyMjLi4uLi4uLiIsCi0iLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiJ9OwotCi1jb25zdCBjaGFyICp4cG1fc2F2ZVtdID0gewotIjIyIDIyIDUg
MSIsCi0iLiBjIE5vbmUiLAotIiMgYyAjMDAwMDAwIiwKLSJhIGMgIzgzODEwMCIsCi0iYiBjICNj
NWMyYzUiLAotImMgYyAjY2RiNmQ1IiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuIyMj
IyMjIyMjIyMjIyMjIyMjIyMuIiwKLSIuI2FhI2JiYmJiYmJiYmJiYiNiYiMuIiwKLSIuI2FhI2Ji
YmJiYmJiYmJiYiNiYiMuIiwKLSIuI2FhI2JiYmJiYmJiYmNiYiMjIyMuIiwKLSIuI2FhI2JiYmNj
YmJiYmJiYiNhYSMuIiwKLSIuI2FhI2JiYmNjYmJiYmJiYiNhYSMuIiwKLSIuI2FhI2JiYmJiYmJi
YmJiYiNhYSMuIiwKLSIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKLSIuI2FhI2JiYmJiYmJiYmJi
YiNhYSMuIiwKLSIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKLSIuI2FhYSMjIyMjIyMjIyMjI2Fh
YSMuIiwKLSIuI2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwKLSIuI2FhYWFhYWFhYWFhYWFhYWFhYSMu
IiwKLSIuI2FhYSMjIyMjIyMjIyMjIyNhYSMuIiwKLSIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwK
LSIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKLSIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKLSIu
I2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKLSIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKLSIuLiMj
IyMjIyMjIyMjIyMjIyMjIy4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07Ci0KLWNvbnN0
IGNoYXIgKnhwbV9iYWNrW10gPSB7Ci0iMjIgMjIgMyAxIiwKLSIuIGMgTm9uZSIsCi0iIyBjICMw
MDAwODMiLAotImEgYyAjODM4MTgzIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4uLi4u
LiMjIyMjI2EuLi4uIiwKLSIuLiMuLi4uLi4jIyMjIyMjIyMjLi4uIiwKLSIuLiMjLi4uIyMjIy4u
Li4uLiMjYS4uIiwKLSIuLiMjIy4jIyMuLi4uLi4uLi4jIy4uIiwKLSIuLiMjIyMjIy4uLi4uLi4u
Li4jIy4uIiwKLSIuLiMjIyMjLi4uLi4uLi4uLi4jIy4uIiwKLSIuLiMjIyMjIy4uLi4uLi4uLi4j
Iy4uIiwKLSIuLiMjIyMjIyMuLi4uLi4uLi4jIy4uIiwKLSIuLiMjIyMjIyMjLi4uLi4uLiMjYS4u
IiwKLSIuLi4uLi4uLi4uLi4uLi5hIyMjLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4jIyMuLi4uIiwK
LSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07Ci0KLWNvbnN0
IGNoYXIgKnhwbV90cmVlX3ZpZXdbXSA9IHsKLSIyMiAyMiAyIDEiLAotIi4gYyBOb25lIiwKLSIj
IGMgIzAwMDAwMCIsCi0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4u
Li4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4u
LiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIs
Ci0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0i
Li4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4u
Li4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsCi0iLi4uLi4u
Iy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4u
Li4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uIy4uLi4u
Li4uLi4uLi4uLiIsCi0iLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsCi0iLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiIsCi0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OwotCi1jb25zdCBjaGFyICp4cG1f
c2luZ2xlX3ZpZXdbXSA9IHsKLSIyMiAyMiAyIDEiLAotIi4gYyBOb25lIiwKLSIjIGMgIzAwMDAw
MCIsCi0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIs
Ci0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0i
Li4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4u
Li4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4u
Li4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4u
LiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMu
Li4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4u
Li4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4u
Li4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsCi0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCi0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIs
Ci0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OwotCi1jb25zdCBjaGFyICp4cG1fc3BsaXRfdmll
d1tdID0gewotIjIyIDIyIDIgMSIsCi0iLiBjIE5vbmUiLAotIiMgYyAjMDAwMDAwIiwKLSIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4u
Iy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4u
Li4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4u
Li4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4u
IiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwK
LSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIu
Li4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4u
Li4jLi4uLi4uIy4uLi4uLi4uIiwKLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKLSIuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uIn07Ci0KLWNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXSA9IHsKLSIx
MiAxMiAyIDEiLAotIiAgYyB3aGl0ZSIsCi0iLiBjIGJsYWNrIiwKLSIgICAgICAgICAgICAiLAot
IiAuLi4uLi4uLi4uICIsCi0iIC4gICAgICAgIC4gIiwKLSIgLiAgICAgICAgLiAiLAotIiAuICAg
ICAgICAuICIsCi0iIC4gICAgICAgIC4gIiwKLSIgLiAgICAgICAgLiAiLAotIiAuICAgICAgICAu
ICIsCi0iIC4gICAgICAgIC4gIiwKLSIgLiAgICAgICAgLiAiLAotIiAuLi4uLi4uLi4uICIsCi0i
ICAgICAgICAgICAgIn07Ci0KLWNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbW9kW10gPSB7Ci0iMTIg
MTIgMiAxIiwKLSIgIGMgd2hpdGUiLAotIi4gYyBibGFjayIsCi0iICAgICAgICAgICAgIiwKLSIg
Li4uLi4uLi4uLiAiLAotIiAuICAgICAgICAuICIsCi0iIC4gICAgICAgIC4gIiwKLSIgLiAgIC4u
ICAgLiAiLAotIiAuICAuLi4uICAuICIsCi0iIC4gIC4uLi4gIC4gIiwKLSIgLiAgIC4uICAgLiAi
LAotIiAuICAgICAgICAuICIsCi0iIC4gICAgICAgIC4gIiwKLSIgLi4uLi4uLi4uLiAiLAotIiAg
ICAgICAgICAgICJ9OwotCi1jb25zdCBjaGFyICp4cG1fc3ltYm9sX3llc1tdID0gewotIjEyIDEy
IDIgMSIsCi0iICBjIHdoaXRlIiwKLSIuIGMgYmxhY2siLAotIiAgICAgICAgICAgICIsCi0iIC4u
Li4uLi4uLi4gIiwKLSIgLiAgICAgICAgLiAiLAotIiAuICAgICAgICAuICIsCi0iIC4gICAgICAu
IC4gIiwKLSIgLiAgICAgLi4gLiAiLAotIiAuIC4gIC4uICAuICIsCi0iIC4gLi4uLiAgIC4gIiwK
LSIgLiAgLi4gICAgLiAiLAotIiAuICAgICAgICAuICIsCi0iIC4uLi4uLi4uLi4gIiwKLSIgICAg
ICAgICAgICAifTsKLQotY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdID0gewotIjEyIDEyIDIg
MSIsCi0iICBjIHdoaXRlIiwKLSIuIGMgYmxhY2siLAotIiAgICAgICAgICAgICIsCi0iICAgIC4u
Li4gICAgIiwKLSIgIC4uICAgIC4uICAiLAotIiAgLiAgICAgIC4gICIsCi0iIC4gICAgICAgIC4g
IiwKLSIgLiAgICAgICAgLiAiLAotIiAuICAgICAgICAuICIsCi0iIC4gICAgICAgIC4gIiwKLSIg
IC4gICAgICAuICAiLAotIiAgLi4gICAgLi4gICIsCi0iICAgIC4uLi4gICAgIiwKLSIgICAgICAg
ICAgICAifTsKLQotY29uc3QgY2hhciAqeHBtX2Nob2ljZV95ZXNbXSA9IHsKLSIxMiAxMiAyIDEi
LAotIiAgYyB3aGl0ZSIsCi0iLiBjIGJsYWNrIiwKLSIgICAgICAgICAgICAiLAotIiAgICAuLi4u
ICAgICIsCi0iICAuLiAgICAuLiAgIiwKLSIgIC4gICAgICAuICAiLAotIiAuICAgLi4gICAuICIs
Ci0iIC4gIC4uLi4gIC4gIiwKLSIgLiAgLi4uLiAgLiAiLAotIiAuICAgLi4gICAuICIsCi0iICAu
ICAgICAgLiAgIiwKLSIgIC4uICAgIC4uICAiLAotIiAgICAuLi4uICAgICIsCi0iICAgICAgICAg
ICAgIn07Ci0KLWNvbnN0IGNoYXIgKnhwbV9tZW51W10gPSB7Ci0iMTIgMTIgMiAxIiwKLSIgIGMg
d2hpdGUiLAotIi4gYyBibGFjayIsCi0iICAgICAgICAgICAgIiwKLSIgLi4uLi4uLi4uLiAiLAot
IiAuICAgICAgICAuICIsCi0iIC4gLi4gICAgIC4gIiwKLSIgLiAuLi4uICAgLiAiLAotIiAuIC4u
Li4uLiAuICIsCi0iIC4gLi4uLi4uIC4gIiwKLSIgLiAuLi4uICAgLiAiLAotIiAuIC4uICAgICAu
ICIsCi0iIC4gICAgICAgIC4gIiwKLSIgLi4uLi4uLi4uLiAiLAotIiAgICAgICAgICAgICJ9Owot
Ci1jb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXSA9IHsKLSIxMiAxMiAyIDEiLAotIiAgYyB3aGl0
ZSIsCi0iLiBjIGJsYWNrIiwKLSIgICAgICAgICAgICAiLAotIiAuLi4uLi4uLi4uICIsCi0iIC4u
Li4uLi4uLi4gIiwKLSIgLi4gIC4uLi4uLiAiLAotIiAuLiAgICAuLi4uICIsCi0iIC4uICAgICAg
Li4gIiwKLSIgLi4gICAgICAuLiAiLAotIiAuLiAgICAuLi4uICIsCi0iIC4uICAuLi4uLi4gIiwK
LSIgLi4uLi4uLi4uLiAiLAotIiAuLi4uLi4uLi4uICIsCi0iICAgICAgICAgICAgIn07Ci0KLWNv
bnN0IGNoYXIgKnhwbV9tZW51YmFja1tdID0gewotIjEyIDEyIDIgMSIsCi0iICBjIHdoaXRlIiwK
LSIuIGMgYmxhY2siLAotIiAgICAgICAgICAgICIsCi0iIC4uLi4uLi4uLi4gIiwKLSIgLiAgICAg
ICAgLiAiLAotIiAuICAgICAuLiAuICIsCi0iIC4gICAuLi4uIC4gIiwKLSIgLiAuLi4uLi4gLiAi
LAotIiAuIC4uLi4uLiAuICIsCi0iIC4gICAuLi4uIC4gIiwKLSIgLiAgICAgLi4gLiAiLAotIiAu
ICAgICAgICAuICIsCi0iIC4uLi4uLi4uLi4gIiwKLSIgICAgICAgICAgICAifTsKLQotY29uc3Qg
Y2hhciAqeHBtX3ZvaWRbXSA9IHsKLSIxMiAxMiAyIDEiLAotIiAgYyB3aGl0ZSIsCi0iLiBjIGJs
YWNrIiwKLSIgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgIiwK
LSIgICAgICAgICAgICAiLAotIiAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgIiwKLSIgICAg
ICAgICAgICAiLAotIiAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgIiwKLSIgICAgICAgICAg
ICAiLAotIiAgICAgICAgICAgICIsCi0iICAgICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L2ltYWdlcy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhmZjYxNC4uMDAwMDAwMAotLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L2ltYWdlcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAot
LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Ci0gKi8KLQotI2lm
bmRlZiBJTUFHRVNfSAotI2RlZmluZSBJTUFHRVNfSAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4
dGVybiAiQyIgewotI2VuZGlmCi0KLWV4dGVybiBjb25zdCBjaGFyICp4cG1fbG9hZFtdOwotZXh0
ZXJuIGNvbnN0IGNoYXIgKnhwbV9zYXZlW107Ci1leHRlcm4gY29uc3QgY2hhciAqeHBtX2JhY2tb
XTsKLWV4dGVybiBjb25zdCBjaGFyICp4cG1fdHJlZV92aWV3W107Ci1leHRlcm4gY29uc3QgY2hh
ciAqeHBtX3NpbmdsZV92aWV3W107Ci1leHRlcm4gY29uc3QgY2hhciAqeHBtX3NwbGl0X3ZpZXdb
XTsKLWV4dGVybiBjb25zdCBjaGFyICp4cG1fc3ltYm9sX25vW107Ci1leHRlcm4gY29uc3QgY2hh
ciAqeHBtX3N5bWJvbF9tb2RbXTsKLWV4dGVybiBjb25zdCBjaGFyICp4cG1fc3ltYm9sX3llc1td
OwotZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9jaG9pY2Vfbm9bXTsKLWV4dGVybiBjb25zdCBjaGFy
ICp4cG1fY2hvaWNlX3llc1tdOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9tZW51W107Ci1leHRl
cm4gY29uc3QgY2hhciAqeHBtX21lbnVfaW52W107Ci1leHRlcm4gY29uc3QgY2hhciAqeHBtX21l
bnViYWNrW107Ci1leHRlcm4gY29uc3QgY2hhciAqeHBtX3ZvaWRbXTsKLQotI2lmZGVmIF9fY3Bs
dXNwbHVzCi19Ci0jZW5kaWYKLQotI2VuZGlmIC8qIElNQUdFU19IICovCmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwgYi9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YWNiMzIuLjAwMDAwMDAKLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9sZXhlci5sCisrKyAvZGV2L251bGwKQEAgLTEsNDk4ICswLDAgQEAK
LS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICovCi0lb3B0
aW9uIG5vc3RkaW5pdCBub3l5d3JhcCBuZXZlci1pbnRlcmFjdGl2ZSBmdWxsIGVjcwotJW9wdGlv
biA4Yml0IG5vZGVmYXVsdCB5eWxpbmVubwotJXggQVNTSUdOX1ZBTCBIRUxQIFNUUklORwotJXsK
LQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGdsb2IuaD4KLSNpbmNsdWRlIDxsaW1p
dHMuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi0jaW5jbHVkZSAibGtjLmgiCi0jaW5j
bHVkZSAicGFyc2VyLnRhYi5oIgotCi0jZGVmaW5lIFlZX0RFQ0wJCXN0YXRpYyBpbnQgeXlsZXgx
KHZvaWQpCi0KLSNkZWZpbmUgU1RBUlRfU1RSU0laRQkxNgotCi1zdGF0aWMgc3RydWN0IHsKLQlz
dHJ1Y3QgZmlsZSAqZmlsZTsKLQlpbnQgbGluZW5vOwotfSBjdXJyZW50X3BvczsKLQotc3RhdGlj
IGludCBwcmV2X3ByZXZfdG9rZW4gPSBUX0VPTDsKLXN0YXRpYyBpbnQgcHJldl90b2tlbiA9IFRf
RU9MOwotc3RhdGljIGNoYXIgKnRleHQ7Ci1zdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6
ZTsKLQotc3RydWN0IGJ1ZmZlciB7Ci0Jc3RydWN0IGJ1ZmZlciAqcGFyZW50OwotCVlZX0JVRkZF
Ul9TVEFURSBzdGF0ZTsKLX07Ci0KLXN0cnVjdCBidWZmZXIgKmN1cnJlbnRfYnVmOwotCi1zdGF0
aWMgaW50IGxhc3RfdHMsIGZpcnN0X3RzOwotCi1zdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNv
bnN0IGNoYXIgKmluLCBzaXplX3Qgbik7Ci1zdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3Ry
aW5nKGNvbnN0IGNoYXIgKmluKTsKLXN0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCk7Ci1z
dGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpOwotCi1zdGF0aWMgdm9pZCBuZXdfc3RyaW5n
KHZvaWQpCi17Ci0JdGV4dCA9IHhtYWxsb2MoU1RBUlRfU1RSU0laRSk7Ci0JdGV4dF9hc2l6ZSA9
IFNUQVJUX1NUUlNJWkU7Ci0JdGV4dF9zaXplID0gMDsKLQkqdGV4dCA9IDA7Ci19Ci0KLXN0YXRp
YyB2b2lkIGFwcGVuZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKLXsKLQlpbnQg
bmV3X3NpemUgPSB0ZXh0X3NpemUgKyBzaXplICsgMTsKLQlpZiAobmV3X3NpemUgPiB0ZXh0X2Fz
aXplKSB7Ci0JCW5ld19zaXplICs9IFNUQVJUX1NUUlNJWkUgLSAxOwotCQluZXdfc2l6ZSAmPSAt
U1RBUlRfU1RSU0laRTsKLQkJdGV4dCA9IHhyZWFsbG9jKHRleHQsIG5ld19zaXplKTsKLQkJdGV4
dF9hc2l6ZSA9IG5ld19zaXplOwotCX0KLQltZW1jcHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBz
aXplKTsKLQl0ZXh0X3NpemUgKz0gc2l6ZTsKLQl0ZXh0W3RleHRfc2l6ZV0gPSAwOwotfQotCi1z
dGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkKLXsKLQl0
ZXh0ID0geG1hbGxvYyhzaXplICsgMSk7Ci0JbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7Ci0JdGV4
dFtzaXplXSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhcm5faWdub3JlZF9jaGFyYWN0ZXIoY2hh
ciBjaHIpCi17Ci0JZnByaW50ZihzdGRlcnIsCi0JICAgICAgICAiJXM6JWQ6d2FybmluZzogaWdu
b3JpbmcgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyICclYydcbiIsCi0JICAgICAgICBjdXJyZW50X2Zp
bGUtPm5hbWUsIHl5bGluZW5vLCBjaHIpOwotfQotJX0KLQotbglbQS1aYS16MC05Xy1dCi0KLSUl
Ci0JaW50IHN0ciA9IDA7Ci0JaW50IHRzLCBpOwotCi0jLioJCQkvKiBpZ25vcmUgY29tbWVudCAq
LwotWyBcdF0qCQkJLyogd2hpdGVzcGFjZXMgKi8KLVxcXG4JCQkvKiBlc2NhcGVkIG5ldyBsaW5l
ICovCi1cbgkJCXJldHVybiBUX0VPTDsKLSJhbGxub2NvbmZpZ195IgkJcmV0dXJuIFRfQUxMTk9D
T05GSUdfWTsKLSJib29sIgkJCXJldHVybiBUX0JPT0w7Ci0iY2hvaWNlIgkJcmV0dXJuIFRfQ0hP
SUNFOwotImNvbW1lbnQiCQlyZXR1cm4gVF9DT01NRU5UOwotImNvbmZpZyIJCXJldHVybiBUX0NP
TkZJRzsKLSJkZWZfYm9vbCIJCXJldHVybiBUX0RFRl9CT09MOwotImRlZl90cmlzdGF0ZSIJCXJl
dHVybiBUX0RFRl9UUklTVEFURTsKLSJkZWZhdWx0IgkJcmV0dXJuIFRfREVGQVVMVDsKLSJkZWZj
b25maWdfbGlzdCIJcmV0dXJuIFRfREVGQ09ORklHX0xJU1Q7Ci0iZGVwZW5kcyIJCXJldHVybiBU
X0RFUEVORFM7Ci0iZW5kY2hvaWNlIgkJcmV0dXJuIFRfRU5EQ0hPSUNFOwotImVuZGlmIgkJCXJl
dHVybiBUX0VORElGOwotImVuZG1lbnUiCQlyZXR1cm4gVF9FTkRNRU5VOwotImhlbHAifCItLS1o
ZWxwLS0tIglyZXR1cm4gVF9IRUxQOwotImhleCIJCQlyZXR1cm4gVF9IRVg7Ci0iaWYiCQkJcmV0
dXJuIFRfSUY7Ci0iaW1wbHkiCQkJcmV0dXJuIFRfSU1QTFk7Ci0iaW50IgkJCXJldHVybiBUX0lO
VDsKLSJtYWlubWVudSIJCXJldHVybiBUX01BSU5NRU5VOwotIm1lbnUiCQkJcmV0dXJuIFRfTUVO
VTsKLSJtZW51Y29uZmlnIgkJcmV0dXJuIFRfTUVOVUNPTkZJRzsKLSJtb2R1bGVzIgkJcmV0dXJu
IFRfTU9EVUxFUzsKLSJvbiIJCQlyZXR1cm4gVF9PTjsKLSJvcHRpb24iCQlyZXR1cm4gVF9PUFRJ
T047Ci0ib3B0aW9uYWwiCQlyZXR1cm4gVF9PUFRJT05BTDsKLSJwcm9tcHQiCQlyZXR1cm4gVF9Q
Uk9NUFQ7Ci0icmFuZ2UiCQkJcmV0dXJuIFRfUkFOR0U7Ci0ic2VsZWN0IgkJcmV0dXJuIFRfU0VM
RUNUOwotInNvdXJjZSIJCXJldHVybiBUX1NPVVJDRTsKLSJzdHJpbmciCQlyZXR1cm4gVF9TVFJJ
Tkc7Ci0idHJpc3RhdGUiCQlyZXR1cm4gVF9UUklTVEFURTsKLSJ2aXNpYmxlIgkJcmV0dXJuIFRf
VklTSUJMRTsKLSJ8fCIJCQlyZXR1cm4gVF9PUjsKLSImJiIJCQlyZXR1cm4gVF9BTkQ7Ci0iPSIJ
CQlyZXR1cm4gVF9FUVVBTDsKLSIhPSIJCQlyZXR1cm4gVF9VTkVRVUFMOwotIjwiCQkJcmV0dXJu
IFRfTEVTUzsKLSI8PSIJCQlyZXR1cm4gVF9MRVNTX0VRVUFMOwotIj4iCQkJcmV0dXJuIFRfR1JF
QVRFUjsKLSI+PSIJCQlyZXR1cm4gVF9HUkVBVEVSX0VRVUFMOwotIiEiCQkJcmV0dXJuIFRfTk9U
OwotIigiCQkJcmV0dXJuIFRfT1BFTl9QQVJFTjsKLSIpIgkJCXJldHVybiBUX0NMT1NFX1BBUkVO
OwotIjo9IgkJCXJldHVybiBUX0NPTE9OX0VRVUFMOwotIis9IgkJCXJldHVybiBUX1BMVVNfRVFV
QUw7Ci1cInxcJwkJCXsKLQkJCQlzdHIgPSB5eXRleHRbMF07Ci0JCQkJbmV3X3N0cmluZygpOwot
CQkJCUJFR0lOKFNUUklORyk7Ci0JCQl9Ci17bn0rCQkJewotCQkJCWFsbG9jX3N0cmluZyh5eXRl
eHQsIHl5bGVuZyk7Ci0JCQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7Ci0JCQkJcmV0dXJuIFRfV09S
RDsKLQkJCX0KLSh7bn18JCkrCQl7Ci0JCQkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFz
dCBvbmUgJyQnICovCi0JCQkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRleHQsIHl5
bGVuZyk7Ci0JCQkJaWYgKHN0cmxlbih5eWx2YWwuc3RyaW5nKSkKLQkJCQkJcmV0dXJuIFRfV09S
RDsKLQkJCQlmcmVlKHl5bHZhbC5zdHJpbmcpOwotCQkJfQotLgkJCXdhcm5faWdub3JlZF9jaGFy
YWN0ZXIoKnl5dGV4dCk7Ci0KLTxBU1NJR05fVkFMPnsKLQlbXls6Ymxhbms6XVxuXSsuKgl7Ci0J
CWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0JCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Owot
CQlyZXR1cm4gVF9BU1NJR05fVkFMOwotCX0KLQlcbgl7IEJFR0lOKElOSVRJQUwpOyByZXR1cm4g
VF9FT0w7IH0KLQkuCi19Ci0KLTxTVFJJTkc+ewotCSIkIi4qCWFwcGVuZF9leHBhbmRlZF9zdHJp
bmcoeXl0ZXh0KTsKLQlbXiQnIlxcXG5dKwl7Ci0JCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxl
bmcpOwotCX0KLQlcXC4/CXsKLQkJYXBwZW5kX3N0cmluZyh5eXRleHQgKyAxLCB5eWxlbmcgLSAx
KTsKLQl9Ci0JXCd8XCIJewotCQlpZiAoc3RyID09IHl5dGV4dFswXSkgewotCQkJQkVHSU4oSU5J
VElBTCk7Ci0JCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKLQkJCXJldHVybiBUX1dPUkRfUVVPVEU7
Ci0JCX0gZWxzZQotCQkJYXBwZW5kX3N0cmluZyh5eXRleHQsIDEpOwotCX0KLQlcbgl7Ci0JCWZw
cmludGYoc3RkZXJyLAotCQkJIiVzOiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5ncyBub3Qg
c3VwcG9ydGVkXG4iLAotCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JCXVu
cHV0KCdcbicpOwotCQlCRUdJTihJTklUSUFMKTsKLQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7Ci0J
CXJldHVybiBUX1dPUkRfUVVPVEU7Ci0JfQotCTw8RU9GPj4JewotCQlCRUdJTihJTklUSUFMKTsK
LQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7Ci0JCXJldHVybiBUX1dPUkRfUVVPVEU7Ci0JfQotfQot
Ci08SEVMUD57Ci0JWyBcdF0rCXsKLQkJdHMgPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgeXlsZW5n
OyBpKyspIHsKLQkJCWlmICh5eXRleHRbaV0gPT0gJ1x0JykKLQkJCQl0cyA9ICh0cyAmIH43KSAr
IDg7Ci0JCQllbHNlCi0JCQkJdHMrKzsKLQkJfQotCQlsYXN0X3RzID0gdHM7Ci0JCWlmIChmaXJz
dF90cykgewotCQkJaWYgKHRzIDwgZmlyc3RfdHMpIHsKLQkJCQl6Y29uZl9lbmRoZWxwKCk7Ci0J
CQkJcmV0dXJuIFRfSEVMUFRFWFQ7Ci0JCQl9Ci0JCQl0cyAtPSBmaXJzdF90czsKLQkJCXdoaWxl
ICh0cyA+IDgpIHsKLQkJCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIsIDgpOwotCQkJCXRzIC09
IDg7Ci0JCQl9Ci0JCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIsIHRzKTsKLQkJfQotCX0KLQlb
IFx0XSpcbi9bXiBcdFxuXSB7Ci0JCXpjb25mX2VuZGhlbHAoKTsKLQkJcmV0dXJuIFRfSEVMUFRF
WFQ7Ci0JfQotCVsgXHRdKlxuCXsKLQkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsKLQl9Ci0JW14g
XHRcbl0uKiB7Ci0JCXdoaWxlICh5eWxlbmcpIHsKLQkJCWlmICgoeXl0ZXh0W3l5bGVuZy0xXSAh
PSAnICcpICYmICh5eXRleHRbeXlsZW5nLTFdICE9ICdcdCcpKQotCQkJCWJyZWFrOwotCQkJeXls
ZW5nLS07Ci0JCX0KLQkJYXBwZW5kX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0JCWlmICghZmly
c3RfdHMpCi0JCQlmaXJzdF90cyA9IGxhc3RfdHM7Ci0JfQotCTw8RU9GPj4JewotCQl6Y29uZl9l
bmRoZWxwKCk7Ci0JCXJldHVybiBUX0hFTFBURVhUOwotCX0KLX0KLQotPDxFT0Y+Pgl7Ci0JQkVH
SU4oSU5JVElBTCk7Ci0KLQlpZiAocHJldl90b2tlbiAhPSBUX0VPTCAmJiBwcmV2X3Rva2VuICE9
IFRfSEVMUFRFWFQpCi0JCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogbm8gbmV3IGxp
bmUgYXQgZW5kIG9mIGZpbGVcbiIsCi0JCQljdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vKTsK
LQotCWlmIChjdXJyZW50X2ZpbGUpIHsKLQkJemNvbmZfZW5kZmlsZSgpOwotCQlyZXR1cm4gVF9F
T0w7Ci0JfQotCWZjbG9zZSh5eWluKTsKLQl5eXRlcm1pbmF0ZSgpOwotfQotCi0lJQotCi0vKiBz
ZWNvbmQgc3RhZ2UgbGV4ZXIgKi8KLWludCB5eWxleCh2b2lkKQotewotCWludCB0b2tlbjsKLQot
cmVwZWF0OgotCXRva2VuID0geXlsZXgxKCk7Ci0KLQlpZiAocHJldl90b2tlbiA9PSBUX0VPTCB8
fCBwcmV2X3Rva2VuID09IFRfSEVMUFRFWFQpIHsKLQkJaWYgKHRva2VuID09IFRfRU9MKSB7Ci0J
CQkvKiBEbyBub3QgcGFzcyB1bm5lZWRlZCBUX0VPTCB0byB0aGUgcGFyc2VyLiAqLwotCQkJZ290
byByZXBlYXQ7Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogRm9yIHRoZSBwYXJzZXIsIHVwZGF0
ZSBmaWxlL2xpbmVubyBhdCB0aGUgZmlyc3QgdG9rZW4KLQkJCSAqIG9mIGVhY2ggc3RhdGVtZW50
LiBHZW5lcmFsbHksIFxuIGlzIGEgc3RhdGVtZW50Ci0JCQkgKiB0ZXJtaW5hdG9yIGluIEtjb25m
aWcsIGJ1dCBpdCBpcyBub3QgYWx3YXlzIHRydWUKLQkJCSAqIGJlY2F1c2UgXG4gY291bGQgYmUg
ZXNjYXBlZCBieSBhIGJhY2tzbGFzaC4KLQkJCSAqLwotCQkJY3VycmVudF9wb3MuZmlsZSA9IGN1
cnJlbnRfZmlsZTsKLQkJCWN1cnJlbnRfcG9zLmxpbmVubyA9IHl5bGluZW5vOwotCQl9Ci0JfQot
Ci0JaWYgKHByZXZfcHJldl90b2tlbiA9PSBUX0VPTCAmJiBwcmV2X3Rva2VuID09IFRfV09SRCAm
JgotCSAgICAodG9rZW4gPT0gVF9FUVVBTCB8fCB0b2tlbiA9PSBUX0NPTE9OX0VRVUFMIHx8IHRv
a2VuID09IFRfUExVU19FUVVBTCkpCi0JCUJFR0lOKEFTU0lHTl9WQUwpOwotCi0JcHJldl9wcmV2
X3Rva2VuID0gcHJldl90b2tlbjsKLQlwcmV2X3Rva2VuID0gdG9rZW47Ci0KLQlyZXR1cm4gdG9r
ZW47Ci19Ci0KLXN0YXRpYyBjaGFyICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNpemVf
dCBuKQotewotCWNoYXIgKm91dDsKLQlpbnQgYzsKLQljaGFyIGMyOwotCWNvbnN0IGNoYXIgKnJl
c3QsICplbmQ7Ci0KLQluZXdfc3RyaW5nKCk7Ci0JYXBwZW5kX3N0cmluZyhpbiwgbik7Ci0KLQkv
KiBnZXQgdGhlIHdob2xlIGxpbmUgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyB0aGUgZW5kIG9mIHRv
a2VuLiAqLwotCXdoaWxlICgoYyA9IGlucHV0KCkpICE9IEVPRikgewotCQlpZiAoYyA9PSAnXG4n
KSB7Ci0JCQl1bnB1dChjKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWMyID0gYzsKLQkJYXBwZW5kX3N0
cmluZygmYzIsIDEpOwotCX0KLQotCXJlc3QgPSB0ZXh0OwotCW91dCA9IGV4cGFuZF9vbmVfdG9r
ZW4oJnJlc3QpOwotCi0JLyogcHVzaCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRoZSBpbnB1
dCBzdHJlYW0gKi8KLQllbmQgPSByZXN0ICsgc3RybGVuKHJlc3QpOwotCXdoaWxlIChlbmQgPiBy
ZXN0KQotCQl1bnB1dCgqLS1lbmQpOwotCi0JZnJlZSh0ZXh0KTsKLQotCXJldHVybiBvdXQ7Ci19
Ci0KLXN0YXRpYyB2b2lkIGFwcGVuZF9leHBhbmRlZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyKQot
ewotCWNvbnN0IGNoYXIgKmVuZDsKLQljaGFyICpyZXM7Ci0KLQlzdHIrKzsKLQotCXJlcyA9IGV4
cGFuZF9kb2xsYXIoJnN0cik7Ci0KLQkvKiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8g
dGhlIGlucHV0IHN0cmVhbSAqLwotCWVuZCA9IHN0ciArIHN0cmxlbihzdHIpOwotCXdoaWxlIChl
bmQgPiBzdHIpCi0JCXVucHV0KCotLWVuZCk7Ci0KLQlhcHBlbmRfc3RyaW5nKHJlcywgc3RybGVu
KHJlcykpOwotCi0JZnJlZShyZXMpOwotfQotCi12b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKQot
ewotCW5ld19zdHJpbmcoKTsKLQlsYXN0X3RzID0gZmlyc3RfdHMgPSAwOwotCUJFR0lOKEhFTFAp
OwotfQotCi1zdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpCi17Ci0JeXlsdmFsLnN0cmlu
ZyA9IHRleHQ7Ci0JQkVHSU4oSU5JVElBTCk7Ci19Ci0KLQotLyoKLSAqIFRyeSB0byBvcGVuIHNw
ZWNpZmllZCBmaWxlIHdpdGggZm9sbG93aW5nIG5hbWVzOgotICogLi9uYW1lCi0gKiAkKHNyY3Ry
ZWUpL25hbWUKLSAqIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUg
ZnJvbSBvYmp0cmVlCi0gKiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgotICogUmV0dXJuIE5V
TEwgaWYgZmlsZSBpcyBub3QgZm91bmQuCi0gKi8KLUZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNo
YXIgKm5hbWUpCi17Ci0JY2hhciAqZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKLQlGSUxFICpm
OwotCi0JZiA9IGZvcGVuKG5hbWUsICJyIik7Ci0JaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBu
YW1lWzBdICE9ICcvJykgewotCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7Ci0JCWlmIChlbnYpIHsK
LQkJCXNucHJpbnRmKGZ1bGxuYW1lLCBzaXplb2YoZnVsbG5hbWUpLAotCQkJCSAiJXMvJXMiLCBl
bnYsIG5hbWUpOwotCQkJZiA9IGZvcGVuKGZ1bGxuYW1lLCAiciIpOwotCQl9Ci0JfQotCXJldHVy
biBmOwotfQotCi12b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JeXlp
biA9IHpjb25mX2ZvcGVuKG5hbWUpOwotCWlmICgheXlpbikgewotCQlmcHJpbnRmKHN0ZGVyciwg
ImNhbid0IGZpbmQgZmlsZSAlc1xuIiwgbmFtZSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JY3VycmVu
dF9idWYgPSB4bWFsbG9jKHNpemVvZigqY3VycmVudF9idWYpKTsKLQltZW1zZXQoY3VycmVudF9i
dWYsIDAsIHNpemVvZigqY3VycmVudF9idWYpKTsKLQotCWN1cnJlbnRfZmlsZSA9IGZpbGVfbG9v
a3VwKG5hbWUpOwotCXl5bGluZW5vID0gMTsKLX0KLQotdm9pZCB6Y29uZl9uZXh0ZmlsZShjb25z
dCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBmaWxlICppdGVyOwotCXN0cnVjdCBmaWxlICpmaWxl
ID0gZmlsZV9sb29rdXAobmFtZSk7Ci0Jc3RydWN0IGJ1ZmZlciAqYnVmID0geG1hbGxvYyhzaXpl
b2YoKmJ1ZikpOwotCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7Ci0KLQljdXJyZW50X2J1
Zi0+c3RhdGUgPSBZWV9DVVJSRU5UX0JVRkZFUjsKLQl5eWluID0gemNvbmZfZm9wZW4oZmlsZS0+
bmFtZSk7Ci0JaWYgKCF5eWluKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGNhbid0IG9w
ZW4gZmlsZSBcIiVzXCJcbiIsCi0JCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBm
aWxlLT5uYW1lKTsKLQkJZXhpdCgxKTsKLQl9Ci0JeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9jcmVh
dGVfYnVmZmVyKHl5aW4sIFlZX0JVRl9TSVpFKSk7Ci0JYnVmLT5wYXJlbnQgPSBjdXJyZW50X2J1
ZjsKLQljdXJyZW50X2J1ZiA9IGJ1ZjsKLQotCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5l
bm87Ci0JZmlsZS0+cGFyZW50ID0gY3VycmVudF9maWxlOwotCi0JZm9yIChpdGVyID0gY3VycmVu
dF9maWxlOyBpdGVyOyBpdGVyID0gaXRlci0+cGFyZW50KSB7Ci0JCWlmICghc3RyY21wKGl0ZXIt
Pm5hbWUsIGZpbGUtPm5hbWUpKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQkiUmVjdXJzaXZl
IGluY2x1c2lvbiBkZXRlY3RlZC5cbiIKLQkJCQkiSW5jbHVzaW9uIHBhdGg6XG4iCi0JCQkJIiAg
Y3VycmVudCBmaWxlIDogJXNcbiIsIGZpbGUtPm5hbWUpOwotCQkJaXRlciA9IGZpbGU7Ci0JCQlk
byB7Ci0JCQkJaXRlciA9IGl0ZXItPnBhcmVudDsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgaW5j
bHVkZWQgZnJvbTogJXM6JWRcbiIsCi0JCQkJCWl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubyAtIDEp
OwotCQkJfSB3aGlsZSAoc3RyY21wKGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKTsKLQkJCWV4aXQo
MSk7Ci0JCX0KLQl9Ci0KLQl5eWxpbmVubyA9IDE7Ci0JY3VycmVudF9maWxlID0gZmlsZTsKLX0K
LQotdm9pZCB6Y29uZl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqd2lsZGNhcmQpCi17Ci0JZ2xvYl90
IGcgPSB7MH07Ci0JY2hhciAqKnc7Ci0JaW50IGk7Ci0KLQlpZiAoZ2xvYih3aWxkY2FyZCwgMCwg
TlVMTCwgJmcpICE9IDApIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZy5nbF9wYXRodiA9PSBOVUxM
KSB7Ci0JCWdsb2JmcmVlKCZnKTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIHdvcmtpbmcgdGhyb3Vn
aCBmaWxlcyBiYWNrd2FyZHMsIHNpbmNlCi0JICogd2UncmUgZmlyc3QgcHVzaGluZyB0aGVtIG9u
IGEgc3RhY2sKLQkgKiBiZWZvcmUgYWN0dWFsbHkgaGFuZGxpbmcgdGhlbS4KLQkgKi8KLQlmb3Ig
KGkgPSBnLmdsX3BhdGhjOyBpID4gMDsgaS0tKSB7Ci0JCXcgPSAmZy5nbF9wYXRodltpIC0gMV07
Ci0JCXpjb25mX25leHRmaWxlKCp3KTsKLQl9Ci0KLQlnbG9iZnJlZSgmZyk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkKLXsKLQlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7Ci0K
LQljdXJyZW50X2ZpbGUgPSBjdXJyZW50X2ZpbGUtPnBhcmVudDsKLQlpZiAoY3VycmVudF9maWxl
KQotCQl5eWxpbmVubyA9IGN1cnJlbnRfZmlsZS0+bGluZW5vOwotCi0JcGFyZW50ID0gY3VycmVu
dF9idWYtPnBhcmVudDsKLQlpZiAocGFyZW50KSB7Ci0JCWZjbG9zZSh5eWluKTsKLQkJeXlfZGVs
ZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUik7Ci0JCXl5X3N3aXRjaF90b19idWZmZXIocGFy
ZW50LT5zdGF0ZSk7Ci0JfQotCWZyZWUoY3VycmVudF9idWYpOwotCWN1cnJlbnRfYnVmID0gcGFy
ZW50OwotfQotCi1pbnQgemNvbmZfbGluZW5vKHZvaWQpCi17Ci0JcmV0dXJuIGN1cnJlbnRfcG9z
LmxpbmVubzsKLX0KLQotY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKQotewotCXJldHVy
biBjdXJyZW50X3Bvcy5maWxlID8gY3VycmVudF9wb3MuZmlsZS0+bmFtZSA6ICI8bm9uZT4iOwot
fQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9saXN0LmggYi9zdXBwb3J0L2tjb25m
aWcubmV3L2xpc3QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVjYjIzNy4uMDAw
MDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaAorKysgL2Rldi9udWxsCkBAIC0x
LDEzMiArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwotI2lm
bmRlZiBMSVNUX0gKLSNkZWZpbmUgTElTVF9ICi0KLS8qCi0gKiBDb3BpZWQgZnJvbSBpbmNsdWRl
L2xpbnV4Ly4uLgotICovCi0KLSN1bmRlZiBvZmZzZXRvZgotI2RlZmluZSBvZmZzZXRvZihUWVBF
LCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKLQotLyoqCi0gKiBjb250
YWluZXJfb2YgLSBjYXN0IGEgbWVtYmVyIG9mIGEgc3RydWN0dXJlIG91dCB0byB0aGUgY29udGFp
bmluZyBzdHJ1Y3R1cmUKLSAqIEBwdHI6ICAgICAgICB0aGUgcG9pbnRlciB0byB0aGUgbWVtYmVy
LgotICogQHR5cGU6ICAgICAgIHRoZSB0eXBlIG9mIHRoZSBjb250YWluZXIgc3RydWN0IHRoaXMg
aXMgZW1iZWRkZWQgaW4uCi0gKiBAbWVtYmVyOiAgICAgdGhlIG5hbWUgb2YgdGhlIG1lbWJlciB3
aXRoaW4gdGhlIHN0cnVjdC4KLSAqCi0gKi8KLSNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlw
ZSwgbWVtYmVyKSAoeyAgICAgICAgICAgICAgICAgICAgICBcCi0JY29uc3QgdHlwZW9mKCAoKHR5
cGUgKikwKS0+bWVtYmVyICkgKl9fbXB0ciA9IChwdHIpOyAgICBcCi0JKHR5cGUgKikoIChjaGFy
ICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkKLQotCi1zdHJ1Y3QgbGlzdF9o
ZWFkIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqcHJldjsKLX07Ci0KLQotI2RlZmluZSBM
SVNUX0hFQURfSU5JVChuYW1lKSB7ICYobmFtZSksICYobmFtZSkgfQotCi0jZGVmaW5lIExJU1Rf
SEVBRChuYW1lKSBcCi0Jc3RydWN0IGxpc3RfaGVhZCBuYW1lID0gTElTVF9IRUFEX0lOSVQobmFt
ZSkKLQotLyoqCi0gKiBsaXN0X2VudHJ5IC0gZ2V0IHRoZSBzdHJ1Y3QgZm9yIHRoaXMgZW50cnkK
LSAqIEBwdHI6CXRoZSAmc3RydWN0IGxpc3RfaGVhZCBwb2ludGVyLgotICogQHR5cGU6CXRoZSB0
eXBlIG9mIHRoZSBzdHJ1Y3QgdGhpcyBpcyBlbWJlZGRlZCBpbi4KLSAqIEBtZW1iZXI6CXRoZSBu
YW1lIG9mIHRoZSBsaXN0X2hlYWQgd2l0aGluIHRoZSBzdHJ1Y3QuCi0gKi8KLSNkZWZpbmUgbGlz
dF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgXAotCWNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1l
bWJlcikKLQotLyoqCi0gKiBsaXN0X2Zvcl9lYWNoX2VudHJ5CS0JaXRlcmF0ZSBvdmVyIGxpc3Qg
b2YgZ2l2ZW4gdHlwZQotICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNv
ci4KLSAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgotICogQG1lbWJlcjoJdGhlIG5h
bWUgb2YgdGhlIGxpc3RfaGVhZCB3aXRoaW4gdGhlIHN0cnVjdC4KLSAqLwotI2RlZmluZSBsaXN0
X2Zvcl9lYWNoX2VudHJ5KHBvcywgaGVhZCwgbWVtYmVyKQkJCQlcCi0JZm9yIChwb3MgPSBsaXN0
X2VudHJ5KChoZWFkKS0+bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCi0JICAgICAmcG9z
LT5tZW1iZXIgIT0gKGhlYWQpOyAJXAotCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJl
ci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCi0KLS8qKgotICogbGlzdF9mb3JfZWFjaF9l
bnRyeV9zYWZlIC0gaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSBzYWZlIGFnYWluc3Qg
cmVtb3ZhbCBvZiBsaXN0IGVudHJ5Ci0gKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxv
b3AgY3Vyc29yLgotICogQG46CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0
b3JhZ2UKLSAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgotICogQG1lbWJlcjoJdGhl
IG5hbWUgb2YgdGhlIGxpc3RfaGVhZCB3aXRoaW4gdGhlIHN0cnVjdC4KLSAqLwotI2RlZmluZSBs
aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBoZWFkLCBtZW1iZXIpCQkJXAotCWZvciAo
cG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSwJXAot
CQluID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7
CVwKLQkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CQkJCQlcCi0JICAgICBwb3MgPSBuLCBu
ID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKLQotLyoq
Ci0gKiBsaXN0X2VtcHR5IC0gdGVzdHMgd2hldGhlciBhIGxpc3QgaXMgZW1wdHkKLSAqIEBoZWFk
OiB0aGUgbGlzdCB0byB0ZXN0LgotICovCi1zdGF0aWMgaW5saW5lIGludCBsaXN0X2VtcHR5KGNv
bnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCi17Ci0JcmV0dXJuIGhlYWQtPm5leHQgPT0gaGVh
ZDsKLX0KLQotLyoKLSAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBjb25z
ZWN1dGl2ZSBlbnRyaWVzLgotICoKLSAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBt
YW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdwotICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVh
ZHkhCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQg
Kl9uZXcsCi0JCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LAotCQkJICAgICAgc3RydWN0
IGxpc3RfaGVhZCAqbmV4dCkKLXsKLQluZXh0LT5wcmV2ID0gX25ldzsKLQlfbmV3LT5uZXh0ID0g
bmV4dDsKLQlfbmV3LT5wcmV2ID0gcHJldjsKLQlwcmV2LT5uZXh0ID0gX25ldzsKLX0KLQotLyoq
Ci0gKiBsaXN0X2FkZF90YWlsIC0gYWRkIGEgbmV3IGVudHJ5Ci0gKiBAbmV3OiBuZXcgZW50cnkg
dG8gYmUgYWRkZWQKLSAqIEBoZWFkOiBsaXN0IGhlYWQgdG8gYWRkIGl0IGJlZm9yZQotICoKLSAq
IEluc2VydCBhIG5ldyBlbnRyeSBiZWZvcmUgdGhlIHNwZWNpZmllZCBoZWFkLgotICogVGhpcyBp
cyB1c2VmdWwgZm9yIGltcGxlbWVudGluZyBxdWV1ZXMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9p
ZCBsaXN0X2FkZF90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKl9uZXcsIHN0cnVjdCBsaXN0X2hlYWQg
KmhlYWQpCi17Ci0JX19saXN0X2FkZChfbmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKLX0KLQotLyoK
LSAqIERlbGV0ZSBhIGxpc3QgZW50cnkgYnkgbWFraW5nIHRoZSBwcmV2L25leHQgZW50cmllcwot
ICogcG9pbnQgdG8gZWFjaCBvdGhlci4KLSAqCi0gKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFs
IGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKLSAqIHRoZSBwcmV2L25leHQgZW50cmll
cyBhbHJlYWR5IQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlz
dF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQotewotCW5leHQtPnByZXYgPSBw
cmV2OwotCXByZXYtPm5leHQgPSBuZXh0OwotfQotCi0jZGVmaW5lIExJU1RfUE9JU09OMSAgKCh2
b2lkICopIDB4MDAxMDAxMDApCi0jZGVmaW5lIExJU1RfUE9JU09OMiAgKCh2b2lkICopIDB4MDAy
MDAyMDApCi0vKioKLSAqIGxpc3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuCi0gKiBA
ZW50cnk6IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgotICogTm90ZTogbGlz
dF9lbXB0eSgpIG9uIGVudHJ5IGRvZXMgbm90IHJldHVybiB0cnVlIGFmdGVyIHRoaXMsIHRoZSBl
bnRyeSBpcwotICogaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgotICovCi1zdGF0aWMgaW5saW5lIHZv
aWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpCi17Ci0JX19saXN0X2RlbChlbnRy
eS0+cHJldiwgZW50cnktPm5leHQpOwotCWVudHJ5LT5uZXh0ID0gKHN0cnVjdCBsaXN0X2hlYWQq
KUxJU1RfUE9JU09OMTsKLQllbnRyeS0+cHJldiA9IChzdHJ1Y3QgbGlzdF9oZWFkKilMSVNUX1BP
SVNPTjI7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgg
Yi9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA2OWQyYzc3Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAgKi8KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxA
bGludXgtbTY4ay5vcmc+Ci0gKi8KLQotI2lmbmRlZiBMS0NfSAotI2RlZmluZSBMS0NfSAotCi0j
aW5jbHVkZSAiZXhwci5oIgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2Vu
ZGlmCi0KLSNpbmNsdWRlICJsa2NfcHJvdG8uaCIKLQotI2RlZmluZSBTUkNUUkVFICJzcmN0cmVl
IgotCi0jaWZuZGVmIFBBQ0tBR0UKLSNkZWZpbmUgUEFDS0FHRSAibGludXgiCi0jZW5kaWYKLQot
I2lmbmRlZiBDT05GSUdfCi0jZGVmaW5lIENPTkZJR18gIkNPTkZJR18iCi0jZW5kaWYKLXN0YXRp
YyBpbmxpbmUgY29uc3QgY2hhciAqQ09ORklHX3ByZWZpeCh2b2lkKQotewotCXJldHVybiBnZXRl
bnYoICJDT05GSUdfIiApID86IENPTkZJR187Ci19Ci0jdW5kZWYgQ09ORklHXwotI2RlZmluZSBD
T05GSUdfIENPTkZJR19wcmVmaXgoKQotCi1lbnVtIGNvbmZfZGVmX21vZGUgewotCWRlZl9kZWZh
dWx0LAotCWRlZl95ZXMsCi0JZGVmX21vZCwKLQlkZWZfbm8sCi0JZGVmX3JhbmRvbQotfTsKLQot
ZXh0ZXJuIGludCB5eWxpbmVubzsKLXZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCk7Ci12b2lkIHpj
b25mX3N0YXJ0aGVscCh2b2lkKTsKLUZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUp
Owotdm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgemNvbmZfbmV4
dGZpbGUoY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIHpjb25mX25leHRmaWxlcyhjb25zdCBjaGFy
ICpuYW1lKTsKLWludCB6Y29uZl9saW5lbm8odm9pZCk7Ci1jb25zdCBjaGFyICp6Y29uZl9jdXJu
YW1lKHZvaWQpOwotCi0vKiBjb25mZGF0YS5jICovCi1jb25zdCBjaGFyICpjb25mX2dldF9jb25m
aWduYW1lKHZvaWQpOwotY2hhciAqY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSh2b2lkKTsKLXZv
aWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50KTsKLXZvaWQgc3ltX2FkZF9jaGFuZ2Vf
Y291bnQoaW50IGNvdW50KTsKLWJvb2wgY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGVudW0gY29u
Zl9kZWZfbW9kZSBtb2RlKTsKLXZvaWQgc2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1i
b2wgKmNzeW0pOwotCi0vKiBjb25mZGF0YS5jIGFuZCBleHByLmMgKi8KLXN0YXRpYyBpbmxpbmUg
dm9pZCB4ZndyaXRlKGNvbnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IGNvdW50LCBG
SUxFICpvdXQpCi17Ci0JYXNzZXJ0KGxlbiAhPSAwKTsKLQotCWlmIChmd3JpdGUoc3RyLCBsZW4s
IGNvdW50LCBvdXQpICE9IGNvdW50KQotCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluIHdyaXRp
bmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsKLX0KLQotLyogbWVudS5jICovCi12b2lkIF9tZW51X2lu
aXQodm9pZCk7Ci12b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVudSwgY29uc3QgY2hhciAq
Zm10LCAuLi4pOwotc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9pZCk7Ci12b2lkIG1lbnVf
ZW5kX21lbnUodm9pZCk7Ci12b2lkIG1lbnVfYWRkX2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSk7
Ci12b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVwKTsKLXZvaWQgbWVudV9hZGRfdmlz
aWJpbGl0eShzdHJ1Y3QgZXhwciAqZGVwKTsKLXN0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRfcHJv
bXB0KGVudW0gcHJvcF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmRlcCk7
Ci12b2lkIG1lbnVfYWRkX2V4cHIoZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmV4
cHIsIHN0cnVjdCBleHByICpkZXApOwotdm9pZCBtZW51X2FkZF9zeW1ib2woZW51bSBwcm9wX3R5
cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3QgZXhwciAqZGVwKTsKLXZvaWQgbWVu
dV9hZGRfb3B0aW9uX21vZHVsZXModm9pZCk7Ci12b2lkIG1lbnVfYWRkX29wdGlvbl9kZWZjb25m
aWdfbGlzdCh2b2lkKTsKLXZvaWQgbWVudV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3kodm9pZCk7
Ci12b2lkIG1lbnVfZmluYWxpemUoc3RydWN0IG1lbnUgKnBhcmVudCk7Ci12b2lkIG1lbnVfc2V0
X3R5cGUoaW50IHR5cGUpOwotCi0vKiB1dGlsLmMgKi8KLXN0cnVjdCBmaWxlICpmaWxlX2xvb2t1
cChjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpOwotdm9pZCAq
eGNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKTsKLXZvaWQgKnhyZWFsbG9jKHZvaWQg
KnAsIHNpemVfdCBzaXplKTsKLWNoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcyk7Ci1jaGFyICp4
c3RybmR1cChjb25zdCBjaGFyICpzLCBzaXplX3Qgbik7Ci0KLS8qIGxleGVyLmwgKi8KLWludCB5
eWxleCh2b2lkKTsKLQotc3RydWN0IGdzdHIgewotCXNpemVfdCBsZW47Ci0JY2hhciAgKnM7Ci0J
LyoKLQkqIHdoZW4gbWF4X3dpZHRoIGlzIG5vdCB6ZXJvIGxvbmcgbGluZXMgaW4gc3RyaW5nIHMg
KGlmIGFueSkgZ2V0Ci0JKiB3cmFwcGVkIG5vdCB0byBleGNlZWQgdGhlIG1heF93aWR0aCB2YWx1
ZQotCSovCi0JaW50IG1heF93aWR0aDsKLX07Ci1zdHJ1Y3QgZ3N0ciBzdHJfbmV3KHZvaWQpOwot
dm9pZCBzdHJfZnJlZShzdHJ1Y3QgZ3N0ciAqZ3MpOwotdm9pZCBzdHJfYXBwZW5kKHN0cnVjdCBn
c3RyICpncywgY29uc3QgY2hhciAqcyk7Ci12b2lkIHN0cl9wcmludGYoc3RydWN0IGdzdHIgKmdz
LCBjb25zdCBjaGFyICpmbXQsIC4uLik7Ci1jb25zdCBjaGFyICpzdHJfZ2V0KHN0cnVjdCBnc3Ry
ICpncyk7Ci0KLS8qIHN5bWJvbC5jICovCi12b2lkIHN5bV9jbGVhcl9hbGxfdmFsaWQodm9pZCk7
Ci1zdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKTsK
LXN0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSk7
Ci1jb25zdCBjaGFyICpzeW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSk7
Ci1zdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZGVwcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pOwotc3Ry
dWN0IHByb3BlcnR5ICpwcm9wX2FsbG9jKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1i
b2wgKnN5bSk7Ci1zdHJ1Y3Qgc3ltYm9sICpwcm9wX2dldF9zeW1ib2woc3RydWN0IHByb3BlcnR5
ICpwcm9wKTsKLQotc3RhdGljIGlubGluZSB0cmlzdGF0ZSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVl
KHN0cnVjdCBzeW1ib2wgKnN5bSkKLXsKLQlyZXR1cm4gc3ltLT5jdXJyLnRyaTsKLX0KLQotCi1z
dGF0aWMgaW5saW5lIHN0cnVjdCBzeW1ib2wgKnN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBz
eW1ib2wgKnN5bSkKLXsKLQlyZXR1cm4gKHN0cnVjdCBzeW1ib2wgKilzeW0tPmN1cnIudmFsOwot
fQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3ltX3NldF9jaG9pY2VfdmFsdWUoc3RydWN0IHN5bWJv
bCAqY2gsIHN0cnVjdCBzeW1ib2wgKmNodmFsKQotewotCXJldHVybiBzeW1fc2V0X3RyaXN0YXRl
X3ZhbHVlKGNodmFsLCB5ZXMpOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2lj
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0JcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hP
SUNFID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2lj
ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0JcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1C
T0xfQ0hPSUNFVkFMID8gdHJ1ZSA6IGZhbHNlOwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgc3lt
X2lzX29wdGlvbmFsKHN0cnVjdCBzeW1ib2wgKnN5bSkKLXsKLQlyZXR1cm4gc3ltLT5mbGFncyAm
IFNZTUJPTF9PUFRJT05BTCA/IHRydWUgOiBmYWxzZTsKLX0KLQotc3RhdGljIGlubGluZSBib29s
IHN5bV9oYXNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQotewotCXJldHVybiBzeW0tPmZsYWdz
ICYgU1lNQk9MX0RFRl9VU0VSID8gdHJ1ZSA6IGZhbHNlOwotfQotCi0jaWZkZWYgX19jcGx1c3Bs
dXMKLX0KLSNlbmRpZgotCi0jZW5kaWYgLyogTEtDX0ggKi8KZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvbGtjX3Byb3RvLmggYi9zdXBwb3J0L2tjb25maWcubmV3L2xrY19wcm90by5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmMyNjc1Li4wMDAwMDAwCi0tLSBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvbGtjX3Byb3RvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCww
IEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwotI2luY2x1ZGUgPHN0
ZGFyZy5oPgotCi0vKiBjb25mZGF0YS5jICovCi12b2lkIGNvbmZfcGFyc2UoY29uc3QgY2hhciAq
bmFtZSk7Ci1pbnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpOwotaW50IGNvbmZfcmVhZF9z
aW1wbGUoY29uc3QgY2hhciAqbmFtZSwgaW50KTsKLWludCBjb25mX3dyaXRlX2RlZmNvbmZpZyhj
b25zdCBjaGFyICpuYW1lKTsKLWludCBjb25mX3dyaXRlKGNvbnN0IGNoYXIgKm5hbWUpOwotaW50
IGNvbmZfd3JpdGVfYXV0b2NvbmYoaW50IG92ZXJ3cml0ZSk7Ci1ib29sIGNvbmZfZ2V0X2NoYW5n
ZWQodm9pZCk7Ci12b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZuKSh2b2lk
KSk7Ci12b2lkIGNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2sodm9pZCAoKmZuKShjb25zdCBjaGFy
ICpzKSk7Ci0KLS8qIG1lbnUuYyAqLwotZXh0ZXJuIHN0cnVjdCBtZW51IHJvb3RtZW51OwotCi1i
b29sIG1lbnVfaXNfZW1wdHkoc3RydWN0IG1lbnUgKm1lbnUpOwotYm9vbCBtZW51X2lzX3Zpc2li
bGUoc3RydWN0IG1lbnUgKm1lbnUpOwotYm9vbCBtZW51X2hhc19wcm9tcHQoc3RydWN0IG1lbnUg
Km1lbnUpOwotY29uc3QgY2hhciAqIG1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSk7
Ci1zdHJ1Y3QgbWVudSAqIG1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSk7Ci1z
dHJ1Y3QgbWVudSAqIG1lbnVfZ2V0X3BhcmVudF9tZW51KHN0cnVjdCBtZW51ICptZW51KTsKLWJv
b2wgbWVudV9oYXNfaGVscChzdHJ1Y3QgbWVudSAqbWVudSk7Ci1jb25zdCBjaGFyICogbWVudV9n
ZXRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSk7Ci1zdHJ1Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0
cihzdHJ1Y3Qgc3ltYm9sICoqc3ltX2Fyciwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7Ci12b2lk
IG1lbnVfZ2V0X2V4dF9oZWxwKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCk7
Ci0KLS8qIHN5bWJvbC5jICovCi1leHRlcm4gc3RydWN0IHN5bWJvbCAqIHN5bWJvbF9oYXNoW1NZ
TUJPTF9IQVNIU0laRV07Ci0KLXN0cnVjdCBzeW1ib2wgKiBzeW1fbG9va3VwKGNvbnN0IGNoYXIg
Km5hbWUsIGludCBmbGFncyk7Ci1zdHJ1Y3Qgc3ltYm9sICogc3ltX2ZpbmQoY29uc3QgY2hhciAq
bmFtZSk7Ci1jb25zdCBjaGFyICogc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciAq
aW4pOwotc3RydWN0IHN5bWJvbCAqKiBzeW1fcmVfc2VhcmNoKGNvbnN0IGNoYXIgKnBhdHRlcm4p
OwotY29uc3QgY2hhciAqIHN5bV90eXBlX25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlKTsKLXZv
aWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKTsKLWVudW0gc3ltYm9sX3R5cGUg
c3ltX2dldF90eXBlKHN0cnVjdCBzeW1ib2wgKnN5bSk7Ci1ib29sIHN5bV90cmlzdGF0ZV93aXRo
aW5fcmFuZ2Uoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSk7Ci1ib29sIHN5bV9zZXRf
dHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSk7Ci10cmlzdGF0
ZSBzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7Ci1ib29sIHN5
bV9zdHJpbmdfdmFsaWQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpuZXd2YWwpOwot
Ym9vbCBzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNo
YXIgKnN0cik7Ci1ib29sIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwg
Y29uc3QgY2hhciAqbmV3dmFsKTsKLWJvb2wgc3ltX2lzX2NoYW5nYWJsZShzdHJ1Y3Qgc3ltYm9s
ICpzeW0pOwotc3RydWN0IHByb3BlcnR5ICogc3ltX2dldF9jaG9pY2VfcHJvcChzdHJ1Y3Qgc3lt
Ym9sICpzeW0pOwotY29uc3QgY2hhciAqIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1i
b2wgKnN5bSk7Ci0KLWNvbnN0IGNoYXIgKiBwcm9wX2dldF90eXBlX25hbWUoZW51bSBwcm9wX3R5
cGUgdHlwZSk7Ci0KLS8qIHByZXByb2Nlc3MuYyAqLwotZW51bSB2YXJpYWJsZV9mbGF2b3Igewot
CVZBUl9TSU1QTEUsCi0JVkFSX1JFQ1VSU0lWRSwKLQlWQVJfQVBQRU5ELAotfTsKLXZvaWQgZW52
X3dyaXRlX2RlcChGSUxFICpmLCBjb25zdCBjaGFyICphdXRvX2NvbmZfbmFtZSk7Ci12b2lkIHZh
cmlhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwKLQkJICBlbnVt
IHZhcmlhYmxlX2ZsYXZvciBmbGF2b3IpOwotdm9pZCB2YXJpYWJsZV9hbGxfZGVsKHZvaWQpOwot
Y2hhciAqZXhwYW5kX3N0cmluZyhjb25zdCBjaGFyICppbik7Ci1jaGFyICpleHBhbmRfZG9sbGFy
KGNvbnN0IGNoYXIgKipzdHIpOwotY2hhciAqZXhwYW5kX29uZV90b2tlbihjb25zdCBjaGFyICoq
c3RyKTsKLQotLyogZXhwci5jICovCi12b2lkIGV4cHJfcHJpbnQoc3RydWN0IGV4cHIgKmUsIHZv
aWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNoYXIgKiksIHZvaWQgKmRh
dGEsIGludCBwcmV2dG9rZW4pOwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRp
YWxvZy9CSUcuRkFULldBUk5JTkcgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL0JJRy5G
QVQuV0FSTklORwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NiNWE3ZS4uMDAwMDAw
MAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORworKysg
L2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVGhpcyBpcyBOT1QgdGhlIG9mZmljaWFsIHZlcnNp
b24gb2YgZGlhbG9nLiAgVGhpcyB2ZXJzaW9uIGhhcyBiZWVuCi1zaWduaWZpY2FudGx5IG1vZGlm
aWVkIGZyb20gdGhlIG9yaWdpbmFsLiAgSXQgaXMgZm9yIHVzZSBieSB0aGUgTGludXgKLWtlcm5l
bCBjb25maWd1cmF0aW9uIHNjcmlwdC4gIFBsZWFzZSBkbyBub3QgYm90aGVyIFNhdmlvIExhbSB3
aXRoCi1xdWVzdGlvbnMgYWJvdXQgdGhpcyBwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9seGRpYWxvZy9jaGVja2xpc3QuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhk
aWFsb2cvY2hlY2tsaXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMTYxY2Yu
LjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9jaGVja2xpc3QuYwor
KysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMCsKLS8qCi0gKiAgY2hlY2tsaXN0LmMgLS0gaW1wbGVtZW50cyB0aGUgY2hlY2ts
aXN0IGJveAotICoKLSAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1
aGsuaGspCi0gKiAgICAgU3R1YXJ0IEhlcmJlcnQgLSBTLkhlcmJlcnRAc2hlZmZpZWxkLmFjLnVr
OiByYWRpb2xpc3QgZXh0ZW5zaW9uCi0gKiAgICAgQWxlc3NhbmRybyBSdWJpbmkgLSBydWJpbmlA
aXB2dmlzLnVuaXB2Lml0OiBtZXJnZWQgdGhlIHR3bwotICogIE1PRElGSUVEIEZPUiBMSU5VWCBL
RVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKLSAqLwot
Ci0jaW5jbHVkZSAiZGlhbG9nLmgiCi0KLXN0YXRpYyBpbnQgbGlzdF93aWR0aCwgY2hlY2tfeCwg
aXRlbV94OwotCi0vKgotICogUHJpbnQgbGlzdCBpdGVtCi0gKi8KLXN0YXRpYyB2b2lkIHByaW50
X2l0ZW0oV0lORE9XICogd2luLCBpbnQgY2hvaWNlLCBpbnQgc2VsZWN0ZWQpCi17Ci0JaW50IGk7
Ci0JY2hhciAqbGlzdF9pdGVtID0gbWFsbG9jKGxpc3Rfd2lkdGggKyAxKTsKLQotCXN0cm5jcHko
bGlzdF9pdGVtLCBpdGVtX3N0cigpLCBsaXN0X3dpZHRoIC0gaXRlbV94KTsKLQlsaXN0X2l0ZW1b
bGlzdF93aWR0aCAtIGl0ZW1feF0gPSAnXDAnOwotCi0JLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIGxh
c3QgaXRlbSAqLwotCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsKLQl3bW92ZSh3aW4s
IGNob2ljZSwgMCk7Ci0JZm9yIChpID0gMDsgaSA8IGxpc3Rfd2lkdGg7IGkrKykKLQkJd2FkZGNo
KHdpbiwgJyAnKTsKLQotCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194KTsKLQl3YXR0cnNldCh3
aW4sIHNlbGVjdGVkID8gZGxnLmNoZWNrX3NlbGVjdGVkLmF0cgotCQkgOiBkbGcuY2hlY2suYXRy
KTsKLQlpZiAoIWl0ZW1faXNfdGFnKCc6JykpCi0JCXdwcmludHcod2luLCAiKCVjKSIsIGl0ZW1f
aXNfdGFnKCdYJykgPyAnWCcgOiAnICcpOwotCi0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRs
Zy50YWdfc2VsZWN0ZWQuYXRyIDogZGxnLnRhZy5hdHIpOwotCW12d2FkZGNoKHdpbiwgY2hvaWNl
LCBpdGVtX3gsIGxpc3RfaXRlbVswXSk7Ci0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5p
dGVtX3NlbGVjdGVkLmF0ciA6IGRsZy5pdGVtLmF0cik7Ci0Jd2FkZHN0cih3aW4sIGxpc3RfaXRl
bSArIDEpOwotCWlmIChzZWxlY3RlZCkgewotCQl3bW92ZSh3aW4sIGNob2ljZSwgY2hlY2tfeCAr
IDEpOwotCQl3cmVmcmVzaCh3aW4pOwotCX0KLQlmcmVlKGxpc3RfaXRlbSk7Ci19Ci0KLS8qCi0g
KiBQcmludCB0aGUgc2Nyb2xsIGluZGljYXRvcnMuCi0gKi8KLXN0YXRpYyB2b2lkIHByaW50X2Fy
cm93cyhXSU5ET1cgKiB3aW4sIGludCBjaG9pY2UsIGludCBpdGVtX25vLCBpbnQgc2Nyb2xsLAot
CSAgICAgaW50IHksIGludCB4LCBpbnQgaGVpZ2h0KQotewotCXdtb3ZlKHdpbiwgeSwgeCk7Ci0K
LQlpZiAoc2Nyb2xsID4gMCkgewotCQl3YXR0cnNldCh3aW4sIGRsZy51YXJyb3cuYXRyKTsKLQkJ
d2FkZGNoKHdpbiwgQUNTX1VBUlJPVyk7Ci0JCXdhZGRzdHIod2luLCAiKC0pIik7Ci0JfSBlbHNl
IHsKLQkJd2F0dHJzZXQod2luLCBkbGcubWVudWJveC5hdHIpOwotCQl3YWRkY2god2luLCBBQ1Nf
SExJTkUpOwotCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwotCQl3YWRkY2god2luLCBBQ1NfSExJ
TkUpOwotCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwotCX0KLQotCXkgPSB5ICsgaGVpZ2h0ICsg
MTsKLQl3bW92ZSh3aW4sIHksIHgpOwotCi0JaWYgKChoZWlnaHQgPCBpdGVtX25vKSAmJiAoc2Ny
b2xsICsgY2hvaWNlIDwgaXRlbV9ubyAtIDEpKSB7Ci0JCXdhdHRyc2V0KHdpbiwgZGxnLmRhcnJv
dy5hdHIpOwotCQl3YWRkY2god2luLCBBQ1NfREFSUk9XKTsKLQkJd2FkZHN0cih3aW4sICIoKyki
KTsKLQl9IGVsc2UgewotCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94X2JvcmRlci5hdHIpOwot
CQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwotCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwotCQl3
YWRkY2god2luLCBBQ1NfSExJTkUpOwotCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwotCX0KLX0K
LQotLyoKLSAqICBEaXNwbGF5IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zCi0gKi8KLXN0YXRpYyB2
b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgs
IGludCBzZWxlY3RlZCkKLXsKLQlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOwotCWludCB5ID0gaGVp
Z2h0IC0gMjsKLQotCXByaW50X2J1dHRvbihkaWFsb2csICJTZWxlY3QiLCB5LCB4LCBzZWxlY3Rl
ZCA9PSAwKTsKLQlwcmludF9idXR0b24oZGlhbG9nLCAiIEhlbHAgIiwgeSwgeCArIDE0LCBzZWxl
Y3RlZCA9PSAxKTsKLQotCXdtb3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxNCAqIHNlbGVjdGVkKTsK
LQl3cmVmcmVzaChkaWFsb2cpOwotfQotCi0vKgotICogRGlzcGxheSBhIGRpYWxvZyBib3ggd2l0
aCBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSB0dXJuZWQgb24gb3Igb2ZmCi0gKiBpbiB0
aGUgc3R5bGUgb2YgcmFkaW9saXN0IChvbmx5IG9uZSBvcHRpb24gdHVybmVkIG9uIGF0IGEgdGlt
ZSkuCi0gKi8KLWludCBkaWFsb2dfY2hlY2tsaXN0KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBj
aGFyICpwcm9tcHQsIGludCBoZWlnaHQsCi0JCSAgICAgaW50IHdpZHRoLCBpbnQgbGlzdF9oZWln
aHQpCi17Ci0JaW50IGksIHgsIHksIGJveF94LCBib3hfeTsKLQlpbnQga2V5ID0gMCwgYnV0dG9u
ID0gMCwgY2hvaWNlID0gMCwgc2Nyb2xsID0gMCwgbWF4X2Nob2ljZTsKLQlXSU5ET1cgKmRpYWxv
ZywgKmxpc3Q7Ci0KLQkvKiB3aGljaCBpdGVtIHRvIGhpZ2hsaWdodCAqLwotCWl0ZW1fZm9yZWFj
aCgpIHsKLQkJaWYgKGl0ZW1faXNfdGFnKCdYJykpCi0JCQljaG9pY2UgPSBpdGVtX24oKTsKLQkJ
aWYgKGl0ZW1faXNfc2VsZWN0ZWQoKSkgewotCQkJY2hvaWNlID0gaXRlbV9uKCk7Ci0JCQlicmVh
azsKLQkJfQotCX0KLQotZG9fcmVzaXplOgotCWlmIChnZXRtYXh5KHN0ZHNjcikgPCAoaGVpZ2h0
ICsgQ0hFQ0tMSVNUX0hFSUdUSF9NSU4pKQotCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsK
LQlpZiAoZ2V0bWF4eChzdGRzY3IpIDwgKHdpZHRoICsgQ0hFQ0tMSVNUX1dJRFRIX01JTikpCi0J
CXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOwotCi0JbWF4X2Nob2ljZSA9IE1JTihsaXN0X2hl
aWdodCwgaXRlbV9jb3VudCgpKTsKLQotCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAq
LwotCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKLQl5ID0gKGdldG1heHkoc3Rk
c2NyKSAtIGhlaWdodCkgLyAyOwotCi0JZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQs
IHdpZHRoKTsKLQotCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsKLQlrZXlw
YWQoZGlhbG9nLCBUUlVFKTsKLQotCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0
aCwKLQkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7Ci0Jd2F0dHJzZXQoZGlhbG9n
LCBkbGcuYm9yZGVyLmF0cik7Ci0JbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1Nf
TFRFRSk7Ci0JZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQotCQl3YWRkY2goZGlhbG9n
LCBBQ1NfSExJTkUpOwotCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOwotCXdhZGRj
aChkaWFsb2csIEFDU19SVEVFKTsKLQotCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRo
KTsKLQotCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOwotCXByaW50X2F1dG93cmFw
KGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOwotCi0JbGlzdF93aWR0aCA9IHdpZHRo
IC0gNjsKLQlib3hfeSA9IGhlaWdodCAtIGxpc3RfaGVpZ2h0IC0gNTsKLQlib3hfeCA9ICh3aWR0
aCAtIGxpc3Rfd2lkdGgpIC8gMiAtIDE7Ci0KLQkvKiBjcmVhdGUgbmV3IHdpbmRvdyBmb3IgdGhl
IGxpc3QgKi8KLQlsaXN0ID0gc3Vid2luKGRpYWxvZywgbGlzdF9oZWlnaHQsIGxpc3Rfd2lkdGgs
IHkgKyBib3hfeSArIDEsCi0JCSAgICAgIHggKyBib3hfeCArIDEpOwotCi0Ja2V5cGFkKGxpc3Qs
IFRSVUUpOwotCi0JLyogZHJhdyBhIGJveCBhcm91bmQgdGhlIGxpc3QgaXRlbXMgKi8KLQlkcmF3
X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbGlzdF9oZWlnaHQgKyAyLCBsaXN0X3dpZHRoICsg
MiwKLQkJIGRsZy5tZW51Ym94X2JvcmRlci5hdHIsIGRsZy5tZW51Ym94LmF0cik7Ci0KLQkvKiBG
aW5kIGxlbmd0aCBvZiBsb25nZXN0IGl0ZW0gaW4gb3JkZXIgdG8gY2VudGVyIGNoZWNrbGlzdCAq
LwotCWNoZWNrX3ggPSAwOwotCWl0ZW1fZm9yZWFjaCgpCi0JCWNoZWNrX3ggPSBNQVgoY2hlY2tf
eCwgc3RybGVuKGl0ZW1fc3RyKCkpICsgNCk7Ci0JY2hlY2tfeCA9IE1JTihjaGVja194LCBsaXN0
X3dpZHRoKTsKLQotCWNoZWNrX3ggPSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8gMjsKLQlpdGVt
X3ggPSBjaGVja194ICsgNDsKLQotCWlmIChjaG9pY2UgPj0gbGlzdF9oZWlnaHQpIHsKLQkJc2Ny
b2xsID0gY2hvaWNlIC0gbGlzdF9oZWlnaHQgKyAxOwotCQljaG9pY2UgLT0gc2Nyb2xsOwotCX0K
LQotCS8qIFByaW50IHRoZSBsaXN0ICovCi0JZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkr
KykgewotCQlpdGVtX3NldChzY3JvbGwgKyBpKTsKLQkJcHJpbnRfaXRlbShsaXN0LCBpLCBpID09
IGNob2ljZSk7Ci0JfQotCi0JcHJpbnRfYXJyb3dzKGRpYWxvZywgY2hvaWNlLCBpdGVtX2NvdW50
KCksIHNjcm9sbCwKLQkJICAgICBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWln
aHQpOwotCi0JcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwotCi0Jd25v
dXRyZWZyZXNoKGRpYWxvZyk7Ci0Jd25vdXRyZWZyZXNoKGxpc3QpOwotCWRvdXBkYXRlKCk7Ci0K
LQl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKLQkJa2V5ID0gd2dldGNoKGRpYWxvZyk7Ci0KLQkJ
Zm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgewotCQkJaXRlbV9zZXQoaSArIHNjcm9s
bCk7Ci0JCQlpZiAodG91cHBlcihrZXkpID09IHRvdXBwZXIoaXRlbV9zdHIoKVswXSkpCi0JCQkJ
YnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA8IG1heF9jaG9pY2UgfHwga2V5ID09IEtFWV9VUCB8fCBr
ZXkgPT0gS0VZX0RPV04gfHwKLQkJICAgIGtleSA9PSAnKycgfHwga2V5ID09ICctJykgewotCQkJ
aWYgKGtleSA9PSBLRVlfVVAgfHwga2V5ID09ICctJykgewotCQkJCWlmICghY2hvaWNlKSB7Ci0J
CQkJCWlmICghc2Nyb2xsKQotCQkJCQkJY29udGludWU7Ci0JCQkJCS8qIFNjcm9sbCBsaXN0IGRv
d24gKi8KLQkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4gMSkgewotCQkJCQkJLyogRGUtaGlnaGxpZ2h0
IGN1cnJlbnQgZmlyc3QgaXRlbSAqLwotCQkJCQkJaXRlbV9zZXQoc2Nyb2xsKTsKLQkJCQkJCXBy
aW50X2l0ZW0obGlzdCwgMCwgRkFMU0UpOwotCQkJCQkJc2Nyb2xsb2sobGlzdCwgVFJVRSk7Ci0J
CQkJCQl3c2NybChsaXN0LCAtMSk7Ci0JCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7Ci0JCQkJ
CX0KLQkJCQkJc2Nyb2xsLS07Ci0JCQkJCWl0ZW1fc2V0KHNjcm9sbCk7Ci0JCQkJCXByaW50X2l0
ZW0obGlzdCwgMCwgVFJVRSk7Ci0JCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRl
bV9jb3VudCgpLAotCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3ggKyA1
LCBsaXN0X2hlaWdodCk7Ci0KLQkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7Ci0JCQkJCXdyZWZy
ZXNoKGxpc3QpOwotCi0JCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBwcmVz
cyAqLwotCQkJCX0gZWxzZQotCQkJCQlpID0gY2hvaWNlIC0gMTsKLQkJCX0gZWxzZSBpZiAoa2V5
ID09IEtFWV9ET1dOIHx8IGtleSA9PSAnKycpIHsKLQkJCQlpZiAoY2hvaWNlID09IG1heF9jaG9p
Y2UgLSAxKSB7Ci0JCQkJCWlmIChzY3JvbGwgKyBjaG9pY2UgPj0gaXRlbV9jb3VudCgpIC0gMSkK
LQkJCQkJCWNvbnRpbnVlOwotCQkJCQkvKiBTY3JvbGwgbGlzdCB1cCAqLwotCQkJCQlpZiAobGlz
dF9oZWlnaHQgPiAxKSB7Ci0JCQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBsYXN0IGl0ZW0g
YmVmb3JlIHNjcm9sbGluZyB1cCAqLwotCQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2lj
ZSAtIDEpOwotCQkJCQkJcHJpbnRfaXRlbShsaXN0LAotCQkJCQkJCSAgICBtYXhfY2hvaWNlIC0g
MSwKLQkJCQkJCQkgICAgRkFMU0UpOwotCQkJCQkJc2Nyb2xsb2sobGlzdCwgVFJVRSk7Ci0JCQkJ
CQl3c2NybChsaXN0LCAxKTsKLQkJCQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNFKTsKLQkJCQkJfQot
CQkJCQlzY3JvbGwrKzsKLQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpOwot
CQkJCQlwcmludF9pdGVtKGxpc3QsIG1heF9jaG9pY2UgLSAxLCBUUlVFKTsKLQotCQkJCQlwcmlu
dF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwKLQkJCQkJCSAgICAgc2Nyb2xs
LCBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOwotCi0JCQkJCXdub3V0
cmVmcmVzaChkaWFsb2cpOwotCQkJCQl3cmVmcmVzaChsaXN0KTsKLQotCQkJCQljb250aW51ZTsJ
Lyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8KLQkJCQl9IGVsc2UKLQkJCQkJaSA9IGNo
b2ljZSArIDE7Ci0JCQl9Ci0JCQlpZiAoaSAhPSBjaG9pY2UpIHsKLQkJCQkvKiBEZS1oaWdobGln
aHQgY3VycmVudCBpdGVtICovCi0JCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsKLQkJCQlw
cmludF9pdGVtKGxpc3QsIGNob2ljZSwgRkFMU0UpOwotCQkJCS8qIEhpZ2hsaWdodCBuZXcgaXRl
bSAqLwotCQkJCWNob2ljZSA9IGk7Ci0JCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsKLQkJ
CQlwcmludF9pdGVtKGxpc3QsIGNob2ljZSwgVFJVRSk7Ci0JCQkJd25vdXRyZWZyZXNoKGRpYWxv
Zyk7Ci0JCQkJd3JlZnJlc2gobGlzdCk7Ci0JCQl9Ci0JCQljb250aW51ZTsJLyogd2FpdCBmb3Ig
YW5vdGhlciBrZXkgcHJlc3MgKi8KLQkJfQotCQlzd2l0Y2ggKGtleSkgewotCQljYXNlICdIJzoK
LQkJY2FzZSAnaCc6Ci0JCWNhc2UgJz8nOgotCQkJYnV0dG9uID0gMTsKLQkJCS8qIGZhbGwtdGhy
b3VnaCAqLwotCQljYXNlICdTJzoKLQkJY2FzZSAncyc6Ci0JCWNhc2UgJyAnOgotCQljYXNlICdc
bic6Ci0JCQlpdGVtX2ZvcmVhY2goKQotCQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDApOwotCQkJaXRl
bV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsKLQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOwotCQkJZGVs
d2luKGxpc3QpOwotCQkJZGVsd2luKGRpYWxvZyk7Ci0JCQlyZXR1cm4gYnV0dG9uOwotCQljYXNl
IFRBQjoKLQkJY2FzZSBLRVlfTEVGVDoKLQkJY2FzZSBLRVlfUklHSFQ6Ci0JCQlidXR0b24gPSAo
KGtleSA9PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDogKytidXR0b24pIDwgMCkKLQkJCSAgICA/IDEg
OiAoYnV0dG9uID4gMSA/IDAgOiBidXR0b24pOwotCi0JCQlwcmludF9idXR0b25zKGRpYWxvZywg
aGVpZ2h0LCB3aWR0aCwgYnV0dG9uKTsKLQkJCXdyZWZyZXNoKGRpYWxvZyk7Ci0JCQlicmVhazsK
LQkJY2FzZSAnWCc6Ci0JCWNhc2UgJ3gnOgotCQkJa2V5ID0gS0VZX0VTQzsKLQkJCWJyZWFrOwot
CQljYXNlIEtFWV9FU0M6Ci0JCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7Ci0JCQlicmVhazsK
LQkJY2FzZSBLRVlfUkVTSVpFOgotCQkJZGVsd2luKGxpc3QpOwotCQkJZGVsd2luKGRpYWxvZyk7
Ci0JCQlvbl9rZXlfcmVzaXplKCk7Ci0JCQlnb3RvIGRvX3Jlc2l6ZTsKLQkJfQotCi0JCS8qIE5v
dywgdXBkYXRlIGV2ZXJ5dGhpbmcuLi4gKi8KLQkJZG91cGRhdGUoKTsKLQl9Ci0JZGVsd2luKGxp
c3QpOwotCWRlbHdpbihkaWFsb2cpOwotCXJldHVybiBrZXk7CQkvKiBFU0MgcHJlc3NlZCAqLwot
fQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9kaWFsb2cuaCBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDY4YjU2NWUuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRp
YWxvZy9kaWFsb2cuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8KLS8qCi0gKiAgZGlhbG9nLmggLS0gY29tbW9u
IGRlY2xhcmF0aW9ucyBmb3IgYWxsIGRpYWxvZyBtb2R1bGVzCi0gKgotICogIEFVVEhPUjogU2F2
aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+
Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxjdHlw
ZS5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHN0ZGJvb2wuaD4KLQotI2lmZGVmIF9fc3VuX18KLSNkZWZpbmUgQ1VSU19NQUNST1MKLSNlbmRp
ZgotI2luY2x1ZGUgPG5jdXJzZXMuaD4KLQotLyoKLSAqIENvbG9ycyBpbiBuY3Vyc2VzIDEuOS45
ZSBkbyBub3Qgd29yayBwcm9wZXJseSBzaW5jZSBmb3JlZ3JvdW5kIGFuZAotICogYmFja2dyb3Vu
ZCBjb2xvcnMgYXJlIE9SJ2QgcmF0aGVyIHRoYW4gc2VwYXJhdGVseSBtYXNrZWQuICBUaGlzIHZl
cnNpb24KLSAqIG9mIGRpYWxvZyB3YXMgaGFja2VkIHRvIHdvcmsgd2l0aCBuY3Vyc2VzIDEuOS45
ZSwgbWFraW5nIGl0IGluY29tcGF0aWJsZQotICogd2l0aCBzdGFuZGFyZCBjdXJzZXMuICBUaGUg
c2ltcGxlc3QgZml4ICh0byBtYWtlIHRoaXMgd29yayB3aXRoIHN0YW5kYXJkCi0gKiBjdXJzZXMp
IHVzZXMgdGhlIHdia2dkc2V0KCkgZnVuY3Rpb24sIG5vdCB1c2VkIGluIHRoZSBvcmlnaW5hbCBo
YWNrLgotICogVHVybiBpdCBvZmYgaWYgd2UncmUgYnVpbGRpbmcgd2l0aCAxLjkuOWUsIHNpbmNl
IGl0IGp1c3QgY29uZnVzZXMgdGhpbmdzLgotICovCi0jaWYgZGVmaW5lZChOQ1VSU0VTX1ZFUlNJ
T04pICYmIGRlZmluZWQoX05FRURfV1JBUCkgJiYgIWRlZmluZWQoR0NDX1BSSU5URkxJS0UpCi0j
ZGVmaW5lIE9MRF9OQ1VSU0VTIDEKLSN1bmRlZiAgd2JrZ2RzZXQKLSNkZWZpbmUgd2JrZ2RzZXQo
dyxwKQkJLypub3RoaW5nICovCi0jZWxzZQotI2RlZmluZSBPTERfTkNVUlNFUyAwCi0jZW5kaWYK
LQotI2RlZmluZSBUUihwYXJhbXMpIF90cmFjZWYgcGFyYW1zCi0KLSNkZWZpbmUgS0VZX0VTQyAy
NwotI2RlZmluZSBUQUIgOQotI2RlZmluZSBNQVhfTEVOIDIwNDgKLSNkZWZpbmUgQlVGX1NJWkUg
KDEwKjEwMjQpCi0jZGVmaW5lIE1JTih4LHkpICh4IDwgeSA/IHggOiB5KQotI2RlZmluZSBNQVgo
eCx5KSAoeCA+IHkgPyB4IDogeSkKLQotI2lmbmRlZiBBQ1NfVUxDT1JORVIKLSNkZWZpbmUgQUNT
X1VMQ09STkVSICcrJwotI2VuZGlmCi0jaWZuZGVmIEFDU19MTENPUk5FUgotI2RlZmluZSBBQ1Nf
TExDT1JORVIgJysnCi0jZW5kaWYKLSNpZm5kZWYgQUNTX1VSQ09STkVSCi0jZGVmaW5lIEFDU19V
UkNPUk5FUiAnKycKLSNlbmRpZgotI2lmbmRlZiBBQ1NfTFJDT1JORVIKLSNkZWZpbmUgQUNTX0xS
Q09STkVSICcrJwotI2VuZGlmCi0jaWZuZGVmIEFDU19ITElORQotI2RlZmluZSBBQ1NfSExJTkUg
Jy0nCi0jZW5kaWYKLSNpZm5kZWYgQUNTX1ZMSU5FCi0jZGVmaW5lIEFDU19WTElORSAnfCcKLSNl
bmRpZgotI2lmbmRlZiBBQ1NfTFRFRQotI2RlZmluZSBBQ1NfTFRFRSAnKycKLSNlbmRpZgotI2lm
bmRlZiBBQ1NfUlRFRQotI2RlZmluZSBBQ1NfUlRFRSAnKycKLSNlbmRpZgotI2lmbmRlZiBBQ1Nf
VUFSUk9XCi0jZGVmaW5lIEFDU19VQVJST1cgJ14nCi0jZW5kaWYKLSNpZm5kZWYgQUNTX0RBUlJP
VwotI2RlZmluZSBBQ1NfREFSUk9XICd2JwotI2VuZGlmCi0KLS8qIGVycm9yIHJldHVybiBjb2Rl
cyAqLwotI2RlZmluZSBFUlJESVNQTEFZVE9PU01BTEwgKEtFWV9NQVggKyAxKQotCi0vKgotICog
ICBDb2xvciBkZWZpbml0aW9ucwotICovCi1zdHJ1Y3QgZGlhbG9nX2NvbG9yIHsKLQljaHR5cGUg
YXRyOwkvKiBDb2xvciBhdHRyaWJ1dGUgKi8KLQlpbnQgZmc7CQkvKiBmb3JlZ3JvdW5kICovCi0J
aW50IGJnOwkJLyogYmFja2dyb3VuZCAqLwotCWludCBobDsJCS8qIGhpZ2hsaWdodCB0aGlzIGl0
ZW0gKi8KLX07Ci0KLXN0cnVjdCBzdWJ0aXRsZV9saXN0IHsKLQlzdHJ1Y3Qgc3VidGl0bGVfbGlz
dCAqbmV4dDsKLQljb25zdCBjaGFyICp0ZXh0OwotfTsKLQotc3RydWN0IGRpYWxvZ19pbmZvIHsK
LQljb25zdCBjaGFyICpiYWNrdGl0bGU7Ci0Jc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxl
czsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNjcmVlbjsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNo
YWRvdzsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGRpYWxvZzsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9y
IHRpdGxlOwotCXN0cnVjdCBkaWFsb2dfY29sb3IgYm9yZGVyOwotCXN0cnVjdCBkaWFsb2dfY29s
b3IgYnV0dG9uX2FjdGl2ZTsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9pbmFjdGl2ZTsK
LQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9rZXlfYWN0aXZlOwotCXN0cnVjdCBkaWFsb2df
Y29sb3IgYnV0dG9uX2tleV9pbmFjdGl2ZTsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9s
YWJlbF9hY3RpdmU7Ci0Jc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fbGFiZWxfaW5hY3RpdmU7
Ci0Jc3RydWN0IGRpYWxvZ19jb2xvciBpbnB1dGJveDsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGlu
cHV0Ym94X2JvcmRlcjsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveDsKLQlzdHJ1Y3Qg
ZGlhbG9nX2NvbG9yIHNlYXJjaGJveF90aXRsZTsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJj
aGJveF9ib3JkZXI7Ci0Jc3RydWN0IGRpYWxvZ19jb2xvciBwb3NpdGlvbl9pbmRpY2F0b3I7Ci0J
c3RydWN0IGRpYWxvZ19jb2xvciBtZW51Ym94OwotCXN0cnVjdCBkaWFsb2dfY29sb3IgbWVudWJv
eF9ib3JkZXI7Ci0Jc3RydWN0IGRpYWxvZ19jb2xvciBpdGVtOwotCXN0cnVjdCBkaWFsb2dfY29s
b3IgaXRlbV9zZWxlY3RlZDsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZzsKLQlzdHJ1Y3QgZGlh
bG9nX2NvbG9yIHRhZ19zZWxlY3RlZDsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19rZXk7Ci0J
c3RydWN0IGRpYWxvZ19jb2xvciB0YWdfa2V5X3NlbGVjdGVkOwotCXN0cnVjdCBkaWFsb2dfY29s
b3IgY2hlY2s7Ci0Jc3RydWN0IGRpYWxvZ19jb2xvciBjaGVja19zZWxlY3RlZDsKLQlzdHJ1Y3Qg
ZGlhbG9nX2NvbG9yIHVhcnJvdzsKLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGRhcnJvdzsKLX07Ci0K
LS8qCi0gKiBHbG9iYWwgdmFyaWFibGVzCi0gKi8KLWV4dGVybiBzdHJ1Y3QgZGlhbG9nX2luZm8g
ZGxnOwotZXh0ZXJuIGNoYXIgZGlhbG9nX2lucHV0X3Jlc3VsdFtdOwotZXh0ZXJuIGludCBzYXZl
ZF94LCBzYXZlZF95OwkJLyogTmVlZGVkIGluIHNpZ25hbCBoYW5kbGVyIGluIG1jb25mLmMgKi8K
LQotLyoKLSAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotCi0vKiBpdGVtIGxpc3QgYXMgdXNl
ZCBieSBjaGVja2xpc3QgYW5kIG1lbnVib3ggKi8KLXZvaWQgaXRlbV9yZXNldCh2b2lkKTsKLXZv
aWQgaXRlbV9tYWtlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKLXZvaWQgaXRlbV9hZGRfc3RyKGNv
bnN0IGNoYXIgKmZtdCwgLi4uKTsKLXZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKTsKLXZvaWQg
aXRlbV9zZXRfZGF0YSh2b2lkICpwKTsKLXZvaWQgaXRlbV9zZXRfc2VsZWN0ZWQoaW50IHZhbCk7
Ci1pbnQgaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCh2b2lkKTsKLXZvaWQgKml0ZW1fZGF0YSh2b2lk
KTsKLWNoYXIgaXRlbV90YWcodm9pZCk7Ci0KLS8qIGl0ZW0gbGlzdCBtYW5pcHVsYXRpb24gZm9y
IGx4ZGlhbG9nIHVzZSAqLwotI2RlZmluZSBNQVhJVEVNU1RSIDIwMAotc3RydWN0IGRpYWxvZ19p
dGVtIHsKLQljaGFyIHN0cltNQVhJVEVNU1RSXTsJLyogcHJvbXB0IGRpc3BsYXllZCAqLwotCWNo
YXIgdGFnOwotCXZvaWQgKmRhdGE7CS8qIHBvaW50ZXIgdG8gbWVudSBpdGVtIC0gdXNlZCBieSBt
ZW51Ym94K2NoZWNrbGlzdCAqLwotCWludCBzZWxlY3RlZDsJLyogU2V0IHRvIDEgYnkgZGlhbG9n
XyooKSBmdW5jdGlvbiBpZiBzZWxlY3RlZC4gKi8KLX07Ci0KLS8qIGxpc3Qgb2YgbGlhbG9nX2l0
ZW1zICovCi1zdHJ1Y3QgZGlhbG9nX2xpc3QgewotCXN0cnVjdCBkaWFsb2dfaXRlbSBub2RlOwot
CXN0cnVjdCBkaWFsb2dfbGlzdCAqbmV4dDsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgZGlhbG9nX2xp
c3QgKml0ZW1fY3VyOwotZXh0ZXJuIHN0cnVjdCBkaWFsb2dfbGlzdCBpdGVtX25pbDsKLWV4dGVy
biBzdHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1faGVhZDsKLQotaW50IGl0ZW1fY291bnQodm9pZCk7
Ci12b2lkIGl0ZW1fc2V0KGludCBuKTsKLWludCBpdGVtX24odm9pZCk7Ci1jb25zdCBjaGFyICpp
dGVtX3N0cih2b2lkKTsKLWludCBpdGVtX2lzX3NlbGVjdGVkKHZvaWQpOwotaW50IGl0ZW1faXNf
dGFnKGNoYXIgdGFnKTsKLSNkZWZpbmUgaXRlbV9mb3JlYWNoKCkgXAotCWZvciAoaXRlbV9jdXIg
PSBpdGVtX2hlYWQgPyBpdGVtX2hlYWQ6IGl0ZW1fY3VyOyBcCi0JICAgICBpdGVtX2N1ciAmJiAo
aXRlbV9jdXIgIT0gJml0ZW1fbmlsKTsgaXRlbV9jdXIgPSBpdGVtX2N1ci0+bmV4dCkKLQotLyog
Z2VuZXJpYyBrZXkgaGFuZGxlcnMgKi8KLWludCBvbl9rZXlfZXNjKFdJTkRPVyAqd2luKTsKLWlu
dCBvbl9rZXlfcmVzaXplKHZvaWQpOwotCi0vKiBtaW5pbXVtIChyZSlzaXplIHZhbHVlcyAqLwot
I2RlZmluZSBDSEVDS0xJU1RfSEVJR1RIX01JTiA2CS8qIEZvciBkaWFsb2dfY2hlY2tsaXN0KCkg
Ki8KLSNkZWZpbmUgQ0hFQ0tMSVNUX1dJRFRIX01JTiA2Ci0jZGVmaW5lIElOUFVUQk9YX0hFSUdU
SF9NSU4gMgkvKiBGb3IgZGlhbG9nX2lucHV0Ym94KCkgKi8KLSNkZWZpbmUgSU5QVVRCT1hfV0lE
VEhfTUlOIDIKLSNkZWZpbmUgTUVOVUJPWF9IRUlHVEhfTUlOIDE1CS8qIEZvciBkaWFsb2dfbWVu
dSgpICovCi0jZGVmaW5lIE1FTlVCT1hfV0lEVEhfTUlOIDY1Ci0jZGVmaW5lIFRFWFRCT1hfSEVJ
R1RIX01JTiA4CS8qIEZvciBkaWFsb2dfdGV4dGJveCgpICovCi0jZGVmaW5lIFRFWFRCT1hfV0lE
VEhfTUlOIDgKLSNkZWZpbmUgWUVTTk9fSEVJR1RIX01JTiA0CS8qIEZvciBkaWFsb2dfeWVzbm8o
KSAqLwotI2RlZmluZSBZRVNOT19XSURUSF9NSU4gNAotI2RlZmluZSBXSU5ET1dfSEVJR1RIX01J
TiAxOQkvKiBGb3IgaW5pdF9kaWFsb2coKSAqLwotI2RlZmluZSBXSU5ET1dfV0lEVEhfTUlOIDgw
Ci0KLWludCBpbml0X2RpYWxvZyhjb25zdCBjaGFyICpiYWNrdGl0bGUpOwotdm9pZCBzZXRfZGlh
bG9nX2JhY2t0aXRsZShjb25zdCBjaGFyICpiYWNrdGl0bGUpOwotdm9pZCBzZXRfZGlhbG9nX3N1
YnRpdGxlcyhzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0bGVzKTsKLXZvaWQgZW5kX2RpYWxv
ZyhpbnQgeCwgaW50IHkpOwotdm9pZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdo
dCwgaW50IHdpZHRoLCBjaHR5cGUgYXR0cik7Ci12b2lkIGRpYWxvZ19jbGVhcih2b2lkKTsKLXZv
aWQgcHJpbnRfYXV0b3dyYXAoV0lORE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3
aWR0aCwgaW50IHksIGludCB4KTsKLXZvaWQgcHJpbnRfYnV0dG9uKFdJTkRPVyAqIHdpbiwgY29u
c3QgY2hhciAqbGFiZWwsIGludCB5LCBpbnQgeCwgaW50IHNlbGVjdGVkKTsKLXZvaWQgcHJpbnRf
dGl0bGUoV0lORE9XICpkaWFsb2csIGNvbnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpOwotdm9p
ZCBkcmF3X2JveChXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdp
ZHRoLCBjaHR5cGUgYm94LAotCSAgICAgIGNodHlwZSBib3JkZXIpOwotdm9pZCBkcmF3X3NoYWRv
dyhXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsKLQot
aW50IGZpcnN0X2FscGhhKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZXhlbXB0KTsK
LWludCBkaWFsb2dfeWVzbm8oY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwg
aW50IGhlaWdodCwgaW50IHdpZHRoKTsKLWludCBkaWFsb2dfbXNnYm94KGNvbnN0IGNoYXIgKnRp
dGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsCi0JCSAgaW50IHdpZHRoLCBpbnQg
cGF1c2UpOwotCi0KLXR5cGVkZWYgdm9pZCAoKnVwZGF0ZV90ZXh0X2ZuKShjaGFyICpidWYsIHNp
emVfdCBzdGFydCwgc2l6ZV90IGVuZCwgdm9pZAotCQkJICAgICAgICpfZGF0YSk7Ci1pbnQgZGlh
bG9nX3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRidWYsIGludCBpbml0aWFsX2hl
aWdodCwKLQkJICAgaW50IGluaXRpYWxfd2lkdGgsIGludCAqa2V5cywgaW50ICpfdnNjcm9sbCwg
aW50ICpfaHNjcm9sbCwKLQkJICAgdXBkYXRlX3RleHRfZm4gdXBkYXRlX3RleHQsIHZvaWQgKmRh
dGEpOwotaW50IGRpYWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9t
cHQsCi0JCWNvbnN0IHZvaWQgKnNlbGVjdGVkLCBpbnQgKnNfc2Nyb2xsKTsKLWludCBkaWFsb2df
Y2hlY2tsaXN0KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWln
aHQsCi0JCSAgICAgaW50IHdpZHRoLCBpbnQgbGlzdF9oZWlnaHQpOwotaW50IGRpYWxvZ19pbnB1
dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAot
CQkgICAgaW50IHdpZHRoLCBjb25zdCBjaGFyICppbml0KTsKLQotLyoKLSAqIFRoaXMgaXMgdGhl
IGJhc2UgZm9yIGZpY3RpdGlvdXMga2V5cywgd2hpY2ggYWN0aXZhdGUKLSAqIHRoZSBidXR0b25z
LgotICoKLSAqIE1vdXNlLWdlbmVyYXRlZCBrZXlzIGFyZSB0aGUgZm9sbG93aW5nOgotICogICAt
LSB0aGUgZmlyc3QgMzIgYXJlIHVzZWQgYXMgbnVtYmVycywgaW4gYWRkaXRpb24gdG8gJzAnLSc5
JwotICogICAtLSB0aGUgbG93ZXJjYXNlIGFyZSB1c2VkIHRvIHNpZ25hbCBtb3VzZS1lbnRlciBl
dmVudHMgKE1fRVZFTlQgKyAnbycpCi0gKiAgIC0tIHVwcGVyY2FzZSBjaGFycyBhcmUgdXNlZCB0
byBpbnZva2UgdGhlIGJ1dHRvbiAoTV9FVkVOVCArICdPJykKLSAqLwotI2RlZmluZSBNX0VWRU5U
IChLRVlfTUFYKzEpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2lu
cHV0Ym94LmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2lucHV0Ym94LmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkY2ZiMjguLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjg5ICsw
LDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwotLyoKLSAqICBpbnB1
dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIGlucHV0IGJveAotICoKLSAqICBPUklHSU5BTCBBVVRI
T1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCi0gKiAgTU9ESUZJRUQgRk9SIExJTlVY
IEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQotICov
Ci0KLSNpbmNsdWRlICJkaWFsb2cuaCIKLQotY2hhciBkaWFsb2dfaW5wdXRfcmVzdWx0W01BWF9M
RU4gKyAxXTsKLQotLyoKLSAqICBQcmludCB0aGUgdGVybWluYXRpb24gYnV0dG9ucwotICovCi1z
dGF0aWMgdm9pZCBwcmludF9idXR0b25zKFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50
IHdpZHRoLCBpbnQgc2VsZWN0ZWQpCi17Ci0JaW50IHggPSB3aWR0aCAvIDIgLSAxMTsKLQlpbnQg
eSA9IGhlaWdodCAtIDI7Ci0KLQlwcmludF9idXR0b24oZGlhbG9nLCAiICBPayAgIiwgeSwgeCwg
c2VsZWN0ZWQgPT0gMCk7Ci0JcHJpbnRfYnV0dG9uKGRpYWxvZywgIiBIZWxwICIsIHksIHggKyAx
NCwgc2VsZWN0ZWQgPT0gMSk7Ci0KLQl3bW92ZShkaWFsb2csIHksIHggKyAxICsgMTQgKiBzZWxl
Y3RlZCk7Ci0Jd3JlZnJlc2goZGlhbG9nKTsKLX0KLQotLyoKLSAqIERpc3BsYXkgYSBkaWFsb2cg
Ym94IGZvciBpbnB1dGluZyBhIHN0cmluZwotICovCi1pbnQgZGlhbG9nX2lucHV0Ym94KGNvbnN0
IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCwK
LQkJICAgIGNvbnN0IGNoYXIgKmluaXQpCi17Ci0JaW50IGksIHgsIHksIGJveF95LCBib3hfeCwg
Ym94X3dpZHRoOwotCWludCBpbnB1dF94ID0gMCwga2V5ID0gMCwgYnV0dG9uID0gLTE7Ci0JaW50
IHNob3dfeCwgbGVuLCBwb3M7Ci0JY2hhciAqaW5zdHIgPSBkaWFsb2dfaW5wdXRfcmVzdWx0Owot
CVdJTkRPVyAqZGlhbG9nOwotCi0JaWYgKCFpbml0KQotCQlpbnN0clswXSA9ICdcMCc7Ci0JZWxz
ZQotCQlzdHJjcHkoaW5zdHIsIGluaXQpOwotCi1kb19yZXNpemU6Ci0JaWYgKGdldG1heHkoc3Rk
c2NyKSA8PSAoaGVpZ2h0IC0gSU5QVVRCT1hfSEVJR1RIX01JTikpCi0JCXJldHVybiAtRVJSRElT
UExBWVRPT1NNQUxMOwotCWlmIChnZXRtYXh4KHN0ZHNjcikgPD0gKHdpZHRoIC0gSU5QVVRCT1hf
V0lEVEhfTUlOKSkKLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7Ci0KLQkvKiBjZW50ZXIg
ZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KLQl4ID0gKGdldG1heHgoc3Rkc2NyKSAtIHdpZHRoKSAv
IDI7Ci0JeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsKLQotCWRyYXdfc2hhZG93
KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7Ci0KLQlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0
LCB3aWR0aCwgeSwgeCk7Ci0Ja2V5cGFkKGRpYWxvZywgVFJVRSk7Ci0KLQlkcmF3X2JveChkaWFs
b2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCi0JCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5h
dHIpOwotCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOwotCW12d2FkZGNoKGRpYWxv
ZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOwotCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7
IGkrKykKLQkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKLQl3YXR0cnNldChkaWFsb2csIGRs
Zy5kaWFsb2cuYXRyKTsKLQl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7Ci0KLQlwcmludF90aXRs
ZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7Ci0KLQl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cu
YXRyKTsKLQlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsK
LQotCS8qIERyYXcgdGhlIGlucHV0IGZpZWxkIGJveCAqLwotCWJveF93aWR0aCA9IHdpZHRoIC0g
NjsKLQlnZXR5eChkaWFsb2csIHksIHgpOwotCWJveF95ID0geSArIDI7Ci0JYm94X3ggPSAod2lk
dGggLSBib3hfd2lkdGgpIC8gMjsKLQlkcmF3X2JveChkaWFsb2csIHkgKyAxLCBib3hfeCAtIDEs
IDMsIGJveF93aWR0aCArIDIsCi0JCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOwot
Ci0JcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOwotCi0JLyogU2V0IHVw
IHRoZSBpbml0aWFsIHZhbHVlICovCi0Jd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOwotCXdh
dHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7Ci0KLQlsZW4gPSBzdHJsZW4oaW5zdHIp
OwotCXBvcyA9IGxlbjsKLQotCWlmIChsZW4gPj0gYm94X3dpZHRoKSB7Ci0JCXNob3dfeCA9IGxl
biAtIGJveF93aWR0aCArIDE7Ci0JCWlucHV0X3ggPSBib3hfd2lkdGggLSAxOwotCQlmb3IgKGkg
PSAwOyBpIDwgYm94X3dpZHRoIC0gMTsgaSsrKQotCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hv
d194ICsgaV0pOwotCX0gZWxzZSB7Ci0JCXNob3dfeCA9IDA7Ci0JCWlucHV0X3ggPSBsZW47Ci0J
CXdhZGRzdHIoZGlhbG9nLCBpbnN0cik7Ci0JfQotCi0Jd21vdmUoZGlhbG9nLCBib3hfeSwgYm94
X3ggKyBpbnB1dF94KTsKLQotCXdyZWZyZXNoKGRpYWxvZyk7Ci0KLQl3aGlsZSAoa2V5ICE9IEtF
WV9FU0MpIHsKLQkJa2V5ID0gd2dldGNoKGRpYWxvZyk7Ci0KLQkJaWYgKGJ1dHRvbiA9PSAtMSkg
ewkvKiBJbnB1dCBib3ggc2VsZWN0ZWQgKi8KLQkJCXN3aXRjaCAoa2V5KSB7Ci0JCQljYXNlIFRB
QjoKLQkJCWNhc2UgS0VZX1VQOgotCQkJY2FzZSBLRVlfRE9XTjoKLQkJCQlicmVhazsKLQkJCWNh
c2UgS0VZX0JBQ0tTUEFDRToKLQkJCWNhc2UgODogICAvKiBeSCAqLwotCQkJY2FzZSAxMjc6IC8q
IF4/ICovCi0JCQkJaWYgKHBvcykgewotCQkJCQl3YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJv
eC5hdHIpOwotCQkJCQlpZiAoaW5wdXRfeCA9PSAwKSB7Ci0JCQkJCQlzaG93X3gtLTsKLQkJCQkJ
fSBlbHNlCi0JCQkJCQlpbnB1dF94LS07Ci0KLQkJCQkJaWYgKHBvcyA8IGxlbikgewotCQkJCQkJ
Zm9yIChpID0gcG9zIC0gMTsgaSA8IGxlbjsgaSsrKSB7Ci0JCQkJCQkJaW5zdHJbaV0gPSBpbnN0
cltpKzFdOwotCQkJCQkJfQotCQkJCQl9Ci0KLQkJCQkJcG9zLS07Ci0JCQkJCWxlbi0tOwotCQkJ
CQlpbnN0cltsZW5dID0gJ1wwJzsKLQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOwot
CQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsKLQkJCQkJCWlmICghaW5zdHJb
c2hvd194ICsgaV0pIHsKLQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOwotCQkJCQkJCWJyZWFr
OwotCQkJCQkJfQotCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOwotCQkJ
CQl9Ci0JCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7Ci0JCQkJCXdy
ZWZyZXNoKGRpYWxvZyk7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJY2FzZSBLRVlfTEVGVDoK
LQkJCQlpZiAocG9zID4gMCkgewotCQkJCQlpZiAoaW5wdXRfeCA+IDApIHsKLQkJCQkJCXdtb3Zl
KGRpYWxvZywgYm94X3ksIC0taW5wdXRfeCArIGJveF94KTsKLQkJCQkJfSBlbHNlIGlmIChpbnB1
dF94ID09IDApIHsKLQkJCQkJCXNob3dfeC0tOwotCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwg
Ym94X3gpOwotCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aDsgaSsrKSB7Ci0JCQkJCQkJ
aWYgKCFpbnN0cltzaG93X3ggKyBpXSkgewotCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOwot
CQkJCQkJCQlicmVhazsKLQkJCQkJCQl9Ci0JCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hv
d194ICsgaV0pOwotCQkJCQkJfQotCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOwot
CQkJCQl9Ci0JCQkJCXBvcy0tOwotCQkJCX0KLQkJCQljb250aW51ZTsKLQkJCWNhc2UgS0VZX1JJ
R0hUOgotCQkJCWlmIChwb3MgPCBsZW4pIHsKLQkJCQkJaWYgKGlucHV0X3ggPCBib3hfd2lkdGgg
LSAxKSB7Ci0JCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCArK2lucHV0X3ggKyBib3hfeCk7Ci0J
CQkJCX0gZWxzZSBpZiAoaW5wdXRfeCA9PSBib3hfd2lkdGggLSAxKSB7Ci0JCQkJCQlzaG93X3gr
KzsKLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsKLQkJCQkJCWZvciAoaSA9IDA7
IGkgPCBib3hfd2lkdGg7IGkrKykgewotCQkJCQkJCWlmICghaW5zdHJbc2hvd194ICsgaV0pIHsK
LQkJCQkJCQkJd2FkZGNoKGRpYWxvZywgJyAnKTsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJfQot
CQkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3dfeCArIGldKTsKLQkJCQkJCX0KLQkJCQkJ
CXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7Ci0JCQkJCX0KLQkJCQkJcG9z
Kys7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJZGVmYXVsdDoKLQkJCQlpZiAoa2V5IDwgMHgx
MDAgJiYgaXNwcmludChrZXkpKSB7Ci0JCQkJCWlmIChsZW4gPCBNQVhfTEVOKSB7Ci0JCQkJCQl3
YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJveC5hdHIpOwotCQkJCQkJaWYgKHBvcyA8IGxlbikg
ewotCQkJCQkJCWZvciAoaSA9IGxlbjsgaSA+IHBvczsgaS0tKQotCQkJCQkJCQlpbnN0cltpXSA9
IGluc3RyW2ktMV07Ci0JCQkJCQkJaW5zdHJbcG9zXSA9IGtleTsKLQkJCQkJCX0gZWxzZSB7Ci0J
CQkJCQkJaW5zdHJbbGVuXSA9IGtleTsKLQkJCQkJCX0KLQkJCQkJCXBvcysrOwotCQkJCQkJbGVu
Kys7Ci0JCQkJCQlpbnN0cltsZW5dID0gJ1wwJzsKLQotCQkJCQkJaWYgKGlucHV0X3ggPT0gYm94
X3dpZHRoIC0gMSkgewotCQkJCQkJCXNob3dfeCsrOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQlp
bnB1dF94Kys7Ci0JCQkJCQl9Ci0KLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsK
LQkJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykgewotCQkJCQkJCWlmICghaW5z
dHJbc2hvd194ICsgaV0pIHsKLQkJCQkJCQkJd2FkZGNoKGRpYWxvZywgJyAnKTsKLQkJCQkJCQkJ
YnJlYWs7Ci0JCQkJCQkJfQotCQkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3dfeCArIGld
KTsKLQkJCQkJCX0KLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7
Ci0JCQkJCQl3cmVmcmVzaChkaWFsb2cpOwotCQkJCQl9IGVsc2UKLQkJCQkJCWZsYXNoKCk7CS8q
IEFsYXJtIHVzZXIgYWJvdXQgb3ZlcmZsb3cgKi8KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJ
fQotCQl9Ci0JCXN3aXRjaCAoa2V5KSB7Ci0JCWNhc2UgJ08nOgotCQljYXNlICdvJzoKLQkJCWRl
bHdpbihkaWFsb2cpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgJ0gnOgotCQljYXNlICdoJzoKLQkJ
CWRlbHdpbihkaWFsb2cpOwotCQkJcmV0dXJuIDE7Ci0JCWNhc2UgS0VZX1VQOgotCQljYXNlIEtF
WV9MRUZUOgotCQkJc3dpdGNoIChidXR0b24pIHsKLQkJCWNhc2UgLTE6Ci0JCQkJYnV0dG9uID0g
MTsJLyogSW5kaWNhdGVzICJIZWxwIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KLQkJCQlwcmludF9i
dXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDA6
Ci0JCQkJYnV0dG9uID0gLTE7CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8K
LQkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7Ci0JCQkJd21vdmUo
ZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsKLQkJCQl3cmVmcmVzaChkaWFsb2cpOwot
CQkJCWJyZWFrOwotCQkJY2FzZSAxOgotCQkJCWJ1dHRvbiA9IDA7CS8qIEluZGljYXRlcyAiT0si
IGJ1dHRvbiBpcyBzZWxlY3RlZCAqLwotCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQs
IHdpZHRoLCAwKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFRBQjoKLQkJ
Y2FzZSBLRVlfRE9XTjoKLQkJY2FzZSBLRVlfUklHSFQ6Ci0JCQlzd2l0Y2ggKGJ1dHRvbikgewot
CQkJY2FzZSAtMToKLQkJCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMg
c2VsZWN0ZWQgKi8KLQkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7
Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDA6Ci0JCQkJYnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJI
ZWxwIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KLQkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVp
Z2h0LCB3aWR0aCwgMSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIDE6Ci0JCQkJYnV0dG9uID0gLTE7
CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8KLQkJCQlwcmludF9idXR0b25z
KGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7Ci0JCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94
X3ggKyBpbnB1dF94KTsKLQkJCQl3cmVmcmVzaChkaWFsb2cpOwotCQkJCWJyZWFrOwotCQkJfQot
CQkJYnJlYWs7Ci0JCWNhc2UgJyAnOgotCQljYXNlICdcbic6Ci0JCQlkZWx3aW4oZGlhbG9nKTsK
LQkJCXJldHVybiAoYnV0dG9uID09IC0xID8gMCA6IGJ1dHRvbik7Ci0JCWNhc2UgJ1gnOgotCQlj
YXNlICd4JzoKLQkJCWtleSA9IEtFWV9FU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfRVNDOgot
CQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX1JFU0la
RToKLQkJCWRlbHdpbihkaWFsb2cpOwotCQkJb25fa2V5X3Jlc2l6ZSgpOwotCQkJZ290byBkb19y
ZXNpemU7Ci0JCX0KLQl9Ci0KLQlkZWx3aW4oZGlhbG9nKTsKLQlyZXR1cm4gS0VZX0VTQzsJCS8q
IEVTQyBwcmVzc2VkICovCi19CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL21lbnVib3guYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGMyZjhhLi4wMDAwMDAwCi0tLSBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDI0
ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKwotLyoKLSAqICBt
ZW51Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgbWVudSBib3gKLSAqCi0gKiAgT1JJR0lOQUwgQVVU
SE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQotICogIE1PRElGSUVEIEZPUiBMSU5V
WCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXB3QGNmdy5jb20pCi0g
Ki8KLQotLyoKLSAqICBDaGFuZ2VzIGJ5IENsaWZmb3JkIFdvbGYgKGdvZEBjbGlmZm9yZC5hdCkK
LSAqCi0gKiAgWyAxOTk4LTA2LTEzIF0KLSAqCi0gKiAgICAqKSAgQSBidWdmaXggZm9yIHRoZSBQ
YWdlLURvd24gcHJvYmxlbQotICoKLSAqICAgICopICBGb3JtZXJseSB3aGVuIEkgdXNlZCBQYWdl
IERvd24gYW5kIFBhZ2UgVXAsIHRoZSBjdXJzb3Igd291bGQgYmUgc2V0Ci0gKiAgICAgICAgdG8g
dGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBtZW51IGJveC4gIE5vdyBseGRpYWxvZyBpcyBhIGJp
dAotICogICAgICAgIHNtYXJ0ZXIgYW5kIHdvcmtzIG1vcmUgbGlrZSBvdGhlciBtZW51IHN5c3Rl
bXMgKGp1c3QgaGF2ZSBhIGxvb2sgYXQKLSAqICAgICAgICBpdCkuCi0gKgotICogICAgKikgIEZv
cm1lcmx5IGlmIEkgc2VsZWN0ZWQgc29tZXRoaW5nIG15IHNjcm9sbGluZyB3b3VsZCBiZSBicm9r
ZW4gYmVjYXVzZQotICogICAgICAgIGx4ZGlhbG9nIGlzIHJlLWludm9rZWQgYnkgdGhlIE1lbnVj
b25maWcgc2hlbGwgc2NyaXB0LCBjYW4ndAotICogICAgICAgIHJlbWVtYmVyIHRoZSBsYXN0IHNj
cm9sbGluZyBwb3NpdGlvbiwgYW5kIGp1c3Qgc2V0cyBpdCBzbyB0aGF0IHRoZQotICogICAgICAg
IGN1cnNvciBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBib3guICBOb3cgaXQgd3JpdGVzIHRoZSB0
ZW1wb3JhcnkgZmlsZQotICogICAgICAgIGx4ZGlhbG9nLnNjcmx0bXAgd2hpY2ggY29udGFpbnMg
dGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZpbGUgaXMKLSAqICAgICAgICBkZWxldGVkIGJ5IGx4ZGlh
bG9nIGlmIHRoZSB1c2VyIGxlYXZlcyBhIHN1Ym1lbnUgb3IgZW50ZXJzIGEgbmV3Ci0gKiAgICAg
ICAgb25lLCBidXQgaXQgd291bGQgYmUgbmljZSBpZiBNZW51Y29uZmlnIGNvdWxkIG1ha2UgYW5v
dGhlciAicm0gLWYiCi0gKiAgICAgICAganVzdCB0byBiZSBzdXJlLiAgSnVzdCB0cnkgaXQgb3V0
IC0geW91IHdpbGwgcmVjb2duaXNlIGEgZGlmZmVyZW5jZSEKLSAqCi0gKiAgWyAxOTk4LTA2LTE0
IF0KLSAqCi0gKiAgICAqKSAgTm93IGx4ZGlhbG9nIGlzIGNyYXNoLXNhZmUgYWdhaW5zdCBicm9r
ZW4gImx4ZGlhbG9nLnNjcmx0bXAiIGZpbGVzCi0gKiAgICAgICAgYW5kIG1lbnVzIGNoYW5nZSB0
aGVpciBzaXplIG9uIHRoZSBmbHkuCi0gKgotICogICAgKikgIElmIGZvciBzb21lIHJlYXNvbiB0
aGUgbGFzdCBzY3JvbGxpbmcgcG9zaXRpb24gaXMgbm90IHNhdmVkIGJ5Ci0gKiAgICAgICAgbHhk
aWFsb2csIGl0IHNldHMgdGhlIHNjcm9sbGluZyBzbyB0aGF0IHRoZSBzZWxlY3RlZCBpdGVtIGlz
IGluIHRoZQotICogICAgICAgIG1pZGRsZSBvZiB0aGUgbWVudSBib3gsIG5vdCBhdCB0aGUgYm90
dG9tLgotICoKLSAqIDAyIEphbnVhcnkgMTk5OSwgTWljaGFlbCBFbGl6YWJldGggQ2hhc3RhaW4g
KG1lY0BzaG91dC5uZXQpCi0gKiBSZXNldCAnc2Nyb2xsJyB0byAwIGlmIHRoZSB2YWx1ZSBmcm9t
IGx4ZGlhbG9nLnNjcmx0bXAgaXMgYm9ndXMuCi0gKiBUaGlzIGZpeGVzIGEgYnVnIGluIE1lbnVj
b25maWcgd2hlcmUgdXNpbmcgJyAnIHRvIGRlc2NlbmQgaW50byBtZW51cwotICogd291bGQgbGVh
dmUgbWlzLXN5bmNocm9uaXplZCBseGRpYWxvZy5zY3JsdG1wIGZpbGVzIGx5aW5nIGFyb3VuZCwK
LSAqIGZzY2FuZiB3b3VsZCByZWFkIGluICdzY3JvbGwnLCBhbmQgZXZlbnR1YWxseSB0aGF0IHZh
bHVlIHdvdWxkIGdldCB1c2VkLgotICovCi0KLSNpbmNsdWRlICJkaWFsb2cuaCIKLQotc3RhdGlj
IGludCBtZW51X3dpZHRoLCBpdGVtX3g7Ci0KLS8qCi0gKiBQcmludCBtZW51IGl0ZW0KLSAqLwot
c3RhdGljIHZvaWQgZG9fcHJpbnRfaXRlbShXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKml0ZW0s
IGludCBsaW5lX3ksCi0JCQkgIGludCBzZWxlY3RlZCwgaW50IGhvdGtleSkKLXsKLQlpbnQgajsK
LQljaGFyICptZW51X2l0ZW0gPSBtYWxsb2MobWVudV93aWR0aCArIDEpOwotCi0Jc3RybmNweSht
ZW51X2l0ZW0sIGl0ZW0sIG1lbnVfd2lkdGggLSBpdGVtX3gpOwotCW1lbnVfaXRlbVttZW51X3dp
ZHRoIC0gaXRlbV94XSA9ICdcMCc7Ci0JaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5Tm5N
bUhoIik7Ci0KLQkvKiBDbGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovCi0Jd2F0dHJzZXQo
d2luLCBkbGcubWVudWJveC5hdHIpOwotCXdtb3ZlKHdpbiwgbGluZV95LCAwKTsKLSNpZiBPTERf
TkNVUlNFUwotCXsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCBtZW51X3dpZHRoOyBpKysp
Ci0JCQl3YWRkY2god2luLCAnICcpOwotCX0KLSNlbHNlCi0Jd2NscnRvZW9sKHdpbik7Ci0jZW5k
aWYKLQl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDogZGxn
Lml0ZW0uYXRyKTsKLQltdndhZGRzdHIod2luLCBsaW5lX3ksIGl0ZW1feCwgbWVudV9pdGVtKTsK
LQlpZiAoaG90a2V5KSB7Ci0JCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX2tleV9z
ZWxlY3RlZC5hdHIKLQkJCSA6IGRsZy50YWdfa2V5LmF0cik7Ci0JCW12d2FkZGNoKHdpbiwgbGlu
ZV95LCBpdGVtX3ggKyBqLCBtZW51X2l0ZW1bal0pOwotCX0KLQlpZiAoc2VsZWN0ZWQpIHsKLQkJ
d21vdmUod2luLCBsaW5lX3ksIGl0ZW1feCArIDEpOwotCX0KLQlmcmVlKG1lbnVfaXRlbSk7Ci0J
d3JlZnJlc2god2luKTsKLX0KLQotI2RlZmluZSBwcmludF9pdGVtKGluZGV4LCBjaG9pY2UsIHNl
bGVjdGVkKQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWl0ZW1fc2V0KGluZGV4KTsJCQkJCQlcCi0J
ZG9fcHJpbnRfaXRlbShtZW51LCBpdGVtX3N0cigpLCBjaG9pY2UsIHNlbGVjdGVkLCAhaXRlbV9p
c190YWcoJzonKSk7IFwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiBQcmludCB0aGUgc2Nyb2xsIGlu
ZGljYXRvcnMuCi0gKi8KLXN0YXRpYyB2b2lkIHByaW50X2Fycm93cyhXSU5ET1cgKiB3aW4sIGlu
dCBpdGVtX25vLCBpbnQgc2Nyb2xsLCBpbnQgeSwgaW50IHgsCi0JCQkgaW50IGhlaWdodCkKLXsK
LQlpbnQgY3VyX3ksIGN1cl94OwotCi0JZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOwotCi0Jd21v
dmUod2luLCB5LCB4KTsKLQotCWlmIChzY3JvbGwgPiAwKSB7Ci0JCXdhdHRyc2V0KHdpbiwgZGxn
LnVhcnJvdy5hdHIpOwotCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsKLQkJd2FkZHN0cih3aW4s
ICIoLSkiKTsKLQl9IGVsc2UgewotCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7Ci0J
CXdhZGRjaCh3aW4sIEFDU19ITElORSk7Ci0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7Ci0JCXdh
ZGRjaCh3aW4sIEFDU19ITElORSk7Ci0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7Ci0JfQotCi0J
eSA9IHkgKyBoZWlnaHQgKyAxOwotCXdtb3ZlKHdpbiwgeSwgeCk7Ci0Jd3JlZnJlc2god2luKTsK
LQotCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGhlaWdodCA8IGl0ZW1fbm8p
KSB7Ci0JCXdhdHRyc2V0KHdpbiwgZGxnLmRhcnJvdy5hdHIpOwotCQl3YWRkY2god2luLCBBQ1Nf
REFSUk9XKTsKLQkJd2FkZHN0cih3aW4sICIoKykiKTsKLQl9IGVsc2UgewotCQl3YXR0cnNldCh3
aW4sIGRsZy5tZW51Ym94X2JvcmRlci5hdHIpOwotCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwot
CQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwotCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOwotCQl3
YWRkY2god2luLCBBQ1NfSExJTkUpOwotCX0KLQotCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsK
LQl3cmVmcmVzaCh3aW4pOwotfQotCi0vKgotICogRGlzcGxheSB0aGUgdGVybWluYXRpb24gYnV0
dG9ucy4KLSAqLwotc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiB3aW4sIGludCBo
ZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQotewotCWludCB4ID0gd2lkdGggLyAyIC0g
Mjg7Ci0JaW50IHkgPSBoZWlnaHQgLSAyOwotCi0JcHJpbnRfYnV0dG9uKHdpbiwgIlNlbGVjdCIs
IHksIHgsIHNlbGVjdGVkID09IDApOwotCXByaW50X2J1dHRvbih3aW4sICIgRXhpdCAiLCB5LCB4
ICsgMTIsIHNlbGVjdGVkID09IDEpOwotCXByaW50X2J1dHRvbih3aW4sICIgSGVscCAiLCB5LCB4
ICsgMjQsIHNlbGVjdGVkID09IDIpOwotCXByaW50X2J1dHRvbih3aW4sICIgU2F2ZSAiLCB5LCB4
ICsgMzYsIHNlbGVjdGVkID09IDMpOwotCXByaW50X2J1dHRvbih3aW4sICIgTG9hZCAiLCB5LCB4
ICsgNDgsIHNlbGVjdGVkID09IDQpOwotCi0Jd21vdmUod2luLCB5LCB4ICsgMSArIDEyICogc2Vs
ZWN0ZWQpOwotCXdyZWZyZXNoKHdpbik7Ci19Ci0KLS8qIHNjcm9sbCB1cCBuIGxpbmVzIChuIG1h
eSBiZSBuZWdhdGl2ZSkgKi8KLXN0YXRpYyB2b2lkIGRvX3Njcm9sbChXSU5ET1cgKndpbiwgaW50
ICpzY3JvbGwsIGludCBuKQotewotCS8qIFNjcm9sbCBtZW51IHVwICovCi0Jc2Nyb2xsb2sod2lu
LCBUUlVFKTsKLQl3c2NybCh3aW4sIG4pOwotCXNjcm9sbG9rKHdpbiwgRkFMU0UpOwotCSpzY3Jv
bGwgPSAqc2Nyb2xsICsgbjsKLQl3cmVmcmVzaCh3aW4pOwotfQotCi0vKgotICogRGlzcGxheSBh
IG1lbnUgZm9yIGNob29zaW5nIGFtb25nIGEgbnVtYmVyIG9mIG9wdGlvbnMKLSAqLwotaW50IGRp
YWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCi0JCWNvbnN0
IHZvaWQgKnNlbGVjdGVkLCBpbnQgKnNfc2Nyb2xsKQotewotCWludCBpLCBqLCB4LCB5LCBib3hf
eCwgYm94X3k7Ci0JaW50IGhlaWdodCwgd2lkdGgsIG1lbnVfaGVpZ2h0OwotCWludCBrZXkgPSAw
LCBidXR0b24gPSAwLCBzY3JvbGwgPSAwLCBjaG9pY2UgPSAwOwotCWludCBmaXJzdF9pdGVtID0g
IDAsIG1heF9jaG9pY2U7Ci0JV0lORE9XICpkaWFsb2csICptZW51OwotCi1kb19yZXNpemU6Ci0J
aGVpZ2h0ID0gZ2V0bWF4eShzdGRzY3IpOwotCXdpZHRoID0gZ2V0bWF4eChzdGRzY3IpOwotCWlm
IChoZWlnaHQgPCBNRU5VQk9YX0hFSUdUSF9NSU4gfHwgd2lkdGggPCBNRU5VQk9YX1dJRFRIX01J
TikKLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7Ci0KLQloZWlnaHQgLT0gNDsKLQl3aWR0
aCAgLT0gNTsKLQltZW51X2hlaWdodCA9IGhlaWdodCAtIDEwOwotCi0JbWF4X2Nob2ljZSA9IE1J
TihtZW51X2hlaWdodCwgaXRlbV9jb3VudCgpKTsKLQotCS8qIGNlbnRlciBkaWFsb2cgYm94IG9u
IHNjcmVlbiAqLwotCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsKLQl5ID0gKGdl
dG1heHkoc3Rkc2NyKSAtIGhlaWdodCkgLyAyOwotCi0JZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4
LCBoZWlnaHQsIHdpZHRoKTsKLQotCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4
KTsKLQlrZXlwYWQoZGlhbG9nLCBUUlVFKTsKLQotCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVp
Z2h0LCB3aWR0aCwKLQkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7Ci0Jd2F0dHJz
ZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7Ci0JbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAz
LCAwLCBBQ1NfTFRFRSk7Ci0JZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQotCQl3YWRk
Y2goZGlhbG9nLCBBQ1NfSExJTkUpOwotCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIp
OwotCXdia2dkc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIgJiBBX0NPTE9SKTsKLQl3YWRkY2go
ZGlhbG9nLCBBQ1NfUlRFRSk7Ci0KLQlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7
Ci0KLQl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKLQlwcmludF9hdXRvd3JhcChk
aWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsKLQotCW1lbnVfd2lkdGggPSB3aWR0aCAt
IDY7Ci0JYm94X3kgPSBoZWlnaHQgLSBtZW51X2hlaWdodCAtIDU7Ci0JYm94X3ggPSAod2lkdGgg
LSBtZW51X3dpZHRoKSAvIDIgLSAxOwotCi0JLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBt
ZW51ICovCi0JbWVudSA9IHN1YndpbihkaWFsb2csIG1lbnVfaGVpZ2h0LCBtZW51X3dpZHRoLAot
CQkgICAgICB5ICsgYm94X3kgKyAxLCB4ICsgYm94X3ggKyAxKTsKLQlrZXlwYWQobWVudSwgVFJV
RSk7Ci0KLQkvKiBkcmF3IGEgYm94IGFyb3VuZCB0aGUgbWVudSBpdGVtcyAqLwotCWRyYXdfYm94
KGRpYWxvZywgYm94X3ksIGJveF94LCBtZW51X2hlaWdodCArIDIsIG1lbnVfd2lkdGggKyAyLAot
CQkgZGxnLm1lbnVib3hfYm9yZGVyLmF0ciwgZGxnLm1lbnVib3guYXRyKTsKLQotCWlmIChtZW51
X3dpZHRoID49IDgwKQotCQlpdGVtX3ggPSAobWVudV93aWR0aCAtIDcwKSAvIDI7Ci0JZWxzZQot
CQlpdGVtX3ggPSA0OwotCi0JLyogU2V0IGNob2ljZSB0byBkZWZhdWx0IGl0ZW0gKi8KLQlpdGVt
X2ZvcmVhY2goKQotCQlpZiAoc2VsZWN0ZWQgJiYgKHNlbGVjdGVkID09IGl0ZW1fZGF0YSgpKSkK
LQkJCWNob2ljZSA9IGl0ZW1fbigpOwotCS8qIGdldCB0aGUgc2F2ZWQgc2Nyb2xsIGluZm8gKi8K
LQlzY3JvbGwgPSAqc19zY3JvbGw7Ci0JaWYgKChzY3JvbGwgPD0gY2hvaWNlKSAmJiAoc2Nyb2xs
ICsgbWF4X2Nob2ljZSA+IGNob2ljZSkgJiYKLQkgICAoc2Nyb2xsID49IDApICYmIChzY3JvbGwg
KyBtYXhfY2hvaWNlIDw9IGl0ZW1fY291bnQoKSkpIHsKLQkJZmlyc3RfaXRlbSA9IHNjcm9sbDsK
LQkJY2hvaWNlID0gY2hvaWNlIC0gc2Nyb2xsOwotCX0gZWxzZSB7Ci0JCXNjcm9sbCA9IDA7Ci0J
fQotCWlmICgoY2hvaWNlID49IG1heF9jaG9pY2UpKSB7Ci0JCWlmIChjaG9pY2UgPj0gaXRlbV9j
b3VudCgpIC0gbWF4X2Nob2ljZSAvIDIpCi0JCQlzY3JvbGwgPSBmaXJzdF9pdGVtID0gaXRlbV9j
b3VudCgpIC0gbWF4X2Nob2ljZTsKLQkJZWxzZQotCQkJc2Nyb2xsID0gZmlyc3RfaXRlbSA9IGNo
b2ljZSAtIG1heF9jaG9pY2UgLyAyOwotCQljaG9pY2UgPSBjaG9pY2UgLSBzY3JvbGw7Ci0JfQot
Ci0JLyogUHJpbnQgdGhlIG1lbnUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsr
KSB7Ci0JCXByaW50X2l0ZW0oZmlyc3RfaXRlbSArIGksIGksIGkgPT0gY2hvaWNlKTsKLQl9Ci0K
LQl3bm91dHJlZnJlc2gobWVudSk7Ci0KLQlwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX2NvdW50
KCksIHNjcm9sbCwKLQkJICAgICBib3hfeSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51X2hlaWdo
dCk7Ci0KLQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7Ci0Jd21vdmUo
bWVudSwgY2hvaWNlLCBpdGVtX3ggKyAxKTsKLQl3cmVmcmVzaChtZW51KTsKLQotCXdoaWxlIChr
ZXkgIT0gS0VZX0VTQykgewotCQlrZXkgPSB3Z2V0Y2gobWVudSk7Ci0KLQkJaWYgKGtleSA8IDI1
NiAmJiBpc2FscGhhKGtleSkpCi0JCQlrZXkgPSB0b2xvd2VyKGtleSk7Ci0KLQkJaWYgKHN0cmNo
cigieW5taCIsIGtleSkpCi0JCQlpID0gbWF4X2Nob2ljZTsKLQkJZWxzZSB7Ci0JCQlmb3IgKGkg
PSBjaG9pY2UgKyAxOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7Ci0JCQkJaXRlbV9zZXQoc2Nyb2xs
ICsgaSk7Ci0JCQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1fc3RyKCksICJZeU5uTW1IaCIpOwotCQkJ
CWlmIChrZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pdKSkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0J
CQlpZiAoaSA9PSBtYXhfY2hvaWNlKQotCQkJCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBp
KyspIHsKLQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgaSk7Ci0JCQkJCWogPSBmaXJzdF9hbHBoYShp
dGVtX3N0cigpLCAiWXlObk1tSGgiKTsKLQkJCQkJaWYgKGtleSA9PSB0b2xvd2VyKGl0ZW1fc3Ry
KClbal0pKQotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQl9Ci0KLQkJaWYgKGl0ZW1fY291bnQoKSAh
PSAwICYmCi0JCSAgICAoaSA8IG1heF9jaG9pY2UgfHwKLQkJICAgICBrZXkgPT0gS0VZX1VQIHx8
IGtleSA9PSBLRVlfRE9XTiB8fAotCQkgICAgIGtleSA9PSAnLScgfHwga2V5ID09ICcrJyB8fAot
CQkgICAgIGtleSA9PSBLRVlfUFBBR0UgfHwga2V5ID09IEtFWV9OUEFHRSkpIHsKLQkJCS8qIFJl
bW92ZSBoaWdobGlndCBvZiBjdXJyZW50IGl0ZW0gKi8KLQkJCXByaW50X2l0ZW0oc2Nyb2xsICsg
Y2hvaWNlLCBjaG9pY2UsIEZBTFNFKTsKLQotCQkJaWYgKGtleSA9PSBLRVlfVVAgfHwga2V5ID09
ICctJykgewotCQkJCWlmIChjaG9pY2UgPCAyICYmIHNjcm9sbCkgewotCQkJCQkvKiBTY3JvbGwg
bWVudSBkb3duICovCi0JCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAtMSk7Ci0KLQkJCQkJ
cHJpbnRfaXRlbShzY3JvbGwsIDAsIEZBTFNFKTsKLQkJCQl9IGVsc2UKLQkJCQkJY2hvaWNlID0g
TUFYKGNob2ljZSAtIDEsIDApOwotCi0JCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBr
ZXkgPT0gJysnKSB7Ci0JCQkJcHJpbnRfaXRlbShzY3JvbGwrY2hvaWNlLCBjaG9pY2UsIEZBTFNF
KTsKLQotCQkJCWlmICgoY2hvaWNlID4gbWF4X2Nob2ljZSAtIDMpICYmCi0JCQkJICAgIChzY3Jv
bGwgKyBtYXhfY2hvaWNlIDwgaXRlbV9jb3VudCgpKSkgewotCQkJCQkvKiBTY3JvbGwgbWVudSB1
cCAqLwotCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgMSk7Ci0KLQkJCQkJcHJpbnRfaXRl
bShzY3JvbGwrbWF4X2Nob2ljZSAtIDEsCi0JCQkJCQkgICBtYXhfY2hvaWNlIC0gMSwgRkFMU0Up
OwotCQkJCX0gZWxzZQotCQkJCQljaG9pY2UgPSBNSU4oY2hvaWNlICsgMSwgbWF4X2Nob2ljZSAt
IDEpOwotCi0JCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfUFBBR0UpIHsKLQkJCQlzY3JvbGxvayht
ZW51LCBUUlVFKTsKLQkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsKLQkJ
CQkJaWYgKHNjcm9sbCA+IDApIHsKLQkJCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAtMSk7
Ci0JCQkJCQlwcmludF9pdGVtKHNjcm9sbCwgMCwgRkFMU0UpOwotCQkJCQl9IGVsc2UgewotCQkJ
CQkJaWYgKGNob2ljZSA+IDApCi0JCQkJCQkJY2hvaWNlLS07Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJ
CX0gZWxzZSBpZiAoa2V5ID09IEtFWV9OUEFHRSkgewotCQkJCWZvciAoaSA9IDA7IChpIDwgbWF4
X2Nob2ljZSk7IGkrKykgewotCQkJCQlpZiAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8IGl0ZW1fY291
bnQoKSkgewotCQkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIDEpOwotCQkJCQkJcHJpbnRf
aXRlbShzY3JvbGwrbWF4X2Nob2ljZS0xLAotCQkJCQkJCSAgIG1heF9jaG9pY2UgLSAxLCBGQUxT
RSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoY2hvaWNlICsgMSA8IG1heF9jaG9pY2UpCi0J
CQkJCQkJY2hvaWNlKys7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UKLQkJCQljaG9pY2UgPSBp
OwotCi0JCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBUUlVFKTsKLQotCQkJ
cHJpbnRfYXJyb3dzKGRpYWxvZywgaXRlbV9jb3VudCgpLCBzY3JvbGwsCi0JCQkJICAgICBib3hf
eSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51X2hlaWdodCk7Ci0KLQkJCXdub3V0cmVmcmVzaChk
aWFsb2cpOwotCQkJd3JlZnJlc2gobWVudSk7Ci0KLQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBh
bm90aGVyIGtleSBwcmVzcyAqLwotCQl9Ci0KLQkJc3dpdGNoIChrZXkpIHsKLQkJY2FzZSBLRVlf
TEVGVDoKLQkJY2FzZSBUQUI6Ci0JCWNhc2UgS0VZX1JJR0hUOgotCQkJYnV0dG9uID0gKChrZXkg
PT0gS0VZX0xFRlQgPyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApCi0JCQkgICAgPyA0IDogKGJ1
dHRvbiA+IDQgPyAwIDogYnV0dG9uKTsKLQotCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdo
dCwgd2lkdGgsIGJ1dHRvbik7Ci0JCQl3cmVmcmVzaChtZW51KTsKLQkJCWJyZWFrOwotCQljYXNl
ICcgJzoKLQkJY2FzZSAncyc6Ci0JCWNhc2UgJ3knOgotCQljYXNlICduJzoKLQkJY2FzZSAnbSc6
Ci0JCWNhc2UgJy8nOgotCQljYXNlICdoJzoKLQkJY2FzZSAnPyc6Ci0JCWNhc2UgJ3onOgotCQlj
YXNlICdcbic6Ci0JCQkvKiBzYXZlIHNjcm9sbCBpbmZvICovCi0JCQkqc19zY3JvbGwgPSBzY3Jv
bGw7Ci0JCQlkZWx3aW4obWVudSk7Ci0JCQlkZWx3aW4oZGlhbG9nKTsKLQkJCWl0ZW1fc2V0KHNj
cm9sbCArIGNob2ljZSk7Ci0JCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKLQkJCXN3aXRjaCAoa2V5
KSB7Ci0JCQljYXNlICdoJzoKLQkJCWNhc2UgJz8nOgotCQkJCXJldHVybiAyOwotCQkJY2FzZSAn
cyc6Ci0JCQljYXNlICd5JzoKLQkJCQlyZXR1cm4gNTsKLQkJCWNhc2UgJ24nOgotCQkJCXJldHVy
biA2OwotCQkJY2FzZSAnbSc6Ci0JCQkJcmV0dXJuIDc7Ci0JCQljYXNlICcgJzoKLQkJCQlyZXR1
cm4gODsKLQkJCWNhc2UgJy8nOgotCQkJCXJldHVybiA5OwotCQkJY2FzZSAneic6Ci0JCQkJcmV0
dXJuIDEwOwotCQkJY2FzZSAnXG4nOgotCQkJCXJldHVybiBidXR0b247Ci0JCQl9Ci0JCQlyZXR1
cm4gMDsKLQkJY2FzZSAnZSc6Ci0JCWNhc2UgJ3gnOgotCQkJa2V5ID0gS0VZX0VTQzsKLQkJCWJy
ZWFrOwotCQljYXNlIEtFWV9FU0M6Ci0JCQlrZXkgPSBvbl9rZXlfZXNjKG1lbnUpOwotCQkJYnJl
YWs7Ci0JCWNhc2UgS0VZX1JFU0laRToKLQkJCW9uX2tleV9yZXNpemUoKTsKLQkJCWRlbHdpbiht
ZW51KTsKLQkJCWRlbHdpbihkaWFsb2cpOwotCQkJZ290byBkb19yZXNpemU7Ci0JCX0KLQl9Ci0J
ZGVsd2luKG1lbnUpOwotCWRlbHdpbihkaWFsb2cpOwotCXJldHVybiBrZXk7CQkvKiBFU0MgcHJl
c3NlZCAqLwotfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy90ZXh0
Ym94LmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3guYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNGUzMzliMS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L2x4ZGlhbG9nL3RleHRib3guYworKysgL2Rldi9udWxsCkBAIC0xLDM5NSArMCwwIEBA
Ci0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsKLS8qCi0gKiAgdGV4dGJveC5j
IC0tIGltcGxlbWVudHMgdGhlIHRleHQgYm94Ci0gKgotICogIE9SSUdJTkFMIEFVVEhPUjogU2F2
aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKLSAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVM
IENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pCi0gKi8KLQotI2lu
Y2x1ZGUgImRpYWxvZy5oIgotCi1zdGF0aWMgdm9pZCBiYWNrX2xpbmVzKGludCBuKTsKLXN0YXRp
YyB2b2lkIHByaW50X3BhZ2UoV0lORE9XICp3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgdXBk
YXRlX3RleHRfZm4KLQkJICAgICAgIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsKLXN0YXRpYyB2
b2lkIHByaW50X2xpbmUoV0lORE9XICp3aW4sIGludCByb3csIGludCB3aWR0aCk7Ci1zdGF0aWMg
Y2hhciAqZ2V0X2xpbmUodm9pZCk7Ci1zdGF0aWMgdm9pZCBwcmludF9wb3NpdGlvbihXSU5ET1cg
KiB3aW4pOwotCi1zdGF0aWMgaW50IGhzY3JvbGw7Ci1zdGF0aWMgaW50IGJlZ2luX3JlYWNoZWQs
IGVuZF9yZWFjaGVkLCBwYWdlX2xlbmd0aDsKLXN0YXRpYyBjaGFyICpidWY7Ci1zdGF0aWMgY2hh
ciAqcGFnZTsKLQotLyoKLSAqIHJlZnJlc2ggd2luZG93IGNvbnRlbnQKLSAqLwotc3RhdGljIHZv
aWQgcmVmcmVzaF90ZXh0X2JveChXSU5ET1cgKmRpYWxvZywgV0lORE9XICpib3gsIGludCBib3ho
LCBpbnQgYm94dywKLQkJCSAgICAgaW50IGN1cl95LCBpbnQgY3VyX3gsIHVwZGF0ZV90ZXh0X2Zu
IHVwZGF0ZV90ZXh0LAotCQkJICAgICB2b2lkICpkYXRhKQotewotCXByaW50X3BhZ2UoYm94LCBi
b3hoLCBib3h3LCB1cGRhdGVfdGV4dCwgZGF0YSk7Ci0JcHJpbnRfcG9zaXRpb24oZGlhbG9nKTsK
LQl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFJlc3RvcmUgY3Vyc29yIHBvc2l0aW9u
ICovCi0Jd3JlZnJlc2goZGlhbG9nKTsKLX0KLQotCi0vKgotICogRGlzcGxheSB0ZXh0IGZyb20g
YSBmaWxlIGluIGEgZGlhbG9nIGJveC4KLSAqCi0gKiBrZXlzIGlzIGEgbnVsbC10ZXJtaW5hdGVk
IGFycmF5Ci0gKiB1cGRhdGVfdGV4dCgpIG1heSBub3QgYWRkIG9yIHJlbW92ZSBhbnkgJ1xuJyBv
ciAnXDAnIGluIHRidWYKLSAqLwotaW50IGRpYWxvZ190ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxl
LCBjaGFyICp0YnVmLCBpbnQgaW5pdGlhbF9oZWlnaHQsCi0JCSAgIGludCBpbml0aWFsX3dpZHRo
LCBpbnQgKmtleXMsIGludCAqX3ZzY3JvbGwsIGludCAqX2hzY3JvbGwsCi0JCSAgIHVwZGF0ZV90
ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKQotewotCWludCBpLCB4LCB5LCBjdXJfeCwg
Y3VyX3ksIGtleSA9IDA7Ci0JaW50IGhlaWdodCwgd2lkdGgsIGJveGgsIGJveHc7Ci0JV0lORE9X
ICpkaWFsb2csICpib3g7Ci0JYm9vbCBkb25lID0gZmFsc2U7Ci0KLQliZWdpbl9yZWFjaGVkID0g
MTsKLQllbmRfcmVhY2hlZCA9IDA7Ci0JcGFnZV9sZW5ndGggPSAwOwotCWhzY3JvbGwgPSAwOwot
CWJ1ZiA9IHRidWY7Ci0JcGFnZSA9IGJ1ZjsJLyogcGFnZSBpcyBwb2ludGVyIHRvIHN0YXJ0IG9m
IHBhZ2UgdG8gYmUgZGlzcGxheWVkICovCi0KLQlpZiAoX3ZzY3JvbGwgJiYgKl92c2Nyb2xsKSB7
Ci0JCWJlZ2luX3JlYWNoZWQgPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCAqX3ZzY3JvbGw7IGkr
KykKLQkJCWdldF9saW5lKCk7Ci0JfQotCWlmIChfaHNjcm9sbCkKLQkJaHNjcm9sbCA9ICpfaHNj
cm9sbDsKLQotZG9fcmVzaXplOgotCWdldG1heHl4KHN0ZHNjciwgaGVpZ2h0LCB3aWR0aCk7Ci0J
aWYgKGhlaWdodCA8IFRFWFRCT1hfSEVJR1RIX01JTiB8fCB3aWR0aCA8IFRFWFRCT1hfV0lEVEhf
TUlOKQotCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsKLQlpZiAoaW5pdGlhbF9oZWlnaHQg
IT0gMCkKLQkJaGVpZ2h0ID0gaW5pdGlhbF9oZWlnaHQ7Ci0JZWxzZQotCQlpZiAoaGVpZ2h0ID4g
NCkKLQkJCWhlaWdodCAtPSA0OwotCQllbHNlCi0JCQloZWlnaHQgPSAwOwotCWlmIChpbml0aWFs
X3dpZHRoICE9IDApCi0JCXdpZHRoID0gaW5pdGlhbF93aWR0aDsKLQllbHNlCi0JCWlmICh3aWR0
aCA+IDUpCi0JCQl3aWR0aCAtPSA1OwotCQllbHNlCi0JCQl3aWR0aCA9IDA7Ci0KLQkvKiBjZW50
ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KLQl4ID0gKGdldG1heHgoc3Rkc2NyKSAtIHdpZHRo
KSAvIDI7Ci0JeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsKLQotCWRyYXdfc2hh
ZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7Ci0KLQlkaWFsb2cgPSBuZXd3aW4oaGVp
Z2h0LCB3aWR0aCwgeSwgeCk7Ci0Ja2V5cGFkKGRpYWxvZywgVFJVRSk7Ci0KLQkvKiBDcmVhdGUg
d2luZG93IGZvciBib3ggcmVnaW9uLCB1c2VkIGZvciBzY3JvbGxpbmcgdGV4dCAqLwotCWJveGgg
PSBoZWlnaHQgLSA0OwotCWJveHcgPSB3aWR0aCAtIDI7Ci0JYm94ID0gc3Vid2luKGRpYWxvZywg
Ym94aCwgYm94dywgeSArIDEsIHggKyAxKTsKLQl3YXR0cnNldChib3gsIGRsZy5kaWFsb2cuYXRy
KTsKLQl3YmtnZHNldChib3gsIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7Ci0KLQlrZXlwYWQo
Ym94LCBUUlVFKTsKLQotCS8qIHJlZ2lzdGVyIHRoZSBuZXcgd2luZG93LCBhbG9uZyB3aXRoIGl0
cyBib3JkZXJzICovCi0JZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLAotCQkg
ZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsKLQotCXdhdHRyc2V0KGRpYWxvZywgZGxn
LmJvcmRlci5hdHIpOwotCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUp
OwotCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykKLQkJd2FkZGNoKGRpYWxvZywgQUNT
X0hMSU5FKTsKLQl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKLQl3YmtnZHNldChk
aWFsb2csIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7Ci0Jd2FkZGNoKGRpYWxvZywgQUNTX1JU
RUUpOwotCi0JcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOwotCi0JcHJpbnRfYnV0
dG9uKGRpYWxvZywgIiBFeGl0ICIsIGhlaWdodCAtIDIsIHdpZHRoIC8gMiAtIDQsIFRSVUUpOwot
CXdub3V0cmVmcmVzaChkaWFsb2cpOwotCWdldHl4KGRpYWxvZywgY3VyX3ksIGN1cl94KTsJLyog
U2F2ZSBjdXJzb3IgcG9zaXRpb24gKi8KLQotCS8qIFByaW50IGZpcnN0IHBhZ2Ugb2YgdGV4dCAq
LwotCWF0dHJfY2xlYXIoYm94LCBib3hoLCBib3h3LCBkbGcuZGlhbG9nLmF0cik7Ci0JcmVmcmVz
aF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksIGN1cl94LCB1cGRhdGVf
dGV4dCwKLQkJCSBkYXRhKTsKLQotCXdoaWxlICghZG9uZSkgewotCQlrZXkgPSB3Z2V0Y2goZGlh
bG9nKTsKLQkJc3dpdGNoIChrZXkpIHsKLQkJY2FzZSAnRSc6CS8qIEV4aXQgKi8KLQkJY2FzZSAn
ZSc6Ci0JCWNhc2UgJ1gnOgotCQljYXNlICd4JzoKLQkJY2FzZSAncSc6Ci0JCWNhc2UgJ1xuJzoK
LQkJCWRvbmUgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ2cnOgkvKiBGaXJzdCBwYWdlICov
Ci0JCWNhc2UgS0VZX0hPTUU6Ci0JCQlpZiAoIWJlZ2luX3JlYWNoZWQpIHsKLQkJCQliZWdpbl9y
ZWFjaGVkID0gMTsKLQkJCQlwYWdlID0gYnVmOwotCQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9n
LCBib3gsIGJveGgsIGJveHcsCi0JCQkJCQkgY3VyX3ksIGN1cl94LCB1cGRhdGVfdGV4dCwKLQkJ
CQkJCSBkYXRhKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlICdHJzoJLyogTGFzdCBwYWdlICov
Ci0JCWNhc2UgS0VZX0VORDoKLQotCQkJZW5kX3JlYWNoZWQgPSAxOwotCQkJLyogcG9pbnQgdG8g
bGFzdCBjaGFyIGluIGJ1ZiAqLwotCQkJcGFnZSA9IGJ1ZiArIHN0cmxlbihidWYpOwotCQkJYmFj
a19saW5lcyhib3hoKTsKLQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJv
eHcsIGN1cl95LAotCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsKLQkJCWJyZWFrOwot
CQljYXNlICdLJzoJLyogUHJldmlvdXMgbGluZSAqLwotCQljYXNlICdrJzoKLQkJY2FzZSBLRVlf
VVA6Ci0JCQlpZiAoYmVnaW5fcmVhY2hlZCkKLQkJCQlicmVhazsKLQotCQkJYmFja19saW5lcyhw
YWdlX2xlbmd0aCArIDEpOwotCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwg
Ym94dywgY3VyX3ksCi0JCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOwotCQkJYnJlYWs7
Ci0JCWNhc2UgJ0InOgkvKiBQcmV2aW91cyBwYWdlICovCi0JCWNhc2UgJ2InOgotCQljYXNlICd1
JzoKLQkJY2FzZSBLRVlfUFBBR0U6Ci0JCQlpZiAoYmVnaW5fcmVhY2hlZCkKLQkJCQlicmVhazsK
LQkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGggKyBib3hoKTsKLQkJCXJlZnJlc2hfdGV4dF9ib3go
ZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAotCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0
LCBkYXRhKTsKLQkJCWJyZWFrOwotCQljYXNlICdKJzoJLyogTmV4dCBsaW5lICovCi0JCWNhc2Ug
J2onOgotCQljYXNlIEtFWV9ET1dOOgotCQkJaWYgKGVuZF9yZWFjaGVkKQotCQkJCWJyZWFrOwot
Ci0JCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoIC0gMSk7Ci0JCQlyZWZyZXNoX3RleHRfYm94KGRp
YWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwKLQkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwg
ZGF0YSk7Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfTlBBR0U6CS8qIE5leHQgcGFnZSAqLwotCQlj
YXNlICcgJzoKLQkJY2FzZSAnZCc6Ci0JCQlpZiAoZW5kX3JlYWNoZWQpCi0JCQkJYnJlYWs7Ci0K
LQkJCWJlZ2luX3JlYWNoZWQgPSAwOwotCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwg
Ym94aCwgYm94dywgY3VyX3ksCi0JCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOwotCQkJ
YnJlYWs7Ci0JCWNhc2UgJzAnOgkvKiBCZWdpbm5pbmcgb2YgbGluZSAqLwotCQljYXNlICdIJzoJ
LyogU2Nyb2xsIGxlZnQgKi8KLQkJY2FzZSAnaCc6Ci0JCWNhc2UgS0VZX0xFRlQ6Ci0JCQlpZiAo
aHNjcm9sbCA8PSAwKQotCQkJCWJyZWFrOwotCi0JCQlpZiAoa2V5ID09ICcwJykKLQkJCQloc2Ny
b2xsID0gMDsKLQkJCWVsc2UKLQkJCQloc2Nyb2xsLS07Ci0JCQkvKiBSZXByaW50IGN1cnJlbnQg
cGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovCi0JCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3Ro
KTsKLQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAot
CQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsKLQkJCWJyZWFrOwotCQljYXNlICdMJzoJ
LyogU2Nyb2xsIHJpZ2h0ICovCi0JCWNhc2UgJ2wnOgotCQljYXNlIEtFWV9SSUdIVDoKLQkJCWlm
IChoc2Nyb2xsID49IE1BWF9MRU4pCi0JCQkJYnJlYWs7Ci0JCQloc2Nyb2xsKys7Ci0JCQkvKiBS
ZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovCi0JCQliYWNrX2xp
bmVzKHBhZ2VfbGVuZ3RoKTsKLQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgs
IGJveHcsIGN1cl95LAotCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsKLQkJCWJyZWFr
OwotCQljYXNlIEtFWV9FU0M6Ci0JCQlpZiAob25fa2V5X2VzYyhkaWFsb2cpID09IEtFWV9FU0Mp
Ci0JCQkJZG9uZSA9IHRydWU7Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfUkVTSVpFOgotCQkJYmFj
a19saW5lcyhoZWlnaHQpOwotCQkJZGVsd2luKGJveCk7Ci0JCQlkZWx3aW4oZGlhbG9nKTsKLQkJ
CW9uX2tleV9yZXNpemUoKTsKLQkJCWdvdG8gZG9fcmVzaXplOwotCQlkZWZhdWx0OgotCQkJZm9y
IChpID0gMDsga2V5c1tpXTsgaSsrKSB7Ci0JCQkJaWYgKGtleSA9PSBrZXlzW2ldKSB7Ci0JCQkJ
CWRvbmUgPSB0cnVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JZGVsd2lu
KGJveCk7Ci0JZGVsd2luKGRpYWxvZyk7Ci0JaWYgKF92c2Nyb2xsKSB7Ci0JCWNvbnN0IGNoYXIg
KnM7Ci0KLQkJcyA9IGJ1ZjsKLQkJKl92c2Nyb2xsID0gMDsKLQkJYmFja19saW5lcyhwYWdlX2xl
bmd0aCk7Ci0JCXdoaWxlIChzIDwgcGFnZSAmJiAocyA9IHN0cmNocihzLCAnXG4nKSkpIHsKLQkJ
CSgqX3ZzY3JvbGwpKys7Ci0JCQlzKys7Ci0JCX0KLQl9Ci0JaWYgKF9oc2Nyb2xsKQotCQkqX2hz
Y3JvbGwgPSBoc2Nyb2xsOwotCXJldHVybiBrZXk7Ci19Ci0KLS8qCi0gKiBHbyBiYWNrICduJyBs
aW5lcyBpbiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKS4KLSAqICdwYWdlJyB3aWxs
IGJlIHVwZGF0ZWQgdG8gcG9pbnQgdG8gdGhlIGRlc2lyZWQgbGluZSBpbiAnYnVmJy4KLSAqLwot
c3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbikKLXsKLQlpbnQgaTsKLQotCWJlZ2luX3JlYWNo
ZWQgPSAwOwotCS8qIEdvIGJhY2sgJ24nIGxpbmVzICovCi0JZm9yIChpID0gMDsgaSA8IG47IGkr
KykgewotCQlpZiAoKnBhZ2UgPT0gJ1wwJykgewotCQkJaWYgKGVuZF9yZWFjaGVkKSB7Ci0JCQkJ
ZW5kX3JlYWNoZWQgPSAwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCWlmIChwYWdlID09
IGJ1ZikgewotCQkJYmVnaW5fcmVhY2hlZCA9IDE7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcGFnZS0t
OwotCQlkbyB7Ci0JCQlpZiAocGFnZSA9PSBidWYpIHsKLQkJCQliZWdpbl9yZWFjaGVkID0gMTsK
LQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlwYWdlLS07Ci0JCX0gd2hpbGUgKCpwYWdlICE9ICdcbicp
OwotCQlwYWdlKys7Ci0JfQotfQotCi0vKgotICogUHJpbnQgYSBuZXcgcGFnZSBvZiB0ZXh0Lgot
ICovCi1zdGF0aWMgdm9pZCBwcmludF9wYWdlKFdJTkRPVyAqd2luLCBpbnQgaGVpZ2h0LCBpbnQg
d2lkdGgsIHVwZGF0ZV90ZXh0X2ZuCi0JCSAgICAgICB1cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkK
LXsKLQlpbnQgaSwgcGFzc2VkX2VuZCA9IDA7Ci0KLQlpZiAodXBkYXRlX3RleHQpIHsKLQkJY2hh
ciAqZW5kOwotCi0JCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykKLQkJCWdldF9saW5lKCk7
Ci0JCWVuZCA9IHBhZ2U7Ci0JCWJhY2tfbGluZXMoaGVpZ2h0KTsKLQkJdXBkYXRlX3RleHQoYnVm
LCBwYWdlIC0gYnVmLCBlbmQgLSBidWYsIGRhdGEpOwotCX0KLQotCXBhZ2VfbGVuZ3RoID0gMDsK
LQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsKLQkJcHJpbnRfbGluZSh3aW4sIGksIHdp
ZHRoKTsKLQkJaWYgKCFwYXNzZWRfZW5kKQotCQkJcGFnZV9sZW5ndGgrKzsKLQkJaWYgKGVuZF9y
ZWFjaGVkICYmICFwYXNzZWRfZW5kKQotCQkJcGFzc2VkX2VuZCA9IDE7Ci0JfQotCXdub3V0cmVm
cmVzaCh3aW4pOwotfQotCi0vKgotICogUHJpbnQgYSBuZXcgbGluZSBvZiB0ZXh0LgotICovCi1z
dGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqIHdpbiwgaW50IHJvdywgaW50IHdpZHRoKQot
ewotCWNoYXIgKmxpbmU7Ci0KLQlsaW5lID0gZ2V0X2xpbmUoKTsKLQlsaW5lICs9IE1JTihzdHJs
ZW4obGluZSksIGhzY3JvbGwpOwkvKiBTY3JvbGwgaG9yaXpvbnRhbGx5ICovCi0Jd21vdmUod2lu
LCByb3csIDApOwkvKiBtb3ZlIGN1cnNvciB0byBjb3JyZWN0IGxpbmUgKi8KLQl3YWRkY2god2lu
LCAnICcpOwotCXdhZGRuc3RyKHdpbiwgbGluZSwgTUlOKHN0cmxlbihsaW5lKSwgd2lkdGggLSAy
KSk7Ci0KLQkvKiBDbGVhciAncmVzaWR1ZScgb2YgcHJldmlvdXMgbGluZSAqLwotI2lmIE9MRF9O
Q1VSU0VTCi0JewotCQlpbnQgeCA9IGdldGN1cngod2luKTsKLQkJaW50IGk7Ci0JCWZvciAoaSA9
IDA7IGkgPCB3aWR0aCAtIHg7IGkrKykKLQkJCXdhZGRjaCh3aW4sICcgJyk7Ci0JfQotI2Vsc2UK
LQl3Y2xydG9lb2wod2luKTsKLSNlbmRpZgotfQotCi0vKgotICogUmV0dXJuIGN1cnJlbnQgbGlu
ZSBvZiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKSBhbmQgcHJpbnRfbGluZSgpLgot
ICogJ3BhZ2UnIHNob3VsZCBwb2ludCB0byBzdGFydCBvZiBjdXJyZW50IGxpbmUgYmVmb3JlIGNh
bGxpbmcsIGFuZCB3aWxsIGJlCi0gKiB1cGRhdGVkIHRvIHBvaW50IHRvIHN0YXJ0IG9mIG5leHQg
bGluZS4KLSAqLwotc3RhdGljIGNoYXIgKmdldF9saW5lKHZvaWQpCi17Ci0JaW50IGkgPSAwOwot
CXN0YXRpYyBjaGFyIGxpbmVbTUFYX0xFTiArIDFdOwotCi0JZW5kX3JlYWNoZWQgPSAwOwotCXdo
aWxlICgqcGFnZSAhPSAnXG4nKSB7Ci0JCWlmICgqcGFnZSA9PSAnXDAnKSB7Ci0JCQllbmRfcmVh
Y2hlZCA9IDE7Ci0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChpIDwgTUFYX0xFTikKLQkJCWxpbmVb
aSsrXSA9ICoocGFnZSsrKTsKLQkJZWxzZSB7Ci0JCQkvKiBUcnVuY2F0ZSBsaW5lcyBsb25nZXIg
dGhhbiBNQVhfTEVOIGNoYXJhY3RlcnMgKi8KLQkJCWlmIChpID09IE1BWF9MRU4pCi0JCQkJbGlu
ZVtpKytdID0gJ1wwJzsKLQkJCXBhZ2UrKzsKLQkJfQotCX0KLQlpZiAoaSA8PSBNQVhfTEVOKQot
CQlsaW5lW2ldID0gJ1wwJzsKLQlpZiAoIWVuZF9yZWFjaGVkKQotCQlwYWdlKys7CQkvKiBtb3Zl
IHBhc3QgJ1xuJyAqLwotCi0JcmV0dXJuIGxpbmU7Ci19Ci0KLS8qCi0gKiBQcmludCBjdXJyZW50
IHBvc2l0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIHByaW50X3Bvc2l0aW9uKFdJTkRPVyAqIHdpbikK
LXsKLQlpbnQgcGVyY2VudDsKLQotCXdhdHRyc2V0KHdpbiwgZGxnLnBvc2l0aW9uX2luZGljYXRv
ci5hdHIpOwotCXdia2dkc2V0KHdpbiwgZGxnLnBvc2l0aW9uX2luZGljYXRvci5hdHIgJiBBX0NP
TE9SKTsKLQlwZXJjZW50ID0gKHBhZ2UgLSBidWYpICogMTAwIC8gc3RybGVuKGJ1Zik7Ci0Jd21v
dmUod2luLCBnZXRtYXh5KHdpbikgLSAzLCBnZXRtYXh4KHdpbikgLSA5KTsKLQl3cHJpbnR3KHdp
biwgIiglM2QlJSkiLCBwZXJjZW50KTsKLX0KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbHhkaWFsb2cvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy91dGlsLmMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiNDkwZDQuLjAwMDAwMDAKLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy91dGlsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MDAg
KzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCi0vKgotICogIHV0
aWwuYwotICoKLSAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsu
aGspCi0gKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9h
ZGNhcCAocm9hZGNhcEBjZncuY29tKQotICovCi0KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotI2lu
Y2x1ZGUgImRpYWxvZy5oIgotCi0vKiBOZWVkZWQgaW4gc2lnbmFsIGhhbmRsZXIgaW4gbWNvbmYu
YyAqLwotaW50IHNhdmVkX3gsIHNhdmVkX3k7Ci0KLXN0cnVjdCBkaWFsb2dfaW5mbyBkbGc7Ci0K
LXN0YXRpYyB2b2lkIHNldF9tb25vX3RoZW1lKHZvaWQpCi17Ci0JZGxnLnNjcmVlbi5hdHIgPSBB
X05PUk1BTDsKLQlkbGcuc2hhZG93LmF0ciA9IEFfTk9STUFMOwotCWRsZy5kaWFsb2cuYXRyID0g
QV9OT1JNQUw7Ci0JZGxnLnRpdGxlLmF0ciA9IEFfQk9MRDsKLQlkbGcuYm9yZGVyLmF0ciA9IEFf
Tk9STUFMOwotCWRsZy5idXR0b25fYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsKLQlkbGcuYnV0dG9u
X2luYWN0aXZlLmF0ciA9IEFfRElNOwotCWRsZy5idXR0b25fa2V5X2FjdGl2ZS5hdHIgPSBBX1JF
VkVSU0U7Ci0JZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUuYXRyID0gQV9CT0xEOwotCWRsZy5idXR0
b25fbGFiZWxfYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsKLQlkbGcuYnV0dG9uX2xhYmVsX2luYWN0
aXZlLmF0ciA9IEFfTk9STUFMOwotCWRsZy5pbnB1dGJveC5hdHIgPSBBX05PUk1BTDsKLQlkbGcu
aW5wdXRib3hfYm9yZGVyLmF0ciA9IEFfTk9STUFMOwotCWRsZy5zZWFyY2hib3guYXRyID0gQV9O
T1JNQUw7Ci0JZGxnLnNlYXJjaGJveF90aXRsZS5hdHIgPSBBX0JPTEQ7Ci0JZGxnLnNlYXJjaGJv
eF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7Ci0JZGxnLnBvc2l0aW9uX2luZGljYXRvci5hdHIgPSBB
X0JPTEQ7Ci0JZGxnLm1lbnVib3guYXRyID0gQV9OT1JNQUw7Ci0JZGxnLm1lbnVib3hfYm9yZGVy
LmF0ciA9IEFfTk9STUFMOwotCWRsZy5pdGVtLmF0ciA9IEFfTk9STUFMOwotCWRsZy5pdGVtX3Nl
bGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsKLQlkbGcudGFnLmF0ciA9IEFfQk9MRDsKLQlkbGcudGFn
X3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsKLQlkbGcudGFnX2tleS5hdHIgPSBBX0JPTEQ7Ci0J
ZGxnLnRhZ19rZXlfc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOwotCWRsZy5jaGVjay5hdHIgPSBB
X0JPTEQ7Ci0JZGxnLmNoZWNrX3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsKLQlkbGcudWFycm93
LmF0ciA9IEFfQk9MRDsKLQlkbGcuZGFycm93LmF0ciA9IEFfQk9MRDsKLX0KLQotI2RlZmluZSBE
TEdfQ09MT1IoZGlhbG9nLCBmLCBiLCBoKSBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLQlkbGcuZGlhbG9nLmZnID0gKGYpOyAgICAgICBcCi0JZGxnLmRpYWxvZy5iZyA9
IChiKTsgICAgICAgXAotCWRsZy5kaWFsb2cuaGwgPSAoaCk7ICAgICAgIFwKLX0gd2hpbGUgKDAp
Ci0KLXN0YXRpYyB2b2lkIHNldF9jbGFzc2ljX3RoZW1lKHZvaWQpCi17Ci0JRExHX0NPTE9SKHNj
cmVlbiwgICAgICAgICAgICAgICAgQ09MT1JfQ1lBTiwgICBDT0xPUl9CTFVFLCAgIHRydWUpOwot
CURMR19DT0xPUihzaGFkb3csICAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxB
Q0ssICB0cnVlKTsKLQlETEdfQ09MT1IoZGlhbG9nLCAgICAgICAgICAgICAgICBDT0xPUl9CTEFD
SywgIENPTE9SX1dISVRFLCAgZmFsc2UpOwotCURMR19DT0xPUih0aXRsZSwgICAgICAgICAgICAg
ICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKLQlETEdfQ09MT1IoYm9yZGVy
LCAgICAgICAgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7Ci0JRExH
X0NPTE9SKGJ1dHRvbl9hY3RpdmUsICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAg
IHRydWUpOwotCURMR19DT0xPUihidXR0b25faW5hY3RpdmUsICAgICAgIENPTE9SX0JMQUNLLCAg
Q09MT1JfV0hJVEUsICBmYWxzZSk7Ci0JRExHX0NPTE9SKGJ1dHRvbl9rZXlfYWN0aXZlLCAgICAg
Q09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOwotCURMR19DT0xPUihidXR0b25fa2V5
X2luYWN0aXZlLCAgIENPTE9SX1JFRCwgICAgQ09MT1JfV0hJVEUsICBmYWxzZSk7Ci0JRExHX0NP
TE9SKGJ1dHRvbl9sYWJlbF9hY3RpdmUsICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTFVFLCAgIHRy
dWUpOwotCURMR19DT0xPUihidXR0b25fbGFiZWxfaW5hY3RpdmUsIENPTE9SX0JMQUNLLCAgQ09M
T1JfV0hJVEUsICB0cnVlKTsKLQlETEdfQ09MT1IoaW5wdXRib3gsICAgICAgICAgICAgICBDT0xP
Ul9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOwotCURMR19DT0xPUihpbnB1dGJveF9ib3Jk
ZXIsICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7Ci0JRExHX0NPTE9S
KHNlYXJjaGJveCwgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNl
KTsKLQlETEdfQ09MT1Ioc2VhcmNoYm94X3RpdGxlLCAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9S
X1dISVRFLCAgdHJ1ZSk7Ci0JRExHX0NPTE9SKHNlYXJjaGJveF9ib3JkZXIsICAgICAgQ09MT1Jf
V0hJVEUsICBDT0xPUl9XSElURSwgIHRydWUpOwotCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0
b3IsICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKLQlETEdfQ09MT1IobWVu
dWJveCwgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOwot
CURMR19DT0xPUihtZW51Ym94X2JvcmRlciwgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfV0hJ
VEUsICB0cnVlKTsKLQlETEdfQ09MT1IoaXRlbSwgICAgICAgICAgICAgICAgICBDT0xPUl9CTEFD
SywgIENPTE9SX1dISVRFLCAgZmFsc2UpOwotCURMR19DT0xPUihpdGVtX3NlbGVjdGVkLCAgICAg
ICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVlKTsKLQlETEdfQ09MT1IodGFnLCAg
ICAgICAgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7Ci0JRExH
X0NPTE9SKHRhZ19zZWxlY3RlZCwgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTFVFLCAg
IHRydWUpOwotCURMR19DT0xPUih0YWdfa2V5LCAgICAgICAgICAgICAgIENPTE9SX1lFTExPVywg
Q09MT1JfV0hJVEUsICB0cnVlKTsKLQlETEdfQ09MT1IodGFnX2tleV9zZWxlY3RlZCwgICAgICBD
T0xPUl9ZRUxMT1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7Ci0JRExHX0NPTE9SKGNoZWNrLCAgICAg
ICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsKLQlETEdfQ09M
T1IoY2hlY2tfc2VsZWN0ZWQsICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1
ZSk7Ci0JRExHX0NPTE9SKHVhcnJvdywgICAgICAgICAgICAgICAgQ09MT1JfR1JFRU4sICBDT0xP
Ul9XSElURSwgIHRydWUpOwotCURMR19DT0xPUihkYXJyb3csICAgICAgICAgICAgICAgIENPTE9S
X0dSRUVOLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsKLX0KLQotc3RhdGljIHZvaWQgc2V0X2JsYWNr
YmdfdGhlbWUodm9pZCkKLXsKLQlETEdfQ09MT1Ioc2NyZWVuLCBDT0xPUl9SRUQsICAgQ09MT1Jf
QkxBQ0ssIHRydWUpOwotCURMR19DT0xPUihzaGFkb3csIENPTE9SX0JMQUNLLCBDT0xPUl9CTEFD
SywgZmFsc2UpOwotCURMR19DT0xPUihkaWFsb2csIENPTE9SX1dISVRFLCBDT0xPUl9CTEFDSywg
ZmFsc2UpOwotCURMR19DT0xPUih0aXRsZSwgIENPTE9SX1JFRCwgICBDT0xPUl9CTEFDSywgZmFs
c2UpOwotCURMR19DT0xPUihib3JkZXIsIENPTE9SX0JMQUNLLCBDT0xPUl9CTEFDSywgdHJ1ZSk7
Ci0KLQlETEdfQ09MT1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9S
X1JFRCwgICBmYWxzZSk7Ci0JRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwgICAgICAgQ09MT1Jf
WUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOwotCURMR19DT0xPUihidXR0b25fa2V5X2FjdGl2
ZSwgICAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRydWUpOwotCURMR19DT0xPUihidXR0
b25fa2V5X2luYWN0aXZlLCAgIENPTE9SX1JFRCwgICAgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKLQlE
TEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBDT0xPUl9XSElURSwgIENPTE9SX1JFRCwg
ICBmYWxzZSk7Ci0JRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZSwgQ09MT1JfQkxBQ0ss
ICBDT0xPUl9CTEFDSywgdHJ1ZSk7Ci0KLQlETEdfQ09MT1IoaW5wdXRib3gsICAgICAgICAgQ09M
T1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOwotCURMR19DT0xPUihpbnB1dGJveF9ib3Jk
ZXIsICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7Ci0KLQlETEdfQ09MT1Ioc2Vh
cmNoYm94LCAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOwotCURMR19D
T0xPUihzZWFyY2hib3hfdGl0bGUsICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCB0cnVlKTsK
LQlETEdfQ09MT1Ioc2VhcmNoYm94X2JvcmRlciwgQ09MT1JfQkxBQ0ssICBDT0xPUl9CTEFDSywg
dHJ1ZSk7Ci0KLQlETEdfQ09MT1IocG9zaXRpb25faW5kaWNhdG9yLCBDT0xPUl9SRUQsIENPTE9S
X0JMQUNLLCAgZmFsc2UpOwotCi0JRExHX0NPTE9SKG1lbnVib3gsICAgICAgICAgIENPTE9SX1lF
TExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKLQlETEdfQ09MT1IobWVudWJveF9ib3JkZXIsICAg
Q09MT1JfQkxBQ0ssICBDT0xPUl9CTEFDSywgdHJ1ZSk7Ci0KLQlETEdfQ09MT1IoaXRlbSwgICAg
ICAgICAgICAgQ09MT1JfV0hJVEUsIENPTE9SX0JMQUNLLCBmYWxzZSk7Ci0JRExHX0NPTE9SKGl0
ZW1fc2VsZWN0ZWQsICAgIENPTE9SX1dISVRFLCBDT0xPUl9SRUQsICAgZmFsc2UpOwotCi0JRExH
X0NPTE9SKHRhZywgICAgICAgICAgICAgIENPTE9SX1JFRCwgICAgQ09MT1JfQkxBQ0ssIGZhbHNl
KTsKLQlETEdfQ09MT1IodGFnX3NlbGVjdGVkLCAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQs
ICAgdHJ1ZSk7Ci0JRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAgIENPTE9SX1JFRCwgICAgQ09M
T1JfQkxBQ0ssIGZhbHNlKTsKLQlETEdfQ09MT1IodGFnX2tleV9zZWxlY3RlZCwgQ09MT1JfWUVM
TE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7Ci0KLQlETEdfQ09MT1IoY2hlY2ssICAgICAgICAgICAg
Q09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOwotCURMR19DT0xPUihjaGVja19zZWxl
Y3RlZCwgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsKLQotCURMR19DT0xPUih1
YXJyb3csIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKLQlETEdfQ09MT1IoZGFycm93
LCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLLCBmYWxzZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldF9i
bHVldGl0bGVfdGhlbWUodm9pZCkKLXsKLQlzZXRfY2xhc3NpY190aGVtZSgpOwotCURMR19DT0xP
Uih0aXRsZSwgICAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsK
LQlETEdfQ09MT1IoYnV0dG9uX2tleV9hY3RpdmUsICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTFVF
LCAgdHJ1ZSk7Ci0JRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9hY3RpdmUsIENPTE9SX1dISVRFLCAg
Q09MT1JfQkxVRSwgIHRydWUpOwotCURMR19DT0xPUihzZWFyY2hib3hfdGl0bGUsICAgICBDT0xP
Ul9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsKLQlETEdfQ09MT1IocG9zaXRpb25faW5kaWNh
dG9yLCAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7Ci0JRExHX0NPTE9SKHRhZywg
ICAgICAgICAgICAgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOwotCURMR19D
T0xPUih0YWdfa2V5LCAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVl
KTsKLQotfQotCi0vKgotICogU2VsZWN0IGNvbG9yIHRoZW1lCi0gKi8KLXN0YXRpYyBpbnQgc2V0
X3RoZW1lKGNvbnN0IGNoYXIgKnRoZW1lKQotewotCWludCB1c2VfY29sb3IgPSAxOwotCWlmICgh
dGhlbWUpCi0JCXNldF9ibHVldGl0bGVfdGhlbWUoKTsKLQllbHNlIGlmIChzdHJjbXAodGhlbWUs
ICJjbGFzc2ljIikgPT0gMCkKLQkJc2V0X2NsYXNzaWNfdGhlbWUoKTsKLQllbHNlIGlmIChzdHJj
bXAodGhlbWUsICJibHVldGl0bGUiKSA9PSAwKQotCQlzZXRfYmx1ZXRpdGxlX3RoZW1lKCk7Ci0J
ZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAiYmxhY2tiZyIpID09IDApCi0JCXNldF9ibGFja2JnX3Ro
ZW1lKCk7Ci0JZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAibW9ubyIpID09IDApCi0JCXVzZV9jb2xv
ciA9IDA7Ci0KLQlyZXR1cm4gdXNlX2NvbG9yOwotfQotCi1zdGF0aWMgdm9pZCBpbml0X29uZV9j
b2xvcihzdHJ1Y3QgZGlhbG9nX2NvbG9yICpjb2xvcikKLXsKLQlzdGF0aWMgaW50IHBhaXIgPSAw
OwotCi0JcGFpcisrOwotCWluaXRfcGFpcihwYWlyLCBjb2xvci0+ZmcsIGNvbG9yLT5iZyk7Ci0J
aWYgKGNvbG9yLT5obCkKLQkJY29sb3ItPmF0ciA9IEFfQk9MRCB8IENPTE9SX1BBSVIocGFpcik7
Ci0JZWxzZQotCQljb2xvci0+YXRyID0gQ09MT1JfUEFJUihwYWlyKTsKLX0KLQotc3RhdGljIHZv
aWQgaW5pdF9kaWFsb2dfY29sb3JzKHZvaWQpCi17Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy5zY3Jl
ZW4pOwotCWluaXRfb25lX2NvbG9yKCZkbGcuc2hhZG93KTsKLQlpbml0X29uZV9jb2xvcigmZGxn
LmRpYWxvZyk7Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy50aXRsZSk7Ci0JaW5pdF9vbmVfY29sb3Io
JmRsZy5ib3JkZXIpOwotCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2FjdGl2ZSk7Ci0JaW5p
dF9vbmVfY29sb3IoJmRsZy5idXR0b25faW5hY3RpdmUpOwotCWluaXRfb25lX2NvbG9yKCZkbGcu
YnV0dG9uX2tleV9hY3RpdmUpOwotCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2tleV9pbmFj
dGl2ZSk7Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fbGFiZWxfYWN0aXZlKTsKLQlpbml0
X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZSk7Ci0JaW5pdF9vbmVfY29sb3Io
JmRsZy5pbnB1dGJveCk7Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy5pbnB1dGJveF9ib3JkZXIpOwot
CWluaXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94KTsKLQlpbml0X29uZV9jb2xvcigmZGxnLnNl
YXJjaGJveF90aXRsZSk7Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy5zZWFyY2hib3hfYm9yZGVyKTsK
LQlpbml0X29uZV9jb2xvcigmZGxnLnBvc2l0aW9uX2luZGljYXRvcik7Ci0JaW5pdF9vbmVfY29s
b3IoJmRsZy5tZW51Ym94KTsKLQlpbml0X29uZV9jb2xvcigmZGxnLm1lbnVib3hfYm9yZGVyKTsK
LQlpbml0X29uZV9jb2xvcigmZGxnLml0ZW0pOwotCWluaXRfb25lX2NvbG9yKCZkbGcuaXRlbV9z
ZWxlY3RlZCk7Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy50YWcpOwotCWluaXRfb25lX2NvbG9yKCZk
bGcudGFnX3NlbGVjdGVkKTsKLQlpbml0X29uZV9jb2xvcigmZGxnLnRhZ19rZXkpOwotCWluaXRf
b25lX2NvbG9yKCZkbGcudGFnX2tleV9zZWxlY3RlZCk7Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy5j
aGVjayk7Ci0JaW5pdF9vbmVfY29sb3IoJmRsZy5jaGVja19zZWxlY3RlZCk7Ci0JaW5pdF9vbmVf
Y29sb3IoJmRsZy51YXJyb3cpOwotCWluaXRfb25lX2NvbG9yKCZkbGcuZGFycm93KTsKLX0KLQot
LyoKLSAqIFNldHVwIGZvciBjb2xvciBkaXNwbGF5Ci0gKi8KLXN0YXRpYyB2b2lkIGNvbG9yX3Nl
dHVwKGNvbnN0IGNoYXIgKnRoZW1lKQotewotCWludCB1c2VfY29sb3I7Ci0KLQl1c2VfY29sb3Ig
PSBzZXRfdGhlbWUodGhlbWUpOwotCWlmICh1c2VfY29sb3IgJiYgaGFzX2NvbG9ycygpKSB7Ci0J
CXN0YXJ0X2NvbG9yKCk7Ci0JCWluaXRfZGlhbG9nX2NvbG9ycygpOwotCX0gZWxzZQotCQlzZXRf
bW9ub190aGVtZSgpOwotfQotCi0vKgotICogU2V0IHdpbmRvdyB0byBhdHRyaWJ1dGUgJ2F0dHIn
Ci0gKi8KLXZvaWQgYXR0cl9jbGVhcihXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0
aCwgY2h0eXBlIGF0dHIpCi17Ci0JaW50IGksIGo7Ci0KLQl3YXR0cnNldCh3aW4sIGF0dHIpOwot
CWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotCQl3bW92ZSh3aW4sIGksIDApOwotCQlm
b3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKLQkJCXdhZGRjaCh3aW4sICcgJyk7Ci0JfQotCXRv
dWNod2luKHdpbik7Ci19Ci0KLXZvaWQgZGlhbG9nX2NsZWFyKHZvaWQpCi17Ci0JaW50IGxpbmVz
LCBjb2x1bW5zOwotCi0JbGluZXMgPSBnZXRtYXh5KHN0ZHNjcik7Ci0JY29sdW1ucyA9IGdldG1h
eHgoc3Rkc2NyKTsKLQotCWF0dHJfY2xlYXIoc3Rkc2NyLCBsaW5lcywgY29sdW1ucywgZGxnLnNj
cmVlbi5hdHIpOwotCS8qIERpc3BsYXkgYmFja2dyb3VuZCB0aXRsZSBpZiBpdCBleGlzdHMgLi4u
IC0gU0xIICovCi0JaWYgKGRsZy5iYWNrdGl0bGUgIT0gTlVMTCkgewotCQlpbnQgaSwgbGVuID0g
MCwgc2tpcCA9IDA7Ci0JCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3M7Ci0KLQkJd2F0dHJzZXQo
c3Rkc2NyLCBkbGcuc2NyZWVuLmF0cik7Ci0JCW12d2FkZHN0cihzdGRzY3IsIDAsIDEsIChjaGFy
ICopZGxnLmJhY2t0aXRsZSk7Ci0KLQkJZm9yIChwb3MgPSBkbGcuc3VidGl0bGVzOyBwb3MgIT0g
TlVMTDsgcG9zID0gcG9zLT5uZXh0KSB7Ci0JCQkvKiAzIGlzIGZvciB0aGUgYXJyb3cgYW5kIHNw
YWNlcyAqLwotCQkJbGVuICs9IHN0cmxlbihwb3MtPnRleHQpICsgMzsKLQkJfQotCi0JCXdtb3Zl
KHN0ZHNjciwgMSwgMSk7Ci0JCWlmIChsZW4gPiBjb2x1bW5zIC0gMikgewotCQkJY29uc3QgY2hh
ciAqZWxsaXBzaXMgPSAiWy4uLl0gIjsKLQkJCXdhZGRzdHIoc3Rkc2NyLCBlbGxpcHNpcyk7Ci0J
CQlza2lwID0gbGVuIC0gKGNvbHVtbnMgLSAyIC0gc3RybGVuKGVsbGlwc2lzKSk7Ci0JCX0KLQot
CQlmb3IgKHBvcyA9IGRsZy5zdWJ0aXRsZXM7IHBvcyAhPSBOVUxMOyBwb3MgPSBwb3MtPm5leHQp
IHsKLQkJCWlmIChza2lwID09IDApCi0JCQkJd2FkZGNoKHN0ZHNjciwgQUNTX1JBUlJPVyk7Ci0J
CQllbHNlCi0JCQkJc2tpcC0tOwotCi0JCQlpZiAoc2tpcCA9PSAwKQotCQkJCXdhZGRjaChzdGRz
Y3IsICcgJyk7Ci0JCQllbHNlCi0JCQkJc2tpcC0tOwotCi0JCQlpZiAoc2tpcCA8IHN0cmxlbihw
b3MtPnRleHQpKSB7Ci0JCQkJd2FkZHN0cihzdGRzY3IsIHBvcy0+dGV4dCArIHNraXApOwotCQkJ
CXNraXAgPSAwOwotCQkJfSBlbHNlCi0JCQkJc2tpcCAtPSBzdHJsZW4ocG9zLT50ZXh0KTsKLQot
CQkJaWYgKHNraXAgPT0gMCkKLQkJCQl3YWRkY2goc3Rkc2NyLCAnICcpOwotCQkJZWxzZQotCQkJ
CXNraXAtLTsKLQkJfQotCi0JCWZvciAoaSA9IGxlbiArIDE7IGkgPCBjb2x1bW5zIC0gMTsgaSsr
KQotCQkJd2FkZGNoKHN0ZHNjciwgQUNTX0hMSU5FKTsKLQl9Ci0Jd25vdXRyZWZyZXNoKHN0ZHNj
cik7Ci19Ci0KLS8qCi0gKiBEbyBzb21lIGluaXRpYWxpemF0aW9uIGZvciBkaWFsb2cKLSAqLwot
aW50IGluaXRfZGlhbG9nKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSkKLXsKLQlpbnQgaGVpZ2h0LCB3
aWR0aDsKLQotCWluaXRzY3IoKTsJCS8qIEluaXQgY3Vyc2VzICovCi0KLQkvKiBHZXQgY3VycmVu
dCBjdXJzb3IgcG9zaXRpb24gZm9yIHNpZ25hbCBoYW5kbGVyIGluIG1jb25mLmMgKi8KLQlnZXR5
eChzdGRzY3IsIHNhdmVkX3ksIHNhdmVkX3gpOwotCi0JZ2V0bWF4eXgoc3Rkc2NyLCBoZWlnaHQs
IHdpZHRoKTsKLQlpZiAoaGVpZ2h0IDwgV0lORE9XX0hFSUdUSF9NSU4gfHwgd2lkdGggPCBXSU5E
T1dfV0lEVEhfTUlOKSB7Ci0JCWVuZHdpbigpOwotCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFM
TDsKLQl9Ci0KLQlkbGcuYmFja3RpdGxlID0gYmFja3RpdGxlOwotCWNvbG9yX3NldHVwKGdldGVu
digiTUVOVUNPTkZJR19DT0xPUiIpKTsKLQotCWtleXBhZChzdGRzY3IsIFRSVUUpOwotCWNicmVh
aygpOwotCW5vZWNobygpOwotCWRpYWxvZ19jbGVhcigpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZv
aWQgc2V0X2RpYWxvZ19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKQotewotCWRsZy5i
YWNrdGl0bGUgPSBiYWNrdGl0bGU7Ci19Ci0KLXZvaWQgc2V0X2RpYWxvZ19zdWJ0aXRsZXMoc3Ry
dWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlcykKLXsKLQlkbGcuc3VidGl0bGVzID0gc3VidGl0
bGVzOwotfQotCi0vKgotICogRW5kIHVzaW5nIGRpYWxvZyBmdW5jdGlvbnMuCi0gKi8KLXZvaWQg
ZW5kX2RpYWxvZyhpbnQgeCwgaW50IHkpCi17Ci0JLyogbW92ZSBjdXJzb3IgYmFjayB0byBvcmln
aW5hbCBwb3NpdGlvbiAqLwotCW1vdmUoeSwgeCk7Ci0JcmVmcmVzaCgpOwotCWVuZHdpbigpOwot
fQotCi0vKiBQcmludCB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZy4gQ2VudGVyIHRoZSB0aXRsZSBh
bmQgdHJ1bmNhdGUKLSAqIHRpbGUgaWYgd2lkZXIgdGhhbiBkaWFsb2cgKC0gMiBjaGFycykuCi0g
KiovCi12b2lkIHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25zdCBjaGFyICp0aXRsZSwg
aW50IHdpZHRoKQotewotCWlmICh0aXRsZSkgewotCQlpbnQgdGxlbiA9IE1JTih3aWR0aCAtIDIs
IHN0cmxlbih0aXRsZSkpOwotCQl3YXR0cnNldChkaWFsb2csIGRsZy50aXRsZS5hdHIpOwotCQlt
dndhZGRjaChkaWFsb2csIDAsICh3aWR0aCAtIHRsZW4pIC8gMiAtIDEsICcgJyk7Ci0JCW12d2Fk
ZG5zdHIoZGlhbG9nLCAwLCAod2lkdGggLSB0bGVuKS8yLCB0aXRsZSwgdGxlbik7Ci0JCXdhZGRj
aChkaWFsb2csICcgJyk7Ci0JfQotfQotCi0vKgotICogUHJpbnQgYSBzdHJpbmcgb2YgdGV4dCBp
biBhIHdpbmRvdywgYXV0b21hdGljYWxseSB3cmFwIGFyb3VuZCB0byB0aGUKLSAqIG5leHQgbGlu
ZSBpZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nIHRvIGZpdCBvbiBvbmUgbGluZS4gTmV3bGluZQot
ICogY2hhcmFjdGVycyAnXG4nIGFyZSBwcm9wcGVybHkgcHJvY2Vzc2VkLiAgV2Ugc3RhcnQgb24g
YSBuZXcgbGluZQotICogaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYXQgbGVhc3QgNCBub25ibGFu
a3MgZm9sbG93aW5nIGEgZG91YmxlLXNwYWNlLgotICovCi12b2lkIHByaW50X2F1dG93cmFwKFdJ
TkRPVyAqIHdpbiwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgd2lkdGgsIGludCB5LCBpbnQgeCkK
LXsKLQlpbnQgbmV3bCwgY3VyX3gsIGN1cl95OwotCWludCBwcm9tcHRfbGVuLCByb29tLCB3bGVu
OwotCWNoYXIgdGVtcHN0cltNQVhfTEVOICsgMV0sICp3b3JkLCAqc3AsICpzcDIsICpuZXdsaW5l
X3NlcGFyYXRvciA9IDA7Ci0KLQlzdHJjcHkodGVtcHN0ciwgcHJvbXB0KTsKLQotCXByb21wdF9s
ZW4gPSBzdHJsZW4odGVtcHN0cik7Ci0KLQlpZiAocHJvbXB0X2xlbiA8PSB3aWR0aCAtIHggKiAy
KSB7CS8qIElmIHByb21wdCBpcyBzaG9ydCAqLwotCQl3bW92ZSh3aW4sIHksICh3aWR0aCAtIHBy
b21wdF9sZW4pIC8gMik7Ci0JCXdhZGRzdHIod2luLCB0ZW1wc3RyKTsKLQl9IGVsc2UgewotCQlj
dXJfeCA9IHg7Ci0JCWN1cl95ID0geTsKLQkJbmV3bCA9IDE7Ci0JCXdvcmQgPSB0ZW1wc3RyOwot
CQl3aGlsZSAod29yZCAmJiAqd29yZCkgewotCQkJc3AgPSBzdHJwYnJrKHdvcmQsICJcbiAiKTsK
LQkJCWlmIChzcCAmJiAqc3AgPT0gJ1xuJykKLQkJCQluZXdsaW5lX3NlcGFyYXRvciA9IHNwOwot
Ci0JCQlpZiAoc3ApCi0JCQkJKnNwKysgPSAwOwotCi0JCQkvKiBXcmFwIHRvIG5leHQgbGluZSBp
ZiBlaXRoZXIgdGhlIHdvcmQgZG9lcyBub3QgZml0LAotCQkJICAgb3IgaXQgaXMgdGhlIGZpcnN0
IHdvcmQgb2YgYSBuZXcgc2VudGVuY2UsIGFuZCBpdCBpcwotCQkJICAgc2hvcnQsIGFuZCB0aGUg
bmV4dCB3b3JkIGRvZXMgbm90IGZpdC4gKi8KLQkJCXJvb20gPSB3aWR0aCAtIGN1cl94OwotCQkJ
d2xlbiA9IHN0cmxlbih3b3JkKTsKLQkJCWlmICh3bGVuID4gcm9vbSB8fAotCQkJICAgIChuZXds
ICYmIHdsZW4gPCA0ICYmIHNwCi0JCQkgICAgICYmIHdsZW4gKyAxICsgc3RybGVuKHNwKSA+IHJv
b20KLQkJCSAgICAgJiYgKCEoc3AyID0gc3RycGJyayhzcCwgIlxuICIpKQotCQkJCSB8fCB3bGVu
ICsgMSArIChzcDIgLSBzcCkgPiByb29tKSkpIHsKLQkJCQljdXJfeSsrOwotCQkJCWN1cl94ID0g
eDsKLQkJCX0KLQkJCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsKLQkJCXdhZGRzdHIod2luLCB3
b3JkKTsKLQkJCWdldHl4KHdpbiwgY3VyX3ksIGN1cl94KTsKLQotCQkJLyogTW92ZSB0byB0aGUg
bmV4dCBsaW5lIGlmIHRoZSB3b3JkIHNlcGFyYXRvciB3YXMgYSBuZXdsaW5lICovCi0JCQlpZiAo
bmV3bGluZV9zZXBhcmF0b3IpIHsKLQkJCQljdXJfeSsrOwotCQkJCWN1cl94ID0geDsKLQkJCQlu
ZXdsaW5lX3NlcGFyYXRvciA9IDA7Ci0JCQl9IGVsc2UKLQkJCQljdXJfeCsrOwotCi0JCQlpZiAo
c3AgJiYgKnNwID09ICcgJykgewotCQkJCWN1cl94Kys7CS8qIGRvdWJsZSBzcGFjZSAqLwotCQkJ
CXdoaWxlICgqKytzcCA9PSAnICcpIDsKLQkJCQluZXdsID0gMTsKLQkJCX0gZWxzZQotCQkJCW5l
d2wgPSAwOwotCQkJd29yZCA9IHNwOwotCQl9Ci0JfQotfQotCi0vKgotICogUHJpbnQgYSBidXR0
b24KLSAqLwotdm9pZCBwcmludF9idXR0b24oV0lORE9XICogd2luLCBjb25zdCBjaGFyICpsYWJl
bCwgaW50IHksIGludCB4LCBpbnQgc2VsZWN0ZWQpCi17Ci0JaW50IGksIHRlbXA7Ci0KLQl3bW92
ZSh3aW4sIHksIHgpOwotCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2FjdGl2
ZS5hdHIKLQkJIDogZGxnLmJ1dHRvbl9pbmFjdGl2ZS5hdHIpOwotCXdhZGRzdHIod2luLCAiPCIp
OwotCXRlbXAgPSBzdHJzcG4obGFiZWwsICIgIik7Ci0JbGFiZWwgKz0gdGVtcDsKLQl3YXR0cnNl
dCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUuYXRyCi0JCSA6IGRsZy5i
dXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyKTsKLQlmb3IgKGkgPSAwOyBpIDwgdGVtcDsgaSsrKQot
CQl3YWRkY2god2luLCAnICcpOwotCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9u
X2tleV9hY3RpdmUuYXRyCi0JCSA6IGRsZy5idXR0b25fa2V5X2luYWN0aXZlLmF0cik7Ci0Jd2Fk
ZGNoKHdpbiwgbGFiZWxbMF0pOwotCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9u
X2xhYmVsX2FjdGl2ZS5hdHIKLQkJIDogZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIpOwot
CXdhZGRzdHIod2luLCAoY2hhciAqKWxhYmVsICsgMSk7Ci0Jd2F0dHJzZXQod2luLCBzZWxlY3Rl
ZCA/IGRsZy5idXR0b25fYWN0aXZlLmF0cgotCQkgOiBkbGcuYnV0dG9uX2luYWN0aXZlLmF0cik7
Ci0Jd2FkZHN0cih3aW4sICI+Iik7Ci0Jd21vdmUod2luLCB5LCB4ICsgdGVtcCArIDEpOwotfQot
Ci0vKgotICogRHJhdyBhIHJlY3Rhbmd1bGFyIGJveCB3aXRoIGxpbmUgZHJhd2luZyBjaGFyYWN0
ZXJzCi0gKi8KLXZvaWQKLWRyYXdfYm94KFdJTkRPVyAqIHdpbiwgaW50IHksIGludCB4LCBpbnQg
aGVpZ2h0LCBpbnQgd2lkdGgsCi0JIGNodHlwZSBib3gsIGNodHlwZSBib3JkZXIpCi17Ci0JaW50
IGksIGo7Ci0KLQl3YXR0cnNldCh3aW4sIDApOwotCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkr
KykgewotCQl3bW92ZSh3aW4sIHkgKyBpLCB4KTsKLQkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyBq
KyspCi0JCQlpZiAoIWkgJiYgIWopCi0JCQkJd2FkZGNoKHdpbiwgYm9yZGVyIHwgQUNTX1VMQ09S
TkVSKTsKLQkJCWVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSAmJiAhaikKLQkJCQl3YWRkY2god2lu
LCBib3JkZXIgfCBBQ1NfTExDT1JORVIpOwotCQkJZWxzZSBpZiAoIWkgJiYgaiA9PSB3aWR0aCAt
IDEpCi0JCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1VSQ09STkVSKTsKLQkJCWVsc2UgaWYgKGkg
PT0gaGVpZ2h0IC0gMSAmJiBqID09IHdpZHRoIC0gMSkKLQkJCQl3YWRkY2god2luLCBib3ggfCBB
Q1NfTFJDT1JORVIpOwotCQkJZWxzZSBpZiAoIWkpCi0JCQkJd2FkZGNoKHdpbiwgYm9yZGVyIHwg
QUNTX0hMSU5FKTsKLQkJCWVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSkKLQkJCQl3YWRkY2god2lu
LCBib3ggfCBBQ1NfSExJTkUpOwotCQkJZWxzZSBpZiAoIWopCi0JCQkJd2FkZGNoKHdpbiwgYm9y
ZGVyIHwgQUNTX1ZMSU5FKTsKLQkJCWVsc2UgaWYgKGogPT0gd2lkdGggLSAxKQotCQkJCXdhZGRj
aCh3aW4sIGJveCB8IEFDU19WTElORSk7Ci0JCQllbHNlCi0JCQkJd2FkZGNoKHdpbiwgYm94IHwg
JyAnKTsKLQl9Ci19Ci0KLS8qCi0gKiBEcmF3IHNoYWRvd3MgYWxvbmcgdGhlIHJpZ2h0IGFuZCBi
b3R0b20gZWRnZSB0byBnaXZlIGEgbW9yZSAzRCBsb29rCi0gKiB0byB0aGUgYm94ZXMKLSAqLwot
dm9pZCBkcmF3X3NoYWRvdyhXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwg
aW50IHdpZHRoKQotewotCWludCBpOwotCi0JaWYgKGhhc19jb2xvcnMoKSkgewkvKiBXaGV0aGVy
IHRlcm1pbmFsIHN1cHBvcnRzIGNvbG9yPyAqLwotCQl3YXR0cnNldCh3aW4sIGRsZy5zaGFkb3cu
YXRyKTsKLQkJd21vdmUod2luLCB5ICsgaGVpZ2h0LCB4ICsgMik7Ci0JCWZvciAoaSA9IDA7IGkg
PCB3aWR0aDsgaSsrKQotCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQpOwot
CQlmb3IgKGkgPSB5ICsgMTsgaSA8IHkgKyBoZWlnaHQgKyAxOyBpKyspIHsKLQkJCXdtb3ZlKHdp
biwgaSwgeCArIHdpZHRoKTsKLQkJCXdhZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBBX0NIQVJURVhU
KTsKLQkJCXdhZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBBX0NIQVJURVhUKTsKLQkJfQotCQl3bm91
dHJlZnJlc2god2luKTsKLQl9Ci19Ci0KLS8qCi0gKiAgUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0
aGUgZmlyc3QgYWxwaGFiZXRpYyBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcuCi0gKi8KLWludCBmaXJz
dF9hbHBoYShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4ZW1wdCkKLXsKLQlpbnQg
aSwgaW5fcGFyZW4gPSAwLCBjOwotCi0JZm9yIChpID0gMDsgaSA8IHN0cmxlbihzdHJpbmcpOyBp
KyspIHsKLQkJYyA9IHRvbG93ZXIoc3RyaW5nW2ldKTsKLQotCQlpZiAoc3RyY2hyKCI8WygiLCBj
KSkKLQkJCSsraW5fcGFyZW47Ci0JCWlmIChzdHJjaHIoIj5dKSIsIGMpICYmIGluX3BhcmVuID4g
MCkKLQkJCS0taW5fcGFyZW47Ci0KLQkJaWYgKCghaW5fcGFyZW4pICYmIGlzYWxwaGEoYykgJiYg
c3RyY2hyKGV4ZW1wdCwgYykgPT0gMCkKLQkJCXJldHVybiBpOwotCX0KLQotCXJldHVybiAwOwot
fQotCi0vKgotICogbmN1cnNlcyB1c2VzIEVTQyB0byBkZXRlY3QgZXNjYXBlZCBjaGFyIHNlcXVl
bmNlcy4gVGhpcyByZXN1dGwgaW4KLSAqIGEgc21hbGwgdGltZW91dCBiZWZvcmUgRVNDIGlzIGFj
dHVhbGx5IGRlbGl2ZXJlZCB0byB0aGUgYXBwbGljYXRpb24uCi0gKiBseGRpYWxvZyBzdWdnZXN0
IDxFU0M+IDxFU0M+IHdoaWNoIGlzIGNvcnJlY3RseSB0cmFuc2xhdGVkIHRvIHR3bwotICogdGlt
ZXMgZXNjLiBCdXQgdGhlbiB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIGVzYyB0byBhdm9p
ZCBzdGVwcGluZwotICogb3V0IG9uZSBtZW51IHRvbyBtdWNoLiBGaWx0ZXIgYXdheSBhbGwgZXNj
YXBlZCBrZXkgc2VxdWVuY2VzIHNpbmNlCi0gKiBrZXlwYWQoRkFMU0UpIHR1cm4gb2ZmIG5jdXJz
ZXMgc3VwcG9ydCBmb3IgZXNjYXBlIHNlcXVlbmNlcyAtIGFuZCB0aGF0cwotICogbmVlZGVkIHRv
IG1ha2Ugbm90aW1lb3V0KCkgZG8gYXMgZXhwZWN0ZWQuCi0gKi8KLWludCBvbl9rZXlfZXNjKFdJ
TkRPVyAqd2luKQotewotCWludCBrZXk7Ci0JaW50IGtleTI7Ci0JaW50IGtleTM7Ci0KLQlub2Rl
bGF5KHdpbiwgVFJVRSk7Ci0Ja2V5cGFkKHdpbiwgRkFMU0UpOwotCWtleSA9IHdnZXRjaCh3aW4p
OwotCWtleTIgPSB3Z2V0Y2god2luKTsKLQlkbyB7Ci0JCWtleTMgPSB3Z2V0Y2god2luKTsKLQl9
IHdoaWxlIChrZXkzICE9IEVSUik7Ci0Jbm9kZWxheSh3aW4sIEZBTFNFKTsKLQlrZXlwYWQod2lu
LCBUUlVFKTsKLQlpZiAoa2V5ID09IEtFWV9FU0MgJiYga2V5MiA9PSBFUlIpCi0JCXJldHVybiBL
RVlfRVNDOwotCWVsc2UgaWYgKGtleSAhPSBFUlIgJiYga2V5ICE9IEtFWV9FU0MgJiYga2V5MiA9
PSBFUlIpCi0JCXVuZ2V0Y2goa2V5KTsKLQotCXJldHVybiAtMTsKLX0KLQotLyogcmVkcmF3IHNj
cmVlbiBpbiBuZXcgc2l6ZSAqLwotaW50IG9uX2tleV9yZXNpemUodm9pZCkKLXsKLQlkaWFsb2df
Y2xlYXIoKTsKLQlyZXR1cm4gS0VZX1JFU0laRTsKLX0KLQotc3RydWN0IGRpYWxvZ19saXN0ICpp
dGVtX2N1cjsKLXN0cnVjdCBkaWFsb2dfbGlzdCBpdGVtX25pbDsKLXN0cnVjdCBkaWFsb2dfbGlz
dCAqaXRlbV9oZWFkOwotCi12b2lkIGl0ZW1fcmVzZXQodm9pZCkKLXsKLQlzdHJ1Y3QgZGlhbG9n
X2xpc3QgKnAsICpuZXh0OwotCi0JZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0gbmV4dCkgewot
CQluZXh0ID0gcC0+bmV4dDsKLQkJZnJlZShwKTsKLQl9Ci0JaXRlbV9oZWFkID0gTlVMTDsKLQlp
dGVtX2N1ciA9ICZpdGVtX25pbDsKLX0KLQotdm9pZCBpdGVtX21ha2UoY29uc3QgY2hhciAqZm10
LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnAgPSBtYWxsb2Mo
c2l6ZW9mKCpwKSk7Ci0KLQlpZiAoaXRlbV9oZWFkKQotCQlpdGVtX2N1ci0+bmV4dCA9IHA7Ci0J
ZWxzZQotCQlpdGVtX2hlYWQgPSBwOwotCWl0ZW1fY3VyID0gcDsKLQltZW1zZXQocCwgMCwgc2l6
ZW9mKCpwKSk7Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQl2c25wcmludGYoaXRlbV9jdXItPm5v
ZGUuc3RyLCBzaXplb2YoaXRlbV9jdXItPm5vZGUuc3RyKSwgZm10LCBhcCk7Ci0JdmFfZW5kKGFw
KTsKLX0KLQotdm9pZCBpdGVtX2FkZF9zdHIoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFf
bGlzdCBhcDsKLQlzaXplX3QgYXZhaWw7Ci0KLQlhdmFpbCA9IHNpemVvZihpdGVtX2N1ci0+bm9k
ZS5zdHIpIC0gc3RybGVuKGl0ZW1fY3VyLT5ub2RlLnN0cik7Ci0KLQl2YV9zdGFydChhcCwgZm10
KTsKLQl2c25wcmludGYoaXRlbV9jdXItPm5vZGUuc3RyICsgc3RybGVuKGl0ZW1fY3VyLT5ub2Rl
LnN0ciksCi0JCSAgYXZhaWwsIGZtdCwgYXApOwotCWl0ZW1fY3VyLT5ub2RlLnN0cltzaXplb2Yo
aXRlbV9jdXItPm5vZGUuc3RyKSAtIDFdID0gJ1wwJzsKLQl2YV9lbmQoYXApOwotfQotCi12b2lk
IGl0ZW1fc2V0X3RhZyhjaGFyIHRhZykKLXsKLQlpdGVtX2N1ci0+bm9kZS50YWcgPSB0YWc7Ci19
Ci12b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcHRyKQotewotCWl0ZW1fY3VyLT5ub2RlLmRhdGEg
PSBwdHI7Ci19Ci0KLXZvaWQgaXRlbV9zZXRfc2VsZWN0ZWQoaW50IHZhbCkKLXsKLQlpdGVtX2N1
ci0+bm9kZS5zZWxlY3RlZCA9IHZhbDsKLX0KLQotaW50IGl0ZW1fYWN0aXZhdGVfc2VsZWN0ZWQo
dm9pZCkKLXsKLQlpdGVtX2ZvcmVhY2goKQotCQlpZiAoaXRlbV9pc19zZWxlY3RlZCgpKQotCQkJ
cmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgKml0ZW1fZGF0YSh2b2lkKQotewotCXJl
dHVybiBpdGVtX2N1ci0+bm9kZS5kYXRhOwotfQotCi1jaGFyIGl0ZW1fdGFnKHZvaWQpCi17Ci0J
cmV0dXJuIGl0ZW1fY3VyLT5ub2RlLnRhZzsKLX0KLQotaW50IGl0ZW1fY291bnQodm9pZCkKLXsK
LQlpbnQgbiA9IDA7Ci0Jc3RydWN0IGRpYWxvZ19saXN0ICpwOwotCi0JZm9yIChwID0gaXRlbV9o
ZWFkOyBwOyBwID0gcC0+bmV4dCkKLQkJbisrOwotCXJldHVybiBuOwotfQotCi12b2lkIGl0ZW1f
c2V0KGludCBuKQotewotCWludCBpID0gMDsKLQlpdGVtX2ZvcmVhY2goKQotCQlpZiAoaSsrID09
IG4pCi0JCQlyZXR1cm47Ci19Ci0KLWludCBpdGVtX24odm9pZCkKLXsKLQlpbnQgbiA9IDA7Ci0J
c3RydWN0IGRpYWxvZ19saXN0ICpwOwotCi0JZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+
bmV4dCkgewotCQlpZiAocCA9PSBpdGVtX2N1cikKLQkJCXJldHVybiBuOwotCQluKys7Ci0JfQot
CXJldHVybiAwOwotfQotCi1jb25zdCBjaGFyICppdGVtX3N0cih2b2lkKQotewotCXJldHVybiBp
dGVtX2N1ci0+bm9kZS5zdHI7Ci19Ci0KLWludCBpdGVtX2lzX3NlbGVjdGVkKHZvaWQpCi17Ci0J
cmV0dXJuIChpdGVtX2N1ci0+bm9kZS5zZWxlY3RlZCAhPSAwKTsKLX0KLQotaW50IGl0ZW1faXNf
dGFnKGNoYXIgdGFnKQotewotCXJldHVybiAoaXRlbV9jdXItPm5vZGUudGFnID09IHRhZyk7Ci19
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3llc25vLmMgYi9zdXBw
b3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3llc25vLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGJjYWFjOWIuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxv
Zy95ZXNuby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLS8vIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wKwotLyoKLSAqICB5ZXNuby5jIC0tIGltcGxlbWVudHMgdGhl
IHllcy9ubyBib3gKLSAqCi0gKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBj
cy5jdWhrLmhrKQotICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxs
aWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkKLSAqLwotCi0jaW5jbHVkZSAiZGlhbG9nLmgi
Ci0KLS8qCi0gKiBEaXNwbGF5IHRlcm1pbmF0aW9uIGJ1dHRvbnMKLSAqLwotc3RhdGljIHZvaWQg
cHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50
IHNlbGVjdGVkKQotewotCWludCB4ID0gd2lkdGggLyAyIC0gMTA7Ci0JaW50IHkgPSBoZWlnaHQg
LSAyOwotCi0JcHJpbnRfYnV0dG9uKGRpYWxvZywgIiBZZXMgIiwgeSwgeCwgc2VsZWN0ZWQgPT0g
MCk7Ci0JcHJpbnRfYnV0dG9uKGRpYWxvZywgIiAgTm8gICIsIHksIHggKyAxMywgc2VsZWN0ZWQg
PT0gMSk7Ci0KLQl3bW92ZShkaWFsb2csIHksIHggKyAxICsgMTMgKiBzZWxlY3RlZCk7Ci0Jd3Jl
ZnJlc2goZGlhbG9nKTsKLX0KLQotLyoKLSAqIERpc3BsYXkgYSBkaWFsb2cgYm94IHdpdGggdHdv
IGJ1dHRvbnMgLSBZZXMgYW5kIE5vCi0gKi8KLWludCBkaWFsb2dfeWVzbm8oY29uc3QgY2hhciAq
dGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQotewotCWlu
dCBpLCB4LCB5LCBrZXkgPSAwLCBidXR0b24gPSAwOwotCVdJTkRPVyAqZGlhbG9nOwotCi1kb19y
ZXNpemU6Ci0JaWYgKGdldG1heHkoc3Rkc2NyKSA8IChoZWlnaHQgKyBZRVNOT19IRUlHVEhfTUlO
KSkKLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7Ci0JaWYgKGdldG1heHgoc3Rkc2NyKSA8
ICh3aWR0aCArIFlFU05PX1dJRFRIX01JTikpCi0JCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxM
OwotCi0JLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCi0JeCA9IChnZXRtYXh4KHN0
ZHNjcikgLSB3aWR0aCkgLyAyOwotCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7
Ci0KLQlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOwotCi0JZGlhbG9n
ID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOwotCWtleXBhZChkaWFsb2csIFRSVUUpOwot
Ci0JZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLAotCQkgZGxnLmRpYWxvZy5h
dHIsIGRsZy5ib3JkZXIuYXRyKTsKLQl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsK
LQltdndhZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsKLQlmb3IgKGkgPSAw
OyBpIDwgd2lkdGggLSAyOyBpKyspCi0JCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7Ci0Jd2F0
dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7Ci0Jd2FkZGNoKGRpYWxvZywgQUNTX1JURUUp
OwotCi0JcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOwotCi0Jd2F0dHJzZXQoZGlh
bG9nLCBkbGcuZGlhbG9nLmF0cik7Ci0JcHJpbnRfYXV0b3dyYXAoZGlhbG9nLCBwcm9tcHQsIHdp
ZHRoIC0gMiwgMSwgMyk7Ci0KLQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwg
MCk7Ci0KLQl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsKLQkJa2V5ID0gd2dldGNoKGRpYWxvZyk7
Ci0JCXN3aXRjaCAoa2V5KSB7Ci0JCWNhc2UgJ1knOgotCQljYXNlICd5JzoKLQkJCWRlbHdpbihk
aWFsb2cpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgJ04nOgotCQljYXNlICduJzoKLQkJCWRlbHdp
bihkaWFsb2cpOwotCQkJcmV0dXJuIDE7Ci0KLQkJY2FzZSBUQUI6Ci0JCWNhc2UgS0VZX0xFRlQ6
Ci0JCWNhc2UgS0VZX1JJR0hUOgotCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAtLWJ1
dHRvbiA6ICsrYnV0dG9uKSA8IDApID8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRvbik7Ci0K
LQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOwotCQkJd3Jl
ZnJlc2goZGlhbG9nKTsKLQkJCWJyZWFrOwotCQljYXNlICcgJzoKLQkJY2FzZSAnXG4nOgotCQkJ
ZGVsd2luKGRpYWxvZyk7Ci0JCQlyZXR1cm4gYnV0dG9uOwotCQljYXNlIEtFWV9FU0M6Ci0JCQlr
ZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfUkVTSVpFOgot
CQkJZGVsd2luKGRpYWxvZyk7Ci0JCQlvbl9rZXlfcmVzaXplKCk7Ci0JCQlnb3RvIGRvX3Jlc2l6
ZTsKLQkJfQotCX0KLQotCWRlbHdpbihkaWFsb2cpOwotCXJldHVybiBrZXk7CQkvKiBFU0MgcHJl
c3NlZCAqLwotfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1jZmcuc2gg
Yi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3
NTUKaW5kZXggYzgxMjg3Mi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L21jb25m
LWNmZy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLSMhL2Jpbi9zaAotIyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotCi1QS0c9Im5jdXJzZXN3IgotUEtHMj0ibmN1
cnNlcyIKLQotaWYgWyAtbiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBdOyB0aGVuCi0JaWYg
cGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHOyB0aGVuCi0JCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29u
ZmlnIC0tY2ZsYWdzICRQS0cpXCIKLQkJZWNobyBsaWJzPVwiJChwa2ctY29uZmlnIC0tbGlicyAk
UEtHKVwiCi0JCWV4aXQgMAotCWZpCi0KLQlpZiBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0cyOyB0
aGVuCi0JCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiCi0JCWVj
aG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCIKLQkJZXhpdCAwCi0JZmkKLWZp
Ci0KLSMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4gY2FzZSBwa2ctY29uZmlnIGlzIG5vdCBp
bnN0YWxsZWQuCi0jIChFdmVuIGlmIGl0IGlzIGluc3RhbGxlZCwgc29tZSBkaXN0cmlidXRpb25z
IHN1Y2ggYXMgb3BlblNVU0UgY2Fubm90Ci0jIGZpbmQgbmN1cnNlcyBieSBwa2ctY29uZmlnLikK
LWlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuCi0JZWNobyBj
ZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3XCIKLQllY2hvIGxp
YnM9XCItbG5jdXJzZXN3XCIKLQlleGl0IDAKLWZpCi0KLWlmIFsgLWYgL3Vzci9pbmNsdWRlL25j
dXJzZXMvbmN1cnNlcy5oIF07IHRoZW4KLQllY2hvIGNmbGFncz1cIi1EX0dOVV9TT1VSQ0UgLUkv
dXNyL2luY2x1ZGUvbmN1cnNlc1wiCi0JZWNobyBsaWJzPVwiLWxuY3Vyc2VzXCIKLQlleGl0IDAK
LWZpCi0KLWlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXMuaCBdOyB0aGVuCi0JZWNobyBjZmxh
Z3M9XCItRF9HTlVfU09VUkNFXCIKLQllY2hvIGxpYnM9XCItbG5jdXJzZXNcIgotCWV4aXQgMAot
ZmkKLQotZWNobyA+JjIgIioiCi1lY2hvID4mMiAiKiBVbmFibGUgdG8gZmluZCB0aGUgbmN1cnNl
cyBwYWNrYWdlLiIKLWVjaG8gPiYyICIqIEluc3RhbGwgbmN1cnNlcyAobmN1cnNlcy1kZXZlbCBv
ciBsaWJuY3Vyc2VzLWRldiIKLWVjaG8gPiYyICIqIGRlcGVuZGluZyBvbiB5b3VyIGRpc3RyaWJ1
dGlvbikuIgotZWNobyA+JjIgIioiCi1leGl0IDEKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTNjNGE2Mi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L21jb25mLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDM5ICswLDAgQEAKLS8vIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu
IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICoKLSAqIEludHJvZHVjZWQgc2luZ2xl
IG1lbnUgbW9kZSAoc2hvdyBhbGwgc3ViLW1lbnVzIGluIG9uZSBsYXJnZSB0cmVlKS4KLSAqIDIw
MDItMTEtMDYgUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KLSAqCi0gKiBpMThuLCAyMDA1LCBB
cm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAqLwotCi0j
aW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPGZjbnRsLmg+
Ci0jaW5jbHVkZSA8bGltaXRzLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3Rk
bGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJsa2MuaCIKLSNpbmNsdWRlICJseGRpYWxvZy9kaWFs
b2cuaCIKLQotc3RhdGljIGNvbnN0IGNoYXIgbWNvbmZfcmVhZG1lW10gPQotIk92ZXJ2aWV3XG4i
Ci0iLS0tLS0tLS1cbiIKLSJUaGlzIGludGVyZmFjZSBsZXRzIHlvdSBzZWxlY3QgZmVhdHVyZXMg
YW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZC5cbiIKLSJGZWF0dXJlcyBjYW4gZWl0aGVyIGJl
IGJ1aWx0LWluLCBtb2R1bGFyaXplZCwgb3IgaWdub3JlZC4gUGFyYW1ldGVyc1xuIgotIm11c3Qg
YmUgZW50ZXJlZCBpbiBhcyBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIG51bWJlcnMgb3IgdGV4dC5c
biIKLSJcbiIKLSJNZW51IGl0ZW1zIGJlZ2lubmluZyB3aXRoIGZvbGxvd2luZyBicmFjZXMgcmVw
cmVzZW50IGZlYXR1cmVzIHRoYXRcbiIKLSIgIFsgXSBjYW4gYmUgYnVpbHQgaW4gb3IgcmVtb3Zl
ZFxuIgotIiAgPCA+IGNhbiBiZSBidWlsdCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3ZlZFxuIgot
IiAgeyB9IGNhbiBiZSBidWlsdCBpbiBvciBtb2R1bGFyaXplZCAoc2VsZWN0ZWQgYnkgb3RoZXIg
ZmVhdHVyZSlcbiIKLSIgIC0gLSBhcmUgc2VsZWN0ZWQgYnkgb3RoZXIgZmVhdHVyZSxcbiIKLSJ3
aGlsZSAqLCBNIG9yIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNlcyBtZWFucyB0byBidWlsZCBpbiwg
YnVpbGQgYXNcbiIKLSJhIG1vZHVsZSBvciB0byBleGNsdWRlIHRoZSBmZWF0dXJlIHJlc3BlY3Rp
dmVseS5cbiIKLSJcbiIKLSJUbyBjaGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGln
aHQgaXQgd2l0aCB0aGUgY3Vyc29yXG4iCi0ia2V5cyBhbmQgcHJlc3MgPFk+IHRvIGJ1aWxkIGl0
IGluLCA8TT4gdG8gbWFrZSBpdCBhIG1vZHVsZSBvclxuIgotIjxOPiB0byByZW1vdmUgaXQuICBZ
b3UgbWF5IGFsc28gcHJlc3MgdGhlIDxTcGFjZSBCYXI+IHRvIGN5Y2xlXG4iCi0idGhyb3VnaCB0
aGUgYXZhaWxhYmxlIG9wdGlvbnMgKGkuZS4gWS0+Ti0+TS0+WSkuXG4iCi0iXG4iCi0iU29tZSBh
ZGRpdGlvbmFsIGtleWJvYXJkIGhpbnRzOlxuIgotIlxuIgotIk1lbnVzXG4iCi0iLS0tLS0tLS0t
LVxuIgotIm8gIFVzZSB0aGUgVXAvRG93biBhcnJvdyBrZXlzIChjdXJzb3Iga2V5cykgdG8gaGln
aGxpZ2h0IHRoZSBpdGVtIHlvdVxuIgotIiAgIHdpc2ggdG8gY2hhbmdlIG9yIHRoZSBzdWJtZW51
IHlvdSB3aXNoIHRvIHNlbGVjdCBhbmQgcHJlc3MgPEVudGVyPi5cbiIKLSIgICBTdWJtZW51cyBh
cmUgZGVzaWduYXRlZCBieSBcIi0tLT5cIiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiIKLSJc
biIKLSIgICBTaG9ydGN1dDogUHJlc3MgdGhlIG9wdGlvbidzIGhpZ2hsaWdodGVkIGxldHRlciAo
aG90a2V5KS5cbiIKLSIgICAgICAgICAgICAgUHJlc3NpbmcgYSBob3RrZXkgbW9yZSB0aGFuIG9u
Y2Ugd2lsbCBzZXF1ZW5jZVxuIgotIiAgICAgICAgICAgICB0aHJvdWdoIGFsbCB2aXNpYmxlIGl0
ZW1zIHdoaWNoIHVzZSB0aGF0IGhvdGtleS5cbiIKLSJcbiIKLSIgICBZb3UgbWF5IGFsc28gdXNl
IHRoZSA8UEFHRSBVUD4gYW5kIDxQQUdFIERPV04+IGtleXMgdG8gc2Nyb2xsXG4iCi0iICAgdW5z
ZWVuIG9wdGlvbnMgaW50byB2aWV3LlxuIgotIlxuIgotIm8gIFRvIGV4aXQgYSBtZW51IHVzZSB0
aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IHRoZSA8RXhpdD4gYnV0dG9uXG4iCi0iICAgYW5k
IHByZXNzIDxFTlRFUj4uXG4iCi0iXG4iCi0iICAgU2hvcnRjdXQ6IFByZXNzIDxFU0M+PEVTQz4g
b3IgPEU+IG9yIDxYPiBpZiB0aGVyZSBpcyBubyBob3RrZXlcbiIKLSIgICAgICAgICAgICAgdXNp
bmcgdGhvc2UgbGV0dGVycy4gIFlvdSBtYXkgcHJlc3MgYSBzaW5nbGUgPEVTQz4sIGJ1dFxuIgot
IiAgICAgICAgICAgICB0aGVyZSBpcyBhIGRlbGF5ZWQgcmVzcG9uc2Ugd2hpY2ggeW91IG1heSBm
aW5kIGFubm95aW5nLlxuIgotIlxuIgotIiAgIEFsc28sIHRoZSA8VEFCPiBhbmQgY3Vyc29yIGtl
eXMgd2lsbCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+LFxuIgotIiAgIDxFeGl0PiwgPEhlbHA+LCA8
U2F2ZT4sIGFuZCA8TG9hZD4uXG4iCi0iXG4iCi0ibyAgVG8gZ2V0IGhlbHAgd2l0aCBhbiBpdGVt
LCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCA8SGVscD5cbiIKLSIgICBhbmQgcHJl
c3MgPEVOVEVSPi5cbiIKLSJcbiIKLSIgICBTaG9ydGN1dDogUHJlc3MgPEg+IG9yIDw/Pi5cbiIK
LSJcbiIKLSJvICBUbyB0b2dnbGUgdGhlIGRpc3BsYXkgb2YgaGlkZGVuIG9wdGlvbnMsIHByZXNz
IDxaPi5cbiIKLSJcbiIKLSJcbiIKLSJSYWRpb2xpc3RzICAoQ2hvaWNlIGxpc3RzKVxuIgotIi0t
LS0tLS0tLS0tXG4iCi0ibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzZWxlY3QgdGhlIG9wdGlv
biB5b3Ugd2lzaCB0byBzZXQgYW5kIHByZXNzXG4iCi0iICAgPFM+IG9yIHRoZSA8U1BBQ0UgQkFS
Pi5cbiIKLSJcbiIKLSIgICBTaG9ydGN1dDogUHJlc3MgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUg
b3B0aW9uIHlvdSB3aXNoIHRvIHNldCB0aGVuXG4iCi0iICAgICAgICAgICAgIHByZXNzIDxTPiBv
ciA8U1BBQ0UgQkFSPi5cbiIKLSJcbiIKLSJvICBUbyBzZWUgYXZhaWxhYmxlIGhlbHAgZm9yIHRo
ZSBpdGVtLCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodFxuIgotIiAgIDxIZWxwPiBh
bmQgUHJlc3MgPEVOVEVSPi5cbiIKLSJcbiIKLSIgICBTaG9ydGN1dDogUHJlc3MgPEg+IG9yIDw/
Pi5cbiIKLSJcbiIKLSIgICBBbHNvLCB0aGUgPFRBQj4gYW5kIGN1cnNvciBrZXlzIHdpbGwgY3lj
bGUgYmV0d2VlbiA8U2VsZWN0PiBhbmRcbiIKLSIgICA8SGVscD5cbiIKLSJcbiIKLSJcbiIKLSJE
YXRhIEVudHJ5XG4iCi0iLS0tLS0tLS0tLS1cbiIKLSJvICBFbnRlciB0aGUgcmVxdWVzdGVkIGlu
Zm9ybWF0aW9uIGFuZCBwcmVzcyA8RU5URVI+XG4iCi0iICAgSWYgeW91IGFyZSBlbnRlcmluZyBo
ZXhhZGVjaW1hbCB2YWx1ZXMsIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG9cbiIKLSIgICBhZGQgdGhl
ICcweCcgcHJlZml4IHRvIHRoZSBlbnRyeS5cbiIKLSJcbiIKLSJvICBGb3IgaGVscCwgdXNlIHRo
ZSA8VEFCPiBvciBjdXJzb3Iga2V5cyB0byBoaWdobGlnaHQgdGhlIGhlbHAgb3B0aW9uXG4iCi0i
ICAgYW5kIHByZXNzIDxFTlRFUj4uICBZb3UgY2FuIHRyeSA8VEFCPjxIPiBhcyB3ZWxsLlxuIgot
IlxuIgotIlxuIgotIlRleHQgQm94ICAgIChIZWxwIFdpbmRvdylcbiIKLSItLS0tLS0tLVxuIgot
Im8gIFVzZSB0aGUgY3Vyc29yIGtleXMgdG8gc2Nyb2xsIHVwL2Rvd24vbGVmdC9yaWdodC4gIFRo
ZSBWSSBlZGl0b3JcbiIKLSIgICBrZXlzIGgsaixrLGwgZnVuY3Rpb24gaGVyZSBhcyBkbyA8dT4s
IDxkPiwgPFNQQUNFIEJBUj4gYW5kIDxCPiBmb3JcbiIKLSIgICB0aG9zZSB3aG8gYXJlIGZhbWls
aWFyIHdpdGggbGVzcyBhbmQgbHlueC5cbiIKLSJcbiIKLSJvICBQcmVzcyA8RT4sIDxYPiwgPHE+
LCA8RW50ZXI+IG9yIDxFc2M+PEVzYz4gdG8gZXhpdC5cbiIKLSJcbiIKLSJcbiIKLSJBbHRlcm5h
dGUgQ29uZmlndXJhdGlvbiBGaWxlc1xuIgotIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
XG4iCi0iTWVudWNvbmZpZyBzdXBwb3J0cyB0aGUgdXNlIG9mIGFsdGVybmF0ZSBjb25maWd1cmF0
aW9uIGZpbGVzIGZvclxuIgotInRob3NlIHdobywgZm9yIHZhcmlvdXMgcmVhc29ucywgZmluZCBp
dCBuZWNlc3NhcnkgdG8gc3dpdGNoXG4iCi0iYmV0d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlv
bnMuXG4iCi0iXG4iCi0iVGhlIDxTYXZlPiBidXR0b24gd2lsbCBsZXQgeW91IHNhdmUgdGhlIGN1
cnJlbnQgY29uZmlndXJhdGlvbiB0b1xuIgotImEgZmlsZSBvZiB5b3VyIGNob29zaW5nLiAgVXNl
IHRoZSA8TG9hZD4gYnV0dG9uIHRvIGxvYWQgYSBwcmV2aW91c2x5XG4iCi0ic2F2ZWQgYWx0ZXJu
YXRlIGNvbmZpZ3VyYXRpb24uXG4iCi0iXG4iCi0iRXZlbiBpZiB5b3UgZG9uJ3QgdXNlIGFsdGVy
bmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzLCBidXQgeW91IGZpbmRcbiIKLSJkdXJpbmcgYSBNZW51
Y29uZmlnIHNlc3Npb24gdGhhdCB5b3UgaGF2ZSBjb21wbGV0ZWx5IG1lc3NlZCB1cCB5b3VyXG4i
Ci0ic2V0dGluZ3MsIHlvdSBtYXkgdXNlIHRoZSA8TG9hZD4gYnV0dG9uIHRvIHJlc3RvcmUgeW91
ciBwcmV2aW91c2x5XG4iCi0ic2F2ZWQgc2V0dGluZ3MgZnJvbSBcIi5jb25maWdcIiB3aXRob3V0
IHJlc3RhcnRpbmcgTWVudWNvbmZpZy5cbiIKLSJcbiIKLSJPdGhlciBpbmZvcm1hdGlvblxuIgot
Ii0tLS0tLS0tLS0tLS0tLS0tXG4iCi0iSWYgeW91IHVzZSBNZW51Y29uZmlnIGluIGFuIFhURVJN
IHdpbmRvdywgbWFrZSBzdXJlIHlvdSBoYXZlIHlvdXJcbiIKLSIkVEVSTSB2YXJpYWJsZSBzZXQg
dG8gcG9pbnQgdG8gYW4geHRlcm0gZGVmaW5pdGlvbiB3aGljaCBzdXBwb3J0c1xuIgotImNvbG9y
LiAgT3RoZXJ3aXNlLCBNZW51Y29uZmlnIHdpbGwgbG9vayByYXRoZXIgYmFkLiAgTWVudWNvbmZp
ZyB3aWxsXG4iCi0ibm90IGRpc3BsYXkgY29ycmVjdGx5IGluIGFuIFJYVlQgd2luZG93IGJlY2F1
c2Ugcnh2dCBkaXNwbGF5cyBvbmx5IG9uZVxuIgotImludGVuc2l0eSBvZiBjb2xvciwgYnJpZ2h0
LlxuIgotIlxuIgotIk1lbnVjb25maWcgd2lsbCBkaXNwbGF5IGxhcmdlciBtZW51cyBvbiBzY3Jl
ZW5zIG9yIHh0ZXJtcyB3aGljaCBhcmVcbiIKLSJzZXQgdG8gZGlzcGxheSBtb3JlIHRoYW4gdGhl
IHN0YW5kYXJkIDI1IHJvdyBieSA4MCBjb2x1bW4gZ2VvbWV0cnkuXG4iCi0iSW4gb3JkZXIgZm9y
IHRoaXMgdG8gd29yaywgdGhlIFwic3R0eSBzaXplXCIgY29tbWFuZCBtdXN0IGJlIGFibGUgdG9c
biIKLSJkaXNwbGF5IHRoZSBzY3JlZW4ncyBjdXJyZW50IHJvdyBhbmQgY29sdW1uIGdlb21ldHJ5
LiAgSSBTVFJPTkdMWVxuIgotIlJFQ09NTUVORCB0aGF0IHlvdSBtYWtlIHN1cmUgeW91IGRvIE5P
VCBoYXZlIHRoZSBzaGVsbCB2YXJpYWJsZXNcbiIKLSJMSU5FUyBhbmQgQ09MVU1OUyBleHBvcnRl
ZCBpbnRvIHlvdXIgZW52aXJvbm1lbnQuICBTb21lIGRpc3RyaWJ1dGlvbnNcbiIKLSJleHBvcnQg
dGhvc2UgdmFyaWFibGVzIHZpYSAvZXRjL3Byb2ZpbGUuICBTb21lIG5jdXJzZXMgcHJvZ3JhbXMg
Y2FuXG4iCi0iYmVjb21lIGNvbmZ1c2VkIHdoZW4gdGhvc2UgdmFyaWFibGVzIChMSU5FUyAmIENP
TFVNTlMpIGRvbid0IHJlZmxlY3RcbiIKLSJ0aGUgdHJ1ZSBzY3JlZW4gc2l6ZS5cbiIKLSJcbiIK
LSJPcHRpb25hbCBwZXJzb25hbGl0eSBhdmFpbGFibGVcbiIKLSItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIKLSJJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIG9mIHRoZSBvcHRpb25z
IGxpc3RlZCBpbiBhIHNpbmdsZSBtZW51LFxuIgotInJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IG11
bHRpbWVudSBoaWVyYXJjaHksIHJ1biB0aGUgbWVudWNvbmZpZyB3aXRoXG4iCi0iTUVOVUNPTkZJ
R19NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5nbGVfbWVudS4gRXhhbXBsZTpc
biIKLSJcbiIKLSJtYWtlIE1FTlVDT05GSUdfTU9ERT1zaW5nbGVfbWVudSBtZW51Y29uZmlnXG4i
Ci0iXG4iCi0iPEVudGVyPiB3aWxsIHRoZW4gdW5yb2xsIHRoZSBhcHByb3ByaWF0ZSBjYXRlZ29y
eSwgb3IgZW5mb2xkIGl0IGlmIGl0XG4iCi0iaXMgYWxyZWFkeSB1bnJvbGxlZC5cbiIKLSJcbiIK
LSJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1vcmUgQ1BV
IGV4cGVuc2l2ZVxuIgotIihlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVucm9s
bGVkIGNhdGVnb3JpZXMpIHRoYW4gdGhlXG4iCi0iZGVmYXVsdCBtb2RlLlxuIgotIlxuIgotIkRp
ZmZlcmVudCBjb2xvciB0aGVtZXMgYXZhaWxhYmxlXG4iCi0iLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiIKLSJJdCBpcyBwb3NzaWJsZSB0byBzZWxlY3QgZGlmZmVyZW50IGNvbG9y
IHRoZW1lcyB1c2luZyB0aGUgdmFyaWFibGVcbiIKLSJNRU5VQ09ORklHX0NPTE9SLiBUbyBzZWxl
Y3QgYSB0aGVtZSB1c2U6XG4iCi0iXG4iCi0ibWFrZSBNRU5VQ09ORklHX0NPTE9SPTx0aGVtZT4g
bWVudWNvbmZpZ1xuIgotIlxuIgotIkF2YWlsYWJsZSB0aGVtZXMgYXJlXG4iCi0iIG1vbm8gICAg
ICAgPT4gc2VsZWN0cyBjb2xvcnMgc3VpdGFibGUgZm9yIG1vbm9jaHJvbWUgZGlzcGxheXNcbiIK
LSIgYmxhY2tiZyAgICA9PiBzZWxlY3RzIGEgY29sb3Igc2NoZW1lIHdpdGggYmxhY2sgYmFja2dy
b3VuZFxuIgotIiBjbGFzc2ljICAgID0+IHRoZW1lIHdpdGggYmx1ZSBiYWNrZ3JvdW5kLiBUaGUg
Y2xhc3NpYyBsb29rXG4iCi0iIGJsdWV0aXRsZSAgPT4gYW4gTENEIGZyaWVuZGx5IHZlcnNpb24g
b2YgY2xhc3NpYy4gKGRlZmF1bHQpXG4iCi0iXG4iLAotbWVudV9pbnN0cnVjdGlvbnNbXSA9Ci0J
IkFycm93IGtleXMgbmF2aWdhdGUgdGhlIG1lbnUuICAiCi0JIjxFbnRlcj4gc2VsZWN0cyBzdWJt
ZW51cyAtLS0+IChvciBlbXB0eSBzdWJtZW51cyAtLS0tKS4gICIKLQkiSGlnaGxpZ2h0ZWQgbGV0
dGVycyBhcmUgaG90a2V5cy4gICIKLQkiUHJlc3NpbmcgPFk+IHNlbGVjdHMgYSBmZWF0dXJlLCB3
aGlsZSA8Tj4gd2lsbCBleGNsdWRlIGEgZmVhdHVyZS4gICIKLQkiUHJlc3MgPEVzYz48RXNjPiB0
byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIgotCSJMZWdlbmQ6IFsqXSBm
ZWF0dXJlIGlzIHNlbGVjdGVkICBbIF0gZmVhdHVyZSBpcyBleGNsdWRlZCIsCi1yYWRpb2xpc3Rf
aW5zdHJ1Y3Rpb25zW10gPQotCSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3
aW5kb3cgb3IgIgotCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRvIHNl
bGVjdCAiCi0JImZvbGxvd2VkIGJ5IHRoZSA8U1BBQ0UgQkFSPi4gIgotCSJQcmVzcyA8Pz4gZm9y
IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24uIiwKLWlucHV0Ym94X2lu
c3RydWN0aW9uc19pbnRbXSA9Ci0JIlBsZWFzZSBlbnRlciBhIGRlY2ltYWwgdmFsdWUuICIKLQki
RnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgIgotCSJVc2UgdGhlIDxUQUI+IGtleSB0
byBtb3ZlIGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsCi1p
bnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQotCSJQbGVhc2UgZW50ZXIgYSBoZXhhZGVjaW1h
bCB2YWx1ZS4gIgotCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3ZlIGZyb20gdGhlIGlucHV0IGZp
ZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsCi1pbnB1dGJveF9pbnN0cnVjdGlvbnNfc3Ry
aW5nW10gPQotCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuICIKLQkiVXNlIHRoZSA8VEFC
PiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBp
dC4iLAotc2V0bW9kX3RleHRbXSA9Ci0JIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIg
d2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhIG1vZHVsZS5cbiIKLQkiQXMgYSByZXN1bHQs
IHRoaXMgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiIsCi1sb2FkX2NvbmZpZ190
ZXh0W10gPQotCSJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHlvdSB3
aXNoIHRvIGxvYWQuICAiCi0JIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0byByZXN0b3JlIHRoZSBj
b25maWd1cmF0aW9uIHlvdSAiCi0JImxhc3QgcmV0cmlldmVkLiAgTGVhdmUgYmxhbmsgdG8gYWJv
cnQuIiwKLWxvYWRfY29uZmlnX2hlbHBbXSA9Ci0JIlxuIgotCSJGb3IgdmFyaW91cyByZWFzb25z
LCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIgotCSJjb25maWd1cmF0
aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKLQkiXG4iCi0JIklmIHlvdSBo
YXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhhbiB0
aGVcbiIKLQkiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5
b3UgdG8gbW9kaWZ5IHRoYXRcbiIKLQkiY29uZmlndXJhdGlvbi5cbiIKLQkiXG4iCi0JIklmIHlv
dSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5IG5ldmVyIHVzZWQgYWx0ZXJu
YXRlXG4iCi0JImNvbmZpZ3VyYXRpb24gZmlsZXMuIFlvdSBzaG91bGQgdGhlcmVmb3JlIGxlYXZl
IHRoaXMgYmxhbmsgdG8gYWJvcnQuXG4iLAotc2F2ZV9jb25maWdfdGV4dFtdID0KLQkiRW50ZXIg
YSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNhdmVkICIK
LQkiYXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgYmxhbmsgdG8gYWJvcnQuIiwKLXNhdmVfY29uZmln
X2hlbHBbXSA9Ci0JIlxuIgotCSJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8g
a2VlcCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiIKLQkiYXZhaWxhYmxlIG9uIGEgc2luZ2xl
IG1hY2hpbmUuXG4iCi0JIlxuIgotCSJFbnRlcmluZyBhIGZpbGUgbmFtZSBoZXJlIHdpbGwgYWxs
b3cgeW91IHRvIGxhdGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKLQkiYW5kIHVzZSB0aGUgY3VycmVu
dCBjb25maWd1cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0ZXZlclxuIgotCSJjb25maWd1
cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxuIgotCSJcbiIK
LQkiSWYgeW91IGFyZSB1bmNlcnRhaW4gd2hhdCBhbGwgdGhpcyBtZWFucyB0aGVuIHlvdSBzaG91
bGQgcHJvYmFibHlcbiIKLQkibGVhdmUgdGhpcyBibGFuay5cbiIsCi1zZWFyY2hfaGVscFtdID0K
LQkiXG4iCi0JIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlzcGxheSB0aGVpciByZWxhdGlvbnMu
XG4iCi0JIlJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuXG4iCi0JIkV4YW1wbGU6IHNl
YXJjaCBmb3IgXCJeRk9PXCJcbiIKLQkiUmVzdWx0OlxuIgotCSItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotCSJTeW1i
b2w6IEZPTyBbPW1dXG4iCi0JIlR5cGUgIDogdHJpc3RhdGVcbiIKLQkiUHJvbXB0OiBGb28gYnVz
IGlzIHVzZWQgdG8gZHJpdmUgdGhlIGJhciBIV1xuIgotCSIgIExvY2F0aW9uOlxuIgotCSIgICAg
LT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EpXG4iCi0JIiAgICAgIC0+IFBD
SSBzdXBwb3J0IChQQ0kgWz15XSlcbiIKLQkiKDEpICAgICAtPiBQQ0kgYWNjZXNzIG1vZGUgKDxj
aG9pY2U+IFs9eV0pXG4iCi0JIiAgRGVmaW5lZCBhdCBkcml2ZXJzL3BjaS9LY29uZmlnOjQ3XG4i
Ci0JIiAgRGVwZW5kcyBvbjogWDg2X0xPQ0FMX0FQSUMgJiYgWDg2X0lPX0FQSUMgfHwgSUE2NFxu
IgotCSIgIFNlbGVjdHM6IExJQkNSQzMyXG4iCi0JIiAgU2VsZWN0ZWQgYnk6IEJBUiBbPW5dXG4i
Ci0JIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iCi0JIm8gVGhlIGxpbmUgJ1R5cGU6JyBzaG93cyB0aGUgdHlwZSBvZiB0
aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yXG4iCi0JIiAgdGhpcyBzeW1ib2wgKGJvb2wsIHRy
aXN0YXRlLCBzdHJpbmcsIC4uLilcbiIKLQkibyBUaGUgbGluZSAnUHJvbXB0Oicgc2hvd3MgdGhl
IHRleHQgdXNlZCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgZm9yXG4iCi0JIiAgdGhpcyBzeW1ib2xc
biIKLQkibyBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQgd2hhdCBmaWxlIC8gbGluZSBu
dW1iZXIgdGhlIHN5bWJvbFxuIgotCSIgIGlzIGRlZmluZWRcbiIKLQkibyBUaGUgJ0RlcGVuZHMg
b246JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyBuZWVkIHRvIGJlIGRlZmluZWQgZm9yXG4iCi0J
IiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVudSAoc2VsZWN0YWJsZSlcbiIK
LQkibyBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVsbHMgd2hlcmUgaW4gdGhlIG1lbnUgc3RydWN0
dXJlIHRoaXMgc3ltYm9sXG4iCi0JIiAgaXMgbG9jYXRlZFxuIgotCSIgICAgQSBsb2NhdGlvbiBm
b2xsb3dlZCBieSBhIFs9eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhXG4iCi0JIiAgICBzZWxl
Y3RhYmxlIG1lbnUgaXRlbSAtIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBpcyBkaXNwbGF5ZWQgaW5z
aWRlXG4iCi0JIiAgICBicmFja2V0cy5cbiIKLQkiICAgIFByZXNzIHRoZSBrZXkgaW4gdGhlICgj
KSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iCi0JIiAgICBsb2NhdGlvbi4gWW91
IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGN1cnJlbnQgc2VhcmNoIHJlc3VsdHNcbiIKLQkiICAg
IGFmdGVyIGV4aXRpbmcgdGhpcyBuZXcgbWVudS5cbiIKLQkibyBUaGUgJ1NlbGVjdHM6JyBsaW5l
IHRlbGxzIHdoYXQgc3ltYm9scyB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcbiIKLQkiICBzZWxlY3Rl
ZCBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKVxuIgotCSJvIFRoZSAnU2VsZWN0
ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVkIHRoaXMgc3ltYm9sXG4i
Ci0JIlxuIgotCSJPbmx5IHJlbGV2YW50IGxpbmVzIGFyZSBzaG93bi5cbiIKLQkiXG5cbiIKLQki
U2VhcmNoIGV4YW1wbGVzOlxuIgotCSJFeGFtcGxlczogVVNCCT0+IGZpbmQgYWxsIHN5bWJvbHMg
Y29udGFpbmluZyBVU0JcbiIKLQkiICAgICAgICAgIF5VU0IgPT4gZmluZCBhbGwgc3ltYm9scyBz
dGFydGluZyB3aXRoIFVTQlxuIgotCSIgICAgICAgICAgVVNCJCA9PiBmaW5kIGFsbCBzeW1ib2xz
IGVuZGluZyB3aXRoIFVTQlxuIgotCSJcbiI7Ci0KLXN0YXRpYyBpbnQgaW5kZW50Owotc3RhdGlj
IHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7Ci1zdGF0aWMgaW50IGNoaWxkX2NvdW50Owotc3Rh
dGljIGludCBzaW5nbGVfbWVudV9tb2RlOwotc3RhdGljIGludCBzaG93X2FsbF9vcHRpb25zOwot
c3RhdGljIGludCBzYXZlX2FuZF9leGl0Owotc3RhdGljIGludCBzaWxlbnQ7Ci0KLXN0YXRpYyB2
b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBtZW51ICphY3RpdmVfbWVudSk7Ci1z
dGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7Ci1zdGF0aWMgdm9pZCBj
b25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7Ci1zdGF0aWMgdm9pZCBjb25mX2xvYWQodm9p
ZCk7Ci1zdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7Ci1zdGF0aWMgaW50IHNob3dfdGV4dGJv
eF9leHQoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRleHQsIGludCByLCBpbnQgYywKLQkJCSAg
ICBpbnQgKmtleXMsIGludCAqdnNjcm9sbCwgaW50ICpoc2Nyb2xsLAotCQkJICAgIHVwZGF0ZV90
ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsKLXN0YXRpYyB2b2lkIHNob3dfdGV4dGJv
eChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdGV4dCwgaW50IHIsIGludCBjKTsKLXN0
YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRl
eHQpOwotc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KTsKLQotc3RhdGlj
IGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07Ci1zdGF0aWMgdm9pZCBzZXRfY29uZmlnX2ZpbGVu
YW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKLXsKLQlzdGF0aWMgY2hhciBtZW51X2Jh
Y2t0aXRsZVtQQVRIX01BWCsxMjhdOwotCWludCBzaXplOwotCi0Jc2l6ZSA9IHNucHJpbnRmKG1l
bnVfYmFja3RpdGxlLCBzaXplb2YobWVudV9iYWNrdGl0bGUpLAotCQkJIiVzIC0gJXMiLCBjb25m
aWdfZmlsZW5hbWUsIHJvb3RtZW51LnByb21wdC0+dGV4dCk7Ci0JaWYgKHNpemUgPj0gc2l6ZW9m
KG1lbnVfYmFja3RpdGxlKSkKLQkJbWVudV9iYWNrdGl0bGVbc2l6ZW9mKG1lbnVfYmFja3RpdGxl
KS0xXSA9ICdcMCc7Ci0Jc2V0X2RpYWxvZ19iYWNrdGl0bGUobWVudV9iYWNrdGl0bGUpOwotCi0J
c2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMiLCBjb25maWdf
ZmlsZW5hbWUpOwotCWlmIChzaXplID49IHNpemVvZihmaWxlbmFtZSkpCi0JCWZpbGVuYW1lW3Np
emVvZihmaWxlbmFtZSktMV0gPSAnXDAnOwotfQotCi1zdHJ1Y3Qgc3VidGl0bGVfcGFydCB7Ci0J
c3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOwotCWNvbnN0IGNoYXIgKnRleHQ7Ci19Owotc3RhdGlj
IExJU1RfSEVBRCh0cmFpbCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0
bGVzOwotc3RhdGljIHZvaWQgc2V0X3N1YnRpdGxlKHZvaWQpCi17Ci0Jc3RydWN0IHN1YnRpdGxl
X3BhcnQgKnNwOwotCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3MsICp0bXA7Ci0KLQlmb3IgKHBv
cyA9IHN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHRtcCkgewotCQl0bXAgPSBwb3MtPm5l
eHQ7Ci0JCWZyZWUocG9zKTsKLQl9Ci0KLQlzdWJ0aXRsZXMgPSBOVUxMOwotCWxpc3RfZm9yX2Vh
Y2hfZW50cnkoc3AsICZ0cmFpbCwgZW50cmllcykgewotCQlpZiAoc3AtPnRleHQpIHsKLQkJCWlm
IChwb3MpIHsKLQkJCQlwb3MtPm5leHQgPSB4Y2FsbG9jKDEsIHNpemVvZigqcG9zKSk7Ci0JCQkJ
cG9zID0gcG9zLT5uZXh0OwotCQkJfSBlbHNlIHsKLQkJCQlzdWJ0aXRsZXMgPSBwb3MgPSB4Y2Fs
bG9jKDEsIHNpemVvZigqcG9zKSk7Ci0JCQl9Ci0JCQlwb3MtPnRleHQgPSBzcC0+dGV4dDsKLQkJ
fQotCX0KLQotCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7Ci19Ci0KLXN0YXRpYyB2
b2lkIHJlc2V0X3N1YnRpdGxlKHZvaWQpCi17Ci0Jc3RydWN0IHN1YnRpdGxlX2xpc3QgKnBvcywg
KnRtcDsKLQotCWZvciAocG9zID0gc3VidGl0bGVzOyBwb3MgIT0gTlVMTDsgcG9zID0gdG1wKSB7
Ci0JCXRtcCA9IHBvcy0+bmV4dDsKLQkJZnJlZShwb3MpOwotCX0KLQlzdWJ0aXRsZXMgPSBOVUxM
OwotCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7Ci19Ci0KLXN0cnVjdCBzZWFyY2hf
ZGF0YSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgbWVudSAqKnRhcmdldHM7
Ci0JaW50ICprZXlzOwotfTsKLQotc3RhdGljIHZvaWQgdXBkYXRlX3RleHQoY2hhciAqYnVmLCBz
aXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZvaWQgKl9kYXRhKQotewotCXN0cnVjdCBzZWFyY2hf
ZGF0YSAqZGF0YSA9IF9kYXRhOwotCXN0cnVjdCBqdW1wX2tleSAqcG9zOwotCWludCBrID0gMDsK
LQotCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBkYXRhLT5oZWFkLCBlbnRyaWVzKSB7Ci0JCWlm
IChwb3MtPm9mZnNldCA+PSBzdGFydCAmJiBwb3MtPm9mZnNldCA8IGVuZCkgewotCQkJY2hhciBo
ZWFkZXJbNF07Ci0KLQkJCWlmIChrIDwgSlVNUF9OQikgewotCQkJCWludCBrZXkgPSAnMCcgKyAo
cG9zLT5pbmRleCAlIEpVTVBfTkIpICsgMTsKLQotCQkJCXNwcmludGYoaGVhZGVyLCAiKCVjKSIs
IGtleSk7Ci0JCQkJZGF0YS0+a2V5c1trXSA9IGtleTsKLQkJCQlkYXRhLT50YXJnZXRzW2tdID0g
cG9zLT50YXJnZXQ7Ci0JCQkJaysrOwotCQkJfSBlbHNlIHsKLQkJCQlzcHJpbnRmKGhlYWRlciwg
IiAgICIpOwotCQkJfQotCi0JCQltZW1jcHkoYnVmICsgcG9zLT5vZmZzZXQsIGhlYWRlciwgc2l6
ZW9mKGhlYWRlcikgLSAxKTsKLQkJfQotCX0KLQlkYXRhLT5rZXlzW2tdID0gMDsKLX0KLQotc3Rh
dGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsK
LQlzdHJ1Y3QgZ3N0ciByZXM7Ci0Jc3RydWN0IGdzdHIgdGl0bGU7Ci0JY2hhciAqZGlhbG9nX2lu
cHV0OwotCWludCBkcmVzLCB2c2Nyb2xsID0gMCwgaHNjcm9sbCA9IDA7Ci0JYm9vbCBhZ2FpbjsK
LQlzdHJ1Y3QgZ3N0ciBzdHRleHQ7Ci0Jc3RydWN0IHN1YnRpdGxlX3BhcnQgc3RwYXJ0OwotCi0J
dGl0bGUgPSBzdHJfbmV3KCk7Ci0Jc3RyX3ByaW50ZiggJnRpdGxlLCAiRW50ZXIgKHN1YilzdHJp
bmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIgotCQkJICAgICAgIih3aXRoIG9yIHdpdGhvdXQg
XCIlc1wiKSIsIENPTkZJR18pOwotCi1hZ2FpbjoKLQlkaWFsb2dfY2xlYXIoKTsKLQlkcmVzID0g
ZGlhbG9nX2lucHV0Ym94KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiLAotCQkJICAg
ICAgc3RyX2dldCgmdGl0bGUpLAotCQkJICAgICAgMTAsIDc1LCAiIik7Ci0Jc3dpdGNoIChkcmVz
KSB7Ci0JY2FzZSAwOgotCQlicmVhazsKLQljYXNlIDE6Ci0JCXNob3dfaGVscHRleHQoIlNlYXJj
aCBDb25maWd1cmF0aW9uIiwgc2VhcmNoX2hlbHApOwotCQlnb3RvIGFnYWluOwotCWRlZmF1bHQ6
Ci0JCXN0cl9mcmVlKCZ0aXRsZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBzdHJpcCB0aGUgcHJl
Zml4IGlmIG5lY2Vzc2FyeSAqLwotCWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7
Ci0JaWYgKHN0cm5jYXNlY21wKGRpYWxvZ19pbnB1dF9yZXN1bHQsIENPTkZJR18sIHN0cmxlbihD
T05GSUdfKSkgPT0gMCkKLQkJZGlhbG9nX2lucHV0ICs9IHN0cmxlbihDT05GSUdfKTsKLQotCXN0
dGV4dCA9IHN0cl9uZXcoKTsKLQlzdHJfcHJpbnRmKCZzdHRleHQsICJTZWFyY2ggKCVzKSIsIGRp
YWxvZ19pbnB1dF9yZXN1bHQpOwotCXN0cGFydC50ZXh0ID0gc3RyX2dldCgmc3R0ZXh0KTsKLQls
aXN0X2FkZF90YWlsKCZzdHBhcnQuZW50cmllcywgJnRyYWlsKTsKLQotCXN5bV9hcnIgPSBzeW1f
cmVfc2VhcmNoKGRpYWxvZ19pbnB1dCk7Ci0JZG8gewotCQlMSVNUX0hFQUQoaGVhZCk7Ci0JCXN0
cnVjdCBtZW51ICp0YXJnZXRzW0pVTVBfTkJdOwotCQlpbnQga2V5c1tKVU1QX05CICsgMV0sIGk7
Ci0JCXN0cnVjdCBzZWFyY2hfZGF0YSBkYXRhID0gewotCQkJLmhlYWQgPSAmaGVhZCwKLQkJCS50
YXJnZXRzID0gdGFyZ2V0cywKLQkJCS5rZXlzID0ga2V5cywKLQkJfTsKLQkJc3RydWN0IGp1bXBf
a2V5ICpwb3MsICp0bXA7Ci0KLQkJcmVzID0gZ2V0X3JlbGF0aW9uc19zdHIoc3ltX2FyciwgJmhl
YWQpOwotCQlzZXRfc3VidGl0bGUoKTsKLQkJZHJlcyA9IHNob3dfdGV4dGJveF9leHQoIlNlYXJj
aCBSZXN1bHRzIiwgKGNoYXIgKikKLQkJCQkJc3RyX2dldCgmcmVzKSwgMCwgMCwga2V5cywgJnZz
Y3JvbGwsCi0JCQkJCSZoc2Nyb2xsLCAmdXBkYXRlX3RleHQsICh2b2lkICopCi0JCQkJCSZkYXRh
KTsKLQkJYWdhaW4gPSBmYWxzZTsKLQkJZm9yIChpID0gMDsgaSA8IEpVTVBfTkIgJiYga2V5c1tp
XTsgaSsrKQotCQkJaWYgKGRyZXMgPT0ga2V5c1tpXSkgewotCQkJCWNvbmYodGFyZ2V0c1tpXS0+
cGFyZW50LCB0YXJnZXRzW2ldKTsKLQkJCQlhZ2FpbiA9IHRydWU7Ci0JCQl9Ci0JCXN0cl9mcmVl
KCZyZXMpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCB0bXAsICZoZWFkLCBlbnRy
aWVzKQotCQkJZnJlZShwb3MpOwotCX0gd2hpbGUgKGFnYWluKTsKLQlmcmVlKHN5bV9hcnIpOwot
CXN0cl9mcmVlKCZ0aXRsZSk7Ci0JbGlzdF9kZWwodHJhaWwucHJldik7Ci0Jc3RyX2ZyZWUoJnN0
dGV4dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpCi17
Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3Qg
bWVudSAqY2hpbGQ7Ci0JaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOwotCXRyaXN0YXRlIHZhbDsK
LQljaGFyIGNoOwotCWJvb2wgdmlzaWJsZTsKLQotCS8qCi0JICogbm90ZTogbWVudV9pc192aXNp
YmxlKCkgaGFzIHNpZGUgZWZmZWN0IHRoYXQgaXQgd2lsbAotCSAqIHJlY2FsYyB0aGUgdmFsdWUg
b2YgdGhlIHN5bWJvbC4KLQkgKi8KLQl2aXNpYmxlID0gbWVudV9pc192aXNpYmxlKG1lbnUpOwot
CWlmIChzaG93X2FsbF9vcHRpb25zICYmICFtZW51X2hhc19wcm9tcHQobWVudSkpCi0JCXJldHVy
bjsKLQllbHNlIGlmICghc2hvd19hbGxfb3B0aW9ucyAmJiAhdmlzaWJsZSkKLQkJcmV0dXJuOwot
Ci0Jc3ltID0gbWVudS0+c3ltOwotCXByb3AgPSBtZW51LT5wcm9tcHQ7Ci0JaWYgKCFzeW0pIHsK
LQkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsKLQkJCWNvbnN0IGNoYXIgKnBy
b21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKLQkJCXN3aXRjaCAocHJvcC0+dHlwZSkgewot
CQkJY2FzZSBQX01FTlU6Ci0JCQkJY2hpbGRfY291bnQrKzsKLQkJCQlpZiAoc2luZ2xlX21lbnVf
bW9kZSkgewotCQkJCQlpdGVtX21ha2UoIiVzJSpjJXMiLAotCQkJCQkJICBtZW51LT5kYXRhID8g
Ii0tPiIgOiAiKys+IiwKLQkJCQkJCSAgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOwotCQkJCX0g
ZWxzZQotCQkJCQlpdGVtX21ha2UoIiAgICUqYyVzICAlcyIsCi0JCQkJCQkgIGluZGVudCArIDEs
ICcgJywgcHJvbXB0LAotCQkJCQkJICBtZW51X2lzX2VtcHR5KG1lbnUpID8gIi0tLS0iIDogIi0t
LT4iKTsKLQkJCQlpdGVtX3NldF90YWcoJ20nKTsKLQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOwot
CQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEpCi0JCQkJCWdvdG8gY29uZl9j
aGlsZHM7Ci0JCQkJcmV0dXJuOwotCQkJY2FzZSBQX0NPTU1FTlQ6Ci0JCQkJaWYgKHByb21wdCkg
ewotCQkJCQljaGlsZF9jb3VudCsrOwotCQkJCQlpdGVtX21ha2UoIiAgICUqYyoqKiAlcyAqKioi
LCBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7Ci0JCQkJCWl0ZW1fc2V0X3RhZygnOicpOwotCQkJ
CQlpdGVtX3NldF9kYXRhKG1lbnUpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0J
CQkJaWYgKHByb21wdCkgewotCQkJCQljaGlsZF9jb3VudCsrOwotCQkJCQlpdGVtX21ha2UoIi0t
LSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOwotCQkJCQlpdGVtX3NldF90YWcoJzon
KTsKLQkJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZQotCQkJ
ZG9pbnQgPSAwOwotCQlnb3RvIGNvbmZfY2hpbGRzOwotCX0KLQotCXR5cGUgPSBzeW1fZ2V0X3R5
cGUoc3ltKTsKLQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7Ci0JCXN0cnVjdCBzeW1ib2wgKmRl
Zl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOwotCQlzdHJ1Y3QgbWVudSAqZGVmX21l
bnUgPSBOVUxMOwotCi0JCWNoaWxkX2NvdW50Kys7Ci0JCWZvciAoY2hpbGQgPSBtZW51LT5saXN0
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgewotCQkJaWYgKG1lbnVfaXNfdmlzaWJsZShj
aGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQotCQkJCWRlZl9tZW51ID0gY2hpbGQ7Ci0J
CX0KLQotCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0JCWlmIChzeW1faXNf
Y2hhbmdhYmxlKHN5bSkpIHsKLQkJCXN3aXRjaCAodHlwZSkgewotCQkJY2FzZSBTX0JPT0xFQU46
Ci0JCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsKLQkJCQlicmVh
azsKLQkJCWNhc2UgU19UUklTVEFURToKLQkJCQlzd2l0Y2ggKHZhbCkgewotCQkJCWNhc2UgeWVz
OiBjaCA9ICcqJzsgYnJlYWs7Ci0JCQkJY2FzZSBtb2Q6IGNoID0gJ00nOyBicmVhazsKLQkJCQlk
ZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOwotCQkJCX0KLQkJCQlpdGVtX21ha2UoIjwlYz4iLCBj
aCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpdGVtX3NldF90YWcoJ3QnKTsKLQkJCWl0ZW1fc2V0
X2RhdGEobWVudSk7Ci0JCX0gZWxzZSB7Ci0JCQlpdGVtX21ha2UoIiAgICIpOwotCQkJaXRlbV9z
ZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsKLQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7Ci0J
CX0KLQotCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBtZW51X2dldF9w
cm9tcHQobWVudSkpOwotCQlpZiAodmFsID09IHllcykgewotCQkJaWYgKGRlZl9tZW51KSB7Ci0J
CQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsIG1lbnVfZ2V0X3Byb21wdChkZWZfbWVudSkpOwotCQkJ
CWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7Ci0JCQkJaWYgKGRlZl9tZW51LT5saXN0KSB7Ci0JCQkJ
CWluZGVudCArPSAyOwotCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsKLQkJCQkJaW5kZW50IC09
IDI7Ci0JCQkJfQotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG1lbnUg
PT0gY3VycmVudF9tZW51KSB7Ci0JCQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwg
JyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOwotCQkJaXRlbV9zZXRfdGFnKCc6Jyk7Ci0JCQlp
dGVtX3NldF9kYXRhKG1lbnUpOwotCQkJZ290byBjb25mX2NoaWxkczsKLQkJfQotCQljaGlsZF9j
b3VudCsrOwotCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0JCWlmIChzeW1f
aXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgewotCQkJaXRlbV9tYWtlKCIgICAi
KTsKLQkJCWl0ZW1fc2V0X3RhZygnOicpOwotCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKLQkJfSBl
bHNlIHsKLQkJCXN3aXRjaCAodHlwZSkgewotCQkJY2FzZSBTX0JPT0xFQU46Ci0JCQkJaWYgKHN5
bV9pc19jaGFuZ2FibGUoc3ltKSkKLQkJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8g
JyAnIDogJyonKTsKLQkJCQllbHNlCi0JCQkJCWl0ZW1fbWFrZSgiLSVjLSIsIHZhbCA9PSBubyA/
ICcgJyA6ICcqJyk7Ci0JCQkJaXRlbV9zZXRfdGFnKCd0Jyk7Ci0JCQkJaXRlbV9zZXRfZGF0YSht
ZW51KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU19UUklTVEFURToKLQkJCQlzd2l0Y2ggKHZhbCkg
ewotCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7Ci0JCQkJY2FzZSBtb2Q6IGNoID0gJ00n
OyBicmVhazsKLQkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOwotCQkJCX0KLQkJCQlpZiAo
c3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7Ci0JCQkJCWlmIChzeW0tPnJldl9kZXAudHJpID09IG1v
ZCkKLQkJCQkJCWl0ZW1fbWFrZSgieyVjfSIsIGNoKTsKLQkJCQkJZWxzZQotCQkJCQkJaXRlbV9t
YWtlKCI8JWM+IiwgY2gpOwotCQkJCX0gZWxzZQotCQkJCQlpdGVtX21ha2UoIi0lYy0iLCBjaCk7
Ci0JCQkJaXRlbV9zZXRfdGFnKCd0Jyk7Ci0JCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKLQkJCQli
cmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG1wID0gMiArIHN0cmxlbihzeW1fZ2V0X3N0cmluZ192
YWx1ZShzeW0pKTsgLyogKCkgPSAyICovCi0JCQkJaXRlbV9tYWtlKCIoJXMpIiwgc3ltX2dldF9z
dHJpbmdfdmFsdWUoc3ltKSk7Ci0JCQkJdG1wID0gaW5kZW50IC0gdG1wICsgNDsKLQkJCQlpZiAo
dG1wIDwgMCkKLQkJCQkJdG1wID0gMDsKLQkJCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCB0bXAs
ICcgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpLAotCQkJCQkgICAgIChzeW1faGFzX3ZhbHVlKHN5
bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPwotCQkJCQkgICAgICIiIDogIiAoTkVXKSIp
OwotCQkJCWl0ZW1fc2V0X3RhZygncycpOwotCQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7Ci0JCQkJ
Z290byBjb25mX2NoaWxkczsKLQkJCX0KLQkJfQotCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCBp
bmRlbnQgKyAxLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSwKLQkJCSAgKHN5bV9oYXNfdmFs
dWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/Ci0JCQkgICIiIDogIiAoTkVXKSIp
OwotCQlpZiAobWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgewotCQkJaXRlbV9hZGRfc3Ry
KCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7Ci0JCQlyZXR1
cm47Ci0JCX0KLQl9Ci0KLWNvbmZfY2hpbGRzOgotCWluZGVudCArPSBkb2ludDsKLQlmb3IgKGNo
aWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpCi0JCWJ1aWxkX2Nv
bmYoY2hpbGQpOwotCWluZGVudCAtPSBkb2ludDsKLX0KLQotc3RhdGljIHZvaWQgY29uZihzdHJ1
Y3QgbWVudSAqbWVudSwgc3RydWN0IG1lbnUgKmFjdGl2ZV9tZW51KQotewotCXN0cnVjdCBtZW51
ICpzdWJtZW51OwotCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsK
LQlzdHJ1Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCWlu
dCByZXM7Ci0JaW50IHNfc2Nyb2xsID0gMDsKLQotCWlmIChtZW51ICE9ICZyb290bWVudSkKLQkJ
c3RwYXJ0LnRleHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7Ci0JZWxzZQotCQlzdHBhcnQudGV4
dCA9IE5VTEw7Ci0JbGlzdF9hZGRfdGFpbCgmc3RwYXJ0LmVudHJpZXMsICZ0cmFpbCk7Ci0KLQl3
aGlsZSAoMSkgewotCQlpdGVtX3Jlc2V0KCk7Ci0JCWN1cnJlbnRfbWVudSA9IG1lbnU7Ci0JCWJ1
aWxkX2NvbmYobWVudSk7Ci0JCWlmICghY2hpbGRfY291bnQpCi0JCQlicmVhazsKLQkJc2V0X3N1
YnRpdGxlKCk7Ci0JCWRpYWxvZ19jbGVhcigpOwotCQlyZXMgPSBkaWFsb2dfbWVudShwcm9tcHQg
PyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKLQkJCQkgIG1lbnVfaW5zdHJ1Y3Rpb25zLAotCQkJCSAg
YWN0aXZlX21lbnUsICZzX3Njcm9sbCk7Ci0JCWlmIChyZXMgPT0gMSB8fCByZXMgPT0gS0VZX0VT
QyB8fCByZXMgPT0gLUVSUkRJU1BMQVlUT09TTUFMTCkKLQkJCWJyZWFrOwotCQlpZiAoaXRlbV9j
b3VudCgpICE9IDApIHsKLQkJCWlmICghaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCgpKQotCQkJCWNv
bnRpbnVlOwotCQkJaWYgKCFpdGVtX3RhZygpKQotCQkJCWNvbnRpbnVlOwotCQl9Ci0JCXN1Ym1l
bnUgPSBpdGVtX2RhdGEoKTsKLQkJYWN0aXZlX21lbnUgPSBpdGVtX2RhdGEoKTsKLQkJaWYgKHN1
Ym1lbnUpCi0JCQlzeW0gPSBzdWJtZW51LT5zeW07Ci0JCWVsc2UKLQkJCXN5bSA9IE5VTEw7Ci0K
LQkJc3dpdGNoIChyZXMpIHsKLQkJY2FzZSAwOgotCQkJc3dpdGNoIChpdGVtX3RhZygpKSB7Ci0J
CQljYXNlICdtJzoKLQkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkKLQkJCQkJc3VibWVudS0+ZGF0
YSA9ICh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKLQkJCQllbHNlCi0JCQkJCWNvbmYo
c3VibWVudSwgTlVMTCk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICd0JzoKLQkJCQlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMpCi0JCQkJ
CWNvbmZfY2hvaWNlKHN1Ym1lbnUpOwotCQkJCWVsc2UgaWYgKHN1Ym1lbnUtPnByb21wdC0+dHlw
ZSA9PSBQX01FTlUpCi0JCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7Ci0JCQkJYnJlYWs7Ci0JCQlj
YXNlICdzJzoKLQkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJ
CWJyZWFrOwotCQljYXNlIDI6Ci0JCQlpZiAoc3ltKQotCQkJCXNob3dfaGVscChzdWJtZW51KTsK
LQkJCWVsc2UgewotCQkJCXJlc2V0X3N1YnRpdGxlKCk7Ci0JCQkJc2hvd19oZWxwdGV4dCgiUkVB
RE1FIiwgbWNvbmZfcmVhZG1lKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlyZXNl
dF9zdWJ0aXRsZSgpOwotCQkJY29uZl9zYXZlKCk7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJ
cmVzZXRfc3VidGl0bGUoKTsKLQkJCWNvbmZfbG9hZCgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgNToK
LQkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7Ci0JCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCB5ZXMpKQotCQkJCQlicmVhazsKLQkJCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1
ZShzeW0sIG1vZCkpCi0JCQkJCXNob3dfdGV4dGJveChOVUxMLCBzZXRtb2RfdGV4dCwgNiwgNzQp
OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWlmIChpdGVtX2lzX3RhZygndCcpKQot
CQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7Ci0JCQlicmVhazsKLQkJY2FzZSA3
OgotCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpCi0JCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShz
eW0sIG1vZCk7Ci0JCQlicmVhazsKLQkJY2FzZSA4OgotCQkJaWYgKGl0ZW1faXNfdGFnKCd0Jykp
Ci0JCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOwotCQkJZWxzZSBpZiAoaXRlbV9p
c190YWcoJ20nKSkKLQkJCQljb25mKHN1Ym1lbnUsIE5VTEwpOwotCQkJYnJlYWs7Ci0JCWNhc2Ug
OToKLQkJCXNlYXJjaF9jb25mKCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxMDoKLQkJCXNob3dfYWxs
X29wdGlvbnMgPSAhc2hvd19hbGxfb3B0aW9uczsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JbGlz
dF9kZWwodHJhaWwucHJldik7Ci19Ci0KLXN0YXRpYyBpbnQgc2hvd190ZXh0Ym94X2V4dChjb25z
dCBjaGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIsIGludCBjLCBpbnQKLQkJCSAgICAqa2V5
cywgaW50ICp2c2Nyb2xsLCBpbnQgKmhzY3JvbGwsIHVwZGF0ZV90ZXh0X2ZuCi0JCQkgICAgdXBk
YXRlX3RleHQsIHZvaWQgKmRhdGEpCi17Ci0JZGlhbG9nX2NsZWFyKCk7Ci0JcmV0dXJuIGRpYWxv
Z190ZXh0Ym94KHRpdGxlLCB0ZXh0LCByLCBjLCBrZXlzLCB2c2Nyb2xsLCBoc2Nyb2xsLAotCQkJ
ICAgICAgdXBkYXRlX3RleHQsIGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBzaG93X3RleHRib3go
Y29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCByLCBpbnQgYykKLXsKLQlz
aG93X3RleHRib3hfZXh0KHRpdGxlLCAoY2hhciAqKSB0ZXh0LCByLCBjLCAoaW50IFtdKSB7MH0s
IE5VTEwsIE5VTEwsCi0JCQkgTlVMTCwgTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dfaGVs
cHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQpCi17Ci0Jc2hvd190ZXh0
Ym94KHRpdGxlLCB0ZXh0LCAwLCAwKTsKLX0KLQotc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlX2Nh
bGxiYWNrKGNvbnN0IGNoYXIgKnMpCi17Ci0JaWYgKHNhdmVfYW5kX2V4aXQpIHsKLQkJaWYgKCFz
aWxlbnQpCi0JCQlwcmludGYoIiVzIiwgcyk7Ci0JfSBlbHNlIHsKLQkJc2hvd190ZXh0Ym94KE5V
TEwsIHMsIDYsIDYwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dfaGVscChzdHJ1Y3QgbWVu
dSAqbWVudSkKLXsKLQlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygpOwotCi0JaGVscC5tYXhf
d2lkdGggPSBnZXRtYXh4KHN0ZHNjcikgLSAxMDsKLQltZW51X2dldF9leHRfaGVscChtZW51LCAm
aGVscCk7Ci0KLQlzaG93X2hlbHB0ZXh0KG1lbnVfZ2V0X3Byb21wdChtZW51KSwgc3RyX2dldCgm
aGVscCkpOwotCXN0cl9mcmVlKCZoZWxwKTsKLX0KLQotc3RhdGljIHZvaWQgY29uZl9jaG9pY2Uo
c3RydWN0IG1lbnUgKm1lbnUpCi17Ci0JY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJv
bXB0KG1lbnUpOwotCXN0cnVjdCBtZW51ICpjaGlsZDsKLQlzdHJ1Y3Qgc3ltYm9sICphY3RpdmU7
Ci0KLQlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pOwotCXdoaWxlICgx
KSB7Ci0JCWludCByZXM7Ci0JCWludCBzZWxlY3RlZDsKLQkJaXRlbV9yZXNldCgpOwotCi0JCWN1
cnJlbnRfbWVudSA9IG1lbnU7Ci0JCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dCkgewotCQkJaWYgKCFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQotCQkJ
CWNvbnRpbnVlOwotCQkJaWYgKGNoaWxkLT5zeW0pCi0JCQkJaXRlbV9tYWtlKCIlcyIsIG1lbnVf
Z2V0X3Byb21wdChjaGlsZCkpOwotCQkJZWxzZSB7Ci0JCQkJaXRlbV9tYWtlKCIqKiogJXMgKioq
IiwgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7Ci0JCQkJaXRlbV9zZXRfdGFnKCc6Jyk7Ci0JCQl9
Ci0JCQlpdGVtX3NldF9kYXRhKGNoaWxkKTsKLQkJCWlmIChjaGlsZC0+c3ltID09IGFjdGl2ZSkK
LQkJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKLQkJCWlmIChjaGlsZC0+c3ltID09IHN5bV9nZXRf
Y2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCi0JCQkJaXRlbV9zZXRfdGFnKCdYJyk7Ci0JCX0KLQkJ
ZGlhbG9nX2NsZWFyKCk7Ci0JCXJlcyA9IGRpYWxvZ19jaGVja2xpc3QocHJvbXB0ID8gcHJvbXB0
IDogIk1haW4gTWVudSIsCi0JCQkJCXJhZGlvbGlzdF9pbnN0cnVjdGlvbnMsCi0JCQkJCU1FTlVC
T1hfSEVJR1RIX01JTiwKLQkJCQkJTUVOVUJPWF9XSURUSF9NSU4sCi0JCQkJCUNIRUNLTElTVF9I
RUlHVEhfTUlOKTsKLQkJc2VsZWN0ZWQgPSBpdGVtX2FjdGl2YXRlX3NlbGVjdGVkKCk7Ci0JCXN3
aXRjaCAocmVzKSB7Ci0JCWNhc2UgMDoKLQkJCWlmIChzZWxlY3RlZCkgewotCQkJCWNoaWxkID0g
aXRlbV9kYXRhKCk7Ci0JCQkJaWYgKCFjaGlsZC0+c3ltKQotCQkJCQlicmVhazsKLQotCQkJCXN5
bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwgeWVzKTsKLQkJCX0KLQkJCXJldHVybjsK
LQkJY2FzZSAxOgotCQkJaWYgKHNlbGVjdGVkKSB7Ci0JCQkJY2hpbGQgPSBpdGVtX2RhdGEoKTsK
LQkJCQlzaG93X2hlbHAoY2hpbGQpOwotCQkJCWFjdGl2ZSA9IGNoaWxkLT5zeW07Ci0JCQl9IGVs
c2UKLQkJCQlzaG93X2hlbHAobWVudSk7Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfRVNDOgotCQkJ
cmV0dXJuOwotCQljYXNlIC1FUlJESVNQTEFZVE9PU01BTEw6Ci0JCQlyZXR1cm47Ci0JCX0KLQl9
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KQotewotCWNv
bnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKLQotCXdoaWxlICgxKSB7
Ci0JCWludCByZXM7Ci0JCWNvbnN0IGNoYXIgKmhlYWRpbmc7Ci0KLQkJc3dpdGNoIChzeW1fZ2V0
X3R5cGUobWVudS0+c3ltKSkgewotCQljYXNlIFNfSU5UOgotCQkJaGVhZGluZyA9IGlucHV0Ym94
X2luc3RydWN0aW9uc19pbnQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTX0hFWDoKLQkJCWhlYWRpbmcg
PSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4OwotCQkJYnJlYWs7Ci0JCWNhc2UgU19TVFJJTkc6
Ci0JCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsKLQkJCWJyZWFrOwot
CQlkZWZhdWx0OgotCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBtY29uZiBlcnJvciEiOwotCQl9Ci0J
CWRpYWxvZ19jbGVhcigpOwotCQlyZXMgPSBkaWFsb2dfaW5wdXRib3gocHJvbXB0ID8gcHJvbXB0
IDogIk1haW4gTWVudSIsCi0JCQkJICAgICAgaGVhZGluZywgMTAsIDc1LAotCQkJCSAgICAgIHN5
bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkpOwotCQlzd2l0Y2ggKHJlcykgewotCQljYXNl
IDA6Ci0JCQlpZiAoc3ltX3NldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltLCBkaWFsb2dfaW5wdXRf
cmVzdWx0KSkKLQkJCQlyZXR1cm47Ci0JCQlzaG93X3RleHRib3goTlVMTCwgIllvdSBoYXZlIG1h
ZGUgYW4gaW52YWxpZCBlbnRyeS4iLCA1LCA0Myk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJ
c2hvd19oZWxwKG1lbnUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX0VTQzoKLQkJCXJldHVybjsK
LQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpCi17Ci0KLQl3aGlsZSAo
MSkgewotCQlpbnQgcmVzOwotCQlkaWFsb2dfY2xlYXIoKTsKLQkJcmVzID0gZGlhbG9nX2lucHV0
Ym94KE5VTEwsIGxvYWRfY29uZmlnX3RleHQsCi0JCQkJICAgICAgMTEsIDU1LCBmaWxlbmFtZSk7
Ci0JCXN3aXRjaChyZXMpIHsKLQkJY2FzZSAwOgotCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0
WzBdKQotCQkJCXJldHVybjsKLQkJCWlmICghY29uZl9yZWFkKGRpYWxvZ19pbnB1dF9yZXN1bHQp
KSB7Ci0JCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKLQkJCQlz
eW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlzaG93X3RleHRi
b3goTlVMTCwgIkZpbGUgZG9lcyBub3QgZXhpc3QhIiwgNSwgMzgpOwotCQkJYnJlYWs7Ci0JCWNh
c2UgMToKLQkJCXNob3dfaGVscHRleHQoIkxvYWQgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iLCBs
b2FkX2NvbmZpZ19oZWxwKTsKLQkJCWJyZWFrOwotCQljYXNlIEtFWV9FU0M6Ci0JCQlyZXR1cm47
Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKQotewotCXdoaWxlICgx
KSB7Ci0JCWludCByZXM7Ci0JCWRpYWxvZ19jbGVhcigpOwotCQlyZXMgPSBkaWFsb2dfaW5wdXRi
b3goTlVMTCwgc2F2ZV9jb25maWdfdGV4dCwKLQkJCQkgICAgICAxMSwgNTUsIGZpbGVuYW1lKTsK
LQkJc3dpdGNoKHJlcykgewotCQljYXNlIDA6Ci0JCQlpZiAoIWRpYWxvZ19pbnB1dF9yZXN1bHRb
MF0pCi0JCQkJcmV0dXJuOwotCQkJaWYgKCFjb25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1bHQp
KSB7Ci0JCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKLQkJCQly
ZXR1cm47Ci0JCQl9Ci0JCQlzaG93X3RleHRib3goTlVMTCwgIkNhbid0IGNyZWF0ZSBmaWxlISIs
IDUsIDYwKTsKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlzaG93X2hlbHB0ZXh0KCJTYXZlIEFs
dGVybmF0ZSBDb25maWd1cmF0aW9uIiwgc2F2ZV9jb25maWdfaGVscCk7Ci0JCQlicmVhazsKLQkJ
Y2FzZSBLRVlfRVNDOgotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IGhhbmRs
ZV9leGl0KHZvaWQpCi17Ci0JaW50IHJlczsKLQotCXNhdmVfYW5kX2V4aXQgPSAxOwotCXJlc2V0
X3N1YnRpdGxlKCk7Ci0JZGlhbG9nX2NsZWFyKCk7Ci0JaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkK
LQkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsCi0JCQkJICAgIkRvIHlvdSB3aXNoIHRvIHNhdmUg
eW91ciBuZXcgY29uZmlndXJhdGlvbj9cbiIKLQkJCQkgICAgICIoUHJlc3MgPEVTQz48RVNDPiB0
byBjb250aW51ZSBVbmlrcmFmdCBjb25maWd1cmF0aW9uLikiLAotCQkJCSAgIDYsIDYwKTsKLQll
bHNlCi0JCXJlcyA9IC0xOwotCi0JZW5kX2RpYWxvZyhzYXZlZF94LCBzYXZlZF95KTsKLQotCXN3
aXRjaCAocmVzKSB7Ci0JY2FzZSAwOgotCQlpZiAoY29uZl93cml0ZShmaWxlbmFtZSkpIHsKLQkJ
CWZwcmludGYoc3RkZXJyLCAiXG5cbiIKLQkJCQkJICAiRXJyb3Igd2hpbGUgd3JpdGluZyBvZiB0
aGUgY29uZmlndXJhdGlvbi5cbiIKLQkJCQkJICAiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMg
d2VyZSBOT1Qgc2F2ZWQuIgotCQkJCQkgICJcblxuIik7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlj
b25mX3dyaXRlX2F1dG9jb25mKDApOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIC0xOgot
CQlpZiAoIXNpbGVudCkKLQkJCXByaW50ZigiXG5cbiIKLQkJCQkgIioqKiBFbmQgb2YgdGhlIGNv
bmZpZ3VyYXRpb24uXG4iCi0JCQkJICIqKiogRXhlY3V0ZSAnbWFrZScgdG8gc3RhcnQgdGhlIGJ1
aWxkIG9yIHRyeSAnbWFrZSBoZWxwJy4iCi0JCQkJICJcblxuIik7Ci0JCXJlcyA9IDA7Ci0JCWJy
ZWFrOwotCWRlZmF1bHQ6Ci0JCWlmICghc2lsZW50KQotCQkJZnByaW50ZihzdGRlcnIsICJcblxu
IgotCQkJCQkgICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iCi0J
CQkJCSAgIlxuXG4iKTsKLQkJaWYgKHJlcyAhPSBLRVlfRVNDKQotCQkJcmVzID0gMDsKLQl9Ci0K
LQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnbm8pCi17
Ci0JZXhpdChoYW5kbGVfZXhpdCgpKTsKLX0KLQotaW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYp
Ci17Ci0JY2hhciAqbW9kZTsKLQlpbnQgcmVzOwotCi0Jc2lnbmFsKFNJR0lOVCwgc2lnX2hhbmRs
ZXIpOwotCi0JaWYgKGFjID4gMSAmJiBzdHJjbXAoYXZbMV0sICItcyIpID09IDApIHsKLQkJc2ls
ZW50ID0gMTsKLQkJLyogU2lsZW5jZSBjb25mX3JlYWQoKSB1bnRpbCB0aGUgcmVhbCBjYWxsYmFj
ayBpcyBzZXQgdXAgKi8KLQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsKLQkJYXYr
KzsKLQl9Ci0JY29uZl9wYXJzZShhdlsxXSk7Ci0JY29uZl9yZWFkKE5VTEwpOwotCi0JbW9kZSA9
IGdldGVudigiTUVOVUNPTkZJR19NT0RFIik7Ci0JaWYgKG1vZGUpIHsKLQkJaWYgKCFzdHJjYXNl
Y21wKG1vZGUsICJzaW5nbGVfbWVudSIpKQotCQkJc2luZ2xlX21lbnVfbW9kZSA9IDE7Ci0JfQot
Ci0JaWYgKGluaXRfZGlhbG9nKE5VTEwpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiWW91ciBkaXNw
bGF5IGlzIHRvbyBzbWFsbCB0byBydW4gTWVudWNvbmZpZyFcbiIpOwotCQlmcHJpbnRmKHN0ZGVy
ciwgIkl0IG11c3QgYmUgYXQgbGVhc3QgMTkgbGluZXMgYnkgODAgY29sdW1ucy5cbiIpOwotCQly
ZXR1cm4gMTsKLQl9Ci0KLQlzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUo
KSk7Ci0JY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhjb25mX21lc3NhZ2VfY2FsbGJhY2spOwot
CWRvIHsKLQkJY29uZigmcm9vdG1lbnUsIE5VTEwpOwotCQlyZXMgPSBoYW5kbGVfZXhpdCgpOwot
CX0gd2hpbGUgKHJlcyA9PSBLRVlfRVNDKTsKLQotCXJldHVybiByZXM7Ci19CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L21lbnUuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWVudS5j
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOWQxNjQ2Li4wMDAwMDAwCi0tLSBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvbWVudS5jCisrKyAvZGV2L251bGwKQEAgLTEsODY3ICswLDAgQEAK
LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICovCi0KLSNpbmNs
dWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAibGtjLmgiCi0KLXN0YXRpYyBjb25zdCBj
aGFyIG5vaGVscF90ZXh0W10gPSAiVGhlcmUgaXMgbm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMg
b3B0aW9uLiI7Ci0KLXN0cnVjdCBtZW51IHJvb3RtZW51Owotc3RhdGljIHN0cnVjdCBtZW51ICoq
bGFzdF9lbnRyeV9wdHI7Ci0KLXN0cnVjdCBmaWxlICpmaWxlX2xpc3Q7Ci1zdHJ1Y3QgZmlsZSAq
Y3VycmVudF9maWxlOwotCi12b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVudSwgY29uc3Qg
Y2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQl2YV9zdGFydChhcCwgZm10KTsKLQlm
cHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIG1lbnUtPmZpbGUtPm5hbWUsIG1lbnUt
PmxpbmVubyk7Ci0JdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKLQlmcHJpbnRmKHN0ZGVyciwg
IlxuIik7Ci0JdmFfZW5kKGFwKTsKLX0KLQotc3RhdGljIHZvaWQgcHJvcF93YXJuKHN0cnVjdCBw
cm9wZXJ0eSAqcHJvcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQl2
YV9zdGFydChhcCwgZm10KTsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIHBy
b3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7Ci0JdmZwcmludGYoc3RkZXJyLCBmbXQsIGFw
KTsKLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JdmFfZW5kKGFwKTsKLX0KLQotdm9pZCBfbWVu
dV9pbml0KHZvaWQpCi17Ci0JY3VycmVudF9lbnRyeSA9IGN1cnJlbnRfbWVudSA9ICZyb290bWVu
dTsKLQlsYXN0X2VudHJ5X3B0ciA9ICZyb290bWVudS5saXN0OwotfQotCi12b2lkIG1lbnVfYWRk
X2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSkKLXsKLQlzdHJ1Y3QgbWVudSAqbWVudTsKLQotCW1l
bnUgPSB4bWFsbG9jKHNpemVvZigqbWVudSkpOwotCW1lbXNldChtZW51LCAwLCBzaXplb2YoKm1l
bnUpKTsKLQltZW51LT5zeW0gPSBzeW07Ci0JbWVudS0+cGFyZW50ID0gY3VycmVudF9tZW51Owot
CW1lbnUtPmZpbGUgPSBjdXJyZW50X2ZpbGU7Ci0JbWVudS0+bGluZW5vID0gemNvbmZfbGluZW5v
KCk7Ci0KLQkqbGFzdF9lbnRyeV9wdHIgPSBtZW51OwotCWxhc3RfZW50cnlfcHRyID0gJm1lbnUt
Pm5leHQ7Ci0JY3VycmVudF9lbnRyeSA9IG1lbnU7Ci0JaWYgKHN5bSkKLQkJbWVudV9hZGRfc3lt
Ym9sKFBfU1lNQk9MLCBzeW0sIE5VTEwpOwotfQotCi1zdHJ1Y3QgbWVudSAqbWVudV9hZGRfbWVu
dSh2b2lkKQotewotCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfZW50cnktPmxpc3Q7Ci0JcmV0
dXJuIGN1cnJlbnRfbWVudSA9IGN1cnJlbnRfZW50cnk7Ci19Ci0KLXZvaWQgbWVudV9lbmRfbWVu
dSh2b2lkKQotewotCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfbWVudS0+bmV4dDsKLQljdXJy
ZW50X21lbnUgPSBjdXJyZW50X21lbnUtPnBhcmVudDsKLX0KLQotLyoKLSAqIFJld3JpdGVzICdt
JyB0byAnbScgJiYgTU9EVUxFUywgc28gdGhhdCBpdCBldmFsdWF0ZXMgdG8gJ24nIHdoZW4gcnVu
bmluZwotICogd2l0aG91dCBtb2R1bGVzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZXhwciAqcmV3cml0
ZV9tKHN0cnVjdCBleHByICplKQotewotCWlmICghZSkKLQkJcmV0dXJuIGU7Ci0KLQlzd2l0Y2gg
KGUtPnR5cGUpIHsKLQljYXNlIEVfTk9UOgotCQllLT5sZWZ0LmV4cHIgPSByZXdyaXRlX20oZS0+
bGVmdC5leHByKTsKLQkJYnJlYWs7Ci0JY2FzZSBFX09SOgotCWNhc2UgRV9BTkQ6Ci0JCWUtPmxl
ZnQuZXhwciA9IHJld3JpdGVfbShlLT5sZWZ0LmV4cHIpOwotCQllLT5yaWdodC5leHByID0gcmV3
cml0ZV9tKGUtPnJpZ2h0LmV4cHIpOwotCQlicmVhazsKLQljYXNlIEVfU1lNQk9MOgotCQkvKiBj
aGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8KLQkJaWYgKGUtPmxlZnQuc3ltID09ICZz
eW1ib2xfbW9kKQotCQkJcmV0dXJuIGV4cHJfYWxsb2NfYW5kKGUsIGV4cHJfYWxsb2Nfc3ltYm9s
KG1vZHVsZXNfc3ltKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1
cm4gZTsKLX0KLQotdm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCkKLXsKLQljdXJy
ZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJyZW50X2VudHJ5LT5kZXAsIGRlcCk7
Ci19Ci0KLXZvaWQgbWVudV9zZXRfdHlwZShpbnQgdHlwZSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpz
eW0gPSBjdXJyZW50X2VudHJ5LT5zeW07Ci0KLQlpZiAoc3ltLT50eXBlID09IHR5cGUpCi0JCXJl
dHVybjsKLQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgewotCQlzeW0tPnR5cGUgPSB0eXBl
OwotCQlyZXR1cm47Ci0JfQotCW1lbnVfd2FybihjdXJyZW50X2VudHJ5LAotCQkiaWdub3Jpbmcg
dHlwZSByZWRlZmluaXRpb24gb2YgJyVzJyBmcm9tICclcycgdG8gJyVzJyIsCi0JCXN5bS0+bmFt
ZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCi0JCXN5bV90eXBlX25hbWUoc3ltLT50eXBlKSwg
c3ltX3R5cGVfbmFtZSh0eXBlKSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKm1lbnVf
YWRkX3Byb3AoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1Y3QgZXhwciAq
ZXhwciwgc3RydWN0IGV4cHIgKmRlcCkKLXsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBwcm9w
X2FsbG9jKHR5cGUsIGN1cnJlbnRfZW50cnktPnN5bSk7Ci0KLQlwcm9wLT5tZW51ID0gY3VycmVu
dF9lbnRyeTsKLQlwcm9wLT5leHByID0gZXhwcjsKLQlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7
Ci0KLQlpZiAocHJvbXB0KSB7Ci0JCWlmIChpc3NwYWNlKCpwcm9tcHQpKSB7Ci0JCQlwcm9wX3dh
cm4ocHJvcCwgImxlYWRpbmcgd2hpdGVzcGFjZSBpZ25vcmVkIik7Ci0JCQl3aGlsZSAoaXNzcGFj
ZSgqcHJvbXB0KSkKLQkJCQlwcm9tcHQrKzsKLQkJfQotCQlpZiAoY3VycmVudF9lbnRyeS0+cHJv
bXB0ICYmIGN1cnJlbnRfZW50cnkgIT0gJnJvb3RtZW51KQotCQkJcHJvcF93YXJuKHByb3AsICJw
cm9tcHQgcmVkZWZpbmVkIik7Ci0KLQkJLyogQXBwbHkgYWxsIHVwcGVyIG1lbnVzJyB2aXNpYmls
aXRpZXMgdG8gYWN0dWFsIHByb21wdHMuICovCi0JCWlmKHR5cGUgPT0gUF9QUk9NUFQpIHsKLQkJ
CXN0cnVjdCBtZW51ICptZW51ID0gY3VycmVudF9lbnRyeTsKLQotCQkJd2hpbGUgKChtZW51ID0g
bWVudS0+cGFyZW50KSAhPSBOVUxMKSB7Ci0JCQkJc3RydWN0IGV4cHIgKmR1cF9leHByOwotCi0J
CQkJaWYgKCFtZW51LT52aXNpYmlsaXR5KQotCQkJCQljb250aW51ZTsKLQkJCQkvKgotCQkJCSAq
IERvIG5vdCBhZGQgYSByZWZlcmVuY2UgdG8gdGhlCi0JCQkJICogbWVudSdzIHZpc2liaWxpdHkg
ZXhwcmVzc2lvbiBidXQKLQkJCQkgKiB1c2UgYSBjb3B5IG9mIGl0LiAgT3RoZXJ3aXNlIHRoZQot
CQkJCSAqIGV4cHJlc3Npb24gcmVkdWN0aW9uIGZ1bmN0aW9ucwotCQkJCSAqIHdpbGwgbW9kaWZ5
IGV4cHJlc3Npb25zIHRoYXQgaGF2ZQotCQkJCSAqIG11bHRpcGxlIHJlZmVyZW5jZXMgd2hpY2gg
Y2FuCi0JCQkJICogY2F1c2UgdW53YW50ZWQgc2lkZSBlZmZlY3RzLgotCQkJCSAqLwotCQkJCWR1
cF9leHByID0gZXhwcl9jb3B5KG1lbnUtPnZpc2liaWxpdHkpOwotCi0JCQkJcHJvcC0+dmlzaWJs
ZS5leHByCi0JCQkJCT0gZXhwcl9hbGxvY19hbmQocHJvcC0+dmlzaWJsZS5leHByLAotCQkJCQkJ
CSBkdXBfZXhwcik7Ci0JCQl9Ci0JCX0KLQotCQljdXJyZW50X2VudHJ5LT5wcm9tcHQgPSBwcm9w
OwotCX0KLQlwcm9wLT50ZXh0ID0gcHJvbXB0OwotCi0JcmV0dXJuIHByb3A7Ci19Ci0KLXN0cnVj
dCBwcm9wZXJ0eSAqbWVudV9hZGRfcHJvbXB0KGVudW0gcHJvcF90eXBlIHR5cGUsIGNoYXIgKnBy
b21wdCwgc3RydWN0IGV4cHIgKmRlcCkKLXsKLQlyZXR1cm4gbWVudV9hZGRfcHJvcCh0eXBlLCBw
cm9tcHQsIE5VTEwsIGRlcCk7Ci19Ci0KLXZvaWQgbWVudV9hZGRfdmlzaWJpbGl0eShzdHJ1Y3Qg
ZXhwciAqZXhwcikKLXsKLQljdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5ID0gZXhwcl9hbGxvY19h
bmQoY3VycmVudF9lbnRyeS0+dmlzaWJpbGl0eSwKLQkgICAgZXhwcik7Ci19Ci0KLXZvaWQgbWVu
dV9hZGRfZXhwcihlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZXhwciwgc3RydWN0
IGV4cHIgKmRlcCkKLXsKLQltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4cHIsIGRlcCk7Ci19
Ci0KLXZvaWQgbWVudV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1i
b2wgKnN5bSwgc3RydWN0IGV4cHIgKmRlcCkKLXsKLQltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEws
IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSksIGRlcCk7Ci19Ci0KLXZvaWQgbWVudV9hZGRfb3B0aW9u
X21vZHVsZXModm9pZCkKLXsKLQlpZiAobW9kdWxlc19zeW0pCi0JCXpjb25mX2Vycm9yKCJzeW1i
b2wgJyVzJyByZWRlZmluZXMgb3B0aW9uICdtb2R1bGVzJyBhbHJlYWR5IGRlZmluZWQgYnkgc3lt
Ym9sICclcyciLAotCQkJICAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSwgbW9kdWxlc19zeW0t
Pm5hbWUpOwotCW1vZHVsZXNfc3ltID0gY3VycmVudF9lbnRyeS0+c3ltOwotfQotCi12b2lkIG1l
bnVfYWRkX29wdGlvbl9kZWZjb25maWdfbGlzdCh2b2lkKQotewotCWlmICghc3ltX2RlZmNvbmZp
Z19saXN0KQotCQlzeW1fZGVmY29uZmlnX2xpc3QgPSBjdXJyZW50X2VudHJ5LT5zeW07Ci0JZWxz
ZSBpZiAoc3ltX2RlZmNvbmZpZ19saXN0ICE9IGN1cnJlbnRfZW50cnktPnN5bSkKLQkJemNvbmZf
ZXJyb3IoInRyeWluZyB0byByZWRlZmluZSBkZWZjb25maWcgc3ltYm9sIik7Ci0Jc3ltX2RlZmNv
bmZpZ19saXN0LT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7Ci19Ci0KLXZvaWQgbWVudV9hZGRf
b3B0aW9uX2FsbG5vY29uZmlnX3kodm9pZCkKLXsKLQljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdz
IHw9IFNZTUJPTF9BTExOT0NPTkZJR19ZOwotfQotCi1zdGF0aWMgaW50IG1lbnVfdmFsaWRhdGVf
bnVtYmVyKHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IHN5bWJvbCAqc3ltMikKLXsKLQlyZXR1
cm4gc3ltMi0+dHlwZSA9PSBTX0lOVCB8fCBzeW0yLT50eXBlID09IFNfSEVYIHx8Ci0JICAgICAg
IChzeW0yLT50eXBlID09IFNfVU5LTk9XTiAmJiBzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3ltMi0+
bmFtZSkpOwotfQotCi1zdGF0aWMgdm9pZCBzeW1fY2hlY2tfcHJvcChzdHJ1Y3Qgc3ltYm9sICpz
eW0pCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBzeW1ib2wgKnN5bTI7Ci0J
Y2hhciAqdXNlOwotCi0JZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+
bmV4dCkgewotCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKLQkJY2FzZSBQX0RFRkFVTFQ6Ci0JCQlp
ZiAoKHN5bS0+dHlwZSA9PSBTX1NUUklORyB8fCBzeW0tPnR5cGUgPT0gU19JTlQgfHwgc3ltLT50
eXBlID09IFNfSEVYKSAmJgotCQkJICAgIHByb3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCi0J
CQkJcHJvcF93YXJuKHByb3AsCi0JCQkJICAgICJkZWZhdWx0IGZvciBjb25maWcgc3ltYm9sICcl
cyciCi0JCQkJICAgICIgbXVzdCBiZSBhIHNpbmdsZSBzeW1ib2wiLCBzeW0tPm5hbWUpOwotCQkJ
aWYgKHByb3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpCi0JCQkJYnJlYWs7Ci0JCQlzeW0yID0g
cHJvcF9nZXRfc3ltYm9sKHByb3ApOwotCQkJaWYgKHN5bS0+dHlwZSA9PSBTX0hFWCB8fCBzeW0t
PnR5cGUgPT0gU19JTlQpIHsKLQkJCQlpZiAoIW1lbnVfdmFsaWRhdGVfbnVtYmVyKHN5bSwgc3lt
MikpCi0JCQkJCXByb3Bfd2Fybihwcm9wLAotCQkJCQkgICAgIiclcyc6IG51bWJlciBpcyBpbnZh
bGlkIiwKLQkJCQkJICAgIHN5bS0+bmFtZSk7Ci0JCQl9Ci0JCQlpZiAoc3ltX2lzX2Nob2ljZShz
eW0pKSB7Ci0JCQkJc3RydWN0IHByb3BlcnR5ICpjaG9pY2VfcHJvcCA9Ci0JCQkJCXN5bV9nZXRf
Y2hvaWNlX3Byb3Aoc3ltMik7Ci0KLQkJCQlpZiAoIWNob2ljZV9wcm9wIHx8Ci0JCQkJICAgIHBy
b3BfZ2V0X3N5bWJvbChjaG9pY2VfcHJvcCkgIT0gc3ltKQotCQkJCQlwcm9wX3dhcm4ocHJvcCwK
LQkJCQkJCSAgImNob2ljZSBkZWZhdWx0IHN5bWJvbCAnJXMnIGlzIG5vdCBjb250YWluZWQgaW4g
dGhlIGNob2ljZSIsCi0JCQkJCQkgIHN5bTItPm5hbWUpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNh
c2UgUF9TRUxFQ1Q6Ci0JCWNhc2UgUF9JTVBMWToKLQkJCXVzZSA9IHByb3AtPnR5cGUgPT0gUF9T
RUxFQ1QgPyAic2VsZWN0IiA6ICJpbXBseSI7Ci0JCQlzeW0yID0gcHJvcF9nZXRfc3ltYm9sKHBy
b3ApOwotCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltLT50eXBlICE9IFNfVFJJ
U1RBVEUpCi0JCQkJcHJvcF93YXJuKHByb3AsCi0JCQkJICAgICJjb25maWcgc3ltYm9sICclcycg
dXNlcyAlcywgYnV0IGlzICIKLQkJCQkgICAgIm5vdCBib29sIG9yIHRyaXN0YXRlIiwgc3ltLT5u
YW1lLCB1c2UpOwotCQkJZWxzZSBpZiAoc3ltMi0+dHlwZSAhPSBTX1VOS05PV04gJiYKLQkJCQkg
c3ltMi0+dHlwZSAhPSBTX0JPT0xFQU4gJiYKLQkJCQkgc3ltMi0+dHlwZSAhPSBTX1RSSVNUQVRF
KQotCQkJCXByb3Bfd2Fybihwcm9wLAotCQkJCSAgICAiJyVzJyBoYXMgd3JvbmcgdHlwZS4gJyVz
JyBvbmx5ICIKLQkJCQkgICAgImFjY2VwdCBhcmd1bWVudHMgb2YgYm9vbCBhbmQgIgotCQkJCSAg
ICAidHJpc3RhdGUgdHlwZSIsIHN5bTItPm5hbWUsIHVzZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBQ
X1JBTkdFOgotCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0lOVCAmJiBzeW0tPnR5cGUgIT0gU19IRVgp
Ci0JCQkJcHJvcF93YXJuKHByb3AsICJyYW5nZSBpcyBvbmx5IGFsbG93ZWQgIgotCQkJCQkJImZv
ciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsKLQkJCWlmICghbWVudV92YWxpZGF0ZV9udW1iZXIoc3lt
LCBwcm9wLT5leHByLT5sZWZ0LnN5bSkgfHwKLQkJCSAgICAhbWVudV92YWxpZGF0ZV9udW1iZXIo
c3ltLCBwcm9wLT5leHByLT5yaWdodC5zeW0pKQotCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2Ug
aXMgaW52YWxpZCIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQk7Ci0JCX0KLQl9Ci19Ci0K
LXZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KQotewotCXN0cnVjdCBtZW51
ICptZW51LCAqbGFzdF9tZW51OwotCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7Ci0Jc3RydWN0IGV4cHIgKnBhcmVudGRlcCwgKmJhc2VkZXAsICpkZXAsICpkZXAy
LCAqKmVwOwotCi0Jc3ltID0gcGFyZW50LT5zeW07Ci0JaWYgKHBhcmVudC0+bGlzdCkgewotCQkv
KgotCQkgKiBUaGlzIG1lbnUgbm9kZSBoYXMgY2hpbGRyZW4uIFdlIChyZWN1cnNpdmVseSkgcHJv
Y2VzcyB0aGVtCi0JCSAqIGFuZCBwcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2llcyBiZWZvcmUg
bW92aW5nIG9uLgotCQkgKi8KLQotCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSkgewot
CQkJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pIHsKLQkJCQkvKiBmaW5kIHRoZSBmaXJzdCBj
aG9pY2UgdmFsdWUgdG8gZmluZCBvdXQgY2hvaWNlIHR5cGUgKi8KLQkJCQljdXJyZW50X2VudHJ5
ID0gcGFyZW50OwotCQkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1l
bnUtPm5leHQpIHsKLQkJCQkJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5zeW0tPnR5cGUgIT0gU19V
TktOT1dOKSB7Ci0JCQkJCQltZW51X3NldF90eXBlKG1lbnUtPnN5bS0+dHlwZSk7Ci0JCQkJCQli
cmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCS8qIHNldCB0aGUgdHlwZSBvZiB0aGUgcmVt
YWluaW5nIGNob2ljZSB2YWx1ZXMgKi8KLQkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVu
dTsgbWVudSA9IG1lbnUtPm5leHQpIHsKLQkJCQljdXJyZW50X2VudHJ5ID0gbWVudTsKLQkJCQlp
ZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSA9PSBTX1VOS05PV04pCi0JCQkJCW1lbnVf
c2V0X3R5cGUoc3ltLT50eXBlKTsKLQkJCX0KLQotCQkJLyoKLQkJCSAqIFVzZSB0aGUgY2hvaWNl
IGl0c2VsZiBhcyB0aGUgcGFyZW50IGRlcGVuZGVuY3kgb2YKLQkJCSAqIHRoZSBjb250YWluZWQg
aXRlbXMuIFRoaXMgdHVybnMgdGhlIG1vZGUgb2YgdGhlCi0JCQkgKiBjaG9pY2UgaW50byBhbiB1
cHBlciBib3VuZCBvbiB0aGUgdmlzaWJpbGl0eSBvZiB0aGUKLQkJCSAqIGNob2ljZSB2YWx1ZSBz
eW1ib2xzLgotCQkJICovCi0JCQlwYXJlbnRkZXAgPSBleHByX2FsbG9jX3N5bWJvbChzeW0pOwot
CQl9IGVsc2UgaWYgKHBhcmVudC0+cHJvbXB0KQotCQkJLyogTWVudSBub2RlIGZvciAnbWVudScg
Ki8KLQkJCXBhcmVudGRlcCA9IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHI7Ci0JCWVsc2UK
LQkJCS8qIE1lbnUgbm9kZSBmb3IgJ2lmJyAqLwotCQkJcGFyZW50ZGVwID0gcGFyZW50LT5kZXA7
Ci0KLQkJLyogRm9yIGVhY2ggY2hpbGQgbWVudSBub2RlLi4uICovCi0JCWZvciAobWVudSA9IHBh
cmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKLQkJCS8qCi0JCQkgKiBQcm9w
YWdhdGUgcGFyZW50IGRlcGVuZGVuY2llcyB0byB0aGUgY2hpbGQgbWVudQotCQkJICogbm9kZSwg
YWxzbyByZXdyaXRpbmcgYW5kIHNpbXBsaWZ5aW5nIGV4cHJlc3Npb25zCi0JCQkgKi8KLQkJCWJh
c2VkZXAgPSByZXdyaXRlX20obWVudS0+ZGVwKTsKLQkJCWJhc2VkZXAgPSBleHByX3RyYW5zZm9y
bShiYXNlZGVwKTsKLQkJCWJhc2VkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkocGFyZW50
ZGVwKSwgYmFzZWRlcCk7Ci0JCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhiYXNlZGVw
KTsKLQkJCW1lbnUtPmRlcCA9IGJhc2VkZXA7Ci0KLQkJCWlmIChtZW51LT5zeW0pCi0JCQkJLyoK
LQkJCQkgKiBOb3RlOiBGb3Igc3ltYm9scywgYWxsIHByb21wdHMgYXJlIGluY2x1ZGVkCi0JCQkJ
ICogdG9vIGluIHRoZSBzeW1ib2wncyBvd24gcHJvcGVydHkgbGlzdAotCQkJCSAqLwotCQkJCXBy
b3AgPSBtZW51LT5zeW0tPnByb3A7Ci0JCQllbHNlCi0JCQkJLyoKLQkJCQkgKiBGb3Igbm9uLXN5
bWJvbCBtZW51IG5vZGVzLCB3ZSBqdXN0IG5lZWQgdG8KLQkJCQkgKiBoYW5kbGUgdGhlIHByb21w
dAotCQkJCSAqLwotCQkJCXByb3AgPSBtZW51LT5wcm9tcHQ7Ci0KLQkJCS8qIEZvciBlYWNoIHBy
b3BlcnR5Li4uICovCi0JCQlmb3IgKDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKLQkJCQlp
ZiAocHJvcC0+bWVudSAhPSBtZW51KQotCQkJCQkvKgotCQkJCQkgKiBUd28gcG9zc2liaWxpdGll
czoKLQkJCQkJICoKLQkJCQkJICogMS4gVGhlIHByb3BlcnR5IGxhY2tzIGRlcGVuZGVuY2llcwot
CQkJCQkgKiAgICBhbmQgc28gaXNuJ3QgbG9jYXRpb24tc3BlY2lmaWMsCi0JCQkJCSAqICAgIGUu
Zy4gYW4gJ29wdGlvbicKLQkJCQkJICoKLQkJCQkJICogMi4gVGhlIHByb3BlcnR5IGJlbG9uZ3Mg
dG8gYSBzeW1ib2wKLQkJCQkJICogICAgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgYW5k
Ci0JCQkJCSAqICAgIGlzIGZyb20gc29tZSBvdGhlciBsb2NhdGlvbi4gSXQKLQkJCQkJICogICAg
d2lsbCBiZSBoYW5kbGVkIHRoZXJlIGluIHRoYXQKLQkJCQkJICogICAgY2FzZS4KLQkJCQkJICoK
LQkJCQkJICogU2tpcCB0aGUgcHJvcGVydHkuCi0JCQkJCSAqLwotCQkJCQljb250aW51ZTsKLQot
CQkJCS8qCi0JCQkJICogUHJvcGFnYXRlIHBhcmVudCBkZXBlbmRlbmNpZXMgdG8gdGhlCi0JCQkJ
ICogcHJvcGVydHkncyBjb25kaXRpb24sIHJld3JpdGluZyBhbmQKLQkJCQkgKiBzaW1wbGlmeWlu
ZyBleHByZXNzaW9ucyBhdCB0aGUgc2FtZSB0aW1lCi0JCQkJICovCi0JCQkJZGVwID0gcmV3cml0
ZV9tKHByb3AtPnZpc2libGUuZXhwcik7Ci0JCQkJZGVwID0gZXhwcl90cmFuc2Zvcm0oZGVwKTsK
LQkJCQlkZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksIGRlcCk7Ci0JCQkJ
ZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhkZXApOwotCQkJCWlmIChtZW51LT5zeW0gJiYgbWVu
dS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpCi0JCQkJCWRlcCA9IGV4cHJfdHJhbnNfYm9vbChk
ZXApOwotCQkJCXByb3AtPnZpc2libGUuZXhwciA9IGRlcDsKLQotCQkJCS8qCi0JCQkJICogSGFu
ZGxlIHNlbGVjdHMgYW5kIGltcGxpZXMsIHdoaWNoIG1vZGlmeSB0aGUKLQkJCQkgKiBkZXBlbmRl
bmNpZXMgb2YgdGhlIHNlbGVjdGVkL2ltcGxpZWQgc3ltYm9sCi0JCQkJICovCi0JCQkJaWYgKHBy
b3AtPnR5cGUgPT0gUF9TRUxFQ1QpIHsKLQkJCQkJc3RydWN0IHN5bWJvbCAqZXMgPSBwcm9wX2dl
dF9zeW1ib2wocHJvcCk7Ci0JCQkJCWVzLT5yZXZfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKGVz
LT5yZXZfZGVwLmV4cHIsCi0JCQkJCQkJZXhwcl9hbGxvY19hbmQoZXhwcl9hbGxvY19zeW1ib2wo
bWVudS0+c3ltKSwgZXhwcl9jb3B5KGRlcCkpKTsKLQkJCQl9IGVsc2UgaWYgKHByb3AtPnR5cGUg
PT0gUF9JTVBMWSkgewotCQkJCQlzdHJ1Y3Qgc3ltYm9sICplcyA9IHByb3BfZ2V0X3N5bWJvbChw
cm9wKTsKLQkJCQkJZXMtPmltcGxpZWQuZXhwciA9IGV4cHJfYWxsb2Nfb3IoZXMtPmltcGxpZWQu
ZXhwciwKLQkJCQkJCQlleHByX2FsbG9jX2FuZChleHByX2FsbG9jX3N5bWJvbChtZW51LT5zeW0p
LCBleHByX2NvcHkoZGVwKSkpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChzeW0gJiYgc3lt
X2lzX2Nob2ljZShzeW0pKQotCQkJZXhwcl9mcmVlKHBhcmVudGRlcCk7Ci0KLQkJLyoKLQkJICog
UmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlbiBpbiB0aGUgc2FtZSBmYXNoaW9uIGJlZm9yZQot
CQkgKiBtb3Zpbmcgb24KLQkJICovCi0JCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsg
bWVudSA9IG1lbnUtPm5leHQpCi0JCQltZW51X2ZpbmFsaXplKG1lbnUpOwotCX0gZWxzZSBpZiAo
c3ltKSB7Ci0JCS8qCi0JCSAqIEF1dG9tYXRpYyBzdWJtZW51IGNyZWF0aW9uLiBJZiBzeW0gaXMg
YSBzeW1ib2wgYW5kIEEsIEIsIEMsCi0JCSAqIC4uLiBhcmUgY29uc2VjdXRpdmUgaXRlbXMgKHN5
bWJvbHMsIG1lbnVzLCBpZnMsIGV0Yy4pIHRoYXQKLQkJICogYWxsIGRlcGVuZCBvbiBzeW0sIHRo
ZW4gdGhlIGZvbGxvd2luZyBtZW51IHN0cnVjdHVyZSBpcwotCQkgKiBjcmVhdGVkOgotCQkgKgot
CQkgKglzeW0KLQkJICoJICstQQotCQkgKgkgKy1CCi0JCSAqCSArLUMKLQkJICoJIC4uLgotCQkg
KgotCQkgKiBUaGlzIGFsc28gd29ya3MgcmVjdXJzaXZlbHksIGdpdmluZyB0aGUgZm9sbG93aW5n
IHN0cnVjdHVyZQotCQkgKiBpZiBBIGlzIGEgc3ltYm9sIGFuZCBCIGRlcGVuZHMgb24gQToKLQkJ
ICoKLQkJICoJc3ltCi0JCSAqCSArLUEKLQkJICoJIHwgKy1CCi0JCSAqCSArLUMKLQkJICoJIC4u
LgotCQkgKi8KLQotCQliYXNlZGVwID0gcGFyZW50LT5wcm9tcHQgPyBwYXJlbnQtPnByb21wdC0+
dmlzaWJsZS5leHByIDogTlVMTDsKLQkJYmFzZWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShiYXNl
ZGVwLCBFX1VORVFVQUwsICZzeW1ib2xfbm8pOwotCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVf
ZHVwcyhleHByX3RyYW5zZm9ybShiYXNlZGVwKSk7Ci0KLQkJLyogRXhhbWluZSBjb25zZWN1dGl2
ZSBlbGVtZW50cyBhZnRlciBzeW0gKi8KLQkJbGFzdF9tZW51ID0gTlVMTDsKLQkJZm9yIChtZW51
ID0gcGFyZW50LT5uZXh0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgewotCQkJZGVwID0gbWVu
dS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIgOiBtZW51LT5kZXA7Ci0JCQlp
ZiAoIWV4cHJfY29udGFpbnNfc3ltYm9sKGRlcCwgc3ltKSkKLQkJCQkvKiBObyBkZXBlbmRlbmN5
LCBxdWl0ICovCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAsIHN5
bSkpCi0JCQkJLyogQWJzb2x1dGUgZGVwZW5kZW5jeSwgcHV0IGluIHN1Ym1lbnUgKi8KLQkJCQln
b3RvIG5leHQ7Ci0KLQkJCS8qCi0JCQkgKiBBbHNvIGNvbnNpZGVyIGl0IGEgZGVwZW5kZW5jeSBv
biBzeW0gaWYgb3VyCi0JCQkgKiBkZXBlbmRlbmNpZXMgY29udGFpbiBzeW0gYW5kIGFyZSBhICJz
dXBlcnNldCIgb2YKLQkJCSAqIHN5bSdzIGRlcGVuZGVuY2llcywgZS5nLiAnKHN5bSB8fCBRKSAm
JiBSJyB3aGVuIHN5bQotCQkJICogZGVwZW5kcyBvbiBSLgotCQkJICoKLQkJCSAqIE5vdGUgdGhh
dCAnUicgbWlnaHQgYmUgZnJvbSBhbiBlbmNsb3NpbmcgbWVudSBvciBpZiwKLQkJCSAqIG1ha2lu
ZyB0aGlzIGEgbW9yZSBjb21tb24gY2FzZSB0aGFuIGl0IG1pZ2h0IHNlZW0uCi0JCQkgKi8KLQkJ
CWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShkZXAsIEVfVU5FUVVBTCwgJnN5bWJvbF9ubyk7Ci0J
CQlkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGV4cHJfdHJhbnNmb3JtKGRlcCkpOwotCQkJZGVw
MiA9IGV4cHJfY29weShiYXNlZGVwKTsKLQkJCWV4cHJfZWxpbWluYXRlX2VxKCZkZXAsICZkZXAy
KTsKLQkJCWV4cHJfZnJlZShkZXApOwotCQkJaWYgKCFleHByX2lzX3llcyhkZXAyKSkgewotCQkJ
CS8qIE5vdCBzdXBlcnNldCwgcXVpdCAqLwotCQkJCWV4cHJfZnJlZShkZXAyKTsKLQkJCQlicmVh
azsKLQkJCX0KLQkJCS8qIFN1cGVyc2V0LCBwdXQgaW4gc3VibWVudSAqLwotCQkJZXhwcl9mcmVl
KGRlcDIpOwotCQluZXh0OgotCQkJbWVudV9maW5hbGl6ZShtZW51KTsKLQkJCW1lbnUtPnBhcmVu
dCA9IHBhcmVudDsKLQkJCWxhc3RfbWVudSA9IG1lbnU7Ci0JCX0KLQkJZXhwcl9mcmVlKGJhc2Vk
ZXApOwotCQlpZiAobGFzdF9tZW51KSB7Ci0JCQlwYXJlbnQtPmxpc3QgPSBwYXJlbnQtPm5leHQ7
Ci0JCQlwYXJlbnQtPm5leHQgPSBsYXN0X21lbnUtPm5leHQ7Ci0JCQlsYXN0X21lbnUtPm5leHQg
PSBOVUxMOwotCQl9Ci0KLQkJc3ltLT5kaXJfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKHN5bS0+
ZGlyX2RlcC5leHByLCBwYXJlbnQtPmRlcCk7Ci0JfQotCWZvciAobWVudSA9IHBhcmVudC0+bGlz
dDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsKLQkJaWYgKHN5bSAmJiBzeW1faXNfY2hvaWNl
KHN5bSkgJiYKLQkJICAgIG1lbnUtPnN5bSAmJiAhc3ltX2lzX2Nob2ljZV92YWx1ZShtZW51LT5z
eW0pKSB7Ci0JCQljdXJyZW50X2VudHJ5ID0gbWVudTsKLQkJCW1lbnUtPnN5bS0+ZmxhZ3MgfD0g
U1lNQk9MX0NIT0lDRVZBTDsKLQkJCWlmICghbWVudS0+cHJvbXB0KQotCQkJCW1lbnVfd2Fybiht
ZW51LCAiY2hvaWNlIHZhbHVlIG11c3QgaGF2ZSBhIHByb21wdCIpOwotCQkJZm9yIChwcm9wID0g
bWVudS0+c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgewotCQkJCWlmIChwcm9w
LT50eXBlID09IFBfREVGQVVMVCkKLQkJCQkJcHJvcF93YXJuKHByb3AsICJkZWZhdWx0cyBmb3Ig
Y2hvaWNlICIKLQkJCQkJCSAgInZhbHVlcyBub3Qgc3VwcG9ydGVkIik7Ci0JCQkJaWYgKHByb3At
Pm1lbnUgPT0gbWVudSkKLQkJCQkJY29udGludWU7Ci0JCQkJaWYgKHByb3AtPnR5cGUgPT0gUF9Q
Uk9NUFQgJiYKLQkJCQkgICAgcHJvcC0+bWVudS0+cGFyZW50LT5zeW0gIT0gc3ltKQotCQkJCQlw
cm9wX3dhcm4ocHJvcCwgImNob2ljZSB2YWx1ZSB1c2VkIG91dHNpZGUgaXRzIGNob2ljZSBncm91
cCIpOwotCQkJfQotCQkJLyogTm9uLXRyaXN0YXRlIGNob2ljZSB2YWx1ZXMgb2YgdHJpc3RhdGUg
Y2hvaWNlcyBtdXN0Ci0JCQkgKiBkZXBlbmQgb24gdGhlIGNob2ljZSBiZWluZyBzZXQgdG8gWS4g
VGhlIGNob2ljZQotCQkJICogdmFsdWVzJyBkZXBlbmRlbmNpZXMgd2VyZSBwcm9wYWdhdGVkIHRv
IHRoZWlyCi0JCQkgKiBwcm9wZXJ0aWVzIGFib3ZlLCBzbyB0aGUgY2hhbmdlIGhlcmUgbXVzdCBi
ZSByZS0KLQkJCSAqIHByb3BhZ2F0ZWQuCi0JCQkgKi8KLQkJCWlmIChzeW0tPnR5cGUgPT0gU19U
UklTVEFURSAmJiBtZW51LT5zeW0tPnR5cGUgIT0gU19UUklTVEFURSkgewotCQkJCWJhc2VkZXAg
PSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltLCAmc3ltYm9sX3llcyk7Ci0JCQkJbWVudS0+
ZGVwID0gZXhwcl9hbGxvY19hbmQoYmFzZWRlcCwgbWVudS0+ZGVwKTsKLQkJCQlmb3IgKHByb3Ag
PSBtZW51LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7Ci0JCQkJCWlmIChw
cm9wLT5tZW51ICE9IG1lbnUpCi0JCQkJCQljb250aW51ZTsKLQkJCQkJcHJvcC0+dmlzaWJsZS5l
eHByID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KGJhc2VkZXApLAotCQkJCQkJCQkJICAgIHBy
b3AtPnZpc2libGUuZXhwcik7Ci0JCQkJfQotCQkJfQotCQkJbWVudV9hZGRfc3ltYm9sKFBfQ0hP
SUNFLCBzeW0sIE5VTEwpOwotCQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKLQkJ
CWZvciAoZXAgPSAmcHJvcC0+ZXhwcjsgKmVwOyBlcCA9ICYoKmVwKS0+bGVmdC5leHByKQotCQkJ
CTsKLQkJCSplcCA9IGV4cHJfYWxsb2Nfb25lKEVfTElTVCwgTlVMTCk7Ci0JCQkoKmVwKS0+cmln
aHQuc3ltID0gbWVudS0+c3ltOwotCQl9Ci0KLQkJLyoKLQkJICogVGhpcyBjb2RlIHNlcnZlcyB0
d28gcHVycG9zZXM6Ci0JCSAqCi0JCSAqICgxKSBGbGF0dGVuaW5nICdpZicgYmxvY2tzLCB3aGlj
aCBkbyBub3Qgc3BlY2lmeSBhIHN1Ym1lbnUKLQkJICogICAgIGFuZCBvbmx5IGFkZCBkZXBlbmRl
bmNpZXMuCi0JCSAqCi0JCSAqICAgICAoQXV0b21hdGljIHN1Ym1lbnUgY3JlYXRpb24gbWlnaHQg
c3RpbGwgY3JlYXRlIGEgc3VibWVudQotCQkgKiAgICAgZnJvbSBhbiAnaWYnIGJlZm9yZSB0aGlz
IGNvZGUgcnVucy4pCi0JCSAqCi0JCSAqICgyKSAiVW5kb2luZyIgYW55IGF1dG9tYXRpYyBzdWJt
ZW51cyBjcmVhdGVkIGVhcmxpZXIgYmVsb3cKLQkJICogICAgIHByb21wdGxlc3Mgc3ltYm9scy4K
LQkJICoKLQkJICogQmVmb3JlOgotCQkgKgotCQkgKglBCi0JCSAqCWlmIC4uLiAob3IgcHJvbXB0
bGVzcyBzeW1ib2wpCi0JCSAqCSArLUIKLQkJICoJICstQwotCQkgKglECi0JCSAqCi0JCSAqIEFm
dGVyOgotCQkgKgotCQkgKglBCi0JCSAqCWlmIC4uLiAob3IgcHJvbXB0bGVzcyBzeW1ib2wpCi0J
CSAqCUIKLQkJICoJQwotCQkgKglECi0JCSAqLwotCQlpZiAobWVudS0+bGlzdCAmJiAoIW1lbnUt
PnByb21wdCB8fCAhbWVudS0+cHJvbXB0LT50ZXh0KSkgewotCQkJZm9yIChsYXN0X21lbnUgPSBt
ZW51LT5saXN0OyA7IGxhc3RfbWVudSA9IGxhc3RfbWVudS0+bmV4dCkgewotCQkJCWxhc3RfbWVu
dS0+cGFyZW50ID0gcGFyZW50OwotCQkJCWlmICghbGFzdF9tZW51LT5uZXh0KQotCQkJCQlicmVh
azsKLQkJCX0KLQkJCWxhc3RfbWVudS0+bmV4dCA9IG1lbnUtPm5leHQ7Ci0JCQltZW51LT5uZXh0
ID0gbWVudS0+bGlzdDsKLQkJCW1lbnUtPmxpc3QgPSBOVUxMOwotCQl9Ci0JfQotCi0JaWYgKHN5
bSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV0FSTkVEKSkgewotCQlpZiAoc3ltLT50eXBlID09
IFNfVU5LTk9XTikKLQkJCW1lbnVfd2FybihwYXJlbnQsICJjb25maWcgc3ltYm9sIGRlZmluZWQg
d2l0aG91dCB0eXBlIik7Ci0KLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiAhcGFyZW50LT5w
cm9tcHQpCi0JCQltZW51X3dhcm4ocGFyZW50LCAiY2hvaWNlIG11c3QgaGF2ZSBhIHByb21wdCIp
OwotCi0JCS8qIENoZWNrIHByb3BlcnRpZXMgY29ubmVjdGVkIHRvIHRoaXMgc3ltYm9sICovCi0J
CXN5bV9jaGVja19wcm9wKHN5bSk7Ci0JCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dBUk5FRDsKLQl9
Ci0KLQkvKgotCSAqIEZvciBub24tb3B0aW9uYWwgY2hvaWNlcywgYWRkIGEgcmV2ZXJzZSBkZXBl
bmRlbmN5IChjb3JyZXNwb25kaW5nIHRvCi0JICogYSBzZWxlY3QpIG9mICc8dmlzaWJpbGl0eT4g
JiYgbScuIFRoaXMgcHJldmVudHMgdGhlIHVzZXIgZnJvbQotCSAqIHNldHRpbmcgdGhlIGNob2lj
ZSBtb2RlIHRvICduJyB3aGVuIHRoZSBjaG9pY2UgaXMgdmlzaWJsZS4KLQkgKgotCSAqIFRoaXMg
d291bGQgYWxzbyB3b3JrIGZvciBub24tY2hvaWNlIHN5bWJvbHMsIGJ1dCBvbmx5IG5vbi1vcHRp
b25hbAotCSAqIGNob2ljZXMgY2xlYXIgU1lNQk9MX09QVElPTkFMIGFzIG9mIHdyaXRpbmcuIENo
b2ljZXMgYXJlIGltcGxlbWVudGVkCi0JICogYXMgYSB0eXBlIG9mIHN5bWJvbC4KLQkgKi8KLQlp
ZiAoc3ltICYmICFzeW1faXNfb3B0aW9uYWwoc3ltKSAmJiBwYXJlbnQtPnByb21wdCkgewotCQlz
eW0tPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5yZXZfZGVwLmV4cHIsCi0JCQkJ
ZXhwcl9hbGxvY19hbmQocGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwciwKLQkJCQkJZXhwcl9h
bGxvY19zeW1ib2woJnN5bWJvbF9tb2QpKSk7Ci0JfQotfQotCi1ib29sIG1lbnVfaGFzX3Byb21w
dChzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQlpZiAoIW1lbnUtPnByb21wdCkKLQkJcmV0dXJuIGZh
bHNlOwotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogRGV0ZXJtaW5lIGlmIGEgbWVudSBpcyBl
bXB0eS4KLSAqIEEgbWVudSBpcyBjb25zaWRlcmVkIGVtcHR5IGlmIGl0IGNvbnRhaW5zIG5vIG9y
IG9ubHkKLSAqIGludmlzaWJsZSBlbnRyaWVzLgotICovCi1ib29sIG1lbnVfaXNfZW1wdHkoc3Ry
dWN0IG1lbnUgKm1lbnUpCi17Ci0Jc3RydWN0IG1lbnUgKmNoaWxkOwotCi0JZm9yIChjaGlsZCA9
IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7Ci0JCWlmIChtZW51X2lz
X3Zpc2libGUoY2hpbGQpKQotCQkJcmV0dXJuKGZhbHNlKTsKLQl9Ci0JcmV0dXJuKHRydWUpOwot
fQotCi1ib29sIG1lbnVfaXNfdmlzaWJsZShzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQlzdHJ1Y3Qg
bWVudSAqY2hpbGQ7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCXRyaXN0YXRlIHZpc2libGU7Ci0K
LQlpZiAoIW1lbnUtPnByb21wdCkKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKG1lbnUtPnZpc2li
aWxpdHkpIHsKLQkJaWYgKGV4cHJfY2FsY192YWx1ZShtZW51LT52aXNpYmlsaXR5KSA9PSBubykK
LQkJCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlzeW0gPSBtZW51LT5zeW07Ci0JaWYgKHN5bSkgewot
CQlzeW1fY2FsY192YWx1ZShzeW0pOwotCQl2aXNpYmxlID0gbWVudS0+cHJvbXB0LT52aXNpYmxl
LnRyaTsKLQl9IGVsc2UKLQkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+dmlzaWJsZS50cmkgPSBl
eHByX2NhbGNfdmFsdWUobWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIpOwotCi0JaWYgKHZpc2li
bGUgIT0gbm8pCi0JCXJldHVybiB0cnVlOwotCi0JaWYgKCFzeW0gfHwgc3ltX2dldF90cmlzdGF0
ZV92YWx1ZShtZW51LT5zeW0pID09IG5vKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlmb3IgKGNoaWxk
ID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKLQkJaWYgKG1lbnVf
aXNfdmlzaWJsZShjaGlsZCkpIHsKLQkJCWlmIChzeW0pCi0JCQkJc3ltLT5mbGFncyB8PSBTWU1C
T0xfREVGX1VTRVI7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCXJldHVybiBmYWxzZTsK
LX0KLQotY29uc3QgY2hhciAqbWVudV9nZXRfcHJvbXB0KHN0cnVjdCBtZW51ICptZW51KQotewot
CWlmIChtZW51LT5wcm9tcHQpCi0JCXJldHVybiBtZW51LT5wcm9tcHQtPnRleHQ7Ci0JZWxzZSBp
ZiAobWVudS0+c3ltKQotCQlyZXR1cm4gbWVudS0+c3ltLT5uYW1lOwotCXJldHVybiBOVUxMOwot
fQotCi1zdHJ1Y3QgbWVudSAqbWVudV9nZXRfcm9vdF9tZW51KHN0cnVjdCBtZW51ICptZW51KQot
ewotCXJldHVybiAmcm9vdG1lbnU7Ci19Ci0KLXN0cnVjdCBtZW51ICptZW51X2dldF9wYXJlbnRf
bWVudShzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQllbnVtIHByb3BfdHlwZSB0eXBlOwotCi0JZm9y
ICg7IG1lbnUgIT0gJnJvb3RtZW51OyBtZW51ID0gbWVudS0+cGFyZW50KSB7Ci0JCXR5cGUgPSBt
ZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiAwOwotCQlpZiAodHlwZSA9PSBQX01F
TlUpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIG1lbnU7Ci19Ci0KLWJvb2wgbWVudV9oYXNfaGVs
cChzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQlyZXR1cm4gbWVudS0+aGVscCAhPSBOVUxMOwotfQot
Ci1jb25zdCBjaGFyICptZW51X2dldF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQotewotCWlmICht
ZW51LT5oZWxwKQotCQlyZXR1cm4gbWVudS0+aGVscDsKLQllbHNlCi0JCXJldHVybiAiIjsKLX0K
LQotc3RhdGljIHZvaWQgZ2V0X3Byb21wdF9zdHIoc3RydWN0IGdzdHIgKnIsIHN0cnVjdCBwcm9w
ZXJ0eSAqcHJvcCwKLQkJCSAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCi17Ci0JaW50IGksIGo7
Ci0Jc3RydWN0IG1lbnUgKnN1Ym1lbnVbOF0sICptZW51LCAqbG9jYXRpb24gPSBOVUxMOwotCXN0
cnVjdCBqdW1wX2tleSAqanVtcCA9IE5VTEw7Ci0KLQlzdHJfcHJpbnRmKHIsICJQcm9tcHQ6ICVz
XG4iLCBwcm9wLT50ZXh0KTsKLQltZW51ID0gcHJvcC0+bWVudS0+cGFyZW50OwotCWZvciAoaSA9
IDA7IG1lbnUgIT0gJnJvb3RtZW51ICYmIGkgPCA4OyBtZW51ID0gbWVudS0+cGFyZW50KSB7Ci0J
CWJvb2wgYWNjZXNzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShtZW51KTsKLQotCQlzdWJtZW51W2kr
K10gPSBtZW51OwotCQlpZiAobG9jYXRpb24gPT0gTlVMTCAmJiBhY2Nlc3NpYmxlKQotCQkJbG9j
YXRpb24gPSBtZW51OwotCX0KLQlpZiAoaGVhZCAmJiBsb2NhdGlvbikgewotCQlqdW1wID0geG1h
bGxvYyhzaXplb2Yoc3RydWN0IGp1bXBfa2V5KSk7Ci0KLQkJaWYgKG1lbnVfaXNfdmlzaWJsZShw
cm9wLT5tZW51KSkgewotCQkJLyoKLQkJCSAqIFRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSB0byBw
dXQgdGhlIGhpbnQgYXQgdGhlCi0JCQkgKiBiZWdpbm5pbmcgb2YgdGhlICJQcm9tcHQiIGxpbmUu
IFB1dCB0aGUgaGludCBvbiB0aGUKLQkJCSAqIGxhc3QgIkxvY2F0aW9uIiBsaW5lIGV2ZW4gd2hl
biBpdCB3b3VsZCBiZWxvbmcgb24KLQkJCSAqIHRoZSBmb3JtZXIuCi0JCQkgKi8KLQkJCWp1bXAt
PnRhcmdldCA9IHByb3AtPm1lbnU7Ci0JCX0gZWxzZQotCQkJanVtcC0+dGFyZ2V0ID0gbG9jYXRp
b247Ci0KLQkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpCi0JCQlqdW1wLT5pbmRleCA9IDA7Ci0JCWVs
c2UKLQkJCWp1bXAtPmluZGV4ID0gbGlzdF9lbnRyeShoZWFkLT5wcmV2LCBzdHJ1Y3QganVtcF9r
ZXksCi0JCQkJCQkgZW50cmllcyktPmluZGV4ICsgMTsKLQotCQlsaXN0X2FkZF90YWlsKCZqdW1w
LT5lbnRyaWVzLCBoZWFkKTsKLQl9Ci0KLQlpZiAoaSA+IDApIHsKLQkJc3RyX3ByaW50ZihyLCAi
ICBMb2NhdGlvbjpcbiIpOwotCQlmb3IgKGogPSA0OyAtLWkgPj0gMDsgaiArPSAyKSB7Ci0JCQlt
ZW51ID0gc3VibWVudVtpXTsKLQkJCWlmIChqdW1wICYmIG1lbnUgPT0gbG9jYXRpb24pCi0JCQkJ
anVtcC0+b2Zmc2V0ID0gc3RybGVuKHItPnMpOwotCQkJc3RyX3ByaW50ZihyLCAiJSpjLT4gJXMi
LCBqLCAnICcsCi0JCQkJICAgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsKLQkJCWlmIChtZW51LT5z
eW0pIHsKLQkJCQlzdHJfcHJpbnRmKHIsICIgKCVzIFs9JXNdKSIsIG1lbnUtPnN5bS0+bmFtZSA/
Ci0JCQkJCW1lbnUtPnN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCi0JCQkJCXN5bV9nZXRfc3RyaW5n
X3ZhbHVlKG1lbnUtPnN5bSkpOwotCQkJfQotCQkJc3RyX2FwcGVuZChyLCAiXG4iKTsKLQkJfQot
CX0KLX0KLQotLyoKLSAqIGdldCBwcm9wZXJ0eSBvZiB0eXBlIFBfU1lNQk9MCi0gKi8KLXN0YXRp
YyBzdHJ1Y3QgcHJvcGVydHkgKmdldF9zeW1ib2xfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17
Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wID0gTlVMTDsKLQotCWZvcl9hbGxfcHJvcGVydGllcyhz
eW0sIHByb3AsIFBfU1lNQk9MKQotCQlicmVhazsKLQlyZXR1cm4gcHJvcDsKLX0KLQotc3RhdGlj
IHZvaWQgZ2V0X3N5bWJvbF9wcm9wc19zdHIoc3RydWN0IGdzdHIgKnIsIHN0cnVjdCBzeW1ib2wg
KnN5bSwKLQkJCQkgZW51bSBwcm9wX3R5cGUgdG9rLCBjb25zdCBjaGFyICpwcmVmaXgpCi17Ci0J
Ym9vbCBoaXQgPSBmYWxzZTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0KLQlmb3JfYWxsX3By
b3BlcnRpZXMoc3ltLCBwcm9wLCB0b2spIHsKLQkJaWYgKCFoaXQpIHsKLQkJCXN0cl9hcHBlbmQo
ciwgcHJlZml4KTsKLQkJCWhpdCA9IHRydWU7Ci0JCX0gZWxzZQotCQkJc3RyX3ByaW50ZihyLCAi
ICYmICIpOwotCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7Ci0JfQotCWlmIChoaXQp
Ci0JCXN0cl9hcHBlbmQociwgIlxuIik7Ci19Ci0KLS8qCi0gKiBoZWFkIGlzIG9wdGlvbmFsIGFu
ZCBtYXkgYmUgTlVMTAotICovCi1zdGF0aWMgdm9pZCBnZXRfc3ltYm9sX3N0cihzdHJ1Y3QgZ3N0
ciAqciwgc3RydWN0IHN5bWJvbCAqc3ltLAotCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkK
LXsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0KLQlpZiAoc3ltICYmIHN5bS0+bmFtZSkgewot
CQlzdHJfcHJpbnRmKHIsICJTeW1ib2w6ICVzIFs9JXNdXG4iLCBzeW0tPm5hbWUsCi0JCQkgICBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKLQkJc3RyX3ByaW50ZihyLCAiVHlwZSAgOiAlc1xu
Iiwgc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKLQkJaWYgKHN5bS0+dHlwZSA9PSBTX0lOVCB8
fCBzeW0tPnR5cGUgPT0gU19IRVgpIHsKLQkJCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3Byb3Aoc3lt
KTsKLQkJCWlmIChwcm9wKSB7Ci0JCQkJc3RyX3ByaW50ZihyLCAiUmFuZ2UgOiAiKTsKLQkJCQll
eHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7Ci0JCQkJc3RyX2FwcGVuZChyLCAiXG4iKTsK
LQkJCX0KLQkJfQotCX0KLQlmb3JfYWxsX3Byb21wdHMoc3ltLCBwcm9wKQotCQlnZXRfcHJvbXB0
X3N0cihyLCBwcm9wLCBoZWFkKTsKLQotCXByb3AgPSBnZXRfc3ltYm9sX3Byb3Aoc3ltKTsKLQlp
ZiAocHJvcCkgewotCQlzdHJfcHJpbnRmKHIsICIgIERlZmluZWQgYXQgJXM6JWRcbiIsIHByb3At
Pm1lbnUtPmZpbGUtPm5hbWUsCi0JCQlwcm9wLT5tZW51LT5saW5lbm8pOwotCQlpZiAoIWV4cHJf
aXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKLQkJCXN0cl9hcHBlbmQociwgIiAgRGVwZW5k
cyBvbjogIik7Ci0JCQlleHByX2dzdHJfcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCByKTsKLQkJ
CXN0cl9hcHBlbmQociwgIlxuIik7Ci0JCX0KLQl9Ci0KLQlnZXRfc3ltYm9sX3Byb3BzX3N0cihy
LCBzeW0sIFBfU0VMRUNULCAiICBTZWxlY3RzOiAiKTsKLQlpZiAoc3ltLT5yZXZfZGVwLmV4cHIp
IHsKLQkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwgciwgeWVzLCAi
ICBTZWxlY3RlZCBieSBbeV06XG4iKTsKLQkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJl
dl9kZXAuZXhwciwgciwgbW9kLCAiICBTZWxlY3RlZCBieSBbbV06XG4iKTsKLQkJZXhwcl9nc3Ry
X3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwgciwgbm8sICIgIFNlbGVjdGVkIGJ5IFtu
XTpcbiIpOwotCX0KLQotCWdldF9zeW1ib2xfcHJvcHNfc3RyKHIsIHN5bSwgUF9JTVBMWSwgIiAg
SW1wbGllczogIik7Ci0JaWYgKHN5bS0+aW1wbGllZC5leHByKSB7Ci0JCWV4cHJfZ3N0cl9wcmlu
dF9yZXZkZXAoc3ltLT5pbXBsaWVkLmV4cHIsIHIsIHllcywgIiAgSW1wbGllZCBieSBbeV06XG4i
KTsKLQkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPmltcGxpZWQuZXhwciwgciwgbW9kLCAi
ICBJbXBsaWVkIGJ5IFttXTpcbiIpOwotCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+aW1w
bGllZC5leHByLCByLCBubywgIiAgSW1wbGllZCBieSBbbl06XG4iKTsKLQl9Ci0KLQlzdHJfYXBw
ZW5kKHIsICJcblxuIik7Ci19Ci0KLXN0cnVjdCBnc3RyIGdldF9yZWxhdGlvbnNfc3RyKHN0cnVj
dCBzeW1ib2wgKipzeW1fYXJyLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXN0cnVjdCBz
eW1ib2wgKnN5bTsKLQlzdHJ1Y3QgZ3N0ciByZXMgPSBzdHJfbmV3KCk7Ci0JaW50IGk7Ci0KLQlm
b3IgKGkgPSAwOyBzeW1fYXJyICYmIChzeW0gPSBzeW1fYXJyW2ldKTsgaSsrKQotCQlnZXRfc3lt
Ym9sX3N0cigmcmVzLCBzeW0sIGhlYWQpOwotCWlmICghaSkKLQkJc3RyX2FwcGVuZCgmcmVzLCAi
Tm8gbWF0Y2hlcyBmb3VuZC5cbiIpOwotCXJldHVybiByZXM7Ci19Ci0KLQotdm9pZCBtZW51X2dl
dF9leHRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IGdzdHIgKmhlbHApCi17Ci0Jc3Ry
dWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOwotCWNvbnN0IGNoYXIgKmhlbHBfdGV4dCA9IG5v
aGVscF90ZXh0OwotCi0JaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpIHsKLQkJaWYgKHN5bS0+bmFt
ZSkKLQkJCXN0cl9wcmludGYoaGVscCwgIiVzJXM6XG5cbiIsIENPTkZJR18sIHN5bS0+bmFtZSk7
Ci0JCWhlbHBfdGV4dCA9IG1lbnVfZ2V0X2hlbHAobWVudSk7Ci0JfQotCXN0cl9wcmludGYoaGVs
cCwgIiVzXG4iLCBoZWxwX3RleHQpOwotCWlmIChzeW0pCi0JCWdldF9zeW1ib2xfc3RyKGhlbHAs
IHN5bSwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L21lcmdlX2Nv
bmZpZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29uZmlnLnNoCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDc1NQppbmRleCBkOTI0YzUxLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbWVyZ2VfY29uZmlnLnNoCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLSMh
L2Jpbi9zaAotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotIwotIyAgbWVyZ2Vf
Y29uZmlnLnNoIC0gVGFrZXMgYSBsaXN0IG9mIGNvbmZpZyBmcmFnbWVudCB2YWx1ZXMsIGFuZCBt
ZXJnZXMKLSMgIHRoZW0gb25lIGJ5IG9uZS4gUHJvdmlkZXMgd2FybmluZ3Mgb24gb3ZlcnJpZGRl
biB2YWx1ZXMsIGFuZCBzcGVjaWZpZWQKLSMgIHZhbHVlcyB0aGF0IGRpZCBub3QgbWFrZSBpdCB0
byB0aGUgcmVzdWx0aW5nIC5jb25maWcgZmlsZSAoZHVlIHRvIG1pc3NlZAotIyAgZGVwZW5kZW5j
aWVzIG9yIGNvbmZpZyBzeW1ib2wgcmVtb3ZhbCkuCi0jCi0jICBQb3J0aW9ucyByZXVzZWQgZnJv
bSBrY29uZl9jaGVjayBhbmQgZ2VuZXJhdGVfY2ZnOgotIyAgaHR0cDovL2dpdC55b2N0b3Byb2pl
Y3Qub3JnL2NnaXQvY2dpdC5jZ2kveW9jdG8ta2VybmVsLXRvb2xzL3RyZWUvdG9vbHMva2NvbmZf
Y2hlY2sKLSMgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3lvY3Rv
LWtlcm5lbC10b29scy90cmVlL3Rvb2xzL2dlbmVyYXRlX2NmZwotIwotIyAgQ29weXJpZ2h0IChj
KSAyMDA5LTIwMTAgV2luZCBSaXZlciBTeXN0ZW1zLCBJbmMuCi0jICBDb3B5cmlnaHQgMjAxMSBM
aW5hcm8KLQotY2xlYW5fdXAoKSB7Ci0Jcm0gLWYgJFRNUF9GSUxFCi0Jcm0gLWYgJE1FUkdFX0ZJ
TEUKLQlleGl0Ci19Ci10cmFwIGNsZWFuX3VwIEhVUCBJTlQgVEVSTQotCi11c2FnZSgpIHsKLQll
Y2hvICJVc2FnZTogJDAgW09QVElPTlNdIFtDT05GSUcgWy4uLl1dIgotCWVjaG8gIiAgLWggICAg
ZGlzcGxheSB0aGlzIGhlbHAgdGV4dCIKLQllY2hvICIgIC1tICAgIG9ubHkgbWVyZ2UgdGhlIGZy
YWdtZW50cywgZG8gbm90IGV4ZWN1dGUgdGhlIG1ha2UgY29tbWFuZCIKLQllY2hvICIgIC1uICAg
IHVzZSBhbGxub2NvbmZpZyBpbnN0ZWFkIG9mIGFsbGRlZmNvbmZpZyIKLQllY2hvICIgIC1yICAg
IGxpc3QgcmVkdW5kYW50IGVudHJpZXMgd2hlbiBtZXJnaW5nIGZyYWdtZW50cyIKLQllY2hvICIg
IC15ICAgIG1ha2UgYnVpbHRpbiBoYXZlIHByZWNlZGVuY2Ugb3ZlciBtb2R1bGVzIgotCWVjaG8g
IiAgLU8gICAgZGlyIHRvIHB1dCBnZW5lcmF0ZWQgb3V0cHV0IGZpbGVzLiAgQ29uc2lkZXIgc2V0
dGluZyBcJEtDT05GSUdfQ09ORklHIGluc3RlYWQuIgotCWVjaG8KLQllY2hvICJVc2VkIHByZWZp
eDogJyRDT05GSUdfUFJFRklYJy4gWW91IGNhbiByZWRlZmluZSBpdCB3aXRoIFwkQ09ORklHXyBl
bnZpcm9ubWVudCB2YXJpYWJsZS4iCi19Ci0KLVJVTk1BS0U9dHJ1ZQotQUxMVEFSR0VUPWFsbGRl
ZmNvbmZpZwotV0FSTlJFRFVOPWZhbHNlCi1CVUlMVElOPWZhbHNlCi1PVVRQVVQ9LgotQ09ORklH
X1BSRUZJWD0ke0NPTkZJR18tQ09ORklHX30KLQotd2hpbGUgdHJ1ZTsgZG8KLQljYXNlICQxIGlu
Ci0JIi1uIikKLQkJQUxMVEFSR0VUPWFsbG5vY29uZmlnCi0JCXNoaWZ0Ci0JCWNvbnRpbnVlCi0J
CTs7Ci0JIi1tIikKLQkJUlVOTUFLRT1mYWxzZQotCQlzaGlmdAotCQljb250aW51ZQotCQk7Owot
CSItaCIpCi0JCXVzYWdlCi0JCWV4aXQKLQkJOzsKLQkiLXIiKQotCQlXQVJOUkVEVU49dHJ1ZQot
CQlzaGlmdAotCQljb250aW51ZQotCQk7OwotCSIteSIpCi0JCUJVSUxUSU49dHJ1ZQotCQlzaGlm
dAotCQljb250aW51ZQotCQk7OwotCSItTyIpCi0JCWlmIFsgLWQgJDIgXTt0aGVuCi0JCQlPVVRQ
VVQ9JChlY2hvICQyIHwgc2VkICdzL1wvKiQvLycpCi0JCWVsc2UKLQkJCWVjaG8gIm91dHB1dCBk
aXJlY3RvcnkgJDIgZG9lcyBub3QgZXhpc3QiIDE+JjIKLQkJCWV4aXQgMQotCQlmaQotCQlzaGlm
dCAyCi0JCWNvbnRpbnVlCi0JCTs7Ci0JKikKLQkJYnJlYWsKLQkJOzsKLQllc2FjCi1kb25lCi0K
LWlmIFsgIiQjIiAtbHQgMSBdIDsgdGhlbgotCXVzYWdlCi0JZXhpdAotZmkKLQotaWYgWyAteiAi
JEtDT05GSUdfQ09ORklHIiBdOyB0aGVuCi0JaWYgWyAiJE9VVFBVVCIgIT0gLiBdOyB0aGVuCi0J
CUtDT05GSUdfQ09ORklHPSQocmVhZGxpbmsgLW0gLS0gIiRPVVRQVVQvLmNvbmZpZyIpCi0JZWxz
ZQotCQlLQ09ORklHX0NPTkZJRz0uY29uZmlnCi0JZmkKLWZpCi0KLUlOSVRGSUxFPSQxCi1zaGlm
dDsKLQotaWYgWyAhIC1yICIkSU5JVEZJTEUiIF07IHRoZW4KLQllY2hvICJUaGUgYmFzZSBmaWxl
ICckSU5JVEZJTEUnIGRvZXMgbm90IGV4aXN0LiAgRXhpdC4iID4mMgotCWV4aXQgMQotZmkKLQot
TUVSR0VfTElTVD0kKgotU0VEX0NPTkZJR19FWFAxPSJzL15cKCR7Q09ORklHX1BSRUZJWH1bYS16
QS1aMC05X10qXCk9LiovXDEvcCIKLVNFRF9DT05GSUdfRVhQMj0icy9eIyBcKCR7Q09ORklHX1BS
RUZJWH1bYS16QS1aMC05X10qXCkgaXMgbm90IHNldCQvXDEvcCIKLQotVE1QX0ZJTEU9JChta3Rl
bXAgLi8udG1wLmNvbmZpZy5YWFhYWFhYWFhYKQotTUVSR0VfRklMRT0kKG1rdGVtcCAuLy5tZXJn
ZV90bXAuY29uZmlnLlhYWFhYWFhYWFgpCi0KLWVjaG8gIlVzaW5nICRJTklURklMRSBhcyBiYXNl
IgotY2F0ICRJTklURklMRSA+ICRUTVBfRklMRQotCi0jIE1lcmdlIGZpbGVzLCBwcmludGluZyB3
YXJuaW5ncyBvbiBvdmVycmlkZGVuIHZhbHVlcwotZm9yIE9SSUdfTUVSR0VfRklMRSBpbiAkTUVS
R0VfTElTVCA7IGRvCi0JZWNobyAiTWVyZ2luZyAkT1JJR19NRVJHRV9GSUxFIgotCWlmIFsgISAt
ciAiJE9SSUdfTUVSR0VfRklMRSIgXTsgdGhlbgotCQllY2hvICJUaGUgbWVyZ2UgZmlsZSAnJE9S
SUdfTUVSR0VfRklMRScgZG9lcyBub3QgZXhpc3QuICBFeGl0LiIgPiYyCi0JCWV4aXQgMQotCWZp
Ci0JY2F0ICRPUklHX01FUkdFX0ZJTEUgPiAkTUVSR0VfRklMRQotCUNGR19MSVNUPSQoc2VkIC1u
IC1lICIkU0VEX0NPTkZJR19FWFAxIiAtZSAiJFNFRF9DT05GSUdfRVhQMiIgJE1FUkdFX0ZJTEUp
Ci0KLQlmb3IgQ0ZHIGluICRDRkdfTElTVCA7IGRvCi0JCWdyZXAgLXEgLXcgJENGRyAkVE1QX0ZJ
TEUgfHwgY29udGludWUKLQkJUFJFVl9WQUw9JChncmVwIC13ICRDRkcgJFRNUF9GSUxFKQotCQlO
RVdfVkFMPSQoZ3JlcCAtdyAkQ0ZHICRNRVJHRV9GSUxFKQotCQlCVUlMVElOX0ZMQUc9ZmFsc2UK
LQkJaWYgWyAiJEJVSUxUSU4iID0gInRydWUiIF0gJiYgWyAiJHtORVdfVkFMI0NPTkZJR18qPX0i
ID0gIm0iIF0gJiYgWyAiJHtQUkVWX1ZBTCNDT05GSUdfKj19IiA9ICJ5IiBdOyB0aGVuCi0JCQll
Y2hvIFByZXZpb3VzICB2YWx1ZTogJFBSRVZfVkFMCi0JCQllY2hvIE5ldyB2YWx1ZTogICAgICAg
JE5FV19WQUwKLQkJCWVjaG8gLXkgcGFzc2VkLCB3aWxsIG5vdCBkZW1vdGUgeSB0byBtCi0JCQll
Y2hvCi0JCQlCVUlMVElOX0ZMQUc9dHJ1ZQotCQllbGlmIFsgIngkUFJFVl9WQUwiICE9ICJ4JE5F
V19WQUwiIF0gOyB0aGVuCi0JCQllY2hvIFZhbHVlIG9mICRDRkcgaXMgcmVkZWZpbmVkIGJ5IGZy
YWdtZW50ICRPUklHX01FUkdFX0ZJTEU6Ci0JCQllY2hvIFByZXZpb3VzICB2YWx1ZTogJFBSRVZf
VkFMCi0JCQllY2hvIE5ldyB2YWx1ZTogICAgICAgJE5FV19WQUwKLQkJCWVjaG8KLQkJZWxpZiBb
ICIkV0FSTlJFRFVOIiA9ICJ0cnVlIiBdOyB0aGVuCi0JCQllY2hvIFZhbHVlIG9mICRDRkcgaXMg
cmVkdW5kYW50IGJ5IGZyYWdtZW50ICRPUklHX01FUkdFX0ZJTEU6Ci0JCWZpCi0JCWlmIFsgIiRC
VUlMVElOX0ZMQUciID0gImZhbHNlIiBdOyB0aGVuCi0JCQlzZWQgLWkgIi8kQ0ZHWyA9XS9kIiAk
VE1QX0ZJTEUKLQkJZWxzZQotCQkJc2VkIC1pICIvJENGR1sgPV0vZCIgJE1FUkdFX0ZJTEUKLQkJ
ZmkKLQlkb25lCi0JY2F0ICRNRVJHRV9GSUxFID4+ICRUTVBfRklMRQotZG9uZQotCi1pZiBbICIk
UlVOTUFLRSIgPSAiZmFsc2UiIF07IHRoZW4KLQljcCAtVCAtLSAiJFRNUF9GSUxFIiAiJEtDT05G
SUdfQ09ORklHIgotCWVjaG8gIiMiCi0JZWNobyAiIyBtZXJnZWQgY29uZmlndXJhdGlvbiB3cml0
dGVuIHRvICRLQ09ORklHX0NPTkZJRyAobmVlZHMgbWFrZSkiCi0JZWNobyAiIyIKLQljbGVhbl91
cAotCWV4aXQKLWZpCi0KLSMgSWYgd2UgaGF2ZSBhbiBvdXRwdXQgZGlyLCBzZXR1cCB0aGUgTz0g
YXJndW1lbnQsIG90aGVyd2lzZSBsZWF2ZQotIyBpdCBibGFuaywgc2luY2UgTz0uIHdpbGwgY3Jl
YXRlIGFuIHVubmVjZXNzYXJ5IC4vc291cmNlIHNvZnRsaW5rCi1PVVRQVVRfQVJHPSIiCi1pZiBb
ICIkT1VUUFVUIiAhPSAiLiIgXSA7IHRoZW4KLQlPVVRQVVRfQVJHPSJPPSRPVVRQVVQiCi1maQot
Ci0KLSMgVXNlIHRoZSBtZXJnZWQgZmlsZSBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yOgotIyBh
bGxkZWZjb25maWc6IEZpbGxzIGluIGFueSBtaXNzaW5nIHN5bWJvbHMgd2l0aCBLY29uZmlnIGRl
ZmF1bHQKLSMgYWxsbm9jb25maWc6IEZpbGxzIGluIGFueSBtaXNzaW5nIHN5bWJvbHMgd2l0aCAj
IENPTkZJR18qIGlzIG5vdCBzZXQKLW1ha2UgS0NPTkZJR19BTExDT05GSUc9JFRNUF9GSUxFICRP
VVRQVVRfQVJHICRBTExUQVJHRVQKLQotCi0jIENoZWNrIGFsbCBzcGVjaWZpZWQgY29uZmlnIHZh
bHVlcyB0b29rIChtaWdodCBoYXZlIG1pc3NlZC1kZXBlbmRlbmN5IGlzc3VlcykKLWZvciBDRkcg
aW4gJChzZWQgLW4gLWUgIiRTRURfQ09ORklHX0VYUDEiIC1lICIkU0VEX0NPTkZJR19FWFAyIiAk
VE1QX0ZJTEUpOyBkbwotCi0JUkVRVUVTVEVEX1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICRUTVBf
RklMRSkKLQlBQ1RVQUxfVkFMPSQoZ3JlcCAtdyAtZSAiJENGRyIgIiRLQ09ORklHX0NPTkZJRyIp
Ci0JaWYgWyAieCRSRVFVRVNURURfVkFMIiAhPSAieCRBQ1RVQUxfVkFMIiBdIDsgdGhlbgotCQll
Y2hvICJWYWx1ZSByZXF1ZXN0ZWQgZm9yICRDRkcgbm90IGluIGZpbmFsIC5jb25maWciCi0JCWVj
aG8gIlJlcXVlc3RlZCB2YWx1ZTogICRSRVFVRVNURURfVkFMIgotCQllY2hvICJBY3R1YWwgdmFs
dWU6ICAgICAkQUNUVUFMX1ZBTCIKLQkJZWNobyAiIgotCWZpCi1kb25lCi0KLWNsZWFuX3VwCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLWNmZy5zaCBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbmNvbmYtY2ZnLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDE1
NTllLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoCisrKyAv
ZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotIyEvYmluL3NoCi0jIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wCi0KLVBLRz0ibmN1cnNlc3cgbWVudXcgcGFuZWx3IgotUEtHMj0ibmN1
cnNlcyBtZW51IHBhbmVsIgotCi1pZiBbIC1uICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07
IHRoZW4KLQlpZiBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0c7IHRoZW4KLQkJZWNobyBjZmxhZ3M9
XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBLRylcIgotCQllY2hvIGxpYnM9XCIkKHBrZy1jb25m
aWcgLS1saWJzICRQS0cpXCIKLQkJZXhpdCAwCi0JZmkKLQotCWlmIHBrZy1jb25maWcgLS1leGlz
dHMgJFBLRzI7IHRoZW4KLQkJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBL
RzIpXCIKLQkJZWNobyBsaWJzPVwiJChwa2ctY29uZmlnIC0tbGlicyAkUEtHMilcIgotCQlleGl0
IDAKLQlmaQotZmkKLQotIyBDaGVjayB0aGUgZGVmYXVsdCBwYXRocyBpbiBjYXNlIHBrZy1jb25m
aWcgaXMgbm90IGluc3RhbGxlZC4KLSMgKEV2ZW4gaWYgaXQgaXMgaW5zdGFsbGVkLCBzb21lIGRp
c3RyaWJ1dGlvbnMgc3VjaCBhcyBvcGVuU1VTRSBjYW5ub3QKLSMgZmluZCBuY3Vyc2VzIGJ5IHBr
Zy1jb25maWcuKQotaWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cvbmN1cnNlcy5oIF07IHRo
ZW4KLQllY2hvIGNmbGFncz1cIi1EX0dOVV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3dc
IgotCWVjaG8gbGlicz1cIi1sbmN1cnNlc3cgLWxtZW51dyAtbHBhbmVsd1wiCi0JZXhpdCAwCi1m
aQotCi1pZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzL25jdXJzZXMuaCBdOyB0aGVuCi0JZWNo
byBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXNcIgotCWVjaG8g
bGlicz1cIi1sbmN1cnNlcyAtbG1lbnUgLWxwYW5lbFwiCi0JZXhpdCAwCi1maQotCi1pZiBbIC1m
IC91c3IvaW5jbHVkZS9uY3Vyc2VzLmggXTsgdGhlbgotCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NP
VVJDRVwiCi0JZWNobyBsaWJzPVwiLWxuY3Vyc2VzIC1sbWVudSAtbHBhbmVsXCIKLQlleGl0IDAK
LWZpCi0KLWVjaG8gPiYyICIqIgotZWNobyA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIG5jdXJz
ZXMgcGFja2FnZS4iCi1lY2hvID4mMiAiKiBJbnN0YWxsIG5jdXJzZXMgKG5jdXJzZXMtZGV2ZWwg
b3IgbGlibmN1cnNlcy1kZXYiCi1lY2hvID4mMiAiKiBkZXBlbmRpbmcgb24geW91ciBkaXN0cmli
dXRpb24pLiIKLWVjaG8gPiYyICIqIgotZXhpdCAxCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L25jb25mLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGQzZDkwOGMuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9uY29uZi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU1NSArMCwwIEBACi0vLyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIg
VHphY2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPgotICoKLSAqIERlcml2ZWQgZnJvbSBtZW51
Y29uZmlnLgotICovCi0jaWZuZGVmIF9HTlVfU09VUkNFCi0jZGVmaW5lIF9HTlVfU09VUkNFCi0j
ZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotI2luY2x1
ZGUgImxrYy5oIgotI2luY2x1ZGUgIm5jb25mLmgiCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLQotc3Rh
dGljIGNvbnN0IGNoYXIgbmNvbmZfZ2xvYmFsX2hlbHBbXSA9Ci0iSGVscCB3aW5kb3dzXG4iCi0i
LS0tLS0tLS0tLS0tXG4iCi0ibyAgR2xvYmFsIGhlbHA6ICBVbmxlc3MgaW4gYSBkYXRhIGVudHJ5
IHdpbmRvdywgcHJlc3NpbmcgPEYxPiB3aWxsIGdpdmUgXG4iCi0iICAgeW91IHRoZSBnbG9iYWwg
aGVscCB3aW5kb3csIHdoaWNoIHlvdSBhcmUganVzdCByZWFkaW5nLlxuIgotIlxuIgotIm8gIEEg
c2hvcnQgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIGhlbHAgaXMgYXZhaWxhYmxlIGJ5IHByZXNzaW5n
IDxGMz4uXG4iCi0iXG4iCi0ibyAgTG9jYWwgaGVscDogIFRvIGdldCBoZWxwIHJlbGF0ZWQgdG8g
dGhlIGN1cnJlbnQgbWVudSBlbnRyeSwgdXNlIGFueVxuIgotIiAgIG9mIDw/PiA8aD4sIG9yIGlm
IGluIGEgZGF0YSBlbnRyeSB3aW5kb3cgdGhlbiBwcmVzcyA8RjE+LlxuIgotIlxuIgotIlxuIgot
Ik1lbnUgZW50cmllc1xuIgotIi0tLS0tLS0tLS0tLVxuIgotIlRoaXMgaW50ZXJmYWNlIGxldHMg
eW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIgotImJ1
aWxkLiAgVW5pa3JhZnQgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBzZWxlY3RlZCBvciBkZXNlbGVj
dGVkLlxuIgotIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVjaW1hbCBv
ciBoZXhhZGVjaW1hbCBudW1iZXJzLlxuIgotIlxuIgotIk1lbnUgZW50cmllcyBiZWdpbm5pbmcg
d2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iCi0iICBbIF0g
IGNhbiBiZSBidWlsdCBpbiBvciByZW1vdmVkXG4iCi0iICA8ID4gIGNhbiBiZSBidWlsdCBpbiwg
bW9kdWxhcml6ZWQgb3IgcmVtb3ZlZFxuIgotIiAgeyB9ICBjYW4gYmUgYnVpbHQgaW4gb3IgbW9k
dWxhcml6ZWQsIGFyZSBzZWxlY3RlZCBieSBhbm90aGVyIGZlYXR1cmVcbiIKLSIgIC0gLSAgYXJl
IHNlbGVjdGVkIGJ5IGFub3RoZXIgZmVhdHVyZVxuIgotIiAgWFhYICBjYW5ub3QgYmUgc2VsZWN0
ZWQuICBTeW1ib2wgSW5mbyA8RjI+IHRlbGxzIHlvdSB3aHkuXG4iCi0iKiwgTSBvciB3aGl0ZXNw
YWNlIGluc2lkZSBicmFjZXMgbWVhbnMgdG8gYnVpbGQgaW4sIGJ1aWxkIGFzIGEgbW9kdWxlXG4i
Ci0ib3IgdG8gZXhjbHVkZSB0aGUgZmVhdHVyZSByZXNwZWN0aXZlbHkuXG4iCi0iXG4iCi0iVG8g
Y2hhbmdlIGFueSBvZiB0aGVzZSBmZWF0dXJlcywgaGlnaGxpZ2h0IGl0IHdpdGggdGhlIG1vdmVt
ZW50IGtleXNcbiIKLSJsaXN0ZWQgYmVsb3cgYW5kIHByZXNzIDx5PiB0byBidWlsZCBpdCBpbiwg
PG0+IHRvIG1ha2UgaXQgYSBtb2R1bGUgb3JcbiIKLSI8bj4gdG8gcmVtb3ZlIGl0LiAgWW91IG1h
eSBwcmVzcyB0aGUgPFNwYWNlPiBrZXkgdG8gY3ljbGUgdGhyb3VnaCB0aGVcbiIKLSJhdmFpbGFi
bGUgb3B0aW9ucy5cbiIKLSJcbiIKLSJBIHRyYWlsaW5nIFwiLS0tPlwiIGRlc2lnbmF0ZXMgYSBz
dWJtZW51LCBhIHRyYWlsaW5nIFwiLS0tLVwiIGFuXG4iCi0iZW1wdHkgc3VibWVudS5cbiIKLSJc
biIKLSJNZW51IG5hdmlnYXRpb24ga2V5c1xuIgotIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKLSJMaW5ld2lz
ZSB1cCAgICAgICAgICAgICAgICAgPFVwPlxuIgotIkxpbmV3aXNlIGRvd24gICAgICAgICAgICAg
ICA8RG93bj5cbiIKLSJQYWdld2lzZSB1cCAgICAgICAgICAgICAgICAgPFBhZ2UgVXA+XG4iCi0i
UGFnZXdpc2UgZG93biAgICAgICAgICAgICAgIDxQYWdlIERvd24+XG4iCi0iRmlyc3QgZW50cnkg
ICAgICAgICAgICAgICAgIDxIb21lPlxuIgotIkxhc3QgZW50cnkgICAgICAgICAgICAgICAgICA8
RW5kPlxuIgotIkVudGVyIGEgc3VibWVudSAgICAgICAgICAgICA8UmlnaHQ+ICA8RW50ZXI+XG4i
Ci0iR28gYmFjayB0byBwYXJlbnQgbWVudSAgICAgIDxMZWZ0PiAgIDxFc2M+ICA8RjU+XG4iCi0i
Q2xvc2UgYSBoZWxwIHdpbmRvdyAgICAgICAgIDxFbnRlcj4gIDxFc2M+ICA8RjU+XG4iCi0iQ2xv
c2UgZW50cnkgd2luZG93LCBhcHBseSAgIDxFbnRlcj5cbiIKLSJDbG9zZSBlbnRyeSB3aW5kb3cs
IGZvcmdldCAgPEVzYz4gIDxGNT5cbiIKLSJTdGFydCBpbmNyZW1lbnRhbCwgY2FzZS1pbnNlbnNp
dGl2ZSBzZWFyY2ggZm9yIFNUUklORyBpbiBtZW51IGVudHJpZXMsXG4iCi0iICAgIG5vIHJlZ2V4
IHN1cHBvcnQsIFNUUklORyBpcyBkaXNwbGF5ZWQgaW4gdXBwZXIgbGVmdCBjb3JuZXJcbiIKLSIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+U1RSSU5HXG4iCi0iICAgIFJlbW92ZSBsYXN0
IGNoYXJhY3RlciAgIDxCYWNrc3BhY2U+XG4iCi0iICAgIEp1bXAgdG8gbmV4dCBoaXQgICAgICAg
IDxEb3duPlxuIgotIiAgICBKdW1wIHRvIHByZXZpb3VzIGhpdCAgICA8VXA+XG4iCi0iRXhpdCBt
ZW51IHNlYXJjaCBtb2RlICAgICAgIDwvPiAgPEVzYz5cbiIKLSJTZWFyY2ggZm9yIGNvbmZpZ3Vy
YXRpb24gdmFyaWFibGVzIHdpdGggb3Igd2l0aG91dCBsZWFkaW5nIENPTkZJR19cbiIKLSIgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPEY4PlJlZ0V4cHI8RW50ZXI+XG4iCi0iVmVyYm9zZSBz
ZWFyY2ggaGVscCAgICAgICAgIDxGOD48RjE+XG4iCi0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotIlxuIgot
IlVubGVzcyBpbiBhIGRhdGEgZW50cnkgd2luZG93LCBrZXkgPDE+IG1heSBiZSB1c2VkIGluc3Rl
YWQgb2YgPEYxPixcbiIKLSI8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4iCi0iXG4iCi0iXG4i
Ci0iUmFkaW9saXN0IChDaG9pY2UgbGlzdClcbiIKLSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
IgotIlVzZSB0aGUgbW92ZW1lbnQga2V5cyBsaXN0ZWQgYWJvdmUgdG8gc2VsZWN0IHRoZSBvcHRp
b24geW91IHdpc2ggdG8gc2V0XG4iCi0iYW5kIHByZXNzIDxTcGFjZT4uXG4iCi0iXG4iCi0iXG4i
Ci0iRGF0YSBlbnRyeVxuIgotIi0tLS0tLS0tLS1cbiIKLSJFbnRlciB0aGUgcmVxdWVzdGVkIGlu
Zm9ybWF0aW9uIGFuZCBwcmVzcyA8RW50ZXI+LiAgSGV4YWRlY2ltYWwgdmFsdWVzXG4iCi0ibWF5
IGJlIGVudGVyZWQgd2l0aG91dCB0aGUgXCIweFwiIHByZWZpeC5cbiIKLSJcbiIKLSJcbiIKLSJU
ZXh0IEJveCAoSGVscCBXaW5kb3cpXG4iCi0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgotIlVz
ZSBtb3ZlbWVudCBrZXlzIGFzIGxpc3RlZCBpbiB0YWJsZSBhYm92ZS5cbiIKLSJcbiIKLSJQcmVz
cyBhbnkgb2YgPEVudGVyPiA8RXNjPiA8cT4gPEY1PiA8Rjk+IHRvIGV4aXQuXG4iCi0iXG4iCi0i
XG4iCi0iQWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXNcbiIKLSItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLVxuIgotIm5jb25maWcgc3VwcG9ydHMgc3dpdGNoaW5nIGJldHdlZW4gZGlm
ZmVyZW50IGNvbmZpZ3VyYXRpb25zLlxuIgotIlByZXNzIDxGNj4gdG8gc2F2ZSB5b3VyIGN1cnJl
bnQgY29uZmlndXJhdGlvbi4gIFByZXNzIDxGNz4gYW5kIGVudGVyXG4iCi0iYSBmaWxlIG5hbWUg
dG8gbG9hZCBhIHByZXZpb3VzbHkgc2F2ZWQgY29uZmlndXJhdGlvbi5cbiIKLSJcbiIKLSJcbiIK
LSJUZXJtaW5hbCBjb25maWd1cmF0aW9uXG4iCi0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgot
IklmIHlvdSB1c2UgbmNvbmZpZyBpbiBhIHh0ZXJtIHdpbmRvdywgbWFrZSBzdXJlIHlvdXIgVEVS
TSBlbnZpcm9ubWVudFxuIgotInZhcmlhYmxlIHNwZWNpZmllcyBhIHRlcm1pbmFsIGNvbmZpZ3Vy
YXRpb24gd2hpY2ggc3VwcG9ydHMgYXQgbGVhc3RcbiIKLSIxNiBjb2xvcnMuICBPdGhlcndpc2Ug
bmNvbmZpZyB3aWxsIGxvb2sgcmF0aGVyIGJhZC5cbiIKLSJcbiIKLSJJZiB0aGUgXCJzdHR5IHNp
emVcIiBjb21tYW5kIHJlcG9ydHMgdGhlIGN1cnJlbnQgdGVybWluYWxzaXplIGNvcnJlY3RseSxc
biIKLSJuY29uZmlnIHdpbGwgYWRhcHQgdG8gc2l6ZXMgbGFyZ2VyIHRoYW4gdGhlIHRyYWRpdGlv
bmFsIDgweDI1IFwic3RhbmRhcmRcIlxuIgotImFuZCBkaXNwbGF5IGxvbmdlciBtZW51cyBwcm9w
ZXJseS5cbiIKLSJcbiIKLSJcbiIKLSJTaW5nbGUgbWVudSBtb2RlXG4iCi0iLS0tLS0tLS0tLS0t
LS0tLVxuIgotIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2YgdGhlIG1lbnUgZW50cmllcyBs
aXN0ZWQgaW4gYSBzaW5nbGUgbWVudSxcbiIKLSJyYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBtdWx0
aW1lbnUgaGllcmFyY2h5LCBydW4gbmNvbmZpZyB3aXRoXG4iCi0iTkNPTkZJR19NT0RFIGVudmly
b25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5nbGVfbWVudS4gIEV4YW1wbGU6XG4iCi0iXG4iCi0i
bWFrZSBOQ09ORklHX01PREU9c2luZ2xlX21lbnUgbmNvbmZpZ1xuIgotIlxuIgotIjxFbnRlcj4g
d2lsbCB0aGVuIHVuZm9sZCB0aGUgYXBwcm9wcmlhdGUgY2F0ZWdvcnksIG9yIGZvbGQgaXQgaWYg
aXRcbiIKLSJpcyBhbHJlYWR5IHVuZm9sZGVkLiAgRm9sZGVkIG1lbnUgZW50cmllcyB3aWxsIGJl
IGRlc2lnbmF0ZWQgYnkgYVxuIgotImxlYWRpbmcgXCIrKz5cIiBhbmQgdW5mb2xkZWQgZW50cmll
cyBieSBhIGxlYWRpbmcgXCItLT5cIi5cbiIKLSJcbiIKLSJOb3RlIHRoYXQgdGhpcyBtb2RlIGNh
biBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZSB0aGFuXG4iCi0idGhl
IGRlZmF1bHQgbW9kZSwgZXNwZWNpYWxseSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiB1bmZvbGRl
ZCBzdWJtZW51cy5cbiIKLSJcbiIsCi1tZW51X25vX2ZfaW5zdHJ1Y3Rpb25zW10gPQotIkxlZ2Vu
ZDogIFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNh
cGFibGUuXG4iCi0iU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgYSB0cmFpbGluZyBcIi0tLT5c
IiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiIKLSJcbiIKLSJVc2UgdGhlIGZvbGxvd2luZyBr
ZXlzIHRvIG5hdmlnYXRlIHRoZSBtZW51czpcbiIKLSJNb3ZlIHVwIG9yIGRvd24gd2l0aCA8VXA+
IGFuZCA8RG93bj4uXG4iCi0iRW50ZXIgYSBzdWJtZW51IHdpdGggPEVudGVyPiBvciA8UmlnaHQ+
LlxuIgotIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJlbnQgbWVudSB3aXRoIDxFc2M+IG9yIDxM
ZWZ0Pi5cbiIKLSJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxuPiBleGNsdWRlcywgPG0+IG1vZHVs
YXJpemVzIGZlYXR1cmVzLlxuIgotIlByZXNzaW5nIDxTcGFjZT4gY3ljbGVzIHRocm91Z2ggdGhl
IGF2YWlsYWJsZSBvcHRpb25zLlxuIgotIlRvIHNlYXJjaCBmb3IgbWVudSBlbnRyaWVzIHByZXNz
IDwvPi5cbiIKLSI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBjdXJyZW50IHdpbmRvdy5cbiIKLSJc
biIKLSJZb3UgZG8gbm90IGhhdmUgZnVuY3Rpb24ga2V5cyBzdXBwb3J0LlxuIgotIlByZXNzIDwx
PiBpbnN0ZWFkIG9mIDxGMT4sIDwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiIKLSJGb3IgdmVy
Ym9zZSBnbG9iYWwgaGVscCB1c2Uga2V5IDwxPi5cbiIKLSJGb3IgaGVscCByZWxhdGVkIHRvIHRo
ZSBjdXJyZW50IG1lbnUgZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiIsCi1tZW51X2luc3RydWN0
aW9uc1tdID0KLSJMZWdlbmQ6ICBbKl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+IG1vZHVs
ZSAgPCA+IG1vZHVsZSBjYXBhYmxlLlxuIgotIlN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IGEg
dHJhaWxpbmcgXCItLS0+XCIsIGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iCi0iXG4iCi0iVXNl
IHRoZSBmb2xsb3dpbmcga2V5cyB0byBuYXZpZ2F0ZSB0aGUgbWVudXM6XG4iCi0iTW92ZSB1cCBv
ciBkb3duIHdpdGggPFVwPiBvciA8RG93bj4uXG4iCi0iRW50ZXIgYSBzdWJtZW51IHdpdGggPEVu
dGVyPiBvciA8UmlnaHQ+LlxuIgotIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJlbnQgbWVudSB3
aXRoIDxFc2M+IG9yIDxMZWZ0Pi5cbiIKLSJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxuPiBleGNs
dWRlcywgPG0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxuIgotIlByZXNzaW5nIDxTcGFjZT4gY3lj
bGVzIHRocm91Z2ggdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuIgotIlRvIHNlYXJjaCBmb3IgbWVu
dSBlbnRyaWVzIHByZXNzIDwvPi5cbiIKLSI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBjdXJyZW50
IHdpbmRvdy5cbiIKLSJcbiIKLSJQcmVzc2luZyA8MT4gbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiA8
RjE+LCA8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4iCi0iRm9yIHZlcmJvc2UgZ2xvYmFsIGhl
bHAgcHJlc3MgPEYxPi5cbiIKLSJGb3IgaGVscCByZWxhdGVkIHRvIHRoZSBjdXJyZW50IG1lbnUg
ZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiIsCi1yYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQot
IlByZXNzIDxVcD4sIDxEb3duPiwgPEhvbWU+IG9yIDxFbmQ+IHRvIG5hdmlnYXRlIGEgcmFkaW9s
aXN0LCBzZWxlY3RcbiIKLSJ3aXRoIDxTcGFjZT4uXG4iCi0iRm9yIGhlbHAgcmVsYXRlZCB0byB0
aGUgY3VycmVudCBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIgotIkZvciBnbG9iYWwgaGVscCBw
cmVzcyA8RjE+LlxuIiwKLWlucHV0Ym94X2luc3RydWN0aW9uc19pbnRbXSA9Ci0iUGxlYXNlIGVu
dGVyIGEgZGVjaW1hbCB2YWx1ZS5cbiIKLSJGcmFjdGlvbnMgd2lsbCBub3QgYmUgYWNjZXB0ZWQu
XG4iCi0iUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsCi1pbnB1dGJv
eF9pbnN0cnVjdGlvbnNfaGV4W10gPQotIlBsZWFzZSBlbnRlciBhIGhleGFkZWNpbWFsIHZhbHVl
LlxuIgotIlByZXNzIDxFbnRlcj4gdG8gYXBwbHksIDxFc2M+IHRvIGNhbmNlbC4iLAotaW5wdXRi
b3hfaW5zdHJ1Y3Rpb25zX3N0cmluZ1tdID0KLSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUu
XG4iCi0iUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsCi1zZXRtb2Rf
dGV4dFtdID0KLSJUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiBhbm90aGVyIGZlYXR1cmUgd2hpY2gg
aGFzIGJlZW4gY29uZmlndXJlZCBhcyBhXG4iCi0ibW9kdWxlLiAgQXMgYSByZXN1bHQsIHRoZSBj
dXJyZW50IGZlYXR1cmUgd2lsbCBiZSBidWlsdCBhcyBhIG1vZHVsZSB0b28uIiwKLWxvYWRfY29u
ZmlnX3RleHRbXSA9Ci0iRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB5
b3Ugd2lzaCB0byBsb2FkLlxuIgotIkFjY2VwdCB0aGUgbmFtZSBzaG93biB0byByZXN0b3JlIHRo
ZSBjb25maWd1cmF0aW9uIHlvdSBsYXN0XG4iCi0icmV0cmlldmVkLiAgTGVhdmUgZW1wdHkgdG8g
YWJvcnQuIiwKLWxvYWRfY29uZmlnX2hlbHBbXSA9Ci0iRm9yIHZhcmlvdXMgcmVhc29ucywgb25l
IG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJhbCBkaWZmZXJlbnRcbiIKLSJjb25maWd1cmF0aW9ucyBh
dmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIKLSJcbiIKLSJJZiB5b3UgaGF2ZSBzYXZl
ZCBhIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gaW4gYSBmaWxlIG90aGVyIHRoYW4gdGhlXG4iCi0i
ZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbG9h
ZCBhbmQgbW9kaWZ5XG4iCi0idGhhdCBjb25maWd1cmF0aW9uLlxuIgotIlxuIgotIkxlYXZlIGVt
cHR5IHRvIGFib3J0LlxuIiwKLXNhdmVfY29uZmlnX3RleHRbXSA9Ci0iRW50ZXIgYSBmaWxlbmFt
ZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNhdmVkXG4iCi0iYXMgYW4g
YWx0ZXJuYXRlLiAgTGVhdmUgZW1wdHkgdG8gYWJvcnQuIiwKLXNhdmVfY29uZmlnX2hlbHBbXSA9
Ci0iRm9yIHZhcmlvdXMgcmVhc29ucywgb25lIG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJhbCBkaWZm
ZXJlbnRcbiIKLSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5c
biIKLSJcbiIKLSJFbnRlcmluZyBhIGZpbGUgbmFtZSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIGxh
dGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKLSJhbmQgdXNlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRp
b24gYXMgYW4gYWx0ZXJuYXRlIHRvIHdoYXRldmVyXG4iCi0iY29uZmlndXJhdGlvbiBvcHRpb25z
IHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5cbiIKLSJcbiIKLSJMZWF2ZSBlbXB0eSB0
byBhYm9ydC5cbiIsCi1zZWFyY2hfaGVscFtdID0KLSJTZWFyY2ggZm9yIHN5bWJvbHMgKGNvbmZp
Z3VyYXRpb24gdmFyaWFibGUgbmFtZXMgQ09ORklHXyopIGFuZCBkaXNwbGF5XG4iCi0idGhlaXIg
cmVsYXRpb25zLiAgUmVndWxhciBleHByZXNzaW9ucyBhcmUgc3VwcG9ydGVkLlxuIgotIkV4YW1w
bGU6ICBTZWFyY2ggZm9yIFwiXkZPT1wiLlxuIgotIlJlc3VsdDpcbiIKLSItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgot
IlN5bWJvbDogRk9PIFsgPSBtXVxuIgotIlByb21wdDogRm9vIGJ1cyBpcyB1c2VkIHRvIGRyaXZl
IHRoZSBiYXIgSFdcbiIKLSJEZWZpbmVkIGF0IGRyaXZlcnMvcGNpL0tjb25maWc6NDdcbiIKLSJE
ZXBlbmRzIG9uOiBYODZfTE9DQUxfQVBJQyAmJiBYODZfSU9fQVBJQyB8fCBJQTY0XG4iCi0iTG9j
YXRpb246XG4iCi0iICAtPiBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSlcbiIK
LSIgICAgLT4gUENJIHN1cHBvcnQgKFBDSSBbID0geV0pXG4iCi0iICAgICAgLT4gUENJIGFjY2Vz
cyBtb2RlICg8Y2hvaWNlPiBbID0geV0pXG4iCi0iU2VsZWN0czogTElCQ1JDMzJcbiIKLSJTZWxl
Y3RlZCBieTogQkFSXG4iCi0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKLSJvICBUaGUgbGluZSAnUHJvbXB0Oicgc2hv
d3MgdGhlIHRleHQgZGlzcGxheWVkIGZvciB0aGlzIHN5bWJvbCBpblxuIgotIiAgIHRoZSBtZW51
IGhpZXJhcmNoeS5cbiIKLSJvICBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQgd2hhdCBm
aWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbCBpc1xuIgotIiAgIGRlZmluZWQuXG4iCi0ibyAg
VGhlICdEZXBlbmRzIG9uOicgbGluZSBsaXN0cyBzeW1ib2xzIHRoYXQgbmVlZCB0byBiZSBkZWZp
bmVkIGZvclxuIgotIiAgIHRoaXMgc3ltYm9sIHRvIGJlIHZpc2libGUgYW5kIHNlbGVjdGFibGUg
aW4gdGhlIG1lbnUuXG4iCi0ibyAgVGhlICdMb2NhdGlvbjonIGxpbmVzIHRlbGwsIHdoZXJlIGlu
IHRoZSBtZW51IHN0cnVjdHVyZSB0aGlzIHN5bWJvbFxuIgotIiAgIGlzIGxvY2F0ZWQuICBBIGxv
Y2F0aW9uIGZvbGxvd2VkIGJ5IGEgWyA9IHldIGluZGljYXRlcyB0aGF0IHRoaXMgaXNcbiIKLSIg
ICBhIHNlbGVjdGFibGUgbWVudSBpdGVtLCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgZGlzcGxh
eWVkIGluc2lkZVxuIgotIiAgIGJyYWNrZXRzLlxuIgotIm8gIFRoZSAnU2VsZWN0czonIGxpbmUg
dGVsbHMsIHdoYXQgc3ltYm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZFxuIgotIiAg
IGlmIHRoaXMgc3ltYm9sIGlzIHNlbGVjdGVkICh5IG9yIG0pLlxuIgotIm8gIFRoZSAnU2VsZWN0
ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVkIHRoaXMgc3ltYm9sLlxu
IgotIlxuIgotIk9ubHkgcmVsZXZhbnQgbGluZXMgYXJlIHNob3duLlxuIgotIlxuXG4iCi0iU2Vh
cmNoIGV4YW1wbGVzOlxuIgotIlVTQiAgPT4gZmluZCBhbGwgc3ltYm9scyBjb250YWluaW5nIFVT
QlxuIgotIl5VU0IgPT4gZmluZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxuIgotIlVT
QiQgPT4gZmluZCBhbGwgc3ltYm9scyBlbmRpbmcgd2l0aCBVU0JcbiIKLSJcbiI7Ci0KLXN0cnVj
dCBtaXRlbSB7Ci0JY2hhciBzdHJbMjU2XTsKLQljaGFyIHRhZzsKLQl2b2lkICp1c3JwdHI7Ci0J
aW50IGlzX3Zpc2libGU7Ci19OwotCi0jZGVmaW5lIE1BWF9NRU5VX0lURU1TIDQwOTYKLXN0YXRp
YyBpbnQgc2hvd19hbGxfaXRlbXM7Ci1zdGF0aWMgaW50IGluZGVudDsKLXN0YXRpYyBzdHJ1Y3Qg
bWVudSAqY3VycmVudF9tZW51Owotc3RhdGljIGludCBjaGlsZF9jb3VudDsKLXN0YXRpYyBpbnQg
c2luZ2xlX21lbnVfbW9kZTsKLS8qIHRoZSB3aW5kb3cgaW4gd2hpY2ggYWxsIGluZm9ybWF0aW9u
IGFwcGVhcnMgKi8KLXN0YXRpYyBXSU5ET1cgKm1haW5fd2luZG93OwotLyogdGhlIGxhcmdlc3Qg
c2l6ZSBvZiB0aGUgbWVudSB3aW5kb3cgKi8KLXN0YXRpYyBpbnQgbXdpbl9tYXhfbGluZXM7Ci1z
dGF0aWMgaW50IG13aW5fbWF4X2NvbHM7Ci0vKiB0aGUgd2luZG93IGluIHdoaWNoIHdlIHNob3cg
b3B0aW9uIGJ1dHRvbnMgKi8KLXN0YXRpYyBNRU5VICpjdXJzZXNfbWVudTsKLXN0YXRpYyBJVEVN
ICpjdXJzZXNfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107Ci1zdGF0aWMgc3RydWN0IG1pdGVt
IGtfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107Ci1zdGF0aWMgaW50IGl0ZW1zX251bTsKLXN0
YXRpYyBpbnQgZ2xvYmFsX2V4aXQ7Ci0vKiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJ1dHRvbiAq
Lwotc3RhdGljIGNvbnN0IGNoYXIgKmN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gbWVudV9pbnN0cnVj
dGlvbnM7Ci0KLXN0YXRpYyBjaGFyICpkaWFsb2dfaW5wdXRfcmVzdWx0Owotc3RhdGljIGludCBk
aWFsb2dfaW5wdXRfcmVzdWx0X2xlbjsKLQotc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAq
bWVudSk7Ci1zdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7Ci1zdGF0
aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7Ci1zdGF0aWMgdm9pZCBjb25m
X2xvYWQodm9pZCk7Ci1zdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7Ci1zdGF0aWMgdm9pZCBz
aG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOwotc3RhdGljIGludCBkb19leGl0KHZvaWQpOwot
c3RhdGljIHZvaWQgc2V0dXBfd2luZG93cyh2b2lkKTsKLXN0YXRpYyB2b2lkIHNlYXJjaF9jb25m
KHZvaWQpOwotCi10eXBlZGVmIHZvaWQgKCpmdW5jdGlvbl9rZXlfaGFuZGxlcl90KShpbnQgKmtl
eSwgc3RydWN0IG1lbnUgKm1lbnUpOwotc3RhdGljIHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBz
dHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKLXN0YXRpYyB2b2lkIGhhbmRsZV9mMihpbnQgKmtl
eSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7Ci1zdGF0aWMgdm9pZCBoYW5kbGVfZjMoaW50
ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOwotc3RhdGljIHZvaWQgaGFuZGxlX2Y0
KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKLXN0YXRpYyB2b2lkIGhhbmRs
ZV9mNShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7Ci1zdGF0aWMgdm9pZCBo
YW5kbGVfZjYoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOwotc3RhdGljIHZv
aWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKLXN0YXRp
YyB2b2lkIGhhbmRsZV9mOChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7Ci1z
dGF0aWMgdm9pZCBoYW5kbGVfZjkoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0p
OwotCi1zdHJ1Y3QgZnVuY3Rpb25fa2V5cyB7Ci0JY29uc3QgY2hhciAqa2V5X3N0cjsKLQljb25z
dCBjaGFyICpmdW5jOwotCWZ1bmN0aW9uX2tleSBrZXk7Ci0JZnVuY3Rpb25fa2V5X2hhbmRsZXJf
dCBoYW5kbGVyOwotfTsKLQotc3RhdGljIGNvbnN0IGludCBmdW5jdGlvbl9rZXlzX251bSA9IDk7
Ci1zdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2tleXMgZnVuY3Rpb25fa2V5c1tdID0gewotCXsKLQkJ
LmtleV9zdHIgPSAiRjEiLAotCQkuZnVuYyA9ICJIZWxwIiwKLQkJLmtleSA9IEZfSEVMUCwKLQkJ
LmhhbmRsZXIgPSBoYW5kbGVfZjEsCi0JfSwKLQl7Ci0JCS5rZXlfc3RyID0gIkYyIiwKLQkJLmZ1
bmMgPSAiU3ltSW5mbyIsCi0JCS5rZXkgPSBGX1NZTUJPTCwKLQkJLmhhbmRsZXIgPSBoYW5kbGVf
ZjIsCi0JfSwKLQl7Ci0JCS5rZXlfc3RyID0gIkYzIiwKLQkJLmZ1bmMgPSAiSGVscCAyIiwKLQkJ
LmtleSA9IEZfSU5TVFMsCi0JCS5oYW5kbGVyID0gaGFuZGxlX2YzLAotCX0sCi0JewotCQkua2V5
X3N0ciA9ICJGNCIsCi0JCS5mdW5jID0gIlNob3dBbGwiLAotCQkua2V5ID0gRl9DT05GLAotCQku
aGFuZGxlciA9IGhhbmRsZV9mNCwKLQl9LAotCXsKLQkJLmtleV9zdHIgPSAiRjUiLAotCQkuZnVu
YyA9ICJCYWNrIiwKLQkJLmtleSA9IEZfQkFDSywKLQkJLmhhbmRsZXIgPSBoYW5kbGVfZjUsCi0J
fSwKLQl7Ci0JCS5rZXlfc3RyID0gIkY2IiwKLQkJLmZ1bmMgPSAiU2F2ZSIsCi0JCS5rZXkgPSBG
X1NBVkUsCi0JCS5oYW5kbGVyID0gaGFuZGxlX2Y2LAotCX0sCi0JewotCQkua2V5X3N0ciA9ICJG
NyIsCi0JCS5mdW5jID0gIkxvYWQiLAotCQkua2V5ID0gRl9MT0FELAotCQkuaGFuZGxlciA9IGhh
bmRsZV9mNywKLQl9LAotCXsKLQkJLmtleV9zdHIgPSAiRjgiLAotCQkuZnVuYyA9ICJTeW1TZWFy
Y2giLAotCQkua2V5ID0gRl9TRUFSQ0gsCi0JCS5oYW5kbGVyID0gaGFuZGxlX2Y4LAotCX0sCi0J
ewotCQkua2V5X3N0ciA9ICJGOSIsCi0JCS5mdW5jID0gIkV4aXQiLAotCQkua2V5ID0gRl9FWElU
LAotCQkuaGFuZGxlciA9IGhhbmRsZV9mOSwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgcHJpbnRf
ZnVuY3Rpb25fbGluZSh2b2lkKQotewotCWludCBpOwotCWludCBvZmZzZXQgPSAxOwotCWNvbnN0
IGludCBza2lwID0gMTsKLQlpbnQgbGluZXMgPSBnZXRtYXh5KHN0ZHNjcik7Ci0KLQlmb3IgKGkg
PSAwOyBpIDwgZnVuY3Rpb25fa2V5c19udW07IGkrKykgewotCQkodm9pZCkgd2F0dHJzZXQobWFp
bl93aW5kb3csIGF0dHJpYnV0ZXNbRlVOQ1RJT05fSElHSExJR0hUXSk7Ci0JCW12d3ByaW50dyht
YWluX3dpbmRvdywgbGluZXMtMywgb2Zmc2V0LAotCQkJCSIlcyIsCi0JCQkJZnVuY3Rpb25fa2V5
c1tpXS5rZXlfc3RyKTsKLQkJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVz
W0ZVTkNUSU9OX1RFWFRdKTsKLQkJb2Zmc2V0ICs9IHN0cmxlbihmdW5jdGlvbl9rZXlzW2ldLmtl
eV9zdHIpOwotCQltdndwcmludHcobWFpbl93aW5kb3csIGxpbmVzLTMsCi0JCQkJb2Zmc2V0LCAi
JXMiLAotCQkJCWZ1bmN0aW9uX2tleXNbaV0uZnVuYyk7Ci0JCW9mZnNldCArPSBzdHJsZW4oZnVu
Y3Rpb25fa2V5c1tpXS5mdW5jKSArIHNraXA7Ci0JfQotCSh2b2lkKSB3YXR0cnNldChtYWluX3dp
bmRvdywgYXR0cmlidXRlc1tOT1JNQUxdKTsKLX0KLQotLyogaGVscCAqLwotc3RhdGljIHZvaWQg
aGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQotewotCXNob3df
c2Nyb2xsX3dpbihtYWluX3dpbmRvdywKLQkJCSJHbG9iYWwgaGVscCIsIG5jb25mX2dsb2JhbF9o
ZWxwKTsKLQlyZXR1cm47Ci19Ci0KLS8qIHN5bWJvbGUgaGVscCAqLwotc3RhdGljIHZvaWQgaGFu
ZGxlX2YyKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQotewotCXNob3dfaGVs
cChjdXJyZW50X2l0ZW0pOwotCXJldHVybjsKLX0KLQotLyogaW5zdHJ1Y3Rpb25zICovCi1zdGF0
aWMgdm9pZCBoYW5kbGVfZjMoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCi17
Ci0Jc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAotCQkJIlNob3J0IGhlbHAiLAotCQkJY3Vy
cmVudF9pbnN0cnVjdGlvbnMpOwotCXJldHVybjsKLX0KLQotLyogY29uZmlnICovCi1zdGF0aWMg
dm9pZCBoYW5kbGVfZjQoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCi17Ci0J
aW50IHJlcyA9IGJ0bl9kaWFsb2cobWFpbl93aW5kb3csCi0JCQkiU2hvdyBhbGwgc3ltYm9scz8i
LAotCQkJMiwKLQkJCSIgICA8U2hvdyBBbGw+ICAgIiwKLQkJCSI8RG9uJ3Qgc2hvdyBhbGw+Iik7
Ci0JaWYgKHJlcyA9PSAwKQotCQlzaG93X2FsbF9pdGVtcyA9IDE7Ci0JZWxzZSBpZiAocmVzID09
IDEpCi0JCXNob3dfYWxsX2l0ZW1zID0gMDsKLQotCXJldHVybjsKLX0KLQotLyogYmFjayAqLwot
c3RhdGljIHZvaWQgaGFuZGxlX2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVt
KQotewotCSprZXkgPSBLRVlfTEVGVDsKLQlyZXR1cm47Ci19Ci0KLS8qIHNhdmUgKi8KLXN0YXRp
YyB2b2lkIGhhbmRsZV9mNihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKLXsK
LQljb25mX3NhdmUoKTsKLQlyZXR1cm47Ci19Ci0KLS8qIGxvYWQgKi8KLXN0YXRpYyB2b2lkIGhh
bmRsZV9mNyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKLXsKLQljb25mX2xv
YWQoKTsKLQlyZXR1cm47Ci19Ci0KLS8qIHNlYXJjaCAqLwotc3RhdGljIHZvaWQgaGFuZGxlX2Y4
KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQotewotCXNlYXJjaF9jb25mKCk7
Ci0JcmV0dXJuOwotfQotCi0vKiBleGl0ICovCi1zdGF0aWMgdm9pZCBoYW5kbGVfZjkoaW50ICpr
ZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCi17Ci0JZG9fZXhpdCgpOwotCXJldHVybjsK
LX0KLQotLyogcmV0dXJuICE9IDAgdG8gaW5kaWNhdGUgdGhlIGtleSB3YXMgaGFuZGxlcyAqLwot
c3RhdGljIGludCBwcm9jZXNzX3NwZWNpYWxfa2V5cyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKm1l
bnUpCi17Ci0JaW50IGk7Ci0KLQlpZiAoKmtleSA9PSBLRVlfUkVTSVpFKSB7Ci0JCXNldHVwX3dp
bmRvd3MoKTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGZ1bmN0aW9uX2tl
eXNfbnVtOyBpKyspIHsKLQkJaWYgKCprZXkgPT0gS0VZX0YoZnVuY3Rpb25fa2V5c1tpXS5rZXkp
IHx8Ci0JCSAgICAqa2V5ID09ICcwJyArIGZ1bmN0aW9uX2tleXNbaV0ua2V5KXsKLQkJCWZ1bmN0
aW9uX2tleXNbaV0uaGFuZGxlcihrZXksIG1lbnUpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9Ci0K
LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW5faXRlbXModm9pZCkKLXsKLQlpbnQg
aTsKLQlmb3IgKGkgPSAwOyBjdXJzZXNfbWVudV9pdGVtc1tpXTsgaSsrKQotCQlmcmVlX2l0ZW0o
Y3Vyc2VzX21lbnVfaXRlbXNbaV0pOwotCWJ6ZXJvKGN1cnNlc19tZW51X2l0ZW1zLCBzaXplb2Yo
Y3Vyc2VzX21lbnVfaXRlbXMpKTsKLQliemVybyhrX21lbnVfaXRlbXMsIHNpemVvZihrX21lbnVf
aXRlbXMpKTsKLQlpdGVtc19udW0gPSAwOwotfQotCi10eXBlZGVmIGVudW0ge01BVENIX1RJTktF
Ul9QQVRURVJOX1VQLCBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLAotCUZJTkRfTkVYVF9NQVRD
SF9ET1dOLCBGSU5EX05FWFRfTUFUQ0hfVVB9IG1hdGNoX2Y7Ci0KLS8qIHJldHVybiB0aGUgaW5k
ZXggb2YgdGhlIG1hdGNoZWQgaXRlbSwgb3IgLTEgaWYgbm8gc3VjaCBpdGVtIGV4aXN0cyAqLwot
c3RhdGljIGludCBnZXRfbWV4dF9tYXRjaChjb25zdCBjaGFyICptYXRjaF9zdHIsIG1hdGNoX2Yg
ZmxhZykKLXsKLQlpbnQgbWF0Y2hfc3RhcnQgPSBpdGVtX2luZGV4KGN1cnJlbnRfaXRlbShjdXJz
ZXNfbWVudSkpOwotCWludCBpbmRleDsKLQotCWlmIChmbGFnID09IEZJTkRfTkVYVF9NQVRDSF9E
T1dOKQotCQkrK21hdGNoX3N0YXJ0OwotCWVsc2UgaWYgKGZsYWcgPT0gRklORF9ORVhUX01BVENI
X1VQKQotCQktLW1hdGNoX3N0YXJ0OwotCi0JaW5kZXggPSBtYXRjaF9zdGFydDsKLQlpbmRleCA9
IChpbmRleCArIGl0ZW1zX251bSkgJSBpdGVtc19udW07Ci0Jd2hpbGUgKHRydWUpIHsKLQkJY2hh
ciAqc3RyID0ga19tZW51X2l0ZW1zW2luZGV4XS5zdHI7Ci0JCWlmIChzdHJjYXNlc3RyKHN0ciwg
bWF0Y2hfc3RyKSAhPSBOVUxMKQotCQkJcmV0dXJuIGluZGV4OwotCQlpZiAoZmxhZyA9PSBGSU5E
X05FWFRfTUFUQ0hfVVAgfHwKLQkJICAgIGZsYWcgPT0gTUFUQ0hfVElOS0VSX1BBVFRFUk5fVVAp
Ci0JCQktLWluZGV4OwotCQllbHNlCi0JCQkrK2luZGV4OwotCQlpbmRleCA9IChpbmRleCArIGl0
ZW1zX251bSkgJSBpdGVtc19udW07Ci0JCWlmIChpbmRleCA9PSBtYXRjaF9zdGFydCkKLQkJCXJl
dHVybiAtMTsKLQl9Ci19Ci0KLS8qIE1ha2UgYSBuZXcgaXRlbS4gKi8KLXN0YXRpYyB2b2lkIGl0
ZW1fbWFrZShzdHJ1Y3QgbWVudSAqbWVudSwgY2hhciB0YWcsIGNvbnN0IGNoYXIgKmZtdCwgLi4u
KQotewotCXZhX2xpc3QgYXA7Ci0KLQlpZiAoaXRlbXNfbnVtID4gTUFYX01FTlVfSVRFTVMtMSkK
LQkJcmV0dXJuOwotCi0JYnplcm8oJmtfbWVudV9pdGVtc1tpdGVtc19udW1dLCBzaXplb2Yoa19t
ZW51X2l0ZW1zWzBdKSk7Ci0Ja19tZW51X2l0ZW1zW2l0ZW1zX251bV0udGFnID0gdGFnOwotCWtf
bWVudV9pdGVtc1tpdGVtc19udW1dLnVzcnB0ciA9IG1lbnU7Ci0JaWYgKG1lbnUgIT0gTlVMTCkK
LQkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uaXNfdmlzaWJsZSA9Ci0JCQltZW51X2lzX3Zpc2li
bGUobWVudSk7Ci0JZWxzZQotCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNpYmxlID0g
MTsKLQotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCXZzbnByaW50ZihrX21lbnVfaXRlbXNbaXRlbXNf
bnVtXS5zdHIsCi0JCSAgc2l6ZW9mKGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciksCi0JCSAg
Zm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQotCWlmICgha19tZW51X2l0ZW1zW2l0ZW1zX251bV0u
aXNfdmlzaWJsZSkKLQkJbWVtY3B5KGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciwgIlhYWCIs
IDMpOwotCi0JY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSA9IG5ld19pdGVtKAotCQkJa19t
ZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyLAotCQkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3Ry
KTsKLQlzZXRfaXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0ZW1zW2l0ZW1zX251bV0sCi0JCQkm
a19tZW51X2l0ZW1zW2l0ZW1zX251bV0pOwotCS8qCi0JaWYgKCFrX21lbnVfaXRlbXNbaXRlbXNf
bnVtXS5pc192aXNpYmxlKQotCQlpdGVtX29wdHNfb2ZmKGN1cnNlc19tZW51X2l0ZW1zW2l0ZW1z
X251bV0sIE9fU0VMRUNUQUJMRSk7Ci0JKi8KLQotCWl0ZW1zX251bSsrOwotCWN1cnNlc19tZW51
X2l0ZW1zW2l0ZW1zX251bV0gPSBOVUxMOwotfQotCi0vKiB2ZXJ5IGhhY2tpc2guIGFkZHMgYSBz
dHJpbmcgdG8gdGhlIGxhc3QgaXRlbSBhZGRlZCAqLwotc3RhdGljIHZvaWQgaXRlbV9hZGRfc3Ry
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0JaW50IGluZGV4ID0gaXRl
bXNfbnVtLTE7Ci0JY2hhciBuZXdfc3RyWzI1Nl07Ci0JY2hhciB0bXBfc3RyWzI1Nl07Ci0KLQlp
ZiAoaW5kZXggPCAwKQotCQlyZXR1cm47Ci0KLQl2YV9zdGFydChhcCwgZm10KTsKLQl2c25wcmlu
dGYobmV3X3N0ciwgc2l6ZW9mKG5ld19zdHIpLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCXNu
cHJpbnRmKHRtcF9zdHIsIHNpemVvZih0bXBfc3RyKSwgIiVzJXMiLAotCQkJa19tZW51X2l0ZW1z
W2luZGV4XS5zdHIsIG5ld19zdHIpOwotCXN0cm5jcHkoa19tZW51X2l0ZW1zW2luZGV4XS5zdHIs
Ci0JCXRtcF9zdHIsCi0JCXNpemVvZihrX21lbnVfaXRlbXNbaW5kZXhdLnN0cikpOwotCi0JZnJl
ZV9pdGVtKGN1cnNlc19tZW51X2l0ZW1zW2luZGV4XSk7Ci0JY3Vyc2VzX21lbnVfaXRlbXNbaW5k
ZXhdID0gbmV3X2l0ZW0oCi0JCQlrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwKLQkJCWtfbWVudV9p
dGVtc1tpbmRleF0uc3RyKTsKLQlzZXRfaXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0ZW1zW2lu
ZGV4XSwKLQkJCSZrX21lbnVfaXRlbXNbaW5kZXhdKTsKLX0KLQotLyogZ2V0IHRoZSB0YWcgb2Yg
dGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtICovCi1zdGF0aWMgY2hhciBpdGVtX3RhZyh2b2lk
KQotewotCUlURU0gKmN1cjsKLQlzdHJ1Y3QgbWl0ZW0gKm1jdXI7Ci0KLQljdXIgPSBjdXJyZW50
X2l0ZW0oY3Vyc2VzX21lbnUpOwotCWlmIChjdXIgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0JbWN1
ciA9IChzdHJ1Y3QgbWl0ZW0gKikgaXRlbV91c2VycHRyKGN1cik7Ci0JcmV0dXJuIG1jdXItPnRh
ZzsKLX0KLQotc3RhdGljIGludCBjdXJzZXNfaXRlbV9pbmRleCh2b2lkKQotewotCXJldHVybiAg
aXRlbV9pbmRleChjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpKTsKLX0KLQotc3RhdGljIHZvaWQg
Kml0ZW1fZGF0YSh2b2lkKQotewotCUlURU0gKmN1cjsKLQlzdHJ1Y3QgbWl0ZW0gKm1jdXI7Ci0K
LQljdXIgPSBjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpOwotCWlmICghY3VyKQotCQlyZXR1cm4g
TlVMTDsKLQltY3VyID0gKHN0cnVjdCBtaXRlbSAqKSBpdGVtX3VzZXJwdHIoY3VyKTsKLQlyZXR1
cm4gbWN1ci0+dXNycHRyOwotCi19Ci0KLXN0YXRpYyBpbnQgaXRlbV9pc190YWcoY2hhciB0YWcp
Ci17Ci0JcmV0dXJuIGl0ZW1fdGFnKCkgPT0gdGFnOwotfQotCi1zdGF0aWMgY2hhciBmaWxlbmFt
ZVtQQVRIX01BWCsxXTsKLXN0YXRpYyBjaGFyIG1lbnVfYmFja3RpdGxlW1BBVEhfTUFYKzEyOF07
Ci1zdGF0aWMgY29uc3QgY2hhciAqc2V0X2NvbmZpZ19maWxlbmFtZShjb25zdCBjaGFyICpjb25m
aWdfZmlsZW5hbWUpCi17Ci0JaW50IHNpemU7Ci0KLQlzaXplID0gc25wcmludGYobWVudV9iYWNr
dGl0bGUsIHNpemVvZihtZW51X2JhY2t0aXRsZSksCi0JCQkiJXMgLSAlcyIsIGNvbmZpZ19maWxl
bmFtZSwgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsKLQlpZiAoc2l6ZSA+PSBzaXplb2YobWVudV9i
YWNrdGl0bGUpKQotCQltZW51X2JhY2t0aXRsZVtzaXplb2YobWVudV9iYWNrdGl0bGUpLTFdID0g
J1wwJzsKLQotCXNpemUgPSBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVz
IiwgY29uZmlnX2ZpbGVuYW1lKTsKLQlpZiAoc2l6ZSA+PSBzaXplb2YoZmlsZW5hbWUpKQotCQlm
aWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gJ1wwJzsKLQlyZXR1cm4gbWVudV9iYWNrdGl0
bGU7Ci19Ci0KLS8qIHJldHVybiA9IDAgbWVhbnMgd2UgYXJlIHN1Y2Nlc3NmdWwuCi0gKiAtMSBt
ZWFucyBnbyBvbiBkb2luZyB3aGF0IHlvdSB3ZXJlIGRvaW5nCi0gKi8KLXN0YXRpYyBpbnQgZG9f
ZXhpdCh2b2lkKQotewotCWludCByZXM7Ci0JaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpIHsKLQkJ
Z2xvYmFsX2V4aXQgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmVzID0gYnRuX2RpYWxvZyhtYWlu
X3dpbmRvdywKLQkJCSJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRpb24/
XG4iCi0JCQkJIjxFU0M+IHRvIGNhbmNlbCBhbmQgcmVzdW1lIG5jb25maWcuIiwKLQkJCTIsCi0J
CQkiICAgPHNhdmU+ICAgIiwKLQkJCSI8ZG9uJ3Qgc2F2ZT4iKTsKLQlpZiAocmVzID09IEtFWV9F
WElUKSB7Ci0JCWdsb2JhbF9leGl0ID0gMDsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qIGlmIHdl
IGdvdCBoZXJlLCB0aGUgdXNlciByZWFsbHkgd2FudHMgdG8gZXhpdCAqLwotCXN3aXRjaCAocmVz
KSB7Ci0JY2FzZSAwOgotCQlyZXMgPSBjb25mX3dyaXRlKGZpbGVuYW1lKTsKLQkJaWYgKHJlcykK
LQkJCWJ0bl9kaWFsb2coCi0JCQkJbWFpbl93aW5kb3csCi0JCQkJIkVycm9yIGR1cmluZyB3cml0
aW5nIG9mIGNvbmZpZ3VyYXRpb24uXG4iCi0JCQkJICAiWW91ciBjb25maWd1cmF0aW9uIGNoYW5n
ZXMgd2VyZSBOT1Qgc2F2ZWQuIiwKLQkJCQkgIDEsCi0JCQkJICAiPE9LPiIpOwotCQljb25mX3dy
aXRlX2F1dG9jb25mKDApOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlidG5fZGlhbG9nKAotCQkJ
bWFpbl93aW5kb3csCi0JCQkiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2
ZWQuIiwKLQkJCTEsCi0JCQkiPE9LPiIpOwotCQlicmVhazsKLQl9Ci0JZ2xvYmFsX2V4aXQgPSAx
OwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpCi17Ci0J
c3RydWN0IHN5bWJvbCAqKnN5bV9hcnI7Ci0Jc3RydWN0IGdzdHIgcmVzOwotCXN0cnVjdCBnc3Ry
IHRpdGxlOwotCWNoYXIgKmRpYWxvZ19pbnB1dDsKLQlpbnQgZHJlczsKLQotCXRpdGxlID0gc3Ry
X25ldygpOwotCXN0cl9wcmludGYoICZ0aXRsZSwgIkVudGVyIChzdWIpc3RyaW5nIG9yIHJlZ2V4
cCB0byBzZWFyY2ggZm9yICIKLQkJCSAgICAgICIod2l0aCBvciB3aXRob3V0IFwiJXNcIikiLCBD
T05GSUdfKTsKLQotYWdhaW46Ci0JZHJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywK
LQkJCSJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiLAotCQkJc3RyX2dldCgmdGl0bGUp
LAotCQkJIiIsICZkaWFsb2dfaW5wdXRfcmVzdWx0LCAmZGlhbG9nX2lucHV0X3Jlc3VsdF9sZW4p
OwotCXN3aXRjaCAoZHJlcykgewotCWNhc2UgMDoKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzaG93
X3Njcm9sbF93aW4obWFpbl93aW5kb3csCi0JCQkJIlNlYXJjaCBDb25maWd1cmF0aW9uIiwgc2Vh
cmNoX2hlbHApOwotCQlnb3RvIGFnYWluOwotCWRlZmF1bHQ6Ci0JCXN0cl9mcmVlKCZ0aXRsZSk7
Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBzdHJpcCB0aGUgcHJlZml4IGlmIG5lY2Vzc2FyeSAqLwot
CWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7Ci0JaWYgKHN0cm5jYXNlY21wKGRp
YWxvZ19pbnB1dF9yZXN1bHQsIENPTkZJR18sIHN0cmxlbihDT05GSUdfKSkgPT0gMCkKLQkJZGlh
bG9nX2lucHV0ICs9IHN0cmxlbihDT05GSUdfKTsKLQotCXN5bV9hcnIgPSBzeW1fcmVfc2VhcmNo
KGRpYWxvZ19pbnB1dCk7Ci0JcmVzID0gZ2V0X3JlbGF0aW9uc19zdHIoc3ltX2FyciwgTlVMTCk7
Ci0JZnJlZShzeW1fYXJyKTsKLQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCi0JCQkiU2Vh
cmNoIFJlc3VsdHMiLCBzdHJfZ2V0KCZyZXMpKTsKLQlzdHJfZnJlZSgmcmVzKTsKLQlzdHJfZnJl
ZSgmdGl0bGUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3RydWN0IG1lbnUgKm1l
bnUpCi17Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlz
dHJ1Y3QgbWVudSAqY2hpbGQ7Ci0JaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOwotCXRyaXN0YXRl
IHZhbDsKLQljaGFyIGNoOwotCi0JaWYgKCFtZW51IHx8ICghc2hvd19hbGxfaXRlbXMgJiYgIW1l
bnVfaXNfdmlzaWJsZShtZW51KSkpCi0JCXJldHVybjsKLQotCXN5bSA9IG1lbnUtPnN5bTsKLQlw
cm9wID0gbWVudS0+cHJvbXB0OwotCWlmICghc3ltKSB7Ci0JCWlmIChwcm9wICYmIG1lbnUgIT0g
Y3VycmVudF9tZW51KSB7Ci0JCQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQo
bWVudSk7Ci0JCQllbnVtIHByb3BfdHlwZSBwdHlwZTsKLQkJCXB0eXBlID0gbWVudS0+cHJvbXB0
ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwotCQkJc3dpdGNoIChwdHlwZSkgewot
CQkJY2FzZSBQX01FTlU6Ci0JCQkJY2hpbGRfY291bnQrKzsKLQkJCQlwcm9tcHQgPSBwcm9tcHQ7
Ci0JCQkJaWYgKHNpbmdsZV9tZW51X21vZGUpIHsKLQkJCQkJaXRlbV9tYWtlKG1lbnUsICdtJywK
LQkJCQkJCSIlcyUqYyVzIiwKLQkJCQkJCW1lbnUtPmRhdGEgPyAiLS0+IiA6ICIrKz4iLAotCQkJ
CQkJaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOwotCQkJCX0gZWxzZQotCQkJCQlpdGVtX21ha2Uo
bWVudSwgJ20nLAotCQkJCQkJICAiICAgJSpjJXMgICVzIiwKLQkJCQkJCSAgaW5kZW50ICsgMSwg
JyAnLCBwcm9tcHQsCi0JCQkJCQkgIG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0tLSIgOiAiLS0t
PiIpOwotCi0JCQkJaWYgKHNpbmdsZV9tZW51X21vZGUgJiYgbWVudS0+ZGF0YSkKLQkJCQkJZ290
byBjb25mX2NoaWxkczsKLQkJCQlyZXR1cm47Ci0JCQljYXNlIFBfQ09NTUVOVDoKLQkJCQlpZiAo
cHJvbXB0KSB7Ci0JCQkJCWNoaWxkX2NvdW50Kys7Ci0JCQkJCWl0ZW1fbWFrZShtZW51LCAnOics
Ci0JCQkJCQkiICAgJSpjKioqICVzICoqKiIsCi0JCQkJCQlpbmRlbnQgKyAxLCAnICcsCi0JCQkJ
CQlwcm9tcHQpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJaWYgKHByb21w
dCkgewotCQkJCQljaGlsZF9jb3VudCsrOwotCQkJCQlpdGVtX21ha2UobWVudSwgJzonLCAiLS0t
JSpjJXMiLAotCQkJCQkJaW5kZW50ICsgMSwgJyAnLAotCQkJCQkJcHJvbXB0KTsKLQkJCQl9Ci0J
CQl9Ci0JCX0gZWxzZQotCQkJZG9pbnQgPSAwOwotCQlnb3RvIGNvbmZfY2hpbGRzOwotCX0KLQot
CXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKLQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7Ci0J
CXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOwotCQlz
dHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOwotCi0JCWNoaWxkX2NvdW50Kys7Ci0JCWZvciAo
Y2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgewotCQkJaWYg
KG1lbnVfaXNfdmlzaWJsZShjaGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQotCQkJCWRl
Zl9tZW51ID0gY2hpbGQ7Ci0JCX0KLQotCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSk7Ci0JCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKLQkJCXN3aXRjaCAodHlwZSkgewot
CQkJY2FzZSBTX0JPT0xFQU46Ci0JCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIlslY10iLAotCQkJ
CQkJdmFsID09IG5vID8gJyAnIDogJyonKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU19UUklTVEFU
RToKLQkJCQlzd2l0Y2ggKHZhbCkgewotCQkJCWNhc2UgeWVzOgotCQkJCQljaCA9ICcqJzsKLQkJ
CQkJYnJlYWs7Ci0JCQkJY2FzZSBtb2Q6Ci0JCQkJCWNoID0gJ00nOwotCQkJCQlicmVhazsKLQkJ
CQlkZWZhdWx0OgotCQkJCQljaCA9ICcgJzsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWl0ZW1f
bWFrZShtZW51LCAndCcsICI8JWM+IiwgY2gpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2Ug
ewotCQkJaXRlbV9tYWtlKG1lbnUsIGRlZl9tZW51ID8gJ3QnIDogJzonLCAiICAgIik7Ci0JCX0K
LQotCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsgMSwKLQkJCQknICcsIG1lbnVfZ2V0
X3Byb21wdChtZW51KSk7Ci0JCWlmICh2YWwgPT0geWVzKSB7Ci0JCQlpZiAoZGVmX21lbnUpIHsK
LQkJCQlpdGVtX2FkZF9zdHIoIiAoJXMpIiwKLQkJCQkJbWVudV9nZXRfcHJvbXB0KGRlZl9tZW51
KSk7Ci0JCQkJaXRlbV9hZGRfc3RyKCIgIC0tLT4iKTsKLQkJCQlpZiAoZGVmX21lbnUtPmxpc3Qp
IHsKLQkJCQkJaW5kZW50ICs9IDI7Ci0JCQkJCWJ1aWxkX2NvbmYoZGVmX21lbnUpOwotCQkJCQlp
bmRlbnQgLT0gMjsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQl9IGVsc2UgewotCQlp
ZiAobWVudSA9PSBjdXJyZW50X21lbnUpIHsKLQkJCWl0ZW1fbWFrZShtZW51LCAnOicsCi0JCQkJ
Ii0tLSUqYyVzIiwgaW5kZW50ICsgMSwKLQkJCQknICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7
Ci0JCQlnb3RvIGNvbmZfY2hpbGRzOwotCQl9Ci0JCWNoaWxkX2NvdW50Kys7Ci0JCXZhbCA9IHN5
bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKLQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3lt
KSAmJiB2YWwgPT0geWVzKSB7Ci0JCQlpdGVtX21ha2UobWVudSwgJzonLCAiICAgIik7Ci0JCX0g
ZWxzZSB7Ci0JCQlzd2l0Y2ggKHR5cGUpIHsKLQkJCWNhc2UgU19CT09MRUFOOgotCQkJCWlmIChz
eW1faXNfY2hhbmdhYmxlKHN5bSkpCi0JCQkJCWl0ZW1fbWFrZShtZW51LCAndCcsICJbJWNdIiwK
LQkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7Ci0JCQkJZWxzZQotCQkJCQlpdGVtX21ha2Uo
bWVudSwgJ3QnLCAiLSVjLSIsCi0JCQkJCQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOwotCQkJCWJy
ZWFrOwotCQkJY2FzZSBTX1RSSVNUQVRFOgotCQkJCXN3aXRjaCAodmFsKSB7Ci0JCQkJY2FzZSB5
ZXM6Ci0JCQkJCWNoID0gJyonOwotCQkJCQlicmVhazsKLQkJCQljYXNlIG1vZDoKLQkJCQkJY2gg
PSAnTSc7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWNoID0gJyAnOwotCQkJCQli
cmVhazsKLQkJCQl9Ci0JCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgewotCQkJCQlpZiAo
c3ltLT5yZXZfZGVwLnRyaSA9PSBtb2QpCi0JCQkJCQlpdGVtX21ha2UobWVudSwKLQkJCQkJCQkn
dCcsICJ7JWN9IiwgY2gpOwotCQkJCQllbHNlCi0JCQkJCQlpdGVtX21ha2UobWVudSwKLQkJCQkJ
CQkndCcsICI8JWM+IiwgY2gpOwotCQkJCX0gZWxzZQotCQkJCQlpdGVtX21ha2UobWVudSwgJ3Qn
LCAiLSVjLSIsIGNoKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJdG1wID0gMiArIHN0
cmxlbihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsKLQkJCQlpdGVtX21ha2UobWVudSwgJ3Mn
LCAiICAgICglcykiLAotCQkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7Ci0JCQkJdG1w
ID0gaW5kZW50IC0gdG1wICsgNDsKLQkJCQlpZiAodG1wIDwgMCkKLQkJCQkJdG1wID0gMDsKLQkJ
CQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCB0bXAsICcgJywKLQkJCQkJCW1lbnVfZ2V0X3Byb21w
dChtZW51KSwKLQkJCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwKLQkJCQkJCSAhc3ltX2lzX2No
YW5nYWJsZShzeW0pKSA/ICIiIDoKLQkJCQkJCSIgKE5FVykiKTsKLQkJCQlnb3RvIGNvbmZfY2hp
bGRzOwotCQkJfQotCQl9Ci0JCWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIGluZGVudCArIDEsICcg
JywKLQkJCQltZW51X2dldF9wcm9tcHQobWVudSksCi0JCQkJKHN5bV9oYXNfdmFsdWUoc3ltKSB8
fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/Ci0JCQkJIiIgOiAiIChORVcpIik7Ci0JCWlmICht
ZW51LT5wcm9tcHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgewotCQkJaXRlbV9h
ZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7Ci0J
CQlyZXR1cm47Ci0JCX0KLQl9Ci0KLWNvbmZfY2hpbGRzOgotCWluZGVudCArPSBkb2ludDsKLQlm
b3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpCi0JCWJ1
aWxkX2NvbmYoY2hpbGQpOwotCWluZGVudCAtPSBkb2ludDsKLX0KLQotc3RhdGljIHZvaWQgcmVz
ZXRfbWVudSh2b2lkKQotewotCXVucG9zdF9tZW51KGN1cnNlc19tZW51KTsKLQljbGVhbl9pdGVt
cygpOwotfQotCi0vKiBhZGp1c3QgdGhlIG1lbnUgdG8gc2hvdyB0aGlzIGl0ZW0uCi0gKiBwcmVm
ZXIgbm90IHRvIHNjcm9sbCB0aGUgbWVudSBpZiBwb3NzaWJsZSovCi1zdGF0aWMgdm9pZCBjZW50
ZXJfaXRlbShpbnQgc2VsZWN0ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQotewotCWludCB0
b3Byb3c7Ci0KLQlzZXRfdG9wX3JvdyhjdXJzZXNfbWVudSwgKmxhc3RfdG9wX3Jvdyk7Ci0JdG9w
cm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7Ci0JaWYgKHNlbGVjdGVkX2luZGV4IDwgdG9wcm93
IHx8Ci0JICAgIHNlbGVjdGVkX2luZGV4ID49IHRvcHJvdyttd2luX21heF9saW5lcykgewotCQl0
b3Byb3cgPSBtYXgoc2VsZWN0ZWRfaW5kZXgtbXdpbl9tYXhfbGluZXMvMiwgMCk7Ci0JCWlmICh0
b3Byb3cgPj0gaXRlbV9jb3VudChjdXJzZXNfbWVudSktbXdpbl9tYXhfbGluZXMpCi0JCQl0b3By
b3cgPSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1td2luX21heF9saW5lczsKLQkJc2V0X3RvcF9y
b3coY3Vyc2VzX21lbnUsIHRvcHJvdyk7Ci0JfQotCXNldF9jdXJyZW50X2l0ZW0oY3Vyc2VzX21l
bnUsCi0JCQljdXJzZXNfbWVudV9pdGVtc1tzZWxlY3RlZF9pbmRleF0pOwotCSpsYXN0X3RvcF9y
b3cgPSB0b3Byb3c7Ci0JcG9zdF9tZW51KGN1cnNlc19tZW51KTsKLQlyZWZyZXNoX2FsbF93aW5k
b3dzKG1haW5fd2luZG93KTsKLX0KLQotLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHJlc2V0X21l
bnUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSAqLwotc3RhdGljIHZvaWQgc2hvd19tZW51KGNvbnN0
IGNoYXIgKnByb21wdCwgY29uc3QgY2hhciAqaW5zdHJ1Y3Rpb25zLAotCQlpbnQgc2VsZWN0ZWRf
aW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQotewotCWludCBtYXh4LCBtYXh5OwotCVdJTkRPVyAq
bWVudV93aW5kb3c7Ci0KLQljdXJyZW50X2luc3RydWN0aW9ucyA9IGluc3RydWN0aW9uczsKLQot
CWNsZWFyKCk7Ci0JKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW05PUk1B
TF0pOwotCXByaW50X2luX21pZGRsZShzdGRzY3IsIDEsIDAsIGdldG1heHgoc3Rkc2NyKSwKLQkJ
CW1lbnVfYmFja3RpdGxlLAotCQkJYXR0cmlidXRlc1tNQUlOX0hFQURJTkddKTsKLQotCSh2b2lk
KSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tNQUlOX01FTlVfQk9YXSk7Ci0JYm94
KG1haW5fd2luZG93LCAwLCAwKTsKLQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJp
YnV0ZXNbTUFJTl9NRU5VX0hFQURJTkddKTsKLQltdndwcmludHcobWFpbl93aW5kb3csIDAsIDMs
ICIgJXMgIiwgcHJvbXB0KTsKLQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJpYnV0
ZXNbTk9STUFMXSk7Ci0KLQlzZXRfbWVudV9pdGVtcyhjdXJzZXNfbWVudSwgY3Vyc2VzX21lbnVf
aXRlbXMpOwotCi0JLyogcG9zaXRpb24gdGhlIG1lbnUgYXQgdGhlIG1pZGRsZSBvZiB0aGUgc2Ny
ZWVuICovCi0Jc2NhbGVfbWVudShjdXJzZXNfbWVudSwgJm1heHksICZtYXh4KTsKLQltYXh4ID0g
bWluKG1heHgsIG13aW5fbWF4X2NvbHMtMik7Ci0JbWF4eSA9IG13aW5fbWF4X2xpbmVzOwotCW1l
bnVfd2luZG93ID0gZGVyd2luKG1haW5fd2luZG93LAotCQkJbWF4eSwKLQkJCW1heHgsCi0JCQky
LAotCQkJKG13aW5fbWF4X2NvbHMtbWF4eCkvMik7Ci0Ja2V5cGFkKG1lbnVfd2luZG93LCBUUlVF
KTsKLQlzZXRfbWVudV93aW4oY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsKLQlzZXRfbWVudV9z
dWIoY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsKLQotCS8qIG11c3QgcmVhc3NlcnQgdGhpcyBh
ZnRlciBjaGFuZ2luZyBpdGVtcywgb3RoZXJ3aXNlIHJldHVybnMgdG8gYQotCSAqIGRlZmF1bHQg
b2YgMTYKLQkgKi8KLQlzZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEpOwotCWNl
bnRlcl9pdGVtKHNlbGVjdGVkX2luZGV4LCBsYXN0X3RvcF9yb3cpOwotCXNldF9tZW51X2Zvcm1h
dChjdXJzZXNfbWVudSwgbWF4eSwgMSk7Ci0KLQlwcmludF9mdW5jdGlvbl9saW5lKCk7Ci0KLQkv
KiBQb3N0IHRoZSBtZW51ICovCi0JcG9zdF9tZW51KGN1cnNlc19tZW51KTsKLQlyZWZyZXNoX2Fs
bF93aW5kb3dzKG1haW5fd2luZG93KTsKLX0KLQotc3RhdGljIHZvaWQgYWRqX21hdGNoX2Rpciht
YXRjaF9mICptYXRjaF9kaXJlY3Rpb24pCi17Ci0JaWYgKCptYXRjaF9kaXJlY3Rpb24gPT0gRklO
RF9ORVhUX01BVENIX0RPV04pCi0JCSptYXRjaF9kaXJlY3Rpb24gPQotCQkJTUFUQ0hfVElOS0VS
X1BBVFRFUk5fRE9XTjsKLQllbHNlIGlmICgqbWF0Y2hfZGlyZWN0aW9uID09IEZJTkRfTkVYVF9N
QVRDSF9VUCkKLQkJKm1hdGNoX2RpcmVjdGlvbiA9Ci0JCQlNQVRDSF9USU5LRVJfUEFUVEVSTl9V
UDsKLQkvKiBlbHNlLCBkbyBubyBjaGFuZ2UuLiAqLwotfQotCi1zdHJ1Y3QgbWF0Y2hfc3RhdGUK
LXsKLQlpbnQgaW5fc2VhcmNoOwotCW1hdGNoX2YgbWF0Y2hfZGlyZWN0aW9uOwotCWNoYXIgcGF0
dGVyblsyNTZdOwotfTsKLQotLyogUmV0dXJuIDAgbWVhbnMgSSBoYXZlIGhhbmRsZWQgdGhlIGtl
eS4gSW4gc3VjaCBhIGNhc2UsIGFucyBzaG91bGQgaG9sZCB0aGUKLSAqIGl0ZW0gdG8gY2VudGVy
LCBvciAtMSBvdGhlcndpc2UuCi0gKiBFbHNlIHJldHVybiAtMSAuCi0gKi8KLXN0YXRpYyBpbnQg
ZG9fbWF0Y2goaW50IGtleSwgc3RydWN0IG1hdGNoX3N0YXRlICpzdGF0ZSwgaW50ICphbnMpCi17
Ci0JY2hhciBjID0gKGNoYXIpIGtleTsKLQlpbnQgdGVybWluYXRlX3NlYXJjaCA9IDA7Ci0JKmFu
cyA9IC0xOwotCWlmIChrZXkgPT0gJy8nIHx8IChzdGF0ZS0+aW5fc2VhcmNoICYmIGtleSA9PSAy
NykpIHsKLQkJbW92ZSgwLCAwKTsKLQkJcmVmcmVzaCgpOwotCQljbHJ0b2VvbCgpOwotCQlzdGF0
ZS0+aW5fc2VhcmNoID0gMS1zdGF0ZS0+aW5fc2VhcmNoOwotCQliemVybyhzdGF0ZS0+cGF0dGVy
biwgc2l6ZW9mKHN0YXRlLT5wYXR0ZXJuKSk7Ci0JCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBN
QVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgaWYgKCFzdGF0
ZS0+aW5fc2VhcmNoKQotCQlyZXR1cm4gMTsKLQotCWlmIChpc2FsbnVtKGMpIHx8IGlzZ3JhcGgo
YykgfHwgYyA9PSAnICcpIHsKLQkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0YXRlLT5wYXR0ZXJu
KV0gPSBjOwotCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4pXSA9ICdcMCc7
Ci0JCWFkal9tYXRjaF9kaXIoJnN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOwotCQkqYW5zID0gZ2V0
X21leHRfbWF0Y2goc3RhdGUtPnBhdHRlcm4sCi0JCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7
Ci0JfSBlbHNlIGlmIChrZXkgPT0gS0VZX0RPV04pIHsKLQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlv
biA9IEZJTkRfTkVYVF9NQVRDSF9ET1dOOwotCQkqYW5zID0gZ2V0X21leHRfbWF0Y2goc3RhdGUt
PnBhdHRlcm4sCi0JCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7Ci0JfSBlbHNlIGlmIChrZXkg
PT0gS0VZX1VQKSB7Ci0JCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRfTUFUQ0hf
VVA7Ci0JCSphbnMgPSBnZXRfbWV4dF9tYXRjaChzdGF0ZS0+cGF0dGVybiwKLQkJCQlzdGF0ZS0+
bWF0Y2hfZGlyZWN0aW9uKTsKLQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfQkFDS1NQQUNFIHx8IGtl
eSA9PSA4IHx8IGtleSA9PSAxMjcpIHsKLQkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0YXRlLT5w
YXR0ZXJuKS0xXSA9ICdcMCc7Ci0JCWFkal9tYXRjaF9kaXIoJnN0YXRlLT5tYXRjaF9kaXJlY3Rp
b24pOwotCX0gZWxzZQotCQl0ZXJtaW5hdGVfc2VhcmNoID0gMTsKLQotCWlmICh0ZXJtaW5hdGVf
c2VhcmNoKSB7Ci0JCXN0YXRlLT5pbl9zZWFyY2ggPSAwOwotCQliemVybyhzdGF0ZS0+cGF0dGVy
biwgc2l6ZW9mKHN0YXRlLT5wYXR0ZXJuKSk7Ci0JCW1vdmUoMCwgMCk7Ci0JCXJlZnJlc2goKTsK
LQkJY2xydG9lb2woKTsKLQkJcmV0dXJuIC0xOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGlj
IHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQlzdHJ1Y3QgbWVudSAqc3VibWVudSA9
IE5VTEw7Ci0JY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOwotCXN0
cnVjdCBzeW1ib2wgKnN5bTsKLQlpbnQgcmVzOwotCWludCBjdXJyZW50X2luZGV4ID0gMDsKLQlp
bnQgbGFzdF90b3Bfcm93ID0gMDsKLQlzdHJ1Y3QgbWF0Y2hfc3RhdGUgbWF0Y2hfc3RhdGUgPSB7
Ci0JCS5pbl9zZWFyY2ggPSAwLAotCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BB
VFRFUk5fRE9XTiwKLQkJLnBhdHRlcm4gPSAiIiwKLQl9OwotCi0Jd2hpbGUgKCFnbG9iYWxfZXhp
dCkgewotCQlyZXNldF9tZW51KCk7Ci0JCWN1cnJlbnRfbWVudSA9IG1lbnU7Ci0JCWJ1aWxkX2Nv
bmYobWVudSk7Ci0JCWlmICghY2hpbGRfY291bnQpCi0JCQlicmVhazsKLQotCQlzaG93X21lbnUo
cHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCi0JCQkJbWVudV9pbnN0cnVjdGlvbnMsCi0J
CQkJY3VycmVudF9pbmRleCwgJmxhc3RfdG9wX3Jvdyk7Ci0JCWtleXBhZCgobWVudV93aW4oY3Vy
c2VzX21lbnUpKSwgVFJVRSk7Ci0JCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsKLQkJCWlmIChtYXRj
aF9zdGF0ZS5pbl9zZWFyY2gpIHsKLQkJCQltdnByaW50dygwLCAwLAotCQkJCQkic2VhcmNoaW5n
OiAlcyIsIG1hdGNoX3N0YXRlLnBhdHRlcm4pOwotCQkJCWNscnRvZW9sKCk7Ci0JCQl9Ci0JCQly
ZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKLQkJCXJlcyA9IHdnZXRjaChtZW51X3dp
bihjdXJzZXNfbWVudSkpOwotCQkJaWYgKCFyZXMpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZG9fbWF0
Y2gocmVzLCAmbWF0Y2hfc3RhdGUsICZjdXJyZW50X2luZGV4KSA9PSAwKSB7Ci0JCQkJaWYgKGN1
cnJlbnRfaW5kZXggIT0gLTEpCi0JCQkJCWNlbnRlcl9pdGVtKGN1cnJlbnRfaW5kZXgsCi0JCQkJ
CQkgICAgJmxhc3RfdG9wX3Jvdyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAocHJvY2Vz
c19zcGVjaWFsX2tleXMoJnJlcywKLQkJCQkJCShzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSkp
Ci0JCQkJYnJlYWs7Ci0JCQlzd2l0Y2ggKHJlcykgewotCQkJY2FzZSBLRVlfRE9XTjoKLQkJCQlt
ZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7Ci0JCQkJYnJlYWs7Ci0JCQlj
YXNlIEtFWV9VUDoKLQkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1VQX0lURU0pOwot
CQkJCWJyZWFrOwotCQkJY2FzZSBLRVlfTlBBR0U6Ci0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21l
bnUsIFJFUV9TQ1JfRFBBR0UpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBLRVlfUFBBR0U6Ci0JCQkJ
bWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOwotCQkJCWJyZWFrOwotCQkJ
Y2FzZSBLRVlfSE9NRToKLQkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0ZJUlNUX0lU
RU0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSBLRVlfRU5EOgotCQkJCW1lbnVfZHJpdmVyKGN1cnNl
c19tZW51LCBSRVFfTEFTVF9JVEVNKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ2gnOgotCQkJY2Fz
ZSAnPyc6Ci0JCQkJc2hvd19oZWxwKChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSk7Ci0JCQkJ
YnJlYWs7Ci0JCQl9Ci0JCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fAotCQkJCXJlcyA9
PSAzMiB8fCByZXMgPT0gJ24nIHx8IHJlcyA9PSAneScgfHwKLQkJCQlyZXMgPT0gS0VZX0xFRlQg
fHwgcmVzID09IEtFWV9SSUdIVCB8fAotCQkJCXJlcyA9PSAnbScpCi0JCQkJYnJlYWs7Ci0JCQly
ZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKLQkJfQotCi0JCXJlZnJlc2hfYWxsX3dp
bmRvd3MobWFpbl93aW5kb3cpOwotCQkvKiBpZiBFU0Mgb3IgbGVmdCovCi0JCWlmIChyZXMgPT0g
MjcgfHwgKG1lbnUgIT0gJnJvb3RtZW51ICYmIHJlcyA9PSBLRVlfTEVGVCkpCi0JCQlicmVhazsK
LQotCQkvKiByZW1lbWJlciBsb2NhdGlvbiBpbiB0aGUgbWVudSAqLwotCQlsYXN0X3RvcF9yb3cg
PSB0b3Bfcm93KGN1cnNlc19tZW51KTsKLQkJY3VycmVudF9pbmRleCA9IGN1cnNlc19pdGVtX2lu
ZGV4KCk7Ci0KLQkJaWYgKCFpdGVtX3RhZygpKQotCQkJY29udGludWU7Ci0KLQkJc3VibWVudSA9
IChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKTsKLQkJaWYgKCFzdWJtZW51IHx8ICFtZW51X2lz
X3Zpc2libGUoc3VibWVudSkpCi0JCQljb250aW51ZTsKLQkJc3ltID0gc3VibWVudS0+c3ltOwot
Ci0JCXN3aXRjaCAocmVzKSB7Ci0JCWNhc2UgJyAnOgotCQkJaWYgKGl0ZW1faXNfdGFnKCd0Jykp
Ci0JCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOwotCQkJZWxzZSBpZiAoaXRlbV9p
c190YWcoJ20nKSkKLQkJCQljb25mKHN1Ym1lbnUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX1JJ
R0hUOgotCQljYXNlIDEwOiAvKiBFTlRFUiBXQVMgUFJFU1NFRCAqLwotCQkJc3dpdGNoIChpdGVt
X3RhZygpKSB7Ci0JCQljYXNlICdtJzoKLQkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkKLQkJCQkJ
c3VibWVudS0+ZGF0YSA9Ci0JCQkJCQkodm9pZCAqKSAobG9uZykgIXN1Ym1lbnUtPmRhdGE7Ci0J
CQkJZWxzZQotCQkJCQljb25mKHN1Ym1lbnUpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAndCc6Ci0J
CQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJgotCQkJCSAgICBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSkgPT0geWVzKQotCQkJCQljb25mX2Nob2ljZShzdWJtZW51KTsKLQkJCQllbHNlIGlm
IChzdWJtZW51LT5wcm9tcHQgJiYKLQkJCQkJIHN1Ym1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01F
TlUpCi0JCQkJCWNvbmYoc3VibWVudSk7Ci0JCQkJZWxzZSBpZiAocmVzID09IDEwKQotCQkJCQlz
eW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdzJzoK
LQkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwot
CQljYXNlICd5JzoKLQkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7Ci0JCQkJaWYgKHN5bV9zZXRf
dHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQotCQkJCQlicmVhazsKLQkJCQlpZiAoc3ltX3NldF90
cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCkpCi0JCQkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csIHNl
dG1vZF90ZXh0LCAwKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlICduJzoKLQkJCWlmIChpdGVt
X2lzX3RhZygndCcpKQotCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7Ci0JCQli
cmVhazsKLQkJY2FzZSAnbSc6Ci0JCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkKLQkJCQlzeW1fc2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotfQotCi1zdGF0
aWMgdm9pZCBjb25mX21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykKLXsKLQlidG5fZGlh
bG9nKG1haW5fd2luZG93LCBzLCAxLCAiPE9LPiIpOwotfQotCi1zdGF0aWMgdm9pZCBzaG93X2hl
bHAoc3RydWN0IG1lbnUgKm1lbnUpCi17Ci0Jc3RydWN0IGdzdHIgaGVscDsKLQotCWlmICghbWVu
dSkKLQkJcmV0dXJuOwotCi0JaGVscCA9IHN0cl9uZXcoKTsKLQltZW51X2dldF9leHRfaGVscCht
ZW51LCAmaGVscCk7Ci0Jc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LCBtZW51X2dldF9wcm9t
cHQobWVudSksIHN0cl9nZXQoJmhlbHApKTsKLQlzdHJfZnJlZSgmaGVscCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQotewotCWNvbnN0IGNoYXIgKnBy
b21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKLQlzdHJ1Y3QgbWVudSAqY2hpbGQgPSBOVUxM
OwotCXN0cnVjdCBzeW1ib2wgKmFjdGl2ZTsKLQlpbnQgc2VsZWN0ZWRfaW5kZXggPSAwOwotCWlu
dCBsYXN0X3RvcF9yb3cgPSAwOwotCWludCByZXMsIGkgPSAwOwotCXN0cnVjdCBtYXRjaF9zdGF0
ZSBtYXRjaF9zdGF0ZSA9IHsKLQkJLmluX3NlYXJjaCA9IDAsCi0JCS5tYXRjaF9kaXJlY3Rpb24g
PSBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLAotCQkucGF0dGVybiA9ICIiLAotCX07Ci0KLQlh
Y3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pOwotCS8qIHRoaXMgaXMgbW9z
dGx5IGR1cGxpY2F0ZWQgZnJvbSB0aGUgY29uZigpIGZ1bmN0aW9uLiAqLwotCXdoaWxlICghZ2xv
YmFsX2V4aXQpIHsKLQkJcmVzZXRfbWVudSgpOwotCi0JCWZvciAoaSA9IDAsIGNoaWxkID0gbWVu
dS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKLQkJCWlmICghc2hvd19hbGxf
aXRlbXMgJiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCi0JCQkJY29udGludWU7Ci0KLQkJCWlm
IChjaGlsZC0+c3ltID09IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCi0JCQkJaXRl
bV9tYWtlKGNoaWxkLCAnOicsICI8WD4gJXMiLAotCQkJCQkJbWVudV9nZXRfcHJvbXB0KGNoaWxk
KSk7Ci0JCQllbHNlIGlmIChjaGlsZC0+c3ltKQotCQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAi
ICAgICVzIiwKLQkJCQkJCW1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOwotCQkJZWxzZQotCQkJCWl0
ZW1fbWFrZShjaGlsZCwgJzonLCAiKioqICVzICoqKiIsCi0JCQkJCQltZW51X2dldF9wcm9tcHQo
Y2hpbGQpKTsKLQotCQkJaWYgKGNoaWxkLT5zeW0gPT0gYWN0aXZlKXsKLQkJCQlsYXN0X3RvcF9y
b3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKLQkJCQlzZWxlY3RlZF9pbmRleCA9IGk7Ci0JCQl9
Ci0JCQlpKys7Ci0JCX0KLQkJc2hvd19tZW51KHByb21wdCA/IHByb21wdCA6ICJDaG9pY2UgTWVu
dSIsCi0JCQkJcmFkaW9saXN0X2luc3RydWN0aW9ucywKLQkJCQlzZWxlY3RlZF9pbmRleCwKLQkJ
CQkmbGFzdF90b3Bfcm93KTsKLQkJd2hpbGUgKCFnbG9iYWxfZXhpdCkgewotCQkJaWYgKG1hdGNo
X3N0YXRlLmluX3NlYXJjaCkgewotCQkJCW12cHJpbnR3KDAsIDAsICJzZWFyY2hpbmc6ICVzIiwK
LQkJCQkJIG1hdGNoX3N0YXRlLnBhdHRlcm4pOwotCQkJCWNscnRvZW9sKCk7Ci0JCQl9Ci0JCQly
ZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKLQkJCXJlcyA9IHdnZXRjaChtZW51X3dp
bihjdXJzZXNfbWVudSkpOwotCQkJaWYgKCFyZXMpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoZG9fbWF0
Y2gocmVzLCAmbWF0Y2hfc3RhdGUsICZzZWxlY3RlZF9pbmRleCkgPT0gMCkgewotCQkJCWlmIChz
ZWxlY3RlZF9pbmRleCAhPSAtMSkKLQkJCQkJY2VudGVyX2l0ZW0oc2VsZWN0ZWRfaW5kZXgsCi0J
CQkJCQkgICAgJmxhc3RfdG9wX3Jvdyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAocHJv
Y2Vzc19zcGVjaWFsX2tleXMoCi0JCQkJCQkmcmVzLAotCQkJCQkJKHN0cnVjdCBtZW51ICopIGl0
ZW1fZGF0YSgpKSkKLQkJCQlicmVhazsKLQkJCXN3aXRjaCAocmVzKSB7Ci0JCQljYXNlIEtFWV9E
T1dOOgotCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfRE9XTl9JVEVNKTsKLQkJCQli
cmVhazsKLQkJCWNhc2UgS0VZX1VQOgotCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFf
VVBfSVRFTSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEtFWV9OUEFHRToKLQkJCQltZW51X2RyaXZl
cihjdXJzZXNfbWVudSwgUkVRX1NDUl9EUEFHRSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEtFWV9Q
UEFHRToKLQkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1NDUl9VUEFHRSk7Ci0JCQkJ
YnJlYWs7Ci0JCQljYXNlIEtFWV9IT01FOgotCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBS
RVFfRklSU1RfSVRFTSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEtFWV9FTkQ6Ci0JCQkJbWVudV9k
cml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9MQVNUX0lURU0pOwotCQkJCWJyZWFrOwotCQkJY2FzZSAn
aCc6Ci0JCQljYXNlICc/JzoKLQkJCQlzaG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0
YSgpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8
IHJlcyA9PSAnICcgfHwKLQkJCQkJcmVzID09IEtFWV9MRUZUKXsKLQkJCQlicmVhazsKLQkJCX0K
LQkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOwotCQl9Ci0JCS8qIGlmIEVTQyBv
ciBsZWZ0ICovCi0JCWlmIChyZXMgPT0gMjcgfHwgcmVzID09IEtFWV9MRUZUKQotCQkJYnJlYWs7
Ci0KLQkJY2hpbGQgPSBpdGVtX2RhdGEoKTsKLQkJaWYgKCFjaGlsZCB8fCAhbWVudV9pc192aXNp
YmxlKGNoaWxkKSB8fCAhY2hpbGQtPnN5bSkKLQkJCWNvbnRpbnVlOwotCQlzd2l0Y2ggKHJlcykg
ewotCQljYXNlICcgJzoKLQkJY2FzZSAgMTA6Ci0JCWNhc2UgS0VZX1JJR0hUOgotCQkJc3ltX3Nl
dF90cmlzdGF0ZV92YWx1ZShjaGlsZC0+c3ltLCB5ZXMpOwotCQkJcmV0dXJuOwotCQljYXNlICdo
JzoKLQkJY2FzZSAnPyc6Ci0JCQlzaG93X2hlbHAoY2hpbGQpOwotCQkJYWN0aXZlID0gY2hpbGQt
PnN5bTsKLQkJCWJyZWFrOwotCQljYXNlIEtFWV9FWElUOgotCQkJcmV0dXJuOwotCQl9Ci0JfQot
fQotCi1zdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQljb25z
dCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7Ci0KLQl3aGlsZSAoMSkgewot
CQlpbnQgcmVzOwotCQljb25zdCBjaGFyICpoZWFkaW5nOwotCi0JCXN3aXRjaCAoc3ltX2dldF90
eXBlKG1lbnUtPnN5bSkpIHsKLQkJY2FzZSBTX0lOVDoKLQkJCWhlYWRpbmcgPSBpbnB1dGJveF9p
bnN0cnVjdGlvbnNfaW50OwotCQkJYnJlYWs7Ci0JCWNhc2UgU19IRVg6Ci0JCQloZWFkaW5nID0g
aW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleDsKLQkJCWJyZWFrOwotCQljYXNlIFNfU1RSSU5HOgot
CQkJaGVhZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19zdHJpbmc7Ci0JCQlicmVhazsKLQkJ
ZGVmYXVsdDoKLQkJCWhlYWRpbmcgPSAiSW50ZXJuYWwgbmNvbmYgZXJyb3IhIjsKLQkJfQotCQly
ZXMgPSBkaWFsb2dfaW5wdXRib3gobWFpbl93aW5kb3csCi0JCQkJcHJvbXB0ID8gcHJvbXB0IDog
Ik1haW4gTWVudSIsCi0JCQkJaGVhZGluZywKLQkJCQlzeW1fZ2V0X3N0cmluZ192YWx1ZShtZW51
LT5zeW0pLAotCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0LAotCQkJCSZkaWFsb2dfaW5wdXRfcmVz
dWx0X2xlbik7Ci0JCXN3aXRjaCAocmVzKSB7Ci0JCWNhc2UgMDoKLQkJCWlmIChzeW1fc2V0X3N0
cmluZ192YWx1ZShtZW51LT5zeW0sCi0JCQkJCQlkaWFsb2dfaW5wdXRfcmVzdWx0KSkKLQkJCQly
ZXR1cm47Ci0JCQlidG5fZGlhbG9nKG1haW5fd2luZG93LAotCQkJCSJZb3UgaGF2ZSBtYWRlIGFu
IGludmFsaWQgZW50cnkuIiwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJc2hvd19oZWxw
KG1lbnUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX0VYSVQ6Ci0JCQlyZXR1cm47Ci0JCX0KLQl9
Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKQotewotCXdoaWxlICgxKSB7Ci0JCWlu
dCByZXM7Ci0JCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywKLQkJCQlOVUxMLCBs
b2FkX2NvbmZpZ190ZXh0LAotCQkJCWZpbGVuYW1lLAotCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0
LAotCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7Ci0JCXN3aXRjaCAocmVzKSB7Ci0JCWNh
c2UgMDoKLQkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkKLQkJCQlyZXR1cm47Ci0JCQlp
ZiAoIWNvbmZfcmVhZChkaWFsb2dfaW5wdXRfcmVzdWx0KSkgewotCQkJCXNldF9jb25maWdfZmls
ZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7Ci0JCQkJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7
Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywgIkZpbGUgZG9l
cyBub3QgZXhpc3QhIiwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJc2hvd19zY3JvbGxf
d2luKG1haW5fd2luZG93LAotCQkJCQkiTG9hZCBBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiIsCi0J
CQkJCWxvYWRfY29uZmlnX2hlbHApOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX0VYSVQ6Ci0JCQly
ZXR1cm47Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKQotewotCXdo
aWxlICgxKSB7Ci0JCWludCByZXM7Ci0JCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRv
dywKLQkJCQlOVUxMLCBzYXZlX2NvbmZpZ190ZXh0LAotCQkJCWZpbGVuYW1lLAotCQkJCSZkaWFs
b2dfaW5wdXRfcmVzdWx0LAotCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7Ci0JCXN3aXRj
aCAocmVzKSB7Ci0JCWNhc2UgMDoKLQkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkKLQkJ
CQlyZXR1cm47Ci0JCQlyZXMgPSBjb25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1bHQpOwotCQkJ
aWYgKCFyZXMpIHsKLQkJCQlzZXRfY29uZmlnX2ZpbGVuYW1lKGRpYWxvZ19pbnB1dF9yZXN1bHQp
OwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csICJDYW4ndCBj
cmVhdGUgZmlsZSEiLAotCQkJCTEsICI8T0s+Iik7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJ
c2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAotCQkJCSJTYXZlIEFsdGVybmF0ZSBDb25maWd1
cmF0aW9uIiwKLQkJCQlzYXZlX2NvbmZpZ19oZWxwKTsKLQkJCWJyZWFrOwotCQljYXNlIEtFWV9F
WElUOgotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBzZXR1cF93aW5kb3dz
KHZvaWQpCi17Ci0JaW50IGxpbmVzLCBjb2x1bW5zOwotCi0JZ2V0bWF4eXgoc3Rkc2NyLCBsaW5l
cywgY29sdW1ucyk7Ci0KLQlpZiAobWFpbl93aW5kb3cgIT0gTlVMTCkKLQkJZGVsd2luKG1haW5f
d2luZG93KTsKLQotCS8qIHNldCB1cCB0aGUgbWVudSBhbmQgbWVudSB3aW5kb3cgKi8KLQltYWlu
X3dpbmRvdyA9IG5ld3dpbihsaW5lcy0yLCBjb2x1bW5zLTIsIDIsIDEpOwotCWtleXBhZChtYWlu
X3dpbmRvdywgVFJVRSk7Ci0JbXdpbl9tYXhfbGluZXMgPSBsaW5lcy03OwotCW13aW5fbWF4X2Nv
bHMgPSBjb2x1bW5zLTY7Ci0KLQkvKiBwYW5lbHMgb3JkZXIgaXMgZnJvbSBib3R0b20gdG8gdG9w
ICovCi0JbmV3X3BhbmVsKG1haW5fd2luZG93KTsKLX0KLQotaW50IG1haW4oaW50IGFjLCBjaGFy
ICoqYXYpCi17Ci0JaW50IGxpbmVzLCBjb2x1bW5zOwotCWNoYXIgKm1vZGU7Ci0KLQlpZiAoYWMg
PiAxICYmIHN0cmNtcChhdlsxXSwgIi1zIikgPT0gMCkgewotCQkvKiBTaWxlbmNlIGNvbmZfcmVh
ZCgpIHVudGlsIHRoZSByZWFsIGNhbGxiYWNrIGlzIHNldCB1cCAqLwotCQljb25mX3NldF9tZXNz
YWdlX2NhbGxiYWNrKE5VTEwpOwotCQlhdisrOwotCX0KLQljb25mX3BhcnNlKGF2WzFdKTsKLQlj
b25mX3JlYWQoTlVMTCk7Ci0KLQltb2RlID0gZ2V0ZW52KCJOQ09ORklHX01PREUiKTsKLQlpZiAo
bW9kZSkgewotCQlpZiAoIXN0cmNhc2VjbXAobW9kZSwgInNpbmdsZV9tZW51IikpCi0JCQlzaW5n
bGVfbWVudV9tb2RlID0gMTsKLQl9Ci0KLQkvKiBJbml0aWFsaXplIGN1cnNlcyAqLwotCWluaXRz
Y3IoKTsKLQkvKiBzZXQgY29sb3IgdGhlbWUgKi8KLQlzZXRfY29sb3JzKCk7Ci0KLQljYnJlYWso
KTsKLQlub2VjaG8oKTsKLQlrZXlwYWQoc3Rkc2NyLCBUUlVFKTsKLQljdXJzX3NldCgwKTsKLQot
CWdldG1heHl4KHN0ZHNjciwgbGluZXMsIGNvbHVtbnMpOwotCWlmIChjb2x1bW5zIDwgNzUgfHwg
bGluZXMgPCAyMCkgewotCQllbmR3aW4oKTsKLQkJcHJpbnRmKCJZb3VyIHRlcm1pbmFsIHNob3Vs
ZCBoYXZlIGF0ICIKLQkJCSJsZWFzdCAyMCBsaW5lcyBhbmQgNzUgY29sdW1uc1xuIik7Ci0JCXJl
dHVybiAxOwotCX0KLQotCW5vdGltZW91dChzdGRzY3IsIEZBTFNFKTsKLSNpZiBOQ1VSU0VTX1JF
RU5UUkFOVAotCXNldF9lc2NkZWxheSgxKTsKLSNlbHNlCi0JRVNDREVMQVkgPSAxOwotI2VuZGlm
Ci0KLQkvKiBzZXQgYnRucyBtZW51ICovCi0JY3Vyc2VzX21lbnUgPSBuZXdfbWVudShjdXJzZXNf
bWVudV9pdGVtcyk7Ci0JbWVudV9vcHRzX29mZihjdXJzZXNfbWVudSwgT19TSE9XREVTQyk7Ci0J
bWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX1NIT1dNQVRDSCk7Ci0JbWVudV9vcHRzX29uKGN1
cnNlc19tZW51LCBPX09ORVZBTFVFKTsKLQltZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fTk9O
Q1lDTElDKTsKLQltZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fSUdOT1JFQ0FTRSk7Ci0Jc2V0
X21lbnVfbWFyayhjdXJzZXNfbWVudSwgIiAiKTsKLQlzZXRfbWVudV9mb3JlKGN1cnNlc19tZW51
LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9GT1JFXSk7Ci0Jc2V0X21lbnVfYmFjayhjdXJzZXNfbWVu
dSwgYXR0cmlidXRlc1tNQUlOX01FTlVfQkFDS10pOwotCXNldF9tZW51X2dyZXkoY3Vyc2VzX21l
bnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0dSRVldKTsKLQotCXNldF9jb25maWdfZmlsZW5hbWUo
Y29uZl9nZXRfY29uZmlnbmFtZSgpKTsKLQlzZXR1cF93aW5kb3dzKCk7Ci0KLQkvKiBjaGVjayBm
b3IgS0VZX0ZVTkMoMSkgKi8KLQlpZiAoaGFzX2tleShLRVlfRigxKSkgPT0gRkFMU0UpIHsKLQkJ
c2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAotCQkJCSJJbnN0cnVjdGlvbnMiLAotCQkJCW1l
bnVfbm9fZl9pbnN0cnVjdGlvbnMpOwotCX0KLQotCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2so
Y29uZl9tZXNzYWdlX2NhbGxiYWNrKTsKLQkvKiBkbyB0aGUgd29yayAqLwotCXdoaWxlICghZ2xv
YmFsX2V4aXQpIHsKLQkJY29uZigmcm9vdG1lbnUpOwotCQlpZiAoIWdsb2JhbF9leGl0ICYmIGRv
X2V4aXQoKSA9PSAwKQotCQkJYnJlYWs7Ci0JfQotCS8qIG9rLCB3ZSBhcmUgZG9uZSAqLwotCXVu
cG9zdF9tZW51KGN1cnNlc19tZW51KTsKLQlmcmVlX21lbnUoY3Vyc2VzX21lbnUpOwotCWRlbHdp
bihtYWluX3dpbmRvdyk7Ci0JY2xlYXIoKTsKLQlyZWZyZXNoKCk7Ci0JZW5kd2luKCk7Ci0JcmV0
dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1aS5jIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5ndWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNzdmNTI1YS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1
aS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjY0ICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA4IE5pciBUemFjaGFyIDxu
aXIudHphY2hhckBnbWFpbC5jb20+Ci0gKgotICogRGVyaXZlZCBmcm9tIG1lbnVjb25maWcuCi0g
Ki8KLSNpbmNsdWRlICJuY29uZi5oIgotI2luY2x1ZGUgImxrYy5oIgotCi0vKiBhIGxpc3Qgb2Yg
YWxsIHRoZSBkaWZmZXJlbnQgd2lkZ2V0cyB3ZSB1c2UgKi8KLWF0dHJpYnV0ZXNfdCBhdHRyaWJ1
dGVzW0FUVFJfTUFYKzFdID0gezB9OwotCi0vKiBhdmFpbGFibGUgY29sb3JzOgotICAgQ09MT1Jf
QkxBQ0sgICAwCi0gICBDT0xPUl9SRUQgICAgIDEKLSAgIENPTE9SX0dSRUVOICAgMgotICAgQ09M
T1JfWUVMTE9XICAzCi0gICBDT0xPUl9CTFVFICAgIDQKLSAgIENPTE9SX01BR0VOVEEgNQotICAg
Q09MT1JfQ1lBTiAgICA2Ci0gICBDT0xPUl9XSElURSAgIDcKLSAgICovCi1zdGF0aWMgdm9pZCBz
ZXRfbm9ybWFsX2NvbG9ycyh2b2lkKQotewotCWluaXRfcGFpcihOT1JNQUwsIC0xLCAtMSk7Ci0J
aW5pdF9wYWlyKE1BSU5fSEVBRElORywgQ09MT1JfTUFHRU5UQSwgLTEpOwotCi0JLyogRk9SRSBp
cyBmb3IgdGhlIHNlbGVjdGVkIGl0ZW0gKi8KLQlpbml0X3BhaXIoTUFJTl9NRU5VX0ZPUkUsIC0x
LCAtMSk7Ci0JLyogQkFDSyBmb3IgYWxsIHRoZSByZXN0ICovCi0JaW5pdF9wYWlyKE1BSU5fTUVO
VV9CQUNLLCAtMSwgLTEpOwotCWluaXRfcGFpcihNQUlOX01FTlVfR1JFWSwgLTEsIC0xKTsKLQlp
bml0X3BhaXIoTUFJTl9NRU5VX0hFQURJTkcsIENPTE9SX0dSRUVOLCAtMSk7Ci0JaW5pdF9wYWly
KE1BSU5fTUVOVV9CT1gsIENPTE9SX1lFTExPVywgLTEpOwotCi0JaW5pdF9wYWlyKFNDUk9MTFdJ
Tl9URVhULCAtMSwgLTEpOwotCWluaXRfcGFpcihTQ1JPTExXSU5fSEVBRElORywgQ09MT1JfR1JF
RU4sIC0xKTsKLQlpbml0X3BhaXIoU0NST0xMV0lOX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7Ci0K
LQlpbml0X3BhaXIoRElBTE9HX1RFWFQsIC0xLCAtMSk7Ci0JaW5pdF9wYWlyKERJQUxPR19CT1gs
IENPTE9SX1lFTExPVywgLTEpOwotCWluaXRfcGFpcihESUFMT0dfTUVOVV9CQUNLLCBDT0xPUl9Z
RUxMT1csIC0xKTsKLQlpbml0X3BhaXIoRElBTE9HX01FTlVfRk9SRSwgQ09MT1JfUkVELCAtMSk7
Ci0KLQlpbml0X3BhaXIoSU5QVVRfQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsKLQlpbml0X3BhaXIo
SU5QVVRfSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsKLQlpbml0X3BhaXIoSU5QVVRfVEVYVCwg
LTEsIC0xKTsKLQlpbml0X3BhaXIoSU5QVVRfRklFTEQsIC0xLCAtMSk7Ci0KLQlpbml0X3BhaXIo
RlVOQ1RJT05fSElHSExJR0hULCAtMSwgLTEpOwotCWluaXRfcGFpcihGVU5DVElPTl9URVhULCBD
T0xPUl9ZRUxMT1csIC0xKTsKLX0KLQotLyogYXZhaWxhYmxlIGF0dHJpYnV0ZXM6Ci0gICBBX05P
Uk1BTCAgICAgICAgTm9ybWFsIGRpc3BsYXkgKG5vIGhpZ2hsaWdodCkKLSAgIEFfU1RBTkRPVVQg
ICAgICBCZXN0IGhpZ2hsaWdodGluZyBtb2RlIG9mIHRoZSB0ZXJtaW5hbC4KLSAgIEFfVU5ERVJM
SU5FICAgICBVbmRlcmxpbmluZwotICAgQV9SRVZFUlNFICAgICAgIFJldmVyc2UgdmlkZW8KLSAg
IEFfQkxJTksgICAgICAgICBCbGlua2luZwotICAgQV9ESU0gICAgICAgICAgIEhhbGYgYnJpZ2h0
Ci0gICBBX0JPTEQgICAgICAgICAgRXh0cmEgYnJpZ2h0IG9yIGJvbGQKLSAgIEFfUFJPVEVDVCAg
ICAgICBQcm90ZWN0ZWQgbW9kZQotICAgQV9JTlZJUyAgICAgICAgIEludmlzaWJsZSBvciBibGFu
ayBtb2RlCi0gICBBX0FMVENIQVJTRVQgICAgQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQKLSAgIEFf
Q0hBUlRFWFQgICAgICBCaXQtbWFzayB0byBleHRyYWN0IGEgY2hhcmFjdGVyCi0gICBDT0xPUl9Q
QUlSKG4pICAgQ29sb3ItcGFpciBudW1iZXIgbgotICAgKi8KLXN0YXRpYyB2b2lkIG5vcm1hbF9j
b2xvcl90aGVtZSh2b2lkKQotewotCS8qIGF1dG9tYXRpY2FsbHkgYWRkIGNvbG9yLi4uICovCi0j
ZGVmaW5lIG1rYXR0cihuYW1lLCBhdHRyKSBkbyB7IFwKLWF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRy
IHwgQ09MT1JfUEFJUihuYW1lKTsgfSB3aGlsZSAoMCkKLQlta2F0dHIoTk9STUFMLCBOT1JNQUwp
OwotCW1rYXR0cihNQUlOX0hFQURJTkcsIEFfQk9MRCB8IEFfVU5ERVJMSU5FKTsKLQotCW1rYXR0
cihNQUlOX01FTlVfRk9SRSwgQV9SRVZFUlNFKTsKLQlta2F0dHIoTUFJTl9NRU5VX0JBQ0ssIEFf
Tk9STUFMKTsKLQlta2F0dHIoTUFJTl9NRU5VX0dSRVksIEFfTk9STUFMKTsKLQlta2F0dHIoTUFJ
Tl9NRU5VX0hFQURJTkcsIEFfQk9MRCk7Ci0JbWthdHRyKE1BSU5fTUVOVV9CT1gsIEFfTk9STUFM
KTsKLQotCW1rYXR0cihTQ1JPTExXSU5fVEVYVCwgQV9OT1JNQUwpOwotCW1rYXR0cihTQ1JPTExX
SU5fSEVBRElORywgQV9CT0xEKTsKLQlta2F0dHIoU0NST0xMV0lOX0JPWCwgQV9CT0xEKTsKLQot
CW1rYXR0cihESUFMT0dfVEVYVCwgQV9CT0xEKTsKLQlta2F0dHIoRElBTE9HX0JPWCwgQV9CT0xE
KTsKLQlta2F0dHIoRElBTE9HX01FTlVfRk9SRSwgQV9TVEFORE9VVCk7Ci0JbWthdHRyKERJQUxP
R19NRU5VX0JBQ0ssIEFfTk9STUFMKTsKLQotCW1rYXR0cihJTlBVVF9CT1gsIEFfTk9STUFMKTsK
LQlta2F0dHIoSU5QVVRfSEVBRElORywgQV9CT0xEKTsKLQlta2F0dHIoSU5QVVRfVEVYVCwgQV9O
T1JNQUwpOwotCW1rYXR0cihJTlBVVF9GSUVMRCwgQV9VTkRFUkxJTkUpOwotCi0JbWthdHRyKEZV
TkNUSU9OX0hJR0hMSUdIVCwgQV9CT0xEKTsKLQlta2F0dHIoRlVOQ1RJT05fVEVYVCwgQV9SRVZF
UlNFKTsKLX0KLQotc3RhdGljIHZvaWQgbm9fY29sb3JzX3RoZW1lKHZvaWQpCi17Ci0JLyogYXV0
b21hdGljYWxseSBhZGQgaGlnaGxpZ2h0LCBubyBjb2xvciAqLwotI2RlZmluZSBta2F0dHJuKG5h
bWUsIGF0dHIpIHsgYXR0cmlidXRlc1tuYW1lXSA9IGF0dHI7IH0KLQotCW1rYXR0cm4oTk9STUFM
LCBOT1JNQUwpOwotCW1rYXR0cm4oTUFJTl9IRUFESU5HLCBBX0JPTEQgfCBBX1VOREVSTElORSk7
Ci0KLQlta2F0dHJuKE1BSU5fTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsKLQlta2F0dHJuKE1BSU5f
TUVOVV9CQUNLLCBBX05PUk1BTCk7Ci0JbWthdHRybihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwp
OwotCW1rYXR0cm4oTUFJTl9NRU5VX0hFQURJTkcsIEFfQk9MRCk7Ci0JbWthdHRybihNQUlOX01F
TlVfQk9YLCBBX05PUk1BTCk7Ci0KLQlta2F0dHJuKFNDUk9MTFdJTl9URVhULCBBX05PUk1BTCk7
Ci0JbWthdHRybihTQ1JPTExXSU5fSEVBRElORywgQV9CT0xEKTsKLQlta2F0dHJuKFNDUk9MTFdJ
Tl9CT1gsIEFfQk9MRCk7Ci0KLQlta2F0dHJuKERJQUxPR19URVhULCBBX05PUk1BTCk7Ci0JbWth
dHRybihESUFMT0dfQk9YLCBBX0JPTEQpOwotCW1rYXR0cm4oRElBTE9HX01FTlVfRk9SRSwgQV9T
VEFORE9VVCk7Ci0JbWthdHRybihESUFMT0dfTUVOVV9CQUNLLCBBX05PUk1BTCk7Ci0KLQlta2F0
dHJuKElOUFVUX0JPWCwgQV9CT0xEKTsKLQlta2F0dHJuKElOUFVUX0hFQURJTkcsIEFfQk9MRCk7
Ci0JbWthdHRybihJTlBVVF9URVhULCBBX05PUk1BTCk7Ci0JbWthdHRybihJTlBVVF9GSUVMRCwg
QV9VTkRFUkxJTkUpOwotCi0JbWthdHRybihGVU5DVElPTl9ISUdITElHSFQsIEFfQk9MRCk7Ci0J
bWthdHRybihGVU5DVElPTl9URVhULCBBX1JFVkVSU0UpOwotfQotCi12b2lkIHNldF9jb2xvcnMo
dm9pZCkKLXsKLQlzdGFydF9jb2xvcigpOwotCXVzZV9kZWZhdWx0X2NvbG9ycygpOwotCXNldF9u
b3JtYWxfY29sb3JzKCk7Ci0JaWYgKGhhc19jb2xvcnMoKSkgewotCQlub3JtYWxfY29sb3JfdGhl
bWUoKTsKLQl9IGVsc2UgewotCQkvKiBnaXZlIGRlZmF1bHRzICovCi0JCW5vX2NvbG9yc190aGVt
ZSgpOwotCX0KLX0KLQotCi0vKiB0aGlzIGNoYW5nZXMgdGhlIHdpbmRvd3MgYXR0cmlidXRlcyAh
ISEgKi8KLXZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLAotCQlpbnQgc3RhcnR5LAot
CQlpbnQgc3RhcnR4LAotCQlpbnQgd2lkdGgsCi0JCWNvbnN0IGNoYXIgKnN0cmluZywKLQkJY2h0
eXBlIGNvbG9yKQoteyAgICAgIGludCBsZW5ndGgsIHgsIHk7Ci0JZmxvYXQgdGVtcDsKLQotCi0J
aWYgKHdpbiA9PSBOVUxMKQotCQl3aW4gPSBzdGRzY3I7Ci0JZ2V0eXgod2luLCB5LCB4KTsKLQlp
ZiAoc3RhcnR4ICE9IDApCi0JCXggPSBzdGFydHg7Ci0JaWYgKHN0YXJ0eSAhPSAwKQotCQl5ID0g
c3RhcnR5OwotCWlmICh3aWR0aCA9PSAwKQotCQl3aWR0aCA9IDgwOwotCi0JbGVuZ3RoID0gc3Ry
bGVuKHN0cmluZyk7Ci0JdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkgLyAyOwotCXggPSBzdGFydHgg
KyAoaW50KXRlbXA7Ci0JKHZvaWQpIHdhdHRyc2V0KHdpbiwgY29sb3IpOwotCW12d3ByaW50dyh3
aW4sIHksIHgsICIlcyIsIHN0cmluZyk7Ci0JcmVmcmVzaCgpOwotfQotCi1pbnQgZ2V0X2xpbmVf
bm8oY29uc3QgY2hhciAqdGV4dCkKLXsKLQlpbnQgaTsKLQlpbnQgdG90YWwgPSAxOwotCi0JaWYg
KCF0ZXh0KQotCQlyZXR1cm4gMDsKLQotCWZvciAoaSA9IDA7IHRleHRbaV0gIT0gJ1wwJzsgaSsr
KQotCQlpZiAodGV4dFtpXSA9PSAnXG4nKQotCQkJdG90YWwrKzsKLQlyZXR1cm4gdG90YWw7Ci19
Ci0KLWNvbnN0IGNoYXIgKmdldF9saW5lKGNvbnN0IGNoYXIgKnRleHQsIGludCBsaW5lX25vKQot
ewotCWludCBpOwotCWludCBsaW5lcyA9IDA7Ci0KLQlpZiAoIXRleHQpCi0JCXJldHVybiBOVUxM
OwotCi0JZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAnICYmIGxpbmVzIDwgbGluZV9ubzsgaSsr
KQotCQlpZiAodGV4dFtpXSA9PSAnXG4nKQotCQkJbGluZXMrKzsKLQlyZXR1cm4gdGV4dCtpOwot
fQotCi1pbnQgZ2V0X2xpbmVfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmUpCi17Ci0JaW50IHJlcyA9
IDA7Ci0Jd2hpbGUgKCpsaW5lICE9ICdcMCcgJiYgKmxpbmUgIT0gJ1xuJykgewotCQlsaW5lKys7
Ci0JCXJlcysrOwotCX0KLQlyZXR1cm4gcmVzOwotfQotCi0vKiBwcmludCBhbGwgbGluZXMgdG8g
dGhlIHdpbmRvdy4gKi8KLXZvaWQgZmlsbF93aW5kb3coV0lORE9XICp3aW4sIGNvbnN0IGNoYXIg
KnRleHQpCi17Ci0JaW50IHgsIHk7Ci0JaW50IHRvdGFsX2xpbmVzID0gZ2V0X2xpbmVfbm8odGV4
dCk7Ci0JaW50IGk7Ci0KLQlnZXRtYXh5eCh3aW4sIHksIHgpOwotCS8qIGRvIG5vdCBnbyBvdmVy
IGVuZCBvZiBsaW5lICovCi0JdG90YWxfbGluZXMgPSBtaW4odG90YWxfbGluZXMsIHkpOwotCWZv
ciAoaSA9IDA7IGkgPCB0b3RhbF9saW5lczsgaSsrKSB7Ci0JCWNoYXIgdG1wW3grMTBdOwotCQlj
b25zdCBjaGFyICpsaW5lID0gZ2V0X2xpbmUodGV4dCwgaSk7Ci0JCWludCBsZW4gPSBnZXRfbGlu
ZV9sZW5ndGgobGluZSk7Ci0JCXN0cm5jcHkodG1wLCBsaW5lLCBtaW4obGVuLCB4KSk7Ci0JCXRt
cFtsZW5dID0gJ1wwJzsKLQkJbXZ3cHJpbnR3KHdpbiwgaSwgMCwgIiVzIiwgdG1wKTsKLQl9Ci19
Ci0KLS8qIGdldCB0aGUgbWVzc2FnZSwgYW5kIGJ1dHRvbnMuCi0gKiBlYWNoIGJ1dHRvbiBtdXN0
IGJlIGEgY2hhcioKLSAqIHJldHVybiB0aGUgc2VsZWN0ZWQgYnV0dG9uCi0gKgotICogdGhpcyBk
aWFsb2cgaXMgdXNlZCBmb3IgMiBkaWZmZXJlbnQgdGhpbmdzOgotICogMSkgc2hvdyBhIHRleHQg
Ym94LCBubyBidXR0b25zLgotICogMikgc2hvdyBhIGRpYWxvZywgd2l0aCBob3Jpem9udGFsIGJ1
dHRvbnMKLSAqLwotaW50IGJ0bl9kaWFsb2coV0lORE9XICptYWluX3dpbmRvdywgY29uc3QgY2hh
ciAqbXNnLCBpbnQgYnRuX251bSwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0JY2hhciAqYnRuOwot
CWludCBidG5zX3dpZHRoID0gMDsKLQlpbnQgbXNnX2xpbmVzID0gMDsKLQlpbnQgbXNnX3dpZHRo
ID0gMDsKLQlpbnQgdG90YWxfd2lkdGg7Ci0JaW50IHdpbl9yb3dzID0gMDsKLQlXSU5ET1cgKndp
bjsKLQlXSU5ET1cgKm1zZ193aW47Ci0JV0lORE9XICptZW51X3dpbjsKLQlNRU5VICptZW51Owot
CUlURU0gKmJ0bnNbYnRuX251bSsxXTsKLQlpbnQgaSwgeCwgeTsKLQlpbnQgcmVzID0gLTE7Ci0K
LQotCXZhX3N0YXJ0KGFwLCBidG5fbnVtKTsKLQlmb3IgKGkgPSAwOyBpIDwgYnRuX251bTsgaSsr
KSB7Ci0JCWJ0biA9IHZhX2FyZyhhcCwgY2hhciAqKTsKLQkJYnRuc1tpXSA9IG5ld19pdGVtKGJ0
biwgIiIpOwotCQlidG5zX3dpZHRoICs9IHN0cmxlbihidG4pKzE7Ci0JfQotCXZhX2VuZChhcCk7
Ci0JYnRuc1tidG5fbnVtXSA9IE5VTEw7Ci0KLQkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBt
c2c6ICovCi0JbXNnX2xpbmVzID0gZ2V0X2xpbmVfbm8obXNnKTsKLQlmb3IgKGkgPSAwOyBpIDwg
bXNnX2xpbmVzOyBpKyspIHsKLQkJY29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKG1zZywgaSk7
Ci0JCWludCBsZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7Ci0JCWlmIChtc2dfd2lkdGggPCBs
ZW4pCi0JCQltc2dfd2lkdGggPSBsZW47Ci0JfQotCi0JdG90YWxfd2lkdGggPSBtYXgobXNnX3dp
ZHRoLCBidG5zX3dpZHRoKTsKLQkvKiBwbGFjZSBkaWFsb2cgaW4gbWlkZGxlIG9mIHNjcmVlbiAq
LwotCXkgPSAoZ2V0bWF4eShzdGRzY3IpLShtc2dfbGluZXMrNCkpLzI7Ci0JeCA9IChnZXRtYXh4
KHN0ZHNjciktKHRvdGFsX3dpZHRoKzQpKS8yOwotCi0KLQkvKiBjcmVhdGUgdGhlIHdpbmRvd3Mg
Ki8KLQlpZiAoYnRuX251bSA+IDApCi0JCXdpbl9yb3dzID0gbXNnX2xpbmVzKzQ7Ci0JZWxzZQot
CQl3aW5fcm93cyA9IG1zZ19saW5lcysyOwotCi0Jd2luID0gbmV3d2luKHdpbl9yb3dzLCB0b3Rh
bF93aWR0aCs0LCB5LCB4KTsKLQlrZXlwYWQod2luLCBUUlVFKTsKLQltZW51X3dpbiA9IGRlcndp
bih3aW4sIDEsIGJ0bnNfd2lkdGgsIHdpbl9yb3dzLTIsCi0JCQkxKyh0b3RhbF93aWR0aCsyLWJ0
bnNfd2lkdGgpLzIpOwotCW1lbnUgPSBuZXdfbWVudShidG5zKTsKLQltc2dfd2luID0gZGVyd2lu
KHdpbiwgd2luX3Jvd3MtMiwgbXNnX3dpZHRoLCAxLAotCQkJMSsodG90YWxfd2lkdGgrMi1tc2df
d2lkdGgpLzIpOwotCi0Jc2V0X21lbnVfZm9yZShtZW51LCBhdHRyaWJ1dGVzW0RJQUxPR19NRU5V
X0ZPUkVdKTsKLQlzZXRfbWVudV9iYWNrKG1lbnUsIGF0dHJpYnV0ZXNbRElBTE9HX01FTlVfQkFD
S10pOwotCi0JKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tESUFMT0dfQk9YXSk7Ci0J
Ym94KHdpbiwgMCwgMCk7Ci0KLQkvKiBwcmludCBtZXNzYWdlICovCi0JKHZvaWQpIHdhdHRyc2V0
KG1zZ193aW4sIGF0dHJpYnV0ZXNbRElBTE9HX1RFWFRdKTsKLQlmaWxsX3dpbmRvdyhtc2dfd2lu
LCBtc2cpOwotCi0Jc2V0X21lbnVfd2luKG1lbnUsIHdpbik7Ci0Jc2V0X21lbnVfc3ViKG1lbnUs
IG1lbnVfd2luKTsKLQlzZXRfbWVudV9mb3JtYXQobWVudSwgMSwgYnRuX251bSk7Ci0JbWVudV9v
cHRzX29mZihtZW51LCBPX1NIT1dERVNDKTsKLQltZW51X29wdHNfb2ZmKG1lbnUsIE9fU0hPV01B
VENIKTsKLQltZW51X29wdHNfb24obWVudSwgT19PTkVWQUxVRSk7Ci0JbWVudV9vcHRzX29uKG1l
bnUsIE9fTk9OQ1lDTElDKTsKLQlzZXRfbWVudV9tYXJrKG1lbnUsICIiKTsKLQlwb3N0X21lbnUo
bWVudSk7Ci0KLQotCXRvdWNod2luKHdpbik7Ci0JcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dp
bmRvdyk7Ci0Jd2hpbGUgKChyZXMgPSB3Z2V0Y2god2luKSkpIHsKLQkJc3dpdGNoIChyZXMpIHsK
LQkJY2FzZSBLRVlfTEVGVDoKLQkJCW1lbnVfZHJpdmVyKG1lbnUsIFJFUV9MRUZUX0lURU0pOwot
CQkJYnJlYWs7Ci0JCWNhc2UgS0VZX1JJR0hUOgotCQkJbWVudV9kcml2ZXIobWVudSwgUkVRX1JJ
R0hUX0lURU0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTA6IC8qIEVOVEVSICovCi0JCWNhc2UgMjc6
IC8qIEVTQ0FQRSAqLwotCQljYXNlICcgJzoKLQkJY2FzZSBLRVlfRihGX0JBQ0spOgotCQljYXNl
IEtFWV9GKEZfRVhJVCk6Ci0JCQlicmVhazsKLQkJfQotCQl0b3VjaHdpbih3aW4pOwotCQlyZWZy
ZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKLQotCQlpZiAocmVzID09IDEwIHx8IHJlcyA9
PSAnICcpIHsKLQkJCXJlcyA9IGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKG1lbnUpKTsKLQkJCWJy
ZWFrOwotCQl9IGVsc2UgaWYgKHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0YoRl9CQUNLKSB8fAot
CQkJCXJlcyA9PSBLRVlfRihGX0VYSVQpKSB7Ci0JCQlyZXMgPSBLRVlfRVhJVDsKLQkJCWJyZWFr
OwotCQl9Ci0JfQotCi0JdW5wb3N0X21lbnUobWVudSk7Ci0JZnJlZV9tZW51KG1lbnUpOwotCWZv
ciAoaSA9IDA7IGkgPCBidG5fbnVtOyBpKyspCi0JCWZyZWVfaXRlbShidG5zW2ldKTsKLQotCWRl
bHdpbih3aW4pOwotCXJldHVybiByZXM7Ci19Ci0KLWludCBkaWFsb2dfaW5wdXRib3goV0lORE9X
ICptYWluX3dpbmRvdywKLQkJY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwK
LQkJY29uc3QgY2hhciAqaW5pdCwgY2hhciAqKnJlc3VsdHAsIGludCAqcmVzdWx0X2xlbikKLXsK
LQlpbnQgcHJvbXB0X2xpbmVzID0gMDsKLQlpbnQgcHJvbXB0X3dpZHRoID0gMDsKLQlXSU5ET1cg
KndpbjsKLQlXSU5ET1cgKnByb21wdF93aW47Ci0JV0lORE9XICpmb3JtX3dpbjsKLQlQQU5FTCAq
cGFuZWw7Ci0JaW50IGksIHgsIHksIGxpbmVzLCBjb2x1bW5zLCB3aW5fbGluZXMsIHdpbl9jb2xz
OwotCWludCByZXMgPSAtMTsKLQlpbnQgY3Vyc29yX3Bvc2l0aW9uID0gc3RybGVuKGluaXQpOwot
CWludCBjdXJzb3JfZm9ybV93aW47Ci0JY2hhciAqcmVzdWx0ID0gKnJlc3VsdHA7Ci0KLQlnZXRt
YXh5eChzdGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsKLQotCWlmIChzdHJsZW4oaW5pdCkrMSA+ICpy
ZXN1bHRfbGVuKSB7Ci0JCSpyZXN1bHRfbGVuID0gc3RybGVuKGluaXQpKzE7Ci0JCSpyZXN1bHRw
ID0gcmVzdWx0ID0geHJlYWxsb2MocmVzdWx0LCAqcmVzdWx0X2xlbik7Ci0JfQotCi0JLyogZmlu
ZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLwotCXByb21wdF9saW5lcyA9IGdldF9saW5lX25v
KHByb21wdCk7Ci0JZm9yIChpID0gMDsgaSA8IHByb21wdF9saW5lczsgaSsrKSB7Ci0JCWNvbnN0
IGNoYXIgKmxpbmUgPSBnZXRfbGluZShwcm9tcHQsIGkpOwotCQlpbnQgbGVuID0gZ2V0X2xpbmVf
bGVuZ3RoKGxpbmUpOwotCQlwcm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBsZW4pOwot
CX0KLQotCWlmICh0aXRsZSkKLQkJcHJvbXB0X3dpZHRoID0gbWF4KHByb21wdF93aWR0aCwgc3Ry
bGVuKHRpdGxlKSk7Ci0KLQl3aW5fbGluZXMgPSBtaW4ocHJvbXB0X2xpbmVzKzYsIGxpbmVzLTIp
OwotCXdpbl9jb2xzID0gbWluKHByb21wdF93aWR0aCs3LCBjb2x1bW5zLTIpOwotCXByb21wdF9s
aW5lcyA9IG1heCh3aW5fbGluZXMtNiwgMCk7Ci0JcHJvbXB0X3dpZHRoID0gbWF4KHdpbl9jb2xz
LTcsIDApOwotCi0JLyogcGxhY2UgZGlhbG9nIGluIG1pZGRsZSBvZiBzY3JlZW4gKi8KLQl5ID0g
KGxpbmVzLXdpbl9saW5lcykvMjsKLQl4ID0gKGNvbHVtbnMtd2luX2NvbHMpLzI7Ci0KLQlzdHJu
Y3B5KHJlc3VsdCwgaW5pdCwgKnJlc3VsdF9sZW4pOwotCi0JLyogY3JlYXRlIHRoZSB3aW5kb3dz
ICovCi0Jd2luID0gbmV3d2luKHdpbl9saW5lcywgd2luX2NvbHMsIHksIHgpOwotCXByb21wdF93
aW4gPSBkZXJ3aW4od2luLCBwcm9tcHRfbGluZXMrMSwgcHJvbXB0X3dpZHRoLCAyLCAyKTsKLQlm
b3JtX3dpbiA9IGRlcndpbih3aW4sIDEsIHByb21wdF93aWR0aCwgcHJvbXB0X2xpbmVzKzMsIDIp
OwotCWtleXBhZChmb3JtX3dpbiwgVFJVRSk7Ci0KLQkodm9pZCkgd2F0dHJzZXQoZm9ybV93aW4s
IGF0dHJpYnV0ZXNbSU5QVVRfRklFTERdKTsKLQotCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJp
YnV0ZXNbSU5QVVRfQk9YXSk7Ci0JYm94KHdpbiwgMCwgMCk7Ci0JKHZvaWQpIHdhdHRyc2V0KHdp
biwgYXR0cmlidXRlc1tJTlBVVF9IRUFESU5HXSk7Ci0JaWYgKHRpdGxlKQotCQltdndwcmludHco
d2luLCAwLCAzLCAiJXMiLCB0aXRsZSk7Ci0KLQkvKiBwcmludCBtZXNzYWdlICovCi0JKHZvaWQp
IHdhdHRyc2V0KHByb21wdF93aW4sIGF0dHJpYnV0ZXNbSU5QVVRfVEVYVF0pOwotCWZpbGxfd2lu
ZG93KHByb21wdF93aW4sIHByb21wdCk7Ci0KLQltdndwcmludHcoZm9ybV93aW4sIDAsIDAsICIl
KnMiLCBwcm9tcHRfd2lkdGgsICIgIik7Ci0JY3Vyc29yX2Zvcm1fd2luID0gbWluKGN1cnNvcl9w
b3NpdGlvbiwgcHJvbXB0X3dpZHRoLTEpOwotCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiVz
IiwKLQkJICByZXN1bHQgKyBjdXJzb3JfcG9zaXRpb24tY3Vyc29yX2Zvcm1fd2luKTsKLQotCS8q
IGNyZWF0ZSBwYW5lbHMgKi8KLQlwYW5lbCA9IG5ld19wYW5lbCh3aW4pOwotCi0JLyogc2hvdyB0
aGUgY3Vyc29yICovCi0JY3Vyc19zZXQoMSk7Ci0KLQl0b3VjaHdpbih3aW4pOwotCXJlZnJlc2hf
YWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOwotCXdoaWxlICgocmVzID0gd2dldGNoKGZvcm1fd2lu
KSkpIHsKLQkJaW50IGxlbiA9IHN0cmxlbihyZXN1bHQpOwotCQlzd2l0Y2ggKHJlcykgewotCQlj
YXNlIDEwOiAvKiBFTlRFUiAqLwotCQljYXNlIDI3OiAvKiBFU0NBUEUgKi8KLQkJY2FzZSBLRVlf
RihGX0hFTFApOgotCQljYXNlIEtFWV9GKEZfRVhJVCk6Ci0JCWNhc2UgS0VZX0YoRl9CQUNLKToK
LQkJCWJyZWFrOwotCQljYXNlIDg6ICAgLyogXkggKi8KLQkJY2FzZSAxMjc6IC8qIF4/ICovCi0J
CWNhc2UgS0VZX0JBQ0tTUEFDRToKLQkJCWlmIChjdXJzb3JfcG9zaXRpb24gPiAwKSB7Ci0JCQkJ
bWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbi0xXSwKLQkJCQkJCSZyZXN1bHRbY3Vyc29y
X3Bvc2l0aW9uXSwKLQkJCQkJCWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7Ci0JCQkJY3Vyc29yX3Bv
c2l0aW9uLS07Ci0JCQkJY3Vyc29yX2Zvcm1fd2luLS07Ci0JCQkJbGVuLS07Ci0JCQl9Ci0JCQli
cmVhazsKLQkJY2FzZSBLRVlfREM6Ci0JCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID49IDAgJiYgY3Vy
c29yX3Bvc2l0aW9uIDwgbGVuKSB7Ci0JCQkJbWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlv
bl0sCi0JCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbisxXSwKLQkJCQkJCWxlbi1jdXJzb3Jf
cG9zaXRpb24rMSk7Ci0JCQkJbGVuLS07Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfVVA6
Ci0JCWNhc2UgS0VZX1JJR0hUOgotCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA8IGxlbikgewotCQkJ
CWN1cnNvcl9wb3NpdGlvbisrOwotCQkJCWN1cnNvcl9mb3JtX3dpbisrOwotCQkJfQotCQkJYnJl
YWs7Ci0JCWNhc2UgS0VZX0RPV046Ci0JCWNhc2UgS0VZX0xFRlQ6Ci0JCQlpZiAoY3Vyc29yX3Bv
c2l0aW9uID4gMCkgewotCQkJCWN1cnNvcl9wb3NpdGlvbi0tOwotCQkJCWN1cnNvcl9mb3JtX3dp
bi0tOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX0hPTUU6Ci0JCQljdXJzb3JfcG9zaXRp
b24gPSAwOwotCQkJY3Vyc29yX2Zvcm1fd2luID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIEtFWV9F
TkQ6Ci0JCQljdXJzb3JfcG9zaXRpb24gPSBsZW47Ci0JCQljdXJzb3JfZm9ybV93aW4gPSBtaW4o
Y3Vyc29yX3Bvc2l0aW9uLCBwcm9tcHRfd2lkdGgtMSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoK
LQkJCWlmICgoaXNncmFwaChyZXMpIHx8IGlzc3BhY2UocmVzKSkpIHsKLQkJCQkvKiBvbmUgZm9y
IG5ldyBjaGFyLCBvbmUgZm9yICdcMCcgKi8KLQkJCQlpZiAobGVuKzIgPiAqcmVzdWx0X2xlbikg
ewotCQkJCQkqcmVzdWx0X2xlbiA9IGxlbisyOwotCQkJCQkqcmVzdWx0cCA9IHJlc3VsdCA9IHJl
YWxsb2MocmVzdWx0LAotCQkJCQkJCQkqcmVzdWx0X2xlbik7Ci0JCQkJfQotCQkJCS8qIGluc2Vy
dCB0aGUgY2hhciBhdCB0aGUgcHJvcGVyIHBvc2l0aW9uICovCi0JCQkJbWVtbW92ZSgmcmVzdWx0
W2N1cnNvcl9wb3NpdGlvbisxXSwKLQkJCQkJCSZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uXSwKLQkJ
CQkJCWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7Ci0JCQkJcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0g
PSByZXM7Ci0JCQkJY3Vyc29yX3Bvc2l0aW9uKys7Ci0JCQkJY3Vyc29yX2Zvcm1fd2luKys7Ci0J
CQkJbGVuKys7Ci0JCQl9IGVsc2UgewotCQkJCW12cHJpbnR3KDAsIDAsICJ1bmtub3duIGtleTog
JWRcbiIsIHJlcyk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoY3Vyc29yX2Zvcm1fd2lu
IDwgMCkKLQkJCWN1cnNvcl9mb3JtX3dpbiA9IDA7Ci0JCWVsc2UgaWYgKGN1cnNvcl9mb3JtX3dp
biA+IHByb21wdF93aWR0aC0xKQotCQkJY3Vyc29yX2Zvcm1fd2luID0gcHJvbXB0X3dpZHRoLTE7
Ci0KLQkJd21vdmUoZm9ybV93aW4sIDAsIDApOwotCQl3Y2xydG9lb2woZm9ybV93aW4pOwotCQlt
dndwcmludHcoZm9ybV93aW4sIDAsIDAsICIlKnMiLCBwcm9tcHRfd2lkdGgsICIgIik7Ci0JCW12
d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiVzIiwKLQkJCXJlc3VsdCArIGN1cnNvcl9wb3NpdGlv
bi1jdXJzb3JfZm9ybV93aW4pOwotCQl3bW92ZShmb3JtX3dpbiwgMCwgY3Vyc29yX2Zvcm1fd2lu
KTsKLQkJdG91Y2h3aW4od2luKTsKLQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7
Ci0KLQkJaWYgKHJlcyA9PSAxMCkgewotCQkJcmVzID0gMDsKLQkJCWJyZWFrOwotCQl9IGVsc2Ug
aWYgKHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0YoRl9CQUNLKSB8fAotCQkJCXJlcyA9PSBLRVlf
RihGX0VYSVQpKSB7Ci0JCQlyZXMgPSBLRVlfRVhJVDsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYg
KHJlcyA9PSBLRVlfRihGX0hFTFApKSB7Ci0JCQlyZXMgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9
Ci0KLQkvKiBoaWRlIHRoZSBjdXJzb3IgKi8KLQljdXJzX3NldCgwKTsKLQlkZWxfcGFuZWwocGFu
ZWwpOwotCWRlbHdpbihwcm9tcHRfd2luKTsKLQlkZWx3aW4oZm9ybV93aW4pOwotCWRlbHdpbih3
aW4pOwotCXJldHVybiByZXM7Ci19Ci0KLS8qIHJlZnJlc2ggYWxsIHdpbmRvd3MgaW4gdGhlIGNv
cnJlY3Qgb3JkZXIgKi8KLXZvaWQgcmVmcmVzaF9hbGxfd2luZG93cyhXSU5ET1cgKm1haW5fd2lu
ZG93KQotewotCXVwZGF0ZV9wYW5lbHMoKTsKLQl0b3VjaHdpbihtYWluX3dpbmRvdyk7Ci0JcmVm
cmVzaCgpOwotfQotCi0vKiBsYXltYW4ncyBzY3JvbGxhYmxlIHdpbmRvdy4uLiAqLwotdm9pZCBz
aG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywKLQkJY29uc3QgY2hhciAqdGl0bGUs
Ci0JCWNvbnN0IGNoYXIgKnRleHQpCi17Ci0JaW50IHJlczsKLQlpbnQgdG90YWxfbGluZXMgPSBn
ZXRfbGluZV9ubyh0ZXh0KTsKLQlpbnQgeCwgeSwgbGluZXMsIGNvbHVtbnM7Ci0JaW50IHN0YXJ0
X3ggPSAwLCBzdGFydF95ID0gMDsKLQlpbnQgdGV4dF9saW5lcyA9IDAsIHRleHRfY29scyA9IDA7
Ci0JaW50IHRvdGFsX2NvbHMgPSAwOwotCWludCB3aW5fY29scyA9IDA7Ci0JaW50IHdpbl9saW5l
cyA9IDA7Ci0JaW50IGkgPSAwOwotCVdJTkRPVyAqd2luOwotCVdJTkRPVyAqcGFkOwotCVBBTkVM
ICpwYW5lbDsKLQotCWdldG1heHl4KHN0ZHNjciwgbGluZXMsIGNvbHVtbnMpOwotCi0JLyogZmlu
ZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLwotCXRvdGFsX2xpbmVzID0gZ2V0X2xpbmVfbm8o
dGV4dCk7Ci0JZm9yIChpID0gMDsgaSA8IHRvdGFsX2xpbmVzOyBpKyspIHsKLQkJY29uc3QgY2hh
ciAqbGluZSA9IGdldF9saW5lKHRleHQsIGkpOwotCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3Ro
KGxpbmUpOwotCQl0b3RhbF9jb2xzID0gbWF4KHRvdGFsX2NvbHMsIGxlbisyKTsKLQl9Ci0KLQkv
KiBjcmVhdGUgdGhlIHBhZCAqLwotCXBhZCA9IG5ld3BhZCh0b3RhbF9saW5lcysxMCwgdG90YWxf
Y29scysxMCk7Ci0JKHZvaWQpIHdhdHRyc2V0KHBhZCwgYXR0cmlidXRlc1tTQ1JPTExXSU5fVEVY
VF0pOwotCWZpbGxfd2luZG93KHBhZCwgdGV4dCk7Ci0KLQl3aW5fbGluZXMgPSBtaW4odG90YWxf
bGluZXMrNCwgbGluZXMtMik7Ci0Jd2luX2NvbHMgPSBtaW4odG90YWxfY29scysyLCBjb2x1bW5z
LTIpOwotCXRleHRfbGluZXMgPSBtYXgod2luX2xpbmVzLTQsIDApOwotCXRleHRfY29scyA9IG1h
eCh3aW5fY29scy0yLCAwKTsKLQotCS8qIHBsYWNlIHdpbmRvdyBpbiBtaWRkbGUgb2Ygc2NyZWVu
ICovCi0JeSA9IChsaW5lcy13aW5fbGluZXMpLzI7Ci0JeCA9IChjb2x1bW5zLXdpbl9jb2xzKS8y
OwotCi0Jd2luID0gbmV3d2luKHdpbl9saW5lcywgd2luX2NvbHMsIHksIHgpOwotCWtleXBhZCh3
aW4sIFRSVUUpOwotCS8qIHNob3cgdGhlIGhlbHAgaW4gdGhlIGhlbHAgd2luZG93LCBhbmQgc2hv
dyB0aGUgaGVscCBwYW5lbCAqLwotCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJpYnV0ZXNbU0NS
T0xMV0lOX0JPWF0pOwotCWJveCh3aW4sIDAsIDApOwotCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0
dHJpYnV0ZXNbU0NST0xMV0lOX0hFQURJTkddKTsKLQltdndwcmludHcod2luLCAwLCAzLCAiICVz
ICIsIHRpdGxlKTsKLQlwYW5lbCA9IG5ld19wYW5lbCh3aW4pOwotCi0JLyogaGFuZGxlIHNjcm9s
bGluZyAqLwotCWRvIHsKLQotCQljb3B5d2luKHBhZCwgd2luLCBzdGFydF95LCBzdGFydF94LCAy
LCAyLCB0ZXh0X2xpbmVzLAotCQkJCXRleHRfY29scywgMCk7Ci0JCXByaW50X2luX21pZGRsZSh3
aW4sCi0JCQkJdGV4dF9saW5lcysyLAotCQkJCTAsCi0JCQkJdGV4dF9jb2xzLAotCQkJCSI8T0s+
IiwKLQkJCQlhdHRyaWJ1dGVzW0RJQUxPR19NRU5VX0ZPUkVdKTsKLQkJd3JlZnJlc2god2luKTsK
LQotCQlyZXMgPSB3Z2V0Y2god2luKTsKLQkJc3dpdGNoIChyZXMpIHsKLQkJY2FzZSBLRVlfTlBB
R0U6Ci0JCWNhc2UgJyAnOgotCQljYXNlICdkJzoKLQkJCXN0YXJ0X3kgKz0gdGV4dF9saW5lcy0y
OwotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX1BQQUdFOgotCQljYXNlICd1JzoKLQkJCXN0YXJ0X3kg
LT0gdGV4dF9saW5lcysyOwotCQkJYnJlYWs7Ci0JCWNhc2UgS0VZX0hPTUU6Ci0JCQlzdGFydF95
ID0gMDsKLQkJCWJyZWFrOwotCQljYXNlIEtFWV9FTkQ6Ci0JCQlzdGFydF95ID0gdG90YWxfbGlu
ZXMtdGV4dF9saW5lczsKLQkJCWJyZWFrOwotCQljYXNlIEtFWV9ET1dOOgotCQljYXNlICdqJzoK
LQkJCXN0YXJ0X3krKzsKLQkJCWJyZWFrOwotCQljYXNlIEtFWV9VUDoKLQkJY2FzZSAnayc6Ci0J
CQlzdGFydF95LS07Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfTEVGVDoKLQkJY2FzZSAnaCc6Ci0J
CQlzdGFydF94LS07Ci0JCQlicmVhazsKLQkJY2FzZSBLRVlfUklHSFQ6Ci0JCWNhc2UgJ2wnOgot
CQkJc3RhcnRfeCsrOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0g
MjcgfHwgcmVzID09ICdxJyB8fAotCQkJcmVzID09IEtFWV9GKEZfSEVMUCkgfHwgcmVzID09IEtF
WV9GKEZfQkFDSykgfHwKLQkJCXJlcyA9PSBLRVlfRihGX0VYSVQpKQotCQkJYnJlYWs7Ci0JCWlm
IChzdGFydF95IDwgMCkKLQkJCXN0YXJ0X3kgPSAwOwotCQlpZiAoc3RhcnRfeSA+PSB0b3RhbF9s
aW5lcy10ZXh0X2xpbmVzKQotCQkJc3RhcnRfeSA9IHRvdGFsX2xpbmVzLXRleHRfbGluZXM7Ci0J
CWlmIChzdGFydF94IDwgMCkKLQkJCXN0YXJ0X3ggPSAwOwotCQlpZiAoc3RhcnRfeCA+PSB0b3Rh
bF9jb2xzLXRleHRfY29scykKLQkJCXN0YXJ0X3ggPSB0b3RhbF9jb2xzLXRleHRfY29sczsKLQl9
IHdoaWxlIChyZXMpOwotCi0JZGVsX3BhbmVsKHBhbmVsKTsKLQlkZWx3aW4od2luKTsKLQlyZWZy
ZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsKLX0KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbmNvbmYuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggZmE1MjQ1ZS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L25jb25mLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBO
aXIgVHphY2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPgotICoKLSAqIERlcml2ZWQgZnJvbSBt
ZW51Y29uZmlnLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+
Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpbmNsdWRlIDxzdGRh
cmcuaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRl
IDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxuY3Vyc2VzLmg+Ci0jaW5jbHVkZSA8bWVudS5oPgotI2lu
Y2x1ZGUgPHBhbmVsLmg+Ci0jaW5jbHVkZSA8Zm9ybS5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4K
LSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLQotI2RlZmluZSBtYXgo
YSwgYikgKHtcCi0JCXR5cGVvZihhKSBfYSA9IGE7XAotCQl0eXBlb2YoYikgX2IgPSBiO1wKLQkJ
X2EgPiBfYiA/IF9hIDogX2I7IH0pCi0KLSNkZWZpbmUgbWluKGEsIGIpICh7XAotCQl0eXBlb2Yo
YSkgX2EgPSBhO1wKLQkJdHlwZW9mKGIpIF9iID0gYjtcCi0JCV9hIDwgX2IgPyBfYSA6IF9iOyB9
KQotCi10eXBlZGVmIGVudW0gewotCU5PUk1BTCA9IDEsCi0JTUFJTl9IRUFESU5HLAotCU1BSU5f
TUVOVV9CT1gsCi0JTUFJTl9NRU5VX0ZPUkUsCi0JTUFJTl9NRU5VX0JBQ0ssCi0JTUFJTl9NRU5V
X0dSRVksCi0JTUFJTl9NRU5VX0hFQURJTkcsCi0JU0NST0xMV0lOX1RFWFQsCi0JU0NST0xMV0lO
X0hFQURJTkcsCi0JU0NST0xMV0lOX0JPWCwKLQlESUFMT0dfVEVYVCwKLQlESUFMT0dfTUVOVV9G
T1JFLAotCURJQUxPR19NRU5VX0JBQ0ssCi0JRElBTE9HX0JPWCwKLQlJTlBVVF9CT1gsCi0JSU5Q
VVRfSEVBRElORywKLQlJTlBVVF9URVhULAotCUlOUFVUX0ZJRUxELAotCUZVTkNUSU9OX1RFWFQs
Ci0JRlVOQ1RJT05fSElHSExJR0hULAotCUFUVFJfTUFYCi19IGF0dHJpYnV0ZXNfdDsKLWV4dGVy
biBhdHRyaWJ1dGVzX3QgYXR0cmlidXRlc1tdOwotCi10eXBlZGVmIGVudW0gewotCUZfSEVMUCA9
IDEsCi0JRl9TWU1CT0wgPSAyLAotCUZfSU5TVFMgPSAzLAotCUZfQ09ORiA9IDQsCi0JRl9CQUNL
ID0gNSwKLQlGX1NBVkUgPSA2LAotCUZfTE9BRCA9IDcsCi0JRl9TRUFSQ0ggPSA4LAotCUZfRVhJ
VCA9IDksCi19IGZ1bmN0aW9uX2tleTsKLQotdm9pZCBzZXRfY29sb3JzKHZvaWQpOwotCi0vKiB0
aGlzIGNoYW5nZXMgdGhlIHdpbmRvd3MgYXR0cmlidXRlcyAhISEgKi8KLXZvaWQgcHJpbnRfaW5f
bWlkZGxlKFdJTkRPVyAqd2luLAotCQlpbnQgc3RhcnR5LAotCQlpbnQgc3RhcnR4LAotCQlpbnQg
d2lkdGgsCi0JCWNvbnN0IGNoYXIgKnN0cmluZywKLQkJY2h0eXBlIGNvbG9yKTsKLWludCBnZXRf
bGluZV9sZW5ndGgoY29uc3QgY2hhciAqbGluZSk7Ci1pbnQgZ2V0X2xpbmVfbm8oY29uc3QgY2hh
ciAqdGV4dCk7Ci1jb25zdCBjaGFyICpnZXRfbGluZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgbGlu
ZV9ubyk7Ci12b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KTsK
LWludCBidG5fZGlhbG9nKFdJTkRPVyAqbWFpbl93aW5kb3csIGNvbnN0IGNoYXIgKm1zZywgaW50
IGJ0bl9udW0sIC4uLik7Ci1pbnQgZGlhbG9nX2lucHV0Ym94KFdJTkRPVyAqbWFpbl93aW5kb3cs
Ci0JCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCi0JCWNvbnN0IGNoYXIg
KmluaXQsIGNoYXIgKipyZXN1bHRwLCBpbnQgKnJlc3VsdF9sZW4pOwotdm9pZCByZWZyZXNoX2Fs
bF93aW5kb3dzKFdJTkRPVyAqbWFpbl93aW5kb3cpOwotdm9pZCBzaG93X3Njcm9sbF93aW4oV0lO
RE9XICptYWluX3dpbmRvdywKLQkJY29uc3QgY2hhciAqdGl0bGUsCi0JCWNvbnN0IGNoYXIgKnRl
eHQpOwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueSBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvcGFyc2VyLnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NzAw
ZjguLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQorKysgL2Rldi9u
dWxsCkBAIC0xLDczMSArMCwwIEBACi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu
MCAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51
eC1tNjhrLm9yZz4KLSAqLwotJXsKLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8c3Rk
YXJnLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRib29sLmg+Ci0KLSNpbmNsdWRlICJsa2MuaCIKLQot
I2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYo
Zm10KQotCi0jZGVmaW5lIFBSSU5URAkJMHgwMDAxCi0jZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAw
MgotCi1pbnQgY2RlYnVnID0gUFJJTlREOwotCi1zdGF0aWMgdm9pZCB5eWVycm9yKGNvbnN0IGNo
YXIgKmVycik7Ci1zdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsK
LXN0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsKLXN0YXRpYyBi
b29sIHpjb25mX2VuZHRva2VuKGNvbnN0IGNoYXIgKnRva2VubmFtZSwKLQkJCSAgIGNvbnN0IGNo
YXIgKmV4cGVjdGVkX3Rva2VubmFtZSk7Ci0KLXN0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZ
TUJPTF9IQVNIU0laRV07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3Vy
cmVudF9lbnRyeTsKLQotJX0KLQotJXVuaW9uCi17Ci0JY2hhciAqc3RyaW5nOwotCXN0cnVjdCBz
eW1ib2wgKnN5bWJvbDsKLQlzdHJ1Y3QgZXhwciAqZXhwcjsKLQlzdHJ1Y3QgbWVudSAqbWVudTsK
LQllbnVtIHN5bWJvbF90eXBlIHR5cGU7Ci0JZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOwot
fQotCi0ldG9rZW4gPHN0cmluZz4gVF9IRUxQVEVYVAotJXRva2VuIDxzdHJpbmc+IFRfV09SRAot
JXRva2VuIDxzdHJpbmc+IFRfV09SRF9RVU9URQotJXRva2VuIFRfQUxMTk9DT05GSUdfWQotJXRv
a2VuIFRfQk9PTAotJXRva2VuIFRfQ0hPSUNFCi0ldG9rZW4gVF9DTE9TRV9QQVJFTgotJXRva2Vu
IFRfQ09MT05fRVFVQUwKLSV0b2tlbiBUX0NPTU1FTlQKLSV0b2tlbiBUX0NPTkZJRwotJXRva2Vu
IFRfREVGQVVMVAotJXRva2VuIFRfREVGQ09ORklHX0xJU1QKLSV0b2tlbiBUX0RFRl9CT09MCi0l
dG9rZW4gVF9ERUZfVFJJU1RBVEUKLSV0b2tlbiBUX0RFUEVORFMKLSV0b2tlbiBUX0VORENIT0lD
RQotJXRva2VuIFRfRU5ESUYKLSV0b2tlbiBUX0VORE1FTlUKLSV0b2tlbiBUX0hFTFAKLSV0b2tl
biBUX0hFWAotJXRva2VuIFRfSUYKLSV0b2tlbiBUX0lNUExZCi0ldG9rZW4gVF9JTlQKLSV0b2tl
biBUX01BSU5NRU5VCi0ldG9rZW4gVF9NRU5VCi0ldG9rZW4gVF9NRU5VQ09ORklHCi0ldG9rZW4g
VF9NT0RVTEVTCi0ldG9rZW4gVF9PTgotJXRva2VuIFRfT1BFTl9QQVJFTgotJXRva2VuIFRfT1BU
SU9OCi0ldG9rZW4gVF9PUFRJT05BTAotJXRva2VuIFRfUExVU19FUVVBTAotJXRva2VuIFRfUFJP
TVBUCi0ldG9rZW4gVF9SQU5HRQotJXRva2VuIFRfU0VMRUNUCi0ldG9rZW4gVF9TT1VSQ0UKLSV0
b2tlbiBUX1NUUklORwotJXRva2VuIFRfVFJJU1RBVEUKLSV0b2tlbiBUX1ZJU0lCTEUKLSV0b2tl
biBUX0VPTAotJXRva2VuIDxzdHJpbmc+IFRfQVNTSUdOX1ZBTAotCi0lbGVmdCBUX09SCi0lbGVm
dCBUX0FORAotJWxlZnQgVF9FUVVBTCBUX1VORVFVQUwKLSVsZWZ0IFRfTEVTUyBUX0xFU1NfRVFV
QUwgVF9HUkVBVEVSIFRfR1JFQVRFUl9FUVVBTAotJW5vbmFzc29jIFRfTk9UCi0KLSV0eXBlIDxz
dHJpbmc+IHByb21wdAotJXR5cGUgPHN5bWJvbD4gbm9uY29uc3Rfc3ltYm9sCi0ldHlwZSA8c3lt
Ym9sPiBzeW1ib2wKLSV0eXBlIDx0eXBlPiB0eXBlIGxvZ2ljX3R5cGUgZGVmYXVsdAotJXR5cGUg
PGV4cHI+IGV4cHIKLSV0eXBlIDxleHByPiBpZl9leHByCi0ldHlwZSA8c3RyaW5nPiBlbmQKLSV0
eXBlIDxtZW51PiBpZl9lbnRyeSBtZW51X2VudHJ5IGNob2ljZV9lbnRyeQotJXR5cGUgPHN0cmlu
Zz4gd29yZF9vcHQgYXNzaWduX3ZhbAotJXR5cGUgPGZsYXZvcj4gYXNzaWduX29wCi0KLSVkZXN0
cnVjdG9yIHsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQg
Zm9yIHRoaXMgZW50cnlcbiIsCi0JCSQkLT5maWxlLT5uYW1lLCAkJC0+bGluZW5vKTsKLQlpZiAo
Y3VycmVudF9tZW51ID09ICQkKQotCQltZW51X2VuZF9tZW51KCk7Ci19IGlmX2VudHJ5IG1lbnVf
ZW50cnkgY2hvaWNlX2VudHJ5Ci0KLSUlCi1pbnB1dDogbWFpbm1lbnVfc3RtdCBzdG10X2xpc3Qg
fCBzdG10X2xpc3Q7Ci0KLS8qIG1haW5tZW51IGVudHJ5ICovCi0KLW1haW5tZW51X3N0bXQ6IFRf
TUFJTk1FTlUgcHJvbXB0IFRfRU9MCi17Ci0JbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5V
TEwpOwotfTsKLQotc3RtdF9saXN0OgotCSAgLyogZW1wdHkgKi8KLQl8IHN0bXRfbGlzdCBjb21t
b25fc3RtdAotCXwgc3RtdF9saXN0IGNob2ljZV9zdG10Ci0JfCBzdG10X2xpc3QgbWVudV9zdG10
Ci0JfCBzdG10X2xpc3QgVF9XT1JEIGVycm9yIFRfRU9MCXsgemNvbmZfZXJyb3IoInVua25vd24g
c3RhdGVtZW50IFwiJXNcIiIsICQyKTsgfQotCXwgc3RtdF9saXN0IGVycm9yIFRfRU9MCQl7IHpj
b25mX2Vycm9yKCJpbnZhbGlkIHN0YXRlbWVudCIpOyB9Ci07Ci0KLWNvbW1vbl9zdG10OgotCSAg
aWZfc3RtdAotCXwgY29tbWVudF9zdG10Ci0JfCBjb25maWdfc3RtdAotCXwgbWVudWNvbmZpZ19z
dG10Ci0JfCBzb3VyY2Vfc3RtdAotCXwgYXNzaWdubWVudF9zdG10Ci07Ci0KLS8qIGNvbmZpZy9t
ZW51Y29uZmlnIGVudHJ5ICovCi0KLWNvbmZpZ19lbnRyeV9zdGFydDogVF9DT05GSUcgbm9uY29u
c3Rfc3ltYm9sIFRfRU9MCi17Ci0JJDItPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKLQltZW51
X2FkZF9lbnRyeSgkMik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7Ci19OwotCi1jb25m
aWdfc3RtdDogY29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlzdAotewotCXByaW50
ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29u
Zl9saW5lbm8oKSk7Ci19OwotCi1tZW51Y29uZmlnX2VudHJ5X3N0YXJ0OiBUX01FTlVDT05GSUcg
bm9uY29uc3Rfc3ltYm9sIFRfRU9MCi17Ci0JJDItPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsK
LQltZW51X2FkZF9lbnRyeSgkMik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudWNv
bmZpZyAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDItPm5hbWUpOwot
fTsKLQotbWVudWNvbmZpZ19zdG10OiBtZW51Y29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRp
b25fbGlzdAotewotCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpCi0JCWN1cnJlbnRfZW50cnkt
PnByb21wdC0+dHlwZSA9IFBfTUVOVTsKLQllbHNlCi0JCXpjb25mcHJpbnQoIndhcm5pbmc6IG1l
bnVjb25maWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7Ci0JcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
LX07Ci0KLWNvbmZpZ19vcHRpb25fbGlzdDoKLQkgIC8qIGVtcHR5ICovCi0JfCBjb25maWdfb3B0
aW9uX2xpc3QgY29uZmlnX29wdGlvbgotCXwgY29uZmlnX29wdGlvbl9saXN0IGRlcGVuZHMKLQl8
IGNvbmZpZ19vcHRpb25fbGlzdCBoZWxwCi07Ci0KLWNvbmZpZ19vcHRpb246IHR5cGUgcHJvbXB0
X3N0bXRfb3B0IFRfRU9MCi17Ci0JbWVudV9zZXRfdHlwZSgkMSk7Ci0JcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsCi0JCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCksCi0JCSQxKTsKLX07Ci0KLWNvbmZpZ19vcHRpb246IFRfUFJPTVBUIHByb21wdCBpZl9leHBy
IFRfRU9MCi17Ci0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMiwgJDMpOwotCXByaW50ZChE
RUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSk7Ci19OwotCi1jb25maWdfb3B0aW9uOiBkZWZhdWx0IGV4cHIgaWZfZXhwciBUX0VPTAot
ewotCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCAkMiwgJDMpOwotCWlmICgkMSAhPSBTX1VOS05P
V04pCi0JCW1lbnVfc2V0X3R5cGUoJDEpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRl
ZmF1bHQoJXUpXG4iLAotCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAotCQkkMSk7
Ci19OwotCi1jb25maWdfb3B0aW9uOiBUX1NFTEVDVCBub25jb25zdF9zeW1ib2wgaWZfZXhwciBU
X0VPTAotewotCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgJDIsICQzKTsKLQlwcmludGQoREVC
VUdfUEFSU0UsICIlczolZDpzZWxlY3RcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCkpOwotfTsKLQotY29uZmlnX29wdGlvbjogVF9JTVBMWSBub25jb25zdF9zeW1ib2wgaWZfZXhw
ciBUX0VPTAotewotCW1lbnVfYWRkX3N5bWJvbChQX0lNUExZLCAkMiwgJDMpOwotCXByaW50ZChE
RUJVR19QQVJTRSwgIiVzOiVkOmltcGx5XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsKLX07Ci0KLWNvbmZpZ19vcHRpb246IFRfUkFOR0Ugc3ltYm9sIHN5bWJvbCBpZl9leHBy
IFRfRU9MCi17Ci0JbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9SQU5H
RSwkMiwgJDMpLCAkNCk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cmFuZ2VcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfTsKLQotY29uZmlnX29wdGlvbjogVF9P
UFRJT04gVF9NT0RVTEVTIFRfRU9MCi17Ci0JbWVudV9hZGRfb3B0aW9uX21vZHVsZXMoKTsKLX07
Ci0KLWNvbmZpZ19vcHRpb246IFRfT1BUSU9OIFRfREVGQ09ORklHX0xJU1QgVF9FT0wKLXsKLQlt
ZW51X2FkZF9vcHRpb25fZGVmY29uZmlnX2xpc3QoKTsKLX07Ci0KLWNvbmZpZ19vcHRpb246IFRf
T1BUSU9OIFRfQUxMTk9DT05GSUdfWSBUX0VPTAotewotCW1lbnVfYWRkX29wdGlvbl9hbGxub2Nv
bmZpZ195KCk7Ci19OwotCi0vKiBjaG9pY2UgZW50cnkgKi8KLQotY2hvaWNlOiBUX0NIT0lDRSB3
b3JkX29wdCBUX0VPTAotewotCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIFNZ
TUJPTF9DSE9JQ0UpOwotCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX05PX1dSSVRFOwotCW1lbnVfYWRk
X2VudHJ5KHN5bSk7Ci0JbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7Ci0JZnJl
ZSgkMik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y2hvaWNlXG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07Ci0KLWNob2ljZV9lbnRyeTogY2hvaWNlIGNob2lj
ZV9vcHRpb25fbGlzdAotewotCSQkID0gbWVudV9hZGRfbWVudSgpOwotfTsKLQotY2hvaWNlX2Vu
ZDogZW5kCi17Ci0JaWYgKHpjb25mX2VuZHRva2VuKCQxLCAiY2hvaWNlIikpIHsKLQkJbWVudV9l
bmRfbWVudSgpOwotCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2VcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCX0KLX07Ci0KLWNob2ljZV9zdG10OiBj
aG9pY2VfZW50cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQKLTsKLQotY2hvaWNlX29wdGlvbl9s
aXN0OgotCSAgLyogZW1wdHkgKi8KLQl8IGNob2ljZV9vcHRpb25fbGlzdCBjaG9pY2Vfb3B0aW9u
Ci0JfCBjaG9pY2Vfb3B0aW9uX2xpc3QgZGVwZW5kcwotCXwgY2hvaWNlX29wdGlvbl9saXN0IGhl
bHAKLTsKLQotY2hvaWNlX29wdGlvbjogVF9QUk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wKLXsK
LQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQyLCAkMyk7Ci0JcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07
Ci0KLWNob2ljZV9vcHRpb246IGxvZ2ljX3R5cGUgcHJvbXB0X3N0bXRfb3B0IFRfRU9MCi17Ci0J
bWVudV9zZXRfdHlwZSgkMSk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlc
biIsCi0JICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQxKTsKLX07Ci0K
LWNob2ljZV9vcHRpb246IFRfT1BUSU9OQUwgVF9FT0wKLXsKLQljdXJyZW50X2VudHJ5LT5zeW0t
PmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpv
cHRpb25hbFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19OwotCi1jaG9p
Y2Vfb3B0aW9uOiBUX0RFRkFVTFQgbm9uY29uc3Rfc3ltYm9sIGlmX2V4cHIgVF9FT0wKLXsKLQlt
ZW51X2FkZF9zeW1ib2woUF9ERUZBVUxULCAkMiwgJDMpOwotCXByaW50ZChERUJVR19QQVJTRSwg
IiVzOiVkOmRlZmF1bHRcbiIsCi0JICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCkpOwotfTsKLQotdHlwZToKLQkgIGxvZ2ljX3R5cGUKLQl8IFRfSU5UCQkJeyAkJCA9IFNfSU5U
OyB9Ci0JfCBUX0hFWAkJCXsgJCQgPSBTX0hFWDsgfQotCXwgVF9TVFJJTkcJCXsgJCQgPSBTX1NU
UklORzsgfQotCi1sb2dpY190eXBlOgotCSAgVF9CT09MCQl7ICQkID0gU19CT09MRUFOOyB9Ci0J
fCBUX1RSSVNUQVRFCQl7ICQkID0gU19UUklTVEFURTsgfQotCi1kZWZhdWx0OgotCSAgVF9ERUZB
VUxUCQl7ICQkID0gU19VTktOT1dOOyB9Ci0JfCBUX0RFRl9CT09MCQl7ICQkID0gU19CT09MRUFO
OyB9Ci0JfCBUX0RFRl9UUklTVEFURQl7ICQkID0gU19UUklTVEFURTsgfQotCi1jaG9pY2VfYmxv
Y2s6Ci0JICAvKiBlbXB0eSAqLwotCXwgY2hvaWNlX2Jsb2NrIGNvbW1vbl9zdG10Ci07Ci0KLS8q
IGlmIGVudHJ5ICovCi0KLWlmX2VudHJ5OiBUX0lGIGV4cHIgVF9FT0wKLXsKLQlwcmludGQoREVC
VUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Ci0JbWVudV9hZGRfZW50cnkoTlVMTCk7Ci0JbWVudV9hZGRfZGVwKCQyKTsKLQkkJCA9IG1lbnVf
YWRkX21lbnUoKTsKLX07Ci0KLWlmX2VuZDogZW5kCi17Ci0JaWYgKHpjb25mX2VuZHRva2VuKCQx
LCAiaWYiKSkgewotCQltZW51X2VuZF9tZW51KCk7Ci0JCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOmVuZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLQl9Ci19Owot
Ci1pZl9zdG10OiBpZl9lbnRyeSBzdG10X2xpc3QgaWZfZW5kCi07Ci0KLS8qIG1lbnUgZW50cnkg
Ki8KLQotbWVudTogVF9NRU5VIHByb21wdCBUX0VPTAotewotCW1lbnVfYWRkX2VudHJ5KE5VTEwp
OwotCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICQyLCBOVUxMKTsKLQlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07
Ci0KLW1lbnVfZW50cnk6IG1lbnUgbWVudV9vcHRpb25fbGlzdAotewotCSQkID0gbWVudV9hZGRf
bWVudSgpOwotfTsKLQotbWVudV9lbmQ6IGVuZAotewotCWlmICh6Y29uZl9lbmR0b2tlbigkMSwg
Im1lbnUiKSkgewotCQltZW51X2VuZF9tZW51KCk7Ci0JCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOmVuZG1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCX0KLX07
Ci0KLW1lbnVfc3RtdDogbWVudV9lbnRyeSBzdG10X2xpc3QgbWVudV9lbmQKLTsKLQotbWVudV9v
cHRpb25fbGlzdDoKLQkgIC8qIGVtcHR5ICovCi0JfCBtZW51X29wdGlvbl9saXN0IHZpc2libGUK
LQl8IG1lbnVfb3B0aW9uX2xpc3QgZGVwZW5kcwotOwotCi1zb3VyY2Vfc3RtdDogVF9TT1VSQ0Ug
cHJvbXB0IFRfRU9MCi17Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c291cmNlICVzXG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMik7Ci0JemNvbmZfbmV4dGZpbGVz
KCQyKTsKLQlmcmVlKCQyKTsKLX07Ci0KLS8qIGNvbW1lbnQgZW50cnkgKi8KLQotY29tbWVudDog
VF9DT01NRU5UIHByb21wdCBUX0VPTAotewotCW1lbnVfYWRkX2VudHJ5KE5VTEwpOwotCW1lbnVf
YWRkX3Byb21wdChQX0NPTU1FTlQsICQyLCBOVUxMKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIl
czolZDpjb21tZW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX07Ci0K
LWNvbW1lbnRfc3RtdDogY29tbWVudCBjb21tZW50X29wdGlvbl9saXN0Ci07Ci0KLWNvbW1lbnRf
b3B0aW9uX2xpc3Q6Ci0JICAvKiBlbXB0eSAqLwotCXwgY29tbWVudF9vcHRpb25fbGlzdCBkZXBl
bmRzCi07Ci0KLS8qIGhlbHAgb3B0aW9uICovCi0KLWhlbHBfc3RhcnQ6IFRfSEVMUCBUX0VPTAot
ewotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmhlbHBcbiIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOwotCXpjb25mX3N0YXJ0aGVscCgpOwotfTsKLQotaGVscDogaGVscF9z
dGFydCBUX0hFTFBURVhUCi17Ci0JaWYgKGN1cnJlbnRfZW50cnktPmhlbHApIHsKLQkJZnJlZShj
dXJyZW50X2VudHJ5LT5oZWxwKTsKLQkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVk
IHdpdGggbW9yZSB0aGFuIG9uZSBoZWxwIHRleHQgLS0gb25seSB0aGUgbGFzdCBvbmUgd2lsbCBi
ZSB1c2VkIiwKLQkJCSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsK
LQl9Ci0KLQkvKiBJcyB0aGUgaGVscCB0ZXh0IGVtcHR5IG9yIGFsbCB3aGl0ZXNwYWNlPyAqLwot
CWlmICgkMltzdHJzcG4oJDIsICIgXGZcblxyXHRcdiIpXSA9PSAnXDAnKQotCQl6Y29uZnByaW50
KCJ3YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBibGFuayBoZWxwIHRleHQiLAotCQkJICAgY3Vy
cmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOwotCi0JY3VycmVudF9lbnRyeS0+
aGVscCA9ICQyOwotfTsKLQotLyogZGVwZW5kcyBvcHRpb24gKi8KLQotZGVwZW5kczogVF9ERVBF
TkRTIFRfT04gZXhwciBUX0VPTAotewotCW1lbnVfYWRkX2RlcCgkMyk7Ci0JcHJpbnRkKERFQlVH
X1BBUlNFLCAiJXM6JWQ6ZGVwZW5kcyBvblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSk7Ci19OwotCi0vKiB2aXNpYmlsaXR5IG9wdGlvbiAqLwotdmlzaWJsZTogVF9WSVNJQkxF
IGlmX2V4cHIgVF9FT0wKLXsKLQltZW51X2FkZF92aXNpYmlsaXR5KCQyKTsKLX07Ci0KLS8qIHBy
b21wdCBzdGF0ZW1lbnQgKi8KLQotcHJvbXB0X3N0bXRfb3B0OgotCSAgLyogZW1wdHkgKi8KLQl8
IHByb21wdCBpZl9leHByCi17Ci0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMSwgJDIpOwot
fTsKLQotcHJvbXB0OgkgIFRfV09SRAotCXwgVF9XT1JEX1FVT1RFCi07Ci0KLWVuZDoJICBUX0VO
RE1FTlUgVF9FT0wJeyAkJCA9ICJtZW51IjsgfQotCXwgVF9FTkRDSE9JQ0UgVF9FT0wJeyAkJCA9
ICJjaG9pY2UiOyB9Ci0JfCBUX0VORElGIFRfRU9MCQl7ICQkID0gImlmIjsgfQotOwotCi1pZl9l
eHByOiAgLyogZW1wdHkgKi8JCQl7ICQkID0gTlVMTDsgfQotCXwgVF9JRiBleHByCQkJeyAkJCA9
ICQyOyB9Ci07Ci0KLWV4cHI6CSAgc3ltYm9sCQkJCXsgJCQgPSBleHByX2FsbG9jX3N5bWJvbCgk
MSk7IH0KLQl8IHN5bWJvbCBUX0xFU1Mgc3ltYm9sCQkJeyAkJCA9IGV4cHJfYWxsb2NfY29tcChF
X0xUSCwgJDEsICQzKTsgfQotCXwgc3ltYm9sIFRfTEVTU19FUVVBTCBzeW1ib2wJCXsgJCQgPSBl
eHByX2FsbG9jX2NvbXAoRV9MRVEsICQxLCAkMyk7IH0KLQl8IHN5bWJvbCBUX0dSRUFURVIgc3lt
Ym9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfR1RILCAkMSwgJDMpOyB9Ci0JfCBzeW1ib2wg
VF9HUkVBVEVSX0VRVUFMIHN5bWJvbAkJeyAkJCA9IGV4cHJfYWxsb2NfY29tcChFX0dFUSwgJDEs
ICQzKTsgfQotCXwgc3ltYm9sIFRfRVFVQUwgc3ltYm9sCQkJeyAkJCA9IGV4cHJfYWxsb2NfY29t
cChFX0VRVUFMLCAkMSwgJDMpOyB9Ci0JfCBzeW1ib2wgVF9VTkVRVUFMIHN5bWJvbAkJeyAkJCA9
IGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsICQxLCAkMyk7IH0KLQl8IFRfT1BFTl9QQVJFTiBl
eHByIFRfQ0xPU0VfUEFSRU4JeyAkJCA9ICQyOyB9Ci0JfCBUX05PVCBleHByCQkJCXsgJCQgPSBl
eHByX2FsbG9jX29uZShFX05PVCwgJDIpOyB9Ci0JfCBleHByIFRfT1IgZXhwcgkJCXsgJCQgPSBl
eHByX2FsbG9jX3R3byhFX09SLCAkMSwgJDMpOyB9Ci0JfCBleHByIFRfQU5EIGV4cHIJCQl7ICQk
ID0gZXhwcl9hbGxvY190d28oRV9BTkQsICQxLCAkMyk7IH0KLTsKLQotLyogRm9yIHN5bWJvbCBk
ZWZpbml0aW9ucywgc2VsZWN0cywgZXRjLiwgd2hlcmUgcXVvdGVzIGFyZSBub3QgYWNjZXB0ZWQg
Ki8KLW5vbmNvbnN0X3N5bWJvbDogVF9XT1JEIHsgJCQgPSBzeW1fbG9va3VwKCQxLCAwKTsgZnJl
ZSgkMSk7IH07Ci0KLXN5bWJvbDoJICBub25jb25zdF9zeW1ib2wKLQl8IFRfV09SRF9RVU9URQl7
ICQkID0gc3ltX2xvb2t1cCgkMSwgU1lNQk9MX0NPTlNUKTsgZnJlZSgkMSk7IH0KLTsKLQotd29y
ZF9vcHQ6IC8qIGVtcHR5ICovCQkJeyAkJCA9IE5VTEw7IH0KLQl8IFRfV09SRAotCi0vKiBhc3Np
Z25tZW50IHN0YXRlbWVudCAqLwotCi1hc3NpZ25tZW50X3N0bXQ6ICBUX1dPUkQgYXNzaWduX29w
IGFzc2lnbl92YWwgVF9FT0wJeyB2YXJpYWJsZV9hZGQoJDEsICQzLCAkMik7IGZyZWUoJDEpOyBm
cmVlKCQzKTsgfQotCi1hc3NpZ25fb3A6Ci0JICBUX0VRVUFMCXsgJCQgPSBWQVJfUkVDVVJTSVZF
OyB9Ci0JfCBUX0NPTE9OX0VRVUFMCXsgJCQgPSBWQVJfU0lNUExFOyB9Ci0JfCBUX1BMVVNfRVFV
QUwJeyAkJCA9IFZBUl9BUFBFTkQ7IH0KLTsKLQotYXNzaWduX3ZhbDoKLQkvKiBlbXB0eSAqLwkJ
eyAkJCA9IHhzdHJkdXAoIiIpOyB9OwotCXwgVF9BU1NJR05fVkFMCi07Ci0KLSUlCi0KLXZvaWQg
Y29uZl9wYXJzZShjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlp
bnQgaTsKLQotCXpjb25mX2luaXRzY2FuKG5hbWUpOwotCi0JX21lbnVfaW5pdCgpOwotCi0JaWYg
KGdldGVudigiWkNPTkZfREVCVUciKSkKLQkJeXlkZWJ1ZyA9IDE7Ci0JeXlwYXJzZSgpOwotCi0J
LyogVmFyaWFibGVzIGFyZSBleHBhbmRlZCBpbiB0aGUgcGFyc2UgcGhhc2UuIFdlIGNhbiBmcmVl
IHRoZW0gaGVyZS4gKi8KLQl2YXJpYWJsZV9hbGxfZGVsKCk7Ci0KLQlpZiAoeXluZXJycykKLQkJ
ZXhpdCgxKTsKLQlpZiAoIW1vZHVsZXNfc3ltKQotCQltb2R1bGVzX3N5bSA9IHN5bV9maW5kKCAi
biIgKTsKLQotCWlmICghbWVudV9oYXNfcHJvbXB0KCZyb290bWVudSkpIHsKLQkJY3VycmVudF9l
bnRyeSA9ICZyb290bWVudTsKLQkJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgIk1haW4gbWVudSIs
IE5VTEwpOwotCX0KLQotCW1lbnVfZmluYWxpemUoJnJvb3RtZW51KTsKLQlmb3JfYWxsX3N5bWJv
bHMoaSwgc3ltKSB7Ci0JCWlmIChzeW1fY2hlY2tfZGVwcyhzeW0pKQotCQkJeXluZXJycysrOwot
CX0KLQlpZiAoeXluZXJycykKLQkJZXhpdCgxKTsKLQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsK
LX0KLQotc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oY29uc3QgY2hhciAqdG9rZW5uYW1lLAot
CQkJICAgY29uc3QgY2hhciAqZXhwZWN0ZWRfdG9rZW5uYW1lKQotewotCWlmIChzdHJjbXAodG9r
ZW5uYW1lLCBleHBlY3RlZF90b2tlbm5hbWUpKSB7Ci0JCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVk
ICclcycgd2l0aGluICVzIGJsb2NrIiwKLQkJCSAgICB0b2tlbm5hbWUsIGV4cGVjdGVkX3Rva2Vu
bmFtZSk7Ci0JCXl5bmVycnMrKzsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlpZiAoY3VycmVudF9t
ZW51LT5maWxlICE9IGN1cnJlbnRfZmlsZSkgewotCQl6Y29uZl9lcnJvcigiJyVzJyBpbiBkaWZm
ZXJlbnQgZmlsZSB0aGFuICclcyciLAotCQkJICAgIHRva2VubmFtZSwgZXhwZWN0ZWRfdG9rZW5u
YW1lKTsKLQkJZnByaW50ZihzdGRlcnIsICIlczolZDogbG9jYXRpb24gb2YgdGhlICclcydcbiIs
Ci0JCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vLAotCQkJ
ZXhwZWN0ZWRfdG9rZW5uYW1lKTsKLQkJeXluZXJycysrOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQot
CXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVy
ciwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLQl2YV9zdGFydChhcCwgZXJyKTsKLQl2
ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOwotCXZhX2VuZChhcCk7Ci0JZnByaW50ZihzdGRlcnIs
ICJcbiIpOwotfQotCi1zdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4u
LikKLXsKLQl2YV9saXN0IGFwOwotCi0JeXluZXJycysrOwotCWZwcmludGYoc3RkZXJyLCAiJXM6
JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCXZhX3N0YXJ0KGFwLCBl
cnIpOwotCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlmcHJpbnRm
KHN0ZGVyciwgIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqZXJy
KQotewotCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpj
b25mX2xpbmVubygpICsgMSwgZXJyKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0
cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikKLXsKLQljb25zdCBjaGFyICpwOwotCWlu
dCBsZW47Ci0KLQlwdXRjKCciJywgb3V0KTsKLQl3aGlsZSAoKHAgPSBzdHJjaHIoc3RyLCAnIicp
KSkgewotCQlsZW4gPSBwIC0gc3RyOwotCQlpZiAobGVuKQotCQkJZnByaW50ZihvdXQsICIlLipz
IiwgbGVuLCBzdHIpOwotCQlmcHV0cygiXFxcIiIsIG91dCk7Ci0JCXN0ciA9IHAgKyAxOwotCX0K
LQlmcHV0cyhzdHIsIG91dCk7Ci0JcHV0YygnIicsIG91dCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBy
aW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQotewotCXN0cnVjdCBzeW1i
b2wgKnN5bSA9IG1lbnUtPnN5bTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0KLQlpZiAoc3lt
X2lzX2Nob2ljZShzeW0pKQotCQlmcHJpbnRmKG91dCwgIlxuY2hvaWNlXG4iKTsKLQllbHNlCi0J
CWZwcmludGYob3V0LCAiXG5jb25maWcgJXNcbiIsIHN5bS0+bmFtZSk7Ci0Jc3dpdGNoIChzeW0t
PnR5cGUpIHsKLQljYXNlIFNfQk9PTEVBTjoKLQkJZnB1dHMoIiAgYm9vbFxuIiwgb3V0KTsKLQkJ
YnJlYWs7Ci0JY2FzZSBTX1RSSVNUQVRFOgotCQlmcHV0cygiICB0cmlzdGF0ZVxuIiwgb3V0KTsK
LQkJYnJlYWs7Ci0JY2FzZSBTX1NUUklORzoKLQkJZnB1dHMoIiAgc3RyaW5nXG4iLCBvdXQpOwot
CQlicmVhazsKLQljYXNlIFNfSU5UOgotCQlmcHV0cygiICBpbnRlZ2VyXG4iLCBvdXQpOwotCQli
cmVhazsKLQljYXNlIFNfSEVYOgotCQlmcHV0cygiICBoZXhcbiIsIG91dCk7Ci0JCWJyZWFrOwot
CWRlZmF1bHQ6Ci0JCWZwdXRzKCIgID8/P1xuIiwgb3V0KTsKLQkJYnJlYWs7Ci0JfQotCWZvciAo
cHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKLQkJaWYgKHByb3At
Pm1lbnUgIT0gbWVudSkKLQkJCWNvbnRpbnVlOwotCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsKLQkJ
Y2FzZSBQX1BST01QVDoKLQkJCWZwdXRzKCIgIHByb21wdCAiLCBvdXQpOwotCQkJcHJpbnRfcXVv
dGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOwotCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52
aXNpYmxlLmV4cHIpKSB7Ci0JCQkJZnB1dHMoIiBpZiAiLCBvdXQpOwotCQkJCWV4cHJfZnByaW50
KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKLQkJCX0KLQkJCWZwdXRjKCdcbicsIG91dCk7Ci0J
CQlicmVhazsKLQkJY2FzZSBQX0RFRkFVTFQ6Ci0JCQlmcHV0cyggIiAgZGVmYXVsdCAiLCBvdXQp
OwotCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKLQkJCWlmICghZXhwcl9pc195ZXMo
cHJvcC0+dmlzaWJsZS5leHByKSkgewotCQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsKLQkJCQlleHBy
X2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91dCk7Ci0JCQl9Ci0JCQlmcHV0YygnXG4nLCBv
dXQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUF9DSE9JQ0U6Ci0JCQlmcHV0cygiICAjY2hvaWNlIHZh
bHVlXG4iLCBvdXQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUF9TRUxFQ1Q6Ci0JCQlmcHV0cyggIiAg
c2VsZWN0ICIsIG91dCk7Ci0JCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOwotCQkJZnB1
dGMoJ1xuJywgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNlIFBfSU1QTFk6Ci0JCQlmcHV0cyggIiAg
aW1wbHkgIiwgb3V0KTsKLQkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7Ci0JCQlmcHV0
YygnXG4nLCBvdXQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUF9SQU5HRToKLQkJCWZwdXRzKCAiICBy
YW5nZSAiLCBvdXQpOwotCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsKLQkJCWZwdXRj
KCdcbicsIG91dCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQX01FTlU6Ci0JCQlmcHV0cyggIiAgbWVu
dSAiLCBvdXQpOwotCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOwotCQkJ
ZnB1dGMoJ1xuJywgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNlIFBfU1lNQk9MOgotCQkJZnB1dHMo
ICIgIHN5bWJvbCAiLCBvdXQpOwotCQkJZnByaW50ZihvdXQsICIlc1xuIiwgcHJvcC0+c3ltLT5u
YW1lKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZnByaW50ZihvdXQsICIgIHVua25vd24g
cHJvcCAlZCFcbiIsIHByb3AtPnR5cGUpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKG1lbnUt
PmhlbHApIHsKLQkJaW50IGxlbiA9IHN0cmxlbihtZW51LT5oZWxwKTsKLQkJd2hpbGUgKG1lbnUt
PmhlbHBbLS1sZW5dID09ICdcbicpCi0JCQltZW51LT5oZWxwW2xlbl0gPSAwOwotCQlmcHJpbnRm
KG91dCwgIiAgaGVscFxuJXNcbiIsIG1lbnUtPmhlbHApOwotCX0KLX0KLQotdm9pZCB6Y29uZmR1
bXAoRklMRSAqb3V0KQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3Qgc3ltYm9s
ICpzeW07Ci0Jc3RydWN0IG1lbnUgKm1lbnU7Ci0KLQltZW51ID0gcm9vdG1lbnUubGlzdDsKLQl3
aGlsZSAobWVudSkgewotCQlpZiAoKHN5bSA9IG1lbnUtPnN5bSkpCi0JCQlwcmludF9zeW1ib2wo
b3V0LCBtZW51KTsKLQkJZWxzZSBpZiAoKHByb3AgPSBtZW51LT5wcm9tcHQpKSB7Ci0JCQlzd2l0
Y2ggKHByb3AtPnR5cGUpIHsKLQkJCWNhc2UgUF9DT01NRU5UOgotCQkJCWZwdXRzKCJcbmNvbW1l
bnQgIiwgb3V0KTsKLQkJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7Ci0J
CQkJZnB1dHMoIlxuIiwgb3V0KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgUF9NRU5VOgotCQkJCWZw
dXRzKCJcbm1lbnUgIiwgb3V0KTsKLQkJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+
dGV4dCk7Ci0JCQkJZnB1dHMoIlxuIiwgb3V0KTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0J
CQkJOwotCQkJfQotCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7Ci0J
CQkJZnB1dHMoIiAgZGVwZW5kcyAiLCBvdXQpOwotCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2li
bGUuZXhwciwgb3V0KTsKLQkJCQlmcHV0YygnXG4nLCBvdXQpOwotCQkJfQotCQl9Ci0KLQkJaWYg
KG1lbnUtPmxpc3QpCi0JCQltZW51ID0gbWVudS0+bGlzdDsKLQkJZWxzZSBpZiAobWVudS0+bmV4
dCkKLQkJCW1lbnUgPSBtZW51LT5uZXh0OwotCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBh
cmVudCkpIHsKLQkJCWlmIChtZW51LT5wcm9tcHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBf
TUVOVSkKLQkJCQlmcHV0cygiXG5lbmRtZW51XG4iLCBvdXQpOwotCQkJaWYgKG1lbnUtPm5leHQp
IHsKLQkJCQltZW51ID0gbWVudS0+bmV4dDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLX0K
LQotI2luY2x1ZGUgInV0aWwuYyIKLSNpbmNsdWRlICJtZW51LmMiCmRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0
Y2ggYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5p
a3JhZnQucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDYzYjQuLjAwMDAw
MDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRv
LXVuaWtyYWZ0LnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUgYi9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlCi1pbmRleCAzZjMyN2UyLi43YjUzMmM1IDEwMDY0NAotLS0tIGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9NYWtlZmlsZQotKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQotQEAg
LTEsNiArMSw2IEBACi0gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAotICMgPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tIyBLZXJuZWwgY29uZmlndXJhdGlvbiB0YXJnZXRzCi0rIyBVbmlr
cmFmdCBjb25maWd1cmF0aW9uIHRhcmdldHMKLSAjIFRoZXNlIHRhcmdldHMgYXJlIHVzZWQgZnJv
bSB0b3AtbGV2ZWwgbWFrZWZpbGUKLSAKLSBQSE9OWSArPSB4Y29uZmlnIGdjb25maWcgbWVudWNv
bmZpZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcgXAotZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUgYi9zdXBwb3J0L2tjb25maWcubmV3L2dj
b25mLmdsYWRlCi1pbmRleCBhYTQ4M2NiLi4wM2U5N2Q3IDEwMDY0NAotLS0tIGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9nY29uZi5nbGFkZQotKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5n
bGFkZQotQEAgLTQsNyArNCw3IEBACi0gCi0gPHdpZGdldCBjbGFzcz0iR3RrV2luZG93IiBpZD0i
d2luZG93MSI+Ci0gICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+Ci0t
ICA8cHJvcGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVsIENv
bmZpZ3VyYXRvcjwvcHJvcGVydHk+Ci0rICA8cHJvcGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0
YWJsZT0ieWVzIj5HdGsgVW5pa3JhZnQgQ29uZmlndXJhdG9yPC9wcm9wZXJ0eT4KLSAgIDxwcm9w
ZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lORE9XX1RPUExFVkVMPC9wcm9wZXJ0eT4KLSAgIDxwcm9w
ZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX05PTkU8L3Byb3BlcnR5Pgot
ICAgPHByb3BlcnR5IG5hbWU9Im1vZGFsIj5GYWxzZTwvcHJvcGVydHk+Ci1kaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5j
Ci1pbmRleCA2OTQwOTFmLi41M2M0YTYyIDEwMDY0NAotLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9tY29uZi5jCi0rKysgYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMKLUBAIC0xNzUsOSAr
MTc1LDkgQEAgbWVudV9pbnN0cnVjdGlvbnNbXSA9Ci0gCSJBcnJvdyBrZXlzIG5hdmlnYXRlIHRo
ZSBtZW51LiAgIgotIAkiPEVudGVyPiBzZWxlY3RzIHN1Ym1lbnVzIC0tLT4gKG9yIGVtcHR5IHN1
Ym1lbnVzIC0tLS0pLiAgIgotIAkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICIK
LS0JIlByZXNzaW5nIDxZPiBpbmNsdWRlcywgPE4+IGV4Y2x1ZGVzLCA8TT4gbW9kdWxhcml6ZXMg
ZmVhdHVyZXMuICAiCi0rCSJQcmVzc2luZyA8WT4gc2VsZWN0cyBhIGZlYXR1cmUsIHdoaWxlIDxO
PiB3aWxsIGV4Y2x1ZGUgYSBmZWF0dXJlLiAgIgotIAkiUHJlc3MgPEVzYz48RXNjPiB0byBleGl0
LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIgotLQkiTGVnZW5kOiBbKl0gYnVpbHQt
aW4gIFsgXSBleGNsdWRlZCAgPE0+IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxlIiwKLSsJIkxl
Z2VuZDogWypdIGZlYXR1cmUgaXMgc2VsZWN0ZWQgIFsgXSBmZWF0dXJlIGlzIGV4Y2x1ZGVkIiwK
LSByYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQotIAkiVXNlIHRoZSBhcnJvdyBrZXlzIHRvIG5h
dmlnYXRlIHRoaXMgd2luZG93IG9yICIKLSAJInByZXNzIHRoZSBob3RrZXkgb2YgdGhlIGl0ZW0g
eW91IHdpc2ggdG8gc2VsZWN0ICIKLUBAIC05NTcsNyArOTU3LDcgQEAgc3RhdGljIGludCBoYW5k
bGVfZXhpdCh2b2lkKQotIAlpZiAoY29uZl9nZXRfY2hhbmdlZCgpKQotIAkJcmVzID0gZGlhbG9n
X3llc25vKE5VTEwsCi0gCQkJCSAgICJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZp
Z3VyYXRpb24/XG4iCi0tCQkJCSAgICAgIihQcmVzcyA8RVNDPjxFU0M+IHRvIGNvbnRpbnVlIGtl
cm5lbCBjb25maWd1cmF0aW9uLikiLAotKwkJCQkgICAgICIoUHJlc3MgPEVTQz48RVNDPiB0byBj
b250aW51ZSBVbmlrcmFmdCBjb25maWd1cmF0aW9uLikiLAotIAkJCQkgICA2LCA2MCk7Ci0gCWVs
c2UKLSAJCXJlcyA9IC0xOwotZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYu
YyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYwotaW5kZXggY2JhZmUzYi4uZDNkOTA4YyAx
MDA2NDQKLS0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYwotKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9uY29uZi5jCi1AQCAtMjksNyArMjksNyBAQCBzdGF0aWMgY29uc3QgY2hhciBu
Y29uZl9nbG9iYWxfaGVscFtdID0KLSAiTWVudSBlbnRyaWVzXG4iCi0gIi0tLS0tLS0tLS0tLVxu
IgotICJUaGlzIGludGVyZmFjZSBsZXRzIHlvdSBzZWxlY3QgZmVhdHVyZXMgYW5kIHBhcmFtZXRl
cnMgZm9yIHRoZSBrZXJuZWxcbiIKLS0iYnVpbGQuICBLZXJuZWwgZmVhdHVyZXMgY2FuIGVpdGhl
ciBiZSBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIHJlbW92ZWQuXG4iCi0rImJ1aWxkLiAgVW5p
a3JhZnQgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBzZWxlY3RlZCBvciBkZXNlbGVjdGVkLlxuIgot
ICJQYXJhbWV0ZXJzIG11c3QgYmUgZW50ZXJlZCBhcyB0ZXh0IG9yIGRlY2ltYWwgb3IgaGV4YWRl
Y2ltYWwgbnVtYmVycy5cbiIKLSAiXG4iCi0gIk1lbnUgZW50cmllcyBiZWdpbm5pbmcgd2l0aCBm
b2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iCi1kaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYu
Y2MKLWluZGV4IGNlN2ZjODcuLjAwMjFhYTYgMTAwNjQ0Ci0tLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLmNjCi0rKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCi1AQCAtNDYs
NyArNDYsNyBAQCBzdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgY2hhciogc3Ry
KQotIH0KLSAKLSBDb25maWdTZXR0aW5nczo6Q29uZmlnU2V0dGluZ3MoKQotLQk6IFFTZXR0aW5n
cygia2VybmVsLm9yZyIsICJxY29uZiIpCi0rCTogUVNldHRpbmdzKCJ1bmlrcmFmdC5vcmciLCAi
cWNvbmYiKQotIHsKLSB9Ci0gCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNo
ZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAy
LWltcG9ydC1tYWtlZmlsZS5icgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlMGJh
OS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDItaW1wb3J0LW1h
a2VmaWxlLmJyCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2Vm
aWxlLmJyCi1uZXcgZmlsZSBtb2RlIDEwMDY0NAotaW5kZXggMDAwMDAwMC4uNDFjNWNlMQotLS0t
IC9kZXYvbnVsbAotKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgotQEAgLTAs
MCArMSw1MyBAQAotK3NyYyA6PSAuCi0rdG9wX3NyY2Rpcj0uLi8uLi8KLSt0b3BfYnVpbGRkaXI9
Li4vLi4vCi0rc3JjdHJlZSA6PSAuCi0rb2JqID89IC4KLSsKLStpbmNsdWRlIE1ha2VmaWxlCi0r
I0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oCi0rLWluY2x1ZGUgJChvYmop
Ly5kZXBlbmQKLSskKG9iaikvLmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQotKwkkKEhPU1RD
QykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAyPi9kZXYv
bnVsbCB8fCA6Ci0rCi0rX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9z
dHByb2dzLW0pKQotK2hvc3QtY3NpbmdsZSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KGlmICQoJChtKS1vYmpzKSwsJChtKSkpCi0raG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0sJChf
X2hvc3Rwcm9ncyksXAotKyAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgk
KG0pLW9ianMpLCQobSkpKSkKLStob3N0LWN4eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0
cHJvZ3MpLFwKLSsgICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQo
bSktb2JqcyksKSkpCi0raG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAk
KGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktb2JqcykpKSkKLStob3N0LWN4eG9ianMg
Oj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyks
JCgkKG0pLWN4eG9ianMpKSkpCi0rCi0rSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENP
TkZJR189XCJcIgotKwotKyQoaG9zdC1jc2luZ2xlKTogJTogJS5jCi0rCSQoSE9TVENDKSAkKEhP
U1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9i
aikvJEAKLSsKLSskKGhvc3QtY211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGli
KQotKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENG
TEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElC
RVNfJChARikpIC1vICQob2JqKS8kQAotKwotKyQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1j
eHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCi0rCSQoSE9TVENYWCkgJChIT1NU
X0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZp
eCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVT
XyQoQEYpKSAtbyAkKG9iaikvJEAKLSsKLSskKG9iaikvJS5vOiAlLmMKLSsJJChIT1NUQ0MpICQo
SE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8
IC1vICRACi0rCi0rJChvYmopLyUubzogJChvYmopLyUuYwotKwkkKEhPU1RDQykgJChIT1NUX0VY
VFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAK
LSsKLSskKG9iaikvJS5vOiAlLmNjCi0rCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQo
SE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRACi0rCi0rJChvYmop
LyU6OiAkKHNyYykvJV9zaGlwcGVkCi0rCSQoUSljYXQgJDwgPiAkQAotKwotK2NsZWFuOgotKwkk
KFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKLStkaXN0Y2xlYW46
IGNsZWFuCi0rCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQobHhkaWFsb2cpICQoY29u
Zi1vYmpzKSAkKG1jb25mLW9ianMpICQoa3hnZXR0ZXh0LW9ianMpIFwKLSsJCSQoaG9zdHByb2dz
LXkpICQocWNvbmYtY3h4b2JqcykgJChxY29uZi1vYmpzKSAkKGdjb25mLW9ianMpIFwKLSsJCW1j
b25mIC5kZXBlbmQpCi0rCi0rRk9SQ0U6Ci0rLlBIT05ZOiBGT1JDRSBjbGVhbiBkaXN0Y2xlYW4K
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMy1pbmNsdWRlLW1ha2Vm
aWxlLWhlbHBlci1mcm9tLWtlcm5lbCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMy1p
bmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMzVjNzlmOC4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNo
ZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwKKysrIC9kZXYvbnVsbApA
QCAtMSwxMDIgKzAsMCBAQAotZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZp
bGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCi1pbmRleCA0MWM1Y2UxLi4w
ZmRiZTlhIDEwMDY0NAotLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgotKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgotQEAgLTQsNiArNCw3IEBAIHRvcF9i
dWlsZGRpcj0uLi8uLi8KLSBzcmN0cmVlIDo9IC4KLSBvYmogPz0gLgotIAotK2luY2x1ZGUgTWFr
ZWZpbGUucnVsZXMKLSBpbmNsdWRlIE1ha2VmaWxlCi0gI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIi
IC1pbmNsdWRlIGZvby5oCi0gLWluY2x1ZGUgJChvYmopLy5kZXBlbmQKLWRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9N
YWtlZmlsZS5ydWxlcwotbmV3IGZpbGUgbW9kZSAxMDA2NDQKLWluZGV4IDAwMDAwMDAuLjc4YTlj
ODEKLS0tLSAvZGV2L251bGwKLSsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUucnVs
ZXMKLUBAIC0wLDAgKzEsODQgQEAKLStrZWNobyA6PSBlY2hvCi0rY29tbWEgOj0gLAotKwotKwot
K2RvdC10YXJnZXQgPSAkKGRpciAkQCkuJChub3RkaXIgJEApCi0rCi0rYW55LXByZXJlcSA9ICQo
ZmlsdGVyLW91dCAkKFBIT05ZKSwkPykgJChmaWx0ZXItb3V0ICQoUEhPTlkpICQod2lsZGNhcmQg
JF4pLCReKQotKwotK2FyZy1jaGVjayA9ICQoaWYgJChzdHJpcCAkKGNtZF8kQCkpLCwxKQotKwot
K21ha2UtY21kID0gJChjYWxsIGVzY3NxLCQoc3Vic3QgJChwb3VuZCksJCQocG91bmQpLCQoc3Vi
c3QgJCQsJCQkJCwkKGNtZF8kKDEpKSkpKQotKwotKyMgcHJpbnRpbmcgY29tbWFuZHMKLStjbWQg
PSBAc2V0IC1lOyAkKGVjaG8tY21kKSAkKGNtZF8kKDEpKQotKwotK2RlcGZpbGUgPSAkKHN1YnN0
ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5kKQotK2RlcGZsYWdzID0gLVdwJChjb21tYSktTUQk
KGNvbW1hKSQoY2FsbCBkb3QtdGFyZ2V0KQotKwotK2NtZF9hbmRfZml4ZGVwID0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0rCSQoY21kKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotKwkkKG9i
aikvZml4ZGVwICQoZGVwZmlsZSkgJEAgJyQobWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21k
O1wKLSsJcm0gLWYgJChkZXBmaWxlKQotKwotK2lmX2NoYW5nZWRfZGVwID0gJChpZiAkKHN0cmlw
ICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwkKGNtZF9hbmRfZml4ZGVwKSxAOikKLSsKLStk
ZWZpbmUgbXVsdGlfZGVwZW5kCi0rJChmb3JlYWNoIG0sICQobm90ZGlyICQxKSwgXAotKyAgICAk
KGV2YWwgJChvYmopLyRtOiBcCi0rICAgICQoYWRkcHJlZml4ICQob2JqKS8sICQoZm9yZWFjaCBz
LCAkMywgJCgkKG06JSQoc3RyaXAgJDIpPSUkKHMpKSkpKSkpCi0rZW5kZWYKLSsKLSsjIyMKLSsj
IGZpbGVjaGsgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgY29udGVudCBvZiBhIGdlbmVyYXRlZCBm
aWxlIGlzIHVwZGF0ZWQuCi0rIyBTYW1wbGUgdXNhZ2U6Ci0rIwotKyMgZmlsZWNoa19zYW1wbGUg
PSBlY2hvICQoS0VSTkVMUkVMRUFTRSkKLSsjIHZlcnNpb24uaDogRk9SQ0UKLSsjICAgJChjYWxs
IGZpbGVjaGssc2FtcGxlKQotKyMKLSsjIFRoZSBydWxlIGRlZmluZWQgc2hhbGwgd3JpdGUgdG8g
c3Rkb3V0IHRoZSBjb250ZW50IG9mIHRoZSBuZXcgZmlsZS4KLSsjIFRoZSBleGlzdGluZyBmaWxl
IHdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgbmV3IG9uZS4KLSsjIC0gSWYgbm8gZmlsZSBleGlz
dCBpdCBpcyBjcmVhdGVkCi0rIyAtIElmIHRoZSBjb250ZW50IGRpZmZlciB0aGUgbmV3IGZpbGUg
aXMgdXNlZAotKyMgLSBJZiB0aGV5IGFyZSBlcXVhbCBubyBjaGFuZ2UsIGFuZCBubyB0aW1lc3Rh
bXAgdXBkYXRlCi0rIyAtIHN0ZGluIGlzIHBpcGVkIGluIGZyb20gdGhlIGZpcnN0IHByZXJlcXVp
c2l0ZSAoJDwpIHNvIG9uZSBoYXMKLSsjICAgdG8gc3BlY2lmeSBhIHZhbGlkIGZpbGUgYXMgZmly
c3QgcHJlcmVxdWlzaXRlIChvZnRlbiB0aGUga2J1aWxkIGZpbGUpCi0rZGVmaW5lIGZpbGVjaGsK
LSsJJChRKXNldCAtZTsgICAgICAgICAgICAgXAotKwlta2RpciAtcCAkKGRpciAkQCk7ICAgICAg
ICAgXAotKwl7ICQoZmlsZWNoa18kKDEpKTsgfSA+ICRALnRtcDsgICAgICBcCi0rCWlmIFsgLXIg
JEAgXSAmJiBjbXAgLXMgJEAgJEAudG1wOyB0aGVuICBcCi0rCSAgICBybSAtZiAkQC50bXA7ICAg
ICAgICAgICBcCi0rCWVsc2UgICAgICAgICAgICAgICAgICAgIFwKLSsJICAgICQoa2VjaG8pICcg
IFVQRCAgICAgJEAnOyAgICBcCi0rCSAgICBtdiAtZiAkQC50bXAgJEA7ICAgICAgICBcCi0rCWZp
Ci0rZW5kZWYKLSsKLSsjIEV4ZWN1dGUgY29tbWFuZCBpZiBjb21tYW5kIGhhcyBjaGFuZ2VkIG9y
IHByZXJlcXVpc2l0ZShzKSBhcmUgdXBkYXRlZC4KLStpZl9jaGFuZ2VkID0gJChpZiAkKHN0cmlw
ICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwJCVwKLSsJJChjbWQpO1wKLSsJcHJpbnRmICcl
c1xuJyAnY21kXyRAIDo9ICQobWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kLCBAOikKLSsK
LSsjIExFWAotKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rcXVpZXRfY21kX2ZsZXggPSBMRVggJEAK
LStjbWRfZmxleCA9ICQoTEVYKSAtbyRAIC1MICQ8Ci0rCi0rJChvYmopLyUubGV4LmM6ICQoc3Jj
KS8lLmwgRk9SQ0UKLSsJJChjYWxsIGlmX2NoYW5nZWQsZmxleCkKLSsKLSsjIFlBQ0MKLSsjIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotK3F1aWV0X2NtZF9iaXNvbiA9IFlBQ0MgICAgJEAKLStjbWRfYmlz
b24gPSAkKFlBQ0MpIC1vJEAgLXQgLWwgJDwKLSsKLSskKG9iaikvJS50YWIuYzogJChzcmMpLyUu
eSBGT1JDRQotKwkkKGNhbGwgaWZfY2hhbmdlZCxiaXNvbikKLSsKLStxdWlldF9jbWRfYmlzb25f
aCA9IFlBQ0MgICAgJEAKLStjbWRfYmlzb25faCA9ICQoWUFDQykgLW8vZGV2L251bGwgLS1kZWZp
bmVzPSRAIC10IC1sICQ8Ci0rCi0rJChvYmopLyUudGFiLmg6ICQoc3JjKS8lLnkgRk9SQ0UKLSsJ
JChjYWxsIGlmX2NoYW5nZWQsYmlzb25faCkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDNkZTBjYjEuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0
LXJlbW92ZS1nZW5lcmljLXJ1bGUKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1kaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnIKLWluZGV4IDBmZGJlOWEuLmMxMWYyOTcgMTAwNjQ0Ci0tLS0gYS9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCi0rKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLmJyCi1AQCAtMzEsMTggKzMxLDYgQEAgJChob3N0LWNtdWx0aSk6ICU6ICQoaG9z
dC1jb2JqcykgJChob3N0LWNzaGxpYikKLSAkKGhvc3QtY3h4bXVsdGkpOiAlOiAkKGhvc3QtY3h4
b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQotIAkkKEhPU1RDWFgpICQoSE9TVF9F
WFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kQCkgJChhZGRwcmVmaXgg
JChvYmopLywkKCQoQEYpLW9ianMpICQoJChARiktY3h4b2JqcykpICQoSE9TVExPQURMSUJFU18k
KEBGKSkgLW8gJChvYmopLyRACi0gCi0tJChvYmopLyUubzogJS5jCi0tCSQoSE9TVENDKSAkKEhP
U1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAkPCAt
byAkQAotLQotLSQob2JqKS8lLm86ICQob2JqKS8lLmMKLS0JJChIT1NUQ0MpICQoSE9TVF9FWFRS
QUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACi0t
Ci0tJChvYmopLyUubzogJS5jYwotLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhP
U1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoQEYpKSAtYyAkPCAtbyAkQAotLQotLSQob2JqKS8l
OjogJChzcmMpLyVfc2hpcHBlZAotLQkkKFEpY2F0ICQ8ID4gJEAKLS0KLSBjbGVhbjoKLSAJJChR
KXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpCi0gZGlzdGNsZWFuOiBj
bGVhbgotZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUt
Z2VuZXJpYy1ydWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5l
cmljLXJ1bGUKLW5ldyBmaWxlIG1vZGUgMTAwNjQ0Ci1pbmRleCAwMDAwMDAwLi5lNjlkZTI5CmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZp
eGRlcC1oZWFkZXIgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0
LWZpeGRlcC1oZWFkZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiMmM4YWUuLjAw
MDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1m
aXhkZXAtaGVhZGVyCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRl
cC5jCi1pbmRleCBmYWNiZDYwLi45N2FmYjcwIDEwMDY0NAotLS0tIGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9maXhkZXAuYwotKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYwotQEAgLTI2
OSw2ICsyNjksNyBAQCBzdGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBjaGFyICpzLCBp
bnQgbGVuKQotIHsKLSAJcmV0dXJuIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiaW5jbHVkZS9nZW5l
cmF0ZWQvYXV0b2NvbmYuaCIpIHx8Ci0gCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgImlu
Y2x1ZGUvZ2VuZXJhdGVkL2F1dG9rc3ltcy5oIikgfHwKLSsJICAgICAgIHN0cl9lbmRzX3dpdGgo
cywgbGVuLCAiYnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fAotIAkgICAgICAgc3RyX2Vu
ZHNfd2l0aChzLCBsZW4sICIudmVyIik7Ci0gfQotIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBsaWNpdC1ydWxlcyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVsZXMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDRlMTc5ZTguLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXRjaGVzLzA2LXJlbW92ZS1pbXBsaWNpdC1ydWxlcworKysgL2Rldi9udWxsCkBAIC0xLDEzICsw
LDAgQEAKLWRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgotaW5kZXggNThlNmU3NS4uYWZlOTRlZSAxMDA2
NDQKLS0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKLSsrKyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKLUBAIC00LDYgKzQsOCBAQCB0b3BfYnVpbGRkaXI9Li4v
Li4vCi0gc3JjdHJlZSA6PSAuCi0gb2JqID89IC4KLSAKLSsuU1VGRklYRVMgOgotKwotIGluY2x1
ZGUgTWFrZWZpbGUucnVsZXMKLSBpbmNsdWRlIE1ha2VmaWxlCi0gI0hPU1RDRkxBR1MrPS1EaW5s
aW5lPSIiIC1pbmNsdWRlIGZvby5oCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Bh
dGNoZXMvMDctaW1wb3J0LWhvc3QtdG9vbHMtcnVsZXMgYi9zdXBwb3J0L2tjb25maWcubmV3L3Bh
dGNoZXMvMDctaW1wb3J0LWhvc3QtdG9vbHMtcnVsZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQyNGRjOTcuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVz
LzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAg
QEAKLWRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgotaW5kZXggYWZlOTRlZS4uOGU2NGE5YiAxMDA2NDQK
LS0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKLSsrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUuYnIKLUBAIC0xMCwyOSArMTAsNDEgQEAgaW5jbHVkZSBNYWtlZmls
ZS5ydWxlcwotIGluY2x1ZGUgTWFrZWZpbGUKLSAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWlu
Y2x1ZGUgZm9vLmgKLSAtaW5jbHVkZSAkKG9iaikvLmRlcGVuZAotLSQob2JqKS8uZGVwZW5kOiAk
KHdpbGRjYXJkICouaCAqLmMpCi0tCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9T
VENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoKLSAKLSBfX2hvc3Rwcm9ncyA6
PSAkKHNvcnQgJChob3N0cHJvZ3MteSkgJChob3N0cHJvZ3MtbSkpCi0taG9zdC1jc2luZ2xlIDo9
ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkKLSto
b3N0LWNzaGxpYiA6PSAkKHNvcnQgJChob3N0bGlicy15KSAkKGhvc3RsaWJzLW0pKQotK2hvc3Qt
Y3h4c2hsaWIgOj0gJChzb3J0ICQoaG9zdGN4eGxpYnMteSkgJChob3N0Y3h4bGlicy1tKSkKLSsK
LSsjIEMgY29kZQotKyMgRXhlY3V0YWJsZXMgY29tcGlsZWQgZnJvbSBhIHNpbmdsZSAuYyBmaWxl
Ci0raG9zdC1jc2luZ2xlOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksIFwKLSsgICAgICAg
ICAgICAgJChpZiAkKCQobSktb2JqcykkKCQobSktY3h4b2JqcyksLCQobSkpKQotIGhvc3QtY211
bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwKLS0gICAgICAgICAgICQoaWYgJCgk
KG0pLWN4eG9ianMpLCwkKGlmICQoJChtKS1vYmpzKSwkKG0pKSkpCi0taG9zdC1jeHhtdWx0aSA6
PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCi0tICAgICAgICAgICAkKGlmICQoJChtKS1j
eHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQotLWhvc3QtY29ianMgOj0gJChhZGRw
cmVmaXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9i
anMpKSkpCi0taG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9y
ZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1jeHhvYmpzKSkpKQotKwkJICAgICAgICAgICAg
JChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkKLSsjIE9iamVj
dCAoLm8pIGZpbGVzIGNvbXBpbGVkIGZyb20gLmMgZmlsZXMKLStob3N0LWNvYmpzICA6PSAkKHNv
cnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkKLSsKLSsjIEMrKyBj
b2RlCi0rIyBDKysgZXhlY3V0YWJsZXMgY29tcGlsZWQgZnJvbSBhdCBsZWFzdCBvbmUgLmNjIGZp
bGUKLSsjIGFuZCB6ZXJvIG9yIG1vcmUgLmMgZmlsZXMKLSsgaG9zdC1jeHhtdWx0aSAgIDo9ICQo
Zm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSkpKQotKyMg
QysrIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBpbGVkIGZyb20gLmNjIGZpbGVzCi0raG9zdC1jeHhv
YmpzICAgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3h4bXVsdGkpLCQoJChtKS1jeHhv
YmpzKSkpCi0rI09iamVjdCAoLm8pIGZpbGVzIHVzZWQgYnkgdGhlIHNoYXJlZCBsaWJhcmllcwot
K2hvc3QtY3Nob2JqcyAgICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWNzaGxpYiksJCgk
KG06LnNvPS1vYmpzKSkpKQotK2hvc3QtY3h4c2hvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0s
JChob3N0LWN4eHNobGliKSwkKCQobTouc289LW9ianMpKSkpCi0rCi0rCi0raG9zdC1jc2luZ2xl
IDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNzaW5nbGUpKQotK2hvc3QtY211bHRpICA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jbXVsdGkpKQotK2hvc3QtY3h4bXVsdGkgIDo9
ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG11bHRpKSkKLStob3N0LWNvYmpzIDo9ICQo
YWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNvYmpzKSkKLStob3N0LWN4eG9ianMgOj0gJChhZGRw
cmVmaXggJChvYmopLywkKGhvc3QtY3h4b2JqcykpCi0gZml4ZGVwLW9ianMgOj0gJChvYmopL2Zp
eGRlcC5vCi0gCi0gSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgot
IAotLSQoaG9zdC1jc2luZ2xlKTogJTogJS5jCi0tCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKLS0KLS0k
KGhvc3QtY211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQotLQkkKEhPU1RD
QykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChh
ZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1v
ICQob2JqKS8kQAotIAotLSQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhv
c3QtY29ianMpICQoaG9zdC1jc2hsaWIpCi0tCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdT
KSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQo
JChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAk
KG9iaikvJEAKLSAKLSAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQotIAkkKEhPU1RDQykg
JChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgJDwg
LW8gJEAKLUBAIC00MCw2ICs1Miw4MCBAQCAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQot
ICQoZml4ZGVwLW9ianMpOiAkKHNyYykvZml4ZGVwLmMKLSAJJChIT1NUQ0MpICQoSE9TVF9FWFRS
QUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACi0g
Ci0rIyMjIyMKLSsjIENvbXBpbGUgcHJvZ3JhbXMgb24gdGhlIGhvc3QKLSsKLSsjIENyZWF0ZSBl
eGVjdXRhYmxlIGZyb20gYSBzaW5nbGUgLmMgZmlsZQotKyMgaG9zdC1jc2luZ2xlIC0+IEV4ZWN1
dGFibGUKLStxdWlldF9jbWRfaG9zdC1jc2luZ2xlIAk9IEhPU1RDQyAgJEAKLSsgICAgICBjbWRf
aG9zdC1jc2luZ2xlCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVExERkxBR1MpIC1v
ICRAICQ8IFwKLSsJCSQoSE9TVExETElCUykgJChIT1NUTERMSUJTXyQoQEYpKQotKyQoaG9zdC1j
c2luZ2xlKTogJChvYmopLyU6ICQoc3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQotKwkkKGNh
bGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jc2luZ2xlKQotKwotKyMgTGluayBhbiBleGVjdXRhYmxl
IGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmlsZXMsIGFsbCBwbGFpbiBjCi0rIyBob3N0LWNtdWx0aSAt
PiBleGVjdXRhYmxlCi0rcXVpZXRfY21kX2hvc3QtY211bHRpCT0gSE9TVExEICAkQAotKyAgICAg
IGNtZF9ob3N0LWNtdWx0aQk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAtbyAkQCBcCi0rCQkJ
ICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykpIFwKLSsJCQkgICQoSE9TVF9MREZM
QUdTKSAkKEhPU1RMRExJQlNfJChARikpCi0rJChob3N0LWNtdWx0aSk6ICQob2JqKS9maXhkZXAg
Rk9SQ0UKLSsJJChjYWxsIGlmX2NoYW5nZWQsaG9zdC1jbXVsdGkpCi0rJChjYWxsIG11bHRpX2Rl
cGVuZCwkKGhvc3QtY211bHRpKSwgLCAtb2JqcykKLSsKLSsKLSsjIENyZWF0ZSAubyBmaWxlIGZy
b20gYSBzaW5nbGUgLmMgZmlsZQotKyMgaG9zdC1jb2JqcyAtPiAubwotK3F1aWV0X2NtZF9ob3N0
LWNvYmpzCT0gSE9TVENDICAkQAotKyAgICAgIGNtZF9ob3N0LWNvYmpzCT0gJChIT1NUQ0MpICQo
aG9zdGNfZmxhZ3MpICQoSE9TVENGTEFHU18kKEBGKSlcCi0rCQkJICAtYyAtbyAkQCAkPAotKyQo
ZmlsdGVyLW91dCAlLnRhYi5vLCAkKGZpbHRlci1vdXQgJS5sZXgubywkKGhvc3QtY29ianMpKSk6
ICQob2JqKS8lLm86XAotKwkJJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFCi0rCSQoY2Fs
bCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNvYmpzKQotKwotKyQoZmlsdGVyICUubGV4Lm8sJChob3N0
LWNvYmpzKSk6ICQob2JqKS8lLmxleC5vOiAgJChvYmopLyUubGV4LmMgJChvYmopL2ZpeGRlcCBG
T1JDRQotKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykKLSsKLSskKGZpbHRlciAl
LnRhYi5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikvJS50YWIubzogICQob2JqKS8lLnRhYi5jICQo
b2JqKS9maXhkZXAgRk9SQ0UKLSsJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY29ianMpCi0r
Ci0rIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFzZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYSBtaXh0
dXJlIG9mIC5jIGFuZCAuY2MKLSsjIGhvc3QtY3h4bXVsdGkgLT4gZXhlY3V0YWJsZQotK3F1aWV0
X2NtZF9ob3N0LWN4eG11bHRpCT0gSE9TVExEICAkQAotKyAgICAgIGNtZF9ob3N0LWN4eG11bHRp
CT0gJChIT1NUQ1hYKSAkKEhPU1RMREZMQUdTKSAtbyAkQFwKLSsJCQkgICQoZm9yZWFjaCBvLG9i
anMgY3h4b2JqcyxcCi0rCQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktJChvKSkpKSBc
Ci0rCQkJICAkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18kKEBGKSkKLSskKGhvc3QtY3h4bXVs
dGkpOiBGT1JDRQotKwkkKGNhbGwgaWZfY2hhbmdlZCxob3N0LWN4eG11bHRpKQotKyQoY2FsbCBt
dWx0aV9kZXBlbmQsJChob3N0LWN4eG11bHRpKSwgLCAtb2JqcyAtY3h4b2JqcykKLSsKLSsKLSsj
IENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmNjIChDKyspIGZpbGUKLStxdWlldF9jbWRf
aG9zdC1jeHhvYmpzCT0gSE9TVENYWCAkQAotKyAgICAgIGNtZF9ob3N0LWN4eG9ianMJPSAkKEhP
U1RDWFgpICQoaG9zdGN4eF9mbGFncykgJChIT1NUQ1hYRkxBR1NfJChARikpIFwKLSsJCQkgIC1j
IC1vICRAICQ8Ci0rJChob3N0LWN4eG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jYyBGT1JD
RQotKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jeHhvYmpzKQotKwotKyMgQ29tcGlsZSAu
YyBmaWxlLCBjcmVhdGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgLm8gZmlsZQotKyMgaG9zdC1jc2hv
YmpzIC0+IC5vCi0rcXVpZXRfY21kX2hvc3QtY3Nob2Jqcwk9IEhPU1RDQyAgLWZQSUMgJEAKLSsg
ICAgICBjbWRfaG9zdC1jc2hvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpIC1mUElDIC1j
IC1vICRAICQ8Ci0rJChob3N0LWNzaG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNF
Ci0rCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNzaG9ianMpCi0rCi0rIyBDb21waWxlIC5j
IGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxlCi0rIyBOb3RlIHRoYXQg
cGx1Z2luIGNhcGFibGUgZ2NjIHZlcnNpb25zIGNhbiBiZSBlaXRoZXIgQyBvciBDKysgYmFzZWQK
LSsjIHRoZXJlZm9yZSBwbHVnaW4gc291cmNlIGZpbGVzIGhhdmUgdG8gYmUgY29tcGlsYWJsZSBp
biBib3RoIEMgYW5kIEMrKyBtb2RlLgotKyMgVGhpcyBpcyB3aHkgYSBDKysgY29tcGlsZXIgaXMg
aW52b2tlZCBvbiBhIC5jIGZpbGUuCi0rIyBob3N0LWN4eHNob2JqcyAtPiAubwotK3F1aWV0X2Nt
ZF9ob3N0LWN4eHNob2Jqcwk9IEhPU1RDWFggLWZQSUMgJEAKLSsgICAgICBjbWRfaG9zdC1jeHhz
aG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4eF9mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwKLSsk
KGhvc3QtY3h4c2hvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZP
UkNFCi0rCUBlY2hvIHRlc3QtLSRACi0rCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eHNo
b2JqcykKLSsKLSBjbGVhbjoKLSAJJChRKXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVh
bi1maWxlcykpCi0gZGlzdGNsZWFuOiBjbGVhbgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNGEzYTM1OC4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Bh
dGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZworKysgL2Rldi9udWxsCkBAIC0xLDE5ICsw
LDAgQEAKLWRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgotaW5kZXggMjlkZWU1ZS4uOWMxMTI5MyAxMDA2
NDQKLS0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKLSsrKyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKLUBAIC00Miw5ICs0MiwxMyBAQCBob3N0LWNvYmpzIDo9
ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNvYmpzKSkKLSBob3N0LWN4eG9ianMgOj0gJChh
ZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4b2JqcykpCi0gZml4ZGVwLW9ianMgOj0gJChvYmop
L2ZpeGRlcC5vCi0gCi0tSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJc
IgotK0hPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKHNyYykgLUkkKG9iaikgLURDT05GSUdfPVwiXCIK
LSAKLStfaG9zdGNfZmxhZ3MgPSAkKEhPU1RDRkxBR1MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChI
T1NUQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKLStfaG9zdGN4eF9mbGFncyA9ICQoSE9TVENYWEZM
QUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoYmFzZXRhcmdldCkubykK
LSAKLStob3N0Y19mbGFncyAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y19mbGFncykK
LStob3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y3h4X2ZsYWdzKQot
IAotICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpCi0gCSQoSE9TVENDKSAkKEhPU1RfRVhU
UkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAkPCAtbyAkQApkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1r
Y29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1r
Y29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzU3YzIyLi4wMDAwMDAwCi0t
LSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2ItaW4ta2NvbmZp
ZworKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLWRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L2xleGVyLmwgYi9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwKLWluZGV4IDYz
NTRjOTAuLmM1YWNiMzIgMTAwNjQ0Ci0tLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwK
LSsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubAotQEAgLTgsNiArOCw3IEBACi0gJXsK
LSAKLSAjaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0rI2luY2x1ZGUgPGdsb2IuaD4KLSAjaW5jbHVkZSA8
bGltaXRzLmg+Ci0gI2luY2x1ZGUgPHN0ZGlvLmg+Ci0gI2luY2x1ZGUgPHN0ZGxpYi5oPgotQEAg
LTQ0Miw2ICs0NDMsMzIgQEAgdm9pZCB6Y29uZl9uZXh0ZmlsZShjb25zdCBjaGFyICpuYW1lKQot
IAljdXJyZW50X2ZpbGUgPSBmaWxlOwotIH0KLSAKLSt2b2lkIHpjb25mX25leHRmaWxlcyhjb25z
dCBjaGFyICp3aWxkY2FyZCkKLSt7Ci0rCWdsb2JfdCBnID0gezB9OwotKwljaGFyICoqdzsKLSsJ
aW50IGk7Ci0rCi0rCWlmIChnbG9iKHdpbGRjYXJkLCAwLCBOVUxMLCAmZykgIT0gMCkgewotKwkJ
cmV0dXJuOwotKwl9Ci0rCWlmIChnLmdsX3BhdGh2ID09IE5VTEwpIHsKLSsJCWdsb2JmcmVlKCZn
KTsKLSsJCXJldHVybjsKLSsJfQotKwotKwkvKiB3b3JraW5nIHRocm91Z2ggZmlsZXMgYmFja3dh
cmRzLCBzaW5jZQotKwkgKiB3ZSdyZSBmaXJzdCBwdXNoaW5nIHRoZW0gb24gYSBzdGFjawotKwkg
KiBiZWZvcmUgYWN0dWFsbHkgaGFuZGxpbmcgdGhlbS4KLSsJICovCi0rCWZvciAoaSA9IGcuZ2xf
cGF0aGM7IGkgPiAwOyBpLS0pIHsKLSsJCXcgPSAmZy5nbF9wYXRodltpIC0gMV07Ci0rCQl6Y29u
Zl9uZXh0ZmlsZSgqdyk7Ci0rCX0KLSsKLSsJZ2xvYmZyZWUoJmcpOwotK30KLSsKLSBzdGF0aWMg
dm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpCi0gewotIAlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7Ci1k
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaCBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbGtjLmgKLWluZGV4IGNiYzc2NTguLjY5ZDJjNzcgMTAwNjQ0Ci0tLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L2xrYy5oCi0rKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oCi1AQCAtNDQs
NiArNDQsNyBAQCB2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKTsKLSBGSUxFICp6Y29uZl9mb3Bl
bihjb25zdCBjaGFyICpuYW1lKTsKLSB2b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5h
bWUpOwotIHZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSk7Ci0rdm9pZCB6Y29u
Zl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqbmFtZSk7Ci0gaW50IHpjb25mX2xpbmVubyh2b2lkKTsK
LSBjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpOwotIAotZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvcGFyc2VyLnkgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55Ci1p
bmRleCA2MDkzNmM3Li45NTcwMGY4IDEwMDY0NAotLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXJzZXIueQotKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQotQEAgLTM2Niw3ICsz
NjYsNyBAQCBtZW51X29wdGlvbl9saXN0OgotIHNvdXJjZV9zdG10OiBUX1NPVVJDRSBwcm9tcHQg
VF9FT0wKLSB7Ci0gCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNv
bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOwotLQl6Y29uZl9uZXh0ZmlsZSgkMik7
Ci0rCXpjb25mX25leHRmaWxlcygkMik7Ci0gCWZyZWUoJDIpOwotIH07Ci0gCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3ByZXByb2Nlc3MuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
cHJlcHJvY2Vzcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTJkZmJmLi4wMDAw
MDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJvY2Vzcy5jCisrKyAvZGV2L251bGwK
QEAgLTEsNTczICswLDAgQEAKLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0v
LwotLy8gQ29weXJpZ2h0IChDKSAyMDE4IE1hc2FoaXJvIFlhbWFkYSA8eWFtYWRhLm1hc2FoaXJv
QHNvY2lvbmV4dC5jb20+Ci0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGFyZy5o
PgotI2luY2x1ZGUgPHN0ZGJvb2wuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaW5jbHVkZSAibGlzdC5oIgotI2luY2x1
ZGUgImxrYy5oIgotCi0jZGVmaW5lIEFSUkFZX1NJWkUoYXJyKQkJKHNpemVvZihhcnIpIC8gc2l6
ZW9mKChhcnIpWzBdKSkKLQotc3RhdGljIGNoYXIgKmV4cGFuZF9zdHJpbmdfd2l0aF9hcmdzKGNv
bnN0IGNoYXIgKmluLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLQotc3RhdGljIHZvaWQgX19h
dHRyaWJ1dGVfXygobm9yZXR1cm4pKSBwcGVycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQot
ewotCXZhX2xpc3QgYXA7Ci0KLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCBjdXJyZW50X2Zp
bGUtPm5hbWUsIHl5bGluZW5vKTsKLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2ZnByaW50Zihz
dGRlcnIsIGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci0JZnByaW50ZihzdGRlcnIsICJcbiIp
OwotCi0JZXhpdCgxKTsKLX0KLQotLyoKLSAqIEVudmlyb25tZW50IHZhcmlhYmxlcwotICovCi1z
dGF0aWMgTElTVF9IRUFEKGVudl9saXN0KTsKLQotc3RydWN0IGVudiB7Ci0JY2hhciAqbmFtZTsK
LQljaGFyICp2YWx1ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci19OwotCi1zdGF0aWMgdm9p
ZCBlbnZfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQotewotCXN0cnVj
dCBlbnYgKmU7Ci0KLQllID0geG1hbGxvYyhzaXplb2YoKmUpKTsKLQllLT5uYW1lID0geHN0cmR1
cChuYW1lKTsKLQllLT52YWx1ZSA9IHhzdHJkdXAodmFsdWUpOwotCi0JbGlzdF9hZGRfdGFpbCgm
ZS0+bm9kZSwgJmVudl9saXN0KTsKLX0KLQotc3RhdGljIHZvaWQgZW52X2RlbChzdHJ1Y3QgZW52
ICplKQotewotCWxpc3RfZGVsKCZlLT5ub2RlKTsKLQlmcmVlKGUtPm5hbWUpOwotCWZyZWUoZS0+
dmFsdWUpOwotCWZyZWUoZSk7Ci19Ci0KLS8qIFRoZSByZXR1cm5lZCBwb2ludGVyIG11c3QgYmUg
ZnJlZWQgd2hlbiBkb25lICovCi1zdGF0aWMgY2hhciAqZW52X2V4cGFuZChjb25zdCBjaGFyICpu
YW1lKQotewotCXN0cnVjdCBlbnYgKmU7Ci0JY29uc3QgY2hhciAqdmFsdWU7Ci0KLQlpZiAoISpu
YW1lKQotCQlyZXR1cm4gTlVMTDsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmVudl9saXN0
LCBub2RlKSB7Ci0JCWlmICghc3RyY21wKG5hbWUsIGUtPm5hbWUpKQotCQkJcmV0dXJuIHhzdHJk
dXAoZS0+dmFsdWUpOwotCX0KLQotCXZhbHVlID0gZ2V0ZW52KG5hbWUpOwotCWlmICghdmFsdWUp
Ci0JCXJldHVybiBOVUxMOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIHJlbWVtYmVyIGFsbCByZWZl
cmVuY2VkIGVudmlyb25tZW50IHZhcmlhYmxlcy4KLQkgKiBUaGV5IHdpbGwgYmUgd3JpdHRlbiBv
dXQgdG8gaW5jbHVkZS9jb25maWcvYXV0by5jb25mLmNtZAotCSAqLwotCWVudl9hZGQobmFtZSwg
dmFsdWUpOwotCi0JcmV0dXJuIHhzdHJkdXAodmFsdWUpOwotfQotCi12b2lkIGVudl93cml0ZV9k
ZXAoRklMRSAqZiwgY29uc3QgY2hhciAqYXV0b2NvbmZpZ19uYW1lKQotewotCXN0cnVjdCBlbnYg
KmUsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgdG1wLCAmZW52X2xpc3Qs
IG5vZGUpIHsKLQkJZnByaW50ZihmLCAiaWZuZXEgXCIkKCVzKVwiIFwiJXNcIlxuIiwgZS0+bmFt
ZSwgZS0+dmFsdWUpOwotCQlmcHJpbnRmKGYsICIlczogRk9SQ0VcbiIsIGF1dG9jb25maWdfbmFt
ZSk7Ci0JCWZwcmludGYoZiwgImVuZGlmXG4iKTsKLQkJZW52X2RlbChlKTsKLQl9Ci19Ci0KLS8q
Ci0gKiBCdWlsdC1pbiBmdW5jdGlvbnMKLSAqLwotc3RydWN0IGZ1bmN0aW9uIHsKLQljb25zdCBj
aGFyICpuYW1lOwotCXVuc2lnbmVkIGludCBtaW5fYXJnczsKLQl1bnNpZ25lZCBpbnQgbWF4X2Fy
Z3M7Ci0JY2hhciAqKCpmdW5jKShpbnQgYXJnYywgY2hhciAqYXJndltdKTsKLX07Ci0KLXN0YXRp
YyBjaGFyICpkb19lcnJvcl9pZihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWlmICghc3Ry
Y21wKGFyZ3ZbMF0sICJ5IikpCi0JCXBwZXJyb3IoIiVzIiwgYXJndlsxXSk7Ci0KLQlyZXR1cm4g
TlVMTDsKLX0KLQotc3RhdGljIGNoYXIgKmRvX2ZpbGVuYW1lKGludCBhcmdjLCBjaGFyICphcmd2
W10pCi17Ci0JcmV0dXJuIHhzdHJkdXAoY3VycmVudF9maWxlLT5uYW1lKTsKLX0KLQotc3RhdGlj
IGNoYXIgKmRvX2luZm8oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlwcmludGYoIiVzXG4i
LCBhcmd2WzBdKTsKLQotCXJldHVybiB4c3RyZHVwKCIiKTsKLX0KLQotc3RhdGljIGNoYXIgKmRv
X2xpbmVubyhpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWNoYXIgYnVmWzE2XTsKLQotCXNw
cmludGYoYnVmLCAiJWQiLCB5eWxpbmVubyk7Ci0KLQlyZXR1cm4geHN0cmR1cChidWYpOwotfQot
Ci1zdGF0aWMgY2hhciAqZG9fc2hlbGwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlGSUxF
ICpwOwotCWNoYXIgYnVmWzI1Nl07Ci0JY2hhciAqY21kOwotCXNpemVfdCBucmVhZDsKLQlpbnQg
aTsKLQotCWNtZCA9IGFyZ3ZbMF07Ci0KLQlwID0gcG9wZW4oY21kLCAiciIpOwotCWlmICghcCkg
ewotCQlwZXJyb3IoY21kKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlucmVhZCA9IGZyZWFkKGJ1Ziwg
MSwgc2l6ZW9mKGJ1ZiksIHApOwotCWlmIChucmVhZCA9PSBzaXplb2YoYnVmKSkKLQkJbnJlYWQt
LTsKLQotCS8qIHJlbW92ZSB0cmFpbGluZyBuZXcgbGluZXMgKi8KLQl3aGlsZSAobnJlYWQgPiAw
ICYmIGJ1ZltucmVhZCAtIDFdID09ICdcbicpCi0JCW5yZWFkLS07Ci0KLQlidWZbbnJlYWRdID0g
MDsKLQotCS8qIHJlcGxhY2UgYSBuZXcgbGluZSB3aXRoIGEgc3BhY2UgKi8KLQlmb3IgKGkgPSAw
OyBpIDwgbnJlYWQ7IGkrKykgewotCQlpZiAoYnVmW2ldID09ICdcbicpCi0JCQlidWZbaV0gPSAn
ICc7Ci0JfQotCi0JaWYgKHBjbG9zZShwKSA9PSAtMSkgewotCQlwZXJyb3IoY21kKTsKLQkJZXhp
dCgxKTsKLQl9Ci0KLQlyZXR1cm4geHN0cmR1cChidWYpOwotfQotCi1zdGF0aWMgY2hhciAqZG9f
d2FybmluZ19pZihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCWlmICghc3RyY21wKGFyZ3Zb
MF0sICJ5IikpCi0JCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLAotCQkJY3VycmVudF9m
aWxlLT5uYW1lLCB5eWxpbmVubywgYXJndlsxXSk7Ci0KLQlyZXR1cm4geHN0cmR1cCgiIik7Ci19
Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnVuY3Rpb24gZnVuY3Rpb25fdGFibGVbXSA9IHsKLQkv
KiBOYW1lCQlNSU4JTUFYCUZ1bmN0aW9uICovCi0JeyAiZXJyb3ItaWYiLAkyLAkyLAlkb19lcnJv
cl9pZiB9LAotCXsgImZpbGVuYW1lIiwJMCwJMCwJZG9fZmlsZW5hbWUgfSwKLQl7ICJpbmZvIiwJ
MSwJMSwJZG9faW5mbyB9LAotCXsgImxpbmVubyIsCTAsCTAsCWRvX2xpbmVubyB9LAotCXsgInNo
ZWxsIiwJMSwJMSwJZG9fc2hlbGwgfSwKLQl7ICJ3YXJuaW5nLWlmIiwJMiwJMiwJZG9fd2Fybmlu
Z19pZiB9LAotfTsKLQotI2RlZmluZSBGVU5DVElPTl9NQVhfQVJHUwkJMTYKLQotc3RhdGljIGNo
YXIgKmZ1bmN0aW9uX2V4cGFuZChjb25zdCBjaGFyICpuYW1lLCBpbnQgYXJnYywgY2hhciAqYXJn
dltdKQotewotCWNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZjsKLQlpbnQgaTsKLQotCWZvciAoaSA9
IDA7IGkgPCBBUlJBWV9TSVpFKGZ1bmN0aW9uX3RhYmxlKTsgaSsrKSB7Ci0JCWYgPSAmZnVuY3Rp
b25fdGFibGVbaV07Ci0JCWlmIChzdHJjbXAoZi0+bmFtZSwgbmFtZSkpCi0JCQljb250aW51ZTsK
LQotCQlpZiAoYXJnYyA8IGYtPm1pbl9hcmdzKQotCQkJcHBlcnJvcigidG9vIGZldyBmdW5jdGlv
biBhcmd1bWVudHMgcGFzc2VkIHRvICclcyciLAotCQkJCW5hbWUpOwotCi0JCWlmIChhcmdjID4g
Zi0+bWF4X2FyZ3MpCi0JCQlwcGVycm9yKCJ0b28gbWFueSBmdW5jdGlvbiBhcmd1bWVudHMgcGFz
c2VkIHRvICclcyciLAotCQkJCW5hbWUpOwotCi0JCXJldHVybiBmLT5mdW5jKGFyZ2MsIGFyZ3Yp
OwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0vKgotICogVmFyaWFibGVzIChhbmQgdXNlci1k
ZWZpbmVkIGZ1bmN0aW9ucykKLSAqLwotc3RhdGljIExJU1RfSEVBRCh2YXJpYWJsZV9saXN0KTsK
LQotc3RydWN0IHZhcmlhYmxlIHsKLQljaGFyICpuYW1lOwotCWNoYXIgKnZhbHVlOwotCWVudW0g
dmFyaWFibGVfZmxhdm9yIGZsYXZvcjsKLQlpbnQgZXhwX2NvdW50OwotCXN0cnVjdCBsaXN0X2hl
YWQgbm9kZTsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmFyaWFibGUgKnZhcmlhYmxlX2xvb2t1cChj
b25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCB2YXJpYWJsZSAqdjsKLQotCWxpc3RfZm9yX2Vh
Y2hfZW50cnkodiwgJnZhcmlhYmxlX2xpc3QsIG5vZGUpIHsKLQkJaWYgKCFzdHJjbXAobmFtZSwg
di0+bmFtZSkpCi0JCQlyZXR1cm4gdjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGlj
IGNoYXIgKnZhcmlhYmxlX2V4cGFuZChjb25zdCBjaGFyICpuYW1lLCBpbnQgYXJnYywgY2hhciAq
YXJndltdKQotewotCXN0cnVjdCB2YXJpYWJsZSAqdjsKLQljaGFyICpyZXM7Ci0KLQl2ID0gdmFy
aWFibGVfbG9va3VwKG5hbWUpOwotCWlmICghdikKLQkJcmV0dXJuIE5VTEw7Ci0KLQlpZiAoYXJn
YyA9PSAwICYmIHYtPmV4cF9jb3VudCkKLQkJcHBlcnJvcigiUmVjdXJzaXZlIHZhcmlhYmxlICcl
cycgcmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpIiwKLQkJCW5hbWUpOwotCi0JaWYgKHYt
PmV4cF9jb3VudCA+IDEwMDApCi0JCXBwZXJyb3IoIlRvbyBkZWVwIHJlY3Vyc2l2ZSBleHBhbnNp
b24iKTsKLQotCXYtPmV4cF9jb3VudCsrOwotCi0JaWYgKHYtPmZsYXZvciA9PSBWQVJfUkVDVVJT
SVZFKQotCQlyZXMgPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyh2LT52YWx1ZSwgYXJnYywgYXJn
dik7Ci0JZWxzZQotCQlyZXMgPSB4c3RyZHVwKHYtPnZhbHVlKTsKLQotCXYtPmV4cF9jb3VudC0t
OwotCi0JcmV0dXJuIHJlczsKLX0KLQotdm9pZCB2YXJpYWJsZV9hZGQoY29uc3QgY2hhciAqbmFt
ZSwgY29uc3QgY2hhciAqdmFsdWUsCi0JCSAgZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yKQot
ewotCXN0cnVjdCB2YXJpYWJsZSAqdjsKLQljaGFyICpuZXdfdmFsdWU7Ci0JYm9vbCBhcHBlbmQg
PSBmYWxzZTsKLQotCXYgPSB2YXJpYWJsZV9sb29rdXAobmFtZSk7Ci0JaWYgKHYpIHsKLQkJLyog
Rm9yIGRlZmluZWQgdmFyaWFibGVzLCArPSBpbmhlcml0cyB0aGUgZXhpc3RpbmcgZmxhdm9yICov
Ci0JCWlmIChmbGF2b3IgPT0gVkFSX0FQUEVORCkgewotCQkJZmxhdm9yID0gdi0+Zmxhdm9yOwot
CQkJYXBwZW5kID0gdHJ1ZTsKLQkJfSBlbHNlIHsKLQkJCWZyZWUodi0+dmFsdWUpOwotCQl9Ci0J
fSBlbHNlIHsKLQkJLyogRm9yIHVuZGVmaW5lZCB2YXJpYWJsZXMsICs9IGFzc3VtZXMgdGhlIHJl
Y3Vyc2l2ZSBmbGF2b3IgKi8KLQkJaWYgKGZsYXZvciA9PSBWQVJfQVBQRU5EKQotCQkJZmxhdm9y
ID0gVkFSX1JFQ1VSU0lWRTsKLQotCQl2ID0geG1hbGxvYyhzaXplb2YoKnYpKTsKLQkJdi0+bmFt
ZSA9IHhzdHJkdXAobmFtZSk7Ci0JCXYtPmV4cF9jb3VudCA9IDA7Ci0JCWxpc3RfYWRkX3RhaWwo
JnYtPm5vZGUsICZ2YXJpYWJsZV9saXN0KTsKLQl9Ci0KLQl2LT5mbGF2b3IgPSBmbGF2b3I7Ci0K
LQlpZiAoZmxhdm9yID09IFZBUl9TSU1QTEUpCi0JCW5ld192YWx1ZSA9IGV4cGFuZF9zdHJpbmco
dmFsdWUpOwotCWVsc2UKLQkJbmV3X3ZhbHVlID0geHN0cmR1cCh2YWx1ZSk7Ci0KLQlpZiAoYXBw
ZW5kKSB7Ci0JCXYtPnZhbHVlID0geHJlYWxsb2Modi0+dmFsdWUsCi0JCQkJICAgIHN0cmxlbih2
LT52YWx1ZSkgKyBzdHJsZW4obmV3X3ZhbHVlKSArIDIpOwotCQlzdHJjYXQodi0+dmFsdWUsICIg
Iik7Ci0JCXN0cmNhdCh2LT52YWx1ZSwgbmV3X3ZhbHVlKTsKLQkJZnJlZShuZXdfdmFsdWUpOwot
CX0gZWxzZSB7Ci0JCXYtPnZhbHVlID0gbmV3X3ZhbHVlOwotCX0KLX0KLQotc3RhdGljIHZvaWQg
dmFyaWFibGVfZGVsKHN0cnVjdCB2YXJpYWJsZSAqdikKLXsKLQlsaXN0X2RlbCgmdi0+bm9kZSk7
Ci0JZnJlZSh2LT5uYW1lKTsKLQlmcmVlKHYtPnZhbHVlKTsKLQlmcmVlKHYpOwotfQotCi12b2lk
IHZhcmlhYmxlX2FsbF9kZWwodm9pZCkKLXsKLQlzdHJ1Y3QgdmFyaWFibGUgKnYsICp0bXA7Ci0K
LQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgdG1wLCAmdmFyaWFibGVfbGlzdCwgbm9kZSkK
LQkJdmFyaWFibGVfZGVsKHYpOwotfQotCi0vKgotICogRXZhbHVhdGUgYSBjbGF1c2Ugd2l0aCBh
cmd1bWVudHMuICBhcmdjL2FyZ3YgYXJlIGFyZ3VtZW50cyBmcm9tIHRoZSB1cHBlcgotICogZnVu
Y3Rpb24gY2FsbC4KLSAqCi0gKiBSZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVlZCB3aGVuIGRv
bmUKLSAqLwotc3RhdGljIGNoYXIgKmV2YWxfY2xhdXNlKGNvbnN0IGNoYXIgKnN0ciwgc2l6ZV90
IGxlbiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQljaGFyICp0bXAsICpuYW1lLCAqcmVz
LCAqZW5kcHRyLCAqcHJldiwgKnA7Ci0JaW50IG5ld19hcmdjID0gMDsKLQljaGFyICpuZXdfYXJn
dltGVU5DVElPTl9NQVhfQVJHU107Ci0JaW50IG5lc3QgPSAwOwotCWludCBpOwotCXVuc2lnbmVk
IGxvbmcgbjsKLQotCXRtcCA9IHhzdHJuZHVwKHN0ciwgbGVuKTsKLQotCS8qCi0JICogSWYgdmFy
aWFibGUgbmFtZSBpcyAnMScsICcyJywgZXRjLiAgSXQgaXMgZ2VuZXJhbGx5IGFuIGFyZ3VtZW50
Ci0JICogZnJvbSBhIHVzZXItZnVuY3Rpb24gY2FsbCAoaS5lLiBsb2NhbC1zY29wZSB2YXJpYWJs
ZSkuICBJZiBub3QKLQkgKiBhdmFpbGFibGUsIHRoZW4gbG9vay11cCBnbG9iYWwtc2NvcGUgdmFy
aWFibGVzLgotCSAqLwotCW4gPSBzdHJ0b3VsKHRtcCwgJmVuZHB0ciwgMTApOwotCWlmICghKmVu
ZHB0ciAmJiBuID4gMCAmJiBuIDw9IGFyZ2MpIHsKLQkJcmVzID0geHN0cmR1cChhcmd2W24gLSAx
XSk7Ci0JCWdvdG8gZnJlZV90bXA7Ci0JfQotCi0JcHJldiA9IHAgPSB0bXA7Ci0KLQkvKgotCSAq
IFNwbGl0IGludG8gdG9rZW5zCi0JICogVGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZ3VtZW50cyBh
cmUgc2VwYXJhdGVkIGJ5IGEgY29tbWEuCi0JICogRm9yIGV4YW1wbGUsIGlmIHRoZSBmdW5jdGlv
biBjYWxsIGlzIGxpa2UgdGhpczoKLQkgKiAgICQoZm9vLCQoeCksJCh5KSkKLQkgKgotCSAqIFRo
ZSBpbnB1dCBzdHJpbmcgZm9yIHRoaXMgaGVscGVyIHNob3VsZCBiZToKLQkgKiAgIGZvbywkKHgp
LCQoeSkKLQkgKgotCSAqIGFuZCBzcGxpdCBpbnRvOgotCSAqICAgbmV3X2FyZ3ZbMF0gPSAnZm9v
JwotCSAqICAgbmV3X2FyZ3ZbMV0gPSAnJCh4KScKLQkgKiAgIG5ld19hcmd2WzJdID0gJyQoeSkn
Ci0JICovCi0Jd2hpbGUgKCpwKSB7Ci0JCWlmIChuZXN0ID09IDAgJiYgKnAgPT0gJywnKSB7Ci0J
CQkqcCA9IDA7Ci0JCQlpZiAobmV3X2FyZ2MgPj0gRlVOQ1RJT05fTUFYX0FSR1MpCi0JCQkJcHBl
cnJvcigidG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzIik7Ci0JCQluZXdfYXJndltuZXdfYXJn
YysrXSA9IHByZXY7Ci0JCQlwcmV2ID0gcCArIDE7Ci0JCX0gZWxzZSBpZiAoKnAgPT0gJygnKSB7
Ci0JCQluZXN0Kys7Ci0JCX0gZWxzZSBpZiAoKnAgPT0gJyknKSB7Ci0JCQluZXN0LS07Ci0JCX0K
LQotCQlwKys7Ci0JfQotCW5ld19hcmd2W25ld19hcmdjKytdID0gcHJldjsKLQotCS8qCi0JICog
U2hpZnQgYXJndW1lbnRzCi0JICogbmV3X2FyZ3ZbMF0gcmVwcmVzZW50cyBhIGZ1bmN0aW9uIG5h
bWUgb3IgYSB2YXJpYWJsZSBuYW1lLiAgUHV0IGl0Ci0JICogaW50byAnbmFtZScsIHRoZW4gc2hp
ZnQgdGhlIHJlc3Qgb2YgdGhlIGFyZ3VtZW50cy4gIFRoaXMgc2ltcGxpZmllcwotCSAqICdjb25z
dCcgaGFuZGxpbmcuCi0JICovCi0JbmFtZSA9IGV4cGFuZF9zdHJpbmdfd2l0aF9hcmdzKG5ld19h
cmd2WzBdLCBhcmdjLCBhcmd2KTsKLQluZXdfYXJnYy0tOwotCWZvciAoaSA9IDA7IGkgPCBuZXdf
YXJnYzsgaSsrKQotCQluZXdfYXJndltpXSA9IGV4cGFuZF9zdHJpbmdfd2l0aF9hcmdzKG5ld19h
cmd2W2kgKyAxXSwKLQkJCQkJCSAgICAgIGFyZ2MsIGFyZ3YpOwotCi0JLyogU2VhcmNoIGZvciB2
YXJpYWJsZXMgKi8KLQlyZXMgPSB2YXJpYWJsZV9leHBhbmQobmFtZSwgbmV3X2FyZ2MsIG5ld19h
cmd2KTsKLQlpZiAocmVzKQotCQlnb3RvIGZyZWU7Ci0KLQkvKiBMb29rIGZvciBidWlsdC1pbiBm
dW5jdGlvbnMgKi8KLQlyZXMgPSBmdW5jdGlvbl9leHBhbmQobmFtZSwgbmV3X2FyZ2MsIG5ld19h
cmd2KTsKLQlpZiAocmVzKQotCQlnb3RvIGZyZWU7Ci0KLQkvKiBMYXN0LCB0cnkgZW52aXJvbm1l
bnQgdmFyaWFibGUgKi8KLQlpZiAobmV3X2FyZ2MgPT0gMCkgewotCQlyZXMgPSBlbnZfZXhwYW5k
KG5hbWUpOwotCQlpZiAocmVzKQotCQkJZ290byBmcmVlOwotCX0KLQotCXJlcyA9IHhzdHJkdXAo
IiIpOwotZnJlZToKLQlmb3IgKGkgPSAwOyBpIDwgbmV3X2FyZ2M7IGkrKykKLQkJZnJlZShuZXdf
YXJndltpXSk7Ci0JZnJlZShuYW1lKTsKLWZyZWVfdG1wOgotCWZyZWUodG1wKTsKLQotCXJldHVy
biByZXM7Ci19Ci0KLS8qCi0gKiBFeHBhbmQgYSBzdHJpbmcgdGhhdCBmb2xsb3dzICckJwotICoK
LSAqIEZvciBleGFtcGxlLCBpZiB0aGUgaW5wdXQgc3RyaW5nIGlzCi0gKiAgICAgKCQoRk9PKSQo
JChCQVIpKSkkKEJBWikKLSAqIHRoaXMgaGVscGVyIGV2YWx1YXRlcwotICogICAgICQoJChGT08p
JCgkKEJBUikpKQotICogYW5kIHJldHVybnMgYSBuZXcgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGV4
cGFuc2lvbiAobm90ZSB0aGF0IHRoZSBzdHJpbmcgaXMKLSAqIHJlY3Vyc2l2ZWx5IGV4cGFuZGVk
KSwgYWxzbyBhZHZhbmNpbmcgJ3N0cicgdG8gcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyCi0g
KiBhZnRlciB0aGUgY29ycmVzcG9uZGluZyBjbG9zaW5nIHBhcmVudGhlc2lzLCBpbiB0aGlzIGNh
c2UsICpzdHIgd2lsbCBiZQotICogICAgICQoQkFSKQotICovCi1zdGF0aWMgY2hhciAqZXhwYW5k
X2RvbGxhcl93aXRoX2FyZ3MoY29uc3QgY2hhciAqKnN0ciwgaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb
XSkKLXsKLQljb25zdCBjaGFyICpwID0gKnN0cjsKLQljb25zdCBjaGFyICpxOwotCWludCBuZXN0
ID0gMDsKLQotCS8qCi0JICogSW4gS2NvbmZpZywgdmFyaWFibGUvZnVuY3Rpb24gcmVmZXJlbmNl
cyBhbHdheXMgc3RhcnQgd2l0aCAiJCgiLgotCSAqIE5laXRoZXIgc2luZ2xlLWxldHRlciB2YXJp
YWJsZXMgYXMgaW4gJEEgbm9yIGN1cmx5IGJyYWNlcyBhcyBpbiAke0NDfQotCSAqIGFyZSBzdXBw
b3J0ZWQuICAnJCcgbm90IGZvbGxvd2VkIGJ5ICcoJyBsb3NlcyBpdHMgc3BlY2lhbCBtZWFuaW5n
LgotCSAqLwotCWlmICgqcCAhPSAnKCcpIHsKLQkJKnN0ciA9IHA7Ci0JCXJldHVybiB4c3RyZHVw
KCIkIik7Ci0JfQotCi0JcCsrOwotCXEgPSBwOwotCXdoaWxlICgqcSkgewotCQlpZiAoKnEgPT0g
JygnKSB7Ci0JCQluZXN0Kys7Ci0JCX0gZWxzZSBpZiAoKnEgPT0gJyknKSB7Ci0JCQlpZiAobmVz
dC0tID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQkJcSsrOwotCX0KLQotCWlmICghKnEpCi0JCXBw
ZXJyb3IoInVudGVybWluYXRlZCByZWZlcmVuY2UgdG8gJyVzJzogbWlzc2luZyAnKSciLCBwKTsK
LQotCS8qIEFkdmFuY2UgJ3N0cicgdG8gYWZ0ZXIgdGhlIGV4cGFuZGVkIGluaXRpYWwgcG9ydGlv
biBvZiB0aGUgc3RyaW5nICovCi0JKnN0ciA9IHEgKyAxOwotCi0JcmV0dXJuIGV2YWxfY2xhdXNl
KHAsIHEgLSBwLCBhcmdjLCBhcmd2KTsKLX0KLQotY2hhciAqZXhwYW5kX2RvbGxhcihjb25zdCBj
aGFyICoqc3RyKQotewotCXJldHVybiBleHBhbmRfZG9sbGFyX3dpdGhfYXJncyhzdHIsIDAsIE5V
TEwpOwotfQotCi1zdGF0aWMgY2hhciAqX19leHBhbmRfc3RyaW5nKGNvbnN0IGNoYXIgKipzdHIs
IGJvb2wgKCppc19lbmQpKGNoYXIgYyksCi0JCQkgICAgIGludCBhcmdjLCBjaGFyICphcmd2W10p
Ci17Ci0JY29uc3QgY2hhciAqaW4sICpwOwotCWNoYXIgKmV4cGFuc2lvbiwgKm91dDsKLQlzaXpl
X3QgaW5fbGVuLCBvdXRfbGVuOwotCi0Jb3V0ID0geG1hbGxvYygxKTsKLQkqb3V0ID0gMDsKLQlv
dXRfbGVuID0gMTsKLQotCXAgPSBpbiA9ICpzdHI7Ci0KLQl3aGlsZSAoMSkgewotCQlpZiAoKnAg
PT0gJyQnKSB7Ci0JCQlpbl9sZW4gPSBwIC0gaW47Ci0JCQlwKys7Ci0JCQlleHBhbnNpb24gPSBl
eHBhbmRfZG9sbGFyX3dpdGhfYXJncygmcCwgYXJnYywgYXJndik7Ci0JCQlvdXRfbGVuICs9IGlu
X2xlbiArIHN0cmxlbihleHBhbnNpb24pOwotCQkJb3V0ID0geHJlYWxsb2Mob3V0LCBvdXRfbGVu
KTsKLQkJCXN0cm5jYXQob3V0LCBpbiwgaW5fbGVuKTsKLQkJCXN0cmNhdChvdXQsIGV4cGFuc2lv
bik7Ci0JCQlmcmVlKGV4cGFuc2lvbik7Ci0JCQlpbiA9IHA7Ci0JCQljb250aW51ZTsKLQkJfQot
Ci0JCWlmIChpc19lbmQoKnApKQotCQkJYnJlYWs7Ci0KLQkJcCsrOwotCX0KLQotCWluX2xlbiA9
IHAgLSBpbjsKLQlvdXRfbGVuICs9IGluX2xlbjsKLQlvdXQgPSB4cmVhbGxvYyhvdXQsIG91dF9s
ZW4pOwotCXN0cm5jYXQob3V0LCBpbiwgaW5fbGVuKTsKLQotCS8qIEFkdmFuY2UgJ3N0cicgdG8g
dGhlIGVuZCBjaGFyYWN0ZXIgKi8KLQkqc3RyID0gcDsKLQotCXJldHVybiBvdXQ7Ci19Ci0KLXN0
YXRpYyBib29sIGlzX2VuZF9vZl9zdHIoY2hhciBjKQotewotCXJldHVybiAhYzsKLX0KLQotLyoK
LSAqIEV4cGFuZCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBpbiB0aGUgZ2l2ZW4gc3RyaW5nLiAg
VW5kZWZpbmVkIHZhcmlhYmxlcwotICogZXhwYW5kIHRvIGFuIGVtcHR5IHN0cmluZy4KLSAqIFRo
ZSByZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVlZCB3aGVuIGRvbmUuCi0gKi8KLXN0YXRpYyBj
aGFyICpleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhjb25zdCBjaGFyICppbiwgaW50IGFyZ2MsIGNo
YXIgKmFyZ3ZbXSkKLXsKLQlyZXR1cm4gX19leHBhbmRfc3RyaW5nKCZpbiwgaXNfZW5kX29mX3N0
ciwgYXJnYywgYXJndik7Ci19Ci0KLWNoYXIgKmV4cGFuZF9zdHJpbmcoY29uc3QgY2hhciAqaW4p
Ci17Ci0JcmV0dXJuIGV4cGFuZF9zdHJpbmdfd2l0aF9hcmdzKGluLCAwLCBOVUxMKTsKLX0KLQot
c3RhdGljIGJvb2wgaXNfZW5kX29mX3Rva2VuKGNoYXIgYykKLXsKLQlyZXR1cm4gIShpc2FsbnVt
KGMpIHx8IGMgPT0gJ18nIHx8IGMgPT0gJy0nKTsKLX0KLQotLyoKLSAqIEV4cGFuZCB2YXJpYWJs
ZXMgaW4gYSB0b2tlbi4gIFRoZSBwYXJzaW5nIHN0b3BzIHdoZW4gYSB0b2tlbiBzZXBhcmF0ZXIK
LSAqIChpbiBtb3N0IGNhc2VzLCBpdCBpcyBhIHdoaXRlc3BhY2UpIGlzIGVuY291bnRlcmVkLiAg
J3N0cicgaXMgdXBkYXRlZCB0bwotICogcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyLgotICoK
LSAqIFRoZSByZXR1cm5lZCBzdHJpbmcgbXVzdCBiZSBmcmVlZCB3aGVuIGRvbmUuCi0gKi8KLWNo
YXIgKmV4cGFuZF9vbmVfdG9rZW4oY29uc3QgY2hhciAqKnN0cikKLXsKLQlyZXR1cm4gX19leHBh
bmRfc3RyaW5nKHN0ciwgaXNfZW5kX29mX3Rva2VuLCAwLCBOVUxMKTsKLX0KZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9x
Y29uZi1jZmcuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAyY2NjMGEuLjAwMDAw
MDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi1jZmcuc2gKKysrIC9kZXYvbnVsbApA
QCAtMSwzMiArMCwwIEBACi0jIS9iaW4vc2gKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAKLQotUEtHPSJRdDVDb3JlIFF0NUd1aSBRdDVXaWRnZXRzIgotUEtHMj0iUXRDb3JlIFF0
R3VpIgotCi1pZiBbIC16ICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4KLQllY2hv
ID4mMiAiKiIKLQllY2hvID4mMiAiKiAnbWFrZSB4Y29uZmlnJyByZXF1aXJlcyAncGtnLWNvbmZp
ZycuIFBsZWFzZSBpbnN0YWxsIGl0LiIKLQllY2hvID4mMiAiKiIKLQlleGl0IDEKLWZpCi0KLWlm
IHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzsgdGhlbgotCWVjaG8gY2ZsYWdzPVwiLXN0ZD1jKysx
MSAtZlBJQyAkKHBrZy1jb25maWcgLS1jZmxhZ3MgUXQ1Q29yZSBRdDVHdWkgUXQ1V2lkZ2V0cylc
IgotCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRylcIgotCWVjaG8gbW9jPVwi
JChwa2ctY29uZmlnIC0tdmFyaWFibGU9aG9zdF9iaW5zIFF0NUNvcmUpL21vY1wiCi0JZXhpdCAw
Ci1maQotCi1pZiBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0cyOyB0aGVuCi0JZWNobyBjZmxhZ3M9
XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBLRzIpXCIKLQllY2hvIGxpYnM9XCIkKHBrZy1jb25m
aWcgLS1saWJzICRQS0cyKVwiCi0JZWNobyBtb2M9XCIkKHBrZy1jb25maWcgLS12YXJpYWJsZT1t
b2NfbG9jYXRpb24gUXRDb3JlKVwiCi0JZXhpdCAwCi1maQotCi1lY2hvID4mMiAiKiIKLWVjaG8g
PiYyICIqIENvdWxkIG5vdCBmaW5kIFF0IHZpYSBwa2ctY29uZmlnLiIKLWVjaG8gPiYyICIqIFBs
ZWFzZSBpbnN0YWxsIGVpdGhlciBRdCA0Ljggb3IgNS54LiBhbmQgbWFrZSBzdXJlIGl0J3MgaW4g
UEtHX0NPTkZJR19QQVRIIgotZWNobyA+JjIgIioiCi1leGl0IDEKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvcWNvbmYuY2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDIxYWE2Li4wMDAwMDAwCi0tLSBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvcWNvbmYuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwxODk2ICswLDAgQEAK
LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICogQ29weXJpZ2h0
IChDKSAyMDE1IEJvcmlzIEJhcmJ1bG92c2tpIDxiYmFyYnVsb3Zza2lAZ21haWwuY29tPgotICov
Ci0KLSNpbmNsdWRlIDxxZ2xvYmFsLmg+Ci0KLSNpbmNsdWRlIDxRTWFpbldpbmRvdz4KLSNpbmNs
dWRlIDxRTGlzdD4KLSNpbmNsdWRlIDxxdGV4dGJyb3dzZXIuaD4KLSNpbmNsdWRlIDxRQWN0aW9u
PgotI2luY2x1ZGUgPFFGaWxlRGlhbG9nPgotI2luY2x1ZGUgPFFNZW51PgotCi0jaW5jbHVkZSA8
cWFwcGxpY2F0aW9uLmg+Ci0jaW5jbHVkZSA8cWRlc2t0b3B3aWRnZXQuaD4KLSNpbmNsdWRlIDxx
dG9vbGJhci5oPgotI2luY2x1ZGUgPHFsYXlvdXQuaD4KLSNpbmNsdWRlIDxxc3BsaXR0ZXIuaD4K
LSNpbmNsdWRlIDxxbGluZWVkaXQuaD4KLSNpbmNsdWRlIDxxbGFiZWwuaD4KLSNpbmNsdWRlIDxx
cHVzaGJ1dHRvbi5oPgotI2luY2x1ZGUgPHFtZW51YmFyLmg+Ci0jaW5jbHVkZSA8cW1lc3NhZ2Vi
b3guaD4KLSNpbmNsdWRlIDxxcmVnZXhwLmg+Ci0jaW5jbHVkZSA8cWV2ZW50Lmg+Ci0KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLQotI2luY2x1ZGUgImxrYy5oIgotI2luY2x1ZGUgInFjb25mLmgiCi0K
LSNpbmNsdWRlICJxY29uZi5tb2MiCi0jaW5jbHVkZSAiaW1hZ2VzLmgiCi0KLQotc3RhdGljIFFB
cHBsaWNhdGlvbiAqY29uZmlnQXBwOwotc3RhdGljIENvbmZpZ1NldHRpbmdzICpjb25maWdTZXR0
aW5nczsKLQotUUFjdGlvbiAqQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUFjdGlvbjsKLQotc3RhdGlj
IGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IGNoYXIqIHN0cikKLXsKLQlyZXR1cm4gUVN0
cmluZzo6ZnJvbUxvY2FsOEJpdChzdHIpOwotfQotCi1Db25maWdTZXR0aW5nczo6Q29uZmlnU2V0
dGluZ3MoKQotCTogUVNldHRpbmdzKCJ1bmlrcmFmdC5vcmciLCAicWNvbmYiKQotewotfQotCi0v
KioKLSAqIFJlYWRzIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVlcyBmcm9tIHRoZSBhcHBsaWNhdGlv
biBzZXR0aW5ncy4KLSAqLwotUUxpc3Q8aW50PiBDb25maWdTZXR0aW5nczo6cmVhZFNpemVzKGNv
bnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2spCi17Ci0JUUxpc3Q8aW50PiByZXN1bHQ7Ci0KLQlp
ZiAoY29udGFpbnMoa2V5KSkKLQl7Ci0JCVFTdHJpbmdMaXN0IGVudHJ5TGlzdCA9IHZhbHVlKGtl
eSkudG9TdHJpbmdMaXN0KCk7Ci0JCVFTdHJpbmdMaXN0OjpJdGVyYXRvciBpdDsKLQotCQlmb3Ig
KGl0ID0gZW50cnlMaXN0LmJlZ2luKCk7IGl0ICE9IGVudHJ5TGlzdC5lbmQoKTsgKytpdCkKLQkJ
CXJlc3VsdC5wdXNoX2JhY2soKCppdCkudG9JbnQoKSk7Ci0KLQkJKm9rID0gdHJ1ZTsKLQl9Ci0J
ZWxzZQotCQkqb2sgPSBmYWxzZTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qKgotICogV3Jp
dGVzIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVlcyB0byB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3Mu
Ci0gKi8KLWJvb2wgQ29uZmlnU2V0dGluZ3M6OndyaXRlU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5
LCBjb25zdCBRTGlzdDxpbnQ+JiB2YWx1ZSkKLXsKLQlRU3RyaW5nTGlzdCBzdHJpbmdMaXN0Owot
CVFMaXN0PGludD46OkNvbnN0SXRlcmF0b3IgaXQ7Ci0KLQlmb3IgKGl0ID0gdmFsdWUuYmVnaW4o
KTsgaXQgIT0gdmFsdWUuZW5kKCk7ICsraXQpCi0JCXN0cmluZ0xpc3QucHVzaF9iYWNrKFFTdHJp
bmc6Om51bWJlcigqaXQpKTsKLQlzZXRWYWx1ZShrZXksIHN0cmluZ0xpc3QpOwotCi0JcmV0dXJu
IHRydWU7Ci19Ci0KLQotLyoKLSAqIHNldCB0aGUgbmV3IGRhdGEKLSAqIFRPRE8gY2hlY2sgdGhl
IHZhbHVlCi0gKi8KLXZvaWQgQ29uZmlnSXRlbTo6b2tSZW5hbWUoaW50IGNvbCkKLXsKLX0KLQot
LyoKLSAqIHVwZGF0ZSB0aGUgZGlzcGxheWVkIG9mIGEgbWVudSBlbnRyeQotICovCi12b2lkIENv
bmZpZ0l0ZW06OnVwZGF0ZU1lbnUodm9pZCkKLXsKLQlDb25maWdMaXN0KiBsaXN0OwotCXN0cnVj
dCBzeW1ib2wqIHN5bTsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JUVN0cmluZyBwcm9tcHQ7
Ci0JaW50IHR5cGU7Ci0JdHJpc3RhdGUgZXhwcjsKLQotCWxpc3QgPSBsaXN0VmlldygpOwotCWlm
IChnb1BhcmVudCkgewotCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51QmFja1Bp
eCk7Ci0JCXByb21wdCA9ICIuLiI7Ci0JCWdvdG8gc2V0X3Byb21wdDsKLQl9Ci0KLQlzeW0gPSBt
ZW51LT5zeW07Ci0JcHJvcCA9IG1lbnUtPnByb21wdDsKLQlwcm9tcHQgPSBxZ2V0dGV4dChtZW51
X2dldF9wcm9tcHQobWVudSkpOwotCi0JaWYgKHByb3ApIHN3aXRjaCAocHJvcC0+dHlwZSkgewot
CWNhc2UgUF9NRU5VOgotCQlpZiAobGlzdC0+bW9kZSA9PSBzaW5nbGVNb2RlIHx8IGxpc3QtPm1v
ZGUgPT0gc3ltYm9sTW9kZSkgewotCQkJLyogYSBtZW51Y29uZmlnIGVudHJ5IGlzIGRpc3BsYXll
ZCBkaWZmZXJlbnRseQotCQkJICogZGVwZW5kaW5nIHdoZXRoZXIgaXQncyBhdCB0aGUgdmlldyBy
b290IG9yIGEgY2hpbGQuCi0JCQkgKi8KLQkJCWlmIChzeW0gJiYgbGlzdC0+cm9vdEVudHJ5ID09
IG1lbnUpCi0JCQkJYnJlYWs7Ci0JCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51
UGl4KTsKLQkJfSBlbHNlIHsKLQkJCWlmIChzeW0pCi0JCQkJYnJlYWs7Ci0JCQlzZXRQaXhtYXAo
cHJvbXB0Q29sSWR4LCBRSWNvbigpKTsKLQkJfQotCQlnb3RvIHNldF9wcm9tcHQ7Ci0JY2FzZSBQ
X0NPTU1FTlQ6Ci0JCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIFFJY29uKCkpOwotCQlnb3RvIHNl
dF9wcm9tcHQ7Ci0JZGVmYXVsdDoKLQkJOwotCX0KLQlpZiAoIXN5bSkKLQkJZ290byBzZXRfcHJv
bXB0OwotCi0Jc2V0VGV4dChuYW1lQ29sSWR4LCBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN5bS0+
bmFtZSkpOwotCi0JdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOwotCXN3aXRjaCAodHlwZSkgewot
CWNhc2UgU19CT09MRUFOOgotCWNhc2UgU19UUklTVEFURToKLQkJY2hhciBjaDsKLQotCQlpZiAo
IXN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiBsaXN0LT5vcHRNb2RlID09IG5vcm1hbE9wdCkgewot
CQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgUUljb24oKSk7Ci0JCQlzZXRUZXh0KG5vQ29sSWR4
LCBRU3RyaW5nOjpudWxsKTsKLQkJCXNldFRleHQobW9kQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsK
LQkJCXNldFRleHQoeWVzQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsKLQkJCWJyZWFrOwotCQl9Ci0J
CWV4cHIgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0JCXN3aXRjaCAoZXhwcikgewot
CQljYXNlIHllczoKLQkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdHlwZSA9PSBT
X0JPT0xFQU4pCi0JCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+Y2hvaWNlWWVzUGl4
KTsKLQkJCWVsc2UKLQkJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xZZXNQ
aXgpOwotCQkJc2V0VGV4dCh5ZXNDb2xJZHgsICJZIik7Ci0JCQljaCA9ICdZJzsKLQkJCWJyZWFr
OwotCQljYXNlIG1vZDoKLQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbE1v
ZFBpeCk7Ci0JCQlzZXRUZXh0KG1vZENvbElkeCwgIk0iKTsKLQkJCWNoID0gJ00nOwotCQkJYnJl
YWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHR5cGUg
PT0gU19CT09MRUFOKQotCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPmNob2ljZU5v
UGl4KTsKLQkJCWVsc2UKLQkJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xO
b1BpeCk7Ci0JCQlzZXRUZXh0KG5vQ29sSWR4LCAiTiIpOwotCQkJY2ggPSAnTic7Ci0JCQlicmVh
azsKLQkJfQotCQlpZiAoZXhwciAhPSBubykKLQkJCXNldFRleHQobm9Db2xJZHgsIHN5bV90cmlz
dGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubykgPyAiXyIgOiAwKTsKLQkJaWYgKGV4cHIgIT0gbW9k
KQotCQkJc2V0VGV4dChtb2RDb2xJZHgsIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBt
b2QpID8gIl8iIDogMCk7Ci0JCWlmIChleHByICE9IHllcykKLQkJCXNldFRleHQoeWVzQ29sSWR4
LCBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKSA/ICJfIiA6IDApOwotCi0JCXNl
dFRleHQoZGF0YUNvbElkeCwgUUNoYXIoY2gpKTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0lOVDoKLQlj
YXNlIFNfSEVYOgotCWNhc2UgU19TVFJJTkc6Ci0JCWNvbnN0IGNoYXIqIGRhdGE7Ci0KLQkJZGF0
YSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7Ci0KLQkJc2V0VGV4dChkYXRhQ29sSWR4LCBk
YXRhKTsKLQkJaWYgKHR5cGUgPT0gU19TVFJJTkcpCi0JCQlwcm9tcHQgPSBRU3RyaW5nKCIlMTog
JTIiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7Ci0JCWVsc2UKLQkJCXByb21wdCA9IFFTdHJpbmco
IiglMikgJTEiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAoIXN5
bV9oYXNfdmFsdWUoc3ltKSAmJiB2aXNpYmxlKQotCQlwcm9tcHQgKz0gIiAoTkVXKSI7Ci1zZXRf
cHJvbXB0OgotCXNldFRleHQocHJvbXB0Q29sSWR4LCBwcm9tcHQpOwotfQotCi12b2lkIENvbmZp
Z0l0ZW06OnRlc3RVcGRhdGVNZW51KGJvb2wgdikKLXsKLQlDb25maWdJdGVtKiBpOwotCi0Jdmlz
aWJsZSA9IHY7Ci0JaWYgKCFtZW51KQotCQlyZXR1cm47Ci0KLQlzeW1fY2FsY192YWx1ZShtZW51
LT5zeW0pOwotCWlmIChtZW51LT5mbGFncyAmIE1FTlVfQ0hBTkdFRCkgewotCQkvKiB0aGUgbWVu
dSBlbnRyeSBjaGFuZ2VkLCBzbyB1cGRhdGUgYWxsIGxpc3QgaXRlbXMgKi8KLQkJbWVudS0+Zmxh
Z3MgJj0gfk1FTlVfQ0hBTkdFRDsKLQkJZm9yIChpID0gKENvbmZpZ0l0ZW0qKW1lbnUtPmRhdGE7
IGk7IGkgPSBpLT5uZXh0SXRlbSkKLQkJCWktPnVwZGF0ZU1lbnUoKTsKLQl9IGVsc2UgaWYgKGxp
c3RWaWV3KCktPnVwZGF0ZUFsbCkKLQkJdXBkYXRlTWVudSgpOwotfQotCi0KLS8qCi0gKiBjb25z
dHJ1Y3QgYSBtZW51IGVudHJ5Ci0gKi8KLXZvaWQgQ29uZmlnSXRlbTo6aW5pdCh2b2lkKQotewot
CWlmIChtZW51KSB7Ci0JCUNvbmZpZ0xpc3QqIGxpc3QgPSBsaXN0VmlldygpOwotCQluZXh0SXRl
bSA9IChDb25maWdJdGVtKiltZW51LT5kYXRhOwotCQltZW51LT5kYXRhID0gdGhpczsKLQotCQlp
ZiAobGlzdC0+bW9kZSAhPSBmdWxsTW9kZSkKLQkJCXNldEV4cGFuZGVkKHRydWUpOwotCQlzeW1f
Y2FsY192YWx1ZShtZW51LT5zeW0pOwotCX0KLQl1cGRhdGVNZW51KCk7Ci19Ci0KLS8qCi0gKiBk
ZXN0cnVjdCBhIG1lbnUgZW50cnkKLSAqLwotQ29uZmlnSXRlbTo6fkNvbmZpZ0l0ZW0odm9pZCkK
LXsKLQlpZiAobWVudSkgewotCQlDb25maWdJdGVtKiogaXAgPSAoQ29uZmlnSXRlbSoqKSZtZW51
LT5kYXRhOwotCQlmb3IgKDsgKmlwOyBpcCA9ICYoKmlwKS0+bmV4dEl0ZW0pIHsKLQkJCWlmICgq
aXAgPT0gdGhpcykgewotCQkJCSppcCA9IG5leHRJdGVtOwotCQkJCWJyZWFrOwotCQkJfQotCQl9
Ci0JfQotfQotCi1Db25maWdMaW5lRWRpdDo6Q29uZmlnTGluZUVkaXQoQ29uZmlnVmlldyogcGFy
ZW50KQotCTogUGFyZW50KHBhcmVudCkKLXsKLQljb25uZWN0KHRoaXMsIFNJR05BTChlZGl0aW5n
RmluaXNoZWQoKSksIFNMT1QoaGlkZSgpKSk7Ci19Ci0KLXZvaWQgQ29uZmlnTGluZUVkaXQ6OnNo
b3coQ29uZmlnSXRlbSogaSkKLXsKLQlpdGVtID0gaTsKLQlpZiAoc3ltX2dldF9zdHJpbmdfdmFs
dWUoaXRlbS0+bWVudS0+c3ltKSkKLQkJc2V0VGV4dChRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN5
bV9nZXRfc3RyaW5nX3ZhbHVlKGl0ZW0tPm1lbnUtPnN5bSkpKTsKLQllbHNlCi0JCXNldFRleHQo
UVN0cmluZzo6bnVsbCk7Ci0JUGFyZW50OjpzaG93KCk7Ci0Jc2V0Rm9jdXMoKTsKLX0KLQotdm9p
ZCBDb25maWdMaW5lRWRpdDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGUpCi17Ci0Jc3dpdGNo
IChlLT5rZXkoKSkgewotCWNhc2UgUXQ6OktleV9Fc2NhcGU6Ci0JCWJyZWFrOwotCWNhc2UgUXQ6
OktleV9SZXR1cm46Ci0JY2FzZSBRdDo6S2V5X0VudGVyOgotCQlzeW1fc2V0X3N0cmluZ192YWx1
ZShpdGVtLT5tZW51LT5zeW0sIHRleHQoKS50b0xhdGluMSgpKTsKLQkJcGFyZW50KCktPnVwZGF0
ZUxpc3QoaXRlbSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVBhcmVudDo6a2V5UHJlc3NFdmVu
dChlKTsKLQkJcmV0dXJuOwotCX0KLQllLT5hY2NlcHQoKTsKLQlwYXJlbnQoKS0+bGlzdC0+c2V0
Rm9jdXMoKTsKLQloaWRlKCk7Ci19Ci0KLUNvbmZpZ0xpc3Q6OkNvbmZpZ0xpc3QoQ29uZmlnVmll
dyogcCwgY29uc3QgY2hhciAqbmFtZSkKLQk6IFBhcmVudChwKSwKLQkgIHVwZGF0ZUFsbChmYWxz
ZSksCi0JICBzeW1ib2xZZXNQaXgoeHBtX3N5bWJvbF95ZXMpLCBzeW1ib2xNb2RQaXgoeHBtX3N5
bWJvbF9tb2QpLCBzeW1ib2xOb1BpeCh4cG1fc3ltYm9sX25vKSwKLQkgIGNob2ljZVllc1BpeCh4
cG1fY2hvaWNlX3llcyksIGNob2ljZU5vUGl4KHhwbV9jaG9pY2Vfbm8pLAotCSAgbWVudVBpeCh4
cG1fbWVudSksIG1lbnVJbnZQaXgoeHBtX21lbnVfaW52KSwgbWVudUJhY2tQaXgoeHBtX21lbnVi
YWNrKSwgdm9pZFBpeCh4cG1fdm9pZCksCi0JICBzaG93TmFtZShmYWxzZSksIHNob3dSYW5nZShm
YWxzZSksIHNob3dEYXRhKGZhbHNlKSwgbW9kZShzaW5nbGVNb2RlKSwgb3B0TW9kZShub3JtYWxP
cHQpLAotCSAgcm9vdEVudHJ5KDApLCBoZWFkZXJQb3B1cCgwKQotewotCWludCBpOwotCi0Jc2V0
T2JqZWN0TmFtZShuYW1lKTsKLQlzZXRTb3J0aW5nRW5hYmxlZChmYWxzZSk7Ci0Jc2V0Um9vdElz
RGVjb3JhdGVkKHRydWUpOwotCi0Jc2V0VmVydGljYWxTY3JvbGxNb2RlKFNjcm9sbFBlclBpeGVs
KTsKLQlzZXRIb3Jpem9udGFsU2Nyb2xsTW9kZShTY3JvbGxQZXJQaXhlbCk7Ci0KLQlzZXRIZWFk
ZXJMYWJlbHMoUVN0cmluZ0xpc3QoKSA8PCAiT3B0aW9uIiA8PCAiTmFtZSIgPDwgIk4iIDw8ICJN
IiA8PCAiWSIgPDwgIlZhbHVlIik7Ci0KLQljb25uZWN0KHRoaXMsIFNJR05BTChpdGVtU2VsZWN0
aW9uQ2hhbmdlZCh2b2lkKSksCi0JCVNMT1QodXBkYXRlU2VsZWN0aW9uKHZvaWQpKSk7Ci0KLQlp
ZiAobmFtZSkgewotCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChuYW1lKTsKLQkJc2hvd05h
bWUgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi9zaG93TmFtZSIsIGZhbHNlKS50b0Jvb2woKTsK
LQkJc2hvd1JhbmdlID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd1JhbmdlIiwgZmFsc2Up
LnRvQm9vbCgpOwotCQlzaG93RGF0YSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3Nob3dEYXRh
IiwgZmFsc2UpLnRvQm9vbCgpOwotCQlvcHRNb2RlID0gKGVudW0gb3B0aW9uTW9kZSljb25maWdT
ZXR0aW5ncy0+dmFsdWUoIi9vcHRpb25Nb2RlIiwgMCkudG9JbnQoKTsKLQkJY29uZmlnU2V0dGlu
Z3MtPmVuZEdyb3VwKCk7Ci0JCWNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQo
KSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsKLQl9Ci0KLQlhZGRDb2x1bW4ocHJvbXB0Q29sSWR4
KTsKLQotCXJlaW5pdCgpOwotfQotCi1ib29sIENvbmZpZ0xpc3Q6Om1lbnVTa2lwKHN0cnVjdCBt
ZW51ICptZW51KQotewotCWlmIChvcHRNb2RlID09IG5vcm1hbE9wdCAmJiBtZW51X2lzX3Zpc2li
bGUobWVudSkpCi0JCXJldHVybiBmYWxzZTsKLQlpZiAob3B0TW9kZSA9PSBwcm9tcHRPcHQgJiYg
bWVudV9oYXNfcHJvbXB0KG1lbnUpKQotCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKG9wdE1vZGUgPT0g
YWxsT3B0KQotCQlyZXR1cm4gZmFsc2U7Ci0JcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29uZmln
TGlzdDo6cmVpbml0KHZvaWQpCi17Ci0JcmVtb3ZlQ29sdW1uKGRhdGFDb2xJZHgpOwotCXJlbW92
ZUNvbHVtbih5ZXNDb2xJZHgpOwotCXJlbW92ZUNvbHVtbihtb2RDb2xJZHgpOwotCXJlbW92ZUNv
bHVtbihub0NvbElkeCk7Ci0JcmVtb3ZlQ29sdW1uKG5hbWVDb2xJZHgpOwotCi0JaWYgKHNob3dO
YW1lKQotCQlhZGRDb2x1bW4obmFtZUNvbElkeCk7Ci0JaWYgKHNob3dSYW5nZSkgewotCQlhZGRD
b2x1bW4obm9Db2xJZHgpOwotCQlhZGRDb2x1bW4obW9kQ29sSWR4KTsKLQkJYWRkQ29sdW1uKHll
c0NvbElkeCk7Ci0JfQotCWlmIChzaG93RGF0YSkKLQkJYWRkQ29sdW1uKGRhdGFDb2xJZHgpOwot
Ci0JdXBkYXRlTGlzdEFsbCgpOwotfQotCi12b2lkIENvbmZpZ0xpc3Q6OnNhdmVTZXR0aW5ncyh2
b2lkKQotewotCWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgewotCQljb25maWdTZXR0aW5n
cy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkpOwotCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUo
Ii9zaG93TmFtZSIsIHNob3dOYW1lKTsKLQkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hv
d1JhbmdlIiwgc2hvd1JhbmdlKTsKLQkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd0Rh
dGEiLCBzaG93RGF0YSk7Ci0JCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL29wdGlvbk1vZGUi
LCAoaW50KW9wdE1vZGUpOwotCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKLQl9Ci19Ci0K
LUNvbmZpZ0l0ZW0qIENvbmZpZ0xpc3Q6OmZpbmRDb25maWdJdGVtKHN0cnVjdCBtZW51ICptZW51
KQotewotCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSopbWVudS0+ZGF0YTsKLQotCWZv
ciAoOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dEl0ZW0pIHsKLQkJaWYgKHRoaXMgPT0gaXRlbS0+
bGlzdFZpZXcoKSkKLQkJCWJyZWFrOwotCX0KLQotCXJldHVybiBpdGVtOwotfQotCi12b2lkIENv
bmZpZ0xpc3Q6OnVwZGF0ZVNlbGVjdGlvbih2b2lkKQotewotCXN0cnVjdCBtZW51ICptZW51Owot
CWVudW0gcHJvcF90eXBlIHR5cGU7Ci0KLQlpZiAoc2VsZWN0ZWRJdGVtcygpLmNvdW50KCkgPT0g
MCkKLQkJcmV0dXJuOwotCi0JQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKilzZWxlY3Rl
ZEl0ZW1zKCkuZmlyc3QoKTsKLQlpZiAoIWl0ZW0pCi0JCXJldHVybjsKLQotCW1lbnUgPSBpdGVt
LT5tZW51OwotCWVtaXQgbWVudUNoYW5nZWQobWVudSk7Ci0JaWYgKCFtZW51KQotCQlyZXR1cm47
Ci0JdHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsK
LQlpZiAobW9kZSA9PSBtZW51TW9kZSAmJiB0eXBlID09IFBfTUVOVSkKLQkJZW1pdCBtZW51U2Vs
ZWN0ZWQobWVudSk7Ci19Ci0KLXZvaWQgQ29uZmlnTGlzdDo6dXBkYXRlTGlzdChDb25maWdJdGVt
KiBpdGVtKQotewotCUNvbmZpZ0l0ZW0qIGxhc3QgPSAwOwotCi0JaWYgKCFyb290RW50cnkpIHsK
LQkJaWYgKG1vZGUgIT0gbGlzdE1vZGUpCi0JCQlnb3RvIHVwZGF0ZTsKLQkJUVRyZWVXaWRnZXRJ
dGVtSXRlcmF0b3IgaXQodGhpcyk7Ci0JCUNvbmZpZ0l0ZW0qIGl0ZW07Ci0KLQkJd2hpbGUgKCpp
dCkgewotCQkJaXRlbSA9IChDb25maWdJdGVtKikoKml0KTsKLQkJCWlmICghaXRlbS0+bWVudSkK
LQkJCQljb250aW51ZTsKLQkJCWl0ZW0tPnRlc3RVcGRhdGVNZW51KG1lbnVfaXNfdmlzaWJsZShp
dGVtLT5tZW51KSk7Ci0KLQkJCSsraXQ7Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQotCWlmIChyb290
RW50cnkgIT0gJnJvb3RtZW51ICYmIChtb2RlID09IHNpbmdsZU1vZGUgfHwKLQkgICAgKG1vZGUg
PT0gc3ltYm9sTW9kZSAmJiByb290RW50cnktPnBhcmVudCAhPSAmcm9vdG1lbnUpKSkgewotCQlp
dGVtID0gKENvbmZpZ0l0ZW0gKil0b3BMZXZlbEl0ZW0oMCk7Ci0JCWlmICghaXRlbSkKLQkJCWl0
ZW0gPSBuZXcgQ29uZmlnSXRlbSh0aGlzLCAwLCB0cnVlKTsKLQkJbGFzdCA9IGl0ZW07Ci0JfQot
CWlmICgobW9kZSA9PSBzaW5nbGVNb2RlIHx8IChtb2RlID09IHN5bWJvbE1vZGUgJiYgIShyb290
RW50cnktPmZsYWdzICYgTUVOVV9ST09UKSkpICYmCi0JICAgIHJvb3RFbnRyeS0+c3ltICYmIHJv
b3RFbnRyeS0+cHJvbXB0KSB7Ci0JCWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmcoKSA6
IGZpcnN0Q2hpbGQoKTsKLQkJaWYgKCFpdGVtKQotCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHRo
aXMsIGxhc3QsIHJvb3RFbnRyeSwgdHJ1ZSk7Ci0JCWVsc2UKLQkJCWl0ZW0tPnRlc3RVcGRhdGVN
ZW51KHRydWUpOwotCi0JCXVwZGF0ZU1lbnVMaXN0KGl0ZW0sIHJvb3RFbnRyeSk7Ci0JCXVwZGF0
ZSgpOwotCQlyZXNpemVDb2x1bW5Ub0NvbnRlbnRzKDApOwotCQlyZXR1cm47Ci0JfQotdXBkYXRl
OgotCXVwZGF0ZU1lbnVMaXN0KHRoaXMsIHJvb3RFbnRyeSk7Ci0JdXBkYXRlKCk7Ci0JcmVzaXpl
Q29sdW1uVG9Db250ZW50cygwKTsKLX0KLQotdm9pZCBDb25maWdMaXN0OjpzZXRWYWx1ZShDb25m
aWdJdGVtKiBpdGVtLCB0cmlzdGF0ZSB2YWwpCi17Ci0Jc3RydWN0IHN5bWJvbCogc3ltOwotCWlu
dCB0eXBlOwotCXRyaXN0YXRlIG9sZHZhbDsKLQotCXN5bSA9IGl0ZW0tPm1lbnUgPyBpdGVtLT5t
ZW51LT5zeW0gOiAwOwotCWlmICghc3ltKQotCQlyZXR1cm47Ci0KLQl0eXBlID0gc3ltX2dldF90
eXBlKHN5bSk7Ci0Jc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSBTX0JPT0xFQU46Ci0JY2FzZSBTX1RS
SVNUQVRFOgotCQlvbGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0KLQkJaWYg
KCFzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgdmFsKSkKLQkJCXJldHVybjsKLQkJaWYgKG9s
ZHZhbCA9PSBubyAmJiBpdGVtLT5tZW51LT5saXN0KQotCQkJaXRlbS0+c2V0RXhwYW5kZWQodHJ1
ZSk7Ci0JCXBhcmVudCgpLT51cGRhdGVMaXN0KGl0ZW0pOwotCQlicmVhazsKLQl9Ci19Ci0KLXZv
aWQgQ29uZmlnTGlzdDo6Y2hhbmdlVmFsdWUoQ29uZmlnSXRlbSogaXRlbSkKLXsKLQlzdHJ1Y3Qg
c3ltYm9sKiBzeW07Ci0Jc3RydWN0IG1lbnUqIG1lbnU7Ci0JaW50IHR5cGUsIG9sZGV4cHIsIG5l
d2V4cHI7Ci0KLQltZW51ID0gaXRlbS0+bWVudTsKLQlpZiAoIW1lbnUpCi0JCXJldHVybjsKLQlz
eW0gPSBtZW51LT5zeW07Ci0JaWYgKCFzeW0pIHsKLQkJaWYgKGl0ZW0tPm1lbnUtPmxpc3QpCi0J
CQlpdGVtLT5zZXRFeHBhbmRlZCghaXRlbS0+aXNFeHBhbmRlZCgpKTsKLQkJcmV0dXJuOwotCX0K
LQotCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKLQlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIFNf
Qk9PTEVBTjoKLQljYXNlIFNfVFJJU1RBVEU6Ci0JCW9sZGV4cHIgPSBzeW1fZ2V0X3RyaXN0YXRl
X3ZhbHVlKHN5bSk7Ci0JCW5ld2V4cHIgPSBzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7
Ci0JCWlmIChpdGVtLT5tZW51LT5saXN0KSB7Ci0JCQlpZiAob2xkZXhwciA9PSBuZXdleHByKQot
CQkJCWl0ZW0tPnNldEV4cGFuZGVkKCFpdGVtLT5pc0V4cGFuZGVkKCkpOwotCQkJZWxzZSBpZiAo
b2xkZXhwciA9PSBubykKLQkJCQlpdGVtLT5zZXRFeHBhbmRlZCh0cnVlKTsKLQkJfQotCQlpZiAo
b2xkZXhwciAhPSBuZXdleHByKQotCQkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7Ci0JCWJy
ZWFrOwotCWNhc2UgU19JTlQ6Ci0JY2FzZSBTX0hFWDoKLQljYXNlIFNfU1RSSU5HOgotCQlwYXJl
bnQoKS0+bGluZUVkaXQtPnNob3coaXRlbSk7Ci0JCWJyZWFrOwotCX0KLX0KLQotdm9pZCBDb25m
aWdMaXN0OjpzZXRSb290TWVudShzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQllbnVtIHByb3BfdHlw
ZSB0eXBlOwotCi0JaWYgKHJvb3RFbnRyeSA9PSBtZW51KQotCQlyZXR1cm47Ci0JdHlwZSA9IG1l
bnUgJiYgbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwotCWlm
ICh0eXBlICE9IFBfTUVOVSkKLQkJcmV0dXJuOwotCXVwZGF0ZU1lbnVMaXN0KHRoaXMsIDApOwot
CXJvb3RFbnRyeSA9IG1lbnU7Ci0JdXBkYXRlTGlzdEFsbCgpOwotCWlmIChjdXJyZW50SXRlbSgp
KSB7Ci0JCWN1cnJlbnRJdGVtKCktPnNldFNlbGVjdGVkKGhhc0ZvY3VzKCkpOwotCQlzY3JvbGxU
b0l0ZW0oY3VycmVudEl0ZW0oKSk7Ci0JfQotfQotCi12b2lkIENvbmZpZ0xpc3Q6OnNldFBhcmVu
dE1lbnUodm9pZCkKLXsKLQlDb25maWdJdGVtKiBpdGVtOwotCXN0cnVjdCBtZW51ICpvbGRyb290
OwotCi0Jb2xkcm9vdCA9IHJvb3RFbnRyeTsKLQlpZiAocm9vdEVudHJ5ID09ICZyb290bWVudSkK
LQkJcmV0dXJuOwotCXNldFJvb3RNZW51KG1lbnVfZ2V0X3BhcmVudF9tZW51KHJvb3RFbnRyeS0+
cGFyZW50KSk7Ci0KLQlRVHJlZVdpZGdldEl0ZW1JdGVyYXRvciBpdCh0aGlzKTsKLQl3aGlsZSAo
Kml0KSB7Ci0JCWl0ZW0gPSAoQ29uZmlnSXRlbSAqKSgqaXQpOwotCQlpZiAoaXRlbS0+bWVudSA9
PSBvbGRyb290KSB7Ci0JCQlzZXRDdXJyZW50SXRlbShpdGVtKTsKLQkJCXNjcm9sbFRvSXRlbShp
dGVtKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJKytpdDsKLQl9Ci19Ci0KLS8qCi0gKiB1cGRhdGUg
YWxsIHRoZSBjaGlsZHJlbiBvZiBhIG1lbnUgZW50cnkKLSAqICAgcmVtb3Zlcy9hZGRzIHRoZSBl
bnRyaWVzIGZyb20gdGhlIHBhcmVudCB3aWRnZXQgYXMgbmVjZXNzYXJ5Ci0gKgotICogcGFyZW50
OiBlaXRoZXIgdGhlIG1lbnUgbGlzdCB3aWRnZXQgb3IgYSBtZW51IGVudHJ5IHdpZGdldAotICog
bWVudTogZW50cnkgdG8gYmUgdXBkYXRlZAotICovCi12b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZU1l
bnVMaXN0KENvbmZpZ0l0ZW0gKnBhcmVudCwgc3RydWN0IG1lbnUqIG1lbnUpCi17Ci0Jc3RydWN0
IG1lbnUqIGNoaWxkOwotCUNvbmZpZ0l0ZW0qIGl0ZW07Ci0JQ29uZmlnSXRlbSogbGFzdDsKLQli
b29sIHZpc2libGU7Ci0JZW51bSBwcm9wX3R5cGUgdHlwZTsKLQotCWlmICghbWVudSkgewotCQl3
aGlsZSAocGFyZW50LT5jaGlsZENvdW50KCkgPiAwKQotCQl7Ci0JCQlkZWxldGUgcGFyZW50LT50
YWtlQ2hpbGQoMCk7Ci0JCX0KLQotCQlyZXR1cm47Ci0JfQotCi0JbGFzdCA9IHBhcmVudC0+Zmly
c3RDaGlsZCgpOwotCWlmIChsYXN0ICYmICFsYXN0LT5nb1BhcmVudCkKLQkJbGFzdCA9IDA7Ci0J
Zm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7Ci0J
CWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmcoKSA6IHBhcmVudC0+Zmlyc3RDaGlsZCgp
OwotCQl0eXBlID0gY2hpbGQtPnByb21wdCA/IGNoaWxkLT5wcm9tcHQtPnR5cGUgOiBQX1VOS05P
V047Ci0KLQkJc3dpdGNoIChtb2RlKSB7Ci0JCWNhc2UgbWVudU1vZGU6Ci0JCQlpZiAoIShjaGls
ZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQotCQkJCWdvdG8gaGlkZTsKLQkJCWJyZWFrOwotCQljYXNl
IHN5bWJvbE1vZGU6Ci0JCQlpZiAoY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UKQotCQkJCWdvdG8g
aGlkZTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQl2aXNpYmxl
ID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsKLQkJaWYgKCFtZW51U2tpcChjaGlsZCkpIHsKLQkJ
CWlmICghY2hpbGQtPnN5bSAmJiAhY2hpbGQtPmxpc3QgJiYgIWNoaWxkLT5wcm9tcHQpCi0JCQkJ
Y29udGludWU7Ci0JCQlpZiAoIWl0ZW0gfHwgaXRlbS0+bWVudSAhPSBjaGlsZCkKLQkJCQlpdGVt
ID0gbmV3IENvbmZpZ0l0ZW0ocGFyZW50LCBsYXN0LCBjaGlsZCwgdmlzaWJsZSk7Ci0JCQllbHNl
Ci0JCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUodmlzaWJsZSk7Ci0KLQkJCWlmIChtb2RlID09IGZ1
bGxNb2RlIHx8IG1vZGUgPT0gbWVudU1vZGUgfHwgdHlwZSAhPSBQX01FTlUpCi0JCQkJdXBkYXRl
TWVudUxpc3QoaXRlbSwgY2hpbGQpOwotCQkJZWxzZQotCQkJCXVwZGF0ZU1lbnVMaXN0KGl0ZW0s
IDApOwotCQkJbGFzdCA9IGl0ZW07Ci0JCQljb250aW51ZTsKLQkJfQotCWhpZGU6Ci0JCWlmIChp
dGVtICYmIGl0ZW0tPm1lbnUgPT0gY2hpbGQpIHsKLQkJCWxhc3QgPSBwYXJlbnQtPmZpcnN0Q2hp
bGQoKTsKLQkJCWlmIChsYXN0ID09IGl0ZW0pCi0JCQkJbGFzdCA9IDA7Ci0JCQllbHNlIHdoaWxl
IChsYXN0LT5uZXh0U2libGluZygpICE9IGl0ZW0pCi0JCQkJbGFzdCA9IGxhc3QtPm5leHRTaWJs
aW5nKCk7Ci0JCQlkZWxldGUgaXRlbTsKLQkJfQotCX0KLX0KLQotdm9pZCBDb25maWdMaXN0Ojp1
cGRhdGVNZW51TGlzdChDb25maWdMaXN0ICpwYXJlbnQsIHN0cnVjdCBtZW51KiBtZW51KQotewot
CXN0cnVjdCBtZW51KiBjaGlsZDsKLQlDb25maWdJdGVtKiBpdGVtOwotCUNvbmZpZ0l0ZW0qIGxh
c3Q7Ci0JYm9vbCB2aXNpYmxlOwotCWVudW0gcHJvcF90eXBlIHR5cGU7Ci0KLQlpZiAoIW1lbnUp
IHsKLQkJd2hpbGUgKHBhcmVudC0+dG9wTGV2ZWxJdGVtQ291bnQoKSA+IDApCi0JCXsKLQkJCWRl
bGV0ZSBwYXJlbnQtPnRha2VUb3BMZXZlbEl0ZW0oMCk7Ci0JCX0KLQotCQlyZXR1cm47Ci0JfQot
Ci0JbGFzdCA9IChDb25maWdJdGVtKilwYXJlbnQtPnRvcExldmVsSXRlbSgwKTsKLQlpZiAobGFz
dCAmJiAhbGFzdC0+Z29QYXJlbnQpCi0JCWxhc3QgPSAwOwotCWZvciAoY2hpbGQgPSBtZW51LT5s
aXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgewotCQlpdGVtID0gbGFzdCA/IGxhc3Qt
Pm5leHRTaWJsaW5nKCkgOiAoQ29uZmlnSXRlbSopcGFyZW50LT50b3BMZXZlbEl0ZW0oMCk7Ci0J
CXR5cGUgPSBjaGlsZC0+cHJvbXB0ID8gY2hpbGQtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsK
LQotCQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSBtZW51TW9kZToKLQkJCWlmICghKGNoaWxkLT5m
bGFncyAmIE1FTlVfUk9PVCkpCi0JCQkJZ290byBoaWRlOwotCQkJYnJlYWs7Ci0JCWNhc2Ugc3lt
Ym9sTW9kZToKLQkJCWlmIChjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpCi0JCQkJZ290byBoaWRl
OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCXZpc2libGUgPSBt
ZW51X2lzX3Zpc2libGUoY2hpbGQpOwotCQlpZiAoIW1lbnVTa2lwKGNoaWxkKSkgewotCQkJaWYg
KCFjaGlsZC0+c3ltICYmICFjaGlsZC0+bGlzdCAmJiAhY2hpbGQtPnByb21wdCkKLQkJCQljb250
aW51ZTsKLQkJCWlmICghaXRlbSB8fCBpdGVtLT5tZW51ICE9IGNoaWxkKQotCQkJCWl0ZW0gPSBu
ZXcgQ29uZmlnSXRlbShwYXJlbnQsIGxhc3QsIGNoaWxkLCB2aXNpYmxlKTsKLQkJCWVsc2UKLQkJ
CQlpdGVtLT50ZXN0VXBkYXRlTWVudSh2aXNpYmxlKTsKLQotCQkJaWYgKG1vZGUgPT0gZnVsbE1v
ZGUgfHwgbW9kZSA9PSBtZW51TW9kZSB8fCB0eXBlICE9IFBfTUVOVSkKLQkJCQl1cGRhdGVNZW51
TGlzdChpdGVtLCBjaGlsZCk7Ci0JCQllbHNlCi0JCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgMCk7
Ci0JCQlsYXN0ID0gaXRlbTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JaGlkZToKLQkJaWYgKGl0ZW0g
JiYgaXRlbS0+bWVudSA9PSBjaGlsZCkgewotCQkJbGFzdCA9IChDb25maWdJdGVtKilwYXJlbnQt
PnRvcExldmVsSXRlbSgwKTsKLQkJCWlmIChsYXN0ID09IGl0ZW0pCi0JCQkJbGFzdCA9IDA7Ci0J
CQllbHNlIHdoaWxlIChsYXN0LT5uZXh0U2libGluZygpICE9IGl0ZW0pCi0JCQkJbGFzdCA9IGxh
c3QtPm5leHRTaWJsaW5nKCk7Ci0JCQlkZWxldGUgaXRlbTsKLQkJfQotCX0KLX0KLQotdm9pZCBD
b25maWdMaXN0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXYpCi17Ci0JUVRyZWVXaWRnZXRJ
dGVtKiBpID0gY3VycmVudEl0ZW0oKTsKLQlDb25maWdJdGVtKiBpdGVtOwotCXN0cnVjdCBtZW51
ICptZW51OwotCWVudW0gcHJvcF90eXBlIHR5cGU7Ci0KLQlpZiAoZXYtPmtleSgpID09IFF0OjpL
ZXlfRXNjYXBlICYmIG1vZGUgIT0gZnVsbE1vZGUgJiYgbW9kZSAhPSBsaXN0TW9kZSkgewotCQll
bWl0IHBhcmVudFNlbGVjdGVkKCk7Ci0JCWV2LT5hY2NlcHQoKTsKLQkJcmV0dXJuOwotCX0KLQot
CWlmICghaSkgewotCQlQYXJlbnQ6OmtleVByZXNzRXZlbnQoZXYpOwotCQlyZXR1cm47Ci0JfQot
CWl0ZW0gPSAoQ29uZmlnSXRlbSopaTsKLQotCXN3aXRjaCAoZXYtPmtleSgpKSB7Ci0JY2FzZSBR
dDo6S2V5X1JldHVybjoKLQljYXNlIFF0OjpLZXlfRW50ZXI6Ci0JCWlmIChpdGVtLT5nb1BhcmVu
dCkgewotCQkJZW1pdCBwYXJlbnRTZWxlY3RlZCgpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbWVudSA9
IGl0ZW0tPm1lbnU7Ci0JCWlmICghbWVudSkKLQkJCWJyZWFrOwotCQl0eXBlID0gbWVudS0+cHJv
bXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwotCQlpZiAodHlwZSA9PSBQX01F
TlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYKLQkJICAgIG1vZGUgIT0gZnVsbE1vZGUgJiYgbW9k
ZSAhPSBtZW51TW9kZSkgewotCQkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7Ci0JCQlicmVhazsK
LQkJfQotCWNhc2UgUXQ6OktleV9TcGFjZToKLQkJY2hhbmdlVmFsdWUoaXRlbSk7Ci0JCWJyZWFr
OwotCWNhc2UgUXQ6OktleV9OOgotCQlzZXRWYWx1ZShpdGVtLCBubyk7Ci0JCWJyZWFrOwotCWNh
c2UgUXQ6OktleV9NOgotCQlzZXRWYWx1ZShpdGVtLCBtb2QpOwotCQlicmVhazsKLQljYXNlIFF0
OjpLZXlfWToKLQkJc2V0VmFsdWUoaXRlbSwgeWVzKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ
UGFyZW50OjprZXlQcmVzc0V2ZW50KGV2KTsKLQkJcmV0dXJuOwotCX0KLQlldi0+YWNjZXB0KCk7
Ci19Ci0KLXZvaWQgQ29uZmlnTGlzdDo6bW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50KiBlKQot
ewotCS8vUVBvaW50IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBvcygpKSk7Ci0JLy9wcmludGYo
ImNvbnRlbnRzTW91c2VQcmVzc0V2ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsKLQlQYXJl
bnQ6Om1vdXNlUHJlc3NFdmVudChlKTsKLX0KLQotdm9pZCBDb25maWdMaXN0Ojptb3VzZVJlbGVh
c2VFdmVudChRTW91c2VFdmVudCogZSkKLXsKLQlRUG9pbnQgcCA9IGUtPnBvcygpOwotCUNvbmZp
Z0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSopaXRlbUF0KHApOwotCXN0cnVjdCBtZW51ICptZW51
OwotCWVudW0gcHJvcF90eXBlIHB0eXBlOwotCVFJY29uIGljb247Ci0JaW50IGlkeCwgeDsKLQot
CWlmICghaXRlbSkKLQkJZ290byBza2lwOwotCi0JbWVudSA9IGl0ZW0tPm1lbnU7Ci0JeCA9IGhl
YWRlcigpLT5vZmZzZXQoKSArIHAueCgpOwotCWlkeCA9IGhlYWRlcigpLT5sb2dpY2FsSW5kZXhB
dCh4KTsKLQlzd2l0Y2ggKGlkeCkgewotCWNhc2UgcHJvbXB0Q29sSWR4OgotCQlpY29uID0gaXRl
bS0+cGl4bWFwKHByb21wdENvbElkeCk7Ci0JCWlmICghaWNvbi5pc051bGwoKSkgewotCQkJaW50
IG9mZiA9IGhlYWRlcigpLT5zZWN0aW9uUG9zaXRpb24oMCkgKyB2aXN1YWxSZWN0KGluZGV4QXQo
cCkpLngoKSArIDQ7IC8vIDQgaXMgSGFyZGNvZGVkIGltYWdlIG9mZnNldC4gVGhlcmUgbWlnaHQg
YmUgYSB3YXkgdG8gZG8gaXQgcHJvcGVybHkuCi0JCQlpZiAoeCA+PSBvZmYgJiYgeCA8IG9mZiAr
IGljb24uYXZhaWxhYmxlU2l6ZXMoKS5maXJzdCgpLndpZHRoKCkpIHsKLQkJCQlpZiAoaXRlbS0+
Z29QYXJlbnQpIHsKLQkJCQkJZW1pdCBwYXJlbnRTZWxlY3RlZCgpOwotCQkJCQlicmVhazsKLQkJ
CQl9IGVsc2UgaWYgKCFtZW51KQotCQkJCQlicmVhazsKLQkJCQlwdHlwZSA9IG1lbnUtPnByb21w
dCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKLQkJCQlpZiAocHR5cGUgPT0gUF9N
RU5VICYmIHJvb3RFbnRyeSAhPSBtZW51ICYmCi0JCQkJICAgIG1vZGUgIT0gZnVsbE1vZGUgJiYg
bW9kZSAhPSBtZW51TW9kZSkKLQkJCQkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7Ci0JCQkJZWxz
ZQotCQkJCQljaGFuZ2VWYWx1ZShpdGVtKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQljYXNlIG5v
Q29sSWR4OgotCQlzZXRWYWx1ZShpdGVtLCBubyk7Ci0JCWJyZWFrOwotCWNhc2UgbW9kQ29sSWR4
OgotCQlzZXRWYWx1ZShpdGVtLCBtb2QpOwotCQlicmVhazsKLQljYXNlIHllc0NvbElkeDoKLQkJ
c2V0VmFsdWUoaXRlbSwgeWVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBkYXRhQ29sSWR4OgotCQljaGFu
Z2VWYWx1ZShpdGVtKTsKLQkJYnJlYWs7Ci0JfQotCi1za2lwOgotCS8vcHJpbnRmKCJjb250ZW50
c01vdXNlUmVsZWFzZUV2ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsKLQlQYXJlbnQ6Om1v
dXNlUmVsZWFzZUV2ZW50KGUpOwotfQotCi12b2lkIENvbmZpZ0xpc3Q6Om1vdXNlTW92ZUV2ZW50
KFFNb3VzZUV2ZW50KiBlKQotewotCS8vUVBvaW50IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBv
cygpKSk7Ci0JLy9wcmludGYoImNvbnRlbnRzTW91c2VNb3ZlRXZlbnQ6ICVkLCVkXG4iLCBwLngo
KSwgcC55KCkpOwotCVBhcmVudDo6bW91c2VNb3ZlRXZlbnQoZSk7Ci19Ci0KLXZvaWQgQ29uZmln
TGlzdDo6bW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50KiBlKQotewotCVFQb2ludCBw
ID0gZS0+cG9zKCk7IC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd29ya3Mod2FzIGNvbnRlbnRzVG9W
aWV3cG9ydCkuCi0JQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7Ci0J
c3RydWN0IG1lbnUgKm1lbnU7Ci0JZW51bSBwcm9wX3R5cGUgcHR5cGU7Ci0KLQlpZiAoIWl0ZW0p
Ci0JCWdvdG8gc2tpcDsKLQlpZiAoaXRlbS0+Z29QYXJlbnQpIHsKLQkJZW1pdCBwYXJlbnRTZWxl
Y3RlZCgpOwotCQlnb3RvIHNraXA7Ci0JfQotCW1lbnUgPSBpdGVtLT5tZW51OwotCWlmICghbWVu
dSkKLQkJZ290byBza2lwOwotCXB0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50
eXBlIDogUF9VTktOT1dOOwotCWlmIChwdHlwZSA9PSBQX01FTlUgJiYgKG1vZGUgPT0gc2luZ2xl
TW9kZSB8fCBtb2RlID09IHN5bWJvbE1vZGUpKQotCQllbWl0IG1lbnVTZWxlY3RlZChtZW51KTsK
LQllbHNlIGlmIChtZW51LT5zeW0pCi0JCWNoYW5nZVZhbHVlKGl0ZW0pOwotCi1za2lwOgotCS8v
cHJpbnRmKCJjb250ZW50c01vdXNlRG91YmxlQ2xpY2tFdmVudDogJWQsJWRcbiIsIHAueCgpLCBw
LnkoKSk7Ci0JUGFyZW50Ojptb3VzZURvdWJsZUNsaWNrRXZlbnQoZSk7Ci19Ci0KLXZvaWQgQ29u
ZmlnTGlzdDo6Zm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50ICplKQotewotCXN0cnVjdCBtZW51ICpt
ZW51ID0gTlVMTDsKLQotCVBhcmVudDo6Zm9jdXNJbkV2ZW50KGUpOwotCi0JQ29uZmlnSXRlbSog
aXRlbSA9IChDb25maWdJdGVtICopY3VycmVudEl0ZW0oKTsKLQlpZiAoaXRlbSkgewotCQlpdGVt
LT5zZXRTZWxlY3RlZCh0cnVlKTsKLQkJbWVudSA9IGl0ZW0tPm1lbnU7Ci0JfQotCWVtaXQgZ290
Rm9jdXMobWVudSk7Ci19Ci0KLXZvaWQgQ29uZmlnTGlzdDo6Y29udGV4dE1lbnVFdmVudChRQ29u
dGV4dE1lbnVFdmVudCAqZSkKLXsKLQlpZiAoZS0+eSgpIDw9IGhlYWRlcigpLT5nZW9tZXRyeSgp
LmJvdHRvbSgpKSB7Ci0JCWlmICghaGVhZGVyUG9wdXApIHsKLQkJCVFBY3Rpb24gKmFjdGlvbjsK
LQotCQkJaGVhZGVyUG9wdXAgPSBuZXcgUU1lbnUodGhpcyk7Ci0JCQlhY3Rpb24gPSBuZXcgUUFj
dGlvbigiU2hvdyBOYW1lIiwgdGhpcyk7Ci0JCQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUp
OwotCQkJICBjb25uZWN0KGFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLAotCQkJCSAgcGFy
ZW50KCksIFNMT1Qoc2V0U2hvd05hbWUoYm9vbCkpKTsKLQkJCSAgY29ubmVjdChwYXJlbnQoKSwg
U0lHTkFMKHNob3dOYW1lQ2hhbmdlZChib29sKSksCi0JCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24o
Ym9vbCkpKTsKLQkJCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dOYW1lKTsKLQkJCSAgaGVhZGVy
UG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOwotCQkJYWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cg
UmFuZ2UiLCB0aGlzKTsKLQkJCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0JCQkgIGNv
bm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksCi0JCQkJICBwYXJlbnQoKSwgU0xP
VChzZXRTaG93UmFuZ2UoYm9vbCkpKTsKLQkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNo
b3dSYW5nZUNoYW5nZWQoYm9vbCkpLAotCQkJCSAgYWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7
Ci0JCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93UmFuZ2UpOwotCQkJICBoZWFkZXJQb3B1cC0+
YWRkQWN0aW9uKGFjdGlvbik7Ci0JCQlhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBEYXRhIiwg
dGhpcyk7Ci0JCQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwotCQkJICBjb25uZWN0KGFj
dGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLAotCQkJCSAgcGFyZW50KCksIFNMT1Qoc2V0U2hv
d0RhdGEoYm9vbCkpKTsKLQkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dEYXRhQ2hh
bmdlZChib29sKSksCi0JCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsKLQkJCSAgYWN0
aW9uLT5zZXRDaGVja2VkKHNob3dEYXRhKTsKLQkJCSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihh
Y3Rpb24pOwotCQl9Ci0JCWhlYWRlclBvcHVwLT5leGVjKGUtPmdsb2JhbFBvcygpKTsKLQkJZS0+
YWNjZXB0KCk7Ci0JfSBlbHNlCi0JCWUtPmlnbm9yZSgpOwotfQotCi1Db25maWdWaWV3KkNvbmZp
Z1ZpZXc6OnZpZXdMaXN0OwotUUFjdGlvbiAqQ29uZmlnVmlldzo6c2hvd05vcm1hbEFjdGlvbjsK
LVFBY3Rpb24gKkNvbmZpZ1ZpZXc6OnNob3dBbGxBY3Rpb247Ci1RQWN0aW9uICpDb25maWdWaWV3
OjpzaG93UHJvbXB0QWN0aW9uOwotCi1Db25maWdWaWV3OjpDb25maWdWaWV3KFFXaWRnZXQqIHBh
cmVudCwgY29uc3QgY2hhciAqbmFtZSkKLQk6IFBhcmVudChwYXJlbnQpCi17Ci0Jc2V0T2JqZWN0
TmFtZShuYW1lKTsKLQlRVkJveExheW91dCAqdmVydGljYWxMYXlvdXQgPSBuZXcgUVZCb3hMYXlv
dXQodGhpcyk7Ci0JdmVydGljYWxMYXlvdXQtPnNldENvbnRlbnRzTWFyZ2lucygwLCAwLCAwLCAw
KTsKLQotCWxpc3QgPSBuZXcgQ29uZmlnTGlzdCh0aGlzKTsKLQl2ZXJ0aWNhbExheW91dC0+YWRk
V2lkZ2V0KGxpc3QpOwotCWxpbmVFZGl0ID0gbmV3IENvbmZpZ0xpbmVFZGl0KHRoaXMpOwotCWxp
bmVFZGl0LT5oaWRlKCk7Ci0JdmVydGljYWxMYXlvdXQtPmFkZFdpZGdldChsaW5lRWRpdCk7Ci0K
LQl0aGlzLT5uZXh0VmlldyA9IHZpZXdMaXN0OwotCXZpZXdMaXN0ID0gdGhpczsKLX0KLQotQ29u
ZmlnVmlldzo6fkNvbmZpZ1ZpZXcodm9pZCkKLXsKLQlDb25maWdWaWV3KiogdnA7Ci0KLQlmb3Ig
KHZwID0gJnZpZXdMaXN0OyAqdnA7IHZwID0gJigqdnApLT5uZXh0VmlldykgewotCQlpZiAoKnZw
ID09IHRoaXMpIHsKLQkJCSp2cCA9IG5leHRWaWV3OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0K
LXZvaWQgQ29uZmlnVmlldzo6c2V0T3B0aW9uTW9kZShRQWN0aW9uICphY3QpCi17Ci0JaWYgKGFj
dCA9PSBzaG93Tm9ybWFsQWN0aW9uKQotCQlsaXN0LT5vcHRNb2RlID0gbm9ybWFsT3B0OwotCWVs
c2UgaWYgKGFjdCA9PSBzaG93QWxsQWN0aW9uKQotCQlsaXN0LT5vcHRNb2RlID0gYWxsT3B0Owot
CWVsc2UKLQkJbGlzdC0+b3B0TW9kZSA9IHByb21wdE9wdDsKLQotCWxpc3QtPnVwZGF0ZUxpc3RB
bGwoKTsKLX0KLQotdm9pZCBDb25maWdWaWV3OjpzZXRTaG93TmFtZShib29sIGIpCi17Ci0JaWYg
KGxpc3QtPnNob3dOYW1lICE9IGIpIHsKLQkJbGlzdC0+c2hvd05hbWUgPSBiOwotCQlsaXN0LT5y
ZWluaXQoKTsKLQkJZW1pdCBzaG93TmFtZUNoYW5nZWQoYik7Ci0JfQotfQotCi12b2lkIENvbmZp
Z1ZpZXc6OnNldFNob3dSYW5nZShib29sIGIpCi17Ci0JaWYgKGxpc3QtPnNob3dSYW5nZSAhPSBi
KSB7Ci0JCWxpc3QtPnNob3dSYW5nZSA9IGI7Ci0JCWxpc3QtPnJlaW5pdCgpOwotCQllbWl0IHNo
b3dSYW5nZUNoYW5nZWQoYik7Ci0JfQotfQotCi12b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dEYXRh
KGJvb2wgYikKLXsKLQlpZiAobGlzdC0+c2hvd0RhdGEgIT0gYikgewotCQlsaXN0LT5zaG93RGF0
YSA9IGI7Ci0JCWxpc3QtPnJlaW5pdCgpOwotCQllbWl0IHNob3dEYXRhQ2hhbmdlZChiKTsKLQl9
Ci19Ci0KLXZvaWQgQ29uZmlnTGlzdDo6c2V0QWxsT3Blbihib29sIG9wZW4pCi17Ci0JUVRyZWVX
aWRnZXRJdGVtSXRlcmF0b3IgaXQodGhpcyk7Ci0KLQl3aGlsZSAoKml0KSB7Ci0JCSgqaXQpLT5z
ZXRFeHBhbmRlZChvcGVuKTsKLQotCQkrK2l0OwotCX0KLX0KLQotdm9pZCBDb25maWdWaWV3Ojp1
cGRhdGVMaXN0KENvbmZpZ0l0ZW0qIGl0ZW0pCi17Ci0JQ29uZmlnVmlldyogdjsKLQotCWZvciAo
diA9IHZpZXdMaXN0OyB2OyB2ID0gdi0+bmV4dFZpZXcpCi0JCXYtPmxpc3QtPnVwZGF0ZUxpc3Qo
aXRlbSk7Ci19Ci0KLXZvaWQgQ29uZmlnVmlldzo6dXBkYXRlTGlzdEFsbCh2b2lkKQotewotCUNv
bmZpZ1ZpZXcqIHY7Ci0KLQlmb3IgKHYgPSB2aWV3TGlzdDsgdjsgdiA9IHYtPm5leHRWaWV3KQot
CQl2LT5saXN0LT51cGRhdGVMaXN0QWxsKCk7Ci19Ci0KLUNvbmZpZ0luZm9WaWV3OjpDb25maWdJ
bmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCi0JOiBQYXJlbnQocGFy
ZW50KSwgc3ltKDApLCBfbWVudSgwKQotewotCXNldE9iamVjdE5hbWUobmFtZSk7Ci0KLQotCWlm
ICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgewotCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91
cChvYmplY3ROYW1lKCkpOwotCQlzZXRTaG93RGVidWcoY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIv
c2hvd0RlYnVnIiwgZmFsc2UpLnRvQm9vbCgpKTsKLQkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3Vw
KCk7Ci0JCWNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2
ZVNldHRpbmdzKCkpKTsKLQl9Ci19Ci0KLXZvaWQgQ29uZmlnSW5mb1ZpZXc6OnNhdmVTZXR0aW5n
cyh2b2lkKQotewotCWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgewotCQljb25maWdTZXR0
aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkpOwotCQljb25maWdTZXR0aW5ncy0+c2V0VmFs
dWUoIi9zaG93RGVidWciLCBzaG93RGVidWcoKSk7Ci0JCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91
cCgpOwotCX0KLX0KLQotdm9pZCBDb25maWdJbmZvVmlldzo6c2V0U2hvd0RlYnVnKGJvb2wgYikK
LXsKLQlpZiAoX3Nob3dEZWJ1ZyAhPSBiKSB7Ci0JCV9zaG93RGVidWcgPSBiOwotCQlpZiAoX21l
bnUpCi0JCQltZW51SW5mbygpOwotCQllbHNlIGlmIChzeW0pCi0JCQlzeW1ib2xJbmZvKCk7Ci0J
CWVtaXQgc2hvd0RlYnVnQ2hhbmdlZChiKTsKLQl9Ci19Ci0KLXZvaWQgQ29uZmlnSW5mb1ZpZXc6
OnNldEluZm8oc3RydWN0IG1lbnUgKm0pCi17Ci0JaWYgKF9tZW51ID09IG0pCi0JCXJldHVybjsK
LQlfbWVudSA9IG07Ci0Jc3ltID0gTlVMTDsKLQlpZiAoIV9tZW51KQotCQljbGVhcigpOwotCWVs
c2UKLQkJbWVudUluZm8oKTsKLX0KLQotdm9pZCBDb25maWdJbmZvVmlldzo6c3ltYm9sSW5mbyh2
b2lkKQotewotCVFTdHJpbmcgc3RyOwotCi0Jc3RyICs9ICI8YmlnPlN5bWJvbDogPGI+IjsKLQlz
dHIgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFtZSk7Ci0Jc3RyICs9ICI8L2I+PC9iaWc+PGJyPjxi
cj52YWx1ZTogIjsKLQlzdHIgKz0gcHJpbnRfZmlsdGVyKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5
bSkpOwotCXN0ciArPSAiPGJyPnZpc2liaWxpdHk6ICI7Ci0Jc3RyICs9IHN5bS0+dmlzaWJsZSA9
PSB5ZXMgPyAieSIgOiBzeW0tPnZpc2libGUgPT0gbW9kID8gIm0iIDogIm4iOwotCXN0ciArPSAi
PGJyPiI7Ci0Jc3RyICs9IGRlYnVnX2luZm8oc3ltKTsKLQotCXNldFRleHQoc3RyKTsKLX0KLQot
dm9pZCBDb25maWdJbmZvVmlldzo6bWVudUluZm8odm9pZCkKLXsKLQlzdHJ1Y3Qgc3ltYm9sKiBz
eW07Ci0JUVN0cmluZyBoZWFkLCBkZWJ1ZywgaGVscDsKLQotCXN5bSA9IF9tZW51LT5zeW07Ci0J
aWYgKHN5bSkgewotCQlpZiAoX21lbnUtPnByb21wdCkgewotCQkJaGVhZCArPSAiPGJpZz48Yj4i
OwotCQkJaGVhZCArPSBwcmludF9maWx0ZXIoX21lbnUtPnByb21wdC0+dGV4dCk7Ci0JCQloZWFk
ICs9ICI8L2I+PC9iaWc+IjsKLQkJCWlmIChzeW0tPm5hbWUpIHsKLQkJCQloZWFkICs9ICIgKCI7
Ci0JCQkJaWYgKHNob3dEZWJ1ZygpKQotCQkJCQloZWFkICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8
YSBocmVmPVwicyVwXCI+Iiwgc3ltKTsKLQkJCQloZWFkICs9IHByaW50X2ZpbHRlcihzeW0tPm5h
bWUpOwotCQkJCWlmIChzaG93RGVidWcoKSkKLQkJCQkJaGVhZCArPSAiPC9hPiI7Ci0JCQkJaGVh
ZCArPSAiKSI7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc3ltLT5uYW1lKSB7Ci0JCQloZWFkICs9ICI8
YmlnPjxiPiI7Ci0JCQlpZiAoc2hvd0RlYnVnKCkpCi0JCQkJaGVhZCArPSBRU3RyaW5nKCkuc3By
aW50ZigiPGEgaHJlZj1cInMlcFwiPiIsIHN5bSk7Ci0JCQloZWFkICs9IHByaW50X2ZpbHRlcihz
eW0tPm5hbWUpOwotCQkJaWYgKHNob3dEZWJ1ZygpKQotCQkJCWhlYWQgKz0gIjwvYT4iOwotCQkJ
aGVhZCArPSAiPC9iPjwvYmlnPiI7Ci0JCX0KLQkJaGVhZCArPSAiPGJyPjxicj4iOwotCi0JCWlm
IChzaG93RGVidWcoKSkKLQkJCWRlYnVnID0gZGVidWdfaW5mbyhzeW0pOwotCi0JCXN0cnVjdCBn
c3RyIGhlbHBfZ3N0ciA9IHN0cl9uZXcoKTsKLQkJbWVudV9nZXRfZXh0X2hlbHAoX21lbnUsICZo
ZWxwX2dzdHIpOwotCQloZWxwID0gcHJpbnRfZmlsdGVyKHN0cl9nZXQoJmhlbHBfZ3N0cikpOwot
CQlzdHJfZnJlZSgmaGVscF9nc3RyKTsKLQl9IGVsc2UgaWYgKF9tZW51LT5wcm9tcHQpIHsKLQkJ
aGVhZCArPSAiPGJpZz48Yj4iOwotCQloZWFkICs9IHByaW50X2ZpbHRlcihfbWVudS0+cHJvbXB0
LT50ZXh0KTsKLQkJaGVhZCArPSAiPC9iPjwvYmlnPjxicj48YnI+IjsKLQkJaWYgKHNob3dEZWJ1
ZygpKSB7Ci0JCQlpZiAoX21lbnUtPnByb21wdC0+dmlzaWJsZS5leHByKSB7Ci0JCQkJZGVidWcg
Kz0gIiZuYnNwOyZuYnNwO2RlcDogIjsKLQkJCQlleHByX3ByaW50KF9tZW51LT5wcm9tcHQtPnZp
c2libGUuZXhwciwgZXhwcl9wcmludF9oZWxwLCAmZGVidWcsIEVfTk9ORSk7Ci0JCQkJZGVidWcg
Kz0gIjxicj48YnI+IjsKLQkJCX0KLQkJfQotCX0KLQlpZiAoc2hvd0RlYnVnKCkpCi0JCWRlYnVn
ICs9IFFTdHJpbmcoKS5zcHJpbnRmKCJkZWZpbmVkIGF0ICVzOiVkPGJyPjxicj4iLCBfbWVudS0+
ZmlsZS0+bmFtZSwgX21lbnUtPmxpbmVubyk7Ci0KLQlzZXRUZXh0KGhlYWQgKyBkZWJ1ZyArIGhl
bHApOwotfQotCi1RU3RyaW5nIENvbmZpZ0luZm9WaWV3OjpkZWJ1Z19pbmZvKHN0cnVjdCBzeW1i
b2wgKnN5bSkKLXsKLQlRU3RyaW5nIGRlYnVnOwotCi0JZGVidWcgKz0gInR5cGU6ICI7Ci0JZGVi
dWcgKz0gcHJpbnRfZmlsdGVyKHN5bV90eXBlX25hbWUoc3ltLT50eXBlKSk7Ci0JaWYgKHN5bV9p
c19jaG9pY2Uoc3ltKSkKLQkJZGVidWcgKz0gIiAoY2hvaWNlKSI7Ci0JZGVidWcgKz0gIjxicj4i
OwotCWlmIChzeW0tPnJldl9kZXAuZXhwcikgewotCQlkZWJ1ZyArPSAicmV2ZXJzZSBkZXA6ICI7
Ci0JCWV4cHJfcHJpbnQoc3ltLT5yZXZfZGVwLmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVn
LCBFX05PTkUpOwotCQlkZWJ1ZyArPSAiPGJyPiI7Ci0JfQotCWZvciAoc3RydWN0IHByb3BlcnR5
ICpwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgewotCQlzd2l0Y2gg
KHByb3AtPnR5cGUpIHsKLQkJY2FzZSBQX1BST01QVDoKLQkJY2FzZSBQX01FTlU6Ci0JCQlkZWJ1
ZyArPSBRU3RyaW5nKCkuc3ByaW50ZigicHJvbXB0OiA8YSBocmVmPVwibSVwXCI+IiwgcHJvcC0+
bWVudSk7Ci0JCQlkZWJ1ZyArPSBwcmludF9maWx0ZXIocHJvcC0+dGV4dCk7Ci0JCQlkZWJ1ZyAr
PSAiPC9hPjxicj4iOwotCQkJYnJlYWs7Ci0JCWNhc2UgUF9ERUZBVUxUOgotCQljYXNlIFBfU0VM
RUNUOgotCQljYXNlIFBfUkFOR0U6Ci0JCQlkZWJ1ZyArPSBwcm9wX2dldF90eXBlX25hbWUocHJv
cC0+dHlwZSk7Ci0JCQlkZWJ1ZyArPSAiOiAiOwotCQkJZXhwcl9wcmludChwcm9wLT5leHByLCBl
eHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsKLQkJCWRlYnVnICs9ICI8YnI+IjsKLQkJ
CWJyZWFrOwotCQljYXNlIFBfQ0hPSUNFOgotCQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgewot
CQkJCWRlYnVnICs9ICJjaG9pY2U6ICI7Ci0JCQkJZXhwcl9wcmludChwcm9wLT5leHByLCBleHBy
X3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsKLQkJCQlkZWJ1ZyArPSAiPGJyPiI7Ci0JCQl9
Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWRlYnVnICs9ICJ1bmtub3duIHByb3BlcnR5OiAi
OwotCQkJZGVidWcgKz0gcHJvcF9nZXRfdHlwZV9uYW1lKHByb3AtPnR5cGUpOwotCQkJZGVidWcg
Kz0gIjxicj4iOwotCQl9Ci0JCWlmIChwcm9wLT52aXNpYmxlLmV4cHIpIHsKLQkJCWRlYnVnICs9
ICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtkZXA6ICI7Ci0JCQlleHByX3ByaW50KHByb3AtPnZp
c2libGUuZXhwciwgZXhwcl9wcmludF9oZWxwLCAmZGVidWcsIEVfTk9ORSk7Ci0JCQlkZWJ1ZyAr
PSAiPGJyPiI7Ci0JCX0KLQl9Ci0JZGVidWcgKz0gIjxicj4iOwotCi0JcmV0dXJuIGRlYnVnOwot
fQotCi1RU3RyaW5nIENvbmZpZ0luZm9WaWV3OjpwcmludF9maWx0ZXIoY29uc3QgUVN0cmluZyAm
c3RyKQotewotCVFSZWdFeHAgcmUoIls8PiZcIlxcbl0iKTsKLQlRU3RyaW5nIHJlcyA9IHN0cjsK
LQlmb3IgKGludCBpID0gMDsgKGkgPSByZXMuaW5kZXhPZihyZSwgaSkpID49IDA7KSB7Ci0JCXN3
aXRjaCAocmVzW2ldLnRvTGF0aW4xKCkpIHsKLQkJY2FzZSAnPCc6Ci0JCQlyZXMucmVwbGFjZShp
LCAxLCAiJmx0OyIpOwotCQkJaSArPSA0OwotCQkJYnJlYWs7Ci0JCWNhc2UgJz4nOgotCQkJcmVz
LnJlcGxhY2UoaSwgMSwgIiZndDsiKTsKLQkJCWkgKz0gNDsKLQkJCWJyZWFrOwotCQljYXNlICcm
JzoKLQkJCXJlcy5yZXBsYWNlKGksIDEsICImYW1wOyIpOwotCQkJaSArPSA1OwotCQkJYnJlYWs7
Ci0JCWNhc2UgJyInOgotCQkJcmVzLnJlcGxhY2UoaSwgMSwgIiZxdW90OyIpOwotCQkJaSArPSA2
OwotCQkJYnJlYWs7Ci0JCWNhc2UgJ1xuJzoKLQkJCXJlcy5yZXBsYWNlKGksIDEsICI8YnI+Iik7
Ci0JCQlpICs9IDQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmVzOwotfQotCi12b2lk
IENvbmZpZ0luZm9WaWV3OjpleHByX3ByaW50X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJv
bCAqc3ltLCBjb25zdCBjaGFyICpzdHIpCi17Ci0JUVN0cmluZyogdGV4dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UVN0cmluZyo+KGRhdGEpOwotCVFTdHJpbmcgc3RyMiA9IHByaW50X2ZpbHRlcihzdHIp
OwotCi0JaWYgKHN5bSAmJiBzeW0tPm5hbWUgJiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNU
KSkgewotCQkqdGV4dCArPSBRU3RyaW5nKCkuc3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIsIHN5
bSk7Ci0JCSp0ZXh0ICs9IHN0cjI7Ci0JCSp0ZXh0ICs9ICI8L2E+IjsKLQl9IGVsc2UKLQkJKnRl
eHQgKz0gc3RyMjsKLX0KLQotUU1lbnUqIENvbmZpZ0luZm9WaWV3OjpjcmVhdGVTdGFuZGFyZENv
bnRleHRNZW51KGNvbnN0IFFQb2ludCAmIHBvcykKLXsKLQlRTWVudSogcG9wdXAgPSBQYXJlbnQ6
OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUocG9zKTsKLQlRQWN0aW9uKiBhY3Rpb24gPSBuZXcg
UUFjdGlvbigiU2hvdyBEZWJ1ZyBJbmZvIiwgcG9wdXApOwotCSAgYWN0aW9uLT5zZXRDaGVja2Fi
bGUodHJ1ZSk7Ci0JICBjb25uZWN0KGFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9U
KHNldFNob3dEZWJ1Zyhib29sKSkpOwotCSAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc2hvd0RlYnVn
Q2hhbmdlZChib29sKSksIGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkpOwotCSAgYWN0aW9uLT5z
ZXRDaGVja2VkKHNob3dEZWJ1ZygpKTsKLQlwb3B1cC0+YWRkU2VwYXJhdG9yKCk7Ci0JcG9wdXAt
PmFkZEFjdGlvbihhY3Rpb24pOwotCXJldHVybiBwb3B1cDsKLX0KLQotdm9pZCBDb25maWdJbmZv
Vmlldzo6Y29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSkKLXsKLQlQYXJlbnQ6
OmNvbnRleHRNZW51RXZlbnQoZSk7Ci19Ci0KLUNvbmZpZ1NlYXJjaFdpbmRvdzo6Q29uZmlnU2Vh
cmNoV2luZG93KENvbmZpZ01haW5XaW5kb3cqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKLQk6
IFBhcmVudChwYXJlbnQpLCByZXN1bHQoTlVMTCkKLXsKLQlzZXRPYmplY3ROYW1lKG5hbWUpOwot
CXNldFdpbmRvd1RpdGxlKCJTZWFyY2ggQ29uZmlnIik7Ci0KLQlRVkJveExheW91dCogbGF5b3V0
MSA9IG5ldyBRVkJveExheW91dCh0aGlzKTsKLQlsYXlvdXQxLT5zZXRDb250ZW50c01hcmdpbnMo
MTEsIDExLCAxMSwgMTEpOwotCWxheW91dDEtPnNldFNwYWNpbmcoNik7Ci0JUUhCb3hMYXlvdXQq
IGxheW91dDIgPSBuZXcgUUhCb3hMYXlvdXQoMCk7Ci0JbGF5b3V0Mi0+c2V0Q29udGVudHNNYXJn
aW5zKDAsIDAsIDAsIDApOwotCWxheW91dDItPnNldFNwYWNpbmcoNik7Ci0JbGF5b3V0Mi0+YWRk
V2lkZ2V0KG5ldyBRTGFiZWwoIkZpbmQ6IiwgdGhpcykpOwotCWVkaXRGaWVsZCA9IG5ldyBRTGlu
ZUVkaXQodGhpcyk7Ci0JY29ubmVjdChlZGl0RmllbGQsIFNJR05BTChyZXR1cm5QcmVzc2VkKCkp
LCBTTE9UKHNlYXJjaCgpKSk7Ci0JbGF5b3V0Mi0+YWRkV2lkZ2V0KGVkaXRGaWVsZCk7Ci0Jc2Vh
cmNoQnV0dG9uID0gbmV3IFFQdXNoQnV0dG9uKCJTZWFyY2giLCB0aGlzKTsKLQlzZWFyY2hCdXR0
b24tPnNldEF1dG9EZWZhdWx0KGZhbHNlKTsKLQljb25uZWN0KHNlYXJjaEJ1dHRvbiwgU0lHTkFM
KGNsaWNrZWQoKSksIFNMT1Qoc2VhcmNoKCkpKTsKLQlsYXlvdXQyLT5hZGRXaWRnZXQoc2VhcmNo
QnV0dG9uKTsKLQlsYXlvdXQxLT5hZGRMYXlvdXQobGF5b3V0Mik7Ci0KLQlzcGxpdCA9IG5ldyBR
U3BsaXR0ZXIodGhpcyk7Ci0Jc3BsaXQtPnNldE9yaWVudGF0aW9uKFF0OjpWZXJ0aWNhbCk7Ci0J
bGlzdCA9IG5ldyBDb25maWdWaWV3KHNwbGl0LCBuYW1lKTsKLQlsaXN0LT5saXN0LT5tb2RlID0g
bGlzdE1vZGU7Ci0JaW5mbyA9IG5ldyBDb25maWdJbmZvVmlldyhzcGxpdCwgbmFtZSk7Ci0JY29u
bmVjdChsaXN0LT5saXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLAotCQlp
bmZvLCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsKLQljb25uZWN0KGxpc3QtPmxpc3Qs
IFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqKSksCi0JCXBhcmVudCwgU0xPVChzZXRN
ZW51TGluayhzdHJ1Y3QgbWVudSAqKSkpOwotCi0JbGF5b3V0MS0+YWRkV2lkZ2V0KHNwbGl0KTsK
LQotCWlmIChuYW1lKSB7Ci0JCVFWYXJpYW50IHgsIHk7Ci0JCWludCB3aWR0aCwgaGVpZ2h0Owot
CQlib29sIG9rOwotCi0JCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUpOwotCQl3aWR0
aCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB3aWR0aCIsIHBhcmVudC0+d2lkdGgo
KSAvIDIpLnRvSW50KCk7Ci0JCWhlaWdodCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRv
dyBoZWlnaHQiLCBwYXJlbnQtPmhlaWdodCgpIC8gMikudG9JbnQoKTsKLQkJcmVzaXplKHdpZHRo
LCBoZWlnaHQpOwotCQl4ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHgiKTsKLQkJ
eSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB5Iik7Ci0JCWlmICgoeC5pc1ZhbGlk
KCkpJiYoeS5pc1ZhbGlkKCkpKQotCQkJbW92ZSh4LnRvSW50KCksIHkudG9JbnQoKSk7Ci0JCVFM
aXN0PGludD4gc2l6ZXMgPSBjb25maWdTZXR0aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQiLCAmb2sp
OwotCQlpZiAob2spCi0JCQlzcGxpdC0+c2V0U2l6ZXMoc2l6ZXMpOwotCQljb25maWdTZXR0aW5n
cy0+ZW5kR3JvdXAoKTsKLQkJY29ubmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgp
KSwgU0xPVChzYXZlU2V0dGluZ3MoKSkpOwotCX0KLX0KLQotdm9pZCBDb25maWdTZWFyY2hXaW5k
b3c6OnNhdmVTZXR0aW5ncyh2b2lkKQotewotCWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkg
ewotCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkpOwotCQljb25maWdT
ZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgeCIsIHBvcygpLngoKSk7Ci0JCWNvbmZpZ1NldHRp
bmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5IiwgcG9zKCkueSgpKTsKLQkJY29uZmlnU2V0dGluZ3Mt
PnNldFZhbHVlKCIvd2luZG93IHdpZHRoIiwgc2l6ZSgpLndpZHRoKCkpOwotCQljb25maWdTZXR0
aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgaGVpZ2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsKLQkJY29u
ZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxpdCIsIHNwbGl0LT5zaXplcygpKTsKLQkJY29u
ZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7Ci0JfQotfQotCi12b2lkIENvbmZpZ1NlYXJjaFdpbmRv
dzo6c2VhcmNoKHZvaWQpCi17Ci0Jc3RydWN0IHN5bWJvbCAqKnA7Ci0Jc3RydWN0IHByb3BlcnR5
ICpwcm9wOwotCUNvbmZpZ0l0ZW0gKmxhc3RJdGVtID0gTlVMTDsKLQotCWZyZWUocmVzdWx0KTsK
LQlsaXN0LT5saXN0LT5jbGVhcigpOwotCWluZm8tPmNsZWFyKCk7Ci0KLQlyZXN1bHQgPSBzeW1f
cmVfc2VhcmNoKGVkaXRGaWVsZC0+dGV4dCgpLnRvTGF0aW4xKCkpOwotCWlmICghcmVzdWx0KQot
CQlyZXR1cm47Ci0JZm9yIChwID0gcmVzdWx0OyAqcDsgcCsrKSB7Ci0JCWZvcl9hbGxfcHJvbXB0
cygoKnApLCBwcm9wKQotCQkJbGFzdEl0ZW0gPSBuZXcgQ29uZmlnSXRlbShsaXN0LT5saXN0LCBs
YXN0SXRlbSwgcHJvcC0+bWVudSwKLQkJCQkJCSAgbWVudV9pc192aXNpYmxlKHByb3AtPm1lbnUp
KTsKLQl9Ci19Ci0KLS8qCi0gKiBDb25zdHJ1Y3QgdGhlIGNvbXBsZXRlIGNvbmZpZyB3aWRnZXQK
LSAqLwotQ29uZmlnTWFpbldpbmRvdzo6Q29uZmlnTWFpbldpbmRvdyh2b2lkKQotCTogc2VhcmNo
V2luZG93KDApCi17Ci0JUU1lbnVCYXIqIG1lbnU7Ci0JYm9vbCBvayA9IHRydWU7Ci0JUVZhcmlh
bnQgeCwgeTsKLQlpbnQgd2lkdGgsIGhlaWdodDsKLQljaGFyIHRpdGxlWzI1Nl07Ci0KLQlRRGVz
a3RvcFdpZGdldCAqZCA9IGNvbmZpZ0FwcC0+ZGVza3RvcCgpOwotCXNucHJpbnRmKHRpdGxlLCBz
aXplb2YodGl0bGUpLCAiJXMlcyIsCi0JCXJvb3RtZW51LnByb21wdC0+dGV4dCwKLQkJIiIKLQkJ
KTsKLQlzZXRXaW5kb3dUaXRsZSh0aXRsZSk7Ci0KLQl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52
YWx1ZSgiL3dpbmRvdyB3aWR0aCIsIGQtPndpZHRoKCkgLSA2NCkudG9JbnQoKTsKLQloZWlnaHQg
PSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgaGVpZ2h0IiwgZC0+aGVpZ2h0KCkgLSA2
NCkudG9JbnQoKTsKLQlyZXNpemUod2lkdGgsIGhlaWdodCk7Ci0JeCA9IGNvbmZpZ1NldHRpbmdz
LT52YWx1ZSgiL3dpbmRvdyB4Iik7Ci0JeSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRv
dyB5Iik7Ci0JaWYgKCh4LmlzVmFsaWQoKSkmJih5LmlzVmFsaWQoKSkpCi0JCW1vdmUoeC50b0lu
dCgpLCB5LnRvSW50KCkpOwotCi0Jc3BsaXQxID0gbmV3IFFTcGxpdHRlcih0aGlzKTsKLQlzcGxp
dDEtPnNldE9yaWVudGF0aW9uKFF0OjpIb3Jpem9udGFsKTsKLQlzZXRDZW50cmFsV2lkZ2V0KHNw
bGl0MSk7Ci0KLQltZW51VmlldyA9IG5ldyBDb25maWdWaWV3KHNwbGl0MSwgIm1lbnUiKTsKLQlt
ZW51TGlzdCA9IG1lbnVWaWV3LT5saXN0OwotCi0Jc3BsaXQyID0gbmV3IFFTcGxpdHRlcihzcGxp
dDEpOwotCXNwbGl0Mi0+c2V0T3JpZW50YXRpb24oUXQ6OlZlcnRpY2FsKTsKLQotCS8vIGNyZWF0
ZSBjb25maWcgdHJlZQotCWNvbmZpZ1ZpZXcgPSBuZXcgQ29uZmlnVmlldyhzcGxpdDIsICJjb25m
aWciKTsKLQljb25maWdMaXN0ID0gY29uZmlnVmlldy0+bGlzdDsKLQotCWhlbHBUZXh0ID0gbmV3
IENvbmZpZ0luZm9WaWV3KHNwbGl0MiwgImhlbHAiKTsKLQotCXNldFRhYk9yZGVyKGNvbmZpZ0xp
c3QsIGhlbHBUZXh0KTsKLQljb25maWdMaXN0LT5zZXRGb2N1cygpOwotCi0JbWVudSA9IG1lbnVC
YXIoKTsKLQl0b29sQmFyID0gbmV3IFFUb29sQmFyKCJUb29scyIsIHRoaXMpOwotCWFkZFRvb2xC
YXIodG9vbEJhcik7Ci0KLQliYWNrQWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fYmFj
ayksICJCYWNrIiwgdGhpcyk7Ci0JICBjb25uZWN0KGJhY2tBY3Rpb24sIFNJR05BTCh0cmlnZ2Vy
ZWQoYm9vbCkpLCBTTE9UKGdvQmFjaygpKSk7Ci0JICBiYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZh
bHNlKTsKLQlRQWN0aW9uICpxdWl0QWN0aW9uID0gbmV3IFFBY3Rpb24oIiZRdWl0IiwgdGhpcyk7
Ci0JcXVpdEFjdGlvbi0+c2V0U2hvcnRjdXQoUXQ6OkNUUkwgKyBRdDo6S2V5X1EpOwotCSAgY29u
bmVjdChxdWl0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChjbG9zZSgpKSk7
Ci0JUUFjdGlvbiAqbG9hZEFjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX2xvYWQpLCAi
JkxvYWQiLCB0aGlzKTsKLQlsb2FkQWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpL
ZXlfTCk7Ci0JICBjb25uZWN0KGxvYWRBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBT
TE9UKGxvYWRDb25maWcoKSkpOwotCXNhdmVBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhw
bV9zYXZlKSwgIiZTYXZlIiwgdGhpcyk7Ci0Jc2F2ZUFjdGlvbi0+c2V0U2hvcnRjdXQoUXQ6OkNU
UkwgKyBRdDo6S2V5X1MpOwotCSAgY29ubmVjdChzYXZlQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVk
KGJvb2wpKSwgU0xPVChzYXZlQ29uZmlnKCkpKTsKLQljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNr
KGNvbmZfY2hhbmdlZCk7Ci0JLy8gU2V0IHNhdmVBY3Rpb24ncyBpbml0aWFsIHN0YXRlCi0JY29u
Zl9jaGFuZ2VkKCk7Ci0JY29uZmlnbmFtZSA9IHhzdHJkdXAoY29uZl9nZXRfY29uZmlnbmFtZSgp
KTsKLQotCVFBY3Rpb24gKnNhdmVBc0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJTYXZlICZBcy4uLiIs
IHRoaXMpOwotCSAgY29ubmVjdChzYXZlQXNBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkp
LCBTTE9UKHNhdmVDb25maWdBcygpKSk7Ci0JUUFjdGlvbiAqc2VhcmNoQWN0aW9uID0gbmV3IFFB
Y3Rpb24oIiZGaW5kIiwgdGhpcyk7Ci0Jc2VhcmNoQWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RS
TCArIFF0OjpLZXlfRik7Ci0JICBjb25uZWN0KHNlYXJjaEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJl
ZChib29sKSksIFNMT1Qoc2VhcmNoQ29uZmlnKCkpKTsKLQlzaW5nbGVWaWV3QWN0aW9uID0gbmV3
IFFBY3Rpb24oUVBpeG1hcCh4cG1fc2luZ2xlX3ZpZXcpLCAiU2luZ2xlIFZpZXciLCB0aGlzKTsK
LQlzaW5nbGVWaWV3QWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0JICBjb25uZWN0KHNpbmds
ZVZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNob3dTaW5nbGVWaWV3
KCkpKTsKLQlzcGxpdFZpZXdBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9zcGxpdF92
aWV3KSwgIlNwbGl0IFZpZXciLCB0aGlzKTsKLQlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrYWJs
ZSh0cnVlKTsKLQkgIGNvbm5lY3Qoc3BsaXRWaWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJv
b2wpKSwgU0xPVChzaG93U3BsaXRWaWV3KCkpKTsKLQlmdWxsVmlld0FjdGlvbiA9IG5ldyBRQWN0
aW9uKFFQaXhtYXAoeHBtX3RyZWVfdmlldyksICJGdWxsIFZpZXciLCB0aGlzKTsKLQlmdWxsVmll
d0FjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwotCSAgY29ubmVjdChmdWxsVmlld0FjdGlvbiwg
U0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd0Z1bGxWaWV3KCkpKTsKLQotCVFBY3Rp
b24gKnNob3dOYW1lQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgTmFtZSIsIHRoaXMpOwotCSAg
c2hvd05hbWVBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKLQkgIGNvbm5lY3Qoc2hvd05hbWVB
Y3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93TmFt
ZShib29sKSkpOwotCSAgc2hvd05hbWVBY3Rpb24tPnNldENoZWNrZWQoY29uZmlnVmlldy0+c2hv
d05hbWUoKSk7Ci0JUUFjdGlvbiAqc2hvd1JhbmdlQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cg
UmFuZ2UiLCB0aGlzKTsKLQkgIHNob3dSYW5nZUFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwot
CSAgY29ubmVjdChzaG93UmFuZ2VBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmln
VmlldywgU0xPVChzZXRTaG93UmFuZ2UoYm9vbCkpKTsKLQlRQWN0aW9uICpzaG93RGF0YUFjdGlv
biA9IG5ldyBRQWN0aW9uKCJTaG93IERhdGEiLCB0aGlzKTsKLQkgIHNob3dEYXRhQWN0aW9uLT5z
ZXRDaGVja2FibGUodHJ1ZSk7Ci0JICBjb25uZWN0KHNob3dEYXRhQWN0aW9uLCBTSUdOQUwodG9n
Z2xlZChib29sKSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd0RhdGEoYm9vbCkpKTsKLQotCVFB
Y3Rpb25Hcm91cCAqb3B0R3JvdXAgPSBuZXcgUUFjdGlvbkdyb3VwKHRoaXMpOwotCW9wdEdyb3Vw
LT5zZXRFeGNsdXNpdmUodHJ1ZSk7Ci0JY29ubmVjdChvcHRHcm91cCwgU0lHTkFMKHRyaWdnZXJl
ZChRQWN0aW9uKikpLCBjb25maWdWaWV3LAotCQlTTE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAq
KSkpOwotCWNvbm5lY3Qob3B0R3JvdXAsIFNJR05BTCh0cmlnZ2VyZWQoUUFjdGlvbiAqKSksIG1l
bnVWaWV3LAotCQlTTE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKSkpOwotCi0JY29uZmlnVmll
dy0+c2hvd05vcm1hbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IE5vcm1hbCBPcHRpb25zIiwg
b3B0R3JvdXApOwotCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hv
dyBBbGwgT3B0aW9ucyIsIG9wdEdyb3VwKTsKLQljb25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9u
ID0gbmV3IFFBY3Rpb24oIlNob3cgUHJvbXB0IE9wdGlvbnMiLCBvcHRHcm91cCk7Ci0JY29uZmln
Vmlldy0+c2hvd05vcm1hbEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOwotCWNvbmZpZ1ZpZXct
PnNob3dBbGxBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKLQljb25maWdWaWV3LT5zaG93UHJv
bXB0QWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7Ci0KLQlRQWN0aW9uICpzaG93RGVidWdBY3Rp
b24gPSBuZXcgUUFjdGlvbigiU2hvdyBEZWJ1ZyBJbmZvIiwgdGhpcyk7Ci0JICBzaG93RGVidWdB
Y3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKLQkgIGNvbm5lY3Qoc2hvd0RlYnVnQWN0aW9uLCBT
SUdOQUwodG9nZ2xlZChib29sKSksIGhlbHBUZXh0LCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkp
OwotCSAgc2hvd0RlYnVnQWN0aW9uLT5zZXRDaGVja2VkKGhlbHBUZXh0LT5zaG93RGVidWcoKSk7
Ci0KLQlRQWN0aW9uICpzaG93SW50cm9BY3Rpb24gPSBuZXcgUUFjdGlvbigiSW50cm9kdWN0aW9u
IiwgdGhpcyk7Ci0JICBjb25uZWN0KHNob3dJbnRyb0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChi
b29sKSksIFNMT1Qoc2hvd0ludHJvKCkpKTsKLQlRQWN0aW9uICpzaG93QWJvdXRBY3Rpb24gPSBu
ZXcgUUFjdGlvbigiQWJvdXQiLCB0aGlzKTsKLQkgIGNvbm5lY3Qoc2hvd0Fib3V0QWN0aW9uLCBT
SUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93QWJvdXQoKSkpOwotCi0JLy8gaW5pdCB0
b29sIGJhcgotCXRvb2xCYXItPmFkZEFjdGlvbihiYWNrQWN0aW9uKTsKLQl0b29sQmFyLT5hZGRT
ZXBhcmF0b3IoKTsKLQl0b29sQmFyLT5hZGRBY3Rpb24obG9hZEFjdGlvbik7Ci0JdG9vbEJhci0+
YWRkQWN0aW9uKHNhdmVBY3Rpb24pOwotCXRvb2xCYXItPmFkZFNlcGFyYXRvcigpOwotCXRvb2xC
YXItPmFkZEFjdGlvbihzaW5nbGVWaWV3QWN0aW9uKTsKLQl0b29sQmFyLT5hZGRBY3Rpb24oc3Bs
aXRWaWV3QWN0aW9uKTsKLQl0b29sQmFyLT5hZGRBY3Rpb24oZnVsbFZpZXdBY3Rpb24pOwotCi0J
Ly8gY3JlYXRlIGNvbmZpZyBtZW51Ci0JUU1lbnUqIGNvbmZpZyA9IG1lbnUtPmFkZE1lbnUoIiZG
aWxlIik7Ci0JY29uZmlnLT5hZGRBY3Rpb24obG9hZEFjdGlvbik7Ci0JY29uZmlnLT5hZGRBY3Rp
b24oc2F2ZUFjdGlvbik7Ci0JY29uZmlnLT5hZGRBY3Rpb24oc2F2ZUFzQWN0aW9uKTsKLQljb25m
aWctPmFkZFNlcGFyYXRvcigpOwotCWNvbmZpZy0+YWRkQWN0aW9uKHF1aXRBY3Rpb24pOwotCi0J
Ly8gY3JlYXRlIGVkaXQgbWVudQotCVFNZW51KiBlZGl0TWVudSA9IG1lbnUtPmFkZE1lbnUoIiZF
ZGl0Iik7Ci0JZWRpdE1lbnUtPmFkZEFjdGlvbihzZWFyY2hBY3Rpb24pOwotCi0JLy8gY3JlYXRl
IG9wdGlvbnMgbWVudQotCVFNZW51KiBvcHRpb25NZW51ID0gbWVudS0+YWRkTWVudSgiJk9wdGlv
biIpOwotCW9wdGlvbk1lbnUtPmFkZEFjdGlvbihzaG93TmFtZUFjdGlvbik7Ci0Jb3B0aW9uTWVu
dS0+YWRkQWN0aW9uKHNob3dSYW5nZUFjdGlvbik7Ci0Jb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNo
b3dEYXRhQWN0aW9uKTsKLQlvcHRpb25NZW51LT5hZGRTZXBhcmF0b3IoKTsKLQlvcHRpb25NZW51
LT5hZGRBY3Rpb25zKG9wdEdyb3VwLT5hY3Rpb25zKCkpOwotCW9wdGlvbk1lbnUtPmFkZFNlcGFy
YXRvcigpOwotCW9wdGlvbk1lbnUtPmFkZEFjdGlvbihzaG93RGVidWdBY3Rpb24pOwotCi0JLy8g
Y3JlYXRlIGhlbHAgbWVudQotCW1lbnUtPmFkZFNlcGFyYXRvcigpOwotCVFNZW51KiBoZWxwTWVu
dSA9IG1lbnUtPmFkZE1lbnUoIiZIZWxwIik7Ci0JaGVscE1lbnUtPmFkZEFjdGlvbihzaG93SW50
cm9BY3Rpb24pOwotCWhlbHBNZW51LT5hZGRBY3Rpb24oc2hvd0Fib3V0QWN0aW9uKTsKLQotCWNv
bm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwKLQkJ
aGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOwotCWNvbm5lY3QoY29uZmln
TGlzdCwgU0lHTkFMKG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqKSksCi0JCVNMT1QoY2hhbmdl
TWVudShzdHJ1Y3QgbWVudSAqKSkpOwotCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKHBhcmVu
dFNlbGVjdGVkKCkpLAotCQlTTE9UKGdvQmFjaygpKSk7Ci0JY29ubmVjdChtZW51TGlzdCwgU0lH
TkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwKLQkJaGVscFRleHQsIFNMT1Qoc2V0SW5m
byhzdHJ1Y3QgbWVudSAqKSkpOwotCWNvbm5lY3QobWVudUxpc3QsIFNJR05BTChtZW51U2VsZWN0
ZWQoc3RydWN0IG1lbnUgKikpLAotCQlTTE9UKGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKikpKTsK
LQotCWNvbm5lY3QoY29uZmlnTGlzdCwgU0lHTkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwK
LQkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOwotCWNvbm5lY3QobWVu
dUxpc3QsIFNJR05BTChnb3RGb2N1cyhzdHJ1Y3QgbWVudSAqKSksCi0JCWhlbHBUZXh0LCBTTE9U
KHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsKLQljb25uZWN0KG1lbnVMaXN0LCBTSUdOQUwoZ290
Rm9jdXMoc3RydWN0IG1lbnUgKikpLAotCQlTTE9UKGxpc3RGb2N1c0NoYW5nZWQodm9pZCkpKTsK
LQljb25uZWN0KGhlbHBUZXh0LCBTSUdOQUwobWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopKSwK
LQkJU0xPVChzZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqKSkpOwotCi0JUVN0cmluZyBsaXN0TW9k
ZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL2xpc3RNb2RlIiwgInN5bWJvbCIpLnRvU3RyaW5n
KCk7Ci0JaWYgKGxpc3RNb2RlID09ICJzaW5nbGUiKQotCQlzaG93U2luZ2xlVmlldygpOwotCWVs
c2UgaWYgKGxpc3RNb2RlID09ICJmdWxsIikKLQkJc2hvd0Z1bGxWaWV3KCk7Ci0JZWxzZSAvKmlm
IChsaXN0TW9kZSA9PSAic3BsaXQiKSovCi0JCXNob3dTcGxpdFZpZXcoKTsKLQotCS8vIFVJIHNl
dHVwIGRvbmUsIHJlc3RvcmUgc3BsaXR0ZXIgcG9zaXRpb25zCi0JUUxpc3Q8aW50PiBzaXplcyA9
IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxpdDEiLCAmb2spOwotCWlmIChvaykKLQkJ
c3BsaXQxLT5zZXRTaXplcyhzaXplcyk7Ci0KLQlzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFk
U2l6ZXMoIi9zcGxpdDIiLCAmb2spOwotCWlmIChvaykKLQkJc3BsaXQyLT5zZXRTaXplcyhzaXpl
cyk7Ci19Ci0KLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6bG9hZENvbmZpZyh2b2lkKQotewotCVFT
dHJpbmcgc3RyOwotCVFCeXRlQXJyYXkgYmE7Ci0JY29uc3QgY2hhciAqbmFtZTsKLQotCXN0ciA9
IFFGaWxlRGlhbG9nOjpnZXRPcGVuRmlsZU5hbWUodGhpcywgIiIsIGNvbmZpZ25hbWUpOwotCWlm
IChzdHIuaXNOdWxsKCkpCi0JCXJldHVybjsKLQotCWJhID0gc3RyLnRvTG9jYWw4Qml0KCk7Ci0J
bmFtZSA9IGJhLmRhdGEoKTsKLQotCWlmIChjb25mX3JlYWQobmFtZSkpCi0JCVFNZXNzYWdlQm94
OjppbmZvcm1hdGlvbih0aGlzLCAicWNvbmYiLCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlv
biEiKTsKLQotCWZyZWUoY29uZmlnbmFtZSk7Ci0JY29uZmlnbmFtZSA9IHhzdHJkdXAobmFtZSk7
Ci0KLQlDb25maWdWaWV3Ojp1cGRhdGVMaXN0QWxsKCk7Ci19Ci0KLWJvb2wgQ29uZmlnTWFpbldp
bmRvdzo6c2F2ZUNvbmZpZyh2b2lkKQotewotCWlmIChjb25mX3dyaXRlKGNvbmZpZ25hbWUpKSB7
Ci0JCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCAicWNvbmYiLCAiVW5hYmxlIHRvIHNh
dmUgY29uZmlndXJhdGlvbiEiKTsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQljb25mX3dyaXRlX2F1
dG9jb25mKDApOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6
c2F2ZUNvbmZpZ0FzKHZvaWQpCi17Ci0JUVN0cmluZyBzdHI7Ci0JUUJ5dGVBcnJheSBiYTsKLQlj
b25zdCBjaGFyICpuYW1lOwotCi0Jc3RyID0gUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSh0
aGlzLCAiIiwgY29uZmlnbmFtZSk7Ci0JaWYgKHN0ci5pc051bGwoKSkKLQkJcmV0dXJuOwotCi0J
YmEgPSBzdHIudG9Mb2NhbDhCaXQoKTsKLQluYW1lID0gYmEuZGF0YSgpOwotCi0JaWYgKGNvbmZf
d3JpdGUobmFtZSkpIHsKLQkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIs
ICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uISIpOwotCX0KLQljb25mX3dyaXRlX2F1dG9j
b25mKDApOwotCi0JZnJlZShjb25maWduYW1lKTsKLQljb25maWduYW1lID0geHN0cmR1cChuYW1l
KTsKLX0KLQotdm9pZCBDb25maWdNYWluV2luZG93OjpzZWFyY2hDb25maWcodm9pZCkKLXsKLQlp
ZiAoIXNlYXJjaFdpbmRvdykKLQkJc2VhcmNoV2luZG93ID0gbmV3IENvbmZpZ1NlYXJjaFdpbmRv
dyh0aGlzLCAic2VhcmNoIik7Ci0Jc2VhcmNoV2luZG93LT5zaG93KCk7Ci19Ci0KLXZvaWQgQ29u
ZmlnTWFpbldpbmRvdzo6Y2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqbWVudSkKLXsKLQljb25maWdM
aXN0LT5zZXRSb290TWVudShtZW51KTsKLQlpZiAoY29uZmlnTGlzdC0+cm9vdEVudHJ5LT5wYXJl
bnQgPT0gJnJvb3RtZW51KQotCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsKLQllbHNl
Ci0JCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7Ci19Ci0KLXZvaWQgQ29uZmlnTWFpbldp
bmRvdzo6c2V0TWVudUxpbmsoc3RydWN0IG1lbnUgKm1lbnUpCi17Ci0Jc3RydWN0IG1lbnUgKnBh
cmVudDsKLQlDb25maWdMaXN0KiBsaXN0ID0gTlVMTDsKLQlDb25maWdJdGVtKiBpdGVtOwotCi0J
aWYgKGNvbmZpZ0xpc3QtPm1lbnVTa2lwKG1lbnUpKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKGNv
bmZpZ0xpc3QtPm1vZGUpIHsKLQljYXNlIHNpbmdsZU1vZGU6Ci0JCWxpc3QgPSBjb25maWdMaXN0
OwotCQlwYXJlbnQgPSBtZW51X2dldF9wYXJlbnRfbWVudShtZW51KTsKLQkJaWYgKCFwYXJlbnQp
Ci0JCQlyZXR1cm47Ci0JCWxpc3QtPnNldFJvb3RNZW51KHBhcmVudCk7Ci0JCWJyZWFrOwotCWNh
c2Ugc3ltYm9sTW9kZToKLQkJaWYgKG1lbnUtPmZsYWdzICYgTUVOVV9ST09UKSB7Ci0JCQljb25m
aWdMaXN0LT5zZXRSb290TWVudShtZW51KTsKLQkJCWNvbmZpZ0xpc3QtPmNsZWFyU2VsZWN0aW9u
KCk7Ci0JCQlsaXN0ID0gbWVudUxpc3Q7Ci0JCX0gZWxzZSB7Ci0JCQlsaXN0ID0gY29uZmlnTGlz
dDsKLQkJCXBhcmVudCA9IG1lbnVfZ2V0X3BhcmVudF9tZW51KG1lbnUtPnBhcmVudCk7Ci0JCQlp
ZiAoIXBhcmVudCkKLQkJCQlyZXR1cm47Ci0JCQlpdGVtID0gbWVudUxpc3QtPmZpbmRDb25maWdJ
dGVtKHBhcmVudCk7Ci0JCQlpZiAoaXRlbSkgewotCQkJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUp
OwotCQkJCW1lbnVMaXN0LT5zY3JvbGxUb0l0ZW0oaXRlbSk7Ci0JCQl9Ci0JCQlsaXN0LT5zZXRS
b290TWVudShwYXJlbnQpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgZnVsbE1vZGU6Ci0JCWxpc3Qg
PSBjb25maWdMaXN0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0KLQlpZiAo
bGlzdCkgewotCQlpdGVtID0gbGlzdC0+ZmluZENvbmZpZ0l0ZW0obWVudSk7Ci0JCWlmIChpdGVt
KSB7Ci0JCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKLQkJCWxpc3QtPnNjcm9sbFRvSXRlbShp
dGVtKTsKLQkJCWxpc3QtPnNldEZvY3VzKCk7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgQ29uZmlnTWFp
bldpbmRvdzo6bGlzdEZvY3VzQ2hhbmdlZCh2b2lkKQotewotCWlmIChtZW51TGlzdC0+bW9kZSA9
PSBtZW51TW9kZSkKLQkJY29uZmlnTGlzdC0+Y2xlYXJTZWxlY3Rpb24oKTsKLX0KLQotdm9pZCBD
b25maWdNYWluV2luZG93Ojpnb0JhY2sodm9pZCkKLXsKLQlDb25maWdJdGVtKiBpdGVtLCAqb2xk
U2VsZWN0aW9uOwotCi0JY29uZmlnTGlzdC0+c2V0UGFyZW50TWVudSgpOwotCWlmIChjb25maWdM
aXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQotCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZh
bHNlKTsKLQotCWlmIChtZW51TGlzdC0+c2VsZWN0ZWRJdGVtcygpLmNvdW50KCkgPT0gMCkKLQkJ
cmV0dXJuOwotCi0JaXRlbSA9IChDb25maWdJdGVtKiltZW51TGlzdC0+c2VsZWN0ZWRJdGVtcygp
LmZpcnN0KCk7Ci0Jb2xkU2VsZWN0aW9uID0gaXRlbTsKLQl3aGlsZSAoaXRlbSkgewotCQlpZiAo
aXRlbS0+bWVudSA9PSBjb25maWdMaXN0LT5yb290RW50cnkpIHsKLQkJCW9sZFNlbGVjdGlvbi0+
c2V0U2VsZWN0ZWQoZmFsc2UpOwotCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7Ci0JCQlicmVh
azsKLQkJfQotCQlpdGVtID0gKENvbmZpZ0l0ZW0qKWl0ZW0tPnBhcmVudCgpOwotCX0KLX0KLQot
dm9pZCBDb25maWdNYWluV2luZG93OjpzaG93U2luZ2xlVmlldyh2b2lkKQotewotCXNpbmdsZVZp
ZXdBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOwotCXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNr
ZWQodHJ1ZSk7Ci0Jc3BsaXRWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwotCXNwbGl0Vmll
d0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7Ci0JZnVsbFZpZXdBY3Rpb24tPnNldEVuYWJsZWQo
dHJ1ZSk7Ci0JZnVsbFZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOwotCi0JbWVudVZpZXct
PmhpZGUoKTsKLQltZW51TGlzdC0+c2V0Um9vdE1lbnUoMCk7Ci0JY29uZmlnTGlzdC0+bW9kZSA9
IHNpbmdsZU1vZGU7Ci0JaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpCi0J
CWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwoKTsKLQllbHNlCi0JCWNvbmZpZ0xpc3QtPnNldFJv
b3RNZW51KCZyb290bWVudSk7Ci0JY29uZmlnTGlzdC0+c2V0Rm9jdXMoKTsKLX0KLQotdm9pZCBD
b25maWdNYWluV2luZG93OjpzaG93U3BsaXRWaWV3KHZvaWQpCi17Ci0Jc2luZ2xlVmlld0FjdGlv
bi0+c2V0RW5hYmxlZCh0cnVlKTsKLQlzaW5nbGVWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNl
KTsKLQlzcGxpdFZpZXdBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOwotCXNwbGl0Vmlld0FjdGlv
bi0+c2V0Q2hlY2tlZCh0cnVlKTsKLQlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsK
LQlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7Ci0KLQljb25maWdMaXN0LT5tb2Rl
ID0gc3ltYm9sTW9kZTsKLQlpZiAoY29uZmlnTGlzdC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkK
LQkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOwotCWVsc2UKLQkJY29uZmlnTGlzdC0+c2V0
Um9vdE1lbnUoJnJvb3RtZW51KTsKLQljb25maWdMaXN0LT5zZXRBbGxPcGVuKHRydWUpOwotCWNv
bmZpZ0FwcC0+cHJvY2Vzc0V2ZW50cygpOwotCW1lbnVMaXN0LT5tb2RlID0gbWVudU1vZGU7Ci0J
bWVudUxpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7Ci0JbWVudUxpc3QtPnNldEFsbE9wZW4o
dHJ1ZSk7Ci0JbWVudVZpZXctPnNob3coKTsKLQltZW51TGlzdC0+c2V0Rm9jdXMoKTsKLX0KLQot
dm9pZCBDb25maWdNYWluV2luZG93OjpzaG93RnVsbFZpZXcodm9pZCkKLXsKLQlzaW5nbGVWaWV3
QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwotCXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQo
ZmFsc2UpOwotCXNwbGl0Vmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKLQlzcGxpdFZpZXdB
Y3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOwotCWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFibGVkKGZh
bHNlKTsKLQlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2tlZCh0cnVlKTsKLQotCW1lbnVWaWV3LT5o
aWRlKCk7Ci0JbWVudUxpc3QtPnNldFJvb3RNZW51KDApOwotCWNvbmZpZ0xpc3QtPm1vZGUgPSBm
dWxsTW9kZTsKLQlpZiAoY29uZmlnTGlzdC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkKLQkJY29u
ZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOwotCWVsc2UKLQkJY29uZmlnTGlzdC0+c2V0Um9vdE1l
bnUoJnJvb3RtZW51KTsKLQljb25maWdMaXN0LT5zZXRGb2N1cygpOwotfQotCi0vKgotICogYXNr
IGZvciBzYXZpbmcgY29uZmlndXJhdGlvbiBiZWZvcmUgcXVpdHRpbmcKLSAqIFRPRE8gYXNrIG9u
bHkgd2hlbiBzb21ldGhpbmcgY2hhbmdlZAotICovCi12b2lkIENvbmZpZ01haW5XaW5kb3c6OmNs
b3NlRXZlbnQoUUNsb3NlRXZlbnQqIGUpCi17Ci0JaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpIHsK
LQkJZS0+YWNjZXB0KCk7Ci0JCXJldHVybjsKLQl9Ci0JUU1lc3NhZ2VCb3ggbWIoInFjb25mIiwg
IlNhdmUgY29uZmlndXJhdGlvbj8iLCBRTWVzc2FnZUJveDo6V2FybmluZywKLQkJCVFNZXNzYWdl
Qm94OjpZZXMgfCBRTWVzc2FnZUJveDo6RGVmYXVsdCwgUU1lc3NhZ2VCb3g6Ok5vLCBRTWVzc2Fn
ZUJveDo6Q2FuY2VsIHwgUU1lc3NhZ2VCb3g6OkVzY2FwZSk7Ci0JbWIuc2V0QnV0dG9uVGV4dChR
TWVzc2FnZUJveDo6WWVzLCAiJlNhdmUgQ2hhbmdlcyIpOwotCW1iLnNldEJ1dHRvblRleHQoUU1l
c3NhZ2VCb3g6Ok5vLCAiJkRpc2NhcmQgQ2hhbmdlcyIpOwotCW1iLnNldEJ1dHRvblRleHQoUU1l
c3NhZ2VCb3g6OkNhbmNlbCwgIkNhbmNlbCBFeGl0Iik7Ci0Jc3dpdGNoIChtYi5leGVjKCkpIHsK
LQljYXNlIFFNZXNzYWdlQm94OjpZZXM6Ci0JCWlmIChzYXZlQ29uZmlnKCkpCi0JCQllLT5hY2Nl
cHQoKTsKLQkJZWxzZQotCQkJZS0+aWdub3JlKCk7Ci0JCWJyZWFrOwotCWNhc2UgUU1lc3NhZ2VC
b3g6Ok5vOgotCQllLT5hY2NlcHQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBRTWVzc2FnZUJveDo6Q2Fu
Y2VsOgotCQllLT5pZ25vcmUoKTsKLQkJYnJlYWs7Ci0JfQotfQotCi12b2lkIENvbmZpZ01haW5X
aW5kb3c6OnNob3dJbnRybyh2b2lkKQotewotCXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9ICJX
ZWxjb21lIHRvIHRoZSBxY29uZiBncmFwaGljYWwgY29uZmlndXJhdGlvbiB0b29sLlxuXG4iCi0J
CSJGb3IgZWFjaCBvcHRpb24sIGEgYmxhbmsgYm94IGluZGljYXRlcyB0aGUgZmVhdHVyZSBpcyBk
aXNhYmxlZCwgYSBjaGVja1xuIgotCQkiaW5kaWNhdGVzIGl0IGlzIGVuYWJsZWQsIGFuZCBhIGRv
dCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyB0byBiZSBjb21waWxlZFxuIgotCQkiYXMgYSBtb2R1bGUu
ICBDbGlja2luZyBvbiB0aGUgYm94IHdpbGwgY3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc3RhdGVz
LlxuXG4iCi0JCSJJZiB5b3UgZG8gbm90IHNlZSBhbiBvcHRpb24gKGUuZy4sIGEgZGV2aWNlIGRy
aXZlcikgdGhhdCB5b3UgYmVsaWV2ZVxuIgotCQkic2hvdWxkIGJlIHByZXNlbnQsIHRyeSB0dXJu
aW5nIG9uIFNob3cgQWxsIE9wdGlvbnMgdW5kZXIgdGhlIE9wdGlvbnMgbWVudS5cbiIKLQkJIkFs
dGhvdWdoIHRoZXJlIGlzIG5vIGNyb3NzIHJlZmVyZW5jZSB5ZXQgdG8gaGVscCB5b3UgZmlndXJl
IG91dCB3aGF0IG90aGVyXG4iCi0JCSJvcHRpb25zIG11c3QgYmUgZW5hYmxlZCB0byBzdXBwb3J0
IHRoZSBvcHRpb24geW91IGFyZSBpbnRlcmVzdGVkIGluLCB5b3UgY2FuXG4iCi0JCSJzdGlsbCB2
aWV3IHRoZSBoZWxwIG9mIGEgZ3JheWVkLW91dCBvcHRpb24uXG5cbiIKLQkJIlRvZ2dsaW5nIFNo
b3cgRGVidWcgSW5mbyB1bmRlciB0aGUgT3B0aW9ucyBtZW51IHdpbGwgc2hvdyB0aGUgZGVwZW5k
ZW5jaWVzLFxuIgotCQkid2hpY2ggeW91IGNhbiB0aGVuIG1hdGNoIGJ5IGV4YW1pbmluZyBvdGhl
ciBvcHRpb25zLlxuXG4iOwotCi0JUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29u
ZiIsIHN0cik7Ci19Ci0KLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Fib3V0KHZvaWQpCi17
Ci0Jc3RhdGljIGNvbnN0IFFTdHJpbmcgc3RyID0gInFjb25mIGlzIENvcHlyaWdodCAoQykgMjAw
MiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4uXG4iCi0JCSJDb3B5cmlnaHQg
KEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zza2kgPGJiYXJidWxvdnNraUBnbWFpbC5jb20+LlxuXG4i
Ci0JCSJCdWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0IGNhbiBhbHNvIGJlIGVudGVyZWQg
YXQgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvXG4iOwotCi0JUU1lc3NhZ2VCb3g6OmluZm9y
bWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7Ci19Ci0KLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6
c2F2ZVNldHRpbmdzKHZvaWQpCi17Ci0JY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93
IHgiLCBwb3MoKS54KCkpOwotCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5Iiwg
cG9zKCkueSgpKTsKLQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgd2lkdGgiLCBz
aXplKCkud2lkdGgoKSk7Ci0JY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IGhlaWdo
dCIsIHNpemUoKS5oZWlnaHQoKSk7Ci0KLQlRU3RyaW5nIGVudHJ5OwotCXN3aXRjaChjb25maWdM
aXN0LT5tb2RlKSB7Ci0JY2FzZSBzaW5nbGVNb2RlIDoKLQkJZW50cnkgPSAic2luZ2xlIjsKLQkJ
YnJlYWs7Ci0KLQljYXNlIHN5bWJvbE1vZGUgOgotCQllbnRyeSA9ICJzcGxpdCI7Ci0JCWJyZWFr
OwotCi0JY2FzZSBmdWxsTW9kZSA6Ci0JCWVudHJ5ID0gImZ1bGwiOwotCQlicmVhazsKLQotCWRl
ZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9saXN0TW9k
ZSIsIGVudHJ5KTsKLQotCWNvbmZpZ1NldHRpbmdzLT53cml0ZVNpemVzKCIvc3BsaXQxIiwgc3Bs
aXQxLT5zaXplcygpKTsKLQljb25maWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0MiIsIHNw
bGl0Mi0+c2l6ZXMoKSk7Ci19Ci0KLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Y29uZl9jaGFuZ2Vk
KHZvaWQpCi17Ci0JaWYgKHNhdmVBY3Rpb24pCi0JCXNhdmVBY3Rpb24tPnNldEVuYWJsZWQoY29u
Zl9nZXRfY2hhbmdlZCgpKTsKLX0KLQotdm9pZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAq
bWVudSkKLXsKLQlzdHJ1Y3QgbWVudSAqY2hpbGQ7Ci0Jc3RhdGljIGludCBtZW51X2NudCA9IDA7
Ci0KLQltZW51LT5mbGFncyB8PSBNRU5VX1JPT1Q7Ci0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7Ci0JCWlmIChjaGlsZC0+cHJvbXB0ICYmIGNo
aWxkLT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7Ci0JCQltZW51X2NudCsrOwotCQkJZml4dXBf
cm9vdG1lbnUoY2hpbGQpOwotCQkJbWVudV9jbnQtLTsKLQkJfSBlbHNlIGlmICghbWVudV9jbnQp
Ci0JCQlmaXh1cF9yb290bWVudShjaGlsZCk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3QgY2hhciAq
cHJvZ25hbWU7Ci0KLXN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCi17Ci0JcHJpbnRmKCIlcyBbLXNd
IDxjb25maWc+XG4iLCBwcm9nbmFtZSk7Ci0JZXhpdCgwKTsKLX0KLQotaW50IG1haW4oaW50IGFj
LCBjaGFyKiogYXYpCi17Ci0JQ29uZmlnTWFpbldpbmRvdyogdjsKLQljb25zdCBjaGFyICpuYW1l
OwotCi0JcHJvZ25hbWUgPSBhdlswXTsKLQljb25maWdBcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFj
LCBhdik7Ci0JaWYgKGFjID4gMSAmJiBhdlsxXVswXSA9PSAnLScpIHsKLQkJc3dpdGNoIChhdlsx
XVsxXSkgewotCQljYXNlICdzJzoKLQkJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7
Ci0JCQlicmVhazsKLQkJY2FzZSAnaCc6Ci0JCWNhc2UgJz8nOgotCQkJdXNhZ2UoKTsKLQkJfQot
CQluYW1lID0gYXZbMl07Ci0JfSBlbHNlCi0JCW5hbWUgPSBhdlsxXTsKLQlpZiAoIW5hbWUpCi0J
CXVzYWdlKCk7Ci0KLQljb25mX3BhcnNlKG5hbWUpOwotCWZpeHVwX3Jvb3RtZW51KCZyb290bWVu
dSk7Ci0JY29uZl9yZWFkKE5VTEwpOwotCS8vemNvbmZkdW1wKHN0ZG91dCk7Ci0KLQljb25maWdT
ZXR0aW5ncyA9IG5ldyBDb25maWdTZXR0aW5ncygpOwotCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdy
b3VwKCIva2NvbmZpZy9xY29uZiIpOwotCXYgPSBuZXcgQ29uZmlnTWFpbldpbmRvdygpOwotCi0J
Ly96Y29uZmR1bXAoc3Rkb3V0KTsKLQljb25maWdBcHAtPmNvbm5lY3QoY29uZmlnQXBwLCBTSUdO
QUwobGFzdFdpbmRvd0Nsb3NlZCgpKSwgU0xPVChxdWl0KCkpKTsKLQljb25maWdBcHAtPmNvbm5l
Y3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIHYsIFNMT1Qoc2F2ZVNldHRpbmdz
KCkpKTsKLQl2LT5zaG93KCk7Ci0JY29uZmlnQXBwLT5leGVjKCk7Ci0KLQljb25maWdTZXR0aW5n
cy0+ZW5kR3JvdXAoKTsKLQlkZWxldGUgY29uZmlnU2V0dGluZ3M7Ci0JZGVsZXRlIHY7Ci0JZGVs
ZXRlIGNvbmZpZ0FwcDsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9xY29uZi5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0NWJmZTliLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcWNvbmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBS
b21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KLSAqLwotCi0jaW5jbHVkZSA8UVRl
eHRCcm93c2VyPgotI2luY2x1ZGUgPFFUcmVlV2lkZ2V0PgotI2luY2x1ZGUgPFFNYWluV2luZG93
PgotI2luY2x1ZGUgPFFIZWFkZXJWaWV3PgotI2luY2x1ZGUgPHFzZXR0aW5ncy5oPgotI2luY2x1
ZGUgPFFQdXNoQnV0dG9uPgotI2luY2x1ZGUgPFFTZXR0aW5ncz4KLSNpbmNsdWRlIDxRTGluZUVk
aXQ+Ci0jaW5jbHVkZSA8UVNwbGl0dGVyPgotI2luY2x1ZGUgPFFDaGVja0JveD4KLSNpbmNsdWRl
IDxRRGlhbG9nPgotI2luY2x1ZGUgImV4cHIuaCIKLQotY2xhc3MgQ29uZmlnVmlldzsKLWNsYXNz
IENvbmZpZ0xpc3Q7Ci1jbGFzcyBDb25maWdJdGVtOwotY2xhc3MgQ29uZmlnTGluZUVkaXQ7Ci1j
bGFzcyBDb25maWdNYWluV2luZG93OwotCi1jbGFzcyBDb25maWdTZXR0aW5ncyA6IHB1YmxpYyBR
U2V0dGluZ3MgewotcHVibGljOgotCUNvbmZpZ1NldHRpbmdzKCk7Ci0JUUxpc3Q8aW50PiByZWFk
U2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBib29sICpvayk7Ci0JYm9vbCB3cml0ZVNpemVzKGNv
bnN0IFFTdHJpbmcmIGtleSwgY29uc3QgUUxpc3Q8aW50PiYgdmFsdWUpOwotfTsKLQotZW51bSBj
b2xJZHggewotCXByb21wdENvbElkeCwgbmFtZUNvbElkeCwgbm9Db2xJZHgsIG1vZENvbElkeCwg
eWVzQ29sSWR4LCBkYXRhQ29sSWR4LCBjb2xOcgotfTsKLWVudW0gbGlzdE1vZGUgewotCXNpbmds
ZU1vZGUsIG1lbnVNb2RlLCBzeW1ib2xNb2RlLCBmdWxsTW9kZSwgbGlzdE1vZGUKLX07Ci1lbnVt
IG9wdGlvbk1vZGUgewotCW5vcm1hbE9wdCA9IDAsIGFsbE9wdCwgcHJvbXB0T3B0Ci19OwotCi1j
bGFzcyBDb25maWdMaXN0IDogcHVibGljIFFUcmVlV2lkZ2V0IHsKLQlRX09CSkVDVAotCXR5cGVk
ZWYgY2xhc3MgUVRyZWVXaWRnZXQgUGFyZW50OwotcHVibGljOgotCUNvbmZpZ0xpc3QoQ29uZmln
VmlldyogcCwgY29uc3QgY2hhciAqbmFtZSA9IDApOwotCXZvaWQgcmVpbml0KHZvaWQpOwotCUNv
bmZpZ1ZpZXcqIHBhcmVudCh2b2lkKSBjb25zdAotCXsKLQkJcmV0dXJuIChDb25maWdWaWV3KilQ
YXJlbnQ6OnBhcmVudCgpOwotCX0KLQlDb25maWdJdGVtKiBmaW5kQ29uZmlnSXRlbShzdHJ1Y3Qg
bWVudSAqKTsKLQotcHJvdGVjdGVkOgotCXZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKmUp
OwotCXZvaWQgbW91c2VQcmVzc0V2ZW50KFFNb3VzZUV2ZW50ICplKTsKLQl2b2lkIG1vdXNlUmVs
ZWFzZUV2ZW50KFFNb3VzZUV2ZW50ICplKTsKLQl2b2lkIG1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2
ZW50ICplKTsKLQl2b2lkIG1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCAqZSk7Ci0J
dm9pZCBmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQgKmUpOwotCXZvaWQgY29udGV4dE1lbnVFdmVu
dChRQ29udGV4dE1lbnVFdmVudCAqZSk7Ci0KLXB1YmxpYyBzbG90czoKLQl2b2lkIHNldFJvb3RN
ZW51KHN0cnVjdCBtZW51ICptZW51KTsKLQotCXZvaWQgdXBkYXRlTGlzdChDb25maWdJdGVtICpp
dGVtKTsKLQl2b2lkIHNldFZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0sIHRyaXN0YXRlIHZhbCk7Ci0J
dm9pZCBjaGFuZ2VWYWx1ZShDb25maWdJdGVtKiBpdGVtKTsKLQl2b2lkIHVwZGF0ZVNlbGVjdGlv
bih2b2lkKTsKLQl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsKLXNpZ25hbHM6Ci0Jdm9pZCBtZW51
Q2hhbmdlZChzdHJ1Y3QgbWVudSAqbWVudSk7Ci0Jdm9pZCBtZW51U2VsZWN0ZWQoc3RydWN0IG1l
bnUgKm1lbnUpOwotCXZvaWQgcGFyZW50U2VsZWN0ZWQodm9pZCk7Ci0Jdm9pZCBnb3RGb2N1cyhz
dHJ1Y3QgbWVudSAqKTsKLQotcHVibGljOgotCXZvaWQgdXBkYXRlTGlzdEFsbCh2b2lkKQotCXsK
LQkJdXBkYXRlQWxsID0gdHJ1ZTsKLQkJdXBkYXRlTGlzdChOVUxMKTsKLQkJdXBkYXRlQWxsID0g
ZmFsc2U7Ci0JfQotCUNvbmZpZ0xpc3QqIGxpc3RWaWV3KCkKLQl7Ci0JCXJldHVybiB0aGlzOwot
CX0KLQlDb25maWdJdGVtKiBmaXJzdENoaWxkKCkgY29uc3QKLQl7Ci0JCXJldHVybiAoQ29uZmln
SXRlbSAqKWNoaWxkcmVuKCkuZmlyc3QoKTsKLQl9Ci0Jdm9pZCBhZGRDb2x1bW4oY29sSWR4IGlk
eCkKLQl7Ci0JCXNob3dDb2x1bW4oaWR4KTsKLQl9Ci0Jdm9pZCByZW1vdmVDb2x1bW4oY29sSWR4
IGlkeCkKLQl7Ci0JCWhpZGVDb2x1bW4oaWR4KTsKLQl9Ci0Jdm9pZCBzZXRBbGxPcGVuKGJvb2wg
b3Blbik7Ci0Jdm9pZCBzZXRQYXJlbnRNZW51KHZvaWQpOwotCi0JYm9vbCBtZW51U2tpcChzdHJ1
Y3QgbWVudSAqKTsKLQotCXZvaWQgdXBkYXRlTWVudUxpc3QoQ29uZmlnSXRlbSAqcGFyZW50LCBz
dHJ1Y3QgbWVudSopOwotCXZvaWQgdXBkYXRlTWVudUxpc3QoQ29uZmlnTGlzdCAqcGFyZW50LCBz
dHJ1Y3QgbWVudSopOwotCi0JYm9vbCB1cGRhdGVBbGw7Ci0KLQlRUGl4bWFwIHN5bWJvbFllc1Bp
eCwgc3ltYm9sTW9kUGl4LCBzeW1ib2xOb1BpeDsKLQlRUGl4bWFwIGNob2ljZVllc1BpeCwgY2hv
aWNlTm9QaXg7Ci0JUVBpeG1hcCBtZW51UGl4LCBtZW51SW52UGl4LCBtZW51QmFja1BpeCwgdm9p
ZFBpeDsKLQotCWJvb2wgc2hvd05hbWUsIHNob3dSYW5nZSwgc2hvd0RhdGE7Ci0JZW51bSBsaXN0
TW9kZSBtb2RlOwotCWVudW0gb3B0aW9uTW9kZSBvcHRNb2RlOwotCXN0cnVjdCBtZW51ICpyb290
RW50cnk7Ci0JUVBhbGV0dGUgZGlzYWJsZWRDb2xvckdyb3VwOwotCVFQYWxldHRlIGluYWN0aXZl
ZENvbG9yR3JvdXA7Ci0JUU1lbnUqIGhlYWRlclBvcHVwOwotfTsKLQotY2xhc3MgQ29uZmlnSXRl
bSA6IHB1YmxpYyBRVHJlZVdpZGdldEl0ZW0gewotCXR5cGVkZWYgY2xhc3MgUVRyZWVXaWRnZXRJ
dGVtIFBhcmVudDsKLXB1YmxpYzoKLQlDb25maWdJdGVtKENvbmZpZ0xpc3QgKnBhcmVudCwgQ29u
ZmlnSXRlbSAqYWZ0ZXIsIHN0cnVjdCBtZW51ICptLCBib29sIHYpCi0JOiBQYXJlbnQocGFyZW50
LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KG0pLCB2aXNpYmxlKHYpLCBnb1BhcmVudChmYWxz
ZSkKLQl7Ci0JCWluaXQoKTsKLQl9Ci0JQ29uZmlnSXRlbShDb25maWdJdGVtICpwYXJlbnQsIENv
bmZpZ0l0ZW0gKmFmdGVyLCBzdHJ1Y3QgbWVudSAqbSwgYm9vbCB2KQotCTogUGFyZW50KHBhcmVu
dCwgYWZ0ZXIpLCBuZXh0SXRlbSgwKSwgbWVudShtKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQoZmFs
c2UpCi0JewotCQlpbml0KCk7Ci0JfQotCUNvbmZpZ0l0ZW0oQ29uZmlnTGlzdCAqcGFyZW50LCBD
b25maWdJdGVtICphZnRlciwgYm9vbCB2KQotCTogUGFyZW50KHBhcmVudCwgYWZ0ZXIpLCBuZXh0
SXRlbSgwKSwgbWVudSgwKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQodHJ1ZSkKLQl7Ci0JCWluaXQo
KTsKLQl9Ci0JfkNvbmZpZ0l0ZW0odm9pZCk7Ci0Jdm9pZCBpbml0KHZvaWQpOwotCXZvaWQgb2tS
ZW5hbWUoaW50IGNvbCk7Ci0Jdm9pZCB1cGRhdGVNZW51KHZvaWQpOwotCXZvaWQgdGVzdFVwZGF0
ZU1lbnUoYm9vbCB2KTsKLQlDb25maWdMaXN0KiBsaXN0VmlldygpIGNvbnN0Ci0JewotCQlyZXR1
cm4gKENvbmZpZ0xpc3QqKVBhcmVudDo6dHJlZVdpZGdldCgpOwotCX0KLQlDb25maWdJdGVtKiBm
aXJzdENoaWxkKCkgY29uc3QKLQl7Ci0JCXJldHVybiAoQ29uZmlnSXRlbSAqKVBhcmVudDo6Y2hp
bGQoMCk7Ci0JfQotCUNvbmZpZ0l0ZW0qIG5leHRTaWJsaW5nKCkKLQl7Ci0JCUNvbmZpZ0l0ZW0g
KnJldCA9IE5VTEw7Ci0JCUNvbmZpZ0l0ZW0gKl9wYXJlbnQgPSAoQ29uZmlnSXRlbSAqKXBhcmVu
dCgpOwotCi0JCWlmKF9wYXJlbnQpIHsKLQkJCXJldCA9IChDb25maWdJdGVtICopX3BhcmVudC0+
Y2hpbGQoX3BhcmVudC0+aW5kZXhPZkNoaWxkKHRoaXMpKzEpOwotCQl9IGVsc2UgewotCQkJUVRy
ZWVXaWRnZXQgKl90cmVlV2lkZ2V0ID0gdHJlZVdpZGdldCgpOwotCQkJcmV0ID0gKENvbmZpZ0l0
ZW0gKilfdHJlZVdpZGdldC0+dG9wTGV2ZWxJdGVtKF90cmVlV2lkZ2V0LT5pbmRleE9mVG9wTGV2
ZWxJdGVtKHRoaXMpKzEpOwotCQl9Ci0KLQkJcmV0dXJuIHJldDsKLQl9Ci0Jdm9pZCBzZXRUZXh0
KGNvbElkeCBpZHgsIGNvbnN0IFFTdHJpbmcmIHRleHQpCi0JewotCQlQYXJlbnQ6OnNldFRleHQo
aWR4LCB0ZXh0KTsKLQl9Ci0JUVN0cmluZyB0ZXh0KGNvbElkeCBpZHgpIGNvbnN0Ci0JewotCQly
ZXR1cm4gUGFyZW50Ojp0ZXh0KGlkeCk7Ci0JfQotCXZvaWQgc2V0UGl4bWFwKGNvbElkeCBpZHgs
IGNvbnN0IFFJY29uICZpY29uKQotCXsKLQkJUGFyZW50OjpzZXRJY29uKGlkeCwgaWNvbik7Ci0J
fQotCWNvbnN0IFFJY29uIHBpeG1hcChjb2xJZHggaWR4KSBjb25zdAotCXsKLQkJcmV0dXJuIGlj
b24oaWR4KTsKLQl9Ci0JLy8gVE9ETzogSW1wbGVtZW50IHBhaW50Q2VsbAotCi0JQ29uZmlnSXRl
bSogbmV4dEl0ZW07Ci0Jc3RydWN0IG1lbnUgKm1lbnU7Ci0JYm9vbCB2aXNpYmxlOwotCWJvb2wg
Z29QYXJlbnQ7Ci19OwotCi1jbGFzcyBDb25maWdMaW5lRWRpdCA6IHB1YmxpYyBRTGluZUVkaXQg
ewotCVFfT0JKRUNUCi0JdHlwZWRlZiBjbGFzcyBRTGluZUVkaXQgUGFyZW50OwotcHVibGljOgot
CUNvbmZpZ0xpbmVFZGl0KENvbmZpZ1ZpZXcqIHBhcmVudCk7Ci0JQ29uZmlnVmlldyogcGFyZW50
KHZvaWQpIGNvbnN0Ci0JewotCQlyZXR1cm4gKENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50KCk7
Ci0JfQotCXZvaWQgc2hvdyhDb25maWdJdGVtICppKTsKLQl2b2lkIGtleVByZXNzRXZlbnQoUUtl
eUV2ZW50ICplKTsKLQotcHVibGljOgotCUNvbmZpZ0l0ZW0gKml0ZW07Ci19OwotCi1jbGFzcyBD
b25maWdWaWV3IDogcHVibGljIFFXaWRnZXQgewotCVFfT0JKRUNUCi0JdHlwZWRlZiBjbGFzcyBR
V2lkZ2V0IFBhcmVudDsKLXB1YmxpYzoKLQlDb25maWdWaWV3KFFXaWRnZXQqIHBhcmVudCwgY29u
c3QgY2hhciAqbmFtZSA9IDApOwotCX5Db25maWdWaWV3KHZvaWQpOwotCXN0YXRpYyB2b2lkIHVw
ZGF0ZUxpc3QoQ29uZmlnSXRlbSogaXRlbSk7Ci0Jc3RhdGljIHZvaWQgdXBkYXRlTGlzdEFsbCh2
b2lkKTsKLQotCWJvb2wgc2hvd05hbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbGlzdC0+c2hvd05h
bWU7IH0KLQlib29sIHNob3dSYW5nZSh2b2lkKSBjb25zdCB7IHJldHVybiBsaXN0LT5zaG93UmFu
Z2U7IH0KLQlib29sIHNob3dEYXRhKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGxpc3QtPnNob3dEYXRh
OyB9Ci1wdWJsaWMgc2xvdHM6Ci0Jdm9pZCBzZXRTaG93TmFtZShib29sKTsKLQl2b2lkIHNldFNo
b3dSYW5nZShib29sKTsKLQl2b2lkIHNldFNob3dEYXRhKGJvb2wpOwotCXZvaWQgc2V0T3B0aW9u
TW9kZShRQWN0aW9uICopOwotc2lnbmFsczoKLQl2b2lkIHNob3dOYW1lQ2hhbmdlZChib29sKTsK
LQl2b2lkIHNob3dSYW5nZUNoYW5nZWQoYm9vbCk7Ci0Jdm9pZCBzaG93RGF0YUNoYW5nZWQoYm9v
bCk7Ci1wdWJsaWM6Ci0JQ29uZmlnTGlzdCogbGlzdDsKLQlDb25maWdMaW5lRWRpdCogbGluZUVk
aXQ7Ci0KLQlzdGF0aWMgQ29uZmlnVmlldyogdmlld0xpc3Q7Ci0JQ29uZmlnVmlldyogbmV4dFZp
ZXc7Ci0KLQlzdGF0aWMgUUFjdGlvbiAqc2hvd05vcm1hbEFjdGlvbjsKLQlzdGF0aWMgUUFjdGlv
biAqc2hvd0FsbEFjdGlvbjsKLQlzdGF0aWMgUUFjdGlvbiAqc2hvd1Byb21wdEFjdGlvbjsKLX07
Ci0KLWNsYXNzIENvbmZpZ0luZm9WaWV3IDogcHVibGljIFFUZXh0QnJvd3NlciB7Ci0JUV9PQkpF
Q1QKLQl0eXBlZGVmIGNsYXNzIFFUZXh0QnJvd3NlciBQYXJlbnQ7Ci1wdWJsaWM6Ci0JQ29uZmln
SW5mb1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCk7Ci0JYm9vbCBz
aG93RGVidWcodm9pZCkgY29uc3QgeyByZXR1cm4gX3Nob3dEZWJ1ZzsgfQotCi1wdWJsaWMgc2xv
dHM6Ci0Jdm9pZCBzZXRJbmZvKHN0cnVjdCBtZW51ICptZW51KTsKLQl2b2lkIHNhdmVTZXR0aW5n
cyh2b2lkKTsKLQl2b2lkIHNldFNob3dEZWJ1Zyhib29sKTsKLQotc2lnbmFsczoKLQl2b2lkIHNo
b3dEZWJ1Z0NoYW5nZWQoYm9vbCk7Ci0Jdm9pZCBtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKik7
Ci0KLXByb3RlY3RlZDoKLQl2b2lkIHN5bWJvbEluZm8odm9pZCk7Ci0Jdm9pZCBtZW51SW5mbyh2
b2lkKTsKLQlRU3RyaW5nIGRlYnVnX2luZm8oc3RydWN0IHN5bWJvbCAqc3ltKTsKLQlzdGF0aWMg
UVN0cmluZyBwcmludF9maWx0ZXIoY29uc3QgUVN0cmluZyAmc3RyKTsKLQlzdGF0aWMgdm9pZCBl
eHByX3ByaW50X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFy
ICpzdHIpOwotCVFNZW51ICpjcmVhdGVTdGFuZGFyZENvbnRleHRNZW51KGNvbnN0IFFQb2ludCAm
IHBvcyk7Ci0Jdm9pZCBjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKTsKLQot
CXN0cnVjdCBzeW1ib2wgKnN5bTsKLQlzdHJ1Y3QgbWVudSAqX21lbnU7Ci0JYm9vbCBfc2hvd0Rl
YnVnOwotfTsKLQotY2xhc3MgQ29uZmlnU2VhcmNoV2luZG93IDogcHVibGljIFFEaWFsb2cgewot
CVFfT0JKRUNUCi0JdHlwZWRlZiBjbGFzcyBRRGlhbG9nIFBhcmVudDsKLXB1YmxpYzoKLQlDb25m
aWdTZWFyY2hXaW5kb3coQ29uZmlnTWFpbldpbmRvdyogcGFyZW50LCBjb25zdCBjaGFyICpuYW1l
ID0gMCk7Ci0KLXB1YmxpYyBzbG90czoKLQl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsKLQl2b2lk
IHNlYXJjaCh2b2lkKTsKLQotcHJvdGVjdGVkOgotCVFMaW5lRWRpdCogZWRpdEZpZWxkOwotCVFQ
dXNoQnV0dG9uKiBzZWFyY2hCdXR0b247Ci0JUVNwbGl0dGVyKiBzcGxpdDsKLQlDb25maWdWaWV3
KiBsaXN0OwotCUNvbmZpZ0luZm9WaWV3KiBpbmZvOwotCi0Jc3RydWN0IHN5bWJvbCAqKnJlc3Vs
dDsKLX07Ci0KLWNsYXNzIENvbmZpZ01haW5XaW5kb3cgOiBwdWJsaWMgUU1haW5XaW5kb3cgewot
CVFfT0JKRUNUCi0KLQljaGFyICpjb25maWduYW1lOwotCXN0YXRpYyBRQWN0aW9uICpzYXZlQWN0
aW9uOwotCXN0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKTsKLXB1YmxpYzoKLQlDb25maWdN
YWluV2luZG93KHZvaWQpOwotcHVibGljIHNsb3RzOgotCXZvaWQgY2hhbmdlTWVudShzdHJ1Y3Qg
bWVudSAqKTsKLQl2b2lkIHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICopOwotCXZvaWQgbGlzdEZv
Y3VzQ2hhbmdlZCh2b2lkKTsKLQl2b2lkIGdvQmFjayh2b2lkKTsKLQl2b2lkIGxvYWRDb25maWco
dm9pZCk7Ci0JYm9vbCBzYXZlQ29uZmlnKHZvaWQpOwotCXZvaWQgc2F2ZUNvbmZpZ0FzKHZvaWQp
OwotCXZvaWQgc2VhcmNoQ29uZmlnKHZvaWQpOwotCXZvaWQgc2hvd1NpbmdsZVZpZXcodm9pZCk7
Ci0Jdm9pZCBzaG93U3BsaXRWaWV3KHZvaWQpOwotCXZvaWQgc2hvd0Z1bGxWaWV3KHZvaWQpOwot
CXZvaWQgc2hvd0ludHJvKHZvaWQpOwotCXZvaWQgc2hvd0Fib3V0KHZvaWQpOwotCXZvaWQgc2F2
ZVNldHRpbmdzKHZvaWQpOwotCi1wcm90ZWN0ZWQ6Ci0Jdm9pZCBjbG9zZUV2ZW50KFFDbG9zZUV2
ZW50ICplKTsKLQotCUNvbmZpZ1NlYXJjaFdpbmRvdyAqc2VhcmNoV2luZG93OwotCUNvbmZpZ1Zp
ZXcgKm1lbnVWaWV3OwotCUNvbmZpZ0xpc3QgKm1lbnVMaXN0OwotCUNvbmZpZ1ZpZXcgKmNvbmZp
Z1ZpZXc7Ci0JQ29uZmlnTGlzdCAqY29uZmlnTGlzdDsKLQlDb25maWdJbmZvVmlldyAqaGVscFRl
eHQ7Ci0JUVRvb2xCYXIgKnRvb2xCYXI7Ci0JUUFjdGlvbiAqYmFja0FjdGlvbjsKLQlRQWN0aW9u
ICpzaW5nbGVWaWV3QWN0aW9uOwotCVFBY3Rpb24gKnNwbGl0Vmlld0FjdGlvbjsKLQlRQWN0aW9u
ICpmdWxsVmlld0FjdGlvbjsKLQlRU3BsaXR0ZXIgKnNwbGl0MTsKLQlRU3BsaXR0ZXIgKnNwbGl0
MjsKLX07CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3N0cmVhbWxpbmVfY29uZmln
LnBsIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9zdHJlYW1saW5lX2NvbmZpZy5wbApkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggMDhkNzZkNy4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L3N0cmVhbWxpbmVfY29uZmlnLnBsCisrKyAvZGV2L251bGwKQEAgLTEsNjgyICswLDAg
QEAKLSMhL3Vzci9iaW4vZW52IHBlcmwKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjAKLSMKLSMgQ29weXJpZ2h0IDIwMDUtMjAwOSAtIFN0ZXZlbiBSb3N0ZWR0Ci0jCi0jICBJdCdz
IHNpbXBsZSBlbm91Z2ggdG8gZmlndXJlIG91dCBob3cgdGhpcyB3b3Jrcy4KLSMgIElmIG5vdCwg
dGhlbiB5b3UgY2FuIGFzayBtZSBhdCBzdHJpcGNvbmZpZ0Bnb29kbWlzLm9yZwotIwotIyBXaGF0
IGl0IGRvZXM/Ci0jCi0jICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIGEgTGludXgga2VybmVsIGZy
b20gYSBkaXN0cmlidXRpb24KLSMgICB0aGF0IHR1cm5zIG9uIHdheSB0b28gbWFueSBtb2R1bGVz
IHRoYW4geW91IG5lZWQsIGFuZAotIyAgIHlvdSBvbmx5IHdhbnQgdGhlIG1vZHVsZXMgeW91IHVz
ZSwgdGhlbiB0aGlzIHByb2dyYW0KLSMgICBpcyBwZXJmZWN0IGZvciB5b3UuCi0jCi0jICAgSXQg
Z2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvIHR1cm4gb2ZmIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFy
ZQotIyAgIG5vdCBsb2FkZWQgb24geW91ciBzeXN0ZW0uCi0jCi0jIEhvd3RvOgotIwotIyAgMS4g
Qm9vdCB1cCB0aGUga2VybmVsIHRoYXQgeW91IHdhbnQgdG8gc3RyZWFtIGxpbmUgdGhlIGNvbmZp
ZyBvbi4KLSMgIDIuIENoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIGRpcmVjdG9yeSBob2xkaW5nIHRo
ZSBzb3VyY2Ugb2YgdGhlCi0jICAgICAgIGtlcm5lbCB0aGF0IHlvdSBqdXN0IGJvb3RlZC4KLSMg
IDMuIENvcHkgdGhlIGNvbmZpZ3VyYXRvbiBmaWxlIHRvIHRoaXMgZGlyZWN0b3J5IGFzIC5jb25m
aWcKLSMgIDQuIEhhdmUgYWxsIHlvdXIgZGV2aWNlcyB0aGF0IHlvdSBuZWVkIG1vZHVsZXMgZm9y
IGNvbm5lY3RlZCBhbmQKLSMgICAgICBvcGVyYXRpb25hbCAobWFrZSBzdXJlIHRoYXQgdGhlaXIg
Y29ycmVzcG9uZGluZyBtb2R1bGVzIGFyZSBsb2FkZWQpCi0jICA1LiBSdW4gdGhpcyBzY3JpcHQg
cmVkaXJlY3RpbmcgdGhlIG91dHB1dCB0byBzb21lIG90aGVyIGZpbGUKLSMgICAgICAgbGlrZSBj
b25maWdfc3RyaXAuCi0jICA2LiBCYWNrIHVwIHlvdXIgb2xkIGNvbmZpZyAoaWYgeW91IHdhbnQg
dG9vKS4KLSMgIDcuIGNvcHkgdGhlIGNvbmZpZ19zdHJpcCBmaWxlIHRvIC5jb25maWcKLSMgIDgu
IFJ1biAibWFrZSBvbGRjb25maWciCi0jCi0jICBOb3cgeW91ciBrZXJuZWwgaXMgcmVhZHkgdG8g
YmUgYnVpbHQgd2l0aCBvbmx5IHRoZSBtb2R1bGVzIHRoYXQKLSMgIGFyZSBsb2FkZWQuCi0jCi0j
IEhlcmUncyB3aGF0IEkgZGlkIHdpdGggbXkgRGViaWFuIGRpc3RyaWJ1dGlvbi4KLSMKLSMgICAg
Y2QgL3Vzci9zcmMvbGludXgtMi42LjEwCi0jICAgIGNwIC9ib290L2NvbmZpZy0yLjYuMTAtMS02
ODYtc21wIC5jb25maWcKLSMgICAgfi9iaW4vc3RyZWFtbGluZV9jb25maWcgPiBjb25maWdfc3Ry
aXAKLSMgICAgbXYgLmNvbmZpZyBjb25maWdfc2F2Ci0jICAgIG12IGNvbmZpZ19zdHJpcCAuY29u
ZmlnCi0jICAgIG1ha2Ugb2xkY29uZmlnCi0jCi11c2Ugd2FybmluZ3M7Ci11c2Ugc3RyaWN0Owot
dXNlIEdldG9wdDo6TG9uZzsKLQotIyBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExPQ0FM
TU9EQ09ORklHX0RFQlVHIHRvIGdldAotIyBkZWJ1ZyBvdXRwdXQuCi1teSAkZGVidWdwcmludCA9
IDA7Ci0kZGVidWdwcmludCA9IDEgaWYgKGRlZmluZWQoJEVOVntMT0NBTE1PRENPTkZJR19ERUJV
R30pKTsKLQotc3ViIGRwcmludCB7Ci0gICAgcmV0dXJuIGlmICghJGRlYnVncHJpbnQpOwotICAg
IHByaW50IFNUREVSUiBAXzsKLX0KLQotbXkgJGNvbmZpZyA9ICIuY29uZmlnIjsKLQotbXkgJHVu
YW1lID0gYHVuYW1lIC1yYDsKLWNob21wICR1bmFtZTsKLQotbXkgQHNlYXJjaGNvbmZpZ3MgPSAo
Ci0JewotCSAgICAiZmlsZSIgPT4gIi5jb25maWciLAotCSAgICAiZXhlYyIgPT4gImNhdCIsCi0J
fSwKLQl7Ci0JICAgICJmaWxlIiA9PiAiL3Byb2MvY29uZmlnLmd6IiwKLQkgICAgImV4ZWMiID0+
ICJ6Y2F0IiwKLQl9LAotCXsKLQkgICAgImZpbGUiID0+ICIvYm9vdC9jb25maWctJHVuYW1lIiwK
LQkgICAgImV4ZWMiID0+ICJjYXQiLAotCX0sCi0JewotCSAgICAiZmlsZSIgPT4gIi9ib290L3Zt
bGludXotJHVuYW1lIiwKLQkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWci
LAotCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCi0JfSwKLQl7Ci0J
ICAgICJmaWxlIiA9PiAidm1saW51eCIsCi0JICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0
LWlrY29uZmlnIiwKLQkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAot
CX0sCi0JewotCSAgICAiZmlsZSIgPT4gIi9saWIvbW9kdWxlcy8kdW5hbWUva2VybmVsL2tlcm5l
bC9jb25maWdzLmtvIiwKLQkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWci
LAotCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCi0JfSwKLQl7Ci0J
ICAgICJmaWxlIiA9PiAia2VybmVsL2NvbmZpZ3Mua28iLAotCSAgICAiZXhlYyIgPT4gInNjcmlw
dHMvZXh0cmFjdC1pa2NvbmZpZyIsCi0JICAgICJ0ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlr
Y29uZmlnIiwKLQl9LAotCXsKLQkgICAgImZpbGUiID0+ICJrZXJuZWwvY29uZmlncy5vIiwKLQkg
ICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAotCSAgICAidGVzdCIgPT4g
InNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCi0JfSwKLSk7Ci0KLXN1YiByZWFkX2NvbmZpZyB7
Ci0gICAgZm9yZWFjaCBteSAkY29uZiAoQHNlYXJjaGNvbmZpZ3MpIHsKLQlteSAkZmlsZSA9ICRj
b25mLT57ImZpbGUifTsKLQotCW5leHQgaWYgKCAhIC1mICIkZmlsZSIpOwotCi0JaWYgKGRlZmlu
ZWQoJGNvbmYtPnsidGVzdCJ9KSkgewotCSAgICBgJGNvbmYtPnsidGVzdCJ9ICRjb25mLT57ImZp
bGUifSAyPi9kZXYvbnVsbGA7Ci0JICAgIG5leHQgaWYgKCQ/KTsKLQl9Ci0KLQlteSAkZXhlYyA9
ICRjb25mLT57ImV4ZWMifTsKLQotCXByaW50IFNUREVSUiAidXNpbmcgY29uZmlnOiAnJGZpbGUn
XG4iOwotCi0Jb3BlbihteSAkaW5maWxlLCAnLXwnLCAiJGV4ZWMgJGZpbGUiKSB8fCBkaWUgIkZh
aWxlZCB0byBydW4gJGV4ZWMgJGZpbGUiOwotCW15IEB4ID0gPCRpbmZpbGU+OwotCWNsb3NlICRp
bmZpbGU7Ci0JcmV0dXJuIEB4OwotICAgIH0KLSAgICBkaWUgIk5vIGNvbmZpZyBmaWxlIGZvdW5k
IjsKLX0KLQotbXkgQGNvbmZpZ19maWxlID0gcmVhZF9jb25maWc7Ci0KLSMgUGFyc2Ugb3B0aW9u
cwotbXkgJGxvY2FsbW9kY29uZmlnID0gMDsKLW15ICRsb2NhbHllc2NvbmZpZyA9IDA7Ci0KLUdl
dE9wdGlvbnMoImxvY2FsbW9kY29uZmlnIiA9PiBcJGxvY2FsbW9kY29uZmlnLAotCSAgICJsb2Nh
bHllc2NvbmZpZyIgPT4gXCRsb2NhbHllc2NvbmZpZyk7Ci0KLSMgR2V0IHRoZSBidWlsZCBzb3Vy
Y2UgYW5kIHRvcCBsZXZlbCBLY29uZmlnIGZpbGUgKHBhc3NlZCBpbikKLW15ICRrc291cmNlID0g
KCRBUkdWWzBdID8gJEFSR1ZbMF0gOiAnLicpOwotbXkgJGtjb25maWcgPSAkQVJHVlsxXTsKLW15
ICRsc21vZF9maWxlID0gJEVOVnsnTFNNT0QnfTsKLQotbXkgQG1ha2VmaWxlcyA9IGBmaW5kICRr
c291cmNlIC1uYW1lIE1ha2VmaWxlIC1vciAtbmFtZSBLYnVpbGQgMj4vZGV2L251bGxgOwotY2hv
bXAgQG1ha2VmaWxlczsKLQotbXkgJWRlcGVuZHM7Ci1teSAlc2VsZWN0czsKLW15ICVwcm9tcHRz
OwotbXkgJW9iamVjdHM7Ci1teSAkdmFyOwotbXkgJGlmbGV2ZWwgPSAwOwotbXkgQGlmZGVwczsK
LQotIyBwcmV2ZW50IHJlY3Vyc2lvbgotbXkgJXJlYWRfa2NvbmZpZ3M7Ci0KLXN1YiByZWFkX2tj
b25maWcgewotICAgIG15ICgka2NvbmZpZykgPSBAXzsKLQotICAgIG15ICRzdGF0ZSA9ICJOT05F
IjsKLSAgICBteSAkY29uZmlnOwotCi0gICAgbXkgJGNvbnQgPSAwOwotICAgIG15ICRsaW5lOwot
Ci0gICAgbXkgJHNvdXJjZSA9ICIka3NvdXJjZS8ka2NvbmZpZyI7Ci0gICAgbXkgJGxhc3Rfc291
cmNlID0gIiI7Ci0KLSAgICAjIENoZWNrIGZvciBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVz
ZWQKLSAgICB3aGlsZSAoJHNvdXJjZSA9fiAvXCRcKChcdyspXCkvICYmICRsYXN0X3NvdXJjZSBu
ZSAkc291cmNlKSB7Ci0JbXkgJGVudiA9ICQxOwotCSRsYXN0X3NvdXJjZSA9ICRzb3VyY2U7Ci0J
JHNvdXJjZSA9fiBzL1wkXCgkZW52XCkvJEVOVnskZW52fS87Ci0gICAgfQotCi0gICAgb3Blbiht
eSAka2luZmlsZSwgJzwnLCAkc291cmNlKSB8fCBkaWUgIkNhbid0IG9wZW4gJGtjb25maWciOwot
ICAgIHdoaWxlICg8JGtpbmZpbGU+KSB7Ci0JY2hvbXA7Ci0KLQkjIE1ha2Ugc3VyZSB0aGF0IGxp
bmVzIGVuZGluZyB3aXRoIFwgY29udGludWUKLQlpZiAoJGNvbnQpIHsKLQkgICAgJF8gPSAkbGlu
ZSAuICIgIiAuICRfOwotCX0KLQotCWlmIChzL1xcJC8vKSB7Ci0JICAgICRjb250ID0gMTsKLQkg
ICAgJGxpbmUgPSAkXzsKLQkgICAgbmV4dDsKLQl9Ci0KLQkkY29udCA9IDA7Ci0KLQkjIGNvbGxl
Y3QgYW55IEtjb25maWcgc291cmNlcwotCWlmICgvXnNvdXJjZVxzKyI/KFteIl0rKS8pIHsKLQkg
ICAgbXkgJGtjb25maWcgPSAkMTsKLQkgICAgIyBwcmV2ZW50IHJlYWRpbmcgdHdpY2UuCi0JICAg
IGlmICghZGVmaW5lZCgkcmVhZF9rY29uZmlnc3ska2NvbmZpZ30pKSB7Ci0JCSRyZWFkX2tjb25m
aWdzeyRrY29uZmlnfSA9IDE7Ci0JCXJlYWRfa2NvbmZpZygka2NvbmZpZyk7Ci0JICAgIH0KLQkg
ICAgbmV4dDsKLQl9Ci0KLQkjIGNvbmZpZ3MgZm91bmQKLQlpZiAoL15ccyoobWVudSk/Y29uZmln
XHMrKFxTKylccyokLykgewotCSAgICAkc3RhdGUgPSAiTkVXIjsKLQkgICAgJGNvbmZpZyA9ICQy
OwotCi0JICAgICMgQWRkIGRlcGVuZHMgZm9yICdpZicgbmVzdGluZwotCSAgICBmb3IgKG15ICRp
ID0gMDsgJGkgPCAkaWZsZXZlbDsgJGkrKykgewotCQlpZiAoJGkpIHsKLQkJICAgICRkZXBlbmRz
eyRjb25maWd9IC49ICIgIiAuICRpZmRlcHNbJGldOwotCQl9IGVsc2UgewotCQkgICAgJGRlcGVu
ZHN7JGNvbmZpZ30gPSAkaWZkZXBzWyRpXTsKLQkJfQotCQkkc3RhdGUgPSAiREVQIjsKLQkgICAg
fQotCi0JIyBjb2xsZWN0IHRoZSBkZXBlbmRzIGZvciB0aGUgY29uZmlnCi0JfSBlbHNpZiAoJHN0
YXRlIGVxICJORVciICYmIC9eXHMqZGVwZW5kc1xzK29uXHMrKC4qKSQvKSB7Ci0JICAgICRzdGF0
ZSA9ICJERVAiOwotCSAgICAkZGVwZW5kc3skY29uZmlnfSA9ICQxOwotCX0gZWxzaWYgKCRzdGF0
ZSBlcSAiREVQIiAmJiAvXlxzKmRlcGVuZHNccytvblxzKyguKikkLykgewotCSAgICAkZGVwZW5k
c3skY29uZmlnfSAuPSAiICIgLiAkMTsKLQl9IGVsc2lmICgkc3RhdGUgZXEgIkRFUCIgJiYgL15c
cypkZWYoXyhib29sfHRyaXN0YXRlKXxhdWx0KVxzKyhcUy4qKSQvKSB7Ci0JICAgIG15ICRkZXAg
PSAkMzsKLQkgICAgaWYgKCRkZXAgIX4gL15ccyooeXxtfG4pXHMqJC8pIHsKLQkJJGRlcCA9fiBz
Ly4qXHNpZlxzKy8vOwotCQkkZGVwZW5kc3skY29uZmlnfSAuPSAiICIgLiAkZGVwOwotCQlkcHJp
bnQgIkFkZGVkIGRlZmF1bHQgZGVwZW5kcyAkZGVwIHRvICRjb25maWdcbiI7Ci0JICAgIH0KLQot
CSMgR2V0IHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IHRoaXMgY29uZmlnCi0JfSBlbHNpZiAoJHN0
YXRlIG5lICJOT05FIiAmJiAvXlxzKnNlbGVjdFxzKyhcUyspLykgewotCSAgICBteSAkY29uZiA9
ICQxOwotCSAgICBpZiAoZGVmaW5lZCgkc2VsZWN0c3skY29uZn0pKSB7Ci0JCSRzZWxlY3RzeyRj
b25mfSAuPSAiICIgLiAkY29uZmlnOwotCSAgICB9IGVsc2UgewotCQkkc2VsZWN0c3skY29uZn0g
PSAkY29uZmlnOwotCSAgICB9Ci0KLQkjIGNvbmZpZ3Mgd2l0aG91dCBwcm9tcHRzIG11c3QgYmUg
c2VsZWN0ZWQKLQl9IGVsc2lmICgkc3RhdGUgbmUgIk5PTkUiICYmIC9eXHMqKHRyaXN0YXRlXHMr
XFN8cHJvbXB0XGIpLykgewotCSAgICAjIG5vdGUgaWYgdGhlIGNvbmZpZyBoYXMgYSBwcm9tcHQK
LQkgICAgJHByb21wdHN7JGNvbmZpZ30gPSAxOwotCi0JIyBDaGVjayBmb3IgaWYgc3RhdGVtZW50
cwotCX0gZWxzaWYgKC9eaWZccysoLipcUylccyokLykgewotCSAgICBteSAkZGVwcyA9ICQxOwot
CSAgICAjIHJlbW92ZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBub24gdGV4dAotCSAgICAkZGVwcyA9
fiBzL15bXmEtekEtWjAtOV9dKi8vOwotCSAgICAkZGVwcyA9fiBzL1teYS16QS1aMC05X10qJC8v
OwotCi0JICAgIG15IEBkZXBzID0gc3BsaXQgL1teYS16QS1aMC05X10rLywgJGRlcHM7Ci0KLQkg
ICAgJGlmZGVwc1skaWZsZXZlbCsrXSA9IGpvaW4gJzonLCBAZGVwczsKLQotCX0gZWxzaWYgKC9e
ZW5kaWYvKSB7Ci0KLQkgICAgJGlmbGV2ZWwtLSBpZiAoJGlmbGV2ZWwpOwotCi0JIyBzdG9wIG9u
ICJoZWxwIiBhbmQga2V5d29yZHMgdGhhdCBlbmQgYSBtZW51IGVudHJ5Ci0JfSBlbHNpZiAoL15c
cyooLS0tKT9oZWxwKC0tLSk/XHMqJC8gfHwgL14oY29tbWVudHxjaG9pY2V8bWVudSlcYi8pIHsK
LQkgICAgJHN0YXRlID0gIk5PTkUiOwotCX0KLSAgICB9Ci0gICAgY2xvc2UoJGtpbmZpbGUpOwot
fQotCi1pZiAoJGtjb25maWcpIHsKLSAgICByZWFkX2tjb25maWcoJGtjb25maWcpOwotfQotCi0j
IE1ha2VmaWxlcyBjYW4gdXNlIHZhcmlhYmxlcyB0byBkZWZpbmUgdGhlaXIgZGVwZW5kZW5jaWVz
Ci1zdWIgY29udmVydF92YXJzIHsKLSAgICBteSAoJGxpbmUsICV2YXJzKSA9IEBfOwotCi0gICAg
bXkgJHByb2Nlc3MgPSAiIjsKLQotICAgIHdoaWxlICgkbGluZSA9fiBzL14oLio/KShcJFwoKC4q
PylcKSkvLykgewotCW15ICRzdGFydCA9ICQxOwotCW15ICR2YXJpYWJsZSA9ICQyOwotCW15ICR2
YXIgPSAkMzsKLQotCWlmIChkZWZpbmVkKCR2YXJzeyR2YXJ9KSkgewotCSAgICAkcHJvY2VzcyAu
PSAkc3RhcnQgLiAkdmFyc3skdmFyfTsKLQl9IGVsc2UgewotCSAgICAkcHJvY2VzcyAuPSAkc3Rh
cnQgLiAkdmFyaWFibGU7Ci0JfQotICAgIH0KLQotICAgICRwcm9jZXNzIC49ICRsaW5lOwotCi0g
ICAgcmV0dXJuICRwcm9jZXNzOwotfQotCi0jIFJlYWQgYWxsIE1ha2VmaWxlcyB0byBtYXAgdGhl
IGNvbmZpZ3MgdG8gdGhlIG9iamVjdHMKLWZvcmVhY2ggbXkgJG1ha2VmaWxlIChAbWFrZWZpbGVz
KSB7Ci0KLSAgICBteSAkbGluZSA9ICIiOwotICAgIG15ICVtYWtlX3ZhcnM7Ci0KLSAgICBvcGVu
KG15ICRpbmZpbGUsICc8JywgJG1ha2VmaWxlKSB8fCBkaWUgIkNhbid0IG9wZW4gJG1ha2VmaWxl
IjsKLSAgICB3aGlsZSAoPCRpbmZpbGU+KSB7Ci0JIyBpZiB0aGlzIGxpbmUgZW5kcyB3aXRoIGEg
YmFja3NsYXNoLCBjb250aW51ZQotCWNob21wOwotCWlmICgvXiguKilcXCQvKSB7Ci0JICAgICRs
aW5lIC49ICQxOwotCSAgICBuZXh0OwotCX0KLQotCSRsaW5lIC49ICRfOwotCSRfID0gJGxpbmU7
Ci0JJGxpbmUgPSAiIjsKLQotCW15ICRvYmpzOwotCi0JIyBDb252ZXJ0IHZhcmlhYmxlcyBpbiBh
IGxpbmUgKGNvdWxkIGRlZmluZSBjb25maWdzKQotCSRfID0gY29udmVydF92YXJzKCRfLCAlbWFr
ZV92YXJzKTsKLQotCSMgY29sbGVjdCBvYmplY3RzIGFmdGVyIG9iai0kKENPTkZJR19GT09fQkFS
KQotCWlmICgvb2JqLVwkXCgoQ09ORklHX1teXCldKilcKVxzKlsrOl0/PVxzKiguKikvKSB7Ci0J
ICAgICR2YXIgPSAkMTsKLQkgICAgJG9ianMgPSAkMjsKLQotCSMgY2hlY2sgaWYgdmFyaWFibGVz
IGFyZSBzZXQKLQl9IGVsc2lmICgvXlxzKihcUyspXHMqWzpdPz1ccyooLipcUykvKSB7Ci0JICAg
ICRtYWtlX3ZhcnN7JDF9ID0gJDI7Ci0JfQotCWlmIChkZWZpbmVkKCRvYmpzKSkgewotCSAgICBm
b3JlYWNoIG15ICRvYmogKHNwbGl0IC9ccysvLCRvYmpzKSB7Ci0JCSRvYmogPX4gcy8tL18vZzsK
LQkJaWYgKCRvYmogPX4gLyguKilcLm8kLykgewotCQkgICAgIyBPYmplY3RzIG1heSBiZSBlbmFi
bGVkIGJ5IG1vcmUgdGhhbiBvbmUgY29uZmlnLgotCQkgICAgIyBTdG9yZSBjb25maWdzIGluIGFu
IGFycmF5LgotCQkgICAgbXkgQGFycjsKLQotCQkgICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JDF9
KSkgewotCQkJQGFyciA9IEB7JG9iamVjdHN7JDF9fTsKLQkJICAgIH0KLQotCQkgICAgJGFyclsk
I2FycisxXSA9ICR2YXI7Ci0KLQkJICAgICMgVGhlIG9iamVjdHMgaGF2ZSBhIGhhc2ggbWFwcGlu
ZyB0byBhIHJlZmVyZW5jZQotCQkgICAgIyBvZiBhbiBhcnJheSBvZiBjb25maWdzLgotCQkgICAg
JG9iamVjdHN7JDF9ID0gXEBhcnI7Ci0JCX0KLQkgICAgfQotCX0KLSAgICB9Ci0gICAgY2xvc2Uo
JGluZmlsZSk7Ci19Ci0KLW15ICVtb2R1bGVzOwotbXkgJGxpbmZpbGU7Ci0KLWlmIChkZWZpbmVk
KCRsc21vZF9maWxlKSkgewotICAgIGlmICggISAtZiAkbHNtb2RfZmlsZSkgewotCWlmICggLWYg
JEVOVnsnb2JqdHJlZSd9LiIvIi4kbHNtb2RfZmlsZSkgewotCSAgICAkbHNtb2RfZmlsZSA9ICRF
TlZ7J29ianRyZWUnfS4iLyIuJGxzbW9kX2ZpbGU7Ci0JfSBlbHNlIHsKLQkJZGllICIkbHNtb2Rf
ZmlsZSBub3QgZm91bmQiOwotCX0KLSAgICB9Ci0KLSAgICBteSAkb3R5cGUgPSAoIC14ICRsc21v
ZF9maWxlKSA/ICctfCcgOiAnPCc7Ci0gICAgb3BlbigkbGluZmlsZSwgJG90eXBlLCAkbHNtb2Rf
ZmlsZSk7Ci0KLX0gZWxzZSB7Ci0KLSAgICAjIHNlZSB3aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBv
biB0aGlzIHN5c3RlbQotICAgIG15ICRsc21vZDsKLQotICAgIGZvcmVhY2ggbXkgJGRpciAoICgi
L3NiaW4iLCAiL2JpbiIsICIvdXNyL3NiaW4iLCAiL3Vzci9iaW4iKSApIHsKLQlpZiAoIC14ICIk
ZGlyL2xzbW9kIiApIHsKLQkgICAgJGxzbW9kID0gIiRkaXIvbHNtb2QiOwotCSAgICBsYXN0Owot
CX0KLX0KLSAgICBpZiAoIWRlZmluZWQoJGxzbW9kKSkgewotCSMgdHJ5IGp1c3QgdGhlIHBhdGgK
LQkkbHNtb2QgPSAibHNtb2QiOwotICAgIH0KLQotICAgIG9wZW4oJGxpbmZpbGUsICctfCcsICRs
c21vZCkgfHwgZGllICJDYW4gbm90IGNhbGwgbHNtb2Qgd2l0aCAkbHNtb2QiOwotfQotCi13aGls
ZSAoPCRsaW5maWxlPikgewotCW5leHQgaWYgKC9eTW9kdWxlLyk7ICAjIFNraXAgdGhlIGZpcnN0
IGxpbmUuCi0JaWYgKC9eKFxTKykvKSB7Ci0JCSRtb2R1bGVzeyQxfSA9IDE7Ci0JfQotfQotY2xv
c2UgKCRsaW5maWxlKTsKLQotIyBhZGQgdG8gdGhlIGNvbmZpZ3MgaGFzaCBhbGwgY29uZmlncyB0
aGF0IGFyZSBuZWVkZWQgdG8gZW5hYmxlCi0jIGEgbG9hZGVkIG1vZHVsZS4gVGhpcyBpcyBhIGRp
cmVjdCBvYmotJHtDT05GSUdfRk9PfSArPSBiYXIubwotIyB3aGVyZSB3ZSBrbm93IHdlIG5lZWQg
YmFyLm8gc28gd2UgYWRkIEZPTyB0byB0aGUgbGlzdC4KLW15ICVjb25maWdzOwotZm9yZWFjaCBt
eSAkbW9kdWxlIChrZXlzKCVtb2R1bGVzKSkgewotICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyRt
b2R1bGV9KSkgewotCW15IEBhcnIgPSBAeyRvYmplY3RzeyRtb2R1bGV9fTsKLQlmb3JlYWNoIG15
ICRjb25mIChAYXJyKSB7Ci0JICAgICRjb25maWdzeyRjb25mfSA9ICRtb2R1bGU7Ci0JICAgIGRw
cmludCAiJGNvbmYgYWRkZWQgYnkgZGlyZWN0ICgkbW9kdWxlKVxuIjsKLQkgICAgaWYgKCRkZWJ1
Z3ByaW50KSB7Ci0JCW15ICRjPSRjb25mOwotCQkkYyA9fiBzL15DT05GSUdfLy87Ci0JCWlmIChk
ZWZpbmVkKCRkZXBlbmRzeyRjfSkpIHsKLQkJICAgIGRwcmludCAiIGRlcHMgPSAkZGVwZW5kc3sk
Y31cbiI7Ci0JCX0gZWxzZSB7Ci0JCSAgICBkcHJpbnQgIiBubyBkZXBzXG4iOwotCQl9Ci0JICAg
IH0KLQl9Ci0gICAgfSBlbHNlIHsKLQkjIE1vc3QgbGlrZWx5LCBzb21lb25lIGhhcyBhIGN1c3Rv
bSAoYmluYXJ5PykgbW9kdWxlIGxvYWRlZC4KLQlwcmludCBTVERFUlIgIiRtb2R1bGUgY29uZmln
IG5vdCBmb3VuZCEhXG4iOwotICAgIH0KLX0KLQotIyBSZWFkIHRoZSBjdXJyZW50IGNvbmZpZywg
YW5kIHNlZSB3aGF0IGlzIGVuYWJsZWQuIFdlIHdhbnQgdG8KLSMgaWdub3JlIGNvbmZpZ3MgdGhh
dCB3ZSB3b3VsZCBub3QgZW5hYmxlIGFueXdheS4KLQotbXkgJW9yaWdfY29uZmlnczsKLW15ICR2
YWxpZCA9ICJBLVphLXpfMC05IjsKLQotZm9yZWFjaCBteSAkbGluZSAoQGNvbmZpZ19maWxlKSB7
Ci0gICAgJF8gPSAkbGluZTsKLQotICAgIGlmICgvKENPTkZJR19bJHZhbGlkXSopPShtfHkpLykg
ewotCSRvcmlnX2NvbmZpZ3N7JDF9ID0gJDI7Ci0gICAgfQotfQotCi1teSAkcmVwZWF0ID0gMTsK
LQotbXkgJGRlcGNvbmZpZzsKLQotIwotIyBOb3RlLCB3ZSBkbyBub3QgY2FyZSBhYm91dCBvcGVy
YW5kcyAobGlrZTogJiYsIHx8LCAhKSB3ZSB3YW50IHRvIGFkZCBhbnkKLSMgY29uZmlnIHRoYXQg
aXMgaW4gdGhlIGRlcGVuZCBsaXN0IG9mIGFub3RoZXIgY29uZmlnLiBUaGlzIHNjcmlwdCBkb2Vz
Ci0jIG5vdCBlbmFibGUgY29uZmlncyB0aGF0IGFyZSBub3QgYWxyZWFkeSBlbmFibGVkLiBJZiB3
ZSBjb21lIGFjcm9zcyBhCi0jIGNvbmZpZyBBIHRoYXQgZGVwZW5kcyBvbiAhQiwgd2UgY2FuIHN0
aWxsIGFkZCBCIHRvIHRoZSBsaXN0IG9mIGRlcGVuZHMKLSMgdG8ga2VlcCBvbi4gSWYgQSB3YXMg
b24gaW4gdGhlIG9yaWdpbmFsIGNvbmZpZywgQiB3b3VsZCBub3QgaGF2ZSBiZWVuCi0jIGFuZCBC
IHdvdWxkIG5vdCBiZSB0dXJuZWQgb24gYnkgdGhpcyBzY3JpcHQuCi0jCi1zdWIgcGFyc2VfY29u
ZmlnX2RlcGVuZHMKLXsKLSAgICBteSAoJHApID0gQF87Ci0KLSAgICB3aGlsZSAoJHAgPX4gL1sk
dmFsaWRdLykgewotCi0JaWYgKCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykgewotCSAg
ICBteSAkY29uZiA9ICJDT05GSUdfIiAuICQxOwotCi0JICAgICRwID1+IHMvXlteJHZhbGlkXSpb
JHZhbGlkXSsvLzsKLQotCSAgICAjIFdlIG9ubHkgbmVlZCB0byBwcm9jZXNzIGlmIHRoZSBkZXBl
bmQgY29uZmlnIGlzIGEgbW9kdWxlCi0JICAgIGlmICghZGVmaW5lZCgkb3JpZ19jb25maWdzeyRj
b25mfSkgfHwgJG9yaWdfY29uZmlnc3skY29uZn0gZXEgInkiKSB7Ci0JCW5leHQ7Ci0JICAgIH0K
LQotCSAgICBpZiAoIWRlZmluZWQoJGNvbmZpZ3N7JGNvbmZ9KSkgewotCQkjIFdlIG11c3QgbWFr
ZSBzdXJlIHRoYXQgdGhpcyBjb25maWcgaGFzIGl0cwotCQkjIGRlcGVuZGVuY2llcyBtZXQuCi0J
CSRyZXBlYXQgPSAxOyAjIGRvIGFnYWluCi0JCWRwcmludCAiJGNvbmYgc2VsZWN0ZWQgYnkgZGVw
ZW5kICRkZXBjb25maWdcbiI7Ci0JCSRjb25maWdzeyRjb25mfSA9IDE7Ci0JICAgIH0KLQl9IGVs
c2UgewotCSAgICBkaWUgInRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiI7Ci0JfQotICAgIH0KLX0K
LQotIyBTZWxlY3QgaXMgdHJlYXRlZCBhIGJpdCBkaWZmZXJlbnRseSB0aGFuIGRlcGVuZHMuIFdl
IGNhbGwgdGhpcwotIyB3aGVuIGEgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIHJlcXVpcmVzIGFu
b3RoZXIgY29uZmlnIHRvIGJlCi0jIHNlbGVjdGVkLiBXZSB1c2UgdG8ganVzdCBzZWxlY3QgYWxs
IGNvbmZpZ3MgdGhhdCBzZWxlY3RlZCB0aGlzCi0jIGNvbmZpZywgYnV0IGZvdW5kIHRoYXQgdGhh
dCBjYW4gYmFsbG9vbiBpbnRvIGVuYWJsaW5nIGh1bmRyZWRzCi0jIG9mIGNvbmZpZ3MgdGhhdCB3
ZSBkbyBub3QgY2FyZSBhYm91dC4KLSMKLSMgVGhlIGlkZWEgaXMgd2UgbG9vayBhdCBhbGwgdGhl
IGNvbmZpZ3MgdGhhdCBzZWxlY3QgaXQuIElmIG9uZQotIyBpcyBhbHJlYWR5IGluIG91ciBsaXN0
IG9mIGNvbmZpZ3MgdG8gZW5hYmxlLCB0aGVuIHRoZXJlJ3Mgbm90aGluZwotIyBlbHNlIHRvIGRv
LiBJZiB0aGVyZSBpc24ndCwgd2UgcGljayB0aGUgZmlyc3QgY29uZmlnIHRoYXQgd2FzCi0jIGVu
YWJsZWQgaW4gdGhlIG9yaWduYWwgY29uZmlnIGFuZCB1c2UgdGhhdC4KLXN1YiBwYXJzZV9jb25m
aWdfc2VsZWN0cwotewotICAgIG15ICgkY29uZmlnLCAkcCkgPSBAXzsKLQotICAgIG15ICRuZXh0
X2NvbmZpZzsKLQotICAgIHdoaWxlICgkcCA9fiAvWyR2YWxpZF0vKSB7Ci0KLQlpZiAoJHAgPX4g
L15bXiR2YWxpZF0qKFskdmFsaWRdKykvKSB7Ci0JICAgIG15ICRjb25mID0gIkNPTkZJR18iIC4g
JDE7Ci0KLQkgICAgJHAgPX4gcy9eW14kdmFsaWRdKlskdmFsaWRdKy8vOwotCi0JICAgICMgTWFr
ZSBzdXJlIHRoYXQgdGhpcyBjb25maWcgZXhpc3RzIGluIHRoZSBjdXJyZW50IC5jb25maWcgZmls
ZQotCSAgICBpZiAoIWRlZmluZWQoJG9yaWdfY29uZmlnc3skY29uZn0pKSB7Ci0JCWRwcmludCAi
JGNvbmYgbm90IHNldCBmb3IgJGNvbmZpZyBzZWxlY3RcbiI7Ci0JCW5leHQ7Ci0JICAgIH0KLQot
CSAgICAjIENoZWNrIGlmIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbW9kdWxlIHNlbGVjdHMgdGhp
cyBjb25maWcKLQkgICAgaWYgKGRlZmluZWQoJG9yaWdfY29uZmlnc3skY29uZn0pICYmICRvcmln
X2NvbmZpZ3N7JGNvbmZ9IG5lICJtIikgewotCQlkcHJpbnQgIiRjb25mIChub24gbW9kdWxlKSBz
ZWxlY3RzIGNvbmZpZywgd2UgYXJlIGdvb2RcbiI7Ci0JCSMgd2UgYXJlIGdvb2Qgd2l0aCB0aGlz
Ci0JCXJldHVybjsKLQkgICAgfQotCSAgICBpZiAoZGVmaW5lZCgkY29uZmlnc3skY29uZn0pKSB7
Ci0JCWRwcmludCAiJGNvbmYgc2VsZWN0cyAkY29uZmlnIHNvIHdlIGFyZSBnb29kXG4iOwotCQkj
IEEgc2V0IGNvbmZpZyBzZWxlY3RzIHRoaXMgY29uZmlnLCB3ZSBhcmUgZ29vZAotCQlyZXR1cm47
Ci0JICAgIH0KLQkgICAgIyBTZXQgdGhpcyBjb25maWcgdG8gYmUgc2VsZWN0ZWQKLQkgICAgaWYg
KCFkZWZpbmVkKCRuZXh0X2NvbmZpZykpIHsKLQkJJG5leHRfY29uZmlnID0gJGNvbmY7Ci0JICAg
IH0KLQl9IGVsc2UgewotCSAgICBkaWUgInRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiI7Ci0JfQot
ICAgIH0KLQotICAgICMgSWYgbm8gcG9zc2libGUgY29uZmlnIHNlbGVjdGVkIHRoaXMsIHRoZW4g
c29tZXRoaW5nIGhhcHBlbmVkLgotICAgIGlmICghZGVmaW5lZCgkbmV4dF9jb25maWcpKSB7Ci0J
cHJpbnQgU1RERVJSICJXQVJOSU5HOiAkY29uZmlnIGlzIHJlcXVpcmVkLCBidXQgbm90aGluZyBp
biB0aGVcbiI7Ci0JcHJpbnQgU1RERVJSICIgIGN1cnJlbnQgY29uZmlnIHNlbGVjdHMgaXQuXG4i
OwotCXJldHVybjsKLSAgICB9Ci0KLSAgICAjIElmIHdlIGFyZSBoZXJlLCB0aGVuIHdlIGZvdW5k
IG5vIGNvbmZpZyB0aGF0IGlzIHNldCBhbmQKLSAgICAjIHNlbGVjdHMgdGhpcyBjb25maWcuIFJl
cGVhdC4KLSAgICAkcmVwZWF0ID0gMTsKLSAgICAjIE1ha2UgdGhpcyBjb25maWcgbmVlZCB0byBi
ZSBzZWxlY3RlZAotICAgICRjb25maWdzeyRuZXh0X2NvbmZpZ30gPSAxOwotICAgIGRwcmludCAi
JG5leHRfY29uZmlnIHNlbGVjdGVkIGJ5IHNlbGVjdCAkY29uZmlnXG4iOwotfQotCi1teSAlcHJv
Y2Vzc19zZWxlY3RzOwotCi0jIGxvb3AgdGhyb3VnaCBhbGwgY29uZmlncywgc2VsZWN0IHRoZWly
IGRlcGVuZGVuY2llcy4KLXN1YiBsb29wX2RlcGVuZCB7Ci0gICAgJHJlcGVhdCA9IDE7Ci0KLSAg
ICB3aGlsZSAoJHJlcGVhdCkgewotCSRyZXBlYXQgPSAwOwotCi0gICAgICBmb3Jsb29wOgotCWZv
cmVhY2ggbXkgJGNvbmZpZyAoa2V5cyAlY29uZmlncykgewotCi0JICAgICMgSWYgdGhpcyBjb25m
aWcgaXMgbm90IGEgbW9kdWxlLCB3ZSBkbyBub3QgbmVlZCB0byBwcm9jZXNzIGl0Ci0JICAgIGlm
IChkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7JGNvbmZpZ30pICYmICRvcmlnX2NvbmZpZ3N7JGNvbmZp
Z30gbmUgIm0iKSB7Ci0JCW5leHQgZm9ybG9vcDsKLQkgICAgfQotCi0JICAgICRjb25maWcgPX4g
cy9eQ09ORklHXy8vOwotCSAgICAkZGVwY29uZmlnID0gJGNvbmZpZzsKLQotCSAgICBpZiAoZGVm
aW5lZCgkZGVwZW5kc3skY29uZmlnfSkpIHsKLQkJIyBUaGlzIGNvbmZpZyBoYXMgZGVwZW5kZW5j
aWVzLiBNYWtlIHN1cmUgdGhleSBhcmUgYWxzbyBpbmNsdWRlZAotCQlwYXJzZV9jb25maWdfZGVw
ZW5kcyAkZGVwZW5kc3skY29uZmlnfTsKLQkgICAgfQotCi0JICAgICMgSWYgdGhlIGNvbmZpZyBo
YXMgbm8gcHJvbXB0LCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgaWYgYSBjb25maWcKLQkgICAgIyB0
aGF0IGlzIGVuYWJsZWQgc2VsZWN0ZWQgaXQuIE9yIGlmIHdlIG5lZWQgdG8gZW5hYmxlIG9uZS4K
LQkgICAgaWYgKCFkZWZpbmVkKCRwcm9tcHRzeyRjb25maWd9KSAmJiBkZWZpbmVkKCRzZWxlY3Rz
eyRjb25maWd9KSkgewotCQkkcHJvY2Vzc19zZWxlY3RzeyRjb25maWd9ID0gMTsKLQkgICAgfQot
CX0KLSAgICB9Ci19Ci0KLXN1YiBsb29wX3NlbGVjdCB7Ci0KLSAgICBmb3JlYWNoIG15ICRjb25m
aWcgKGtleXMgJXByb2Nlc3Nfc2VsZWN0cykgewotCSRjb25maWcgPX4gcy9eQ09ORklHXy8vOwot
Ci0JZHByaW50ICJQcm9jZXNzIHNlbGVjdCAkY29uZmlnXG4iOwotCi0JIyBjb25maWcgaGFzIG5v
IHByb21wdCBhbmQgbXVzdCBiZSBzZWxlY3RlZC4KLQlwYXJzZV9jb25maWdfc2VsZWN0cyAkY29u
ZmlnLCAkc2VsZWN0c3skY29uZmlnfTsKLSAgICB9Ci19Ci0KLXdoaWxlICgkcmVwZWF0KSB7Ci0g
ICAgIyBHZXQgdGhlIGZpcnN0IHNldCBvZiBjb25maWdzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMu
Ci0gICAgbG9vcF9kZXBlbmQ7Ci0KLSAgICAkcmVwZWF0ID0gMDsKLQotICAgICMgTm93IHdlIG5l
ZWQgdG8gc2VlIGlmIHdlIGhhdmUgdG8gY2hlY2sgc2VsZWN0czsKLSAgICBsb29wX3NlbGVjdDsK
LX0KLQotbXkgJXNldGNvbmZpZ3M7Ci0KLSMgRmluYWxseSwgcmVhZCB0aGUgLmNvbmZpZyBmaWxl
IGFuZCB0dXJuIG9mZiBhbnkgbW9kdWxlIGVuYWJsZWQgdGhhdAotIyB3ZSBjb3VsZCBub3QgZmlu
ZCBhIHJlYXNvbiB0byBrZWVwIGVuYWJsZWQuCi1mb3JlYWNoIG15ICRsaW5lIChAY29uZmlnX2Zp
bGUpIHsKLSAgICAkXyA9ICRsaW5lOwotCi0gICAgaWYgKC9DT05GSUdfSUtDT05GSUcvKSB7Ci0J
aWYgKC8jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0LykgewotCSAgICAjIGVuYWJsZSBJS0NP
TkZJRyBhdCBsZWFzdCBhcyBhIG1vZHVsZQotCSAgICBwcmludCAiQ09ORklHX0lLQ09ORklHPW1c
biI7Ci0JICAgICMgZG9uJ3QgYXNrIGFib3V0IFBST0MKLQkgICAgcHJpbnQgIiMgQ09ORklHX0lL
Q09ORklHX1BST0MgaXMgbm90IHNldFxuIjsKLQl9IGVsc2UgewotCSAgICBwcmludDsKLQl9Ci0J
bmV4dDsKLSAgICB9Ci0KLSAgICBpZiAoL0NPTkZJR19NT0RVTEVfU0lHX0tFWT0iKC4rKSIvKSB7
Ci0gICAgICAgIG15ICRvcmlnX2NlcnQgPSAkMTsKLSAgICAgICAgbXkgJGRlZmF1bHRfY2VydCA9
ICJjZXJ0cy9zaWduaW5nX2tleS5wZW0iOwotCi0gICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgbG9n
aWMgaW4gdGhpcyBzY3JpcHQgc3RpbGwgbWF0Y2hlcyB0aGUgb25lIGluIEtjb25maWcKLSAgICAg
ICAgaWYgKCFkZWZpbmVkKCRkZXBlbmRzeyJNT0RVTEVfU0lHX0tFWSJ9KSB8fAotICAgICAgICAg
ICAgJGRlcGVuZHN7Ik1PRFVMRV9TSUdfS0VZIn0gIX4gLyJcUSRkZWZhdWx0X2NlcnRcRSIvKSB7
Ci0gICAgICAgICAgICBwcmludCBTVERFUlIgIldBUk5JTkc6IE1PRFVMRV9TSUdfS0VZIGFzc2Vy
dGlvbiBmYWlsdXJlLCAiLAotICAgICAgICAgICAgICAgICJ1cGRhdGUgbmVlZGVkIHRvICIsIF9f
RklMRV9fLCAiIGxpbmUgIiwgX19MSU5FX18sICJcbiI7Ci0gICAgICAgICAgICBwcmludDsKLSAg
ICAgICAgfSBlbHNpZiAoJG9yaWdfY2VydCBuZSAkZGVmYXVsdF9jZXJ0ICYmICEgLWYgJG9yaWdf
Y2VydCkgewotICAgICAgICAgICAgcHJpbnQgU1RERVJSICJNb2R1bGUgc2lnbmF0dXJlIHZlcmlm
aWNhdGlvbiBlbmFibGVkIGJ1dCAiLAotICAgICAgICAgICAgICAgICJtb2R1bGUgc2lnbmluZyBr
ZXkgXCIkb3JpZ19jZXJ0XCIgbm90IGZvdW5kLiBSZXNldHRpbmcgIiwKLSAgICAgICAgICAgICAg
ICAic2lnbmluZyBrZXkgdG8gZGVmYXVsdCB2YWx1ZS5cbiI7Ci0gICAgICAgICAgICBwcmludCAi
Q09ORklHX01PRFVMRV9TSUdfS0VZPVwiJGRlZmF1bHRfY2VydFwiXG4iOwotICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcHJpbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgbmV4dDsKLSAgICB9
Ci0KLSAgICBpZiAoL0NPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlTPSIoLispIi8pIHsKLSAgICAg
ICAgbXkgJG9yaWdfa2V5cyA9ICQxOwotCi0gICAgICAgIGlmICghIC1mICRvcmlnX2tleXMpIHsK
LSAgICAgICAgICAgIHByaW50IFNUREVSUiAiU3lzdGVtIGtleXJpbmcgZW5hYmxlZCBidXQga2V5
cyBcIiRvcmlnX2tleXNcIiAiLAotICAgICAgICAgICAgICAgICJub3QgZm91bmQuIFJlc2V0dGlu
ZyBrZXlzIHRvIGRlZmF1bHQgdmFsdWUuXG4iOwotICAgICAgICAgICAgcHJpbnQgIkNPTkZJR19T
WVNURU1fVFJVU1RFRF9LRVlTPVwiXCJcbiI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBwcmludDsKLSAgICAgICAgfQotICAgICAgICBuZXh0OwotICAgIH0KLQotICAgIGlmICgvXihD
T05GSUcuKik9KG18eSkvKSB7Ci0JaWYgKGRlZmluZWQoJGNvbmZpZ3N7JDF9KSkgewotCSAgICBp
ZiAoJGxvY2FseWVzY29uZmlnKSB7Ci0JICAgICAgICAkc2V0Y29uZmlnc3skMX0gPSAneSc7Ci0J
CXByaW50ICIkMT15XG4iOwotCQluZXh0OwotCSAgICB9IGVsc2UgewotCSAgICAgICAgJHNldGNv
bmZpZ3N7JDF9ID0gJDI7Ci0JICAgIH0KLQl9IGVsc2lmICgkMiBlcSAibSIpIHsKLQkgICAgcHJp
bnQgIiMgJDEgaXMgbm90IHNldFxuIjsKLQkgICAgbmV4dDsKLQl9Ci0gICAgfQotICAgIHByaW50
OwotfQotCi0jIEludGVncml0eSBjaGVjaywgbWFrZSBzdXJlIGFsbCBtb2R1bGVzIHRoYXQgd2Ug
d2FudCBlbmFibGVkIGRvCi0jIGluZGVlZCBoYXZlIHRoZWlyIGNvbmZpZ3Mgc2V0LgotbG9vcDoK
LWZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cyglbW9kdWxlcykpIHsKLSAgICBpZiAoZGVmaW5lZCgk
b2JqZWN0c3skbW9kdWxlfSkpIHsKLQlteSBAYXJyID0gQHskb2JqZWN0c3skbW9kdWxlfX07Ci0J
Zm9yZWFjaCBteSAkY29uZiAoQGFycikgewotCSAgICBpZiAoZGVmaW5lZCgkc2V0Y29uZmlnc3sk
Y29uZn0pKSB7Ci0JCW5leHQgbG9vcDsKLQkgICAgfQotCX0KLQlwcmludCBTVERFUlIgIm1vZHVs
ZSAkbW9kdWxlIGRpZCBub3QgaGF2ZSBjb25maWdzIjsKLQlmb3JlYWNoIG15ICRjb25mIChAYXJy
KSB7Ci0JICAgIHByaW50IFNUREVSUiAiICIgLCAkY29uZjsKLQl9Ci0JcHJpbnQgU1RERVJSICJc
biI7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9zeW1ib2wuYyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvc3ltYm9sLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDFmOTI2NmQuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9zeW1ib2wuYwor
KysgL2Rldi9udWxsCkBAIC0xLDEzMzEgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBw
ZWxAbGludXgtbTY4ay5vcmc+Ci0gKi8KLQotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8
c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8cmVnZXguaD4KLSNpbmNs
dWRlIDxzeXMvdXRzbmFtZS5oPgotCi0jaW5jbHVkZSAibGtjLmgiCi0KLXN0cnVjdCBzeW1ib2wg
c3ltYm9sX3llcyA9IHsKLQkubmFtZSA9ICJ5IiwKLQkuY3VyciA9IHsgInkiLCB5ZXMgfSwKLQku
ZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELAotfSwgc3ltYm9sX21vZCA9IHsKLQku
bmFtZSA9ICJtIiwKLQkuY3VyciA9IHsgIm0iLCBtb2QgfSwKLQkuZmxhZ3MgPSBTWU1CT0xfQ09O
U1R8U1lNQk9MX1ZBTElELAotfSwgc3ltYm9sX25vID0gewotCS5uYW1lID0gIm4iLAotCS5jdXJy
ID0geyAibiIsIG5vIH0sCi0JLmZsYWdzID0gU1lNQk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwKLX0s
IHN5bWJvbF9lbXB0eSA9IHsKLQkubmFtZSA9ICIiLAotCS5jdXJyID0geyAiIiwgbm8gfSwKLQku
ZmxhZ3MgPSBTWU1CT0xfVkFMSUQsCi19OwotCi1zdHJ1Y3Qgc3ltYm9sICpzeW1fZGVmY29uZmln
X2xpc3Q7Ci1zdHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsKLXRyaXN0YXRlIG1vZHVsZXNfdmFs
OwotCi1lbnVtIHN5bWJvbF90eXBlIHN5bV9nZXRfdHlwZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17
Ci0JZW51bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltLT50eXBlOwotCi0JaWYgKHR5cGUgPT0gU19U
UklTVEFURSkgewotCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJs
ZSA9PSB5ZXMpCi0JCQl0eXBlID0gU19CT09MRUFOOwotCQllbHNlIGlmIChtb2R1bGVzX3ZhbCA9
PSBubykKLQkJCXR5cGUgPSBTX0JPT0xFQU47Ci0JfQotCXJldHVybiB0eXBlOwotfQotCi1jb25z
dCBjaGFyICpzeW1fdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5cGUgdHlwZSkKLXsKLQlzd2l0Y2gg
KHR5cGUpIHsKLQljYXNlIFNfQk9PTEVBTjoKLQkJcmV0dXJuICJib29sIjsKLQljYXNlIFNfVFJJ
U1RBVEU6Ci0JCXJldHVybiAidHJpc3RhdGUiOwotCWNhc2UgU19JTlQ6Ci0JCXJldHVybiAiaW50
ZWdlciI7Ci0JY2FzZSBTX0hFWDoKLQkJcmV0dXJuICJoZXgiOwotCWNhc2UgU19TVFJJTkc6Ci0J
CXJldHVybiAic3RyaW5nIjsKLQljYXNlIFNfVU5LTk9XTjoKLQkJcmV0dXJuICJ1bmtub3duIjsK
LQl9Ci0JcmV0dXJuICI/Pz8iOwotfQotCi1zdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfY2hvaWNl
X3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQot
CWZvcl9hbGxfY2hvaWNlcyhzeW0sIHByb3ApCi0JCXJldHVybiBwcm9wOwotCXJldHVybiBOVUxM
OwotfQotCi1zdGF0aWMgc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0X2RlZmF1bHRfcHJvcChzdHJ1
Y3Qgc3ltYm9sICpzeW0pCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCi0JZm9yX2FsbF9k
ZWZhdWx0cyhzeW0sIHByb3ApIHsKLQkJcHJvcC0+dmlzaWJsZS50cmkgPSBleHByX2NhbGNfdmFs
dWUocHJvcC0+dmlzaWJsZS5leHByKTsKLQkJaWYgKHByb3AtPnZpc2libGUudHJpICE9IG5vKQot
CQkJcmV0dXJuIHByb3A7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdHJ1Y3QgcHJvcGVydHkg
KnN5bV9nZXRfcmFuZ2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0Jc3RydWN0IHByb3Bl
cnR5ICpwcm9wOwotCi0JZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgcHJvcCwgUF9SQU5HRSkgewot
CQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIp
OwotCQlpZiAocHJvcC0+dmlzaWJsZS50cmkgIT0gbm8pCi0JCQlyZXR1cm4gcHJvcDsKLQl9Ci0J
cmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBsb25nIGxvbmcgc3ltX2dldF9yYW5nZV92YWwoc3Ry
dWN0IHN5bWJvbCAqc3ltLCBpbnQgYmFzZSkKLXsKLQlzeW1fY2FsY192YWx1ZShzeW0pOwotCXN3
aXRjaCAoc3ltLT50eXBlKSB7Ci0JY2FzZSBTX0lOVDoKLQkJYmFzZSA9IDEwOwotCQlicmVhazsK
LQljYXNlIFNfSEVYOgotCQliYXNlID0gMTY7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFr
OwotCX0KLQlyZXR1cm4gc3RydG9sbChzeW0tPmN1cnIudmFsLCBOVUxMLCBiYXNlKTsKLX0KLQot
c3RhdGljIHZvaWQgc3ltX3ZhbGlkYXRlX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSkKLXsKLQlz
dHJ1Y3QgcHJvcGVydHkgKnByb3A7Ci0JaW50IGJhc2U7Ci0JbG9uZyBsb25nIHZhbCwgdmFsMjsK
LQljaGFyIHN0cls2NF07Ci0KLQlzd2l0Y2ggKHN5bS0+dHlwZSkgewotCWNhc2UgU19JTlQ6Ci0J
CWJhc2UgPSAxMDsKLQkJYnJlYWs7Ci0JY2FzZSBTX0hFWDoKLQkJYmFzZSA9IDE2OwotCQlicmVh
azsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQotCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3Byb3Ao
c3ltKTsKLQlpZiAoIXByb3ApCi0JCXJldHVybjsKLQl2YWwgPSBzdHJ0b2xsKHN5bS0+Y3Vyci52
YWwsIE5VTEwsIGJhc2UpOwotCXZhbDIgPSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5s
ZWZ0LnN5bSwgYmFzZSk7Ci0JaWYgKHZhbCA+PSB2YWwyKSB7Ci0JCXZhbDIgPSBzeW1fZ2V0X3Jh
bmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIGJhc2UpOwotCQlpZiAodmFsIDw9IHZhbDIp
Ci0JCQlyZXR1cm47Ci0JfQotCWlmIChzeW0tPnR5cGUgPT0gU19JTlQpCi0JCXNwcmludGYoc3Ry
LCAiJWxsZCIsIHZhbDIpOwotCWVsc2UKLQkJc3ByaW50ZihzdHIsICIweCVsbHgiLCB2YWwyKTsK
LQlzeW0tPmN1cnIudmFsID0geHN0cmR1cChzdHIpOwotfQotCi1zdGF0aWMgdm9pZCBzeW1fc2V0
X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKQotewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsK
LQotCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIQU5HRUQ7Ci0JZm9yIChwcm9wID0gc3ltLT5wcm9w
OyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgewotCQlpZiAocHJvcC0+bWVudSkKLQkJCXByb3At
Pm1lbnUtPmZsYWdzIHw9IE1FTlVfQ0hBTkdFRDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bV9z
ZXRfYWxsX2NoYW5nZWQodm9pZCkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW07Ci0JaW50IGk7Ci0K
LQlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKQotCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKLX0KLQot
c3RhdGljIHZvaWQgc3ltX2NhbGNfdmlzaWJpbGl0eShzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0J
c3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW0gPSBOVUxM
OwotCXRyaXN0YXRlIHRyaTsKLQotCS8qIGFueSBwcm9tcHQgdmlzaWJsZT8gKi8KLQl0cmkgPSBu
bzsKLQotCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpCi0JCWNob2ljZV9zeW0gPSBwcm9w
X2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsKLQotCWZvcl9hbGxfcHJvbXB0
cyhzeW0sIHByb3ApIHsKLQkJcHJvcC0+dmlzaWJsZS50cmkgPSBleHByX2NhbGNfdmFsdWUocHJv
cC0+dmlzaWJsZS5leHByKTsKLQkJLyoKLQkJICogVHJpc3RhdGUgY2hvaWNlX3ZhbHVlcyB3aXRo
IHZpc2liaWxpdHkgJ21vZCcgYXJlCi0JCSAqIG5vdCB2aXNpYmxlIGlmIHRoZSBjb3JyZXNwb25k
aW5nIGNob2ljZSdzIHZhbHVlIGlzCi0JCSAqICd5ZXMnLgotCQkgKi8KLQkJaWYgKGNob2ljZV9z
eW0gJiYgc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYKLQkJICAgIHByb3AtPnZpc2libGUudHJp
ID09IG1vZCAmJiBjaG9pY2Vfc3ltLT5jdXJyLnRyaSA9PSB5ZXMpCi0JCQlwcm9wLT52aXNpYmxl
LnRyaSA9IG5vOwotCi0JCXRyaSA9IEVYUFJfT1IodHJpLCBwcm9wLT52aXNpYmxlLnRyaSk7Ci0J
fQotCWlmICh0cmkgPT0gbW9kICYmIChzeW0tPnR5cGUgIT0gU19UUklTVEFURSB8fCBtb2R1bGVz
X3ZhbCA9PSBubykpCi0JCXRyaSA9IHllczsKLQlpZiAoc3ltLT52aXNpYmxlICE9IHRyaSkgewot
CQlzeW0tPnZpc2libGUgPSB0cmk7Ci0JCXN5bV9zZXRfY2hhbmdlZChzeW0pOwotCX0KLQlpZiAo
c3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQotCQlyZXR1cm47Ci0JLyogZGVmYXVsdGluZyB0byAi
eWVzIiBpZiBubyBleHBsaWNpdCAiZGVwZW5kcyBvbiIgYXJlIGdpdmVuICovCi0JdHJpID0geWVz
OwotCWlmIChzeW0tPmRpcl9kZXAuZXhwcikKLQkJdHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+
ZGlyX2RlcC5leHByKTsKLQlpZiAodHJpID09IG1vZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBT
X0JPT0xFQU4pCi0JCXRyaSA9IHllczsKLQlpZiAoc3ltLT5kaXJfZGVwLnRyaSAhPSB0cmkpIHsK
LQkJc3ltLT5kaXJfZGVwLnRyaSA9IHRyaTsKLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7Ci0JfQot
CXRyaSA9IG5vOwotCWlmIChzeW0tPnJldl9kZXAuZXhwcikKLQkJdHJpID0gZXhwcl9jYWxjX3Zh
bHVlKHN5bS0+cmV2X2RlcC5leHByKTsKLQlpZiAodHJpID09IG1vZCAmJiBzeW1fZ2V0X3R5cGUo
c3ltKSA9PSBTX0JPT0xFQU4pCi0JCXRyaSA9IHllczsKLQlpZiAoc3ltLT5yZXZfZGVwLnRyaSAh
PSB0cmkpIHsKLQkJc3ltLT5yZXZfZGVwLnRyaSA9IHRyaTsKLQkJc3ltX3NldF9jaGFuZ2VkKHN5
bSk7Ci0JfQotCXRyaSA9IG5vOwotCWlmIChzeW0tPmltcGxpZWQuZXhwciAmJiBzeW0tPmRpcl9k
ZXAudHJpICE9IG5vKQotCQl0cmkgPSBleHByX2NhbGNfdmFsdWUoc3ltLT5pbXBsaWVkLmV4cHIp
OwotCWlmICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikKLQkJ
dHJpID0geWVzOwotCWlmIChzeW0tPmltcGxpZWQudHJpICE9IHRyaSkgewotCQlzeW0tPmltcGxp
ZWQudHJpID0gdHJpOwotCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKLQl9Ci19Ci0KLS8qCi0gKiBG
aW5kIHRoZSBkZWZhdWx0IHN5bWJvbCBmb3IgYSBjaG9pY2UuCi0gKiBGaXJzdCB0cnkgdGhlIGRl
ZmF1bHQgdmFsdWVzIGZvciB0aGUgY2hvaWNlIHN5bWJvbAotICogTmV4dCBsb2NhdGUgdGhlIGZp
cnN0IHZpc2libGUgY2hvaWNlIHZhbHVlCi0gKiBSZXR1cm4gTlVMTCBpZiBub25lIHdhcyBmb3Vu
ZAotICovCi1zdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAq
c3ltKQotewotCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9w
OwotCXN0cnVjdCBleHByICplOwotCi0JLyogYW55IG9mIHRoZSBkZWZhdWx0cyB2aXNpYmxlPyAq
LwotCWZvcl9hbGxfZGVmYXVsdHMoc3ltLCBwcm9wKSB7Ci0JCXByb3AtPnZpc2libGUudHJpID0g
ZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7Ci0JCWlmIChwcm9wLT52aXNpYmxl
LnRyaSA9PSBubykKLQkJCWNvbnRpbnVlOwotCQlkZWZfc3ltID0gcHJvcF9nZXRfc3ltYm9sKHBy
b3ApOwotCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKLQkJCXJldHVybiBkZWZfc3ltOwot
CX0KLQotCS8qIGp1c3QgZ2V0IHRoZSBmaXJzdCB2aXNpYmxlIHZhbHVlICovCi0JcHJvcCA9IHN5
bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsKLQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4
cHIsIGUsIGRlZl9zeW0pCi0JCWlmIChkZWZfc3ltLT52aXNpYmxlICE9IG5vKQotCQkJcmV0dXJu
IGRlZl9zeW07Ci0KLQkvKiBmYWlsZWQgdG8gbG9jYXRlIGFueSBkZWZhdWx0cyAqLwotCXJldHVy
biBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NhbGNfY2hvaWNlKHN0cnVj
dCBzeW1ib2wgKnN5bSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltOwotCXN0cnVjdCBwcm9w
ZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZXhwciAqZTsKLQlpbnQgZmxhZ3M7Ci0KLQkvKiBmaXJzdCBj
YWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGllcyAqLwotCWZsYWdzID0gc3lt
LT5mbGFnczsKLQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOwotCWV4cHJfbGlzdF9m
b3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkgewotCQlzeW1fY2FsY192aXNpYmls
aXR5KGRlZl9zeW0pOwotCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykKLQkJCWZsYWdzICY9
IGRlZl9zeW0tPmZsYWdzOwotCX0KLQotCXN5bS0+ZmxhZ3MgJj0gZmxhZ3MgfCB+U1lNQk9MX0RF
Rl9VU0VSOwotCi0JLyogaXMgdGhlIHVzZXIgY2hvaWNlIHZpc2libGU/ICovCi0JZGVmX3N5bSA9
IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKLQlpZiAoZGVmX3N5bSAmJiBkZWZfc3ltLT52aXNp
YmxlICE9IG5vKQotCQlyZXR1cm4gZGVmX3N5bTsKLQotCWRlZl9zeW0gPSBzeW1fY2hvaWNlX2Rl
ZmF1bHQoc3ltKTsKLQotCWlmIChkZWZfc3ltID09IE5VTEwpCi0JCS8qIG5vIGNob2ljZT8gcmVz
ZXQgdHJpc3RhdGUgdmFsdWUgKi8KLQkJc3ltLT5jdXJyLnRyaSA9IG5vOwotCi0JcmV0dXJuIGRl
Zl9zeW07Ci19Ci0KLXN0YXRpYyB2b2lkIHN5bV93YXJuX3VubWV0X2RlcChzdHJ1Y3Qgc3ltYm9s
ICpzeW0pCi17Ci0Jc3RydWN0IGdzdHIgZ3MgPSBzdHJfbmV3KCk7Ci0KLQlzdHJfcHJpbnRmKCZn
cywKLQkJICAgIlxuV0FSTklORzogdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyBkZXRlY3RlZCBm
b3IgJXNcbiIsCi0JCSAgIHN5bS0+bmFtZSk7Ci0Jc3RyX3ByaW50ZigmZ3MsCi0JCSAgICIgIERl
cGVuZHMgb24gWyVjXTogIiwKLQkJICAgc3ltLT5kaXJfZGVwLnRyaSA9PSBtb2QgPyAnbScgOiAn
bicpOwotCWV4cHJfZ3N0cl9wcmludChzeW0tPmRpcl9kZXAuZXhwciwgJmdzKTsKLQlzdHJfcHJp
bnRmKCZncywgIlxuIik7Ci0KLQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5l
eHByLCAmZ3MsIHllcywKLQkJCSAgICAgICAiICBTZWxlY3RlZCBieSBbeV06XG4iKTsKLQlleHBy
X2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCAmZ3MsIG1vZCwKLQkJCSAgICAg
ICAiICBTZWxlY3RlZCBieSBbbV06XG4iKTsKLQotCWZwdXRzKHN0cl9nZXQoJmdzKSwgc3RkZXJy
KTsKLX0KLQotdm9pZCBzeW1fY2FsY192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0Jc3Ry
dWN0IHN5bWJvbF92YWx1ZSBuZXd2YWwsIG9sZHZhbDsKLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7
Ci0Jc3RydWN0IGV4cHIgKmU7Ci0KLQlpZiAoIXN5bSkKLQkJcmV0dXJuOwotCi0JaWYgKHN5bS0+
ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpCi0JCXJldHVybjsKLQotCWlmIChzeW1faXNfY2hvaWNlX3Zh
bHVlKHN5bSkgJiYKLQkgICAgc3ltLT5mbGFncyAmIFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFM
VUVTKSB7Ci0JCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTOwot
CQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOwotCQlzeW1fY2FsY192YWx1ZShwcm9w
X2dldF9zeW1ib2wocHJvcCkpOwotCX0KLQotCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1ZBTElEOwot
Ci0Jb2xkdmFsID0gc3ltLT5jdXJyOwotCi0Jc3dpdGNoIChzeW0tPnR5cGUpIHsKLQljYXNlIFNf
SU5UOgotCWNhc2UgU19IRVg6Ci0JY2FzZSBTX1NUUklORzoKLQkJbmV3dmFsID0gc3ltYm9sX2Vt
cHR5LmN1cnI7Ci0JCWJyZWFrOwotCWNhc2UgU19CT09MRUFOOgotCWNhc2UgU19UUklTVEFURToK
LQkJbmV3dmFsID0gc3ltYm9sX25vLmN1cnI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXN5bS0+
Y3Vyci52YWwgPSBzeW0tPm5hbWU7Ci0JCXN5bS0+Y3Vyci50cmkgPSBubzsKLQkJcmV0dXJuOwot
CX0KLQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7Ci0KLQlzeW1fY2FsY192aXNpYmlsaXR5
KHN5bSk7Ci0KLQlpZiAoc3ltLT52aXNpYmxlICE9IG5vKQotCQlzeW0tPmZsYWdzIHw9IFNZTUJP
TF9XUklURTsKLQotCS8qIHNldCBkZWZhdWx0IGlmIHJlY3Vyc2l2ZWx5IGNhbGxlZCAqLwotCXN5
bS0+Y3VyciA9IG5ld3ZhbDsKLQotCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkpIHsKLQljYXNl
IFNfQk9PTEVBTjoKLQljYXNlIFNfVFJJU1RBVEU6Ci0JCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVl
KHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykgewotCQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNl
X3Byb3Aoc3ltKTsKLQkJCW5ld3ZhbC50cmkgPSAocHJvcF9nZXRfc3ltYm9sKHByb3ApLT5jdXJy
LnZhbCA9PSBzeW0pID8geWVzIDogbm87Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoc3ltLT52aXNpYmxl
ICE9IG5vKSB7Ci0JCQkJLyogaWYgdGhlIHN5bWJvbCBpcyB2aXNpYmxlIHVzZSB0aGUgdXNlciB2
YWx1ZQotCQkJCSAqIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRyeSB0aGUgZGVmYXVsdCB2YWx1
ZQotCQkJCSAqLwotCQkJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkpIHsKLQkJCQkJbmV3dmFsLnRy
aSA9IEVYUFJfQU5EKHN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSwKLQkJCQkJCQkgICAgICBzeW0t
PnZpc2libGUpOwotCQkJCQlnb3RvIGNhbGNfbmV3dmFsOwotCQkJCX0KLQkJCX0KLQkJCWlmIChz
eW0tPnJldl9kZXAudHJpICE9IG5vKQotCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOwot
CQkJaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsKLQkJCQlwcm9wID0gc3ltX2dldF9kZWZhdWx0
X3Byb3Aoc3ltKTsKLQkJCQlpZiAocHJvcCkgewotCQkJCQluZXd2YWwudHJpID0gRVhQUl9BTkQo
ZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLAotCQkJCQkJCSAgICAgIHByb3AtPnZpc2libGUu
dHJpKTsKLQkJCQkJaWYgKG5ld3ZhbC50cmkgIT0gbm8pCi0JCQkJCQlzeW0tPmZsYWdzIHw9IFNZ
TUJPTF9XUklURTsKLQkJCQl9Ci0JCQkJaWYgKHN5bS0+aW1wbGllZC50cmkgIT0gbm8pIHsKLQkJ
CQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7Ci0JCQkJCW5ld3ZhbC50cmkgPSBFWFBSX09S
KG5ld3ZhbC50cmksIHN5bS0+aW1wbGllZC50cmkpOwotCQkJCX0KLQkJCX0KLQkJY2FsY19uZXd2
YWw6Ci0JCQlpZiAoc3ltLT5kaXJfZGVwLnRyaSA8IHN5bS0+cmV2X2RlcC50cmkpCi0JCQkJc3lt
X3dhcm5fdW5tZXRfZGVwKHN5bSk7Ci0JCQluZXd2YWwudHJpID0gRVhQUl9PUihuZXd2YWwudHJp
LCBzeW0tPnJldl9kZXAudHJpKTsKLQkJfQotCQlpZiAobmV3dmFsLnRyaSA9PSBtb2QgJiYKLQkJ
ICAgIChzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4gfHwgc3ltLT5pbXBsaWVkLnRyaSA9
PSB5ZXMpKQotCQkJbmV3dmFsLnRyaSA9IHllczsKLQkJYnJlYWs7Ci0JY2FzZSBTX1NUUklORzoK
LQljYXNlIFNfSEVYOgotCWNhc2UgU19JTlQ6Ci0JCWlmIChzeW0tPnZpc2libGUgIT0gbm8gJiYg
c3ltX2hhc192YWx1ZShzeW0pKSB7Ci0JCQluZXd2YWwudmFsID0gc3ltLT5kZWZbU19ERUZfVVNF
Ul0udmFsOwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5
bSk7Ci0JCWlmIChwcm9wKSB7Ci0JCQlzdHJ1Y3Qgc3ltYm9sICpkcyA9IHByb3BfZ2V0X3N5bWJv
bChwcm9wKTsKLQkJCWlmIChkcykgewotCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOwot
CQkJCXN5bV9jYWxjX3ZhbHVlKGRzKTsKLQkJCQluZXd2YWwudmFsID0gZHMtPmN1cnIudmFsOwot
CQkJfQotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCTsKLQl9Ci0KLQlzeW0tPmN1cnIgPSBu
ZXd2YWw7Ci0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBuZXd2YWwudHJpID09IHllcykKLQkJ
c3ltLT5jdXJyLnZhbCA9IHN5bV9jYWxjX2Nob2ljZShzeW0pOwotCXN5bV92YWxpZGF0ZV9yYW5n
ZShzeW0pOwotCi0JaWYgKG1lbWNtcCgmb2xkdmFsLCAmc3ltLT5jdXJyLCBzaXplb2Yob2xkdmFs
KSkpIHsKLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7Ci0JCWlmIChtb2R1bGVzX3N5bSA9PSBzeW0p
IHsKLQkJCXN5bV9zZXRfYWxsX2NoYW5nZWQoKTsKLQkJCW1vZHVsZXNfdmFsID0gbW9kdWxlc19z
eW0tPmN1cnIudHJpOwotCQl9Ci0JfQotCi0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgewotCQlz
dHJ1Y3Qgc3ltYm9sICpjaG9pY2Vfc3ltOwotCi0JCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9w
KHN5bSk7Ci0JCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgY2hvaWNlX3N5
bSkgewotCQkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSAmJgotCQkJICAgIGNob2lj
ZV9zeW0tPnZpc2libGUgIT0gbm8pCi0JCQkJY2hvaWNlX3N5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dS
SVRFOwotCQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hBTkdFRCkKLQkJCQlzeW1fc2V0X2No
YW5nZWQoY2hvaWNlX3N5bSk7Ci0JCX0KLQl9Ci0KLQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9O
T19XUklURSkKLQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRFOwotCi0JaWYgKHN5bS0+Zmxh
Z3MgJiBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUykKLQkJc2V0X2FsbF9jaG9pY2VfdmFs
dWVzKHN5bSk7Ci19Ci0KLXZvaWQgc3ltX2NsZWFyX2FsbF92YWxpZCh2b2lkKQotewotCXN0cnVj
dCBzeW1ib2wgKnN5bTsKLQlpbnQgaTsKLQotCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pCi0JCXN5
bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsKLQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsKLQlz
eW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7Ci19Ci0KLWJvb2wgc3ltX3RyaXN0YXRlX3dpdGhp
bl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIHRyaXN0YXRlIHZhbCkKLXsKLQlpbnQgdHlwZSA9
IHN5bV9nZXRfdHlwZShzeW0pOwotCi0JaWYgKHN5bS0+dmlzaWJsZSA9PSBubykKLQkJcmV0dXJu
IGZhbHNlOwotCi0JaWYgKHR5cGUgIT0gU19CT09MRUFOICYmIHR5cGUgIT0gU19UUklTVEFURSkK
LQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKHR5cGUgPT0gU19CT09MRUFOICYmIHZhbCA9PSBtb2Qp
Ci0JCXJldHVybiBmYWxzZTsKLQlpZiAoc3ltLT52aXNpYmxlIDw9IHN5bS0+cmV2X2RlcC50cmkp
Ci0JCXJldHVybiBmYWxzZTsKLQlpZiAoc3ltLT5pbXBsaWVkLnRyaSA9PSB5ZXMgJiYgdmFsID09
IG1vZCkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYg
c3ltLT52aXNpYmxlID09IHllcykKLQkJcmV0dXJuIHZhbCA9PSB5ZXM7Ci0JcmV0dXJuIHZhbCA+
PSBzeW0tPnJldl9kZXAudHJpICYmIHZhbCA8PSBzeW0tPnZpc2libGU7Ci19Ci0KLWJvb2wgc3lt
X3NldF90cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIHRyaXN0YXRlIHZhbCkKLXsK
LQl0cmlzdGF0ZSBvbGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0KLQlpZiAo
b2xkdmFsICE9IHZhbCAmJiAhc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHZhbCkpCi0J
CXJldHVybiBmYWxzZTsKLQotCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfREVGX1VTRVIpKSB7
Ci0JCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOwotCQlzeW1fc2V0X2NoYW5nZWQoc3lt
KTsKLQl9Ci0JLyoKLQkgKiBzZXR0aW5nIGEgY2hvaWNlIHZhbHVlIGFsc28gcmVzZXRzIHRoZSBu
ZXcgZmxhZyBvZiB0aGUgY2hvaWNlCi0JICogc3ltYm9sIGFuZCBhbGwgb3RoZXIgY2hvaWNlIHZh
bHVlcy4KLQkgKi8KLQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHZhbCA9PSB5ZXMp
IHsKLQkJc3RydWN0IHN5bWJvbCAqY3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2Vf
cHJvcChzeW0pKTsKLQkJc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCQlzdHJ1Y3QgZXhwciAqZTsK
LQotCQljcy0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsKLQkJY3MtPmZsYWdzIHw9IFNZTUJP
TF9ERUZfVVNFUjsKLQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3MpOwotCQlmb3IgKGUg
PSBwcm9wLT5leHByOyBlOyBlID0gZS0+bGVmdC5leHByKSB7Ci0JCQlpZiAoZS0+cmlnaHQuc3lt
LT52aXNpYmxlICE9IG5vKQotCQkJCWUtPnJpZ2h0LnN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9V
U0VSOwotCQl9Ci0JfQotCi0Jc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gdmFsOwotCWlmIChv
bGR2YWwgIT0gdmFsKQotCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7Ci0KLQlyZXR1cm4gdHJ1ZTsK
LX0KLQotdHJpc3RhdGUgc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpz
eW0pCi17Ci0JdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7Ci0KLQlvbGR2YWwgPSBuZXd2YWwgPSBz
eW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7Ci0JZG8gewotCQlzd2l0Y2ggKG5ld3ZhbCkgewot
CQljYXNlIG5vOgotCQkJbmV3dmFsID0gbW9kOwotCQkJYnJlYWs7Ci0JCWNhc2UgbW9kOgotCQkJ
bmV3dmFsID0geWVzOwotCQkJYnJlYWs7Ci0JCWNhc2UgeWVzOgotCQkJbmV3dmFsID0gbm87Ci0J
CQlicmVhazsKLQkJfQotCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCkp
Ci0JCQlicmVhazsKLQl9IHdoaWxlIChvbGR2YWwgIT0gbmV3dmFsKTsKLQlyZXR1cm4gbmV3dmFs
OwotfQotCi1ib29sIHN5bV9zdHJpbmdfdmFsaWQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBj
aGFyICpzdHIpCi17Ci0Jc2lnbmVkIGNoYXIgY2g7Ci0KLQlzd2l0Y2ggKHN5bS0+dHlwZSkgewot
CWNhc2UgU19TVFJJTkc6Ci0JCXJldHVybiB0cnVlOwotCWNhc2UgU19JTlQ6Ci0JCWNoID0gKnN0
cisrOwotCQlpZiAoY2ggPT0gJy0nKQotCQkJY2ggPSAqc3RyKys7Ci0JCWlmICghaXNkaWdpdChj
aCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChjaCA9PSAnMCcgJiYgKnN0ciAhPSAwKQotCQkJ
cmV0dXJuIGZhbHNlOwotCQl3aGlsZSAoKGNoID0gKnN0cisrKSkgewotCQkJaWYgKCFpc2RpZ2l0
KGNoKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JY2FzZSBTX0hF
WDoKLQkJaWYgKHN0clswXSA9PSAnMCcgJiYgKHN0clsxXSA9PSAneCcgfHwgc3RyWzFdID09ICdY
JykpCi0JCQlzdHIgKz0gMjsKLQkJY2ggPSAqc3RyKys7Ci0JCWRvIHsKLQkJCWlmICghaXN4ZGln
aXQoY2gpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfSB3aGlsZSAoKGNoID0gKnN0cisrKSk7Ci0J
CXJldHVybiB0cnVlOwotCWNhc2UgU19CT09MRUFOOgotCWNhc2UgU19UUklTVEFURToKLQkJc3dp
dGNoIChzdHJbMF0pIHsKLQkJY2FzZSAneSc6IGNhc2UgJ1knOgotCQljYXNlICdtJzogY2FzZSAn
TSc6Ci0JCWNhc2UgJ24nOiBjYXNlICdOJzoKLQkJCXJldHVybiB0cnVlOwotCQl9Ci0JCXJldHVy
biBmYWxzZTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gZmFsc2U7Ci0JfQotfQotCi1ib29sIHN5bV9z
dHJpbmdfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQot
ewotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlsb25nIGxvbmcgdmFsOwotCi0Jc3dpdGNoIChz
eW0tPnR5cGUpIHsKLQljYXNlIFNfU1RSSU5HOgotCQlyZXR1cm4gc3ltX3N0cmluZ192YWxpZChz
eW0sIHN0cik7Ci0JY2FzZSBTX0lOVDoKLQkJaWYgKCFzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgc3Ry
KSkKLQkJCXJldHVybiBmYWxzZTsKLQkJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOwot
CQlpZiAoIXByb3ApCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJdmFsID0gc3RydG9sbChzdHIsIE5VTEws
IDEwKTsKLQkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0
LnN5bSwgMTApICYmCi0JCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhw
ci0+cmlnaHQuc3ltLCAxMCk7Ci0JY2FzZSBTX0hFWDoKLQkJaWYgKCFzeW1fc3RyaW5nX3ZhbGlk
KHN5bSwgc3RyKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJv
cChzeW0pOwotCQlpZiAoIXByb3ApCi0JCQlyZXR1cm4gdHJ1ZTsKLQkJdmFsID0gc3RydG9sbChz
dHIsIE5VTEwsIDE2KTsKLQkJcmV0dXJuIHZhbCA+PSBzeW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5l
eHByLT5sZWZ0LnN5bSwgMTYpICYmCi0JCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwo
cHJvcC0+ZXhwci0+cmlnaHQuc3ltLCAxNik7Ci0JY2FzZSBTX0JPT0xFQU46Ci0JY2FzZSBTX1RS
SVNUQVRFOgotCQlzd2l0Y2ggKHN0clswXSkgewotCQljYXNlICd5JzogY2FzZSAnWSc6Ci0JCQly
ZXR1cm4gc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHllcyk7Ci0JCWNhc2UgJ20nOiBj
YXNlICdNJzoKLQkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbW9kKTsK
LQkJY2FzZSAnbic6IGNhc2UgJ04nOgotCQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFu
Z2Uoc3ltLCBubyk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBm
YWxzZTsKLQl9Ci19Ci0KLWJvb2wgc3ltX3NldF9zdHJpbmdfdmFsdWUoc3RydWN0IHN5bWJvbCAq
c3ltLCBjb25zdCBjaGFyICpuZXd2YWwpCi17Ci0JY29uc3QgY2hhciAqb2xkdmFsOwotCWNoYXIg
KnZhbDsKLQlpbnQgc2l6ZTsKLQotCXN3aXRjaCAoc3ltLT50eXBlKSB7Ci0JY2FzZSBTX0JPT0xF
QU46Ci0JY2FzZSBTX1RSSVNUQVRFOgotCQlzd2l0Y2ggKG5ld3ZhbFswXSkgewotCQljYXNlICd5
JzogY2FzZSAnWSc6Ci0JCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIHllcyk7
Ci0JCWNhc2UgJ20nOiBjYXNlICdNJzoKLQkJCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVl
KHN5bSwgbW9kKTsKLQkJY2FzZSAnbic6IGNhc2UgJ04nOgotCQkJcmV0dXJuIHN5bV9zZXRfdHJp
c3RhdGVfdmFsdWUoc3ltLCBubyk7Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCWRlZmF1bHQ6Ci0J
CTsKLQl9Ci0KLQlpZiAoIXN5bV9zdHJpbmdfd2l0aGluX3JhbmdlKHN5bSwgbmV3dmFsKSkKLQkJ
cmV0dXJuIGZhbHNlOwotCi0JaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfVVNFUikpIHsK
LQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7Ci0JCXN5bV9zZXRfY2hhbmdlZChzeW0p
OwotCX0KLQotCW9sZHZhbCA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsKLQlzaXplID0gc3Ry
bGVuKG5ld3ZhbCkgKyAxOwotCWlmIChzeW0tPnR5cGUgPT0gU19IRVggJiYgKG5ld3ZhbFswXSAh
PSAnMCcgfHwgKG5ld3ZhbFsxXSAhPSAneCcgJiYgbmV3dmFsWzFdICE9ICdYJykpKSB7Ci0JCXNp
emUgKz0gMjsKLQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gdmFsID0geG1hbGxvYyhzaXpl
KTsKLQkJKnZhbCsrID0gJzAnOwotCQkqdmFsKysgPSAneCc7Ci0JfSBlbHNlIGlmICghb2xkdmFs
IHx8IHN0cmNtcChvbGR2YWwsIG5ld3ZhbCkpCi0JCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9
IHZhbCA9IHhtYWxsb2Moc2l6ZSk7Ci0JZWxzZQotCQlyZXR1cm4gdHJ1ZTsKLQotCXN0cmNweSh2
YWwsIG5ld3ZhbCk7Ci0JZnJlZSgodm9pZCAqKW9sZHZhbCk7Ci0Jc3ltX2NsZWFyX2FsbF92YWxp
ZCgpOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBGaW5kIHRoZSBkZWZhdWx0IHZhbHVl
IGFzc29jaWF0ZWQgdG8gYSBzeW1ib2wuCi0gKiBGb3IgdHJpc3RhdGUgc3ltYm9sIGhhbmRsZSB0
aGUgbW9kdWxlcz1uIGNhc2UKLSAqIGluIHdoaWNoIGNhc2UgIm0iIGJlY29tZXMgInkiLgotICog
SWYgdGhlIHN5bWJvbCBkb2VzIG5vdCBoYXZlIGFueSBkZWZhdWx0IHRoZW4gZmFsbGJhY2sKLSAq
IHRvIHRoZSBmaXhlZCBkZWZhdWx0IHZhbHVlcy4KLSAqLwotY29uc3QgY2hhciAqc3ltX2dldF9z
dHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpw
cm9wOwotCXN0cnVjdCBzeW1ib2wgKmRzOwotCWNvbnN0IGNoYXIgKnN0cjsKLQl0cmlzdGF0ZSB2
YWw7Ci0KLQlzeW1fY2FsY192aXNpYmlsaXR5KHN5bSk7Ci0Jc3ltX2NhbGNfdmFsdWUobW9kdWxl
c19zeW0pOwotCXZhbCA9IHN5bWJvbF9uby5jdXJyLnRyaTsKLQlzdHIgPSBzeW1ib2xfZW1wdHku
Y3Vyci52YWw7Ci0KLQkvKiBJZiBzeW1ib2wgaGFzIGEgZGVmYXVsdCB2YWx1ZSBsb29rIGl0IHVw
ICovCi0JcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7Ci0JaWYgKHByb3AgIT0gTlVM
TCkgewotCQlzd2l0Y2ggKHN5bS0+dHlwZSkgewotCQljYXNlIFNfQk9PTEVBTjoKLQkJY2FzZSBT
X1RSSVNUQVRFOgotCQkJLyogVGhlIHZpc2liaWxpdHkgbWF5IGxpbWl0IHRoZSB2YWx1ZSBmcm9t
IHllcyA9PiBtb2QgKi8KLQkJCXZhbCA9IEVYUFJfQU5EKGV4cHJfY2FsY192YWx1ZShwcm9wLT5l
eHByKSwgcHJvcC0+dmlzaWJsZS50cmkpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQkvKgot
CQkJICogVGhlIGZvbGxvd2luZyBmYWlscyB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbgotCQkJICog
d2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGZ1cnRoZXIgbGltaXRlZCBieQotCQkJICogdGhlIHZh
bGlkIHJhbmdlLgotCQkJICovCi0JCQlkcyA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsKLQkJCWlm
IChkcyAhPSBOVUxMKSB7Ci0JCQkJc3ltX2NhbGNfdmFsdWUoZHMpOwotCQkJCXN0ciA9IChjb25z
dCBjaGFyICopZHMtPmN1cnIudmFsOwotCQkJfQotCQl9Ci0JfQotCi0JLyogSGFuZGxlIHNlbGVj
dCBzdGF0ZW1lbnRzICovCi0JdmFsID0gRVhQUl9PUih2YWwsIHN5bS0+cmV2X2RlcC50cmkpOwot
Ci0JLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgbW9kdWxlcyBhcmUgbm90IGVuYWJsZWQgKi8K
LQlpZiAodmFsID09IG1vZCkKLQkJaWYgKCFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgbW9k
dWxlc19zeW0tPmN1cnIudHJpID09IG5vKQotCQkJdmFsID0geWVzOwotCi0JLyogdHJhbnNwb3Nl
IG1vZCB0byB5ZXMgaWYgdHlwZSBpcyBib29sICovCi0JaWYgKHN5bS0+dHlwZSA9PSBTX0JPT0xF
QU4gJiYgdmFsID09IG1vZCkKLQkJdmFsID0geWVzOwotCi0JLyogYWRqdXN0IHRoZSBkZWZhdWx0
IHZhbHVlIGlmIHRoaXMgc3ltYm9sIGlzIGltcGxpZWQgYnkgYW5vdGhlciAqLwotCWlmICh2YWwg
PCBzeW0tPmltcGxpZWQudHJpKQotCQl2YWwgPSBzeW0tPmltcGxpZWQudHJpOwotCi0Jc3dpdGNo
IChzeW0tPnR5cGUpIHsKLQljYXNlIFNfQk9PTEVBTjoKLQljYXNlIFNfVFJJU1RBVEU6Ci0JCXN3
aXRjaCAodmFsKSB7Ci0JCWNhc2Ugbm86IHJldHVybiAibiI7Ci0JCWNhc2UgbW9kOiByZXR1cm4g
Im0iOwotCQljYXNlIHllczogcmV0dXJuICJ5IjsKLQkJfQotCWNhc2UgU19JTlQ6Ci0JY2FzZSBT
X0hFWDoKLQkJcmV0dXJuIHN0cjsKLQljYXNlIFNfU1RSSU5HOgotCQlyZXR1cm4gc3RyOwotCWNh
c2UgU19VTktOT1dOOgotCQlicmVhazsKLQl9Ci0JcmV0dXJuICIiOwotfQotCi1jb25zdCBjaGFy
ICpzeW1fZ2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0JdHJpc3RhdGUg
dmFsOwotCi0Jc3dpdGNoIChzeW0tPnR5cGUpIHsKLQljYXNlIFNfQk9PTEVBTjoKLQljYXNlIFNf
VFJJU1RBVEU6Ci0JCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKLQkJc3dpdGNo
ICh2YWwpIHsKLQkJY2FzZSBubzoKLQkJCXJldHVybiAibiI7Ci0JCWNhc2UgbW9kOgotCQkJc3lt
X2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOwotCQkJcmV0dXJuIChtb2R1bGVzX3N5bS0+Y3Vyci50
cmkgPT0gbm8pID8gIm4iIDogIm0iOwotCQljYXNlIHllczoKLQkJCXJldHVybiAieSI7Ci0JCX0K
LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJOwotCX0KLQlyZXR1cm4gKGNvbnN0IGNoYXIgKilzeW0t
PmN1cnIudmFsOwotfQotCi1ib29sIHN5bV9pc19jaGFuZ2FibGUoc3RydWN0IHN5bWJvbCAqc3lt
KQotewotCXJldHVybiBzeW0tPnZpc2libGUgPiBzeW0tPnJldl9kZXAudHJpOwotfQotCi1zdGF0
aWMgdW5zaWduZWQgc3RyaGFzaChjb25zdCBjaGFyICpzKQotewotCS8qIGZudjMyIGhhc2ggKi8K
LQl1bnNpZ25lZCBoYXNoID0gMjE2NjEzNjI2MVU7Ci0JZm9yICg7ICpzOyBzKyspCi0JCWhhc2gg
PSAoaGFzaCBeICpzKSAqIDB4MDEwMDAxOTM7Ci0JcmV0dXJuIGhhc2g7Ci19Ci0KLXN0cnVjdCBz
eW1ib2wgKnN5bV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKQotewotCXN0cnVj
dCBzeW1ib2wgKnN5bWJvbDsKLQljaGFyICpuZXdfbmFtZTsKLQlpbnQgaGFzaDsKLQotCWlmIChu
YW1lKSB7Ci0JCWlmIChuYW1lWzBdICYmICFuYW1lWzFdKSB7Ci0JCQlzd2l0Y2ggKG5hbWVbMF0p
IHsKLQkJCWNhc2UgJ3knOiByZXR1cm4gJnN5bWJvbF95ZXM7Ci0JCQljYXNlICdtJzogcmV0dXJu
ICZzeW1ib2xfbW9kOwotCQkJY2FzZSAnbic6IHJldHVybiAmc3ltYm9sX25vOwotCQkJfQotCQl9
Ci0JCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hTSVpFOwotCi0JCWZvciAoc3lt
Ym9sID0gc3ltYm9sX2hhc2hbaGFzaF07IHN5bWJvbDsgc3ltYm9sID0gc3ltYm9sLT5uZXh0KSB7
Ci0JCQlpZiAoc3ltYm9sLT5uYW1lICYmCi0JCQkgICAgIXN0cmNtcChzeW1ib2wtPm5hbWUsIG5h
bWUpICYmCi0JCQkgICAgKGZsYWdzID8gc3ltYm9sLT5mbGFncyAmIGZsYWdzCi0JCQkJICAgOiAh
KHN5bWJvbC0+ZmxhZ3MgJiAoU1lNQk9MX0NPTlNUfFNZTUJPTF9DSE9JQ0UpKSkpCi0JCQkJcmV0
dXJuIHN5bWJvbDsKLQkJfQotCQluZXdfbmFtZSA9IHhzdHJkdXAobmFtZSk7Ci0JfSBlbHNlIHsK
LQkJbmV3X25hbWUgPSBOVUxMOwotCQloYXNoID0gMDsKLQl9Ci0KLQlzeW1ib2wgPSB4bWFsbG9j
KHNpemVvZigqc3ltYm9sKSk7Ci0JbWVtc2V0KHN5bWJvbCwgMCwgc2l6ZW9mKCpzeW1ib2wpKTsK
LQlzeW1ib2wtPm5hbWUgPSBuZXdfbmFtZTsKLQlzeW1ib2wtPnR5cGUgPSBTX1VOS05PV047Ci0J
c3ltYm9sLT5mbGFncyB8PSBmbGFnczsKLQotCXN5bWJvbC0+bmV4dCA9IHN5bWJvbF9oYXNoW2hh
c2hdOwotCXN5bWJvbF9oYXNoW2hhc2hdID0gc3ltYm9sOwotCi0JcmV0dXJuIHN5bWJvbDsKLX0K
LQotc3RydWN0IHN5bWJvbCAqc3ltX2ZpbmQoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3Qg
c3ltYm9sICpzeW1ib2wgPSBOVUxMOwotCWludCBoYXNoID0gMDsKLQotCWlmICghbmFtZSkKLQkJ
cmV0dXJuIE5VTEw7Ci0KLQlpZiAobmFtZVswXSAmJiAhbmFtZVsxXSkgewotCQlzd2l0Y2ggKG5h
bWVbMF0pIHsKLQkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3llczsKLQkJY2FzZSAnbSc6IHJl
dHVybiAmc3ltYm9sX21vZDsKLQkJY2FzZSAnbic6IHJldHVybiAmc3ltYm9sX25vOwotCQl9Ci0J
fQotCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hTSVpFOwotCi0JZm9yIChzeW1i
b2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wtPm5leHQpIHsK
LQkJaWYgKHN5bWJvbC0+bmFtZSAmJgotCQkgICAgIXN0cmNtcChzeW1ib2wtPm5hbWUsIG5hbWUp
ICYmCi0JCSAgICAhKHN5bWJvbC0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpKQotCQkJCWJyZWFrOwot
CX0KLQotCXJldHVybiBzeW1ib2w7Ci19Ci0KLWNvbnN0IGNoYXIgKnN5bV9lc2NhcGVfc3RyaW5n
X3ZhbHVlKGNvbnN0IGNoYXIgKmluKQotewotCWNvbnN0IGNoYXIgKnA7Ci0Jc2l6ZV90IHJlc2xl
bjsKLQljaGFyICpyZXM7Ci0Jc2l6ZV90IGw7Ci0KLQlyZXNsZW4gPSBzdHJsZW4oaW4pICsgc3Ry
bGVuKCJcIlwiIikgKyAxOwotCi0JcCA9IGluOwotCWZvciAoOzspIHsKLQkJbCA9IHN0cmNzcG4o
cCwgIlwiXFwiKTsKLQkJcCArPSBsOwotCi0JCWlmIChwWzBdID09ICdcMCcpCi0JCQlicmVhazsK
LQotCQlyZXNsZW4rKzsKLQkJcCsrOwotCX0KLQotCXJlcyA9IHhtYWxsb2MocmVzbGVuKTsKLQly
ZXNbMF0gPSAnXDAnOwotCi0Jc3RyY2F0KHJlcywgIlwiIik7Ci0KLQlwID0gaW47Ci0JZm9yICg7
OykgewotCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOwotCQlzdHJuY2F0KHJlcywgcCwgbCk7Ci0J
CXAgKz0gbDsKLQotCQlpZiAocFswXSA9PSAnXDAnKQotCQkJYnJlYWs7Ci0KLQkJc3RyY2F0KHJl
cywgIlxcIik7Ci0JCXN0cm5jYXQocmVzLCBwKyssIDEpOwotCX0KLQotCXN0cmNhdChyZXMsICJc
IiIpOwotCXJldHVybiByZXM7Ci19Ci0KLXN0cnVjdCBzeW1fbWF0Y2ggewotCXN0cnVjdCBzeW1i
b2wJKnN5bTsKLQlvZmZfdAkJc28sIGVvOwotfTsKLQotLyogQ29tcGFyZSBtYXRjaGVkIHN5bWJv
bHMgYXMgdGh1czoKLSAqIC0gZmlyc3QsIHN5bWJvbHMgdGhhdCBtYXRjaCBleGFjdGx5Ci0gKiAt
IHRoZW4sIGFscGhhYmV0aWNhbCBzb3J0Ci0gKi8KLXN0YXRpYyBpbnQgc3ltX3JlbF9jb21wKGNv
bnN0IHZvaWQgKnN5bTEsIGNvbnN0IHZvaWQgKnN5bTIpCi17Ci0JY29uc3Qgc3RydWN0IHN5bV9t
YXRjaCAqczEgPSBzeW0xOwotCWNvbnN0IHN0cnVjdCBzeW1fbWF0Y2ggKnMyID0gc3ltMjsKLQlp
bnQgZXhhY3QxLCBleGFjdDI7Ci0KLQkvKiBFeGFjdCBtYXRjaDoKLQkgKiAtIGlmIG1hdGNoZWQg
bGVuZ3RoIG9uIHN5bWJvbCBzMSBpcyB0aGUgbGVuZ3RoIG9mIHRoYXQgc3ltYm9sLAotCSAqICAg
dGhlbiB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdDsKLQkgKiAtIGlmIG1hdGNoZWQgbGVu
Z3RoIG9uIHN5bWJvbCBzMiBpcyB0aGUgbGVuZ3RoIG9mIHRoYXQgc3ltYm9sLAotCSAqICAgdGhl
biB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdC4KLQkgKiBOb3RlOiBzaW5jZSB0aGUgc2Vh
cmNoIGNhbiBiZSBhIHJlZ2V4cCwgYm90aCBzeW1ib2xzIG1heSBtYXRjaAotCSAqIGV4YWN0bHk7
IGlmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGNhbid0IGRlY2lkZSB3aGljaCBjb21lcyBmaXJzdCwK
LQkgKiBhbmQgd2UgZmFsbGJhY2sgdG8gc29ydGluZyBhbHBoYWJldGljYWxseS4KLQkgKi8KLQll
eGFjdDEgPSAoczEtPmVvIC0gczEtPnNvKSA9PSBzdHJsZW4oczEtPnN5bS0+bmFtZSk7Ci0JZXhh
Y3QyID0gKHMyLT5lbyAtIHMyLT5zbykgPT0gc3RybGVuKHMyLT5zeW0tPm5hbWUpOwotCWlmIChl
eGFjdDEgJiYgIWV4YWN0MikKLQkJcmV0dXJuIC0xOwotCWlmICghZXhhY3QxICYmIGV4YWN0MikK
LQkJcmV0dXJuIDE7Ci0KLQkvKiBBcyBhIGZhbGxiYWNrLCBzb3J0IHN5bWJvbHMgYWxwaGFiZXRp
Y2FsbHkgKi8KLQlyZXR1cm4gc3RyY21wKHMxLT5zeW0tPm5hbWUsIHMyLT5zeW0tPm5hbWUpOwot
fQotCi1zdHJ1Y3Qgc3ltYm9sICoqc3ltX3JlX3NlYXJjaChjb25zdCBjaGFyICpwYXR0ZXJuKQot
ewotCXN0cnVjdCBzeW1ib2wgKnN5bSwgKipzeW1fYXJyID0gTlVMTDsKLQlzdHJ1Y3Qgc3ltX21h
dGNoICpzeW1fbWF0Y2hfYXJyID0gTlVMTDsKLQlpbnQgaSwgY250LCBzaXplOwotCXJlZ2V4X3Qg
cmU7Ci0JcmVnbWF0Y2hfdCBtYXRjaFsxXTsKLQotCWNudCA9IHNpemUgPSAwOwotCS8qIFNraXAg
aWYgZW1wdHkgKi8KLQlpZiAoc3RybGVuKHBhdHRlcm4pID09IDApCi0JCXJldHVybiBOVUxMOwot
CWlmIChyZWdjb21wKCZyZSwgcGF0dGVybiwgUkVHX0VYVEVOREVEfFJFR19JQ0FTRSkpCi0JCXJl
dHVybiBOVUxMOwotCi0JZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgewotCQlpZiAoc3ltLT5mbGFn
cyAmIFNZTUJPTF9DT05TVCB8fCAhc3ltLT5uYW1lKQotCQkJY29udGludWU7Ci0JCWlmIChyZWdl
eGVjKCZyZSwgc3ltLT5uYW1lLCAxLCBtYXRjaCwgMCkpCi0JCQljb250aW51ZTsKLQkJaWYgKGNu
dCA+PSBzaXplKSB7Ci0JCQl2b2lkICp0bXA7Ci0JCQlzaXplICs9IDE2OwotCQkJdG1wID0gcmVh
bGxvYyhzeW1fbWF0Y2hfYXJyLCBzaXplICogc2l6ZW9mKHN0cnVjdCBzeW1fbWF0Y2gpKTsKLQkJ
CWlmICghdG1wKQotCQkJCWdvdG8gc3ltX3JlX3NlYXJjaF9mcmVlOwotCQkJc3ltX21hdGNoX2Fy
ciA9IHRtcDsKLQkJfQotCQlzeW1fY2FsY192YWx1ZShzeW0pOwotCQkvKiBBcyByZWdleGVjIHJl
dHVybmVkIDAsIHdlIGtub3cgd2UgaGF2ZSBhIG1hdGNoLCBzbwotCQkgKiB3ZSBjYW4gdXNlIG1h
dGNoWzBdLnJtX1tzZV1vIHdpdGhvdXQgZnVydGhlciBjaGVja3MKLQkJICovCi0JCXN5bV9tYXRj
aF9hcnJbY250XS5zbyA9IG1hdGNoWzBdLnJtX3NvOwotCQlzeW1fbWF0Y2hfYXJyW2NudF0uZW8g
PSBtYXRjaFswXS5ybV9lbzsKLQkJc3ltX21hdGNoX2FycltjbnQrK10uc3ltID0gc3ltOwotCX0K
LQlpZiAoc3ltX21hdGNoX2FycikgewotCQlxc29ydChzeW1fbWF0Y2hfYXJyLCBjbnQsIHNpemVv
ZihzdHJ1Y3Qgc3ltX21hdGNoKSwgc3ltX3JlbF9jb21wKTsKLQkJc3ltX2FyciA9IG1hbGxvYygo
Y250KzEpICogc2l6ZW9mKHN0cnVjdCBzeW1ib2wgKikpOwotCQlpZiAoIXN5bV9hcnIpCi0JCQln
b3RvIHN5bV9yZV9zZWFyY2hfZnJlZTsKLQkJZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKQotCQkJ
c3ltX2FycltpXSA9IHN5bV9tYXRjaF9hcnJbaV0uc3ltOwotCQlzeW1fYXJyW2NudF0gPSBOVUxM
OwotCX0KLXN5bV9yZV9zZWFyY2hfZnJlZToKLQkvKiBzeW1fbWF0Y2hfYXJyIGNhbiBiZSBOVUxM
IGlmIG5vIG1hdGNoLCBidXQgZnJlZShOVUxMKSBpcyBPSyAqLwotCWZyZWUoc3ltX21hdGNoX2Fy
cik7Ci0JcmVnZnJlZSgmcmUpOwotCi0JcmV0dXJuIHN5bV9hcnI7Ci19Ci0KLS8qCi0gKiBXaGVu
IHdlIGNoZWNrIGZvciByZWN1cnNpdmUgZGVwZW5kZW5jaWVzIHdlIHVzZSBhIHN0YWNrIHRvIHNh
dmUKLSAqIGN1cnJlbnQgc3RhdGUgc28gd2UgY2FuIHByaW50IG91dCByZWxldmFudCBpbmZvIHRv
IHVzZXIuCi0gKiBUaGUgZW50cmllcyBhcmUgbG9jYXRlZCBvbiB0aGUgY2FsbCBzdGFjayBzbyBu
byBuZWVkIHRvIGZyZWUgbWVtb3J5LgotICogTm90ZSBpbnNlcnQoKSByZW1vdmUoKSBtdXN0IGFs
d2F5cyBtYXRjaCB0byBwcm9wZXJseSBjbGVhciB0aGUgc3RhY2suCi0gKi8KLXN0YXRpYyBzdHJ1
Y3QgZGVwX3N0YWNrIHsKLQlzdHJ1Y3QgZGVwX3N0YWNrICpwcmV2LCAqbmV4dDsKLQlzdHJ1Y3Qg
c3ltYm9sICpzeW07Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwotCXN0cnVjdCBleHByICoqZXhw
cjsKLX0gKmNoZWNrX3RvcDsKLQotc3RhdGljIHZvaWQgZGVwX3N0YWNrX2luc2VydChzdHJ1Y3Qg
ZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAqc3ltKQotewotCW1lbXNldChzdGFjaywg
MCwgc2l6ZW9mKCpzdGFjaykpOwotCWlmIChjaGVja190b3ApCi0JCWNoZWNrX3RvcC0+bmV4dCA9
IHN0YWNrOwotCXN0YWNrLT5wcmV2ID0gY2hlY2tfdG9wOwotCXN0YWNrLT5zeW0gPSBzeW07Ci0J
Y2hlY2tfdG9wID0gc3RhY2s7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlcF9zdGFja19yZW1vdmUodm9p
ZCkKLXsKLQljaGVja190b3AgPSBjaGVja190b3AtPnByZXY7Ci0JaWYgKGNoZWNrX3RvcCkKLQkJ
Y2hlY2tfdG9wLT5uZXh0ID0gTlVMTDsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIHdlIGhhdmUg
ZGV0ZWN0ZWQgYSByZWN1cnNpdmUgZGVwZW5kZW5jeS4KLSAqIGNoZWNrX3RvcCBwb2ludCB0byB0
aGUgdG9wIG9mIHRoZSBzdGFjdCBzbyB3ZSB1c2UKLSAqIHRoZSAtPnByZXYgcG9pbnRlciB0byBs
b2NhdGUgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2suCi0gKi8KLXN0YXRpYyB2b2lkIHN5bV9jaGVj
a19wcmludF9yZWN1cnNpdmUoc3RydWN0IHN5bWJvbCAqbGFzdF9zeW0pCi17Ci0Jc3RydWN0IGRl
cF9zdGFjayAqc3RhY2s7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltLCAqbmV4dF9zeW07Ci0Jc3RydWN0
IG1lbnUgKm1lbnUgPSBOVUxMOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZGVw
X3N0YWNrIGN2X3N0YWNrOwotCi0JaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUobGFzdF9zeW0pKSB7
Ci0JCWRlcF9zdGFja19pbnNlcnQoJmN2X3N0YWNrLCBsYXN0X3N5bSk7Ci0JCWxhc3Rfc3ltID0g
cHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3AobGFzdF9zeW0pKTsKLQl9Ci0KLQlm
b3IgKHN0YWNrID0gY2hlY2tfdG9wOyBzdGFjayAhPSBOVUxMOyBzdGFjayA9IHN0YWNrLT5wcmV2
KQotCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKLQkJCWJyZWFrOwotCWlmICghc3RhY2sp
IHsKLQkJZnByaW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVy
cm9yXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoOyBzdGFjazsgc3RhY2sgPSBzdGFjay0+
bmV4dCkgewotCQlzeW0gPSBzdGFjay0+c3ltOwotCQluZXh0X3N5bSA9IHN0YWNrLT5uZXh0ID8g
c3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOwotCQlwcm9wID0gc3RhY2stPnByb3A7Ci0JCWlm
IChwcm9wID09IE5VTEwpCi0JCQlwcm9wID0gc3RhY2stPnN5bS0+cHJvcDsKLQotCQkvKiBmb3Ig
Y2hvaWNlIHZhbHVlcyBmaW5kIHRoZSBtZW51IGVudHJ5ICh1c2VkIGJlbG93KSAqLwotCQlpZiAo
c3ltX2lzX2Nob2ljZShzeW0pIHx8IHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgewotCQkJZm9y
IChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgewotCQkJCW1lbnUg
PSBwcm9wLT5tZW51OwotCQkJCWlmIChwcm9wLT5tZW51KQotCQkJCQlicmVhazsKLQkJCX0KLQkJ
fQotCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6
JWQ6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIVxuIiwKLQkJCQlwcm9wLT5m
aWxlLT5uYW1lLCBwcm9wLT5saW5lbm8pOwotCi0JCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsK
LQkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRjaG9pY2UgJXMgY29udGFpbnMgc3ltYm9sICVz
XG4iLAotCQkJCW1lbnUtPmZpbGUtPm5hbWUsIG1lbnUtPmxpbmVubywKLQkJCQlzeW0tPm5hbWUg
PyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAotCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0t
Pm5hbWUgOiAiPGNob2ljZT4iKTsKLQkJfSBlbHNlIGlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5
bSkpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgcGFydCBvZiBj
aG9pY2UgJXNcbiIsCi0JCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5vLAotCQkJCXN5
bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCi0JCQkJbmV4dF9zeW0tPm5hbWUgPyBu
ZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOwotCQl9IGVsc2UgaWYgKHN0YWNrLT5leHByID09
ICZzeW0tPmRpcl9kZXAuZXhwcikgewotCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJv
bCAlcyBkZXBlbmRzIG9uICVzXG4iLAotCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVu
bywKLQkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAotCQkJCW5leHRfc3lt
LT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsKLQkJfSBlbHNlIGlmIChzdGFj
ay0+ZXhwciA9PSAmc3ltLT5yZXZfZGVwLmV4cHIpIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiJXM6
JWQ6XHRzeW1ib2wgJXMgaXMgc2VsZWN0ZWQgYnkgJXNcbiIsCi0JCQkJcHJvcC0+ZmlsZS0+bmFt
ZSwgcHJvcC0+bGluZW5vLAotCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIs
Ci0JCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOwotCQl9
IGVsc2UgaWYgKHN0YWNrLT5leHByID09ICZzeW0tPmltcGxpZWQuZXhwcikgewotCQkJZnByaW50
ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBpbXBsaWVkIGJ5ICVzXG4iLAotCQkJCXBy
b3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKLQkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUg
OiAiPGNob2ljZT4iLAotCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNo
b2ljZT4iKTsKLQkJfSBlbHNlIGlmIChzdGFjay0+ZXhwcikgewotCQkJZnByaW50ZihzdGRlcnIs
ICIlczolZDpcdHN5bWJvbCAlcyAlcyB2YWx1ZSBjb250YWlucyAlc1xuIiwKLQkJCQlwcm9wLT5m
aWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCi0JCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxj
aG9pY2U+IiwKLQkJCQlwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSksCi0JCQkJbmV4dF9z
eW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOwotCQl9IGVsc2UgewotCQkJ
ZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyAlcyBpcyB2aXNpYmxlIGRlcGVuZGlu
ZyBvbiAlc1xuIiwKLQkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCi0JCQkJc3lt
LT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKLQkJCQlwcm9wX2dldF90eXBlX25hbWUo
cHJvcC0+dHlwZSksCi0JCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hv
aWNlPiIpOwotCQl9Ci0JfQotCi0JZnByaW50ZihzdGRlcnIsCi0JCSJGb3IgYSByZXNvbHV0aW9u
IHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0XG4iCi0J
CSJzdWJzZWN0aW9uIFwiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9uc1wi
XG4iCi0JCSJcbiIpOwotCi0JaWYgKGNoZWNrX3RvcCA9PSAmY3Zfc3RhY2spCi0JCWRlcF9zdGFj
a19yZW1vdmUoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19leHByX2Rl
cHMoc3RydWN0IGV4cHIgKmUpCi17Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCi0JaWYgKCFlKQot
CQlyZXR1cm4gTlVMTDsKLQlzd2l0Y2ggKGUtPnR5cGUpIHsKLQljYXNlIEVfT1I6Ci0JY2FzZSBF
X0FORDoKLQkJc3ltID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5sZWZ0LmV4cHIpOwotCQlpZiAo
c3ltKQotCQkJcmV0dXJuIHN5bTsKLQkJcmV0dXJuIHN5bV9jaGVja19leHByX2RlcHMoZS0+cmln
aHQuZXhwcik7Ci0JY2FzZSBFX05PVDoKLQkJcmV0dXJuIHN5bV9jaGVja19leHByX2RlcHMoZS0+
bGVmdC5leHByKTsKLQljYXNlIEVfRVFVQUw6Ci0JY2FzZSBFX0dFUToKLQljYXNlIEVfR1RIOgot
CWNhc2UgRV9MRVE6Ci0JY2FzZSBFX0xUSDoKLQljYXNlIEVfVU5FUVVBTDoKLQkJc3ltID0gc3lt
X2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOwotCQlpZiAoc3ltKQotCQkJcmV0dXJuIHN5bTsKLQkJ
cmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPnJpZ2h0LnN5bSk7Ci0JY2FzZSBFX1NZTUJPTDoKLQkJ
cmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPmxlZnQuc3ltKTsKLQlkZWZhdWx0OgotCQlicmVhazsK
LQl9Ci0JZnByaW50ZihzdGRlcnIsICJPb3BzISBIb3cgdG8gY2hlY2sgJWQ/XG4iLCBlLT50eXBl
KTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotLyogcmV0dXJuIE5VTEwgd2hlbiBkZXBlbmRlbmNpZXMg
YXJlIE9LICovCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX3N5bV9kZXBzKHN0cnVj
dCBzeW1ib2wgKnN5bSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW0yOwotCXN0cnVjdCBwcm9wZXJ0
eSAqcHJvcDsKLQlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOwotCi0JZGVwX3N0YWNrX2luc2VydCgm
c3RhY2ssIHN5bSk7Ci0KLQlzdGFjay5leHByID0gJnN5bS0+ZGlyX2RlcC5leHByOwotCXN5bTIg
PSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+ZGlyX2RlcC5leHByKTsKLQlpZiAoc3ltMikKLQkJ
Z290byBvdXQ7Ci0KLQlzdGFjay5leHByID0gJnN5bS0+cmV2X2RlcC5leHByOwotCXN5bTIgPSBz
eW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+cmV2X2RlcC5leHByKTsKLQlpZiAoc3ltMikKLQkJZ290
byBvdXQ7Ci0KLQlzdGFjay5leHByID0gJnN5bS0+aW1wbGllZC5leHByOwotCXN5bTIgPSBzeW1f
Y2hlY2tfZXhwcl9kZXBzKHN5bS0+aW1wbGllZC5leHByKTsKLQlpZiAoc3ltMikKLQkJZ290byBv
dXQ7Ci0KLQlzdGFjay5leHByID0gTlVMTDsKLQotCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJv
cDsgcHJvcCA9IHByb3AtPm5leHQpIHsKLQkJaWYgKHByb3AtPnR5cGUgPT0gUF9DSE9JQ0UgfHwg
cHJvcC0+dHlwZSA9PSBQX1NFTEVDVCB8fAotCQkgICAgcHJvcC0+dHlwZSA9PSBQX0lNUExZKQot
CQkJY29udGludWU7Ci0JCXN0YWNrLnByb3AgPSBwcm9wOwotCQlzeW0yID0gc3ltX2NoZWNrX2V4
cHJfZGVwcyhwcm9wLT52aXNpYmxlLmV4cHIpOwotCQlpZiAoc3ltMikKLQkJCWJyZWFrOwotCQlp
ZiAocHJvcC0+dHlwZSAhPSBQX0RFRkFVTFQgfHwgc3ltX2lzX2Nob2ljZShzeW0pKQotCQkJY29u
dGludWU7Ci0JCXN0YWNrLmV4cHIgPSAmcHJvcC0+ZXhwcjsKLQkJc3ltMiA9IHN5bV9jaGVja19l
eHByX2RlcHMocHJvcC0+ZXhwcik7Ci0JCWlmIChzeW0yKQotCQkJYnJlYWs7Ci0JCXN0YWNrLmV4
cHIgPSBOVUxMOwotCX0KLQotb3V0OgotCWRlcF9zdGFja19yZW1vdmUoKTsKLQotCXJldHVybiBz
eW0yOwotfQotCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2Nob2ljZV9kZXBzKHN0
cnVjdCBzeW1ib2wgKmNob2ljZSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpzeW0yOwotCXN0
cnVjdCBwcm9wZXJ0eSAqcHJvcDsKLQlzdHJ1Y3QgZXhwciAqZTsKLQlzdHJ1Y3QgZGVwX3N0YWNr
IHN0YWNrOwotCi0JZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIGNob2ljZSk7Ci0KLQlwcm9wID0g
c3ltX2dldF9jaG9pY2VfcHJvcChjaG9pY2UpOwotCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJv
cC0+ZXhwciwgZSwgc3ltKQotCQlzeW0tPmZsYWdzIHw9IChTWU1CT0xfQ0hFQ0sgfCBTWU1CT0xf
Q0hFQ0tFRCk7Ci0KLQljaG9pY2UtPmZsYWdzIHw9IChTWU1CT0xfQ0hFQ0sgfCBTWU1CT0xfQ0hF
Q0tFRCk7Ci0Jc3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhjaG9pY2UpOwotCWNob2ljZS0+Zmxh
Z3MgJj0gflNZTUJPTF9DSEVDSzsKLQlpZiAoc3ltMikKLQkJZ290byBvdXQ7Ci0KLQlleHByX2xp
c3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgewotCQlzeW0yID0gc3ltX2NoZWNr
X3N5bV9kZXBzKHN5bSk7Ci0JCWlmIChzeW0yKQotCQkJYnJlYWs7Ci0JfQotb3V0OgotCWV4cHJf
bGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQotCQlzeW0tPmZsYWdzICY9IH5T
WU1CT0xfQ0hFQ0s7Ci0KLQlpZiAoc3ltMiAmJiBzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bTIpICYm
Ci0JICAgIHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bTIpKSA9PSBjaG9p
Y2UpCi0JCXN5bTIgPSBjaG9pY2U7Ci0KLQlkZXBfc3RhY2tfcmVtb3ZlKCk7Ci0KLQlyZXR1cm4g
c3ltMjsKLX0KLQotc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAq
c3ltKQotewotCXN0cnVjdCBzeW1ib2wgKnN5bTI7Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwot
Ci0JaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0spIHsKLQkJc3ltX2NoZWNrX3ByaW50X3Jl
Y3Vyc2l2ZShzeW0pOwotCQlyZXR1cm4gc3ltOwotCX0KLQlpZiAoc3ltLT5mbGFncyAmIFNZTUJP
TF9DSEVDS0VEKQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5
bSkpIHsKLQkJc3RydWN0IGRlcF9zdGFjayBzdGFjazsKLQotCQkvKiBmb3IgY2hvaWNlIGdyb3Vw
cyBzdGFydCB0aGUgY2hlY2sgd2l0aCBtYWluIGNob2ljZSBzeW1ib2wgKi8KLQkJZGVwX3N0YWNr
X2luc2VydCgmc3RhY2ssIHN5bSk7Ci0JCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7
Ci0JCXN5bTIgPSBzeW1fY2hlY2tfZGVwcyhwcm9wX2dldF9zeW1ib2wocHJvcCkpOwotCQlkZXBf
c3RhY2tfcmVtb3ZlKCk7Ci0JfSBlbHNlIGlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsKLQkJc3lt
MiA9IHN5bV9jaGVja19jaG9pY2VfZGVwcyhzeW0pOwotCX0gZWxzZSB7Ci0JCXN5bS0+ZmxhZ3Mg
fD0gKFNZTUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsKLQkJc3ltMiA9IHN5bV9jaGVja19z
eW1fZGVwcyhzeW0pOwotCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7Ci0JfQotCi0JcmV0
dXJuIHN5bTI7Ci19Ci0KLXN0cnVjdCBwcm9wZXJ0eSAqcHJvcF9hbGxvYyhlbnVtIHByb3BfdHlw
ZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOwot
CXN0cnVjdCBwcm9wZXJ0eSAqKnByb3BwOwotCi0JcHJvcCA9IHhtYWxsb2Moc2l6ZW9mKCpwcm9w
KSk7Ci0JbWVtc2V0KHByb3AsIDAsIHNpemVvZigqcHJvcCkpOwotCXByb3AtPnR5cGUgPSB0eXBl
OwotCXByb3AtPnN5bSA9IHN5bTsKLQlwcm9wLT5maWxlID0gY3VycmVudF9maWxlOwotCXByb3At
PmxpbmVubyA9IHpjb25mX2xpbmVubygpOwotCi0JLyogYXBwZW5kIHByb3BlcnR5IHRvIHRoZSBw
cm9wIGxpc3Qgb2Ygc3ltYm9sICovCi0JaWYgKHN5bSkgewotCQlmb3IgKHByb3BwID0gJnN5bS0+
cHJvcDsgKnByb3BwOyBwcm9wcCA9ICYoKnByb3BwKS0+bmV4dCkKLQkJCTsKLQkJKnByb3BwID0g
cHJvcDsKLQl9Ci0KLQlyZXR1cm4gcHJvcDsKLX0KLQotc3RydWN0IHN5bWJvbCAqcHJvcF9nZXRf
c3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCkKLXsKLQlpZiAocHJvcC0+ZXhwciAmJiAocHJv
cC0+ZXhwci0+dHlwZSA9PSBFX1NZTUJPTCB8fAotCQkJICAgcHJvcC0+ZXhwci0+dHlwZSA9PSBF
X0xJU1QpKQotCQlyZXR1cm4gcHJvcC0+ZXhwci0+bGVmdC5zeW07Ci0JcmV0dXJuIE5VTEw7Ci19
Ci0KLWNvbnN0IGNoYXIgKnByb3BfZ2V0X3R5cGVfbmFtZShlbnVtIHByb3BfdHlwZSB0eXBlKQot
ewotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgUF9QUk9NUFQ6Ci0JCXJldHVybiAicHJvbXB0IjsK
LQljYXNlIFBfQ09NTUVOVDoKLQkJcmV0dXJuICJjb21tZW50IjsKLQljYXNlIFBfTUVOVToKLQkJ
cmV0dXJuICJtZW51IjsKLQljYXNlIFBfREVGQVVMVDoKLQkJcmV0dXJuICJkZWZhdWx0IjsKLQlj
YXNlIFBfQ0hPSUNFOgotCQlyZXR1cm4gImNob2ljZSI7Ci0JY2FzZSBQX1NFTEVDVDoKLQkJcmV0
dXJuICJzZWxlY3QiOwotCWNhc2UgUF9JTVBMWToKLQkJcmV0dXJuICJpbXBseSI7Ci0JY2FzZSBQ
X1JBTkdFOgotCQlyZXR1cm4gInJhbmdlIjsKLQljYXNlIFBfU1lNQk9MOgotCQlyZXR1cm4gInN5
bWJvbCI7Ci0JY2FzZSBQX1VOS05PV046Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gInVua25vd24i
OwotfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUv
S2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyMDc2MWUuLjAwMDAwMDAKLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZworKysgL2Rldi9udWxs
CkBAIC0xLDUyICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLQot
Y29uZmlnIEEKLQlib29sICJBIgotCWRlZmF1bHQgeQotCi1jb25maWcgQTAKLQlib29sICJBMCIK
LQlkZXBlbmRzIG9uIEEKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIGRlcGVuZHMgb24gQSwg
c28gc2hvdWxkIGJlIGEgc3VibWVudSBvZiBBLgotCi1jb25maWcgQTBfMAotCWJvb2wgIkExXzAi
Ci0JZGVwZW5kcyBvbiBBMAotCWhlbHAKLQkgIFN1Ym1lbnVzIGFyZSBjcmVhdGVkIHJlY3Vyc2l2
ZWx5LgotCSAgVGhpcyBzaG91bGQgYmUgYSBzdWJtZW51IG9mIEEwLgotCi1jb25maWcgQTEKLQli
b29sICJBMSIKLQlkZXBlbmRzIG9uIEEKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIHNob3Vs
ZCBsaW5lIHVwIHdpdGggQTAuCi0KLWNob2ljZQotCXByb21wdCAiY2hvaWNlIgotCWRlcGVuZHMg
b24gQTEKLQloZWxwCi0JICBDaG9pY2Ugc2hvdWxkIGJlY29tZSBhIHN1Ym1lbnUgYXMgd2VsbC4K
LQotY29uZmlnIEExXzAKLQlib29sICJBMV8wIgotCi1jb25maWcgQTFfMQotCWJvb2wgIkExXzEi
Ci0KLWVuZGNob2ljZQotCi1jb25maWcgQgotCWJvb2wgIkIiCi0JaGVscAotCSAgVGhpcyBpcyBp
bmRlcGVuZGVudCBvZiBBLgotCi1jb25maWcgQwotCWJvb2wgIkMiCi0JZGVwZW5kcyBvbiBBCi0J
aGVscAotCSAgVGhpcyBkZXBlbmRzIG9uIEEsIGJ1dCBub3QgYSBjb25zZWN1dGl2ZSBpdGVtLCBz
byBjYW4vc2hvdWxkIG5vdAotCSAgYmUgYSBzdWJtZW51LgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMjVhYmQ5Mi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAg
QEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLSIiIgotQ3JlYXRlIHN1Ym1l
bnUgZm9yIHN5bWJvbHMgdGhhdCBkZXBlbmQgb24gdGhlIHByZWNlZGluZyBvbmUuCi0KLUlmIGEg
c3ltYm9scyBoYXMgZGVwZW5kZW5jeSBvbiB0aGUgcHJlY2VkaW5nIHN5bWJvbCwgdGhlIG1lbnUg
ZW50cnkKLXNob3VsZCBiZWNvbWUgdGhlIHN1Ym1lbnUgb2YgdGhlIHByZWNlZGluZyBvbmUsIGFu
ZCBkaXNwbGF5ZWQgd2l0aAotZGVlcGVyIGluZGVudGF0aW9uLgotIiIiCi0KLQotZGVmIHRlc3Qo
Y29uZik6Ci0gICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0gMAotICAgIGFzc2VydCBj
b25mLnN0ZG91dF9jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0JykKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY1MjM2Zi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQKKysrIC9kZXYvbnVs
bApAQCAtMSwxMCArMCwwIEBACi1BIChBKSBbWS9uLz9dIChORVcpIAotICBBMCAoQTApIFtZL24v
P10gKE5FVykgCi0gICAgQTFfMCAoQTBfMCkgW04veS8/XSAoTkVXKSAKLSAgQTEgKEExKSBbWS9u
Lz9dIChORVcpIAotICAgIGNob2ljZQotICAgID4gMS4gQTFfMCAoQTFfMCkgKE5FVykKLSAgICAg
IDIuIEExXzEgKEExXzEpIChORVcpCi0gICAgY2hvaWNlWzEtMj9dOiAKLUIgKEIpIFtOL3kvP10g
KE5FVykgCi1DIChDKSBbTi95Lz9dIChORVcpIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hv
aWNlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0MTIyMDUuLjAwMDAw
MDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvS2NvbmZpZworKysgL2Rl
di9udWxsCkBAIC0xLDU2ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjAKLQotY29uZmlnIE1PRFVMRVMKLQlib29sICJFbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1cHBv
cnQiCi0Jb3B0aW9uIG1vZHVsZXMKLQlkZWZhdWx0IHkKLQotY2hvaWNlCi0JcHJvbXB0ICJib29s
ZWFuIGNob2ljZSIKLQlkZWZhdWx0IEJPT0xfQ0hPSUNFMQotCi1jb25maWcgQk9PTF9DSE9JQ0Uw
Ci0JYm9vbCAiY2hvaWNlIDAiCi0KLWNvbmZpZyBCT09MX0NIT0lDRTEKLQlib29sICJjaG9pY2Ug
MSIKLQotZW5kY2hvaWNlCi0KLWNob2ljZQotCXByb21wdCAib3B0aW9uYWwgYm9vbGVhbiBjaG9p
Y2UiCi0Jb3B0aW9uYWwKLQlkZWZhdWx0IE9QVF9CT09MX0NIT0lDRTEKLQotY29uZmlnIE9QVF9C
T09MX0NIT0lDRTAKLQlib29sICJjaG9pY2UgMCIKLQotY29uZmlnIE9QVF9CT09MX0NIT0lDRTEK
LQlib29sICJjaG9pY2UgMSIKLQotZW5kY2hvaWNlCi0KLWNob2ljZQotCXByb21wdCAidHJpc3Rh
dGUgY2hvaWNlIgotCWRlZmF1bHQgVFJJX0NIT0lDRTEKLQotY29uZmlnIFRSSV9DSE9JQ0UwCi0J
dHJpc3RhdGUgImNob2ljZSAwIgotCi1jb25maWcgVFJJX0NIT0lDRTEKLQl0cmlzdGF0ZSAiY2hv
aWNlIDEiCi0KLWVuZGNob2ljZQotCi1jaG9pY2UKLQlwcm9tcHQgIm9wdGlvbmFsIHRyaXN0YXRl
IGNob2ljZSIKLQlvcHRpb25hbAotCWRlZmF1bHQgT1BUX1RSSV9DSE9JQ0UxCi0KLWNvbmZpZyBP
UFRfVFJJX0NIT0lDRTAKLQl0cmlzdGF0ZSAiY2hvaWNlIDAiCi0KLWNvbmZpZyBPUFRfVFJJX0NI
T0lDRTEKLQl0cmlzdGF0ZSAiY2hvaWNlIDEiCi0KLWVuZGNob2ljZQpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNDMxOGZjZS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZS9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLSMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLSIiIgotQmFzaWMgY2hvaWNlIHRlc3RzLgotCi1U
aGUgaGFuZGxpbmcgb2YgJ2Nob2ljZScgaXMgYSBiaXQgY29tcGxpY2F0ZWQgcGFydCBpbiBLY29u
ZmlnLgotCi1UaGUgYmVoYXZpb3Igb2YgJ3knIGNob2ljZSBpcyBpbnR1aXRpdmUuICBJZiBjaG9p
Y2UgdmFsdWVzIGFyZSB0cmlzdGF0ZSwKLXRoZSBjaG9pY2UgY2FuIGJlICdtJyB3aGVyZSBlYWNo
IHZhbHVlIGNhbiBiZSBlbmFibGVkIGluZGVwZW5kZW50bHkuCi1BbHNvLCBpZiBhIGNob2ljZSBp
cyBtYXJrZWQgYXMgJ29wdGlvbmFsJywgdGhlIHdob2xlIGNob2ljZSBjYW4gYmUKLWludmlzaWJs
ZS4KLSIiIgotCi0KLWRlZiB0ZXN0X29sZGFzazAoY29uZik6Ci0gICAgYXNzZXJ0IGNvbmYub2xk
YXNrY29uZmlnKCkgPT0gMAotICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnb2xkYXNr
MF9leHBlY3RlZF9zdGRvdXQnKQotCi0KLWRlZiB0ZXN0X29sZGFzazEoY29uZik6Ci0gICAgYXNz
ZXJ0IGNvbmYub2xkYXNrY29uZmlnKCdvbGRhc2sxX2NvbmZpZycpID09IDAKLSAgICBhc3NlcnQg
Y29uZi5zdGRvdXRfY29udGFpbnMoJ29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0JykKLQotCi1kZWYg
dGVzdF9hbGx5ZXMoY29uZik6Ci0gICAgYXNzZXJ0IGNvbmYuYWxseWVzY29uZmlnKCkgPT0gMAot
ICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnYWxseWVzX2V4cGVjdGVkX2NvbmZpZycp
Ci0KLQotZGVmIHRlc3RfYWxsbW9kKGNvbmYpOgotICAgIGFzc2VydCBjb25mLmFsbG1vZGNvbmZp
ZygpID09IDAKLSAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbG1vZF9leHBlY3Rl
ZF9jb25maWcnKQotCi0KLWRlZiB0ZXN0X2FsbG5vKGNvbmYpOgotICAgIGFzc2VydCBjb25mLmFs
bG5vY29uZmlnKCkgPT0gMAotICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnYWxsbm9f
ZXhwZWN0ZWRfY29uZmlnJykKLQotCi1kZWYgdGVzdF9hbGxkZWYoY29uZik6Ci0gICAgYXNzZXJ0
IGNvbmYuYWxsZGVmY29uZmlnKCkgPT0gMAotICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlu
cygnYWxsZGVmX2V4cGVjdGVkX2NvbmZpZycpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggN2E3NTRiZi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEs
NSArMCwwIEBACi1DT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19CT09MX0NIT0lDRTAgaXMgbm90
IHNldAotQ09ORklHX0JPT0xfQ0hPSUNFMT15Ci0jIENPTkZJR19UUklfQ0hPSUNFMCBpcyBub3Qg
c2V0Ci0jIENPTkZJR19UUklfQ0hPSUNFMSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFmNWRjZC4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnCisrKyAvZGV2L251
bGwKQEAgLTEsOSArMCwwIEBACi1DT05GSUdfTU9EVUxFUz15Ci0jIENPTkZJR19CT09MX0NIT0lD
RTAgaXMgbm90IHNldAotQ09ORklHX0JPT0xfQ0hPSUNFMT15Ci0jIENPTkZJR19PUFRfQk9PTF9D
SE9JQ0UwIGlzIG5vdCBzZXQKLUNPTkZJR19PUFRfQk9PTF9DSE9JQ0UxPXkKLUNPTkZJR19UUklf
Q0hPSUNFMD1tCi1DT05GSUdfVFJJX0NIT0lDRTE9bQotQ09ORklHX09QVF9UUklfQ0hPSUNFMD1t
Ci1DT05GSUdfT1BUX1RSSV9DSE9JQ0UxPW0KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjg4ZWU3YS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw1ICsw
LDAgQEAKLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAotIyBDT05GSUdfQk9PTF9DSE9JQ0Uw
IGlzIG5vdCBzZXQKLUNPTkZJR19CT09MX0NIT0lDRTE9eQotIyBDT05GSUdfVFJJX0NIT0lDRTAg
aXMgbm90IHNldAotQ09ORklHX1RSSV9DSE9JQ0UxPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlNWEwNjJhLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcKKysrIC9kZXYvbnVsbApA
QCAtMSw5ICswLDAgQEAKLUNPTkZJR19NT0RVTEVTPXkKLSMgQ09ORklHX0JPT0xfQ0hPSUNFMCBp
cyBub3Qgc2V0Ci1DT05GSUdfQk9PTF9DSE9JQ0UxPXkKLSMgQ09ORklHX09QVF9CT09MX0NIT0lD
RTAgaXMgbm90IHNldAotQ09ORklHX09QVF9CT09MX0NIT0lDRTE9eQotIyBDT05GSUdfVFJJX0NI
T0lDRTAgaXMgbm90IHNldAotQ09ORklHX1RSSV9DSE9JQ0UxPXkKLSMgQ09ORklHX09QVF9UUklf
Q0hPSUNFMCBpcyBub3Qgc2V0Ci1DT05GSUdfT1BUX1RSSV9DSE9JQ0UxPXkKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRv
dXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNTFiYmEuLjAwMDAwMDAKLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQK
KysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1FbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1
cHBvcnQgKE1PRFVMRVMpIFtZL24vP10gKE5FVykgCi1ib29sZWFuIGNob2ljZQotICAxLiBjaG9p
Y2UgMCAoQk9PTF9DSE9JQ0UwKSAoTkVXKQotPiAyLiBjaG9pY2UgMSAoQk9PTF9DSE9JQ0UxKSAo
TkVXKQotY2hvaWNlWzEtMj9dOiAKLW9wdGlvbmFsIGJvb2xlYW4gY2hvaWNlIFtOL3kvP10gKE5F
VykgCi10cmlzdGF0ZSBjaG9pY2UgW00veS8/XSAoTkVXKSAKLSAgY2hvaWNlIDAgKFRSSV9DSE9J
Q0UwKSBbTi9tLz9dIChORVcpIAotICBjaG9pY2UgMSAoVFJJX0NIT0lDRTEpIFtOL20vP10gKE5F
VykgCi1vcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2UgW04vbS95Lz9dIChORVcpIApkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcgYi9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggYjY3YmZlMy4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDIgKzAs
MCBAQAotIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0Ci1DT05GSUdfT1BUX0JPT0xfQ0hPSUNF
MD15CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sx
X2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFz
azFfZXhwZWN0ZWRfc3Rkb3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMjEyNWU5
Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFf
ZXhwZWN0ZWRfc3Rkb3V0CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotRW5hYmxlIGxv
YWRhYmxlIG1vZHVsZSBzdXBwb3J0IChNT0RVTEVTKSBbTi95Lz9dIAotYm9vbGVhbiBjaG9pY2UK
LSAgMS4gY2hvaWNlIDAgKEJPT0xfQ0hPSUNFMCkgKE5FVykKLT4gMi4gY2hvaWNlIDEgKEJPT0xf
Q0hPSUNFMSkgKE5FVykKLWNob2ljZVsxLTI/XTogCi1vcHRpb25hbCBib29sZWFuIGNob2ljZSBb
WS9uLz9dIChORVcpIAotb3B0aW9uYWwgYm9vbGVhbiBjaG9pY2UKLT4gMS4gY2hvaWNlIDAgKE9Q
VF9CT09MX0NIT0lDRTApCi0gIDIuIGNob2ljZSAxIChPUFRfQk9PTF9DSE9JQ0UxKSAoTkVXKQot
Y2hvaWNlWzEtMj9dOiAKLXRyaXN0YXRlIGNob2ljZQotICAxLiBjaG9pY2UgMCAoVFJJX0NIT0lD
RTApIChORVcpCi0+IDIuIGNob2ljZSAxIChUUklfQ0hPSUNFMSkgKE5FVykKLWNob2ljZVsxLTI/
XTogCi1vcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2UgW04veS8/XSAKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzEwNmMyNi4uMDAwMDAwMAotLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcKKysr
IC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wCi0KLWNvbmZpZyBNT0RVTEVTCi0JZGVmX2Jvb2wgeQotCW9wdGlvbiBtb2R1bGVzCi0K
LWNvbmZpZyBERVAKLQl0cmlzdGF0ZQotCWRlZmF1bHQgbQotCi1jaG9pY2UKLQlwcm9tcHQgIlRy
aXN0YXRlIENob2ljZSIKLQotY29uZmlnIENIT0lDRTAKLQl0cmlzdGF0ZSAiQ2hvaWNlIDAiCi0K
LWNvbmZpZyBDSE9JQ0UxCi0JdHJpc3RhdGUgIkNob2ljZSAxIgotCWRlcGVuZHMgb24gREVQCi0K
LWVuZGNob2ljZQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Vf
dmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDA3NWI0ZTAuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0x
LDE2ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLSIiIgotSGlk
ZSB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIHdpdGggbW9kIGRlcGVuZGVuY3kgaW4geSBjaG9pY2Uu
Ci0KLUlmIHRyaXN0YXRlIGNob2ljZSB2YWx1ZXMgZGVwZW5kIG9uIHN5bWJvbHMgc2V0IHRvICdt
JywgdGhleSBzaG91bGQgYmUKLWhpZGRlbiB3aGVuIHRoZSBjaG9pY2UgY29udGFpbmluZyB0aGVt
IGlzIGNoYW5nZWQgZnJvbSAnbScgdG8gJ3knCi0oaS5lLiBleGNsdXNpdmUgY2hvaWNlKS4KLQot
UmVsYXRlZCBMaW51eCBjb21taXQ6IGZhNjRlNWY2YTM1ZWZkNWU3N2Q2MzkxMjVkOTczMDc3Y2E1
MDYwNzQKLSIiIgotCi0KLWRlZiB0ZXN0KGNvbmYpOgotICAgIGFzc2VydCBjb25mLm9sZGFza2Nv
bmZpZygnY29uZmlnJywgJ3knKSA9PSAwCi0gICAgYXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRhaW5z
KCdleHBlY3RlZF9jb25maWcnKQotICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnZXhw
ZWN0ZWRfc3Rkb3V0JykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hv
aWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9j
aG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDNhMTI2YjcuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9p
Y2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAK
LUNPTkZJR19DSE9JQ0UwPW0KLUNPTkZJR19DSE9JQ0UxPW0KZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmln
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBl
Y3RlZF9jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDdiNDQuLjAwMDAw
MDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2Rl
cC9leHBlY3RlZF9jb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLUNPTkZJR19N
T0RVTEVTPXkKLUNPTkZJR19ERVA9bQotQ09ORklHX0NIT0lDRTA9eQpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9z
dGRvdXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L2V4cGVjdGVkX3N0ZG91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI1MGFiNi4u
MDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRo
X21fZGVwL2V4cGVjdGVkX3N0ZG91dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVHJp
c3RhdGUgQ2hvaWNlIFtNL3kvP10geQotVHJpc3RhdGUgQ2hvaWNlCi0+IDEuIENob2ljZSAwIChD
SE9JQ0UwKQotY2hvaWNlWzFdOiAxCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2NvbmZ0ZXN0LnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0NWVmNi4uMDAwMDAwMAotLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2NvbmZ0ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjkx
ICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLSMKLSMgQ29weXJp
Z2h0IChDKSAyMDE4IE1hc2FoaXJvIFlhbWFkYSA8eWFtYWRhLm1hc2FoaXJvQHNvY2lvbmV4dC5j
b20+Ci0jCi0KLSIiIgotS2NvbmZpZyB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLgotCi1UaGlzIHBy
b3ZpZGVzIGZpeHR1cmUgZnVuY3Rpb25zIGNvbW1vbmx5IHVzZWQgZnJvbSB0ZXN0IGZpbGVzLgot
IiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHB5dGVzdAotaW1wb3J0IHNodXRpbAotaW1wb3J0IHN1
YnByb2Nlc3MKLWltcG9ydCB0ZW1wZmlsZQotCi1DT05GX1BBVEggPSBvcy5wYXRoLmFic3BhdGgo
b3MucGF0aC5qb2luKCdzY3JpcHRzJywgJ2tjb25maWcnLCAnY29uZicpKQotCi0KLWNsYXNzIENv
bmY6Ci0gICAgIiIiS2NvbmZpZyBydW5uZXIgYW5kIHJlc3VsdCBjaGVja2VyLgotCi0gICAgVGhp
cyBjbGFzcyBwcm92aWRlcyBtZXRob2RzIHRvIHJ1biB0ZXh0LWJhc2VkIGludGVyZmFjZSBvZiBL
Y29uZmlnCi0gICAgKHNjcmlwdHMva2NvbmZpZy9jb25mKSBhbmQgcmV0cmlldmUgdGhlIHJlc3Vs
dGVkIGNvbmZpZ3VyYXRpb24sCi0gICAgc3Rkb3V0LCBhbmQgc3RkZXJyLiAgSXQgYWxzbyBwcm92
aWRlcyBtZXRob2RzIHRvIGNvbXBhcmUgdGhvc2UKLSAgICByZXN1bHRzIHdpdGggZXhwZWN0YXRp
b25zLgotICAgICIiIgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlcXVlc3QpOgotICAgICAg
ICAiIiJDcmVhdGUgYSBuZXcgQ29uZiBpbnN0YW5jZS4KLQotICAgICAgICByZXF1ZXN0OiBvYmpl
Y3QgdG8gaW50cm9zcGVjdCB0aGUgcmVxdWVzdGluZyB0ZXN0IG1vZHVsZQotICAgICAgICAiIiIK
LSAgICAgICAgIyB0aGUgZGlyZWN0b3J5IG9mIHRoZSB0ZXN0IGJlaW5nIHJ1bgotICAgICAgICBz
ZWxmLl90ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShzdHIocmVxdWVzdC5mc3BhdGgpKQotCi0g
ICAgIyBydW5uZXJzCi0gICAgZGVmIF9ydW5fY29uZihzZWxmLCBtb2RlLCBkb3RfY29uZmlnPU5v
bmUsIG91dF9maWxlPScuY29uZmlnJywKLSAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPUZh
bHNlLCBpbl9rZXlzPU5vbmUsIGV4dHJhX2Vudj17fSk6Ci0gICAgICAgICIiIlJ1biB0ZXh0LWJh
c2VkIEtjb25maWcgZXhlY3V0YWJsZSBhbmQgc2F2ZSB0aGUgcmVzdWx0LgotCi0gICAgICAgIG1v
ZGU6IGlucHV0IG1vZGUgb3B0aW9uICgtLW9sZGFza2NvbmZpZywgLS1kZWZjb25maWc9PGZpbGU+
IGV0Yy4pCi0gICAgICAgIGRvdF9jb25maWc6IC5jb25maWcgZmlsZSB0byB1c2UgZm9yIGNvbmZp
Z3VyYXRpb24gYmFzZQotICAgICAgICBvdXRfZmlsZTogZmlsZSBuYW1lIHRvIGNvbnRhaW4gdGhl
IG91dHB1dCBjb25maWcgZGF0YQotICAgICAgICBpbnRlcmFjdGl2ZTogZmxhZyB0byBzcGVjaWZ5
IHRoZSBpbnRlcmFjdGl2ZSBtb2RlCi0gICAgICAgIGluX2tleXM6IGtleSBpbnB1dHMgZm9yIGlu
dGVyYWN0aXZlIG1vZGVzCi0gICAgICAgIGV4dHJhX2VudjogYWRkaXRpb25hbCBlbnZpcm9ubWVu
dHMKLSAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0
YWJsZQotICAgICAgICAiIiIKLSAgICAgICAgY29tbWFuZCA9IFtDT05GX1BBVEgsIG1vZGUsICdL
Y29uZmlnJ10KLQotICAgICAgICAjIE92ZXJyaWRlICdzcmN0cmVlJyBlbnZpcm9ubWVudCB0byBt
YWtlIHRoZSB0ZXN0IGFzIHRoZSB0b3AgZGlyZWN0b3J5Ci0gICAgICAgIGV4dHJhX2Vudlsnc3Jj
dHJlZSddID0gc2VsZi5fdGVzdF9kaXIKLQotICAgICAgICAjIFJ1biBLY29uZmlnIGluIGEgdGVt
cG9yYXJ5IGRpcmVjdG9yeS4KLSAgICAgICAgIyBUaGlzIGRpcmVjdG9yeSBpcyBhdXRvbWF0aWNh
bGx5IHJlbW92ZWQgd2hlbiBkb25lLgotICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURp
cmVjdG9yeSgpIGFzIHRlbXBfZGlyOgotCi0gICAgICAgICAgICAjIGlmIC5jb25maWcgaXMgZ2l2
ZW4sIGNvcHkgaXQgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAgICAgICAgICBpZiBkb3Rf
Y29uZmlnOgotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oc2Vs
Zi5fdGVzdF9kaXIsIGRvdF9jb25maWcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcy5wYXRoLmpvaW4odGVtcF9kaXIsICcuY29uZmlnJykpCi0KLSAgICAgICAgICAgIHBzID0g
c3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3dkPXRlbXBfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVudj1kaWN0KG9zLmVudmlyb24sICoqZXh0cmFfZW52KSkKLQotICAgICAgICAgICAgIyBJZiBp
bnB1dCBrZXkgc2VxdWVuY2UgaXMgZ2l2ZW4sIGZlZWQgaXQgdG8gc3RkaW4uCi0gICAgICAgICAg
ICBpZiBpbl9rZXlzOgotICAgICAgICAgICAgICAgIHBzLnN0ZGluLndyaXRlKGluX2tleXMuZW5j
b2RlKCd1dGYtOCcpKQotCi0gICAgICAgICAgICB3aGlsZSBwcy5wb2xsKCkgaXMgTm9uZToKLSAg
ICAgICAgICAgICAgICAjIEZvciBpbnRlcmFjdGl2ZSBtb2RlcyBzdWNoIGFzIG9sZGFza2NvbmZp
Zywgb2xkY29uZmlnLAotICAgICAgICAgICAgICAgICMgc2VuZCAnRW50ZXInIGtleSB1bnRpbCB0
aGUgcHJvZ3JhbSBmaW5pc2hlcy4KLSAgICAgICAgICAgICAgICBpZiBpbnRlcmFjdGl2ZToKLSAg
ICAgICAgICAgICAgICAgICAgcHMuc3RkaW4ud3JpdGUoYidcbicpCi0KLSAgICAgICAgICAgIHNl
bGYucmV0Y29kZSA9IHBzLnJldHVybmNvZGUKLSAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gcHMu
c3Rkb3V0LnJlYWQoKS5kZWNvZGUoKQotICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBwcy5zdGRl
cnIucmVhZCgpLmRlY29kZSgpCi0KLSAgICAgICAgICAgICMgUmV0cmlldmUgdGhlIHJlc3VsdGVk
IGNvbmZpZyBkYXRhIG9ubHkgd2hlbiAuY29uZmlnIGlzIHN1cHBvc2VkCi0gICAgICAgICAgICAj
IHRvIGV4aXN0LiAgSWYgdGhlIGNvbW1hbmQgZmFpbHMsIHRoZSAuY29uZmlnIGRvZXMgbm90IGV4
aXN0LgotICAgICAgICAgICAgIyAnbGlzdG5ld2NvbmZpZycgZG9lcyBub3QgcHJvZHVjZSAuY29u
ZmlnIGluIHRoZSBmaXJzdCBwbGFjZS4KLSAgICAgICAgICAgIGlmIHNlbGYucmV0Y29kZSA9PSAw
IGFuZCBvdXRfZmlsZToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRl
bXBfZGlyLCBvdXRfZmlsZSkpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmln
ID0gZi5yZWFkKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb25m
aWcgPSBOb25lCi0KLSAgICAgICAgIyBMb2dnaW5nOgotICAgICAgICAjIFB5dGVzdCBjYXB0dXJl
cyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGJ5IGRlZmF1bHQuICBJbiBmYWlsdXJlCi0gICAg
ICAgICMgb2YgdGVzdHMsIHRoZSBjYXB0dXJlZCBsb2cgd2lsbCBiZSBkaXNwbGF5ZWQuICBUaGlz
IHdpbGwgYmUgdXNlZnVsIHRvCi0gICAgICAgICMgZmlndXJlIG91dCB3aGF0IGhhcyBoYXBwZW5l
ZC4KLQotICAgICAgICBwcmludCgiW2NvbW1hbmRdXG57fVxuIi5mb3JtYXQoJyAnLmpvaW4oY29t
bWFuZCkpKQotCi0gICAgICAgIHByaW50KCJbcmV0Y29kZV1cbnt9XG4iLmZvcm1hdChzZWxmLnJl
dGNvZGUpKQotCi0gICAgICAgIHByaW50KCJbc3Rkb3V0XSIpCi0gICAgICAgIHByaW50KHNlbGYu
c3Rkb3V0KQotCi0gICAgICAgIHByaW50KCJbc3RkZXJyXSIpCi0gICAgICAgIHByaW50KHNlbGYu
c3RkZXJyKQotCi0gICAgICAgIGlmIHNlbGYuY29uZmlnIGlzIG5vdCBOb25lOgotICAgICAgICAg
ICAgcHJpbnQoIltvdXRwdXQgZm9yICd7fSddIi5mb3JtYXQob3V0X2ZpbGUpKQotICAgICAgICAg
ICAgcHJpbnQoc2VsZi5jb25maWcpCi0KLSAgICAgICAgcmV0dXJuIHNlbGYucmV0Y29kZQotCi0g
ICAgZGVmIG9sZGFza2NvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUsIGluX2tleXM9Tm9uZSk6
Ci0gICAgICAgICIiIlJ1biBvbGRhc2tjb25maWcuCi0KLSAgICAgICAgZG90X2NvbmZpZzogLmNv
bmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25hbCkKLSAgICAg
ICAgaW5fa2V5OiBrZXkgaW5wdXRzIChvcHRpb25hbCkKLSAgICAgICAgcmV0dXJuY29kZTogZXhp
dCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQotICAgICAgICAiIiIKLSAgICAgICAg
cmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLW9sZGFza2NvbmZpZycsIGRvdF9jb25maWc9ZG90X2Nv
bmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPVRydWUsIGlu
X2tleXM9aW5fa2V5cykKLQotICAgIGRlZiBvbGRjb25maWcoc2VsZiwgZG90X2NvbmZpZz1Ob25l
LCBpbl9rZXlzPU5vbmUpOgotICAgICAgICAiIiJSdW4gb2xkY29uZmlnLgotCi0gICAgICAgIGRv
dF9jb25maWc6IC5jb25maWcgZmlsZSB0byB1c2UgZm9yIGNvbmZpZ3VyYXRpb24gYmFzZSAob3B0
aW9uYWwpCi0gICAgICAgIGluX2tleToga2V5IGlucHV0cyAob3B0aW9uYWwpCi0gICAgICAgIHJl
dHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKLSAgICAgICAg
IiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1vbGRjb25maWcnLCBkb3RfY29u
ZmlnPWRvdF9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2
ZT1UcnVlLCBpbl9rZXlzPWluX2tleXMpCi0KLSAgICBkZWYgb2xkZGVmY29uZmlnKHNlbGYsIGRv
dF9jb25maWc9Tm9uZSk6Ci0gICAgICAgICIiIlJ1biBvbGRkZWZjb25maWcuCi0KLSAgICAgICAg
ZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChv
cHRpb25hbCkKLSAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcg
ZXhlY3V0YWJsZQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCct
LW9sZGRlZmNvbmZpZycsIGRvdF9jb25maWc9ZG90X2NvbmZpZykKLQotICAgIGRlZiBkZWZjb25m
aWcoc2VsZiwgZGVmY29uZmlnKToKLSAgICAgICAgIiIiUnVuIGRlZmNvbmZpZy4KLQotICAgICAg
ICBkZWZjb25maWc6IGRlZmNvbmZpZyBmaWxlIGZvciBpbnB1dAotICAgICAgICByZXR1cm5jb2Rl
OiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCi0gICAgICAgICIiIgotICAg
ICAgICBkZWZjb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgZGVmY29u
ZmlnKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tZGVmY29uZmlnPXt9Jy5mb3Jt
YXQoZGVmY29uZmlnX3BhdGgpKQotCi0gICAgZGVmIF9hbGxjb25maWcoc2VsZiwgbW9kZSwgYWxs
X2NvbmZpZyk6Ci0gICAgICAgIGlmIGFsbF9jb25maWc6Ci0gICAgICAgICAgICBhbGxfY29uZmln
X3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGFsbF9jb25maWcpCi0gICAgICAg
ICAgICBleHRyYV9lbnYgPSB7J0tDT05GSUdfQUxMQ09ORklHJzogYWxsX2NvbmZpZ19wYXRofQot
ICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXh0cmFfZW52ID0ge30KLQotICAgICAgICByZXR1
cm4gc2VsZi5fcnVuX2NvbmYoJy0te31jb25maWcnLmZvcm1hdChtb2RlKSwgZXh0cmFfZW52PWV4
dHJhX2VudikKLQotICAgIGRlZiBhbGx5ZXNjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToK
LSAgICAgICAgIiIiUnVuIGFsbHllc2NvbmZpZy4KLQotICAgICAgICBhbGxfY29uZmlnOiBmcmFn
bWVudCBjb25maWcgZmlsZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQotICAgICAg
ICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCi0gICAg
ICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdhbGx5ZXMnLCBhbGxfY29u
ZmlnKQotCi0gICAgZGVmIGFsbG1vZGNvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgotICAg
ICAgICAiIiJSdW4gYWxsbW9kY29uZmlnLgotCi0gICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50
IGNvbmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCi0gICAgICAgIHJl
dHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKLSAgICAgICAg
IiIiCi0gICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG1vZCcsIGFsbF9jb25maWcp
Ci0KLSAgICBkZWYgYWxsbm9jb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKLSAgICAgICAg
IiIiUnVuIGFsbG5vY29uZmlnLgotCi0gICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNvbmZp
ZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCi0gICAgICAgIHJldHVybmNv
ZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKLSAgICAgICAgIiIiCi0g
ICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG5vJywgYWxsX2NvbmZpZykKLQotICAg
IGRlZiBhbGxkZWZjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKLSAgICAgICAgIiIiUnVu
IGFsbGRlZmNvbmZpZy4KLQotICAgICAgICBhbGxfY29uZmlnOiBmcmFnbWVudCBjb25maWcgZmls
ZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQotICAgICAgICByZXR1cm5jb2RlOiBl
eGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCi0gICAgICAgICIiIgotICAgICAg
ICByZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdhbGxkZWYnLCBhbGxfY29uZmlnKQotCi0gICAgZGVm
IHJhbmRjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToKLSAgICAgICAgIiIiUnVuIHJhbmRj
b25maWcuCi0KLSAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9yIEtD
T05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkKLSAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0
dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2FsbGNvbmZpZygncmFuZCcsIGFsbF9jb25maWcpCi0KLSAgICBkZWYgc2F2ZWRlZmNv
bmZpZyhzZWxmLCBkb3RfY29uZmlnKToKLSAgICAgICAgIiIiUnVuIHNhdmVkZWZjb25maWcuCi0K
LSAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIGZvciBpbnB1dAotICAgICAgICByZXR1
cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCi0gICAgICAgICIi
IgotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tc2F2ZWRlZmNvbmZpZycsIG91dF9m
aWxlPSdkZWZjb25maWcnKQotCi0gICAgZGVmIGxpc3RuZXdjb25maWcoc2VsZiwgZG90X2NvbmZp
Zz1Ob25lKToKLSAgICAgICAgIiIiUnVuIGxpc3RuZXdjb25maWcuCi0KLSAgICAgICAgZG90X2Nv
bmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25h
bCkKLSAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0
YWJsZQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLWxpc3Ru
ZXdjb25maWcnLCBkb3RfY29uZmlnPWRvdF9jb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRfZmlsZT1Ob25lKQotCi0gICAgIyBjaGVja2VycwotICAgIGRlZiBfcmVhZF9h
bmRfY29tcGFyZShzZWxmLCBjb21wYXJlLCBleHBlY3RlZCk6Ci0gICAgICAgICIiIkNvbXBhcmUg
dGhlIHJlc3VsdCB3aXRoIGV4cGVjdGF0aW9uLgotCi0gICAgICAgIGNvbXBhcmU6IGZ1bmN0aW9u
IHRvIGNvbXBhcmUgdGhlIHJlc3VsdCB3aXRoIGV4cGVjdGF0aW9uCi0gICAgICAgIGV4cGVjdGVk
OiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKLSAgICAgICAgIiIiCi0gICAg
ICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGV4cGVjdGVkKSkgYXMg
ZjoKLSAgICAgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBmLnJlYWQoKQotICAgICAgICByZXR1cm4g
Y29tcGFyZShzZWxmLCBleHBlY3RlZF9kYXRhKQotCi0gICAgZGVmIF9jb250YWlucyhzZWxmLCBh
dHRyLCBleHBlY3RlZCk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FuZF9jb21wYXJlKAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHMsIGU6IGdldGF0dHIo
cywgYXR0cikuZmluZChlKSA+PSAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWQpCi0KLSAgICBkZWYgX21hdGNoZXMoc2VsZiwgYXR0ciwgZXhwZWN0ZWQpOgot
ICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbmRfY29tcGFyZShsYW1iZGEgcywgZTogZ2V0YXR0
cihzLCBhdHRyKSA9PSBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZCkKLQotICAgIGRlZiBjb25maWdfY29udGFpbnMoc2VsZiwgZXhwZWN0ZWQpOgotICAg
ICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGV4cGVjdGVk
IGRhdGEuCi0KLSAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0
ZWQgZGF0YQotICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0aGUg
ZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCi0gICAgICAgICIiIgotICAgICAgICByZXR1
cm4gc2VsZi5fY29udGFpbnMoJ2NvbmZpZycsIGV4cGVjdGVkKQotCi0gICAgZGVmIGNvbmZpZ19t
YXRjaGVzKHNlbGYsIGV4cGVjdGVkKToKLSAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgY29u
ZmlndXJhdGlvbiBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KLQotICAgICAgICBleHBl
Y3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCi0gICAgICAgIHJldHVy
bmNvZGU6IFRydWUgaWYgcmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90
aGVyd2lzZQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ2NvbmZp
ZycsIGV4cGVjdGVkKQotCi0gICAgZGVmIHN0ZG91dF9jb250YWlucyhzZWxmLCBleHBlY3RlZCk6
Ci0gICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZG91dCBjb250YWlucyBleHBlY3RlZCBk
YXRhLgotCi0gICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVk
IGRhdGEKLSAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhlIGV4
cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJu
IHNlbGYuX2NvbnRhaW5zKCdzdGRvdXQnLCBleHBlY3RlZCkKLQotICAgIGRlZiBzdGRvdXRfbWF0
Y2hlcyhzZWxmLCBleHBlY3RlZCk6Ci0gICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZG91
dCBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KLQotICAgICAgICBleHBlY3RlZDogZmls
ZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCi0gICAgICAgIHJldHVybmNvZGU6IFRy
dWUgaWYgcmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQot
ICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ3N0ZG91dCcsIGV4cGVj
dGVkKQotCi0gICAgZGVmIHN0ZGVycl9jb250YWlucyhzZWxmLCBleHBlY3RlZCk6Ci0gICAgICAg
ICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBjb250YWlucyBleHBlY3RlZCBkYXRhLgotCi0g
ICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKLSAg
ICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRh
dGEsIEZhbHNlIG90aGVyd2lzZQotICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Nv
bnRhaW5zKCdzdGRlcnInLCBleHBlY3RlZCkKLQotICAgIGRlZiBzdGRlcnJfbWF0Y2hlcyhzZWxm
LCBleHBlY3RlZCk6Ci0gICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBleGFjdGx5
IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4KLQotICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNv
bnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhCi0gICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYgcmVz
dWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQotICAgICAgICAi
IiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ3N0ZGVycicsIGV4cGVjdGVkKQotCi0K
LUBweXRlc3QuZml4dHVyZShzY29wZT0ibW9kdWxlIikKLWRlZiBjb25mKHJlcXVlc3QpOgotICAg
ICIiIkNyZWF0ZSBhIENvbmYgaW5zdGFuY2UgYW5kIHByb3ZpZGUgaXQgdG8gdGVzdCBmdW5jdGlv
bnMuIiIiCi0gICAgcmV0dXJuIENvbmYocmVxdWVzdCkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZWJkYjNmZi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCww
IEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0KLSMgZGVwZW5kcyBvbiBp
dHNlbGYKLQotY29uZmlnIEEKLQlib29sICJBIgotCWRlcGVuZHMgb24gQQotCi0jIHNlbGVjdCBp
dHNlbGYKLQotY29uZmlnIEIKLQlib29sCi0Jc2VsZWN0IEIKLQotIyBkZXBlbmRzIG9uIGVhY2gg
b3RoZXIKLQotY29uZmlnIEMxCi0JYm9vbCAiQzEiCi0JZGVwZW5kcyBvbiBDMgotCi1jb25maWcg
QzIKLQlib29sICJDMiIKLQlkZXBlbmRzIG9uIEMxCi0KLSMgZGVwZW5kcyBvbiBhbmQgc2VsZWN0
Ci0KLWNvbmZpZyBEMQotCWJvb2wgIkQxIgotCWRlcGVuZHMgb24gRDIKLQlzZWxlY3QgRDIKLQot
Y29uZmlnIEQyCi0JYm9vbAotCi0jIGRlcGVuZHMgb24gYW5kIGltcGx5Ci0KLWNvbmZpZyBFMQot
CWJvb2wgIkUxIgotCWRlcGVuZHMgb24gRTIKLQlpbXBseSBFMgotCi1jb25maWcgRTIKLQlib29s
ICJFMiIKLQotIyBwcm9wZXJ0eQotCi1jb25maWcgRjEKLQlib29sICJGMSIKLQlkZWZhdWx0IEYy
Ci0KLWNvbmZpZyBGMgotCWJvb2wgIkYyIgotCWRlcGVuZHMgb24gRjEKLQotIyBtZW51Ci0KLW1l
bnUgIm1lbnUgZGVwZW5kaW5nIG9uIGl0cyBjb250ZW50IgotCWRlcGVuZHMgb24gRwotCi1jb25m
aWcgRwotCWJvb2wgIkciCi0KLWVuZG1lbnUKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA1ZjM4MjFiLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwx
MCArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0iIiIKLURldGVj
dCByZWN1cnNpdmUgZGVwZW5kZW5jeSBlcnJvci4KLQotUmVjdXJzaXZlIGRlcGVuZGVuY3kgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuCi0iIiIKLQotZGVmIHRlc3QoY29uZik6Ci0gICAg
YXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0gMQotICAgIGFzc2VydCBjb25mLnN0ZGVycl9j
b250YWlucygnZXhwZWN0ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnIKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Njc5YjEuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnIKKysrIC9kZXYv
bnVsbApAQCAtMSwzOCArMCwwIEBACi1LY29uZmlnOjExOmVycm9yOiByZWN1cnNpdmUgZGVwZW5k
ZW5jeSBkZXRlY3RlZCEKLUtjb25maWc6MTE6CXN5bWJvbCBCIGlzIHNlbGVjdGVkIGJ5IEIKLUZv
ciBhIHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5n
dWFnZS50eHQKLXN1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRh
dGlvbnMiCi0KLUtjb25maWc6NTplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQh
Ci1LY29uZmlnOjU6CXN5bWJvbCBBIGRlcGVuZHMgb24gQQotRm9yIGEgcmVzb2x1dGlvbiByZWZl
ciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAotc3Vic2VjdGlv
biAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKLQotS2NvbmZpZzox
NzplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCi1LY29uZmlnOjE3OglzeW1i
b2wgQzEgZGVwZW5kcyBvbiBDMgotS2NvbmZpZzoyMToJc3ltYm9sIEMyIGRlcGVuZHMgb24gQzEK
LUZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1s
YW5ndWFnZS50eHQKLXN1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGlt
aXRhdGlvbnMiCi0KLUtjb25maWc6MzI6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVj
dGVkIQotS2NvbmZpZzozMjoJc3ltYm9sIEQyIGlzIHNlbGVjdGVkIGJ5IEQxCi1LY29uZmlnOjI3
OglzeW1ib2wgRDEgZGVwZW5kcyBvbiBEMgotRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1
bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAotc3Vic2VjdGlvbiAiS2NvbmZp
ZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKLQotS2NvbmZpZzozNzplcnJvcjog
cmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhCi1LY29uZmlnOjM3OglzeW1ib2wgRTEgZGVw
ZW5kcyBvbiBFMgotS2NvbmZpZzo0MjoJc3ltYm9sIEUyIGlzIGltcGxpZWQgYnkgRTEKLUZvciBh
IHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFn
ZS50eHQKLXN1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlv
bnMiCi0KLUtjb25maWc6NjA6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQot
S2NvbmZpZzo2MDoJc3ltYm9sIEcgZGVwZW5kcyBvbiBHCi1Gb3IgYSByZXNvbHV0aW9uIHJlZmVy
IHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0Ci1zdWJzZWN0aW9u
ICJLY29uZmlnIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIgotCi1LY29uZmlnOjUx
OmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCEKLUtjb25maWc6NTE6CXN5bWJv
bCBGMiBkZXBlbmRzIG9uIEYxCi1LY29uZmlnOjQ5OglzeW1ib2wgRjEgZGVmYXVsdCB2YWx1ZSBj
b250YWlucyBGMgotRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWls
ZC9rY29uZmlnLWxhbmd1YWdlLnR4dAotc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVw
ZW5kZW5jeSBsaW1pdGF0aW9ucyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YzZmNGFkZS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1
cnNpdmVfaW5jL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLSMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQotc291cmNlICJLY29uZmlnLmluYzEiCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tj
b25maWcuaW5jMSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMxCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWNiZjBkLi4wMDAw
MDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2Nv
bmZpZy5pbmMxCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKLQotCi0KLXNvdXJjZSAiS2NvbmZpZy5pbmMyIgpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29u
ZmlnLmluYzIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tj
b25maWcuaW5jMgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzNTEwNy4uMDAwMDAw
MAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25m
aWcuaW5jMgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMC1vbmx5Ci0KLQotc291cmNlICJLY29uZmlnLmluYzMiCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcu
aW5jMyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
Zy5pbmMzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmY0YWRlLi4wMDAwMDAwCi0t
LSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5p
bmMzCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wLW9ubHkKLXNvdXJjZSAiS2NvbmZpZy5pbmMxIgpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weSBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3YWExODkuLjAwMDAwMDAKLS0tIGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQorKysgL2Rl
di9udWxsCkBAIC0xLDExICswLDAgQEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjAKLSIiIgotRGV0ZWN0IHJlY3Vyc2l2ZSBpbmNsdXNpb24gZXJyb3IuCi0KLUlmIHJlY3Vyc2l2
ZSBpbmNsdXNpb24gaXMgZGV0ZWN0ZWQsIGl0IHNob3VsZCBmYWlsIHdpdGggZXJyb3IgbWVzc2Fn
ZXMuCi0iIiIKLQotCi1kZWYgdGVzdChjb25mKToKLSAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25m
aWcoKSAhPSAwCi0gICAgYXNzZXJ0IGNvbmYuc3RkZXJyX2NvbnRhaW5zKCdleHBlY3RlZF9zdGRl
cnInKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZl
X2luYy9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1
cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjA3MGEzMS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1
cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAot
UmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC4KLUluY2x1c2lvbiBwYXRoOgotICBjdXJyZW50
IGZpbGUgOiBLY29uZmlnLmluYzEKLSAgaW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMzOjIKLSAg
aW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMyOjQKLSAgaW5jbHVkZWQgZnJvbTogS2NvbmZpZy5p
bmMxOjUKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNl
L0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9LY29uZmln
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Njk4YTQwLi4wMDAwMDAwCi0tLSBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcKKysrIC9kZXYvbnVs
bApAQCAtMSwyNSArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0K
LWNvbmZpZyBNT0RVTEVTCi0JZGVmX2Jvb2wgeQotCW9wdGlvbiBtb2R1bGVzCi0KLWNob2ljZQot
CXByb21wdCAiQ2hvaWNlIgotCi1jb25maWcgQ0hPSUNFX1ZBTDAKLQl0cmlzdGF0ZSAiQ2hvaWNl
IDAiCi0KLWNvbmZpZyBDSE9JVkVfVkFMMQotCXRyaXN0YXRlICJDaG9pY2UgMSIKLQotZW5kY2hv
aWNlCi0KLWNob2ljZQotCXByb21wdCAiQW5vdGhlciBjaG9pY2UiCi0JZGVwZW5kcyBvbiBDSE9J
Q0VfVkFMMAotCi1jb25maWcgRFVNTVkKLQlib29sICJkdW1teSIKLQotZW5kY2hvaWNlCmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5w
eSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmVhNmIxLi4wMDAwMDAwCi0tLSBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5CisrKyAvZGV2L251
bGwKQEAgLTEsMTUgKzAsMCBAQAotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAot
IiIiCi1EbyBub3QgYWZmZWN0IHVzZXItYXNzaWduZWQgY2hvaWNlIHZhbHVlIGJ5IGFub3RoZXIg
Y2hvaWNlLgotCi1IYW5kbGluZyBvZiBzdGF0ZSBmbGFncyBmb3IgY2hvaWNlcyBpcyBjb21wbGVj
YXRlZC4gIEluIG9sZCBkYXlzLAotdGhlIGRlZmNvbmZpZyByZXN1bHQgb2YgYSBjaG9pY2UgY291
bGQgYmUgYWZmZWN0ZWQgYnkgYW5vdGhlciBjaG9pY2UKLWlmIHRob3NlIGNob2ljZXMgaW50ZXJh
Y3QgYnkgJ2RlcGVuZHMgb24nLCAnc2VsZWN0JywgZXRjLgotCi1SZWxhdGVkIExpbnV4IGNvbW1p
dDogZmJlOThiYjllZDNkYWUyM2UzMjBjNmIxMTNlMzVmMTI5NTM4ZDE0YQotIiIiCi0KLQotZGVm
IHRlc3QoY29uZik6Ci0gICAgYXNzZXJ0IGNvbmYuZGVmY29uZmlnKCdkZWZjb25maWcnKSA9PSAw
Ci0gICAgYXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3RlZF9jb25maWcnKQpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmln
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjJjNDE0Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBA
IC0xICswLDAgQEAKLUNPTkZJR19DSE9JQ0VfVkFMMD15CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDVkY2VlZmIuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnCisrKyAvZGV2L251bGwKQEAg
LTEsNCArMCwwIEBACi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfQ0hPSUNFX1ZBTDA9eQotIyBD
T05GSUdfQ0hPSVZFX1ZBTDEgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZPXkKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNzczMWMuLjAwMDAwMDAKLS0tIGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcKKysrIC9kZXYv
bnVsbApAQCAtMSwzOSArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w
Ci0KLWNvbmZpZyBBCi0JYm9vbCAiQSIKLQloZWxwCi0JICBUaGlzIGlzIGEgbmV3IHN5bWJvbC4K
LQotY2hvaWNlCi0JcHJvbXB0ICJDaG9pY2UgPyIKLQlkZXBlbmRzIG9uIEEKLQloZWxwCi0JICAi
ZGVwZW5kcyBvbiBBIiBoYXMgYmVlbiBuZXdseSBhZGRlZC4KLQotY29uZmlnIENIT0lDRV9CCi0J
Ym9vbCAiQ2hvaWNlIEIiCi0KLWNvbmZpZyBDSE9JQ0VfQwotCWJvb2wgIkNob2ljZSBDIgotCWhl
bHAKLQkgIFRoaXMgaXMgYSBuZXcgc3ltYm9sLCBzbyBzaG91bGQgYmUgYXNrZWQuCi0KLWVuZGNo
b2ljZQotCi1jaG9pY2UKLQlwcm9tcHQgIkNob2ljZTIgPyIKLQotY29uZmlnIENIT0lDRV9ECi0J
Ym9vbCAiQ2hvaWNlIEQiCi0KLWNvbmZpZyBDSE9JQ0VfRQotCWJvb2wgIkNob2ljZSBFIgotCi1j
b25maWcgQ0hPSUNFX0YKLQlib29sICJDaG9pY2UgRiIKLQlkZXBlbmRzIG9uIEEKLQloZWxwCi0J
ICBUaGlzIGlzIGEgbmV3IHN5bWJvbCwgc28gc2hvdWxkIGJlIGFza2VkLgotCi1lbmRjaG9pY2UK
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2Rl
cC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRo
X2RlcC9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU5ZDMyMi4u
MDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9k
ZXAvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0iIiIKLUFzayBuZXcgY2hvaWNlIHZhbHVlcyB3aGVu
IHRoZXkgYmVjb21lIHZpc2libGUuCi0KLUlmIG5ldyBjaG9pY2UgdmFsdWVzIGFyZSBhZGRlZCB3
aXRoIG5ldyBkZXBlbmRlbmN5LCBhbmQgdGhleSBiZWNvbWUKLXZpc2libGUgZHVyaW5nIHVzZXIg
Y29uZmlndXJhdGlvbiwgb2xkY29uZmlnIHNob3VsZCByZWNvZ25pemUgdGhlbQotYXMgKE5FVyks
IGFuZCBhc2sgdGhlIHVzZXIgZm9yIGNob2ljZS4KLQotUmVsYXRlZCBMaW51eCBjb21taXQ6IDVk
MDk1OThkNDg4ZjA4MWUzYmUyM2Y4ODVlZDY1Y2JiZTJkMDczYjUKLSIiIgotCi0KLWRlZiB0ZXN0
KGNvbmYpOgotICAgIGFzc2VydCBjb25mLm9sZGNvbmZpZygnY29uZmlnJywgJ3knKSA9PSAwCi0g
ICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQnKQpkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZp
ZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZWY5NWQuLjAwMDAwMDAKLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZworKysgL2Rl
di9udWxsCkBAIC0xLDMgKzAsMCBAQAotQ09ORklHX0NIT0lDRV9CPXkKLSMgQ09ORklHX0NIT0lD
RV9EIGlzIG5vdCBzZXQKLUNPTkZJR19DSE9JQ0VfRT15CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0IGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0ZG91
dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRkYzBiYy4uMDAwMDAwMAotLS0gYS9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rk
b3V0CisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotQSAoQSkgW04veS8/XSAoTkVXKSB5
Ci0gIENob2ljZSA/Ci0gID4gMS4gQ2hvaWNlIEIgKENIT0lDRV9CKQotICAgIDIuIENob2ljZSBD
IChDSE9JQ0VfQykgKE5FVykKLSAgY2hvaWNlWzEtMj9dOiAKLUNob2ljZTIgPwotICAxLiBDaG9p
Y2UgRCAoQ0hPSUNFX0QpCi0+IDIuIENob2ljZSBFIChDSE9JQ0VfRSkKLSAgMy4gQ2hvaWNlIEYg
KENIT0lDRV9GKSAoTkVXKQotY2hvaWNlWzEtMz9dOiAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcgYi9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0NzY3YWFiLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcKKysrIC9kZXYvbnVsbApA
QCAtMSwxNiArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0KLWNv
bmZpZyBBCi0JYm9vbCAiQSIKLQotY2hvaWNlCi0JcHJvbXB0ICJDaG9pY2UgPyIKLQlkZXBlbmRz
IG9uIEEKLQotY29uZmlnIENIT0lDRV9CCi0JYm9vbCAiQ2hvaWNlIEIiCi0KLWNvbmZpZyBDSE9J
Q0VfQwotCWJvb2wgIkNob2ljZSBDIgotCi1lbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5IGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDQ2OWQuLjAwMDAwMDAKLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkK
KysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCi0iIiIKLURvIG5vdCB3cml0ZSBjaG9pY2UgdmFsdWVzIHRvIC5jb25maWcgaWYg
dGhlIGRlcGVuZGVuY3kgaXMgdW5tZXQuCi0KLSIjIENPTkZJR18uLi4gaXMgbm90IHNldCIgc2hv
dWxkIG5vdCBiZSB3cml0dGVuIGludG8gdGhlIC5jb25maWcgZmlsZQotZm9yIHN5bWJvbHMgd2l0
aCB1bm1ldCBkZXBlbmRlbmN5LgotCi1UaGlzIHdhcyBub3Qgd29ya2luZyBjb3JyZWN0bHkgZm9y
IGNob2ljZSB2YWx1ZXMgYmVjYXVzZSBjaG9pY2UgbmVlZHMKLWEgYml0IGRpZmZlcmVudCBzeW1i
b2wgY29tcHV0YXRpb24uCi0KLVRoaXMgY2hlY2tzIHRoYXQgbm8gdW5uZWVkZWQgIiMgQ09GSUdf
Li4uIGlzIG5vdCBzZXQiIGlzIGNvbnRhaW5lZCBpbgotdGhlIC5jb25maWcgZmlsZS4KLQotUmVs
YXRlZCBMaW51eCBjb21taXQ6IGNiNjdhYjJjZDJiOGFiZDk2NTAyOTJjOTg2Yzc5OTAxZTMwNzNh
NTkKLSIiIgotCi0KLWRlZiB0ZXN0KGNvbmYpOgotICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZp
ZygnY29uZmlnJywgJ24nKSA9PSAwCi0gICAgYXNzZXJ0IGNvbmYuY29uZmlnX21hdGNoZXMoJ2V4
cGVjdGVkX2NvbmZpZycpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25v
X3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25v
X3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGFiZDI4MGUuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0
ZV9pZl9kZXBfdW5tZXQvY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQ09ORklH
X0E9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193
cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA0NzMyMjg4Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
bm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0x
LDUgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJ
VC4KLSMgTWFpbiBtZW51Ci0jCi0jIENPTkZJR19BIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZp
ZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmFhMzI4OC4uMDAwMDAwMAotLS0gYS9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcK
KysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCi0KLSMgJ2luZm8nIHByaW50cyB0aGUgYXJndW1lbnQgdG8gc3Rkb3V0LgotJChp
bmZvLGhlbGxvIHdvcmxkIDApCi0KLSMgJ3dhcm5pbmctaWYnLCBpZiB0aGUgZmlyc3QgYXJndW1l
bnQgaXMgeSwgc2VuZHMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzdGRlcnIsCi0jIGFuZCB0aGUg
bWVzc2FnZSBpcyBwcmVmaXhlZCB3aXRoIHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQgbGluZSBu
dW1iZXIuCi0kKHdhcm5pbmctaWYseSxoZWxsbyB3b3JsZCAxKQotCi0jICdlcnJvci1pZicgaXMg
c2ltaWxhciwgYnV0IGl0IHRlcm1pbmF0ZXMgdGhlIHBhcnNpbmcgaW1tZWRpYXRlbHkuCi0jIFRo
ZSBmb2xsb3dpbmcgaXMganVzdCBuby1vcCBzaW5jZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90
IHkuCi0kKGVycm9yLWlmLG4sdGhpcyBzaG91bGQgbm90IGJlIHByaW50ZWQpCi0KLSMgU2hvcnRo
YW5kCi13YXJuaW5nID0gJCh3YXJuaW5nLWlmLHksJCgxKSkKLQotIyAnc2hlbGwnIGV4ZWN1dGVz
IGEgY29tbWFuZCwgYW5kIHJldHVybnMgaXRzIHN0ZG91dC4KLSQod2FybmluZywkKHNoZWxsLGVj
aG8gaGVsbG8gd29ybGQgMykpCi0KLSMgRXZlcnkgbmV3bGluZSBpbiB0aGUgb3V0cHV0IGlzIHJl
cGxhY2VkIHdpdGggYSBzcGFjZSwKLSMgYnV0IGFueSB0cmFpbGluZyBuZXdsaW5lcyBhcmUgZGVs
ZXRlZC4KLSQod2FybmluZywkKHNoZWxsLHByaW50ZiAnaGVsbG9cbndvcmxkXG5cbjRcblxuXG4n
KSkKLQotIyAnZmlsZW5hbWUnIGlzIGV4cGFuZGVkIHRvIHRoZSBjdXJyZW50bHkgcGFyc2VkIGZp
bGUgbmFtZSwKLSMgJ2xpbmVubycgdG8gdGhlIGxpbmUgbnVtYmVyLgotJCh3YXJuaW5nLGZpbGVu
YW1lPSQoZmlsZW5hbWUpKQotJCh3YXJuaW5nLGxpbmVubz0kKGxpbmVubykpCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5p
dF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVu
Yy9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU1M2JhMC4uMDAw
MDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9m
dW5jL19faW5pdF9fLnB5CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi0jIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0iIiIKLUJ1aWx0LWluIGZ1bmN0aW9uIHRlc3RzLgot
IiIiCi0KLWRlZiB0ZXN0KGNvbmYpOgotICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09
IDAKLSAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpCi0g
ICAgYXNzZXJ0IGNvbmYuc3RkZXJyX21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4
cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWls
dGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAz
M2VhOWNhLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vz
cy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCww
IEBACi1LY29uZmlnOjg6IGhlbGxvIHdvcmxkIDEKLUtjb25maWc6MTg6IGhlbGxvIHdvcmxkIDMK
LUtjb25maWc6MjI6IGhlbGxvIHdvcmxkICA0Ci1LY29uZmlnOjI2OiBmaWxlbmFtZT1LY29uZmln
Ci1LY29uZmlnOjI3OiBsaW5lbm89MjcKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyZGUzYTcuLjAwMDAwMDAKLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9z
dGRvdXQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1oZWxsbyB3b3JsZCAwCmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5z
aW9uL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3Vs
YXJfZXhwYW5zaW9uL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4Mzg5
OTcuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2Np
cmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0j
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0KLVggPSAkKFkpCi1ZID0gJChYKQot
JChpbmZvICQoWCkpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weQpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE5YmRhMy4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL19faW5pdF9fLnB5
CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMAotIiIiCi1EZXRlY3QgY2lyY3VsYXIgdmFyaWFibGUgZXhwYW5zaW9uLgotCi1J
ZiBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlIHJlZmVyZW5jZXMgaXRzZWxmIChldmVu
dHVhbGx5KSwKLWl0IHNob3VsZCBmYWlsIHdpdGggYW4gZXJyb3IgbWVzc2FnZS4KLSIiIgotCi1k
ZWYgdGVzdChjb25mKToKLSAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSAhPSAwCi0gICAg
YXNzZXJ0IGNvbmYuc3RkZXJyX21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9u
L2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9j
aXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBjZGU2OGZhLi4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyCisrKyAvZGV2L251
bGwKQEAgLTEgKzAsMCBAQAotS2NvbmZpZzo1OiBSZWN1cnNpdmUgdmFyaWFibGUgJ1gnIHJlZmVy
ZW5jZXMgaXRzZWxmIChldmVudHVhbGx5KQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA0ZTNmNDQ0Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9lc2NhcGUvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMg
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLQotIyBTaG9ydGhhbmQKLXdhcm5pbmcg
PSAkKHdhcm5pbmctaWYseSwkKDEpKQotCi0jIFlvdSBjYW4gbm90IHBhc3MgY29tbWFzIGRpcmVj
dGx5IHRvIGEgZnVuY3Rpb24gc2luY2UgdGhleSBhcmUgdHJlYXRlZCBhcwotIyBkZWxpbWl0ZXJz
LiBZb3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHRyaWNrIHRvIGRvIHNvLgotY29tbWEgICA6PSAs
Ci0kKHdhcm5pbmcsaGVsbG8kKGNvbW1hKSB3b3JsZCkKLQotIyBMaWtlIE1ha2UsIHNpbmdsZSBx
dW90ZXMsIGRvdWJsZSBxdW90ZXMsIHNwYWNlcyBhcmUgdHJlYXRlZCB2ZXJiYXRpbS4KLSMgVGhl
IGZvbGxvd2luZyBwcmludHMgdGhlIHRleHQgYXMtaXMuCi0kKHdhcm5pbmcsICAnICIgJyIgICAn
ICcnJyAiJyIpCi0KLSMgVW5saWtlIE1ha2UsICckJyBoYXMgc3BlY2lhbCBtZWFuaW5nIG9ubHkg
d2hlbiBpdCBpcyBmb2xsb3dlZCBieSAnKCcuCi0jIE5vIG5lZWQgdG8gZXNjYXBlICckJyBpdHNl
bGYuCi0kKHdhcm5pbmcsJCkKLSQod2FybmluZywkJCkKLSQgOj0gMQotJCh3YXJuaW5nLCQoJCkp
Ci0KLSMgWW91IG5lZWQgYSB0cmljayB0byBlc2NhcGUgJyQnIGZvbGxvd2VkIGJ5ICcoJwotIyBU
aGUgZm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIuIEl0IHNob3VsZCBub3QgYmUgZXhwYW5k
ZWQgZnVydGhlci4KLWRvbGxhciA6PSAkCi0kKHdhcm5pbmcsJChkb2xsYXIpKFgpKQotCi0jIFlv
dSBuZWVkIGEgdHJpY2sgdG8gdHJlYXQgdW5iYWxhbmNlZCBwYXJlbnRoZXNlcy4KLSMgVGhlIGZv
bGxvd2luZyBzaG91bGQgcHJpbnQgIigiLgotbGVmdF9wYXJlbiA6PSAoCi0kKHdhcm5pbmcsJChs
ZWZ0X3BhcmVuKSkKLQotIyBBIHNpbXBsZSBleHBhbmRlZCBzaG91bGQgbm90IGJlIGV4cGFuZGVk
IG11bHRpcGxlIHRpbWVzLgotIyBUaGUgZm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIuIEl0
IHNob3VsZCBub3QgYmUgZXhwYW5kZWQgZnVydGhlci4KLVkgOj0gJChkb2xsYXIpKFgpCi0kKHdh
cm5pbmcsJChZKSkKLQotIyBUaGUgZm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIgYXMgd2Vs
bC4KLVkgPSAkKGRvbGxhcikoWCkKLSQod2FybmluZywkKFkpKQotCi0jIFRoZSBmb2xsb3dpbmcg
c2hvdWxkIHByaW50ICIkKCIuCi0jIEl0IHNob3VsZCBub3QgYmUgZW1pdCAidW50ZXJtaW5hdGVk
IHJlZmVyZW5jZSIgZXJyb3IuCi11bnRlcm1pbmF0ZWQgOj0gJChkb2xsYXIpKAotJCh3YXJuaW5n
LCQodW50ZXJtaW5hdGVkKSkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCA3ZWU4ZTc0Li4wMDAwMDAwCi0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAK
LSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLSIiIgotRXNjYXBlIHNlcXVlbmNl
IHRlc3RzLgotIiIiCi0KLWRlZiB0ZXN0KGNvbmYpOgotICAgIGFzc2VydCBjb25mLm9sZGFza2Nv
bmZpZygpID09IDAKLSAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRfc3Rk
ZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9l
c2NhcGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDFjMDA5NTcuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBA
Ci1LY29uZmlnOjk6IGhlbGxvLCB3b3JsZAotS2NvbmZpZzoxMzogICAnICIgJyIgICAnICcnJyAi
JyIKLUtjb25maWc6MTc6ICQKLUtjb25maWc6MTg6ICQkCi1LY29uZmlnOjIwOiAxCi1LY29uZmln
OjI1OiAkKFgpCi1LY29uZmlnOjMwOiAoCi1LY29uZmlnOjM1OiAkKFgpCi1LY29uZmlnOjM5OiAk
KFgpCi1LY29uZmlnOjQ0OiAkKApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOWNlMmY5NS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLSMg
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLQotIyBTaG9ydGhhbmQKLXdhcm5pbmcg
PSAkKHdhcm5pbmctaWYseSwkKDEpKQotCi0jIFNpbXBseSBleHBhbmRlZCB2YXJpYWJsZS4KLVgg
Oj0gMQotU0lNUExFIDo9ICQoWCkKLVggOj0gMgotJCh3YXJuaW5nLFNJTVBMRSA9ICQoU0lNUExF
KSkKLQotIyBSZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJsZS4KLVggOj0gMQotUkVDVVJTSVZF
ID0gJChYKQotWCA6PSAyCi0kKHdhcm5pbmcsUkVDVVJTSVZFID0gJChSRUNVUlNJVkUpKQotCi0j
IEFwcGVuZCBzb21ldGhpbmcgdG8gYSBzaW1wbHkgZXhwYW5kZWQgdmFyaWFibGUuCi1ZIDo9IDMK
LVNJTVBMRSArPSAkKFkpCi1ZIDo9IDQKLSQod2FybmluZyxTSU1QTEUgPSAkKFNJTVBMRSkpCi0K
LSMgQXBwZW5kIHNvbWV0aGluZyB0byBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlLgot
WSA6PSAzCi1SRUNVUlNJVkUgKz0gJChZKQotWSA6PSA0Ci0kKHdhcm5pbmcsUkVDVVJTSVZFID0g
JChSRUNVUlNJVkUpKQotCi0jIFVzZSArPSBvcGVyYXRvciB0byBhbiB1bmRlZmluZWQgdmFyaWFi
bGUuCi0jIFRoaXMgd29ya3MgYXMgYSByZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJsZS4KLVkg
Oj0gMwotVU5ERUZJTkVEX1ZBUklBQkxFICs9ICQoWSkKLVkgOj0gNAotJCh3YXJuaW5nLFVOREVG
SU5FRF9WQVJJQUJMRSA9ICQoVU5ERUZJTkVEX1ZBUklBQkxFKSkKLQotIyBZb3UgY2FuIHVzZSB2
YXJpYWJsZSByZWZlcmVuY2VzIGZvciB0aGUgbGVmdGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IHN0
YXRlbWVudC4KLVggOj0gQQotWSA6PSBCCi0kKFgpJChZKSA6PSA1Ci0kKHdhcm5pbmcsQUIgPSAk
KEFCKSkKLQotIyBVc2VyLWRlZmluZWQgZnVuY3Rpb24uCi1ncmVldGluZyA9ICQoMSksIG15IG5h
bWUgaXMgJCgyKS4KLSQod2FybmluZywkKGdyZWV0aW5nLEhlbGxvLEpvaG4pKQotCi0jIFRoZSBu
dW1iZXIgb2YgYXJndW1lbnRzIGlzIG5vdCBjaGVja2VkIGZvciB1c2VyLWRlZmluZWQgZnVuY3Rp
b25zLgotIyBJZiBzb21lIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwsIGl0IGlzIHVzZWZ1bCB0byBw
YXNzIGZld2VyIHBhcmFtZXRlcnMuCi0jICQoMikgd2lsbCBiZSBibGFuayBpbiB0aGlzIGNhc2Uu
Ci0kKHdhcm5pbmcsJChncmVldGluZyxIZWxsbykpCi0KLSMgVW5yZWZlcmVuY2VkIHBhcmFtZXRl
cnMgYXJlIGp1c3QgaWdub3JlZC4KLSQod2FybmluZywkKGdyZWV0aW5nLEhlbGxvLEpvaG4saWdu
b3JlZCxpZ25vcmVkKSkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggZTg4YjE3MC4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3By
ZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAg
QEAKLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLSIiIgotVmFyaWFibGUgYW5k
IHVzZXItZGVmaW5lZCBmdW5jdGlvbiB0ZXN0cy4KLSIiIgotCi1kZWYgdGVzdChjb25mKToKLSAg
ICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSA9PSAwCi0gICAgYXNzZXJ0IGNvbmYuc3RkZXJy
X21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4NDFjMy4uMDAwMDAwMAotLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyCisr
KyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1LY29uZmlnOjEwOiBTSU1QTEUgPSAxCi1LY29u
ZmlnOjE2OiBSRUNVUlNJVkUgPSAyCi1LY29uZmlnOjIyOiBTSU1QTEUgPSAxIDMKLUtjb25maWc6
Mjg6IFJFQ1VSU0lWRSA9IDIgNAotS2NvbmZpZzozNTogVU5ERUZJTkVEX1ZBUklBQkxFID0gNAot
S2NvbmZpZzo0MTogQUIgPSA1Ci1LY29uZmlnOjQ1OiBIZWxsbywgbXkgbmFtZSBpcyBKb2huLgot
S2NvbmZpZzo1MDogSGVsbG8sIG15IG5hbWUgaXMgLgotS2NvbmZpZzo1MzogSGVsbG8sIG15IG5h
bWUgaXMgSm9obi4KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0
LmluaSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0LmluaQpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggODVkN2NlOC4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3B5dGVzdC5pbmkKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLVtweXRl
c3RdCi1hZGRvcHRzID0gLS12ZXJib3NlCi0KLSMgUHl0ZXN0IHJlcXVpcmVzIHRoYXQgdGVzdCBm
aWxlcyBoYXZlIHVuaXF1ZSBuYW1lcywgYmVjYXVzZSBweXRlc3QgaW1wb3J0cwotIyB0aGVtIGFz
IHRvcC1sZXZlbCBtb2R1bGVzLiAgSXQgaXMgc2lsbHkgdG8gcHJlZml4IG9yIHN1ZmZpeCBhIHRl
c3QgZmlsZSB3aXRoCi0jIHRoZSBkaXJlY3RvcnkgbmFtZSB0aGF0IGNvbnRhaW5zIGl0LiAgVXNl
IF9faW5pdF9fLnB5IGZvciBhbGwgdGVzdCBmaWxlcy4KLXB5dGhvbl9maWxlcyA9IF9faW5pdF9f
LnB5CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2No
b2ljZS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9p
Y2UvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODM1MGRlNy4uMDAwMDAw
MAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29u
ZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMAotCi1jaG9pY2UKLQlwcm9tcHQgImNob2ljZSIKLQotY29uZmlnIEEKLQli
b29sICJBIgotCi1jb25maWcgQgotCWJvb2wgIkIiCi0KLWlmIEIKLWNob2ljZQotCXByb21wdCAi
c3ViIGNob2ljZSIKLQotY29uZmlnIEMKLQlib29sICJDIgotCi1jb25maWcgRAotCWJvb2wgIkQi
Ci0KLWlmIEQKLWNob2ljZQotCXByb21wdCAic3Vic3ViIGNob2ljZSIKLQotY29uZmlnIEUKLQli
b29sICJFIgotCi1lbmRjaG9pY2UKLWVuZGlmICMgRAotCi1lbmRjaG9pY2UKLWVuZGlmICMgQgot
Ci1lbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9u
ZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDllNGIyZGIuLjAwMDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25l
c3RlZF9jaG9pY2UvX19pbml0X18ucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0j
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCi0iIiIKLVNldCByYW5kb20gdmFsdWVz
IHJlY3Vyc2l2ZWx5IGluIG5lc3RlZCBjaG9pY2VzLgotCi1LY29uZmlnIGNhbiBjcmVhdGUgYSBj
aG9pY2UtaW4tY2hvaWNlIHN0cnVjdHVyZSBieSB1c2luZyAnaWYnIHN0YXRlbWVudC4KLXJhbmRj
b25maWcgc2hvdWxkIGNvcnJlY3RseSBzZXQgcmFuZG9tIGNob2ljZSB2YWx1ZXMuCi0KLVJlbGF0
ZWQgTGludXggY29tbWl0OiAzYjlhMTllMDg5NjBlNWNkYWQ1MjUzOTk4NjM3NjUzZTU5MmEzYzI5
Ci0iIiIKLQotCi1kZWYgdGVzdChjb25mKToKLSAgICBmb3IgaSBpbiByYW5nZSgyMCk6Ci0gICAg
ICAgIGFzc2VydCBjb25mLnJhbmRjb25maWcoKSA9PSAwCi0gICAgICAgIGFzc2VydCAoY29uZi5j
b25maWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dDAnKSBvcgotICAgICAgICAgICAgICAgIGNv
bmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQxJykgb3IKLSAgICAgICAgICAgICAg
ICBjb25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0MicpKQpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVj
dGVkX3N0ZG91dDAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1NDUwZjMuLjAwMDAw
MDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhw
ZWN0ZWRfc3Rkb3V0MAorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotQ09ORklHX0E9eQot
IyBDT05GSUdfQiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MQpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMzdhYjI5NS4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxCisrKyAvZGV2
L251bGwKQEAgLTEsNCArMCwwIEBACi0jIENPTkZJR19BIGlzIG5vdCBzZXQKLUNPTkZJR19CPXkK
LUNPTkZJR19DPXkKLSMgQ09ORklHX0QgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MiBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91
dDIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0OWZmNDcuLjAwMDAwMDAKLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBDT05GSUdfQSBpcyBub3Qgc2V0
Ci1DT05GSUdfQj15Ci0jIENPTkZJR19DIGlzIG5vdCBzZXQKLUNPTkZJR19EPXkKLUNPTkZJR19F
PXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy91dGlsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5NTg1MzkuLjAw
MDAwMDAKLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwxMjkgKzAsMCBAQAotLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwNSBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhr
Lm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA1IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5i
b3JnLm9yZz4KLSAqLwotCi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+
Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSAibGtjLmgiCi0KLS8qIGZpbGUgYWxyZWFk
eSBwcmVzZW50IGluIGxpc3Q/IElmIG5vdCBhZGQgaXQgKi8KLXN0cnVjdCBmaWxlICpmaWxlX2xv
b2t1cChjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBmaWxlICpmaWxlOwotCi0JZm9yIChm
aWxlID0gZmlsZV9saXN0OyBmaWxlOyBmaWxlID0gZmlsZS0+bmV4dCkgewotCQlpZiAoIXN0cmNt
cChuYW1lLCBmaWxlLT5uYW1lKSkgewotCQkJcmV0dXJuIGZpbGU7Ci0JCX0KLQl9Ci0KLQlmaWxl
ID0geG1hbGxvYyhzaXplb2YoKmZpbGUpKTsKLQltZW1zZXQoZmlsZSwgMCwgc2l6ZW9mKCpmaWxl
KSk7Ci0JZmlsZS0+bmFtZSA9IHhzdHJkdXAobmFtZSk7Ci0JZmlsZS0+bmV4dCA9IGZpbGVfbGlz
dDsKLQlmaWxlX2xpc3QgPSBmaWxlOwotCXJldHVybiBmaWxlOwotfQotCi0vKiBBbGxvY2F0ZSBp
bml0aWFsIGdyb3dhYmxlIHN0cmluZyAqLwotc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKQotewot
CXN0cnVjdCBnc3RyIGdzOwotCWdzLnMgPSB4bWFsbG9jKHNpemVvZihjaGFyKSAqIDY0KTsKLQln
cy5sZW4gPSA2NDsKLQlncy5tYXhfd2lkdGggPSAwOwotCXN0cmNweShncy5zLCAiXDAiKTsKLQly
ZXR1cm4gZ3M7Ci19Ci0KLS8qIEZyZWUgc3RvcmFnZSBmb3IgZ3Jvd2FibGUgc3RyaW5nICovCi12
b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3RyICpncykKLXsKLQlpZiAoZ3MtPnMpCi0JCWZyZWUoZ3Mt
PnMpOwotCWdzLT5zID0gTlVMTDsKLQlncy0+bGVuID0gMDsKLX0KLQotLyogQXBwZW5kIHRvIGdy
b3dhYmxlIHN0cmluZyAqLwotdm9pZCBzdHJfYXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3Qg
Y2hhciAqcykKLXsKLQlzaXplX3QgbDsKLQlpZiAocykgewotCQlsID0gc3RybGVuKGdzLT5zKSAr
IHN0cmxlbihzKSArIDE7Ci0JCWlmIChsID4gZ3MtPmxlbikgewotCQkJZ3MtPnMgPSB4cmVhbGxv
Yyhncy0+cywgbCk7Ci0JCQlncy0+bGVuID0gbDsKLQkJfQotCQlzdHJjYXQoZ3MtPnMsIHMpOwot
CX0KLX0KLQotLyogQXBwZW5kIHByaW50ZiBmb3JtYXR0ZWQgc3RyaW5nIHRvIGdyb3dhYmxlIHN0
cmluZyAqLwotdm9pZCBzdHJfcHJpbnRmKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqZm10
LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQljaGFyIHNbMTAwMDBdOyAvKiBiaWcgZW5vdWdoLi4u
ICovCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JdnNucHJpbnRmKHMsIHNpemVvZihzKSwgZm10LCBh
cCk7Ci0Jc3RyX2FwcGVuZChncywgcyk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotLyogUmV0cmlldmUg
dmFsdWUgb2YgZ3Jvd2FibGUgc3RyaW5nICovCi1jb25zdCBjaGFyICpzdHJfZ2V0KHN0cnVjdCBn
c3RyICpncykKLXsKLQlyZXR1cm4gZ3MtPnM7Ci19Ci0KLXZvaWQgKnhtYWxsb2Moc2l6ZV90IHNp
emUpCi17Ci0Jdm9pZCAqcCA9IG1hbGxvYyhzaXplKTsKLQlpZiAocCkKLQkJcmV0dXJuIHA7Ci0J
ZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7Ci0JZXhpdCgxKTsKLX0KLQotdm9p
ZCAqeGNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQotewotCXZvaWQgKnAgPSBjYWxs
b2Mobm1lbWIsIHNpemUpOwotCWlmIChwKQotCQlyZXR1cm4gcDsKLQlmcHJpbnRmKHN0ZGVyciwg
Ik91dCBvZiBtZW1vcnkuXG4iKTsKLQlleGl0KDEpOwotfQotCi12b2lkICp4cmVhbGxvYyh2b2lk
ICpwLCBzaXplX3Qgc2l6ZSkKLXsKLQlwID0gcmVhbGxvYyhwLCBzaXplKTsKLQlpZiAocCkKLQkJ
cmV0dXJuIHA7Ci0JZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7Ci0JZXhpdCgx
KTsKLX0KLQotY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICpzKQotewotCWNoYXIgKnA7Ci0KLQlw
ID0gc3RyZHVwKHMpOwotCWlmIChwKQotCQlyZXR1cm4gcDsKLQlmcHJpbnRmKHN0ZGVyciwgIk91
dCBvZiBtZW1vcnkuXG4iKTsKLQlleGl0KDEpOwotfQotCi1jaGFyICp4c3RybmR1cChjb25zdCBj
aGFyICpzLCBzaXplX3QgbikKLXsKLQljaGFyICpwOwotCi0JcCA9IHN0cm5kdXAocywgbik7Ci0J
aWYgKHApCi0JCXJldHVybiBwOwotCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIp
OwotCWV4aXQoMSk7Ci19CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3pjb25mLmxl
eC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYwpkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYjI1ODc3Ni4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3pj
b25mLmxleC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjgyMCArMCwwIEBACi0KLSNkZWZpbmUgIFlZ
X0lOVF9BTElHTkVEIHNob3J0IGludAotCi0vKiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQg
YnkgZmxleCAqLwotCi0jZGVmaW5lIEZMRVhfU0NBTk5FUgotI2RlZmluZSBZWV9GTEVYX01BSk9S
X1ZFUlNJT04gMgotI2RlZmluZSBZWV9GTEVYX01JTk9SX1ZFUlNJT04gNgotI2RlZmluZSBZWV9G
TEVYX1NVQk1JTk9SX1ZFUlNJT04gMQotI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAK
LSNkZWZpbmUgRkxFWF9CRVRBCi0jZW5kaWYKLQotLyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxh
dGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3BlY2lmaWMgaXNzdWVzLiAqLwotCi0vKiBiZWdp
biBzdGFuZGFyZCBDIGhlYWRlcnMuICovCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxz
dHJpbmcuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0vKiBl
bmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwotCi0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0
aW9ucyAqLwotCi0jaWZuZGVmIEZMRVhJTlRfSAotI2RlZmluZSBGTEVYSU5UX0gKLQotLyogQzk5
IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5vbi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5v
dC4gKi8KLQotI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9O
X18gPj0gMTk5OTAxTAotCi0vKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JP
UyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAotICogaWYgeW91IHdhbnQgdGhlIGxpbWl0ICht
YXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gCi0gKi8KLSNpZm5kZWYgX19TVERDX0xJTUlU
X01BQ1JPUwotI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8aW50dHlwZXMuaD4KLXR5cGVkZWYgaW50OF90IGZsZXhfaW50OF90OwotdHlwZWRlZiB1aW50
OF90IGZsZXhfdWludDhfdDsKLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVm
IHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90Owot
dHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNo
YXIgZmxleF9pbnQ4X3Q7Ci10eXBlZGVmIHNob3J0IGludCBmbGV4X2ludDE2X3Q7Ci10eXBlZGVm
IGludCBmbGV4X2ludDMyX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAK
LXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7Ci10eXBlZGVmIHVuc2ln
bmVkIGludCBmbGV4X3VpbnQzMl90OwotCi0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICov
Ci0jaWZuZGVmIElOVDhfTUlOCi0jZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgp
Ci0jZW5kaWYKLSNpZm5kZWYgSU5UMTZfTUlOCi0jZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAg
ICAgKC0zMjc2Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDMyX01JTgotI2RlZmluZSBJTlQzMl9N
SU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQotI2VuZGlmCi0jaWZuZGVmIElOVDhfTUFY
Ci0jZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKLSNlbmRpZgotI2lmbmRlZiBJ
TlQxNl9NQVgKLSNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCi0jZW5kaWYK
LSNpZm5kZWYgSU5UMzJfTUFYCi0jZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0
ODM2NDcpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDhfTUFYCi0jZGVmaW5lIFVJTlQ4X01BWCAgICAg
ICAgICAgICAgKDI1NVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDE2X01BWAotI2RlZmluZSBVSU5U
MTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpCi0jZW5kaWYKLSNpZm5kZWYgVUlOVDMyX01BWAot
I2RlZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKLSNlbmRpZgotCi0j
ZW5kaWYgLyogISBDOTkgKi8KLQotI2VuZGlmIC8qICEgRkxFWElOVF9IICovCi0KLS8qIFRPRE86
IHRoaXMgaXMgYWx3YXlzIGRlZmluZWQsIHNvIGlubGluZSBpdCAqLwotI2RlZmluZSB5eWNvbnN0
IGNvbnN0Ci0KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCi0jZGVmaW5l
IHl5bm9yZXR1cm4gX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKLSNlbHNlCi0jZGVmaW5l
IHl5bm9yZXR1cm4KLSNlbmRpZgotCi0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLwot
I2RlZmluZSBZWV9OVUxMIDAKLQotLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9z
c2libHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQKLSAqIGludGVnZXIgZm9yIHVzZSBhcyBh
biBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQgY2hhciBpcyBuZWdhdGl2ZSwKLSAqIHdlIHdh
bnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0
aGUKLSAqIGRvdWJsZSBjYXN0LgotICovCi0jZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWdu
ZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykKLQotLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24u
ICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAotICogYnV0IHdl
IGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1s
ZXNzCi0gKiBkZWZpbml0aW9uIG9mIEJFR0lOLgotICovCi0jZGVmaW5lIEJFR0lOICh5eV9zdGFy
dCkgPSAxICsgMiAqCi0KLS8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRv
IGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCi0gKiB0byBCRUdJTiB0byByZXR1cm4g
dG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAotICogY29tcGF0aWJp
bGl0eS4KLSAqLwotI2RlZmluZSBZWV9TVEFSVCAoKCh5eV9zdGFydCkgLSAxKSAvIDIpCi0jZGVm
aW5lIFlZU1RBVEUgWVlfU1RBUlQKLQotLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2Yg
YSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlf
RU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKLQotLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAi
c3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KLSNkZWZpbmUgWVlfTkVXX0ZJTEUgeXly
ZXN0YXJ0KHl5aW4gICkKLQotI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMAotCi0vKiBT
aXplIG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLwotI2lmbmRlZiBZWV9CVUZfU0laRQotI2lm
ZGVmIF9faWE2NF9fCi0vKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhr
LgotICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0aGUg
Z2VuZXJhbCBjYXNlLgotICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5
LgotICovCi0jZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4Ci0jZWxzZQotI2RlZmluZSBZWV9CVUZf
U0laRSAxNjM4NAotI2VuZGlmIC8qIF9faWE2NF9fICovCi0jZW5kaWYKLQotLyogVGhlIHN0YXRl
IGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVy
IGluIHRoZSBtYWluIGJ1ZmZlci4KLSAqLwotI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAgICgo
WVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKLQotI2lmbmRlZiBZWV9U
WVBFREVGX1lZX0JVRkZFUl9TVEFURQotI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFU
RQotdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Ci0jZW5k
aWYKLQotI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAotI2RlZmluZSBZWV9UWVBFREVGX1lZ
X1NJWkVfVAotdHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OwotI2VuZGlmCi0KLWV4dGVybiBpbnQg
eXlsZW5nOwotCi1leHRlcm4gRklMRSAqeXlpbiwgKnl5b3V0OwotCi0jZGVmaW5lIEVPQl9BQ1Rf
Q09OVElOVUVfU0NBTiAwCi0jZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUgMQotI2RlZmluZSBF
T0JfQUNUX0xBU1RfTUFUQ0ggMgotCi0gICAgLyogTm90ZTogV2Ugc3BlY2lmaWNhbGx5IG9taXQg
dGhlIHRlc3QgZm9yIHl5X3J1bGVfY2FuX21hdGNoX2VvbCBiZWNhdXNlIGl0IHJlcXVpcmVzCi0g
ICAgICogICAgICAgYWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB5eV9hY3QuIFNpbmNlIHl5
bGVzcygpIGlzIGEgbWFjcm8sIGl0IHdvdWxkIGJyZWFrCi0gICAgICogICAgICAgZXhpc3Rpbmcg
c2Nhbm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSB5eWxleC4KLSAgICAgKiAg
ICAgICBPbmUgb2J2aW91cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0
cmllZCB0aGF0LCBhbmQgc2F3Ci0gICAgICogICAgICAgYSA1JSBwZXJmb3JtYW5jZSBoaXQgaW4g
YSBub24teXlsaW5lbm8gc2Nhbm5lciwgYmVjYXVzZSB5eV9hY3QgaXMKLSAgICAgKiAgICAgICBu
b3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdv
cnRoIGl0LgotICAgICAqLwotICAgICNkZWZpbmUgIFlZX0xFU1NfTElORU5PKG4pIFwKLSAgICAg
ICAgICAgIGRvIHsgXAotICAgICAgICAgICAgICAgIGludCB5eWw7XAotICAgICAgICAgICAgICAg
IGZvciAoIHl5bCA9IG47IHl5bCA8IHl5bGVuZzsgKyt5eWwgKVwKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcCi0gICAgICAgICAgICAgICAgICAgICAgICAt
LXl5bGluZW5vO1wKLSAgICAgICAgICAgIH13aGlsZSgwKQotICAgICNkZWZpbmUgWVlfTElORU5P
X1JFV0lORF9UTyhkc3QpIFwKLSAgICAgICAgICAgIGRvIHtcCi0gICAgICAgICAgICAgICAgY29u
c3QgY2hhciAqcDtcCi0gICAgICAgICAgICAgICAgZm9yICggcCA9IHl5X2NwLTE7IHAgPj0gKGRz
dCk7IC0tcClcCi0gICAgICAgICAgICAgICAgICAgIGlmICggKnAgPT0gJ1xuJyApXAotICAgICAg
ICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCi0gICAgICAgICAgICB9d2hpbGUoMCkKLSAg
ICAKLS8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJzIGJh
Y2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KLSNkZWZpbmUgeXlsZXNzKG4pIFwKLQlkbyBcCi0J
CXsgXAotCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKLSAgICAg
ICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19MSU5FTk8o
eXlsZXNzX21hY3JvX2FyZyk7XAotCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgXAotCQlZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKLQkJKHl5X2NfYnVmX3ApID0geXlfY3AgPSB5eV9icCAr
IHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAotCQlZWV9ET19CRUZPUkVfQUNUSU9O
OyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKLQkJfSBcCi0Jd2hpbGUgKCAwICkKLQotI2Rl
ZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCAoeXl0ZXh0X3B0cikgICkKLQotI2lmbmRlZiBZWV9T
VFJVQ1RfWVlfQlVGRkVSX1NUQVRFCi0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUK
LXN0cnVjdCB5eV9idWZmZXJfc3RhdGUKLQl7Ci0JRklMRSAqeXlfaW5wdXRfZmlsZTsKLQotCWNo
YXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLwotCWNoYXIgKnl5X2J1Zl9wb3M7CQkv
KiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLwotCi0JLyogU2l6ZSBvZiBpbnB1
dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCi0JICogY2hhcmFj
dGVycy4KLQkgKi8KLQlpbnQgeXlfYnVmX3NpemU7Ci0KLQkvKiBOdW1iZXIgb2YgY2hhcmFjdGVy
cyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgotCSAqIGNoYXJhY3RlcnMu
Ci0JICovCi0JaW50IHl5X25fY2hhcnM7Ci0KLQkvKiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZm
ZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCi0JICogYW5kIGNhbiByZWFsbG9jKCkg
aXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KLQkgKiBkZWxldGUgaXQuCi0J
ICovCi0JaW50IHl5X2lzX291cl9idWZmZXI7Ci0KLQkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImlu
dGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKLQkgKiBpZiB3ZSdyZSB1c2luZyBz
dGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCi0JICogaW5zdGVhZCBv
ZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcgotCSAq
IGVhY2ggbmV3bGluZS4KLQkgKi8KLQlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7Ci0KLQkvKiBXaGV0
aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUuCi0J
ICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3Ro
ZXJ3aXNlCi0JICogbm90LgotCSAqLwotCWludCB5eV9hdF9ib2w7Ci0KLSAgICBpbnQgeXlfYnNf
bGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLwotICAgIGludCB5eV9ic19jb2x1bW47IC8q
KjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KLQotCS8qIFdoZXRoZXIgdG8gdHJ5IHRvIGZpbGwgdGhl
IGlucHV0IGJ1ZmZlciB3aGVuIHdlIHJlYWNoIHRoZQotCSAqIGVuZCBvZiBpdC4KLQkgKi8KLQlp
bnQgeXlfZmlsbF9idWZmZXI7Ci0KLQlpbnQgeXlfYnVmZmVyX3N0YXR1czsKLQotI2RlZmluZSBZ
WV9CVUZGRVJfTkVXIDAKLSNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxCi0JLyogV2hlbiBhbiBF
T0YncyBiZWVuIHNlZW4gYnV0IHRoZXJlJ3Mgc3RpbGwgc29tZSB0ZXh0IHRvIHByb2Nlc3MKLQkg
KiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUg
dGhhdCB3ZQotCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2Ug
YW55IG1vcmUuICBXZSBtaWdodAotCSAqIHN0aWxsIGhhdmUgYSBidW5jaCBvZiB0b2tlbnMgdG8g
bWF0Y2gsIHRob3VnaCwgYmVjYXVzZSBvZgotCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuCi0JICoK
LQkgKiBXaGVuIHdlIGFjdHVhbGx5IHNlZSB0aGUgRU9GLCB3ZSBjaGFuZ2UgdGhlIHN0YXR1cyB0
byAibmV3IgotCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250
aW51ZSBzY2FubmluZyBieQotCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBm
aWxlLgotCSAqLwotI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMgotCi0JfTsKLSNlbmRp
ZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLwotCi0vKiBTdGFjayBvZiBpbnB1dCBi
dWZmZXJzLiAqLwotc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wID0gMDsgLyoqPCBp
bmRleCBvZiB0b3Agb2Ygc3RhY2suICovCi1zdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19t
YXggPSAwOyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLwotc3RhdGljIFlZX0JVRkZFUl9TVEFU
RSAqIHl5X2J1ZmZlcl9zdGFjayA9IE5VTEw7IC8qKjwgU3RhY2sgYXMgYW4gYXJyYXkuICovCi0K
LS8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNl
IGluIHRoZQotICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEg
bW9yZSBnZW5lcmFsCi0gKiAic2Nhbm5lciBzdGF0ZSIuCi0gKgotICogUmV0dXJucyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KLSAqLwotI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAo
ICh5eV9idWZmZXJfc3RhY2spIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoeXlfYnVm
ZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldIFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgOiBOVUxMKQotCi0vKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQgdXNlZnVsIHdo
ZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90Ci0gKiBOVUxMIG9yIHdoZW4g
d2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KLSAqLwotI2RlZmluZSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgKHl5X2J1ZmZlcl9zdGFjaylbKHl5X2J1ZmZlcl9zdGFj
a190b3ApXQotCi0vKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdoZW4g
eXl0ZXh0IGlzIGZvcm1lZC4gKi8KLXN0YXRpYyBjaGFyIHl5X2hvbGRfY2hhcjsKLXN0YXRpYyBp
bnQgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9i
dWYgKi8KLWludCB5eWxlbmc7Ci0KLS8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBi
dWZmZXIuICovCi1zdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IE5VTEw7Ci1zdGF0aWMgaW50IHl5
X2luaXQgPSAwOwkJLyogd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgKi8KLXN0YXRpYyBp
bnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8KLQotLyogRmxhZyB3aGlj
aCBpcyB1c2VkIHRvIGFsbG93IHl5d3JhcCgpJ3MgdG8gZG8gYnVmZmVyIHN3aXRjaGVzCi0gKiBp
bnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVzaCB5eWluLiAgQSBiaXQgb2YgYSBoYWNrIC4uLgot
ICovCi1zdGF0aWMgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKLQotdm9pZCB5eXJl
c3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7Ci12b2lkIHl5X3N3aXRjaF90b19idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSBuZXdfYnVmZmVyICApOwotWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9i
dWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7Ci12b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZ
X0JVRkZFUl9TVEFURSBiICApOwotdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFU
RSBiICApOwotdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1
ZmZlciAgKTsKLXZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkICk7Ci0KLXN0YXRpYyB2b2lk
IHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCApOwotc3RhdGljIHZvaWQgeXlfbG9hZF9idWZm
ZXJfc3RhdGUgKHZvaWQgKTsKLXN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyIChZWV9CVUZGRVJf
U1RBVEUgYixGSUxFICpmaWxlICApOwotCi0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVz
aF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKQotCi1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
dWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgICk7Ci1ZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICApOwotWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAqYnl0ZXMsaW50IGxlbiAgKTsKLQotdm9pZCAqeXlh
bGxvYyAoeXlfc2l6ZV90ICApOwotdm9pZCAqeXlyZWFsbG9jICh2b2lkICoseXlfc2l6ZV90ICAp
Owotdm9pZCB5eWZyZWUgKHZvaWQgKiAgKTsKLQotI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2Ny
ZWF0ZV9idWZmZXIKLQotI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUp
IFwKLQl7IFwKLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAotICAgICAgICB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKCk7IFwKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAot
ICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7IFwKLQl9IFwK
LQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lzX2ludGVyYWN0aXZlID0gaXNfaW50ZXJh
Y3RpdmU7IFwKLQl9Ci0KLSNkZWZpbmUgeXlfc2V0X2JvbChhdF9ib2wpIFwKLQl7IFwKLQlpZiAo
ICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcCi0gICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAo
KTsgXAotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcCi0gICAgICAgICAgICB5eV9j
cmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsgXAotCX0gXAotCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcCi0JfQotCi0jZGVmaW5lIFlZX0FUX0JP
TCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkKLQotLyogQmVnaW4gdXNl
ciBzZWN0MyAqLwotCi0jZGVmaW5lIHl5d3JhcCgpICgvKkNPTlNUQ09ORCovMSkKLSNkZWZpbmUg
WVlfU0tJUF9ZWVdSQVAKLQotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7Ci0KLUZJTEUg
Knl5aW4gPSBOVUxMLCAqeXlvdXQgPSBOVUxMOwotCi10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBl
OwotCi1leHRlcm4gaW50IHl5bGluZW5vOwotCi1pbnQgeXlsaW5lbm8gPSAxOwotCi1leHRlcm4g
Y2hhciAqeXl0ZXh0OwotI2lmZGVmIHl5dGV4dF9wdHIKLSN1bmRlZiB5eXRleHRfcHRyCi0jZW5k
aWYKLSNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHQKLQotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQx
Nl90IHl5X254dFtdWzIxXSA9Ci0gICAgewotICAgIHsKLSAgICAgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKLSAgICAg
ICAgMAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTQs
ICAgMTQsICAgMTcsICAgMTQsICAgMTQsICAgMTQsCi0gICAgICAgMTQsICAgMTQsICAgMTQsICAg
MTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCi0gICAgICAgMTQKLSAgICB9
LAotCi0gICAgewotICAgICAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE0LCAgIDE0LCAgIDE3
LCAgIDE0LCAgIDE0LCAgIDE0LAotICAgICAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAg
IDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LAotICAgICAgIDE0Ci0gICAgfSwKLQotICAgIHsK
LSAgICAgICAxMywgICAxOCwgICAxOSwgICAyMCwgICAxOCwgICAxOCwgICAxOCwgICAyMSwgICAx
OCwgICAxOCwKLQotICAgICAgIDE4LCAgIDE4LCAgIDIyLCAgIDIzLCAgIDE4LCAgIDI0LCAgIDE4
LCAgIDI1LCAgIDE4LCAgIDE4LAotICAgICAgIDE4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAx
MywgICAxOCwgICAxOSwgICAyMCwgICAxOCwgICAxOCwgICAxOCwgICAyMSwgICAxOCwgICAxOCwK
LSAgICAgICAxOCwgICAxOCwgICAyMiwgICAyMywgICAxOCwgICAyNCwgICAxOCwgICAyNSwgICAx
OCwgICAxOCwKLSAgICAgICAxOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAgMjYsICAg
MjcsICAgMjgsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsCi0gICAgICAgMjYs
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsCi0g
ICAgICAgMjYKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDI2LCAgIDI3LCAgIDI4LCAg
IDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LAotICAgICAgIDI2LCAgIDI2LCAgIDI2
LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LAotCi0gICAgICAgMjYK
LSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDI5LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMx
LCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMxLAotICAgICAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAg
IDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDMzLAotICAgICAgIDI5Ci0gICAgfSwKLQot
ICAgIHsKLSAgICAgICAxMywgICAyOSwgICAyOSwgICAzMCwgICAyOSwgICAzMSwgICAyOSwgICAz
MiwgICAyOSwgICAzMSwKLSAgICAgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwg
ICAyOSwgICAyOSwgICAyOSwgICAzMywKLSAgICAgICAyOQotICAgIH0sCi0KLSAgICB7Ci0gICAg
ICAgMTMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAg
MzgsCi0gICAgICAgNDIsICAgNDMsICAgMzQsICAgNDQsICAgNDQsICAgMzQsICAgNDUsICAgNDYs
ICAgNDcsICAgNDgsCi0gICAgICAgNDkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAg
MzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgMzgsCi0gICAg
ICAgNDIsICAgNDMsICAgMzQsICAgNDQsICAgNDQsICAgMzQsICAgNDUsICAgNDYsICAgNDcsICAg
NDgsCi0gICAgICAgNDkKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDUwLCAgIDUxLCAg
IDUyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAotICAgICAgIDUwLCAgIDUw
LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAotICAgICAg
IDUwCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgICA1MCwgICA1MSwgICA1MiwgICA1MCwg
ICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKLSAgICAgICA1MCwgICA1MCwgICA1MCwgICA1
MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwKLSAgICAgICA1MAotICAgIH0s
Ci0KLSAgICB7Ci0gICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMs
ICAtMTMsICAtMTMsICAtMTMsCi0KLSAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywg
IC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywKLSAgICAgIC0xMwotICAgIH0sCi0KLSAgICB7
Ci0gICAgICAgMTMsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAt
MTQsICAtMTQsCi0gICAgICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQs
ICAtMTQsICAtMTQsICAtMTQsCi0gICAgICAtMTQKLSAgICB9LAotCi0gICAgewotICAgICAgIDEz
LCAgLTE1LCAgIDUzLCAgIDU0LCAgLTE1LCAgLTE1LCAgIDU1LCAgLTE1LCAgLTE1LCAgLTE1LAot
ICAgICAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1
LCAgLTE1LAotICAgICAgLTE1Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC0xNiwgIC0x
NiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKLSAgICAgIC0xNiwg
IC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwKLQot
ICAgICAgLTE2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgICA1NiwgICA1NiwgICA1Nywg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1NiwgICA1
NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1Ngot
ICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgs
ICAtMTgsICAtMTgsICAtMTgsICAtMTgsCi0gICAgICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAt
MTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsCi0gICAgICAtMTgKLSAgICB9LAotCi0g
ICAgewotICAgICAgIDEzLCAgLTE5LCAgIDU4LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5
LCAgLTE5LCAgLTE5LAotICAgICAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAgLTE5LCAg
LTE5LCAgLTE5LCAgLTE5LCAgLTE5LAotICAgICAgLTE5Ci0KLSAgICB9LAotCi0gICAgewotICAg
ICAgIDEzLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAg
LTIwLAotICAgICAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIw
LCAgLTIwLCAgLTIwLAotICAgICAgLTIwCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC0y
MSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgICA1OSwgIC0yMSwgIC0yMSwKLSAgICAg
IC0yMSwgIC0yMSwgIC0yMSwgICA1OSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0y
MSwKLSAgICAgIC0yMQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtMjIsICAtMjIsICAt
MjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsCi0gICAgICAtMjIsICAtMjIs
ICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAgNjAsICAtMjIsICAtMjIsCi0gICAgICAt
MjIKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAg
LTIzLCAgLTIzLCAgIDU5LCAgLTIzLCAgLTIzLAotCi0gICAgICAtMjMsICAtMjMsICAtMjMsICAg
NjEsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsCi0gICAgICAtMjMKLSAgICB9
LAotCi0gICAgewotICAgICAgIDEzLCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0
LCAgLTI0LCAgLTI0LCAgLTI0LAotICAgICAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAg
LTI0LCAgLTI0LCAgIDYyLCAgLTI0LCAgLTI0LAotICAgICAgLTI0Ci0gICAgfSwKLQotICAgIHsK
LSAgICAgICAxMywgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0y
NSwgIC0yNSwKLSAgICAgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwg
IC0yNSwgIC0yNSwgIC0yNSwKLSAgICAgIC0yNQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMs
ICAgNjMsICAgNjMsICAtMjYsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCi0g
ICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsCi0KLSAgICAgICA2MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtMjcsICAg
NjQsICAgNjUsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsCi0gICAgICAtMjcs
ICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsICAtMjcsCi0g
ICAgICAtMjcKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDY2LCAgLTI4LCAgLTI4LCAg
IDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2LCAgIDY2LCAgIDY2
LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LAotICAgICAgIDY2Ci0g
ICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgICA2NywgICA2NywgICA2OCwgICA2NywgIC0yOSwg
ICA2NywgIC0yOSwgICA2NywgIC0yOSwKLSAgICAgICA2NywgICA2NywgICA2NywgICA2NywgICA2
NywgICA2NywgICA2NywgICA2NywgICA2NywgIC0yOSwKLSAgICAgICA2NwotCi0gICAgfSwKLQot
ICAgIHsKLSAgICAgICAxMywgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0z
MCwgIC0zMCwgIC0zMCwKLSAgICAgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwg
IC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwKLSAgICAgIC0zMAotICAgIH0sCi0KLSAgICB7Ci0gICAg
ICAgMTMsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAt
MzEsCi0gICAgICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEs
ICAtMzEsICAtMzEsCi0gICAgICAtMzEKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDY5
LCAgIDY5LCAgLTMyLCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LAotICAgICAg
IDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5
LAotICAgICAgIDY5Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgICA3MCwgICA3MCwgICA3
MSwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwgICA3MCwKLQotICAgICAgIDcwLCAgIDcw
LCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLAotICAgICAg
IDcwCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwg
IC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwKLSAgICAgIC0zNCwgIC0zNCwgIC0zNCwgIC0z
NCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwKLSAgICAgIC0zNAotICAgIH0s
Ci0KLSAgICB7Ci0gICAgICAgMTMsICAtMzUsICAgNzIsICAtMzUsICAtMzUsICAtMzUsICAtMzUs
ICAtMzUsICAtMzUsICAtMzUsCi0gICAgICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAt
MzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsCi0gICAgICAtMzUKLSAgICB9LAotCi0gICAgewot
ICAgICAgIDEzLCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2
LCAgLTM2LAotICAgICAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAg
LTM2LCAgLTM2LCAgLTM2LAotCi0gICAgICAtMzYKLSAgICB9LAotCi0gICAgewotICAgICAgIDEz
LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LAot
ICAgICAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgIDczLCAgLTM3
LCAgLTM3LAotICAgICAgLTM3Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC0zOCwgIC0z
OCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKLSAgICAgIC0zOCwg
IC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwKLSAg
ICAgIC0zOAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAgNzQsICAgNzQsICAtMzksICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQKLQot
ICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAs
ICAtNDAsICAgNzUsICAtNDAsICAtNDAsCi0gICAgICAtNDAsICAtNDAsICAtNDAsICAgNzUsICAg
NzUsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAsCi0gICAgICAtNDAKLSAgICB9LAotCi0g
ICAgewotICAgICAgIDEzLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQx
LCAgIDc2LCAgLTQxLAotICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAg
LTQxLCAgLTQxLCAgLTQxLCAgLTQxLAotICAgICAgLTQxCi0gICAgfSwKLQotICAgIHsKLSAgICAg
ICAxMywgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00
MiwKLSAgICAgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00Miwg
IC00MiwgIC00MiwKLSAgICAgIC00MgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtNDMs
ICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsICAtNDMsCi0KLSAgICAg
IC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00
MywKLSAgICAgIC00MwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtNDQsICAtNDQsICAt
NDQsICAtNDQsICAtNDQsICAtNDQsICAgNzUsICAtNDQsICAtNDQsCi0gICAgICAtNDQsICAtNDQs
ICAtNDQsICAgNzcsICAgNzcsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsCi0gICAgICAt
NDQKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAg
LTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LAotICAgICAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1
LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgIDc4LCAgLTQ1LCAgLTQ1LAotICAgICAgLTQ1Ci0gICAgfSwK
LQotICAgIHsKLSAgICAgICAxMywgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00Niwg
IC00NiwgIC00NiwgIC00NiwKLSAgICAgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00
NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwKLQotICAgICAgLTQ2Ci0gICAgfSwKLQotICAgIHsK
LSAgICAgICAxMywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00
NywgIC00NywKLSAgICAgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00Nywg
ICA3OSwgIC00NywgIC00NywKLSAgICAgIC00NwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMs
ICAtNDgsICAtNDgsICAgODAsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsCi0g
ICAgICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgs
ICAtNDgsCi0gICAgICAtNDgKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgLTQ5LCAgLTQ5
LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LAotICAgICAgLTQ5LCAg
LTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LAotICAg
ICAgIDgxCi0KLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDgyLCAgIDgzLCAgLTUwLCAg
IDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLAotICAgICAgIDgyLCAgIDgyLCAgIDgy
LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLAotICAgICAgIDgyCi0g
ICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwg
IC01MSwgIC01MSwgIC01MSwgIC01MSwKLSAgICAgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01
MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwKLSAgICAgIC01MQotICAgIH0sCi0KLSAg
ICB7Ci0gICAgICAgMTMsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIs
ICAtNTIsICAtNTIsCi0gICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAt
NTIsICAtNTIsICAtNTIsICAtNTIsCi0gICAgICAtNTIKLSAgICB9LAotCi0gICAgewotICAgICAg
IDEzLCAgLTUzLCAgIDUzLCAgIDU0LCAgLTUzLCAgLTUzLCAgIDU1LCAgLTUzLCAgLTUzLCAgLTUz
LAotCi0gICAgICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMs
ICAtNTMsICAtNTMsCi0gICAgICAtNTMKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgLTU0
LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LAotICAgICAg
LTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0
LAotICAgICAgLTU0Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgICA1NiwgICA1NiwgICA1
NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1NiwgICA1Niwg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKLSAgICAgICA1
NgotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAgNTYsICAgNTYsICAgNTcsICAgNTYsICAg
NTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCi0gICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYs
ICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsCi0KLSAgICAgICA1NgotICAgIH0s
Ci0KLSAgICB7Ci0gICAgICAgMTMsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcs
ICAtNTcsICAtNTcsICAtNTcsCi0gICAgICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAt
NTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsCi0gICAgICAtNTcKLSAgICB9LAotCi0gICAgewot
ICAgICAgIDEzLCAgLTU4LCAgIDU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4
LCAgLTU4LAotICAgICAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAg
LTU4LCAgLTU4LCAgLTU4LAotICAgICAgLTU4Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywg
IC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgICA1OSwgIC01OSwgIC01OSwKLSAg
ICAgIC01OSwgIC01OSwgIC01OSwgICA1OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwg
IC01OSwKLSAgICAgIC01OQotCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC02MCwgIC02
MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwKLSAgICAgIC02MCwg
IC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwKLSAg
ICAgIC02MAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtNjEsICAtNjEsICAtNjEsICAt
NjEsICAtNjEsICAtNjEsICAgNTksICAtNjEsICAtNjEsCi0gICAgICAtNjEsICAtNjEsICAtNjEs
ICAgNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsCi0gICAgICAtNjEKLSAg
ICB9LAotCi0gICAgewotICAgICAgIDEzLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAg
LTYyLCAgLTYyLCAgLTYyLCAgLTYyLAotICAgICAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYy
LCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLAotICAgICAgLTYyCi0gICAgfSwKLQotICAg
IHsKLSAgICAgICAxMywgICA2MywgICA2MywgIC02MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywKLQotICAgICAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLAotICAgICAgIDYzCi0gICAgfSwKLQotICAgIHsKLSAgICAg
ICAxMywgIC02NCwgICA2NCwgICA2NSwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02
NCwKLSAgICAgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwg
IC02NCwgIC02NCwKLSAgICAgIC02NAotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAgNjYs
ICAtNjUsICAtNjUsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsCi0gICAgICAg
NjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYs
Ci0gICAgICAgNjYKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgLTY2LCAgLTY2LCAgLTY2
LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LAotICAgICAgLTY2LCAgLTY2LCAg
LTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LAotCi0gICAgICAt
NjYKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDY3LCAgIDY3LCAgIDY4LCAgIDY3LCAg
LTY3LCAgIDY3LCAgLTY3LCAgIDY3LCAgLTY3LAotICAgICAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgLTY3LAotICAgICAgIDY3Ci0gICAgfSwK
LQotICAgIHsKLSAgICAgICAxMywgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwg
IC02OCwgIC02OCwgIC02OCwKLSAgICAgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02
OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwKLSAgICAgIC02OAotICAgIH0sCi0KLSAgICB7Ci0g
ICAgICAgMTMsICAgNjksICAgNjksICAtNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjks
ICAgNjksCi0gICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksICAgNjksCi0gICAgICAgNjkKLQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMs
ICAtNzAsICAtNzAsICAgNzEsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsCi0g
ICAgICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAs
ICAtNzAsCi0gICAgICAtNzAKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgLTcxLCAgLTcx
LCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLAotICAgICAgLTcxLCAg
LTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLAotICAg
ICAgLTcxCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC03MiwgICA3MiwgIC03MiwgIC03
MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwKLSAgICAgIC03MiwgIC03MiwgIC03Miwg
IC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwKLSAgICAgIC03MgotICAg
IH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtNzMsICAtNzMsICAtNzMsICAtNzMsICAtNzMsICAt
NzMsICAtNzMsICAtNzMsICAtNzMsCi0KLSAgICAgIC03MywgIC03MywgIC03MywgIC03MywgIC03
MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywKLSAgICAgIC03MwotICAgIH0sCi0KLSAg
ICB7Ci0gICAgICAgMTMsICAgNzQsICAgNzQsICAtNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsICAgNzQsCi0gICAgICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsCi0gICAgICAgNzQKLSAgICB9LAotCi0gICAgewotICAgICAg
IDEzLCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgLTc1LCAgLTc1
LAotICAgICAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgIDc1LCAgLTc1LCAgLTc1LCAgLTc1LCAg
LTc1LCAgLTc1LAotICAgICAgLTc1Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC03Niwg
IC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwKLSAgICAgIC03
NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwK
LQotICAgICAgLTc2Ci0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywgIC03NywgIC03NywgIC03
NywgIC03NywgIC03NywgIC03NywgICA3NSwgIC03NywgIC03NywKLSAgICAgIC03NywgIC03Nywg
IC03NywgICA3NywgICA3NywgIC03NywgIC03NywgIC03NywgIC03NywgIC03NywKLSAgICAgIC03
NwotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAt
NzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsCi0gICAgICAtNzgsICAtNzgsICAtNzgsICAtNzgs
ICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsCi0gICAgICAtNzgKLSAgICB9LAot
Ci0gICAgewotICAgICAgIDEzLCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAg
LTc5LCAgLTc5LCAgLTc5LAotICAgICAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5
LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LAotICAgICAgLTc5Ci0KLSAgICB9LAotCi0gICAgewot
ICAgICAgIDEzLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgw
LCAgLTgwLAotICAgICAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAg
LTgwLCAgLTgwLCAgLTgwLAotICAgICAgLTgwCi0gICAgfSwKLQotICAgIHsKLSAgICAgICAxMywg
IC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwKLSAg
ICAgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwg
IC04MSwKLSAgICAgIC04MQotICAgIH0sCi0KLSAgICB7Ci0gICAgICAgMTMsICAgODIsICAgODMs
ICAtODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsCi0gICAgICAgODIsICAg
ODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsCi0gICAg
ICAgODIKLSAgICB9LAotCi0gICAgewotICAgICAgIDEzLCAgIDgzLCAgIDgzLCAgLTgzLCAgIDgz
LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLAotCi0gICAgICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCi0gICAgICAgODMKLSAg
ICB9LAotCi0gICAgfSA7Ci0KLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19z
dGF0ZSAodm9pZCApOwotc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAoeXlf
c3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICApOwotc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZm
ZXIgKHZvaWQgKTsKLXN0YXRpYyB2b2lkIHl5bm9yZXR1cm4geXlfZmF0YWxfZXJyb3IgKHl5Y29u
c3QgY2hhciogbXNnICApOwotCi0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFz
IGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQotICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBz
ZXRzIHVwIHl5dGV4dC4KLSAqLwotI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKLQkoeXl0
ZXh0X3B0cikgPSB5eV9icDsgXAotCXl5bGVuZyA9IChpbnQpICh5eV9jcCAtIHl5X2JwKTsgXAot
CSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBcCi0JKnl5X2NwID0gJ1wwJzsgXAotCSh5eV9jX2J1
Zl9wKSA9IHl5X2NwOwotCi0jZGVmaW5lIFlZX05VTV9SVUxFUyA0NwotI2RlZmluZSBZWV9FTkRf
T0ZfQlVGRkVSIDQ4Ci0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIs
Ci0gICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KLXN0cnVjdCB5eV90cmFuc19p
bmZvCi0JewotCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7Ci0JZmxleF9pbnQzMl90IHl5X254dDsK
LQl9Owotc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs4NF0gPQotICAgIHsg
ICAwLAotICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAotICAgICAgICAwLCAgICAwLCAgIDQ4LCAgICA1LCAgICA0LCAgICAyLCAg
ICAzLCAgIDEyLCAgIDExLCAgIDEzLAotICAgICAgICA3LCAgIDEyLCAgICA2LCAgIDEyLCAgICA4
LCAgIDQ2LCAgIDQzLCAgIDQ1LCAgIDM4LCAgIDQyLAotICAgICAgIDQxLCAgIDM2LCAgIDQwLCAg
IDM1LCAgIDM0LCAgIDI5LCAgIDIxLCAgIDI4LCAgIDMyLCAgIDMxLAotICAgICAgIDM1LCAgIDE5
LCAgIDIwLCAgIDMwLCAgIDI2LCAgIDIyLCAgIDI3LCAgIDM1LCAgIDM1LCAgIDE0LAotICAgICAg
IDE2LCAgIDE1LCAgICA0LCAgICAyLCAgICAzLCAgICAzLCAgICAxLCAgIDExLCAgICA3LCAgIDEw
LAotICAgICAgICA2LCAgICA5LCAgIDQ2LCAgIDQzLCAgIDQ1LCAgIDQ0LCAgIDM4LCAgIDM3LCAg
IDM2LCAgIDQwLAotICAgICAgIDM5LCAgIDM0LCAgIDIzLCAgIDMyLCAgIDMxLCAgIDE3LCAgIDMw
LCAgIDI0LCAgIDI1LCAgIDMzLAotICAgICAgIDE4LCAgIDE0LCAgIDE0Ci0gICAgfSA7Ci0KLXN0
YXRpYyB5eWNvbnN0IFlZX0NIQVIgeXlfZWNbMjU2XSA9Ci0gICAgeyAgIDAsCi0gICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsCi0g
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCi0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsCi0gICAgICAgIDEsICAgIDIsICAgIDQsICAgIDUsICAgIDYsICAgIDcs
ICAgIDEsICAgIDgsICAgIDksICAgMTAsCi0gICAgICAgMTEsICAgIDEsICAgMTIsICAgIDEsICAg
MTMsICAgMTQsICAgMTQsICAgMTMsICAgMTMsICAgMTMsCi0gICAgICAgMTMsICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTUsICAgIDEsICAgMTYsCi0gICAgICAgMTcsICAg
MTgsICAgIDEsICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsCi0gICAg
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAg
MTMsCi0gICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsCi0gICAgICAgIDEsICAgMTksICAgIDEsICAgIDEsICAgMTMsICAgIDEsICAg
MTMsICAgMTMsICAgMTMsICAgMTMsCi0KLSAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAx
MywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKLSAgICAgICAxMywgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKLSAgICAgICAxMywgICAx
MywgICAgMSwgICAyMCwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwK
LQotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAotICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxCi0gICAgfSA7Ci0KLS8qIFRhYmxlIG9mIGJvb2xlYW5z
LCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLwotc3RhdGljIHl5Y29uc3QgZmxleF9p
bnQzMl90IHl5X3J1bGVfY2FuX21hdGNoX2VvbFs0OF0gPQotICAgIHsgICAwLAotMSwgMSwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgCi0gICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMCwgMSwg
Ci0gICAgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgICAgIH07Ci0KLWV4dGVybiBpbnQgeXlfZmxl
eF9kZWJ1ZzsKLWludCB5eV9mbGV4X2RlYnVnID0gMDsKLQotLyogVGhlIGludGVudCBiZWhpbmQg
dGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKLSAqIGFueSB1c2VzIG9mIFJFSkVD
VCB3aGljaCBmbGV4IG1pc3NlZC4KLSAqLwotI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRfYnV0
X25vdF9kZXRlY3RlZAotI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVj
dGVkCi0jZGVmaW5lIFlZX01PUkVfQURKIDAKLSNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09G
RlNFVAotY2hhciAqeXl0ZXh0OwotCi0vKgotICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFpp
cHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR1BMIHYyLjAuCi0gKi8KLQotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1
ZGUgPGxpbWl0cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0j
aW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLSNpbmNsdWRlICJsa2Mu
aCIKLQotI2RlZmluZSBTVEFSVF9TVFJTSVpFCTE2Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCXN0cnVj
dCBmaWxlICpmaWxlOwotCWludCBsaW5lbm87Ci19IGN1cnJlbnRfcG9zOwotCi1zdGF0aWMgY2hh
ciAqdGV4dDsKLXN0YXRpYyBpbnQgdGV4dF9zaXplLCB0ZXh0X2FzaXplOwotCi1zdHJ1Y3QgYnVm
ZmVyIHsKLQlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7Ci0JWVlfQlVGRkVSX1NUQVRFIHN0YXRlOwot
fTsKLQotc3RydWN0IGJ1ZmZlciAqY3VycmVudF9idWY7Ci0KLXN0YXRpYyBpbnQgbGFzdF90cywg
Zmlyc3RfdHM7Ci0KLXN0YXRpYyBjaGFyICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNp
emVfdCBuKTsKLXN0YXRpYyB2b2lkIGFwcGVuZF9leHBhbmRlZF9zdHJpbmcoY29uc3QgY2hhciAq
aW4pOwotc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsKLXN0YXRpYyB2b2lkIHpjb25m
X2VuZGZpbGUodm9pZCk7Ci0KLXN0YXRpYyB2b2lkIG5ld19zdHJpbmcodm9pZCkKLXsKLQl0ZXh0
ID0geG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsKLQl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsK
LQl0ZXh0X3NpemUgPSAwOwotCSp0ZXh0ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgYXBwZW5kX3N0
cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQotewotCWludCBuZXdfc2l6ZSA9IHRleHRf
c2l6ZSArIHNpemUgKyAxOwotCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsKLQkJbmV3X3Np
emUgKz0gU1RBUlRfU1RSU0laRSAtIDE7Ci0JCW5ld19zaXplICY9IC1TVEFSVF9TVFJTSVpFOwot
CQl0ZXh0ID0geHJlYWxsb2ModGV4dCwgbmV3X3NpemUpOwotCQl0ZXh0X2FzaXplID0gbmV3X3Np
emU7Ci0JfQotCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBzdHIsIHNpemUpOwotCXRleHRfc2l6
ZSArPSBzaXplOwotCXRleHRbdGV4dF9zaXplXSA9IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGFsbG9j
X3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQotewotCXRleHQgPSB4bWFsbG9jKHNp
emUgKyAxKTsKLQltZW1jcHkodGV4dCwgc3RyLCBzaXplKTsKLQl0ZXh0W3NpemVdID0gMDsKLX0K
LQotc3RhdGljIHZvaWQgd2Fybl9pZ25vcmVkX2NoYXJhY3RlcihjaGFyIGNocikKLXsKLQlmcHJp
bnRmKHN0ZGVyciwKLQkgICAgICAgICIlczolZDp3YXJuaW5nOiBpZ25vcmluZyB1bnN1cHBvcnRl
ZCBjaGFyYWN0ZXIgJyVjJ1xuIiwKLQkgICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCksIGNocik7Ci19Ci0KLSNkZWZpbmUgSU5JVElBTCAwCi0jZGVmaW5lIENPTU1BTkQgMQot
I2RlZmluZSBIRUxQIDIKLSNkZWZpbmUgU1RSSU5HIDMKLSNkZWZpbmUgUEFSQU0gNAotI2RlZmlu
ZSBBU1NJR05fVkFMIDUKLQotI2lmbmRlZiBZWV9OT19VTklTVERfSAotLyogU3BlY2lhbCBjYXNl
IGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBpdCB3YXkK
LSAqIGRvd24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHVzZXIncyBzZWN0aW9uIDEgdG8gaGF2
ZSBiZWVuIHNjYW5uZWQgZmlyc3QuCi0gKiBUaGUgdXNlciBoYXMgYSBjaGFuY2UgdG8gb3ZlcnJp
ZGUgaXQgd2l0aCBhbiBvcHRpb24uCi0gKi8KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgot
Ci0jaWZuZGVmIFlZX0VYVFJBX1RZUEUKLSNkZWZpbmUgWVlfRVhUUkFfVFlQRSB2b2lkICoKLSNl
bmRpZgotCi1zdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCApOwotCi0vKiBBY2Nlc3Nv
ciBtZXRob2RzIHRvIGdsb2JhbHMuCi0gICBUaGVzZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1y
ZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmllbmNlLiAqLwotCi1pbnQgeXlsZXhfZGVzdHJv
eSAodm9pZCApOwotCi1pbnQgeXlnZXRfZGVidWcgKHZvaWQgKTsKLQotdm9pZCB5eXNldF9kZWJ1
ZyAoaW50IGRlYnVnX2ZsYWcgICk7Ci0KLVlZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKHZvaWQg
KTsKLQotdm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgICk7Ci0K
LUZJTEUgKnl5Z2V0X2luICh2b2lkICk7Ci0KLXZvaWQgeXlzZXRfaW4gIChGSUxFICogX2luX3N0
ciAgKTsKLQotRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7Ci0KLXZvaWQgeXlzZXRfb3V0ICAoRklM
RSAqIF9vdXRfc3RyICApOwotCi0JCQlpbnQgeXlnZXRfbGVuZyAodm9pZCApOwotCi1jaGFyICp5
eWdldF90ZXh0ICh2b2lkICk7Ci0KLWludCB5eWdldF9saW5lbm8gKHZvaWQgKTsKLQotdm9pZCB5
eXNldF9saW5lbm8gKGludCBfbGluZV9udW1iZXIgICk7Ci0KLS8qIE1hY3JvcyBhZnRlciB0aGlz
IHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGluCi0gKiBz
ZWN0aW9uIDEuCi0gKi8KLQotI2lmbmRlZiBZWV9TS0lQX1lZV1JBUAotI2lmZGVmIF9fY3BsdXNw
bHVzCi1leHRlcm4gIkMiIGludCB5eXdyYXAgKHZvaWQgKTsKLSNlbHNlCi1leHRlcm4gaW50IHl5
d3JhcCAodm9pZCApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBZWV9OT19VTlBVVAotICAg
IAotICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLGNoYXIgKmJ1Zl9wdHIgICk7Ci0gICAg
Ci0jZW5kaWYKLQotI2lmbmRlZiB5eXRleHRfcHRyCi1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5j
cHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQgKTsKLSNlbmRpZgotCi0jaWZkZWYgWVlfTkVF
RF9TVFJMRU4KLXN0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqICk7Ci0j
ZW5kaWYKLQotI2lmbmRlZiBZWV9OT19JTlBVVAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLXN0YXRp
YyBpbnQgeXlpbnB1dCAodm9pZCApOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5wdXQgKHZvaWQgKTsK
LSNlbmRpZgotCi0jZW5kaWYKLQotLyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGgg
ZWFjaCByZWFkLiAqLwotI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFCi0jaWZkZWYgX19pYTY0X18K
LS8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8KLSNkZWZpbmUg
WVlfUkVBRF9CVUZfU0laRSAxNjM4NAotI2Vsc2UKLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4
MTkyCi0jZW5kaWYgLyogX19pYTY0X18gKi8KLSNlbmRpZgotCi0vKiBDb3B5IHdoYXRldmVyIHRo
ZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLwotI2lmbmRlZiBF
Q0hPCi0vKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcg
bWlnaHQgY29udGFpbiBOVUwncywKLSAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCi0gKi8KLSNkZWZp
bmUgRUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgKHNpemVfdCkgeXlsZW5nLCAxLCB5eW91
dCApKSB7fSB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBp
dCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKLSAq
IGlzIHJldHVybmVkIGluICJyZXN1bHQiLgotICovCi0jaWZuZGVmIFlZX0lOUFVUCi0jZGVmaW5l
IFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwKLQllcnJubz0wOyBcCi0Jd2hpbGUgKCAo
cmVzdWx0ID0gKGludCkgcmVhZCggZmlsZW5vKHl5aW4pLCBidWYsIG1heF9zaXplICkpIDwgMCAp
IFwKLQl7IFwKLQkJaWYoIGVycm5vICE9IEVJTlRSKSBcCi0JCXsgXAotCQkJWVlfRkFUQUxfRVJS
T1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBcCi0JCQlicmVhazsgXAotCQl9
IFwKLQkJZXJybm89MDsgXAotCQljbGVhcmVycih5eWluKTsgXAotCX1cCi1cCi0KLSNlbmRpZgot
Ci0vKiBObyBzZW1pLWNvbG9uIGFmdGVyIHJldHVybjsgY29ycmVjdCB1c2FnZSBpcyB0byB3cml0
ZSAieXl0ZXJtaW5hdGUoKTsiIC0KLSAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVy
IHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQotICogc29tZSBjb21waWxlcnMg
dG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3RhdGVtZW50cy4KLSAqLwotI2lmbmRlZiB5
eXRlcm1pbmF0ZQotI2RlZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMCi0jZW5kaWYK
LQotLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdy
b3dzLiAqLwotI2lmbmRlZiBZWV9TVEFSVF9TVEFDS19JTkNSCi0jZGVmaW5lIFlZX1NUQVJUX1NU
QUNLX0lOQ1IgMjUKLSNlbmRpZgotCi0vKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8KLSNpZm5k
ZWYgWVlfRkFUQUxfRVJST1IKLSNkZWZpbmUgWVlfRkFUQUxfRVJST1IobXNnKSB5eV9mYXRhbF9l
cnJvciggbXNnICkKLSNlbmRpZgotCi0vKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0
dXJlcyBhbmQgcHJvdG90eXBlcyAqLwotCi0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVy
YXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCi0gKiBlYXNpbHkgYWRkIHBh
cmFtZXRlcnMuCi0gKi8KLSNpZm5kZWYgWVlfREVDTAotI2RlZmluZSBZWV9ERUNMX0lTX09VUlMg
MQotCi1leHRlcm4gaW50IHl5bGV4ICh2b2lkKTsKLQotI2RlZmluZSBZWV9ERUNMIGludCB5eWxl
eCAodm9pZCkKLSNlbmRpZiAvKiAhWVlfREVDTCAqLwotCi0vKiBDb2RlIGV4ZWN1dGVkIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZwotICogaGF2
ZSBiZWVuIHNldCB1cC4KLSAqLwotI2lmbmRlZiBZWV9VU0VSX0FDVElPTgotI2RlZmluZSBZWV9V
U0VSX0FDVElPTgotI2VuZGlmCi0KLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNo
IHJ1bGUuICovCi0jaWZuZGVmIFlZX0JSRUFLCi0jZGVmaW5lIFlZX0JSRUFLIC8qTElOVEVEKi9i
cmVhazsKLSNlbmRpZgotCi0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXAotCVlZX1VTRVJfQUNUSU9O
Ci0KLS8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3Jr
LgotICovCi1ZWV9ERUNMCi17Ci0JeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotCWNo
YXIgKnl5X2NwLCAqeXlfYnA7Ci0JaW50IHl5X2FjdDsKLSAgICAKLQlpZiAoICEoeXlfaW5pdCkg
KQotCQl7Ci0JCSh5eV9pbml0KSA9IDE7Ci0KLSNpZmRlZiBZWV9VU0VSX0lOSVQKLQkJWVlfVVNF
Ul9JTklUOwotI2VuZGlmCi0KLQkJaWYgKCAhICh5eV9zdGFydCkgKQotCQkJKHl5X3N0YXJ0KSA9
IDE7CS8qIGZpcnN0IHN0YXJ0IHN0YXRlICovCi0KLQkJaWYgKCAhIHl5aW4gKQotCQkJeXlpbiA9
IHN0ZGluOwotCi0JCWlmICggISB5eW91dCApCi0JCQl5eW91dCA9IHN0ZG91dDsKLQotCQlpZiAo
ICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7Ci0JCQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7Ci0J
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQotCQkJCXl5X2NyZWF0ZV9idWZmZXIoeXlpbixZ
WV9CVUZfU0laRSApOwotCQl9Ci0KLQkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Ci0JCX0KLQot
CXsKLQotCWludCBzdHIgPSAwOwotCWludCB0cywgaTsKLQotCXdoaWxlICggLypDT05TVENPTkQq
LzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLwotCQl7Ci0JCXl5
X2NwID0gKHl5X2NfYnVmX3ApOwotCi0JCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLwotCQkqeXlf
Y3AgPSAoeXlfaG9sZF9jaGFyKTsKLQotCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9u
IGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YKLQkJICogdGhlIGN1cnJlbnQgcnVuLgotCQkg
Ki8KLQkJeXlfYnAgPSB5eV9jcDsKLQotCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0YXJ0KTsK
LXl5X21hdGNoOgotCQl3aGlsZSAoICh5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJl
bnRfc3RhdGVdWyB5eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSAgXSkgPiAwICkKLQkJCSsreXlf
Y3A7Ci0KLQkJeXlfY3VycmVudF9zdGF0ZSA9IC15eV9jdXJyZW50X3N0YXRlOwotCi15eV9maW5k
X2FjdGlvbjoKLQkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3RhdGVdOwotCi0JCVlZ
X0RPX0JFRk9SRV9BQ1RJT047Ci0KLQkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAm
JiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCi0JCQl7Ci0JCQlpbnQgeXlsOwotCQkJ
Zm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCi0JCQkJaWYgKCB5eXRleHRbeXls
XSA9PSAnXG4nICkKLQkJCQkJCi0gICAgeXlsaW5lbm8rKzsKLTsKLQkJCX0KLQotZG9fYWN0aW9u
OgkvKiBUaGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCi0K
LQkJc3dpdGNoICggeXlfYWN0ICkKLQl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICov
Ci1jYXNlIDE6Ci0vKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLwotY2FzZSAyOgotLyogcnVsZSAy
IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsKLQlyZXR1cm4gVF9FT0w7Ci19Ci0J
WVlfQlJFQUsKLWNhc2UgMzoKLVlZX1JVTEVfU0VUVVAKLQotCVlZX0JSRUFLCi1jYXNlIDQ6Ci1Z
WV9SVUxFX1NFVFVQCi17Ci0JQkVHSU4oQ09NTUFORCk7Ci19Ci0JWVlfQlJFQUsKLWNhc2UgNToK
LVlZX1JVTEVfU0VUVVAKLXsKLQl1bnB1dCh5eXRleHRbMF0pOwotCUJFR0lOKENPTU1BTkQpOwot
fQotCVlZX0JSRUFLCi0KLWNhc2UgNjoKLVlZX1JVTEVfU0VUVVAKLXsKLQkJY29uc3Qgc3RydWN0
IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5eXRleHQsIHl5bGVuZyk7Ci0JCWN1cnJl
bnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7Ci0JCWN1cnJlbnRfcG9zLmxpbmVubyA9IHl5bGlu
ZW5vOwotCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfQ09NTUFORCkgewotCQkJQkVHSU4oUEFS
QU0pOwotCQkJeXlsdmFsLmlkID0gaWQ7Ci0JCQlyZXR1cm4gaWQtPnRva2VuOwotCQl9Ci0JCWFs
bG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7Ci0JCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OwotCQly
ZXR1cm4gVF9WQVJJQUJMRTsKLQl9Ci0JWVlfQlJFQUsKLWNhc2UgNzoKLVlZX1JVTEVfU0VUVVAK
LXsKLQkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgJyQnICovCi0JCXl5bHZh
bC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxlbmcpOwotCQlpZiAoc3RybGVuKHl5
bHZhbC5zdHJpbmcpKQotCQkJcmV0dXJuIFRfVkFSSUFCTEU7Ci0JCWZyZWUoeXlsdmFsLnN0cmlu
Zyk7Ci0JfQotCVlZX0JSRUFLCi1jYXNlIDg6Ci1ZWV9SVUxFX1NFVFVQCi17IEJFR0lOKEFTU0lH
Tl9WQUwpOyB5eWx2YWwuZmxhdm9yID0gVkFSX1JFQ1VSU0lWRTsgcmV0dXJuIFRfQVNTSUdOOyB9
Ci0JWVlfQlJFQUsKLWNhc2UgOToKLVlZX1JVTEVfU0VUVVAKLXsgQkVHSU4oQVNTSUdOX1ZBTCk7
IHl5bHZhbC5mbGF2b3IgPSBWQVJfU0lNUExFOyByZXR1cm4gVF9BU1NJR047IH0KLQlZWV9CUkVB
SwotY2FzZSAxMDoKLVlZX1JVTEVfU0VUVVAKLXsgQkVHSU4oQVNTSUdOX1ZBTCk7IHl5bHZhbC5m
bGF2b3IgPSBWQVJfQVBQRU5EOyByZXR1cm4gVF9BU1NJR047IH0KLQlZWV9CUkVBSwotY2FzZSAx
MToKLVlZX1JVTEVfU0VUVVAKLQotCVlZX0JSRUFLCi1jYXNlIDEyOgotWVlfUlVMRV9TRVRVUAot
d2Fybl9pZ25vcmVkX2NoYXJhY3RlcigqeXl0ZXh0KTsKLQlZWV9CUkVBSwotY2FzZSAxMzoKLS8q
IHJ1bGUgMTMgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotewotCQlCRUdJTihJTklU
SUFMKTsKLQkJcmV0dXJuIFRfRU9MOwotCX0KLQlZWV9CUkVBSwotCi1jYXNlIDE0OgotWVlfUlVM
RV9TRVRVUAotewotCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOwotCQl5eWx2YWwuc3Ry
aW5nID0gdGV4dDsKLQkJcmV0dXJuIFRfQVNTSUdOX1ZBTDsKLQl9Ci0JWVlfQlJFQUsKLWNhc2Ug
MTU6Ci0vKiBydWxlIDE1IGNhbiBtYXRjaCBlb2wgKi8KLVlZX1JVTEVfU0VUVVAKLXsgQkVHSU4o
SU5JVElBTCk7IHJldHVybiBUX0VPTDsgfQotCVlZX0JSRUFLCi1jYXNlIDE2OgotWVlfUlVMRV9T
RVRVUAotCi0JWVlfQlJFQUsKLQotY2FzZSAxNzoKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX0FO
RDsKLQlZWV9CUkVBSwotY2FzZSAxODoKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX09SOwotCVlZ
X0JSRUFLCi1jYXNlIDE5OgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfT1BFTl9QQVJFTjsKLQlZ
WV9CUkVBSwotY2FzZSAyMDoKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX0NMT1NFX1BBUkVOOwot
CVlZX0JSRUFLCi1jYXNlIDIxOgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfTk9UOwotCVlZX0JS
RUFLCi1jYXNlIDIyOgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfRVFVQUw7Ci0JWVlfQlJFQUsK
LWNhc2UgMjM6Ci1ZWV9SVUxFX1NFVFVQCi1yZXR1cm4gVF9VTkVRVUFMOwotCVlZX0JSRUFLCi1j
YXNlIDI0OgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfTEVTU19FUVVBTDsKLQlZWV9CUkVBSwot
Y2FzZSAyNToKLVlZX1JVTEVfU0VUVVAKLXJldHVybiBUX0dSRUFURVJfRVFVQUw7Ci0JWVlfQlJF
QUsKLWNhc2UgMjY6Ci1ZWV9SVUxFX1NFVFVQCi1yZXR1cm4gVF9MRVNTOwotCVlZX0JSRUFLCi1j
YXNlIDI3OgotWVlfUlVMRV9TRVRVUAotcmV0dXJuIFRfR1JFQVRFUjsKLQlZWV9CUkVBSwotY2Fz
ZSAyODoKLVlZX1JVTEVfU0VUVVAKLXsKLQkJc3RyID0geXl0ZXh0WzBdOwotCQluZXdfc3RyaW5n
KCk7Ci0JCUJFR0lOKFNUUklORyk7Ci0JfQotCVlZX0JSRUFLCi1jYXNlIDI5OgotLyogcnVsZSAy
OSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxFX1NFVFVQCi1CRUdJTihJTklUSUFMKTsgcmV0dXJu
IFRfRU9MOwotCVlZX0JSRUFLCi1jYXNlIDMwOgotWVlfUlVMRV9TRVRVUAotewotCQljb25zdCBz
dHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5nKTsKLQkJ
aWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX1BBUkFNKSB7Ci0JCQl5eWx2YWwuaWQgPSBpZDsKLQkJ
CXJldHVybiBpZC0+dG9rZW47Ci0JCX0KLQkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsK
LQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7Ci0JCXJldHVybiBUX1dPUkQ7Ci0JfQotCVlZX0JSRUFL
Ci1jYXNlIDMxOgotWVlfUlVMRV9TRVRVUAotewotCQkvKiB0aGlzIHRva2VuIGluY2x1ZGVzIGF0
IGxlYXN0IG9uZSAnJCcgKi8KLQkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRleHQs
IHl5bGVuZyk7Ci0JCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpCi0JCQlyZXR1cm4gVF9XT1JE
OwotCQlmcmVlKHl5bHZhbC5zdHJpbmcpOwotCX0KLQlZWV9CUkVBSwotY2FzZSAzMjoKLVlZX1JV
TEVfU0VUVVAKLS8qIGNvbW1lbnQgKi8KLQlZWV9CUkVBSwotY2FzZSAzMzoKLS8qIHJ1bGUgMzMg
Y2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotOwotCVlZX0JSRUFLCi1jYXNlIDM0Ogot
WVlfUlVMRV9TRVRVUAotCi0JWVlfQlJFQUsKLWNhc2UgMzU6Ci1ZWV9SVUxFX1NFVFVQCi13YXJu
X2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOwotCVlZX0JSRUFLCi1jYXNlIFlZX1NUQVRFX0VP
RihQQVJBTSk6Ci17Ci0JCUJFR0lOKElOSVRJQUwpOwotCX0KLQlZWV9CUkVBSwotCi1jYXNlIDM2
OgotWVlfUlVMRV9TRVRVUAotYXBwZW5kX2V4cGFuZGVkX3N0cmluZyh5eXRleHQpOwotCVlZX0JS
RUFLCi1jYXNlIDM3OgotLyogcnVsZSAzNyBjYW4gbWF0Y2ggZW9sICovCi0qeXlfY3AgPSAoeXlf
aG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovCi1ZWV9M
SU5FTk9fUkVXSU5EX1RPKHl5X2NwIC0gMSk7Ci0oeXlfY19idWZfcCkgPSB5eV9jcCAtPSAxOwot
WVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLwotWVlfUlVMRV9T
RVRVUAotewotCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLQkJeXlsdmFsLnN0cmlu
ZyA9IHRleHQ7Ci0JCXJldHVybiBUX1dPUkRfUVVPVEU7Ci0JfQotCVlZX0JSRUFLCi1jYXNlIDM4
OgotWVlfUlVMRV9TRVRVUAotewotCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKLQl9
Ci0JWVlfQlJFQUsKLWNhc2UgMzk6Ci0vKiBydWxlIDM5IGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9j
cCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQg
Ki8KLVlZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKLSh5eV9jX2J1Zl9wKSA9IHl5X2Nw
IC09IDE7Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1Z
WV9SVUxFX1NFVFVQCi17Ci0JCWFwcGVuZF9zdHJpbmcoeXl0ZXh0ICsgMSwgeXlsZW5nIC0gMSk7
Ci0JCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OwotCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwotCX0KLQlZ
WV9CUkVBSwotY2FzZSA0MDoKLVlZX1JVTEVfU0VUVVAKLXsKLQkJYXBwZW5kX3N0cmluZyh5eXRl
eHQgKyAxLCB5eWxlbmcgLSAxKTsKLQl9Ci0JWVlfQlJFQUsKLWNhc2UgNDE6Ci1ZWV9SVUxFX1NF
VFVQCi17Ci0JCWlmIChzdHIgPT0geXl0ZXh0WzBdKSB7Ci0JCQlCRUdJTihQQVJBTSk7Ci0JCQl5
eWx2YWwuc3RyaW5nID0gdGV4dDsKLQkJCXJldHVybiBUX1dPUkRfUVVPVEU7Ci0JCX0gZWxzZQot
CQkJYXBwZW5kX3N0cmluZyh5eXRleHQsIDEpOwotCX0KLQlZWV9CUkVBSwotY2FzZSA0MjoKLS8q
IHJ1bGUgNDIgY2FuIG1hdGNoIGVvbCAqLwotWVlfUlVMRV9TRVRVUAotewotCQlmcHJpbnRmKHN0
ZGVyciwKLQkJCSIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1cHBvcnRl
ZFxuIiwKLQkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotCQlCRUdJTihJTklU
SUFMKTsKLQkJcmV0dXJuIFRfRU9MOwotCX0KLQlZWV9CUkVBSwotY2FzZSBZWV9TVEFURV9FT0Yo
U1RSSU5HKToKLXsKLQkJQkVHSU4oSU5JVElBTCk7Ci0JfQotCVlZX0JSRUFLCi0KLWNhc2UgNDM6
Ci1ZWV9SVUxFX1NFVFVQCi17Ci0JCXRzID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IHl5bGVuZzsg
aSsrKSB7Ci0JCQlpZiAoeXl0ZXh0W2ldID09ICdcdCcpCi0JCQkJdHMgPSAodHMgJiB+NykgKyA4
OwotCQkJZWxzZQotCQkJCXRzKys7Ci0JCX0KLQkJbGFzdF90cyA9IHRzOwotCQlpZiAoZmlyc3Rf
dHMpIHsKLQkJCWlmICh0cyA8IGZpcnN0X3RzKSB7Ci0JCQkJemNvbmZfZW5kaGVscCgpOwotCQkJ
CXJldHVybiBUX0hFTFBURVhUOwotCQkJfQotCQkJdHMgLT0gZmlyc3RfdHM7Ci0JCQl3aGlsZSAo
dHMgPiA4KSB7Ci0JCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCA4KTsKLQkJCQl0cyAtPSA4
OwotCQkJfQotCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCB0cyk7Ci0JCX0KLQl9Ci0JWVlf
QlJFQUsKLWNhc2UgNDQ6Ci0vKiBydWxlIDQ0IGNhbiBtYXRjaCBlb2wgKi8KLSp5eV9jcCA9ICh5
eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8KLVlZ
X0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKLSh5eV9jX2J1Zl9wKSA9IHl5X2NwIC09IDE7
Ci1ZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovCi1ZWV9SVUxF
X1NFVFVQCi17Ci0JCXpjb25mX2VuZGhlbHAoKTsKLQkJcmV0dXJuIFRfSEVMUFRFWFQ7Ci0JfQot
CVlZX0JSRUFLCi1jYXNlIDQ1OgotLyogcnVsZSA0NSBjYW4gbWF0Y2ggZW9sICovCi1ZWV9SVUxF
X1NFVFVQCi17Ci0JCWFwcGVuZF9zdHJpbmcoIlxuIiwgMSk7Ci0JfQotCVlZX0JSRUFLCi1jYXNl
IDQ2OgotWVlfUlVMRV9TRVRVUAotewotCQl3aGlsZSAoeXlsZW5nKSB7Ci0JCQlpZiAoKHl5dGV4
dFt5eWxlbmctMV0gIT0gJyAnKSAmJiAoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnXHQnKSkKLQkJCQli
cmVhazsKLQkJCXl5bGVuZy0tOwotCQl9Ci0JCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcp
OwotCQlpZiAoIWZpcnN0X3RzKQotCQkJZmlyc3RfdHMgPSBsYXN0X3RzOwotCX0KLQlZWV9CUkVB
SwotY2FzZSBZWV9TVEFURV9FT0YoSEVMUCk6Ci17Ci0JCXpjb25mX2VuZGhlbHAoKTsKLQkJcmV0
dXJuIFRfSEVMUFRFWFQ7Ci0JfQotCVlZX0JSRUFLCi0KLWNhc2UgWVlfU1RBVEVfRU9GKElOSVRJ
QUwpOgotY2FzZSBZWV9TVEFURV9FT0YoQ09NTUFORCk6Ci1jYXNlIFlZX1NUQVRFX0VPRihBU1NJ
R05fVkFMKToKLXsKLQlpZiAoY3VycmVudF9maWxlKSB7Ci0JCXpjb25mX2VuZGZpbGUoKTsKLQkJ
cmV0dXJuIFRfRU9MOwotCX0KLQlmY2xvc2UoeXlpbik7Ci0JeXl0ZXJtaW5hdGUoKTsKLX0KLQlZ
WV9CUkVBSwotY2FzZSA0NzoKLVlZX1JVTEVfU0VUVVAKLVlZX0ZBVEFMX0VSUk9SKCAiZmxleCBz
Y2FubmVyIGphbW1lZCIgKTsKLQlZWV9CUkVBSwotCi0JY2FzZSBZWV9FTkRfT0ZfQlVGRkVSOgot
CQl7Ci0JCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9CIGNo
YXIuICovCi0JCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2NwIC0g
KHl5dGV4dF9wdHIpKSAtIDE7Ci0KLQkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZP
UkVfQUNUSU9OLiAqLwotCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKLQkJWVlfUkVTVE9SRV9Z
WV9NT1JFX09GRlNFVAotCi0JCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZm
ZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQotCQkJewotCQkJLyogV2UncmUgc2Nhbm5pbmcg
YSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRo
aXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgotCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQg
YSBuZXcgc291cmNlIGFuZCBjYWxsZWQKLQkJCSAqIHl5bGV4KCkuICBJZiBzbywgdGhlbiB3ZSBo
YXZlIHRvIGFzc3VyZQotCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJSRU5UX0JVRkZF
UiBhbmQgb3VyCi0JCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8g
c28sIGJlY2F1c2UKLQkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBw
b3NzaWJseSBhCi0JCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRoZSBuZXcgaW5w
dXQgc291cmNlLgotCQkJICovCi0JCQkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnM7Ci0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0
X2ZpbGUgPSB5eWluOwotCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3Rh
dHVzID0gWVlfQlVGRkVSX05PUk1BTDsKLQkJCX0KLQotCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0
ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCi0JCSAqIG9mIHRoZSBmaXJz
dCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCi0JCSAqIGFscmVhZHkg
aGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIKLQkJICogKHNpbmNl
IGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCi0JCSAqIGVuZC1vZi1i
dWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0Ci0JCSAqIGluIGlucHV0
KCkuCi0JCSAqLwotCQlpZiAoICh5eV9jX2J1Zl9wKSA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApCi0JCQl7IC8qIFRoaXMgd2FzIHJlYWxseSBh
IE5VTC4gKi8KLQkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsKLQotCQkJKHl5X2NfYnVm
X3ApID0gKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dDsKLQotCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7Ci0KLQkJCS8qIE9rYXks
IHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTAotCQkJICogdHJhbnNpdGlvbi4g
IFdlIGNvdWxkbid0IGhhdmUKLQkJCSAqIHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFk
IGFuZCBkbyBpdAotCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBk
ZWFsCi0JCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QK
LQkJCSAqIHdhbnQgdG8gYnVpbGQgamFtbWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAotCQkJ
ICogd2lsbCBydW4gbW9yZSBzbG93bHkpLgotCQkJICovCi0KLQkJCXl5X25leHRfc3RhdGUgPSB5
eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICk7Ci0KLQkJCXl5X2JwID0gKHl5dGV4
dF9wdHIpICsgWVlfTU9SRV9BREo7Ci0KLQkJCWlmICggeXlfbmV4dF9zdGF0ZSApCi0JCQkJewot
CQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8KLQkJCQl5eV9jcCA9ICsrKHl5X2NfYnVmX3ApOwot
CQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9uZXh0X3N0YXRlOwotCQkJCWdvdG8geXlfbWF0Y2g7
Ci0JCQkJfQotCi0JCQllbHNlCi0JCQkJewotCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOwotCQkJ
CWdvdG8geXlfZmluZF9hY3Rpb247Ci0JCQkJfQotCQkJfQotCi0JCWVsc2Ugc3dpdGNoICggeXlf
Z2V0X25leHRfYnVmZmVyKCAgKSApCi0JCQl7Ci0JCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6
Ci0JCQkJewotCQkJCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMDsKLQotCQkJCWlm
ICggeXl3cmFwKCApICkKLQkJCQkJewotCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2Vu
IGNhcmUgaW4KLQkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXAKLQkJ
CQkJICogeXl0ZXh0LCB3ZSBjYW4gbm93IHNldCB1cAotCQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRo
YXQgaWYgc29tZSB0b3RhbAotCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2VsZikgd2FudHMg
dG8KLQkJCQkJICogY2FsbCB0aGUgc2Nhbm5lciBhZnRlciB3ZSByZXR1cm4gdGhlCi0JCQkJCSAq
IFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyCi0JCQkJCSAqIFlZX05VTEwgd2ls
bCBnZXQgcmV0dXJuZWQuCi0JCQkJCSAqLwotCQkJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0
cikgKyBZWV9NT1JFX0FESjsKLQotCQkJCQl5eV9hY3QgPSBZWV9TVEFURV9FT0YoWVlfU1RBUlQp
OwotCQkJCQlnb3RvIGRvX2FjdGlvbjsKLQkJCQkJfQotCi0JCQkJZWxzZQotCQkJCQl7Ci0JCQkJ
CWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSApCi0JCQkJCQlZWV9ORVdfRklM
RTsKLQkJCQkJfQotCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVF
X1NDQU46Ci0JCQkJKHl5X2NfYnVmX3ApID0KLQkJCQkJKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50
X29mX21hdGNoZWRfdGV4dDsKLQotCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlv
dXNfc3RhdGUoICApOwotCi0JCQkJeXlfY3AgPSAoeXlfY19idWZfcCk7Ci0JCQkJeXlfYnAgPSAo
eXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKLQkJCQlnb3RvIHl5X21hdGNoOwotCi0JCQljYXNl
IEVPQl9BQ1RfTEFTVF9NQVRDSDoKLQkJCQkoeXlfY19idWZfcCkgPQotCQkJCSZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldOwotCi0JCQkJeXlfY3VycmVu
dF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7Ci0KLQkJCQl5eV9jcCA9ICh5eV9j
X2J1Zl9wKTsKLQkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOwotCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247Ci0JCQl9Ci0JCWJyZWFrOwotCQl9Ci0KLQlkZWZhdWx0OgotCQlZ
WV9GQVRBTF9FUlJPUigKLQkJCSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5v
IGFjdGlvbiBmb3VuZCIgKTsKLQl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovCi0JCX0gLyog
ZW5kIG9mIHNjYW5uaW5nIG9uZSB0b2tlbiAqLwotCX0gLyogZW5kIG9mIHVzZXIncyBkZWNsYXJh
dGlvbnMgKi8KLX0gLyogZW5kIG9mIHl5bGV4ICovCi0KLS8qIHl5X2dldF9uZXh0X2J1ZmZlciAt
IHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcgotICoKLSAqIFJldHVybnMgYSBjb2RlIHJlcHJl
c2VudGluZyBhbiBhY3Rpb246Ci0gKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQotICoJRU9CX0FDVF9D
T05USU5VRV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCi0g
KglFT0JfQUNUX0VORF9PRl9GSUxFIC0gZW5kIG9mIGZpbGUKLSAqLwotc3RhdGljIGludCB5eV9n
ZXRfbmV4dF9idWZmZXIgKHZvaWQpCi17Ci0gICAgCWNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKLQljaGFyICpzb3VyY2UgPSAoeXl0ZXh0X3B0cik7Ci0J
aW50IG51bWJlcl90b19tb3ZlLCBpOwotCWludCByZXRfdmFsOwotCi0JaWYgKCAoeXlfY19idWZf
cCkgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpICsg
MV0gKQotCQlZWV9GQVRBTF9FUlJPUigKLQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBl
cnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7Ci0KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApCi0JCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwg
dGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovCi0JCWlmICggKHl5X2NfYnVmX3ApIC0g
KHl5dGV4dF9wdHIpIC0gWVlfTU9SRV9BREogPT0gMSApCi0JCQl7Ci0JCQkvKiBXZSBtYXRjaGVk
IGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwgc28KLQkJCSAqIHRyZWF0IHRoaXMgYXMgYSBm
aW5hbCBFT0YuCi0JCQkgKi8KLQkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOwotCQkJfQot
Ci0JCWVsc2UKLQkJCXsKLQkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBF
T0IsIGZpcnN0Ci0JCQkgKiBwcm9jZXNzIGl0LgotCQkJICovCi0JCQlyZXR1cm4gRU9CX0FDVF9M
QVNUX01BVENIOwotCQkJfQotCQl9Ci0KLQkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCi0K
LQkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLwotCW51bWJl
cl90b19tb3ZlID0gKGludCkgKCh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAtIDEpOwotCi0J
Zm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkKLQkJKihkZXN0KyspID0gKihz
b3VyY2UrKyk7Ci0KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0
YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQotCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwg
aXQncyBub3QgZ3VhcmFudGVlZCB0byByZXR1cm4gYW4gRU9GLAotCQkgKiBqdXN0IGZvcmNlIGFu
IEVPRgotCQkgKi8KLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5
X25fY2hhcnMpID0gMDsKLQotCWVsc2UKLQkJewotCQkJaW50IG51bV90b19yZWFkID0KLQkJCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7
Ci0KLQkJd2hpbGUgKCBudW1fdG9fcmVhZCA8PSAwICkKLQkJCXsgLyogTm90IGVub3VnaCByb29t
IGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLwotCi0JCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1l
IGZvciB0aGUgY3VycmVudCBidWZmZXIgKi8KLQkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFOwotCi0JCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQotCQkJCShp
bnQpICgoeXlfY19idWZfcCkgLSBiLT55eV9jaF9idWYpOwotCi0JCQlpZiAoIGItPnl5X2lzX291
cl9idWZmZXIgKQotCQkJCXsKLQkJCQlpbnQgbmV3X3NpemUgPSBiLT55eV9idWZfc2l6ZSAqIDI7
Ci0KLQkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQotCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55
eV9idWZfc2l6ZSAvIDg7Ci0JCQkJZWxzZQotCQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOwotCi0J
CQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikKLQkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAy
IEVPQiBjaGFycy4gKi8KLQkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5X2NoX2J1ZixiLT55
eV9idWZfc2l6ZSArIDIgICk7Ci0JCQkJfQotCQkJZWxzZQotCQkJCS8qIENhbid0IGdyb3cgaXQs
IHdlIGRvbid0IG93biBpdC4gKi8KLQkJCQliLT55eV9jaF9idWYgPSBOVUxMOwotCi0JCQlpZiAo
ICEgYi0+eXlfY2hfYnVmICkKLQkJCQlZWV9GQVRBTF9FUlJPUigKLQkJCQkiZmF0YWwgZXJyb3Ig
LSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKLQotCQkJKHl5X2NfYnVmX3ApID0g
JmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07Ci0KLQkJCW51bV90b19yZWFkID0gWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCi0JCQkJCQludW1iZXJfdG9fbW92
ZSAtIDE7Ci0KLQkJCX0KLQotCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSAp
Ci0JCQludW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7Ci0KLQkJLyogUmVhZCBpbiBtb3Jl
IGRhdGEuICovCi0JCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hf
YnVmW251bWJlcl90b19tb3ZlXSksCi0JCQkoeXlfbl9jaGFycyksIG51bV90b19yZWFkICk7Ci0K
LQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOwot
CQl9Ci0KLQlpZiAoICh5eV9uX2NoYXJzKSA9PSAwICkKLQkJewotCQlpZiAoIG51bWJlcl90b19t
b3ZlID09IFlZX01PUkVfQURKICkKLQkJCXsKLQkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9PRl9G
SUxFOwotCQkJeXlyZXN0YXJ0KHl5aW4gICk7Ci0JCQl9Ci0KLQkJZWxzZQotCQkJewotCQkJcmV0
X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmZmVyX3N0YXR1cyA9Ci0JCQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOwotCQkJfQotCQl9
Ci0KLQllbHNlCi0JCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47Ci0KLQlpZiAoKCh5
eV9uX2NoYXJzKSArIG51bWJlcl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUpIHsKLQkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51
bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8KLQkJaW50IG5ld19zaXplID0gKHl5X25fY2hhcnMpICsg
bnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+IDEpOwotCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsKLQkJaWYgKCAhIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOwotCX0KLQotCSh5
eV9uX2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsKLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSOwotCi0JKHl5dGV4dF9wdHIpID0gJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmWzBdOwotCi0JcmV0dXJuIHJldF92YWw7Ci19Ci0KLS8qIHl5X2dldF9w
cmV2aW91c19zdGF0ZSAtIGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdh
cyByZWFjaGVkICovCi0KLSAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNf
c3RhdGUgKHZvaWQpCi17Ci0JeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOwotCWNoYXIg
Knl5X2NwOwotICAgIAotCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3RhcnQpOwotCi0JZm9yICgg
eXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCAoeXlfY19idWZfcCk7
ICsreXlfY3AgKQotCQl7Ci0JCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9z
dGF0ZV1bKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSldOwotCQl9Ci0K
LQlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKLX0KLQotLyogeXlfdHJ5X05VTF90cmFucyAtIHRy
eSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3RlcgotICoKLSAqIHN5bm9w
c2lzCi0gKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOwot
ICovCi0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRl
X3R5cGUgeXlfY3VycmVudF9zdGF0ZSApCi17Ci0JaW50IHl5X2lzX2phbTsKLSAgICAKLQl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVdWzFdOwotCXl5X2lzX2phbSA9
ICh5eV9jdXJyZW50X3N0YXRlIDw9IDApOwotCi0JCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlf
Y3VycmVudF9zdGF0ZTsKLX0KLQotI2lmbmRlZiBZWV9OT19VTlBVVAotCi0gICAgc3RhdGljIHZv
aWQgeXl1bnB1dCAoaW50IGMsIGNoYXIgKiB5eV9icCApCi17Ci0JY2hhciAqeXlfY3A7Ci0gICAg
Ci0gICAgeXlfY3AgPSAoeXlfY19idWZfcCk7Ci0KLQkvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGlu
ZyB1cCB5eXRleHQgKi8KLQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsKLQotCWlmICggeXlfY3Ag
PCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQotCQl7IC8qIG5lZWQg
dG8gc2hpZnQgdGhpbmdzIHVwIHRvIG1ha2Ugcm9vbSAqLwotCQkvKiArMiBmb3IgRU9CIGNoYXJz
LiAqLwotCQlpbnQgbnVtYmVyX3RvX21vdmUgPSAoeXlfbl9jaGFycykgKyAyOwotCQljaGFyICpk
ZXN0ID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWwotCQkJCQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplICsgMl07Ci0JCWNoYXIgKnNvdXJjZSA9Ci0J
CQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXTsK
LQotCQl3aGlsZSAoIHNvdXJjZSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
ICkKLQkJCSotLWRlc3QgPSAqLS1zb3VyY2U7Ci0KLQkJeXlfY3AgKz0gKGludCkgKGRlc3QgLSBz
b3VyY2UpOwotCQl5eV9icCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7Ci0JCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9Ci0JCQkoeXlfbl9jaGFycykgPSAoaW50KSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplOwotCi0JCWlmICggeXlfY3AgPCBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQotCQkJWVlfRkFUQUxfRVJST1Io
ICJmbGV4IHNjYW5uZXIgcHVzaC1iYWNrIG92ZXJmbG93IiApOwotCQl9Ci0KLQkqLS15eV9jcCA9
IChjaGFyKSBjOwotCi0gICAgaWYgKCBjID09ICdcbicgKXsKLSAgICAgICAgLS15eWxpbmVubzsK
LSAgICB9Ci0KLQkoeXl0ZXh0X3B0cikgPSB5eV9icDsKLQkoeXlfaG9sZF9jaGFyKSA9ICp5eV9j
cDsKLQkoeXlfY19idWZfcCkgPSB5eV9jcDsKLX0KLQotI2VuZGlmCi0KLSNpZm5kZWYgWVlfTk9f
SU5QVVQKLSNpZmRlZiBfX2NwbHVzcGx1cwotICAgIHN0YXRpYyBpbnQgeXlpbnB1dCAodm9pZCkK
LSNlbHNlCi0gICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpCi0jZW5kaWYKLQotewotCWludCBj
OwotICAgIAotCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKLQotCWlmICggKih5eV9j
X2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQotCQl7Ci0JCS8qIHl5X2NfYnVmX3Ag
bm93IHBvaW50cyB0byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgotCQkgKiBJZiB0
aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCi0JCSAq
IHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIu
Ci0JCSAqLwotCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKLQkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4g
Ki8KLQkJCSooeXlfY19idWZfcCkgPSAnXDAnOwotCi0JCWVsc2UKLQkJCXsgLyogbmVlZCBtb3Jl
IGlucHV0ICovCi0JCQlpbnQgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpOwot
CQkJKysoeXlfY19idWZfcCk7Ci0KLQkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggICkg
KQotCQkJCXsKLQkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKLQkJCQkJLyogVGhpcyBoYXBw
ZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQotCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0
ZWQgYQotCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVkIHRvCi0JCQkJCSAqIHRy
eSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCi0JCQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9y
IGlucHV0KCksCi0JCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8gY29uc2lkZXIuCi0JCQkJ
CSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAotCQkJCQkgKiB0byBFT0JfQUNU
X0VORF9PRl9GSUxFLgotCQkJCQkgKi8KLQotCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAq
LwotCQkJCQl5eXJlc3RhcnQoeXlpbiApOwotCi0JCQkJCS8qRkFMTFRIUk9VR0gqLwotCi0JCQkJ
Y2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgotCQkJCQl7Ci0JCQkJCWlmICggeXl3cmFwKCApICkK
LQkJCQkJCXJldHVybiAwOwotCi0JCQkJCWlmICggISAoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25f
ZW9mKSApCi0JCQkJCQlZWV9ORVdfRklMRTsKLSNpZmRlZiBfX2NwbHVzcGx1cwotCQkJCQlyZXR1
cm4geXlpbnB1dCgpOwotI2Vsc2UKLQkJCQkJcmV0dXJuIGlucHV0KCk7Ci0jZW5kaWYKLQkJCQkJ
fQotCi0JCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46Ci0JCQkJCSh5eV9jX2J1Zl9wKSA9
ICh5eXRleHRfcHRyKSArIG9mZnNldDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0K
LQljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3IgOC1iaXQg
Y2hhcidzICovCi0JKih5eV9jX2J1Zl9wKSA9ICdcMCc7CS8qIHByZXNlcnZlIHl5dGV4dCAqLwot
CSh5eV9ob2xkX2NoYXIpID0gKisrKHl5X2NfYnVmX3ApOwotCi0JaWYgKCBjID09ICdcbicgKQot
CQkKLSAgICB5eWxpbmVubysrOwotOwotCi0JcmV0dXJuIGM7Ci19Ci0jZW5kaWYJLyogaWZuZGVm
IFlZX05PX0lOUFVUICovCi0KLS8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQg
aW5wdXQgc3RyZWFtLgotICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCi0g
KiAKLSAqIEBub3RlIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRp
dGlvbiB0byBAYyBJTklUSUFMIC4KLSAqLwotICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklMRSAqIGlu
cHV0X2ZpbGUgKQotewotICAgIAotCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApewotICAgICAg
ICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
Ci0gICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsKLQl9Ci0K
LQl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICk7Ci0JeXlfbG9h
ZF9idWZmZXJfc3RhdGUoICk7Ci19Ci0KLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQg
YnVmZmVyLgotICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuCi0gKiAK
LSAqLwotICAgIHZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAgKFlZX0JVRkZFUl9TVEFURSAgbmV3
X2J1ZmZlciApCi17Ci0gICAgCi0JLyogVE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFj
ZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5Ci0JICogd2l0aAotCSAqCQl5eXBvcF9idWZmZXJf
c3RhdGUoKTsKLQkgKgkJeXlwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsKLSAgICAgKi8K
LQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7Ci0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBu
ZXdfYnVmZmVyICkKLQkJcmV0dXJuOwotCi0JaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCi0JCXsK
LQkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLwotCQkqKHl5X2Nf
YnVmX3ApID0gKHl5X2hvbGRfY2hhcik7Ci0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0gKHl5X25fY2hhcnMpOwotCQl9Ci0KLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBuZXdfYnVmZmVyOwotCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOwotCi0JLyogV2UgZG9uJ3Qg
YWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKLQkgKiBFT0Yg
KHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKLQkgKiBp
cyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUKLQkg
KiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KLQkgKi8KLQkoeXlfZGlkX2J1ZmZlcl9z
d2l0Y2hfb25fZW9mKSA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRl
ICAodm9pZCkKLXsKLSAgICAJKHl5X25fY2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9uX2NoYXJzOwotCSh5eXRleHRfcHRyKSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsKLQl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pbnB1dF9maWxlOwotCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1Zl9wKTsKLX0K
LQotLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KLSAq
IEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLgotICogQHBhcmFtIHNpemUgVGhlIGNoYXJh
Y3RlciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9T
SVpFLgotICogCi0gKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLgotICovCi0g
ICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBz
aXplICkKLXsKLQlZWV9CVUZGRVJfU1RBVEUgYjsKLSAgICAKLQliID0gKFlZX0JVRkZFUl9TVEFU
RSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKLQlpZiAoICEg
YiApCi0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0
ZV9idWZmZXIoKSIgKTsKLQotCWItPnl5X2J1Zl9zaXplID0gKHl5X3NpemVfdClzaXplOwotCi0J
LyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUg
Z2l2ZW4gYmVjYXVzZQotCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFy
YWN0ZXJzLgotCSAqLwotCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVm
X3NpemUgKyAyICApOwotCWlmICggISBiLT55eV9jaF9idWYgKQotCQlZWV9GQVRBTF9FUlJPUigg
Im91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7Ci0KLQliLT55
eV9pc19vdXJfYnVmZmVyID0gMTsKLQotCXl5X2luaXRfYnVmZmVyKGIsZmlsZSApOwotCi0JcmV0
dXJuIGI7Ci19Ci0KLS8qKiBEZXN0cm95IHRoZSBidWZmZXIuCi0gKiBAcGFyYW0gYiBhIGJ1ZmZl
ciBjcmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZlcigpCi0gKiAKLSAqLwotICAgIHZvaWQgeXlf
ZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkKLXsKLSAgICAKLQlpZiAoICEgYiAp
Ci0JCXJldHVybjsKLQotCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJl
IGlmIHdlIHNob3VsZCBwb3AgaGVyZS4gKi8KLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
KFlZX0JVRkZFUl9TVEFURSkgMDsKLQotCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCi0JCXl5
ZnJlZSgodm9pZCAqKSBiLT55eV9jaF9idWYgICk7Ci0KLQl5eWZyZWUoKHZvaWQgKikgYiAgKTsK
LX0KLQotLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4KLSAqIFRoaXMg
ZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSBi
dWZmZXIsCi0gKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVPRi4KLSAqLwot
ICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRFICBiLCBGSUxF
ICogZmlsZSApCi0KLXsKLQlpbnQgb2Vycm5vID0gZXJybm87Ci0gICAgCi0JeXlfZmx1c2hfYnVm
ZmVyKGIgKTsKLQotCWItPnl5X2lucHV0X2ZpbGUgPSBmaWxlOwotCWItPnl5X2ZpbGxfYnVmZmVy
ID0gMTsKLQotICAgIC8qIElmIGIgaXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5X2luaXRf
YnVmZmVyIHdhcyBfcHJvYmFibHlfCi0gICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3Ig
dGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuCi0gICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24n
dCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3IgY29sdW1uLgotICAgICAqLwotICAgIGlmIChi
ICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsKLSAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKLSAg
ICAgICAgYi0+eXlfYnNfY29sdW1uID0gMDsKLSAgICB9Ci0KLSAgICAgICAgYi0+eXlfaXNfaW50
ZXJhY3RpdmUgPSAwOwotICAgIAotCWVycm5vID0gb2Vycm5vOwotfQotCi0vKiogRGlzY2FyZCBh
bGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBi
ZSBjYWxsZWQuCi0gKiBAcGFyYW0gYiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVz
dWFsbHkgQGMgWVlfQ1VSUkVOVF9CVUZGRVIuCi0gKiAKLSAqLwotICAgIHZvaWQgeXlfZmx1c2hf
YnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgKQotewotICAgIAlpZiAoICEgYiApCi0JCXJldHVy
bjsKLQotCWItPnl5X25fY2hhcnMgPSAwOwotCi0JLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1v
Zi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMKLQkgKiBhIHRyYW5zaXRpb24g
dG8gdGhlIGVuZC1vZi1idWZmZXIgc3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcwotCSAqIGEgamFt
IGluIHRoYXQgc3RhdGUuCi0JICovCi0JYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSOwotCWItPnl5X2NoX2J1ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKLQotCWIt
Pnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOwotCi0JYi0+eXlfYXRfYm9sID0gMTsKLQli
LT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsKLQotCWlmICggYiA9PSBZWV9DVVJS
RU5UX0JVRkZFUiApCi0JCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOwotfQotCi0vKiogUHVzaGVz
IHRoZSBuZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcwotICog
IHRoZSBjdXJyZW50IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNr
Ci0gKiAgaWYgbmVjZXNzYXJ5LgotICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUu
Ci0gKiAgCi0gKi8KLXZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5l
d19idWZmZXIgKQotewotICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQotCQlyZXR1cm47Ci0K
LQl5eWVuc3VyZV9idWZmZXJfc3RhY2soKTsKLQotCS8qIFRoaXMgYmxvY2sgaXMgY29waWVkIGZy
b20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8KLQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkKLQkJ
ewotCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovCi0JCSooeXlf
Y19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOwotCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7Ci0JCX0KLQotCS8qIE9ubHkgcHVzaCBpZiB0b3AgZXhp
c3RzLiBPdGhlcndpc2UsIHJlcGxhY2UgdG9wLiAqLwotCWlmIChZWV9DVVJSRU5UX0JVRkZFUikK
LQkJKHl5X2J1ZmZlcl9zdGFja190b3ApKys7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
bmV3X2J1ZmZlcjsKLQotCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovCi0J
eXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Ci0JKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikg
PSAxOwotfQotCi0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywg
aWYgcHJlc2VudC4KLSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuCi0g
KiAgCi0gKi8KLXZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkKQotewotICAgIAlpZiAoIVlZ
X0NVUlJFTlRfQlVGRkVSKQotCQlyZXR1cm47Ci0KLQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJF
TlRfQlVGRkVSICk7Ci0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLQlpZiAoKHl5
X2J1ZmZlcl9zdGFja190b3ApID4gMCkKLQkJLS0oeXlfYnVmZmVyX3N0YWNrX3RvcCk7Ci0KLQlp
ZiAoWVlfQ1VSUkVOVF9CVUZGRVIpIHsKLQkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7Ci0JCSh5
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKLQl9Ci19Ci0KLS8qIEFsbG9jYXRlcyB0
aGUgc3RhY2sgaWYgaXQgZG9lcyBub3QgZXhpc3QuCi0gKiAgR3VhcmFudGVlcyBzcGFjZSBmb3Ig
YXQgbGVhc3Qgb25lIHB1c2guCi0gKi8KLXN0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFj
ayAodm9pZCkKLXsKLQlpbnQgbnVtX3RvX2FsbG9jOwotICAgIAotCWlmICghKHl5X2J1ZmZlcl9z
dGFjaykpIHsKLQotCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMs
IHNpbmNlIHdlIGRvbid0IGtub3cgaWYgdGhpcwotCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVk
IGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgotCQkgKiBpbW1lZGlh
dGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLgotICAgICAgICAgKi8KLSAgICAgIG51bV90b19h
bGxvYyA9IDE7IC8qIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAxIGFueXdh
eXMuLi4gKi8KLQkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoq
KXl5YWxsb2MKLQkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKikKLQkJCQkJCQkJKTsKLQkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKLQkJCVlZ
X0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9z
dGFjaygpIiApOwotCi0JCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwgbnVtX3RvX2FsbG9j
ICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7Ci0KLQkJKHl5X2J1ZmZlcl9zdGFj
a19tYXgpID0gbnVtX3RvX2FsbG9jOwotCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOwotCQly
ZXR1cm47Ci0JfQotCi0JaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAoKHl5X2J1ZmZlcl9z
dGFja19tYXgpKSAtIDEpewotCi0JCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBm
b3IgYSBwb3NzaWJsZSBwdXNoLiAqLwotCQl5eV9zaXplX3QgZ3Jvd19zaXplID0gOCAvKiBhcmJp
dHJhcnkgZ3JvdyBzaXplICovOwotCi0JCW51bV90b19hbGxvYyA9ICh5eV9idWZmZXJfc3RhY2tf
bWF4KSArIGdyb3dfc2l6ZTsKLQkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSoqKXl5cmVhbGxvYwotCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksCi0JCQkJCQkJ
CW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikKLQkJCQkJCQkJ
KTsKLQkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkKLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0
IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOwotCi0JCS8q
IHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovCi0JCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSAr
ICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKSk7Ci0JCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsK
LQl9Ci19Ci0KLS8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0
bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCi0gKiBAcGFyYW0gYmFz
ZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgotICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMg
b2YgdGhlIGNoYXJhY3RlciBidWZmZXIKLSAqIAotICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2Nh
dGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCi0gKi8KLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1
ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgKQotewotCVlZX0JVRkZFUl9TVEFU
RSBiOwotICAgIAotCWlmICggc2l6ZSA8IDIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZWV9F
TkRfT0ZfQlVGRkVSX0NIQVIgfHwKLQkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVIgKQotCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3Mu
ICovCi0JCXJldHVybiBOVUxMOwotCi0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6
ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgICk7Ci0JaWYgKCAhIGIgKQotCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigpIiApOwot
Ci0JYi0+eXlfYnVmX3NpemUgPSBzaXplIC0gMjsJLyogIi0gMiIgdG8gdGFrZSBjYXJlIG9mIEVP
QidzICovCi0JYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7Ci0JYi0+eXlfaXNf
b3VyX2J1ZmZlciA9IDA7Ci0JYi0+eXlfaW5wdXRfZmlsZSA9IE5VTEw7Ci0JYi0+eXlfbl9jaGFy
cyA9IGItPnl5X2J1Zl9zaXplOwotCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKLQliLT55eV9h
dF9ib2wgPSAxOwotCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsKLQliLT55eV9idWZmZXJfc3RhdHVz
ID0gWVlfQlVGRkVSX05FVzsKLQotCXl5X3N3aXRjaF90b19idWZmZXIoYiAgKTsKLQotCXJldHVy
biBiOwotfQotCi0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGEgc3Ry
aW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAotICogc2NhbiBmcm9tIGEgQGUgY29w
eSBvZiBAYSBzdHIuCi0gKiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8g
c2NhbgotICogCi0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9i
amVjdC4KLSAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFp
biBOVUwgdmFsdWVzLCB0aGVuIHVzZQotICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGluc3RlYWQu
Ci0gKi8KLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlz
dHIgKQotewotICAgIAotCXJldHVybiB5eV9zY2FuX2J5dGVzKHl5c3RyLChpbnQpIHN0cmxlbih5
eXN0cikgKTsKLX0KLQotLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0
aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCi0gKiBzY2FuIGZy
b20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgotICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVm
ZmVyIHRvIHNjYW4KLSAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRlcyBp
biB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCi0gKiAKLSAqIEByZXR1cm4gdGhl
IG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgotICovCi1ZWV9CVUZGRVJfU1RB
VEUgeXlfc2Nhbl9ieXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNf
bGVuICkKLXsKLQlZWV9CVUZGRVJfU1RBVEUgYjsKLQljaGFyICpidWY7Ci0JeXlfc2l6ZV90IG47
Ci0JaW50IGk7Ci0gICAgCi0JLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGlu
ZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCi0JbiA9ICh5eV9zaXplX3QpIChfeXlieXRl
c19sZW4gKyAyKTsKLQlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gICk7Ci0JaWYgKCAhIGJ1ZiAp
Ci0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5fYnl0
ZXMoKSIgKTsKLQotCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQotCQlidWZb
aV0gPSB5eWJ5dGVzW2ldOwotCi0JYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVu
KzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOwotCi0JYiA9IHl5X3NjYW5fYnVmZmVyKGJ1Zixu
ICk7Ci0JaWYgKCAhIGIgKQotCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIgaW4geXlfc2Nh
bl9ieXRlcygpIiApOwotCi0JLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwg
YW5kIHdlIHNob3VsZCB0aHJvdyBpdAotCSAqIGF3YXkgd2hlbiB3ZSdyZSBkb25lLgotCSAqLwot
CWItPnl5X2lzX291cl9idWZmZXIgPSAxOwotCi0JcmV0dXJuIGI7Ci19Ci0KLSNpZm5kZWYgWVlf
RVhJVF9GQUlMVVJFCi0jZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCi0jZW5kaWYKLQotc3RhdGlj
IHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgKQotewot
CQkJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsKLQlleGl0KCBZWV9FWElU
X0ZBSUxVUkUgKTsKLX0KLQotLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2Vj
dGlvbiAzIGNvZGUuICovCi0KLSN1bmRlZiB5eWxlc3MKLSNkZWZpbmUgeXlsZXNzKG4pIFwKLQlk
byBcCi0JCXsgXAotCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwK
LSAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKLSAgICAgICAgWVlfTEVTU19M
SU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAotCQl5eXRleHRbeXlsZW5nXSA9ICh5eV9ob2xkX2No
YXIpOyBcCi0JCSh5eV9jX2J1Zl9wKSA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwKLQkJ
KHl5X2hvbGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOyBcCi0JCSooeXlfY19idWZfcCkgPSAnXDAn
OyBcCi0JCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwKLQkJfSBcCi0Jd2hpbGUgKCAwICkK
LQotLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVt
YmVycy4gKi8KLQotLyoqIEdldCB0aGUgY3VycmVudCBsaW5lIG51bWJlci4KLSAqIAotICovCi1p
bnQgeXlnZXRfbGluZW5vICAodm9pZCkKLXsKLSAgICAKLSAgICByZXR1cm4geXlsaW5lbm87Ci19
Ci0KLS8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4KLSAqIAotICovCi1GSUxFICp5eWdldF9pbiAg
KHZvaWQpCi17Ci0gICAgICAgIHJldHVybiB5eWluOwotfQotCi0vKiogR2V0IHRoZSBvdXRwdXQg
c3RyZWFtLgotICogCi0gKi8KLUZJTEUgKnl5Z2V0X291dCAgKHZvaWQpCi17Ci0gICAgICAgIHJl
dHVybiB5eW91dDsKLX0KLQotLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRva2Vu
LgotICogCi0gKi8KLWludCB5eWdldF9sZW5nICAodm9pZCkKLXsKLSAgICAgICAgcmV0dXJuIHl5
bGVuZzsKLX0KLQotLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KLSAqIAotICovCi0KLWNoYXIg
Knl5Z2V0X3RleHQgICh2b2lkKQotewotICAgICAgICByZXR1cm4geXl0ZXh0OwotfQotCi0vKiog
U2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgotICogQHBhcmFtIF9saW5lX251bWJlciBsaW5l
IG51bWJlcgotICogCi0gKi8KLXZvaWQgeXlzZXRfbGluZW5vIChpbnQgIF9saW5lX251bWJlciAp
Ci17Ci0gICAgCi0gICAgeXlsaW5lbm8gPSBfbGluZV9udW1iZXI7Ci19Ci0KLS8qKiBTZXQgdGhl
IGlucHV0IHN0cmVhbS4gVGhpcyBkb2VzIG5vdCBkaXNjYXJkIHRoZSBjdXJyZW50Ci0gKiBpbnB1
dCBidWZmZXIuCi0gKiBAcGFyYW0gX2luX3N0ciBBIHJlYWRhYmxlIHN0cmVhbS4KLSAqIAotICog
QHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCi0gKi8KLXZvaWQgeXlzZXRfaW4gKEZJTEUgKiAgX2lu
X3N0ciApCi17Ci0gICAgICAgIHl5aW4gPSBfaW5fc3RyIDsKLX0KLQotdm9pZCB5eXNldF9vdXQg
KEZJTEUgKiAgX291dF9zdHIgKQotewotICAgICAgICB5eW91dCA9IF9vdXRfc3RyIDsKLX0KLQot
aW50IHl5Z2V0X2RlYnVnICAodm9pZCkKLXsKLSAgICAgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7
Ci19Ci0KLXZvaWQgeXlzZXRfZGVidWcgKGludCAgX2JkZWJ1ZyApCi17Ci0gICAgICAgIHl5X2Zs
ZXhfZGVidWcgPSBfYmRlYnVnIDsKLX0KLQotc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZv
aWQpCi17Ci0gICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUg
bm9uLXJlZW50cmFudCBzY2FubmVyLgotICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZy
b20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgotICAgICAqLwotCi0g
ICAgLyogV2UgZG8gbm90IHRvdWNoIHl5bGluZW5vIHVubGVzcyB0aGUgb3B0aW9uIGlzIGVuYWJs
ZWQuICovCi0gICAgeXlsaW5lbm8gPSAgMTsKLSAgICAKLSAgICAoeXlfYnVmZmVyX3N0YWNrKSA9
IE5VTEw7Ci0gICAgKHl5X2J1ZmZlcl9zdGFja190b3ApID0gMDsKLSAgICAoeXlfYnVmZmVyX3N0
YWNrX21heCkgPSAwOwotICAgICh5eV9jX2J1Zl9wKSA9IE5VTEw7Ci0gICAgKHl5X2luaXQpID0g
MDsKLSAgICAoeXlfc3RhcnQpID0gMDsKLQotLyogRGVmaW5lZCBpbiBtYWluLmMgKi8KLSNpZmRl
ZiBZWV9TVERJTklUCi0gICAgeXlpbiA9IHN0ZGluOwotICAgIHl5b3V0ID0gc3Rkb3V0OwotI2Vs
c2UKLSAgICB5eWluID0gTlVMTDsKLSAgICB5eW91dCA9IE5VTEw7Ci0jZW5kaWYKLQotICAgIC8q
IEZvciBmdXR1cmUgcmVmZXJlbmNlOiBTZXQgZXJybm8gb24gZXJyb3IsIHNpbmNlIHdlIGFyZSBj
YWxsZWQgYnkKLSAgICAgKiB5eWxleF9pbml0KCkKLSAgICAgKi8KLSAgICByZXR1cm4gMDsKLX0K
LQotLyogeXlsZXhfZGVzdHJveSBpcyBmb3IgYm90aCByZWVudHJhbnQgYW5kIG5vbi1yZWVudHJh
bnQgc2Nhbm5lcnMuICovCi1pbnQgeXlsZXhfZGVzdHJveSAgKHZvaWQpCi17Ci0gICAgCi0gICAg
LyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLwotCXdo
aWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKLQkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUiAgKTsKLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsKLQkJeXlwb3BfYnVm
ZmVyX3N0YXRlKCk7Ci0JfQotCi0JLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAqLwotCXl5
ZnJlZSgoeXlfYnVmZmVyX3N0YWNrKSApOwotCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsKLQot
ICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBhIG5vbi1yZWVu
dHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCi0gICAgICogeXlsZXgoKSBpcyBjYWxsZWQs
IGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCi0gICAgeXlfaW5pdF9nbG9iYWxzKCApOwot
Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzLgot
ICovCi0KLSNpZm5kZWYgeXl0ZXh0X3B0cgotc3RhdGljIHZvaWQgeXlfZmxleF9zdHJuY3B5IChj
aGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICkKLXsKLQkJCi0JaW50IGk7Ci0JZm9y
ICggaSA9IDA7IGkgPCBuOyArK2kgKQotCQlzMVtpXSA9IHMyW2ldOwotfQotI2VuZGlmCi0KLSNp
ZmRlZiBZWV9ORUVEX1NUUkxFTgotc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBj
aGFyICogcyApCi17Ci0JaW50IG47Ci0JZm9yICggbiA9IDA7IHNbbl07ICsrbiApCi0JCTsKLQot
CXJldHVybiBuOwotfQotI2VuZGlmCi0KLXZvaWQgKnl5YWxsb2MgKHl5X3NpemVfdCAgc2l6ZSAp
Ci17Ci0JCQlyZXR1cm4gbWFsbG9jKHNpemUpOwotfQotCi12b2lkICp5eXJlYWxsb2MgICh2b2lk
ICogcHRyLCB5eV9zaXplX3QgIHNpemUgKQotewotCQkKLQkvKiBUaGUgY2FzdCB0byAoY2hhciAq
KSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCi0JICogaW1wbGVtZW50YXRpb25z
IHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQotCSAqIHRoYXQgdXNl
IHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKLQkgKiBi
ZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9t
Ci0JICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBj
b252ZXJzaW9ucwotCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgotCSAqLwotCXJl
dHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Ci19Ci0KLXZvaWQgeXlmcmVlICh2b2lkICogcHRyICkK
LXsKLQkJCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFy
ICopIGNhc3QgKi8KLX0KLQotI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKLQotc3Rh
dGljIGNoYXIgKmV4cGFuZF90b2tlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IG4pCi17Ci0JY2hh
ciAqb3V0OwotCWludCBjOwotCWNoYXIgYzI7Ci0JY29uc3QgY2hhciAqcmVzdCwgKmVuZDsKLQot
CW5ld19zdHJpbmcoKTsKLQlhcHBlbmRfc3RyaW5nKGluLCBuKTsKLQotCS8qIGdldCB0aGUgd2hv
bGUgbGluZSBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IHRoZSBlbmQgb2YgdG9rZW4uICovCi0Jd2hp
bGUgKChjID0gaW5wdXQoKSkgIT0gRU9GKSB7Ci0JCWlmIChjID09ICdcbicpIHsKLQkJCXVucHV0
KGMpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYzIgPSBjOwotCQlhcHBlbmRfc3RyaW5nKCZjMiwgMSk7
Ci0JfQotCi0JcmVzdCA9IHRleHQ7Ci0Jb3V0ID0gZXhwYW5kX29uZV90b2tlbigmcmVzdCk7Ci0K
LQkvKiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLwot
CWVuZCA9IHJlc3QgKyBzdHJsZW4ocmVzdCk7Ci0Jd2hpbGUgKGVuZCA+IHJlc3QpCi0JCXVucHV0
KCotLWVuZCk7Ci0KLQlmcmVlKHRleHQpOwotCi0JcmV0dXJuIG91dDsKLX0KLQotc3RhdGljIHZv
aWQgYXBwZW5kX2V4cGFuZGVkX3N0cmluZyhjb25zdCBjaGFyICpzdHIpCi17Ci0JY29uc3QgY2hh
ciAqZW5kOwotCWNoYXIgKnJlczsKLQotCXN0cisrOwotCi0JcmVzID0gZXhwYW5kX2RvbGxhcigm
c3RyKTsKLQotCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5wdXQgc3Ry
ZWFtICovCi0JZW5kID0gc3RyICsgc3RybGVuKHN0cik7Ci0Jd2hpbGUgKGVuZCA+IHN0cikKLQkJ
dW5wdXQoKi0tZW5kKTsKLQotCWFwcGVuZF9zdHJpbmcocmVzLCBzdHJsZW4ocmVzKSk7Ci0KLQlm
cmVlKHJlcyk7Ci19Ci0KLXZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpCi17Ci0JbmV3X3N0cmlu
ZygpOwotCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7Ci0JQkVHSU4oSEVMUCk7Ci19Ci0KLXN0YXRp
YyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCkKLXsKLQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKLQlC
RUdJTihJTklUSUFMKTsKLX0KLQotLyoKLSAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBmaWxlIHdp
dGggZm9sbG93aW5nIG5hbWVzOgotICogLi9uYW1lCi0gKiAkKHNyY3RyZWUpL25hbWUKLSAqIFRo
ZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0cmVlCi0g
KiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLgotICogUmV0dXJuIE5VTEwgaWYgZmlsZSBpcyBu
b3QgZm91bmQuCi0gKi8KLUZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0J
Y2hhciAqZW52LCBmdWxsbmFtZVtQQVRIX01BWCsxXTsKLQlGSUxFICpmOwotCi0JZiA9IGZvcGVu
KG5hbWUsICJyIik7Ci0JaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcvJykg
ewotCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7Ci0JCWlmIChlbnYpIHsKLQkJCXNwcmludGYoZnVs
bG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7Ci0JCQlmID0gZm9wZW4oZnVsbG5hbWUsICJyIik7
Ci0JCX0KLQl9Ci0JcmV0dXJuIGY7Ci19Ci0KLXZvaWQgemNvbmZfaW5pdHNjYW4oY29uc3QgY2hh
ciAqbmFtZSkKLXsKLQl5eWluID0gemNvbmZfZm9wZW4obmFtZSk7Ci0JaWYgKCF5eWluKSB7Ci0J
CWZwcmludGYoc3RkZXJyLCAiY2FuJ3QgZmluZCBmaWxlICVzXG4iLCBuYW1lKTsKLQkJZXhpdCgx
KTsKLQl9Ci0KLQljdXJyZW50X2J1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1ZikpOwot
CW1lbXNldChjdXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOwotCi0JY3VycmVu
dF9maWxlID0gZmlsZV9sb29rdXAobmFtZSk7Ci0JeXlsaW5lbm8gPSAxOwotfQotCi12b2lkIHpj
b25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IGZpbGUgKml0ZXI7Ci0J
c3RydWN0IGZpbGUgKmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKLQlzdHJ1Y3QgYnVmZmVyICpi
dWYgPSB4bWFsbG9jKHNpemVvZigqYnVmKSk7Ci0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYp
KTsKLQotCWN1cnJlbnRfYnVmLT5zdGF0ZSA9IFlZX0NVUlJFTlRfQlVGRkVSOwotCXl5aW4gPSB6
Y29uZl9mb3BlbihmaWxlLT5uYW1lKTsKLQlpZiAoIXl5aW4pIHsKLQkJZnByaW50ZihzdGRlcnIs
ICIlczolZDogY2FuJ3Qgb3BlbiBmaWxlIFwiJXNcIlxuIiwKLQkJCXpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCksIGZpbGUtPm5hbWUpOwotCQlleGl0KDEpOwotCX0KLQl5eV9zd2l0Y2hf
dG9fYnVmZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSkpOwotCWJ1Zi0+cGFy
ZW50ID0gY3VycmVudF9idWY7Ci0JY3VycmVudF9idWYgPSBidWY7Ci0KLQljdXJyZW50X2ZpbGUt
PmxpbmVubyA9IHl5bGluZW5vOwotCWZpbGUtPnBhcmVudCA9IGN1cnJlbnRfZmlsZTsKLQotCWZv
ciAoaXRlciA9IGN1cnJlbnRfZmlsZTsgaXRlcjsgaXRlciA9IGl0ZXItPnBhcmVudCkgewotCQlp
ZiAoIXN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5uYW1lKSkgewotCQkJZnByaW50ZihzdGRlcnIs
Ci0JCQkJIlJlY3Vyc2l2ZSBpbmNsdXNpb24gZGV0ZWN0ZWQuXG4iCi0JCQkJIkluY2x1c2lvbiBw
YXRoOlxuIgotCQkJCSIgIGN1cnJlbnQgZmlsZSA6ICVzXG4iLCBmaWxlLT5uYW1lKTsKLQkJCWl0
ZXIgPSBmaWxlOwotCQkJZG8gewotCQkJCWl0ZXIgPSBpdGVyLT5wYXJlbnQ7Ci0JCQkJZnByaW50
ZihzdGRlcnIsICIgIGluY2x1ZGVkIGZyb206ICVzOiVkXG4iLAotCQkJCQlpdGVyLT5uYW1lLCBp
dGVyLT5saW5lbm8gLSAxKTsKLQkJCX0gd2hpbGUgKHN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5u
YW1lKSk7Ci0JCQlleGl0KDEpOwotCQl9Ci0JfQotCi0JeXlsaW5lbm8gPSAxOwotCWN1cnJlbnRf
ZmlsZSA9IGZpbGU7Ci19Ci0KLXN0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkKLXsKLQlz
dHJ1Y3QgYnVmZmVyICpwYXJlbnQ7Ci0KLQljdXJyZW50X2ZpbGUgPSBjdXJyZW50X2ZpbGUtPnBh
cmVudDsKLQlpZiAoY3VycmVudF9maWxlKQotCQl5eWxpbmVubyA9IGN1cnJlbnRfZmlsZS0+bGlu
ZW5vOwotCi0JcGFyZW50ID0gY3VycmVudF9idWYtPnBhcmVudDsKLQlpZiAocGFyZW50KSB7Ci0J
CWZjbG9zZSh5eWluKTsKLQkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUik7Ci0J
CXl5X3N3aXRjaF90b19idWZmZXIocGFyZW50LT5zdGF0ZSk7Ci0JfQotCWZyZWUoY3VycmVudF9i
dWYpOwotCWN1cnJlbnRfYnVmID0gcGFyZW50OwotfQotCi1pbnQgemNvbmZfbGluZW5vKHZvaWQp
Ci17Ci0JcmV0dXJuIGN1cnJlbnRfcG9zLmxpbmVubzsKLX0KLQotY29uc3QgY2hhciAqemNvbmZf
Y3VybmFtZSh2b2lkKQotewotCXJldHVybiBjdXJyZW50X3Bvcy5maWxlID8gY3VycmVudF9wb3Mu
ZmlsZS0+bmFtZSA6ICI8bm9uZT4iOwotfQotCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3pjb25mLnRhYi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFjZmJjYi4uMDAwMDAwMAotLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L3pjb25mLnRhYi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjUwNCArMCwwIEBACi0v
KiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4wLjQuICAqLwotCi0vKiBCaXNv
biBpbXBsZW1lbnRhdGlvbiBmb3IgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwotCi0gICBDb3B5cmln
aHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLgotCi0gICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0g
ICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCi0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQotICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3Qs
IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLwotCi0vKiBBcyBhIHNwZWNp
YWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMK
LSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1
dGUgdGhhdCB3b3JrCi0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0
aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKLSAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNr
ZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCi0gICBhcyBhIHBhcnNlciBza2Vs
ZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCi0gICB0
aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92
ZSB0aGlzCi0gICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0
b24gYW5kIHRoZSByZXN1bHRpbmcKLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNl
ZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBz
cGVjaWFsIGV4Y2VwdGlvbi4KLQotICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgotICAgdmVyc2lvbiAyLjIgb2YgQmlz
b24uICAqLwotCi0vKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFy
ZCBTdGFsbG1hbiwgYnkKLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNl
bWFudGljIiBwYXJzZXIuICAqLwotCi0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3Vs
ZCBiZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAotICAgaW5mcmluZ2luZyBvbiB1c2VyIG5h
bWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCi0gICB2YXJpYWJs
ZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgot
ICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBm
aWxlcyB0bwotICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5v
dGVkICJJTkZSSU5HRVMgT04KLSAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLwotCi0vKiBJ
ZGVudGlmeSBCaXNvbiBvdXRwdXQuICAqLwotI2RlZmluZSBZWUJJU09OIDEKLQotLyogQmlzb24g
dmVyc2lvbi4gICovCi0jZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4wLjQiCi0KLS8qIFNrZWxl
dG9uIG5hbWUuICAqLwotI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIKLQotLyogUHVy
ZSBwYXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQVVJFIDAKLQotLyogUHVzaCBwYXJzZXJzLiAgKi8K
LSNkZWZpbmUgWVlQVVNIIDAKLQotLyogUHVsbCBwYXJzZXJzLiAgKi8KLSNkZWZpbmUgWVlQVUxM
IDEKLQotCi0KLQotLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4g
ICovCi0KLQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBs
aW51eC1tNjhrLm9yZz4KLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQ
TCB2Mi4wLgotICovCi0KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5n
Lmg+Ci0jaW5jbHVkZSA8c3RkYm9vbC5oPgotCi0jaW5jbHVkZSAibGtjLmgiCi0KLSNkZWZpbmUg
cHJpbnRkKG1hc2ssIGZtdC4uLikgaWYgKGNkZWJ1ZyAmIChtYXNrKSkgcHJpbnRmKGZtdCkKLQot
I2RlZmluZSBQUklOVEQJCTB4MDAwMQotI2RlZmluZSBERUJVR19QQVJTRQkweDAwMDIKLQotaW50
IGNkZWJ1ZyA9IFBSSU5URDsKLQotaW50IHl5bGV4KHZvaWQpOwotc3RhdGljIHZvaWQgeXllcnJv
cihjb25zdCBjaGFyICplcnIpOwotc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICpl
cnIsIC4uLik7Ci1zdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7
Ci1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBp
bnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsKLQotc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hh
c2hbU1lNQk9MX0hBU0hTSVpFXTsKLQotc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUs
ICpjdXJyZW50X2VudHJ5OwotCi0KLQotCi0jIGlmbmRlZiBZWV9OVUxMUFRSCi0jICBpZiBkZWZp
bmVkIF9fY3BsdXNwbHVzICYmIDIwMTEwM0wgPD0gX19jcGx1c3BsdXMKLSMgICBkZWZpbmUgWVlf
TlVMTFBUUiBudWxscHRyCi0jICBlbHNlCi0jICAgZGVmaW5lIFlZX05VTExQVFIgMAotIyAgZW5k
aWYKLSMgZW5kaWYKLQotLyogRW5hYmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovCi0j
aWZkZWYgWVlFUlJPUl9WRVJCT1NFCi0jIHVuZGVmIFlZRVJST1JfVkVSQk9TRQotIyBkZWZpbmUg
WVlFUlJPUl9WRVJCT1NFIDEKLSNlbHNlCi0jIGRlZmluZSBZWUVSUk9SX1ZFUkJPU0UgMAotI2Vu
ZGlmCi0KLQotLyogRGVidWcgdHJhY2VzLiAgKi8KLSNpZm5kZWYgWVlERUJVRwotIyBkZWZpbmUg
WVlERUJVRyAxCi0jZW5kaWYKLSNpZiBZWURFQlVHCi1leHRlcm4gaW50IHl5ZGVidWc7Ci0jZW5k
aWYKLQotLyogVG9rZW4gdHlwZS4gICovCi0jaWZuZGVmIFlZVE9LRU5UWVBFCi0jIGRlZmluZSBZ
WVRPS0VOVFlQRQotICBlbnVtIHl5dG9rZW50eXBlCi0gIHsKLSAgICBUX01BSU5NRU5VID0gMjU4
LAotICAgIFRfTUVOVSA9IDI1OSwKLSAgICBUX0VORE1FTlUgPSAyNjAsCi0gICAgVF9TT1VSQ0Ug
PSAyNjEsCi0gICAgVF9DSE9JQ0UgPSAyNjIsCi0gICAgVF9FTkRDSE9JQ0UgPSAyNjMsCi0gICAg
VF9DT01NRU5UID0gMjY0LAotICAgIFRfQ09ORklHID0gMjY1LAotICAgIFRfTUVOVUNPTkZJRyA9
IDI2NiwKLSAgICBUX0hFTFAgPSAyNjcsCi0gICAgVF9IRUxQVEVYVCA9IDI2OCwKLSAgICBUX0lG
ID0gMjY5LAotICAgIFRfRU5ESUYgPSAyNzAsCi0gICAgVF9ERVBFTkRTID0gMjcxLAotICAgIFRf
T1BUSU9OQUwgPSAyNzIsCi0gICAgVF9QUk9NUFQgPSAyNzMsCi0gICAgVF9UWVBFID0gMjc0LAot
ICAgIFRfREVGQVVMVCA9IDI3NSwKLSAgICBUX1NFTEVDVCA9IDI3NiwKLSAgICBUX0lNUExZID0g
Mjc3LAotICAgIFRfUkFOR0UgPSAyNzgsCi0gICAgVF9WSVNJQkxFID0gMjc5LAotICAgIFRfT1BU
SU9OID0gMjgwLAotICAgIFRfT04gPSAyODEsCi0gICAgVF9XT1JEID0gMjgyLAotICAgIFRfV09S
RF9RVU9URSA9IDI4MywKLSAgICBUX1VORVFVQUwgPSAyODQsCi0gICAgVF9MRVNTID0gMjg1LAot
ICAgIFRfTEVTU19FUVVBTCA9IDI4NiwKLSAgICBUX0dSRUFURVIgPSAyODcsCi0gICAgVF9HUkVB
VEVSX0VRVUFMID0gMjg4LAotICAgIFRfQ0xPU0VfUEFSRU4gPSAyODksCi0gICAgVF9PUEVOX1BB
UkVOID0gMjkwLAotICAgIFRfRU9MID0gMjkxLAotICAgIFRfVkFSSUFCTEUgPSAyOTIsCi0gICAg
VF9BU1NJR04gPSAyOTMsCi0gICAgVF9BU1NJR05fVkFMID0gMjk0LAotICAgIFRfT1IgPSAyOTUs
Ci0gICAgVF9BTkQgPSAyOTYsCi0gICAgVF9FUVVBTCA9IDI5NywKLSAgICBUX05PVCA9IDI5OAot
ICB9OwotI2VuZGlmCi0KLS8qIFZhbHVlIHR5cGUuICAqLwotI2lmICEgZGVmaW5lZCBZWVNUWVBF
ICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVECi0KLXVuaW9uIFlZU1RZUEUKLXsKLQot
Ci0JY2hhciAqc3RyaW5nOwotCXN0cnVjdCBmaWxlICpmaWxlOwotCXN0cnVjdCBzeW1ib2wgKnN5
bWJvbDsKLQlzdHJ1Y3QgZXhwciAqZXhwcjsKLQlzdHJ1Y3QgbWVudSAqbWVudTsKLQljb25zdCBz
dHJ1Y3Qga2NvbmZfaWQgKmlkOwotCWVudW0gdmFyaWFibGVfZmxhdm9yIGZsYXZvcjsKLQotCi19
OwotCi10eXBlZGVmIHVuaW9uIFlZU1RZUEUgWVlTVFlQRTsKLSMgZGVmaW5lIFlZU1RZUEVfSVNf
VFJJVklBTCAxCi0jIGRlZmluZSBZWVNUWVBFX0lTX0RFQ0xBUkVEIDEKLSNlbmRpZgotCi0KLWV4
dGVybiBZWVNUWVBFIHl5bHZhbDsKLQotaW50IHl5cGFyc2UgKHZvaWQpOwotCi0KLQotLyogQ29w
eSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLwotCi0KLS8qIEluY2x1
ZGUga2NvbmZfaWQuYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRva2VuIGNvbnN0YW50cy4gKi8K
LSNpbmNsdWRlICJrY29uZl9pZC5jIgotCi0KLQotI2lmZGVmIHNob3J0Ci0jIHVuZGVmIHNob3J0
Ci0jZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9VSU5UOAotdHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0
eXBlX3VpbnQ4OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7Ci0j
ZW5kaWYKLQotI2lmZGVmIFlZVFlQRV9JTlQ4Ci10eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9p
bnQ4OwotI2Vsc2UKLXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7Ci0jZW5kaWYKLQot
I2lmZGVmIFlZVFlQRV9VSU5UMTYKLXR5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2
OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7Ci0jZW5k
aWYKLQotI2lmZGVmIFlZVFlQRV9JTlQxNgotdHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2lu
dDE2OwotI2Vsc2UKLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKLSNlbmRpZgotCi0j
aWZuZGVmIFlZU0laRV9UCi0jIGlmZGVmIF9fU0laRV9UWVBFX18KLSMgIGRlZmluZSBZWVNJWkVf
VCBfX1NJWkVfVFlQRV9fCi0jIGVsaWYgZGVmaW5lZCBzaXplX3QKLSMgIGRlZmluZSBZWVNJWkVf
VCBzaXplX3QKLSMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QKLSMgIGluY2x1ZGUgPHN0ZGRlZi5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0jICBkZWZpbmUgWVlTSVpFX1Qg
c2l6ZV90Ci0jIGVsc2UKLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQKLSMgZW5kaWYK
LSNlbmRpZgotCi0jZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQotCi0jaWZu
ZGVmIFlZXwotIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKLSMgIGlm
IEVOQUJMRV9OTFMKLSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KLSMgICBkZWZpbmUgWVlfKE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1
bnRpbWUiLCBNc2dpZCkKLSMgIGVuZGlmCi0jIGVuZGlmCi0jIGlmbmRlZiBZWV8KLSMgIGRlZmlu
ZSBZWV8oTXNnaWQpIE1zZ2lkCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBZWV9BVFRSSUJV
VEUKLSMgaWYgKGRlZmluZWQgX19HTlVDX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICAgICYmICgyIDwgX19HTlVDX18gfHwgKF9fR05VQ19fID09
IDIgJiYgOTYgPD0gX19HTlVDX01JTk9SX18pKSkgIFwKLSAgICAgfHwgZGVmaW5lZCBfX1NVTlBS
T19DICYmIDB4NTExMCA8PSBfX1NVTlBST19DCi0jICBkZWZpbmUgWVlfQVRUUklCVVRFKFNwZWMp
IF9fYXR0cmlidXRlX18oU3BlYykKLSMgZWxzZQotIyAgZGVmaW5lIFlZX0FUVFJJQlVURShTcGVj
KSAvKiBlbXB0eSAqLwotIyBlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgWVlfQVRUUklCVVRFX1BV
UkUKLSMgZGVmaW5lIFlZX0FUVFJJQlVURV9QVVJFICAgWVlfQVRUUklCVVRFICgoX19wdXJlX18p
KQotI2VuZGlmCi0KLSNpZm5kZWYgWVlfQVRUUklCVVRFX1VOVVNFRAotIyBkZWZpbmUgWVlfQVRU
UklCVVRFX1VOVVNFRCBZWV9BVFRSSUJVVEUgKChfX3VudXNlZF9fKSkKLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQgX05vcmV0dXJuIFwKLSAgICAgJiYgKCFkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18g
fHwgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMikKLSMgaWYgZGVmaW5lZCBfTVNDX1ZFUiAmJiAx
MjAwIDw9IF9NU0NfVkVSCi0jICBkZWZpbmUgX05vcmV0dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJu
KQotIyBlbHNlCi0jICBkZWZpbmUgX05vcmV0dXJuIFlZX0FUVFJJQlVURSAoKF9fbm9yZXR1cm5f
XykpCi0jIGVuZGlmCi0jZW5kaWYKLQotLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5p
bmdzIGJ5ICJ1c2luZyIgRS4gICovCi0jaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dO
VUNfXwotIyBkZWZpbmUgWVlVU0UoRSkgKCh2b2lkKSAoRSkpCi0jZWxzZQotIyBkZWZpbmUgWVlV
U0UoRSkgLyogZW1wdHkgKi8KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcg
PD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXwotLyogU3VwcHJlc3MgYW4gaW5jb3Jy
ZWN0IGRpYWdub3N0aWMgYWJvdXQgeXlsdmFsIGJlaW5nIHVuaW5pdGlhbGl6ZWQuICAqLwotIyBk
ZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4gXAotICAgIF9QcmFnbWEg
KCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXAotICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBp
Z25vcmVkIFwiLVd1bmluaXRpYWxpemVkXCIiKVwKLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwiIikKLSMgZGVmaW5lIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcCi0gICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGlj
IHBvcCIpCi0jZWxzZQotIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgVmFsdWUKLSNl
bmRpZgotI2lmbmRlZiBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgotIyBkZWZp
bmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KLSMgZGVmaW5lIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAotI2VuZGlmCi0jaWZuZGVmIFlZX0lOSVRJQUxfVkFM
VUUKLSMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUpIC8qIE5vdGhpbmcuICovCi0jZW5k
aWYKLQotCi0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFCi0KLS8q
IFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBkZWZpbmUgdGhlIG5lY2Vzc2Fy
eSBzeW1ib2xzLiAgKi8KLQotIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0EKLSMgIGlmIFlZU1RB
Q0tfVVNFX0FMTE9DQQotIyAgIGlmZGVmIF9fR05VQ19fCi0jICAgIGRlZmluZSBZWVNUQUNLX0FM
TE9DIF9fYnVpbHRpbl9hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX19CVUlMVElOX1ZBX0FSR19J
TkNSCi0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQ
QUNFICovCi0jICAgZWxpZiBkZWZpbmVkIF9BSVgKLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Mg
X19hbGxvY2EKLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKLSMgICAgaW5jbHVkZSA8bWFsbG9j
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICAgZGVmaW5lIGFsbG9j
YSBfYWxsb2NhCi0jICAgZWxzZQotIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKLSMg
ICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTCi0jICAg
ICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwot
ICAgICAgLyogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdpdG5lc3MgZm9yIHN0ZGxpYi5oLiAgKi8K
LSMgICAgIGlmbmRlZiBFWElUX1NVQ0NFU1MKLSMgICAgICBkZWZpbmUgRVhJVF9TVUNDRVNTIDAK
LSMgICAgIGVuZGlmCi0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVuZGlmCi0jIGVuZGlmCi0K
LSMgaWZkZWYgWVlTVEFDS19BTExPQwotICAgLyogUGFjaWZ5IEdDQydzICdlbXB0eSBpZi1ib2R5
JyB3YXJuaW5nLiAgKi8KLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5
ICovOyB9IHdoaWxlICgwKQotIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQotICAgIC8q
IFRoZSBPUyBtaWdodCBndWFyYW50ZWUgb25seSBvbmUgZ3VhcmQgcGFnZSBhdCB0aGUgYm90dG9t
IG9mIHRoZSBzdGFjaywKLSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFz
IDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5Ci0gICAgICAgaW52b2tlIGFsbG9jYSAo
TikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcgotICAg
ICAgIHRvIGFsbG93IGZvciBhIGZldyBjb21waWxlci1hbGxvY2F0ZWQgdGVtcG9yYXJ5IHN0YWNr
IHNsb3RzLiAgKi8KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVh
c29uYWJsZSBjaXJjYSAyMDA2ICovCi0jICBlbmRpZgotIyBlbHNlCi0jICBkZWZpbmUgWVlTVEFD
S19BTExPQyBZWU1BTExPQwotIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUKLSMgIGlmbmRl
ZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVN
IFlZU0laRV9NQVhJTVVNCi0jICBlbmRpZgotIyAgaWYgKGRlZmluZWQgX19jcGx1c3BsdXMgJiYg
ISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyBcCi0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0Mg
fHwgZGVmaW5lZCBtYWxsb2MpIFwKLSAgICAgICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwg
ZGVmaW5lZCBmcmVlKSkpCi0jICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBV
U0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBpZm5kZWYgRVhJVF9TVUNDRVNTCi0jICAgIGRlZmluZSBF
WElUX1NVQ0NFU1MgMAotIyAgIGVuZGlmCi0jICBlbmRpZgotIyAgaWZuZGVmIFlZTUFMTE9DCi0j
ICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYwotIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBk
ZWZpbmVkIEVYSVRfU1VDQ0VTUwotdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdF
UyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmbmRlZiBZ
WUZSRUUKLSMgICBkZWZpbmUgWVlGUkVFIGZyZWUKLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAh
IGRlZmluZWQgRVhJVF9TVUNDRVNTCi12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KLSMgICBlbmRpZgotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRp
ZiAvKiAhIGRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UgKi8KLQotCi0jaWYg
KCEgZGVmaW5lZCB5eW92ZXJmbG93IFwKLSAgICAgJiYgKCEgZGVmaW5lZCBfX2NwbHVzcGx1cyBc
Ci0gICAgICAgICB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19U
UklWSUFMKSkpCi0KLS8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBz
dGFjayBtZW1iZXIuICAqLwotdW5pb24geXlhbGxvYwotewotICB5eXR5cGVfaW50MTYgeXlzc19h
bGxvYzsKLSAgWVlTVFlQRSB5eXZzX2FsbG9jOwotfTsKLQotLyogVGhlIHNpemUgb2YgdGhlIG1h
eGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KLSMg
ZGVmaW5lIFlZU1RBQ0tfR0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQot
Ci0vKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3Rh
Y2tzLCBlYWNoIHdpdGgKLSAgIE4gZWxlbWVudHMuICAqLwotIyBkZWZpbmUgWVlTVEFDS19CWVRF
UyhOKSBcCi0gICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNU
WVBFKSkgXAotICAgICAgKyBZWVNUQUNLX0dBUF9NQVhJTVVNKQotCi0jIGRlZmluZSBZWUNPUFlf
TkVFREVEIDEKLQotLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRo
ZSBuZXcgb25lLiAgVGhlCi0gICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0la
RSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YKLSAgIGVsZW1lbnRzIGluIHRoZSBzdGFj
aywgYW5kIFlZUFRSIGdpdmVzIHRoZSBuZXcgbG9jYXRpb24gb2YgdGhlCi0gICBzdGFjay4gIEFk
dmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAot
ICAgc3RhY2suICAqLwotIyBkZWZpbmUgWVlTVEFDS19SRUxPQ0FURShTdGFja19hbGxvYywgU3Rh
Y2spICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGRvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICBZWVNJWkVfVCB5eW5ld2J5dGVzOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBZWUNPUFkgKCZ5eXB0ci0+U3Rh
Y2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBT
dGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFj
aykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCi0gICAgICAgIHl5cHRyICs9IHl5bmV3Ynl0ZXMg
LyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCBZWUNPUFlfTkVF
REVEICYmIFlZQ09QWV9ORUVERUQKLS8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0byBE
U1QuICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbwotICAgbm90IG92ZXJsYXAuICAqLwot
IyBpZm5kZWYgWVlDT1BZCi0jICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwot
IyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSBcCi0gICAgICBfX2J1aWx0aW5fbWVt
Y3B5IChEc3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMpKSkKLSMgIGVsc2UKLSMgICBk
ZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgICAgICAgICAgICAgIFwKLSAgICAgIGRvICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBZWVNJWkVfVCB5eWk7
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8
IChDb3VudCk7IHl5aSsrKSAgIFwKLSAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWld
OyAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHdoaWxlICgwKQotIyAgZW5kaWYKLSMgZW5kaWYKLSNlbmRpZiAvKiAh
WVlDT1BZX05FRURFRCAqLwotCi0vKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVy
bWluYXRpb24gc3RhdGUuICAqLwotI2RlZmluZSBZWUZJTkFMICAxMQotLyogWVlMQVNUIC0tIExh
c3QgaW5kZXggaW4gWVlUQUJMRS4gICovCi0jZGVmaW5lIFlZTEFTVCAgIDMzMgotCi0vKiBZWU5U
T0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovCi0jZGVmaW5lIFlZTlRPS0VOUyAgNDQK
LS8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8KLSNkZWZpbmUgWVlOTlRT
ICA1MwotLyogWVlOUlVMRVMgLS0gTnVtYmVyIG9mIHJ1bGVzLiAgKi8KLSNkZWZpbmUgWVlOUlVM
RVMgIDEyOQotLyogWVlOU1RBVEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLwotI2RlZmluZSBZ
WU5TVEFURVMgIDIxMQotCi0vKiBZWVRSQU5TTEFURVtZWVhdIC0tIFN5bWJvbCBudW1iZXIgY29y
cmVzcG9uZGluZyB0byBZWVggYXMgcmV0dXJuZWQKLSAgIGJ5IHl5bGV4LCB3aXRoIG91dC1vZi1i
b3VuZHMgY2hlY2tpbmcuICAqLwotI2RlZmluZSBZWVVOREVGVE9LICAyCi0jZGVmaW5lIFlZTUFY
VVRPSyAgIDI5OAotCi0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICgodW5zaWduZWQgaW50KSAoWVlYKSA8
PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykKLQotLyogWVlUUkFO
U0xBVEVbVE9LRU4tTlVNXSAtLSBTeW1ib2wgbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gVE9LRU4t
TlVNCi0gICBhcyByZXR1cm5lZCBieSB5eWxleCwgd2l0aG91dCBvdXQtb2YtYm91bmRzIGNoZWNr
aW5nLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xhdGVbXSA9Ci17Ci0g
ICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsCi0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAotICAgICAgIDUsICAgICA2
LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQs
Ci0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwKLSAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAotICAgICAgMzUsICAgIDM2LCAgICAz
NywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MwotfTsKLQotI2lmIFlZ
REVCVUcKLSAgLyogWVlSTElORVtZWU5dIC0tIFNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVy
IFlZTiB3YXMgZGVmaW5lZC4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5l
W10gPQotewotICAgICAgIDAsICAgMTE0LCAgIDExNCwgICAxMTQsICAgMTE2LCAgIDExNiwgICAx
MjAsICAgMTI1LCAgIDEyNywgICAxMjgsCi0gICAgIDEyOSwgICAxMzAsICAgMTMxLCAgIDEzMiwg
ICAxMzYsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwKLSAgICAgMTQwLCAgIDE0
MCwgICAxNDAsICAgMTQwLCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0NywgICAxNDgsICAgMTQ5
LAotICAgICAxNTAsICAgMTU0LCAgIDE1NSwgICAxNjEsICAgMTY4LCAgIDE3MywgICAxODAsICAg
MTg5LCAgIDE5MSwgICAxOTIsCi0gICAgIDE5MywgICAxOTQsICAgMTk1LCAgIDE5NiwgICAxOTks
ICAgMjA3LCAgIDIxMywgICAyMjMsICAgMjI5LCAgIDIzNSwKLSAgICAgMjQxLCAgIDI0NCwgICAy
NDYsICAgMjU5LCAgIDI2MCwgICAyNjUsICAgMjc1LCAgIDI4MCwgICAyODgsICAgMjkxLAotICAg
ICAyOTMsICAgMjk0LCAgIDI5NSwgICAyOTYsICAgMjk3LCAgIDMwMCwgICAzMDYsICAgMzE3LCAg
IDMyMywgICAzMzMsCi0gICAgIDMzNSwgICAzNDAsICAgMzQ4LCAgIDM1NiwgICAzNTksICAgMzYx
LCAgIDM2MiwgICAzNjMsICAgMzY4LCAgIDM3NSwKLSAgICAgMzgwLCAgIDM4OCwgICAzOTEsICAg
MzkzLCAgIDM5NCwgICAzOTUsICAgMzk4LCAgIDQwNywgICA0MTQsICAgNDE5LAotICAgICA0MjUs
ICAgNDQzLCAgIDQ0NSwgICA0NDYsICAgNDQ3LCAgIDQ1MCwgICA0NTgsICAgNDYwLCAgIDQ2MSwg
ICA0NjQsCi0gICAgIDQ3MSwgICA0NzMsICAgNDc4LCAgIDQ3OSwgICA0ODIsICAgNDgzLCAgIDQ4
NCwgICA0ODgsICAgNDg5LCAgIDQ5MiwKLSAgICAgNDkzLCAgIDQ5NiwgICA0OTcsICAgNDk4LCAg
IDQ5OSwgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsICAgNTA0LAotICAgICA1MDUsICAgNTA2
LCAgIDUxMCwgICA1MTIsICAgNTEzLCAgIDUxNiwgICA1MTcsICAgNTIxLCAgIDUyNCwgICA1MjUK
LX07Ci0jZW5kaWYKLQotI2lmIFlZREVCVUcgfHwgWVlFUlJPUl9WRVJCT1NFIHx8IDAKLS8qIFlZ
VE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVN
LgotICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywg
bm9udGVybWluYWxzLiAgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQot
ewotICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIlRfTUFJTk1FTlUiLCAiVF9NRU5V
IiwgIlRfRU5ETUVOVSIsCi0gICJUX1NPVVJDRSIsICJUX0NIT0lDRSIsICJUX0VORENIT0lDRSIs
ICJUX0NPTU1FTlQiLCAiVF9DT05GSUciLAotICAiVF9NRU5VQ09ORklHIiwgIlRfSEVMUCIsICJU
X0hFTFBURVhUIiwgIlRfSUYiLCAiVF9FTkRJRiIsICJUX0RFUEVORFMiLAotICAiVF9PUFRJT05B
TCIsICJUX1BST01QVCIsICJUX1RZUEUiLCAiVF9ERUZBVUxUIiwgIlRfU0VMRUNUIiwgIlRfSU1Q
TFkiLAotICAiVF9SQU5HRSIsICJUX1ZJU0lCTEUiLCAiVF9PUFRJT04iLCAiVF9PTiIsICJUX1dP
UkQiLCAiVF9XT1JEX1FVT1RFIiwKLSAgIlRfVU5FUVVBTCIsICJUX0xFU1MiLCAiVF9MRVNTX0VR
VUFMIiwgIlRfR1JFQVRFUiIsICJUX0dSRUFURVJfRVFVQUwiLAotICAiVF9DTE9TRV9QQVJFTiIs
ICJUX09QRU5fUEFSRU4iLCAiVF9FT0wiLCAiVF9WQVJJQUJMRSIsICJUX0FTU0lHTiIsCi0gICJU
X0FTU0lHTl9WQUwiLCAiVF9PUiIsICJUX0FORCIsICJUX0VRVUFMIiwgIlRfTk9UIiwgIiRhY2Nl
cHQiLCAiaW5wdXQiLAotICAic3RhcnQiLCAibWFpbm1lbnVfc3RtdCIsICJzdG10X2xpc3QiLCAi
b3B0aW9uX25hbWUiLCAiY29tbW9uX3N0bXQiLAotICAib3B0aW9uX2Vycm9yIiwgImNvbmZpZ19l
bnRyeV9zdGFydCIsICJjb25maWdfc3RtdCIsCi0gICJtZW51Y29uZmlnX2VudHJ5X3N0YXJ0Iiwg
Im1lbnVjb25maWdfc3RtdCIsICJjb25maWdfb3B0aW9uX2xpc3QiLAotICAiY29uZmlnX29wdGlv
biIsICJzeW1ib2xfb3B0aW9uIiwgInN5bWJvbF9vcHRpb25fbGlzdCIsCi0gICJzeW1ib2xfb3B0
aW9uX2FyZyIsICJjaG9pY2UiLCAiY2hvaWNlX2VudHJ5IiwgImNob2ljZV9lbmQiLAotICAiY2hv
aWNlX3N0bXQiLCAiY2hvaWNlX29wdGlvbl9saXN0IiwgImNob2ljZV9vcHRpb24iLCAiY2hvaWNl
X2Jsb2NrIiwKLSAgImlmX2VudHJ5IiwgImlmX2VuZCIsICJpZl9zdG10IiwgImlmX2Jsb2NrIiwg
Im1lbnUiLCAibWVudV9lbnRyeSIsCi0gICJtZW51X2VuZCIsICJtZW51X3N0bXQiLCAibWVudV9i
bG9jayIsICJzb3VyY2Vfc3RtdCIsICJjb21tZW50IiwKLSAgImNvbW1lbnRfc3RtdCIsICJoZWxw
X3N0YXJ0IiwgImhlbHAiLCAiZGVwZW5kc19saXN0IiwgImRlcGVuZHMiLAotICAidmlzaWJpbGl0
eV9saXN0IiwgInZpc2libGUiLCAicHJvbXB0X3N0bXRfb3B0IiwgInByb21wdCIsICJlbmQiLCAi
bmwiLAotICAiaWZfZXhwciIsICJleHByIiwgIm5vbmNvbnN0X3N5bWJvbCIsICJzeW1ib2wiLCAi
d29yZF9vcHQiLAotICAiYXNzaWdubWVudF9zdG10IiwgImFzc2lnbl92YWwiLCBZWV9OVUxMUFRS
Ci19OwotI2VuZGlmCi0KLSMgaWZkZWYgWVlQUklOVAotLyogWVlUT0tOVU1bTlVNXSAtLSAoRXh0
ZXJuYWwpIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZQotICAgKGludGVybmFsKSBz
eW1ib2wgbnVtYmVyIE5VTSAod2hpY2ggbXVzdCBiZSB0aGF0IG9mIGEgdG9rZW4pLiAgKi8KLXN0
YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQotewotICAgICAgIDAsICAgMjU2
LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQs
Ci0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAy
NzIsICAgMjczLCAgIDI3NCwKLSAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwg
ICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAotICAgICAyODUsICAgMjg2LCAgIDI4
NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAyOTQsCi0gICAg
IDI5NSwgICAyOTYsICAgMjk3LCAgIDI5OAotfTsKLSMgZW5kaWYKLQotI2RlZmluZSBZWVBBQ1Rf
TklORiAtOTIKLQotI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0YXRlKSBcCi0g
ICghISgoWXlzdGF0ZSkgPT0gKC05MikpKQotCi0jZGVmaW5lIFlZVEFCTEVfTklORiAtODkKLQot
I2RlZmluZSB5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yKFl5dGFibGVfdmFsdWUpIFwKLSAgMAotCi0g
IC8qIFlZUEFDVFtTVEFURS1OVU1dIC0tIEluZGV4IGluIFlZVEFCTEUgb2YgdGhlIHBvcnRpb24g
ZGVzY3JpYmluZwotICAgICBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQx
NiB5eXBhY3RbXSA9Ci17Ci0gICAgICAyMSwgICAgMzgsICAgLTkyLCAgICAgNCwgICAtOTIsICAg
LTkyLCAgIDE1NywgICAgMjMsICAgLTkyLCAgIC05MiwKLSAgICAgLTE5LCAgIC05MiwgICAxOTEs
ICAgLTE2LCAgICAzOCwgICAtMTMsICAgIDM4LCAgICAgNiwgICAgMjQsICAgIDM4LAotICAgICAg
NDgsICAgIDQ4LCAgICAzNCwgICAgNDMsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05
MiwgICAtOTIsCi0gICAgIC05MiwgICAtOTIsICAgLTkyLCAgICA5NiwgICAtOTIsICAgIDQ0LCAg
IDExMSwgICAtOTIsICAgLTkyLCAgIC05MiwKLSAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTky
LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLAotICAgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAg
ODMsCi0gICAgIC05MiwgICAgODksICAgLTkyLCAgIDExNiwgICAtOTIsICAgMTMzLCAgIC05Miwg
ICAxMzQsICAgMTQ2LCAgIC05MiwKLSAgICAgIDM0LCAgICAzNCwgICAxMTMsICAgLTkyLCAgICA3
MywgICAtOTIsICAgMTUwLCAgICA2MiwgICAxNTEsICAgIDMxLAotICAgICAxMjMsICAgMjU4LCAg
IDI5MywgICAyODIsICAgIC0yLCAgIDI4MiwgICAyMjUsICAgLTkyLCAgIC05MiwgICAtOTIsCi0g
ICAgIC05MiwgICAtOTIsICAgLTkyLCAgICAzMCwgICAtOTIsICAgLTkyLCAgICAzNCwgICAgMzQs
ICAgIDY1LCAgICA2NSwKLSAgICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LCAgIC05MiwgICAt
OTIsICAgMTUyLCAgIC05MiwgICAxNTMsICAgMTU0LAotICAgICAxMTAsICAgIDM4LCAgICAzOCwg
ICAgMzQsICAgIDQ4LCAgICA0OCwgICAgNjUsICAgLTkyLCAgIDIwMiwgICAtOTIsCi0gICAgIC05
MiwgICAtOTIsICAgLTkyLCAgIDIwMywgICAtOTIsICAgLTkyLCAgIDE4MSwgICAgMzgsICAgIDM4
LCAgICA0OCwKLSAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsICAgLTkyLAotICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAyMDUs
ICAgLTkyLCAgICA4MCwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCi0gICAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDE3OSwgICAtOTIsICAgLTkyLCAgIC05
MiwKLSAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
ICAzNCwgICAyMDUsICAgMTg1LAotICAgICAyMDUsICAgLTExLCAgIDIwNSwgICAyMDUsICAgIDY1
LCAgICAzNiwgICAxODYsICAgLTkyLCAgIC05MiwgICAyMDUsCi0gICAgIDE4NywgICAyMDUsICAg
IDM0LCAgIC05MiwgICAxMTUsICAgMTg4LCAgIC05MiwgICAtOTIsICAgMjAxLCAgIDIxNCwKLSAg
ICAgMjE1LCAgIDIwNSwgICAxOTYsICAgLTkyLCAgIC05MiwgICAyMTcsICAgLTkyLCAgIDIxOCwg
ICAgODEsICAgLTkyLAotICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgMjE5LCAgICAz
OCwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCi0gICAgIC05MgotfTsKLQotICAvKiBZWURF
RkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFU
RS1OVU0uCi0gICAgIFBlcmZvcm1lZCB3aGVuIFlZVEFCTEUgZG9lcyBub3Qgc3BlY2lmeSBzb21l
dGhpbmcgZWxzZSB0byBkby4gIFplcm8KLSAgICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJy
b3IuICAqLwotc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KLXsKLSAgICAg
ICA3LCAgICAgMCwgICAxMDcsICAgICAwLCAgICAgMywgICAgIDcsICAgICAwLCAgICAgNywgICAx
MDIsICAgMTAzLAotICAgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTI1LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMTUsICAgIDIwLCAgICAxNiwgICAgMTcsICAgIDIyLCAgICAxOCwKLSAgICAgIDE5LCAg
ICAyMSwgICAgMjMsICAgICAwLCAgICAyNCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgMzcsICAg
IDI3LAotICAgICAgMzcsICAgIDI4LCAgICA1OSwgICAgNjksICAgICA5LCAgICA3NCwgICAgMjUs
ICAgIDk2LCAgICA4MiwgICAgMTAsCi0gICAgICAyOSwgICAgOTEsICAgIDI2LCAgICAxMSwgICAg
MzAsICAgMTA4LCAgICAgMiwgICAgIDYsICAgIDE0LCAgICAgMCwKLSAgICAgMTA0LCAgICAgMCwg
ICAxMjYsICAgICAwLCAgIDEwNSwgICAgIDAsICAgMTIyLCAgICAgMCwgICAgIDAsICAgMTI0LAot
ICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjMsICAgMTExLCAgIDEwNiwgICAgIDAsICAgMTI4
LCAgICAgMCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTEsICAg
ICAwLCAgICAgMCwgICAgNzgsICAgIDg2LCAgICA1NSwKLSAgICAgIDg3LCAgICAzMywgICAgMzUs
ICAgICAwLCAgIDExOSwgICAgNzEsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAotICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDEyLCAgIDEyOSwgICAgIDAsICAgIDEzLCAgICAg
MCwgICAgIDAsCi0gICAgICAgMCwgICAgIDAsICAgMTAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgNTEsICAgICAwLCAgICA0MywKLSAgICAgIDQyLCAgICAzOCwgICAgMzksICAgICAw
LCAgICA0MSwgICAgNDAsICAgICAwLCAgICAgMCwgICAxMDAsICAgICAwLAotICAgICAgNjMsICAg
IDY0LCAgICA2MCwgICAgNjIsICAgIDYxLCAgICA3MCwgICAgNTgsICAgIDU3LCAgICA3NSwgICAg
NzcsCi0gICAgICA3MywgICAgNzYsICAgIDcyLCAgIDEwOSwgICAgOTgsICAgICAwLCAgICA5Nywg
ICAgODMsICAgIDg1LCAgICA4MSwKLSAgICAgIDg0LCAgICA4MCwgICAgOTMsICAgIDk0LCAgICA5
MiwgICAxMTgsICAgMTIwLCAgIDEyMSwgICAxMTcsICAgMTEyLAotICAgICAxMTMsICAgMTE0LCAg
IDExNSwgICAxMTYsICAgMTI3LCAgICAzMiwgICAgODksICAgICAwLCAgIDEwOSwgICAgIDAsCi0g
ICAgIDEwOSwgICAxMDksICAgMTA5LCAgIDEwOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTAs
ICAgIDY3LCAgIDEwOSwKLSAgICAgICAwLCAgIDEwOSwgICAgIDAsICAgIDk5LCAgICAgMCwgICAg
IDAsICAgIDQ0LCAgIDEwMSwgICAgIDAsICAgICAwLAotICAgICAgIDAsICAgMTA5LCAgICA1Mywg
ICAgNTAsICAgIDMxLCAgICAgMCwgICAgNjYsICAgICAwLCAgIDExMCwgICAgOTUsCi0gICAgICA0
NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgIDAsICAgICAwLCAgICA1MiwgICAgNjUsICAgIDY4
LCAgICA0OSwKLSAgICAgIDU0Ci19OwotCi0gIC8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCi1z
dGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9Ci17Ci0gICAgIC05MiwgICAtOTIs
ICAgMjQ5LCAgIC05MiwgICAyNTIsICAgLTkyLCAgICAtOSwgICAtNjcsICAgLTkyLCAgIC05MiwK
LSAgICAgLTkyLCAgIC05MiwgICAyMjAsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05
MiwgICAtOTIsICAgLTkyLAotICAgICAgMzUsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsCi0gICAgIC05MiwgICAxMDAsICAgLTky
LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAxNzcsICAgMTk1LCAgIC02NSwKLSAgICAg
LTkyLCAgIC05MiwgICAxMzcsICAgIC0xLCAgICAyNiwgICAtOTIsICAgMTQxLCAgIC02OSwgICAt
MTUsICAgLTkxLAotICAgICAtOTIsICAgLTkyLCAgIC05MgotfTsKLQotICAvKiBZWURFRkdPVE9b
TlRFUk0tTlVNXS4gICovCi1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0K
LXsKLSAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMzYsICAgIDM3LCAg
IDEyMCwgICAgMzgsICAgIDM5LAotICAgICAgNDAsICAgIDQxLCAgICA3OSwgICAxMjEsICAgMTIy
LCAgIDE3NSwgICAyMDYsICAgIDQyLCAgICA0MywgICAxMzYsCi0gICAgICA0NCwgICAgODEsICAg
MTMyLCAgICA4MiwgICAgNDUsICAgMTQwLCAgICA0NiwgICAgODMsICAgIDQ3LCAgICA0OCwKLSAg
ICAgMTQ5LCAgICA0OSwgICAgODUsICAgIDUwLCAgICA1MSwgICAgNTIsICAgMTIzLCAgIDEyNCwg
ICAgODYsICAgMTI1LAotICAgICAgODQsICAgMTQ2LCAgIDE2OSwgICAxNzAsICAgIDUzLCAgICAg
NywgICAxODMsICAgIDcyLCAgICA3MywgICAgNzQsCi0gICAgICA2MywgICAgNTQsICAgMTA2Ci19
OwotCi0gIC8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dIC0tIFdoYXQgdG8gZG8gaW4gc3Rh
dGUgU1RBVEUtTlVNLiAgSWYKLSAgICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBu
ZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdob3NlCi0gICAgIG51bWJlciBpcyB0aGUgb3Bwb3Np
dGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCi1zdGF0aWMgY29uc3QgeXl0
eXBlX2ludDE2IHl5dGFibGVbXSA9Ci17Ci0gICAgICAxMCwgICAgOTMsICAgIDk0LCAgIDE4Miwg
ICAgMTEsICAgIDY3LCAgICA2OCwgICAxNTgsICAgMTU5LCAgIDE2MCwKLSAgICAgMTYxLCAgIDE2
MiwgICAxNjMsICAgIDU5LCAgIDEzMSwgICAgNjEsICAgMTM0LCAgICA1NywgICAgNjUsICAgMTUz
LAotICAgICAgNTgsICAgMTU0LCAgIDE0MywgICAgNjAsICAgICAxLCAgIDE3NCwgICAgIDEsICAg
MTU2LCAgIDE1NywgICAgOTYsCi0gICAgICA5NywgICAtMzQsICAgMTA4LCAgICA2MiwgICAxNDQs
ICAgLTM0LCAgIC0zNCwgICAtMzQsICAgLTM0LCAgIC0zNCwKLSAgICAgLTM0LCAgIC0zNCwgICAt
MzQsICAgMTA5LCAgIDE3MSwgICAtMzQsICAgLTM0LCAgIDExMCwgICAtMzQsICAgMTExLAotICAg
ICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIC0zNCwgICAxMTcsICAgICAyLCAg
IDExOCwgICAgNTUsCi0gICAgICA2NCwgICAgNjYsICAgIDY5LCAgIDE5MiwgICAxNTUsICAgICA4
LCAgICAgOSwgICAxMTksICAgLTM0LCAgICA3MCwKLSAgICAgIDk2LCAgICA5NywgICAxOTMsICAg
MTM1LCAgIDEzOCwgICAgNjYsICAgMTQ3LCAgICA3MSwgICAxNTMsICAgIDc1LAotICAgICAxNTQs
ICAgMTA4LCAgICA3NywgICAxOTEsICAgLTc5LCAgIC03OSwgICAtNzksICAgLTc5LCAgIC03OSwg
ICAtNzksCi0gICAgIC03OSwgICAtNzksICAgIDY2LCAgICA2OSwgICAtNzksICAgLTc5LCAgIDEx
MCwgICAgNzYsICAgMTg0LCAgIDE3MiwKLSAgICAgMTczLCAgIDEwNSwgICAgOTgsICAgIDk5LCAg
IDEwMCwgICAxMDEsICAgMTAyLCAgIDExOCwgICAxMzcsICAgMTQyLAotICAgICAxNjgsICAgMTUx
LCAgICA3OCwgICAxOTgsICAgMTgxLCAgIDEwMywgICAxNTIsICAgLTc5LCAgIDEzOSwgICAgODcs
Ci0gICAgIDE0OCwgICAgOTYsICAgIDk3LCAgIC0zNiwgICAxMDgsICAgIDg4LCAgIDE3OSwgICAt
MzYsICAgLTM2LCAgIC0zNiwKLSAgICAgLTM2LCAgIC0zNiwgICAtMzYsICAgLTM2LCAgIC0zNiwg
ICAxMDksICAgMTY3LCAgIC0zNiwgICAtMzYsICAgMTEwLAotICAgICAtMzYsICAgMTExLCAgIDEx
MiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgLTM2LCAgIDExNywgICAgOTUsCi0gICAg
IDExOCwgICAxOTksICAgIDg5LCAgICA5NiwgICAgOTcsICAgIDk2LCAgICA5NywgICAgLTUsICAg
IDEzLCAgIDExOSwKLSAgICAgLTM2LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDkwLAotICAgICAgOTEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCi0gICAgICAzMSwg
ICAgMzIsICAgIDkyLCAgIDE0MSwgICAgMzMsICAgMTUwLCAgIDEwNCwgICAxMDcsICAgMTY0LCAg
IDE2NSwKLSAgICAgMTY2LCAgICAtNCwgICAgMTMsICAgIDM0LCAgICAzNSwgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAxNzYsICAg
MjEwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCi0gICAgICAyNywgICAgMjgs
ICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgIDE3NywgICAxNzgsICAgIDMzLCAgIDE4MiwK
LSAgICAgIDk3LCAgIDE4NiwgICAxOTQsICAgMTk2LCAgIDIwMCwgICAtODgsICAgMTA4LCAgICAz
NCwgICAgMzUsICAgLTg4LAotICAgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAg
IC04OCwgICAtODgsICAgMjAxLCAgIDIwNSwgICAtODgsCi0gICAgIC04OCwgICAxMTAsICAgLTg4
LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwKLSAgICAg
MjAyLCAgIDIwMywgICAxMTgsICAgMjA3LCAgIDIwOCwgICAyMDksICAgIDU2LCAgICAxMiwgICAx
MzMsICAgMTA4LAotICAgICAgODAsICAgMTUyLCAgIC04OCwgICAtNTYsICAgLTU2LCAgIDE4MCwg
ICAtNTYsICAgLTU2LCAgIC01NiwgICAtNTYsCi0gICAgIDEwOSwgICAgIDAsICAgLTU2LCAgIC01
NiwgICAxMTAsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTI5LCAgIDE0NSwKLSAgICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxMTgsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LAotICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgMTMwLCAgIC01NiwgICAgMjIs
ICAgIDIzLCAgICAxNSwgICAgMTYsCi0gICAgICAgMCwgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgICAwLCAgICAgMCwgICAgMjIsICAgIDIzLCAgIDE4NSwKLSAgICAgICAwLCAgIDE4Nywg
ICAxODgsICAgMTg5LCAgIDE5MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzQsICAgIDM1LAot
ICAgICAxOTUsICAgICAwLCAgIDE5NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMzQsCi0gICAgICAzNSwgICAgIDAsICAgMjA0Ci19OwotCi1zdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tbXSA9Ci17Ci0gICAgICAgMSwgICAgNzAsICAgIDcxLCAg
ICAxNCwgICAgIDAsICAgIDIwLCAgICAyMSwgICAgOTgsICAgIDk5LCAgIDEwMCwKLSAgICAgMTAx
LCAgIDEwMiwgICAxMDMsICAgIDE0LCAgICA4MSwgICAgMTYsICAgIDgxLCAgICAzNiwgICAgMTks
ICAgIDg2LAotICAgICAgMzYsICAgIDg2LCAgICAyNCwgICAgMzYsICAgICAzLCAgIDExNiwgICAg
IDMsICAgIDk2LCAgICA5NywgICAgNDAsCi0gICAgICA0MSwgICAgIDAsICAgICAxLCAgICAyNywg
ICAgMzYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKLSAgICAgICA5LCAgICAx
MCwgICAgMTEsICAgIDEyLCAgIDExMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LAotICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDM2LCAgICAyNywgICAgMzYsCi0gICAgICAzNiwgICAgMjcsICAgIDI4LCAgICAyNywgICAgMzQs
ICAgIDI3LCAgICAyOCwgICAgMzYsICAgIDM3LCAgICAzNSwKLSAgICAgIDQwLCAgICA0MSwgICAg
MzYsICAgIDgyLCAgICA4MywgICAgMjcsICAgIDg1LCAgICA0MywgICAxNDUsICAgIDM2LAotICAg
ICAxNDUsICAgICAxLCAgICAzOCwgICAxNzQsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksCi0gICAgICAxMCwgICAgMTEsICAgIDI3LCAgICAyOCwgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgIDEsICAgMTY3LCAgIDExNCwKLSAgICAgMTE1LCAgICAzOSwgICAgMjksICAg
IDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAyNywgICAgODIsICAgIDgzLAotICAgICAxMTEs
ICAgIDg1LCAgICAgMSwgICAxODIsICAgMTI5LCAgICA0MiwgICAgMzYsICAgIDM3LCAgICA4Mywg
ICAgMzYsCi0gICAgICA4NSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgIDEsICAgIDM2LCAgIDEy
NywgICAgIDQsICAgICA1LCAgICAgNiwKLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDI2LCAgICAxNCwgICAgMTUsICAgIDE2LAotICAgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMzYs
Ci0gICAgICAyNywgICAgMzYsICAgIDM2LCAgICA0MCwgICAgNDEsICAgIDQwLCAgICA0MSwgICAg
IDAsICAgICAxLCAgICAzNiwKLSAgICAgIDM3LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDM2LAotICAgICAgMzYsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCi0gICAg
ICAyMywgICAgMjQsICAgIDM2LCAgICA4MywgICAgMjcsICAgIDg1LCAgICAzNiwgICAgMzYsICAg
IDM2LCAgICAzNiwKLSAgICAgIDM2LCAgICAgMCwgICAgIDEsICAgIDM2LCAgICAzNywgICAgIDQs
ICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAotICAgICAgIDksICAgIDEwLCAgICAxMSwgICAg
IDEsICAgMjA1LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsCi0gICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAxMywgICAgMzYsICAgIDI3LCAg
ICAxNCwKLSAgICAgIDQxLCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgIDAsICAgICAx
LCAgICAzNiwgICAgMzcsICAgICA0LAotICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LCAgICAxMCwgICAgMTEsICAgIDM2LCAgICA0MiwgICAgMTQsCi0gICAgICAxNSwgICAgMTYs
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwK
LSAgICAgIDM2LCAgICAzNiwgICAgMjcsICAgIDM2LCAgICAzNiwgICAgMzYsICAgICA3LCAgICAg
NSwgICAgODEsICAgICAxLAotICAgICAgNDAsICAgIDM2LCAgICAzNywgICAgIDUsICAgICA2LCAg
IDEyOCwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsCi0gICAgICAxMiwgICAgLTEsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA4NCwKLSAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjcsICAgICA0LCAgICAgNSwgICAg
IDYsICAgICA3LAotICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDM2LCAgICAzNywg
ICAgMTQsICAgIDE1LCAgICAgNSwgICAgIDYsCi0gICAgICAtMSwgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgMTQsICAgIDE1LCAgIDE2OCwKLSAgICAgIC0xLCAg
IDE3MCwgICAxNzEsICAgMTcyLCAgIDE3MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAg
IDM3LAotICAgICAxNzksICAgIC0xLCAgIDE4MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzYsCi0gICAgICAzNywgICAgLTEsICAgMTkxCi19OwotCi0gIC8q
IFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNz
aW5nCi0gICAgIHN5bWJvbCBvZiBzdGF0ZSBTVEFURS1OVU0uICAqLwotc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXN0b3NbXSA9Ci17Ci0gICAgICAgMCwgICAgIDMsICAgIDM2LCAgICA0NSwg
ICAgNDYsICAgIDQ3LCAgICA0OCwgICAgODksICAgIDI3LCAgICAyOCwKLSAgICAgIDg3LCAgICAg
MCwgICAgNDgsICAgICAxLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LAotICAgICAgMTAsICAgIDExLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAg
IDE5LCAgICAyMCwgICAgMjEsCi0gICAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNywgICAgMzYs
ICAgIDM3LCAgICA0OSwgICAgNTAsICAgIDUyLCAgICA1MywKLSAgICAgIDU0LCAgICA1NSwgICAg
NjEsICAgIDYyLCAgICA2NCwgICAgNjgsICAgIDcwLCAgICA3MiwgICAgNzMsICAgIDc1LAotICAg
ICAgNzcsICAgIDc4LCAgICA3OSwgICAgODgsICAgIDk1LCAgICAzNiwgICAgNDYsICAgIDM2LCAg
ICAzNiwgICAgODcsCi0gICAgICAzNiwgICAgODcsICAgIDI3LCAgICA5NCwgICAgMzYsICAgIDg3
LCAgICAyNywgICAgOTIsICAgIDkyLCAgICAyOCwKLSAgICAgIDM1LCAgICA0MywgICAgOTEsICAg
IDkyLCAgICA5MywgICAgMzYsICAgICAxLCAgICAzOCwgICAgIDEsICAgIDU2LAotICAgICAgNTYs
ICAgIDY1LCAgICA2NywgICAgNzEsICAgIDg0LCAgICA3NiwgICAgODIsICAgIDM2LCAgICAzNiwg
ICAgMzYsCi0gICAgICAzNiwgICAgMzYsICAgIDM2LCAgICA5MSwgICAgOTEsICAgIDM2LCAgICA0
MCwgICAgNDEsICAgIDI5LCAgICAzMCwKLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDQyLCAg
ICAzNiwgICAgMzksICAgIDk2LCAgICAzNiwgICAgIDEsICAgIDEyLAotICAgICAgMTYsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI1LCAgICAyNywgICAgMzYs
Ci0gICAgICA1MSwgICAgNTcsICAgIDU4LCAgICA4MCwgICAgODEsICAgIDgzLCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwKLSAgICAgIDM2LCAgICA1MSwgICAgNjYsICAgIDgxLCAgICA4Mywg
ICAgNTAsICAgIDYzLCAgICA4OCwgICAgNTAsICAgIDY0LAotICAgICAgNjksICAgIDc1LCAgICA4
OCwgICAgMjQsICAgIDM2LCAgICA4MiwgICAgODUsICAgIDUwLCAgICA2NCwgICAgNzQsCi0gICAg
ICA3NSwgICAgODgsICAgIDM2LCAgICA1MSwgICAgODMsICAgIDM0LCAgICA5MSwgICAgOTEsICAg
IDkzLCAgICA5MywKLSAgICAgIDkzLCAgICA5MywgICAgOTMsICAgIDkzLCAgICAzNiwgICAgMzYs
ICAgIDM2LCAgICAyNiwgICAgODcsICAgIDg2LAotICAgICAgODcsICAgIDkxLCAgICA5MiwgICAg
OTIsICAgIDkzLCAgICA1OSwgICAgIDEsICAgIDEzLCAgICAzNiwgICAgODcsCi0gICAgICA4Niwg
ICAgOTIsICAgIDE0LCAgICA5MCwgICAgOTEsICAgIDkwLCAgICAzNiwgICAgOTAsICAgIDkwLCAg
ICA5MCwKLSAgICAgIDkwLCAgICA5MywgICAgMjcsICAgIDM2LCAgICAzNiwgICAgOTAsICAgIDM2
LCAgICA5MCwgICAgOTEsICAgIDM2LAotICAgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzYsICAg
IDkwLCAgICA0MiwgICAgNjAsICAgIDM2LCAgICAzNiwgICAgMzYsCi0gICAgICA4NwotfTsKLQot
ICAvKiBZWVIxW1lZTl0gLS0gU3ltYm9sIG51bWJlciBvZiBzeW1ib2wgdGhhdCBydWxlIFlZTiBk
ZXJpdmVzLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0KLXsKLSAgICAg
ICAwLCAgICA0NCwgICAgNDUsICAgIDQ1LCAgICA0NiwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
NDgsICAgIDQ4LAotICAgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OSwg
ICAgNDksICAgIDQ5LCAgICA0OSwgICAgNDksCi0gICAgICA0OSwgICAgNDksICAgIDQ5LCAgICA0
OSwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA1MCwKLSAgICAgIDUwLCAg
ICA1MSwgICAgNTEsICAgIDUyLCAgICA1MywgICAgNTQsICAgIDU1LCAgICA1NiwgICAgNTYsICAg
IDU2LAotICAgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcs
ICAgIDU3LCAgICA1NywgICAgNTcsCi0gICAgICA1OCwgICAgNTksICAgIDU5LCAgICA2MCwgICAg
NjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwKLSAgICAgIDY1LCAgICA2NSwg
ICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjYsICAgIDY3LAot
ICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MSwgICAgNzEsICAgIDcx
LCAgICA3MiwgICAgNzMsCi0gICAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NiwgICAgNzYsICAg
IDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwKLSAgICAgIDgxLCAgICA4MiwgICAgODIs
ICAgIDgyLCAgICA4MiwgICAgODMsICAgIDg0LCAgICA4NCwgICAgODQsICAgIDg1LAotICAgICAg
ODYsICAgIDg2LCAgICA4NywgICAgODcsICAgIDg4LCAgICA4OCwgICAgODgsICAgIDg5LCAgICA4
OSwgICAgOTAsCi0gICAgICA5MCwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLCAg
ICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwKLSAgICAgIDkxLCAgICA5MSwgICAgOTIsICAgIDkz
LCAgICA5MywgICAgOTQsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDk2Ci19OwotCi0gIC8qIFlZ
UjJbWVlOXSAtLSBOdW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1
bGUgWVlOLiAgKi8KLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0KLXsKLSAgICAg
ICAwLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMCwgICAg
IDIsICAgICAyLAotICAgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDQsICAgICAzLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCi0gICAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKLSAgICAgICAxLCAg
ICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDIsICAg
ICAyLAotICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDQs
ICAgICA0LCAgICAgNCwgICAgIDUsCi0gICAgICAgMywgICAgIDAsICAgICAzLCAgICAgMCwgICAg
IDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMCwKLSAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDQsICAgICAzLCAgICAgMiwgICAgIDQsICAgICAwLAot
ICAgICAgIDIsICAgICAzLCAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMywgICAgIDMsCi0gICAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwKLSAgICAgICAyLCAgICAgMCwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDQsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLAotICAgICAg
IDAsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAg
MiwgICAgIDAsCi0gICAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMiwKLSAgICAgICAzLCAgICAgMywgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDAsICAgICAxLCAgICAgNCwgICAgIDAsICAgICAxCi19OwotCi0KLSNkZWZp
bmUgeXllcnJvayAgICAgICAgICh5eWVycnN0YXR1cyA9IDApCi0jZGVmaW5lIHl5Y2xlYXJpbiAg
ICAgICAoeXljaGFyID0gWVlFTVBUWSkKLSNkZWZpbmUgWVlFTVBUWSAgICAgICAgICgtMikKLSNk
ZWZpbmUgWVlFT0YgICAgICAgICAgIDAKLQotI2RlZmluZSBZWUFDQ0VQVCAgICAgICAgZ290byB5
eWFjY2VwdGxhYgotI2RlZmluZSBZWUFCT1JUICAgICAgICAgZ290byB5eWFib3J0bGFiCi0jZGVm
aW5lIFlZRVJST1IgICAgICAgICBnb3RvIHl5ZXJyb3JsYWIKLQotCi0jZGVmaW5lIFlZUkVDT1ZF
UklORygpICAoISF5eWVycnN0YXR1cykKLQotI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5eWNo
YXIgPT0gWVlFTVBUWSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICB5eWx2YWwgPSAoVmFsdWUpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgWVlQT1BTVEFDSyAoeXlsZW4pOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5c3RhdGUgPSAq
eXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBn
b3RvIHl5YmFja3VwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgeXllcnJvciAoWVlfKCJzeW50
YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikpOyBcCi0gICAgICBZWUVSUk9SOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXdoaWxl
ICgwKQotCi0vKiBFcnJvciB0b2tlbiBudW1iZXIgKi8KLSNkZWZpbmUgWVlURVJST1IgICAgICAg
IDEKLSNkZWZpbmUgWVlFUlJDT0RFICAgICAgIDI1NgotCi0KLQotLyogRW5hYmxlIGRlYnVnZ2lu
ZyBpZiByZXF1ZXN0ZWQuICAqLwotI2lmIFlZREVCVUcKLQotIyBpZm5kZWYgWVlGUFJJTlRGCi0j
ICBpbmNsdWRlIDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCi0j
ICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYKLSMgZW5kaWYKLQotIyBkZWZpbmUgWVlEUFJJTlRG
KEFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXAotZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIFlZRlBSSU5URiBBcmdzOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLQotLyogVGhpcyBtYWNybyBpcyBwcm92aWRlZCBm
b3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8KLSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQK
LSMgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQotI2VuZGlm
Ci0KLQotIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRp
b24pICAgICAgICAgICAgICAgICAgICBcCi1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgaWYgKHl5ZGVi
dWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiVz
ICIsIFRpdGxlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgIHl5
X3N5bWJvbF9wcmludCAoc3RkZXJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgVHlwZSwgVmFsdWUpOyBcCi0gICAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlxuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCkKLQotCi0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFByaW50IHRoaXMgc3ltYm9sJ3Mg
dmFsdWUgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovCi0KLXN0YXRpYyB2b2lkCi15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5
b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXApCi17Ci0g
IEZJTEUgKnl5byA9IHl5b3V0cHV0OwotICBZWVVTRSAoeXlvKTsKLSAgaWYgKCF5eXZhbHVlcCkK
LSAgICByZXR1cm47Ci0jIGlmZGVmIFlZUFJJTlQKLSAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykK
LSAgICBZWVBSSU5UICh5eW91dHB1dCwgeXl0b2tudW1beXl0eXBlXSwgKnl5dmFsdWVwKTsKLSMg
ZW5kaWYKLSAgWVlVU0UgKHl5dHlwZSk7Ci19Ci0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8Ci1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZAoteXlfc3ltYm9sX3By
aW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwKQotewotICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiJXMgJXMgKCIsCi0gICAgICAgICAg
ICAgeXl0eXBlIDwgWVlOVE9LRU5TID8gInRva2VuIiA6ICJudGVybSIsIHl5dG5hbWVbeXl0eXBl
XSk7Ci0KLSAgeXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVl
cCk7Ci0gIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5
eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJvbSBpdHMgQk9UVE9NIHVw
IHRvIGl0cyB8Ci18IFRPUCAoaW5jbHVkZWQpLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZAoteXlf
c3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3Ap
Ci17Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7Ci0gIGZvciAoOyB5eWJvdHRv
bSA8PSB5eXRvcDsgeXlib3R0b20rKykKLSAgICB7Ci0gICAgICBpbnQgeXlib3QgPSAqeXlib3R0
b207Ci0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsKLSAgICB9Ci0gIFlZ
RlBSSU5URiAoc3RkZXJyLCAiXG4iKTsKLX0KLQotIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90
dG9tLCBUb3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gIGlmICh5
eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLX0gd2hpbGUgKDApCi0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29p
bmcgdG8gYmUgcmVkdWNlZC4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwotCi1zdGF0aWMgdm9pZAoteXlfcmVkdWNlX3ByaW50ICh5eXR5cGVf
aW50MTYgKnl5c3NwLCBZWVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSkKLXsKLSAgdW5zaWduZWQg
bG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5cnVsZV07Ci0gIGludCB5eW5yaHMgPSB5eXIyW3l5
cnVsZV07Ci0gIGludCB5eWk7Ci0gIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sg
YnkgcnVsZSAlZCAobGluZSAlbHUpOlxuIiwKLSAgICAgICAgICAgICB5eXJ1bGUgLSAxLCB5eWxu
byk7Ci0gIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLwotICBmb3IgKHl5aSA9IDA7
IHl5aSA8IHl5bnJoczsgeXlpKyspCi0gICAgewotICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIg
ICAkJWQgPSAiLCB5eWkgKyAxKTsKLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLAotICAg
ICAgICAgICAgICAgICAgICAgICB5eXN0b3NbeXlzc3BbeXlpICsgMSAtIHl5bnJoc11dLAotICAg
ICAgICAgICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgWVlGUFJJ
TlRGIChzdGRlcnIsICJcbiIpOwotICAgIH0KLX0KLQotIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5U
KFJ1bGUpICAgICAgICAgIFwKLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHl5X3Jl
ZHVjZV9wcmludCAoeXlzc3AsIHl5dnNwLCBSdWxlKTsgXAotfSB3aGlsZSAoMCkKLQotLyogTm9u
emVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBz
byB0aGF0Ci0gICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4aXN0LiAgKi8KLWludCB5eWRlYnVn
OwotI2Vsc2UgLyogIVlZREVCVUcgKi8KLSMgZGVmaW5lIFlZRFBSSU5URihBcmdzKQotIyBkZWZp
bmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pCi0jIGRlZmlu
ZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChS
dWxlKQotI2VuZGlmIC8qICFZWURFQlVHICovCi0KLQotLyogWVlJTklUREVQVEggLS0gaW5pdGlh
bCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwotI2lmbmRlZiBZWUlOSVRERVBUSAot
IyBkZWZpbmUgWVlJTklUREVQVEggMjAwCi0jZW5kaWYKLQotLyogWVlNQVhERVBUSCAtLSBtYXhp
bXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZmZWN0aXZlIG9ubHkKLSAgIGlmIHRo
ZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlzIHVzZWQpLgotCi0gICBEbyBub3Qg
bWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZCBpZgot
ICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkKLSAg
IGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAq
LwotCi0jaWZuZGVmIFlZTUFYREVQVEgKLSMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKLSNlbmRp
ZgotCi0KLSNpZiBZWUVSUk9SX1ZFUkJPU0UKLQotIyBpZm5kZWYgeXlzdHJsZW4KLSMgIGlmIGRl
ZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19ICi0jICAgZGVmaW5lIHl5c3RybGVu
IHN0cmxlbgotIyAgZWxzZQotLyogUmV0dXJuIHRoZSBsZW5ndGggb2YgWVlTVFIuICAqLwotc3Rh
dGljIFlZU0laRV9UCi15eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIFlZU0laRV9U
IHl5bGVuOwotICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQotICAgIGNv
bnRpbnVlOwotICByZXR1cm4geXlsZW47Ci19Ci0jICBlbmRpZgotIyBlbmRpZgotCi0jIGlmbmRl
ZiB5eXN0cGNweQotIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gg
JiYgZGVmaW5lZCBfR05VX1NPVVJDRQotIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkKLSMgIGVs
c2UKLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhl
IHRlcm1pbmF0aW5nICdcMCcgaW4KLSAgIFlZREVTVC4gICovCi1zdGF0aWMgY2hhciAqCi15eXN0
cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFyICp5eXNyYykKLXsKLSAgY2hhciAqeXlkID0g
eXlkZXN0OwotICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKLQotICB3aGlsZSAoKCp5eWQrKyA9
ICp5eXMrKykgIT0gJ1wwJykKLSAgICBjb250aW51ZTsKLQotICByZXR1cm4geXlkIC0gMTsKLX0K
LSMgIGVuZGlmCi0jIGVuZGlmCi0KLSMgaWZuZGVmIHl5dG5hbWVycgotLyogQ29weSB0byBZWVJF
UyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNlc3NhcnkK
LSAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXll
cnJvci4gIFRoZQotICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNl
c3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKLSAgIGNvbnRhaW5zIGFuIGFwb3N0cm9waGUsIGEgY29t
bWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgotICAgYmFja3NsYXNoLWJhY2tzbGFzaCkuICBZ
WVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcwotICAgbnVsbCwgZG8gbm90
IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdAotICAg
d291bGQgaGF2ZSBiZWVuLiAgKi8KLXN0YXRpYyBZWVNJWkVfVAoteXl0bmFtZXJyIChjaGFyICp5
eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCi17Ci0gIGlmICgqeXlzdHIgPT0gJyInKQotICAgIHsK
LSAgICAgIFlZU0laRV9UIHl5biA9IDA7Ci0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsK
LQotICAgICAgZm9yICg7OykKLSAgICAgICAgc3dpdGNoICgqKyt5eXApCi0gICAgICAgICAgewot
ICAgICAgICAgIGNhc2UgJ1wnJzoKLSAgICAgICAgICBjYXNlICcsJzoKLSAgICAgICAgICAgIGdv
dG8gZG9fbm90X3N0cmlwX3F1b3RlczsKLQotICAgICAgICAgIGNhc2UgJ1xcJzoKLSAgICAgICAg
ICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKLSAgICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBf
cXVvdGVzOwotICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgaWYgKHl5cmVzKQotICAgICAgICAgICAgICB5eXJlc1t5eW5dID0g
Knl5cDsKLSAgICAgICAgICAgIHl5bisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
ICBjYXNlICciJzoKLSAgICAgICAgICAgIGlmICh5eXJlcykKLSAgICAgICAgICAgICAgeXlyZXNb
eXluXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm4geXluOwotICAgICAgICAgIH0KLSAgICBk
b19ub3Rfc3RyaXBfcXVvdGVzOiA7Ci0gICAgfQotCi0gIGlmICghIHl5cmVzKQotICAgIHJldHVy
biB5eXN0cmxlbiAoeXlzdHIpOwotCi0gIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAt
IHl5cmVzOwotfQotIyBlbmRpZgotCi0vKiBDb3B5IGludG8gKllZTVNHLCB3aGljaCBpcyBvZiBz
aXplICpZWU1TR19BTExPQywgYW4gZXJyb3IgbWVzc2FnZQotICAgYWJvdXQgdGhlIHVuZXhwZWN0
ZWQgdG9rZW4gWVlUT0tFTiBmb3IgdGhlIHN0YXRlIHN0YWNrIHdob3NlIHRvcCBpcwotICAgWVlT
U1AuCi0KLSAgIFJldHVybiAwIGlmICpZWU1TRyB3YXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uICBS
ZXR1cm4gMSBpZiAqWVlNU0cgaXMKLSAgIG5vdCBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUgbWVz
c2FnZS4gIEluIHRoYXQgY2FzZSwgYWxzbyBzZXQKLSAgICpZWU1TR19BTExPQyB0byB0aGUgcmVx
dWlyZWQgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJuIDIgaWYgdGhlCi0gICByZXF1aXJlZCBudW1i
ZXIgb2YgYnl0ZXMgaXMgdG9vIGxhcmdlIHRvIHN0b3JlLiAgKi8KLXN0YXRpYyBpbnQKLXl5c3lu
dGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywKLSAgICAgICAg
ICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3NwLCBpbnQgeXl0b2tlbikKLXsKLSAgWVlTSVpFX1Qg
eXlzaXplMCA9IHl5dG5hbWVyciAoWVlfTlVMTFBUUiwgeXl0bmFtZVt5eXRva2VuXSk7Ci0gIFlZ
U0laRV9UIHl5c2l6ZSA9IHl5c2l6ZTA7Ci0gIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNID0gNSB9OwotICAvKiBJbnRlcm5hdGlvbmFsaXplZCBmb3JtYXQgc3RyaW5nLiAqLwot
ICBjb25zdCBjaGFyICp5eWZvcm1hdCA9IFlZX05VTExQVFI7Ci0gIC8qIEFyZ3VtZW50cyBvZiB5
eWZvcm1hdC4gKi8KLSAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFY
SU1VTV07Ci0gIC8qIE51bWJlciBvZiByZXBvcnRlZCB0b2tlbnMgKG9uZSBmb3IgdGhlICJ1bmV4
cGVjdGVkIiwgb25lIHBlcgotICAgICAiZXhwZWN0ZWQiKS4gKi8KLSAgaW50IHl5Y291bnQgPSAw
OwotCi0gIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoK
LSAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVs
dCBhY3Rpb24sIHRoZW4KLSAgICAgICB0aGUgb25seSB3YXkgdGhpcyBmdW5jdGlvbiB3YXMgaW52
b2tlZCBpcyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KLSAgICAgICBpcyBhbiBlcnJvciBhY3Rpb24u
ICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZAotICAgICAgIHRva2VucyBi
ZWNhdXNlIHRoZXJlIGFyZSBub25lLgotICAgICAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4gYmUg
bm8gbG9va2FoZWFkIHByZXNlbnQgKGluIHl5Y2hhcikgaXMgaWYKLSAgICAgICB0aGlzIHN0YXRl
IGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaHVzLAotICAg
ICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50IHRv
IGRldGVybWluZQotICAgICAgIHRoYXQgdGhlcmUgaXMgbm8gdW5leHBlY3RlZCBvciBleHBlY3Rl
ZCB0b2tlbiB0byByZXBvcnQuICBJbiB0aGF0Ci0gICAgICAgY2FzZSwganVzdCByZXBvcnQgYSBz
aW1wbGUgInN5bnRheCBlcnJvciIuCi0gICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0IGEg
bG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGEKLSAgICAgICBjb25zaXN0ZW50
IHN0YXRlIHdpdGggYSBkZWZhdWx0IGFjdGlvbi4gIFRoZXJlIG1pZ2h0IGhhdmUgYmVlbiBhCi0g
ICAgICAgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdpdGgg
YSBub24tZGVmYXVsdAotICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhh
dCBtYW5pcHVsYXRlZCB5eWNoYXIuCi0gICAgIC0gT2YgY291cnNlLCB0aGUgZXhwZWN0ZWQgdG9r
ZW4gbGlzdCBkZXBlbmRzIG9uIHN0YXRlcyB0byBoYXZlCi0gICAgICAgY29ycmVjdCBsb29rYWhl
YWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJzZXIgbm90Ci0gICAgICAg
dG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZy
b20gdGhlCi0gICAgICAgc2Nhbm5lciBhbmQgYmVmb3JlIGRldGVjdGluZyBhIHN5bnRheCBlcnJv
ci4gIFRodXMsIHN0YXRlIG1lcmdpbmcKLSAgICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFuZCBk
ZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0aGUgZXhwZWN0ZWQKLSAgICAgICB0b2tlbiBsaXN0
LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgKLSAg
ICAgICBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRva2VuIHRoYXQg
d2lsbCBub3QgYmUKLSAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEg
bGF0ZXIgc3RhdGUuCi0gICovCi0gIGlmICh5eXRva2VuICE9IFlZRU1QVFkpCi0gICAgewotICAg
ICAgaW50IHl5biA9IHl5cGFjdFsqeXlzc3BdOwotICAgICAgeXlhcmdbeXljb3VudCsrXSA9IHl5
dG5hbWVbeXl0b2tlbl07Ci0gICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4p
KQotICAgICAgICB7Ci0gICAgICAgICAgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYgbmVnYXRpdmUg
dG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgotICAgICAgICAgICAgIFlZQ0hFQ0suICBJbiBv
dGhlciB3b3Jkcywgc2tpcCB0aGUgZmlyc3QgLVlZTiBhY3Rpb25zIGZvcgotICAgICAgICAgICAg
IHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLwotICAgICAg
ICAgIGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKLSAgICAgICAgICAvKiBTdGF5
IHdpdGhpbiBib3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KLSAgICAgICAg
ICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7Ci0gICAgICAgICAgaW50IHl5eGVu
ZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwotICAg
ICAgICAgIGludCB5eXg7Ci0KLSAgICAgICAgICBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5
eXhlbmQ7ICsreXl4KQotICAgICAgICAgICAgaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXgg
JiYgeXl4ICE9IFlZVEVSUk9SCi0gICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNf
ZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAoeXljb3VudCA9PSBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQotICAgICAg
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICB5eWNvdW50ID0gMTsKLSAgICAgICAg
ICAgICAgICAgICAgeXlzaXplID0geXlzaXplMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeXlhcmdbeXljb3VudCsrXSA9
IHl5dG5hbWVbeXl4XTsKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICBZWVNJ
WkVfVCB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5
eF0pOwotICAgICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gMjsKLSAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9
IHl5c2l6ZTE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgc3dpdGNoICh5eWNvdW50KQotICAgIHsKLSMgZGVmaW5lIFlZQ0FTRV8oTiwg
UykgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgIGJyZWFrCi0gICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikp
OwotICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsK
LSAgICAgIFlZQ0FTRV8oMiwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsKLSAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50
YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsKLSAg
ICAgIFlZQ0FTRV8oNSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGlu
ZyAlcyBvciAlcyBvciAlcyBvciAlcyIpKTsKLSMgdW5kZWYgWVlDQVNFXwotICAgIH0KLQotICB7
Ci0gICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7Ci0g
ICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUxICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19N
QVhJTVVNKSkKLSAgICAgIHJldHVybiAyOwotICAgIHl5c2l6ZSA9IHl5c2l6ZTE7Ci0gIH0KLQot
ICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQotICAgIHsKLSAgICAgICp5eW1zZ19hbGxvYyA9
IDIgKiB5eXNpemU7Ci0gICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxvYwotICAgICAg
ICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQotICAgICAg
ICAqeXltc2dfYWxsb2MgPSBZWVNUQUNLX0FMTE9DX01BWElNVU07Ci0gICAgICByZXR1cm4gMTsK
LSAgICB9Ci0KLSAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVz
ZXIncyBuYW1lIHNwYWNlLgotICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVu
IGlmIHRoZSB0cmFuc2xhdGlvbgotICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9u
ZyBudW1iZXIgb2YgIiVzInMuICAqLwotICB7Ci0gICAgY2hhciAqeXlwID0gKnl5bXNnOwotICAg
IGludCB5eWkgPSAwOwotICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0gJ1wwJykKLSAg
ICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlpIDwgeXljb3Vu
dCkKLSAgICAgICAgewotICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlp
KytdKTsKLSAgICAgICAgICB5eWZvcm1hdCArPSAyOwotICAgICAgICB9Ci0gICAgICBlbHNlCi0g
ICAgICAgIHsKLSAgICAgICAgICB5eXArKzsKLSAgICAgICAgICB5eWZvcm1hdCsrOwotICAgICAg
ICB9Ci0gIH0KLSAgcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovCi0K
LS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IFJl
bGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotc3RhdGljIHZvaWQK
LXl5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZh
bHVlcCkKLXsKLSAgWVlVU0UgKHl5dmFsdWVwKTsKLSAgaWYgKCF5eW1zZykKLSAgICB5eW1zZyA9
ICJEZWxldGluZyI7Ci0gIFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAs
IHl5bG9jYXRpb25wKTsKLQotICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgot
ICBzd2l0Y2ggKHl5dHlwZSkKLSAgICB7Ci0gICAgICAgICAgY2FzZSA2MjogLyogY2hvaWNlX2Vu
dHJ5ICAqLwotCi0gICAgICB7Ci0JZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQg
c3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAotCQkoKCp5eXZhbHVlcCkubWVudSktPmZpbGUt
Pm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+bGluZW5vKTsKLQlpZiAoY3VycmVudF9tZW51ID09
ICgoKnl5dmFsdWVwKS5tZW51KSkKLQkJbWVudV9lbmRfbWVudSgpOwotfQotCi0gICAgICAgIGJy
ZWFrOwotCi0gICAgY2FzZSA2ODogLyogaWZfZW50cnkgICovCi0KLSAgICAgIHsKLQlmcHJpbnRm
KHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIs
Ci0JCSgoKnl5dmFsdWVwKS5tZW51KS0+ZmlsZS0+bmFtZSwgKCgqeXl2YWx1ZXApLm1lbnUpLT5s
aW5lbm8pOwotCWlmIChjdXJyZW50X21lbnUgPT0gKCgqeXl2YWx1ZXApLm1lbnUpKQotCQltZW51
X2VuZF9tZW51KCk7Ci19Ci0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDczOiAvKiBtZW51
X2VudHJ5ICAqLwotCi0gICAgICB7Ci0JZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBl
bmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLAotCQkoKCp5eXZhbHVlcCkubWVudSktPmZp
bGUtPm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+bGluZW5vKTsKLQlpZiAoY3VycmVudF9tZW51
ID09ICgoKnl5dmFsdWVwKS5tZW51KSkKLQkJbWVudV9lbmRfbWVudSgpOwotfQotCi0gICAgICAg
IGJyZWFrOwotCi0KLSAgICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgWVlf
SUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECi19Ci0KLQotCi0KLS8qIFRoZSBsb29rYWhl
YWQgc3ltYm9sLiAgKi8KLWludCB5eWNoYXI7Ci0KLS8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBvZiB0
aGUgbG9va2FoZWFkIHN5bWJvbC4gICovCi1ZWVNUWVBFIHl5bHZhbDsKLS8qIE51bWJlciBvZiBz
eW50YXggZXJyb3JzIHNvIGZhci4gICovCi1pbnQgeXluZXJyczsKLQotCi0vKi0tLS0tLS0tLS0u
Ci18IHl5cGFyc2UuICB8Ci1gLS0tLS0tLS0tLSovCi0KLWludAoteXlwYXJzZSAodm9pZCkKLXsK
LSAgICBpbnQgeXlzdGF0ZTsKLSAgICAvKiBOdW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9y
ZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KLSAgICBpbnQgeXllcnJzdGF0dXM7Ci0KLSAg
ICAvKiBUaGUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKLSAgICAgICAneXlzcyc6IHJlbGF0ZWQg
dG8gc3RhdGVzLgotICAgICAgICd5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuCi0K
LSAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocm91Z2ggc2VwYXJhdGUgcG9pbnRlcnMsIHRv
IGFsbG93IHl5b3ZlcmZsb3cKLSAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAg
Ki8KLQotICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCi0gICAgeXl0eXBlX2ludDE2IHl5c3Nh
W1lZSU5JVERFUFRIXTsKLSAgICB5eXR5cGVfaW50MTYgKnl5c3M7Ci0gICAgeXl0eXBlX2ludDE2
ICp5eXNzcDsKLQotICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovCi0gICAgWVlT
VFlQRSB5eXZzYVtZWUlOSVRERVBUSF07Ci0gICAgWVlTVFlQRSAqeXl2czsKLSAgICBZWVNUWVBF
ICp5eXZzcDsKLQotICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOwotCi0gIGludCB5eW47Ci0gIGlu
dCB5eXJlc3VsdDsKLSAgLyogTG9va2FoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xh
dGVkKSB0b2tlbiBudW1iZXIuICAqLwotICBpbnQgeXl0b2tlbiA9IDA7Ci0gIC8qIFRoZSB2YXJp
YWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhl
Ci0gICAgIGFjdGlvbiByb3V0aW5lcy4gICovCi0gIFlZU1RZUEUgeXl2YWw7Ci0KLSNpZiBZWUVS
Uk9SX1ZFUkJPU0UKLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5kIGl0cyBhbGxv
Y2F0ZWQgc2l6ZS4gICovCi0gIGNoYXIgeXltc2didWZbMTI4XTsKLSAgY2hhciAqeXltc2cgPSB5
eW1zZ2J1ZjsKLSAgWVlTSVpFX1QgeXltc2dfYWxsb2MgPSBzaXplb2YgeXltc2didWY7Ci0jZW5k
aWYKLQotI2RlZmluZSBZWVBPUFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4p
KQotCi0gIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUgUkhTIG9mIHRoZSByZWR1Y2Vk
IHJ1bGUuCi0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVk
LiAgKi8KLSAgaW50IHl5bGVuID0gMDsKLQotICB5eXNzcCA9IHl5c3MgPSB5eXNzYTsKLSAgeXl2
c3AgPSB5eXZzID0geXl2c2E7Ci0gIHl5c3RhY2tzaXplID0gWVlJTklUREVQVEg7Ci0KLSAgWVlE
UFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsKLQotICB5eXN0YXRlID0gMDsK
LSAgeXllcnJzdGF0dXMgPSAwOwotICB5eW5lcnJzID0gMDsKLSAgeXljaGFyID0gWVlFTVBUWTsg
LyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KLSAgZ290byB5eXNldHN0YXRlOwotCi0v
Ki0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4KLXwgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBp
biB5eXN0YXRlLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0geXluZXdzdGF0ZToKLSAgLyogSW4gYWxsIGNhc2VzLCB3
aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKLSAgICAgaGF2
ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0
YWNrcy4gICovCi0gIHl5c3NwKys7Ci0KLSB5eXNldHN0YXRlOgotICAqeXlzc3AgPSB5eXN0YXRl
OwotCi0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQotICAgIHsKLSAgICAg
IC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxl
bWVudHMuICAqLwotICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsgMTsKLQot
I2lmZGVmIHl5b3ZlcmZsb3cKLSAgICAgIHsKLSAgICAgICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNl
IHRvIHJlYWxsb2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZgotICAgICAgICAgICB0aGVz
ZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCi0gICAgICAg
ICAgIG1lbW9yeS4gICovCi0gICAgICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsKLSAgICAgICAg
eXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7Ci0KLSAgICAgICAgLyogRWFjaCBzdGFjayBwb2lu
dGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUgb2YgdGhlCi0gICAgICAgICAgIGRh
dGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKLSAg
ICAgICAgICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBhcmdzLCBidXQg
dGhhdCBtaWdodAotICAgICAgICAgICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1h
Y3JvLiAgKi8KLSAgICAgICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksCi0g
ICAgICAgICAgICAgICAgICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9mICgqeXlzc3ApLAotICAg
ICAgICAgICAgICAgICAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwKLSAgICAg
ICAgICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsKLQotICAgICAgICB5eXNzID0geXlzczE7Ci0g
ICAgICAgIHl5dnMgPSB5eXZzMTsKLSAgICAgIH0KLSNlbHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8K
LSMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKLSAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0j
IGVsc2UKLSAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLwotICAgICAg
aWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCi0gICAgICAgIGdvdG8geXlleGhhdXN0ZWRs
YWI7Ci0gICAgICB5eXN0YWNrc2l6ZSAqPSAyOwotICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0
YWNrc2l6ZSkKLSAgICAgICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOwotCi0gICAgICB7Ci0g
ICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwotICAgICAgICB1bmlvbiB5eWFsbG9j
ICp5eXB0ciA9Ci0gICAgICAgICAgKHVuaW9uIHl5YWxsb2MgKikgWVlTVEFDS19BTExPQyAoWVlT
VEFDS19CWVRFUyAoeXlzdGFja3NpemUpKTsKLSAgICAgICAgaWYgKCEgeXlwdHIpCi0gICAgICAg
ICAgZ290byB5eWV4aGF1c3RlZGxhYjsKLSAgICAgICAgWVlTVEFDS19SRUxPQ0FURSAoeXlzc19h
bGxvYywgeXlzcyk7Ci0gICAgICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMp
OwotIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQotICAgICAgICBpZiAoeXlzczEgIT0geXlzc2Ep
Ci0gICAgICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7Ci0gICAgICB9Ci0jIGVuZGlmCi0jZW5k
aWYgLyogbm8geXlvdmVyZmxvdyAqLwotCi0gICAgICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAx
OwotICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsKLQotICAgICAgWVlEUFJJTlRGICgo
c3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAotICAgICAgICAgICAgICAg
ICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOwotCi0gICAgICBpZiAoeXlzcyAr
IHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKLSAgICAgICAgWVlBQk9SVDsKLSAgICB9Ci0KLSAg
WVlEUFJJTlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKLQot
ICBpZiAoeXlzdGF0ZSA9PSBZWUZJTkFMKQotICAgIFlZQUNDRVBUOwotCi0gIGdvdG8geXliYWNr
dXA7Ci0KLS8qLS0tLS0tLS0tLS0uCi18IHl5YmFja3VwLiAgfAotYC0tLS0tLS0tLS0tKi8KLXl5
YmFja3VwOgotCi0gIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJl
bnQgc3RhdGUuICBSZWFkIGEKLSAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFu
ZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRl
IHdoYXQgdG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8KLSAg
eXluID0geXlwYWN0W3l5c3RhdGVdOwotICBpZiAoeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5
bikpCi0gICAgZ290byB5eWRlZmF1bHQ7Ci0KLSAgLyogTm90IGtub3duID0+IGdldCBhIGxvb2th
aGVhZCB0b2tlbiBpZiBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8KLQotICAvKiBZWUNIQVIg
aXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9sLiAg
Ki8KLSAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQotICAgIHsKLSAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOwotICAgICAgeXljaGFyID0geXlsZXggKCk7Ci0g
ICAgfQotCi0gIGlmICh5eWNoYXIgPD0gWVlFT0YpCi0gICAgewotICAgICAgeXljaGFyID0geXl0
b2tlbiA9IFlZRU9GOwotICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBp
bnB1dC5cbiIpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB5eXRva2VuID0gWVlUUkFO
U0xBVEUgKHl5Y2hhcik7Ci0gICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwg
eXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7Ci0gICAgfQotCi0gIC8qIElmIHRoZSBwcm9wZXIg
YWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bwotICAgICBk
ZXRlY3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLwotICB5eW4gKz0geXl0b2tlbjsK
LSAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2Vu
KQotICAgIGdvdG8geXlkZWZhdWx0OwotICB5eW4gPSB5eXRhYmxlW3l5bl07Ci0gIGlmICh5eW4g
PD0gMCkKLSAgICB7Ci0gICAgICBpZiAoeXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXluKSkKLSAg
ICAgICAgZ290byB5eWVycmxhYjsKLSAgICAgIHl5biA9IC15eW47Ci0gICAgICBnb3RvIHl5cmVk
dWNlOwotICAgIH0KLQotICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0
ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yCi0gICAgIHN0YXR1cy4gICovCi0gIGlmICh5eWVycnN0
YXR1cykKLSAgICB5eWVycnN0YXR1cy0tOwotCi0gIC8qIFNoaWZ0IHRoZSBsb29rYWhlYWQgdG9r
ZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWws
ICZ5eWxsb2MpOwotCi0gIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4uICAqLwotICB5eWNo
YXIgPSBZWUVNUFRZOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIFlZX0lHTk9SRV9NQVlCRV9VTklO
SVRJQUxJWkVEX0JFR0lOCi0gICorK3l5dnNwID0geXlsdmFsOwotICBZWV9JR05PUkVfTUFZQkVf
VU5JTklUSUFMSVpFRF9FTkQKLQotICBnb3RvIHl5bmV3c3RhdGU7Ci0KLQotLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlk
ZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1cnJlbnQgc3RhdGUuICB8
Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLwoteXlkZWZhdWx0OgotICB5eW4gPSB5eWRlZmFjdFt5eXN0YXRlXTsKLSAgaWYgKHl5
biA9PSAwKQotICAgIGdvdG8geXllcnJsYWI7Ci0gIGdvdG8geXlyZWR1Y2U7Ci0KLQotLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24u
ICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlyZWR1Y2U6Ci0gIC8qIHl5
biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICovCi0gIHl5bGVuID0g
eXlyMlt5eW5dOwotCi0gIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVm
YXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgotICAgICAnJCQgPSAkMScuCi0KLSAgICAgT3RoZXJ3
aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLgotICAgICBUaGlz
IGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KLSAgICAgdXNlcnMgc2hvdWxkIG5v
dCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKLSAgICAgdW5jb25kaXRpb25hbGx5
IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhCi0gICAgIEdD
QyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovCi0gIHl5
dmFsID0geXl2c3BbMS15eWxlbl07Ci0KLQotICBZWV9SRURVQ0VfUFJJTlQgKHl5bik7Ci0gIHN3
aXRjaCAoeXluKQotICAgIHsKLSAgICAgICAgY2FzZSA2OgotCi0gICAgewotCW1lbnVfYWRkX3By
b21wdChQX01FTlUsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVMTCk7Ci19Ci0KLSAgICBicmVhazsK
LQotICBjYXNlIDExOgotCi0gICAgeyB6Y29uZl9lcnJvcigidW5leHBlY3RlZCBlbmQgc3RhdGVt
ZW50Iik7IH0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTI6Ci0KLSAgICB7IHpjb25mX2Vycm9y
KCJ1bmtub3duIHN0YXRlbWVudCBcIiVzXCIiLCAoeXl2c3BbLTJdLnN0cmluZykpOyB9Ci0KLSAg
ICBicmVhazsKLQotICBjYXNlIDEzOgotCi0gICAgewotCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVk
IG9wdGlvbiBcIiVzXCIiLCAoeXl2c3BbLTJdLmlkKS0+bmFtZSk7Ci19Ci0KLSAgICBicmVhazsK
LQotICBjYXNlIDE0OgotCi0gICAgeyB6Y29uZl9lcnJvcigiaW52YWxpZCBzdGF0ZW1lbnQiKTsg
fQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzMToKLQotICAgIHsgemNvbmZfZXJyb3IoInVua25v
d24gb3B0aW9uIFwiJXNcIiIsICh5eXZzcFstMl0uc3RyaW5nKSk7IH0KLQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMzI6Ci0KLSAgICB7IHpjb25mX2Vycm9yKCJpbnZhbGlkIG9wdGlvbiIpOyB9Ci0K
LSAgICBicmVhazsKLQotICBjYXNlIDMzOgotCi0gICAgewotCSh5eXZzcFstMV0uc3ltYm9sKS0+
ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOwotCW1lbnVfYWRkX2VudHJ5KCh5eXZzcFstMV0uc3lt
Ym9sKSk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29uZmlnICVzXG4iLCB6Y29uZl9j
dXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbLTFdLnN5bWJvbCktPm5hbWUpOwotfQot
Ci0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNDoKLQotICAgIHsKLQlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwot
fQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSAzNToKLQotICAgIHsKLQkoeXl2c3BbLTFdLnN5bWJv
bCktPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKLQltZW51X2FkZF9lbnRyeSgoeXl2c3BbLTFd
LnN5bWJvbCkpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVjb25maWcgJXNcbiIs
IHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFstMV0uc3ltYm9sKS0+bmFt
ZSk7Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDM2OgotCi0gICAgewotCWlmIChjdXJyZW50
X2VudHJ5LT5wcm9tcHQpCi0JCWN1cnJlbnRfZW50cnktPnByb21wdC0+dHlwZSA9IFBfTUVOVTsK
LQllbHNlCi0JCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25maWcgc3RhdGVtZW50IHdpdGhv
dXQgcHJvbXB0Iik7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKLX0KLQotICAgIGJyZWFrOwotCi0gIGNh
c2UgNDQ6Ci0KLSAgICB7Ci0JbWVudV9zZXRfdHlwZSgoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOwot
CXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnR5cGUoJXUpXG4iLAotCQl6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpLAotCQkoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOwotfQotCi0gICAg
YnJlYWs7Ci0KLSAgY2FzZSA0NToKLQotICAgIHsKLQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQs
ICh5eXZzcFstMl0uc3RyaW5nKSwgKHl5dnNwWy0xXS5leHByKSk7Ci0JcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
LX0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgNDY6Ci0KLSAgICB7Ci0JbWVudV9hZGRfZXhwcihQ
X0RFRkFVTFQsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFstMV0uZXhwcikpOwotCWlmICgoeXl2
c3BbLTNdLmlkKS0+c3R5cGUgIT0gU19VTktOT1dOKQotCQltZW51X3NldF90eXBlKCh5eXZzcFst
M10uaWQpLT5zdHlwZSk7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdCgldSlc
biIsCi0JCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksCi0JCSh5eXZzcFstM10uaWQp
LT5zdHlwZSk7Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDQ3OgotCi0gICAgewotCW1lbnVf
YWRkX3N5bWJvbChQX1NFTEVDVCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbLTFdLmV4cHIp
KTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzZWxlY3RcbiIsIHpjb25mX2N1cm5hbWUo
KSwgemNvbmZfbGluZW5vKCkpOwotfQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSA0ODoKLQotICAg
IHsKLQltZW51X2FkZF9zeW1ib2woUF9JTVBMWSwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3Bb
LTFdLmV4cHIpKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppbXBseVxuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDQ5
OgotCi0gICAgewotCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFO
R0UsKHl5dnNwWy0zXS5zeW1ib2wpLCAoeXl2c3BbLTJdLnN5bWJvbCkpLCAoeXl2c3BbLTFdLmV4
cHIpKTsKLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpyYW5nZVxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDUyOgotCi0g
ICAgewotCWNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoKHl5dnNw
Wy0xXS5zdHJpbmcpLCBzdHJsZW4oKHl5dnNwWy0xXS5zdHJpbmcpKSk7Ci0JaWYgKGlkICYmIGlk
LT5mbGFncyAmIFRGX09QVElPTikgewotCQltZW51X2FkZF9vcHRpb24oaWQtPnRva2VuLCAoeXl2
c3BbMF0uc3RyaW5nKSk7Ci0JCWZyZWUoKHl5dnNwWzBdLnN0cmluZykpOwotCX0KLQllbHNlCi0J
CXpjb25mcHJpbnQoIndhcm5pbmc6IGlnbm9yaW5nIHVua25vd24gb3B0aW9uICVzIiwgKHl5dnNw
Wy0xXS5zdHJpbmcpKTsKLQlmcmVlKCh5eXZzcFstMV0uc3RyaW5nKSk7Ci19Ci0KLSAgICBicmVh
azsKLQotICBjYXNlIDUzOgotCi0gICAgeyAoeXl2YWwuc3RyaW5nKSA9IE5VTEw7IH0KLQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTQ6Ci0KLSAgICB7ICh5eXZhbC5zdHJpbmcpID0gKHl5dnNwWzBd
LnN0cmluZyk7IH0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgNTU6Ci0KLSAgICB7Ci0Jc3RydWN0
IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgoeXl2c3BbLTFdLnN0cmluZyksIFNZTUJPTF9DSE9J
Q0UpOwotCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX05PX1dSSVRFOwotCW1lbnVfYWRkX2VudHJ5KHN5
bSk7Ci0JbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7Ci0JZnJlZSgoeXl2c3Bb
LTFdLnN0cmluZykpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNob2ljZVxuIiwgemNv
bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNl
IDU2OgotCi0gICAgewotCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKLX0KLQotICAg
IGJyZWFrOwotCi0gIGNhc2UgNTc6Ci0KLSAgICB7Ci0JaWYgKHpjb25mX2VuZHRva2VuKCh5eXZz
cFswXS5pZCksIFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsKLQkJbWVudV9lbmRfbWVudSgpOwot
CQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2VcbiIsIHpjb25mX2N1cm5hbWUo
KSwgemNvbmZfbGluZW5vKCkpOwotCX0KLX0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgNjU6Ci0K
LSAgICB7Ci0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAoeXl2c3BbLTJdLnN0cmluZyksICh5
eXZzcFstMV0uZXhwcikpOwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci19Ci0KLSAgICBicmVhazsKLQotICBj
YXNlIDY2OgotCi0gICAgewotCWlmICgoeXl2c3BbLTJdLmlkKS0+c3R5cGUgPT0gU19CT09MRUFO
IHx8ICh5eXZzcFstMl0uaWQpLT5zdHlwZSA9PSBTX1RSSVNUQVRFKSB7Ci0JCW1lbnVfc2V0X3R5
cGUoKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsKLQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6
dHlwZSgldSlcbiIsCi0JCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAotCQkJKHl5
dnNwWy0yXS5pZCktPnN0eXBlKTsKLQl9IGVsc2UKLQkJWVlFUlJPUjsKLX0KLQotICAgIGJyZWFr
OwotCi0gIGNhc2UgNjc6Ci0KLSAgICB7Ci0JY3VycmVudF9lbnRyeS0+c3ltLT5mbGFncyB8PSBT
WU1CT0xfT1BUSU9OQUw7Ci0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6b3B0aW9uYWxcbiIs
IHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOwotfQotCi0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA2ODoKLQotICAgIHsKLQlpZiAoKHl5dnNwWy0zXS5pZCktPnN0eXBlID09IFNfVU5LTk9X
TikgewotCQltZW51X2FkZF9zeW1ib2woUF9ERUZBVUxULCAoeXl2c3BbLTJdLnN5bWJvbCksICh5
eXZzcFstMV0uZXhwcikpOwotCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4i
LAotCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JfSBlbHNlCi0JCVlZRVJS
T1I7Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDcxOgotCi0gICAgewotCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
LQltZW51X2FkZF9lbnRyeShOVUxMKTsKLQltZW51X2FkZF9kZXAoKHl5dnNwWy0xXS5leHByKSk7
Ci0JKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOwotfQotCi0gICAgYnJlYWs7Ci0KLSAg
Y2FzZSA3MjoKLQotICAgIHsKLQlpZiAoemNvbmZfZW5kdG9rZW4oKHl5dnNwWzBdLmlkKSwgVF9J
RiwgVF9FTkRJRikpIHsKLQkJbWVudV9lbmRfbWVudSgpOwotCQlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDplbmRpZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Ci0JfQot
fQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3ODoKLQotICAgIHsKLQltZW51X2FkZF9lbnRyeShO
VUxMKTsKLQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwp
OwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOwotfQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSA3OToKLQotICAgIHsK
LQkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7Ci19Ci0KLSAgICBicmVhazsKLQotICBj
YXNlIDgwOgotCi0gICAgewotCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2c3BbMF0uaWQpLCBUX01F
TlUsIFRfRU5ETUVOVSkpIHsKLQkJbWVudV9lbmRfbWVudSgpOwotCQlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDplbmRtZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
LQl9Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDg2OgotCi0gICAgewotCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSwgKHl5dnNwWy0xXS5zdHJpbmcpKTsKLQl6Y29uZl9uZXh0ZmlsZSgoeXl2c3BbLTFdLnN0
cmluZykpOwotCWZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsKLX0KLQotICAgIGJyZWFrOwotCi0g
IGNhc2UgODc6Ci0KLSAgICB7Ci0JbWVudV9hZGRfZW50cnkoTlVMTCk7Ci0JbWVudV9hZGRfcHJv
bXB0KFBfQ09NTUVOVCwgKHl5dnNwWy0xXS5zdHJpbmcpLCBOVUxMKTsKLQlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDpjb21tZW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsKLX0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgODk6Ci0KLSAgICB7Ci0JcHJpbnRkKERFQlVH
X1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Ci0JemNvbmZfc3RhcnRoZWxwKCk7Ci19Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDkwOgotCi0g
ICAgewotCWlmIChjdXJyZW50X2VudHJ5LT5oZWxwKSB7Ci0JCWZyZWUoY3VycmVudF9lbnRyeS0+
aGVscCk7Ci0JCXpjb25mcHJpbnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIG1vcmUgdGhh
biBvbmUgaGVscCB0ZXh0IC0tIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCIsCi0JCQkg
ICBjdXJyZW50X2VudHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7Ci0JfQotCi0JLyogSXMg
dGhlIGhlbHAgdGV4dCBlbXB0eSBvciBhbGwgd2hpdGVzcGFjZT8gKi8KLQlpZiAoKHl5dnNwWzBd
LnN0cmluZylbc3Ryc3BuKCh5eXZzcFswXS5zdHJpbmcpLCAiIFxmXG5cclx0XHYiKV0gPT0gJ1ww
JykKLQkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVkIHdpdGggYmxhbmsgaGVscCB0
ZXh0IiwKLQkJCSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsKLQot
CWN1cnJlbnRfZW50cnktPmhlbHAgPSAoeXl2c3BbMF0uc3RyaW5nKTsKLX0KLQotICAgIGJyZWFr
OwotCi0gIGNhc2UgOTU6Ci0KLSAgICB7Ci0JbWVudV9hZGRfZGVwKCh5eXZzcFstMV0uZXhwcikp
OwotCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlcGVuZHMgb25cbiIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOwotfQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSA5OToKLQot
ICAgIHsKLQltZW51X2FkZF92aXNpYmlsaXR5KCh5eXZzcFswXS5leHByKSk7Ci19Ci0KLSAgICBi
cmVhazsKLQotICBjYXNlIDEwMToKLQotICAgIHsKLQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQs
ICh5eXZzcFstMV0uc3RyaW5nKSwgKHl5dnNwWzBdLmV4cHIpKTsKLX0KLQotICAgIGJyZWFrOwot
Ci0gIGNhc2UgMTA0OgotCi0gICAgeyAoeXl2YWwuaWQpID0gKHl5dnNwWy0xXS5pZCk7IH0KLQot
ICAgIGJyZWFrOwotCi0gIGNhc2UgMTA1OgotCi0gICAgeyAoeXl2YWwuaWQpID0gKHl5dnNwWy0x
XS5pZCk7IH0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA2OgotCi0gICAgeyAoeXl2YWwuaWQp
ID0gKHl5dnNwWy0xXS5pZCk7IH0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTA5OgotCi0gICAg
eyAoeXl2YWwuZXhwcikgPSBOVUxMOyB9Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDExMDoKLQot
ICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWzBdLmV4cHIpOyB9Ci0KLSAgICBicmVhazsKLQot
ICBjYXNlIDExMToKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19zeW1ib2woKHl5
dnNwWzBdLnN5bWJvbCkpOyB9Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDExMjoKLQotICAgIHsg
KHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfTFRILCAoeXl2c3BbLTJdLnN5bWJvbCks
ICh5eXZzcFswXS5zeW1ib2wpKTsgfQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTM6Ci0KLSAg
ICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0xFUSwgKHl5dnNwWy0yXS5zeW1i
b2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KLQotICAgIGJyZWFrOwotCi0gIGNhc2UgMTE0Ogot
Ci0gICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9HVEgsICh5eXZzcFstMl0u
c3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDEx
NToKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfR0VRLCAoeXl2c3Bb
LTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQotCi0gICAgYnJlYWs7Ci0KLSAgY2Fz
ZSAxMTY6Ci0KLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCAo
eXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQotCi0gICAgYnJlYWs7Ci0K
LSAgY2FzZSAxMTc6Ci0KLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX1VO
RVFVQUwsICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9Ci0KLSAgICBi
cmVhazsKLQotICBjYXNlIDExODoKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWy0xXS5l
eHByKTsgfQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMTk6Ci0KLSAgICB7ICh5eXZhbC5leHBy
KSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCAoeXl2c3BbMF0uZXhwcikpOyB9Ci0KLSAgICBicmVh
azsKLQotICBjYXNlIDEyMDoKLQotICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY190d28o
RV9PUiwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWzBdLmV4cHIpKTsgfQotCi0gICAgYnJlYWs7
Ci0KLSAgY2FzZSAxMjE6Ci0KLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfdHdvKEVf
QU5ELCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbMF0uZXhwcikpOyB9Ci0KLSAgICBicmVhazsK
LQotICBjYXNlIDEyMjoKLQotICAgIHsgKHl5dmFsLnN5bWJvbCkgPSBzeW1fbG9va3VwKCh5eXZz
cFswXS5zdHJpbmcpLCAwKTsgZnJlZSgoeXl2c3BbMF0uc3RyaW5nKSk7IH0KLQotICAgIGJyZWFr
OwotCi0gIGNhc2UgMTI0OgotCi0gICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5
dnNwWzBdLnN0cmluZyksIFNZTUJPTF9DT05TVCk7IGZyZWUoKHl5dnNwWzBdLnN0cmluZykpOyB9
Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDEyNToKLQotICAgIHsgKHl5dmFsLnN0cmluZykgPSBO
VUxMOyB9Ci0KLSAgICBicmVhazsKLQotICBjYXNlIDEyNzoKLQotICAgIHsgdmFyaWFibGVfYWRk
KCh5eXZzcFstM10uc3RyaW5nKSwgKHl5dnNwWy0xXS5zdHJpbmcpLCAoeXl2c3BbLTJdLmZsYXZv
cikpOyBmcmVlKCh5eXZzcFstM10uc3RyaW5nKSk7IGZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsg
fQotCi0gICAgYnJlYWs7Ci0KLSAgY2FzZSAxMjg6Ci0KLSAgICB7ICh5eXZhbC5zdHJpbmcpID0g
eHN0cmR1cCgiIik7IH0KLQotICAgIGJyZWFrOwotCi0KLQotICAgICAgZGVmYXVsdDogYnJlYWs7
Ci0gICAgfQotICAvKiBVc2VyIHNlbWFudGljIGFjdGlvbnMgc29tZXRpbWVzIGFsdGVyIHl5Y2hh
ciwgYW5kIHRoYXQgcmVxdWlyZXMKLSAgICAgdGhhdCB5eXRva2VuIGJlIHVwZGF0ZWQgd2l0aCB0
aGUgbmV3IHRyYW5zbGF0aW9uLiAgV2UgdGFrZSB0aGUKLSAgICAgYXBwcm9hY2ggb2YgdHJhbnNs
YXRpbmcgaW1tZWRpYXRlbHkgYmVmb3JlIGV2ZXJ5IHVzZSBvZiB5eXRva2VuLgotICAgICBPbmUg
YWx0ZXJuYXRpdmUgaXMgdHJhbnNsYXRpbmcgaGVyZSBhZnRlciBldmVyeSBzZW1hbnRpYyBhY3Rp
b24sCi0gICAgIGJ1dCB0aGF0IHRyYW5zbGF0aW9uIHdvdWxkIGJlIG1pc3NlZCBpZiB0aGUgc2Vt
YW50aWMgYWN0aW9uIGludm9rZXMKLSAgICAgWVlBQk9SVCwgWVlBQ0NFUFQsIG9yIFlZRVJST1Ig
aW1tZWRpYXRlbHkgYWZ0ZXIgYWx0ZXJpbmcgeXljaGFyIG9yCi0gICAgIGlmIGl0IGludm9rZXMg
WVlCQUNLVVAuICBJbiB0aGUgY2FzZSBvZiBZWUFCT1JUIG9yIFlZQUNDRVBULCBhbgotICAgICBp
bmNvcnJlY3QgZGVzdHJ1Y3RvciBtaWdodCB0aGVuIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuICBJ
biB0aGUKLSAgICAgY2FzZSBvZiBZWUVSUk9SIG9yIFlZQkFDS1VQLCBzdWJzZXF1ZW50IHBhcnNl
ciBhY3Rpb25zIG1pZ2h0IGxlYWQKLSAgICAgdG8gYW4gaW5jb3JyZWN0IGRlc3RydWN0b3IgY2Fs
bCBvciB2ZXJib3NlIHN5bnRheCBlcnJvciBtZXNzYWdlCi0gICAgIGJlZm9yZSB0aGUgbG9va2Fo
ZWFkIGlzIHRyYW5zbGF0ZWQuICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXly
MVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7Ci0KLSAgWVlQT1BTVEFDSyAoeXlsZW4pOwotICB5eWxl
biA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7Ci0KLSAgKisreXl2c3AgPSB5
eXZhbDsKLQotICAvKiBOb3cgJ3NoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBE
ZXRlcm1pbmUgd2hhdCBzdGF0ZQotICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0
ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUKLSAgICAgbnVtYmVyIHJlZHVjZWQgYnku
ICAqLwotCi0gIHl5biA9IHl5cjFbeXluXTsKLQotICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZ
WU5UT0tFTlNdICsgKnl5c3NwOwotICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlM
QVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQotICAgIHl5c3RhdGUgPSB5eXRhYmxl
W3l5c3RhdGVdOwotICBlbHNlCi0gICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tF
TlNdOwotCi0gIGdvdG8geXluZXdzdGF0ZTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLgotfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvci4g
IHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycmxhYjoK
LSAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNl
ZSBjb21tZW50cyBhdAotICAgICB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlz
IG5lY2Vzc2FyeS4gICovCi0gIHl5dG9rZW4gPSB5eWNoYXIgPT0gWVlFTVBUWSA/IFlZRU1QVFkg
OiBZWVRSQU5TTEFURSAoeXljaGFyKTsKLQotICAvKiBJZiBub3QgYWxyZWFkeSByZWNvdmVyaW5n
IGZyb20gYW4gZXJyb3IsIHJlcG9ydCB0aGlzIGVycm9yLiAgKi8KLSAgaWYgKCF5eWVycnN0YXR1
cykKLSAgICB7Ci0gICAgICArK3l5bmVycnM7Ci0jaWYgISBZWUVSUk9SX1ZFUkJPU0UKLSAgICAg
IHl5ZXJyb3IgKFlZXygic3ludGF4IGVycm9yIikpOwotI2Vsc2UKLSMgZGVmaW5lIFlZU1lOVEFY
X0VSUk9SIHl5c3ludGF4X2Vycm9yICgmeXltc2dfYWxsb2MsICZ5eW1zZywgXAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5eXRva2VuKQotICAgICAgewot
ICAgICAgICBjaGFyIGNvbnN0ICp5eW1zZ3AgPSBZWV8oInN5bnRheCBlcnJvciIpOwotICAgICAg
ICBpbnQgeXlzeW50YXhfZXJyb3Jfc3RhdHVzOwotICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0
dXMgPSBZWVNZTlRBWF9FUlJPUjsKLSAgICAgICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9
PSAwKQotICAgICAgICAgIHl5bXNncCA9IHl5bXNnOwotICAgICAgICBlbHNlIGlmICh5eXN5bnRh
eF9lcnJvcl9zdGF0dXMgPT0gMSkKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoeXltc2cg
IT0geXltc2didWYpCi0gICAgICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOwotICAgICAg
ICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eW1zZ19hbGxvYyk7Ci0gICAg
ICAgICAgICBpZiAoIXl5bXNnKQotICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgeXlt
c2cgPSB5eW1zZ2J1ZjsKLSAgICAgICAgICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1z
Z2J1ZjsKLSAgICAgICAgICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSAyOwotICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsKLSAgICAgICAgICAg
ICAgICB5eW1zZ3AgPSB5eW1zZzsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAg
ICAgeXllcnJvciAoeXltc2dwKTsKLSAgICAgICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9
PSAyKQotICAgICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7Ci0gICAgICB9Ci0jIHVuZGVmIFlZ
U1lOVEFYX0VSUk9SCi0jZW5kaWYKLSAgICB9Ci0KLQotCi0gIGlmICh5eWVycnN0YXR1cyA9PSAz
KQotICAgIHsKLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29r
YWhlYWQgdG9rZW4gYWZ0ZXIgYW4KLSAgICAgICAgIGVycm9yLCBkaXNjYXJkIGl0LiAgKi8KLQot
ICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikKLSAgICAgICAgewotICAgICAgICAgIC8qIFJldHVy
biBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCi0gICAgICAgICAgaWYgKHl5Y2hhciA9
PSBZWUVPRikKLSAgICAgICAgICAgIFlZQUJPUlQ7Ci0gICAgICAgIH0KLSAgICAgIGVsc2UKLSAg
ICAgICAgewotICAgICAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCi0gICAg
ICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCk7Ci0gICAgICAgICAgeXljaGFyID0g
WVlFTVBUWTsKLSAgICAgICAgfQotICAgIH0KLQotICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNl
IGxvb2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3IKLSAgICAgdG9rZW4uICAq
LwotICBnb3RvIHl5ZXJybGFiMTsKLQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhw
bGljaXRseSBieSBZWUVSUk9SLiAgfAotYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi15eWVycm9ybGFiOgotCi0gIC8qIFBhY2lmeSBjb21waWxl
cnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMKLSAgICAgWVlFUlJP
UiBhbmQgdGhlIGxhYmVsIHl5ZXJyb3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNl
cgotICAgICBjb2RlLiAgKi8KLSAgaWYgKC8qQ09OU1RDT05EKi8gMCkKLSAgICAgZ290byB5eWVy
cm9ybGFiOwotCi0gIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdo
b3NlIGFjdGlvbiB0cmlnZ2VyZWQKLSAgICAgdGhpcyBZWUVSUk9SLiAgKi8KLSAgWVlQT1BTVEFD
SyAoeXlsZW4pOwotICB5eWxlbiA9IDA7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7
Ci0gIHl5c3RhdGUgPSAqeXlzc3A7Ci0gIGdvdG8geXllcnJsYWIxOwotCi0KLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KLXwg
eXllcnJsYWIxIC0tIGNvbW1vbiBjb2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJP
Ui4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8KLXl5ZXJybGFiMToKLSAgeXllcnJzdGF0dXMgPSAzOyAgICAgIC8qIEVh
Y2ggcmVhbCB0b2tlbiBzaGlmdGVkIGRlY3JlbWVudHMgdGhpcy4gICovCi0KLSAgZm9yICg7OykK
LSAgICB7Ci0gICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07Ci0gICAgICBpZiAoIXl5cGFjdF92
YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQotICAgICAgICB7Ci0gICAgICAgICAgeXluICs9IFlZVEVS
Uk9SOwotICAgICAgICAgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tb
eXluXSA9PSBZWVRFUlJPUikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgeXluID0geXl0
YWJsZVt5eW5dOwotICAgICAgICAgICAgICBpZiAoMCA8IHl5bikKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAvKiBQb3AgdGhlIGN1cnJl
bnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovCi0g
ICAgICBpZiAoeXlzc3AgPT0geXlzcykKLSAgICAgICAgWVlBQk9SVDsKLQotCi0gICAgICB5eWRl
c3RydWN0ICgiRXJyb3I6IHBvcHBpbmciLAotICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3Rh
dGVdLCB5eXZzcCk7Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICAgIHl5c3RhdGUgPSAqeXlz
c3A7Ci0gICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOwotICAgIH0KLQotICBZWV9J
R05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTgotICAqKyt5eXZzcCA9IHl5bHZhbDsKLSAg
WVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5ECi0KLQotICAvKiBTaGlmdCB0aGUgZXJy
b3IgdG9rZW4uICAqLwotICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5d
LCB5eXZzcCwgeXlsc3ApOwotCi0gIHl5c3RhdGUgPSB5eW47Ci0gIGdvdG8geXluZXdzdGF0ZTsK
LQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCi18IHl5YWNjZXB0
bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8Ci1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi15eWFjY2VwdGxhYjoKLSAgeXlyZXN1bHQgPSAwOwotICBnb3RvIHl5
cmV0dXJuOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWFi
b3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCi15eWFib3J0bGFiOgotICB5eXJlc3VsdCA9IDE7Ci0gIGdvdG8geXly
ZXR1cm47Ci0KLSNpZiAhZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQotLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgotfCB5eWV4
aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAotYC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoteXlleGhhdXN0ZWRs
YWI6Ci0gIHl5ZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKLSAgeXlyZXN1bHQgPSAy
OwotICAvKiBGYWxsIHRocm91Z2guICAqLwotI2VuZGlmCi0KLXl5cmV0dXJuOgotICBpZiAoeXlj
aGFyICE9IFlZRU1QVFkpCi0gICAgewotICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0
IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdAotICAgICAgICAgdXNlciBz
ZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLwotICAgICAgeXl0
b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwotICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6
IGRpc2NhcmRpbmcgbG9va2FoZWFkIiwKLSAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2
YWwpOwotICAgIH0KLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUg
d2hvc2UgYWN0aW9uIHRyaWdnZXJlZAotICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAq
LwotICBZWVBPUFNUQUNLICh5eWxlbik7Ci0gIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7
Ci0gIHdoaWxlICh5eXNzcCAhPSB5eXNzKQotICAgIHsKLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVh
bnVwOiBwb3BwaW5nIiwKLSAgICAgICAgICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCk7
Ci0gICAgICBZWVBPUFNUQUNLICgxKTsKLSAgICB9Ci0jaWZuZGVmIHl5b3ZlcmZsb3cKLSAgaWYg
KHl5c3MgIT0geXlzc2EpCi0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsKLSNlbmRpZgotI2lmIFlZ
RVJST1JfVkVSQk9TRQotICBpZiAoeXltc2cgIT0geXltc2didWYpCi0gICAgWVlTVEFDS19GUkVF
ICh5eW1zZyk7Ci0jZW5kaWYKLSAgcmV0dXJuIHl5cmVzdWx0OwotfQotCi0KLQotdm9pZCBjb25m
X3BhcnNlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCWludCBp
OwotCi0JemNvbmZfaW5pdHNjYW4obmFtZSk7Ci0KLQlfbWVudV9pbml0KCk7Ci0KLQlpZiAoZ2V0
ZW52KCJaQ09ORl9ERUJVRyIpKQotCQl5eWRlYnVnID0gMTsKLQl5eXBhcnNlKCk7Ci0KLQkvKiBW
YXJpYWJsZXMgYXJlIGV4cGFuZGVkIGluIHRoZSBwYXJzZSBwaGFzZS4gV2UgY2FuIGZyZWUgdGhl
bSBoZXJlLiAqLwotCXZhcmlhYmxlX2FsbF9kZWwoKTsKLQotCWlmICh5eW5lcnJzKQotCQlleGl0
KDEpOwotCWlmICghbW9kdWxlc19zeW0pCi0JCW1vZHVsZXNfc3ltID0gc3ltX2ZpbmQoICJuIiAp
OwotCi0JaWYgKCFtZW51X2hhc19wcm9tcHQoJnJvb3RtZW51KSkgewotCQljdXJyZW50X2VudHJ5
ID0gJnJvb3RtZW51OwotCQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAiTWFpbiBtZW51IiwgTlVM
TCk7Ci0JfQotCi0JbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOwotCWZvcl9hbGxfc3ltYm9scyhp
LCBzeW0pIHsKLQkJaWYgKHN5bV9jaGVja19kZXBzKHN5bSkpCi0JCQl5eW5lcnJzKys7Ci0JfQot
CWlmICh5eW5lcnJzKQotCQlleGl0KDEpOwotCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOwotfQot
Ci1zdGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikKLXsKLQlzd2l0
Y2ggKHRva2VuKSB7Ci0JY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOwotCWNhc2UgVF9FTkRN
RU5VOgkJcmV0dXJuICJlbmRtZW51IjsKLQljYXNlIFRfQ0hPSUNFOgkJcmV0dXJuICJjaG9pY2Ui
OwotCWNhc2UgVF9FTkRDSE9JQ0U6CXJldHVybiAiZW5kY2hvaWNlIjsKLQljYXNlIFRfSUY6CQly
ZXR1cm4gImlmIjsKLQljYXNlIFRfRU5ESUY6CQlyZXR1cm4gImVuZGlmIjsKLQljYXNlIFRfREVQ
RU5EUzoJCXJldHVybiAiZGVwZW5kcyI7Ci0JY2FzZSBUX1ZJU0lCTEU6CQlyZXR1cm4gInZpc2li
bGUiOwotCX0KLQlyZXR1cm4gIjx0b2tlbj4iOwotfQotCi1zdGF0aWMgYm9vbCB6Y29uZl9lbmR0
b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRv
a2VuKQotewotCWlmIChpZC0+dG9rZW4gIT0gZW5kdG9rZW4pIHsKLQkJemNvbmZfZXJyb3IoInVu
ZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxvY2siLAotCQkJaWQtPm5hbWUsIHpjb25mX3Rva2Vu
bmFtZShzdGFydHRva2VuKSk7Ci0JCXl5bmVycnMrKzsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlp
ZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1cnJlbnRfZmlsZSkgewotCQl6Y29uZl9lcnJvcigi
JyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLAotCQkJaWQtPm5hbWUsIHpjb25mX3Rv
a2VubmFtZShzdGFydHRva2VuKSk7Ci0JCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxvY2F0aW9u
IG9mIHRoZSAnJXMnXG4iLAotCQkJY3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21l
bnUtPmxpbmVubywKLQkJCXpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7Ci0JCXl5bmVycnMr
KzsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQlyZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQg
emNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JZnBy
aW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Ci0JdmFfc3RhcnQoYXAsIGVycik7Ci0JdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKLQl2YV9l
bmQoYXApOwotCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKLX0KLQotc3RhdGljIHZvaWQgemNvbmZf
ZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXl5bmVycnMr
KzsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpKTsKLQl2YV9zdGFydChhcCwgZXJyKTsKLQl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXAp
OwotCXZhX2VuZChhcCk7Ci0JZnByaW50ZihzdGRlcnIsICJcbiIpOwotfQotCi1zdGF0aWMgdm9p
ZCB5eWVycm9yKGNvbnN0IGNoYXIgKmVycikKLXsKLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAl
c1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSArIDEsIGVycik7Ci19Ci0KLXN0
YXRpYyB2b2lkIHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIp
Ci17Ci0JY29uc3QgY2hhciAqcDsKLQlpbnQgbGVuOwotCi0JcHV0YygnIicsIG91dCk7Ci0Jd2hp
bGUgKChwID0gc3RyY2hyKHN0ciwgJyInKSkpIHsKLQkJbGVuID0gcCAtIHN0cjsKLQkJaWYgKGxl
bikKLQkJCWZwcmludGYob3V0LCAiJS4qcyIsIGxlbiwgc3RyKTsKLQkJZnB1dHMoIlxcXCIiLCBv
dXQpOwotCQlzdHIgPSBwICsgMTsKLQl9Ci0JZnB1dHMoc3RyLCBvdXQpOwotCXB1dGMoJyInLCBv
dXQpOwotfQotCi1zdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVu
dSAqbWVudSkKLXsKLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07Ci0Jc3RydWN0IHBy
b3BlcnR5ICpwcm9wOwotCi0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkKLQkJZnByaW50ZihvdXQs
ICJcbmNob2ljZVxuIik7Ci0JZWxzZQotCQlmcHJpbnRmKG91dCwgIlxuY29uZmlnICVzXG4iLCBz
eW0tPm5hbWUpOwotCXN3aXRjaCAoc3ltLT50eXBlKSB7Ci0JY2FzZSBTX0JPT0xFQU46Ci0JCWZw
dXRzKCIgIGJvb2xcbiIsIG91dCk7Ci0JCWJyZWFrOwotCWNhc2UgU19UUklTVEFURToKLQkJZnB1
dHMoIiAgdHJpc3RhdGVcbiIsIG91dCk7Ci0JCWJyZWFrOwotCWNhc2UgU19TVFJJTkc6Ci0JCWZw
dXRzKCIgIHN0cmluZ1xuIiwgb3V0KTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0lOVDoKLQkJZnB1dHMo
IiAgaW50ZWdlclxuIiwgb3V0KTsKLQkJYnJlYWs7Ci0JY2FzZSBTX0hFWDoKLQkJZnB1dHMoIiAg
aGV4XG4iLCBvdXQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlmcHV0cygiICA/Pz9cbiIsIG91
dCk7Ci0JCWJyZWFrOwotCX0KLQlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBw
cm9wLT5uZXh0KSB7Ci0JCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpCi0JCQljb250aW51ZTsKLQkJ
c3dpdGNoIChwcm9wLT50eXBlKSB7Ci0JCWNhc2UgUF9QUk9NUFQ6Ci0JCQlmcHV0cygiICBwcm9t
cHQgIiwgb3V0KTsKLQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKLQkJ
CWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgewotCQkJCWZwdXRzKCIgaWYg
Iiwgb3V0KTsKLQkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91dCk7Ci0JCQl9
Ci0JCQlmcHV0YygnXG4nLCBvdXQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUF9ERUZBVUxUOgotCQkJ
ZnB1dHMoICIgIGRlZmF1bHQgIiwgb3V0KTsKLQkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91
dCk7Ci0JCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKLQkJCQlmcHV0
cygiIGlmICIsIG91dCk7Ci0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQp
OwotCQkJfQotCQkJZnB1dGMoJ1xuJywgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNlIFBfQ0hPSUNF
OgotCQkJZnB1dHMoIiAgI2Nob2ljZSB2YWx1ZVxuIiwgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNl
IFBfU0VMRUNUOgotCQkJZnB1dHMoICIgIHNlbGVjdCAiLCBvdXQpOwotCQkJZXhwcl9mcHJpbnQo
cHJvcC0+ZXhwciwgb3V0KTsKLQkJCWZwdXRjKCdcbicsIG91dCk7Ci0JCQlicmVhazsKLQkJY2Fz
ZSBQX0lNUExZOgotCQkJZnB1dHMoICIgIGltcGx5ICIsIG91dCk7Ci0JCQlleHByX2ZwcmludChw
cm9wLT5leHByLCBvdXQpOwotCQkJZnB1dGMoJ1xuJywgb3V0KTsKLQkJCWJyZWFrOwotCQljYXNl
IFBfUkFOR0U6Ci0JCQlmcHV0cyggIiAgcmFuZ2UgIiwgb3V0KTsKLQkJCWV4cHJfZnByaW50KHBy
b3AtPmV4cHIsIG91dCk7Ci0JCQlmcHV0YygnXG4nLCBvdXQpOwotCQkJYnJlYWs7Ci0JCWNhc2Ug
UF9NRU5VOgotCQkJZnB1dHMoICIgIG1lbnUgIiwgb3V0KTsKLQkJCXByaW50X3F1b3RlZF9zdHJp
bmcob3V0LCBwcm9wLT50ZXh0KTsKLQkJCWZwdXRjKCdcbicsIG91dCk7Ci0JCQlicmVhazsKLQkJ
Y2FzZSBQX1NZTUJPTDoKLQkJCWZwdXRzKCAiICBzeW1ib2wgIiwgb3V0KTsKLQkJCWZwcmludGYo
b3V0LCAiJXNcbiIsIHByb3AtPnN5bS0+bmFtZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJ
CWZwcmludGYob3V0LCAiICB1bmtub3duIHByb3AgJWQhXG4iLCBwcm9wLT50eXBlKTsKLQkJCWJy
ZWFrOwotCQl9Ci0JfQotCWlmIChtZW51LT5oZWxwKSB7Ci0JCWludCBsZW4gPSBzdHJsZW4obWVu
dS0+aGVscCk7Ci0JCXdoaWxlIChtZW51LT5oZWxwWy0tbGVuXSA9PSAnXG4nKQotCQkJbWVudS0+
aGVscFtsZW5dID0gMDsKLQkJZnByaW50ZihvdXQsICIgIGhlbHBcbiVzXG4iLCBtZW51LT5oZWxw
KTsKLQl9Ci19Ci0KLXZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCkKLXsKLQlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7Ci0Jc3RydWN0IHN5bWJvbCAqc3ltOwotCXN0cnVjdCBtZW51ICptZW51OwotCi0J
bWVudSA9IHJvb3RtZW51Lmxpc3Q7Ci0Jd2hpbGUgKG1lbnUpIHsKLQkJaWYgKChzeW0gPSBtZW51
LT5zeW0pKQotCQkJcHJpbnRfc3ltYm9sKG91dCwgbWVudSk7Ci0JCWVsc2UgaWYgKChwcm9wID0g
bWVudS0+cHJvbXB0KSkgewotCQkJc3dpdGNoIChwcm9wLT50eXBlKSB7Ci0JCQljYXNlIFBfQ09N
TUVOVDoKLQkJCQlmcHV0cygiXG5jb21tZW50ICIsIG91dCk7Ci0JCQkJcHJpbnRfcXVvdGVkX3N0
cmluZyhvdXQsIHByb3AtPnRleHQpOwotCQkJCWZwdXRzKCJcbiIsIG91dCk7Ci0JCQkJYnJlYWs7
Ci0JCQljYXNlIFBfTUVOVToKLQkJCQlmcHV0cygiXG5tZW51ICIsIG91dCk7Ci0JCQkJcHJpbnRf
cXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOwotCQkJCWZwdXRzKCJcbiIsIG91dCk7Ci0J
CQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCTsKLQkJCX0KLQkJCWlmICghZXhwcl9pc195ZXMo
cHJvcC0+dmlzaWJsZS5leHByKSkgewotCQkJCWZwdXRzKCIgIGRlcGVuZHMgIiwgb3V0KTsKLQkJ
CQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIsIG91dCk7Ci0JCQkJZnB1dGMoJ1xuJywg
b3V0KTsKLQkJCX0KLQkJfQotCi0JCWlmIChtZW51LT5saXN0KQotCQkJbWVudSA9IG1lbnUtPmxp
c3Q7Ci0JCWVsc2UgaWYgKG1lbnUtPm5leHQpCi0JCQltZW51ID0gbWVudS0+bmV4dDsKLQkJZWxz
ZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7Ci0JCQlpZiAobWVudS0+cHJvbXB0ICYm
IG1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCi0JCQkJZnB1dHMoIlxuZW5kbWVudVxuIiwg
b3V0KTsKLQkJCWlmIChtZW51LT5uZXh0KSB7Ci0JCQkJbWVudSA9IG1lbnUtPm5leHQ7Ci0JCQkJ
YnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLSNpbmNsdWRlICJ6Y29uZi5sZXguYyIKLSNpbmNs
dWRlICJ1dGlsLmMiCi0jaW5jbHVkZSAiY29uZmRhdGEuYyIKLSNpbmNsdWRlICJleHByLmMiCi0j
aW5jbHVkZSAic3ltYm9sLmMiCi0jaW5jbHVkZSAibWVudS5jIgotI2luY2x1ZGUgInByZXByb2Nl
c3MuYyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZSBiL3N1cHBvcnQva2Nv
bmZpZy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjUzMmM1
Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlCkBAIC0wLDAgKzEs
MjA4IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisjID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQorIyBVbmlrcmFmdCBjb25maWd1cmF0aW9uIHRhcmdldHMKKyMgVGhlc2UgdGFyZ2V0
cyBhcmUgdXNlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQorCitQSE9OWSArPSB4Y29uZmlnIGdj
b25maWcgbWVudWNvbmZpZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcgXAor
CWJ1aWxkX21lbnVjb25maWcgYnVpbGRfbmNvbmZpZyBidWlsZF9nY29uZmlnIGJ1aWxkX3hjb25m
aWcKKworaWZkZWYgS0JVSUxEX0tDT05GSUcKK0tjb25maWcgOj0gJChLQlVJTERfS0NPTkZJRykK
K2Vsc2UKK0tjb25maWcgOj0gS2NvbmZpZworZW5kaWYKKworaWZlcSAoJChxdWlldCksc2lsZW50
XykKK3NpbGVudCA6PSAtcworZW5kaWYKKworIyBXZSBuZWVkIHRoaXMsIGluIGNhc2UgdGhlIHVz
ZXIgaGFzIGl0IGluIGl0cyBlbnZpcm9ubWVudAordW5leHBvcnQgQ09ORklHXworCit4Y29uZmln
OiAkKG9iaikvcWNvbmYKKwkkPCAkKHNpbGVudCkgJChLY29uZmlnKQorCitnY29uZmlnOiAkKG9i
aikvZ2NvbmYKKwkkPCAkKHNpbGVudCkgJChLY29uZmlnKQorCittZW51Y29uZmlnOiAkKG9iaikv
bWNvbmYKKwkkPCAkKHNpbGVudCkgJChLY29uZmlnKQorCitjb25maWc6ICQob2JqKS9jb25mCisJ
JDwgJChzaWxlbnQpIC0tb2xkYXNrY29uZmlnICQoS2NvbmZpZykKKworbmNvbmZpZzogJChvYmop
L25jb25mCisJJDwgJChzaWxlbnQpICQoS2NvbmZpZykKKworYnVpbGRfbWVudWNvbmZpZzogJChv
YmopL21jb25mCisKK2J1aWxkX25jb25maWc6ICQob2JqKS9uY29uZgorCitidWlsZF9nY29uZmln
OiAkKG9iaikvZ2NvbmYKKworYnVpbGRfeGNvbmZpZzogJChvYmopL3Fjb25mCisKK2xvY2FseWVz
Y29uZmlnIGxvY2FsbW9kY29uZmlnOiAkKG9iaikvY29uZgorCSQoUSlwZXJsICQoc3JjdHJlZSkv
JChzcmMpL3N0cmVhbWxpbmVfY29uZmlnLnBsIC0tJEAgJChzcmN0cmVlKSAkKEtjb25maWcpID4g
LnRtcC5jb25maWcKKwkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCQlcCisJCQljbXAg
LXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJCVwKKwkJCShtdiAtZiAuY29uZmlnIC5jb25maWcu
b2xkLjE7CQkJXAorCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXAorCQkJICQ8ICQo
c2lsZW50KSAtLW9sZGNvbmZpZyAkKEtjb25maWcpOwkJXAorCQkJIG12IC1mIC5jb25maWcub2xk
LjEgLmNvbmZpZy5vbGQpCQlcCisJZWxzZQkJCQkJCQkJXAorCQkJbXYgLWYgLnRtcC5jb25maWcg
LmNvbmZpZzsJCQlcCisJCQkkPCAkKHNpbGVudCkgLS1vbGRjb25maWcgJChLY29uZmlnKTsJCVwK
KwlmaQorCSQoUSlybSAtZiAudG1wLmNvbmZpZworCisjIFRoZXNlIHRhcmdldHMgbWFwIDE6MSB0
byB0aGUgY29tbWFuZGxpbmUgb3B0aW9ucyBvZiAnY29uZicKKyMKKyMgTm90ZToKKyMgIHN5bmNj
b25maWcgaGFzIGJlY29tZSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIGlz
IG5vdworIyAgZGVwcmVjYXRlZCBmb3IgZXh0ZXJuYWwgdXNlCitzaW1wbGUtdGFyZ2V0cyA6PSBv
bGRjb25maWcgYWxsbm9jb25maWcgYWxseWVzY29uZmlnIGFsbG1vZGNvbmZpZyBcCisJYWxsZGVm
Y29uZmlnIHJhbmRjb25maWcgbGlzdG5ld2NvbmZpZyBvbGRkZWZjb25maWcgc3luY2NvbmZpZwor
UEhPTlkgKz0gJChzaW1wbGUtdGFyZ2V0cykKKworJChzaW1wbGUtdGFyZ2V0cyk6ICQob2JqKS9j
b25mCisJJDwgJChzaWxlbnQpIC0tJEAgJChLY29uZmlnKQorCitQSE9OWSArPSBzYXZlZGVmY29u
ZmlnIGRlZmNvbmZpZworCitzYXZlZGVmY29uZmlnOiAkKG9iaikvY29uZgorCSQ8ICQoc2lsZW50
KSAtLSRAPWRlZmNvbmZpZyAkKEtjb25maWcpCisKK2RlZmNvbmZpZzogJChvYmopL2NvbmYKK2lm
ZXEgKCQoS0JVSUxEX0RFRkNPTkZJRyksKQorCSQ8ICQoc2lsZW50KSAtLWRlZmNvbmZpZyAkKEtj
b25maWcpCitlbHNlIGlmbmVxICgkKHdpbGRjYXJkICQoc3JjdHJlZSkvYXJjaC8kKFNSQ0FSQ0gp
L2NvbmZpZ3MvJChLQlVJTERfREVGQ09ORklHKSksKQorCUAkKGtlY2hvKSAiKioqIERlZmF1bHQg
Y29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiAnJChLQlVJTERfREVGQ09ORklHKSciCisJJChRKSQ8
ICQoc2lsZW50KSAtLWRlZmNvbmZpZz1hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kKEtCVUlMRF9E
RUZDT05GSUcpICQoS2NvbmZpZykKK2Vsc2UKKwlAJChrZWNobykgIioqKiBEZWZhdWx0IGNvbmZp
Z3VyYXRpb24gaXMgYmFzZWQgb24gdGFyZ2V0ICckKEtCVUlMRF9ERUZDT05GSUcpJyIKKwkkKFEp
JChNQUtFKSAtZiAkKHNyY3RyZWUpL01ha2VmaWxlICQoS0JVSUxEX0RFRkNPTkZJRykKK2VuZGlm
CisKKyVfZGVmY29uZmlnOiAkKG9iaikvY29uZgorCSQoUSkkPCAkKHNpbGVudCkgLS1kZWZjb25m
aWc9YXJjaC8kKFNSQ0FSQ0gpL2NvbmZpZ3MvJEAgJChLY29uZmlnKQorCitjb25maWdmaWxlcz0k
KHdpbGRjYXJkICQoc3JjdHJlZSkva2VybmVsL2NvbmZpZ3MvJEAgJChzcmN0cmVlKS9hcmNoLyQo
U1JDQVJDSCkvY29uZmlncy8kQCkKKworJS5jb25maWc6ICQob2JqKS9jb25mCisJJChpZiAkKGNh
bGwgY29uZmlnZmlsZXMpLCwgJChlcnJvciBObyBjb25maWd1cmF0aW9uIGV4aXN0cyBmb3IgdGhp
cyB0YXJnZXQgb24gdGhpcyBhcmNoaXRlY3R1cmUpKQorCSQoUSkkKENPTkZJR19TSEVMTCkgJChz
cmN0cmVlKS9zY3JpcHRzL2tjb25maWcvbWVyZ2VfY29uZmlnLnNoIC1tIC5jb25maWcgJChjb25m
aWdmaWxlcykKKwkrJChRKXllcyAiIiB8ICQoTUFLRSkgLWYgJChzcmN0cmVlKS9NYWtlZmlsZSBv
bGRjb25maWcKKworUEhPTlkgKz0ga3ZtY29uZmlnCitrdm1jb25maWc6IGt2bV9ndWVzdC5jb25m
aWcKKwlAOgorCitQSE9OWSArPSB4ZW5jb25maWcKK3hlbmNvbmZpZzogeGVuLmNvbmZpZworCUA6
CisKK1BIT05ZICs9IHRpbnljb25maWcKK3Rpbnljb25maWc6CisJJChRKSQoTUFLRSkgLWYgJChz
cmN0cmVlKS9NYWtlZmlsZSBhbGxub2NvbmZpZyB0aW55LmNvbmZpZworCisjIENIRUNLOiAtbyBj
YWNoZV9kaXI9PHBhdGg+IHdvcmtpbmc/CitQSE9OWSArPSB0ZXN0Y29uZmlnCit0ZXN0Y29uZmln
OiAkKG9iaikvY29uZgorCSQoUFlUSE9OMykgLUIgLW0gcHl0ZXN0ICQoc3JjdHJlZSkvJChzcmMp
L3Rlc3RzIFwKKwktbyBjYWNoZV9kaXI9JChhYnNwYXRoICQob2JqKS90ZXN0cy8uY2FjaGUpIFwK
KwkkKGlmICQoZmluZHN0cmluZyAxLCQoS0JVSUxEX1ZFUkJPU0UpKSwtLWNhcHR1cmU9bm8pCitj
bGVhbi1kaXJzICs9IHRlc3RzLy5jYWNoZQorCisjIEhlbHAgdGV4dCB1c2VkIGJ5IG1ha2UgaGVs
cAoraGVscDoKKwlAZWNobyAgJyAgY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRp
bGlzaW5nIGEgbGluZS1vcmllbnRlZCBwcm9ncmFtJworCUBlY2hvICAnICBuY29uZmlnICAgICAg
ICAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbmN1cnNlcyBtZW51IGJhc2Vk
IHByb2dyYW0nCisJQGVjaG8gICcgIG1lbnVjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZp
ZyB1dGlsaXNpbmcgYSBtZW51IGJhc2VkIHByb2dyYW0nCisJQGVjaG8gICcgIHhjb25maWcJICAt
IFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBRdCBiYXNlZCBmcm9udC1lbmQnCisJ
QGVjaG8gICcgIGdjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBH
VEsrIGJhc2VkIGZyb250LWVuZCcKKwlAZWNobyAgJyAgb2xkY29uZmlnCSAgLSBVcGRhdGUgY3Vy
cmVudCBjb25maWcgdXRpbGlzaW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlJworCUBlY2hv
ICAnICBsb2NhbG1vZGNvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgZGlzYWJsaW5nIG1v
ZHVsZXMgbm90IGxvYWRlZCcKKwlAZWNobyAgJyAgbG9jYWx5ZXNjb25maWcgIC0gVXBkYXRlIGN1
cnJlbnQgY29uZmlnIGNvbnZlcnRpbmcgbG9jYWwgbW9kcyB0byBjb3JlJworCUBlY2hvICAnICBk
ZWZjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGZyb20gQVJDSCBzdXBwbGllZCBk
ZWZjb25maWcnCisJQGVjaG8gICcgIHNhdmVkZWZjb25maWcgICAtIFNhdmUgY3VycmVudCBjb25m
aWcgYXMgLi9kZWZjb25maWcgKG1pbmltYWwgY29uZmlnKScKKwlAZWNobyAgJyAgYWxsbm9jb25m
aWcJICAtIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggbm8n
CisJQGVjaG8gICcgIGFsbHllc2NvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9u
cyBhcmUgYWNjZXB0ZWQgd2l0aCB5ZXMnCisJQGVjaG8gICcgIGFsbG1vZGNvbmZpZwkgIC0gTmV3
IGNvbmZpZyBzZWxlY3RpbmcgbW9kdWxlcyB3aGVuIHBvc3NpYmxlJworCUBlY2hvICAnICBhbGxk
ZWZjb25maWcgICAgLSBOZXcgY29uZmlnIHdpdGggYWxsIHN5bWJvbHMgc2V0IHRvIGRlZmF1bHQn
CisJQGVjaG8gICcgIHJhbmRjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCByYW5kb20gYW5zd2Vy
IHRvIGFsbCBvcHRpb25zJworCUBlY2hvICAnICBsaXN0bmV3Y29uZmlnICAgLSBMaXN0IG5ldyBv
cHRpb25zJworCUBlY2hvICAnICBvbGRkZWZjb25maWcJICAtIFNhbWUgYXMgb2xkY29uZmlnIGJ1
dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRoZWlyJworCUBlY2hvICAnICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0IHZhbHVlIHdpdGhvdXQgcHJvbXB0aW5nJworCUBlY2hvICAnICBrdm1jb25maWcJ
ICAtIEVuYWJsZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGt2bSBndWVzdCBrZXJuZWwgc3VwcG9y
dCcKKwlAZWNobyAgJyAgeGVuY29uZmlnICAgICAgIC0gRW5hYmxlIGFkZGl0aW9uYWwgb3B0aW9u
cyBmb3IgeGVuIGRvbTAgYW5kIGd1ZXN0IGtlcm5lbCBzdXBwb3J0JworCUBlY2hvICAnICB0aW55
Y29uZmlnCSAgLSBDb25maWd1cmUgdGhlIHRpbmllc3QgcG9zc2libGUga2VybmVsJworCUBlY2hv
ICAnICB0ZXN0Y29uZmlnCSAgLSBSdW4gS2NvbmZpZyB1bml0IHRlc3RzIChyZXF1aXJlcyBweXRo
b24zIGFuZCBweXRlc3QpJworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyBvYmplY3QgZmlsZXMg
dXNlZCBieSBhbGwga2NvbmZpZyBmbGF2b3VycworY29tbW9uLW9ianMJOj0gY29uZmRhdGEubyBl
eHByLm8gbGV4ZXIubGV4Lm8gcGFyc2VyLnRhYi5vIHByZXByb2Nlc3MubyBcCisJCSAgIHN5bWJv
bC5vCisKKyQob2JqKS9sZXhlci5sZXgubzogJChvYmopL3BhcnNlci50YWIuaAorSE9TVENGTEFH
U19sZXhlci5sZXgubwk6PSAtSSAkKHNyY3RyZWUpLyQoc3JjKQorSE9TVENGTEFHU19wYXJzZXIu
dGFiLm8JOj0gLUkgJChzcmN0cmVlKS8kKHNyYykKKworIyBjb25mOiBVc2VkIGZvciBkZWZjb25m
aWcsIG9sZGNvbmZpZyBhbmQgcmVsYXRlZCB0YXJnZXRzCitob3N0cHJvZ3MteQkrPSBjb25mCitj
b25mLW9ianMJOj0gY29uZi5vICQoY29tbW9uLW9ianMpCisKKyMgbmNvbmY6IFVzZWQgZm9yIHRo
ZSBuY29uZmlnIHRhcmdldCBiYXNlZCBvbiBuY3Vyc2VzCitob3N0cHJvZ3MteQkrPSBuY29uZgor
bmNvbmYtb2Jqcwk6PSBuY29uZi5vIG5jb25mLmd1aS5vICQoY29tbW9uLW9ianMpCisKK0hPU1RM
RExJQlNfbmNvbmYJPSAkKHNoZWxsIC4gJChvYmopL25jb25mLWNmZyAmJiBlY2hvICQkbGlicykK
K0hPU1RDRkxBR1NfbmNvbmYubwk9ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2ZnICYmIGVjaG8g
JCRjZmxhZ3MpCitIT1NUQ0ZMQUdTX25jb25mLmd1aS5vCT0gJChzaGVsbCAuICQob2JqKS9uY29u
Zi1jZmcgJiYgZWNobyAkJGNmbGFncykKKworJChvYmopL25jb25mLm8gJChvYmopL25jb25mLmd1
aS5vOiAkKG9iaikvbmNvbmYtY2ZnCisKKyMgbWNvbmY6IFVzZWQgZm9yIHRoZSBtZW51Y29uZmln
IHRhcmdldCBiYXNlZCBvbiBseGRpYWxvZworaG9zdHByb2dzLXkJKz0gbWNvbmYKK2x4ZGlhbG9n
CTo9IGNoZWNrbGlzdC5vIGlucHV0Ym94Lm8gbWVudWJveC5vIHRleHRib3gubyB1dGlsLm8geWVz
bm8ubworbWNvbmYtb2Jqcwk6PSBtY29uZi5vICQoYWRkcHJlZml4IGx4ZGlhbG9nLywgJChseGRp
YWxvZykpICQoY29tbW9uLW9ianMpCisKK0hPU1RMRExJQlNfbWNvbmYgPSAkKHNoZWxsIC4gJChv
YmopL21jb25mLWNmZyAmJiBlY2hvICQkbGlicykKKyQoZm9yZWFjaCBmLCBtY29uZi5vICQobHhk
aWFsb2cpLCBcCisgICQoZXZhbCBIT1NUQ0ZMQUdTXyRmID0gJCQoc2hlbGwgLiAkKG9iaikvbWNv
bmYtY2ZnICYmIGVjaG8gJCQkJGNmbGFncykpKQorCiskKG9iaikvbWNvbmYubzogJChvYmopL21j
b25mLWNmZworJChhZGRwcmVmaXggJChvYmopL2x4ZGlhbG9nLywgJChseGRpYWxvZykpOiAkKG9i
aikvbWNvbmYtY2ZnCisKKyMgcWNvbmY6IFVzZWQgZm9yIHRoZSB4Y29uZmlnIHRhcmdldCBiYXNl
ZCBvbiBRdAoraG9zdHByb2dzLXkJKz0gcWNvbmYKK3Fjb25mLWN4eG9ianMJOj0gcWNvbmYubwor
cWNvbmYtb2Jqcwk6PSBpbWFnZXMubyAkKGNvbW1vbi1vYmpzKQorCitIT1NUTERMSUJTX3Fjb25m
CT0gJChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcgJiYgZWNobyAkJGxpYnMpCitIT1NUQ1hYRkxB
R1NfcWNvbmYubwk9ICQoc2hlbGwgLiAkKG9iaikvcWNvbmYtY2ZnICYmIGVjaG8gJCRjZmxhZ3Mp
CisKKyQob2JqKS9xY29uZi5vOiAkKG9iaikvcWNvbmYtY2ZnICQob2JqKS9xY29uZi5tb2MKKwor
cXVpZXRfY21kX21vYyA9IE1PQyAgICAgJEAKKyAgICAgIGNtZF9tb2MgPSAkKHNoZWxsIC4gJChv
YmopL3Fjb25mLWNmZyAmJiBlY2hvICQkbW9jKSAtaSAkPCAtbyAkQAorCiskKG9iaikvJS5tb2M6
ICQoc3JjKS8lLmggJChvYmopL3Fjb25mLWNmZworCSQoY2FsbCBjbWQsbW9jKQorCisjIGdjb25m
OiBVc2VkIGZvciB0aGUgZ2NvbmZpZyB0YXJnZXQgYmFzZWQgb24gR1RLKworaG9zdHByb2dzLXkJ
Kz0gZ2NvbmYKK2djb25mLW9ianMJOj0gZ2NvbmYubyBpbWFnZXMubyAkKGNvbW1vbi1vYmpzKQor
CitIT1NUTERMSUJTX2djb25mICAgID0gJChzaGVsbCAuICQob2JqKS9nY29uZi1jZmcgJiYgZWNo
byAkJGxpYnMpCitIT1NUQ0ZMQUdTX2djb25mLm8gID0gJChzaGVsbCAuICQob2JqKS9nY29uZi1j
ZmcgJiYgZWNobyAkJGNmbGFncykKKworJChvYmopL2djb25mLm86ICQob2JqKS9nY29uZi1jZmcK
KworIyBjaGVjayBpZiBuZWNlc3NhcnkgcGFja2FnZXMgYXJlIGF2YWlsYWJsZSwgYW5kIGNvbmZp
Z3VyZSBidWlsZCBmbGFncworZmlsZWNoa19jb25mX2NmZyA9ICQoQ09ORklHX1NIRUxMKSAkPAor
CiskKG9iaikvJWNvbmYtY2ZnOiAkKHNyYykvJWNvbmYtY2ZnLnNoIEZPUkNFCisJJChjYWxsIGZp
bGVjaGssY29uZl9jZmcpCisKK2NsZWFuLWZpbGVzICs9ICpjb25mLWNmZwpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLmJy
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOWE1Y2YKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcvTWFrZWZpbGUuYnIKQEAgLTAsMCArMSwxNDEgQEAKK3Ny
YyA6PSAuCit0b3Bfc3JjZGlyPS4uLy4uLwordG9wX2J1aWxkZGlyPS4uLy4uLworc3JjdHJlZSA6
PSAuCitvYmogPz0gLgorCisuU1VGRklYRVMgOgorCitpbmNsdWRlIE1ha2VmaWxlLnJ1bGVzCitp
bmNsdWRlIE1ha2VmaWxlCisjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgK
Ky1pbmNsdWRlICQob2JqKS8uZGVwZW5kCisKK19faG9zdHByb2dzIDo9ICQoc29ydCAkKGhvc3Rw
cm9ncy15KSAkKGhvc3Rwcm9ncy1tKSkKK2hvc3QtY3NobGliIDo9ICQoc29ydCAkKGhvc3RsaWJz
LXkpICQoaG9zdGxpYnMtbSkpCitob3N0LWN4eHNobGliIDo9ICQoc29ydCAkKGhvc3RjeHhsaWJz
LXkpICQoaG9zdGN4eGxpYnMtbSkpCisKKyMgQyBjb2RlCisjIEV4ZWN1dGFibGVzIGNvbXBpbGVk
IGZyb20gYSBzaW5nbGUgLmMgZmlsZQoraG9zdC1jc2luZ2xlOj0gJChmb3JlYWNoIG0sJChfX2hv
c3Rwcm9ncyksIFwKKyAgICAgICAgICAgICAkKGlmICQoJChtKS1vYmpzKSQoJChtKS1jeHhvYmpz
KSwsJChtKSkpCitob3N0LWNtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcCisJ
CSAgICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCwkKGlmICQoJChtKS1vYmpzKSwkKG0p
KSkpCisjIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBpbGVkIGZyb20gLmMgZmlsZXMKK2hvc3QtY29i
anMgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktb2JqcykpKQor
CisjIEMrKyBjb2RlCisjIEMrKyBleGVjdXRhYmxlcyBjb21waWxlZCBmcm9tIGF0IGxlYXN0IG9u
ZSAuY2MgZmlsZQorIyBhbmQgemVybyBvciBtb3JlIC5jIGZpbGVzCisgaG9zdC1jeHhtdWx0aSAg
IDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSkp
KQorIyBDKysgT2JqZWN0ICgubykgZmlsZXMgY29tcGlsZWQgZnJvbSAuY2MgZmlsZXMKK2hvc3Qt
Y3h4b2JqcyAgICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWN4eG11bHRpKSwkKCQobSkt
Y3h4b2JqcykpKQorI09iamVjdCAoLm8pIGZpbGVzIHVzZWQgYnkgdGhlIHNoYXJlZCBsaWJhcmll
cworaG9zdC1jc2hvYmpzICAgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3NobGliKSwk
KCQobTouc289LW9ianMpKSkpCitob3N0LWN4eHNob2JqcyAgOj0gJChzb3J0ICQoZm9yZWFjaCBt
LCQoaG9zdC1jeHhzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQorCisKK2hvc3QtY3NpbmdsZSA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jc2luZ2xlKSkKK2hvc3QtY211bHRpICA6PSAk
KGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jbXVsdGkpKQoraG9zdC1jeHhtdWx0aSAgOj0gJChh
ZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4bXVsdGkpKQoraG9zdC1jb2JqcyA6PSAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQoaG9zdC1jb2JqcykpCitob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXgg
JChvYmopLywkKGhvc3QtY3h4b2JqcykpCitmaXhkZXAtb2JqcyA6PSAkKG9iaikvZml4ZGVwLm8K
KworSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQoc3JjKSAtSSQob2JqKSAtRENPTkZJR189XCJcIgor
CitfaG9zdGNfZmxhZ3MgPSAkKEhPU1RDRkxBR1MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NU
Q0ZMQUdTXyQoYmFzZXRhcmdldCkubykKK19ob3N0Y3h4X2ZsYWdzID0gJChIT1NUQ1hYRkxBR1Mp
ICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChiYXNldGFyZ2V0KS5vKQorCito
b3N0Y19mbGFncyAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y19mbGFncykKK2hvc3Rj
eHhfZmxhZ3MgID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoX2hvc3RjeHhfZmxhZ3MpCisKKyQob2Jq
KS9maXhkZXA6ICQoZml4ZGVwLW9ianMpCisJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykg
JChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpICQ8IC1vICRACisKKyQoZml4ZGVwLW9i
anMpOiAkKHNyYykvZml4ZGVwLmMKKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhP
U1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKworIyMjIyMKKyMgQ29t
cGlsZSBwcm9ncmFtcyBvbiB0aGUgaG9zdAorCisjIENyZWF0ZSBleGVjdXRhYmxlIGZyb20gYSBz
aW5nbGUgLmMgZmlsZQorIyBob3N0LWNzaW5nbGUgLT4gRXhlY3V0YWJsZQorcXVpZXRfY21kX2hv
c3QtY3NpbmdsZSAJPSBIT1NUQ0MgICRACisgICAgICBjbWRfaG9zdC1jc2luZ2xlCT0gJChIT1NU
Q0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVExERkxBR1MpIC1vICRAICQ8IFwKKwkJJChIT1NUTERM
SUJTKSAkKEhPU1RMRExJQlNfJChARikpCiskKGhvc3QtY3NpbmdsZSk6ICQob2JqKS8lOiAkKHNy
YykvJS5jICQob2JqKS9maXhkZXAgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1j
c2luZ2xlKQorCisjIExpbmsgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiBsaXN0IG9mIC5vIGZpbGVz
LCBhbGwgcGxhaW4gYworIyBob3N0LWNtdWx0aSAtPiBleGVjdXRhYmxlCitxdWlldF9jbWRfaG9z
dC1jbXVsdGkJPSBIT1NUTEQgICRACisgICAgICBjbWRfaG9zdC1jbXVsdGkJPSAkKEhPU1RDQykg
JChob3N0Y19mbGFncykgLW8gJEAgXAorCQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARikt
b2JqcykpIFwKKwkJCSAgJChIT1NUX0xERkxBR1MpICQoSE9TVExETElCU18kKEBGKSkKKyQoaG9z
dC1jbXVsdGkpOiAkKG9iaikvZml4ZGVwIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsaG9zdC1j
bXVsdGkpCiskKGNhbGwgbXVsdGlfZGVwZW5kLCQoaG9zdC1jbXVsdGkpLCAsIC1vYmpzKQorCisK
KyMgQ3JlYXRlIC5vIGZpbGUgZnJvbSBhIHNpbmdsZSAuYyBmaWxlCisjIGhvc3QtY29ianMgLT4g
Lm8KK3F1aWV0X2NtZF9ob3N0LWNvYmpzCT0gSE9TVENDICAkQAorICAgICAgY21kX2hvc3QtY29i
anMJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgJChIT1NUQ0ZMQUdTXyQoQEYpKVwKKwkJCSAg
LWMgLW8gJEAgJDwKKyQoZmlsdGVyLW91dCAlLnRhYi5vLCAkKGZpbHRlci1vdXQgJS5sZXgubywk
KGhvc3QtY29ianMpKSk6ICQob2JqKS8lLm86XAorCQkkKHNyYykvJS5jICQob2JqKS9maXhkZXAg
Rk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykKKworJChmaWx0ZXIgJS5s
ZXgubywkKGhvc3QtY29ianMpKTogJChvYmopLyUubGV4Lm86ICAkKG9iaikvJS5sZXguYyAkKG9i
aikvZml4ZGVwIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY29ianMpCisKKyQo
ZmlsdGVyICUudGFiLm8sJChob3N0LWNvYmpzKSk6ICQob2JqKS8lLnRhYi5vOiAgJChvYmopLyUu
dGFiLmMgJChvYmopL2ZpeGRlcCBGT1JDRQorCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNv
YmpzKQorCisjIExpbmsgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiBsaXN0IG9mIC5vIGZpbGVzLCBh
IG1peHR1cmUgb2YgLmMgYW5kIC5jYworIyBob3N0LWN4eG11bHRpIC0+IGV4ZWN1dGFibGUKK3F1
aWV0X2NtZF9ob3N0LWN4eG11bHRpCT0gSE9TVExEICAkQAorICAgICAgY21kX2hvc3QtY3h4bXVs
dGkJPSAkKEhPU1RDWFgpICQoSE9TVExERkxBR1MpIC1vICRAXAorCQkJICAkKGZvcmVhY2ggbyxv
YmpzIGN4eG9ianMsXAorCQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktJChvKSkpKSBc
CisJCQkgICQoSE9TVExETElCUykgJChIT1NUTERMSUJTXyQoQEYpKQorJChob3N0LWN4eG11bHRp
KTogRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxob3N0LWN4eG11bHRpKQorJChjYWxsIG11bHRp
X2RlcGVuZCwkKGhvc3QtY3h4bXVsdGkpLCAsIC1vYmpzIC1jeHhvYmpzKQorCisKKyMgQ3JlYXRl
IC5vIGZpbGUgZnJvbSBhIHNpbmdsZSAuY2MgKEMrKykgZmlsZQorcXVpZXRfY21kX2hvc3QtY3h4
b2Jqcwk9IEhPU1RDWFggJEAKKyAgICAgIGNtZF9ob3N0LWN4eG9ianMJPSAkKEhPU1RDWFgpICQo
aG9zdGN4eF9mbGFncykgJChIT1NUQ1hYRkxBR1NfJChARikpIFwKKwkJCSAgLWMgLW8gJEAgJDwK
KyQoaG9zdC1jeHhvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuY2MgRk9SQ0UKKwkkKGNhbGwg
aWZfY2hhbmdlZF9kZXAsaG9zdC1jeHhvYmpzKQorCisjIENvbXBpbGUgLmMgZmlsZSwgY3JlYXRl
IHBvc2l0aW9uIGluZGVwZW5kZW50IC5vIGZpbGUKKyMgaG9zdC1jc2hvYmpzIC0+IC5vCitxdWll
dF9jbWRfaG9zdC1jc2hvYmpzCT0gSE9TVENDICAtZlBJQyAkQAorICAgICAgY21kX2hvc3QtY3No
b2Jqcwk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAtZlBJQyAtYyAtbyAkQCAkPAorJChob3N0
LWNzaG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNFCisJJChjYWxsIGlmX2NoYW5n
ZWRfZGVwLGhvc3QtY3Nob2JqcykKKworIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlv
biBpbmRlcGVuZGVudCAubyBmaWxlCisjIE5vdGUgdGhhdCBwbHVnaW4gY2FwYWJsZSBnY2MgdmVy
c2lvbnMgY2FuIGJlIGVpdGhlciBDIG9yIEMrKyBiYXNlZAorIyB0aGVyZWZvcmUgcGx1Z2luIHNv
dXJjZSBmaWxlcyBoYXZlIHRvIGJlIGNvbXBpbGFibGUgaW4gYm90aCBDIGFuZCBDKysgbW9kZS4K
KyMgVGhpcyBpcyB3aHkgYSBDKysgY29tcGlsZXIgaXMgaW52b2tlZCBvbiBhIC5jIGZpbGUuCisj
IGhvc3QtY3h4c2hvYmpzIC0+IC5vCitxdWlldF9jbWRfaG9zdC1jeHhzaG9ianMJPSBIT1NUQ1hY
IC1mUElDICRACisgICAgICBjbWRfaG9zdC1jeHhzaG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4
eF9mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwKKyQoaG9zdC1jeHhzaG9ianMpOiAkKG9iaikvJS5v
OiAkKHNyYykvJS5jICQob2JqKS9maXhkZXAgRk9SQ0UKKwlAZWNobyB0ZXN0LS0kQAorCSQoY2Fs
bCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eHNob2JqcykKKworY2xlYW46CisJJChRKXJtIC1mICQo
YWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpCitkaXN0Y2xlYW46IGNsZWFuCisJJChR
KXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChseGRpYWxvZykgJChjb25mLW9ianMpICQobWNv
bmYtb2JqcykgJChreGdldHRleHQtb2JqcykgXAorCQkkKGhvc3Rwcm9ncy15KSAkKHFjb25mLWN4
eG9ianMpICQocWNvbmYtb2JqcykgJChnY29uZi1vYmpzKSBcCisJCW1jb25mIC5kZXBlbmQpCisK
K0ZPUkNFOgorLlBIT05ZOiBGT1JDRSBjbGVhbiBkaXN0Y2xlYW4KZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy9NYWtlZmlsZS5ydWxlcyBiL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5ydWxl
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGE5YzgxCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLnJ1bGVzCkBAIC0wLDAgKzEsODQgQEAK
K2tlY2hvIDo9IGVjaG8KK2NvbW1hIDo9ICwKKworCitkb3QtdGFyZ2V0ID0gJChkaXIgJEApLiQo
bm90ZGlyICRAKQorCithbnktcHJlcmVxID0gJChmaWx0ZXItb3V0ICQoUEhPTlkpLCQ/KSAkKGZp
bHRlci1vdXQgJChQSE9OWSkgJCh3aWxkY2FyZCAkXiksJF4pCisKK2FyZy1jaGVjayA9ICQoaWYg
JChzdHJpcCAkKGNtZF8kQCkpLCwxKQorCittYWtlLWNtZCA9ICQoY2FsbCBlc2NzcSwkKHN1YnN0
ICQocG91bmQpLCQkKHBvdW5kKSwkKHN1YnN0ICQkLCQkJCQsJChjbWRfJCgxKSkpKSkKKworIyBw
cmludGluZyBjb21tYW5kcworY21kID0gQHNldCAtZTsgJChlY2hvLWNtZCkgJChjbWRfJCgxKSkK
KworZGVwZmlsZSA9ICQoc3Vic3QgJChjb21tYSksXywkKGRvdC10YXJnZXQpLmQpCitkZXBmbGFn
cyA9IC1XcCQoY29tbWEpLU1EJChjb21tYSkkKGNhbGwgZG90LXRhcmdldCkKKworY21kX2FuZF9m
aXhkZXAgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KwkkKGNtZCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKwkkKG9iaikvZml4ZGVwICQoZGVwZmlsZSkgJEAgJyQobWFrZS1jbWQpJyA+ICQo
ZG90LXRhcmdldCkuY21kO1wKKwlybSAtZiAkKGRlcGZpbGUpCisKK2lmX2NoYW5nZWRfZGVwID0g
JChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwkKGNtZF9hbmRfZml4ZGVw
KSxAOikKKworZGVmaW5lIG11bHRpX2RlcGVuZAorJChmb3JlYWNoIG0sICQobm90ZGlyICQxKSwg
XAorICAgICQoZXZhbCAkKG9iaikvJG06IFwKKyAgICAkKGFkZHByZWZpeCAkKG9iaikvLCAkKGZv
cmVhY2ggcywgJDMsICQoJChtOiUkKHN0cmlwICQyKT0lJChzKSkpKSkpKQorZW5kZWYKKworIyMj
CisjIGZpbGVjaGsgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgY29udGVudCBvZiBhIGdlbmVyYXRl
ZCBmaWxlIGlzIHVwZGF0ZWQuCisjIFNhbXBsZSB1c2FnZToKKyMKKyMgZmlsZWNoa19zYW1wbGUg
PSBlY2hvICQoS0VSTkVMUkVMRUFTRSkKKyMgdmVyc2lvbi5oOiBGT1JDRQorIyAgICQoY2FsbCBm
aWxlY2hrLHNhbXBsZSkKKyMKKyMgVGhlIHJ1bGUgZGVmaW5lZCBzaGFsbCB3cml0ZSB0byBzdGRv
dXQgdGhlIGNvbnRlbnQgb2YgdGhlIG5ldyBmaWxlLgorIyBUaGUgZXhpc3RpbmcgZmlsZSB3aWxs
IGJlIGNvbXBhcmVkIHdpdGggdGhlIG5ldyBvbmUuCisjIC0gSWYgbm8gZmlsZSBleGlzdCBpdCBp
cyBjcmVhdGVkCisjIC0gSWYgdGhlIGNvbnRlbnQgZGlmZmVyIHRoZSBuZXcgZmlsZSBpcyB1c2Vk
CisjIC0gSWYgdGhleSBhcmUgZXF1YWwgbm8gY2hhbmdlLCBhbmQgbm8gdGltZXN0YW1wIHVwZGF0
ZQorIyAtIHN0ZGluIGlzIHBpcGVkIGluIGZyb20gdGhlIGZpcnN0IHByZXJlcXVpc2l0ZSAoJDwp
IHNvIG9uZSBoYXMKKyMgICB0byBzcGVjaWZ5IGEgdmFsaWQgZmlsZSBhcyBmaXJzdCBwcmVyZXF1
aXNpdGUgKG9mdGVuIHRoZSBrYnVpbGQgZmlsZSkKK2RlZmluZSBmaWxlY2hrCisJJChRKXNldCAt
ZTsgICAgICAgICAgICAgXAorCW1rZGlyIC1wICQoZGlyICRAKTsgICAgICAgICBcCisJeyAkKGZp
bGVjaGtfJCgxKSk7IH0gPiAkQC50bXA7ICAgICAgXAorCWlmIFsgLXIgJEAgXSAmJiBjbXAgLXMg
JEAgJEAudG1wOyB0aGVuICBcCisJICAgIHJtIC1mICRALnRtcDsgICAgICAgICAgIFwKKwllbHNl
ICAgICAgICAgICAgICAgICAgICBcCisJICAgICQoa2VjaG8pICcgIFVQRCAgICAgJEAnOyAgICBc
CisJICAgIG12IC1mICRALnRtcCAkQDsgICAgICAgIFwKKwlmaQorZW5kZWYKKworIyBFeGVjdXRl
IGNvbW1hbmQgaWYgY29tbWFuZCBoYXMgY2hhbmdlZCBvciBwcmVyZXF1aXNpdGUocykgYXJlIHVw
ZGF0ZWQuCitpZl9jaGFuZ2VkID0gJChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hl
Y2spKSwJCVwKKwkkKGNtZCk7XAorCXByaW50ZiAnJXNcbicgJ2NtZF8kQCA6PSAkKG1ha2UtY21k
KScgPiAkKGRvdC10YXJnZXQpLmNtZCwgQDopCisKKyMgTEVYCisjIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorcXVpZXRfY21kX2ZsZXggPSBMRVggJEAKK2NtZF9mbGV4ID0gJChMRVgpIC1vJEAgLUwgJDwK
KworJChvYmopLyUubGV4LmM6ICQoc3JjKS8lLmwgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxm
bGV4KQorCisjIFlBQ0MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitxdWlldF9jbWRfYmlzb24gPSBZ
QUNDICAgICRACitjbWRfYmlzb24gPSAkKFlBQ0MpIC1vJEAgLXQgLWwgJDwKKworJChvYmopLyUu
dGFiLmM6ICQoc3JjKS8lLnkgRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxiaXNvbikKKworcXVp
ZXRfY21kX2Jpc29uX2ggPSBZQUNDICAgICRACitjbWRfYmlzb25faCA9ICQoWUFDQykgLW8vZGV2
L251bGwgLS1kZWZpbmVzPSRAIC10IC1sICQ8CisKKyQob2JqKS8lLnRhYi5oOiAkKHNyYykvJS55
IEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsYmlzb25faCkKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy9SRUFETUUudW5pa3JhZnQgYi9zdXBwb3J0L2tjb25maWcvUkVBRE1FLnVuaWtyYWZ0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzdmOWYKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcvUkVBRE1FLnVuaWtyYWZ0CkBAIC0wLDAgKzEsMjEgQEAK
K1RoaXMgaXMgYSBjb3B5IG9mIHRoZSBrY29uZmlnIGNvZGUgaW4gdGhlIGtlcm5lbCAoY3VycmVu
dGx5IHY1LjIpIHR3ZWFrZWQKK3RvIHN1aXQgVW5pa3JhZnQuCisKK1RvIHVwZGF0ZSAoZnJvbSBs
aW51eCk6CisJY3AgLXIgL3Vzci9zcmMvbGludXgvc2NyaXB0cy9rY29uZmlnIHN1cHBvcnQva2Nv
bmZpZy5uZXcKKwljZCBzdXBwb3J0L2tjb25maWcubmV3CisJY3AgLWEgLi4va2NvbmZpZy9wYXRj
aGVzIC4uL2tjb25maWcvUkVBRE1FLnVuaWtyYWZ0IC4uL2tjb25maWcvLmdpdGlnbm9yZSAuCisJ
cXVpbHQgcHVzaCAtYQorCSMgRml4IGFueSBjb25mbGljdAorCWNkIC4uCisJcm0gLXJmIGtjb25m
aWcKKwltdiBrY29uZmlnLm5ldyBrY29uZmlnCisKK1RoZW4gdmVyaWZ5IHRoZSB0b3BsZXZlbCB0
YXJnZXRzIHdvcms6CisJY29uZmlnCisJZGVmY29uZmlnCisJbWVudWNvbmZpZworCXhjb25maWcK
KwlnY29uZmlnCisJb2xkY29uZmlnCisJcWNvbmZpZwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnL2NvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy9jb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZWYzNjc4YwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZp
Zy9jb25mLmMKQEAgLTAsMCArMSw3MDIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxp
bnV4LW02OGsub3JnPgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxpbWl0
cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8
c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1
ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUu
aD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSAibGtjLmgiCisKK3N0YXRpYyB2b2lk
IGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpOworc3RhdGljIHZvaWQgY2hlY2tfY29uZihzdHJ1Y3Qg
bWVudSAqbWVudSk7CisKK2VudW0gaW5wdXRfbW9kZSB7CisJb2xkYXNrY29uZmlnLAorCXN5bmNj
b25maWcsCisJb2xkY29uZmlnLAorCWFsbG5vY29uZmlnLAorCWFsbHllc2NvbmZpZywKKwlhbGxt
b2Rjb25maWcsCisJYWxsZGVmY29uZmlnLAorCXJhbmRjb25maWcsCisJZGVmY29uZmlnLAorCXNh
dmVkZWZjb25maWcsCisJbGlzdG5ld2NvbmZpZywKKwlvbGRkZWZjb25maWcsCit9Oworc3RhdGlj
IGVudW0gaW5wdXRfbW9kZSBpbnB1dF9tb2RlID0gb2xkYXNrY29uZmlnOworCitzdGF0aWMgaW50
IGluZGVudCA9IDE7CitzdGF0aWMgaW50IHR0eV9zdGRpbzsKK3N0YXRpYyBpbnQgc3luY19rY29u
ZmlnOworc3RhdGljIGludCBjb25mX2NudDsKK3N0YXRpYyBjaGFyIGxpbmVbUEFUSF9NQVhdOwor
c3RhdGljIHN0cnVjdCBtZW51ICpyb290RW50cnk7CisKK3N0YXRpYyB2b2lkIHByaW50X2hlbHAo
c3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IGdzdHIgaGVscCA9IHN0cl9uZXcoKTsKKwor
CW1lbnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsKKworCXByaW50ZigiXG4lc1xuIiwgc3Ry
X2dldCgmaGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsKK30KKworc3RhdGljIHZvaWQgc3RyaXAo
Y2hhciAqc3RyKQoreworCWNoYXIgKnAgPSBzdHI7CisJaW50IGw7CisKKwl3aGlsZSAoKGlzc3Bh
Y2UoKnApKSkKKwkJcCsrOworCWwgPSBzdHJsZW4ocCk7CisJaWYgKHAgIT0gc3RyKQorCQltZW1t
b3ZlKHN0ciwgcCwgbCArIDEpOworCWlmICghbCkKKwkJcmV0dXJuOworCXAgPSBzdHIgKyBsIC0g
MTsKKwl3aGlsZSAoKGlzc3BhY2UoKnApKSkKKwkJKnAtLSA9IDA7Cit9CisKKy8qIEhlbHBlciBm
dW5jdGlvbiB0byBmYWNpbGl0YXRlIGZnZXRzKCkgYnkgSmVhbiBTYWNyZW4uICovCitzdGF0aWMg
dm9pZCB4ZmdldHMoY2hhciAqc3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pCit7CisJaWYgKCFmZ2V0
cyhzdHIsIHNpemUsIGluKSkKKwkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIGluIHJlYWRpbmcg
b3IgZW5kIG9mIGZpbGUuXG4iKTsKKworCWlmICghdHR5X3N0ZGlvKQorCQlwcmludGYoIiVzIiwg
c3RyKTsKK30KKworc3RhdGljIGludCBjb25mX2Fza3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwg
Y29uc3QgY2hhciAqZGVmKQoreworCWVudW0gc3ltYm9sX3R5cGUgdHlwZSA9IHN5bV9nZXRfdHlw
ZShzeW0pOworCisJaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkpCisJCXByaW50ZigiKE5FVykgIik7
CisKKwlsaW5lWzBdID0gJ1xuJzsKKwlsaW5lWzFdID0gMDsKKworCWlmICghc3ltX2lzX2NoYW5n
YWJsZShzeW0pKSB7CisJCXByaW50ZigiJXNcbiIsIGRlZik7CisJCWxpbmVbMF0gPSAnXG4nOwor
CQlsaW5lWzFdID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChpbnB1dF9tb2RlKSB7
CisJY2FzZSBvbGRjb25maWc6CisJY2FzZSBzeW5jY29uZmlnOgorCQlpZiAoc3ltX2hhc192YWx1
ZShzeW0pKSB7CisJCQlwcmludGYoIiVzXG4iLCBkZWYpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJ
LyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBvbGRhc2tjb25maWc6CisJCWZmbHVzaChzdGRvdXQp
OworCQl4ZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbik7CisJCXJldHVybiAxOworCWRl
ZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19JTlQ6CisJ
Y2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQlwcmludGYoIiVzXG4iLCBkZWYpOworCQly
ZXR1cm4gMTsKKwlkZWZhdWx0OgorCQk7CisJfQorCXByaW50ZigiJXMiLCBsaW5lKTsKKwlyZXR1
cm4gMTsKK30KKworc3RhdGljIGludCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkKK3sK
KwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJY29uc3QgY2hhciAqZGVmOworCisJ
d2hpbGUgKDEpIHsKKwkJcHJpbnRmKCIlKnMlcyAiLCBpbmRlbnQgLSAxLCAiIiwgbWVudS0+cHJv
bXB0LT50ZXh0KTsKKwkJcHJpbnRmKCIoJXMpICIsIHN5bS0+bmFtZSk7CisJCWRlZiA9IHN5bV9n
ZXRfc3RyaW5nX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKQor
CQkJcHJpbnRmKCJbJXNdICIsIGRlZik7CisJCWlmICghY29uZl9hc2t2YWx1ZShzeW0sIGRlZikp
CisJCQlyZXR1cm4gMDsKKwkJc3dpdGNoIChsaW5lWzBdKSB7CisJCWNhc2UgJ1xuJzoKKwkJCWJy
ZWFrOworCQljYXNlICc/JzoKKwkJCS8qIHByaW50IGhlbHAgKi8KKwkJCWlmIChsaW5lWzFdID09
ICdcbicpIHsKKwkJCQlwcmludF9oZWxwKG1lbnUpOworCQkJCWRlZiA9IE5VTEw7CisJCQkJYnJl
YWs7CisJCQl9CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWxpbmVbc3Ry
bGVuKGxpbmUpLTFdID0gMDsKKwkJCWRlZiA9IGxpbmU7CisJCX0KKwkJaWYgKGRlZiAmJiBzeW1f
c2V0X3N0cmluZ192YWx1ZShzeW0sIGRlZikpCisJCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRp
YyBpbnQgY29uZl9zeW0oc3RydWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3lt
ID0gbWVudS0+c3ltOworCXRyaXN0YXRlIG9sZHZhbCwgbmV3dmFsOworCisJd2hpbGUgKDEpIHsK
KwkJcHJpbnRmKCIlKnMlcyAiLCBpbmRlbnQgLSAxLCAiIiwgbWVudS0+cHJvbXB0LT50ZXh0KTsK
KwkJaWYgKHN5bS0+bmFtZSkKKwkJCXByaW50ZigiKCVzKSAiLCBzeW0tPm5hbWUpOworCQlwdXRj
aGFyKCdbJyk7CisJCW9sZHZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJc3dp
dGNoIChvbGR2YWwpIHsKKwkJY2FzZSBubzoKKwkJCXB1dGNoYXIoJ04nKTsKKwkJCWJyZWFrOwor
CQljYXNlIG1vZDoKKwkJCXB1dGNoYXIoJ00nKTsKKwkJCWJyZWFrOworCQljYXNlIHllczoKKwkJ
CXB1dGNoYXIoJ1knKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChvbGR2YWwgIT0gbm8gJiYgc3lt
X3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKSkKKwkJCXByaW50ZigiL24iKTsKKwkJaWYg
KG9sZHZhbCAhPSBtb2QgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1vZCkpCisJ
CQlwcmludGYoIi9tIik7CisJCWlmIChvbGR2YWwgIT0geWVzICYmIHN5bV90cmlzdGF0ZV93aXRo
aW5fcmFuZ2Uoc3ltLCB5ZXMpKQorCQkJcHJpbnRmKCIveSIpOworCQlwcmludGYoIi8/XSAiKTsK
KwkJaWYgKCFjb25mX2Fza3ZhbHVlKHN5bSwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSkpCisJ
CQlyZXR1cm4gMDsKKwkJc3RyaXAobGluZSk7CisKKwkJc3dpdGNoIChsaW5lWzBdKSB7CisJCWNh
c2UgJ24nOgorCQljYXNlICdOJzoKKwkJCW5ld3ZhbCA9IG5vOworCQkJaWYgKCFsaW5lWzFdIHx8
ICFzdHJjbXAoJmxpbmVbMV0sICJvIikpCisJCQkJYnJlYWs7CisJCQljb250aW51ZTsKKwkJY2Fz
ZSAnbSc6CisJCWNhc2UgJ00nOgorCQkJbmV3dmFsID0gbW9kOworCQkJaWYgKCFsaW5lWzFdKQor
CQkJCWJyZWFrOworCQkJY29udGludWU7CisJCWNhc2UgJ3knOgorCQljYXNlICdZJzoKKwkJCW5l
d3ZhbCA9IHllczsKKwkJCWlmICghbGluZVsxXSB8fCAhc3RyY21wKCZsaW5lWzFdLCAiZXMiKSkK
KwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQljYXNlIDA6CisJCQluZXd2YWwgPSBvbGR2YWw7
CisJCQlicmVhazsKKwkJY2FzZSAnPyc6CisJCQlnb3RvIGhlbHA7CisJCWRlZmF1bHQ6CisJCQlj
b250aW51ZTsKKwkJfQorCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCkp
CisJCQlyZXR1cm4gMDsKK2hlbHA6CisJCXByaW50X2hlbHAobWVudSk7CisJfQorfQorCitzdGF0
aWMgaW50IGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wg
KnN5bSwgKmRlZl9zeW07CisJc3RydWN0IG1lbnUgKmNoaWxkOworCWJvb2wgaXNfbmV3OworCisJ
c3ltID0gbWVudS0+c3ltOworCWlzX25ldyA9ICFzeW1faGFzX3ZhbHVlKHN5bSk7CisJaWYgKHN5
bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQljb25mX3N5bShtZW51KTsKKwkJc3ltX2NhbGNfdmFs
dWUoc3ltKTsKKwkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpIHsKKwkJY2Fz
ZSBubzoKKwkJCXJldHVybiAxOworCQljYXNlIG1vZDoKKwkJCXJldHVybiAwOworCQljYXNlIHll
czoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0YXRl
X3ZhbHVlKHN5bSkpIHsKKwkJY2FzZSBubzoKKwkJCXJldHVybiAxOworCQljYXNlIG1vZDoKKwkJ
CXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBtZW51X2dldF9wcm9tcHQobWVudSkp
OworCQkJcmV0dXJuIDA7CisJCWNhc2UgeWVzOgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwl3aGls
ZSAoMSkgeworCQlpbnQgY250LCBkZWY7CisKKwkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0g
MSwgIiIsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7CisJCWRlZl9zeW0gPSBzeW1fZ2V0X2Nob2lj
ZV92YWx1ZShzeW0pOworCQljbnQgPSBkZWYgPSAwOworCQlsaW5lWzBdID0gMDsKKwkJZm9yIChj
aGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpZiAo
IW1lbnVfaXNfdmlzaWJsZShjaGlsZCkpCisJCQkJY29udGludWU7CisJCQlpZiAoIWNoaWxkLT5z
eW0pIHsKKwkJCQlwcmludGYoIiUqYyAlc1xuIiwgaW5kZW50LCAnKicsIG1lbnVfZ2V0X3Byb21w
dChjaGlsZCkpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY250Kys7CisJCQlpZiAoY2hpbGQt
PnN5bSA9PSBkZWZfc3ltKSB7CisJCQkJZGVmID0gY250OworCQkJCXByaW50ZigiJSpjIiwgaW5k
ZW50LCAnPicpOworCQkJfSBlbHNlCisJCQkJcHJpbnRmKCIlKmMiLCBpbmRlbnQsICcgJyk7CisJ
CQlwcmludGYoIiAlZC4gJXMiLCBjbnQsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQkJaWYg
KGNoaWxkLT5zeW0tPm5hbWUpCisJCQkJcHJpbnRmKCIgKCVzKSIsIGNoaWxkLT5zeW0tPm5hbWUp
OworCQkJaWYgKCFzeW1faGFzX3ZhbHVlKGNoaWxkLT5zeW0pKQorCQkJCXByaW50ZigiIChORVcp
Iik7CisJCQlwcmludGYoIlxuIik7CisJCX0KKwkJcHJpbnRmKCIlKnNjaG9pY2UiLCBpbmRlbnQg
LSAxLCAiIik7CisJCWlmIChjbnQgPT0gMSkgeworCQkJcHJpbnRmKCJbMV06IDFcbiIpOworCQkJ
Z290byBjb25mX2NoaWxkczsKKwkJfQorCQlwcmludGYoIlsxLSVkP106ICIsIGNudCk7CisJCXN3
aXRjaCAoaW5wdXRfbW9kZSkgeworCQljYXNlIG9sZGNvbmZpZzoKKwkJY2FzZSBzeW5jY29uZmln
OgorCQkJaWYgKCFpc19uZXcpIHsKKwkJCQljbnQgPSBkZWY7CisJCQkJcHJpbnRmKCIlZFxuIiwg
Y250KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIG9s
ZGFza2NvbmZpZzoKKwkJCWZmbHVzaChzdGRvdXQpOworCQkJeGZnZXRzKGxpbmUsIHNpemVvZihs
aW5lKSwgc3RkaW4pOworCQkJc3RyaXAobGluZSk7CisJCQlpZiAobGluZVswXSA9PSAnPycpIHsK
KwkJCQlwcmludF9oZWxwKG1lbnUpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCFsaW5l
WzBdKQorCQkJCWNudCA9IGRlZjsKKwkJCWVsc2UgaWYgKGlzZGlnaXQobGluZVswXSkpCisJCQkJ
Y250ID0gYXRvaShsaW5lKTsKKwkJCWVsc2UKKwkJCQljb250aW51ZTsKKwkJCWJyZWFrOworCQlk
ZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCWNvbmZfY2hpbGRzOgorCQlmb3IgKGNoaWxkID0g
bWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJCWlmICghY2hpbGQt
PnN5bSB8fCAhbWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICgh
LS1jbnQpCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFjaGlsZCkKKwkJCWNvbnRpbnVlOworCQlp
ZiAobGluZVswXSAmJiBsaW5lW3N0cmxlbihsaW5lKSAtIDFdID09ICc/JykgeworCQkJcHJpbnRf
aGVscChjaGlsZCk7CisJCQljb250aW51ZTsKKwkJfQorCQlzeW1fc2V0X2Nob2ljZV92YWx1ZShz
eW0sIGNoaWxkLT5zeW0pOworCQlmb3IgKGNoaWxkID0gY2hpbGQtPmxpc3Q7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0KSB7CisJCQlpbmRlbnQgKz0gMjsKKwkJCWNvbmYoY2hpbGQpOworCQkJ
aW5kZW50IC09IDI7CisJCX0KKwkJcmV0dXJuIDE7CisJfQorfQorCitzdGF0aWMgdm9pZCBjb25m
KHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJv
cGVydHkgKnByb3A7CisJc3RydWN0IG1lbnUgKmNoaWxkOworCisJaWYgKCFtZW51X2lzX3Zpc2li
bGUobWVudSkpCisJCXJldHVybjsKKworCXN5bSA9IG1lbnUtPnN5bTsKKwlwcm9wID0gbWVudS0+
cHJvbXB0OworCWlmIChwcm9wKSB7CisJCWNvbnN0IGNoYXIgKnByb21wdDsKKworCQlzd2l0Y2gg
KHByb3AtPnR5cGUpIHsKKwkJY2FzZSBQX01FTlU6CisJCQkvKgorCQkJICogRXhjZXB0IGluIG9s
ZGFza2NvbmZpZyBtb2RlLCB3ZSBzaG93IG9ubHkgbWVudXMgdGhhdAorCQkJICogY29udGFpbiBu
ZXcgc3ltYm9scy4KKwkJCSAqLworCQkJaWYgKGlucHV0X21vZGUgIT0gb2xkYXNrY29uZmlnICYm
IHJvb3RFbnRyeSAhPSBtZW51KSB7CisJCQkJY2hlY2tfY29uZihtZW51KTsKKwkJCQlyZXR1cm47
CisJCQl9CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJY2FzZSBQX0NPTU1FTlQ6CisJCQlwcm9t
cHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJCQlpZiAocHJvbXB0KQorCQkJCXByaW50Zigi
JSpjXG4lKmMgJXNcbiUqY1xuIiwKKwkJCQkJaW5kZW50LCAnKicsCisJCQkJCWluZGVudCwgJyon
LCBwcm9tcHQsCisJCQkJCWluZGVudCwgJyonKTsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCX0K
KworCWlmICghc3ltKQorCQlnb3RvIGNvbmZfY2hpbGRzOworCisJaWYgKHN5bV9pc19jaG9pY2Uo
c3ltKSkgeworCQljb25mX2Nob2ljZShtZW51KTsKKwkJaWYgKHN5bS0+Y3Vyci50cmkgIT0gbW9k
KQorCQkJcmV0dXJuOworCQlnb3RvIGNvbmZfY2hpbGRzOworCX0KKworCXN3aXRjaCAoc3ltLT50
eXBlKSB7CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6CisJCWNv
bmZfc3RyaW5nKG1lbnUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQljb25mX3N5bShtZW51KTsK
KwkJYnJlYWs7CisJfQorCitjb25mX2NoaWxkczoKKwlpZiAoc3ltKQorCQlpbmRlbnQgKz0gMjsK
Kwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpCisJ
CWNvbmYoY2hpbGQpOworCWlmIChzeW0pCisJCWluZGVudCAtPSAyOworfQorCitzdGF0aWMgdm9p
ZCBjaGVja19jb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsK
KwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisKKwlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJ
cmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCWlmIChzeW0gJiYgIXN5bV9oYXNfdmFsdWUo
c3ltKSkgeworCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pIHx8CisJCSAgICAoc3ltX2lzX2No
b2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMpKSB7CisJCQlp
ZiAoaW5wdXRfbW9kZSA9PSBsaXN0bmV3Y29uZmlnKSB7CisJCQkJaWYgKHN5bS0+bmFtZSkgewor
CQkJCQljb25zdCBjaGFyICpzdHI7CisKKwkJCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1NUUklORykg
eworCQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJCQkJCXN0ciA9IHN5
bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKHN0cik7CisJCQkJCQlwcmludGYoIiVzJXM9JXNcbiIsIENP
TkZJR18sIHN5bS0+bmFtZSwgc3RyKTsKKwkJCQkJCWZyZWUoKHZvaWQgKilzdHIpOworCQkJCQl9
IGVsc2UgeworCQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJCQkJCXBy
aW50ZigiJXMlcz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCBzdHIpOworCQkJCQl9CisJCQkJ
fQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoIWNvbmZfY250KyspCisJCQkJCXByaW50ZigiKlxuKiBS
ZXN0YXJ0IGNvbmZpZy4uLlxuKlxuIik7CisJCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRfcGFyZW50
X21lbnUobWVudSk7CisJCQkJY29uZihyb290RW50cnkpOworCQkJfQorCQl9CisJfQorCisJZm9y
IChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQorCQljaGVj
a19jb25mKGNoaWxkKTsKK30KKworc3RhdGljIHN0cnVjdCBvcHRpb24gbG9uZ19vcHRzW10gPSB7
CisJeyJvbGRhc2tjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkYXNrY29u
ZmlnfSwKKwl7Im9sZGNvbmZpZyIsICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBvbGRj
b25maWd9LAorCXsic3luY2NvbmZpZyIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIHN5
bmNjb25maWd9LAorCXsiZGVmY29uZmlnIiwgICAgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEws
IGRlZmNvbmZpZ30sCisJeyJzYXZlZGVmY29uZmlnIiwgICByZXF1aXJlZF9hcmd1bWVudCwgTlVM
TCwgc2F2ZWRlZmNvbmZpZ30sCisJeyJhbGxub2NvbmZpZyIsICAgICBub19hcmd1bWVudCwgICAg
ICAgTlVMTCwgYWxsbm9jb25maWd9LAorCXsiYWxseWVzY29uZmlnIiwgICAgbm9fYXJndW1lbnQs
ICAgICAgIE5VTEwsIGFsbHllc2NvbmZpZ30sCisJeyJhbGxtb2Rjb25maWciLCAgICBub19hcmd1
bWVudCwgICAgICAgTlVMTCwgYWxsbW9kY29uZmlnfSwKKwl7ImFsbGRlZmNvbmZpZyIsICAgIG5v
X2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxkZWZjb25maWd9LAorCXsicmFuZGNvbmZpZyIsICAg
ICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIHJhbmRjb25maWd9LAorCXsibGlzdG5ld2NvbmZp
ZyIsICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGxpc3RuZXdjb25maWd9LAorCXsib2xkZGVm
Y29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGRlZmNvbmZpZ30sCisJe05V
TEwsIDAsIE5VTEwsIDB9Cit9OworCitzdGF0aWMgdm9pZCBjb25mX3VzYWdlKGNvbnN0IGNoYXIg
KnByb2duYW1lKQoreworCisJcHJpbnRmKCJVc2FnZTogJXMgWy1zXSBbb3B0aW9uXSA8a2NvbmZp
Zy1maWxlPlxuIiwgcHJvZ25hbWUpOworCXByaW50ZigiW29wdGlvbl0gaXMgX29uZV8gb2YgdGhl
IGZvbGxvd2luZzpcbiIpOworCXByaW50ZigiICAtLWxpc3RuZXdjb25maWcgICAgICAgICBMaXN0
IG5ldyBvcHRpb25zXG4iKTsKKwlwcmludGYoIiAgLS1vbGRhc2tjb25maWcgICAgICAgICAgU3Rh
cnQgYSBuZXcgY29uZmlndXJhdGlvbiB1c2luZyBhIGxpbmUtb3JpZW50ZWQgcHJvZ3JhbVxuIik7
CisJcHJpbnRmKCIgIC0tb2xkY29uZmlnICAgICAgICAgICAgIFVwZGF0ZSBhIGNvbmZpZ3VyYXRp
b24gdXNpbmcgYSBwcm92aWRlZCAuY29uZmlnIGFzIGJhc2VcbiIpOworCXByaW50ZigiICAtLXN5
bmNjb25maWcgICAgICAgICAgICBTaW1pbGFyIHRvIG9sZGNvbmZpZyBidXQgZ2VuZXJhdGVzIGNv
bmZpZ3VyYXRpb24gaW5cbiIKKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5j
bHVkZS97Z2VuZXJhdGVkLyxjb25maWcvfVxuIik7CisJcHJpbnRmKCIgIC0tb2xkZGVmY29uZmln
ICAgICAgICAgIFNhbWUgYXMgb2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRoZWly
IGRlZmF1bHQgdmFsdWVcbiIpOworCXByaW50ZigiICAtLWRlZmNvbmZpZyA8ZmlsZT4gICAgICBO
ZXcgY29uZmlnIHdpdGggZGVmYXVsdCBkZWZpbmVkIGluIDxmaWxlPlxuIik7CisJcHJpbnRmKCIg
IC0tc2F2ZWRlZmNvbmZpZyA8ZmlsZT4gIFNhdmUgdGhlIG1pbmltYWwgY3VycmVudCBjb25maWd1
cmF0aW9uIHRvIDxmaWxlPlxuIik7CisJcHJpbnRmKCIgIC0tYWxsbm9jb25maWcgICAgICAgICAg
IE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggbm9cbiIpOwor
CXByaW50ZigiICAtLWFsbHllc2NvbmZpZyAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBv
cHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIHllc1xuIik7CisJcHJpbnRmKCIgIC0tYWxsbW9kY29u
ZmlnICAgICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdp
dGggbW9kXG4iKTsKKwlwcmludGYoIiAgLS1hbGxkZWZjb25maWcgICAgICAgICAgTmV3IGNvbmZp
ZyB3aXRoIGFsbCBzeW1ib2xzIHNldCB0byBkZWZhdWx0XG4iKTsKKwlwcmludGYoIiAgLS1yYW5k
Y29uZmlnICAgICAgICAgICAgTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIgdG8gYWxsIG9w
dGlvbnNcbiIpOworfQorCitpbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikKK3sKKwljb25zdCBj
aGFyICpwcm9nbmFtZSA9IGF2WzBdOworCWludCBvcHQ7CisJY29uc3QgY2hhciAqbmFtZSwgKmRl
ZmNvbmZpZ19maWxlID0gTlVMTCAvKiBnY2MgdW5pbml0ICovOworCWludCBub19jb25mX3dyaXRl
ID0gMDsKKworCXR0eV9zdGRpbyA9IGlzYXR0eSgwKSAmJiBpc2F0dHkoMSk7CisKKwl3aGlsZSAo
KG9wdCA9IGdldG9wdF9sb25nKGFjLCBhdiwgInMiLCBsb25nX29wdHMsIE5VTEwpKSAhPSAtMSkg
eworCQlpZiAob3B0ID09ICdzJykgeworCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxM
KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlucHV0X21vZGUgPSAoZW51bSBpbnB1dF9tb2RlKW9w
dDsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSBzeW5jY29uZmlnOgorCQkJLyoKKwkJCSAqIHN5
bmNjb25maWcgaXMgaW52b2tlZCBkdXJpbmcgdGhlIGJ1aWxkIHN0YWdlLgorCQkJICogU3VwcHJl
c3MgZGlzdHJhY3RpbmcgImNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAuLi4iCisJCQkgKi8KKwkJ
CWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7CisJCQlzeW5jX2tjb25maWcgPSAxOwor
CQkJYnJlYWs7CisJCWNhc2UgZGVmY29uZmlnOgorCQljYXNlIHNhdmVkZWZjb25maWc6CisJCQlk
ZWZjb25maWdfZmlsZSA9IG9wdGFyZzsKKwkJCWJyZWFrOworCQljYXNlIHJhbmRjb25maWc6CisJ
CXsKKwkJCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwkJCXVuc2lnbmVkIGludCBzZWVkOworCQkJY2hh
ciAqc2VlZF9lbnY7CisKKwkJCS8qCisJCQkgKiBVc2UgbWljcm9zZWNvbmRzIGRlcml2ZWQgc2Vl
ZCwKKwkJCSAqIGNvbXBlbnNhdGUgZm9yIHN5c3RlbXMgd2hlcmUgaXQgbWF5IGJlIHplcm8KKwkJ
CSAqLworCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCQkJc2VlZCA9ICh1bnNpZ25lZCBp
bnQpKChub3cudHZfc2VjICsgMSkgKiAobm93LnR2X3VzZWMgKyAxKSk7CisKKwkJCXNlZWRfZW52
ID0gZ2V0ZW52KCJLQ09ORklHX1NFRUQiKTsKKwkJCWlmKCBzZWVkX2VudiAmJiAqc2VlZF9lbnYg
KSB7CisJCQkJY2hhciAqZW5kcDsKKwkJCQlpbnQgdG1wID0gKGludClzdHJ0b2woc2VlZF9lbnYs
ICZlbmRwLCAwKTsKKwkJCQlpZiAoKmVuZHAgPT0gJ1wwJykgeworCQkJCQlzZWVkID0gdG1wOwor
CQkJCX0KKwkJCX0KKwkJCWZwcmludGYoIHN0ZGVyciwgIktDT05GSUdfU0VFRD0weCVYXG4iLCBz
ZWVkICk7CisJCQlzcmFuZChzZWVkKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2Ugb2xkYXNrY29u
ZmlnOgorCQljYXNlIG9sZGNvbmZpZzoKKwkJY2FzZSBhbGxub2NvbmZpZzoKKwkJY2FzZSBhbGx5
ZXNjb25maWc6CisJCWNhc2UgYWxsbW9kY29uZmlnOgorCQljYXNlIGFsbGRlZmNvbmZpZzoKKwkJ
Y2FzZSBsaXN0bmV3Y29uZmlnOgorCQljYXNlIG9sZGRlZmNvbmZpZzoKKwkJCWJyZWFrOworCQlj
YXNlICc/JzoKKwkJCWNvbmZfdXNhZ2UocHJvZ25hbWUpOworCQkJZXhpdCgxKTsKKwkJCWJyZWFr
OworCQl9CisJfQorCWlmIChhYyA9PSBvcHRpbmQpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlczog
S2NvbmZpZyBmaWxlIG1pc3NpbmdcbiIsIGF2WzBdKTsKKwkJY29uZl91c2FnZShwcm9nbmFtZSk7
CisJCWV4aXQoMSk7CisJfQorCW5hbWUgPSBhdltvcHRpbmRdOworCWNvbmZfcGFyc2UobmFtZSk7
CisJLy96Y29uZmR1bXAoc3Rkb3V0KTsKKworCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCWNhc2Ug
ZGVmY29uZmlnOgorCQlpZiAoIWRlZmNvbmZpZ19maWxlKQorCQkJZGVmY29uZmlnX2ZpbGUgPSBj
b25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKCk7CisJCWlmIChjb25mX3JlYWQoZGVmY29uZmlnX2Zp
bGUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiKioqXG4iCisJCQkJICAiKioqIENhbid0
IGZpbmQgZGVmYXVsdCBjb25maWd1cmF0aW9uIFwiJXNcIiFcbiIKKwkJCQkgICIqKipcbiIsCisJ
CQkJZGVmY29uZmlnX2ZpbGUpOworCQkJZXhpdCgxKTsKKwkJfQorCQlicmVhazsKKwljYXNlIHNh
dmVkZWZjb25maWc6CisJY2FzZSBzeW5jY29uZmlnOgorCWNhc2Ugb2xkYXNrY29uZmlnOgorCWNh
c2Ugb2xkY29uZmlnOgorCWNhc2UgbGlzdG5ld2NvbmZpZzoKKwljYXNlIG9sZGRlZmNvbmZpZzoK
KwkJY29uZl9yZWFkKE5VTEwpOworCQlicmVhazsKKwljYXNlIGFsbG5vY29uZmlnOgorCWNhc2Ug
YWxseWVzY29uZmlnOgorCWNhc2UgYWxsbW9kY29uZmlnOgorCWNhc2UgYWxsZGVmY29uZmlnOgor
CWNhc2UgcmFuZGNvbmZpZzoKKwkJbmFtZSA9IGdldGVudigiS0NPTkZJR19BTExDT05GSUciKTsK
KwkJaWYgKCFuYW1lKQorCQkJYnJlYWs7CisJCWlmICgoc3RyY21wKG5hbWUsICIiKSAhPSAwKSAm
JiAoc3RyY21wKG5hbWUsICIxIikgIT0gMCkpIHsKKwkJCWlmIChjb25mX3JlYWRfc2ltcGxlKG5h
bWUsIFNfREVGX1VTRVIpKSB7CisJCQkJZnByaW50ZihzdGRlcnIsCisJCQkJCSIqKiogQ2FuJ3Qg
cmVhZCBzZWVkIGNvbmZpZ3VyYXRpb24gXCIlc1wiIVxuIiwKKwkJCQkJbmFtZSk7CisJCQkJZXhp
dCgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCQlj
YXNlIGFsbG5vY29uZmlnOgluYW1lID0gImFsbG5vLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIGFs
bHllc2NvbmZpZzoJbmFtZSA9ICJhbGx5ZXMuY29uZmlnIjsgYnJlYWs7CisJCWNhc2UgYWxsbW9k
Y29uZmlnOgluYW1lID0gImFsbG1vZC5jb25maWciOyBicmVhazsKKwkJY2FzZSBhbGxkZWZjb25m
aWc6CW5hbWUgPSAiYWxsZGVmLmNvbmZpZyI7IGJyZWFrOworCQljYXNlIHJhbmRjb25maWc6CW5h
bWUgPSAiYWxscmFuZG9tLmNvbmZpZyI7IGJyZWFrOworCQlkZWZhdWx0OiBicmVhazsKKwkJfQor
CQlpZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VSKSAmJgorCQkgICAgY29uZl9y
ZWFkX3NpbXBsZSgiYWxsLmNvbmZpZyIsIFNfREVGX1VTRVIpKSB7CisJCQlmcHJpbnRmKHN0ZGVy
ciwKKwkJCQkiKioqIEtDT05GSUdfQUxMQ09ORklHIHNldCwgYnV0IG5vIFwiJXNcIiBvciBcImFs
bC5jb25maWdcIiBmaWxlIGZvdW5kXG4iLAorCQkJCW5hbWUpOworCQkJZXhpdCgxKTsKKwkJfQor
CQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoc3luY19rY29uZmlnKSB7
CisJCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfTk9TSUxFTlRVUERBVEUiKTsKKwkJaWYgKG5hbWUg
JiYgKm5hbWUpIHsKKwkJCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpIHsKKwkJCQlmcHJpbnRmKHN0
ZGVyciwKKwkJCQkJIlxuKioqIFRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVzIGV4cGxpY2l0IHVw
ZGF0ZS5cblxuIik7CisJCQkJcmV0dXJuIDE7CisJCQl9CisJCQlub19jb25mX3dyaXRlID0gMTsK
KwkJfQorCX0KKworCXN3aXRjaCAoaW5wdXRfbW9kZSkgeworCWNhc2UgYWxsbm9jb25maWc6CisJ
CWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfbm8pOworCQlicmVhazsKKwljYXNlIGFsbHll
c2NvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl95ZXMpOworCQlicmVhazsK
KwljYXNlIGFsbG1vZGNvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9tb2Qp
OworCQlicmVhazsKKwljYXNlIGFsbGRlZmNvbmZpZzoKKwkJY29uZl9zZXRfYWxsX25ld19zeW1i
b2xzKGRlZl9kZWZhdWx0KTsKKwkJYnJlYWs7CisJY2FzZSByYW5kY29uZmlnOgorCQkvKiBSZWFs
bHkgbm90aGluZyB0byBkbyBpbiB0aGlzIGxvb3AgKi8KKwkJd2hpbGUgKGNvbmZfc2V0X2FsbF9u
ZXdfc3ltYm9scyhkZWZfcmFuZG9tKSkgOworCQlicmVhazsKKwljYXNlIGRlZmNvbmZpZzoKKwkJ
Y29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9kZWZhdWx0KTsKKwkJYnJlYWs7CisJY2FzZSBz
YXZlZGVmY29uZmlnOgorCQlicmVhazsKKwljYXNlIG9sZGFza2NvbmZpZzoKKwkJcm9vdEVudHJ5
ID0gJnJvb3RtZW51OworCQljb25mKCZyb290bWVudSk7CisJCWlucHV0X21vZGUgPSBvbGRjb25m
aWc7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugb2xkY29uZmlnOgorCWNhc2UgbGlzdG5l
d2NvbmZpZzoKKwljYXNlIHN5bmNjb25maWc6CisJCS8qIFVwZGF0ZSB1bnRpbCBhIGxvb3AgY2F1
c2VkIG5vIG1vcmUgY2hhbmdlcyAqLworCQlkbyB7CisJCQljb25mX2NudCA9IDA7CisJCQljaGVj
a19jb25mKCZyb290bWVudSk7CisJCX0gd2hpbGUgKGNvbmZfY250KTsKKwkJYnJlYWs7CisJY2Fz
ZSBvbGRkZWZjb25maWc6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJaWYgKGlucHV0X21v
ZGUgPT0gc2F2ZWRlZmNvbmZpZykgeworCQlpZiAoY29uZl93cml0ZV9kZWZjb25maWcoZGVmY29u
ZmlnX2ZpbGUpKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIm4qKiogRXJyb3Igd2hpbGUgc2F2aW5n
IGRlZmNvbmZpZyB0bzogJXNcblxuIiwKKwkJCQlkZWZjb25maWdfZmlsZSk7CisJCQlyZXR1cm4g
MTsKKwkJfQorCX0gZWxzZSBpZiAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmlnKSB7CisJCWlm
ICghbm9fY29uZl93cml0ZSAmJiBjb25mX3dyaXRlKE5VTEwpKSB7CisJCQlmcHJpbnRmKHN0ZGVy
ciwgIlxuKioqIEVycm9yIGR1cmluZyB3cml0aW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG4i
KTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQkvKgorCQkgKiBDcmVhdGUgYXV0by5jb25mIGlmIGl0
IGRvZXMgbm90IGV4aXN0LgorCQkgKiBUaGlzIHByZXZlbnRzIEdOVSBNYWtlIDQuMSBvciBvbGRl
ciBmcm9tIGVtaXR0aW5nCisJCSAqICJpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY6IE5vIHN1Y2gg
ZmlsZSBvciBkaXJlY3RvcnkiCisJCSAqIGluIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUKKwkJICoK
KwkJICogc3luY2NvbmZpZyBhbHdheXMgY3JlYXRlcyBvciB1cGRhdGVzIGF1dG8uY29uZiBiZWNh
dXNlIGl0IGlzCisJCSAqIHVzZWQgZHVyaW5nIHRoZSBidWlsZC4KKwkJICovCisJCWlmIChjb25m
X3dyaXRlX2F1dG9jb25mKHN5bmNfa2NvbmZpZykgJiYgc3luY19rY29uZmlnKSB7CisJCQlmcHJp
bnRmKHN0ZGVyciwKKwkJCQkiXG4qKiogRXJyb3IgZHVyaW5nIHN5bmMgb2YgdGhlIGNvbmZpZ3Vy
YXRpb24uXG5cbiIpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcvY29uZmRhdGEuYyBiL3N1cHBvcnQva2NvbmZpZy9jb25m
ZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMDYxNTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvY29uZmRhdGEuYwpAQCAtMCwwICsxLDEzODAg
QEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0
IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICovCisKKyNp
bmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8Y3R5
cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8
bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworLyogcmV0dXJuIHRydWUg
aWYgJ3BhdGgnIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlICovCitzdGF0aWMgYm9vbCBpc19wcmVz
ZW50KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlyZXR1cm4gIXN0
YXQocGF0aCwgJnN0KTsKK30KKworLyogcmV0dXJuIHRydWUgaWYgJ3BhdGgnIGV4aXN0cyBhbmQg
aXQgaXMgYSBkaXJlY3RvcnksIGZhbHNlIG90aGVyd2lzZSAqLworc3RhdGljIGJvb2wgaXNfZGly
KGNvbnN0IGNoYXIgKnBhdGgpCit7CisJc3RydWN0IHN0YXQgc3Q7CisKKwlpZiAoc3RhdChwYXRo
LCAmc3QpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBTX0lTRElSKHN0LnN0X21vZGUpOworfQor
CisvKiByZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSwgZmFs
c2Ugb3RoZXJ3aXNlICovCitzdGF0aWMgYm9vbCBpc19zYW1lKGNvbnN0IGNoYXIgKmZpbGUxLCBj
b25zdCBjaGFyICpmaWxlMikKK3sKKwlpbnQgZmQxLCBmZDI7CisJc3RydWN0IHN0YXQgc3QxLCBz
dDI7CisJdm9pZCAqbWFwMSwgKm1hcDI7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCWZkMSA9IG9w
ZW4oZmlsZTEsIE9fUkRPTkxZKTsKKwlpZiAoZmQxIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWZk
MiA9IG9wZW4oZmlsZTIsIE9fUkRPTkxZKTsKKwlpZiAoZmQyIDwgMCkKKwkJZ290byBjbG9zZTE7
CisKKwlyZXQgPSBmc3RhdChmZDEsICZzdDEpOworCWlmIChyZXQpCisJCWdvdG8gY2xvc2UyOwor
CXJldCA9IGZzdGF0KGZkMiwgJnN0Mik7CisJaWYgKHJldCkKKwkJZ290byBjbG9zZTI7CisKKwlp
ZiAoc3QxLnN0X3NpemUgIT0gc3QyLnN0X3NpemUpCisJCWdvdG8gY2xvc2UyOworCisJbWFwMSA9
IG1tYXAoTlVMTCwgc3QxLnN0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkMSwgMCk7
CisJaWYgKG1hcDEgPT0gTUFQX0ZBSUxFRCkKKwkJZ290byBjbG9zZTI7CisKKwltYXAyID0gbW1h
cChOVUxMLCBzdDIuc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQyLCAwKTsKKwlp
ZiAobWFwMiA9PSBNQVBfRkFJTEVEKQorCQlnb3RvIGNsb3NlMjsKKworCWlmIChiY21wKG1hcDEs
IG1hcDIsIHN0MS5zdF9zaXplKSkKKwkJZ290byBjbG9zZTI7CisKKwlyZXQgPSB0cnVlOworY2xv
c2UyOgorCWNsb3NlKGZkMik7CitjbG9zZTE6CisJY2xvc2UoZmQxKTsKKworCXJldHVybiByZXQ7
Cit9CisKKy8qCisgKiBDcmVhdGUgdGhlIHBhcmVudCBkaXJlY3Rvcnkgb2YgdGhlIGdpdmVuIHBh
dGguCisgKgorICogRm9yIGV4YW1wbGUsIGlmICdpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYnIGlz
IGdpdmVuLCBjcmVhdGUgJ2luY2x1ZGUvY29uZmlnJy4KKyAqLworc3RhdGljIGludCBtYWtlX3Bh
cmVudF9kaXIoY29uc3QgY2hhciAqcGF0aCkKK3sKKwljaGFyIHRtcFtQQVRIX01BWCArIDFdOwor
CWNoYXIgKnA7CisKKwlzdHJuY3B5KHRtcCwgcGF0aCwgc2l6ZW9mKHRtcCkpOworCXRtcFtzaXpl
b2YodG1wKSAtIDFdID0gMDsKKworCS8qIFJlbW92ZSB0aGUgYmFzZSBuYW1lLiBKdXN0IHJldHVy
biBpZiBub3RoaW5nIGlzIGxlZnQgKi8KKwlwID0gc3RycmNocih0bXAsICcvJyk7CisJaWYgKCFw
KQorCQlyZXR1cm4gMDsKKwkqKHAgKyAxKSA9IDA7CisKKwkvKiBKdXN0IGluIGNhc2UgaXQgaXMg
YW4gYWJzb2x1dGUgcGF0aCAqLworCXAgPSB0bXA7CisJd2hpbGUgKCpwID09ICcvJykKKwkJcCsr
OworCisJd2hpbGUgKChwID0gc3RyY2hyKHAsICcvJykpKSB7CisJCSpwID0gMDsKKworCQkvKiBz
a2lwIGlmIHRoZSBkaXJlY3RvcnkgZXhpc3RzICovCisJCWlmICghaXNfZGlyKHRtcCkgJiYgbWtk
aXIodG1wLCAwNzU1KSkKKwkJCXJldHVybiAtMTsKKworCQkqcCA9ICcvJzsKKwkJd2hpbGUgKCpw
ID09ICcvJykKKwkJCXArKzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNoYXIgZGVw
ZmlsZV9wYXRoW1BBVEhfTUFYXTsKK3N0YXRpYyBzaXplX3QgZGVwZmlsZV9wcmVmaXhfbGVuOwor
CisvKiB0b3VjaCBkZXBmaWxlIGZvciBzeW1ib2wgJ25hbWUnICovCitzdGF0aWMgaW50IGNvbmZf
dG91Y2hfZGVwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IGZkLCByZXQ7CisJY29uc3QgY2hh
ciAqczsKKwljaGFyICpkLCBjOworCisJLyogY2hlY2sgb3ZlcmZsb3c6IHByZWZpeCArIG5hbWUg
KyAiLmgiICsgJ1wwJyBtdXN0IGZpdCBpbiBidWZmZXIuICovCisJaWYgKGRlcGZpbGVfcHJlZml4
X2xlbiArIHN0cmxlbihuYW1lKSArIDMgPiBzaXplb2YoZGVwZmlsZV9wYXRoKSkKKwkJcmV0dXJu
IC0xOworCisJZCA9IGRlcGZpbGVfcGF0aCArIGRlcGZpbGVfcHJlZml4X2xlbjsKKwlzID0gbmFt
ZTsKKworCXdoaWxlICgoYyA9ICpzKyspKQorCQkqZCsrID0gKGMgPT0gJ18nKSA/ICcvJyA6IHRv
bG93ZXIoYyk7CisJc3RyY3B5KGQsICIuaCIpOworCisJLyogQXNzdW1lIGRpcmVjdG9yeSBwYXRo
IGFscmVhZHkgZXhpc3RzLiAqLworCWZkID0gb3BlbihkZXBmaWxlX3BhdGgsIE9fV1JPTkxZIHwg
T19DUkVBVCB8IE9fVFJVTkMsIDA2NDQpOworCWlmIChmZCA9PSAtMSkgeworCQlpZiAoZXJybm8g
IT0gRU5PRU5UKQorCQkJcmV0dXJuIC0xOworCisJCXJldCA9IG1ha2VfcGFyZW50X2RpcihkZXBm
aWxlX3BhdGgpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBUcnkgaXQgYWdh
aW4uICovCisJCWZkID0gb3BlbihkZXBmaWxlX3BhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9f
VFJVTkMsIDA2NDQpOworCQlpZiAoZmQgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJfQorCWNsb3Nl
KGZkKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgY29uZl9wcmludGVyIHsKKwl2b2lkICgq
cHJpbnRfc3ltYm9sKShGSUxFICosIHN0cnVjdCBzeW1ib2wgKiwgY29uc3QgY2hhciAqLCB2b2lk
ICopOworCXZvaWQgKCpwcmludF9jb21tZW50KShGSUxFICosIGNvbnN0IGNoYXIgKiwgdm9pZCAq
KTsKK307CisKK3N0YXRpYyB2b2lkIGNvbmZfd2FybmluZyhjb25zdCBjaGFyICpmbXQsIC4uLikK
KwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CisKK3N0YXRpYyB2b2lk
IGNvbmZfbWVzc2FnZShjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9y
bWF0IChwcmludGYsIDEsIDIpKSk7CisKK3N0YXRpYyBjb25zdCBjaGFyICpjb25mX2ZpbGVuYW1l
Oworc3RhdGljIGludCBjb25mX2xpbmVubywgY29uZl93YXJuaW5nczsKKworY29uc3QgY2hhciBj
b25mX2RlZm5hbWVbXSA9ICJhcmNoLyQoQVJDSCkvZGVmY29uZmlnIjsKKworc3RhdGljIHZvaWQg
Y29uZl93YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJdmFf
c3RhcnQoYXAsIGZtdCk7CisJZnByaW50ZihzdGRlcnIsICIlczolZDp3YXJuaW5nOiAiLCBjb25m
X2ZpbGVuYW1lLCBjb25mX2xpbmVubyk7CisJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKKwlm
cHJpbnRmKHN0ZGVyciwgIlxuIik7CisJdmFfZW5kKGFwKTsKKwljb25mX3dhcm5pbmdzKys7Cit9
CisKK3N0YXRpYyB2b2lkIGNvbmZfZGVmYXVsdF9tZXNzYWdlX2NhbGxiYWNrKGNvbnN0IGNoYXIg
KnMpCit7CisJcHJpbnRmKCIjXG4jICIpOworCXByaW50ZigiJXMiLCBzKTsKKwlwcmludGYoIlxu
I1xuIik7Cit9CisKK3N0YXRpYyB2b2lkICgqY29uZl9tZXNzYWdlX2NhbGxiYWNrKShjb25zdCBj
aGFyICpzKSA9CisJY29uZl9kZWZhdWx0X21lc3NhZ2VfY2FsbGJhY2s7Cit2b2lkIGNvbmZfc2V0
X21lc3NhZ2VfY2FsbGJhY2sodm9pZCAoKmZuKShjb25zdCBjaGFyICpzKSkKK3sKKwljb25mX21l
c3NhZ2VfY2FsbGJhY2sgPSBmbjsKK30KKworc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0
IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisJY2hhciBidWZbNDA5Nl07CisKKwlp
ZiAoIWNvbmZfbWVzc2FnZV9jYWxsYmFjaykKKwkJcmV0dXJuOworCisJdmFfc3RhcnQoYXAsIGZt
dCk7CisKKwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CisJY29uZl9tZXNz
YWdlX2NhbGxiYWNrKGJ1Zik7CisJdmFfZW5kKGFwKTsKK30KKworY29uc3QgY2hhciAqY29uZl9n
ZXRfY29uZmlnbmFtZSh2b2lkKQoreworCWNoYXIgKm5hbWUgPSBnZXRlbnYoIktDT05GSUdfQ09O
RklHIik7CisKKwlyZXR1cm4gbmFtZSA/IG5hbWUgOiAiLmNvbmZpZyI7Cit9CisKK3N0YXRpYyBj
b25zdCBjaGFyICpjb25mX2dldF9hdXRvY29uZmlnX25hbWUodm9pZCkKK3sKKwljaGFyICpuYW1l
ID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9DT05GSUciKTsKKworCXJldHVybiBuYW1lID8gbmFtZSA6
ICJpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYiOworfQorCitjaGFyICpjb25mX2dldF9kZWZhdWx0
X2NvbmZuYW1lKHZvaWQpCit7CisJc3RhdGljIGNoYXIgZnVsbG5hbWVbUEFUSF9NQVgrMV07CisJ
Y2hhciAqZW52LCAqbmFtZTsKKworCW5hbWUgPSBleHBhbmRfc3RyaW5nKGNvbmZfZGVmbmFtZSk7
CisJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOworCWlmIChlbnYpIHsKKwkJc25wcmludGYoZnVsbG5h
bWUsIHNpemVvZihmdWxsbmFtZSksICIlcy8lcyIsIGVudiwgbmFtZSk7CisJCWlmIChpc19wcmVz
ZW50KGZ1bGxuYW1lKSkKKwkJCXJldHVybiBmdWxsbmFtZTsKKwl9CisJcmV0dXJuIG5hbWU7Cit9
CisKK3N0YXRpYyBpbnQgY29uZl9zZXRfc3ltX3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBk
ZWYsIGludCBkZWZfZmxhZ3MsIGNoYXIgKnApCit7CisJY2hhciAqcDI7CisKKwlzd2l0Y2ggKHN5
bS0+dHlwZSkgeworCWNhc2UgU19UUklTVEFURToKKwkJaWYgKHBbMF0gPT0gJ20nKSB7CisJCQlz
eW0tPmRlZltkZWZdLnRyaSA9IG1vZDsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOworCQkJ
YnJlYWs7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0JPT0xFQU46CisJCWlm
IChwWzBdID09ICd5JykgeworCQkJc3ltLT5kZWZbZGVmXS50cmkgPSB5ZXM7CisJCQlzeW0tPmZs
YWdzIHw9IGRlZl9mbGFnczsKKwkJCWJyZWFrOworCQl9CisJCWlmIChwWzBdID09ICduJykgewor
CQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsKKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOwor
CQkJYnJlYWs7CisJCX0KKwkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQorCQkJY29uZl93YXJuaW5n
KCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlcyIsCisJCQkJICAgICBwLCBzeW0tPm5h
bWUpOworCQlyZXR1cm4gMTsKKwljYXNlIFNfU1RSSU5HOgorCQlpZiAoKnArKyAhPSAnIicpCisJ
CQlicmVhazsKKwkJZm9yIChwMiA9IHA7IChwMiA9IHN0cnBicmsocDIsICJcIlxcIikpOyBwMisr
KSB7CisJCQlpZiAoKnAyID09ICciJykgeworCQkJCSpwMiA9IDA7CisJCQkJYnJlYWs7CisJCQl9
CisJCQltZW1tb3ZlKHAyLCBwMiArIDEsIHN0cmxlbihwMikpOworCQl9CisJCWlmICghcDIpIHsK
KwkJCWlmIChkZWYgIT0gU19ERUZfQVVUTykKKwkJCQljb25mX3dhcm5pbmcoImludmFsaWQgc3Ry
aW5nIGZvdW5kIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwlj
YXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJCWlmIChzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgcCkp
IHsKKwkJCXN5bS0+ZGVmW2RlZl0udmFsID0geHN0cmR1cChwKTsKKwkJCXN5bS0+ZmxhZ3MgfD0g
ZGVmX2ZsYWdzOworCQl9IGVsc2UgeworCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQorCQkJCWNv
bmZfd2FybmluZygic3ltYm9sIHZhbHVlICclcycgaW52YWxpZCBmb3IgJXMiLAorCQkJCQkgICAg
IHAsIHN5bS0+bmFtZSk7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0Ogor
CQk7CisJfQorCXJldHVybiAwOworfQorCisjZGVmaW5lIExJTkVfR1JPV1RIIDE2CitzdGF0aWMg
aW50IGFkZF9ieXRlKGludCBjLCBjaGFyICoqbGluZXB0ciwgc2l6ZV90IHNsZW4sIHNpemVfdCAq
bikKK3sKKwljaGFyICpubGluZTsKKwlzaXplX3QgbmV3X3NpemUgPSBzbGVuICsgMTsKKwlpZiAo
bmV3X3NpemUgPiAqbikgeworCQluZXdfc2l6ZSArPSBMSU5FX0dST1dUSCAtIDE7CisJCW5ld19z
aXplICo9IDI7CisJCW5saW5lID0geHJlYWxsb2MoKmxpbmVwdHIsIG5ld19zaXplKTsKKwkJaWYg
KCFubGluZSkKKwkJCXJldHVybiAtMTsKKworCQkqbGluZXB0ciA9IG5saW5lOworCQkqbiA9IG5l
d19zaXplOworCX0KKworCSgqbGluZXB0cilbc2xlbl0gPSBjOworCisJcmV0dXJuIDA7Cit9CisK
K3N0YXRpYyBzc2l6ZV90IGNvbXBhdF9nZXRsaW5lKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKm4s
IEZJTEUgKnN0cmVhbSkKK3sKKwljaGFyICpsaW5lID0gKmxpbmVwdHI7CisJc2l6ZV90IHNsZW4g
PSAwOworCisJZm9yICg7OykgeworCQlpbnQgYyA9IGdldGMoc3RyZWFtKTsKKworCQlzd2l0Y2gg
KGMpIHsKKwkJY2FzZSAnXG4nOgorCQkJaWYgKGFkZF9ieXRlKGMsICZsaW5lLCBzbGVuLCBuKSA8
IDApCisJCQkJZ290byBlX291dDsKKwkJCXNsZW4rKzsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLwor
CQljYXNlIEVPRjoKKwkJCWlmIChhZGRfYnl0ZSgnXDAnLCAmbGluZSwgc2xlbiwgbikgPCAwKQor
CQkJCWdvdG8gZV9vdXQ7CisJCQkqbGluZXB0ciA9IGxpbmU7CisJCQlpZiAoc2xlbiA9PSAwKQor
CQkJCXJldHVybiAtMTsKKwkJCXJldHVybiBzbGVuOworCQlkZWZhdWx0OgorCQkJaWYgKGFkZF9i
eXRlKGMsICZsaW5lLCBzbGVuLCBuKSA8IDApCisJCQkJZ290byBlX291dDsKKwkJCXNsZW4rKzsK
KwkJfQorCX0KKworZV9vdXQ6CisJbGluZVtzbGVuLTFdID0gJ1wwJzsKKwkqbGluZXB0ciA9IGxp
bmU7CisJcmV0dXJuIC0xOworfQorCitpbnQgY29uZl9yZWFkX3NpbXBsZShjb25zdCBjaGFyICpu
YW1lLCBpbnQgZGVmKQoreworCUZJTEUgKmluID0gTlVMTDsKKwljaGFyICAgKmxpbmUgPSBOVUxM
OworCXNpemVfdCAgbGluZV9hc2l6ZSA9IDA7CisJY2hhciAqcCwgKnAyOworCXN0cnVjdCBzeW1i
b2wgKnN5bTsKKwlpbnQgaSwgZGVmX2ZsYWdzOworCisJaWYgKG5hbWUpIHsKKwkJaW4gPSB6Y29u
Zl9mb3BlbihuYW1lKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwkJ
bmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsKKwkJaW4gPSB6Y29uZl9mb3BlbihuYW1lKTsK
KwkJaWYgKGluKQorCQkJZ290byBsb2FkOworCQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsKKwkJ
aWYgKCFzeW1fZGVmY29uZmlnX2xpc3QpCisJCQlyZXR1cm4gMTsKKworCQlmb3JfYWxsX2RlZmF1
bHRzKHN5bV9kZWZjb25maWdfbGlzdCwgcHJvcCkgeworCQkJaWYgKGV4cHJfY2FsY192YWx1ZShw
cm9wLT52aXNpYmxlLmV4cHIpID09IG5vIHx8CisJCQkgICAgcHJvcC0+ZXhwci0+dHlwZSAhPSBF
X1NZTUJPTCkKKwkJCQljb250aW51ZTsKKwkJCXN5bV9jYWxjX3ZhbHVlKHByb3AtPmV4cHItPmxl
ZnQuc3ltKTsKKwkJCW5hbWUgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShwcm9wLT5leHByLT5sZWZ0
LnN5bSk7CisJCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOworCQkJaWYgKGluKSB7CisJCQkJY29u
Zl9tZXNzYWdlKCJ1c2luZyBkZWZhdWx0cyBmb3VuZCBpbiAlcyIsCisJCQkJCSBuYW1lKTsKKwkJ
CQlnb3RvIGxvYWQ7CisJCQl9CisJCX0KKwl9CisJaWYgKCFpbikKKwkJcmV0dXJuIDE7CisKK2xv
YWQ6CisJY29uZl9maWxlbmFtZSA9IG5hbWU7CisJY29uZl9saW5lbm8gPSAwOworCWNvbmZfd2Fy
bmluZ3MgPSAwOworCisJZGVmX2ZsYWdzID0gU1lNQk9MX0RFRiA8PCBkZWY7CisJZm9yX2FsbF9z
eW1ib2xzKGksIHN5bSkgeworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9DSEFOR0VEOworCQlzeW0t
PmZsYWdzICY9IH4oZGVmX2ZsYWdzfFNZTUJPTF9WQUxJRCk7CisJCWlmIChzeW1faXNfY2hvaWNl
KHN5bSkpCisJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsKKwkJc3dpdGNoIChzeW0tPnR5cGUp
IHsKKwkJY2FzZSBTX0lOVDoKKwkJY2FzZSBTX0hFWDoKKwkJY2FzZSBTX1NUUklORzoKKwkJCWlm
IChzeW0tPmRlZltkZWZdLnZhbCkKKwkJCQlmcmVlKHN5bS0+ZGVmW2RlZl0udmFsKTsKKwkJCS8q
IGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OgorCQkJc3ltLT5kZWZbZGVmXS52YWwgPSBOVUxM
OworCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsKKwkJfQorCX0KKworCXdoaWxlIChjb21wYXRf
Z2V0bGluZSgmbGluZSwgJmxpbmVfYXNpemUsIGluKSAhPSAtMSkgeworCQljb25mX2xpbmVubysr
OworCQlzeW0gPSBOVUxMOworCQlpZiAobGluZVswXSA9PSAnIycpIHsKKwkJCWlmIChtZW1jbXAo
bGluZSArIDIsIENPTkZJR18sIHN0cmxlbihDT05GSUdfKSkpCisJCQkJY29udGludWU7CisJCQlw
ID0gc3RyY2hyKGxpbmUgKyAyICsgc3RybGVuKENPTkZJR18pLCAnICcpOworCQkJaWYgKCFwKQor
CQkJCWNvbnRpbnVlOworCQkJKnArKyA9IDA7CisJCQlpZiAoc3RybmNtcChwLCAiaXMgbm90IHNl
dCIsIDEwKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChkZWYgPT0gU19ERUZfVVNFUikgeworCQkJ
CXN5bSA9IHN5bV9maW5kKGxpbmUgKyAyICsgc3RybGVuKENPTkZJR18pKTsKKwkJCQlpZiAoIXN5
bSkgeworCQkJCQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsKKwkJCQkJY29udGludWU7CisJCQkJ
fQorCQkJfSBlbHNlIHsKKwkJCQlzeW0gPSBzeW1fbG9va3VwKGxpbmUgKyAyICsgc3RybGVuKENP
TkZJR18pLCAwKTsKKwkJCQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikKKwkJCQkJc3ltLT50
eXBlID0gU19CT09MRUFOOworCQkJfQorCQkJaWYgKHN5bS0+ZmxhZ3MgJiBkZWZfZmxhZ3MpIHsK
KwkJCQljb25mX3dhcm5pbmcoIm92ZXJyaWRlOiByZWFzc2lnbmluZyB0byBzeW1ib2wgJXMiLCBz
eW0tPm5hbWUpOworCQkJfQorCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCWNhc2UgU19CT09M
RUFOOgorCQkJY2FzZSBTX1RSSVNUQVRFOgorCQkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbm87CisJ
CQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ
CTsKKwkJCX0KKwkJfSBlbHNlIGlmIChtZW1jbXAobGluZSwgQ09ORklHXywgc3RybGVuKENPTkZJ
R18pKSA9PSAwKSB7CisJCQlwID0gc3RyY2hyKGxpbmUgKyBzdHJsZW4oQ09ORklHXyksICc9Jyk7
CisJCQlpZiAoIXApCisJCQkJY29udGludWU7CisJCQkqcCsrID0gMDsKKwkJCXAyID0gc3RyY2hy
KHAsICdcbicpOworCQkJaWYgKHAyKSB7CisJCQkJKnAyLS0gPSAwOworCQkJCWlmICgqcDIgPT0g
J1xyJykKKwkJCQkJKnAyID0gMDsKKwkJCX0KKworCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIHN0
cmxlbihDT05GSUdfKSk7CisJCQlpZiAoIXN5bSkgeworCQkJCWlmIChkZWYgPT0gU19ERUZfQVVU
TykKKwkJCQkJLyoKKwkJCQkJICogUmVhZGluZyBmcm9tIGluY2x1ZGUvY29uZmlnL2F1dG8uY29u
ZgorCQkJCQkgKiBJZiBDT05GSUdfRk9PIHByZXZpb3VzbHkgZXhpc3RlZCBpbgorCQkJCQkgKiBh
dXRvLmNvbmYgYnV0IGl0IGlzIG1pc3Npbmcgbm93LAorCQkJCQkgKiBpbmNsdWRlL2NvbmZpZy9m
b28uaCBtdXN0IGJlIHRvdWNoZWQuCisJCQkJCSAqLworCQkJCQljb25mX3RvdWNoX2RlcChsaW5l
ICsgc3RybGVuKENPTkZJR18pKTsKKwkJCQllbHNlCisJCQkJCXN5bV9hZGRfY2hhbmdlX2NvdW50
KDEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlpZiAoc3ltLT5mbGFncyAmIGRlZl9mbGFn
cykgeworCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6IHJlYXNzaWduaW5nIHRvIHN5bWJvbCAl
cyIsIHN5bS0+bmFtZSk7CisJCQl9CisJCQlpZiAoY29uZl9zZXRfc3ltX3ZhbChzeW0sIGRlZiwg
ZGVmX2ZsYWdzLCBwKSkKKwkJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCWlmIChsaW5lWzBd
ICE9ICdccicgJiYgbGluZVswXSAhPSAnXG4nKQorCQkJCWNvbmZfd2FybmluZygidW5leHBlY3Rl
ZCBkYXRhOiAlLipzIiwKKwkJCQkJICAgICAoaW50KXN0cmNzcG4obGluZSwgIlxyXG4iKSwgbGlu
ZSk7CisKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHN5bSAmJiBzeW1faXNfY2hvaWNlX3Zh
bHVlKHN5bSkpIHsKKwkJCXN0cnVjdCBzeW1ib2wgKmNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9n
ZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisJCQlzd2l0Y2ggKHN5bS0+ZGVmW2RlZl0udHJpKSB7CisJ
CQljYXNlIG5vOgorCQkJCWJyZWFrOworCQkJY2FzZSBtb2Q6CisJCQkJaWYgKGNzLT5kZWZbZGVm
XS50cmkgPT0geWVzKSB7CisJCQkJCWNvbmZfd2FybmluZygiJXMgY3JlYXRlcyBpbmNvbnNpc3Rl
bnQgY2hvaWNlIHN0YXRlIiwgc3ltLT5uYW1lKTsKKwkJCQkJY3MtPmZsYWdzICY9IH5kZWZfZmxh
Z3M7CisJCQkJfQorCQkJCWJyZWFrOworCQkJY2FzZSB5ZXM6CisJCQkJaWYgKGNzLT5kZWZbZGVm
XS50cmkgIT0gbm8pCisJCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6ICVzIGNoYW5nZXMgY2hv
aWNlIHN0YXRlIiwgc3ltLT5uYW1lKTsKKwkJCQljcy0+ZGVmW2RlZl0udmFsID0gc3ltOworCQkJ
CWJyZWFrOworCQkJfQorCQkJY3MtPmRlZltkZWZdLnRyaSA9IEVYUFJfT1IoY3MtPmRlZltkZWZd
LnRyaSwgc3ltLT5kZWZbZGVmXS50cmkpOworCQl9CisJfQorCWZyZWUobGluZSk7CisJZmNsb3Nl
KGluKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbmZfcmVhZChjb25zdCBjaGFyICpuYW1lKQor
eworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQgY29uZl91bnNhdmVkID0gMDsKKwlpbnQgaTsK
KworCXN5bV9zZXRfY2hhbmdlX2NvdW50KDApOworCisJaWYgKGNvbmZfcmVhZF9zaW1wbGUobmFt
ZSwgU19ERUZfVVNFUikpIHsKKwkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOworCQlyZXR1
cm4gMTsKKwl9CisKKwlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CisKKwlmb3JfYWxsX3N5
bWJvbHMoaSwgc3ltKSB7CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCWlmIChzeW1faXNfY2hv
aWNlKHN5bSkgfHwgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfTk9fV1JJVEUpKQorCQkJY29udGludWU7
CisJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgJiYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUp
KSB7CisJCQkvKiBjaGVjayB0aGF0IGNhbGN1bGF0ZWQgdmFsdWUgYWdyZWVzIHdpdGggc2F2ZWQg
dmFsdWUgKi8KKwkJCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJCQljYXNlIFNfQk9PTEVBTjoKKwkJ
CWNhc2UgU19UUklTVEFURToKKwkJCQlpZiAoc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpICE9IHN5
bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkKKwkJCQkJYnJlYWs7CisJCQkJaWYgKCFzeW1faXNf
Y2hvaWNlKHN5bSkpCisJCQkJCWNvbnRpbnVlOworCQkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQkJ
ZGVmYXVsdDoKKwkJCQlpZiAoIXN0cmNtcChzeW0tPmN1cnIudmFsLCBzeW0tPmRlZltTX0RFRl9V
U0VSXS52YWwpKQorCQkJCQljb250aW51ZTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIGlm
ICghc3ltX2hhc192YWx1ZShzeW0pICYmICEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkpCisJ
CQkvKiBubyBwcmV2aW91cyB2YWx1ZSBhbmQgbm90IHNhdmVkICovCisJCQljb250aW51ZTsKKwkJ
Y29uZl91bnNhdmVkKys7CisJCS8qIG1heWJlIHByaW50IHZhbHVlIGluIHZlcmJvc2UgbW9kZS4u
LiAqLworCX0KKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJaWYgKHN5bV9oYXNfdmFs
dWUoc3ltKSAmJiAhc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7CisJCQkvKiBSZXNldCB2YWx1
ZXMgb2YgZ2VuZXJhdGVzIHZhbHVlcywgc28gdGhleSdsbCBhcHBlYXIKKwkJCSAqIGFzIG5ldywg
aWYgdGhleSBzaG91bGQgYmVjb21lIHZpc2libGUsIGJ1dCB0aGF0CisJCQkgKiBkb2Vzbid0IHF1
aXRlIHdvcmsgaWYgdGhlIEtjb25maWcgYW5kIHRoZSBzYXZlZAorCQkJICogY29uZmlndXJhdGlv
biBkaXNhZ3JlZS4KKwkJCSAqLworCQkJaWYgKHN5bS0+dmlzaWJsZSA9PSBubyAmJiAhY29uZl91
bnNhdmVkKQorCQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ERUZfVVNFUjsKKwkJCXN3aXRjaCAo
c3ltLT50eXBlKSB7CisJCQljYXNlIFNfU1RSSU5HOgorCQkJY2FzZSBTX0lOVDoKKwkJCWNhc2Ug
U19IRVg6CisJCQkJLyogUmVzZXQgYSBzdHJpbmcgdmFsdWUgaWYgaXQncyBvdXQgb2YgcmFuZ2Ug
Ki8KKwkJCQlpZiAoc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3ltLCBzeW0tPmRlZltTX0RFRl9V
U0VSXS52YWwpKQorCQkJCQlicmVhazsKKwkJCQlzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElE
fFNZTUJPTF9ERUZfVVNFUik7CisJCQkJY29uZl91bnNhdmVkKys7CisJCQkJYnJlYWs7CisJCQlk
ZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJc3ltX2FkZF9jaGFuZ2VfY291
bnQoY29uZl93YXJuaW5ncyB8fCBjb25mX3Vuc2F2ZWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8q
CisgKiBLY29uZmlnIGNvbmZpZ3VyYXRpb24gcHJpbnRlcgorICoKKyAqIFRoaXMgcHJpbnRlciBp
cyB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgcmVzdWx0aW5nIGNvbmZpZ3VyYXRpb24gYWZ0ZXIK
KyAqIGtjb25maWcgaW52b2NhdGlvbiBhbmQgYGRlZmNvbmZpZycgZmlsZXMuIFVuc2V0IHN5bWJv
bCBtaWdodCBiZSBvbWl0dGVkIGJ5CisgKiBwYXNzaW5nIGEgbm9uLU5VTEwgYXJndW1lbnQgdG8g
dGhlIHByaW50ZXIuCisgKgorICovCitzdGF0aWMgdm9pZAora2NvbmZpZ19wcmludF9zeW1ib2wo
RklMRSAqZnAsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFy
ZykKK3sKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBT
X1RSSVNUQVRFOgorCQlpZiAoKnZhbHVlID09ICduJykgeworCQkJYm9vbCBza2lwX3Vuc2V0ID0g
KGFyZyAhPSBOVUxMKTsKKworCQkJaWYgKCFza2lwX3Vuc2V0KQorCQkJCWZwcmludGYoZnAsICIj
ICVzJXMgaXMgbm90IHNldFxuIiwKKwkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lKTsKKwkJCXJl
dHVybjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlmcHJpbnRm
KGZwLCAiJXMlcz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCB2YWx1ZSk7Cit9CisKK3N0YXRp
YyB2b2lkCitrY29uZmlnX3ByaW50X2NvbW1lbnQoRklMRSAqZnAsIGNvbnN0IGNoYXIgKnZhbHVl
LCB2b2lkICphcmcpCit7CisJY29uc3QgY2hhciAqcCA9IHZhbHVlOworCXNpemVfdCBsOworCisJ
Zm9yICg7OykgeworCQlsID0gc3RyY3NwbihwLCAiXG4iKTsKKwkJZnByaW50ZihmcCwgIiMiKTsK
KwkJaWYgKGwpIHsKKwkJCWZwcmludGYoZnAsICIgIik7CisJCQl4ZndyaXRlKHAsIGwsIDEsIGZw
KTsKKwkJCXAgKz0gbDsKKwkJfQorCQlmcHJpbnRmKGZwLCAiXG4iKTsKKwkJaWYgKCpwKysgPT0g
J1wwJykKKwkJCWJyZWFrOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjb25mX3ByaW50ZXIga2Nv
bmZpZ19wcmludGVyX2NiID0KK3sKKwkucHJpbnRfc3ltYm9sID0ga2NvbmZpZ19wcmludF9zeW1i
b2wsCisJLnByaW50X2NvbW1lbnQgPSBrY29uZmlnX3ByaW50X2NvbW1lbnQsCit9OworCisvKgor
ICogSGVhZGVyIHByaW50ZXIKKyAqCisgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVy
YXRpbmcgdGhlIGBpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oJyBmaWxlLgorICovCitzdGF0
aWMgdm9pZAoraGVhZGVyX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3lt
LCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQoreworCisJc3dpdGNoIChzeW0tPnR5cGUp
IHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6IHsKKwkJY29uc3QgY2hhciAq
c3VmZml4ID0gIiI7CisKKwkJc3dpdGNoICgqdmFsdWUpIHsKKwkJY2FzZSAnbic6CisJCQlicmVh
azsKKwkJY2FzZSAnbSc6CisJCQlzdWZmaXggPSAiX01PRFVMRSI7CisJCQkvKiBmYWxsIHRocm91
Z2ggKi8KKwkJZGVmYXVsdDoKKwkJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMlcyAxXG4iLAor
CQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgc3VmZml4KTsKKwkJfQorCQlicmVhazsKKwl9CisJ
Y2FzZSBTX0hFWDogeworCQljb25zdCBjaGFyICpwcmVmaXggPSAiIjsKKworCQlpZiAodmFsdWVb
MF0gIT0gJzAnIHx8ICh2YWx1ZVsxXSAhPSAneCcgJiYgdmFsdWVbMV0gIT0gJ1gnKSkKKwkJCXBy
ZWZpeCA9ICIweCI7CisJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMgJXMlc1xuIiwKKwkJICAg
IENPTkZJR18sIHN5bS0+bmFtZSwgcHJlZml4LCB2YWx1ZSk7CisJCWJyZWFrOworCX0KKwljYXNl
IFNfU1RSSU5HOgorCWNhc2UgU19JTlQ6CisJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMgJXNc
biIsCisJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUsIHZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJYnJlYWs7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitoZWFkZXJfcHJpbnRfY29tbWVu
dChGSUxFICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykKK3sKKwljb25zdCBjaGFy
ICpwID0gdmFsdWU7CisJc2l6ZV90IGw7CisKKwlmcHJpbnRmKGZwLCAiLypcbiIpOworCWZvciAo
OzspIHsKKwkJbCA9IHN0cmNzcG4ocCwgIlxuIik7CisJCWZwcmludGYoZnAsICIgKiIpOworCQlp
ZiAobCkgeworCQkJZnByaW50ZihmcCwgIiAiKTsKKwkJCXhmd3JpdGUocCwgbCwgMSwgZnApOwor
CQkJcCArPSBsOworCQl9CisJCWZwcmludGYoZnAsICJcbiIpOworCQlpZiAoKnArKyA9PSAnXDAn
KQorCQkJYnJlYWs7CisJfQorCWZwcmludGYoZnAsICIgKi9cbiIpOworfQorCitzdGF0aWMgc3Ry
dWN0IGNvbmZfcHJpbnRlciBoZWFkZXJfcHJpbnRlcl9jYiA9Cit7CisJLnByaW50X3N5bWJvbCA9
IGhlYWRlcl9wcmludF9zeW1ib2wsCisJLnByaW50X2NvbW1lbnQgPSBoZWFkZXJfcHJpbnRfY29t
bWVudCwKK307CisKKy8qCisgKiBUcmlzdGF0ZSBwcmludGVyCisgKgorICogVGhpcyBwcmludGVy
IGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBgaW5jbHVkZS9jb25maWcvdHJpc3RhdGUuY29u
ZicgZmlsZS4KKyAqLworc3RhdGljIHZvaWQKK3RyaXN0YXRlX3ByaW50X3N5bWJvbChGSUxFICpm
cCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQorewor
CisJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFICYmICp2YWx1ZSAhPSAnbicpCisJCWZwcmlu
dGYoZnAsICIlcyVzPSVjXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIChjaGFyKXRvdXBwZXIoKnZh
bHVlKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIHRyaXN0YXRlX3ByaW50ZXJf
Y2IgPQoreworCS5wcmludF9zeW1ib2wgPSB0cmlzdGF0ZV9wcmludF9zeW1ib2wsCisJLnByaW50
X2NvbW1lbnQgPSBrY29uZmlnX3ByaW50X2NvbW1lbnQsCit9OworCitzdGF0aWMgdm9pZCBjb25m
X3dyaXRlX3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLAorCQkJICAgICAgc3Ry
dWN0IGNvbmZfcHJpbnRlciAqcHJpbnRlciwgdm9pZCAqcHJpbnRlcl9hcmcpCit7CisJY29uc3Qg
Y2hhciAqc3RyOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfVU5LTk9XTjoKKwkJ
YnJlYWs7CisJY2FzZSBTX1NUUklORzoKKwkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3lt
KTsKKwkJc3RyID0gc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoc3RyKTsKKwkJcHJpbnRlci0+cHJp
bnRfc3ltYm9sKGZwLCBzeW0sIHN0ciwgcHJpbnRlcl9hcmcpOworCQlmcmVlKCh2b2lkICopc3Ry
KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3lt
KTsKKwkJcHJpbnRlci0+cHJpbnRfc3ltYm9sKGZwLCBzeW0sIHN0ciwgcHJpbnRlcl9hcmcpOwor
CX0KK30KKworc3RhdGljIHZvaWQKK2NvbmZfd3JpdGVfaGVhZGluZyhGSUxFICpmcCwgc3RydWN0
IGNvbmZfcHJpbnRlciAqcHJpbnRlciwgdm9pZCAqcHJpbnRlcl9hcmcpCit7CisJY2hhciBidWZb
MjU2XTsKKworCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJICAgICJcbiIKKwkgICAgIkF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7IERPIE5PVCBFRElULlxuIgorCSAgICAiJXNcbiIs
CisJICAgIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisKKwlwcmludGVyLT5wcmludF9jb21tZW50
KGZwLCBidWYsIHByaW50ZXJfYXJnKTsKK30KKworLyoKKyAqIFdyaXRlIG91dCBhIG1pbmltYWwg
Y29uZmlnLgorICogQWxsIHZhbHVlcyB0aGF0IGhhcyBkZWZhdWx0IHZhbHVlcyBhcmUgc2tpcHBl
ZCBhcyB0aGlzIGlzIHJlZHVuZGFudC4KKyAqLworaW50IGNvbmZfd3JpdGVfZGVmY29uZmlnKGNv
bnN0IGNoYXIgKmZpbGVuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVu
dSAqbWVudTsKKwlGSUxFICpvdXQ7CisKKwlvdXQgPSBmb3BlbihmaWxlbmFtZSwgInciKTsKKwlp
ZiAoIW91dCkKKwkJcmV0dXJuIDE7CisKKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7CisKKwkvKiBU
cmF2ZXJzZSBhbGwgbWVudXMgdG8gZmluZCBhbGwgcmVsZXZhbnQgc3ltYm9scyAqLworCW1lbnUg
PSByb290bWVudS5saXN0OworCisJd2hpbGUgKG1lbnUgIT0gTlVMTCkKKwl7CisJCXN5bSA9IG1l
bnUtPnN5bTsKKwkJaWYgKHN5bSA9PSBOVUxMKSB7CisJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZSht
ZW51KSkKKwkJCQlnb3RvIG5leHRfbWVudTsKKwkJfSBlbHNlIGlmICghc3ltX2lzX2Nob2ljZShz
eW0pKSB7CisJCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZ
TUJPTF9XUklURSkpCisJCQkJZ290byBuZXh0X21lbnU7CisJCQlzeW0tPmZsYWdzICY9IH5TWU1C
T0xfV1JJVEU7CisJCQkvKiBJZiB3ZSBjYW5ub3QgY2hhbmdlIHRoZSBzeW1ib2wgLSBza2lwICov
CisJCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQlnb3RvIG5leHRfbWVudTsKKwkJ
CS8qIElmIHN5bWJvbCBlcXVhbHMgdG8gZGVmYXVsdCB2YWx1ZSAtIHNraXAgKi8KKwkJCWlmIChz
dHJjbXAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwgc3ltX2dldF9zdHJpbmdfZGVmYXVsdChz
eW0pKSA9PSAwKQorCQkJCWdvdG8gbmV4dF9tZW51OworCisJCQkvKgorCQkJICogSWYgc3ltYm9s
IGlzIGEgY2hvaWNlIHZhbHVlIGFuZCBlcXVhbHMgdG8gdGhlCisJCQkgKiBkZWZhdWx0IGZvciBh
IGNob2ljZSAtIHNraXAuCisJCQkgKiBCdXQgb25seSBpZiB2YWx1ZSBpcyBib29sIGFuZCBlcXVh
bCB0byAieSIgYW5kCisJCQkgKiBjaG9pY2UgaXMgbm90ICJvcHRpb25hbCIuCisJCQkgKiAoSWYg
Y2hvaWNlIGlzICJvcHRpb25hbCIgdGhlbiBhbGwgdmFsdWVzIGNhbiBiZSAibiIpCisJCQkgKi8K
KwkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsKKwkJCQlzdHJ1Y3Qgc3ltYm9sICpj
czsKKwkJCQlzdHJ1Y3Qgc3ltYm9sICpkczsKKworCQkJCWNzID0gcHJvcF9nZXRfc3ltYm9sKHN5
bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7CisJCQkJZHMgPSBzeW1fY2hvaWNlX2RlZmF1bHQoY3Mp
OworCQkJCWlmICghc3ltX2lzX29wdGlvbmFsKGNzKSAmJiBzeW0gPT0gZHMpIHsKKwkJCQkJaWYg
KChzeW0tPnR5cGUgPT0gU19CT09MRUFOKSAmJgorCQkJCQkgICAgc3ltX2dldF90cmlzdGF0ZV92
YWx1ZShzeW0pID09IHllcykKKwkJCQkJCWdvdG8gbmV4dF9tZW51OworCQkJCX0KKwkJCX0KKwkJ
CWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsK
KwkJfQorbmV4dF9tZW51OgorCQlpZiAobWVudS0+bGlzdCAhPSBOVUxMKSB7CisJCQltZW51ID0g
bWVudS0+bGlzdDsKKwkJfQorCQllbHNlIGlmIChtZW51LT5uZXh0ICE9IE5VTEwpIHsKKwkJCW1l
bnUgPSBtZW51LT5uZXh0OworCQl9IGVsc2UgeworCQkJd2hpbGUgKChtZW51ID0gbWVudS0+cGFy
ZW50KSkgeworCQkJCWlmIChtZW51LT5uZXh0ICE9IE5VTEwpIHsKKwkJCQkJbWVudSA9IG1lbnUt
Pm5leHQ7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlmY2xvc2Uob3V0KTsK
KwlyZXR1cm4gMDsKK30KKworaW50IGNvbmZfd3JpdGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlG
SUxFICpvdXQ7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBtZW51ICptZW51OworCWNv
bnN0IGNoYXIgKnN0cjsKKwljaGFyIHRtcG5hbWVbUEFUSF9NQVggKyAxXSwgb2xkbmFtZVtQQVRI
X01BWCArIDFdOworCWNoYXIgKmVudjsKKwlib29sIG5lZWRfbmV3bGluZSA9IGZhbHNlOworCisJ
aWYgKCFuYW1lKQorCQluYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgpOworCisJaWYgKCEqbmFt
ZSkgeworCQlmcHJpbnRmKHN0ZGVyciwgImNvbmZpZyBuYW1lIGlzIGVtcHR5XG4iKTsKKwkJcmV0
dXJuIC0xOworCX0KKworCWlmIChpc19kaXIobmFtZSkpIHsKKwkJZnByaW50ZihzdGRlcnIsICIl
czogSXMgYSBkaXJlY3RvcnlcbiIsIG5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKG1h
a2VfcGFyZW50X2RpcihuYW1lKSkKKwkJcmV0dXJuIC0xOworCisJZW52ID0gZ2V0ZW52KCJLQ09O
RklHX09WRVJXUklURUNPTkZJRyIpOworCWlmIChlbnYgJiYgKmVudikgeworCQkqdG1wbmFtZSA9
IDA7CisJCW91dCA9IGZvcGVuKG5hbWUsICJ3Iik7CisJfSBlbHNlIHsKKwkJc25wcmludGYodG1w
bmFtZSwgc2l6ZW9mKHRtcG5hbWUpLCAiJXMuJWQudG1wIiwKKwkJCSBuYW1lLCAoaW50KWdldHBp
ZCgpKTsKKwkJb3V0ID0gZm9wZW4odG1wbmFtZSwgInciKTsKKwl9CisJaWYgKCFvdXQpCisJCXJl
dHVybiAxOworCisJY29uZl93cml0ZV9oZWFkaW5nKG91dCwgJmtjb25maWdfcHJpbnRlcl9jYiwg
TlVMTCk7CisKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkKKwkJc3ltX2NsZWFyX2FsbF92YWxp
ZCgpOworCisJbWVudSA9IHJvb3RtZW51Lmxpc3Q7CisJd2hpbGUgKG1lbnUpIHsKKwkJc3ltID0g
bWVudS0+c3ltOworCQlpZiAoIXN5bSkgeworCQkJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkp
CisJCQkJZ290byBuZXh0OworCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCQkJZnBy
aW50ZihvdXQsICJcbiIKKwkJCQkgICAgICIjXG4iCisJCQkJICAgICAiIyAlc1xuIgorCQkJCSAg
ICAgIiNcbiIsIHN0cik7CisJCQluZWVkX25ld2xpbmUgPSBmYWxzZTsKKwkJfSBlbHNlIGlmICgh
KHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFKSkgeworCQkJc3ltX2NhbGNfdmFsdWUoc3ltKTsK
KwkJCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQorCQkJCWdvdG8gbmV4dDsKKwkJ
CWlmIChuZWVkX25ld2xpbmUpIHsKKwkJCQlmcHJpbnRmKG91dCwgIlxuIik7CisJCQkJbmVlZF9u
ZXdsaW5lID0gZmFsc2U7CisJCQl9CisJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisJ
CQljb25mX3dyaXRlX3N5bWJvbChvdXQsIHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7
CisJCX0KKworbmV4dDoKKwkJaWYgKG1lbnUtPmxpc3QpIHsKKwkJCW1lbnUgPSBtZW51LT5saXN0
OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKG1lbnUtPm5leHQpCisJCQltZW51ID0gbWVudS0+
bmV4dDsKKwkJZWxzZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7CisJCQlpZiAoIW1l
bnUtPnN5bSAmJiBtZW51X2lzX3Zpc2libGUobWVudSkgJiYKKwkJCSAgICBtZW51ICE9ICZyb290
bWVudSkgeworCQkJCXN0ciA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCQlmcHJpbnRmKG91
dCwgIiMgZW5kIG9mICVzXG4iLCBzdHIpOworCQkJCW5lZWRfbmV3bGluZSA9IHRydWU7CisJCQl9
CisJCQlpZiAobWVudS0+bmV4dCkgeworCQkJCW1lbnUgPSBtZW51LT5uZXh0OworCQkJCWJyZWFr
OworCQkJfQorCQl9CisJfQorCWZjbG9zZShvdXQpOworCisJaWYgKCp0bXBuYW1lKSB7CisJCWlm
IChpc19zYW1lKG5hbWUsIHRtcG5hbWUpKSB7CisJCQljb25mX21lc3NhZ2UoIk5vIGNoYW5nZSB0
byAlcyIsIG5hbWUpOworCQkJdW5saW5rKHRtcG5hbWUpOworCQkJc3ltX3NldF9jaGFuZ2VfY291
bnQoMCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXNucHJpbnRmKG9sZG5hbWUsIHNpemVvZihv
bGRuYW1lKSwgIiVzLm9sZCIsIG5hbWUpOworCQlyZW5hbWUobmFtZSwgb2xkbmFtZSk7CisJCWlm
IChyZW5hbWUodG1wbmFtZSwgbmFtZSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwljb25mX21lc3Nh
Z2UoImNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAlcyIsIG5hbWUpOworCisJc3ltX3NldF9jaGFu
Z2VfY291bnQoMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogd3JpdGUgYSBkZXBlbmRlbmN5IGZp
bGUgYXMgdXNlZCBieSBrYnVpbGQgdG8gdHJhY2sgZGVwZW5kZW5jaWVzICovCitzdGF0aWMgaW50
IGNvbmZfd3JpdGVfZGVwKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGZpbGUgKmZpbGU7
CisJRklMRSAqb3V0OworCisJb3V0ID0gZm9wZW4oIi4uY29uZmlnLnRtcCIsICJ3Iik7CisJaWYg
KCFvdXQpCisJCXJldHVybiAxOworCWZwcmludGYob3V0LCAiZGVwc19jb25maWcgOj0gXFxcbiIp
OworCWZvciAoZmlsZSA9IGZpbGVfbGlzdDsgZmlsZTsgZmlsZSA9IGZpbGUtPm5leHQpIHsKKwkJ
aWYgKGZpbGUtPm5leHQpCisJCQlmcHJpbnRmKG91dCwgIlx0JXMgXFxcbiIsIGZpbGUtPm5hbWUp
OworCQllbHNlCisJCQlmcHJpbnRmKG91dCwgIlx0JXNcbiIsIGZpbGUtPm5hbWUpOworCX0KKwlm
cHJpbnRmKG91dCwgIlxuJXM6IFxcXG4iCisJCSAgICAgIlx0JChkZXBzX2NvbmZpZylcblxuIiwg
Y29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCkpOworCisJZW52X3dyaXRlX2RlcChvdXQsIGNvbmZf
Z2V0X2F1dG9jb25maWdfbmFtZSgpKTsKKworCWZwcmludGYob3V0LCAiXG4kKGRlcHNfY29uZmln
KTogO1xuIik7CisJZmNsb3NlKG91dCk7CisKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQor
CQlyZXR1cm4gMTsKKwlyZW5hbWUoIi4uY29uZmlnLnRtcCIsIG5hbWUpOworCXJldHVybiAwOwor
fQorCitzdGF0aWMgaW50IGNvbmZfdG91Y2hfZGVwcyh2b2lkKQoreworCWNvbnN0IGNoYXIgKm5h
bWU7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCByZXMsIGk7CisKKwlzdHJjcHkoZGVwZmls
ZV9wYXRoLCAiaW5jbHVkZS9jb25maWcvIik7CisJZGVwZmlsZV9wcmVmaXhfbGVuID0gc3RybGVu
KGRlcGZpbGVfcGF0aCk7CisKKwluYW1lID0gY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCk7CisJ
Y29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9BVVRPKTsKKwlzeW1fY2FsY192YWx1ZShtb2R1
bGVzX3N5bSk7CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCXN5bV9jYWxjX3ZhbHVl
KHN5bSk7CisJCWlmICgoc3ltLT5mbGFncyAmIFNZTUJPTF9OT19XUklURSkgfHwgIXN5bS0+bmFt
ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkgeworCQkJ
aWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfREVGX0FVVE8pIHsKKwkJCQkvKgorCQkJCSAqIHN5bWJv
bCBoYXMgb2xkIGFuZCBuZXcgdmFsdWUsCisJCQkJICogc28gY29tcGFyZSB0aGVtLi4uCisJCQkJ
ICovCisJCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwkJCQljYXNlIFNfQk9PTEVBTjoKKwkJCQlj
YXNlIFNfVFJJU1RBVEU6CisJCQkJCWlmIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0K
KwkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnRyaSkKKwkJCQkJCWNvbnRpbnVlOworCQkJ
CQlicmVhazsKKwkJCQljYXNlIFNfU1RSSU5HOgorCQkJCWNhc2UgU19IRVg6CisJCQkJY2FzZSBT
X0lOVDoKKwkJCQkJaWYgKCFzdHJjbXAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwKKwkJCQkJ
CSAgICBzeW0tPmRlZltTX0RFRl9BVVRPXS52YWwpKQorCQkJCQkJY29udGludWU7CisJCQkJCWJy
ZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJ
LyoKKwkJCQkgKiBJZiB0aGVyZSBpcyBubyBvbGQgdmFsdWUsIG9ubHkgJ25vJyAodW5zZXQpCisJ
CQkJICogaXMgYWxsb3dlZCBhcyBuZXcgdmFsdWUuCisJCQkJICovCisJCQkJc3dpdGNoIChzeW0t
PnR5cGUpIHsKKwkJCQljYXNlIFNfQk9PTEVBTjoKKwkJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJ
CWlmIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0gbm8pCisJCQkJCQljb250aW51ZTsK
KwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9
IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykpCisJCQkvKiBUaGVyZSBp
cyBuZWl0aGVyIGFuIG9sZCBub3IgYSBuZXcgdmFsdWUuICovCisJCQljb250aW51ZTsKKwkJLyog
ZWxzZQorCQkgKglUaGVyZSBpcyBhbiBvbGQgdmFsdWUsIGJ1dCBubyBuZXcgdmFsdWUgKCdubycg
KHVuc2V0KQorCQkgKglpc24ndCBzYXZlZCBpbiBhdXRvLmNvbmYsIHNvIHRoZSBvbGQgdmFsdWUg
aXMgYWx3YXlzCisJCSAqCWRpZmZlcmVudCBmcm9tICdubycpLgorCQkgKi8KKworCQlyZXMgPSBj
b25mX3RvdWNoX2RlcChzeW0tPm5hbWUpOworCQlpZiAocmVzKQorCQkJcmV0dXJuIHJlczsKKwl9
CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNvbmZfd3JpdGVfYXV0b2NvbmYoaW50IG92ZXJ3cml0
ZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBj
aGFyICphdXRvY29uZl9uYW1lID0gY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCk7CisJRklMRSAq
b3V0LCAqdHJpc3RhdGUsICpvdXRfaDsKKwlpbnQgaTsKKworCWlmICghb3ZlcndyaXRlICYmIGlz
X3ByZXNlbnQoYXV0b2NvbmZfbmFtZSkpCisJCXJldHVybiAwOworCisJc3ltX2NsZWFyX2FsbF92
YWxpZCgpOworCisJY29uZl93cml0ZV9kZXAoImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZi5jbWQi
KTsKKworCWlmIChjb25mX3RvdWNoX2RlcHMoKSkKKwkJcmV0dXJuIDE7CisKKwlvdXQgPSBmb3Bl
bigiLnRtcGNvbmZpZyIsICJ3Iik7CisJaWYgKCFvdXQpCisJCXJldHVybiAxOworCisJdHJpc3Rh
dGUgPSBmb3BlbigiLnRtcGNvbmZpZ190cmlzdGF0ZSIsICJ3Iik7CisJaWYgKCF0cmlzdGF0ZSkg
eworCQlmY2xvc2Uob3V0KTsKKwkJcmV0dXJuIDE7CisJfQorCisJb3V0X2ggPSBmb3BlbigiLnRt
cGNvbmZpZy5oIiwgInciKTsKKwlpZiAoIW91dF9oKSB7CisJCWZjbG9zZShvdXQpOworCQlmY2xv
c2UodHJpc3RhdGUpOworCQlyZXR1cm4gMTsKKwl9CisKKwljb25mX3dyaXRlX2hlYWRpbmcob3V0
LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsKKworCWNvbmZfd3JpdGVfaGVhZGluZyh0cmlz
dGF0ZSwgJnRyaXN0YXRlX3ByaW50ZXJfY2IsIE5VTEwpOworCisJY29uZl93cml0ZV9oZWFkaW5n
KG91dF9oLCAmaGVhZGVyX3ByaW50ZXJfY2IsIE5VTEwpOworCisJZm9yX2FsbF9zeW1ib2xzKGks
IHN5bSkgeworCQlzeW1fY2FsY192YWx1ZShzeW0pOworCQlpZiAoIShzeW0tPmZsYWdzICYgU1lN
Qk9MX1dSSVRFKSB8fCAhc3ltLT5uYW1lKQorCQkJY29udGludWU7CisKKwkJLyogd3JpdGUgc3lt
Ym9sIHRvIGF1dG8uY29uZiwgdHJpc3RhdGUgYW5kIGhlYWRlciBmaWxlcyAqLworCQljb25mX3dy
aXRlX3N5bWJvbChvdXQsIHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgKHZvaWQgKikxKTsKKwor
CQljb25mX3dyaXRlX3N5bWJvbCh0cmlzdGF0ZSwgc3ltLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwg
KHZvaWQgKikxKTsKKworCQljb25mX3dyaXRlX3N5bWJvbChvdXRfaCwgc3ltLCAmaGVhZGVyX3By
aW50ZXJfY2IsIE5VTEwpOworCX0KKwlmY2xvc2Uob3V0KTsKKwlmY2xvc2UodHJpc3RhdGUpOwor
CWZjbG9zZShvdXRfaCk7CisKKwluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9IRUFERVIiKTsK
KwlpZiAoIW5hbWUpCisJCW5hbWUgPSAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCI7CisJ
aWYgKG1ha2VfcGFyZW50X2RpcihuYW1lKSkKKwkJcmV0dXJuIDE7CisJaWYgKHJlbmFtZSgiLnRt
cGNvbmZpZy5oIiwgbmFtZSkpCisJCXJldHVybiAxOworCisJbmFtZSA9IGdldGVudigiS0NPTkZJ
R19UUklTVEFURSIpOworCWlmICghbmFtZSkKKwkJbmFtZSA9ICJpbmNsdWRlL2NvbmZpZy90cmlz
dGF0ZS5jb25mIjsKKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQorCQlyZXR1cm4gMTsKKwlp
ZiAocmVuYW1lKCIudG1wY29uZmlnX3RyaXN0YXRlIiwgbmFtZSkpCisJCXJldHVybiAxOworCisJ
aWYgKG1ha2VfcGFyZW50X2RpcihhdXRvY29uZl9uYW1lKSkKKwkJcmV0dXJuIDE7CisJLyoKKwkg
KiBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc3RlcCwga2J1aWxkIGhhcyBhIGRlcGVuZGVuY3kgb24g
YXV0by5jb25mCisJICogYW5kIHRoaXMgbWFya3MgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBv
ZiB0aGUgcHJldmlvdXMgc3RlcHMuCisJICovCisJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZyIsIGF1
dG9jb25mX25hbWUpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50
IHN5bV9jaGFuZ2VfY291bnQ7CitzdGF0aWMgdm9pZCAoKmNvbmZfY2hhbmdlZF9jYWxsYmFjayko
dm9pZCk7CisKK3ZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50KQoreworCWludCBf
c3ltX2NoYW5nZV9jb3VudCA9IHN5bV9jaGFuZ2VfY291bnQ7CisJc3ltX2NoYW5nZV9jb3VudCA9
IGNvdW50OworCWlmIChjb25mX2NoYW5nZWRfY2FsbGJhY2sgJiYKKwkgICAgKGJvb2wpX3N5bV9j
aGFuZ2VfY291bnQgIT0gKGJvb2wpY291bnQpCisJCWNvbmZfY2hhbmdlZF9jYWxsYmFjaygpOwor
fQorCit2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50KGludCBjb3VudCkKK3sKKwlzeW1fc2V0X2No
YW5nZV9jb3VudChjb3VudCArIHN5bV9jaGFuZ2VfY291bnQpOworfQorCitib29sIGNvbmZfZ2V0
X2NoYW5nZWQodm9pZCkKK3sKKwlyZXR1cm4gc3ltX2NoYW5nZV9jb3VudDsKK30KKwordm9pZCBj
b25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKCpmbikodm9pZCkpCit7CisJY29uZl9jaGFu
Z2VkX2NhbGxiYWNrID0gZm47Cit9CisKK3N0YXRpYyBib29sIHJhbmRvbWl6ZV9jaG9pY2VfdmFs
dWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0
cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgZXhwciAqZTsKKwlpbnQgY250LCBkZWY7CisKKwkv
KgorCSAqIElmIGNob2ljZSBpcyBtb2QgdGhlbiB3ZSBtYXkgaGF2ZSBtb3JlIGl0ZW1zIHNlbGVj
dGVkCisJICogYW5kIGlmIG5vIHRoZW4gbm8tb25lLgorCSAqIEluIGJvdGggY2FzZXMgc3RvcC4K
KwkgKi8KKwlpZiAoY3N5bS0+Y3Vyci50cmkgIT0geWVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlw
cm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3ltKTsKKworCS8qIGNvdW50IGVudHJpZXMgaW4g
Y2hvaWNlIGJsb2NrICovCisJY250ID0gMDsKKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3At
PmV4cHIsIGUsIHN5bSkKKwkJY250Kys7CisKKwkvKgorCSAqIGZpbmQgYSByYW5kb20gdmFsdWUg
YW5kIHNldCBpdCB0byB5ZXMsCisJICogc2V0IHRoZSByZXN0IHRvIG5vIHNvIHdlIGhhdmUgb25s
eSBvbmUgc2V0CisJICovCisJZGVmID0gKHJhbmQoKSAlIGNudCk7CisKKwljbnQgPSAwOworCWV4
cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCWlmIChkZWYgPT0g
Y250KyspIHsKKwkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsKKwkJCWNzeW0tPmRl
ZltTX0RFRl9VU0VSXS52YWwgPSBzeW07CisJCX0KKwkJZWxzZSB7CisJCQlzeW0tPmRlZltTX0RF
Rl9VU0VSXS50cmkgPSBubzsKKwkJfQorCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsK
KwkJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwkJc3ltLT5mbGFn
cyAmPSB+U1lNQk9MX1ZBTElEOworCX0KKwljc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7
CisJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwljc3ltLT5mbGFn
cyAmPSB+KFNZTUJPTF9WQUxJRCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBzZXRfYWxs
X2Nob2ljZV92YWx1ZXMoc3RydWN0IHN5bWJvbCAqY3N5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBleHByICplOworCisJcHJvcCA9
IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3N5bSk7CisKKwkvKgorCSAqIFNldCBhbGwgbm9uLWFzc2lu
Z2VkIGNob2ljZSB2YWx1ZXMgdG8gbm8KKwkgKi8KKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHBy
b3AtPmV4cHIsIGUsIHN5bSkgeworCQlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkKKwkJCXN5bS0+
ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOworCX0KKwljc3ltLT5mbGFncyB8PSBTWU1CT0xfREVG
X1VTRVI7CisJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8KKwljc3lt
LT5mbGFncyAmPSB+KFNZTUJPTF9WQUxJRCB8IFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVT
KTsKK30KKworYm9vbCBjb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZW51bSBjb25mX2RlZl9tb2Rl
IG1vZGUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqY3N5bTsKKwlpbnQgaSwgY250LCBwYnks
IHB0eSwgcHRtOwkvKiBwYnk6IHByb2JhYmlsaXR5IG9mIGJvb2wgICAgID0geQorCQkJCQkgKiBw
dHk6IHByb2JhYmlsaXR5IG9mIHRyaXN0YXRlID0geQorCQkJCQkgKiBwdG06IHByb2JhYmlsaXR5
IG9mIHRyaXN0YXRlID0gbQorCQkJCQkgKi8KKworCXBieSA9IDUwOyBwdHkgPSBwdG0gPSAzMzsg
LyogY2FuJ3QgZ28gYXMgdGhlIGRlZmF1bHQgaW4gc3dpdGNoLWNhc2UKKwkJCQkgICAqIGJlbG93
LCBvdGhlcndpc2UgZ2NjIHdoaW5lcyBhYm91dAorCQkJCSAgICogLVdtYXliZS11bmluaXRpYWxp
emVkICovCisJaWYgKG1vZGUgPT0gZGVmX3JhbmRvbSkgeworCQlpbnQgbiwgcFszXTsKKwkJY2hh
ciAqZW52ID0gZ2V0ZW52KCJLQ09ORklHX1BST0JBQklMSVRZIik7CisJCW4gPSAwOworCQl3aGls
ZSggZW52ICYmICplbnYgKSB7CisJCQljaGFyICplbmRwOworCQkJaW50IHRtcCA9IHN0cnRvbCgg
ZW52LCAmZW5kcCwgMTAgKTsKKwkJCWlmKCB0bXAgPj0gMCAmJiB0bXAgPD0gMTAwICkgeworCQkJ
CXBbbisrXSA9IHRtcDsKKwkJCX0gZWxzZSB7CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQkJcGVy
cm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIgKTsKKwkJCQlleGl0KCAxICk7CisJCQl9CisJCQll
bnYgPSAoKmVuZHAgPT0gJzonKSA/IGVuZHArMSA6IGVuZHA7CisJCQlpZiggbiA+PTMgKSB7CisJ
CQkJYnJlYWs7CisJCQl9CisJCX0KKwkJc3dpdGNoKCBuICkgeworCQljYXNlIDE6CisJCQlwYnkg
PSBwWzBdOyBwdG0gPSBwYnkvMjsgcHR5ID0gcGJ5LXB0bTsKKwkJCWJyZWFrOworCQljYXNlIDI6
CisJCQlwdHkgPSBwWzBdOyBwdG0gPSBwWzFdOyBwYnkgPSBwdHkgKyBwdG07CisJCQlicmVhazsK
KwkJY2FzZSAzOgorCQkJcGJ5ID0gcFswXTsgcHR5ID0gcFsxXTsgcHRtID0gcFsyXTsKKwkJCWJy
ZWFrOworCQl9CisKKwkJaWYoIHB0eStwdG0gPiAxMDAgKSB7CisJCQllcnJubyA9IEVSQU5HRTsK
KwkJCXBlcnJvciggIktDT05GSUdfUFJPQkFCSUxJVFkiICk7CisJCQlleGl0KCAxICk7CisJCX0K
Kwl9CisJYm9vbCBoYXNfY2hhbmdlZCA9IGZhbHNlOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5
bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pIHx8IChzeW0tPmZsYWdzICYgU1lNQk9MX1ZB
TElEKSkKKwkJCWNvbnRpbnVlOworCQlzd2l0Y2ggKHN5bV9nZXRfdHlwZShzeW0pKSB7CisJCWNh
c2UgU19CT09MRUFOOgorCQljYXNlIFNfVFJJU1RBVEU6CisJCQloYXNfY2hhbmdlZCA9IHRydWU7
CisJCQlzd2l0Y2ggKG1vZGUpIHsKKwkJCWNhc2UgZGVmX3llczoKKwkJCQlzeW0tPmRlZltTX0RF
Rl9VU0VSXS50cmkgPSB5ZXM7CisJCQkJYnJlYWs7CisJCQljYXNlIGRlZl9tb2Q6CisJCQkJc3lt
LT5kZWZbU19ERUZfVVNFUl0udHJpID0gbW9kOworCQkJCWJyZWFrOworCQkJY2FzZSBkZWZfbm86
CisJCQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQUxMTk9DT05GSUdfWSkKKwkJCQkJc3ltLT5k
ZWZbU19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCWVsc2UKKwkJCQkJc3ltLT5kZWZbU19ERUZf
VVNFUl0udHJpID0gbm87CisJCQkJYnJlYWs7CisJCQljYXNlIGRlZl9yYW5kb206CisJCQkJc3lt
LT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87CisJCQkJY250ID0gcmFuZCgpICUgMTAwOworCQkJ
CWlmIChzeW0tPnR5cGUgPT0gU19UUklTVEFURSkgeworCQkJCQlpZiAoY250IDwgcHR5KQorCQkJ
CQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOworCQkJCQllbHNlIGlmIChjbnQgPCAo
cHR5K3B0bSkpCisJCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7CisJCQkJfSBl
bHNlIGlmIChjbnQgPCBwYnkpCisJCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsK
KwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoIShz
eW1faXNfY2hvaWNlKHN5bSkgJiYgbW9kZSA9PSBkZWZfcmFuZG9tKSkKKwkJCQlzeW0tPmZsYWdz
IHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ
CX0KKworCX0KKworCXN5bV9jbGVhcl9hbGxfdmFsaWQoKTsKKworCS8qCisJICogV2UgaGF2ZSBk
aWZmZXJlbnQgdHlwZSBvZiBjaG9pY2UgYmxvY2tzLgorCSAqIElmIGN1cnIudHJpIGVxdWFscyB0
byBtb2QgdGhlbiB3ZSBjYW4gc2VsZWN0IHNldmVyYWwKKwkgKiBjaG9pY2Ugc3ltYm9scyBpbiBv
bmUgYmxvY2suCisJICogSW4gdGhpcyBjYXNlIHdlIGRvIG5vdGhpbmcuCisJICogSWYgY3Vyci50
cmkgZXF1YWxzIHllcyB0aGVuIG9ubHkgb25lIHN5bWJvbCBjYW4gYmUKKwkgKiBzZWxlY3RlZCBp
biBhIGNob2ljZSBibG9jayBhbmQgd2Ugc2V0IGl0IHRvIHllcywKKwkgKiBhbmQgdGhlIHJlc3Qg
dG8gbm8uCisJICovCisJaWYgKG1vZGUgIT0gZGVmX3JhbmRvbSkgeworCQlmb3JfYWxsX3N5bWJv
bHMoaSwgY3N5bSkgeworCQkJaWYgKChzeW1faXNfY2hvaWNlKGNzeW0pICYmICFzeW1faGFzX3Zh
bHVlKGNzeW0pKSB8fAorCQkJICAgIHN5bV9pc19jaG9pY2VfdmFsdWUoY3N5bSkpCisJCQkJY3N5
bS0+ZmxhZ3MgfD0gU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVM7CisJCX0KKwl9CisKKwlm
b3JfYWxsX3N5bWJvbHMoaSwgY3N5bSkgeworCQlpZiAoc3ltX2hhc192YWx1ZShjc3ltKSB8fCAh
c3ltX2lzX2Nob2ljZShjc3ltKSkKKwkJCWNvbnRpbnVlOworCisJCXN5bV9jYWxjX3ZhbHVlKGNz
eW0pOworCQlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKQorCQkJaGFzX2NoYW5nZWQgPSByYW5kb21p
emVfY2hvaWNlX3ZhbHVlcyhjc3ltKTsKKwkJZWxzZSB7CisJCQlzZXRfYWxsX2Nob2ljZV92YWx1
ZXMoY3N5bSk7CisJCQloYXNfY2hhbmdlZCA9IHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gaGFz
X2NoYW5nZWQ7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvZXhwci5jIGIvc3VwcG9y
dC9rY29uZmlnL2V4cHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Zm
ZmYzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL2V4cHIuYwpAQCAtMCwwICsx
LDEyOTcgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICov
CisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1
ZGUgImxrYy5oIgorCisjZGVmaW5lIERFQlVHX0VYUFIJMAorCitzdGF0aWMgaW50IGV4cHJfZXEo
c3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOworc3RhdGljIHN0cnVjdCBleHByICpl
eHByX2VsaW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSk7CisKK3N0cnVjdCBleHByICpleHByX2Fs
bG9jX3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IGV4cHIgKmUgPSB4Y2Fs
bG9jKDEsIHNpemVvZigqZSkpOworCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwllLT5sZWZ0LnN5bSA9
IHN5bTsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfb25lKGVudW0g
ZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICpjZSkKK3sKKwlzdHJ1Y3QgZXhwciAqZSA9IHhj
YWxsb2MoMSwgc2l6ZW9mKCplKSk7CisJZS0+dHlwZSA9IHR5cGU7CisJZS0+bGVmdC5leHByID0g
Y2U7CisJcmV0dXJuIGU7Cit9CisKK3N0cnVjdCBleHByICpleHByX2FsbG9jX3R3byhlbnVtIGV4
cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikKK3sKKwlzdHJ1
Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7CisJZS0+dHlwZSA9IHR5cGU7CisJ
ZS0+bGVmdC5leHByID0gZTE7CisJZS0+cmlnaHQuZXhwciA9IGUyOworCXJldHVybiBlOworfQor
CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19jb21wKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVj
dCBzeW1ib2wgKnMxLCBzdHJ1Y3Qgc3ltYm9sICpzMikKK3sKKwlzdHJ1Y3QgZXhwciAqZSA9IHhj
YWxsb2MoMSwgc2l6ZW9mKCplKSk7CisJZS0+dHlwZSA9IHR5cGU7CisJZS0+bGVmdC5zeW0gPSBz
MTsKKwllLT5yaWdodC5zeW0gPSBzMjsKKwlyZXR1cm4gZTsKK30KKworc3RydWN0IGV4cHIgKmV4
cHJfYWxsb2NfYW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQoreworCWlmICgh
ZTEpCisJCXJldHVybiBlMjsKKwlyZXR1cm4gZTIgPyBleHByX2FsbG9jX3R3byhFX0FORCwgZTEs
IGUyKSA6IGUxOworfQorCitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihzdHJ1Y3QgZXhwciAq
ZTEsIHN0cnVjdCBleHByICplMikKK3sKKwlpZiAoIWUxKQorCQlyZXR1cm4gZTI7CisJcmV0dXJu
IGUyID8gZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKSA6IGUxOworfQorCitzdHJ1Y3QgZXhw
ciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBleHByICpvcmcpCit7CisJc3RydWN0IGV4cHIgKmU7
CisKKwlpZiAoIW9yZykKKwkJcmV0dXJuIE5VTEw7CisKKwllID0geG1hbGxvYyhzaXplb2YoKm9y
ZykpOworCW1lbWNweShlLCBvcmcsIHNpemVvZigqb3JnKSk7CisJc3dpdGNoIChvcmctPnR5cGUp
IHsKKwljYXNlIEVfU1lNQk9MOgorCQllLT5sZWZ0ID0gb3JnLT5sZWZ0OworCQlicmVhazsKKwlj
YXNlIEVfTk9UOgorCQllLT5sZWZ0LmV4cHIgPSBleHByX2NvcHkob3JnLT5sZWZ0LmV4cHIpOwor
CQlicmVhazsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgorCWNh
c2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5FUVVBTDoKKwkJZS0+bGVmdC5zeW0g
PSBvcmctPmxlZnQuc3ltOworCQllLT5yaWdodC5zeW0gPSBvcmctPnJpZ2h0LnN5bTsKKwkJYnJl
YWs7CisJY2FzZSBFX0FORDoKKwljYXNlIEVfT1I6CisJY2FzZSBFX0xJU1Q6CisJCWUtPmxlZnQu
ZXhwciA9IGV4cHJfY29weShvcmctPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHBy
X2NvcHkob3JnLT5yaWdodC5leHByKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnByaW50Zihz
dGRlcnIsICJjYW4ndCBjb3B5IHR5cGUgJWRcbiIsIGUtPnR5cGUpOworCQlmcmVlKGUpOworCQll
ID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGU7Cit9CisKK3ZvaWQgZXhwcl9mcmVl
KHN0cnVjdCBleHByICplKQoreworCWlmICghZSkKKwkJcmV0dXJuOworCisJc3dpdGNoIChlLT50
eXBlKSB7CisJY2FzZSBFX1NZTUJPTDoKKwkJYnJlYWs7CisJY2FzZSBFX05PVDoKKwkJZXhwcl9m
cmVlKGUtPmxlZnQuZXhwcik7CisJCWJyZWFrOworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfR0VR
OgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRIOgorCWNhc2UgRV9VTkVR
VUFMOgorCQlicmVhazsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJZXhwcl9mcmVlKGUt
PmxlZnQuZXhwcik7CisJCWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsKKwkJYnJlYWs7CisJZGVm
YXVsdDoKKwkJZnByaW50ZihzdGRlcnIsICJob3cgdG8gZnJlZSB0eXBlICVkP1xuIiwgZS0+dHlw
ZSk7CisJCWJyZWFrOworCX0KKwlmcmVlKGUpOworfQorCitzdGF0aWMgaW50IHRyYW5zX2NvdW50
OworCisjZGVmaW5lIGUxICgqZXAxKQorI2RlZmluZSBlMiAoKmVwMikKKworLyoKKyAqIGV4cHJf
ZWxpbWluYXRlX2VxKCkgaGVscGVyLgorICoKKyAqIFdhbGtzIHRoZSB0d28gZXhwcmVzc2lvbiB0
cmVlcyBnaXZlbiBpbiAnZXAxJyBhbmQgJ2VwMicuIEFueSBub2RlIHRoYXQgZG9lcworICogbm90
IGhhdmUgdHlwZSAndHlwZScgKEVfT1IvRV9BTkQpIGlzIGNvbnNpZGVyZWQgYSBsZWFmLCBhbmQg
aXMgY29tcGFyZWQKKyAqIGFnYWluc3QgYWxsIG90aGVyIGxlYXZlcy4gVHdvIGVxdWFsIGxlYXZl
cyBhcmUgYm90aCByZXBsYWNlZCB3aXRoIGVpdGhlciAneScKKyAqIG9yICduJyBhcyBhcHByb3By
aWF0ZSBmb3IgJ3R5cGUnLCB0byBiZSBlbGltaW5hdGVkIGxhdGVyLgorICovCitzdGF0aWMgdm9p
ZCBfX2V4cHJfZWxpbWluYXRlX2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoq
ZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sKKwkvKiBSZWN1cnNlIGRvd24gdG8gbGVhdmVzICov
CisKKwlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgeworCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUs
ICZlMS0+bGVmdC5leHByLCAmZTIpOworCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+
cmlnaHQuZXhwciwgJmUyKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoZTItPnR5cGUgPT0gdHlwZSkg
eworCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOworCQlf
X2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsKKwkJcmV0dXJu
OworCX0KKworCS8qIGUxIGFuZCBlMiBhcmUgbGVhdmVzLiBDb21wYXJlIHRoZW0uICovCisKKwlp
ZiAoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYKKwkgICAg
ZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSAmJgorCSAgICAoZTEtPmxlZnQuc3ltID09ICZz
eW1ib2xfeWVzIHx8IGUxLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSkKKwkJcmV0dXJuOworCWlm
ICghZXhwcl9lcShlMSwgZTIpKQorCQlyZXR1cm47CisKKwkvKiBlMSBhbmQgZTIgYXJlIGVxdWFs
IGxlYXZlcy4gUHJlcGFyZSB0aGVtIGZvciBlbGltaW5hdGlvbi4gKi8KKworCXRyYW5zX2NvdW50
Kys7CisJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUyKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwlj
YXNlIEVfT1I6CisJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCWUyID0g
ZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCWJyZWFrOworCWNhc2UgRV9BTkQ6CisJ
CWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOworCQllMiA9IGV4cHJfYWxsb2Nf
c3ltYm9sKCZzeW1ib2xfeWVzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KK30KKwor
LyoKKyAqIFJld3JpdGVzIHRoZSBleHByZXNzaW9ucyAnZXAxJyBhbmQgJ2VwMicgdG8gcmVtb3Zl
IG9wZXJhbmRzIGNvbW1vbiB0byBib3RoLgorICogRXhhbXBsZSByZWR1Y3Rpb25zOgorICoKKyAq
CWVwMTogQSAmJiBCICAgICAgICAgICAtPiAgZXAxOiB5CisgKgllcDI6IEEgJiYgQiAmJiBDICAg
ICAgLT4gIGVwMjogQworICoKKyAqCWVwMTogQSB8fCBCICAgICAgICAgICAtPiAgZXAxOiBuCisg
KgllcDI6IEEgfHwgQiB8fCBDICAgICAgLT4gIGVwMjogQworICoKKyAqCWVwMTogQSAmJiAoQiAm
JiBGT08pICAtPiAgZXAxOiBGT08KKyAqCWVwMjogKEJBUiAmJiBCKSAmJiBBICAtPiAgZXAyOiBC
QVIKKyAqCisgKgllcDE6IEEgJiYgKEIgfHwgQykgICAgLT4gIGVwMTogeQorICoJZXAyOiAoQyB8
fCBCKSAmJiBBICAgIC0+ICBlcDI6IHkKKyAqCisgKiBDb21wYXJpc29ucyBhcmUgZG9uZSBiZXR3
ZWVuIGFsbCBvcGVyYW5kcyBhdCB0aGUgc2FtZSAibGV2ZWwiIG9mICYmIG9yIHx8LgorICogRm9y
IGV4YW1wbGUsIGluIHRoZSBleHByZXNzaW9uICdlMSAmJiAoZTIgfHwgZTMpICYmIChlNCB8fCBl
NSknLCB0aGUKKyAqIGZvbGxvd2luZyBvcGVyYW5kcyB3aWxsIGJlIGNvbXBhcmVkOgorICoKKyAq
CS0gJ2UxJywgJ2UyIHx8IGUzJywgYW5kICdlNCB8fCBlNScsIGFnYWluc3QgZWFjaCBvdGhlcgor
ICoJLSBlMiBhZ2FpbnN0IGUzCisgKgktIGU0IGFnYWluc3QgZTUKKyAqCisgKiBQYXJlbnRoZXNl
cyBhcmUgaXJyZWxldmFudCB3aXRoaW4gYSBzaW5nbGUgbGV2ZWwuICdlMSAmJiAoZTIgJiYgZTMp
JyBhbmQKKyAqICcoZTEgJiYgZTIpICYmIGUzJyBhcmUgYm90aCBhIHNpbmdsZSBsZXZlbC4KKyAq
CisgKiBTZWUgX19leHByX2VsaW1pbmF0ZV9lcSgpIGFzIHdlbGwuCisgKi8KK3ZvaWQgZXhwcl9l
bGltaW5hdGVfZXEoc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQoreworCWlm
ICghZTEgfHwgIWUyKQorCQlyZXR1cm47CisJc3dpdGNoIChlMS0+dHlwZSkgeworCWNhc2UgRV9P
UjoKKwljYXNlIEVfQU5EOgorCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUxLT50eXBlLCBlcDEsIGVw
Mik7CisJZGVmYXVsdDoKKwkJOworCX0KKwlpZiAoZTEtPnR5cGUgIT0gZTItPnR5cGUpIHN3aXRj
aCAoZTItPnR5cGUpIHsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJX19leHByX2VsaW1p
bmF0ZV9lcShlMi0+dHlwZSwgZXAxLCBlcDIpOworCWRlZmF1bHQ6CisJCTsKKwl9CisJZTEgPSBl
eHByX2VsaW1pbmF0ZV95bihlMSk7CisJZTIgPSBleHByX2VsaW1pbmF0ZV95bihlMik7Cit9CisK
KyN1bmRlZiBlMQorI3VuZGVmIGUyCisKKy8qCisgKiBSZXR1cm5zIHRydWUgaWYgJ2UxJyBhbmQg
J2UyJyBhcmUgZXF1YWwsIGFmdGVyIG1pbm9yIHNpbXBsaWZpY2F0aW9uLiBUd28KKyAqICYmL3x8
IGV4cHJlc3Npb25zIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmIGV2ZXJ5IG9wZXJhbmQgaW4gb25l
IGV4cHJlc3Npb24KKyAqIGVxdWFscyBzb21lIG9wZXJhbmQgaW4gdGhlIG90aGVyIChvcGVyYW5k
cyBkbyBub3QgbmVlZCB0byBhcHBlYXIgaW4gdGhlIHNhbWUKKyAqIG9yZGVyKSwgcmVjdXJzaXZl
bHkuCisgKi8KK3N0YXRpYyBpbnQgZXhwcl9lcShzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHBy
ICplMikKK3sKKwlpbnQgcmVzLCBvbGRfY291bnQ7CisKKwlpZiAoZTEtPnR5cGUgIT0gZTItPnR5
cGUpCisJCXJldHVybiAwOworCXN3aXRjaCAoZTEtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJ
Y2FzZSBFX0dFUToKKwljYXNlIEVfR1RIOgorCWNhc2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwlj
YXNlIEVfVU5FUVVBTDoKKwkJcmV0dXJuIGUxLT5sZWZ0LnN5bSA9PSBlMi0+bGVmdC5zeW0gJiYg
ZTEtPnJpZ2h0LnN5bSA9PSBlMi0+cmlnaHQuc3ltOworCWNhc2UgRV9TWU1CT0w6CisJCXJldHVy
biBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBl
eHByX2VxKGUxLT5sZWZ0LmV4cHIsIGUyLT5sZWZ0LmV4cHIpOworCWNhc2UgRV9BTkQ6CisJY2Fz
ZSBFX09SOgorCQllMSA9IGV4cHJfY29weShlMSk7CisJCWUyID0gZXhwcl9jb3B5KGUyKTsKKwkJ
b2xkX2NvdW50ID0gdHJhbnNfY291bnQ7CisJCWV4cHJfZWxpbWluYXRlX2VxKCZlMSwgJmUyKTsK
KwkJcmVzID0gKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MICYm
CisJCSAgICAgICBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltKTsKKwkJZXhwcl9mcmVlKGUx
KTsKKwkJZXhwcl9mcmVlKGUyKTsKKwkJdHJhbnNfY291bnQgPSBvbGRfY291bnQ7CisJCXJldHVy
biByZXM7CisJY2FzZSBFX0xJU1Q6CisJY2FzZSBFX1JBTkdFOgorCWNhc2UgRV9OT05FOgorCQkv
KiBwYW5pYyAqLzsKKwl9CisKKwlpZiAoREVCVUdfRVhQUikgeworCQlleHByX2ZwcmludChlMSwg
c3Rkb3V0KTsKKwkJcHJpbnRmKCIgPSAiKTsKKwkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7CisJ
CXByaW50ZigiID9cbiIpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmVjdXJzaXZl
bHkgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBzaW1wbGlmaWNhdGlvbnMgaW4tcGxhY2UgKGFzIHdl
bGwgYXMgdGhlCisgKiBjb3JyZXNwb25kaW5nIHNpbXBsaWZpY2F0aW9ucyB3aXRoIHN3YXBwZWQg
b3BlcmFuZHMpOgorICoKKyAqCWV4cHIgJiYgbiAgLT4gIG4KKyAqCWV4cHIgJiYgeSAgLT4gIGV4
cHIKKyAqCWV4cHIgfHwgbiAgLT4gIGV4cHIKKyAqCWV4cHIgfHwgeSAgLT4gIHkKKyAqCisgKiBS
ZXR1cm5zIHRoZSBvcHRpbWl6ZWQgZXhwcmVzc2lvbi4KKyAqLworc3RhdGljIHN0cnVjdCBleHBy
ICpleHByX2VsaW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSkKK3sKKwlzdHJ1Y3QgZXhwciAqdG1w
OworCisJaWYgKGUpIHN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9BTkQ6CisJCWUtPmxlZnQu
ZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIg
PSBleHByX2VsaW1pbmF0ZV95bihlLT5yaWdodC5leHByKTsKKwkJaWYgKGUtPmxlZnQuZXhwci0+
dHlwZSA9PSBFX1NZTUJPTCkgeworCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5
bWJvbF9ubykgeworCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCWV4cHJfZnJlZShl
LT5yaWdodC5leHByKTsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJZS0+bGVmdC5zeW0g
PSAmc3ltYm9sX25vOworCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJCXJldHVybiBlOwor
CQkJfSBlbHNlIGlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7CisJ
CQkJZnJlZShlLT5sZWZ0LmV4cHIpOworCQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7CisJCQkJKmUg
PSAqKGUtPnJpZ2h0LmV4cHIpOworCQkJCWZyZWUodG1wKTsKKwkJCQlyZXR1cm4gZTsKKwkJCX0K
KwkJfQorCQlpZiAoZS0+cmlnaHQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCkgeworCQkJaWYgKGUt
PnJpZ2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQlleHByX2ZyZWUoZS0+
bGVmdC5leHByKTsKKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJZS0+dHlwZSA9
IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsKKwkJCQllLT5yaWdodC5l
eHByID0gTlVMTDsKKwkJCQlyZXR1cm4gZTsKKwkJCX0gZWxzZSBpZiAoZS0+cmlnaHQuZXhwci0+
bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJ
CXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQkqZSA9ICooZS0+bGVmdC5leHByKTsKKwkJCQlmcmVl
KHRtcCk7CisJCQkJcmV0dXJuIGU7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJY2FzZSBFX09SOgor
CQllLT5sZWZ0LmV4cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5sZWZ0LmV4cHIpOworCQllLT5y
aWdodC5leHByID0gZXhwcl9lbGltaW5hdGVfeW4oZS0+cmlnaHQuZXhwcik7CisJCWlmIChlLT5s
ZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsKKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQu
c3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQlmcmVlKGUtPmxlZnQuZXhwcik7CisJCQkJdG1wID0g
ZS0+cmlnaHQuZXhwcjsKKwkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7CisJCQkJZnJlZSh0bXAp
OworCQkJCXJldHVybiBlOworCQkJfSBlbHNlIGlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09
ICZzeW1ib2xfeWVzKSB7CisJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7CisJCQkJZXhwcl9m
cmVlKGUtPnJpZ2h0LmV4cHIpOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0
LnN5bSA9ICZzeW1ib2xfeWVzOworCQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJCXJldHVy
biBlOworCQkJfQorCQl9CisJCWlmIChlLT5yaWdodC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7
CisJCQlpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgeworCQkJCWZy
ZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJCSplID0gKihl
LT5sZWZ0LmV4cHIpOworCQkJCWZyZWUodG1wKTsKKwkJCQlyZXR1cm4gZTsKKwkJCX0gZWxzZSBp
ZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsKKwkJCQlleHByX2Zy
ZWUoZS0+bGVmdC5leHByKTsKKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7CisJCQkJZS0+
dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJCQkJZS0+
cmlnaHQuZXhwciA9IE5VTEw7CisJCQkJcmV0dXJuIGU7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJ
ZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4gZTsKK30KKworLyoKKyAqIGJvb2wgRk9PIT1uID0+
IEZPTworICovCitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19ib29sKHN0cnVjdCBleHByICplKQor
eworCWlmICghZSkKKwkJcmV0dXJuIE5VTEw7CisJc3dpdGNoIChlLT50eXBlKSB7CisJY2FzZSBF
X0FORDoKKwljYXNlIEVfT1I6CisJY2FzZSBFX05PVDoKKwkJZS0+bGVmdC5leHByID0gZXhwcl90
cmFuc19ib29sKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBleHByX3RyYW5zX2Jv
b2woZS0+cmlnaHQuZXhwcik7CisJCWJyZWFrOworCWNhc2UgRV9VTkVRVUFMOgorCQkvLyBGT08h
PW4gLT4gRk9PCisJCWlmIChlLT5sZWZ0LnN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCQlp
ZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7
CisJCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwlkZWZhdWx0
OgorCQk7CisJfQorCXJldHVybiBlOworfQorCisvKgorICogZTEgfHwgZTIgLT4gPworICovCitz
dGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfam9pbl9vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBl
eHByICplMikKK3sKKwlzdHJ1Y3QgZXhwciAqdG1wOworCXN0cnVjdCBzeW1ib2wgKnN5bTEsICpz
eW0yOworCisJaWYgKGV4cHJfZXEoZTEsIGUyKSkKKwkJcmV0dXJuIGV4cHJfY29weShlMSk7CisJ
aWYgKGUxLT50eXBlICE9IEVfRVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9VTkVRVUFMICYmIGUxLT50
eXBlICE9IEVfU1lNQk9MICYmIGUxLT50eXBlICE9IEVfTk9UKQorCQlyZXR1cm4gTlVMTDsKKwlp
ZiAoZTItPnR5cGUgIT0gRV9FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTItPnR5
cGUgIT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgIT0gRV9OT1QpCisJCXJldHVybiBOVUxMOworCWlm
IChlMS0+dHlwZSA9PSBFX05PVCkgeworCQl0bXAgPSBlMS0+bGVmdC5leHByOworCQlpZiAodG1w
LT50eXBlICE9IEVfRVFVQUwgJiYgdG1wLT50eXBlICE9IEVfVU5FUVVBTCAmJiB0bXAtPnR5cGUg
IT0gRV9TWU1CT0wpCisJCQlyZXR1cm4gTlVMTDsKKwkJc3ltMSA9IHRtcC0+bGVmdC5zeW07CisJ
fSBlbHNlCisJCXN5bTEgPSBlMS0+bGVmdC5zeW07CisJaWYgKGUyLT50eXBlID09IEVfTk9UKSB7
CisJCWlmIChlMi0+bGVmdC5leHByLT50eXBlICE9IEVfU1lNQk9MKQorCQkJcmV0dXJuIE5VTEw7
CisJCXN5bTIgPSBlMi0+bGVmdC5leHByLT5sZWZ0LnN5bTsKKwl9IGVsc2UKKwkJc3ltMiA9IGUy
LT5sZWZ0LnN5bTsKKwlpZiAoc3ltMSAhPSBzeW0yKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoc3lt
MS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNUQVRFKQorCQlyZXR1
cm4gTlVMTDsKKwlpZiAoc3ltMS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7CisJCWlmIChlMS0+dHlw
ZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYKKwkJICAgICgoZTEtPnJpZ2h0
LnN5bSA9PSAmc3ltYm9sX3llcyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAor
CQkgICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0g
JnN5bWJvbF95ZXMpKSkgeworCQkJLy8gKGE9J3knKSB8fCAoYT0nbScpIC0+IChhIT0nbicpCisJ
CQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF9ubyk7CisJ
CX0KKwkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJgor
CQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0g
JnN5bWJvbF9ubykgfHwKKwkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUy
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKSkgeworCQkJLy8gKGE9J3knKSB8fCAoYT0nbicp
IC0+IChhIT0nbScpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwg
JnN5bWJvbF9tb2QpOworCQl9CisJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBl
ID09IEVfRVFVQUwgJiYKKwkJICAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBl
Mi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8CisJCSAgICAgKGUxLT5yaWdodC5zeW0gPT0g
JnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSkpIHsKKwkJCS8vIChh
PSdtJykgfHwgKGE9J24nKSAtPiAoYSE9J3knKQorCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChF
X1VORVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsKKwkJfQorCX0KKwlpZiAoc3ltMS0+dHlwZSA9
PSBTX0JPT0xFQU4gJiYgc3ltMSA9PSBzeW0yKSB7CisJCWlmICgoZTEtPnR5cGUgPT0gRV9OT1Qg
JiYgZTEtPmxlZnQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJP
TCkgfHwKKwkJICAgIChlMi0+dHlwZSA9PSBFX05PVCAmJiBlMi0+bGVmdC5leHByLT50eXBlID09
IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfU1lNQk9MKSkKKwkJCXJldHVybiBleHByX2FsbG9j
X3N5bWJvbCgmc3ltYm9sX3llcyk7CisJfQorCisJaWYgKERFQlVHX0VYUFIpIHsKKwkJcHJpbnRm
KCJvcHRpbWl6ZSAoIik7CisJCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOworCQlwcmludGYoIikg
fHwgKCIpOworCQlleHByX2ZwcmludChlMiwgc3Rkb3V0KTsKKwkJcHJpbnRmKCIpP1xuIik7CisJ
fQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfam9pbl9hbmQo
c3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpCit7CisJc3RydWN0IGV4cHIgKnRtcDsK
KwlzdHJ1Y3Qgc3ltYm9sICpzeW0xLCAqc3ltMjsKKworCWlmIChleHByX2VxKGUxLCBlMikpCisJ
CXJldHVybiBleHByX2NvcHkoZTEpOworCWlmIChlMS0+dHlwZSAhPSBFX0VRVUFMICYmIGUxLT50
eXBlICE9IEVfVU5FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMS0+dHlwZSAhPSBF
X05PVCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKGUyLT50eXBlICE9IEVfRVFVQUwgJiYgZTItPnR5
cGUgIT0gRV9VTkVRVUFMICYmIGUyLT50eXBlICE9IEVfU1lNQk9MICYmIGUyLT50eXBlICE9IEVf
Tk9UKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoZTEtPnR5cGUgPT0gRV9OT1QpIHsKKwkJdG1wID0g
ZTEtPmxlZnQuZXhwcjsKKwkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRtcC0+dHlwZSAh
PSBFX1VORVFVQUwgJiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQorCQkJcmV0dXJuIE5VTEw7CisJ
CXN5bTEgPSB0bXAtPmxlZnQuc3ltOworCX0gZWxzZQorCQlzeW0xID0gZTEtPmxlZnQuc3ltOwor
CWlmIChlMi0+dHlwZSA9PSBFX05PVCkgeworCQlpZiAoZTItPmxlZnQuZXhwci0+dHlwZSAhPSBF
X1NZTUJPTCkKKwkJCXJldHVybiBOVUxMOworCQlzeW0yID0gZTItPmxlZnQuZXhwci0+bGVmdC5z
eW07CisJfSBlbHNlCisJCXN5bTIgPSBlMi0+bGVmdC5zeW07CisJaWYgKHN5bTEgIT0gc3ltMikK
KwkJcmV0dXJuIE5VTEw7CisJaWYgKHN5bTEtPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bTEtPnR5
cGUgIT0gU19UUklTVEFURSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoKGUxLT50eXBlID09IEVf
U1lNQk9MICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X3llcykgfHwKKwkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfRVFV
QUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpCisJCS8vIChhKSAmJiAoYT0neScp
IC0+IChhPSd5JykKKwkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3lt
Ym9sX3llcyk7CisKKwlpZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVf
VU5FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8CisJICAgIChlMi0+dHlw
ZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9
PSAmc3ltYm9sX25vKSkKKwkJLy8gKGEpICYmIChhIT0nbicpIC0+IChhKQorCQlyZXR1cm4gZXhw
cl9hbGxvY19zeW1ib2woc3ltMSk7CisKKwlpZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUy
LT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAor
CSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUx
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKQorCQkvLyAoYSkgJiYgKGEhPSdtJykgLT4gKGE9
J3knKQorCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVz
KTsKKworCWlmIChzeW0xLT50eXBlID09IFNfVFJJU1RBVEUpIHsKKwkJaWYgKGUxLT50eXBlID09
IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMKSB7CisJCQkvLyAoYT0nYicpICYmIChh
IT0nYycpIC0+ICdiJz0nYycgPyAnbicgOiBhPSdiJworCQkJc3ltMiA9IGUxLT5yaWdodC5zeW07
CisJCQlpZiAoKGUyLT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSAmJiAoc3ltMi0+
ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpKQorCQkJCXJldHVybiBzeW0yICE9IGUyLT5yaWdodC5zeW0g
PyBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgc3ltMikKKwkJCQkJCQkgICAgIDogZXhw
cl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCX0KKwkJaWYgKGUxLT50eXBlID09IEVfVU5F
UVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMKSB7CisJCQkvLyAoYT0nYicpICYmIChhIT0nYycp
IC0+ICdiJz0nYycgPyAnbicgOiBhPSdiJworCQkJc3ltMiA9IGUyLT5yaWdodC5zeW07CisJCQlp
ZiAoKGUxLT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSAmJiAoc3ltMi0+ZmxhZ3Mg
JiBTWU1CT0xfQ09OU1QpKQorCQkJCXJldHVybiBzeW0yICE9IGUxLT5yaWdodC5zeW0gPyBleHBy
X2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgc3ltMikKKwkJCQkJCQkgICAgIDogZXhwcl9hbGxv
Y19zeW1ib2woJnN5bWJvbF9ubyk7CisJCX0KKwkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAm
JiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYKKwkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX3llcyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8CisJCQkgICAgKGUxLT5y
aWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkp
CisJCQkvLyAoYSE9J3knKSAmJiAoYSE9J24nKSAtPiAoYT0nbScpCisJCQlyZXR1cm4gZXhwcl9h
bGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfbW9kKTsKKworCQlpZiAoZTEtPnR5cGUg
PT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJgorCQkJICAgKChlMS0+cmln
aHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8
CisJCQkgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9
PSAmc3ltYm9sX3llcykpKQorCQkJLy8gKGEhPSd5JykgJiYgKGEhPSdtJykgLT4gKGE9J24nKQor
CQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX25vKTsKKwor
CQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJgor
CQkJICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0g
JnN5bWJvbF9ubykgfHwKKwkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUy
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkKKwkJCS8vIChhIT0nbScpICYmIChhIT0nbicp
IC0+IChhPSdtJykKKwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5
bWJvbF95ZXMpOworCisJCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0g
RV9FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fAorCQkgICAgKGUyLT50
eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9
PSAmc3ltYm9sX21vZCkgfHwKKwkJICAgIChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlw
ZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgfHwKKwkJICAg
IChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJp
Z2h0LnN5bSA9PSAmc3ltYm9sX3llcykpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoREVC
VUdfRVhQUikgeworCQlwcmludGYoIm9wdGltaXplICgiKTsKKwkJZXhwcl9mcHJpbnQoZTEsIHN0
ZG91dCk7CisJCXByaW50ZigiKSAmJiAoIik7CisJCWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOwor
CQlwcmludGYoIik/XG4iKTsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBleHByX2Vs
aW1pbmF0ZV9kdXBzKCkgaGVscGVyLgorICoKKyAqIFdhbGtzIHRoZSB0d28gZXhwcmVzc2lvbiB0
cmVlcyBnaXZlbiBpbiAnZXAxJyBhbmQgJ2VwMicuIEFueSBub2RlIHRoYXQgZG9lcworICogbm90
IGhhdmUgdHlwZSAndHlwZScgKEVfT1IvRV9BTkQpIGlzIGNvbnNpZGVyZWQgYSBsZWFmLCBhbmQg
aXMgY29tcGFyZWQKKyAqIGFnYWluc3QgYWxsIG90aGVyIGxlYXZlcyB0byBsb29rIGZvciBzaW1w
bGlmaWNhdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIGV4cHJfZWxpbWluYXRlX2R1cHMxKGVudW0g
ZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikKK3sK
KyNkZWZpbmUgZTEgKCplcDEpCisjZGVmaW5lIGUyICgqZXAyKQorCXN0cnVjdCBleHByICp0bXA7
CisKKwkvKiBSZWN1cnNlIGRvd24gdG8gbGVhdmVzICovCisKKwlpZiAoZTEtPnR5cGUgPT0gdHlw
ZSkgeworCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUyKTsK
KwkJZXhwcl9lbGltaW5hdGVfZHVwczEodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOworCQly
ZXR1cm47CisJfQorCWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7CisJCWV4cHJfZWxpbWluYXRlX2R1
cHMxKHR5cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOworCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0
eXBlLCAmZTEsICZlMi0+cmlnaHQuZXhwcik7CisJCXJldHVybjsKKwl9CisKKwkvKiBlMSBhbmQg
ZTIgYXJlIGxlYXZlcy4gQ29tcGFyZSBhbmQgcHJvY2VzcyB0aGVtLiAqLworCisJaWYgKGUxID09
IGUyKQorCQlyZXR1cm47CisKKwlzd2l0Y2ggKGUxLT50eXBlKSB7CisJY2FzZSBFX09SOiBjYXNl
IEVfQU5EOgorCQlleHByX2VsaW1pbmF0ZV9kdXBzMShlMS0+dHlwZSwgJmUxLCAmZTEpOworCWRl
ZmF1bHQ6CisJCTsKKwl9CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEVfT1I6CisJCXRtcCA9
IGV4cHJfam9pbl9vcihlMSwgZTIpOworCQlpZiAodG1wKSB7CisJCQlleHByX2ZyZWUoZTEpOyBl
eHByX2ZyZWUoZTIpOworCQkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsKKwkJ
CWUyID0gdG1wOworCQkJdHJhbnNfY291bnQrKzsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfQU5E
OgorCQl0bXAgPSBleHByX2pvaW5fYW5kKGUxLCBlMik7CisJCWlmICh0bXApIHsKKwkJCWV4cHJf
ZnJlZShlMSk7IGV4cHJfZnJlZShlMik7CisJCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1i
b2xfeWVzKTsKKwkJCWUyID0gdG1wOworCQkJdHJhbnNfY291bnQrKzsKKwkJfQorCQlicmVhazsK
KwlkZWZhdWx0OgorCQk7CisJfQorI3VuZGVmIGUxCisjdW5kZWYgZTIKK30KKworLyoKKyAqIFJl
d3JpdGVzICdlJyBpbi1wbGFjZSB0byByZW1vdmUgKCJqb2luIikgZHVwbGljYXRlIGFuZCBvdGhl
ciByZWR1bmRhbnQKKyAqIG9wZXJhbmRzLgorICoKKyAqIEV4YW1wbGUgc2ltcGxpZmljYXRpb25z
OgorICoKKyAqCUEgfHwgQiB8fCBBICAgIC0+ICBBIHx8IEIKKyAqCUEgJiYgQiAmJiBBPXkgIC0+
ICBBPXkgJiYgQgorICoKKyAqIFJldHVybnMgdGhlIGRlZHVwbGljYXRlZCBleHByZXNzaW9uLgor
ICovCitzdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfZHVwcyhzdHJ1Y3QgZXhwciAqZSkKK3sK
KwlpbnQgb2xkY291bnQ7CisJaWYgKCFlKQorCQlyZXR1cm4gZTsKKworCW9sZGNvdW50ID0gdHJh
bnNfY291bnQ7CisJd2hpbGUgKDEpIHsKKwkJdHJhbnNfY291bnQgPSAwOworCQlzd2l0Y2ggKGUt
PnR5cGUpIHsKKwkJY2FzZSBFX09SOiBjYXNlIEVfQU5EOgorCQkJZXhwcl9lbGltaW5hdGVfZHVw
czEoZS0+dHlwZSwgJmUsICZlKTsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCQlpZiAoIXRyYW5z
X2NvdW50KQorCQkJLyogTm8gc2ltcGxpZmljYXRpb25zIGRvbmUgaW4gdGhpcyBwYXNzLiBXZSdy
ZSBkb25lICovCisJCQlicmVhazsKKwkJZSA9IGV4cHJfZWxpbWluYXRlX3luKGUpOworCX0KKwl0
cmFuc19jb3VudCA9IG9sZGNvdW50OworCXJldHVybiBlOworfQorCisvKgorICogUGVyZm9ybXMg
dmFyaW91cyBzaW1wbGlmaWNhdGlvbnMgaW52b2x2aW5nIGxvZ2ljYWwgb3BlcmF0b3JzIGFuZAor
ICogY29tcGFyaXNvbnMuCisgKgorICogQWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGV4cHJl
c3Npb24uCisgKi8KK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAqZSkK
K3sKKwlzdHJ1Y3QgZXhwciAqdG1wOworCisJaWYgKCFlKQorCQlyZXR1cm4gTlVMTDsKKwlzd2l0
Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX0dFUToKKwljYXNlIEVfR1RI
OgorCWNhc2UgRV9MRVE6CisJY2FzZSBFX0xUSDoKKwljYXNlIEVfVU5FUVVBTDoKKwljYXNlIEVf
U1lNQk9MOgorCWNhc2UgRV9MSVNUOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQllLT5sZWZ0LmV4
cHIgPSBleHByX3RyYW5zZm9ybShlLT5sZWZ0LmV4cHIpOworCQllLT5yaWdodC5leHByID0gZXhw
cl90cmFuc2Zvcm0oZS0+cmlnaHQuZXhwcik7CisJfQorCisJc3dpdGNoIChlLT50eXBlKSB7CisJ
Y2FzZSBFX0VRVUFMOgorCQlpZiAoZS0+bGVmdC5zeW0tPnR5cGUgIT0gU19CT09MRUFOKQorCQkJ
YnJlYWs7CisJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgeworCQkJZS0+dHlwZSA9
IEVfTk9UOworCQkJZS0+bGVmdC5leHByID0gZXhwcl9hbGxvY19zeW1ib2woZS0+bGVmdC5zeW0p
OworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChlLT5yaWdo
dC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsKKwkJCXByaW50ZigiYm9vbGVhbiBzeW1ib2wgJXMgdGVz
dGVkIGZvciAnbSc/IHRlc3QgZm9yY2VkIHRvICduJ1xuIiwgZS0+bGVmdC5zeW0tPm5hbWUpOwor
CQkJZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX25vOworCQkJ
ZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChlLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF95ZXMpIHsKKwkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCWUtPnJpZ2h0LnN5
bSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfVU5FUVVBTDoKKwkJ
aWYgKGUtPmxlZnQuc3ltLT50eXBlICE9IFNfQk9PTEVBTikKKwkJCWJyZWFrOworCQlpZiAoZS0+
cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHsKKwkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCWUt
PnJpZ2h0LnN5bSA9IE5VTEw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZS0+cmlnaHQuc3ltID09
ICZzeW1ib2xfbW9kKSB7CisJCQlwcmludGYoImJvb2xlYW4gc3ltYm9sICVzIHRlc3RlZCBmb3Ig
J20nPyB0ZXN0IGZvcmNlZCB0byAneSdcbiIsIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJCWUtPnR5
cGUgPSBFX1NZTUJPTDsKKwkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7CisJCQllLT5yaWdo
dC5zeW0gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX3llcykgeworCQkJZS0+dHlwZSA9IEVfTk9UOworCQkJZS0+bGVmdC5leHByID0gZXhwcl9h
bGxvY19zeW1ib2woZS0+bGVmdC5zeW0pOworCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsKKwkJCWJy
ZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgRV9OT1Q6CisJCXN3aXRjaCAoZS0+bGVmdC5leHBy
LT50eXBlKSB7CisJCWNhc2UgRV9OT1Q6CisJCQkvLyAhIWEgLT4gYQorCQkJdG1wID0gZS0+bGVm
dC5leHByLT5sZWZ0LmV4cHI7CisJCQlmcmVlKGUtPmxlZnQuZXhwcik7CisJCQlmcmVlKGUpOwor
CQkJZSA9IHRtcDsKKwkJCWUgPSBleHByX3RyYW5zZm9ybShlKTsKKwkJCWJyZWFrOworCQljYXNl
IEVfRVFVQUw6CisJCWNhc2UgRV9VTkVRVUFMOgorCQkJLy8gIWE9J3gnIC0+IGEhPSd4JworCQkJ
dG1wID0gZS0+bGVmdC5leHByOworCQkJZnJlZShlKTsKKwkJCWUgPSB0bXA7CisJCQllLT50eXBl
ID0gZS0+dHlwZSA9PSBFX0VRVUFMID8gRV9VTkVRVUFMIDogRV9FUVVBTDsKKwkJCWJyZWFrOwor
CQljYXNlIEVfTEVROgorCQljYXNlIEVfR0VROgorCQkJLy8gIWE8PSd4JyAtPiBhPid4JworCQkJ
dG1wID0gZS0+bGVmdC5leHByOworCQkJZnJlZShlKTsKKwkJCWUgPSB0bXA7CisJCQllLT50eXBl
ID0gZS0+dHlwZSA9PSBFX0xFUSA/IEVfR1RIIDogRV9MVEg7CisJCQlicmVhazsKKwkJY2FzZSBF
X0xUSDoKKwkJY2FzZSBFX0dUSDoKKwkJCS8vICFhPCd4JyAtPiBhPj0neCcKKwkJCXRtcCA9IGUt
PmxlZnQuZXhwcjsKKwkJCWZyZWUoZSk7CisJCQllID0gdG1wOworCQkJZS0+dHlwZSA9IGUtPnR5
cGUgPT0gRV9MVEggPyBFX0dFUSA6IEVfTEVROworCQkJYnJlYWs7CisJCWNhc2UgRV9PUjoKKwkJ
CS8vICEoYSB8fCBiKSAtPiAhYSAmJiAhYgorCQkJdG1wID0gZS0+bGVmdC5leHByOworCQkJZS0+
dHlwZSA9IEVfQU5EOworCQkJZS0+cmlnaHQuZXhwciA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCB0
bXAtPnJpZ2h0LmV4cHIpOworCQkJdG1wLT50eXBlID0gRV9OT1Q7CisJCQl0bXAtPnJpZ2h0LmV4
cHIgPSBOVUxMOworCQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOworCQkJYnJlYWs7CisJCWNhc2Ug
RV9BTkQ6CisJCQkvLyAhKGEgJiYgYikgLT4gIWEgfHwgIWIKKwkJCXRtcCA9IGUtPmxlZnQuZXhw
cjsKKwkJCWUtPnR5cGUgPSBFX09SOworCQkJZS0+cmlnaHQuZXhwciA9IGV4cHJfYWxsb2Nfb25l
KEVfTk9ULCB0bXAtPnJpZ2h0LmV4cHIpOworCQkJdG1wLT50eXBlID0gRV9OT1Q7CisJCQl0bXAt
PnJpZ2h0LmV4cHIgPSBOVUxMOworCQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOworCQkJYnJlYWs7
CisJCWNhc2UgRV9TWU1CT0w6CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3lt
Ym9sX3llcykgeworCQkJCS8vICEneScgLT4gJ24nCisJCQkJdG1wID0gZS0+bGVmdC5leHByOwor
CQkJCWZyZWUoZSk7CisJCQkJZSA9IHRtcDsKKwkJCQllLT50eXBlID0gRV9TWU1CT0w7CisJCQkJ
ZS0+bGVmdC5zeW0gPSAmc3ltYm9sX25vOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGUtPmxl
ZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsKKwkJCQkvLyAhJ20nIC0+ICdtJwor
CQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsKKwkJCQlmcmVlKGUpOworCQkJCWUgPSB0bXA7CisJCQkJ
ZS0+dHlwZSA9IEVfU1lNQk9MOworCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9tb2Q7CisJCQkJ
YnJlYWs7CisJCQl9CisJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25v
KSB7CisJCQkJLy8gISduJyAtPiAneScKKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7CisJCQkJZnJl
ZShlKTsKKwkJCQllID0gdG1wOworCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsKKwkJCQllLT5sZWZ0
LnN5bSA9ICZzeW1ib2xfeWVzOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1
bHQ6CisJCQk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKwlyZXR1cm4gZTsK
K30KKworaW50IGV4cHJfY29udGFpbnNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBz
eW1ib2wgKnN5bSkKK3sKKwlpZiAoIWRlcCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGRlcC0+
dHlwZSkgeworCWNhc2UgRV9BTkQ6CisJY2FzZSBFX09SOgorCQlyZXR1cm4gZXhwcl9jb250YWlu
c19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSkgfHwKKwkJICAgICAgIGV4cHJfY29udGFpbnNf
c3ltYm9sKGRlcC0+cmlnaHQuZXhwciwgc3ltKTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4g
ZGVwLT5sZWZ0LnN5bSA9PSBzeW07CisJY2FzZSBFX0VRVUFMOgorCWNhc2UgRV9HRVE6CisJY2Fz
ZSBFX0dUSDoKKwljYXNlIEVfTEVROgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX1VORVFVQUw6CisJ
CXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bSB8fAorCQkgICAgICAgZGVwLT5yaWdodC5zeW0g
PT0gc3ltOworCWNhc2UgRV9OT1Q6CisJCXJldHVybiBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAt
PmxlZnQuZXhwciwgc3ltKTsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiAwOworfQorCiti
b29sIGV4cHJfZGVwZW5kc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAq
c3ltKQoreworCWlmICghZGVwKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzd2l0Y2ggKGRlcC0+dHlw
ZSkgeworCWNhc2UgRV9BTkQ6CisJCXJldHVybiBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+bGVm
dC5leHByLCBzeW0pIHx8CisJCSAgICAgICBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+cmlnaHQu
ZXhwciwgc3ltKTsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gZGVwLT5sZWZ0LnN5bSA9PSBz
eW07CisJY2FzZSBFX0VRVUFMOgorCQlpZiAoZGVwLT5sZWZ0LnN5bSA9PSBzeW0pIHsKKwkJCWlm
IChkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyB8fCBkZXAtPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX21vZCkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfVU5FUVVB
TDoKKwkJaWYgKGRlcC0+bGVmdC5zeW0gPT0gc3ltKSB7CisJCQlpZiAoZGVwLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9ubykKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0
OgorCQk7CisJfQorIAlyZXR1cm4gZmFsc2U7Cit9CisKKy8qCisgKiBJbnNlcnRzIGV4cGxpY2l0
IGNvbXBhcmlzb25zIG9mIHR5cGUgJ3R5cGUnIHRvIHN5bWJvbCAnc3ltJyBpbnRvIHRoZQorICog
ZXhwcmVzc2lvbiAnZScuCisgKgorICogRXhhbXBsZXMgdHJhbnNmb3JtYXRpb25zIGZvciB0eXBl
ID09IEVfVU5FUVVBTCwgc3ltID09ICZzeW1ib2xfbm86CisgKgorICoJQSAgICAgICAgICAgICAg
LT4gIEEhPW4KKyAqCSFBICAgICAgICAgICAgIC0+ICBBPW4KKyAqCUEgJiYgQiAgICAgICAgIC0+
ICAhKEE9biB8fCBCPW4pCisgKglBIHx8IEIgICAgICAgICAtPiAgIShBPW4gJiYgQj1uKQorICoJ
QSAmJiAoQiB8fCBDKSAgLT4gICEoQT1uIHx8IChCPW4gJiYgQz1uKSkKKyAqCisgKiBBbGxvY2F0
ZXMgYW5kIHJldHVybnMgYSBuZXcgZXhwcmVzc2lvbi4KKyAqLworc3RydWN0IGV4cHIgKmV4cHJf
dHJhbnNfY29tcGFyZShzdHJ1Y3QgZXhwciAqZSwgZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBleHByICplMSwgKmUyOworCisJaWYgKCFlKSB7CisJ
CWUgPSBleHByX2FsbG9jX3N5bWJvbChzeW0pOworCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpCisJ
CQllID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGUpOworCQlyZXR1cm4gZTsKKwl9CisJc3dpdGNo
IChlLT50eXBlKSB7CisJY2FzZSBFX0FORDoKKwkJZTEgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+
bGVmdC5leHByLCBFX0VRVUFMLCBzeW0pOworCQllMiA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5y
aWdodC5leHByLCBFX0VRVUFMLCBzeW0pOworCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQorCQkJ
ZSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpOworCQlpZiAoc3ltID09ICZzeW1ib2xf
bm8pCisJCQllID0gZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKTsKKwkJaWYgKHR5cGUgPT0g
RV9VTkVRVUFMKQorCQkJZSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBlKTsKKwkJcmV0dXJuIGU7
CisJY2FzZSBFX09SOgorCQllMSA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIEVf
RVFVQUwsIHN5bSk7CisJCWUyID0gZXhwcl90cmFuc19jb21wYXJlKGUtPnJpZ2h0LmV4cHIsIEVf
RVFVQUwsIHN5bSk7CisJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpCisJCQllID0gZXhwcl9hbGxv
Y190d28oRV9PUiwgZTEsIGUyKTsKKwkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQorCQkJZSA9IGV4
cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpOworCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpCisJ
CQllID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGUpOworCQlyZXR1cm4gZTsKKwljYXNlIEVfTk9U
OgorCQlyZXR1cm4gZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgdHlwZSA9PSBFX0VR
VUFMID8gRV9VTkVRVUFMIDogRV9FUVVBTCwgc3ltKTsKKwljYXNlIEVfVU5FUVVBTDoKKwljYXNl
IEVfTFRIOgorCWNhc2UgRV9MRVE6CisJY2FzZSBFX0dUSDoKKwljYXNlIEVfR0VROgorCWNhc2Ug
RV9FUVVBTDoKKwkJaWYgKHR5cGUgPT0gRV9FUVVBTCkgeworCQkJaWYgKHN5bSA9PSAmc3ltYm9s
X3llcykKKwkJCQlyZXR1cm4gZXhwcl9jb3B5KGUpOworCQkJaWYgKHN5bSA9PSAmc3ltYm9sX21v
ZCkKKwkJCQlyZXR1cm4gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7CisJCQlpZiAoc3lt
ID09ICZzeW1ib2xfbm8pCisJCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2Nv
cHkoZSkpOworCQl9IGVsc2UgeworCQkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykKKwkJCQlyZXR1
cm4gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlKSk7CisJCQlpZiAoc3ltID09ICZz
eW1ib2xfbW9kKQorCQkJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7CisJ
CQlpZiAoc3ltID09ICZzeW1ib2xfbm8pCisJCQkJcmV0dXJuIGV4cHJfY29weShlKTsKKwkJfQor
CQlicmVhazsKKwljYXNlIEVfU1lNQk9MOgorCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKHR5cGUs
IGUtPmxlZnQuc3ltLCBzeW0pOworCWNhc2UgRV9MSVNUOgorCWNhc2UgRV9SQU5HRToKKwljYXNl
IEVfTk9ORToKKwkJLyogcGFuaWMgKi87CisJfQorCXJldHVybiBOVUxMOworfQorCitlbnVtIHN0
cmluZ192YWx1ZV9raW5kIHsKKwlrX3N0cmluZywKKwlrX3NpZ25lZCwKKwlrX3Vuc2lnbmVkLAor
fTsKKwordW5pb24gc3RyaW5nX3ZhbHVlIHsKKwl1bnNpZ25lZCBsb25nIGxvbmcgdTsKKwlzaWdu
ZWQgbG9uZyBsb25nIHM7Cit9OworCitzdGF0aWMgZW51bSBzdHJpbmdfdmFsdWVfa2luZCBleHBy
X3BhcnNlX3N0cmluZyhjb25zdCBjaGFyICpzdHIsCisJCQkJCQllbnVtIHN5bWJvbF90eXBlIHR5
cGUsCisJCQkJCQl1bmlvbiBzdHJpbmdfdmFsdWUgKnZhbCkKK3sKKwljaGFyICp0YWlsOworCWVu
dW0gc3RyaW5nX3ZhbHVlX2tpbmQga2luZDsKKworCWVycm5vID0gMDsKKwlzd2l0Y2ggKHR5cGUp
IHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXZhbC0+cyA9ICFzdHJj
bXAoc3RyLCAibiIpID8gMCA6CisJCQkgIXN0cmNtcChzdHIsICJtIikgPyAxIDoKKwkJCSAhc3Ry
Y21wKHN0ciwgInkiKSA/IDIgOiAtMTsKKwkJcmV0dXJuIGtfc2lnbmVkOworCWNhc2UgU19JTlQ6
CisJCXZhbC0+cyA9IHN0cnRvbGwoc3RyLCAmdGFpbCwgMTApOworCQlraW5kID0ga19zaWduZWQ7
CisJCWJyZWFrOworCWNhc2UgU19IRVg6CisJCXZhbC0+dSA9IHN0cnRvdWxsKHN0ciwgJnRhaWws
IDE2KTsKKwkJa2luZCA9IGtfdW5zaWduZWQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXZhbC0+
cyA9IHN0cnRvbGwoc3RyLCAmdGFpbCwgMCk7CisJCWtpbmQgPSBrX3NpZ25lZDsKKwkJYnJlYWs7
CisJfQorCXJldHVybiAhZXJybm8gJiYgISp0YWlsICYmIHRhaWwgPiBzdHIgJiYgaXN4ZGlnaXQo
dGFpbFstMV0pCisJICAgICAgID8ga2luZCA6IGtfc3RyaW5nOworfQorCit0cmlzdGF0ZSBleHBy
X2NhbGNfdmFsdWUoc3RydWN0IGV4cHIgKmUpCit7CisJdHJpc3RhdGUgdmFsMSwgdmFsMjsKKwlj
b25zdCBjaGFyICpzdHIxLCAqc3RyMjsKKwllbnVtIHN0cmluZ192YWx1ZV9raW5kIGsxID0ga19z
dHJpbmcsIGsyID0ga19zdHJpbmc7CisJdW5pb24gc3RyaW5nX3ZhbHVlIGx2YWwgPSB7fSwgcnZh
bCA9IHt9OworCWludCByZXM7CisKKwlpZiAoIWUpCisJCXJldHVybiB5ZXM7CisKKwlzd2l0Y2gg
KGUtPnR5cGUpIHsKKwljYXNlIEVfU1lNQk9MOgorCQlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5
bSk7CisJCXJldHVybiBlLT5sZWZ0LnN5bS0+Y3Vyci50cmk7CisJY2FzZSBFX0FORDoKKwkJdmFs
MSA9IGV4cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOworCQl2YWwyID0gZXhwcl9jYWxjX3Zh
bHVlKGUtPnJpZ2h0LmV4cHIpOworCQlyZXR1cm4gRVhQUl9BTkQodmFsMSwgdmFsMik7CisJY2Fz
ZSBFX09SOgorCQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7CisJCXZhbDIg
PSBleHByX2NhbGNfdmFsdWUoZS0+cmlnaHQuZXhwcik7CisJCXJldHVybiBFWFBSX09SKHZhbDEs
IHZhbDIpOworCWNhc2UgRV9OT1Q6CisJCXZhbDEgPSBleHByX2NhbGNfdmFsdWUoZS0+bGVmdC5l
eHByKTsKKwkJcmV0dXJuIEVYUFJfTk9UKHZhbDEpOworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVf
R0VROgorCWNhc2UgRV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRIOgorCWNhc2UgRV9V
TkVRVUFMOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoImV4cHJfY2FsY192YWx1ZTog
JWQ/XG4iLCBlLT50eXBlKTsKKwkJcmV0dXJuIG5vOworCX0KKworCXN5bV9jYWxjX3ZhbHVlKGUt
PmxlZnQuc3ltKTsKKwlzeW1fY2FsY192YWx1ZShlLT5yaWdodC5zeW0pOworCXN0cjEgPSBzeW1f
Z2V0X3N0cmluZ192YWx1ZShlLT5sZWZ0LnN5bSk7CisJc3RyMiA9IHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKGUtPnJpZ2h0LnN5bSk7CisKKwlpZiAoZS0+bGVmdC5zeW0tPnR5cGUgIT0gU19TVFJJTkcg
fHwgZS0+cmlnaHQuc3ltLT50eXBlICE9IFNfU1RSSU5HKSB7CisJCWsxID0gZXhwcl9wYXJzZV9z
dHJpbmcoc3RyMSwgZS0+bGVmdC5zeW0tPnR5cGUsICZsdmFsKTsKKwkJazIgPSBleHByX3BhcnNl
X3N0cmluZyhzdHIyLCBlLT5yaWdodC5zeW0tPnR5cGUsICZydmFsKTsKKwl9CisKKwlpZiAoazEg
PT0ga19zdHJpbmcgfHwgazIgPT0ga19zdHJpbmcpCisJCXJlcyA9IHN0cmNtcChzdHIxLCBzdHIy
KTsKKwllbHNlIGlmIChrMSA9PSBrX3Vuc2lnbmVkIHx8IGsyID09IGtfdW5zaWduZWQpCisJCXJl
cyA9IChsdmFsLnUgPiBydmFsLnUpIC0gKGx2YWwudSA8IHJ2YWwudSk7CisJZWxzZSAvKiBpZiAo
azEgPT0ga19zaWduZWQgJiYgazIgPT0ga19zaWduZWQpICovCisJCXJlcyA9IChsdmFsLnMgPiBy
dmFsLnMpIC0gKGx2YWwucyA8IHJ2YWwucyk7CisKKwlzd2l0Y2goZS0+dHlwZSkgeworCWNhc2Ug
RV9FUVVBTDoKKwkJcmV0dXJuIHJlcyA/IG5vIDogeWVzOworCWNhc2UgRV9HRVE6CisJCXJldHVy
biByZXMgPj0gMCA/IHllcyA6IG5vOworCWNhc2UgRV9HVEg6CisJCXJldHVybiByZXMgPiAwID8g
eWVzIDogbm87CisJY2FzZSBFX0xFUToKKwkJcmV0dXJuIHJlcyA8PSAwID8geWVzIDogbm87CisJ
Y2FzZSBFX0xUSDoKKwkJcmV0dXJuIHJlcyA8IDAgPyB5ZXMgOiBubzsKKwljYXNlIEVfVU5FUVVB
TDoKKwkJcmV0dXJuIHJlcyA/IHllcyA6IG5vOworCWRlZmF1bHQ6CisJCXByaW50ZigiZXhwcl9j
YWxjX3ZhbHVlOiByZWxhdGlvbiAlZD9cbiIsIGUtPnR5cGUpOworCQlyZXR1cm4gbm87CisJfQor
fQorCitzdGF0aWMgaW50IGV4cHJfY29tcGFyZV90eXBlKGVudW0gZXhwcl90eXBlIHQxLCBlbnVt
IGV4cHJfdHlwZSB0MikKK3sKKwlpZiAodDEgPT0gdDIpCisJCXJldHVybiAwOworCXN3aXRjaCAo
dDEpIHsKKwljYXNlIEVfTEVROgorCWNhc2UgRV9MVEg6CisJY2FzZSBFX0dFUToKKwljYXNlIEVf
R1RIOgorCQlpZiAodDIgPT0gRV9FUVVBTCB8fCB0MiA9PSBFX1VORVFVQUwpCisJCQlyZXR1cm4g
MTsKKwljYXNlIEVfRVFVQUw6CisJY2FzZSBFX1VORVFVQUw6CisJCWlmICh0MiA9PSBFX05PVCkK
KwkJCXJldHVybiAxOworCWNhc2UgRV9OT1Q6CisJCWlmICh0MiA9PSBFX0FORCkKKwkJCXJldHVy
biAxOworCWNhc2UgRV9BTkQ6CisJCWlmICh0MiA9PSBFX09SKQorCQkJcmV0dXJuIDE7CisJY2Fz
ZSBFX09SOgorCQlpZiAodDIgPT0gRV9MSVNUKQorCQkJcmV0dXJuIDE7CisJY2FzZSBFX0xJU1Q6
CisJCWlmICh0MiA9PSAwKQorCQkJcmV0dXJuIDE7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOwor
CX0KKwlwcmludGYoIlslZGd0JWQ/XSIsIHQxLCB0Mik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQg
ZXhwcl9wcmludChzdHJ1Y3QgZXhwciAqZSwKKwkJdm9pZCAoKmZuKSh2b2lkICosIHN0cnVjdCBz
eW1ib2wgKiwgY29uc3QgY2hhciAqKSwKKwkJdm9pZCAqZGF0YSwgaW50IHByZXZ0b2tlbikKK3sK
KwlpZiAoIWUpIHsKKwkJZm4oZGF0YSwgTlVMTCwgInkiKTsKKwkJcmV0dXJuOworCX0KKworCWlm
IChleHByX2NvbXBhcmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkKKwkJZm4oZGF0YSwg
TlVMTCwgIigiKTsKKwlzd2l0Y2ggKGUtPnR5cGUpIHsKKwljYXNlIEVfU1lNQk9MOgorCQlpZiAo
ZS0+bGVmdC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0t
Pm5hbWUpOworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJYnJlYWs7
CisJY2FzZSBFX05PVDoKKwkJZm4oZGF0YSwgTlVMTCwgIiEiKTsKKwkJZXhwcl9wcmludChlLT5s
ZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX05PVCk7CisJCWJyZWFrOworCWNhc2UgRV9FUVVBTDoKKwkJ
aWYgKGUtPmxlZnQuc3ltLT5uYW1lKQorCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQu
c3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7CisJCWZu
KGRhdGEsIE5VTEwsICI9Iik7CisJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3lt
LT5uYW1lKTsKKwkJYnJlYWs7CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRIOgorCQlpZiAoZS0+
bGVmdC5zeW0tPm5hbWUpCisJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5h
bWUpOworCQllbHNlCisJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsKKwkJZm4oZGF0YSwg
TlVMTCwgZS0+dHlwZSA9PSBFX0xFUSA/ICI8PSIgOiAiPCIpOworCQlmbihkYXRhLCBlLT5yaWdo
dC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgRV9HRVE6CisJY2Fz
ZSBFX0dUSDoKKwkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQorCQkJZm4oZGF0YSwgZS0+bGVmdC5z
eW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9p
Y2U+Iik7CisJCWZuKGRhdGEsIE5VTEwsIGUtPnR5cGUgPT0gRV9HRVEgPyAiPj0iIDogIj4iKTsK
KwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOworCQlicmVhazsK
KwljYXNlIEVfVU5FUVVBTDoKKwkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQorCQkJZm4oZGF0YSwg
ZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsKKwkJZWxzZQorCQkJZm4oZGF0YSwgTlVM
TCwgIjxjaG9pY2U+Iik7CisJCWZuKGRhdGEsIE5VTEwsICIhPSIpOworCQlmbihkYXRhLCBlLT5y
aWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWJyZWFrOworCWNhc2UgRV9PUjoKKwkJ
ZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsKKwkJZm4oZGF0YSwgTlVM
TCwgIiB8fCAiKTsKKwkJZXhwcl9wcmludChlLT5yaWdodC5leHByLCBmbiwgZGF0YSwgRV9PUik7
CisJCWJyZWFrOworCWNhc2UgRV9BTkQ6CisJCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBmbiwg
ZGF0YSwgRV9BTkQpOworCQlmbihkYXRhLCBOVUxMLCAiICYmICIpOworCQlleHByX3ByaW50KGUt
PnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBFX0FORCk7CisJCWJyZWFrOworCWNhc2UgRV9MSVNUOgor
CQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7CisJCWlmIChlLT5s
ZWZ0LmV4cHIpIHsKKwkJCWZuKGRhdGEsIE5VTEwsICIgXiAiKTsKKwkJCWV4cHJfcHJpbnQoZS0+
bGVmdC5leHByLCBmbiwgZGF0YSwgRV9MSVNUKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEVfUkFO
R0U6CisJCWZuKGRhdGEsIE5VTEwsICJbIik7CisJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5s
ZWZ0LnN5bS0+bmFtZSk7CisJCWZuKGRhdGEsIE5VTEwsICIgIik7CisJCWZuKGRhdGEsIGUtPnJp
Z2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsKKwkJZm4oZGF0YSwgTlVMTCwgIl0iKTsKKwkJ
YnJlYWs7CisJZGVmYXVsdDoKKwkgIHsKKwkJY2hhciBidWZbMzJdOworCQlzcHJpbnRmKGJ1Ziwg
Ijx1bmtub3duIHR5cGUgJWQ+IiwgZS0+dHlwZSk7CisJCWZuKGRhdGEsIE5VTEwsIGJ1Zik7CisJ
CWJyZWFrOworCSAgfQorCX0KKwlpZiAoZXhwcl9jb21wYXJlX3R5cGUocHJldnRva2VuLCBlLT50
eXBlKSA+IDApCisJCWZuKGRhdGEsIE5VTEwsICIpIik7Cit9CisKK3N0YXRpYyB2b2lkIGV4cHJf
cHJpbnRfZmlsZV9oZWxwZXIodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBj
aGFyICpzdHIpCit7CisJeGZ3cml0ZShzdHIsIHN0cmxlbihzdHIpLCAxLCBkYXRhKTsKK30KKwor
dm9pZCBleHByX2ZwcmludChzdHJ1Y3QgZXhwciAqZSwgRklMRSAqb3V0KQoreworCWV4cHJfcHJp
bnQoZSwgZXhwcl9wcmludF9maWxlX2hlbHBlciwgb3V0LCBFX05PTkUpOworfQorCitzdGF0aWMg
dm9pZCBleHByX3ByaW50X2dzdHJfaGVscGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5
bSwgY29uc3QgY2hhciAqc3RyKQoreworCXN0cnVjdCBnc3RyICpncyA9IChzdHJ1Y3QgZ3N0ciop
ZGF0YTsKKwljb25zdCBjaGFyICpzeW1fc3RyID0gTlVMTDsKKworCWlmIChzeW0pCisJCXN5bV9z
dHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOworCisJaWYgKGdzLT5tYXhfd2lkdGgpIHsK
KwkJdW5zaWduZWQgZXh0cmFfbGVuZ3RoID0gc3RybGVuKHN0cik7CisJCWNvbnN0IGNoYXIgKmxh
c3RfY3IgPSBzdHJyY2hyKGdzLT5zLCAnXG4nKTsKKwkJdW5zaWduZWQgbGFzdF9saW5lX2xlbmd0
aDsKKworCQlpZiAoc3ltX3N0cikKKwkJCWV4dHJhX2xlbmd0aCArPSA0ICsgc3RybGVuKHN5bV9z
dHIpOworCisJCWlmICghbGFzdF9jcikKKwkJCWxhc3RfY3IgPSBncy0+czsKKworCQlsYXN0X2xp
bmVfbGVuZ3RoID0gc3RybGVuKGdzLT5zKSAtIChsYXN0X2NyIC0gZ3MtPnMpOworCisJCWlmICgo
bGFzdF9saW5lX2xlbmd0aCArIGV4dHJhX2xlbmd0aCkgPiBncy0+bWF4X3dpZHRoKQorCQkJc3Ry
X2FwcGVuZChncywgIlxcXG4iKTsKKwl9CisKKwlzdHJfYXBwZW5kKGdzLCBzdHIpOworCWlmIChz
eW0gJiYgc3ltLT50eXBlICE9IFNfVU5LTk9XTikKKwkJc3RyX3ByaW50ZihncywgIiBbPSVzXSIs
IHN5bV9zdHIpOworfQorCit2b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3Ry
dWN0IGdzdHIgKmdzKQoreworCWV4cHJfcHJpbnQoZSwgZXhwcl9wcmludF9nc3RyX2hlbHBlciwg
Z3MsIEVfTk9ORSk7Cit9CisKKy8qCisgKiBUcmFuc2Zvcm0gdGhlIHRvcCBsZXZlbCAifHwiIHRv
a2VucyBpbnRvIG5ld2xpbmVzIGFuZCBwcmVwZW5kIGVhY2gKKyAqIGxpbmUgd2l0aCBhIG1pbnVz
LiBUaGlzIG1ha2VzIGV4cHJlc3Npb25zIG11Y2ggZWFzaWVyIHRvIHJlYWQuCisgKiBTdWl0YWJs
ZSBmb3IgcmV2ZXJzZSBkZXBlbmRlbmN5IGV4cHJlc3Npb25zLgorICovCitzdGF0aWMgdm9pZCBl
eHByX3ByaW50X3JldmRlcChzdHJ1Y3QgZXhwciAqZSwKKwkJCSAgICAgIHZvaWQgKCpmbikodm9p
ZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNoYXIgKiksCisJCQkgICAgICB2b2lkICpkYXRh
LCB0cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBjaGFyICoqdGl0bGUpCit7CisJaWYgKGUtPnR5cGUg
PT0gRV9PUikgeworCQlleHByX3ByaW50X3JldmRlcChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBw
cl90eXBlLCB0aXRsZSk7CisJCWV4cHJfcHJpbnRfcmV2ZGVwKGUtPnJpZ2h0LmV4cHIsIGZuLCBk
YXRhLCBwcl90eXBlLCB0aXRsZSk7CisJfSBlbHNlIGlmIChleHByX2NhbGNfdmFsdWUoZSkgPT0g
cHJfdHlwZSkgeworCQlpZiAoKnRpdGxlKSB7CisJCQlmbihkYXRhLCBOVUxMLCAqdGl0bGUpOwor
CQkJKnRpdGxlID0gTlVMTDsKKwkJfQorCisJCWZuKGRhdGEsIE5VTEwsICIgIC0gIik7CisJCWV4
cHJfcHJpbnQoZSwgZm4sIGRhdGEsIEVfTk9ORSk7CisJCWZuKGRhdGEsIE5VTEwsICJcbiIpOwor
CX0KK30KKwordm9pZCBleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLCBzdHJ1
Y3QgZ3N0ciAqZ3MsCisJCQkgICAgdHJpc3RhdGUgcHJfdHlwZSwgY29uc3QgY2hhciAqdGl0bGUp
Cit7CisJZXhwcl9wcmludF9yZXZkZXAoZSwgZXhwcl9wcmludF9nc3RyX2hlbHBlciwgZ3MsIHBy
X3R5cGUsICZ0aXRsZSk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvZXhwci5oIGIv
c3VwcG9ydC9rY29uZmlnL2V4cHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44ZGRlNjViCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL2V4cHIuaApAQCAt
MCwwICsxLDMzMSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5v
cmc+CisgKi8KKworI2lmbmRlZiBFWFBSX0gKKyNkZWZpbmUgRVhQUl9ICisKKyNpZmRlZiBfX2Nw
bHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibGlzdC5oIgorI2lmbmRlZiBfX2NwbHVzcGx1cwor
I2luY2x1ZGUgPHN0ZGJvb2wuaD4KKyNlbmRpZgorCitzdHJ1Y3QgZmlsZSB7CisJc3RydWN0IGZp
bGUgKm5leHQ7CisJc3RydWN0IGZpbGUgKnBhcmVudDsKKwljb25zdCBjaGFyICpuYW1lOworCWlu
dCBsaW5lbm87Cit9OworCit0eXBlZGVmIGVudW0gdHJpc3RhdGUgeworCW5vLCBtb2QsIHllcwor
fSB0cmlzdGF0ZTsKKworZW51bSBleHByX3R5cGUgeworCUVfTk9ORSwgRV9PUiwgRV9BTkQsIEVf
Tk9ULAorCUVfRVFVQUwsIEVfVU5FUVVBTCwgRV9MVEgsIEVfTEVRLCBFX0dUSCwgRV9HRVEsCisJ
RV9MSVNULCBFX1NZTUJPTCwgRV9SQU5HRQorfTsKKwordW5pb24gZXhwcl9kYXRhIHsKKwlzdHJ1
Y3QgZXhwciAqZXhwcjsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07Cit9OworCitzdHJ1Y3QgZXhwciB7
CisJZW51bSBleHByX3R5cGUgdHlwZTsKKwl1bmlvbiBleHByX2RhdGEgbGVmdCwgcmlnaHQ7Cit9
OworCisjZGVmaW5lIEVYUFJfT1IoZGVwMSwgZGVwMikJKCgoZGVwMSk+KGRlcDIpKT8oZGVwMSk6
KGRlcDIpKQorI2RlZmluZSBFWFBSX0FORChkZXAxLCBkZXAyKQkoKChkZXAxKTwoZGVwMikpPyhk
ZXAxKTooZGVwMikpCisjZGVmaW5lIEVYUFJfTk9UKGRlcCkJCSgyLShkZXApKQorCisjZGVmaW5l
IGV4cHJfbGlzdF9mb3JfZWFjaF9zeW0obCwgZSwgcykgXAorCWZvciAoZSA9IChsKTsgZSAmJiAo
cyA9IGUtPnJpZ2h0LnN5bSk7IGUgPSBlLT5sZWZ0LmV4cHIpCisKK3N0cnVjdCBleHByX3ZhbHVl
IHsKKwlzdHJ1Y3QgZXhwciAqZXhwcjsKKwl0cmlzdGF0ZSB0cmk7Cit9OworCitzdHJ1Y3Qgc3lt
Ym9sX3ZhbHVlIHsKKwl2b2lkICp2YWw7CisJdHJpc3RhdGUgdHJpOworfTsKKworZW51bSBzeW1i
b2xfdHlwZSB7CisJU19VTktOT1dOLCBTX0JPT0xFQU4sIFNfVFJJU1RBVEUsIFNfSU5ULCBTX0hF
WCwgU19TVFJJTkcKK307CisKKy8qIGVudW0gdmFsdWVzIGFyZSB1c2VkIGFzIGluZGV4IHRvIHN5
bWJvbC5kZWZbXSAqLworZW51bSB7CisJU19ERUZfVVNFUiwJCS8qIG1haW4gdXNlciB2YWx1ZSAq
LworCVNfREVGX0FVVE8sCQkvKiB2YWx1ZXMgcmVhZCBmcm9tIGF1dG8uY29uZiAqLworCVNfREVG
X0RFRjMsCQkvKiBSZXNlcnZlZCBmb3IgVUkgdXNhZ2UgKi8KKwlTX0RFRl9ERUY0LAkJLyogUmVz
ZXJ2ZWQgZm9yIFVJIHVzYWdlICovCisJU19ERUZfQ09VTlQKK307CisKKy8qCisgKiBSZXByZXNl
bnRzIGEgY29uZmlndXJhdGlvbiBzeW1ib2wuCisgKgorICogQ2hvaWNlcyBhcmUgcmVwcmVzZW50
ZWQgYXMgYSBzcGVjaWFsIGtpbmQgb2Ygc3ltYm9sIGFuZCBoYXZlIHRoZQorICogU1lNQk9MX0NI
T0lDRSBiaXQgc2V0IGluICdmbGFncycuCisgKi8KK3N0cnVjdCBzeW1ib2wgeworCS8qIFRoZSBu
ZXh0IHN5bWJvbCBpbiB0aGUgc2FtZSBidWNrZXQgaW4gdGhlIHN5bWJvbCBoYXNoIHRhYmxlICov
CisJc3RydWN0IHN5bWJvbCAqbmV4dDsKKworCS8qIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wsIGUu
Zy4gIkZPTyIgZm9yICdjb25maWcgRk9PJyAqLworCWNoYXIgKm5hbWU7CisKKwkvKiBTX0JPT0xF
QU4sIFNfVFJJU1RBVEUsIC4uLiAqLworCWVudW0gc3ltYm9sX3R5cGUgdHlwZTsKKworCS8qCisJ
ICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgb2YgdGhlIHN5bWJvbC4gVGhlIFNZTUJPTF9WQUxJRCBi
aXQgaXMgc2V0IGluCisJICogJ2ZsYWdzJyB3aGVuIHRoaXMgaXMgdXAgdG8gZGF0ZS4gTm90ZSB0
aGF0IHRoaXMgdmFsdWUgbWlnaHQgZGlmZmVyCisJICogZnJvbSB0aGUgdXNlciB2YWx1ZSBzZXQg
aW4gZS5nLiBhIC5jb25maWcgZmlsZSwgZHVlIHRvIHZpc2liaWxpdHkuCisJICovCisJc3RydWN0
IHN5bWJvbF92YWx1ZSBjdXJyOworCisJLyoKKwkgKiBWYWx1ZXMgZm9yIHRoZSBzeW1ib2wgcHJv
dmlkZWQgZnJvbSBvdXRzaWRlLiBkZWZbU19ERUZfVVNFUl0gaG9sZHMKKwkgKiB0aGUgLmNvbmZp
ZyB2YWx1ZS4KKwkgKi8KKwlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIGRlZltTX0RFRl9DT1VOVF07CisK
KwkvKgorCSAqIEFuIHVwcGVyIGJvdW5kIG9uIHRoZSB0cmlzdGF0ZSB2YWx1ZSB0aGUgdXNlciBj
YW4gc2V0IGZvciB0aGUgc3ltYm9sCisJICogaWYgaXQgaXMgYSBib29sZWFuIG9yIHRyaXN0YXRl
LiBDYWxjdWxhdGVkIGZyb20gcHJvbXB0IGRlcGVuZGVuY2llcywKKwkgKiB3aGljaCBhbHNvIGlu
aGVyaXQgZGVwZW5kZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9pY2VzLCBhbmQKKwkg
KiBpZnMuIElmICduJywgdGhlIHVzZXIgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgorCSAqCisJICog
U3ltYm9scyBsYWNraW5nIHByb21wdHMgYWx3YXlzIGhhdmUgdmlzaWJpbGl0eSAnbicuCisJICov
CisJdHJpc3RhdGUgdmlzaWJsZTsKKworCS8qIFNZTUJPTF8qIGZsYWdzICovCisJaW50IGZsYWdz
OworCisJLyogTGlzdCBvZiBwcm9wZXJ0aWVzLiBTZWUgcHJvcF90eXBlLiAqLworCXN0cnVjdCBw
cm9wZXJ0eSAqcHJvcDsKKworCS8qIERlcGVuZGVuY2llcyBmcm9tIGVuY2xvc2luZyBtZW51cywg
Y2hvaWNlcywgYW5kIGlmcyAqLworCXN0cnVjdCBleHByX3ZhbHVlIGRpcl9kZXA7CisKKwkvKiBS
ZXZlcnNlIGRlcGVuZGVuY2llcyB0aHJvdWdoIGJlaW5nIHNlbGVjdGVkIGJ5IG90aGVyIHN5bWJv
bHMgKi8KKwlzdHJ1Y3QgZXhwcl92YWx1ZSByZXZfZGVwOworCisJLyoKKwkgKiAiV2VhayIgcmV2
ZXJzZSBkZXBlbmRlbmNpZXMgdGhyb3VnaCBiZWluZyBpbXBsaWVkIGJ5IG90aGVyIHN5bWJvbHMK
KwkgKi8KKwlzdHJ1Y3QgZXhwcl92YWx1ZSBpbXBsaWVkOworfTsKKworI2RlZmluZSBmb3JfYWxs
X3N5bWJvbHMoaSwgc3ltKSBmb3IgKGkgPSAwOyBpIDwgU1lNQk9MX0hBU0hTSVpFOyBpKyspIGZv
ciAoc3ltID0gc3ltYm9sX2hhc2hbaV07IHN5bTsgc3ltID0gc3ltLT5uZXh0KQorCisjZGVmaW5l
IFNZTUJPTF9DT05TVCAgICAgIDB4MDAwMSAgLyogc3ltYm9sIGlzIGNvbnN0ICovCisjZGVmaW5l
IFNZTUJPTF9DSEVDSyAgICAgIDB4MDAwOCAgLyogdXNlZCBkdXJpbmcgZGVwZW5kZW5jeSBjaGVj
a2luZyAqLworI2RlZmluZSBTWU1CT0xfQ0hPSUNFICAgICAweDAwMTAgIC8qIHN0YXJ0IG9mIGEg
Y2hvaWNlIGJsb2NrIChudWxsIG5hbWUpICovCisjZGVmaW5lIFNZTUJPTF9DSE9JQ0VWQUwgIDB4
MDAyMCAgLyogdXNlZCBhcyBhIHZhbHVlIGluIGEgY2hvaWNlIGJsb2NrICovCisjZGVmaW5lIFNZ
TUJPTF9WQUxJRCAgICAgIDB4MDA4MCAgLyogc2V0IHdoZW4gc3ltYm9sLmN1cnIgaXMgY2FsY3Vs
YXRlZCAqLworI2RlZmluZSBTWU1CT0xfT1BUSU9OQUwgICAweDAxMDAgIC8qIGNob2ljZSBpcyBv
cHRpb25hbCAtIHZhbHVlcyBjYW4gYmUgJ24nICovCisjZGVmaW5lIFNZTUJPTF9XUklURSAgICAg
IDB4MDIwMCAgLyogd3JpdGUgc3ltYm9sIHRvIGZpbGUgKEtDT05GSUdfQ09ORklHKSAqLworI2Rl
ZmluZSBTWU1CT0xfQ0hBTkdFRCAgICAweDA0MDAgIC8qID8gKi8KKyNkZWZpbmUgU1lNQk9MX05P
X1dSSVRFICAgMHgxMDAwICAvKiBTeW1ib2wgZm9yIGludGVybmFsIHVzZSBvbmx5OyBpdCB3aWxs
IG5vdCBiZSB3cml0dGVuICovCisjZGVmaW5lIFNZTUJPTF9DSEVDS0VEICAgIDB4MjAwMCAgLyog
dXNlZCBkdXJpbmcgZGVwZW5kZW5jeSBjaGVja2luZyAqLworI2RlZmluZSBTWU1CT0xfV0FSTkVE
ICAgICAweDgwMDAgIC8qIHdhcm5pbmcgaGFzIGJlZW4gaXNzdWVkICovCisKKy8qIFNldCB3aGVu
IHN5bWJvbC5kZWZbXSBpcyB1c2VkICovCisjZGVmaW5lIFNZTUJPTF9ERUYgICAgICAgIDB4MTAw
MDAgIC8qIEZpcnN0IGJpdCBvZiBTWU1CT0xfREVGICovCisjZGVmaW5lIFNZTUJPTF9ERUZfVVNF
UiAgIDB4MTAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfVVNFUl0gaXMgdmFsaWQgKi8KKyNkZWZp
bmUgU1lNQk9MX0RFRl9BVVRPICAgMHgyMDAwMCAgLyogc3ltYm9sLmRlZltTX0RFRl9BVVRPXSBp
cyB2YWxpZCAqLworI2RlZmluZSBTWU1CT0xfREVGMyAgICAgICAweDQwMDAwICAvKiBzeW1ib2wu
ZGVmW1NfREVGXzNdIGlzIHZhbGlkICovCisjZGVmaW5lIFNZTUJPTF9ERUY0ICAgICAgIDB4ODAw
MDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfNF0gaXMgdmFsaWQgKi8KKworLyogY2hvaWNlIHZhbHVl
cyBuZWVkIHRvIGJlIHNldCBiZWZvcmUgY2FsY3VsYXRpbmcgdGhpcyBzeW1ib2wgdmFsdWUgKi8K
KyNkZWZpbmUgU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMgIDB4MTAwMDAwCisKKy8qIFNl
dCBzeW1ib2wgdG8geSBpZiBhbGxub2NvbmZpZzsgdXNlZCBmb3Igc3ltYm9scyB0aGF0IGhpZGUg
b3RoZXJzICovCisjZGVmaW5lIFNZTUJPTF9BTExOT0NPTkZJR19ZIDB4MjAwMDAwCisKKyNkZWZp
bmUgU1lNQk9MX01BWExFTkdUSAkyNTYKKyNkZWZpbmUgU1lNQk9MX0hBU0hTSVpFCQk5OTczCisK
Ky8qIEEgcHJvcGVydHkgcmVwcmVzZW50IHRoZSBjb25maWcgb3B0aW9ucyB0aGF0IGNhbiBiZSBh
c3NvY2lhdGVkCisgKiB3aXRoIGEgY29uZmlnICJzeW1ib2wiLgorICogU2FtcGxlOgorICogY29u
ZmlnIEZPTworICogICAgICAgICBkZWZhdWx0IHkKKyAqICAgICAgICAgcHJvbXB0ICJmb28gcHJv
bXB0IgorICogICAgICAgICBzZWxlY3QgQkFSCisgKiBjb25maWcgQkFaCisgKiAgICAgICAgIGlu
dCAiQkFaIFZhbHVlIgorICogICAgICAgICByYW5nZSAxLi4yNTUKKyAqCisgKiBQbGVhc2UsIGFs
c28gY2hlY2sgcGFyc2VyLnk6cHJpbnRfc3ltYm9sKCkgd2hlbiBtb2RpZnlpbmcgdGhlCisgKiBs
aXN0IG9mIHByb3BlcnR5IHR5cGVzIQorICovCitlbnVtIHByb3BfdHlwZSB7CisJUF9VTktOT1dO
LAorCVBfUFJPTVBULCAgIC8qIHByb21wdCAiZm9vIHByb21wdCIgb3IgIkJBWiBWYWx1ZSIgKi8K
KwlQX0NPTU1FTlQsICAvKiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1lbnQgKi8KKwlQX01F
TlUsICAgICAvKiBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIGEgbWVudSBvciBtZW51Y29uZmlnIHN5
bWJvbCAqLworCVBfREVGQVVMVCwgIC8qIGRlZmF1bHQgeSAqLworCVBfQ0hPSUNFLCAgIC8qIGNo
b2ljZSB2YWx1ZSAqLworCVBfU0VMRUNULCAgIC8qIHNlbGVjdCBCQVIgKi8KKwlQX0lNUExZLCAg
ICAvKiBpbXBseSBCQVIgKi8KKwlQX1JBTkdFLCAgICAvKiByYW5nZSA3Li4xMDAgKGZvciBhIHN5
bWJvbCkgKi8KKwlQX1NZTUJPTCwgICAvKiB3aGVyZSBhIHN5bWJvbCBpcyBkZWZpbmVkICovCit9
OworCitzdHJ1Y3QgcHJvcGVydHkgeworCXN0cnVjdCBwcm9wZXJ0eSAqbmV4dDsgICAgIC8qIG5l
eHQgcHJvcGVydHkgLSBudWxsIGlmIGxhc3QgKi8KKwlzdHJ1Y3Qgc3ltYm9sICpzeW07ICAgICAg
ICAvKiB0aGUgc3ltYm9sIGZvciB3aGljaCB0aGUgcHJvcGVydHkgaXMgYXNzb2NpYXRlZCAqLwor
CWVudW0gcHJvcF90eXBlIHR5cGU7ICAgICAgIC8qIHR5cGUgb2YgcHJvcGVydHkgKi8KKwljb25z
dCBjaGFyICp0ZXh0OyAgICAgICAgICAvKiB0aGUgcHJvbXB0IHZhbHVlIC0gUF9QUk9NUFQsIFBf
TUVOVSwgUF9DT01NRU5UICovCisJc3RydWN0IGV4cHJfdmFsdWUgdmlzaWJsZTsKKwlzdHJ1Y3Qg
ZXhwciAqZXhwcjsgICAgICAgICAvKiB0aGUgb3B0aW9uYWwgY29uZGl0aW9uYWwgcGFydCBvZiB0
aGUgcHJvcGVydHkgKi8KKwlzdHJ1Y3QgbWVudSAqbWVudTsgICAgICAgICAvKiB0aGUgbWVudSB0
aGUgcHJvcGVydHkgYXJlIGFzc29jaWF0ZWQgd2l0aAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIHZhbGlkIGZvcjogUF9TRUxFQ1QsIFBfUkFOR0UsIFBfQ0hPSUNFLAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqIFBfUFJPTVBULCBQX0RFRkFVTFQsIFBfTUVOVSwgUF9DT01N
RU5UICovCisJc3RydWN0IGZpbGUgKmZpbGU7ICAgICAgICAgLyogd2hhdCBmaWxlIHdhcyB0aGlz
IHByb3BlcnR5IGRlZmluZWQgKi8KKwlpbnQgbGluZW5vOyAgICAgICAgICAgICAgICAvKiB3aGF0
IGxpbmVubyB3YXMgdGhpcyBwcm9wZXJ0eSBkZWZpbmVkICovCit9OworCisjZGVmaW5lIGZvcl9h
bGxfcHJvcGVydGllcyhzeW0sIHN0LCB0b2spIFwKKwlmb3IgKHN0ID0gc3ltLT5wcm9wOyBzdDsg
c3QgPSBzdC0+bmV4dCkgXAorCQlpZiAoc3QtPnR5cGUgPT0gKHRvaykpCisjZGVmaW5lIGZvcl9h
bGxfZGVmYXVsdHMoc3ltLCBzdCkgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIFBfREVGQVVM
VCkKKyNkZWZpbmUgZm9yX2FsbF9jaG9pY2VzKHN5bSwgc3QpIGZvcl9hbGxfcHJvcGVydGllcyhz
eW0sIHN0LCBQX0NIT0lDRSkKKyNkZWZpbmUgZm9yX2FsbF9wcm9tcHRzKHN5bSwgc3QpIFwKKwlm
b3IgKHN0ID0gc3ltLT5wcm9wOyBzdDsgc3QgPSBzdC0+bmV4dCkgXAorCQlpZiAoc3QtPnRleHQp
CisKKy8qCisgKiBSZXByZXNlbnRzIGEgbm9kZSBpbiB0aGUgbWVudSB0cmVlLCBhcyBzZWVuIGlu
IGUuZy4gbWVudWNvbmZpZyAodGhvdWdoIHVzZWQKKyAqIGZvciBhbGwgZnJvbnQgZW5kcykuIEVh
Y2ggc3ltYm9sLCBtZW51LCBldGMuIGRlZmluZWQgaW4gdGhlIEtjb25maWcgZmlsZXMKKyAqIGdl
dHMgYSBub2RlLiBBIHN5bWJvbCBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucyBnZXRzIG9u
ZSBub2RlIGF0IGVhY2gKKyAqIGxvY2F0aW9uLgorICovCitzdHJ1Y3QgbWVudSB7CisJLyogVGhl
IG5leHQgbWVudSBub2RlIGF0IHRoZSBzYW1lIGxldmVsICovCisJc3RydWN0IG1lbnUgKm5leHQ7
CisKKwkvKiBUaGUgcGFyZW50IG1lbnUgbm9kZSwgY29ycmVzcG9uZGluZyB0byBlLmcuIGEgbWVu
dSBvciBjaG9pY2UgKi8KKwlzdHJ1Y3QgbWVudSAqcGFyZW50OworCisJLyogVGhlIGZpcnN0IGNo
aWxkIG1lbnUgbm9kZSwgZm9yIGUuZy4gbWVudXMgYW5kIGNob2ljZXMgKi8KKwlzdHJ1Y3QgbWVu
dSAqbGlzdDsKKworCS8qCisJICogVGhlIHN5bWJvbCBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbnUg
bm9kZS4gQ2hvaWNlcyBhcmUgaW1wbGVtZW50ZWQgYXMKKwkgKiBhIHNwZWNpYWwga2luZCBvZiBz
eW1ib2wuIE5VTEwgZm9yIG1lbnVzLCBjb21tZW50cywgYW5kIGlmcy4KKwkgKi8KKwlzdHJ1Y3Qg
c3ltYm9sICpzeW07CisKKwkvKgorCSAqIFRoZSBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBu
b2RlLiBUaGlzIGhvbGRzIHRoZSBwcm9tcHQgZm9yIGEKKwkgKiBzeW1ib2wgYXMgd2VsbCBhcyB0
aGUgdGV4dCBmb3IgYSBtZW51IG9yIGNvbW1lbnQsIGFsb25nIHdpdGggdGhlCisJICogdHlwZSAo
UF9QUk9NUFQsIFBfTUVOVSwgZXRjLikKKwkgKi8KKwlzdHJ1Y3QgcHJvcGVydHkgKnByb21wdDsK
KworCS8qCisJICogJ3Zpc2libGUgaWYnIGRlcGVuZGVuY2llcy4gSWYgbW9yZSB0aGFuIG9uZSBp
cyBnaXZlbiwgdGhleSB3aWxsIGJlCisJICogQU5EZWQgdG9nZXRoZXIuCisJICovCisJc3RydWN0
IGV4cHIgKnZpc2liaWxpdHk7CisKKwkvKgorCSAqIE9yZGluYXJ5IGRlcGVuZGVuY2llcyBmcm9t
IGUuZy4gJ2RlcGVuZHMgb24nIGFuZCAnaWYnLCBBTkRlZAorCSAqIHRvZ2V0aGVyCisJICovCisJ
c3RydWN0IGV4cHIgKmRlcDsKKworCS8qIE1FTlVfKiBmbGFncyAqLworCXVuc2lnbmVkIGludCBm
bGFnczsKKworCS8qIEFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlICovCisJ
Y2hhciAqaGVscDsKKworCS8qIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgbWVudSBub2RlIGFwcGVh
cnMgaW4gdGhlIEtjb25maWcgZmlsZXMgKi8KKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgbGlu
ZW5vOworCisJLyogRm9yIHVzZSBieSBmcm9udCBlbmRzIHRoYXQgbmVlZCB0byBzdG9yZSBhdXhp
bGlhcnkgZGF0YSAqLworCXZvaWQgKmRhdGE7Cit9OworCisvKgorICogU2V0IG9uIGEgbWVudSBu
b2RlIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9sIGNoYW5nZXMgc3RhdGUgaW4gc29tZSB3
YXkuCisgKiBDYW4gYmUgY2hlY2tlZCBieSBmcm9udCBlbmRzLgorICovCisjZGVmaW5lIE1FTlVf
Q0hBTkdFRAkJMHgwMDAxCisKKyNkZWZpbmUgTUVOVV9ST09UCQkweDAwMDIKKworc3RydWN0IGp1
bXBfa2V5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJpZXM7CisJc2l6ZV90IG9mZnNldDsKKwlz
dHJ1Y3QgbWVudSAqdGFyZ2V0OworCWludCBpbmRleDsKK307CisKKyNkZWZpbmUgSlVNUF9OQgkJ
CTkKKworZXh0ZXJuIHN0cnVjdCBmaWxlICpmaWxlX2xpc3Q7CitleHRlcm4gc3RydWN0IGZpbGUg
KmN1cnJlbnRfZmlsZTsKK3N0cnVjdCBmaWxlICpsb29rdXBfZmlsZShjb25zdCBjaGFyICpuYW1l
KTsKKworZXh0ZXJuIHN0cnVjdCBzeW1ib2wgc3ltYm9sX3llcywgc3ltYm9sX25vLCBzeW1ib2xf
bW9kOworZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKm1vZHVsZXNfc3ltOworZXh0ZXJuIHN0cnVjdCBz
eW1ib2wgKnN5bV9kZWZjb25maWdfbGlzdDsKK2V4dGVybiBpbnQgY2RlYnVnOworc3RydWN0IGV4
cHIgKmV4cHJfYWxsb2Nfc3ltYm9sKHN0cnVjdCBzeW1ib2wgKnN5bSk7CitzdHJ1Y3QgZXhwciAq
ZXhwcl9hbGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmNlKTsKK3N0
cnVjdCBleHByICpleHByX2FsbG9jX3R3byhlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhw
ciAqZTEsIHN0cnVjdCBleHByICplMik7CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19jb21wKGVu
dW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnMxLCBzdHJ1Y3Qgc3ltYm9sICpzMik7
CitzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhw
ciAqZTIpOworc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfb3Ioc3RydWN0IGV4cHIgKmUxLCBzdHJ1
Y3QgZXhwciAqZTIpOworc3RydWN0IGV4cHIgKmV4cHJfY29weShjb25zdCBzdHJ1Y3QgZXhwciAq
b3JnKTsKK3ZvaWQgZXhwcl9mcmVlKHN0cnVjdCBleHByICplKTsKK3ZvaWQgZXhwcl9lbGltaW5h
dGVfZXEoc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsKK3RyaXN0YXRlIGV4
cHJfY2FsY192YWx1ZShzdHJ1Y3QgZXhwciAqZSk7CitzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19i
b29sKHN0cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX2VsaW1pbmF0ZV9kdXBzKHN0
cnVjdCBleHByICplKTsKK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAq
ZSk7CitpbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5
bWJvbCAqc3ltKTsKK2Jvb2wgZXhwcl9kZXBlbmRzX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBz
dHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNfY29tcGFyZShzdHJ1
Y3QgZXhwciAqZSwgZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltKTsKKwor
dm9pZCBleHByX2ZwcmludChzdHJ1Y3QgZXhwciAqZSwgRklMRSAqb3V0KTsKK3N0cnVjdCBnc3Ry
OyAvKiBmb3J3YXJkICovCit2b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3Ry
dWN0IGdzdHIgKmdzKTsKK3ZvaWQgZXhwcl9nc3RyX3ByaW50X3JldmRlcChzdHJ1Y3QgZXhwciAq
ZSwgc3RydWN0IGdzdHIgKmdzLAorCQkJICAgIHRyaXN0YXRlIHByX3R5cGUsIGNvbnN0IGNoYXIg
KnRpdGxlKTsKKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc195ZXMoc3RydWN0IGV4cHIgKmUp
Cit7CisJcmV0dXJuICFlIHx8IChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQuc3ltID09
ICZzeW1ib2xfeWVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZXhwcl9pc19ubyhzdHJ1Y3Qg
ZXhwciAqZSkKK3sKKwlyZXR1cm4gZSAmJiAoZS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlLT5sZWZ0
LnN5bSA9PSAmc3ltYm9sX25vKTsKK30KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYK
KworI2VuZGlmIC8qIEVYUFJfSCAqLwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2ZpeGRl
cC5jIGIvc3VwcG9ydC9rY29uZmlnL2ZpeGRlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk3YWZiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvZml4
ZGVwLmMKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiAiT3B0aW1pemUiIGEgbGlzdCBvZiBkZXBl
bmRlbmNpZXMgYXMgc3BpdCBvdXQgYnkgZ2NjIC1NRAorICogZm9yIHRoZSBrZXJuZWwgYnVpbGQK
KyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIEF1dGhvciAgICAgICBLYWkgR2VybWFzY2hl
d3NraQorICogQ29weXJpZ2h0ICAgIDIwMDIgYnkgS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2Vy
bWFzY2hld3NraUBnbXguZGU+CisgKgorICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQg
ZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcworICogb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KKyAqCisg
KgorICogSW50cm9kdWN0aW9uOgorICoKKyAqIGdjYyBwcm9kdWNlcyBhIHZlcnkgbmljZSBhbmQg
Y29ycmVjdCBsaXN0IG9mIGRlcGVuZGVuY2llcyB3aGljaAorICogdGVsbHMgbWFrZSB3aGVuIHRv
IHJlbWFrZSBhIGZpbGUuCisgKgorICogVG8gdXNlIHRoaXMgbGlzdCBhcy1pcyBob3dldmVyIGhh
cyB0aGUgZHJhd2JhY2sgdGhhdCB2aXJ0dWFsbHkKKyAqIGV2ZXJ5IGZpbGUgaW4gdGhlIGtlcm5l
bCBpbmNsdWRlcyBhdXRvY29uZi5oLgorICoKKyAqIElmIHRoZSB1c2VyIHJlLXJ1bnMgbWFrZSAq
Y29uZmlnLCBhdXRvY29uZi5oIHdpbGwgYmUKKyAqIHJlZ2VuZXJhdGVkLiAgbWFrZSBub3RpY2Vz
IHRoYXQgYW5kIHdpbGwgcmVidWlsZCBldmVyeSBmaWxlIHdoaWNoCisgKiBpbmNsdWRlcyBhdXRv
Y29uZi5oLCBpLmUuIGJhc2ljYWxseSBhbGwgZmlsZXMuIFRoaXMgaXMgZXh0cmVtZWx5CisgKiBh
bm5veWluZyBpZiB0aGUgdXNlciBqdXN0IGNoYW5nZWQgQ09ORklHX0hJU19EUklWRVIgZnJvbSBu
IHRvIG0uCisgKgorICogU28gd2UgcGxheSB0aGUgc2FtZSB0cmljayB0aGF0ICJta2RlcCIgcGxh
eWVkIGJlZm9yZS4gV2UgcmVwbGFjZQorICogdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBi
eSBhIGRlcGVuZGVuY3kgb24gZXZlcnkgY29uZmlnCisgKiBvcHRpb24gd2hpY2ggaXMgbWVudGlv
bmVkIGluIGFueSBvZiB0aGUgbGlzdGVkIHByZXJlcXVpc2l0ZXMuCisgKgorICoga2NvbmZpZyBw
b3B1bGF0ZXMgYSB0cmVlIGluIGluY2x1ZGUvY29uZmlnLyB3aXRoIGFuIGVtcHR5IGZpbGUKKyAq
IGZvciBlYWNoIGNvbmZpZyBzeW1ib2wgYW5kIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdXBk
YXRlZAorICogdGhlIGZpbGVzIHJlcHJlc2VudGluZyBjaGFuZ2VkIGNvbmZpZyBvcHRpb25zIGFy
ZSB0b3VjaGVkCisgKiB3aGljaCB0aGVuIGxldCBtYWtlIHBpY2sgdXAgdGhlIGNoYW5nZXMgYW5k
IHRoZSBmaWxlcyB0aGF0IHVzZQorICogdGhlIGNvbmZpZyBzeW1ib2xzIGFyZSByZWJ1aWx0Lgor
ICoKKyAqIFNvIGlmIHRoZSB1c2VyIGNoYW5nZXMgaGlzIENPTkZJR19ISVNfRFJJVkVSIG9wdGlv
biwgb25seSB0aGUgb2JqZWN0cworICogd2hpY2ggZGVwZW5kIG9uICJpbmNsdWRlL2NvbmZpZy9o
aXMvZHJpdmVyLmgiIHdpbGwgYmUgcmVidWlsdCwKKyAqIHNvIG1vc3QgbGlrZWx5IG9ubHkgaGlz
IGRyaXZlciA7LSkKKyAqCisgKiBUaGUgaWRlYSBhYm92ZSBkYXRlcywgYnkgdGhlIHdheSwgYmFj
ayB0byBNaWNoYWVsIEUgQ2hhc3RhaW4sIEFGQUlLLgorICoKKyAqIFNvIHRvIGdldCBkZXBlbmRl
bmNpZXMgcmlnaHQsIHRoZXJlIGFyZSB0d28gaXNzdWVzOgorICogbyBpZiBhbnkgb2YgdGhlIGZp
bGVzIHRoZSBjb21waWxlciByZWFkIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVidWlsZAorICogbyBp
ZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVuIHRvIHRoZSBjb21waWxlIHRoZSBmaWxlIGNoYW5nZWQs
IHdlCisgKiAgIGJldHRlciByZWJ1aWxkIGFzIHdlbGwuCisgKgorICogVGhlIGZvcm1lciBpcyBo
YW5kbGVkIGJ5IHVzaW5nIHRoZSAtTUQgb3V0cHV0LCB0aGUgbGF0ZXIgYnkgc2F2aW5nCisgKiB0
aGUgY29tbWFuZCBsaW5lIHVzZWQgdG8gY29tcGlsZSB0aGUgb2xkIG9iamVjdCBhbmQgY29tcGFy
aW5nIGl0CisgKiB0byB0aGUgb25lIHdlIHdvdWxkIG5vdyB1c2UuCisgKgorICogQWdhaW4sIGFs
c28gdGhpcyBpZGVhIGlzIHByZXR0eSBvbGQgYW5kIGhhcyBiZWVuIGRpc2N1c3NlZCBvbgorICog
a2J1aWxkLWRldmVsIGEgbG9uZyB0aW1lIGFnby4gSSBkb24ndCBoYXZlIGEgc2Vuc2libHkgd29y
a2luZworICogaW50ZXJuZXQgY29ubmVjdGlvbiByaWdodCBub3csIHNvIEkgcmF0aGVyIGRvbid0
IG1lbnRpb24gbmFtZXMKKyAqIHdpdGhvdXQgZG91YmxlIGNoZWNraW5nLgorICoKKyAqIFRoaXMg
Y29kZSBoZXJlIGhhcyBiZWVuIGJhc2VkIHBhcnRpYWxseSBiYXNlZCBvbiBta2RlcC5jLCB3aGlj
aAorICogc2F5cyB0aGUgZm9sbG93aW5nIGFib3V0IGl0cyBoaXN0b3J5OgorICoKKyAqICAgQ29w
eXJpZ2h0IGFiYW5kb25lZCwgTWljaGFlbCBDaGFzdGFpbiwgPG1haWx0bzptZWNAc2hvdXQubmV0
Pi4KKyAqICAgVGhpcyBpcyBhIEMgdmVyc2lvbiBvZiBzeW5jZGVwLnBsIGJ5IFdlcm5lciBBbG1l
c2Jlcmdlci4KKyAqCisgKgorICogSXQgaXMgaW52b2tlZCBhcworICoKKyAqICAgZml4ZGVwIDxk
ZXBmaWxlPiA8dGFyZ2V0PiA8Y21kbGluZT4KKyAqCisgKiBhbmQgd2lsbCByZWFkIHRoZSBkZXBl
bmRlbmN5IGZpbGUgPGRlcGZpbGU+CisgKgorICogVGhlIHRyYW5zZm9ybWVkIGRlcGVuZGVuY3kg
c25pcHBlZCBpcyB3cml0dGVuIHRvIHN0ZG91dC4KKyAqCisgKiBJdCBmaXJzdCBnZW5lcmF0ZXMg
YSBsaW5lCisgKgorICogICBjbWRfPHRhcmdldD4gPSA8Y21kbGluZT4KKyAqCisgKiBhbmQgdGhl
biBiYXNpY2FsbHkgY29waWVzIHRoZSAuPHRhcmdldD4uZCBmaWxlIHRvIHN0ZG91dCwgaW4gdGhl
CisgKiBwcm9jZXNzIGZpbHRlcmluZyBvdXQgdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBh
bmQgYWRkaW5nCisgKiBkZXBlbmRlbmNpZXMgb24gaW5jbHVkZS9jb25maWcvbXkvb3B0aW9uLmgg
Zm9yIGV2ZXJ5CisgKiBDT05GSUdfTVlfT1BUSU9OIGVuY291bnRlcmVkIGluIGFueSBvZiB0aGUg
cHJlcmVxdWlzaXRlcy4KKyAqCisgKiBJdCB3aWxsIGFsc28gZmlsdGVyIG91dCBhbGwgdGhlIGRl
cGVuZGVuY2llcyBvbiAqLnZlci4gV2UgbmVlZAorICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGdl
bmVyYXRlZCB2ZXJzaW9uIGNoZWNrc3VtIGFyZSBnbG9iYWxseSB1cAorICogdG8gZGF0ZSBiZWZv
cmUgZXZlbiBzdGFydGluZyB0aGUgcmVjdXJzaXZlIGJ1aWxkLCBzbyBpdCdzIHRvbyBsYXRlCisg
KiBhdCB0aGlzIHBvaW50IGFueXdheS4KKyAqCisgKiBXZSBkb24ndCBldmVuIHRyeSB0byByZWFs
bHkgcGFyc2UgdGhlIGhlYWRlciBmaWxlcywgYnV0CisgKiBtZXJlbHkgZ3JlcCwgaS5lLiBpZiBD
T05GSUdfRk9PIGlzIG1lbnRpb25lZCBpbiBhIGNvbW1lbnQsIGl0IHdpbGwKKyAqIGJlIHBpY2tl
ZCB1cCBhcyB3ZWxsLiBJdCdzIG5vdCBhIHByb2JsZW0gd2l0aCByZXNwZWN0IHRvCisgKiBjb3Jy
ZWN0bmVzcywgc2luY2UgdGhhdCBjYW4gb25seSBnaXZlIHRvbyBtYW55IGRlcGVuZGVuY2llcywg
dGh1cworICogd2UgY2Fubm90IG1pc3MgYSByZWJ1aWxkLiBTaW5jZSBwZW9wbGUgdGVuZCB0byBu
b3QgbWVudGlvbiB0b3RhbGx5CisgKiB1bnJlbGF0ZWQgQ09ORklHXyBvcHRpb25zIGFsbCBvdmVy
IHRoZSBwbGFjZSwgaXQncyBub3QgYW4KKyAqIGVmZmljaWVuY3kgcHJvYmxlbSBlaXRoZXIuCisg
KgorICogKE5vdGU6IGl0J2QgYmUgZWFzeSB0byBwb3J0IG92ZXIgdGhlIGNvbXBsZXRlIG1rZGVw
IHN0YXRlIG1hY2hpbmUsCisgKiAgYnV0IEkgZG9uJ3QgdGhpbmsgdGhlIGFkZGVkIGNvbXBsZXhp
dHkgaXMgd29ydGggaXQpCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUg
PHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisJZnBy
aW50ZihzdGRlcnIsICJVc2FnZTogZml4ZGVwIDxkZXBmaWxlPiA8dGFyZ2V0PiA8Y21kbGluZT5c
biIpOworCWV4aXQoMSk7Cit9CisKKy8qCisgKiBQcmludCBvdXQgYSBkZXBlbmRlbmN5IHBhdGgg
ZnJvbSBhIHN5bWJvbCBuYW1lCisgKi8KK3N0YXRpYyB2b2lkIHByaW50X2RlcChjb25zdCBjaGFy
ICptLCBpbnQgc2xlbiwgY29uc3QgY2hhciAqZGlyKQoreworCWludCBjLCBwcmV2X2MgPSAnLycs
IGk7CisKKwlwcmludGYoIiAgICAkKHdpbGRjYXJkICVzLyIsIGRpcik7CisJZm9yIChpID0gMDsg
aSA8IHNsZW47IGkrKykgeworCQljID0gbVtpXTsKKwkJaWYgKGMgPT0gJ18nKQorCQkJYyA9ICcv
JzsKKwkJZWxzZQorCQkJYyA9IHRvbG93ZXIoYyk7CisJCWlmIChjICE9ICcvJyB8fCBwcmV2X2Mg
IT0gJy8nKQorCQkJcHV0Y2hhcihjKTsKKwkJcHJldl9jID0gYzsKKwl9CisJcHJpbnRmKCIuaCkg
XFxcbiIpOworfQorCitzdHJ1Y3QgaXRlbSB7CisJc3RydWN0IGl0ZW0JKm5leHQ7CisJdW5zaWdu
ZWQgaW50CWxlbjsKKwl1bnNpZ25lZCBpbnQJaGFzaDsKKwljaGFyCQluYW1lWzBdOworfTsKKwor
I2RlZmluZSBIQVNIU1ogMjU2CitzdGF0aWMgc3RydWN0IGl0ZW0gKmhhc2h0YWJbSEFTSFNaXTsK
Kworc3RhdGljIHVuc2lnbmVkIGludCBzdHJoYXNoKGNvbnN0IGNoYXIgKnN0ciwgdW5zaWduZWQg
aW50IHN6KQoreworCS8qIGZudjMyIGhhc2ggKi8KKwl1bnNpZ25lZCBpbnQgaSwgaGFzaCA9IDIx
NjYxMzYyNjFVOworCisJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspCisJCWhhc2ggPSAoaGFzaCBe
IHN0cltpXSkgKiAweDAxMDAwMTkzOworCXJldHVybiBoYXNoOworfQorCisvKgorICogTG9va3Vw
IGEgdmFsdWUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gc3RyaW5nLgorICovCitzdGF0aWMgaW50IGlz
X2RlZmluZWRfY29uZmlnKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGludCBo
YXNoKQoreworCXN0cnVjdCBpdGVtICphdXg7CisKKwlmb3IgKGF1eCA9IGhhc2h0YWJbaGFzaCAl
IEhBU0hTWl07IGF1eDsgYXV4ID0gYXV4LT5uZXh0KSB7CisJCWlmIChhdXgtPmhhc2ggPT0gaGFz
aCAmJiBhdXgtPmxlbiA9PSBsZW4gJiYKKwkJICAgIG1lbWNtcChhdXgtPm5hbWUsIG5hbWUsIGxl
bikgPT0gMCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFkZCBh
IG5ldyB2YWx1ZSB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJpbmcuCisgKi8KK3N0YXRpYyB2b2lk
IGRlZmluZV9jb25maWcoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhh
c2gpCit7CisJc3RydWN0IGl0ZW0gKmF1eCA9IG1hbGxvYyhzaXplb2YoKmF1eCkgKyBsZW4pOwor
CisJaWYgKCFhdXgpIHsKKwkJcGVycm9yKCJmaXhkZXA6bWFsbG9jIik7CisJCWV4aXQoMSk7CisJ
fQorCW1lbWNweShhdXgtPm5hbWUsIG5hbWUsIGxlbik7CisJYXV4LT5sZW4gPSBsZW47CisJYXV4
LT5oYXNoID0gaGFzaDsKKwlhdXgtPm5leHQgPSBoYXNodGFiW2hhc2ggJSBIQVNIU1pdOworCWhh
c2h0YWJbaGFzaCAlIEhBU0hTWl0gPSBhdXg7Cit9CisKKy8qCisgKiBSZWNvcmQgdGhlIHVzZSBv
ZiBhIENPTkZJR18qIHdvcmQuCisgKi8KK3N0YXRpYyB2b2lkIHVzZV9jb25maWcoY29uc3QgY2hh
ciAqbSwgaW50IHNsZW4pCit7CisJdW5zaWduZWQgaW50IGhhc2ggPSBzdHJoYXNoKG0sIHNsZW4p
OworCisJaWYgKGlzX2RlZmluZWRfY29uZmlnKG0sIHNsZW4sIGhhc2gpKQorCSAgICByZXR1cm47
CisKKwlkZWZpbmVfY29uZmlnKG0sIHNsZW4sIGhhc2gpOworCXByaW50X2RlcChtLCBzbGVuLCAi
aW5jbHVkZS9jb25maWciKTsKK30KKworLyogdGVzdCBpZiBzIGVuZHMgaW4gc3ViICovCitzdGF0
aWMgaW50IHN0cl9lbmRzX3dpdGgoY29uc3QgY2hhciAqcywgaW50IHNsZW4sIGNvbnN0IGNoYXIg
KnN1YikKK3sKKwlpbnQgc3VibGVuID0gc3RybGVuKHN1Yik7CisKKwlpZiAoc3VibGVuID4gc2xl
bikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gIW1lbWNtcChzICsgc2xlbiAtIHN1Ymxlbiwgc3Vi
LCBzdWJsZW4pOworfQorCitzdGF0aWMgdm9pZCBwYXJzZV9jb25maWdfZmlsZShjb25zdCBjaGFy
ICpwKQoreworCWNvbnN0IGNoYXIgKnEsICpyOworCWNvbnN0IGNoYXIgKnN0YXJ0ID0gcDsKKwor
CXdoaWxlICgocCA9IHN0cnN0cihwLCAiQ09ORklHXyIpKSkgeworCQlpZiAocCA+IHN0YXJ0ICYm
IChpc2FsbnVtKHBbLTFdKSB8fCBwWy0xXSA9PSAnXycpKSB7CisJCQlwICs9IDc7CisJCQljb250
aW51ZTsKKwkJfQorCQlwICs9IDc7CisJCXEgPSBwOworCQl3aGlsZSAoKnEgJiYgKGlzYWxudW0o
KnEpIHx8ICpxID09ICdfJykpCisJCQlxKys7CisJCWlmIChzdHJfZW5kc193aXRoKHAsIHEgLSBw
LCAiX01PRFVMRSIpKQorCQkJciA9IHEgLSA3OworCQllbHNlCisJCQlyID0gcTsKKwkJaWYgKHIg
PiBwKQorCQkJdXNlX2NvbmZpZyhwLCByIC0gcCk7CisJCXAgPSBxOworCX0KK30KKworc3RhdGlj
IHZvaWQgKnJlYWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBz
dDsKKwlpbnQgZmQ7CisJY2hhciAqYnVmOworCisJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05M
WSk7CisJaWYgKGZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3Igb3Bl
bmluZyBmaWxlOiAiKTsKKwkJcGVycm9yKGZpbGVuYW1lKTsKKwkJZXhpdCgyKTsKKwl9CisJaWYg
KGZzdGF0KGZkLCAmc3QpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3Ig
ZnN0YXQnaW5nIGZpbGU6ICIpOworCQlwZXJyb3IoZmlsZW5hbWUpOworCQlleGl0KDIpOworCX0K
KwlidWYgPSBtYWxsb2Moc3Quc3Rfc2l6ZSArIDEpOworCWlmICghYnVmKSB7CisJCXBlcnJvcigi
Zml4ZGVwOiBtYWxsb2MiKTsKKwkJZXhpdCgyKTsKKwl9CisJaWYgKHJlYWQoZmQsIGJ1Ziwgc3Qu
c3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSkgeworCQlwZXJyb3IoImZpeGRlcDogcmVhZCIpOworCQll
eGl0KDIpOworCX0KKwlidWZbc3Quc3Rfc2l6ZV0gPSAnXDAnOworCWNsb3NlKGZkKTsKKworCXJl
dHVybiBidWY7Cit9CisKKy8qIElnbm9yZSBjZXJ0YWluIGRlcGVuZGVuY2llcyAqLworc3RhdGlj
IGludCBpc19pZ25vcmVkX2ZpbGUoY29uc3QgY2hhciAqcywgaW50IGxlbikKK3sKKwlyZXR1cm4g
c3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIikgfHwK
KwkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5
bXMuaCIpIHx8CisJICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiYnVpbGQvaW5jbHVkZS91
ay9fY29uZmlnLmgiKSB8fAorCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgIi52ZXIiKTsK
K30KKworLyoKKyAqIEltcG9ydGFudDogVGhlIGJlbG93IGdlbmVyYXRlZCBzb3VyY2VfZm9vLm8g
YW5kIGRlcHNfZm9vLm8gdmFyaWFibGUKKyAqIGFzc2lnbm1lbnRzIGFyZSBwYXJzZWQgbm90IG9u
bHkgYnkgbWFrZSwgYnV0IGFsc28gYnkgdGhlIHJhdGhlciBzaW1wbGUKKyAqIHBhcnNlciBpbiBz
Y3JpcHRzL21vZC9zdW12ZXJzaW9uLmMuCisgKi8KK3N0YXRpYyB2b2lkIHBhcnNlX2RlcF9maWxl
KGNoYXIgKm0sIGNvbnN0IGNoYXIgKnRhcmdldCkKK3sKKwljaGFyICpwOworCWludCBpc19sYXN0
LCBpc190YXJnZXQ7CisJaW50IHNhd19hbnlfdGFyZ2V0ID0gMDsKKwlpbnQgaXNfZmlyc3RfZGVw
ID0gMDsKKwl2b2lkICpidWY7CisKKwl3aGlsZSAoMSkgeworCQkvKiBTa2lwIGFueSAid2hpdGUg
c3BhY2UiICovCisJCXdoaWxlICgqbSA9PSAnICcgfHwgKm0gPT0gJ1xcJyB8fCAqbSA9PSAnXG4n
KQorCQkJbSsrOworCisJCWlmICghKm0pCisJCQlicmVhazsKKworCQkvKiBGaW5kIG5leHQgIndo
aXRlIHNwYWNlIiAqLworCQlwID0gbTsKKwkJd2hpbGUgKCpwICYmICpwICE9ICcgJyAmJiAqcCAh
PSAnXFwnICYmICpwICE9ICdcbicpCisJCQlwKys7CisJCWlzX2xhc3QgPSAoKnAgPT0gJ1wwJyk7
CisJCS8qIElzIHRoZSB0b2tlbiB3ZSBmb3VuZCBhIHRhcmdldCBuYW1lPyAqLworCQlpc190YXJn
ZXQgPSAoKihwLTEpID09ICc6Jyk7CisJCS8qIERvbid0IHdyaXRlIGFueSB0YXJnZXQgbmFtZXMg
aW50byB0aGUgZGVwZW5kZW5jeSBmaWxlICovCisJCWlmIChpc190YXJnZXQpIHsKKwkJCS8qIFRo
ZSAvbmV4dC8gZmlsZSBpcyB0aGUgZmlyc3QgZGVwZW5kZW5jeSAqLworCQkJaXNfZmlyc3RfZGVw
ID0gMTsKKwkJfSBlbHNlIGlmICghaXNfaWdub3JlZF9maWxlKG0sIHAgLSBtKSkgeworCQkJKnAg
PSAnXDAnOworCisJCQkvKgorCQkJICogRG8gbm90IGxpc3QgdGhlIHNvdXJjZSBmaWxlIGFzIGRl
cGVuZGVuY3ksIHNvIHRoYXQKKwkJCSAqIGtidWlsZCBpcyBub3QgY29uZnVzZWQgaWYgYSAuYyBm
aWxlIGlzIHJld3JpdHRlbgorCQkJICogaW50byAuUyBvciB2aWNlIHZlcnNhLiBTdG9yaW5nIGl0
IGluIHNvdXJjZV8qIGlzCisJCQkgKiBuZWVkZWQgZm9yIG1vZHBvc3QgdG8gY29tcHV0ZSBzcmN2
ZXJzaW9ucy4KKwkJCSAqLworCQkJaWYgKGlzX2ZpcnN0X2RlcCkgeworCQkJCS8qCisJCQkJICog
SWYgcHJvY2Vzc2luZyB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtdWx0aXBsZQorCQkJCSAqIGRlcGVu
ZGVuY3kgZmlsZXMsIG9ubHkgcHJvY2VzcyB0aGUgZmlyc3QKKwkJCQkgKiB0YXJnZXQgbmFtZSwg
d2hpY2ggd2lsbCBiZSB0aGUgb3JpZ2luYWwKKwkJCQkgKiBzb3VyY2UgbmFtZSwgYW5kIGlnbm9y
ZSBhbnkgb3RoZXIgdGFyZ2V0CisJCQkJICogbmFtZXMsIHdoaWNoIHdpbGwgYmUgaW50ZXJtZWRp
YXRlIHRlbXBvcmFyeQorCQkJCSAqIGZpbGVzLgorCQkJCSAqLworCQkJCWlmICghc2F3X2FueV90
YXJnZXQpIHsKKwkJCQkJc2F3X2FueV90YXJnZXQgPSAxOworCQkJCQlwcmludGYoInNvdXJjZV8l
cyA6PSAlc1xuXG4iLAorCQkJCQkgICAgICAgdGFyZ2V0LCBtKTsKKwkJCQkJcHJpbnRmKCJkZXBz
XyVzIDo9IFxcXG4iLCB0YXJnZXQpOworCQkJCX0KKwkJCQlpc19maXJzdF9kZXAgPSAwOworCQkJ
fSBlbHNlIHsKKwkJCQlwcmludGYoIiAgJXMgXFxcbiIsIG0pOworCQkJfQorCisJCQlidWYgPSBy
ZWFkX2ZpbGUobSk7CisJCQlwYXJzZV9jb25maWdfZmlsZShidWYpOworCQkJZnJlZShidWYpOwor
CQl9CisKKwkJaWYgKGlzX2xhc3QpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBTdGFydCBzZWFy
Y2hpbmcgZm9yIG5leHQgdG9rZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGZpcnN0CisJCSAqICJ3
aGl0ZXNwYWNlIiBjaGFyYWN0ZXIgdGhhdCBmb2xsb3dzIHRoaXMgdG9rZW4uCisJCSAqLworCQlt
ID0gcCArIDE7CisJfQorCisJaWYgKCFzYXdfYW55X3RhcmdldCkgeworCQlmcHJpbnRmKHN0ZGVy
ciwgImZpeGRlcDogcGFyc2UgZXJyb3I7IG5vIHRhcmdldHMgZm91bmRcbiIpOworCQlleGl0KDEp
OworCX0KKworCXByaW50ZigiXG4lczogJChkZXBzXyVzKVxuXG4iLCB0YXJnZXQsIHRhcmdldCk7
CisJcHJpbnRmKCIkKGRlcHNfJXMpOlxuIiwgdGFyZ2V0KTsKK30KKworaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBjaGFyICpkZXBmaWxlLCAqdGFyZ2V0LCAqY21k
bGluZTsKKwl2b2lkICpidWY7CisKKwlpZiAoYXJnYyAhPSA0KQorCQl1c2FnZSgpOworCisJZGVw
ZmlsZSA9IGFyZ3ZbMV07CisJdGFyZ2V0ID0gYXJndlsyXTsKKwljbWRsaW5lID0gYXJndlszXTsK
KworCXByaW50ZigiY21kXyVzIDo9ICVzXG5cbiIsIHRhcmdldCwgY21kbGluZSk7CisKKwlidWYg
PSByZWFkX2ZpbGUoZGVwZmlsZSk7CisJcGFyc2VfZGVwX2ZpbGUoYnVmLCB0YXJnZXQpOworCWZy
ZWUoYnVmKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2dj
b25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy9nY29uZi1jZmcuc2gKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMC4uNDgwZWNkOAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQv
a2NvbmZpZy9nY29uZi1jZmcuc2gKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL3NoCisjIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK1BLRz0iZ3RrKy0yLjAgZ21vZHVsZS0yLjAg
bGliZ2xhZGUtMi4wIgorCitpZiBbIC16ICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRo
ZW4KKwllY2hvID4mMiAiKiIKKwllY2hvID4mMiAiKiAnbWFrZSBnY29uZmlnJyByZXF1aXJlcyAn
cGtnLWNvbmZpZycuIFBsZWFzZSBpbnN0YWxsIGl0LiIKKwllY2hvID4mMiAiKiIKKwlleGl0IDEK
K2ZpCisKK2lmICEgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHOyB0aGVuCisJZWNobyA+JjIgIioi
CisJZWNobyA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIEdUSysgaW5zdGFsbGF0aW9uLiBQbGVh
c2UgbWFrZSBzdXJlIHRoYXQiCisJZWNobyA+JjIgIiogdGhlIEdUSysgMi4wIGRldmVsb3BtZW50
IHBhY2thZ2UgaXMgY29ycmVjdGx5IGluc3RhbGxlZC4iCisJZWNobyA+JjIgIiogWW91IG5lZWQg
JFBLRyIKKwllY2hvID4mMiAiKiIKKwlleGl0IDEKK2ZpCisKK2lmICEgcGtnLWNvbmZpZyAtLWF0
bGVhc3QtdmVyc2lvbj0yLjAuMCBndGsrLTIuMDsgdGhlbgorCWVjaG8gPiYyICIqIgorCWVjaG8g
PiYyICIqIEdUSysgaXMgcHJlc2VudCBidXQgdmVyc2lvbiA+PSAyLjAuMCBpcyByZXF1aXJlZC4i
CisJZWNobyA+JjIgIioiCisJZXhpdCAxCitmaQorCitlY2hvIGNmbGFncz1cIiQocGtnLWNvbmZp
ZyAtLWNmbGFncyAkUEtHKVwiCitlY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cp
XCIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9nY29uZi5jIGIvc3VwcG9ydC9rY29uZmln
L2djb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2YjM0MgotLS0g
L2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy9nY29uZi5jCkBAIC0wLDAgKzEsMTUxNiBA
QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDItMjAwMyBSb21haW4gTGlldmluIDxyb21zQHRpbHAuaW5mbz4KKyAqLworCisjaWZk
ZWYgSEFWRV9DT05GSUdfSAorIyAgaW5jbHVkZSA8Y29uZmlnLmg+CisjZW5kaWYKKworI2luY2x1
ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxrYy5oIgorI2luY2x1ZGUgImltYWdlcy5oIgorCisj
aW5jbHVkZSA8Z2xhZGUvZ2xhZGUuaD4KKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8
Z2xpYi5oPgorI2luY2x1ZGUgPGdkay9nZGtrZXlzeW1zLmg+CisKKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRp
bWUuaD4KKworLy8jZGVmaW5lIERFQlVHCisKK2VudW0geworCVNJTkdMRV9WSUVXLCBTUExJVF9W
SUVXLCBGVUxMX1ZJRVcKK307CisKK2VudW0geworCU9QVF9OT1JNQUwsIE9QVF9BTEwsIE9QVF9Q
Uk9NUFQKK307CisKK3N0YXRpYyBnaW50IHZpZXdfbW9kZSA9IEZVTExfVklFVzsKK3N0YXRpYyBn
Ym9vbGVhbiBzaG93X25hbWUgPSBUUlVFOworc3RhdGljIGdib29sZWFuIHNob3dfcmFuZ2UgPSBU
UlVFOworc3RhdGljIGdib29sZWFuIHNob3dfdmFsdWUgPSBUUlVFOworc3RhdGljIGdib29sZWFu
IHJlc2l6ZWFibGUgPSBGQUxTRTsKK3N0YXRpYyBpbnQgb3B0X21vZGUgPSBPUFRfTk9STUFMOwor
CitHdGtXaWRnZXQgKm1haW5fd25kID0gTlVMTDsKK0d0a1dpZGdldCAqdHJlZTFfdyA9IE5VTEw7
CS8vIGxlZnQgIGZyYW1lCitHdGtXaWRnZXQgKnRyZWUyX3cgPSBOVUxMOwkvLyByaWdodCBmcmFt
ZQorR3RrV2lkZ2V0ICp0ZXh0X3cgPSBOVUxMOworR3RrV2lkZ2V0ICpocGFuZWQgPSBOVUxMOwor
R3RrV2lkZ2V0ICp2cGFuZWQgPSBOVUxMOworR3RrV2lkZ2V0ICpiYWNrX2J0biA9IE5VTEw7CitH
dGtXaWRnZXQgKnNhdmVfYnRuID0gTlVMTDsKK0d0a1dpZGdldCAqc2F2ZV9tZW51X2l0ZW0gPSBO
VUxMOworCitHdGtUZXh0VGFnICp0YWcxLCAqdGFnMjsKK0dka0NvbG9yIGNvbG9yOworCitHdGtU
cmVlU3RvcmUgKnRyZWUxLCAqdHJlZTIsICp0cmVlOworR3RrVHJlZU1vZGVsICptb2RlbDEsICpt
b2RlbDI7CitzdGF0aWMgR3RrVHJlZUl0ZXIgKnBhcmVudHNbMjU2XTsKK3N0YXRpYyBnaW50IGlu
ZGVudDsKKworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50OyAvLyBjdXJyZW50IG5vZGUgZm9y
IFNJTkdMRSB2aWV3CitzdGF0aWMgc3RydWN0IG1lbnUgKmJyb3dzZWQ7IC8vIGJyb3dzZWQgbm9k
ZSBmb3IgU1BMSVQgdmlldworCitlbnVtIHsKKwlDT0xfT1BUSU9OLCBDT0xfTkFNRSwgQ09MX05P
LCBDT0xfTU9ELCBDT0xfWUVTLCBDT0xfVkFMVUUsCisJQ09MX01FTlUsIENPTF9DT0xPUiwgQ09M
X0VESVQsIENPTF9QSVhCVUYsCisJQ09MX1BJWFZJUywgQ09MX0JUTlZJUywgQ09MX0JUTkFDVCwg
Q09MX0JUTklOQywgQ09MX0JUTlJBRCwKKwlDT0xfTlVNQkVSCit9OworCitzdGF0aWMgdm9pZCBk
aXNwbGF5X2xpc3Qodm9pZCk7CitzdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWUoc3RydWN0IG1lbnUg
Km1lbnUpOworc3RhdGljIHZvaWQgZGlzcGxheV90cmVlX3BhcnQodm9pZCk7CitzdGF0aWMgdm9p
ZCB1cGRhdGVfdHJlZShzdHJ1Y3QgbWVudSAqc3JjLCBHdGtUcmVlSXRlciAqIGRzdCk7CitzdGF0
aWMgdm9pZCBzZXRfbm9kZShHdGtUcmVlSXRlciAqIG5vZGUsIHN0cnVjdCBtZW51ICptZW51LCBn
Y2hhciAqKiByb3cpOworc3RhdGljIGdjaGFyICoqZmlsbF9yb3coc3RydWN0IG1lbnUgKm1lbnUp
Oworc3RhdGljIHZvaWQgY29uZl9jaGFuZ2VkKHZvaWQpOworCisvKiBIZWxwaW5nL0RlYnVnZ2lu
ZyBGdW5jdGlvbnMgKi8KKyNpZmRlZiBERUJVRworc3RhdGljIGNvbnN0IGNoYXIgKmRiZ19zeW1f
ZmxhZ3MoaW50IHZhbCkKK3sKKwlzdGF0aWMgY2hhciBidWZbMjU2XTsKKworCWJ6ZXJvKGJ1Ziwg
MjU2KTsKKworCWlmICh2YWwgJiBTWU1CT0xfQ09OU1QpCisJCXN0cmNhdChidWYsICJjb25zdC8i
KTsKKwlpZiAodmFsICYgU1lNQk9MX0NIRUNLKQorCQlzdHJjYXQoYnVmLCAiY2hlY2svIik7CisJ
aWYgKHZhbCAmIFNZTUJPTF9DSE9JQ0UpCisJCXN0cmNhdChidWYsICJjaG9pY2UvIik7CisJaWYg
KHZhbCAmIFNZTUJPTF9DSE9JQ0VWQUwpCisJCXN0cmNhdChidWYsICJjaG9pY2V2YWwvIik7CisJ
aWYgKHZhbCAmIFNZTUJPTF9WQUxJRCkKKwkJc3RyY2F0KGJ1ZiwgInZhbGlkLyIpOworCWlmICh2
YWwgJiBTWU1CT0xfT1BUSU9OQUwpCisJCXN0cmNhdChidWYsICJvcHRpb25hbC8iKTsKKwlpZiAo
dmFsICYgU1lNQk9MX1dSSVRFKQorCQlzdHJjYXQoYnVmLCAid3JpdGUvIik7CisJaWYgKHZhbCAm
IFNZTUJPTF9DSEFOR0VEKQorCQlzdHJjYXQoYnVmLCAiY2hhbmdlZC8iKTsKKwlpZiAodmFsICYg
U1lNQk9MX05PX1dSSVRFKQorCQlzdHJjYXQoYnVmLCAibm9fd3JpdGUvIik7CisKKwlidWZbc3Ry
bGVuKGJ1ZikgLSAxXSA9ICdcMCc7CisKKwlyZXR1cm4gYnVmOworfQorI2VuZGlmCisKK3N0YXRp
YyB2b2lkIHJlcGxhY2VfYnV0dG9uX2ljb24oR2xhZGVYTUwgKnhtbCwgR2RrRHJhd2FibGUgKndp
bmRvdywKKwkJCQlHdGtTdHlsZSAqc3R5bGUsIGdjaGFyICpidG5fbmFtZSwgZ2NoYXIgKip4cG0p
Cit7CisJR2RrUGl4bWFwICpwaXhtYXA7CisJR2RrQml0bWFwICptYXNrOworCUd0a1Rvb2xCdXR0
b24gKmJ1dHRvbjsKKwlHdGtXaWRnZXQgKmltYWdlOworCisJcGl4bWFwID0gZ2RrX3BpeG1hcF9j
cmVhdGVfZnJvbV94cG1fZCh3aW5kb3csICZtYXNrLAorCQkJCQkgICAgICAmc3R5bGUtPmJnW0dU
S19TVEFURV9OT1JNQUxdLAorCQkJCQkgICAgICB4cG0pOworCisJYnV0dG9uID0gR1RLX1RPT0xf
QlVUVE9OKGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgYnRuX25hbWUpKTsKKwlpbWFnZSA9IGd0
a19pbWFnZV9uZXdfZnJvbV9waXhtYXAocGl4bWFwLCBtYXNrKTsKKwlndGtfd2lkZ2V0X3Nob3co
aW1hZ2UpOworCWd0a190b29sX2J1dHRvbl9zZXRfaWNvbl93aWRnZXQoYnV0dG9uLCBpbWFnZSk7
Cit9CisKKy8qIE1haW4gV2luZG93IEluaXRpYWxpemF0aW9uICovCitzdGF0aWMgdm9pZCBpbml0
X21haW5fd2luZG93KGNvbnN0IGdjaGFyICpnbGFkZV9maWxlKQoreworCUdsYWRlWE1MICp4bWw7
CisJR3RrV2lkZ2V0ICp3aWRnZXQ7CisJR3RrVGV4dEJ1ZmZlciAqdHh0YnVmOworCUd0a1N0eWxl
ICpzdHlsZTsKKworCXhtbCA9IGdsYWRlX3htbF9uZXcoZ2xhZGVfZmlsZSwgIndpbmRvdzEiLCBO
VUxMKTsKKwlpZiAoIXhtbCkKKwkJZ19lcnJvcigiR1VJIGxvYWRpbmcgZmFpbGVkICFcbiIpOwor
CWdsYWRlX3htbF9zaWduYWxfYXV0b2Nvbm5lY3QoeG1sKTsKKworCW1haW5fd25kID0gZ2xhZGVf
eG1sX2dldF93aWRnZXQoeG1sLCAid2luZG93MSIpOworCWhwYW5lZCA9IGdsYWRlX3htbF9nZXRf
d2lkZ2V0KHhtbCwgImhwYW5lZDEiKTsKKwl2cGFuZWQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4
bWwsICJ2cGFuZWQxIik7CisJdHJlZTFfdyA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRy
ZWV2aWV3MSIpOworCXRyZWUyX3cgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0cmVldmll
dzIiKTsKKwl0ZXh0X3cgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0ZXh0dmlldzMiKTsK
KworCWJhY2tfYnRuID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiYnV0dG9uMSIpOworCWd0
a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOworCisJd2lkZ2V0ID0gZ2xh
ZGVfeG1sX2dldF93aWRnZXQoeG1sLCAic2hvd19uYW1lMSIpOworCWd0a19jaGVja19tZW51X2l0
ZW1fc2V0X2FjdGl2ZSgoR3RrQ2hlY2tNZW51SXRlbSAqKSB3aWRnZXQsCisJCQkJICAgICAgIHNo
b3dfbmFtZSk7CisKKwl3aWRnZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzaG93X3Jh
bmdlMSIpOworCWd0a19jaGVja19tZW51X2l0ZW1fc2V0X2FjdGl2ZSgoR3RrQ2hlY2tNZW51SXRl
bSAqKSB3aWRnZXQsCisJCQkJICAgICAgIHNob3dfcmFuZ2UpOworCisJd2lkZ2V0ID0gZ2xhZGVf
eG1sX2dldF93aWRnZXQoeG1sLCAic2hvd19kYXRhMSIpOworCWd0a19jaGVja19tZW51X2l0ZW1f
c2V0X2FjdGl2ZSgoR3RrQ2hlY2tNZW51SXRlbSAqKSB3aWRnZXQsCisJCQkJICAgICAgIHNob3df
dmFsdWUpOworCisJc2F2ZV9idG4gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJidXR0b24z
Iik7CisJc2F2ZV9tZW51X2l0ZW0gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzYXZlMSIp
OworCWNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsKKworCXN0eWxlID0g
Z3RrX3dpZGdldF9nZXRfc3R5bGUobWFpbl93bmQpOworCXdpZGdldCA9IGdsYWRlX3htbF9nZXRf
d2lkZ2V0KHhtbCwgInRvb2xiYXIxIik7CisKKwlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwgbWFp
bl93bmQtPndpbmRvdywgc3R5bGUsCisJCQkgICAgImJ1dHRvbjQiLCAoZ2NoYXIgKiopIHhwbV9z
aW5nbGVfdmlldyk7CisJcmVwbGFjZV9idXR0b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3cs
IHN0eWxlLAorCQkJICAgICJidXR0b241IiwgKGdjaGFyICoqKSB4cG1fc3BsaXRfdmlldyk7CisJ
cmVwbGFjZV9idXR0b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLAorCQkJICAg
ICJidXR0b242IiwgKGdjaGFyICoqKSB4cG1fdHJlZV92aWV3KTsKKworCXR4dGJ1ZiA9IGd0a190
ZXh0X3ZpZXdfZ2V0X2J1ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykpOworCXRhZzEgPSBndGtf
dGV4dF9idWZmZXJfY3JlYXRlX3RhZyh0eHRidWYsICJteXRhZzEiLAorCQkJCQkgICJmb3JlZ3Jv
dW5kIiwgInJlZCIsCisJCQkJCSAgIndlaWdodCIsIFBBTkdPX1dFSUdIVF9CT0xELAorCQkJCQkg
IE5VTEwpOworCXRhZzIgPSBndGtfdGV4dF9idWZmZXJfY3JlYXRlX3RhZyh0eHRidWYsICJteXRh
ZzIiLAorCQkJCQkgIC8qInN0eWxlIiwgUEFOR09fU1RZTEVfT0JMSVFVRSwgKi8KKwkJCQkJICBO
VUxMKTsKKworCWd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cobWFpbl93bmQpLCByb290
bWVudS5wcm9tcHQtPnRleHQpOworCisJZ3RrX3dpZGdldF9zaG93KG1haW5fd25kKTsKK30KKwor
c3RhdGljIHZvaWQgaW5pdF90cmVlX21vZGVsKHZvaWQpCit7CisJZ2ludCBpOworCisJdHJlZSA9
IHRyZWUyID0gZ3RrX3RyZWVfc3RvcmVfbmV3KENPTF9OVU1CRVIsCisJCQkJCSAgR19UWVBFX1NU
UklORywgR19UWVBFX1NUUklORywKKwkJCQkJICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5H
LAorCQkJCQkgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsCisJCQkJCSAgR19UWVBFX1BP
SU5URVIsIEdES19UWVBFX0NPTE9SLAorCQkJCQkgIEdfVFlQRV9CT09MRUFOLCBHREtfVFlQRV9Q
SVhCVUYsCisJCQkJCSAgR19UWVBFX0JPT0xFQU4sIEdfVFlQRV9CT09MRUFOLAorCQkJCQkgIEdf
VFlQRV9CT09MRUFOLCBHX1RZUEVfQk9PTEVBTiwKKwkJCQkJICBHX1RZUEVfQk9PTEVBTik7CisJ
bW9kZWwyID0gR1RLX1RSRUVfTU9ERUwodHJlZTIpOworCisJZm9yIChwYXJlbnRzWzBdID0gTlVM
TCwgaSA9IDE7IGkgPCAyNTY7IGkrKykKKwkJcGFyZW50c1tpXSA9IChHdGtUcmVlSXRlciAqKSBn
X21hbGxvYyhzaXplb2YoR3RrVHJlZUl0ZXIpKTsKKworCXRyZWUxID0gZ3RrX3RyZWVfc3RvcmVf
bmV3KENPTF9OVU1CRVIsCisJCQkJICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywKKwkJ
CQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLAorCQkJCSAgIEdfVFlQRV9TVFJJTkcs
IEdfVFlQRV9TVFJJTkcsCisJCQkJICAgR19UWVBFX1BPSU5URVIsIEdES19UWVBFX0NPTE9SLAor
CQkJCSAgIEdfVFlQRV9CT09MRUFOLCBHREtfVFlQRV9QSVhCVUYsCisJCQkJICAgR19UWVBFX0JP
T0xFQU4sIEdfVFlQRV9CT09MRUFOLAorCQkJCSAgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfQk9P
TEVBTiwKKwkJCQkgICBHX1RZUEVfQk9PTEVBTik7CisJbW9kZWwxID0gR1RLX1RSRUVfTU9ERUwo
dHJlZTEpOworfQorCitzdGF0aWMgdm9pZCBpbml0X2xlZnRfdHJlZSh2b2lkKQoreworCUd0a1Ry
ZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh0cmVlMV93KTsKKwlHdGtDZWxsUmVuZGVyZXIg
KnJlbmRlcmVyOworCUd0a1RyZWVTZWxlY3Rpb24gKnNlbDsKKwlHdGtUcmVlVmlld0NvbHVtbiAq
Y29sdW1uOworCisJZ3RrX3RyZWVfdmlld19zZXRfbW9kZWwodmlldywgbW9kZWwxKTsKKwlndGtf
dHJlZV92aWV3X3NldF9oZWFkZXJzX3Zpc2libGUodmlldywgVFJVRSk7CisJZ3RrX3RyZWVfdmll
d19zZXRfcnVsZXNfaGludCh2aWV3LCBUUlVFKTsKKworCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdf
Y29sdW1uX25ldygpOworCWd0a190cmVlX3ZpZXdfYXBwZW5kX2NvbHVtbih2aWV3LCBjb2x1bW4p
OworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF90aXRsZShjb2x1bW4sICJPcHRpb25zIik7CisK
KwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RvZ2dsZV9uZXcoKTsKKwlndGtfdHJlZV92
aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJ
CXJlbmRlcmVyLCBGQUxTRSk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0dHJpYnV0ZXMo
R1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJICAgIHJlbmRlcmVyLAorCQkJCQkg
ICAgImFjdGl2ZSIsIENPTF9CVE5BQ1QsCisJCQkJCSAgICAiaW5jb25zaXN0ZW50IiwgQ09MX0JU
TklOQywKKwkJCQkJICAgICJ2aXNpYmxlIiwgQ09MX0JUTlZJUywKKwkJCQkJICAgICJyYWRpbyIs
IENPTF9CVE5SQUQsIE5VTEwpOworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9u
ZXcoKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09M
VU1OKGNvbHVtbiksCisJCQkJCXJlbmRlcmVyLCBGQUxTRSk7CisJZ3RrX3RyZWVfdmlld19jb2x1
bW5fc2V0X2F0dHJpYnV0ZXMoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJICAg
IHJlbmRlcmVyLAorCQkJCQkgICAgInRleHQiLCBDT0xfT1BUSU9OLAorCQkJCQkgICAgImZvcmVn
cm91bmQtZ2RrIiwKKwkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7CisKKwlzZWwgPSBndGtfdHJl
ZV92aWV3X2dldF9zZWxlY3Rpb24odmlldyk7CisJZ3RrX3RyZWVfc2VsZWN0aW9uX3NldF9tb2Rl
KHNlbCwgR1RLX1NFTEVDVElPTl9TSU5HTEUpOworCWd0a193aWRnZXRfcmVhbGl6ZSh0cmVlMV93
KTsKK30KKworc3RhdGljIHZvaWQgcmVuZGVyZXJfZWRpdGVkKEd0a0NlbGxSZW5kZXJlclRleHQg
KiBjZWxsLAorCQkJICAgIGNvbnN0IGdjaGFyICogcGF0aF9zdHJpbmcsCisJCQkgICAgY29uc3Qg
Z2NoYXIgKiBuZXdfdGV4dCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsKKworc3RhdGljIHZvaWQgaW5p
dF9yaWdodF90cmVlKHZvaWQpCit7CisJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVX
KHRyZWUyX3cpOworCUd0a0NlbGxSZW5kZXJlciAqcmVuZGVyZXI7CisJR3RrVHJlZVNlbGVjdGlv
biAqc2VsOworCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47CisJZ2ludCBpOworCisJZ3RrX3Ry
ZWVfdmlld19zZXRfbW9kZWwodmlldywgbW9kZWwyKTsKKwlndGtfdHJlZV92aWV3X3NldF9oZWFk
ZXJzX3Zpc2libGUodmlldywgVFJVRSk7CisJZ3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludCh2
aWV3LCBUUlVFKTsKKworCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfY29sdW1uX25ldygpOworCWd0
a190cmVlX3ZpZXdfYXBwZW5kX2NvbHVtbih2aWV3LCBjb2x1bW4pOworCWd0a190cmVlX3ZpZXdf
Y29sdW1uX3NldF90aXRsZShjb2x1bW4sICJPcHRpb25zIik7CisKKwlyZW5kZXJlciA9IGd0a19j
ZWxsX3JlbmRlcmVyX3BpeGJ1Zl9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0
YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksCisJCQkJCXJlbmRlcmVyLCBGQUxTRSk7
CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0dHJpYnV0ZXMoR1RLX1RSRUVfVklFV19DT0xV
TU4oY29sdW1uKSwKKwkJCQkJICAgIHJlbmRlcmVyLAorCQkJCQkgICAgInBpeGJ1ZiIsIENPTF9Q
SVhCVUYsCisJCQkJCSAgICAidmlzaWJsZSIsIENPTF9QSVhWSVMsIE5VTEwpOworCXJlbmRlcmVy
ID0gZ3RrX2NlbGxfcmVuZGVyZXJfdG9nZ2xlX25ldygpOworCWd0a190cmVlX3ZpZXdfY29sdW1u
X3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwKKwkJCQkJcmVuZGVyZXIs
IEZBTFNFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJFRV9W
SUVXX0NPTFVNTihjb2x1bW4pLAorCQkJCQkgICAgcmVuZGVyZXIsCisJCQkJCSAgICAiYWN0aXZl
IiwgQ09MX0JUTkFDVCwKKwkJCQkJICAgICJpbmNvbnNpc3RlbnQiLCBDT0xfQlROSU5DLAorCQkJ
CQkgICAgInZpc2libGUiLCBDT0xfQlROVklTLAorCQkJCQkgICAgInJhZGlvIiwgQ09MX0JUTlJB
RCwgTlVMTCk7CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOworCWd0
a190cmVlX3ZpZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1u
KSwKKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsKKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0
cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLAorCQkJCQkgICAgcmVuZGVyZXIs
CisJCQkJCSAgICAidGV4dCIsIENPTF9PUFRJT04sCisJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsi
LAorCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKKworCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVu
ZGVyZXJfdGV4dF9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRy
aWJ1dGVzKHZpZXcsIC0xLAorCQkJCQkJICAgICJOYW1lIiwgcmVuZGVyZXIsCisJCQkJCQkgICAg
InRleHQiLCBDT0xfTkFNRSwKKwkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLAorCQkJCQkJICAg
IENPTF9DT0xPUiwgTlVMTCk7CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25l
dygpOworCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywg
LTEsCisJCQkJCQkgICAgIk4iLCByZW5kZXJlciwKKwkJCQkJCSAgICAidGV4dCIsIENPTF9OTywK
KwkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLAorCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7
CisJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOworCWd0a190cmVlX3Zp
ZXdfaW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsCisJCQkJCQkgICAgIk0i
LCByZW5kZXJlciwKKwkJCQkJCSAgICAidGV4dCIsIENPTF9NT0QsCisJCQkJCQkgICAgImZvcmVn
cm91bmQtZ2RrIiwKKwkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOworCXJlbmRlcmVyID0gZ3Rr
X2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsKKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5f
d2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLAorCQkJCQkJICAgICJZIiwgcmVuZGVyZXIsCisJCQkJ
CQkgICAgInRleHQiLCBDT0xfWUVTLAorCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsCisJCQkJ
CQkgICAgQ09MX0NPTE9SLCBOVUxMKTsKKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3Rl
eHRfbmV3KCk7CisJZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2
aWV3LCAtMSwKKwkJCQkJCSAgICAiVmFsdWUiLCByZW5kZXJlciwKKwkJCQkJCSAgICAidGV4dCIs
IENPTF9WQUxVRSwKKwkJCQkJCSAgICAiZWRpdGFibGUiLAorCQkJCQkJICAgIENPTF9FRElULAor
CQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsCisJCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsK
KwlnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHJlbmRlcmVyKSwgImVkaXRlZCIsCisJCQkgR19D
QUxMQkFDSyhyZW5kZXJlcl9lZGl0ZWQpLCBOVUxMKTsKKworCWNvbHVtbiA9IGd0a190cmVlX3Zp
ZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xfTkFNRSk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0
X3Zpc2libGUoY29sdW1uLCBzaG93X25hbWUpOworCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0
X2NvbHVtbih2aWV3LCBDT0xfTk8pOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxl
KGNvbHVtbiwgc2hvd19yYW5nZSk7CisJY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1u
KHZpZXcsIENPTF9NT0QpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVt
biwgc2hvd19yYW5nZSk7CisJY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcs
IENPTF9ZRVMpOworCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwgc2hv
d19yYW5nZSk7CisJY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9W
QUxVRSk7CisJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sdW1uLCBzaG93X3Zh
bHVlKTsKKworCWlmIChyZXNpemVhYmxlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBDT0xfVkFMVUU7
IGkrKykgeworCQkJY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIGkpOwor
CQkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Jlc2l6YWJsZShjb2x1bW4sIFRSVUUpOworCQl9
CisJfQorCisJc2VsID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHZpZXcpOworCWd0a190
cmVlX3NlbGVjdGlvbl9zZXRfbW9kZShzZWwsIEdUS19TRUxFQ1RJT05fU0lOR0xFKTsKK30KKwor
CisvKiBVdGlsaXR5IEZ1bmN0aW9ucyAqLworCisKK3N0YXRpYyB2b2lkIHRleHRfaW5zZXJ0X2hl
bHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJR3RrVGV4dEJ1ZmZlciAqYnVmZmVyOworCUd0a1Rl
eHRJdGVyIHN0YXJ0LCBlbmQ7CisJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0
KG1lbnUpOworCXN0cnVjdCBnc3RyIGhlbHAgPSBzdHJfbmV3KCk7CisKKwltZW51X2dldF9leHRf
aGVscChtZW51LCAmaGVscCk7CisKKwlidWZmZXIgPSBndGtfdGV4dF92aWV3X2dldF9idWZmZXIo
R1RLX1RFWFRfVklFVyh0ZXh0X3cpKTsKKwlndGtfdGV4dF9idWZmZXJfZ2V0X2JvdW5kcyhidWZm
ZXIsICZzdGFydCwgJmVuZCk7CisJZ3RrX3RleHRfYnVmZmVyX2RlbGV0ZShidWZmZXIsICZzdGFy
dCwgJmVuZCk7CisJZ3RrX3RleHRfdmlld19zZXRfbGVmdF9tYXJnaW4oR1RLX1RFWFRfVklFVyh0
ZXh0X3cpLCAxNSk7CisKKwlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVu
ZCk7CisJZ3RrX3RleHRfYnVmZmVyX2luc2VydF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCBwcm9t
cHQsIC0xLCB0YWcxLAorCQkJCQkgTlVMTCk7CisJZ3RrX3RleHRfYnVmZmVyX2luc2VydF9hdF9j
dXJzb3IoYnVmZmVyLCAiXG5cbiIsIDIpOworCWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIo
YnVmZmVyLCAmZW5kKTsKKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIs
ICZlbmQsIHN0cl9nZXQoJmhlbHApLCAtMSwgdGFnMiwKKwkJCQkJIE5VTEwpOworCXN0cl9mcmVl
KCZoZWxwKTsKK30KKworCitzdGF0aWMgdm9pZCB0ZXh0X2luc2VydF9tc2coY29uc3QgY2hhciAq
dGl0bGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJR3RrVGV4dEJ1ZmZlciAqYnVmZmVyOwor
CUd0a1RleHRJdGVyIHN0YXJ0LCBlbmQ7CisJY29uc3QgY2hhciAqbXNnID0gbWVzc2FnZTsKKwor
CWJ1ZmZlciA9IGd0a190ZXh0X3ZpZXdfZ2V0X2J1ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykp
OworCWd0a190ZXh0X2J1ZmZlcl9nZXRfYm91bmRzKGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsKKwln
dGtfdGV4dF9idWZmZXJfZGVsZXRlKGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsKKwlndGtfdGV4dF92
aWV3X3NldF9sZWZ0X21hcmdpbihHVEtfVEVYVF9WSUVXKHRleHRfdyksIDE1KTsKKworCWd0a190
ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIoYnVmZmVyLCAmZW5kKTsKKwlndGtfdGV4dF9idWZmZXJf
aW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQsIHRpdGxlLCAtMSwgdGFnMSwKKwkJCQkJIE5V
TEwpOworCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfYXRfY3Vyc29yKGJ1ZmZlciwgIlxuXG4iLCAy
KTsKKwlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7CisJZ3RrX3Rl
eHRfYnVmZmVyX2luc2VydF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCBtc2csIC0xLCB0YWcyLAor
CQkJCQkgTlVMTCk7Cit9CisKKworLyogTWFpbiBXaW5kb3dzIENhbGxiYWNrcyAqLworCit2b2lk
IG9uX3NhdmVfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9k
YXRhKTsKK2dib29sZWFuIG9uX3dpbmRvdzFfZGVsZXRlX2V2ZW50KEd0a1dpZGdldCAqIHdpZGdl
dCwgR2RrRXZlbnQgKiBldmVudCwKKwkJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1dp
ZGdldCAqZGlhbG9nLCAqbGFiZWw7CisJZ2ludCByZXN1bHQ7CisKKwlpZiAoIWNvbmZfZ2V0X2No
YW5nZWQoKSkKKwkJcmV0dXJuIEZBTFNFOworCisJZGlhbG9nID0gZ3RrX2RpYWxvZ19uZXdfd2l0
aF9idXR0b25zKCJXYXJuaW5nICEiLAorCQkJCQkgICAgIEdUS19XSU5ET1cobWFpbl93bmQpLAor
CQkJCQkgICAgIChHdGtEaWFsb2dGbGFncykKKwkJCQkJICAgICAoR1RLX0RJQUxPR19NT0RBTCB8
CisJCQkJCSAgICAgIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCksCisJCQkJCSAgICAg
R1RLX1NUT0NLX09LLAorCQkJCQkgICAgIEdUS19SRVNQT05TRV9ZRVMsCisJCQkJCSAgICAgR1RL
X1NUT0NLX05PLAorCQkJCQkgICAgIEdUS19SRVNQT05TRV9OTywKKwkJCQkJICAgICBHVEtfU1RP
Q0tfQ0FOQ0VMLAorCQkJCQkgICAgIEdUS19SRVNQT05TRV9DQU5DRUwsIE5VTEwpOworCWd0a19k
aWFsb2dfc2V0X2RlZmF1bHRfcmVzcG9uc2UoR1RLX0RJQUxPRyhkaWFsb2cpLAorCQkJCQlHVEtf
UkVTUE9OU0VfQ0FOQ0VMKTsKKworCWxhYmVsID0gZ3RrX2xhYmVsX25ldygiXG5TYXZlIGNvbmZp
Z3VyYXRpb24gP1xuIik7CisJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihHVEtfRElB
TE9HKGRpYWxvZyktPnZib3gpLCBsYWJlbCk7CisJZ3RrX3dpZGdldF9zaG93KGxhYmVsKTsKKwor
CXJlc3VsdCA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7CisJc3dpdGNoIChy
ZXN1bHQpIHsKKwljYXNlIEdUS19SRVNQT05TRV9ZRVM6CisJCW9uX3NhdmVfYWN0aXZhdGUoTlVM
TCwgTlVMTCk7CisJCXJldHVybiBGQUxTRTsKKwljYXNlIEdUS19SRVNQT05TRV9OTzoKKwkJcmV0
dXJuIEZBTFNFOworCWNhc2UgR1RLX1JFU1BPTlNFX0NBTkNFTDoKKwljYXNlIEdUS19SRVNQT05T
RV9ERUxFVEVfRVZFTlQ6CisJZGVmYXVsdDoKKwkJZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7
CisJCXJldHVybiBUUlVFOworCX0KKworCXJldHVybiBGQUxTRTsKK30KKworCit2b2lkIG9uX3dp
bmRvdzFfZGVzdHJveShHdGtPYmplY3QgKiBvYmplY3QsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sK
KwlndGtfbWFpbl9xdWl0KCk7Cit9CisKKwordm9pZAorb25fd2luZG93MV9zaXplX3JlcXVlc3Qo
R3RrV2lkZ2V0ICogd2lkZ2V0LAorCQkJR3RrUmVxdWlzaXRpb24gKiByZXF1aXNpdGlvbiwgZ3Bv
aW50ZXIgdXNlcl9kYXRhKQoreworCXN0YXRpYyBnaW50IG9sZF9oOworCWdpbnQgdywgaDsKKwor
CWlmICh3aWRnZXQtPndpbmRvdyA9PSBOVUxMKQorCQlndGtfd2luZG93X2dldF9kZWZhdWx0X3Np
emUoR1RLX1dJTkRPVyhtYWluX3duZCksICZ3LCAmaCk7CisJZWxzZQorCQlnZGtfd2luZG93X2dl
dF9zaXplKHdpZGdldC0+d2luZG93LCAmdywgJmgpOworCisJaWYgKGggPT0gb2xkX2gpCisJCXJl
dHVybjsKKwlvbGRfaCA9IGg7CisKKwlndGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRCh2
cGFuZWQpLCAyICogaCAvIDMpOworfQorCisKKy8qIE1lbnUgJiBUb29sYmFyIENhbGxiYWNrcyAq
LworCisKK3N0YXRpYyB2b2lkCitsb2FkX2ZpbGVuYW1lKEd0a0ZpbGVTZWxlY3Rpb24gKiBmaWxl
X3NlbGVjdG9yLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJY29uc3QgZ2NoYXIgKmZuOworCisJ
Zm4gPSBndGtfZmlsZV9zZWxlY3Rpb25fZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX1NFTEVDVElPTgor
CQkJCQkgICAgICh1c2VyX2RhdGEpKTsKKworCWlmIChjb25mX3JlYWQoZm4pKQorCQl0ZXh0X2lu
c2VydF9tc2coIkVycm9yIiwgIlVuYWJsZSB0byBsb2FkIGNvbmZpZ3VyYXRpb24gISIpOworCWVs
c2UKKwkJZGlzcGxheV90cmVlKCZyb290bWVudSk7Cit9CisKK3ZvaWQgb25fbG9hZDFfYWN0aXZh
dGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1dp
ZGdldCAqZnM7CisKKwlmcyA9IGd0a19maWxlX3NlbGVjdGlvbl9uZXcoIkxvYWQgZmlsZS4uLiIp
OworCWdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5v
a19idXR0b24pLAorCQkJICJjbGlja2VkIiwKKwkJCSBHX0NBTExCQUNLKGxvYWRfZmlsZW5hbWUp
LCAoZ3BvaW50ZXIpIGZzKTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVAor
CQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+b2tfYnV0dG9uKSwKKwkJCQkgImNsaWNrZWQi
LCBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksCisJCQkJIChncG9pbnRlcikgZnMpOwor
CWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUCisJCQkJIChHVEtfRklMRV9TRUxF
Q1RJT04oZnMpLT5jYW5jZWxfYnV0dG9uKSwKKwkJCQkgImNsaWNrZWQiLCBHX0NBTExCQUNLKGd0
a193aWRnZXRfZGVzdHJveSksCisJCQkJIChncG9pbnRlcikgZnMpOworCWd0a193aWRnZXRfc2hv
dyhmcyk7Cit9CisKKwordm9pZCBvbl9zYXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0
ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlpZiAoY29uZl93cml0ZShOVUxMKSkKKwkJdGV4
dF9pbnNlcnRfbXNnKCJFcnJvciIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uICEiKTsK
Kwljb25mX3dyaXRlX2F1dG9jb25mKDApOworfQorCisKK3N0YXRpYyB2b2lkCitzdG9yZV9maWxl
bmFtZShHdGtGaWxlU2VsZWN0aW9uICogZmlsZV9zZWxlY3RvciwgZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworCWNvbnN0IGdjaGFyICpmbjsKKworCWZuID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX2dldF9m
aWxlbmFtZShHVEtfRklMRV9TRUxFQ1RJT04KKwkJCQkJICAgICAodXNlcl9kYXRhKSk7CisKKwlp
ZiAoY29uZl93cml0ZShmbikpCisJCXRleHRfaW5zZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRv
IHNhdmUgY29uZmlndXJhdGlvbiAhIik7CisKKwlndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdF
VCh1c2VyX2RhdGEpKTsKK30KKwordm9pZCBvbl9zYXZlX2FzMV9hY3RpdmF0ZShHdGtNZW51SXRl
bSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrV2lkZ2V0ICpmczsKKwor
CWZzID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX25ldygiU2F2ZSBmaWxlIGFzLi4uIik7CisJZ19zaWdu
YWxfY29ubmVjdChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiks
CisJCQkgImNsaWNrZWQiLAorCQkJIEdfQ0FMTEJBQ0soc3RvcmVfZmlsZW5hbWUpLCAoZ3BvaW50
ZXIpIGZzKTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVAorCQkJCSAoR1RL
X0ZJTEVfU0VMRUNUSU9OKGZzKS0+b2tfYnV0dG9uKSwKKwkJCQkgImNsaWNrZWQiLCBHX0NBTExC
QUNLKGd0a193aWRnZXRfZGVzdHJveSksCisJCQkJIChncG9pbnRlcikgZnMpOworCWdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUCisJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMp
LT5jYW5jZWxfYnV0dG9uKSwKKwkJCQkgImNsaWNrZWQiLCBHX0NBTExCQUNLKGd0a193aWRnZXRf
ZGVzdHJveSksCisJCQkJIChncG9pbnRlcikgZnMpOworCWd0a193aWRnZXRfc2hvdyhmcyk7Cit9
CisKKwordm9pZCBvbl9xdWl0MV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9p
bnRlciB1c2VyX2RhdGEpCit7CisJaWYgKCFvbl93aW5kb3cxX2RlbGV0ZV9ldmVudChOVUxMLCBO
VUxMLCBOVUxMKSkKKwkJZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQobWFpbl93bmQpKTsK
K30KKworCit2b2lkIG9uX3Nob3dfbmFtZTFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRl
bSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1RyZWVWaWV3Q29sdW1uICpjb2w7CisKKwlz
aG93X25hbWUgPSBHVEtfQ0hFQ0tfTUVOVV9JVEVNKG1lbnVpdGVtKS0+YWN0aXZlOworCWNvbCA9
IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBDT0xfTkFN
RSk7CisJaWYgKGNvbCkKKwkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sLCBz
aG93X25hbWUpOworfQorCisKK3ZvaWQgb25fc2hvd19yYW5nZTFfYWN0aXZhdGUoR3RrTWVudUl0
ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1RyZWVWaWV3Q29sdW1u
ICpjb2w7CisKKwlzaG93X3JhbmdlID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSktPmFj
dGl2ZTsKKwljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVl
Ml93KSwgQ09MX05PKTsKKwlpZiAoY29sKQorCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlz
aWJsZShjb2wsIHNob3dfcmFuZ2UpOworCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihH
VEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBDT0xfTU9EKTsKKwlpZiAoY29sKQorCQlndGtfdHJlZV92
aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3dfcmFuZ2UpOworCWNvbCA9IGd0a190cmVl
X3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBDT0xfWUVTKTsKKwlpZiAo
Y29sKQorCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3dfcmFuZ2Up
OworCit9CisKKwordm9pZCBvbl9zaG93X2RhdGExX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVu
dWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtUcmVlVmlld0NvbHVtbiAqY29sOwor
CisJc2hvd192YWx1ZSA9IEdUS19DSEVDS19NRU5VX0lURU0obWVudWl0ZW0pLT5hY3RpdmU7CisJ
Y29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENP
TF9WQUxVRSk7CisJaWYgKGNvbCkKKwkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUo
Y29sLCBzaG93X3ZhbHVlKTsKK30KKworCit2b2lkCitvbl9zZXRfb3B0aW9uX21vZGUxX2FjdGl2
YXRlKEd0a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCW9wdF9t
b2RlID0gT1BUX05PUk1BTDsKKwlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7CisJZGlzcGxh
eV90cmVlKCZyb290bWVudSk7CS8qIGluc3RlYWQgb2YgdXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAg
Ki8KK30KKworCit2b2lkCitvbl9zZXRfb3B0aW9uX21vZGUyX2FjdGl2YXRlKEd0a01lbnVJdGVt
ICptZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCW9wdF9tb2RlID0gT1BUX0FMTDsK
KwlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7CisJZGlzcGxheV90cmVlKCZyb290bWVudSk7
CS8qIGluc3RlYWQgb2YgdXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAgKi8KK30KKworCit2b2lkCitv
bl9zZXRfb3B0aW9uX21vZGUzX2FjdGl2YXRlKEd0a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQoreworCW9wdF9tb2RlID0gT1BUX1BST01QVDsKKwlndGtfdHJlZV9zdG9y
ZV9jbGVhcih0cmVlMik7CisJZGlzcGxheV90cmVlKCZyb290bWVudSk7CS8qIGluc3RlYWQgb2Yg
dXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAgKi8KK30KKworCit2b2lkIG9uX2ludHJvZHVjdGlvbjFf
YWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQorewor
CUd0a1dpZGdldCAqZGlhbG9nOworCWNvbnN0IGdjaGFyICppbnRyb190ZXh0ID0KKwkgICAgIldl
bGNvbWUgdG8gZ2tjLCB0aGUgR1RLKyBncmFwaGljYWwgY29uZmlndXJhdGlvbiB0b29sXG4iCisJ
ICAgICJGb3IgZWFjaCBvcHRpb24sIGEgYmxhbmsgYm94IGluZGljYXRlcyB0aGUgZmVhdHVyZSBp
cyBkaXNhYmxlZCwgYVxuIgorCSAgICAiY2hlY2sgaW5kaWNhdGVzIGl0IGlzIGVuYWJsZWQsIGFu
ZCBhIGRvdCBpbmRpY2F0ZXMgdGhhdCBpdCBpcyB0b1xuIgorCSAgICAiYmUgY29tcGlsZWQgYXMg
YSBtb2R1bGUuICBDbGlja2luZyBvbiB0aGUgYm94IHdpbGwgY3ljbGUgdGhyb3VnaCB0aGUgdGhy
ZWUgc3RhdGVzLlxuIgorCSAgICAiXG4iCisJICAgICJJZiB5b3UgZG8gbm90IHNlZSBhbiBvcHRp
b24gKGUuZy4sIGEgZGV2aWNlIGRyaXZlcikgdGhhdCB5b3VcbiIKKwkgICAgImJlbGlldmUgc2hv
dWxkIGJlIHByZXNlbnQsIHRyeSB0dXJuaW5nIG9uIFNob3cgQWxsIE9wdGlvbnNcbiIKKwkgICAg
InVuZGVyIHRoZSBPcHRpb25zIG1lbnUuXG4iCisJICAgICJBbHRob3VnaCB0aGVyZSBpcyBubyBj
cm9zcyByZWZlcmVuY2UgeWV0IHRvIGhlbHAgeW91IGZpZ3VyZSBvdXRcbiIKKwkgICAgIndoYXQg
b3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGUgb3B0aW9uIHlvdVxu
IgorCSAgICAiYXJlIGludGVyZXN0ZWQgaW4sIHlvdSBjYW4gc3RpbGwgdmlldyB0aGUgaGVscCBv
ZiBhIGdyYXllZC1vdXRcbiIKKwkgICAgIm9wdGlvbi5cbiIKKwkgICAgIlxuIgorCSAgICAiVG9n
Z2xpbmcgU2hvdyBEZWJ1ZyBJbmZvIHVuZGVyIHRoZSBPcHRpb25zIG1lbnUgd2lsbCBzaG93IFxu
IgorCSAgICAidGhlIGRlcGVuZGVuY2llcywgd2hpY2ggeW91IGNhbiB0aGVuIG1hdGNoIGJ5IGV4
YW1pbmluZyBvdGhlciBvcHRpb25zLiI7CisKKwlkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2df
bmV3KEdUS19XSU5ET1cobWFpbl93bmQpLAorCQkJCQlHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9Q
QVJFTlQsCisJCQkJCUdUS19NRVNTQUdFX0lORk8sCisJCQkJCUdUS19CVVRUT05TX0NMT1NFLCAi
JXMiLCBpbnRyb190ZXh0KTsKKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVChk
aWFsb2cpLCAicmVzcG9uc2UiLAorCQkJCSBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSks
CisJCQkJIEdUS19PQkpFQ1QoZGlhbG9nKSk7CisJZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cp
OworfQorCisKK3ZvaWQgb25fYWJvdXQxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0s
IGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtXaWRnZXQgKmRpYWxvZzsKKwljb25zdCBnY2hh
ciAqYWJvdXRfdGV4dCA9CisJICAgICJna2MgaXMgY29weXJpZ2h0IChjKSAyMDAyIFJvbWFpbiBM
aWV2aW4gPHJvbXNAbHBnLnRpY2FsYy5vcmc+LlxuIgorCSAgICAgICJCYXNlZCBvbiB0aGUgc291
cmNlIGNvZGUgZnJvbSBSb21hbiBaaXBwZWwuXG4iOworCisJZGlhbG9nID0gZ3RrX21lc3NhZ2Vf
ZGlhbG9nX25ldyhHVEtfV0lORE9XKG1haW5fd25kKSwKKwkJCQkJR1RLX0RJQUxPR19ERVNUUk9Z
X1dJVEhfUEFSRU5ULAorCQkJCQlHVEtfTUVTU0FHRV9JTkZPLAorCQkJCQlHVEtfQlVUVE9OU19D
TE9TRSwgIiVzIiwgYWJvdXRfdGV4dCk7CisJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19P
QkpFQ1QoZGlhbG9nKSwgInJlc3BvbnNlIiwKKwkJCQkgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rl
c3Ryb3kpLAorCQkJCSBHVEtfT0JKRUNUKGRpYWxvZykpOworCWd0a193aWRnZXRfc2hvd19hbGwo
ZGlhbG9nKTsKK30KKworCit2b2lkIG9uX2xpY2Vuc2UxX2FjdGl2YXRlKEd0a01lbnVJdGVtICog
bWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtXaWRnZXQgKmRpYWxvZzsKKwlj
b25zdCBnY2hhciAqbGljZW5zZV90ZXh0ID0KKwkgICAgImdrYyBpcyByZWxlYXNlZCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuXG4iCisJICAgICAgIkZvciBtb3JlIGluZm9ybWF0
aW9uLCBwbGVhc2Ugc2VlIHRoZSBzb3VyY2UgY29kZSBvclxuIgorCSAgICAgICJ2aXNpdCBodHRw
Oi8vd3d3LmZzZi5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbFxuIjsKKworCWRpYWxvZyA9IGd0
a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksCisJCQkJCUdUS19ESUFM
T0dfREVTVFJPWV9XSVRIX1BBUkVOVCwKKwkJCQkJR1RLX01FU1NBR0VfSU5GTywKKwkJCQkJR1RL
X0JVVFRPTlNfQ0xPU0UsICIlcyIsIGxpY2Vuc2VfdGV4dCk7CisJZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKEdUS19PQkpFQ1QoZGlhbG9nKSwgInJlc3BvbnNlIiwKKwkJCQkgR19DQUxMQkFDSyhn
dGtfd2lkZ2V0X2Rlc3Ryb3kpLAorCQkJCSBHVEtfT0JKRUNUKGRpYWxvZykpOworCWd0a193aWRn
ZXRfc2hvd19hbGwoZGlhbG9nKTsKK30KKworCit2b2lkIG9uX2JhY2tfY2xpY2tlZChHdGtCdXR0
b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwllbnVtIHByb3BfdHlwZSBwdHlw
ZTsKKworCWN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQ7CisJcHR5cGUgPSBjdXJyZW50LT5wcm9t
cHQgPyBjdXJyZW50LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJaWYgKHB0eXBlICE9IFBf
TUVOVSkKKwkJY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudDsKKwlkaXNwbGF5X3RyZWVfcGFydCgp
OworCisJaWYgKGN1cnJlbnQgPT0gJnJvb3RtZW51KQorCQlndGtfd2lkZ2V0X3NldF9zZW5zaXRp
dmUoYmFja19idG4sIEZBTFNFKTsKK30KKworCit2b2lkIG9uX2xvYWRfY2xpY2tlZChHdGtCdXR0
b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlvbl9sb2FkMV9hY3RpdmF0ZShO
VUxMLCB1c2VyX2RhdGEpOworfQorCisKK3ZvaWQgb25fc2luZ2xlX2NsaWNrZWQoR3RrQnV0dG9u
ICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJdmlld19tb2RlID0gU0lOR0xFX1ZJ
RVc7CisJZ3RrX3dpZGdldF9oaWRlKHRyZWUxX3cpOworCWN1cnJlbnQgPSAmcm9vdG1lbnU7CisJ
ZGlzcGxheV90cmVlX3BhcnQoKTsKK30KKworCit2b2lkIG9uX3NwbGl0X2NsaWNrZWQoR3RrQnV0
dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJZ2ludCB3LCBoOworCXZpZXdf
bW9kZSA9IFNQTElUX1ZJRVc7CisJZ3RrX3dpZGdldF9zaG93KHRyZWUxX3cpOworCWd0a193aW5k
b3dfZ2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKG1haW5fd25kKSwgJncsICZoKTsKKwlndGtf
cGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRChocGFuZWQpLCB3IC8gMik7CisJaWYgKHRyZWUy
KQorCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7CisJZGlzcGxheV9saXN0KCk7CisKKwkv
KiBEaXNhYmxlIGJhY2sgYnRuLCBsaWtlIGluIGZ1bGwgbW9kZS4gKi8KKwlndGtfd2lkZ2V0X3Nl
dF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsKK30KKworCit2b2lkIG9uX2Z1bGxfY2xpY2tl
ZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwl2aWV3X21vZGUg
PSBGVUxMX1ZJRVc7CisJZ3RrX3dpZGdldF9oaWRlKHRyZWUxX3cpOworCWlmICh0cmVlMikKKwkJ
Z3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOworCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOwor
CWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOworfQorCisKK3ZvaWQg
b25fY29sbGFwc2VfY2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0
YSkKK3sKKwlndGtfdHJlZV92aWV3X2NvbGxhcHNlX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUyX3cp
KTsKK30KKworCit2b2lkIG9uX2V4cGFuZF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3Bv
aW50ZXIgdXNlcl9kYXRhKQoreworCWd0a190cmVlX3ZpZXdfZXhwYW5kX2FsbChHVEtfVFJFRV9W
SUVXKHRyZWUyX3cpKTsKK30KKworCisvKiBDVHJlZSBDYWxsYmFja3MgKi8KKworLyogQ2hhbmdl
IGhleC9pbnQvc3RyaW5nIHZhbHVlIGluIHRoZSBjZWxsICovCitzdGF0aWMgdm9pZCByZW5kZXJl
cl9lZGl0ZWQoR3RrQ2VsbFJlbmRlcmVyVGV4dCAqIGNlbGwsCisJCQkgICAgY29uc3QgZ2NoYXIg
KiBwYXRoX3N0cmluZywKKwkJCSAgICBjb25zdCBnY2hhciAqIG5ld190ZXh0LCBncG9pbnRlciB1
c2VyX2RhdGEpCit7CisJR3RrVHJlZVBhdGggKnBhdGggPSBndGtfdHJlZV9wYXRoX25ld19mcm9t
X3N0cmluZyhwYXRoX3N0cmluZyk7CisJR3RrVHJlZUl0ZXIgaXRlcjsKKwljb25zdCBjaGFyICpv
bGRfZGVmLCAqbmV3X2RlZjsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwlzdHJ1Y3Qgc3ltYm9sICpz
eW07CisKKwlpZiAoIWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsMiwgJml0ZXIsIHBhdGgp
KQorCQlyZXR1cm47CisKKwlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01F
TlUsICZtZW51LCAtMSk7CisJc3ltID0gbWVudS0+c3ltOworCisJZ3RrX3RyZWVfbW9kZWxfZ2V0
KG1vZGVsMiwgJml0ZXIsIENPTF9WQUxVRSwgJm9sZF9kZWYsIC0xKTsKKwluZXdfZGVmID0gbmV3
X3RleHQ7CisKKwlzeW1fc2V0X3N0cmluZ192YWx1ZShzeW0sIG5ld19kZWYpOworCisJdXBkYXRl
X3RyZWUoJnJvb3RtZW51LCBOVUxMKTsKKworCWd0a190cmVlX3BhdGhfZnJlZShwYXRoKTsKK30K
KworLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHN5bWJvbCBhbmQgdXBkYXRlIHRoZSB0cmVlICov
CitzdGF0aWMgdm9pZCBjaGFuZ2Vfc3ltX3ZhbHVlKHN0cnVjdCBtZW51ICptZW51LCBnaW50IGNv
bCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJdHJpc3RhdGUgbmV3dmFs
OworCisJaWYgKCFzeW0pCisJCXJldHVybjsKKworCWlmIChjb2wgPT0gQ09MX05PKQorCQluZXd2
YWwgPSBubzsKKwllbHNlIGlmIChjb2wgPT0gQ09MX01PRCkKKwkJbmV3dmFsID0gbW9kOworCWVs
c2UgaWYgKGNvbCA9PSBDT0xfWUVTKQorCQluZXd2YWwgPSB5ZXM7CisJZWxzZQorCQlyZXR1cm47
CisKKwlzd2l0Y2ggKHN5bV9nZXRfdHlwZShzeW0pKSB7CisJY2FzZSBTX0JPT0xFQU46CisJY2Fz
ZSBTX1RSSVNUQVRFOgorCQlpZiAoIXN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBuZXd2
YWwpKQorCQkJbmV3dmFsID0geWVzOworCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbmV3
dmFsKTsKKwkJaWYgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpCisJCQl1cGRhdGVfdHJlZSgmcm9v
dG1lbnUsIE5VTEwpOworCQllbHNlIGlmICh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykgeworCQkJ
dXBkYXRlX3RyZWUoYnJvd3NlZCwgTlVMTCk7CisJCQlkaXNwbGF5X2xpc3QoKTsKKwkJfQorCQll
bHNlIGlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcpCisJCQlkaXNwbGF5X3RyZWVfcGFydCgp
OwkvL2ZpeG1lOiBrZWVwIGV4cC9jb2xsCisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJY2FzZSBT
X0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3Rh
dGljIHZvaWQgdG9nZ2xlX3N5bV92YWx1ZShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlpZiAoIW1l
bnUtPnN5bSkKKwkJcmV0dXJuOworCisJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShtZW51LT5z
eW0pOworCWlmICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQorCQl1cGRhdGVfdHJlZSgmcm9vdG1l
bnUsIE5VTEwpOworCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSB7CisJCXVwZGF0
ZV90cmVlKGJyb3dzZWQsIE5VTEwpOworCQlkaXNwbGF5X2xpc3QoKTsKKwl9CisJZWxzZSBpZiAo
dmlld19tb2RlID09IFNJTkdMRV9WSUVXKQorCQlkaXNwbGF5X3RyZWVfcGFydCgpOwkvL2ZpeG1l
OiBrZWVwIGV4cC9jb2xsCit9CisKK3N0YXRpYyBnaW50IGNvbHVtbjJpbmRleChHdGtUcmVlVmll
d0NvbHVtbiAqIGNvbHVtbikKK3sKKwlnaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQ09MX05V
TUJFUjsgaSsrKSB7CisJCUd0a1RyZWVWaWV3Q29sdW1uICpjb2w7CisKKwkJY29sID0gZ3RrX3Ry
ZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIGkpOworCQlpZiAoY29s
ID09IGNvbHVtbikKKwkJCXJldHVybiBpOworCX0KKworCXJldHVybiAtMTsKK30KKworCisvKiBV
c2VyIGNsaWNrOiB1cGRhdGUgY2hvaWNlIChmdWxsKSBvciBnb2VzIGRvd24gKHNpbmdsZSkgKi8K
K2dib29sZWFuCitvbl90cmVldmlldzJfYnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdp
ZGdldCwKKwkJCQlHZGtFdmVudEJ1dHRvbiAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpCit7
CisJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7CisJR3RrVHJlZVBh
dGggKnBhdGg7CisJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsKKwlHdGtUcmVlSXRlciBpdGVy
OworCXN0cnVjdCBtZW51ICptZW51OworCWdpbnQgY29sOworCisjaWYgR1RLX0NIRUNLX1ZFUlNJ
T04oMiwxLDQpIC8vIGJ1ZyBpbiBjdHJlZSB3aXRoIGVhcmxpZXIgdmVyc2lvbiBvZiBHVEsKKwln
aW50IHR4ID0gKGdpbnQpIGV2ZW50LT54OworCWdpbnQgdHkgPSAoZ2ludCkgZXZlbnQtPnk7CisJ
Z2ludCBjeCwgY3k7CisKKwlndGtfdHJlZV92aWV3X2dldF9wYXRoX2F0X3Bvcyh2aWV3LCB0eCwg
dHksICZwYXRoLCAmY29sdW1uLCAmY3gsCisJCQkJICAgICAgJmN5KTsKKyNlbHNlCisJZ3RrX3Ry
ZWVfdmlld19nZXRfY3Vyc29yKHZpZXcsICZwYXRoLCAmY29sdW1uKTsKKyNlbmRpZgorCWlmIChw
YXRoID09IE5VTEwpCisJCXJldHVybiBGQUxTRTsKKworCWlmICghZ3RrX3RyZWVfbW9kZWxfZ2V0
X2l0ZXIobW9kZWwyLCAmaXRlciwgcGF0aCkpCisJCXJldHVybiBGQUxTRTsKKwlndGtfdHJlZV9t
b2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7CisKKwljb2wgPSBj
b2x1bW4yaW5kZXgoY29sdW1uKTsKKwlpZiAoZXZlbnQtPnR5cGUgPT0gR0RLXzJCVVRUT05fUFJF
U1MpIHsKKwkJZW51bSBwcm9wX3R5cGUgcHR5cGU7CisJCXB0eXBlID0gbWVudS0+cHJvbXB0ID8g
bWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCisJCWlmIChwdHlwZSA9PSBQX01FTlUg
JiYgdmlld19tb2RlICE9IEZVTExfVklFVyAmJiBjb2wgPT0gQ09MX09QVElPTikgeworCQkJLy8g
Z29lcyBkb3duIGludG8gbWVudQorCQkJY3VycmVudCA9IG1lbnU7CisJCQlkaXNwbGF5X3RyZWVf
cGFydCgpOworCQkJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBUUlVFKTsKKwkJ
fSBlbHNlIGlmIChjb2wgPT0gQ09MX09QVElPTikgeworCQkJdG9nZ2xlX3N5bV92YWx1ZShtZW51
KTsKKwkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBUUlVFKTsKKwkJfQor
CX0gZWxzZSB7CisJCWlmIChjb2wgPT0gQ09MX1ZBTFVFKSB7CisJCQl0b2dnbGVfc3ltX3ZhbHVl
KG1lbnUpOworCQkJZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgsIFRSVUUpOwor
CQl9IGVsc2UgaWYgKGNvbCA9PSBDT0xfTk8gfHwgY29sID09IENPTF9NT0QKKwkJCSAgIHx8IGNv
bCA9PSBDT0xfWUVTKSB7CisJCQljaGFuZ2Vfc3ltX3ZhbHVlKG1lbnUsIGNvbCk7CisJCQlndGtf
dHJlZV92aWV3X2V4cGFuZF9yb3codmlldywgcGF0aCwgVFJVRSk7CisJCX0KKwl9CisKKwlyZXR1
cm4gRkFMU0U7Cit9CisKKy8qIEtleSBwcmVzc2VkOiB1cGRhdGUgY2hvaWNlICovCitnYm9vbGVh
bgorb25fdHJlZXZpZXcyX2tleV9wcmVzc19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsCisJCQkg
ICAgIEdka0V2ZW50S2V5ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkKK3sKKwlHdGtUcmVl
VmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVcod2lkZ2V0KTsKKwlHdGtUcmVlUGF0aCAqcGF0aDsK
KwlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOworCUd0a1RyZWVJdGVyIGl0ZXI7CisJc3RydWN0
IG1lbnUgKm1lbnU7CisJZ2ludCBjb2w7CisKKwlndGtfdHJlZV92aWV3X2dldF9jdXJzb3Iodmll
dywgJnBhdGgsICZjb2x1bW4pOworCWlmIChwYXRoID09IE5VTEwpCisJCXJldHVybiBGQUxTRTsK
KworCWlmIChldmVudC0+a2V5dmFsID09IEdES19zcGFjZSkgeworCQlpZiAoZ3RrX3RyZWVfdmll
d19yb3dfZXhwYW5kZWQodmlldywgcGF0aCkpCisJCQlndGtfdHJlZV92aWV3X2NvbGxhcHNlX3Jv
dyh2aWV3LCBwYXRoKTsKKwkJZWxzZQorCQkJZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHZpZXcs
IHBhdGgsIEZBTFNFKTsKKwkJcmV0dXJuIFRSVUU7CisJfQorCWlmIChldmVudC0+a2V5dmFsID09
IEdES19LUF9FbnRlcikgeworCX0KKwlpZiAod2lkZ2V0ID09IHRyZWUxX3cpCisJCXJldHVybiBG
QUxTRTsKKworCWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsMiwgJml0ZXIsIHBhdGgpOwor
CWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsK
KworCWlmICghc3RyY2FzZWNtcChldmVudC0+c3RyaW5nLCAibiIpKQorCQljb2wgPSBDT0xfTk87
CisJZWxzZSBpZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgIm0iKSkKKwkJY29sID0gQ09M
X01PRDsKKwllbHNlIGlmICghc3RyY2FzZWNtcChldmVudC0+c3RyaW5nLCAieSIpKQorCQljb2wg
PSBDT0xfWUVTOworCWVsc2UKKwkJY29sID0gLTE7CisJY2hhbmdlX3N5bV92YWx1ZShtZW51LCBj
b2wpOworCisJcmV0dXJuIEZBTFNFOworfQorCisKKy8qIFJvdyBzZWxlY3Rpb24gY2hhbmdlZDog
dXBkYXRlIGhlbHAgKi8KK3ZvaWQKK29uX3RyZWV2aWV3Ml9jdXJzb3JfY2hhbmdlZChHdGtUcmVl
VmlldyAqIHRyZWV2aWV3LCBncG9pbnRlciB1c2VyX2RhdGEpCit7CisJR3RrVHJlZVNlbGVjdGlv
biAqc2VsZWN0aW9uOworCUd0a1RyZWVJdGVyIGl0ZXI7CisJc3RydWN0IG1lbnUgKm1lbnU7CisK
KwlzZWxlY3Rpb24gPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24odHJlZXZpZXcpOworCWlm
IChndGtfdHJlZV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGVkKHNlbGVjdGlvbiwgJm1vZGVsMiwgJml0
ZXIpKSB7CisJCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfTUVOVSwgJm1l
bnUsIC0xKTsKKwkJdGV4dF9pbnNlcnRfaGVscChtZW51KTsKKwl9Cit9CisKKworLyogVXNlciBj
bGljazogZGlzcGxheSBzdWItdHJlZSBpbiB0aGUgcmlnaHQgZnJhbWUuICovCitnYm9vbGVhbgor
b25fdHJlZXZpZXcxX2J1dHRvbl9wcmVzc19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsCisJCQkJ
R2RrRXZlbnRCdXR0b24gKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQoreworCUd0a1RyZWVW
aWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh3aWRnZXQpOworCUd0a1RyZWVQYXRoICpwYXRoOwor
CUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47CisJR3RrVHJlZUl0ZXIgaXRlcjsKKwlzdHJ1Y3Qg
bWVudSAqbWVudTsKKworCWdpbnQgdHggPSAoZ2ludCkgZXZlbnQtPng7CisJZ2ludCB0eSA9IChn
aW50KSBldmVudC0+eTsKKwlnaW50IGN4LCBjeTsKKworCWd0a190cmVlX3ZpZXdfZ2V0X3BhdGhf
YXRfcG9zKHZpZXcsIHR4LCB0eSwgJnBhdGgsICZjb2x1bW4sICZjeCwKKwkJCQkgICAgICAmY3kp
OworCWlmIChwYXRoID09IE5VTEwpCisJCXJldHVybiBGQUxTRTsKKworCWd0a190cmVlX21vZGVs
X2dldF9pdGVyKG1vZGVsMSwgJml0ZXIsIHBhdGgpOworCWd0a190cmVlX21vZGVsX2dldChtb2Rl
bDEsICZpdGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsKKworCWlmIChldmVudC0+dHlwZSA9PSBH
REtfMkJVVFRPTl9QUkVTUykgeworCQl0b2dnbGVfc3ltX3ZhbHVlKG1lbnUpOworCQljdXJyZW50
ID0gbWVudTsKKwkJZGlzcGxheV90cmVlX3BhcnQoKTsKKwl9IGVsc2UgeworCQlicm93c2VkID0g
bWVudTsKKwkJZGlzcGxheV90cmVlX3BhcnQoKTsKKwl9CisKKwlndGtfd2lkZ2V0X3JlYWxpemUo
dHJlZTJfdyk7CisJZ3RrX3RyZWVfdmlld19zZXRfY3Vyc29yKHZpZXcsIHBhdGgsIE5VTEwsIEZB
TFNFKTsKKwlndGtfd2lkZ2V0X2dyYWJfZm9jdXModHJlZTJfdyk7CisKKwlyZXR1cm4gRkFMU0U7
Cit9CisKKworLyogRmlsbCBhIHJvdyBvZiBzdHJpbmdzICovCitzdGF0aWMgZ2NoYXIgKipmaWxs
X3JvdyhzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdGF0aWMgZ2NoYXIgKnJvd1tDT0xfTlVNQkVS
XTsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJY29uc3QgY2hhciAqZGVmOwor
CWludCBzdHlwZTsKKwl0cmlzdGF0ZSB2YWw7CisJZW51bSBwcm9wX3R5cGUgcHR5cGU7CisJaW50
IGk7CisKKwlmb3IgKGkgPSBDT0xfT1BUSU9OOyBpIDw9IENPTF9DT0xPUjsgaSsrKQorCQlnX2Zy
ZWUocm93W2ldKTsKKwliemVybyhyb3csIHNpemVvZihyb3cpKTsKKworCXJvd1tDT0xfT1BUSU9O
XSA9CisJICAgIGdfc3RyZHVwX3ByaW50ZigiJXMgJXMiLCBtZW51X2dldF9wcm9tcHQobWVudSks
CisJCQkgICAgc3ltICYmICFzeW1faGFzX3ZhbHVlKHN5bSkgPyAiKE5FVykiIDogIiIpOworCisJ
aWYgKG9wdF9tb2RlID09IE9QVF9BTEwgJiYgIW1lbnVfaXNfdmlzaWJsZShtZW51KSkKKwkJcm93
W0NPTF9DT0xPUl0gPSBnX3N0cmR1cCgiRGFya0dyYXkiKTsKKwllbHNlIGlmIChvcHRfbW9kZSA9
PSBPUFRfUFJPTVBUICYmCisJCQltZW51X2hhc19wcm9tcHQobWVudSkgJiYgIW1lbnVfaXNfdmlz
aWJsZShtZW51KSkKKwkJcm93W0NPTF9DT0xPUl0gPSBnX3N0cmR1cCgiRGFya0dyYXkiKTsKKwll
bHNlCisJCXJvd1tDT0xfQ09MT1JdID0gZ19zdHJkdXAoIkJsYWNrIik7CisKKwlwdHlwZSA9IG1l
bnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsKKwlzd2l0Y2ggKHB0
eXBlKSB7CisJY2FzZSBQX01FTlU6CisJCXJvd1tDT0xfUElYQlVGXSA9IChnY2hhciAqKSB4cG1f
bWVudTsKKwkJaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykKKwkJCXJvd1tDT0xfUElYVklT
XSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKKwkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19Q
T0lOVEVSKEZBTFNFKTsKKwkJYnJlYWs7CisJY2FzZSBQX0NPTU1FTlQ6CisJCXJvd1tDT0xfUElY
QlVGXSA9IChnY2hhciAqKSB4cG1fdm9pZDsKKwkJcm93W0NPTF9QSVhWSVNdID0gR0lOVF9UT19Q
T0lOVEVSKEZBTFNFKTsKKwkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNF
KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcm93W0NPTF9QSVhCVUZdID0gKGdjaGFyICopIHhw
bV92b2lkOworCQlyb3dbQ09MX1BJWFZJU10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQly
b3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7CisJCWJyZWFrOworCX0KKwor
CWlmICghc3ltKQorCQlyZXR1cm4gcm93OworCXJvd1tDT0xfTkFNRV0gPSBnX3N0cmR1cChzeW0t
Pm5hbWUpOworCisJc3ltX2NhbGNfdmFsdWUoc3ltKTsKKwlzeW0tPmZsYWdzICY9IH5TWU1CT0xf
Q0hBTkdFRDsKKworCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsJLy8gcGFyc2UgY2hpbGRzIGZv
ciBnZXR0aW5nIGZpbmFsIHZhbHVlCisJCXN0cnVjdCBtZW51ICpjaGlsZDsKKwkJc3RydWN0IHN5
bWJvbCAqZGVmX3N5bSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN5bSk7CisJCXN0cnVjdCBtZW51
ICpkZWZfbWVudSA9IE5VTEw7CisKKwkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVS
KEZBTFNFKTsKKworCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHQpIHsKKwkJCWlmIChtZW51X2lzX3Zpc2libGUoY2hpbGQpCisJCQkgICAgJiYgY2hp
bGQtPnN5bSA9PSBkZWZfc3ltKQorCQkJCWRlZl9tZW51ID0gY2hpbGQ7CisJCX0KKworCQlpZiAo
ZGVmX21lbnUpCisJCQlyb3dbQ09MX1ZBTFVFXSA9CisJCQkgICAgZ19zdHJkdXAobWVudV9nZXRf
cHJvbXB0KGRlZl9tZW51KSk7CisJfQorCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRVZB
TCkKKwkJcm93W0NPTF9CVE5SQURdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCisJc3R5cGUg
PSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlzd2l0Y2ggKHN0eXBlKSB7CisJY2FzZSBTX0JPT0xFQU46
CisJCWlmIChHUE9JTlRFUl9UT19JTlQocm93W0NPTF9QSVhWSVNdKSA9PSBGQUxTRSkKKwkJCXJv
d1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKKwkJaWYgKHN5bV9pc19jaG9p
Y2Uoc3ltKSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfVFJJU1RB
VEU6CisJCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJc3dpdGNoICh2YWwp
IHsKKwkJY2FzZSBubzoKKwkJCXJvd1tDT0xfTk9dID0gZ19zdHJkdXAoIk4iKTsKKwkJCXJvd1tD
T0xfVkFMVUVdID0gZ19zdHJkdXAoIk4iKTsKKwkJCXJvd1tDT0xfQlROQUNUXSA9IEdJTlRfVE9f
UE9JTlRFUihGQUxTRSk7CisJCQlyb3dbQ09MX0JUTklOQ10gPSBHSU5UX1RPX1BPSU5URVIoRkFM
U0UpOworCQkJYnJlYWs7CisJCWNhc2UgbW9kOgorCQkJcm93W0NPTF9NT0RdID0gZ19zdHJkdXAo
Ik0iKTsKKwkJCXJvd1tDT0xfVkFMVUVdID0gZ19zdHJkdXAoIk0iKTsKKwkJCXJvd1tDT0xfQlRO
SU5DXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsKKwkJCWJyZWFrOworCQljYXNlIHllczoKKwkJ
CXJvd1tDT0xfWUVTXSA9IGdfc3RyZHVwKCJZIik7CisJCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3Ry
ZHVwKCJZIik7CisJCQlyb3dbQ09MX0JUTkFDVF0gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7CisJ
CQlyb3dbQ09MX0JUTklOQ10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQkJYnJlYWs7CisJ
CX0KKworCQlpZiAodmFsICE9IG5vICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBu
bykpCisJCQlyb3dbQ09MX05PXSA9IGdfc3RyZHVwKCJfIik7CisJCWlmICh2YWwgIT0gbW9kICYm
IHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpKQorCQkJcm93W0NPTF9NT0RdID0g
Z19zdHJkdXAoIl8iKTsKKwkJaWYgKHZhbCAhPSB5ZXMgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9y
YW5nZShzeW0sIHllcykpCisJCQlyb3dbQ09MX1lFU10gPSBnX3N0cmR1cCgiXyIpOworCQlicmVh
azsKKwljYXNlIFNfSU5UOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX1NUUklORzoKKwkJZGVmID0g
c3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKwkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cChk
ZWYpOworCQlyb3dbQ09MX0VESVRdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOworCQlyb3dbQ09M
X0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOworCQlicmVhazsKKwl9CisKKwlyZXR1
cm4gcm93OworfQorCisKKy8qIFNldCB0aGUgbm9kZSBjb250ZW50IHdpdGggYSByb3cgb2Ygc3Ry
aW5ncyAqLworc3RhdGljIHZvaWQgc2V0X25vZGUoR3RrVHJlZUl0ZXIgKiBub2RlLCBzdHJ1Y3Qg
bWVudSAqbWVudSwgZ2NoYXIgKiogcm93KQoreworCUdka0NvbG9yIGNvbG9yOworCWdib29sZWFu
IHN1Y2Nlc3M7CisJR2RrUGl4YnVmICpwaXg7CisKKwlwaXggPSBnZGtfcGl4YnVmX25ld19mcm9t
X3hwbV9kYXRhKChjb25zdCBjaGFyICoqKQorCQkJCQkgICByb3dbQ09MX1BJWEJVRl0pOworCisJ
Z2RrX2NvbG9yX3BhcnNlKHJvd1tDT0xfQ09MT1JdLCAmY29sb3IpOworCWdka19jb2xvcm1hcF9h
bGxvY19jb2xvcnMoZ2RrX2NvbG9ybWFwX2dldF9zeXN0ZW0oKSwgJmNvbG9yLCAxLAorCQkJCSAg
RkFMU0UsIEZBTFNFLCAmc3VjY2Vzcyk7CisKKwlndGtfdHJlZV9zdG9yZV9zZXQodHJlZSwgbm9k
ZSwKKwkJCSAgIENPTF9PUFRJT04sIHJvd1tDT0xfT1BUSU9OXSwKKwkJCSAgIENPTF9OQU1FLCBy
b3dbQ09MX05BTUVdLAorCQkJICAgQ09MX05PLCByb3dbQ09MX05PXSwKKwkJCSAgIENPTF9NT0Qs
IHJvd1tDT0xfTU9EXSwKKwkJCSAgIENPTF9ZRVMsIHJvd1tDT0xfWUVTXSwKKwkJCSAgIENPTF9W
QUxVRSwgcm93W0NPTF9WQUxVRV0sCisJCQkgICBDT0xfTUVOVSwgKGdwb2ludGVyKSBtZW51LAor
CQkJICAgQ09MX0NPTE9SLCAmY29sb3IsCisJCQkgICBDT0xfRURJVCwgR1BPSU5URVJfVE9fSU5U
KHJvd1tDT0xfRURJVF0pLAorCQkJICAgQ09MX1BJWEJVRiwgcGl4LAorCQkJICAgQ09MX1BJWFZJ
UywgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfUElYVklTXSksCisJCQkgICBDT0xfQlROVklTLCBH
UE9JTlRFUl9UT19JTlQocm93W0NPTF9CVE5WSVNdKSwKKwkJCSAgIENPTF9CVE5BQ1QsIEdQT0lO
VEVSX1RPX0lOVChyb3dbQ09MX0JUTkFDVF0pLAorCQkJICAgQ09MX0JUTklOQywgR1BPSU5URVJf
VE9fSU5UKHJvd1tDT0xfQlROSU5DXSksCisJCQkgICBDT0xfQlROUkFELCBHUE9JTlRFUl9UT19J
TlQocm93W0NPTF9CVE5SQURdKSwKKwkJCSAgIC0xKTsKKworCWdfb2JqZWN0X3VucmVmKHBpeCk7
Cit9CisKKworLyogQWRkIGEgbm9kZSB0byB0aGUgdHJlZSAqLworc3RhdGljIHZvaWQgcGxhY2Vf
bm9kZShzdHJ1Y3QgbWVudSAqbWVudSwgY2hhciAqKnJvdykKK3sKKwlHdGtUcmVlSXRlciAqcGFy
ZW50ID0gcGFyZW50c1tpbmRlbnQgLSAxXTsKKwlHdGtUcmVlSXRlciAqbm9kZSA9IHBhcmVudHNb
aW5kZW50XTsKKworCWd0a190cmVlX3N0b3JlX2FwcGVuZCh0cmVlLCBub2RlLCBwYXJlbnQpOwor
CXNldF9ub2RlKG5vZGUsIG1lbnUsIHJvdyk7Cit9CisKKworLyogRmluZCBhIG5vZGUgaW4gdGhl
IEdUSysgdHJlZSAqLworc3RhdGljIEd0a1RyZWVJdGVyIGZvdW5kOworCisvKgorICogRmluZCBh
IG1lbnUgaW4gdGhlIEd0a1RyZWUgc3RhcnRpbmcgYXQgcGFyZW50LgorICovCitzdGF0aWMgR3Rr
VHJlZUl0ZXIgKmd0a3RyZWVfaXRlcl9maW5kX25vZGUoR3RrVHJlZUl0ZXIgKnBhcmVudCwKKwkJ
CQkJICAgc3RydWN0IG1lbnUgKnRvZmluZCkKK3sKKwlHdGtUcmVlSXRlciBpdGVyOworCUd0a1Ry
ZWVJdGVyICpjaGlsZCA9ICZpdGVyOworCWdib29sZWFuIHZhbGlkOworCUd0a1RyZWVJdGVyICpy
ZXQ7CisKKwl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfY2hpbGRyZW4obW9kZWwyLCBjaGls
ZCwgcGFyZW50KTsKKwl3aGlsZSAodmFsaWQpIHsKKwkJc3RydWN0IG1lbnUgKm1lbnU7CisKKwkJ
Z3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgY2hpbGQsIDYsICZtZW51LCAtMSk7CisKKwkJaWYg
KG1lbnUgPT0gdG9maW5kKSB7CisJCQltZW1jcHkoJmZvdW5kLCBjaGlsZCwgc2l6ZW9mKEd0a1Ry
ZWVJdGVyKSk7CisJCQlyZXR1cm4gJmZvdW5kOworCQl9CisKKwkJcmV0ID0gZ3RrdHJlZV9pdGVy
X2ZpbmRfbm9kZShjaGlsZCwgdG9maW5kKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisK
KwkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQobW9kZWwyLCBjaGlsZCk7CisJfQor
CisJcmV0dXJuIE5VTEw7Cit9CisKKworLyoKKyAqIFVwZGF0ZSB0aGUgdHJlZSBieSBhZGRpbmcv
cmVtb3ZpbmcgZW50cmllcworICogRG9lcyBub3QgY2hhbmdlIG90aGVyIG5vZGVzCisgKi8KK3N0
YXRpYyB2b2lkIHVwZGF0ZV90cmVlKHN0cnVjdCBtZW51ICpzcmMsIEd0a1RyZWVJdGVyICogZHN0
KQoreworCXN0cnVjdCBtZW51ICpjaGlsZDE7CisJR3RrVHJlZUl0ZXIgaXRlciwgdG1wOworCUd0
a1RyZWVJdGVyICpjaGlsZDIgPSAmaXRlcjsKKwlnYm9vbGVhbiB2YWxpZDsKKwlHdGtUcmVlSXRl
ciAqc2libGluZzsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IG1lbnUgKm1lbnUxLCAq
bWVudTI7CisKKwlpZiAoc3JjID09ICZyb290bWVudSkKKwkJaW5kZW50ID0gMTsKKworCXZhbGlk
ID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9jaGlsZHJlbihtb2RlbDIsIGNoaWxkMiwgZHN0KTsKKwlm
b3IgKGNoaWxkMSA9IHNyYy0+bGlzdDsgY2hpbGQxOyBjaGlsZDEgPSBjaGlsZDEtPm5leHQpIHsK
KworCQlzeW0gPSBjaGlsZDEtPnN5bTsKKworCSAgICAgIHJlcGFyc2U6CisJCW1lbnUxID0gY2hp
bGQxOworCQlpZiAodmFsaWQpCisJCQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCBjaGlsZDIs
IENPTF9NRU5VLAorCQkJCQkgICAmbWVudTIsIC0xKTsKKwkJZWxzZQorCQkJbWVudTIgPSBOVUxM
OwkvLyBmb3JjZSBhZGRpbmcgb2YgYSBmaXJzdCBjaGlsZAorCisjaWZkZWYgREVCVUcKKwkJcHJp
bnRmKCIlKmMlcyB8ICVzXG4iLCBpbmRlbnQsICcgJywKKwkJICAgICAgIG1lbnUxID8gbWVudV9n
ZXRfcHJvbXB0KG1lbnUxKSA6ICJuaWwiLAorCQkgICAgICAgbWVudTIgPyBtZW51X2dldF9wcm9t
cHQobWVudTIpIDogIm5pbCIpOworI2VuZGlmCisKKwkJaWYgKChvcHRfbW9kZSA9PSBPUFRfTk9S
TUFMICYmICFtZW51X2lzX3Zpc2libGUoY2hpbGQxKSkgfHwKKwkJICAgIChvcHRfbW9kZSA9PSBP
UFRfUFJPTVBUICYmICFtZW51X2hhc19wcm9tcHQoY2hpbGQxKSkgfHwKKwkJICAgIChvcHRfbW9k
ZSA9PSBPUFRfQUxMICAgICYmICFtZW51X2dldF9wcm9tcHQoY2hpbGQxKSkpIHsKKworCQkJLyog
cmVtb3ZlIG5vZGUgKi8KKwkJCWlmIChndGt0cmVlX2l0ZXJfZmluZF9ub2RlKGRzdCwgbWVudTEp
ICE9IE5VTEwpIHsKKwkJCQltZW1jcHkoJnRtcCwgY2hpbGQyLCBzaXplb2YoR3RrVHJlZUl0ZXIp
KTsKKwkJCQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfbmV4dChtb2RlbDIsCisJCQkJCQkJ
CSBjaGlsZDIpOworCQkJCWd0a190cmVlX3N0b3JlX3JlbW92ZSh0cmVlMiwgJnRtcCk7CisJCQkJ
aWYgKCF2YWxpZCkKKwkJCQkJcmV0dXJuOwkJLyogbmV4dCBwYXJlbnQgKi8KKwkJCQllbHNlCisJ
CQkJCWdvdG8gcmVwYXJzZTsJLyogbmV4dCBjaGlsZCAqLworCQkJfSBlbHNlCisJCQkJY29udGlu
dWU7CisJCX0KKworCQlpZiAobWVudTEgIT0gbWVudTIpIHsKKwkJCWlmIChndGt0cmVlX2l0ZXJf
ZmluZF9ub2RlKGRzdCwgbWVudTEpID09IE5VTEwpIHsJLy8gYWRkIG5vZGUKKwkJCQlpZiAoIXZh
bGlkICYmICFtZW51MikKKwkJCQkJc2libGluZyA9IE5VTEw7CisJCQkJZWxzZQorCQkJCQlzaWJs
aW5nID0gY2hpbGQyOworCQkJCWd0a190cmVlX3N0b3JlX2luc2VydF9iZWZvcmUodHJlZTIsCisJ
CQkJCQkJICAgICBjaGlsZDIsCisJCQkJCQkJICAgICBkc3QsIHNpYmxpbmcpOworCQkJCXNldF9u
b2RlKGNoaWxkMiwgbWVudTEsIGZpbGxfcm93KG1lbnUxKSk7CisJCQkJaWYgKG1lbnUyID09IE5V
TEwpCisJCQkJCXZhbGlkID0gVFJVRTsKKwkJCX0gZWxzZSB7CS8vIHJlbW92ZSBub2RlCisJCQkJ
bWVtY3B5KCZ0bXAsIGNoaWxkMiwgc2l6ZW9mKEd0a1RyZWVJdGVyKSk7CisJCQkJdmFsaWQgPSBn
dGtfdHJlZV9tb2RlbF9pdGVyX25leHQobW9kZWwyLAorCQkJCQkJCQkgY2hpbGQyKTsKKwkJCQln
dGtfdHJlZV9zdG9yZV9yZW1vdmUodHJlZTIsICZ0bXApOworCQkJCWlmICghdmFsaWQpCisJCQkJ
CXJldHVybjsJLy8gbmV4dCBwYXJlbnQKKwkJCQllbHNlCisJCQkJCWdvdG8gcmVwYXJzZTsJLy8g
bmV4dCBjaGlsZAorCQkJfQorCQl9IGVsc2UgaWYgKHN5bSAmJiAoc3ltLT5mbGFncyAmIFNZTUJP
TF9DSEFOR0VEKSkgeworCQkJc2V0X25vZGUoY2hpbGQyLCBtZW51MSwgZmlsbF9yb3cobWVudTEp
KTsKKwkJfQorCisJCWluZGVudCsrOworCQl1cGRhdGVfdHJlZShjaGlsZDEsIGNoaWxkMik7CisJ
CWluZGVudC0tOworCisJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwg
Y2hpbGQyKTsKKwl9Cit9CisKKworLyogRGlzcGxheSB0aGUgd2hvbGUgdHJlZSAoc2luZ2xlL3Nw
bGl0L2Z1bGwgdmlldykgKi8KK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZShzdHJ1Y3QgbWVudSAq
bWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOwor
CXN0cnVjdCBtZW51ICpjaGlsZDsKKwllbnVtIHByb3BfdHlwZSBwdHlwZTsKKworCWlmIChtZW51
ID09ICZyb290bWVudSkgeworCQlpbmRlbnQgPSAxOworCQljdXJyZW50ID0gJnJvb3RtZW51Owor
CX0KKworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dCkgeworCQlwcm9wID0gY2hpbGQtPnByb21wdDsKKwkJc3ltID0gY2hpbGQtPnN5bTsKKwkJcHR5
cGUgPSBwcm9wID8gcHJvcC0+dHlwZSA6IFBfVU5LTk9XTjsKKworCQlpZiAoc3ltKQorCQkJc3lt
LT5mbGFncyAmPSB+U1lNQk9MX0NIQU5HRUQ7CisKKwkJaWYgKCh2aWV3X21vZGUgPT0gU1BMSVRf
VklFVykKKwkJICAgICYmICEoY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UKSAmJiAodHJlZSA9PSB0
cmVlMSkpCisJCQljb250aW51ZTsKKworCQlpZiAoKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSAm
JiAoY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UKQorCQkgICAgJiYgKHRyZWUgPT0gdHJlZTIpKQor
CQkJY29udGludWU7CisKKwkJaWYgKChvcHRfbW9kZSA9PSBPUFRfTk9STUFMICYmIG1lbnVfaXNf
dmlzaWJsZShjaGlsZCkpIHx8CisJCSAgICAob3B0X21vZGUgPT0gT1BUX1BST01QVCAmJiBtZW51
X2hhc19wcm9tcHQoY2hpbGQpKSB8fAorCQkgICAgKG9wdF9tb2RlID09IE9QVF9BTEwgICAgJiYg
bWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpCisJCQlwbGFjZV9ub2RlKGNoaWxkLCBmaWxsX3Jvdyhj
aGlsZCkpOworI2lmZGVmIERFQlVHCisJCXByaW50ZigiJSpjJXM6ICIsIGluZGVudCwgJyAnLCBt
ZW51X2dldF9wcm9tcHQoY2hpbGQpKTsKKwkJcHJpbnRmKCIlcyIsIGNoaWxkLT5mbGFncyAmIE1F
TlVfUk9PVCA/ICJyb290bWVudSB8ICIgOiAiIik7CisJCXByaW50ZigiJXMiLCBwcm9wX2dldF90
eXBlX25hbWUocHR5cGUpKTsKKwkJcHJpbnRmKCIgfCAiKTsKKwkJaWYgKHN5bSkgeworCQkJcHJp
bnRmKCIlcyIsIHN5bV90eXBlX25hbWUoc3ltLT50eXBlKSk7CisJCQlwcmludGYoIiB8ICIpOwor
CQkJcHJpbnRmKCIlcyIsIGRiZ19zeW1fZmxhZ3Moc3ltLT5mbGFncykpOworCQkJcHJpbnRmKCJc
biIpOworCQl9IGVsc2UKKwkJCXByaW50ZigiXG4iKTsKKyNlbmRpZgorCQlpZiAoKHZpZXdfbW9k
ZSAhPSBGVUxMX1ZJRVcpICYmIChwdHlwZSA9PSBQX01FTlUpCisJCSAgICAmJiAodHJlZSA9PSB0
cmVlMikpCisJCQljb250aW51ZTsKKy8qCisJCWlmICgoKG1lbnUgIT0gJnJvb3RtZW51KSAmJiAh
KG1lbnUtPmZsYWdzICYgTUVOVV9ST09UKSkKKwkJICAgIHx8ICh2aWV3X21vZGUgPT0gRlVMTF9W
SUVXKQorCQkgICAgfHwgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSkqLworCisJCS8qIENoYW5n
ZSBwYW5lZCBwb3NpdGlvbiBpZiB0aGUgdmlldyBpcyBub3QgaW4gJ3NwbGl0IG1vZGUnICovCisJ
CWlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcgfHwgdmlld19tb2RlID09IEZVTExfVklFVykg
eworCQkJZ3RrX3BhbmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQoaHBhbmVkKSwgMCk7CisJCX0K
KworCQlpZiAoKCh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcpICYmIChtZW51LT5mbGFncyAmIE1F
TlVfUk9PVCkpCisJCSAgICB8fCAodmlld19tb2RlID09IEZVTExfVklFVykKKwkJICAgIHx8ICh2
aWV3X21vZGUgPT0gU1BMSVRfVklFVykpIHsKKwkJCWluZGVudCsrOworCQkJZGlzcGxheV90cmVl
KGNoaWxkKTsKKwkJCWluZGVudC0tOworCQl9CisJfQorfQorCisvKiBEaXNwbGF5IGEgcGFydCBv
ZiB0aGUgdHJlZSBzdGFydGluZyBhdCBjdXJyZW50IG5vZGUgKHNpbmdsZS9zcGxpdCB2aWV3KSAq
Lworc3RhdGljIHZvaWQgZGlzcGxheV90cmVlX3BhcnQodm9pZCkKK3sKKwlpZiAodHJlZTIpCisJ
CWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsKKwlpZiAodmlld19tb2RlID09IFNJTkdMRV9W
SUVXKQorCQlkaXNwbGF5X3RyZWUoY3VycmVudCk7CisJZWxzZSBpZiAodmlld19tb2RlID09IFNQ
TElUX1ZJRVcpCisJCWRpc3BsYXlfdHJlZShicm93c2VkKTsKKwlndGtfdHJlZV92aWV3X2V4cGFu
ZF9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMl93KSk7Cit9CisKKy8qIERpc3BsYXkgdGhlIGxpc3Qg
aW4gdGhlIGxlZnQgZnJhbWUgKHNwbGl0IHZpZXcpICovCitzdGF0aWMgdm9pZCBkaXNwbGF5X2xp
c3Qodm9pZCkKK3sKKwlpZiAodHJlZTEpCisJCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUxKTsK
KworCXRyZWUgPSB0cmVlMTsKKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsKKwlndGtfdHJlZV92
aWV3X2V4cGFuZF9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMV93KSk7CisJdHJlZSA9IHRyZWUyOwor
fQorCitzdGF0aWMgdm9pZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlz
dHJ1Y3QgbWVudSAqY2hpbGQ7CisJc3RhdGljIGludCBtZW51X2NudCA9IDA7CisKKwltZW51LT5m
bGFncyB8PSBNRU5VX1JPT1Q7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0KSB7CisJCWlmIChjaGlsZC0+cHJvbXB0ICYmIGNoaWxkLT5wcm9tcHQt
PnR5cGUgPT0gUF9NRU5VKSB7CisJCQltZW51X2NudCsrOworCQkJZml4dXBfcm9vdG1lbnUoY2hp
bGQpOworCQkJbWVudV9jbnQtLTsKKwkJfSBlbHNlIGlmICghbWVudV9jbnQpCisJCQlmaXh1cF9y
b290bWVudShjaGlsZCk7CisJfQorfQorCisKKy8qIE1haW4gKi8KK2ludCBtYWluKGludCBhYywg
Y2hhciAqYXZbXSkKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNoYXIgKmVudjsKKwlnY2hhciAq
Z2xhZGVfZmlsZTsKKworCS8qIEdUSyBzdHVmZnMgKi8KKwlndGtfc2V0X2xvY2FsZSgpOworCWd0
a19pbml0KCZhYywgJmF2KTsKKwlnbGFkZV9pbml0KCk7CisKKwkvL2FkZF9waXhtYXBfZGlyZWN0
b3J5IChQQUNLQUdFX0RBVEFfRElSICIvIiBQQUNLQUdFICIvcGl4bWFwcyIpOworCS8vYWRkX3Bp
eG1hcF9kaXJlY3RvcnkgKFBBQ0tBR0VfU09VUkNFX0RJUiAiL3BpeG1hcHMiKTsKKworCS8qIERl
dGVybWluZSBHVUkgcGF0aCAqLworCWVudiA9IGdldGVudihTUkNUUkVFKTsKKwlpZiAoZW52KQor
CQlnbGFkZV9maWxlID0gZ19zdHJjb25jYXQoZW52LCAiL3NjcmlwdHMva2NvbmZpZy9nY29uZi5n
bGFkZSIsIE5VTEwpOworCWVsc2UgaWYgKGF2WzBdWzBdID09ICcvJykKKwkJZ2xhZGVfZmlsZSA9
IGdfc3RyY29uY2F0KGF2WzBdLCAiLmdsYWRlIiwgTlVMTCk7CisJZWxzZQorCQlnbGFkZV9maWxl
ID0gZ19zdHJjb25jYXQoZ19nZXRfY3VycmVudF9kaXIoKSwgIi8iLCBhdlswXSwgIi5nbGFkZSIs
IE5VTEwpOworCisJLyogQ29uZiBzdHVmZnMgKi8KKwlpZiAoYWMgPiAxICYmIGF2WzFdWzBdID09
ICctJykgeworCQlzd2l0Y2ggKGF2WzFdWzFdKSB7CisJCWNhc2UgJ2EnOgorCQkJLy9zaG93QWxs
ID0gMTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJh
Y2soTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSAnaCc6CisJCWNhc2UgJz8nOgorCQkJcHJpbnRm
KCIlcyBbLXNdIDxjb25maWc+XG4iLCBhdlswXSk7CisJCQlleGl0KDApOworCQl9CisJCW5hbWUg
PSBhdlsyXTsKKwl9IGVsc2UKKwkJbmFtZSA9IGF2WzFdOworCisJY29uZl9wYXJzZShuYW1lKTsK
KwlmaXh1cF9yb290bWVudSgmcm9vdG1lbnUpOworCWNvbmZfcmVhZChOVUxMKTsKKworCS8qIExv
YWQgdGhlIGludGVyZmFjZSBhbmQgY29ubmVjdCBzaWduYWxzICovCisJaW5pdF9tYWluX3dpbmRv
dyhnbGFkZV9maWxlKTsKKwlpbml0X3RyZWVfbW9kZWwoKTsKKwlpbml0X2xlZnRfdHJlZSgpOwor
CWluaXRfcmlnaHRfdHJlZSgpOworCisJc3dpdGNoICh2aWV3X21vZGUpIHsKKwljYXNlIFNJTkdM
RV9WSUVXOgorCQlkaXNwbGF5X3RyZWVfcGFydCgpOworCQlicmVhazsKKwljYXNlIFNQTElUX1ZJ
RVc6CisJCWRpc3BsYXlfbGlzdCgpOworCQlicmVhazsKKwljYXNlIEZVTExfVklFVzoKKwkJZGlz
cGxheV90cmVlKCZyb290bWVudSk7CisJCWJyZWFrOworCX0KKworCWd0a19tYWluKCk7CisKKwly
ZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY29uZl9jaGFuZ2VkKHZvaWQpCit7CisJYm9vbCBj
aGFuZ2VkID0gY29uZl9nZXRfY2hhbmdlZCgpOworCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShz
YXZlX2J0biwgY2hhbmdlZCk7CisJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHNhdmVfbWVudV9p
dGVtLCBjaGFuZ2VkKTsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9nY29uZi5nbGFk
ZSBiL3N1cHBvcnQva2NvbmZpZy9nY29uZi5nbGFkZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4wM2U5N2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL2dj
b25mLmdsYWRlCkBAIC0wLDAgKzEsNjYxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxv
bmU9Im5vIj8+IDwhLS0qLSBtb2RlOiB4bWwgLSotLT4KKworPGdsYWRlLWludGVyZmFjZT4KKwor
PHdpZGdldCBjbGFzcz0iR3RrV2luZG93IiBpZD0id2luZG93MSI+CisgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFu
c2xhdGFibGU9InllcyI+R3RrIFVuaWtyYWZ0IENvbmZpZ3VyYXRvcjwvcHJvcGVydHk+CisgIDxw
cm9wZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lORE9XX1RPUExFVkVMPC9wcm9wZXJ0eT4KKyAgPHBy
b3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfTk9ORTwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+RmFsc2U8L3Byb3BlcnR5PgorICA8cHJvcGVydHkg
bmFtZT0iZGVmYXVsdF93aWR0aCI+NjQwPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9ImRl
ZmF1bHRfaGVpZ2h0Ij40ODA8L3Byb3BlcnR5PgorICA8cHJvcGVydHkgbmFtZT0icmVzaXphYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9ImRlc3Ryb3lfd2l0aF9wYXJlbnQi
PkZhbHNlPC9wcm9wZXJ0eT4KKyAgPHByb3BlcnR5IG5hbWU9ImRlY29yYXRlZCI+VHJ1ZTwvcHJv
cGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJza2lwX3Rhc2tiYXJfaGludCI+RmFsc2U8L3Byb3Bl
cnR5PgorICA8cHJvcGVydHkgbmFtZT0ic2tpcF9wYWdlcl9oaW50Ij5GYWxzZTwvcHJvcGVydHk+
CisgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQiPkdES19XSU5ET1dfVFlQRV9ISU5UX05PUk1B
TDwvcHJvcGVydHk+CisgIDxwcm9wZXJ0eSBuYW1lPSJncmF2aXR5Ij5HREtfR1JBVklUWV9OT1JU
SF9XRVNUPC9wcm9wZXJ0eT4KKyAgPHNpZ25hbCBuYW1lPSJkZXN0cm95IiBoYW5kbGVyPSJvbl93
aW5kb3cxX2Rlc3Ryb3kiIG9iamVjdD0id2luZG93MSIvPgorICA8c2lnbmFsIG5hbWU9InNpemVf
cmVxdWVzdCIgaGFuZGxlcj0ib25fd2luZG93MV9zaXplX3JlcXVlc3QiIG9iamVjdD0idnBhbmVk
MSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxMSBKYW4gMjAwMiAxNjoxNzoxMSBHTVQi
Lz4KKyAgPHNpZ25hbCBuYW1lPSJkZWxldGVfZXZlbnQiIGhhbmRsZXI9Im9uX3dpbmRvdzFfZGVs
ZXRlX2V2ZW50IiBvYmplY3Q9IndpbmRvdzEiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwg
MDkgTWFyIDIwMDMgMTk6NDI6NDYgR01UIi8+CisKKyAgPGNoaWxkPgorICAgIDx3aWRnZXQgY2xh
c3M9Ikd0a1ZCb3giIGlkPSJ2Ym94MSI+CisgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+CisgICAgICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPkZhbHNl
PC9wcm9wZXJ0eT4KKyAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4wPC9wcm9wZXJ0eT4K
KworICAgICAgPGNoaWxkPgorCTx3aWRnZXQgY2xhc3M9Ikd0a01lbnVCYXIiIGlkPSJtZW51YmFy
MSI+CisJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisKKwkgIDxj
aGlsZD4KKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrTWVudUl0ZW0iIGlkPSJmaWxlMSI+CisJICAg
ICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9GaWxlPC9wcm9wZXJ0eT4KKwkg
ICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisKKwkg
ICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a01lbnUiIGlkPSJmaWxlMV9tZW51Ij4K
KworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlk
PSJsb2FkMSI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5M
b2FkIGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFi
ZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fTG9hZDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBu
YW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fbG9hZDFfYWN0aXZhdGUiLz4KKwkJICAgICAgPGFj
Y2VsZXJhdG9yIGtleT0iTCIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFj
dGl2YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8
d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlMzkiPgorCQkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+
Z3RrLW9wZW48L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9w
cm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJ
CSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5
IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwv
cHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0
PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJ
bWFnZU1lbnVJdGVtIiBpZD0ic2F2ZTEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFu
c2xhdGFibGU9InllcyI+U2F2ZSB0aGUgY29uZmlnIGluIC5jb25maWc8L3Byb3BlcnR5PgorCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fU2F2ZTwvcHJv
cGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9w
ZXJ0eT4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2F2ZV9h
Y3RpdmF0ZSIvPgorCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJTIiBtb2RpZmllcnM9IkdES19D
T05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4KKworCQkgICAgICA8Y2hpbGQgaW50ZXJu
YWwtY2hpbGQ9ImltYWdlIj4KKwkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0
MCI+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJCSAg
PHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstc2F2ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0
eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieGFs
aWduIj4wLjU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3By
b3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+CisJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4KKwkJCTwvd2lkZ2V0PgorCQkgICAgICA8
L2NoaWxkPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKworCQkgIDxjaGlsZD4KKwkJ
ICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJzYXZlX2FzMSI+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZlIHRoZSBjb25maWcg
aW4gYSBmaWxlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFu
c2xhdGFibGU9InllcyI+U2F2ZSBfYXM8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0i
YWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmVfYXMxX2FjdGl2YXRlIi8+CisKKwkJICAgICAgPGNo
aWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIg
aWQ9ImltYWdlNDEiPgorCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXNhdmUtYXM8L3Byb3BlcnR5Pgor
CQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3Bl
cnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9Inlh
bGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3Bl
cnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdl
dD4KKwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJ
ICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTZXBhcmF0b3JNZW51SXRlbSIgaWQ9
InNlcGFyYXRvcjEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJv
cGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkg
ICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9InF1aXQxIj4KKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fUXVpdDwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAg
ICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fcXVpdDFfYWN0aXZhdGUiLz4K
KwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iUSIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNL
IiBzaWduYWw9ImFjdGl2YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJp
bWFnZSI+CisJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDIiPgorCQkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJzdG9jayI+Z3RrLXF1aXQ8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0iaWNv
bl9zaXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9w
cm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJ
CSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFt
ZT0ieXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9jaGlsZD4KKwkJ
ICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisJCTwvd2lkZ2V0PgorCSAgICAgIDwvY2hpbGQ+
CisJICAgIDwvd2lkZ2V0PgorCSAgPC9jaGlsZD4KKworCSAgPGNoaWxkPgorCSAgICA8d2lkZ2V0
IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9Im9wdGlvbnMxIj4KKwkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVs
IiB0cmFuc2xhdGFibGU9InllcyI+X09wdGlvbnM8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKworCSAgICAgIDxjaGlsZD4K
KwkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9Im9wdGlvbnMxX21lbnUiPgorCisJCSAgPGNo
aWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIgaWQ9InNob3dfbmFt
ZTEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJ
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBu
YW1lPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFi
bGU9InllcyI+U2hvdyBfbmFtZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1
c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFj
dGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBo
YW5kbGVyPSJvbl9zaG93X25hbWUxX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8
L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51
SXRlbSIgaWQ9InNob3dfcmFuZ2UxIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPlNob3cgcmFuZ2UgKFkvTS9OKTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgX3JhbmdlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5
PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAg
ICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3Nob3dfcmFuZ2UxX2FjdGl2
YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkg
ICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIgaWQ9InNob3dfZGF0YTEiPgorCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyB2YWx1ZSBvZiB0
aGUgb3B0aW9uPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFu
c2xhdGFibGU9InllcyI+U2hvdyBfZGF0YTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2
YXRlIiBoYW5kbGVyPSJvbl9zaG93X2RhdGExX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4K
KwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrU2Vw
YXJhdG9yTWVudUl0ZW0iIGlkPSJzZXBhcmF0b3IyIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4K
KworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1JhZGlvTWVudUl0ZW0iIGlk
PSJzZXRfb3B0aW9uX21vZGUxIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRh
YmxlPSJ5ZXMiPlNob3cgbm9ybWFsIG9wdGlvbnM8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IG5vcm1hbCBvcHRpb25zPC9w
cm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3By
b3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2V0X29wdGlvbl9t
b2RlMV9hY3RpdmF0ZSIvPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKworCQkgIDxj
aGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1JhZGlvTWVudUl0ZW0iIGlkPSJzZXRfb3B0
aW9uX21vZGUyIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
PlNob3cgYWxsIG9wdGlvbnM8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFi
ZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBfb3B0aW9uczwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICAg
ICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkgICAgICA8cHJv
cGVydHkgbmFtZT0iZ3JvdXAiPnNldF9vcHRpb25fbW9kZTE8L3Byb3BlcnR5PgorCQkgICAgICA8
c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zZXRfb3B0aW9uX21vZGUyX2FjdGl2
YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCSAgPGNoaWxkPgorCQkg
ICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9NZW51SXRlbSIgaWQ9InNldF9vcHRpb25fbW9kZTMi
PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBhbGwg
b3B0aW9ucyB3aXRoIHByb21wdHM8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
bGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBwcm9tcHQgb3B0aW9uczwvcHJvcGVy
dHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5PgorCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0iZ3JvdXAiPnNldF9vcHRpb25fbW9kZTE8L3Byb3BlcnR5Pgor
CQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zZXRfb3B0aW9uX21v
ZGUzX2FjdGl2YXRlIi8+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCisJCTwvd2lk
Z2V0PgorCSAgICAgIDwvY2hpbGQ+CisJICAgIDwvd2lkZ2V0PgorCSAgPC9jaGlsZD4KKworCSAg
PGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9ImhlbHAxIj4KKwkg
ICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAgPHBy
b3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0hlbHA8L3Byb3BlcnR5Pgor
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwor
CSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9ImhlbHAxX21lbnUi
PgorCisJCSAgPGNoaWxkPgorCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIg
aWQ9ImludHJvZHVjdGlvbjEiPgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxl
PSJ5ZXMiPl9JbnRyb2R1Y3Rpb248L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
dXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0
aXZhdGUiIGhhbmRsZXI9Im9uX2ludHJvZHVjdGlvbjFfYWN0aXZhdGUiIGxhc3RfbW9kaWZpY2F0
aW9uX3RpbWU9IkZyaSwgMTUgTm92IDIwMDIgMjA6MjY6MzAgR01UIi8+CisJCSAgICAgIDxhY2Nl
bGVyYXRvciBrZXk9IkkiIG1vZGlmaWVycz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3Rp
dmF0ZSIvPgorCisJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPgorCQkJPHdp
ZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQzIj4KKwkJCSAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0
ay1kaWFsb2ctcXVlc3Rpb248L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9z
aXplIj4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9w
ZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAg
PHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0i
eXBhZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9jaGlsZD4KKwkJICAg
IDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNs
YXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0iYWJvdXQxIj4KKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFi
ZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fQWJvdXQ8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxzaWduYWwg
bmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2Fib3V0MV9hY3RpdmF0ZSIgbGFzdF9tb2RpZmlj
YXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBHTVQiLz4KKwkJICAgICAgPGFj
Y2VsZXJhdG9yIGtleT0iQSIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFj
dGl2YXRlIi8+CisKKwkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+CisJCQk8
d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDQiPgorCQkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+
Z3RrLXByb3BlcnRpZXM8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXpl
Ij4xPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0
eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4KKwkJCSAgPHBy
b3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5PgorCQkJICA8cHJvcGVydHkgbmFtZT0ieXBh
ZCI+MDwvcHJvcGVydHk+CisJCQk8L3dpZGdldD4KKwkJICAgICAgPC9jaGlsZD4KKwkJICAgIDwv
d2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNz
PSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ibGljZW5zZTEiPgorCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJl
bCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9MaWNlbnNlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8c2lnbmFs
IG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9saWNlbnNlMV9hY3RpdmF0ZSIgbGFzdF9tb2Rp
ZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBHTVQiLz4KKworCQkgICAg
ICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4KKwkJCTx3aWRnZXQgY2xhc3M9Ikd0a0lt
YWdlIiBpZD0iaW1hZ2U0NSI+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstanVzdGlmeS1maWxsPC9w
cm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+CisJ
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+CisJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFk
Ij4wPC9wcm9wZXJ0eT4KKwkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5Pgor
CQkJPC93aWRnZXQ+CisJCSAgICAgIDwvY2hpbGQ+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2No
aWxkPgorCQk8L3dpZGdldD4KKwkgICAgICA8L2NoaWxkPgorCSAgICA8L3dpZGdldD4KKwkgIDwv
Y2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tpbmc+CisJICA8cHJvcGVydHkgbmFtZT0icGFkZGlu
ZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVy
dHk+CisJICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8L3Byb3BlcnR5PgorCTwvcGFja2lu
Zz4KKyAgICAgIDwvY2hpbGQ+CisKKyAgICAgIDxjaGlsZD4KKwk8d2lkZ2V0IGNsYXNzPSJHdGtI
YW5kbGVCb3giIGlkPSJoYW5kbGVib3gxIj4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJzaGFkb3dfdHlwZSI+R1RLX1NIQURP
V19PVVQ8L3Byb3BlcnR5PgorCSAgPHByb3BlcnR5IG5hbWU9ImhhbmRsZV9wb3NpdGlvbiI+R1RL
X1BPU19MRUZUPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJzbmFwX2VkZ2UiPkdUS19Q
T1NfVE9QPC9wcm9wZXJ0eT4KKworCSAgPGNoaWxkPgorCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtU
b29sYmFyIiBpZD0idG9vbGJhcjEiPgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPkdUS19P
UklFTlRBVElPTl9IT1JJWk9OVEFMPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0i
dG9vbGJhcl9zdHlsZSI+R1RLX1RPT0xCQVJfQk9USDwvcHJvcGVydHk+CisJICAgICAgPHByb3Bl
cnR5IG5hbWU9InRvb2x0aXBzIj5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFt
ZT0ic2hvd19hcnJvdyI+VHJ1ZTwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRn
ZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b24xIj4KKwkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAi
IHRyYW5zbGF0YWJsZT0ieWVzIj5Hb2VzIHVwIG9mIG9uZSBsZXZlbCAoc2luZ2xlIHZpZXcpPC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5C
YWNrPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwv
cHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstdW5kbzwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVy
dHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJ
ICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2JhY2tfY2xpY2tlZCIvPgorCQk8
L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVy
dHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgorCisJICAgICAgPGNoaWxkPgorCQk8
d2lkZ2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMSI+CisJCSAgPHByb3BlcnR5
IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1w
b3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNs
YXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjEiPgorCQkgICAgICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgICA8L3dpZGdldD4KKwkJICA8L2No
aWxkPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFu
ZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+RmFs
c2U8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxj
aGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjIiPgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkg
bmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxvYWQgYSBjb25maWcgZmlsZTwvcHJv
cGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TG9h
ZDwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3By
b3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW9wZW48L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5
PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAg
PHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9sb2FkX2NsaWNrZWQiLz4KKwkJPC93
aWRnZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5
PgorCQk8L3BhY2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdp
ZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjMiPgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgYSBjb25maWcgZmlsZTwvcHJvcGVydHk+CisJCSAg
PHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZTwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLXNhdmU8L3Byb3BlcnR5PgorCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVy
dHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25hbCBuYW1l
PSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zYXZlX2FjdGl2YXRlIi8+CisJCTwvd2lkZ2V0PgorCQk8
cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJ
CSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJPC9wYWNr
aW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9
Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0ZW0yIj4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRh
bCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwi
PlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNl
PC9wcm9wZXJ0eT4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBh
cmF0b3IiIGlkPSJ2c2VwYXJhdG9yMiI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgIDwvd2lkZ2V0PgorCQkgIDwvY2hpbGQ+CisJCTwvd2lk
Z2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJv
cGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxzZTwvcHJvcGVydHk+
CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgorCisJICAgICAgPGNoaWxkPgorCQk8d2lk
Z2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uNCI+CisJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlw
IiB0cmFuc2xhdGFibGU9InllcyI+U2luZ2xlIHZpZXc8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNpbmdsZTwvcHJvcGVydHk+CisJCSAg
PHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW1pc3NpbmctaW1hZ2U8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJv
cGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25hbCBu
YW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zaW5nbGVfY2xpY2tlZCIgbGFzdF9tb2RpZmljYXRp
b25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODozOSBHTVQiLz4KKwkJPC93aWRnZXQ+CisJ
CTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4K
KwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5PgorCQk8L3Bh
Y2tpbmc+CisJICAgICAgPC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFz
cz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjUiPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPlNwbGl0IHZpZXc8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJs
YWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNwbGl0PC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkg
bmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9
InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8c2lnbmFsIG5hbWU9ImNsaWNr
ZWQiIGhhbmRsZXI9Im9uX3NwbGl0X2NsaWNrZWQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1
biwgMTIgSmFuIDIwMDMgMTQ6Mjg6NDUgR01UIi8+CisJCTwvd2lkZ2V0PgorCQk8cGFja2luZz4K
KwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3Bl
cnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4KKwkJPC9wYWNraW5nPgorCSAg
ICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xC
dXR0b24iIGlkPSJidXR0b242Ij4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwv
cHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVz
Ij5GdWxsIHZpZXc8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPkZ1bGw8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5k
ZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0
ay1taXNzaW5nLWltYWdlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9o
b3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92
ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFu
dCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0i
b25fZnVsbF9jbGlja2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAz
IDE0OjI4OjUwIEdNVCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5
IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21v
Z2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgor
CisJICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xp
dGVtMyI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisKKwkJICA8Y2hp
bGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjMi
PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAg
ICA8L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAg
PHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5PgorCQk8L3BhY2tpbmc+CisJICAgICAg
PC9jaGlsZD4KKworCSAgICAgIDxjaGlsZD4KKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRv
biIgaWQ9ImJ1dHRvbjciPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkNv
bGxhcHNlIHRoZSB3aG9sZSB0cmVlIGluIHRoZSByaWdodCBmcmFtZTwvcHJvcGVydHk+CisJCSAg
PHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Q29sbGFwc2U8L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1yZW1vdmU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5PgorCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8
cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHNpZ25h
bCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9jb2xsYXBzZV9jbGlja2VkIi8+CisJCTwvd2lk
Z2V0PgorCQk8cGFja2luZz4KKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJv
cGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4K
KwkJPC9wYWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRn
ZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b244Ij4KKwkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAi
IHRyYW5zbGF0YWJsZT0ieWVzIj5FeHBhbmQgdGhlIHdob2xlIHRyZWUgaW4gdGhlIHJpZ2h0IGZy
YW1lPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0i
eWVzIj5FeHBhbmQ8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5l
Ij5UcnVlPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1hZGQ8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8
L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9w
cm9wZXJ0eT4KKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVy
dHk+CisJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9leHBhbmRfY2xpY2tl
ZCIvPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFu
ZCI+RmFsc2U8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1
ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgorCSAgICA8L3dpZGdl
dD4KKwkgIDwvY2hpbGQ+CisJPC93aWRnZXQ+CisJPHBhY2tpbmc+CisJICA8cHJvcGVydHkgbmFt
ZT0icGFkZGluZyI+MDwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxz
ZTwvcHJvcGVydHk+CisJICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8L3Byb3BlcnR5Pgor
CTwvcGFja2luZz4KKyAgICAgIDwvY2hpbGQ+CisKKyAgICAgIDxjaGlsZD4KKwk8d2lkZ2V0IGNs
YXNzPSJHdGtIUGFuZWQiIGlkPSJocGFuZWQxIj4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJ3aWR0aF9y
ZXF1ZXN0Ij4xPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5Pgor
CSAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4wPC9wcm9wZXJ0eT4KKworCSAgPGNoaWxkPgor
CSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93
MSI+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFU
SUM8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+
R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJz
aGFkb3dfdHlwZSI+R1RLX1NIQURPV19JTjwvcHJvcGVydHk+CisJICAgICAgPHByb3BlcnR5IG5h
bWU9IndpbmRvd19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9QX0xFRlQ8L3Byb3BlcnR5PgorCisJ
ICAgICAgPGNoaWxkPgorCQk8d2lkZ2V0IGNsYXNzPSJHdGtUcmVlVmlldyIgaWQ9InRyZWV2aWV3
MSI+CisJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxw
cm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBu
YW1lPSJoZWFkZXJzX3Zpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1l
PSJydWxlc19oaW50Ij5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9InJlb3Jk
ZXJhYmxlIj5GYWxzZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImVuYWJsZV9zZWFy
Y2giPkZhbHNlPC9wcm9wZXJ0eT4KKwkJICA8c2lnbmFsIG5hbWU9ImN1cnNvcl9jaGFuZ2VkIiBo
YW5kbGVyPSJvbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQiIGxhc3RfbW9kaWZpY2F0aW9uX3Rp
bWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTg6MjIgR01UIi8+CisJCSAgPHNpZ25hbCBuYW1lPSJi
dXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3MV9idXR0b25fcHJlc3NfZXZl
bnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTY6MDM6NTIgR01U
Ii8+CisJCSAgPHNpZ25hbCBuYW1lPSJrZXlfcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2
aWV3Ml9rZXlfcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFu
IDIwMDMgMTY6MTE6NDQgR01UIi8+CisJCTwvd2lkZ2V0PgorCSAgICAgIDwvY2hpbGQ+CisJICAg
IDwvd2lkZ2V0PgorCSAgICA8cGFja2luZz4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hyaW5r
Ij5UcnVlPC9wcm9wZXJ0eT4KKwkgICAgICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5GYWxzZTwv
cHJvcGVydHk+CisJICAgIDwvcGFja2luZz4KKwkgIDwvY2hpbGQ+CisKKwkgIDxjaGlsZD4KKwkg
ICAgPHdpZGdldCBjbGFzcz0iR3RrVlBhbmVkIiBpZD0idnBhbmVkMSI+CisJICAgICAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5PgorCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3Np
dGlvbiI+MDwvcHJvcGVydHk+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xhc3M9Ikd0
a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cyIj4KKwkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxi
YXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5
IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+
CisJCSAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBlIj5HVEtfU0hBRE9XX0lOPC9wcm9wZXJ0
eT4KKwkJICA8cHJvcGVydHkgbmFtZT0id2luZG93X3BsYWNlbWVudCI+R1RLX0NPUk5FUl9UT1Bf
TEVGVDwvcHJvcGVydHk+CisKKwkJICA8Y2hpbGQ+CisJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtU
cmVlVmlldyIgaWQ9InRyZWV2aWV3MiI+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1
ZTwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNfZm9jdXMiPlRydWU8L3By
b3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZGVyc192aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJ1bGVzX2hpbnQiPkZhbHNlPC9wcm9w
ZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJlb3JkZXJhYmxlIj5GYWxzZTwvcHJvcGVy
dHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVfc2VhcmNoIj5GYWxzZTwvcHJvcGVy
dHk+CisJCSAgICAgIDxzaWduYWwgbmFtZT0iY3Vyc29yX2NoYW5nZWQiIGhhbmRsZXI9Im9uX3Ry
ZWV2aWV3Ml9jdXJzb3JfY2hhbmdlZCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBK
YW4gMjAwMyAxNTo1Nzo1NSBHTVQiLz4KKwkJICAgICAgPHNpZ25hbCBuYW1lPSJidXR0b25fcHJl
c3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9idXR0b25fcHJlc3NfZXZlbnQiIGxhc3Rf
bW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTc6NTggR01UIi8+CisJCSAg
ICAgIDxzaWduYWwgbmFtZT0ia2V5X3ByZXNzX2V2ZW50IiBoYW5kbGVyPSJvbl90cmVldmlldzJf
a2V5X3ByZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAz
IDE1OjU4OjAxIEdNVCIvPgorCQkgICAgPC93aWRnZXQ+CisJCSAgPC9jaGlsZD4KKwkJPC93aWRn
ZXQ+CisJCTxwYWNraW5nPgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsiPlRydWU8L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPkZhbHNlPC9wcm9wZXJ0eT4KKwkJPC9w
YWNraW5nPgorCSAgICAgIDwvY2hpbGQ+CisKKwkgICAgICA8Y2hpbGQ+CisJCTx3aWRnZXQgY2xh
c3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3czIj4KKwkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9Imhz
Y3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX05FVkVSPC9wcm9wZXJ0eT4KKwkJICA8cHJvcGVy
dHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0
eT4KKwkJICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUiPkdUS19TSEFET1dfSU48L3Byb3Bl
cnR5PgorCQkgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxhY2VtZW50Ij5HVEtfQ09STkVSX1RP
UF9MRUZUPC9wcm9wZXJ0eT4KKworCQkgIDxjaGlsZD4KKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0
a1RleHRWaWV3IiBpZD0idGV4dHZpZXczIj4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGUiPlRydWU8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5U
cnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImVkaXRhYmxlIj5GYWxzZTwv
cHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvdmVyd3JpdGUiPkZhbHNlPC9wcm9w
ZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjY2VwdHNfdGFiIj5UcnVlPC9wcm9wZXJ0
eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imp1c3RpZmljYXRpb24iPkdUS19KVVNUSUZZX0xF
RlQ8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0id3JhcF9tb2RlIj5HVEtfV1JB
UF9XT1JEPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImN1cnNvcl92aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InBpeGVsc19hYm92ZV9s
aW5lcyI+MDwvcHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwaXhlbHNfYmVsb3df
bGluZXMiPjA8L3Byb3BlcnR5PgorCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2luc2lk
ZV93cmFwIj4wPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfbWFyZ2lu
Ij4wPC9wcm9wZXJ0eT4KKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJpZ2h0X21hcmdpbiI+MDwv
cHJvcGVydHk+CisJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmRlbnQiPjA8L3Byb3BlcnR5Pgor
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNvcnJ5LCBu
byBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRpb24geWV0LjwvcHJvcGVydHk+CisJCSAgICA8
L3dpZGdldD4KKwkJICA8L2NoaWxkPgorCQk8L3dpZGdldD4KKwkJPHBhY2tpbmc+CisJCSAgPHBy
b3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+CisJCSAgPHByb3BlcnR5IG5hbWU9
InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+CisJCTwvcGFja2luZz4KKwkgICAgICA8L2NoaWxkPgor
CSAgICA8L3dpZGdldD4KKwkgICAgPHBhY2tpbmc+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InNo
cmluayI+VHJ1ZTwvcHJvcGVydHk+CisJICAgICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+VHJ1
ZTwvcHJvcGVydHk+CisJICAgIDwvcGFja2luZz4KKwkgIDwvY2hpbGQ+CisJPC93aWRnZXQ+CisJ
PHBhY2tpbmc+CisJICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+CisJICA8
cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5UcnVlPC9wcm9wZXJ0eT4KKwkgIDxwcm9wZXJ0eSBuYW1l
PSJmaWxsIj5UcnVlPC9wcm9wZXJ0eT4KKwk8L3BhY2tpbmc+CisgICAgICA8L2NoaWxkPgorICAg
IDwvd2lkZ2V0PgorICA8L2NoaWxkPgorPC93aWRnZXQ+CisKKzwvZ2xhZGUtaW50ZXJmYWNlPgpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5jIGIvc3VwcG9ydC9rY29uZmlnL2lt
YWdlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZmEwZTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvaW1hZ2VzLmMKQEAgLTAsMCArMSwzMjggQEAK
Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICovCisKKyNpbmNs
dWRlICJpbWFnZXMuaCIKKworY29uc3QgY2hhciAqeHBtX2xvYWRbXSA9IHsKKyIyMiAyMiA1IDEi
LAorIi4gYyBOb25lIiwKKyIjIGMgIzAwMDAwMCIsCisiYyBjICM4MzgxMDAiLAorImEgYyAjZmZm
ZjAwIiwKKyJiIGMgI2ZmZmZmZiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4u
Li4uIyMjIy4uLi4jLiIsCisiLi4uLi4uLi4uLi4jLi4uLiMjLiMjLiIsCisiLi4uLi4uLi4uLi4u
Li4uLi4uIyMjLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4jIyMjLiIsCisiLiMjIyMuLi4uLi4uLi4u
LiMjIyMjLiIsCisiI2FiYWIjIyMjIyMjIyMjLi4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4u
Li4uLiIsCisiI2FiYWJhYmFiYWJhYmEjLi4uLi4uLiIsCisiI2JhYmFiYWJhYmFiYWIjLi4uLi4u
LiIsCisiI2FiYWJhYiMjIyMjIyMjIyMjIyMjIyIsCisiI2JhYmFiIyNjY2NjY2NjY2NjY2MjIyIs
CisiI2FiYWIjI2NjY2NjY2NjY2NjYyMjLiIsCisiI2JhYiMjY2NjY2NjY2NjY2NjIyMuLiIsCisi
I2FiIyNjY2NjY2NjY2NjY2MjIy4uLiIsCisiI2IjI2NjY2NjY2NjY2NjYyMjLi4uLiIsCisiIyMj
Y2NjY2NjY2NjY2NjIyMuLi4uLiIsCisiIyNjY2NjY2NjY2NjY2MjIy4uLi4uLiIsCisiIyMjIyMj
IyMjIyMjIyMjLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9OworCitjb25zdCBj
aGFyICp4cG1fc2F2ZVtdID0geworIjIyIDIyIDUgMSIsCisiLiBjIE5vbmUiLAorIiMgYyAjMDAw
MDAwIiwKKyJhIGMgIzgzODEwMCIsCisiYiBjICNjNWMyYzUiLAorImMgYyAjY2RiNmQ1IiwKKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuIyMjIyMjIyMjIyMjIyMjIyMjIyMuIiwKKyIuI2Fh
I2JiYmJiYmJiYmJiYiNiYiMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNiYiMuIiwKKyIuI2FhI2Ji
YmJiYmJiYmNiYiMjIyMuIiwKKyIuI2FhI2JiYmNjYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmNj
YmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJi
YmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwKKyIuI2FhI2JiYmJiYmJiYmJi
YiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjIyMjI2FhYSMuIiwKKyIuI2FhYWFhYWFhYWFhYWFhYWFh
YSMuIiwKKyIuI2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwKKyIuI2FhYSMjIyMjIyMjIyMjIyNhYSMu
IiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwK
KyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIu
I2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwKKyIuLiMjIyMjIyMjIyMjIyMjIyMjIy4uIiwKKyIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIn07CisKK2NvbnN0IGNoYXIgKnhwbV9iYWNrW10gPSB7CisiMjIg
MjIgMyAxIiwKKyIuIGMgTm9uZSIsCisiIyBjICMwMDAwODMiLAorImEgYyAjODM4MTgzIiwKKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLiMjIyMjI2EuLi4uIiwKKyIuLiMuLi4uLi4j
IyMjIyMjIyMjLi4uIiwKKyIuLiMjLi4uIyMjIy4uLi4uLiMjYS4uIiwKKyIuLiMjIy4jIyMuLi4u
Li4uLi4jIy4uIiwKKyIuLiMjIyMjIy4uLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjLi4uLi4uLi4u
Li4jIy4uIiwKKyIuLiMjIyMjIy4uLi4uLi4uLi4jIy4uIiwKKyIuLiMjIyMjIyMuLi4uLi4uLi4j
Iy4uIiwKKyIuLiMjIyMjIyMjLi4uLi4uLiMjYS4uIiwKKyIuLi4uLi4uLi4uLi4uLi5hIyMjLi4u
IiwKKyIuLi4uLi4uLi4uLi4uLi4jIyMuLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwK
KyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIn07CisKK2NvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXSA9IHsK
KyIyMiAyMiAyIDEiLAorIi4gYyBOb25lIiwKKyIjIGMgIzAwMDAwMCIsCisiLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4u
Li4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4u
Li4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4u
LiIsCisiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIs
CisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisi
Li4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4u
Li4uIyMjIyMjIyMuLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4u
Iy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4u
Li4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uIyMjIyMj
IyMuLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiJ9OworCitjb25zdCBjaGFyICp4cG1fc2luZ2xlX3ZpZXdbXSA9IHsKKyIyMiAyMiAy
IDEiLAorIi4gYyBOb25lIiwKKyIjIGMgIzAwMDAwMCIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIs
CisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisi
Li4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4u
Li4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4u
Li4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4u
LiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMu
Li4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4u
Li4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4u
Li4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsCisiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9
OworCitjb25zdCBjaGFyICp4cG1fc3BsaXRfdmlld1tdID0geworIjIyIDIyIDIgMSIsCisiLiBj
IE5vbmUiLAorIiMgYyAjMDAwMDAwIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4u
Iy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4u
Li4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4u
Li4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4u
IiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwK
KyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIu
Li4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwKKyIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIiwKKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07CisKK2NvbnN0
IGNoYXIgKnhwbV9zeW1ib2xfbm9bXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisi
LiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAuLi4uLi4uLi4uICIsCisiIC4gICAgICAg
IC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwK
KyIgLiAgICAgICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAg
ICAgICAgLiAiLAorIiAuLi4uLi4uLi4uICIsCisiICAgICAgICAgICAgIn07CisKK2NvbnN0IGNo
YXIgKnhwbV9zeW1ib2xfbW9kW10gPSB7CisiMTIgMTIgMiAxIiwKKyIgIGMgd2hpdGUiLAorIi4g
YyBibGFjayIsCisiICAgICAgICAgICAgIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuICAgICAgICAu
ICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgIC4uICAgLiAiLAorIiAuICAuLi4uICAuICIsCisi
IC4gIC4uLi4gIC4gIiwKKyIgLiAgIC4uICAgLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gICAg
ICAgIC4gIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAgICAgICAgICAgICJ9OworCitjb25zdCBjaGFy
ICp4cG1fc3ltYm9sX3llc1tdID0geworIjEyIDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMg
YmxhY2siLAorIiAgICAgICAgICAgICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgLiAgICAgICAgLiAi
LAorIiAuICAgICAgICAuICIsCisiIC4gICAgICAuIC4gIiwKKyIgLiAgICAgLi4gLiAiLAorIiAu
IC4gIC4uICAuICIsCisiIC4gLi4uLiAgIC4gIiwKKyIgLiAgLi4gICAgLiAiLAorIiAuICAgICAg
ICAuICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAq
eHBtX2Nob2ljZV9ub1tdID0geworIjEyIDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxh
Y2siLAorIiAgICAgICAgICAgICIsCisiICAgIC4uLi4gICAgIiwKKyIgIC4uICAgIC4uICAiLAor
IiAgLiAgICAgIC4gICIsCisiIC4gICAgICAgIC4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAg
ICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgIC4gICAgICAuICAiLAorIiAgLi4gICAgLi4g
ICIsCisiICAgIC4uLi4gICAgIiwKKyIgICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBt
X2Nob2ljZV95ZXNbXSA9IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNr
IiwKKyIgICAgICAgICAgICAiLAorIiAgICAuLi4uICAgICIsCisiICAuLiAgICAuLiAgIiwKKyIg
IC4gICAgICAuICAiLAorIiAuICAgLi4gICAuICIsCisiIC4gIC4uLi4gIC4gIiwKKyIgLiAgLi4u
LiAgLiAiLAorIiAuICAgLi4gICAuICIsCisiICAuICAgICAgLiAgIiwKKyIgIC4uICAgIC4uICAi
LAorIiAgICAuLi4uICAgICIsCisiICAgICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9t
ZW51W10gPSB7CisiMTIgMTIgMiAxIiwKKyIgIGMgd2hpdGUiLAorIi4gYyBibGFjayIsCisiICAg
ICAgICAgICAgIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuICAgICAgICAuICIsCisiIC4gLi4gICAg
IC4gIiwKKyIgLiAuLi4uICAgLiAiLAorIiAuIC4uLi4uLiAuICIsCisiIC4gLi4uLi4uIC4gIiwK
KyIgLiAuLi4uICAgLiAiLAorIiAuIC4uICAgICAuICIsCisiIC4gICAgICAgIC4gIiwKKyIgLi4u
Li4uLi4uLiAiLAorIiAgICAgICAgICAgICJ9OworCitjb25zdCBjaGFyICp4cG1fbWVudV9pbnZb
XSA9IHsKKyIxMiAxMiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAg
ICAgICAiLAorIiAuLi4uLi4uLi4uICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgLi4gIC4uLi4uLiAi
LAorIiAuLiAgICAuLi4uICIsCisiIC4uICAgICAgLi4gIiwKKyIgLi4gICAgICAuLiAiLAorIiAu
LiAgICAuLi4uICIsCisiIC4uICAuLi4uLi4gIiwKKyIgLi4uLi4uLi4uLiAiLAorIiAuLi4uLi4u
Li4uICIsCisiICAgICAgICAgICAgIn07CisKK2NvbnN0IGNoYXIgKnhwbV9tZW51YmFja1tdID0g
eworIjEyIDEyIDIgMSIsCisiICBjIHdoaXRlIiwKKyIuIGMgYmxhY2siLAorIiAgICAgICAgICAg
ICIsCisiIC4uLi4uLi4uLi4gIiwKKyIgLiAgICAgICAgLiAiLAorIiAuICAgICAuLiAuICIsCisi
IC4gICAuLi4uIC4gIiwKKyIgLiAuLi4uLi4gLiAiLAorIiAuIC4uLi4uLiAuICIsCisiIC4gICAu
Li4uIC4gIiwKKyIgLiAgICAgLi4gLiAiLAorIiAuICAgICAgICAuICIsCisiIC4uLi4uLi4uLi4g
IiwKKyIgICAgICAgICAgICAifTsKKworY29uc3QgY2hhciAqeHBtX3ZvaWRbXSA9IHsKKyIxMiAx
MiAyIDEiLAorIiAgYyB3aGl0ZSIsCisiLiBjIGJsYWNrIiwKKyIgICAgICAgICAgICAiLAorIiAg
ICAgICAgICAgICIsCisiICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAg
ICAgICIsCisiICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIs
CisiICAgICAgICAgICAgIiwKKyIgICAgICAgICAgICAiLAorIiAgICAgICAgICAgICIsCisiICAg
ICAgICAgICAgIn07CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvaW1hZ2VzLmggYi9zdXBw
b3J0L2tjb25maWcvaW1hZ2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZDhmZjYxNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy9pbWFnZXMuaApAQCAt
MCwwICsxLDMzIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9y
Zz4KKyAqLworCisjaWZuZGVmIElNQUdFU19ICisjZGVmaW5lIElNQUdFU19ICisKKyNpZmRlZiBf
X2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IGNoYXIgKnhw
bV9sb2FkW107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX3NhdmVbXTsKK2V4dGVybiBjb25zdCBj
aGFyICp4cG1fYmFja1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXTsKK2V4
dGVybiBjb25zdCBjaGFyICp4cG1fc2luZ2xlX3ZpZXdbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4
cG1fc3BsaXRfdmlld1tdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXTsKK2V4
dGVybiBjb25zdCBjaGFyICp4cG1fc3ltYm9sX21vZFtdOworZXh0ZXJuIGNvbnN0IGNoYXIgKnhw
bV9zeW1ib2xfeWVzW107CitleHRlcm4gY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdOworZXh0
ZXJuIGNvbnN0IGNoYXIgKnhwbV9jaG9pY2VfeWVzW107CitleHRlcm4gY29uc3QgY2hhciAqeHBt
X21lbnVbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXTsKK2V4dGVybiBjb25z
dCBjaGFyICp4cG1fbWVudWJhY2tbXTsKK2V4dGVybiBjb25zdCBjaGFyICp4cG1fdm9pZFtdOwor
CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogSU1BR0VTX0ggKi8K
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9sZXhlci5sIGIvc3VwcG9ydC9rY29uZmlnL2xl
eGVyLmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVhY2IzMgotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy9sZXhlci5sCkBAIC0wLDAgKzEsNDk4IEBACisv
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworJW9wdGlv
biBub3N0ZGluaXQgbm95eXdyYXAgbmV2ZXItaW50ZXJhY3RpdmUgZnVsbCBlY3MKKyVvcHRpb24g
OGJpdCBub2RlZmF1bHQgeXlsaW5lbm8KKyV4IEFTU0lHTl9WQUwgSEVMUCBTVFJJTkcKKyV7CisK
KyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxnbG9iLmg+CisjaW5jbHVkZSA8bGltaXRz
Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxz
dHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImxrYy5oIgorI2luY2x1
ZGUgInBhcnNlci50YWIuaCIKKworI2RlZmluZSBZWV9ERUNMCQlzdGF0aWMgaW50IHl5bGV4MSh2
b2lkKQorCisjZGVmaW5lIFNUQVJUX1NUUlNJWkUJMTYKKworc3RhdGljIHN0cnVjdCB7CisJc3Ry
dWN0IGZpbGUgKmZpbGU7CisJaW50IGxpbmVubzsKK30gY3VycmVudF9wb3M7CisKK3N0YXRpYyBp
bnQgcHJldl9wcmV2X3Rva2VuID0gVF9FT0w7CitzdGF0aWMgaW50IHByZXZfdG9rZW4gPSBUX0VP
TDsKK3N0YXRpYyBjaGFyICp0ZXh0Oworc3RhdGljIGludCB0ZXh0X3NpemUsIHRleHRfYXNpemU7
CisKK3N0cnVjdCBidWZmZXIgeworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKwlZWV9CVUZGRVJf
U1RBVEUgc3RhdGU7Cit9OworCitzdHJ1Y3QgYnVmZmVyICpjdXJyZW50X2J1ZjsKKworc3RhdGlj
IGludCBsYXN0X3RzLCBmaXJzdF90czsKKworc3RhdGljIGNoYXIgKmV4cGFuZF90b2tlbihjb25z
dCBjaGFyICppbiwgc2l6ZV90IG4pOworc3RhdGljIHZvaWQgYXBwZW5kX2V4cGFuZGVkX3N0cmlu
Zyhjb25zdCBjaGFyICppbik7CitzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOworc3Rh
dGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKKworc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2
b2lkKQoreworCXRleHQgPSB4bWFsbG9jKFNUQVJUX1NUUlNJWkUpOworCXRleHRfYXNpemUgPSBT
VEFSVF9TVFJTSVpFOworCXRleHRfc2l6ZSA9IDA7CisJKnRleHQgPSAwOworfQorCitzdGF0aWMg
dm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJaW50IG5l
d19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CisJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6
ZSkgeworCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKKwkJbmV3X3NpemUgJj0gLVNU
QVJUX1NUUlNJWkU7CisJCXRleHQgPSB4cmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7CisJCXRleHRf
YXNpemUgPSBuZXdfc2l6ZTsKKwl9CisJbWVtY3B5KHRleHQgKyB0ZXh0X3NpemUsIHN0ciwgc2l6
ZSk7CisJdGV4dF9zaXplICs9IHNpemU7CisJdGV4dFt0ZXh0X3NpemVdID0gMDsKK30KKworc3Rh
dGljIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJdGV4
dCA9IHhtYWxsb2Moc2l6ZSArIDEpOworCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOworCXRleHRb
c2l6ZV0gPSAwOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKGNoYXIg
Y2hyKQoreworCWZwcmludGYoc3RkZXJyLAorCSAgICAgICAgIiVzOiVkOndhcm5pbmc6IGlnbm9y
aW5nIHVuc3VwcG9ydGVkIGNoYXJhY3RlciAnJWMnXG4iLAorCSAgICAgICAgY3VycmVudF9maWxl
LT5uYW1lLCB5eWxpbmVubywgY2hyKTsKK30KKyV9CisKK24JW0EtWmEtejAtOV8tXQorCislJQor
CWludCBzdHIgPSAwOworCWludCB0cywgaTsKKworIy4qCQkJLyogaWdub3JlIGNvbW1lbnQgKi8K
K1sgXHRdKgkJCS8qIHdoaXRlc3BhY2VzICovCitcXFxuCQkJLyogZXNjYXBlZCBuZXcgbGluZSAq
LworXG4JCQlyZXR1cm4gVF9FT0w7CisiYWxsbm9jb25maWdfeSIJCXJldHVybiBUX0FMTE5PQ09O
RklHX1k7CisiYm9vbCIJCQlyZXR1cm4gVF9CT09MOworImNob2ljZSIJCXJldHVybiBUX0NIT0lD
RTsKKyJjb21tZW50IgkJcmV0dXJuIFRfQ09NTUVOVDsKKyJjb25maWciCQlyZXR1cm4gVF9DT05G
SUc7CisiZGVmX2Jvb2wiCQlyZXR1cm4gVF9ERUZfQk9PTDsKKyJkZWZfdHJpc3RhdGUiCQlyZXR1
cm4gVF9ERUZfVFJJU1RBVEU7CisiZGVmYXVsdCIJCXJldHVybiBUX0RFRkFVTFQ7CisiZGVmY29u
ZmlnX2xpc3QiCXJldHVybiBUX0RFRkNPTkZJR19MSVNUOworImRlcGVuZHMiCQlyZXR1cm4gVF9E
RVBFTkRTOworImVuZGNob2ljZSIJCXJldHVybiBUX0VORENIT0lDRTsKKyJlbmRpZiIJCQlyZXR1
cm4gVF9FTkRJRjsKKyJlbmRtZW51IgkJcmV0dXJuIFRfRU5ETUVOVTsKKyJoZWxwInwiLS0taGVs
cC0tLSIJcmV0dXJuIFRfSEVMUDsKKyJoZXgiCQkJcmV0dXJuIFRfSEVYOworImlmIgkJCXJldHVy
biBUX0lGOworImltcGx5IgkJCXJldHVybiBUX0lNUExZOworImludCIJCQlyZXR1cm4gVF9JTlQ7
CisibWFpbm1lbnUiCQlyZXR1cm4gVF9NQUlOTUVOVTsKKyJtZW51IgkJCXJldHVybiBUX01FTlU7
CisibWVudWNvbmZpZyIJCXJldHVybiBUX01FTlVDT05GSUc7CisibW9kdWxlcyIJCXJldHVybiBU
X01PRFVMRVM7Cisib24iCQkJcmV0dXJuIFRfT047Cisib3B0aW9uIgkJcmV0dXJuIFRfT1BUSU9O
OworIm9wdGlvbmFsIgkJcmV0dXJuIFRfT1BUSU9OQUw7CisicHJvbXB0IgkJcmV0dXJuIFRfUFJP
TVBUOworInJhbmdlIgkJCXJldHVybiBUX1JBTkdFOworInNlbGVjdCIJCXJldHVybiBUX1NFTEVD
VDsKKyJzb3VyY2UiCQlyZXR1cm4gVF9TT1VSQ0U7Cisic3RyaW5nIgkJcmV0dXJuIFRfU1RSSU5H
OworInRyaXN0YXRlIgkJcmV0dXJuIFRfVFJJU1RBVEU7CisidmlzaWJsZSIJCXJldHVybiBUX1ZJ
U0lCTEU7CisifHwiCQkJcmV0dXJuIFRfT1I7CisiJiYiCQkJcmV0dXJuIFRfQU5EOworIj0iCQkJ
cmV0dXJuIFRfRVFVQUw7CisiIT0iCQkJcmV0dXJuIFRfVU5FUVVBTDsKKyI8IgkJCXJldHVybiBU
X0xFU1M7CisiPD0iCQkJcmV0dXJuIFRfTEVTU19FUVVBTDsKKyI+IgkJCXJldHVybiBUX0dSRUFU
RVI7CisiPj0iCQkJcmV0dXJuIFRfR1JFQVRFUl9FUVVBTDsKKyIhIgkJCXJldHVybiBUX05PVDsK
KyIoIgkJCXJldHVybiBUX09QRU5fUEFSRU47CisiKSIJCQlyZXR1cm4gVF9DTE9TRV9QQVJFTjsK
KyI6PSIJCQlyZXR1cm4gVF9DT0xPTl9FUVVBTDsKKyIrPSIJCQlyZXR1cm4gVF9QTFVTX0VRVUFM
OworXCJ8XCcJCQl7CisJCQkJc3RyID0geXl0ZXh0WzBdOworCQkJCW5ld19zdHJpbmcoKTsKKwkJ
CQlCRUdJTihTVFJJTkcpOworCQkJfQore259KwkJCXsKKwkJCQlhbGxvY19zdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOworCQkJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQkJCXJldHVybiBUX1dPUkQ7
CisJCQl9Cisoe259fCQpKwkJeworCQkJCS8qIHRoaXMgdG9rZW4gaW5jbHVkZXMgYXQgbGVhc3Qg
b25lICckJyAqLworCQkJCXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxl
bmcpOworCQkJCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpCisJCQkJCXJldHVybiBUX1dPUkQ7
CisJCQkJZnJlZSh5eWx2YWwuc3RyaW5nKTsKKwkJCX0KKy4JCQl3YXJuX2lnbm9yZWRfY2hhcmFj
dGVyKCp5eXRleHQpOworCis8QVNTSUdOX1ZBTD57CisJW15bOmJsYW5rOl1cbl0rLioJeworCQlh
bGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJ
cmV0dXJuIFRfQVNTSUdOX1ZBTDsKKwl9CisJXG4JeyBCRUdJTihJTklUSUFMKTsgcmV0dXJuIFRf
RU9MOyB9CisJLgorfQorCis8U1RSSU5HPnsKKwkiJCIuKglhcHBlbmRfZXhwYW5kZWRfc3RyaW5n
KHl5dGV4dCk7CisJW14kJyJcXFxuXSsJeworCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5n
KTsKKwl9CisJXFwuPwl7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0ICsgMSwgeXlsZW5nIC0gMSk7
CisJfQorCVwnfFwiCXsKKwkJaWYgKHN0ciA9PSB5eXRleHRbMF0pIHsKKwkJCUJFR0lOKElOSVRJ
QUwpOworCQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCQlyZXR1cm4gVF9XT1JEX1FVT1RFOwor
CQl9IGVsc2UKKwkJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCAxKTsKKwl9CisJXG4JeworCQlmcHJp
bnRmKHN0ZGVyciwKKwkJCSIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1
cHBvcnRlZFxuIiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCQl1bnB1
dCgnXG4nKTsKKwkJQkVHSU4oSU5JVElBTCk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQly
ZXR1cm4gVF9XT1JEX1FVT1RFOworCX0KKwk8PEVPRj4+CXsKKwkJQkVHSU4oSU5JVElBTCk7CisJ
CXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9XT1JEX1FVT1RFOworCX0KK30KKwor
PEhFTFA+eworCVsgXHRdKwl7CisJCXRzID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHl5bGVuZzsg
aSsrKSB7CisJCQlpZiAoeXl0ZXh0W2ldID09ICdcdCcpCisJCQkJdHMgPSAodHMgJiB+NykgKyA4
OworCQkJZWxzZQorCQkJCXRzKys7CisJCX0KKwkJbGFzdF90cyA9IHRzOworCQlpZiAoZmlyc3Rf
dHMpIHsKKwkJCWlmICh0cyA8IGZpcnN0X3RzKSB7CisJCQkJemNvbmZfZW5kaGVscCgpOworCQkJ
CXJldHVybiBUX0hFTFBURVhUOworCQkJfQorCQkJdHMgLT0gZmlyc3RfdHM7CisJCQl3aGlsZSAo
dHMgPiA4KSB7CisJCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCA4KTsKKwkJCQl0cyAtPSA4
OworCQkJfQorCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCB0cyk7CisJCX0KKwl9CisJWyBc
dF0qXG4vW14gXHRcbl0geworCQl6Y29uZl9lbmRoZWxwKCk7CisJCXJldHVybiBUX0hFTFBURVhU
OworCX0KKwlbIFx0XSpcbgl7CisJCWFwcGVuZF9zdHJpbmcoIlxuIiwgMSk7CisJfQorCVteIFx0
XG5dLiogeworCQl3aGlsZSAoeXlsZW5nKSB7CisJCQlpZiAoKHl5dGV4dFt5eWxlbmctMV0gIT0g
JyAnKSAmJiAoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnXHQnKSkKKwkJCQlicmVhazsKKwkJCXl5bGVu
Zy0tOworCQl9CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOworCQlpZiAoIWZpcnN0
X3RzKQorCQkJZmlyc3RfdHMgPSBsYXN0X3RzOworCX0KKwk8PEVPRj4+CXsKKwkJemNvbmZfZW5k
aGVscCgpOworCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwl9Cit9CisKKzw8RU9GPj4JeworCUJFR0lO
KElOSVRJQUwpOworCisJaWYgKHByZXZfdG9rZW4gIT0gVF9FT0wgJiYgcHJldl90b2tlbiAhPSBU
X0hFTFBURVhUKQorCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6IG5vIG5ldyBsaW5l
IGF0IGVuZCBvZiBmaWxlXG4iLAorCQkJY3VycmVudF9maWxlLT5uYW1lLCB5eWxpbmVubyk7CisK
KwlpZiAoY3VycmVudF9maWxlKSB7CisJCXpjb25mX2VuZGZpbGUoKTsKKwkJcmV0dXJuIFRfRU9M
OworCX0KKwlmY2xvc2UoeXlpbik7CisJeXl0ZXJtaW5hdGUoKTsKK30KKworJSUKKworLyogc2Vj
b25kIHN0YWdlIGxleGVyICovCitpbnQgeXlsZXgodm9pZCkKK3sKKwlpbnQgdG9rZW47CisKK3Jl
cGVhdDoKKwl0b2tlbiA9IHl5bGV4MSgpOworCisJaWYgKHByZXZfdG9rZW4gPT0gVF9FT0wgfHwg
cHJldl90b2tlbiA9PSBUX0hFTFBURVhUKSB7CisJCWlmICh0b2tlbiA9PSBUX0VPTCkgeworCQkJ
LyogRG8gbm90IHBhc3MgdW5uZWVkZWQgVF9FT0wgdG8gdGhlIHBhcnNlci4gKi8KKwkJCWdvdG8g
cmVwZWF0OworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIEZvciB0aGUgcGFyc2VyLCB1cGRhdGUg
ZmlsZS9saW5lbm8gYXQgdGhlIGZpcnN0IHRva2VuCisJCQkgKiBvZiBlYWNoIHN0YXRlbWVudC4g
R2VuZXJhbGx5LCBcbiBpcyBhIHN0YXRlbWVudAorCQkJICogdGVybWluYXRvciBpbiBLY29uZmln
LCBidXQgaXQgaXMgbm90IGFsd2F5cyB0cnVlCisJCQkgKiBiZWNhdXNlIFxuIGNvdWxkIGJlIGVz
Y2FwZWQgYnkgYSBiYWNrc2xhc2guCisJCQkgKi8KKwkJCWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJy
ZW50X2ZpbGU7CisJCQljdXJyZW50X3Bvcy5saW5lbm8gPSB5eWxpbmVubzsKKwkJfQorCX0KKwor
CWlmIChwcmV2X3ByZXZfdG9rZW4gPT0gVF9FT0wgJiYgcHJldl90b2tlbiA9PSBUX1dPUkQgJiYK
KwkgICAgKHRva2VuID09IFRfRVFVQUwgfHwgdG9rZW4gPT0gVF9DT0xPTl9FUVVBTCB8fCB0b2tl
biA9PSBUX1BMVVNfRVFVQUwpKQorCQlCRUdJTihBU1NJR05fVkFMKTsKKworCXByZXZfcHJldl90
b2tlbiA9IHByZXZfdG9rZW47CisJcHJldl90b2tlbiA9IHRva2VuOworCisJcmV0dXJuIHRva2Vu
OworfQorCitzdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIgKmluLCBzaXplX3Qg
bikKK3sKKwljaGFyICpvdXQ7CisJaW50IGM7CisJY2hhciBjMjsKKwljb25zdCBjaGFyICpyZXN0
LCAqZW5kOworCisJbmV3X3N0cmluZygpOworCWFwcGVuZF9zdHJpbmcoaW4sIG4pOworCisJLyog
Z2V0IHRoZSB3aG9sZSBsaW5lIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgdGhlIGVuZCBvZiB0b2tl
bi4gKi8KKwl3aGlsZSAoKGMgPSBpbnB1dCgpKSAhPSBFT0YpIHsKKwkJaWYgKGMgPT0gJ1xuJykg
eworCQkJdW5wdXQoYyk7CisJCQlicmVhazsKKwkJfQorCQljMiA9IGM7CisJCWFwcGVuZF9zdHJp
bmcoJmMyLCAxKTsKKwl9CisKKwlyZXN0ID0gdGV4dDsKKwlvdXQgPSBleHBhbmRfb25lX3Rva2Vu
KCZyZXN0KTsKKworCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5wdXQg
c3RyZWFtICovCisJZW5kID0gcmVzdCArIHN0cmxlbihyZXN0KTsKKwl3aGlsZSAoZW5kID4gcmVz
dCkKKwkJdW5wdXQoKi0tZW5kKTsKKworCWZyZWUodGV4dCk7CisKKwlyZXR1cm4gb3V0OworfQor
CitzdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKK3sK
Kwljb25zdCBjaGFyICplbmQ7CisJY2hhciAqcmVzOworCisJc3RyKys7CisKKwlyZXMgPSBleHBh
bmRfZG9sbGFyKCZzdHIpOworCisJLyogcHVzaCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRo
ZSBpbnB1dCBzdHJlYW0gKi8KKwllbmQgPSBzdHIgKyBzdHJsZW4oc3RyKTsKKwl3aGlsZSAoZW5k
ID4gc3RyKQorCQl1bnB1dCgqLS1lbmQpOworCisJYXBwZW5kX3N0cmluZyhyZXMsIHN0cmxlbihy
ZXMpKTsKKworCWZyZWUocmVzKTsKK30KKwordm9pZCB6Y29uZl9zdGFydGhlbHAodm9pZCkKK3sK
KwluZXdfc3RyaW5nKCk7CisJbGFzdF90cyA9IGZpcnN0X3RzID0gMDsKKwlCRUdJTihIRUxQKTsK
K30KKworc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKQoreworCXl5bHZhbC5zdHJpbmcg
PSB0ZXh0OworCUJFR0lOKElOSVRJQUwpOworfQorCisKKy8qCisgKiBUcnkgdG8gb3BlbiBzcGVj
aWZpZWQgZmlsZSB3aXRoIGZvbGxvd2luZyBuYW1lczoKKyAqIC4vbmFtZQorICogJChzcmN0cmVl
KS9uYW1lCisgKiBUaGUgbGF0dGVyIGlzIHVzZWQgd2hlbiBzcmN0cmVlIGlzIHNlcGFyYXRlIGZy
b20gb2JqdHJlZQorICogd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbC4KKyAqIFJldHVybiBOVUxM
IGlmIGZpbGUgaXMgbm90IGZvdW5kLgorICovCitGSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFy
ICpuYW1lKQoreworCWNoYXIgKmVudiwgZnVsbG5hbWVbUEFUSF9NQVgrMV07CisJRklMRSAqZjsK
KworCWYgPSBmb3BlbihuYW1lLCAiciIpOworCWlmICghZiAmJiBuYW1lICE9IE5VTEwgJiYgbmFt
ZVswXSAhPSAnLycpIHsKKwkJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOworCQlpZiAoZW52KSB7CisJ
CQlzbnByaW50ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwKKwkJCQkgIiVzLyVzIiwgZW52
LCBuYW1lKTsKKwkJCWYgPSBmb3BlbihmdWxsbmFtZSwgInIiKTsKKwkJfQorCX0KKwlyZXR1cm4g
ZjsKK30KKwordm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKQoreworCXl5aW4g
PSB6Y29uZl9mb3BlbihuYW1lKTsKKwlpZiAoIXl5aW4pIHsKKwkJZnByaW50ZihzdGRlcnIsICJj
YW4ndCBmaW5kIGZpbGUgJXNcbiIsIG5hbWUpOworCQlleGl0KDEpOworCX0KKworCWN1cnJlbnRf
YnVmID0geG1hbGxvYyhzaXplb2YoKmN1cnJlbnRfYnVmKSk7CisJbWVtc2V0KGN1cnJlbnRfYnVm
LCAwLCBzaXplb2YoKmN1cnJlbnRfYnVmKSk7CisKKwljdXJyZW50X2ZpbGUgPSBmaWxlX2xvb2t1
cChuYW1lKTsKKwl5eWxpbmVubyA9IDE7Cit9CisKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3Qg
Y2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZSAqaXRlcjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9
IGZpbGVfbG9va3VwKG5hbWUpOworCXN0cnVjdCBidWZmZXIgKmJ1ZiA9IHhtYWxsb2Moc2l6ZW9m
KCpidWYpKTsKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCisJY3VycmVudF9idWYt
PnN0YXRlID0gWVlfQ1VSUkVOVF9CVUZGRVI7CisJeXlpbiA9IHpjb25mX2ZvcGVuKGZpbGUtPm5h
bWUpOworCWlmICgheXlpbikgeworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjYW4ndCBvcGVu
IGZpbGUgXCIlc1wiXG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgZmls
ZS0+bmFtZSk7CisJCWV4aXQoMSk7CisJfQorCXl5X3N3aXRjaF90b19idWZmZXIoeXlfY3JlYXRl
X2J1ZmZlcih5eWluLCBZWV9CVUZfU0laRSkpOworCWJ1Zi0+cGFyZW50ID0gY3VycmVudF9idWY7
CisJY3VycmVudF9idWYgPSBidWY7CisKKwljdXJyZW50X2ZpbGUtPmxpbmVubyA9IHl5bGluZW5v
OworCWZpbGUtPnBhcmVudCA9IGN1cnJlbnRfZmlsZTsKKworCWZvciAoaXRlciA9IGN1cnJlbnRf
ZmlsZTsgaXRlcjsgaXRlciA9IGl0ZXItPnBhcmVudCkgeworCQlpZiAoIXN0cmNtcChpdGVyLT5u
YW1lLCBmaWxlLT5uYW1lKSkgeworCQkJZnByaW50ZihzdGRlcnIsCisJCQkJIlJlY3Vyc2l2ZSBp
bmNsdXNpb24gZGV0ZWN0ZWQuXG4iCisJCQkJIkluY2x1c2lvbiBwYXRoOlxuIgorCQkJCSIgIGN1
cnJlbnQgZmlsZSA6ICVzXG4iLCBmaWxlLT5uYW1lKTsKKwkJCWl0ZXIgPSBmaWxlOworCQkJZG8g
eworCQkJCWl0ZXIgPSBpdGVyLT5wYXJlbnQ7CisJCQkJZnByaW50ZihzdGRlcnIsICIgIGluY2x1
ZGVkIGZyb206ICVzOiVkXG4iLAorCQkJCQlpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8gLSAxKTsK
KwkJCX0gd2hpbGUgKHN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5uYW1lKSk7CisJCQlleGl0KDEp
OworCQl9CisJfQorCisJeXlsaW5lbm8gPSAxOworCWN1cnJlbnRfZmlsZSA9IGZpbGU7Cit9CisK
K3ZvaWQgemNvbmZfbmV4dGZpbGVzKGNvbnN0IGNoYXIgKndpbGRjYXJkKQoreworCWdsb2JfdCBn
ID0gezB9OworCWNoYXIgKip3OworCWludCBpOworCisJaWYgKGdsb2Iod2lsZGNhcmQsIDAsIE5V
TEwsICZnKSAhPSAwKSB7CisJCXJldHVybjsKKwl9CisJaWYgKGcuZ2xfcGF0aHYgPT0gTlVMTCkg
eworCQlnbG9iZnJlZSgmZyk7CisJCXJldHVybjsKKwl9CisKKwkvKiB3b3JraW5nIHRocm91Z2gg
ZmlsZXMgYmFja3dhcmRzLCBzaW5jZQorCSAqIHdlJ3JlIGZpcnN0IHB1c2hpbmcgdGhlbSBvbiBh
IHN0YWNrCisJICogYmVmb3JlIGFjdHVhbGx5IGhhbmRsaW5nIHRoZW0uCisJICovCisJZm9yIChp
ID0gZy5nbF9wYXRoYzsgaSA+IDA7IGktLSkgeworCQl3ID0gJmcuZ2xfcGF0aHZbaSAtIDFdOwor
CQl6Y29uZl9uZXh0ZmlsZSgqdyk7CisJfQorCisJZ2xvYmZyZWUoJmcpOworfQorCitzdGF0aWMg
dm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpCit7CisJc3RydWN0IGJ1ZmZlciAqcGFyZW50OworCisJ
Y3VycmVudF9maWxlID0gY3VycmVudF9maWxlLT5wYXJlbnQ7CisJaWYgKGN1cnJlbnRfZmlsZSkK
KwkJeXlsaW5lbm8gPSBjdXJyZW50X2ZpbGUtPmxpbmVubzsKKworCXBhcmVudCA9IGN1cnJlbnRf
YnVmLT5wYXJlbnQ7CisJaWYgKHBhcmVudCkgeworCQlmY2xvc2UoeXlpbik7CisJCXl5X2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOworCQl5eV9zd2l0Y2hfdG9fYnVmZmVyKHBhcmVu
dC0+c3RhdGUpOworCX0KKwlmcmVlKGN1cnJlbnRfYnVmKTsKKwljdXJyZW50X2J1ZiA9IHBhcmVu
dDsKK30KKworaW50IHpjb25mX2xpbmVubyh2b2lkKQoreworCXJldHVybiBjdXJyZW50X3Bvcy5s
aW5lbm87Cit9CisKK2NvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCkKK3sKKwlyZXR1cm4g
Y3VycmVudF9wb3MuZmlsZSA/IGN1cnJlbnRfcG9zLmZpbGUtPm5hbWUgOiAiPG5vbmU+IjsKK30K
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9saXN0LmggYi9zdXBwb3J0L2tjb25maWcvbGlz
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1Y2IyMzcKLS0tIC9kZXYv
bnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvbGlzdC5oCkBAIC0wLDAgKzEsMTMyIEBACisvKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworI2lmbmRlZiBMSVNUX0gKKyNkZWZp
bmUgTElTVF9ICisKKy8qCisgKiBDb3BpZWQgZnJvbSBpbmNsdWRlL2xpbnV4Ly4uLgorICovCisK
KyN1bmRlZiBvZmZzZXRvZgorI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90
KSAmKChUWVBFICopMCktPk1FTUJFUikKKworLyoqCisgKiBjb250YWluZXJfb2YgLSBjYXN0IGEg
bWVtYmVyIG9mIGEgc3RydWN0dXJlIG91dCB0byB0aGUgY29udGFpbmluZyBzdHJ1Y3R1cmUKKyAq
IEBwdHI6ICAgICAgICB0aGUgcG9pbnRlciB0byB0aGUgbWVtYmVyLgorICogQHR5cGU6ICAgICAg
IHRoZSB0eXBlIG9mIHRoZSBjb250YWluZXIgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uCisg
KiBAbWVtYmVyOiAgICAgdGhlIG5hbWUgb2YgdGhlIG1lbWJlciB3aXRoaW4gdGhlIHN0cnVjdC4K
KyAqCisgKi8KKyNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlwZSwgbWVtYmVyKSAoeyAgICAg
ICAgICAgICAgICAgICAgICBcCisJY29uc3QgdHlwZW9mKCAoKHR5cGUgKikwKS0+bWVtYmVyICkg
Kl9fbXB0ciA9IChwdHIpOyAgICBcCisJKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0
b2YodHlwZSxtZW1iZXIpICk7fSkKKworCitzdHJ1Y3QgbGlzdF9oZWFkIHsKKwlzdHJ1Y3QgbGlz
dF9oZWFkICpuZXh0LCAqcHJldjsKK307CisKKworI2RlZmluZSBMSVNUX0hFQURfSU5JVChuYW1l
KSB7ICYobmFtZSksICYobmFtZSkgfQorCisjZGVmaW5lIExJU1RfSEVBRChuYW1lKSBcCisJc3Ry
dWN0IGxpc3RfaGVhZCBuYW1lID0gTElTVF9IRUFEX0lOSVQobmFtZSkKKworLyoqCisgKiBsaXN0
X2VudHJ5IC0gZ2V0IHRoZSBzdHJ1Y3QgZm9yIHRoaXMgZW50cnkKKyAqIEBwdHI6CXRoZSAmc3Ry
dWN0IGxpc3RfaGVhZCBwb2ludGVyLgorICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBzdHJ1Y3Qg
dGhpcyBpcyBlbWJlZGRlZCBpbi4KKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X2hl
YWQgd2l0aGluIHRoZSBzdHJ1Y3QuCisgKi8KKyNkZWZpbmUgbGlzdF9lbnRyeShwdHIsIHR5cGUs
IG1lbWJlcikgXAorCWNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikKKworLyoqCisgKiBs
aXN0X2Zvcl9lYWNoX2VudHJ5CS0JaXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQorICog
QHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KKyAqIEBoZWFkOgl0aGUg
aGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3RfaGVh
ZCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBv
cywgaGVhZCwgbWVtYmVyKQkJCQlcCisJZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+bmV4
dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQp
OyAJXAorCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBv
cyksIG1lbWJlcikpCisKKy8qKgorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlIC0gaXRlcmF0
ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSBzYWZlIGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVu
dHJ5CisgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgorICogQG46
CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKKyAqIEBoZWFkOgl0
aGUgaGVhZCBmb3IgeW91ciBsaXN0LgorICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rf
aGVhZCB3aXRoaW4gdGhlIHN0cnVjdC4KKyAqLworI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5
X3NhZmUocG9zLCBuLCBoZWFkLCBtZW1iZXIpCQkJXAorCWZvciAocG9zID0gbGlzdF9lbnRyeSgo
aGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSwJXAorCQluID0gbGlzdF9lbnRyeShw
b3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKKwkgICAgICZwb3MtPm1l
bWJlciAhPSAoaGVhZCk7CQkJCQlcCisJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5t
ZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKKworLyoqCisgKiBsaXN0X2VtcHR5IC0g
dGVzdHMgd2hldGhlciBhIGxpc3QgaXMgZW1wdHkKKyAqIEBoZWFkOiB0aGUgbGlzdCB0byB0ZXN0
LgorICovCitzdGF0aWMgaW5saW5lIGludCBsaXN0X2VtcHR5KGNvbnN0IHN0cnVjdCBsaXN0X2hl
YWQgKmhlYWQpCit7CisJcmV0dXJuIGhlYWQtPm5leHQgPT0gaGVhZDsKK30KKworLyoKKyAqIElu
c2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBjb25zZWN1dGl2ZSBlbnRyaWVzLgor
ICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUg
d2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KK3N0YXRpYyBp
bmxpbmUgdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKl9uZXcsCisJCQkgICAgICBz
dHJ1Y3QgbGlzdF9oZWFkICpwcmV2LAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkK
K3sKKwluZXh0LT5wcmV2ID0gX25ldzsKKwlfbmV3LT5uZXh0ID0gbmV4dDsKKwlfbmV3LT5wcmV2
ID0gcHJldjsKKwlwcmV2LT5uZXh0ID0gX25ldzsKK30KKworLyoqCisgKiBsaXN0X2FkZF90YWls
IC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAbmV3OiBuZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBo
ZWFkOiBsaXN0IGhlYWQgdG8gYWRkIGl0IGJlZm9yZQorICoKKyAqIEluc2VydCBhIG5ldyBlbnRy
eSBiZWZvcmUgdGhlIHNwZWNpZmllZCBoZWFkLgorICogVGhpcyBpcyB1c2VmdWwgZm9yIGltcGxl
bWVudGluZyBxdWV1ZXMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2FkZF90YWlsKHN0
cnVjdCBsaXN0X2hlYWQgKl9uZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0
X2FkZChfbmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKK30KKworLyoKKyAqIERlbGV0ZSBhIGxpc3Qg
ZW50cnkgYnkgbWFraW5nIHRoZSBwcmV2L25leHQgZW50cmllcworICogcG9pbnQgdG8gZWFjaCBv
dGhlci4KKyAqCisgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9u
IHdoZXJlIHdlIGtub3cKKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQorICovCitz
dGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1
Y3QgbGlzdF9oZWFkICpuZXh0KQoreworCW5leHQtPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQg
PSBuZXh0OworfQorCisjZGVmaW5lIExJU1RfUE9JU09OMSAgKCh2b2lkICopIDB4MDAxMDAxMDAp
CisjZGVmaW5lIExJU1RfUE9JU09OMiAgKCh2b2lkICopIDB4MDAyMDAyMDApCisvKioKKyAqIGxp
c3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuCisgKiBAZW50cnk6IHRoZSBlbGVtZW50
IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0LgorICogTm90ZTogbGlzdF9lbXB0eSgpIG9uIGVudHJ5
IGRvZXMgbm90IHJldHVybiB0cnVlIGFmdGVyIHRoaXMsIHRoZSBlbnRyeSBpcworICogaW4gYW4g
dW5kZWZpbmVkIHN0YXRlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0
IGxpc3RfaGVhZCAqZW50cnkpCit7CisJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5l
eHQpOworCWVudHJ5LT5uZXh0ID0gKHN0cnVjdCBsaXN0X2hlYWQqKUxJU1RfUE9JU09OMTsKKwll
bnRyeS0+cHJldiA9IChzdHJ1Y3QgbGlzdF9oZWFkKilMSVNUX1BPSVNPTjI7Cit9CisjZW5kaWYK
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9sa2MuaCBiL3N1cHBvcnQva2NvbmZpZy9sa2Mu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQyYzc3Ci0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL2xrYy5oCkBAIC0wLDAgKzEsMTYwIEBACisvKiBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
MiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworCisjaWZuZGVmIExL
Q19ICisjZGVmaW5lIExLQ19ICisKKyNpbmNsdWRlICJleHByLmgiCisKKyNpZmRlZiBfX2NwbHVz
cGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2luY2x1ZGUgImxrY19wcm90by5oIgorCisj
ZGVmaW5lIFNSQ1RSRUUgInNyY3RyZWUiCisKKyNpZm5kZWYgUEFDS0FHRQorI2RlZmluZSBQQUNL
QUdFICJsaW51eCIKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR18KKyNkZWZpbmUgQ09ORklHXyAi
Q09ORklHXyIKKyNlbmRpZgorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpDT05GSUdfcHJlZml4
KHZvaWQpCit7CisJcmV0dXJuIGdldGVudiggIkNPTkZJR18iICkgPzogQ09ORklHXzsKK30KKyN1
bmRlZiBDT05GSUdfCisjZGVmaW5lIENPTkZJR18gQ09ORklHX3ByZWZpeCgpCisKK2VudW0gY29u
Zl9kZWZfbW9kZSB7CisJZGVmX2RlZmF1bHQsCisJZGVmX3llcywKKwlkZWZfbW9kLAorCWRlZl9u
bywKKwlkZWZfcmFuZG9tCit9OworCitleHRlcm4gaW50IHl5bGluZW5vOwordm9pZCB6Y29uZmR1
bXAoRklMRSAqb3V0KTsKK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpOworRklMRSAqemNvbmZf
Zm9wZW4oY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIg
Km5hbWUpOwordm9pZCB6Y29uZl9uZXh0ZmlsZShjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgemNv
bmZfbmV4dGZpbGVzKGNvbnN0IGNoYXIgKm5hbWUpOworaW50IHpjb25mX2xpbmVubyh2b2lkKTsK
K2NvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCk7CisKKy8qIGNvbmZkYXRhLmMgKi8KK2Nv
bnN0IGNoYXIgKmNvbmZfZ2V0X2NvbmZpZ25hbWUodm9pZCk7CitjaGFyICpjb25mX2dldF9kZWZh
dWx0X2NvbmZuYW1lKHZvaWQpOwordm9pZCBzeW1fc2V0X2NoYW5nZV9jb3VudChpbnQgY291bnQp
Owordm9pZCBzeW1fYWRkX2NoYW5nZV9jb3VudChpbnQgY291bnQpOworYm9vbCBjb25mX3NldF9h
bGxfbmV3X3N5bWJvbHMoZW51bSBjb25mX2RlZl9tb2RlIG1vZGUpOwordm9pZCBzZXRfYWxsX2No
b2ljZV92YWx1ZXMoc3RydWN0IHN5bWJvbCAqY3N5bSk7CisKKy8qIGNvbmZkYXRhLmMgYW5kIGV4
cHIuYyAqLworc3RhdGljIGlubGluZSB2b2lkIHhmd3JpdGUoY29uc3Qgdm9pZCAqc3RyLCBzaXpl
X3QgbGVuLCBzaXplX3QgY291bnQsIEZJTEUgKm91dCkKK3sKKwlhc3NlcnQobGVuICE9IDApOwor
CisJaWYgKGZ3cml0ZShzdHIsIGxlbiwgY291bnQsIG91dCkgIT0gY291bnQpCisJCWZwcmludGYo
c3RkZXJyLCAiRXJyb3IgaW4gd3JpdGluZyBvciBlbmQgb2YgZmlsZS5cbiIpOworfQorCisvKiBt
ZW51LmMgKi8KK3ZvaWQgX21lbnVfaW5pdCh2b2lkKTsKK3ZvaWQgbWVudV93YXJuKHN0cnVjdCBt
ZW51ICptZW51LCBjb25zdCBjaGFyICpmbXQsIC4uLik7CitzdHJ1Y3QgbWVudSAqbWVudV9hZGRf
bWVudSh2b2lkKTsKK3ZvaWQgbWVudV9lbmRfbWVudSh2b2lkKTsKK3ZvaWQgbWVudV9hZGRfZW50
cnkoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3ZvaWQgbWVudV9hZGRfZGVwKHN0cnVjdCBleHByICpk
ZXApOwordm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVjdCBleHByICpkZXApOworc3RydWN0
IHByb3BlcnR5ICptZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJv
bXB0LCBzdHJ1Y3QgZXhwciAqZGVwKTsKK3ZvaWQgbWVudV9hZGRfZXhwcihlbnVtIHByb3BfdHlw
ZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZXhwciwgc3RydWN0IGV4cHIgKmRlcCk7Cit2b2lkIG1lbnVf
YWRkX3N5bWJvbChlbnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIHN0cnVj
dCBleHByICpkZXApOwordm9pZCBtZW51X2FkZF9vcHRpb25fbW9kdWxlcyh2b2lkKTsKK3ZvaWQg
bWVudV9hZGRfb3B0aW9uX2RlZmNvbmZpZ19saXN0KHZvaWQpOwordm9pZCBtZW51X2FkZF9vcHRp
b25fYWxsbm9jb25maWdfeSh2b2lkKTsKK3ZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAq
cGFyZW50KTsKK3ZvaWQgbWVudV9zZXRfdHlwZShpbnQgdHlwZSk7CisKKy8qIHV0aWwuYyAqLwor
c3RydWN0IGZpbGUgKmZpbGVfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOwordm9pZCAqeG1hbGxv
YyhzaXplX3Qgc2l6ZSk7Cit2b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUp
Owordm9pZCAqeHJlYWxsb2Modm9pZCAqcCwgc2l6ZV90IHNpemUpOworY2hhciAqeHN0cmR1cChj
b25zdCBjaGFyICpzKTsKK2NoYXIgKnhzdHJuZHVwKGNvbnN0IGNoYXIgKnMsIHNpemVfdCBuKTsK
KworLyogbGV4ZXIubCAqLworaW50IHl5bGV4KHZvaWQpOworCitzdHJ1Y3QgZ3N0ciB7CisJc2l6
ZV90IGxlbjsKKwljaGFyICAqczsKKwkvKgorCSogd2hlbiBtYXhfd2lkdGggaXMgbm90IHplcm8g
bG9uZyBsaW5lcyBpbiBzdHJpbmcgcyAoaWYgYW55KSBnZXQKKwkqIHdyYXBwZWQgbm90IHRvIGV4
Y2VlZCB0aGUgbWF4X3dpZHRoIHZhbHVlCisJKi8KKwlpbnQgbWF4X3dpZHRoOworfTsKK3N0cnVj
dCBnc3RyIHN0cl9uZXcodm9pZCk7Cit2b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3RyICpncyk7Cit2
b2lkIHN0cl9hcHBlbmQoc3RydWN0IGdzdHIgKmdzLCBjb25zdCBjaGFyICpzKTsKK3ZvaWQgc3Ry
X3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK2NvbnN0IGNo
YXIgKnN0cl9nZXQoc3RydWN0IGdzdHIgKmdzKTsKKworLyogc3ltYm9sLmMgKi8KK3ZvaWQgc3lt
X2NsZWFyX2FsbF92YWxpZCh2b2lkKTsKK3N0cnVjdCBzeW1ib2wgKnN5bV9jaG9pY2VfZGVmYXVs
dChzdHJ1Y3Qgc3ltYm9sICpzeW0pOworc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0X3JhbmdlX3By
b3Aoc3RydWN0IHN5bWJvbCAqc3ltKTsKK2NvbnN0IGNoYXIgKnN5bV9nZXRfc3RyaW5nX2RlZmF1
bHQoc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19kZXBzKHN0
cnVjdCBzeW1ib2wgKnN5bSk7CitzdHJ1Y3QgcHJvcGVydHkgKnByb3BfYWxsb2MoZW51bSBwcm9w
X3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBzeW1ib2wgKnByb3BfZ2V0
X3N5bWJvbChzdHJ1Y3QgcHJvcGVydHkgKnByb3ApOworCitzdGF0aWMgaW5saW5lIHRyaXN0YXRl
IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiBz
eW0tPmN1cnIudHJpOworfQorCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqc3ltX2dl
dF9jaG9pY2VfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXJldHVybiAoc3RydWN0IHN5
bWJvbCAqKXN5bS0+Y3Vyci52YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBzeW1fc2V0X2No
b2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpjaCwgc3RydWN0IHN5bWJvbCAqY2h2YWwpCit7CisJ
cmV0dXJuIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2h2YWwsIHllcyk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzeW1faXNfY2hvaWNlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlyZXR1cm4g
c3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0UgPyB0cnVlIDogZmFsc2U7Cit9CisKK3N0YXRpYyBp
bmxpbmUgYm9vbCBzeW1faXNfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwly
ZXR1cm4gc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0VWQUwgPyB0cnVlIDogZmFsc2U7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBzeW1faXNfb3B0aW9uYWwoc3RydWN0IHN5bWJvbCAqc3ltKQor
eworCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX09QVElPTkFMID8gdHJ1ZSA6IGZhbHNlOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2hhc192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0p
Cit7CisJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfREVGX1VTRVIgPyB0cnVlIDogZmFsc2U7
Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBMS0NfSCAq
LwpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2xrY19wcm90by5oIGIvc3VwcG9ydC9rY29u
ZmlnL2xrY19wcm90by5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YzI2
NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvbGtjX3Byb3RvLmgKQEAgLTAs
MCArMSw2NiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKyNpbmNs
dWRlIDxzdGRhcmcuaD4KKworLyogY29uZmRhdGEuYyAqLwordm9pZCBjb25mX3BhcnNlKGNvbnN0
IGNoYXIgKm5hbWUpOworaW50IGNvbmZfcmVhZChjb25zdCBjaGFyICpuYW1lKTsKK2ludCBjb25m
X3JlYWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCk7CitpbnQgY29uZl93cml0ZV9kZWZj
b25maWcoY29uc3QgY2hhciAqbmFtZSk7CitpbnQgY29uZl93cml0ZShjb25zdCBjaGFyICpuYW1l
KTsKK2ludCBjb25mX3dyaXRlX2F1dG9jb25mKGludCBvdmVyd3JpdGUpOworYm9vbCBjb25mX2dl
dF9jaGFuZ2VkKHZvaWQpOwordm9pZCBjb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKCpm
bikodm9pZCkpOwordm9pZCBjb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKHZvaWQgKCpmbikoY29u
c3QgY2hhciAqcykpOworCisvKiBtZW51LmMgKi8KK2V4dGVybiBzdHJ1Y3QgbWVudSByb290bWVu
dTsKKworYm9vbCBtZW51X2lzX2VtcHR5KHN0cnVjdCBtZW51ICptZW51KTsKK2Jvb2wgbWVudV9p
c192aXNpYmxlKHN0cnVjdCBtZW51ICptZW51KTsKK2Jvb2wgbWVudV9oYXNfcHJvbXB0KHN0cnVj
dCBtZW51ICptZW51KTsKK2NvbnN0IGNoYXIgKiBtZW51X2dldF9wcm9tcHQoc3RydWN0IG1lbnUg
Km1lbnUpOworc3RydWN0IG1lbnUgKiBtZW51X2dldF9yb290X21lbnUoc3RydWN0IG1lbnUgKm1l
bnUpOworc3RydWN0IG1lbnUgKiBtZW51X2dldF9wYXJlbnRfbWVudShzdHJ1Y3QgbWVudSAqbWVu
dSk7Citib29sIG1lbnVfaGFzX2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOworY29uc3QgY2hhciAq
IG1lbnVfZ2V0X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOworc3RydWN0IGdzdHIgZ2V0X3JlbGF0
aW9uc19zdHIoc3RydWN0IHN5bWJvbCAqKnN5bV9hcnIsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQp
Owordm9pZCBtZW51X2dldF9leHRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IGdzdHIg
KmhlbHApOworCisvKiBzeW1ib2wuYyAqLworZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKiBzeW1ib2xf
aGFzaFtTWU1CT0xfSEFTSFNJWkVdOworCitzdHJ1Y3Qgc3ltYm9sICogc3ltX2xvb2t1cChjb25z
dCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOworc3RydWN0IHN5bWJvbCAqIHN5bV9maW5kKGNvbnN0
IGNoYXIgKm5hbWUpOworY29uc3QgY2hhciAqIHN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKGNvbnN0
IGNoYXIgKmluKTsKK3N0cnVjdCBzeW1ib2wgKiogc3ltX3JlX3NlYXJjaChjb25zdCBjaGFyICpw
YXR0ZXJuKTsKK2NvbnN0IGNoYXIgKiBzeW1fdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5cGUgdHlw
ZSk7Cit2b2lkIHN5bV9jYWxjX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7CitlbnVtIHN5bWJv
bF90eXBlIHN5bV9nZXRfdHlwZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOworYm9vbCBzeW1fdHJpc3Rh
dGVfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlzdGF0ZSB0cmkpOworYm9vbCBz
eW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlzdGF0ZSB0cmkpOwor
dHJpc3RhdGUgc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwor
Ym9vbCBzeW1fc3RyaW5nX3ZhbGlkKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqbmV3
dmFsKTsKK2Jvb2wgc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3RydWN0IHN5bWJvbCAqc3ltLCBj
b25zdCBjaGFyICpzdHIpOworYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9s
ICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCk7Citib29sIHN5bV9pc19jaGFuZ2FibGUoc3RydWN0
IHN5bWJvbCAqc3ltKTsKK3N0cnVjdCBwcm9wZXJ0eSAqIHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3Ry
dWN0IHN5bWJvbCAqc3ltKTsKK2NvbnN0IGNoYXIgKiBzeW1fZ2V0X3N0cmluZ192YWx1ZShzdHJ1
Y3Qgc3ltYm9sICpzeW0pOworCitjb25zdCBjaGFyICogcHJvcF9nZXRfdHlwZV9uYW1lKGVudW0g
cHJvcF90eXBlIHR5cGUpOworCisvKiBwcmVwcm9jZXNzLmMgKi8KK2VudW0gdmFyaWFibGVfZmxh
dm9yIHsKKwlWQVJfU0lNUExFLAorCVZBUl9SRUNVUlNJVkUsCisJVkFSX0FQUEVORCwKK307Cit2
b2lkIGVudl93cml0ZV9kZXAoRklMRSAqZiwgY29uc3QgY2hhciAqYXV0b19jb25mX25hbWUpOwor
dm9pZCB2YXJpYWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsCisJ
CSAgZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yKTsKK3ZvaWQgdmFyaWFibGVfYWxsX2RlbCh2
b2lkKTsKK2NoYXIgKmV4cGFuZF9zdHJpbmcoY29uc3QgY2hhciAqaW4pOworY2hhciAqZXhwYW5k
X2RvbGxhcihjb25zdCBjaGFyICoqc3RyKTsKK2NoYXIgKmV4cGFuZF9vbmVfdG9rZW4oY29uc3Qg
Y2hhciAqKnN0cik7CisKKy8qIGV4cHIuYyAqLwordm9pZCBleHByX3ByaW50KHN0cnVjdCBleHBy
ICplLCB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLCB2
b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKTsKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9s
eGRpYWxvZy9CSUcuRkFULldBUk5JTkcgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvQklHLkZB
VC5XQVJOSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjVhN2UKLS0t
IC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5H
CkBAIC0wLDAgKzEsNCBAQAorVGhpcyBpcyBOT1QgdGhlIG9mZmljaWFsIHZlcnNpb24gb2YgZGlh
bG9nLiAgVGhpcyB2ZXJzaW9uIGhhcyBiZWVuCitzaWduaWZpY2FudGx5IG1vZGlmaWVkIGZyb20g
dGhlIG9yaWdpbmFsLiAgSXQgaXMgZm9yIHVzZSBieSB0aGUgTGludXgKK2tlcm5lbCBjb25maWd1
cmF0aW9uIHNjcmlwdC4gIFBsZWFzZSBkbyBub3QgYm90aGVyIFNhdmlvIExhbSB3aXRoCitxdWVz
dGlvbnMgYWJvdXQgdGhpcyBwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2x4
ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5j
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMTYxY2YKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMKQEAgLTAsMCArMSwz
MTkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqICBjaGVj
a2xpc3QuYyAtLSBpbXBsZW1lbnRzIHRoZSBjaGVja2xpc3QgYm94CisgKgorICogIE9SSUdJTkFM
IEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykKKyAqICAgICBTdHVhcnQgSGVy
YmVydCAtIFMuSGVyYmVydEBzaGVmZmllbGQuYWMudWs6IHJhZGlvbGlzdCBleHRlbnNpb24KKyAq
ICAgICBBbGVzc2FuZHJvIFJ1YmluaSAtIHJ1YmluaUBpcHZ2aXMudW5pcHYuaXQ6IG1lcmdlZCB0
aGUgdHdvCisgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0g
Um9hZGNhcCAocm9hZGNhcEBjZncuY29tKQorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKwor
c3RhdGljIGludCBsaXN0X3dpZHRoLCBjaGVja194LCBpdGVtX3g7CisKKy8qCisgKiBQcmludCBs
aXN0IGl0ZW0KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfaXRlbShXSU5ET1cgKiB3aW4sIGludCBj
aG9pY2UsIGludCBzZWxlY3RlZCkKK3sKKwlpbnQgaTsKKwljaGFyICpsaXN0X2l0ZW0gPSBtYWxs
b2MobGlzdF93aWR0aCArIDEpOworCisJc3RybmNweShsaXN0X2l0ZW0sIGl0ZW1fc3RyKCksIGxp
c3Rfd2lkdGggLSBpdGVtX3gpOworCWxpc3RfaXRlbVtsaXN0X3dpZHRoIC0gaXRlbV94XSA9ICdc
MCc7CisKKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovCisJd2F0dHJzZXQod2lu
LCBkbGcubWVudWJveC5hdHIpOworCXdtb3ZlKHdpbiwgY2hvaWNlLCAwKTsKKwlmb3IgKGkgPSAw
OyBpIDwgbGlzdF93aWR0aDsgaSsrKQorCQl3YWRkY2god2luLCAnICcpOworCisJd21vdmUod2lu
LCBjaG9pY2UsIGNoZWNrX3gpOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuY2hlY2tf
c2VsZWN0ZWQuYXRyCisJCSA6IGRsZy5jaGVjay5hdHIpOworCWlmICghaXRlbV9pc190YWcoJzon
KSkKKwkJd3ByaW50dyh3aW4sICIoJWMpIiwgaXRlbV9pc190YWcoJ1gnKSA/ICdYJyA6ICcgJyk7
CisKKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLnRhZ19zZWxlY3RlZC5hdHIgOiBkbGcu
dGFnLmF0cik7CisJbXZ3YWRkY2god2luLCBjaG9pY2UsIGl0ZW1feCwgbGlzdF9pdGVtWzBdKTsK
Kwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDogZGxnLml0
ZW0uYXRyKTsKKwl3YWRkc3RyKHdpbiwgbGlzdF9pdGVtICsgMSk7CisJaWYgKHNlbGVjdGVkKSB7
CisJCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194ICsgMSk7CisJCXdyZWZyZXNoKHdpbik7CisJ
fQorCWZyZWUobGlzdF9pdGVtKTsKK30KKworLyoKKyAqIFByaW50IHRoZSBzY3JvbGwgaW5kaWNh
dG9ycy4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYXJyb3dzKFdJTkRPVyAqIHdpbiwgaW50IGNo
b2ljZSwgaW50IGl0ZW1fbm8sIGludCBzY3JvbGwsCisJICAgICBpbnQgeSwgaW50IHgsIGludCBo
ZWlnaHQpCit7CisJd21vdmUod2luLCB5LCB4KTsKKworCWlmIChzY3JvbGwgPiAwKSB7CisJCXdh
dHRyc2V0KHdpbiwgZGxnLnVhcnJvdy5hdHIpOworCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsK
KwkJd2FkZHN0cih3aW4sICIoLSkiKTsKKwl9IGVsc2UgeworCQl3YXR0cnNldCh3aW4sIGRsZy5t
ZW51Ym94LmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFD
U19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19I
TElORSk7CisJfQorCisJeSA9IHkgKyBoZWlnaHQgKyAxOworCXdtb3ZlKHdpbiwgeSwgeCk7CisK
KwlpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYmIChzY3JvbGwgKyBjaG9pY2UgPCBpdGVtX25vIC0g
MSkpIHsKKwkJd2F0dHJzZXQod2luLCBkbGcuZGFycm93LmF0cik7CisJCXdhZGRjaCh3aW4sIEFD
U19EQVJST1cpOworCQl3YWRkc3RyKHdpbiwgIigrKSIpOworCX0gZWxzZSB7CisJCXdhdHRyc2V0
KHdpbiwgZGxnLm1lbnVib3hfYm9yZGVyLmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7
CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJ
CXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJfQorfQorCisvKgorICogIERpc3BsYXkgdGhlIHRl
cm1pbmF0aW9uIGJ1dHRvbnMKKyAqLworc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cg
KiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQoreworCWludCB4
ID0gd2lkdGggLyAyIC0gMTE7CisJaW50IHkgPSBoZWlnaHQgLSAyOworCisJcHJpbnRfYnV0dG9u
KGRpYWxvZywgIlNlbGVjdCIsIHksIHgsIHNlbGVjdGVkID09IDApOworCXByaW50X2J1dHRvbihk
aWFsb2csICIgSGVscCAiLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOworCisJd21vdmUoZGlh
bG9nLCB5LCB4ICsgMSArIDE0ICogc2VsZWN0ZWQpOworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisK
Ky8qCisgKiBEaXNwbGF5IGEgZGlhbG9nIGJveCB3aXRoIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQg
Y2FuIGJlIHR1cm5lZCBvbiBvciBvZmYKKyAqIGluIHRoZSBzdHlsZSBvZiByYWRpb2xpc3QgKG9u
bHkgb25lIG9wdGlvbiB0dXJuZWQgb24gYXQgYSB0aW1lKS4KKyAqLworaW50IGRpYWxvZ19jaGVj
a2xpc3QoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwK
KwkJICAgICBpbnQgd2lkdGgsIGludCBsaXN0X2hlaWdodCkKK3sKKwlpbnQgaSwgeCwgeSwgYm94
X3gsIGJveF95OworCWludCBrZXkgPSAwLCBidXR0b24gPSAwLCBjaG9pY2UgPSAwLCBzY3JvbGwg
PSAwLCBtYXhfY2hvaWNlOworCVdJTkRPVyAqZGlhbG9nLCAqbGlzdDsKKworCS8qIHdoaWNoIGl0
ZW0gdG8gaGlnaGxpZ2h0ICovCisJaXRlbV9mb3JlYWNoKCkgeworCQlpZiAoaXRlbV9pc190YWco
J1gnKSkKKwkJCWNob2ljZSA9IGl0ZW1fbigpOworCQlpZiAoaXRlbV9pc19zZWxlY3RlZCgpKSB7
CisJCQljaG9pY2UgPSBpdGVtX24oKTsKKwkJCWJyZWFrOworCQl9CisJfQorCitkb19yZXNpemU6
CisJaWYgKGdldG1heHkoc3Rkc2NyKSA8IChoZWlnaHQgKyBDSEVDS0xJU1RfSEVJR1RIX01JTikp
CisJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOworCWlmIChnZXRtYXh4KHN0ZHNjcikgPCAo
d2lkdGggKyBDSEVDS0xJU1RfV0lEVEhfTUlOKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01B
TEw7CisKKwltYXhfY2hvaWNlID0gTUlOKGxpc3RfaGVpZ2h0LCBpdGVtX2NvdW50KCkpOworCisJ
LyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9IChnZXRtYXh4KHN0ZHNjcikg
LSB3aWR0aCkgLyAyOworCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7CisKKwlk
cmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOworCisJZGlhbG9nID0gbmV3
d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFsb2csIFRSVUUpOworCisJZHJh
d19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLAorCQkgZGxnLmRpYWxvZy5hdHIsIGRs
Zy5ib3JkZXIuYXRyKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsKKwltdndh
ZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsKKwlmb3IgKGkgPSAwOyBpIDwg
d2lkdGggLSAyOyBpKyspCisJCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7CisJd2F0dHJzZXQo
ZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7CisJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOworCisJ
cHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOworCisJd2F0dHJzZXQoZGlhbG9nLCBk
bGcuZGlhbG9nLmF0cik7CisJcHJpbnRfYXV0b3dyYXAoZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0g
MiwgMSwgMyk7CisKKwlsaXN0X3dpZHRoID0gd2lkdGggLSA2OworCWJveF95ID0gaGVpZ2h0IC0g
bGlzdF9oZWlnaHQgLSA1OworCWJveF94ID0gKHdpZHRoIC0gbGlzdF93aWR0aCkgLyAyIC0gMTsK
KworCS8qIGNyZWF0ZSBuZXcgd2luZG93IGZvciB0aGUgbGlzdCAqLworCWxpc3QgPSBzdWJ3aW4o
ZGlhbG9nLCBsaXN0X2hlaWdodCwgbGlzdF93aWR0aCwgeSArIGJveF95ICsgMSwKKwkJICAgICAg
eCArIGJveF94ICsgMSk7CisKKwlrZXlwYWQobGlzdCwgVFJVRSk7CisKKwkvKiBkcmF3IGEgYm94
IGFyb3VuZCB0aGUgbGlzdCBpdGVtcyAqLworCWRyYXdfYm94KGRpYWxvZywgYm94X3ksIGJveF94
LCBsaXN0X2hlaWdodCArIDIsIGxpc3Rfd2lkdGggKyAyLAorCQkgZGxnLm1lbnVib3hfYm9yZGVy
LmF0ciwgZGxnLm1lbnVib3guYXRyKTsKKworCS8qIEZpbmQgbGVuZ3RoIG9mIGxvbmdlc3QgaXRl
bSBpbiBvcmRlciB0byBjZW50ZXIgY2hlY2tsaXN0ICovCisJY2hlY2tfeCA9IDA7CisJaXRlbV9m
b3JlYWNoKCkKKwkJY2hlY2tfeCA9IE1BWChjaGVja194LCBzdHJsZW4oaXRlbV9zdHIoKSkgKyA0
KTsKKwljaGVja194ID0gTUlOKGNoZWNrX3gsIGxpc3Rfd2lkdGgpOworCisJY2hlY2tfeCA9IChs
aXN0X3dpZHRoIC0gY2hlY2tfeCkgLyAyOworCWl0ZW1feCA9IGNoZWNrX3ggKyA0OworCisJaWYg
KGNob2ljZSA+PSBsaXN0X2hlaWdodCkgeworCQlzY3JvbGwgPSBjaG9pY2UgLSBsaXN0X2hlaWdo
dCArIDE7CisJCWNob2ljZSAtPSBzY3JvbGw7CisJfQorCisJLyogUHJpbnQgdGhlIGxpc3QgKi8K
Kwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7CisJCWl0ZW1fc2V0KHNjcm9sbCAr
IGkpOworCQlwcmludF9pdGVtKGxpc3QsIGksIGkgPT0gY2hvaWNlKTsKKwl9CisKKwlwcmludF9h
cnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwgc2Nyb2xsLAorCQkgICAgIGJveF95
LCBib3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7CisKKwlwcmludF9idXR0b25zKGRp
YWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisKKwl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwl3bm91
dHJlZnJlc2gobGlzdCk7CisJZG91cGRhdGUoKTsKKworCXdoaWxlIChrZXkgIT0gS0VZX0VTQykg
eworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2lj
ZTsgaSsrKSB7CisJCQlpdGVtX3NldChpICsgc2Nyb2xsKTsKKwkJCWlmICh0b3VwcGVyKGtleSkg
PT0gdG91cHBlcihpdGVtX3N0cigpWzBdKSkKKwkJCQlicmVhazsKKwkJfQorCisJCWlmIChpIDwg
bWF4X2Nob2ljZSB8fCBrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSBLRVlfRE9XTiB8fAorCQkgICAg
a2V5ID09ICcrJyB8fCBrZXkgPT0gJy0nKSB7CisJCQlpZiAoa2V5ID09IEtFWV9VUCB8fCBrZXkg
PT0gJy0nKSB7CisJCQkJaWYgKCFjaG9pY2UpIHsKKwkJCQkJaWYgKCFzY3JvbGwpCisJCQkJCQlj
b250aW51ZTsKKwkJCQkJLyogU2Nyb2xsIGxpc3QgZG93biAqLworCQkJCQlpZiAobGlzdF9oZWln
aHQgPiAxKSB7CisJCQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBmaXJzdCBpdGVtICovCisJ
CQkJCQlpdGVtX3NldChzY3JvbGwpOworCQkJCQkJcHJpbnRfaXRlbShsaXN0LCAwLCBGQUxTRSk7
CisJCQkJCQlzY3JvbGxvayhsaXN0LCBUUlVFKTsKKwkJCQkJCXdzY3JsKGxpc3QsIC0xKTsKKwkJ
CQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNFKTsKKwkJCQkJfQorCQkJCQlzY3JvbGwtLTsKKwkJCQkJ
aXRlbV9zZXQoc2Nyb2xsKTsKKwkJCQkJcHJpbnRfaXRlbShsaXN0LCAwLCBUUlVFKTsKKwkJCQkJ
cHJpbnRfYXJyb3dzKGRpYWxvZywgY2hvaWNlLCBpdGVtX2NvdW50KCksCisJCQkJCQkgICAgIHNj
cm9sbCwgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsKKworCQkJCQl3
bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCQkJd3JlZnJlc2gobGlzdCk7CisKKwkJCQkJY29udGlu
dWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovCisJCQkJfSBlbHNlCisJCQkJCWkg
PSBjaG9pY2UgLSAxOworCQkJfSBlbHNlIGlmIChrZXkgPT0gS0VZX0RPV04gfHwga2V5ID09ICcr
JykgeworCQkJCWlmIChjaG9pY2UgPT0gbWF4X2Nob2ljZSAtIDEpIHsKKwkJCQkJaWYgKHNjcm9s
bCArIGNob2ljZSA+PSBpdGVtX2NvdW50KCkgLSAxKQorCQkJCQkJY29udGludWU7CisJCQkJCS8q
IFNjcm9sbCBsaXN0IHVwICovCisJCQkJCWlmIChsaXN0X2hlaWdodCA+IDEpIHsKKwkJCQkJCS8q
IERlLWhpZ2hsaWdodCBjdXJyZW50IGxhc3QgaXRlbSBiZWZvcmUgc2Nyb2xsaW5nIHVwICovCisJ
CQkJCQlpdGVtX3NldChzY3JvbGwgKyBtYXhfY2hvaWNlIC0gMSk7CisJCQkJCQlwcmludF9pdGVt
KGxpc3QsCisJCQkJCQkJICAgIG1heF9jaG9pY2UgLSAxLAorCQkJCQkJCSAgICBGQUxTRSk7CisJ
CQkJCQlzY3JvbGxvayhsaXN0LCBUUlVFKTsKKwkJCQkJCXdzY3JsKGxpc3QsIDEpOworCQkJCQkJ
c2Nyb2xsb2sobGlzdCwgRkFMU0UpOworCQkJCQl9CisJCQkJCXNjcm9sbCsrOworCQkJCQlpdGVt
X3NldChzY3JvbGwgKyBtYXhfY2hvaWNlIC0gMSk7CisJCQkJCXByaW50X2l0ZW0obGlzdCwgbWF4
X2Nob2ljZSAtIDEsIFRSVUUpOworCisJCQkJCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwg
aXRlbV9jb3VudCgpLAorCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3gg
KyA1LCBsaXN0X2hlaWdodCk7CisKKwkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQkJCXdy
ZWZyZXNoKGxpc3QpOworCisJCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBw
cmVzcyAqLworCQkJCX0gZWxzZQorCQkJCQlpID0gY2hvaWNlICsgMTsKKwkJCX0KKwkJCWlmIChp
ICE9IGNob2ljZSkgeworCQkJCS8qIERlLWhpZ2hsaWdodCBjdXJyZW50IGl0ZW0gKi8KKwkJCQlp
dGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOworCQkJCXByaW50X2l0ZW0obGlzdCwgY2hvaWNlLCBG
QUxTRSk7CisJCQkJLyogSGlnaGxpZ2h0IG5ldyBpdGVtICovCisJCQkJY2hvaWNlID0gaTsKKwkJ
CQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOworCQkJCXByaW50X2l0ZW0obGlzdCwgY2hvaWNl
LCBUUlVFKTsKKwkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwkJCQl3cmVmcmVzaChsaXN0KTsK
KwkJCX0KKwkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBwcmVzcyAqLworCQl9
CisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgJ0gnOgorCQljYXNlICdoJzoKKwkJY2FzZSAnPyc6
CisJCQlidXR0b24gPSAxOworCQkJLyogZmFsbC10aHJvdWdoICovCisJCWNhc2UgJ1MnOgorCQlj
YXNlICdzJzoKKwkJY2FzZSAnICc6CisJCWNhc2UgJ1xuJzoKKwkJCWl0ZW1fZm9yZWFjaCgpCisJ
CQkJaXRlbV9zZXRfc2VsZWN0ZWQoMCk7CisJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOwor
CQkJaXRlbV9zZXRfc2VsZWN0ZWQoMSk7CisJCQlkZWx3aW4obGlzdCk7CisJCQlkZWx3aW4oZGlh
bG9nKTsKKwkJCXJldHVybiBidXR0b247CisJCWNhc2UgVEFCOgorCQljYXNlIEtFWV9MRUZUOgor
CQljYXNlIEtFWV9SSUdIVDoKKwkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0
b24gOiArK2J1dHRvbikgPCAwKQorCQkJICAgID8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRv
bik7CisKKwkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOwor
CQkJd3JlZnJlc2goZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlICdYJzoKKwkJY2FzZSAneCc6
CisJCQlrZXkgPSBLRVlfRVNDOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VTQzoKKwkJCWtleSA9
IG9uX2tleV9lc2MoZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SRVNJWkU6CisJCQlk
ZWx3aW4obGlzdCk7CisJCQlkZWx3aW4oZGlhbG9nKTsKKwkJCW9uX2tleV9yZXNpemUoKTsKKwkJ
CWdvdG8gZG9fcmVzaXplOworCQl9CisKKwkJLyogTm93LCB1cGRhdGUgZXZlcnl0aGluZy4uLiAq
LworCQlkb3VwZGF0ZSgpOworCX0KKwlkZWx3aW4obGlzdCk7CisJZGVsd2luKGRpYWxvZyk7CisJ
cmV0dXJuIGtleTsJCS8qIEVTQyBwcmVzc2VkICovCit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcvbHhkaWFsb2cvZGlhbG9nLmggYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvZGlhbG9n
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhiNTY1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9kaWFsb2cuaApAQCAtMCwwICsxLDIz
OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArICovCisvKgorICogIGRp
YWxvZy5oIC0tIGNvbW1vbiBkZWNsYXJhdGlvbnMgZm9yIGFsbCBkaWFsb2cgbW9kdWxlcworICoK
KyAqICBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCisgKi8KKworI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+
CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNpZmRlZiBfX3N1bl9fCisjZGVmaW5lIENV
UlNfTUFDUk9TCisjZW5kaWYKKyNpbmNsdWRlIDxuY3Vyc2VzLmg+CisKKy8qCisgKiBDb2xvcnMg
aW4gbmN1cnNlcyAxLjkuOWUgZG8gbm90IHdvcmsgcHJvcGVybHkgc2luY2UgZm9yZWdyb3VuZCBh
bmQKKyAqIGJhY2tncm91bmQgY29sb3JzIGFyZSBPUidkIHJhdGhlciB0aGFuIHNlcGFyYXRlbHkg
bWFza2VkLiAgVGhpcyB2ZXJzaW9uCisgKiBvZiBkaWFsb2cgd2FzIGhhY2tlZCB0byB3b3JrIHdp
dGggbmN1cnNlcyAxLjkuOWUsIG1ha2luZyBpdCBpbmNvbXBhdGlibGUKKyAqIHdpdGggc3RhbmRh
cmQgY3Vyc2VzLiAgVGhlIHNpbXBsZXN0IGZpeCAodG8gbWFrZSB0aGlzIHdvcmsgd2l0aCBzdGFu
ZGFyZAorICogY3Vyc2VzKSB1c2VzIHRoZSB3YmtnZHNldCgpIGZ1bmN0aW9uLCBub3QgdXNlZCBp
biB0aGUgb3JpZ2luYWwgaGFjay4KKyAqIFR1cm4gaXQgb2ZmIGlmIHdlJ3JlIGJ1aWxkaW5nIHdp
dGggMS45LjllLCBzaW5jZSBpdCBqdXN0IGNvbmZ1c2VzIHRoaW5ncy4KKyAqLworI2lmIGRlZmlu
ZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKF9ORUVEX1dSQVApICYmICFkZWZpbmVkKEdD
Q19QUklOVEZMSUtFKQorI2RlZmluZSBPTERfTkNVUlNFUyAxCisjdW5kZWYgIHdia2dkc2V0Cisj
ZGVmaW5lIHdia2dkc2V0KHcscCkJCS8qbm90aGluZyAqLworI2Vsc2UKKyNkZWZpbmUgT0xEX05D
VVJTRVMgMAorI2VuZGlmCisKKyNkZWZpbmUgVFIocGFyYW1zKSBfdHJhY2VmIHBhcmFtcworCisj
ZGVmaW5lIEtFWV9FU0MgMjcKKyNkZWZpbmUgVEFCIDkKKyNkZWZpbmUgTUFYX0xFTiAyMDQ4Cisj
ZGVmaW5lIEJVRl9TSVpFICgxMCoxMDI0KQorI2RlZmluZSBNSU4oeCx5KSAoeCA8IHkgPyB4IDog
eSkKKyNkZWZpbmUgTUFYKHgseSkgKHggPiB5ID8geCA6IHkpCisKKyNpZm5kZWYgQUNTX1VMQ09S
TkVSCisjZGVmaW5lIEFDU19VTENPUk5FUiAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfTExDT1JO
RVIKKyNkZWZpbmUgQUNTX0xMQ09STkVSICcrJworI2VuZGlmCisjaWZuZGVmIEFDU19VUkNPUk5F
UgorI2RlZmluZSBBQ1NfVVJDT1JORVIgJysnCisjZW5kaWYKKyNpZm5kZWYgQUNTX0xSQ09STkVS
CisjZGVmaW5lIEFDU19MUkNPUk5FUiAnKycKKyNlbmRpZgorI2lmbmRlZiBBQ1NfSExJTkUKKyNk
ZWZpbmUgQUNTX0hMSU5FICctJworI2VuZGlmCisjaWZuZGVmIEFDU19WTElORQorI2RlZmluZSBB
Q1NfVkxJTkUgJ3wnCisjZW5kaWYKKyNpZm5kZWYgQUNTX0xURUUKKyNkZWZpbmUgQUNTX0xURUUg
JysnCisjZW5kaWYKKyNpZm5kZWYgQUNTX1JURUUKKyNkZWZpbmUgQUNTX1JURUUgJysnCisjZW5k
aWYKKyNpZm5kZWYgQUNTX1VBUlJPVworI2RlZmluZSBBQ1NfVUFSUk9XICdeJworI2VuZGlmCisj
aWZuZGVmIEFDU19EQVJST1cKKyNkZWZpbmUgQUNTX0RBUlJPVyAndicKKyNlbmRpZgorCisvKiBl
cnJvciByZXR1cm4gY29kZXMgKi8KKyNkZWZpbmUgRVJSRElTUExBWVRPT1NNQUxMIChLRVlfTUFY
ICsgMSkKKworLyoKKyAqICAgQ29sb3IgZGVmaW5pdGlvbnMKKyAqLworc3RydWN0IGRpYWxvZ19j
b2xvciB7CisJY2h0eXBlIGF0cjsJLyogQ29sb3IgYXR0cmlidXRlICovCisJaW50IGZnOwkJLyog
Zm9yZWdyb3VuZCAqLworCWludCBiZzsJCS8qIGJhY2tncm91bmQgKi8KKwlpbnQgaGw7CQkvKiBo
aWdobGlnaHQgdGhpcyBpdGVtICovCit9OworCitzdHJ1Y3Qgc3VidGl0bGVfbGlzdCB7CisJc3Ry
dWN0IHN1YnRpdGxlX2xpc3QgKm5leHQ7CisJY29uc3QgY2hhciAqdGV4dDsKK307CisKK3N0cnVj
dCBkaWFsb2dfaW5mbyB7CisJY29uc3QgY2hhciAqYmFja3RpdGxlOworCXN0cnVjdCBzdWJ0aXRs
ZV9saXN0ICpzdWJ0aXRsZXM7CisJc3RydWN0IGRpYWxvZ19jb2xvciBzY3JlZW47CisJc3RydWN0
IGRpYWxvZ19jb2xvciBzaGFkb3c7CisJc3RydWN0IGRpYWxvZ19jb2xvciBkaWFsb2c7CisJc3Ry
dWN0IGRpYWxvZ19jb2xvciB0aXRsZTsKKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJvcmRlcjsKKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9hY3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xvciBi
dXR0b25faW5hY3RpdmU7CisJc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fa2V5X2FjdGl2ZTsK
KwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9rZXlfaW5hY3RpdmU7CisJc3RydWN0IGRpYWxv
Z19jb2xvciBidXR0b25fbGFiZWxfYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9u
X2xhYmVsX2luYWN0aXZlOworCXN0cnVjdCBkaWFsb2dfY29sb3IgaW5wdXRib3g7CisJc3RydWN0
IGRpYWxvZ19jb2xvciBpbnB1dGJveF9ib3JkZXI7CisJc3RydWN0IGRpYWxvZ19jb2xvciBzZWFy
Y2hib3g7CisJc3RydWN0IGRpYWxvZ19jb2xvciBzZWFyY2hib3hfdGl0bGU7CisJc3RydWN0IGRp
YWxvZ19jb2xvciBzZWFyY2hib3hfYm9yZGVyOworCXN0cnVjdCBkaWFsb2dfY29sb3IgcG9zaXRp
b25faW5kaWNhdG9yOworCXN0cnVjdCBkaWFsb2dfY29sb3IgbWVudWJveDsKKwlzdHJ1Y3QgZGlh
bG9nX2NvbG9yIG1lbnVib3hfYm9yZGVyOworCXN0cnVjdCBkaWFsb2dfY29sb3IgaXRlbTsKKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIGl0ZW1fc2VsZWN0ZWQ7CisJc3RydWN0IGRpYWxvZ19jb2xvciB0
YWc7CisJc3RydWN0IGRpYWxvZ19jb2xvciB0YWdfc2VsZWN0ZWQ7CisJc3RydWN0IGRpYWxvZ19j
b2xvciB0YWdfa2V5OworCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnX2tleV9zZWxlY3RlZDsKKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIGNoZWNrOworCXN0cnVjdCBkaWFsb2dfY29sb3IgY2hlY2tfc2Vs
ZWN0ZWQ7CisJc3RydWN0IGRpYWxvZ19jb2xvciB1YXJyb3c7CisJc3RydWN0IGRpYWxvZ19jb2xv
ciBkYXJyb3c7Cit9OworCisvKgorICogR2xvYmFsIHZhcmlhYmxlcworICovCitleHRlcm4gc3Ry
dWN0IGRpYWxvZ19pbmZvIGRsZzsKK2V4dGVybiBjaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbXTsK
K2V4dGVybiBpbnQgc2F2ZWRfeCwgc2F2ZWRfeTsJCS8qIE5lZWRlZCBpbiBzaWduYWwgaGFuZGxl
ciBpbiBtY29uZi5jICovCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KKworLyog
aXRlbSBsaXN0IGFzIHVzZWQgYnkgY2hlY2tsaXN0IGFuZCBtZW51Ym94ICovCit2b2lkIGl0ZW1f
cmVzZXQodm9pZCk7Cit2b2lkIGl0ZW1fbWFrZShjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lk
IGl0ZW1fYWRkX3N0cihjb25zdCBjaGFyICpmbXQsIC4uLik7Cit2b2lkIGl0ZW1fc2V0X3RhZyhj
aGFyIHRhZyk7Cit2b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcCk7Cit2b2lkIGl0ZW1fc2V0X3Nl
bGVjdGVkKGludCB2YWwpOworaW50IGl0ZW1fYWN0aXZhdGVfc2VsZWN0ZWQodm9pZCk7Cit2b2lk
ICppdGVtX2RhdGEodm9pZCk7CitjaGFyIGl0ZW1fdGFnKHZvaWQpOworCisvKiBpdGVtIGxpc3Qg
bWFuaXB1bGF0aW9uIGZvciBseGRpYWxvZyB1c2UgKi8KKyNkZWZpbmUgTUFYSVRFTVNUUiAyMDAK
K3N0cnVjdCBkaWFsb2dfaXRlbSB7CisJY2hhciBzdHJbTUFYSVRFTVNUUl07CS8qIHByb21wdCBk
aXNwbGF5ZWQgKi8KKwljaGFyIHRhZzsKKwl2b2lkICpkYXRhOwkvKiBwb2ludGVyIHRvIG1lbnUg
aXRlbSAtIHVzZWQgYnkgbWVudWJveCtjaGVja2xpc3QgKi8KKwlpbnQgc2VsZWN0ZWQ7CS8qIFNl
dCB0byAxIGJ5IGRpYWxvZ18qKCkgZnVuY3Rpb24gaWYgc2VsZWN0ZWQuICovCit9OworCisvKiBs
aXN0IG9mIGxpYWxvZ19pdGVtcyAqLworc3RydWN0IGRpYWxvZ19saXN0IHsKKwlzdHJ1Y3QgZGlh
bG9nX2l0ZW0gbm9kZTsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKm5leHQ7Cit9OworCitleHRlcm4g
c3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2N1cjsKK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3Qg
aXRlbV9uaWw7CitleHRlcm4gc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2hlYWQ7CisKK2ludCBp
dGVtX2NvdW50KHZvaWQpOwordm9pZCBpdGVtX3NldChpbnQgbik7CitpbnQgaXRlbV9uKHZvaWQp
OworY29uc3QgY2hhciAqaXRlbV9zdHIodm9pZCk7CitpbnQgaXRlbV9pc19zZWxlY3RlZCh2b2lk
KTsKK2ludCBpdGVtX2lzX3RhZyhjaGFyIHRhZyk7CisjZGVmaW5lIGl0ZW1fZm9yZWFjaCgpIFwK
Kwlmb3IgKGl0ZW1fY3VyID0gaXRlbV9oZWFkID8gaXRlbV9oZWFkOiBpdGVtX2N1cjsgXAorCSAg
ICAgaXRlbV9jdXIgJiYgKGl0ZW1fY3VyICE9ICZpdGVtX25pbCk7IGl0ZW1fY3VyID0gaXRlbV9j
dXItPm5leHQpCisKKy8qIGdlbmVyaWMga2V5IGhhbmRsZXJzICovCitpbnQgb25fa2V5X2VzYyhX
SU5ET1cgKndpbik7CitpbnQgb25fa2V5X3Jlc2l6ZSh2b2lkKTsKKworLyogbWluaW11bSAocmUp
c2l6ZSB2YWx1ZXMgKi8KKyNkZWZpbmUgQ0hFQ0tMSVNUX0hFSUdUSF9NSU4gNgkvKiBGb3IgZGlh
bG9nX2NoZWNrbGlzdCgpICovCisjZGVmaW5lIENIRUNLTElTVF9XSURUSF9NSU4gNgorI2RlZmlu
ZSBJTlBVVEJPWF9IRUlHVEhfTUlOIDIJLyogRm9yIGRpYWxvZ19pbnB1dGJveCgpICovCisjZGVm
aW5lIElOUFVUQk9YX1dJRFRIX01JTiAyCisjZGVmaW5lIE1FTlVCT1hfSEVJR1RIX01JTiAxNQkv
KiBGb3IgZGlhbG9nX21lbnUoKSAqLworI2RlZmluZSBNRU5VQk9YX1dJRFRIX01JTiA2NQorI2Rl
ZmluZSBURVhUQk9YX0hFSUdUSF9NSU4gOAkvKiBGb3IgZGlhbG9nX3RleHRib3goKSAqLworI2Rl
ZmluZSBURVhUQk9YX1dJRFRIX01JTiA4CisjZGVmaW5lIFlFU05PX0hFSUdUSF9NSU4gNAkvKiBG
b3IgZGlhbG9nX3llc25vKCkgKi8KKyNkZWZpbmUgWUVTTk9fV0lEVEhfTUlOIDQKKyNkZWZpbmUg
V0lORE9XX0hFSUdUSF9NSU4gMTkJLyogRm9yIGluaXRfZGlhbG9nKCkgKi8KKyNkZWZpbmUgV0lO
RE9XX1dJRFRIX01JTiA4MAorCitpbnQgaW5pdF9kaWFsb2coY29uc3QgY2hhciAqYmFja3RpdGxl
KTsKK3ZvaWQgc2V0X2RpYWxvZ19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKTsKK3Zv
aWQgc2V0X2RpYWxvZ19zdWJ0aXRsZXMoc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlcyk7
Cit2b2lkIGVuZF9kaWFsb2coaW50IHgsIGludCB5KTsKK3ZvaWQgYXR0cl9jbGVhcihXSU5ET1cg
KiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpOwordm9pZCBkaWFsb2df
Y2xlYXIodm9pZCk7Cit2b2lkIHByaW50X2F1dG93cmFwKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hh
ciAqcHJvbXB0LCBpbnQgd2lkdGgsIGludCB5LCBpbnQgeCk7Cit2b2lkIHByaW50X2J1dHRvbihX
SU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3Rl
ZCk7Cit2b2lkIHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25zdCBjaGFyICp0aXRsZSwg
aW50IHdpZHRoKTsKK3ZvaWQgZHJhd19ib3goV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGlu
dCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGJveCwKKwkgICAgICBjaHR5cGUgYm9yZGVyKTsK
K3ZvaWQgZHJhd19zaGFkb3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQs
IGludCB3aWR0aCk7CisKK2ludCBmaXJzdF9hbHBoYShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0
IGNoYXIgKmV4ZW1wdCk7CitpbnQgZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25z
dCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCk7CitpbnQgZGlhbG9nX21zZ2Jv
eChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkg
IGludCB3aWR0aCwgaW50IHBhdXNlKTsKKworCit0eXBlZGVmIHZvaWQgKCp1cGRhdGVfdGV4dF9m
bikoY2hhciAqYnVmLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZvaWQKKwkJCSAgICAgICAq
X2RhdGEpOworaW50IGRpYWxvZ190ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjaGFyICp0YnVm
LCBpbnQgaW5pdGlhbF9oZWlnaHQsCisJCSAgIGludCBpbml0aWFsX3dpZHRoLCBpbnQgKmtleXMs
IGludCAqX3ZzY3JvbGwsIGludCAqX2hzY3JvbGwsCisJCSAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0
ZV90ZXh0LCB2b2lkICpkYXRhKTsKK2ludCBkaWFsb2dfbWVudShjb25zdCBjaGFyICp0aXRsZSwg
Y29uc3QgY2hhciAqcHJvbXB0LAorCQljb25zdCB2b2lkICpzZWxlY3RlZCwgaW50ICpzX3Njcm9s
bCk7CitpbnQgZGlhbG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAq
cHJvbXB0LCBpbnQgaGVpZ2h0LAorCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0KTsK
K2ludCBkaWFsb2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21w
dCwgaW50IGhlaWdodCwKKwkJICAgIGludCB3aWR0aCwgY29uc3QgY2hhciAqaW5pdCk7CisKKy8q
CisgKiBUaGlzIGlzIHRoZSBiYXNlIGZvciBmaWN0aXRpb3VzIGtleXMsIHdoaWNoIGFjdGl2YXRl
CisgKiB0aGUgYnV0dG9ucy4KKyAqCisgKiBNb3VzZS1nZW5lcmF0ZWQga2V5cyBhcmUgdGhlIGZv
bGxvd2luZzoKKyAqICAgLS0gdGhlIGZpcnN0IDMyIGFyZSB1c2VkIGFzIG51bWJlcnMsIGluIGFk
ZGl0aW9uIHRvICcwJy0nOScKKyAqICAgLS0gdGhlIGxvd2VyY2FzZSBhcmUgdXNlZCB0byBzaWdu
YWwgbW91c2UtZW50ZXIgZXZlbnRzIChNX0VWRU5UICsgJ28nKQorICogICAtLSB1cHBlcmNhc2Ug
Y2hhcnMgYXJlIHVzZWQgdG8gaW52b2tlIHRoZSBidXR0b24gKE1fRVZFTlQgKyAnTycpCisgKi8K
KyNkZWZpbmUgTV9FVkVOVCAoS0VZX01BWCsxKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL2lucHV0Ym94LmMgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvaW5wdXRib3gu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGNmYjI4Ci0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94LmMKQEAgLTAsMCArMSwy
ODkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKworLyoKKyAqICBpbnB1
dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIGlucHV0IGJveAorICoKKyAqICBPUklHSU5BTCBBVVRI
T1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCisgKiAgTU9ESUZJRUQgRk9SIExJTlVY
IEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQorICov
CisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworY2hhciBkaWFsb2dfaW5wdXRfcmVzdWx0W01BWF9M
RU4gKyAxXTsKKworLyoKKyAqICBQcmludCB0aGUgdGVybWluYXRpb24gYnV0dG9ucworICovCitz
dGF0aWMgdm9pZCBwcmludF9idXR0b25zKFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50
IHdpZHRoLCBpbnQgc2VsZWN0ZWQpCit7CisJaW50IHggPSB3aWR0aCAvIDIgLSAxMTsKKwlpbnQg
eSA9IGhlaWdodCAtIDI7CisKKwlwcmludF9idXR0b24oZGlhbG9nLCAiICBPayAgIiwgeSwgeCwg
c2VsZWN0ZWQgPT0gMCk7CisJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiBIZWxwICIsIHksIHggKyAx
NCwgc2VsZWN0ZWQgPT0gMSk7CisKKwl3bW92ZShkaWFsb2csIHksIHggKyAxICsgMTQgKiBzZWxl
Y3RlZCk7CisJd3JlZnJlc2goZGlhbG9nKTsKK30KKworLyoKKyAqIERpc3BsYXkgYSBkaWFsb2cg
Ym94IGZvciBpbnB1dGluZyBhIHN0cmluZworICovCitpbnQgZGlhbG9nX2lucHV0Ym94KGNvbnN0
IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCwK
KwkJICAgIGNvbnN0IGNoYXIgKmluaXQpCit7CisJaW50IGksIHgsIHksIGJveF95LCBib3hfeCwg
Ym94X3dpZHRoOworCWludCBpbnB1dF94ID0gMCwga2V5ID0gMCwgYnV0dG9uID0gLTE7CisJaW50
IHNob3dfeCwgbGVuLCBwb3M7CisJY2hhciAqaW5zdHIgPSBkaWFsb2dfaW5wdXRfcmVzdWx0Owor
CVdJTkRPVyAqZGlhbG9nOworCisJaWYgKCFpbml0KQorCQlpbnN0clswXSA9ICdcMCc7CisJZWxz
ZQorCQlzdHJjcHkoaW5zdHIsIGluaXQpOworCitkb19yZXNpemU6CisJaWYgKGdldG1heHkoc3Rk
c2NyKSA8PSAoaGVpZ2h0IC0gSU5QVVRCT1hfSEVJR1RIX01JTikpCisJCXJldHVybiAtRVJSRElT
UExBWVRPT1NNQUxMOworCWlmIChnZXRtYXh4KHN0ZHNjcikgPD0gKHdpZHRoIC0gSU5QVVRCT1hf
V0lEVEhfTUlOKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisKKwkvKiBjZW50ZXIg
ZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKGdldG1heHgoc3Rkc2NyKSAtIHdpZHRoKSAv
IDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsKKworCWRyYXdfc2hhZG93
KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0
LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3X2JveChkaWFs
b2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5h
dHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2FkZGNoKGRpYWxv
ZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7
IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChkaWFsb2csIGRs
Zy5kaWFsb2cuYXRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlwcmludF90aXRs
ZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cu
YXRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsK
KworCS8qIERyYXcgdGhlIGlucHV0IGZpZWxkIGJveCAqLworCWJveF93aWR0aCA9IHdpZHRoIC0g
NjsKKwlnZXR5eChkaWFsb2csIHksIHgpOworCWJveF95ID0geSArIDI7CisJYm94X3ggPSAod2lk
dGggLSBib3hfd2lkdGgpIC8gMjsKKwlkcmF3X2JveChkaWFsb2csIHkgKyAxLCBib3hfeCAtIDEs
IDMsIGJveF93aWR0aCArIDIsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOwor
CisJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOworCisJLyogU2V0IHVw
IHRoZSBpbml0aWFsIHZhbHVlICovCisJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOworCXdh
dHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7CisKKwlsZW4gPSBzdHJsZW4oaW5zdHIp
OworCXBvcyA9IGxlbjsKKworCWlmIChsZW4gPj0gYm94X3dpZHRoKSB7CisJCXNob3dfeCA9IGxl
biAtIGJveF93aWR0aCArIDE7CisJCWlucHV0X3ggPSBib3hfd2lkdGggLSAxOworCQlmb3IgKGkg
PSAwOyBpIDwgYm94X3dpZHRoIC0gMTsgaSsrKQorCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hv
d194ICsgaV0pOworCX0gZWxzZSB7CisJCXNob3dfeCA9IDA7CisJCWlucHV0X3ggPSBsZW47CisJ
CXdhZGRzdHIoZGlhbG9nLCBpbnN0cik7CisJfQorCisJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94
X3ggKyBpbnB1dF94KTsKKworCXdyZWZyZXNoKGRpYWxvZyk7CisKKwl3aGlsZSAoa2V5ICE9IEtF
WV9FU0MpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7CisKKwkJaWYgKGJ1dHRvbiA9PSAtMSkg
ewkvKiBJbnB1dCBib3ggc2VsZWN0ZWQgKi8KKwkJCXN3aXRjaCAoa2V5KSB7CisJCQljYXNlIFRB
QjoKKwkJCWNhc2UgS0VZX1VQOgorCQkJY2FzZSBLRVlfRE9XTjoKKwkJCQlicmVhazsKKwkJCWNh
c2UgS0VZX0JBQ0tTUEFDRToKKwkJCWNhc2UgODogICAvKiBeSCAqLworCQkJY2FzZSAxMjc6IC8q
IF4/ICovCisJCQkJaWYgKHBvcykgeworCQkJCQl3YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJv
eC5hdHIpOworCQkJCQlpZiAoaW5wdXRfeCA9PSAwKSB7CisJCQkJCQlzaG93X3gtLTsKKwkJCQkJ
fSBlbHNlCisJCQkJCQlpbnB1dF94LS07CisKKwkJCQkJaWYgKHBvcyA8IGxlbikgeworCQkJCQkJ
Zm9yIChpID0gcG9zIC0gMTsgaSA8IGxlbjsgaSsrKSB7CisJCQkJCQkJaW5zdHJbaV0gPSBpbnN0
cltpKzFdOworCQkJCQkJfQorCQkJCQl9CisKKwkJCQkJcG9zLS07CisJCQkJCWxlbi0tOworCQkJ
CQlpbnN0cltsZW5dID0gJ1wwJzsKKwkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOwor
CQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsKKwkJCQkJCWlmICghaW5zdHJb
c2hvd194ICsgaV0pIHsKKwkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOworCQkJCQkJCWJyZWFr
OworCQkJCQkJfQorCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOworCQkJ
CQl9CisJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7CisJCQkJCXdy
ZWZyZXNoKGRpYWxvZyk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJY2FzZSBLRVlfTEVGVDoK
KwkJCQlpZiAocG9zID4gMCkgeworCQkJCQlpZiAoaW5wdXRfeCA+IDApIHsKKwkJCQkJCXdtb3Zl
KGRpYWxvZywgYm94X3ksIC0taW5wdXRfeCArIGJveF94KTsKKwkJCQkJfSBlbHNlIGlmIChpbnB1
dF94ID09IDApIHsKKwkJCQkJCXNob3dfeC0tOworCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwg
Ym94X3gpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aDsgaSsrKSB7CisJCQkJCQkJ
aWYgKCFpbnN0cltzaG93X3ggKyBpXSkgeworCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOwor
CQkJCQkJCQlicmVhazsKKwkJCQkJCQl9CisJCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hv
d194ICsgaV0pOworCQkJCQkJfQorCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOwor
CQkJCQl9CisJCQkJCXBvcy0tOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgS0VZX1JJ
R0hUOgorCQkJCWlmIChwb3MgPCBsZW4pIHsKKwkJCQkJaWYgKGlucHV0X3ggPCBib3hfd2lkdGgg
LSAxKSB7CisJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCArK2lucHV0X3ggKyBib3hfeCk7CisJ
CQkJCX0gZWxzZSBpZiAoaW5wdXRfeCA9PSBib3hfd2lkdGggLSAxKSB7CisJCQkJCQlzaG93X3gr
KzsKKwkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsKKwkJCQkJCWZvciAoaSA9IDA7
IGkgPCBib3hfd2lkdGg7IGkrKykgeworCQkJCQkJCWlmICghaW5zdHJbc2hvd194ICsgaV0pIHsK
KwkJCQkJCQkJd2FkZGNoKGRpYWxvZywgJyAnKTsKKwkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQor
CQkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3dfeCArIGldKTsKKwkJCQkJCX0KKwkJCQkJ
CXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7CisJCQkJCX0KKwkJCQkJcG9z
Kys7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJZGVmYXVsdDoKKwkJCQlpZiAoa2V5IDwgMHgx
MDAgJiYgaXNwcmludChrZXkpKSB7CisJCQkJCWlmIChsZW4gPCBNQVhfTEVOKSB7CisJCQkJCQl3
YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJveC5hdHIpOworCQkJCQkJaWYgKHBvcyA8IGxlbikg
eworCQkJCQkJCWZvciAoaSA9IGxlbjsgaSA+IHBvczsgaS0tKQorCQkJCQkJCQlpbnN0cltpXSA9
IGluc3RyW2ktMV07CisJCQkJCQkJaW5zdHJbcG9zXSA9IGtleTsKKwkJCQkJCX0gZWxzZSB7CisJ
CQkJCQkJaW5zdHJbbGVuXSA9IGtleTsKKwkJCQkJCX0KKwkJCQkJCXBvcysrOworCQkJCQkJbGVu
Kys7CisJCQkJCQlpbnN0cltsZW5dID0gJ1wwJzsKKworCQkJCQkJaWYgKGlucHV0X3ggPT0gYm94
X3dpZHRoIC0gMSkgeworCQkJCQkJCXNob3dfeCsrOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlp
bnB1dF94Kys7CisJCQkJCQl9CisKKwkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsK
KwkJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykgeworCQkJCQkJCWlmICghaW5z
dHJbc2hvd194ICsgaV0pIHsKKwkJCQkJCQkJd2FkZGNoKGRpYWxvZywgJyAnKTsKKwkJCQkJCQkJ
YnJlYWs7CisJCQkJCQkJfQorCQkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3dfeCArIGld
KTsKKwkJCQkJCX0KKwkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7
CisJCQkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCQl9IGVsc2UKKwkJCQkJCWZsYXNoKCk7CS8q
IEFsYXJtIHVzZXIgYWJvdXQgb3ZlcmZsb3cgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJ
fQorCQl9CisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2UgJ08nOgorCQljYXNlICdvJzoKKwkJCWRl
bHdpbihkaWFsb2cpOworCQkJcmV0dXJuIDA7CisJCWNhc2UgJ0gnOgorCQljYXNlICdoJzoKKwkJ
CWRlbHdpbihkaWFsb2cpOworCQkJcmV0dXJuIDE7CisJCWNhc2UgS0VZX1VQOgorCQljYXNlIEtF
WV9MRUZUOgorCQkJc3dpdGNoIChidXR0b24pIHsKKwkJCWNhc2UgLTE6CisJCQkJYnV0dG9uID0g
MTsJLyogSW5kaWNhdGVzICJIZWxwIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9i
dXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDA6
CisJCQkJYnV0dG9uID0gLTE7CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8K
KwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJCQkJd21vdmUo
ZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsKKwkJCQl3cmVmcmVzaChkaWFsb2cpOwor
CQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCWJ1dHRvbiA9IDA7CS8qIEluZGljYXRlcyAiT0si
IGJ1dHRvbiBpcyBzZWxlY3RlZCAqLworCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQs
IHdpZHRoLCAwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFRBQjoKKwkJ
Y2FzZSBLRVlfRE9XTjoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlzd2l0Y2ggKGJ1dHRvbikgewor
CQkJY2FzZSAtMToKKwkJCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMg
c2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7
CisJCQkJYnJlYWs7CisJCQljYXNlIDA6CisJCQkJYnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJI
ZWxwIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVp
Z2h0LCB3aWR0aCwgMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIDE6CisJCQkJYnV0dG9uID0gLTE7
CS8qIEluZGljYXRlcyBpbnB1dCBib3ggaXMgc2VsZWN0ZWQgKi8KKwkJCQlwcmludF9idXR0b25z
KGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7CisJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94
X3ggKyBpbnB1dF94KTsKKwkJCQl3cmVmcmVzaChkaWFsb2cpOworCQkJCWJyZWFrOworCQkJfQor
CQkJYnJlYWs7CisJCWNhc2UgJyAnOgorCQljYXNlICdcbic6CisJCQlkZWx3aW4oZGlhbG9nKTsK
KwkJCXJldHVybiAoYnV0dG9uID09IC0xID8gMCA6IGJ1dHRvbik7CisJCWNhc2UgJ1gnOgorCQlj
YXNlICd4JzoKKwkJCWtleSA9IEtFWV9FU0M7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgor
CQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1JFU0la
RToKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJb25fa2V5X3Jlc2l6ZSgpOworCQkJZ290byBkb19y
ZXNpemU7CisJCX0KKwl9CisKKwlkZWx3aW4oZGlhbG9nKTsKKwlyZXR1cm4gS0VZX0VTQzsJCS8q
IEVTQyBwcmVzc2VkICovCit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cv
bWVudWJveC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGMyZjhhCi0tLSAvZGV2L251bGwKKysrIGIvc3Vw
cG9ydC9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYwpAQCAtMCwwICsxLDQyNCBAQAorLy8gU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisvKgorICogIG1lbnVib3guYyAtLSBpbXBs
ZW1lbnRzIHRoZSBtZW51IGJveAorICoKKyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAo
bGFtODM2QGNzLmN1aGsuaGspCisgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcg
Qlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcHdAY2Z3LmNvbSkKKyAqLworCisvKgorICogIENo
YW5nZXMgYnkgQ2xpZmZvcmQgV29sZiAoZ29kQGNsaWZmb3JkLmF0KQorICoKKyAqICBbIDE5OTgt
MDYtMTMgXQorICoKKyAqICAgICopICBBIGJ1Z2ZpeCBmb3IgdGhlIFBhZ2UtRG93biBwcm9ibGVt
CisgKgorICogICAgKikgIEZvcm1lcmx5IHdoZW4gSSB1c2VkIFBhZ2UgRG93biBhbmQgUGFnZSBV
cCwgdGhlIGN1cnNvciB3b3VsZCBiZSBzZXQKKyAqICAgICAgICB0byB0aGUgZmlyc3QgcG9zaXRp
b24gaW4gdGhlIG1lbnUgYm94LiAgTm93IGx4ZGlhbG9nIGlzIGEgYml0CisgKiAgICAgICAgc21h
cnRlciBhbmQgd29ya3MgbW9yZSBsaWtlIG90aGVyIG1lbnUgc3lzdGVtcyAoanVzdCBoYXZlIGEg
bG9vayBhdAorICogICAgICAgIGl0KS4KKyAqCisgKiAgICAqKSAgRm9ybWVybHkgaWYgSSBzZWxl
Y3RlZCBzb21ldGhpbmcgbXkgc2Nyb2xsaW5nIHdvdWxkIGJlIGJyb2tlbiBiZWNhdXNlCisgKiAg
ICAgICAgbHhkaWFsb2cgaXMgcmUtaW52b2tlZCBieSB0aGUgTWVudWNvbmZpZyBzaGVsbCBzY3Jp
cHQsIGNhbid0CisgKiAgICAgICAgcmVtZW1iZXIgdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9u
LCBhbmQganVzdCBzZXRzIGl0IHNvIHRoYXQgdGhlCisgKiAgICAgICAgY3Vyc29yIGlzIGF0IHRo
ZSBib3R0b20gb2YgdGhlIGJveC4gIE5vdyBpdCB3cml0ZXMgdGhlIHRlbXBvcmFyeSBmaWxlCisg
KiAgICAgICAgbHhkaWFsb2cuc2NybHRtcCB3aGljaCBjb250YWlucyB0aGlzIGluZm9ybWF0aW9u
LiBUaGUgZmlsZSBpcworICogICAgICAgIGRlbGV0ZWQgYnkgbHhkaWFsb2cgaWYgdGhlIHVzZXIg
bGVhdmVzIGEgc3VibWVudSBvciBlbnRlcnMgYSBuZXcKKyAqICAgICAgICBvbmUsIGJ1dCBpdCB3
b3VsZCBiZSBuaWNlIGlmIE1lbnVjb25maWcgY291bGQgbWFrZSBhbm90aGVyICJybSAtZiIKKyAq
ICAgICAgICBqdXN0IHRvIGJlIHN1cmUuICBKdXN0IHRyeSBpdCBvdXQgLSB5b3Ugd2lsbCByZWNv
Z25pc2UgYSBkaWZmZXJlbmNlIQorICoKKyAqICBbIDE5OTgtMDYtMTQgXQorICoKKyAqICAgICop
ICBOb3cgbHhkaWFsb2cgaXMgY3Jhc2gtc2FmZSBhZ2FpbnN0IGJyb2tlbiAibHhkaWFsb2cuc2Ny
bHRtcCIgZmlsZXMKKyAqICAgICAgICBhbmQgbWVudXMgY2hhbmdlIHRoZWlyIHNpemUgb24gdGhl
IGZseS4KKyAqCisgKiAgICAqKSAgSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBsYXN0IHNjcm9sbGlu
ZyBwb3NpdGlvbiBpcyBub3Qgc2F2ZWQgYnkKKyAqICAgICAgICBseGRpYWxvZywgaXQgc2V0cyB0
aGUgc2Nyb2xsaW5nIHNvIHRoYXQgdGhlIHNlbGVjdGVkIGl0ZW0gaXMgaW4gdGhlCisgKiAgICAg
ICAgbWlkZGxlIG9mIHRoZSBtZW51IGJveCwgbm90IGF0IHRoZSBib3R0b20uCisgKgorICogMDIg
SmFudWFyeSAxOTk5LCBNaWNoYWVsIEVsaXphYmV0aCBDaGFzdGFpbiAobWVjQHNob3V0Lm5ldCkK
KyAqIFJlc2V0ICdzY3JvbGwnIHRvIDAgaWYgdGhlIHZhbHVlIGZyb20gbHhkaWFsb2cuc2NybHRt
cCBpcyBib2d1cy4KKyAqIFRoaXMgZml4ZXMgYSBidWcgaW4gTWVudWNvbmZpZyB3aGVyZSB1c2lu
ZyAnICcgdG8gZGVzY2VuZCBpbnRvIG1lbnVzCisgKiB3b3VsZCBsZWF2ZSBtaXMtc3luY2hyb25p
emVkIGx4ZGlhbG9nLnNjcmx0bXAgZmlsZXMgbHlpbmcgYXJvdW5kLAorICogZnNjYW5mIHdvdWxk
IHJlYWQgaW4gJ3Njcm9sbCcsIGFuZCBldmVudHVhbGx5IHRoYXQgdmFsdWUgd291bGQgZ2V0IHVz
ZWQuCisgKi8KKworI2luY2x1ZGUgImRpYWxvZy5oIgorCitzdGF0aWMgaW50IG1lbnVfd2lkdGgs
IGl0ZW1feDsKKworLyoKKyAqIFByaW50IG1lbnUgaXRlbQorICovCitzdGF0aWMgdm9pZCBkb19w
cmludF9pdGVtKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqaXRlbSwgaW50IGxpbmVfeSwKKwkJ
CSAgaW50IHNlbGVjdGVkLCBpbnQgaG90a2V5KQoreworCWludCBqOworCWNoYXIgKm1lbnVfaXRl
bSA9IG1hbGxvYyhtZW51X3dpZHRoICsgMSk7CisKKwlzdHJuY3B5KG1lbnVfaXRlbSwgaXRlbSwg
bWVudV93aWR0aCAtIGl0ZW1feCk7CisJbWVudV9pdGVtW21lbnVfd2lkdGggLSBpdGVtX3hdID0g
J1wwJzsKKwlqID0gZmlyc3RfYWxwaGEobWVudV9pdGVtLCAiWXlObk1tSGgiKTsKKworCS8qIENs
ZWFyICdyZXNpZHVlJyBvZiBsYXN0IGl0ZW0gKi8KKwl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94
LmF0cik7CisJd21vdmUod2luLCBsaW5lX3ksIDApOworI2lmIE9MRF9OQ1VSU0VTCisJeworCQlp
bnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IG1lbnVfd2lkdGg7IGkrKykKKwkJCXdhZGRjaCh3aW4s
ICcgJyk7CisJfQorI2Vsc2UKKwl3Y2xydG9lb2wod2luKTsKKyNlbmRpZgorCXdhdHRyc2V0KHdp
biwgc2VsZWN0ZWQgPyBkbGcuaXRlbV9zZWxlY3RlZC5hdHIgOiBkbGcuaXRlbS5hdHIpOworCW12
d2FkZHN0cih3aW4sIGxpbmVfeSwgaXRlbV94LCBtZW51X2l0ZW0pOworCWlmIChob3RrZXkpIHsK
KwkJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy50YWdfa2V5X3NlbGVjdGVkLmF0cgorCQkJ
IDogZGxnLnRhZ19rZXkuYXRyKTsKKwkJbXZ3YWRkY2god2luLCBsaW5lX3ksIGl0ZW1feCArIGos
IG1lbnVfaXRlbVtqXSk7CisJfQorCWlmIChzZWxlY3RlZCkgeworCQl3bW92ZSh3aW4sIGxpbmVf
eSwgaXRlbV94ICsgMSk7CisJfQorCWZyZWUobWVudV9pdGVtKTsKKwl3cmVmcmVzaCh3aW4pOwor
fQorCisjZGVmaW5lIHByaW50X2l0ZW0oaW5kZXgsIGNob2ljZSwgc2VsZWN0ZWQpCQkJCVwKK2Rv
IHsJCQkJCQkJCQlcCisJaXRlbV9zZXQoaW5kZXgpOwkJCQkJCVwKKwlkb19wcmludF9pdGVtKG1l
bnUsIGl0ZW1fc3RyKCksIGNob2ljZSwgc2VsZWN0ZWQsICFpdGVtX2lzX3RhZygnOicpKTsgXAor
fSB3aGlsZSAoMCkKKworLyoKKyAqIFByaW50IHRoZSBzY3JvbGwgaW5kaWNhdG9ycy4KKyAqLwor
c3RhdGljIHZvaWQgcHJpbnRfYXJyb3dzKFdJTkRPVyAqIHdpbiwgaW50IGl0ZW1fbm8sIGludCBz
Y3JvbGwsIGludCB5LCBpbnQgeCwKKwkJCSBpbnQgaGVpZ2h0KQoreworCWludCBjdXJfeSwgY3Vy
X3g7CisKKwlnZXR5eCh3aW4sIGN1cl95LCBjdXJfeCk7CisKKwl3bW92ZSh3aW4sIHksIHgpOwor
CisJaWYgKHNjcm9sbCA+IDApIHsKKwkJd2F0dHJzZXQod2luLCBkbGcudWFycm93LmF0cik7CisJ
CXdhZGRjaCh3aW4sIEFDU19VQVJST1cpOworCQl3YWRkc3RyKHdpbiwgIigtKSIpOworCX0gZWxz
ZSB7CisJCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsKKwkJd2FkZGNoKHdpbiwgQUNT
X0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hM
SU5FKTsKKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsKKwl9CisKKwl5ID0geSArIGhlaWdodCAr
IDE7CisJd21vdmUod2luLCB5LCB4KTsKKwl3cmVmcmVzaCh3aW4pOworCisJaWYgKChoZWlnaHQg
PCBpdGVtX25vKSAmJiAoc2Nyb2xsICsgaGVpZ2h0IDwgaXRlbV9ubykpIHsKKwkJd2F0dHJzZXQo
d2luLCBkbGcuZGFycm93LmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19EQVJST1cpOworCQl3YWRk
c3RyKHdpbiwgIigrKSIpOworCX0gZWxzZSB7CisJCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3hf
Ym9yZGVyLmF0cik7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFD
U19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7CisJCXdhZGRjaCh3aW4sIEFDU19I
TElORSk7CisJfQorCisJd21vdmUod2luLCBjdXJfeSwgY3VyX3gpOworCXdyZWZyZXNoKHdpbik7
Cit9CisKKy8qCisgKiBEaXNwbGF5IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zLgorICovCitzdGF0
aWMgdm9pZCBwcmludF9idXR0b25zKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRo
LCBpbnQgc2VsZWN0ZWQpCit7CisJaW50IHggPSB3aWR0aCAvIDIgLSAyODsKKwlpbnQgeSA9IGhl
aWdodCAtIDI7CisKKwlwcmludF9idXR0b24od2luLCAiU2VsZWN0IiwgeSwgeCwgc2VsZWN0ZWQg
PT0gMCk7CisJcHJpbnRfYnV0dG9uKHdpbiwgIiBFeGl0ICIsIHksIHggKyAxMiwgc2VsZWN0ZWQg
PT0gMSk7CisJcHJpbnRfYnV0dG9uKHdpbiwgIiBIZWxwICIsIHksIHggKyAyNCwgc2VsZWN0ZWQg
PT0gMik7CisJcHJpbnRfYnV0dG9uKHdpbiwgIiBTYXZlICIsIHksIHggKyAzNiwgc2VsZWN0ZWQg
PT0gMyk7CisJcHJpbnRfYnV0dG9uKHdpbiwgIiBMb2FkICIsIHksIHggKyA0OCwgc2VsZWN0ZWQg
PT0gNCk7CisKKwl3bW92ZSh3aW4sIHksIHggKyAxICsgMTIgKiBzZWxlY3RlZCk7CisJd3JlZnJl
c2god2luKTsKK30KKworLyogc2Nyb2xsIHVwIG4gbGluZXMgKG4gbWF5IGJlIG5lZ2F0aXZlKSAq
Lworc3RhdGljIHZvaWQgZG9fc2Nyb2xsKFdJTkRPVyAqd2luLCBpbnQgKnNjcm9sbCwgaW50IG4p
Cit7CisJLyogU2Nyb2xsIG1lbnUgdXAgKi8KKwlzY3JvbGxvayh3aW4sIFRSVUUpOworCXdzY3Js
KHdpbiwgbik7CisJc2Nyb2xsb2sod2luLCBGQUxTRSk7CisJKnNjcm9sbCA9ICpzY3JvbGwgKyBu
OworCXdyZWZyZXNoKHdpbik7Cit9CisKKy8qCisgKiBEaXNwbGF5IGEgbWVudSBmb3IgY2hvb3Np
bmcgYW1vbmcgYSBudW1iZXIgb2Ygb3B0aW9ucworICovCitpbnQgZGlhbG9nX21lbnUoY29uc3Qg
Y2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwKKwkJY29uc3Qgdm9pZCAqc2VsZWN0ZWQs
IGludCAqc19zY3JvbGwpCit7CisJaW50IGksIGosIHgsIHksIGJveF94LCBib3hfeTsKKwlpbnQg
aGVpZ2h0LCB3aWR0aCwgbWVudV9oZWlnaHQ7CisJaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAsIHNj
cm9sbCA9IDAsIGNob2ljZSA9IDA7CisJaW50IGZpcnN0X2l0ZW0gPSAgMCwgbWF4X2Nob2ljZTsK
KwlXSU5ET1cgKmRpYWxvZywgKm1lbnU7CisKK2RvX3Jlc2l6ZToKKwloZWlnaHQgPSBnZXRtYXh5
KHN0ZHNjcik7CisJd2lkdGggPSBnZXRtYXh4KHN0ZHNjcik7CisJaWYgKGhlaWdodCA8IE1FTlVC
T1hfSEVJR1RIX01JTiB8fCB3aWR0aCA8IE1FTlVCT1hfV0lEVEhfTUlOKQorCQlyZXR1cm4gLUVS
UkRJU1BMQVlUT09TTUFMTDsKKworCWhlaWdodCAtPSA0OworCXdpZHRoICAtPSA1OworCW1lbnVf
aGVpZ2h0ID0gaGVpZ2h0IC0gMTA7CisKKwltYXhfY2hvaWNlID0gTUlOKG1lbnVfaGVpZ2h0LCBp
dGVtX2NvdW50KCkpOworCisJLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9
IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0aCkgLyAyOworCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0g
aGVpZ2h0KSAvIDI7CisKKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgp
OworCisJZGlhbG9nID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFs
b2csIFRSVUUpOworCisJZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLAorCQkg
ZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsKKwl3YXR0cnNldChkaWFsb2csIGRsZy5i
b3JkZXIuYXRyKTsKKwltdndhZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsK
Kwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBpKyspCisJCXdhZGRjaChkaWFsb2csIEFDU19I
TElORSk7CisJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7CisJd2JrZ2RzZXQoZGlh
bG9nLCBkbGcuZGlhbG9nLmF0ciAmIEFfQ09MT1IpOworCXdhZGRjaChkaWFsb2csIEFDU19SVEVF
KTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsKKworCXdhdHRyc2V0KGRp
YWxvZywgZGxnLmRpYWxvZy5hdHIpOworCXByaW50X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3
aWR0aCAtIDIsIDEsIDMpOworCisJbWVudV93aWR0aCA9IHdpZHRoIC0gNjsKKwlib3hfeSA9IGhl
aWdodCAtIG1lbnVfaGVpZ2h0IC0gNTsKKwlib3hfeCA9ICh3aWR0aCAtIG1lbnVfd2lkdGgpIC8g
MiAtIDE7CisKKwkvKiBjcmVhdGUgbmV3IHdpbmRvdyBmb3IgdGhlIG1lbnUgKi8KKwltZW51ID0g
c3Vid2luKGRpYWxvZywgbWVudV9oZWlnaHQsIG1lbnVfd2lkdGgsCisJCSAgICAgIHkgKyBib3hf
eSArIDEsIHggKyBib3hfeCArIDEpOworCWtleXBhZChtZW51LCBUUlVFKTsKKworCS8qIGRyYXcg
YSBib3ggYXJvdW5kIHRoZSBtZW51IGl0ZW1zICovCisJZHJhd19ib3goZGlhbG9nLCBib3hfeSwg
Ym94X3gsIG1lbnVfaGVpZ2h0ICsgMiwgbWVudV93aWR0aCArIDIsCisJCSBkbGcubWVudWJveF9i
b3JkZXIuYXRyLCBkbGcubWVudWJveC5hdHIpOworCisJaWYgKG1lbnVfd2lkdGggPj0gODApCisJ
CWl0ZW1feCA9IChtZW51X3dpZHRoIC0gNzApIC8gMjsKKwllbHNlCisJCWl0ZW1feCA9IDQ7CisK
KwkvKiBTZXQgY2hvaWNlIHRvIGRlZmF1bHQgaXRlbSAqLworCWl0ZW1fZm9yZWFjaCgpCisJCWlm
IChzZWxlY3RlZCAmJiAoc2VsZWN0ZWQgPT0gaXRlbV9kYXRhKCkpKQorCQkJY2hvaWNlID0gaXRl
bV9uKCk7CisJLyogZ2V0IHRoZSBzYXZlZCBzY3JvbGwgaW5mbyAqLworCXNjcm9sbCA9ICpzX3Nj
cm9sbDsKKwlpZiAoKHNjcm9sbCA8PSBjaG9pY2UpICYmIChzY3JvbGwgKyBtYXhfY2hvaWNlID4g
Y2hvaWNlKSAmJgorCSAgIChzY3JvbGwgPj0gMCkgJiYgKHNjcm9sbCArIG1heF9jaG9pY2UgPD0g
aXRlbV9jb3VudCgpKSkgeworCQlmaXJzdF9pdGVtID0gc2Nyb2xsOworCQljaG9pY2UgPSBjaG9p
Y2UgLSBzY3JvbGw7CisJfSBlbHNlIHsKKwkJc2Nyb2xsID0gMDsKKwl9CisJaWYgKChjaG9pY2Ug
Pj0gbWF4X2Nob2ljZSkpIHsKKwkJaWYgKGNob2ljZSA+PSBpdGVtX2NvdW50KCkgLSBtYXhfY2hv
aWNlIC8gMikKKwkJCXNjcm9sbCA9IGZpcnN0X2l0ZW0gPSBpdGVtX2NvdW50KCkgLSBtYXhfY2hv
aWNlOworCQllbHNlCisJCQlzY3JvbGwgPSBmaXJzdF9pdGVtID0gY2hvaWNlIC0gbWF4X2Nob2lj
ZSAvIDI7CisJCWNob2ljZSA9IGNob2ljZSAtIHNjcm9sbDsKKwl9CisKKwkvKiBQcmludCB0aGUg
bWVudSAqLworCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsKKwkJcHJpbnRfaXRl
bShmaXJzdF9pdGVtICsgaSwgaSwgaSA9PSBjaG9pY2UpOworCX0KKworCXdub3V0cmVmcmVzaCht
ZW51KTsKKworCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fY291bnQoKSwgc2Nyb2xsLAorCQkg
ICAgIGJveF95LCBib3hfeCArIGl0ZW1feCArIDEsIG1lbnVfaGVpZ2h0KTsKKworCXByaW50X2J1
dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwl3bW92ZShtZW51LCBjaG9pY2UsIGl0
ZW1feCArIDEpOworCXdyZWZyZXNoKG1lbnUpOworCisJd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7
CisJCWtleSA9IHdnZXRjaChtZW51KTsKKworCQlpZiAoa2V5IDwgMjU2ICYmIGlzYWxwaGEoa2V5
KSkKKwkJCWtleSA9IHRvbG93ZXIoa2V5KTsKKworCQlpZiAoc3RyY2hyKCJ5bm1oIiwga2V5KSkK
KwkJCWkgPSBtYXhfY2hvaWNlOworCQllbHNlIHsKKwkJCWZvciAoaSA9IGNob2ljZSArIDE7IGkg
PCBtYXhfY2hvaWNlOyBpKyspIHsKKwkJCQlpdGVtX3NldChzY3JvbGwgKyBpKTsKKwkJCQlqID0g
Zmlyc3RfYWxwaGEoaXRlbV9zdHIoKSwgIll5Tm5NbUhoIik7CisJCQkJaWYgKGtleSA9PSB0b2xv
d2VyKGl0ZW1fc3RyKClbal0pKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpID09IG1heF9j
aG9pY2UpCisJCQkJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgeworCQkJCQlpdGVt
X3NldChzY3JvbGwgKyBpKTsKKwkJCQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1fc3RyKCksICJZeU5u
TW1IaCIpOworCQkJCQlpZiAoa2V5ID09IHRvbG93ZXIoaXRlbV9zdHIoKVtqXSkpCisJCQkJCQli
cmVhazsKKwkJCQl9CisJCX0KKworCQlpZiAoaXRlbV9jb3VudCgpICE9IDAgJiYKKwkJICAgIChp
IDwgbWF4X2Nob2ljZSB8fAorCQkgICAgIGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dO
IHx8CisJCSAgICAga2V5ID09ICctJyB8fCBrZXkgPT0gJysnIHx8CisJCSAgICAga2V5ID09IEtF
WV9QUEFHRSB8fCBrZXkgPT0gS0VZX05QQUdFKSkgeworCQkJLyogUmVtb3ZlIGhpZ2hsaWd0IG9m
IGN1cnJlbnQgaXRlbSAqLworCQkJcHJpbnRfaXRlbShzY3JvbGwgKyBjaG9pY2UsIGNob2ljZSwg
RkFMU0UpOworCisJCQlpZiAoa2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gJy0nKSB7CisJCQkJaWYg
KGNob2ljZSA8IDIgJiYgc2Nyb2xsKSB7CisJCQkJCS8qIFNjcm9sbCBtZW51IGRvd24gKi8KKwkJ
CQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIC0xKTsKKworCQkJCQlwcmludF9pdGVtKHNjcm9s
bCwgMCwgRkFMU0UpOworCQkJCX0gZWxzZQorCQkJCQljaG9pY2UgPSBNQVgoY2hvaWNlIC0gMSwg
MCk7CisKKwkJCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9ET1dOIHx8IGtleSA9PSAnKycpIHsKKwkJ
CQlwcmludF9pdGVtKHNjcm9sbCtjaG9pY2UsIGNob2ljZSwgRkFMU0UpOworCisJCQkJaWYgKChj
aG9pY2UgPiBtYXhfY2hvaWNlIC0gMykgJiYKKwkJCQkgICAgKHNjcm9sbCArIG1heF9jaG9pY2Ug
PCBpdGVtX2NvdW50KCkpKSB7CisJCQkJCS8qIFNjcm9sbCBtZW51IHVwICovCisJCQkJCWRvX3Nj
cm9sbChtZW51LCAmc2Nyb2xsLCAxKTsKKworCQkJCQlwcmludF9pdGVtKHNjcm9sbCttYXhfY2hv
aWNlIC0gMSwKKwkJCQkJCSAgIG1heF9jaG9pY2UgLSAxLCBGQUxTRSk7CisJCQkJfSBlbHNlCisJ
CQkJCWNob2ljZSA9IE1JTihjaG9pY2UgKyAxLCBtYXhfY2hvaWNlIC0gMSk7CisKKwkJCX0gZWxz
ZSBpZiAoa2V5ID09IEtFWV9QUEFHRSkgeworCQkJCXNjcm9sbG9rKG1lbnUsIFRSVUUpOworCQkJ
CWZvciAoaSA9IDA7IChpIDwgbWF4X2Nob2ljZSk7IGkrKykgeworCQkJCQlpZiAoc2Nyb2xsID4g
MCkgeworCQkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIC0xKTsKKwkJCQkJCXByaW50X2l0
ZW0oc2Nyb2xsLCAwLCBGQUxTRSk7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoY2hvaWNlID4g
MCkKKwkJCQkJCQljaG9pY2UtLTsKKwkJCQkJfQorCQkJCX0KKworCQkJfSBlbHNlIGlmIChrZXkg
PT0gS0VZX05QQUdFKSB7CisJCQkJZm9yIChpID0gMDsgKGkgPCBtYXhfY2hvaWNlKTsgaSsrKSB7
CisJCQkJCWlmIChzY3JvbGwgKyBtYXhfY2hvaWNlIDwgaXRlbV9jb3VudCgpKSB7CisJCQkJCQlk
b19zY3JvbGwobWVudSwgJnNjcm9sbCwgMSk7CisJCQkJCQlwcmludF9pdGVtKHNjcm9sbCttYXhf
Y2hvaWNlLTEsCisJCQkJCQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsKKwkJCQkJfSBlbHNl
IHsKKwkJCQkJCWlmIChjaG9pY2UgKyAxIDwgbWF4X2Nob2ljZSkKKwkJCQkJCQljaG9pY2UrKzsK
KwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZQorCQkJCWNob2ljZSA9IGk7CisKKwkJCXByaW50X2l0
ZW0oc2Nyb2xsICsgY2hvaWNlLCBjaG9pY2UsIFRSVUUpOworCisJCQlwcmludF9hcnJvd3MoZGlh
bG9nLCBpdGVtX2NvdW50KCksIHNjcm9sbCwKKwkJCQkgICAgIGJveF95LCBib3hfeCArIGl0ZW1f
eCArIDEsIG1lbnVfaGVpZ2h0KTsKKworCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7CisJCQl3cmVm
cmVzaChtZW51KTsKKworCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNz
ICovCisJCX0KKworCQlzd2l0Y2ggKGtleSkgeworCQljYXNlIEtFWV9MRUZUOgorCQljYXNlIFRB
QjoKKwkJY2FzZSBLRVlfUklHSFQ6CisJCQlidXR0b24gPSAoKGtleSA9PSBLRVlfTEVGVCA/IC0t
YnV0dG9uIDogKytidXR0b24pIDwgMCkKKwkJCSAgICA/IDQgOiAoYnV0dG9uID4gNCA/IDAgOiBi
dXR0b24pOworCisJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgYnV0dG9u
KTsKKwkJCXdyZWZyZXNoKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgJyAnOgorCQljYXNlICdz
JzoKKwkJY2FzZSAneSc6CisJCWNhc2UgJ24nOgorCQljYXNlICdtJzoKKwkJY2FzZSAnLyc6CisJ
CWNhc2UgJ2gnOgorCQljYXNlICc/JzoKKwkJY2FzZSAneic6CisJCWNhc2UgJ1xuJzoKKwkJCS8q
IHNhdmUgc2Nyb2xsIGluZm8gKi8KKwkJCSpzX3Njcm9sbCA9IHNjcm9sbDsKKwkJCWRlbHdpbiht
ZW51KTsKKwkJCWRlbHdpbihkaWFsb2cpOworCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsK
KwkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOworCQkJc3dpdGNoIChrZXkpIHsKKwkJCWNhc2UgJ2gn
OgorCQkJY2FzZSAnPyc6CisJCQkJcmV0dXJuIDI7CisJCQljYXNlICdzJzoKKwkJCWNhc2UgJ3kn
OgorCQkJCXJldHVybiA1OworCQkJY2FzZSAnbic6CisJCQkJcmV0dXJuIDY7CisJCQljYXNlICdt
JzoKKwkJCQlyZXR1cm4gNzsKKwkJCWNhc2UgJyAnOgorCQkJCXJldHVybiA4OworCQkJY2FzZSAn
Lyc6CisJCQkJcmV0dXJuIDk7CisJCQljYXNlICd6JzoKKwkJCQlyZXR1cm4gMTA7CisJCQljYXNl
ICdcbic6CisJCQkJcmV0dXJuIGJ1dHRvbjsKKwkJCX0KKwkJCXJldHVybiAwOworCQljYXNlICdl
JzoKKwkJY2FzZSAneCc6CisJCQlrZXkgPSBLRVlfRVNDOworCQkJYnJlYWs7CisJCWNhc2UgS0VZ
X0VTQzoKKwkJCWtleSA9IG9uX2tleV9lc2MobWVudSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlf
UkVTSVpFOgorCQkJb25fa2V5X3Jlc2l6ZSgpOworCQkJZGVsd2luKG1lbnUpOworCQkJZGVsd2lu
KGRpYWxvZyk7CisJCQlnb3RvIGRvX3Jlc2l6ZTsKKwkJfQorCX0KKwlkZWx3aW4obWVudSk7CisJ
ZGVsd2luKGRpYWxvZyk7CisJcmV0dXJuIGtleTsJCS8qIEVTQyBwcmVzc2VkICovCit9CmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdGV4dGJveC5jIGIvc3VwcG9ydC9rY29u
ZmlnL2x4ZGlhbG9nL3RleHRib3guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40ZTMzOWIxCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3Rl
eHRib3guYwpAQCAtMCwwICsxLDM5NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjArCisvKgorICogIHRleHRib3guYyAtLSBpbXBsZW1lbnRzIHRoZSB0ZXh0IGJveAorICoK
KyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspCisgKiAg
TU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9h
ZGNhcEBjZncuY29tKQorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworc3RhdGljIHZvaWQg
YmFja19saW5lcyhpbnQgbik7CitzdGF0aWMgdm9pZCBwcmludF9wYWdlKFdJTkRPVyAqd2luLCBp
bnQgaGVpZ2h0LCBpbnQgd2lkdGgsIHVwZGF0ZV90ZXh0X2ZuCisJCSAgICAgICB1cGRhdGVfdGV4
dCwgdm9pZCAqZGF0YSk7CitzdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqd2luLCBpbnQg
cm93LCBpbnQgd2lkdGgpOworc3RhdGljIGNoYXIgKmdldF9saW5lKHZvaWQpOworc3RhdGljIHZv
aWQgcHJpbnRfcG9zaXRpb24oV0lORE9XICogd2luKTsKKworc3RhdGljIGludCBoc2Nyb2xsOwor
c3RhdGljIGludCBiZWdpbl9yZWFjaGVkLCBlbmRfcmVhY2hlZCwgcGFnZV9sZW5ndGg7CitzdGF0
aWMgY2hhciAqYnVmOworc3RhdGljIGNoYXIgKnBhZ2U7CisKKy8qCisgKiByZWZyZXNoIHdpbmRv
dyBjb250ZW50CisgKi8KK3N0YXRpYyB2b2lkIHJlZnJlc2hfdGV4dF9ib3goV0lORE9XICpkaWFs
b2csIFdJTkRPVyAqYm94LCBpbnQgYm94aCwgaW50IGJveHcsCisJCQkgICAgIGludCBjdXJfeSwg
aW50IGN1cl94LCB1cGRhdGVfdGV4dF9mbiB1cGRhdGVfdGV4dCwKKwkJCSAgICAgdm9pZCAqZGF0
YSkKK3sKKwlwcmludF9wYWdlKGJveCwgYm94aCwgYm94dywgdXBkYXRlX3RleHQsIGRhdGEpOwor
CXByaW50X3Bvc2l0aW9uKGRpYWxvZyk7CisJd21vdmUoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkv
KiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLworCXdyZWZyZXNoKGRpYWxvZyk7Cit9CisKKwor
LyoKKyAqIERpc3BsYXkgdGV4dCBmcm9tIGEgZmlsZSBpbiBhIGRpYWxvZyBib3guCisgKgorICog
a2V5cyBpcyBhIG51bGwtdGVybWluYXRlZCBhcnJheQorICogdXBkYXRlX3RleHQoKSBtYXkgbm90
IGFkZCBvciByZW1vdmUgYW55ICdcbicgb3IgJ1wwJyBpbiB0YnVmCisgKi8KK2ludCBkaWFsb2df
dGV4dGJveChjb25zdCBjaGFyICp0aXRsZSwgY2hhciAqdGJ1ZiwgaW50IGluaXRpYWxfaGVpZ2h0
LAorCQkgICBpbnQgaW5pdGlhbF93aWR0aCwgaW50ICprZXlzLCBpbnQgKl92c2Nyb2xsLCBpbnQg
Kl9oc2Nyb2xsLAorCQkgICB1cGRhdGVfdGV4dF9mbiB1cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkK
K3sKKwlpbnQgaSwgeCwgeSwgY3VyX3gsIGN1cl95LCBrZXkgPSAwOworCWludCBoZWlnaHQsIHdp
ZHRoLCBib3hoLCBib3h3OworCVdJTkRPVyAqZGlhbG9nLCAqYm94OworCWJvb2wgZG9uZSA9IGZh
bHNlOworCisJYmVnaW5fcmVhY2hlZCA9IDE7CisJZW5kX3JlYWNoZWQgPSAwOworCXBhZ2VfbGVu
Z3RoID0gMDsKKwloc2Nyb2xsID0gMDsKKwlidWYgPSB0YnVmOworCXBhZ2UgPSBidWY7CS8qIHBh
Z2UgaXMgcG9pbnRlciB0byBzdGFydCBvZiBwYWdlIHRvIGJlIGRpc3BsYXllZCAqLworCisJaWYg
KF92c2Nyb2xsICYmICpfdnNjcm9sbCkgeworCQliZWdpbl9yZWFjaGVkID0gMDsKKworCQlmb3Ig
KGkgPSAwOyBpIDwgKl92c2Nyb2xsOyBpKyspCisJCQlnZXRfbGluZSgpOworCX0KKwlpZiAoX2hz
Y3JvbGwpCisJCWhzY3JvbGwgPSAqX2hzY3JvbGw7CisKK2RvX3Jlc2l6ZToKKwlnZXRtYXh5eChz
dGRzY3IsIGhlaWdodCwgd2lkdGgpOworCWlmIChoZWlnaHQgPCBURVhUQk9YX0hFSUdUSF9NSU4g
fHwgd2lkdGggPCBURVhUQk9YX1dJRFRIX01JTikKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01B
TEw7CisJaWYgKGluaXRpYWxfaGVpZ2h0ICE9IDApCisJCWhlaWdodCA9IGluaXRpYWxfaGVpZ2h0
OworCWVsc2UKKwkJaWYgKGhlaWdodCA+IDQpCisJCQloZWlnaHQgLT0gNDsKKwkJZWxzZQorCQkJ
aGVpZ2h0ID0gMDsKKwlpZiAoaW5pdGlhbF93aWR0aCAhPSAwKQorCQl3aWR0aCA9IGluaXRpYWxf
d2lkdGg7CisJZWxzZQorCQlpZiAod2lkdGggPiA1KQorCQkJd2lkdGggLT0gNTsKKwkJZWxzZQor
CQkJd2lkdGggPSAwOworCisJLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovCisJeCA9
IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0aCkgLyAyOworCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0g
aGVpZ2h0KSAvIDI7CisKKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgp
OworCisJZGlhbG9nID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOworCWtleXBhZChkaWFs
b2csIFRSVUUpOworCisJLyogQ3JlYXRlIHdpbmRvdyBmb3IgYm94IHJlZ2lvbiwgdXNlZCBmb3Ig
c2Nyb2xsaW5nIHRleHQgKi8KKwlib3hoID0gaGVpZ2h0IC0gNDsKKwlib3h3ID0gd2lkdGggLSAy
OworCWJveCA9IHN1YndpbihkaWFsb2csIGJveGgsIGJveHcsIHkgKyAxLCB4ICsgMSk7CisJd2F0
dHJzZXQoYm94LCBkbGcuZGlhbG9nLmF0cik7CisJd2JrZ2RzZXQoYm94LCBkbGcuZGlhbG9nLmF0
ciAmIEFfQ09MT1IpOworCisJa2V5cGFkKGJveCwgVFJVRSk7CisKKwkvKiByZWdpc3RlciB0aGUg
bmV3IHdpbmRvdywgYWxvbmcgd2l0aCBpdHMgYm9yZGVycyAqLworCWRyYXdfYm94KGRpYWxvZywg
MCwgMCwgaGVpZ2h0LCB3aWR0aCwKKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7
CisKKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsKKwltdndhZGRjaChkaWFsb2cs
IGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsKKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBp
KyspCisJCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7CisJd2F0dHJzZXQoZGlhbG9nLCBkbGcu
ZGlhbG9nLmF0cik7CisJd2JrZ2RzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0ciAmIEFfQ09MT1Ip
OworCXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsKKworCXByaW50X3RpdGxlKGRpYWxvZywgdGl0
bGUsIHdpZHRoKTsKKworCXByaW50X2J1dHRvbihkaWFsb2csICIgRXhpdCAiLCBoZWlnaHQgLSAy
LCB3aWR0aCAvIDIgLSA0LCBUUlVFKTsKKwl3bm91dHJlZnJlc2goZGlhbG9nKTsKKwlnZXR5eChk
aWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFNhdmUgY3Vyc29yIHBvc2l0aW9uICovCisKKwkvKiBQ
cmludCBmaXJzdCBwYWdlIG9mIHRleHQgKi8KKwlhdHRyX2NsZWFyKGJveCwgYm94aCwgYm94dywg
ZGxnLmRpYWxvZy5hdHIpOworCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJv
eHcsIGN1cl95LCBjdXJfeCwgdXBkYXRlX3RleHQsCisJCQkgZGF0YSk7CisKKwl3aGlsZSAoIWRv
bmUpIHsKKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7CisJCXN3aXRjaCAoa2V5KSB7CisJCWNhc2Ug
J0UnOgkvKiBFeGl0ICovCisJCWNhc2UgJ2UnOgorCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJ
CWNhc2UgJ3EnOgorCQljYXNlICdcbic6CisJCQlkb25lID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlj
YXNlICdnJzoJLyogRmlyc3QgcGFnZSAqLworCQljYXNlIEtFWV9IT01FOgorCQkJaWYgKCFiZWdp
bl9yZWFjaGVkKSB7CisJCQkJYmVnaW5fcmVhY2hlZCA9IDE7CisJCQkJcGFnZSA9IGJ1ZjsKKwkJ
CQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LAorCQkJCQkJIGN1cl95
LCBjdXJfeCwgdXBkYXRlX3RleHQsCisJCQkJCQkgZGF0YSk7CisJCQl9CisJCQlicmVhazsKKwkJ
Y2FzZSAnRyc6CS8qIExhc3QgcGFnZSAqLworCQljYXNlIEtFWV9FTkQ6CisKKwkJCWVuZF9yZWFj
aGVkID0gMTsKKwkJCS8qIHBvaW50IHRvIGxhc3QgY2hhciBpbiBidWYgKi8KKwkJCXBhZ2UgPSBi
dWYgKyBzdHJsZW4oYnVmKTsKKwkJCWJhY2tfbGluZXMoYm94aCk7CisJCQlyZWZyZXNoX3RleHRf
Ym94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwKKwkJCQkJIGN1cl94LCB1cGRhdGVf
dGV4dCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSAnSyc6CS8qIFByZXZpb3VzIGxpbmUgKi8K
KwkJY2FzZSAnayc6CisJCWNhc2UgS0VZX1VQOgorCQkJaWYgKGJlZ2luX3JlYWNoZWQpCisJCQkJ
YnJlYWs7CisKKwkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGggKyAxKTsKKwkJCXJlZnJlc2hfdGV4
dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gsIHVwZGF0
ZV90ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICdCJzoJLyogUHJldmlvdXMgcGFnZSAq
LworCQljYXNlICdiJzoKKwkJY2FzZSAndSc6CisJCWNhc2UgS0VZX1BQQUdFOgorCQkJaWYgKGJl
Z2luX3JlYWNoZWQpCisJCQkJYnJlYWs7CisJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoICsgYm94
aCk7CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwK
KwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSAnSic6
CS8qIE5leHQgbGluZSAqLworCQljYXNlICdqJzoKKwkJY2FzZSBLRVlfRE9XTjoKKwkJCWlmIChl
bmRfcmVhY2hlZCkKKwkJCQlicmVhazsKKworCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCAtIDEp
OworCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksCisJ
CQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX05Q
QUdFOgkvKiBOZXh0IHBhZ2UgKi8KKwkJY2FzZSAnICc6CisJCWNhc2UgJ2QnOgorCQkJaWYgKGVu
ZF9yZWFjaGVkKQorCQkJCWJyZWFrOworCisJCQliZWdpbl9yZWFjaGVkID0gMDsKKwkJCXJlZnJl
c2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LAorCQkJCQkgY3VyX3gs
IHVwZGF0ZV90ZXh0LCBkYXRhKTsKKwkJCWJyZWFrOworCQljYXNlICcwJzoJLyogQmVnaW5uaW5n
IG9mIGxpbmUgKi8KKwkJY2FzZSAnSCc6CS8qIFNjcm9sbCBsZWZ0ICovCisJCWNhc2UgJ2gnOgor
CQljYXNlIEtFWV9MRUZUOgorCQkJaWYgKGhzY3JvbGwgPD0gMCkKKwkJCQlicmVhazsKKworCQkJ
aWYgKGtleSA9PSAnMCcpCisJCQkJaHNjcm9sbCA9IDA7CisJCQllbHNlCisJCQkJaHNjcm9sbC0t
OworCQkJLyogUmVwcmludCBjdXJyZW50IHBhZ2UgdG8gc2Nyb2xsIGhvcml6b250YWxseSAqLwor
CQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCk7CisJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywg
Ym94LCBib3hoLCBib3h3LCBjdXJfeSwKKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7
CisJCQlicmVhazsKKwkJY2FzZSAnTCc6CS8qIFNjcm9sbCByaWdodCAqLworCQljYXNlICdsJzoK
KwkJY2FzZSBLRVlfUklHSFQ6CisJCQlpZiAoaHNjcm9sbCA+PSBNQVhfTEVOKQorCQkJCWJyZWFr
OworCQkJaHNjcm9sbCsrOworCQkJLyogUmVwcmludCBjdXJyZW50IHBhZ2UgdG8gc2Nyb2xsIGhv
cml6b250YWxseSAqLworCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCk7CisJCQlyZWZyZXNoX3Rl
eHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwKKwkJCQkJIGN1cl94LCB1cGRh
dGVfdGV4dCwgZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJaWYgKG9uX2tl
eV9lc2MoZGlhbG9nKSA9PSBLRVlfRVNDKQorCQkJCWRvbmUgPSB0cnVlOworCQkJYnJlYWs7CisJ
CWNhc2UgS0VZX1JFU0laRToKKwkJCWJhY2tfbGluZXMoaGVpZ2h0KTsKKwkJCWRlbHdpbihib3gp
OworCQkJZGVsd2luKGRpYWxvZyk7CisJCQlvbl9rZXlfcmVzaXplKCk7CisJCQlnb3RvIGRvX3Jl
c2l6ZTsKKwkJZGVmYXVsdDoKKwkJCWZvciAoaSA9IDA7IGtleXNbaV07IGkrKykgeworCQkJCWlm
IChrZXkgPT0ga2V5c1tpXSkgeworCQkJCQlkb25lID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJ
fQorCQkJfQorCQl9CisJfQorCWRlbHdpbihib3gpOworCWRlbHdpbihkaWFsb2cpOworCWlmIChf
dnNjcm9sbCkgeworCQljb25zdCBjaGFyICpzOworCisJCXMgPSBidWY7CisJCSpfdnNjcm9sbCA9
IDA7CisJCWJhY2tfbGluZXMocGFnZV9sZW5ndGgpOworCQl3aGlsZSAocyA8IHBhZ2UgJiYgKHMg
PSBzdHJjaHIocywgJ1xuJykpKSB7CisJCQkoKl92c2Nyb2xsKSsrOworCQkJcysrOworCQl9CisJ
fQorCWlmIChfaHNjcm9sbCkKKwkJKl9oc2Nyb2xsID0gaHNjcm9sbDsKKwlyZXR1cm4ga2V5Owor
fQorCisvKgorICogR28gYmFjayAnbicgbGluZXMgaW4gdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190
ZXh0Ym94KCkuCisgKiAncGFnZScgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBkZXNp
cmVkIGxpbmUgaW4gJ2J1ZicuCisgKi8KK3N0YXRpYyB2b2lkIGJhY2tfbGluZXMoaW50IG4pCit7
CisJaW50IGk7CisKKwliZWdpbl9yZWFjaGVkID0gMDsKKwkvKiBHbyBiYWNrICduJyBsaW5lcyAq
LworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJaWYgKCpwYWdlID09ICdcMCcpIHsKKwkJ
CWlmIChlbmRfcmVhY2hlZCkgeworCQkJCWVuZF9yZWFjaGVkID0gMDsKKwkJCQljb250aW51ZTsK
KwkJCX0KKwkJfQorCQlpZiAocGFnZSA9PSBidWYpIHsKKwkJCWJlZ2luX3JlYWNoZWQgPSAxOwor
CQkJcmV0dXJuOworCQl9CisJCXBhZ2UtLTsKKwkJZG8geworCQkJaWYgKHBhZ2UgPT0gYnVmKSB7
CisJCQkJYmVnaW5fcmVhY2hlZCA9IDE7CisJCQkJcmV0dXJuOworCQkJfQorCQkJcGFnZS0tOwor
CQl9IHdoaWxlICgqcGFnZSAhPSAnXG4nKTsKKwkJcGFnZSsrOworCX0KK30KKworLyoKKyAqIFBy
aW50IGEgbmV3IHBhZ2Ugb2YgdGV4dC4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5E
T1cgKndpbiwgaW50IGhlaWdodCwgaW50IHdpZHRoLCB1cGRhdGVfdGV4dF9mbgorCQkgICAgICAg
dXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpCit7CisJaW50IGksIHBhc3NlZF9lbmQgPSAwOworCisJ
aWYgKHVwZGF0ZV90ZXh0KSB7CisJCWNoYXIgKmVuZDsKKworCQlmb3IgKGkgPSAwOyBpIDwgaGVp
Z2h0OyBpKyspCisJCQlnZXRfbGluZSgpOworCQllbmQgPSBwYWdlOworCQliYWNrX2xpbmVzKGhl
aWdodCk7CisJCXVwZGF0ZV90ZXh0KGJ1ZiwgcGFnZSAtIGJ1ZiwgZW5kIC0gYnVmLCBkYXRhKTsK
Kwl9CisKKwlwYWdlX2xlbmd0aCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7
CisJCXByaW50X2xpbmUod2luLCBpLCB3aWR0aCk7CisJCWlmICghcGFzc2VkX2VuZCkKKwkJCXBh
Z2VfbGVuZ3RoKys7CisJCWlmIChlbmRfcmVhY2hlZCAmJiAhcGFzc2VkX2VuZCkKKwkJCXBhc3Nl
ZF9lbmQgPSAxOworCX0KKwl3bm91dHJlZnJlc2god2luKTsKK30KKworLyoKKyAqIFByaW50IGEg
bmV3IGxpbmUgb2YgdGV4dC4KKyAqLworc3RhdGljIHZvaWQgcHJpbnRfbGluZShXSU5ET1cgKiB3
aW4sIGludCByb3csIGludCB3aWR0aCkKK3sKKwljaGFyICpsaW5lOworCisJbGluZSA9IGdldF9s
aW5lKCk7CisJbGluZSArPSBNSU4oc3RybGVuKGxpbmUpLCBoc2Nyb2xsKTsJLyogU2Nyb2xsIGhv
cml6b250YWxseSAqLworCXdtb3ZlKHdpbiwgcm93LCAwKTsJLyogbW92ZSBjdXJzb3IgdG8gY29y
cmVjdCBsaW5lICovCisJd2FkZGNoKHdpbiwgJyAnKTsKKwl3YWRkbnN0cih3aW4sIGxpbmUsIE1J
TihzdHJsZW4obGluZSksIHdpZHRoIC0gMikpOworCisJLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIHBy
ZXZpb3VzIGxpbmUgKi8KKyNpZiBPTERfTkNVUlNFUworCXsKKwkJaW50IHggPSBnZXRjdXJ4KHdp
bik7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSB4OyBpKyspCisJCQl3YWRk
Y2god2luLCAnICcpOworCX0KKyNlbHNlCisJd2NscnRvZW9sKHdpbik7CisjZW5kaWYKK30KKwor
LyoKKyAqIFJldHVybiBjdXJyZW50IGxpbmUgb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0
Ym94KCkgYW5kIHByaW50X2xpbmUoKS4KKyAqICdwYWdlJyBzaG91bGQgcG9pbnQgdG8gc3RhcnQg
b2YgY3VycmVudCBsaW5lIGJlZm9yZSBjYWxsaW5nLCBhbmQgd2lsbCBiZQorICogdXBkYXRlZCB0
byBwb2ludCB0byBzdGFydCBvZiBuZXh0IGxpbmUuCisgKi8KK3N0YXRpYyBjaGFyICpnZXRfbGlu
ZSh2b2lkKQoreworCWludCBpID0gMDsKKwlzdGF0aWMgY2hhciBsaW5lW01BWF9MRU4gKyAxXTsK
KworCWVuZF9yZWFjaGVkID0gMDsKKwl3aGlsZSAoKnBhZ2UgIT0gJ1xuJykgeworCQlpZiAoKnBh
Z2UgPT0gJ1wwJykgeworCQkJZW5kX3JlYWNoZWQgPSAxOworCQkJYnJlYWs7CisJCX0gZWxzZSBp
ZiAoaSA8IE1BWF9MRU4pCisJCQlsaW5lW2krK10gPSAqKHBhZ2UrKyk7CisJCWVsc2UgeworCQkJ
LyogVHJ1bmNhdGUgbGluZXMgbG9uZ2VyIHRoYW4gTUFYX0xFTiBjaGFyYWN0ZXJzICovCisJCQlp
ZiAoaSA9PSBNQVhfTEVOKQorCQkJCWxpbmVbaSsrXSA9ICdcMCc7CisJCQlwYWdlKys7CisJCX0K
Kwl9CisJaWYgKGkgPD0gTUFYX0xFTikKKwkJbGluZVtpXSA9ICdcMCc7CisJaWYgKCFlbmRfcmVh
Y2hlZCkKKwkJcGFnZSsrOwkJLyogbW92ZSBwYXN0ICdcbicgKi8KKworCXJldHVybiBsaW5lOwor
fQorCisvKgorICogUHJpbnQgY3VycmVudCBwb3NpdGlvbgorICovCitzdGF0aWMgdm9pZCBwcmlu
dF9wb3NpdGlvbihXSU5ET1cgKiB3aW4pCit7CisJaW50IHBlcmNlbnQ7CisKKwl3YXR0cnNldCh3
aW4sIGRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyKTsKKwl3YmtnZHNldCh3aW4sIGRsZy5wb3Np
dGlvbl9pbmRpY2F0b3IuYXRyICYgQV9DT0xPUik7CisJcGVyY2VudCA9IChwYWdlIC0gYnVmKSAq
IDEwMCAvIHN0cmxlbihidWYpOworCXdtb3ZlKHdpbiwgZ2V0bWF4eSh3aW4pIC0gMywgZ2V0bWF4
eCh3aW4pIC0gOSk7CisJd3ByaW50dyh3aW4sICIoJTNkJSUpIiwgcGVyY2VudCk7Cit9CmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjQ5
MGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYwpA
QCAtMCwwICsxLDcwMCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCisv
KgorICogIHV0aWwuYworICoKKyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2
QGNzLmN1aGsuaGspCisgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdp
bGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQorICovCisKKyNpbmNsdWRlIDxzdGRhcmcu
aD4KKworI2luY2x1ZGUgImRpYWxvZy5oIgorCisvKiBOZWVkZWQgaW4gc2lnbmFsIGhhbmRsZXIg
aW4gbWNvbmYuYyAqLworaW50IHNhdmVkX3gsIHNhdmVkX3k7CisKK3N0cnVjdCBkaWFsb2dfaW5m
byBkbGc7CisKK3N0YXRpYyB2b2lkIHNldF9tb25vX3RoZW1lKHZvaWQpCit7CisJZGxnLnNjcmVl
bi5hdHIgPSBBX05PUk1BTDsKKwlkbGcuc2hhZG93LmF0ciA9IEFfTk9STUFMOworCWRsZy5kaWFs
b2cuYXRyID0gQV9OT1JNQUw7CisJZGxnLnRpdGxlLmF0ciA9IEFfQk9MRDsKKwlkbGcuYm9yZGVy
LmF0ciA9IEFfTk9STUFMOworCWRsZy5idXR0b25fYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsKKwlk
bGcuYnV0dG9uX2luYWN0aXZlLmF0ciA9IEFfRElNOworCWRsZy5idXR0b25fa2V5X2FjdGl2ZS5h
dHIgPSBBX1JFVkVSU0U7CisJZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUuYXRyID0gQV9CT0xEOwor
CWRsZy5idXR0b25fbGFiZWxfYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsKKwlkbGcuYnV0dG9uX2xh
YmVsX2luYWN0aXZlLmF0ciA9IEFfTk9STUFMOworCWRsZy5pbnB1dGJveC5hdHIgPSBBX05PUk1B
TDsKKwlkbGcuaW5wdXRib3hfYm9yZGVyLmF0ciA9IEFfTk9STUFMOworCWRsZy5zZWFyY2hib3gu
YXRyID0gQV9OT1JNQUw7CisJZGxnLnNlYXJjaGJveF90aXRsZS5hdHIgPSBBX0JPTEQ7CisJZGxn
LnNlYXJjaGJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7CisJZGxnLnBvc2l0aW9uX2luZGljYXRv
ci5hdHIgPSBBX0JPTEQ7CisJZGxnLm1lbnVib3guYXRyID0gQV9OT1JNQUw7CisJZGxnLm1lbnVi
b3hfYm9yZGVyLmF0ciA9IEFfTk9STUFMOworCWRsZy5pdGVtLmF0ciA9IEFfTk9STUFMOworCWRs
Zy5pdGVtX3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsKKwlkbGcudGFnLmF0ciA9IEFfQk9MRDsK
KwlkbGcudGFnX3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsKKwlkbGcudGFnX2tleS5hdHIgPSBB
X0JPTEQ7CisJZGxnLnRhZ19rZXlfc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOworCWRsZy5jaGVj
ay5hdHIgPSBBX0JPTEQ7CisJZGxnLmNoZWNrX3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsKKwlk
bGcudWFycm93LmF0ciA9IEFfQk9MRDsKKwlkbGcuZGFycm93LmF0ciA9IEFfQk9MRDsKK30KKwor
I2RlZmluZSBETEdfQ09MT1IoZGlhbG9nLCBmLCBiLCBoKSBcCitkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKwlkbGcuZGlhbG9nLmZnID0gKGYpOyAgICAgICBcCisJZGxnLmRp
YWxvZy5iZyA9IChiKTsgICAgICAgXAorCWRsZy5kaWFsb2cuaGwgPSAoaCk7ICAgICAgIFwKK30g
d2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIHNldF9jbGFzc2ljX3RoZW1lKHZvaWQpCit7CisJRExH
X0NPTE9SKHNjcmVlbiwgICAgICAgICAgICAgICAgQ09MT1JfQ1lBTiwgICBDT0xPUl9CTFVFLCAg
IHRydWUpOworCURMR19DT0xPUihzaGFkb3csICAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAg
Q09MT1JfQkxBQ0ssICB0cnVlKTsKKwlETEdfQ09MT1IoZGlhbG9nLCAgICAgICAgICAgICAgICBD
T0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUih0aXRsZSwgICAg
ICAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09M
T1IoYm9yZGVyLCAgICAgICAgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX1dISVRFLCAgdHJ1
ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9hY3RpdmUsICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xP
Ul9CTFVFLCAgIHRydWUpOworCURMR19DT0xPUihidXR0b25faW5hY3RpdmUsICAgICAgIENPTE9S
X0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9rZXlfYWN0
aXZlLCAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOworCURMR19DT0xPUihi
dXR0b25fa2V5X2luYWN0aXZlLCAgIENPTE9SX1JFRCwgICAgQ09MT1JfV0hJVEUsICBmYWxzZSk7
CisJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9hY3RpdmUsICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9C
TFVFLCAgIHRydWUpOworCURMR19DT0xPUihidXR0b25fbGFiZWxfaW5hY3RpdmUsIENPTE9SX0JM
QUNLLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IoaW5wdXRib3gsICAgICAgICAg
ICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUihpbnB1
dGJveF9ib3JkZXIsICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7CisJ
RExHX0NPTE9SKHNlYXJjaGJveCwgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElU
RSwgIGZhbHNlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94X3RpdGxlLCAgICAgICBDT0xPUl9ZRUxM
T1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKHNlYXJjaGJveF9ib3JkZXIsICAg
ICAgQ09MT1JfV0hJVEUsICBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihwb3NpdGlv
bl9pbmRpY2F0b3IsICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdf
Q09MT1IobWVudWJveCwgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAg
ZmFsc2UpOworCURMR19DT0xPUihtZW51Ym94X2JvcmRlciwgICAgICAgIENPTE9SX1dISVRFLCAg
Q09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IoaXRlbSwgICAgICAgICAgICAgICAgICBD
T0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOworCURMR19DT0xPUihpdGVtX3NlbGVj
dGVkLCAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVlKTsKKwlETEdfQ09M
T1IodGFnLCAgICAgICAgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1
ZSk7CisJRExHX0NPTE9SKHRhZ19zZWxlY3RlZCwgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xP
Ul9CTFVFLCAgIHRydWUpOworCURMR19DT0xPUih0YWdfa2V5LCAgICAgICAgICAgICAgIENPTE9S
X1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsKKwlETEdfQ09MT1IodGFnX2tleV9zZWxlY3Rl
ZCwgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKGNo
ZWNrLCAgICAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsK
KwlETEdfQ09MT1IoY2hlY2tfc2VsZWN0ZWQsICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JM
VUUsICAgdHJ1ZSk7CisJRExHX0NPTE9SKHVhcnJvdywgICAgICAgICAgICAgICAgQ09MT1JfR1JF
RU4sICBDT0xPUl9XSElURSwgIHRydWUpOworCURMR19DT0xPUihkYXJyb3csICAgICAgICAgICAg
ICAgIENPTE9SX0dSRUVOLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsKK30KKworc3RhdGljIHZvaWQg
c2V0X2JsYWNrYmdfdGhlbWUodm9pZCkKK3sKKwlETEdfQ09MT1Ioc2NyZWVuLCBDT0xPUl9SRUQs
ICAgQ09MT1JfQkxBQ0ssIHRydWUpOworCURMR19DT0xPUihzaGFkb3csIENPTE9SX0JMQUNLLCBD
T0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihkaWFsb2csIENPTE9SX1dISVRFLCBDT0xP
Ul9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUih0aXRsZSwgIENPTE9SX1JFRCwgICBDT0xPUl9C
TEFDSywgZmFsc2UpOworCURMR19DT0xPUihib3JkZXIsIENPTE9SX0JMQUNLLCBDT0xPUl9CTEFD
SywgdHJ1ZSk7CisKKwlETEdfQ09MT1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9ZRUxM
T1csIENPTE9SX1JFRCwgICBmYWxzZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwgICAg
ICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihidXR0b25f
a2V5X2FjdGl2ZSwgICAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRydWUpOworCURMR19D
T0xPUihidXR0b25fa2V5X2luYWN0aXZlLCAgIENPTE9SX1JFRCwgICAgQ09MT1JfQkxBQ0ssIGZh
bHNlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBDT0xPUl9XSElURSwgIENP
TE9SX1JFRCwgICBmYWxzZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZSwgQ09M
T1JfQkxBQ0ssICBDT0xPUl9CTEFDSywgdHJ1ZSk7CisKKwlETEdfQ09MT1IoaW5wdXRib3gsICAg
ICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihpbnB1
dGJveF9ib3JkZXIsICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7CisKKwlETEdf
Q09MT1Ioc2VhcmNoYm94LCAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2Up
OworCURMR19DT0xPUihzZWFyY2hib3hfdGl0bGUsICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNL
LCB0cnVlKTsKKwlETEdfQ09MT1Ioc2VhcmNoYm94X2JvcmRlciwgQ09MT1JfQkxBQ0ssICBDT0xP
Ul9CTEFDSywgdHJ1ZSk7CisKKwlETEdfQ09MT1IocG9zaXRpb25faW5kaWNhdG9yLCBDT0xPUl9S
RUQsIENPTE9SX0JMQUNLLCAgZmFsc2UpOworCisJRExHX0NPTE9SKG1lbnVib3gsICAgICAgICAg
IENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IobWVudWJveF9i
b3JkZXIsICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9CTEFDSywgdHJ1ZSk7CisKKwlETEdfQ09MT1Io
aXRlbSwgICAgICAgICAgICAgQ09MT1JfV0hJVEUsIENPTE9SX0JMQUNLLCBmYWxzZSk7CisJRExH
X0NPTE9SKGl0ZW1fc2VsZWN0ZWQsICAgIENPTE9SX1dISVRFLCBDT0xPUl9SRUQsICAgZmFsc2Up
OworCisJRExHX0NPTE9SKHRhZywgICAgICAgICAgICAgIENPTE9SX1JFRCwgICAgQ09MT1JfQkxB
Q0ssIGZhbHNlKTsKKwlETEdfQ09MT1IodGFnX3NlbGVjdGVkLCAgICAgQ09MT1JfWUVMTE9XLCBD
T0xPUl9SRUQsICAgdHJ1ZSk7CisJRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAgIENPTE9SX1JF
RCwgICAgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09MT1IodGFnX2tleV9zZWxlY3RlZCwg
Q09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7CisKKwlETEdfQ09MT1IoY2hlY2ssICAg
ICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOworCURMR19DT0xPUihj
aGVja19zZWxlY3RlZCwgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsKKworCURM
R19DT0xPUih1YXJyb3csIENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsKKwlETEdfQ09M
T1IoZGFycm93LCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLLCBmYWxzZSk7Cit9CisKK3N0YXRpYyB2
b2lkIHNldF9ibHVldGl0bGVfdGhlbWUodm9pZCkKK3sKKwlzZXRfY2xhc3NpY190aGVtZSgpOwor
CURMR19DT0xPUih0aXRsZSwgICAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRF
LCB0cnVlKTsKKwlETEdfQ09MT1IoYnV0dG9uX2tleV9hY3RpdmUsICAgQ09MT1JfWUVMTE9XLCBD
T0xPUl9CTFVFLCAgdHJ1ZSk7CisJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9hY3RpdmUsIENPTE9S
X1dISVRFLCAgQ09MT1JfQkxVRSwgIHRydWUpOworCURMR19DT0xPUihzZWFyY2hib3hfdGl0bGUs
ICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsKKwlETEdfQ09MT1IocG9zaXRp
b25faW5kaWNhdG9yLCAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7CisJRExHX0NP
TE9SKHRhZywgICAgICAgICAgICAgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUp
OworCURMR19DT0xPUih0YWdfa2V5LCAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dI
SVRFLCB0cnVlKTsKKworfQorCisvKgorICogU2VsZWN0IGNvbG9yIHRoZW1lCisgKi8KK3N0YXRp
YyBpbnQgc2V0X3RoZW1lKGNvbnN0IGNoYXIgKnRoZW1lKQoreworCWludCB1c2VfY29sb3IgPSAx
OworCWlmICghdGhlbWUpCisJCXNldF9ibHVldGl0bGVfdGhlbWUoKTsKKwllbHNlIGlmIChzdHJj
bXAodGhlbWUsICJjbGFzc2ljIikgPT0gMCkKKwkJc2V0X2NsYXNzaWNfdGhlbWUoKTsKKwllbHNl
IGlmIChzdHJjbXAodGhlbWUsICJibHVldGl0bGUiKSA9PSAwKQorCQlzZXRfYmx1ZXRpdGxlX3Ro
ZW1lKCk7CisJZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAiYmxhY2tiZyIpID09IDApCisJCXNldF9i
bGFja2JnX3RoZW1lKCk7CisJZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAibW9ubyIpID09IDApCisJ
CXVzZV9jb2xvciA9IDA7CisKKwlyZXR1cm4gdXNlX2NvbG9yOworfQorCitzdGF0aWMgdm9pZCBp
bml0X29uZV9jb2xvcihzdHJ1Y3QgZGlhbG9nX2NvbG9yICpjb2xvcikKK3sKKwlzdGF0aWMgaW50
IHBhaXIgPSAwOworCisJcGFpcisrOworCWluaXRfcGFpcihwYWlyLCBjb2xvci0+ZmcsIGNvbG9y
LT5iZyk7CisJaWYgKGNvbG9yLT5obCkKKwkJY29sb3ItPmF0ciA9IEFfQk9MRCB8IENPTE9SX1BB
SVIocGFpcik7CisJZWxzZQorCQljb2xvci0+YXRyID0gQ09MT1JfUEFJUihwYWlyKTsKK30KKwor
c3RhdGljIHZvaWQgaW5pdF9kaWFsb2dfY29sb3JzKHZvaWQpCit7CisJaW5pdF9vbmVfY29sb3Io
JmRsZy5zY3JlZW4pOworCWluaXRfb25lX2NvbG9yKCZkbGcuc2hhZG93KTsKKwlpbml0X29uZV9j
b2xvcigmZGxnLmRpYWxvZyk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy50aXRsZSk7CisJaW5pdF9v
bmVfY29sb3IoJmRsZy5ib3JkZXIpOworCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2FjdGl2
ZSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25faW5hY3RpdmUpOworCWluaXRfb25lX2Nv
bG9yKCZkbGcuYnV0dG9uX2tleV9hY3RpdmUpOworCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9u
X2tleV9pbmFjdGl2ZSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fbGFiZWxfYWN0aXZl
KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZSk7CisJaW5pdF9v
bmVfY29sb3IoJmRsZy5pbnB1dGJveCk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5pbnB1dGJveF9i
b3JkZXIpOworCWluaXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94KTsKKwlpbml0X29uZV9jb2xv
cigmZGxnLnNlYXJjaGJveF90aXRsZSk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5zZWFyY2hib3hf
Ym9yZGVyKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnBvc2l0aW9uX2luZGljYXRvcik7CisJaW5p
dF9vbmVfY29sb3IoJmRsZy5tZW51Ym94KTsKKwlpbml0X29uZV9jb2xvcigmZGxnLm1lbnVib3hf
Ym9yZGVyKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLml0ZW0pOworCWluaXRfb25lX2NvbG9yKCZk
bGcuaXRlbV9zZWxlY3RlZCk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy50YWcpOworCWluaXRfb25l
X2NvbG9yKCZkbGcudGFnX3NlbGVjdGVkKTsKKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZ19rZXkp
OworCWluaXRfb25lX2NvbG9yKCZkbGcudGFnX2tleV9zZWxlY3RlZCk7CisJaW5pdF9vbmVfY29s
b3IoJmRsZy5jaGVjayk7CisJaW5pdF9vbmVfY29sb3IoJmRsZy5jaGVja19zZWxlY3RlZCk7CisJ
aW5pdF9vbmVfY29sb3IoJmRsZy51YXJyb3cpOworCWluaXRfb25lX2NvbG9yKCZkbGcuZGFycm93
KTsKK30KKworLyoKKyAqIFNldHVwIGZvciBjb2xvciBkaXNwbGF5CisgKi8KK3N0YXRpYyB2b2lk
IGNvbG9yX3NldHVwKGNvbnN0IGNoYXIgKnRoZW1lKQoreworCWludCB1c2VfY29sb3I7CisKKwl1
c2VfY29sb3IgPSBzZXRfdGhlbWUodGhlbWUpOworCWlmICh1c2VfY29sb3IgJiYgaGFzX2NvbG9y
cygpKSB7CisJCXN0YXJ0X2NvbG9yKCk7CisJCWluaXRfZGlhbG9nX2NvbG9ycygpOworCX0gZWxz
ZQorCQlzZXRfbW9ub190aGVtZSgpOworfQorCisvKgorICogU2V0IHdpbmRvdyB0byBhdHRyaWJ1
dGUgJ2F0dHInCisgKi8KK3ZvaWQgYXR0cl9jbGVhcihXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQs
IGludCB3aWR0aCwgY2h0eXBlIGF0dHIpCit7CisJaW50IGksIGo7CisKKwl3YXR0cnNldCh3aW4s
IGF0dHIpOworCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworCQl3bW92ZSh3aW4sIGks
IDApOworCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykKKwkJCXdhZGRjaCh3aW4sICcgJyk7
CisJfQorCXRvdWNod2luKHdpbik7Cit9CisKK3ZvaWQgZGlhbG9nX2NsZWFyKHZvaWQpCit7CisJ
aW50IGxpbmVzLCBjb2x1bW5zOworCisJbGluZXMgPSBnZXRtYXh5KHN0ZHNjcik7CisJY29sdW1u
cyA9IGdldG1heHgoc3Rkc2NyKTsKKworCWF0dHJfY2xlYXIoc3Rkc2NyLCBsaW5lcywgY29sdW1u
cywgZGxnLnNjcmVlbi5hdHIpOworCS8qIERpc3BsYXkgYmFja2dyb3VuZCB0aXRsZSBpZiBpdCBl
eGlzdHMgLi4uIC0gU0xIICovCisJaWYgKGRsZy5iYWNrdGl0bGUgIT0gTlVMTCkgeworCQlpbnQg
aSwgbGVuID0gMCwgc2tpcCA9IDA7CisJCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3M7CisKKwkJ
d2F0dHJzZXQoc3Rkc2NyLCBkbGcuc2NyZWVuLmF0cik7CisJCW12d2FkZHN0cihzdGRzY3IsIDAs
IDEsIChjaGFyICopZGxnLmJhY2t0aXRsZSk7CisKKwkJZm9yIChwb3MgPSBkbGcuc3VidGl0bGVz
OyBwb3MgIT0gTlVMTDsgcG9zID0gcG9zLT5uZXh0KSB7CisJCQkvKiAzIGlzIGZvciB0aGUgYXJy
b3cgYW5kIHNwYWNlcyAqLworCQkJbGVuICs9IHN0cmxlbihwb3MtPnRleHQpICsgMzsKKwkJfQor
CisJCXdtb3ZlKHN0ZHNjciwgMSwgMSk7CisJCWlmIChsZW4gPiBjb2x1bW5zIC0gMikgeworCQkJ
Y29uc3QgY2hhciAqZWxsaXBzaXMgPSAiWy4uLl0gIjsKKwkJCXdhZGRzdHIoc3Rkc2NyLCBlbGxp
cHNpcyk7CisJCQlza2lwID0gbGVuIC0gKGNvbHVtbnMgLSAyIC0gc3RybGVuKGVsbGlwc2lzKSk7
CisJCX0KKworCQlmb3IgKHBvcyA9IGRsZy5zdWJ0aXRsZXM7IHBvcyAhPSBOVUxMOyBwb3MgPSBw
b3MtPm5leHQpIHsKKwkJCWlmIChza2lwID09IDApCisJCQkJd2FkZGNoKHN0ZHNjciwgQUNTX1JB
UlJPVyk7CisJCQllbHNlCisJCQkJc2tpcC0tOworCisJCQlpZiAoc2tpcCA9PSAwKQorCQkJCXdh
ZGRjaChzdGRzY3IsICcgJyk7CisJCQllbHNlCisJCQkJc2tpcC0tOworCisJCQlpZiAoc2tpcCA8
IHN0cmxlbihwb3MtPnRleHQpKSB7CisJCQkJd2FkZHN0cihzdGRzY3IsIHBvcy0+dGV4dCArIHNr
aXApOworCQkJCXNraXAgPSAwOworCQkJfSBlbHNlCisJCQkJc2tpcCAtPSBzdHJsZW4ocG9zLT50
ZXh0KTsKKworCQkJaWYgKHNraXAgPT0gMCkKKwkJCQl3YWRkY2goc3Rkc2NyLCAnICcpOworCQkJ
ZWxzZQorCQkJCXNraXAtLTsKKwkJfQorCisJCWZvciAoaSA9IGxlbiArIDE7IGkgPCBjb2x1bW5z
IC0gMTsgaSsrKQorCQkJd2FkZGNoKHN0ZHNjciwgQUNTX0hMSU5FKTsKKwl9CisJd25vdXRyZWZy
ZXNoKHN0ZHNjcik7Cit9CisKKy8qCisgKiBEbyBzb21lIGluaXRpYWxpemF0aW9uIGZvciBkaWFs
b2cKKyAqLworaW50IGluaXRfZGlhbG9nKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSkKK3sKKwlpbnQg
aGVpZ2h0LCB3aWR0aDsKKworCWluaXRzY3IoKTsJCS8qIEluaXQgY3Vyc2VzICovCisKKwkvKiBH
ZXQgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gZm9yIHNpZ25hbCBoYW5kbGVyIGluIG1jb25mLmMg
Ki8KKwlnZXR5eChzdGRzY3IsIHNhdmVkX3ksIHNhdmVkX3gpOworCisJZ2V0bWF4eXgoc3Rkc2Ny
LCBoZWlnaHQsIHdpZHRoKTsKKwlpZiAoaGVpZ2h0IDwgV0lORE9XX0hFSUdUSF9NSU4gfHwgd2lk
dGggPCBXSU5ET1dfV0lEVEhfTUlOKSB7CisJCWVuZHdpbigpOworCQlyZXR1cm4gLUVSUkRJU1BM
QVlUT09TTUFMTDsKKwl9CisKKwlkbGcuYmFja3RpdGxlID0gYmFja3RpdGxlOworCWNvbG9yX3Nl
dHVwKGdldGVudigiTUVOVUNPTkZJR19DT0xPUiIpKTsKKworCWtleXBhZChzdGRzY3IsIFRSVUUp
OworCWNicmVhaygpOworCW5vZWNobygpOworCWRpYWxvZ19jbGVhcigpOworCisJcmV0dXJuIDA7
Cit9CisKK3ZvaWQgc2V0X2RpYWxvZ19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKQor
eworCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7Cit9CisKK3ZvaWQgc2V0X2RpYWxvZ19zdWJ0
aXRsZXMoc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlcykKK3sKKwlkbGcuc3VidGl0bGVz
ID0gc3VidGl0bGVzOworfQorCisvKgorICogRW5kIHVzaW5nIGRpYWxvZyBmdW5jdGlvbnMuCisg
Ki8KK3ZvaWQgZW5kX2RpYWxvZyhpbnQgeCwgaW50IHkpCit7CisJLyogbW92ZSBjdXJzb3IgYmFj
ayB0byBvcmlnaW5hbCBwb3NpdGlvbiAqLworCW1vdmUoeSwgeCk7CisJcmVmcmVzaCgpOworCWVu
ZHdpbigpOworfQorCisvKiBQcmludCB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZy4gQ2VudGVyIHRo
ZSB0aXRsZSBhbmQgdHJ1bmNhdGUKKyAqIHRpbGUgaWYgd2lkZXIgdGhhbiBkaWFsb2cgKC0gMiBj
aGFycykuCisgKiovCit2b2lkIHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25zdCBjaGFy
ICp0aXRsZSwgaW50IHdpZHRoKQoreworCWlmICh0aXRsZSkgeworCQlpbnQgdGxlbiA9IE1JTih3
aWR0aCAtIDIsIHN0cmxlbih0aXRsZSkpOworCQl3YXR0cnNldChkaWFsb2csIGRsZy50aXRsZS5h
dHIpOworCQltdndhZGRjaChkaWFsb2csIDAsICh3aWR0aCAtIHRsZW4pIC8gMiAtIDEsICcgJyk7
CisJCW12d2FkZG5zdHIoZGlhbG9nLCAwLCAod2lkdGggLSB0bGVuKS8yLCB0aXRsZSwgdGxlbik7
CisJCXdhZGRjaChkaWFsb2csICcgJyk7CisJfQorfQorCisvKgorICogUHJpbnQgYSBzdHJpbmcg
b2YgdGV4dCBpbiBhIHdpbmRvdywgYXV0b21hdGljYWxseSB3cmFwIGFyb3VuZCB0byB0aGUKKyAq
IG5leHQgbGluZSBpZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nIHRvIGZpdCBvbiBvbmUgbGluZS4g
TmV3bGluZQorICogY2hhcmFjdGVycyAnXG4nIGFyZSBwcm9wcGVybHkgcHJvY2Vzc2VkLiAgV2Ug
c3RhcnQgb24gYSBuZXcgbGluZQorICogaWYgdGhlcmUgaXMgbm8gcm9vbSBmb3IgYXQgbGVhc3Qg
NCBub25ibGFua3MgZm9sbG93aW5nIGEgZG91YmxlLXNwYWNlLgorICovCit2b2lkIHByaW50X2F1
dG93cmFwKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgd2lkdGgsIGludCB5
LCBpbnQgeCkKK3sKKwlpbnQgbmV3bCwgY3VyX3gsIGN1cl95OworCWludCBwcm9tcHRfbGVuLCBy
b29tLCB3bGVuOworCWNoYXIgdGVtcHN0cltNQVhfTEVOICsgMV0sICp3b3JkLCAqc3AsICpzcDIs
ICpuZXdsaW5lX3NlcGFyYXRvciA9IDA7CisKKwlzdHJjcHkodGVtcHN0ciwgcHJvbXB0KTsKKwor
CXByb21wdF9sZW4gPSBzdHJsZW4odGVtcHN0cik7CisKKwlpZiAocHJvbXB0X2xlbiA8PSB3aWR0
aCAtIHggKiAyKSB7CS8qIElmIHByb21wdCBpcyBzaG9ydCAqLworCQl3bW92ZSh3aW4sIHksICh3
aWR0aCAtIHByb21wdF9sZW4pIC8gMik7CisJCXdhZGRzdHIod2luLCB0ZW1wc3RyKTsKKwl9IGVs
c2UgeworCQljdXJfeCA9IHg7CisJCWN1cl95ID0geTsKKwkJbmV3bCA9IDE7CisJCXdvcmQgPSB0
ZW1wc3RyOworCQl3aGlsZSAod29yZCAmJiAqd29yZCkgeworCQkJc3AgPSBzdHJwYnJrKHdvcmQs
ICJcbiAiKTsKKwkJCWlmIChzcCAmJiAqc3AgPT0gJ1xuJykKKwkJCQluZXdsaW5lX3NlcGFyYXRv
ciA9IHNwOworCisJCQlpZiAoc3ApCisJCQkJKnNwKysgPSAwOworCisJCQkvKiBXcmFwIHRvIG5l
eHQgbGluZSBpZiBlaXRoZXIgdGhlIHdvcmQgZG9lcyBub3QgZml0LAorCQkJICAgb3IgaXQgaXMg
dGhlIGZpcnN0IHdvcmQgb2YgYSBuZXcgc2VudGVuY2UsIGFuZCBpdCBpcworCQkJICAgc2hvcnQs
IGFuZCB0aGUgbmV4dCB3b3JkIGRvZXMgbm90IGZpdC4gKi8KKwkJCXJvb20gPSB3aWR0aCAtIGN1
cl94OworCQkJd2xlbiA9IHN0cmxlbih3b3JkKTsKKwkJCWlmICh3bGVuID4gcm9vbSB8fAorCQkJ
ICAgIChuZXdsICYmIHdsZW4gPCA0ICYmIHNwCisJCQkgICAgICYmIHdsZW4gKyAxICsgc3RybGVu
KHNwKSA+IHJvb20KKwkJCSAgICAgJiYgKCEoc3AyID0gc3RycGJyayhzcCwgIlxuICIpKQorCQkJ
CSB8fCB3bGVuICsgMSArIChzcDIgLSBzcCkgPiByb29tKSkpIHsKKwkJCQljdXJfeSsrOworCQkJ
CWN1cl94ID0geDsKKwkJCX0KKwkJCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsKKwkJCXdhZGRz
dHIod2luLCB3b3JkKTsKKwkJCWdldHl4KHdpbiwgY3VyX3ksIGN1cl94KTsKKworCQkJLyogTW92
ZSB0byB0aGUgbmV4dCBsaW5lIGlmIHRoZSB3b3JkIHNlcGFyYXRvciB3YXMgYSBuZXdsaW5lICov
CisJCQlpZiAobmV3bGluZV9zZXBhcmF0b3IpIHsKKwkJCQljdXJfeSsrOworCQkJCWN1cl94ID0g
eDsKKwkJCQluZXdsaW5lX3NlcGFyYXRvciA9IDA7CisJCQl9IGVsc2UKKwkJCQljdXJfeCsrOwor
CisJCQlpZiAoc3AgJiYgKnNwID09ICcgJykgeworCQkJCWN1cl94Kys7CS8qIGRvdWJsZSBzcGFj
ZSAqLworCQkJCXdoaWxlICgqKytzcCA9PSAnICcpIDsKKwkJCQluZXdsID0gMTsKKwkJCX0gZWxz
ZQorCQkJCW5ld2wgPSAwOworCQkJd29yZCA9IHNwOworCQl9CisJfQorfQorCisvKgorICogUHJp
bnQgYSBidXR0b24KKyAqLwordm9pZCBwcmludF9idXR0b24oV0lORE9XICogd2luLCBjb25zdCBj
aGFyICpsYWJlbCwgaW50IHksIGludCB4LCBpbnQgc2VsZWN0ZWQpCit7CisJaW50IGksIHRlbXA7
CisKKwl3bW92ZSh3aW4sIHksIHgpOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0
dG9uX2FjdGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9pbmFjdGl2ZS5hdHIpOworCXdhZGRzdHIo
d2luLCAiPCIpOworCXRlbXAgPSBzdHJzcG4obGFiZWwsICIgIik7CisJbGFiZWwgKz0gdGVtcDsK
Kwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUuYXRyCisJ
CSA6IGRsZy5idXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgdGVt
cDsgaSsrKQorCQl3YWRkY2god2luLCAnICcpOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBk
bGcuYnV0dG9uX2tleV9hY3RpdmUuYXRyCisJCSA6IGRsZy5idXR0b25fa2V5X2luYWN0aXZlLmF0
cik7CisJd2FkZGNoKHdpbiwgbGFiZWxbMF0pOworCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBk
bGcuYnV0dG9uX2xhYmVsX2FjdGl2ZS5hdHIKKwkJIDogZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2
ZS5hdHIpOworCXdhZGRzdHIod2luLCAoY2hhciAqKWxhYmVsICsgMSk7CisJd2F0dHJzZXQod2lu
LCBzZWxlY3RlZCA/IGRsZy5idXR0b25fYWN0aXZlLmF0cgorCQkgOiBkbGcuYnV0dG9uX2luYWN0
aXZlLmF0cik7CisJd2FkZHN0cih3aW4sICI+Iik7CisJd21vdmUod2luLCB5LCB4ICsgdGVtcCAr
IDEpOworfQorCisvKgorICogRHJhdyBhIHJlY3Rhbmd1bGFyIGJveCB3aXRoIGxpbmUgZHJhd2lu
ZyBjaGFyYWN0ZXJzCisgKi8KK3ZvaWQKK2RyYXdfYm94KFdJTkRPVyAqIHdpbiwgaW50IHksIGlu
dCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsCisJIGNodHlwZSBib3gsIGNodHlwZSBib3JkZXIp
Cit7CisJaW50IGksIGo7CisKKwl3YXR0cnNldCh3aW4sIDApOworCWZvciAoaSA9IDA7IGkgPCBo
ZWlnaHQ7IGkrKykgeworCQl3bW92ZSh3aW4sIHkgKyBpLCB4KTsKKwkJZm9yIChqID0gMDsgaiA8
IHdpZHRoOyBqKyspCisJCQlpZiAoIWkgJiYgIWopCisJCQkJd2FkZGNoKHdpbiwgYm9yZGVyIHwg
QUNTX1VMQ09STkVSKTsKKwkJCWVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSAmJiAhaikKKwkJCQl3
YWRkY2god2luLCBib3JkZXIgfCBBQ1NfTExDT1JORVIpOworCQkJZWxzZSBpZiAoIWkgJiYgaiA9
PSB3aWR0aCAtIDEpCisJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1VSQ09STkVSKTsKKwkJCWVs
c2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSAmJiBqID09IHdpZHRoIC0gMSkKKwkJCQl3YWRkY2god2lu
LCBib3ggfCBBQ1NfTFJDT1JORVIpOworCQkJZWxzZSBpZiAoIWkpCisJCQkJd2FkZGNoKHdpbiwg
Ym9yZGVyIHwgQUNTX0hMSU5FKTsKKwkJCWVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSkKKwkJCQl3
YWRkY2god2luLCBib3ggfCBBQ1NfSExJTkUpOworCQkJZWxzZSBpZiAoIWopCisJCQkJd2FkZGNo
KHdpbiwgYm9yZGVyIHwgQUNTX1ZMSU5FKTsKKwkJCWVsc2UgaWYgKGogPT0gd2lkdGggLSAxKQor
CQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19WTElORSk7CisJCQllbHNlCisJCQkJd2FkZGNoKHdp
biwgYm94IHwgJyAnKTsKKwl9Cit9CisKKy8qCisgKiBEcmF3IHNoYWRvd3MgYWxvbmcgdGhlIHJp
Z2h0IGFuZCBib3R0b20gZWRnZSB0byBnaXZlIGEgbW9yZSAzRCBsb29rCisgKiB0byB0aGUgYm94
ZXMKKyAqLwordm9pZCBkcmF3X3NoYWRvdyhXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50
IGhlaWdodCwgaW50IHdpZHRoKQoreworCWludCBpOworCisJaWYgKGhhc19jb2xvcnMoKSkgewkv
KiBXaGV0aGVyIHRlcm1pbmFsIHN1cHBvcnRzIGNvbG9yPyAqLworCQl3YXR0cnNldCh3aW4sIGRs
Zy5zaGFkb3cuYXRyKTsKKwkJd21vdmUod2luLCB5ICsgaGVpZ2h0LCB4ICsgMik7CisJCWZvciAo
aSA9IDA7IGkgPCB3aWR0aDsgaSsrKQorCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hB
UlRFWFQpOworCQlmb3IgKGkgPSB5ICsgMTsgaSA8IHkgKyBoZWlnaHQgKyAxOyBpKyspIHsKKwkJ
CXdtb3ZlKHdpbiwgaSwgeCArIHdpZHRoKTsKKwkJCXdhZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBB
X0NIQVJURVhUKTsKKwkJCXdhZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBBX0NIQVJURVhUKTsKKwkJ
fQorCQl3bm91dHJlZnJlc2god2luKTsKKwl9Cit9CisKKy8qCisgKiAgUmV0dXJuIHRoZSBwb3Np
dGlvbiBvZiB0aGUgZmlyc3QgYWxwaGFiZXRpYyBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcuCisgKi8K
K2ludCBmaXJzdF9hbHBoYShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4ZW1wdCkK
K3sKKwlpbnQgaSwgaW5fcGFyZW4gPSAwLCBjOworCisJZm9yIChpID0gMDsgaSA8IHN0cmxlbihz
dHJpbmcpOyBpKyspIHsKKwkJYyA9IHRvbG93ZXIoc3RyaW5nW2ldKTsKKworCQlpZiAoc3RyY2hy
KCI8WygiLCBjKSkKKwkJCSsraW5fcGFyZW47CisJCWlmIChzdHJjaHIoIj5dKSIsIGMpICYmIGlu
X3BhcmVuID4gMCkKKwkJCS0taW5fcGFyZW47CisKKwkJaWYgKCghaW5fcGFyZW4pICYmIGlzYWxw
aGEoYykgJiYgc3RyY2hyKGV4ZW1wdCwgYykgPT0gMCkKKwkJCXJldHVybiBpOworCX0KKworCXJl
dHVybiAwOworfQorCisvKgorICogbmN1cnNlcyB1c2VzIEVTQyB0byBkZXRlY3QgZXNjYXBlZCBj
aGFyIHNlcXVlbmNlcy4gVGhpcyByZXN1dGwgaW4KKyAqIGEgc21hbGwgdGltZW91dCBiZWZvcmUg
RVNDIGlzIGFjdHVhbGx5IGRlbGl2ZXJlZCB0byB0aGUgYXBwbGljYXRpb24uCisgKiBseGRpYWxv
ZyBzdWdnZXN0IDxFU0M+IDxFU0M+IHdoaWNoIGlzIGNvcnJlY3RseSB0cmFuc2xhdGVkIHRvIHR3
bworICogdGltZXMgZXNjLiBCdXQgdGhlbiB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIGVz
YyB0byBhdm9pZCBzdGVwcGluZworICogb3V0IG9uZSBtZW51IHRvbyBtdWNoLiBGaWx0ZXIgYXdh
eSBhbGwgZXNjYXBlZCBrZXkgc2VxdWVuY2VzIHNpbmNlCisgKiBrZXlwYWQoRkFMU0UpIHR1cm4g
b2ZmIG5jdXJzZXMgc3VwcG9ydCBmb3IgZXNjYXBlIHNlcXVlbmNlcyAtIGFuZCB0aGF0cworICog
bmVlZGVkIHRvIG1ha2Ugbm90aW1lb3V0KCkgZG8gYXMgZXhwZWN0ZWQuCisgKi8KK2ludCBvbl9r
ZXlfZXNjKFdJTkRPVyAqd2luKQoreworCWludCBrZXk7CisJaW50IGtleTI7CisJaW50IGtleTM7
CisKKwlub2RlbGF5KHdpbiwgVFJVRSk7CisJa2V5cGFkKHdpbiwgRkFMU0UpOworCWtleSA9IHdn
ZXRjaCh3aW4pOworCWtleTIgPSB3Z2V0Y2god2luKTsKKwlkbyB7CisJCWtleTMgPSB3Z2V0Y2go
d2luKTsKKwl9IHdoaWxlIChrZXkzICE9IEVSUik7CisJbm9kZWxheSh3aW4sIEZBTFNFKTsKKwlr
ZXlwYWQod2luLCBUUlVFKTsKKwlpZiAoa2V5ID09IEtFWV9FU0MgJiYga2V5MiA9PSBFUlIpCisJ
CXJldHVybiBLRVlfRVNDOworCWVsc2UgaWYgKGtleSAhPSBFUlIgJiYga2V5ICE9IEtFWV9FU0Mg
JiYga2V5MiA9PSBFUlIpCisJCXVuZ2V0Y2goa2V5KTsKKworCXJldHVybiAtMTsKK30KKworLyog
cmVkcmF3IHNjcmVlbiBpbiBuZXcgc2l6ZSAqLworaW50IG9uX2tleV9yZXNpemUodm9pZCkKK3sK
KwlkaWFsb2dfY2xlYXIoKTsKKwlyZXR1cm4gS0VZX1JFU0laRTsKK30KKworc3RydWN0IGRpYWxv
Z19saXN0ICppdGVtX2N1cjsKK3N0cnVjdCBkaWFsb2dfbGlzdCBpdGVtX25pbDsKK3N0cnVjdCBk
aWFsb2dfbGlzdCAqaXRlbV9oZWFkOworCit2b2lkIGl0ZW1fcmVzZXQodm9pZCkKK3sKKwlzdHJ1
Y3QgZGlhbG9nX2xpc3QgKnAsICpuZXh0OworCisJZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0g
bmV4dCkgeworCQluZXh0ID0gcC0+bmV4dDsKKwkJZnJlZShwKTsKKwl9CisJaXRlbV9oZWFkID0g
TlVMTDsKKwlpdGVtX2N1ciA9ICZpdGVtX25pbDsKK30KKwordm9pZCBpdGVtX21ha2UoY29uc3Qg
Y2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnAg
PSBtYWxsb2Moc2l6ZW9mKCpwKSk7CisKKwlpZiAoaXRlbV9oZWFkKQorCQlpdGVtX2N1ci0+bmV4
dCA9IHA7CisJZWxzZQorCQlpdGVtX2hlYWQgPSBwOworCWl0ZW1fY3VyID0gcDsKKwltZW1zZXQo
cCwgMCwgc2l6ZW9mKCpwKSk7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c25wcmludGYoaXRl
bV9jdXItPm5vZGUuc3RyLCBzaXplb2YoaXRlbV9jdXItPm5vZGUuc3RyKSwgZm10LCBhcCk7CisJ
dmFfZW5kKGFwKTsKK30KKwordm9pZCBpdGVtX2FkZF9zdHIoY29uc3QgY2hhciAqZm10LCAuLi4p
Cit7CisJdmFfbGlzdCBhcDsKKwlzaXplX3QgYXZhaWw7CisKKwlhdmFpbCA9IHNpemVvZihpdGVt
X2N1ci0+bm9kZS5zdHIpIC0gc3RybGVuKGl0ZW1fY3VyLT5ub2RlLnN0cik7CisKKwl2YV9zdGFy
dChhcCwgZm10KTsKKwl2c25wcmludGYoaXRlbV9jdXItPm5vZGUuc3RyICsgc3RybGVuKGl0ZW1f
Y3VyLT5ub2RlLnN0ciksCisJCSAgYXZhaWwsIGZtdCwgYXApOworCWl0ZW1fY3VyLT5ub2RlLnN0
cltzaXplb2YoaXRlbV9jdXItPm5vZGUuc3RyKSAtIDFdID0gJ1wwJzsKKwl2YV9lbmQoYXApOwor
fQorCit2b2lkIGl0ZW1fc2V0X3RhZyhjaGFyIHRhZykKK3sKKwlpdGVtX2N1ci0+bm9kZS50YWcg
PSB0YWc7Cit9Cit2b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcHRyKQoreworCWl0ZW1fY3VyLT5u
b2RlLmRhdGEgPSBwdHI7Cit9CisKK3ZvaWQgaXRlbV9zZXRfc2VsZWN0ZWQoaW50IHZhbCkKK3sK
KwlpdGVtX2N1ci0+bm9kZS5zZWxlY3RlZCA9IHZhbDsKK30KKworaW50IGl0ZW1fYWN0aXZhdGVf
c2VsZWN0ZWQodm9pZCkKK3sKKwlpdGVtX2ZvcmVhY2goKQorCQlpZiAoaXRlbV9pc19zZWxlY3Rl
ZCgpKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgKml0ZW1fZGF0YSh2b2lk
KQoreworCXJldHVybiBpdGVtX2N1ci0+bm9kZS5kYXRhOworfQorCitjaGFyIGl0ZW1fdGFnKHZv
aWQpCit7CisJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLnRhZzsKK30KKworaW50IGl0ZW1fY291bnQo
dm9pZCkKK3sKKwlpbnQgbiA9IDA7CisJc3RydWN0IGRpYWxvZ19saXN0ICpwOworCisJZm9yIChw
ID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+bmV4dCkKKwkJbisrOworCXJldHVybiBuOworfQorCit2
b2lkIGl0ZW1fc2V0KGludCBuKQoreworCWludCBpID0gMDsKKwlpdGVtX2ZvcmVhY2goKQorCQlp
ZiAoaSsrID09IG4pCisJCQlyZXR1cm47Cit9CisKK2ludCBpdGVtX24odm9pZCkKK3sKKwlpbnQg
biA9IDA7CisJc3RydWN0IGRpYWxvZ19saXN0ICpwOworCisJZm9yIChwID0gaXRlbV9oZWFkOyBw
OyBwID0gcC0+bmV4dCkgeworCQlpZiAocCA9PSBpdGVtX2N1cikKKwkJCXJldHVybiBuOworCQlu
Kys7CisJfQorCXJldHVybiAwOworfQorCitjb25zdCBjaGFyICppdGVtX3N0cih2b2lkKQorewor
CXJldHVybiBpdGVtX2N1ci0+bm9kZS5zdHI7Cit9CisKK2ludCBpdGVtX2lzX3NlbGVjdGVkKHZv
aWQpCit7CisJcmV0dXJuIChpdGVtX2N1ci0+bm9kZS5zZWxlY3RlZCAhPSAwKTsKK30KKworaW50
IGl0ZW1faXNfdGFnKGNoYXIgdGFnKQoreworCXJldHVybiAoaXRlbV9jdXItPm5vZGUudGFnID09
IHRhZyk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cveWVzbm8uYyBi
L3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmJjYWFjOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcv
bHhkaWFsb2cveWVzbm8uYwpAQCAtMCwwICsxLDEwMSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjArCisvKgorICogIHllc25vLmMgLS0gaW1wbGVtZW50cyB0aGUgeWVzL25v
IGJveAorICoKKyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsu
aGspCisgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9h
ZGNhcCAocm9hZGNhcEBjZncuY29tKQorICovCisKKyNpbmNsdWRlICJkaWFsb2cuaCIKKworLyoK
KyAqIERpc3BsYXkgdGVybWluYXRpb24gYnV0dG9ucworICovCitzdGF0aWMgdm9pZCBwcmludF9i
dXR0b25zKFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0
ZWQpCit7CisJaW50IHggPSB3aWR0aCAvIDIgLSAxMDsKKwlpbnQgeSA9IGhlaWdodCAtIDI7CisK
KwlwcmludF9idXR0b24oZGlhbG9nLCAiIFllcyAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsKKwlw
cmludF9idXR0b24oZGlhbG9nLCAiICBObyAgIiwgeSwgeCArIDEzLCBzZWxlY3RlZCA9PSAxKTsK
KworCXdtb3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxMyAqIHNlbGVjdGVkKTsKKwl3cmVmcmVzaChk
aWFsb2cpOworfQorCisvKgorICogRGlzcGxheSBhIGRpYWxvZyBib3ggd2l0aCB0d28gYnV0dG9u
cyAtIFllcyBhbmQgTm8KKyAqLworaW50IGRpYWxvZ195ZXNubyhjb25zdCBjaGFyICp0aXRsZSwg
Y29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpCit7CisJaW50IGksIHgs
IHksIGtleSA9IDAsIGJ1dHRvbiA9IDA7CisJV0lORE9XICpkaWFsb2c7CisKK2RvX3Jlc2l6ZToK
KwlpZiAoZ2V0bWF4eShzdGRzY3IpIDwgKGhlaWdodCArIFlFU05PX0hFSUdUSF9NSU4pKQorCQly
ZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsKKwlpZiAoZ2V0bWF4eChzdGRzY3IpIDwgKHdpZHRo
ICsgWUVTTk9fV0lEVEhfTUlOKSkKKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7CisKKwkv
KiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8KKwl4ID0gKGdldG1heHgoc3Rkc2NyKSAt
IHdpZHRoKSAvIDI7CisJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsKKworCWRy
YXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7CisKKwlkaWFsb2cgPSBuZXd3
aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7CisJa2V5cGFkKGRpYWxvZywgVFJVRSk7CisKKwlkcmF3
X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsCisJCSBkbGcuZGlhbG9nLmF0ciwgZGxn
LmJvcmRlci5hdHIpOworCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOworCW12d2Fk
ZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOworCWZvciAoaSA9IDA7IGkgPCB3
aWR0aCAtIDI7IGkrKykKKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsKKwl3YXR0cnNldChk
aWFsb2csIGRsZy5kaWFsb2cuYXRyKTsKKwl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7CisKKwlw
cmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7CisKKwl3YXR0cnNldChkaWFsb2csIGRs
Zy5kaWFsb2cuYXRyKTsKKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAy
LCAxLCAzKTsKKworCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsKKwor
CXdoaWxlIChrZXkgIT0gS0VZX0VTQykgeworCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsKKwkJc3dp
dGNoIChrZXkpIHsKKwkJY2FzZSAnWSc6CisJCWNhc2UgJ3knOgorCQkJZGVsd2luKGRpYWxvZyk7
CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAnTic6CisJCWNhc2UgJ24nOgorCQkJZGVsd2luKGRpYWxv
Zyk7CisJCQlyZXR1cm4gMTsKKworCQljYXNlIFRBQjoKKwkJY2FzZSBLRVlfTEVGVDoKKwkJY2Fz
ZSBLRVlfUklHSFQ6CisJCQlidXR0b24gPSAoKGtleSA9PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDog
KytidXR0b24pIDwgMCkgPyAxIDogKGJ1dHRvbiA+IDEgPyAwIDogYnV0dG9uKTsKKworCQkJcHJp
bnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIGJ1dHRvbik7CisJCQl3cmVmcmVzaChk
aWFsb2cpOworCQkJYnJlYWs7CisJCWNhc2UgJyAnOgorCQljYXNlICdcbic6CisJCQlkZWx3aW4o
ZGlhbG9nKTsKKwkJCXJldHVybiBidXR0b247CisJCWNhc2UgS0VZX0VTQzoKKwkJCWtleSA9IG9u
X2tleV9lc2MoZGlhbG9nKTsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9SRVNJWkU6CisJCQlkZWx3
aW4oZGlhbG9nKTsKKwkJCW9uX2tleV9yZXNpemUoKTsKKwkJCWdvdG8gZG9fcmVzaXplOworCQl9
CisJfQorCisJZGVsd2luKGRpYWxvZyk7CisJcmV0dXJuIGtleTsJCS8qIEVTQyBwcmVzc2VkICov
Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbWNvbmYtY2ZnLnNoIGIvc3VwcG9ydC9r
Y29uZmlnL21jb25mLWNmZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5j
ODEyODcyCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL21jb25mLWNmZy5zaApA
QCAtMCwwICsxLDQ3IEBACisjIS9iaW4vc2gKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAKKworUEtHPSJuY3Vyc2VzdyIKK1BLRzI9Im5jdXJzZXMiCisKK2lmIFsgLW4gIiQoY29t
bWFuZCAtdiBwa2ctY29uZmlnKSIgXTsgdGhlbgorCWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBL
RzsgdGhlbgorCQllY2hvIGNmbGFncz1cIiQocGtnLWNvbmZpZyAtLWNmbGFncyAkUEtHKVwiCisJ
CWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRylcIgorCQlleGl0IDAKKwlmaQor
CisJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHMjsgdGhlbgorCQllY2hvIGNmbGFncz1cIiQo
cGtnLWNvbmZpZyAtLWNmbGFncyAkUEtHMilcIgorCQllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcg
LS1saWJzICRQS0cyKVwiCisJCWV4aXQgMAorCWZpCitmaQorCisjIENoZWNrIHRoZSBkZWZhdWx0
IHBhdGhzIGluIGNhc2UgcGtnLWNvbmZpZyBpcyBub3QgaW5zdGFsbGVkLgorIyAoRXZlbiBpZiBp
dCBpcyBpbnN0YWxsZWQsIHNvbWUgZGlzdHJpYnV0aW9ucyBzdWNoIGFzIG9wZW5TVVNFIGNhbm5v
dAorIyBmaW5kIG5jdXJzZXMgYnkgcGtnLWNvbmZpZy4pCitpZiBbIC1mIC91c3IvaW5jbHVkZS9u
Y3Vyc2Vzdy9uY3Vyc2VzLmggXTsgdGhlbgorCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRSAt
SS91c3IvaW5jbHVkZS9uY3Vyc2Vzd1wiCisJZWNobyBsaWJzPVwiLWxuY3Vyc2Vzd1wiCisJZXhp
dCAwCitmaQorCitpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzL25jdXJzZXMuaCBdOyB0aGVu
CisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXNcIgor
CWVjaG8gbGlicz1cIi1sbmN1cnNlc1wiCisJZXhpdCAwCitmaQorCitpZiBbIC1mIC91c3IvaW5j
bHVkZS9uY3Vyc2VzLmggXTsgdGhlbgorCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRVwiCisJ
ZWNobyBsaWJzPVwiLWxuY3Vyc2VzXCIKKwlleGl0IDAKK2ZpCisKK2VjaG8gPiYyICIqIgorZWNo
byA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIG5jdXJzZXMgcGFja2FnZS4iCitlY2hvID4mMiAi
KiBJbnN0YWxsIG5jdXJzZXMgKG5jdXJzZXMtZGV2ZWwgb3IgbGlibmN1cnNlcy1kZXYiCitlY2hv
ID4mMiAiKiBkZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24pLiIKK2VjaG8gPiYyICIqIgor
ZXhpdCAxCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbWNvbmYuYyBiL3N1cHBvcnQva2Nv
bmZpZy9tY29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYzRhNjIK
LS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvbWNvbmYuYwpAQCAtMCwwICsxLDEw
MzkgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJp
Z2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICoKKyAq
IEludHJvZHVjZWQgc2luZ2xlIG1lbnUgbW9kZSAoc2hvdyBhbGwgc3ViLW1lbnVzIGluIG9uZSBs
YXJnZSB0cmVlKS4KKyAqIDIwMDItMTEtMDYgUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4KKyAq
CisgKiBpMThuLCAyMDA1LCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZh
LmNvbS5icj4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8
c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKyNpbmNs
dWRlICJseGRpYWxvZy9kaWFsb2cuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgbWNvbmZfcmVhZG1l
W10gPQorIk92ZXJ2aWV3XG4iCisiLS0tLS0tLS1cbiIKKyJUaGlzIGludGVyZmFjZSBsZXRzIHlv
dSBzZWxlY3QgZmVhdHVyZXMgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBidWlsZC5cbiIKKyJGZWF0
dXJlcyBjYW4gZWl0aGVyIGJlIGJ1aWx0LWluLCBtb2R1bGFyaXplZCwgb3IgaWdub3JlZC4gUGFy
YW1ldGVyc1xuIgorIm11c3QgYmUgZW50ZXJlZCBpbiBhcyBkZWNpbWFsIG9yIGhleGFkZWNpbWFs
IG51bWJlcnMgb3IgdGV4dC5cbiIKKyJcbiIKKyJNZW51IGl0ZW1zIGJlZ2lubmluZyB3aXRoIGZv
bGxvd2luZyBicmFjZXMgcmVwcmVzZW50IGZlYXR1cmVzIHRoYXRcbiIKKyIgIFsgXSBjYW4gYmUg
YnVpbHQgaW4gb3IgcmVtb3ZlZFxuIgorIiAgPCA+IGNhbiBiZSBidWlsdCBpbiwgbW9kdWxhcml6
ZWQgb3IgcmVtb3ZlZFxuIgorIiAgeyB9IGNhbiBiZSBidWlsdCBpbiBvciBtb2R1bGFyaXplZCAo
c2VsZWN0ZWQgYnkgb3RoZXIgZmVhdHVyZSlcbiIKKyIgIC0gLSBhcmUgc2VsZWN0ZWQgYnkgb3Ro
ZXIgZmVhdHVyZSxcbiIKKyJ3aGlsZSAqLCBNIG9yIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNlcyBt
ZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXNcbiIKKyJhIG1vZHVsZSBvciB0byBleGNsdWRlIHRo
ZSBmZWF0dXJlIHJlc3BlY3RpdmVseS5cbiIKKyJcbiIKKyJUbyBjaGFuZ2UgYW55IG9mIHRoZXNl
IGZlYXR1cmVzLCBoaWdobGlnaHQgaXQgd2l0aCB0aGUgY3Vyc29yXG4iCisia2V5cyBhbmQgcHJl
c3MgPFk+IHRvIGJ1aWxkIGl0IGluLCA8TT4gdG8gbWFrZSBpdCBhIG1vZHVsZSBvclxuIgorIjxO
PiB0byByZW1vdmUgaXQuICBZb3UgbWF5IGFsc28gcHJlc3MgdGhlIDxTcGFjZSBCYXI+IHRvIGN5
Y2xlXG4iCisidGhyb3VnaCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMgKGkuZS4gWS0+Ti0+TS0+WSku
XG4iCisiXG4iCisiU29tZSBhZGRpdGlvbmFsIGtleWJvYXJkIGhpbnRzOlxuIgorIlxuIgorIk1l
bnVzXG4iCisiLS0tLS0tLS0tLVxuIgorIm8gIFVzZSB0aGUgVXAvRG93biBhcnJvdyBrZXlzIChj
dXJzb3Iga2V5cykgdG8gaGlnaGxpZ2h0IHRoZSBpdGVtIHlvdVxuIgorIiAgIHdpc2ggdG8gY2hh
bmdlIG9yIHRoZSBzdWJtZW51IHlvdSB3aXNoIHRvIHNlbGVjdCBhbmQgcHJlc3MgPEVudGVyPi5c
biIKKyIgICBTdWJtZW51cyBhcmUgZGVzaWduYXRlZCBieSBcIi0tLT5cIiwgZW1wdHkgb25lcyBi
eSBcIi0tLS1cIi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgdGhlIG9wdGlvbidzIGhp
Z2hsaWdodGVkIGxldHRlciAoaG90a2V5KS5cbiIKKyIgICAgICAgICAgICAgUHJlc3NpbmcgYSBo
b3RrZXkgbW9yZSB0aGFuIG9uY2Ugd2lsbCBzZXF1ZW5jZVxuIgorIiAgICAgICAgICAgICB0aHJv
dWdoIGFsbCB2aXNpYmxlIGl0ZW1zIHdoaWNoIHVzZSB0aGF0IGhvdGtleS5cbiIKKyJcbiIKKyIg
ICBZb3UgbWF5IGFsc28gdXNlIHRoZSA8UEFHRSBVUD4gYW5kIDxQQUdFIERPV04+IGtleXMgdG8g
c2Nyb2xsXG4iCisiICAgdW5zZWVuIG9wdGlvbnMgaW50byB2aWV3LlxuIgorIlxuIgorIm8gIFRv
IGV4aXQgYSBtZW51IHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IHRoZSA8RXhpdD4g
YnV0dG9uXG4iCisiICAgYW5kIHByZXNzIDxFTlRFUj4uXG4iCisiXG4iCisiICAgU2hvcnRjdXQ6
IFByZXNzIDxFU0M+PEVTQz4gb3IgPEU+IG9yIDxYPiBpZiB0aGVyZSBpcyBubyBob3RrZXlcbiIK
KyIgICAgICAgICAgICAgdXNpbmcgdGhvc2UgbGV0dGVycy4gIFlvdSBtYXkgcHJlc3MgYSBzaW5n
bGUgPEVTQz4sIGJ1dFxuIgorIiAgICAgICAgICAgICB0aGVyZSBpcyBhIGRlbGF5ZWQgcmVzcG9u
c2Ugd2hpY2ggeW91IG1heSBmaW5kIGFubm95aW5nLlxuIgorIlxuIgorIiAgIEFsc28sIHRoZSA8
VEFCPiBhbmQgY3Vyc29yIGtleXMgd2lsbCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+LFxuIgorIiAg
IDxFeGl0PiwgPEhlbHA+LCA8U2F2ZT4sIGFuZCA8TG9hZD4uXG4iCisiXG4iCisibyAgVG8gZ2V0
IGhlbHAgd2l0aCBhbiBpdGVtLCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCA8SGVs
cD5cbiIKKyIgICBhbmQgcHJlc3MgPEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJl
c3MgPEg+IG9yIDw/Pi5cbiIKKyJcbiIKKyJvICBUbyB0b2dnbGUgdGhlIGRpc3BsYXkgb2YgaGlk
ZGVuIG9wdGlvbnMsIHByZXNzIDxaPi5cbiIKKyJcbiIKKyJcbiIKKyJSYWRpb2xpc3RzICAoQ2hv
aWNlIGxpc3RzKVxuIgorIi0tLS0tLS0tLS0tXG4iCisibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0
byBzZWxlY3QgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXQgYW5kIHByZXNzXG4iCisiICAgPFM+
IG9yIHRoZSA8U1BBQ0UgQkFSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1dDogUHJlc3MgdGhlIGZp
cnN0IGxldHRlciBvZiB0aGUgb3B0aW9uIHlvdSB3aXNoIHRvIHNldCB0aGVuXG4iCisiICAgICAg
ICAgICAgIHByZXNzIDxTPiBvciA8U1BBQ0UgQkFSPi5cbiIKKyJcbiIKKyJvICBUbyBzZWUgYXZh
aWxhYmxlIGhlbHAgZm9yIHRoZSBpdGVtLCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdo
dFxuIgorIiAgIDxIZWxwPiBhbmQgUHJlc3MgPEVOVEVSPi5cbiIKKyJcbiIKKyIgICBTaG9ydGN1
dDogUHJlc3MgPEg+IG9yIDw/Pi5cbiIKKyJcbiIKKyIgICBBbHNvLCB0aGUgPFRBQj4gYW5kIGN1
cnNvciBrZXlzIHdpbGwgY3ljbGUgYmV0d2VlbiA8U2VsZWN0PiBhbmRcbiIKKyIgICA8SGVscD5c
biIKKyJcbiIKKyJcbiIKKyJEYXRhIEVudHJ5XG4iCisiLS0tLS0tLS0tLS1cbiIKKyJvICBFbnRl
ciB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFuZCBwcmVzcyA8RU5URVI+XG4iCisiICAgSWYg
eW91IGFyZSBlbnRlcmluZyBoZXhhZGVjaW1hbCB2YWx1ZXMsIGl0IGlzIG5vdCBuZWNlc3Nhcnkg
dG9cbiIKKyIgICBhZGQgdGhlICcweCcgcHJlZml4IHRvIHRoZSBlbnRyeS5cbiIKKyJcbiIKKyJv
ICBGb3IgaGVscCwgdXNlIHRoZSA8VEFCPiBvciBjdXJzb3Iga2V5cyB0byBoaWdobGlnaHQgdGhl
IGhlbHAgb3B0aW9uXG4iCisiICAgYW5kIHByZXNzIDxFTlRFUj4uICBZb3UgY2FuIHRyeSA8VEFC
PjxIPiBhcyB3ZWxsLlxuIgorIlxuIgorIlxuIgorIlRleHQgQm94ICAgIChIZWxwIFdpbmRvdylc
biIKKyItLS0tLS0tLVxuIgorIm8gIFVzZSB0aGUgY3Vyc29yIGtleXMgdG8gc2Nyb2xsIHVwL2Rv
d24vbGVmdC9yaWdodC4gIFRoZSBWSSBlZGl0b3JcbiIKKyIgICBrZXlzIGgsaixrLGwgZnVuY3Rp
b24gaGVyZSBhcyBkbyA8dT4sIDxkPiwgPFNQQUNFIEJBUj4gYW5kIDxCPiBmb3JcbiIKKyIgICB0
aG9zZSB3aG8gYXJlIGZhbWlsaWFyIHdpdGggbGVzcyBhbmQgbHlueC5cbiIKKyJcbiIKKyJvICBQ
cmVzcyA8RT4sIDxYPiwgPHE+LCA8RW50ZXI+IG9yIDxFc2M+PEVzYz4gdG8gZXhpdC5cbiIKKyJc
biIKKyJcbiIKKyJBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiBGaWxlc1xuIgorIi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tXG4iCisiTWVudWNvbmZpZyBzdXBwb3J0cyB0aGUgdXNlIG9mIGFs
dGVybmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvclxuIgorInRob3NlIHdobywgZm9yIHZhcmlv
dXMgcmVhc29ucywgZmluZCBpdCBuZWNlc3NhcnkgdG8gc3dpdGNoXG4iCisiYmV0d2VlbiBkaWZm
ZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iCisiXG4iCisiVGhlIDxTYXZlPiBidXR0b24gd2lsbCBs
ZXQgeW91IHNhdmUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0b1xuIgorImEgZmlsZSBvZiB5
b3VyIGNob29zaW5nLiAgVXNlIHRoZSA8TG9hZD4gYnV0dG9uIHRvIGxvYWQgYSBwcmV2aW91c2x5
XG4iCisic2F2ZWQgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24uXG4iCisiXG4iCisiRXZlbiBpZiB5
b3UgZG9uJ3QgdXNlIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzLCBidXQgeW91IGZpbmRc
biIKKyJkdXJpbmcgYSBNZW51Y29uZmlnIHNlc3Npb24gdGhhdCB5b3UgaGF2ZSBjb21wbGV0ZWx5
IG1lc3NlZCB1cCB5b3VyXG4iCisic2V0dGluZ3MsIHlvdSBtYXkgdXNlIHRoZSA8TG9hZD4gYnV0
dG9uIHRvIHJlc3RvcmUgeW91ciBwcmV2aW91c2x5XG4iCisic2F2ZWQgc2V0dGluZ3MgZnJvbSBc
Ii5jb25maWdcIiB3aXRob3V0IHJlc3RhcnRpbmcgTWVudWNvbmZpZy5cbiIKKyJcbiIKKyJPdGhl
ciBpbmZvcm1hdGlvblxuIgorIi0tLS0tLS0tLS0tLS0tLS0tXG4iCisiSWYgeW91IHVzZSBNZW51
Y29uZmlnIGluIGFuIFhURVJNIHdpbmRvdywgbWFrZSBzdXJlIHlvdSBoYXZlIHlvdXJcbiIKKyIk
VEVSTSB2YXJpYWJsZSBzZXQgdG8gcG9pbnQgdG8gYW4geHRlcm0gZGVmaW5pdGlvbiB3aGljaCBz
dXBwb3J0c1xuIgorImNvbG9yLiAgT3RoZXJ3aXNlLCBNZW51Y29uZmlnIHdpbGwgbG9vayByYXRo
ZXIgYmFkLiAgTWVudWNvbmZpZyB3aWxsXG4iCisibm90IGRpc3BsYXkgY29ycmVjdGx5IGluIGFu
IFJYVlQgd2luZG93IGJlY2F1c2Ugcnh2dCBkaXNwbGF5cyBvbmx5IG9uZVxuIgorImludGVuc2l0
eSBvZiBjb2xvciwgYnJpZ2h0LlxuIgorIlxuIgorIk1lbnVjb25maWcgd2lsbCBkaXNwbGF5IGxh
cmdlciBtZW51cyBvbiBzY3JlZW5zIG9yIHh0ZXJtcyB3aGljaCBhcmVcbiIKKyJzZXQgdG8gZGlz
cGxheSBtb3JlIHRoYW4gdGhlIHN0YW5kYXJkIDI1IHJvdyBieSA4MCBjb2x1bW4gZ2VvbWV0cnku
XG4iCisiSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgdGhlIFwic3R0eSBzaXplXCIgY29tbWFu
ZCBtdXN0IGJlIGFibGUgdG9cbiIKKyJkaXNwbGF5IHRoZSBzY3JlZW4ncyBjdXJyZW50IHJvdyBh
bmQgY29sdW1uIGdlb21ldHJ5LiAgSSBTVFJPTkdMWVxuIgorIlJFQ09NTUVORCB0aGF0IHlvdSBt
YWtlIHN1cmUgeW91IGRvIE5PVCBoYXZlIHRoZSBzaGVsbCB2YXJpYWJsZXNcbiIKKyJMSU5FUyBh
bmQgQ09MVU1OUyBleHBvcnRlZCBpbnRvIHlvdXIgZW52aXJvbm1lbnQuICBTb21lIGRpc3RyaWJ1
dGlvbnNcbiIKKyJleHBvcnQgdGhvc2UgdmFyaWFibGVzIHZpYSAvZXRjL3Byb2ZpbGUuICBTb21l
IG5jdXJzZXMgcHJvZ3JhbXMgY2FuXG4iCisiYmVjb21lIGNvbmZ1c2VkIHdoZW4gdGhvc2UgdmFy
aWFibGVzIChMSU5FUyAmIENPTFVNTlMpIGRvbid0IHJlZmxlY3RcbiIKKyJ0aGUgdHJ1ZSBzY3Jl
ZW4gc2l6ZS5cbiIKKyJcbiIKKyJPcHRpb25hbCBwZXJzb25hbGl0eSBhdmFpbGFibGVcbiIKKyIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJJZiB5b3UgcHJlZmVyIHRvIGhhdmUg
YWxsIG9mIHRoZSBvcHRpb25zIGxpc3RlZCBpbiBhIHNpbmdsZSBtZW51LFxuIgorInJhdGhlciB0
aGFuIHRoZSBkZWZhdWx0IG11bHRpbWVudSBoaWVyYXJjaHksIHJ1biB0aGUgbWVudWNvbmZpZyB3
aXRoXG4iCisiTUVOVUNPTkZJR19NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5n
bGVfbWVudS4gRXhhbXBsZTpcbiIKKyJcbiIKKyJtYWtlIE1FTlVDT05GSUdfTU9ERT1zaW5nbGVf
bWVudSBtZW51Y29uZmlnXG4iCisiXG4iCisiPEVudGVyPiB3aWxsIHRoZW4gdW5yb2xsIHRoZSBh
cHByb3ByaWF0ZSBjYXRlZ29yeSwgb3IgZW5mb2xkIGl0IGlmIGl0XG4iCisiaXMgYWxyZWFkeSB1
bnJvbGxlZC5cbiIKKyJcbiIKKyJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5IGJl
IGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZVxuIgorIihlc3BlY2lhbGx5IHdpdGggYSBsYXJn
ZXIgbnVtYmVyIG9mIHVucm9sbGVkIGNhdGVnb3JpZXMpIHRoYW4gdGhlXG4iCisiZGVmYXVsdCBt
b2RlLlxuIgorIlxuIgorIkRpZmZlcmVudCBjb2xvciB0aGVtZXMgYXZhaWxhYmxlXG4iCisiLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyJJdCBpcyBwb3NzaWJsZSB0byBzZWxl
Y3QgZGlmZmVyZW50IGNvbG9yIHRoZW1lcyB1c2luZyB0aGUgdmFyaWFibGVcbiIKKyJNRU5VQ09O
RklHX0NPTE9SLiBUbyBzZWxlY3QgYSB0aGVtZSB1c2U6XG4iCisiXG4iCisibWFrZSBNRU5VQ09O
RklHX0NPTE9SPTx0aGVtZT4gbWVudWNvbmZpZ1xuIgorIlxuIgorIkF2YWlsYWJsZSB0aGVtZXMg
YXJlXG4iCisiIG1vbm8gICAgICAgPT4gc2VsZWN0cyBjb2xvcnMgc3VpdGFibGUgZm9yIG1vbm9j
aHJvbWUgZGlzcGxheXNcbiIKKyIgYmxhY2tiZyAgICA9PiBzZWxlY3RzIGEgY29sb3Igc2NoZW1l
IHdpdGggYmxhY2sgYmFja2dyb3VuZFxuIgorIiBjbGFzc2ljICAgID0+IHRoZW1lIHdpdGggYmx1
ZSBiYWNrZ3JvdW5kLiBUaGUgY2xhc3NpYyBsb29rXG4iCisiIGJsdWV0aXRsZSAgPT4gYW4gTENE
IGZyaWVuZGx5IHZlcnNpb24gb2YgY2xhc3NpYy4gKGRlZmF1bHQpXG4iCisiXG4iLAorbWVudV9p
bnN0cnVjdGlvbnNbXSA9CisJIkFycm93IGtleXMgbmF2aWdhdGUgdGhlIG1lbnUuICAiCisJIjxF
bnRlcj4gc2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBlbXB0eSBzdWJtZW51cyAtLS0tKS4gICIK
KwkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICIKKwkiUHJlc3NpbmcgPFk+IHNl
bGVjdHMgYSBmZWF0dXJlLCB3aGlsZSA8Tj4gd2lsbCBleGNsdWRlIGEgZmVhdHVyZS4gICIKKwki
UHJlc3MgPEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAg
IgorCSJMZWdlbmQ6IFsqXSBmZWF0dXJlIGlzIHNlbGVjdGVkICBbIF0gZmVhdHVyZSBpcyBleGNs
dWRlZCIsCityYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQorCSJVc2UgdGhlIGFycm93IGtleXMg
dG8gbmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIgorCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBp
dGVtIHlvdSB3aXNoIHRvIHNlbGVjdCAiCisJImZvbGxvd2VkIGJ5IHRoZSA8U1BBQ0UgQkFSPi4g
IgorCSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBvcHRp
b24uIiwKK2lucHV0Ym94X2luc3RydWN0aW9uc19pbnRbXSA9CisJIlBsZWFzZSBlbnRlciBhIGRl
Y2ltYWwgdmFsdWUuICIKKwkiRnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgIgorCSJV
c2UgdGhlIDxUQUI+IGtleSB0byBtb3ZlIGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0
b25zIGJlbG93IGl0LiIsCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQorCSJQbGVhc2Ug
ZW50ZXIgYSBoZXhhZGVjaW1hbCB2YWx1ZS4gIgorCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3Zl
IGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsCitpbnB1dGJv
eF9pbnN0cnVjdGlvbnNfc3RyaW5nW10gPQorCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUu
ICIKKwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0
aGUgYnV0dG9ucyBiZWxvdyBpdC4iLAorc2V0bW9kX3RleHRbXSA9CisJIlRoaXMgZmVhdHVyZSBk
ZXBlbmRzIG9uIGFub3RoZXIgd2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhIG1vZHVsZS5c
biIKKwkiQXMgYSByZXN1bHQsIHRoaXMgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxl
LiIsCitsb2FkX2NvbmZpZ190ZXh0W10gPQorCSJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmln
dXJhdGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuICAiCisJIkFjY2VwdCB0aGUgbmFtZSBzaG93
biB0byByZXN0b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdSAiCisJImxhc3QgcmV0cmlldmVkLiAg
TGVhdmUgYmxhbmsgdG8gYWJvcnQuIiwKK2xvYWRfY29uZmlnX2hlbHBbXSA9CisJIlxuIgorCSJG
b3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVu
dFxuIgorCSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiIK
KwkiXG4iCisJIklmIHlvdSBoYXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBh
IGZpbGUgb3RoZXIgdGhhbiB0aGVcbiIKKwkiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1l
IGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbW9kaWZ5IHRoYXRcbiIKKwkiY29uZmlndXJhdGlvbi5c
biIKKwkiXG4iCisJIklmIHlvdSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5
IG5ldmVyIHVzZWQgYWx0ZXJuYXRlXG4iCisJImNvbmZpZ3VyYXRpb24gZmlsZXMuIFlvdSBzaG91
bGQgdGhlcmVmb3JlIGxlYXZlIHRoaXMgYmxhbmsgdG8gYWJvcnQuXG4iLAorc2F2ZV9jb25maWdf
dGV4dFtdID0KKwkiRW50ZXIgYSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24g
c2hvdWxkIGJlIHNhdmVkICIKKwkiYXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgYmxhbmsgdG8gYWJv
cnQuIiwKK3NhdmVfY29uZmlnX2hlbHBbXSA9CisJIlxuIgorCSJGb3IgdmFyaW91cyByZWFzb25z
LCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiIKKwkiYXZh
aWxhYmxlIG9uIGEgc2luZ2xlIG1hY2hpbmUuXG4iCisJIlxuIgorCSJFbnRlcmluZyBhIGZpbGUg
bmFtZSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIGxhdGVyIHJldHJpZXZlLCBtb2RpZnlcbiIKKwki
YW5kIHVzZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0
ZXZlclxuIgorCSJjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhh
dCB0aW1lLlxuIgorCSJcbiIKKwkiSWYgeW91IGFyZSB1bmNlcnRhaW4gd2hhdCBhbGwgdGhpcyBt
ZWFucyB0aGVuIHlvdSBzaG91bGQgcHJvYmFibHlcbiIKKwkibGVhdmUgdGhpcyBibGFuay5cbiIs
CitzZWFyY2hfaGVscFtdID0KKwkiXG4iCisJIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlzcGxh
eSB0aGVpciByZWxhdGlvbnMuXG4iCisJIlJlZ3VsYXIgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQu
XG4iCisJIkV4YW1wbGU6IHNlYXJjaCBmb3IgXCJeRk9PXCJcbiIKKwkiUmVzdWx0OlxuIgorCSIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVxuIgorCSJTeW1ib2w6IEZPTyBbPW1dXG4iCisJIlR5cGUgIDogdHJpc3RhdGVcbiIK
KwkiUHJvbXB0OiBGb28gYnVzIGlzIHVzZWQgdG8gZHJpdmUgdGhlIGJhciBIV1xuIgorCSIgIExv
Y2F0aW9uOlxuIgorCSIgICAgLT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0Ep
XG4iCisJIiAgICAgIC0+IFBDSSBzdXBwb3J0IChQQ0kgWz15XSlcbiIKKwkiKDEpICAgICAtPiBQ
Q0kgYWNjZXNzIG1vZGUgKDxjaG9pY2U+IFs9eV0pXG4iCisJIiAgRGVmaW5lZCBhdCBkcml2ZXJz
L3BjaS9LY29uZmlnOjQ3XG4iCisJIiAgRGVwZW5kcyBvbjogWDg2X0xPQ0FMX0FQSUMgJiYgWDg2
X0lPX0FQSUMgfHwgSUE2NFxuIgorCSIgIFNlbGVjdHM6IExJQkNSQzMyXG4iCisJIiAgU2VsZWN0
ZWQgYnk6IEJBUiBbPW5dXG4iCisJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJIm8gVGhlIGxpbmUgJ1R5cGU6JyBz
aG93cyB0aGUgdHlwZSBvZiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yXG4iCisJIiAgdGhp
cyBzeW1ib2wgKGJvb2wsIHRyaXN0YXRlLCBzdHJpbmcsIC4uLilcbiIKKwkibyBUaGUgbGluZSAn
UHJvbXB0Oicgc2hvd3MgdGhlIHRleHQgdXNlZCBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgZm9yXG4i
CisJIiAgdGhpcyBzeW1ib2xcbiIKKwkibyBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQg
d2hhdCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIgorCSIgIGlzIGRlZmluZWRcbiIK
KwkibyBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyBuZWVkIHRvIGJl
IGRlZmluZWQgZm9yXG4iCisJIiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVu
dSAoc2VsZWN0YWJsZSlcbiIKKwkibyBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVsbHMgd2hlcmUg
aW4gdGhlIG1lbnUgc3RydWN0dXJlIHRoaXMgc3ltYm9sXG4iCisJIiAgaXMgbG9jYXRlZFxuIgor
CSIgICAgQSBsb2NhdGlvbiBmb2xsb3dlZCBieSBhIFs9eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBp
cyBhXG4iCisJIiAgICBzZWxlY3RhYmxlIG1lbnUgaXRlbSAtIGFuZCB0aGUgY3VycmVudCB2YWx1
ZSBpcyBkaXNwbGF5ZWQgaW5zaWRlXG4iCisJIiAgICBicmFja2V0cy5cbiIKKwkiICAgIFByZXNz
IHRoZSBrZXkgaW4gdGhlICgjKSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iCisJ
IiAgICBsb2NhdGlvbi4gWW91IHdpbGwgYmUgcmV0dXJuZWQgdG8gdGhlIGN1cnJlbnQgc2VhcmNo
IHJlc3VsdHNcbiIKKwkiICAgIGFmdGVyIGV4aXRpbmcgdGhpcyBuZXcgbWVudS5cbiIKKwkibyBU
aGUgJ1NlbGVjdHM6JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyB3aWxsIGJlIGF1dG9tYXRpY2Fs
bHlcbiIKKwkiICBzZWxlY3RlZCBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKVxu
IgorCSJvIFRoZSAnU2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVj
dGVkIHRoaXMgc3ltYm9sXG4iCisJIlxuIgorCSJPbmx5IHJlbGV2YW50IGxpbmVzIGFyZSBzaG93
bi5cbiIKKwkiXG5cbiIKKwkiU2VhcmNoIGV4YW1wbGVzOlxuIgorCSJFeGFtcGxlczogVVNCCT0+
IGZpbmQgYWxsIHN5bWJvbHMgY29udGFpbmluZyBVU0JcbiIKKwkiICAgICAgICAgIF5VU0IgPT4g
ZmluZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxuIgorCSIgICAgICAgICAgVVNCJCA9
PiBmaW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIgorCSJcbiI7CisKK3N0YXRpYyBp
bnQgaW5kZW50Oworc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7CitzdGF0aWMgaW50
IGNoaWxkX2NvdW50Oworc3RhdGljIGludCBzaW5nbGVfbWVudV9tb2RlOworc3RhdGljIGludCBz
aG93X2FsbF9vcHRpb25zOworc3RhdGljIGludCBzYXZlX2FuZF9leGl0Oworc3RhdGljIGludCBz
aWxlbnQ7CisKK3N0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBtZW51
ICphY3RpdmVfbWVudSk7CitzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVu
dSk7CitzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMg
dm9pZCBjb25mX2xvYWQodm9pZCk7CitzdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7CitzdGF0
aWMgaW50IHNob3dfdGV4dGJveF9leHQoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRleHQsIGlu
dCByLCBpbnQgYywKKwkJCSAgICBpbnQgKmtleXMsIGludCAqdnNjcm9sbCwgaW50ICpoc2Nyb2xs
LAorCQkJICAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsKK3N0YXRp
YyB2b2lkIHNob3dfdGV4dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqdGV4dCwg
aW50IHIsIGludCBjKTsKK3N0YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0
bGUsIGNvbnN0IGNoYXIgKnRleHQpOworc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51
ICptZW51KTsKKworc3RhdGljIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07CitzdGF0aWMgdm9p
ZCBzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKK3sKKwlz
dGF0aWMgY2hhciBtZW51X2JhY2t0aXRsZVtQQVRIX01BWCsxMjhdOworCWludCBzaXplOworCisJ
c2l6ZSA9IHNucHJpbnRmKG1lbnVfYmFja3RpdGxlLCBzaXplb2YobWVudV9iYWNrdGl0bGUpLAor
CQkJIiVzIC0gJXMiLCBjb25maWdfZmlsZW5hbWUsIHJvb3RtZW51LnByb21wdC0+dGV4dCk7CisJ
aWYgKHNpemUgPj0gc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSkKKwkJbWVudV9iYWNrdGl0bGVbc2l6
ZW9mKG1lbnVfYmFja3RpdGxlKS0xXSA9ICdcMCc7CisJc2V0X2RpYWxvZ19iYWNrdGl0bGUobWVu
dV9iYWNrdGl0bGUpOworCisJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5h
bWUpLCAiJXMiLCBjb25maWdfZmlsZW5hbWUpOworCWlmIChzaXplID49IHNpemVvZihmaWxlbmFt
ZSkpCisJCWZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAnXDAnOworfQorCitzdHJ1Y3Qg
c3VidGl0bGVfcGFydCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOworCWNvbnN0IGNoYXIg
KnRleHQ7Cit9Oworc3RhdGljIExJU1RfSEVBRCh0cmFpbCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3Vi
dGl0bGVfbGlzdCAqc3VidGl0bGVzOworc3RhdGljIHZvaWQgc2V0X3N1YnRpdGxlKHZvaWQpCit7
CisJc3RydWN0IHN1YnRpdGxlX3BhcnQgKnNwOworCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3Ms
ICp0bXA7CisKKwlmb3IgKHBvcyA9IHN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHRtcCkg
eworCQl0bXAgPSBwb3MtPm5leHQ7CisJCWZyZWUocG9zKTsKKwl9CisKKwlzdWJ0aXRsZXMgPSBO
VUxMOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3AsICZ0cmFpbCwgZW50cmllcykgeworCQlpZiAo
c3AtPnRleHQpIHsKKwkJCWlmIChwb3MpIHsKKwkJCQlwb3MtPm5leHQgPSB4Y2FsbG9jKDEsIHNp
emVvZigqcG9zKSk7CisJCQkJcG9zID0gcG9zLT5uZXh0OworCQkJfSBlbHNlIHsKKwkJCQlzdWJ0
aXRsZXMgPSBwb3MgPSB4Y2FsbG9jKDEsIHNpemVvZigqcG9zKSk7CisJCQl9CisJCQlwb3MtPnRl
eHQgPSBzcC0+dGV4dDsKKwkJfQorCX0KKworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxl
cyk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X3N1YnRpdGxlKHZvaWQpCit7CisJc3RydWN0IHN1
YnRpdGxlX2xpc3QgKnBvcywgKnRtcDsKKworCWZvciAocG9zID0gc3VidGl0bGVzOyBwb3MgIT0g
TlVMTDsgcG9zID0gdG1wKSB7CisJCXRtcCA9IHBvcy0+bmV4dDsKKwkJZnJlZShwb3MpOworCX0K
KwlzdWJ0aXRsZXMgPSBOVUxMOworCXNldF9kaWFsb2dfc3VidGl0bGVzKHN1YnRpdGxlcyk7Cit9
CisKK3N0cnVjdCBzZWFyY2hfZGF0YSB7CisJc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKKwlzdHJ1
Y3QgbWVudSAqKnRhcmdldHM7CisJaW50ICprZXlzOworfTsKKworc3RhdGljIHZvaWQgdXBkYXRl
X3RleHQoY2hhciAqYnVmLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZvaWQgKl9kYXRhKQor
eworCXN0cnVjdCBzZWFyY2hfZGF0YSAqZGF0YSA9IF9kYXRhOworCXN0cnVjdCBqdW1wX2tleSAq
cG9zOworCWludCBrID0gMDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCBkYXRhLT5oZWFk
LCBlbnRyaWVzKSB7CisJCWlmIChwb3MtPm9mZnNldCA+PSBzdGFydCAmJiBwb3MtPm9mZnNldCA8
IGVuZCkgeworCQkJY2hhciBoZWFkZXJbNF07CisKKwkJCWlmIChrIDwgSlVNUF9OQikgeworCQkJ
CWludCBrZXkgPSAnMCcgKyAocG9zLT5pbmRleCAlIEpVTVBfTkIpICsgMTsKKworCQkJCXNwcmlu
dGYoaGVhZGVyLCAiKCVjKSIsIGtleSk7CisJCQkJZGF0YS0+a2V5c1trXSA9IGtleTsKKwkJCQlk
YXRhLT50YXJnZXRzW2tdID0gcG9zLT50YXJnZXQ7CisJCQkJaysrOworCQkJfSBlbHNlIHsKKwkJ
CQlzcHJpbnRmKGhlYWRlciwgIiAgICIpOworCQkJfQorCisJCQltZW1jcHkoYnVmICsgcG9zLT5v
ZmZzZXQsIGhlYWRlciwgc2l6ZW9mKGhlYWRlcikgLSAxKTsKKwkJfQorCX0KKwlkYXRhLT5rZXlz
W2tdID0gMDsKK30KKworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYodm9pZCkKK3sKKwlzdHJ1Y3Qg
c3ltYm9sICoqc3ltX2FycjsKKwlzdHJ1Y3QgZ3N0ciByZXM7CisJc3RydWN0IGdzdHIgdGl0bGU7
CisJY2hhciAqZGlhbG9nX2lucHV0OworCWludCBkcmVzLCB2c2Nyb2xsID0gMCwgaHNjcm9sbCA9
IDA7CisJYm9vbCBhZ2FpbjsKKwlzdHJ1Y3QgZ3N0ciBzdHRleHQ7CisJc3RydWN0IHN1YnRpdGxl
X3BhcnQgc3RwYXJ0OworCisJdGl0bGUgPSBzdHJfbmV3KCk7CisJc3RyX3ByaW50ZiggJnRpdGxl
LCAiRW50ZXIgKHN1YilzdHJpbmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIgorCQkJICAgICAg
Iih3aXRoIG9yIHdpdGhvdXQgXCIlc1wiKSIsIENPTkZJR18pOworCithZ2FpbjoKKwlkaWFsb2df
Y2xlYXIoKTsKKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQ
YXJhbWV0ZXIiLAorCQkJICAgICAgc3RyX2dldCgmdGl0bGUpLAorCQkJICAgICAgMTAsIDc1LCAi
Iik7CisJc3dpdGNoIChkcmVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNlIDE6CisJCXNo
b3dfaGVscHRleHQoIlNlYXJjaCBDb25maWd1cmF0aW9uIiwgc2VhcmNoX2hlbHApOworCQlnb3Rv
IGFnYWluOworCWRlZmF1bHQ6CisJCXN0cl9mcmVlKCZ0aXRsZSk7CisJCXJldHVybjsKKwl9CisK
KwkvKiBzdHJpcCB0aGUgcHJlZml4IGlmIG5lY2Vzc2FyeSAqLworCWRpYWxvZ19pbnB1dCA9IGRp
YWxvZ19pbnB1dF9yZXN1bHQ7CisJaWYgKHN0cm5jYXNlY21wKGRpYWxvZ19pbnB1dF9yZXN1bHQs
IENPTkZJR18sIHN0cmxlbihDT05GSUdfKSkgPT0gMCkKKwkJZGlhbG9nX2lucHV0ICs9IHN0cmxl
bihDT05GSUdfKTsKKworCXN0dGV4dCA9IHN0cl9uZXcoKTsKKwlzdHJfcHJpbnRmKCZzdHRleHQs
ICJTZWFyY2ggKCVzKSIsIGRpYWxvZ19pbnB1dF9yZXN1bHQpOworCXN0cGFydC50ZXh0ID0gc3Ry
X2dldCgmc3R0ZXh0KTsKKwlsaXN0X2FkZF90YWlsKCZzdHBhcnQuZW50cmllcywgJnRyYWlsKTsK
KworCXN5bV9hcnIgPSBzeW1fcmVfc2VhcmNoKGRpYWxvZ19pbnB1dCk7CisJZG8geworCQlMSVNU
X0hFQUQoaGVhZCk7CisJCXN0cnVjdCBtZW51ICp0YXJnZXRzW0pVTVBfTkJdOworCQlpbnQga2V5
c1tKVU1QX05CICsgMV0sIGk7CisJCXN0cnVjdCBzZWFyY2hfZGF0YSBkYXRhID0geworCQkJLmhl
YWQgPSAmaGVhZCwKKwkJCS50YXJnZXRzID0gdGFyZ2V0cywKKwkJCS5rZXlzID0ga2V5cywKKwkJ
fTsKKwkJc3RydWN0IGp1bXBfa2V5ICpwb3MsICp0bXA7CisKKwkJcmVzID0gZ2V0X3JlbGF0aW9u
c19zdHIoc3ltX2FyciwgJmhlYWQpOworCQlzZXRfc3VidGl0bGUoKTsKKwkJZHJlcyA9IHNob3df
dGV4dGJveF9leHQoIlNlYXJjaCBSZXN1bHRzIiwgKGNoYXIgKikKKwkJCQkJc3RyX2dldCgmcmVz
KSwgMCwgMCwga2V5cywgJnZzY3JvbGwsCisJCQkJCSZoc2Nyb2xsLCAmdXBkYXRlX3RleHQsICh2
b2lkICopCisJCQkJCSZkYXRhKTsKKwkJYWdhaW4gPSBmYWxzZTsKKwkJZm9yIChpID0gMDsgaSA8
IEpVTVBfTkIgJiYga2V5c1tpXTsgaSsrKQorCQkJaWYgKGRyZXMgPT0ga2V5c1tpXSkgeworCQkJ
CWNvbmYodGFyZ2V0c1tpXS0+cGFyZW50LCB0YXJnZXRzW2ldKTsKKwkJCQlhZ2FpbiA9IHRydWU7
CisJCQl9CisJCXN0cl9mcmVlKCZyZXMpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9z
LCB0bXAsICZoZWFkLCBlbnRyaWVzKQorCQkJZnJlZShwb3MpOworCX0gd2hpbGUgKGFnYWluKTsK
KwlmcmVlKHN5bV9hcnIpOworCXN0cl9mcmVlKCZ0aXRsZSk7CisJbGlzdF9kZWwodHJhaWwucHJl
dik7CisJc3RyX2ZyZWUoJnN0dGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkX2NvbmYoc3Ry
dWN0IG1lbnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9wZXJ0
eSAqcHJvcDsKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisJaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAy
OworCXRyaXN0YXRlIHZhbDsKKwljaGFyIGNoOworCWJvb2wgdmlzaWJsZTsKKworCS8qCisJICog
bm90ZTogbWVudV9pc192aXNpYmxlKCkgaGFzIHNpZGUgZWZmZWN0IHRoYXQgaXQgd2lsbAorCSAq
IHJlY2FsYyB0aGUgdmFsdWUgb2YgdGhlIHN5bWJvbC4KKwkgKi8KKwl2aXNpYmxlID0gbWVudV9p
c192aXNpYmxlKG1lbnUpOworCWlmIChzaG93X2FsbF9vcHRpb25zICYmICFtZW51X2hhc19wcm9t
cHQobWVudSkpCisJCXJldHVybjsKKwllbHNlIGlmICghc2hvd19hbGxfb3B0aW9ucyAmJiAhdmlz
aWJsZSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVudS0+c3ltOworCXByb3AgPSBtZW51LT5wcm9t
cHQ7CisJaWYgKCFzeW0pIHsKKwkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsK
KwkJCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKwkJCXN3aXRj
aCAocHJvcC0+dHlwZSkgeworCQkJY2FzZSBQX01FTlU6CisJCQkJY2hpbGRfY291bnQrKzsKKwkJ
CQlpZiAoc2luZ2xlX21lbnVfbW9kZSkgeworCQkJCQlpdGVtX21ha2UoIiVzJSpjJXMiLAorCQkJ
CQkJICBtZW51LT5kYXRhID8gIi0tPiIgOiAiKys+IiwKKwkJCQkJCSAgaW5kZW50ICsgMSwgJyAn
LCBwcm9tcHQpOworCQkJCX0gZWxzZQorCQkJCQlpdGVtX21ha2UoIiAgICUqYyVzICAlcyIsCisJ
CQkJCQkgIGluZGVudCArIDEsICcgJywgcHJvbXB0LAorCQkJCQkJICBtZW51X2lzX2VtcHR5KG1l
bnUpID8gIi0tLS0iIDogIi0tLT4iKTsKKwkJCQlpdGVtX3NldF90YWcoJ20nKTsKKwkJCQlpdGVt
X3NldF9kYXRhKG1lbnUpOworCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEp
CisJCQkJCWdvdG8gY29uZl9jaGlsZHM7CisJCQkJcmV0dXJuOworCQkJY2FzZSBQX0NPTU1FTlQ6
CisJCQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOworCQkJCQlpdGVtX21ha2Uo
IiAgICUqYyoqKiAlcyAqKioiLCBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJCWl0ZW1f
c2V0X3RhZygnOicpOworCQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJCX0KKwkJCQlicmVh
azsKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKHByb21wdCkgeworCQkJCQljaGlsZF9jb3VudCsrOwor
CQkJCQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOworCQkJ
CQlpdGVtX3NldF90YWcoJzonKTsKKwkJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQl9CisJ
CQl9CisJCX0gZWxzZQorCQkJZG9pbnQgPSAwOworCQlnb3RvIGNvbmZfY2hpbGRzOworCX0KKwor
CXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJ
CXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOworCQlz
dHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOworCisJCWNoaWxkX2NvdW50Kys7CisJCWZvciAo
Y2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYg
KG1lbnVfaXNfdmlzaWJsZShjaGlsZCkgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQorCQkJCWRl
Zl9tZW51ID0gY2hpbGQ7CisJCX0KKworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSk7CisJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsKKwkJCXN3aXRjaCAodHlwZSkgewor
CQkJY2FzZSBTX0JPT0xFQU46CisJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAn
IDogJyonKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToKKwkJCQlzd2l0Y2ggKHZh
bCkgeworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJY2FzZSBtb2Q6IGNoID0g
J00nOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOworCQkJCX0KKwkJCQlp
dGVtX21ha2UoIjwlYz4iLCBjaCk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpdGVtX3NldF90YWco
J3QnKTsKKwkJCWl0ZW1fc2V0X2RhdGEobWVudSk7CisJCX0gZWxzZSB7CisJCQlpdGVtX21ha2Uo
IiAgICIpOworCQkJaXRlbV9zZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsKKwkJCWl0ZW1f
c2V0X2RhdGEobWVudSk7CisJCX0KKworCQlpdGVtX2FkZF9zdHIoIiUqYyVzIiwgaW5kZW50ICsg
MSwgJyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQlpZiAodmFsID09IHllcykgeworCQkJ
aWYgKGRlZl9tZW51KSB7CisJCQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsIG1lbnVfZ2V0X3Byb21w
dChkZWZfbWVudSkpOworCQkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7CisJCQkJaWYgKGRlZl9t
ZW51LT5saXN0KSB7CisJCQkJCWluZGVudCArPSAyOworCQkJCQlidWlsZF9jb25mKGRlZl9tZW51
KTsKKwkJCQkJaW5kZW50IC09IDI7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuOworCQl9CisJfSBl
bHNlIHsKKwkJaWYgKG1lbnUgPT0gY3VycmVudF9tZW51KSB7CisJCQlpdGVtX21ha2UoIi0tLSUq
YyVzIiwgaW5kZW50ICsgMSwgJyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQkJaXRlbV9z
ZXRfdGFnKCc6Jyk7CisJCQlpdGVtX3NldF9kYXRhKG1lbnUpOworCQkJZ290byBjb25mX2NoaWxk
czsKKwkJfQorCQljaGlsZF9jb3VudCsrOworCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVl
KHN5bSk7CisJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgewor
CQkJaXRlbV9tYWtlKCIgICAiKTsKKwkJCWl0ZW1fc2V0X3RhZygnOicpOworCQkJaXRlbV9zZXRf
ZGF0YShtZW51KTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JP
T0xFQU46CisJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQkJaXRlbV9tYWtlKCJb
JWNdIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQllbHNlCisJCQkJCWl0ZW1fbWFrZSgi
LSVjLSIsIHZhbCA9PSBubyA/ICcgJyA6ICcqJyk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJ
CQkJaXRlbV9zZXRfZGF0YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU19UUklTVEFURToK
KwkJCQlzd2l0Y2ggKHZhbCkgeworCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7CisJCQkJ
Y2FzZSBtb2Q6IGNoID0gJ00nOyBicmVhazsKKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFr
OworCQkJCX0KKwkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7CisJCQkJCWlmIChzeW0t
PnJldl9kZXAudHJpID09IG1vZCkKKwkJCQkJCWl0ZW1fbWFrZSgieyVjfSIsIGNoKTsKKwkJCQkJ
ZWxzZQorCQkJCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOworCQkJCX0gZWxzZQorCQkJCQlpdGVt
X21ha2UoIi0lYy0iLCBjaCk7CisJCQkJaXRlbV9zZXRfdGFnKCd0Jyk7CisJCQkJaXRlbV9zZXRf
ZGF0YShtZW51KTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdG1wID0gMiArIHN0cmxl
bihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsgLyogKCkgPSAyICovCisJCQkJaXRlbV9tYWtl
KCIoJXMpIiwgc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7CisJCQkJdG1wID0gaW5kZW50IC0g
dG1wICsgNDsKKwkJCQlpZiAodG1wIDwgMCkKKwkJCQkJdG1wID0gMDsKKwkJCQlpdGVtX2FkZF9z
dHIoIiUqYyVzJXMiLCB0bXAsICcgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpLAorCQkJCQkgICAg
IChzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPworCQkJCQkg
ICAgICIiIDogIiAoTkVXKSIpOworCQkJCWl0ZW1fc2V0X3RhZygncycpOworCQkJCWl0ZW1fc2V0
X2RhdGEobWVudSk7CisJCQkJZ290byBjb25mX2NoaWxkczsKKwkJCX0KKwkJfQorCQlpdGVtX2Fk
ZF9zdHIoIiUqYyVzJXMiLCBpbmRlbnQgKyAxLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSwK
KwkJCSAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/CisJ
CQkgICIiIDogIiAoTkVXKSIpOworCQlpZiAobWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkg
eworCQkJaXRlbV9hZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6
ICItLS0+Iik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKK2NvbmZfY2hpbGRzOgorCWluZGVudCAr
PSBkb2ludDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHQpCisJCWJ1aWxkX2NvbmYoY2hpbGQpOworCWluZGVudCAtPSBkb2ludDsKK30KKworc3Rh
dGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSwgc3RydWN0IG1lbnUgKmFjdGl2ZV9tZW51
KQoreworCXN0cnVjdCBtZW51ICpzdWJtZW51OworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVf
Z2V0X3Byb21wdChtZW51KTsKKwlzdHJ1Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7CisJc3RydWN0
IHN5bWJvbCAqc3ltOworCWludCByZXM7CisJaW50IHNfc2Nyb2xsID0gMDsKKworCWlmIChtZW51
ICE9ICZyb290bWVudSkKKwkJc3RwYXJ0LnRleHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7CisJ
ZWxzZQorCQlzdHBhcnQudGV4dCA9IE5VTEw7CisJbGlzdF9hZGRfdGFpbCgmc3RwYXJ0LmVudHJp
ZXMsICZ0cmFpbCk7CisKKwl3aGlsZSAoMSkgeworCQlpdGVtX3Jlc2V0KCk7CisJCWN1cnJlbnRf
bWVudSA9IG1lbnU7CisJCWJ1aWxkX2NvbmYobWVudSk7CisJCWlmICghY2hpbGRfY291bnQpCisJ
CQlicmVhazsKKwkJc2V0X3N1YnRpdGxlKCk7CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBk
aWFsb2dfbWVudShwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKKwkJCQkgIG1lbnVfaW5z
dHJ1Y3Rpb25zLAorCQkJCSAgYWN0aXZlX21lbnUsICZzX3Njcm9sbCk7CisJCWlmIChyZXMgPT0g
MSB8fCByZXMgPT0gS0VZX0VTQyB8fCByZXMgPT0gLUVSUkRJU1BMQVlUT09TTUFMTCkKKwkJCWJy
ZWFrOworCQlpZiAoaXRlbV9jb3VudCgpICE9IDApIHsKKwkJCWlmICghaXRlbV9hY3RpdmF0ZV9z
ZWxlY3RlZCgpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKCFpdGVtX3RhZygpKQorCQkJCWNvbnRp
bnVlOworCQl9CisJCXN1Ym1lbnUgPSBpdGVtX2RhdGEoKTsKKwkJYWN0aXZlX21lbnUgPSBpdGVt
X2RhdGEoKTsKKwkJaWYgKHN1Ym1lbnUpCisJCQlzeW0gPSBzdWJtZW51LT5zeW07CisJCWVsc2UK
KwkJCXN5bSA9IE5VTEw7CisKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJc3dpdGNo
IChpdGVtX3RhZygpKSB7CisJCQljYXNlICdtJzoKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkK
KwkJCQkJc3VibWVudS0+ZGF0YSA9ICh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsKKwkJ
CQllbHNlCisJCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7CisJCQkJYnJlYWs7CisJCQljYXNlICd0
JzoKKwkJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUo
c3ltKSA9PSB5ZXMpCisJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOworCQkJCWVsc2UgaWYgKHN1
Ym1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpCisJCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7
CisJCQkJYnJlYWs7CisJCQljYXNlICdzJzoKKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsKKwkJ
CQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoc3ltKQorCQkJCXNo
b3dfaGVscChzdWJtZW51KTsKKwkJCWVsc2UgeworCQkJCXJlc2V0X3N1YnRpdGxlKCk7CisJCQkJ
c2hvd19oZWxwdGV4dCgiUkVBRE1FIiwgbWNvbmZfcmVhZG1lKTsKKwkJCX0KKwkJCWJyZWFrOwor
CQljYXNlIDM6CisJCQlyZXNldF9zdWJ0aXRsZSgpOworCQkJY29uZl9zYXZlKCk7CisJCQlicmVh
azsKKwkJY2FzZSA0OgorCQkJcmVzZXRfc3VidGl0bGUoKTsKKwkJCWNvbmZfbG9hZCgpOworCQkJ
YnJlYWs7CisJCWNhc2UgNToKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7CisJCQkJaWYgKHN5
bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQorCQkJCQlicmVhazsKKwkJCQlpZiAoc3lt
X3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCkpCisJCQkJCXNob3dfdGV4dGJveChOVUxMLCBz
ZXRtb2RfdGV4dCwgNiwgNzQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgNjoKKwkJCWlmIChp
dGVtX2lzX3RhZygndCcpKQorCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7CisJ
CQlicmVhazsKKwkJY2FzZSA3OgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3Nl
dF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCk7CisJCQlicmVhazsKKwkJY2FzZSA4OgorCQkJaWYg
KGl0ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOwor
CQkJZWxzZSBpZiAoaXRlbV9pc190YWcoJ20nKSkKKwkJCQljb25mKHN1Ym1lbnUsIE5VTEwpOwor
CQkJYnJlYWs7CisJCWNhc2UgOToKKwkJCXNlYXJjaF9jb25mKCk7CisJCQlicmVhazsKKwkJY2Fz
ZSAxMDoKKwkJCXNob3dfYWxsX29wdGlvbnMgPSAhc2hvd19hbGxfb3B0aW9uczsKKwkJCWJyZWFr
OworCQl9CisJfQorCisJbGlzdF9kZWwodHJhaWwucHJldik7Cit9CisKK3N0YXRpYyBpbnQgc2hv
d190ZXh0Ym94X2V4dChjb25zdCBjaGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIsIGludCBj
LCBpbnQKKwkJCSAgICAqa2V5cywgaW50ICp2c2Nyb2xsLCBpbnQgKmhzY3JvbGwsIHVwZGF0ZV90
ZXh0X2ZuCisJCQkgICAgdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpCit7CisJZGlhbG9nX2NsZWFy
KCk7CisJcmV0dXJuIGRpYWxvZ190ZXh0Ym94KHRpdGxlLCB0ZXh0LCByLCBjLCBrZXlzLCB2c2Ny
b2xsLCBoc2Nyb2xsLAorCQkJICAgICAgdXBkYXRlX3RleHQsIGRhdGEpOworfQorCitzdGF0aWMg
dm9pZCBzaG93X3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGlu
dCByLCBpbnQgYykKK3sKKwlzaG93X3RleHRib3hfZXh0KHRpdGxlLCAoY2hhciAqKSB0ZXh0LCBy
LCBjLCAoaW50IFtdKSB7MH0sIE5VTEwsIE5VTEwsCisJCQkgTlVMTCwgTlVMTCk7Cit9CisKK3N0
YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRl
eHQpCit7CisJc2hvd190ZXh0Ym94KHRpdGxlLCB0ZXh0LCAwLCAwKTsKK30KKworc3RhdGljIHZv
aWQgY29uZl9tZXNzYWdlX2NhbGxiYWNrKGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKHNhdmVfYW5k
X2V4aXQpIHsKKwkJaWYgKCFzaWxlbnQpCisJCQlwcmludGYoIiVzIiwgcyk7CisJfSBlbHNlIHsK
KwkJc2hvd190ZXh0Ym94KE5VTEwsIHMsIDYsIDYwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNo
b3dfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25l
dygpOworCisJaGVscC5tYXhfd2lkdGggPSBnZXRtYXh4KHN0ZHNjcikgLSAxMDsKKwltZW51X2dl
dF9leHRfaGVscChtZW51LCAmaGVscCk7CisKKwlzaG93X2hlbHB0ZXh0KG1lbnVfZ2V0X3Byb21w
dChtZW51KSwgc3RyX2dldCgmaGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsKK30KKworc3RhdGlj
IHZvaWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJY29uc3QgY2hhciAqcHJv
bXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlzdHJ1
Y3Qgc3ltYm9sICphY3RpdmU7CisKKwlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51
LT5zeW0pOworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWludCBzZWxlY3RlZDsKKwkJaXRl
bV9yZXNldCgpOworCisJCWN1cnJlbnRfbWVudSA9IG1lbnU7CisJCWZvciAoY2hpbGQgPSBtZW51
LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYgKCFtZW51X2lzX3Zp
c2libGUoY2hpbGQpKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGNoaWxkLT5zeW0pCisJCQkJaXRl
bV9tYWtlKCIlcyIsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOworCQkJZWxzZSB7CisJCQkJaXRl
bV9tYWtlKCIqKiogJXMgKioqIiwgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQkJaXRlbV9z
ZXRfdGFnKCc6Jyk7CisJCQl9CisJCQlpdGVtX3NldF9kYXRhKGNoaWxkKTsKKwkJCWlmIChjaGls
ZC0+c3ltID09IGFjdGl2ZSkKKwkJCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsKKwkJCWlmIChjaGls
ZC0+c3ltID09IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpCisJCQkJaXRlbV9zZXRf
dGFnKCdYJyk7CisJCX0KKwkJZGlhbG9nX2NsZWFyKCk7CisJCXJlcyA9IGRpYWxvZ19jaGVja2xp
c3QocHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJCXJhZGlvbGlzdF9pbnN0cnVj
dGlvbnMsCisJCQkJCU1FTlVCT1hfSEVJR1RIX01JTiwKKwkJCQkJTUVOVUJPWF9XSURUSF9NSU4s
CisJCQkJCUNIRUNLTElTVF9IRUlHVEhfTUlOKTsKKwkJc2VsZWN0ZWQgPSBpdGVtX2FjdGl2YXRl
X3NlbGVjdGVkKCk7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgMDoKKwkJCWlmIChzZWxlY3Rl
ZCkgeworCQkJCWNoaWxkID0gaXRlbV9kYXRhKCk7CisJCQkJaWYgKCFjaGlsZC0+c3ltKQorCQkJ
CQlicmVhazsKKworCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwgeWVzKTsK
KwkJCX0KKwkJCXJldHVybjsKKwkJY2FzZSAxOgorCQkJaWYgKHNlbGVjdGVkKSB7CisJCQkJY2hp
bGQgPSBpdGVtX2RhdGEoKTsKKwkJCQlzaG93X2hlbHAoY2hpbGQpOworCQkJCWFjdGl2ZSA9IGNo
aWxkLT5zeW07CisJCQl9IGVsc2UKKwkJCQlzaG93X2hlbHAobWVudSk7CisJCQlicmVhazsKKwkJ
Y2FzZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQljYXNlIC1FUlJESVNQTEFZVE9PU01BTEw6CisJ
CQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBt
ZW51ICptZW51KQoreworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51
KTsKKworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWNvbnN0IGNoYXIgKmhlYWRpbmc7CisK
KwkJc3dpdGNoIChzeW1fZ2V0X3R5cGUobWVudS0+c3ltKSkgeworCQljYXNlIFNfSU5UOgorCQkJ
aGVhZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7CisJCQlicmVhazsKKwkJY2FzZSBT
X0hFWDoKKwkJCWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4OworCQkJYnJlYWs7
CisJCWNhc2UgU19TVFJJTkc6CisJCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0
cmluZzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBtY29u
ZiBlcnJvciEiOworCQl9CisJCWRpYWxvZ19jbGVhcigpOworCQlyZXMgPSBkaWFsb2dfaW5wdXRi
b3gocHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsCisJCQkJICAgICAgaGVhZGluZywgMTAs
IDc1LAorCQkJCSAgICAgIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkpOworCQlzd2l0
Y2ggKHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoc3ltX3NldF9zdHJpbmdfdmFsdWUobWVudS0+
c3ltLCBkaWFsb2dfaW5wdXRfcmVzdWx0KSkKKwkJCQlyZXR1cm47CisJCQlzaG93X3RleHRib3go
TlVMTCwgIllvdSBoYXZlIG1hZGUgYW4gaW52YWxpZCBlbnRyeS4iLCA1LCA0Myk7CisJCQlicmVh
azsKKwkJY2FzZSAxOgorCQkJc2hvd19oZWxwKG1lbnUpOworCQkJYnJlYWs7CisJCWNhc2UgS0VZ
X0VTQzoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9sb2FkKHZv
aWQpCit7CisKKwl3aGlsZSAoMSkgeworCQlpbnQgcmVzOworCQlkaWFsb2dfY2xlYXIoKTsKKwkJ
cmVzID0gZGlhbG9nX2lucHV0Ym94KE5VTEwsIGxvYWRfY29uZmlnX3RleHQsCisJCQkJICAgICAg
MTEsIDU1LCBmaWxlbmFtZSk7CisJCXN3aXRjaChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFk
aWFsb2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJCXJldHVybjsKKwkJCWlmICghY29uZl9yZWFkKGRp
YWxvZ19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5w
dXRfcmVzdWx0KTsKKwkJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKKwkJCQlyZXR1cm47CisJ
CQl9CisJCQlzaG93X3RleHRib3goTlVMTCwgIkZpbGUgZG9lcyBub3QgZXhpc3QhIiwgNSwgMzgp
OworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXNob3dfaGVscHRleHQoIkxvYWQgQWx0ZXJuYXRl
IENvbmZpZ3VyYXRpb24iLCBsb2FkX2NvbmZpZ19oZWxwKTsKKwkJCWJyZWFrOworCQljYXNlIEtF
WV9FU0M6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2
b2lkKQoreworCXdoaWxlICgxKSB7CisJCWludCByZXM7CisJCWRpYWxvZ19jbGVhcigpOworCQly
ZXMgPSBkaWFsb2dfaW5wdXRib3goTlVMTCwgc2F2ZV9jb25maWdfdGV4dCwKKwkJCQkgICAgICAx
MSwgNTUsIGZpbGVuYW1lKTsKKwkJc3dpdGNoKHJlcykgeworCQljYXNlIDA6CisJCQlpZiAoIWRp
YWxvZ19pbnB1dF9yZXN1bHRbMF0pCisJCQkJcmV0dXJuOworCQkJaWYgKCFjb25mX3dyaXRlKGRp
YWxvZ19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5w
dXRfcmVzdWx0KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlzaG93X3RleHRib3goTlVMTCwgIkNh
bid0IGNyZWF0ZSBmaWxlISIsIDUsIDYwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlzaG93
X2hlbHB0ZXh0KCJTYXZlIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiwgc2F2ZV9jb25maWdfaGVs
cCk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVNDOgorCQkJcmV0dXJuOworCQl9CisJfQorfQor
CitzdGF0aWMgaW50IGhhbmRsZV9leGl0KHZvaWQpCit7CisJaW50IHJlczsKKworCXNhdmVfYW5k
X2V4aXQgPSAxOworCXJlc2V0X3N1YnRpdGxlKCk7CisJZGlhbG9nX2NsZWFyKCk7CisJaWYgKGNv
bmZfZ2V0X2NoYW5nZWQoKSkKKwkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsCisJCQkJICAgIkRv
IHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29uZmlndXJhdGlvbj9cbiIKKwkJCQkgICAgICIo
UHJlc3MgPEVTQz48RVNDPiB0byBjb250aW51ZSBVbmlrcmFmdCBjb25maWd1cmF0aW9uLikiLAor
CQkJCSAgIDYsIDYwKTsKKwllbHNlCisJCXJlcyA9IC0xOworCisJZW5kX2RpYWxvZyhzYXZlZF94
LCBzYXZlZF95KTsKKworCXN3aXRjaCAocmVzKSB7CisJY2FzZSAwOgorCQlpZiAoY29uZl93cml0
ZShmaWxlbmFtZSkpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG5cbiIKKwkJCQkJICAiRXJyb3Ig
d2hpbGUgd3JpdGluZyBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiIKKwkJCQkJICAiWW91ciBjb25m
aWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIgorCQkJCQkgICJcblxuIik7CisJCQly
ZXR1cm4gMTsKKwkJfQorCQljb25mX3dyaXRlX2F1dG9jb25mKDApOworCQkvKiBmYWxsIHRocm91
Z2ggKi8KKwljYXNlIC0xOgorCQlpZiAoIXNpbGVudCkKKwkJCXByaW50ZigiXG5cbiIKKwkJCQkg
IioqKiBFbmQgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4iCisJCQkJICIqKiogRXhlY3V0ZSAnbWFr
ZScgdG8gc3RhcnQgdGhlIGJ1aWxkIG9yIHRyeSAnbWFrZSBoZWxwJy4iCisJCQkJICJcblxuIik7
CisJCXJlcyA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICghc2lsZW50KQorCQkJZnBy
aW50ZihzdGRlcnIsICJcblxuIgorCQkJCQkgICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3
ZXJlIE5PVCBzYXZlZC4iCisJCQkJCSAgIlxuXG4iKTsKKwkJaWYgKHJlcyAhPSBLRVlfRVNDKQor
CQkJcmVzID0gMDsKKwl9CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCBzaWdfaGFu
ZGxlcihpbnQgc2lnbm8pCit7CisJZXhpdChoYW5kbGVfZXhpdCgpKTsKK30KKworaW50IG1haW4o
aW50IGFjLCBjaGFyICoqYXYpCit7CisJY2hhciAqbW9kZTsKKwlpbnQgcmVzOworCisJc2lnbmFs
KFNJR0lOVCwgc2lnX2hhbmRsZXIpOworCisJaWYgKGFjID4gMSAmJiBzdHJjbXAoYXZbMV0sICIt
cyIpID09IDApIHsKKwkJc2lsZW50ID0gMTsKKwkJLyogU2lsZW5jZSBjb25mX3JlYWQoKSB1bnRp
bCB0aGUgcmVhbCBjYWxsYmFjayBpcyBzZXQgdXAgKi8KKwkJY29uZl9zZXRfbWVzc2FnZV9jYWxs
YmFjayhOVUxMKTsKKwkJYXYrKzsKKwl9CisJY29uZl9wYXJzZShhdlsxXSk7CisJY29uZl9yZWFk
KE5VTEwpOworCisJbW9kZSA9IGdldGVudigiTUVOVUNPTkZJR19NT0RFIik7CisJaWYgKG1vZGUp
IHsKKwkJaWYgKCFzdHJjYXNlY21wKG1vZGUsICJzaW5nbGVfbWVudSIpKQorCQkJc2luZ2xlX21l
bnVfbW9kZSA9IDE7CisJfQorCisJaWYgKGluaXRfZGlhbG9nKE5VTEwpKSB7CisJCWZwcmludGYo
c3RkZXJyLCAiWW91ciBkaXNwbGF5IGlzIHRvbyBzbWFsbCB0byBydW4gTWVudWNvbmZpZyFcbiIp
OworCQlmcHJpbnRmKHN0ZGVyciwgIkl0IG11c3QgYmUgYXQgbGVhc3QgMTkgbGluZXMgYnkgODAg
Y29sdW1ucy5cbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwlzZXRfY29uZmlnX2ZpbGVuYW1lKGNv
bmZfZ2V0X2NvbmZpZ25hbWUoKSk7CisJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhjb25mX21l
c3NhZ2VfY2FsbGJhY2spOworCWRvIHsKKwkJY29uZigmcm9vdG1lbnUsIE5VTEwpOworCQlyZXMg
PSBoYW5kbGVfZXhpdCgpOworCX0gd2hpbGUgKHJlcyA9PSBLRVlfRVNDKTsKKworCXJldHVybiBy
ZXM7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbWVudS5jIGIvc3VwcG9ydC9rY29u
ZmlnL21lbnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWQxNjQ2Ci0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL21lbnUuYwpAQCAtMCwwICsxLDg2NyBA
QAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2lu
Y2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworc3RhdGljIGNvbnN0
IGNoYXIgbm9oZWxwX3RleHRbXSA9ICJUaGVyZSBpcyBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhp
cyBvcHRpb24uIjsKKworc3RydWN0IG1lbnUgcm9vdG1lbnU7CitzdGF0aWMgc3RydWN0IG1lbnUg
KipsYXN0X2VudHJ5X3B0cjsKKworc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsKK3N0cnVjdCBmaWxl
ICpjdXJyZW50X2ZpbGU7CisKK3ZvaWQgbWVudV93YXJuKHN0cnVjdCBtZW51ICptZW51LCBjb25z
dCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCXZhX3N0YXJ0KGFwLCBmbXQpOwor
CWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgbWVudS0+ZmlsZS0+bmFtZSwgbWVu
dS0+bGluZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCWZwcmludGYoc3RkZXJy
LCAiXG4iKTsKKwl2YV9lbmQoYXApOworfQorCitzdGF0aWMgdm9pZCBwcm9wX3dhcm4oc3RydWN0
IHByb3BlcnR5ICpwcm9wLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOwor
CXZhX3N0YXJ0KGFwLCBmbXQpOworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwg
cHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vKTsKKwl2ZnByaW50ZihzdGRlcnIsIGZtdCwg
YXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkIF9t
ZW51X2luaXQodm9pZCkKK3sKKwljdXJyZW50X2VudHJ5ID0gY3VycmVudF9tZW51ID0gJnJvb3Rt
ZW51OworCWxhc3RfZW50cnlfcHRyID0gJnJvb3RtZW51Lmxpc3Q7Cit9CisKK3ZvaWQgbWVudV9h
ZGRfZW50cnkoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBtZW51ICptZW51OworCisJ
bWVudSA9IHhtYWxsb2Moc2l6ZW9mKCptZW51KSk7CisJbWVtc2V0KG1lbnUsIDAsIHNpemVvZigq
bWVudSkpOworCW1lbnUtPnN5bSA9IHN5bTsKKwltZW51LT5wYXJlbnQgPSBjdXJyZW50X21lbnU7
CisJbWVudS0+ZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwltZW51LT5saW5lbm8gPSB6Y29uZl9saW5l
bm8oKTsKKworCSpsYXN0X2VudHJ5X3B0ciA9IG1lbnU7CisJbGFzdF9lbnRyeV9wdHIgPSAmbWVu
dS0+bmV4dDsKKwljdXJyZW50X2VudHJ5ID0gbWVudTsKKwlpZiAoc3ltKQorCQltZW51X2FkZF9z
eW1ib2woUF9TWU1CT0wsIHN5bSwgTlVMTCk7Cit9CisKK3N0cnVjdCBtZW51ICptZW51X2FkZF9t
ZW51KHZvaWQpCit7CisJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9lbnRyeS0+bGlzdDsKKwly
ZXR1cm4gY3VycmVudF9tZW51ID0gY3VycmVudF9lbnRyeTsKK30KKwordm9pZCBtZW51X2VuZF9t
ZW51KHZvaWQpCit7CisJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9tZW51LT5uZXh0OworCWN1
cnJlbnRfbWVudSA9IGN1cnJlbnRfbWVudS0+cGFyZW50OworfQorCisvKgorICogUmV3cml0ZXMg
J20nIHRvICdtJyAmJiBNT0RVTEVTLCBzbyB0aGF0IGl0IGV2YWx1YXRlcyB0byAnbicgd2hlbiBy
dW5uaW5nCisgKiB3aXRob3V0IG1vZHVsZXMKKyAqLworc3RhdGljIHN0cnVjdCBleHByICpyZXdy
aXRlX20oc3RydWN0IGV4cHIgKmUpCit7CisJaWYgKCFlKQorCQlyZXR1cm4gZTsKKworCXN3aXRj
aCAoZS0+dHlwZSkgeworCWNhc2UgRV9OT1Q6CisJCWUtPmxlZnQuZXhwciA9IHJld3JpdGVfbShl
LT5sZWZ0LmV4cHIpOworCQlicmVhazsKKwljYXNlIEVfT1I6CisJY2FzZSBFX0FORDoKKwkJZS0+
bGVmdC5leHByID0gcmV3cml0ZV9tKGUtPmxlZnQuZXhwcik7CisJCWUtPnJpZ2h0LmV4cHIgPSBy
ZXdyaXRlX20oZS0+cmlnaHQuZXhwcik7CisJCWJyZWFrOworCWNhc2UgRV9TWU1CT0w6CisJCS8q
IGNoYW5nZSAnbScgaW50byAnbScgJiYgTU9EVUxFUyAqLworCQlpZiAoZS0+bGVmdC5zeW0gPT0g
JnN5bWJvbF9tb2QpCisJCQlyZXR1cm4gZXhwcl9hbGxvY19hbmQoZSwgZXhwcl9hbGxvY19zeW1i
b2wobW9kdWxlc19zeW0pKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJl
dHVybiBlOworfQorCit2b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVwKQoreworCWN1
cnJlbnRfZW50cnktPmRlcCA9IGV4cHJfYWxsb2NfYW5kKGN1cnJlbnRfZW50cnktPmRlcCwgZGVw
KTsKK30KKwordm9pZCBtZW51X3NldF90eXBlKGludCB0eXBlKQoreworCXN0cnVjdCBzeW1ib2wg
KnN5bSA9IGN1cnJlbnRfZW50cnktPnN5bTsKKworCWlmIChzeW0tPnR5cGUgPT0gdHlwZSkKKwkJ
cmV0dXJuOworCWlmIChzeW0tPnR5cGUgPT0gU19VTktOT1dOKSB7CisJCXN5bS0+dHlwZSA9IHR5
cGU7CisJCXJldHVybjsKKwl9CisJbWVudV93YXJuKGN1cnJlbnRfZW50cnksCisJCSJpZ25vcmlu
ZyB0eXBlIHJlZGVmaW5pdGlvbiBvZiAnJXMnIGZyb20gJyVzJyB0byAnJXMnIiwKKwkJc3ltLT5u
YW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUp
LCBzeW1fdHlwZV9uYW1lKHR5cGUpKTsKK30KKworc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqbWVu
dV9hZGRfcHJvcChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHBy
ICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IHBy
b3BfYWxsb2ModHlwZSwgY3VycmVudF9lbnRyeS0+c3ltKTsKKworCXByb3AtPm1lbnUgPSBjdXJy
ZW50X2VudHJ5OworCXByb3AtPmV4cHIgPSBleHByOworCXByb3AtPnZpc2libGUuZXhwciA9IGRl
cDsKKworCWlmIChwcm9tcHQpIHsKKwkJaWYgKGlzc3BhY2UoKnByb21wdCkpIHsKKwkJCXByb3Bf
d2Fybihwcm9wLCAibGVhZGluZyB3aGl0ZXNwYWNlIGlnbm9yZWQiKTsKKwkJCXdoaWxlIChpc3Nw
YWNlKCpwcm9tcHQpKQorCQkJCXByb21wdCsrOworCQl9CisJCWlmIChjdXJyZW50X2VudHJ5LT5w
cm9tcHQgJiYgY3VycmVudF9lbnRyeSAhPSAmcm9vdG1lbnUpCisJCQlwcm9wX3dhcm4ocHJvcCwg
InByb21wdCByZWRlZmluZWQiKTsKKworCQkvKiBBcHBseSBhbGwgdXBwZXIgbWVudXMnIHZpc2li
aWxpdGllcyB0byBhY3R1YWwgcHJvbXB0cy4gKi8KKwkJaWYodHlwZSA9PSBQX1BST01QVCkgewor
CQkJc3RydWN0IG1lbnUgKm1lbnUgPSBjdXJyZW50X2VudHJ5OworCisJCQl3aGlsZSAoKG1lbnUg
PSBtZW51LT5wYXJlbnQpICE9IE5VTEwpIHsKKwkJCQlzdHJ1Y3QgZXhwciAqZHVwX2V4cHI7CisK
KwkJCQlpZiAoIW1lbnUtPnZpc2liaWxpdHkpCisJCQkJCWNvbnRpbnVlOworCQkJCS8qCisJCQkJ
ICogRG8gbm90IGFkZCBhIHJlZmVyZW5jZSB0byB0aGUKKwkJCQkgKiBtZW51J3MgdmlzaWJpbGl0
eSBleHByZXNzaW9uIGJ1dAorCQkJCSAqIHVzZSBhIGNvcHkgb2YgaXQuICBPdGhlcndpc2UgdGhl
CisJCQkJICogZXhwcmVzc2lvbiByZWR1Y3Rpb24gZnVuY3Rpb25zCisJCQkJICogd2lsbCBtb2Rp
ZnkgZXhwcmVzc2lvbnMgdGhhdCBoYXZlCisJCQkJICogbXVsdGlwbGUgcmVmZXJlbmNlcyB3aGlj
aCBjYW4KKwkJCQkgKiBjYXVzZSB1bndhbnRlZCBzaWRlIGVmZmVjdHMuCisJCQkJICovCisJCQkJ
ZHVwX2V4cHIgPSBleHByX2NvcHkobWVudS0+dmlzaWJpbGl0eSk7CisKKwkJCQlwcm9wLT52aXNp
YmxlLmV4cHIKKwkJCQkJPSBleHByX2FsbG9jX2FuZChwcm9wLT52aXNpYmxlLmV4cHIsCisJCQkJ
CQkJIGR1cF9leHByKTsKKwkJCX0KKwkJfQorCisJCWN1cnJlbnRfZW50cnktPnByb21wdCA9IHBy
b3A7CisJfQorCXByb3AtPnRleHQgPSBwcm9tcHQ7CisKKwlyZXR1cm4gcHJvcDsKK30KKworc3Ry
dWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAq
cHJvbXB0LCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCXJldHVybiBtZW51X2FkZF9wcm9wKHR5cGUs
IHByb21wdCwgTlVMTCwgZGVwKTsKK30KKwordm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVj
dCBleHByICpleHByKQoreworCWN1cnJlbnRfZW50cnktPnZpc2liaWxpdHkgPSBleHByX2FsbG9j
X2FuZChjdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5LAorCSAgICBleHByKTsKK30KKwordm9pZCBt
ZW51X2FkZF9leHByKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBleHByICpleHByLCBzdHJ1
Y3QgZXhwciAqZGVwKQoreworCW1lbnVfYWRkX3Byb3AodHlwZSwgTlVMTCwgZXhwciwgZGVwKTsK
K30KKwordm9pZCBtZW51X2FkZF9zeW1ib2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5
bWJvbCAqc3ltLCBzdHJ1Y3QgZXhwciAqZGVwKQoreworCW1lbnVfYWRkX3Byb3AodHlwZSwgTlVM
TCwgZXhwcl9hbGxvY19zeW1ib2woc3ltKSwgZGVwKTsKK30KKwordm9pZCBtZW51X2FkZF9vcHRp
b25fbW9kdWxlcyh2b2lkKQoreworCWlmIChtb2R1bGVzX3N5bSkKKwkJemNvbmZfZXJyb3IoInN5
bWJvbCAnJXMnIHJlZGVmaW5lcyBvcHRpb24gJ21vZHVsZXMnIGFscmVhZHkgZGVmaW5lZCBieSBz
eW1ib2wgJyVzJyIsCisJCQkgICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lLCBtb2R1bGVzX3N5
bS0+bmFtZSk7CisJbW9kdWxlc19zeW0gPSBjdXJyZW50X2VudHJ5LT5zeW07Cit9CisKK3ZvaWQg
bWVudV9hZGRfb3B0aW9uX2RlZmNvbmZpZ19saXN0KHZvaWQpCit7CisJaWYgKCFzeW1fZGVmY29u
ZmlnX2xpc3QpCisJCXN5bV9kZWZjb25maWdfbGlzdCA9IGN1cnJlbnRfZW50cnktPnN5bTsKKwll
bHNlIGlmIChzeW1fZGVmY29uZmlnX2xpc3QgIT0gY3VycmVudF9lbnRyeS0+c3ltKQorCQl6Y29u
Zl9lcnJvcigidHJ5aW5nIHRvIHJlZGVmaW5lIGRlZmNvbmZpZyBzeW1ib2wiKTsKKwlzeW1fZGVm
Y29uZmlnX2xpc3QtPmZsYWdzIHw9IFNZTUJPTF9OT19XUklURTsKK30KKwordm9pZCBtZW51X2Fk
ZF9vcHRpb25fYWxsbm9jb25maWdfeSh2b2lkKQoreworCWN1cnJlbnRfZW50cnktPnN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0FMTE5PQ09ORklHX1k7Cit9CisKK3N0YXRpYyBpbnQgbWVudV92YWxpZGF0
ZV9udW1iZXIoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgc3ltYm9sICpzeW0yKQoreworCXJl
dHVybiBzeW0yLT50eXBlID09IFNfSU5UIHx8IHN5bTItPnR5cGUgPT0gU19IRVggfHwKKwkgICAg
ICAgKHN5bTItPnR5cGUgPT0gU19VTktOT1dOICYmIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzeW0y
LT5uYW1lKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN5bV9jaGVja19wcm9wKHN0cnVjdCBzeW1ib2wg
KnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqc3ltMjsK
KwljaGFyICp1c2U7CisKKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9w
LT5uZXh0KSB7CisJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfREVGQVVMVDoKKwkJ
CWlmICgoc3ltLT50eXBlID09IFNfU1RSSU5HIHx8IHN5bS0+dHlwZSA9PSBTX0lOVCB8fCBzeW0t
PnR5cGUgPT0gU19IRVgpICYmCisJCQkgICAgcHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkK
KwkJCQlwcm9wX3dhcm4ocHJvcCwKKwkJCQkgICAgImRlZmF1bHQgZm9yIGNvbmZpZyBzeW1ib2wg
JyVzJyIKKwkJCQkgICAgIiBtdXN0IGJlIGEgc2luZ2xlIHN5bWJvbCIsIHN5bS0+bmFtZSk7CisJ
CQlpZiAocHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkKKwkJCQlicmVhazsKKwkJCXN5bTIg
PSBwcm9wX2dldF9zeW1ib2wocHJvcCk7CisJCQlpZiAoc3ltLT50eXBlID09IFNfSEVYIHx8IHN5
bS0+dHlwZSA9PSBTX0lOVCkgeworCQkJCWlmICghbWVudV92YWxpZGF0ZV9udW1iZXIoc3ltLCBz
eW0yKSkKKwkJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJCSAgICAiJyVzJzogbnVtYmVyIGlzIGlu
dmFsaWQiLAorCQkJCQkgICAgc3ltLT5uYW1lKTsKKwkJCX0KKwkJCWlmIChzeW1faXNfY2hvaWNl
KHN5bSkpIHsKKwkJCQlzdHJ1Y3QgcHJvcGVydHkgKmNob2ljZV9wcm9wID0KKwkJCQkJc3ltX2dl
dF9jaG9pY2VfcHJvcChzeW0yKTsKKworCQkJCWlmICghY2hvaWNlX3Byb3AgfHwKKwkJCQkgICAg
cHJvcF9nZXRfc3ltYm9sKGNob2ljZV9wcm9wKSAhPSBzeW0pCisJCQkJCXByb3Bfd2Fybihwcm9w
LAorCQkJCQkJICAiY2hvaWNlIGRlZmF1bHQgc3ltYm9sICclcycgaXMgbm90IGNvbnRhaW5lZCBp
biB0aGUgY2hvaWNlIiwKKwkJCQkJCSAgc3ltMi0+bmFtZSk7CisJCQl9CisJCQlicmVhazsKKwkJ
Y2FzZSBQX1NFTEVDVDoKKwkJY2FzZSBQX0lNUExZOgorCQkJdXNlID0gcHJvcC0+dHlwZSA9PSBQ
X1NFTEVDVCA/ICJzZWxlY3QiIDogImltcGx5IjsKKwkJCXN5bTIgPSBwcm9wX2dldF9zeW1ib2wo
cHJvcCk7CisJCQlpZiAoc3ltLT50eXBlICE9IFNfQk9PTEVBTiAmJiBzeW0tPnR5cGUgIT0gU19U
UklTVEFURSkKKwkJCQlwcm9wX3dhcm4ocHJvcCwKKwkJCQkgICAgImNvbmZpZyBzeW1ib2wgJyVz
JyB1c2VzICVzLCBidXQgaXMgIgorCQkJCSAgICAibm90IGJvb2wgb3IgdHJpc3RhdGUiLCBzeW0t
Pm5hbWUsIHVzZSk7CisJCQllbHNlIGlmIChzeW0yLT50eXBlICE9IFNfVU5LTk9XTiAmJgorCQkJ
CSBzeW0yLT50eXBlICE9IFNfQk9PTEVBTiAmJgorCQkJCSBzeW0yLT50eXBlICE9IFNfVFJJU1RB
VEUpCisJCQkJcHJvcF93YXJuKHByb3AsCisJCQkJICAgICInJXMnIGhhcyB3cm9uZyB0eXBlLiAn
JXMnIG9ubHkgIgorCQkJCSAgICAiYWNjZXB0IGFyZ3VtZW50cyBvZiBib29sIGFuZCAiCisJCQkJ
ICAgICJ0cmlzdGF0ZSB0eXBlIiwgc3ltMi0+bmFtZSwgdXNlKTsKKwkJCWJyZWFrOworCQljYXNl
IFBfUkFOR0U6CisJCQlpZiAoc3ltLT50eXBlICE9IFNfSU5UICYmIHN5bS0+dHlwZSAhPSBTX0hF
WCkKKwkJCQlwcm9wX3dhcm4ocHJvcCwgInJhbmdlIGlzIG9ubHkgYWxsb3dlZCAiCisJCQkJCQki
Zm9yIGludCBvciBoZXggc3ltYm9scyIpOworCQkJaWYgKCFtZW51X3ZhbGlkYXRlX251bWJlcihz
eW0sIHByb3AtPmV4cHItPmxlZnQuc3ltKSB8fAorCQkJICAgICFtZW51X3ZhbGlkYXRlX251bWJl
cihzeW0sIHByb3AtPmV4cHItPnJpZ2h0LnN5bSkpCisJCQkJcHJvcF93YXJuKHByb3AsICJyYW5n
ZSBpcyBpbnZhbGlkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCTsKKwkJfQorCX0KK30K
Kwordm9pZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQpCit7CisJc3RydWN0IG1l
bnUgKm1lbnUsICpsYXN0X21lbnU7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCXN0cnVjdCBwcm9w
ZXJ0eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqcGFyZW50ZGVwLCAqYmFzZWRlcCwgKmRlcCwgKmRl
cDIsICoqZXA7CisKKwlzeW0gPSBwYXJlbnQtPnN5bTsKKwlpZiAocGFyZW50LT5saXN0KSB7CisJ
CS8qCisJCSAqIFRoaXMgbWVudSBub2RlIGhhcyBjaGlsZHJlbi4gV2UgKHJlY3Vyc2l2ZWx5KSBw
cm9jZXNzIHRoZW0KKwkJICogYW5kIHByb3BhZ2F0ZSBwYXJlbnQgZGVwZW5kZW5jaWVzIGJlZm9y
ZSBtb3Zpbmcgb24uCisJCSAqLworCisJCWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKSB7
CisJCQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgeworCQkJCS8qIGZpbmQgdGhlIGZpcnN0
IGNob2ljZSB2YWx1ZSB0byBmaW5kIG91dCBjaG9pY2UgdHlwZSAqLworCQkJCWN1cnJlbnRfZW50
cnkgPSBwYXJlbnQ7CisJCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0g
bWVudS0+bmV4dCkgeworCQkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBT
X1VOS05PV04pIHsKKwkJCQkJCW1lbnVfc2V0X3R5cGUobWVudS0+c3ltLT50eXBlKTsKKwkJCQkJ
CWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJLyogc2V0IHRoZSB0eXBlIG9mIHRoZSBy
ZW1haW5pbmcgY2hvaWNlIHZhbHVlcyAqLworCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBt
ZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQkJCWN1cnJlbnRfZW50cnkgPSBtZW51OworCQkJ
CWlmIChtZW51LT5zeW0gJiYgbWVudS0+c3ltLT50eXBlID09IFNfVU5LTk9XTikKKwkJCQkJbWVu
dV9zZXRfdHlwZShzeW0tPnR5cGUpOworCQkJfQorCisJCQkvKgorCQkJICogVXNlIHRoZSBjaG9p
Y2UgaXRzZWxmIGFzIHRoZSBwYXJlbnQgZGVwZW5kZW5jeSBvZgorCQkJICogdGhlIGNvbnRhaW5l
ZCBpdGVtcy4gVGhpcyB0dXJucyB0aGUgbW9kZSBvZiB0aGUKKwkJCSAqIGNob2ljZSBpbnRvIGFu
IHVwcGVyIGJvdW5kIG9uIHRoZSB2aXNpYmlsaXR5IG9mIHRoZQorCQkJICogY2hvaWNlIHZhbHVl
IHN5bWJvbHMuCisJCQkgKi8KKwkJCXBhcmVudGRlcCA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7
CisJCX0gZWxzZSBpZiAocGFyZW50LT5wcm9tcHQpCisJCQkvKiBNZW51IG5vZGUgZm9yICdtZW51
JyAqLworCQkJcGFyZW50ZGVwID0gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwcjsKKwkJZWxz
ZQorCQkJLyogTWVudSBub2RlIGZvciAnaWYnICovCisJCQlwYXJlbnRkZXAgPSBwYXJlbnQtPmRl
cDsKKworCQkvKiBGb3IgZWFjaCBjaGlsZCBtZW51IG5vZGUuLi4gKi8KKwkJZm9yIChtZW51ID0g
cGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQkJLyoKKwkJCSAqIFBy
b3BhZ2F0ZSBwYXJlbnQgZGVwZW5kZW5jaWVzIHRvIHRoZSBjaGlsZCBtZW51CisJCQkgKiBub2Rl
LCBhbHNvIHJld3JpdGluZyBhbmQgc2ltcGxpZnlpbmcgZXhwcmVzc2lvbnMKKwkJCSAqLworCQkJ
YmFzZWRlcCA9IHJld3JpdGVfbShtZW51LT5kZXApOworCQkJYmFzZWRlcCA9IGV4cHJfdHJhbnNm
b3JtKGJhc2VkZXApOworCQkJYmFzZWRlcCA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShwYXJl
bnRkZXApLCBiYXNlZGVwKTsKKwkJCWJhc2VkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGJhc2Vk
ZXApOworCQkJbWVudS0+ZGVwID0gYmFzZWRlcDsKKworCQkJaWYgKG1lbnUtPnN5bSkKKwkJCQkv
KgorCQkJCSAqIE5vdGU6IEZvciBzeW1ib2xzLCBhbGwgcHJvbXB0cyBhcmUgaW5jbHVkZWQKKwkJ
CQkgKiB0b28gaW4gdGhlIHN5bWJvbCdzIG93biBwcm9wZXJ0eSBsaXN0CisJCQkJICovCisJCQkJ
cHJvcCA9IG1lbnUtPnN5bS0+cHJvcDsKKwkJCWVsc2UKKwkJCQkvKgorCQkJCSAqIEZvciBub24t
c3ltYm9sIG1lbnUgbm9kZXMsIHdlIGp1c3QgbmVlZCB0bworCQkJCSAqIGhhbmRsZSB0aGUgcHJv
bXB0CisJCQkJICovCisJCQkJcHJvcCA9IG1lbnUtPnByb21wdDsKKworCQkJLyogRm9yIGVhY2gg
cHJvcGVydHkuLi4gKi8KKwkJCWZvciAoOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQkJ
CWlmIChwcm9wLT5tZW51ICE9IG1lbnUpCisJCQkJCS8qCisJCQkJCSAqIFR3byBwb3NzaWJpbGl0
aWVzOgorCQkJCQkgKgorCQkJCQkgKiAxLiBUaGUgcHJvcGVydHkgbGFja3MgZGVwZW5kZW5jaWVz
CisJCQkJCSAqICAgIGFuZCBzbyBpc24ndCBsb2NhdGlvbi1zcGVjaWZpYywKKwkJCQkJICogICAg
ZS5nLiBhbiAnb3B0aW9uJworCQkJCQkgKgorCQkJCQkgKiAyLiBUaGUgcHJvcGVydHkgYmVsb25n
cyB0byBhIHN5bWJvbAorCQkJCQkgKiAgICBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucyBh
bmQKKwkJCQkJICogICAgaXMgZnJvbSBzb21lIG90aGVyIGxvY2F0aW9uLiBJdAorCQkJCQkgKiAg
ICB3aWxsIGJlIGhhbmRsZWQgdGhlcmUgaW4gdGhhdAorCQkJCQkgKiAgICBjYXNlLgorCQkJCQkg
KgorCQkJCQkgKiBTa2lwIHRoZSBwcm9wZXJ0eS4KKwkJCQkJICovCisJCQkJCWNvbnRpbnVlOwor
CisJCQkJLyoKKwkJCQkgKiBQcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2llcyB0byB0aGUKKwkJ
CQkgKiBwcm9wZXJ0eSdzIGNvbmRpdGlvbiwgcmV3cml0aW5nIGFuZAorCQkJCSAqIHNpbXBsaWZ5
aW5nIGV4cHJlc3Npb25zIGF0IHRoZSBzYW1lIHRpbWUKKwkJCQkgKi8KKwkJCQlkZXAgPSByZXdy
aXRlX20ocHJvcC0+dmlzaWJsZS5leHByKTsKKwkJCQlkZXAgPSBleHByX3RyYW5zZm9ybShkZXAp
OworCQkJCWRlcCA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShiYXNlZGVwKSwgZGVwKTsKKwkJ
CQlkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGRlcCk7CisJCQkJaWYgKG1lbnUtPnN5bSAmJiBt
ZW51LT5zeW0tPnR5cGUgIT0gU19UUklTVEFURSkKKwkJCQkJZGVwID0gZXhwcl90cmFuc19ib29s
KGRlcCk7CisJCQkJcHJvcC0+dmlzaWJsZS5leHByID0gZGVwOworCisJCQkJLyoKKwkJCQkgKiBI
YW5kbGUgc2VsZWN0cyBhbmQgaW1wbGllcywgd2hpY2ggbW9kaWZ5IHRoZQorCQkJCSAqIGRlcGVu
ZGVuY2llcyBvZiB0aGUgc2VsZWN0ZWQvaW1wbGllZCBzeW1ib2wKKwkJCQkgKi8KKwkJCQlpZiAo
cHJvcC0+dHlwZSA9PSBQX1NFTEVDVCkgeworCQkJCQlzdHJ1Y3Qgc3ltYm9sICplcyA9IHByb3Bf
Z2V0X3N5bWJvbChwcm9wKTsKKwkJCQkJZXMtPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Io
ZXMtPnJldl9kZXAuZXhwciwKKwkJCQkJCQlleHByX2FsbG9jX2FuZChleHByX2FsbG9jX3N5bWJv
bChtZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOworCQkJCX0gZWxzZSBpZiAocHJvcC0+dHlw
ZSA9PSBQX0lNUExZKSB7CisJCQkJCXN0cnVjdCBzeW1ib2wgKmVzID0gcHJvcF9nZXRfc3ltYm9s
KHByb3ApOworCQkJCQllcy0+aW1wbGllZC5leHByID0gZXhwcl9hbGxvY19vcihlcy0+aW1wbGll
ZC5leHByLAorCQkJCQkJCWV4cHJfYWxsb2NfYW5kKGV4cHJfYWxsb2Nfc3ltYm9sKG1lbnUtPnN5
bSksIGV4cHJfY29weShkZXApKSk7CisJCQkJfQorCQkJfQorCQl9CisKKwkJaWYgKHN5bSAmJiBz
eW1faXNfY2hvaWNlKHN5bSkpCisJCQlleHByX2ZyZWUocGFyZW50ZGVwKTsKKworCQkvKgorCQkg
KiBSZWN1cnNpdmVseSBwcm9jZXNzIGNoaWxkcmVuIGluIHRoZSBzYW1lIGZhc2hpb24gYmVmb3Jl
CisJCSAqIG1vdmluZyBvbgorCQkgKi8KKwkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51
OyBtZW51ID0gbWVudS0+bmV4dCkKKwkJCW1lbnVfZmluYWxpemUobWVudSk7CisJfSBlbHNlIGlm
IChzeW0pIHsKKwkJLyoKKwkJICogQXV0b21hdGljIHN1Ym1lbnUgY3JlYXRpb24uIElmIHN5bSBp
cyBhIHN5bWJvbCBhbmQgQSwgQiwgQywKKwkJICogLi4uIGFyZSBjb25zZWN1dGl2ZSBpdGVtcyAo
c3ltYm9scywgbWVudXMsIGlmcywgZXRjLikgdGhhdAorCQkgKiBhbGwgZGVwZW5kIG9uIHN5bSwg
dGhlbiB0aGUgZm9sbG93aW5nIG1lbnUgc3RydWN0dXJlIGlzCisJCSAqIGNyZWF0ZWQ6CisJCSAq
CisJCSAqCXN5bQorCQkgKgkgKy1BCisJCSAqCSArLUIKKwkJICoJICstQworCQkgKgkgLi4uCisJ
CSAqCisJCSAqIFRoaXMgYWxzbyB3b3JrcyByZWN1cnNpdmVseSwgZ2l2aW5nIHRoZSBmb2xsb3dp
bmcgc3RydWN0dXJlCisJCSAqIGlmIEEgaXMgYSBzeW1ib2wgYW5kIEIgZGVwZW5kcyBvbiBBOgor
CQkgKgorCQkgKglzeW0KKwkJICoJICstQQorCQkgKgkgfCArLUIKKwkJICoJICstQworCQkgKgkg
Li4uCisJCSAqLworCisJCWJhc2VkZXAgPSBwYXJlbnQtPnByb21wdCA/IHBhcmVudC0+cHJvbXB0
LT52aXNpYmxlLmV4cHIgOiBOVUxMOworCQliYXNlZGVwID0gZXhwcl90cmFuc19jb21wYXJlKGJh
c2VkZXAsIEVfVU5FUVVBTCwgJnN5bWJvbF9ubyk7CisJCWJhc2VkZXAgPSBleHByX2VsaW1pbmF0
ZV9kdXBzKGV4cHJfdHJhbnNmb3JtKGJhc2VkZXApKTsKKworCQkvKiBFeGFtaW5lIGNvbnNlY3V0
aXZlIGVsZW1lbnRzIGFmdGVyIHN5bSAqLworCQlsYXN0X21lbnUgPSBOVUxMOworCQlmb3IgKG1l
bnUgPSBwYXJlbnQtPm5leHQ7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7CisJCQlkZXAgPSBt
ZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IG1lbnUtPmRlcDsKKwkJ
CWlmICghZXhwcl9jb250YWluc19zeW1ib2woZGVwLCBzeW0pKQorCQkJCS8qIE5vIGRlcGVuZGVu
Y3ksIHF1aXQgKi8KKwkJCQlicmVhazsKKwkJCWlmIChleHByX2RlcGVuZHNfc3ltYm9sKGRlcCwg
c3ltKSkKKwkJCQkvKiBBYnNvbHV0ZSBkZXBlbmRlbmN5LCBwdXQgaW4gc3VibWVudSAqLworCQkJ
CWdvdG8gbmV4dDsKKworCQkJLyoKKwkJCSAqIEFsc28gY29uc2lkZXIgaXQgYSBkZXBlbmRlbmN5
IG9uIHN5bSBpZiBvdXIKKwkJCSAqIGRlcGVuZGVuY2llcyBjb250YWluIHN5bSBhbmQgYXJlIGEg
InN1cGVyc2V0IiBvZgorCQkJICogc3ltJ3MgZGVwZW5kZW5jaWVzLCBlLmcuICcoc3ltIHx8IFEp
ICYmIFInIHdoZW4gc3ltCisJCQkgKiBkZXBlbmRzIG9uIFIuCisJCQkgKgorCQkJICogTm90ZSB0
aGF0ICdSJyBtaWdodCBiZSBmcm9tIGFuIGVuY2xvc2luZyBtZW51IG9yIGlmLAorCQkJICogbWFr
aW5nIHRoaXMgYSBtb3JlIGNvbW1vbiBjYXNlIHRoYW4gaXQgbWlnaHQgc2VlbS4KKwkJCSAqLwor
CQkJZGVwID0gZXhwcl90cmFuc19jb21wYXJlKGRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsK
KwkJCWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90cmFuc2Zvcm0oZGVwKSk7CisJCQlk
ZXAyID0gZXhwcl9jb3B5KGJhc2VkZXApOworCQkJZXhwcl9lbGltaW5hdGVfZXEoJmRlcCwgJmRl
cDIpOworCQkJZXhwcl9mcmVlKGRlcCk7CisJCQlpZiAoIWV4cHJfaXNfeWVzKGRlcDIpKSB7CisJ
CQkJLyogTm90IHN1cGVyc2V0LCBxdWl0ICovCisJCQkJZXhwcl9mcmVlKGRlcDIpOworCQkJCWJy
ZWFrOworCQkJfQorCQkJLyogU3VwZXJzZXQsIHB1dCBpbiBzdWJtZW51ICovCisJCQlleHByX2Zy
ZWUoZGVwMik7CisJCW5leHQ6CisJCQltZW51X2ZpbmFsaXplKG1lbnUpOworCQkJbWVudS0+cGFy
ZW50ID0gcGFyZW50OworCQkJbGFzdF9tZW51ID0gbWVudTsKKwkJfQorCQlleHByX2ZyZWUoYmFz
ZWRlcCk7CisJCWlmIChsYXN0X21lbnUpIHsKKwkJCXBhcmVudC0+bGlzdCA9IHBhcmVudC0+bmV4
dDsKKwkJCXBhcmVudC0+bmV4dCA9IGxhc3RfbWVudS0+bmV4dDsKKwkJCWxhc3RfbWVudS0+bmV4
dCA9IE5VTEw7CisJCX0KKworCQlzeW0tPmRpcl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3lt
LT5kaXJfZGVwLmV4cHIsIHBhcmVudC0+ZGVwKTsKKwl9CisJZm9yIChtZW51ID0gcGFyZW50LT5s
aXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgeworCQlpZiAoc3ltICYmIHN5bV9pc19jaG9p
Y2Uoc3ltKSAmJgorCQkgICAgbWVudS0+c3ltICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKG1lbnUt
PnN5bSkpIHsKKwkJCWN1cnJlbnRfZW50cnkgPSBtZW51OworCQkJbWVudS0+c3ltLT5mbGFncyB8
PSBTWU1CT0xfQ0hPSUNFVkFMOworCQkJaWYgKCFtZW51LT5wcm9tcHQpCisJCQkJbWVudV93YXJu
KG1lbnUsICJjaG9pY2UgdmFsdWUgbXVzdCBoYXZlIGEgcHJvbXB0Iik7CisJCQlmb3IgKHByb3Ag
PSBtZW51LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCQkJaWYgKHBy
b3AtPnR5cGUgPT0gUF9ERUZBVUxUKQorCQkJCQlwcm9wX3dhcm4ocHJvcCwgImRlZmF1bHRzIGZv
ciBjaG9pY2UgIgorCQkJCQkJICAidmFsdWVzIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCQlpZiAocHJv
cC0+bWVudSA9PSBtZW51KQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAocHJvcC0+dHlwZSA9PSBQ
X1BST01QVCAmJgorCQkJCSAgICBwcm9wLT5tZW51LT5wYXJlbnQtPnN5bSAhPSBzeW0pCisJCQkJ
CXByb3Bfd2Fybihwcm9wLCAiY2hvaWNlIHZhbHVlIHVzZWQgb3V0c2lkZSBpdHMgY2hvaWNlIGdy
b3VwIik7CisJCQl9CisJCQkvKiBOb24tdHJpc3RhdGUgY2hvaWNlIHZhbHVlcyBvZiB0cmlzdGF0
ZSBjaG9pY2VzIG11c3QKKwkJCSAqIGRlcGVuZCBvbiB0aGUgY2hvaWNlIGJlaW5nIHNldCB0byBZ
LiBUaGUgY2hvaWNlCisJCQkgKiB2YWx1ZXMnIGRlcGVuZGVuY2llcyB3ZXJlIHByb3BhZ2F0ZWQg
dG8gdGhlaXIKKwkJCSAqIHByb3BlcnRpZXMgYWJvdmUsIHNvIHRoZSBjaGFuZ2UgaGVyZSBtdXN0
IGJlIHJlLQorCQkJICogcHJvcGFnYXRlZC4KKwkJCSAqLworCQkJaWYgKHN5bS0+dHlwZSA9PSBT
X1RSSVNUQVRFICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKSB7CisJCQkJYmFzZWRl
cCA9IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0sICZzeW1ib2xfeWVzKTsKKwkJCQltZW51
LT5kZXAgPSBleHByX2FsbG9jX2FuZChiYXNlZGVwLCBtZW51LT5kZXApOworCQkJCWZvciAocHJv
cCA9IG1lbnUtPnN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsKKwkJCQkJaWYg
KHByb3AtPm1lbnUgIT0gbWVudSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlwcm9wLT52aXNpYmxl
LmV4cHIgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksCisJCQkJCQkJCQkgICAg
cHJvcC0+dmlzaWJsZS5leHByKTsKKwkJCQl9CisJCQl9CisJCQltZW51X2FkZF9zeW1ib2woUF9D
SE9JQ0UsIHN5bSwgTlVMTCk7CisJCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOwor
CQkJZm9yIChlcCA9ICZwcm9wLT5leHByOyAqZXA7IGVwID0gJigqZXApLT5sZWZ0LmV4cHIpCisJ
CQkJOworCQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxMKTsKKwkJCSgqZXApLT5y
aWdodC5zeW0gPSBtZW51LT5zeW07CisJCX0KKworCQkvKgorCQkgKiBUaGlzIGNvZGUgc2VydmVz
IHR3byBwdXJwb3NlczoKKwkJICoKKwkJICogKDEpIEZsYXR0ZW5pbmcgJ2lmJyBibG9ja3MsIHdo
aWNoIGRvIG5vdCBzcGVjaWZ5IGEgc3VibWVudQorCQkgKiAgICAgYW5kIG9ubHkgYWRkIGRlcGVu
ZGVuY2llcy4KKwkJICoKKwkJICogICAgIChBdXRvbWF0aWMgc3VibWVudSBjcmVhdGlvbiBtaWdo
dCBzdGlsbCBjcmVhdGUgYSBzdWJtZW51CisJCSAqICAgICBmcm9tIGFuICdpZicgYmVmb3JlIHRo
aXMgY29kZSBydW5zLikKKwkJICoKKwkJICogKDIpICJVbmRvaW5nIiBhbnkgYXV0b21hdGljIHN1
Ym1lbnVzIGNyZWF0ZWQgZWFybGllciBiZWxvdworCQkgKiAgICAgcHJvbXB0bGVzcyBzeW1ib2xz
LgorCQkgKgorCQkgKiBCZWZvcmU6CisJCSAqCisJCSAqCUEKKwkJICoJaWYgLi4uIChvciBwcm9t
cHRsZXNzIHN5bWJvbCkKKwkJICoJICstQgorCQkgKgkgKy1DCisJCSAqCUQKKwkJICoKKwkJICog
QWZ0ZXI6CisJCSAqCisJCSAqCUEKKwkJICoJaWYgLi4uIChvciBwcm9tcHRsZXNzIHN5bWJvbCkK
KwkJICoJQgorCQkgKglDCisJCSAqCUQKKwkJICovCisJCWlmIChtZW51LT5saXN0ICYmICghbWVu
dS0+cHJvbXB0IHx8ICFtZW51LT5wcm9tcHQtPnRleHQpKSB7CisJCQlmb3IgKGxhc3RfbWVudSA9
IG1lbnUtPmxpc3Q7IDsgbGFzdF9tZW51ID0gbGFzdF9tZW51LT5uZXh0KSB7CisJCQkJbGFzdF9t
ZW51LT5wYXJlbnQgPSBwYXJlbnQ7CisJCQkJaWYgKCFsYXN0X21lbnUtPm5leHQpCisJCQkJCWJy
ZWFrOworCQkJfQorCQkJbGFzdF9tZW51LT5uZXh0ID0gbWVudS0+bmV4dDsKKwkJCW1lbnUtPm5l
eHQgPSBtZW51LT5saXN0OworCQkJbWVudS0+bGlzdCA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAo
c3ltICYmICEoc3ltLT5mbGFncyAmIFNZTUJPTF9XQVJORUQpKSB7CisJCWlmIChzeW0tPnR5cGUg
PT0gU19VTktOT1dOKQorCQkJbWVudV93YXJuKHBhcmVudCwgImNvbmZpZyBzeW1ib2wgZGVmaW5l
ZCB3aXRob3V0IHR5cGUiKTsKKworCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmICFwYXJlbnQt
PnByb21wdCkKKwkJCW1lbnVfd2FybihwYXJlbnQsICJjaG9pY2UgbXVzdCBoYXZlIGEgcHJvbXB0
Iik7CisKKwkJLyogQ2hlY2sgcHJvcGVydGllcyBjb25uZWN0ZWQgdG8gdGhpcyBzeW1ib2wgKi8K
KwkJc3ltX2NoZWNrX3Byb3Aoc3ltKTsKKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV0FSTkVEOwor
CX0KKworCS8qCisJICogRm9yIG5vbi1vcHRpb25hbCBjaG9pY2VzLCBhZGQgYSByZXZlcnNlIGRl
cGVuZGVuY3kgKGNvcnJlc3BvbmRpbmcgdG8KKwkgKiBhIHNlbGVjdCkgb2YgJzx2aXNpYmlsaXR5
PiAmJiBtJy4gVGhpcyBwcmV2ZW50cyB0aGUgdXNlciBmcm9tCisJICogc2V0dGluZyB0aGUgY2hv
aWNlIG1vZGUgdG8gJ24nIHdoZW4gdGhlIGNob2ljZSBpcyB2aXNpYmxlLgorCSAqCisJICogVGhp
cyB3b3VsZCBhbHNvIHdvcmsgZm9yIG5vbi1jaG9pY2Ugc3ltYm9scywgYnV0IG9ubHkgbm9uLW9w
dGlvbmFsCisJICogY2hvaWNlcyBjbGVhciBTWU1CT0xfT1BUSU9OQUwgYXMgb2Ygd3JpdGluZy4g
Q2hvaWNlcyBhcmUgaW1wbGVtZW50ZWQKKwkgKiBhcyBhIHR5cGUgb2Ygc3ltYm9sLgorCSAqLwor
CWlmIChzeW0gJiYgIXN5bV9pc19vcHRpb25hbChzeW0pICYmIHBhcmVudC0+cHJvbXB0KSB7CisJ
CXN5bS0+cmV2X2RlcC5leHByID0gZXhwcl9hbGxvY19vcihzeW0tPnJldl9kZXAuZXhwciwKKwkJ
CQlleHByX2FsbG9jX2FuZChwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByLAorCQkJCQlleHBy
X2FsbG9jX3N5bWJvbCgmc3ltYm9sX21vZCkpKTsKKwl9Cit9CisKK2Jvb2wgbWVudV9oYXNfcHJv
bXB0KHN0cnVjdCBtZW51ICptZW51KQoreworCWlmICghbWVudS0+cHJvbXB0KQorCQlyZXR1cm4g
ZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgYSBtZW51IGlz
IGVtcHR5LgorICogQSBtZW51IGlzIGNvbnNpZGVyZWQgZW1wdHkgaWYgaXQgY29udGFpbnMgbm8g
b3Igb25seQorICogaW52aXNpYmxlIGVudHJpZXMuCisgKi8KK2Jvb2wgbWVudV9pc19lbXB0eShz
dHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7CisKKwlmb3IgKGNoaWxk
ID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaWYgKG1lbnVf
aXNfdmlzaWJsZShjaGlsZCkpCisJCQlyZXR1cm4oZmFsc2UpOworCX0KKwlyZXR1cm4odHJ1ZSk7
Cit9CisKK2Jvb2wgbWVudV9pc192aXNpYmxlKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVj
dCBtZW51ICpjaGlsZDsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJdHJpc3RhdGUgdmlzaWJsZTsK
KworCWlmICghbWVudS0+cHJvbXB0KQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAobWVudS0+dmlz
aWJpbGl0eSkgeworCQlpZiAoZXhwcl9jYWxjX3ZhbHVlKG1lbnUtPnZpc2liaWxpdHkpID09IG5v
KQorCQkJcmV0dXJuIGZhbHNlOworCX0KKworCXN5bSA9IG1lbnUtPnN5bTsKKwlpZiAoc3ltKSB7
CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCXZpc2libGUgPSBtZW51LT5wcm9tcHQtPnZpc2li
bGUudHJpOworCX0gZWxzZQorCQl2aXNpYmxlID0gbWVudS0+cHJvbXB0LT52aXNpYmxlLnRyaSA9
IGV4cHJfY2FsY192YWx1ZShtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwcik7CisKKwlpZiAodmlz
aWJsZSAhPSBubykKKwkJcmV0dXJuIHRydWU7CisKKwlpZiAoIXN5bSB8fCBzeW1fZ2V0X3RyaXN0
YXRlX3ZhbHVlKG1lbnUtPnN5bSkgPT0gbm8pCisJCXJldHVybiBmYWxzZTsKKworCWZvciAoY2hp
bGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQlpZiAobWVu
dV9pc192aXNpYmxlKGNoaWxkKSkgeworCQkJaWYgKHN5bSkKKwkJCQlzeW0tPmZsYWdzIHw9IFNZ
TUJPTF9ERUZfVVNFUjsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNl
OworfQorCitjb25zdCBjaGFyICptZW51X2dldF9wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpCit7
CisJaWYgKG1lbnUtPnByb21wdCkKKwkJcmV0dXJuIG1lbnUtPnByb21wdC0+dGV4dDsKKwllbHNl
IGlmIChtZW51LT5zeW0pCisJCXJldHVybiBtZW51LT5zeW0tPm5hbWU7CisJcmV0dXJuIE5VTEw7
Cit9CisKK3N0cnVjdCBtZW51ICptZW51X2dldF9yb290X21lbnUoc3RydWN0IG1lbnUgKm1lbnUp
Cit7CisJcmV0dXJuICZyb290bWVudTsKK30KKworc3RydWN0IG1lbnUgKm1lbnVfZ2V0X3BhcmVu
dF9tZW51KHN0cnVjdCBtZW51ICptZW51KQoreworCWVudW0gcHJvcF90eXBlIHR5cGU7CisKKwlm
b3IgKDsgbWVudSAhPSAmcm9vdG1lbnU7IG1lbnUgPSBtZW51LT5wYXJlbnQpIHsKKwkJdHlwZSA9
IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IDA7CisJCWlmICh0eXBlID09IFBf
TUVOVSkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gbWVudTsKK30KKworYm9vbCBtZW51X2hhc19o
ZWxwKHN0cnVjdCBtZW51ICptZW51KQoreworCXJldHVybiBtZW51LT5oZWxwICE9IE5VTEw7Cit9
CisKK2NvbnN0IGNoYXIgKm1lbnVfZ2V0X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJaWYg
KG1lbnUtPmhlbHApCisJCXJldHVybiBtZW51LT5oZWxwOworCWVsc2UKKwkJcmV0dXJuICIiOwor
fQorCitzdGF0aWMgdm9pZCBnZXRfcHJvbXB0X3N0cihzdHJ1Y3QgZ3N0ciAqciwgc3RydWN0IHBy
b3BlcnR5ICpwcm9wLAorCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlpbnQgaSwg
ajsKKwlzdHJ1Y3QgbWVudSAqc3VibWVudVs4XSwgKm1lbnUsICpsb2NhdGlvbiA9IE5VTEw7CisJ
c3RydWN0IGp1bXBfa2V5ICpqdW1wID0gTlVMTDsKKworCXN0cl9wcmludGYociwgIlByb21wdDog
JXNcbiIsIHByb3AtPnRleHQpOworCW1lbnUgPSBwcm9wLT5tZW51LT5wYXJlbnQ7CisJZm9yIChp
ID0gMDsgbWVudSAhPSAmcm9vdG1lbnUgJiYgaSA8IDg7IG1lbnUgPSBtZW51LT5wYXJlbnQpIHsK
KwkJYm9vbCBhY2Nlc3NpYmxlID0gbWVudV9pc192aXNpYmxlKG1lbnUpOworCisJCXN1Ym1lbnVb
aSsrXSA9IG1lbnU7CisJCWlmIChsb2NhdGlvbiA9PSBOVUxMICYmIGFjY2Vzc2libGUpCisJCQls
b2NhdGlvbiA9IG1lbnU7CisJfQorCWlmIChoZWFkICYmIGxvY2F0aW9uKSB7CisJCWp1bXAgPSB4
bWFsbG9jKHNpemVvZihzdHJ1Y3QganVtcF9rZXkpKTsKKworCQlpZiAobWVudV9pc192aXNpYmxl
KHByb3AtPm1lbnUpKSB7CisJCQkvKgorCQkJICogVGhlcmUgaXMgbm90IGVub3VnaCByb29tIHRv
IHB1dCB0aGUgaGludCBhdCB0aGUKKwkJCSAqIGJlZ2lubmluZyBvZiB0aGUgIlByb21wdCIgbGlu
ZS4gUHV0IHRoZSBoaW50IG9uIHRoZQorCQkJICogbGFzdCAiTG9jYXRpb24iIGxpbmUgZXZlbiB3
aGVuIGl0IHdvdWxkIGJlbG9uZyBvbgorCQkJICogdGhlIGZvcm1lci4KKwkJCSAqLworCQkJanVt
cC0+dGFyZ2V0ID0gcHJvcC0+bWVudTsKKwkJfSBlbHNlCisJCQlqdW1wLT50YXJnZXQgPSBsb2Nh
dGlvbjsKKworCQlpZiAobGlzdF9lbXB0eShoZWFkKSkKKwkJCWp1bXAtPmluZGV4ID0gMDsKKwkJ
ZWxzZQorCQkJanVtcC0+aW5kZXggPSBsaXN0X2VudHJ5KGhlYWQtPnByZXYsIHN0cnVjdCBqdW1w
X2tleSwKKwkJCQkJCSBlbnRyaWVzKS0+aW5kZXggKyAxOworCisJCWxpc3RfYWRkX3RhaWwoJmp1
bXAtPmVudHJpZXMsIGhlYWQpOworCX0KKworCWlmIChpID4gMCkgeworCQlzdHJfcHJpbnRmKHIs
ICIgIExvY2F0aW9uOlxuIik7CisJCWZvciAoaiA9IDQ7IC0taSA+PSAwOyBqICs9IDIpIHsKKwkJ
CW1lbnUgPSBzdWJtZW51W2ldOworCQkJaWYgKGp1bXAgJiYgbWVudSA9PSBsb2NhdGlvbikKKwkJ
CQlqdW1wLT5vZmZzZXQgPSBzdHJsZW4oci0+cyk7CisJCQlzdHJfcHJpbnRmKHIsICIlKmMtPiAl
cyIsIGosICcgJywKKwkJCQkgICBtZW51X2dldF9wcm9tcHQobWVudSkpOworCQkJaWYgKG1lbnUt
PnN5bSkgeworCQkJCXN0cl9wcmludGYociwgIiAoJXMgWz0lc10pIiwgbWVudS0+c3ltLT5uYW1l
ID8KKwkJCQkJbWVudS0+c3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQkJc3ltX2dldF9zdHJp
bmdfdmFsdWUobWVudS0+c3ltKSk7CisJCQl9CisJCQlzdHJfYXBwZW5kKHIsICJcbiIpOworCQl9
CisJfQorfQorCisvKgorICogZ2V0IHByb3BlcnR5IG9mIHR5cGUgUF9TWU1CT0wKKyAqLworc3Rh
dGljIHN0cnVjdCBwcm9wZXJ0eSAqZ2V0X3N5bWJvbF9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkK
K3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBOVUxMOworCisJZm9yX2FsbF9wcm9wZXJ0aWVz
KHN5bSwgcHJvcCwgUF9TWU1CT0wpCisJCWJyZWFrOworCXJldHVybiBwcm9wOworfQorCitzdGF0
aWMgdm9pZCBnZXRfc3ltYm9sX3Byb3BzX3N0cihzdHJ1Y3QgZ3N0ciAqciwgc3RydWN0IHN5bWJv
bCAqc3ltLAorCQkJCSBlbnVtIHByb3BfdHlwZSB0b2ssIGNvbnN0IGNoYXIgKnByZWZpeCkKK3sK
Kwlib29sIGhpdCA9IGZhbHNlOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWZvcl9hbGxf
cHJvcGVydGllcyhzeW0sIHByb3AsIHRvaykgeworCQlpZiAoIWhpdCkgeworCQkJc3RyX2FwcGVu
ZChyLCBwcmVmaXgpOworCQkJaGl0ID0gdHJ1ZTsKKwkJfSBlbHNlCisJCQlzdHJfcHJpbnRmKHIs
ICIgJiYgIik7CisJCWV4cHJfZ3N0cl9wcmludChwcm9wLT5leHByLCByKTsKKwl9CisJaWYgKGhp
dCkKKwkJc3RyX2FwcGVuZChyLCAiXG4iKTsKK30KKworLyoKKyAqIGhlYWQgaXMgb3B0aW9uYWwg
YW5kIG1heSBiZSBOVUxMCisgKi8KK3N0YXRpYyB2b2lkIGdldF9zeW1ib2xfc3RyKHN0cnVjdCBn
c3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sCisJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFk
KQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKworCWlmIChzeW0gJiYgc3ltLT5uYW1lKSB7
CisJCXN0cl9wcmludGYociwgIlN5bWJvbDogJXMgWz0lc11cbiIsIHN5bS0+bmFtZSwKKwkJCSAg
IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOworCQlzdHJfcHJpbnRmKHIsICJUeXBlICA6ICVz
XG4iLCBzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOworCQlpZiAoc3ltLT50eXBlID09IFNfSU5U
IHx8IHN5bS0+dHlwZSA9PSBTX0hFWCkgeworCQkJcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChz
eW0pOworCQkJaWYgKHByb3ApIHsKKwkJCQlzdHJfcHJpbnRmKHIsICJSYW5nZSA6ICIpOworCQkJ
CWV4cHJfZ3N0cl9wcmludChwcm9wLT5leHByLCByKTsKKwkJCQlzdHJfYXBwZW5kKHIsICJcbiIp
OworCQkJfQorCQl9CisJfQorCWZvcl9hbGxfcHJvbXB0cyhzeW0sIHByb3ApCisJCWdldF9wcm9t
cHRfc3RyKHIsIHByb3AsIGhlYWQpOworCisJcHJvcCA9IGdldF9zeW1ib2xfcHJvcChzeW0pOwor
CWlmIChwcm9wKSB7CisJCXN0cl9wcmludGYociwgIiAgRGVmaW5lZCBhdCAlczolZFxuIiwgcHJv
cC0+bWVudS0+ZmlsZS0+bmFtZSwKKwkJCXByb3AtPm1lbnUtPmxpbmVubyk7CisJCWlmICghZXhw
cl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgeworCQkJc3RyX2FwcGVuZChyLCAiICBEZXBl
bmRzIG9uOiAiKTsKKwkJCWV4cHJfZ3N0cl9wcmludChwcm9wLT52aXNpYmxlLmV4cHIsIHIpOwor
CQkJc3RyX2FwcGVuZChyLCAiXG4iKTsKKwkJfQorCX0KKworCWdldF9zeW1ib2xfcHJvcHNfc3Ry
KHIsIHN5bSwgUF9TRUxFQ1QsICIgIFNlbGVjdHM6ICIpOworCWlmIChzeW0tPnJldl9kZXAuZXhw
cikgeworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCB5ZXMs
ICIgIFNlbGVjdGVkIGJ5IFt5XTpcbiIpOworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+
cmV2X2RlcC5leHByLCByLCBtb2QsICIgIFNlbGVjdGVkIGJ5IFttXTpcbiIpOworCQlleHByX2dz
dHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCBubywgIiAgU2VsZWN0ZWQgYnkg
W25dOlxuIik7CisJfQorCisJZ2V0X3N5bWJvbF9wcm9wc19zdHIociwgc3ltLCBQX0lNUExZLCAi
ICBJbXBsaWVzOiAiKTsKKwlpZiAoc3ltLT5pbXBsaWVkLmV4cHIpIHsKKwkJZXhwcl9nc3RyX3By
aW50X3JldmRlcChzeW0tPmltcGxpZWQuZXhwciwgciwgeWVzLCAiICBJbXBsaWVkIGJ5IFt5XTpc
biIpOworCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+aW1wbGllZC5leHByLCByLCBtb2Qs
ICIgIEltcGxpZWQgYnkgW21dOlxuIik7CisJCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5p
bXBsaWVkLmV4cHIsIHIsIG5vLCAiICBJbXBsaWVkIGJ5IFtuXTpcbiIpOworCX0KKworCXN0cl9h
cHBlbmQociwgIlxuXG4iKTsKK30KKworc3RydWN0IGdzdHIgZ2V0X3JlbGF0aW9uc19zdHIoc3Ry
dWN0IHN5bWJvbCAqKnN5bV9hcnIsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJc3RydWN0
IHN5bWJvbCAqc3ltOworCXN0cnVjdCBnc3RyIHJlcyA9IHN0cl9uZXcoKTsKKwlpbnQgaTsKKwor
CWZvciAoaSA9IDA7IHN5bV9hcnIgJiYgKHN5bSA9IHN5bV9hcnJbaV0pOyBpKyspCisJCWdldF9z
eW1ib2xfc3RyKCZyZXMsIHN5bSwgaGVhZCk7CisJaWYgKCFpKQorCQlzdHJfYXBwZW5kKCZyZXMs
ICJObyBtYXRjaGVzIGZvdW5kLlxuIik7CisJcmV0dXJuIHJlczsKK30KKworCit2b2lkIG1lbnVf
Z2V0X2V4dF9oZWxwKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCkKK3sKKwlz
dHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07CisJY29uc3QgY2hhciAqaGVscF90ZXh0ID0g
bm9oZWxwX3RleHQ7CisKKwlpZiAobWVudV9oYXNfaGVscChtZW51KSkgeworCQlpZiAoc3ltLT5u
YW1lKQorCQkJc3RyX3ByaW50ZihoZWxwLCAiJXMlczpcblxuIiwgQ09ORklHXywgc3ltLT5uYW1l
KTsKKwkJaGVscF90ZXh0ID0gbWVudV9nZXRfaGVscChtZW51KTsKKwl9CisJc3RyX3ByaW50Ziho
ZWxwLCAiJXNcbiIsIGhlbHBfdGV4dCk7CisJaWYgKHN5bSkKKwkJZ2V0X3N5bWJvbF9zdHIoaGVs
cCwgc3ltLCBOVUxMKTsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9tZXJnZV9jb25m
aWcuc2ggYi9zdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmlnLnNoCm5ldyBmaWxlIG1vZGUgMTAw
NzU1CmluZGV4IDAwMDAwMDAuLmQ5MjRjNTEKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tj
b25maWcvbWVyZ2VfY29uZmlnLnNoCkBAIC0wLDAgKzEsMTg5IEBACisjIS9iaW4vc2gKKyMgU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyMKKyMgIG1lcmdlX2NvbmZpZy5zaCAtIFRh
a2VzIGEgbGlzdCBvZiBjb25maWcgZnJhZ21lbnQgdmFsdWVzLCBhbmQgbWVyZ2VzCisjICB0aGVt
IG9uZSBieSBvbmUuIFByb3ZpZGVzIHdhcm5pbmdzIG9uIG92ZXJyaWRkZW4gdmFsdWVzLCBhbmQg
c3BlY2lmaWVkCisjICB2YWx1ZXMgdGhhdCBkaWQgbm90IG1ha2UgaXQgdG8gdGhlIHJlc3VsdGlu
ZyAuY29uZmlnIGZpbGUgKGR1ZSB0byBtaXNzZWQKKyMgIGRlcGVuZGVuY2llcyBvciBjb25maWcg
c3ltYm9sIHJlbW92YWwpLgorIworIyAgUG9ydGlvbnMgcmV1c2VkIGZyb20ga2NvbmZfY2hlY2sg
YW5kIGdlbmVyYXRlX2NmZzoKKyMgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2Nn
aXQuY2dpL3lvY3RvLWtlcm5lbC10b29scy90cmVlL3Rvb2xzL2tjb25mX2NoZWNrCisjICBodHRw
Oi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1rZXJuZWwtdG9vbHMv
dHJlZS90b29scy9nZW5lcmF0ZV9jZmcKKyMKKyMgIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFdp
bmQgUml2ZXIgU3lzdGVtcywgSW5jLgorIyAgQ29weXJpZ2h0IDIwMTEgTGluYXJvCisKK2NsZWFu
X3VwKCkgeworCXJtIC1mICRUTVBfRklMRQorCXJtIC1mICRNRVJHRV9GSUxFCisJZXhpdAorfQor
dHJhcCBjbGVhbl91cCBIVVAgSU5UIFRFUk0KKwordXNhZ2UoKSB7CisJZWNobyAiVXNhZ2U6ICQw
IFtPUFRJT05TXSBbQ09ORklHIFsuLi5dXSIKKwllY2hvICIgIC1oICAgIGRpc3BsYXkgdGhpcyBo
ZWxwIHRleHQiCisJZWNobyAiICAtbSAgICBvbmx5IG1lcmdlIHRoZSBmcmFnbWVudHMsIGRvIG5v
dCBleGVjdXRlIHRoZSBtYWtlIGNvbW1hbmQiCisJZWNobyAiICAtbiAgICB1c2UgYWxsbm9jb25m
aWcgaW5zdGVhZCBvZiBhbGxkZWZjb25maWciCisJZWNobyAiICAtciAgICBsaXN0IHJlZHVuZGFu
dCBlbnRyaWVzIHdoZW4gbWVyZ2luZyBmcmFnbWVudHMiCisJZWNobyAiICAteSAgICBtYWtlIGJ1
aWx0aW4gaGF2ZSBwcmVjZWRlbmNlIG92ZXIgbW9kdWxlcyIKKwllY2hvICIgIC1PICAgIGRpciB0
byBwdXQgZ2VuZXJhdGVkIG91dHB1dCBmaWxlcy4gIENvbnNpZGVyIHNldHRpbmcgXCRLQ09ORklH
X0NPTkZJRyBpbnN0ZWFkLiIKKwllY2hvCisJZWNobyAiVXNlZCBwcmVmaXg6ICckQ09ORklHX1BS
RUZJWCcuIFlvdSBjYW4gcmVkZWZpbmUgaXQgd2l0aCBcJENPTkZJR18gZW52aXJvbm1lbnQgdmFy
aWFibGUuIgorfQorCitSVU5NQUtFPXRydWUKK0FMTFRBUkdFVD1hbGxkZWZjb25maWcKK1dBUk5S
RURVTj1mYWxzZQorQlVJTFRJTj1mYWxzZQorT1VUUFVUPS4KK0NPTkZJR19QUkVGSVg9JHtDT05G
SUdfLUNPTkZJR199CisKK3doaWxlIHRydWU7IGRvCisJY2FzZSAkMSBpbgorCSItbiIpCisJCUFM
TFRBUkdFVD1hbGxub2NvbmZpZworCQlzaGlmdAorCQljb250aW51ZQorCQk7OworCSItbSIpCisJ
CVJVTk1BS0U9ZmFsc2UKKwkJc2hpZnQKKwkJY29udGludWUKKwkJOzsKKwkiLWgiKQorCQl1c2Fn
ZQorCQlleGl0CisJCTs7CisJIi1yIikKKwkJV0FSTlJFRFVOPXRydWUKKwkJc2hpZnQKKwkJY29u
dGludWUKKwkJOzsKKwkiLXkiKQorCQlCVUlMVElOPXRydWUKKwkJc2hpZnQKKwkJY29udGludWUK
KwkJOzsKKwkiLU8iKQorCQlpZiBbIC1kICQyIF07dGhlbgorCQkJT1VUUFVUPSQoZWNobyAkMiB8
IHNlZCAncy9cLyokLy8nKQorCQllbHNlCisJCQllY2hvICJvdXRwdXQgZGlyZWN0b3J5ICQyIGRv
ZXMgbm90IGV4aXN0IiAxPiYyCisJCQlleGl0IDEKKwkJZmkKKwkJc2hpZnQgMgorCQljb250aW51
ZQorCQk7OworCSopCisJCWJyZWFrCisJCTs7CisJZXNhYworZG9uZQorCitpZiBbICIkIyIgLWx0
IDEgXSA7IHRoZW4KKwl1c2FnZQorCWV4aXQKK2ZpCisKK2lmIFsgLXogIiRLQ09ORklHX0NPTkZJ
RyIgXTsgdGhlbgorCWlmIFsgIiRPVVRQVVQiICE9IC4gXTsgdGhlbgorCQlLQ09ORklHX0NPTkZJ
Rz0kKHJlYWRsaW5rIC1tIC0tICIkT1VUUFVULy5jb25maWciKQorCWVsc2UKKwkJS0NPTkZJR19D
T05GSUc9LmNvbmZpZworCWZpCitmaQorCitJTklURklMRT0kMQorc2hpZnQ7CisKK2lmIFsgISAt
ciAiJElOSVRGSUxFIiBdOyB0aGVuCisJZWNobyAiVGhlIGJhc2UgZmlsZSAnJElOSVRGSUxFJyBk
b2VzIG5vdCBleGlzdC4gIEV4aXQuIiA+JjIKKwlleGl0IDEKK2ZpCisKK01FUkdFX0xJU1Q9JCoK
K1NFRF9DT05GSUdfRVhQMT0icy9eXCgke0NPTkZJR19QUkVGSVh9W2EtekEtWjAtOV9dKlwpPS4q
L1wxL3AiCitTRURfQ09ORklHX0VYUDI9InMvXiMgXCgke0NPTkZJR19QUkVGSVh9W2EtekEtWjAt
OV9dKlwpIGlzIG5vdCBzZXQkL1wxL3AiCisKK1RNUF9GSUxFPSQobWt0ZW1wIC4vLnRtcC5jb25m
aWcuWFhYWFhYWFhYWCkKK01FUkdFX0ZJTEU9JChta3RlbXAgLi8ubWVyZ2VfdG1wLmNvbmZpZy5Y
WFhYWFhYWFhYKQorCitlY2hvICJVc2luZyAkSU5JVEZJTEUgYXMgYmFzZSIKK2NhdCAkSU5JVEZJ
TEUgPiAkVE1QX0ZJTEUKKworIyBNZXJnZSBmaWxlcywgcHJpbnRpbmcgd2FybmluZ3Mgb24gb3Zl
cnJpZGRlbiB2YWx1ZXMKK2ZvciBPUklHX01FUkdFX0ZJTEUgaW4gJE1FUkdFX0xJU1QgOyBkbwor
CWVjaG8gIk1lcmdpbmcgJE9SSUdfTUVSR0VfRklMRSIKKwlpZiBbICEgLXIgIiRPUklHX01FUkdF
X0ZJTEUiIF07IHRoZW4KKwkJZWNobyAiVGhlIG1lcmdlIGZpbGUgJyRPUklHX01FUkdFX0ZJTEUn
IGRvZXMgbm90IGV4aXN0LiAgRXhpdC4iID4mMgorCQlleGl0IDEKKwlmaQorCWNhdCAkT1JJR19N
RVJHRV9GSUxFID4gJE1FUkdFX0ZJTEUKKwlDRkdfTElTVD0kKHNlZCAtbiAtZSAiJFNFRF9DT05G
SUdfRVhQMSIgLWUgIiRTRURfQ09ORklHX0VYUDIiICRNRVJHRV9GSUxFKQorCisJZm9yIENGRyBp
biAkQ0ZHX0xJU1QgOyBkbworCQlncmVwIC1xIC13ICRDRkcgJFRNUF9GSUxFIHx8IGNvbnRpbnVl
CisJCVBSRVZfVkFMPSQoZ3JlcCAtdyAkQ0ZHICRUTVBfRklMRSkKKwkJTkVXX1ZBTD0kKGdyZXAg
LXcgJENGRyAkTUVSR0VfRklMRSkKKwkJQlVJTFRJTl9GTEFHPWZhbHNlCisJCWlmIFsgIiRCVUlM
VElOIiA9ICJ0cnVlIiBdICYmIFsgIiR7TkVXX1ZBTCNDT05GSUdfKj19IiA9ICJtIiBdICYmIFsg
IiR7UFJFVl9WQUwjQ09ORklHXyo9fSIgPSAieSIgXTsgdGhlbgorCQkJZWNobyBQcmV2aW91cyAg
dmFsdWU6ICRQUkVWX1ZBTAorCQkJZWNobyBOZXcgdmFsdWU6ICAgICAgICRORVdfVkFMCisJCQll
Y2hvIC15IHBhc3NlZCwgd2lsbCBub3QgZGVtb3RlIHkgdG8gbQorCQkJZWNobworCQkJQlVJTFRJ
Tl9GTEFHPXRydWUKKwkJZWxpZiBbICJ4JFBSRVZfVkFMIiAhPSAieCRORVdfVkFMIiBdIDsgdGhl
bgorCQkJZWNobyBWYWx1ZSBvZiAkQ0ZHIGlzIHJlZGVmaW5lZCBieSBmcmFnbWVudCAkT1JJR19N
RVJHRV9GSUxFOgorCQkJZWNobyBQcmV2aW91cyAgdmFsdWU6ICRQUkVWX1ZBTAorCQkJZWNobyBO
ZXcgdmFsdWU6ICAgICAgICRORVdfVkFMCisJCQllY2hvCisJCWVsaWYgWyAiJFdBUk5SRURVTiIg
PSAidHJ1ZSIgXTsgdGhlbgorCQkJZWNobyBWYWx1ZSBvZiAkQ0ZHIGlzIHJlZHVuZGFudCBieSBm
cmFnbWVudCAkT1JJR19NRVJHRV9GSUxFOgorCQlmaQorCQlpZiBbICIkQlVJTFRJTl9GTEFHIiA9
ICJmYWxzZSIgXTsgdGhlbgorCQkJc2VkIC1pICIvJENGR1sgPV0vZCIgJFRNUF9GSUxFCisJCWVs
c2UKKwkJCXNlZCAtaSAiLyRDRkdbID1dL2QiICRNRVJHRV9GSUxFCisJCWZpCisJZG9uZQorCWNh
dCAkTUVSR0VfRklMRSA+PiAkVE1QX0ZJTEUKK2RvbmUKKworaWYgWyAiJFJVTk1BS0UiID0gImZh
bHNlIiBdOyB0aGVuCisJY3AgLVQgLS0gIiRUTVBfRklMRSIgIiRLQ09ORklHX0NPTkZJRyIKKwll
Y2hvICIjIgorCWVjaG8gIiMgbWVyZ2VkIGNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAkS0NPTkZJ
R19DT05GSUcgKG5lZWRzIG1ha2UpIgorCWVjaG8gIiMiCisJY2xlYW5fdXAKKwlleGl0CitmaQor
CisjIElmIHdlIGhhdmUgYW4gb3V0cHV0IGRpciwgc2V0dXAgdGhlIE89IGFyZ3VtZW50LCBvdGhl
cndpc2UgbGVhdmUKKyMgaXQgYmxhbmssIHNpbmNlIE89LiB3aWxsIGNyZWF0ZSBhbiB1bm5lY2Vz
c2FyeSAuL3NvdXJjZSBzb2Z0bGluaworT1VUUFVUX0FSRz0iIgoraWYgWyAiJE9VVFBVVCIgIT0g
Ii4iIF0gOyB0aGVuCisJT1VUUFVUX0FSRz0iTz0kT1VUUFVUIgorZmkKKworCisjIFVzZSB0aGUg
bWVyZ2VkIGZpbGUgYXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvcjoKKyMgYWxsZGVmY29uZmlnOiBG
aWxscyBpbiBhbnkgbWlzc2luZyBzeW1ib2xzIHdpdGggS2NvbmZpZyBkZWZhdWx0CisjIGFsbG5v
Y29uZmlnOiBGaWxscyBpbiBhbnkgbWlzc2luZyBzeW1ib2xzIHdpdGggIyBDT05GSUdfKiBpcyBu
b3Qgc2V0CittYWtlIEtDT05GSUdfQUxMQ09ORklHPSRUTVBfRklMRSAkT1VUUFVUX0FSRyAkQUxM
VEFSR0VUCisKKworIyBDaGVjayBhbGwgc3BlY2lmaWVkIGNvbmZpZyB2YWx1ZXMgdG9vayAobWln
aHQgaGF2ZSBtaXNzZWQtZGVwZW5kZW5jeSBpc3N1ZXMpCitmb3IgQ0ZHIGluICQoc2VkIC1uIC1l
ICIkU0VEX0NPTkZJR19FWFAxIiAtZSAiJFNFRF9DT05GSUdfRVhQMiIgJFRNUF9GSUxFKTsgZG8K
KworCVJFUVVFU1RFRF9WQUw9JChncmVwIC13IC1lICIkQ0ZHIiAkVE1QX0ZJTEUpCisJQUNUVUFM
X1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICIkS0NPTkZJR19DT05GSUciKQorCWlmIFsgIngkUkVR
VUVTVEVEX1ZBTCIgIT0gIngkQUNUVUFMX1ZBTCIgXSA7IHRoZW4KKwkJZWNobyAiVmFsdWUgcmVx
dWVzdGVkIGZvciAkQ0ZHIG5vdCBpbiBmaW5hbCAuY29uZmlnIgorCQllY2hvICJSZXF1ZXN0ZWQg
dmFsdWU6ICAkUkVRVUVTVEVEX1ZBTCIKKwkJZWNobyAiQWN0dWFsIHZhbHVlOiAgICAgJEFDVFVB
TF9WQUwiCisJCWVjaG8gIiIKKwlmaQorZG9uZQorCitjbGVhbl91cApkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnL25jb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy9uY29uZi1jZmcuc2gK
bmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDAxNTU5ZQotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy9uY29uZi1jZmcuc2gKQEAgLTAsMCArMSw0NyBAQAorIyEv
YmluL3NoCisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK1BLRz0ibmN1cnNl
c3cgbWVudXcgcGFuZWx3IgorUEtHMj0ibmN1cnNlcyBtZW51IHBhbmVsIgorCitpZiBbIC1uICIk
KGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4KKwlpZiBwa2ctY29uZmlnIC0tZXhpc3Rz
ICRQS0c7IHRoZW4KKwkJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBLRylc
IgorCQllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCIKKwkJZXhpdCAwCisJ
ZmkKKworCWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzI7IHRoZW4KKwkJZWNobyBjZmxhZ3M9
XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBLRzIpXCIKKwkJZWNobyBsaWJzPVwiJChwa2ctY29u
ZmlnIC0tbGlicyAkUEtHMilcIgorCQlleGl0IDAKKwlmaQorZmkKKworIyBDaGVjayB0aGUgZGVm
YXVsdCBwYXRocyBpbiBjYXNlIHBrZy1jb25maWcgaXMgbm90IGluc3RhbGxlZC4KKyMgKEV2ZW4g
aWYgaXQgaXMgaW5zdGFsbGVkLCBzb21lIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyBvcGVuU1VTRSBj
YW5ub3QKKyMgZmluZCBuY3Vyc2VzIGJ5IHBrZy1jb25maWcuKQoraWYgWyAtZiAvdXNyL2luY2x1
ZGUvbmN1cnNlc3cvbmN1cnNlcy5oIF07IHRoZW4KKwllY2hvIGNmbGFncz1cIi1EX0dOVV9TT1VS
Q0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3dcIgorCWVjaG8gbGlicz1cIi1sbmN1cnNlc3cgLWxt
ZW51dyAtbHBhbmVsd1wiCisJZXhpdCAwCitmaQorCitpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vy
c2VzL25jdXJzZXMuaCBdOyB0aGVuCisJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vz
ci9pbmNsdWRlL25jdXJzZXNcIgorCWVjaG8gbGlicz1cIi1sbmN1cnNlcyAtbG1lbnUgLWxwYW5l
bFwiCisJZXhpdCAwCitmaQorCitpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2VzLmggXTsgdGhl
bgorCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRVwiCisJZWNobyBsaWJzPVwiLWxuY3Vyc2Vz
IC1sbWVudSAtbHBhbmVsXCIKKwlleGl0IDAKK2ZpCisKK2VjaG8gPiYyICIqIgorZWNobyA+JjIg
IiogVW5hYmxlIHRvIGZpbmQgdGhlIG5jdXJzZXMgcGFja2FnZS4iCitlY2hvID4mMiAiKiBJbnN0
YWxsIG5jdXJzZXMgKG5jdXJzZXMtZGV2ZWwgb3IgbGlibmN1cnNlcy1kZXYiCitlY2hvID4mMiAi
KiBkZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24pLiIKK2VjaG8gPiYyICIqIgorZXhpdCAx
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbmNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy9u
Y29uZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZDkwOGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvbmNvbmYuYwpAQCAtMCwwICsxLDE1NTUgQEAK
Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IE5pciBUemFjaGFyIDxuaXIudHphY2hhckBnbWFpbC5jb20+CisgKgorICogRGVyaXZl
ZCBmcm9tIG1lbnVjb25maWcuCisgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyNkZWZpbmUgX0dO
VV9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5o
PgorCisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAibmNvbmYuaCIKKyNpbmNsdWRlIDxjdHlw
ZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciBuY29uZl9nbG9iYWxfaGVscFtdID0KKyJIZWxwIHdp
bmRvd3NcbiIKKyItLS0tLS0tLS0tLS1cbiIKKyJvICBHbG9iYWwgaGVscDogIFVubGVzcyBpbiBh
IGRhdGEgZW50cnkgd2luZG93LCBwcmVzc2luZyA8RjE+IHdpbGwgZ2l2ZSBcbiIKKyIgICB5b3Ug
dGhlIGdsb2JhbCBoZWxwIHdpbmRvdywgd2hpY2ggeW91IGFyZSBqdXN0IHJlYWRpbmcuXG4iCisi
XG4iCisibyAgQSBzaG9ydCB2ZXJzaW9uIG9mIHRoZSBnbG9iYWwgaGVscCBpcyBhdmFpbGFibGUg
YnkgcHJlc3NpbmcgPEYzPi5cbiIKKyJcbiIKKyJvICBMb2NhbCBoZWxwOiAgVG8gZ2V0IGhlbHAg
cmVsYXRlZCB0byB0aGUgY3VycmVudCBtZW51IGVudHJ5LCB1c2UgYW55XG4iCisiICAgb2YgPD8+
IDxoPiwgb3IgaWYgaW4gYSBkYXRhIGVudHJ5IHdpbmRvdyB0aGVuIHByZXNzIDxGMT4uXG4iCisi
XG4iCisiXG4iCisiTWVudSBlbnRyaWVzXG4iCisiLS0tLS0tLS0tLS0tXG4iCisiVGhpcyBpbnRl
cmZhY2UgbGV0cyB5b3Ugc2VsZWN0IGZlYXR1cmVzIGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUga2Vy
bmVsXG4iCisiYnVpbGQuICBVbmlrcmFmdCBmZWF0dXJlcyBjYW4gZWl0aGVyIGJlIHNlbGVjdGVk
IG9yIGRlc2VsZWN0ZWQuXG4iCisiUGFyYW1ldGVycyBtdXN0IGJlIGVudGVyZWQgYXMgdGV4dCBv
ciBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIG51bWJlcnMuXG4iCisiXG4iCisiTWVudSBlbnRyaWVz
IGJlZ2lubmluZyB3aXRoIGZvbGxvd2luZyBicmFjZXMgcmVwcmVzZW50IGZlYXR1cmVzIHRoYXRc
biIKKyIgIFsgXSAgY2FuIGJlIGJ1aWx0IGluIG9yIHJlbW92ZWRcbiIKKyIgIDwgPiAgY2FuIGJl
IGJ1aWx0IGluLCBtb2R1bGFyaXplZCBvciByZW1vdmVkXG4iCisiICB7IH0gIGNhbiBiZSBidWls
dCBpbiBvciBtb2R1bGFyaXplZCwgYXJlIHNlbGVjdGVkIGJ5IGFub3RoZXIgZmVhdHVyZVxuIgor
IiAgLSAtICBhcmUgc2VsZWN0ZWQgYnkgYW5vdGhlciBmZWF0dXJlXG4iCisiICBYWFggIGNhbm5v
dCBiZSBzZWxlY3RlZC4gIFN5bWJvbCBJbmZvIDxGMj4gdGVsbHMgeW91IHdoeS5cbiIKKyIqLCBN
IG9yIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNlcyBtZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXMg
YSBtb2R1bGVcbiIKKyJvciB0byBleGNsdWRlIHRoZSBmZWF0dXJlIHJlc3BlY3RpdmVseS5cbiIK
KyJcbiIKKyJUbyBjaGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQgd2l0
aCB0aGUgbW92ZW1lbnQga2V5c1xuIgorImxpc3RlZCBiZWxvdyBhbmQgcHJlc3MgPHk+IHRvIGJ1
aWxkIGl0IGluLCA8bT4gdG8gbWFrZSBpdCBhIG1vZHVsZSBvclxuIgorIjxuPiB0byByZW1vdmUg
aXQuICBZb3UgbWF5IHByZXNzIHRoZSA8U3BhY2U+IGtleSB0byBjeWNsZSB0aHJvdWdoIHRoZVxu
IgorImF2YWlsYWJsZSBvcHRpb25zLlxuIgorIlxuIgorIkEgdHJhaWxpbmcgXCItLS0+XCIgZGVz
aWduYXRlcyBhIHN1Ym1lbnUsIGEgdHJhaWxpbmcgXCItLS0tXCIgYW5cbiIKKyJlbXB0eSBzdWJt
ZW51LlxuIgorIlxuIgorIk1lbnUgbmF2aWdhdGlvbiBrZXlzXG4iCisiLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxu
IgorIkxpbmV3aXNlIHVwICAgICAgICAgICAgICAgICA8VXA+XG4iCisiTGluZXdpc2UgZG93biAg
ICAgICAgICAgICAgIDxEb3duPlxuIgorIlBhZ2V3aXNlIHVwICAgICAgICAgICAgICAgICA8UGFn
ZSBVcD5cbiIKKyJQYWdld2lzZSBkb3duICAgICAgICAgICAgICAgPFBhZ2UgRG93bj5cbiIKKyJG
aXJzdCBlbnRyeSAgICAgICAgICAgICAgICAgPEhvbWU+XG4iCisiTGFzdCBlbnRyeSAgICAgICAg
ICAgICAgICAgIDxFbmQ+XG4iCisiRW50ZXIgYSBzdWJtZW51ICAgICAgICAgICAgIDxSaWdodD4g
IDxFbnRlcj5cbiIKKyJHbyBiYWNrIHRvIHBhcmVudCBtZW51ICAgICAgPExlZnQ+ICAgPEVzYz4g
IDxGNT5cbiIKKyJDbG9zZSBhIGhlbHAgd2luZG93ICAgICAgICAgPEVudGVyPiAgPEVzYz4gIDxG
NT5cbiIKKyJDbG9zZSBlbnRyeSB3aW5kb3csIGFwcGx5ICAgPEVudGVyPlxuIgorIkNsb3NlIGVu
dHJ5IHdpbmRvdywgZm9yZ2V0ICA8RXNjPiAgPEY1PlxuIgorIlN0YXJ0IGluY3JlbWVudGFsLCBj
YXNlLWluc2Vuc2l0aXZlIHNlYXJjaCBmb3IgU1RSSU5HIGluIG1lbnUgZW50cmllcyxcbiIKKyIg
ICAgbm8gcmVnZXggc3VwcG9ydCwgU1RSSU5HIGlzIGRpc3BsYXllZCBpbiB1cHBlciBsZWZ0IGNv
cm5lclxuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Lz5TVFJJTkdcbiIKKyIgICAg
UmVtb3ZlIGxhc3QgY2hhcmFjdGVyICAgPEJhY2tzcGFjZT5cbiIKKyIgICAgSnVtcCB0byBuZXh0
IGhpdCAgICAgICAgPERvd24+XG4iCisiICAgIEp1bXAgdG8gcHJldmlvdXMgaGl0ICAgIDxVcD5c
biIKKyJFeGl0IG1lbnUgc2VhcmNoIG1vZGUgICAgICAgPC8+ICA8RXNjPlxuIgorIlNlYXJjaCBm
b3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2l0aCBvciB3aXRob3V0IGxlYWRpbmcgQ09ORklH
X1xuIgorIiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Rjg+UmVnRXhwcjxFbnRlcj5cbiIK
KyJWZXJib3NlIHNlYXJjaCBoZWxwICAgICAgICAgPEY4PjxGMT5cbiIKKyItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
XG4iCisiXG4iCisiVW5sZXNzIGluIGEgZGF0YSBlbnRyeSB3aW5kb3csIGtleSA8MT4gbWF5IGJl
IHVzZWQgaW5zdGVhZCBvZiA8RjE+LFxuIgorIjwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiIK
KyJcbiIKKyJcbiIKKyJSYWRpb2xpc3QgKENob2ljZSBsaXN0KVxuIgorIi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tXG4iCisiVXNlIHRoZSBtb3ZlbWVudCBrZXlzIGxpc3RlZCBhYm92ZSB0byBzZWxl
Y3QgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXRcbiIKKyJhbmQgcHJlc3MgPFNwYWNlPi5cbiIK
KyJcbiIKKyJcbiIKKyJEYXRhIGVudHJ5XG4iCisiLS0tLS0tLS0tLVxuIgorIkVudGVyIHRoZSBy
ZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYW5kIHByZXNzIDxFbnRlcj4uICBIZXhhZGVjaW1hbCB2YWx1
ZXNcbiIKKyJtYXkgYmUgZW50ZXJlZCB3aXRob3V0IHRoZSBcIjB4XCIgcHJlZml4LlxuIgorIlxu
IgorIlxuIgorIlRleHQgQm94IChIZWxwIFdpbmRvdylcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tXG4iCisiVXNlIG1vdmVtZW50IGtleXMgYXMgbGlzdGVkIGluIHRhYmxlIGFib3ZlLlxuIgor
IlxuIgorIlByZXNzIGFueSBvZiA8RW50ZXI+IDxFc2M+IDxxPiA8RjU+IDxGOT4gdG8gZXhpdC5c
biIKKyJcbiIKKyJcbiIKKyJBbHRlcm5hdGUgY29uZmlndXJhdGlvbiBmaWxlc1xuIgorIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisibmNvbmZpZyBzdXBwb3J0cyBzd2l0Y2hpbmcg
YmV0d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iCisiUHJlc3MgPEY2PiB0byBzYXZl
IHlvdXIgY3VycmVudCBjb25maWd1cmF0aW9uLiAgUHJlc3MgPEY3PiBhbmQgZW50ZXJcbiIKKyJh
IGZpbGUgbmFtZSB0byBsb2FkIGEgcHJldmlvdXNseSBzYXZlZCBjb25maWd1cmF0aW9uLlxuIgor
IlxuIgorIlxuIgorIlRlcm1pbmFsIGNvbmZpZ3VyYXRpb25cbiIKKyItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tXG4iCisiSWYgeW91IHVzZSBuY29uZmlnIGluIGEgeHRlcm0gd2luZG93LCBtYWtlIHN1
cmUgeW91ciBURVJNIGVudmlyb25tZW50XG4iCisidmFyaWFibGUgc3BlY2lmaWVzIGEgdGVybWlu
YWwgY29uZmlndXJhdGlvbiB3aGljaCBzdXBwb3J0cyBhdCBsZWFzdFxuIgorIjE2IGNvbG9ycy4g
IE90aGVyd2lzZSBuY29uZmlnIHdpbGwgbG9vayByYXRoZXIgYmFkLlxuIgorIlxuIgorIklmIHRo
ZSBcInN0dHkgc2l6ZVwiIGNvbW1hbmQgcmVwb3J0cyB0aGUgY3VycmVudCB0ZXJtaW5hbHNpemUg
Y29ycmVjdGx5LFxuIgorIm5jb25maWcgd2lsbCBhZGFwdCB0byBzaXplcyBsYXJnZXIgdGhhbiB0
aGUgdHJhZGl0aW9uYWwgODB4MjUgXCJzdGFuZGFyZFwiXG4iCisiYW5kIGRpc3BsYXkgbG9uZ2Vy
IG1lbnVzIHByb3Blcmx5LlxuIgorIlxuIgorIlxuIgorIlNpbmdsZSBtZW51IG1vZGVcbiIKKyIt
LS0tLS0tLS0tLS0tLS0tXG4iCisiSWYgeW91IHByZWZlciB0byBoYXZlIGFsbCBvZiB0aGUgbWVu
dSBlbnRyaWVzIGxpc3RlZCBpbiBhIHNpbmdsZSBtZW51LFxuIgorInJhdGhlciB0aGFuIHRoZSBk
ZWZhdWx0IG11bHRpbWVudSBoaWVyYXJjaHksIHJ1biBuY29uZmlnIHdpdGhcbiIKKyJOQ09ORklH
X01PREUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiAgRXhhbXBsZTpc
biIKKyJcbiIKKyJtYWtlIE5DT05GSUdfTU9ERT1zaW5nbGVfbWVudSBuY29uZmlnXG4iCisiXG4i
CisiPEVudGVyPiB3aWxsIHRoZW4gdW5mb2xkIHRoZSBhcHByb3ByaWF0ZSBjYXRlZ29yeSwgb3Ig
Zm9sZCBpdCBpZiBpdFxuIgorImlzIGFscmVhZHkgdW5mb2xkZWQuICBGb2xkZWQgbWVudSBlbnRy
aWVzIHdpbGwgYmUgZGVzaWduYXRlZCBieSBhXG4iCisibGVhZGluZyBcIisrPlwiIGFuZCB1bmZv
bGRlZCBlbnRyaWVzIGJ5IGEgbGVhZGluZyBcIi0tPlwiLlxuIgorIlxuIgorIk5vdGUgdGhhdCB0
aGlzIG1vZGUgY2FuIGV2ZW50dWFsbHkgYmUgYSBsaXR0bGUgbW9yZSBDUFUgZXhwZW5zaXZlIHRo
YW5cbiIKKyJ0aGUgZGVmYXVsdCBtb2RlLCBlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVy
IG9mIHVuZm9sZGVkIHN1Ym1lbnVzLlxuIgorIlxuIiwKK21lbnVfbm9fZl9pbnN0cnVjdGlvbnNb
XSA9CisiTGVnZW5kOiAgWypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwg
PiBtb2R1bGUgY2FwYWJsZS5cbiIKKyJTdWJtZW51cyBhcmUgZGVzaWduYXRlZCBieSBhIHRyYWls
aW5nIFwiLS0tPlwiLCBlbXB0eSBvbmVzIGJ5IFwiLS0tLVwiLlxuIgorIlxuIgorIlVzZSB0aGUg
Zm9sbG93aW5nIGtleXMgdG8gbmF2aWdhdGUgdGhlIG1lbnVzOlxuIgorIk1vdmUgdXAgb3IgZG93
biB3aXRoIDxVcD4gYW5kIDxEb3duPi5cbiIKKyJFbnRlciBhIHN1Ym1lbnUgd2l0aCA8RW50ZXI+
IG9yIDxSaWdodD4uXG4iCisiRXhpdCBhIHN1Ym1lbnUgdG8gaXRzIHBhcmVudCBtZW51IHdpdGgg
PEVzYz4gb3IgPExlZnQ+LlxuIgorIlByZXNzaW5nIDx5PiBpbmNsdWRlcywgPG4+IGV4Y2x1ZGVz
LCA8bT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuXG4iCisiUHJlc3NpbmcgPFNwYWNlPiBjeWNsZXMg
dGhyb3VnaCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4iCisiVG8gc2VhcmNoIGZvciBtZW51IGVu
dHJpZXMgcHJlc3MgPC8+LlxuIgorIjxFc2M+IGFsd2F5cyBsZWF2ZXMgdGhlIGN1cnJlbnQgd2lu
ZG93LlxuIgorIlxuIgorIllvdSBkbyBub3QgaGF2ZSBmdW5jdGlvbiBrZXlzIHN1cHBvcnQuXG4i
CisiUHJlc3MgPDE+IGluc3RlYWQgb2YgPEYxPiwgPDI+IGluc3RlYWQgb2YgPEYyPiwgZXRjLlxu
IgorIkZvciB2ZXJib3NlIGdsb2JhbCBoZWxwIHVzZSBrZXkgPDE+LlxuIgorIkZvciBoZWxwIHJl
bGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIiwKK21l
bnVfaW5zdHJ1Y3Rpb25zW10gPQorIkxlZ2VuZDogIFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVk
ICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUuXG4iCisiU3VibWVudXMgYXJlIGRlc2ln
bmF0ZWQgYnkgYSB0cmFpbGluZyBcIi0tLT5cIiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiIK
KyJcbiIKKyJVc2UgdGhlIGZvbGxvd2luZyBrZXlzIHRvIG5hdmlnYXRlIHRoZSBtZW51czpcbiIK
KyJNb3ZlIHVwIG9yIGRvd24gd2l0aCA8VXA+IG9yIDxEb3duPi5cbiIKKyJFbnRlciBhIHN1Ym1l
bnUgd2l0aCA8RW50ZXI+IG9yIDxSaWdodD4uXG4iCisiRXhpdCBhIHN1Ym1lbnUgdG8gaXRzIHBh
cmVudCBtZW51IHdpdGggPEVzYz4gb3IgPExlZnQ+LlxuIgorIlByZXNzaW5nIDx5PiBpbmNsdWRl
cywgPG4+IGV4Y2x1ZGVzLCA8bT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuXG4iCisiUHJlc3Npbmcg
PFNwYWNlPiBjeWNsZXMgdGhyb3VnaCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4iCisiVG8gc2Vh
cmNoIGZvciBtZW51IGVudHJpZXMgcHJlc3MgPC8+LlxuIgorIjxFc2M+IGFsd2F5cyBsZWF2ZXMg
dGhlIGN1cnJlbnQgd2luZG93LlxuIgorIlxuIgorIlByZXNzaW5nIDwxPiBtYXkgYmUgdXNlZCBp
bnN0ZWFkIG9mIDxGMT4sIDwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiIKKyJGb3IgdmVyYm9z
ZSBnbG9iYWwgaGVscCBwcmVzcyA8RjE+LlxuIgorIkZvciBoZWxwIHJlbGF0ZWQgdG8gdGhlIGN1
cnJlbnQgbWVudSBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIiwKK3JhZGlvbGlzdF9pbnN0cnVj
dGlvbnNbXSA9CisiUHJlc3MgPFVwPiwgPERvd24+LCA8SG9tZT4gb3IgPEVuZD4gdG8gbmF2aWdh
dGUgYSByYWRpb2xpc3QsIHNlbGVjdFxuIgorIndpdGggPFNwYWNlPi5cbiIKKyJGb3IgaGVscCBy
ZWxhdGVkIHRvIHRoZSBjdXJyZW50IGVudHJ5IHByZXNzIDw/PiBvciA8aD4uXG4iCisiRm9yIGds
b2JhbCBoZWxwIHByZXNzIDxGMT4uXG4iLAoraW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2ludFtdID0K
KyJQbGVhc2UgZW50ZXIgYSBkZWNpbWFsIHZhbHVlLlxuIgorIkZyYWN0aW9ucyB3aWxsIG5vdCBi
ZSBhY2NlcHRlZC5cbiIKKyJQcmVzcyA8RW50ZXI+IHRvIGFwcGx5LCA8RXNjPiB0byBjYW5jZWwu
IiwKK2lucHV0Ym94X2luc3RydWN0aW9uc19oZXhbXSA9CisiUGxlYXNlIGVudGVyIGEgaGV4YWRl
Y2ltYWwgdmFsdWUuXG4iCisiUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2Vs
LiIsCitpbnB1dGJveF9pbnN0cnVjdGlvbnNfc3RyaW5nW10gPQorIlBsZWFzZSBlbnRlciBhIHN0
cmluZyB2YWx1ZS5cbiIKKyJQcmVzcyA8RW50ZXI+IHRvIGFwcGx5LCA8RXNjPiB0byBjYW5jZWwu
IiwKK3NldG1vZF90ZXh0W10gPQorIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIgZmVh
dHVyZSB3aGljaCBoYXMgYmVlbiBjb25maWd1cmVkIGFzIGFcbiIKKyJtb2R1bGUuICBBcyBhIHJl
c3VsdCwgdGhlIGN1cnJlbnQgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIHRvby4i
LAorbG9hZF9jb25maWdfdGV4dFtdID0KKyJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJh
dGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuXG4iCisiQWNjZXB0IHRoZSBuYW1lIHNob3duIHRv
IHJlc3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24geW91IGxhc3RcbiIKKyJyZXRyaWV2ZWQuICBMZWF2
ZSBlbXB0eSB0byBhYm9ydC4iLAorbG9hZF9jb25maWdfaGVscFtdID0KKyJGb3IgdmFyaW91cyBy
ZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIgorImNvbmZp
Z3VyYXRpb25zIGF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxuIgorIlxuIgorIklmIHlv
dSBoYXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhh
biB0aGVcbiIKKyJkZWZhdWx0IG9uZSwgZW50ZXJpbmcgaXRzIG5hbWUgaGVyZSB3aWxsIGFsbG93
IHlvdSB0byBsb2FkIGFuZCBtb2RpZnlcbiIKKyJ0aGF0IGNvbmZpZ3VyYXRpb24uXG4iCisiXG4i
CisiTGVhdmUgZW1wdHkgdG8gYWJvcnQuXG4iLAorc2F2ZV9jb25maWdfdGV4dFtdID0KKyJFbnRl
ciBhIGZpbGVuYW1lIHRvIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgc2F2ZWRc
biIKKyJhcyBhbiBhbHRlcm5hdGUuICBMZWF2ZSBlbXB0eSB0byBhYm9ydC4iLAorc2F2ZV9jb25m
aWdfaGVscFtdID0KKyJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBz
ZXZlcmFsIGRpZmZlcmVudFxuIgorImNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBvbiBhIHNpbmds
ZSBtYWNoaW5lLlxuIgorIlxuIgorIkVudGVyaW5nIGEgZmlsZSBuYW1lIGhlcmUgd2lsbCBhbGxv
dyB5b3UgdG8gbGF0ZXIgcmV0cmlldmUsIG1vZGlmeVxuIgorImFuZCB1c2UgdGhlIGN1cnJlbnQg
Y29uZmlndXJhdGlvbiBhcyBhbiBhbHRlcm5hdGUgdG8gd2hhdGV2ZXJcbiIKKyJjb25maWd1cmF0
aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxuIgorIlxuIgorIkxl
YXZlIGVtcHR5IHRvIGFib3J0LlxuIiwKK3NlYXJjaF9oZWxwW10gPQorIlNlYXJjaCBmb3Igc3lt
Ym9scyAoY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1lcyBDT05GSUdfKikgYW5kIGRpc3BsYXlc
biIKKyJ0aGVpciByZWxhdGlvbnMuICBSZWd1bGFyIGV4cHJlc3Npb25zIGFyZSBzdXBwb3J0ZWQu
XG4iCisiRXhhbXBsZTogIFNlYXJjaCBmb3IgXCJeRk9PXCIuXG4iCisiUmVzdWx0OlxuIgorIi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tXG4iCisiU3ltYm9sOiBGT08gWyA9IG1dXG4iCisiUHJvbXB0OiBGb28gYnVzIGlzIHVz
ZWQgdG8gZHJpdmUgdGhlIGJhciBIV1xuIgorIkRlZmluZWQgYXQgZHJpdmVycy9wY2kvS2NvbmZp
Zzo0N1xuIgorIkRlcGVuZHMgb246IFg4Nl9MT0NBTF9BUElDICYmIFg4Nl9JT19BUElDIHx8IElB
NjRcbiIKKyJMb2NhdGlvbjpcbiIKKyIgIC0+IEJ1cyBvcHRpb25zIChQQ0ksIFBDTUNJQSwgRUlT
QSwgSVNBKVxuIgorIiAgICAtPiBQQ0kgc3VwcG9ydCAoUENJIFsgPSB5XSlcbiIKKyIgICAgICAt
PiBQQ0kgYWNjZXNzIG1vZGUgKDxjaG9pY2U+IFsgPSB5XSlcbiIKKyJTZWxlY3RzOiBMSUJDUkMz
MlxuIgorIlNlbGVjdGVkIGJ5OiBCQVJcbiIKKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorIm8gIFRoZSBsaW5lICdQ
cm9tcHQ6JyBzaG93cyB0aGUgdGV4dCBkaXNwbGF5ZWQgZm9yIHRoaXMgc3ltYm9sIGluXG4iCisi
ICAgdGhlIG1lbnUgaGllcmFyY2h5LlxuIgorIm8gIFRoZSAnRGVmaW5lZCBhdCcgbGluZSB0ZWxs
cyBhdCB3aGF0IGZpbGUgLyBsaW5lIG51bWJlciB0aGUgc3ltYm9sIGlzXG4iCisiICAgZGVmaW5l
ZC5cbiIKKyJvICBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIGxpc3RzIHN5bWJvbHMgdGhhdCBuZWVk
IHRvIGJlIGRlZmluZWQgZm9yXG4iCisiICAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBhbmQg
c2VsZWN0YWJsZSBpbiB0aGUgbWVudS5cbiIKKyJvICBUaGUgJ0xvY2F0aW9uOicgbGluZXMgdGVs
bCwgd2hlcmUgaW4gdGhlIG1lbnUgc3RydWN0dXJlIHRoaXMgc3ltYm9sXG4iCisiICAgaXMgbG9j
YXRlZC4gIEEgbG9jYXRpb24gZm9sbG93ZWQgYnkgYSBbID0geV0gaW5kaWNhdGVzIHRoYXQgdGhp
cyBpc1xuIgorIiAgIGEgc2VsZWN0YWJsZSBtZW51IGl0ZW0sIGFuZCB0aGUgY3VycmVudCB2YWx1
ZSBpcyBkaXNwbGF5ZWQgaW5zaWRlXG4iCisiICAgYnJhY2tldHMuXG4iCisibyAgVGhlICdTZWxl
Y3RzOicgbGluZSB0ZWxscywgd2hhdCBzeW1ib2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVj
dGVkXG4iCisiICAgaWYgdGhpcyBzeW1ib2wgaXMgc2VsZWN0ZWQgKHkgb3IgbSkuXG4iCisibyAg
VGhlICdTZWxlY3RlZCBieScgbGluZSB0ZWxscyB3aGF0IHN5bWJvbCBoYXMgc2VsZWN0ZWQgdGhp
cyBzeW1ib2wuXG4iCisiXG4iCisiT25seSByZWxldmFudCBsaW5lcyBhcmUgc2hvd24uXG4iCisi
XG5cbiIKKyJTZWFyY2ggZXhhbXBsZXM6XG4iCisiVVNCICA9PiBmaW5kIGFsbCBzeW1ib2xzIGNv
bnRhaW5pbmcgVVNCXG4iCisiXlVTQiA9PiBmaW5kIGFsbCBzeW1ib2xzIHN0YXJ0aW5nIHdpdGgg
VVNCXG4iCisiVVNCJCA9PiBmaW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIgorIlxu
IjsKKworc3RydWN0IG1pdGVtIHsKKwljaGFyIHN0clsyNTZdOworCWNoYXIgdGFnOworCXZvaWQg
KnVzcnB0cjsKKwlpbnQgaXNfdmlzaWJsZTsKK307CisKKyNkZWZpbmUgTUFYX01FTlVfSVRFTVMg
NDA5Ngorc3RhdGljIGludCBzaG93X2FsbF9pdGVtczsKK3N0YXRpYyBpbnQgaW5kZW50Oworc3Rh
dGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7CitzdGF0aWMgaW50IGNoaWxkX2NvdW50Owor
c3RhdGljIGludCBzaW5nbGVfbWVudV9tb2RlOworLyogdGhlIHdpbmRvdyBpbiB3aGljaCBhbGwg
aW5mb3JtYXRpb24gYXBwZWFycyAqLworc3RhdGljIFdJTkRPVyAqbWFpbl93aW5kb3c7CisvKiB0
aGUgbGFyZ2VzdCBzaXplIG9mIHRoZSBtZW51IHdpbmRvdyAqLworc3RhdGljIGludCBtd2luX21h
eF9saW5lczsKK3N0YXRpYyBpbnQgbXdpbl9tYXhfY29sczsKKy8qIHRoZSB3aW5kb3cgaW4gd2hp
Y2ggd2Ugc2hvdyBvcHRpb24gYnV0dG9ucyAqLworc3RhdGljIE1FTlUgKmN1cnNlc19tZW51Owor
c3RhdGljIElURU0gKmN1cnNlc19tZW51X2l0ZW1zW01BWF9NRU5VX0lURU1TXTsKK3N0YXRpYyBz
dHJ1Y3QgbWl0ZW0ga19tZW51X2l0ZW1zW01BWF9NRU5VX0lURU1TXTsKK3N0YXRpYyBpbnQgaXRl
bXNfbnVtOworc3RhdGljIGludCBnbG9iYWxfZXhpdDsKKy8qIHRoZSBjdXJyZW50bHkgc2VsZWN0
ZWQgYnV0dG9uICovCitzdGF0aWMgY29uc3QgY2hhciAqY3VycmVudF9pbnN0cnVjdGlvbnMgPSBt
ZW51X2luc3RydWN0aW9uczsKKworc3RhdGljIGNoYXIgKmRpYWxvZ19pbnB1dF9yZXN1bHQ7Citz
dGF0aWMgaW50IGRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuOworCitzdGF0aWMgdm9pZCBjb25mKHN0
cnVjdCBtZW51ICptZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICpt
ZW51KTsKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KTsKK3N0YXRp
YyB2b2lkIGNvbmZfbG9hZCh2b2lkKTsKK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKTsKK3N0
YXRpYyB2b2lkIHNob3dfaGVscChzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgaW50IGRvX2V4
aXQodm9pZCk7CitzdGF0aWMgdm9pZCBzZXR1cF93aW5kb3dzKHZvaWQpOworc3RhdGljIHZvaWQg
c2VhcmNoX2NvbmYodm9pZCk7CisKK3R5cGVkZWYgdm9pZCAoKmZ1bmN0aW9uX2tleV9oYW5kbGVy
X3QpKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqbWVudSk7CitzdGF0aWMgdm9pZCBoYW5kbGVfZjEo
aW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGljIHZvaWQgaGFuZGxl
X2YyKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhh
bmRsZV9mMyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7CitzdGF0aWMgdm9p
ZCBoYW5kbGVfZjQoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pOworc3RhdGlj
IHZvaWQgaGFuZGxlX2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsKK3N0
YXRpYyB2b2lkIGhhbmRsZV9mNihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7
CitzdGF0aWMgdm9pZCBoYW5kbGVfZjcoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0
ZW0pOworc3RhdGljIHZvaWQgaGFuZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9pdGVtKTsKK3N0YXRpYyB2b2lkIGhhbmRsZV9mOShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1
cnJlbnRfaXRlbSk7CisKK3N0cnVjdCBmdW5jdGlvbl9rZXlzIHsKKwljb25zdCBjaGFyICprZXlf
c3RyOworCWNvbnN0IGNoYXIgKmZ1bmM7CisJZnVuY3Rpb25fa2V5IGtleTsKKwlmdW5jdGlvbl9r
ZXlfaGFuZGxlcl90IGhhbmRsZXI7Cit9OworCitzdGF0aWMgY29uc3QgaW50IGZ1bmN0aW9uX2tl
eXNfbnVtID0gOTsKK3N0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fa2V5cyBmdW5jdGlvbl9rZXlzW10g
PSB7CisJeworCQkua2V5X3N0ciA9ICJGMSIsCisJCS5mdW5jID0gIkhlbHAiLAorCQkua2V5ID0g
Rl9IRUxQLAorCQkuaGFuZGxlciA9IGhhbmRsZV9mMSwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAi
RjIiLAorCQkuZnVuYyA9ICJTeW1JbmZvIiwKKwkJLmtleSA9IEZfU1lNQk9MLAorCQkuaGFuZGxl
ciA9IGhhbmRsZV9mMiwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjMiLAorCQkuZnVuYyA9ICJI
ZWxwIDIiLAorCQkua2V5ID0gRl9JTlNUUywKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjMsCisJfSwK
Kwl7CisJCS5rZXlfc3RyID0gIkY0IiwKKwkJLmZ1bmMgPSAiU2hvd0FsbCIsCisJCS5rZXkgPSBG
X0NPTkYsCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y0LAorCX0sCisJeworCQkua2V5X3N0ciA9ICJG
NSIsCisJCS5mdW5jID0gIkJhY2siLAorCQkua2V5ID0gRl9CQUNLLAorCQkuaGFuZGxlciA9IGhh
bmRsZV9mNSwKKwl9LAorCXsKKwkJLmtleV9zdHIgPSAiRjYiLAorCQkuZnVuYyA9ICJTYXZlIiwK
KwkJLmtleSA9IEZfU0FWRSwKKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjYsCisJfSwKKwl7CisJCS5r
ZXlfc3RyID0gIkY3IiwKKwkJLmZ1bmMgPSAiTG9hZCIsCisJCS5rZXkgPSBGX0xPQUQsCisJCS5o
YW5kbGVyID0gaGFuZGxlX2Y3LAorCX0sCisJeworCQkua2V5X3N0ciA9ICJGOCIsCisJCS5mdW5j
ID0gIlN5bVNlYXJjaCIsCisJCS5rZXkgPSBGX1NFQVJDSCwKKwkJLmhhbmRsZXIgPSBoYW5kbGVf
ZjgsCisJfSwKKwl7CisJCS5rZXlfc3RyID0gIkY5IiwKKwkJLmZ1bmMgPSAiRXhpdCIsCisJCS5r
ZXkgPSBGX0VYSVQsCisJCS5oYW5kbGVyID0gaGFuZGxlX2Y5LAorCX0sCit9OworCitzdGF0aWMg
dm9pZCBwcmludF9mdW5jdGlvbl9saW5lKHZvaWQpCit7CisJaW50IGk7CisJaW50IG9mZnNldCA9
IDE7CisJY29uc3QgaW50IHNraXAgPSAxOworCWludCBsaW5lcyA9IGdldG1heHkoc3Rkc2NyKTsK
KworCWZvciAoaSA9IDA7IGkgPCBmdW5jdGlvbl9rZXlzX251bTsgaSsrKSB7CisJCSh2b2lkKSB3
YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tGVU5DVElPTl9ISUdITElHSFRdKTsKKwkJ
bXZ3cHJpbnR3KG1haW5fd2luZG93LCBsaW5lcy0zLCBvZmZzZXQsCisJCQkJIiVzIiwKKwkJCQlm
dW5jdGlvbl9rZXlzW2ldLmtleV9zdHIpOworCQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3cs
IGF0dHJpYnV0ZXNbRlVOQ1RJT05fVEVYVF0pOworCQlvZmZzZXQgKz0gc3RybGVuKGZ1bmN0aW9u
X2tleXNbaV0ua2V5X3N0cik7CisJCW12d3ByaW50dyhtYWluX3dpbmRvdywgbGluZXMtMywKKwkJ
CQlvZmZzZXQsICIlcyIsCisJCQkJZnVuY3Rpb25fa2V5c1tpXS5mdW5jKTsKKwkJb2Zmc2V0ICs9
IHN0cmxlbihmdW5jdGlvbl9rZXlzW2ldLmZ1bmMpICsgc2tpcDsKKwl9CisJKHZvaWQpIHdhdHRy
c2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW05PUk1BTF0pOworfQorCisvKiBoZWxwICovCitz
dGF0aWMgdm9pZCBoYW5kbGVfZjEoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0p
Cit7CisJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LAorCQkJIkdsb2JhbCBoZWxwIiwgbmNv
bmZfZ2xvYmFsX2hlbHApOworCXJldHVybjsKK30KKworLyogc3ltYm9sZSBoZWxwICovCitzdGF0
aWMgdm9pZCBoYW5kbGVfZjIoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7
CisJc2hvd19oZWxwKGN1cnJlbnRfaXRlbSk7CisJcmV0dXJuOworfQorCisvKiBpbnN0cnVjdGlv
bnMgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV9mMyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJl
bnRfaXRlbSkKK3sKKwlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkiU2hvcnQgaGVs
cCIsCisJCQljdXJyZW50X2luc3RydWN0aW9ucyk7CisJcmV0dXJuOworfQorCisvKiBjb25maWcg
Ki8KK3N0YXRpYyB2b2lkIGhhbmRsZV9mNChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRf
aXRlbSkKK3sKKwlpbnQgcmVzID0gYnRuX2RpYWxvZyhtYWluX3dpbmRvdywKKwkJCSJTaG93IGFs
bCBzeW1ib2xzPyIsCisJCQkyLAorCQkJIiAgIDxTaG93IEFsbD4gICAiLAorCQkJIjxEb24ndCBz
aG93IGFsbD4iKTsKKwlpZiAocmVzID09IDApCisJCXNob3dfYWxsX2l0ZW1zID0gMTsKKwllbHNl
IGlmIChyZXMgPT0gMSkKKwkJc2hvd19hbGxfaXRlbXMgPSAwOworCisJcmV0dXJuOworfQorCisv
KiBiYWNrICovCitzdGF0aWMgdm9pZCBoYW5kbGVfZjUoaW50ICprZXksIHN0cnVjdCBtZW51ICpj
dXJyZW50X2l0ZW0pCit7CisJKmtleSA9IEtFWV9MRUZUOworCXJldHVybjsKK30KKworLyogc2F2
ZSAqLworc3RhdGljIHZvaWQgaGFuZGxlX2Y2KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9pdGVtKQoreworCWNvbmZfc2F2ZSgpOworCXJldHVybjsKK30KKworLyogbG9hZCAqLworc3Rh
dGljIHZvaWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQor
eworCWNvbmZfbG9hZCgpOworCXJldHVybjsKK30KKworLyogc2VhcmNoICovCitzdGF0aWMgdm9p
ZCBoYW5kbGVfZjgoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pCit7CisJc2Vh
cmNoX2NvbmYoKTsKKwlyZXR1cm47Cit9CisKKy8qIGV4aXQgKi8KK3N0YXRpYyB2b2lkIGhhbmRs
ZV9mOShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkKK3sKKwlkb19leGl0KCk7
CisJcmV0dXJuOworfQorCisvKiByZXR1cm4gIT0gMCB0byBpbmRpY2F0ZSB0aGUga2V5IHdhcyBo
YW5kbGVzICovCitzdGF0aWMgaW50IHByb2Nlc3Nfc3BlY2lhbF9rZXlzKGludCAqa2V5LCBzdHJ1
Y3QgbWVudSAqbWVudSkKK3sKKwlpbnQgaTsKKworCWlmICgqa2V5ID09IEtFWV9SRVNJWkUpIHsK
KwkJc2V0dXBfd2luZG93cygpOworCQlyZXR1cm4gMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwg
ZnVuY3Rpb25fa2V5c19udW07IGkrKykgeworCQlpZiAoKmtleSA9PSBLRVlfRihmdW5jdGlvbl9r
ZXlzW2ldLmtleSkgfHwKKwkJICAgICprZXkgPT0gJzAnICsgZnVuY3Rpb25fa2V5c1tpXS5rZXkp
eworCQkJZnVuY3Rpb25fa2V5c1tpXS5oYW5kbGVyKGtleSwgbWVudSk7CisJCQlyZXR1cm4gMTsK
KwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjbGVhbl9pdGVtcyh2b2lk
KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGN1cnNlc19tZW51X2l0ZW1zW2ldOyBpKyspCisJ
CWZyZWVfaXRlbShjdXJzZXNfbWVudV9pdGVtc1tpXSk7CisJYnplcm8oY3Vyc2VzX21lbnVfaXRl
bXMsIHNpemVvZihjdXJzZXNfbWVudV9pdGVtcykpOworCWJ6ZXJvKGtfbWVudV9pdGVtcywgc2l6
ZW9mKGtfbWVudV9pdGVtcykpOworCWl0ZW1zX251bSA9IDA7Cit9CisKK3R5cGVkZWYgZW51bSB7
TUFUQ0hfVElOS0VSX1BBVFRFUk5fVVAsIE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sCisJRklO
RF9ORVhUX01BVENIX0RPV04sIEZJTkRfTkVYVF9NQVRDSF9VUH0gbWF0Y2hfZjsKKworLyogcmV0
dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCBpdGVtLCBvciAtMSBpZiBubyBzdWNoIGl0ZW0g
ZXhpc3RzICovCitzdGF0aWMgaW50IGdldF9tZXh0X21hdGNoKGNvbnN0IGNoYXIgKm1hdGNoX3N0
ciwgbWF0Y2hfZiBmbGFnKQoreworCWludCBtYXRjaF9zdGFydCA9IGl0ZW1faW5kZXgoY3VycmVu
dF9pdGVtKGN1cnNlc19tZW51KSk7CisJaW50IGluZGV4OworCisJaWYgKGZsYWcgPT0gRklORF9O
RVhUX01BVENIX0RPV04pCisJCSsrbWF0Y2hfc3RhcnQ7CisJZWxzZSBpZiAoZmxhZyA9PSBGSU5E
X05FWFRfTUFUQ0hfVVApCisJCS0tbWF0Y2hfc3RhcnQ7CisKKwlpbmRleCA9IG1hdGNoX3N0YXJ0
OworCWluZGV4ID0gKGluZGV4ICsgaXRlbXNfbnVtKSAlIGl0ZW1zX251bTsKKwl3aGlsZSAodHJ1
ZSkgeworCQljaGFyICpzdHIgPSBrX21lbnVfaXRlbXNbaW5kZXhdLnN0cjsKKwkJaWYgKHN0cmNh
c2VzdHIoc3RyLCBtYXRjaF9zdHIpICE9IE5VTEwpCisJCQlyZXR1cm4gaW5kZXg7CisJCWlmIChm
bGFnID09IEZJTkRfTkVYVF9NQVRDSF9VUCB8fAorCQkgICAgZmxhZyA9PSBNQVRDSF9USU5LRVJf
UEFUVEVSTl9VUCkKKwkJCS0taW5kZXg7CisJCWVsc2UKKwkJCSsraW5kZXg7CisJCWluZGV4ID0g
KGluZGV4ICsgaXRlbXNfbnVtKSAlIGl0ZW1zX251bTsKKwkJaWYgKGluZGV4ID09IG1hdGNoX3N0
YXJ0KQorCQkJcmV0dXJuIC0xOworCX0KK30KKworLyogTWFrZSBhIG5ldyBpdGVtLiAqLworc3Rh
dGljIHZvaWQgaXRlbV9tYWtlKHN0cnVjdCBtZW51ICptZW51LCBjaGFyIHRhZywgY29uc3QgY2hh
ciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWlmIChpdGVtc19udW0gPiBNQVhfTUVO
VV9JVEVNUy0xKQorCQlyZXR1cm47CisKKwliemVybygma19tZW51X2l0ZW1zW2l0ZW1zX251bV0s
IHNpemVvZihrX21lbnVfaXRlbXNbMF0pKTsKKwlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS50YWcg
PSB0YWc7CisJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0udXNycHRyID0gbWVudTsKKwlpZiAobWVu
dSAhPSBOVUxMKQorCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNpYmxlID0KKwkJCW1l
bnVfaXNfdmlzaWJsZShtZW51KTsKKwllbHNlCisJCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLmlz
X3Zpc2libGUgPSAxOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJdnNucHJpbnRmKGtfbWVudV9p
dGVtc1tpdGVtc19udW1dLnN0ciwKKwkJICBzaXplb2Yoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0u
c3RyKSwKKwkJICBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCisJaWYgKCFrX21lbnVfaXRlbXNb
aXRlbXNfbnVtXS5pc192aXNpYmxlKQorCQltZW1jcHkoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0u
c3RyLCAiWFhYIiwgMyk7CisKKwljdXJzZXNfbWVudV9pdGVtc1tpdGVtc19udW1dID0gbmV3X2l0
ZW0oCisJCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIsCisJCQlrX21lbnVfaXRlbXNbaXRl
bXNfbnVtXS5zdHIpOworCXNldF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNf
bnVtXSwKKwkJCSZrX21lbnVfaXRlbXNbaXRlbXNfbnVtXSk7CisJLyoKKwlpZiAoIWtfbWVudV9p
dGVtc1tpdGVtc19udW1dLmlzX3Zpc2libGUpCisJCWl0ZW1fb3B0c19vZmYoY3Vyc2VzX21lbnVf
aXRlbXNbaXRlbXNfbnVtXSwgT19TRUxFQ1RBQkxFKTsKKwkqLworCisJaXRlbXNfbnVtKys7CisJ
Y3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSA9IE5VTEw7Cit9CisKKy8qIHZlcnkgaGFja2lz
aC4gYWRkcyBhIHN0cmluZyB0byB0aGUgbGFzdCBpdGVtIGFkZGVkICovCitzdGF0aWMgdm9pZCBp
dGVtX2FkZF9zdHIoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwlpbnQg
aW5kZXggPSBpdGVtc19udW0tMTsKKwljaGFyIG5ld19zdHJbMjU2XTsKKwljaGFyIHRtcF9zdHJb
MjU2XTsKKworCWlmIChpbmRleCA8IDApCisJCXJldHVybjsKKworCXZhX3N0YXJ0KGFwLCBmbXQp
OworCXZzbnByaW50ZihuZXdfc3RyLCBzaXplb2YobmV3X3N0ciksIGZtdCwgYXApOworCXZhX2Vu
ZChhcCk7CisJc25wcmludGYodG1wX3N0ciwgc2l6ZW9mKHRtcF9zdHIpLCAiJXMlcyIsCisJCQlr
X21lbnVfaXRlbXNbaW5kZXhdLnN0ciwgbmV3X3N0cik7CisJc3RybmNweShrX21lbnVfaXRlbXNb
aW5kZXhdLnN0ciwKKwkJdG1wX3N0ciwKKwkJc2l6ZW9mKGtfbWVudV9pdGVtc1tpbmRleF0uc3Ry
KSk7CisKKwlmcmVlX2l0ZW0oY3Vyc2VzX21lbnVfaXRlbXNbaW5kZXhdKTsKKwljdXJzZXNfbWVu
dV9pdGVtc1tpbmRleF0gPSBuZXdfaXRlbSgKKwkJCWtfbWVudV9pdGVtc1tpbmRleF0uc3RyLAor
CQkJa19tZW51X2l0ZW1zW2luZGV4XS5zdHIpOworCXNldF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21l
bnVfaXRlbXNbaW5kZXhdLAorCQkJJmtfbWVudV9pdGVtc1tpbmRleF0pOworfQorCisvKiBnZXQg
dGhlIHRhZyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0gKi8KK3N0YXRpYyBjaGFyIGl0
ZW1fdGFnKHZvaWQpCit7CisJSVRFTSAqY3VyOworCXN0cnVjdCBtaXRlbSAqbWN1cjsKKworCWN1
ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7CisJaWYgKGN1ciA9PSBOVUxMKQorCQlyZXR1
cm4gMDsKKwltY3VyID0gKHN0cnVjdCBtaXRlbSAqKSBpdGVtX3VzZXJwdHIoY3VyKTsKKwlyZXR1
cm4gbWN1ci0+dGFnOworfQorCitzdGF0aWMgaW50IGN1cnNlc19pdGVtX2luZGV4KHZvaWQpCit7
CisJcmV0dXJuICBpdGVtX2luZGV4KGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSkpOworfQorCitz
dGF0aWMgdm9pZCAqaXRlbV9kYXRhKHZvaWQpCit7CisJSVRFTSAqY3VyOworCXN0cnVjdCBtaXRl
bSAqbWN1cjsKKworCWN1ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7CisJaWYgKCFjdXIp
CisJCXJldHVybiBOVUxMOworCW1jdXIgPSAoc3RydWN0IG1pdGVtICopIGl0ZW1fdXNlcnB0cihj
dXIpOworCXJldHVybiBtY3VyLT51c3JwdHI7CisKK30KKworc3RhdGljIGludCBpdGVtX2lzX3Rh
ZyhjaGFyIHRhZykKK3sKKwlyZXR1cm4gaXRlbV90YWcoKSA9PSB0YWc7Cit9CisKK3N0YXRpYyBj
aGFyIGZpbGVuYW1lW1BBVEhfTUFYKzFdOworc3RhdGljIGNoYXIgbWVudV9iYWNrdGl0bGVbUEFU
SF9NQVgrMTI4XTsKK3N0YXRpYyBjb25zdCBjaGFyICpzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0
IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkKK3sKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzbnByaW50
ZihtZW51X2JhY2t0aXRsZSwgc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSwKKwkJCSIlcyAtICVzIiwg
Y29uZmlnX2ZpbGVuYW1lLCByb290bWVudS5wcm9tcHQtPnRleHQpOworCWlmIChzaXplID49IHNp
emVvZihtZW51X2JhY2t0aXRsZSkpCisJCW1lbnVfYmFja3RpdGxlW3NpemVvZihtZW51X2JhY2t0
aXRsZSktMV0gPSAnXDAnOworCisJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmls
ZW5hbWUpLCAiJXMiLCBjb25maWdfZmlsZW5hbWUpOworCWlmIChzaXplID49IHNpemVvZihmaWxl
bmFtZSkpCisJCWZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAnXDAnOworCXJldHVybiBt
ZW51X2JhY2t0aXRsZTsKK30KKworLyogcmV0dXJuID0gMCBtZWFucyB3ZSBhcmUgc3VjY2Vzc2Z1
bC4KKyAqIC0xIG1lYW5zIGdvIG9uIGRvaW5nIHdoYXQgeW91IHdlcmUgZG9pbmcKKyAqLworc3Rh
dGljIGludCBkb19leGl0KHZvaWQpCit7CisJaW50IHJlczsKKwlpZiAoIWNvbmZfZ2V0X2NoYW5n
ZWQoKSkgeworCQlnbG9iYWxfZXhpdCA9IDE7CisJCXJldHVybiAwOworCX0KKwlyZXMgPSBidG5f
ZGlhbG9nKG1haW5fd2luZG93LAorCQkJIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29u
ZmlndXJhdGlvbj9cbiIKKwkJCQkiPEVTQz4gdG8gY2FuY2VsIGFuZCByZXN1bWUgbmNvbmZpZy4i
LAorCQkJMiwKKwkJCSIgICA8c2F2ZT4gICAiLAorCQkJIjxkb24ndCBzYXZlPiIpOworCWlmIChy
ZXMgPT0gS0VZX0VYSVQpIHsKKwkJZ2xvYmFsX2V4aXQgPSAwOworCQlyZXR1cm4gLTE7CisJfQor
CisJLyogaWYgd2UgZ290IGhlcmUsIHRoZSB1c2VyIHJlYWxseSB3YW50cyB0byBleGl0ICovCisJ
c3dpdGNoIChyZXMpIHsKKwljYXNlIDA6CisJCXJlcyA9IGNvbmZfd3JpdGUoZmlsZW5hbWUpOwor
CQlpZiAocmVzKQorCQkJYnRuX2RpYWxvZygKKwkJCQltYWluX3dpbmRvdywKKwkJCQkiRXJyb3Ig
ZHVyaW5nIHdyaXRpbmcgb2YgY29uZmlndXJhdGlvbi5cbiIKKwkJCQkgICJZb3VyIGNvbmZpZ3Vy
YXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iLAorCQkJCSAgMSwKKwkJCQkgICI8T0s+Iik7
CisJCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJ0bl9k
aWFsb2coCisJCQltYWluX3dpbmRvdywKKwkJCSJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3
ZXJlIE5PVCBzYXZlZC4iLAorCQkJMSwKKwkJCSI8T0s+Iik7CisJCWJyZWFrOworCX0KKwlnbG9i
YWxfZXhpdCA9IDE7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHZvaWQgc2VhcmNoX2NvbmYo
dm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsKKwlzdHJ1Y3QgZ3N0ciByZXM7CisJ
c3RydWN0IGdzdHIgdGl0bGU7CisJY2hhciAqZGlhbG9nX2lucHV0OworCWludCBkcmVzOworCisJ
dGl0bGUgPSBzdHJfbmV3KCk7CisJc3RyX3ByaW50ZiggJnRpdGxlLCAiRW50ZXIgKHN1YilzdHJp
bmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIgorCQkJICAgICAgIih3aXRoIG9yIHdpdGhvdXQg
XCIlc1wiKSIsIENPTkZJR18pOworCithZ2FpbjoKKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KG1h
aW5fd2luZG93LAorCQkJIlNlYXJjaCBDb25maWd1cmF0aW9uIFBhcmFtZXRlciIsCisJCQlzdHJf
Z2V0KCZ0aXRsZSksCisJCQkiIiwgJmRpYWxvZ19pbnB1dF9yZXN1bHQsICZkaWFsb2dfaW5wdXRf
cmVzdWx0X2xlbik7CisJc3dpdGNoIChkcmVzKSB7CisJY2FzZSAwOgorCQlicmVhazsKKwljYXNl
IDE6CisJCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywKKwkJCQkiU2VhcmNoIENvbmZpZ3Vy
YXRpb24iLCBzZWFyY2hfaGVscCk7CisJCWdvdG8gYWdhaW47CisJZGVmYXVsdDoKKwkJc3RyX2Zy
ZWUoJnRpdGxlKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHN0cmlwIHRoZSBwcmVmaXggaWYgbmVj
ZXNzYXJ5ICovCisJZGlhbG9nX2lucHV0ID0gZGlhbG9nX2lucHV0X3Jlc3VsdDsKKwlpZiAoc3Ry
bmNhc2VjbXAoZGlhbG9nX2lucHV0X3Jlc3VsdCwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSA9
PSAwKQorCQlkaWFsb2dfaW5wdXQgKz0gc3RybGVuKENPTkZJR18pOworCisJc3ltX2FyciA9IHN5
bV9yZV9zZWFyY2goZGlhbG9nX2lucHV0KTsKKwlyZXMgPSBnZXRfcmVsYXRpb25zX3N0cihzeW1f
YXJyLCBOVUxMKTsKKwlmcmVlKHN5bV9hcnIpOworCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRv
dywKKwkJCSJTZWFyY2ggUmVzdWx0cyIsIHN0cl9nZXQoJnJlcykpOworCXN0cl9mcmVlKCZyZXMp
OworCXN0cl9mcmVlKCZ0aXRsZSk7Cit9CisKKworc3RhdGljIHZvaWQgYnVpbGRfY29uZihzdHJ1
Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisJc3RydWN0IHByb3BlcnR5
ICpwcm9wOworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlpbnQgdHlwZSwgdG1wLCBkb2ludCA9IDI7
CisJdHJpc3RhdGUgdmFsOworCWNoYXIgY2g7CisKKwlpZiAoIW1lbnUgfHwgKCFzaG93X2FsbF9p
dGVtcyAmJiAhbWVudV9pc192aXNpYmxlKG1lbnUpKSkKKwkJcmV0dXJuOworCisJc3ltID0gbWVu
dS0+c3ltOworCXByb3AgPSBtZW51LT5wcm9tcHQ7CisJaWYgKCFzeW0pIHsKKwkJaWYgKHByb3Ag
JiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsKKwkJCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVf
Z2V0X3Byb21wdChtZW51KTsKKwkJCWVudW0gcHJvcF90eXBlIHB0eXBlOworCQkJcHR5cGUgPSBt
ZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJCQlzd2l0Y2gg
KHB0eXBlKSB7CisJCQljYXNlIFBfTUVOVToKKwkJCQljaGlsZF9jb3VudCsrOworCQkJCXByb21w
dCA9IHByb21wdDsKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkgeworCQkJCQlpdGVtX21ha2Uo
bWVudSwgJ20nLAorCQkJCQkJIiVzJSpjJXMiLAorCQkJCQkJbWVudS0+ZGF0YSA/ICItLT4iIDog
IisrPiIsCisJCQkJCQlpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7CisJCQkJfSBlbHNlCisJCQkJ
CWl0ZW1fbWFrZShtZW51LCAnbScsCisJCQkJCQkgICIgICAlKmMlcyAgJXMiLAorCQkJCQkJICBp
bmRlbnQgKyAxLCAnICcsIHByb21wdCwKKwkJCQkJCSAgbWVudV9pc19lbXB0eShtZW51KSA/ICIt
LS0tIiA6ICItLS0+Iik7CisKKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSAmJiBtZW51LT5kYXRh
KQorCQkJCQlnb3RvIGNvbmZfY2hpbGRzOworCQkJCXJldHVybjsKKwkJCWNhc2UgUF9DT01NRU5U
OgorCQkJCWlmIChwcm9tcHQpIHsKKwkJCQkJY2hpbGRfY291bnQrKzsKKwkJCQkJaXRlbV9tYWtl
KG1lbnUsICc6JywKKwkJCQkJCSIgICAlKmMqKiogJXMgKioqIiwKKwkJCQkJCWluZGVudCArIDEs
ICcgJywKKwkJCQkJCXByb21wdCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJ
CQlpZiAocHJvbXB0KSB7CisJCQkJCWNoaWxkX2NvdW50Kys7CisJCQkJCWl0ZW1fbWFrZShtZW51
LCAnOicsICItLS0lKmMlcyIsCisJCQkJCQlpbmRlbnQgKyAxLCAnICcsCisJCQkJCQlwcm9tcHQp
OworCQkJCX0KKwkJCX0KKwkJfSBlbHNlCisJCQlkb2ludCA9IDA7CisJCWdvdG8gY29uZl9jaGls
ZHM7CisJfQorCisJdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCWlmIChzeW1faXNfY2hvaWNl
KHN5bSkpIHsKKwkJc3RydWN0IHN5bWJvbCAqZGVmX3N5bSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVl
KHN5bSk7CisJCXN0cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7CisKKwkJY2hpbGRfY291bnQr
KzsKKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
KSB7CisJCQlpZiAobWVudV9pc192aXNpYmxlKGNoaWxkKSAmJiBjaGlsZC0+c3ltID09IGRlZl9z
eW0pCisJCQkJZGVmX21lbnUgPSBjaGlsZDsKKwkJfQorCisJCXZhbCA9IHN5bV9nZXRfdHJpc3Rh
dGVfdmFsdWUoc3ltKTsKKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgeworCQkJc3dpdGNo
ICh0eXBlKSB7CisJCQljYXNlIFNfQk9PTEVBTjoKKwkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAi
WyVjXSIsCisJCQkJCQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOworCQkJCWJyZWFrOworCQkJY2Fz
ZSBTX1RSSVNUQVRFOgorCQkJCXN3aXRjaCAodmFsKSB7CisJCQkJY2FzZSB5ZXM6CisJCQkJCWNo
ID0gJyonOworCQkJCQlicmVhazsKKwkJCQljYXNlIG1vZDoKKwkJCQkJY2ggPSAnTSc7CisJCQkJ
CWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNoID0gJyAnOworCQkJCQlicmVhazsKKwkJCQl9
CisJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIjwlYz4iLCBjaCk7CisJCQkJYnJlYWs7CisJCQl9
CisJCX0gZWxzZSB7CisJCQlpdGVtX21ha2UobWVudSwgZGVmX21lbnUgPyAndCcgOiAnOicsICIg
ICAiKTsKKwkJfQorCisJCWl0ZW1fYWRkX3N0cigiJSpjJXMiLCBpbmRlbnQgKyAxLAorCQkJCScg
JywgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsKKwkJaWYgKHZhbCA9PSB5ZXMpIHsKKwkJCWlmIChk
ZWZfbWVudSkgeworCQkJCWl0ZW1fYWRkX3N0cigiICglcykiLAorCQkJCQltZW51X2dldF9wcm9t
cHQoZGVmX21lbnUpKTsKKwkJCQlpdGVtX2FkZF9zdHIoIiAgLS0tPiIpOworCQkJCWlmIChkZWZf
bWVudS0+bGlzdCkgeworCQkJCQlpbmRlbnQgKz0gMjsKKwkJCQkJYnVpbGRfY29uZihkZWZfbWVu
dSk7CisJCQkJCWluZGVudCAtPSAyOworCQkJCX0KKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCX0g
ZWxzZSB7CisJCWlmIChtZW51ID09IGN1cnJlbnRfbWVudSkgeworCQkJaXRlbV9tYWtlKG1lbnUs
ICc6JywKKwkJCQkiLS0tJSpjJXMiLCBpbmRlbnQgKyAxLAorCQkJCScgJywgbWVudV9nZXRfcHJv
bXB0KG1lbnUpKTsKKwkJCWdvdG8gY29uZl9jaGlsZHM7CisJCX0KKwkJY2hpbGRfY291bnQrKzsK
KwkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOworCQlpZiAoc3ltX2lzX2Nob2lj
ZV92YWx1ZShzeW0pICYmIHZhbCA9PSB5ZXMpIHsKKwkJCWl0ZW1fbWFrZShtZW51LCAnOicsICIg
ICAiKTsKKwkJfSBlbHNlIHsKKwkJCXN3aXRjaCAodHlwZSkgeworCQkJY2FzZSBTX0JPT0xFQU46
CisJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkKKwkJCQkJaXRlbV9tYWtlKG1lbnUsICd0
JywgIlslY10iLAorCQkJCQkJdmFsID09IG5vID8gJyAnIDogJyonKTsKKwkJCQllbHNlCisJCQkJ
CWl0ZW1fbWFrZShtZW51LCAndCcsICItJWMtIiwKKwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcq
Jyk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNfVFJJU1RBVEU6CisJCQkJc3dpdGNoICh2YWwpIHsK
KwkJCQljYXNlIHllczoKKwkJCQkJY2ggPSAnKic7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgbW9k
OgorCQkJCQljaCA9ICdNJzsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJY2ggPSAn
ICc7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7
CisJCQkJCWlmIChzeW0tPnJldl9kZXAudHJpID09IG1vZCkKKwkJCQkJCWl0ZW1fbWFrZShtZW51
LAorCQkJCQkJCSd0JywgInslY30iLCBjaCk7CisJCQkJCWVsc2UKKwkJCQkJCWl0ZW1fbWFrZSht
ZW51LAorCQkJCQkJCSd0JywgIjwlYz4iLCBjaCk7CisJCQkJfSBlbHNlCisJCQkJCWl0ZW1fbWFr
ZShtZW51LCAndCcsICItJWMtIiwgY2gpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQl0
bXAgPSAyICsgc3RybGVuKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOworCQkJCWl0ZW1fbWFr
ZShtZW51LCAncycsICIgICAgKCVzKSIsCisJCQkJCQlzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0p
KTsKKwkJCQl0bXAgPSBpbmRlbnQgLSB0bXAgKyA0OworCQkJCWlmICh0bXAgPCAwKQorCQkJCQl0
bXAgPSAwOworCQkJCWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIHRtcCwgJyAnLAorCQkJCQkJbWVu
dV9nZXRfcHJvbXB0KG1lbnUpLAorCQkJCQkJKHN5bV9oYXNfdmFsdWUoc3ltKSB8fAorCQkJCQkJ
ICFzeW1faXNfY2hhbmdhYmxlKHN5bSkpID8gIiIgOgorCQkJCQkJIiAoTkVXKSIpOworCQkJCWdv
dG8gY29uZl9jaGlsZHM7CisJCQl9CisJCX0KKwkJaXRlbV9hZGRfc3RyKCIlKmMlcyVzIiwgaW5k
ZW50ICsgMSwgJyAnLAorCQkJCW1lbnVfZ2V0X3Byb21wdChtZW51KSwKKwkJCQkoc3ltX2hhc192
YWx1ZShzeW0pIHx8ICFzeW1faXNfY2hhbmdhYmxlKHN5bSkpID8KKwkJCQkiIiA6ICIgKE5FVyki
KTsKKwkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7
CisJCQlpdGVtX2FkZF9zdHIoIiAgJXMiLCBtZW51X2lzX2VtcHR5KG1lbnUpID8gIi0tLS0iIDog
Ii0tLT4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworY29uZl9jaGlsZHM6CisJaW5kZW50ICs9
IGRvaW50OworCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dCkKKwkJYnVpbGRfY29uZihjaGlsZCk7CisJaW5kZW50IC09IGRvaW50OworfQorCitzdGF0
aWMgdm9pZCByZXNldF9tZW51KHZvaWQpCit7CisJdW5wb3N0X21lbnUoY3Vyc2VzX21lbnUpOwor
CWNsZWFuX2l0ZW1zKCk7Cit9CisKKy8qIGFkanVzdCB0aGUgbWVudSB0byBzaG93IHRoaXMgaXRl
bS4KKyAqIHByZWZlciBub3QgdG8gc2Nyb2xsIHRoZSBtZW51IGlmIHBvc3NpYmxlKi8KK3N0YXRp
YyB2b2lkIGNlbnRlcl9pdGVtKGludCBzZWxlY3RlZF9pbmRleCwgaW50ICpsYXN0X3RvcF9yb3cp
Cit7CisJaW50IHRvcHJvdzsKKworCXNldF90b3Bfcm93KGN1cnNlc19tZW51LCAqbGFzdF90b3Bf
cm93KTsKKwl0b3Byb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsKKwlpZiAoc2VsZWN0ZWRfaW5k
ZXggPCB0b3Byb3cgfHwKKwkgICAgc2VsZWN0ZWRfaW5kZXggPj0gdG9wcm93K213aW5fbWF4X2xp
bmVzKSB7CisJCXRvcHJvdyA9IG1heChzZWxlY3RlZF9pbmRleC1td2luX21heF9saW5lcy8yLCAw
KTsKKwkJaWYgKHRvcHJvdyA+PSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1td2luX21heF9saW5l
cykKKwkJCXRvcHJvdyA9IGl0ZW1fY291bnQoY3Vyc2VzX21lbnUpLW13aW5fbWF4X2xpbmVzOwor
CQlzZXRfdG9wX3JvdyhjdXJzZXNfbWVudSwgdG9wcm93KTsKKwl9CisJc2V0X2N1cnJlbnRfaXRl
bShjdXJzZXNfbWVudSwKKwkJCWN1cnNlc19tZW51X2l0ZW1zW3NlbGVjdGVkX2luZGV4XSk7CisJ
Kmxhc3RfdG9wX3JvdyA9IHRvcHJvdzsKKwlwb3N0X21lbnUoY3Vyc2VzX21lbnUpOworCXJlZnJl
c2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGFzc3Vt
ZXMgcmVzZXRfbWVudSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlICovCitzdGF0aWMgdm9pZCBzaG93
X21lbnUoY29uc3QgY2hhciAqcHJvbXB0LCBjb25zdCBjaGFyICppbnN0cnVjdGlvbnMsCisJCWlu
dCBzZWxlY3RlZF9pbmRleCwgaW50ICpsYXN0X3RvcF9yb3cpCit7CisJaW50IG1heHgsIG1heHk7
CisJV0lORE9XICptZW51X3dpbmRvdzsKKworCWN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1
Y3Rpb25zOworCisJY2xlYXIoKTsKKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJp
YnV0ZXNbTk9STUFMXSk7CisJcHJpbnRfaW5fbWlkZGxlKHN0ZHNjciwgMSwgMCwgZ2V0bWF4eChz
dGRzY3IpLAorCQkJbWVudV9iYWNrdGl0bGUsCisJCQlhdHRyaWJ1dGVzW01BSU5fSEVBRElOR10p
OworCisJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9C
T1hdKTsKKwlib3gobWFpbl93aW5kb3csIDAsIDApOworCSh2b2lkKSB3YXR0cnNldChtYWluX3dp
bmRvdywgYXR0cmlidXRlc1tNQUlOX01FTlVfSEVBRElOR10pOworCW12d3ByaW50dyhtYWluX3dp
bmRvdywgMCwgMywgIiAlcyAiLCBwcm9tcHQpOworCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRv
dywgYXR0cmlidXRlc1tOT1JNQUxdKTsKKworCXNldF9tZW51X2l0ZW1zKGN1cnNlc19tZW51LCBj
dXJzZXNfbWVudV9pdGVtcyk7CisKKwkvKiBwb3NpdGlvbiB0aGUgbWVudSBhdCB0aGUgbWlkZGxl
IG9mIHRoZSBzY3JlZW4gKi8KKwlzY2FsZV9tZW51KGN1cnNlc19tZW51LCAmbWF4eSwgJm1heHgp
OworCW1heHggPSBtaW4obWF4eCwgbXdpbl9tYXhfY29scy0yKTsKKwltYXh5ID0gbXdpbl9tYXhf
bGluZXM7CisJbWVudV93aW5kb3cgPSBkZXJ3aW4obWFpbl93aW5kb3csCisJCQltYXh5LAorCQkJ
bWF4eCwKKwkJCTIsCisJCQkobXdpbl9tYXhfY29scy1tYXh4KS8yKTsKKwlrZXlwYWQobWVudV93
aW5kb3csIFRSVUUpOworCXNldF9tZW51X3dpbihjdXJzZXNfbWVudSwgbWVudV93aW5kb3cpOwor
CXNldF9tZW51X3N1YihjdXJzZXNfbWVudSwgbWVudV93aW5kb3cpOworCisJLyogbXVzdCByZWFz
c2VydCB0aGlzIGFmdGVyIGNoYW5naW5nIGl0ZW1zLCBvdGhlcndpc2UgcmV0dXJucyB0byBhCisJ
ICogZGVmYXVsdCBvZiAxNgorCSAqLworCXNldF9tZW51X2Zvcm1hdChjdXJzZXNfbWVudSwgbWF4
eSwgMSk7CisJY2VudGVyX2l0ZW0oc2VsZWN0ZWRfaW5kZXgsIGxhc3RfdG9wX3Jvdyk7CisJc2V0
X21lbnVfZm9ybWF0KGN1cnNlc19tZW51LCBtYXh5LCAxKTsKKworCXByaW50X2Z1bmN0aW9uX2xp
bmUoKTsKKworCS8qIFBvc3QgdGhlIG1lbnUgKi8KKwlwb3N0X21lbnUoY3Vyc2VzX21lbnUpOwor
CXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCBhZGpf
bWF0Y2hfZGlyKG1hdGNoX2YgKm1hdGNoX2RpcmVjdGlvbikKK3sKKwlpZiAoKm1hdGNoX2RpcmVj
dGlvbiA9PSBGSU5EX05FWFRfTUFUQ0hfRE9XTikKKwkJKm1hdGNoX2RpcmVjdGlvbiA9CisJCQlN
QVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOOworCWVsc2UgaWYgKCptYXRjaF9kaXJlY3Rpb24gPT0g
RklORF9ORVhUX01BVENIX1VQKQorCQkqbWF0Y2hfZGlyZWN0aW9uID0KKwkJCU1BVENIX1RJTktF
Ul9QQVRURVJOX1VQOworCS8qIGVsc2UsIGRvIG5vIGNoYW5nZS4uICovCit9CisKK3N0cnVjdCBt
YXRjaF9zdGF0ZQoreworCWludCBpbl9zZWFyY2g7CisJbWF0Y2hfZiBtYXRjaF9kaXJlY3Rpb247
CisJY2hhciBwYXR0ZXJuWzI1Nl07Cit9OworCisvKiBSZXR1cm4gMCBtZWFucyBJIGhhdmUgaGFu
ZGxlZCB0aGUga2V5LiBJbiBzdWNoIGEgY2FzZSwgYW5zIHNob3VsZCBob2xkIHRoZQorICogaXRl
bSB0byBjZW50ZXIsIG9yIC0xIG90aGVyd2lzZS4KKyAqIEVsc2UgcmV0dXJuIC0xIC4KKyAqLwor
c3RhdGljIGludCBkb19tYXRjaChpbnQga2V5LCBzdHJ1Y3QgbWF0Y2hfc3RhdGUgKnN0YXRlLCBp
bnQgKmFucykKK3sKKwljaGFyIGMgPSAoY2hhcikga2V5OworCWludCB0ZXJtaW5hdGVfc2VhcmNo
ID0gMDsKKwkqYW5zID0gLTE7CisJaWYgKGtleSA9PSAnLycgfHwgKHN0YXRlLT5pbl9zZWFyY2gg
JiYga2V5ID09IDI3KSkgeworCQltb3ZlKDAsIDApOworCQlyZWZyZXNoKCk7CisJCWNscnRvZW9s
KCk7CisJCXN0YXRlLT5pbl9zZWFyY2ggPSAxLXN0YXRlLT5pbl9zZWFyY2g7CisJCWJ6ZXJvKHN0
YXRlLT5wYXR0ZXJuLCBzaXplb2Yoc3RhdGUtPnBhdHRlcm4pKTsKKwkJc3RhdGUtPm1hdGNoX2Rp
cmVjdGlvbiA9IE1BVENIX1RJTktFUl9QQVRURVJOX0RPV047CisJCXJldHVybiAwOworCX0gZWxz
ZSBpZiAoIXN0YXRlLT5pbl9zZWFyY2gpCisJCXJldHVybiAxOworCisJaWYgKGlzYWxudW0oYykg
fHwgaXNncmFwaChjKSB8fCBjID09ICcgJykgeworCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3Rh
dGUtPnBhdHRlcm4pXSA9IGM7CisJCXN0YXRlLT5wYXR0ZXJuW3N0cmxlbihzdGF0ZS0+cGF0dGVy
bildID0gJ1wwJzsKKwkJYWRqX21hdGNoX2Rpcigmc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7CisJ
CSphbnMgPSBnZXRfbWV4dF9tYXRjaChzdGF0ZS0+cGF0dGVybiwKKwkJCQlzdGF0ZS0+bWF0Y2hf
ZGlyZWN0aW9uKTsKKwl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTikgeworCQlzdGF0ZS0+bWF0
Y2hfZGlyZWN0aW9uID0gRklORF9ORVhUX01BVENIX0RPV047CisJCSphbnMgPSBnZXRfbWV4dF9t
YXRjaChzdGF0ZS0+cGF0dGVybiwKKwkJCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsKKwl9IGVs
c2UgaWYgKGtleSA9PSBLRVlfVVApIHsKKwkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbiA9IEZJTkRf
TkVYVF9NQVRDSF9VUDsKKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLAor
CQkJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOworCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9CQUNL
U1BBQ0UgfHwga2V5ID09IDggfHwga2V5ID09IDEyNykgeworCQlzdGF0ZS0+cGF0dGVybltzdHJs
ZW4oc3RhdGUtPnBhdHRlcm4pLTFdID0gJ1wwJzsKKwkJYWRqX21hdGNoX2Rpcigmc3RhdGUtPm1h
dGNoX2RpcmVjdGlvbik7CisJfSBlbHNlCisJCXRlcm1pbmF0ZV9zZWFyY2ggPSAxOworCisJaWYg
KHRlcm1pbmF0ZV9zZWFyY2gpIHsKKwkJc3RhdGUtPmluX3NlYXJjaCA9IDA7CisJCWJ6ZXJvKHN0
YXRlLT5wYXR0ZXJuLCBzaXplb2Yoc3RhdGUtPnBhdHRlcm4pKTsKKwkJbW92ZSgwLCAwKTsKKwkJ
cmVmcmVzaCgpOworCQljbHJ0b2VvbCgpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOwor
fQorCitzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KQoreworCXN0cnVjdCBtZW51
ICpzdWJtZW51ID0gTlVMTDsKKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQo
bWVudSk7CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCByZXM7CisJaW50IGN1cnJlbnRfaW5k
ZXggPSAwOworCWludCBsYXN0X3RvcF9yb3cgPSAwOworCXN0cnVjdCBtYXRjaF9zdGF0ZSBtYXRj
aF9zdGF0ZSA9IHsKKwkJLmluX3NlYXJjaCA9IDAsCisJCS5tYXRjaF9kaXJlY3Rpb24gPSBNQVRD
SF9USU5LRVJfUEFUVEVSTl9ET1dOLAorCQkucGF0dGVybiA9ICIiLAorCX07CisKKwl3aGlsZSAo
IWdsb2JhbF9leGl0KSB7CisJCXJlc2V0X21lbnUoKTsKKwkJY3VycmVudF9tZW51ID0gbWVudTsK
KwkJYnVpbGRfY29uZihtZW51KTsKKwkJaWYgKCFjaGlsZF9jb3VudCkKKwkJCWJyZWFrOworCisJ
CXNob3dfbWVudShwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKKwkJCQltZW51X2luc3Ry
dWN0aW9ucywKKwkJCQljdXJyZW50X2luZGV4LCAmbGFzdF90b3Bfcm93KTsKKwkJa2V5cGFkKCht
ZW51X3dpbihjdXJzZXNfbWVudSkpLCBUUlVFKTsKKwkJd2hpbGUgKCFnbG9iYWxfZXhpdCkgewor
CQkJaWYgKG1hdGNoX3N0YXRlLmluX3NlYXJjaCkgeworCQkJCW12cHJpbnR3KDAsIDAsCisJCQkJ
CSJzZWFyY2hpbmc6ICVzIiwgbWF0Y2hfc3RhdGUucGF0dGVybik7CisJCQkJY2xydG9lb2woKTsK
KwkJCX0KKwkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQkJcmVzID0gd2dl
dGNoKG1lbnVfd2luKGN1cnNlc19tZW51KSk7CisJCQlpZiAoIXJlcykKKwkJCQlicmVhazsKKwkJ
CWlmIChkb19tYXRjaChyZXMsICZtYXRjaF9zdGF0ZSwgJmN1cnJlbnRfaW5kZXgpID09IDApIHsK
KwkJCQlpZiAoY3VycmVudF9pbmRleCAhPSAtMSkKKwkJCQkJY2VudGVyX2l0ZW0oY3VycmVudF9p
bmRleCwKKwkJCQkJCSAgICAmbGFzdF90b3Bfcm93KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJ
CWlmIChwcm9jZXNzX3NwZWNpYWxfa2V5cygmcmVzLAorCQkJCQkJKHN0cnVjdCBtZW51ICopIGl0
ZW1fZGF0YSgpKSkKKwkJCQlicmVhazsKKwkJCXN3aXRjaCAocmVzKSB7CisJCQljYXNlIEtFWV9E
T1dOOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfRE9XTl9JVEVNKTsKKwkJCQli
cmVhazsKKwkJCWNhc2UgS0VZX1VQOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFf
VVBfSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9OUEFHRToKKwkJCQltZW51X2RyaXZl
cihjdXJzZXNfbWVudSwgUkVRX1NDUl9EUEFHRSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9Q
UEFHRToKKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1NDUl9VUEFHRSk7CisJCQkJ
YnJlYWs7CisJCQljYXNlIEtFWV9IT01FOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBS
RVFfRklSU1RfSVRFTSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEtFWV9FTkQ6CisJCQkJbWVudV9k
cml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9MQVNUX0lURU0pOworCQkJCWJyZWFrOworCQkJY2FzZSAn
aCc6CisJCQljYXNlICc/JzoKKwkJCQlzaG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0
YSgpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8
CisJCQkJcmVzID09IDMyIHx8IHJlcyA9PSAnbicgfHwgcmVzID09ICd5JyB8fAorCQkJCXJlcyA9
PSBLRVlfTEVGVCB8fCByZXMgPT0gS0VZX1JJR0hUIHx8CisJCQkJcmVzID09ICdtJykKKwkJCQli
cmVhazsKKwkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQl9CisKKwkJcmVm
cmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisJCS8qIGlmIEVTQyBvciBsZWZ0Ki8KKwkJ
aWYgKHJlcyA9PSAyNyB8fCAobWVudSAhPSAmcm9vdG1lbnUgJiYgcmVzID09IEtFWV9MRUZUKSkK
KwkJCWJyZWFrOworCisJCS8qIHJlbWVtYmVyIGxvY2F0aW9uIGluIHRoZSBtZW51ICovCisJCWxh
c3RfdG9wX3JvdyA9IHRvcF9yb3coY3Vyc2VzX21lbnUpOworCQljdXJyZW50X2luZGV4ID0gY3Vy
c2VzX2l0ZW1faW5kZXgoKTsKKworCQlpZiAoIWl0ZW1fdGFnKCkpCisJCQljb250aW51ZTsKKwor
CQlzdWJtZW51ID0gKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpOworCQlpZiAoIXN1Ym1lbnUg
fHwgIW1lbnVfaXNfdmlzaWJsZShzdWJtZW51KSkKKwkJCWNvbnRpbnVlOworCQlzeW0gPSBzdWJt
ZW51LT5zeW07CisKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAnICc6CisJCQlpZiAoaXRlbV9p
c190YWcoJ3QnKSkKKwkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7CisJCQllbHNl
IGlmIChpdGVtX2lzX3RhZygnbScpKQorCQkJCWNvbmYoc3VibWVudSk7CisJCQlicmVhazsKKwkJ
Y2FzZSBLRVlfUklHSFQ6CisJCWNhc2UgMTA6IC8qIEVOVEVSIFdBUyBQUkVTU0VEICovCisJCQlz
d2l0Y2ggKGl0ZW1fdGFnKCkpIHsKKwkJCWNhc2UgJ20nOgorCQkJCWlmIChzaW5nbGVfbWVudV9t
b2RlKQorCQkJCQlzdWJtZW51LT5kYXRhID0KKwkJCQkJCSh2b2lkICopIChsb25nKSAhc3VibWVu
dS0+ZGF0YTsKKwkJCQllbHNlCisJCQkJCWNvbmYoc3VibWVudSk7CisJCQkJYnJlYWs7CisJCQlj
YXNlICd0JzoKKwkJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmCisJCQkJICAgIHN5bV9nZXRf
dHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMpCisJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOwor
CQkJCWVsc2UgaWYgKHN1Ym1lbnUtPnByb21wdCAmJgorCQkJCQkgc3VibWVudS0+cHJvbXB0LT50
eXBlID09IFBfTUVOVSkKKwkJCQkJY29uZihzdWJtZW51KTsKKwkJCQllbHNlIGlmIChyZXMgPT0g
MTApCisJCQkJCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgJ3MnOgorCQkJCWNvbmZfc3RyaW5nKHN1Ym1lbnUpOworCQkJCWJyZWFrOworCQkJfQor
CQkJYnJlYWs7CisJCWNhc2UgJ3knOgorCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpIHsKKwkJCQlp
ZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIHllcykpCisJCQkJCWJyZWFrOworCQkJCWlm
IChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKSkKKwkJCQkJYnRuX2RpYWxvZyhtYWlu
X3dpbmRvdywgc2V0bW9kX3RleHQsIDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgJ24nOgor
CQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpCisJCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0s
IG5vKTsKKwkJCWJyZWFrOworCQljYXNlICdtJzoKKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKQor
CQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpOworCQkJYnJlYWs7CisJCX0KKwl9
Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfbWVzc2FnZV9jYWxsYmFjayhjb25zdCBjaGFyICpzKQor
eworCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csIHMsIDEsICI8T0s+Iik7Cit9CisKK3N0YXRpYyB2
b2lkIHNob3dfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgZ3N0ciBoZWxwOwor
CisJaWYgKCFtZW51KQorCQlyZXR1cm47CisKKwloZWxwID0gc3RyX25ldygpOworCW1lbnVfZ2V0
X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsKKwlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csIG1l
bnVfZ2V0X3Byb21wdChtZW51KSwgc3RyX2dldCgmaGVscCkpOworCXN0cl9mcmVlKCZoZWxwKTsK
K30KKworc3RhdGljIHZvaWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpCit7CisJY29u
c3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOworCXN0cnVjdCBtZW51ICpj
aGlsZCA9IE5VTEw7CisJc3RydWN0IHN5bWJvbCAqYWN0aXZlOworCWludCBzZWxlY3RlZF9pbmRl
eCA9IDA7CisJaW50IGxhc3RfdG9wX3JvdyA9IDA7CisJaW50IHJlcywgaSA9IDA7CisJc3RydWN0
IG1hdGNoX3N0YXRlIG1hdGNoX3N0YXRlID0geworCQkuaW5fc2VhcmNoID0gMCwKKwkJLm1hdGNo
X2RpcmVjdGlvbiA9IE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sCisJCS5wYXR0ZXJuID0gIiIs
CisJfTsKKworCWFjdGl2ZSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSk7CisJLyog
dGhpcyBpcyBtb3N0bHkgZHVwbGljYXRlZCBmcm9tIHRoZSBjb25mKCkgZnVuY3Rpb24uICovCisJ
d2hpbGUgKCFnbG9iYWxfZXhpdCkgeworCQlyZXNldF9tZW51KCk7CisKKwkJZm9yIChpID0gMCwg
Y2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgeworCQkJaWYg
KCFzaG93X2FsbF9pdGVtcyAmJiAhbWVudV9pc192aXNpYmxlKGNoaWxkKSkKKwkJCQljb250aW51
ZTsKKworCQkJaWYgKGNoaWxkLT5zeW0gPT0gc3ltX2dldF9jaG9pY2VfdmFsdWUobWVudS0+c3lt
KSkKKwkJCQlpdGVtX21ha2UoY2hpbGQsICc6JywgIjxYPiAlcyIsCisJCQkJCQltZW51X2dldF9w
cm9tcHQoY2hpbGQpKTsKKwkJCWVsc2UgaWYgKGNoaWxkLT5zeW0pCisJCQkJaXRlbV9tYWtlKGNo
aWxkLCAnOicsICIgICAgJXMiLAorCQkJCQkJbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7CisJCQll
bHNlCisJCQkJaXRlbV9tYWtlKGNoaWxkLCAnOicsICIqKiogJXMgKioqIiwKKwkJCQkJCW1lbnVf
Z2V0X3Byb21wdChjaGlsZCkpOworCisJCQlpZiAoY2hpbGQtPnN5bSA9PSBhY3RpdmUpeworCQkJ
CWxhc3RfdG9wX3JvdyA9IHRvcF9yb3coY3Vyc2VzX21lbnUpOworCQkJCXNlbGVjdGVkX2luZGV4
ID0gaTsKKwkJCX0KKwkJCWkrKzsKKwkJfQorCQlzaG93X21lbnUocHJvbXB0ID8gcHJvbXB0IDog
IkNob2ljZSBNZW51IiwKKwkJCQlyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zLAorCQkJCXNlbGVjdGVk
X2luZGV4LAorCQkJCSZsYXN0X3RvcF9yb3cpOworCQl3aGlsZSAoIWdsb2JhbF9leGl0KSB7CisJ
CQlpZiAobWF0Y2hfc3RhdGUuaW5fc2VhcmNoKSB7CisJCQkJbXZwcmludHcoMCwgMCwgInNlYXJj
aGluZzogJXMiLAorCQkJCQkgbWF0Y2hfc3RhdGUucGF0dGVybik7CisJCQkJY2xydG9lb2woKTsK
KwkJCX0KKwkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCQkJcmVzID0gd2dl
dGNoKG1lbnVfd2luKGN1cnNlc19tZW51KSk7CisJCQlpZiAoIXJlcykKKwkJCQlicmVhazsKKwkJ
CWlmIChkb19tYXRjaChyZXMsICZtYXRjaF9zdGF0ZSwgJnNlbGVjdGVkX2luZGV4KSA9PSAwKSB7
CisJCQkJaWYgKHNlbGVjdGVkX2luZGV4ICE9IC0xKQorCQkJCQljZW50ZXJfaXRlbShzZWxlY3Rl
ZF9pbmRleCwKKwkJCQkJCSAgICAmbGFzdF90b3Bfcm93KTsKKwkJCQljb250aW51ZTsKKwkJCX0K
KwkJCWlmIChwcm9jZXNzX3NwZWNpYWxfa2V5cygKKwkJCQkJCSZyZXMsCisJCQkJCQkoc3RydWN0
IG1lbnUgKikgaXRlbV9kYXRhKCkpKQorCQkJCWJyZWFrOworCQkJc3dpdGNoIChyZXMpIHsKKwkJ
CWNhc2UgS0VZX0RPV046CisJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9ET1dOX0lU
RU0pOworCQkJCWJyZWFrOworCQkJY2FzZSBLRVlfVVA6CisJCQkJbWVudV9kcml2ZXIoY3Vyc2Vz
X21lbnUsIFJFUV9VUF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX05QQUdFOgorCQkJ
CW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfU0NSX0RQQUdFKTsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgS0VZX1BQQUdFOgorCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfU0NSX1VQ
QUdFKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX0hPTUU6CisJCQkJbWVudV9kcml2ZXIoY3Vy
c2VzX21lbnUsIFJFUV9GSVJTVF9JVEVNKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgS0VZX0VORDoK
KwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0xBU1RfSVRFTSk7CisJCQkJYnJlYWs7
CisJCQljYXNlICdoJzoKKwkJCWNhc2UgJz8nOgorCQkJCXNob3dfaGVscCgoc3RydWN0IG1lbnUg
KikgaXRlbV9kYXRhKCkpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHJlcyA9PSAxMCB8fCBy
ZXMgPT0gMjcgfHwgcmVzID09ICcgJyB8fAorCQkJCQlyZXMgPT0gS0VZX0xFRlQpeworCQkJCWJy
ZWFrOworCQkJfQorCQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisJCX0KKwkJ
LyogaWYgRVNDIG9yIGxlZnQgKi8KKwkJaWYgKHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0xFRlQp
CisJCQlicmVhazsKKworCQljaGlsZCA9IGl0ZW1fZGF0YSgpOworCQlpZiAoIWNoaWxkIHx8ICFt
ZW51X2lzX3Zpc2libGUoY2hpbGQpIHx8ICFjaGlsZC0+c3ltKQorCQkJY29udGludWU7CisJCXN3
aXRjaCAocmVzKSB7CisJCWNhc2UgJyAnOgorCQljYXNlICAxMDoKKwkJY2FzZSBLRVlfUklHSFQ6
CisJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKGNoaWxkLT5zeW0sIHllcyk7CisJCQlyZXR1cm47
CisJCWNhc2UgJ2gnOgorCQljYXNlICc/JzoKKwkJCXNob3dfaGVscChjaGlsZCk7CisJCQlhY3Rp
dmUgPSBjaGlsZC0+c3ltOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0VYSVQ6CisJCQlyZXR1cm47
CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51
KQoreworCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsKKworCXdo
aWxlICgxKSB7CisJCWludCByZXM7CisJCWNvbnN0IGNoYXIgKmhlYWRpbmc7CisKKwkJc3dpdGNo
IChzeW1fZ2V0X3R5cGUobWVudS0+c3ltKSkgeworCQljYXNlIFNfSU5UOgorCQkJaGVhZGluZyA9
IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7CisJCQlicmVhazsKKwkJY2FzZSBTX0hFWDoKKwkJ
CWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4OworCQkJYnJlYWs7CisJCWNhc2Ug
U19TVFJJTkc6CisJCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsKKwkJ
CWJyZWFrOworCQlkZWZhdWx0OgorCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBuY29uZiBlcnJvciEi
OworCQl9CisJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywKKwkJCQlwcm9tcHQg
PyBwcm9tcHQgOiAiTWFpbiBNZW51IiwKKwkJCQloZWFkaW5nLAorCQkJCXN5bV9nZXRfc3RyaW5n
X3ZhbHVlKG1lbnUtPnN5bSksCisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHQsCisJCQkJJmRpYWxv
Z19pbnB1dF9yZXN1bHRfbGVuKTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYg
KHN5bV9zZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSwKKwkJCQkJCWRpYWxvZ19pbnB1dF9yZXN1
bHQpKQorCQkJCXJldHVybjsKKwkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csCisJCQkJIllvdSBo
YXZlIG1hZGUgYW4gaW52YWxpZCBlbnRyeS4iLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJ
CQlzaG93X2hlbHAobWVudSk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRVhJVDoKKwkJCXJldHVy
bjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpCit7CisJd2hpbGUg
KDEpIHsKKwkJaW50IHJlczsKKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LAor
CQkJCU5VTEwsIGxvYWRfY29uZmlnX3RleHQsCisJCQkJZmlsZW5hbWUsCisJCQkJJmRpYWxvZ19p
bnB1dF9yZXN1bHQsCisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsKKwkJc3dpdGNoIChy
ZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQorCQkJCXJl
dHVybjsKKwkJCWlmICghY29uZl9yZWFkKGRpYWxvZ19pbnB1dF9yZXN1bHQpKSB7CisJCQkJc2V0
X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsKKwkJCQlzeW1fc2V0X2NoYW5n
ZV9jb3VudCgxKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlidG5fZGlhbG9nKG1haW5fd2luZG93
LCAiRmlsZSBkb2VzIG5vdCBleGlzdCEiLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlz
aG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJCSJMb2FkIEFsdGVybmF0ZSBDb25maWd1
cmF0aW9uIiwKKwkJCQkJbG9hZF9jb25maWdfaGVscCk7CisJCQlicmVhazsKKwkJY2FzZSBLRVlf
RVhJVDoKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgY29uZl9zYXZlKHZv
aWQpCit7CisJd2hpbGUgKDEpIHsKKwkJaW50IHJlczsKKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94
KG1haW5fd2luZG93LAorCQkJCU5VTEwsIHNhdmVfY29uZmlnX3RleHQsCisJCQkJZmlsZW5hbWUs
CisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHQsCisJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVu
KTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAwOgorCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVz
dWx0WzBdKQorCQkJCXJldHVybjsKKwkJCXJlcyA9IGNvbmZfd3JpdGUoZGlhbG9nX2lucHV0X3Jl
c3VsdCk7CisJCQlpZiAoIXJlcykgeworCQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9nX2lu
cHV0X3Jlc3VsdCk7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRv
dywgIkNhbid0IGNyZWF0ZSBmaWxlISIsCisJCQkJMSwgIjxPSz4iKTsKKwkJCWJyZWFrOworCQlj
YXNlIDE6CisJCQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJIlNhdmUgQWx0ZXJu
YXRlIENvbmZpZ3VyYXRpb24iLAorCQkJCXNhdmVfY29uZmlnX2hlbHApOworCQkJYnJlYWs7CisJ
CWNhc2UgS0VZX0VYSVQ6CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNl
dHVwX3dpbmRvd3Modm9pZCkKK3sKKwlpbnQgbGluZXMsIGNvbHVtbnM7CisKKwlnZXRtYXh5eChz
dGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsKKworCWlmIChtYWluX3dpbmRvdyAhPSBOVUxMKQorCQlk
ZWx3aW4obWFpbl93aW5kb3cpOworCisJLyogc2V0IHVwIHRoZSBtZW51IGFuZCBtZW51IHdpbmRv
dyAqLworCW1haW5fd2luZG93ID0gbmV3d2luKGxpbmVzLTIsIGNvbHVtbnMtMiwgMiwgMSk7CisJ
a2V5cGFkKG1haW5fd2luZG93LCBUUlVFKTsKKwltd2luX21heF9saW5lcyA9IGxpbmVzLTc7CisJ
bXdpbl9tYXhfY29scyA9IGNvbHVtbnMtNjsKKworCS8qIHBhbmVscyBvcmRlciBpcyBmcm9tIGJv
dHRvbSB0byB0b3AgKi8KKwluZXdfcGFuZWwobWFpbl93aW5kb3cpOworfQorCitpbnQgbWFpbihp
bnQgYWMsIGNoYXIgKiphdikKK3sKKwlpbnQgbGluZXMsIGNvbHVtbnM7CisJY2hhciAqbW9kZTsK
KworCWlmIChhYyA+IDEgJiYgc3RyY21wKGF2WzFdLCAiLXMiKSA9PSAwKSB7CisJCS8qIFNpbGVu
Y2UgY29uZl9yZWFkKCkgdW50aWwgdGhlIHJlYWwgY2FsbGJhY2sgaXMgc2V0IHVwICovCisJCWNv
bmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7CisJCWF2Kys7CisJfQorCWNvbmZfcGFyc2Uo
YXZbMV0pOworCWNvbmZfcmVhZChOVUxMKTsKKworCW1vZGUgPSBnZXRlbnYoIk5DT05GSUdfTU9E
RSIpOworCWlmIChtb2RlKSB7CisJCWlmICghc3RyY2FzZWNtcChtb2RlLCAic2luZ2xlX21lbnUi
KSkKKwkJCXNpbmdsZV9tZW51X21vZGUgPSAxOworCX0KKworCS8qIEluaXRpYWxpemUgY3Vyc2Vz
ICovCisJaW5pdHNjcigpOworCS8qIHNldCBjb2xvciB0aGVtZSAqLworCXNldF9jb2xvcnMoKTsK
KworCWNicmVhaygpOworCW5vZWNobygpOworCWtleXBhZChzdGRzY3IsIFRSVUUpOworCWN1cnNf
c2V0KDApOworCisJZ2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7CisJaWYgKGNvbHVt
bnMgPCA3NSB8fCBsaW5lcyA8IDIwKSB7CisJCWVuZHdpbigpOworCQlwcmludGYoIllvdXIgdGVy
bWluYWwgc2hvdWxkIGhhdmUgYXQgIgorCQkJImxlYXN0IDIwIGxpbmVzIGFuZCA3NSBjb2x1bW5z
XG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJbm90aW1lb3V0KHN0ZHNjciwgRkFMU0UpOworI2lm
IE5DVVJTRVNfUkVFTlRSQU5UCisJc2V0X2VzY2RlbGF5KDEpOworI2Vsc2UKKwlFU0NERUxBWSA9
IDE7CisjZW5kaWYKKworCS8qIHNldCBidG5zIG1lbnUgKi8KKwljdXJzZXNfbWVudSA9IG5ld19t
ZW51KGN1cnNlc19tZW51X2l0ZW1zKTsKKwltZW51X29wdHNfb2ZmKGN1cnNlc19tZW51LCBPX1NI
T1dERVNDKTsKKwltZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fU0hPV01BVENIKTsKKwltZW51
X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fT05FVkFMVUUpOworCW1lbnVfb3B0c19vbihjdXJzZXNf
bWVudSwgT19OT05DWUNMSUMpOworCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19JR05PUkVD
QVNFKTsKKwlzZXRfbWVudV9tYXJrKGN1cnNlc19tZW51LCAiICIpOworCXNldF9tZW51X2ZvcmUo
Y3Vyc2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0ZPUkVdKTsKKwlzZXRfbWVudV9iYWNr
KGN1cnNlc19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9CQUNLXSk7CisJc2V0X21lbnVfZ3Jl
eShjdXJzZXNfbWVudSwgYXR0cmlidXRlc1tNQUlOX01FTlVfR1JFWV0pOworCisJc2V0X2NvbmZp
Z19maWxlbmFtZShjb25mX2dldF9jb25maWduYW1lKCkpOworCXNldHVwX3dpbmRvd3MoKTsKKwor
CS8qIGNoZWNrIGZvciBLRVlfRlVOQygxKSAqLworCWlmIChoYXNfa2V5KEtFWV9GKDEpKSA9PSBG
QUxTRSkgeworCQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csCisJCQkJIkluc3RydWN0aW9u
cyIsCisJCQkJbWVudV9ub19mX2luc3RydWN0aW9ucyk7CisJfQorCisJY29uZl9zZXRfbWVzc2Fn
ZV9jYWxsYmFjayhjb25mX21lc3NhZ2VfY2FsbGJhY2spOworCS8qIGRvIHRoZSB3b3JrICovCisJ
d2hpbGUgKCFnbG9iYWxfZXhpdCkgeworCQljb25mKCZyb290bWVudSk7CisJCWlmICghZ2xvYmFs
X2V4aXQgJiYgZG9fZXhpdCgpID09IDApCisJCQlicmVhazsKKwl9CisJLyogb2ssIHdlIGFyZSBk
b25lICovCisJdW5wb3N0X21lbnUoY3Vyc2VzX21lbnUpOworCWZyZWVfbWVudShjdXJzZXNfbWVu
dSk7CisJZGVsd2luKG1haW5fd2luZG93KTsKKwljbGVhcigpOworCXJlZnJlc2goKTsKKwllbmR3
aW4oKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9uY29uZi5n
dWkuYyBiL3N1cHBvcnQva2NvbmZpZy9uY29uZi5ndWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43N2Y1MjVhCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
L25jb25mLmd1aS5jCkBAIC0wLDAgKzEsNjY0IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIgVHphY2hhciA8bmlyLnR6
YWNoYXJAZ21haWwuY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBtZW51Y29uZmlnLgorICovCisj
aW5jbHVkZSAibmNvbmYuaCIKKyNpbmNsdWRlICJsa2MuaCIKKworLyogYSBsaXN0IG9mIGFsbCB0
aGUgZGlmZmVyZW50IHdpZGdldHMgd2UgdXNlICovCithdHRyaWJ1dGVzX3QgYXR0cmlidXRlc1tB
VFRSX01BWCsxXSA9IHswfTsKKworLyogYXZhaWxhYmxlIGNvbG9yczoKKyAgIENPTE9SX0JMQUNL
ICAgMAorICAgQ09MT1JfUkVEICAgICAxCisgICBDT0xPUl9HUkVFTiAgIDIKKyAgIENPTE9SX1lF
TExPVyAgMworICAgQ09MT1JfQkxVRSAgICA0CisgICBDT0xPUl9NQUdFTlRBIDUKKyAgIENPTE9S
X0NZQU4gICAgNgorICAgQ09MT1JfV0hJVEUgICA3CisgICAqLworc3RhdGljIHZvaWQgc2V0X25v
cm1hbF9jb2xvcnModm9pZCkKK3sKKwlpbml0X3BhaXIoTk9STUFMLCAtMSwgLTEpOworCWluaXRf
cGFpcihNQUlOX0hFQURJTkcsIENPTE9SX01BR0VOVEEsIC0xKTsKKworCS8qIEZPUkUgaXMgZm9y
IHRoZSBzZWxlY3RlZCBpdGVtICovCisJaW5pdF9wYWlyKE1BSU5fTUVOVV9GT1JFLCAtMSwgLTEp
OworCS8qIEJBQ0sgZm9yIGFsbCB0aGUgcmVzdCAqLworCWluaXRfcGFpcihNQUlOX01FTlVfQkFD
SywgLTEsIC0xKTsKKwlpbml0X3BhaXIoTUFJTl9NRU5VX0dSRVksIC0xLCAtMSk7CisJaW5pdF9w
YWlyKE1BSU5fTUVOVV9IRUFESU5HLCBDT0xPUl9HUkVFTiwgLTEpOworCWluaXRfcGFpcihNQUlO
X01FTlVfQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsKKworCWluaXRfcGFpcihTQ1JPTExXSU5fVEVY
VCwgLTEsIC0xKTsKKwlpbml0X3BhaXIoU0NST0xMV0lOX0hFQURJTkcsIENPTE9SX0dSRUVOLCAt
MSk7CisJaW5pdF9wYWlyKFNDUk9MTFdJTl9CT1gsIENPTE9SX1lFTExPVywgLTEpOworCisJaW5p
dF9wYWlyKERJQUxPR19URVhULCAtMSwgLTEpOworCWluaXRfcGFpcihESUFMT0dfQk9YLCBDT0xP
Ul9ZRUxMT1csIC0xKTsKKwlpbml0X3BhaXIoRElBTE9HX01FTlVfQkFDSywgQ09MT1JfWUVMTE9X
LCAtMSk7CisJaW5pdF9wYWlyKERJQUxPR19NRU5VX0ZPUkUsIENPTE9SX1JFRCwgLTEpOworCisJ
aW5pdF9wYWlyKElOUFVUX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7CisJaW5pdF9wYWlyKElOUFVU
X0hFQURJTkcsIENPTE9SX0dSRUVOLCAtMSk7CisJaW5pdF9wYWlyKElOUFVUX1RFWFQsIC0xLCAt
MSk7CisJaW5pdF9wYWlyKElOUFVUX0ZJRUxELCAtMSwgLTEpOworCisJaW5pdF9wYWlyKEZVTkNU
SU9OX0hJR0hMSUdIVCwgLTEsIC0xKTsKKwlpbml0X3BhaXIoRlVOQ1RJT05fVEVYVCwgQ09MT1Jf
WUVMTE9XLCAtMSk7Cit9CisKKy8qIGF2YWlsYWJsZSBhdHRyaWJ1dGVzOgorICAgQV9OT1JNQUwg
ICAgICAgIE5vcm1hbCBkaXNwbGF5IChubyBoaWdobGlnaHQpCisgICBBX1NUQU5ET1VUICAgICAg
QmVzdCBoaWdobGlnaHRpbmcgbW9kZSBvZiB0aGUgdGVybWluYWwuCisgICBBX1VOREVSTElORSAg
ICAgVW5kZXJsaW5pbmcKKyAgIEFfUkVWRVJTRSAgICAgICBSZXZlcnNlIHZpZGVvCisgICBBX0JM
SU5LICAgICAgICAgQmxpbmtpbmcKKyAgIEFfRElNICAgICAgICAgICBIYWxmIGJyaWdodAorICAg
QV9CT0xEICAgICAgICAgIEV4dHJhIGJyaWdodCBvciBib2xkCisgICBBX1BST1RFQ1QgICAgICAg
UHJvdGVjdGVkIG1vZGUKKyAgIEFfSU5WSVMgICAgICAgICBJbnZpc2libGUgb3IgYmxhbmsgbW9k
ZQorICAgQV9BTFRDSEFSU0VUICAgIEFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0CisgICBBX0NIQVJU
RVhUICAgICAgQml0LW1hc2sgdG8gZXh0cmFjdCBhIGNoYXJhY3RlcgorICAgQ09MT1JfUEFJUihu
KSAgIENvbG9yLXBhaXIgbnVtYmVyIG4KKyAgICovCitzdGF0aWMgdm9pZCBub3JtYWxfY29sb3Jf
dGhlbWUodm9pZCkKK3sKKwkvKiBhdXRvbWF0aWNhbGx5IGFkZCBjb2xvci4uLiAqLworI2RlZmlu
ZSBta2F0dHIobmFtZSwgYXR0cikgZG8geyBcCithdHRyaWJ1dGVzW25hbWVdID0gYXR0ciB8IENP
TE9SX1BBSVIobmFtZSk7IH0gd2hpbGUgKDApCisJbWthdHRyKE5PUk1BTCwgTk9STUFMKTsKKwlt
a2F0dHIoTUFJTl9IRUFESU5HLCBBX0JPTEQgfCBBX1VOREVSTElORSk7CisKKwlta2F0dHIoTUFJ
Tl9NRU5VX0ZPUkUsIEFfUkVWRVJTRSk7CisJbWthdHRyKE1BSU5fTUVOVV9CQUNLLCBBX05PUk1B
TCk7CisJbWthdHRyKE1BSU5fTUVOVV9HUkVZLCBBX05PUk1BTCk7CisJbWthdHRyKE1BSU5fTUVO
VV9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cihNQUlOX01FTlVfQk9YLCBBX05PUk1BTCk7CisK
Kwlta2F0dHIoU0NST0xMV0lOX1RFWFQsIEFfTk9STUFMKTsKKwlta2F0dHIoU0NST0xMV0lOX0hF
QURJTkcsIEFfQk9MRCk7CisJbWthdHRyKFNDUk9MTFdJTl9CT1gsIEFfQk9MRCk7CisKKwlta2F0
dHIoRElBTE9HX1RFWFQsIEFfQk9MRCk7CisJbWthdHRyKERJQUxPR19CT1gsIEFfQk9MRCk7CisJ
bWthdHRyKERJQUxPR19NRU5VX0ZPUkUsIEFfU1RBTkRPVVQpOworCW1rYXR0cihESUFMT0dfTUVO
VV9CQUNLLCBBX05PUk1BTCk7CisKKwlta2F0dHIoSU5QVVRfQk9YLCBBX05PUk1BTCk7CisJbWth
dHRyKElOUFVUX0hFQURJTkcsIEFfQk9MRCk7CisJbWthdHRyKElOUFVUX1RFWFQsIEFfTk9STUFM
KTsKKwlta2F0dHIoSU5QVVRfRklFTEQsIEFfVU5ERVJMSU5FKTsKKworCW1rYXR0cihGVU5DVElP
Tl9ISUdITElHSFQsIEFfQk9MRCk7CisJbWthdHRyKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7
Cit9CisKK3N0YXRpYyB2b2lkIG5vX2NvbG9yc190aGVtZSh2b2lkKQoreworCS8qIGF1dG9tYXRp
Y2FsbHkgYWRkIGhpZ2hsaWdodCwgbm8gY29sb3IgKi8KKyNkZWZpbmUgbWthdHRybihuYW1lLCBh
dHRyKSB7IGF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyOyB9CisKKwlta2F0dHJuKE5PUk1BTCwgTk9S
TUFMKTsKKwlta2F0dHJuKE1BSU5fSEVBRElORywgQV9CT0xEIHwgQV9VTkRFUkxJTkUpOworCisJ
bWthdHRybihNQUlOX01FTlVfRk9SRSwgQV9TVEFORE9VVCk7CisJbWthdHRybihNQUlOX01FTlVf
QkFDSywgQV9OT1JNQUwpOworCW1rYXR0cm4oTUFJTl9NRU5VX0dSRVksIEFfTk9STUFMKTsKKwlt
a2F0dHJuKE1BSU5fTUVOVV9IRUFESU5HLCBBX0JPTEQpOworCW1rYXR0cm4oTUFJTl9NRU5VX0JP
WCwgQV9OT1JNQUwpOworCisJbWthdHRybihTQ1JPTExXSU5fVEVYVCwgQV9OT1JNQUwpOworCW1r
YXR0cm4oU0NST0xMV0lOX0hFQURJTkcsIEFfQk9MRCk7CisJbWthdHRybihTQ1JPTExXSU5fQk9Y
LCBBX0JPTEQpOworCisJbWthdHRybihESUFMT0dfVEVYVCwgQV9OT1JNQUwpOworCW1rYXR0cm4o
RElBTE9HX0JPWCwgQV9CT0xEKTsKKwlta2F0dHJuKERJQUxPR19NRU5VX0ZPUkUsIEFfU1RBTkRP
VVQpOworCW1rYXR0cm4oRElBTE9HX01FTlVfQkFDSywgQV9OT1JNQUwpOworCisJbWthdHRybihJ
TlBVVF9CT1gsIEFfQk9MRCk7CisJbWthdHRybihJTlBVVF9IRUFESU5HLCBBX0JPTEQpOworCW1r
YXR0cm4oSU5QVVRfVEVYVCwgQV9OT1JNQUwpOworCW1rYXR0cm4oSU5QVVRfRklFTEQsIEFfVU5E
RVJMSU5FKTsKKworCW1rYXR0cm4oRlVOQ1RJT05fSElHSExJR0hULCBBX0JPTEQpOworCW1rYXR0
cm4oRlVOQ1RJT05fVEVYVCwgQV9SRVZFUlNFKTsKK30KKwordm9pZCBzZXRfY29sb3JzKHZvaWQp
Cit7CisJc3RhcnRfY29sb3IoKTsKKwl1c2VfZGVmYXVsdF9jb2xvcnMoKTsKKwlzZXRfbm9ybWFs
X2NvbG9ycygpOworCWlmIChoYXNfY29sb3JzKCkpIHsKKwkJbm9ybWFsX2NvbG9yX3RoZW1lKCk7
CisJfSBlbHNlIHsKKwkJLyogZ2l2ZSBkZWZhdWx0cyAqLworCQlub19jb2xvcnNfdGhlbWUoKTsK
Kwl9Cit9CisKKworLyogdGhpcyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICov
Cit2b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwKKwkJaW50IHN0YXJ0eSwKKwkJaW50
IHN0YXJ0eCwKKwkJaW50IHdpZHRoLAorCQljb25zdCBjaGFyICpzdHJpbmcsCisJCWNodHlwZSBj
b2xvcikKK3sgICAgICBpbnQgbGVuZ3RoLCB4LCB5OworCWZsb2F0IHRlbXA7CisKKworCWlmICh3
aW4gPT0gTlVMTCkKKwkJd2luID0gc3Rkc2NyOworCWdldHl4KHdpbiwgeSwgeCk7CisJaWYgKHN0
YXJ0eCAhPSAwKQorCQl4ID0gc3RhcnR4OworCWlmIChzdGFydHkgIT0gMCkKKwkJeSA9IHN0YXJ0
eTsKKwlpZiAod2lkdGggPT0gMCkKKwkJd2lkdGggPSA4MDsKKworCWxlbmd0aCA9IHN0cmxlbihz
dHJpbmcpOworCXRlbXAgPSAod2lkdGggLSBsZW5ndGgpIC8gMjsKKwl4ID0gc3RhcnR4ICsgKGlu
dCl0ZW1wOworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGNvbG9yKTsKKwltdndwcmludHcod2luLCB5
LCB4LCAiJXMiLCBzdHJpbmcpOworCXJlZnJlc2goKTsKK30KKworaW50IGdldF9saW5lX25vKGNv
bnN0IGNoYXIgKnRleHQpCit7CisJaW50IGk7CisJaW50IHRvdGFsID0gMTsKKworCWlmICghdGV4
dCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyB0ZXh0W2ldICE9ICdcMCc7IGkrKykKKwkJ
aWYgKHRleHRbaV0gPT0gJ1xuJykKKwkJCXRvdGFsKys7CisJcmV0dXJuIHRvdGFsOworfQorCitj
b25zdCBjaGFyICpnZXRfbGluZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgbGluZV9ubykKK3sKKwlp
bnQgaTsKKwlpbnQgbGluZXMgPSAwOworCisJaWYgKCF0ZXh0KQorCQlyZXR1cm4gTlVMTDsKKwor
CWZvciAoaSA9IDA7IHRleHRbaV0gIT0gJ1wwJyAmJiBsaW5lcyA8IGxpbmVfbm87IGkrKykKKwkJ
aWYgKHRleHRbaV0gPT0gJ1xuJykKKwkJCWxpbmVzKys7CisJcmV0dXJuIHRleHQraTsKK30KKwor
aW50IGdldF9saW5lX2xlbmd0aChjb25zdCBjaGFyICpsaW5lKQoreworCWludCByZXMgPSAwOwor
CXdoaWxlICgqbGluZSAhPSAnXDAnICYmICpsaW5lICE9ICdcbicpIHsKKwkJbGluZSsrOworCQly
ZXMrKzsKKwl9CisJcmV0dXJuIHJlczsKK30KKworLyogcHJpbnQgYWxsIGxpbmVzIHRvIHRoZSB3
aW5kb3cuICovCit2b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0
KQoreworCWludCB4LCB5OworCWludCB0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRleHQpOwor
CWludCBpOworCisJZ2V0bWF4eXgod2luLCB5LCB4KTsKKwkvKiBkbyBub3QgZ28gb3ZlciBlbmQg
b2YgbGluZSAqLworCXRvdGFsX2xpbmVzID0gbWluKHRvdGFsX2xpbmVzLCB5KTsKKwlmb3IgKGkg
PSAwOyBpIDwgdG90YWxfbGluZXM7IGkrKykgeworCQljaGFyIHRtcFt4KzEwXTsKKwkJY29uc3Qg
Y2hhciAqbGluZSA9IGdldF9saW5lKHRleHQsIGkpOworCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVu
Z3RoKGxpbmUpOworCQlzdHJuY3B5KHRtcCwgbGluZSwgbWluKGxlbiwgeCkpOworCQl0bXBbbGVu
XSA9ICdcMCc7CisJCW12d3ByaW50dyh3aW4sIGksIDAsICIlcyIsIHRtcCk7CisJfQorfQorCisv
KiBnZXQgdGhlIG1lc3NhZ2UsIGFuZCBidXR0b25zLgorICogZWFjaCBidXR0b24gbXVzdCBiZSBh
IGNoYXIqCisgKiByZXR1cm4gdGhlIHNlbGVjdGVkIGJ1dHRvbgorICoKKyAqIHRoaXMgZGlhbG9n
IGlzIHVzZWQgZm9yIDIgZGlmZmVyZW50IHRoaW5nczoKKyAqIDEpIHNob3cgYSB0ZXh0IGJveCwg
bm8gYnV0dG9ucy4KKyAqIDIpIHNob3cgYSBkaWFsb2csIHdpdGggaG9yaXpvbnRhbCBidXR0b25z
CisgKi8KK2ludCBidG5fZGlhbG9nKFdJTkRPVyAqbWFpbl93aW5kb3csIGNvbnN0IGNoYXIgKm1z
ZywgaW50IGJ0bl9udW0sIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKmJ0bjsKKwlpbnQg
YnRuc193aWR0aCA9IDA7CisJaW50IG1zZ19saW5lcyA9IDA7CisJaW50IG1zZ193aWR0aCA9IDA7
CisJaW50IHRvdGFsX3dpZHRoOworCWludCB3aW5fcm93cyA9IDA7CisJV0lORE9XICp3aW47CisJ
V0lORE9XICptc2dfd2luOworCVdJTkRPVyAqbWVudV93aW47CisJTUVOVSAqbWVudTsKKwlJVEVN
ICpidG5zW2J0bl9udW0rMV07CisJaW50IGksIHgsIHk7CisJaW50IHJlcyA9IC0xOworCisKKwl2
YV9zdGFydChhcCwgYnRuX251bSk7CisJZm9yIChpID0gMDsgaSA8IGJ0bl9udW07IGkrKykgewor
CQlidG4gPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCWJ0bnNbaV0gPSBuZXdfaXRlbShidG4sICIi
KTsKKwkJYnRuc193aWR0aCArPSBzdHJsZW4oYnRuKSsxOworCX0KKwl2YV9lbmQoYXApOworCWJ0
bnNbYnRuX251bV0gPSBOVUxMOworCisJLyogZmluZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAq
LworCW1zZ19saW5lcyA9IGdldF9saW5lX25vKG1zZyk7CisJZm9yIChpID0gMDsgaSA8IG1zZ19s
aW5lczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGluZShtc2csIGkpOworCQlp
bnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3RoKGxpbmUpOworCQlpZiAobXNnX3dpZHRoIDwgbGVuKQor
CQkJbXNnX3dpZHRoID0gbGVuOworCX0KKworCXRvdGFsX3dpZHRoID0gbWF4KG1zZ193aWR0aCwg
YnRuc193aWR0aCk7CisJLyogcGxhY2UgZGlhbG9nIGluIG1pZGRsZSBvZiBzY3JlZW4gKi8KKwl5
ID0gKGdldG1heHkoc3Rkc2NyKS0obXNnX2xpbmVzKzQpKS8yOworCXggPSAoZ2V0bWF4eChzdGRz
Y3IpLSh0b3RhbF93aWR0aCs0KSkvMjsKKworCisJLyogY3JlYXRlIHRoZSB3aW5kb3dzICovCisJ
aWYgKGJ0bl9udW0gPiAwKQorCQl3aW5fcm93cyA9IG1zZ19saW5lcys0OworCWVsc2UKKwkJd2lu
X3Jvd3MgPSBtc2dfbGluZXMrMjsKKworCXdpbiA9IG5ld3dpbih3aW5fcm93cywgdG90YWxfd2lk
dGgrNCwgeSwgeCk7CisJa2V5cGFkKHdpbiwgVFJVRSk7CisJbWVudV93aW4gPSBkZXJ3aW4od2lu
LCAxLCBidG5zX3dpZHRoLCB3aW5fcm93cy0yLAorCQkJMSsodG90YWxfd2lkdGgrMi1idG5zX3dp
ZHRoKS8yKTsKKwltZW51ID0gbmV3X21lbnUoYnRucyk7CisJbXNnX3dpbiA9IGRlcndpbih3aW4s
IHdpbl9yb3dzLTIsIG1zZ193aWR0aCwgMSwKKwkJCTErKHRvdGFsX3dpZHRoKzItbXNnX3dpZHRo
KS8yKTsKKworCXNldF9tZW51X2ZvcmUobWVudSwgYXR0cmlidXRlc1tESUFMT0dfTUVOVV9GT1JF
XSk7CisJc2V0X21lbnVfYmFjayhtZW51LCBhdHRyaWJ1dGVzW0RJQUxPR19NRU5VX0JBQ0tdKTsK
KworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJpYnV0ZXNbRElBTE9HX0JPWF0pOworCWJveCh3
aW4sIDAsIDApOworCisJLyogcHJpbnQgbWVzc2FnZSAqLworCSh2b2lkKSB3YXR0cnNldChtc2df
d2luLCBhdHRyaWJ1dGVzW0RJQUxPR19URVhUXSk7CisJZmlsbF93aW5kb3cobXNnX3dpbiwgbXNn
KTsKKworCXNldF9tZW51X3dpbihtZW51LCB3aW4pOworCXNldF9tZW51X3N1YihtZW51LCBtZW51
X3dpbik7CisJc2V0X21lbnVfZm9ybWF0KG1lbnUsIDEsIGJ0bl9udW0pOworCW1lbnVfb3B0c19v
ZmYobWVudSwgT19TSE9XREVTQyk7CisJbWVudV9vcHRzX29mZihtZW51LCBPX1NIT1dNQVRDSCk7
CisJbWVudV9vcHRzX29uKG1lbnUsIE9fT05FVkFMVUUpOworCW1lbnVfb3B0c19vbihtZW51LCBP
X05PTkNZQ0xJQyk7CisJc2V0X21lbnVfbWFyayhtZW51LCAiIik7CisJcG9zdF9tZW51KG1lbnUp
OworCisKKwl0b3VjaHdpbih3aW4pOworCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cp
OworCXdoaWxlICgocmVzID0gd2dldGNoKHdpbikpKSB7CisJCXN3aXRjaCAocmVzKSB7CisJCWNh
c2UgS0VZX0xFRlQ6CisJCQltZW51X2RyaXZlcihtZW51LCBSRVFfTEVGVF9JVEVNKTsKKwkJCWJy
ZWFrOworCQljYXNlIEtFWV9SSUdIVDoKKwkJCW1lbnVfZHJpdmVyKG1lbnUsIFJFUV9SSUdIVF9J
VEVNKTsKKwkJCWJyZWFrOworCQljYXNlIDEwOiAvKiBFTlRFUiAqLworCQljYXNlIDI3OiAvKiBF
U0NBUEUgKi8KKwkJY2FzZSAnICc6CisJCWNhc2UgS0VZX0YoRl9CQUNLKToKKwkJY2FzZSBLRVlf
RihGX0VYSVQpOgorCQkJYnJlYWs7CisJCX0KKwkJdG91Y2h3aW4od2luKTsKKwkJcmVmcmVzaF9h
bGxfd2luZG93cyhtYWluX3dpbmRvdyk7CisKKwkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0gJyAn
KSB7CisJCQlyZXMgPSBpdGVtX2luZGV4KGN1cnJlbnRfaXRlbShtZW51KSk7CisJCQlicmVhazsK
KwkJfSBlbHNlIGlmIChyZXMgPT0gMjcgfHwgcmVzID09IEtFWV9GKEZfQkFDSykgfHwKKwkJCQly
ZXMgPT0gS0VZX0YoRl9FWElUKSkgeworCQkJcmVzID0gS0VZX0VYSVQ7CisJCQlicmVhazsKKwkJ
fQorCX0KKworCXVucG9zdF9tZW51KG1lbnUpOworCWZyZWVfbWVudShtZW51KTsKKwlmb3IgKGkg
PSAwOyBpIDwgYnRuX251bTsgaSsrKQorCQlmcmVlX2l0ZW0oYnRuc1tpXSk7CisKKwlkZWx3aW4o
d2luKTsKKwlyZXR1cm4gcmVzOworfQorCitpbnQgZGlhbG9nX2lucHV0Ym94KFdJTkRPVyAqbWFp
bl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsCisJCWNv
bnN0IGNoYXIgKmluaXQsIGNoYXIgKipyZXN1bHRwLCBpbnQgKnJlc3VsdF9sZW4pCit7CisJaW50
IHByb21wdF9saW5lcyA9IDA7CisJaW50IHByb21wdF93aWR0aCA9IDA7CisJV0lORE9XICp3aW47
CisJV0lORE9XICpwcm9tcHRfd2luOworCVdJTkRPVyAqZm9ybV93aW47CisJUEFORUwgKnBhbmVs
OworCWludCBpLCB4LCB5LCBsaW5lcywgY29sdW1ucywgd2luX2xpbmVzLCB3aW5fY29sczsKKwlp
bnQgcmVzID0gLTE7CisJaW50IGN1cnNvcl9wb3NpdGlvbiA9IHN0cmxlbihpbml0KTsKKwlpbnQg
Y3Vyc29yX2Zvcm1fd2luOworCWNoYXIgKnJlc3VsdCA9ICpyZXN1bHRwOworCisJZ2V0bWF4eXgo
c3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7CisKKwlpZiAoc3RybGVuKGluaXQpKzEgPiAqcmVzdWx0
X2xlbikgeworCQkqcmVzdWx0X2xlbiA9IHN0cmxlbihpbml0KSsxOworCQkqcmVzdWx0cCA9IHJl
c3VsdCA9IHhyZWFsbG9jKHJlc3VsdCwgKnJlc3VsdF9sZW4pOworCX0KKworCS8qIGZpbmQgdGhl
IHdpZGVzdCBsaW5lIG9mIG1zZzogKi8KKwlwcm9tcHRfbGluZXMgPSBnZXRfbGluZV9ubyhwcm9t
cHQpOworCWZvciAoaSA9IDA7IGkgPCBwcm9tcHRfbGluZXM7IGkrKykgeworCQljb25zdCBjaGFy
ICpsaW5lID0gZ2V0X2xpbmUocHJvbXB0LCBpKTsKKwkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0
aChsaW5lKTsKKwkJcHJvbXB0X3dpZHRoID0gbWF4KHByb21wdF93aWR0aCwgbGVuKTsKKwl9CisK
KwlpZiAodGl0bGUpCisJCXByb21wdF93aWR0aCA9IG1heChwcm9tcHRfd2lkdGgsIHN0cmxlbih0
aXRsZSkpOworCisJd2luX2xpbmVzID0gbWluKHByb21wdF9saW5lcys2LCBsaW5lcy0yKTsKKwl3
aW5fY29scyA9IG1pbihwcm9tcHRfd2lkdGgrNywgY29sdW1ucy0yKTsKKwlwcm9tcHRfbGluZXMg
PSBtYXgod2luX2xpbmVzLTYsIDApOworCXByb21wdF93aWR0aCA9IG1heCh3aW5fY29scy03LCAw
KTsKKworCS8qIHBsYWNlIGRpYWxvZyBpbiBtaWRkbGUgb2Ygc2NyZWVuICovCisJeSA9IChsaW5l
cy13aW5fbGluZXMpLzI7CisJeCA9IChjb2x1bW5zLXdpbl9jb2xzKS8yOworCisJc3RybmNweShy
ZXN1bHQsIGluaXQsICpyZXN1bHRfbGVuKTsKKworCS8qIGNyZWF0ZSB0aGUgd2luZG93cyAqLwor
CXdpbiA9IG5ld3dpbih3aW5fbGluZXMsIHdpbl9jb2xzLCB5LCB4KTsKKwlwcm9tcHRfd2luID0g
ZGVyd2luKHdpbiwgcHJvbXB0X2xpbmVzKzEsIHByb21wdF93aWR0aCwgMiwgMik7CisJZm9ybV93
aW4gPSBkZXJ3aW4od2luLCAxLCBwcm9tcHRfd2lkdGgsIHByb21wdF9saW5lcyszLCAyKTsKKwlr
ZXlwYWQoZm9ybV93aW4sIFRSVUUpOworCisJKHZvaWQpIHdhdHRyc2V0KGZvcm1fd2luLCBhdHRy
aWJ1dGVzW0lOUFVUX0ZJRUxEXSk7CisKKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1dGVz
W0lOUFVUX0JPWF0pOworCWJveCh3aW4sIDAsIDApOworCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0
dHJpYnV0ZXNbSU5QVVRfSEVBRElOR10pOworCWlmICh0aXRsZSkKKwkJbXZ3cHJpbnR3KHdpbiwg
MCwgMywgIiVzIiwgdGl0bGUpOworCisJLyogcHJpbnQgbWVzc2FnZSAqLworCSh2b2lkKSB3YXR0
cnNldChwcm9tcHRfd2luLCBhdHRyaWJ1dGVzW0lOUFVUX1RFWFRdKTsKKwlmaWxsX3dpbmRvdyhw
cm9tcHRfd2luLCBwcm9tcHQpOworCisJbXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAiJSpzIiwg
cHJvbXB0X3dpZHRoLCAiICIpOworCWN1cnNvcl9mb3JtX3dpbiA9IG1pbihjdXJzb3JfcG9zaXRp
b24sIHByb21wdF93aWR0aC0xKTsKKwltdndwcmludHcoZm9ybV93aW4sIDAsIDAsICIlcyIsCisJ
CSAgcmVzdWx0ICsgY3Vyc29yX3Bvc2l0aW9uLWN1cnNvcl9mb3JtX3dpbik7CisKKwkvKiBjcmVh
dGUgcGFuZWxzICovCisJcGFuZWwgPSBuZXdfcGFuZWwod2luKTsKKworCS8qIHNob3cgdGhlIGN1
cnNvciAqLworCWN1cnNfc2V0KDEpOworCisJdG91Y2h3aW4od2luKTsKKwlyZWZyZXNoX2FsbF93
aW5kb3dzKG1haW5fd2luZG93KTsKKwl3aGlsZSAoKHJlcyA9IHdnZXRjaChmb3JtX3dpbikpKSB7
CisJCWludCBsZW4gPSBzdHJsZW4ocmVzdWx0KTsKKwkJc3dpdGNoIChyZXMpIHsKKwkJY2FzZSAx
MDogLyogRU5URVIgKi8KKwkJY2FzZSAyNzogLyogRVNDQVBFICovCisJCWNhc2UgS0VZX0YoRl9I
RUxQKToKKwkJY2FzZSBLRVlfRihGX0VYSVQpOgorCQljYXNlIEtFWV9GKEZfQkFDSyk6CisJCQli
cmVhazsKKwkJY2FzZSA4OiAgIC8qIF5IICovCisJCWNhc2UgMTI3OiAvKiBePyAqLworCQljYXNl
IEtFWV9CQUNLU1BBQ0U6CisJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID4gMCkgeworCQkJCW1lbW1v
dmUoJnJlc3VsdFtjdXJzb3JfcG9zaXRpb24tMV0sCisJCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3Np
dGlvbl0sCisJCQkJCQlsZW4tY3Vyc29yX3Bvc2l0aW9uKzEpOworCQkJCWN1cnNvcl9wb3NpdGlv
bi0tOworCQkJCWN1cnNvcl9mb3JtX3dpbi0tOworCQkJCWxlbi0tOworCQkJfQorCQkJYnJlYWs7
CisJCWNhc2UgS0VZX0RDOgorCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA+PSAwICYmIGN1cnNvcl9w
b3NpdGlvbiA8IGxlbikgeworCQkJCW1lbW1vdmUoJnJlc3VsdFtjdXJzb3JfcG9zaXRpb25dLAor
CQkJCQkJJnJlc3VsdFtjdXJzb3JfcG9zaXRpb24rMV0sCisJCQkJCQlsZW4tY3Vyc29yX3Bvc2l0
aW9uKzEpOworCQkJCWxlbi0tOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgS0VZX1VQOgorCQlj
YXNlIEtFWV9SSUdIVDoKKwkJCWlmIChjdXJzb3JfcG9zaXRpb24gPCBsZW4pIHsKKwkJCQljdXJz
b3JfcG9zaXRpb24rKzsKKwkJCQljdXJzb3JfZm9ybV93aW4rKzsKKwkJCX0KKwkJCWJyZWFrOwor
CQljYXNlIEtFWV9ET1dOOgorCQljYXNlIEtFWV9MRUZUOgorCQkJaWYgKGN1cnNvcl9wb3NpdGlv
biA+IDApIHsKKwkJCQljdXJzb3JfcG9zaXRpb24tLTsKKwkJCQljdXJzb3JfZm9ybV93aW4tLTsK
KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIEtFWV9IT01FOgorCQkJY3Vyc29yX3Bvc2l0aW9uID0g
MDsKKwkJCWN1cnNvcl9mb3JtX3dpbiA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRU5EOgor
CQkJY3Vyc29yX3Bvc2l0aW9uID0gbGVuOworCQkJY3Vyc29yX2Zvcm1fd2luID0gbWluKGN1cnNv
cl9wb3NpdGlvbiwgcHJvbXB0X3dpZHRoLTEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlp
ZiAoKGlzZ3JhcGgocmVzKSB8fCBpc3NwYWNlKHJlcykpKSB7CisJCQkJLyogb25lIGZvciBuZXcg
Y2hhciwgb25lIGZvciAnXDAnICovCisJCQkJaWYgKGxlbisyID4gKnJlc3VsdF9sZW4pIHsKKwkJ
CQkJKnJlc3VsdF9sZW4gPSBsZW4rMjsKKwkJCQkJKnJlc3VsdHAgPSByZXN1bHQgPSByZWFsbG9j
KHJlc3VsdCwKKwkJCQkJCQkJKnJlc3VsdF9sZW4pOworCQkJCX0KKwkJCQkvKiBpbnNlcnQgdGhl
IGNoYXIgYXQgdGhlIHByb3BlciBwb3NpdGlvbiAqLworCQkJCW1lbW1vdmUoJnJlc3VsdFtjdXJz
b3JfcG9zaXRpb24rMV0sCisJCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0sCisJCQkJCQls
ZW4tY3Vyc29yX3Bvc2l0aW9uKzEpOworCQkJCXJlc3VsdFtjdXJzb3JfcG9zaXRpb25dID0gcmVz
OworCQkJCWN1cnNvcl9wb3NpdGlvbisrOworCQkJCWN1cnNvcl9mb3JtX3dpbisrOworCQkJCWxl
bisrOworCQkJfSBlbHNlIHsKKwkJCQltdnByaW50dygwLCAwLCAidW5rbm93biBrZXk6ICVkXG4i
LCByZXMpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGN1cnNvcl9mb3JtX3dpbiA8IDAp
CisJCQljdXJzb3JfZm9ybV93aW4gPSAwOworCQllbHNlIGlmIChjdXJzb3JfZm9ybV93aW4gPiBw
cm9tcHRfd2lkdGgtMSkKKwkJCWN1cnNvcl9mb3JtX3dpbiA9IHByb21wdF93aWR0aC0xOworCisJ
CXdtb3ZlKGZvcm1fd2luLCAwLCAwKTsKKwkJd2NscnRvZW9sKGZvcm1fd2luKTsKKwkJbXZ3cHJp
bnR3KGZvcm1fd2luLCAwLCAwLCAiJSpzIiwgcHJvbXB0X3dpZHRoLCAiICIpOworCQltdndwcmlu
dHcoZm9ybV93aW4sIDAsIDAsICIlcyIsCisJCQlyZXN1bHQgKyBjdXJzb3JfcG9zaXRpb24tY3Vy
c29yX2Zvcm1fd2luKTsKKwkJd21vdmUoZm9ybV93aW4sIDAsIGN1cnNvcl9mb3JtX3dpbik7CisJ
CXRvdWNod2luKHdpbik7CisJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOworCisJ
CWlmIChyZXMgPT0gMTApIHsKKwkJCXJlcyA9IDA7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChy
ZXMgPT0gMjcgfHwgcmVzID09IEtFWV9GKEZfQkFDSykgfHwKKwkJCQlyZXMgPT0gS0VZX0YoRl9F
WElUKSkgeworCQkJcmVzID0gS0VZX0VYSVQ7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmIChyZXMg
PT0gS0VZX0YoRl9IRUxQKSkgeworCQkJcmVzID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJ
LyogaGlkZSB0aGUgY3Vyc29yICovCisJY3Vyc19zZXQoMCk7CisJZGVsX3BhbmVsKHBhbmVsKTsK
KwlkZWx3aW4ocHJvbXB0X3dpbik7CisJZGVsd2luKGZvcm1fd2luKTsKKwlkZWx3aW4od2luKTsK
KwlyZXR1cm4gcmVzOworfQorCisvKiByZWZyZXNoIGFsbCB3aW5kb3dzIGluIHRoZSBjb3JyZWN0
IG9yZGVyICovCit2b2lkIHJlZnJlc2hfYWxsX3dpbmRvd3MoV0lORE9XICptYWluX3dpbmRvdykK
K3sKKwl1cGRhdGVfcGFuZWxzKCk7CisJdG91Y2h3aW4obWFpbl93aW5kb3cpOworCXJlZnJlc2go
KTsKK30KKworLyogbGF5bWFuJ3Mgc2Nyb2xsYWJsZSB3aW5kb3cuLi4gKi8KK3ZvaWQgc2hvd19z
Y3JvbGxfd2luKFdJTkRPVyAqbWFpbl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxlLAorCQlj
b25zdCBjaGFyICp0ZXh0KQoreworCWludCByZXM7CisJaW50IHRvdGFsX2xpbmVzID0gZ2V0X2xp
bmVfbm8odGV4dCk7CisJaW50IHgsIHksIGxpbmVzLCBjb2x1bW5zOworCWludCBzdGFydF94ID0g
MCwgc3RhcnRfeSA9IDA7CisJaW50IHRleHRfbGluZXMgPSAwLCB0ZXh0X2NvbHMgPSAwOworCWlu
dCB0b3RhbF9jb2xzID0gMDsKKwlpbnQgd2luX2NvbHMgPSAwOworCWludCB3aW5fbGluZXMgPSAw
OworCWludCBpID0gMDsKKwlXSU5ET1cgKndpbjsKKwlXSU5ET1cgKnBhZDsKKwlQQU5FTCAqcGFu
ZWw7CisKKwlnZXRtYXh5eChzdGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsKKworCS8qIGZpbmQgdGhl
IHdpZGVzdCBsaW5lIG9mIG1zZzogKi8KKwl0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRleHQp
OworCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9saW5lczsgaSsrKSB7CisJCWNvbnN0IGNoYXIgKmxp
bmUgPSBnZXRfbGluZSh0ZXh0LCBpKTsKKwkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5l
KTsKKwkJdG90YWxfY29scyA9IG1heCh0b3RhbF9jb2xzLCBsZW4rMik7CisJfQorCisJLyogY3Jl
YXRlIHRoZSBwYWQgKi8KKwlwYWQgPSBuZXdwYWQodG90YWxfbGluZXMrMTAsIHRvdGFsX2NvbHMr
MTApOworCSh2b2lkKSB3YXR0cnNldChwYWQsIGF0dHJpYnV0ZXNbU0NST0xMV0lOX1RFWFRdKTsK
KwlmaWxsX3dpbmRvdyhwYWQsIHRleHQpOworCisJd2luX2xpbmVzID0gbWluKHRvdGFsX2xpbmVz
KzQsIGxpbmVzLTIpOworCXdpbl9jb2xzID0gbWluKHRvdGFsX2NvbHMrMiwgY29sdW1ucy0yKTsK
Kwl0ZXh0X2xpbmVzID0gbWF4KHdpbl9saW5lcy00LCAwKTsKKwl0ZXh0X2NvbHMgPSBtYXgod2lu
X2NvbHMtMiwgMCk7CisKKwkvKiBwbGFjZSB3aW5kb3cgaW4gbWlkZGxlIG9mIHNjcmVlbiAqLwor
CXkgPSAobGluZXMtd2luX2xpbmVzKS8yOworCXggPSAoY29sdW1ucy13aW5fY29scykvMjsKKwor
CXdpbiA9IG5ld3dpbih3aW5fbGluZXMsIHdpbl9jb2xzLCB5LCB4KTsKKwlrZXlwYWQod2luLCBU
UlVFKTsKKwkvKiBzaG93IHRoZSBoZWxwIGluIHRoZSBoZWxwIHdpbmRvdywgYW5kIHNob3cgdGhl
IGhlbHAgcGFuZWwgKi8KKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1dGVzW1NDUk9MTFdJ
Tl9CT1hdKTsKKwlib3god2luLCAwLCAwKTsKKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1
dGVzW1NDUk9MTFdJTl9IRUFESU5HXSk7CisJbXZ3cHJpbnR3KHdpbiwgMCwgMywgIiAlcyAiLCB0
aXRsZSk7CisJcGFuZWwgPSBuZXdfcGFuZWwod2luKTsKKworCS8qIGhhbmRsZSBzY3JvbGxpbmcg
Ki8KKwlkbyB7CisKKwkJY29weXdpbihwYWQsIHdpbiwgc3RhcnRfeSwgc3RhcnRfeCwgMiwgMiwg
dGV4dF9saW5lcywKKwkJCQl0ZXh0X2NvbHMsIDApOworCQlwcmludF9pbl9taWRkbGUod2luLAor
CQkJCXRleHRfbGluZXMrMiwKKwkJCQkwLAorCQkJCXRleHRfY29scywKKwkJCQkiPE9LPiIsCisJ
CQkJYXR0cmlidXRlc1tESUFMT0dfTUVOVV9GT1JFXSk7CisJCXdyZWZyZXNoKHdpbik7CisKKwkJ
cmVzID0gd2dldGNoKHdpbik7CisJCXN3aXRjaCAocmVzKSB7CisJCWNhc2UgS0VZX05QQUdFOgor
CQljYXNlICcgJzoKKwkJY2FzZSAnZCc6CisJCQlzdGFydF95ICs9IHRleHRfbGluZXMtMjsKKwkJ
CWJyZWFrOworCQljYXNlIEtFWV9QUEFHRToKKwkJY2FzZSAndSc6CisJCQlzdGFydF95IC09IHRl
eHRfbGluZXMrMjsKKwkJCWJyZWFrOworCQljYXNlIEtFWV9IT01FOgorCQkJc3RhcnRfeSA9IDA7
CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRU5EOgorCQkJc3RhcnRfeSA9IHRvdGFsX2xpbmVzLXRl
eHRfbGluZXM7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfRE9XTjoKKwkJY2FzZSAnaic6CisJCQlz
dGFydF95Kys7CisJCQlicmVhazsKKwkJY2FzZSBLRVlfVVA6CisJCWNhc2UgJ2snOgorCQkJc3Rh
cnRfeS0tOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX0xFRlQ6CisJCWNhc2UgJ2gnOgorCQkJc3Rh
cnRfeC0tOworCQkJYnJlYWs7CisJCWNhc2UgS0VZX1JJR0hUOgorCQljYXNlICdsJzoKKwkJCXN0
YXJ0X3grKzsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8
IHJlcyA9PSAncScgfHwKKwkJCXJlcyA9PSBLRVlfRihGX0hFTFApIHx8IHJlcyA9PSBLRVlfRihG
X0JBQ0spIHx8CisJCQlyZXMgPT0gS0VZX0YoRl9FWElUKSkKKwkJCWJyZWFrOworCQlpZiAoc3Rh
cnRfeSA8IDApCisJCQlzdGFydF95ID0gMDsKKwkJaWYgKHN0YXJ0X3kgPj0gdG90YWxfbGluZXMt
dGV4dF9saW5lcykKKwkJCXN0YXJ0X3kgPSB0b3RhbF9saW5lcy10ZXh0X2xpbmVzOworCQlpZiAo
c3RhcnRfeCA8IDApCisJCQlzdGFydF94ID0gMDsKKwkJaWYgKHN0YXJ0X3ggPj0gdG90YWxfY29s
cy10ZXh0X2NvbHMpCisJCQlzdGFydF94ID0gdG90YWxfY29scy10ZXh0X2NvbHM7CisJfSB3aGls
ZSAocmVzKTsKKworCWRlbF9wYW5lbChwYW5lbCk7CisJZGVsd2luKHdpbik7CisJcmVmcmVzaF9h
bGxfd2luZG93cyhtYWluX3dpbmRvdyk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcv
bmNvbmYuaCBiL3N1cHBvcnQva2NvbmZpZy9uY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmZhNTI0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcv
bmNvbmYuaApAQCAtMCwwICsxLDkyIEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMCAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIgVHphY2hhciA8bmlyLnR6YWNo
YXJAZ21haWwuY29tPgorICoKKyAqIERlcml2ZWQgZnJvbSBtZW51Y29uZmlnLgorICovCisKKyNp
bmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4K
KyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl
IDxuY3Vyc2VzLmg+CisjaW5jbHVkZSA8bWVudS5oPgorI2luY2x1ZGUgPHBhbmVsLmg+CisjaW5j
bHVkZSA8Zm9ybS5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+Cisj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2RlZmluZSBtYXgoYSwgYikgKHtcCisJCXR5cGVvZihh
KSBfYSA9IGE7XAorCQl0eXBlb2YoYikgX2IgPSBiO1wKKwkJX2EgPiBfYiA/IF9hIDogX2I7IH0p
CisKKyNkZWZpbmUgbWluKGEsIGIpICh7XAorCQl0eXBlb2YoYSkgX2EgPSBhO1wKKwkJdHlwZW9m
KGIpIF9iID0gYjtcCisJCV9hIDwgX2IgPyBfYSA6IF9iOyB9KQorCit0eXBlZGVmIGVudW0gewor
CU5PUk1BTCA9IDEsCisJTUFJTl9IRUFESU5HLAorCU1BSU5fTUVOVV9CT1gsCisJTUFJTl9NRU5V
X0ZPUkUsCisJTUFJTl9NRU5VX0JBQ0ssCisJTUFJTl9NRU5VX0dSRVksCisJTUFJTl9NRU5VX0hF
QURJTkcsCisJU0NST0xMV0lOX1RFWFQsCisJU0NST0xMV0lOX0hFQURJTkcsCisJU0NST0xMV0lO
X0JPWCwKKwlESUFMT0dfVEVYVCwKKwlESUFMT0dfTUVOVV9GT1JFLAorCURJQUxPR19NRU5VX0JB
Q0ssCisJRElBTE9HX0JPWCwKKwlJTlBVVF9CT1gsCisJSU5QVVRfSEVBRElORywKKwlJTlBVVF9U
RVhULAorCUlOUFVUX0ZJRUxELAorCUZVTkNUSU9OX1RFWFQsCisJRlVOQ1RJT05fSElHSExJR0hU
LAorCUFUVFJfTUFYCit9IGF0dHJpYnV0ZXNfdDsKK2V4dGVybiBhdHRyaWJ1dGVzX3QgYXR0cmli
dXRlc1tdOworCit0eXBlZGVmIGVudW0geworCUZfSEVMUCA9IDEsCisJRl9TWU1CT0wgPSAyLAor
CUZfSU5TVFMgPSAzLAorCUZfQ09ORiA9IDQsCisJRl9CQUNLID0gNSwKKwlGX1NBVkUgPSA2LAor
CUZfTE9BRCA9IDcsCisJRl9TRUFSQ0ggPSA4LAorCUZfRVhJVCA9IDksCit9IGZ1bmN0aW9uX2tl
eTsKKwordm9pZCBzZXRfY29sb3JzKHZvaWQpOworCisvKiB0aGlzIGNoYW5nZXMgdGhlIHdpbmRv
d3MgYXR0cmlidXRlcyAhISEgKi8KK3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLAor
CQlpbnQgc3RhcnR5LAorCQlpbnQgc3RhcnR4LAorCQlpbnQgd2lkdGgsCisJCWNvbnN0IGNoYXIg
KnN0cmluZywKKwkJY2h0eXBlIGNvbG9yKTsKK2ludCBnZXRfbGluZV9sZW5ndGgoY29uc3QgY2hh
ciAqbGluZSk7CitpbnQgZ2V0X2xpbmVfbm8oY29uc3QgY2hhciAqdGV4dCk7Citjb25zdCBjaGFy
ICpnZXRfbGluZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgbGluZV9ubyk7Cit2b2lkIGZpbGxfd2lu
ZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KTsKK2ludCBidG5fZGlhbG9nKFdJTkRP
VyAqbWFpbl93aW5kb3csIGNvbnN0IGNoYXIgKm1zZywgaW50IGJ0bl9udW0sIC4uLik7CitpbnQg
ZGlhbG9nX2lucHV0Ym94KFdJTkRPVyAqbWFpbl93aW5kb3csCisJCWNvbnN0IGNoYXIgKnRpdGxl
LCBjb25zdCBjaGFyICpwcm9tcHQsCisJCWNvbnN0IGNoYXIgKmluaXQsIGNoYXIgKipyZXN1bHRw
LCBpbnQgKnJlc3VsdF9sZW4pOwordm9pZCByZWZyZXNoX2FsbF93aW5kb3dzKFdJTkRPVyAqbWFp
bl93aW5kb3cpOwordm9pZCBzaG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywKKwkJ
Y29uc3QgY2hhciAqdGl0bGUsCisJCWNvbnN0IGNoYXIgKnRleHQpOwpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnL3BhcnNlci55IGIvc3VwcG9ydC9rY29uZmlnL3BhcnNlci55Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1NzAwZjgKLS0tIC9kZXYvbnVsbAorKysgYi9z
dXBwb3J0L2tjb25maWcvcGFyc2VyLnkKQEAgLTAsMCArMSw3MzEgQEAKKy8qIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu
IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorICovCisleworCisjaW5jbHVkZSA8Y3R5
cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKwor
I2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVi
dWcgJiAobWFzaykpIHByaW50ZihmbXQpCisKKyNkZWZpbmUgUFJJTlRECQkweDAwMDEKKyNkZWZp
bmUgREVCVUdfUEFSU0UJMHgwMDAyCisKK2ludCBjZGVidWcgPSBQUklOVEQ7CisKK3N0YXRpYyB2
b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqZXJyKTsKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29u
c3QgY2hhciAqZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAq
ZXJyLCAuLi4pOworc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oY29uc3QgY2hhciAqdG9rZW5u
YW1lLAorCQkJICAgY29uc3QgY2hhciAqZXhwZWN0ZWRfdG9rZW5uYW1lKTsKKworc3RydWN0IHN5
bWJvbCAqc3ltYm9sX2hhc2hbU1lNQk9MX0hBU0hTSVpFXTsKKworc3RhdGljIHN0cnVjdCBtZW51
ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5OworCislfQorCisldW5pb24KK3sKKwljaGFy
ICpzdHJpbmc7CisJc3RydWN0IHN5bWJvbCAqc3ltYm9sOworCXN0cnVjdCBleHByICpleHByOwor
CXN0cnVjdCBtZW51ICptZW51OworCWVudW0gc3ltYm9sX3R5cGUgdHlwZTsKKwllbnVtIHZhcmlh
YmxlX2ZsYXZvciBmbGF2b3I7Cit9CisKKyV0b2tlbiA8c3RyaW5nPiBUX0hFTFBURVhUCisldG9r
ZW4gPHN0cmluZz4gVF9XT1JECisldG9rZW4gPHN0cmluZz4gVF9XT1JEX1FVT1RFCisldG9rZW4g
VF9BTExOT0NPTkZJR19ZCisldG9rZW4gVF9CT09MCisldG9rZW4gVF9DSE9JQ0UKKyV0b2tlbiBU
X0NMT1NFX1BBUkVOCisldG9rZW4gVF9DT0xPTl9FUVVBTAorJXRva2VuIFRfQ09NTUVOVAorJXRv
a2VuIFRfQ09ORklHCisldG9rZW4gVF9ERUZBVUxUCisldG9rZW4gVF9ERUZDT05GSUdfTElTVAor
JXRva2VuIFRfREVGX0JPT0wKKyV0b2tlbiBUX0RFRl9UUklTVEFURQorJXRva2VuIFRfREVQRU5E
UworJXRva2VuIFRfRU5EQ0hPSUNFCisldG9rZW4gVF9FTkRJRgorJXRva2VuIFRfRU5ETUVOVQor
JXRva2VuIFRfSEVMUAorJXRva2VuIFRfSEVYCisldG9rZW4gVF9JRgorJXRva2VuIFRfSU1QTFkK
KyV0b2tlbiBUX0lOVAorJXRva2VuIFRfTUFJTk1FTlUKKyV0b2tlbiBUX01FTlUKKyV0b2tlbiBU
X01FTlVDT05GSUcKKyV0b2tlbiBUX01PRFVMRVMKKyV0b2tlbiBUX09OCisldG9rZW4gVF9PUEVO
X1BBUkVOCisldG9rZW4gVF9PUFRJT04KKyV0b2tlbiBUX09QVElPTkFMCisldG9rZW4gVF9QTFVT
X0VRVUFMCisldG9rZW4gVF9QUk9NUFQKKyV0b2tlbiBUX1JBTkdFCisldG9rZW4gVF9TRUxFQ1QK
KyV0b2tlbiBUX1NPVVJDRQorJXRva2VuIFRfU1RSSU5HCisldG9rZW4gVF9UUklTVEFURQorJXRv
a2VuIFRfVklTSUJMRQorJXRva2VuIFRfRU9MCisldG9rZW4gPHN0cmluZz4gVF9BU1NJR05fVkFM
CisKKyVsZWZ0IFRfT1IKKyVsZWZ0IFRfQU5ECislbGVmdCBUX0VRVUFMIFRfVU5FUVVBTAorJWxl
ZnQgVF9MRVNTIFRfTEVTU19FUVVBTCBUX0dSRUFURVIgVF9HUkVBVEVSX0VRVUFMCislbm9uYXNz
b2MgVF9OT1QKKworJXR5cGUgPHN0cmluZz4gcHJvbXB0CisldHlwZSA8c3ltYm9sPiBub25jb25z
dF9zeW1ib2wKKyV0eXBlIDxzeW1ib2w+IHN5bWJvbAorJXR5cGUgPHR5cGU+IHR5cGUgbG9naWNf
dHlwZSBkZWZhdWx0CisldHlwZSA8ZXhwcj4gZXhwcgorJXR5cGUgPGV4cHI+IGlmX2V4cHIKKyV0
eXBlIDxzdHJpbmc+IGVuZAorJXR5cGUgPG1lbnU+IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNl
X2VudHJ5CisldHlwZSA8c3RyaW5nPiB3b3JkX29wdCBhc3NpZ25fdmFsCisldHlwZSA8Zmxhdm9y
PiBhc3NpZ25fb3AKKworJWRlc3RydWN0b3IgeworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1p
c3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKKwkJJCQtPmZpbGUtPm5hbWUs
ICQkLT5saW5lbm8pOworCWlmIChjdXJyZW50X21lbnUgPT0gJCQpCisJCW1lbnVfZW5kX21lbnUo
KTsKK30gaWZfZW50cnkgbWVudV9lbnRyeSBjaG9pY2VfZW50cnkKKworJSUKK2lucHV0OiBtYWlu
bWVudV9zdG10IHN0bXRfbGlzdCB8IHN0bXRfbGlzdDsKKworLyogbWFpbm1lbnUgZW50cnkgKi8K
KworbWFpbm1lbnVfc3RtdDogVF9NQUlOTUVOVSBwcm9tcHQgVF9FT0wKK3sKKwltZW51X2FkZF9w
cm9tcHQoUF9NRU5VLCAkMiwgTlVMTCk7Cit9OworCitzdG10X2xpc3Q6CisJICAvKiBlbXB0eSAq
LworCXwgc3RtdF9saXN0IGNvbW1vbl9zdG10CisJfCBzdG10X2xpc3QgY2hvaWNlX3N0bXQKKwl8
IHN0bXRfbGlzdCBtZW51X3N0bXQKKwl8IHN0bXRfbGlzdCBUX1dPUkQgZXJyb3IgVF9FT0wJeyB6
Y29uZl9lcnJvcigidW5rbm93biBzdGF0ZW1lbnQgXCIlc1wiIiwgJDIpOyB9CisJfCBzdG10X2xp
c3QgZXJyb3IgVF9FT0wJCXsgemNvbmZfZXJyb3IoImludmFsaWQgc3RhdGVtZW50Iik7IH0KKzsK
KworY29tbW9uX3N0bXQ6CisJICBpZl9zdG10CisJfCBjb21tZW50X3N0bXQKKwl8IGNvbmZpZ19z
dG10CisJfCBtZW51Y29uZmlnX3N0bXQKKwl8IHNvdXJjZV9zdG10CisJfCBhc3NpZ25tZW50X3N0
bXQKKzsKKworLyogY29uZmlnL21lbnVjb25maWcgZW50cnkgKi8KKworY29uZmlnX2VudHJ5X3N0
YXJ0OiBUX0NPTkZJRyBub25jb25zdF9zeW1ib2wgVF9FT0wKK3sKKwkkMi0+ZmxhZ3MgfD0gU1lN
Qk9MX09QVElPTkFMOworCW1lbnVfYWRkX2VudHJ5KCQyKTsKKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQy
LT5uYW1lKTsKK307CisKK2NvbmZpZ19zdG10OiBjb25maWdfZW50cnlfc3RhcnQgY29uZmlnX29w
dGlvbl9saXN0Cit7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK21lbnVjb25maWdfZW50cnlf
c3RhcnQ6IFRfTUVOVUNPTkZJRyBub25jb25zdF9zeW1ib2wgVF9FT0wKK3sKKwkkMi0+ZmxhZ3Mg
fD0gU1lNQk9MX09QVElPTkFMOworCW1lbnVfYWRkX2VudHJ5KCQyKTsKKwlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpLCAkMi0+bmFtZSk7Cit9OworCittZW51Y29uZmlnX3N0bXQ6IG1lbnVjb25maWdfZW50
cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0Cit7CisJaWYgKGN1cnJlbnRfZW50cnktPnByb21w
dCkKKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0LT50eXBlID0gUF9NRU5VOworCWVsc2UKKwkJemNv
bmZwcmludCgid2FybmluZzogbWVudWNvbmZpZyBzdGF0ZW1lbnQgd2l0aG91dCBwcm9tcHQiKTsK
KwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUo
KSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY29uZmlnX29wdGlvbl9saXN0OgorCSAgLyogZW1w
dHkgKi8KKwl8IGNvbmZpZ19vcHRpb25fbGlzdCBjb25maWdfb3B0aW9uCisJfCBjb25maWdfb3B0
aW9uX2xpc3QgZGVwZW5kcworCXwgY29uZmlnX29wdGlvbl9saXN0IGhlbHAKKzsKKworY29uZmln
X29wdGlvbjogdHlwZSBwcm9tcHRfc3RtdF9vcHQgVF9FT0wKK3sKKwltZW51X3NldF90eXBlKCQx
KTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkJemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJJDEpOworfTsKKworY29uZmlnX29wdGlvbjogVF9Q
Uk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wKK3sKKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQs
ICQyLCAkMyk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9j
dXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKK2NvbmZpZ19vcHRpb246IGRlZmF1bHQg
ZXhwciBpZl9leHByIFRfRU9MCit7CisJbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICQyLCAkMyk7
CisJaWYgKCQxICE9IFNfVU5LTk9XTikKKwkJbWVudV9zZXRfdHlwZSgkMSk7CisJcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdCgldSlcbiIsCisJCXpjb25mX2N1cm5hbWUoKSwgemNv
bmZfbGluZW5vKCksCisJCSQxKTsKK307CisKK2NvbmZpZ19vcHRpb246IFRfU0VMRUNUIG5vbmNv
bnN0X3N5bWJvbCBpZl9leHByIFRfRU9MCit7CisJbWVudV9hZGRfc3ltYm9sKFBfU0VMRUNULCAk
MiwgJDMpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCitjb25maWdfb3B0aW9uOiBUX0lNUExZIG5v
bmNvbnN0X3N5bWJvbCBpZl9leHByIFRfRU9MCit7CisJbWVudV9hZGRfc3ltYm9sKFBfSU1QTFks
ICQyLCAkMyk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aW1wbHlcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY29uZmlnX29wdGlvbjogVF9SQU5HRSBz
eW1ib2wgc3ltYm9sIGlmX2V4cHIgVF9FT0wKK3sKKwltZW51X2FkZF9leHByKFBfUkFOR0UsIGV4
cHJfYWxsb2NfY29tcChFX1JBTkdFLCQyLCAkMyksICQ0KTsKKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpyYW5nZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9Owor
Citjb25maWdfb3B0aW9uOiBUX09QVElPTiBUX01PRFVMRVMgVF9FT0wKK3sKKwltZW51X2FkZF9v
cHRpb25fbW9kdWxlcygpOworfTsKKworY29uZmlnX29wdGlvbjogVF9PUFRJT04gVF9ERUZDT05G
SUdfTElTVCBUX0VPTAoreworCW1lbnVfYWRkX29wdGlvbl9kZWZjb25maWdfbGlzdCgpOworfTsK
KworY29uZmlnX29wdGlvbjogVF9PUFRJT04gVF9BTExOT0NPTkZJR19ZIFRfRU9MCit7CisJbWVu
dV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3koKTsKK307CisKKy8qIGNob2ljZSBlbnRyeSAqLwor
CitjaG9pY2U6IFRfQ0hPSUNFIHdvcmRfb3B0IFRfRU9MCit7CisJc3RydWN0IHN5bWJvbCAqc3lt
ID0gc3ltX2xvb2t1cCgkMiwgU1lNQk9MX0NIT0lDRSk7CisJc3ltLT5mbGFncyB8PSBTWU1CT0xf
Tk9fV1JJVEU7CisJbWVudV9hZGRfZW50cnkoc3ltKTsKKwltZW51X2FkZF9leHByKFBfQ0hPSUNF
LCBOVUxMLCBOVUxMKTsKKwlmcmVlKCQyKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpj
aG9pY2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfTsKKworY2hvaWNl
X2VudHJ5OiBjaG9pY2UgY2hvaWNlX29wdGlvbl9saXN0Cit7CisJJCQgPSBtZW51X2FkZF9tZW51
KCk7Cit9OworCitjaG9pY2VfZW5kOiBlbmQKK3sKKwlpZiAoemNvbmZfZW5kdG9rZW4oJDEsICJj
aG9pY2UiKSkgeworCQltZW51X2VuZF9tZW51KCk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOmVuZGNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJfQor
fTsKKworY2hvaWNlX3N0bXQ6IGNob2ljZV9lbnRyeSBjaG9pY2VfYmxvY2sgY2hvaWNlX2VuZAor
OworCitjaG9pY2Vfb3B0aW9uX2xpc3Q6CisJICAvKiBlbXB0eSAqLworCXwgY2hvaWNlX29wdGlv
bl9saXN0IGNob2ljZV9vcHRpb24KKwl8IGNob2ljZV9vcHRpb25fbGlzdCBkZXBlbmRzCisJfCBj
aG9pY2Vfb3B0aW9uX2xpc3QgaGVscAorOworCitjaG9pY2Vfb3B0aW9uOiBUX1BST01QVCBwcm9t
cHQgaWZfZXhwciBUX0VPTAoreworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgJDIsICQzKTsK
KwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOworfTsKKworY2hvaWNlX29wdGlvbjogbG9naWNfdHlwZSBwcm9tcHRf
c3RtdF9vcHQgVF9FT0wKK3sKKwltZW51X3NldF90eXBlKCQxKTsKKwlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkgICAgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSwgJDEpOworfTsKKworY2hvaWNlX29wdGlvbjogVF9PUFRJT05BTCBUX0VPTAorewor
CWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOworCXByaW50ZChE
RUJVR19QQVJTRSwgIiVzOiVkOm9wdGlvbmFsXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpKTsKK307CisKK2Nob2ljZV9vcHRpb246IFRfREVGQVVMVCBub25jb25zdF9zeW1ib2wg
aWZfZXhwciBUX0VPTAoreworCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsICQyLCAkMyk7CisJ
cHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxuIiwKKwkgICAgICAgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9OworCit0eXBlOgorCSAgbG9naWNfdHlwZQorCXwg
VF9JTlQJCQl7ICQkID0gU19JTlQ7IH0KKwl8IFRfSEVYCQkJeyAkJCA9IFNfSEVYOyB9CisJfCBU
X1NUUklORwkJeyAkJCA9IFNfU1RSSU5HOyB9CisKK2xvZ2ljX3R5cGU6CisJICBUX0JPT0wJCXsg
JCQgPSBTX0JPT0xFQU47IH0KKwl8IFRfVFJJU1RBVEUJCXsgJCQgPSBTX1RSSVNUQVRFOyB9CisK
K2RlZmF1bHQ6CisJICBUX0RFRkFVTFQJCXsgJCQgPSBTX1VOS05PV047IH0KKwl8IFRfREVGX0JP
T0wJCXsgJCQgPSBTX0JPT0xFQU47IH0KKwl8IFRfREVGX1RSSVNUQVRFCXsgJCQgPSBTX1RSSVNU
QVRFOyB9CisKK2Nob2ljZV9ibG9jazoKKwkgIC8qIGVtcHR5ICovCisJfCBjaG9pY2VfYmxvY2sg
Y29tbW9uX3N0bXQKKzsKKworLyogaWYgZW50cnkgKi8KKworaWZfZW50cnk6IFRfSUYgZXhwciBU
X0VPTAoreworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsKKwltZW51X2FkZF9lbnRyeShOVUxMKTsKKwltZW51X2FkZF9k
ZXAoJDIpOworCSQkID0gbWVudV9hZGRfbWVudSgpOworfTsKKworaWZfZW5kOiBlbmQKK3sKKwlp
ZiAoemNvbmZfZW5kdG9rZW4oJDEsICJpZiIpKSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJp
bnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kaWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZf
bGluZW5vKCkpOworCX0KK307CisKK2lmX3N0bXQ6IGlmX2VudHJ5IHN0bXRfbGlzdCBpZl9lbmQK
KzsKKworLyogbWVudSBlbnRyeSAqLworCittZW51OiBUX01FTlUgcHJvbXB0IFRfRU9MCit7CisJ
bWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5VTEwp
OworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOworfTsKKworbWVudV9lbnRyeTogbWVudSBtZW51X29wdGlvbl9saXN0
Cit7CisJJCQgPSBtZW51X2FkZF9tZW51KCk7Cit9OworCittZW51X2VuZDogZW5kCit7CisJaWYg
KHpjb25mX2VuZHRva2VuKCQxLCAibWVudSIpKSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJp
bnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29u
Zl9saW5lbm8oKSk7CisJfQorfTsKKworbWVudV9zdG10OiBtZW51X2VudHJ5IHN0bXRfbGlzdCBt
ZW51X2VuZAorOworCittZW51X29wdGlvbl9saXN0OgorCSAgLyogZW1wdHkgKi8KKwl8IG1lbnVf
b3B0aW9uX2xpc3QgdmlzaWJsZQorCXwgbWVudV9vcHRpb25fbGlzdCBkZXBlbmRzCis7CisKK3Nv
dXJjZV9zdG10OiBUX1NPVVJDRSBwcm9tcHQgVF9FT0wKK3sKKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQy
KTsKKwl6Y29uZl9uZXh0ZmlsZXMoJDIpOworCWZyZWUoJDIpOworfTsKKworLyogY29tbWVudCBl
bnRyeSAqLworCitjb21tZW50OiBUX0NPTU1FTlQgcHJvbXB0IFRfRU9MCit7CisJbWVudV9hZGRf
ZW50cnkoTlVMTCk7CisJbWVudV9hZGRfcHJvbXB0KFBfQ09NTUVOVCwgJDIsIE5VTEwpOworCXBy
aW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNv
bmZfbGluZW5vKCkpOworfTsKKworY29tbWVudF9zdG10OiBjb21tZW50IGNvbW1lbnRfb3B0aW9u
X2xpc3QKKzsKKworY29tbWVudF9vcHRpb25fbGlzdDoKKwkgIC8qIGVtcHR5ICovCisJfCBjb21t
ZW50X29wdGlvbl9saXN0IGRlcGVuZHMKKzsKKworLyogaGVscCBvcHRpb24gKi8KKworaGVscF9z
dGFydDogVF9IRUxQIFRfRU9MCit7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7CisJemNvbmZfc3RhcnRoZWxwKCk7
Cit9OworCitoZWxwOiBoZWxwX3N0YXJ0IFRfSEVMUFRFWFQKK3sKKwlpZiAoY3VycmVudF9lbnRy
eS0+aGVscCkgeworCQlmcmVlKGN1cnJlbnRfZW50cnktPmhlbHApOworCQl6Y29uZnByaW50KCJ3
YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBtb3JlIHRoYW4gb25lIGhlbHAgdGV4dCAtLSBvbmx5
IHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQiLAorCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5u
YW1lID86ICI8Y2hvaWNlPiIpOworCX0KKworCS8qIElzIHRoZSBoZWxwIHRleHQgZW1wdHkgb3Ig
YWxsIHdoaXRlc3BhY2U/ICovCisJaWYgKCQyW3N0cnNwbigkMiwgIiBcZlxuXHJcdFx2IildID09
ICdcMCcpCisJCXpjb25mcHJpbnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIGJsYW5rIGhl
bHAgdGV4dCIsCisJCQkgICBjdXJyZW50X2VudHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7
CisKKwljdXJyZW50X2VudHJ5LT5oZWxwID0gJDI7Cit9OworCisvKiBkZXBlbmRzIG9wdGlvbiAq
LworCitkZXBlbmRzOiBUX0RFUEVORFMgVF9PTiBleHByIFRfRU9MCit7CisJbWVudV9hZGRfZGVw
KCQzKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9j
dXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK307CisKKy8qIHZpc2liaWxpdHkgb3B0aW9uICov
Cit2aXNpYmxlOiBUX1ZJU0lCTEUgaWZfZXhwciBUX0VPTAoreworCW1lbnVfYWRkX3Zpc2liaWxp
dHkoJDIpOworfTsKKworLyogcHJvbXB0IHN0YXRlbWVudCAqLworCitwcm9tcHRfc3RtdF9vcHQ6
CisJICAvKiBlbXB0eSAqLworCXwgcHJvbXB0IGlmX2V4cHIKK3sKKwltZW51X2FkZF9wcm9tcHQo
UF9QUk9NUFQsICQxLCAkMik7Cit9OworCitwcm9tcHQ6CSAgVF9XT1JECisJfCBUX1dPUkRfUVVP
VEUKKzsKKworZW5kOgkgIFRfRU5ETUVOVSBUX0VPTAl7ICQkID0gIm1lbnUiOyB9CisJfCBUX0VO
RENIT0lDRSBUX0VPTAl7ICQkID0gImNob2ljZSI7IH0KKwl8IFRfRU5ESUYgVF9FT0wJCXsgJCQg
PSAiaWYiOyB9Cis7CisKK2lmX2V4cHI6ICAvKiBlbXB0eSAqLwkJCXsgJCQgPSBOVUxMOyB9CisJ
fCBUX0lGIGV4cHIJCQl7ICQkID0gJDI7IH0KKzsKKworZXhwcjoJICBzeW1ib2wJCQkJeyAkJCA9
IGV4cHJfYWxsb2Nfc3ltYm9sKCQxKTsgfQorCXwgc3ltYm9sIFRfTEVTUyBzeW1ib2wJCQl7ICQk
ID0gZXhwcl9hbGxvY19jb21wKEVfTFRILCAkMSwgJDMpOyB9CisJfCBzeW1ib2wgVF9MRVNTX0VR
VUFMIHN5bWJvbAkJeyAkJCA9IGV4cHJfYWxsb2NfY29tcChFX0xFUSwgJDEsICQzKTsgfQorCXwg
c3ltYm9sIFRfR1JFQVRFUiBzeW1ib2wJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9HVEgsICQx
LCAkMyk7IH0KKwl8IHN5bWJvbCBUX0dSRUFURVJfRVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9h
bGxvY19jb21wKEVfR0VRLCAkMSwgJDMpOyB9CisJfCBzeW1ib2wgVF9FUVVBTCBzeW1ib2wJCQl7
ICQkID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsICQxLCAkMyk7IH0KKwl8IHN5bWJvbCBUX1VO
RVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgJDEsICQzKTsg
fQorCXwgVF9PUEVOX1BBUkVOIGV4cHIgVF9DTE9TRV9QQVJFTgl7ICQkID0gJDI7IH0KKwl8IFRf
Tk9UIGV4cHIJCQkJeyAkJCA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCAkMik7IH0KKwl8IGV4cHIg
VF9PUiBleHByCQkJeyAkJCA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsICQxLCAkMyk7IH0KKwl8IGV4
cHIgVF9BTkQgZXhwcgkJCXsgJCQgPSBleHByX2FsbG9jX3R3byhFX0FORCwgJDEsICQzKTsgfQor
OworCisvKiBGb3Igc3ltYm9sIGRlZmluaXRpb25zLCBzZWxlY3RzLCBldGMuLCB3aGVyZSBxdW90
ZXMgYXJlIG5vdCBhY2NlcHRlZCAqLworbm9uY29uc3Rfc3ltYm9sOiBUX1dPUkQgeyAkJCA9IHN5
bV9sb29rdXAoJDEsIDApOyBmcmVlKCQxKTsgfTsKKworc3ltYm9sOgkgIG5vbmNvbnN0X3N5bWJv
bAorCXwgVF9XT1JEX1FVT1RFCXsgJCQgPSBzeW1fbG9va3VwKCQxLCBTWU1CT0xfQ09OU1QpOyBm
cmVlKCQxKTsgfQorOworCit3b3JkX29wdDogLyogZW1wdHkgKi8JCQl7ICQkID0gTlVMTDsgfQor
CXwgVF9XT1JECisKKy8qIGFzc2lnbm1lbnQgc3RhdGVtZW50ICovCisKK2Fzc2lnbm1lbnRfc3Rt
dDogIFRfV09SRCBhc3NpZ25fb3AgYXNzaWduX3ZhbCBUX0VPTAl7IHZhcmlhYmxlX2FkZCgkMSwg
JDMsICQyKTsgZnJlZSgkMSk7IGZyZWUoJDMpOyB9CisKK2Fzc2lnbl9vcDoKKwkgIFRfRVFVQUwJ
eyAkJCA9IFZBUl9SRUNVUlNJVkU7IH0KKwl8IFRfQ09MT05fRVFVQUwJeyAkJCA9IFZBUl9TSU1Q
TEU7IH0KKwl8IFRfUExVU19FUVVBTAl7ICQkID0gVkFSX0FQUEVORDsgfQorOworCithc3NpZ25f
dmFsOgorCS8qIGVtcHR5ICovCQl7ICQkID0geHN0cmR1cCgiIik7IH07CisJfCBUX0FTU0lHTl9W
QUwKKzsKKworJSUKKwordm9pZCBjb25mX3BhcnNlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3Ry
dWN0IHN5bWJvbCAqc3ltOworCWludCBpOworCisJemNvbmZfaW5pdHNjYW4obmFtZSk7CisKKwlf
bWVudV9pbml0KCk7CisKKwlpZiAoZ2V0ZW52KCJaQ09ORl9ERUJVRyIpKQorCQl5eWRlYnVnID0g
MTsKKwl5eXBhcnNlKCk7CisKKwkvKiBWYXJpYWJsZXMgYXJlIGV4cGFuZGVkIGluIHRoZSBwYXJz
ZSBwaGFzZS4gV2UgY2FuIGZyZWUgdGhlbSBoZXJlLiAqLworCXZhcmlhYmxlX2FsbF9kZWwoKTsK
KworCWlmICh5eW5lcnJzKQorCQlleGl0KDEpOworCWlmICghbW9kdWxlc19zeW0pCisJCW1vZHVs
ZXNfc3ltID0gc3ltX2ZpbmQoICJuIiApOworCisJaWYgKCFtZW51X2hhc19wcm9tcHQoJnJvb3Rt
ZW51KSkgeworCQljdXJyZW50X2VudHJ5ID0gJnJvb3RtZW51OworCQltZW51X2FkZF9wcm9tcHQo
UF9NRU5VLCAiTWFpbiBtZW51IiwgTlVMTCk7CisJfQorCisJbWVudV9maW5hbGl6ZSgmcm9vdG1l
bnUpOworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsKKwkJaWYgKHN5bV9jaGVja19kZXBzKHN5
bSkpCisJCQl5eW5lcnJzKys7CisJfQorCWlmICh5eW5lcnJzKQorCQlleGl0KDEpOworCXN5bV9z
ZXRfY2hhbmdlX2NvdW50KDEpOworfQorCitzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25z
dCBjaGFyICp0b2tlbm5hbWUsCisJCQkgICBjb25zdCBjaGFyICpleHBlY3RlZF90b2tlbm5hbWUp
Cit7CisJaWYgKHN0cmNtcCh0b2tlbm5hbWUsIGV4cGVjdGVkX3Rva2VubmFtZSkpIHsKKwkJemNv
bmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxvY2siLAorCQkJICAgIHRva2Vu
bmFtZSwgZXhwZWN0ZWRfdG9rZW5uYW1lKTsKKwkJeXluZXJycysrOworCQlyZXR1cm4gZmFsc2U7
CisJfQorCWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9maWxlKSB7CisJCXpjb25m
X2Vycm9yKCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIsCisJCQkgICAgdG9rZW5u
YW1lLCBleHBlY3RlZF90b2tlbm5hbWUpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2Nh
dGlvbiBvZiB0aGUgJyVzJ1xuIiwKKwkJCWN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVu
dF9tZW51LT5saW5lbm8sCisJCQlleHBlY3RlZF90b2tlbm5hbWUpOworCQl5eW5lcnJzKys7CisJ
CXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25m
cHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWZwcmludGYo
c3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCXZh
X3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7CisJdmFfZW5kKGFw
KTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9y
KGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl5eW5lcnJzKys7CisJ
ZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsKKwl2
YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworc3RhdGljIHZvaWQgeXll
cnJvcihjb25zdCBjaGFyICplcnIpCit7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogJXNcbiIs
IHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkgKyAxLCBlcnIpOworfQorCitzdGF0aWMg
dm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQorewor
CWNvbnN0IGNoYXIgKnA7CisJaW50IGxlbjsKKworCXB1dGMoJyInLCBvdXQpOworCXdoaWxlICgo
cCA9IHN0cmNocihzdHIsICciJykpKSB7CisJCWxlbiA9IHAgLSBzdHI7CisJCWlmIChsZW4pCisJ
CQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4sIHN0cik7CisJCWZwdXRzKCJcXFwiIiwgb3V0KTsK
KwkJc3RyID0gcCArIDE7CisJfQorCWZwdXRzKHN0ciwgb3V0KTsKKwlwdXRjKCciJywgb3V0KTsK
K30KKworc3RhdGljIHZvaWQgcHJpbnRfc3ltYm9sKEZJTEUgKm91dCwgc3RydWN0IG1lbnUgKm1l
bnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOworCXN0cnVjdCBwcm9wZXJ0
eSAqcHJvcDsKKworCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpCisJCWZwcmludGYob3V0LCAiXG5j
aG9pY2VcbiIpOworCWVsc2UKKwkJZnByaW50ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5u
YW1lKTsKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCQlmcHV0cygi
ICBib29sXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfVFJJU1RBVEU6CisJCWZwdXRzKCIg
IHRyaXN0YXRlXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCQlmcHV0cygi
ICBzdHJpbmdcbiIsIG91dCk7CisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJCWZwdXRzKCIgIGlu
dGVnZXJcbiIsIG91dCk7CisJCWJyZWFrOworCWNhc2UgU19IRVg6CisJCWZwdXRzKCIgIGhleFxu
Iiwgb3V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnB1dHMoIiAgPz8/XG4iLCBvdXQpOwor
CQlicmVhazsKKwl9CisJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+
bmV4dCkgeworCQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQorCQkJY29udGludWU7CisJCXN3aXRj
aCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfUFJPTVBUOgorCQkJZnB1dHMoIiAgcHJvbXB0ICIs
IG91dCk7CisJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQlpZiAo
IWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCQlmcHV0cygiIGlmICIsIG91
dCk7CisJCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOworCQkJfQorCQkJ
ZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfREVGQVVMVDoKKwkJCWZwdXRz
KCAiICBkZWZhdWx0ICIsIG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOwor
CQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1dHMoIiBp
ZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsKKwkJ
CX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0NIT0lDRToKKwkJ
CWZwdXRzKCIgICNjaG9pY2UgdmFsdWVcbiIsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1NF
TEVDVDoKKwkJCWZwdXRzKCAiICBzZWxlY3QgIiwgb3V0KTsKKwkJCWV4cHJfZnByaW50KHByb3At
PmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2UgUF9J
TVBMWToKKwkJCWZwdXRzKCAiICBpbXBseSAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQocHJvcC0+
ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX1JB
TkdFOgorCQkJZnB1dHMoICIgIHJhbmdlICIsIG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5l
eHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfTUVO
VToKKwkJCWZwdXRzKCAiICBtZW51ICIsIG91dCk7CisJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91
dCwgcHJvcC0+dGV4dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNhc2Ug
UF9TWU1CT0w6CisJCQlmcHV0cyggIiAgc3ltYm9sICIsIG91dCk7CisJCQlmcHJpbnRmKG91dCwg
IiVzXG4iLCBwcm9wLT5zeW0tPm5hbWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlmcHJp
bnRmKG91dCwgIiAgdW5rbm93biBwcm9wICVkIVxuIiwgcHJvcC0+dHlwZSk7CisJCQlicmVhazsK
KwkJfQorCX0KKwlpZiAobWVudS0+aGVscCkgeworCQlpbnQgbGVuID0gc3RybGVuKG1lbnUtPmhl
bHApOworCQl3aGlsZSAobWVudS0+aGVscFstLWxlbl0gPT0gJ1xuJykKKwkJCW1lbnUtPmhlbHBb
bGVuXSA9IDA7CisJCWZwcmludGYob3V0LCAiICBoZWxwXG4lc1xuIiwgbWVudS0+aGVscCk7CisJ
fQorfQorCit2b2lkIHpjb25mZHVtcChGSUxFICpvdXQpCit7CisJc3RydWN0IHByb3BlcnR5ICpw
cm9wOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKworCW1lbnUg
PSByb290bWVudS5saXN0OworCXdoaWxlIChtZW51KSB7CisJCWlmICgoc3ltID0gbWVudS0+c3lt
KSkKKwkJCXByaW50X3N5bWJvbChvdXQsIG1lbnUpOworCQllbHNlIGlmICgocHJvcCA9IG1lbnUt
PnByb21wdCkpIHsKKwkJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQkJY2FzZSBQX0NPTU1FTlQ6
CisJCQkJZnB1dHMoIlxuY29tbWVudCAiLCBvdXQpOworCQkJCXByaW50X3F1b3RlZF9zdHJpbmco
b3V0LCBwcm9wLT50ZXh0KTsKKwkJCQlmcHV0cygiXG4iLCBvdXQpOworCQkJCWJyZWFrOworCQkJ
Y2FzZSBQX01FTlU6CisJCQkJZnB1dHMoIlxubWVudSAiLCBvdXQpOworCQkJCXByaW50X3F1b3Rl
ZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCQlmcHV0cygiXG4iLCBvdXQpOworCQkJCWJy
ZWFrOworCQkJZGVmYXVsdDoKKwkJCQk7CisJCQl9CisJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3At
PnZpc2libGUuZXhwcikpIHsKKwkJCQlmcHV0cygiICBkZXBlbmRzICIsIG91dCk7CisJCQkJZXhw
cl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOworCQkJCWZwdXRjKCdcbicsIG91dCk7
CisJCQl9CisJCX0KKworCQlpZiAobWVudS0+bGlzdCkKKwkJCW1lbnUgPSBtZW51LT5saXN0Owor
CQllbHNlIGlmIChtZW51LT5uZXh0KQorCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCWVsc2Ugd2hp
bGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkgeworCQkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51
LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQorCQkJCWZwdXRzKCJcbmVuZG1lbnVcbiIsIG91dCk7
CisJCQlpZiAobWVudS0+bmV4dCkgeworCQkJCW1lbnUgPSBtZW51LT5uZXh0OworCQkJCWJyZWFr
OworCQkJfQorCQl9CisJfQorfQorCisjaW5jbHVkZSAidXRpbC5jIgorI2luY2x1ZGUgIm1lbnUu
YyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVs
LXRvLXVuaWtyYWZ0LnBhdGNoIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDEta2NvbmZpZy1r
ZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZjBkNjNiNAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAx
LWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoCkBAIC0wLDAgKzEsNzYgQEAKK2RpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9NYWtlZmlsZQoraW5kZXggM2YzMjdlMi4uN2I1MzJjNSAxMDA2NDQKKy0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUK
K0BAIC0xLDYgKzEsNiBAQAorICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyAj
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQorLSMgS2VybmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cworKyMg
VW5pa3JhZnQgY29uZmlndXJhdGlvbiB0YXJnZXRzCisgIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2Vk
IGZyb20gdG9wLWxldmVsIG1ha2VmaWxlCisgCisgUEhPTlkgKz0geGNvbmZpZyBnY29uZmlnIG1l
bnVjb25maWcgY29uZmlnIGxvY2FsbW9kY29uZmlnIGxvY2FseWVzY29uZmlnIFwKK2RpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9nY29uZi5nbGFkZQoraW5kZXggYWE0ODNjYi4uMDNlOTdkNyAxMDA2NDQKKy0tLSBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2Nv
bmYuZ2xhZGUKK0BAIC00LDcgKzQsNyBAQAorIAorIDx3aWRnZXQgY2xhc3M9Ikd0a1dpbmRvdyIg
aWQ9IndpbmRvdzEiPgorICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
PgorLSAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xhdGFibGU9InllcyI+R3RrIEtlcm5l
bCBDb25maWd1cmF0b3I8L3Byb3BlcnR5PgorKyAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFu
c2xhdGFibGU9InllcyI+R3RrIFVuaWtyYWZ0IENvbmZpZ3VyYXRvcjwvcHJvcGVydHk+CisgICA8
cHJvcGVydHkgbmFtZT0idHlwZSI+R1RLX1dJTkRPV19UT1BMRVZFTDwvcHJvcGVydHk+CisgICA8
cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19OT05FPC9wcm9wZXJ0
eT4KKyAgIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+RmFsc2U8L3Byb3BlcnR5PgorZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNv
bmYuYworaW5kZXggNjk0MDkxZi4uNTNjNGE2MiAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbWNvbmYuYworKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jCitAQCAtMTc1
LDkgKzE3NSw5IEBAIG1lbnVfaW5zdHJ1Y3Rpb25zW10gPQorIAkiQXJyb3cga2V5cyBuYXZpZ2F0
ZSB0aGUgbWVudS4gICIKKyAJIjxFbnRlcj4gc2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBlbXB0
eSBzdWJtZW51cyAtLS0tKS4gICIKKyAJIkhpZ2hsaWdodGVkIGxldHRlcnMgYXJlIGhvdGtleXMu
ICAiCistCSJQcmVzc2luZyA8WT4gaW5jbHVkZXMsIDxOPiBleGNsdWRlcywgPE0+IG1vZHVsYXJp
emVzIGZlYXR1cmVzLiAgIgorKwkiUHJlc3NpbmcgPFk+IHNlbGVjdHMgYSBmZWF0dXJlLCB3aGls
ZSA8Tj4gd2lsbCBleGNsdWRlIGEgZmVhdHVyZS4gICIKKyAJIlByZXNzIDxFc2M+PEVzYz4gdG8g
ZXhpdCwgPD8+IGZvciBIZWxwLCA8Lz4gZm9yIFNlYXJjaC4gICIKKy0JIkxlZ2VuZDogWypdIGJ1
aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJsZSIsCisr
CSJMZWdlbmQ6IFsqXSBmZWF0dXJlIGlzIHNlbGVjdGVkICBbIF0gZmVhdHVyZSBpcyBleGNsdWRl
ZCIsCisgcmFkaW9saXN0X2luc3RydWN0aW9uc1tdID0KKyAJIlVzZSB0aGUgYXJyb3cga2V5cyB0
byBuYXZpZ2F0ZSB0aGlzIHdpbmRvdyBvciAiCisgCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBp
dGVtIHlvdSB3aXNoIHRvIHNlbGVjdCAiCitAQCAtOTU3LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbnQg
aGFuZGxlX2V4aXQodm9pZCkKKyAJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkKKyAJCXJlcyA9IGRp
YWxvZ195ZXNubyhOVUxMLAorIAkJCQkgICAiRG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyIG5ldyBj
b25maWd1cmF0aW9uP1xuIgorLQkJCQkgICAgICIoUHJlc3MgPEVTQz48RVNDPiB0byBjb250aW51
ZSBrZXJuZWwgY29uZmlndXJhdGlvbi4pIiwKKysJCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4g
dG8gY29udGludWUgVW5pa3JhZnQgY29uZmlndXJhdGlvbi4pIiwKKyAJCQkJICAgNiwgNjApOwor
IAllbHNlCisgCQlyZXMgPSAtMTsKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25j
b25mLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMKK2luZGV4IGNiYWZlM2IuLmQzZDkw
OGMgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMKKysrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvbmNvbmYuYworQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIGNvbnN0IGNo
YXIgbmNvbmZfZ2xvYmFsX2hlbHBbXSA9CisgIk1lbnUgZW50cmllc1xuIgorICItLS0tLS0tLS0t
LS1cbiIKKyAiVGhpcyBpbnRlcmZhY2UgbGV0cyB5b3Ugc2VsZWN0IGZlYXR1cmVzIGFuZCBwYXJh
bWV0ZXJzIGZvciB0aGUga2VybmVsXG4iCistImJ1aWxkLiAgS2VybmVsIGZlYXR1cmVzIGNhbiBl
aXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciByZW1vdmVkLlxuIgorKyJidWlsZC4g
IFVuaWtyYWZ0IGZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgc2VsZWN0ZWQgb3IgZGVzZWxlY3RlZC5c
biIKKyAiUGFyYW1ldGVycyBtdXN0IGJlIGVudGVyZWQgYXMgdGV4dCBvciBkZWNpbWFsIG9yIGhl
eGFkZWNpbWFsIG51bWJlcnMuXG4iCisgIlxuIgorICJNZW51IGVudHJpZXMgYmVnaW5uaW5nIHdp
dGggZm9sbG93aW5nIGJyYWNlcyByZXByZXNlbnQgZmVhdHVyZXMgdGhhdFxuIgorZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fj
b25mLmNjCitpbmRleCBjZTdmYzg3Li4wMDIxYWE2IDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9xY29uZi5jYworKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYworQEAg
LTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IGNoYXIq
IHN0cikKKyB9CisgCisgQ29uZmlnU2V0dGluZ3M6OkNvbmZpZ1NldHRpbmdzKCkKKy0JOiBRU2V0
dGluZ3MoImtlcm5lbC5vcmciLCAicWNvbmYiKQorKwk6IFFTZXR0aW5ncygidW5pa3JhZnQub3Jn
IiwgInFjb25mIikKKyB7CisgfQorIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3BhdGNo
ZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDItaW1w
b3J0LW1ha2VmaWxlLmJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmZTBi
YTkKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wMi1pbXBvcnQt
bWFrZWZpbGUuYnIKQEAgLTAsMCArMSw1OSBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCituZXcg
ZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNDFjNWNlMQorLS0tIC9kZXYvbnVsbAor
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorQEAgLTAsMCArMSw1MyBAQAor
K3NyYyA6PSAuCisrdG9wX3NyY2Rpcj0uLi8uLi8KKyt0b3BfYnVpbGRkaXI9Li4vLi4vCisrc3Jj
dHJlZSA6PSAuCisrb2JqID89IC4KKysKKytpbmNsdWRlIE1ha2VmaWxlCisrI0hPU1RDRkxBR1Mr
PS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oCisrLWluY2x1ZGUgJChvYmopLy5kZXBlbmQKKysk
KG9iaikvLmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQorKwkkKEhPU1RDQykgJChIT1NUX0VY
VFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAyPi9kZXYvbnVsbCB8fCA6Cisr
CisrX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQor
K2hvc3QtY3NpbmdsZSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQoJChtKS1v
YmpzKSwsJChtKSkpCisraG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyks
XAorKyAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQo
bSkpKSkKKytob3N0LWN4eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwKKysg
ICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAkKCQobSktb2JqcyksKSkp
CisraG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwk
KF9faG9zdHByb2dzKSwkKCQobSktb2JqcykpKSkKKytob3N0LWN4eG9ianMgOj0gJChhZGRwcmVm
aXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLWN4eG9i
anMpKSkpCisrCisrSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIgor
KworKyQoaG9zdC1jc2luZ2xlKTogJTogJS5jCisrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEAKKysKKysk
KGhvc3QtY211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQorKwkkKEhPU1RD
QykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChh
ZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1v
ICQob2JqKS8kQAorKworKyQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhv
c3QtY29ianMpICQoaG9zdC1jc2hsaWIpCisrCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdT
KSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQo
JChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAk
KG9iaikvJEAKKysKKyskKG9iaikvJS5vOiAlLmMKKysJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNG
TEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRACisrCisr
JChvYmopLyUubzogJChvYmopLyUuYworKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAk
KEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAKKysKKyskKG9iaikv
JS5vOiAlLmNjCisrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykg
JChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRACisrCisrJChvYmopLyU6OiAkKHNyYykv
JV9zaGlwcGVkCisrCSQoUSljYXQgJDwgPiAkQAorKworK2NsZWFuOgorKwkkKFEpcm0gLWYgJChh
ZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkKKytkaXN0Y2xlYW46IGNsZWFuCisrCSQo
USlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQobHhkaWFsb2cpICQoY29uZi1vYmpzKSAkKG1j
b25mLW9ianMpICQoa3hnZXR0ZXh0LW9ianMpIFwKKysJCSQoaG9zdHByb2dzLXkpICQocWNvbmYt
Y3h4b2JqcykgJChxY29uZi1vYmpzKSAkKGdjb25mLW9ianMpIFwKKysJCW1jb25mIC5kZXBlbmQp
CisrCisrRk9SQ0U6CisrLlBIT05ZOiBGT1JDRSBjbGVhbiBkaXN0Y2xlYW4KZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20t
a2VybmVsIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxw
ZXItZnJvbS1rZXJuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVjNzlm
OAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAzLWluY2x1ZGUt
bWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsCkBAIC0wLDAgKzEsMTAyIEBACitkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUuYnIKK2luZGV4IDQxYzVjZTEuLjBmZGJlOWEgMTAwNjQ0CistLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L01ha2VmaWxlLmJyCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2Vm
aWxlLmJyCitAQCAtNCw2ICs0LDcgQEAgdG9wX2J1aWxkZGlyPS4uLy4uLworIHNyY3RyZWUgOj0g
LgorIG9iaiA/PSAuCisgCisraW5jbHVkZSBNYWtlZmlsZS5ydWxlcworIGluY2x1ZGUgTWFrZWZp
bGUKKyAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgKKyAtaW5jbHVkZSAk
KG9iaikvLmRlcGVuZAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUu
cnVsZXMgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzCituZXcgZmlsZSBtb2Rl
IDEwMDY0NAoraW5kZXggMDAwMDAwMC4uNzhhOWM4MQorLS0tIC9kZXYvbnVsbAorKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcworQEAgLTAsMCArMSw4NCBAQAorK2tlY2hv
IDo9IGVjaG8KKytjb21tYSA6PSAsCisrCisrCisrZG90LXRhcmdldCA9ICQoZGlyICRAKS4kKG5v
dGRpciAkQCkKKysKKythbnktcHJlcmVxID0gJChmaWx0ZXItb3V0ICQoUEhPTlkpLCQ/KSAkKGZp
bHRlci1vdXQgJChQSE9OWSkgJCh3aWxkY2FyZCAkXiksJF4pCisrCisrYXJnLWNoZWNrID0gJChp
ZiAkKHN0cmlwICQoY21kXyRAKSksLDEpCisrCisrbWFrZS1jbWQgPSAkKGNhbGwgZXNjc3EsJChz
dWJzdCAkKHBvdW5kKSwkJChwb3VuZCksJChzdWJzdCAkJCwkJCQkLCQoY21kXyQoMSkpKSkpCisr
CisrIyBwcmludGluZyBjb21tYW5kcworK2NtZCA9IEBzZXQgLWU7ICQoZWNoby1jbWQpICQoY21k
XyQoMSkpCisrCisrZGVwZmlsZSA9ICQoc3Vic3QgJChjb21tYSksXywkKGRvdC10YXJnZXQpLmQp
CisrZGVwZmxhZ3MgPSAtV3AkKGNvbW1hKS1NRCQoY29tbWEpJChjYWxsIGRvdC10YXJnZXQpCisr
CisrY21kX2FuZF9maXhkZXAgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKysJJChjbWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisrCSQob2JqKS9maXhkZXAgJChkZXBmaWxlKSAkQCAnJCht
YWtlLWNtZCknID4gJChkb3QtdGFyZ2V0KS5jbWQ7XAorKwlybSAtZiAkKGRlcGZpbGUpCisrCisr
aWZfY2hhbmdlZF9kZXAgPSAkKGlmICQoc3RyaXAgJChhbnktcHJlcmVxKSAkKGFyZy1jaGVjaykp
LCQoY21kX2FuZF9maXhkZXApLEA6KQorKworK2RlZmluZSBtdWx0aV9kZXBlbmQKKyskKGZvcmVh
Y2ggbSwgJChub3RkaXIgJDEpLCBcCisrICAgICQoZXZhbCAkKG9iaikvJG06IFwKKysgICAgJChh
ZGRwcmVmaXggJChvYmopLywgJChmb3JlYWNoIHMsICQzLCAkKCQobTolJChzdHJpcCAkMik9JSQo
cykpKSkpKSkKKytlbmRlZgorKworKyMjIworKyMgZmlsZWNoayBpcyB1c2VkIHRvIGNoZWNrIGlm
IHRoZSBjb250ZW50IG9mIGEgZ2VuZXJhdGVkIGZpbGUgaXMgdXBkYXRlZC4KKysjIFNhbXBsZSB1
c2FnZToKKysjCisrIyBmaWxlY2hrX3NhbXBsZSA9IGVjaG8gJChLRVJORUxSRUxFQVNFKQorKyMg
dmVyc2lvbi5oOiBGT1JDRQorKyMgICAkKGNhbGwgZmlsZWNoayxzYW1wbGUpCisrIworKyMgVGhl
IHJ1bGUgZGVmaW5lZCBzaGFsbCB3cml0ZSB0byBzdGRvdXQgdGhlIGNvbnRlbnQgb2YgdGhlIG5l
dyBmaWxlLgorKyMgVGhlIGV4aXN0aW5nIGZpbGUgd2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBu
ZXcgb25lLgorKyMgLSBJZiBubyBmaWxlIGV4aXN0IGl0IGlzIGNyZWF0ZWQKKysjIC0gSWYgdGhl
IGNvbnRlbnQgZGlmZmVyIHRoZSBuZXcgZmlsZSBpcyB1c2VkCisrIyAtIElmIHRoZXkgYXJlIGVx
dWFsIG5vIGNoYW5nZSwgYW5kIG5vIHRpbWVzdGFtcCB1cGRhdGUKKysjIC0gc3RkaW4gaXMgcGlw
ZWQgaW4gZnJvbSB0aGUgZmlyc3QgcHJlcmVxdWlzaXRlICgkPCkgc28gb25lIGhhcworKyMgICB0
byBzcGVjaWZ5IGEgdmFsaWQgZmlsZSBhcyBmaXJzdCBwcmVyZXF1aXNpdGUgKG9mdGVuIHRoZSBr
YnVpbGQgZmlsZSkKKytkZWZpbmUgZmlsZWNoaworKwkkKFEpc2V0IC1lOyAgICAgICAgICAgICBc
CisrCW1rZGlyIC1wICQoZGlyICRAKTsgICAgICAgICBcCisrCXsgJChmaWxlY2hrXyQoMSkpOyB9
ID4gJEAudG1wOyAgICAgIFwKKysJaWYgWyAtciAkQCBdICYmIGNtcCAtcyAkQCAkQC50bXA7IHRo
ZW4gIFwKKysJICAgIHJtIC1mICRALnRtcDsgICAgICAgICAgIFwKKysJZWxzZSAgICAgICAgICAg
ICAgICAgICAgXAorKwkgICAgJChrZWNobykgJyAgVVBEICAgICAkQCc7ICAgIFwKKysJICAgIG12
IC1mICRALnRtcCAkQDsgICAgICAgIFwKKysJZmkKKytlbmRlZgorKworKyMgRXhlY3V0ZSBjb21t
YW5kIGlmIGNvbW1hbmQgaGFzIGNoYW5nZWQgb3IgcHJlcmVxdWlzaXRlKHMpIGFyZSB1cGRhdGVk
LgorK2lmX2NoYW5nZWQgPSAkKGlmICQoc3RyaXAgJChhbnktcHJlcmVxKSAkKGFyZy1jaGVjaykp
LAkJXAorKwkkKGNtZCk7XAorKwlwcmludGYgJyVzXG4nICdjbWRfJEAgOj0gJChtYWtlLWNtZCkn
ID4gJChkb3QtdGFyZ2V0KS5jbWQsIEA6KQorKworKyMgTEVYCisrIyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKytxdWlldF9jbWRfZmxleCA9IExFWCAkQAorK2NtZF9mbGV4ID0gJChMRVgpIC1vJEAgLUwg
JDwKKysKKyskKG9iaikvJS5sZXguYzogJChzcmMpLyUubCBGT1JDRQorKwkkKGNhbGwgaWZfY2hh
bmdlZCxmbGV4KQorKworKyMgWUFDQworKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrcXVpZXRfY21k
X2Jpc29uID0gWUFDQyAgICAkQAorK2NtZF9iaXNvbiA9ICQoWUFDQykgLW8kQCAtdCAtbCAkPAor
KworKyQob2JqKS8lLnRhYi5jOiAkKHNyYykvJS55IEZPUkNFCisrCSQoY2FsbCBpZl9jaGFuZ2Vk
LGJpc29uKQorKworK3F1aWV0X2NtZF9iaXNvbl9oID0gWUFDQyAgICAkQAorK2NtZF9iaXNvbl9o
ID0gJChZQUNDKSAtby9kZXYvbnVsbCAtLWRlZmluZXM9JEAgLXQgLWwgJDwKKysKKyskKG9iaikv
JS50YWIuaDogJChzcmMpLyUueSBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZCxiaXNvbl9oKQpk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVs
ZSBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RlMGNiMQotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUKQEAgLTAsMCAr
MSwyNiBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCitpbmRleCAwZmRiZTlhLi5jMTFmMjk3IDEw
MDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgorQEAgLTMxLDE4ICszMSw2IEBAICQoaG9zdC1jbXVs
dGkpOiAlOiAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpCisgJChob3N0LWN4eG11bHRpKTog
JTogJChob3N0LWN4eG9ianMpICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikKKyAJJChIT1NU
Q1hYKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEAp
ICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhP
U1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQAorIAorLSQob2JqKS8lLm86ICUuYworLQkk
KEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18k
KEBGKSkgLWMgJDwgLW8gJEAKKy0KKy0kKG9iaikvJS5vOiAkKG9iaikvJS5jCistCSQoSE9TVEND
KSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAt
YyAkPCAtbyAkQAorLQorLSQob2JqKS8lLm86ICUuY2MKKy0JJChIT1NUQ0MpICQoSE9TVF9FWFRS
QUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEAK
Ky0KKy0kKG9iaikvJTo6ICQoc3JjKS8lX3NoaXBwZWQKKy0JJChRKWNhdCAkPCA+ICRACistCisg
Y2xlYW46CisgCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQor
IGRpc3RjbGVhbjogY2xlYW4KK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNo
ZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8w
NC1yZW1vdmUtZ2VuZXJpYy1ydWxlCituZXcgZmlsZSBtb2RlIDEwMDY0NAoraW5kZXggMDAwMDAw
MC4uZTY5ZGUyOQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDUtYWRkLXVu
aWtyYWZ0LWZpeGRlcC1oZWFkZXIgYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNS1hZGQtdW5p
a3JhZnQtZml4ZGVwLWhlYWRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
YjJjOGFlCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDUtYWRk
LXVuaWtyYWZ0LWZpeGRlcC1oZWFkZXIKQEAgLTAsMCArMSwxMiBAQAorZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5j
CitpbmRleCBmYWNiZDYwLi45N2FmYjcwIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9maXhkZXAuYworKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYworQEAgLTI2OSw2
ICsyNjksNyBAQCBzdGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBjaGFyICpzLCBpbnQg
bGVuKQorIHsKKyAJcmV0dXJuIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiaW5jbHVkZS9nZW5lcmF0
ZWQvYXV0b2NvbmYuaCIpIHx8CisgCSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1
ZGUvZ2VuZXJhdGVkL2F1dG9rc3ltcy5oIikgfHwKKysJICAgICAgIHN0cl9lbmRzX3dpdGgocywg
bGVuLCAiYnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fAorIAkgICAgICAgc3RyX2VuZHNf
d2l0aChzLCBsZW4sICIudmVyIik7CisgfQorIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNo
ZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjRlMTc5ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hl
cy8wNi1yZW1vdmUtaW1wbGljaXQtcnVsZXMKQEAgLTAsMCArMSwxMyBAQAorZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyCitpbmRleCA1OGU2ZTc1Li5hZmU5NGVlIDEwMDY0NAorLS0tIGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZS5icgorKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5icgorQEAgLTQsNiArNCw4IEBAIHRvcF9idWlsZGRpcj0uLi8uLi8KKyBzcmN0cmVlIDo9IC4K
KyBvYmogPz0gLgorIAorKy5TVUZGSVhFUyA6CisrCisgaW5jbHVkZSBNYWtlZmlsZS5ydWxlcwor
IGluY2x1ZGUgTWFrZWZpbGUKKyAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9v
LmgKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRv
b2xzLXJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDctaW1wb3J0LWhvc3QtdG9vbHMt
cnVsZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0ZGM5NwotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xz
LXJ1bGVzCkBAIC0wLDAgKzEsMTQyIEBACitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK2luZGV4IGFm
ZTk0ZWUuLjhlNjRhOWIgMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyCisrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyCitAQCAtMTAsMjkgKzEw
LDQxIEBAIGluY2x1ZGUgTWFrZWZpbGUucnVsZXMKKyBpbmNsdWRlIE1ha2VmaWxlCisgI0hPU1RD
RkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oCisgLWluY2x1ZGUgJChvYmopLy5kZXBl
bmQKKy0kKG9iaikvLmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQorLQkkKEhPU1RDQykgJChI
T1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAyPi9kZXYvbnVsbCB8
fCA6CisgCisgX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dz
LW0pKQorLWhvc3QtY3NpbmdsZSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQo
JChtKS1vYmpzKSwsJChtKSkpCisraG9zdC1jc2hsaWIgOj0gJChzb3J0ICQoaG9zdGxpYnMteSkg
JChob3N0bGlicy1tKSkKKytob3N0LWN4eHNobGliIDo9ICQoc29ydCAkKGhvc3RjeHhsaWJzLXkp
ICQoaG9zdGN4eGxpYnMtbSkpCisrCisrIyBDIGNvZGUKKysjIEV4ZWN1dGFibGVzIGNvbXBpbGVk
IGZyb20gYSBzaW5nbGUgLmMgZmlsZQorK2hvc3QtY3NpbmdsZTo9ICQoZm9yZWFjaCBtLCQoX19o
b3N0cHJvZ3MpLCBcCisrICAgICAgICAgICAgICQoaWYgJCgkKG0pLW9ianMpJCgkKG0pLWN4eG9i
anMpLCwkKG0pKSkKKyBob3N0LWNtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxc
CistICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwsJChpZiAkKCQobSktb2JqcyksJCht
KSkpKQorLWhvc3QtY3h4bXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXAorLSAg
ICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksJChtKSwkKGlmICQoJChtKS1vYmpzKSwpKSkK
Ky1ob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQo
X19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQorLWhvc3QtY3h4b2JqcyA6PSAkKGFkZHByZWZp
eCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktY3h4b2Jq
cykpKSkKKysJCSAgICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCwkKGlmICQoJChtKS1v
YmpzKSwkKG0pKSkpCisrIyBPYmplY3QgKC5vKSBmaWxlcyBjb21waWxlZCBmcm9tIC5jIGZpbGVz
CisraG9zdC1jb2JqcyAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJCht
KS1vYmpzKSkpCisrCisrIyBDKysgY29kZQorKyMgQysrIGV4ZWN1dGFibGVzIGNvbXBpbGVkIGZy
b20gYXQgbGVhc3Qgb25lIC5jYyBmaWxlCisrIyBhbmQgemVybyBvciBtb3JlIC5jIGZpbGVzCisr
IGhvc3QtY3h4bXVsdGkgICA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQoJCht
KS1jeHhvYmpzKSwkKG0pKSkKKysjIEMrKyBPYmplY3QgKC5vKSBmaWxlcyBjb21waWxlZCBmcm9t
IC5jYyBmaWxlcworK2hvc3QtY3h4b2JqcyAgICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0
LWN4eG11bHRpKSwkKCQobSktY3h4b2JqcykpKQorKyNPYmplY3QgKC5vKSBmaWxlcyB1c2VkIGJ5
IHRoZSBzaGFyZWQgbGliYXJpZXMKKytob3N0LWNzaG9ianMgICAgOj0gJChzb3J0ICQoZm9yZWFj
aCBtLCQoaG9zdC1jc2hsaWIpLCQoJChtOi5zbz0tb2JqcykpKSkKKytob3N0LWN4eHNob2JqcyAg
Oj0gJChzb3J0ICQoZm9yZWFjaCBtLCQoaG9zdC1jeHhzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkp
KQorKworKworK2hvc3QtY3NpbmdsZSA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jc2lu
Z2xlKSkKKytob3N0LWNtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY211bHRp
KSkKKytob3N0LWN4eG11bHRpICA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jeHhtdWx0
aSkpCisraG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jb2JqcykpCisr
aG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQorIGZp
eGRlcC1vYmpzIDo9ICQob2JqKS9maXhkZXAubworIAorIEhPU1RfRVhUUkFDRkxBR1MgKz0gLUkk
KG9iaikgLURDT05GSUdfPVwiXCIKKyAKKy0kKGhvc3QtY3NpbmdsZSk6ICU6ICUuYworLQkkKEhP
U1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkg
JDwgLW8gJChvYmopLyRACistCistJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1jb2JqcykgJCho
b3N0LWNzaGxpYikKKy0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdT
KSAkKEhPU1RDRkxBR1NfJEApICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSkgJChI
T1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEAKKyAKKy0kKGhvc3QtY3h4bXVsdGkpOiAl
OiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQorLQkkKEhPU1RD
WFgpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kQCkg
JChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpICQoJChARiktY3h4b2JqcykpICQoSE9T
VExPQURMSUJFU18kKEBGKSkgLW8gJChvYmopLyRACisgCisgJChvYmopL2ZpeGRlcDogJChmaXhk
ZXAtb2JqcykKKyAJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAk
KEhPU1RDRkxBR1NfJChARikpICQ8IC1vICRACitAQCAtNDAsNiArNTIsODAgQEAgJChvYmopL2Zp
eGRlcDogJChmaXhkZXAtb2JqcykKKyAkKGZpeGRlcC1vYmpzKTogJChzcmMpL2ZpeGRlcC5jCisg
CSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdT
XyQoQEYpKSAtYyAkPCAtbyAkQAorIAorKyMjIyMjCisrIyBDb21waWxlIHByb2dyYW1zIG9uIHRo
ZSBob3N0CisrCisrIyBDcmVhdGUgZXhlY3V0YWJsZSBmcm9tIGEgc2luZ2xlIC5jIGZpbGUKKysj
IGhvc3QtY3NpbmdsZSAtPiBFeGVjdXRhYmxlCisrcXVpZXRfY21kX2hvc3QtY3NpbmdsZSAJPSBI
T1NUQ0MgICRACisrICAgICAgY21kX2hvc3QtY3NpbmdsZQk9ICQoSE9TVENDKSAkKGhvc3RjX2Zs
YWdzKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkPCBcCisrCQkkKEhPU1RMRExJQlMpICQoSE9TVExE
TElCU18kKEBGKSkKKyskKGhvc3QtY3NpbmdsZSk6ICQob2JqKS8lOiAkKHNyYykvJS5jICQob2Jq
KS9maXhkZXAgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3NpbmdsZSkKKysK
KysjIExpbmsgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiBsaXN0IG9mIC5vIGZpbGVzLCBhbGwgcGxh
aW4gYworKyMgaG9zdC1jbXVsdGkgLT4gZXhlY3V0YWJsZQorK3F1aWV0X2NtZF9ob3N0LWNtdWx0
aQk9IEhPU1RMRCAgJEAKKysgICAgICBjbWRfaG9zdC1jbXVsdGkJPSAkKEhPU1RDQykgJChob3N0
Y19mbGFncykgLW8gJEAgXAorKwkJCSAgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMp
KSBcCisrCQkJICAkKEhPU1RfTERGTEFHUykgJChIT1NUTERMSUJTXyQoQEYpKQorKyQoaG9zdC1j
bXVsdGkpOiAkKG9iaikvZml4ZGVwIEZPUkNFCisrCSQoY2FsbCBpZl9jaGFuZ2VkLGhvc3QtY211
bHRpKQorKyQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWNtdWx0aSksICwgLW9ianMpCisrCisr
CisrIyBDcmVhdGUgLm8gZmlsZSBmcm9tIGEgc2luZ2xlIC5jIGZpbGUKKysjIGhvc3QtY29ianMg
LT4gLm8KKytxdWlldF9jbWRfaG9zdC1jb2Jqcwk9IEhPU1RDQyAgJEAKKysgICAgICBjbWRfaG9z
dC1jb2Jqcwk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RDRkxBR1NfJChARikpXAor
KwkJCSAgLWMgLW8gJEAgJDwKKyskKGZpbHRlci1vdXQgJS50YWIubywgJChmaWx0ZXItb3V0ICUu
bGV4Lm8sJChob3N0LWNvYmpzKSkpOiAkKG9iaikvJS5vOlwKKysJCSQoc3JjKS8lLmMgJChvYmop
L2ZpeGRlcCBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykKKysKKysk
KGZpbHRlciAlLmxleC5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikvJS5sZXgubzogICQob2JqKS8l
LmxleC5jICQob2JqKS9maXhkZXAgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3Qt
Y29ianMpCisrCisrJChmaWx0ZXIgJS50YWIubywkKGhvc3QtY29ianMpKTogJChvYmopLyUudGFi
Lm86ICAkKG9iaikvJS50YWIuYyAkKG9iaikvZml4ZGVwIEZPUkNFCisrCSQoY2FsbCBpZl9jaGFu
Z2VkX2RlcCxob3N0LWNvYmpzKQorKworKyMgTGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxp
c3Qgb2YgLm8gZmlsZXMsIGEgbWl4dHVyZSBvZiAuYyBhbmQgLmNjCisrIyBob3N0LWN4eG11bHRp
IC0+IGV4ZWN1dGFibGUKKytxdWlldF9jbWRfaG9zdC1jeHhtdWx0aQk9IEhPU1RMRCAgJEAKKysg
ICAgICBjbWRfaG9zdC1jeHhtdWx0aQk9ICQoSE9TVENYWCkgJChIT1NUTERGTEFHUykgLW8gJEBc
CisrCQkJICAkKGZvcmVhY2ggbyxvYmpzIGN4eG9ianMsXAorKwkJCSAgJChhZGRwcmVmaXggJChv
YmopLywkKCQoQEYpLSQobykpKSkgXAorKwkJCSAgJChIT1NUTERMSUJTKSAkKEhPU1RMRExJQlNf
JChARikpCisrJChob3N0LWN4eG11bHRpKTogRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWQsaG9z
dC1jeHhtdWx0aSkKKyskKGNhbGwgbXVsdGlfZGVwZW5kLCQoaG9zdC1jeHhtdWx0aSksICwgLW9i
anMgLWN4eG9ianMpCisrCisrCisrIyBDcmVhdGUgLm8gZmlsZSBmcm9tIGEgc2luZ2xlIC5jYyAo
QysrKSBmaWxlCisrcXVpZXRfY21kX2hvc3QtY3h4b2Jqcwk9IEhPU1RDWFggJEAKKysgICAgICBj
bWRfaG9zdC1jeHhvYmpzCT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3MpICQoSE9TVENYWEZM
QUdTXyQoQEYpKSBcCisrCQkJICAtYyAtbyAkQCAkPAorKyQoaG9zdC1jeHhvYmpzKTogJChvYmop
LyUubzogJChzcmMpLyUuY2MgRk9SQ0UKKysJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3h4
b2JqcykKKysKKysjIENvbXBpbGUgLmMgZmlsZSwgY3JlYXRlIHBvc2l0aW9uIGluZGVwZW5kZW50
IC5vIGZpbGUKKysjIGhvc3QtY3Nob2JqcyAtPiAubworK3F1aWV0X2NtZF9ob3N0LWNzaG9ianMJ
PSBIT1NUQ0MgIC1mUElDICRACisrICAgICAgY21kX2hvc3QtY3Nob2Jqcwk9ICQoSE9TVENDKSAk
KGhvc3RjX2ZsYWdzKSAtZlBJQyAtYyAtbyAkQCAkPAorKyQoaG9zdC1jc2hvYmpzKTogJChvYmop
LyUubzogJChzcmMpLyUuYyBGT1JDRQorKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jc2hv
YmpzKQorKworKyMgQ29tcGlsZSAuYyBmaWxlLCBjcmVhdGUgcG9zaXRpb24gaW5kZXBlbmRlbnQg
Lm8gZmlsZQorKyMgTm90ZSB0aGF0IHBsdWdpbiBjYXBhYmxlIGdjYyB2ZXJzaW9ucyBjYW4gYmUg
ZWl0aGVyIEMgb3IgQysrIGJhc2VkCisrIyB0aGVyZWZvcmUgcGx1Z2luIHNvdXJjZSBmaWxlcyBo
YXZlIHRvIGJlIGNvbXBpbGFibGUgaW4gYm90aCBDIGFuZCBDKysgbW9kZS4KKysjIFRoaXMgaXMg
d2h5IGEgQysrIGNvbXBpbGVyIGlzIGludm9rZWQgb24gYSAuYyBmaWxlLgorKyMgaG9zdC1jeHhz
aG9ianMgLT4gLm8KKytxdWlldF9jbWRfaG9zdC1jeHhzaG9ianMJPSBIT1NUQ1hYIC1mUElDICRA
CisrICAgICAgY21kX2hvc3QtY3h4c2hvYmpzCT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3Mp
IC1mUElDIC1jIC1vICRAICQ8CisrJChob3N0LWN4eHNob2Jqcyk6ICQob2JqKS8lLm86ICQoc3Jj
KS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQorKwlAZWNobyB0ZXN0LS0kQAorKwkkKGNhbGwgaWZf
Y2hhbmdlZF9kZXAsaG9zdC1jeHhzaG9ianMpCisrCisgY2xlYW46CisgCSQoUSlybSAtZiAkKGFk
ZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQorIGRpc3RjbGVhbjogY2xlYW4KZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcg
Yi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOC1maXhkZXAtYW5kLWNvbmZpZy1mbGFnCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2EzNTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOC1maXhkZXAtYW5kLWNvbmZpZy1mbGFnCkBAIC0w
LDAgKzEsMTkgQEAKK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJy
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icgoraW5kZXggMjlkZWU1ZS4uOWMxMTI5
MyAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKKysrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIKK0BAIC00Miw5ICs0MiwxMyBAQCBob3N0LWNv
YmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNvYmpzKSkKKyBob3N0LWN4eG9ianMg
Oj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4b2JqcykpCisgZml4ZGVwLW9ianMgOj0g
JChvYmopL2ZpeGRlcC5vCisgCistSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJ
R189XCJcIgorK0hPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKHNyYykgLUkkKG9iaikgLURDT05GSUdf
PVwiXCIKKyAKKytfaG9zdGNfZmxhZ3MgPSAkKEhPU1RDRkxBR1MpICQoSE9TVF9FWFRSQUNGTEFH
UykgJChIT1NUQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykKKytfaG9zdGN4eF9mbGFncyA9ICQoSE9T
VENYWEZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoYmFzZXRhcmdl
dCkubykKKyAKKytob3N0Y19mbGFncyAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y19m
bGFncykKKytob3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y3h4X2Zs
YWdzKQorIAorICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpCisgCSQoSE9TVENDKSAkKEhP
U1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAkPCAtbyAk
QApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDktc3VwcG9ydC1nbG9iLWlu
LWtjb25maWcgYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2ItaW4ta2Nv
bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzU3YzIyCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDktc3VwcG9ydC1nbG9iLWluLWtj
b25maWcKQEAgLTAsMCArMSw3MCBAQAorZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
bGV4ZXIubCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubAoraW5kZXggNjM1NGM5MC4uYzVh
Y2IzMiAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubAorKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9sZXhlci5sCitAQCAtOCw2ICs4LDcgQEAKKyAleworIAorICNpbmNs
dWRlIDxhc3NlcnQuaD4KKysjaW5jbHVkZSA8Z2xvYi5oPgorICNpbmNsdWRlIDxsaW1pdHMuaD4K
KyAjaW5jbHVkZSA8c3RkaW8uaD4KKyAjaW5jbHVkZSA8c3RkbGliLmg+CitAQCAtNDQyLDYgKzQ0
MywzMiBAQCB2b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpCisgCWN1cnJlbnRf
ZmlsZSA9IGZpbGU7CisgfQorIAorK3ZvaWQgemNvbmZfbmV4dGZpbGVzKGNvbnN0IGNoYXIgKndp
bGRjYXJkKQorK3sKKysJZ2xvYl90IGcgPSB7MH07CisrCWNoYXIgKip3OworKwlpbnQgaTsKKysK
KysJaWYgKGdsb2Iod2lsZGNhcmQsIDAsIE5VTEwsICZnKSAhPSAwKSB7CisrCQlyZXR1cm47Cisr
CX0KKysJaWYgKGcuZ2xfcGF0aHYgPT0gTlVMTCkgeworKwkJZ2xvYmZyZWUoJmcpOworKwkJcmV0
dXJuOworKwl9CisrCisrCS8qIHdvcmtpbmcgdGhyb3VnaCBmaWxlcyBiYWNrd2FyZHMsIHNpbmNl
CisrCSAqIHdlJ3JlIGZpcnN0IHB1c2hpbmcgdGhlbSBvbiBhIHN0YWNrCisrCSAqIGJlZm9yZSBh
Y3R1YWxseSBoYW5kbGluZyB0aGVtLgorKwkgKi8KKysJZm9yIChpID0gZy5nbF9wYXRoYzsgaSA+
IDA7IGktLSkgeworKwkJdyA9ICZnLmdsX3BhdGh2W2kgLSAxXTsKKysJCXpjb25mX25leHRmaWxl
KCp3KTsKKysJfQorKworKwlnbG9iZnJlZSgmZyk7CisrfQorKworIHN0YXRpYyB2b2lkIHpjb25m
X2VuZGZpbGUodm9pZCkKKyB7CisgCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKK2RpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaAor
aW5kZXggY2JjNzY1OC4uNjlkMmM3NyAxMDA2NDQKKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
bGtjLmgKKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgKK0BAIC00NCw2ICs0NCw3IEBA
IHZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpOworIEZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNo
YXIgKm5hbWUpOworIHZvaWQgemNvbmZfaW5pdHNjYW4oY29uc3QgY2hhciAqbmFtZSk7Cisgdm9p
ZCB6Y29uZl9uZXh0ZmlsZShjb25zdCBjaGFyICpuYW1lKTsKKyt2b2lkIHpjb25mX25leHRmaWxl
cyhjb25zdCBjaGFyICpuYW1lKTsKKyBpbnQgemNvbmZfbGluZW5vKHZvaWQpOworIGNvbnN0IGNo
YXIgKnpjb25mX2N1cm5hbWUodm9pZCk7CisgCitkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXJzZXIueSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkKK2luZGV4IDYwOTM2
YzcuLjk1NzAwZjggMTAwNjQ0CistLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55Cisr
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55CitAQCAtMzY2LDcgKzM2Niw3IEBAIG1l
bnVfb3B0aW9uX2xpc3Q6Cisgc291cmNlX3N0bXQ6IFRfU09VUkNFIHByb21wdCBUX0VPTAorIHsK
KyAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c291cmNlICVzXG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpLCAkMik7CistCXpjb25mX25leHRmaWxlKCQyKTsKKysJemNvbmZf
bmV4dGZpbGVzKCQyKTsKKyAJZnJlZSgkMik7CisgfTsKKyAKZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy9wcmVwcm9jZXNzLmMgYi9zdXBwb3J0L2tjb25maWcvcHJlcHJvY2Vzcy5jCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5MmRmYmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9zdXBwb3J0L2tjb25maWcvcHJlcHJvY2Vzcy5jCkBAIC0wLDAgKzEsNTczIEBACisvLyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorLy8KKy8vIENvcHlyaWdodCAoQykgMjAxOCBN
YXNhaGlybyBZYW1hZGEgPHlhbWFkYS5tYXNhaGlyb0Bzb2Npb25leHQuY29tPgorCisjaW5jbHVk
ZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworI2luY2x1ZGUgImxpc3QuaCIKKyNpbmNsdWRlICJsa2MuaCIKKworI2RlZmluZSBBUlJB
WV9TSVpFKGFycikJCShzaXplb2YoYXJyKSAvIHNpemVvZigoYXJyKVswXSkpCisKK3N0YXRpYyBj
aGFyICpleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhjb25zdCBjaGFyICppbiwgaW50IGFyZ2MsIGNo
YXIgKmFyZ3ZbXSk7CisKK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgcHBl
cnJvcihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJZnByaW50
ZihzdGRlcnIsICIlczolZDogIiwgY3VycmVudF9maWxlLT5uYW1lLCB5eWxpbmVubyk7CisJdmFf
c3RhcnQoYXAsIGZvcm1hdCk7CisJdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKwl2YV9l
bmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKKworCWV4aXQoMSk7Cit9CisKKy8qCisg
KiBFbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAqLworc3RhdGljIExJU1RfSEVBRChlbnZfbGlzdCk7
CisKK3N0cnVjdCBlbnYgeworCWNoYXIgKm5hbWU7CisJY2hhciAqdmFsdWU7CisJc3RydWN0IGxp
c3RfaGVhZCBub2RlOworfTsKKworc3RhdGljIHZvaWQgZW52X2FkZChjb25zdCBjaGFyICpuYW1l
LCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgZW52ICplOworCisJZSA9IHhtYWxsb2Mo
c2l6ZW9mKCplKSk7CisJZS0+bmFtZSA9IHhzdHJkdXAobmFtZSk7CisJZS0+dmFsdWUgPSB4c3Ry
ZHVwKHZhbHVlKTsKKworCWxpc3RfYWRkX3RhaWwoJmUtPm5vZGUsICZlbnZfbGlzdCk7Cit9CisK
K3N0YXRpYyB2b2lkIGVudl9kZWwoc3RydWN0IGVudiAqZSkKK3sKKwlsaXN0X2RlbCgmZS0+bm9k
ZSk7CisJZnJlZShlLT5uYW1lKTsKKwlmcmVlKGUtPnZhbHVlKTsKKwlmcmVlKGUpOworfQorCisv
KiBUaGUgcmV0dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZSAqLworc3RhdGlj
IGNoYXIgKmVudl9leHBhbmQoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgZW52ICplOwor
CWNvbnN0IGNoYXIgKnZhbHVlOworCisJaWYgKCEqbmFtZSkKKwkJcmV0dXJuIE5VTEw7CisKKwls
aXN0X2Zvcl9lYWNoX2VudHJ5KGUsICZlbnZfbGlzdCwgbm9kZSkgeworCQlpZiAoIXN0cmNtcChu
YW1lLCBlLT5uYW1lKSkKKwkJCXJldHVybiB4c3RyZHVwKGUtPnZhbHVlKTsKKwl9CisKKwl2YWx1
ZSA9IGdldGVudihuYW1lKTsKKwlpZiAoIXZhbHVlKQorCQlyZXR1cm4gTlVMTDsKKworCS8qCisJ
ICogV2UgbmVlZCB0byByZW1lbWJlciBhbGwgcmVmZXJlbmNlZCBlbnZpcm9ubWVudCB2YXJpYWJs
ZXMuCisJICogVGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IHRvIGluY2x1ZGUvY29uZmlnL2F1dG8u
Y29uZi5jbWQKKwkgKi8KKwllbnZfYWRkKG5hbWUsIHZhbHVlKTsKKworCXJldHVybiB4c3RyZHVw
KHZhbHVlKTsKK30KKwordm9pZCBlbnZfd3JpdGVfZGVwKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmF1
dG9jb25maWdfbmFtZSkKK3sKKwlzdHJ1Y3QgZW52ICplLCAqdG1wOworCisJbGlzdF9mb3JfZWFj
aF9lbnRyeV9zYWZlKGUsIHRtcCwgJmVudl9saXN0LCBub2RlKSB7CisJCWZwcmludGYoZiwgImlm
bmVxIFwiJCglcylcIiBcIiVzXCJcbiIsIGUtPm5hbWUsIGUtPnZhbHVlKTsKKwkJZnByaW50Zihm
LCAiJXM6IEZPUkNFXG4iLCBhdXRvY29uZmlnX25hbWUpOworCQlmcHJpbnRmKGYsICJlbmRpZlxu
Iik7CisJCWVudl9kZWwoZSk7CisJfQorfQorCisvKgorICogQnVpbHQtaW4gZnVuY3Rpb25zCisg
Ki8KK3N0cnVjdCBmdW5jdGlvbiB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQg
bWluX2FyZ3M7CisJdW5zaWduZWQgaW50IG1heF9hcmdzOworCWNoYXIgKigqZnVuYykoaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSk7Cit9OworCitzdGF0aWMgY2hhciAqZG9fZXJyb3JfaWYoaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAieSIpKQorCQlwcGVy
cm9yKCIlcyIsIGFyZ3ZbMV0pOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICpk
b19maWxlbmFtZShpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXJldHVybiB4c3RyZHVwKGN1
cnJlbnRfZmlsZS0+bmFtZSk7Cit9CisKK3N0YXRpYyBjaGFyICpkb19pbmZvKGludCBhcmdjLCBj
aGFyICphcmd2W10pCit7CisJcHJpbnRmKCIlc1xuIiwgYXJndlswXSk7CisKKwlyZXR1cm4geHN0
cmR1cCgiIik7Cit9CisKK3N0YXRpYyBjaGFyICpkb19saW5lbm8oaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkKK3sKKwljaGFyIGJ1ZlsxNl07CisKKwlzcHJpbnRmKGJ1ZiwgIiVkIiwgeXlsaW5lbm8p
OworCisJcmV0dXJuIHhzdHJkdXAoYnVmKTsKK30KKworc3RhdGljIGNoYXIgKmRvX3NoZWxsKGlu
dCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJRklMRSAqcDsKKwljaGFyIGJ1ZlsyNTZdOworCWNo
YXIgKmNtZDsKKwlzaXplX3QgbnJlYWQ7CisJaW50IGk7CisKKwljbWQgPSBhcmd2WzBdOworCisJ
cCA9IHBvcGVuKGNtZCwgInIiKTsKKwlpZiAoIXApIHsKKwkJcGVycm9yKGNtZCk7CisJCWV4aXQo
MSk7CisJfQorCisJbnJlYWQgPSBmcmVhZChidWYsIDEsIHNpemVvZihidWYpLCBwKTsKKwlpZiAo
bnJlYWQgPT0gc2l6ZW9mKGJ1ZikpCisJCW5yZWFkLS07CisKKwkvKiByZW1vdmUgdHJhaWxpbmcg
bmV3IGxpbmVzICovCisJd2hpbGUgKG5yZWFkID4gMCAmJiBidWZbbnJlYWQgLSAxXSA9PSAnXG4n
KQorCQlucmVhZC0tOworCisJYnVmW25yZWFkXSA9IDA7CisKKwkvKiByZXBsYWNlIGEgbmV3IGxp
bmUgd2l0aCBhIHNwYWNlICovCisJZm9yIChpID0gMDsgaSA8IG5yZWFkOyBpKyspIHsKKwkJaWYg
KGJ1ZltpXSA9PSAnXG4nKQorCQkJYnVmW2ldID0gJyAnOworCX0KKworCWlmIChwY2xvc2UocCkg
PT0gLTEpIHsKKwkJcGVycm9yKGNtZCk7CisJCWV4aXQoMSk7CisJfQorCisJcmV0dXJuIHhzdHJk
dXAoYnVmKTsKK30KKworc3RhdGljIGNoYXIgKmRvX3dhcm5pbmdfaWYoaW50IGFyZ2MsIGNoYXIg
KmFyZ3ZbXSkKK3sKKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAieSIpKQorCQlmcHJpbnRmKHN0ZGVy
ciwgIiVzOiVkOiAlc1xuIiwKKwkJCWN1cnJlbnRfZmlsZS0+bmFtZSwgeXlsaW5lbm8sIGFyZ3Zb
MV0pOworCisJcmV0dXJuIHhzdHJkdXAoIiIpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZ1
bmN0aW9uIGZ1bmN0aW9uX3RhYmxlW10gPSB7CisJLyogTmFtZQkJTUlOCU1BWAlGdW5jdGlvbiAq
LworCXsgImVycm9yLWlmIiwJMiwJMiwJZG9fZXJyb3JfaWYgfSwKKwl7ICJmaWxlbmFtZSIsCTAs
CTAsCWRvX2ZpbGVuYW1lIH0sCisJeyAiaW5mbyIsCTEsCTEsCWRvX2luZm8gfSwKKwl7ICJsaW5l
bm8iLAkwLAkwLAlkb19saW5lbm8gfSwKKwl7ICJzaGVsbCIsCTEsCTEsCWRvX3NoZWxsIH0sCisJ
eyAid2FybmluZy1pZiIsCTIsCTIsCWRvX3dhcm5pbmdfaWYgfSwKK307CisKKyNkZWZpbmUgRlVO
Q1RJT05fTUFYX0FSR1MJCTE2CisKK3N0YXRpYyBjaGFyICpmdW5jdGlvbl9leHBhbmQoY29uc3Qg
Y2hhciAqbmFtZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwljb25zdCBzdHJ1Y3QgZnVu
Y3Rpb24gKmY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmdW5jdGlv
bl90YWJsZSk7IGkrKykgeworCQlmID0gJmZ1bmN0aW9uX3RhYmxlW2ldOworCQlpZiAoc3RyY21w
KGYtPm5hbWUsIG5hbWUpKQorCQkJY29udGludWU7CisKKwkJaWYgKGFyZ2MgPCBmLT5taW5fYXJn
cykKKwkJCXBwZXJyb3IoInRvbyBmZXcgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCB0byAnJXMn
IiwKKwkJCQluYW1lKTsKKworCQlpZiAoYXJnYyA+IGYtPm1heF9hcmdzKQorCQkJcHBlcnJvcigi
dG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCB0byAnJXMnIiwKKwkJCQluYW1lKTsK
KworCQlyZXR1cm4gZi0+ZnVuYyhhcmdjLCBhcmd2KTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30K
KworLyoKKyAqIFZhcmlhYmxlcyAoYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMpCisgKi8KK3N0
YXRpYyBMSVNUX0hFQUQodmFyaWFibGVfbGlzdCk7CisKK3N0cnVjdCB2YXJpYWJsZSB7CisJY2hh
ciAqbmFtZTsKKwljaGFyICp2YWx1ZTsKKwllbnVtIHZhcmlhYmxlX2ZsYXZvciBmbGF2b3I7CisJ
aW50IGV4cF9jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9OworCitzdGF0aWMgc3Ry
dWN0IHZhcmlhYmxlICp2YXJpYWJsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1
Y3QgdmFyaWFibGUgKnY7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHYsICZ2YXJpYWJsZV9saXN0
LCBub2RlKSB7CisJCWlmICghc3RyY21wKG5hbWUsIHYtPm5hbWUpKQorCQkJcmV0dXJuIHY7CisJ
fQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBjaGFyICp2YXJpYWJsZV9leHBhbmQoY29u
c3QgY2hhciAqbmFtZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3QgdmFyaWFi
bGUgKnY7CisJY2hhciAqcmVzOworCisJdiA9IHZhcmlhYmxlX2xvb2t1cChuYW1lKTsKKwlpZiAo
IXYpCisJCXJldHVybiBOVUxMOworCisJaWYgKGFyZ2MgPT0gMCAmJiB2LT5leHBfY291bnQpCisJ
CXBwZXJyb3IoIlJlY3Vyc2l2ZSB2YXJpYWJsZSAnJXMnIHJlZmVyZW5jZXMgaXRzZWxmIChldmVu
dHVhbGx5KSIsCisJCQluYW1lKTsKKworCWlmICh2LT5leHBfY291bnQgPiAxMDAwKQorCQlwcGVy
cm9yKCJUb28gZGVlcCByZWN1cnNpdmUgZXhwYW5zaW9uIik7CisKKwl2LT5leHBfY291bnQrKzsK
KworCWlmICh2LT5mbGF2b3IgPT0gVkFSX1JFQ1VSU0lWRSkKKwkJcmVzID0gZXhwYW5kX3N0cmlu
Z193aXRoX2FyZ3Modi0+dmFsdWUsIGFyZ2MsIGFyZ3YpOworCWVsc2UKKwkJcmVzID0geHN0cmR1
cCh2LT52YWx1ZSk7CisKKwl2LT5leHBfY291bnQtLTsKKworCXJldHVybiByZXM7Cit9CisKK3Zv
aWQgdmFyaWFibGVfYWRkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLAorCQkg
IGVudW0gdmFyaWFibGVfZmxhdm9yIGZsYXZvcikKK3sKKwlzdHJ1Y3QgdmFyaWFibGUgKnY7CisJ
Y2hhciAqbmV3X3ZhbHVlOworCWJvb2wgYXBwZW5kID0gZmFsc2U7CisKKwl2ID0gdmFyaWFibGVf
bG9va3VwKG5hbWUpOworCWlmICh2KSB7CisJCS8qIEZvciBkZWZpbmVkIHZhcmlhYmxlcywgKz0g
aW5oZXJpdHMgdGhlIGV4aXN0aW5nIGZsYXZvciAqLworCQlpZiAoZmxhdm9yID09IFZBUl9BUFBF
TkQpIHsKKwkJCWZsYXZvciA9IHYtPmZsYXZvcjsKKwkJCWFwcGVuZCA9IHRydWU7CisJCX0gZWxz
ZSB7CisJCQlmcmVlKHYtPnZhbHVlKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIEZvciB1bmRlZmlu
ZWQgdmFyaWFibGVzLCArPSBhc3N1bWVzIHRoZSByZWN1cnNpdmUgZmxhdm9yICovCisJCWlmIChm
bGF2b3IgPT0gVkFSX0FQUEVORCkKKwkJCWZsYXZvciA9IFZBUl9SRUNVUlNJVkU7CisKKwkJdiA9
IHhtYWxsb2Moc2l6ZW9mKCp2KSk7CisJCXYtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOworCQl2LT5l
eHBfY291bnQgPSAwOworCQlsaXN0X2FkZF90YWlsKCZ2LT5ub2RlLCAmdmFyaWFibGVfbGlzdCk7
CisJfQorCisJdi0+Zmxhdm9yID0gZmxhdm9yOworCisJaWYgKGZsYXZvciA9PSBWQVJfU0lNUExF
KQorCQluZXdfdmFsdWUgPSBleHBhbmRfc3RyaW5nKHZhbHVlKTsKKwllbHNlCisJCW5ld192YWx1
ZSA9IHhzdHJkdXAodmFsdWUpOworCisJaWYgKGFwcGVuZCkgeworCQl2LT52YWx1ZSA9IHhyZWFs
bG9jKHYtPnZhbHVlLAorCQkJCSAgICBzdHJsZW4odi0+dmFsdWUpICsgc3RybGVuKG5ld192YWx1
ZSkgKyAyKTsKKwkJc3RyY2F0KHYtPnZhbHVlLCAiICIpOworCQlzdHJjYXQodi0+dmFsdWUsIG5l
d192YWx1ZSk7CisJCWZyZWUobmV3X3ZhbHVlKTsKKwl9IGVsc2UgeworCQl2LT52YWx1ZSA9IG5l
d192YWx1ZTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHZhcmlhYmxlX2RlbChzdHJ1Y3QgdmFyaWFi
bGUgKnYpCit7CisJbGlzdF9kZWwoJnYtPm5vZGUpOworCWZyZWUodi0+bmFtZSk7CisJZnJlZSh2
LT52YWx1ZSk7CisJZnJlZSh2KTsKK30KKwordm9pZCB2YXJpYWJsZV9hbGxfZGVsKHZvaWQpCit7
CisJc3RydWN0IHZhcmlhYmxlICp2LCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZl
KHYsIHRtcCwgJnZhcmlhYmxlX2xpc3QsIG5vZGUpCisJCXZhcmlhYmxlX2RlbCh2KTsKK30KKwor
LyoKKyAqIEV2YWx1YXRlIGEgY2xhdXNlIHdpdGggYXJndW1lbnRzLiAgYXJnYy9hcmd2IGFyZSBh
cmd1bWVudHMgZnJvbSB0aGUgdXBwZXIKKyAqIGZ1bmN0aW9uIGNhbGwuCisgKgorICogUmV0dXJu
ZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBkb25lCisgKi8KK3N0YXRpYyBjaGFyICpldmFs
X2NsYXVzZShjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIGludCBhcmdjLCBjaGFyICphcmd2
W10pCit7CisJY2hhciAqdG1wLCAqbmFtZSwgKnJlcywgKmVuZHB0ciwgKnByZXYsICpwOworCWlu
dCBuZXdfYXJnYyA9IDA7CisJY2hhciAqbmV3X2FyZ3ZbRlVOQ1RJT05fTUFYX0FSR1NdOworCWlu
dCBuZXN0ID0gMDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG47CisKKwl0bXAgPSB4c3RybmR1
cChzdHIsIGxlbik7CisKKwkvKgorCSAqIElmIHZhcmlhYmxlIG5hbWUgaXMgJzEnLCAnMicsIGV0
Yy4gIEl0IGlzIGdlbmVyYWxseSBhbiBhcmd1bWVudAorCSAqIGZyb20gYSB1c2VyLWZ1bmN0aW9u
IGNhbGwgKGkuZS4gbG9jYWwtc2NvcGUgdmFyaWFibGUpLiAgSWYgbm90CisJICogYXZhaWxhYmxl
LCB0aGVuIGxvb2stdXAgZ2xvYmFsLXNjb3BlIHZhcmlhYmxlcy4KKwkgKi8KKwluID0gc3RydG91
bCh0bXAsICZlbmRwdHIsIDEwKTsKKwlpZiAoISplbmRwdHIgJiYgbiA+IDAgJiYgbiA8PSBhcmdj
KSB7CisJCXJlcyA9IHhzdHJkdXAoYXJndltuIC0gMV0pOworCQlnb3RvIGZyZWVfdG1wOworCX0K
KworCXByZXYgPSBwID0gdG1wOworCisJLyoKKwkgKiBTcGxpdCBpbnRvIHRva2VucworCSAqIFRo
ZSBmdW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBhIGNvbW1hLgor
CSAqIEZvciBleGFtcGxlLCBpZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBsaWtlIHRoaXM6CisJICog
ICAkKGZvbywkKHgpLCQoeSkpCisJICoKKwkgKiBUaGUgaW5wdXQgc3RyaW5nIGZvciB0aGlzIGhl
bHBlciBzaG91bGQgYmU6CisJICogICBmb28sJCh4KSwkKHkpCisJICoKKwkgKiBhbmQgc3BsaXQg
aW50bzoKKwkgKiAgIG5ld19hcmd2WzBdID0gJ2ZvbycKKwkgKiAgIG5ld19hcmd2WzFdID0gJyQo
eCknCisJICogICBuZXdfYXJndlsyXSA9ICckKHkpJworCSAqLworCXdoaWxlICgqcCkgeworCQlp
ZiAobmVzdCA9PSAwICYmICpwID09ICcsJykgeworCQkJKnAgPSAwOworCQkJaWYgKG5ld19hcmdj
ID49IEZVTkNUSU9OX01BWF9BUkdTKQorCQkJCXBwZXJyb3IoInRvbyBtYW55IGZ1bmN0aW9uIGFy
Z3VtZW50cyIpOworCQkJbmV3X2FyZ3ZbbmV3X2FyZ2MrK10gPSBwcmV2OworCQkJcHJldiA9IHAg
KyAxOworCQl9IGVsc2UgaWYgKCpwID09ICcoJykgeworCQkJbmVzdCsrOworCQl9IGVsc2UgaWYg
KCpwID09ICcpJykgeworCQkJbmVzdC0tOworCQl9CisKKwkJcCsrOworCX0KKwluZXdfYXJndltu
ZXdfYXJnYysrXSA9IHByZXY7CisKKwkvKgorCSAqIFNoaWZ0IGFyZ3VtZW50cworCSAqIG5ld19h
cmd2WzBdIHJlcHJlc2VudHMgYSBmdW5jdGlvbiBuYW1lIG9yIGEgdmFyaWFibGUgbmFtZS4gIFB1
dCBpdAorCSAqIGludG8gJ25hbWUnLCB0aGVuIHNoaWZ0IHRoZSByZXN0IG9mIHRoZSBhcmd1bWVu
dHMuICBUaGlzIHNpbXBsaWZpZXMKKwkgKiAnY29uc3QnIGhhbmRsaW5nLgorCSAqLworCW5hbWUg
PSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdfYXJndlswXSwgYXJnYywgYXJndik7CisJbmV3
X2FyZ2MtLTsKKwlmb3IgKGkgPSAwOyBpIDwgbmV3X2FyZ2M7IGkrKykKKwkJbmV3X2FyZ3ZbaV0g
PSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdfYXJndltpICsgMV0sCisJCQkJCQkgICAgICBh
cmdjLCBhcmd2KTsKKworCS8qIFNlYXJjaCBmb3IgdmFyaWFibGVzICovCisJcmVzID0gdmFyaWFi
bGVfZXhwYW5kKG5hbWUsIG5ld19hcmdjLCBuZXdfYXJndik7CisJaWYgKHJlcykKKwkJZ290byBm
cmVlOworCisJLyogTG9vayBmb3IgYnVpbHQtaW4gZnVuY3Rpb25zICovCisJcmVzID0gZnVuY3Rp
b25fZXhwYW5kKG5hbWUsIG5ld19hcmdjLCBuZXdfYXJndik7CisJaWYgKHJlcykKKwkJZ290byBm
cmVlOworCisJLyogTGFzdCwgdHJ5IGVudmlyb25tZW50IHZhcmlhYmxlICovCisJaWYgKG5ld19h
cmdjID09IDApIHsKKwkJcmVzID0gZW52X2V4cGFuZChuYW1lKTsKKwkJaWYgKHJlcykKKwkJCWdv
dG8gZnJlZTsKKwl9CisKKwlyZXMgPSB4c3RyZHVwKCIiKTsKK2ZyZWU6CisJZm9yIChpID0gMDsg
aSA8IG5ld19hcmdjOyBpKyspCisJCWZyZWUobmV3X2FyZ3ZbaV0pOworCWZyZWUobmFtZSk7Citm
cmVlX3RtcDoKKwlmcmVlKHRtcCk7CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogRXhwYW5k
IGEgc3RyaW5nIHRoYXQgZm9sbG93cyAnJCcKKyAqCisgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGlu
cHV0IHN0cmluZyBpcworICogICAgICgkKEZPTykkKCQoQkFSKSkpJChCQVopCisgKiB0aGlzIGhl
bHBlciBldmFsdWF0ZXMKKyAqICAgICAkKCQoRk9PKSQoJChCQVIpKSkKKyAqIGFuZCByZXR1cm5z
IGEgbmV3IHN0cmluZyBjb250YWluaW5nIHRoZSBleHBhbnNpb24gKG5vdGUgdGhhdCB0aGUgc3Ry
aW5nIGlzCisgKiByZWN1cnNpdmVseSBleHBhbmRlZCksIGFsc28gYWR2YW5jaW5nICdzdHInIHRv
IHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3RlcgorICogYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcg
Y2xvc2luZyBwYXJlbnRoZXNpcywgaW4gdGhpcyBjYXNlLCAqc3RyIHdpbGwgYmUKKyAqICAgICAk
KEJBUikKKyAqLworc3RhdGljIGNoYXIgKmV4cGFuZF9kb2xsYXJfd2l0aF9hcmdzKGNvbnN0IGNo
YXIgKipzdHIsIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJY29uc3QgY2hhciAqcCA9ICpz
dHI7CisJY29uc3QgY2hhciAqcTsKKwlpbnQgbmVzdCA9IDA7CisKKwkvKgorCSAqIEluIEtjb25m
aWcsIHZhcmlhYmxlL2Z1bmN0aW9uIHJlZmVyZW5jZXMgYWx3YXlzIHN0YXJ0IHdpdGggIiQoIi4K
KwkgKiBOZWl0aGVyIHNpbmdsZS1sZXR0ZXIgdmFyaWFibGVzIGFzIGluICRBIG5vciBjdXJseSBi
cmFjZXMgYXMgaW4gJHtDQ30KKwkgKiBhcmUgc3VwcG9ydGVkLiAgJyQnIG5vdCBmb2xsb3dlZCBi
eSAnKCcgbG9zZXMgaXRzIHNwZWNpYWwgbWVhbmluZy4KKwkgKi8KKwlpZiAoKnAgIT0gJygnKSB7
CisJCSpzdHIgPSBwOworCQlyZXR1cm4geHN0cmR1cCgiJCIpOworCX0KKworCXArKzsKKwlxID0g
cDsKKwl3aGlsZSAoKnEpIHsKKwkJaWYgKCpxID09ICcoJykgeworCQkJbmVzdCsrOworCQl9IGVs
c2UgaWYgKCpxID09ICcpJykgeworCQkJaWYgKG5lc3QtLSA9PSAwKQorCQkJCWJyZWFrOworCQl9
CisJCXErKzsKKwl9CisKKwlpZiAoISpxKQorCQlwcGVycm9yKCJ1bnRlcm1pbmF0ZWQgcmVmZXJl
bmNlIHRvICclcyc6IG1pc3NpbmcgJyknIiwgcCk7CisKKwkvKiBBZHZhbmNlICdzdHInIHRvIGFm
dGVyIHRoZSBleHBhbmRlZCBpbml0aWFsIHBvcnRpb24gb2YgdGhlIHN0cmluZyAqLworCSpzdHIg
PSBxICsgMTsKKworCXJldHVybiBldmFsX2NsYXVzZShwLCBxIC0gcCwgYXJnYywgYXJndik7Cit9
CisKK2NoYXIgKmV4cGFuZF9kb2xsYXIoY29uc3QgY2hhciAqKnN0cikKK3sKKwlyZXR1cm4gZXhw
YW5kX2RvbGxhcl93aXRoX2FyZ3Moc3RyLCAwLCBOVUxMKTsKK30KKworc3RhdGljIGNoYXIgKl9f
ZXhwYW5kX3N0cmluZyhjb25zdCBjaGFyICoqc3RyLCBib29sICgqaXNfZW5kKShjaGFyIGMpLAor
CQkJICAgICBpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCWNvbnN0IGNoYXIgKmluLCAqcDsK
KwljaGFyICpleHBhbnNpb24sICpvdXQ7CisJc2l6ZV90IGluX2xlbiwgb3V0X2xlbjsKKworCW91
dCA9IHhtYWxsb2MoMSk7CisJKm91dCA9IDA7CisJb3V0X2xlbiA9IDE7CisKKwlwID0gaW4gPSAq
c3RyOworCisJd2hpbGUgKDEpIHsKKwkJaWYgKCpwID09ICckJykgeworCQkJaW5fbGVuID0gcCAt
IGluOworCQkJcCsrOworCQkJZXhwYW5zaW9uID0gZXhwYW5kX2RvbGxhcl93aXRoX2FyZ3MoJnAs
IGFyZ2MsIGFyZ3YpOworCQkJb3V0X2xlbiArPSBpbl9sZW4gKyBzdHJsZW4oZXhwYW5zaW9uKTsK
KwkJCW91dCA9IHhyZWFsbG9jKG91dCwgb3V0X2xlbik7CisJCQlzdHJuY2F0KG91dCwgaW4sIGlu
X2xlbik7CisJCQlzdHJjYXQob3V0LCBleHBhbnNpb24pOworCQkJZnJlZShleHBhbnNpb24pOwor
CQkJaW4gPSBwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaXNfZW5kKCpwKSkKKwkJCWJy
ZWFrOworCisJCXArKzsKKwl9CisKKwlpbl9sZW4gPSBwIC0gaW47CisJb3V0X2xlbiArPSBpbl9s
ZW47CisJb3V0ID0geHJlYWxsb2Mob3V0LCBvdXRfbGVuKTsKKwlzdHJuY2F0KG91dCwgaW4sIGlu
X2xlbik7CisKKwkvKiBBZHZhbmNlICdzdHInIHRvIHRoZSBlbmQgY2hhcmFjdGVyICovCisJKnN0
ciA9IHA7CisKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgYm9vbCBpc19lbmRfb2Zfc3RyKGNo
YXIgYykKK3sKKwlyZXR1cm4gIWM7Cit9CisKKy8qCisgKiBFeHBhbmQgdmFyaWFibGVzIGFuZCBm
dW5jdGlvbnMgaW4gdGhlIGdpdmVuIHN0cmluZy4gIFVuZGVmaW5lZCB2YXJpYWJsZXMKKyAqIGV4
cGFuZCB0byBhbiBlbXB0eSBzdHJpbmcuCisgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUg
ZnJlZWQgd2hlbiBkb25lLgorICovCitzdGF0aWMgY2hhciAqZXhwYW5kX3N0cmluZ193aXRoX2Fy
Z3MoY29uc3QgY2hhciAqaW4sIGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJcmV0dXJuIF9f
ZXhwYW5kX3N0cmluZygmaW4sIGlzX2VuZF9vZl9zdHIsIGFyZ2MsIGFyZ3YpOworfQorCitjaGFy
ICpleHBhbmRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKQoreworCXJldHVybiBleHBhbmRfc3RyaW5n
X3dpdGhfYXJncyhpbiwgMCwgTlVMTCk7Cit9CisKK3N0YXRpYyBib29sIGlzX2VuZF9vZl90b2tl
bihjaGFyIGMpCit7CisJcmV0dXJuICEoaXNhbG51bShjKSB8fCBjID09ICdfJyB8fCBjID09ICct
Jyk7Cit9CisKKy8qCisgKiBFeHBhbmQgdmFyaWFibGVzIGluIGEgdG9rZW4uICBUaGUgcGFyc2lu
ZyBzdG9wcyB3aGVuIGEgdG9rZW4gc2VwYXJhdGVyCisgKiAoaW4gbW9zdCBjYXNlcywgaXQgaXMg
YSB3aGl0ZXNwYWNlKSBpcyBlbmNvdW50ZXJlZC4gICdzdHInIGlzIHVwZGF0ZWQgdG8KKyAqIHBv
aW50IHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4KKyAqCisgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11
c3QgYmUgZnJlZWQgd2hlbiBkb25lLgorICovCitjaGFyICpleHBhbmRfb25lX3Rva2VuKGNvbnN0
IGNoYXIgKipzdHIpCit7CisJcmV0dXJuIF9fZXhwYW5kX3N0cmluZyhzdHIsIGlzX2VuZF9vZl90
b2tlbiwgMCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcWNvbmYtY2Zn
LnNoIGIvc3VwcG9ydC9rY29uZmlnL3Fjb25mLWNmZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQpp
bmRleCAwMDAwMDAwLi4wMmNjYzBhCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
L3Fjb25mLWNmZy5zaApAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKyMgU1BEWC1MaWNlbnNl
LUlkZW50aWZpZXI6IEdQTC0yLjAKKworUEtHPSJRdDVDb3JlIFF0NUd1aSBRdDVXaWRnZXRzIgor
UEtHMj0iUXRDb3JlIFF0R3VpIgorCitpZiBbIC16ICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZyki
IF07IHRoZW4KKwllY2hvID4mMiAiKiIKKwllY2hvID4mMiAiKiAnbWFrZSB4Y29uZmlnJyByZXF1
aXJlcyAncGtnLWNvbmZpZycuIFBsZWFzZSBpbnN0YWxsIGl0LiIKKwllY2hvID4mMiAiKiIKKwll
eGl0IDEKK2ZpCisKK2lmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzsgdGhlbgorCWVjaG8gY2Zs
YWdzPVwiLXN0ZD1jKysxMSAtZlBJQyAkKHBrZy1jb25maWcgLS1jZmxhZ3MgUXQ1Q29yZSBRdDVH
dWkgUXQ1V2lkZ2V0cylcIgorCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRylc
IgorCWVjaG8gbW9jPVwiJChwa2ctY29uZmlnIC0tdmFyaWFibGU9aG9zdF9iaW5zIFF0NUNvcmUp
L21vY1wiCisJZXhpdCAwCitmaQorCitpZiBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0cyOyB0aGVu
CisJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBLRzIpXCIKKwllY2hvIGxp
YnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cyKVwiCisJZWNobyBtb2M9XCIkKHBrZy1jb25m
aWcgLS12YXJpYWJsZT1tb2NfbG9jYXRpb24gUXRDb3JlKVwiCisJZXhpdCAwCitmaQorCitlY2hv
ID4mMiAiKiIKK2VjaG8gPiYyICIqIENvdWxkIG5vdCBmaW5kIFF0IHZpYSBwa2ctY29uZmlnLiIK
K2VjaG8gPiYyICIqIFBsZWFzZSBpbnN0YWxsIGVpdGhlciBRdCA0Ljggb3IgNS54LiBhbmQgbWFr
ZSBzdXJlIGl0J3MgaW4gUEtHX0NPTkZJR19QQVRIIgorZWNobyA+JjIgIioiCitleGl0IDEKZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9xY29uZi5jYyBiL3N1cHBvcnQva2NvbmZpZy9xY29u
Zi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDIxYWE2Ci0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Fjb25mLmNjCkBAIC0wLDAgKzEsMTg5NiBAQAor
Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zza2kgPGJiYXJidWxvdnNraUBnbWFpbC5jb20+CisgKi8K
KworI2luY2x1ZGUgPHFnbG9iYWwuaD4KKworI2luY2x1ZGUgPFFNYWluV2luZG93PgorI2luY2x1
ZGUgPFFMaXN0PgorI2luY2x1ZGUgPHF0ZXh0YnJvd3Nlci5oPgorI2luY2x1ZGUgPFFBY3Rpb24+
CisjaW5jbHVkZSA8UUZpbGVEaWFsb2c+CisjaW5jbHVkZSA8UU1lbnU+CisKKyNpbmNsdWRlIDxx
YXBwbGljYXRpb24uaD4KKyNpbmNsdWRlIDxxZGVza3RvcHdpZGdldC5oPgorI2luY2x1ZGUgPHF0
b29sYmFyLmg+CisjaW5jbHVkZSA8cWxheW91dC5oPgorI2luY2x1ZGUgPHFzcGxpdHRlci5oPgor
I2luY2x1ZGUgPHFsaW5lZWRpdC5oPgorI2luY2x1ZGUgPHFsYWJlbC5oPgorI2luY2x1ZGUgPHFw
dXNoYnV0dG9uLmg+CisjaW5jbHVkZSA8cW1lbnViYXIuaD4KKyNpbmNsdWRlIDxxbWVzc2FnZWJv
eC5oPgorI2luY2x1ZGUgPHFyZWdleHAuaD4KKyNpbmNsdWRlIDxxZXZlbnQuaD4KKworI2luY2x1
ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAibGtjLmgiCisjaW5jbHVkZSAicWNvbmYuaCIKKwor
I2luY2x1ZGUgInFjb25mLm1vYyIKKyNpbmNsdWRlICJpbWFnZXMuaCIKKworCitzdGF0aWMgUUFw
cGxpY2F0aW9uICpjb25maWdBcHA7CitzdGF0aWMgQ29uZmlnU2V0dGluZ3MgKmNvbmZpZ1NldHRp
bmdzOworCitRQWN0aW9uICpDb25maWdNYWluV2luZG93OjpzYXZlQWN0aW9uOworCitzdGF0aWMg
aW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgY2hhciogc3RyKQoreworCXJldHVybiBRU3Ry
aW5nOjpmcm9tTG9jYWw4Qml0KHN0cik7Cit9CisKK0NvbmZpZ1NldHRpbmdzOjpDb25maWdTZXR0
aW5ncygpCisJOiBRU2V0dGluZ3MoInVuaWtyYWZ0Lm9yZyIsICJxY29uZiIpCit7Cit9CisKKy8q
KgorICogUmVhZHMgYSBsaXN0IG9mIGludGVnZXIgdmFsdWVzIGZyb20gdGhlIGFwcGxpY2F0aW9u
IHNldHRpbmdzLgorICovCitRTGlzdDxpbnQ+IENvbmZpZ1NldHRpbmdzOjpyZWFkU2l6ZXMoY29u
c3QgUVN0cmluZyYga2V5LCBib29sICpvaykKK3sKKwlRTGlzdDxpbnQ+IHJlc3VsdDsKKworCWlm
IChjb250YWlucyhrZXkpKQorCXsKKwkJUVN0cmluZ0xpc3QgZW50cnlMaXN0ID0gdmFsdWUoa2V5
KS50b1N0cmluZ0xpc3QoKTsKKwkJUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0OworCisJCWZvciAo
aXQgPSBlbnRyeUxpc3QuYmVnaW4oKTsgaXQgIT0gZW50cnlMaXN0LmVuZCgpOyArK2l0KQorCQkJ
cmVzdWx0LnB1c2hfYmFjaygoKml0KS50b0ludCgpKTsKKworCQkqb2sgPSB0cnVlOworCX0KKwll
bHNlCisJCSpvayA9IGZhbHNlOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoqCisgKiBXcml0
ZXMgYSBsaXN0IG9mIGludGVnZXIgdmFsdWVzIHRvIHRoZSBhcHBsaWNhdGlvbiBzZXR0aW5ncy4K
KyAqLworYm9vbCBDb25maWdTZXR0aW5nczo6d3JpdGVTaXplcyhjb25zdCBRU3RyaW5nJiBrZXks
IGNvbnN0IFFMaXN0PGludD4mIHZhbHVlKQoreworCVFTdHJpbmdMaXN0IHN0cmluZ0xpc3Q7CisJ
UUxpc3Q8aW50Pjo6Q29uc3RJdGVyYXRvciBpdDsKKworCWZvciAoaXQgPSB2YWx1ZS5iZWdpbigp
OyBpdCAhPSB2YWx1ZS5lbmQoKTsgKytpdCkKKwkJc3RyaW5nTGlzdC5wdXNoX2JhY2soUVN0cmlu
Zzo6bnVtYmVyKCppdCkpOworCXNldFZhbHVlKGtleSwgc3RyaW5nTGlzdCk7CisKKwlyZXR1cm4g
dHJ1ZTsKK30KKworCisvKgorICogc2V0IHRoZSBuZXcgZGF0YQorICogVE9ETyBjaGVjayB0aGUg
dmFsdWUKKyAqLwordm9pZCBDb25maWdJdGVtOjpva1JlbmFtZShpbnQgY29sKQoreworfQorCisv
KgorICogdXBkYXRlIHRoZSBkaXNwbGF5ZWQgb2YgYSBtZW51IGVudHJ5CisgKi8KK3ZvaWQgQ29u
ZmlnSXRlbTo6dXBkYXRlTWVudSh2b2lkKQoreworCUNvbmZpZ0xpc3QqIGxpc3Q7CisJc3RydWN0
IHN5bWJvbCogc3ltOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlRU3RyaW5nIHByb21wdDsK
KwlpbnQgdHlwZTsKKwl0cmlzdGF0ZSBleHByOworCisJbGlzdCA9IGxpc3RWaWV3KCk7CisJaWYg
KGdvUGFyZW50KSB7CisJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPm1lbnVCYWNrUGl4
KTsKKwkJcHJvbXB0ID0gIi4uIjsKKwkJZ290byBzZXRfcHJvbXB0OworCX0KKworCXN5bSA9IG1l
bnUtPnN5bTsKKwlwcm9wID0gbWVudS0+cHJvbXB0OworCXByb21wdCA9IHFnZXR0ZXh0KG1lbnVf
Z2V0X3Byb21wdChtZW51KSk7CisKKwlpZiAocHJvcCkgc3dpdGNoIChwcm9wLT50eXBlKSB7CisJ
Y2FzZSBQX01FTlU6CisJCWlmIChsaXN0LT5tb2RlID09IHNpbmdsZU1vZGUgfHwgbGlzdC0+bW9k
ZSA9PSBzeW1ib2xNb2RlKSB7CisJCQkvKiBhIG1lbnVjb25maWcgZW50cnkgaXMgZGlzcGxheWVk
IGRpZmZlcmVudGx5CisJCQkgKiBkZXBlbmRpbmcgd2hldGhlciBpdCdzIGF0IHRoZSB2aWV3IHJv
b3Qgb3IgYSBjaGlsZC4KKwkJCSAqLworCQkJaWYgKHN5bSAmJiBsaXN0LT5yb290RW50cnkgPT0g
bWVudSkKKwkJCQlicmVhazsKKwkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPm1lbnVQ
aXgpOworCQl9IGVsc2UgeworCQkJaWYgKHN5bSkKKwkJCQlicmVhazsKKwkJCXNldFBpeG1hcChw
cm9tcHRDb2xJZHgsIFFJY29uKCkpOworCQl9CisJCWdvdG8gc2V0X3Byb21wdDsKKwljYXNlIFBf
Q09NTUVOVDoKKwkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgUUljb24oKSk7CisJCWdvdG8gc2V0
X3Byb21wdDsKKwlkZWZhdWx0OgorCQk7CisJfQorCWlmICghc3ltKQorCQlnb3RvIHNldF9wcm9t
cHQ7CisKKwlzZXRUZXh0KG5hbWVDb2xJZHgsIFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3ltLT5u
YW1lKSk7CisKKwl0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisJc3dpdGNoICh0eXBlKSB7CisJ
Y2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRFOgorCQljaGFyIGNoOworCisJCWlmICgh
c3ltX2lzX2NoYW5nYWJsZShzeW0pICYmIGxpc3QtPm9wdE1vZGUgPT0gbm9ybWFsT3B0KSB7CisJ
CQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsKKwkJCXNldFRleHQobm9Db2xJZHgs
IFFTdHJpbmc6Om51bGwpOworCQkJc2V0VGV4dChtb2RDb2xJZHgsIFFTdHJpbmc6Om51bGwpOwor
CQkJc2V0VGV4dCh5ZXNDb2xJZHgsIFFTdHJpbmc6Om51bGwpOworCQkJYnJlYWs7CisJCX0KKwkJ
ZXhwciA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwkJc3dpdGNoIChleHByKSB7CisJ
CWNhc2UgeWVzOgorCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB0eXBlID09IFNf
Qk9PTEVBTikKKwkJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5jaG9pY2VZZXNQaXgp
OworCQkJZWxzZQorCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbFllc1Bp
eCk7CisJCQlzZXRUZXh0KHllc0NvbElkeCwgIlkiKTsKKwkJCWNoID0gJ1knOworCQkJYnJlYWs7
CisJCWNhc2UgbW9kOgorCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+c3ltYm9sTW9k
UGl4KTsKKwkJCXNldFRleHQobW9kQ29sSWR4LCAiTSIpOworCQkJY2ggPSAnTSc7CisJCQlicmVh
azsKKwkJZGVmYXVsdDoKKwkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdHlwZSA9
PSBTX0JPT0xFQU4pCisJCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+Y2hvaWNlTm9Q
aXgpOworCQkJZWxzZQorCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbE5v
UGl4KTsKKwkJCXNldFRleHQobm9Db2xJZHgsICJOIik7CisJCQljaCA9ICdOJzsKKwkJCWJyZWFr
OworCQl9CisJCWlmIChleHByICE9IG5vKQorCQkJc2V0VGV4dChub0NvbElkeCwgc3ltX3RyaXN0
YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKSA/ICJfIiA6IDApOworCQlpZiAoZXhwciAhPSBtb2Qp
CisJCQlzZXRUZXh0KG1vZENvbElkeCwgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1v
ZCkgPyAiXyIgOiAwKTsKKwkJaWYgKGV4cHIgIT0geWVzKQorCQkJc2V0VGV4dCh5ZXNDb2xJZHgs
IHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5ZXMpID8gIl8iIDogMCk7CisKKwkJc2V0
VGV4dChkYXRhQ29sSWR4LCBRQ2hhcihjaCkpOworCQlicmVhazsKKwljYXNlIFNfSU5UOgorCWNh
c2UgU19IRVg6CisJY2FzZSBTX1NUUklORzoKKwkJY29uc3QgY2hhciogZGF0YTsKKworCQlkYXRh
ID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsKKworCQlzZXRUZXh0KGRhdGFDb2xJZHgsIGRh
dGEpOworCQlpZiAodHlwZSA9PSBTX1NUUklORykKKwkJCXByb21wdCA9IFFTdHJpbmcoIiUxOiAl
MiIpLmFyZyhwcm9tcHQpLmFyZyhkYXRhKTsKKwkJZWxzZQorCQkJcHJvbXB0ID0gUVN0cmluZygi
KCUyKSAlMSIpLmFyZyhwcm9tcHQpLmFyZyhkYXRhKTsKKwkJYnJlYWs7CisJfQorCWlmICghc3lt
X2hhc192YWx1ZShzeW0pICYmIHZpc2libGUpCisJCXByb21wdCArPSAiIChORVcpIjsKK3NldF9w
cm9tcHQ6CisJc2V0VGV4dChwcm9tcHRDb2xJZHgsIHByb21wdCk7Cit9CisKK3ZvaWQgQ29uZmln
SXRlbTo6dGVzdFVwZGF0ZU1lbnUoYm9vbCB2KQoreworCUNvbmZpZ0l0ZW0qIGk7CisKKwl2aXNp
YmxlID0gdjsKKwlpZiAoIW1lbnUpCisJCXJldHVybjsKKworCXN5bV9jYWxjX3ZhbHVlKG1lbnUt
PnN5bSk7CisJaWYgKG1lbnUtPmZsYWdzICYgTUVOVV9DSEFOR0VEKSB7CisJCS8qIHRoZSBtZW51
IGVudHJ5IGNoYW5nZWQsIHNvIHVwZGF0ZSBhbGwgbGlzdCBpdGVtcyAqLworCQltZW51LT5mbGFn
cyAmPSB+TUVOVV9DSEFOR0VEOworCQlmb3IgKGkgPSAoQ29uZmlnSXRlbSopbWVudS0+ZGF0YTsg
aTsgaSA9IGktPm5leHRJdGVtKQorCQkJaS0+dXBkYXRlTWVudSgpOworCX0gZWxzZSBpZiAobGlz
dFZpZXcoKS0+dXBkYXRlQWxsKQorCQl1cGRhdGVNZW51KCk7Cit9CisKKworLyoKKyAqIGNvbnN0
cnVjdCBhIG1lbnUgZW50cnkKKyAqLwordm9pZCBDb25maWdJdGVtOjppbml0KHZvaWQpCit7CisJ
aWYgKG1lbnUpIHsKKwkJQ29uZmlnTGlzdCogbGlzdCA9IGxpc3RWaWV3KCk7CisJCW5leHRJdGVt
ID0gKENvbmZpZ0l0ZW0qKW1lbnUtPmRhdGE7CisJCW1lbnUtPmRhdGEgPSB0aGlzOworCisJCWlm
IChsaXN0LT5tb2RlICE9IGZ1bGxNb2RlKQorCQkJc2V0RXhwYW5kZWQodHJ1ZSk7CisJCXN5bV9j
YWxjX3ZhbHVlKG1lbnUtPnN5bSk7CisJfQorCXVwZGF0ZU1lbnUoKTsKK30KKworLyoKKyAqIGRl
c3RydWN0IGEgbWVudSBlbnRyeQorICovCitDb25maWdJdGVtOjp+Q29uZmlnSXRlbSh2b2lkKQor
eworCWlmIChtZW51KSB7CisJCUNvbmZpZ0l0ZW0qKiBpcCA9IChDb25maWdJdGVtKiopJm1lbnUt
PmRhdGE7CisJCWZvciAoOyAqaXA7IGlwID0gJigqaXApLT5uZXh0SXRlbSkgeworCQkJaWYgKCpp
cCA9PSB0aGlzKSB7CisJCQkJKmlwID0gbmV4dEl0ZW07CisJCQkJYnJlYWs7CisJCQl9CisJCX0K
Kwl9Cit9CisKK0NvbmZpZ0xpbmVFZGl0OjpDb25maWdMaW5lRWRpdChDb25maWdWaWV3KiBwYXJl
bnQpCisJOiBQYXJlbnQocGFyZW50KQoreworCWNvbm5lY3QodGhpcywgU0lHTkFMKGVkaXRpbmdG
aW5pc2hlZCgpKSwgU0xPVChoaWRlKCkpKTsKK30KKwordm9pZCBDb25maWdMaW5lRWRpdDo6c2hv
dyhDb25maWdJdGVtKiBpKQoreworCWl0ZW0gPSBpOworCWlmIChzeW1fZ2V0X3N0cmluZ192YWx1
ZShpdGVtLT5tZW51LT5zeW0pKQorCQlzZXRUZXh0KFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3lt
X2dldF9zdHJpbmdfdmFsdWUoaXRlbS0+bWVudS0+c3ltKSkpOworCWVsc2UKKwkJc2V0VGV4dChR
U3RyaW5nOjpudWxsKTsKKwlQYXJlbnQ6OnNob3coKTsKKwlzZXRGb2N1cygpOworfQorCit2b2lk
IENvbmZpZ0xpbmVFZGl0OjprZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZSkKK3sKKwlzd2l0Y2gg
KGUtPmtleSgpKSB7CisJY2FzZSBRdDo6S2V5X0VzY2FwZToKKwkJYnJlYWs7CisJY2FzZSBRdDo6
S2V5X1JldHVybjoKKwljYXNlIFF0OjpLZXlfRW50ZXI6CisJCXN5bV9zZXRfc3RyaW5nX3ZhbHVl
KGl0ZW0tPm1lbnUtPnN5bSwgdGV4dCgpLnRvTGF0aW4xKCkpOworCQlwYXJlbnQoKS0+dXBkYXRl
TGlzdChpdGVtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUGFyZW50OjprZXlQcmVzc0V2ZW50
KGUpOworCQlyZXR1cm47CisJfQorCWUtPmFjY2VwdCgpOworCXBhcmVudCgpLT5saXN0LT5zZXRG
b2N1cygpOworCWhpZGUoKTsKK30KKworQ29uZmlnTGlzdDo6Q29uZmlnTGlzdChDb25maWdWaWV3
KiBwLCBjb25zdCBjaGFyICpuYW1lKQorCTogUGFyZW50KHApLAorCSAgdXBkYXRlQWxsKGZhbHNl
KSwKKwkgIHN5bWJvbFllc1BpeCh4cG1fc3ltYm9sX3llcyksIHN5bWJvbE1vZFBpeCh4cG1fc3lt
Ym9sX21vZCksIHN5bWJvbE5vUGl4KHhwbV9zeW1ib2xfbm8pLAorCSAgY2hvaWNlWWVzUGl4KHhw
bV9jaG9pY2VfeWVzKSwgY2hvaWNlTm9QaXgoeHBtX2Nob2ljZV9ubyksCisJICBtZW51UGl4KHhw
bV9tZW51KSwgbWVudUludlBpeCh4cG1fbWVudV9pbnYpLCBtZW51QmFja1BpeCh4cG1fbWVudWJh
Y2spLCB2b2lkUGl4KHhwbV92b2lkKSwKKwkgIHNob3dOYW1lKGZhbHNlKSwgc2hvd1JhbmdlKGZh
bHNlKSwgc2hvd0RhdGEoZmFsc2UpLCBtb2RlKHNpbmdsZU1vZGUpLCBvcHRNb2RlKG5vcm1hbE9w
dCksCisJICByb290RW50cnkoMCksIGhlYWRlclBvcHVwKDApCit7CisJaW50IGk7CisKKwlzZXRP
YmplY3ROYW1lKG5hbWUpOworCXNldFNvcnRpbmdFbmFibGVkKGZhbHNlKTsKKwlzZXRSb290SXNE
ZWNvcmF0ZWQodHJ1ZSk7CisKKwlzZXRWZXJ0aWNhbFNjcm9sbE1vZGUoU2Nyb2xsUGVyUGl4ZWwp
OworCXNldEhvcml6b250YWxTY3JvbGxNb2RlKFNjcm9sbFBlclBpeGVsKTsKKworCXNldEhlYWRl
ckxhYmVscyhRU3RyaW5nTGlzdCgpIDw8ICJPcHRpb24iIDw8ICJOYW1lIiA8PCAiTiIgPDwgIk0i
IDw8ICJZIiA8PCAiVmFsdWUiKTsKKworCWNvbm5lY3QodGhpcywgU0lHTkFMKGl0ZW1TZWxlY3Rp
b25DaGFuZ2VkKHZvaWQpKSwKKwkJU0xPVCh1cGRhdGVTZWxlY3Rpb24odm9pZCkpKTsKKworCWlm
IChuYW1lKSB7CisJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUpOworCQlzaG93TmFt
ZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3Nob3dOYW1lIiwgZmFsc2UpLnRvQm9vbCgpOwor
CQlzaG93UmFuZ2UgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi9zaG93UmFuZ2UiLCBmYWxzZSku
dG9Cb29sKCk7CisJCXNob3dEYXRhID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RhdGEi
LCBmYWxzZSkudG9Cb29sKCk7CisJCW9wdE1vZGUgPSAoZW51bSBvcHRpb25Nb2RlKWNvbmZpZ1Nl
dHRpbmdzLT52YWx1ZSgiL29wdGlvbk1vZGUiLCAwKS50b0ludCgpOworCQljb25maWdTZXR0aW5n
cy0+ZW5kR3JvdXAoKTsKKwkJY29ubmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgp
KSwgU0xPVChzYXZlU2V0dGluZ3MoKSkpOworCX0KKworCWFkZENvbHVtbihwcm9tcHRDb2xJZHgp
OworCisJcmVpbml0KCk7Cit9CisKK2Jvb2wgQ29uZmlnTGlzdDo6bWVudVNraXAoc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJaWYgKG9wdE1vZGUgPT0gbm9ybWFsT3B0ICYmIG1lbnVfaXNfdmlzaWJs
ZShtZW51KSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChvcHRNb2RlID09IHByb21wdE9wdCAmJiBt
ZW51X2hhc19wcm9tcHQobWVudSkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAob3B0TW9kZSA9PSBh
bGxPcHQpCisJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb25maWdM
aXN0OjpyZWluaXQodm9pZCkKK3sKKwlyZW1vdmVDb2x1bW4oZGF0YUNvbElkeCk7CisJcmVtb3Zl
Q29sdW1uKHllc0NvbElkeCk7CisJcmVtb3ZlQ29sdW1uKG1vZENvbElkeCk7CisJcmVtb3ZlQ29s
dW1uKG5vQ29sSWR4KTsKKwlyZW1vdmVDb2x1bW4obmFtZUNvbElkeCk7CisKKwlpZiAoc2hvd05h
bWUpCisJCWFkZENvbHVtbihuYW1lQ29sSWR4KTsKKwlpZiAoc2hvd1JhbmdlKSB7CisJCWFkZENv
bHVtbihub0NvbElkeCk7CisJCWFkZENvbHVtbihtb2RDb2xJZHgpOworCQlhZGRDb2x1bW4oeWVz
Q29sSWR4KTsKKwl9CisJaWYgKHNob3dEYXRhKQorCQlhZGRDb2x1bW4oZGF0YUNvbElkeCk7CisK
Kwl1cGRhdGVMaXN0QWxsKCk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6c2F2ZVNldHRpbmdzKHZv
aWQpCit7CisJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7CisJCWNvbmZpZ1NldHRpbmdz
LT5iZWdpbkdyb3VwKG9iamVjdE5hbWUoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgi
L3Nob3dOYW1lIiwgc2hvd05hbWUpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93
UmFuZ2UiLCBzaG93UmFuZ2UpOworCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93RGF0
YSIsIHNob3dEYXRhKTsKKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvb3B0aW9uTW9kZSIs
IChpbnQpb3B0TW9kZSk7CisJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOworCX0KK30KKwor
Q29uZmlnSXRlbSogQ29uZmlnTGlzdDo6ZmluZENvbmZpZ0l0ZW0oc3RydWN0IG1lbnUgKm1lbnUp
Cit7CisJQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKiltZW51LT5kYXRhOworCisJZm9y
ICg7IGl0ZW07IGl0ZW0gPSBpdGVtLT5uZXh0SXRlbSkgeworCQlpZiAodGhpcyA9PSBpdGVtLT5s
aXN0VmlldygpKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIGl0ZW07Cit9CisKK3ZvaWQgQ29u
ZmlnTGlzdDo6dXBkYXRlU2VsZWN0aW9uKHZvaWQpCit7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJ
ZW51bSBwcm9wX3R5cGUgdHlwZTsKKworCWlmIChzZWxlY3RlZEl0ZW1zKCkuY291bnQoKSA9PSAw
KQorCQlyZXR1cm47CisKKwlDb25maWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0qKXNlbGVjdGVk
SXRlbXMoKS5maXJzdCgpOworCWlmICghaXRlbSkKKwkJcmV0dXJuOworCisJbWVudSA9IGl0ZW0t
Pm1lbnU7CisJZW1pdCBtZW51Q2hhbmdlZChtZW51KTsKKwlpZiAoIW1lbnUpCisJCXJldHVybjsK
Kwl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwor
CWlmIChtb2RlID09IG1lbnVNb2RlICYmIHR5cGUgPT0gUF9NRU5VKQorCQllbWl0IG1lbnVTZWxl
Y3RlZChtZW51KTsKK30KKwordm9pZCBDb25maWdMaXN0Ojp1cGRhdGVMaXN0KENvbmZpZ0l0ZW0q
IGl0ZW0pCit7CisJQ29uZmlnSXRlbSogbGFzdCA9IDA7CisKKwlpZiAoIXJvb3RFbnRyeSkgewor
CQlpZiAobW9kZSAhPSBsaXN0TW9kZSkKKwkJCWdvdG8gdXBkYXRlOworCQlRVHJlZVdpZGdldEl0
ZW1JdGVyYXRvciBpdCh0aGlzKTsKKwkJQ29uZmlnSXRlbSogaXRlbTsKKworCQl3aGlsZSAoKml0
KSB7CisJCQlpdGVtID0gKENvbmZpZ0l0ZW0qKSgqaXQpOworCQkJaWYgKCFpdGVtLT5tZW51KQor
CQkJCWNvbnRpbnVlOworCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUobWVudV9pc192aXNpYmxlKGl0
ZW0tPm1lbnUpKTsKKworCQkJKytpdDsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKHJvb3RF
bnRyeSAhPSAmcm9vdG1lbnUgJiYgKG1vZGUgPT0gc2luZ2xlTW9kZSB8fAorCSAgICAobW9kZSA9
PSBzeW1ib2xNb2RlICYmIHJvb3RFbnRyeS0+cGFyZW50ICE9ICZyb290bWVudSkpKSB7CisJCWl0
ZW0gPSAoQ29uZmlnSXRlbSAqKXRvcExldmVsSXRlbSgwKTsKKwkJaWYgKCFpdGVtKQorCQkJaXRl
bSA9IG5ldyBDb25maWdJdGVtKHRoaXMsIDAsIHRydWUpOworCQlsYXN0ID0gaXRlbTsKKwl9CisJ
aWYgKChtb2RlID09IHNpbmdsZU1vZGUgfHwgKG1vZGUgPT0gc3ltYm9sTW9kZSAmJiAhKHJvb3RF
bnRyeS0+ZmxhZ3MgJiBNRU5VX1JPT1QpKSkgJiYKKwkgICAgcm9vdEVudHJ5LT5zeW0gJiYgcm9v
dEVudHJ5LT5wcm9tcHQpIHsKKwkJaXRlbSA9IGxhc3QgPyBsYXN0LT5uZXh0U2libGluZygpIDog
Zmlyc3RDaGlsZCgpOworCQlpZiAoIWl0ZW0pCisJCQlpdGVtID0gbmV3IENvbmZpZ0l0ZW0odGhp
cywgbGFzdCwgcm9vdEVudHJ5LCB0cnVlKTsKKwkJZWxzZQorCQkJaXRlbS0+dGVzdFVwZGF0ZU1l
bnUodHJ1ZSk7CisKKwkJdXBkYXRlTWVudUxpc3QoaXRlbSwgcm9vdEVudHJ5KTsKKwkJdXBkYXRl
KCk7CisJCXJlc2l6ZUNvbHVtblRvQ29udGVudHMoMCk7CisJCXJldHVybjsKKwl9Cit1cGRhdGU6
CisJdXBkYXRlTWVudUxpc3QodGhpcywgcm9vdEVudHJ5KTsKKwl1cGRhdGUoKTsKKwlyZXNpemVD
b2x1bW5Ub0NvbnRlbnRzKDApOworfQorCit2b2lkIENvbmZpZ0xpc3Q6OnNldFZhbHVlKENvbmZp
Z0l0ZW0qIGl0ZW0sIHRyaXN0YXRlIHZhbCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07CisJaW50
IHR5cGU7CisJdHJpc3RhdGUgb2xkdmFsOworCisJc3ltID0gaXRlbS0+bWVudSA/IGl0ZW0tPm1l
bnUtPnN5bSA6IDA7CisJaWYgKCFzeW0pCisJCXJldHVybjsKKworCXR5cGUgPSBzeW1fZ2V0X3R5
cGUoc3ltKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJ
U1RBVEU6CisJCW9sZHZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKworCQlpZiAo
IXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB2YWwpKQorCQkJcmV0dXJuOworCQlpZiAob2xk
dmFsID09IG5vICYmIGl0ZW0tPm1lbnUtPmxpc3QpCisJCQlpdGVtLT5zZXRFeHBhbmRlZCh0cnVl
KTsKKwkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7CisJCWJyZWFrOworCX0KK30KKwordm9p
ZCBDb25maWdMaXN0OjpjaGFuZ2VWYWx1ZShDb25maWdJdGVtKiBpdGVtKQoreworCXN0cnVjdCBz
eW1ib2wqIHN5bTsKKwlzdHJ1Y3QgbWVudSogbWVudTsKKwlpbnQgdHlwZSwgb2xkZXhwciwgbmV3
ZXhwcjsKKworCW1lbnUgPSBpdGVtLT5tZW51OworCWlmICghbWVudSkKKwkJcmV0dXJuOworCXN5
bSA9IG1lbnUtPnN5bTsKKwlpZiAoIXN5bSkgeworCQlpZiAoaXRlbS0+bWVudS0+bGlzdCkKKwkJ
CWl0ZW0tPnNldEV4cGFuZGVkKCFpdGVtLT5pc0V4cGFuZGVkKCkpOworCQlyZXR1cm47CisJfQor
CisJdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19C
T09MRUFOOgorCWNhc2UgU19UUklTVEFURToKKwkJb2xkZXhwciA9IHN5bV9nZXRfdHJpc3RhdGVf
dmFsdWUoc3ltKTsKKwkJbmV3ZXhwciA9IHN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsK
KwkJaWYgKGl0ZW0tPm1lbnUtPmxpc3QpIHsKKwkJCWlmIChvbGRleHByID09IG5ld2V4cHIpCisJ
CQkJaXRlbS0+c2V0RXhwYW5kZWQoIWl0ZW0tPmlzRXhwYW5kZWQoKSk7CisJCQllbHNlIGlmIChv
bGRleHByID09IG5vKQorCQkJCWl0ZW0tPnNldEV4cGFuZGVkKHRydWUpOworCQl9CisJCWlmIChv
bGRleHByICE9IG5ld2V4cHIpCisJCQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVtKTsKKwkJYnJl
YWs7CisJY2FzZSBTX0lOVDoKKwljYXNlIFNfSEVYOgorCWNhc2UgU19TVFJJTkc6CisJCXBhcmVu
dCgpLT5saW5lRWRpdC0+c2hvdyhpdGVtKTsKKwkJYnJlYWs7CisJfQorfQorCit2b2lkIENvbmZp
Z0xpc3Q6OnNldFJvb3RNZW51KHN0cnVjdCBtZW51ICptZW51KQoreworCWVudW0gcHJvcF90eXBl
IHR5cGU7CisKKwlpZiAocm9vdEVudHJ5ID09IG1lbnUpCisJCXJldHVybjsKKwl0eXBlID0gbWVu
dSAmJiBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJaWYg
KHR5cGUgIT0gUF9NRU5VKQorCQlyZXR1cm47CisJdXBkYXRlTWVudUxpc3QodGhpcywgMCk7CisJ
cm9vdEVudHJ5ID0gbWVudTsKKwl1cGRhdGVMaXN0QWxsKCk7CisJaWYgKGN1cnJlbnRJdGVtKCkp
IHsKKwkJY3VycmVudEl0ZW0oKS0+c2V0U2VsZWN0ZWQoaGFzRm9jdXMoKSk7CisJCXNjcm9sbFRv
SXRlbShjdXJyZW50SXRlbSgpKTsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6c2V0UGFyZW50
TWVudSh2b2lkKQoreworCUNvbmZpZ0l0ZW0qIGl0ZW07CisJc3RydWN0IG1lbnUgKm9sZHJvb3Q7
CisKKwlvbGRyb290ID0gcm9vdEVudHJ5OworCWlmIChyb290RW50cnkgPT0gJnJvb3RtZW51KQor
CQlyZXR1cm47CisJc2V0Um9vdE1lbnUobWVudV9nZXRfcGFyZW50X21lbnUocm9vdEVudHJ5LT5w
YXJlbnQpKTsKKworCVFUcmVlV2lkZ2V0SXRlbUl0ZXJhdG9yIGl0KHRoaXMpOworCXdoaWxlICgq
aXQpIHsKKwkJaXRlbSA9IChDb25maWdJdGVtICopKCppdCk7CisJCWlmIChpdGVtLT5tZW51ID09
IG9sZHJvb3QpIHsKKwkJCXNldEN1cnJlbnRJdGVtKGl0ZW0pOworCQkJc2Nyb2xsVG9JdGVtKGl0
ZW0pOworCQkJYnJlYWs7CisJCX0KKworCQkrK2l0OworCX0KK30KKworLyoKKyAqIHVwZGF0ZSBh
bGwgdGhlIGNoaWxkcmVuIG9mIGEgbWVudSBlbnRyeQorICogICByZW1vdmVzL2FkZHMgdGhlIGVu
dHJpZXMgZnJvbSB0aGUgcGFyZW50IHdpZGdldCBhcyBuZWNlc3NhcnkKKyAqCisgKiBwYXJlbnQ6
IGVpdGhlciB0aGUgbWVudSBsaXN0IHdpZGdldCBvciBhIG1lbnUgZW50cnkgd2lkZ2V0CisgKiBt
ZW51OiBlbnRyeSB0byBiZSB1cGRhdGVkCisgKi8KK3ZvaWQgQ29uZmlnTGlzdDo6dXBkYXRlTWVu
dUxpc3QoQ29uZmlnSXRlbSAqcGFyZW50LCBzdHJ1Y3QgbWVudSogbWVudSkKK3sKKwlzdHJ1Y3Qg
bWVudSogY2hpbGQ7CisJQ29uZmlnSXRlbSogaXRlbTsKKwlDb25maWdJdGVtKiBsYXN0OworCWJv
b2wgdmlzaWJsZTsKKwllbnVtIHByb3BfdHlwZSB0eXBlOworCisJaWYgKCFtZW51KSB7CisJCXdo
aWxlIChwYXJlbnQtPmNoaWxkQ291bnQoKSA+IDApCisJCXsKKwkJCWRlbGV0ZSBwYXJlbnQtPnRh
a2VDaGlsZCgwKTsKKwkJfQorCisJCXJldHVybjsKKwl9CisKKwlsYXN0ID0gcGFyZW50LT5maXJz
dENoaWxkKCk7CisJaWYgKGxhc3QgJiYgIWxhc3QtPmdvUGFyZW50KQorCQlsYXN0ID0gMDsKKwlm
b3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJ
aXRlbSA9IGxhc3QgPyBsYXN0LT5uZXh0U2libGluZygpIDogcGFyZW50LT5maXJzdENoaWxkKCk7
CisJCXR5cGUgPSBjaGlsZC0+cHJvbXB0ID8gY2hpbGQtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9X
TjsKKworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBtZW51TW9kZToKKwkJCWlmICghKGNoaWxk
LT5mbGFncyAmIE1FTlVfUk9PVCkpCisJCQkJZ290byBoaWRlOworCQkJYnJlYWs7CisJCWNhc2Ug
c3ltYm9sTW9kZToKKwkJCWlmIChjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpCisJCQkJZ290byBo
aWRlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCXZpc2libGUg
PSBtZW51X2lzX3Zpc2libGUoY2hpbGQpOworCQlpZiAoIW1lbnVTa2lwKGNoaWxkKSkgeworCQkJ
aWYgKCFjaGlsZC0+c3ltICYmICFjaGlsZC0+bGlzdCAmJiAhY2hpbGQtPnByb21wdCkKKwkJCQlj
b250aW51ZTsKKwkJCWlmICghaXRlbSB8fCBpdGVtLT5tZW51ICE9IGNoaWxkKQorCQkJCWl0ZW0g
PSBuZXcgQ29uZmlnSXRlbShwYXJlbnQsIGxhc3QsIGNoaWxkLCB2aXNpYmxlKTsKKwkJCWVsc2UK
KwkJCQlpdGVtLT50ZXN0VXBkYXRlTWVudSh2aXNpYmxlKTsKKworCQkJaWYgKG1vZGUgPT0gZnVs
bE1vZGUgfHwgbW9kZSA9PSBtZW51TW9kZSB8fCB0eXBlICE9IFBfTUVOVSkKKwkJCQl1cGRhdGVN
ZW51TGlzdChpdGVtLCBjaGlsZCk7CisJCQllbHNlCisJCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwg
MCk7CisJCQlsYXN0ID0gaXRlbTsKKwkJCWNvbnRpbnVlOworCQl9CisJaGlkZToKKwkJaWYgKGl0
ZW0gJiYgaXRlbS0+bWVudSA9PSBjaGlsZCkgeworCQkJbGFzdCA9IHBhcmVudC0+Zmlyc3RDaGls
ZCgpOworCQkJaWYgKGxhc3QgPT0gaXRlbSkKKwkJCQlsYXN0ID0gMDsKKwkJCWVsc2Ugd2hpbGUg
KGxhc3QtPm5leHRTaWJsaW5nKCkgIT0gaXRlbSkKKwkJCQlsYXN0ID0gbGFzdC0+bmV4dFNpYmxp
bmcoKTsKKwkJCWRlbGV0ZSBpdGVtOworCQl9CisJfQorfQorCit2b2lkIENvbmZpZ0xpc3Q6OnVw
ZGF0ZU1lbnVMaXN0KENvbmZpZ0xpc3QgKnBhcmVudCwgc3RydWN0IG1lbnUqIG1lbnUpCit7CisJ
c3RydWN0IG1lbnUqIGNoaWxkOworCUNvbmZpZ0l0ZW0qIGl0ZW07CisJQ29uZmlnSXRlbSogbGFz
dDsKKwlib29sIHZpc2libGU7CisJZW51bSBwcm9wX3R5cGUgdHlwZTsKKworCWlmICghbWVudSkg
eworCQl3aGlsZSAocGFyZW50LT50b3BMZXZlbEl0ZW1Db3VudCgpID4gMCkKKwkJeworCQkJZGVs
ZXRlIHBhcmVudC0+dGFrZVRvcExldmVsSXRlbSgwKTsKKwkJfQorCisJCXJldHVybjsKKwl9CisK
KwlsYXN0ID0gKENvbmZpZ0l0ZW0qKXBhcmVudC0+dG9wTGV2ZWxJdGVtKDApOworCWlmIChsYXN0
ICYmICFsYXN0LT5nb1BhcmVudCkKKwkJbGFzdCA9IDA7CisJZm9yIChjaGlsZCA9IG1lbnUtPmxp
c3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7CisJCWl0ZW0gPSBsYXN0ID8gbGFzdC0+
bmV4dFNpYmxpbmcoKSA6IChDb25maWdJdGVtKilwYXJlbnQtPnRvcExldmVsSXRlbSgwKTsKKwkJ
dHlwZSA9IGNoaWxkLT5wcm9tcHQgPyBjaGlsZC0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOwor
CisJCXN3aXRjaCAobW9kZSkgeworCQljYXNlIG1lbnVNb2RlOgorCQkJaWYgKCEoY2hpbGQtPmZs
YWdzICYgTUVOVV9ST09UKSkKKwkJCQlnb3RvIGhpZGU7CisJCQlicmVhazsKKwkJY2FzZSBzeW1i
b2xNb2RlOgorCQkJaWYgKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkKKwkJCQlnb3RvIGhpZGU7
CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJdmlzaWJsZSA9IG1l
bnVfaXNfdmlzaWJsZShjaGlsZCk7CisJCWlmICghbWVudVNraXAoY2hpbGQpKSB7CisJCQlpZiAo
IWNoaWxkLT5zeW0gJiYgIWNoaWxkLT5saXN0ICYmICFjaGlsZC0+cHJvbXB0KQorCQkJCWNvbnRp
bnVlOworCQkJaWYgKCFpdGVtIHx8IGl0ZW0tPm1lbnUgIT0gY2hpbGQpCisJCQkJaXRlbSA9IG5l
dyBDb25maWdJdGVtKHBhcmVudCwgbGFzdCwgY2hpbGQsIHZpc2libGUpOworCQkJZWxzZQorCQkJ
CWl0ZW0tPnRlc3RVcGRhdGVNZW51KHZpc2libGUpOworCisJCQlpZiAobW9kZSA9PSBmdWxsTW9k
ZSB8fCBtb2RlID09IG1lbnVNb2RlIHx8IHR5cGUgIT0gUF9NRU5VKQorCQkJCXVwZGF0ZU1lbnVM
aXN0KGl0ZW0sIGNoaWxkKTsKKwkJCWVsc2UKKwkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCAwKTsK
KwkJCWxhc3QgPSBpdGVtOworCQkJY29udGludWU7CisJCX0KKwloaWRlOgorCQlpZiAoaXRlbSAm
JiBpdGVtLT5tZW51ID09IGNoaWxkKSB7CisJCQlsYXN0ID0gKENvbmZpZ0l0ZW0qKXBhcmVudC0+
dG9wTGV2ZWxJdGVtKDApOworCQkJaWYgKGxhc3QgPT0gaXRlbSkKKwkJCQlsYXN0ID0gMDsKKwkJ
CWVsc2Ugd2hpbGUgKGxhc3QtPm5leHRTaWJsaW5nKCkgIT0gaXRlbSkKKwkJCQlsYXN0ID0gbGFz
dC0+bmV4dFNpYmxpbmcoKTsKKwkJCWRlbGV0ZSBpdGVtOworCQl9CisJfQorfQorCit2b2lkIENv
bmZpZ0xpc3Q6OmtleVByZXNzRXZlbnQoUUtleUV2ZW50KiBldikKK3sKKwlRVHJlZVdpZGdldEl0
ZW0qIGkgPSBjdXJyZW50SXRlbSgpOworCUNvbmZpZ0l0ZW0qIGl0ZW07CisJc3RydWN0IG1lbnUg
Km1lbnU7CisJZW51bSBwcm9wX3R5cGUgdHlwZTsKKworCWlmIChldi0+a2V5KCkgPT0gUXQ6Oktl
eV9Fc2NhcGUgJiYgbW9kZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IGxpc3RNb2RlKSB7CisJCWVt
aXQgcGFyZW50U2VsZWN0ZWQoKTsKKwkJZXYtPmFjY2VwdCgpOworCQlyZXR1cm47CisJfQorCisJ
aWYgKCFpKSB7CisJCVBhcmVudDo6a2V5UHJlc3NFdmVudChldik7CisJCXJldHVybjsKKwl9CisJ
aXRlbSA9IChDb25maWdJdGVtKilpOworCisJc3dpdGNoIChldi0+a2V5KCkpIHsKKwljYXNlIFF0
OjpLZXlfUmV0dXJuOgorCWNhc2UgUXQ6OktleV9FbnRlcjoKKwkJaWYgKGl0ZW0tPmdvUGFyZW50
KSB7CisJCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7CisJCQlicmVhazsKKwkJfQorCQltZW51ID0g
aXRlbS0+bWVudTsKKwkJaWYgKCFtZW51KQorCQkJYnJlYWs7CisJCXR5cGUgPSBtZW51LT5wcm9t
cHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047CisJCWlmICh0eXBlID09IFBfTUVO
VSAmJiByb290RW50cnkgIT0gbWVudSAmJgorCQkgICAgbW9kZSAhPSBmdWxsTW9kZSAmJiBtb2Rl
ICE9IG1lbnVNb2RlKSB7CisJCQllbWl0IG1lbnVTZWxlY3RlZChtZW51KTsKKwkJCWJyZWFrOwor
CQl9CisJY2FzZSBRdDo6S2V5X1NwYWNlOgorCQljaGFuZ2VWYWx1ZShpdGVtKTsKKwkJYnJlYWs7
CisJY2FzZSBRdDo6S2V5X046CisJCXNldFZhbHVlKGl0ZW0sIG5vKTsKKwkJYnJlYWs7CisJY2Fz
ZSBRdDo6S2V5X006CisJCXNldFZhbHVlKGl0ZW0sIG1vZCk7CisJCWJyZWFrOworCWNhc2UgUXQ6
OktleV9ZOgorCQlzZXRWYWx1ZShpdGVtLCB5ZXMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQ
YXJlbnQ6OmtleVByZXNzRXZlbnQoZXYpOworCQlyZXR1cm47CisJfQorCWV2LT5hY2NlcHQoKTsK
K30KKwordm9pZCBDb25maWdMaXN0Ojptb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQqIGUpCit7
CisJLy9RUG9pbnQgcChjb250ZW50c1RvVmlld3BvcnQoZS0+cG9zKCkpKTsKKwkvL3ByaW50Zigi
Y29udGVudHNNb3VzZVByZXNzRXZlbnQ6ICVkLCVkXG4iLCBwLngoKSwgcC55KCkpOworCVBhcmVu
dDo6bW91c2VQcmVzc0V2ZW50KGUpOworfQorCit2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlUmVsZWFz
ZUV2ZW50KFFNb3VzZUV2ZW50KiBlKQoreworCVFQb2ludCBwID0gZS0+cG9zKCk7CisJQ29uZmln
SXRlbSogaXRlbSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7CisJc3RydWN0IG1lbnUgKm1lbnU7
CisJZW51bSBwcm9wX3R5cGUgcHR5cGU7CisJUUljb24gaWNvbjsKKwlpbnQgaWR4LCB4OworCisJ
aWYgKCFpdGVtKQorCQlnb3RvIHNraXA7CisKKwltZW51ID0gaXRlbS0+bWVudTsKKwl4ID0gaGVh
ZGVyKCktPm9mZnNldCgpICsgcC54KCk7CisJaWR4ID0gaGVhZGVyKCktPmxvZ2ljYWxJbmRleEF0
KHgpOworCXN3aXRjaCAoaWR4KSB7CisJY2FzZSBwcm9tcHRDb2xJZHg6CisJCWljb24gPSBpdGVt
LT5waXhtYXAocHJvbXB0Q29sSWR4KTsKKwkJaWYgKCFpY29uLmlzTnVsbCgpKSB7CisJCQlpbnQg
b2ZmID0gaGVhZGVyKCktPnNlY3Rpb25Qb3NpdGlvbigwKSArIHZpc3VhbFJlY3QoaW5kZXhBdChw
KSkueCgpICsgNDsgLy8gNCBpcyBIYXJkY29kZWQgaW1hZ2Ugb2Zmc2V0LiBUaGVyZSBtaWdodCBi
ZSBhIHdheSB0byBkbyBpdCBwcm9wZXJseS4KKwkJCWlmICh4ID49IG9mZiAmJiB4IDwgb2ZmICsg
aWNvbi5hdmFpbGFibGVTaXplcygpLmZpcnN0KCkud2lkdGgoKSkgeworCQkJCWlmIChpdGVtLT5n
b1BhcmVudCkgeworCQkJCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7CisJCQkJCWJyZWFrOworCQkJ
CX0gZWxzZSBpZiAoIW1lbnUpCisJCQkJCWJyZWFrOworCQkJCXB0eXBlID0gbWVudS0+cHJvbXB0
ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOworCQkJCWlmIChwdHlwZSA9PSBQX01F
TlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYKKwkJCQkgICAgbW9kZSAhPSBmdWxsTW9kZSAmJiBt
b2RlICE9IG1lbnVNb2RlKQorCQkJCQllbWl0IG1lbnVTZWxlY3RlZChtZW51KTsKKwkJCQllbHNl
CisJCQkJCWNoYW5nZVZhbHVlKGl0ZW0pOworCQkJfQorCQl9CisJCWJyZWFrOworCWNhc2Ugbm9D
b2xJZHg6CisJCXNldFZhbHVlKGl0ZW0sIG5vKTsKKwkJYnJlYWs7CisJY2FzZSBtb2RDb2xJZHg6
CisJCXNldFZhbHVlKGl0ZW0sIG1vZCk7CisJCWJyZWFrOworCWNhc2UgeWVzQ29sSWR4OgorCQlz
ZXRWYWx1ZShpdGVtLCB5ZXMpOworCQlicmVhazsKKwljYXNlIGRhdGFDb2xJZHg6CisJCWNoYW5n
ZVZhbHVlKGl0ZW0pOworCQlicmVhazsKKwl9CisKK3NraXA6CisJLy9wcmludGYoImNvbnRlbnRz
TW91c2VSZWxlYXNlRXZlbnQ6ICVkLCVkXG4iLCBwLngoKSwgcC55KCkpOworCVBhcmVudDo6bW91
c2VSZWxlYXNlRXZlbnQoZSk7Cit9CisKK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VNb3ZlRXZlbnQo
UU1vdXNlRXZlbnQqIGUpCit7CisJLy9RUG9pbnQgcChjb250ZW50c1RvVmlld3BvcnQoZS0+cG9z
KCkpKTsKKwkvL3ByaW50ZigiY29udGVudHNNb3VzZU1vdmVFdmVudDogJWQsJWRcbiIsIHAueCgp
LCBwLnkoKSk7CisJUGFyZW50Ojptb3VzZU1vdmVFdmVudChlKTsKK30KKwordm9pZCBDb25maWdM
aXN0Ojptb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqIGUpCit7CisJUVBvaW50IHAg
PSBlLT5wb3MoKTsgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyB3b3Jrcyh3YXMgY29udGVudHNUb1Zp
ZXdwb3J0KS4KKwlDb25maWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0qKWl0ZW1BdChwKTsKKwlz
dHJ1Y3QgbWVudSAqbWVudTsKKwllbnVtIHByb3BfdHlwZSBwdHlwZTsKKworCWlmICghaXRlbSkK
KwkJZ290byBza2lwOworCWlmIChpdGVtLT5nb1BhcmVudCkgeworCQllbWl0IHBhcmVudFNlbGVj
dGVkKCk7CisJCWdvdG8gc2tpcDsKKwl9CisJbWVudSA9IGl0ZW0tPm1lbnU7CisJaWYgKCFtZW51
KQorCQlnb3RvIHNraXA7CisJcHR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5
cGUgOiBQX1VOS05PV047CisJaWYgKHB0eXBlID09IFBfTUVOVSAmJiAobW9kZSA9PSBzaW5nbGVN
b2RlIHx8IG1vZGUgPT0gc3ltYm9sTW9kZSkpCisJCWVtaXQgbWVudVNlbGVjdGVkKG1lbnUpOwor
CWVsc2UgaWYgKG1lbnUtPnN5bSkKKwkJY2hhbmdlVmFsdWUoaXRlbSk7CisKK3NraXA6CisJLy9w
cmludGYoImNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50OiAlZCwlZFxuIiwgcC54KCksIHAu
eSgpKTsKKwlQYXJlbnQ6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChlKTsKK30KKwordm9pZCBDb25m
aWdMaXN0Ojpmb2N1c0luRXZlbnQoUUZvY3VzRXZlbnQgKmUpCit7CisJc3RydWN0IG1lbnUgKm1l
bnUgPSBOVUxMOworCisJUGFyZW50Ojpmb2N1c0luRXZlbnQoZSk7CisKKwlDb25maWdJdGVtKiBp
dGVtID0gKENvbmZpZ0l0ZW0gKiljdXJyZW50SXRlbSgpOworCWlmIChpdGVtKSB7CisJCWl0ZW0t
PnNldFNlbGVjdGVkKHRydWUpOworCQltZW51ID0gaXRlbS0+bWVudTsKKwl9CisJZW1pdCBnb3RG
b2N1cyhtZW51KTsKK30KKwordm9pZCBDb25maWdMaXN0Ojpjb250ZXh0TWVudUV2ZW50KFFDb250
ZXh0TWVudUV2ZW50ICplKQoreworCWlmIChlLT55KCkgPD0gaGVhZGVyKCktPmdlb21ldHJ5KCku
Ym90dG9tKCkpIHsKKwkJaWYgKCFoZWFkZXJQb3B1cCkgeworCQkJUUFjdGlvbiAqYWN0aW9uOwor
CisJCQloZWFkZXJQb3B1cCA9IG5ldyBRTWVudSh0aGlzKTsKKwkJCWFjdGlvbiA9IG5ldyBRQWN0
aW9uKCJTaG93IE5hbWUiLCB0aGlzKTsKKwkJCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7
CisJCQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksCisJCQkJICBwYXJl
bnQoKSwgU0xPVChzZXRTaG93TmFtZShib29sKSkpOworCQkJICBjb25uZWN0KHBhcmVudCgpLCBT
SUdOQUwoc2hvd05hbWVDaGFuZ2VkKGJvb2wpKSwKKwkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihi
b29sKSkpOworCQkJICBhY3Rpb24tPnNldENoZWNrZWQoc2hvd05hbWUpOworCQkJICBoZWFkZXJQ
b3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7CisJCQlhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBS
YW5nZSIsIHRoaXMpOworCQkJICBhY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKwkJCSAgY29u
bmVjdChhY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwKKwkJCQkgIHBhcmVudCgpLCBTTE9U
KHNldFNob3dSYW5nZShib29sKSkpOworCQkJICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hv
d1JhbmdlQ2hhbmdlZChib29sKSksCisJCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkpKTsK
KwkJCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dSYW5nZSk7CisJCQkgIGhlYWRlclBvcHVwLT5h
ZGRBY3Rpb24oYWN0aW9uKTsKKwkJCWFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IERhdGEiLCB0
aGlzKTsKKwkJCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJCQkgIGNvbm5lY3QoYWN0
aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksCisJCQkJICBwYXJlbnQoKSwgU0xPVChzZXRTaG93
RGF0YShib29sKSkpOworCQkJICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hvd0RhdGFDaGFu
Z2VkKGJvb2wpKSwKKwkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkpOworCQkJICBhY3Rp
b24tPnNldENoZWNrZWQoc2hvd0RhdGEpOworCQkJICBoZWFkZXJQb3B1cC0+YWRkQWN0aW9uKGFj
dGlvbik7CisJCX0KKwkJaGVhZGVyUG9wdXAtPmV4ZWMoZS0+Z2xvYmFsUG9zKCkpOworCQllLT5h
Y2NlcHQoKTsKKwl9IGVsc2UKKwkJZS0+aWdub3JlKCk7Cit9CisKK0NvbmZpZ1ZpZXcqQ29uZmln
Vmlldzo6dmlld0xpc3Q7CitRQWN0aW9uICpDb25maWdWaWV3OjpzaG93Tm9ybWFsQWN0aW9uOwor
UUFjdGlvbiAqQ29uZmlnVmlldzo6c2hvd0FsbEFjdGlvbjsKK1FBY3Rpb24gKkNvbmZpZ1ZpZXc6
OnNob3dQcm9tcHRBY3Rpb247CisKK0NvbmZpZ1ZpZXc6OkNvbmZpZ1ZpZXcoUVdpZGdldCogcGFy
ZW50LCBjb25zdCBjaGFyICpuYW1lKQorCTogUGFyZW50KHBhcmVudCkKK3sKKwlzZXRPYmplY3RO
YW1lKG5hbWUpOworCVFWQm94TGF5b3V0ICp2ZXJ0aWNhbExheW91dCA9IG5ldyBRVkJveExheW91
dCh0aGlzKTsKKwl2ZXJ0aWNhbExheW91dC0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAsIDAp
OworCisJbGlzdCA9IG5ldyBDb25maWdMaXN0KHRoaXMpOworCXZlcnRpY2FsTGF5b3V0LT5hZGRX
aWRnZXQobGlzdCk7CisJbGluZUVkaXQgPSBuZXcgQ29uZmlnTGluZUVkaXQodGhpcyk7CisJbGlu
ZUVkaXQtPmhpZGUoKTsKKwl2ZXJ0aWNhbExheW91dC0+YWRkV2lkZ2V0KGxpbmVFZGl0KTsKKwor
CXRoaXMtPm5leHRWaWV3ID0gdmlld0xpc3Q7CisJdmlld0xpc3QgPSB0aGlzOworfQorCitDb25m
aWdWaWV3Ojp+Q29uZmlnVmlldyh2b2lkKQoreworCUNvbmZpZ1ZpZXcqKiB2cDsKKworCWZvciAo
dnAgPSAmdmlld0xpc3Q7ICp2cDsgdnAgPSAmKCp2cCktPm5leHRWaWV3KSB7CisJCWlmICgqdnAg
PT0gdGhpcykgeworCQkJKnZwID0gbmV4dFZpZXc7CisJCQlicmVhazsKKwkJfQorCX0KK30KKwor
dm9pZCBDb25maWdWaWV3OjpzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKmFjdCkKK3sKKwlpZiAoYWN0
ID09IHNob3dOb3JtYWxBY3Rpb24pCisJCWxpc3QtPm9wdE1vZGUgPSBub3JtYWxPcHQ7CisJZWxz
ZSBpZiAoYWN0ID09IHNob3dBbGxBY3Rpb24pCisJCWxpc3QtPm9wdE1vZGUgPSBhbGxPcHQ7CisJ
ZWxzZQorCQlsaXN0LT5vcHRNb2RlID0gcHJvbXB0T3B0OworCisJbGlzdC0+dXBkYXRlTGlzdEFs
bCgpOworfQorCit2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dOYW1lKGJvb2wgYikKK3sKKwlpZiAo
bGlzdC0+c2hvd05hbWUgIT0gYikgeworCQlsaXN0LT5zaG93TmFtZSA9IGI7CisJCWxpc3QtPnJl
aW5pdCgpOworCQllbWl0IHNob3dOYW1lQ2hhbmdlZChiKTsKKwl9Cit9CisKK3ZvaWQgQ29uZmln
Vmlldzo6c2V0U2hvd1JhbmdlKGJvb2wgYikKK3sKKwlpZiAobGlzdC0+c2hvd1JhbmdlICE9IGIp
IHsKKwkJbGlzdC0+c2hvd1JhbmdlID0gYjsKKwkJbGlzdC0+cmVpbml0KCk7CisJCWVtaXQgc2hv
d1JhbmdlQ2hhbmdlZChiKTsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnVmlldzo6c2V0U2hvd0RhdGEo
Ym9vbCBiKQoreworCWlmIChsaXN0LT5zaG93RGF0YSAhPSBiKSB7CisJCWxpc3QtPnNob3dEYXRh
ID0gYjsKKwkJbGlzdC0+cmVpbml0KCk7CisJCWVtaXQgc2hvd0RhdGFDaGFuZ2VkKGIpOworCX0K
K30KKwordm9pZCBDb25maWdMaXN0OjpzZXRBbGxPcGVuKGJvb2wgb3BlbikKK3sKKwlRVHJlZVdp
ZGdldEl0ZW1JdGVyYXRvciBpdCh0aGlzKTsKKworCXdoaWxlICgqaXQpIHsKKwkJKCppdCktPnNl
dEV4cGFuZGVkKG9wZW4pOworCisJCSsraXQ7CisJfQorfQorCit2b2lkIENvbmZpZ1ZpZXc6OnVw
ZGF0ZUxpc3QoQ29uZmlnSXRlbSogaXRlbSkKK3sKKwlDb25maWdWaWV3KiB2OworCisJZm9yICh2
ID0gdmlld0xpc3Q7IHY7IHYgPSB2LT5uZXh0VmlldykKKwkJdi0+bGlzdC0+dXBkYXRlTGlzdChp
dGVtKTsKK30KKwordm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0QWxsKHZvaWQpCit7CisJQ29u
ZmlnVmlldyogdjsKKworCWZvciAodiA9IHZpZXdMaXN0OyB2OyB2ID0gdi0+bmV4dFZpZXcpCisJ
CXYtPmxpc3QtPnVwZGF0ZUxpc3RBbGwoKTsKK30KKworQ29uZmlnSW5mb1ZpZXc6OkNvbmZpZ0lu
Zm9WaWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkKKwk6IFBhcmVudChwYXJl
bnQpLCBzeW0oMCksIF9tZW51KDApCit7CisJc2V0T2JqZWN0TmFtZShuYW1lKTsKKworCisJaWYg
KCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7CisJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3Vw
KG9iamVjdE5hbWUoKSk7CisJCXNldFNob3dEZWJ1Zyhjb25maWdTZXR0aW5ncy0+dmFsdWUoIi9z
aG93RGVidWciLCBmYWxzZSkudG9Cb29sKCkpOworCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAo
KTsKKwkJY29ubmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChzYXZl
U2V0dGluZ3MoKSkpOworCX0KK30KKwordm9pZCBDb25maWdJbmZvVmlldzo6c2F2ZVNldHRpbmdz
KHZvaWQpCit7CisJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7CisJCWNvbmZpZ1NldHRp
bmdzLT5iZWdpbkdyb3VwKG9iamVjdE5hbWUoKSk7CisJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1
ZSgiL3Nob3dEZWJ1ZyIsIHNob3dEZWJ1ZygpKTsKKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3Vw
KCk7CisJfQorfQorCit2b2lkIENvbmZpZ0luZm9WaWV3OjpzZXRTaG93RGVidWcoYm9vbCBiKQor
eworCWlmIChfc2hvd0RlYnVnICE9IGIpIHsKKwkJX3Nob3dEZWJ1ZyA9IGI7CisJCWlmIChfbWVu
dSkKKwkJCW1lbnVJbmZvKCk7CisJCWVsc2UgaWYgKHN5bSkKKwkJCXN5bWJvbEluZm8oKTsKKwkJ
ZW1pdCBzaG93RGVidWdDaGFuZ2VkKGIpOworCX0KK30KKwordm9pZCBDb25maWdJbmZvVmlldzo6
c2V0SW5mbyhzdHJ1Y3QgbWVudSAqbSkKK3sKKwlpZiAoX21lbnUgPT0gbSkKKwkJcmV0dXJuOwor
CV9tZW51ID0gbTsKKwlzeW0gPSBOVUxMOworCWlmICghX21lbnUpCisJCWNsZWFyKCk7CisJZWxz
ZQorCQltZW51SW5mbygpOworfQorCit2b2lkIENvbmZpZ0luZm9WaWV3OjpzeW1ib2xJbmZvKHZv
aWQpCit7CisJUVN0cmluZyBzdHI7CisKKwlzdHIgKz0gIjxiaWc+U3ltYm9sOiA8Yj4iOworCXN0
ciArPSBwcmludF9maWx0ZXIoc3ltLT5uYW1lKTsKKwlzdHIgKz0gIjwvYj48L2JpZz48YnI+PGJy
PnZhbHVlOiAiOworCXN0ciArPSBwcmludF9maWx0ZXIoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3lt
KSk7CisJc3RyICs9ICI8YnI+dmlzaWJpbGl0eTogIjsKKwlzdHIgKz0gc3ltLT52aXNpYmxlID09
IHllcyA/ICJ5IiA6IHN5bS0+dmlzaWJsZSA9PSBtb2QgPyAibSIgOiAibiI7CisJc3RyICs9ICI8
YnI+IjsKKwlzdHIgKz0gZGVidWdfaW5mbyhzeW0pOworCisJc2V0VGV4dChzdHIpOworfQorCit2
b2lkIENvbmZpZ0luZm9WaWV3OjptZW51SW5mbyh2b2lkKQoreworCXN0cnVjdCBzeW1ib2wqIHN5
bTsKKwlRU3RyaW5nIGhlYWQsIGRlYnVnLCBoZWxwOworCisJc3ltID0gX21lbnUtPnN5bTsKKwlp
ZiAoc3ltKSB7CisJCWlmIChfbWVudS0+cHJvbXB0KSB7CisJCQloZWFkICs9ICI8YmlnPjxiPiI7
CisJCQloZWFkICs9IHByaW50X2ZpbHRlcihfbWVudS0+cHJvbXB0LT50ZXh0KTsKKwkJCWhlYWQg
Kz0gIjwvYj48L2JpZz4iOworCQkJaWYgKHN5bS0+bmFtZSkgeworCQkJCWhlYWQgKz0gIiAoIjsK
KwkJCQlpZiAoc2hvd0RlYnVnKCkpCisJCQkJCWhlYWQgKz0gUVN0cmluZygpLnNwcmludGYoIjxh
IGhyZWY9XCJzJXBcIj4iLCBzeW0pOworCQkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFt
ZSk7CisJCQkJaWYgKHNob3dEZWJ1ZygpKQorCQkJCQloZWFkICs9ICI8L2E+IjsKKwkJCQloZWFk
ICs9ICIpIjsKKwkJCX0KKwkJfSBlbHNlIGlmIChzeW0tPm5hbWUpIHsKKwkJCWhlYWQgKz0gIjxi
aWc+PGI+IjsKKwkJCWlmIChzaG93RGVidWcoKSkKKwkJCQloZWFkICs9IFFTdHJpbmcoKS5zcHJp
bnRmKCI8YSBocmVmPVwicyVwXCI+Iiwgc3ltKTsKKwkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5
bS0+bmFtZSk7CisJCQlpZiAoc2hvd0RlYnVnKCkpCisJCQkJaGVhZCArPSAiPC9hPiI7CisJCQlo
ZWFkICs9ICI8L2I+PC9iaWc+IjsKKwkJfQorCQloZWFkICs9ICI8YnI+PGJyPiI7CisKKwkJaWYg
KHNob3dEZWJ1ZygpKQorCQkJZGVidWcgPSBkZWJ1Z19pbmZvKHN5bSk7CisKKwkJc3RydWN0IGdz
dHIgaGVscF9nc3RyID0gc3RyX25ldygpOworCQltZW51X2dldF9leHRfaGVscChfbWVudSwgJmhl
bHBfZ3N0cik7CisJCWhlbHAgPSBwcmludF9maWx0ZXIoc3RyX2dldCgmaGVscF9nc3RyKSk7CisJ
CXN0cl9mcmVlKCZoZWxwX2dzdHIpOworCX0gZWxzZSBpZiAoX21lbnUtPnByb21wdCkgeworCQlo
ZWFkICs9ICI8YmlnPjxiPiI7CisJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKF9tZW51LT5wcm9tcHQt
PnRleHQpOworCQloZWFkICs9ICI8L2I+PC9iaWc+PGJyPjxicj4iOworCQlpZiAoc2hvd0RlYnVn
KCkpIHsKKwkJCWlmIChfbWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIpIHsKKwkJCQlkZWJ1ZyAr
PSAiJm5ic3A7Jm5ic3A7ZGVwOiAiOworCQkJCWV4cHJfcHJpbnQoX21lbnUtPnByb21wdC0+dmlz
aWJsZS5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsKKwkJCQlkZWJ1ZyAr
PSAiPGJyPjxicj4iOworCQkJfQorCQl9CisJfQorCWlmIChzaG93RGVidWcoKSkKKwkJZGVidWcg
Kz0gUVN0cmluZygpLnNwcmludGYoImRlZmluZWQgYXQgJXM6JWQ8YnI+PGJyPiIsIF9tZW51LT5m
aWxlLT5uYW1lLCBfbWVudS0+bGluZW5vKTsKKworCXNldFRleHQoaGVhZCArIGRlYnVnICsgaGVs
cCk7Cit9CisKK1FTdHJpbmcgQ29uZmlnSW5mb1ZpZXc6OmRlYnVnX2luZm8oc3RydWN0IHN5bWJv
bCAqc3ltKQoreworCVFTdHJpbmcgZGVidWc7CisKKwlkZWJ1ZyArPSAidHlwZTogIjsKKwlkZWJ1
ZyArPSBwcmludF9maWx0ZXIoc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsKKwlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pKQorCQlkZWJ1ZyArPSAiIChjaG9pY2UpIjsKKwlkZWJ1ZyArPSAiPGJyPiI7
CisJaWYgKHN5bS0+cmV2X2RlcC5leHByKSB7CisJCWRlYnVnICs9ICJyZXZlcnNlIGRlcDogIjsK
KwkJZXhwcl9wcmludChzeW0tPnJldl9kZXAuZXhwciwgZXhwcl9wcmludF9oZWxwLCAmZGVidWcs
IEVfTk9ORSk7CisJCWRlYnVnICs9ICI8YnI+IjsKKwl9CisJZm9yIChzdHJ1Y3QgcHJvcGVydHkg
KnByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCXN3aXRjaCAo
cHJvcC0+dHlwZSkgeworCQljYXNlIFBfUFJPTVBUOgorCQljYXNlIFBfTUVOVToKKwkJCWRlYnVn
ICs9IFFTdHJpbmcoKS5zcHJpbnRmKCJwcm9tcHQ6IDxhIGhyZWY9XCJtJXBcIj4iLCBwcm9wLT5t
ZW51KTsKKwkJCWRlYnVnICs9IHByaW50X2ZpbHRlcihwcm9wLT50ZXh0KTsKKwkJCWRlYnVnICs9
ICI8L2E+PGJyPiI7CisJCQlicmVhazsKKwkJY2FzZSBQX0RFRkFVTFQ6CisJCWNhc2UgUF9TRUxF
Q1Q6CisJCWNhc2UgUF9SQU5HRToKKwkJCWRlYnVnICs9IHByb3BfZ2V0X3R5cGVfbmFtZShwcm9w
LT50eXBlKTsKKwkJCWRlYnVnICs9ICI6ICI7CisJCQlleHByX3ByaW50KHByb3AtPmV4cHIsIGV4
cHJfcHJpbnRfaGVscCwgJmRlYnVnLCBFX05PTkUpOworCQkJZGVidWcgKz0gIjxicj4iOworCQkJ
YnJlYWs7CisJCWNhc2UgUF9DSE9JQ0U6CisJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CisJ
CQkJZGVidWcgKz0gImNob2ljZTogIjsKKwkJCQlleHByX3ByaW50KHByb3AtPmV4cHIsIGV4cHJf
cHJpbnRfaGVscCwgJmRlYnVnLCBFX05PTkUpOworCQkJCWRlYnVnICs9ICI8YnI+IjsKKwkJCX0K
KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGVidWcgKz0gInVua25vd24gcHJvcGVydHk6ICI7
CisJCQlkZWJ1ZyArPSBwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSk7CisJCQlkZWJ1ZyAr
PSAiPGJyPiI7CisJCX0KKwkJaWYgKHByb3AtPnZpc2libGUuZXhwcikgeworCQkJZGVidWcgKz0g
IiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2RlcDogIjsKKwkJCWV4cHJfcHJpbnQocHJvcC0+dmlz
aWJsZS5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsKKwkJCWRlYnVnICs9
ICI8YnI+IjsKKwkJfQorCX0KKwlkZWJ1ZyArPSAiPGJyPiI7CisKKwlyZXR1cm4gZGVidWc7Cit9
CisKK1FTdHJpbmcgQ29uZmlnSW5mb1ZpZXc6OnByaW50X2ZpbHRlcihjb25zdCBRU3RyaW5nICZz
dHIpCit7CisJUVJlZ0V4cCByZSgiWzw+JlwiXFxuXSIpOworCVFTdHJpbmcgcmVzID0gc3RyOwor
CWZvciAoaW50IGkgPSAwOyAoaSA9IHJlcy5pbmRleE9mKHJlLCBpKSkgPj0gMDspIHsKKwkJc3dp
dGNoIChyZXNbaV0udG9MYXRpbjEoKSkgeworCQljYXNlICc8JzoKKwkJCXJlcy5yZXBsYWNlKGks
IDEsICImbHQ7Iik7CisJCQlpICs9IDQ7CisJCQlicmVhazsKKwkJY2FzZSAnPic6CisJCQlyZXMu
cmVwbGFjZShpLCAxLCAiJmd0OyIpOworCQkJaSArPSA0OworCQkJYnJlYWs7CisJCWNhc2UgJyYn
OgorCQkJcmVzLnJlcGxhY2UoaSwgMSwgIiZhbXA7Iik7CisJCQlpICs9IDU7CisJCQlicmVhazsK
KwkJY2FzZSAnIic6CisJCQlyZXMucmVwbGFjZShpLCAxLCAiJnF1b3Q7Iik7CisJCQlpICs9IDY7
CisJCQlicmVhazsKKwkJY2FzZSAnXG4nOgorCQkJcmVzLnJlcGxhY2UoaSwgMSwgIjxicj4iKTsK
KwkJCWkgKz0gNDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiByZXM7Cit9CisKK3ZvaWQg
Q29uZmlnSW5mb1ZpZXc6OmV4cHJfcHJpbnRfaGVscCh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3ltYm9s
ICpzeW0sIGNvbnN0IGNoYXIgKnN0cikKK3sKKwlRU3RyaW5nKiB0ZXh0ID0gcmVpbnRlcnByZXRf
Y2FzdDxRU3RyaW5nKj4oZGF0YSk7CisJUVN0cmluZyBzdHIyID0gcHJpbnRfZmlsdGVyKHN0cik7
CisKKwlpZiAoc3ltICYmIHN5bS0+bmFtZSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1Qp
KSB7CisJCSp0ZXh0ICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+Iiwgc3lt
KTsKKwkJKnRleHQgKz0gc3RyMjsKKwkJKnRleHQgKz0gIjwvYT4iOworCX0gZWxzZQorCQkqdGV4
dCArPSBzdHIyOworfQorCitRTWVudSogQ29uZmlnSW5mb1ZpZXc6OmNyZWF0ZVN0YW5kYXJkQ29u
dGV4dE1lbnUoY29uc3QgUVBvaW50ICYgcG9zKQoreworCVFNZW51KiBwb3B1cCA9IFBhcmVudDo6
Y3JlYXRlU3RhbmRhcmRDb250ZXh0TWVudShwb3MpOworCVFBY3Rpb24qIGFjdGlvbiA9IG5ldyBR
QWN0aW9uKCJTaG93IERlYnVnIEluZm8iLCBwb3B1cCk7CisJICBhY3Rpb24tPnNldENoZWNrYWJs
ZSh0cnVlKTsKKwkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIFNMT1Qo
c2V0U2hvd0RlYnVnKGJvb2wpKSk7CisJICBjb25uZWN0KHRoaXMsIFNJR05BTChzaG93RGVidWdD
aGFuZ2VkKGJvb2wpKSwgYWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7CisJICBhY3Rpb24tPnNl
dENoZWNrZWQoc2hvd0RlYnVnKCkpOworCXBvcHVwLT5hZGRTZXBhcmF0b3IoKTsKKwlwb3B1cC0+
YWRkQWN0aW9uKGFjdGlvbik7CisJcmV0dXJuIHBvcHVwOworfQorCit2b2lkIENvbmZpZ0luZm9W
aWV3Ojpjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKQoreworCVBhcmVudDo6
Y29udGV4dE1lbnVFdmVudChlKTsKK30KKworQ29uZmlnU2VhcmNoV2luZG93OjpDb25maWdTZWFy
Y2hXaW5kb3coQ29uZmlnTWFpbldpbmRvdyogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQorCTog
UGFyZW50KHBhcmVudCksIHJlc3VsdChOVUxMKQoreworCXNldE9iamVjdE5hbWUobmFtZSk7CisJ
c2V0V2luZG93VGl0bGUoIlNlYXJjaCBDb25maWciKTsKKworCVFWQm94TGF5b3V0KiBsYXlvdXQx
ID0gbmV3IFFWQm94TGF5b3V0KHRoaXMpOworCWxheW91dDEtPnNldENvbnRlbnRzTWFyZ2lucygx
MSwgMTEsIDExLCAxMSk7CisJbGF5b3V0MS0+c2V0U3BhY2luZyg2KTsKKwlRSEJveExheW91dCog
bGF5b3V0MiA9IG5ldyBRSEJveExheW91dCgwKTsKKwlsYXlvdXQyLT5zZXRDb250ZW50c01hcmdp
bnMoMCwgMCwgMCwgMCk7CisJbGF5b3V0Mi0+c2V0U3BhY2luZyg2KTsKKwlsYXlvdXQyLT5hZGRX
aWRnZXQobmV3IFFMYWJlbCgiRmluZDoiLCB0aGlzKSk7CisJZWRpdEZpZWxkID0gbmV3IFFMaW5l
RWRpdCh0aGlzKTsKKwljb25uZWN0KGVkaXRGaWVsZCwgU0lHTkFMKHJldHVyblByZXNzZWQoKSks
IFNMT1Qoc2VhcmNoKCkpKTsKKwlsYXlvdXQyLT5hZGRXaWRnZXQoZWRpdEZpZWxkKTsKKwlzZWFy
Y2hCdXR0b24gPSBuZXcgUVB1c2hCdXR0b24oIlNlYXJjaCIsIHRoaXMpOworCXNlYXJjaEJ1dHRv
bi0+c2V0QXV0b0RlZmF1bHQoZmFsc2UpOworCWNvbm5lY3Qoc2VhcmNoQnV0dG9uLCBTSUdOQUwo
Y2xpY2tlZCgpKSwgU0xPVChzZWFyY2goKSkpOworCWxheW91dDItPmFkZFdpZGdldChzZWFyY2hC
dXR0b24pOworCWxheW91dDEtPmFkZExheW91dChsYXlvdXQyKTsKKworCXNwbGl0ID0gbmV3IFFT
cGxpdHRlcih0aGlzKTsKKwlzcGxpdC0+c2V0T3JpZW50YXRpb24oUXQ6OlZlcnRpY2FsKTsKKwls
aXN0ID0gbmV3IENvbmZpZ1ZpZXcoc3BsaXQsIG5hbWUpOworCWxpc3QtPmxpc3QtPm1vZGUgPSBs
aXN0TW9kZTsKKwlpbmZvID0gbmV3IENvbmZpZ0luZm9WaWV3KHNwbGl0LCBuYW1lKTsKKwljb25u
ZWN0KGxpc3QtPmxpc3QsIFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqKSksCisJCWlu
Zm8sIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOworCWNvbm5lY3QobGlzdC0+bGlzdCwg
U0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwKKwkJcGFyZW50LCBTTE9UKHNldE1l
bnVMaW5rKHN0cnVjdCBtZW51ICopKSk7CisKKwlsYXlvdXQxLT5hZGRXaWRnZXQoc3BsaXQpOwor
CisJaWYgKG5hbWUpIHsKKwkJUVZhcmlhbnQgeCwgeTsKKwkJaW50IHdpZHRoLCBoZWlnaHQ7CisJ
CWJvb2wgb2s7CisKKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAobmFtZSk7CisJCXdpZHRo
ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHdpZHRoIiwgcGFyZW50LT53aWR0aCgp
IC8gMikudG9JbnQoKTsKKwkJaGVpZ2h0ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93
IGhlaWdodCIsIHBhcmVudC0+aGVpZ2h0KCkgLyAyKS50b0ludCgpOworCQlyZXNpemUod2lkdGgs
IGhlaWdodCk7CisJCXggPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgeCIpOworCQl5
ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHkiKTsKKwkJaWYgKCh4LmlzVmFsaWQo
KSkmJih5LmlzVmFsaWQoKSkpCisJCQltb3ZlKHgudG9JbnQoKSwgeS50b0ludCgpKTsKKwkJUUxp
c3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxpdCIsICZvayk7
CisJCWlmIChvaykKKwkJCXNwbGl0LT5zZXRTaXplcyhzaXplcyk7CisJCWNvbmZpZ1NldHRpbmdz
LT5lbmRHcm91cCgpOworCQljb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkp
LCBTTE9UKHNhdmVTZXR0aW5ncygpKSk7CisJfQorfQorCit2b2lkIENvbmZpZ1NlYXJjaFdpbmRv
dzo6c2F2ZVNldHRpbmdzKHZvaWQpCit7CisJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7
CisJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG9iamVjdE5hbWUoKSk7CisJCWNvbmZpZ1Nl
dHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB4IiwgcG9zKCkueCgpKTsKKwkJY29uZmlnU2V0dGlu
Z3MtPnNldFZhbHVlKCIvd2luZG93IHkiLCBwb3MoKS55KCkpOworCQljb25maWdTZXR0aW5ncy0+
c2V0VmFsdWUoIi93aW5kb3cgd2lkdGgiLCBzaXplKCkud2lkdGgoKSk7CisJCWNvbmZpZ1NldHRp
bmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBzaXplKCkuaGVpZ2h0KCkpOworCQljb25m
aWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0Iiwgc3BsaXQtPnNpemVzKCkpOworCQljb25m
aWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnU2VhcmNoV2luZG93
OjpzZWFyY2godm9pZCkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICoqcDsKKwlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7CisJQ29uZmlnSXRlbSAqbGFzdEl0ZW0gPSBOVUxMOworCisJZnJlZShyZXN1bHQpOwor
CWxpc3QtPmxpc3QtPmNsZWFyKCk7CisJaW5mby0+Y2xlYXIoKTsKKworCXJlc3VsdCA9IHN5bV9y
ZV9zZWFyY2goZWRpdEZpZWxkLT50ZXh0KCkudG9MYXRpbjEoKSk7CisJaWYgKCFyZXN1bHQpCisJ
CXJldHVybjsKKwlmb3IgKHAgPSByZXN1bHQ7ICpwOyBwKyspIHsKKwkJZm9yX2FsbF9wcm9tcHRz
KCgqcCksIHByb3ApCisJCQlsYXN0SXRlbSA9IG5ldyBDb25maWdJdGVtKGxpc3QtPmxpc3QsIGxh
c3RJdGVtLCBwcm9wLT5tZW51LAorCQkJCQkJICBtZW51X2lzX3Zpc2libGUocHJvcC0+bWVudSkp
OworCX0KK30KKworLyoKKyAqIENvbnN0cnVjdCB0aGUgY29tcGxldGUgY29uZmlnIHdpZGdldAor
ICovCitDb25maWdNYWluV2luZG93OjpDb25maWdNYWluV2luZG93KHZvaWQpCisJOiBzZWFyY2hX
aW5kb3coMCkKK3sKKwlRTWVudUJhciogbWVudTsKKwlib29sIG9rID0gdHJ1ZTsKKwlRVmFyaWFu
dCB4LCB5OworCWludCB3aWR0aCwgaGVpZ2h0OworCWNoYXIgdGl0bGVbMjU2XTsKKworCVFEZXNr
dG9wV2lkZ2V0ICpkID0gY29uZmlnQXBwLT5kZXNrdG9wKCk7CisJc25wcmludGYodGl0bGUsIHNp
emVvZih0aXRsZSksICIlcyVzIiwKKwkJcm9vdG1lbnUucHJvbXB0LT50ZXh0LAorCQkiIgorCQkp
OworCXNldFdpbmRvd1RpdGxlKHRpdGxlKTsKKworCXdpZHRoID0gY29uZmlnU2V0dGluZ3MtPnZh
bHVlKCIvd2luZG93IHdpZHRoIiwgZC0+d2lkdGgoKSAtIDY0KS50b0ludCgpOworCWhlaWdodCA9
IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBkLT5oZWlnaHQoKSAtIDY0
KS50b0ludCgpOworCXJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKwl4ID0gY29uZmlnU2V0dGluZ3Mt
PnZhbHVlKCIvd2luZG93IHgiKTsKKwl5ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93
IHkiKTsKKwlpZiAoKHguaXNWYWxpZCgpKSYmKHkuaXNWYWxpZCgpKSkKKwkJbW92ZSh4LnRvSW50
KCksIHkudG9JbnQoKSk7CisKKwlzcGxpdDEgPSBuZXcgUVNwbGl0dGVyKHRoaXMpOworCXNwbGl0
MS0+c2V0T3JpZW50YXRpb24oUXQ6Okhvcml6b250YWwpOworCXNldENlbnRyYWxXaWRnZXQoc3Bs
aXQxKTsKKworCW1lbnVWaWV3ID0gbmV3IENvbmZpZ1ZpZXcoc3BsaXQxLCAibWVudSIpOworCW1l
bnVMaXN0ID0gbWVudVZpZXctPmxpc3Q7CisKKwlzcGxpdDIgPSBuZXcgUVNwbGl0dGVyKHNwbGl0
MSk7CisJc3BsaXQyLT5zZXRPcmllbnRhdGlvbihRdDo6VmVydGljYWwpOworCisJLy8gY3JlYXRl
IGNvbmZpZyB0cmVlCisJY29uZmlnVmlldyA9IG5ldyBDb25maWdWaWV3KHNwbGl0MiwgImNvbmZp
ZyIpOworCWNvbmZpZ0xpc3QgPSBjb25maWdWaWV3LT5saXN0OworCisJaGVscFRleHQgPSBuZXcg
Q29uZmlnSW5mb1ZpZXcoc3BsaXQyLCAiaGVscCIpOworCisJc2V0VGFiT3JkZXIoY29uZmlnTGlz
dCwgaGVscFRleHQpOworCWNvbmZpZ0xpc3QtPnNldEZvY3VzKCk7CisKKwltZW51ID0gbWVudUJh
cigpOworCXRvb2xCYXIgPSBuZXcgUVRvb2xCYXIoIlRvb2xzIiwgdGhpcyk7CisJYWRkVG9vbEJh
cih0b29sQmFyKTsKKworCWJhY2tBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9iYWNr
KSwgIkJhY2siLCB0aGlzKTsKKwkgIGNvbm5lY3QoYmFja0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJl
ZChib29sKSksIFNMT1QoZ29CYWNrKCkpKTsKKwkgIGJhY2tBY3Rpb24tPnNldEVuYWJsZWQoZmFs
c2UpOworCVFBY3Rpb24gKnF1aXRBY3Rpb24gPSBuZXcgUUFjdGlvbigiJlF1aXQiLCB0aGlzKTsK
KwlxdWl0QWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfUSk7CisJICBjb25u
ZWN0KHF1aXRBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKGNsb3NlKCkpKTsK
KwlRQWN0aW9uICpsb2FkQWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fbG9hZCksICIm
TG9hZCIsIHRoaXMpOworCWxvYWRBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6Oktl
eV9MKTsKKwkgIGNvbm5lY3QobG9hZEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNM
T1QobG9hZENvbmZpZygpKSk7CisJc2F2ZUFjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBt
X3NhdmUpLCAiJlNhdmUiLCB0aGlzKTsKKwlzYXZlQWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RS
TCArIFF0OjpLZXlfUyk7CisJICBjb25uZWN0KHNhdmVBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQo
Ym9vbCkpLCBTTE9UKHNhdmVDb25maWcoKSkpOworCWNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2so
Y29uZl9jaGFuZ2VkKTsKKwkvLyBTZXQgc2F2ZUFjdGlvbidzIGluaXRpYWwgc3RhdGUKKwljb25m
X2NoYW5nZWQoKTsKKwljb25maWduYW1lID0geHN0cmR1cChjb25mX2dldF9jb25maWduYW1lKCkp
OworCisJUUFjdGlvbiAqc2F2ZUFzQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNhdmUgJkFzLi4uIiwg
dGhpcyk7CisJICBjb25uZWN0KHNhdmVBc0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSks
IFNMT1Qoc2F2ZUNvbmZpZ0FzKCkpKTsKKwlRQWN0aW9uICpzZWFyY2hBY3Rpb24gPSBuZXcgUUFj
dGlvbigiJkZpbmQiLCB0aGlzKTsKKwlzZWFyY2hBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJM
ICsgUXQ6OktleV9GKTsKKwkgIGNvbm5lY3Qoc2VhcmNoQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVk
KGJvb2wpKSwgU0xPVChzZWFyY2hDb25maWcoKSkpOworCXNpbmdsZVZpZXdBY3Rpb24gPSBuZXcg
UUFjdGlvbihRUGl4bWFwKHhwbV9zaW5nbGVfdmlldyksICJTaW5nbGUgVmlldyIsIHRoaXMpOwor
CXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKwkgIGNvbm5lY3Qoc2luZ2xl
Vmlld0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd1NpbmdsZVZpZXco
KSkpOworCXNwbGl0Vmlld0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NwbGl0X3Zp
ZXcpLCAiU3BsaXQgVmlldyIsIHRoaXMpOworCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2thYmxl
KHRydWUpOworCSAgY29ubmVjdChzcGxpdFZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9v
bCkpLCBTTE9UKHNob3dTcGxpdFZpZXcoKSkpOworCWZ1bGxWaWV3QWN0aW9uID0gbmV3IFFBY3Rp
b24oUVBpeG1hcCh4cG1fdHJlZV92aWV3KSwgIkZ1bGwgVmlldyIsIHRoaXMpOworCWZ1bGxWaWV3
QWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJICBjb25uZWN0KGZ1bGxWaWV3QWN0aW9uLCBT
SUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93RnVsbFZpZXcoKSkpOworCisJUUFjdGlv
biAqc2hvd05hbWVBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBOYW1lIiwgdGhpcyk7CisJICBz
aG93TmFtZUFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCSAgY29ubmVjdChzaG93TmFtZUFj
dGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBjb25maWdWaWV3LCBTTE9UKHNldFNob3dOYW1l
KGJvb2wpKSk7CisJICBzaG93TmFtZUFjdGlvbi0+c2V0Q2hlY2tlZChjb25maWdWaWV3LT5zaG93
TmFtZSgpKTsKKwlRQWN0aW9uICpzaG93UmFuZ2VBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBS
YW5nZSIsIHRoaXMpOworCSAgc2hvd1JhbmdlQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJ
ICBjb25uZWN0KHNob3dSYW5nZUFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBjb25maWdW
aWV3LCBTTE9UKHNldFNob3dSYW5nZShib29sKSkpOworCVFBY3Rpb24gKnNob3dEYXRhQWN0aW9u
ID0gbmV3IFFBY3Rpb24oIlNob3cgRGF0YSIsIHRoaXMpOworCSAgc2hvd0RhdGFBY3Rpb24tPnNl
dENoZWNrYWJsZSh0cnVlKTsKKwkgIGNvbm5lY3Qoc2hvd0RhdGFBY3Rpb24sIFNJR05BTCh0b2dn
bGVkKGJvb2wpKSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93RGF0YShib29sKSkpOworCisJUUFj
dGlvbkdyb3VwICpvcHRHcm91cCA9IG5ldyBRQWN0aW9uR3JvdXAodGhpcyk7CisJb3B0R3JvdXAt
PnNldEV4Y2x1c2l2ZSh0cnVlKTsKKwljb25uZWN0KG9wdEdyb3VwLCBTSUdOQUwodHJpZ2dlcmVk
KFFBY3Rpb24qKSksIGNvbmZpZ1ZpZXcsCisJCVNMT1Qoc2V0T3B0aW9uTW9kZShRQWN0aW9uICop
KSk7CisJY29ubmVjdChvcHRHcm91cCwgU0lHTkFMKHRyaWdnZXJlZChRQWN0aW9uICopKSwgbWVu
dVZpZXcsCisJCVNMT1Qoc2V0T3B0aW9uTW9kZShRQWN0aW9uICopKSk7CisKKwljb25maWdWaWV3
LT5zaG93Tm9ybWFsQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgTm9ybWFsIE9wdGlvbnMiLCBv
cHRHcm91cCk7CisJY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93
IEFsbCBPcHRpb25zIiwgb3B0R3JvdXApOworCWNvbmZpZ1ZpZXctPnNob3dQcm9tcHRBY3Rpb24g
PSBuZXcgUUFjdGlvbigiU2hvdyBQcm9tcHQgT3B0aW9ucyIsIG9wdEdyb3VwKTsKKwljb25maWdW
aWV3LT5zaG93Tm9ybWFsQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7CisJY29uZmlnVmlldy0+
c2hvd0FsbEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCWNvbmZpZ1ZpZXctPnNob3dQcm9t
cHRBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsKKworCVFBY3Rpb24gKnNob3dEZWJ1Z0FjdGlv
biA9IG5ldyBRQWN0aW9uKCJTaG93IERlYnVnIEluZm8iLCB0aGlzKTsKKwkgIHNob3dEZWJ1Z0Fj
dGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOworCSAgY29ubmVjdChzaG93RGVidWdBY3Rpb24sIFNJ
R05BTCh0b2dnbGVkKGJvb2wpKSwgaGVscFRleHQsIFNMT1Qoc2V0U2hvd0RlYnVnKGJvb2wpKSk7
CisJICBzaG93RGVidWdBY3Rpb24tPnNldENoZWNrZWQoaGVscFRleHQtPnNob3dEZWJ1ZygpKTsK
KworCVFBY3Rpb24gKnNob3dJbnRyb0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJJbnRyb2R1Y3Rpb24i
LCB0aGlzKTsKKwkgIGNvbm5lY3Qoc2hvd0ludHJvQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJv
b2wpKSwgU0xPVChzaG93SW50cm8oKSkpOworCVFBY3Rpb24gKnNob3dBYm91dEFjdGlvbiA9IG5l
dyBRQWN0aW9uKCJBYm91dCIsIHRoaXMpOworCSAgY29ubmVjdChzaG93QWJvdXRBY3Rpb24sIFNJ
R05BTCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNob3dBYm91dCgpKSk7CisKKwkvLyBpbml0IHRv
b2wgYmFyCisJdG9vbEJhci0+YWRkQWN0aW9uKGJhY2tBY3Rpb24pOworCXRvb2xCYXItPmFkZFNl
cGFyYXRvcigpOworCXRvb2xCYXItPmFkZEFjdGlvbihsb2FkQWN0aW9uKTsKKwl0b29sQmFyLT5h
ZGRBY3Rpb24oc2F2ZUFjdGlvbik7CisJdG9vbEJhci0+YWRkU2VwYXJhdG9yKCk7CisJdG9vbEJh
ci0+YWRkQWN0aW9uKHNpbmdsZVZpZXdBY3Rpb24pOworCXRvb2xCYXItPmFkZEFjdGlvbihzcGxp
dFZpZXdBY3Rpb24pOworCXRvb2xCYXItPmFkZEFjdGlvbihmdWxsVmlld0FjdGlvbik7CisKKwkv
LyBjcmVhdGUgY29uZmlnIG1lbnUKKwlRTWVudSogY29uZmlnID0gbWVudS0+YWRkTWVudSgiJkZp
bGUiKTsKKwljb25maWctPmFkZEFjdGlvbihsb2FkQWN0aW9uKTsKKwljb25maWctPmFkZEFjdGlv
bihzYXZlQWN0aW9uKTsKKwljb25maWctPmFkZEFjdGlvbihzYXZlQXNBY3Rpb24pOworCWNvbmZp
Zy0+YWRkU2VwYXJhdG9yKCk7CisJY29uZmlnLT5hZGRBY3Rpb24ocXVpdEFjdGlvbik7CisKKwkv
LyBjcmVhdGUgZWRpdCBtZW51CisJUU1lbnUqIGVkaXRNZW51ID0gbWVudS0+YWRkTWVudSgiJkVk
aXQiKTsKKwllZGl0TWVudS0+YWRkQWN0aW9uKHNlYXJjaEFjdGlvbik7CisKKwkvLyBjcmVhdGUg
b3B0aW9ucyBtZW51CisJUU1lbnUqIG9wdGlvbk1lbnUgPSBtZW51LT5hZGRNZW51KCImT3B0aW9u
Iik7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dOYW1lQWN0aW9uKTsKKwlvcHRpb25NZW51
LT5hZGRBY3Rpb24oc2hvd1JhbmdlQWN0aW9uKTsKKwlvcHRpb25NZW51LT5hZGRBY3Rpb24oc2hv
d0RhdGFBY3Rpb24pOworCW9wdGlvbk1lbnUtPmFkZFNlcGFyYXRvcigpOworCW9wdGlvbk1lbnUt
PmFkZEFjdGlvbnMob3B0R3JvdXAtPmFjdGlvbnMoKSk7CisJb3B0aW9uTWVudS0+YWRkU2VwYXJh
dG9yKCk7CisJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dEZWJ1Z0FjdGlvbik7CisKKwkvLyBj
cmVhdGUgaGVscCBtZW51CisJbWVudS0+YWRkU2VwYXJhdG9yKCk7CisJUU1lbnUqIGhlbHBNZW51
ID0gbWVudS0+YWRkTWVudSgiJkhlbHAiKTsKKwloZWxwTWVudS0+YWRkQWN0aW9uKHNob3dJbnRy
b0FjdGlvbik7CisJaGVscE1lbnUtPmFkZEFjdGlvbihzaG93QWJvdXRBY3Rpb24pOworCisJY29u
bmVjdChjb25maWdMaXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLAorCQlo
ZWxwVGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7CisJY29ubmVjdChjb25maWdM
aXN0LCBTSUdOQUwobWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopKSwKKwkJU0xPVChjaGFuZ2VN
ZW51KHN0cnVjdCBtZW51ICopKSk7CisJY29ubmVjdChjb25maWdMaXN0LCBTSUdOQUwocGFyZW50
U2VsZWN0ZWQoKSksCisJCVNMT1QoZ29CYWNrKCkpKTsKKwljb25uZWN0KG1lbnVMaXN0LCBTSUdO
QUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLAorCQloZWxwVGV4dCwgU0xPVChzZXRJbmZv
KHN0cnVjdCBtZW51ICopKSk7CisJY29ubmVjdChtZW51TGlzdCwgU0lHTkFMKG1lbnVTZWxlY3Rl
ZChzdHJ1Y3QgbWVudSAqKSksCisJCVNMT1QoY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOwor
CisJY29ubmVjdChjb25maWdMaXN0LCBTSUdOQUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLAor
CQloZWxwVGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7CisJY29ubmVjdChtZW51
TGlzdCwgU0lHTkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwKKwkJaGVscFRleHQsIFNMT1Qo
c2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOworCWNvbm5lY3QobWVudUxpc3QsIFNJR05BTChnb3RG
b2N1cyhzdHJ1Y3QgbWVudSAqKSksCisJCVNMT1QobGlzdEZvY3VzQ2hhbmdlZCh2b2lkKSkpOwor
CWNvbm5lY3QoaGVscFRleHQsIFNJR05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLAor
CQlTTE9UKHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICopKSk7CisKKwlRU3RyaW5nIGxpc3RNb2Rl
ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvbGlzdE1vZGUiLCAic3ltYm9sIikudG9TdHJpbmco
KTsKKwlpZiAobGlzdE1vZGUgPT0gInNpbmdsZSIpCisJCXNob3dTaW5nbGVWaWV3KCk7CisJZWxz
ZSBpZiAobGlzdE1vZGUgPT0gImZ1bGwiKQorCQlzaG93RnVsbFZpZXcoKTsKKwllbHNlIC8qaWYg
KGxpc3RNb2RlID09ICJzcGxpdCIpKi8KKwkJc2hvd1NwbGl0VmlldygpOworCisJLy8gVUkgc2V0
dXAgZG9uZSwgcmVzdG9yZSBzcGxpdHRlciBwb3NpdGlvbnMKKwlRTGlzdDxpbnQ+IHNpemVzID0g
Y29uZmlnU2V0dGluZ3MtPnJlYWRTaXplcygiL3NwbGl0MSIsICZvayk7CisJaWYgKG9rKQorCQlz
cGxpdDEtPnNldFNpemVzKHNpemVzKTsKKworCXNpemVzID0gY29uZmlnU2V0dGluZ3MtPnJlYWRT
aXplcygiL3NwbGl0MiIsICZvayk7CisJaWYgKG9rKQorCQlzcGxpdDItPnNldFNpemVzKHNpemVz
KTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93Ojpsb2FkQ29uZmlnKHZvaWQpCit7CisJUVN0
cmluZyBzdHI7CisJUUJ5dGVBcnJheSBiYTsKKwljb25zdCBjaGFyICpuYW1lOworCisJc3RyID0g
UUZpbGVEaWFsb2c6OmdldE9wZW5GaWxlTmFtZSh0aGlzLCAiIiwgY29uZmlnbmFtZSk7CisJaWYg
KHN0ci5pc051bGwoKSkKKwkJcmV0dXJuOworCisJYmEgPSBzdHIudG9Mb2NhbDhCaXQoKTsKKwlu
YW1lID0gYmEuZGF0YSgpOworCisJaWYgKGNvbmZfcmVhZChuYW1lKSkKKwkJUU1lc3NhZ2VCb3g6
OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsICJVbmFibGUgdG8gbG9hZCBjb25maWd1cmF0aW9u
ISIpOworCisJZnJlZShjb25maWduYW1lKTsKKwljb25maWduYW1lID0geHN0cmR1cChuYW1lKTsK
KworCUNvbmZpZ1ZpZXc6OnVwZGF0ZUxpc3RBbGwoKTsKK30KKworYm9vbCBDb25maWdNYWluV2lu
ZG93OjpzYXZlQ29uZmlnKHZvaWQpCit7CisJaWYgKGNvbmZfd3JpdGUoY29uZmlnbmFtZSkpIHsK
KwkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsICJVbmFibGUgdG8gc2F2
ZSBjb25maWd1cmF0aW9uISIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCWNvbmZfd3JpdGVfYXV0
b2NvbmYoMCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93Ojpz
YXZlQ29uZmlnQXModm9pZCkKK3sKKwlRU3RyaW5nIHN0cjsKKwlRQnl0ZUFycmF5IGJhOworCWNv
bnN0IGNoYXIgKm5hbWU7CisKKwlzdHIgPSBRRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVOYW1lKHRo
aXMsICIiLCBjb25maWduYW1lKTsKKwlpZiAoc3RyLmlzTnVsbCgpKQorCQlyZXR1cm47CisKKwli
YSA9IHN0ci50b0xvY2FsOEJpdCgpOworCW5hbWUgPSBiYS5kYXRhKCk7CisKKwlpZiAoY29uZl93
cml0ZShuYW1lKSkgeworCQlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwg
IlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24hIik7CisJfQorCWNvbmZfd3JpdGVfYXV0b2Nv
bmYoMCk7CisKKwlmcmVlKGNvbmZpZ25hbWUpOworCWNvbmZpZ25hbWUgPSB4c3RyZHVwKG5hbWUp
OworfQorCit2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNlYXJjaENvbmZpZyh2b2lkKQoreworCWlm
ICghc2VhcmNoV2luZG93KQorCQlzZWFyY2hXaW5kb3cgPSBuZXcgQ29uZmlnU2VhcmNoV2luZG93
KHRoaXMsICJzZWFyY2giKTsKKwlzZWFyY2hXaW5kb3ctPnNob3coKTsKK30KKwordm9pZCBDb25m
aWdNYWluV2luZG93OjpjaGFuZ2VNZW51KHN0cnVjdCBtZW51ICptZW51KQoreworCWNvbmZpZ0xp
c3QtPnNldFJvb3RNZW51KG1lbnUpOworCWlmIChjb25maWdMaXN0LT5yb290RW50cnktPnBhcmVu
dCA9PSAmcm9vdG1lbnUpCisJCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOworCWVsc2UK
KwkJYmFja0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsKK30KKwordm9pZCBDb25maWdNYWluV2lu
ZG93OjpzZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqbWVudSkKK3sKKwlzdHJ1Y3QgbWVudSAqcGFy
ZW50OworCUNvbmZpZ0xpc3QqIGxpc3QgPSBOVUxMOworCUNvbmZpZ0l0ZW0qIGl0ZW07CisKKwlp
ZiAoY29uZmlnTGlzdC0+bWVudVNraXAobWVudSkpCisJCXJldHVybjsKKworCXN3aXRjaCAoY29u
ZmlnTGlzdC0+bW9kZSkgeworCWNhc2Ugc2luZ2xlTW9kZToKKwkJbGlzdCA9IGNvbmZpZ0xpc3Q7
CisJCXBhcmVudCA9IG1lbnVfZ2V0X3BhcmVudF9tZW51KG1lbnUpOworCQlpZiAoIXBhcmVudCkK
KwkJCXJldHVybjsKKwkJbGlzdC0+c2V0Um9vdE1lbnUocGFyZW50KTsKKwkJYnJlYWs7CisJY2Fz
ZSBzeW1ib2xNb2RlOgorCQlpZiAobWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpIHsKKwkJCWNvbmZp
Z0xpc3QtPnNldFJvb3RNZW51KG1lbnUpOworCQkJY29uZmlnTGlzdC0+Y2xlYXJTZWxlY3Rpb24o
KTsKKwkJCWxpc3QgPSBtZW51TGlzdDsKKwkJfSBlbHNlIHsKKwkJCWxpc3QgPSBjb25maWdMaXN0
OworCQkJcGFyZW50ID0gbWVudV9nZXRfcGFyZW50X21lbnUobWVudS0+cGFyZW50KTsKKwkJCWlm
ICghcGFyZW50KQorCQkJCXJldHVybjsKKwkJCWl0ZW0gPSBtZW51TGlzdC0+ZmluZENvbmZpZ0l0
ZW0ocGFyZW50KTsKKwkJCWlmIChpdGVtKSB7CisJCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7
CisJCQkJbWVudUxpc3QtPnNjcm9sbFRvSXRlbShpdGVtKTsKKwkJCX0KKwkJCWxpc3QtPnNldFJv
b3RNZW51KHBhcmVudCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBmdWxsTW9kZToKKwkJbGlzdCA9
IGNvbmZpZ0xpc3Q7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChs
aXN0KSB7CisJCWl0ZW0gPSBsaXN0LT5maW5kQ29uZmlnSXRlbShtZW51KTsKKwkJaWYgKGl0ZW0p
IHsKKwkJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOworCQkJbGlzdC0+c2Nyb2xsVG9JdGVtKGl0
ZW0pOworCQkJbGlzdC0+c2V0Rm9jdXMoKTsKKwkJfQorCX0KK30KKwordm9pZCBDb25maWdNYWlu
V2luZG93OjpsaXN0Rm9jdXNDaGFuZ2VkKHZvaWQpCit7CisJaWYgKG1lbnVMaXN0LT5tb2RlID09
IG1lbnVNb2RlKQorCQljb25maWdMaXN0LT5jbGVhclNlbGVjdGlvbigpOworfQorCit2b2lkIENv
bmZpZ01haW5XaW5kb3c6OmdvQmFjayh2b2lkKQoreworCUNvbmZpZ0l0ZW0qIGl0ZW0sICpvbGRT
ZWxlY3Rpb247CisKKwljb25maWdMaXN0LT5zZXRQYXJlbnRNZW51KCk7CisJaWYgKGNvbmZpZ0xp
c3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpCisJCWJhY2tBY3Rpb24tPnNldEVuYWJsZWQoZmFs
c2UpOworCisJaWYgKG1lbnVMaXN0LT5zZWxlY3RlZEl0ZW1zKCkuY291bnQoKSA9PSAwKQorCQly
ZXR1cm47CisKKwlpdGVtID0gKENvbmZpZ0l0ZW0qKW1lbnVMaXN0LT5zZWxlY3RlZEl0ZW1zKCku
Zmlyc3QoKTsKKwlvbGRTZWxlY3Rpb24gPSBpdGVtOworCXdoaWxlIChpdGVtKSB7CisJCWlmIChp
dGVtLT5tZW51ID09IGNvbmZpZ0xpc3QtPnJvb3RFbnRyeSkgeworCQkJb2xkU2VsZWN0aW9uLT5z
ZXRTZWxlY3RlZChmYWxzZSk7CisJCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsKKwkJCWJyZWFr
OworCQl9CisJCWl0ZW0gPSAoQ29uZmlnSXRlbSopaXRlbS0+cGFyZW50KCk7CisJfQorfQorCit2
b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dTaW5nbGVWaWV3KHZvaWQpCit7CisJc2luZ2xlVmll
d0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0Q2hlY2tl
ZCh0cnVlKTsKKwlzcGxpdFZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7CisJc3BsaXRWaWV3
QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0
cnVlKTsKKwlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7CisKKwltZW51Vmlldy0+
aGlkZSgpOworCW1lbnVMaXN0LT5zZXRSb290TWVudSgwKTsKKwljb25maWdMaXN0LT5tb2RlID0g
c2luZ2xlTW9kZTsKKwlpZiAoY29uZmlnTGlzdC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkKKwkJ
Y29uZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOworCWVsc2UKKwkJY29uZmlnTGlzdC0+c2V0Um9v
dE1lbnUoJnJvb3RtZW51KTsKKwljb25maWdMaXN0LT5zZXRGb2N1cygpOworfQorCit2b2lkIENv
bmZpZ01haW5XaW5kb3c6OnNob3dTcGxpdFZpZXcodm9pZCkKK3sKKwlzaW5nbGVWaWV3QWN0aW9u
LT5zZXRFbmFibGVkKHRydWUpOworCXNpbmdsZVZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2Up
OworCXNwbGl0Vmlld0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7CisJc3BsaXRWaWV3QWN0aW9u
LT5zZXRDaGVja2VkKHRydWUpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOwor
CWZ1bGxWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsKKworCWNvbmZpZ0xpc3QtPm1vZGUg
PSBzeW1ib2xNb2RlOworCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQor
CQljb25maWdMaXN0LT51cGRhdGVMaXN0QWxsKCk7CisJZWxzZQorCQljb25maWdMaXN0LT5zZXRS
b290TWVudSgmcm9vdG1lbnUpOworCWNvbmZpZ0xpc3QtPnNldEFsbE9wZW4odHJ1ZSk7CisJY29u
ZmlnQXBwLT5wcm9jZXNzRXZlbnRzKCk7CisJbWVudUxpc3QtPm1vZGUgPSBtZW51TW9kZTsKKwlt
ZW51TGlzdC0+c2V0Um9vdE1lbnUoJnJvb3RtZW51KTsKKwltZW51TGlzdC0+c2V0QWxsT3Blbih0
cnVlKTsKKwltZW51Vmlldy0+c2hvdygpOworCW1lbnVMaXN0LT5zZXRGb2N1cygpOworfQorCit2
b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dGdWxsVmlldyh2b2lkKQoreworCXNpbmdsZVZpZXdB
Y3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7CisJc2luZ2xlVmlld0FjdGlvbi0+c2V0Q2hlY2tlZChm
YWxzZSk7CisJc3BsaXRWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOworCXNwbGl0Vmlld0Fj
dGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7CisJZnVsbFZpZXdBY3Rpb24tPnNldEVuYWJsZWQoZmFs
c2UpOworCWZ1bGxWaWV3QWN0aW9uLT5zZXRDaGVja2VkKHRydWUpOworCisJbWVudVZpZXctPmhp
ZGUoKTsKKwltZW51TGlzdC0+c2V0Um9vdE1lbnUoMCk7CisJY29uZmlnTGlzdC0+bW9kZSA9IGZ1
bGxNb2RlOworCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQorCQljb25m
aWdMaXN0LT51cGRhdGVMaXN0QWxsKCk7CisJZWxzZQorCQljb25maWdMaXN0LT5zZXRSb290TWVu
dSgmcm9vdG1lbnUpOworCWNvbmZpZ0xpc3QtPnNldEZvY3VzKCk7Cit9CisKKy8qCisgKiBhc2sg
Zm9yIHNhdmluZyBjb25maWd1cmF0aW9uIGJlZm9yZSBxdWl0dGluZworICogVE9ETyBhc2sgb25s
eSB3aGVuIHNvbWV0aGluZyBjaGFuZ2VkCisgKi8KK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Y2xv
c2VFdmVudChRQ2xvc2VFdmVudCogZSkKK3sKKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkgewor
CQllLT5hY2NlcHQoKTsKKwkJcmV0dXJuOworCX0KKwlRTWVzc2FnZUJveCBtYigicWNvbmYiLCAi
U2F2ZSBjb25maWd1cmF0aW9uPyIsIFFNZXNzYWdlQm94OjpXYXJuaW5nLAorCQkJUU1lc3NhZ2VC
b3g6OlllcyB8IFFNZXNzYWdlQm94OjpEZWZhdWx0LCBRTWVzc2FnZUJveDo6Tm8sIFFNZXNzYWdl
Qm94OjpDYW5jZWwgfCBRTWVzc2FnZUJveDo6RXNjYXBlKTsKKwltYi5zZXRCdXR0b25UZXh0KFFN
ZXNzYWdlQm94OjpZZXMsICImU2F2ZSBDaGFuZ2VzIik7CisJbWIuc2V0QnV0dG9uVGV4dChRTWVz
c2FnZUJveDo6Tm8sICImRGlzY2FyZCBDaGFuZ2VzIik7CisJbWIuc2V0QnV0dG9uVGV4dChRTWVz
c2FnZUJveDo6Q2FuY2VsLCAiQ2FuY2VsIEV4aXQiKTsKKwlzd2l0Y2ggKG1iLmV4ZWMoKSkgewor
CWNhc2UgUU1lc3NhZ2VCb3g6OlllczoKKwkJaWYgKHNhdmVDb25maWcoKSkKKwkJCWUtPmFjY2Vw
dCgpOworCQllbHNlCisJCQllLT5pZ25vcmUoKTsKKwkJYnJlYWs7CisJY2FzZSBRTWVzc2FnZUJv
eDo6Tm86CisJCWUtPmFjY2VwdCgpOworCQlicmVhazsKKwljYXNlIFFNZXNzYWdlQm94OjpDYW5j
ZWw6CisJCWUtPmlnbm9yZSgpOworCQlicmVhazsKKwl9Cit9CisKK3ZvaWQgQ29uZmlnTWFpbldp
bmRvdzo6c2hvd0ludHJvKHZvaWQpCit7CisJc3RhdGljIGNvbnN0IFFTdHJpbmcgc3RyID0gIldl
bGNvbWUgdG8gdGhlIHFjb25mIGdyYXBoaWNhbCBjb25maWd1cmF0aW9uIHRvb2wuXG5cbiIKKwkJ
IkZvciBlYWNoIG9wdGlvbiwgYSBibGFuayBib3ggaW5kaWNhdGVzIHRoZSBmZWF0dXJlIGlzIGRp
c2FibGVkLCBhIGNoZWNrXG4iCisJCSJpbmRpY2F0ZXMgaXQgaXMgZW5hYmxlZCwgYW5kIGEgZG90
IGluZGljYXRlcyB0aGF0IGl0IGlzIHRvIGJlIGNvbXBpbGVkXG4iCisJCSJhcyBhIG1vZHVsZS4g
IENsaWNraW5nIG9uIHRoZSBib3ggd2lsbCBjeWNsZSB0aHJvdWdoIHRoZSB0aHJlZSBzdGF0ZXMu
XG5cbiIKKwkJIklmIHlvdSBkbyBub3Qgc2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBkZXZpY2UgZHJp
dmVyKSB0aGF0IHlvdSBiZWxpZXZlXG4iCisJCSJzaG91bGQgYmUgcHJlc2VudCwgdHJ5IHR1cm5p
bmcgb24gU2hvdyBBbGwgT3B0aW9ucyB1bmRlciB0aGUgT3B0aW9ucyBtZW51LlxuIgorCQkiQWx0
aG91Z2ggdGhlcmUgaXMgbm8gY3Jvc3MgcmVmZXJlbmNlIHlldCB0byBoZWxwIHlvdSBmaWd1cmUg
b3V0IHdoYXQgb3RoZXJcbiIKKwkJIm9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIHRvIHN1cHBvcnQg
dGhlIG9wdGlvbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4sIHlvdSBjYW5cbiIKKwkJInN0aWxsIHZp
ZXcgdGhlIGhlbHAgb2YgYSBncmF5ZWQtb3V0IG9wdGlvbi5cblxuIgorCQkiVG9nZ2xpbmcgU2hv
dyBEZWJ1ZyBJbmZvIHVuZGVyIHRoZSBPcHRpb25zIG1lbnUgd2lsbCBzaG93IHRoZSBkZXBlbmRl
bmNpZXMsXG4iCisJCSJ3aGljaCB5b3UgY2FuIHRoZW4gbWF0Y2ggYnkgZXhhbWluaW5nIG90aGVy
IG9wdGlvbnMuXG5cbiI7CisKKwlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25m
Iiwgc3RyKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93OjpzaG93QWJvdXQodm9pZCkKK3sK
KwlzdGF0aWMgY29uc3QgUVN0cmluZyBzdHIgPSAicWNvbmYgaXMgQ29weXJpZ2h0IChDKSAyMDAy
IFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPi5cbiIKKwkJIkNvcHlyaWdodCAo
QykgMjAxNSBCb3JpcyBCYXJidWxvdnNraSA8YmJhcmJ1bG92c2tpQGdtYWlsLmNvbT4uXG5cbiIK
KwkJIkJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3QgY2FuIGFsc28gYmUgZW50ZXJlZCBh
dCBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9cbiI7CisKKwlRTWVzc2FnZUJveDo6aW5mb3Jt
YXRpb24odGhpcywgInFjb25mIiwgc3RyKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93Ojpz
YXZlU2V0dGluZ3Modm9pZCkKK3sKKwljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cg
eCIsIHBvcygpLngoKSk7CisJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvd2luZG93IHkiLCBw
b3MoKS55KCkpOworCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB3aWR0aCIsIHNp
emUoKS53aWR0aCgpKTsKKwljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgaGVpZ2h0
Iiwgc2l6ZSgpLmhlaWdodCgpKTsKKworCVFTdHJpbmcgZW50cnk7CisJc3dpdGNoKGNvbmZpZ0xp
c3QtPm1vZGUpIHsKKwljYXNlIHNpbmdsZU1vZGUgOgorCQllbnRyeSA9ICJzaW5nbGUiOworCQli
cmVhazsKKworCWNhc2Ugc3ltYm9sTW9kZSA6CisJCWVudHJ5ID0gInNwbGl0IjsKKwkJYnJlYWs7
CisKKwljYXNlIGZ1bGxNb2RlIDoKKwkJZW50cnkgPSAiZnVsbCI7CisJCWJyZWFrOworCisJZGVm
YXVsdDoKKwkJYnJlYWs7CisJfQorCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL2xpc3RNb2Rl
IiwgZW50cnkpOworCisJY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxpdDEiLCBzcGxp
dDEtPnNpemVzKCkpOworCWNvbmZpZ1NldHRpbmdzLT53cml0ZVNpemVzKCIvc3BsaXQyIiwgc3Bs
aXQyLT5zaXplcygpKTsKK30KKwordm9pZCBDb25maWdNYWluV2luZG93Ojpjb25mX2NoYW5nZWQo
dm9pZCkKK3sKKwlpZiAoc2F2ZUFjdGlvbikKKwkJc2F2ZUFjdGlvbi0+c2V0RW5hYmxlZChjb25m
X2dldF9jaGFuZ2VkKCkpOworfQorCit2b2lkIGZpeHVwX3Jvb3RtZW51KHN0cnVjdCBtZW51ICpt
ZW51KQoreworCXN0cnVjdCBtZW51ICpjaGlsZDsKKwlzdGF0aWMgaW50IG1lbnVfY250ID0gMDsK
KworCW1lbnUtPmZsYWdzIHw9IE1FTlVfUk9PVDsKKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsKKwkJaWYgKGNoaWxkLT5wcm9tcHQgJiYgY2hp
bGQtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpIHsKKwkJCW1lbnVfY250Kys7CisJCQlmaXh1cF9y
b290bWVudShjaGlsZCk7CisJCQltZW51X2NudC0tOworCQl9IGVsc2UgaWYgKCFtZW51X2NudCkK
KwkJCWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpw
cm9nbmFtZTsKKworc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkKK3sKKwlwcmludGYoIiVzIFstc10g
PGNvbmZpZz5cbiIsIHByb2duYW1lKTsKKwlleGl0KDApOworfQorCitpbnQgbWFpbihpbnQgYWMs
IGNoYXIqKiBhdikKK3sKKwlDb25maWdNYWluV2luZG93KiB2OworCWNvbnN0IGNoYXIgKm5hbWU7
CisKKwlwcm9nbmFtZSA9IGF2WzBdOworCWNvbmZpZ0FwcCA9IG5ldyBRQXBwbGljYXRpb24oYWMs
IGF2KTsKKwlpZiAoYWMgPiAxICYmIGF2WzFdWzBdID09ICctJykgeworCQlzd2l0Y2ggKGF2WzFd
WzFdKSB7CisJCWNhc2UgJ3MnOgorCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsK
KwkJCWJyZWFrOworCQljYXNlICdoJzoKKwkJY2FzZSAnPyc6CisJCQl1c2FnZSgpOworCQl9CisJ
CW5hbWUgPSBhdlsyXTsKKwl9IGVsc2UKKwkJbmFtZSA9IGF2WzFdOworCWlmICghbmFtZSkKKwkJ
dXNhZ2UoKTsKKworCWNvbmZfcGFyc2UobmFtZSk7CisJZml4dXBfcm9vdG1lbnUoJnJvb3RtZW51
KTsKKwljb25mX3JlYWQoTlVMTCk7CisJLy96Y29uZmR1bXAoc3Rkb3V0KTsKKworCWNvbmZpZ1Nl
dHRpbmdzID0gbmV3IENvbmZpZ1NldHRpbmdzKCk7CisJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3Jv
dXAoIi9rY29uZmlnL3Fjb25mIik7CisJdiA9IG5ldyBDb25maWdNYWluV2luZG93KCk7CisKKwkv
L3pjb25mZHVtcChzdGRvdXQpOworCWNvbmZpZ0FwcC0+Y29ubmVjdChjb25maWdBcHAsIFNJR05B
TChsYXN0V2luZG93Q2xvc2VkKCkpLCBTTE9UKHF1aXQoKSkpOworCWNvbmZpZ0FwcC0+Y29ubmVj
dChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgdiwgU0xPVChzYXZlU2V0dGluZ3Mo
KSkpOworCXYtPnNob3coKTsKKwljb25maWdBcHAtPmV4ZWMoKTsKKworCWNvbmZpZ1NldHRpbmdz
LT5lbmRHcm91cCgpOworCWRlbGV0ZSBjb25maWdTZXR0aW5nczsKKwlkZWxldGUgdjsKKwlkZWxl
dGUgY29uZmlnQXBwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcvcWNvbmYuaCBiL3N1cHBvcnQva2NvbmZpZy9xY29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjQ1YmZlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25m
aWcvcWNvbmYuaApAQCAtMCwwICsxLDMzMSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEdQTC0yLjAgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBw
ZWxAbGludXgtbTY4ay5vcmc+CisgKi8KKworI2luY2x1ZGUgPFFUZXh0QnJvd3Nlcj4KKyNpbmNs
dWRlIDxRVHJlZVdpZGdldD4KKyNpbmNsdWRlIDxRTWFpbldpbmRvdz4KKyNpbmNsdWRlIDxRSGVh
ZGVyVmlldz4KKyNpbmNsdWRlIDxxc2V0dGluZ3MuaD4KKyNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4K
KyNpbmNsdWRlIDxRU2V0dGluZ3M+CisjaW5jbHVkZSA8UUxpbmVFZGl0PgorI2luY2x1ZGUgPFFT
cGxpdHRlcj4KKyNpbmNsdWRlIDxRQ2hlY2tCb3g+CisjaW5jbHVkZSA8UURpYWxvZz4KKyNpbmNs
dWRlICJleHByLmgiCisKK2NsYXNzIENvbmZpZ1ZpZXc7CitjbGFzcyBDb25maWdMaXN0OworY2xh
c3MgQ29uZmlnSXRlbTsKK2NsYXNzIENvbmZpZ0xpbmVFZGl0OworY2xhc3MgQ29uZmlnTWFpbldp
bmRvdzsKKworY2xhc3MgQ29uZmlnU2V0dGluZ3MgOiBwdWJsaWMgUVNldHRpbmdzIHsKK3B1Ymxp
YzoKKwlDb25maWdTZXR0aW5ncygpOworCVFMaXN0PGludD4gcmVhZFNpemVzKGNvbnN0IFFTdHJp
bmcmIGtleSwgYm9vbCAqb2spOworCWJvb2wgd3JpdGVTaXplcyhjb25zdCBRU3RyaW5nJiBrZXks
IGNvbnN0IFFMaXN0PGludD4mIHZhbHVlKTsKK307CisKK2VudW0gY29sSWR4IHsKKwlwcm9tcHRD
b2xJZHgsIG5hbWVDb2xJZHgsIG5vQ29sSWR4LCBtb2RDb2xJZHgsIHllc0NvbElkeCwgZGF0YUNv
bElkeCwgY29sTnIKK307CitlbnVtIGxpc3RNb2RlIHsKKwlzaW5nbGVNb2RlLCBtZW51TW9kZSwg
c3ltYm9sTW9kZSwgZnVsbE1vZGUsIGxpc3RNb2RlCit9OworZW51bSBvcHRpb25Nb2RlIHsKKwlu
b3JtYWxPcHQgPSAwLCBhbGxPcHQsIHByb21wdE9wdAorfTsKKworY2xhc3MgQ29uZmlnTGlzdCA6
IHB1YmxpYyBRVHJlZVdpZGdldCB7CisJUV9PQkpFQ1QKKwl0eXBlZGVmIGNsYXNzIFFUcmVlV2lk
Z2V0IFBhcmVudDsKK3B1YmxpYzoKKwlDb25maWdMaXN0KENvbmZpZ1ZpZXcqIHAsIGNvbnN0IGNo
YXIgKm5hbWUgPSAwKTsKKwl2b2lkIHJlaW5pdCh2b2lkKTsKKwlDb25maWdWaWV3KiBwYXJlbnQo
dm9pZCkgY29uc3QKKwl7CisJCXJldHVybiAoQ29uZmlnVmlldyopUGFyZW50OjpwYXJlbnQoKTsK
Kwl9CisJQ29uZmlnSXRlbSogZmluZENvbmZpZ0l0ZW0oc3RydWN0IG1lbnUgKik7CisKK3Byb3Rl
Y3RlZDoKKwl2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50ICplKTsKKwl2b2lkIG1vdXNlUHJl
c3NFdmVudChRTW91c2VFdmVudCAqZSk7CisJdm9pZCBtb3VzZVJlbGVhc2VFdmVudChRTW91c2VF
dmVudCAqZSk7CisJdm9pZCBtb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCAqZSk7CisJdm9pZCBt
b3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQgKmUpOworCXZvaWQgZm9jdXNJbkV2ZW50
KFFGb2N1c0V2ZW50ICplKTsKKwl2b2lkIGNvbnRleHRNZW51RXZlbnQoUUNvbnRleHRNZW51RXZl
bnQgKmUpOworCitwdWJsaWMgc2xvdHM6CisJdm9pZCBzZXRSb290TWVudShzdHJ1Y3QgbWVudSAq
bWVudSk7CisKKwl2b2lkIHVwZGF0ZUxpc3QoQ29uZmlnSXRlbSAqaXRlbSk7CisJdm9pZCBzZXRW
YWx1ZShDb25maWdJdGVtKiBpdGVtLCB0cmlzdGF0ZSB2YWwpOworCXZvaWQgY2hhbmdlVmFsdWUo
Q29uZmlnSXRlbSogaXRlbSk7CisJdm9pZCB1cGRhdGVTZWxlY3Rpb24odm9pZCk7CisJdm9pZCBz
YXZlU2V0dGluZ3Modm9pZCk7CitzaWduYWxzOgorCXZvaWQgbWVudUNoYW5nZWQoc3RydWN0IG1l
bnUgKm1lbnUpOworCXZvaWQgbWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICptZW51KTsKKwl2b2lk
IHBhcmVudFNlbGVjdGVkKHZvaWQpOworCXZvaWQgZ290Rm9jdXMoc3RydWN0IG1lbnUgKik7CisK
K3B1YmxpYzoKKwl2b2lkIHVwZGF0ZUxpc3RBbGwodm9pZCkKKwl7CisJCXVwZGF0ZUFsbCA9IHRy
dWU7CisJCXVwZGF0ZUxpc3QoTlVMTCk7CisJCXVwZGF0ZUFsbCA9IGZhbHNlOworCX0KKwlDb25m
aWdMaXN0KiBsaXN0VmlldygpCisJeworCQlyZXR1cm4gdGhpczsKKwl9CisJQ29uZmlnSXRlbSog
Zmlyc3RDaGlsZCgpIGNvbnN0CisJeworCQlyZXR1cm4gKENvbmZpZ0l0ZW0gKiljaGlsZHJlbigp
LmZpcnN0KCk7CisJfQorCXZvaWQgYWRkQ29sdW1uKGNvbElkeCBpZHgpCisJeworCQlzaG93Q29s
dW1uKGlkeCk7CisJfQorCXZvaWQgcmVtb3ZlQ29sdW1uKGNvbElkeCBpZHgpCisJeworCQloaWRl
Q29sdW1uKGlkeCk7CisJfQorCXZvaWQgc2V0QWxsT3Blbihib29sIG9wZW4pOworCXZvaWQgc2V0
UGFyZW50TWVudSh2b2lkKTsKKworCWJvb2wgbWVudVNraXAoc3RydWN0IG1lbnUgKik7CisKKwl2
b2lkIHVwZGF0ZU1lbnVMaXN0KENvbmZpZ0l0ZW0gKnBhcmVudCwgc3RydWN0IG1lbnUqKTsKKwl2
b2lkIHVwZGF0ZU1lbnVMaXN0KENvbmZpZ0xpc3QgKnBhcmVudCwgc3RydWN0IG1lbnUqKTsKKwor
CWJvb2wgdXBkYXRlQWxsOworCisJUVBpeG1hcCBzeW1ib2xZZXNQaXgsIHN5bWJvbE1vZFBpeCwg
c3ltYm9sTm9QaXg7CisJUVBpeG1hcCBjaG9pY2VZZXNQaXgsIGNob2ljZU5vUGl4OworCVFQaXht
YXAgbWVudVBpeCwgbWVudUludlBpeCwgbWVudUJhY2tQaXgsIHZvaWRQaXg7CisKKwlib29sIHNo
b3dOYW1lLCBzaG93UmFuZ2UsIHNob3dEYXRhOworCWVudW0gbGlzdE1vZGUgbW9kZTsKKwllbnVt
IG9wdGlvbk1vZGUgb3B0TW9kZTsKKwlzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5OworCVFQYWxldHRl
IGRpc2FibGVkQ29sb3JHcm91cDsKKwlRUGFsZXR0ZSBpbmFjdGl2ZWRDb2xvckdyb3VwOworCVFN
ZW51KiBoZWFkZXJQb3B1cDsKK307CisKK2NsYXNzIENvbmZpZ0l0ZW0gOiBwdWJsaWMgUVRyZWVX
aWRnZXRJdGVtIHsKKwl0eXBlZGVmIGNsYXNzIFFUcmVlV2lkZ2V0SXRlbSBQYXJlbnQ7CitwdWJs
aWM6CisJQ29uZmlnSXRlbShDb25maWdMaXN0ICpwYXJlbnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBz
dHJ1Y3QgbWVudSAqbSwgYm9vbCB2KQorCTogUGFyZW50KHBhcmVudCwgYWZ0ZXIpLCBuZXh0SXRl
bSgwKSwgbWVudShtKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQoZmFsc2UpCisJeworCQlpbml0KCk7
CisJfQorCUNvbmZpZ0l0ZW0oQ29uZmlnSXRlbSAqcGFyZW50LCBDb25maWdJdGVtICphZnRlciwg
c3RydWN0IG1lbnUgKm0sIGJvb2wgdikKKwk6IFBhcmVudChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0
ZW0oMCksIG1lbnUobSksIHZpc2libGUodiksIGdvUGFyZW50KGZhbHNlKQorCXsKKwkJaW5pdCgp
OworCX0KKwlDb25maWdJdGVtKENvbmZpZ0xpc3QgKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIs
IGJvb2wgdikKKwk6IFBhcmVudChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUoMCks
IHZpc2libGUodiksIGdvUGFyZW50KHRydWUpCisJeworCQlpbml0KCk7CisJfQorCX5Db25maWdJ
dGVtKHZvaWQpOworCXZvaWQgaW5pdCh2b2lkKTsKKwl2b2lkIG9rUmVuYW1lKGludCBjb2wpOwor
CXZvaWQgdXBkYXRlTWVudSh2b2lkKTsKKwl2b2lkIHRlc3RVcGRhdGVNZW51KGJvb2wgdik7CisJ
Q29uZmlnTGlzdCogbGlzdFZpZXcoKSBjb25zdAorCXsKKwkJcmV0dXJuIChDb25maWdMaXN0KilQ
YXJlbnQ6OnRyZWVXaWRnZXQoKTsKKwl9CisJQ29uZmlnSXRlbSogZmlyc3RDaGlsZCgpIGNvbnN0
CisJeworCQlyZXR1cm4gKENvbmZpZ0l0ZW0gKilQYXJlbnQ6OmNoaWxkKDApOworCX0KKwlDb25m
aWdJdGVtKiBuZXh0U2libGluZygpCisJeworCQlDb25maWdJdGVtICpyZXQgPSBOVUxMOworCQlD
b25maWdJdGVtICpfcGFyZW50ID0gKENvbmZpZ0l0ZW0gKilwYXJlbnQoKTsKKworCQlpZihfcGFy
ZW50KSB7CisJCQlyZXQgPSAoQ29uZmlnSXRlbSAqKV9wYXJlbnQtPmNoaWxkKF9wYXJlbnQtPmlu
ZGV4T2ZDaGlsZCh0aGlzKSsxKTsKKwkJfSBlbHNlIHsKKwkJCVFUcmVlV2lkZ2V0ICpfdHJlZVdp
ZGdldCA9IHRyZWVXaWRnZXQoKTsKKwkJCXJldCA9IChDb25maWdJdGVtICopX3RyZWVXaWRnZXQt
PnRvcExldmVsSXRlbShfdHJlZVdpZGdldC0+aW5kZXhPZlRvcExldmVsSXRlbSh0aGlzKSsxKTsK
KwkJfQorCisJCXJldHVybiByZXQ7CisJfQorCXZvaWQgc2V0VGV4dChjb2xJZHggaWR4LCBjb25z
dCBRU3RyaW5nJiB0ZXh0KQorCXsKKwkJUGFyZW50OjpzZXRUZXh0KGlkeCwgdGV4dCk7CisJfQor
CVFTdHJpbmcgdGV4dChjb2xJZHggaWR4KSBjb25zdAorCXsKKwkJcmV0dXJuIFBhcmVudDo6dGV4
dChpZHgpOworCX0KKwl2b2lkIHNldFBpeG1hcChjb2xJZHggaWR4LCBjb25zdCBRSWNvbiAmaWNv
bikKKwl7CisJCVBhcmVudDo6c2V0SWNvbihpZHgsIGljb24pOworCX0KKwljb25zdCBRSWNvbiBw
aXhtYXAoY29sSWR4IGlkeCkgY29uc3QKKwl7CisJCXJldHVybiBpY29uKGlkeCk7CisJfQorCS8v
IFRPRE86IEltcGxlbWVudCBwYWludENlbGwKKworCUNvbmZpZ0l0ZW0qIG5leHRJdGVtOworCXN0
cnVjdCBtZW51ICptZW51OworCWJvb2wgdmlzaWJsZTsKKwlib29sIGdvUGFyZW50OworfTsKKwor
Y2xhc3MgQ29uZmlnTGluZUVkaXQgOiBwdWJsaWMgUUxpbmVFZGl0IHsKKwlRX09CSkVDVAorCXR5
cGVkZWYgY2xhc3MgUUxpbmVFZGl0IFBhcmVudDsKK3B1YmxpYzoKKwlDb25maWdMaW5lRWRpdChD
b25maWdWaWV3KiBwYXJlbnQpOworCUNvbmZpZ1ZpZXcqIHBhcmVudCh2b2lkKSBjb25zdAorCXsK
KwkJcmV0dXJuIChDb25maWdWaWV3KilQYXJlbnQ6OnBhcmVudCgpOworCX0KKwl2b2lkIHNob3co
Q29uZmlnSXRlbSAqaSk7CisJdm9pZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZSk7CisKK3B1
YmxpYzoKKwlDb25maWdJdGVtICppdGVtOworfTsKKworY2xhc3MgQ29uZmlnVmlldyA6IHB1Ymxp
YyBRV2lkZ2V0IHsKKwlRX09CSkVDVAorCXR5cGVkZWYgY2xhc3MgUVdpZGdldCBQYXJlbnQ7Citw
dWJsaWM6CisJQ29uZmlnVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAw
KTsKKwl+Q29uZmlnVmlldyh2b2lkKTsKKwlzdGF0aWMgdm9pZCB1cGRhdGVMaXN0KENvbmZpZ0l0
ZW0qIGl0ZW0pOworCXN0YXRpYyB2b2lkIHVwZGF0ZUxpc3RBbGwodm9pZCk7CisKKwlib29sIHNo
b3dOYW1lKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGxpc3QtPnNob3dOYW1lOyB9CisJYm9vbCBzaG93
UmFuZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbGlzdC0+c2hvd1JhbmdlOyB9CisJYm9vbCBzaG93
RGF0YSh2b2lkKSBjb25zdCB7IHJldHVybiBsaXN0LT5zaG93RGF0YTsgfQorcHVibGljIHNsb3Rz
OgorCXZvaWQgc2V0U2hvd05hbWUoYm9vbCk7CisJdm9pZCBzZXRTaG93UmFuZ2UoYm9vbCk7CisJ
dm9pZCBzZXRTaG93RGF0YShib29sKTsKKwl2b2lkIHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKTsK
K3NpZ25hbHM6CisJdm9pZCBzaG93TmFtZUNoYW5nZWQoYm9vbCk7CisJdm9pZCBzaG93UmFuZ2VD
aGFuZ2VkKGJvb2wpOworCXZvaWQgc2hvd0RhdGFDaGFuZ2VkKGJvb2wpOworcHVibGljOgorCUNv
bmZpZ0xpc3QqIGxpc3Q7CisJQ29uZmlnTGluZUVkaXQqIGxpbmVFZGl0OworCisJc3RhdGljIENv
bmZpZ1ZpZXcqIHZpZXdMaXN0OworCUNvbmZpZ1ZpZXcqIG5leHRWaWV3OworCisJc3RhdGljIFFB
Y3Rpb24gKnNob3dOb3JtYWxBY3Rpb247CisJc3RhdGljIFFBY3Rpb24gKnNob3dBbGxBY3Rpb247
CisJc3RhdGljIFFBY3Rpb24gKnNob3dQcm9tcHRBY3Rpb247Cit9OworCitjbGFzcyBDb25maWdJ
bmZvVmlldyA6IHB1YmxpYyBRVGV4dEJyb3dzZXIgeworCVFfT0JKRUNUCisJdHlwZWRlZiBjbGFz
cyBRVGV4dEJyb3dzZXIgUGFyZW50OworcHVibGljOgorCUNvbmZpZ0luZm9WaWV3KFFXaWRnZXQq
IHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSA9IDApOworCWJvb2wgc2hvd0RlYnVnKHZvaWQpIGNv
bnN0IHsgcmV0dXJuIF9zaG93RGVidWc7IH0KKworcHVibGljIHNsb3RzOgorCXZvaWQgc2V0SW5m
byhzdHJ1Y3QgbWVudSAqbWVudSk7CisJdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7CisJdm9pZCBz
ZXRTaG93RGVidWcoYm9vbCk7CisKK3NpZ25hbHM6CisJdm9pZCBzaG93RGVidWdDaGFuZ2VkKGJv
b2wpOworCXZvaWQgbWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopOworCitwcm90ZWN0ZWQ6CisJ
dm9pZCBzeW1ib2xJbmZvKHZvaWQpOworCXZvaWQgbWVudUluZm8odm9pZCk7CisJUVN0cmluZyBk
ZWJ1Z19pbmZvKHN0cnVjdCBzeW1ib2wgKnN5bSk7CisJc3RhdGljIFFTdHJpbmcgcHJpbnRfZmls
dGVyKGNvbnN0IFFTdHJpbmcgJnN0cik7CisJc3RhdGljIHZvaWQgZXhwcl9wcmludF9oZWxwKHZv
aWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKTsKKwlRTWVudSAq
Y3JlYXRlU3RhbmRhcmRDb250ZXh0TWVudShjb25zdCBRUG9pbnQgJiBwb3MpOworCXZvaWQgY29u
dGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSk7CisKKwlzdHJ1Y3Qgc3ltYm9sICpz
eW07CisJc3RydWN0IG1lbnUgKl9tZW51OworCWJvb2wgX3Nob3dEZWJ1ZzsKK307CisKK2NsYXNz
IENvbmZpZ1NlYXJjaFdpbmRvdyA6IHB1YmxpYyBRRGlhbG9nIHsKKwlRX09CSkVDVAorCXR5cGVk
ZWYgY2xhc3MgUURpYWxvZyBQYXJlbnQ7CitwdWJsaWM6CisJQ29uZmlnU2VhcmNoV2luZG93KENv
bmZpZ01haW5XaW5kb3cqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSA9IDApOworCitwdWJsaWMg
c2xvdHM6CisJdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7CisJdm9pZCBzZWFyY2godm9pZCk7CisK
K3Byb3RlY3RlZDoKKwlRTGluZUVkaXQqIGVkaXRGaWVsZDsKKwlRUHVzaEJ1dHRvbiogc2VhcmNo
QnV0dG9uOworCVFTcGxpdHRlciogc3BsaXQ7CisJQ29uZmlnVmlldyogbGlzdDsKKwlDb25maWdJ
bmZvVmlldyogaW5mbzsKKworCXN0cnVjdCBzeW1ib2wgKipyZXN1bHQ7Cit9OworCitjbGFzcyBD
b25maWdNYWluV2luZG93IDogcHVibGljIFFNYWluV2luZG93IHsKKwlRX09CSkVDVAorCisJY2hh
ciAqY29uZmlnbmFtZTsKKwlzdGF0aWMgUUFjdGlvbiAqc2F2ZUFjdGlvbjsKKwlzdGF0aWMgdm9p
ZCBjb25mX2NoYW5nZWQodm9pZCk7CitwdWJsaWM6CisJQ29uZmlnTWFpbldpbmRvdyh2b2lkKTsK
K3B1YmxpYyBzbG90czoKKwl2b2lkIGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKik7CisJdm9pZCBz
ZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqKTsKKwl2b2lkIGxpc3RGb2N1c0NoYW5nZWQodm9pZCk7
CisJdm9pZCBnb0JhY2sodm9pZCk7CisJdm9pZCBsb2FkQ29uZmlnKHZvaWQpOworCWJvb2wgc2F2
ZUNvbmZpZyh2b2lkKTsKKwl2b2lkIHNhdmVDb25maWdBcyh2b2lkKTsKKwl2b2lkIHNlYXJjaENv
bmZpZyh2b2lkKTsKKwl2b2lkIHNob3dTaW5nbGVWaWV3KHZvaWQpOworCXZvaWQgc2hvd1NwbGl0
Vmlldyh2b2lkKTsKKwl2b2lkIHNob3dGdWxsVmlldyh2b2lkKTsKKwl2b2lkIHNob3dJbnRybyh2
b2lkKTsKKwl2b2lkIHNob3dBYm91dCh2b2lkKTsKKwl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsK
KworcHJvdGVjdGVkOgorCXZvaWQgY2xvc2VFdmVudChRQ2xvc2VFdmVudCAqZSk7CisKKwlDb25m
aWdTZWFyY2hXaW5kb3cgKnNlYXJjaFdpbmRvdzsKKwlDb25maWdWaWV3ICptZW51VmlldzsKKwlD
b25maWdMaXN0ICptZW51TGlzdDsKKwlDb25maWdWaWV3ICpjb25maWdWaWV3OworCUNvbmZpZ0xp
c3QgKmNvbmZpZ0xpc3Q7CisJQ29uZmlnSW5mb1ZpZXcgKmhlbHBUZXh0OworCVFUb29sQmFyICp0
b29sQmFyOworCVFBY3Rpb24gKmJhY2tBY3Rpb247CisJUUFjdGlvbiAqc2luZ2xlVmlld0FjdGlv
bjsKKwlRQWN0aW9uICpzcGxpdFZpZXdBY3Rpb247CisJUUFjdGlvbiAqZnVsbFZpZXdBY3Rpb247
CisJUVNwbGl0dGVyICpzcGxpdDE7CisJUVNwbGl0dGVyICpzcGxpdDI7Cit9OwpkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsIGIvc3VwcG9ydC9rY29uZmln
L3N0cmVhbWxpbmVfY29uZmlnLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAu
LjA4ZDc2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvc3RyZWFtbGluZV9j
b25maWcucGwKQEAgLTAsMCArMSw2ODIgQEAKKyMhL3Vzci9iaW4vZW52IHBlcmwKKyMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyMKKyMgQ29weXJpZ2h0IDIwMDUtMjAwOSAtIFN0
ZXZlbiBSb3N0ZWR0CisjCisjICBJdCdzIHNpbXBsZSBlbm91Z2ggdG8gZmlndXJlIG91dCBob3cg
dGhpcyB3b3Jrcy4KKyMgIElmIG5vdCwgdGhlbiB5b3UgY2FuIGFzayBtZSBhdCBzdHJpcGNvbmZp
Z0Bnb29kbWlzLm9yZworIworIyBXaGF0IGl0IGRvZXM/CisjCisjICAgSWYgeW91IGhhdmUgaW5z
dGFsbGVkIGEgTGludXgga2VybmVsIGZyb20gYSBkaXN0cmlidXRpb24KKyMgICB0aGF0IHR1cm5z
IG9uIHdheSB0b28gbWFueSBtb2R1bGVzIHRoYW4geW91IG5lZWQsIGFuZAorIyAgIHlvdSBvbmx5
IHdhbnQgdGhlIG1vZHVsZXMgeW91IHVzZSwgdGhlbiB0aGlzIHByb2dyYW0KKyMgICBpcyBwZXJm
ZWN0IGZvciB5b3UuCisjCisjICAgSXQgZ2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvIHR1cm4gb2Zm
IGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFyZQorIyAgIG5vdCBsb2FkZWQgb24geW91ciBzeXN0ZW0u
CisjCisjIEhvd3RvOgorIworIyAgMS4gQm9vdCB1cCB0aGUga2VybmVsIHRoYXQgeW91IHdhbnQg
dG8gc3RyZWFtIGxpbmUgdGhlIGNvbmZpZyBvbi4KKyMgIDIuIENoYW5nZSBkaXJlY3RvcnkgdG8g
dGhlIGRpcmVjdG9yeSBob2xkaW5nIHRoZSBzb3VyY2Ugb2YgdGhlCisjICAgICAgIGtlcm5lbCB0
aGF0IHlvdSBqdXN0IGJvb3RlZC4KKyMgIDMuIENvcHkgdGhlIGNvbmZpZ3VyYXRvbiBmaWxlIHRv
IHRoaXMgZGlyZWN0b3J5IGFzIC5jb25maWcKKyMgIDQuIEhhdmUgYWxsIHlvdXIgZGV2aWNlcyB0
aGF0IHlvdSBuZWVkIG1vZHVsZXMgZm9yIGNvbm5lY3RlZCBhbmQKKyMgICAgICBvcGVyYXRpb25h
bCAobWFrZSBzdXJlIHRoYXQgdGhlaXIgY29ycmVzcG9uZGluZyBtb2R1bGVzIGFyZSBsb2FkZWQp
CisjICA1LiBSdW4gdGhpcyBzY3JpcHQgcmVkaXJlY3RpbmcgdGhlIG91dHB1dCB0byBzb21lIG90
aGVyIGZpbGUKKyMgICAgICAgbGlrZSBjb25maWdfc3RyaXAuCisjICA2LiBCYWNrIHVwIHlvdXIg
b2xkIGNvbmZpZyAoaWYgeW91IHdhbnQgdG9vKS4KKyMgIDcuIGNvcHkgdGhlIGNvbmZpZ19zdHJp
cCBmaWxlIHRvIC5jb25maWcKKyMgIDguIFJ1biAibWFrZSBvbGRjb25maWciCisjCisjICBOb3cg
eW91ciBrZXJuZWwgaXMgcmVhZHkgdG8gYmUgYnVpbHQgd2l0aCBvbmx5IHRoZSBtb2R1bGVzIHRo
YXQKKyMgIGFyZSBsb2FkZWQuCisjCisjIEhlcmUncyB3aGF0IEkgZGlkIHdpdGggbXkgRGViaWFu
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgICAgY2QgL3Vzci9zcmMvbGludXgtMi42LjEwCisjICAgIGNw
IC9ib290L2NvbmZpZy0yLjYuMTAtMS02ODYtc21wIC5jb25maWcKKyMgICAgfi9iaW4vc3RyZWFt
bGluZV9jb25maWcgPiBjb25maWdfc3RyaXAKKyMgICAgbXYgLmNvbmZpZyBjb25maWdfc2F2Cisj
ICAgIG12IGNvbmZpZ19zdHJpcCAuY29uZmlnCisjICAgIG1ha2Ugb2xkY29uZmlnCisjCit1c2Ug
d2FybmluZ3M7Cit1c2Ugc3RyaWN0OwordXNlIEdldG9wdDo6TG9uZzsKKworIyBzZXQgdGhlIGVu
dmlyb25tZW50IHZhcmlhYmxlIExPQ0FMTU9EQ09ORklHX0RFQlVHIHRvIGdldAorIyBkZWJ1ZyBv
dXRwdXQuCitteSAkZGVidWdwcmludCA9IDA7CiskZGVidWdwcmludCA9IDEgaWYgKGRlZmluZWQo
JEVOVntMT0NBTE1PRENPTkZJR19ERUJVR30pKTsKKworc3ViIGRwcmludCB7CisgICAgcmV0dXJu
IGlmICghJGRlYnVncHJpbnQpOworICAgIHByaW50IFNUREVSUiBAXzsKK30KKworbXkgJGNvbmZp
ZyA9ICIuY29uZmlnIjsKKworbXkgJHVuYW1lID0gYHVuYW1lIC1yYDsKK2Nob21wICR1bmFtZTsK
KworbXkgQHNlYXJjaGNvbmZpZ3MgPSAoCisJeworCSAgICAiZmlsZSIgPT4gIi5jb25maWciLAor
CSAgICAiZXhlYyIgPT4gImNhdCIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAiL3Byb2MvY29u
ZmlnLmd6IiwKKwkgICAgImV4ZWMiID0+ICJ6Y2F0IiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+
ICIvYm9vdC9jb25maWctJHVuYW1lIiwKKwkgICAgImV4ZWMiID0+ICJjYXQiLAorCX0sCisJewor
CSAgICAiZmlsZSIgPT4gIi9ib290L3ZtbGludXotJHVuYW1lIiwKKwkgICAgImV4ZWMiID0+ICJz
Y3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFj
dC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAidm1saW51eCIsCisJICAgICJl
eGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwkgICAgInRlc3QiID0+ICJzY3Jp
cHRzL2V4dHJhY3QtaWtjb25maWciLAorCX0sCisJeworCSAgICAiZmlsZSIgPT4gIi9saWIvbW9k
dWxlcy8kdW5hbWUva2VybmVsL2tlcm5lbC9jb25maWdzLmtvIiwKKwkgICAgImV4ZWMiID0+ICJz
Y3JpcHRzL2V4dHJhY3QtaWtjb25maWciLAorCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFj
dC1pa2NvbmZpZyIsCisJfSwKKwl7CisJICAgICJmaWxlIiA9PiAia2VybmVsL2NvbmZpZ3Mua28i
LAorCSAgICAiZXhlYyIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJICAgICJ0ZXN0
IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwKKwl9LAorCXsKKwkgICAgImZpbGUiID0+
ICJrZXJuZWwvY29uZmlncy5vIiwKKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtj
b25maWciLAorCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsCisJfSwK
Kyk7CisKK3N1YiByZWFkX2NvbmZpZyB7CisgICAgZm9yZWFjaCBteSAkY29uZiAoQHNlYXJjaGNv
bmZpZ3MpIHsKKwlteSAkZmlsZSA9ICRjb25mLT57ImZpbGUifTsKKworCW5leHQgaWYgKCAhIC1m
ICIkZmlsZSIpOworCisJaWYgKGRlZmluZWQoJGNvbmYtPnsidGVzdCJ9KSkgeworCSAgICBgJGNv
bmYtPnsidGVzdCJ9ICRjb25mLT57ImZpbGUifSAyPi9kZXYvbnVsbGA7CisJICAgIG5leHQgaWYg
KCQ/KTsKKwl9CisKKwlteSAkZXhlYyA9ICRjb25mLT57ImV4ZWMifTsKKworCXByaW50IFNUREVS
UiAidXNpbmcgY29uZmlnOiAnJGZpbGUnXG4iOworCisJb3BlbihteSAkaW5maWxlLCAnLXwnLCAi
JGV4ZWMgJGZpbGUiKSB8fCBkaWUgIkZhaWxlZCB0byBydW4gJGV4ZWMgJGZpbGUiOworCW15IEB4
ID0gPCRpbmZpbGU+OworCWNsb3NlICRpbmZpbGU7CisJcmV0dXJuIEB4OworICAgIH0KKyAgICBk
aWUgIk5vIGNvbmZpZyBmaWxlIGZvdW5kIjsKK30KKworbXkgQGNvbmZpZ19maWxlID0gcmVhZF9j
b25maWc7CisKKyMgUGFyc2Ugb3B0aW9ucworbXkgJGxvY2FsbW9kY29uZmlnID0gMDsKK215ICRs
b2NhbHllc2NvbmZpZyA9IDA7CisKK0dldE9wdGlvbnMoImxvY2FsbW9kY29uZmlnIiA9PiBcJGxv
Y2FsbW9kY29uZmlnLAorCSAgICJsb2NhbHllc2NvbmZpZyIgPT4gXCRsb2NhbHllc2NvbmZpZyk7
CisKKyMgR2V0IHRoZSBidWlsZCBzb3VyY2UgYW5kIHRvcCBsZXZlbCBLY29uZmlnIGZpbGUgKHBh
c3NlZCBpbikKK215ICRrc291cmNlID0gKCRBUkdWWzBdID8gJEFSR1ZbMF0gOiAnLicpOworbXkg
JGtjb25maWcgPSAkQVJHVlsxXTsKK215ICRsc21vZF9maWxlID0gJEVOVnsnTFNNT0QnfTsKKwor
bXkgQG1ha2VmaWxlcyA9IGBmaW5kICRrc291cmNlIC1uYW1lIE1ha2VmaWxlIC1vciAtbmFtZSBL
YnVpbGQgMj4vZGV2L251bGxgOworY2hvbXAgQG1ha2VmaWxlczsKKworbXkgJWRlcGVuZHM7Citt
eSAlc2VsZWN0czsKK215ICVwcm9tcHRzOworbXkgJW9iamVjdHM7CitteSAkdmFyOworbXkgJGlm
bGV2ZWwgPSAwOworbXkgQGlmZGVwczsKKworIyBwcmV2ZW50IHJlY3Vyc2lvbgorbXkgJXJlYWRf
a2NvbmZpZ3M7CisKK3N1YiByZWFkX2tjb25maWcgeworICAgIG15ICgka2NvbmZpZykgPSBAXzsK
KworICAgIG15ICRzdGF0ZSA9ICJOT05FIjsKKyAgICBteSAkY29uZmlnOworCisgICAgbXkgJGNv
bnQgPSAwOworICAgIG15ICRsaW5lOworCisgICAgbXkgJHNvdXJjZSA9ICIka3NvdXJjZS8ka2Nv
bmZpZyI7CisgICAgbXkgJGxhc3Rfc291cmNlID0gIiI7CisKKyAgICAjIENoZWNrIGZvciBhbnkg
ZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQKKyAgICB3aGlsZSAoJHNvdXJjZSA9fiAvXCRcKChc
dyspXCkvICYmICRsYXN0X3NvdXJjZSBuZSAkc291cmNlKSB7CisJbXkgJGVudiA9ICQxOworCSRs
YXN0X3NvdXJjZSA9ICRzb3VyY2U7CisJJHNvdXJjZSA9fiBzL1wkXCgkZW52XCkvJEVOVnskZW52
fS87CisgICAgfQorCisgICAgb3BlbihteSAka2luZmlsZSwgJzwnLCAkc291cmNlKSB8fCBkaWUg
IkNhbid0IG9wZW4gJGtjb25maWciOworICAgIHdoaWxlICg8JGtpbmZpbGU+KSB7CisJY2hvbXA7
CisKKwkjIE1ha2Ugc3VyZSB0aGF0IGxpbmVzIGVuZGluZyB3aXRoIFwgY29udGludWUKKwlpZiAo
JGNvbnQpIHsKKwkgICAgJF8gPSAkbGluZSAuICIgIiAuICRfOworCX0KKworCWlmIChzL1xcJC8v
KSB7CisJICAgICRjb250ID0gMTsKKwkgICAgJGxpbmUgPSAkXzsKKwkgICAgbmV4dDsKKwl9CisK
KwkkY29udCA9IDA7CisKKwkjIGNvbGxlY3QgYW55IEtjb25maWcgc291cmNlcworCWlmICgvXnNv
dXJjZVxzKyI/KFteIl0rKS8pIHsKKwkgICAgbXkgJGtjb25maWcgPSAkMTsKKwkgICAgIyBwcmV2
ZW50IHJlYWRpbmcgdHdpY2UuCisJICAgIGlmICghZGVmaW5lZCgkcmVhZF9rY29uZmlnc3ska2Nv
bmZpZ30pKSB7CisJCSRyZWFkX2tjb25maWdzeyRrY29uZmlnfSA9IDE7CisJCXJlYWRfa2NvbmZp
Zygka2NvbmZpZyk7CisJICAgIH0KKwkgICAgbmV4dDsKKwl9CisKKwkjIGNvbmZpZ3MgZm91bmQK
KwlpZiAoL15ccyoobWVudSk/Y29uZmlnXHMrKFxTKylccyokLykgeworCSAgICAkc3RhdGUgPSAi
TkVXIjsKKwkgICAgJGNvbmZpZyA9ICQyOworCisJICAgICMgQWRkIGRlcGVuZHMgZm9yICdpZicg
bmVzdGluZworCSAgICBmb3IgKG15ICRpID0gMDsgJGkgPCAkaWZsZXZlbDsgJGkrKykgeworCQlp
ZiAoJGkpIHsKKwkJICAgICRkZXBlbmRzeyRjb25maWd9IC49ICIgIiAuICRpZmRlcHNbJGldOwor
CQl9IGVsc2UgeworCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkaWZkZXBzWyRpXTsKKwkJfQor
CQkkc3RhdGUgPSAiREVQIjsKKwkgICAgfQorCisJIyBjb2xsZWN0IHRoZSBkZXBlbmRzIGZvciB0
aGUgY29uZmlnCisJfSBlbHNpZiAoJHN0YXRlIGVxICJORVciICYmIC9eXHMqZGVwZW5kc1xzK29u
XHMrKC4qKSQvKSB7CisJICAgICRzdGF0ZSA9ICJERVAiOworCSAgICAkZGVwZW5kc3skY29uZmln
fSA9ICQxOworCX0gZWxzaWYgKCRzdGF0ZSBlcSAiREVQIiAmJiAvXlxzKmRlcGVuZHNccytvblxz
KyguKikkLykgeworCSAgICAkZGVwZW5kc3skY29uZmlnfSAuPSAiICIgLiAkMTsKKwl9IGVsc2lm
ICgkc3RhdGUgZXEgIkRFUCIgJiYgL15ccypkZWYoXyhib29sfHRyaXN0YXRlKXxhdWx0KVxzKyhc
Uy4qKSQvKSB7CisJICAgIG15ICRkZXAgPSAkMzsKKwkgICAgaWYgKCRkZXAgIX4gL15ccyooeXxt
fG4pXHMqJC8pIHsKKwkJJGRlcCA9fiBzLy4qXHNpZlxzKy8vOworCQkkZGVwZW5kc3skY29uZmln
fSAuPSAiICIgLiAkZGVwOworCQlkcHJpbnQgIkFkZGVkIGRlZmF1bHQgZGVwZW5kcyAkZGVwIHRv
ICRjb25maWdcbiI7CisJICAgIH0KKworCSMgR2V0IHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IHRo
aXMgY29uZmlnCisJfSBlbHNpZiAoJHN0YXRlIG5lICJOT05FIiAmJiAvXlxzKnNlbGVjdFxzKyhc
UyspLykgeworCSAgICBteSAkY29uZiA9ICQxOworCSAgICBpZiAoZGVmaW5lZCgkc2VsZWN0c3sk
Y29uZn0pKSB7CisJCSRzZWxlY3RzeyRjb25mfSAuPSAiICIgLiAkY29uZmlnOworCSAgICB9IGVs
c2UgeworCQkkc2VsZWN0c3skY29uZn0gPSAkY29uZmlnOworCSAgICB9CisKKwkjIGNvbmZpZ3Mg
d2l0aG91dCBwcm9tcHRzIG11c3QgYmUgc2VsZWN0ZWQKKwl9IGVsc2lmICgkc3RhdGUgbmUgIk5P
TkUiICYmIC9eXHMqKHRyaXN0YXRlXHMrXFN8cHJvbXB0XGIpLykgeworCSAgICAjIG5vdGUgaWYg
dGhlIGNvbmZpZyBoYXMgYSBwcm9tcHQKKwkgICAgJHByb21wdHN7JGNvbmZpZ30gPSAxOworCisJ
IyBDaGVjayBmb3IgaWYgc3RhdGVtZW50cworCX0gZWxzaWYgKC9eaWZccysoLipcUylccyokLykg
eworCSAgICBteSAkZGVwcyA9ICQxOworCSAgICAjIHJlbW92ZSBiZWdpbm5pbmcgYW5kIGVuZGlu
ZyBub24gdGV4dAorCSAgICAkZGVwcyA9fiBzL15bXmEtekEtWjAtOV9dKi8vOworCSAgICAkZGVw
cyA9fiBzL1teYS16QS1aMC05X10qJC8vOworCisJICAgIG15IEBkZXBzID0gc3BsaXQgL1teYS16
QS1aMC05X10rLywgJGRlcHM7CisKKwkgICAgJGlmZGVwc1skaWZsZXZlbCsrXSA9IGpvaW4gJzon
LCBAZGVwczsKKworCX0gZWxzaWYgKC9eZW5kaWYvKSB7CisKKwkgICAgJGlmbGV2ZWwtLSBpZiAo
JGlmbGV2ZWwpOworCisJIyBzdG9wIG9uICJoZWxwIiBhbmQga2V5d29yZHMgdGhhdCBlbmQgYSBt
ZW51IGVudHJ5CisJfSBlbHNpZiAoL15ccyooLS0tKT9oZWxwKC0tLSk/XHMqJC8gfHwgL14oY29t
bWVudHxjaG9pY2V8bWVudSlcYi8pIHsKKwkgICAgJHN0YXRlID0gIk5PTkUiOworCX0KKyAgICB9
CisgICAgY2xvc2UoJGtpbmZpbGUpOworfQorCitpZiAoJGtjb25maWcpIHsKKyAgICByZWFkX2tj
b25maWcoJGtjb25maWcpOworfQorCisjIE1ha2VmaWxlcyBjYW4gdXNlIHZhcmlhYmxlcyB0byBk
ZWZpbmUgdGhlaXIgZGVwZW5kZW5jaWVzCitzdWIgY29udmVydF92YXJzIHsKKyAgICBteSAoJGxp
bmUsICV2YXJzKSA9IEBfOworCisgICAgbXkgJHByb2Nlc3MgPSAiIjsKKworICAgIHdoaWxlICgk
bGluZSA9fiBzL14oLio/KShcJFwoKC4qPylcKSkvLykgeworCW15ICRzdGFydCA9ICQxOworCW15
ICR2YXJpYWJsZSA9ICQyOworCW15ICR2YXIgPSAkMzsKKworCWlmIChkZWZpbmVkKCR2YXJzeyR2
YXJ9KSkgeworCSAgICAkcHJvY2VzcyAuPSAkc3RhcnQgLiAkdmFyc3skdmFyfTsKKwl9IGVsc2Ug
eworCSAgICAkcHJvY2VzcyAuPSAkc3RhcnQgLiAkdmFyaWFibGU7CisJfQorICAgIH0KKworICAg
ICRwcm9jZXNzIC49ICRsaW5lOworCisgICAgcmV0dXJuICRwcm9jZXNzOworfQorCisjIFJlYWQg
YWxsIE1ha2VmaWxlcyB0byBtYXAgdGhlIGNvbmZpZ3MgdG8gdGhlIG9iamVjdHMKK2ZvcmVhY2gg
bXkgJG1ha2VmaWxlIChAbWFrZWZpbGVzKSB7CisKKyAgICBteSAkbGluZSA9ICIiOworICAgIG15
ICVtYWtlX3ZhcnM7CisKKyAgICBvcGVuKG15ICRpbmZpbGUsICc8JywgJG1ha2VmaWxlKSB8fCBk
aWUgIkNhbid0IG9wZW4gJG1ha2VmaWxlIjsKKyAgICB3aGlsZSAoPCRpbmZpbGU+KSB7CisJIyBp
ZiB0aGlzIGxpbmUgZW5kcyB3aXRoIGEgYmFja3NsYXNoLCBjb250aW51ZQorCWNob21wOworCWlm
ICgvXiguKilcXCQvKSB7CisJICAgICRsaW5lIC49ICQxOworCSAgICBuZXh0OworCX0KKworCSRs
aW5lIC49ICRfOworCSRfID0gJGxpbmU7CisJJGxpbmUgPSAiIjsKKworCW15ICRvYmpzOworCisJ
IyBDb252ZXJ0IHZhcmlhYmxlcyBpbiBhIGxpbmUgKGNvdWxkIGRlZmluZSBjb25maWdzKQorCSRf
ID0gY29udmVydF92YXJzKCRfLCAlbWFrZV92YXJzKTsKKworCSMgY29sbGVjdCBvYmplY3RzIGFm
dGVyIG9iai0kKENPTkZJR19GT09fQkFSKQorCWlmICgvb2JqLVwkXCgoQ09ORklHX1teXCldKilc
KVxzKlsrOl0/PVxzKiguKikvKSB7CisJICAgICR2YXIgPSAkMTsKKwkgICAgJG9ianMgPSAkMjsK
KworCSMgY2hlY2sgaWYgdmFyaWFibGVzIGFyZSBzZXQKKwl9IGVsc2lmICgvXlxzKihcUyspXHMq
WzpdPz1ccyooLipcUykvKSB7CisJICAgICRtYWtlX3ZhcnN7JDF9ID0gJDI7CisJfQorCWlmIChk
ZWZpbmVkKCRvYmpzKSkgeworCSAgICBmb3JlYWNoIG15ICRvYmogKHNwbGl0IC9ccysvLCRvYmpz
KSB7CisJCSRvYmogPX4gcy8tL18vZzsKKwkJaWYgKCRvYmogPX4gLyguKilcLm8kLykgeworCQkg
ICAgIyBPYmplY3RzIG1heSBiZSBlbmFibGVkIGJ5IG1vcmUgdGhhbiBvbmUgY29uZmlnLgorCQkg
ICAgIyBTdG9yZSBjb25maWdzIGluIGFuIGFycmF5LgorCQkgICAgbXkgQGFycjsKKworCQkgICAg
aWYgKGRlZmluZWQoJG9iamVjdHN7JDF9KSkgeworCQkJQGFyciA9IEB7JG9iamVjdHN7JDF9fTsK
KwkJICAgIH0KKworCQkgICAgJGFyclskI2FycisxXSA9ICR2YXI7CisKKwkJICAgICMgVGhlIG9i
amVjdHMgaGF2ZSBhIGhhc2ggbWFwcGluZyB0byBhIHJlZmVyZW5jZQorCQkgICAgIyBvZiBhbiBh
cnJheSBvZiBjb25maWdzLgorCQkgICAgJG9iamVjdHN7JDF9ID0gXEBhcnI7CisJCX0KKwkgICAg
fQorCX0KKyAgICB9CisgICAgY2xvc2UoJGluZmlsZSk7Cit9CisKK215ICVtb2R1bGVzOworbXkg
JGxpbmZpbGU7CisKK2lmIChkZWZpbmVkKCRsc21vZF9maWxlKSkgeworICAgIGlmICggISAtZiAk
bHNtb2RfZmlsZSkgeworCWlmICggLWYgJEVOVnsnb2JqdHJlZSd9LiIvIi4kbHNtb2RfZmlsZSkg
eworCSAgICAkbHNtb2RfZmlsZSA9ICRFTlZ7J29ianRyZWUnfS4iLyIuJGxzbW9kX2ZpbGU7CisJ
fSBlbHNlIHsKKwkJZGllICIkbHNtb2RfZmlsZSBub3QgZm91bmQiOworCX0KKyAgICB9CisKKyAg
ICBteSAkb3R5cGUgPSAoIC14ICRsc21vZF9maWxlKSA/ICctfCcgOiAnPCc7CisgICAgb3Blbigk
bGluZmlsZSwgJG90eXBlLCAkbHNtb2RfZmlsZSk7CisKK30gZWxzZSB7CisKKyAgICAjIHNlZSB3
aGF0IG1vZHVsZXMgYXJlIGxvYWRlZCBvbiB0aGlzIHN5c3RlbQorICAgIG15ICRsc21vZDsKKwor
ICAgIGZvcmVhY2ggbXkgJGRpciAoICgiL3NiaW4iLCAiL2JpbiIsICIvdXNyL3NiaW4iLCAiL3Vz
ci9iaW4iKSApIHsKKwlpZiAoIC14ICIkZGlyL2xzbW9kIiApIHsKKwkgICAgJGxzbW9kID0gIiRk
aXIvbHNtb2QiOworCSAgICBsYXN0OworCX0KK30KKyAgICBpZiAoIWRlZmluZWQoJGxzbW9kKSkg
eworCSMgdHJ5IGp1c3QgdGhlIHBhdGgKKwkkbHNtb2QgPSAibHNtb2QiOworICAgIH0KKworICAg
IG9wZW4oJGxpbmZpbGUsICctfCcsICRsc21vZCkgfHwgZGllICJDYW4gbm90IGNhbGwgbHNtb2Qg
d2l0aCAkbHNtb2QiOworfQorCit3aGlsZSAoPCRsaW5maWxlPikgeworCW5leHQgaWYgKC9eTW9k
dWxlLyk7ICAjIFNraXAgdGhlIGZpcnN0IGxpbmUuCisJaWYgKC9eKFxTKykvKSB7CisJCSRtb2R1
bGVzeyQxfSA9IDE7CisJfQorfQorY2xvc2UgKCRsaW5maWxlKTsKKworIyBhZGQgdG8gdGhlIGNv
bmZpZ3MgaGFzaCBhbGwgY29uZmlncyB0aGF0IGFyZSBuZWVkZWQgdG8gZW5hYmxlCisjIGEgbG9h
ZGVkIG1vZHVsZS4gVGhpcyBpcyBhIGRpcmVjdCBvYmotJHtDT05GSUdfRk9PfSArPSBiYXIubwor
IyB3aGVyZSB3ZSBrbm93IHdlIG5lZWQgYmFyLm8gc28gd2UgYWRkIEZPTyB0byB0aGUgbGlzdC4K
K215ICVjb25maWdzOworZm9yZWFjaCBteSAkbW9kdWxlIChrZXlzKCVtb2R1bGVzKSkgeworICAg
IGlmIChkZWZpbmVkKCRvYmplY3RzeyRtb2R1bGV9KSkgeworCW15IEBhcnIgPSBAeyRvYmplY3Rz
eyRtb2R1bGV9fTsKKwlmb3JlYWNoIG15ICRjb25mIChAYXJyKSB7CisJICAgICRjb25maWdzeyRj
b25mfSA9ICRtb2R1bGU7CisJICAgIGRwcmludCAiJGNvbmYgYWRkZWQgYnkgZGlyZWN0ICgkbW9k
dWxlKVxuIjsKKwkgICAgaWYgKCRkZWJ1Z3ByaW50KSB7CisJCW15ICRjPSRjb25mOworCQkkYyA9
fiBzL15DT05GSUdfLy87CisJCWlmIChkZWZpbmVkKCRkZXBlbmRzeyRjfSkpIHsKKwkJICAgIGRw
cmludCAiIGRlcHMgPSAkZGVwZW5kc3skY31cbiI7CisJCX0gZWxzZSB7CisJCSAgICBkcHJpbnQg
IiBubyBkZXBzXG4iOworCQl9CisJICAgIH0KKwl9CisgICAgfSBlbHNlIHsKKwkjIE1vc3QgbGlr
ZWx5LCBzb21lb25lIGhhcyBhIGN1c3RvbSAoYmluYXJ5PykgbW9kdWxlIGxvYWRlZC4KKwlwcmlu
dCBTVERFUlIgIiRtb2R1bGUgY29uZmlnIG5vdCBmb3VuZCEhXG4iOworICAgIH0KK30KKworIyBS
ZWFkIHRoZSBjdXJyZW50IGNvbmZpZywgYW5kIHNlZSB3aGF0IGlzIGVuYWJsZWQuIFdlIHdhbnQg
dG8KKyMgaWdub3JlIGNvbmZpZ3MgdGhhdCB3ZSB3b3VsZCBub3QgZW5hYmxlIGFueXdheS4KKwor
bXkgJW9yaWdfY29uZmlnczsKK215ICR2YWxpZCA9ICJBLVphLXpfMC05IjsKKworZm9yZWFjaCBt
eSAkbGluZSAoQGNvbmZpZ19maWxlKSB7CisgICAgJF8gPSAkbGluZTsKKworICAgIGlmICgvKENP
TkZJR19bJHZhbGlkXSopPShtfHkpLykgeworCSRvcmlnX2NvbmZpZ3N7JDF9ID0gJDI7CisgICAg
fQorfQorCitteSAkcmVwZWF0ID0gMTsKKworbXkgJGRlcGNvbmZpZzsKKworIworIyBOb3RlLCB3
ZSBkbyBub3QgY2FyZSBhYm91dCBvcGVyYW5kcyAobGlrZTogJiYsIHx8LCAhKSB3ZSB3YW50IHRv
IGFkZCBhbnkKKyMgY29uZmlnIHRoYXQgaXMgaW4gdGhlIGRlcGVuZCBsaXN0IG9mIGFub3RoZXIg
Y29uZmlnLiBUaGlzIHNjcmlwdCBkb2VzCisjIG5vdCBlbmFibGUgY29uZmlncyB0aGF0IGFyZSBu
b3QgYWxyZWFkeSBlbmFibGVkLiBJZiB3ZSBjb21lIGFjcm9zcyBhCisjIGNvbmZpZyBBIHRoYXQg
ZGVwZW5kcyBvbiAhQiwgd2UgY2FuIHN0aWxsIGFkZCBCIHRvIHRoZSBsaXN0IG9mIGRlcGVuZHMK
KyMgdG8ga2VlcCBvbi4gSWYgQSB3YXMgb24gaW4gdGhlIG9yaWdpbmFsIGNvbmZpZywgQiB3b3Vs
ZCBub3QgaGF2ZSBiZWVuCisjIGFuZCBCIHdvdWxkIG5vdCBiZSB0dXJuZWQgb24gYnkgdGhpcyBz
Y3JpcHQuCisjCitzdWIgcGFyc2VfY29uZmlnX2RlcGVuZHMKK3sKKyAgICBteSAoJHApID0gQF87
CisKKyAgICB3aGlsZSAoJHAgPX4gL1skdmFsaWRdLykgeworCisJaWYgKCRwID1+IC9eW14kdmFs
aWRdKihbJHZhbGlkXSspLykgeworCSAgICBteSAkY29uZiA9ICJDT05GSUdfIiAuICQxOworCisJ
ICAgICRwID1+IHMvXlteJHZhbGlkXSpbJHZhbGlkXSsvLzsKKworCSAgICAjIFdlIG9ubHkgbmVl
ZCB0byBwcm9jZXNzIGlmIHRoZSBkZXBlbmQgY29uZmlnIGlzIGEgbW9kdWxlCisJICAgIGlmICgh
ZGVmaW5lZCgkb3JpZ19jb25maWdzeyRjb25mfSkgfHwgJG9yaWdfY29uZmlnc3skY29uZn0gZXEg
InkiKSB7CisJCW5leHQ7CisJICAgIH0KKworCSAgICBpZiAoIWRlZmluZWQoJGNvbmZpZ3N7JGNv
bmZ9KSkgeworCQkjIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgdGhpcyBjb25maWcgaGFzIGl0cwor
CQkjIGRlcGVuZGVuY2llcyBtZXQuCisJCSRyZXBlYXQgPSAxOyAjIGRvIGFnYWluCisJCWRwcmlu
dCAiJGNvbmYgc2VsZWN0ZWQgYnkgZGVwZW5kICRkZXBjb25maWdcbiI7CisJCSRjb25maWdzeyRj
b25mfSA9IDE7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBkaWUgInRoaXMgc2hvdWxkIG5ldmVy
IGhhcHBlbiI7CisJfQorICAgIH0KK30KKworIyBTZWxlY3QgaXMgdHJlYXRlZCBhIGJpdCBkaWZm
ZXJlbnRseSB0aGFuIGRlcGVuZHMuIFdlIGNhbGwgdGhpcworIyB3aGVuIGEgY29uZmlnIGhhcyBu
byBwcm9tcHQgYW5kIHJlcXVpcmVzIGFub3RoZXIgY29uZmlnIHRvIGJlCisjIHNlbGVjdGVkLiBX
ZSB1c2UgdG8ganVzdCBzZWxlY3QgYWxsIGNvbmZpZ3MgdGhhdCBzZWxlY3RlZCB0aGlzCisjIGNv
bmZpZywgYnV0IGZvdW5kIHRoYXQgdGhhdCBjYW4gYmFsbG9vbiBpbnRvIGVuYWJsaW5nIGh1bmRy
ZWRzCisjIG9mIGNvbmZpZ3MgdGhhdCB3ZSBkbyBub3QgY2FyZSBhYm91dC4KKyMKKyMgVGhlIGlk
ZWEgaXMgd2UgbG9vayBhdCBhbGwgdGhlIGNvbmZpZ3MgdGhhdCBzZWxlY3QgaXQuIElmIG9uZQor
IyBpcyBhbHJlYWR5IGluIG91ciBsaXN0IG9mIGNvbmZpZ3MgdG8gZW5hYmxlLCB0aGVuIHRoZXJl
J3Mgbm90aGluZworIyBlbHNlIHRvIGRvLiBJZiB0aGVyZSBpc24ndCwgd2UgcGljayB0aGUgZmly
c3QgY29uZmlnIHRoYXQgd2FzCisjIGVuYWJsZWQgaW4gdGhlIG9yaWduYWwgY29uZmlnIGFuZCB1
c2UgdGhhdC4KK3N1YiBwYXJzZV9jb25maWdfc2VsZWN0cworeworICAgIG15ICgkY29uZmlnLCAk
cCkgPSBAXzsKKworICAgIG15ICRuZXh0X2NvbmZpZzsKKworICAgIHdoaWxlICgkcCA9fiAvWyR2
YWxpZF0vKSB7CisKKwlpZiAoJHAgPX4gL15bXiR2YWxpZF0qKFskdmFsaWRdKykvKSB7CisJICAg
IG15ICRjb25mID0gIkNPTkZJR18iIC4gJDE7CisKKwkgICAgJHAgPX4gcy9eW14kdmFsaWRdKlsk
dmFsaWRdKy8vOworCisJICAgICMgTWFrZSBzdXJlIHRoYXQgdGhpcyBjb25maWcgZXhpc3RzIGlu
IHRoZSBjdXJyZW50IC5jb25maWcgZmlsZQorCSAgICBpZiAoIWRlZmluZWQoJG9yaWdfY29uZmln
c3skY29uZn0pKSB7CisJCWRwcmludCAiJGNvbmYgbm90IHNldCBmb3IgJGNvbmZpZyBzZWxlY3Rc
biI7CisJCW5leHQ7CisJICAgIH0KKworCSAgICAjIENoZWNrIGlmIHNvbWV0aGluZyBvdGhlciB0
aGFuIGEgbW9kdWxlIHNlbGVjdHMgdGhpcyBjb25maWcKKwkgICAgaWYgKGRlZmluZWQoJG9yaWdf
Y29uZmlnc3skY29uZn0pICYmICRvcmlnX2NvbmZpZ3N7JGNvbmZ9IG5lICJtIikgeworCQlkcHJp
bnQgIiRjb25mIChub24gbW9kdWxlKSBzZWxlY3RzIGNvbmZpZywgd2UgYXJlIGdvb2RcbiI7CisJ
CSMgd2UgYXJlIGdvb2Qgd2l0aCB0aGlzCisJCXJldHVybjsKKwkgICAgfQorCSAgICBpZiAoZGVm
aW5lZCgkY29uZmlnc3skY29uZn0pKSB7CisJCWRwcmludCAiJGNvbmYgc2VsZWN0cyAkY29uZmln
IHNvIHdlIGFyZSBnb29kXG4iOworCQkjIEEgc2V0IGNvbmZpZyBzZWxlY3RzIHRoaXMgY29uZmln
LCB3ZSBhcmUgZ29vZAorCQlyZXR1cm47CisJICAgIH0KKwkgICAgIyBTZXQgdGhpcyBjb25maWcg
dG8gYmUgc2VsZWN0ZWQKKwkgICAgaWYgKCFkZWZpbmVkKCRuZXh0X2NvbmZpZykpIHsKKwkJJG5l
eHRfY29uZmlnID0gJGNvbmY7CisJICAgIH0KKwl9IGVsc2UgeworCSAgICBkaWUgInRoaXMgc2hv
dWxkIG5ldmVyIGhhcHBlbiI7CisJfQorICAgIH0KKworICAgICMgSWYgbm8gcG9zc2libGUgY29u
ZmlnIHNlbGVjdGVkIHRoaXMsIHRoZW4gc29tZXRoaW5nIGhhcHBlbmVkLgorICAgIGlmICghZGVm
aW5lZCgkbmV4dF9jb25maWcpKSB7CisJcHJpbnQgU1RERVJSICJXQVJOSU5HOiAkY29uZmlnIGlz
IHJlcXVpcmVkLCBidXQgbm90aGluZyBpbiB0aGVcbiI7CisJcHJpbnQgU1RERVJSICIgIGN1cnJl
bnQgY29uZmlnIHNlbGVjdHMgaXQuXG4iOworCXJldHVybjsKKyAgICB9CisKKyAgICAjIElmIHdl
IGFyZSBoZXJlLCB0aGVuIHdlIGZvdW5kIG5vIGNvbmZpZyB0aGF0IGlzIHNldCBhbmQKKyAgICAj
IHNlbGVjdHMgdGhpcyBjb25maWcuIFJlcGVhdC4KKyAgICAkcmVwZWF0ID0gMTsKKyAgICAjIE1h
a2UgdGhpcyBjb25maWcgbmVlZCB0byBiZSBzZWxlY3RlZAorICAgICRjb25maWdzeyRuZXh0X2Nv
bmZpZ30gPSAxOworICAgIGRwcmludCAiJG5leHRfY29uZmlnIHNlbGVjdGVkIGJ5IHNlbGVjdCAk
Y29uZmlnXG4iOworfQorCitteSAlcHJvY2Vzc19zZWxlY3RzOworCisjIGxvb3AgdGhyb3VnaCBh
bGwgY29uZmlncywgc2VsZWN0IHRoZWlyIGRlcGVuZGVuY2llcy4KK3N1YiBsb29wX2RlcGVuZCB7
CisgICAgJHJlcGVhdCA9IDE7CisKKyAgICB3aGlsZSAoJHJlcGVhdCkgeworCSRyZXBlYXQgPSAw
OworCisgICAgICBmb3Jsb29wOgorCWZvcmVhY2ggbXkgJGNvbmZpZyAoa2V5cyAlY29uZmlncykg
eworCisJICAgICMgSWYgdGhpcyBjb25maWcgaXMgbm90IGEgbW9kdWxlLCB3ZSBkbyBub3QgbmVl
ZCB0byBwcm9jZXNzIGl0CisJICAgIGlmIChkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7JGNvbmZpZ30p
ICYmICRvcmlnX2NvbmZpZ3N7JGNvbmZpZ30gbmUgIm0iKSB7CisJCW5leHQgZm9ybG9vcDsKKwkg
ICAgfQorCisJICAgICRjb25maWcgPX4gcy9eQ09ORklHXy8vOworCSAgICAkZGVwY29uZmlnID0g
JGNvbmZpZzsKKworCSAgICBpZiAoZGVmaW5lZCgkZGVwZW5kc3skY29uZmlnfSkpIHsKKwkJIyBU
aGlzIGNvbmZpZyBoYXMgZGVwZW5kZW5jaWVzLiBNYWtlIHN1cmUgdGhleSBhcmUgYWxzbyBpbmNs
dWRlZAorCQlwYXJzZV9jb25maWdfZGVwZW5kcyAkZGVwZW5kc3skY29uZmlnfTsKKwkgICAgfQor
CisJICAgICMgSWYgdGhlIGNvbmZpZyBoYXMgbm8gcHJvbXB0LCB0aGVuIHdlIG5lZWQgdG8gY2hl
Y2sgaWYgYSBjb25maWcKKwkgICAgIyB0aGF0IGlzIGVuYWJsZWQgc2VsZWN0ZWQgaXQuIE9yIGlm
IHdlIG5lZWQgdG8gZW5hYmxlIG9uZS4KKwkgICAgaWYgKCFkZWZpbmVkKCRwcm9tcHRzeyRjb25m
aWd9KSAmJiBkZWZpbmVkKCRzZWxlY3RzeyRjb25maWd9KSkgeworCQkkcHJvY2Vzc19zZWxlY3Rz
eyRjb25maWd9ID0gMTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKK3N1YiBsb29wX3NlbGVjdCB7
CisKKyAgICBmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJXByb2Nlc3Nfc2VsZWN0cykgeworCSRj
b25maWcgPX4gcy9eQ09ORklHXy8vOworCisJZHByaW50ICJQcm9jZXNzIHNlbGVjdCAkY29uZmln
XG4iOworCisJIyBjb25maWcgaGFzIG5vIHByb21wdCBhbmQgbXVzdCBiZSBzZWxlY3RlZC4KKwlw
YXJzZV9jb25maWdfc2VsZWN0cyAkY29uZmlnLCAkc2VsZWN0c3skY29uZmlnfTsKKyAgICB9Cit9
CisKK3doaWxlICgkcmVwZWF0KSB7CisgICAgIyBHZXQgdGhlIGZpcnN0IHNldCBvZiBjb25maWdz
IGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuCisgICAgbG9vcF9kZXBlbmQ7CisKKyAgICAkcmVwZWF0
ID0gMDsKKworICAgICMgTm93IHdlIG5lZWQgdG8gc2VlIGlmIHdlIGhhdmUgdG8gY2hlY2sgc2Vs
ZWN0czsKKyAgICBsb29wX3NlbGVjdDsKK30KKworbXkgJXNldGNvbmZpZ3M7CisKKyMgRmluYWxs
eSwgcmVhZCB0aGUgLmNvbmZpZyBmaWxlIGFuZCB0dXJuIG9mZiBhbnkgbW9kdWxlIGVuYWJsZWQg
dGhhdAorIyB3ZSBjb3VsZCBub3QgZmluZCBhIHJlYXNvbiB0byBrZWVwIGVuYWJsZWQuCitmb3Jl
YWNoIG15ICRsaW5lIChAY29uZmlnX2ZpbGUpIHsKKyAgICAkXyA9ICRsaW5lOworCisgICAgaWYg
KC9DT05GSUdfSUtDT05GSUcvKSB7CisJaWYgKC8jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0
LykgeworCSAgICAjIGVuYWJsZSBJS0NPTkZJRyBhdCBsZWFzdCBhcyBhIG1vZHVsZQorCSAgICBw
cmludCAiQ09ORklHX0lLQ09ORklHPW1cbiI7CisJICAgICMgZG9uJ3QgYXNrIGFib3V0IFBST0MK
KwkgICAgcHJpbnQgIiMgQ09ORklHX0lLQ09ORklHX1BST0MgaXMgbm90IHNldFxuIjsKKwl9IGVs
c2UgeworCSAgICBwcmludDsKKwl9CisJbmV4dDsKKyAgICB9CisKKyAgICBpZiAoL0NPTkZJR19N
T0RVTEVfU0lHX0tFWT0iKC4rKSIvKSB7CisgICAgICAgIG15ICRvcmlnX2NlcnQgPSAkMTsKKyAg
ICAgICAgbXkgJGRlZmF1bHRfY2VydCA9ICJjZXJ0cy9zaWduaW5nX2tleS5wZW0iOworCisgICAg
ICAgICMgQ2hlY2sgdGhhdCB0aGUgbG9naWMgaW4gdGhpcyBzY3JpcHQgc3RpbGwgbWF0Y2hlcyB0
aGUgb25lIGluIEtjb25maWcKKyAgICAgICAgaWYgKCFkZWZpbmVkKCRkZXBlbmRzeyJNT0RVTEVf
U0lHX0tFWSJ9KSB8fAorICAgICAgICAgICAgJGRlcGVuZHN7Ik1PRFVMRV9TSUdfS0VZIn0gIX4g
LyJcUSRkZWZhdWx0X2NlcnRcRSIvKSB7CisgICAgICAgICAgICBwcmludCBTVERFUlIgIldBUk5J
Tkc6IE1PRFVMRV9TSUdfS0VZIGFzc2VydGlvbiBmYWlsdXJlLCAiLAorICAgICAgICAgICAgICAg
ICJ1cGRhdGUgbmVlZGVkIHRvICIsIF9fRklMRV9fLCAiIGxpbmUgIiwgX19MSU5FX18sICJcbiI7
CisgICAgICAgICAgICBwcmludDsKKyAgICAgICAgfSBlbHNpZiAoJG9yaWdfY2VydCBuZSAkZGVm
YXVsdF9jZXJ0ICYmICEgLWYgJG9yaWdfY2VydCkgeworICAgICAgICAgICAgcHJpbnQgU1RERVJS
ICJNb2R1bGUgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBlbmFibGVkIGJ1dCAiLAorICAgICAgICAg
ICAgICAgICJtb2R1bGUgc2lnbmluZyBrZXkgXCIkb3JpZ19jZXJ0XCIgbm90IGZvdW5kLiBSZXNl
dHRpbmcgIiwKKyAgICAgICAgICAgICAgICAic2lnbmluZyBrZXkgdG8gZGVmYXVsdCB2YWx1ZS5c
biI7CisgICAgICAgICAgICBwcmludCAiQ09ORklHX01PRFVMRV9TSUdfS0VZPVwiJGRlZmF1bHRf
Y2VydFwiXG4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJpbnQ7CisgICAgICAg
IH0KKyAgICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoL0NPTkZJR19TWVNURU1fVFJVU1RF
RF9LRVlTPSIoLispIi8pIHsKKyAgICAgICAgbXkgJG9yaWdfa2V5cyA9ICQxOworCisgICAgICAg
IGlmICghIC1mICRvcmlnX2tleXMpIHsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiU3lzdGVt
IGtleXJpbmcgZW5hYmxlZCBidXQga2V5cyBcIiRvcmlnX2tleXNcIiAiLAorICAgICAgICAgICAg
ICAgICJub3QgZm91bmQuIFJlc2V0dGluZyBrZXlzIHRvIGRlZmF1bHQgdmFsdWUuXG4iOworICAg
ICAgICAgICAgcHJpbnQgIkNPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlTPVwiXCJcbiI7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmludDsKKyAgICAgICAgfQorICAgICAgICBuZXh0
OworICAgIH0KKworICAgIGlmICgvXihDT05GSUcuKik9KG18eSkvKSB7CisJaWYgKGRlZmluZWQo
JGNvbmZpZ3N7JDF9KSkgeworCSAgICBpZiAoJGxvY2FseWVzY29uZmlnKSB7CisJICAgICAgICAk
c2V0Y29uZmlnc3skMX0gPSAneSc7CisJCXByaW50ICIkMT15XG4iOworCQluZXh0OworCSAgICB9
IGVsc2UgeworCSAgICAgICAgJHNldGNvbmZpZ3N7JDF9ID0gJDI7CisJICAgIH0KKwl9IGVsc2lm
ICgkMiBlcSAibSIpIHsKKwkgICAgcHJpbnQgIiMgJDEgaXMgbm90IHNldFxuIjsKKwkgICAgbmV4
dDsKKwl9CisgICAgfQorICAgIHByaW50OworfQorCisjIEludGVncml0eSBjaGVjaywgbWFrZSBz
dXJlIGFsbCBtb2R1bGVzIHRoYXQgd2Ugd2FudCBlbmFibGVkIGRvCisjIGluZGVlZCBoYXZlIHRo
ZWlyIGNvbmZpZ3Mgc2V0LgorbG9vcDoKK2ZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cyglbW9kdWxl
cykpIHsKKyAgICBpZiAoZGVmaW5lZCgkb2JqZWN0c3skbW9kdWxlfSkpIHsKKwlteSBAYXJyID0g
QHskb2JqZWN0c3skbW9kdWxlfX07CisJZm9yZWFjaCBteSAkY29uZiAoQGFycikgeworCSAgICBp
ZiAoZGVmaW5lZCgkc2V0Y29uZmlnc3skY29uZn0pKSB7CisJCW5leHQgbG9vcDsKKwkgICAgfQor
CX0KKwlwcmludCBTVERFUlIgIm1vZHVsZSAkbW9kdWxlIGRpZCBub3QgaGF2ZSBjb25maWdzIjsK
Kwlmb3JlYWNoIG15ICRjb25mIChAYXJyKSB7CisJICAgIHByaW50IFNUREVSUiAiICIgLCAkY29u
ZjsKKwl9CisJcHJpbnQgU1RERVJSICJcbiI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3N5bWJvbC5jIGIvc3VwcG9ydC9rY29uZmlnL3N5bWJvbC5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOTI2NmQKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBw
b3J0L2tjb25maWcvc3ltYm9sLmMKQEAgLTAsMCArMSwxMzMxIEBACisvLyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBw
ZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxyZWdleC5o
PgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisKKyNpbmNsdWRlICJsa2MuaCIKKworc3RydWN0
IHN5bWJvbCBzeW1ib2xfeWVzID0geworCS5uYW1lID0gInkiLAorCS5jdXJyID0geyAieSIsIHll
cyB9LAorCS5mbGFncyA9IFNZTUJPTF9DT05TVHxTWU1CT0xfVkFMSUQsCit9LCBzeW1ib2xfbW9k
ID0geworCS5uYW1lID0gIm0iLAorCS5jdXJyID0geyAibSIsIG1vZCB9LAorCS5mbGFncyA9IFNZ
TUJPTF9DT05TVHxTWU1CT0xfVkFMSUQsCit9LCBzeW1ib2xfbm8gPSB7CisJLm5hbWUgPSAibiIs
CisJLmN1cnIgPSB7ICJuIiwgbm8gfSwKKwkuZmxhZ3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZB
TElELAorfSwgc3ltYm9sX2VtcHR5ID0geworCS5uYW1lID0gIiIsCisJLmN1cnIgPSB7ICIiLCBu
byB9LAorCS5mbGFncyA9IFNZTUJPTF9WQUxJRCwKK307CisKK3N0cnVjdCBzeW1ib2wgKnN5bV9k
ZWZjb25maWdfbGlzdDsKK3N0cnVjdCBzeW1ib2wgKm1vZHVsZXNfc3ltOwordHJpc3RhdGUgbW9k
dWxlc192YWw7CisKK2VudW0gc3ltYm9sX3R5cGUgc3ltX2dldF90eXBlKHN0cnVjdCBzeW1ib2wg
KnN5bSkKK3sKKwllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBzeW0tPnR5cGU7CisKKwlpZiAodHlw
ZSA9PSBTX1RSSVNUQVRFKSB7CisJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgc3lt
LT52aXNpYmxlID09IHllcykKKwkJCXR5cGUgPSBTX0JPT0xFQU47CisJCWVsc2UgaWYgKG1vZHVs
ZXNfdmFsID09IG5vKQorCQkJdHlwZSA9IFNfQk9PTEVBTjsKKwl9CisJcmV0dXJuIHR5cGU7Cit9
CisKK2NvbnN0IGNoYXIgKnN5bV90eXBlX25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlKQorewor
CXN3aXRjaCAodHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCQlyZXR1cm4gImJvb2wiOworCWNh
c2UgU19UUklTVEFURToKKwkJcmV0dXJuICJ0cmlzdGF0ZSI7CisJY2FzZSBTX0lOVDoKKwkJcmV0
dXJuICJpbnRlZ2VyIjsKKwljYXNlIFNfSEVYOgorCQlyZXR1cm4gImhleCI7CisJY2FzZSBTX1NU
UklORzoKKwkJcmV0dXJuICJzdHJpbmciOworCWNhc2UgU19VTktOT1dOOgorCQlyZXR1cm4gInVu
a25vd24iOworCX0KKwlyZXR1cm4gIj8/PyI7Cit9CisKK3N0cnVjdCBwcm9wZXJ0eSAqc3ltX2dl
dF9jaG9pY2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5ICpw
cm9wOworCisJZm9yX2FsbF9jaG9pY2VzKHN5bSwgcHJvcCkKKwkJcmV0dXJuIHByb3A7CisJcmV0
dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfZGVmYXVsdF9w
cm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisKKwlm
b3JfYWxsX2RlZmF1bHRzKHN5bSwgcHJvcCkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJf
Y2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQlpZiAocHJvcC0+dmlzaWJsZS50cmkg
IT0gbm8pCisJCQlyZXR1cm4gcHJvcDsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBw
cm9wZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7CisKKwlmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBwcm9wLCBQX1JB
TkdFKSB7CisJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2li
bGUuZXhwcik7CisJCWlmIChwcm9wLT52aXNpYmxlLnRyaSAhPSBubykKKwkJCXJldHVybiBwcm9w
OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGxvbmcgbG9uZyBzeW1fZ2V0X3Jhbmdl
X3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBiYXNlKQoreworCXN5bV9jYWxjX3ZhbHVlKHN5
bSk7CisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNlIFNfSU5UOgorCQliYXNlID0gMTA7CisJ
CWJyZWFrOworCWNhc2UgU19IRVg6CisJCWJhc2UgPSAxNjsKKwkJYnJlYWs7CisJZGVmYXVsdDoK
KwkJYnJlYWs7CisJfQorCXJldHVybiBzdHJ0b2xsKHN5bS0+Y3Vyci52YWwsIE5VTEwsIGJhc2Up
OworfQorCitzdGF0aWMgdm9pZCBzeW1fdmFsaWRhdGVfcmFuZ2Uoc3RydWN0IHN5bWJvbCAqc3lt
KQoreworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKKwlpbnQgYmFzZTsKKwlsb25nIGxvbmcgdmFs
LCB2YWwyOworCWNoYXIgc3RyWzY0XTsKKworCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJY2FzZSBT
X0lOVDoKKwkJYmFzZSA9IDEwOworCQlicmVhazsKKwljYXNlIFNfSEVYOgorCQliYXNlID0gMTY7
CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJcHJvcCA9IHN5bV9nZXRfcmFu
Z2VfcHJvcChzeW0pOworCWlmICghcHJvcCkKKwkJcmV0dXJuOworCXZhbCA9IHN0cnRvbGwoc3lt
LT5jdXJyLnZhbCwgTlVMTCwgYmFzZSk7CisJdmFsMiA9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3At
PmV4cHItPmxlZnQuc3ltLCBiYXNlKTsKKwlpZiAodmFsID49IHZhbDIpIHsKKwkJdmFsMiA9IHN5
bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJpZ2h0LnN5bSwgYmFzZSk7CisJCWlmICh2YWwg
PD0gdmFsMikKKwkJCXJldHVybjsKKwl9CisJaWYgKHN5bS0+dHlwZSA9PSBTX0lOVCkKKwkJc3By
aW50ZihzdHIsICIlbGxkIiwgdmFsMik7CisJZWxzZQorCQlzcHJpbnRmKHN0ciwgIjB4JWxseCIs
IHZhbDIpOworCXN5bS0+Y3Vyci52YWwgPSB4c3RyZHVwKHN0cik7Cit9CisKK3N0YXRpYyB2b2lk
IHN5bV9zZXRfY2hhbmdlZChzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJc3RydWN0IHByb3BlcnR5
ICpwcm9wOworCisJc3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hBTkdFRDsKKwlmb3IgKHByb3AgPSBz
eW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJCWlmIChwcm9wLT5tZW51KQor
CQkJcHJvcC0+bWVudS0+ZmxhZ3MgfD0gTUVOVV9DSEFOR0VEOworCX0KK30KKworc3RhdGljIHZv
aWQgc3ltX3NldF9hbGxfY2hhbmdlZCh2b2lkKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlp
bnQgaTsKKworCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pCisJCXN5bV9zZXRfY2hhbmdlZChzeW0p
OworfQorCitzdGF0aWMgdm9pZCBzeW1fY2FsY192aXNpYmlsaXR5KHN0cnVjdCBzeW1ib2wgKnN5
bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqY2hvaWNlX3N5
bSA9IE5VTEw7CisJdHJpc3RhdGUgdHJpOworCisJLyogYW55IHByb21wdCB2aXNpYmxlPyAqLwor
CXRyaSA9IG5vOworCisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkKKwkJY2hvaWNlX3N5
bSA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOworCisJZm9yX2Fs
bF9wcm9tcHRzKHN5bSwgcHJvcCkgeworCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192
YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOworCQkvKgorCQkgKiBUcmlzdGF0ZSBjaG9pY2VfdmFs
dWVzIHdpdGggdmlzaWJpbGl0eSAnbW9kJyBhcmUKKwkJICogbm90IHZpc2libGUgaWYgdGhlIGNv
cnJlc3BvbmRpbmcgY2hvaWNlJ3MgdmFsdWUgaXMKKwkJICogJ3llcycuCisJCSAqLworCQlpZiAo
Y2hvaWNlX3N5bSAmJiBzeW0tPnR5cGUgPT0gU19UUklTVEFURSAmJgorCQkgICAgcHJvcC0+dmlz
aWJsZS50cmkgPT0gbW9kICYmIGNob2ljZV9zeW0tPmN1cnIudHJpID09IHllcykKKwkJCXByb3At
PnZpc2libGUudHJpID0gbm87CisKKwkJdHJpID0gRVhQUl9PUih0cmksIHByb3AtPnZpc2libGUu
dHJpKTsKKwl9CisJaWYgKHRyaSA9PSBtb2QgJiYgKHN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFIHx8
IG1vZHVsZXNfdmFsID09IG5vKSkKKwkJdHJpID0geWVzOworCWlmIChzeW0tPnZpc2libGUgIT0g
dHJpKSB7CisJCXN5bS0+dmlzaWJsZSA9IHRyaTsKKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7CisJ
fQorCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpCisJCXJldHVybjsKKwkvKiBkZWZhdWx0
aW5nIHRvICJ5ZXMiIGlmIG5vIGV4cGxpY2l0ICJkZXBlbmRzIG9uIiBhcmUgZ2l2ZW4gKi8KKwl0
cmkgPSB5ZXM7CisJaWYgKHN5bS0+ZGlyX2RlcC5leHByKQorCQl0cmkgPSBleHByX2NhbGNfdmFs
dWUoc3ltLT5kaXJfZGVwLmV4cHIpOworCWlmICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShz
eW0pID09IFNfQk9PTEVBTikKKwkJdHJpID0geWVzOworCWlmIChzeW0tPmRpcl9kZXAudHJpICE9
IHRyaSkgeworCQlzeW0tPmRpcl9kZXAudHJpID0gdHJpOworCQlzeW1fc2V0X2NoYW5nZWQoc3lt
KTsKKwl9CisJdHJpID0gbm87CisJaWYgKHN5bS0+cmV2X2RlcC5leHByKQorCQl0cmkgPSBleHBy
X2NhbGNfdmFsdWUoc3ltLT5yZXZfZGVwLmV4cHIpOworCWlmICh0cmkgPT0gbW9kICYmIHN5bV9n
ZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikKKwkJdHJpID0geWVzOworCWlmIChzeW0tPnJldl9k
ZXAudHJpICE9IHRyaSkgeworCQlzeW0tPnJldl9kZXAudHJpID0gdHJpOworCQlzeW1fc2V0X2No
YW5nZWQoc3ltKTsKKwl9CisJdHJpID0gbm87CisJaWYgKHN5bS0+aW1wbGllZC5leHByICYmIHN5
bS0+ZGlyX2RlcC50cmkgIT0gbm8pCisJCXRyaSA9IGV4cHJfY2FsY192YWx1ZShzeW0tPmltcGxp
ZWQuZXhwcik7CisJaWYgKHRyaSA9PSBtb2QgJiYgc3ltX2dldF90eXBlKHN5bSkgPT0gU19CT09M
RUFOKQorCQl0cmkgPSB5ZXM7CisJaWYgKHN5bS0+aW1wbGllZC50cmkgIT0gdHJpKSB7CisJCXN5
bS0+aW1wbGllZC50cmkgPSB0cmk7CisJCXN5bV9zZXRfY2hhbmdlZChzeW0pOworCX0KK30KKwor
LyoKKyAqIEZpbmQgdGhlIGRlZmF1bHQgc3ltYm9sIGZvciBhIGNob2ljZS4KKyAqIEZpcnN0IHRy
eSB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBjaG9pY2Ugc3ltYm9sCisgKiBOZXh0IGxvY2F0
ZSB0aGUgZmlyc3QgdmlzaWJsZSBjaG9pY2UgdmFsdWUKKyAqIFJldHVybiBOVUxMIGlmIG5vbmUg
d2FzIGZvdW5kCisgKi8KK3N0cnVjdCBzeW1ib2wgKnN5bV9jaG9pY2VfZGVmYXVsdChzdHJ1Y3Qg
c3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbCAqZGVmX3N5bTsKKwlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7CisJc3RydWN0IGV4cHIgKmU7CisKKwkvKiBhbnkgb2YgdGhlIGRlZmF1bHRzIHZp
c2libGU/ICovCisJZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHByb3ApIHsKKwkJcHJvcC0+dmlzaWJs
ZS50cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsKKwkJaWYgKHByb3At
PnZpc2libGUudHJpID09IG5vKQorCQkJY29udGludWU7CisJCWRlZl9zeW0gPSBwcm9wX2dldF9z
eW1ib2wocHJvcCk7CisJCWlmIChkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQkJcmV0dXJuIGRl
Zl9zeW07CisJfQorCisJLyoganVzdCBnZXQgdGhlIGZpcnN0IHZpc2libGUgdmFsdWUgKi8KKwlw
cm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOworCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0o
cHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkKKwkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8pCisJ
CQlyZXR1cm4gZGVmX3N5bTsKKworCS8qIGZhaWxlZCB0byBsb2NhdGUgYW55IGRlZmF1bHRzICov
CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2FsY19jaG9p
Y2Uoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07CisJc3Ry
dWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCWludCBmbGFnczsKKworCS8q
IGZpcnN0IGNhbGN1bGF0ZSBhbGwgY2hvaWNlIHZhbHVlcycgdmlzaWJpbGl0aWVzICovCisJZmxh
Z3MgPSBzeW0tPmZsYWdzOworCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJZXhw
cl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBkZWZfc3ltKSB7CisJCXN5bV9jYWxj
X3Zpc2liaWxpdHkoZGVmX3N5bSk7CisJCWlmIChkZWZfc3ltLT52aXNpYmxlICE9IG5vKQorCQkJ
ZmxhZ3MgJj0gZGVmX3N5bS0+ZmxhZ3M7CisJfQorCisJc3ltLT5mbGFncyAmPSBmbGFncyB8IH5T
WU1CT0xfREVGX1VTRVI7CisKKwkvKiBpcyB0aGUgdXNlciBjaG9pY2UgdmlzaWJsZT8gKi8KKwlk
ZWZfc3ltID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOworCWlmIChkZWZfc3ltICYmIGRlZl9z
eW0tPnZpc2libGUgIT0gbm8pCisJCXJldHVybiBkZWZfc3ltOworCisJZGVmX3N5bSA9IHN5bV9j
aG9pY2VfZGVmYXVsdChzeW0pOworCisJaWYgKGRlZl9zeW0gPT0gTlVMTCkKKwkJLyogbm8gY2hv
aWNlPyByZXNldCB0cmlzdGF0ZSB2YWx1ZSAqLworCQlzeW0tPmN1cnIudHJpID0gbm87CisKKwly
ZXR1cm4gZGVmX3N5bTsKK30KKworc3RhdGljIHZvaWQgc3ltX3dhcm5fdW5tZXRfZGVwKHN0cnVj
dCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgZ3N0ciBncyA9IHN0cl9uZXcoKTsKKworCXN0cl9w
cmludGYoJmdzLAorCQkgICAiXG5XQVJOSU5HOiB1bm1ldCBkaXJlY3QgZGVwZW5kZW5jaWVzIGRl
dGVjdGVkIGZvciAlc1xuIiwKKwkJICAgc3ltLT5uYW1lKTsKKwlzdHJfcHJpbnRmKCZncywKKwkJ
ICAgIiAgRGVwZW5kcyBvbiBbJWNdOiAiLAorCQkgICBzeW0tPmRpcl9kZXAudHJpID09IG1vZCA/
ICdtJyA6ICduJyk7CisJZXhwcl9nc3RyX3ByaW50KHN5bS0+ZGlyX2RlcC5leHByLCAmZ3MpOwor
CXN0cl9wcmludGYoJmdzLCAiXG4iKTsKKworCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5y
ZXZfZGVwLmV4cHIsICZncywgeWVzLAorCQkJICAgICAgICIgIFNlbGVjdGVkIGJ5IFt5XTpcbiIp
OworCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5yZXZfZGVwLmV4cHIsICZncywgbW9kLAor
CQkJICAgICAgICIgIFNlbGVjdGVkIGJ5IFttXTpcbiIpOworCisJZnB1dHMoc3RyX2dldCgmZ3Mp
LCBzdGRlcnIpOworfQorCit2b2lkIHN5bV9jYWxjX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkK
K3sKKwlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIG5ld3ZhbCwgb2xkdmFsOworCXN0cnVjdCBwcm9wZXJ0
eSAqcHJvcDsKKwlzdHJ1Y3QgZXhwciAqZTsKKworCWlmICghc3ltKQorCQlyZXR1cm47CisKKwlp
ZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9WQUxJRCkKKwkJcmV0dXJuOworCisJaWYgKHN5bV9pc19j
aG9pY2VfdmFsdWUoc3ltKSAmJgorCSAgICBzeW0tPmZsYWdzICYgU1lNQk9MX05FRURfU0VUX0NI
T0lDRV9WQUxVRVMpIHsKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX05FRURfU0VUX0NIT0lDRV9W
QUxVRVM7CisJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7CisJCXN5bV9jYWxjX3Zh
bHVlKHByb3BfZ2V0X3N5bWJvbChwcm9wKSk7CisJfQorCisJc3ltLT5mbGFncyB8PSBTWU1CT0xf
VkFMSUQ7CisKKwlvbGR2YWwgPSBzeW0tPmN1cnI7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgewor
CWNhc2UgU19JTlQ6CisJY2FzZSBTX0hFWDoKKwljYXNlIFNfU1RSSU5HOgorCQluZXd2YWwgPSBz
eW1ib2xfZW1wdHkuY3VycjsKKwkJYnJlYWs7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RS
SVNUQVRFOgorCQluZXd2YWwgPSBzeW1ib2xfbm8uY3VycjsKKwkJYnJlYWs7CisJZGVmYXVsdDoK
KwkJc3ltLT5jdXJyLnZhbCA9IHN5bS0+bmFtZTsKKwkJc3ltLT5jdXJyLnRyaSA9IG5vOworCQly
ZXR1cm47CisJfQorCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsKKworCXN5bV9jYWxjX3Zp
c2liaWxpdHkoc3ltKTsKKworCWlmIChzeW0tPnZpc2libGUgIT0gbm8pCisJCXN5bS0+ZmxhZ3Mg
fD0gU1lNQk9MX1dSSVRFOworCisJLyogc2V0IGRlZmF1bHQgaWYgcmVjdXJzaXZlbHkgY2FsbGVk
ICovCisJc3ltLT5jdXJyID0gbmV3dmFsOworCisJc3dpdGNoIChzeW1fZ2V0X3R5cGUoc3ltKSkg
eworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklTVEFURToKKwkJaWYgKHN5bV9pc19jaG9p
Y2VfdmFsdWUoc3ltKSAmJiBzeW0tPnZpc2libGUgPT0geWVzKSB7CisJCQlwcm9wID0gc3ltX2dl
dF9jaG9pY2VfcHJvcChzeW0pOworCQkJbmV3dmFsLnRyaSA9IChwcm9wX2dldF9zeW1ib2wocHJv
cCktPmN1cnIudmFsID09IHN5bSkgPyB5ZXMgOiBubzsKKwkJfSBlbHNlIHsKKwkJCWlmIChzeW0t
PnZpc2libGUgIT0gbm8pIHsKKwkJCQkvKiBpZiB0aGUgc3ltYm9sIGlzIHZpc2libGUgdXNlIHRo
ZSB1c2VyIHZhbHVlCisJCQkJICogaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdHJ5IHRoZSBkZWZh
dWx0IHZhbHVlCisJCQkJICovCisJCQkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgeworCQkJCQlu
ZXd2YWwudHJpID0gRVhQUl9BTkQoc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpLAorCQkJCQkJCSAg
ICAgIHN5bS0+dmlzaWJsZSk7CisJCQkJCWdvdG8gY2FsY19uZXd2YWw7CisJCQkJfQorCQkJfQor
CQkJaWYgKHN5bS0+cmV2X2RlcC50cmkgIT0gbm8pCisJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xf
V1JJVEU7CisJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkgeworCQkJCXByb3AgPSBzeW1fZ2V0
X2RlZmF1bHRfcHJvcChzeW0pOworCQkJCWlmIChwcm9wKSB7CisJCQkJCW5ld3ZhbC50cmkgPSBF
WFBSX0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwciksCisJCQkJCQkJICAgICAgcHJvcC0+
dmlzaWJsZS50cmkpOworCQkJCQlpZiAobmV3dmFsLnRyaSAhPSBubykKKwkJCQkJCXN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX1dSSVRFOworCQkJCX0KKwkJCQlpZiAoc3ltLT5pbXBsaWVkLnRyaSAhPSBu
bykgeworCQkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsKKwkJCQkJbmV3dmFsLnRyaSA9
IEVYUFJfT1IobmV3dmFsLnRyaSwgc3ltLT5pbXBsaWVkLnRyaSk7CisJCQkJfQorCQkJfQorCQlj
YWxjX25ld3ZhbDoKKwkJCWlmIChzeW0tPmRpcl9kZXAudHJpIDwgc3ltLT5yZXZfZGVwLnRyaSkK
KwkJCQlzeW1fd2Fybl91bm1ldF9kZXAoc3ltKTsKKwkJCW5ld3ZhbC50cmkgPSBFWFBSX09SKG5l
d3ZhbC50cmksIHN5bS0+cmV2X2RlcC50cmkpOworCQl9CisJCWlmIChuZXd2YWwudHJpID09IG1v
ZCAmJgorCQkgICAgKHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTiB8fCBzeW0tPmltcGxp
ZWQudHJpID09IHllcykpCisJCQluZXd2YWwudHJpID0geWVzOworCQlicmVhazsKKwljYXNlIFNf
U1RSSU5HOgorCWNhc2UgU19IRVg6CisJY2FzZSBTX0lOVDoKKwkJaWYgKHN5bS0+dmlzaWJsZSAh
PSBubyAmJiBzeW1faGFzX3ZhbHVlKHN5bSkpIHsKKwkJCW5ld3ZhbC52YWwgPSBzeW0tPmRlZltT
X0RFRl9VU0VSXS52YWw7CisJCQlicmVhazsKKwkJfQorCQlwcm9wID0gc3ltX2dldF9kZWZhdWx0
X3Byb3Aoc3ltKTsKKwkJaWYgKHByb3ApIHsKKwkJCXN0cnVjdCBzeW1ib2wgKmRzID0gcHJvcF9n
ZXRfc3ltYm9sKHByb3ApOworCQkJaWYgKGRzKSB7CisJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xf
V1JJVEU7CisJCQkJc3ltX2NhbGNfdmFsdWUoZHMpOworCQkJCW5ld3ZhbC52YWwgPSBkcy0+Y3Vy
ci52YWw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJOworCX0KKworCXN5bS0+
Y3VyciA9IG5ld3ZhbDsKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIG5ld3ZhbC50cmkgPT0g
eWVzKQorCQlzeW0tPmN1cnIudmFsID0gc3ltX2NhbGNfY2hvaWNlKHN5bSk7CisJc3ltX3ZhbGlk
YXRlX3JhbmdlKHN5bSk7CisKKwlpZiAobWVtY21wKCZvbGR2YWwsICZzeW0tPmN1cnIsIHNpemVv
ZihvbGR2YWwpKSkgeworCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsKKwkJaWYgKG1vZHVsZXNfc3lt
ID09IHN5bSkgeworCQkJc3ltX3NldF9hbGxfY2hhbmdlZCgpOworCQkJbW9kdWxlc192YWwgPSBt
b2R1bGVzX3N5bS0+Y3Vyci50cmk7CisJCX0KKwl9CisKKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0p
KSB7CisJCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW07CisKKwkJcHJvcCA9IHN5bV9nZXRfY2hv
aWNlX3Byb3Aoc3ltKTsKKwkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBj
aG9pY2Vfc3ltKSB7CisJCQlpZiAoKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpICYmCisJCQkg
ICAgY2hvaWNlX3N5bS0+dmlzaWJsZSAhPSBubykKKwkJCQljaG9pY2Vfc3ltLT5mbGFncyB8PSBT
WU1CT0xfV1JJVEU7CisJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEFOR0VEKQorCQkJCXN5
bV9zZXRfY2hhbmdlZChjaG9pY2Vfc3ltKTsKKwkJfQorCX0KKworCWlmIChzeW0tPmZsYWdzICYg
U1lNQk9MX05PX1dSSVRFKQorCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7CisKKwlpZiAo
c3ltLT5mbGFncyAmIFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTKQorCQlzZXRfYWxsX2No
b2ljZV92YWx1ZXMoc3ltKTsKK30KKwordm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQpCit7
CisJc3RydWN0IHN5bWJvbCAqc3ltOworCWludCBpOworCisJZm9yX2FsbF9zeW1ib2xzKGksIHN5
bSkKKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1ZBTElEOworCXN5bV9hZGRfY2hhbmdlX2NvdW50
KDEpOworCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsKK30KKworYm9vbCBzeW1fdHJpc3Rh
dGVfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSwgdHJpc3RhdGUgdmFsKQoreworCWlu
dCB0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7CisKKwlpZiAoc3ltLT52aXNpYmxlID09IG5vKQor
CQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodHlwZSAhPSBTX0JPT0xFQU4gJiYgdHlwZSAhPSBTX1RS
SVNUQVRFKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAodHlwZSA9PSBTX0JPT0xFQU4gJiYgdmFs
ID09IG1vZCkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzeW0tPnZpc2libGUgPD0gc3ltLT5yZXZf
ZGVwLnRyaSkKKwkJcmV0dXJuIGZhbHNlOworCWlmIChzeW0tPmltcGxpZWQudHJpID09IHllcyAm
JiB2YWwgPT0gbW9kKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUo
c3ltKSAmJiBzeW0tPnZpc2libGUgPT0geWVzKQorCQlyZXR1cm4gdmFsID09IHllczsKKwlyZXR1
cm4gdmFsID49IHN5bS0+cmV2X2RlcC50cmkgJiYgdmFsIDw9IHN5bS0+dmlzaWJsZTsKK30KKwor
Ym9vbCBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgdHJpc3RhdGUg
dmFsKQoreworCXRyaXN0YXRlIG9sZHZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsK
KworCWlmIChvbGR2YWwgIT0gdmFsICYmICFzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwg
dmFsKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZf
VVNFUikpIHsKKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7CisJCXN5bV9zZXRfY2hh
bmdlZChzeW0pOworCX0KKwkvKgorCSAqIHNldHRpbmcgYSBjaG9pY2UgdmFsdWUgYWxzbyByZXNl
dHMgdGhlIG5ldyBmbGFnIG9mIHRoZSBjaG9pY2UKKwkgKiBzeW1ib2wgYW5kIGFsbCBvdGhlciBj
aG9pY2UgdmFsdWVzLgorCSAqLworCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFs
ID09IHllcykgeworCQlzdHJ1Y3Qgc3ltYm9sICpjcyA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0
X2Nob2ljZV9wcm9wKHN5bSkpOworCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJCXN0cnVjdCBl
eHByICplOworCisJCWNzLT5kZWZbU19ERUZfVVNFUl0udmFsID0gc3ltOworCQljcy0+ZmxhZ3Mg
fD0gU1lNQk9MX0RFRl9VU0VSOworCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjcyk7CisJ
CWZvciAoZSA9IHByb3AtPmV4cHI7IGU7IGUgPSBlLT5sZWZ0LmV4cHIpIHsKKwkJCWlmIChlLT5y
aWdodC5zeW0tPnZpc2libGUgIT0gbm8pCisJCQkJZS0+cmlnaHQuc3ltLT5mbGFncyB8PSBTWU1C
T0xfREVGX1VTRVI7CisJCX0KKwl9CisKKwlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB2YWw7
CisJaWYgKG9sZHZhbCAhPSB2YWwpCisJCXN5bV9jbGVhcl9hbGxfdmFsaWQoKTsKKworCXJldHVy
biB0cnVlOworfQorCit0cmlzdGF0ZSBzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBz
eW1ib2wgKnN5bSkKK3sKKwl0cmlzdGF0ZSBvbGR2YWwsIG5ld3ZhbDsKKworCW9sZHZhbCA9IG5l
d3ZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsKKwlkbyB7CisJCXN3aXRjaCAobmV3
dmFsKSB7CisJCWNhc2Ugbm86CisJCQluZXd2YWwgPSBtb2Q7CisJCQlicmVhazsKKwkJY2FzZSBt
b2Q6CisJCQluZXd2YWwgPSB5ZXM7CisJCQlicmVhazsKKwkJY2FzZSB5ZXM6CisJCQluZXd2YWwg
PSBubzsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwg
bmV3dmFsKSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKG9sZHZhbCAhPSBuZXd2YWwpOworCXJldHVy
biBuZXd2YWw7Cit9CisKK2Jvb2wgc3ltX3N0cmluZ192YWxpZChzdHJ1Y3Qgc3ltYm9sICpzeW0s
IGNvbnN0IGNoYXIgKnN0cikKK3sKKwlzaWduZWQgY2hhciBjaDsKKworCXN3aXRjaCAoc3ltLT50
eXBlKSB7CisJY2FzZSBTX1NUUklORzoKKwkJcmV0dXJuIHRydWU7CisJY2FzZSBTX0lOVDoKKwkJ
Y2ggPSAqc3RyKys7CisJCWlmIChjaCA9PSAnLScpCisJCQljaCA9ICpzdHIrKzsKKwkJaWYgKCFp
c2RpZ2l0KGNoKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJaWYgKGNoID09ICcwJyAmJiAqc3RyICE9
IDApCisJCQlyZXR1cm4gZmFsc2U7CisJCXdoaWxlICgoY2ggPSAqc3RyKyspKSB7CisJCQlpZiAo
IWlzZGlnaXQoY2gpKQorCQkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gdHJ1ZTsKKwlj
YXNlIFNfSEVYOgorCQlpZiAoc3RyWzBdID09ICcwJyAmJiAoc3RyWzFdID09ICd4JyB8fCBzdHJb
MV0gPT0gJ1gnKSkKKwkJCXN0ciArPSAyOworCQljaCA9ICpzdHIrKzsKKwkJZG8geworCQkJaWYg
KCFpc3hkaWdpdChjaCkpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9IHdoaWxlICgoY2ggPSAqc3Ry
KyspKTsKKwkJcmV0dXJuIHRydWU7CisJY2FzZSBTX0JPT0xFQU46CisJY2FzZSBTX1RSSVNUQVRF
OgorCQlzd2l0Y2ggKHN0clswXSkgeworCQljYXNlICd5JzogY2FzZSAnWSc6CisJCWNhc2UgJ20n
OiBjYXNlICdNJzoKKwkJY2FzZSAnbic6IGNhc2UgJ04nOgorCQkJcmV0dXJuIHRydWU7CisJCX0K
KwkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKK2Jv
b2wgc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFy
ICpzdHIpCit7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCWxvbmcgbG9uZyB2YWw7CisKKwlz
d2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19TVFJJTkc6CisJCXJldHVybiBzeW1fc3RyaW5n
X3ZhbGlkKHN5bSwgc3RyKTsKKwljYXNlIFNfSU5UOgorCQlpZiAoIXN5bV9zdHJpbmdfdmFsaWQo
c3ltLCBzdHIpKQorCQkJcmV0dXJuIGZhbHNlOworCQlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9w
KHN5bSk7CisJCWlmICghcHJvcCkKKwkJCXJldHVybiB0cnVlOworCQl2YWwgPSBzdHJ0b2xsKHN0
ciwgTlVMTCwgMTApOworCQlyZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4
cHItPmxlZnQuc3ltLCAxMCkgJiYKKwkJICAgICAgIHZhbCA8PSBzeW1fZ2V0X3JhbmdlX3ZhbChw
cm9wLT5leHByLT5yaWdodC5zeW0sIDEwKTsKKwljYXNlIFNfSEVYOgorCQlpZiAoIXN5bV9zdHJp
bmdfdmFsaWQoc3ltLCBzdHIpKQorCQkJcmV0dXJuIGZhbHNlOworCQlwcm9wID0gc3ltX2dldF9y
YW5nZV9wcm9wKHN5bSk7CisJCWlmICghcHJvcCkKKwkJCXJldHVybiB0cnVlOworCQl2YWwgPSBz
dHJ0b2xsKHN0ciwgTlVMTCwgMTYpOworCQlyZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFs
KHByb3AtPmV4cHItPmxlZnQuc3ltLCAxNikgJiYKKwkJICAgICAgIHZhbCA8PSBzeW1fZ2V0X3Jh
bmdlX3ZhbChwcm9wLT5leHByLT5yaWdodC5zeW0sIDE2KTsKKwljYXNlIFNfQk9PTEVBTjoKKwlj
YXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAoc3RyWzBdKSB7CisJCWNhc2UgJ3knOiBjYXNlICdZ
JzoKKwkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKTsKKwkJY2Fz
ZSAnbSc6IGNhc2UgJ00nOgorCQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3lt
LCBtb2QpOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gc3ltX3RyaXN0YXRlX3dp
dGhpbl9yYW5nZShzeW0sIG5vKTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJ
cmV0dXJuIGZhbHNlOworCX0KK30KKworYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qg
c3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCkKK3sKKwljb25zdCBjaGFyICpvbGR2YWw7
CisJY2hhciAqdmFsOworCWludCBzaXplOworCisJc3dpdGNoIChzeW0tPnR5cGUpIHsKKwljYXNl
IFNfQk9PTEVBTjoKKwljYXNlIFNfVFJJU1RBVEU6CisJCXN3aXRjaCAobmV3dmFsWzBdKSB7CisJ
CWNhc2UgJ3knOiBjYXNlICdZJzoKKwkJCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSwgeWVzKTsKKwkJY2FzZSAnbSc6IGNhc2UgJ00nOgorCQkJcmV0dXJuIHN5bV9zZXRfdHJpc3Rh
dGVfdmFsdWUoc3ltLCBtb2QpOworCQljYXNlICduJzogY2FzZSAnTic6CisJCQlyZXR1cm4gc3lt
X3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsKKwkJfQorCQlyZXR1cm4gZmFsc2U7CisJZGVm
YXVsdDoKKwkJOworCX0KKworCWlmICghc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3ltLCBuZXd2
YWwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9V
U0VSKSkgeworCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsKKwkJc3ltX3NldF9jaGFu
Z2VkKHN5bSk7CisJfQorCisJb2xkdmFsID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOworCXNp
emUgPSBzdHJsZW4obmV3dmFsKSArIDE7CisJaWYgKHN5bS0+dHlwZSA9PSBTX0hFWCAmJiAobmV3
dmFsWzBdICE9ICcwJyB8fCAobmV3dmFsWzFdICE9ICd4JyAmJiBuZXd2YWxbMV0gIT0gJ1gnKSkp
IHsKKwkJc2l6ZSArPSAyOworCQlzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSB2YWwgPSB4bWFs
bG9jKHNpemUpOworCQkqdmFsKysgPSAnMCc7CisJCSp2YWwrKyA9ICd4JzsKKwl9IGVsc2UgaWYg
KCFvbGR2YWwgfHwgc3RyY21wKG9sZHZhbCwgbmV3dmFsKSkKKwkJc3ltLT5kZWZbU19ERUZfVVNF
Ul0udmFsID0gdmFsID0geG1hbGxvYyhzaXplKTsKKwllbHNlCisJCXJldHVybiB0cnVlOworCisJ
c3RyY3B5KHZhbCwgbmV3dmFsKTsKKwlmcmVlKCh2b2lkICopb2xkdmFsKTsKKwlzeW1fY2xlYXJf
YWxsX3ZhbGlkKCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEZpbmQgdGhlIGRlZmF1
bHQgdmFsdWUgYXNzb2NpYXRlZCB0byBhIHN5bWJvbC4KKyAqIEZvciB0cmlzdGF0ZSBzeW1ib2wg
aGFuZGxlIHRoZSBtb2R1bGVzPW4gY2FzZQorICogaW4gd2hpY2ggY2FzZSAibSIgYmVjb21lcyAi
eSIuCisgKiBJZiB0aGUgc3ltYm9sIGRvZXMgbm90IGhhdmUgYW55IGRlZmF1bHQgdGhlbiBmYWxs
YmFjaworICogdG8gdGhlIGZpeGVkIGRlZmF1bHQgdmFsdWVzLgorICovCitjb25zdCBjaGFyICpz
eW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJv
cGVydHkgKnByb3A7CisJc3RydWN0IHN5bWJvbCAqZHM7CisJY29uc3QgY2hhciAqc3RyOworCXRy
aXN0YXRlIHZhbDsKKworCXN5bV9jYWxjX3Zpc2liaWxpdHkoc3ltKTsKKwlzeW1fY2FsY192YWx1
ZShtb2R1bGVzX3N5bSk7CisJdmFsID0gc3ltYm9sX25vLmN1cnIudHJpOworCXN0ciA9IHN5bWJv
bF9lbXB0eS5jdXJyLnZhbDsKKworCS8qIElmIHN5bWJvbCBoYXMgYSBkZWZhdWx0IHZhbHVlIGxv
b2sgaXQgdXAgKi8KKwlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsKKwlpZiAocHJv
cCAhPSBOVUxMKSB7CisJCXN3aXRjaCAoc3ltLT50eXBlKSB7CisJCWNhc2UgU19CT09MRUFOOgor
CQljYXNlIFNfVFJJU1RBVEU6CisJCQkvKiBUaGUgdmlzaWJpbGl0eSBtYXkgbGltaXQgdGhlIHZh
bHVlIGZyb20geWVzID0+IG1vZCAqLworCQkJdmFsID0gRVhQUl9BTkQoZXhwcl9jYWxjX3ZhbHVl
KHByb3AtPmV4cHIpLCBwcm9wLT52aXNpYmxlLnRyaSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoK
KwkJCS8qCisJCQkgKiBUaGUgZm9sbG93aW5nIGZhaWxzIHRvIGhhbmRsZSB0aGUgc2l0dWF0aW9u
CisJCQkgKiB3aGVyZSBhIGRlZmF1bHQgdmFsdWUgaXMgZnVydGhlciBsaW1pdGVkIGJ5CisJCQkg
KiB0aGUgdmFsaWQgcmFuZ2UuCisJCQkgKi8KKwkJCWRzID0gcHJvcF9nZXRfc3ltYm9sKHByb3Ap
OworCQkJaWYgKGRzICE9IE5VTEwpIHsKKwkJCQlzeW1fY2FsY192YWx1ZShkcyk7CisJCQkJc3Ry
ID0gKGNvbnN0IGNoYXIgKilkcy0+Y3Vyci52YWw7CisJCQl9CisJCX0KKwl9CisKKwkvKiBIYW5k
bGUgc2VsZWN0IHN0YXRlbWVudHMgKi8KKwl2YWwgPSBFWFBSX09SKHZhbCwgc3ltLT5yZXZfZGVw
LnRyaSk7CisKKwkvKiB0cmFuc3Bvc2UgbW9kIHRvIHllcyBpZiBtb2R1bGVzIGFyZSBub3QgZW5h
YmxlZCAqLworCWlmICh2YWwgPT0gbW9kKQorCQlpZiAoIXN5bV9pc19jaG9pY2VfdmFsdWUoc3lt
KSAmJiBtb2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pCisJCQl2YWwgPSB5ZXM7CisKKwkvKiB0
cmFuc3Bvc2UgbW9kIHRvIHllcyBpZiB0eXBlIGlzIGJvb2wgKi8KKwlpZiAoc3ltLT50eXBlID09
IFNfQk9PTEVBTiAmJiB2YWwgPT0gbW9kKQorCQl2YWwgPSB5ZXM7CisKKwkvKiBhZGp1c3QgdGhl
IGRlZmF1bHQgdmFsdWUgaWYgdGhpcyBzeW1ib2wgaXMgaW1wbGllZCBieSBhbm90aGVyICovCisJ
aWYgKHZhbCA8IHN5bS0+aW1wbGllZC50cmkpCisJCXZhbCA9IHN5bS0+aW1wbGllZC50cmk7CisK
Kwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCWNhc2UgU19UUklTVEFU
RToKKwkJc3dpdGNoICh2YWwpIHsKKwkJY2FzZSBubzogcmV0dXJuICJuIjsKKwkJY2FzZSBtb2Q6
IHJldHVybiAibSI7CisJCWNhc2UgeWVzOiByZXR1cm4gInkiOworCQl9CisJY2FzZSBTX0lOVDoK
KwljYXNlIFNfSEVYOgorCQlyZXR1cm4gc3RyOworCWNhc2UgU19TVFJJTkc6CisJCXJldHVybiBz
dHI7CisJY2FzZSBTX1VOS05PV046CisJCWJyZWFrOworCX0KKwlyZXR1cm4gIiI7Cit9CisKK2Nv
bnN0IGNoYXIgKnN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwl0
cmlzdGF0ZSB2YWw7CisKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgor
CWNhc2UgU19UUklTVEFURToKKwkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOwor
CQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIG5vOgorCQkJcmV0dXJuICJuIjsKKwkJY2FzZSBtb2Q6
CisJCQlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7CisJCQlyZXR1cm4gKG1vZHVsZXNfc3lt
LT5jdXJyLnRyaSA9PSBubykgPyAibiIgOiAibSI7CisJCWNhc2UgeWVzOgorCQkJcmV0dXJuICJ5
IjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQk7CisJfQorCXJldHVybiAoY29uc3QgY2hh
ciAqKXN5bS0+Y3Vyci52YWw7Cit9CisKK2Jvb2wgc3ltX2lzX2NoYW5nYWJsZShzdHJ1Y3Qgc3lt
Ym9sICpzeW0pCit7CisJcmV0dXJuIHN5bS0+dmlzaWJsZSA+IHN5bS0+cmV2X2RlcC50cmk7Cit9
CisKK3N0YXRpYyB1bnNpZ25lZCBzdHJoYXNoKGNvbnN0IGNoYXIgKnMpCit7CisJLyogZm52MzIg
aGFzaCAqLworCXVuc2lnbmVkIGhhc2ggPSAyMTY2MTM2MjYxVTsKKwlmb3IgKDsgKnM7IHMrKykK
KwkJaGFzaCA9IChoYXNoIF4gKnMpICogMHgwMTAwMDE5MzsKKwlyZXR1cm4gaGFzaDsKK30KKwor
c3RydWN0IHN5bWJvbCAqc3ltX2xvb2t1cChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCit7
CisJc3RydWN0IHN5bWJvbCAqc3ltYm9sOworCWNoYXIgKm5ld19uYW1lOworCWludCBoYXNoOwor
CisJaWYgKG5hbWUpIHsKKwkJaWYgKG5hbWVbMF0gJiYgIW5hbWVbMV0pIHsKKwkJCXN3aXRjaCAo
bmFtZVswXSkgeworCQkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3llczsKKwkJCWNhc2UgJ20n
OiByZXR1cm4gJnN5bWJvbF9tb2Q7CisJCQljYXNlICduJzogcmV0dXJuICZzeW1ib2xfbm87CisJ
CQl9CisJCX0KKwkJaGFzaCA9IHN0cmhhc2gobmFtZSkgJSBTWU1CT0xfSEFTSFNJWkU7CisKKwkJ
Zm9yIChzeW1ib2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wt
Pm5leHQpIHsKKwkJCWlmIChzeW1ib2wtPm5hbWUgJiYKKwkJCSAgICAhc3RyY21wKHN5bWJvbC0+
bmFtZSwgbmFtZSkgJiYKKwkJCSAgICAoZmxhZ3MgPyBzeW1ib2wtPmZsYWdzICYgZmxhZ3MKKwkJ
CQkgICA6ICEoc3ltYm9sLT5mbGFncyAmIChTWU1CT0xfQ09OU1R8U1lNQk9MX0NIT0lDRSkpKSkK
KwkJCQlyZXR1cm4gc3ltYm9sOworCQl9CisJCW5ld19uYW1lID0geHN0cmR1cChuYW1lKTsKKwl9
IGVsc2UgeworCQluZXdfbmFtZSA9IE5VTEw7CisJCWhhc2ggPSAwOworCX0KKworCXN5bWJvbCA9
IHhtYWxsb2Moc2l6ZW9mKCpzeW1ib2wpKTsKKwltZW1zZXQoc3ltYm9sLCAwLCBzaXplb2YoKnN5
bWJvbCkpOworCXN5bWJvbC0+bmFtZSA9IG5ld19uYW1lOworCXN5bWJvbC0+dHlwZSA9IFNfVU5L
Tk9XTjsKKwlzeW1ib2wtPmZsYWdzIHw9IGZsYWdzOworCisJc3ltYm9sLT5uZXh0ID0gc3ltYm9s
X2hhc2hbaGFzaF07CisJc3ltYm9sX2hhc2hbaGFzaF0gPSBzeW1ib2w7CisKKwlyZXR1cm4gc3lt
Ym9sOworfQorCitzdHJ1Y3Qgc3ltYm9sICpzeW1fZmluZChjb25zdCBjaGFyICpuYW1lKQorewor
CXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IE5VTEw7CisJaW50IGhhc2ggPSAwOworCisJaWYgKCFu
YW1lKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChuYW1lWzBdICYmICFuYW1lWzFdKSB7CisJCXN3
aXRjaCAobmFtZVswXSkgeworCQljYXNlICd5JzogcmV0dXJuICZzeW1ib2xfeWVzOworCQljYXNl
ICdtJzogcmV0dXJuICZzeW1ib2xfbW9kOworCQljYXNlICduJzogcmV0dXJuICZzeW1ib2xfbm87
CisJCX0KKwl9CisJaGFzaCA9IHN0cmhhc2gobmFtZSkgJSBTWU1CT0xfSEFTSFNJWkU7CisKKwlm
b3IgKHN5bWJvbCA9IHN5bWJvbF9oYXNoW2hhc2hdOyBzeW1ib2w7IHN5bWJvbCA9IHN5bWJvbC0+
bmV4dCkgeworCQlpZiAoc3ltYm9sLT5uYW1lICYmCisJCSAgICAhc3RyY21wKHN5bWJvbC0+bmFt
ZSwgbmFtZSkgJiYKKwkJICAgICEoc3ltYm9sLT5mbGFncyAmIFNZTUJPTF9DT05TVCkpCisJCQkJ
YnJlYWs7CisJfQorCisJcmV0dXJuIHN5bWJvbDsKK30KKworY29uc3QgY2hhciAqc3ltX2VzY2Fw
ZV9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciAqaW4pCit7CisJY29uc3QgY2hhciAqcDsKKwlzaXpl
X3QgcmVzbGVuOworCWNoYXIgKnJlczsKKwlzaXplX3QgbDsKKworCXJlc2xlbiA9IHN0cmxlbihp
bikgKyBzdHJsZW4oIlwiXCIiKSArIDE7CisKKwlwID0gaW47CisJZm9yICg7OykgeworCQlsID0g
c3RyY3NwbihwLCAiXCJcXCIpOworCQlwICs9IGw7CisKKwkJaWYgKHBbMF0gPT0gJ1wwJykKKwkJ
CWJyZWFrOworCisJCXJlc2xlbisrOworCQlwKys7CisJfQorCisJcmVzID0geG1hbGxvYyhyZXNs
ZW4pOworCXJlc1swXSA9ICdcMCc7CisKKwlzdHJjYXQocmVzLCAiXCIiKTsKKworCXAgPSBpbjsK
Kwlmb3IgKDs7KSB7CisJCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7CisJCXN0cm5jYXQocmVzLCBw
LCBsKTsKKwkJcCArPSBsOworCisJCWlmIChwWzBdID09ICdcMCcpCisJCQlicmVhazsKKworCQlz
dHJjYXQocmVzLCAiXFwiKTsKKwkJc3RybmNhdChyZXMsIHArKywgMSk7CisJfQorCisJc3RyY2F0
KHJlcywgIlwiIik7CisJcmV0dXJuIHJlczsKK30KKworc3RydWN0IHN5bV9tYXRjaCB7CisJc3Ry
dWN0IHN5bWJvbAkqc3ltOworCW9mZl90CQlzbywgZW87Cit9OworCisvKiBDb21wYXJlIG1hdGNo
ZWQgc3ltYm9scyBhcyB0aHVzOgorICogLSBmaXJzdCwgc3ltYm9scyB0aGF0IG1hdGNoIGV4YWN0
bHkKKyAqIC0gdGhlbiwgYWxwaGFiZXRpY2FsIHNvcnQKKyAqLworc3RhdGljIGludCBzeW1fcmVs
X2NvbXAoY29uc3Qgdm9pZCAqc3ltMSwgY29uc3Qgdm9pZCAqc3ltMikKK3sKKwljb25zdCBzdHJ1
Y3Qgc3ltX21hdGNoICpzMSA9IHN5bTE7CisJY29uc3Qgc3RydWN0IHN5bV9tYXRjaCAqczIgPSBz
eW0yOworCWludCBleGFjdDEsIGV4YWN0MjsKKworCS8qIEV4YWN0IG1hdGNoOgorCSAqIC0gaWYg
bWF0Y2hlZCBsZW5ndGggb24gc3ltYm9sIHMxIGlzIHRoZSBsZW5ndGggb2YgdGhhdCBzeW1ib2ws
CisJICogICB0aGVuIHRoaXMgc3ltYm9sIHNob3VsZCBjb21lIGZpcnN0OworCSAqIC0gaWYgbWF0
Y2hlZCBsZW5ndGggb24gc3ltYm9sIHMyIGlzIHRoZSBsZW5ndGggb2YgdGhhdCBzeW1ib2wsCisJ
ICogICB0aGVuIHRoaXMgc3ltYm9sIHNob3VsZCBjb21lIGZpcnN0LgorCSAqIE5vdGU6IHNpbmNl
IHRoZSBzZWFyY2ggY2FuIGJlIGEgcmVnZXhwLCBib3RoIHN5bWJvbHMgbWF5IG1hdGNoCisJICog
ZXhhY3RseTsgaWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgY2FuJ3QgZGVjaWRlIHdoaWNoIGNvbWVz
IGZpcnN0LAorCSAqIGFuZCB3ZSBmYWxsYmFjayB0byBzb3J0aW5nIGFscGhhYmV0aWNhbGx5Lgor
CSAqLworCWV4YWN0MSA9IChzMS0+ZW8gLSBzMS0+c28pID09IHN0cmxlbihzMS0+c3ltLT5uYW1l
KTsKKwlleGFjdDIgPSAoczItPmVvIC0gczItPnNvKSA9PSBzdHJsZW4oczItPnN5bS0+bmFtZSk7
CisJaWYgKGV4YWN0MSAmJiAhZXhhY3QyKQorCQlyZXR1cm4gLTE7CisJaWYgKCFleGFjdDEgJiYg
ZXhhY3QyKQorCQlyZXR1cm4gMTsKKworCS8qIEFzIGEgZmFsbGJhY2ssIHNvcnQgc3ltYm9scyBh
bHBoYWJldGljYWxseSAqLworCXJldHVybiBzdHJjbXAoczEtPnN5bS0+bmFtZSwgczItPnN5bS0+
bmFtZSk7Cit9CisKK3N0cnVjdCBzeW1ib2wgKipzeW1fcmVfc2VhcmNoKGNvbnN0IGNoYXIgKnBh
dHRlcm4pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltLCAqKnN5bV9hcnIgPSBOVUxMOworCXN0cnVj
dCBzeW1fbWF0Y2ggKnN5bV9tYXRjaF9hcnIgPSBOVUxMOworCWludCBpLCBjbnQsIHNpemU7CisJ
cmVnZXhfdCByZTsKKwlyZWdtYXRjaF90IG1hdGNoWzFdOworCisJY250ID0gc2l6ZSA9IDA7CisJ
LyogU2tpcCBpZiBlbXB0eSAqLworCWlmIChzdHJsZW4ocGF0dGVybikgPT0gMCkKKwkJcmV0dXJu
IE5VTEw7CisJaWYgKHJlZ2NvbXAoJnJlLCBwYXR0ZXJuLCBSRUdfRVhURU5ERUR8UkVHX0lDQVNF
KSkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7CisJCWlmIChz
eW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUIHx8ICFzeW0tPm5hbWUpCisJCQljb250aW51ZTsKKwkJ
aWYgKHJlZ2V4ZWMoJnJlLCBzeW0tPm5hbWUsIDEsIG1hdGNoLCAwKSkKKwkJCWNvbnRpbnVlOwor
CQlpZiAoY250ID49IHNpemUpIHsKKwkJCXZvaWQgKnRtcDsKKwkJCXNpemUgKz0gMTY7CisJCQl0
bXAgPSByZWFsbG9jKHN5bV9tYXRjaF9hcnIsIHNpemUgKiBzaXplb2Yoc3RydWN0IHN5bV9tYXRj
aCkpOworCQkJaWYgKCF0bXApCisJCQkJZ290byBzeW1fcmVfc2VhcmNoX2ZyZWU7CisJCQlzeW1f
bWF0Y2hfYXJyID0gdG1wOworCQl9CisJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7CisJCS8qIEFzIHJl
Z2V4ZWMgcmV0dXJuZWQgMCwgd2Uga25vdyB3ZSBoYXZlIGEgbWF0Y2gsIHNvCisJCSAqIHdlIGNh
biB1c2UgbWF0Y2hbMF0ucm1fW3NlXW8gd2l0aG91dCBmdXJ0aGVyIGNoZWNrcworCQkgKi8KKwkJ
c3ltX21hdGNoX2FycltjbnRdLnNvID0gbWF0Y2hbMF0ucm1fc287CisJCXN5bV9tYXRjaF9hcnJb
Y250XS5lbyA9IG1hdGNoWzBdLnJtX2VvOworCQlzeW1fbWF0Y2hfYXJyW2NudCsrXS5zeW0gPSBz
eW07CisJfQorCWlmIChzeW1fbWF0Y2hfYXJyKSB7CisJCXFzb3J0KHN5bV9tYXRjaF9hcnIsIGNu
dCwgc2l6ZW9mKHN0cnVjdCBzeW1fbWF0Y2gpLCBzeW1fcmVsX2NvbXApOworCQlzeW1fYXJyID0g
bWFsbG9jKChjbnQrMSkgKiBzaXplb2Yoc3RydWN0IHN5bWJvbCAqKSk7CisJCWlmICghc3ltX2Fy
cikKKwkJCWdvdG8gc3ltX3JlX3NlYXJjaF9mcmVlOworCQlmb3IgKGkgPSAwOyBpIDwgY250OyBp
KyspCisJCQlzeW1fYXJyW2ldID0gc3ltX21hdGNoX2FycltpXS5zeW07CisJCXN5bV9hcnJbY250
XSA9IE5VTEw7CisJfQorc3ltX3JlX3NlYXJjaF9mcmVlOgorCS8qIHN5bV9tYXRjaF9hcnIgY2Fu
IGJlIE5VTEwgaWYgbm8gbWF0Y2gsIGJ1dCBmcmVlKE5VTEwpIGlzIE9LICovCisJZnJlZShzeW1f
bWF0Y2hfYXJyKTsKKwlyZWdmcmVlKCZyZSk7CisKKwlyZXR1cm4gc3ltX2FycjsKK30KKworLyoK
KyAqIFdoZW4gd2UgY2hlY2sgZm9yIHJlY3Vyc2l2ZSBkZXBlbmRlbmNpZXMgd2UgdXNlIGEgc3Rh
Y2sgdG8gc2F2ZQorICogY3VycmVudCBzdGF0ZSBzbyB3ZSBjYW4gcHJpbnQgb3V0IHJlbGV2YW50
IGluZm8gdG8gdXNlci4KKyAqIFRoZSBlbnRyaWVzIGFyZSBsb2NhdGVkIG9uIHRoZSBjYWxsIHN0
YWNrIHNvIG5vIG5lZWQgdG8gZnJlZSBtZW1vcnkuCisgKiBOb3RlIGluc2VydCgpIHJlbW92ZSgp
IG11c3QgYWx3YXlzIG1hdGNoIHRvIHByb3Blcmx5IGNsZWFyIHRoZSBzdGFjay4KKyAqLworc3Rh
dGljIHN0cnVjdCBkZXBfc3RhY2sgeworCXN0cnVjdCBkZXBfc3RhY2sgKnByZXYsICpuZXh0Owor
CXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CisJc3RydWN0IGV4
cHIgKipleHByOworfSAqY2hlY2tfdG9wOworCitzdGF0aWMgdm9pZCBkZXBfc3RhY2tfaW5zZXJ0
KHN0cnVjdCBkZXBfc3RhY2sgKnN0YWNrLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCit7CisJbWVtc2V0
KHN0YWNrLCAwLCBzaXplb2YoKnN0YWNrKSk7CisJaWYgKGNoZWNrX3RvcCkKKwkJY2hlY2tfdG9w
LT5uZXh0ID0gc3RhY2s7CisJc3RhY2stPnByZXYgPSBjaGVja190b3A7CisJc3RhY2stPnN5bSA9
IHN5bTsKKwljaGVja190b3AgPSBzdGFjazsKK30KKworc3RhdGljIHZvaWQgZGVwX3N0YWNrX3Jl
bW92ZSh2b2lkKQoreworCWNoZWNrX3RvcCA9IGNoZWNrX3RvcC0+cHJldjsKKwlpZiAoY2hlY2tf
dG9wKQorCQljaGVja190b3AtPm5leHQgPSBOVUxMOworfQorCisvKgorICogQ2FsbGVkIHdoZW4g
d2UgaGF2ZSBkZXRlY3RlZCBhIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5LgorICogY2hlY2tfdG9wIHBv
aW50IHRvIHRoZSB0b3Agb2YgdGhlIHN0YWN0IHNvIHdlIHVzZQorICogdGhlIC0+cHJldiBwb2lu
dGVyIHRvIGxvY2F0ZSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4KKyAqLworc3RhdGljIHZvaWQg
c3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2ZShzdHJ1Y3Qgc3ltYm9sICpsYXN0X3N5bSkKK3sKKwlz
dHJ1Y3QgZGVwX3N0YWNrICpzdGFjazsKKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpuZXh0X3N5bTsK
KwlzdHJ1Y3QgbWVudSAqbWVudSA9IE5VTEw7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0
cnVjdCBkZXBfc3RhY2sgY3Zfc3RhY2s7CisKKwlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShsYXN0
X3N5bSkpIHsKKwkJZGVwX3N0YWNrX2luc2VydCgmY3Zfc3RhY2ssIGxhc3Rfc3ltKTsKKwkJbGFz
dF9zeW0gPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChsYXN0X3N5bSkpOwor
CX0KKworCWZvciAoc3RhY2sgPSBjaGVja190b3A7IHN0YWNrICE9IE5VTEw7IHN0YWNrID0gc3Rh
Y2stPnByZXYpCisJCWlmIChzdGFjay0+c3ltID09IGxhc3Rfc3ltKQorCQkJYnJlYWs7CisJaWYg
KCFzdGFjaykgeworCQlmcHJpbnRmKHN0ZGVyciwgInVuZXhwZWN0ZWQgcmVjdXJzaXZlIGRlcGVu
ZGVuY3kgZXJyb3JcbiIpOworCQlyZXR1cm47CisJfQorCisJZm9yICg7IHN0YWNrOyBzdGFjayA9
IHN0YWNrLT5uZXh0KSB7CisJCXN5bSA9IHN0YWNrLT5zeW07CisJCW5leHRfc3ltID0gc3RhY2st
Pm5leHQgPyBzdGFjay0+bmV4dC0+c3ltIDogbGFzdF9zeW07CisJCXByb3AgPSBzdGFjay0+cHJv
cDsKKwkJaWYgKHByb3AgPT0gTlVMTCkKKwkJCXByb3AgPSBzdGFjay0+c3ltLT5wcm9wOworCisJ
CS8qIGZvciBjaG9pY2UgdmFsdWVzIGZpbmQgdGhlIG1lbnUgZW50cnkgKHVzZWQgYmVsb3cpICov
CisJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkgfHwgc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7
CisJCQlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7CisJ
CQkJbWVudSA9IHByb3AtPm1lbnU7CisJCQkJaWYgKHByb3AtPm1lbnUpCisJCQkJCWJyZWFrOwor
CQkJfQorCQl9CisJCWlmIChzdGFjay0+c3ltID09IGxhc3Rfc3ltKQorCQkJZnByaW50ZihzdGRl
cnIsICIlczolZDplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhXG4iLAorCQkJ
CXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7CisKKwkJaWYgKHN5bV9pc19jaG9pY2Uo
c3ltKSkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdGNob2ljZSAlcyBjb250YWlucyBz
eW1ib2wgJXNcbiIsCisJCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5vLAorCQkJCXN5
bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBu
ZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2Vf
dmFsdWUoc3ltKSkgeworCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBw
YXJ0IG9mIGNob2ljZSAlc1xuIiwKKwkJCQltZW51LT5maWxlLT5uYW1lLCBtZW51LT5saW5lbm8s
CisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwKKwkJCQluZXh0X3N5bS0+
bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0gZWxzZSBpZiAoc3RhY2st
PmV4cHIgPT0gJnN5bS0+ZGlyX2RlcC5leHByKSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVk
Olx0c3ltYm9sICVzIGRlcGVuZHMgb24gJXNcbiIsCisJCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJv
cC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJ
bmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2Ug
aWYgKHN0YWNrLT5leHByID09ICZzeW0tPnJldl9kZXAuZXhwcikgeworCQkJZnByaW50ZihzdGRl
cnIsICIlczolZDpcdHN5bWJvbCAlcyBpcyBzZWxlY3RlZCBieSAlc1xuIiwKKwkJCQlwcm9wLT5m
aWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sCisJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxj
aG9pY2U+IiwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+
Iik7CisJCX0gZWxzZSBpZiAoc3RhY2stPmV4cHIgPT0gJnN5bS0+aW1wbGllZC5leHByKSB7CisJ
CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGlzIGltcGxpZWQgYnkgJXNcbiIs
CisJCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLAorCQkJCXN5bS0+bmFtZSA/IHN5
bS0+bmFtZSA6ICI8Y2hvaWNlPiIsCisJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFt
ZSA6ICI8Y2hvaWNlPiIpOworCQl9IGVsc2UgaWYgKHN0YWNrLT5leHByKSB7CisJCQlmcHJpbnRm
KHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzICVzIHZhbHVlIGNvbnRhaW5zICVzXG4iLAorCQkJ
CXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywKKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5h
bWUgOiAiPGNob2ljZT4iLAorCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKSwKKwkJ
CQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7CisJCX0gZWxz
ZSB7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzICVzIGlzIHZpc2libGUg
ZGVwZW5kaW5nIG9uICVzXG4iLAorCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywK
KwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLAorCQkJCXByb3BfZ2V0X3R5
cGVfbmFtZShwcm9wLT50eXBlKSwKKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1l
IDogIjxjaG9pY2U+Iik7CisJCX0KKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwKKwkJIkZvciBhIHJl
c29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50
eHRcbiIKKwkJInN1YnNlY3Rpb24gXCJLY29uZmlnIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0
YXRpb25zXCJcbiIKKwkJIlxuIik7CisKKwlpZiAoY2hlY2tfdG9wID09ICZjdl9zdGFjaykKKwkJ
ZGVwX3N0YWNrX3JlbW92ZSgpOworfQorCitzdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNr
X2V4cHJfZGVwcyhzdHJ1Y3QgZXhwciAqZSkKK3sKKwlzdHJ1Y3Qgc3ltYm9sICpzeW07CisKKwlp
ZiAoIWUpCisJCXJldHVybiBOVUxMOworCXN3aXRjaCAoZS0+dHlwZSkgeworCWNhc2UgRV9PUjoK
KwljYXNlIEVfQU5EOgorCQlzeW0gPSBzeW1fY2hlY2tfZXhwcl9kZXBzKGUtPmxlZnQuZXhwcik7
CisJCWlmIChzeW0pCisJCQlyZXR1cm4gc3ltOworCQlyZXR1cm4gc3ltX2NoZWNrX2V4cHJfZGVw
cyhlLT5yaWdodC5leHByKTsKKwljYXNlIEVfTk9UOgorCQlyZXR1cm4gc3ltX2NoZWNrX2V4cHJf
ZGVwcyhlLT5sZWZ0LmV4cHIpOworCWNhc2UgRV9FUVVBTDoKKwljYXNlIEVfR0VROgorCWNhc2Ug
RV9HVEg6CisJY2FzZSBFX0xFUToKKwljYXNlIEVfTFRIOgorCWNhc2UgRV9VTkVRVUFMOgorCQlz
eW0gPSBzeW1fY2hlY2tfZGVwcyhlLT5sZWZ0LnN5bSk7CisJCWlmIChzeW0pCisJCQlyZXR1cm4g
c3ltOworCQlyZXR1cm4gc3ltX2NoZWNrX2RlcHMoZS0+cmlnaHQuc3ltKTsKKwljYXNlIEVfU1lN
Qk9MOgorCQlyZXR1cm4gc3ltX2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOworCWRlZmF1bHQ6CisJ
CWJyZWFrOworCX0KKwlmcHJpbnRmKHN0ZGVyciwgIk9vcHMhIEhvdyB0byBjaGVjayAlZD9cbiIs
IGUtPnR5cGUpOworCXJldHVybiBOVUxMOworfQorCisvKiByZXR1cm4gTlVMTCB3aGVuIGRlcGVu
ZGVuY2llcyBhcmUgT0sgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfc3ltX2Rl
cHMoc3RydWN0IHN5bWJvbCAqc3ltKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTI7CisJc3RydWN0
IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7CisKKwlkZXBfc3RhY2tf
aW5zZXJ0KCZzdGFjaywgc3ltKTsKKworCXN0YWNrLmV4cHIgPSAmc3ltLT5kaXJfZGVwLmV4cHI7
CisJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5kaXJfZGVwLmV4cHIpOworCWlmIChz
eW0yKQorCQlnb3RvIG91dDsKKworCXN0YWNrLmV4cHIgPSAmc3ltLT5yZXZfZGVwLmV4cHI7CisJ
c3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5yZXZfZGVwLmV4cHIpOworCWlmIChzeW0y
KQorCQlnb3RvIG91dDsKKworCXN0YWNrLmV4cHIgPSAmc3ltLT5pbXBsaWVkLmV4cHI7CisJc3lt
MiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5pbXBsaWVkLmV4cHIpOworCWlmIChzeW0yKQor
CQlnb3RvIG91dDsKKworCXN0YWNrLmV4cHIgPSBOVUxMOworCisJZm9yIChwcm9wID0gc3ltLT5w
cm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgeworCQlpZiAocHJvcC0+dHlwZSA9PSBQX0NI
T0lDRSB8fCBwcm9wLT50eXBlID09IFBfU0VMRUNUIHx8CisJCSAgICBwcm9wLT50eXBlID09IFBf
SU1QTFkpCisJCQljb250aW51ZTsKKwkJc3RhY2sucHJvcCA9IHByb3A7CisJCXN5bTIgPSBzeW1f
Y2hlY2tfZXhwcl9kZXBzKHByb3AtPnZpc2libGUuZXhwcik7CisJCWlmIChzeW0yKQorCQkJYnJl
YWs7CisJCWlmIChwcm9wLT50eXBlICE9IFBfREVGQVVMVCB8fCBzeW1faXNfY2hvaWNlKHN5bSkp
CisJCQljb250aW51ZTsKKwkJc3RhY2suZXhwciA9ICZwcm9wLT5leHByOworCQlzeW0yID0gc3lt
X2NoZWNrX2V4cHJfZGVwcyhwcm9wLT5leHByKTsKKwkJaWYgKHN5bTIpCisJCQlicmVhazsKKwkJ
c3RhY2suZXhwciA9IE5VTEw7CisJfQorCitvdXQ6CisJZGVwX3N0YWNrX3JlbW92ZSgpOworCisJ
cmV0dXJuIHN5bTI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfY2hvaWNl
X2RlcHMoc3RydWN0IHN5bWJvbCAqY2hvaWNlKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bSwgKnN5
bTI7CisJc3RydWN0IHByb3BlcnR5ICpwcm9wOworCXN0cnVjdCBleHByICplOworCXN0cnVjdCBk
ZXBfc3RhY2sgc3RhY2s7CisKKwlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgY2hvaWNlKTsKKwor
CXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNob2ljZSk7CisJZXhwcl9saXN0X2Zvcl9lYWNo
X3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCXN5bS0+ZmxhZ3MgfD0gKFNZTUJPTF9DSEVDSyB8
IFNZTUJPTF9DSEVDS0VEKTsKKworCWNob2ljZS0+ZmxhZ3MgfD0gKFNZTUJPTF9DSEVDSyB8IFNZ
TUJPTF9DSEVDS0VEKTsKKwlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKGNob2ljZSk7CisJY2hv
aWNlLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOworCWlmIChzeW0yKQorCQlnb3RvIG91dDsKKwor
CWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKSB7CisJCXN5bTIgPSBz
eW1fY2hlY2tfc3ltX2RlcHMoc3ltKTsKKwkJaWYgKHN5bTIpCisJCQlicmVhazsKKwl9CitvdXQ6
CisJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pCisJCXN5bS0+Zmxh
Z3MgJj0gflNZTUJPTF9DSEVDSzsKKworCWlmIChzeW0yICYmIHN5bV9pc19jaG9pY2VfdmFsdWUo
c3ltMikgJiYKKwkgICAgcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltMikp
ID09IGNob2ljZSkKKwkJc3ltMiA9IGNob2ljZTsKKworCWRlcF9zdGFja19yZW1vdmUoKTsKKwor
CXJldHVybiBzeW0yOworfQorCitzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZGVwcyhzdHJ1Y3Qg
c3ltYm9sICpzeW0pCit7CisJc3RydWN0IHN5bWJvbCAqc3ltMjsKKwlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7CisKKwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDSykgeworCQlzeW1fY2hlY2tf
cHJpbnRfcmVjdXJzaXZlKHN5bSk7CisJCXJldHVybiBzeW07CisJfQorCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX0NIRUNLRUQpCisJCXJldHVybiBOVUxMOworCisJaWYgKHN5bV9pc19jaG9pY2Vf
dmFsdWUoc3ltKSkgeworCQlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOworCisJCS8qIGZvciBjaG9p
Y2UgZ3JvdXBzIHN0YXJ0IHRoZSBjaGVjayB3aXRoIG1haW4gY2hvaWNlIHN5bWJvbCAqLworCQlk
ZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgc3ltKTsKKwkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3By
b3Aoc3ltKTsKKwkJc3ltMiA9IHN5bV9jaGVja19kZXBzKHByb3BfZ2V0X3N5bWJvbChwcm9wKSk7
CisJCWRlcF9zdGFja19yZW1vdmUoKTsKKwl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkg
eworCQlzeW0yID0gc3ltX2NoZWNrX2Nob2ljZV9kZXBzKHN5bSk7CisJfSBlbHNlIHsKKwkJc3lt
LT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NIRUNLRUQpOworCQlzeW0yID0gc3lt
X2NoZWNrX3N5bV9kZXBzKHN5bSk7CisJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsKKwl9
CisKKwlyZXR1cm4gc3ltMjsKK30KKworc3RydWN0IHByb3BlcnR5ICpwcm9wX2FsbG9jKGVudW0g
cHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3sKKwlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7CisJc3RydWN0IHByb3BlcnR5ICoqcHJvcHA7CisKKwlwcm9wID0geG1hbGxvYyhzaXpl
b2YoKnByb3ApKTsKKwltZW1zZXQocHJvcCwgMCwgc2l6ZW9mKCpwcm9wKSk7CisJcHJvcC0+dHlw
ZSA9IHR5cGU7CisJcHJvcC0+c3ltID0gc3ltOworCXByb3AtPmZpbGUgPSBjdXJyZW50X2ZpbGU7
CisJcHJvcC0+bGluZW5vID0gemNvbmZfbGluZW5vKCk7CisKKwkvKiBhcHBlbmQgcHJvcGVydHkg
dG8gdGhlIHByb3AgbGlzdCBvZiBzeW1ib2wgKi8KKwlpZiAoc3ltKSB7CisJCWZvciAocHJvcHAg
PSAmc3ltLT5wcm9wOyAqcHJvcHA7IHByb3BwID0gJigqcHJvcHApLT5uZXh0KQorCQkJOworCQkq
cHJvcHAgPSBwcm9wOworCX0KKworCXJldHVybiBwcm9wOworfQorCitzdHJ1Y3Qgc3ltYm9sICpw
cm9wX2dldF9zeW1ib2woc3RydWN0IHByb3BlcnR5ICpwcm9wKQoreworCWlmIChwcm9wLT5leHBy
ICYmIChwcm9wLT5leHByLT50eXBlID09IEVfU1lNQk9MIHx8CisJCQkgICBwcm9wLT5leHByLT50
eXBlID09IEVfTElTVCkpCisJCXJldHVybiBwcm9wLT5leHByLT5sZWZ0LnN5bTsKKwlyZXR1cm4g
TlVMTDsKK30KKworY29uc3QgY2hhciAqcHJvcF9nZXRfdHlwZV9uYW1lKGVudW0gcHJvcF90eXBl
IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQX1BST01QVDoKKwkJcmV0dXJuICJw
cm9tcHQiOworCWNhc2UgUF9DT01NRU5UOgorCQlyZXR1cm4gImNvbW1lbnQiOworCWNhc2UgUF9N
RU5VOgorCQlyZXR1cm4gIm1lbnUiOworCWNhc2UgUF9ERUZBVUxUOgorCQlyZXR1cm4gImRlZmF1
bHQiOworCWNhc2UgUF9DSE9JQ0U6CisJCXJldHVybiAiY2hvaWNlIjsKKwljYXNlIFBfU0VMRUNU
OgorCQlyZXR1cm4gInNlbGVjdCI7CisJY2FzZSBQX0lNUExZOgorCQlyZXR1cm4gImltcGx5IjsK
KwljYXNlIFBfUkFOR0U6CisJCXJldHVybiAicmFuZ2UiOworCWNhc2UgUF9TWU1CT0w6CisJCXJl
dHVybiAic3ltYm9sIjsKKwljYXNlIFBfVU5LTk9XTjoKKwkJYnJlYWs7CisJfQorCXJldHVybiAi
dW5rbm93biI7Cit9CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJt
ZW51L0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwNzYxZQotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZwpAQCAtMCww
ICsxLDUyIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK2NvbmZpZyBB
CisJYm9vbCAiQSIKKwlkZWZhdWx0IHkKKworY29uZmlnIEEwCisJYm9vbCAiQTAiCisJZGVwZW5k
cyBvbiBBCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBkZXBlbmRzIG9uIEEsIHNvIHNob3Vs
ZCBiZSBhIHN1Ym1lbnUgb2YgQS4KKworY29uZmlnIEEwXzAKKwlib29sICJBMV8wIgorCWRlcGVu
ZHMgb24gQTAKKwloZWxwCisJICBTdWJtZW51cyBhcmUgY3JlYXRlZCByZWN1cnNpdmVseS4KKwkg
IFRoaXMgc2hvdWxkIGJlIGEgc3VibWVudSBvZiBBMC4KKworY29uZmlnIEExCisJYm9vbCAiQTEi
CisJZGVwZW5kcyBvbiBBCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBzaG91bGQgbGluZSB1
cCB3aXRoIEEwLgorCitjaG9pY2UKKwlwcm9tcHQgImNob2ljZSIKKwlkZXBlbmRzIG9uIEExCisJ
aGVscAorCSAgQ2hvaWNlIHNob3VsZCBiZWNvbWUgYSBzdWJtZW51IGFzIHdlbGwuCisKK2NvbmZp
ZyBBMV8wCisJYm9vbCAiQTFfMCIKKworY29uZmlnIEExXzEKKwlib29sICJBMV8xIgorCitlbmRj
aG9pY2UKKworY29uZmlnIEIKKwlib29sICJCIgorCWhlbHAKKwkgIFRoaXMgaXMgaW5kZXBlbmRl
bnQgb2YgQS4KKworY29uZmlnIEMKKwlib29sICJDIgorCWRlcGVuZHMgb24gQQorCWhlbHAKKwkg
IFRoaXMgZGVwZW5kcyBvbiBBLCBidXQgbm90IGEgY29uc2VjdXRpdmUgaXRlbSwgc28gY2FuL3No
b3VsZCBub3QKKwkgIGJlIGEgc3VibWVudS4KZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90
ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0
b19zdWJtZW51L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjI1YWJkOTIKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19z
dWJtZW51L19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTMgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjAKKyIiIgorQ3JlYXRlIHN1Ym1lbnUgZm9yIHN5bWJvbHMgdGhhdCBkZXBl
bmQgb24gdGhlIHByZWNlZGluZyBvbmUuCisKK0lmIGEgc3ltYm9scyBoYXMgZGVwZW5kZW5jeSBv
biB0aGUgcHJlY2VkaW5nIHN5bWJvbCwgdGhlIG1lbnUgZW50cnkKK3Nob3VsZCBiZWNvbWUgdGhl
IHN1Ym1lbnUgb2YgdGhlIHByZWNlZGluZyBvbmUsIGFuZCBkaXNwbGF5ZWQgd2l0aAorZGVlcGVy
IGluZGVudGF0aW9uLgorIiIiCisKKworZGVmIHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYu
b2xkYXNrY29uZmlnKCkgPT0gMAorICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnZXhw
ZWN0ZWRfc3Rkb3V0JykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1
Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVu
dS9leHBlY3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY1
MjM2ZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1l
bnUvZXhwZWN0ZWRfc3Rkb3V0CkBAIC0wLDAgKzEsMTAgQEAKK0EgKEEpIFtZL24vP10gKE5FVykg
CisgIEEwIChBMCkgW1kvbi8/XSAoTkVXKSAKKyAgICBBMV8wIChBMF8wKSBbTi95Lz9dIChORVcp
IAorICBBMSAoQTEpIFtZL24vP10gKE5FVykgCisgICAgY2hvaWNlCisgICAgPiAxLiBBMV8wIChB
MV8wKSAoTkVXKQorICAgICAgMi4gQTFfMSAoQTFfMSkgKE5FVykKKyAgICBjaG9pY2VbMS0yP106
IAorQiAoQikgW04veS8/XSAoTkVXKSAKK0MgKEMpIFtOL3kvP10gKE5FVykgCmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
YTQxMjIwNQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uv
S2NvbmZpZwpAQCAtMCwwICsxLDU2IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wCisKK2NvbmZpZyBNT0RVTEVTCisJYm9vbCAiRW5hYmxlIGxvYWRhYmxlIG1vZHVsZSBzdXBw
b3J0IgorCW9wdGlvbiBtb2R1bGVzCisJZGVmYXVsdCB5CisKK2Nob2ljZQorCXByb21wdCAiYm9v
bGVhbiBjaG9pY2UiCisJZGVmYXVsdCBCT09MX0NIT0lDRTEKKworY29uZmlnIEJPT0xfQ0hPSUNF
MAorCWJvb2wgImNob2ljZSAwIgorCitjb25maWcgQk9PTF9DSE9JQ0UxCisJYm9vbCAiY2hvaWNl
IDEiCisKK2VuZGNob2ljZQorCitjaG9pY2UKKwlwcm9tcHQgIm9wdGlvbmFsIGJvb2xlYW4gY2hv
aWNlIgorCW9wdGlvbmFsCisJZGVmYXVsdCBPUFRfQk9PTF9DSE9JQ0UxCisKK2NvbmZpZyBPUFRf
Qk9PTF9DSE9JQ0UwCisJYm9vbCAiY2hvaWNlIDAiCisKK2NvbmZpZyBPUFRfQk9PTF9DSE9JQ0Ux
CisJYm9vbCAiY2hvaWNlIDEiCisKK2VuZGNob2ljZQorCitjaG9pY2UKKwlwcm9tcHQgInRyaXN0
YXRlIGNob2ljZSIKKwlkZWZhdWx0IFRSSV9DSE9JQ0UxCisKK2NvbmZpZyBUUklfQ0hPSUNFMAor
CXRyaXN0YXRlICJjaG9pY2UgMCIKKworY29uZmlnIFRSSV9DSE9JQ0UxCisJdHJpc3RhdGUgImNo
b2ljZSAxIgorCitlbmRjaG9pY2UKKworY2hvaWNlCisJcHJvbXB0ICJvcHRpb25hbCB0cmlzdGF0
ZSBjaG9pY2UiCisJb3B0aW9uYWwKKwlkZWZhdWx0IE9QVF9UUklfQ0hPSUNFMQorCitjb25maWcg
T1BUX1RSSV9DSE9JQ0UwCisJdHJpc3RhdGUgImNob2ljZSAwIgorCitjb25maWcgT1BUX1RSSV9D
SE9JQ0UxCisJdHJpc3RhdGUgImNob2ljZSAxIgorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjQzMThmY2UKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hv
aWNlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAKKyIiIgorQmFzaWMgY2hvaWNlIHRlc3RzLgorCitUaGUgaGFuZGxpbmcgb2Yg
J2Nob2ljZScgaXMgYSBiaXQgY29tcGxpY2F0ZWQgcGFydCBpbiBLY29uZmlnLgorCitUaGUgYmVo
YXZpb3Igb2YgJ3knIGNob2ljZSBpcyBpbnR1aXRpdmUuICBJZiBjaG9pY2UgdmFsdWVzIGFyZSB0
cmlzdGF0ZSwKK3RoZSBjaG9pY2UgY2FuIGJlICdtJyB3aGVyZSBlYWNoIHZhbHVlIGNhbiBiZSBl
bmFibGVkIGluZGVwZW5kZW50bHkuCitBbHNvLCBpZiBhIGNob2ljZSBpcyBtYXJrZWQgYXMgJ29w
dGlvbmFsJywgdGhlIHdob2xlIGNob2ljZSBjYW4gYmUKK2ludmlzaWJsZS4KKyIiIgorCisKK2Rl
ZiB0ZXN0X29sZGFzazAoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0g
MAorICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnb2xkYXNrMF9leHBlY3RlZF9zdGRv
dXQnKQorCisKK2RlZiB0ZXN0X29sZGFzazEoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNr
Y29uZmlnKCdvbGRhc2sxX2NvbmZpZycpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29u
dGFpbnMoJ29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0JykKKworCitkZWYgdGVzdF9hbGx5ZXMoY29u
Zik6CisgICAgYXNzZXJ0IGNvbmYuYWxseWVzY29uZmlnKCkgPT0gMAorICAgIGFzc2VydCBjb25m
LmNvbmZpZ19jb250YWlucygnYWxseWVzX2V4cGVjdGVkX2NvbmZpZycpCisKKworZGVmIHRlc3Rf
YWxsbW9kKGNvbmYpOgorICAgIGFzc2VydCBjb25mLmFsbG1vZGNvbmZpZygpID09IDAKKyAgICBh
c3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbG1vZF9leHBlY3RlZF9jb25maWcnKQorCisK
K2RlZiB0ZXN0X2FsbG5vKGNvbmYpOgorICAgIGFzc2VydCBjb25mLmFsbG5vY29uZmlnKCkgPT0g
MAorICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnYWxsbm9fZXhwZWN0ZWRfY29uZmln
JykKKworCitkZWYgdGVzdF9hbGxkZWYoY29uZik6CisgICAgYXNzZXJ0IGNvbmYuYWxsZGVmY29u
ZmlnKCkgPT0gMAorICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnYWxsZGVmX2V4cGVj
dGVkX2NvbmZpZycpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2Fs
bGRlZl9leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRl
Zl9leHBlY3RlZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3
NTRiZgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxs
ZGVmX2V4cGVjdGVkX2NvbmZpZwpAQCAtMCwwICsxLDUgQEAKK0NPTkZJR19NT0RVTEVTPXkKKyMg
Q09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdfQk9PTF9DSE9JQ0UxPXkKKyMg
Q09ORklHX1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSV9DSE9JQ0UxIGlzIG5v
dCBzZXQKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4
cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVj
dGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWY1ZGNkCi0t
LSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhw
ZWN0ZWRfY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorQ09ORklHX01PRFVMRVM9eQorIyBDT05GSUdf
Qk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NPTkZJR19CT09MX0NIT0lDRTE9eQorIyBDT05GSUdf
T1BUX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMT15CitD
T05GSUdfVFJJX0NIT0lDRTA9bQorQ09ORklHX1RSSV9DSE9JQ0UxPW0KK0NPTkZJR19PUFRfVFJJ
X0NIT0lDRTA9bQorQ09ORklHX09QVF9UUklfQ0hPSUNFMT1tCmRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2Nv
bmZpZy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI4OGVlN2EKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tj
b25maWcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZwpAQCAtMCwwICsxLDUgQEAK
KyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5v
dCBzZXQKK0NPTkZJR19CT09MX0NIT0lDRTE9eQorIyBDT05GSUdfVFJJX0NIT0lDRTAgaXMgbm90
IHNldAorQ09ORklHX1RSSV9DSE9JQ0UxPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90
ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0
cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5lNWEwNjJhCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnCkBAIC0wLDAgKzEsOSBAQAorQ09ORklH
X01PRFVMRVM9eQorIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NPTkZJR19CT09M
X0NIT0lDRTE9eQorIyBDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05GSUdf
T1BUX0JPT0xfQ0hPSUNFMT15CisjIENPTkZJR19UUklfQ0hPSUNFMCBpcyBub3Qgc2V0CitDT05G
SUdfVFJJX0NIT0lDRTE9eQorIyBDT05GSUdfT1BUX1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQKK0NP
TkZJR19PUFRfVFJJX0NIT0lDRTE9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9j
aG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjI1MWJiYQotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0
cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQKQEAgLTAsMCArMSwxMCBAQAorRW5hYmxl
IGxvYWRhYmxlIG1vZHVsZSBzdXBwb3J0IChNT0RVTEVTKSBbWS9uLz9dIChORVcpIAorYm9vbGVh
biBjaG9pY2UKKyAgMS4gY2hvaWNlIDAgKEJPT0xfQ0hPSUNFMCkgKE5FVykKKz4gMi4gY2hvaWNl
IDEgKEJPT0xfQ0hPSUNFMSkgKE5FVykKK2Nob2ljZVsxLTI/XTogCitvcHRpb25hbCBib29sZWFu
IGNob2ljZSBbTi95Lz9dIChORVcpIAordHJpc3RhdGUgY2hvaWNlIFtNL3kvP10gKE5FVykgCisg
IGNob2ljZSAwIChUUklfQ0hPSUNFMCkgW04vbS8/XSAoTkVXKSAKKyAgY2hvaWNlIDEgKFRSSV9D
SE9JQ0UxKSBbTi9tLz9dIChORVcpIAorb3B0aW9uYWwgdHJpc3RhdGUgY2hvaWNlIFtOL20veS8/
XSAoTkVXKSAKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNr
MV9jb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2N2JmZTMKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnCkBAIC0wLDAg
KzEsMiBAQAorIyBDT05GSUdfTU9EVUxFUyBpcyBub3Qgc2V0CitDT05GSUdfT1BUX0JPT0xfQ0hP
SUNFMD15CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFf
ZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2V4
cGVjdGVkX3N0ZG91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjEyNWU5
Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sx
X2V4cGVjdGVkX3N0ZG91dApAQCAtMCwwICsxLDE1IEBACitFbmFibGUgbG9hZGFibGUgbW9kdWxl
IHN1cHBvcnQgKE1PRFVMRVMpIFtOL3kvP10gCitib29sZWFuIGNob2ljZQorICAxLiBjaG9pY2Ug
MCAoQk9PTF9DSE9JQ0UwKSAoTkVXKQorPiAyLiBjaG9pY2UgMSAoQk9PTF9DSE9JQ0UxKSAoTkVX
KQorY2hvaWNlWzEtMj9dOiAKK29wdGlvbmFsIGJvb2xlYW4gY2hvaWNlIFtZL24vP10gKE5FVykg
CitvcHRpb25hbCBib29sZWFuIGNob2ljZQorPiAxLiBjaG9pY2UgMCAoT1BUX0JPT0xfQ0hPSUNF
MCkKKyAgMi4gY2hvaWNlIDEgKE9QVF9CT09MX0NIT0lDRTEpIChORVcpCitjaG9pY2VbMS0yP106
IAordHJpc3RhdGUgY2hvaWNlCisgIDEuIGNob2ljZSAwIChUUklfQ0hPSUNFMCkgKE5FVykKKz4g
Mi4gY2hvaWNlIDEgKFRSSV9DSE9JQ0UxKSAoTkVXKQorY2hvaWNlWzEtMj9dOiAKK29wdGlvbmFs
IHRyaXN0YXRlIGNob2ljZSBbTi95Lz9dIApkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi43MTA2YzI2Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL0tjb25maWcKQEAgLTAsMCArMSwyMSBAQAor
IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCitjb25maWcgTU9EVUxFUworCWRl
Zl9ib29sIHkKKwlvcHRpb24gbW9kdWxlcworCitjb25maWcgREVQCisJdHJpc3RhdGUKKwlkZWZh
dWx0IG0KKworY2hvaWNlCisJcHJvbXB0ICJUcmlzdGF0ZSBDaG9pY2UiCisKK2NvbmZpZyBDSE9J
Q0UwCisJdHJpc3RhdGUgIkNob2ljZSAwIgorCitjb25maWcgQ0hPSUNFMQorCXRyaXN0YXRlICJD
aG9pY2UgMSIKKwlkZXBlbmRzIG9uIERFUAorCitlbmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weSBiL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzViNGUwCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5p
dF9fLnB5CkBAIC0wLDAgKzEsMTYgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjAKKyIiIgorSGlkZSB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIHdpdGggbW9kIGRlcGVuZGVuY3kg
aW4geSBjaG9pY2UuCisKK0lmIHRyaXN0YXRlIGNob2ljZSB2YWx1ZXMgZGVwZW5kIG9uIHN5bWJv
bHMgc2V0IHRvICdtJywgdGhleSBzaG91bGQgYmUKK2hpZGRlbiB3aGVuIHRoZSBjaG9pY2UgY29u
dGFpbmluZyB0aGVtIGlzIGNoYW5nZWQgZnJvbSAnbScgdG8gJ3knCisoaS5lLiBleGNsdXNpdmUg
Y2hvaWNlKS4KKworUmVsYXRlZCBMaW51eCBjb21taXQ6IGZhNjRlNWY2YTM1ZWZkNWU3N2Q2Mzkx
MjVkOTczMDc3Y2E1MDYwNzQKKyIiIgorCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBj
b25mLm9sZGFza2NvbmZpZygnY29uZmlnJywgJ3knKSA9PSAwCisgICAgYXNzZXJ0IGNvbmYuY29u
ZmlnX2NvbnRhaW5zKCdleHBlY3RlZF9jb25maWcnKQorICAgIGFzc2VydCBjb25mLnN0ZG91dF9j
b250YWlucygnZXhwZWN0ZWRfc3Rkb3V0JykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90
ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVz
dHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjNhMTI2YjcKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnCkBAIC0wLDAgKzEsMiBAQAorQ09O
RklHX0NIT0lDRTA9bQorQ09ORklHX0NIT0lDRTE9bQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQwN2I0NAotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBl
Y3RlZF9jb25maWcKQEAgLTAsMCArMSwzIEBACitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfREVQ
PW0KK0NPTkZJR19DSE9JQ0UwPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9j
aG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNTBhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBw
b3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0
CkBAIC0wLDAgKzEsNCBAQAorVHJpc3RhdGUgQ2hvaWNlIFtNL3kvP10geQorVHJpc3RhdGUgQ2hv
aWNlCis+IDEuIENob2ljZSAwIChDSE9JQ0UwKQorY2hvaWNlWzFdOiAxCmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvdGVzdHMvY29uZnRlc3QucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMv
Y29uZnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM0NWVmNgot
LS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jb25mdGVzdC5weQpAQCAt
MCwwICsxLDI5MSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIworIyBD
b3B5cmlnaHQgKEMpIDIwMTggTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9u
ZXh0LmNvbT4KKyMKKworIiIiCitLY29uZmlnIHVuaXQgdGVzdGluZyBmcmFtZXdvcmsuCisKK1Ro
aXMgcHJvdmlkZXMgZml4dHVyZSBmdW5jdGlvbnMgY29tbW9ubHkgdXNlZCBmcm9tIHRlc3QgZmls
ZXMuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgcHl0ZXN0CitpbXBvcnQgc2h1dGlsCitpbXBv
cnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCisKK0NPTkZfUEFUSCA9IG9zLnBhdGguYWJz
cGF0aChvcy5wYXRoLmpvaW4oJ3NjcmlwdHMnLCAna2NvbmZpZycsICdjb25mJykpCisKKworY2xh
c3MgQ29uZjoKKyAgICAiIiJLY29uZmlnIHJ1bm5lciBhbmQgcmVzdWx0IGNoZWNrZXIuCisKKyAg
ICBUaGlzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMgdG8gcnVuIHRleHQtYmFzZWQgaW50ZXJmYWNl
IG9mIEtjb25maWcKKyAgICAoc2NyaXB0cy9rY29uZmlnL2NvbmYpIGFuZCByZXRyaWV2ZSB0aGUg
cmVzdWx0ZWQgY29uZmlndXJhdGlvbiwKKyAgICBzdGRvdXQsIGFuZCBzdGRlcnIuICBJdCBhbHNv
IHByb3ZpZGVzIG1ldGhvZHMgdG8gY29tcGFyZSB0aG9zZQorICAgIHJlc3VsdHMgd2l0aCBleHBl
Y3RhdGlvbnMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCk6Cisg
ICAgICAgICIiIkNyZWF0ZSBhIG5ldyBDb25mIGluc3RhbmNlLgorCisgICAgICAgIHJlcXVlc3Q6
IG9iamVjdCB0byBpbnRyb3NwZWN0IHRoZSByZXF1ZXN0aW5nIHRlc3QgbW9kdWxlCisgICAgICAg
ICIiIgorICAgICAgICAjIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHRlc3QgYmVpbmcgcnVuCisgICAg
ICAgIHNlbGYuX3Rlc3RfZGlyID0gb3MucGF0aC5kaXJuYW1lKHN0cihyZXF1ZXN0LmZzcGF0aCkp
CisKKyAgICAjIHJ1bm5lcnMKKyAgICBkZWYgX3J1bl9jb25mKHNlbGYsIG1vZGUsIGRvdF9jb25m
aWc9Tm9uZSwgb3V0X2ZpbGU9Jy5jb25maWcnLAorICAgICAgICAgICAgICAgICAgaW50ZXJhY3Rp
dmU9RmFsc2UsIGluX2tleXM9Tm9uZSwgZXh0cmFfZW52PXt9KToKKyAgICAgICAgIiIiUnVuIHRl
eHQtYmFzZWQgS2NvbmZpZyBleGVjdXRhYmxlIGFuZCBzYXZlIHRoZSByZXN1bHQuCisKKyAgICAg
ICAgbW9kZTogaW5wdXQgbW9kZSBvcHRpb24gKC0tb2xkYXNrY29uZmlnLCAtLWRlZmNvbmZpZz08
ZmlsZT4gZXRjLikKKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3Ig
Y29uZmlndXJhdGlvbiBiYXNlCisgICAgICAgIG91dF9maWxlOiBmaWxlIG5hbWUgdG8gY29udGFp
biB0aGUgb3V0cHV0IGNvbmZpZyBkYXRhCisgICAgICAgIGludGVyYWN0aXZlOiBmbGFnIHRvIHNw
ZWNpZnkgdGhlIGludGVyYWN0aXZlIG1vZGUKKyAgICAgICAgaW5fa2V5czoga2V5IGlucHV0cyBm
b3IgaW50ZXJhY3RpdmUgbW9kZXMKKyAgICAgICAgZXh0cmFfZW52OiBhZGRpdGlvbmFsIGVudmly
b25tZW50cworICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBl
eGVjdXRhYmxlCisgICAgICAgICIiIgorICAgICAgICBjb21tYW5kID0gW0NPTkZfUEFUSCwgbW9k
ZSwgJ0tjb25maWcnXQorCisgICAgICAgICMgT3ZlcnJpZGUgJ3NyY3RyZWUnIGVudmlyb25tZW50
IHRvIG1ha2UgdGhlIHRlc3QgYXMgdGhlIHRvcCBkaXJlY3RvcnkKKyAgICAgICAgZXh0cmFfZW52
WydzcmN0cmVlJ10gPSBzZWxmLl90ZXN0X2RpcgorCisgICAgICAgICMgUnVuIEtjb25maWcgaW4g
YSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICAgICAgICAjIFRoaXMgZGlyZWN0b3J5IGlzIGF1dG9t
YXRpY2FsbHkgcmVtb3ZlZCB3aGVuIGRvbmUuCisgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9y
YXJ5RGlyZWN0b3J5KCkgYXMgdGVtcF9kaXI6CisKKyAgICAgICAgICAgICMgaWYgLmNvbmZpZyBp
cyBnaXZlbiwgY29weSBpdCB0byB0aGUgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgICAgIGlm
IGRvdF9jb25maWc6CisgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9p
bihzZWxmLl90ZXN0X2RpciwgZG90X2NvbmZpZyksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9zLnBhdGguam9pbih0ZW1wX2RpciwgJy5jb25maWcnKSkKKworICAgICAgICAgICAg
cHMgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjd2Q9dGVtcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW52PWRpY3Qob3MuZW52aXJvbiwgKipleHRyYV9lbnYpKQorCisgICAgICAgICAgICAj
IElmIGlucHV0IGtleSBzZXF1ZW5jZSBpcyBnaXZlbiwgZmVlZCBpdCB0byBzdGRpbi4KKyAgICAg
ICAgICAgIGlmIGluX2tleXM6CisgICAgICAgICAgICAgICAgcHMuc3RkaW4ud3JpdGUoaW5fa2V5
cy5lbmNvZGUoJ3V0Zi04JykpCisKKyAgICAgICAgICAgIHdoaWxlIHBzLnBvbGwoKSBpcyBOb25l
OgorICAgICAgICAgICAgICAgICMgRm9yIGludGVyYWN0aXZlIG1vZGVzIHN1Y2ggYXMgb2xkYXNr
Y29uZmlnLCBvbGRjb25maWcsCisgICAgICAgICAgICAgICAgIyBzZW5kICdFbnRlcicga2V5IHVu
dGlsIHRoZSBwcm9ncmFtIGZpbmlzaGVzLgorICAgICAgICAgICAgICAgIGlmIGludGVyYWN0aXZl
OgorICAgICAgICAgICAgICAgICAgICBwcy5zdGRpbi53cml0ZShiJ1xuJykKKworICAgICAgICAg
ICAgc2VsZi5yZXRjb2RlID0gcHMucmV0dXJuY29kZQorICAgICAgICAgICAgc2VsZi5zdGRvdXQg
PSBwcy5zdGRvdXQucmVhZCgpLmRlY29kZSgpCisgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IHBz
LnN0ZGVyci5yZWFkKCkuZGVjb2RlKCkKKworICAgICAgICAgICAgIyBSZXRyaWV2ZSB0aGUgcmVz
dWx0ZWQgY29uZmlnIGRhdGEgb25seSB3aGVuIC5jb25maWcgaXMgc3VwcG9zZWQKKyAgICAgICAg
ICAgICMgdG8gZXhpc3QuICBJZiB0aGUgY29tbWFuZCBmYWlscywgdGhlIC5jb25maWcgZG9lcyBu
b3QgZXhpc3QuCisgICAgICAgICAgICAjICdsaXN0bmV3Y29uZmlnJyBkb2VzIG5vdCBwcm9kdWNl
IC5jb25maWcgaW4gdGhlIGZpcnN0IHBsYWNlLgorICAgICAgICAgICAgaWYgc2VsZi5yZXRjb2Rl
ID09IDAgYW5kIG91dF9maWxlOgorICAgICAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpv
aW4odGVtcF9kaXIsIG91dF9maWxlKSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5j
b25maWcgPSBmLnJlYWQoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxm
LmNvbmZpZyA9IE5vbmUKKworICAgICAgICAjIExvZ2dpbmc6CisgICAgICAgICMgUHl0ZXN0IGNh
cHR1cmVzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYnkgZGVmYXVsdC4gIEluIGZhaWx1cmUK
KyAgICAgICAgIyBvZiB0ZXN0cywgdGhlIGNhcHR1cmVkIGxvZyB3aWxsIGJlIGRpc3BsYXllZC4g
IFRoaXMgd2lsbCBiZSB1c2VmdWwgdG8KKyAgICAgICAgIyBmaWd1cmUgb3V0IHdoYXQgaGFzIGhh
cHBlbmVkLgorCisgICAgICAgIHByaW50KCJbY29tbWFuZF1cbnt9XG4iLmZvcm1hdCgnICcuam9p
bihjb21tYW5kKSkpCisKKyAgICAgICAgcHJpbnQoIltyZXRjb2RlXVxue31cbiIuZm9ybWF0KHNl
bGYucmV0Y29kZSkpCisKKyAgICAgICAgcHJpbnQoIltzdGRvdXRdIikKKyAgICAgICAgcHJpbnQo
c2VsZi5zdGRvdXQpCisKKyAgICAgICAgcHJpbnQoIltzdGRlcnJdIikKKyAgICAgICAgcHJpbnQo
c2VsZi5zdGRlcnIpCisKKyAgICAgICAgaWYgc2VsZi5jb25maWcgaXMgbm90IE5vbmU6CisgICAg
ICAgICAgICBwcmludCgiW291dHB1dCBmb3IgJ3t9J10iLmZvcm1hdChvdXRfZmlsZSkpCisgICAg
ICAgICAgICBwcmludChzZWxmLmNvbmZpZykKKworICAgICAgICByZXR1cm4gc2VsZi5yZXRjb2Rl
CisKKyAgICBkZWYgb2xkYXNrY29uZmlnKHNlbGYsIGRvdF9jb25maWc9Tm9uZSwgaW5fa2V5cz1O
b25lKToKKyAgICAgICAgIiIiUnVuIG9sZGFza2NvbmZpZy4KKworICAgICAgICBkb3RfY29uZmln
OiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2UgKG9wdGlvbmFsKQor
ICAgICAgICBpbl9rZXk6IGtleSBpbnB1dHMgKG9wdGlvbmFsKQorICAgICAgICByZXR1cm5jb2Rl
OiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgorICAg
ICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tb2xkYXNrY29uZmlnJywgZG90X2NvbmZpZz1k
b3RfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmU9VHJ1
ZSwgaW5fa2V5cz1pbl9rZXlzKQorCisgICAgZGVmIG9sZGNvbmZpZyhzZWxmLCBkb3RfY29uZmln
PU5vbmUsIGluX2tleXM9Tm9uZSk6CisgICAgICAgICIiIlJ1biBvbGRjb25maWcuCisKKyAgICAg
ICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNl
IChvcHRpb25hbCkKKyAgICAgICAgaW5fa2V5OiBrZXkgaW5wdXRzIChvcHRpb25hbCkKKyAgICAg
ICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAg
ICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLW9sZGNvbmZpZycsIGRv
dF9jb25maWc9ZG90X2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVy
YWN0aXZlPVRydWUsIGluX2tleXM9aW5fa2V5cykKKworICAgIGRlZiBvbGRkZWZjb25maWcoc2Vs
ZiwgZG90X2NvbmZpZz1Ob25lKToKKyAgICAgICAgIiIiUnVuIG9sZGRlZmNvbmZpZy4KKworICAg
ICAgICBkb3RfY29uZmlnOiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJh
c2UgKG9wdGlvbmFsKQorICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2Nv
bmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2Nv
bmYoJy0tb2xkZGVmY29uZmlnJywgZG90X2NvbmZpZz1kb3RfY29uZmlnKQorCisgICAgZGVmIGRl
ZmNvbmZpZyhzZWxmLCBkZWZjb25maWcpOgorICAgICAgICAiIiJSdW4gZGVmY29uZmlnLgorCisg
ICAgICAgIGRlZmNvbmZpZzogZGVmY29uZmlnIGZpbGUgZm9yIGlucHV0CisgICAgICAgIHJldHVy
bmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIi
CisgICAgICAgIGRlZmNvbmZpZ19wYXRoID0gb3MucGF0aC5qb2luKHNlbGYuX3Rlc3RfZGlyLCBk
ZWZjb25maWcpCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1kZWZjb25maWc9e30n
LmZvcm1hdChkZWZjb25maWdfcGF0aCkpCisKKyAgICBkZWYgX2FsbGNvbmZpZyhzZWxmLCBtb2Rl
LCBhbGxfY29uZmlnKToKKyAgICAgICAgaWYgYWxsX2NvbmZpZzoKKyAgICAgICAgICAgIGFsbF9j
b25maWdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgYWxsX2NvbmZpZykKKyAg
ICAgICAgICAgIGV4dHJhX2VudiA9IHsnS0NPTkZJR19BTExDT05GSUcnOiBhbGxfY29uZmlnX3Bh
dGh9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRyYV9lbnYgPSB7fQorCisgICAgICAg
IHJldHVybiBzZWxmLl9ydW5fY29uZignLS17fWNvbmZpZycuZm9ybWF0KG1vZGUpLCBleHRyYV9l
bnY9ZXh0cmFfZW52KQorCisgICAgZGVmIGFsbHllc2NvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5v
bmUpOgorICAgICAgICAiIiJSdW4gYWxseWVzY29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6
IGZyYWdtZW50IGNvbmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisg
ICAgICAgIHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUK
KyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbHllcycsIGFs
bF9jb25maWcpCisKKyAgICBkZWYgYWxsbW9kY29uZmlnKHNlbGYsIGFsbF9jb25maWc9Tm9uZSk6
CisgICAgICAgICIiIlJ1biBhbGxtb2Rjb25maWcuCisKKyAgICAgICAgYWxsX2NvbmZpZzogZnJh
Z21lbnQgY29uZmlnIGZpbGUgZm9yIEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkKKyAgICAg
ICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAg
ICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxsbW9kJywgYWxsX2Nv
bmZpZykKKworICAgIGRlZiBhbGxub2NvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgorICAg
ICAgICAiIiJSdW4gYWxsbm9jb25maWcuCisKKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQg
Y29uZmlnIGZpbGUgZm9yIEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkKKyAgICAgICAgcmV0
dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQorICAgICAgICAi
IiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxsbm8nLCBhbGxfY29uZmlnKQor
CisgICAgZGVmIGFsbGRlZmNvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgorICAgICAgICAi
IiJSdW4gYWxsZGVmY29uZmlnLgorCisgICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNvbmZp
ZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpCisgICAgICAgIHJldHVybmNv
ZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAgICAgIiIiCisg
ICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbGRlZicsIGFsbF9jb25maWcpCisKKyAg
ICBkZWYgcmFuZGNvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOgorICAgICAgICAiIiJSdW4g
cmFuZGNvbmZpZy4KKworICAgICAgICBhbGxfY29uZmlnOiBmcmFnbWVudCBjb25maWcgZmlsZSBm
b3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQorICAgICAgICByZXR1cm5jb2RlOiBleGl0
IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlCisgICAgICAgICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdyYW5kJywgYWxsX2NvbmZpZykKKworICAgIGRlZiBzYXZl
ZGVmY29uZmlnKHNlbGYsIGRvdF9jb25maWcpOgorICAgICAgICAiIiJSdW4gc2F2ZWRlZmNvbmZp
Zy4KKworICAgICAgICBkb3RfY29uZmlnOiAuY29uZmlnIGZpbGUgZm9yIGlucHV0CisgICAgICAg
IHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUKKyAgICAg
ICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1zYXZlZGVmY29uZmlnJywg
b3V0X2ZpbGU9J2RlZmNvbmZpZycpCisKKyAgICBkZWYgbGlzdG5ld2NvbmZpZyhzZWxmLCBkb3Rf
Y29uZmlnPU5vbmUpOgorICAgICAgICAiIiJSdW4gbGlzdG5ld2NvbmZpZy4KKworICAgICAgICBk
b3RfY29uZmlnOiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2UgKG9w
dGlvbmFsKQorICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBl
eGVjdXRhYmxlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0t
bGlzdG5ld2NvbmZpZycsIGRvdF9jb25maWc9ZG90X2NvbmZpZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dF9maWxlPU5vbmUpCisKKyAgICAjIGNoZWNrZXJzCisgICAgZGVmIF9y
ZWFkX2FuZF9jb21wYXJlKHNlbGYsIGNvbXBhcmUsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ29t
cGFyZSB0aGUgcmVzdWx0IHdpdGggZXhwZWN0YXRpb24uCisKKyAgICAgICAgY29tcGFyZTogZnVu
Y3Rpb24gdG8gY29tcGFyZSB0aGUgcmVzdWx0IHdpdGggZXhwZWN0YXRpb24KKyAgICAgICAgZXhw
ZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQorICAgICAgICAiIiIK
KyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgZXhwZWN0ZWQp
KSBhcyBmOgorICAgICAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGYucmVhZCgpCisgICAgICAgIHJl
dHVybiBjb21wYXJlKHNlbGYsIGV4cGVjdGVkX2RhdGEpCisKKyAgICBkZWYgX2NvbnRhaW5zKHNl
bGYsIGF0dHIsIGV4cGVjdGVkKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYW5kX2NvbXBh
cmUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgcywgZTogZ2V0
YXR0cihzLCBhdHRyKS5maW5kKGUpID49IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBleHBlY3RlZCkKKworICAgIGRlZiBfbWF0Y2hlcyhzZWxmLCBhdHRyLCBleHBlY3Rl
ZCk6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FuZF9jb21wYXJlKGxhbWJkYSBzLCBlOiBn
ZXRhdHRyKHMsIGF0dHIpID09IGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGV4cGVjdGVkKQorCisgICAgZGVmIGNvbmZpZ19jb250YWlucyhzZWxmLCBleHBlY3RlZCk6
CisgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgZXhw
ZWN0ZWQgZGF0YS4KKworICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBl
eHBlY3RlZCBkYXRhCisgICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IGNvbnRhaW5z
IHRoZSBleHBlY3RlZCBkYXRhLCBGYWxzZSBvdGhlcndpc2UKKyAgICAgICAgIiIiCisgICAgICAg
IHJldHVybiBzZWxmLl9jb250YWlucygnY29uZmlnJywgZXhwZWN0ZWQpCisKKyAgICBkZWYgY29u
ZmlnX21hdGNoZXMoc2VsZiwgZXhwZWN0ZWQpOgorICAgICAgICAiIiJDaGVjayBpZiByZXN1bHRl
ZCBjb25maWd1cmF0aW9uIGV4YWN0bHkgbWF0Y2hlcyBleHBlY3RlZCBkYXRhLgorCisgICAgICAg
IGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAg
cmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFs
c2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlcygn
Y29uZmlnJywgZXhwZWN0ZWQpCisKKyAgICBkZWYgc3Rkb3V0X2NvbnRhaW5zKHNlbGYsIGV4cGVj
dGVkKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3Rkb3V0IGNvbnRhaW5zIGV4cGVj
dGVkIGRhdGEuCisKKyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhw
ZWN0ZWQgZGF0YQorICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0
aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICBy
ZXR1cm4gc2VsZi5fY29udGFpbnMoJ3N0ZG91dCcsIGV4cGVjdGVkKQorCisgICAgZGVmIHN0ZG91
dF9tYXRjaGVzKHNlbGYsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQg
c3Rkb3V0IGV4YWN0bHkgbWF0Y2hlcyBleHBlY3RlZCBkYXRhLgorCisgICAgICAgIGV4cGVjdGVk
OiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgcmV0dXJuY29k
ZTogVHJ1ZSBpZiByZXN1bHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3
aXNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlcygnc3Rkb3V0Jywg
ZXhwZWN0ZWQpCisKKyAgICBkZWYgc3RkZXJyX2NvbnRhaW5zKHNlbGYsIGV4cGVjdGVkKToKKyAg
ICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3RkZXJyIGNvbnRhaW5zIGV4cGVjdGVkIGRhdGEu
CisKKyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0
YQorICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0aGUgZXhwZWN0
ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2Vs
Zi5fY29udGFpbnMoJ3N0ZGVycicsIGV4cGVjdGVkKQorCisgICAgZGVmIHN0ZGVycl9tYXRjaGVz
KHNlbGYsIGV4cGVjdGVkKToKKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3RkZXJyIGV4
YWN0bHkgbWF0Y2hlcyBleHBlY3RlZCBkYXRhLgorCisgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRo
YXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEKKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBp
ZiByZXN1bHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlCisgICAg
ICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlcygnc3RkZXJyJywgZXhwZWN0ZWQp
CisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJtb2R1bGUiKQorZGVmIGNvbmYocmVxdWVzdCk6
CisgICAgIiIiQ3JlYXRlIGEgQ29uZiBpbnN0YW5jZSBhbmQgcHJvdmlkZSBpdCB0byB0ZXN0IGZ1
bmN0aW9ucy4iIiIKKyAgICByZXR1cm4gQ29uZihyZXF1ZXN0KQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcgYi9zdXBwb3J0L2tjb25m
aWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lYmRiM2ZmCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcKQEAgLTAsMCArMSw2MyBAQAorIyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorCisjIGRlcGVuZHMgb24gaXRzZWxmCisKK2Nv
bmZpZyBBCisJYm9vbCAiQSIKKwlkZXBlbmRzIG9uIEEKKworIyBzZWxlY3QgaXRzZWxmCisKK2Nv
bmZpZyBCCisJYm9vbAorCXNlbGVjdCBCCisKKyMgZGVwZW5kcyBvbiBlYWNoIG90aGVyCisKK2Nv
bmZpZyBDMQorCWJvb2wgIkMxIgorCWRlcGVuZHMgb24gQzIKKworY29uZmlnIEMyCisJYm9vbCAi
QzIiCisJZGVwZW5kcyBvbiBDMQorCisjIGRlcGVuZHMgb24gYW5kIHNlbGVjdAorCitjb25maWcg
RDEKKwlib29sICJEMSIKKwlkZXBlbmRzIG9uIEQyCisJc2VsZWN0IEQyCisKK2NvbmZpZyBEMgor
CWJvb2wKKworIyBkZXBlbmRzIG9uIGFuZCBpbXBseQorCitjb25maWcgRTEKKwlib29sICJFMSIK
KwlkZXBlbmRzIG9uIEUyCisJaW1wbHkgRTIKKworY29uZmlnIEUyCisJYm9vbCAiRTIiCisKKyMg
cHJvcGVydHkKKworY29uZmlnIEYxCisJYm9vbCAiRjEiCisJZGVmYXVsdCBGMgorCitjb25maWcg
RjIKKwlib29sICJGMiIKKwlkZXBlbmRzIG9uIEYxCisKKyMgbWVudQorCittZW51ICJtZW51IGRl
cGVuZGluZyBvbiBpdHMgY29udGVudCIKKwlkZXBlbmRzIG9uIEcKKworY29uZmlnIEcKKwlib29s
ICJHIgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9kZXAvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWYzODIxYgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVj
dXJzaXZlX2RlcC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEwIEBACisjIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0RldGVjdCByZWN1cnNpdmUgZGVwZW5kZW5jeSBlcnJv
ci4KKworUmVjdXJzaXZlIGRlcGVuZGVuY3kgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3Iu
CisiIiIKKworZGVmIHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkg
PT0gMQorICAgIGFzc2VydCBjb25mLnN0ZGVycl9jb250YWlucygnZXhwZWN0ZWRfc3RkZXJyJykK
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBl
Y3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhw
ZWN0ZWRfc3RkZXJyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0Njc5YjEK
LS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9k
ZXAvZXhwZWN0ZWRfc3RkZXJyCkBAIC0wLDAgKzEsMzggQEAKK0tjb25maWc6MTE6ZXJyb3I6IHJl
Y3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQorS2NvbmZpZzoxMToJc3ltYm9sIEIgaXMgc2Vs
ZWN0ZWQgYnkgQgorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWls
ZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVw
ZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZpZzo1OmVycm9yOiByZWN1cnNpdmUgZGVwZW5k
ZW5jeSBkZXRlY3RlZCEKK0tjb25maWc6NToJc3ltYm9sIEEgZGVwZW5kcyBvbiBBCitGb3IgYSBy
ZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2Uu
dHh0CitzdWJzZWN0aW9uICJLY29uZmlnIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25z
IgorCitLY29uZmlnOjE3OmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCEKK0tj
b25maWc6MTc6CXN5bWJvbCBDMSBkZXBlbmRzIG9uIEMyCitLY29uZmlnOjIxOglzeW1ib2wgQzIg
ZGVwZW5kcyBvbiBDMQorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2ti
dWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUg
ZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZpZzozMjplcnJvcjogcmVjdXJzaXZlIGRl
cGVuZGVuY3kgZGV0ZWN0ZWQhCitLY29uZmlnOjMyOglzeW1ib2wgRDIgaXMgc2VsZWN0ZWQgYnkg
RDEKK0tjb25maWc6Mjc6CXN5bWJvbCBEMSBkZXBlbmRzIG9uIEQyCitGb3IgYSByZXNvbHV0aW9u
IHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CitzdWJz
ZWN0aW9uICJLY29uZmlnIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIgorCitLY29u
ZmlnOjM3OmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCEKK0tjb25maWc6Mzc6
CXN5bWJvbCBFMSBkZXBlbmRzIG9uIEUyCitLY29uZmlnOjQyOglzeW1ib2wgRTIgaXMgaW1wbGll
ZCBieSBFMQorRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9r
Y29uZmlnLWxhbmd1YWdlLnR4dAorc3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5k
ZW5jeSBsaW1pdGF0aW9ucyIKKworS2NvbmZpZzo2MDplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVu
Y3kgZGV0ZWN0ZWQhCitLY29uZmlnOjYwOglzeW1ib2wgRyBkZXBlbmRzIG9uIEcKK0ZvciBhIHJl
c29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50
eHQKK3N1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMi
CisKK0tjb25maWc6NTE6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQorS2Nv
bmZpZzo1MToJc3ltYm9sIEYyIGRlcGVuZHMgb24gRjEKK0tjb25maWc6NDk6CXN5bWJvbCBGMSBk
ZWZhdWx0IHZhbHVlIGNvbnRhaW5zIEYyCitGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3Vt
ZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CitzdWJzZWN0aW9uICJLY29uZmln
IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jNmY0YWRlCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcKQEAgLTAsMCArMSwyIEBACisjIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKK3NvdXJjZSAiS2NvbmZpZy5pbmMxIgpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcu
aW5jMSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmlu
YzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjYmYwZAotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmln
LmluYzEKQEAgLTAsMCArMSw1IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w
LW9ubHkKKworCisKK3NvdXJjZSAiS2NvbmZpZy5pbmMyIgpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMiBiL3N1cHBvcnQva2Nv
bmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODIzNTEwNwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIKQEAgLTAsMCArMSw0
IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKworCitzb3VyY2Ug
Iktjb25maWcuaW5jMyIKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVj
dXJzaXZlX2luYy9LY29uZmlnLmluYzMgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZy5pbmMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmM2ZjRhZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzCkBAIC0wLDAgKzEsMiBAQAorIyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5Citzb3VyY2UgIktjb25maWcuaW5jMSIKZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weSBi
L3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2FhMTg5Ci0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5CkBA
IC0wLDAgKzEsMTEgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKyIiIgor
RGV0ZWN0IHJlY3Vyc2l2ZSBpbmNsdXNpb24gZXJyb3IuCisKK0lmIHJlY3Vyc2l2ZSBpbmNsdXNp
b24gaXMgZGV0ZWN0ZWQsIGl0IHNob3VsZCBmYWlsIHdpdGggZXJyb3IgbWVzc2FnZXMuCisiIiIK
KworCitkZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSAhPSAw
CisgICAgYXNzZXJ0IGNvbmYuc3RkZXJyX2NvbnRhaW5zKCdleHBlY3RlZF9zdGRlcnInKQpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVk
X3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3Rl
ZF9zdGRlcnIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3MGEzMQotLS0g
L2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9l
eHBlY3RlZF9zdGRlcnIKQEAgLTAsMCArMSw2IEBACitSZWN1cnNpdmUgaW5jbHVzaW9uIGRldGVj
dGVkLgorSW5jbHVzaW9uIHBhdGg6CisgIGN1cnJlbnQgZmlsZSA6IEtjb25maWcuaW5jMQorICBp
bmNsdWRlZCBmcm9tOiBLY29uZmlnLmluYzM6MgorICBpbmNsdWRlZCBmcm9tOiBLY29uZmlnLmlu
YzI6NAorICBpbmNsdWRlZCBmcm9tOiBLY29uZmlnLmluYzE6NQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2ludGVyX2Nob2ljZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjU2OThhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvaW50
ZXJfY2hvaWNlL0tjb25maWcKQEAgLTAsMCArMSwyNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMAorCitjb25maWcgTU9EVUxFUworCWRlZl9ib29sIHkKKwlvcHRpb24gbW9k
dWxlcworCitjaG9pY2UKKwlwcm9tcHQgIkNob2ljZSIKKworY29uZmlnIENIT0lDRV9WQUwwCisJ
dHJpc3RhdGUgIkNob2ljZSAwIgorCitjb25maWcgQ0hPSVZFX1ZBTDEKKwl0cmlzdGF0ZSAiQ2hv
aWNlIDEiCisKK2VuZGNob2ljZQorCitjaG9pY2UKKwlwcm9tcHQgIkFub3RoZXIgY2hvaWNlIgor
CWRlcGVuZHMgb24gQ0hPSUNFX1ZBTDAKKworY29uZmlnIERVTU1ZCisJYm9vbCAiZHVtbXkiCisK
K2VuZGNob2ljZQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2lj
ZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0
X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZlYTZiMQotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18u
cHkKQEAgLTAsMCArMSwxNSBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAor
IiIiCitEbyBub3QgYWZmZWN0IHVzZXItYXNzaWduZWQgY2hvaWNlIHZhbHVlIGJ5IGFub3RoZXIg
Y2hvaWNlLgorCitIYW5kbGluZyBvZiBzdGF0ZSBmbGFncyBmb3IgY2hvaWNlcyBpcyBjb21wbGVj
YXRlZC4gIEluIG9sZCBkYXlzLAordGhlIGRlZmNvbmZpZyByZXN1bHQgb2YgYSBjaG9pY2UgY291
bGQgYmUgYWZmZWN0ZWQgYnkgYW5vdGhlciBjaG9pY2UKK2lmIHRob3NlIGNob2ljZXMgaW50ZXJh
Y3QgYnkgJ2RlcGVuZHMgb24nLCAnc2VsZWN0JywgZXRjLgorCitSZWxhdGVkIExpbnV4IGNvbW1p
dDogZmJlOThiYjllZDNkYWUyM2UzMjBjNmIxMTNlMzVmMTI5NTM4ZDE0YQorIiIiCisKKworZGVm
IHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYuZGVmY29uZmlnKCdkZWZjb25maWcnKSA9PSAw
CisgICAgYXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3RlZF9jb25maWcnKQpkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9kZWZjb25maWcgYi9z
dXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjJjNDE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9kZWZjb25maWcKQEAgLTAsMCArMSBAQAorQ09O
RklHX0NIT0lDRV9WQUwwPXkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRl
cl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2No
b2ljZS9leHBlY3RlZF9jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NWRjZWVmYgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9j
aG9pY2UvZXhwZWN0ZWRfY29uZmlnCkBAIC0wLDAgKzEsNCBAQAorQ09ORklHX01PRFVMRVM9eQor
Q09ORklHX0NIT0lDRV9WQUwwPXkKKyMgQ09ORklHX0NIT0lWRV9WQUwxIGlzIG5vdCBzZXQKK0NP
TkZJR19EVU1NWT15CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2lj
ZV93aXRoX2RlcC9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0
aF9kZXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjc3MzFj
Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0
aF9kZXAvS2NvbmZpZwpAQCAtMCwwICsxLDM5IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wCisKK2NvbmZpZyBBCisJYm9vbCAiQSIKKwloZWxwCisJICBUaGlzIGlzIGEgbmV3
IHN5bWJvbC4KKworY2hvaWNlCisJcHJvbXB0ICJDaG9pY2UgPyIKKwlkZXBlbmRzIG9uIEEKKwlo
ZWxwCisJICAiZGVwZW5kcyBvbiBBIiBoYXMgYmVlbiBuZXdseSBhZGRlZC4KKworY29uZmlnIENI
T0lDRV9CCisJYm9vbCAiQ2hvaWNlIEIiCisKK2NvbmZpZyBDSE9JQ0VfQworCWJvb2wgIkNob2lj
ZSBDIgorCWhlbHAKKwkgIFRoaXMgaXMgYSBuZXcgc3ltYm9sLCBzbyBzaG91bGQgYmUgYXNrZWQu
CisKK2VuZGNob2ljZQorCitjaG9pY2UKKwlwcm9tcHQgIkNob2ljZTIgPyIKKworY29uZmlnIENI
T0lDRV9ECisJYm9vbCAiQ2hvaWNlIEQiCisKK2NvbmZpZyBDSE9JQ0VfRQorCWJvb2wgIkNob2lj
ZSBFIgorCitjb25maWcgQ0hPSUNFX0YKKwlib29sICJDaG9pY2UgRiIKKwlkZXBlbmRzIG9uIEEK
KwloZWxwCisJICBUaGlzIGlzIGEgbmV3IHN5bWJvbCwgc28gc2hvdWxkIGJlIGFza2VkLgorCitl
bmRjaG9pY2UKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dp
dGhfZGVwL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0
aF9kZXAvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5
ZDMyMgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNl
X3dpdGhfZGVwL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMTUgQEAKKyMgU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjAKKyIiIgorQXNrIG5ldyBjaG9pY2UgdmFsdWVzIHdoZW4gdGhleSBi
ZWNvbWUgdmlzaWJsZS4KKworSWYgbmV3IGNob2ljZSB2YWx1ZXMgYXJlIGFkZGVkIHdpdGggbmV3
IGRlcGVuZGVuY3ksIGFuZCB0aGV5IGJlY29tZQordmlzaWJsZSBkdXJpbmcgdXNlciBjb25maWd1
cmF0aW9uLCBvbGRjb25maWcgc2hvdWxkIHJlY29nbml6ZSB0aGVtCithcyAoTkVXKSwgYW5kIGFz
ayB0aGUgdXNlciBmb3IgY2hvaWNlLgorCitSZWxhdGVkIExpbnV4IGNvbW1pdDogNWQwOTU5OGQ0
ODhmMDgxZTNiZTIzZjg4NWVkNjVjYmJlMmQwNzNiNQorIiIiCisKKworZGVmIHRlc3QoY29uZik6
CisgICAgYXNzZXJ0IGNvbmYub2xkY29uZmlnKCdjb25maWcnLCAneScpID09IDAKKyAgICBhc3Nl
cnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpCmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcgYi9zdXBwb3J0
L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDdlZjk1ZAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZwpAQCAtMCwwICsxLDMgQEAK
K0NPTkZJR19DSE9JQ0VfQj15CisjIENPTkZJR19DSE9JQ0VfRCBpcyBub3Qgc2V0CitDT05GSUdf
Q0hPSUNFX0U9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9p
Y2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc0ZGMwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMv
bmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQKQEAgLTAsMCArMSwxMCBAQAorQSAo
QSkgW04veS8/XSAoTkVXKSB5CisgIENob2ljZSA/CisgID4gMS4gQ2hvaWNlIEIgKENIT0lDRV9C
KQorICAgIDIuIENob2ljZSBDIChDSE9JQ0VfQykgKE5FVykKKyAgY2hvaWNlWzEtMj9dOiAKK0No
b2ljZTIgPworICAxLiBDaG9pY2UgRCAoQ0hPSUNFX0QpCis+IDIuIENob2ljZSBFIChDSE9JQ0Vf
RSkKKyAgMy4gQ2hvaWNlIEYgKENIT0lDRV9GKSAoTkVXKQorY2hvaWNlWzEtMz9dOiAKZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZp
ZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzY3YWFiCi0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmln
CkBAIC0wLDAgKzEsMTYgQEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKwor
Y29uZmlnIEEKKwlib29sICJBIgorCitjaG9pY2UKKwlwcm9tcHQgIkNob2ljZSA/IgorCWRlcGVu
ZHMgb24gQQorCitjb25maWcgQ0hPSUNFX0IKKwlib29sICJDaG9pY2UgQiIKKworY29uZmlnIENI
T0lDRV9DCisJYm9vbCAiQ2hvaWNlIEMiCisKK2VuZGNob2ljZQpkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9fX2luaXRfXy5weSBiL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZkNDY5ZAotLS0gL2Rldi9udWxsCisrKyBi
L3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkK
QEAgLTAsMCArMSwyMCBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIi
CitEbyBub3Qgd3JpdGUgY2hvaWNlIHZhbHVlcyB0byAuY29uZmlnIGlmIHRoZSBkZXBlbmRlbmN5
IGlzIHVubWV0LgorCisiIyBDT05GSUdfLi4uIGlzIG5vdCBzZXQiIHNob3VsZCBub3QgYmUgd3Jp
dHRlbiBpbnRvIHRoZSAuY29uZmlnIGZpbGUKK2ZvciBzeW1ib2xzIHdpdGggdW5tZXQgZGVwZW5k
ZW5jeS4KKworVGhpcyB3YXMgbm90IHdvcmtpbmcgY29ycmVjdGx5IGZvciBjaG9pY2UgdmFsdWVz
IGJlY2F1c2UgY2hvaWNlIG5lZWRzCithIGJpdCBkaWZmZXJlbnQgc3ltYm9sIGNvbXB1dGF0aW9u
LgorCitUaGlzIGNoZWNrcyB0aGF0IG5vIHVubmVlZGVkICIjIENPRklHXy4uLiBpcyBub3Qgc2V0
IiBpcyBjb250YWluZWQgaW4KK3RoZSAuY29uZmlnIGZpbGUuCisKK1JlbGF0ZWQgTGludXggY29t
bWl0OiBjYjY3YWIyY2QyYjhhYmQ5NjUwMjkyYzk4NmM3OTkwMWUzMDczYTU5CisiIiIKKworCitk
ZWYgdGVzdChjb25mKToKKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoJ2NvbmZpZycsICdu
JykgPT0gMAorICAgIGFzc2VydCBjb25mLmNvbmZpZ19tYXRjaGVzKCdleHBlY3RlZF9jb25maWcn
KQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1l
dC9jb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2Nv
bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmQyODBlCi0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9j
b25maWcKQEAgLTAsMCArMSBAQAorQ09ORklHX0E9eQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0
L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMyMjg4Ci0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9j
b25maWcKQEAgLTAsMCArMSw1IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7
IERPIE5PVCBFRElULgorIyBNYWluIG1lbnUKKyMKKyMgQ09ORklHX0EgaXMgbm90IHNldApkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tj
b25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2Nv
bmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWEzMjg4Ci0tLSAvZGV2
L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5j
L0tjb25maWcKQEAgLTAsMCArMSwyNyBAQAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMAorCisjICdpbmZvJyBwcmludHMgdGhlIGFyZ3VtZW50IHRvIHN0ZG91dC4KKyQoaW5mbyxo
ZWxsbyB3b3JsZCAwKQorCisjICd3YXJuaW5nLWlmJywgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlz
IHksIHNlbmRzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc3RkZXJyLAorIyBhbmQgdGhlIG1lc3Nh
Z2UgaXMgcHJlZml4ZWQgd2l0aCB0aGUgY3VycmVudCBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVy
LgorJCh3YXJuaW5nLWlmLHksaGVsbG8gd29ybGQgMSkKKworIyAnZXJyb3ItaWYnIGlzIHNpbWls
YXIsIGJ1dCBpdCB0ZXJtaW5hdGVzIHRoZSBwYXJzaW5nIGltbWVkaWF0ZWx5LgorIyBUaGUgZm9s
bG93aW5nIGlzIGp1c3Qgbm8tb3Agc2luY2UgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCB5Lgor
JChlcnJvci1pZixuLHRoaXMgc2hvdWxkIG5vdCBiZSBwcmludGVkKQorCisjIFNob3J0aGFuZAor
d2FybmluZyA9ICQod2FybmluZy1pZix5LCQoMSkpCisKKyMgJ3NoZWxsJyBleGVjdXRlcyBhIGNv
bW1hbmQsIGFuZCByZXR1cm5zIGl0cyBzdGRvdXQuCiskKHdhcm5pbmcsJChzaGVsbCxlY2hvIGhl
bGxvIHdvcmxkIDMpKQorCisjIEV2ZXJ5IG5ld2xpbmUgaW4gdGhlIG91dHB1dCBpcyByZXBsYWNl
ZCB3aXRoIGEgc3BhY2UsCisjIGJ1dCBhbnkgdHJhaWxpbmcgbmV3bGluZXMgYXJlIGRlbGV0ZWQu
CiskKHdhcm5pbmcsJChzaGVsbCxwcmludGYgJ2hlbGxvXG53b3JsZFxuXG40XG5cblxuJykpCisK
KyMgJ2ZpbGVuYW1lJyBpcyBleHBhbmRlZCB0byB0aGUgY3VycmVudGx5IHBhcnNlZCBmaWxlIG5h
bWUsCisjICdsaW5lbm8nIHRvIHRoZSBsaW5lIG51bWJlci4KKyQod2FybmluZyxmaWxlbmFtZT0k
KGZpbGVuYW1lKSkKKyQod2FybmluZyxsaW5lbm89JChsaW5lbm8pKQpkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5IGIv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTNiYTAKLS0tIC9kZXYvbnVs
bAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19p
bml0X18ucHkKQEAgLTAsMCArMSw5IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wCisiIiIKK0J1aWx0LWluIGZ1bmN0aW9uIHRlc3RzLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYp
OgorICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5z
dGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpCisgICAgYXNzZXJ0IGNvbmYuc3RkZXJy
X21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpCmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcv
dGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVycgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VhOWNhCi0tLSAvZGV2L251bGwKKysr
IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVk
X3N0ZGVycgpAQCAtMCwwICsxLDUgQEAKK0tjb25maWc6ODogaGVsbG8gd29ybGQgMQorS2NvbmZp
ZzoxODogaGVsbG8gd29ybGQgMworS2NvbmZpZzoyMjogaGVsbG8gd29ybGQgIDQKK0tjb25maWc6
MjY6IGZpbGVuYW1lPUtjb25maWcKK0tjb25maWc6Mjc6IGxpbmVubz0yNwpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0
ZG91dCBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBl
Y3RlZF9zdGRvdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJkZTNhNwot
LS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0
aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQKQEAgLTAsMCArMSBAQAoraGVsbG8gd29ybGQgMApkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5z
aW9uL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9l
eHBhbnNpb24vS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODM4
OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3Mv
Y2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcKQEAgLTAsMCArMSw1IEBACisjIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK1ggPSAkKFkpCitZID0gJChYKQorJChpbmZvICQoWCkp
CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9l
eHBhbnNpb24vX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9j
aXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDE5YmRhMwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0
cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEx
IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisiIiIKK0RldGVjdCBjaXJj
dWxhciB2YXJpYWJsZSBleHBhbnNpb24uCisKK0lmIGEgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdmFy
aWFibGUgcmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpLAoraXQgc2hvdWxkIGZhaWwgd2l0
aCBhbiBlcnJvciBtZXNzYWdlLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBj
b25mLm9sZGFza2NvbmZpZygpICE9IDAKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygn
ZXhwZWN0ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVw
cm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25m
aWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZTY4ZmEKLS0tIC9kZXYvbnVsbAor
KysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24v
ZXhwZWN0ZWRfc3RkZXJyCkBAIC0wLDAgKzEgQEAKK0tjb25maWc6NTogUmVjdXJzaXZlIHZhcmlh
YmxlICdYJyByZWZlcmVuY2VzIGl0c2VsZiAoZXZlbnR1YWxseSkKZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnIGIvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGUzZjQ0NAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnCkBAIC0wLDAgKzEsNDQgQEAKKyMgU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworIyBTaG9ydGhhbmQKK3dhcm5pbmcgPSAk
KHdhcm5pbmctaWYseSwkKDEpKQorCisjIFlvdSBjYW4gbm90IHBhc3MgY29tbWFzIGRpcmVjdGx5
IHRvIGEgZnVuY3Rpb24gc2luY2UgdGhleSBhcmUgdHJlYXRlZCBhcworIyBkZWxpbWl0ZXJzLiBZ
b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIHRyaWNrIHRvIGRvIHNvLgorY29tbWEgICA6PSAsCisk
KHdhcm5pbmcsaGVsbG8kKGNvbW1hKSB3b3JsZCkKKworIyBMaWtlIE1ha2UsIHNpbmdsZSBxdW90
ZXMsIGRvdWJsZSBxdW90ZXMsIHNwYWNlcyBhcmUgdHJlYXRlZCB2ZXJiYXRpbS4KKyMgVGhlIGZv
bGxvd2luZyBwcmludHMgdGhlIHRleHQgYXMtaXMuCiskKHdhcm5pbmcsICAnICIgJyIgICAnICcn
JyAiJyIpCisKKyMgVW5saWtlIE1ha2UsICckJyBoYXMgc3BlY2lhbCBtZWFuaW5nIG9ubHkgd2hl
biBpdCBpcyBmb2xsb3dlZCBieSAnKCcuCisjIE5vIG5lZWQgdG8gZXNjYXBlICckJyBpdHNlbGYu
CiskKHdhcm5pbmcsJCkKKyQod2FybmluZywkJCkKKyQgOj0gMQorJCh3YXJuaW5nLCQoJCkpCisK
KyMgWW91IG5lZWQgYSB0cmljayB0byBlc2NhcGUgJyQnIGZvbGxvd2VkIGJ5ICcoJworIyBUaGUg
Zm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIuIEl0IHNob3VsZCBub3QgYmUgZXhwYW5kZWQg
ZnVydGhlci4KK2RvbGxhciA6PSAkCiskKHdhcm5pbmcsJChkb2xsYXIpKFgpKQorCisjIFlvdSBu
ZWVkIGEgdHJpY2sgdG8gdHJlYXQgdW5iYWxhbmNlZCBwYXJlbnRoZXNlcy4KKyMgVGhlIGZvbGxv
d2luZyBzaG91bGQgcHJpbnQgIigiLgorbGVmdF9wYXJlbiA6PSAoCiskKHdhcm5pbmcsJChsZWZ0
X3BhcmVuKSkKKworIyBBIHNpbXBsZSBleHBhbmRlZCBzaG91bGQgbm90IGJlIGV4cGFuZGVkIG11
bHRpcGxlIHRpbWVzLgorIyBUaGUgZm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIuIEl0IHNo
b3VsZCBub3QgYmUgZXhwYW5kZWQgZnVydGhlci4KK1kgOj0gJChkb2xsYXIpKFgpCiskKHdhcm5p
bmcsJChZKSkKKworIyBUaGUgZm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIgYXMgd2VsbC4K
K1kgPSAkKGRvbGxhcikoWCkKKyQod2FybmluZywkKFkpKQorCisjIFRoZSBmb2xsb3dpbmcgc2hv
dWxkIHByaW50ICIkKCIuCisjIEl0IHNob3VsZCBub3QgYmUgZW1pdCAidW50ZXJtaW5hdGVkIHJl
ZmVyZW5jZSIgZXJyb3IuCit1bnRlcm1pbmF0ZWQgOj0gJChkb2xsYXIpKAorJCh3YXJuaW5nLCQo
dW50ZXJtaW5hdGVkKSkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9j
ZXNzL2VzY2FwZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNz
L2VzY2FwZS9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
ZWU4ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nl
c3MvZXNjYXBlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOCBAQAorIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMAorIiIiCitFc2NhcGUgc2VxdWVuY2UgdGVzdHMuCisiIiIKKworZGVm
IHRlc3QoY29uZik6CisgICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0gMAorICAgIGFz
c2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQpkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVyciBi
L3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwMDk1NwotLS0gL2Rldi9udWxs
CisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9z
dGRlcnIKQEAgLTAsMCArMSwxMCBAQAorS2NvbmZpZzo5OiBoZWxsbywgd29ybGQKK0tjb25maWc6
MTM6ICAgJyAiICciICAgJyAnJycgIiciCitLY29uZmlnOjE3OiAkCitLY29uZmlnOjE4OiAkJAor
S2NvbmZpZzoyMDogMQorS2NvbmZpZzoyNTogJChYKQorS2NvbmZpZzozMDogKAorS2NvbmZpZzoz
NTogJChYKQorS2NvbmZpZzozOTogJChYKQorS2NvbmZpZzo0NDogJCgKZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcgYi9zdXBwb3J0
L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZTJmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zdXBwb3J0
L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnCkBAIC0wLDAgKzEsNTMg
QEAKKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKworIyBTaG9ydGhhbmQKK3dh
cm5pbmcgPSAkKHdhcm5pbmctaWYseSwkKDEpKQorCisjIFNpbXBseSBleHBhbmRlZCB2YXJpYWJs
ZS4KK1ggOj0gMQorU0lNUExFIDo9ICQoWCkKK1ggOj0gMgorJCh3YXJuaW5nLFNJTVBMRSA9ICQo
U0lNUExFKSkKKworIyBSZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJsZS4KK1ggOj0gMQorUkVD
VVJTSVZFID0gJChYKQorWCA6PSAyCiskKHdhcm5pbmcsUkVDVVJTSVZFID0gJChSRUNVUlNJVkUp
KQorCisjIEFwcGVuZCBzb21ldGhpbmcgdG8gYSBzaW1wbHkgZXhwYW5kZWQgdmFyaWFibGUuCitZ
IDo9IDMKK1NJTVBMRSArPSAkKFkpCitZIDo9IDQKKyQod2FybmluZyxTSU1QTEUgPSAkKFNJTVBM
RSkpCisKKyMgQXBwZW5kIHNvbWV0aGluZyB0byBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlh
YmxlLgorWSA6PSAzCitSRUNVUlNJVkUgKz0gJChZKQorWSA6PSA0CiskKHdhcm5pbmcsUkVDVVJT
SVZFID0gJChSRUNVUlNJVkUpKQorCisjIFVzZSArPSBvcGVyYXRvciB0byBhbiB1bmRlZmluZWQg
dmFyaWFibGUuCisjIFRoaXMgd29ya3MgYXMgYSByZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJs
ZS4KK1kgOj0gMworVU5ERUZJTkVEX1ZBUklBQkxFICs9ICQoWSkKK1kgOj0gNAorJCh3YXJuaW5n
LFVOREVGSU5FRF9WQVJJQUJMRSA9ICQoVU5ERUZJTkVEX1ZBUklBQkxFKSkKKworIyBZb3UgY2Fu
IHVzZSB2YXJpYWJsZSByZWZlcmVuY2VzIGZvciB0aGUgbGVmdGhhbmQgc2lkZSBvZiBhc3NpZ25t
ZW50IHN0YXRlbWVudC4KK1ggOj0gQQorWSA6PSBCCiskKFgpJChZKSA6PSA1CiskKHdhcm5pbmcs
QUIgPSAkKEFCKSkKKworIyBVc2VyLWRlZmluZWQgZnVuY3Rpb24uCitncmVldGluZyA9ICQoMSks
IG15IG5hbWUgaXMgJCgyKS4KKyQod2FybmluZywkKGdyZWV0aW5nLEhlbGxvLEpvaG4pKQorCisj
IFRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGlzIG5vdCBjaGVja2VkIGZvciB1c2VyLWRlZmluZWQg
ZnVuY3Rpb25zLgorIyBJZiBzb21lIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwsIGl0IGlzIHVzZWZ1
bCB0byBwYXNzIGZld2VyIHBhcmFtZXRlcnMuCisjICQoMikgd2lsbCBiZSBibGFuayBpbiB0aGlz
IGNhc2UuCiskKHdhcm5pbmcsJChncmVldGluZyxIZWxsbykpCisKKyMgVW5yZWZlcmVuY2VkIHBh
cmFtZXRlcnMgYXJlIGp1c3QgaWdub3JlZC4KKyQod2FybmluZywkKGdyZWV0aW5nLEhlbGxvLEpv
aG4saWdub3JlZCxpZ25vcmVkKSkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9w
cmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3By
ZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZTg4YjE3MAotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0
cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsOCBAQAorIyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAorIiIiCitWYXJpYWJsZSBhbmQgdXNlci1kZWZp
bmVkIGZ1bmN0aW9uIHRlc3RzLgorIiIiCisKK2RlZiB0ZXN0KGNvbmYpOgorICAgIGFzc2VydCBj
b25mLm9sZGFza2NvbmZpZygpID09IDAKKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygn
ZXhwZWN0ZWRfc3RkZXJyJykKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVw
cm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9w
cmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hNDg0MWMzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9ydC9rY29uZmln
L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyCkBAIC0wLDAgKzEsOSBA
QAorS2NvbmZpZzoxMDogU0lNUExFID0gMQorS2NvbmZpZzoxNjogUkVDVVJTSVZFID0gMgorS2Nv
bmZpZzoyMjogU0lNUExFID0gMSAzCitLY29uZmlnOjI4OiBSRUNVUlNJVkUgPSAyIDQKK0tjb25m
aWc6MzU6IFVOREVGSU5FRF9WQVJJQUJMRSA9IDQKK0tjb25maWc6NDE6IEFCID0gNQorS2NvbmZp
Zzo0NTogSGVsbG8sIG15IG5hbWUgaXMgSm9obi4KK0tjb25maWc6NTA6IEhlbGxvLCBteSBuYW1l
IGlzIC4KK0tjb25maWc6NTM6IEhlbGxvLCBteSBuYW1lIGlzIEpvaG4uCmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvdGVzdHMvcHl0ZXN0LmluaSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9w
eXRlc3QuaW5pCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDdjZTgKLS0t
IC9kZXYvbnVsbAorKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHl0ZXN0LmluaQpAQCAtMCww
ICsxLDcgQEAKK1tweXRlc3RdCithZGRvcHRzID0gLS12ZXJib3NlCisKKyMgUHl0ZXN0IHJlcXVp
cmVzIHRoYXQgdGVzdCBmaWxlcyBoYXZlIHVuaXF1ZSBuYW1lcywgYmVjYXVzZSBweXRlc3QgaW1w
b3J0cworIyB0aGVtIGFzIHRvcC1sZXZlbCBtb2R1bGVzLiAgSXQgaXMgc2lsbHkgdG8gcHJlZml4
IG9yIHN1ZmZpeCBhIHRlc3QgZmlsZSB3aXRoCisjIHRoZSBkaXJlY3RvcnkgbmFtZSB0aGF0IGNv
bnRhaW5zIGl0LiAgVXNlIF9faW5pdF9fLnB5IGZvciBhbGwgdGVzdCBmaWxlcy4KK3B5dGhvbl9m
aWxlcyA9IF9faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFu
ZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0
ZWRfY2hvaWNlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM1
MGRlNwotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3Rl
ZF9jaG9pY2UvS2NvbmZpZwpAQCAtMCwwICsxLDM1IEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wCisKK2Nob2ljZQorCXByb21wdCAiY2hvaWNlIgorCitjb25maWcgQQorCWJv
b2wgIkEiCisKK2NvbmZpZyBCCisJYm9vbCAiQiIKKworaWYgQgorY2hvaWNlCisJcHJvbXB0ICJz
dWIgY2hvaWNlIgorCitjb25maWcgQworCWJvb2wgIkMiCisKK2NvbmZpZyBECisJYm9vbCAiRCIK
KworaWYgRAorY2hvaWNlCisJcHJvbXB0ICJzdWJzdWIgY2hvaWNlIgorCitjb25maWcgRQorCWJv
b2wgIkUiCisKK2VuZGNob2ljZQorZW5kaWYgIyBECisKK2VuZGNob2ljZQorZW5kaWYgIyBCCisK
K2VuZGNob2ljZQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVk
X2Nob2ljZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9j
aG9pY2UvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU0
YjJkYgotLS0gL2Rldi9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3Rl
ZF9jaG9pY2UvX19pbml0X18ucHkKQEAgLTAsMCArMSwxNyBAQAorIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMAorIiIiCitTZXQgcmFuZG9tIHZhbHVlcyByZWN1cnNpdmVseSBpbiBu
ZXN0ZWQgY2hvaWNlcy4KKworS2NvbmZpZyBjYW4gY3JlYXRlIGEgY2hvaWNlLWluLWNob2ljZSBz
dHJ1Y3R1cmUgYnkgdXNpbmcgJ2lmJyBzdGF0ZW1lbnQuCityYW5kY29uZmlnIHNob3VsZCBjb3Jy
ZWN0bHkgc2V0IHJhbmRvbSBjaG9pY2UgdmFsdWVzLgorCitSZWxhdGVkIExpbnV4IGNvbW1pdDog
M2I5YTE5ZTA4OTYwZTVjZGFkNTI1Mzk5ODYzNzY1M2U1OTJhM2MyOQorIiIiCisKKworZGVmIHRl
c3QoY29uZik6CisgICAgZm9yIGkgaW4gcmFuZ2UoMjApOgorICAgICAgICBhc3NlcnQgY29uZi5y
YW5kY29uZmlnKCkgPT0gMAorICAgICAgICBhc3NlcnQgKGNvbmYuY29uZmlnX2NvbnRhaW5zKCdl
eHBlY3RlZF9zdGRvdXQwJykgb3IKKyAgICAgICAgICAgICAgICBjb25mLmNvbmZpZ19jb250YWlu
cygnZXhwZWN0ZWRfc3Rkb3V0MScpIG9yCisgICAgICAgICAgICAgICAgY29uZi5jb25maWdfY29u
dGFpbnMoJ2V4cGVjdGVkX3N0ZG91dDInKSkKZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90
ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCBiL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTQ1MGYzCi0tLSAvZGV2L251bGwKKysrIGIvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwCkBAIC0w
LDAgKzEsMiBAQAorQ09ORklHX0E9eQorIyBDT05GSUdfQiBpcyBub3Qgc2V0CmRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91
dDEgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0
ZG91dDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdhYjI5NQotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhw
ZWN0ZWRfc3Rkb3V0MQpAQCAtMCwwICsxLDQgQEAKKyMgQ09ORklHX0EgaXMgbm90IHNldAorQ09O
RklHX0I9eQorQ09ORklHX0M9eQorIyBDT05GSUdfRCBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIg
Yi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91
dDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5ZmY0NwotLS0gL2Rldi9u
dWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0
ZWRfc3Rkb3V0MgpAQCAtMCwwICsxLDUgQEAKKyMgQ09ORklHX0EgaXMgbm90IHNldAorQ09ORklH
X0I9eQorIyBDT05GSUdfQyBpcyBub3Qgc2V0CitDT05GSUdfRD15CitDT05GSUdfRT15CmRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnL3V0aWwuYwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTU4NTM5Ci0tLSAvZGV2L251bGwK
KysrIGIvc3VwcG9ydC9rY29uZmlnL3V0aWwuYwpAQCAtMCwwICsxLDEyOSBAQAorLy8gU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAw
NSBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwMi0yMDA1IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KKyAqLworCisjaW5jbHVk
ZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSAibGtjLmgiCisKKy8qIGZpbGUgYWxyZWFkeSBwcmVzZW50IGluIGxpc3Q/IElmIG5v
dCBhZGQgaXQgKi8KK3N0cnVjdCBmaWxlICpmaWxlX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQor
eworCXN0cnVjdCBmaWxlICpmaWxlOworCisJZm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBm
aWxlID0gZmlsZS0+bmV4dCkgeworCQlpZiAoIXN0cmNtcChuYW1lLCBmaWxlLT5uYW1lKSkgewor
CQkJcmV0dXJuIGZpbGU7CisJCX0KKwl9CisKKwlmaWxlID0geG1hbGxvYyhzaXplb2YoKmZpbGUp
KTsKKwltZW1zZXQoZmlsZSwgMCwgc2l6ZW9mKCpmaWxlKSk7CisJZmlsZS0+bmFtZSA9IHhzdHJk
dXAobmFtZSk7CisJZmlsZS0+bmV4dCA9IGZpbGVfbGlzdDsKKwlmaWxlX2xpc3QgPSBmaWxlOwor
CXJldHVybiBmaWxlOworfQorCisvKiBBbGxvY2F0ZSBpbml0aWFsIGdyb3dhYmxlIHN0cmluZyAq
Lworc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKQoreworCXN0cnVjdCBnc3RyIGdzOworCWdzLnMg
PSB4bWFsbG9jKHNpemVvZihjaGFyKSAqIDY0KTsKKwlncy5sZW4gPSA2NDsKKwlncy5tYXhfd2lk
dGggPSAwOworCXN0cmNweShncy5zLCAiXDAiKTsKKwlyZXR1cm4gZ3M7Cit9CisKKy8qIEZyZWUg
c3RvcmFnZSBmb3IgZ3Jvd2FibGUgc3RyaW5nICovCit2b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3Ry
ICpncykKK3sKKwlpZiAoZ3MtPnMpCisJCWZyZWUoZ3MtPnMpOworCWdzLT5zID0gTlVMTDsKKwln
cy0+bGVuID0gMDsKK30KKworLyogQXBwZW5kIHRvIGdyb3dhYmxlIHN0cmluZyAqLwordm9pZCBz
dHJfYXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqcykKK3sKKwlzaXplX3QgbDsK
KwlpZiAocykgeworCQlsID0gc3RybGVuKGdzLT5zKSArIHN0cmxlbihzKSArIDE7CisJCWlmIChs
ID4gZ3MtPmxlbikgeworCQkJZ3MtPnMgPSB4cmVhbGxvYyhncy0+cywgbCk7CisJCQlncy0+bGVu
ID0gbDsKKwkJfQorCQlzdHJjYXQoZ3MtPnMsIHMpOworCX0KK30KKworLyogQXBwZW5kIHByaW50
ZiBmb3JtYXR0ZWQgc3RyaW5nIHRvIGdyb3dhYmxlIHN0cmluZyAqLwordm9pZCBzdHJfcHJpbnRm
KHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsK
KwljaGFyIHNbMTAwMDBdOyAvKiBiaWcgZW5vdWdoLi4uICovCisJdmFfc3RhcnQoYXAsIGZtdCk7
CisJdnNucHJpbnRmKHMsIHNpemVvZihzKSwgZm10LCBhcCk7CisJc3RyX2FwcGVuZChncywgcyk7
CisJdmFfZW5kKGFwKTsKK30KKworLyogUmV0cmlldmUgdmFsdWUgb2YgZ3Jvd2FibGUgc3RyaW5n
ICovCitjb25zdCBjaGFyICpzdHJfZ2V0KHN0cnVjdCBnc3RyICpncykKK3sKKwlyZXR1cm4gZ3Mt
PnM7Cit9CisKK3ZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpCit7CisJdm9pZCAqcCA9IG1hbGxv
YyhzaXplKTsKKwlpZiAocCkKKwkJcmV0dXJuIHA7CisJZnByaW50ZihzdGRlcnIsICJPdXQgb2Yg
bWVtb3J5LlxuIik7CisJZXhpdCgxKTsKK30KKwordm9pZCAqeGNhbGxvYyhzaXplX3Qgbm1lbWIs
IHNpemVfdCBzaXplKQoreworCXZvaWQgKnAgPSBjYWxsb2Mobm1lbWIsIHNpemUpOworCWlmIChw
KQorCQlyZXR1cm4gcDsKKwlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkuXG4iKTsKKwll
eGl0KDEpOworfQorCit2b2lkICp4cmVhbGxvYyh2b2lkICpwLCBzaXplX3Qgc2l6ZSkKK3sKKwlw
ID0gcmVhbGxvYyhwLCBzaXplKTsKKwlpZiAocCkKKwkJcmV0dXJuIHA7CisJZnByaW50ZihzdGRl
cnIsICJPdXQgb2YgbWVtb3J5LlxuIik7CisJZXhpdCgxKTsKK30KKworY2hhciAqeHN0cmR1cChj
b25zdCBjaGFyICpzKQoreworCWNoYXIgKnA7CisKKwlwID0gc3RyZHVwKHMpOworCWlmIChwKQor
CQlyZXR1cm4gcDsKKwlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBtZW1vcnkuXG4iKTsKKwlleGl0
KDEpOworfQorCitjaGFyICp4c3RybmR1cChjb25zdCBjaGFyICpzLCBzaXplX3QgbikKK3sKKwlj
aGFyICpwOworCisJcCA9IHN0cm5kdXAocywgbik7CisJaWYgKHApCisJCXJldHVybiBwOworCWZw
cmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOworCWV4aXQoMSk7Cit9CmRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcvemNvbmYubGV4LmMgYi9zdXBwb3J0L2tjb25maWcvemNvbmYu
bGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI1ODc3NgotLS0gL2Rl
di9udWxsCisrKyBiL3N1cHBvcnQva2NvbmZpZy96Y29uZi5sZXguYwpAQCAtMCwwICsxLDI4MjAg
QEAKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEgbGV4aWNhbCBz
Y2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FOTkVSCisjZGVm
aW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lP
TiA2CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAxCisjaWYgWVlfRkxFWF9TVUJN
SU5PUl9WRVJTSU9OID4gMAorI2RlZmluZSBGTEVYX0JFVEEKKyNlbmRpZgorCisvKiBGaXJzdCwg
d2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZpYyBpc3N1
ZXMuICovCisKKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8KKyNpbmNsdWRlIDxzdGRp
by5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
c3RkbGliLmg+CisKKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisKKy8qIGZsZXggaW50
ZWdlciB0eXBlIGRlZmluaXRpb25zICovCisKKyNpZm5kZWYgRkxFWElOVF9ICisjZGVmaW5lIEZM
RVhJTlRfSAorCisvKiBDOTkgc3lzdGVtcyBoYXZlIDxpbnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0
ZW1zIG1heSBvciBtYXkgbm90LiAqLworCisjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykg
JiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMCisKKy8qIEM5OSBzYXlzIHRvIGRlZmluZSBf
X1NURENfTElNSVRfTUFDUk9TIGJlZm9yZSBpbmNsdWRpbmcgc3RkaW50LmgsCisgKiBpZiB5b3Ug
d2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAKKyAqLworI2lm
bmRlZiBfX1NURENfTElNSVRfTUFDUk9TCisjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQor
I2VuZGlmCisKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgordHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4
X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgZmxleF91aW50OF90OwordHlwZWRlZiBpbnQxNl90IGZsZXhf
aW50MTZfdDsKK3R5cGVkZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsKK3R5cGVkZWYgaW50MzJf
dCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMyX3Q7CisjZWxzZQor
dHlwZWRlZiBzaWduZWQgY2hhciBmbGV4X2ludDhfdDsKK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhf
aW50MTZfdDsKK3R5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgY2hh
ciBmbGV4X3VpbnQ4X3Q7IAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZf
dDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsZXhfdWludDMyX3Q7CisKKy8qIExpbWl0cyBvZiBp
bnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYgSU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAg
ICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5U
MTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlO
CisjZGVmaW5lIElOVDMyX01JTiAgICAgICAgICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYK
KyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUgSU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQor
I2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAorI2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAg
ICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJTlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAg
ICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNlbmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZp
bmUgVUlOVDhfTUFYICAgICAgICAgICAgICAoMjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZf
TUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAgICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lm
bmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJTlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5Njcy
OTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAhIEM5OSAqLworCisjZW5kaWYgLyogISBGTEVYSU5U
X0ggKi8KKworLyogVE9ETzogdGhpcyBpcyBhbHdheXMgZGVmaW5lZCwgc28gaW5saW5lIGl0ICov
CisjZGVmaW5lIHl5Y29uc3QgY29uc3QKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05V
Q19fID49IDMKKyNkZWZpbmUgeXlub3JldHVybiBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18p
KQorI2Vsc2UKKyNkZWZpbmUgeXlub3JldHVybgorI2VuZGlmCisKKy8qIFJldHVybmVkIHVwb24g
ZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBhIHBvc3Np
Ymx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAorICogaW50
ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5l
Z2F0aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0IHVuc2ln
bmVkIGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUgWVlfU0Nf
VE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBFbnRlciBh
IHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0IHRvIHRha2UgYSBwYXJh
bWV0ZXIsCisgKiBidXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQg
b24gdXMgYnkgdGhlICgpLWxlc3MKKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uCisgKi8KKyNkZWZp
bmUgQkVHSU4gKHl5X3N0YXJ0KSA9IDEgKyAyICoKKworLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50
IHN0YXJ0IHN0YXRlIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQKKyAqIHRv
IEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlTVEFURSBhbGlhcyBpcyBmb3Ig
bGV4CisgKiBjb21wYXRpYmlsaXR5LgorICovCisjZGVmaW5lIFlZX1NUQVJUICgoKHl5X3N0YXJ0
KSAtIDEpIC8gMikKKyNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVAorCisvKiBBY3Rpb24gbnVtYmVy
IGZvciBFT0YgcnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLworI2RlZmluZSBZWV9TVEFU
RV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQorCisvKiBTcGVjaWFs
IGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLworI2RlZmlu
ZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoeXlpbiAgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZG
RVJfQ0hBUiAwCisKKy8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVm
IFlZX0JVRl9TSVpFCisjaWZkZWYgX19pYTY0X18KKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNp
emUgaXMgMTZrLCBub3QgOGsuCisgKiBNb3Jlb3ZlciwgWVlfQlVGX1NJWkUgaXMgMipZWV9SRUFE
X0JVRl9TSVpFIGluIHRoZSBnZW5lcmFsIGNhc2UuCisgKiBEaXR0byBmb3IgdGhlIF9faWE2NF9f
IGNhc2UgYWNjb3JkaW5nbHkuCisgKi8KKyNkZWZpbmUgWVlfQlVGX1NJWkUgMzI3NjgKKyNlbHNl
CisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYgLyogX19pYTY0X18gKi8KKyNlbmRp
ZgorCisvKiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0
YXRlIHBlciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NU
QVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUp
KQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVE
RUZfWVlfQlVGRkVSX1NUQVRFCit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JV
RkZFUl9TVEFURTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVm
aW5lIFlZX1RZUEVERUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5k
aWYKKworZXh0ZXJuIGludCB5eWxlbmc7CisKK2V4dGVybiBGSUxFICp5eWluLCAqeXlvdXQ7CisK
KyNkZWZpbmUgRU9CX0FDVF9DT05USU5VRV9TQ0FOIDAKKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0Zf
RklMRSAxCisjZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyCisKKyAgICAvKiBOb3RlOiBXZSBz
cGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1
c2UgaXQgcmVxdWlyZXMKKyAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhlIGxvY2FsIHZhcmlhYmxl
IHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291bGQgYnJlYWsKKyAgICAg
KiAgICAgICBleGlzdGluZyBzY2FubmVycyB0aGF0IGNhbGwgeXlsZXNzKCkgZnJvbSBPVVRTSURF
IHl5bGV4LgorICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlf
YWN0IGEgZ2xvYmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKKyAgICAgKiAgICAgICBhIDUlIHBl
cmZvcm1hbmNlIGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBp
cworICAgICAqICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIgdmFyaWFibGUt
LSBzbyBpdCBpcyBub3Qgd29ydGggaXQuCisgICAgICovCisgICAgI2RlZmluZSAgWVlfTEVTU19M
SU5FTk8obikgXAorICAgICAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAgaW50IHl5bDtc
CisgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCApXAor
ICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XAorICAgICAgICAgICAgfXdoaWxlKDApCisgICAg
I2RlZmluZSBZWV9MSU5FTk9fUkVXSU5EX1RPKGRzdCkgXAorICAgICAgICAgICAgZG8ge1wKKyAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpwO1wKKyAgICAgICAgICAgICAgICBmb3IgKCBwID0g
eXlfY3AtMTsgcCA+PSAoZHN0KTsgLS1wKVwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCAqcCA9
PSAnXG4nIClcCisgICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wKKyAgICAgICAg
ICAgIH13aGlsZSgwKQorICAgIAorLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRj
aGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLworI2RlZmluZSB5eWxl
c3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAg
ICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCSp5eV9jcCA9ICh5eV9ob2xk
X2NoYXIpOyBcCisJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXAorCQkoeXlfY19idWZfcCkg
PSB5eV9jcCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcCisJCVlZ
X0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8gXAorCQl9IFwKKwl3
aGlsZSAoIDAgKQorCisjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAg
KQorCisjaWZuZGVmIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUKKyNkZWZpbmUgWVlfU1RSVUNU
X1lZX0JVRkZFUl9TVEFURQorc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQorCXsKKwlGSUxFICp5eV9p
bnB1dF9maWxlOworCisJY2hhciAqeXlfY2hfYnVmOwkJLyogaW5wdXQgYnVmZmVyICovCisJY2hh
ciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovCisK
KwkvKiBTaXplIG9mIGlucHV0IGJ1ZmZlciBpbiBieXRlcywgbm90IGluY2x1ZGluZyByb29tIGZv
ciBFT0IKKwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9idWZfc2l6ZTsKKworCS8qIE51
bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9C
CisJICogY2hhcmFjdGVycy4KKwkgKi8KKwlpbnQgeXlfbl9jaGFyczsKKworCS8qIFdoZXRoZXIg
d2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwKKwkgKiBh
bmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxkIGZyZWUoKSBpdCB0bwor
CSAqIGRlbGV0ZSBpdC4KKwkgKi8KKwlpbnQgeXlfaXNfb3VyX2J1ZmZlcjsKKworCS8qIFdoZXRo
ZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZAorCSAq
IGlmIHdlJ3JlIHVzaW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRj
KCkKKwkgKiBpbnN0ZWFkIG9mIGZyZWFkKCksIHRvIG1ha2Ugc3VyZSB3ZSBzdG9wIGZldGNoaW5n
IGlucHV0IGFmdGVyCisJICogZWFjaCBuZXdsaW5lLgorCSAqLworCWludCB5eV9pc19pbnRlcmFj
dGl2ZTsKKworCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0byBiZSBhdCB0aGUgYmVnaW5u
aW5nIG9mIGEgbGluZS4KKwkgKiBJZiBzbywgJ14nIHJ1bGVzIHdpbGwgYmUgYWN0aXZlIG9uIHRo
ZSBuZXh0IG1hdGNoLCBvdGhlcndpc2UKKwkgKiBub3QuCisJICovCisJaW50IHl5X2F0X2JvbDsK
KworICAgIGludCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovCisgICAgaW50
IHl5X2JzX2NvbHVtbjsgLyoqPCBUaGUgY29sdW1uIGNvdW50LiAqLworCisJLyogV2hldGhlciB0
byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICogZW5k
IG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJfc3Rh
dHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9STUFM
IDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRl
eHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9QRU5E
SU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20g
dGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBhIGJ1
bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2libGUg
YmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNo
YW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRoYXQg
dGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5eWlu
IGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVORElO
RyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisKKy8q
IFN0YWNrIG9mIGlucHV0IGJ1ZmZlcnMuICovCitzdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9zdGFj
a190b3AgPSAwOyAvKio8IGluZGV4IG9mIHRvcCBvZiBzdGFjay4gKi8KK3N0YXRpYyBzaXplX3Qg
eXlfYnVmZmVyX3N0YWNrX21heCA9IDA7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCitzdGF0
aWMgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrID0gTlVMTDsgLyoqPCBTdGFjayBh
cyBhbiBhcnJheS4gKi8KKworLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZm
ZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1
ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisg
KiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZ
X0NVUlJFTlRfQlVGRkVSICggKHl5X2J1ZmZlcl9zdGFjaykgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICA/ICh5eV9idWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0gXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFj
cm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QK
KyAqIE5VTEwgb3Igd2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5
LgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSAoeXlfYnVmZmVyX3N0YWNr
KVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldCisKKy8qIHl5X2hvbGRfY2hhciBob2xkcyB0aGUgY2hh
cmFjdGVyIGxvc3Qgd2hlbiB5eXRleHQgaXMgZm9ybWVkLiAqLworc3RhdGljIGNoYXIgeXlfaG9s
ZF9jaGFyOworc3RhdGljIGludCB5eV9uX2NoYXJzOwkJLyogbnVtYmVyIG9mIGNoYXJhY3RlcnMg
cmVhZCBpbnRvIHl5X2NoX2J1ZiAqLworaW50IHl5bGVuZzsKKworLyogUG9pbnRzIHRvIGN1cnJl
bnQgY2hhcmFjdGVyIGluIGJ1ZmZlci4gKi8KK3N0YXRpYyBjaGFyICp5eV9jX2J1Zl9wID0gTlVM
TDsKK3N0YXRpYyBpbnQgeXlfaW5pdCA9IDA7CQkvKiB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlh
bGl6ZSAqLworc3RhdGljIGludCB5eV9zdGFydCA9IDA7CS8qIHN0YXJ0IHN0YXRlIG51bWJlciAq
LworCisvKiBGbGFnIHdoaWNoIGlzIHVzZWQgdG8gYWxsb3cgeXl3cmFwKCkncyB0byBkbyBidWZm
ZXIgc3dpdGNoZXMKKyAqIGluc3RlYWQgb2Ygc2V0dGluZyB1cCBhIGZyZXNoIHl5aW4uICBBIGJp
dCBvZiBhIGhhY2sgLi4uCisgKi8KK3N0YXRpYyBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25f
ZW9mOworCit2b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAgKTsKK3ZvaWQgeXlfc3dp
dGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgICk7CitZWV9CVUZGRVJf
U1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAoRklMRSAqZmlsZSxpbnQgc2l6ZSAgKTsKK3ZvaWQgeXlf
ZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7Cit2b2lkIHl5cHVzaF9idWZmZXJfc3RhdGUgKFlZX0JV
RkZFUl9TVEFURSBuZXdfYnVmZmVyICApOwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHZvaWQg
KTsKKworc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkICk7CitzdGF0aWMg
dm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAodm9pZCApOworc3RhdGljIHZvaWQgeXlfaW5pdF9i
dWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgICk7CisKKyNkZWZpbmUgWVlfRkxV
U0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApCisKK1lZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX2J1ZmZlciAoY2hhciAqYmFzZSx5eV9zaXplX3Qgc2l6ZSAgKTsKK1lZ
X0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgICk7CitZ
WV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVu
ICApOworCit2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgICk7Cit2b2lkICp5eXJlYWxsb2MgKHZv
aWQgKix5eV9zaXplX3QgICk7Cit2b2lkIHl5ZnJlZSAodm9pZCAqICApOworCisjZGVmaW5lIHl5
X25ld19idWZmZXIgeXlfY3JlYXRlX2J1ZmZlcgorCisjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2
ZShpc19pbnRlcmFjdGl2ZSkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeyBc
CisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXAorCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSAgICBcCisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVG
X1NJWkUgKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2Jv
bCkgXAorCXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgeXllbnN1
cmVfYnVmZmVyX3N0YWNrICgpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwK
KyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOyBcCisJfSBc
CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7IFwKKwl9CisK
KyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9s
KQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgeXl3cmFwKCkgKC8qQ09OU1RD
T05EKi8xKQorI2RlZmluZSBZWV9TS0lQX1lZV1JBUAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIg
WVlfQ0hBUjsKKworRklMRSAqeXlpbiA9IE5VTEwsICp5eW91dCA9IE5VTEw7CisKK3R5cGVkZWYg
aW50IHl5X3N0YXRlX3R5cGU7CisKK2V4dGVybiBpbnQgeXlsaW5lbm87CisKK2ludCB5eWxpbmVu
byA9IDE7CisKK2V4dGVybiBjaGFyICp5eXRleHQ7CisjaWZkZWYgeXl0ZXh0X3B0cgorI3VuZGVm
IHl5dGV4dF9wdHIKKyNlbmRpZgorI2RlZmluZSB5eXRleHRfcHRyIHl5dGV4dAorCitzdGF0aWMg
eXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0W11bMjFdID0KKyAgICB7CisgICAgeworICAgICAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLAorICAgICAgICAwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICAxNCwg
ICAxNSwgICAxNiwgICAxNCwgICAxNCwgICAxNywgICAxNCwgICAxNCwgICAxNCwKKyAgICAgICAx
NCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwK
KyAgICAgICAxNAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgMTQsICAgMTUsICAgMTYs
ICAgMTQsICAgMTQsICAgMTcsICAgMTQsICAgMTQsICAgMTQsCisgICAgICAgMTQsICAgMTQsICAg
MTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsCisgICAgICAgMTQK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDE4LCAgIDE5LCAgIDIwLCAgIDE4LCAgIDE4
LCAgIDE4LCAgIDIxLCAgIDE4LCAgIDE4LAorCisgICAgICAgMTgsICAgMTgsICAgMjIsICAgMjMs
ICAgMTgsICAgMjQsICAgMTgsICAgMjUsICAgMTgsICAgMTgsCisgICAgICAgMTgKKyAgICB9LAor
CisgICAgeworICAgICAgIDEzLCAgIDE4LCAgIDE5LCAgIDIwLCAgIDE4LCAgIDE4LCAgIDE4LCAg
IDIxLCAgIDE4LCAgIDE4LAorICAgICAgIDE4LCAgIDE4LCAgIDIyLCAgIDIzLCAgIDE4LCAgIDI0
LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDE4LAorICAgICAgIDE4CisgICAgfSwKKworICAgIHsKKyAg
ICAgICAxMywgICAyNiwgICAyNywgICAyOCwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwg
ICAyNiwKKyAgICAgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAy
NiwgICAyNiwgICAyNiwKKyAgICAgICAyNgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAg
MjYsICAgMjcsICAgMjgsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsCisgICAg
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsCisKKyAgICAgICAyNgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgMjksICAgMjks
ICAgMzAsICAgMjksICAgMzEsICAgMjksICAgMzIsICAgMjksICAgMzEsCisgICAgICAgMjksICAg
MjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMzMsCisgICAg
ICAgMjkKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDI5LCAgIDI5LCAgIDMwLCAgIDI5
LCAgIDMxLCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMxLAorICAgICAgIDI5LCAgIDI5LCAgIDI5LCAg
IDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDMzLAorICAgICAgIDI5CisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAz
OSwgICA0MCwgICA0MSwgICAzOCwKKyAgICAgICA0MiwgICA0MywgICAzNCwgICA0NCwgICA0NCwg
ICAzNCwgICA0NSwgICA0NiwgICA0NywgICA0OCwKKyAgICAgICA0OQorCisgICAgfSwKKworICAg
IHsKKyAgICAgICAxMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAzOSwgICA0MCwg
ICA0MSwgICAzOCwKKyAgICAgICA0MiwgICA0MywgICAzNCwgICA0NCwgICA0NCwgICAzNCwgICA0
NSwgICA0NiwgICA0NywgICA0OCwKKyAgICAgICA0OQorICAgIH0sCisKKyAgICB7CisgICAgICAg
MTMsICAgNTAsICAgNTEsICAgNTIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAs
CisgICAgICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAg
NTAsICAgNTAsCisgICAgICAgNTAKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDUwLCAg
IDUxLCAgIDUyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAorICAgICAgIDUw
LCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLAor
ICAgICAgIDUwCisgICAgfSwKKworICAgIHsKKyAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywg
IC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywKKworICAgICAgLTEzLCAgLTEzLCAg
LTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLAorICAgICAgLTEz
CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0x
NCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwKKyAgICAgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwg
IC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwKKyAgICAgIC0xNAorICAgIH0sCisK
KyAgICB7CisgICAgICAgMTMsICAtMTUsICAgNTMsICAgNTQsICAtMTUsICAtMTUsICAgNTUsICAt
MTUsICAtMTUsICAtMTUsCisgICAgICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUs
ICAtMTUsICAtMTUsICAtMTUsICAtMTUsCisgICAgICAtMTUKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAg
LTE2LAorICAgICAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2
LCAgLTE2LCAgLTE2LAorCisgICAgICAtMTYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAg
IDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAorICAg
ICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAg
IDU2LAorICAgICAgIDU2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0xOCwgIC0xOCwg
IC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwKKyAgICAgIC0xOCwgIC0x
OCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwKKyAgICAg
IC0xOAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMTksICAgNTgsICAtMTksICAtMTks
ICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksCisgICAgICAtMTksICAtMTksICAtMTksICAt
MTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksCisgICAgICAtMTkKKworICAg
IH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAt
MjAsICAtMjAsICAtMjAsICAtMjAsCisgICAgICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAs
ICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsCisgICAgICAtMjAKKyAgICB9LAorCisgICAg
eworICAgICAgIDEzLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgIDU5LCAg
LTIxLCAgLTIxLAorICAgICAgLTIxLCAgLTIxLCAgLTIxLCAgIDU5LCAgLTIxLCAgLTIxLCAgLTIx
LCAgLTIxLCAgLTIxLCAgLTIxLAorICAgICAgLTIxCisgICAgfSwKKworICAgIHsKKyAgICAgICAx
MywgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwK
KyAgICAgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgICA2MCwgIC0y
MiwgIC0yMiwKKyAgICAgIC0yMgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMjMsICAt
MjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAgNTksICAtMjMsICAtMjMsCisKKyAgICAgIC0y
MywgIC0yMywgIC0yMywgICA2MSwgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywK
KyAgICAgIC0yMworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMjQsICAtMjQsICAtMjQs
ICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsCisgICAgICAtMjQsICAtMjQsICAt
MjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAgNjIsICAtMjQsICAtMjQsCisgICAgICAtMjQK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1
LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LAorICAgICAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAg
LTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LAorICAgICAgLTI1CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgICA2MywgICA2MywgIC0yNiwgICA2MywgICA2MywgICA2MywgICA2
MywgICA2MywgICA2MywKKyAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywKKworICAgICAgIDYzCisgICAgfSwKKworICAgIHsKKyAg
ICAgICAxMywgIC0yNywgICA2NCwgICA2NSwgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywg
IC0yNywKKyAgICAgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0y
NywgIC0yNywgIC0yNywKKyAgICAgIC0yNworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAg
NjYsICAtMjgsICAtMjgsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsCisgICAg
ICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAg
NjYsCisgICAgICAgNjYKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDY3LCAgIDY3LCAg
IDY4LCAgIDY3LCAgLTI5LCAgIDY3LCAgLTI5LCAgIDY3LCAgLTI5LAorICAgICAgIDY3LCAgIDY3
LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgLTI5LAorICAgICAg
IDY3CisKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMw
LCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLAorICAgICAgLTMwLCAgLTMwLCAgLTMwLCAg
LTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLAorICAgICAgLTMwCisgICAg
fSwKKworICAgIHsKKyAgICAgICAxMywgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0z
MSwgIC0zMSwgIC0zMSwgIC0zMSwKKyAgICAgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwg
IC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwKKyAgICAgIC0zMQorICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAgNjksICAgNjksICAtMzIsICAgNjksICAgNjksICAgNjksICAgNjksICAg
NjksICAgNjksCisgICAgICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjksICAgNjksCisgICAgICAgNjkKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgIDcwLCAgIDcwLCAgIDcxLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLAor
CisgICAgICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAg
NzAsICAgNzAsCisgICAgICAgNzAKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTM0LCAg
LTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LAorICAgICAgLTM0
LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LAor
ICAgICAgLTM0CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC0zNSwgICA3MiwgIC0zNSwg
IC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwKKyAgICAgIC0zNSwgIC0zNSwgIC0z
NSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwKKyAgICAgIC0zNQor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYs
ICAtMzYsICAtMzYsICAtMzYsICAtMzYsCisgICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAt
MzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsCisKKyAgICAgIC0zNgorICAgIH0sCisK
KyAgICB7CisgICAgICAgMTMsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAt
MzcsICAtMzcsICAtMzcsCisgICAgICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcs
ICAtMzcsICAgNzMsICAtMzcsICAtMzcsCisgICAgICAtMzcKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAg
LTM4LAorICAgICAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4
LCAgLTM4LCAgLTM4LAorICAgICAgLTM4CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA3
NCwgICA3NCwgIC0zOSwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwKKyAgICAg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwKKyAgICAgICA3NAorCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC00MCwgIC00MCwg
IC00MCwgIC00MCwgIC00MCwgIC00MCwgICA3NSwgIC00MCwgIC00MCwKKyAgICAgIC00MCwgIC00
MCwgIC00MCwgICA3NSwgICA3NSwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwKKyAgICAg
IC00MAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNDEsICAtNDEsICAtNDEsICAtNDEs
ICAtNDEsICAtNDEsICAtNDEsICAgNzYsICAtNDEsCisgICAgICAtNDEsICAtNDEsICAtNDEsICAt
NDEsICAtNDEsICAtNDEsICAtNDEsICAtNDEsICAtNDEsICAtNDEsCisgICAgICAtNDEKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQy
LCAgLTQyLCAgLTQyLCAgLTQyLAorICAgICAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAg
LTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLAorICAgICAgLTQyCisgICAgfSwKKworICAgIHsK
KyAgICAgICAxMywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00
MywgIC00MywKKworICAgICAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQz
LCAgLTQzLCAgLTQzLCAgLTQzLAorICAgICAgLTQzCisgICAgfSwKKworICAgIHsKKyAgICAgICAx
MywgIC00NCwgIC00NCwgIC00NCwgIC00NCwgIC00NCwgIC00NCwgICA3NSwgIC00NCwgIC00NCwK
KyAgICAgIC00NCwgIC00NCwgIC00NCwgICA3NywgICA3NywgIC00NCwgIC00NCwgIC00NCwgIC00
NCwgIC00NCwKKyAgICAgIC00NAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNDUsICAt
NDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsCisgICAgICAtNDUs
ICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAgNzgsICAtNDUsICAtNDUsCisg
ICAgICAtNDUKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ2LCAgLTQ2LCAgLTQ2LCAg
LTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LAorICAgICAgLTQ2LCAgLTQ2LCAgLTQ2
LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LAorCisgICAgICAtNDYK
KyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3
LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LAorICAgICAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAg
LTQ3LCAgLTQ3LCAgLTQ3LCAgIDc5LCAgLTQ3LCAgLTQ3LAorICAgICAgLTQ3CisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgIC00OCwgIC00OCwgICA4MCwgIC00OCwgIC00OCwgIC00OCwgIC00
OCwgIC00OCwgIC00OCwKKyAgICAgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwg
IC00OCwgIC00OCwgIC00OCwgIC00OCwKKyAgICAgIC00OAorICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAt
NDksCisgICAgICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDks
ICAtNDksICAtNDksCisgICAgICAgODEKKworICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAg
ODIsICAgODMsICAtNTAsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsCisgICAg
ICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAg
ODIsCisgICAgICAgODIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTUxLCAgLTUxLCAg
LTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLAorICAgICAgLTUxLCAgLTUx
LCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLAorICAgICAg
LTUxCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC01MiwgIC01MiwgIC01MiwgIC01Miwg
IC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwKKyAgICAgIC01MiwgIC01MiwgIC01MiwgIC01
MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwKKyAgICAgIC01MgorICAgIH0s
CisKKyAgICB7CisgICAgICAgMTMsICAtNTMsICAgNTMsICAgNTQsICAtNTMsICAtNTMsICAgNTUs
ICAtNTMsICAtNTMsICAtNTMsCisKKyAgICAgIC01MywgIC01MywgIC01MywgIC01MywgIC01Mywg
IC01MywgIC01MywgIC01MywgIC01MywgIC01MywKKyAgICAgIC01MworICAgIH0sCisKKyAgICB7
CisgICAgICAgMTMsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAt
NTQsICAtNTQsCisgICAgICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQs
ICAtNTQsICAtNTQsICAtNTQsCisgICAgICAtNTQKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LAor
ICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2
LCAgIDU2LAorICAgICAgIDU2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA1NiwgICA1
NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKyAgICAgICA1Niwg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwKKwor
ICAgICAgIDU2CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC01NywgIC01NywgIC01Nywg
IC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywKKyAgICAgIC01NywgIC01NywgIC01
NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywKKyAgICAgIC01Nwor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNTgsICAgNTgsICAtNTgsICAtNTgsICAtNTgs
ICAtNTgsICAtNTgsICAtNTgsICAtNTgsCisgICAgICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAt
NTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsCisgICAgICAtNTgKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgIDU5
LCAgLTU5LCAgLTU5LAorICAgICAgLTU5LCAgLTU5LCAgLTU5LCAgIDU5LCAgLTU5LCAgLTU5LCAg
LTU5LCAgLTU5LCAgLTU5LCAgLTU5LAorICAgICAgLTU5CisKKyAgICB9LAorCisgICAgeworICAg
ICAgIDEzLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAg
LTYwLAorICAgICAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYw
LCAgLTYwLCAgLTYwLAorICAgICAgLTYwCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC02
MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgICA1OSwgIC02MSwgIC02MSwKKyAgICAg
IC02MSwgIC02MSwgIC02MSwgICA2MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02
MSwKKyAgICAgIC02MQorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNjIsICAtNjIsICAt
NjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsCisgICAgICAtNjIsICAtNjIs
ICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsCisgICAgICAt
NjIKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgIDYzLCAgIDYzLCAgLTYzLCAgIDYzLCAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLAorCisgICAgICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisgICAgICAgNjMKKyAgICB9
LAorCisgICAgeworICAgICAgIDEzLCAgLTY0LCAgIDY0LCAgIDY1LCAgLTY0LCAgLTY0LCAgLTY0
LCAgLTY0LCAgLTY0LCAgLTY0LAorICAgICAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAg
LTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LAorICAgICAgLTY0CisgICAgfSwKKworICAgIHsK
KyAgICAgICAxMywgICA2NiwgIC02NSwgIC02NSwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2
NiwgICA2NiwKKyAgICAgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2Niwg
ICA2NiwgICA2NiwgICA2NiwKKyAgICAgICA2NgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMs
ICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsCisg
ICAgICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYs
ICAtNjYsCisKKyAgICAgIC02NgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgNjcsICAg
NjcsICAgNjgsICAgNjcsICAtNjcsICAgNjcsICAtNjcsICAgNjcsICAtNjcsCisgICAgICAgNjcs
ICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAtNjcsCisg
ICAgICAgNjcKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTY4LCAgLTY4LCAgLTY4LCAg
LTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LAorICAgICAgLTY4LCAgLTY4LCAgLTY4
LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LAorICAgICAgLTY4Cisg
ICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA2OSwgICA2OSwgIC02OSwgICA2OSwgICA2OSwg
ICA2OSwgICA2OSwgICA2OSwgICA2OSwKKyAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2
OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwKKyAgICAgICA2OQorCisgICAgfSwKKwor
ICAgIHsKKyAgICAgICAxMywgIC03MCwgIC03MCwgICA3MSwgIC03MCwgIC03MCwgIC03MCwgIC03
MCwgIC03MCwgIC03MCwKKyAgICAgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwgIC03MCwg
IC03MCwgIC03MCwgIC03MCwgIC03MCwKKyAgICAgIC03MAorICAgIH0sCisKKyAgICB7CisgICAg
ICAgMTMsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAt
NzEsCisgICAgICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEs
ICAtNzEsICAtNzEsCisgICAgICAtNzEKKyAgICB9LAorCisgICAgeworICAgICAgIDEzLCAgLTcy
LCAgIDcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLAorICAgICAg
LTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcy
LAorICAgICAgLTcyCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03MywgIC03MywgIC03
MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywKKworICAgICAgLTczLCAgLTcz
LCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLAorICAgICAg
LTczCisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgICA3NCwgICA3NCwgIC03NCwgICA3NCwg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3
NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwKKyAgICAgICA3NAorICAgIH0s
CisKKyAgICB7CisgICAgICAgMTMsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUs
ICAgNzUsICAtNzUsICAtNzUsCisgICAgICAtNzUsICAtNzUsICAtNzUsICAgNzUsICAgNzUsICAt
NzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsCisgICAgICAtNzUKKyAgICB9LAorCisgICAgewor
ICAgICAgIDEzLCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2
LCAgLTc2LAorICAgICAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAg
LTc2LCAgLTc2LCAgLTc2LAorCisgICAgICAtNzYKKyAgICB9LAorCisgICAgeworICAgICAgIDEz
LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgIDc1LCAgLTc3LCAgLTc3LAor
ICAgICAgLTc3LCAgLTc3LCAgLTc3LCAgIDc3LCAgIDc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3
LCAgLTc3LAorICAgICAgLTc3CisgICAgfSwKKworICAgIHsKKyAgICAgICAxMywgIC03OCwgIC03
OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwKKyAgICAgIC03OCwg
IC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwKKyAg
ICAgIC03OAorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtNzksICAtNzksICAtNzksICAt
NzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksCisgICAgICAtNzksICAtNzksICAtNzks
ICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksCisgICAgICAtNzkKKwor
ICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAs
ICAtODAsICAtODAsICAtODAsICAtODAsCisgICAgICAtODAsICAtODAsICAtODAsICAtODAsICAt
ODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsCisgICAgICAtODAKKyAgICB9LAorCisg
ICAgeworICAgICAgIDEzLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgx
LCAgLTgxLCAgLTgxLAorICAgICAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAg
LTgxLCAgLTgxLCAgLTgxLCAgLTgxLAorICAgICAgLTgxCisgICAgfSwKKworICAgIHsKKyAgICAg
ICAxMywgICA4MiwgICA4MywgIC04MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4
MiwKKyAgICAgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4Miwg
ICA4MiwgICA4MiwKKyAgICAgICA4MgorICAgIH0sCisKKyAgICB7CisgICAgICAgMTMsICAgODMs
ICAgODMsICAtODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsCisKKyAgICAg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4
MywKKyAgICAgICA4MworICAgIH0sCisKKyAgICB9IDsKKworc3RhdGljIHl5X3N0YXRlX3R5cGUg
eXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2b2lkICk7CitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90
cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICk7CitzdGF0aWMgaW50
IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCApOworc3RhdGljIHZvaWQgeXlub3JldHVybiB5eV9m
YXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgICk7CisKKy8qIERvbmUgYWZ0ZXIgdGhlIGN1
cnJlbnQgcGF0dGVybiBoYXMgYmVlbiBtYXRjaGVkIGFuZCBiZWZvcmUgdGhlCisgKiBjb3JyZXNw
b25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0LgorICovCisjZGVmaW5lIFlZX0RPX0JFRk9S
RV9BQ1RJT04gXAorCSh5eXRleHRfcHRyKSA9IHl5X2JwOyBcCisJeXlsZW5nID0gKGludCkgKHl5
X2NwIC0geXlfYnApOyBcCisJKHl5X2hvbGRfY2hhcikgPSAqeXlfY3A7IFwKKwkqeXlfY3AgPSAn
XDAnOyBcCisJKHl5X2NfYnVmX3ApID0geXlfY3A7CisKKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDQ3
CisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgNDgKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2Vk
IGluIHRoaXMgc2Nhbm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLwor
c3RydWN0IHl5X3RyYW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4
X2ludDMyX3QgeXlfbnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNj
ZXB0Wzg0XSA9CisgICAgeyAgIDAsCisgICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisgICAgICAgIDAsICAgIDAsICAgNDgsICAg
IDUsICAgIDQsICAgIDIsICAgIDMsICAgMTIsICAgMTEsICAgMTMsCisgICAgICAgIDcsICAgMTIs
ICAgIDYsICAgMTIsICAgIDgsICAgNDYsICAgNDMsICAgNDUsICAgMzgsICAgNDIsCisgICAgICAg
NDEsICAgMzYsICAgNDAsICAgMzUsICAgMzQsICAgMjksICAgMjEsICAgMjgsICAgMzIsICAgMzEs
CisgICAgICAgMzUsICAgMTksICAgMjAsICAgMzAsICAgMjYsICAgMjIsICAgMjcsICAgMzUsICAg
MzUsICAgMTQsCisgICAgICAgMTYsICAgMTUsICAgIDQsICAgIDIsICAgIDMsICAgIDMsICAgIDEs
ICAgMTEsICAgIDcsICAgMTAsCisgICAgICAgIDYsICAgIDksICAgNDYsICAgNDMsICAgNDUsICAg
NDQsICAgMzgsICAgMzcsICAgMzYsICAgNDAsCisgICAgICAgMzksICAgMzQsICAgMjMsICAgMzIs
ICAgMzEsICAgMTcsICAgMzAsICAgMjQsICAgMjUsICAgMzMsCisgICAgICAgMTgsICAgMTQsICAg
MTQKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgWVlfQ0hBUiB5eV9lY1syNTZdID0KKyAgICB7
ICAgMCwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMiwgICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgNCwg
ICAgNSwgICAgNiwgICAgNywgICAgMSwgICAgOCwgICAgOSwgICAxMCwKKyAgICAgICAxMSwgICAg
MSwgICAxMiwgICAgMSwgICAxMywgICAxNCwgICAxNCwgICAxMywgICAxMywgICAxMywKKyAgICAg
ICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxNSwgICAgMSwgICAx
NiwKKyAgICAgICAxNywgICAxOCwgICAgMSwgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywg
ICAxMywgICAxMywKKyAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAx
MywgICAxMywgICAxMywgICAxMywKKyAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywgICAxMywgICAxMywKKyAgICAgICAgMSwgICAxOSwgICAgMSwgICAg
MSwgICAxMywgICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywKKworICAgICAgIDEzLCAgIDEz
LCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLAorICAgICAg
IDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEz
LAorICAgICAgIDEzLCAgIDEzLCAgICAxLCAgIDIwLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAor
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworLyog
VGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCitzdGF0
aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzQ4XSA9CisgICAg
eyAgIDAsCisxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAw
LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAw
LCAwLCAwLCAxLCAwLCAxLCAKKyAgICAwLCAwLCAxLCAwLCAxLCAxLCAwLCAwLCAgICAgfTsKKwor
ZXh0ZXJuIGludCB5eV9mbGV4X2RlYnVnOworaW50IHl5X2ZsZXhfZGVidWcgPSAwOworCisvKiBU
aGUgaW50ZW50IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaAorICog
YW55IHVzZXMgb2YgUkVKRUNUIHdoaWNoIGZsZXggbWlzc2VkLgorICovCisjZGVmaW5lIFJFSkVD
VCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkCisjZGVmaW5lIHl5bW9yZSgpIHl5bW9yZV91
c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgWVlfTU9SRV9BREogMAorI2RlZmluZSBZWV9S
RVNUT1JFX1lZX01PUkVfT0ZGU0VUCitjaGFyICp5eXRleHQ7CisKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNl
ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8
YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs
dWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K
KworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5lIFNUQVJUX1NUUlNJWkUJMTYKKworc3RhdGlj
IHN0cnVjdCB7CisJc3RydWN0IGZpbGUgKmZpbGU7CisJaW50IGxpbmVubzsKK30gY3VycmVudF9w
b3M7CisKK3N0YXRpYyBjaGFyICp0ZXh0Oworc3RhdGljIGludCB0ZXh0X3NpemUsIHRleHRfYXNp
emU7CisKK3N0cnVjdCBidWZmZXIgeworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKwlZWV9CVUZG
RVJfU1RBVEUgc3RhdGU7Cit9OworCitzdHJ1Y3QgYnVmZmVyICpjdXJyZW50X2J1ZjsKKworc3Rh
dGljIGludCBsYXN0X3RzLCBmaXJzdF90czsKKworc3RhdGljIGNoYXIgKmV4cGFuZF90b2tlbihj
b25zdCBjaGFyICppbiwgc2l6ZV90IG4pOworc3RhdGljIHZvaWQgYXBwZW5kX2V4cGFuZGVkX3N0
cmluZyhjb25zdCBjaGFyICppbik7CitzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOwor
c3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsKKworc3RhdGljIHZvaWQgbmV3X3N0cmlu
Zyh2b2lkKQoreworCXRleHQgPSB4bWFsbG9jKFNUQVJUX1NUUlNJWkUpOworCXRleHRfYXNpemUg
PSBTVEFSVF9TVFJTSVpFOworCXRleHRfc2l6ZSA9IDA7CisJKnRleHQgPSAwOworfQorCitzdGF0
aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJaW50
IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7CisJaWYgKG5ld19zaXplID4gdGV4dF9h
c2l6ZSkgeworCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsKKwkJbmV3X3NpemUgJj0g
LVNUQVJUX1NUUlNJWkU7CisJCXRleHQgPSB4cmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7CisJCXRl
eHRfYXNpemUgPSBuZXdfc2l6ZTsKKwl9CisJbWVtY3B5KHRleHQgKyB0ZXh0X3NpemUsIHN0ciwg
c2l6ZSk7CisJdGV4dF9zaXplICs9IHNpemU7CisJdGV4dFt0ZXh0X3NpemVdID0gMDsKK30KKwor
c3RhdGljIHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJ
dGV4dCA9IHhtYWxsb2Moc2l6ZSArIDEpOworCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOworCXRl
eHRbc2l6ZV0gPSAwOworfQorCitzdGF0aWMgdm9pZCB3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKGNo
YXIgY2hyKQoreworCWZwcmludGYoc3RkZXJyLAorCSAgICAgICAgIiVzOiVkOndhcm5pbmc6IGln
bm9yaW5nIHVuc3VwcG9ydGVkIGNoYXJhY3RlciAnJWMnXG4iLAorCSAgICAgICAgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgY2hyKTsKK30KKworI2RlZmluZSBJTklUSUFMIDAKKyNk
ZWZpbmUgQ09NTUFORCAxCisjZGVmaW5lIEhFTFAgMgorI2RlZmluZSBTVFJJTkcgMworI2RlZmlu
ZSBQQVJBTSA0CisjZGVmaW5lIEFTU0lHTl9WQUwgNQorCisjaWZuZGVmIFlZX05PX1VOSVNURF9I
CisvKiBTcGVjaWFsIGNhc2UgZm9yICJ1bmlzdGQuaCIsIHNpbmNlIGl0IGlzIG5vbi1BTlNJLiBX
ZSBpbmNsdWRlIGl0IHdheQorICogZG93biBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdXNlcidz
IHNlY3Rpb24gMSB0byBoYXZlIGJlZW4gc2Nhbm5lZCBmaXJzdC4KKyAqIFRoZSB1c2VyIGhhcyBh
IGNoYW5jZSB0byBvdmVycmlkZSBpdCB3aXRoIGFuIG9wdGlvbi4KKyAqLworI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2VuZGlmCisKKyNpZm5kZWYgWVlfRVhUUkFfVFlQRQorI2RlZmluZSBZWV9FWFRS
QV9UWVBFIHZvaWQgKgorI2VuZGlmCisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh2b2lk
ICk7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFyZSBtYWRl
IHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICovCisK
K2ludCB5eWxleF9kZXN0cm95ICh2b2lkICk7CisKK2ludCB5eWdldF9kZWJ1ZyAodm9pZCApOwor
Cit2b2lkIHl5c2V0X2RlYnVnIChpbnQgZGVidWdfZmxhZyAgKTsKKworWVlfRVhUUkFfVFlQRSB5
eWdldF9leHRyYSAodm9pZCApOworCit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVz
ZXJfZGVmaW5lZCAgKTsKKworRklMRSAqeXlnZXRfaW4gKHZvaWQgKTsKKwordm9pZCB5eXNldF9p
biAgKEZJTEUgKiBfaW5fc3RyICApOworCitGSUxFICp5eWdldF9vdXQgKHZvaWQgKTsKKwordm9p
ZCB5eXNldF9vdXQgIChGSUxFICogX291dF9zdHIgICk7CisKKwkJCWludCB5eWdldF9sZW5nICh2
b2lkICk7CisKK2NoYXIgKnl5Z2V0X3RleHQgKHZvaWQgKTsKKworaW50IHl5Z2V0X2xpbmVubyAo
dm9pZCApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IF9saW5lX251bWJlciAgKTsKKworLyog
TWFjcm9zIGFmdGVyIHRoaXMgcG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVm
aW5pdGlvbnMgaW4KKyAqIHNlY3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQ
CisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAodm9pZCApOworI2Vs
c2UKK2V4dGVybiBpbnQgeXl3cmFwICh2b2lkICk7CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVm
IFlZX05PX1VOUFVUCisgICAgCisgICAgc3RhdGljIHZvaWQgeXl1bnB1dCAoaW50IGMsY2hhciAq
YnVmX3B0ciAgKTsKKyAgICAKKyNlbmRpZgorCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCApOworI2VuZGlm
CisKKyNpZmRlZiBZWV9ORUVEX1NUUkxFTgorc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXlj
b25zdCBjaGFyICogKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVUCisKKyNpZmRlZiBf
X2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh2b2lkICk7CisjZWxzZQorc3RhdGljIGlu
dCBpbnB1dCAodm9pZCApOworI2VuZGlmCisKKyNlbmRpZgorCisvKiBBbW91bnQgb2Ygc3R1ZmYg
dG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJWkUK
KyNpZmRlZiBfX2lhNjRfXworLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5v
dCA4ayAqLworI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0CisjZWxzZQorI2RlZmluZSBZ
WV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZiAvKiBfX2lhNjRfXyAqLworI2VuZGlmCisKKy8q
IENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRw
dXQuICovCisjaWZuZGVmIEVDSE8KKy8qIFRoaXMgdXNlZCB0byBiZSBhbiBmcHV0cygpLCBidXQg
c2luY2UgdGhlIHN0cmluZyBtaWdodCBjb250YWluIE5VTCdzLAorICogd2Ugbm93IHVzZSBmd3Jp
dGUoKS4KKyAqLworI2RlZmluZSBFQ0hPIGRvIHsgaWYgKGZ3cml0ZSggeXl0ZXh0LCAoc2l6ZV90
KSB5eWxlbmcsIDEsIHl5b3V0ICkpIHt9IH0gd2hpbGUgKDApCisjZW5kaWYKKworLyogR2V0cyBp
bnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFk
LCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8KKyNpZm5kZWYg
WVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXAorCWVycm5v
PTA7IFwKKwl3aGlsZSAoIChyZXN1bHQgPSAoaW50KSByZWFkKCBmaWxlbm8oeXlpbiksIGJ1Ziwg
bWF4X3NpemUgKSkgPCAwICkgXAorCXsgXAorCQlpZiggZXJybm8gIT0gRUlOVFIpIFwKKwkJeyBc
CisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwK
KwkJCWJyZWFrOyBcCisJCX0gXAorCQllcnJubz0wOyBcCisJCWNsZWFyZXJyKHl5aW4pOyBcCisJ
fVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0
IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2FudCBh
biBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCisg
KiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRz
LgorICovCisjaWZuZGVmIHl5dGVybWluYXRlCisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJu
IFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1j
b25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisjaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNk
ZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAyNQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFs
IGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRBTF9FUlJPUgorI2RlZmluZSBZWV9GQVRBTF9FUlJP
Uihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgKQorI2VuZGlmCisKKy8qIGVuZCB0YWJsZXMgc2Vy
aWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBwcm90b3R5cGVzICovCisKKy8qIERlZmF1bHQgZGVj
bGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBjYW4K
KyAqIGVhc2lseSBhZGQgcGFyYW1ldGVycy4KKyAqLworI2lmbmRlZiBZWV9ERUNMCisjZGVmaW5l
IFlZX0RFQ0xfSVNfT1VSUyAxCisKK2V4dGVybiBpbnQgeXlsZXggKHZvaWQpOworCisjZGVmaW5l
IFlZX0RFQ0wgaW50IHl5bGV4ICh2b2lkKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisKKy8qIENv
ZGUgZXhlY3V0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBh
bmQgeXlsZW5nCisgKiBoYXZlIGJlZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VTRVJfQUNU
SU9OCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVjdXRlZCBh
dCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUgWVlf
QlJFQUsgLypMSU5URUQqL2JyZWFrOworI2VuZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBc
CisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRoZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2gg
ZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZX0RFQ0wKK3sKKwl5eV9zdGF0ZV90eXBlIHl5X2N1
cnJlbnRfc3RhdGU7CisJY2hhciAqeXlfY3AsICp5eV9icDsKKwlpbnQgeXlfYWN0OworICAgIAor
CWlmICggISh5eV9pbml0KSApCisJCXsKKwkJKHl5X2luaXQpID0gMTsKKworI2lmZGVmIFlZX1VT
RVJfSU5JVAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgKHl5X3N0YXJ0KSAp
CisJCQkoeXlfc3RhcnQpID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEg
eXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0g
c3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXl5ZW5zdXJlX2J1
ZmZlcl9zdGFjayAoKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJCQkJeXlfY3Jl
YXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7CisJCX0KKworCQl5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSggKTsKKwkJfQorCisJeworCisJaW50IHN0ciA9IDA7CisJaW50IHRzLCBpOworCisJd2hp
bGUgKCAvKkNPTlNUQ09ORCovMSApCQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFj
aGVkICovCisJCXsKKwkJeXlfY3AgPSAoeXlfY19idWZfcCk7CisKKwkJLyogU3VwcG9ydCBvZiB5
eXRleHQuICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOworCisJCS8qIHl5X2JwIHBvaW50
cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUg
Y3VycmVudCBydW4uCisJCSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSAoeXlfc3RhcnQpOworeXlfbWF0Y2g6CisJCXdoaWxlICggKHl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfY3VycmVudF9zdGF0ZV1bIHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldICBd
KSA+IDAgKQorCQkJKyt5eV9jcDsKKworCQl5eV9jdXJyZW50X3N0YXRlID0gLXl5X2N1cnJlbnRf
c3RhdGU7CisKK3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVu
dF9zdGF0ZV07CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworCQlpZiAoIHl5X2FjdCAhPSBZ
WV9FTkRfT0ZfQlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKKwkJCXsK
KwkJCWludCB5eWw7CisJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKwkJ
CQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQorCQkJCQkKKyAgICB5eWxpbmVubysrOworOwor
CQkJfQorCitkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBF
T0YgYWN0aW9ucy4gKi8KKworCQlzd2l0Y2ggKCB5eV9hY3QgKQorCXsgLyogYmVnaW5uaW5nIG9m
IGFjdGlvbiBzd2l0Y2ggKi8KK2Nhc2UgMToKKy8qIHJ1bGUgMSBjYW4gbWF0Y2ggZW9sICovCitj
YXNlIDI6CisvKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAoreworCXJl
dHVybiBUX0VPTDsKK30KKwlZWV9CUkVBSworY2FzZSAzOgorWVlfUlVMRV9TRVRVUAorCisJWVlf
QlJFQUsKK2Nhc2UgNDoKK1lZX1JVTEVfU0VUVVAKK3sKKwlCRUdJTihDT01NQU5EKTsKK30KKwlZ
WV9CUkVBSworY2FzZSA1OgorWVlfUlVMRV9TRVRVUAoreworCXVucHV0KHl5dGV4dFswXSk7CisJ
QkVHSU4oQ09NTUFORCk7Cit9CisJWVlfQlJFQUsKKworY2FzZSA2OgorWVlfUlVMRV9TRVRVUAor
eworCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwg
eXlsZW5nKTsKKwkJY3VycmVudF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsKKwkJY3VycmVudF9w
b3MubGluZW5vID0geXlsaW5lbm87CisJCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9DT01NQU5E
KSB7CisJCQlCRUdJTihQQVJBTSk7CisJCQl5eWx2YWwuaWQgPSBpZDsKKwkJCXJldHVybiBpZC0+
dG9rZW47CisJCX0KKwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsKKwkJeXlsdmFsLnN0
cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1ZBUklBQkxFOworCX0KKwlZWV9CUkVBSworY2FzZSA3
OgorWVlfUlVMRV9TRVRVUAoreworCQkvKiB0aGlzIHRva2VuIGluY2x1ZGVzIGF0IGxlYXN0IG9u
ZSAnJCcgKi8KKwkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRleHQsIHl5bGVuZyk7
CisJCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpCisJCQlyZXR1cm4gVF9WQVJJQUJMRTsKKwkJ
ZnJlZSh5eWx2YWwuc3RyaW5nKTsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VU
VVAKK3sgQkVHSU4oQVNTSUdOX1ZBTCk7IHl5bHZhbC5mbGF2b3IgPSBWQVJfUkVDVVJTSVZFOyBy
ZXR1cm4gVF9BU1NJR047IH0KKwlZWV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreyBC
RUdJTihBU1NJR05fVkFMKTsgeXlsdmFsLmZsYXZvciA9IFZBUl9TSU1QTEU7IHJldHVybiBUX0FT
U0lHTjsgfQorCVlZX0JSRUFLCitjYXNlIDEwOgorWVlfUlVMRV9TRVRVUAoreyBCRUdJTihBU1NJ
R05fVkFMKTsgeXlsdmFsLmZsYXZvciA9IFZBUl9BUFBFTkQ7IHJldHVybiBUX0FTU0lHTjsgfQor
CVlZX0JSRUFLCitjYXNlIDExOgorWVlfUlVMRV9TRVRVUAorCisJWVlfQlJFQUsKK2Nhc2UgMTI6
CitZWV9SVUxFX1NFVFVQCit3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOworCVlZX0JS
RUFLCitjYXNlIDEzOgorLyogcnVsZSAxMyBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQ
Cit7CisJCUJFR0lOKElOSVRJQUwpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCVlZX0JSRUFLCisK
K2Nhc2UgMTQ6CitZWV9SVUxFX1NFVFVQCit7CisJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVu
Zyk7CisJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQlyZXR1cm4gVF9BU1NJR05fVkFMOworCX0K
KwlZWV9CUkVBSworY2FzZSAxNToKKy8qIHJ1bGUgMTUgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVM
RV9TRVRVUAoreyBCRUdJTihJTklUSUFMKTsgcmV0dXJuIFRfRU9MOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTY6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworCitjYXNlIDE3OgorWVlfUlVMRV9T
RVRVUAorcmV0dXJuIFRfQU5EOworCVlZX0JSRUFLCitjYXNlIDE4OgorWVlfUlVMRV9TRVRVUAor
cmV0dXJuIFRfT1I7CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCityZXR1cm4g
VF9PUEVOX1BBUkVOOworCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAorcmV0dXJu
IFRfQ0xPU0VfUEFSRU47CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCityZXR1
cm4gVF9OT1Q7CisJWVlfQlJFQUsKK2Nhc2UgMjI6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9F
UVVBTDsKKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX1VORVFV
QUw7CisJWVlfQlJFQUsKK2Nhc2UgMjQ6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9MRVNTX0VR
VUFMOworCVlZX0JSRUFLCitjYXNlIDI1OgorWVlfUlVMRV9TRVRVUAorcmV0dXJuIFRfR1JFQVRF
Ul9FUVVBTDsKKwlZWV9CUkVBSworY2FzZSAyNjoKK1lZX1JVTEVfU0VUVVAKK3JldHVybiBUX0xF
U1M7CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxFX1NFVFVQCityZXR1cm4gVF9HUkVBVEVS
OworCVlZX0JSRUFLCitjYXNlIDI4OgorWVlfUlVMRV9TRVRVUAoreworCQlzdHIgPSB5eXRleHRb
MF07CisJCW5ld19zdHJpbmcoKTsKKwkJQkVHSU4oU1RSSU5HKTsKKwl9CisJWVlfQlJFQUsKK2Nh
c2UgMjk6CisvKiBydWxlIDI5IGNhbiBtYXRjaCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK0JFR0lO
KElOSVRJQUwpOyByZXR1cm4gVF9FT0w7CisJWVlfQlJFQUsKK2Nhc2UgMzA6CitZWV9SVUxFX1NF
VFVQCit7CisJCWNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoeXl0
ZXh0LCB5eWxlbmcpOworCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfUEFSQU0pIHsKKwkJCXl5
bHZhbC5pZCA9IGlkOworCQkJcmV0dXJuIGlkLT50b2tlbjsKKwkJfQorCQlhbGxvY19zdHJpbmco
eXl0ZXh0LCB5eWxlbmcpOworCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfV09S
RDsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZWV9SVUxFX1NFVFVQCit7CisJCS8qIHRoaXMg
dG9rZW4gaW5jbHVkZXMgYXQgbGVhc3Qgb25lICckJyAqLworCQl5eWx2YWwuc3RyaW5nID0gZXhw
YW5kX3Rva2VuKHl5dGV4dCwgeXlsZW5nKTsKKwkJaWYgKHN0cmxlbih5eWx2YWwuc3RyaW5nKSkK
KwkJCXJldHVybiBUX1dPUkQ7CisJCWZyZWUoeXlsdmFsLnN0cmluZyk7CisJfQorCVlZX0JSRUFL
CitjYXNlIDMyOgorWVlfUlVMRV9TRVRVUAorLyogY29tbWVudCAqLworCVlZX0JSRUFLCitjYXNl
IDMzOgorLyogcnVsZSAzMyBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCis7CisJWVlf
QlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCisKKwlZWV9CUkVBSworY2FzZSAzNToKK1lZ
X1JVTEVfU0VUVVAKK3dhcm5faWdub3JlZF9jaGFyYWN0ZXIoKnl5dGV4dCk7CisJWVlfQlJFQUsK
K2Nhc2UgWVlfU1RBVEVfRU9GKFBBUkFNKToKK3sKKwkJQkVHSU4oSU5JVElBTCk7CisJfQorCVlZ
X0JSRUFLCisKK2Nhc2UgMzY6CitZWV9SVUxFX1NFVFVQCithcHBlbmRfZXhwYW5kZWRfc3RyaW5n
KHl5dGV4dCk7CisJWVlfQlJFQUsKK2Nhc2UgMzc6CisvKiBydWxlIDM3IGNhbiBtYXRjaCBlb2wg
Ki8KKyp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1
cCB5eXRleHQgKi8KK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsKKyh5eV9jX2J1Zl9w
KSA9IHl5X2NwIC09IDE7CitZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFn
YWluICovCitZWV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcp
OworCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsKKwkJcmV0dXJuIFRfV09SRF9RVU9URTsKKwl9CisJ
WVlfQlJFQUsKK2Nhc2UgMzg6CitZWV9SVUxFX1NFVFVQCit7CisJCWFwcGVuZF9zdHJpbmcoeXl0
ZXh0LCB5eWxlbmcpOworCX0KKwlZWV9CUkVBSworY2FzZSAzOToKKy8qIHJ1bGUgMzkgY2FuIG1h
dGNoIGVvbCAqLworKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dCAqLworWVlfTElORU5PX1JFV0lORF9UTyh5eV9jcCAtIDEpOworKHl5
X2NfYnVmX3ApID0geXlfY3AgLT0gMTsKK1lZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5
eXRleHQgYWdhaW4gKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmluZyh5eXRleHQg
KyAxLCB5eWxlbmcgLSAxKTsKKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7CisJCXJldHVybiBUX1dP
UkRfUVVPVEU7CisJfQorCVlZX0JSRUFLCitjYXNlIDQwOgorWVlfUlVMRV9TRVRVUAoreworCQlh
cHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOworCX0KKwlZWV9CUkVBSworY2Fz
ZSA0MToKK1lZX1JVTEVfU0VUVVAKK3sKKwkJaWYgKHN0ciA9PSB5eXRleHRbMF0pIHsKKwkJCUJF
R0lOKFBBUkFNKTsKKwkJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0OworCQkJcmV0dXJuIFRfV09SRF9R
VU9URTsKKwkJfSBlbHNlCisJCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgMSk7CisJfQorCVlZX0JS
RUFLCitjYXNlIDQyOgorLyogcnVsZSA0MiBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQ
Cit7CisJCWZwcmludGYoc3RkZXJyLAorCQkJIiVzOiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3Ry
aW5ncyBub3Qgc3VwcG9ydGVkXG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7CisJCUJFR0lOKElOSVRJQUwpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCVlZX0JSRUFLCitj
YXNlIFlZX1NUQVRFX0VPRihTVFJJTkcpOgoreworCQlCRUdJTihJTklUSUFMKTsKKwl9CisJWVlf
QlJFQUsKKworY2FzZSA0MzoKK1lZX1JVTEVfU0VUVVAKK3sKKwkJdHMgPSAwOworCQlmb3IgKGkg
PSAwOyBpIDwgeXlsZW5nOyBpKyspIHsKKwkJCWlmICh5eXRleHRbaV0gPT0gJ1x0JykKKwkJCQl0
cyA9ICh0cyAmIH43KSArIDg7CisJCQllbHNlCisJCQkJdHMrKzsKKwkJfQorCQlsYXN0X3RzID0g
dHM7CisJCWlmIChmaXJzdF90cykgeworCQkJaWYgKHRzIDwgZmlyc3RfdHMpIHsKKwkJCQl6Y29u
Zl9lbmRoZWxwKCk7CisJCQkJcmV0dXJuIFRfSEVMUFRFWFQ7CisJCQl9CisJCQl0cyAtPSBmaXJz
dF90czsKKwkJCXdoaWxlICh0cyA+IDgpIHsKKwkJCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIs
IDgpOworCQkJCXRzIC09IDg7CisJCQl9CisJCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIsIHRz
KTsKKwkJfQorCX0KKwlZWV9CUkVBSworY2FzZSA0NDoKKy8qIHJ1bGUgNDQgY2FuIG1hdGNoIGVv
bCAqLworKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5n
IHVwIHl5dGV4dCAqLworWVlfTElORU5PX1JFV0lORF9UTyh5eV9jcCAtIDEpOworKHl5X2NfYnVm
X3ApID0geXlfY3AgLT0gMTsKK1lZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQg
YWdhaW4gKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJemNvbmZfZW5kaGVscCgpOworCQlyZXR1cm4g
VF9IRUxQVEVYVDsKKwl9CisJWVlfQlJFQUsKK2Nhc2UgNDU6CisvKiBydWxlIDQ1IGNhbiBtYXRj
aCBlb2wgKi8KK1lZX1JVTEVfU0VUVVAKK3sKKwkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsKKwl9
CisJWVlfQlJFQUsKK2Nhc2UgNDY6CitZWV9SVUxFX1NFVFVQCit7CisJCXdoaWxlICh5eWxlbmcp
IHsKKwkJCWlmICgoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnICcpICYmICh5eXRleHRbeXlsZW5nLTFd
ICE9ICdcdCcpKQorCQkJCWJyZWFrOworCQkJeXlsZW5nLS07CisJCX0KKwkJYXBwZW5kX3N0cmlu
Zyh5eXRleHQsIHl5bGVuZyk7CisJCWlmICghZmlyc3RfdHMpCisJCQlmaXJzdF90cyA9IGxhc3Rf
dHM7CisJfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihIRUxQKToKK3sKKwkJemNvbmZf
ZW5kaGVscCgpOworCQlyZXR1cm4gVF9IRUxQVEVYVDsKKwl9CisJWVlfQlJFQUsKKworY2FzZSBZ
WV9TVEFURV9FT0YoSU5JVElBTCk6CitjYXNlIFlZX1NUQVRFX0VPRihDT01NQU5EKToKK2Nhc2Ug
WVlfU1RBVEVfRU9GKEFTU0lHTl9WQUwpOgoreworCWlmIChjdXJyZW50X2ZpbGUpIHsKKwkJemNv
bmZfZW5kZmlsZSgpOworCQlyZXR1cm4gVF9FT0w7CisJfQorCWZjbG9zZSh5eWluKTsKKwl5eXRl
cm1pbmF0ZSgpOworfQorCVlZX0JSRUFLCitjYXNlIDQ3OgorWVlfUlVMRV9TRVRVUAorWVlfRkFU
QUxfRVJST1IoICJmbGV4IHNjYW5uZXIgamFtbWVkIiApOworCVlZX0JSRUFLCisKKwljYXNlIFlZ
X0VORF9PRl9CVUZGRVI6CisJCXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5j
bHVkaW5nIHRoZSBFT0IgY2hhci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQg
PSAoaW50KSAoeXlfY3AgLSAoeXl0ZXh0X3B0cikpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZl
Y3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIp
OworCQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkv
KiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAq
IHBvc3NpYmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0
IHBvaW50ZWQgeXlpbiBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogeXlsZXgoKS4g
IElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVu
IFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSBy
aWdodCBwbGFjZSB0byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRj
aCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCSh5eV9uX2NoYXJzKSA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5v
dGUgdGhhdCBoZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24K
KwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdp
bGwKKwkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJh
Y3RlcgorCQkgKiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0
aGUKKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRl
c3QKKwkJICogaW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggKHl5X2NfYnVmX3ApIDw9ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkKKwkJCXsgLyog
VGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRl
OworCisJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAg
KTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFrZSB0aGUgTlVMCisJ
CQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlfZ2V0X3ByZXZpb3Vz
X3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVjYXVzZSBpdCBkb2Vz
bid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1p
bmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVj
YXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJCQkgKi8KKworCQkJ
eXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRfc3RhdGUgKTsKKwor
CQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0
X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29uc3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0g
KysoeXlfY19idWZfcCk7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJ
CQkJZ290byB5eV9tYXRjaDsKKwkJCQl9CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSAo
eXlfY19idWZfcCk7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJ
ZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkKKwkJCXsKKwkJCWNhc2UgRU9C
X0FDVF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZikgPSAwOworCisJCQkJaWYgKCB5eXdyYXAoICkgKQorCQkJCQl7CisJCQkJCS8qIE5vdGU6IGJl
Y2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0
byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwCisJCQkJCSAq
IHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2VyIChsaWtlIGZs
ZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJl
dHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFub3RoZXIKKwkJ
CQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJCSh5eV9jX2J1
Zl9wKSA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCisJCQkJCXl5X2FjdCA9IFlZX1NU
QVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOworCQkJCQl9CisKKwkJCQll
bHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkK
KwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCisJCQljYXNl
IEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkoeXlfY19idWZfcCkgPQorCQkJCQkoeXl0ZXh0
X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0OworCisJCQkJeXlfY3VycmVudF9zdGF0
ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7CisKKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9w
KTsKKwkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlf
bWF0Y2g7CisKKwkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCSh5eV9jX2J1Zl9wKSA9
CisJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV07
CisKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsKKwor
CQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOworCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlf
TU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJCX0K
KworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5lciBp
bnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlvbiBz
d2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCisJfSAvKiBlbmQg
b2YgdXNlcidzIGRlY2xhcmF0aW9ucyAqLworfSAvKiBlbmQgb2YgeXlsZXggKi8KKworLyogeXlf
Z2V0X25leHRfYnVmZmVyIC0gdHJ5IHRvIHJlYWQgaW4gYSBuZXcgYnVmZmVyCisgKgorICogUmV0
dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlvbjoKKyAqCUVPQl9BQ1RfTEFTVF9NQVRD
SCAtCisgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1
cnJlbnQgcG9zaXRpb24KKyAqCUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQorICov
CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCkKK3sKKyAgICAJY2hhciAqZGVz
dCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCWNoYXIgKnNvdXJjZSA9
ICh5eXRleHRfcHRyKTsKKwlpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7CisK
KwlpZiAoICh5eV9jX2J1Zl9wKSA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZlsoeXlfbl9jaGFycykgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0YWwgZmxleCBz
Y2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsKKworCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkKKwkJeyAvKiBE
b24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8KKwkJaWYg
KCAoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cikgLSBZWV9NT1JFX0FESiA9PSAxICkKKwkJCXsK
KwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbworCQkJICog
dHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0dXJuIEVPQl9BQ1RfRU5E
X09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2UgbWF0Y2hlZCBzb21lIHRl
eHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3MgaXQuCisJCQkgKi8KKwkJ
CXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKworCS8qIFRyeSB0byByZWFk
IG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFycyB0byBzdGFydCBvZiBi
dWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoKHl5X2NfYnVmX3ApIC0gKHl5dGV4
dF9wdHIpIC0gMSk7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51bWJlcl90b19tb3ZlOyArK2kgKQor
CQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9FT0ZfUEVORElORyApCisJCS8qIGRv
bid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsCisJ
CSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycykgPSAwOworCisJZWxzZQorCQl7CisJCQlpbnQgbnVt
X3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtIG51
bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAgKQorCQkJeyAv
KiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAtIGdyb3cgaXQuICovCisKKwkJCS8qIGp1
c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVS
X1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUU7CisKKwkJCWludCB5eV9jX2J1Zl9w
X29mZnNldCA9CisJCQkJKGludCkgKCh5eV9jX2J1Zl9wKSAtIGItPnl5X2NoX2J1Zik7CisKKwkJ
CWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJeworCQkJCWludCBuZXdfc2l6ZSA9IGIt
Pnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3X3NpemUgPD0gMCApCisJCQkJCWItPnl5
X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsKKwkJCQllbHNlCisJCQkJCWItPnl5X2J1
Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQorCQkJCQkvKiBJbmNs
dWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLworCQkJCQl5eXJlYWxsb2MoKHZvaWQgKikg
Yi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJ
LyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9
IE5VTEw7CisKKwkJCWlmICggISBiLT55eV9jaF9idWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAor
CQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJ
CQkoeXlfY19idWZfcCkgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJ
bnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJ
CQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKworCQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZ
WV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKwor
CQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8KKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwKKwkJCSh5eV9uX2NoYXJzKSwg
bnVtX3RvX3JlYWQgKTsKKworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMg
PSAoeXlfbl9jaGFycyk7CisJCX0KKworCWlmICggKHl5X25fY2hhcnMpID09IDAgKQorCQl7CisJ
CWlmICggbnVtYmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9
IEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl5eXJlc3RhcnQoeXlpbiAgKTsKKwkJCX0KKworCQll
bHNlCisJCQl7CisJCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOworCQkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0KKwkJCQlZWV9CVUZGRVJfRU9GX1BF
TkRJTkc7CisJCQl9CisJCX0KKworCWVsc2UKKwkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVf
U0NBTjsKKworCWlmICgoKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgeworCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5
IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxseSBuZWVkLiAqLworCQlpbnQgbmV3X3NpemUg
PSAoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSArICgoeXlfbl9jaGFycykgPj4gMSk7CisJ
CVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIgKikgeXlyZWFsbG9j
KCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmLG5ld19zaXplICAp
OworCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVy
KCkiICk7CisJfQorCisJKHl5X25fY2hhcnMpICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hh
cnMpICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwkoeXl0ZXh0X3B0cikgPSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsK
K30KKworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9y
ZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBl
IHl5X2dldF9wcmV2aW91c19zdGF0ZSAodm9pZCkKK3sKKwl5eV9zdGF0ZV90eXBlIHl5X2N1cnJl
bnRfc3RhdGU7CisJY2hhciAqeXlfY3A7CisgICAgCisJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9z
dGFydCk7CisKKwlmb3IgKCB5eV9jcCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOyB5eV9j
cCA8ICh5eV9jX2J1Zl9wKTsgKyt5eV9jcCApCisJCXsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5
X254dFt5eV9jdXJyZW50X3N0YXRlXVsoKnl5X2NwID8geXlfZWNbWVlfU0NfVE9fVUkoKnl5X2Nw
KV0gOiAxKV07CisJCX0KKworCXJldHVybiB5eV9jdXJyZW50X3N0YXRlOworfQorCisvKiB5eV90
cnlfTlVMX3RyYW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFj
dGVyCisgKgorICogc3lub3BzaXMKKyAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCBj
dXJyZW50X3N0YXRlICk7CisgKi8KKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVM
X3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlICkKK3sKKwlpbnQgeXlfaXNf
amFtOworICAgIAorCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9zdGF0ZV1b
MV07CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPD0gMCk7CisKKwkJcmV0dXJuIHl5
X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVmIFlZX05PX1VOUFVU
CisKKyAgICBzdGF0aWMgdm9pZCB5eXVucHV0IChpbnQgYywgY2hhciAqIHl5X2JwICkKK3sKKwlj
aGFyICp5eV9jcDsKKyAgICAKKyAgICB5eV9jcCA9ICh5eV9jX2J1Zl9wKTsKKworCS8qIHVuZG8g
ZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLworCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIp
OworCisJaWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICsg
MiApCisJCXsgLyogbmVlZCB0byBzaGlmdCB0aGluZ3MgdXAgdG8gbWFrZSByb29tICovCisJCS8q
ICsyIGZvciBFT0IgY2hhcnMuICovCisJCWludCBudW1iZXJfdG9fbW92ZSA9ICh5eV9uX2NoYXJz
KSArIDI7CisJCWNoYXIgKmRlc3QgPSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9i
dWZbCisJCQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgKyAyXTsKKwkJ
Y2hhciAqc291cmNlID0KKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
bnVtYmVyX3RvX21vdmVdOworCisJCXdoaWxlICggc291cmNlID4gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgKQorCQkJKi0tZGVzdCA9ICotLXNvdXJjZTsKKworCQl5eV9jcCAr
PSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7CisJCXl5X2JwICs9IChpbnQpIChkZXN0IC0gc291cmNl
KTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0KKwkJCSh5eV9uX2No
YXJzKSA9IChpbnQpIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemU7CisKKwkJ
aWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICsgMiApCisJ
CQlZWV9GQVRBTF9FUlJPUiggImZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3ciICk7CisJ
CX0KKworCSotLXl5X2NwID0gKGNoYXIpIGM7CisKKyAgICBpZiAoIGMgPT0gJ1xuJyApeworICAg
ICAgICAtLXl5bGluZW5vOworICAgIH0KKworCSh5eXRleHRfcHRyKSA9IHl5X2JwOworCSh5eV9o
b2xkX2NoYXIpID0gKnl5X2NwOworCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOworfQorCisjZW5kaWYK
KworI2lmbmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGlu
dCB5eWlucHV0ICh2b2lkKQorI2Vsc2UKKyAgICBzdGF0aWMgaW50IGlucHV0ICAodm9pZCkKKyNl
bmRpZgorCit7CisJaW50IGM7CisgICAgCisJKih5eV9jX2J1Zl9wKSA9ICh5eV9ob2xkX2NoYXIp
OworCisJaWYgKCAqKHl5X2NfYnVmX3ApID09IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCXsK
KwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byBy
ZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZvcmUqIHRoZSBFT0IgY2hhcmFjdGVycywg
dGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBl
bmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICggKHl5X2NfYnVmX3ApIDwgJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gKQorCQkJLyogVGhpcyB3
YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7CisKKwkJZWxzZQor
CQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8KKwkJCWludCBvZmZzZXQgPSAoeXlfY19idWZfcCkg
LSAoeXl0ZXh0X3B0cik7CisJCQkrKyh5eV9jX2J1Zl9wKTsKKworCQkJc3dpdGNoICggeXlfZ2V0
X25leHRfYnVmZmVyKCAgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgor
CQkJCQkvKiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhh
dCB3ZSd2ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5l
ZWQgdG8KKwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJv
Y2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0
byBjb25zaWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJ
CQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0
IGJ1ZmZlciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICk7CisKKwkJCQkJLypGQUxM
VEhST1VHSCovCisKKwkJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6CisJCQkJCXsKKwkJCQkJ
aWYgKCB5eXdyYXAoICkgKQorCQkJCQkJcmV0dXJuIDA7CisKKwkJCQkJaWYgKCAhICh5eV9kaWRf
YnVmZmVyX3N3aXRjaF9vbl9lb2YpICkKKwkJCQkJCVlZX05FV19GSUxFOworI2lmZGVmIF9fY3Bs
dXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KCk7CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQo
KTsKKyNlbmRpZgorCQkJCQl9CisKKwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJ
CQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgKHl5X2NfYnVmX3ApOwkv
KiBjYXN0IGZvciA4LWJpdCBjaGFyJ3MgKi8KKwkqKHl5X2NfYnVmX3ApID0gJ1wwJzsJLyogcHJl
c2VydmUgeXl0ZXh0ICovCisJKHl5X2hvbGRfY2hhcikgPSAqKysoeXlfY19idWZfcCk7CisKKwlp
ZiAoIGMgPT0gJ1xuJyApCisJCQorICAgIHl5bGluZW5vKys7Cis7CisKKwlyZXR1cm4gYzsKK30K
KyNlbmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8KKworLyoqIEltbWVkaWF0ZWx5IHN3aXRj
aCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uCisgKiBAcGFyYW0gaW5wdXRfZmlsZSBBIHJl
YWRhYmxlIHN0cmVhbS4KKyAqIAorICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNl
dCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLgorICovCisgICAgdm9pZCB5eXJl
c3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSApCit7CisgICAgCisJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7CisgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0KKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9C
VUZfU0laRSApOworCX0KKworCXl5X2luaXRfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSLGlucHV0
X2ZpbGUgKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKK30KKworLyoqIFN3aXRjaCB0byBh
IGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlu
cHV0IGJ1ZmZlci4KKyAqIAorICovCisgICAgdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICAoWVlf
QlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICkKK3sKKyAgICAKKwkvKiBUT0RPLiBXZSBzaG91bGQg
YmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGJvZHkKKwkgKiB3aXRoCisJ
ICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOworCSAqCQl5eXB1c2hfYnVmZmVyX3N0YXRlKG5ld19i
dWZmZXIpOworICAgICAqLworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsKKwlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSID09IG5ld19idWZmZXIgKQorCQlyZXR1cm47CisKKwlpZiAoIFlZX0NVUlJF
TlRfQlVGRkVSICkKKwkJeworCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZm
ZXIuICovCisJCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsKKwkJWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOworCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7CisJCX0KKworCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7CisJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7
CisKKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNo
IGR1cmluZworCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUgb25seSB0aW1l
IHRoaXMgZmxhZworCSAqIGlzIGxvb2tlZCBhdCBpcyBhZnRlciB5eXdyYXAoKSBpcyBjYWxsZWQs
IHNvIGl0J3Mgc2FmZQorCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0LgorCSAqLwor
CSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsKK30KKworc3RhdGljIHZvaWQgeXlf
bG9hZF9idWZmZXJfc3RhdGUgICh2b2lkKQoreworICAgIAkoeXlfbl9jaGFycykgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJKHl5dGV4dF9wdHIpID0gKHl5X2NfYnVm
X3ApID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5aW4gPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJKHl5X2hvbGRfY2hhcikgPSAq
KHl5X2NfYnVmX3ApOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQg
YnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFy
YW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0
LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiAKKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZm
ZXIgc3RhdGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJ
TEUgKiBmaWxlLCBpbnQgIHNpemUgKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworICAgIAorCWIg
PSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSApICApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBt
ZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfYnVmX3NpemUgPSAoeXlf
c2l6ZV90KXNpemU7CisKKwkvKiB5eV9jaF9idWYgaGFzIHRvIGJlIDIgY2hhcmFjdGVycyBsb25n
ZXIgdGhhbiB0aGUgc2l6ZSBnaXZlbiBiZWNhdXNlCisJICogd2UgbmVlZCB0byBwdXQgaW4gMiBl
bmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuCisJICovCisJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikg
eXlhbGxvYyhiLT55eV9idWZfc2l6ZSArIDIgICk7CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJ
CVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZm
ZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJeXlfaW5pdF9idWZmZXIo
YixmaWxlICk7CisKKwlyZXR1cm4gYjsKK30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAq
IEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0ZWQgd2l0aCB5eV9jcmVhdGVfYnVmZmVyKCkKKyAqIAor
ICovCisgICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgKQorewor
ICAgIAorCWlmICggISBiICkKKwkJcmV0dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVG
RkVSICkgLyogTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55eV9pc19v
dXJfYnVmZmVyICkKKwkJeXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAgKTsKKworCXl5ZnJl
ZSgodm9pZCAqKSBiICApOworfQorCisvKiBJbml0aWFsaXplcyBvciByZWluaXRpYWxpemVzIGEg
YnVmZmVyLgorICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBv
bmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwKKyAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0YXJ0KCkg
b3IgYXQgRU9GLgorICovCisgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZG
RVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICkKKworeworCWludCBvZXJybm8gPSBlcnJubzsKKyAg
ICAKKwl5eV9mbHVzaF9idWZmZXIoYiApOworCisJYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7CisJ
Yi0+eXlfZmlsbF9idWZmZXIgPSAxOworCisgICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZm
ZXIsIHRoZW4geXlfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8KKyAgICAgKiBjYWxsZWQgZnJv
bSB5eXJlc3RhcnQoKSBvciB0aHJvdWdoIHl5X2dldF9uZXh0X2J1ZmZlci4KKyAgICAgKiBJbiB0
aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uCisg
ICAgICovCisgICAgaWYgKGIgIT0gWVlfQ1VSUkVOVF9CVUZGRVIpeworICAgICAgICBiLT55eV9i
c19saW5lbm8gPSAxOworICAgICAgICBiLT55eV9ic19jb2x1bW4gPSAwOworICAgIH0KKworICAg
ICAgICBiLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisgICAgCisJZXJybm8gPSBvZXJybm87Cit9
CisKKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2Fu
LCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4KKyAqIEBwYXJhbSBiIHRoZSBidWZmZXIgc3RhdGUg
dG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JVRkZFUi4KKyAqIAorICovCisg
ICAgdm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSAgYiApCit7CisgICAgCWlm
ICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7CisKKwkvKiBXZSBhbHdh
eXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhlIGZpcnN0IGNhdXNlcwor
CSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQg
Y2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwliLT55eV9jaF9idWZbMF0g
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JV
RkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07CisKKwliLT55
eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJ
aWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7
Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBz
dGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBh
bGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3NhcnkuCisgKiAgQHBhcmFtIG5ld19idWZm
ZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICAKKyAqLwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZ
WV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciApCit7CisgICAgCWlmIChuZXdfYnVmZmVyID09IE5V
TEwpCisJCXJldHVybjsKKworCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpOworCisJLyogVGhpcyBi
bG9jayBpcyBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VS
UkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1
ZmZlci4gKi8KKwkJKih5eV9jX2J1Zl9wKSA9ICh5eV9ob2xkX2NoYXIpOworCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSAoeXlfY19idWZfcCk7CisJCVlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2NoYXJzKTsKKwkJfQorCisJLyogT25s
eSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYgKFlZ
X0NVUlJFTlRfQlVGRkVSKQorCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkrKzsKKwlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20geXlfc3dpdGNo
X3RvX2J1ZmZlci4gKi8KKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsKKwkoeXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mKSA9IDE7Cit9CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRoZSB0
b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21l
cyB0aGUgbmV3IHRvcC4KKyAqICAKKyAqLwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHZvaWQp
Cit7CisgICAgCWlmICghWVlfQ1VSUkVOVF9CVUZGRVIpCisJCXJldHVybjsKKworCXl5X2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBOVUxMOworCWlmICgoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPiAwKQorCQktLSh5eV9idWZmZXJf
c3RhY2tfdG9wKTsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSggKTsKKwkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAxOworCX0KK30K
KworLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4KKyAqICBHdWFy
YW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4KKyAqLworc3RhdGljIHZvaWQgeXll
bnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkKQoreworCWludCBudW1fdG9fYWxsb2M7CisgICAgCisJ
aWYgKCEoeXlfYnVmZmVyX3N0YWNrKSkgeworCisJCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVz
dCBmb3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzCisJCSAqIHNjYW5u
ZXIgd2lsbCBldmVuIG5lZWQgYSBzdGFjay4gV2UgdXNlIDIgaW5zdGVhZCBvZiAxIHRvIGF2b2lk
IGFuCisJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuCisgICAgICAgICAq
LworICAgICAgbnVtX3RvX2FsbG9jID0gMTsgLyogQWZ0ZXIgYWxsIHRoYXQgdGFsaywgdGhpcyB3
YXMgc2V0IHRvIDEgYW55d2F5cy4uLiAqLworCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYworCQkJCQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9m
KHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZl
cl9zdGFjaykgKQorCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4g
eXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7CisKKwkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2sp
LCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwor
CQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7CisJCSh5eV9idWZmZXJfc3Rh
Y2tfdG9wKSA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoKHl5X2J1ZmZlcl9zdGFja190b3Ap
ID49ICgoeXlfYnVmZmVyX3N0YWNrX21heCkpIC0gMSl7CisKKwkJLyogSW5jcmVhc2UgdGhlIGJ1
ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovCisJCXl5X3NpemVfdCBncm93
X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJbnVtX3RvX2FsbG9jID0g
KHl5X2J1ZmZlcl9zdGFja19tYXgpICsgZ3Jvd19zaXplOworCQkoeXlfYnVmZmVyX3N0YWNrKSA9
IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jCisJCQkJCQkJCSgoeXlfYnVmZmVy
X3N0YWNrKSwKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJf
c3RhdGUqKQorCQkJCQkJCQkpOworCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQorCQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0
YWNrKCkiICk7CisKKwkJLyogemVybyBvbmx5IHRoZSBuZXcgc2xvdHMuKi8KKwkJbWVtc2V0KCh5
eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFja19tYXgpLCAwLCBncm93X3NpemUgKiBz
aXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsKKwkJKHl5X2J1ZmZlcl9zdGFja19tYXgp
ID0gbnVtX3RvX2FsbG9jOworCX0KK30KKworLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3Rh
dGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1ZmZl
ci4KKyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0gc2l6ZSB0
aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogCisgKiBAcmV0dXJu
IHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAqIGJhc2UsIHl5X3NpemVfdCAgc2l6ZSApCit7
CisJWVlfQlVGRkVSX1NUQVRFIGI7CisgICAgCisJaWYgKCBzaXplIDwgMiB8fAorCSAgICAgYmFz
ZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fAorCSAgICAgYmFzZVtzaXplLTFd
ICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiApCisJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJv
b20gZm9yIHRoZSBFT0Incy4gKi8KKwkJcmV0dXJuIE5VTEw7CisKKwliID0gKFlZX0JVRkZFUl9T
VEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsKKwlpZiAo
ICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3Nj
YW5fYnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0
byB0YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0g
YmFzZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gTlVM
TDsKKwliLT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3Rp
dmUgPSAwOworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWIt
Pnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJeXlfc3dpdGNoX3RvX2J1ZmZl
cihiICApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0
YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBz
Y2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJt
aW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiAKKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRl
ZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRl
cyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICB5eV9zY2Fu
X2J5dGVzKCkgaW5zdGVhZC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5
eWNvbnN0IGNoYXIgKiB5eXN0ciApCit7CisgICAgCisJcmV0dXJuIHl5X3NjYW5fYnl0ZXMoeXlz
dHIsKGludCkgc3RybGVuKHl5c3RyKSApOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgp
IHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0geXli
eXRlcyB0aGUgYnl0ZSBidWZmZXIgdG8gc2NhbgorICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUg
bnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4KKyAq
IAorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3QuCisg
Ki8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICogeXlieXRl
cywgaW50ICBfeXlieXRlc19sZW4gKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1
ZjsKKwl5eV9zaXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxs
IGJ1ZmZlciwgaW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gKHl5
X3NpemVfdCkgKF95eWJ5dGVzX2xlbiArIDIpOworCWJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAg
KTsKKwlpZiAoICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1v
cnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19s
ZW47ICsraSApCisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9
IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0geXlf
c2Nhbl9idWZmZXIoYnVmLG4gKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFk
IGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBl
dGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdl
J3JlIGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsK
K30KKworI2lmbmRlZiBZWV9FWElUX0ZBSUxVUkUKKyNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDIK
KyNlbmRpZgorCitzdGF0aWMgdm9pZCB5eW5vcmV0dXJuIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0
IGNoYXIqIG1zZyApCit7CisJCQkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyAp
OworCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBz
byBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmlu
ZSB5eWxlc3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5n
IHVwIHl5dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAor
ICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxl
bmddID0gKHl5X2hvbGRfY2hhcik7IFwKKwkJKHl5X2NfYnVmX3ApID0geXl0ZXh0ICsgeXlsZXNz
X21hY3JvX2FyZzsgXAorCQkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19idWZfcCk7IFwKKwkJKih5
eV9jX2J1Zl9wKSA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXAorCQl9
IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBmdW5jdGlv
bnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVt
YmVyLgorICogCisgKi8KK2ludCB5eWdldF9saW5lbm8gICh2b2lkKQoreworICAgIAorICAgIHJl
dHVybiB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICogCisgKi8K
K0ZJTEUgKnl5Z2V0X2luICAodm9pZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5aW47Cit9CisKKy8q
KiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisgKiAKKyAqLworRklMRSAqeXlnZXRfb3V0ICAodm9p
ZCkKK3sKKyAgICAgICAgcmV0dXJuIHl5b3V0OworfQorCisvKiogR2V0IHRoZSBsZW5ndGggb2Yg
dGhlIGN1cnJlbnQgdG9rZW4uCisgKiAKKyAqLworaW50IHl5Z2V0X2xlbmcgICh2b2lkKQorewor
ICAgICAgICByZXR1cm4geXlsZW5nOworfQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgor
ICogCisgKi8KKworY2hhciAqeXlnZXRfdGV4dCAgKHZvaWQpCit7CisgICAgICAgIHJldHVybiB5
eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0g
X2xpbmVfbnVtYmVyIGxpbmUgbnVtYmVyCisgKiAKKyAqLwordm9pZCB5eXNldF9saW5lbm8gKGlu
dCAgX2xpbmVfbnVtYmVyICkKK3sKKyAgICAKKyAgICB5eWxpbmVubyA9IF9saW5lX251bWJlcjsK
K30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhl
IGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBfaW5fc3RyIEEgcmVhZGFibGUg
c3RyZWFtLgorICogCisgKiBAc2VlIHl5X3N3aXRjaF90b19idWZmZXIKKyAqLwordm9pZCB5eXNl
dF9pbiAoRklMRSAqICBfaW5fc3RyICkKK3sKKyAgICAgICAgeXlpbiA9IF9pbl9zdHIgOworfQor
Cit2b2lkIHl5c2V0X291dCAoRklMRSAqICBfb3V0X3N0ciApCit7CisgICAgICAgIHl5b3V0ID0g
X291dF9zdHIgOworfQorCitpbnQgeXlnZXRfZGVidWcgICh2b2lkKQoreworICAgICAgICByZXR1
cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBfYmRlYnVnICkK
K3sKKyAgICAgICAgeXlfZmxleF9kZWJ1ZyA9IF9iZGVidWcgOworfQorCitzdGF0aWMgaW50IHl5
X2luaXRfZ2xvYmFscyAodm9pZCkKK3sKKyAgICAgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhl
IHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5j
dGlvbiBpcyBjYWxsZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhl
cmUuCisgICAgICovCisKKyAgICAvKiBXZSBkbyBub3QgdG91Y2ggeXlsaW5lbm8gdW5sZXNzIHRo
ZSBvcHRpb24gaXMgZW5hYmxlZC4gKi8KKyAgICB5eWxpbmVubyA9ICAxOworICAgIAorICAgICh5
eV9idWZmZXJfc3RhY2spID0gTlVMTDsKKyAgICAoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOwor
ICAgICh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IDA7CisgICAgKHl5X2NfYnVmX3ApID0gTlVMTDsK
KyAgICAoeXlfaW5pdCkgPSAwOworICAgICh5eV9zdGFydCkgPSAwOworCisvKiBEZWZpbmVkIGlu
IG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQKKyAgICB5eWluID0gc3RkaW47CisgICAgeXlv
dXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4gPSBOVUxMOworICAgIHl5b3V0ID0gTlVMTDsK
KyNlbmRpZgorCisgICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJv
ciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQorICAgICAqIHl5bGV4X2luaXQoKQorICAgICAqLwor
ICAgIHJldHVybiAwOworfQorCisvKiB5eWxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFu
dCBhbmQgbm9uLXJlZW50cmFudCBzY2FubmVycy4gKi8KK2ludCB5eWxleF9kZXN0cm95ICAodm9p
ZCkKK3sKKyAgICAKKyAgICAvKiBQb3AgdGhlIGJ1ZmZlciBzdGFjaywgZGVzdHJveWluZyBlYWNo
IGVsZW1lbnQuICovCisJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpeworCQl5eV9kZWxldGVfYnVm
ZmVyKFlZX0NVUlJFTlRfQlVGRkVSICApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBO
VUxMOworCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwl9CisKKwkvKiBEZXN0cm95IHRoZSBzdGFj
ayBpdHNlbGYuICovCisJeXlmcmVlKCh5eV9idWZmZXJfc3RhY2spICk7CisJKHl5X2J1ZmZlcl9z
dGFjaykgPSBOVUxMOworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0
YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiB5
eWxleCgpIGlzIGNhbGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9p
bml0X2dsb2JhbHMoICk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEludGVybmFsIHV0
aWxpdHkgcm91dGluZXMuCisgKi8KKworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5
eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwgaW50IG4gKQorewor
CQkKKwlpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8IG47ICsraSApCisJCXMxW2ldID0gczJbaV07
Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhf
c3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICkKK3sKKwlpbnQgbjsKKwlmb3IgKCBuID0gMDsgc1tu
XTsgKytuICkKKwkJOworCisJcmV0dXJuIG47Cit9CisjZW5kaWYKKwordm9pZCAqeXlhbGxvYyAo
eXlfc2l6ZV90ICBzaXplICkKK3sKKwkJCXJldHVybiBtYWxsb2Moc2l6ZSk7Cit9CisKK3ZvaWQg
Knl5cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVfdCAgc2l6ZSApCit7CisJCQorCS8qIFRo
ZSBjYXN0IHRvIChjaGFyICopIGluIHRoZSBmb2xsb3dpbmcgYWNjb21tb2RhdGVzIGJvdGgKKwkg
KiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRo
b3NlCisJICogdGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGgg
dGhlIGxhdHRlcgorCSAqIGJlY2F1c2UgYm90aCBBTlNJIEMgYW5kIEMrKyBhbGxvdyBjYXN0bGVz
cyBhc3NpZ25tZW50IGZyb20KKwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVh
bCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zCisJICogYXMgdGhvdWdoIGRvaW5nIGFuIGFzc2ln
bm1lbnQuCisJICovCisJcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsKK30KKwordm9pZCB5eWZy
ZWUgKHZvaWQgKiBwdHIgKQoreworCQkJZnJlZSggKGNoYXIgKikgcHRyICk7CS8qIHNlZSB5eXJl
YWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisjZGVmaW5lIFlZVEFCTEVTX05BTUUg
Inl5dGFibGVzIgorCitzdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIgKmluLCBz
aXplX3QgbikKK3sKKwljaGFyICpvdXQ7CisJaW50IGM7CisJY2hhciBjMjsKKwljb25zdCBjaGFy
ICpyZXN0LCAqZW5kOworCisJbmV3X3N0cmluZygpOworCWFwcGVuZF9zdHJpbmcoaW4sIG4pOwor
CisJLyogZ2V0IHRoZSB3aG9sZSBsaW5lIGJlY2F1c2Ugd2UgZG8gbm90IGtub3cgdGhlIGVuZCBv
ZiB0b2tlbi4gKi8KKwl3aGlsZSAoKGMgPSBpbnB1dCgpKSAhPSBFT0YpIHsKKwkJaWYgKGMgPT0g
J1xuJykgeworCQkJdW5wdXQoYyk7CisJCQlicmVhazsKKwkJfQorCQljMiA9IGM7CisJCWFwcGVu
ZF9zdHJpbmcoJmMyLCAxKTsKKwl9CisKKwlyZXN0ID0gdGV4dDsKKwlvdXQgPSBleHBhbmRfb25l
X3Rva2VuKCZyZXN0KTsKKworCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUg
aW5wdXQgc3RyZWFtICovCisJZW5kID0gcmVzdCArIHN0cmxlbihyZXN0KTsKKwl3aGlsZSAoZW5k
ID4gcmVzdCkKKwkJdW5wdXQoKi0tZW5kKTsKKworCWZyZWUodGV4dCk7CisKKwlyZXR1cm4gb3V0
OworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0
cikKK3sKKwljb25zdCBjaGFyICplbmQ7CisJY2hhciAqcmVzOworCisJc3RyKys7CisKKwlyZXMg
PSBleHBhbmRfZG9sbGFyKCZzdHIpOworCisJLyogcHVzaCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJz
IHRvIHRoZSBpbnB1dCBzdHJlYW0gKi8KKwllbmQgPSBzdHIgKyBzdHJsZW4oc3RyKTsKKwl3aGls
ZSAoZW5kID4gc3RyKQorCQl1bnB1dCgqLS1lbmQpOworCisJYXBwZW5kX3N0cmluZyhyZXMsIHN0
cmxlbihyZXMpKTsKKworCWZyZWUocmVzKTsKK30KKwordm9pZCB6Y29uZl9zdGFydGhlbHAodm9p
ZCkKK3sKKwluZXdfc3RyaW5nKCk7CisJbGFzdF90cyA9IGZpcnN0X3RzID0gMDsKKwlCRUdJTihI
RUxQKTsKK30KKworc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKQoreworCXl5bHZhbC5z
dHJpbmcgPSB0ZXh0OworCUJFR0lOKElOSVRJQUwpOworfQorCisvKgorICogVHJ5IHRvIG9wZW4g
c3BlY2lmaWVkIGZpbGUgd2l0aCBmb2xsb3dpbmcgbmFtZXM6CisgKiAuL25hbWUKKyAqICQoc3Jj
dHJlZSkvbmFtZQorICogVGhlIGxhdHRlciBpcyB1c2VkIHdoZW4gc3JjdHJlZSBpcyBzZXBhcmF0
ZSBmcm9tIG9ianRyZWUKKyAqIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuCisgKiBSZXR1cm4g
TlVMTCBpZiBmaWxlIGlzIG5vdCBmb3VuZC4KKyAqLworRklMRSAqemNvbmZfZm9wZW4oY29uc3Qg
Y2hhciAqbmFtZSkKK3sKKwljaGFyICplbnYsIGZ1bGxuYW1lW1BBVEhfTUFYKzFdOworCUZJTEUg
KmY7CisKKwlmID0gZm9wZW4obmFtZSwgInIiKTsKKwlpZiAoIWYgJiYgbmFtZSAhPSBOVUxMICYm
IG5hbWVbMF0gIT0gJy8nKSB7CisJCWVudiA9IGdldGVudihTUkNUUkVFKTsKKwkJaWYgKGVudikg
eworCQkJc3ByaW50ZihmdWxsbmFtZSwgIiVzLyVzIiwgZW52LCBuYW1lKTsKKwkJCWYgPSBmb3Bl
bihmdWxsbmFtZSwgInIiKTsKKwkJfQorCX0KKwlyZXR1cm4gZjsKK30KKwordm9pZCB6Y29uZl9p
bml0c2Nhbihjb25zdCBjaGFyICpuYW1lKQoreworCXl5aW4gPSB6Y29uZl9mb3BlbihuYW1lKTsK
KwlpZiAoIXl5aW4pIHsKKwkJZnByaW50ZihzdGRlcnIsICJjYW4ndCBmaW5kIGZpbGUgJXNcbiIs
IG5hbWUpOworCQlleGl0KDEpOworCX0KKworCWN1cnJlbnRfYnVmID0geG1hbGxvYyhzaXplb2Yo
KmN1cnJlbnRfYnVmKSk7CisJbWVtc2V0KGN1cnJlbnRfYnVmLCAwLCBzaXplb2YoKmN1cnJlbnRf
YnVmKSk7CisKKwljdXJyZW50X2ZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsKKwl5eWxpbmVubyA9
IDE7Cit9CisKK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSkKK3sKKwlzdHJ1
Y3QgZmlsZSAqaXRlcjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOwor
CXN0cnVjdCBidWZmZXIgKmJ1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwltZW1zZXQoYnVm
LCAwLCBzaXplb2YoKmJ1ZikpOworCisJY3VycmVudF9idWYtPnN0YXRlID0gWVlfQ1VSUkVOVF9C
VUZGRVI7CisJeXlpbiA9IHpjb25mX2ZvcGVuKGZpbGUtPm5hbWUpOworCWlmICgheXlpbikgewor
CQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjYW4ndCBvcGVuIGZpbGUgXCIlc1wiXG4iLAorCQkJ
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgZmlsZS0+bmFtZSk7CisJCWV4aXQoMSk7
CisJfQorCXl5X3N3aXRjaF90b19idWZmZXIoeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9T
SVpFKSk7CisJYnVmLT5wYXJlbnQgPSBjdXJyZW50X2J1ZjsKKwljdXJyZW50X2J1ZiA9IGJ1ZjsK
KworCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5lbm87CisJZmlsZS0+cGFyZW50ID0gY3Vy
cmVudF9maWxlOworCisJZm9yIChpdGVyID0gY3VycmVudF9maWxlOyBpdGVyOyBpdGVyID0gaXRl
ci0+cGFyZW50KSB7CisJCWlmICghc3RyY21wKGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKSB7CisJ
CQlmcHJpbnRmKHN0ZGVyciwKKwkJCQkiUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC5cbiIK
KwkJCQkiSW5jbHVzaW9uIHBhdGg6XG4iCisJCQkJIiAgY3VycmVudCBmaWxlIDogJXNcbiIsIGZp
bGUtPm5hbWUpOworCQkJaXRlciA9IGZpbGU7CisJCQlkbyB7CisJCQkJaXRlciA9IGl0ZXItPnBh
cmVudDsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgaW5jbHVkZWQgZnJvbTogJXM6JWRcbiIsCisJ
CQkJCWl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubyAtIDEpOworCQkJfSB3aGlsZSAoc3RyY21wKGl0
ZXItPm5hbWUsIGZpbGUtPm5hbWUpKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisKKwl5eWxpbmVu
byA9IDE7CisJY3VycmVudF9maWxlID0gZmlsZTsKK30KKworc3RhdGljIHZvaWQgemNvbmZfZW5k
ZmlsZSh2b2lkKQoreworCXN0cnVjdCBidWZmZXIgKnBhcmVudDsKKworCWN1cnJlbnRfZmlsZSA9
IGN1cnJlbnRfZmlsZS0+cGFyZW50OworCWlmIChjdXJyZW50X2ZpbGUpCisJCXl5bGluZW5vID0g
Y3VycmVudF9maWxlLT5saW5lbm87CisKKwlwYXJlbnQgPSBjdXJyZW50X2J1Zi0+cGFyZW50Owor
CWlmIChwYXJlbnQpIHsKKwkJZmNsb3NlKHl5aW4pOworCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NV
UlJFTlRfQlVGRkVSKTsKKwkJeXlfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQtPnN0YXRlKTsKKwl9
CisJZnJlZShjdXJyZW50X2J1Zik7CisJY3VycmVudF9idWYgPSBwYXJlbnQ7Cit9CisKK2ludCB6
Y29uZl9saW5lbm8odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9wb3MubGluZW5vOworfQorCitj
b25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpCit7CisJcmV0dXJuIGN1cnJlbnRfcG9zLmZp
bGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7Cit9CisKZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy96Y29uZi50YWIuYyBiL3N1cHBvcnQva2NvbmZpZy96Y29uZi50YWIu
YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWNmYmNiCi0tLSAvZGV2L251
bGwKKysrIGIvc3VwcG9ydC9rY29uZmlnL3pjb25mLnRhYi5jCkBAIC0wLDAgKzEsMjUwNCBAQAor
LyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMC40LiAgKi8KKworLyogQmlz
b24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKworICAgQ29weXJp
Z2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgor
ICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90
LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworLyogQXMgYSBzcGVj
aWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIgd29yayB0aGF0IGNvbnRhaW5z
CisgICBwYXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmli
dXRlIHRoYXQgd29yaworICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMg
dGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhCisgICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBz
a2VsZXRvbiBvciBhIG1vZGlmaWVkIHZlcnNpb24gdGhlcmVvZgorICAgYXMgYSBwYXJzZXIgc2tl
bGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJpYnV0ZQorICAg
dGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1v
dmUgdGhpcworICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxl
dG9uIGFuZCB0aGUgcmVzdWx0aW5nCisgICBCaXNvbiBvdXRwdXQgZmlsZXMgdG8gYmUgbGljZW5z
ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICAgTGljZW5zZSB3aXRob3V0IHRoaXMg
c3BlY2lhbCBleGNlcHRpb24uCisKKyAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gaW4KKyAgIHZlcnNpb24gMi4yIG9mIEJp
c29uLiAgKi8KKworLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hh
cmQgU3RhbGxtYW4sIGJ5CisgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJz
ZW1hbnRpYyIgcGFyc2VyLiAgKi8KKworLyogQWxsIHN5bWJvbHMgZGVmaW5lZCBiZWxvdyBzaG91
bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQKKyAgIGluZnJpbmdpbmcgb24gdXNlciBu
YW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbAorICAgdmFyaWFi
bGVzLCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4K
KyAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxlIGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUg
ZmlsZXMgdG8KKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBu
b3RlZCAiSU5GUklOR0VTIE9OCisgICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93LiAgKi8KKworLyog
SWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8KKyNkZWZpbmUgWVlCSVNPTiAxCisKKy8qIEJpc29u
IHZlcnNpb24uICAqLworI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjMuMC40IgorCisvKiBTa2Vs
ZXRvbiBuYW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1
cmUgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAwCisKKy8qIFB1c2ggcGFyc2Vycy4gICov
CisjZGVmaW5lIFlZUFVTSCAwCisKKy8qIFB1bGwgcGFyc2Vycy4gICovCisjZGVmaW5lIFlZUFVM
TCAxCisKKworCisKKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMu
ICAqLworCisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxA
bGludXgtbTY4ay5vcmc+CisgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
UEwgdjIuMC4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4K
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmlu
Zy5oPgorI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2luY2x1ZGUgImxrYy5oIgorCisjZGVmaW5l
IHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpCisK
KyNkZWZpbmUgUFJJTlRECQkweDAwMDEKKyNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyCisKK2lu
dCBjZGVidWcgPSBQUklOVEQ7CisKK2ludCB5eWxleCh2b2lkKTsKK3N0YXRpYyB2b2lkIHl5ZXJy
b3IoY29uc3QgY2hhciAqZXJyKTsKK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAq
ZXJyLCAuLi4pOworc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4p
Oworc3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCwg
aW50IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbik7CisKK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9o
YXNoW1NZTUJPTF9IQVNIU0laRV07CisKK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51
LCAqY3VycmVudF9lbnRyeTsKKworCisKKworIyBpZm5kZWYgWVlfTlVMTFBUUgorIyAgaWYgZGVm
aW5lZCBfX2NwbHVzcGx1cyAmJiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzCisjICAgZGVmaW5lIFlZ
X05VTExQVFIgbnVsbHB0cgorIyAgZWxzZQorIyAgIGRlZmluZSBZWV9OVUxMUFRSIDAKKyMgIGVu
ZGlmCisjIGVuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLwor
I2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMgZGVmaW5l
IFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAKKyNl
bmRpZgorCisKKy8qIERlYnVnIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5l
IFlZREVCVUcgMQorI2VuZGlmCisjaWYgWVlERUJVRworZXh0ZXJuIGludCB5eWRlYnVnOworI2Vu
ZGlmCisKKy8qIFRva2VuIHR5cGUuICAqLworI2lmbmRlZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUg
WVlUT0tFTlRZUEUKKyAgZW51bSB5eXRva2VudHlwZQorICB7CisgICAgVF9NQUlOTUVOVSA9IDI1
OCwKKyAgICBUX01FTlUgPSAyNTksCisgICAgVF9FTkRNRU5VID0gMjYwLAorICAgIFRfU09VUkNF
ID0gMjYxLAorICAgIFRfQ0hPSUNFID0gMjYyLAorICAgIFRfRU5EQ0hPSUNFID0gMjYzLAorICAg
IFRfQ09NTUVOVCA9IDI2NCwKKyAgICBUX0NPTkZJRyA9IDI2NSwKKyAgICBUX01FTlVDT05GSUcg
PSAyNjYsCisgICAgVF9IRUxQID0gMjY3LAorICAgIFRfSEVMUFRFWFQgPSAyNjgsCisgICAgVF9J
RiA9IDI2OSwKKyAgICBUX0VORElGID0gMjcwLAorICAgIFRfREVQRU5EUyA9IDI3MSwKKyAgICBU
X09QVElPTkFMID0gMjcyLAorICAgIFRfUFJPTVBUID0gMjczLAorICAgIFRfVFlQRSA9IDI3NCwK
KyAgICBUX0RFRkFVTFQgPSAyNzUsCisgICAgVF9TRUxFQ1QgPSAyNzYsCisgICAgVF9JTVBMWSA9
IDI3NywKKyAgICBUX1JBTkdFID0gMjc4LAorICAgIFRfVklTSUJMRSA9IDI3OSwKKyAgICBUX09Q
VElPTiA9IDI4MCwKKyAgICBUX09OID0gMjgxLAorICAgIFRfV09SRCA9IDI4MiwKKyAgICBUX1dP
UkRfUVVPVEUgPSAyODMsCisgICAgVF9VTkVRVUFMID0gMjg0LAorICAgIFRfTEVTUyA9IDI4NSwK
KyAgICBUX0xFU1NfRVFVQUwgPSAyODYsCisgICAgVF9HUkVBVEVSID0gMjg3LAorICAgIFRfR1JF
QVRFUl9FUVVBTCA9IDI4OCwKKyAgICBUX0NMT1NFX1BBUkVOID0gMjg5LAorICAgIFRfT1BFTl9Q
QVJFTiA9IDI5MCwKKyAgICBUX0VPTCA9IDI5MSwKKyAgICBUX1ZBUklBQkxFID0gMjkyLAorICAg
IFRfQVNTSUdOID0gMjkzLAorICAgIFRfQVNTSUdOX1ZBTCA9IDI5NCwKKyAgICBUX09SID0gMjk1
LAorICAgIFRfQU5EID0gMjk2LAorICAgIFRfRVFVQUwgPSAyOTcsCisgICAgVF9OT1QgPSAyOTgK
KyAgfTsKKyNlbmRpZgorCisvKiBWYWx1ZSB0eXBlLiAgKi8KKyNpZiAhIGRlZmluZWQgWVlTVFlQ
RSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAorCit1bmlvbiBZWVNUWVBFCit7CisK
KworCWNoYXIgKnN0cmluZzsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlzdHJ1Y3Qgc3ltYm9sICpz
eW1ib2w7CisJc3RydWN0IGV4cHIgKmV4cHI7CisJc3RydWN0IG1lbnUgKm1lbnU7CisJY29uc3Qg
c3RydWN0IGtjb25mX2lkICppZDsKKwllbnVtIHZhcmlhYmxlX2ZsYXZvciBmbGF2b3I7CisKKwor
fTsKKwordHlwZWRlZiB1bmlvbiBZWVNUWVBFIFlZU1RZUEU7CisjIGRlZmluZSBZWVNUWVBFX0lT
X1RSSVZJQUwgMQorIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisjZW5kaWYKKworCitl
eHRlcm4gWVlTVFlQRSB5eWx2YWw7CisKK2ludCB5eXBhcnNlICh2b2lkKTsKKworCisKKy8qIENv
cHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KKworCisvKiBJbmNs
dWRlIGtjb25mX2lkLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICov
CisjaW5jbHVkZSAia2NvbmZfaWQuYyIKKworCisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9y
dAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5
dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4Owor
I2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UOAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVf
aW50ODsKKyNlbHNlCit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OworI2VuZGlmCisK
KyNpZmRlZiBZWVRZUEVfVUlOVDE2Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQx
NjsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OworI2Vu
ZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9p
bnQxNjsKKyNlbHNlCit0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKwor
I2lmbmRlZiBZWVNJWkVfVAorIyBpZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpF
X1QgX19TSVpFX1RZUEVfXworIyBlbGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpF
X1Qgc2l6ZV90CisjIGVsaWYgISBkZWZpbmVkIFlZU0laRV9UCisjICBpbmNsdWRlIDxzdGRkZWYu
aD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgZGVmaW5lIFlZU0laRV9U
IHNpemVfdAorIyBlbHNlCisjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50CisjIGVuZGlm
CisjZW5kaWYKKworI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKKworI2lm
bmRlZiBZWV8KKyMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCisjICBp
ZiBFTkFCTEVfTkxTCisjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNF
UiBOQU1FIFNQQUNFICovCisjICAgZGVmaW5lIFlZXyhNc2dpZCkgZGdldHRleHQgKCJiaXNvbi1y
dW50aW1lIiwgTXNnaWQpCisjICBlbmRpZgorIyBlbmRpZgorIyBpZm5kZWYgWVlfCisjICBkZWZp
bmUgWVlfKE1zZ2lkKSBNc2dpZAorIyBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgWVlfQVRUUklC
VVRFCisjIGlmIChkZWZpbmVkIF9fR05VQ19fICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAmJiAoMiA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9
PSAyICYmIDk2IDw9IF9fR05VQ19NSU5PUl9fKSkpICBcCisgICAgIHx8IGRlZmluZWQgX19TVU5Q
Uk9fQyAmJiAweDUxMTAgPD0gX19TVU5QUk9fQworIyAgZGVmaW5lIFlZX0FUVFJJQlVURShTcGVj
KSBfX2F0dHJpYnV0ZV9fKFNwZWMpCisjIGVsc2UKKyMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3Bl
YykgLyogZW1wdHkgKi8KKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIFlZX0FUVFJJQlVURV9Q
VVJFCisjIGRlZmluZSBZWV9BVFRSSUJVVEVfUFVSRSAgIFlZX0FUVFJJQlVURSAoKF9fcHVyZV9f
KSkKKyNlbmRpZgorCisjaWZuZGVmIFlZX0FUVFJJQlVURV9VTlVTRUQKKyMgZGVmaW5lIFlZX0FU
VFJJQlVURV9VTlVTRUQgWVlfQVRUUklCVVRFICgoX191bnVzZWRfXykpCisjZW5kaWYKKworI2lm
ICFkZWZpbmVkIF9Ob3JldHVybiBcCisgICAgICYmICghZGVmaW5lZCBfX1NURENfVkVSU0lPTl9f
IHx8IF9fU1REQ19WRVJTSU9OX18gPCAyMDExMTIpCisjIGlmIGRlZmluZWQgX01TQ19WRVIgJiYg
MTIwMCA8PSBfTVNDX1ZFUgorIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVy
bikKKyMgZWxzZQorIyAgZGVmaW5lIF9Ob3JldHVybiBZWV9BVFRSSUJVVEUgKChfX25vcmV0dXJu
X18pKQorIyBlbmRpZgorI2VuZGlmCisKKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJu
aW5ncyBieSAidXNpbmciIEUuICAqLworI2lmICEgZGVmaW5lZCBsaW50IHx8IGRlZmluZWQgX19H
TlVDX18KKyMgZGVmaW5lIFlZVVNFKEUpICgodm9pZCkgKEUpKQorI2Vsc2UKKyMgZGVmaW5lIFlZ
VVNFKEUpIC8qIGVtcHR5ICovCisjZW5kaWYKKworI2lmIGRlZmluZWQgX19HTlVDX18gJiYgNDA3
IDw9IF9fR05VQ19fICogMTAwICsgX19HTlVDX01JTk9SX18KKy8qIFN1cHByZXNzIGFuIGluY29y
cmVjdCBkaWFnbm9zdGljIGFib3V0IHl5bHZhbCBiZWluZyB1bmluaXRpYWxpemVkLiAgKi8KKyMg
ZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOIFwKKyAgICBfUHJhZ21h
ICgiR0NDIGRpYWdub3N0aWMgcHVzaCIpIFwKKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMg
aWdub3JlZCBcIi1XdW5pbml0aWFsaXplZFwiIilcCisgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgXCItV21heWJlLXVuaW5pdGlhbGl6ZWRcIiIpCisjIGRlZmluZSBZWV9JR05P
UkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQgXAorICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3Rp
YyBwb3AiKQorI2Vsc2UKKyMgZGVmaW5lIFlZX0lOSVRJQUxfVkFMVUUoVmFsdWUpIFZhbHVlCisj
ZW5kaWYKKyNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyMgZGVm
aW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOCisjIGRlZmluZSBZWV9JR05P
UkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQKKyNlbmRpZgorI2lmbmRlZiBZWV9JTklUSUFMX1ZB
TFVFCisjIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLworI2Vu
ZGlmCisKKworI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQorCisv
KiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9yIG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nh
cnkgc3ltYm9scy4gICovCisKKyMgaWZkZWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICBpZiBZWVNU
QUNLX1VTRV9BTExPQ0EKKyMgICBpZmRlZiBfX0dOVUNfXworIyAgICBkZWZpbmUgWVlTVEFDS19B
TExPQyBfX2J1aWx0aW5fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdf
SU5DUgorIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLworIyAgIGVsaWYgZGVmaW5lZCBfQUlYCisjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9D
IF9fYWxsb2NhCisjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSCisjICAgIGluY2x1ZGUgPG1hbGxv
Yy5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgIGRlZmluZSBhbGxv
Y2EgX2FsbG9jYQorIyAgIGVsc2UKKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgYWxsb2NhCisj
ICAgIGlmICEgZGVmaW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUworIyAg
ICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyAgICAgIC8qIFVzZSBFWElUX1NVQ0NFU1MgYXMgYSB3aXRuZXNzIGZvciBzdGRsaWIuaC4gICov
CisjICAgICBpZm5kZWYgRVhJVF9TVUNDRVNTCisjICAgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAw
CisjICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgor
CisjIGlmZGVmIFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyAnZW1wdHkgaWYtYm9k
eScgd2FybmluZy4gICovCisjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0
eSAqLzsgfSB3aGlsZSAoMCkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01BWElNVU0KKyAgICAv
KiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRv
bSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBh
cyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGludm9rZSBhbGxvY2Eg
KE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxlciBudW1iZXIKKyAg
ICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFj
ayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJl
YXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlGUkVFCisjICBpZm5k
ZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYm
ICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXAorICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9D
IHx8IGRlZmluZWQgbWFsbG9jKSBcCisgICAgICAgICAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8
IGRlZmluZWQgZnJlZSkpKQorIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04g
VVNFUiBOQU1FIFNQQUNFICovCisjICAgaWZuZGVmIEVYSVRfU1VDQ0VTUworIyAgICBkZWZpbmUg
RVhJVF9TVUNDRVNTIDAKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRlZiBZWU1BTExPQwor
IyAgIGRlZmluZSBZWU1BTExPQyBtYWxsb2MKKyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEg
ZGVmaW5lZCBFWElUX1NVQ0NFU1MKK3ZvaWQgKm1hbGxvYyAoWVlTSVpFX1QpOyAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjICBpZm5kZWYg
WVlGUkVFCisjICAgZGVmaW5lIFlZRlJFRSBmcmVlCisjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYg
ISBkZWZpbmVkIEVYSVRfU1VDQ0VTUwordm9pZCBmcmVlICh2b2lkICopOyAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5k
aWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovCisKKworI2lm
ICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMg
XAorICAgICAgICAgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNf
VFJJVklBTCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkg
c3RhY2sgbWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3Nf
YWxsb2M7CisgIFlZU1RZUEUgeXl2c19hbGxvYzsKK307CisKKy8qIFRoZSBzaXplIG9mIHRoZSBt
YXhpbXVtIGdhcCBiZXR3ZWVuIG9uZSBhbGlnbmVkIHN0YWNrIGFuZCB0aGUgbmV4dC4gICovCisj
IGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9uIHl5YWxsb2MpIC0gMSkK
KworLyogVGhlIHNpemUgb2YgYW4gYXJyYXkgbGFyZ2UgdG8gZW5vdWdoIHRvIGhvbGQgYWxsIHN0
YWNrcywgZWFjaCB3aXRoCisgICBOIGVsZW1lbnRzLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfQllU
RVMoTikgXAorICAgICAoKE4pICogKHNpemVvZiAoeXl0eXBlX2ludDE2KSArIHNpemVvZiAoWVlT
VFlQRSkpIFwKKyAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkKKworIyBkZWZpbmUgWVlDT1BZ
X05FRURFRCAxCisKKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0
aGUgbmV3IG9uZS4gIFRoZQorICAgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQgWVlTVEFDS1NJ
WkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCisgICBlbGVtZW50cyBpbiB0aGUgc3Rh
Y2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9mIHRoZQorICAgc3RhY2suICBB
ZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQK
KyAgIHN0YWNrLiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0
YWNrKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgWVlTSVpFX1QgeXluZXdieXRlczsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgWVlDT1BZICgmeXlwdHItPlN0
YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
U3RhY2sgPSAmeXlwdHItPlN0YWNrX2FsbG9jOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3Rh
Y2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXAorICAgICAgICB5eXB0ciArPSB5eW5ld2J5dGVz
IC8gc2l6ZW9mICgqeXlwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIHdoaWxlICgwKQorCisjZW5kaWYKKworI2lmIGRlZmluZWQgWVlDT1BZX05F
RURFRCAmJiBZWUNPUFlfTkVFREVECisvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBTUkMgdG8g
RFNULiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFwLiAgKi8K
KyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVDX18K
KyMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgXAorICAgICAgX19idWlsdGluX21l
bWNweSAoRHN0LCBTcmMsIChDb3VudCkgKiBzaXplb2YgKCooU3JjKSkpCisjICBlbHNlCisjICAg
ZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQpICAgICAgICAgICAgICBcCisgICAgICBkbyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgWVlTSVpFX1QgeXlp
OyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgZm9yICh5eWkgPSAwOyB5eWkg
PCAoQ291bnQpOyB5eWkrKykgICBcCisgICAgICAgICAgICAoRHN0KVt5eWldID0gKFNyYylbeXlp
XTsgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICB3aGlsZSAoMCkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyog
IVlZQ09QWV9ORUVERUQgKi8KKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRl
cm1pbmF0aW9uIHN0YXRlLiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgMTEKKy8qIFlZTEFTVCAtLSBM
YXN0IGluZGV4IGluIFlZVEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAzMzIKKworLyogWVlO
VE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDQ0
CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5U
UyAgNTMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJV
TEVTICAxMjkKKy8qIFlZTlNUQVRFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUg
WVlOU1RBVEVTICAyMTEKKworLyogWVlUUkFOU0xBVEVbWVlYXSAtLSBTeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gWVlYIGFzIHJldHVybmVkCisgICBieSB5eWxleCwgd2l0aCBvdXQtb2Yt
Ym91bmRzIGNoZWNraW5nLiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgorI2RlZmluZSBZWU1B
WFVUT0sgICAyOTgKKworI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAoKHVuc2lnbmVkIGludCkgKFlZWCkg
PD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spCisKKy8qIFlZVFJB
TlNMQVRFW1RPS0VOLU5VTV0gLS0gU3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFRPS0VO
LU5VTQorICAgYXMgcmV0dXJuZWQgYnkgeXlsZXgsIHdpdGhvdXQgb3V0LW9mLWJvdW5kcyBjaGVj
a2luZy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQorewor
ICAgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICA1LCAgICAg
NiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0
LAorICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAg
IDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjks
ICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwKKyAgICAgIDM1LCAgICAzNiwgICAg
MzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMKK307CisKKyNpZiBZ
WURFQlVHCisgIC8qIFlZUkxJTkVbWVlOXSAtLSBTb3VyY2UgbGluZSB3aGVyZSBydWxlIG51bWJl
ciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGlu
ZVtdID0KK3sKKyAgICAgICAwLCAgIDExNCwgICAxMTQsICAgMTE0LCAgIDExNiwgICAxMTYsICAg
MTIwLCAgIDEyNSwgICAxMjcsICAgMTI4LAorICAgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzIs
ICAgMTM2LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsCisgICAgIDE0MCwgICAx
NDAsICAgMTQwLCAgIDE0MCwgICAxNDQsICAgMTQ1LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0
OSwKKyAgICAgMTUwLCAgIDE1NCwgICAxNTUsICAgMTYxLCAgIDE2OCwgICAxNzMsICAgMTgwLCAg
IDE4OSwgICAxOTEsICAgMTkyLAorICAgICAxOTMsICAgMTk0LCAgIDE5NSwgICAxOTYsICAgMTk5
LCAgIDIwNywgICAyMTMsICAgMjIzLCAgIDIyOSwgICAyMzUsCisgICAgIDI0MSwgICAyNDQsICAg
MjQ2LCAgIDI1OSwgICAyNjAsICAgMjY1LCAgIDI3NSwgICAyODAsICAgMjg4LCAgIDI5MSwKKyAg
ICAgMjkzLCAgIDI5NCwgICAyOTUsICAgMjk2LCAgIDI5NywgICAzMDAsICAgMzA2LCAgIDMxNywg
ICAzMjMsICAgMzMzLAorICAgICAzMzUsICAgMzQwLCAgIDM0OCwgICAzNTYsICAgMzU5LCAgIDM2
MSwgICAzNjIsICAgMzYzLCAgIDM2OCwgICAzNzUsCisgICAgIDM4MCwgICAzODgsICAgMzkxLCAg
IDM5MywgICAzOTQsICAgMzk1LCAgIDM5OCwgICA0MDcsICAgNDE0LCAgIDQxOSwKKyAgICAgNDI1
LCAgIDQ0MywgICA0NDUsICAgNDQ2LCAgIDQ0NywgICA0NTAsICAgNDU4LCAgIDQ2MCwgICA0NjEs
ICAgNDY0LAorICAgICA0NzEsICAgNDczLCAgIDQ3OCwgICA0NzksICAgNDgyLCAgIDQ4MywgICA0
ODQsICAgNDg4LCAgIDQ4OSwgICA0OTIsCisgICAgIDQ5MywgICA0OTYsICAgNDk3LCAgIDQ5OCwg
ICA0OTksICAgNTAwLCAgIDUwMSwgICA1MDIsICAgNTAzLCAgIDUwNCwKKyAgICAgNTA1LCAgIDUw
NiwgICA1MTAsICAgNTEyLCAgIDUxMywgICA1MTYsICAgNTE3LCAgIDUyMSwgICA1MjQsICAgNTI1
Cit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9TRSB8fCAwCisvKiBZ
WVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5V
TS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVuLCBzdGFydGluZyBhdCBZWU5UT0tFTlMs
IG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0K
K3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5lZCIsICJUX01BSU5NRU5VIiwgIlRfTUVO
VSIsICJUX0VORE1FTlUiLAorICAiVF9TT1VSQ0UiLCAiVF9DSE9JQ0UiLCAiVF9FTkRDSE9JQ0Ui
LCAiVF9DT01NRU5UIiwgIlRfQ09ORklHIiwKKyAgIlRfTUVOVUNPTkZJRyIsICJUX0hFTFAiLCAi
VF9IRUxQVEVYVCIsICJUX0lGIiwgIlRfRU5ESUYiLCAiVF9ERVBFTkRTIiwKKyAgIlRfT1BUSU9O
QUwiLCAiVF9QUk9NUFQiLCAiVF9UWVBFIiwgIlRfREVGQVVMVCIsICJUX1NFTEVDVCIsICJUX0lN
UExZIiwKKyAgIlRfUkFOR0UiLCAiVF9WSVNJQkxFIiwgIlRfT1BUSU9OIiwgIlRfT04iLCAiVF9X
T1JEIiwgIlRfV09SRF9RVU9URSIsCisgICJUX1VORVFVQUwiLCAiVF9MRVNTIiwgIlRfTEVTU19F
UVVBTCIsICJUX0dSRUFURVIiLCAiVF9HUkVBVEVSX0VRVUFMIiwKKyAgIlRfQ0xPU0VfUEFSRU4i
LCAiVF9PUEVOX1BBUkVOIiwgIlRfRU9MIiwgIlRfVkFSSUFCTEUiLCAiVF9BU1NJR04iLAorICAi
VF9BU1NJR05fVkFMIiwgIlRfT1IiLCAiVF9BTkQiLCAiVF9FUVVBTCIsICJUX05PVCIsICIkYWNj
ZXB0IiwgImlucHV0IiwKKyAgInN0YXJ0IiwgIm1haW5tZW51X3N0bXQiLCAic3RtdF9saXN0Iiwg
Im9wdGlvbl9uYW1lIiwgImNvbW1vbl9zdG10IiwKKyAgIm9wdGlvbl9lcnJvciIsICJjb25maWdf
ZW50cnlfc3RhcnQiLCAiY29uZmlnX3N0bXQiLAorICAibWVudWNvbmZpZ19lbnRyeV9zdGFydCIs
ICJtZW51Y29uZmlnX3N0bXQiLCAiY29uZmlnX29wdGlvbl9saXN0IiwKKyAgImNvbmZpZ19vcHRp
b24iLCAic3ltYm9sX29wdGlvbiIsICJzeW1ib2xfb3B0aW9uX2xpc3QiLAorICAic3ltYm9sX29w
dGlvbl9hcmciLCAiY2hvaWNlIiwgImNob2ljZV9lbnRyeSIsICJjaG9pY2VfZW5kIiwKKyAgImNo
b2ljZV9zdG10IiwgImNob2ljZV9vcHRpb25fbGlzdCIsICJjaG9pY2Vfb3B0aW9uIiwgImNob2lj
ZV9ibG9jayIsCisgICJpZl9lbnRyeSIsICJpZl9lbmQiLCAiaWZfc3RtdCIsICJpZl9ibG9jayIs
ICJtZW51IiwgIm1lbnVfZW50cnkiLAorICAibWVudV9lbmQiLCAibWVudV9zdG10IiwgIm1lbnVf
YmxvY2siLCAic291cmNlX3N0bXQiLCAiY29tbWVudCIsCisgICJjb21tZW50X3N0bXQiLCAiaGVs
cF9zdGFydCIsICJoZWxwIiwgImRlcGVuZHNfbGlzdCIsICJkZXBlbmRzIiwKKyAgInZpc2liaWxp
dHlfbGlzdCIsICJ2aXNpYmxlIiwgInByb21wdF9zdG10X29wdCIsICJwcm9tcHQiLCAiZW5kIiwg
Im5sIiwKKyAgImlmX2V4cHIiLCAiZXhwciIsICJub25jb25zdF9zeW1ib2wiLCAic3ltYm9sIiwg
IndvcmRfb3B0IiwKKyAgImFzc2lnbm1lbnRfc3RtdCIsICJhc3NpZ25fdmFsIiwgWVlfTlVMTFBU
UgorfTsKKyNlbmRpZgorCisjIGlmZGVmIFlZUFJJTlQKKy8qIFlZVE9LTlVNW05VTV0gLS0gKEV4
dGVybmFsKSB0b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgIChpbnRlcm5hbCkg
c3ltYm9sIG51bWJlciBOVU0gKHdoaWNoIG11c3QgYmUgdGhhdCBvZiBhIHRva2VuKS4gICovCitz
dGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0KK3sKKyAgICAgICAwLCAgIDI1
NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0
LAorICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAg
MjcyLCAgIDI3MywgICAyNzQsCisgICAgIDI3NSwgICAyNzYsICAgMjc3LCAgIDI3OCwgICAyNzks
ICAgMjgwLCAgIDI4MSwgICAyODIsICAgMjgzLCAgIDI4NCwKKyAgICAgMjg1LCAgIDI4NiwgICAy
ODcsICAgMjg4LCAgIDI4OSwgICAyOTAsICAgMjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LAorICAg
ICAyOTUsICAgMjk2LCAgIDI5NywgICAyOTgKK307CisjIGVuZGlmCisKKyNkZWZpbmUgWVlQQUNU
X05JTkYgLTkyCisKKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXAor
ICAoISEoKFl5c3RhdGUpID09ICgtOTIpKSkKKworI2RlZmluZSBZWVRBQkxFX05JTkYgLTg5CisK
KyNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcCisgIDAKKwor
ICAvKiBZWVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9u
IGRlc2NyaWJpbmcKKyAgICAgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50
MTYgeXlwYWN0W10gPQoreworICAgICAgMjEsICAgIDM4LCAgIC05MiwgICAgIDQsICAgLTkyLCAg
IC05MiwgICAxNTcsICAgIDIzLCAgIC05MiwgICAtOTIsCisgICAgIC0xOSwgICAtOTIsICAgMTkx
LCAgIC0xNiwgICAgMzgsICAgLTEzLCAgICAzOCwgICAgIDYsICAgIDI0LCAgICAzOCwKKyAgICAg
IDQ4LCAgICA0OCwgICAgMzQsICAgIDQzLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLAorICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAgOTYsICAgLTkyLCAgICA0NCwg
ICAxMTEsICAgLTkyLCAgIC05MiwgICAtOTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05
MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
IDgzLAorICAgICAtOTIsICAgIDg5LCAgIC05MiwgICAxMTYsICAgLTkyLCAgIDEzMywgICAtOTIs
ICAgMTM0LCAgIDE0NiwgICAtOTIsCisgICAgICAzNCwgICAgMzQsICAgMTEzLCAgIC05MiwgICAg
NzMsICAgLTkyLCAgIDE1MCwgICAgNjIsICAgMTUxLCAgICAzMSwKKyAgICAgMTIzLCAgIDI1OCwg
ICAyOTMsICAgMjgyLCAgICAtMiwgICAyODIsICAgMjI1LCAgIC05MiwgICAtOTIsICAgLTkyLAor
ICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAgMzAsICAgLTkyLCAgIC05MiwgICAgMzQsICAgIDM0
LCAgICA2NSwgICAgNjUsCisgICAgICA2NSwgICAgNjUsICAgIDY1LCAgICA2NSwgICAtOTIsICAg
LTkyLCAgIDE1MiwgICAtOTIsICAgMTUzLCAgIDE1NCwKKyAgICAgMTEwLCAgICAzOCwgICAgMzgs
ICAgIDM0LCAgICA0OCwgICAgNDgsICAgIDY1LCAgIC05MiwgICAyMDIsICAgLTkyLAorICAgICAt
OTIsICAgLTkyLCAgIC05MiwgICAyMDMsICAgLTkyLCAgIC05MiwgICAxODEsICAgIDM4LCAgICAz
OCwgICAgNDgsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwKKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgMjA1
LCAgIC05MiwgICAgODAsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLAorICAgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAxNzksICAgLTkyLCAgIC05MiwgICAt
OTIsCisgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAgMzQsICAgMjA1LCAgIDE4NSwKKyAgICAgMjA1LCAgIC0xMSwgICAyMDUsICAgMjA1LCAgICA2
NSwgICAgMzYsICAgMTg2LCAgIC05MiwgICAtOTIsICAgMjA1LAorICAgICAxODcsICAgMjA1LCAg
ICAzNCwgICAtOTIsICAgMTE1LCAgIDE4OCwgICAtOTIsICAgLTkyLCAgIDIwMSwgICAyMTQsCisg
ICAgIDIxNSwgICAyMDUsICAgMTk2LCAgIC05MiwgICAtOTIsICAgMjE3LCAgIC05MiwgICAyMTgs
ICAgIDgxLCAgIC05MiwKKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDIxOSwgICAg
MzgsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLAorICAgICAtOTIKK307CisKKyAgLyogWVlE
RUZBQ1RbU1RBVEUtTlVNXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RB
VEUtTlVNLgorICAgICBQZXJmb3JtZWQgd2hlbiBZWVRBQkxFIGRvZXMgbm90IHNwZWNpZnkgc29t
ZXRoaW5nIGVsc2UgdG8gZG8uICBaZXJvCisgICAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVy
cm9yLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAg
ICAgNywgICAgIDAsICAgMTA3LCAgICAgMCwgICAgIDMsICAgICA3LCAgICAgMCwgICAgIDcsICAg
MTAyLCAgIDEwMywKKyAgICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDEyNSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDE1LCAgICAyMCwgICAgMTYsICAgIDE3LCAgICAyMiwgICAgMTgsCisgICAgICAxOSwg
ICAgMjEsICAgIDIzLCAgICAgMCwgICAgMjQsICAgICAwLCAgICAgMCwgICAgIDgsICAgIDM3LCAg
ICAyNywKKyAgICAgIDM3LCAgICAyOCwgICAgNTksICAgIDY5LCAgICAgOSwgICAgNzQsICAgIDI1
LCAgICA5NiwgICAgODIsICAgIDEwLAorICAgICAgMjksICAgIDkxLCAgICAyNiwgICAgMTEsICAg
IDMwLCAgIDEwOCwgICAgIDIsICAgICA2LCAgICAxNCwgICAgIDAsCisgICAgIDEwNCwgICAgIDAs
ICAgMTI2LCAgICAgMCwgICAxMDUsICAgICAwLCAgIDEyMiwgICAgIDAsICAgICAwLCAgIDEyNCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIzLCAgIDExMSwgICAxMDYsICAgICAwLCAgIDEy
OCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDkxLCAg
ICAgMCwgICAgIDAsICAgIDc4LCAgICA4NiwgICAgNTUsCisgICAgICA4NywgICAgMzMsICAgIDM1
LCAgICAgMCwgICAxMTksICAgIDcxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAxMjksICAgICAwLCAgICAxMywgICAg
IDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDEwMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDUxLCAgICAgMCwgICAgNDMsCisgICAgICA0MiwgICAgMzgsICAgIDM5LCAgICAg
MCwgICAgNDEsICAgIDQwLCAgICAgMCwgICAgIDAsICAgMTAwLCAgICAgMCwKKyAgICAgIDYzLCAg
ICA2NCwgICAgNjAsICAgIDYyLCAgICA2MSwgICAgNzAsICAgIDU4LCAgICA1NywgICAgNzUsICAg
IDc3LAorICAgICAgNzMsICAgIDc2LCAgICA3MiwgICAxMDksICAgIDk4LCAgICAgMCwgICAgOTcs
ICAgIDgzLCAgICA4NSwgICAgODEsCisgICAgICA4NCwgICAgODAsICAgIDkzLCAgICA5NCwgICAg
OTIsICAgMTE4LCAgIDEyMCwgICAxMjEsICAgMTE3LCAgIDExMiwKKyAgICAgMTEzLCAgIDExNCwg
ICAxMTUsICAgMTE2LCAgIDEyNywgICAgMzIsICAgIDg5LCAgICAgMCwgICAxMDksICAgICAwLAor
ICAgICAxMDksICAgMTA5LCAgIDEwOSwgICAxMDksICAgICAwLCAgICAgMCwgICAgIDAsICAgIDkw
LCAgICA2NywgICAxMDksCisgICAgICAgMCwgICAxMDksICAgICAwLCAgICA5OSwgICAgIDAsICAg
ICAwLCAgICA0NCwgICAxMDEsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDEwOSwgICAgNTMs
ICAgIDUwLCAgICAzMSwgICAgIDAsICAgIDY2LCAgICAgMCwgICAxMTAsICAgIDk1LAorICAgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgICAwLCAgICAgMCwgICAgNTIsICAgIDY1LCAgICA2
OCwgICAgNDksCisgICAgICA1NAorfTsKKworICAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLwor
c3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQoreworICAgICAtOTIsICAgLTky
LCAgIDI0OSwgICAtOTIsICAgMjUyLCAgIC05MiwgICAgLTksICAgLTY3LCAgIC05MiwgICAtOTIs
CisgICAgIC05MiwgICAtOTIsICAgMjIwLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwKKyAgICAgIDM1LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLAorICAgICAtOTIsICAgMTAwLCAgIC05
MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgMTc3LCAgIDE5NSwgICAtNjUsCisgICAg
IC05MiwgICAtOTIsICAgMTM3LCAgICAtMSwgICAgMjYsICAgLTkyLCAgIDE0MSwgICAtNjksICAg
LTE1LCAgIC05MSwKKyAgICAgLTkyLCAgIC05MiwgICAtOTIKK307CisKKyAgLyogWVlERUZHT1RP
W05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9
Cit7CisgICAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgIDM2LCAgICAzNywg
ICAxMjAsICAgIDM4LCAgICAzOSwKKyAgICAgIDQwLCAgICA0MSwgICAgNzksICAgMTIxLCAgIDEy
MiwgICAxNzUsICAgMjA2LCAgICA0MiwgICAgNDMsICAgMTM2LAorICAgICAgNDQsICAgIDgxLCAg
IDEzMiwgICAgODIsICAgIDQ1LCAgIDE0MCwgICAgNDYsICAgIDgzLCAgICA0NywgICAgNDgsCisg
ICAgIDE0OSwgICAgNDksICAgIDg1LCAgICA1MCwgICAgNTEsICAgIDUyLCAgIDEyMywgICAxMjQs
ICAgIDg2LCAgIDEyNSwKKyAgICAgIDg0LCAgIDE0NiwgICAxNjksICAgMTcwLCAgICA1MywgICAg
IDcsICAgMTgzLCAgICA3MiwgICAgNzMsICAgIDc0LAorICAgICAgNjMsICAgIDU0LCAgIDEwNgor
fTsKKworICAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXSAtLSBXaGF0IHRvIGRvIGluIHN0
YXRlIFNUQVRFLU5VTS4gIElmCisgICAgIHBvc2l0aXZlLCBzaGlmdCB0aGF0IHRva2VuLiAgSWYg
bmVnYXRpdmUsIHJlZHVjZSB0aGUgcnVsZSB3aG9zZQorICAgICBudW1iZXIgaXMgdGhlIG9wcG9z
aXRlLiAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLworc3RhdGljIGNvbnN0IHl5
dHlwZV9pbnQxNiB5eXRhYmxlW10gPQoreworICAgICAgMTAsICAgIDkzLCAgICA5NCwgICAxODIs
ICAgIDExLCAgICA2NywgICAgNjgsICAgMTU4LCAgIDE1OSwgICAxNjAsCisgICAgIDE2MSwgICAx
NjIsICAgMTYzLCAgICA1OSwgICAxMzEsICAgIDYxLCAgIDEzNCwgICAgNTcsICAgIDY1LCAgIDE1
MywKKyAgICAgIDU4LCAgIDE1NCwgICAxNDMsICAgIDYwLCAgICAgMSwgICAxNzQsICAgICAxLCAg
IDE1NiwgICAxNTcsICAgIDk2LAorICAgICAgOTcsICAgLTM0LCAgIDEwOCwgICAgNjIsICAgMTQ0
LCAgIC0zNCwgICAtMzQsICAgLTM0LCAgIC0zNCwgICAtMzQsCisgICAgIC0zNCwgICAtMzQsICAg
LTM0LCAgIDEwOSwgICAxNzEsICAgLTM0LCAgIC0zNCwgICAxMTAsICAgLTM0LCAgIDExMSwKKyAg
ICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAtMzQsICAgMTE3LCAgICAgMiwg
ICAxMTgsICAgIDU1LAorICAgICAgNjQsICAgIDY2LCAgICA2OSwgICAxOTIsICAgMTU1LCAgICAg
OCwgICAgIDksICAgMTE5LCAgIC0zNCwgICAgNzAsCisgICAgICA5NiwgICAgOTcsICAgMTkzLCAg
IDEzNSwgICAxMzgsICAgIDY2LCAgIDE0NywgICAgNzEsICAgMTUzLCAgICA3NSwKKyAgICAgMTU0
LCAgIDEwOCwgICAgNzcsICAgMTkxLCAgIC03OSwgICAtNzksICAgLTc5LCAgIC03OSwgICAtNzks
ICAgLTc5LAorICAgICAtNzksICAgLTc5LCAgICA2NiwgICAgNjksICAgLTc5LCAgIC03OSwgICAx
MTAsICAgIDc2LCAgIDE4NCwgICAxNzIsCisgICAgIDE3MywgICAxMDUsICAgIDk4LCAgICA5OSwg
ICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMTgsICAgMTM3LCAgIDE0MiwKKyAgICAgMTY4LCAgIDE1
MSwgICAgNzgsICAgMTk4LCAgIDE4MSwgICAxMDMsICAgMTUyLCAgIC03OSwgICAxMzksICAgIDg3
LAorICAgICAxNDgsICAgIDk2LCAgICA5NywgICAtMzYsICAgMTA4LCAgICA4OCwgICAxNzksICAg
LTM2LCAgIC0zNiwgICAtMzYsCisgICAgIC0zNiwgICAtMzYsICAgLTM2LCAgIC0zNiwgICAtMzYs
ICAgMTA5LCAgIDE2NywgICAtMzYsICAgLTM2LCAgIDExMCwKKyAgICAgLTM2LCAgIDExMSwgICAx
MTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIC0zNiwgICAxMTcsICAgIDk1LAorICAg
ICAxMTgsICAgMTk5LCAgICA4OSwgICAgOTYsICAgIDk3LCAgICA5NiwgICAgOTcsICAgIC01LCAg
ICAxMywgICAxMTksCisgICAgIC0zNiwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICA5MCwKKyAgICAgIDkxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEs
ICAgIDMyLCAgICA5MiwgICAxNDEsICAgIDMzLCAgIDE1MCwgICAxMDQsICAgMTA3LCAgIDE2NCwg
ICAxNjUsCisgICAgIDE2NiwgICAgLTQsICAgIDEzLCAgICAzNCwgICAgMzUsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgMTc2LCAg
IDIxMCwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAxNzcsICAgMTc4LCAgICAzMywgICAxODIs
CisgICAgICA5NywgICAxODYsICAgMTk0LCAgIDE5NiwgICAyMDAsICAgLTg4LCAgIDEwOCwgICAg
MzQsICAgIDM1LCAgIC04OCwKKyAgICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwg
ICAtODgsICAgLTg4LCAgIDIwMSwgICAyMDUsICAgLTg4LAorICAgICAtODgsICAgMTEwLCAgIC04
OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsCisgICAg
IDIwMiwgICAyMDMsICAgMTE4LCAgIDIwNywgICAyMDgsICAgMjA5LCAgICA1NiwgICAgMTIsICAg
MTMzLCAgIDEwOCwKKyAgICAgIDgwLCAgIDE1MiwgICAtODgsICAgLTU2LCAgIC01NiwgICAxODAs
ICAgLTU2LCAgIC01NiwgICAtNTYsICAgLTU2LAorICAgICAxMDksICAgICAwLCAgIC01NiwgICAt
NTYsICAgMTEwLCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyOSwgICAxNDUsCisgICAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE4LCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywKKyAgICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgIDEzMCwgICAtNTYsICAgIDIy
LCAgICAyMywgICAgMTUsICAgIDE2LAorICAgICAgIDAsICAgIDE4LCAgICAxOSwgICAgMjAsICAg
IDIxLCAgICAgMCwgICAgIDAsICAgIDIyLCAgICAyMywgICAxODUsCisgICAgICAgMCwgICAxODcs
ICAgMTg4LCAgIDE4OSwgICAxOTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAzNSwK
KyAgICAgMTk1LCAgICAgMCwgICAxOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDM0LAorICAgICAgMzUsICAgICAwLCAgIDIwNAorfTsKKworc3RhdGljIGNv
bnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQoreworICAgICAgIDEsICAgIDcwLCAgICA3MSwg
ICAgMTQsICAgICAwLCAgICAyMCwgICAgMjEsICAgIDk4LCAgICA5OSwgICAxMDAsCisgICAgIDEw
MSwgICAxMDIsICAgMTAzLCAgICAxNCwgICAgODEsICAgIDE2LCAgICA4MSwgICAgMzYsICAgIDE5
LCAgICA4NiwKKyAgICAgIDM2LCAgICA4NiwgICAgMjQsICAgIDM2LCAgICAgMywgICAxMTYsICAg
ICAzLCAgICA5NiwgICAgOTcsICAgIDQwLAorICAgICAgNDEsICAgICAwLCAgICAgMSwgICAgMjcs
ICAgIDM2LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwgICAg
MTAsICAgIDExLCAgICAxMiwgICAxMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwKKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAzNiwgICAgMjcsICAgIDM2LAorICAgICAgMzYsICAgIDI3LCAgICAyOCwgICAgMjcsICAgIDM0
LCAgICAyNywgICAgMjgsICAgIDM2LCAgICAzNywgICAgMzUsCisgICAgICA0MCwgICAgNDEsICAg
IDM2LCAgICA4MiwgICAgODMsICAgIDI3LCAgICA4NSwgICAgNDMsICAgMTQ1LCAgICAzNiwKKyAg
ICAgMTQ1LCAgICAgMSwgICAgMzgsICAgMTc0LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LAorICAgICAgMTAsICAgIDExLCAgICAyNywgICAgMjgsICAgIDE0LCAgICAx
NSwgICAgMTYsICAgICAxLCAgIDE2NywgICAxMTQsCisgICAgIDExNSwgICAgMzksICAgIDI5LCAg
ICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjcsICAgIDgyLCAgICA4MywKKyAgICAgMTEx
LCAgICA4NSwgICAgIDEsICAgMTgyLCAgIDEyOSwgICAgNDIsICAgIDM2LCAgICAzNywgICAgODMs
ICAgIDM2LAorICAgICAgODUsICAgIDQwLCAgICA0MSwgICAgIDAsICAgICAxLCAgICAzNiwgICAx
MjcsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgMTEsICAgIDEyLCAgICAyNiwgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDM2
LAorICAgICAgMjcsICAgIDM2LCAgICAzNiwgICAgNDAsICAgIDQxLCAgICA0MCwgICAgNDEsICAg
ICAwLCAgICAgMSwgICAgMzYsCisgICAgICAzNywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzNiwKKyAgICAgIDM2LCAgICAxNCwgICAg
MTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLAorICAg
ICAgMjMsICAgIDI0LCAgICAzNiwgICAgODMsICAgIDI3LCAgICA4NSwgICAgMzYsICAgIDM2LCAg
ICAzNiwgICAgMzYsCisgICAgICAzNiwgICAgIDAsICAgICAxLCAgICAzNiwgICAgMzcsICAgICA0
LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAg
ICAxLCAgIDIwNSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LAorICAgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMTMsICAgIDM2LCAgICAyNywg
ICAgMTQsCisgICAgICA0MSwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzYsICAgICAwLCAgICAg
MSwgICAgMzYsICAgIDM3LCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAzNiwgICAgNDIsICAgIDE0LAorICAgICAgMTUsICAgIDE2
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
CisgICAgICAzNiwgICAgMzYsICAgIDI3LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAgNywgICAg
IDUsICAgIDgxLCAgICAgMSwKKyAgICAgIDQwLCAgICAzNiwgICAgMzcsICAgICA1LCAgICAgNiwg
ICAxMjgsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIC0xLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgODQsCisgICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI3LCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzNiwgICAgMzcs
ICAgIDE0LCAgICAxNSwgICAgIDUsICAgICA2LAorICAgICAgLTEsICAgICA4LCAgICAgOSwgICAg
MTAsICAgIDExLCAgICAtMSwgICAgLTEsICAgIDE0LCAgICAxNSwgICAxNjgsCisgICAgICAtMSwg
ICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAg
ICAzNywKKyAgICAgMTc5LCAgICAtMSwgICAxODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIDM2LAorICAgICAgMzcsICAgIC0xLCAgIDE5MQorfTsKKworICAv
KiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vz
c2luZworICAgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8KK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAgICAzLCAgICAzNiwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDg5LCAgICAyNywgICAgMjgsCisgICAgICA4NywgICAg
IDAsICAgIDQ4LCAgICAgMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAg
OSwKKyAgICAgIDEwLCAgICAxMSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAg
ICAxOSwgICAgMjAsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjcsICAgIDM2
LCAgICAzNywgICAgNDksICAgIDUwLCAgICA1MiwgICAgNTMsCisgICAgICA1NCwgICAgNTUsICAg
IDYxLCAgICA2MiwgICAgNjQsICAgIDY4LCAgICA3MCwgICAgNzIsICAgIDczLCAgICA3NSwKKyAg
ICAgIDc3LCAgICA3OCwgICAgNzksICAgIDg4LCAgICA5NSwgICAgMzYsICAgIDQ2LCAgICAzNiwg
ICAgMzYsICAgIDg3LAorICAgICAgMzYsICAgIDg3LCAgICAyNywgICAgOTQsICAgIDM2LCAgICA4
NywgICAgMjcsICAgIDkyLCAgICA5MiwgICAgMjgsCisgICAgICAzNSwgICAgNDMsICAgIDkxLCAg
ICA5MiwgICAgOTMsICAgIDM2LCAgICAgMSwgICAgMzgsICAgICAxLCAgICA1NiwKKyAgICAgIDU2
LCAgICA2NSwgICAgNjcsICAgIDcxLCAgICA4NCwgICAgNzYsICAgIDgyLCAgICAzNiwgICAgMzYs
ICAgIDM2LAorICAgICAgMzYsICAgIDM2LCAgICAzNiwgICAgOTEsICAgIDkxLCAgICAzNiwgICAg
NDAsICAgIDQxLCAgICAyOSwgICAgMzAsCisgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICA0Miwg
ICAgMzYsICAgIDM5LCAgICA5NiwgICAgMzYsICAgICAxLCAgICAxMiwKKyAgICAgIDE2LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNSwgICAgMjcsICAgIDM2
LAorICAgICAgNTEsICAgIDU3LCAgICA1OCwgICAgODAsICAgIDgxLCAgICA4MywgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsCisgICAgICAzNiwgICAgNTEsICAgIDY2LCAgICA4MSwgICAgODMs
ICAgIDUwLCAgICA2MywgICAgODgsICAgIDUwLCAgICA2NCwKKyAgICAgIDY5LCAgICA3NSwgICAg
ODgsICAgIDI0LCAgICAzNiwgICAgODIsICAgIDg1LCAgICA1MCwgICAgNjQsICAgIDc0LAorICAg
ICAgNzUsICAgIDg4LCAgICAzNiwgICAgNTEsICAgIDgzLCAgICAzNCwgICAgOTEsICAgIDkxLCAg
ICA5MywgICAgOTMsCisgICAgICA5MywgICAgOTMsICAgIDkzLCAgICA5MywgICAgMzYsICAgIDM2
LCAgICAzNiwgICAgMjYsICAgIDg3LCAgICA4NiwKKyAgICAgIDg3LCAgICA5MSwgICAgOTIsICAg
IDkyLCAgICA5MywgICAgNTksICAgICAxLCAgICAxMywgICAgMzYsICAgIDg3LAorICAgICAgODYs
ICAgIDkyLCAgICAxNCwgICAgOTAsICAgIDkxLCAgICA5MCwgICAgMzYsICAgIDkwLCAgICA5MCwg
ICAgOTAsCisgICAgICA5MCwgICAgOTMsICAgIDI3LCAgICAzNiwgICAgMzYsICAgIDkwLCAgICAz
NiwgICAgOTAsICAgIDkxLCAgICAzNiwKKyAgICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM2LCAg
ICA5MCwgICAgNDIsICAgIDYwLCAgICAzNiwgICAgMzYsICAgIDM2LAorICAgICAgODcKK307CisK
KyAgLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4g
ZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9Cit7CisgICAg
ICAgMCwgICAgNDQsICAgIDQ1LCAgICA0NSwgICAgNDYsICAgIDQ2LCAgICA0NywgICAgNDgsICAg
IDQ4LCAgICA0OCwKKyAgICAgIDQ4LCAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDks
ICAgIDQ5LCAgICA0OSwgICAgNDksICAgIDQ5LAorICAgICAgNDksICAgIDQ5LCAgICA0OSwgICAg
NDksICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTAsCisgICAgICA1MCwg
ICAgNTEsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU2LCAg
ICA1NiwKKyAgICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcsICAgIDU3
LCAgICA1NywgICAgNTcsICAgIDU3LAorICAgICAgNTgsICAgIDU5LCAgICA1OSwgICAgNjAsICAg
IDYwLCAgICA2MSwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsCisgICAgICA2NSwgICAgNjUs
ICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY2LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NywK
KyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzEsICAgIDcxLCAgICA3
MSwgICAgNzIsICAgIDczLAorICAgICAgNzQsICAgIDc1LCAgICA3NiwgICAgNzYsICAgIDc2LCAg
ICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODAsCisgICAgICA4MSwgICAgODIsICAgIDgy
LCAgICA4MiwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODQsICAgIDg0LCAgICA4NSwKKyAgICAg
IDg2LCAgICA4NiwgICAgODcsICAgIDg3LCAgICA4OCwgICAgODgsICAgIDg4LCAgICA4OSwgICAg
ODksICAgIDkwLAorICAgICAgOTAsICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwg
ICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEsCisgICAgICA5MSwgICAgOTEsICAgIDkyLCAgICA5
MywgICAgOTMsICAgIDk0LCAgICA5NCwgICAgOTUsICAgIDk2LCAgICA5NgorfTsKKworICAvKiBZ
WVIyW1lZTl0gLS0gTnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBy
dWxlIFlZTi4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAg
ICAgMCwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMywgICAgIDAsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMywgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwg
ICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDQsICAgICA0
LCAgICAgNCwgICAgIDQsICAgICA1LAorICAgICAgIDMsICAgICAwLCAgICAgMywgICAgIDAsICAg
ICAyLCAgICAgMywgICAgIDIsICAgICAxLCAgICAgMywgICAgIDAsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMywgICAgIDIsICAgICA0LCAgICAgMCwK
KyAgICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDMsICAgICAzLAorICAgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDAsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICA0LCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAg
IDIsICAgICAwLAorICAgICAgIDIsICAgICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywg
ICAgIDMsICAgICAzLCAgICAgMywgICAgIDIsCisgICAgICAgMywgICAgIDMsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDQsICAgICAwLCAgICAgMQorfTsKKworCisjZGVm
aW5lIHl5ZXJyb2sgICAgICAgICAoeXllcnJzdGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4g
ICAgICAgKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5lIFlZRU1QVFkgICAgICAgICAoLTIpCisj
ZGVmaW5lIFlZRU9GICAgICAgICAgICAwCisKKyNkZWZpbmUgWVlBQ0NFUFQgICAgICAgIGdvdG8g
eXlhY2NlcHRsYWIKKyNkZWZpbmUgWVlBQk9SVCAgICAgICAgIGdvdG8geXlhYm9ydGxhYgorI2Rl
ZmluZSBZWUVSUk9SICAgICAgICAgZ290byB5eWVycm9ybGFiCisKKworI2RlZmluZSBZWVJFQ09W
RVJJTkcoKSAgKCEheXllcnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVl
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAoeXlj
aGFyID09IFlZRU1QVFkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5eXN0YXRlID0g
Knl5c3NwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
Z290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHl5ZXJyb3IgKFlZXygic3lu
dGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXAorICAgICAgWVlFUlJPUjsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit3aGls
ZSAoMCkKKworLyogRXJyb3IgdG9rZW4gbnVtYmVyICovCisjZGVmaW5lIFlZVEVSUk9SICAgICAg
ICAxCisjZGVmaW5lIFlZRVJSQ09ERSAgICAgICAyNTYKKworCisKKy8qIEVuYWJsZSBkZWJ1Z2dp
bmcgaWYgcmVxdWVzdGVkLiAgKi8KKyNpZiBZWURFQlVHCisKKyMgaWZuZGVmIFlZRlBSSU5URgor
IyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwor
IyAgZGVmaW5lIFlZRlBSSU5URiBmcHJpbnRmCisjIGVuZGlmCisKKyMgZGVmaW5lIFlZRFBSSU5U
RihBcmdzKSAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICBZWUZQUklOVEYgQXJnczsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKy8qIFRoaXMgbWFjcm8gaXMgcHJvdmlkZWQg
Zm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCisjaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5U
CisjIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkKKyNlbmRp
ZgorCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0
aW9uKSAgICAgICAgICAgICAgICAgICAgXAorZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGlmICh5eWRl
YnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIl
cyAiLCBUaXRsZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICB5
eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgIFR5cGUsIFZhbHVlKTsgXAorICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCdz
IHZhbHVlIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5
eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwKQorewor
ICBGSUxFICp5eW8gPSB5eW91dHB1dDsKKyAgWVlVU0UgKHl5byk7CisgIGlmICgheXl2YWx1ZXAp
CisgICAgcmV0dXJuOworIyBpZmRlZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMp
CisgICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7Cisj
IGVuZGlmCisgIFlZVVNFICh5eXR5cGUpOworfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0uCit8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9w
cmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5
eXZhbHVlcCkKK3sKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiVzICVzICgiLAorICAgICAgICAg
ICAgIHl5dHlwZSA8IFlZTlRPS0VOUyA/ICJ0b2tlbiIgOiAibnRlcm0iLCB5eXRuYW1lW3l5dHlw
ZV0pOworCisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1
ZXApOworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wg
eXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20gaXRzIEJPVFRPTSB1
cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3l5
X3N0YWNrX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5Ym90dG9tLCB5eXR5cGVfaW50MTYgKnl5dG9w
KQoreworICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOworICBmb3IgKDsgeXlib3R0
b20gPD0geXl0b3A7IHl5Ym90dG9tKyspCisgICAgeworICAgICAgaW50IHl5Ym90ID0gKnl5Ym90
dG9tOworICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgJWQiLCB5eWJvdCk7CisgICAgfQorICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJv
dHRvbSwgVG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpZiAo
eXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCit9IHdoaWxlICgwKQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhhdCB0aGUgWVlSVUxFIGlzIGdv
aW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl0eXBl
X2ludDE2ICp5eXNzcCwgWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUpCit7CisgIHVuc2lnbmVk
IGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBpbnQgeXlucmhzID0geXlyMlt5
eXJ1bGVdOworICBpbnQgeXlpOworICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNr
IGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsCisgICAgICAgICAgICAgeXlydWxlIC0gMSwgeXls
bm8pOworICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8KKyAgZm9yICh5eWkgPSAw
OyB5eWkgPCB5eW5yaHM7IHl5aSsrKQorICAgIHsKKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAi
ICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3NwW3l5aSArIDEgLSB5eW5yaHNdXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgJih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9CisKKyMgZGVmaW5lIFlZX1JFRFVDRV9QUklO
VChSdWxlKSAgICAgICAgICBcCitkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB5eV9y
ZWR1Y2VfcHJpbnQgKHl5c3NwLCB5eXZzcCwgUnVsZSk7IFwKK30gd2hpbGUgKDApCisKKy8qIE5v
bnplcm8gbWVhbnMgcHJpbnQgcGFyc2UgdHJhY2UuICBJdCBpcyBsZWZ0IHVuaW5pdGlhbGl6ZWQg
c28gdGhhdAorICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovCitpbnQgeXlkZWJ1
ZzsKKyNlbHNlIC8qICFZWURFQlVHICovCisjIGRlZmluZSBZWURQUklOVEYoQXJncykKKyMgZGVm
aW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQorIyBkZWZp
bmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApCisjIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQo
UnVsZSkKKyNlbmRpZiAvKiAhWVlERUJVRyAqLworCisKKy8qIFlZSU5JVERFUFRIIC0tIGluaXRp
YWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8KKyNpZm5kZWYgWVlJTklUREVQVEgK
KyMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMAorI2VuZGlmCisKKy8qIFlZTUFYREVQVEggLS0gbWF4
aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVjdGl2ZSBvbmx5CisgICBpZiB0
aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4KKworICAgRG8gbm90
IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFyZ2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYK
KyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpCisg
ICBldmFsdWF0ZWQgd2l0aCBpbmZpbml0ZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljLiAg
Ki8KKworI2lmbmRlZiBZWU1BWERFUFRICisjIGRlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZW5k
aWYKKworCisjaWYgWVlFUlJPUl9WRVJCT1NFCisKKyMgaWZuZGVmIHl5c3RybGVuCisjICBpZiBk
ZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSAorIyAgIGRlZmluZSB5eXN0cmxl
biBzdHJsZW4KKyMgIGVsc2UKKy8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8KK3N0
YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBZWVNJWkVf
VCB5eWxlbjsKKyAgZm9yICh5eWxlbiA9IDA7IHl5c3RyW3l5bGVuXTsgeXlsZW4rKykKKyAgICBj
b250aW51ZTsKKyAgcmV0dXJuIHl5bGVuOworfQorIyAgZW5kaWYKKyMgZW5kaWYKKworIyBpZm5k
ZWYgeXlzdHBjcHkKKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19I
ICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UKKyMgICBkZWZpbmUgeXlzdHBjcHkgc3RwY3B5CisjICBl
bHNlCisvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRo
ZSB0ZXJtaW5hdGluZyAnXDAnIGluCisgICBZWURFU1QuICAqLworc3RhdGljIGNoYXIgKgoreXlz
dHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCit7CisgIGNoYXIgKnl5ZCA9
IHl5ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysg
PSAqeXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9
CisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXRuYW1lcnIKKy8qIENvcHkgdG8gWVlS
RVMgdGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5
CisgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5
ZXJyb3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVj
ZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNv
bW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAg
WVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKKyAgIG51bGwsIGRvIG5v
dCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKKyAg
IHdvdWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5dG5hbWVyciAoY2hhciAq
eXlyZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBpZiAoKnl5c3RyID09ICciJykKKyAgICB7
CisgICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7
CisKKyAgICAgIGZvciAoOzspCisgICAgICAgIHN3aXRjaCAoKisreXlwKQorICAgICAgICAgIHsK
KyAgICAgICAgICBjYXNlICdcJyc6CisgICAgICAgICAgY2FzZSAnLCc6CisgICAgICAgICAgICBn
b3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7CisKKyAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAg
ICAgICBpZiAoKisreXlwICE9ICdcXCcpCisgICAgICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlw
X3F1b3RlczsKKyAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmICh5eXJlcykKKyAgICAgICAgICAgICAgeXlyZXNbeXluXSA9
ICp5eXA7CisgICAgICAgICAgICB5eW4rKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
ICAgY2FzZSAnIic6CisgICAgICAgICAgICBpZiAoeXlyZXMpCisgICAgICAgICAgICAgIHl5cmVz
W3l5bl0gPSAnXDAnOworICAgICAgICAgICAgcmV0dXJuIHl5bjsKKyAgICAgICAgICB9CisgICAg
ZG9fbm90X3N0cmlwX3F1b3RlczogOworICAgIH0KKworICBpZiAoISB5eXJlcykKKyAgICByZXR1
cm4geXlzdHJsZW4gKHl5c3RyKTsKKworICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikg
LSB5eXJlczsKK30KKyMgZW5kaWYKKworLyogQ29weSBpbnRvICpZWU1TRywgd2hpY2ggaXMgb2Yg
c2l6ZSAqWVlNU0dfQUxMT0MsIGFuIGVycm9yIG1lc3NhZ2UKKyAgIGFib3V0IHRoZSB1bmV4cGVj
dGVkIHRva2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0b3AgaXMKKyAgIFlZ
U1NQLgorCisgICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3NmdWxseSB3cml0dGVuLiAg
UmV0dXJuIDEgaWYgKllZTVNHIGlzCisgICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIG1l
c3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0CisgICAqWVlNU0dfQUxMT0MgdG8gdGhlIHJl
cXVpcmVkIG51bWJlciBvZiBieXRlcy4gIFJldHVybiAyIGlmIHRoZQorICAgcmVxdWlyZWQgbnVt
YmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJnZSB0byBzdG9yZS4gICovCitzdGF0aWMgaW50Cit5eXN5
bnRheF9lcnJvciAoWVlTSVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCisgICAgICAg
ICAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCit7CisgIFlZU0laRV9U
IHl5c2l6ZTAgPSB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVbeXl0b2tlbl0pOworICBZ
WVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1Nf
TUFYSU1VTSA9IDUgfTsKKyAgLyogSW50ZXJuYXRpb25hbGl6ZWQgZm9ybWF0IHN0cmluZy4gKi8K
KyAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMUFRSOworICAvKiBBcmd1bWVudHMgb2Yg
eXlmb3JtYXQuICovCisgIGNoYXIgY29uc3QgKnl5YXJnW1lZRVJST1JfVkVSQk9TRV9BUkdTX01B
WElNVU1dOworICAvKiBOdW1iZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5l
eHBlY3RlZCIsIG9uZSBwZXIKKyAgICAgImV4cGVjdGVkIikuICovCisgIGludCB5eWNvdW50ID0g
MDsKKworICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6
CisgICAgIC0gSWYgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1
bHQgYWN0aW9uLCB0aGVuCisgICAgICAgdGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24gd2FzIGlu
dm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uCisgICAgICAgaXMgYW4gZXJyb3IgYWN0aW9u
LiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQKKyAgICAgICB0b2tlbnMg
YmVjYXVzZSB0aGVyZSBhcmUgbm9uZS4KKyAgICAgLSBUaGUgb25seSB3YXkgdGhlcmUgY2FuIGJl
IG5vIGxvb2thaGVhZCBwcmVzZW50IChpbiB5eWNoYXIpIGlzIGlmCisgICAgICAgdGhpcyBzdGF0
ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywKKyAg
ICAgICBkZXRlY3RpbmcgdGhlIGFic2VuY2Ugb2YgYSBsb29rYWhlYWQgaXMgc3VmZmljaWVudCB0
byBkZXRlcm1pbmUKKyAgICAgICB0aGF0IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0
ZWQgdG9rZW4gdG8gcmVwb3J0LiAgSW4gdGhhdAorICAgICAgIGNhc2UsIGp1c3QgcmVwb3J0IGEg
c2ltcGxlICJzeW50YXggZXJyb3IiLgorICAgICAtIERvbid0IGFzc3VtZSB0aGVyZSBpc24ndCBh
IGxvb2thaGVhZCBqdXN0IGJlY2F1c2UgdGhpcyBzdGF0ZSBpcyBhCisgICAgICAgY29uc2lzdGVu
dCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYQor
ICAgICAgIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRo
IGEgbm9uLWRlZmF1bHQKKyAgICAgICBhY3Rpb24sIG9yIHVzZXIgc2VtYW50aWMgYWN0aW9uIHRo
YXQgbWFuaXB1bGF0ZWQgeXljaGFyLgorICAgICAtIE9mIGNvdXJzZSwgdGhlIGV4cGVjdGVkIHRv
a2VuIGxpc3QgZGVwZW5kcyBvbiBzdGF0ZXMgdG8gaGF2ZQorICAgICAgIGNvcnJlY3QgbG9va2Fo
ZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdAorICAgICAg
IHRvIHBlcmZvcm0gZXh0cmEgcmVkdWN0aW9ucyBhZnRlciBmZXRjaGluZyBhIGxvb2thaGVhZCBm
cm9tIHRoZQorICAgICAgIHNjYW5uZXIgYW5kIGJlZm9yZSBkZXRlY3RpbmcgYSBzeW50YXggZXJy
b3IuICBUaHVzLCBzdGF0ZSBtZXJnaW5nCisgICAgICAgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQg
ZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4cGVjdGVkCisgICAgICAgdG9rZW4gbGlz
dC4gIEhvd2V2ZXIsIHRoZSBsaXN0IGlzIGNvcnJlY3QgZm9yIGNhbm9uaWNhbCBMUiB3aXRoCisg
ICAgICAgb25lIGV4Y2VwdGlvbjogaXQgd2lsbCBzdGlsbCBjb250YWluIGFueSB0b2tlbiB0aGF0
IHdpbGwgbm90IGJlCisgICAgICAgYWNjZXB0ZWQgZHVlIHRvIGFuIGVycm9yIGFjdGlvbiBpbiBh
IGxhdGVyIHN0YXRlLgorICAqLworICBpZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQorICAgIHsKKyAg
ICAgIGludCB5eW4gPSB5eXBhY3RbKnl5c3NwXTsKKyAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5
eXRuYW1lW3l5dG9rZW5dOworICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXlu
KSkKKyAgICAgICAgeworICAgICAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZl
IHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKyAgICAgICAgICAgICBZWUNIRUNLLiAgSW4g
b3RoZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0IC1ZWU4gYWN0aW9ucyBmb3IKKyAgICAgICAgICAg
ICB0aGlzIHN0YXRlIGJlY2F1c2UgdGhleSBhcmUgZGVmYXVsdCBhY3Rpb25zLiAgKi8KKyAgICAg
ICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisgICAgICAgICAgLyogU3Rh
eSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovCisgICAgICAg
ICAgaW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgICAgIGludCB5eXhl
bmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKKyAg
ICAgICAgICBpbnQgeXl4OworCisgICAgICAgICAgZm9yICh5eXggPSB5eXhiZWdpbjsgeXl4IDwg
eXl4ZW5kOyArK3l5eCkKKyAgICAgICAgICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4
ICYmIHl5eCAhPSBZWVRFUlJPUgorICAgICAgICAgICAgICAgICYmICF5eXRhYmxlX3ZhbHVlX2lz
X2Vycm9yICh5eXRhYmxlW3l5eCArIHl5bl0pKQorICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKyAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgeXljb3VudCA9IDE7CisgICAgICAg
ICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10g
PSB5eXRuYW1lW3l5eF07CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgWVlT
SVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoWVlfTlVMTFBUUiwgeXl0bmFtZVt5
eXhdKTsKKyAgICAgICAgICAgICAgICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMQorICAgICAg
ICAgICAgICAgICAgICAgICAgICYmIHl5c2l6ZTEgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgICAgICAgICAgICB5eXNpemUg
PSB5eXNpemUxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgIHN3aXRjaCAoeXljb3VudCkKKyAgICB7CisjIGRlZmluZSBZWUNBU0VfKE4s
IFMpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIGNhc2UgTjogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICB5eWZvcm1hdCA9IFM7ICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICBicmVhaworICAgICAgWVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIp
KTsKKyAgICAgIFlZQ0FTRV8oMSwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMiKSk7
CisgICAgICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBl
Y3RpbmcgJXMiKSk7CisgICAgICBZWUNBU0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVj
dGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7CisgICAgICBZWUNBU0VfKDQsIFlZXygic3lu
dGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMiKSk7Cisg
ICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rp
bmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7CisjIHVuZGVmIFlZQ0FTRV8KKyAgICB9CisKKyAg
eworICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmb3JtYXQpOwor
ICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMSAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSkpCisgICAgICByZXR1cm4gMjsKKyAgICB5eXNpemUgPSB5eXNpemUxOworICB9CisK
KyAgaWYgKCp5eW1zZ19hbGxvYyA8IHl5c2l6ZSkKKyAgICB7CisgICAgICAqeXltc2dfYWxsb2Mg
PSAyICogeXlzaXplOworICAgICAgaWYgKCEgKHl5c2l6ZSA8PSAqeXltc2dfYWxsb2MKKyAgICAg
ICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0gWVlTVEFDS19BTExPQ19NQVhJTVVNKSkKKyAgICAg
ICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOworICAgICAgcmV0dXJuIDE7
CisgICAgfQorCisgIC8qIEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1
c2VyJ3MgbmFtZSBzcGFjZS4KKyAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZl
biBpZiB0aGUgdHJhbnNsYXRpb24KKyAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3Jv
bmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKyAgeworICAgIGNoYXIgKnl5cCA9ICp5eW1zZzsKKyAg
ICBpbnQgeXlpID0gMDsKKyAgICB3aGlsZSAoKCp5eXAgPSAqeXlmb3JtYXQpICE9ICdcMCcpCisg
ICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmb3JtYXRbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291
bnQpCisgICAgICAgIHsKKyAgICAgICAgICB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5
aSsrXSk7CisgICAgICAgICAgeXlmb3JtYXQgKz0gMjsKKyAgICAgICAgfQorICAgICAgZWxzZQor
ICAgICAgICB7CisgICAgICAgICAgeXlwKys7CisgICAgICAgICAgeXlmb3JtYXQrKzsKKyAgICAg
ICAgfQorICB9CisgIHJldHVybiAwOworfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBS
ZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB2b2lk
Cit5eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2
YWx1ZXApCit7CisgIFlZVVNFICh5eXZhbHVlcCk7CisgIGlmICgheXltc2cpCisgICAgeXltc2cg
PSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVw
LCB5eWxvY2F0aW9ucCk7CisKKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4K
KyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgICAgIGNhc2UgNjI6IC8qIGNob2ljZV9l
bnRyeSAgKi8KKworICAgICAgeworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5k
IHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKKwkJKCgqeXl2YWx1ZXApLm1lbnUpLT5maWxl
LT5uYW1lLCAoKCp5eXZhbHVlcCkubWVudSktPmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVudSA9
PSAoKCp5eXZhbHVlcCkubWVudSkpCisJCW1lbnVfZW5kX21lbnUoKTsKK30KKworICAgICAgICBi
cmVhazsKKworICAgIGNhc2UgNjg6IC8qIGlmX2VudHJ5ICAqLworCisgICAgICB7CisJZnByaW50
ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4i
LAorCQkoKCp5eXZhbHVlcCkubWVudSktPmZpbGUtPm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+
bGluZW5vKTsKKwlpZiAoY3VycmVudF9tZW51ID09ICgoKnl5dmFsdWVwKS5tZW51KSkKKwkJbWVu
dV9lbmRfbWVudSgpOworfQorCisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSA3MzogLyogbWVu
dV9lbnRyeSAgKi8KKworICAgICAgeworCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3Npbmcg
ZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwKKwkJKCgqeXl2YWx1ZXApLm1lbnUpLT5m
aWxlLT5uYW1lLCAoKCp5eXZhbHVlcCkubWVudSktPmxpbmVubyk7CisJaWYgKGN1cnJlbnRfbWVu
dSA9PSAoKCp5eXZhbHVlcCkubWVudSkpCisJCW1lbnVfZW5kX21lbnUoKTsKK30KKworICAgICAg
ICBicmVhazsKKworCisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgIFlZ
X0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorfQorCisKKworCisvKiBUaGUgbG9va2Fo
ZWFkIHN5bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2Yg
dGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisvKiBOdW1iZXIgb2Yg
c3ludGF4IGVycm9ycyBzbyBmYXIuICAqLworaW50IHl5bmVycnM7CisKKworLyotLS0tLS0tLS0t
LgorfCB5eXBhcnNlLiAgfAorYC0tLS0tLS0tLS0qLworCitpbnQKK3l5cGFyc2UgKHZvaWQpCit7
CisgICAgaW50IHl5c3RhdGU7CisgICAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlmdCBiZWZv
cmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgICAgaW50IHl5ZXJyc3RhdHVzOworCisg
ICAgLyogVGhlIHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgICAgJ3l5c3MnOiByZWxhdGVk
IHRvIHN0YXRlcy4KKyAgICAgICAneXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLgor
CisgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJvdWdoIHNlcGFyYXRlIHBvaW50ZXJzLCB0
byBhbGxvdyB5eW92ZXJmbG93CisgICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4g
ICovCisKKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLworICAgIHl5dHlwZV9pbnQxNiB5eXNz
YVtZWUlOSVRERVBUSF07CisgICAgeXl0eXBlX2ludDE2ICp5eXNzOworICAgIHl5dHlwZV9pbnQx
NiAqeXlzc3A7CisKKyAgICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLworICAgIFlZ
U1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICAgIFlZU1RZUEUgKnl5dnM7CisgICAgWVlTVFlQ
RSAqeXl2c3A7CisKKyAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsKKworICBpbnQgeXluOworICBp
bnQgeXlyZXN1bHQ7CisgIC8qIExvb2thaGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNs
YXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAwOworICAvKiBUaGUgdmFy
aWFibGVzIHVzZWQgdG8gcmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRo
ZQorICAgICBhY3Rpb24gcm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisjaWYgWVlF
UlJPUl9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxs
b2NhdGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0g
eXltc2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2Vu
ZGlmCisKKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChO
KSkKKworICAvKiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNl
ZCBydWxlLgorICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBl
ZC4gICovCisgIGludCB5eWxlbiA9IDA7CisKKyAgeXlzc3AgPSB5eXNzID0geXlzc2E7CisgIHl5
dnNwID0geXl2cyA9IHl5dnNhOworICB5eXN0YWNrc2l6ZSA9IFlZSU5JVERFUFRIOworCisgIFlZ
RFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0ZSA9IDA7
CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZRU1QVFk7
IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovCisgIGdvdG8geXlzZXRzdGF0ZTsKKwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uCit8IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwgd2hpY2ggaXMgZm91bmQg
aW4geXlzdGF0ZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworIHl5bmV3c3RhdGU6CisgIC8qIEluIGFsbCBjYXNlcywg
d2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2tzCisgICAgIGhh
dmUganVzdCBiZWVuIHB1c2hlZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBz
dGFja3MuICAqLworICB5eXNzcCsrOworCisgeXlzZXRzdGF0ZToKKyAgKnl5c3NwID0geXlzdGF0
ZTsKKworICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKyAgICB7CisgICAg
ICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0aHJlZSBzdGFja3MsIGluIGVs
ZW1lbnRzLiAgKi8KKyAgICAgIFlZU0laRV9UIHl5c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7CisK
KyNpZmRlZiB5eW92ZXJmbG93CisgICAgICB7CisgICAgICAgIC8qIEdpdmUgdXNlciBhIGNoYW5j
ZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKyAgICAgICAgICAgdGhl
c2Ugc28gdGhhdCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworICAgICAg
ICAgICBtZW1vcnkuICAqLworICAgICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisgICAgICAg
IHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCisgICAgICAgIC8qIEVhY2ggc3RhY2sgcG9p
bnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorICAgICAgICAgICBk
YXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMgdXNlZCB0byBiZSBhCisg
ICAgICAgICAgIGNvbmRpdGlvbmFsIGFyb3VuZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0
IHRoYXQgbWlnaHQKKyAgICAgICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBt
YWNyby4gICovCisgICAgICAgIHl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAor
ICAgICAgICAgICAgICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKyAg
ICAgICAgICAgICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksCisgICAg
ICAgICAgICAgICAgICAgICZ5eXN0YWNrc2l6ZSk7CisKKyAgICAgICAgeXlzcyA9IHl5c3MxOwor
ICAgICAgICB5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICov
CisjIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOwor
IyBlbHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAg
IGlmIChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorICAgICAgICBnb3RvIHl5ZXhoYXVzdGVk
bGFiOworICAgICAgeXlzdGFja3NpemUgKj0gMjsKKyAgICAgIGlmIChZWU1BWERFUFRIIDwgeXlz
dGFja3NpemUpCisgICAgICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKworICAgICAgewor
ICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsKKyAgICAgICAgdW5pb24geXlhbGxv
YyAqeXlwdHIgPQorICAgICAgICAgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZ
U1RBQ0tfQllURVMgKHl5c3RhY2tzaXplKSk7CisgICAgICAgIGlmICghIHl5cHRyKQorICAgICAg
ICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7CisgICAgICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3Nf
YWxsb2MsIHl5c3MpOworICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZz
KTsKKyMgIHVuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAgICAgaWYgKHl5c3MxICE9IHl5c3Nh
KQorICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQorIyBlbmRpZgorI2Vu
ZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0g
MTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisKKyAgICAgIFlZRFBSSU5URiAo
KHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwKKyAgICAgICAgICAgICAg
ICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYgKHl5c3Mg
KyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisgICAgICAgIFlZQUJPUlQ7CisgICAgfQorCisg
IFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7CisK
KyAgaWYgKHl5c3RhdGUgPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICBnb3RvIHl5YmFj
a3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0tLSovCit5
eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJy
ZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2thaGVhZCB0b2tlbiBpZiB3ZSBuZWVkIG9uZSBh
bmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lk
ZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovCisg
IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5
eW4pKQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29r
YWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAgLyogWVlDSEFS
IGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9va2FoZWFkIHN5bWJvbC4g
ICovCisgIGlmICh5eWNoYXIgPT0gWVlFTVBUWSkKKyAgICB7CisgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJSZWFkaW5nIGEgdG9rZW46ICIpKTsKKyAgICAgIHl5Y2hhciA9IHl5bGV4ICgpOwor
ICAgIH0KKworICBpZiAoeXljaGFyIDw9IFlZRU9GKQorICAgIHsKKyAgICAgIHl5Y2hhciA9IHl5
dG9rZW4gPSBZWUVPRjsKKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIk5vdyBhdCBlbmQgb2Yg
aW5wdXQuXG4iKSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgeXl0b2tlbiA9IFlZVFJB
TlNMQVRFICh5eWNoYXIpOworICAgICAgWVlfU1lNQk9MX1BSSU5UICgiTmV4dCB0b2tlbiBpcyIs
IHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOworICAgIH0KKworICAvKiBJZiB0aGUgcHJvcGVy
IGFjdGlvbiBvbiBzZWVpbmcgdG9rZW4gWVlUT0tFTiBpcyB0byByZWR1Y2Ugb3IgdG8KKyAgICAg
ZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8KKyAgeXluICs9IHl5dG9rZW47
CisgIGlmICh5eW4gPCAwIHx8IFlZTEFTVCA8IHl5biB8fCB5eWNoZWNrW3l5bl0gIT0geXl0b2tl
bikKKyAgICBnb3RvIHl5ZGVmYXVsdDsKKyAgeXluID0geXl0YWJsZVt5eW5dOworICBpZiAoeXlu
IDw9IDApCisgICAgeworICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpCisg
ICAgICAgIGdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290byB5eXJl
ZHVjZTsKKyAgICB9CisKKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFm
dGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcgorICAgICBzdGF0dXMuICAqLworICBpZiAoeXllcnJz
dGF0dXMpCisgICAgeXllcnJzdGF0dXMtLTsKKworICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRv
a2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFs
LCAmeXlsbG9jKTsKKworICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8KKyAgeXlj
aGFyID0gWVlFTVBUWTsKKworICB5eXN0YXRlID0geXluOworICBZWV9JR05PUkVfTUFZQkVfVU5J
TklUSUFMSVpFRF9CRUdJTgorICAqKyt5eXZzcCA9IHl5bHZhbDsKKyAgWVlfSUdOT1JFX01BWUJF
X1VOSU5JVElBTElaRURfRU5ECisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5
eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9u
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5
eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9
IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgJyQkID0gJDEnLgorCisgICAgIE90aGVy
d2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhp
cyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBu
b3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxs
eSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBH
Q0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5
eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBz
d2l0Y2ggKHl5bikKKyAgICB7CisgICAgICAgIGNhc2UgNjoKKworICAgIHsKKwltZW51X2FkZF9w
cm9tcHQoUF9NRU5VLCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwpOworfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMToKKworICAgIHsgemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgZW5kIHN0YXRl
bWVudCIpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEyOgorCisgICAgeyB6Y29uZl9lcnJv
cigidW5rbm93biBzdGF0ZW1lbnQgXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsgfQorCisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKwl6Y29uZl9lcnJvcigidW5leHBlY3Rl
ZCBvcHRpb24gXCIlc1wiIiwgKHl5dnNwWy0yXS5pZCktPm5hbWUpOworfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNDoKKworICAgIHsgemNvbmZfZXJyb3IoImludmFsaWQgc3RhdGVtZW50Iik7
IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMzE6CisKKyAgICB7IHpjb25mX2Vycm9yKCJ1bmtu
b3duIG9wdGlvbiBcIiVzXCIiLCAoeXl2c3BbLTJdLnN0cmluZykpOyB9CisKKyAgICBicmVhazsK
KworICBjYXNlIDMyOgorCisgICAgeyB6Y29uZl9lcnJvcigiaW52YWxpZCBvcHRpb24iKTsgfQor
CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMzoKKworICAgIHsKKwkoeXl2c3BbLTFdLnN5bWJvbCkt
PmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsKKwltZW51X2FkZF9lbnRyeSgoeXl2c3BbLTFdLnN5
bWJvbCkpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbmZpZyAlc1xuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zeW1ib2wpLT5uYW1lKTsKK30K
KworICAgIGJyZWFrOworCisgIGNhc2UgMzQ6CisKKyAgICB7CisJcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsK
K30KKworICAgIGJyZWFrOworCisgIGNhc2UgMzU6CisKKyAgICB7CisJKHl5dnNwWy0xXS5zeW1i
b2wpLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7CisJbWVudV9hZGRfZW50cnkoKHl5dnNwWy0x
XS5zeW1ib2wpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbLTFdLnN5bWJvbCktPm5h
bWUpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAzNjoKKworICAgIHsKKwlpZiAoY3VycmVu
dF9lbnRyeS0+cHJvbXB0KQorCQljdXJyZW50X2VudHJ5LT5wcm9tcHQtPnR5cGUgPSBQX01FTlU7
CisJZWxzZQorCQl6Y29uZnByaW50KCJ3YXJuaW5nOiBtZW51Y29uZmlnIHN0YXRlbWVudCB3aXRo
b3V0IHByb21wdCIpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7Cit9CisKKyAgICBicmVhazsKKworICBj
YXNlIDQ0OgorCisgICAgeworCW1lbnVfc2V0X3R5cGUoKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsK
KwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwKKwkJemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsKK30KKworICAg
IGJyZWFrOworCisgIGNhc2UgNDU6CisKKyAgICB7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBU
LCAoeXl2c3BbLTJdLnN0cmluZyksICh5eXZzcFstMV0uZXhwcikpOworCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorCisgICAgeworCW1lbnVfYWRkX2V4cHIo
UF9ERUZBVUxULCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbLTFdLmV4cHIpKTsKKwlpZiAoKHl5
dnNwWy0zXS5pZCktPnN0eXBlICE9IFNfVU5LTk9XTikKKwkJbWVudV9zZXRfdHlwZSgoeXl2c3Bb
LTNdLmlkKS0+c3R5cGUpOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHQoJXUp
XG4iLAorCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLAorCQkoeXl2c3BbLTNdLmlk
KS0+c3R5cGUpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA0NzoKKworICAgIHsKKwltZW51
X2FkZF9zeW1ib2woUF9TRUxFQ1QsICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWy0xXS5leHBy
KSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c2VsZWN0XG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNDg6CisKKyAg
ICB7CisJbWVudV9hZGRfc3ltYm9sKFBfSU1QTFksICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNw
Wy0xXS5leHByKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aW1wbHlcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA0
OToKKworICAgIHsKKwltZW51X2FkZF9leHByKFBfUkFOR0UsIGV4cHJfYWxsb2NfY29tcChFX1JB
TkdFLCh5eXZzcFstM10uc3ltYm9sKSwgKHl5dnNwWy0yXS5zeW1ib2wpKSwgKHl5dnNwWy0xXS5l
eHByKSk7CisJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cmFuZ2VcbiIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA1MjoKKwor
ICAgIHsKKwljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKCh5eXZz
cFstMV0uc3RyaW5nKSwgc3RybGVuKCh5eXZzcFstMV0uc3RyaW5nKSkpOworCWlmIChpZCAmJiBp
ZC0+ZmxhZ3MgJiBURl9PUFRJT04pIHsKKwkJbWVudV9hZGRfb3B0aW9uKGlkLT50b2tlbiwgKHl5
dnNwWzBdLnN0cmluZykpOworCQlmcmVlKCh5eXZzcFswXS5zdHJpbmcpKTsKKwl9CisJZWxzZQor
CQl6Y29uZnByaW50KCJ3YXJuaW5nOiBpZ25vcmluZyB1bmtub3duIG9wdGlvbiAlcyIsICh5eXZz
cFstMV0uc3RyaW5nKSk7CisJZnJlZSgoeXl2c3BbLTFdLnN0cmluZykpOworfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSA1MzoKKworICAgIHsgKHl5dmFsLnN0cmluZykgPSBOVUxMOyB9CisKKyAg
ICBicmVhazsKKworICBjYXNlIDU0OgorCisgICAgeyAoeXl2YWwuc3RyaW5nKSA9ICh5eXZzcFsw
XS5zdHJpbmcpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDU1OgorCisgICAgeworCXN0cnVj
dCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoKHl5dnNwWy0xXS5zdHJpbmcpLCBTWU1CT0xfQ0hP
SUNFKTsKKwlzeW0tPmZsYWdzIHw9IFNZTUJPTF9OT19XUklURTsKKwltZW51X2FkZF9lbnRyeShz
eW0pOworCW1lbnVfYWRkX2V4cHIoUF9DSE9JQ0UsIE5VTEwsIE5VTEwpOworCWZyZWUoKHl5dnNw
Wy0xXS5zdHJpbmcpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjaG9pY2VcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisKKyAgY2Fz
ZSA1NjoKKworICAgIHsKKwkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7Cit9CisKKyAg
ICBicmVhazsKKworICBjYXNlIDU3OgorCisgICAgeworCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2
c3BbMF0uaWQpLCBUX0NIT0lDRSwgVF9FTkRDSE9JQ0UpKSB7CisJCW1lbnVfZW5kX21lbnUoKTsK
KwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsKKwl9Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDY1Ogor
CisgICAgeworCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWy0yXS5zdHJpbmcpLCAo
eXl2c3BbLTFdLmV4cHIpKTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIs
IHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworfQorCisgICAgYnJlYWs7CisKKyAg
Y2FzZSA2NjoKKworICAgIHsKKwlpZiAoKHl5dnNwWy0yXS5pZCktPnN0eXBlID09IFNfQk9PTEVB
TiB8fCAoeXl2c3BbLTJdLmlkKS0+c3R5cGUgPT0gU19UUklTVEFURSkgeworCQltZW51X3NldF90
eXBlKCh5eXZzcFstMl0uaWQpLT5zdHlwZSk7CisJCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk
OnR5cGUoJXUpXG4iLAorCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwKKwkJCSh5
eXZzcFstMl0uaWQpLT5zdHlwZSk7CisJfSBlbHNlCisJCVlZRVJST1I7Cit9CisKKyAgICBicmVh
azsKKworICBjYXNlIDY3OgorCisgICAgeworCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0g
U1lNQk9MX09QVElPTkFMOworCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm9wdGlvbmFsXG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisg
IGNhc2UgNjg6CisKKyAgICB7CisJaWYgKCh5eXZzcFstM10uaWQpLT5zdHlwZSA9PSBTX1VOS05P
V04pIHsKKwkJbWVudV9hZGRfc3ltYm9sKFBfREVGQVVMVCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAo
eXl2c3BbLTFdLmV4cHIpKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdFxu
IiwKKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0gZWxzZQorCQlZWUVS
Uk9SOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA3MToKKworICAgIHsKKwlwcmludGQoREVC
VUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
CisJbWVudV9hZGRfZW50cnkoTlVMTCk7CisJbWVudV9hZGRfZGVwKCh5eXZzcFstMV0uZXhwcikp
OworCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsKK30KKworICAgIGJyZWFrOworCisg
IGNhc2UgNzI6CisKKyAgICB7CisJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRf
SUYsIFRfRU5ESUYpKSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6ZW5kaWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOworCX0K
K30KKworICAgIGJyZWFrOworCisgIGNhc2UgNzg6CisKKyAgICB7CisJbWVudV9hZGRfZW50cnko
TlVMTCk7CisJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgKHl5dnNwWy0xXS5zdHJpbmcpLCBOVUxM
KTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCks
IHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgNzk6CisKKyAgICB7
CisJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOworfQorCisgICAgYnJlYWs7CisKKyAg
Y2FzZSA4MDoKKworICAgIHsKKwlpZiAoemNvbmZfZW5kdG9rZW4oKHl5dnNwWzBdLmlkKSwgVF9N
RU5VLCBUX0VORE1FTlUpKSB7CisJCW1lbnVfZW5kX21lbnUoKTsKKwkJcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
CisJfQorfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA4NjoKKworICAgIHsKKwlwcmludGQoREVC
VUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCksICh5eXZzcFstMV0uc3RyaW5nKSk7CisJemNvbmZfbmV4dGZpbGUoKHl5dnNwWy0xXS5z
dHJpbmcpKTsKKwlmcmVlKCh5eXZzcFstMV0uc3RyaW5nKSk7Cit9CisKKyAgICBicmVhazsKKwor
ICBjYXNlIDg3OgorCisgICAgeworCW1lbnVfYWRkX2VudHJ5KE5VTEwpOworCW1lbnVfYWRkX3By
b21wdChQX0NPTU1FTlQsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVMTCk7CisJcHJpbnRkKERFQlVH
X1BBUlNFLCAiJXM6JWQ6Y29tbWVudFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7Cit9CisKKyAgICBicmVhazsKKworICBjYXNlIDg5OgorCisgICAgeworCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmhlbHBcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworCXpjb25mX3N0YXJ0aGVscCgpOworfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSA5MDoKKwor
ICAgIHsKKwlpZiAoY3VycmVudF9lbnRyeS0+aGVscCkgeworCQlmcmVlKGN1cnJlbnRfZW50cnkt
PmhlbHApOworCQl6Y29uZnByaW50KCJ3YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBtb3JlIHRo
YW4gb25lIGhlbHAgdGV4dCAtLSBvbmx5IHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQiLAorCQkJ
ICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOworCX0KKworCS8qIElz
IHRoZSBoZWxwIHRleHQgZW1wdHkgb3IgYWxsIHdoaXRlc3BhY2U/ICovCisJaWYgKCh5eXZzcFsw
XS5zdHJpbmcpW3N0cnNwbigoeXl2c3BbMF0uc3RyaW5nKSwgIiBcZlxuXHJcdFx2IildID09ICdc
MCcpCisJCXpjb25mcHJpbnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIGJsYW5rIGhlbHAg
dGV4dCIsCisJCQkgICBjdXJyZW50X2VudHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7CisK
KwljdXJyZW50X2VudHJ5LT5oZWxwID0gKHl5dnNwWzBdLnN0cmluZyk7Cit9CisKKyAgICBicmVh
azsKKworICBjYXNlIDk1OgorCisgICAgeworCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIp
KTsKKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpKTsKK30KKworICAgIGJyZWFrOworCisgIGNhc2UgOTk6CisK
KyAgICB7CisJbWVudV9hZGRfdmlzaWJpbGl0eSgoeXl2c3BbMF0uZXhwcikpOworfQorCisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMDE6CisKKyAgICB7CisJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBU
LCAoeXl2c3BbLTFdLnN0cmluZyksICh5eXZzcFswXS5leHByKSk7Cit9CisKKyAgICBicmVhazsK
KworICBjYXNlIDEwNDoKKworICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0uaWQpOyB9CisK
KyAgICBicmVhazsKKworICBjYXNlIDEwNToKKworICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFst
MV0uaWQpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEwNjoKKworICAgIHsgKHl5dmFsLmlk
KSA9ICh5eXZzcFstMV0uaWQpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDEwOToKKworICAg
IHsgKHl5dmFsLmV4cHIpID0gTlVMTDsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTA6CisK
KyAgICB7ICh5eXZhbC5leHByKSA9ICh5eXZzcFswXS5leHByKTsgfQorCisgICAgYnJlYWs7CisK
KyAgY2FzZSAxMTE6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCh5
eXZzcFswXS5zeW1ib2wpKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTI6CisKKyAgICB7
ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0xUSCwgKHl5dnNwWy0yXS5zeW1ib2wp
LCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTEzOgorCisg
ICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9MRVEsICh5eXZzcFstMl0uc3lt
Ym9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9CisKKyAgICBicmVhazsKKworICBjYXNlIDExNDoK
KworICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfR1RILCAoeXl2c3BbLTJd
LnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MTU6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0dFUSwgKHl5dnNw
Wy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJyZWFrOworCisgIGNh
c2UgMTE2OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwg
KHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0KKworICAgIGJyZWFrOwor
CisgIGNhc2UgMTE3OgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9V
TkVRVUFMLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQorCisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMTg6CisKKyAgICB7ICh5eXZhbC5leHByKSA9ICh5eXZzcFstMV0u
ZXhwcik7IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTE5OgorCisgICAgeyAoeXl2YWwuZXhw
cikgPSBleHByX2FsbG9jX29uZShFX05PVCwgKHl5dnNwWzBdLmV4cHIpKTsgfQorCisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfdHdv
KEVfT1IsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFswXS5leHByKSk7IH0KKworICAgIGJyZWFr
OworCisgIGNhc2UgMTIxOgorCisgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3R3byhF
X0FORCwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWzBdLmV4cHIpKTsgfQorCisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMjI6CisKKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgoeXl2
c3BbMF0uc3RyaW5nKSwgMCk7IGZyZWUoKHl5dnNwWzBdLnN0cmluZykpOyB9CisKKyAgICBicmVh
azsKKworICBjYXNlIDEyNDoKKworICAgIHsgKHl5dmFsLnN5bWJvbCkgPSBzeW1fbG9va3VwKCh5
eXZzcFswXS5zdHJpbmcpLCBTWU1CT0xfQ09OU1QpOyBmcmVlKCh5eXZzcFswXS5zdHJpbmcpKTsg
fQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjU6CisKKyAgICB7ICh5eXZhbC5zdHJpbmcpID0g
TlVMTDsgfQorCisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6CisKKyAgICB7IHZhcmlhYmxlX2Fk
ZCgoeXl2c3BbLTNdLnN0cmluZyksICh5eXZzcFstMV0uc3RyaW5nKSwgKHl5dnNwWy0yXS5mbGF2
b3IpKTsgZnJlZSgoeXl2c3BbLTNdLnN0cmluZykpOyBmcmVlKCh5eXZzcFstMV0uc3RyaW5nKSk7
IH0KKworICAgIGJyZWFrOworCisgIGNhc2UgMTI4OgorCisgICAgeyAoeXl2YWwuc3RyaW5nKSA9
IHhzdHJkdXAoIiIpOyB9CisKKyAgICBicmVhazsKKworCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgIH0KKyAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNo
YXIsIGFuZCB0aGF0IHJlcXVpcmVzCisgICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGgg
dGhlIG5ldyB0cmFuc2xhdGlvbi4gIFdlIHRha2UgdGhlCisgICAgIGFwcHJvYWNoIG9mIHRyYW5z
bGF0aW5nIGltbWVkaWF0ZWx5IGJlZm9yZSBldmVyeSB1c2Ugb2YgeXl0b2tlbi4KKyAgICAgT25l
IGFsdGVybmF0aXZlIGlzIHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2VtYW50aWMgYWN0
aW9uLAorICAgICBidXQgdGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYgdGhlIHNl
bWFudGljIGFjdGlvbiBpbnZva2VzCisgICAgIFlZQUJPUlQsIFlZQUNDRVBULCBvciBZWUVSUk9S
IGltbWVkaWF0ZWx5IGFmdGVyIGFsdGVyaW5nIHl5Y2hhciBvcgorICAgICBpZiBpdCBpbnZva2Vz
IFlZQkFDS1VQLiAgSW4gdGhlIGNhc2Ugb2YgWVlBQk9SVCBvciBZWUFDQ0VQVCwgYW4KKyAgICAg
aW5jb3JyZWN0IGRlc3RydWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAg
SW4gdGhlCisgICAgIGNhc2Ugb2YgWVlFUlJPUiBvciBZWUJBQ0tVUCwgc3Vic2VxdWVudCBwYXJz
ZXIgYWN0aW9ucyBtaWdodCBsZWFkCisgICAgIHRvIGFuIGluY29ycmVjdCBkZXN0cnVjdG9yIGNh
bGwgb3IgdmVyYm9zZSBzeW50YXggZXJyb3IgbWVzc2FnZQorICAgICBiZWZvcmUgdGhlIGxvb2th
aGVhZCBpcyB0cmFuc2xhdGVkLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5
cjFbeXluXSwgJnl5dmFsLCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXls
ZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0g
eXl2YWw7CisKKyAgLyogTm93ICdzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAg
RGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAgICAgdGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3Rh
dGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRoZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5
LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0g
WVlOVE9LRU5TXSArICp5eXNzcDsKKyAgaWYgKDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZ
TEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJs
ZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9L
RU5TXTsKKworICBnb3RvIHl5bmV3c3RhdGU7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3Iu
ICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJsYWI6
CisgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBT
ZWUgY29tbWVudHMgYXQKKyAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBp
cyBuZWNlc3NhcnkuICAqLworICB5eXRva2VuID0geXljaGFyID09IFlZRU1QVFkgPyBZWUVNUFRZ
IDogWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisKKyAgLyogSWYgbm90IGFscmVhZHkgcmVjb3Zlcmlu
ZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlmICgheXllcnJzdGF0
dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9WRVJCT1NFCisgICAg
ICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvciIpKTsKKyNlbHNlCisjIGRlZmluZSBZWVNZTlRB
WF9FUlJPUiB5eXN5bnRheF9lcnJvciAoJnl5bXNnX2FsbG9jLCAmeXltc2csIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5eXNzcCwgeXl0b2tlbikKKyAgICAgIHsK
KyAgICAgICAgY2hhciBjb25zdCAqeXltc2dwID0gWVlfKCJzeW50YXggZXJyb3IiKTsKKyAgICAg
ICAgaW50IHl5c3ludGF4X2Vycm9yX3N0YXR1czsKKyAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3Rh
dHVzID0gWVlTWU5UQVhfRVJST1I7CisgICAgICAgIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMg
PT0gMCkKKyAgICAgICAgICB5eW1zZ3AgPSB5eW1zZzsKKyAgICAgICAgZWxzZSBpZiAoeXlzeW50
YXhfZXJyb3Jfc3RhdHVzID09IDEpCisgICAgICAgICAgeworICAgICAgICAgICAgaWYgKHl5bXNn
ICE9IHl5bXNnYnVmKQorICAgICAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyAgICAg
ICAgICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXltc2dfYWxsb2MpOworICAg
ICAgICAgICAgaWYgKCF5eW1zZykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHl5
bXNnID0geXltc2didWY7CisgICAgICAgICAgICAgICAgeXltc2dfYWxsb2MgPSBzaXplb2YgeXlt
c2didWY7CisgICAgICAgICAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gMjsKKyAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7CisgICAgICAgICAg
ICAgICAgeXltc2dwID0geXltc2c7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAg
ICAgIHl5ZXJyb3IgKHl5bXNncCk7CisgICAgICAgIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMg
PT0gMikKKyAgICAgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworICAgICAgfQorIyB1bmRlZiBZ
WVNZTlRBWF9FUlJPUgorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0g
MykKKyAgICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9v
a2FoZWFkIHRva2VuIGFmdGVyIGFuCisgICAgICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovCisK
KyAgICAgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBSZXR1
cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLworICAgICAgICAgIGlmICh5eWNoYXIg
PT0gWVlFT0YpCisgICAgICAgICAgICBZWUFCT1JUOworICAgICAgICB9CisgICAgICBlbHNlCisg
ICAgICAgIHsKKyAgICAgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAorICAg
ICAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwpOworICAgICAgICAgIHl5Y2hhciA9
IFlZRU1QVFk7CisgICAgICAgIH0KKyAgICB9CisKKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVz
ZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yCisgICAgIHRva2VuLiAg
Ki8KKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4
cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoKKworICAvKiBQYWNpZnkgY29tcGls
ZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZlciBpbnZva2VzCisgICAgIFlZRVJS
T1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVz
ZXIKKyAgICAgY29kZS4gICovCisgIGlmICgvKkNPTlNUQ09ORCovIDApCisgICAgIGdvdG8geXll
cnJvcmxhYjsKKworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3
aG9zZSBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlFUlJPUi4gICovCisgIFlZUE9QU1RB
Q0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OworICB5eXN0YXRlID0gKnl5c3NwOworICBnb3RvIHl5ZXJybGFiMTsKKworCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8
IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJyb3IgYW5kIFlZRVJS
T1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjE6CisgIHl5ZXJyc3RhdHVzID0gMzsgICAgICAvKiBF
YWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzsp
CisgICAgeworICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICAgICAgaWYgKCF5eXBhY3Rf
dmFsdWVfaXNfZGVmYXVsdCAoeXluKSkKKyAgICAgICAgeworICAgICAgICAgIHl5biArPSBZWVRF
UlJPUjsKKyAgICAgICAgICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNr
W3l5bl0gPT0gWVlURVJST1IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHl5biA9IHl5
dGFibGVbeXluXTsKKyAgICAgICAgICAgICAgaWYgKDAgPCB5eW4pCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgLyogUG9wIHRoZSBjdXJy
ZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLwor
ICAgICAgaWYgKHl5c3NwID09IHl5c3MpCisgICAgICAgIFlZQUJPUlQ7CisKKworICAgICAgeXlk
ZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwKKyAgICAgICAgICAgICAgICAgIHl5c3Rvc1t5eXN0
YXRlXSwgeXl2c3ApOworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRlID0gKnl5
c3NwOworICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisKKyAgWVlf
SUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4KKyAgKisreXl2c3AgPSB5eWx2YWw7Cisg
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORAorCisKKyAgLyogU2hpZnQgdGhlIGVy
cm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXlu
XSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2Vw
dGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5
eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlh
Ym9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5
cmV0dXJuOworCisjaWYgIWRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXll
eGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVk
bGFiOgorICB5eWVycm9yIChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0g
MjsKKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5
Y2hhciAhPSBZWUVNUFRZKQorICAgIHsKKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVz
dCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVudHMgYXQKKyAgICAgICAgIHVzZXIg
c2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8KKyAgICAgIHl5
dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVw
OiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsCisgICAgICAgICAgICAgICAgICB5eXRva2VuLCAmeXls
dmFsKTsKKyAgICB9CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxl
IHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAg
Ki8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3Ap
OworICB3aGlsZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogcG9wcGluZyIsCisgICAgICAgICAgICAgICAgICB5eXN0b3NbKnl5c3NwXSwgeXl2c3Ap
OworICAgICAgWVlQT1BTVEFDSyAoMSk7CisgICAgfQorI2lmbmRlZiB5eW92ZXJmbG93CisgIGlm
ICh5eXNzICE9IHl5c3NhKQorICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7CisjZW5kaWYKKyNpZiBZ
WUVSUk9SX1ZFUkJPU0UKKyAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQorICAgIFlZU1RBQ0tfRlJF
RSAoeXltc2cpOworI2VuZGlmCisgIHJldHVybiB5eXJlc3VsdDsKK30KKworCisKK3ZvaWQgY29u
Zl9wYXJzZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlpbnQg
aTsKKworCXpjb25mX2luaXRzY2FuKG5hbWUpOworCisJX21lbnVfaW5pdCgpOworCisJaWYgKGdl
dGVudigiWkNPTkZfREVCVUciKSkKKwkJeXlkZWJ1ZyA9IDE7CisJeXlwYXJzZSgpOworCisJLyog
VmFyaWFibGVzIGFyZSBleHBhbmRlZCBpbiB0aGUgcGFyc2UgcGhhc2UuIFdlIGNhbiBmcmVlIHRo
ZW0gaGVyZS4gKi8KKwl2YXJpYWJsZV9hbGxfZGVsKCk7CisKKwlpZiAoeXluZXJycykKKwkJZXhp
dCgxKTsKKwlpZiAoIW1vZHVsZXNfc3ltKQorCQltb2R1bGVzX3N5bSA9IHN5bV9maW5kKCAibiIg
KTsKKworCWlmICghbWVudV9oYXNfcHJvbXB0KCZyb290bWVudSkpIHsKKwkJY3VycmVudF9lbnRy
eSA9ICZyb290bWVudTsKKwkJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgIk1haW4gbWVudSIsIE5V
TEwpOworCX0KKworCW1lbnVfZmluYWxpemUoJnJvb3RtZW51KTsKKwlmb3JfYWxsX3N5bWJvbHMo
aSwgc3ltKSB7CisJCWlmIChzeW1fY2hlY2tfZGVwcyhzeW0pKQorCQkJeXluZXJycysrOworCX0K
KwlpZiAoeXluZXJycykKKwkJZXhpdCgxKTsKKwlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsKK30K
Kworc3RhdGljIGNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pCit7CisJc3dp
dGNoICh0b2tlbikgeworCWNhc2UgVF9NRU5VOgkJcmV0dXJuICJtZW51IjsKKwljYXNlIFRfRU5E
TUVOVToJCXJldHVybiAiZW5kbWVudSI7CisJY2FzZSBUX0NIT0lDRToJCXJldHVybiAiY2hvaWNl
IjsKKwljYXNlIFRfRU5EQ0hPSUNFOglyZXR1cm4gImVuZGNob2ljZSI7CisJY2FzZSBUX0lGOgkJ
cmV0dXJuICJpZiI7CisJY2FzZSBUX0VORElGOgkJcmV0dXJuICJlbmRpZiI7CisJY2FzZSBUX0RF
UEVORFM6CQlyZXR1cm4gImRlcGVuZHMiOworCWNhc2UgVF9WSVNJQkxFOgkJcmV0dXJuICJ2aXNp
YmxlIjsKKwl9CisJcmV0dXJuICI8dG9rZW4+IjsKK30KKworc3RhdGljIGJvb2wgemNvbmZfZW5k
dG9rZW4oY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4sIGludCBlbmR0
b2tlbikKK3sKKwlpZiAoaWQtPnRva2VuICE9IGVuZHRva2VuKSB7CisJCXpjb25mX2Vycm9yKCJ1
bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJsb2NrIiwKKwkJCWlkLT5uYW1lLCB6Y29uZl90b2tl
bm5hbWUoc3RhcnR0b2tlbikpOworCQl5eW5lcnJzKys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJ
aWYgKGN1cnJlbnRfbWVudS0+ZmlsZSAhPSBjdXJyZW50X2ZpbGUpIHsKKwkJemNvbmZfZXJyb3Io
IiclcycgaW4gZGlmZmVyZW50IGZpbGUgdGhhbiAnJXMnIiwKKwkJCWlkLT5uYW1lLCB6Y29uZl90
b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlv
biBvZiB0aGUgJyVzJ1xuIiwKKwkJCWN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9t
ZW51LT5saW5lbm8sCisJCQl6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOworCQl5eW5lcnJz
Kys7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk
IHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWZw
cmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
OworCXZhX3N0YXJ0KGFwLCBlcnIpOworCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7CisJdmFf
ZW5kKGFwKTsKKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIHpjb25m
X2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl5eW5lcnJz
Kys7CisJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSk7CisJdmFfc3RhcnQoYXAsIGVycik7CisJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFw
KTsKKwl2YV9lbmQoYXApOworCWZwcmludGYoc3RkZXJyLCAiXG4iKTsKK30KKworc3RhdGljIHZv
aWQgeXllcnJvcihjb25zdCBjaGFyICplcnIpCit7CisJZnByaW50ZihzdGRlcnIsICIlczolZDog
JXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkgKyAxLCBlcnIpOworfQorCitz
dGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3Ry
KQoreworCWNvbnN0IGNoYXIgKnA7CisJaW50IGxlbjsKKworCXB1dGMoJyInLCBvdXQpOworCXdo
aWxlICgocCA9IHN0cmNocihzdHIsICciJykpKSB7CisJCWxlbiA9IHAgLSBzdHI7CisJCWlmIChs
ZW4pCisJCQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4sIHN0cik7CisJCWZwdXRzKCJcXFwiIiwg
b3V0KTsKKwkJc3RyID0gcCArIDE7CisJfQorCWZwdXRzKHN0ciwgb3V0KTsKKwlwdXRjKCciJywg
b3V0KTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3ltYm9sKEZJTEUgKm91dCwgc3RydWN0IG1l
bnUgKm1lbnUpCit7CisJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOworCXN0cnVjdCBw
cm9wZXJ0eSAqcHJvcDsKKworCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpCisJCWZwcmludGYob3V0
LCAiXG5jaG9pY2VcbiIpOworCWVsc2UKKwkJZnByaW50ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwg
c3ltLT5uYW1lKTsKKwlzd2l0Y2ggKHN5bS0+dHlwZSkgeworCWNhc2UgU19CT09MRUFOOgorCQlm
cHV0cygiICBib29sXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfVFJJU1RBVEU6CisJCWZw
dXRzKCIgIHRyaXN0YXRlXG4iLCBvdXQpOworCQlicmVhazsKKwljYXNlIFNfU1RSSU5HOgorCQlm
cHV0cygiICBzdHJpbmdcbiIsIG91dCk7CisJCWJyZWFrOworCWNhc2UgU19JTlQ6CisJCWZwdXRz
KCIgIGludGVnZXJcbiIsIG91dCk7CisJCWJyZWFrOworCWNhc2UgU19IRVg6CisJCWZwdXRzKCIg
IGhleFxuIiwgb3V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZnB1dHMoIiAgPz8/XG4iLCBv
dXQpOworCQlicmVhazsKKwl9CisJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0g
cHJvcC0+bmV4dCkgeworCQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQorCQkJY29udGludWU7CisJ
CXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQljYXNlIFBfUFJPTVBUOgorCQkJZnB1dHMoIiAgcHJv
bXB0ICIsIG91dCk7CisJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7CisJ
CQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCQlmcHV0cygiIGlm
ICIsIG91dCk7CisJCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOworCQkJ
fQorCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFBfREVGQVVMVDoKKwkJ
CWZwdXRzKCAiICBkZWZhdWx0ICIsIG91dCk7CisJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBv
dXQpOworCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7CisJCQkJZnB1
dHMoIiBpZiAiLCBvdXQpOworCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0
KTsKKwkJCX0KKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBQX0NIT0lD
RToKKwkJCWZwdXRzKCIgICNjaG9pY2UgdmFsdWVcbiIsIG91dCk7CisJCQlicmVhazsKKwkJY2Fz
ZSBQX1NFTEVDVDoKKwkJCWZwdXRzKCAiICBzZWxlY3QgIiwgb3V0KTsKKwkJCWV4cHJfZnByaW50
KHByb3AtPmV4cHIsIG91dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJCWNh
c2UgUF9JTVBMWToKKwkJCWZwdXRzKCAiICBpbXBseSAiLCBvdXQpOworCQkJZXhwcl9mcHJpbnQo
cHJvcC0+ZXhwciwgb3V0KTsKKwkJCWZwdXRjKCdcbicsIG91dCk7CisJCQlicmVhazsKKwkJY2Fz
ZSBQX1JBTkdFOgorCQkJZnB1dHMoICIgIHJhbmdlICIsIG91dCk7CisJCQlleHByX2ZwcmludChw
cm9wLT5leHByLCBvdXQpOworCQkJZnB1dGMoJ1xuJywgb3V0KTsKKwkJCWJyZWFrOworCQljYXNl
IFBfTUVOVToKKwkJCWZwdXRzKCAiICBtZW51ICIsIG91dCk7CisJCQlwcmludF9xdW90ZWRfc3Ry
aW5nKG91dCwgcHJvcC0+dGV4dCk7CisJCQlmcHV0YygnXG4nLCBvdXQpOworCQkJYnJlYWs7CisJ
CWNhc2UgUF9TWU1CT0w6CisJCQlmcHV0cyggIiAgc3ltYm9sICIsIG91dCk7CisJCQlmcHJpbnRm
KG91dCwgIiVzXG4iLCBwcm9wLT5zeW0tPm5hbWUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ
CQlmcHJpbnRmKG91dCwgIiAgdW5rbm93biBwcm9wICVkIVxuIiwgcHJvcC0+dHlwZSk7CisJCQli
cmVhazsKKwkJfQorCX0KKwlpZiAobWVudS0+aGVscCkgeworCQlpbnQgbGVuID0gc3RybGVuKG1l
bnUtPmhlbHApOworCQl3aGlsZSAobWVudS0+aGVscFstLWxlbl0gPT0gJ1xuJykKKwkJCW1lbnUt
PmhlbHBbbGVuXSA9IDA7CisJCWZwcmludGYob3V0LCAiICBoZWxwXG4lc1xuIiwgbWVudS0+aGVs
cCk7CisJfQorfQorCit2b2lkIHpjb25mZHVtcChGSUxFICpvdXQpCit7CisJc3RydWN0IHByb3Bl
cnR5ICpwcm9wOworCXN0cnVjdCBzeW1ib2wgKnN5bTsKKwlzdHJ1Y3QgbWVudSAqbWVudTsKKwor
CW1lbnUgPSByb290bWVudS5saXN0OworCXdoaWxlIChtZW51KSB7CisJCWlmICgoc3ltID0gbWVu
dS0+c3ltKSkKKwkJCXByaW50X3N5bWJvbChvdXQsIG1lbnUpOworCQllbHNlIGlmICgocHJvcCA9
IG1lbnUtPnByb21wdCkpIHsKKwkJCXN3aXRjaCAocHJvcC0+dHlwZSkgeworCQkJY2FzZSBQX0NP
TU1FTlQ6CisJCQkJZnB1dHMoIlxuY29tbWVudCAiLCBvdXQpOworCQkJCXByaW50X3F1b3RlZF9z
dHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCQlmcHV0cygiXG4iLCBvdXQpOworCQkJCWJyZWFr
OworCQkJY2FzZSBQX01FTlU6CisJCQkJZnB1dHMoIlxubWVudSAiLCBvdXQpOworCQkJCXByaW50
X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsKKwkJCQlmcHV0cygiXG4iLCBvdXQpOwor
CQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQk7CisJCQl9CisJCQlpZiAoIWV4cHJfaXNfeWVz
KHByb3AtPnZpc2libGUuZXhwcikpIHsKKwkJCQlmcHV0cygiICBkZXBlbmRzICIsIG91dCk7CisJ
CQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOworCQkJCWZwdXRjKCdcbics
IG91dCk7CisJCQl9CisJCX0KKworCQlpZiAobWVudS0+bGlzdCkKKwkJCW1lbnUgPSBtZW51LT5s
aXN0OworCQllbHNlIGlmIChtZW51LT5uZXh0KQorCQkJbWVudSA9IG1lbnUtPm5leHQ7CisJCWVs
c2Ugd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkgeworCQkJaWYgKG1lbnUtPnByb21wdCAm
JiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQorCQkJCWZwdXRzKCJcbmVuZG1lbnVcbiIs
IG91dCk7CisJCQlpZiAobWVudS0+bmV4dCkgeworCQkJCW1lbnUgPSBtZW51LT5uZXh0OworCQkJ
CWJyZWFrOworCQkJfQorCQl9CisJfQorfQorCisjaW5jbHVkZSAiemNvbmYubGV4LmMiCisjaW5j
bHVkZSAidXRpbC5jIgorI2luY2x1ZGUgImNvbmZkYXRhLmMiCisjaW5jbHVkZSAiZXhwci5jIgor
I2luY2x1ZGUgInN5bWJvbC5jIgorI2luY2x1ZGUgIm1lbnUuYyIKKyNpbmNsdWRlICJwcmVwcm9j
ZXNzLmMiCi0tIAoyLjcuNAoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:35:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:35:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxWn-0007U8-Cv; Thu, 19 Sep 2019 14:35:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxWl-0007U1-UP
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:35:23 +0000
X-Inumbo-ID: b5816d3c-daea-11e9-9660-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b5816d3c-daea-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:35:22 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 1ED221056DB;
 Thu, 19 Sep 2019 16:35:21 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id B_tEhGuPoux3; Thu, 19 Sep 2019 16:35:21 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id EF8251056D8
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:35:20 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:35:20 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:35:20
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 02/23] kconfig: Introduce
 README.unikraft
Thread-Index: AQHVbsr3XEgB0KdGxU6KhDfJ6MxPJKczEVYA
Date: Thu, 19 Sep 2019 14:35:20 +0000
Message-ID: <C01C5F34-F282-4073-8696-60251D5EE5F9@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-3-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-3-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <8359C905EF8B54499745A11F6C4F7E45@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 02/23] kconfig: Introduce
 README.unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE2LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFNpZ25lZC1vZmYtYnk6
IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdCB8IDIxICsrKysrKysrKysr
KysrKysrKysrKw0KICAgICAxIGZpbGUgY2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQ0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQNCiAg
ICANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQg
Yi9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdA0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZGUzN2Y5Zg0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFmdA0KICAgIEBAIC0wLDAg
KzEsMjEgQEANCiAgICArVGhpcyBpcyBhIGNvcHkgb2YgdGhlIGtjb25maWcgY29kZSBpbiB0aGUg
a2VybmVsIChjdXJyZW50bHkgdjUuMikgdHdlYWtlZA0KICAgICt0byBzdWl0IFVuaWtyYWZ0Lg0K
ICAgICsNCiAgICArVG8gdXBkYXRlIChmcm9tIGxpbnV4KToNCiAgICArCWNwIC1yIC91c3Ivc3Jj
L2xpbnV4L3NjcmlwdHMva2NvbmZpZyBzdXBwb3J0L2tjb25maWcubmV3DQogICAgKwljZCBzdXBw
b3J0L2tjb25maWcubmV3DQogICAgKwljcCAtYSAuLi9rY29uZmlnL3BhdGNoZXMgLi4va2NvbmZp
Zy9SRUFETUUudW5pa3JhZnQgLi4va2NvbmZpZy8uZ2l0aWdub3JlIC4NCiAgICArCXF1aWx0IHB1
c2ggLWENCiAgICArCSMgRml4IGFueSBjb25mbGljdA0KICAgICsJY2QgLi4NCiAgICArCXJtIC1y
ZiBrY29uZmlnDQogICAgKwltdiBrY29uZmlnLm5ldyBrY29uZmlnDQogICAgKw0KICAgICtUaGVu
IHZlcmlmeSB0aGUgdG9wbGV2ZWwgdGFyZ2V0cyB3b3JrOg0KICAgICsJY29uZmlnDQogICAgKwlk
ZWZjb25maWcNCiAgICArCW1lbnVjb25maWcNCiAgICArCXhjb25maWcNCiAgICArCWdjb25maWcN
CiAgICArCW9sZGNvbmZpZw0KICAgICsJcWNvbmZpZw0KICAgIC0tIA0KICAgIDIuNy40DQogICAg
DQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:35:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:35:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxX1-0007W6-Fo; Thu, 19 Sep 2019 14:35:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxWz-0007Vn-Lg
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:35:37 +0000
X-Inumbo-ID: bd927e08-daea-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id bd927e08-daea-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 14:35:35 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id B99B01056DB;
 Thu, 19 Sep 2019 16:35:34 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id VfBxJGwMeZvb; Thu, 19 Sep 2019 16:35:34 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 92B251056D8
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:35:34 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:35:34 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:35:34
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 03/23] kconfig: Replace the
 kernel with Unikraft
Thread-Index: AQHVbsr69Z/3eQMFHk6wSpEJh9HhJKczEWaA
Date: Thu, 19 Sep 2019 14:35:33 +0000
Message-ID: <2293E1B7-30A9-4498-9843-D5DE7F84B42B@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-4-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-4-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <46ABD886778C9046B4EB4630FB1F5D80@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 03/23] kconfig: Replace the
 kernel with Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE2LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFNlYXJjaCBhbmQgcmVw
bGFjZSB0aGUgS2VybmVsIHdpdGggVW5pa3JhZnQNCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBT
aGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAg
ICAgc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgfCAg
MiArLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlICAgICAgICAgICAgICAg
ICAgICB8ICAyICstDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYyAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDYgKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMiArLQ0KICAgICAuLi4vcGF0Y2hlcy8wMS1rY29uZmln
LWtlcm5lbC10by11bmlrcmFmdC5wYXRjaCAgICB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysN
CiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYyAgICAgICAgICAgICAgICAgICAgICAg
fCAgMiArLQ0KICAgICA2IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDcgZGVsZXRp
b25zKC0pDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNo
ZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2gNCiAgICANCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUNCiAgICBpbmRleCAzZjMyN2UyLi43YjUzMmM1IDEwMDY0NA0KICAgIC0tLSBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlDQogICAgQEAgLTEsNiArMSw2IEBADQogICAgICMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjANCiAgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAtIyBLZXJuZWwg
Y29uZmlndXJhdGlvbiB0YXJnZXRzDQogICAgKyMgVW5pa3JhZnQgY29uZmlndXJhdGlvbiB0YXJn
ZXRzDQogICAgICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmls
ZQ0KICAgICANCiAgICAgUEhPTlkgKz0geGNvbmZpZyBnY29uZmlnIG1lbnVjb25maWcgY29uZmln
IGxvY2FsbW9kY29uZmlnIGxvY2FseWVzY29uZmlnIFwNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xh
ZGUNCiAgICBpbmRleCBhYTQ4M2NiLi4wM2U5N2Q3IDEwMDY0NA0KICAgIC0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2dj
b25mLmdsYWRlDQogICAgQEAgLTQsNyArNCw3IEBADQogICAgIA0KICAgICA8d2lkZ2V0IGNsYXNz
PSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cxIj4NCiAgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLSAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xh
dGFibGU9InllcyI+R3RrIEtlcm5lbCBDb25maWd1cmF0b3I8L3Byb3BlcnR5Pg0KICAgICsgIDxw
cm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0ayBVbmlrcmFmdCBDb25m
aWd1cmF0b3I8L3Byb3BlcnR5Pg0KICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lO
RE9XX1RPUExFVkVMPC9wcm9wZXJ0eT4NCiAgICAgICA8cHJvcGVydHkgbmFtZT0id2luZG93X3Bv
c2l0aW9uIj5HVEtfV0lOX1BPU19OT05FPC9wcm9wZXJ0eT4NCiAgICAgICA8cHJvcGVydHkgbmFt
ZT0ibW9kYWwiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9tY29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jDQogICAgaW5kZXgg
Njk0MDkxZi4uNTNjNGE2MiAxMDA2NDQNCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L21j
b25mLmMNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMNCiAgICBAQCAtMTc1
LDkgKzE3NSw5IEBAIG1lbnVfaW5zdHJ1Y3Rpb25zW10gPQ0KICAgICAJIkFycm93IGtleXMgbmF2
aWdhdGUgdGhlIG1lbnUuICAiDQogICAgIAkiPEVudGVyPiBzZWxlY3RzIHN1Ym1lbnVzIC0tLT4g
KG9yIGVtcHR5IHN1Ym1lbnVzIC0tLS0pLiAgIg0KICAgICAJIkhpZ2hsaWdodGVkIGxldHRlcnMg
YXJlIGhvdGtleXMuICAiDQogICAgLQkiUHJlc3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVk
ZXMsIDxNPiBtb2R1bGFyaXplcyBmZWF0dXJlcy4gICINCiAgICArCSJQcmVzc2luZyA8WT4gc2Vs
ZWN0cyBhIGZlYXR1cmUsIHdoaWxlIDxOPiB3aWxsIGV4Y2x1ZGUgYSBmZWF0dXJlLiAgIg0KICAg
ICAJIlByZXNzIDxFc2M+PEVzYz4gdG8gZXhpdCwgPD8+IGZvciBIZWxwLCA8Lz4gZm9yIFNlYXJj
aC4gICINCiAgICAtCSJMZWdlbmQ6IFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9k
dWxlICA8ID4gbW9kdWxlIGNhcGFibGUiLA0KICAgICsJIkxlZ2VuZDogWypdIGZlYXR1cmUgaXMg
c2VsZWN0ZWQgIFsgXSBmZWF0dXJlIGlzIGV4Y2x1ZGVkIiwNCiAgICAgcmFkaW9saXN0X2luc3Ry
dWN0aW9uc1tdID0NCiAgICAgCSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3
aW5kb3cgb3IgIg0KICAgICAJInByZXNzIHRoZSBob3RrZXkgb2YgdGhlIGl0ZW0geW91IHdpc2gg
dG8gc2VsZWN0ICINCiAgICBAQCAtOTU3LDcgKzk1Nyw3IEBAIHN0YXRpYyBpbnQgaGFuZGxlX2V4
aXQodm9pZCkNCiAgICAgCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpDQogICAgIAkJcmVzID0gZGlh
bG9nX3llc25vKE5VTEwsDQogICAgIAkJCQkgICAiRG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyIG5l
dyBjb25maWd1cmF0aW9uP1xuIg0KICAgIC0JCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8g
Y29udGludWUga2VybmVsIGNvbmZpZ3VyYXRpb24uKSIsDQogICAgKwkJCQkgICAgICIoUHJlc3Mg
PEVTQz48RVNDPiB0byBjb250aW51ZSBVbmlrcmFmdCBjb25maWd1cmF0aW9uLikiLA0KICAgICAJ
CQkJICAgNiwgNjApOw0KICAgICAJZWxzZQ0KICAgICAJCXJlcyA9IC0xOw0KICAgIGRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L25j
b25mLmMNCiAgICBpbmRleCBjYmFmZTNiLi5kM2Q5MDhjIDEwMDY0NA0KICAgIC0tLSBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvbmNvbmYuYw0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNv
bmYuYw0KICAgIEBAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG5jb25mX2dsb2Jh
bF9oZWxwW10gPQ0KICAgICAiTWVudSBlbnRyaWVzXG4iDQogICAgICItLS0tLS0tLS0tLS1cbiIN
CiAgICAgIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1l
dGVycyBmb3IgdGhlIGtlcm5lbFxuIg0KICAgIC0iYnVpbGQuICBLZXJuZWwgZmVhdHVyZXMgY2Fu
IGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIHJlbW92ZWQuXG4iDQogICAgKyJi
dWlsZC4gIFVuaWtyYWZ0IGZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgc2VsZWN0ZWQgb3IgZGVzZWxl
Y3RlZC5cbiINCiAgICAgIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVj
aW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzLlxuIg0KICAgICAiXG4iDQogICAgICJNZW51IGVu
dHJpZXMgYmVnaW5uaW5nIHdpdGggZm9sbG93aW5nIGJyYWNlcyByZXByZXNlbnQgZmVhdHVyZXMg
dGhhdFxuIg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDEt
a2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2ggYi9zdXBwb3J0L2tjb25maWcubmV3L3Bh
dGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0Y2gNCiAgICBuZXcgZmlsZSBt
b2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmYwZDYzYjQNCiAgICAtLS0gL2Rldi9udWxs
DQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVs
LXRvLXVuaWtyYWZ0LnBhdGNoDQogICAgQEAgLTAsMCArMSw3NiBAQA0KICAgICtkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFr
ZWZpbGUNCiAgICAraW5kZXggM2YzMjdlMi4uN2I1MzJjNSAxMDA2NDQNCiAgICArLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQ0KICAgICsrKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlDQogICAgK0BAIC0xLDYgKzEsNiBAQA0KICAgICsgIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMA0KICAgICsgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICArLSMgS2Vy
bmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cw0KICAgICsrIyBVbmlrcmFmdCBjb25maWd1cmF0aW9u
IHRhcmdldHMNCiAgICArICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNlZCBmcm9tIHRvcC1sZXZlbCBt
YWtlZmlsZQ0KICAgICsgDQogICAgKyBQSE9OWSArPSB4Y29uZmlnIGdjb25maWcgbWVudWNvbmZp
ZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcgXA0KICAgICtkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
Z2NvbmYuZ2xhZGUNCiAgICAraW5kZXggYWE0ODNjYi4uMDNlOTdkNyAxMDA2NDQNCiAgICArLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQ0KICAgICsrKysgYi9zdXBwb3J0L2tj
b25maWcubmV3L2djb25mLmdsYWRlDQogICAgK0BAIC00LDcgKzQsNyBAQA0KICAgICsgDQogICAg
KyA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cxIj4NCiAgICArICAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICstICA8cHJvcGVydHkgbmFt
ZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVsIENvbmZpZ3VyYXRvcjwvcHJv
cGVydHk+DQogICAgKysgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMi
Pkd0ayBVbmlrcmFmdCBDb25maWd1cmF0b3I8L3Byb3BlcnR5Pg0KICAgICsgICA8cHJvcGVydHkg
bmFtZT0idHlwZSI+R1RLX1dJTkRPV19UT1BMRVZFTDwvcHJvcGVydHk+DQogICAgKyAgIDxwcm9w
ZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX05PTkU8L3Byb3BlcnR5Pg0K
ICAgICsgICA8cHJvcGVydHkgbmFtZT0ibW9kYWwiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbWNvbmYuYw0KICAgICtpbmRleCA2OTQwOTFmLi41M2M0YTYyIDEwMDY0NA0KICAgICstLS0g
YS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMNCiAgICArKysrIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9tY29uZi5jDQogICAgK0BAIC0xNzUsOSArMTc1LDkgQEAgbWVudV9pbnN0cnVjdGlvbnNb
XSA9DQogICAgKyAJIkFycm93IGtleXMgbmF2aWdhdGUgdGhlIG1lbnUuICAiDQogICAgKyAJIjxF
bnRlcj4gc2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBlbXB0eSBzdWJtZW51cyAtLS0tKS4gICIN
CiAgICArIAkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4gICINCiAgICArLQkiUHJl
c3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVkZXMsIDxNPiBtb2R1bGFyaXplcyBmZWF0dXJl
cy4gICINCiAgICArKwkiUHJlc3NpbmcgPFk+IHNlbGVjdHMgYSBmZWF0dXJlLCB3aGlsZSA8Tj4g
d2lsbCBleGNsdWRlIGEgZmVhdHVyZS4gICINCiAgICArIAkiUHJlc3MgPEVzYz48RXNjPiB0byBl
eGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIg0KICAgICstCSJMZWdlbmQ6IFsq
XSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUi
LA0KICAgICsrCSJMZWdlbmQ6IFsqXSBmZWF0dXJlIGlzIHNlbGVjdGVkICBbIF0gZmVhdHVyZSBp
cyBleGNsdWRlZCIsDQogICAgKyByYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQ0KICAgICsgCSJV
c2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIg0KICAgICsgCSJw
cmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRvIHNlbGVjdCAiDQogICAgK0BA
IC05NTcsNyArOTU3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhpdCh2b2lkKQ0KICAgICsgCWlm
IChjb25mX2dldF9jaGFuZ2VkKCkpDQogICAgKyAJCXJlcyA9IGRpYWxvZ195ZXNubyhOVUxMLA0K
ICAgICsgCQkJCSAgICJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRpb24/
XG4iDQogICAgKy0JCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUga2VybmVs
IGNvbmZpZ3VyYXRpb24uKSIsDQogICAgKysJCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8g
Y29udGludWUgVW5pa3JhZnQgY29uZmlndXJhdGlvbi4pIiwNCiAgICArIAkJCQkgICA2LCA2MCk7
DQogICAgKyAJZWxzZQ0KICAgICsgCQlyZXMgPSAtMTsNCiAgICArZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvbmNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYw0KICAg
ICtpbmRleCBjYmFmZTNiLi5kM2Q5MDhjIDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L25jb25mLmMNCiAgICArKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jDQog
ICAgK0BAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyIG5jb25mX2dsb2JhbF9oZWxw
W10gPQ0KICAgICsgIk1lbnUgZW50cmllc1xuIg0KICAgICsgIi0tLS0tLS0tLS0tLVxuIg0KICAg
ICsgIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVy
cyBmb3IgdGhlIGtlcm5lbFxuIg0KICAgICstImJ1aWxkLiAgS2VybmVsIGZlYXR1cmVzIGNhbiBl
aXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciByZW1vdmVkLlxuIg0KICAgICsrImJ1
aWxkLiAgVW5pa3JhZnQgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBzZWxlY3RlZCBvciBkZXNlbGVj
dGVkLlxuIg0KICAgICsgIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRlcmVkIGFzIHRleHQgb3IgZGVj
aW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzLlxuIg0KICAgICsgIlxuIg0KICAgICsgIk1lbnUg
ZW50cmllcyBiZWdpbm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJl
cyB0aGF0XG4iDQogICAgK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNj
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYw0KICAgICtpbmRleCBjZTdmYzg3Li4wMDIx
YWE2IDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjDQogICAg
KysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MNCiAgICArQEAgLTQ2LDcgKzQ2LDcg
QEAgc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IGNoYXIqIHN0cikNCiAgICAr
IH0NCiAgICArIA0KICAgICsgQ29uZmlnU2V0dGluZ3M6OkNvbmZpZ1NldHRpbmdzKCkNCiAgICAr
LQk6IFFTZXR0aW5ncygia2VybmVsLm9yZyIsICJxY29uZiIpDQogICAgKysJOiBRU2V0dGluZ3Mo
InVuaWtyYWZ0Lm9yZyIsICJxY29uZiIpDQogICAgKyB7DQogICAgKyB9DQogICAgKyANCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcWNvbmYuY2MNCiAgICBpbmRleCBjZTdmYzg3Li4wMDIxYWE2IDEwMDY0NA0KICAgIC0t
LSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MNCiAgICArKysgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3Fjb25mLmNjDQogICAgQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGlubGluZSBRU3Ry
aW5nIHFnZXR0ZXh0KGNvbnN0IGNoYXIqIHN0cikNCiAgICAgfQ0KICAgICANCiAgICAgQ29uZmln
U2V0dGluZ3M6OkNvbmZpZ1NldHRpbmdzKCkNCiAgICAtCTogUVNldHRpbmdzKCJrZXJuZWwub3Jn
IiwgInFjb25mIikNCiAgICArCTogUVNldHRpbmdzKCJ1bmlrcmFmdC5vcmciLCAicWNvbmYiKQ0K
ICAgICB7DQogICAgIH0NCiAgICAgDQogICAgLS0gDQogICAgMi43LjQNCiAgICANCiAgICANCiAg
ICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KICAgIE1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:35:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:35:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxXE-0007ZP-Hp; Thu, 19 Sep 2019 14:35:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxXD-0007ZA-5g
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:35:51 +0000
X-Inumbo-ID: c613de82-daea-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c613de82-daea-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 14:35:49 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 02A73F2025;
 Thu, 19 Sep 2019 16:35:49 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 6oYtFD3g8-Ju; Thu, 19 Sep 2019 16:35:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id CBFE1F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:35:46 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:35:46 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:35:46
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 04/23] Kconfig: Importing
 existing Makefile.br
Thread-Index: AQHVbsr4B1/6iT+2QkCPXIYiJIFULaczEXUA
Date: Thu, 19 Sep 2019 14:35:46 +0000
Message-ID: <1738E74C-6489-495D-85F7-19C7A9CA2B87@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-5-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-5-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <666A3F4D94D7594BAA0248AD0C7EC0E5@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 04/23] Kconfig: Importing
 existing Makefile.br
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE2LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFNpZ25lZC1vZmYtYnk6
IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAgICAgICAgICAgIHwg
NTMgKysrKysrKysrKysrKysrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVz
LzAyLWltcG9ydC1tYWtlZmlsZS5iciB8IDU5ICsrKysrKysrKysrKysrKysrKysrKysrDQogICAg
IDIgZmlsZXMgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKykNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnINCiAg
ICANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K
ICAgIGluZGV4IDAwMDAwMDAuLjQxYzVjZTENCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgIEBAIC0wLDAgKzEsNTMgQEANCiAg
ICArc3JjIDo9IC4NCiAgICArdG9wX3NyY2Rpcj0uLi8uLi8NCiAgICArdG9wX2J1aWxkZGlyPS4u
Ly4uLw0KICAgICtzcmN0cmVlIDo9IC4NCiAgICArb2JqID89IC4NCiAgICArDQogICAgK2luY2x1
ZGUgTWFrZWZpbGUNCiAgICArI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5o
DQogICAgKy1pbmNsdWRlICQob2JqKS8uZGVwZW5kDQogICAgKyQob2JqKS8uZGVwZW5kOiAkKHdp
bGRjYXJkICouaCAqLmMpDQogICAgKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhP
U1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAyPi9kZXYvbnVsbCB8fCA6DQogICAgKw0KICAgICtfX2hv
c3Rwcm9ncyA6PSAkKHNvcnQgJChob3N0cHJvZ3MteSkgJChob3N0cHJvZ3MtbSkpDQogICAgK2hv
c3QtY3NpbmdsZSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQoJChtKS1vYmpz
KSwsJChtKSkpDQogICAgK2hvc3QtY211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3Mp
LFwNCiAgICArICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwsJChpZiAkKCQobSktb2Jq
cyksJChtKSkpKQ0KICAgICtob3N0LWN4eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJv
Z3MpLFwNCiAgICArICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgk
KG0pLW9ianMpLCkpKQ0KICAgICtob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChz
b3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQ0KICAgICtob3N0
LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hv
c3Rwcm9ncyksJCgkKG0pLWN4eG9ianMpKSkpDQogICAgKw0KICAgICtIT1NUX0VYVFJBQ0ZMQUdT
ICs9IC1JJChvYmopIC1EQ09ORklHXz1cIlwiDQogICAgKw0KICAgICskKGhvc3QtY3NpbmdsZSk6
ICU6ICUuYw0KICAgICsJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdT
KSAkKEhPU1RDRkxBR1NfJEApICQ8IC1vICQob2JqKS8kQA0KICAgICsNCiAgICArJChob3N0LWNt
dWx0aSk6ICU6ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikNCiAgICArCSQoSE9TVENDKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykpICQoSE9TVExPQURMSUJFU18kKEBGKSkgLW8gJChv
YmopLyRADQogICAgKw0KICAgICskKGhvc3QtY3h4bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2Jqcykg
JChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgICsJJChIT1NUQ1hYKSAkKEhPU1RfRVhU
UkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEApICQoYWRkcHJlZml4ICQo
b2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhPU1RMT0FETElCRVNfJChA
RikpIC1vICQob2JqKS8kQA0KICAgICsNCiAgICArJChvYmopLyUubzogJS5jDQogICAgKwkkKEhP
U1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBG
KSkgLWMgJDwgLW8gJEANCiAgICArDQogICAgKyQob2JqKS8lLm86ICQob2JqKS8lLmMNCiAgICAr
CSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdT
XyQoQEYpKSAtYyAkPCAtbyAkQA0KICAgICsNCiAgICArJChvYmopLyUubzogJS5jYw0KICAgICsJ
JChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFH
U18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICArDQogICAgKyQob2JqKS8lOjogJChzcmMpLyVfc2hp
cHBlZA0KICAgICsJJChRKWNhdCAkPCA+ICRADQogICAgKw0KICAgICtjbGVhbjoNCiAgICArCSQo
USlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQ0KICAgICtkaXN0Y2xl
YW46IGNsZWFuDQogICAgKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGx4ZGlhbG9n
KSAkKGNvbmYtb2JqcykgJChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpzKSBcDQogICAgKwkJ
JChob3N0cHJvZ3MteSkgJChxY29uZi1jeHhvYmpzKSAkKHFjb25mLW9ianMpICQoZ2NvbmYtb2Jq
cykgXA0KICAgICsJCW1jb25mIC5kZXBlbmQpDQogICAgKw0KICAgICtGT1JDRToNCiAgICArLlBI
T05ZOiBGT1JDRSBjbGVhbiBkaXN0Y2xlYW4NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnINCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLmZmZTBiYTkNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5icg0KICAg
IEBAIC0wLDAgKzEsNTkgQEANCiAgICArZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
TWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgK25ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgK2luZGV4IDAwMDAwMDAuLjQxYzVjZTENCiAgICArLS0tIC9k
ZXYvbnVsbA0KICAgICsrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAg
K0BAIC0wLDAgKzEsNTMgQEANCiAgICArK3NyYyA6PSAuDQogICAgKyt0b3Bfc3JjZGlyPS4uLy4u
Lw0KICAgICsrdG9wX2J1aWxkZGlyPS4uLy4uLw0KICAgICsrc3JjdHJlZSA6PSAuDQogICAgKytv
YmogPz0gLg0KICAgICsrDQogICAgKytpbmNsdWRlIE1ha2VmaWxlDQogICAgKysjSE9TVENGTEFH
Uys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgNCiAgICArKy1pbmNsdWRlICQob2JqKS8uZGVw
ZW5kDQogICAgKyskKG9iaikvLmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQ0KICAgICsrCSQo
SE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+
L2Rldi9udWxsIHx8IDoNCiAgICArKw0KICAgICsrX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9z
dHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQ0KICAgICsraG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFj
aCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkNCiAgICArK2hvc3Qt
Y211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwNCiAgICArKyAgICAgICAgICAg
JChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkNCiAgICArK2hv
c3QtY3h4bXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXA0KICAgICsrICAgICAg
ICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQ0KICAg
ICsraG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwk
KF9faG9zdHByb2dzKSwkKCQobSktb2JqcykpKSkNCiAgICArK2hvc3QtY3h4b2JqcyA6PSAkKGFk
ZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSkt
Y3h4b2JqcykpKSkNCiAgICArKw0KICAgICsrSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAt
RENPTkZJR189XCJcIg0KICAgICsrDQogICAgKyskKGhvc3QtY3NpbmdsZSk6ICU6ICUuYw0KICAg
ICsrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZM
QUdTXyRAKSAkPCAtbyAkKG9iaikvJEANCiAgICArKw0KICAgICsrJChob3N0LWNtdWx0aSk6ICU6
ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikNCiAgICArKwkkKEhPU1RDQykgJChIT1NUX0VY
VFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChv
YmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQA0K
ICAgICsrDQogICAgKyskKGhvc3QtY3h4bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0
LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgICsrCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZM
QUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikv
LCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAt
byAkKG9iaikvJEANCiAgICArKw0KICAgICsrJChvYmopLyUubzogJS5jDQogICAgKysJJChIT1NU
Q0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikp
IC1jICQ8IC1vICRADQogICAgKysNCiAgICArKyQob2JqKS8lLm86ICQob2JqKS8lLmMNCiAgICAr
KwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFH
U18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICArKw0KICAgICsrJChvYmopLyUubzogJS5jYw0KICAg
ICsrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hY
RkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAgKysNCiAgICArKyQob2JqKS8lOjogJChzcmMp
LyVfc2hpcHBlZA0KICAgICsrCSQoUSljYXQgJDwgPiAkQA0KICAgICsrDQogICAgKytjbGVhbjoN
CiAgICArKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkNCiAg
ICArK2Rpc3RjbGVhbjogY2xlYW4NCiAgICArKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmop
LywkKGx4ZGlhbG9nKSAkKGNvbmYtb2JqcykgJChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpz
KSBcDQogICAgKysJCSQoaG9zdHByb2dzLXkpICQocWNvbmYtY3h4b2JqcykgJChxY29uZi1vYmpz
KSAkKGdjb25mLW9ianMpIFwNCiAgICArKwkJbWNvbmYgLmRlcGVuZCkNCiAgICArKw0KICAgICsr
Rk9SQ0U6DQogICAgKysuUEhPTlk6IEZPUkNFIGNsZWFuIGRpc3RjbGVhbg0KICAgIC0tIA0KICAg
IDIuNy40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:36:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:36:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxXa-0007dv-LB; Thu, 19 Sep 2019 14:36:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxXZ-0007dp-UP
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:36:13 +0000
X-Inumbo-ID: d2b2b84a-daea-11e9-9660-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d2b2b84a-daea-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:36:12 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 00050F2025;
 Thu, 19 Sep 2019 16:36:10 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id J0Cu7QuuA4wy; Thu, 19 Sep 2019 16:36:10 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C039DF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:36:08 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:36:08 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:36:08
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 05/23] kbuild: Add build
 helper function from Linux
Thread-Index: AQHVbsr92YYoIBeQCUi81UWsK/W+jKczEZAA
Date: Thu, 19 Sep 2019 14:36:08 +0000
Message-ID: <99CD0530-EF9B-4770-BBCB-E75F3380BFCA@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-6-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-6-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <BCAAD53176E5A54FB0DCA77F22BF3DFA@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 05/23] kbuild: Add build
 helper function from Linux
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEltcG9ydCBNYWtlZmls
ZS5ydWxlcyBmcm9tIHNjcmlwdHMva2J1aWxkLmluY2x1ZGUuDQogICAgVGFnOiB2NS4yDQogICAg
DQogICAgU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBu
ZWNsYWIuZXU+DQogICAgLS0tDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIg
ICAgICAgICAgICAgICAgICAgIHwgICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtl
ZmlsZS5ydWxlcyAgICAgICAgICAgICAgICAgfCAgODQgKysrKysrKysrKysrKysrKysNCiAgICAg
Li4uL3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwgfCAxMDIg
KysrKysrKysrKysrKysrKysrKysrDQogICAgIDMgZmlsZXMgY2hhbmdlZCwgMTg3IGluc2VydGlv
bnMoKykNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZp
bGUucnVsZXMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0
Y2hlcy8wMy1pbmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbA0KICAgIA0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgIGluZGV4IDQxYzVjZTEuLjBmZGJlOWEgMTAwNjQ0DQog
ICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICsrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICBAQCAtNCw2ICs0LDcgQEAgdG9wX2J1aWxk
ZGlyPS4uLy4uLw0KICAgICBzcmN0cmVlIDo9IC4NCiAgICAgb2JqID89IC4NCiAgICAgDQogICAg
K2luY2x1ZGUgTWFrZWZpbGUucnVsZXMNCiAgICAgaW5jbHVkZSBNYWtlZmlsZQ0KICAgICAjSE9T
VENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgNCiAgICAgLWluY2x1ZGUgJChvYmop
Ly5kZXBlbmQNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5y
dWxlcyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUucnVsZXMNCiAgICBuZXcgZmlsZSBt
b2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjc4YTljODENCiAgICAtLS0gL2Rldi9udWxs
DQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcw0KICAgIEBAIC0w
LDAgKzEsODQgQEANCiAgICAra2VjaG8gOj0gZWNobw0KICAgICtjb21tYSA6PSAsDQogICAgKw0K
ICAgICsNCiAgICArZG90LXRhcmdldCA9ICQoZGlyICRAKS4kKG5vdGRpciAkQCkNCiAgICArDQog
ICAgK2FueS1wcmVyZXEgPSAkKGZpbHRlci1vdXQgJChQSE9OWSksJD8pICQoZmlsdGVyLW91dCAk
KFBIT05ZKSAkKHdpbGRjYXJkICReKSwkXikNCiAgICArDQogICAgK2FyZy1jaGVjayA9ICQoaWYg
JChzdHJpcCAkKGNtZF8kQCkpLCwxKQ0KICAgICsNCiAgICArbWFrZS1jbWQgPSAkKGNhbGwgZXNj
c3EsJChzdWJzdCAkKHBvdW5kKSwkJChwb3VuZCksJChzdWJzdCAkJCwkJCQkLCQoY21kXyQoMSkp
KSkpDQogICAgKw0KICAgICsjIHByaW50aW5nIGNvbW1hbmRzDQogICAgK2NtZCA9IEBzZXQgLWU7
ICQoZWNoby1jbWQpICQoY21kXyQoMSkpDQogICAgKw0KICAgICtkZXBmaWxlID0gJChzdWJzdCAk
KGNvbW1hKSxfLCQoZG90LXRhcmdldCkuZCkNCiAgICArZGVwZmxhZ3MgPSAtV3AkKGNvbW1hKS1N
RCQoY29tbWEpJChjYWxsIGRvdC10YXJnZXQpDQogICAgKw0KICAgICtjbWRfYW5kX2ZpeGRlcCA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsJ
JChjbWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcDQogICAgKwkkKG9iaikvZml4ZGVwICQoZGVwZmlsZSkgJEAgJyQobWFrZS1jbWQpJyA+
ICQoZG90LXRhcmdldCkuY21kO1wNCiAgICArCXJtIC1mICQoZGVwZmlsZSkNCiAgICArDQogICAg
K2lmX2NoYW5nZWRfZGVwID0gJChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2sp
KSwkKGNtZF9hbmRfZml4ZGVwKSxAOikNCiAgICArDQogICAgK2RlZmluZSBtdWx0aV9kZXBlbmQN
CiAgICArJChmb3JlYWNoIG0sICQobm90ZGlyICQxKSwgXA0KICAgICsgICAgJChldmFsICQob2Jq
KS8kbTogXA0KICAgICsgICAgJChhZGRwcmVmaXggJChvYmopLywgJChmb3JlYWNoIHMsICQzLCAk
KCQobTolJChzdHJpcCAkMik9JSQocykpKSkpKSkNCiAgICArZW5kZWYNCiAgICArDQogICAgKyMj
Iw0KICAgICsjIGZpbGVjaGsgaXMgdXNlZCB0byBjaGVjayBpZiB0aGUgY29udGVudCBvZiBhIGdl
bmVyYXRlZCBmaWxlIGlzIHVwZGF0ZWQuDQogICAgKyMgU2FtcGxlIHVzYWdlOg0KICAgICsjDQog
ICAgKyMgZmlsZWNoa19zYW1wbGUgPSBlY2hvICQoS0VSTkVMUkVMRUFTRSkNCiAgICArIyB2ZXJz
aW9uLmg6IEZPUkNFDQogICAgKyMgICAkKGNhbGwgZmlsZWNoayxzYW1wbGUpDQogICAgKyMNCiAg
ICArIyBUaGUgcnVsZSBkZWZpbmVkIHNoYWxsIHdyaXRlIHRvIHN0ZG91dCB0aGUgY29udGVudCBv
ZiB0aGUgbmV3IGZpbGUuDQogICAgKyMgVGhlIGV4aXN0aW5nIGZpbGUgd2lsbCBiZSBjb21wYXJl
ZCB3aXRoIHRoZSBuZXcgb25lLg0KICAgICsjIC0gSWYgbm8gZmlsZSBleGlzdCBpdCBpcyBjcmVh
dGVkDQogICAgKyMgLSBJZiB0aGUgY29udGVudCBkaWZmZXIgdGhlIG5ldyBmaWxlIGlzIHVzZWQN
CiAgICArIyAtIElmIHRoZXkgYXJlIGVxdWFsIG5vIGNoYW5nZSwgYW5kIG5vIHRpbWVzdGFtcCB1
cGRhdGUNCiAgICArIyAtIHN0ZGluIGlzIHBpcGVkIGluIGZyb20gdGhlIGZpcnN0IHByZXJlcXVp
c2l0ZSAoJDwpIHNvIG9uZSBoYXMNCiAgICArIyAgIHRvIHNwZWNpZnkgYSB2YWxpZCBmaWxlIGFz
IGZpcnN0IHByZXJlcXVpc2l0ZSAob2Z0ZW4gdGhlIGtidWlsZCBmaWxlKQ0KICAgICtkZWZpbmUg
ZmlsZWNoaw0KICAgICsJJChRKXNldCAtZTsgICAgICAgICAgICAgXA0KICAgICsJbWtkaXIgLXAg
JChkaXIgJEApOyAgICAgICAgIFwNCiAgICArCXsgJChmaWxlY2hrXyQoMSkpOyB9ID4gJEAudG1w
OyAgICAgIFwNCiAgICArCWlmIFsgLXIgJEAgXSAmJiBjbXAgLXMgJEAgJEAudG1wOyB0aGVuICBc
DQogICAgKwkgICAgcm0gLWYgJEAudG1wOyAgICAgICAgICAgXA0KICAgICsJZWxzZSAgICAgICAg
ICAgICAgICAgICAgXA0KICAgICsJICAgICQoa2VjaG8pICcgIFVQRCAgICAgJEAnOyAgICBcDQog
ICAgKwkgICAgbXYgLWYgJEAudG1wICRAOyAgICAgICAgXA0KICAgICsJZmkNCiAgICArZW5kZWYN
CiAgICArDQogICAgKyMgRXhlY3V0ZSBjb21tYW5kIGlmIGNvbW1hbmQgaGFzIGNoYW5nZWQgb3Ig
cHJlcmVxdWlzaXRlKHMpIGFyZSB1cGRhdGVkLg0KICAgICtpZl9jaGFuZ2VkID0gJChpZiAkKHN0
cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwJCVwNCiAgICArCSQoY21kKTtcDQogICAg
KwlwcmludGYgJyVzXG4nICdjbWRfJEAgOj0gJChtYWtlLWNtZCknID4gJChkb3QtdGFyZ2V0KS5j
bWQsIEA6KQ0KICAgICsNCiAgICArIyBMRVgNCiAgICArIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAg
ICArcXVpZXRfY21kX2ZsZXggPSBMRVggJEANCiAgICArY21kX2ZsZXggPSAkKExFWCkgLW8kQCAt
TCAkPA0KICAgICsNCiAgICArJChvYmopLyUubGV4LmM6ICQoc3JjKS8lLmwgRk9SQ0UNCiAgICAr
CSQoY2FsbCBpZl9jaGFuZ2VkLGZsZXgpDQogICAgKw0KICAgICsjIFlBQ0MNCiAgICArIyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0NCiAgICArcXVpZXRfY21kX2Jpc29uID0gWUFDQyAgICAkQA0KICAgICtj
bWRfYmlzb24gPSAkKFlBQ0MpIC1vJEAgLXQgLWwgJDwNCiAgICArDQogICAgKyQob2JqKS8lLnRh
Yi5jOiAkKHNyYykvJS55IEZPUkNFDQogICAgKwkkKGNhbGwgaWZfY2hhbmdlZCxiaXNvbikNCiAg
ICArDQogICAgK3F1aWV0X2NtZF9iaXNvbl9oID0gWUFDQyAgICAkQA0KICAgICtjbWRfYmlzb25f
aCA9ICQoWUFDQykgLW8vZGV2L251bGwgLS1kZWZpbmVzPSRAIC10IC1sICQ8DQogICAgKw0KICAg
ICskKG9iaikvJS50YWIuaDogJChzcmMpLyUueSBGT1JDRQ0KICAgICsJJChjYWxsIGlmX2NoYW5n
ZWQsYmlzb25faCkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVz
LzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXRjaGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsDQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4zNWM3OWY4DQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMy1pbmNs
dWRlLW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbA0KICAgIEBAIC0wLDAgKzEsMTAyIEBADQog
ICAgK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICtpbmRleCA0MWM1Y2UxLi4wZmRiZTlhIDEw
MDY0NA0KICAgICstLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgKysr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICArQEAgLTQsNiArNCw3IEBA
IHRvcF9idWlsZGRpcj0uLi8uLi8NCiAgICArIHNyY3RyZWUgOj0gLg0KICAgICsgb2JqID89IC4N
CiAgICArIA0KICAgICsraW5jbHVkZSBNYWtlZmlsZS5ydWxlcw0KICAgICsgaW5jbHVkZSBNYWtl
ZmlsZQ0KICAgICsgI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oDQogICAg
KyAtaW5jbHVkZSAkKG9iaikvLmRlcGVuZA0KICAgICtkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9NYWtlZmlsZS5ydWxlcyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUucnVs
ZXMNCiAgICArbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICAraW5kZXggMDAwMDAwMC4uNzhhOWM4
MQ0KICAgICstLS0gL2Rldi9udWxsDQogICAgKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFr
ZWZpbGUucnVsZXMNCiAgICArQEAgLTAsMCArMSw4NCBAQA0KICAgICsra2VjaG8gOj0gZWNobw0K
ICAgICsrY29tbWEgOj0gLA0KICAgICsrDQogICAgKysNCiAgICArK2RvdC10YXJnZXQgPSAkKGRp
ciAkQCkuJChub3RkaXIgJEApDQogICAgKysNCiAgICArK2FueS1wcmVyZXEgPSAkKGZpbHRlci1v
dXQgJChQSE9OWSksJD8pICQoZmlsdGVyLW91dCAkKFBIT05ZKSAkKHdpbGRjYXJkICReKSwkXikN
CiAgICArKw0KICAgICsrYXJnLWNoZWNrID0gJChpZiAkKHN0cmlwICQoY21kXyRAKSksLDEpDQog
ICAgKysNCiAgICArK21ha2UtY21kID0gJChjYWxsIGVzY3NxLCQoc3Vic3QgJChwb3VuZCksJCQo
cG91bmQpLCQoc3Vic3QgJCQsJCQkJCwkKGNtZF8kKDEpKSkpKQ0KICAgICsrDQogICAgKysjIHBy
aW50aW5nIGNvbW1hbmRzDQogICAgKytjbWQgPSBAc2V0IC1lOyAkKGVjaG8tY21kKSAkKGNtZF8k
KDEpKQ0KICAgICsrDQogICAgKytkZXBmaWxlID0gJChzdWJzdCAkKGNvbW1hKSxfLCQoZG90LXRh
cmdldCkuZCkNCiAgICArK2RlcGZsYWdzID0gLVdwJChjb21tYSktTUQkKGNvbW1hKSQoY2FsbCBk
b3QtdGFyZ2V0KQ0KICAgICsrDQogICAgKytjbWRfYW5kX2ZpeGRlcCA9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsrCSQoY21kKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsr
CSQob2JqKS9maXhkZXAgJChkZXBmaWxlKSAkQCAnJChtYWtlLWNtZCknID4gJChkb3QtdGFyZ2V0
KS5jbWQ7XA0KICAgICsrCXJtIC1mICQoZGVwZmlsZSkNCiAgICArKw0KICAgICsraWZfY2hhbmdl
ZF9kZXAgPSAkKGlmICQoc3RyaXAgJChhbnktcHJlcmVxKSAkKGFyZy1jaGVjaykpLCQoY21kX2Fu
ZF9maXhkZXApLEA6KQ0KICAgICsrDQogICAgKytkZWZpbmUgbXVsdGlfZGVwZW5kDQogICAgKysk
KGZvcmVhY2ggbSwgJChub3RkaXIgJDEpLCBcDQogICAgKysgICAgJChldmFsICQob2JqKS8kbTog
XA0KICAgICsrICAgICQoYWRkcHJlZml4ICQob2JqKS8sICQoZm9yZWFjaCBzLCAkMywgJCgkKG06
JSQoc3RyaXAgJDIpPSUkKHMpKSkpKSkpDQogICAgKytlbmRlZg0KICAgICsrDQogICAgKysjIyMN
CiAgICArKyMgZmlsZWNoayBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBjb250ZW50IG9mIGEgZ2Vu
ZXJhdGVkIGZpbGUgaXMgdXBkYXRlZC4NCiAgICArKyMgU2FtcGxlIHVzYWdlOg0KICAgICsrIw0K
ICAgICsrIyBmaWxlY2hrX3NhbXBsZSA9IGVjaG8gJChLRVJORUxSRUxFQVNFKQ0KICAgICsrIyB2
ZXJzaW9uLmg6IEZPUkNFDQogICAgKysjICAgJChjYWxsIGZpbGVjaGssc2FtcGxlKQ0KICAgICsr
Iw0KICAgICsrIyBUaGUgcnVsZSBkZWZpbmVkIHNoYWxsIHdyaXRlIHRvIHN0ZG91dCB0aGUgY29u
dGVudCBvZiB0aGUgbmV3IGZpbGUuDQogICAgKysjIFRoZSBleGlzdGluZyBmaWxlIHdpbGwgYmUg
Y29tcGFyZWQgd2l0aCB0aGUgbmV3IG9uZS4NCiAgICArKyMgLSBJZiBubyBmaWxlIGV4aXN0IGl0
IGlzIGNyZWF0ZWQNCiAgICArKyMgLSBJZiB0aGUgY29udGVudCBkaWZmZXIgdGhlIG5ldyBmaWxl
IGlzIHVzZWQNCiAgICArKyMgLSBJZiB0aGV5IGFyZSBlcXVhbCBubyBjaGFuZ2UsIGFuZCBubyB0
aW1lc3RhbXAgdXBkYXRlDQogICAgKysjIC0gc3RkaW4gaXMgcGlwZWQgaW4gZnJvbSB0aGUgZmly
c3QgcHJlcmVxdWlzaXRlICgkPCkgc28gb25lIGhhcw0KICAgICsrIyAgIHRvIHNwZWNpZnkgYSB2
YWxpZCBmaWxlIGFzIGZpcnN0IHByZXJlcXVpc2l0ZSAob2Z0ZW4gdGhlIGtidWlsZCBmaWxlKQ0K
ICAgICsrZGVmaW5lIGZpbGVjaGsNCiAgICArKwkkKFEpc2V0IC1lOyAgICAgICAgICAgICBcDQog
ICAgKysJbWtkaXIgLXAgJChkaXIgJEApOyAgICAgICAgIFwNCiAgICArKwl7ICQoZmlsZWNoa18k
KDEpKTsgfSA+ICRALnRtcDsgICAgICBcDQogICAgKysJaWYgWyAtciAkQCBdICYmIGNtcCAtcyAk
QCAkQC50bXA7IHRoZW4gIFwNCiAgICArKwkgICAgcm0gLWYgJEAudG1wOyAgICAgICAgICAgXA0K
ICAgICsrCWVsc2UgICAgICAgICAgICAgICAgICAgIFwNCiAgICArKwkgICAgJChrZWNobykgJyAg
VVBEICAgICAkQCc7ICAgIFwNCiAgICArKwkgICAgbXYgLWYgJEAudG1wICRAOyAgICAgICAgXA0K
ICAgICsrCWZpDQogICAgKytlbmRlZg0KICAgICsrDQogICAgKysjIEV4ZWN1dGUgY29tbWFuZCBp
ZiBjb21tYW5kIGhhcyBjaGFuZ2VkIG9yIHByZXJlcXVpc2l0ZShzKSBhcmUgdXBkYXRlZC4NCiAg
ICArK2lmX2NoYW5nZWQgPSAkKGlmICQoc3RyaXAgJChhbnktcHJlcmVxKSAkKGFyZy1jaGVjaykp
LAkJXA0KICAgICsrCSQoY21kKTtcDQogICAgKysJcHJpbnRmICclc1xuJyAnY21kXyRAIDo9ICQo
bWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kLCBAOikNCiAgICArKw0KICAgICsrIyBMRVgN
CiAgICArKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgKytxdWlldF9jbWRfZmxleCA9IExFWCAk
QA0KICAgICsrY21kX2ZsZXggPSAkKExFWCkgLW8kQCAtTCAkPA0KICAgICsrDQogICAgKyskKG9i
aikvJS5sZXguYzogJChzcmMpLyUubCBGT1JDRQ0KICAgICsrCSQoY2FsbCBpZl9jaGFuZ2VkLGZs
ZXgpDQogICAgKysNCiAgICArKyMgWUFDQw0KICAgICsrIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAg
ICArK3F1aWV0X2NtZF9iaXNvbiA9IFlBQ0MgICAgJEANCiAgICArK2NtZF9iaXNvbiA9ICQoWUFD
QykgLW8kQCAtdCAtbCAkPA0KICAgICsrDQogICAgKyskKG9iaikvJS50YWIuYzogJChzcmMpLyUu
eSBGT1JDRQ0KICAgICsrCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uKQ0KICAgICsrDQogICAgKytx
dWlldF9jbWRfYmlzb25faCA9IFlBQ0MgICAgJEANCiAgICArK2NtZF9iaXNvbl9oID0gJChZQUND
KSAtby9kZXYvbnVsbCAtLWRlZmluZXM9JEAgLXQgLWwgJDwNCiAgICArKw0KICAgICsrJChvYmop
LyUudGFiLmg6ICQoc3JjKS8lLnkgRk9SQ0UNCiAgICArKwkkKGNhbGwgaWZfY2hhbmdlZCxiaXNv
bl9oKQ0KICAgIC0tIA0KICAgIDIuNy40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:36:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:36:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxXu-0007gw-Nq; Thu, 19 Sep 2019 14:36:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxXu-0007gk-B4
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:36:34 +0000
X-Inumbo-ID: dfaa5f4c-daea-11e9-9660-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dfaa5f4c-daea-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:36:32 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id DD3331056D8;
 Thu, 19 Sep 2019 16:36:31 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2D4I1N1sGnvh; Thu, 19 Sep 2019 16:36:31 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id B97A1105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:36:31 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:36:31 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:36:31
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 06/23] kconfig: Removing the
 generic rule
Thread-Index: AQHVbsr9fUKn2xfnyky7Xuid/XQDtKczEaoA
Date: Thu, 19 Sep 2019 14:36:31 +0000
Message-ID: <92F47752-8A74-48D7-8CB0-46F7DB3FC243@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-7-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-7-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <580D2CD82717AC4F8E5300AEB04AB1A4@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 06/23] kconfig: Removing the
 generic rule
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE2LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFRoZSBnZW5lcmljIHJ1
bGUgdG8gYnVpbGQgYyBhbmQgY2MgYXJlIG5vIGxvbmdlciBuZWVkZWQgdG8gYnVpbGQgdGhlDQog
ICAga2NvbmZpZyB0b29scy4gSXQgdXNlcyBmaXhkZXAgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjb25m
aWcgdG9vbCBoYXMgdG8gYmUNCiAgICBidWlsdCBhbmQgZXhlY3V0ZSB0aGUgYnVpbGQgY29tbWFu
ZCBhcyBuZWNlc3NhcnkuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5h
bSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+DQogICAgLS0tDQogICAgIHN1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUuYnIgICAgICAgICAgICAgICAgICAgIHwgMTIgLS0tLS0tLS0tLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZSB8
IDI2ICsrKysrKysrKysrKysrKysrKysrKysNCiAgICAgMiBmaWxlcyBjaGFuZ2VkLCAyNiBpbnNl
cnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlDQogICAgDQogICAg
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlLmJyDQogICAgaW5kZXggMGZkYmU5YS4uYzExZjI5NyAxMDA2NDQN
CiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgIEBAIC0zMSwxOCArMzEsNiBAQCAkKGhv
c3QtY211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgICAkKGhvc3Qt
Y3h4bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGli
KQ0KICAgICAJJChIT1NUQ1hYKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChI
T1NUQ1hYRkxBR1NfJEApICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYp
LWN4eG9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQA0KICAgICANCiAg
ICAtJChvYmopLyUubzogJS5jDQogICAgLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAk
KEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICAtDQogICAg
LSQob2JqKS8lLm86ICQob2JqKS8lLmMNCiAgICAtCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAkPCAtbyAkQA0KICAgIC0N
CiAgICAtJChvYmopLyUubzogJS5jYw0KICAgIC0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFH
UykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICAt
DQogICAgLSQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZA0KICAgIC0JJChRKWNhdCAkPCA+ICRA
DQogICAgLQ0KICAgICBjbGVhbjoNCiAgICAgCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikv
LCQoY2xlYW4tZmlsZXMpKQ0KICAgICBkaXN0Y2xlYW46IGNsZWFuDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUNCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjNkZTBjYjENCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1n
ZW5lcmljLXJ1bGUNCiAgICBAQCAtMCwwICsxLDI2IEBADQogICAgK2RpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5icg0KICAgICtpbmRleCAwZmRiZTlhLi5jMTFmMjk3IDEwMDY0NA0KICAgICstLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgKysrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvTWFrZWZpbGUuYnINCiAgICArQEAgLTMxLDE4ICszMSw2IEBAICQoaG9zdC1jbXVsdGkpOiAl
OiAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpDQogICAgKyAkKGhvc3QtY3h4bXVsdGkpOiAl
OiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgICsgCSQo
SE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdT
XyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkg
JChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAgICArIA0KICAgICstJChvYmop
LyUubzogJS5jDQogICAgKy0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZM
QUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAgKy0NCiAgICArLSQob2Jq
KS8lLm86ICQob2JqKS8lLmMNCiAgICArLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAk
KEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICArLQ0KICAg
ICstJChvYmopLyUubzogJS5jYw0KICAgICstCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1Mp
ICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAgKy0N
CiAgICArLSQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZA0KICAgICstCSQoUSljYXQgJDwgPiAk
QA0KICAgICstDQogICAgKyBjbGVhbjoNCiAgICArIAkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChv
YmopLywkKGNsZWFuLWZpbGVzKSkNCiAgICArIGRpc3RjbGVhbjogY2xlYW4NCiAgICArZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxl
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUNCiAg
ICArbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICAraW5kZXggMDAwMDAwMC4uZTY5ZGUyOQ0KICAg
IC0tIA0KICAgIDIuNy40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQog
ICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:36:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:36:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxYD-0007iu-Q7; Thu, 19 Sep 2019 14:36:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxYC-0007io-Ge
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:36:52 +0000
X-Inumbo-ID: ea70cb32-daea-11e9-9660-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ea70cb32-daea-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:36:50 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id EE031F2025;
 Thu, 19 Sep 2019 16:36:49 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id AuH8vP8YWbja; Thu, 19 Sep 2019 16:36:49 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id BCFF2F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:36:47 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:36:47 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:36:47
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 07/23] kconfig: Import fixdep
 from Linux kernel
Thread-Index: AQHVbssBOfCSwG5SR02AXaWlaKz9MqczEb0A
Date: Thu, 19 Sep 2019 14:36:47 +0000
Message-ID: <69B42730-F2C1-4D26-BFA7-FEE44DC1E957@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-8-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-8-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <97CA310D07EA0A4BBD5EEB07933C685D@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 07/23] kconfig: Import fixdep
 from Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEltcG9ydCBmaXhkZXAg
ZnJvbSB0aGUgbGludXgga2VybmVsLg0KICAgIFRhZyB2NS4yDQogICAgDQogICAgU2lnbmVkLW9m
Zi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+DQogICAg
LS0tDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgfCAgIDcgKw0KICAgICBz
dXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jICAgIHwgMzc5ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysNCiAgICAgMiBmaWxlcyBjaGFuZ2VkLCAzODYgaW5zZXJ0aW9u
cygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAu
Yw0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJy
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgIGluZGV4IGMxMWYyOTcuLjU4
ZTZlNzUgMTAwNjQ0DQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICBAQCAtMTksNiAr
MTksNyBAQCBob3N0LWN4eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwNCiAg
ICAgICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMp
LCkpKQ0KICAgICBob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9y
ZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQ0KICAgICBob3N0LWN4eG9ianMg
Oj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyks
JCgkKG0pLWN4eG9ianMpKSkpDQogICAgK2ZpeGRlcC1vYmpzIDo9ICQob2JqKS9maXhkZXAubw0K
ICAgICANCiAgICAgSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIg0K
ICAgICANCiAgICBAQCAtMzEsNiArMzIsMTIgQEAgJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1j
b2JqcykgJChob3N0LWNzaGxpYikNCiAgICAgJChob3N0LWN4eG11bHRpKTogJTogJChob3N0LWN4
eG9ianMpICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikNCiAgICAgCSQoSE9TVENYWCkgJChI
T1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJ
QkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAgICAgDQogICAgKyQob2JqKS9maXhkZXA6ICQoZml4
ZGVwLW9ianMpDQogICAgKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxB
R1MpICQoSE9TVENGTEFHU18kKEBGKSkgJDwgLW8gJEANCiAgICArDQogICAgKyQoZml4ZGVwLW9i
anMpOiAkKHNyYykvZml4ZGVwLmMNCiAgICArCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1Mp
ICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAkPCAtbyAkQA0KICAgICsNCiAg
ICAgY2xlYW46DQogICAgIAkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZp
bGVzKSkNCiAgICAgZGlzdGNsZWFuOiBjbGVhbg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L2ZpeGRlcC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYw0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZmFjYmQ2MA0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jDQogICAgQEAg
LTAsMCArMSwzNzkgQEANCiAgICArLyoNCiAgICArICogIk9wdGltaXplIiBhIGxpc3Qgb2YgZGVw
ZW5kZW5jaWVzIGFzIHNwaXQgb3V0IGJ5IGdjYyAtTUQNCiAgICArICogZm9yIHRoZSBrZXJuZWwg
YnVpbGQNCiAgICArICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgKyAqDQogICAgKyAqIEF1dGhv
ciAgICAgICBLYWkgR2VybWFzY2hld3NraQ0KICAgICsgKiBDb3B5cmlnaHQgICAgMjAwMiBieSBL
YWkgR2VybWFzY2hld3NraSAgPGthaS5nZXJtYXNjaGV3c2tpQGdteC5kZT4NCiAgICArICoNCiAg
ICArICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5n
IHRvIHRoZSB0ZXJtcw0KICAgICsgKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Us
IGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLg0KICAgICsgKg0KICAgICsgKg0KICAg
ICsgKiBJbnRyb2R1Y3Rpb246DQogICAgKyAqDQogICAgKyAqIGdjYyBwcm9kdWNlcyBhIHZlcnkg
bmljZSBhbmQgY29ycmVjdCBsaXN0IG9mIGRlcGVuZGVuY2llcyB3aGljaA0KICAgICsgKiB0ZWxs
cyBtYWtlIHdoZW4gdG8gcmVtYWtlIGEgZmlsZS4NCiAgICArICoNCiAgICArICogVG8gdXNlIHRo
aXMgbGlzdCBhcy1pcyBob3dldmVyIGhhcyB0aGUgZHJhd2JhY2sgdGhhdCB2aXJ0dWFsbHkNCiAg
ICArICogZXZlcnkgZmlsZSBpbiB0aGUga2VybmVsIGluY2x1ZGVzIGF1dG9jb25mLmguDQogICAg
KyAqDQogICAgKyAqIElmIHRoZSB1c2VyIHJlLXJ1bnMgbWFrZSAqY29uZmlnLCBhdXRvY29uZi5o
IHdpbGwgYmUNCiAgICArICogcmVnZW5lcmF0ZWQuICBtYWtlIG5vdGljZXMgdGhhdCBhbmQgd2ls
bCByZWJ1aWxkIGV2ZXJ5IGZpbGUgd2hpY2gNCiAgICArICogaW5jbHVkZXMgYXV0b2NvbmYuaCwg
aS5lLiBiYXNpY2FsbHkgYWxsIGZpbGVzLiBUaGlzIGlzIGV4dHJlbWVseQ0KICAgICsgKiBhbm5v
eWluZyBpZiB0aGUgdXNlciBqdXN0IGNoYW5nZWQgQ09ORklHX0hJU19EUklWRVIgZnJvbSBuIHRv
IG0uDQogICAgKyAqDQogICAgKyAqIFNvIHdlIHBsYXkgdGhlIHNhbWUgdHJpY2sgdGhhdCAibWtk
ZXAiIHBsYXllZCBiZWZvcmUuIFdlIHJlcGxhY2UNCiAgICArICogdGhlIGRlcGVuZGVuY3kgb24g
YXV0b2NvbmYuaCBieSBhIGRlcGVuZGVuY3kgb24gZXZlcnkgY29uZmlnDQogICAgKyAqIG9wdGlv
biB3aGljaCBpcyBtZW50aW9uZWQgaW4gYW55IG9mIHRoZSBsaXN0ZWQgcHJlcmVxdWlzaXRlcy4N
CiAgICArICoNCiAgICArICoga2NvbmZpZyBwb3B1bGF0ZXMgYSB0cmVlIGluIGluY2x1ZGUvY29u
ZmlnLyB3aXRoIGFuIGVtcHR5IGZpbGUNCiAgICArICogZm9yIGVhY2ggY29uZmlnIHN5bWJvbCBh
bmQgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyB1cGRhdGVkDQogICAgKyAqIHRoZSBmaWxlcyBy
ZXByZXNlbnRpbmcgY2hhbmdlZCBjb25maWcgb3B0aW9ucyBhcmUgdG91Y2hlZA0KICAgICsgKiB3
aGljaCB0aGVuIGxldCBtYWtlIHBpY2sgdXAgdGhlIGNoYW5nZXMgYW5kIHRoZSBmaWxlcyB0aGF0
IHVzZQ0KICAgICsgKiB0aGUgY29uZmlnIHN5bWJvbHMgYXJlIHJlYnVpbHQuDQogICAgKyAqDQog
ICAgKyAqIFNvIGlmIHRoZSB1c2VyIGNoYW5nZXMgaGlzIENPTkZJR19ISVNfRFJJVkVSIG9wdGlv
biwgb25seSB0aGUgb2JqZWN0cw0KICAgICsgKiB3aGljaCBkZXBlbmQgb24gImluY2x1ZGUvY29u
ZmlnL2hpcy9kcml2ZXIuaCIgd2lsbCBiZSByZWJ1aWx0LA0KICAgICsgKiBzbyBtb3N0IGxpa2Vs
eSBvbmx5IGhpcyBkcml2ZXIgOy0pDQogICAgKyAqDQogICAgKyAqIFRoZSBpZGVhIGFib3ZlIGRh
dGVzLCBieSB0aGUgd2F5LCBiYWNrIHRvIE1pY2hhZWwgRSBDaGFzdGFpbiwgQUZBSUsuDQogICAg
KyAqDQogICAgKyAqIFNvIHRvIGdldCBkZXBlbmRlbmNpZXMgcmlnaHQsIHRoZXJlIGFyZSB0d28g
aXNzdWVzOg0KICAgICsgKiBvIGlmIGFueSBvZiB0aGUgZmlsZXMgdGhlIGNvbXBpbGVyIHJlYWQg
Y2hhbmdlZCwgd2UgbmVlZCB0byByZWJ1aWxkDQogICAgKyAqIG8gaWYgdGhlIGNvbW1hbmQgbGlu
ZSBnaXZlbiB0byB0aGUgY29tcGlsZSB0aGUgZmlsZSBjaGFuZ2VkLCB3ZQ0KICAgICsgKiAgIGJl
dHRlciByZWJ1aWxkIGFzIHdlbGwuDQogICAgKyAqDQogICAgKyAqIFRoZSBmb3JtZXIgaXMgaGFu
ZGxlZCBieSB1c2luZyB0aGUgLU1EIG91dHB1dCwgdGhlIGxhdGVyIGJ5IHNhdmluZw0KICAgICsg
KiB0aGUgY29tbWFuZCBsaW5lIHVzZWQgdG8gY29tcGlsZSB0aGUgb2xkIG9iamVjdCBhbmQgY29t
cGFyaW5nIGl0DQogICAgKyAqIHRvIHRoZSBvbmUgd2Ugd291bGQgbm93IHVzZS4NCiAgICArICoN
CiAgICArICogQWdhaW4sIGFsc28gdGhpcyBpZGVhIGlzIHByZXR0eSBvbGQgYW5kIGhhcyBiZWVu
IGRpc2N1c3NlZCBvbg0KICAgICsgKiBrYnVpbGQtZGV2ZWwgYSBsb25nIHRpbWUgYWdvLiBJIGRv
bid0IGhhdmUgYSBzZW5zaWJseSB3b3JraW5nDQogICAgKyAqIGludGVybmV0IGNvbm5lY3Rpb24g
cmlnaHQgbm93LCBzbyBJIHJhdGhlciBkb24ndCBtZW50aW9uIG5hbWVzDQogICAgKyAqIHdpdGhv
dXQgZG91YmxlIGNoZWNraW5nLg0KICAgICsgKg0KICAgICsgKiBUaGlzIGNvZGUgaGVyZSBoYXMg
YmVlbiBiYXNlZCBwYXJ0aWFsbHkgYmFzZWQgb24gbWtkZXAuYywgd2hpY2gNCiAgICArICogc2F5
cyB0aGUgZm9sbG93aW5nIGFib3V0IGl0cyBoaXN0b3J5Og0KICAgICsgKg0KICAgICsgKiAgIENv
cHlyaWdodCBhYmFuZG9uZWQsIE1pY2hhZWwgQ2hhc3RhaW4sIDxtYWlsdG86bWVjQHNob3V0Lm5l
dD4uDQogICAgKyAqICAgVGhpcyBpcyBhIEMgdmVyc2lvbiBvZiBzeW5jZGVwLnBsIGJ5IFdlcm5l
ciBBbG1lc2Jlcmdlci4NCiAgICArICoNCiAgICArICoNCiAgICArICogSXQgaXMgaW52b2tlZCBh
cw0KICAgICsgKg0KICAgICsgKiAgIGZpeGRlcCA8ZGVwZmlsZT4gPHRhcmdldD4gPGNtZGxpbmU+
DQogICAgKyAqDQogICAgKyAqIGFuZCB3aWxsIHJlYWQgdGhlIGRlcGVuZGVuY3kgZmlsZSA8ZGVw
ZmlsZT4NCiAgICArICoNCiAgICArICogVGhlIHRyYW5zZm9ybWVkIGRlcGVuZGVuY3kgc25pcHBl
ZCBpcyB3cml0dGVuIHRvIHN0ZG91dC4NCiAgICArICoNCiAgICArICogSXQgZmlyc3QgZ2VuZXJh
dGVzIGEgbGluZQ0KICAgICsgKg0KICAgICsgKiAgIGNtZF88dGFyZ2V0PiA9IDxjbWRsaW5lPg0K
ICAgICsgKg0KICAgICsgKiBhbmQgdGhlbiBiYXNpY2FsbHkgY29waWVzIHRoZSAuPHRhcmdldD4u
ZCBmaWxlIHRvIHN0ZG91dCwgaW4gdGhlDQogICAgKyAqIHByb2Nlc3MgZmlsdGVyaW5nIG91dCB0
aGUgZGVwZW5kZW5jeSBvbiBhdXRvY29uZi5oIGFuZCBhZGRpbmcNCiAgICArICogZGVwZW5kZW5j
aWVzIG9uIGluY2x1ZGUvY29uZmlnL215L29wdGlvbi5oIGZvciBldmVyeQ0KICAgICsgKiBDT05G
SUdfTVlfT1BUSU9OIGVuY291bnRlcmVkIGluIGFueSBvZiB0aGUgcHJlcmVxdWlzaXRlcy4NCiAg
ICArICoNCiAgICArICogSXQgd2lsbCBhbHNvIGZpbHRlciBvdXQgYWxsIHRoZSBkZXBlbmRlbmNp
ZXMgb24gKi52ZXIuIFdlIG5lZWQNCiAgICArICogdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGdlbmVy
YXRlZCB2ZXJzaW9uIGNoZWNrc3VtIGFyZSBnbG9iYWxseSB1cA0KICAgICsgKiB0byBkYXRlIGJl
Zm9yZSBldmVuIHN0YXJ0aW5nIHRoZSByZWN1cnNpdmUgYnVpbGQsIHNvIGl0J3MgdG9vIGxhdGUN
CiAgICArICogYXQgdGhpcyBwb2ludCBhbnl3YXkuDQogICAgKyAqDQogICAgKyAqIFdlIGRvbid0
IGV2ZW4gdHJ5IHRvIHJlYWxseSBwYXJzZSB0aGUgaGVhZGVyIGZpbGVzLCBidXQNCiAgICArICog
bWVyZWx5IGdyZXAsIGkuZS4gaWYgQ09ORklHX0ZPTyBpcyBtZW50aW9uZWQgaW4gYSBjb21tZW50
LCBpdCB3aWxsDQogICAgKyAqIGJlIHBpY2tlZCB1cCBhcyB3ZWxsLiBJdCdzIG5vdCBhIHByb2Js
ZW0gd2l0aCByZXNwZWN0IHRvDQogICAgKyAqIGNvcnJlY3RuZXNzLCBzaW5jZSB0aGF0IGNhbiBv
bmx5IGdpdmUgdG9vIG1hbnkgZGVwZW5kZW5jaWVzLCB0aHVzDQogICAgKyAqIHdlIGNhbm5vdCBt
aXNzIGEgcmVidWlsZC4gU2luY2UgcGVvcGxlIHRlbmQgdG8gbm90IG1lbnRpb24gdG90YWxseQ0K
ICAgICsgKiB1bnJlbGF0ZWQgQ09ORklHXyBvcHRpb25zIGFsbCBvdmVyIHRoZSBwbGFjZSwgaXQn
cyBub3QgYW4NCiAgICArICogZWZmaWNpZW5jeSBwcm9ibGVtIGVpdGhlci4NCiAgICArICoNCiAg
ICArICogKE5vdGU6IGl0J2QgYmUgZWFzeSB0byBwb3J0IG92ZXIgdGhlIGNvbXBsZXRlIG1rZGVw
IHN0YXRlIG1hY2hpbmUsDQogICAgKyAqICBidXQgSSBkb24ndCB0aGluayB0aGUgYWRkZWQgY29t
cGxleGl0eSBpcyB3b3J0aCBpdCkNCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+DQogICAgKyNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KICAgICsjaW5jbHVkZSA8dW5p
c3RkLmg+DQogICAgKyNpbmNsdWRlIDxmY250bC5oPg0KICAgICsjaW5jbHVkZSA8c3RyaW5nLmg+
DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAg
KyNpbmNsdWRlIDxjdHlwZS5oPg0KICAgICsNCiAgICArc3RhdGljIHZvaWQgdXNhZ2Uodm9pZCkN
CiAgICArew0KICAgICsJZnByaW50ZihzdGRlcnIsICJVc2FnZTogZml4ZGVwIDxkZXBmaWxlPiA8
dGFyZ2V0PiA8Y21kbGluZT5cbiIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgICsNCiAg
ICArLyoNCiAgICArICogUHJpbnQgb3V0IGEgZGVwZW5kZW5jeSBwYXRoIGZyb20gYSBzeW1ib2wg
bmFtZQ0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgcHJpbnRfZGVwKGNvbnN0IGNoYXIgKm0s
IGludCBzbGVuLCBjb25zdCBjaGFyICpkaXIpDQogICAgK3sNCiAgICArCWludCBjLCBwcmV2X2Mg
PSAnLycsIGk7DQogICAgKw0KICAgICsJcHJpbnRmKCIgICAgJCh3aWxkY2FyZCAlcy8iLCBkaXIp
Ow0KICAgICsJZm9yIChpID0gMDsgaSA8IHNsZW47IGkrKykgew0KICAgICsJCWMgPSBtW2ldOw0K
ICAgICsJCWlmIChjID09ICdfJykNCiAgICArCQkJYyA9ICcvJzsNCiAgICArCQllbHNlDQogICAg
KwkJCWMgPSB0b2xvd2VyKGMpOw0KICAgICsJCWlmIChjICE9ICcvJyB8fCBwcmV2X2MgIT0gJy8n
KQ0KICAgICsJCQlwdXRjaGFyKGMpOw0KICAgICsJCXByZXZfYyA9IGM7DQogICAgKwl9DQogICAg
KwlwcmludGYoIi5oKSBcXFxuIik7DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBpdGVtIHsN
CiAgICArCXN0cnVjdCBpdGVtCSpuZXh0Ow0KICAgICsJdW5zaWduZWQgaW50CWxlbjsNCiAgICAr
CXVuc2lnbmVkIGludAloYXNoOw0KICAgICsJY2hhcgkJbmFtZVswXTsNCiAgICArfTsNCiAgICAr
DQogICAgKyNkZWZpbmUgSEFTSFNaIDI1Ng0KICAgICtzdGF0aWMgc3RydWN0IGl0ZW0gKmhhc2h0
YWJbSEFTSFNaXTsNCiAgICArDQogICAgK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3RyaGFzaChjb25z
dCBjaGFyICpzdHIsIHVuc2lnbmVkIGludCBzeikNCiAgICArew0KICAgICsJLyogZm52MzIgaGFz
aCAqLw0KICAgICsJdW5zaWduZWQgaW50IGksIGhhc2ggPSAyMTY2MTM2MjYxVTsNCiAgICArDQog
ICAgKwlmb3IgKGkgPSAwOyBpIDwgc3o7IGkrKykNCiAgICArCQloYXNoID0gKGhhc2ggXiBzdHJb
aV0pICogMHgwMTAwMDE5MzsNCiAgICArCXJldHVybiBoYXNoOw0KICAgICt9DQogICAgKw0KICAg
ICsvKg0KICAgICsgKiBMb29rdXAgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBzdHJpbmcu
DQogICAgKyAqLw0KICAgICtzdGF0aWMgaW50IGlzX2RlZmluZWRfY29uZmlnKGNvbnN0IGNoYXIg
Km5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGludCBoYXNoKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qg
aXRlbSAqYXV4Ow0KICAgICsNCiAgICArCWZvciAoYXV4ID0gaGFzaHRhYltoYXNoICUgSEFTSFNa
XTsgYXV4OyBhdXggPSBhdXgtPm5leHQpIHsNCiAgICArCQlpZiAoYXV4LT5oYXNoID09IGhhc2gg
JiYgYXV4LT5sZW4gPT0gbGVuICYmDQogICAgKwkJICAgIG1lbWNtcChhdXgtPm5hbWUsIG5hbWUs
IGxlbikgPT0gMCkNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwl9DQogICAgKwlyZXR1cm4gMDsN
CiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogQWRkIGEgbmV3IHZhbHVlIHRvIHRoZSBj
b25maWd1cmF0aW9uIHN0cmluZy4NCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIGRlZmluZV9j
b25maWcoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpDQogICAg
K3sNCiAgICArCXN0cnVjdCBpdGVtICphdXggPSBtYWxsb2Moc2l6ZW9mKCphdXgpICsgbGVuKTsN
CiAgICArDQogICAgKwlpZiAoIWF1eCkgew0KICAgICsJCXBlcnJvcigiZml4ZGVwOm1hbGxvYyIp
Ow0KICAgICsJCWV4aXQoMSk7DQogICAgKwl9DQogICAgKwltZW1jcHkoYXV4LT5uYW1lLCBuYW1l
LCBsZW4pOw0KICAgICsJYXV4LT5sZW4gPSBsZW47DQogICAgKwlhdXgtPmhhc2ggPSBoYXNoOw0K
ICAgICsJYXV4LT5uZXh0ID0gaGFzaHRhYltoYXNoICUgSEFTSFNaXTsNCiAgICArCWhhc2h0YWJb
aGFzaCAlIEhBU0hTWl0gPSBhdXg7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFJl
Y29yZCB0aGUgdXNlIG9mIGEgQ09ORklHXyogd29yZC4NCiAgICArICovDQogICAgK3N0YXRpYyB2
b2lkIHVzZV9jb25maWcoY29uc3QgY2hhciAqbSwgaW50IHNsZW4pDQogICAgK3sNCiAgICArCXVu
c2lnbmVkIGludCBoYXNoID0gc3RyaGFzaChtLCBzbGVuKTsNCiAgICArDQogICAgKwlpZiAoaXNf
ZGVmaW5lZF9jb25maWcobSwgc2xlbiwgaGFzaCkpDQogICAgKwkgICAgcmV0dXJuOw0KICAgICsN
CiAgICArCWRlZmluZV9jb25maWcobSwgc2xlbiwgaGFzaCk7DQogICAgKwlwcmludF9kZXAobSwg
c2xlbiwgImluY2x1ZGUvY29uZmlnIik7DQogICAgK30NCiAgICArDQogICAgKy8qIHRlc3QgaWYg
cyBlbmRzIGluIHN1YiAqLw0KICAgICtzdGF0aWMgaW50IHN0cl9lbmRzX3dpdGgoY29uc3QgY2hh
ciAqcywgaW50IHNsZW4sIGNvbnN0IGNoYXIgKnN1YikNCiAgICArew0KICAgICsJaW50IHN1Ymxl
biA9IHN0cmxlbihzdWIpOw0KICAgICsNCiAgICArCWlmIChzdWJsZW4gPiBzbGVuKQ0KICAgICsJ
CXJldHVybiAwOw0KICAgICsNCiAgICArCXJldHVybiAhbWVtY21wKHMgKyBzbGVuIC0gc3VibGVu
LCBzdWIsIHN1Ymxlbik7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHBhcnNlX2Nv
bmZpZ19maWxlKGNvbnN0IGNoYXIgKnApDQogICAgK3sNCiAgICArCWNvbnN0IGNoYXIgKnEsICpy
Ow0KICAgICsJY29uc3QgY2hhciAqc3RhcnQgPSBwOw0KICAgICsNCiAgICArCXdoaWxlICgocCA9
IHN0cnN0cihwLCAiQ09ORklHXyIpKSkgew0KICAgICsJCWlmIChwID4gc3RhcnQgJiYgKGlzYWxu
dW0ocFstMV0pIHx8IHBbLTFdID09ICdfJykpIHsNCiAgICArCQkJcCArPSA3Ow0KICAgICsJCQlj
b250aW51ZTsNCiAgICArCQl9DQogICAgKwkJcCArPSA3Ow0KICAgICsJCXEgPSBwOw0KICAgICsJ
CXdoaWxlICgqcSAmJiAoaXNhbG51bSgqcSkgfHwgKnEgPT0gJ18nKSkNCiAgICArCQkJcSsrOw0K
ICAgICsJCWlmIChzdHJfZW5kc193aXRoKHAsIHEgLSBwLCAiX01PRFVMRSIpKQ0KICAgICsJCQly
ID0gcSAtIDc7DQogICAgKwkJZWxzZQ0KICAgICsJCQlyID0gcTsNCiAgICArCQlpZiAociA+IHAp
DQogICAgKwkJCXVzZV9jb25maWcocCwgciAtIHApOw0KICAgICsJCXAgPSBxOw0KICAgICsJfQ0K
ICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCAqcmVhZF9maWxlKGNvbnN0IGNoYXIgKmZp
bGVuYW1lKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3RhdCBzdDsNCiAgICArCWludCBmZDsNCiAg
ICArCWNoYXIgKmJ1ZjsNCiAgICArDQogICAgKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZ
KTsNCiAgICArCWlmIChmZCA8IDApIHsNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDog
ZXJyb3Igb3BlbmluZyBmaWxlOiAiKTsNCiAgICArCQlwZXJyb3IoZmlsZW5hbWUpOw0KICAgICsJ
CWV4aXQoMik7DQogICAgKwl9DQogICAgKwlpZiAoZnN0YXQoZmQsICZzdCkgPCAwKSB7DQogICAg
KwkJZnByaW50ZihzdGRlcnIsICJmaXhkZXA6IGVycm9yIGZzdGF0J2luZyBmaWxlOiAiKTsNCiAg
ICArCQlwZXJyb3IoZmlsZW5hbWUpOw0KICAgICsJCWV4aXQoMik7DQogICAgKwl9DQogICAgKwli
dWYgPSBtYWxsb2Moc3Quc3Rfc2l6ZSArIDEpOw0KICAgICsJaWYgKCFidWYpIHsNCiAgICArCQlw
ZXJyb3IoImZpeGRlcDogbWFsbG9jIik7DQogICAgKwkJZXhpdCgyKTsNCiAgICArCX0NCiAgICAr
CWlmIChyZWFkKGZkLCBidWYsIHN0LnN0X3NpemUpICE9IHN0LnN0X3NpemUpIHsNCiAgICArCQlw
ZXJyb3IoImZpeGRlcDogcmVhZCIpOw0KICAgICsJCWV4aXQoMik7DQogICAgKwl9DQogICAgKwli
dWZbc3Quc3Rfc2l6ZV0gPSAnXDAnOw0KICAgICsJY2xvc2UoZmQpOw0KICAgICsNCiAgICArCXJl
dHVybiBidWY7DQogICAgK30NCiAgICArDQogICAgKy8qIElnbm9yZSBjZXJ0YWluIGRlcGVuZGVu
Y2llcyAqLw0KICAgICtzdGF0aWMgaW50IGlzX2lnbm9yZWRfZmlsZShjb25zdCBjaGFyICpzLCBp
bnQgbGVuKQ0KICAgICt7DQogICAgKwlyZXR1cm4gc3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNs
dWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIikgfHwNCiAgICArCSAgICAgICBzdHJfZW5kc193aXRo
KHMsIGxlbiwgImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9rc3ltcy5oIikgfHwNCiAgICArCSAgICAg
ICBzdHJfZW5kc193aXRoKHMsIGxlbiwgIi52ZXIiKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoN
CiAgICArICogSW1wb3J0YW50OiBUaGUgYmVsb3cgZ2VuZXJhdGVkIHNvdXJjZV9mb28ubyBhbmQg
ZGVwc19mb28ubyB2YXJpYWJsZQ0KICAgICsgKiBhc3NpZ25tZW50cyBhcmUgcGFyc2VkIG5vdCBv
bmx5IGJ5IG1ha2UsIGJ1dCBhbHNvIGJ5IHRoZSByYXRoZXIgc2ltcGxlDQogICAgKyAqIHBhcnNl
ciBpbiBzY3JpcHRzL21vZC9zdW12ZXJzaW9uLmMuDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9p
ZCBwYXJzZV9kZXBfZmlsZShjaGFyICptLCBjb25zdCBjaGFyICp0YXJnZXQpDQogICAgK3sNCiAg
ICArCWNoYXIgKnA7DQogICAgKwlpbnQgaXNfbGFzdCwgaXNfdGFyZ2V0Ow0KICAgICsJaW50IHNh
d19hbnlfdGFyZ2V0ID0gMDsNCiAgICArCWludCBpc19maXJzdF9kZXAgPSAwOw0KICAgICsJdm9p
ZCAqYnVmOw0KICAgICsNCiAgICArCXdoaWxlICgxKSB7DQogICAgKwkJLyogU2tpcCBhbnkgIndo
aXRlIHNwYWNlIiAqLw0KICAgICsJCXdoaWxlICgqbSA9PSAnICcgfHwgKm0gPT0gJ1xcJyB8fCAq
bSA9PSAnXG4nKQ0KICAgICsJCQltKys7DQogICAgKw0KICAgICsJCWlmICghKm0pDQogICAgKwkJ
CWJyZWFrOw0KICAgICsNCiAgICArCQkvKiBGaW5kIG5leHQgIndoaXRlIHNwYWNlIiAqLw0KICAg
ICsJCXAgPSBtOw0KICAgICsJCXdoaWxlICgqcCAmJiAqcCAhPSAnICcgJiYgKnAgIT0gJ1xcJyAm
JiAqcCAhPSAnXG4nKQ0KICAgICsJCQlwKys7DQogICAgKwkJaXNfbGFzdCA9ICgqcCA9PSAnXDAn
KTsNCiAgICArCQkvKiBJcyB0aGUgdG9rZW4gd2UgZm91bmQgYSB0YXJnZXQgbmFtZT8gKi8NCiAg
ICArCQlpc190YXJnZXQgPSAoKihwLTEpID09ICc6Jyk7DQogICAgKwkJLyogRG9uJ3Qgd3JpdGUg
YW55IHRhcmdldCBuYW1lcyBpbnRvIHRoZSBkZXBlbmRlbmN5IGZpbGUgKi8NCiAgICArCQlpZiAo
aXNfdGFyZ2V0KSB7DQogICAgKwkJCS8qIFRoZSAvbmV4dC8gZmlsZSBpcyB0aGUgZmlyc3QgZGVw
ZW5kZW5jeSAqLw0KICAgICsJCQlpc19maXJzdF9kZXAgPSAxOw0KICAgICsJCX0gZWxzZSBpZiAo
IWlzX2lnbm9yZWRfZmlsZShtLCBwIC0gbSkpIHsNCiAgICArCQkJKnAgPSAnXDAnOw0KICAgICsN
CiAgICArCQkJLyoNCiAgICArCQkJICogRG8gbm90IGxpc3QgdGhlIHNvdXJjZSBmaWxlIGFzIGRl
cGVuZGVuY3ksIHNvIHRoYXQNCiAgICArCQkJICoga2J1aWxkIGlzIG5vdCBjb25mdXNlZCBpZiBh
IC5jIGZpbGUgaXMgcmV3cml0dGVuDQogICAgKwkJCSAqIGludG8gLlMgb3IgdmljZSB2ZXJzYS4g
U3RvcmluZyBpdCBpbiBzb3VyY2VfKiBpcw0KICAgICsJCQkgKiBuZWVkZWQgZm9yIG1vZHBvc3Qg
dG8gY29tcHV0ZSBzcmN2ZXJzaW9ucy4NCiAgICArCQkJICovDQogICAgKwkJCWlmIChpc19maXJz
dF9kZXApIHsNCiAgICArCQkJCS8qDQogICAgKwkJCQkgKiBJZiBwcm9jZXNzaW5nIHRoZSBjb25j
YXRlbmF0aW9uIG9mIG11bHRpcGxlDQogICAgKwkJCQkgKiBkZXBlbmRlbmN5IGZpbGVzLCBvbmx5
IHByb2Nlc3MgdGhlIGZpcnN0DQogICAgKwkJCQkgKiB0YXJnZXQgbmFtZSwgd2hpY2ggd2lsbCBi
ZSB0aGUgb3JpZ2luYWwNCiAgICArCQkJCSAqIHNvdXJjZSBuYW1lLCBhbmQgaWdub3JlIGFueSBv
dGhlciB0YXJnZXQNCiAgICArCQkJCSAqIG5hbWVzLCB3aGljaCB3aWxsIGJlIGludGVybWVkaWF0
ZSB0ZW1wb3JhcnkNCiAgICArCQkJCSAqIGZpbGVzLg0KICAgICsJCQkJICovDQogICAgKwkJCQlp
ZiAoIXNhd19hbnlfdGFyZ2V0KSB7DQogICAgKwkJCQkJc2F3X2FueV90YXJnZXQgPSAxOw0KICAg
ICsJCQkJCXByaW50Zigic291cmNlXyVzIDo9ICVzXG5cbiIsDQogICAgKwkJCQkJICAgICAgIHRh
cmdldCwgbSk7DQogICAgKwkJCQkJcHJpbnRmKCJkZXBzXyVzIDo9IFxcXG4iLCB0YXJnZXQpOw0K
ICAgICsJCQkJfQ0KICAgICsJCQkJaXNfZmlyc3RfZGVwID0gMDsNCiAgICArCQkJfSBlbHNlIHsN
CiAgICArCQkJCXByaW50ZigiICAlcyBcXFxuIiwgbSk7DQogICAgKwkJCX0NCiAgICArDQogICAg
KwkJCWJ1ZiA9IHJlYWRfZmlsZShtKTsNCiAgICArCQkJcGFyc2VfY29uZmlnX2ZpbGUoYnVmKTsN
CiAgICArCQkJZnJlZShidWYpOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJaWYgKGlzX2xhc3Qp
DQogICAgKwkJCWJyZWFrOw0KICAgICsNCiAgICArCQkvKg0KICAgICsJCSAqIFN0YXJ0IHNlYXJj
aGluZyBmb3IgbmV4dCB0b2tlbiBpbW1lZGlhdGVseSBhZnRlciB0aGUgZmlyc3QNCiAgICArCQkg
KiAid2hpdGVzcGFjZSIgY2hhcmFjdGVyIHRoYXQgZm9sbG93cyB0aGlzIHRva2VuLg0KICAgICsJ
CSAqLw0KICAgICsJCW0gPSBwICsgMTsNCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoIXNhd19h
bnlfdGFyZ2V0KSB7DQogICAgKwkJZnByaW50ZihzdGRlcnIsICJmaXhkZXA6IHBhcnNlIGVycm9y
OyBubyB0YXJnZXRzIGZvdW5kXG4iKTsNCiAgICArCQlleGl0KDEpOw0KICAgICsJfQ0KICAgICsN
CiAgICArCXByaW50ZigiXG4lczogJChkZXBzXyVzKVxuXG4iLCB0YXJnZXQsIHRhcmdldCk7DQog
ICAgKwlwcmludGYoIiQoZGVwc18lcyk6XG4iLCB0YXJnZXQpOw0KICAgICt9DQogICAgKw0KICAg
ICtpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwljb25zdCBj
aGFyICpkZXBmaWxlLCAqdGFyZ2V0LCAqY21kbGluZTsNCiAgICArCXZvaWQgKmJ1ZjsNCiAgICAr
DQogICAgKwlpZiAoYXJnYyAhPSA0KQ0KICAgICsJCXVzYWdlKCk7DQogICAgKw0KICAgICsJZGVw
ZmlsZSA9IGFyZ3ZbMV07DQogICAgKwl0YXJnZXQgPSBhcmd2WzJdOw0KICAgICsJY21kbGluZSA9
IGFyZ3ZbM107DQogICAgKw0KICAgICsJcHJpbnRmKCJjbWRfJXMgOj0gJXNcblxuIiwgdGFyZ2V0
LCBjbWRsaW5lKTsNCiAgICArDQogICAgKwlidWYgPSByZWFkX2ZpbGUoZGVwZmlsZSk7DQogICAg
KwlwYXJzZV9kZXBfZmlsZShidWYsIHRhcmdldCk7DQogICAgKwlmcmVlKGJ1Zik7DQogICAgKw0K
ICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICAtLSANCiAgICAyLjcuNA0KICAgIA0KICAgIA0K
ICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAg
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:37:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:37:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxYQ-0007jk-TF; Thu, 19 Sep 2019 14:37:06 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxYP-0007jd-Oh
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:37:05 +0000
X-Inumbo-ID: f26c6bac-daea-11e9-9660-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id f26c6bac-daea-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:37:04 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 582F3F2025;
 Thu, 19 Sep 2019 16:37:03 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id njLSAoGwXPmN; Thu, 19 Sep 2019 16:37:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 30231F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:37:01 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:37:00 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:37:00
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 08/23] build: Add Unikraft
 specific fixdep header
Thread-Index: AQHVbssCFKAGLXU7EE6HWPdS9sDtOqczEc4A
Date: Thu, 19 Sep 2019 14:37:00 +0000
Message-ID: <B6F8618D-D0FB-4DF6-ADEE-7FC9D669F5D9@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-9-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-9-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <31FDADFBCFF2964CB19DAC290654FE6F@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 08/23] build: Add Unikraft
 specific fixdep header
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIElnbm9yZSBhdXRvIGdl
bmVyYXRlZCB1ay9fY29uZmlnLmguDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNh
bnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+DQogICAgLS0tDQogICAgIHN1cHBv
cnQva2NvbmZpZy5uZXcvZml4ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhk
ZXAtaGVhZGVyIHwgMTIgKysrKysrKysrKysrDQogICAgIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5z
ZXJ0aW9ucygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhkZXAtaGVhZGVyDQogICAgDQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2Zp
eGRlcC5jDQogICAgaW5kZXggZmFjYmQ2MC4uOTdhZmI3MCAxMDA2NDQNCiAgICAtLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L2ZpeGRlcC5jDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9m
aXhkZXAuYw0KICAgIEBAIC0yNjksNiArMjY5LDcgQEAgc3RhdGljIGludCBpc19pZ25vcmVkX2Zp
bGUoY29uc3QgY2hhciAqcywgaW50IGxlbikNCiAgICAgew0KICAgICAJcmV0dXJuIHN0cl9lbmRz
X3dpdGgocywgbGVuLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIpIHx8DQogICAgIAkg
ICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5bXMu
aCIpIHx8DQogICAgKwkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICJidWlsZC9pbmNsdWRl
L3VrL19jb25maWcuaCIpIHx8DQogICAgIAkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICIu
dmVyIik7DQogICAgIH0NCiAgICAgDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlciBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlcg0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uM2IyYzhhZQ0KICAgIC0tLSAvZGV2L251
bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0
LWZpeGRlcC1oZWFkZXINCiAgICBAQCAtMCwwICsxLDEyIEBADQogICAgK2RpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAu
Yw0KICAgICtpbmRleCBmYWNiZDYwLi45N2FmYjcwIDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L2ZpeGRlcC5jDQogICAgKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZml4
ZGVwLmMNCiAgICArQEAgLTI2OSw2ICsyNjksNyBAQCBzdGF0aWMgaW50IGlzX2lnbm9yZWRfZmls
ZShjb25zdCBjaGFyICpzLCBpbnQgbGVuKQ0KICAgICsgew0KICAgICsgCXJldHVybiBzdHJfZW5k
c193aXRoKHMsIGxlbiwgImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgiKSB8fA0KICAgICsg
CSAgICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9rc3lt
cy5oIikgfHwNCiAgICArKwkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICJidWlsZC9pbmNs
dWRlL3VrL19jb25maWcuaCIpIHx8DQogICAgKyAJICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVu
LCAiLnZlciIpOw0KICAgICsgfQ0KICAgICsgDQogICAgLS0gDQogICAgMi43LjQNCiAgICANCiAg
ICANCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0K
ICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:37:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:37:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxYa-0007kV-VI; Thu, 19 Sep 2019 14:37:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxYZ-0007kP-OX
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:37:15 +0000
X-Inumbo-ID: f8dffddc-daea-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id f8dffddc-daea-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 14:37:14 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 3DEB31056D8;
 Thu, 19 Sep 2019 16:37:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UZUVLRwpv1fh; Thu, 19 Sep 2019 16:37:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 19DCE105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:37:14 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:37:13 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:37:13
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 09/23] build: Remove implicit
 rules
Thread-Index: AQHVbssGaTh6Pb5iF0+wDq8M8ZMZ/aczEd2A
Date: Thu, 19 Sep 2019 14:37:13 +0000
Message-ID: <9AFDC5BB-1B08-4DDD-8B95-2C674C465372@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-10-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-10-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <551ADCE332211941BB0B7A05B72330CE@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 09/23] build: Remove implicit
 rules
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCu+7vw0KT24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIERpc2FibGUgaW1wbGlj
aXQgbWFrZWZpbGUgcnVsZXMuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRo
YW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+DQogICAgLS0tDQogICAgIHN1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgICAgICAgICAgICAgICAgICAgICAgfCAgMiArKw0KICAg
ICBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzIHwg
MTMgKysrKysrKysrKysrKw0KICAgICAyIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKykN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNi1y
ZW1vdmUtaW1wbGljaXQtcnVsZXMNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAg
ICBpbmRleCA1OGU2ZTc1Li5hZmU5NGVlIDEwMDY0NA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnINCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
LmJyDQogICAgQEAgLTQsNiArNCw4IEBAIHRvcF9idWlsZGRpcj0uLi8uLi8NCiAgICAgc3JjdHJl
ZSA6PSAuDQogICAgIG9iaiA/PSAuDQogICAgIA0KICAgICsuU1VGRklYRVMgOg0KICAgICsNCiAg
ICAgaW5jbHVkZSBNYWtlZmlsZS5ydWxlcw0KICAgICBpbmNsdWRlIE1ha2VmaWxlDQogICAgICNI
T1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5jbHVkZSBmb28uaA0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBsaWNpdC1ydWxlcw0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNGUxNzllOA0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3Zl
LWltcGxpY2l0LXJ1bGVzDQogICAgQEAgLTAsMCArMSwxMyBAQA0KICAgICtkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFr
ZWZpbGUuYnINCiAgICAraW5kZXggNThlNmU3NS4uYWZlOTRlZSAxMDA2NDQNCiAgICArLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICsrKysgYi9zdXBwb3J0L2tjb25m
aWcubmV3L01ha2VmaWxlLmJyDQogICAgK0BAIC00LDYgKzQsOCBAQCB0b3BfYnVpbGRkaXI9Li4v
Li4vDQogICAgKyBzcmN0cmVlIDo9IC4NCiAgICArIG9iaiA/PSAuDQogICAgKyANCiAgICArKy5T
VUZGSVhFUyA6DQogICAgKysNCiAgICArIGluY2x1ZGUgTWFrZWZpbGUucnVsZXMNCiAgICArIGlu
Y2x1ZGUgTWFrZWZpbGUNCiAgICArICNIT1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5jbHVkZSBm
b28uaA0KICAgIC0tIA0KICAgIDIuNy40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:38:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:38:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxZd-0007of-38; Thu, 19 Sep 2019 14:38:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxZc-0007oY-9r
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:38:20 +0000
X-Inumbo-ID: 1ec4555c-daeb-11e9-9660-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1ec4555c-daeb-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:38:18 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B6CA1F2025;
 Thu, 19 Sep 2019 16:38:17 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id wJaMu3fctvdo; Thu, 19 Sep 2019 16:38:17 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 84C7CF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:38:15 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:38:15 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:38:15
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 10/23] build: Import the
 kconfig host rules from Linux
Thread-Index: AQHVbssJ+eCHGTv4gUaUMckZq92TUaczEiYA
Date: Thu, 19 Sep 2019 14:38:15 +0000
Message-ID: <3ED956F1-1BC6-476F-AA06-43F92705E3D4@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-11-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-11-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <0F421E9F520D094AA66F05D4640B11D8@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 10/23] build: Import the
 kconfig host rules from Linux
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEFkZCBydWxlcyBidWls
ZCB0aGUgY29uZmlnIHRvb2wuIFRoZXNlIHJ1bGUgYXJlIGltcG9ydGVkIGZyb20gdGhlIGxpbnV4
DQogICAga2VybmVsLg0KICAgIEZpbGU6IHNjcmlwdHMvTWFrZWZpbGUuaG9zdA0KICAgIFRhZzog
djUuMg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5z
YW50aGFuYW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L01h
a2VmaWxlLmJyICAgICAgICAgICAgICAgICAgICB8IDExNiArKysrKysrKysrKysrKy0tLQ0KICAg
ICAuLi4va2NvbmZpZy5uZXcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcyB8IDE0
MiArKysrKysrKysrKysrKysrKysrKysNCiAgICAgMiBmaWxlcyBjaGFuZ2VkLCAyNDMgaW5zZXJ0
aW9ucygrKSwgMTUgZGVsZXRpb25zKC0pDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3BhdGNoZXMvMDctaW1wb3J0LWhvc3QtdG9vbHMtcnVsZXMNCiAgICANCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICBpbmRleCBhZmU5NGVlLi44ZTY0YTliIDEwMDY0
NA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICArKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgQEAgLTEwLDI5ICsxMCw0MSBAQCBp
bmNsdWRlIE1ha2VmaWxlLnJ1bGVzDQogICAgIGluY2x1ZGUgTWFrZWZpbGUNCiAgICAgI0hPU1RD
RkxBR1MrPS1EaW5saW5lPSIiIC1pbmNsdWRlIGZvby5oDQogICAgIC1pbmNsdWRlICQob2JqKS8u
ZGVwZW5kDQogICAgLSQob2JqKS8uZGVwZW5kOiAkKHdpbGRjYXJkICouaCAqLmMpDQogICAgLQkk
KEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAy
Pi9kZXYvbnVsbCB8fCA6DQogICAgIA0KICAgICBfX2hvc3Rwcm9ncyA6PSAkKHNvcnQgJChob3N0
cHJvZ3MteSkgJChob3N0cHJvZ3MtbSkpDQogICAgLWhvc3QtY3NpbmdsZSA6PSAkKGZvcmVhY2gg
bSwkKF9faG9zdHByb2dzKSwkKGlmICQoJChtKS1vYmpzKSwsJChtKSkpDQogICAgK2hvc3QtY3No
bGliIDo9ICQoc29ydCAkKGhvc3RsaWJzLXkpICQoaG9zdGxpYnMtbSkpDQogICAgK2hvc3QtY3h4
c2hsaWIgOj0gJChzb3J0ICQoaG9zdGN4eGxpYnMteSkgJChob3N0Y3h4bGlicy1tKSkNCiAgICAr
DQogICAgKyMgQyBjb2RlDQogICAgKyMgRXhlY3V0YWJsZXMgY29tcGlsZWQgZnJvbSBhIHNpbmds
ZSAuYyBmaWxlDQogICAgK2hvc3QtY3NpbmdsZTo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3Mp
LCBcDQogICAgKyAgICAgICAgICAgICAkKGlmICQoJChtKS1vYmpzKSQoJChtKS1jeHhvYmpzKSws
JChtKSkpDQogICAgIGhvc3QtY211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwN
CiAgICAtICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwsJChpZiAkKCQobSktb2Jqcyks
JChtKSkpKQ0KICAgIC1ob3N0LWN4eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3Mp
LFwNCiAgICAtICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0p
LW9ianMpLCkpKQ0KICAgIC1ob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0
ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQ0KICAgIC1ob3N0LWN4
eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rw
cm9ncyksJCgkKG0pLWN4eG9ianMpKSkpDQogICAgKwkJICAgICAgICAgICAgJChpZiAkKCQobSkt
Y3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkNCiAgICArIyBPYmplY3QgKC5vKSBm
aWxlcyBjb21waWxlZCBmcm9tIC5jIGZpbGVzDQogICAgK2hvc3QtY29ianMgIDo9ICQoc29ydCAk
KGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktb2JqcykpKQ0KICAgICsNCiAgICArIyBD
KysgY29kZQ0KICAgICsjIEMrKyBleGVjdXRhYmxlcyBjb21waWxlZCBmcm9tIGF0IGxlYXN0IG9u
ZSAuY2MgZmlsZQ0KICAgICsjIGFuZCB6ZXJvIG9yIG1vcmUgLmMgZmlsZXMNCiAgICArIGhvc3Qt
Y3h4bXVsdGkgICA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKGlmICQoJChtKS1jeHhv
YmpzKSwkKG0pKSkNCiAgICArIyBDKysgT2JqZWN0ICgubykgZmlsZXMgY29tcGlsZWQgZnJvbSAu
Y2MgZmlsZXMNCiAgICAraG9zdC1jeHhvYmpzICAgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhv
c3QtY3h4bXVsdGkpLCQoJChtKS1jeHhvYmpzKSkpDQogICAgKyNPYmplY3QgKC5vKSBmaWxlcyB1
c2VkIGJ5IHRoZSBzaGFyZWQgbGliYXJpZXMNCiAgICAraG9zdC1jc2hvYmpzICAgIDo9ICQoc29y
dCAkKGZvcmVhY2ggbSwkKGhvc3QtY3NobGliKSwkKCQobTouc289LW9ianMpKSkpDQogICAgK2hv
c3QtY3h4c2hvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWN4eHNobGliKSwkKCQo
bTouc289LW9ianMpKSkpDQogICAgKw0KICAgICsNCiAgICAraG9zdC1jc2luZ2xlIDo9ICQoYWRk
cHJlZml4ICQob2JqKS8sJChob3N0LWNzaW5nbGUpKQ0KICAgICtob3N0LWNtdWx0aSAgOj0gJChh
ZGRwcmVmaXggJChvYmopLywkKGhvc3QtY211bHRpKSkNCiAgICAraG9zdC1jeHhtdWx0aSAgOj0g
JChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4bXVsdGkpKQ0KICAgICtob3N0LWNvYmpzIDo9
ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNvYmpzKSkNCiAgICAraG9zdC1jeHhvYmpzIDo9
ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQ0KICAgICBmaXhkZXAtb2JqcyA6
PSAkKG9iaikvZml4ZGVwLm8NCiAgICAgDQogICAgIEhPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKG9i
aikgLURDT05GSUdfPVwiXCINCiAgICAgDQogICAgLSQoaG9zdC1jc2luZ2xlKTogJTogJS5jDQog
ICAgLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENG
TEFHU18kQCkgJDwgLW8gJChvYmopLyRADQogICAgLQ0KICAgIC0kKGhvc3QtY211bHRpKTogJTog
JChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgIC0JJChIT1NUQ0MpICQoSE9TVF9FWFRS
QUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJEApICQoYWRkcHJlZml4ICQob2Jq
KS8sJCgkKEBGKS1vYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAg
ICAgDQogICAgLSQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3QtY29i
anMpICQoaG9zdC1jc2hsaWIpDQogICAgLQkkKEhPU1RDWFgpICQoSE9TVF9FWFRSQUNGTEFHUykg
JChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQo
QEYpLW9ianMpICQoJChARiktY3h4b2JqcykpICQoSE9TVExPQURMSUJFU18kKEBGKSkgLW8gJChv
YmopLyRADQogICAgIA0KICAgICAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQ0KICAgICAJ
JChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1Nf
JChARikpICQ8IC1vICRADQogICAgQEAgLTQwLDYgKzUyLDgwIEBAICQob2JqKS9maXhkZXA6ICQo
Zml4ZGVwLW9ianMpDQogICAgICQoZml4ZGVwLW9ianMpOiAkKHNyYykvZml4ZGVwLmMNCiAgICAg
CSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdT
XyQoQEYpKSAtYyAkPCAtbyAkQA0KICAgICANCiAgICArIyMjIyMNCiAgICArIyBDb21waWxlIHBy
b2dyYW1zIG9uIHRoZSBob3N0DQogICAgKw0KICAgICsjIENyZWF0ZSBleGVjdXRhYmxlIGZyb20g
YSBzaW5nbGUgLmMgZmlsZQ0KICAgICsjIGhvc3QtY3NpbmdsZSAtPiBFeGVjdXRhYmxlDQogICAg
K3F1aWV0X2NtZF9ob3N0LWNzaW5nbGUgCT0gSE9TVENDICAkQA0KICAgICsgICAgICBjbWRfaG9z
dC1jc2luZ2xlCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVExERkxBR1MpIC1vICRA
ICQ8IFwNCiAgICArCQkkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18kKEBGKSkNCiAgICArJCho
b3N0LWNzaW5nbGUpOiAkKG9iaikvJTogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQog
ICAgKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jc2luZ2xlKQ0KICAgICsNCiAgICArIyBM
aW5rIGFuIGV4ZWN1dGFibGUgYmFzZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYWxsIHBsYWluIGMN
CiAgICArIyBob3N0LWNtdWx0aSAtPiBleGVjdXRhYmxlDQogICAgK3F1aWV0X2NtZF9ob3N0LWNt
dWx0aQk9IEhPU1RMRCAgJEANCiAgICArICAgICAgY21kX2hvc3QtY211bHRpCT0gJChIT1NUQ0Mp
ICQoaG9zdGNfZmxhZ3MpIC1vICRAIFwNCiAgICArCQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQo
JChARiktb2JqcykpIFwNCiAgICArCQkJICAkKEhPU1RfTERGTEFHUykgJChIT1NUTERMSUJTXyQo
QEYpKQ0KICAgICskKGhvc3QtY211bHRpKTogJChvYmopL2ZpeGRlcCBGT1JDRQ0KICAgICsJJChj
YWxsIGlmX2NoYW5nZWQsaG9zdC1jbXVsdGkpDQogICAgKyQoY2FsbCBtdWx0aV9kZXBlbmQsJCho
b3N0LWNtdWx0aSksICwgLW9ianMpDQogICAgKw0KICAgICsNCiAgICArIyBDcmVhdGUgLm8gZmls
ZSBmcm9tIGEgc2luZ2xlIC5jIGZpbGUNCiAgICArIyBob3N0LWNvYmpzIC0+IC5vDQogICAgK3F1
aWV0X2NtZF9ob3N0LWNvYmpzCT0gSE9TVENDICAkQA0KICAgICsgICAgICBjbWRfaG9zdC1jb2Jq
cwk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RDRkxBR1NfJChARikpXA0KICAgICsJ
CQkgIC1jIC1vICRAICQ8DQogICAgKyQoZmlsdGVyLW91dCAlLnRhYi5vLCAkKGZpbHRlci1vdXQg
JS5sZXgubywkKGhvc3QtY29ianMpKSk6ICQob2JqKS8lLm86XA0KICAgICsJCSQoc3JjKS8lLmMg
JChvYmopL2ZpeGRlcCBGT1JDRQ0KICAgICsJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY29i
anMpDQogICAgKw0KICAgICskKGZpbHRlciAlLmxleC5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikv
JS5sZXgubzogICQob2JqKS8lLmxleC5jICQob2JqKS9maXhkZXAgRk9SQ0UNCiAgICArCSQoY2Fs
bCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNvYmpzKQ0KICAgICsNCiAgICArJChmaWx0ZXIgJS50YWIu
bywkKGhvc3QtY29ianMpKTogJChvYmopLyUudGFiLm86ICAkKG9iaikvJS50YWIuYyAkKG9iaikv
Zml4ZGVwIEZPUkNFDQogICAgKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykNCiAg
ICArDQogICAgKyMgTGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmlsZXMs
IGEgbWl4dHVyZSBvZiAuYyBhbmQgLmNjDQogICAgKyMgaG9zdC1jeHhtdWx0aSAtPiBleGVjdXRh
YmxlDQogICAgK3F1aWV0X2NtZF9ob3N0LWN4eG11bHRpCT0gSE9TVExEICAkQA0KICAgICsgICAg
ICBjbWRfaG9zdC1jeHhtdWx0aQk9ICQoSE9TVENYWCkgJChIT1NUTERGTEFHUykgLW8gJEBcDQog
ICAgKwkJCSAgJChmb3JlYWNoIG8sb2JqcyBjeHhvYmpzLFwNCiAgICArCQkJICAkKGFkZHByZWZp
eCAkKG9iaikvLCQoJChARiktJChvKSkpKSBcDQogICAgKwkJCSAgJChIT1NUTERMSUJTKSAkKEhP
U1RMRExJQlNfJChARikpDQogICAgKyQoaG9zdC1jeHhtdWx0aSk6IEZPUkNFDQogICAgKwkkKGNh
bGwgaWZfY2hhbmdlZCxob3N0LWN4eG11bHRpKQ0KICAgICskKGNhbGwgbXVsdGlfZGVwZW5kLCQo
aG9zdC1jeHhtdWx0aSksICwgLW9ianMgLWN4eG9ianMpDQogICAgKw0KICAgICsNCiAgICArIyBD
cmVhdGUgLm8gZmlsZSBmcm9tIGEgc2luZ2xlIC5jYyAoQysrKSBmaWxlDQogICAgK3F1aWV0X2Nt
ZF9ob3N0LWN4eG9ianMJPSBIT1NUQ1hYICRADQogICAgKyAgICAgIGNtZF9ob3N0LWN4eG9ianMJ
PSAkKEhPU1RDWFgpICQoaG9zdGN4eF9mbGFncykgJChIT1NUQ1hYRkxBR1NfJChARikpIFwNCiAg
ICArCQkJICAtYyAtbyAkQCAkPA0KICAgICskKGhvc3QtY3h4b2Jqcyk6ICQob2JqKS8lLm86ICQo
c3JjKS8lLmNjIEZPUkNFDQogICAgKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jeHhvYmpz
KQ0KICAgICsNCiAgICArIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVu
ZGVudCAubyBmaWxlDQogICAgKyMgaG9zdC1jc2hvYmpzIC0+IC5vDQogICAgK3F1aWV0X2NtZF9o
b3N0LWNzaG9ianMJPSBIT1NUQ0MgIC1mUElDICRADQogICAgKyAgICAgIGNtZF9ob3N0LWNzaG9i
anMJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwNCiAgICArJCho
b3N0LWNzaG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNFDQogICAgKwkkKGNhbGwg
aWZfY2hhbmdlZF9kZXAsaG9zdC1jc2hvYmpzKQ0KICAgICsNCiAgICArIyBDb21waWxlIC5jIGZp
bGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxlDQogICAgKyMgTm90ZSB0aGF0
IHBsdWdpbiBjYXBhYmxlIGdjYyB2ZXJzaW9ucyBjYW4gYmUgZWl0aGVyIEMgb3IgQysrIGJhc2Vk
DQogICAgKyMgdGhlcmVmb3JlIHBsdWdpbiBzb3VyY2UgZmlsZXMgaGF2ZSB0byBiZSBjb21waWxh
YmxlIGluIGJvdGggQyBhbmQgQysrIG1vZGUuDQogICAgKyMgVGhpcyBpcyB3aHkgYSBDKysgY29t
cGlsZXIgaXMgaW52b2tlZCBvbiBhIC5jIGZpbGUuDQogICAgKyMgaG9zdC1jeHhzaG9ianMgLT4g
Lm8NCiAgICArcXVpZXRfY21kX2hvc3QtY3h4c2hvYmpzCT0gSE9TVENYWCAtZlBJQyAkQA0KICAg
ICsgICAgICBjbWRfaG9zdC1jeHhzaG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4eF9mbGFncykg
LWZQSUMgLWMgLW8gJEAgJDwNCiAgICArJChob3N0LWN4eHNob2Jqcyk6ICQob2JqKS8lLm86ICQo
c3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQ0KICAgICsJQGVjaG8gdGVzdC0tJEANCiAgICAr
CSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eHNob2JqcykNCiAgICArDQogICAgIGNsZWFu
Og0KICAgICAJJChRKXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpDQog
ICAgIGRpc3RjbGVhbjogY2xlYW4NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzDQogICAgbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5kMjRkYzk3DQogICAgLS0tIC9kZXYvbnVsbA0KICAg
ICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1y
dWxlcw0KICAgIEBAIC0wLDAgKzEsMTQyIEBADQogICAgK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0K
ICAgICtpbmRleCBhZmU5NGVlLi44ZTY0YTliIDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L01ha2VmaWxlLmJyDQogICAgKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFr
ZWZpbGUuYnINCiAgICArQEAgLTEwLDI5ICsxMCw0MSBAQCBpbmNsdWRlIE1ha2VmaWxlLnJ1bGVz
DQogICAgKyBpbmNsdWRlIE1ha2VmaWxlDQogICAgKyAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIg
LWluY2x1ZGUgZm9vLmgNCiAgICArIC1pbmNsdWRlICQob2JqKS8uZGVwZW5kDQogICAgKy0kKG9i
aikvLmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQ0KICAgICstCSQoSE9TVENDKSAkKEhPU1Rf
RVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoN
CiAgICArIA0KICAgICsgX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9z
dHByb2dzLW0pKQ0KICAgICstaG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJv
Z3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkNCiAgICArK2hvc3QtY3NobGliIDo9ICQoc29y
dCAkKGhvc3RsaWJzLXkpICQoaG9zdGxpYnMtbSkpDQogICAgKytob3N0LWN4eHNobGliIDo9ICQo
c29ydCAkKGhvc3RjeHhsaWJzLXkpICQoaG9zdGN4eGxpYnMtbSkpDQogICAgKysNCiAgICArKyMg
QyBjb2RlDQogICAgKysjIEV4ZWN1dGFibGVzIGNvbXBpbGVkIGZyb20gYSBzaW5nbGUgLmMgZmls
ZQ0KICAgICsraG9zdC1jc2luZ2xlOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksIFwNCiAg
ICArKyAgICAgICAgICAgICAkKGlmICQoJChtKS1vYmpzKSQoJChtKS1jeHhvYmpzKSwsJChtKSkp
DQogICAgKyBob3N0LWNtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcDQogICAg
Ky0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCwkKGlmICQoJChtKS1vYmpzKSwkKG0p
KSkpDQogICAgKy1ob3N0LWN4eG11bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwN
CiAgICArLSAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksJChtKSwkKGlmICQoJChtKS1v
YmpzKSwpKSkNCiAgICArLWhvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQg
JChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkpDQogICAgKy1ob3N0LWN4
eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rw
cm9ncyksJCgkKG0pLWN4eG9ianMpKSkpDQogICAgKysJCSAgICAgICAgICAgICQoaWYgJCgkKG0p
LWN4eG9ianMpLCwkKGlmICQoJChtKS1vYmpzKSwkKG0pKSkpDQogICAgKysjIE9iamVjdCAoLm8p
IGZpbGVzIGNvbXBpbGVkIGZyb20gLmMgZmlsZXMNCiAgICArK2hvc3QtY29ianMgIDo9ICQoc29y
dCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktb2JqcykpKQ0KICAgICsrDQogICAg
KysjIEMrKyBjb2RlDQogICAgKysjIEMrKyBleGVjdXRhYmxlcyBjb21waWxlZCBmcm9tIGF0IGxl
YXN0IG9uZSAuY2MgZmlsZQ0KICAgICsrIyBhbmQgemVybyBvciBtb3JlIC5jIGZpbGVzDQogICAg
KysgaG9zdC1jeHhtdWx0aSAgIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgk
KG0pLWN4eG9ianMpLCQobSkpKQ0KICAgICsrIyBDKysgT2JqZWN0ICgubykgZmlsZXMgY29tcGls
ZWQgZnJvbSAuY2MgZmlsZXMNCiAgICArK2hvc3QtY3h4b2JqcyAgICA6PSAkKHNvcnQgJChmb3Jl
YWNoIG0sJChob3N0LWN4eG11bHRpKSwkKCQobSktY3h4b2JqcykpKQ0KICAgICsrI09iamVjdCAo
Lm8pIGZpbGVzIHVzZWQgYnkgdGhlIHNoYXJlZCBsaWJhcmllcw0KICAgICsraG9zdC1jc2hvYmpz
ICAgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3NobGliKSwkKCQobTouc289LW9ianMp
KSkpDQogICAgKytob3N0LWN4eHNob2JqcyAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQoaG9zdC1j
eHhzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQ0KICAgICsrDQogICAgKysNCiAgICArK2hvc3Qt
Y3NpbmdsZSA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jc2luZ2xlKSkNCiAgICArK2hv
c3QtY211bHRpICA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jbXVsdGkpKQ0KICAgICsr
aG9zdC1jeHhtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4bXVsdGkpKQ0K
ICAgICsraG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoaG9zdC1jb2JqcykpDQog
ICAgKytob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4b2Jqcykp
DQogICAgKyBmaXhkZXAtb2JqcyA6PSAkKG9iaikvZml4ZGVwLm8NCiAgICArIA0KICAgICsgSE9T
VF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIg0KICAgICsgDQogICAgKy0k
KGhvc3QtY3NpbmdsZSk6ICU6ICUuYw0KICAgICstCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEANCiAgICAr
LQ0KICAgICstJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikN
CiAgICArLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9T
VENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FE
TElCRVNfJChARikpIC1vICQob2JqKS8kQA0KICAgICsgDQogICAgKy0kKGhvc3QtY3h4bXVsdGkp
OiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgICst
CSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZM
QUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpz
KSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAgICArIA0KICAgICsgJChv
YmopL2ZpeGRlcDogJChmaXhkZXAtb2JqcykNCiAgICArIAkkKEhPU1RDQykgJChIT1NUX0VYVFJB
Q0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgJDwgLW8gJEANCiAgICAr
QEAgLTQwLDYgKzUyLDgwIEBAICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpDQogICAgKyAk
KGZpeGRlcC1vYmpzKTogJChzcmMpL2ZpeGRlcC5jDQogICAgKyAJJChIT1NUQ0MpICQoSE9TVF9F
WFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRA
DQogICAgKyANCiAgICArKyMjIyMjDQogICAgKysjIENvbXBpbGUgcHJvZ3JhbXMgb24gdGhlIGhv
c3QNCiAgICArKw0KICAgICsrIyBDcmVhdGUgZXhlY3V0YWJsZSBmcm9tIGEgc2luZ2xlIC5jIGZp
bGUNCiAgICArKyMgaG9zdC1jc2luZ2xlIC0+IEV4ZWN1dGFibGUNCiAgICArK3F1aWV0X2NtZF9o
b3N0LWNzaW5nbGUgCT0gSE9TVENDICAkQA0KICAgICsrICAgICAgY21kX2hvc3QtY3NpbmdsZQk9
ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RMREZMQUdTKSAtbyAkQCAkPCBcDQogICAg
KysJCSQoSE9TVExETElCUykgJChIT1NUTERMSUJTXyQoQEYpKQ0KICAgICsrJChob3N0LWNzaW5n
bGUpOiAkKG9iaikvJTogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAgKysJJChj
YWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3NpbmdsZSkNCiAgICArKw0KICAgICsrIyBMaW5rIGFu
IGV4ZWN1dGFibGUgYmFzZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYWxsIHBsYWluIGMNCiAgICAr
KyMgaG9zdC1jbXVsdGkgLT4gZXhlY3V0YWJsZQ0KICAgICsrcXVpZXRfY21kX2hvc3QtY211bHRp
CT0gSE9TVExEICAkQA0KICAgICsrICAgICAgY21kX2hvc3QtY211bHRpCT0gJChIT1NUQ0MpICQo
aG9zdGNfZmxhZ3MpIC1vICRAIFwNCiAgICArKwkJCSAgJChhZGRwcmVmaXggJChvYmopLywkKCQo
QEYpLW9ianMpKSBcDQogICAgKysJCQkgICQoSE9TVF9MREZMQUdTKSAkKEhPU1RMRExJQlNfJChA
RikpDQogICAgKyskKGhvc3QtY211bHRpKTogJChvYmopL2ZpeGRlcCBGT1JDRQ0KICAgICsrCSQo
Y2FsbCBpZl9jaGFuZ2VkLGhvc3QtY211bHRpKQ0KICAgICsrJChjYWxsIG11bHRpX2RlcGVuZCwk
KGhvc3QtY211bHRpKSwgLCAtb2JqcykNCiAgICArKw0KICAgICsrDQogICAgKysjIENyZWF0ZSAu
byBmaWxlIGZyb20gYSBzaW5nbGUgLmMgZmlsZQ0KICAgICsrIyBob3N0LWNvYmpzIC0+IC5vDQog
ICAgKytxdWlldF9jbWRfaG9zdC1jb2Jqcwk9IEhPU1RDQyAgJEANCiAgICArKyAgICAgIGNtZF9o
b3N0LWNvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVENGTEFHU18kKEBGKSlc
DQogICAgKysJCQkgIC1jIC1vICRAICQ8DQogICAgKyskKGZpbHRlci1vdXQgJS50YWIubywgJChm
aWx0ZXItb3V0ICUubGV4Lm8sJChob3N0LWNvYmpzKSkpOiAkKG9iaikvJS5vOlwNCiAgICArKwkJ
JChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAgKysJJChjYWxsIGlmX2NoYW5nZWRf
ZGVwLGhvc3QtY29ianMpDQogICAgKysNCiAgICArKyQoZmlsdGVyICUubGV4Lm8sJChob3N0LWNv
YmpzKSk6ICQob2JqKS8lLmxleC5vOiAgJChvYmopLyUubGV4LmMgJChvYmopL2ZpeGRlcCBGT1JD
RQ0KICAgICsrCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNvYmpzKQ0KICAgICsrDQogICAg
KyskKGZpbHRlciAlLnRhYi5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikvJS50YWIubzogICQob2Jq
KS8lLnRhYi5jICQob2JqKS9maXhkZXAgRk9SQ0UNCiAgICArKwkkKGNhbGwgaWZfY2hhbmdlZF9k
ZXAsaG9zdC1jb2JqcykNCiAgICArKw0KICAgICsrIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFzZWQg
b24gbGlzdCBvZiAubyBmaWxlcywgYSBtaXh0dXJlIG9mIC5jIGFuZCAuY2MNCiAgICArKyMgaG9z
dC1jeHhtdWx0aSAtPiBleGVjdXRhYmxlDQogICAgKytxdWlldF9jbWRfaG9zdC1jeHhtdWx0aQk9
IEhPU1RMRCAgJEANCiAgICArKyAgICAgIGNtZF9ob3N0LWN4eG11bHRpCT0gJChIT1NUQ1hYKSAk
KEhPU1RMREZMQUdTKSAtbyAkQFwNCiAgICArKwkJCSAgJChmb3JlYWNoIG8sb2JqcyBjeHhvYmpz
LFwNCiAgICArKwkJCSAgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLSQobykpKSkgXA0KICAg
ICsrCQkJICAkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18kKEBGKSkNCiAgICArKyQoaG9zdC1j
eHhtdWx0aSk6IEZPUkNFDQogICAgKysJJChjYWxsIGlmX2NoYW5nZWQsaG9zdC1jeHhtdWx0aSkN
CiAgICArKyQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWN4eG11bHRpKSwgLCAtb2JqcyAtY3h4
b2JqcykNCiAgICArKw0KICAgICsrDQogICAgKysjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5n
bGUgLmNjIChDKyspIGZpbGUNCiAgICArK3F1aWV0X2NtZF9ob3N0LWN4eG9ianMJPSBIT1NUQ1hY
ICRADQogICAgKysgICAgICBjbWRfaG9zdC1jeHhvYmpzCT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhf
ZmxhZ3MpICQoSE9TVENYWEZMQUdTXyQoQEYpKSBcDQogICAgKysJCQkgIC1jIC1vICRAICQ8DQog
ICAgKyskKGhvc3QtY3h4b2Jqcyk6ICQob2JqKS8lLm86ICQoc3JjKS8lLmNjIEZPUkNFDQogICAg
KysJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3h4b2JqcykNCiAgICArKw0KICAgICsrIyBD
b21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxlDQogICAg
KysjIGhvc3QtY3Nob2JqcyAtPiAubw0KICAgICsrcXVpZXRfY21kX2hvc3QtY3Nob2Jqcwk9IEhP
U1RDQyAgLWZQSUMgJEANCiAgICArKyAgICAgIGNtZF9ob3N0LWNzaG9ianMJPSAkKEhPU1RDQykg
JChob3N0Y19mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwNCiAgICArKyQoaG9zdC1jc2hvYmpzKTog
JChvYmopLyUubzogJChzcmMpLyUuYyBGT1JDRQ0KICAgICsrCSQoY2FsbCBpZl9jaGFuZ2VkX2Rl
cCxob3N0LWNzaG9ianMpDQogICAgKysNCiAgICArKyMgQ29tcGlsZSAuYyBmaWxlLCBjcmVhdGUg
cG9zaXRpb24gaW5kZXBlbmRlbnQgLm8gZmlsZQ0KICAgICsrIyBOb3RlIHRoYXQgcGx1Z2luIGNh
cGFibGUgZ2NjIHZlcnNpb25zIGNhbiBiZSBlaXRoZXIgQyBvciBDKysgYmFzZWQNCiAgICArKyMg
dGhlcmVmb3JlIHBsdWdpbiBzb3VyY2UgZmlsZXMgaGF2ZSB0byBiZSBjb21waWxhYmxlIGluIGJv
dGggQyBhbmQgQysrIG1vZGUuDQogICAgKysjIFRoaXMgaXMgd2h5IGEgQysrIGNvbXBpbGVyIGlz
IGludm9rZWQgb24gYSAuYyBmaWxlLg0KICAgICsrIyBob3N0LWN4eHNob2JqcyAtPiAubw0KICAg
ICsrcXVpZXRfY21kX2hvc3QtY3h4c2hvYmpzCT0gSE9TVENYWCAtZlBJQyAkQA0KICAgICsrICAg
ICAgY21kX2hvc3QtY3h4c2hvYmpzCT0gJChIT1NUQ1hYKSAkKGhvc3RjeHhfZmxhZ3MpIC1mUElD
IC1jIC1vICRAICQ8DQogICAgKyskKGhvc3QtY3h4c2hvYmpzKTogJChvYmopLyUubzogJChzcmMp
LyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAgKysJQGVjaG8gdGVzdC0tJEANCiAgICArKwkk
KGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jeHhzaG9ianMpDQogICAgKysNCiAgICArIGNsZWFu
Og0KICAgICsgCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQoY2xlYW4tZmlsZXMpKQ0K
ICAgICsgZGlzdGNsZWFuOiBjbGVhbg0KICAgIC0tIA0KICAgIDIuNy40DQogICAgDQogICAgDQog
ICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICBN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:38:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:38:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxZq-0007r4-5z; Thu, 19 Sep 2019 14:38:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxZp-0007qx-DJ
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:38:33 +0000
X-Inumbo-ID: 26d1f2e0-daeb-11e9-9660-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 26d1f2e0-daeb-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:38:32 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 29DBE1056E7;
 Thu, 19 Sep 2019 16:38:31 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id td4EBpc1nx9m; Thu, 19 Sep 2019 16:38:31 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id CE98C1056E1
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:38:30 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:38:30 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:38:30
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 11/23] kconfig: Fixdep and
 host flags
Thread-Index: AQHVbssE5NgYkrVdtUWpPotU6YjAYKczEjkA
Date: Thu, 19 Sep 2019 14:38:30 +0000
Message-ID: <0AEA7B7D-00DC-4600-9553-B85061F6C4AD@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-12-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-12-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <FF088DCA366B2245903F6740840D4868@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 11/23] kconfig: Fixdep and
 host flags
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCu+7vw0KT24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEFkZCBDRkxBR1MsIExE
RkxBR1MsIGluY2x1ZGUgcGF0aHMgYW5kIGZpeGRlcCBmbGFncyBhcyBhIHBhcnQgb2YgdGhlDQog
ICAgaG9zdF9jZmxhZ3MuIFRoZSBob3N0X2NmbGFncyBhcmUgdXNlZCB0byBkZXRlY3QgaWYgdGhl
cmUgd2FzIGNoYW5nZXMgdG8NCiAgICB0aGVzZSBmbGFncy4NCiAgICANCiAgICBTaWduZWQtb2Zm
LWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICAt
LS0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNiArKysrKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA4LWZp
eGRlcC1hbmQtY29uZmlnLWZsYWcgfCAxOSArKysrKysrKysrKysrKysrKysrDQogICAgIDIgZmls
ZXMgY2hhbmdlZCwgMjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KICAgICBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29u
ZmlnLWZsYWcNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtl
ZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICBpbmRleCA4ZTY0
YTliLi5lZDlhNWNmIDEwMDY0NA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZp
bGUuYnINCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgQEAg
LTQyLDkgKzQyLDEzIEBAIGhvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3Qt
Y29ianMpKQ0KICAgICBob3N0LWN4eG9ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3Qt
Y3h4b2JqcykpDQogICAgIGZpeGRlcC1vYmpzIDo9ICQob2JqKS9maXhkZXAubw0KICAgICANCiAg
ICAtSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIg0KICAgICtIT1NU
X0VYVFJBQ0ZMQUdTICs9IC1JJChzcmMpIC1JJChvYmopIC1EQ09ORklHXz1cIlwiDQogICAgIA0K
ICAgICtfaG9zdGNfZmxhZ3MgPSAkKEhPU1RDRkxBR1MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChI
T1NUQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykNCiAgICArX2hvc3RjeHhfZmxhZ3MgPSAkKEhPU1RD
WFhGTEFHUykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kKGJhc2V0YXJnZXQp
Lm8pDQogICAgIA0KICAgICtob3N0Y19mbGFncyAgICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9o
b3N0Y19mbGFncykNCiAgICAraG9zdGN4eF9mbGFncyAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChf
aG9zdGN4eF9mbGFncykNCiAgICAgDQogICAgICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMp
DQogICAgIAkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9T
VENGTEFHU18kKEBGKSkgJDwgLW8gJEANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZw0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNGEzYTM1OA0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWct
ZmxhZw0KICAgIEBAIC0wLDAgKzEsMTkgQEANCiAgICArZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQog
ICAgK2luZGV4IDI5ZGVlNWUuLjljMTEyOTMgMTAwNjQ0DQogICAgKy0tLSBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICArKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtl
ZmlsZS5icg0KICAgICtAQCAtNDIsOSArNDIsMTMgQEAgaG9zdC1jb2JqcyA6PSAkKGFkZHByZWZp
eCAkKG9iaikvLCQoaG9zdC1jb2JqcykpDQogICAgKyBob3N0LWN4eG9ianMgOj0gJChhZGRwcmVm
aXggJChvYmopLywkKGhvc3QtY3h4b2JqcykpDQogICAgKyBmaXhkZXAtb2JqcyA6PSAkKG9iaikv
Zml4ZGVwLm8NCiAgICArIA0KICAgICstSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENP
TkZJR189XCJcIg0KICAgICsrSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQoc3JjKSAtSSQob2JqKSAt
RENPTkZJR189XCJcIg0KICAgICsgDQogICAgKytfaG9zdGNfZmxhZ3MgPSAkKEhPU1RDRkxBR1Mp
ICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykNCiAgICAr
K19ob3N0Y3h4X2ZsYWdzID0gJChIT1NUQ1hYRkxBR1MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChI
T1NUQ1hYRkxBR1NfJChiYXNldGFyZ2V0KS5vKQ0KICAgICsgDQogICAgKytob3N0Y19mbGFncyAg
ICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y19mbGFncykNCiAgICArK2hvc3RjeHhfZmxh
Z3MgID0gLVdwLC1NRCwkKGRlcGZpbGUpICQoX2hvc3RjeHhfZmxhZ3MpDQogICAgKyANCiAgICAr
ICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpDQogICAgKyAJJChIT1NUQ0MpICQoSE9TVF9F
WFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpICQ8IC1vICRADQog
ICAgLS0gDQogICAgMi43LjQNCiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QN
CiAgICBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:38:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:38:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxa5-0007uW-8X; Thu, 19 Sep 2019 14:38:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxa4-0007u9-AX
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:38:48 +0000
X-Inumbo-ID: 2fbc3906-daeb-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2fbc3906-daeb-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 14:38:46 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 466E41056D8;
 Thu, 19 Sep 2019 16:38:46 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id bABUk9bTH94e; Thu, 19 Sep 2019 16:38:46 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 08399105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:38:46 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:38:45 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:38:45
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 12/23] kconfig: Support glob
 in kconfig
Thread-Index: AQHVbssF7pGM97HJKEuIacp+3k2GRqczEkuA
Date: Thu, 19 Sep 2019 14:38:45 +0000
Message-ID: <B344AC64-9A59-448D-B2D1-2FDF592656CB@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-13-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-13-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <B8666AC46C41514CBDFFC7A8E6A446F6@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 12/23] kconfig: Support glob
 in kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEFkZCBzdXBwb3J0IGZv
ciBnbG9iIG9uIGtjb25maWcuIFRha2VuIGZyb20gY29yZWJvb3QgaW1wbGVtZW50YXRpb24uDQog
ICAgDQogICAgVVJMOiBodHRwczovL2dpdGh1Yi5jb20vY29yZWJvb3QvY29yZWJvb3QNCiAgICBj
b21taXQtaWQ6IDkxYmE4MGRkNzk4Yg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFNoYXJhbiBT
YW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBzdXBw
b3J0L2tjb25maWcubmV3L2xleGVyLmwgICAgICAgICAgICAgICAgICAgICAgICB8IDI3ICsrKysr
KysrKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L2xrYy5oICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueSAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMiArLQ0KICAgICAuLi4va2NvbmZpZy5uZXcvcGF0Y2hlcy8wOS1zdXBw
b3J0LWdsb2ItaW4ta2NvbmZpZyB8IDcwICsrKysrKysrKysrKysrKysrKysrKysNCiAgICAgNCBm
aWxlcyBjaGFuZ2VkLCA5OSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDktc3VwcG9ydC1nbG9i
LWluLWtjb25maWcNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9s
ZXhlci5sIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sDQogICAgaW5kZXggNjM1NGM5MC4u
YzVhY2IzMiAxMDA2NDQNCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwNCiAgICBAQCAtOCw2ICs4LDcgQEAN
CiAgICAgJXsNCiAgICAgDQogICAgICNpbmNsdWRlIDxhc3NlcnQuaD4NCiAgICArI2luY2x1ZGUg
PGdsb2IuaD4NCiAgICAgI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgICAjaW5jbHVkZSA8c3RkaW8u
aD4NCiAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIEBAIC00NDIsNiArNDQzLDMyIEBAIHZv
aWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSkNCiAgICAgCWN1cnJlbnRfZmlsZSA9
IGZpbGU7DQogICAgIH0NCiAgICAgDQogICAgK3ZvaWQgemNvbmZfbmV4dGZpbGVzKGNvbnN0IGNo
YXIgKndpbGRjYXJkKQ0KICAgICt7DQogICAgKwlnbG9iX3QgZyA9IHswfTsNCiAgICArCWNoYXIg
Kip3Ow0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJaWYgKGdsb2Iod2lsZGNhcmQsIDAsIE5V
TEwsICZnKSAhPSAwKSB7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsJaWYgKGcuZ2xf
cGF0aHYgPT0gTlVMTCkgew0KICAgICsJCWdsb2JmcmVlKCZnKTsNCiAgICArCQlyZXR1cm47DQog
ICAgKwl9DQogICAgKw0KICAgICsJLyogd29ya2luZyB0aHJvdWdoIGZpbGVzIGJhY2t3YXJkcywg
c2luY2UNCiAgICArCSAqIHdlJ3JlIGZpcnN0IHB1c2hpbmcgdGhlbSBvbiBhIHN0YWNrDQogICAg
KwkgKiBiZWZvcmUgYWN0dWFsbHkgaGFuZGxpbmcgdGhlbS4NCiAgICArCSAqLw0KICAgICsJZm9y
IChpID0gZy5nbF9wYXRoYzsgaSA+IDA7IGktLSkgew0KICAgICsJCXcgPSAmZy5nbF9wYXRodltp
IC0gMV07DQogICAgKwkJemNvbmZfbmV4dGZpbGUoKncpOw0KICAgICsJfQ0KICAgICsNCiAgICAr
CWdsb2JmcmVlKCZnKTsNCiAgICArfQ0KICAgICsNCiAgICAgc3RhdGljIHZvaWQgemNvbmZfZW5k
ZmlsZSh2b2lkKQ0KICAgICB7DQogICAgIAlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7DQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmggYi9zdXBwb3J0L2tjb25maWcubmV3
L2xrYy5oDQogICAgaW5kZXggY2JjNzY1OC4uNjlkMmM3NyAxMDA2NDQNCiAgICAtLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L2xrYy5oDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2Mu
aA0KICAgIEBAIC00NCw2ICs0NCw3IEBAIHZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpOw0KICAg
ICBGSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKTsNCiAgICAgdm9pZCB6Y29uZl9p
bml0c2Nhbihjb25zdCBjaGFyICpuYW1lKTsNCiAgICAgdm9pZCB6Y29uZl9uZXh0ZmlsZShjb25z
dCBjaGFyICpuYW1lKTsNCiAgICArdm9pZCB6Y29uZl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqbmFt
ZSk7DQogICAgIGludCB6Y29uZl9saW5lbm8odm9pZCk7DQogICAgIGNvbnN0IGNoYXIgKnpjb25m
X2N1cm5hbWUodm9pZCk7DQogICAgIA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3BhcnNlci55IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQ0KICAgIGluZGV4IDYw
OTM2YzcuLjk1NzAwZjggMTAwNjQ0DQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJz
ZXIueQ0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkNCiAgICBAQCAtMzY2
LDcgKzM2Niw3IEBAIG1lbnVfb3B0aW9uX2xpc3Q6DQogICAgIHNvdXJjZV9zdG10OiBUX1NPVVJD
RSBwcm9tcHQgVF9FT0wNCiAgICAgew0KICAgICAJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6
c291cmNlICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMik7DQogICAg
LQl6Y29uZl9uZXh0ZmlsZSgkMik7DQogICAgKwl6Y29uZl9uZXh0ZmlsZXMoJDIpOw0KICAgICAJ
ZnJlZSgkMik7DQogICAgIH07DQogICAgIA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDktc3VwcG9ydC1nbG9iLWluLWtjb25maWcgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDktc3VwcG9ydC1nbG9iLWluLWtjb25maWcNCiAgICBuZXcgZmlsZSBt
b2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjAzNTdjMjINCiAgICAtLS0gL2Rldi9udWxs
DQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1p
bi1rY29uZmlnDQogICAgQEAgLTAsMCArMSw3MCBAQA0KICAgICtkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9sZXhlci5sIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sDQogICAg
K2luZGV4IDYzNTRjOTAuLmM1YWNiMzIgMTAwNjQ0DQogICAgKy0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbGV4ZXIubA0KICAgICsrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwNCiAg
ICArQEAgLTgsNiArOCw3IEBADQogICAgKyAlew0KICAgICsgDQogICAgKyAjaW5jbHVkZSA8YXNz
ZXJ0Lmg+DQogICAgKysjaW5jbHVkZSA8Z2xvYi5oPg0KICAgICsgI2luY2x1ZGUgPGxpbWl0cy5o
Pg0KICAgICsgI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyAjaW5jbHVkZSA8c3RkbGliLmg+DQog
ICAgK0BAIC00NDIsNiArNDQzLDMyIEBAIHZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAq
bmFtZSkNCiAgICArIAljdXJyZW50X2ZpbGUgPSBmaWxlOw0KICAgICsgfQ0KICAgICsgDQogICAg
Kyt2b2lkIHpjb25mX25leHRmaWxlcyhjb25zdCBjaGFyICp3aWxkY2FyZCkNCiAgICArK3sNCiAg
ICArKwlnbG9iX3QgZyA9IHswfTsNCiAgICArKwljaGFyICoqdzsNCiAgICArKwlpbnQgaTsNCiAg
ICArKw0KICAgICsrCWlmIChnbG9iKHdpbGRjYXJkLCAwLCBOVUxMLCAmZykgIT0gMCkgew0KICAg
ICsrCQlyZXR1cm47DQogICAgKysJfQ0KICAgICsrCWlmIChnLmdsX3BhdGh2ID09IE5VTEwpIHsN
CiAgICArKwkJZ2xvYmZyZWUoJmcpOw0KICAgICsrCQlyZXR1cm47DQogICAgKysJfQ0KICAgICsr
DQogICAgKysJLyogd29ya2luZyB0aHJvdWdoIGZpbGVzIGJhY2t3YXJkcywgc2luY2UNCiAgICAr
KwkgKiB3ZSdyZSBmaXJzdCBwdXNoaW5nIHRoZW0gb24gYSBzdGFjaw0KICAgICsrCSAqIGJlZm9y
ZSBhY3R1YWxseSBoYW5kbGluZyB0aGVtLg0KICAgICsrCSAqLw0KICAgICsrCWZvciAoaSA9IGcu
Z2xfcGF0aGM7IGkgPiAwOyBpLS0pIHsNCiAgICArKwkJdyA9ICZnLmdsX3BhdGh2W2kgLSAxXTsN
CiAgICArKwkJemNvbmZfbmV4dGZpbGUoKncpOw0KICAgICsrCX0NCiAgICArKw0KICAgICsrCWds
b2JmcmVlKCZnKTsNCiAgICArK30NCiAgICArKw0KICAgICsgc3RhdGljIHZvaWQgemNvbmZfZW5k
ZmlsZSh2b2lkKQ0KICAgICsgew0KICAgICsgCXN0cnVjdCBidWZmZXIgKnBhcmVudDsNCiAgICAr
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmggYi9zdXBwb3J0L2tjb25maWcu
bmV3L2xrYy5oDQogICAgK2luZGV4IGNiYzc2NTguLjY5ZDJjNzcgMTAwNjQ0DQogICAgKy0tLSBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgNCiAgICArKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9sa2MuaA0KICAgICtAQCAtNDQsNiArNDQsNyBAQCB2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lk
KTsNCiAgICArIEZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpOw0KICAgICsgdm9p
ZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKTsNCiAgICArIHZvaWQgemNvbmZfbmV4
dGZpbGUoY29uc3QgY2hhciAqbmFtZSk7DQogICAgKyt2b2lkIHpjb25mX25leHRmaWxlcyhjb25z
dCBjaGFyICpuYW1lKTsNCiAgICArIGludCB6Y29uZl9saW5lbm8odm9pZCk7DQogICAgKyBjb25z
dCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpOw0KICAgICsgDQogICAgK2RpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIu
eQ0KICAgICtpbmRleCA2MDkzNmM3Li45NTcwMGY4IDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0
L2tjb25maWcubmV3L3BhcnNlci55DQogICAgKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFy
c2VyLnkNCiAgICArQEAgLTM2Niw3ICszNjYsNyBAQCBtZW51X29wdGlvbl9saXN0Og0KICAgICsg
c291cmNlX3N0bXQ6IFRfU09VUkNFIHByb21wdCBUX0VPTA0KICAgICsgew0KICAgICsgCXByaW50
ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29u
Zl9saW5lbm8oKSwgJDIpOw0KICAgICstCXpjb25mX25leHRmaWxlKCQyKTsNCiAgICArKwl6Y29u
Zl9uZXh0ZmlsZXMoJDIpOw0KICAgICsgCWZyZWUoJDIpOw0KICAgICsgfTsNCiAgICArIA0KICAg
IC0tIA0KICAgIDIuNy40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQog
ICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:39:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:39:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxaY-0007z6-BC; Thu, 19 Sep 2019 14:39:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxaX-0007yz-1O
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:39:17 +0000
X-Inumbo-ID: 40fe08ac-daeb-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 40fe08ac-daeb-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 14:39:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 31F90F2025;
 Thu, 19 Sep 2019 16:39:15 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id utSpbX9nya5f; Thu, 19 Sep 2019 16:39:15 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 08869F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:39:13 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:39:12 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:39:12
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 13/23] Kconfig: Shifting to
 the new Kconfig system
Thread-Index: AQHVbssIVSVx+bJZe0KVU42xvSANGaczEmsA
Date: Thu, 19 Sep 2019 14:39:12 +0000
Message-ID: <35C15F07-022B-46FC-88E8-C890D8B2EE9C@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-14-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-14-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <0907CABF6EC0474F908D0F53AFC0A3C5@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 13/23] Kconfig: Shifting to
 the new Kconfig system
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEluIHRoaXMgcGF0Y2gs
IHdlIHVzZSB0aGUgdmVyc2lvbiBvZiB0aGUga2NvbmZpZy4gVGhlIGV4aXN0aW5nDQogICAga2Nv
bmZpZyBzdGlsbCBleGlzdHMuIEluIGxhdGVyIGNvbW1pdHMgd2Ugd2lsbCByZXBsYWNlIHRoZSBv
bGQNCiAgICBrY29uZmlnIHdpdGggdGhlIG5ldyBjb25maWcuDQogICAgDQogICAgTk9URTogVGhl
IGxhdGVyIGtjb25maWcgc3lzdGVtIGRlcHJlY2F0ZXMgc2lsZW50b2xkY29uZmlnLiBJbiBhDQog
ICAgbGF0ZXIgcGF0Y2ggdGhpcyB3aWxsIGJlIHJlcGxhY2Ugc3luY2NvbmZpZy4NCiAgICANCiAg
ICBTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xh
Yi5ldT4NCiAgICAtLS0NCiAgICAgQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICB8IDI5ICsr
KysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tDQogICAgIE1ha2VmaWxlICAgICAgICAgICAgICAg
ICAgICAgfCAxNiArKysrKysrKystLS0tLS0tDQogICAgIHN1cHBvcnQvYnVpbGQvTWFrZWZpbGUu
cnVsZXMgfCAgMiArLQ0KICAgICAzIGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDIy
IGRlbGV0aW9ucygtKQ0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcu
dWsNCiAgICBpbmRleCBkMmE0ZTMyLi4yMWFlNjU3IDEwMDY0NA0KICAgIC0tLSBhL0NvbmZpZy51
aw0KICAgICsrKyBiL0NvbmZpZy51aw0KICAgIEBAIC0yLDM0ICsyLDM1IEBADQogICAgICMgRm9y
IGEgZGVzY3JpcHRpb24gb2YgdGhlIHN5bnRheCBvZiB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSwN
CiAgICAgIyBzZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvRG9jdW1lbnRhdGlvbi9rYnVp
bGQvQ29uZmlnLmluLWxhbmd1YWdlLnR4dC4NCiAgICAgIw0KICAgIC1tYWlubWVudSAiVW5pa3Jh
ZnQvJFVLX0ZVTExWRVJTSU9OIENvbmZpZ3VyYXRpb24iDQogICAgK21haW5tZW51ICJVbmlrcmFm
dC8kKFVLX0ZVTExWRVJTSU9OKSBDb25maWd1cmF0aW9uIg0KICAgICBjb25maWcgS0NPTkZJR19B
UFBfSU4NCiAgICAgCXN0cmluZw0KICAgIC0Jb3B0aW9uIGVudj0iS0NPTkZJR19BUFBfSU4iDQog
ICAgKwlkZWZhdWx0ICIkKEtDT05GSUdfQVBQX0lOKSINCiAgICAgY29uZmlnIEtDT05GSUdfRUxJ
Ql9JTg0KICAgICAJc3RyaW5nDQogICAgLQlvcHRpb24gZW52PSJLQ09ORklHX0VMSUJfSU4iDQog
ICAgKwlkZWZhdWx0ICIkKEtDT05GSUdfRUxJQl9JTikiDQogICAgIGNvbmZpZyBLQ09ORklHX0VQ
TEFUX0lODQogICAgIAlzdHJpbmcNCiAgICAtCW9wdGlvbiBlbnY9IktDT05GSUdfRVBMQVRfSU4i
DQogICAgKwlkZWZhdWx0ICIkKEtDT05GSUdfRVBMQVRfSU4pIg0KICAgICsNCiAgICAgY29uZmln
IFVLX0ZVTExWRVJTSU9ODQogICAgIAlzdHJpbmcNCiAgICAtCW9wdGlvbiBlbnY9IlVLX0ZVTExW
RVJTSU9OIg0KICAgICsJZGVmYXVsdCAiJChVS19GVUxMVkVSU0lPTikiDQogICAgIGNvbmZpZyBV
S19DT0RFTkFNRQ0KICAgICAJc3RyaW5nDQogICAgLQlvcHRpb24gZW52PSJVS19DT0RFTkFNRSIN
CiAgICArCWRlZmF1bHQgIiQoVUtfQ09ERU5BTUUpIg0KICAgICBjb25maWcgVUtfQVJDSA0KICAg
ICAJc3RyaW5nDQogICAgLQlvcHRpb24gZW52PSJVS19BUkNIIg0KICAgICsJZGVmYXVsdCAiJChV
S19BUkNIKSINCiAgICAgY29uZmlnIFVLX0JBU0UNCiAgICAgCXN0cmluZw0KICAgIC0Jb3B0aW9u
IGVudj0iVUtfQkFTRSINCiAgICArCWRlZmF1bHQgIiQoVUtfQkFTRSkiDQogICAgIGNvbmZpZyBV
S19BUFANCiAgICAgCXN0cmluZw0KICAgIC0Jb3B0aW9uIGVudj0iVUtfQVBQIg0KICAgICsJZGVm
YXVsdCAiJChVS19BUFApIg0KICAgICBjb25maWcgVUtfREVGTkFNRQ0KICAgICAJc3RyaW5nDQog
ICAgLQlvcHRpb24gZW52PSJVS19OQU1FIg0KICAgICsJZGVmYXVsdCAiJChVS19OQU1FKSINCiAg
ICAgDQogICAgIG1lbnUgIkFyY2hpdGVjdHVyZSBTZWxlY3Rpb24iDQogICAgIAlzb3VyY2UgImFy
Y2gvQ29uZmlnLnVrIg0KICAgIEBAIC0zNywxMiArMzgsMTIgQEAgZW5kbWVudQ0KICAgICANCiAg
ICAgbWVudSAiUGxhdGZvcm0gQ29uZmlndXJhdGlvbiINCiAgICAgCXNvdXJjZSAicGxhdC9Db25m
aWcudWsiDQogICAgLQlzb3VyY2UgIiRLQ09ORklHX0VQTEFUX0lOIg0KICAgICsJc291cmNlICIk
KEtDT05GSUdfRVBMQVRfSU4pIg0KICAgICBlbmRtZW51DQogICAgIA0KICAgICBtZW51ICJMaWJy
YXJ5IENvbmZpZ3VyYXRpb24iDQogICAgIAlzb3VyY2UgImxpYi9Db25maWcudWsiDQogICAgLQlz
b3VyY2UgIiRLQ09ORklHX0VMSUJfSU4iDQogICAgKwlzb3VyY2UgIiQoS0NPTkZJR19FTElCX0lO
KSINCiAgICAgZW5kbWVudQ0KICAgICANCiAgICAgbWVudSAiQnVpbGQgT3B0aW9ucyINCiAgICBA
QCAtMTgzLDEyICsxODQsMTIgQEAgZW5kbWVudQ0KICAgICANCiAgICAgaWYgVUtfQVBQICE9IFVL
X0JBU0UNCiAgICAgCW1lbnUgIkFwcGxpY2F0aW9uIE9wdGlvbnMiDQogICAgLQkJc291cmNlICIk
S0NPTkZJR19BUFBfSU4iDQogICAgKwkJc291cmNlICIkKEtDT05GSUdfQVBQX0lOKSINCiAgICAg
CWVuZG1lbnUNCiAgICAgZW5kaWYNCiAgICAgDQogICAgIGNvbmZpZyBVS19OQU1FDQogICAgIAlz
dHJpbmcgIkltYWdlIG5hbWUiDQogICAgLQlkZWZhdWx0ICRVS19ERUZOQU1FDQogICAgKwlkZWZh
dWx0IFVLX0RFRk5BTUUNCiAgICAgCWhlbHANCiAgICAgCSAgTmFtZSB0byBiZSB1c2VkIGZvciBm
aW5hbCBpbWFnZQ0KICAgIGRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlDQogICAgaW5k
ZXggYWZiODIwNi4uYzdhNmE5OSAxMDA2NDQNCiAgICAtLS0gYS9NYWtlZmlsZQ0KICAgICsrKyBi
L01ha2VmaWxlDQogICAgQEAgLTEyNywxMSArMTI3LDExIEBAIEVMSUJfRElSIDo9ICQocmVhbHBh
dGggJChwYXRzdWJzdCAlLywlLCQocGF0c3Vic3QgJS4sJSwkKEVMSUJfRElSKSkpKQ0KICAgICAj
IEtDb25maWcgc2V0dGluZ3MNCiAgICAgQ09ORklHX0RJUiAgICAgICAgICAgIDo9ICQoQ09ORklH
X1VLX0FQUCkNCiAgICAgQ09ORklHX0NPTkZJR19JTiAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0Up
L0NvbmZpZy51aw0KICAgIC1DT05GSUcgICAgICAgICAgICAgICAgOj0gJChDT05GSUdfVUtfQkFT
RSkvc3VwcG9ydC9rY29uZmlnDQogICAgK0NPTkZJRyAgICAgICAgICAgICAgICA6PSAkKENPTkZJ
R19VS19CQVNFKS9zdXBwb3J0L2tjb25maWcubmV3DQogICAgIFVLX0NPTkZJRyAgICAgICAgICAg
ICA6PSAkKENPTkZJR19ESVIpLy5jb25maWcNCiAgICAgVUtfQ09ORklHX09VVCAgICAgICAgIDo9
ICQoQlVJTERfRElSKS9jb25maWcNCiAgICAgVUtfR0VORVJBVEVEX0lOQ0xVREVTIDo9ICQoQlVJ
TERfRElSKS9pbmNsdWRlDQogICAgLUtDT05GSUdfRElSICAgICAgICAgICA6PSAkKEJVSUxEX0RJ
Uikva2NvbmZpZw0KICAgICtLQ09ORklHX0RJUiAgICAgICAgICAgOj0gJChCVUlMRF9ESVIpL2tj
b25maWcubmV3DQogICAgIFVLX0ZJWERFUCAgICAgICAgICAgICA6PSAkKEtDT05GSUdfRElSKS9m
aXhkZXANCiAgICAgS0NPTkZJR19BVVRPQ09ORklHICAgIDo9ICQoS0NPTkZJR19ESVIpL2F1dG8u
Y29uZg0KICAgICBLQ09ORklHX1RSSVNUQVRFICAgICAgOj0gJChLQ09ORklHX0RJUikvdHJpc3Rh
dGUuY29uZmlnDQogICAgQEAgLTQ3Myw2ICs0NzMsOCBAQCBBUgkJOj0gYXINCiAgICAgQ0FUCQk6
PSBjYXQNCiAgICAgU0VECQk6PSBzZWQNCiAgICAgQVdLCQk6PSBhd2sNCiAgICArWUFDQwkJOj0g
Ymlzb24NCiAgICArTEVYICAgICAJOj0gZmxleA0KICAgICBQQVRDSAkJOj0gcGF0Y2gNCiAgICAg
R1pJUAkJOj0gZ3ppcA0KICAgICBUQVIJCTo9IHRhcg0KICAgIEBAIC00OTYsNyArNDk4LDcgQEAg
Q1hYRkxBR1MJKz0gLURDQ19WRVJTSU9OPSQoQ0NfVkVSU0lPTikNCiAgICAgR09DRkxBR1MJKz0g
LURDQ19WRVJTSU9OPSQoQ0NfVkVSU0lPTikNCiAgICAgDQogICAgICMgZW5zdXJlICQoQlVJTERf
RElSKS9rY29uZmlnLCAkKEJVSUxEX0RJUikvaW5jbHVkZSBhbmQgJChCVUlMRF9ESVIpL2luY2x1
ZGUvdWsgZXhpc3RzDQogICAgLSQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGtjb25maWcpDQogICAg
KyQoY2FsbCBta19zdWJfYnVpbGRfZGlyLGtjb25maWcubmV3KQ0KICAgICAkKGNhbGwgbWtfc3Vi
X2J1aWxkX2RpcixpbmNsdWRlKQ0KICAgICAkKGNhbGwgbWtfc3ViX2J1aWxkX2RpcixpbmNsdWRl
L3VrKQ0KICAgICANCiAgICBAQCAtNjYxLDEzICs2NjMsMTMgQEAgJChLQ09ORklHX0VQTEFUX0lO
KS5uZXc6DQogICAgICMgZW5mb3JjZSBleGVjdXRpb24NCiAgICAgLlBIT05ZOiAkKEtDT05GSUdf
QVBQX0lOKS5uZXcgJChLQ09ORklHX0VMSUJfSU4pLm5ldyAkKEtDT05GSUdfRVBMQVRfSU4pLm5l
dw0KICAgICANCiAgICAtS0NPTkZJR19UT09MUyA9IGNvbmYgbWNvbmYgZ2NvbmYgbmNvbmYgZml4
ZGVwDQogICAgK0tDT05GSUdfVE9PTFMgPSBjb25mIG1jb25mIGdjb25mIG5jb25mIHFjb25mIGZp
eGRlcA0KICAgICBLQ09ORklHX1RPT0xTIDo9ICQoYWRkcHJlZml4ICQoS0NPTkZJR19ESVIpLywk
KEtDT05GSUdfVE9PTFMpKQ0KICAgICANCiAgICAgJChLQ09ORklHX1RPT0xTKToNCiAgICAgCW1r
ZGlyIC1wICQoQEQpL2x4ZGlhbG9nDQogICAgIAkkKE1BS0UpIENDPSIkKEhPU1RDQ19OT0NDQUNI
RSkiIEhPU1RDQz0iJChIT1NUQ0NfTk9DQ0FDSEUpIiBcDQogICAgLQkgICAgb2JqPSQoQEQpIC1D
ICQoQ09ORklHKSAtZiBNYWtlZmlsZS5iciAkKEBGKQ0KICAgICsJICAgIG9iaj0kKEBEKSAtQyAk
KENPTkZJRykgLWYgTWFrZWZpbGUuYnIgJChAKQ0KICAgICANCiAgICAgREVGQ09ORklHID0gJChj
YWxsIHFzdHJpcCwkKFVLX0RFRkNPTkZJRykpDQogICAgIA0KICAgIEBAIC02NzUsNyArNjc3LDcg
QEAgREVGQ09ORklHID0gJChjYWxsIHFzdHJpcCwkKFVLX0RFRkNPTkZJRykpDQogICAgICMgcmVj
b2duaXplIHRoYXQgaWYgaXQncyBzdGlsbCBhdCBpdHMgZGVmYXVsdCAkKENPTkZJR19ESVIpL2Rl
ZmNvbmZpZw0KICAgICBDT01NT05fQ09ORklHX0VOViA9IFwNCiAgICAgCUNPTkZJR189IkNPTkZJ
R18iIFwNCiAgICAtCUJSMl9DT05GSUc9IiQoVUtfQ09ORklHKSIgXA0KICAgICsJS0NPTkZJR19D
T05GSUc9IiQoVUtfQ09ORklHKSIgXA0KICAgICAJS0NPTkZJR19BVVRPQ09ORklHPSIkKEtDT05G
SUdfQVVUT0NPTkZJRykiIFwNCiAgICAgCUtDT05GSUdfQVVUT0hFQURFUj0iJChLQ09ORklHX0FV
VE9IRUFERVIpIiBcDQogICAgIAlLQ09ORklHX1RSSVNUQVRFPSIkKEtDT05GSUdfVFJJU1RBVEUp
IiBcDQogICAgQEAgLTc2Myw3ICs3NjUsNyBAQCBzYXZlZGVmY29uZmlnOiAkKEtDT05GSUdfRElS
KS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSQ0KICAg
ICANCiAgICAgIyBSZWdlbmVyYXRlICQoS0NPTkZJR19BVVRPSEVBREVSKSB3aGVuZXZlciAkKFVL
X0NPTkZJRykgY2hhbmdlZA0KICAgICAkKEtDT05GSUdfQVVUT0hFQURFUik6ICQoVUtfQ09ORklH
KSAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lO
KSAkKEtDT05GSUdfRVBMQVRfSU4pDQogICAgLQlAJChDT01NT05fQ09ORklHX0VOVikgJChLQ09O
RklHX0RJUikvY29uZiAtLXNpbGVudG9sZGNvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pDQogICAg
KwlAJChDT01NT05fQ09ORklHX0VOVikgJChLQ09ORklHX0RJUikvY29uZiAtLXN5bmNjb25maWcg
JChDT05GSUdfQ09ORklHX0lOKQ0KICAgICANCiAgICAgDQogICAgICMgTWlzYyBzdHVmZg0KICAg
IGRpZmYgLS1naXQgYS9zdXBwb3J0L2J1aWxkL01ha2VmaWxlLnJ1bGVzIGIvc3VwcG9ydC9idWls
ZC9NYWtlZmlsZS5ydWxlcw0KICAgIGluZGV4IDc0YjZkN2QuLjkwNmEwYTYgMTAwNjQ0DQogICAg
LS0tIGEvc3VwcG9ydC9idWlsZC9NYWtlZmlsZS5ydWxlcw0KICAgICsrKyBiL3N1cHBvcnQvYnVp
bGQvTWFrZWZpbGUucnVsZXMNCiAgICBAQCAtMjM0LDcgKzIzNCw3IEBAIGRlcGZsYWdzID0gLVdw
JChjb21tYSktTUQkKGNvbW1hKSQoY2FsbCB0bXBfZGVwZmlsZSwkKDMpKQ0KICAgICBkZWZpbmUg
YnVpbGRfY21kX2ZpeGRlcCA9DQogICAgIAkkKGNhbGwgYnVpbGRfY21kLCQxLCQyLCQzLCQ0KQ0K
ICAgICAJJFEgJChVS19GSVhERVApICQoY2FsbCB0bXBfZGVwZmlsZSwkMykgJDMgJyQoY2FsbCBz
dHJpcCwkNCknIFwNCiAgICAtCQkkKEJVSUxEX0RJUikgCT4gJChjYWxsIG91dDJkZXAsJDMpICYm
IFwNCiAgICArCQk+ICQoY2FsbCBvdXQyZGVwLCQzKSAmJiBcDQogICAgIAkJJChSTSkgJChjYWxs
IHRtcF9kZXBmaWxlLCQzKQ0KICAgICBlbmRlZg0KICAgICANCiAgICAtLSANCiAgICAyLjcuNA0K
ICAgIA0KICAgIA0KICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fDQogICAgTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:41:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:41:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxcX-0000ci-Te; Thu, 19 Sep 2019 14:41:21 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxcW-0000cB-8s
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:41:20 +0000
X-Inumbo-ID: 8a2acc7c-daeb-11e9-9660-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8a2acc7c-daeb-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:41:18 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D1444F2025;
 Thu, 19 Sep 2019 16:41:17 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id RHqvuItK7Gfw; Thu, 19 Sep 2019 16:41:17 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id A940CF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:41:15 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:41:15 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:41:15
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 15/23] build: Use kconfiglib
 from Unikraft
Thread-Index: AQHVbssN/QX1woDz9EycUHU9se/I9qczEvwA
Date: Thu, 19 Sep 2019 14:41:15 +0000
Message-ID: <6A87F651-78E7-4D23-8CB1-0821C5C63A74@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-16-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-16-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <053C634F6DDDCF4399E3A70F047495C4@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 15/23] build: Use kconfiglib
 from Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFRoZSBwYXRjaCBpbnRy
b2R1Y2VzIHRoZSBrbWVudWNvbmZpZywgZ3VpY29uZmlnIHJ1bGVzIHRvIHVzZSB3aXRoDQogICAg
a2NvbmZpZ2xpYi4NCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxz
aGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAgICAgTWFrZWZpbGUgfCA0NSAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0NCiAgICAgMSBmaWxl
IGNoYW5nZWQsIDQyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQogICAgDQogICAgZGlm
ZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUNCiAgICBpbmRleCBjN2E2YTk5Li5iNmI2YzEy
IDEwMDY0NA0KICAgIC0tLSBhL01ha2VmaWxlDQogICAgKysrIGIvTWFrZWZpbGUNCiAgICBAQCAt
MTI4LDYgKzEyOCw3IEBAIEVMSUJfRElSIDo9ICQocmVhbHBhdGggJChwYXRzdWJzdCAlLywlLCQo
cGF0c3Vic3QgJS4sJSwkKEVMSUJfRElSKSkpKQ0KICAgICBDT05GSUdfRElSICAgICAgICAgICAg
Oj0gJChDT05GSUdfVUtfQVBQKQ0KICAgICBDT05GSUdfQ09ORklHX0lOICAgICAgOj0gJChDT05G
SUdfVUtfQkFTRSkvQ29uZmlnLnVrDQogICAgIENPTkZJRyAgICAgICAgICAgICAgICA6PSAkKENP
TkZJR19VS19CQVNFKS9zdXBwb3J0L2tjb25maWcubmV3DQogICAgK0NPTkZJR0xJQgkgICAgICA6
PSAkKENPTkZJR19VS19CQVNFKS9zdXBwb3J0L2tjb25maWdsaWINCiAgICAgVUtfQ09ORklHICAg
ICAgICAgICAgIDo9ICQoQ09ORklHX0RJUikvLmNvbmZpZw0KICAgICBVS19DT05GSUdfT1VUICAg
ICAgICAgOj0gJChCVUlMRF9ESVIpL2NvbmZpZw0KICAgICBVS19HRU5FUkFURURfSU5DTFVERVMg
Oj0gJChCVUlMRF9ESVIpL2luY2x1ZGUNCiAgICBAQCAtMTYxLDkgKzE2MiwxMyBAQCBleHBvcnQg
REFURSA6PSAkKHNoZWxsIGRhdGUgKyVZJW0lZCkNCiAgICAgDQogICAgICMgTWFrZWZpbGUgdGFy
Z2V0cw0KICAgICBudWxsX3RhcmdldHMJCTo9IHByaW50LXZlcnNpb24gcHJpbnQtdmFycyBoZWxw
DQogICAgLW5vY29uZmlnX3RhcmdldHMJOj0gbWVudWNvbmZpZyBuY29uZmlnIGdjb25maWcgeGNv
bmZpZyBjb25maWcgb2xkY29uZmlnIHJhbmRjb25maWcgXA0KICAgIC0JCQkgICBkZWZjb25maWcg
JV9kZWZjb25maWcgYWxseWVzY29uZmlnIGFsbG5vY29uZmlnIHNpbGVudG9sZGNvbmZpZyByZWxl
YXNlIFwNCiAgICAtCQkJICAgb2xkZGVmY29uZmlnIHByb3BlcmNsZWFuIGRpc3RjbGVhbiAkKG51
bGxfdGFyZ2V0cykNCiAgICArbm9jb25maWdfdGFyZ2V0cwk6PSB1a2NvbmZpZyBtZW51Y29uZmln
IG5jb25maWcgZ2NvbmZpZyB4Y29uZmlnIGNvbmZpZyBcDQogICAgKwkJCSAgIG9sZGNvbmZpZyBy
YW5kY29uZmlnIFwNCiAgICArCQkJICAgZGVmY29uZmlnICVfZGVmY29uZmlnIGFsbHllc2NvbmZp
ZyBhbGxub2NvbmZpZyBcDQogICAgKwkJCSAgIHNpbGVudG9sZGNvbmZpZyBcDQogICAgKwkJCSAg
IHJlbGVhc2Ugb2xkZGVmY29uZmlnIHByb3BlcmNsZWFuIGRpc3RjbGVhbiBcDQogICAgKwkJCSAg
IHNjcmlwdGNvbmZpZyBpc2NyaXB0Y29uZmlnIGttZW51Y29uZmlnIGd1aWNvbmZpZyBcDQogICAg
KwkJCSAgIGR1bXB2YXJzY29uZmlnICQobnVsbF90YXJnZXRzKQ0KICAgICANCiAgICAgIyBUbyBw
dXQgbW9yZSBmb2N1cyBvbiB3YXJuaW5ncywgYmUgbGVzcyB2ZXJib3NlIGFzIGRlZmF1bHQNCiAg
ICAgIyBVc2UgJ21ha2UgVj0xJyB0byBzZWUgdGhlIGZ1bGwgY29tbWFuZHMNCiAgICBAQCAtNjk0
LDYgKzY5OSwzOCBAQCBDT01NT05fQ09ORklHX0VOViA9IFwNCiAgICAgCUtDT05GSUdfRVBMQVRf
SU49IiQoS0NPTkZJR19FUExBVF9JTikiIFwNCiAgICAgCVVLX05BTUU9IiQoQ09ORklHX1VLX05B
TUUpIg0KICAgICANCiAgICArUEhPTlkgKz0gc2NyaXB0Y29uZmlnIGlzY3JpcHRjb25maWcga21l
bnVjb25maWcgZ3VpY29uZmlnIGR1bXB2YXJzY29uZmlnDQogICAgKw0KICAgICtQWVRIT05DTUQg
Pz0gcHl0aG9uDQogICAgK2tweXRob24gOj0gUFlUSE9OUEFUSD0kKFVLX0NPTkZJR0xJQik6JCRQ
WVRIT05QQVRIICQoUFlUSE9OQ01EKQ0KICAgICsNCiAgICAraWZuZXEgKCQoZmlsdGVyIHNjcmlw
dGNvbmZpZywkKE1BS0VDTURHT0FMUykpLCkNCiAgICAraWZuZGVmIFNDUklQVA0KICAgICskKGVy
cm9yIFVzZSAibWFrZSBzY3JpcHRjb25maWcgU0NSSVBUPTxwYXRoIHRvIHNjcmlwdD4gW1NDUklQ
VF9BUkc9PGFyZ3VtZW50Pl0iKQ0KICAgICtlbmRpZg0KICAgICtlbmRpZg0KICAgICsNCiAgICAr
c2NyaXB0Y29uZmlnOiAkKEtDT05GSUdfRElSKS9maXhkZXANCiAgICArCSQoUSkkKENPTU1PTl9D
T05GSUdfRU5WKSAkKGtweXRob24pICQoU0NSSVBUKSAkKEtjb25maWcpICQoaWYgJChTQ1JJUFRf
QVJHKSwiJChTQ1JJUFRfQVJHKSIpDQogICAgKw0KICAgICtpc2NyaXB0Y29uZmlnOiAkKEtDT05G
SUdfRElSKS9maXhkZXANCiAgICArCSQoUSkkKENPTU1PTl9DT05GSUdfRU5WKSAkKGtweXRob24p
IC1pIC1jIFwNCiAgICArCSAgImltcG9ydCBrY29uZmlnbGliOyBcDQogICAgKwkgICBrY29uZiA9
IGtjb25maWdsaWIuS2NvbmZpZygnJChVS19DT05GSUcpJyk7IFwNCiAgICArCSAgIHByaW50KCdB
IEtjb25maWcgaW5zdGFuY2UgXCdrY29uZlwnIGZvciB0aGUgYXJjaGl0ZWN0dXJlICQoQVJDSCkg
aGFzIGJlZW4gY3JlYXRlZC4nKSINCiAgICArDQogICAgK2ttZW51Y29uZmlnOiQoS0NPTkZJR19E
SVIpL2ZpeGRlcCAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklH
X0VQTEFUX0lOKQ0KICAgICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChDT05G
SUdMSUIpL21lbnVjb25maWcucHkgJChDT05GSUdfQ09ORklHX0lOKQ0KICAgICsJQCQoU0NSSVBU
U19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICsN
CiAgICArZ3VpY29uZmlnOiAkKEtDT05GSUdfRElSKS9maXhkZXAgJChLQ09ORklHX0FQUF9JTikg
JChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikNCiAgICArCUAkKENPTU1PTl9D
T05GSUdfRU5WKSAkKGtweXRob24pICQoQ09ORklHTElCKS9ndWljb25maWcucHkgJChDT05GSUdf
Q09ORklHX0lOKQ0KICAgICsJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJ
RykgJChVS19DT05GSUdfT1VUKQ0KICAgICsNCiAgICArZHVtcHZhcnNjb25maWc6JChLQ09ORklH
X0RJUikvZml4ZGVwDQogICAgKwkkKFEpJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9uKSAk
KENPTkZJR0xJQikvZXhhbXBsZXMvZHVtcHZhcnMucHkgJChDT05GSUdfQ09ORklHX0lOKQ0KICAg
ICsJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdf
T1VUKQ0KICAgICsNCiAgICAgeGNvbmZpZzogJChLQ09ORklHX0RJUikvcWNvbmYgJChLQ09ORklH
X0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikNCiAgICAgCUAk
KENPTU1PTl9DT05GSUdfRU5WKSAkPCAkKENPTkZJR19DT05GSUdfSU4pDQogICAgIAlAJChTQ1JJ
UFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAg
QEAgLTg2Miw2ICs4OTksOCBAQCBoZWxwOg0KICAgICAJQGVjaG8gJ0NvbmZpZ3VyYXRpb246Jw0K
ICAgICAJQGVjaG8gJyogbWVudWNvbmZpZyAgICAgICAgICAgICAtIGludGVyYWN0aXZlIGN1cnNl
cy1iYXNlZCBjb25maWd1cmF0b3InDQogICAgIAlAZWNobyAnICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGRlZmF1bHQgdGFyZ2V0IHdoZW4gbm8gY29uZmlnIGV4aXN0cyknDQogICAgKwlAZWNo
byAnICBrbWVudWNvbmZpZyAgICAgICAgICAgIC0gaW50ZXJhY3RpdmUgcHl0aG9uIGJhc2VkIGNv
bmZpZ3VyYXRvcicNCiAgICArCUBlY2hvICcgIGd1aWNvbmZpZyAgICAgICAgICAgICAgLSBpbnRl
cmFjdGl2ZSBweXRob24gYmFzZWQgY29uZmlndXJhdG9yJw0KICAgICAJQGVjaG8gJyAgbmNvbmZp
ZyAgICAgICAgICAgICAgICAtIGludGVyYWN0aXZlIG5jdXJzZXMtYmFzZWQgY29uZmlndXJhdG9y
Jw0KICAgICAJQGVjaG8gJyAgeGNvbmZpZyAgICAgICAgICAgICAgICAtIGludGVyYWN0aXZlIFF0
LWJhc2VkIGNvbmZpZ3VyYXRvcicNCiAgICAgCUBlY2hvICcgIGdjb25maWcgICAgICAgICAgICAg
ICAgLSBpbnRlcmFjdGl2ZSBHVEstYmFzZWQgY29uZmlndXJhdG9yJw0KICAgIC0tIA0KICAgIDIu
Ny40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:41:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:41:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxcm-0000fr-Vq; Thu, 19 Sep 2019 14:41:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxcl-0000fC-DS
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:41:35 +0000
X-Inumbo-ID: 939ba042-daeb-11e9-9661-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 939ba042-daeb-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:41:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B7D1FF2033;
 Thu, 19 Sep 2019 16:41:33 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id bCYZM57vMHhD; Thu, 19 Sep 2019 16:41:33 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 8D8E3F2025
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:41:31 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:41:31 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:41:31
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 16/23] Replace the
 silentoldconfig with syncconfig
Thread-Index: AQHVbssPkeDcmRl5DEisvYsPSbubZKczEw8A
Date: Thu, 19 Sep 2019 14:41:31 +0000
Message-ID: <044B366C-D1FA-413A-A9A5-0B5294E4A91E@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-17-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-17-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <9A6EA0341850AC478EC4C1D7C4E0EE43@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 16/23] Replace the
 silentoldconfig with syncconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFRoZSBzaWxlbnRvbGRj
b25maWcgaGFzIGJlZW4gcmVwbGFjZWQgaW4gdGhlIG5ld2VyIGZlYXR1cmUgb2Yga2NvbmZpZw0K
ICAgIHdpdGggdGhlIHN5bmNjb25maWcuIFdpdGggdGhpcyBwYXRjaCB3ZSByZXBsYWNlIGl0Lg0K
ICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFu
YW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBNYWtlZmlsZSB8IDYgKysrLS0tDQogICAgIDEg
ZmlsZSBjaGFuZ2VkLCAzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQogICAgDQogICAg
ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUNCiAgICBpbmRleCBiNmI2YzEyLi45ZGYy
ZWU3IDEwMDY0NA0KICAgIC0tLSBhL01ha2VmaWxlDQogICAgKysrIGIvTWFrZWZpbGUNCiAgICBA
QCAtNzc0LDggKzc3NCw4IEBAIGFsbG5vY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NP
TkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfDQogICAgIAlAJChDT01N
T05fQ09ORklHX0VOVikgJDwgLS1vbGRkZWZjb25maWcgJChDT05GSUdfQ09ORklHX0lOKSA+L2Rl
di9udWxsDQogICAgIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAk
KFVLX0NPTkZJR19PVVQpDQogICAgIA0KICAgIC1zaWxlbnRvbGRjb25maWc6ICQoS0NPTkZJR19E
SVIpL2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19F
UExBVF9JTikNCiAgICAtCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLXNpbGVudG9sZGNvbmZp
ZyAkKENPTkZJR19DT05GSUdfSU4pDQogICAgK3N5bmNjb25maWc6ICQoS0NPTkZJR19ESVIpL2Nv
bmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9J
TikNCiAgICArCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAtLXN5bmNjb25maWcgJChDT05GSUdf
Q09ORklHX0lOKQ0KICAgICAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJ
RykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAgb2xkZGVmY29uZmlnOiAkKEtDT05GSUdf
RElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdf
RVBMQVRfSU4pDQogICAgQEAgLTkwNSw3ICs5MDUsNyBAQCBoZWxwOg0KICAgICAJQGVjaG8gJyAg
eGNvbmZpZyAgICAgICAgICAgICAgICAtIGludGVyYWN0aXZlIFF0LWJhc2VkIGNvbmZpZ3VyYXRv
cicNCiAgICAgCUBlY2hvICcgIGdjb25maWcgICAgICAgICAgICAgICAgLSBpbnRlcmFjdGl2ZSBH
VEstYmFzZWQgY29uZmlndXJhdG9yJw0KICAgICAJQGVjaG8gJyAgb2xkY29uZmlnICAgICAgICAg
ICAgICAtIHJlc29sdmUgYW55IHVucmVzb2x2ZWQgc3ltYm9scyBpbiAuY29uZmlnJw0KICAgIC0J
QGVjaG8gJyAgc2lsZW50b2xkY29uZmlnICAgICAgICAtIFNhbWUgYXMgb2xkY29uZmlnLCBidXQg
cXVpZXRseSwgYWRkaXRpb25hbGx5IHVwZGF0ZSBkZXBzJw0KICAgICsJQGVjaG8gJyAgc3luY2Nv
bmZpZyAgICAgICAgICAgICAtIFNhbWUgYXMgb2xkY29uZmlnLCBidXQgcXVpZXRseSwgYWRkaXRp
b25hbGx5IHVwZGF0ZSBkZXBzJw0KICAgICAJQGVjaG8gJyAgb2xkZGVmY29uZmlnICAgICAgICAg
ICAtIFNhbWUgYXMgc2lsZW50b2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRoZWly
IGRlZmF1bHQgdmFsdWUnDQogICAgIAlAZWNobyAnICByYW5kY29uZmlnICAgICAgICAgICAgIC0g
TmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIgdG8gYWxsIG9wdGlvbnMnDQogICAgIAlAZWNo
byAnICBkZWZjb25maWcgICAgICAgICAgICAgIC0gTmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgYW5z
d2VyIHRvIGFsbCBvcHRpb25zJw0KICAgIC0tIA0KICAgIDIuNy40DQogICAgDQogICAgDQogICAg
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:41:51 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:41:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxd1-0000ju-1x; Thu, 19 Sep 2019 14:41:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxcz-0000jb-J2
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:41:49 +0000
X-Inumbo-ID: 9bebe57c-daeb-11e9-9661-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9bebe57c-daeb-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:41:48 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id A893C1056DE;
 Thu, 19 Sep 2019 16:41:47 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2tJAqm03YyCw; Thu, 19 Sep 2019 16:41:47 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4714C1056DB
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:41:47 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:41:46 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:41:46
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 17/23] lib: Use glob instead
 of adding each lib
Thread-Index: AQHVbssTNajBvfZ48UyGevjzsTb1pqczEyIA
Date: Thu, 19 Sep 2019 14:41:46 +0000
Message-ID: <4122C6B7-3710-48EC-864A-DEDE465AA651@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-18-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-18-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <6A0B8DF92D4E8B4FAAE1D7EC086D0820@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 17/23] lib: Use glob instead
 of adding each lib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFNpbmNlIHRoZSBrY29u
ZmlnIHZlcnNpb24gc3VwcG9ydHMgd2lsZCBjYXJkIG9wZXJhdGlvbnMNCiAgICB3ZSByZXBsYWNl
IGFkZGl0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIGxpYnJhcnkgd2l0aCBhIHdpbGQNCiAgICBjYXJk
IG9wZXJhdGlvbiBvbiB0aGUgJ2xpYi8nIGRpcmVjdG9yeS4NCiAgICANCiAgICBTaWduZWQtb2Zm
LWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICAt
LS0NCiAgICAgbGliL0NvbmZpZy51ayB8IDI4ICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N
CiAgICAgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAyNyBkZWxldGlvbnMoLSkNCiAg
ICANCiAgICBkaWZmIC0tZ2l0IGEvbGliL0NvbmZpZy51ayBiL2xpYi9Db25maWcudWsNCiAgICBp
bmRleCBmMGQ2MjA1Li4yM2U3MDVkIDEwMDY0NA0KICAgIC0tLSBhL2xpYi9Db25maWcudWsNCiAg
ICArKysgYi9saWIvQ29uZmlnLnVrDQogICAgQEAgLTI3LDMwICsyNyw0IEBAIGNvbmZpZyBIQVZF
X05XX1NUQUNLDQogICAgICMgTGlicmFyeSBkZWZpbml0aW9ucw0KICAgICAjDQogICAgICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQogICAgLXNvdXJjZSAibGliL3VrYm9vdC9Db25maWcudWsiDQog
ICAgLXNvdXJjZSAibGliL3VrZGVidWcvQ29uZmlnLnVrIg0KICAgIC1zb3VyY2UgImxpYi91a2Fy
Z3BhcnNlL0NvbmZpZy51ayINCiAgICAtc291cmNlICJsaWIvdWt1bmlzdGQvQ29uZmlnLnVrIg0K
ICAgIC1zb3VyY2UgImxpYi91a3N5c2luZm8vQ29uZmlnLnVrIg0KICAgIC1zb3VyY2UgImxpYi91
a3RpbWVjb252L0NvbmZpZy51ayINCiAgICAtc291cmNlICJsaWIvbm9saWJjL0NvbmZpZy51ayIN
CiAgICAtc291cmNlICJsaWIvdWthbGxvYy9Db25maWcudWsiDQogICAgLXNvdXJjZSAibGliL3Vr
YWxsb2NiYnVkZHkvQ29uZmlnLnVrIg0KICAgIC1zb3VyY2UgImxpYi91a3NjaGVkL0NvbmZpZy51
ayINCiAgICAtc291cmNlICJsaWIvdWtzY2hlZGNvb3AvQ29uZmlnLnVrIg0KICAgIC1zb3VyY2Ug
ImxpYi9mZHQvQ29uZmlnLnVrIg0KICAgIC1zb3VyY2UgImxpYi9zeXNjYWxsX3NoaW0vQ29uZmln
LnVrIg0KICAgIC1zb3VyY2UgImxpYi92ZnNjb3JlL0NvbmZpZy51ayINCiAgICAtc291cmNlICJs
aWIvcmFtZnMvQ29uZmlnLnVrIg0KICAgIC1zb3VyY2UgImxpYi9kZXZmcy9Db25maWcudWsiDQog
ICAgLXNvdXJjZSAibGliLzlwZnMvQ29uZmlnLnVrIg0KICAgIC1zb3VyY2UgImxpYi91a2xvY2sv
Q29uZmlnLnVrIg0KICAgIC1zb3VyY2UgImxpYi91a21waS9Db25maWcudWsiDQogICAgLXNvdXJj
ZSAibGliL3Vrc3dyYW5kL0NvbmZpZy51ayINCiAgICAtc291cmNlICJsaWIvdWtidXMvQ29uZmln
LnVrIg0KICAgIC1zb3VyY2UgImxpYi91a3NnbGlzdC9Db25maWcudWsiDQogICAgLXNvdXJjZSAi
bGliL3VrbmV0ZGV2L0NvbmZpZy51ayINCiAgICAtc291cmNlICJsaWIvdWs5cC9Db25maWcudWsi
DQogICAgLXNvdXJjZSAibGliL3Bvc2l4LWxpYmRsL0NvbmZpZy51ayINCiAgICAtc291cmNlICJs
aWIvdWtsaWJwYXJhbS9Db25maWcudWsiDQogICAgLXNvdXJjZSAibGliL3VrdGltZS9Db25maWcu
dWsiDQogICAgK3NvdXJjZSAibGliLyovQ29uZmlnLnVrIg0KICAgIC0tIA0KICAgIDIuNy40DQog
ICAgDQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:42:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:42:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxdd-0000t2-51; Thu, 19 Sep 2019 14:42:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxdc-0000sY-24
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:42:28 +0000
X-Inumbo-ID: b295ae84-daeb-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b295ae84-daeb-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 14:42:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id C8C641056D8;
 Thu, 19 Sep 2019 16:42:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id yL035-2SK4Bl; Thu, 19 Sep 2019 16:42:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id A1D50105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:42:25 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:42:25 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:42:25
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 18/23] build: Pre-process
 Config.uk within kconfig
Thread-Index: AQHVbssUPvY0laG0qEeE87ejqLJ8WqczE1AA
Date: Thu, 19 Sep 2019 14:42:24 +0000
Message-ID: <F6FC7A89-70F6-49E3-81F6-9829F12F0557@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-19-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-19-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <2FD9778BA0EF554B8D887DED5C5EDF07@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 18/23] build: Pre-process
 Config.uk within kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFRoZSBrY29uZmlnIGV4
dGVybmFsIGxpYnJhcnkgd2VyZSBwcm9jZXNzZWQgaW4gdGhlIE1ha2VmaWxlLiBXaXRoDQogICAg
dGhpcyBwYXRjaCB3ZSB1c2UgdGhlIGtjb25maWcgcHJlcHJvY2VzcyBmZWF0dXJlIHRvIGdlbmVy
YXRlIHRoZQ0KICAgIG5lY2Vzc2FyeSBDb25maWcudWsgZmlsZXMNCiAgICANCiAgICBTaWduZWQt
b2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAg
ICAtLS0NCiAgICAgQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMyAr
KystLS0tLQ0KICAgICBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDg2
ICsrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgbGliL0NvbmZpZy51ayAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgOCAtLS0NCiAgICAgcGxhdC9Db25maWcudWsgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgNCAtLQ0KICAgICBzdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29u
ZmlndXJlLnNoIHwgMTAyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiAgICAg
NSBmaWxlcyBjaGFuZ2VkLCAxNDEgaW5zZXJ0aW9ucygrKSwgODIgZGVsZXRpb25zKC0pDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L3NjcmlwdHMvdWtfYnVpbGRfY29uZmlndXJlLnNo
DQogICAgDQogICAgZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51aw0KICAgIGluZGV4
IDIxYWU2NTcuLjAxYTdhYzggMTAwNjQ0DQogICAgLS0tIGEvQ29uZmlnLnVrDQogICAgKysrIGIv
Q29uZmlnLnVrDQogICAgQEAgLTMsMTYgKzMsNiBAQA0KICAgICAjIHNlZSBodHRwczovL3d3dy5r
ZXJuZWwub3JnL2RvYy9Eb2N1bWVudGF0aW9uL2tidWlsZC9Db25maWcuaW4tbGFuZ3VhZ2UudHh0
Lg0KICAgICAjDQogICAgIG1haW5tZW51ICJVbmlrcmFmdC8kKFVLX0ZVTExWRVJTSU9OKSBDb25m
aWd1cmF0aW9uIg0KICAgIC1jb25maWcgS0NPTkZJR19BUFBfSU4NCiAgICAtCXN0cmluZw0KICAg
IC0JZGVmYXVsdCAiJChLQ09ORklHX0FQUF9JTikiDQogICAgLWNvbmZpZyBLQ09ORklHX0VMSUJf
SU4NCiAgICAtCXN0cmluZw0KICAgIC0JZGVmYXVsdCAiJChLQ09ORklHX0VMSUJfSU4pIg0KICAg
IC1jb25maWcgS0NPTkZJR19FUExBVF9JTg0KICAgIC0Jc3RyaW5nDQogICAgLQlkZWZhdWx0ICIk
KEtDT05GSUdfRVBMQVRfSU4pIg0KICAgIC0NCiAgICAgY29uZmlnIFVLX0ZVTExWRVJTSU9ODQog
ICAgIAlzdHJpbmcNCiAgICAgCWRlZmF1bHQgIiQoVUtfRlVMTFZFUlNJT04pIg0KICAgIEBAIC0y
Miw2ICsxMiw5IEBAIGNvbmZpZyBVS19DT0RFTkFNRQ0KICAgICBjb25maWcgVUtfQVJDSA0KICAg
ICAJc3RyaW5nDQogICAgIAlkZWZhdWx0ICIkKFVLX0FSQ0gpIg0KICAgICtjb25maWcgTk9fQVBQ
DQogICAgKwlkZWZfYm9vbCAkKHNoZWxsLHRlc3QgJChVS19CQVNFKSA9ICQoVUtfQVBQKSAmJiBl
Y2hvIHkgfHwgZWNobyBuKQ0KICAgICsNCiAgICAgY29uZmlnIFVLX0JBU0UNCiAgICAgCXN0cmlu
Zw0KICAgICAJZGVmYXVsdCAiJChVS19CQVNFKSINCiAgICBAQCAtMzcsMTMgKzMwLDExIEBAIG1l
bnUgIkFyY2hpdGVjdHVyZSBTZWxlY3Rpb24iDQogICAgIGVuZG1lbnUNCiAgICAgDQogICAgIG1l
bnUgIlBsYXRmb3JtIENvbmZpZ3VyYXRpb24iDQogICAgLQlzb3VyY2UgInBsYXQvQ29uZmlnLnVr
Ig0KICAgIC0Jc291cmNlICIkKEtDT05GSUdfRVBMQVRfSU4pIg0KICAgICsJc291cmNlICIkKHNo
ZWxsLCQoVUtfQkFTRSkvc3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaCAtcCAn
JChLQ09ORklHX1BMQVRfRElSKScgLW8gJyQoS0NPTkZJR19QTEFUX0lOKScpIg0KICAgICBlbmRt
ZW51DQogICAgIA0KICAgICBtZW51ICJMaWJyYXJ5IENvbmZpZ3VyYXRpb24iDQogICAgLQlzb3Vy
Y2UgImxpYi9Db25maWcudWsiDQogICAgLQlzb3VyY2UgIiQoS0NPTkZJR19FTElCX0lOKSINCiAg
ICArCXNvdXJjZSAiJChzaGVsbCwkKFVLX0JBU0UpL3N1cHBvcnQvc2NyaXB0cy91a19idWlsZF9j
b25maWd1cmUuc2ggLWUgJyQoS0NPTkZJR19MSUJfRElSKScgLW8gJyQoS0NPTkZJR19MSUJfSU4p
JykiDQogICAgIGVuZG1lbnUNCiAgICAgDQogICAgIG1lbnUgIkJ1aWxkIE9wdGlvbnMiDQogICAg
QEAgLTE4Miw5ICsxNzMsOSBAQCBjb25maWcgQ1JPU1NfQ09NUElMRQ0KICAgICAjCSAgc3lzdGVt
Lg0KICAgICBlbmRtZW51DQogICAgIA0KICAgIC1pZiBVS19BUFAgIT0gVUtfQkFTRQ0KICAgICtp
ZiAhTk9fQVBQDQogICAgIAltZW51ICJBcHBsaWNhdGlvbiBPcHRpb25zIg0KICAgIC0JCXNvdXJj
ZSAiJChLQ09ORklHX0FQUF9JTikiDQogICAgKwkJc291cmNlICIkKHNoZWxsLCQoVUtfQkFTRSkv
c3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaCAtYSAnJChLQ09ORklHX0FQUF9E
SVIpJykiDQogICAgIAllbmRtZW51DQogICAgIGVuZGlmDQogICAgIA0KICAgIGRpZmYgLS1naXQg
YS9NYWtlZmlsZSBiL01ha2VmaWxlDQogICAgaW5kZXggOWRmMmVlNy4uNGU4NzNmMSAxMDA2NDQN
CiAgICAtLS0gYS9NYWtlZmlsZQ0KICAgICsrKyBiL01ha2VmaWxlDQogICAgQEAgLTEyNSw2ICsx
MjUsOCBAQCBlbmRpZg0KICAgICBFTElCX0RJUiA6PSAkKHJlYWxwYXRoICQocGF0c3Vic3QgJS8s
JSwkKHBhdHN1YnN0ICUuLCUsJChFTElCX0RJUikpKSkNCiAgICAgDQogICAgICMgS0NvbmZpZyBz
ZXR0aW5ncw0KICAgICsNCiAgICArQ09ORklHX1VLX1BMQVQgICAgICAgIDo9ICQoQ09ORklHX1VL
X0JBU0UpL3BsYXQvDQogICAgIENPTkZJR19ESVIgICAgICAgICAgICA6PSAkKENPTkZJR19VS19B
UFApDQogICAgIENPTkZJR19DT05GSUdfSU4gICAgICA6PSAkKENPTkZJR19VS19CQVNFKS9Db25m
aWcudWsNCiAgICAgQ09ORklHICAgICAgICAgICAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0UpL3N1
cHBvcnQva2NvbmZpZy5uZXcNCiAgICBAQCAtMTM3LDkgKzEzOSwxMiBAQCBVS19GSVhERVAgICAg
ICAgICAgICAgOj0gJChLQ09ORklHX0RJUikvZml4ZGVwDQogICAgIEtDT05GSUdfQVVUT0NPTkZJ
RyAgICA6PSAkKEtDT05GSUdfRElSKS9hdXRvLmNvbmYNCiAgICAgS0NPTkZJR19UUklTVEFURSAg
ICAgIDo9ICQoS0NPTkZJR19ESVIpL3RyaXN0YXRlLmNvbmZpZw0KICAgICBLQ09ORklHX0FVVE9I
RUFERVIgICAgOj0gJChVS19HRU5FUkFURURfSU5DTFVERVMpL3VrL19jb25maWcuaA0KICAgIC1L
Q09ORklHX0FQUF9JTiAgICAgICAgOj0gJChLQ09ORklHX0RJUikvYXBwLnVrDQogICAgLUtDT05G
SUdfRVBMQVRfSU4gICAgICA6PSAkKEtDT05GSUdfRElSKS9lcGxhdC51aw0KICAgIC1LQ09ORklH
X0VMSUJfSU4gICAgICAgOj0gJChLQ09ORklHX0RJUikvZWxpYi51aw0KICAgICtLQ09ORklHX0FQ
UF9ESVIgICAgICAgOj0gJChDT05GSUdfVUtfQVBQKQ0KICAgICtLQ09ORklHX0xJQl9JTiAgICAg
ICAgOj0gJChLQ09ORklHX0RJUikvbGlicy51aw0KICAgICtLQ09ORklHX0RFRl9QTEFUUyAgICAg
Oj0gJChhZGRwcmVmaXggJChDT05GSUdfVUtfUExBVCksbGludXh1IGt2bSB4ZW4pDQogICAgK0tD
T05GSUdfTElCX0RJUiAgICAgICA6PSAkKENPTkZJR19VS19CQVNFKS9saWIgJChFTElCX0RJUikN
CiAgICArS0NPTkZJR19QTEFUX0RJUiAgICAgIDo9ICQoS0NPTkZJR19ERUZfUExBVFMpICQoRVBM
QVRfRElSKSAkKENPTkZJR19VS19QTEFUKQ0KICAgICtLQ09ORklHX1BMQVRfSU4gICAgICAgOj0g
JChLQ09ORklHX0RJUikvcGxhdC51aw0KICAgICANCiAgICAgIyBNYWtlZmlsZSBzdXBwb3J0IHNj
cmlwdHMNCiAgICAgU0NSSVBUU19ESVIgOj0gJChDT05GSUdfVUtfQkFTRSkvc3VwcG9ydC9zY3Jp
cHRzDQogICAgQEAgLTYzOCwzNiArNjQzLDYgQEAgZW5kaWYNCiAgICAgSE9TVENGTEFHUyA9ICQo
Q0ZMQUdTX0ZPUl9CVUlMRCkNCiAgICAgZXhwb3J0IEhPU1RDRkxBR1MNCiAgICAgDQogICAgLSMg
YXV0by1nZW5lcmF0ZWQgS0NvbmZpZyBmaWxlcyBmb3IgaW5jbHVkaW5nIGV4dGVybmFsIGFwcA0K
ICAgIC0kKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFU
X0lOKTogJTogJS5uZXcNCiAgICAtCUBjbXAgLXMgJF4gJEA7IGlmIFsgJCQ/IC1uZSAwIF07IHRo
ZW4gY3AgJF4gJEA7IGZpDQogICAgLQ0KICAgIC0kKEtDT05GSUdfQVBQX0lOKS5uZXc6DQogICAg
LQlAZWNobyAnIyBleHRlcm5hbCBhcHBsaWNhdGlvbicgPiAkQA0KICAgIC1pZm5lcSAoJChDT05G
SUdfVUtfQkFTRSksJChDT05GSUdfVUtfQVBQKSkNCiAgICAtCUBlY2hvICdzb3VyY2UgIiQoQVBQ
X0RJUikvQ29uZmlnLnVrIicgPj4gJEANCiAgICAtZWxzZQ0KICAgIC0JQGVjaG8gJ2NvbW1lbnQg
Ik5vIGV4dGVybmFsIGFwcGxpY2F0aW9uIHNwZWNpZmllZCInID4+ICRADQogICAgLWVuZGlmDQog
ICAgLQ0KICAgIC0jIGF1dG8tZ2VuZXJhdGVkIEtDb25maWcgZmlsZXMgZm9yIGluY2x1ZGluZyBl
eHRlcm5hbCBsaWJyYXJpZXMNCiAgICAtJChLQ09ORklHX0VMSUJfSU4pLm5ldzoNCiAgICAtCUBl
Y2hvICcjIGV4dGVybmFsIGxpYnJhcmllcycgPiAkQA0KICAgIC0JQCQoZm9yZWFjaCBFLCQoRUxJ
Ql9ESVIpLCBcDQogICAgLQkJZWNobyAnc291cmNlICIkKEUpL0NvbmZpZy51ayInID4+ICRAOyBc
DQogICAgLQkpDQogICAgLQ0KICAgIC0jIGF1dG8tZ2VuZXJhdGVkIEtDb25maWcgZmlsZSBmb3Ig
aW5jbHVkaW5nDQogICAgLSMgZXh0ZXJuYWwgcGxhdGZvcm0gbGlicmFyaWVzIHRvIHRoZSBtZW51
DQogICAgLSQoS0NPTkZJR19FUExBVF9JTikubmV3Og0KICAgIC0JQGVjaG8gJyMgZXh0ZXJuYWwg
cGxhdGZvcm0gbGlicmFyaWVzJyA+ICRADQogICAgLQlAJChmb3JlYWNoIEUsJChFUExBVF9ESVIp
LCBcDQogICAgLQkJZWNobyAnc291cmNlICIkKEUpL0NvbmZpZy51ayInID4+ICRAOyBcDQogICAg
LQkpDQogICAgLQ0KICAgIC0jIGVuZm9yY2UgZXhlY3V0aW9uDQogICAgLS5QSE9OWTogJChLQ09O
RklHX0FQUF9JTikubmV3ICQoS0NPTkZJR19FTElCX0lOKS5uZXcgJChLQ09ORklHX0VQTEFUX0lO
KS5uZXcNCiAgICAtDQogICAgIEtDT05GSUdfVE9PTFMgPSBjb25mIG1jb25mIGdjb25mIG5jb25m
IHFjb25mIGZpeGRlcA0KICAgICBLQ09ORklHX1RPT0xTIDo9ICQoYWRkcHJlZml4ICQoS0NPTkZJ
R19ESVIpLywkKEtDT05GSUdfVE9PTFMpKQ0KICAgICANCiAgICBAQCAtNjk0LDkgKzY2OSwxMSBA
QCBDT01NT05fQ09ORklHX0VOViA9IFwNCiAgICAgCVVLX0ZVTExWRVJTSU9OPSIkKFVLX0ZVTExW
RVJTSU9OKSIgXA0KICAgICAJVUtfQ09ERU5BTUU9IiQoVUtfQ09ERU5BTUUpIiBcDQogICAgIAlV
S19BUkNIPSIkKENPTkZJR19VS19BUkNIKSIgXA0KICAgIC0JS0NPTkZJR19BUFBfSU49IiQoS0NP
TkZJR19BUFBfSU4pIiBcDQogICAgLQlLQ09ORklHX0VMSUJfSU49IiQoS0NPTkZJR19FTElCX0lO
KSIgXA0KICAgIC0JS0NPTkZJR19FUExBVF9JTj0iJChLQ09ORklHX0VQTEFUX0lOKSIgXA0KICAg
ICsJS0NPTkZJR19BUFBfRElSPSIkKEtDT05GSUdfQVBQX0RJUikiIFwNCiAgICArCUtDT05GSUdf
TElCX0RJUj0iJChLQ09ORklHX0xJQl9ESVIpIiBcDQogICAgKwlLQ09ORklHX0xJQl9JTj0iJChL
Q09ORklHX0xJQl9JTikiIFwNCiAgICArCUtDT05GSUdfUExBVF9ESVI9IiQoS0NPTkZJR19QTEFU
X0RJUikiIFwNCiAgICArCUtDT05GSUdfUExBVF9JTj0iJChLQ09ORklHX1BMQVRfSU4pIiBcDQog
ICAgIAlVS19OQU1FPSIkKENPTkZJR19VS19OQU1FKSINCiAgICAgDQogICAgIFBIT05ZICs9IHNj
cmlwdGNvbmZpZyBpc2NyaXB0Y29uZmlnIGttZW51Y29uZmlnIGd1aWNvbmZpZyBkdW1wdmFyc2Nv
bmZpZw0KICAgIEBAIC03MTksMTEgKzY5NiwxMiBAQCBpc2NyaXB0Y29uZmlnOiAkKEtDT05GSUdf
RElSKS9maXhkZXANCiAgICAgCSAgIGtjb25mID0ga2NvbmZpZ2xpYi5LY29uZmlnKCckKFVLX0NP
TkZJRyknKTsgXA0KICAgICAJICAgcHJpbnQoJ0EgS2NvbmZpZyBpbnN0YW5jZSBcJ2tjb25mXCcg
Zm9yIHRoZSBhcmNoaXRlY3R1cmUgJChBUkNIKSBoYXMgYmVlbiBjcmVhdGVkLicpIg0KICAgICAN
CiAgICAta21lbnVjb25maWc6JChLQ09ORklHX0RJUikvZml4ZGVwICQoS0NPTkZJR19BUFBfSU4p
ICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pDQogICAgLQlAJChDT01NT05f
Q09ORklHX0VOVikgJChrcHl0aG9uKSAkKENPTkZJR0xJQikvbWVudWNvbmZpZy5weSAkKENPTkZJ
R19DT05GSUdfSU4pDQogICAgK2ttZW51Y29uZmlnOiQoS0NPTkZJR19ESVIpL2ZpeGRlcA0KICAg
ICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChDT05GSUdMSUIpL21lbnVjb25m
aWcucHkgXA0KICAgICsJCSQoQ09ORklHX0NPTkZJR19JTikNCiAgICAgCUAkKFNDUklQVFNfRElS
KS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAgICAgDQogICAg
LWd1aWNvbmZpZzogJChLQ09ORklHX0RJUikvZml4ZGVwICQoS0NPTkZJR19BUFBfSU4pICQoS0NP
TkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pDQogICAgK2d1aWNvbmZpZzogJChLQ09O
RklHX0RJUikvZml4ZGVwDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9uKSAk
KENPTkZJR0xJQikvZ3VpY29uZmlnLnB5ICQoQ09ORklHX0NPTkZJR19JTikNCiAgICAgCUAkKFND
UklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAg
ICAgDQogICAgQEAgLTczMSwyMyArNzA5LDIzIEBAIGR1bXB2YXJzY29uZmlnOiQoS0NPTkZJR19E
SVIpL2ZpeGRlcA0KICAgICAJJChRKSQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChD
T05GSUdMSUIpL2V4YW1wbGVzL2R1bXB2YXJzLnB5ICQoQ09ORklHX0NPTkZJR19JTikNCiAgICAg
CUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09V
VCkNCiAgICAgDQogICAgLXhjb25maWc6ICQoS0NPTkZJR19ESVIpL3Fjb25mICQoS0NPTkZJR19B
UFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pDQogICAgK3hjb25m
aWc6ICQoS0NPTkZJR19ESVIpL3Fjb25mDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwg
JChDT05GSUdfQ09ORklHX0lOKQ0KICAgICAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAk
KFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAtZ2NvbmZpZzogJChLQ09O
RklHX0RJUikvZ2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NP
TkZJR19FUExBVF9JTikNCiAgICArZ2NvbmZpZzogJChLQ09ORklHX0RJUikvZ2NvbmYNCiAgICAg
CUAkKENPTU1PTl9DT05GSUdfRU5WKSBzcmN0cmVlPSQoQ09ORklHX1VLX0JBU0UpICQ8ICQoQ09O
RklHX0NPTkZJR19JTikNCiAgICAgCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19D
T05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAgICAgDQogICAgLW1lbnVjb25maWc6ICQoS0NPTkZJ
R19ESVIpL21jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05G
SUdfRVBMQVRfSU4pDQogICAgK21lbnVjb25maWc6ICQoS0NPTkZJR19ESVIpL21jb25mDQogICAg
IAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQ0KICAgICAJQCQo
U0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0K
ICAgICANCiAgICAtbmNvbmZpZzogJChLQ09ORklHX0RJUikvbmNvbmYgJChLQ09ORklHX0FQUF9J
TikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikNCiAgICArbmNvbmZpZzog
JChLQ09ORklHX0RJUikvbmNvbmYNCiAgICAgCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkPCAkKENP
TkZJR19DT05GSUdfSU4pDQogICAgIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtf
Q09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAgIA0KICAgIC1jb25maWc6ICQoS0NPTkZJR19E
SVIpL2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19F
UExBVF9JTikNCiAgICArY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQogICAgIAlAJChDT01N
T05fQ09ORklHX0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQ0KICAgICAJQCQoU0NSSVBUU19E
SVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAg
ICBAQCAtNzU1LDQzICs3MzMsNDMgQEAgY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NP
TkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVQNCiAgICAgIyBT
S0lQX0xFR0FDWT15IHRvIGRpc2FibGUgdGhlIGxlZ2FjeSBvcHRpb25zLiBIb3dldmVyLCBpbiB0
aGF0IGNhc2UNCiAgICAgIyBubyB2YWx1ZXMgYXJlIHNldCBmb3IgdGhlIGxlZ2FjeSBvcHRpb25z
IHNvIGEgc3Vic2VxdWVudCBvbGRjb25maWcNCiAgICAgIyB3aWxsIHF1ZXJ5IHRoZW0uIFRoZXJl
Zm9yZSwgcnVuIGFuIGFkZGl0aW9uYWwgb2xkZGVmY29uZmlnLg0KICAgIC1vbGRjb25maWc6ICQo
S0NPTkZJR19ESVIpL2NvbmYgJChLQ09ORklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQo
S0NPTkZJR19FUExBVF9JTikNCiAgICArb2xkY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQog
ICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRjb25maWcgJChDT05GSUdfQ09ORklH
X0lOKQ0KICAgICAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChV
S19DT05GSUdfT1VUKQ0KICAgICANCiAgICAtcmFuZGNvbmZpZzogJChLQ09ORklHX0RJUikvY29u
ZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lO
KQ0KICAgICtyYW5kY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQogICAgIAlAJChDT01NT05f
Q09ORklHX0VOVikgU0tJUF9MRUdBQ1k9eSAkPCAtLXJhbmRjb25maWcgJChDT05GSUdfQ09ORklH
X0lOKQ0KICAgICAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09O
RklHX0NPTkZJR19JTikgPi9kZXYvbnVsbA0KICAgICAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3Vw
ZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAtYWxseWVzY29u
ZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElC
X0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pDQogICAgK2FsbHllc2NvbmZpZzogJChLQ09ORklHX0RJ
UikvY29uZg0KICAgICAJQCQoQ09NTU9OX0NPTkZJR19FTlYpIFNLSVBfTEVHQUNZPXkgJDwgLS1h
bGx5ZXNjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQ0KICAgICAJQCQoQ09NTU9OX0NPTkZJR19F
TlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikgPi9kZXYvbnVsbA0KICAg
ICAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdf
T1VUKQ0KICAgICANCiAgICAtYWxsbm9jb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09O
RklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikNCiAgICAr
YWxsbm9jb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYNCiAgICAgCUAkKENPTU1PTl9DT05GSUdf
RU5WKSBTS0lQX0xFR0FDWT15ICQ8IC0tYWxsbm9jb25maWcgJChDT05GSUdfQ09ORklHX0lOKQ0K
ICAgICAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NP
TkZJR19JTikgPi9kZXYvbnVsbA0KICAgICAJQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAk
KFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAtc3luY2NvbmZpZzogJChL
Q09ORklHX0RJUikvY29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChL
Q09ORklHX0VQTEFUX0lOKQ0KICAgICtzeW5jY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQog
ICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1zeW5jY29uZmlnICQoQ09ORklHX0NPTkZJ
R19JTikNCiAgICAgCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQo
VUtfQ09ORklHX09VVCkNCiAgICAgDQogICAgLW9sZGRlZmNvbmZpZzogJChLQ09ORklHX0RJUikv
Y29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFU
X0lOKQ0KICAgICtvbGRkZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYNCiAgICAgCUAkKENP
TU1PTl9DT05GSUdfRU5WKSAkPCAtLW9sZGRlZmNvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pDQog
ICAgIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJ
R19PVVQpDQogICAgIA0KICAgIC1kZWZjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYgJChLQ09O
RklHX0FQUF9JTikgJChLQ09ORklHX0VMSUJfSU4pICQoS0NPTkZJR19FUExBVF9JTikNCiAgICAr
ZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQogICAgIAlAJChDT01NT05fQ09ORklHX0VO
VikgJDwgLS1kZWZjb25maWckKGlmICQoREVGQ09ORklHKSw9JChERUZDT05GSUcpKSAkKENPTkZJ
R19DT05GSUdfSU4pDQogICAgIAlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09O
RklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAgIA0KICAgICAjIE92ZXJyaWRlIHRoZSBVS19ERUZD
T05GSUcgZnJvbSBDT01NT05fQ09ORklHX0VOViB3aXRoIHRoZSBuZXcgZGVmY29uZmlnDQogICAg
LSVfZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mICQoQSkvY29uZmlncy8lX2RlZmNvbmZp
ZyAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFUX0lO
KQ0KICAgICslX2RlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAkKEEpL2NvbmZpZ3MvJV9k
ZWZjb25maWcNCiAgICAgCUAkKENPTU1PTl9DT05GSUdfRU5WKSBVS19ERUZDT05GSUc9JChBKS9j
b25maWdzLyRAIFwNCiAgICAgCQkkPCAtLWRlZmNvbmZpZz0kKEEpL2NvbmZpZ3MvJEAgJChDT05G
SUdfQ09ORklHX0lOKQ0KICAgICANCiAgICAtc2F2ZWRlZmNvbmZpZzogJChLQ09ORklHX0RJUikv
Y29uZiAkKEtDT05GSUdfQVBQX0lOKSAkKEtDT05GSUdfRUxJQl9JTikgJChLQ09ORklHX0VQTEFU
X0lOKQ0KICAgICtzYXZlZGVmY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQogICAgIAlAJChD
T01NT05fQ09ORklHX0VOVikgJDwgXA0KICAgICAJCS0tc2F2ZWRlZmNvbmZpZz0kKGlmICQoREVG
Q09ORklHKSwkKERFRkNPTkZJRyksJChDT05GSUdfRElSKS9kZWZjb25maWcpIFwNCiAgICAgCQkk
KENPTkZJR19DT05GSUdfSU4pDQogICAgQEAgLTgwMSw3ICs3NzksNyBAQCBzYXZlZGVmY29uZmln
OiAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NPTkZJR19FTElCX0lO
KSAkKEtDT05GSQ0KICAgICAuUEhPTlk6IGRlZmNvbmZpZyBzYXZlZGVmY29uZmlnIHNpbGVudG9s
ZGNvbmZpZw0KICAgICANCiAgICAgIyBSZWdlbmVyYXRlICQoS0NPTkZJR19BVVRPSEVBREVSKSB3
aGVuZXZlciAkKFVLX0NPTkZJRykgY2hhbmdlZA0KICAgIC0kKEtDT05GSUdfQVVUT0hFQURFUik6
ICQoVUtfQ09ORklHKSAkKEtDT05GSUdfRElSKS9jb25mICQoS0NPTkZJR19BUFBfSU4pICQoS0NP
TkZJR19FTElCX0lOKSAkKEtDT05GSUdfRVBMQVRfSU4pDQogICAgKyQoS0NPTkZJR19BVVRPSEVB
REVSKTogJChVS19DT05GSUcpICQoS0NPTkZJR19ESVIpL2NvbmYNCiAgICAgCUAkKENPTU1PTl9D
T05GSUdfRU5WKSAkKEtDT05GSUdfRElSKS9jb25mIC0tc3luY2NvbmZpZyAkKENPTkZJR19DT05G
SUdfSU4pDQogICAgIA0KICAgICANCiAgICBkaWZmIC0tZ2l0IGEvbGliL0NvbmZpZy51ayBiL2xp
Yi9Db25maWcudWsNCiAgICBpbmRleCAyM2U3MDVkLi40NDMxMWRlIDEwMDY0NA0KICAgIC0tLSBh
L2xpYi9Db25maWcudWsNCiAgICArKysgYi9saWIvQ29uZmlnLnVrDQogICAgQEAgLTIwLDExICsy
MCwzIEBAIGNvbmZpZyBIQVZFX1NDSEVEDQogICAgIGNvbmZpZyBIQVZFX05XX1NUQUNLDQogICAg
ICAgICAgICBib29sDQogICAgICAgICAgICBkZWZhdWx0IG4NCiAgICAtDQogICAgLQ0KICAgIC0j
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIC0jDQogICAgLSMgTGlicmFyeSBkZWZpbml0aW9u
cw0KICAgIC0jDQogICAgLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgLXNvdXJjZSAibGli
LyovQ29uZmlnLnVrIg0KICAgIGRpZmYgLS1naXQgYS9wbGF0L0NvbmZpZy51ayBiL3BsYXQvQ29u
ZmlnLnVrDQogICAgaW5kZXggOGE4NzhlYi4uMGViNWExMCAxMDA2NDQNCiAgICAtLS0gYS9wbGF0
L0NvbmZpZy51aw0KICAgICsrKyBiL3BsYXQvQ29uZmlnLnVrDQogICAgQEAgLTEsNyArMSwzIEBA
DQogICAgLXNvdXJjZSAicGxhdC94ZW4vQ29uZmlnLnVrIg0KICAgIC1zb3VyY2UgInBsYXQva3Zt
L0NvbmZpZy51ayINCiAgICAtc291cmNlICJwbGF0L2xpbnV4dS9Db25maWcudWsiDQogICAgLQ0K
ICAgICBtZW51ICJQbGF0Zm9ybSBJbnRlcmZhY2UgT3B0aW9ucyINCiAgICAgY29uZmlnIFVLUExB
VF9NRU1STkFNRQ0KICAgICAJYm9vbCAiTWVtb3J5IHJlZ2lvbiBuYW1lcyINCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaCBiL3N1cHBvcnQvc2Ny
aXB0cy91a19idWlsZF9jb25maWd1cmUuc2gNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KICAg
IGluZGV4IDAwMDAwMDAuLjFkZjhjNWQNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3Vw
cG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaA0KICAgIEBAIC0wLDAgKzEsMTAyIEBA
DQogICAgKyMhL2Jpbi9iYXNoDQogICAgKw0KICAgICtPUFRfQkFTRU5BTUU9YGJhc2VuYW1lICQw
YA0KICAgICtPUFRfU1RSSU5HPSJhOmU6aG86cDoiDQogICAgKw0KICAgICtyZWFkIC1yIC1kICcn
IE9QVF9IRUxQICA8PC0gRU9IDQogICAgKwlhIC0gVGhlIGFwcGxpY2F0aW9uIGxvY2F0aW9uDQog
ICAgKwllIC0gVGhlIGxvY2F0aW9uIG9mIHRoZSBleHRlcm5hbCBsaWJyYXJpZXMNCiAgICArCXAg
LSBUaGUgbG9jYXRpb24gb2YgZXh0ZXJuYWwgcGxhdGZvcm1zDQogICAgKwlvIC0gVGhlIG91dHB1
dCBjb25maWd1cmF0aW9uIGZpbGUNCiAgICArCWggLSBQcmludCBVc2FnZQ0KICAgICtFT0gNCiAg
ICArDQogICAgK3ByaW50X3VzYWdlKCkgew0KICAgICsJcHJpbnRmICIlcyBbJXNdXG4iICR7T1BU
X0JBU0VOQU1FfSAke09QVF9TVFJJTkd9Ow0KICAgICsJcHJpbnRmICIlc1xuIiAiJHtPUFRfSEVM
UH0iDQogICAgK30NCiAgICArDQogICAgK2ZldGNoX3BsYXRzKCkgew0KICAgICsJbG9jYWwgZmls
ZXM9Ow0KICAgICsJZmlsZXM9YGZpbmQgJHtAfSAtbWF4ZGVwdGggMSAtbmFtZSAiQ29uZmlnLnVr
ImANCiAgICArCWVjaG8gJHtmaWxlc30NCiAgICArfQ0KICAgICsNCiAgICArZmV0Y2hfbGlicygp
IHsNCiAgICArCWxvY2FsIGZpbGVzPTsNCiAgICArCWZpbGVzPWBmaW5kICR7QH0gLW5hbWUgIkNv
bmZpZy51ayJgDQogICAgKwllY2hvICR7ZmlsZXN9DQogICAgK30NCiAgICArDQogICAgK2ZldGNo
X2FwcCgpIHsNCiAgICArCWxvY2FsIGZpbGVzPTsNCiAgICArCWZpbGVzPWBmaW5kICR7MX0gLW5h
bWUgIkNvbmZpZy51ayJgDQogICAgKwllY2hvICR7ZmlsZXN9DQogICAgK30NCiAgICArDQogICAg
K2NvbmZpZ19vdXRfY3JlYXRlKCkgew0KICAgICsNCiAgICArCVtbIC1mICR7Mn0gXV0gfHwgdG91
Y2ggJHsyfTsNCiAgICArDQogICAgKwlmb3IgZmlsZSBpbiAkezF9DQogICAgKwlkbw0KICAgICsJ
CVtbIC16IGBjYXQgJHsyfSB8IGdyZXAgJHtmaWxlfWAgXV0gJiYgXA0KICAgICsJCQl7IGVjaG8g
InNvdXJjZSBcIiR7ZmlsZX1cIiIgPj4gJHsyfTsgfQ0KICAgICsJZG9uZQ0KICAgICt9DQogICAg
Kw0KICAgICtpZiBbICQjIC1lcSAwIF07DQogICAgK3RoZW4NCiAgICArCXByaW50X3VzYWdlDQog
ICAgKwlleGl0IDE7DQogICAgK2ZpDQogICAgKw0KICAgICtbWyAtbiAke0NPTkZJR19VS19CQVNF
fSBdXSAmJiBVS19CQVNFPSR7Q09ORklHX1VLX0JBU0V9Ow0KICAgICtbWyAtbiAke1VLX0JBU0V9
IF1dIHx8IFVLX0JBU0U9JChyZWFkbGluayAtZiAkKGRpcm5hbWUgJDApLy4uLy4uKQ0KICAgICsN
CiAgICArQ09ORklHX0ZJTEVTPTsNCiAgICArDQogICAgK3doaWxlIGdldG9wdHMgJHtPUFRfU1RS
SU5HfSBvcHQNCiAgICArZG8NCiAgICArCWNhc2UgJHtvcHR9IGluDQogICAgKwlhKQ0KICAgICsJ
CUFQUF9ESVI9IiR7T1BUQVJHfSINCiAgICArCQlbWyAtZCAke0FQUF9ESVJ9IF1dIHx8IFwNCiAg
ICArCQkJeyBlY2hvICJDYW5ub3QgZmluZCB0aGUgYXBwbGljYXRpb24iOyBleGl0IDE7IH0NCiAg
ICArCQlpZiBbICR7VUtfQkFTRX0gIT0gJHtBUFBfRElSfSBdDQogICAgKwkJdGhlbg0KICAgICsJ
CQlDT05GSUdfRklMRVM9JChmZXRjaF9hcHAgJHtBUFBfRElSfSkNCiAgICArCQkJZWNobyAke0NP
TkZJR19GSUxFU307DQogICAgKwkJZWxzZQ0KICAgICsJCQlDT05GSUdfRklMRVM9JHtCVUlMRF9E
SVJ9L2FwcC51aw0KICAgICsJCQlbWyAtZiAke0JVSUxEX0RJUn0vYXBwLnVrIF1dIHx8IFwNCiAg
ICArCQkJCXsgdG91Y2ggJHtDT05GSUdfRklMRVN9OyB9DQogICAgKwkJCWVjaG8gJyMgZXh0ZXJu
YWwgYXBwbGljYXRpb24nID4+ICR7Q09ORklHX0ZJTEVTfQ0KICAgICsJCQllY2hvICdjb21tZW50
ICJObyBleHRlcm5hbCBhcHBsaWNhdGlvbiBzcGVjaWZpZWQiJ1wNCiAgICArCQkJCSA+PiAke0NP
TkZJR19GSUxFU30NCiAgICArCQkJZWNobyAke0NPTkZJR19GSUxFU307DQogICAgKwkJZmkNCiAg
ICArCQlleGl0IDA7DQogICAgKwk7Ow0KICAgICsJZSkNCiAgICArCQlDT05GSUdfRklMRVM9YGZl
dGNoX2xpYnMgIiR7T1BUQVJHfSJgDQogICAgKwk7Ow0KICAgICsJcCkNCiAgICArCQlDT05GSUdf
RklMRVM9YGZldGNoX3BsYXRzICIke09QVEFSR30iYA0KICAgICsJOzsNCiAgICArCWgpDQogICAg
KwkJcHJpbnRfdXNhZ2U7DQogICAgKwkJZXhpdCAwOw0KICAgICsJOzsNCiAgICArCW8pDQogICAg
KwkJQ09ORklHX09VVF9GSUxFPSR7T1BUQVJHfQ0KICAgICsJOzsNCiAgICArCSopDQogICAgKwkJ
cHJpbnRfdXNhZ2UNCiAgICArCQlleGl0IDE7DQogICAgKwk7Ow0KICAgICsJZXNhYw0KICAgICtk
b25lDQogICAgKw0KICAgICtjb25maWdfb3V0X2NyZWF0ZSAiJHtDT05GSUdfRklMRVN9IiAke0NP
TkZJR19PVVRfRklMRX0NCiAgICArZWNobyAke0NPTkZJR19PVVRfRklMRX0NCiAgICAtLSANCiAg
ICAyLjcuNA0KICAgIA0KICAgIA0KICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:42:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:42:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxds-0000vb-8P; Thu, 19 Sep 2019 14:42:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxdq-0000v2-EC
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:42:42 +0000
X-Inumbo-ID: bad05928-daeb-11e9-9661-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id bad05928-daeb-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:42:40 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 84643F2025;
 Thu, 19 Sep 2019 16:42:39 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id eCQk6glm0_8I; Thu, 19 Sep 2019 16:42:39 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 5DD3AF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:42:37 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:42:37 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:42:36
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 19/23] build: Support
 syncconfig with kconfiglib
Thread-Index: AQHVbssVNkjQH7ULxUemZEm58KLNj6czE14A
Date: Thu, 19 Sep 2019 14:42:36 +0000
Message-ID: <930E5791-1332-46B5-ABDA-00E91F2248BA@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-20-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-20-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <36B476B2F5EDDF4C87235386C3CA804F@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 19/23] build: Support
 syncconfig with kconfiglib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIHN5bmNjb25maWcgcnVs
ZSBnZW5lcmF0ZSB0aGUgY29uZmlnIGhlYWRlciBmaWxlIGFuZCBvdGhlciBoZWFkZXIgZmlsZXMN
CiAgICBuZWVkZWQgZnJvbSBmaXhkZXAuIFRoaXMgcGF0Y2ggcHJvdmlkZXMgYSBweXRob24gaW50
ZXJmYWNlIGZvciB0aGUNCiAgICBzeW5jY29uZmlnIHVzaW5nIHNjcmlwdHN5bmNjb25maWcgcnVs
ZQ0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50
aGFuYW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBNYWtlZmlsZSB8IDEwICsrKysrKysrKy0N
CiAgICAgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KICAg
IA0KICAgIGRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlDQogICAgaW5kZXggNGU4NzNm
MS4uMmJjZGMzMiAxMDA2NDQNCiAgICAtLS0gYS9NYWtlZmlsZQ0KICAgICsrKyBiL01ha2VmaWxl
DQogICAgQEAgLTY3Niw3ICs2NzYsOCBAQCBDT01NT05fQ09ORklHX0VOViA9IFwNCiAgICAgCUtD
T05GSUdfUExBVF9JTj0iJChLQ09ORklHX1BMQVRfSU4pIiBcDQogICAgIAlVS19OQU1FPSIkKENP
TkZJR19VS19OQU1FKSINCiAgICAgDQogICAgLVBIT05ZICs9IHNjcmlwdGNvbmZpZyBpc2NyaXB0
Y29uZmlnIGttZW51Y29uZmlnIGd1aWNvbmZpZyBkdW1wdmFyc2NvbmZpZw0KICAgICtQSE9OWSAr
PSBzY3JpcHRjb25maWcgc2NyaXB0c3luY2NvbmZpZyBpc2NyaXB0Y29uZmlnIGttZW51Y29uZmln
IGd1aWNvbmZpZyBcDQogICAgKwkJIGR1bXB2YXJzY29uZmlnDQogICAgIA0KICAgICBQWVRIT05D
TUQgPz0gcHl0aG9uDQogICAgIGtweXRob24gOj0gUFlUSE9OUEFUSD0kKFVLX0NPTkZJR0xJQik6
JCRQWVRIT05QQVRIICQoUFlUSE9OQ01EKQ0KICAgIEBAIC03MDEsNiArNzAyLDEyIEBAIGttZW51
Y29uZmlnOiQoS0NPTkZJR19ESVIpL2ZpeGRlcA0KICAgICAJCSQoQ09ORklHX0NPTkZJR19JTikN
CiAgICAgCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09O
RklHX09VVCkNCiAgICAgDQogICAgK3NjcmlwdHN5bmNjb25maWc6ICQoS0NPTkZJR19ESVIpL2Zp
eGRlcA0KICAgICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChDT05GSUdMSUIp
L2dlbmNvbmZpZy5weSBcDQogICAgKwkJLS1zeW5jLWRlcHM9JChCVUlMRF9ESVIpL2luY2x1ZGUv
Y29uZmlnIFwNCiAgICArCQktLWhlYWRlci1wYXRoPSQoS0NPTkZJR19BVVRPSEVBREVSKSAkKENP
TkZJR19DT05GSUdfSU4pDQogICAgKwlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtf
Q09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAgKw0KICAgICBndWljb25maWc6ICQoS0NPTkZJ
R19ESVIpL2ZpeGRlcA0KICAgICAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoa3B5dGhvbikgJChD
T05GSUdMSUIpL2d1aWNvbmZpZy5weSAkKENPTkZJR19DT05GSUdfSU4pDQogICAgIAlAJChTQ1JJ
UFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAg
QEAgLTg4NCw2ICs4OTEsNyBAQCBoZWxwOg0KICAgICAJQGVjaG8gJyAgZ2NvbmZpZyAgICAgICAg
ICAgICAgICAtIGludGVyYWN0aXZlIEdUSy1iYXNlZCBjb25maWd1cmF0b3InDQogICAgIAlAZWNo
byAnICBvbGRjb25maWcgICAgICAgICAgICAgIC0gcmVzb2x2ZSBhbnkgdW5yZXNvbHZlZCBzeW1i
b2xzIGluIC5jb25maWcnDQogICAgIAlAZWNobyAnICBzeW5jY29uZmlnICAgICAgICAgICAgIC0g
U2FtZSBhcyBvbGRjb25maWcsIGJ1dCBxdWlldGx5LCBhZGRpdGlvbmFsbHkgdXBkYXRlIGRlcHMn
DQogICAgKwlAZWNobyAnICBzY3JpcHRzeW5jY29uZmlnICAgICAgIC0gU2FtZSBhcyBvbGRjb25m
aWcsIGJ1dCBxdWlldGx5LCBhZGRpdGlvbmFsbHkgdXBkYXRlIGRlcHMnDQogICAgIAlAZWNobyAn
ICBvbGRkZWZjb25maWcgICAgICAgICAgIC0gU2FtZSBhcyBzaWxlbnRvbGRjb25maWcgYnV0IHNl
dHMgbmV3IHN5bWJvbHMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZScNCiAgICAgCUBlY2hvICcgIHJh
bmRjb25maWcgICAgICAgICAgICAgLSBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dlciB0byBh
bGwgb3B0aW9ucycNCiAgICAgCUBlY2hvICcgIGRlZmNvbmZpZyAgICAgICAgICAgICAgLSBOZXcg
Y29uZmlnIHdpdGggZGVmYXVsdCBhbnN3ZXIgdG8gYWxsIG9wdGlvbnMnDQogICAgLS0gDQogICAg
Mi43LjQNCiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:43:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:43:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxe8-0000z2-AZ; Thu, 19 Sep 2019 14:43:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxe7-0000yZ-2R
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:42:59 +0000
X-Inumbo-ID: c4a0aa2b-daeb-11e9-9661-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id c4a0aa2b-daeb-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:42:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 9DD8EF2025;
 Thu, 19 Sep 2019 16:42:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id V0-ke1qcptih; Thu, 19 Sep 2019 16:42:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 73C3DF2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:42:54 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:42:54 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:42:54
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 20/23] build: Switch build
 directory as CURDIR
Thread-Index: AQHVbssYqeugP2NpqkSzljOlnZ8M/qczE3KA
Date: Thu, 19 Sep 2019 14:42:53 +0000
Message-ID: <DAAA9D64-FA6B-4411-8423-D5CC97AEB2AF@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-21-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-21-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <C0764EEBFAEF83419FAE490422D38E6A@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 20/23] build: Switch build
 directory as CURDIR
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEZpeGRlcCBhbmQgb3Ro
ZXIga2NvbmZpZyBhdXRvZ2VuZXJhdGUgZmlsZXMgb24gZml4ZWQgcGF0aC4gSW5zdGVhZCBvZg0K
ICAgIHBhdGNoaW5nIHRoZSBrY29uZmlnIGFuZCBmaXhkZXAsIHdlIG1ha2UgY3VycmVudCB3b3Jr
aW5nIGRpcmVjdG9yeSBhcw0KICAgIGJ1aWxkIGRpcmVjdG9yeS4NCiAgICANCiAgICBTaWduZWQt
b2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAg
ICAtLS0NCiAgICAgQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICB8ICAyICstDQogICAgIE1h
a2VmaWxlICAgICAgICAgICAgICAgICAgICAgfCA4MSArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKystLS0tLS0tLS0tLS0tLQ0KICAgICBhcmNoL0NvbmZpZy51ayAgICAgICAgICAgICAgIHwg
IDYgKystLQ0KICAgICBzdXBwb3J0L3NjcmlwdHMvY29uZmlndXBkYXRlIHwgIDQgKy0tDQogICAg
IDQgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pDQogICAg
DQogICAgZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51aw0KICAgIGluZGV4IDAxYTdh
YzguLjc3MmRiODUgMTAwNjQ0DQogICAgLS0tIGEvQ29uZmlnLnVrDQogICAgKysrIGIvQ29uZmln
LnVrDQogICAgQEAgLTI2LDcgKzI2LDcgQEAgY29uZmlnIFVLX0RFRk5BTUUNCiAgICAgCWRlZmF1
bHQgIiQoVUtfTkFNRSkiDQogICAgIA0KICAgICBtZW51ICJBcmNoaXRlY3R1cmUgU2VsZWN0aW9u
Ig0KICAgIC0Jc291cmNlICJhcmNoL0NvbmZpZy51ayINCiAgICArCXNvdXJjZSAiJChVS19CQVNF
KS9hcmNoL0NvbmZpZy51ayINCiAgICAgZW5kbWVudQ0KICAgICANCiAgICAgbWVudSAiUGxhdGZv
cm0gQ29uZmlndXJhdGlvbiINCiAgICBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQ0K
ICAgIGluZGV4IDJiY2RjMzIuLjVjZmQ0NDUgMTAwNjQ0DQogICAgLS0tIGEvTWFrZWZpbGUNCiAg
ICArKysgYi9NYWtlZmlsZQ0KICAgIEBAIC02NSw3ICs2NSw3IEBAIHNwYWNlIDo9ICQoZW1wdHkp
ICQoZW1wdHkpDQogICAgIGV4cG9ydCBDRFBBVEggOj0NCiAgICAgDQogICAgICMgVXNlIGN1cnJl
bnQgZGlyZWN0b3J5IGFzIGJhc2UNCiAgICAtQ09ORklHX1VLX0JBU0UgOj0gJChDVVJESVIpDQog
ICAgK0NPTkZJR19VS19CQVNFID89ICQoQ1VSRElSKQ0KICAgICBvdmVycmlkZSBDT05GSUdfVUtf
QkFTRSA6PSAkKHJlYWxwYXRoICQoQ09ORklHX1VLX0JBU0UpKQ0KICAgICBpZmVxICgkKENPTkZJ
R19VS19CQVNFKSwpDQogICAgICQoZXJyb3IgIkludmFsaWQgYmFzZSBkaXJlY3RvcnkgKENPTkZJ
R19VS19CQVNFKSIpDQogICAgQEAgLTEwMywxMiArMTAzLDIwIEBAIGlmZXEgKCIkKG9yaWdpbiBQ
KSIsICJjb21tYW5kIGxpbmUiKQ0KICAgICAkKGZvcmVhY2ggRSwkKHN1YnN0IDosICwkKFApKSwg
XA0KICAgICAkKGlmICQod2lsZGNhcmQgJChFKSksIFwNCiAgICAgCSQoZXZhbCBFUExBVF9ESVIg
Kz0gJChFKSkgXA0KICAgIC0sIFwNCiAgICArLCAkKGlmICQod2lsZGNhcmQgJChDT05GSUdfVUtf
QkFTRSkvJChFKSksXA0KICAgICsJJChldmFsIEVQTEFUX0RJUiArPSAkKENPTkZJR19VS19CQVNF
KS8kKEUpKSwgXA0KICAgICAJJChlcnJvciBDYW5ub3QgZmluZCBwbGF0Zm9ybSBsaWJyYXJ5OiAk
KEUpKSBcDQogICAgKyAgICkgXA0KICAgICApIFwNCiAgICAgKQ0KICAgICBlbmRpZg0KICAgICBF
UExBVF9ESVIgOj0gJChyZWFscGF0aCAkKHBhdHN1YnN0ICUvLCUsJChwYXRzdWJzdCAlLiwlLCQo
RVBMQVRfRElSKSkpKQ0KICAgICtidWlsZF9kaXJfbWFrZSAgOj0gMA0KICAgICtpZm5lcSAoJChC
VUlMRF9ESVIpLCQoVUtfQkFTRSkpDQogICAgKwlidWlsZF9kaXJfbWFrZSA6PSAxOw0KICAgICtl
bHNlDQogICAgKwlzdWJfbWFrZV9leGVjIDo9IDE7DQogICAgK2VuZGlmDQogICAgIA0KICAgICAj
IEVMSUJfRElSIChsaXN0IG9mIGV4dGVybmFsIGxpYnJhcmllcykNCiAgICAgIyBSZXRyaWV2ZWQg
ZnJvbSBMIHZhcmlhYmxlIGZyb20gdGhlIGNvbW1hbmQgbGluZSAocGF0aHMgc2VwYXJhdGVkIGJ5
IGNvbG9uKQ0KICAgIEBAIC0xMTcsOCArMTI1LDEwIEBAIGlmZXEgKCIkKG9yaWdpbiBMKSIsICJj
b21tYW5kIGxpbmUiKQ0KICAgICAkKGZvcmVhY2ggRSwkKHN1YnN0IDosICwkKEwpKSwgXA0KICAg
ICAkKGlmICQod2lsZGNhcmQgJChFKSksIFwNCiAgICAgCSQoZXZhbCBFTElCX0RJUiArPSAkKEUp
KSBcDQogICAgLSwgXA0KICAgICssICQoaWYgJCh3aWxkY2FyZCAkKENPTkZJR19VS19CQVNFKS8k
KEUpKSxcDQogICAgKwkkKGV2YWwgRUxJQl9ESVIgKz0gJChDT05GSUdfVUtfQkFTRSkvJChFKSks
IFwNCiAgICAgCSQoZXJyb3IgQ2Fubm90IGZpbmQgbGlicmFyeTogJChFKSkgXA0KICAgICsgICAp
XA0KICAgICApIFwNCiAgICAgKQ0KICAgICBlbmRpZg0KICAgIEBAIC00MjgsNiArNDM4LDcgQEAg
ZW5kaWYNCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgIyBDb21waWxlciBhbmQg
bGlua2VyIHRvb2xzDQogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgK2lmZXEgKCQo
c3ViX21ha2VfZXhlYyksIDEpDQogICAgIGlmZXEgKCQoVUtfSEFWRV9ET1RfQ09ORklHKSx5KQ0K
ICAgICAjIEhpZGUgdHJvdWJsZXNvbWUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gc3ViIHBy
b2Nlc3Nlcw0KICAgICB1bmV4cG9ydCBDT05GSUdfQ1JPU1NfQ09NUElMRQ0KICAgIEBAIC02MTcs
MTkgKzYyOCwyNSBAQCBjbGVhbjogY2xlYW4tbGlicw0KICAgICANCiAgICAgZWxzZSAjICEoJChV
S19IQVZFX0RPVF9DT05GSUcpLHkpDQogICAgIA0KICAgIC1hbGw6IG1lbnVjb25maWcNCiAgICAg
DQogICAgLS5QSE9OWTogcHJlcGFyZSBpbWFnZSBsaWJzIG9ianMgY2xlYW4tbGlicyBjbGVhbg0K
ICAgICskKGZpbHRlciAlY29uZmlnLCQoTUFLRUNNREdPQUxTKSk6ICQoQlVJTERfRElSKS9NYWtl
ZmlsZQ0KICAgICsNCiAgICArIyMgdWtjb25maWcNCiAgICArdWtjb25maWc6ICQoQlVJTERfRElS
KS9NYWtlZmlsZSBtZW51Y29uZmlnDQogICAgKw0KICAgICthbGw6IHVrY29uZmlnDQogICAgIA0K
ICAgIC1mZXRjaDogbWVudWNvbmZpZw0KICAgICsuUEhPTlk6IHByZXBhcmUgaW1hZ2UgbGlicyBv
YmpzIGNsZWFuLWxpYnMgY2xlYW4gdWtjb25maWcNCiAgICAgDQogICAgLXByZXBhcmU6IG1lbnVj
b25maWcNCiAgICArZmV0Y2g6IHVrY29uZmlnDQogICAgIA0KICAgIC1vYmpzOiBtZW51Y29uZmln
DQogICAgK3ByZXBhcmU6IHVrY29uZmlnDQogICAgIA0KICAgIC1saWJzOiBtZW51Y29uZmlnDQog
ICAgK29ianM6IHVrY29uZmlnDQogICAgIA0KICAgIC1pbWFnZXM6IG1lbnVjb25maWcNCiAgICAr
bGliczogdWtjb25maWcNCiAgICArDQogICAgK2ltYWdlczogdWtjb25maWcNCiAgICAgDQogICAg
IGNsZWFuLWxpYnMgY2xlYW46DQogICAgIAkkKGVycm9yIERvIG5vdCBrbm93IHdoaWNoIGZpbGVz
IHRvIGNsZWFuIHdpdGhvdXQgaGF2aW5nIGEgY29uZmlndXJhdGlvbi4gRGlkIHlvdSBtZWFuICdw
cm9wZXJjbGVhbicgb3IgJ2Rpc3RjbGVhbic/KQ0KICAgIEBAIC03MDAsMTMgKzcxNywxMyBAQCBp
c2NyaXB0Y29uZmlnOiAkKEtDT05GSUdfRElSKS9maXhkZXANCiAgICAga21lbnVjb25maWc6JChL
Q09ORklHX0RJUikvZml4ZGVwDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9u
KSAkKENPTkZJR0xJQikvbWVudWNvbmZpZy5weSBcDQogICAgIAkJJChDT05GSUdfQ09ORklHX0lO
KQ0KICAgIC0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19D
T05GSUdfT1VUKQ0KICAgICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19ESVIpL2Nv
bmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAgc2Ny
aXB0c3luY2NvbmZpZzogJChLQ09ORklHX0RJUikvZml4ZGVwDQogICAgIAlAJChDT01NT05fQ09O
RklHX0VOVikgJChrcHl0aG9uKSAkKENPTkZJR0xJQikvZ2VuY29uZmlnLnB5IFwNCiAgICAgCQkt
LXN5bmMtZGVwcz0kKEJVSUxEX0RJUikvaW5jbHVkZS9jb25maWcgXA0KICAgICAJCS0taGVhZGVy
LXBhdGg9JChLQ09ORklHX0FVVE9IRUFERVIpICQoQ09ORklHX0NPTkZJR19JTikNCiAgICAtCUAk
KFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkN
CiAgICArCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUg
JChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAgICAgDQogICAgIGd1aWNvbmZpZzogJChL
Q09ORklHX0RJUikvZml4ZGVwDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJChrcHl0aG9u
KSAkKENPTkZJR0xJQikvZ3VpY29uZmlnLnB5ICQoQ09ORklHX0NPTkZJR19JTikNCiAgICBAQCAt
NzE4LDIzICs3MzUsMjMgQEAgZHVtcHZhcnNjb25maWc6JChLQ09ORklHX0RJUikvZml4ZGVwDQog
ICAgIA0KICAgICB4Y29uZmlnOiAkKEtDT05GSUdfRElSKS9xY29uZg0KICAgICAJQCQoQ09NTU9O
X0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NPTkZJR19JTikNCiAgICAtCUAkKFNDUklQVFNfRElS
KS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAgICArCUAkKENP
TU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcp
ICQoVUtfQ09ORklHX09VVCkNCiAgICAgDQogICAgIGdjb25maWc6ICQoS0NPTkZJR19ESVIpL2dj
b25mDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgc3JjdHJlZT0kKENPTkZJR19VS19CQVNF
KSAkPCAkKENPTkZJR19DT05GSUdfSU4pDQogICAgLQlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBk
YXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAgKwlAJChDT01NT05fQ09ORklH
X0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJ
R19PVVQpDQogICAgIA0KICAgICBtZW51Y29uZmlnOiAkKEtDT05GSUdfRElSKS9tY29uZg0KICAg
ICAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8ICQoQ09ORklHX0NPTkZJR19JTikNCiAgICAtCUAk
KFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkN
CiAgICArCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUg
JChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAgICAgDQogICAgIG5jb25maWc6ICQoS0NP
TkZJR19ESVIpL25jb25mDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgJChDT05GSUdf
Q09ORklHX0lOKQ0KICAgIC0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJ
RykgJChVS19DT05GSUdfT1VUKQ0KICAgICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBU
U19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICAN
CiAgICAgY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQogICAgIAlAJChDT01NT05fQ09ORklH
X0VOVikgJDwgJChDT05GSUdfQ09ORklHX0lOKQ0KICAgIC0JQCQoU0NSSVBUU19ESVIpL2NvbmZp
Z3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICsJQCQoQ09NTU9OX0NP
TkZJR19FTlYpICQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19D
T05GSUdfT1VUKQ0KICAgICANCiAgICAgIyBGb3IgdGhlIGNvbmZpZyB0YXJnZXRzIHRoYXQgYXV0
b21hdGljYWxseSBzZWxlY3Qgb3B0aW9ucywgd2UgcGFzcw0KICAgICAjIFNLSVBfTEVHQUNZPXkg
dG8gZGlzYWJsZSB0aGUgbGVnYWN5IG9wdGlvbnMuIEhvd2V2ZXIsIGluIHRoYXQgY2FzZQ0KICAg
IEBAIC03NDIsMzQgKzc1OSwzNCBAQCBjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYNCiAgICAg
IyB3aWxsIHF1ZXJ5IHRoZW0uIFRoZXJlZm9yZSwgcnVuIGFuIGFkZGl0aW9uYWwgb2xkZGVmY29u
ZmlnLg0KICAgICBvbGRjb25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYNCiAgICAgCUAkKENPTU1P
Tl9DT05GSUdfRU5WKSAkPCAtLW9sZGNvbmZpZyAkKENPTkZJR19DT05GSUdfSU4pDQogICAgLQlA
JChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQp
DQogICAgKwlAJChDT01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRl
ICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAgIA0KICAgICByYW5kY29uZmlnOiAk
KEtDT05GSUdfRElSKS9jb25mDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgU0tJUF9MRUdB
Q1k9eSAkPCAtLXJhbmRjb25maWcgJChDT05GSUdfQ09ORklHX0lOKQ0KICAgICAJQCQoQ09NTU9O
X0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikgPi9kZXYv
bnVsbA0KICAgIC0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChV
S19DT05GSUdfT1VUKQ0KICAgICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19ESVIp
L2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAg
YWxseWVzY29uZmlnOiAkKEtDT05GSUdfRElSKS9jb25mDQogICAgIAlAJChDT01NT05fQ09ORklH
X0VOVikgU0tJUF9MRUdBQ1k9eSAkPCAtLWFsbHllc2NvbmZpZyAkKENPTkZJR19DT05GSUdfSU4p
DQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRkZWZjb25maWcgJChDT05GSUdf
Q09ORklHX0lOKSA+L2Rldi9udWxsDQogICAgLQlAJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRl
ICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAgKwlAJChDT01NT05fQ09ORklHX0VO
VikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19P
VVQpDQogICAgIA0KICAgICBhbGxub2NvbmZpZzogJChLQ09ORklHX0RJUikvY29uZg0KICAgICAJ
QCQoQ09NTU9OX0NPTkZJR19FTlYpIFNLSVBfTEVHQUNZPXkgJDwgLS1hbGxub2NvbmZpZyAkKENP
TkZJR19DT05GSUdfSU4pDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1vbGRkZWZj
b25maWcgJChDT05GSUdfQ09ORklHX0lOKSA+L2Rldi9udWxsDQogICAgLQlAJChTQ1JJUFRTX0RJ
UikvY29uZmlndXBkYXRlICQoVUtfQ09ORklHKSAkKFVLX0NPTkZJR19PVVQpDQogICAgKwlAJChD
T01NT05fQ09ORklHX0VOVikgJChTQ1JJUFRTX0RJUikvY29uZmlndXBkYXRlICQoVUtfQ09ORklH
KSAkKFVLX0NPTkZJR19PVVQpDQogICAgIA0KICAgICBzeW5jY29uZmlnOiAkKEtDT05GSUdfRElS
KS9jb25mDQogICAgIAlAJChDT01NT05fQ09ORklHX0VOVikgJDwgLS1zeW5jY29uZmlnICQoQ09O
RklHX0NPTkZJR19JTikNCiAgICAtCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19D
T05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAgICArCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFND
UklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAg
ICAgDQogICAgIG9sZGRlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZg0KICAgICAJQCQoQ09N
TU9OX0NPTkZJR19FTlYpICQ8IC0tb2xkZGVmY29uZmlnICQoQ09ORklHX0NPTkZJR19JTikNCiAg
ICAtCUAkKFNDUklQVFNfRElSKS9jb25maWd1cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklH
X09VVCkNCiAgICArCUAkKENPTU1PTl9DT05GSUdfRU5WKSAkKFNDUklQVFNfRElSKS9jb25maWd1
cGRhdGUgJChVS19DT05GSUcpICQoVUtfQ09ORklHX09VVCkNCiAgICAgDQogICAgIGRlZmNvbmZp
ZzogJChLQ09ORklHX0RJUikvY29uZg0KICAgICAJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQ8IC0t
ZGVmY29uZmlnJChpZiAkKERFRkNPTkZJRyksPSQoREVGQ09ORklHKSkgJChDT05GSUdfQ09ORklH
X0lOKQ0KICAgIC0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChV
S19DT05GSUdfT1VUKQ0KICAgICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19ESVIp
L2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAg
IyBPdmVycmlkZSB0aGUgVUtfREVGQ09ORklHIGZyb20gQ09NTU9OX0NPTkZJR19FTlYgd2l0aCB0
aGUgbmV3IGRlZmNvbmZpZw0KICAgICAlX2RlZmNvbmZpZzogJChLQ09ORklHX0RJUikvY29uZiAk
KEEpL2NvbmZpZ3MvJV9kZWZjb25maWcNCiAgICBAQCAtNzgxLDcgKzc5OCw3IEBAIHNhdmVkZWZj
b25maWc6ICQoS0NPTkZJR19ESVIpL2NvbmYNCiAgICAgCQktLXNhdmVkZWZjb25maWc9JChpZiAk
KERFRkNPTkZJRyksJChERUZDT05GSUcpLCQoQ09ORklHX0RJUikvZGVmY29uZmlnKSBcDQogICAg
IAkJJChDT05GSUdfQ09ORklHX0lOKQ0KICAgICAJQCQoU0VEKSAnL1VLX0RFRkNPTkZJRz0vZCcg
JChpZiAkKERFRkNPTkZJRyksJChERUZDT05GSUcpLCQoQ09ORklHX0RJUikvZGVmY29uZmlnKQ0K
ICAgIC0JQCQoU0NSSVBUU19ESVIpL2NvbmZpZ3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05G
SUdfT1VUKQ0KICAgICsJQCQoQ09NTU9OX0NPTkZJR19FTlYpICQoU0NSSVBUU19ESVIpL2NvbmZp
Z3VwZGF0ZSAkKFVLX0NPTkZJRykgJChVS19DT05GSUdfT1VUKQ0KICAgICANCiAgICAgLlBIT05Z
OiBkZWZjb25maWcgc2F2ZWRlZmNvbmZpZyBzaWxlbnRvbGRjb25maWcNCiAgICAgDQogICAgQEAg
LTg2MCw2ICs4NzcsMjAgQEAgcHJpbnQtb2JqczoNCiAgICAgcHJpbnQtc3JjczoNCiAgICAgCSQo
ZXJyb3IgRG8gbm90IGhhdmUgYSBjb25maWd1cmF0aW9uLiBQbGVhc2UgcnVuIG9uZSBvZiB0aGUg
Y29uZmlndXJhdGlvbiB0YXJnZXRzIGZpcnN0KQ0KICAgICBlbmRpZg0KICAgICtlbHNlICMhKCQo
c3ViX21ha2VfZXhlYyksKQ0KICAgICtleHBvcnQgc3ViX21ha2VfZXhlYzo9MQ0KICAgICsNCiAg
ICArJChCVUlMRF9ESVIpL01ha2VmaWxlOg0KICAgICsJbG4gLXNuICQoQ09ORklHX1VLX0JBU0Up
L01ha2VmaWxlICQoQCkNCiAgICArDQogICAgKyQoZmlsdGVyLW91dCBfYWxsICQoQlVJTERfRElS
KS9NYWtlZmlsZSBzdWItbWFrZSBkaXN0Y2xlYW4gcHJvcGVyY2xlYW4gaGVscCAkKGxhc3R3b3Jk
ICQoTUFLRUZJTEVfTElTVCkpLCBcDQogICAgKyAgJChNQUtFQ01ER09BTFMpKSBhbGw6IHN1Yi1t
YWtlDQogICAgKwlAOg0KICAgICsNCiAgICArc3ViLW1ha2U6ICQoQlVJTERfRElSKS9NYWtlZmls
ZQ0KICAgICsJJChRKSQoTUFLRSkgQ09ORklHX1VLX0JBU0U9JChDT05GSUdfVUtfQkFTRSkgLUMg
JChCVUlMRF9ESVIpIC1mICQoQlVJTERfRElSKS9NYWtlZmlsZSAkKE1BS0VDTURHT0FMUykNCiAg
ICArDQogICAgK2VuZGlmDQogICAgIA0KICAgICBoZWxwOg0KICAgICAJQGVjaG8gJ0NsZWFuaW5n
OicNCiAgICBkaWZmIC0tZ2l0IGEvYXJjaC9Db25maWcudWsgYi9hcmNoL0NvbmZpZy51aw0KICAg
IGluZGV4IGQwOTFkY2IuLjlmMjE1MDQgMTAwNjQ0DQogICAgLS0tIGEvYXJjaC9Db25maWcudWsN
CiAgICArKysgYi9hcmNoL0NvbmZpZy51aw0KICAgIEBAIC0xNiwxMyArMTYsMTMgQEAgY29uZmln
IEFSQ0hfQVJNXzMyDQogICAgIGVuZGNob2ljZQ0KICAgICANCiAgICAgaWYgKEFSQ0hfWDg2XzY0
KQ0KICAgIC0Jc291cmNlICJhcmNoL3g4Ni94ODZfNjQvQ29uZmlnLnVrIg0KICAgICsJc291cmNl
ICIkKFVLX0JBU0UpL2FyY2gveDg2L3g4Nl82NC9Db25maWcudWsiDQogICAgIGVuZGlmDQogICAg
IGlmIChBUkNIX0FSTV8zMikNCiAgICAtCXNvdXJjZSAiYXJjaC9hcm0vYXJtL0NvbmZpZy51ayIN
CiAgICArCXNvdXJjZSAiJChVS19CQVNFKS9hcmNoL2FybS9hcm0vQ29uZmlnLnVrIg0KICAgICBl
bmRpZg0KICAgICBpZiAoQVJDSF9BUk1fNjQpDQogICAgLQlzb3VyY2UgImFyY2gvYXJtL2FybTY0
L0NvbmZpZy51ayINCiAgICArCXNvdXJjZSAiJChVS19CQVNFKS9hcmNoL2FybS9hcm02NC9Db25m
aWcudWsiDQogICAgIGVuZGlmDQogICAgIA0KICAgICBjb25maWcgU1RBQ0tfU0laRV9QQUdFX09S
REVSDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQvc2NyaXB0cy9jb25maWd1cGRhdGUgYi9zdXBw
b3J0L3NjcmlwdHMvY29uZmlndXBkYXRlDQogICAgaW5kZXggY2U1Y2U5OC4uODZiODM1YyAxMDA3
NTUNCiAgICAtLS0gYS9zdXBwb3J0L3NjcmlwdHMvY29uZmlndXBkYXRlDQogICAgKysrIGIvc3Vw
cG9ydC9zY3JpcHRzL2NvbmZpZ3VwZGF0ZQ0KICAgIEBAIC0xLDYgKzEsNiBAQA0KICAgICAjIS9i
aW4vYmFzaA0KICAgIC1VS19DT05GSUc9IiR7MTotLmNvbmZpZ30iDQogICAgLVVLX0NPTkZJR19P
TEQ9IiR7MjotLmNvbmZpZy5vbGR9Ig0KICAgICtVS19DT05GSUc9IiR7MTotJHtVS19CQVNFfS8u
Y29uZmlnfSINCiAgICArVUtfQ09ORklHX09MRD0iJHsyOi0ke1VLX0JBU0V9Ly5jb25maWcub2xk
fSINCiAgICAgDQogICAgIF9zdWJjb25maWcoKQ0KICAgICB7DQogICAgLS0gDQogICAgMi43LjQN
CiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:43:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:43:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxeP-000129-D2; Thu, 19 Sep 2019 14:43:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxeN-00011y-Pq
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:43:15 +0000
X-Inumbo-ID: cd3f227e-daeb-11e9-9661-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id cd3f227e-daeb-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:43:11 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 766081056DB;
 Thu, 19 Sep 2019 16:43:10 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id FvchnU7eW-33; Thu, 19 Sep 2019 16:43:10 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4DA0C105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:43:10 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:43:09 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:43:09
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 21/23] kconfig: Determine the
 default arch from CC
Thread-Index: AQHVbssX1RHJjc46UE+qoXwT5PGMbqczE4WA
Date: Thu, 19 Sep 2019 14:43:09 +0000
Message-ID: <FE4976E1-06B5-4929-AE5D-691000195D62@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-22-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-22-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <EDFCDFB0A477984FB445DCEA28906386@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 21/23] kconfig: Determine the
 default arch from CC
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDExOjE3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEF1dG9tYXRpY2FsbHkg
ZGV0ZXJtaW5lIHRoZSBhcmNoaXRlY3R1cmUgdXNpbmcgQ0MNCiAgICANCiAgICBTaWduZWQtb2Zm
LWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICAt
LS0NCiAgICAgQ29uZmlnLnVrICAgICAgfCA2ICsrKysrLQ0KICAgICBNYWtlZmlsZSAgICAgICB8
IDEgKw0KICAgICBhcmNoL0NvbmZpZy51ayB8IDQgKystLQ0KICAgICAzIGZpbGVzIGNoYW5nZWQs
IDggaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEv
Q29uZmlnLnVrIGIvQ29uZmlnLnVrDQogICAgaW5kZXggNzcyZGI4NS4uMzIzNWI5MSAxMDA2NDQN
CiAgICAtLS0gYS9Db25maWcudWsNCiAgICArKysgYi9Db25maWcudWsNCiAgICBAQCAtMTEsNyAr
MTEsMTEgQEAgY29uZmlnIFVLX0NPREVOQU1FDQogICAgIAlkZWZhdWx0ICIkKFVLX0NPREVOQU1F
KSINCiAgICAgY29uZmlnIFVLX0FSQ0gNCiAgICAgCXN0cmluZw0KICAgIC0JZGVmYXVsdCAiJChV
S19BUkNIKSINCiAgICArCWRlZmF1bHQgIng4Nl82NCIgaWYgQVJDSF9YODZfNjQNCiAgICArCWRl
ZmF1bHQgImFybTY0IiAgaWYgQVJDSF9BUk1fNjQNCiAgICArCWRlZmF1bHQgImFybSIJaWYgQVJD
SF9BUk1fMzINCiAgICArCWRlZmF1bHQgJChVS19BUkNIKQ0KICAgICsNCiAgICAgY29uZmlnIE5P
X0FQUA0KICAgICAJZGVmX2Jvb2wgJChzaGVsbCx0ZXN0ICQoVUtfQkFTRSkgPSAkKFVLX0FQUCkg
JiYgZWNobyB5IHx8IGVjaG8gbikNCiAgICAgDQogICAgZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIv
TWFrZWZpbGUNCiAgICBpbmRleCA1Y2ZkNDQ1Li42NWFlMzFiIDEwMDY0NA0KICAgIC0tLSBhL01h
a2VmaWxlDQogICAgKysrIGIvTWFrZWZpbGUNCiAgICBAQCAtNjczLDYgKzY3Myw3IEBAIERFRkNP
TkZJRyA9ICQoY2FsbCBxc3RyaXAsJChVS19ERUZDT05GSUcpKQ0KICAgICAjIFdlIGRvbid0IHdh
bnQgdG8gZnVsbHkgZXhwYW5kIFVLX0RFRkNPTkZJRyBoZXJlLCBzbyBLY29uZmlnIHdpbGwNCiAg
ICAgIyByZWNvZ25pemUgdGhhdCBpZiBpdCdzIHN0aWxsIGF0IGl0cyBkZWZhdWx0ICQoQ09ORklH
X0RJUikvZGVmY29uZmlnDQogICAgIENPTU1PTl9DT05GSUdfRU5WID0gXA0KICAgICsJQ0M9JChD
QylcDQogICAgIAlDT05GSUdfPSJDT05GSUdfIiBcDQogICAgIAlLQ09ORklHX0NPTkZJRz0iJChV
S19DT05GSUcpIiBcDQogICAgIAlLQ09ORklHX0FVVE9DT05GSUc9IiQoS0NPTkZJR19BVVRPQ09O
RklHKSIgXA0KICAgIGRpZmYgLS1naXQgYS9hcmNoL0NvbmZpZy51ayBiL2FyY2gvQ29uZmlnLnVr
DQogICAgaW5kZXggOWYyMTUwNC4uNzkwOTdjZiAxMDA2NDQNCiAgICAtLS0gYS9hcmNoL0NvbmZp
Zy51aw0KICAgICsrKyBiL2FyY2gvQ29uZmlnLnVrDQogICAgQEAgLTEsNyArMSw3IEBADQogICAg
IGNob2ljZQ0KICAgICAJcHJvbXB0ICJBcmNoaXRlY3R1cmUiDQogICAgLQlkZWZhdWx0IEFSQ0hf
QVJNXzMyIGlmIChVS19BUkNIID0gImFybSIpDQogICAgLQlkZWZhdWx0IEFSQ0hfQVJNXzY0IGlm
IChVS19BUkNIID0gImFybTY0IikNCiAgICArCWRlZmF1bHQgQVJDSF9BUk1fMzIgaWYgKCQoc2hl
bGwsJChDQykgLWR1bXBtYWNoaW5lIHwgY3V0IC1kICctJyAtZjEpID0gImFybSIpDQogICAgKwlk
ZWZhdWx0IEFSQ0hfQVJNXzY0IGlmICgkKHNoZWxsLCQoQ0MpIC1kdW1wbWFjaGluZSB8IGN1dCAt
ZCAnLScgLWYxKSA9ICJhcm02NCIpDQogICAgIAlkZWZhdWx0IEFSQ0hfWDg2XzY0DQogICAgIAlo
ZWxwDQogICAgIAkgIFNlbGVjdCB0aGUgdGFyZ2V0IENQVSBhcmNoaXRlY3R1cmUuDQogICAgLS0g
DQogICAgMi43LjQNCiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:46:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:46:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxh3-0001PQ-FL; Thu, 19 Sep 2019 14:46:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxh2-0001PD-Bk
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:46:00 +0000
X-Inumbo-ID: 2f7351e1-daec-11e9-9661-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2f7351e1-daec-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:45:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 75A701056D8;
 Thu, 19 Sep 2019 16:45:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id iRt6ccmWTmmN; Thu, 19 Sep 2019 16:45:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4069D105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:45:56 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:45:55 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:45:55
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 00/23] Upgrade Unikraft's
 configuration system
Thread-Index: AQHVbsr67f5+6wl6WkG/jVVVrqadVqczFEuA
Date: Thu, 19 Sep 2019 14:45:55 +0000
Message-ID: <14C02E30-81D5-495A-BAE6-D8262056CC32@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <3021B24C0AB0534FAA4D071633733EF5@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 00/23] Upgrade Unikraft's
 configuration system
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGFua3MgZm9yIHRoZXNlIHNlcmllcy4gSSdtIGxpa2VseSB0byBmaXgg
c29tZSBtaW5vciB0aGluZ3MgaW4gdGhlIGxvZyBjb21taXRzIG9mIGEgbnVtYmVyIG9mIHRoZXNl
IHBhdGNoZXMsIGJ1dCBJJ2xsIGRvIGl0IG9uIHVwc3RyZWFtLg0KDQpTbyBwZW9wbGUga25vdywg
dGhpcyBwYXRjaCBzZXJpZXMgYWxzbyBlbmFibGVzIGEgbmV3IG1lbnU7IHRvIHVzZSBpdCB0eXBl
ICJtYWtlIGttZW51Y29uZmlnIiBpbnN0ZWFkIG9mICJtYWtlIG1lbnVjb25maWciICh0aGUgb2xk
IG9uZSBpcyBzdGlsbCB0aGVyZSkuDQoNCi0tIEZlbGlwZQ0KDQrvu79PbiAxOS4wOS4xOSwgMTE6
MTYsICJNaW5pb3MtZGV2ZWwgb24gYmVoYWxmIG9mIFNoYXJhbiBTYW50aGFuYW0iIDxtaW5pb3Mt
ZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBvbiBiZWhhbGYgb2YgU2hhcmFuLlNh
bnRoYW5hbUBuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAgV2UgdXBncmFkZSB0aGUgY29uZmlndXJh
dGlvbiBzeXN0ZW0gdXNlZCB3aXRoaW4gVW5pa3JhZnQuIFdlIGludHJvZHVjZSB0aGUgZm9sbG93
aW5nDQogICAgY2hhbmdlcyBhcyBhIHBhcnQgb2YgdGhlIHVwZ3JhZGUuDQogICAgDQogICAgLSBV
c2UgdGhlIGxhdGVzdCBLY29uZmlnWzFdIGNoYW5nZSBmcm9tIHRoZSBsaW51eCBrZXJuZWwgdjUu
Mg0KICAgIC0gSW50cm9kdWNlIHdpbGRjYXJkIG9wZXJhdGlvbiBpbiB0aGUga2NvbmZpZyBidWls
ZCBzeXN0ZW0NCiAgICAtIEFkZCBzdXBwb3J0IGZvciB0aGUga2NvbmZpZ2xpYlsyXSwgYSBweXRo
b24gYmFzZWQgdG9vbCB0byBwZXJmb3JtIGtjb25maWcuDQogICAgLSBUaGUgcHl0aG9uIG1lbnVj
b25maWcNCiAgICAtIFByZXByb2Nlc3MgQ29uZmlnLnVrIHRvIGRldGVybWluZSB0aGUgbGlicmFy
aWVzIHRvIGJlIGNvbmZpZ3VyZWQNCiAgICAtIFByZXByb2Nlc3MgQ29uZmlnLnVrIHRvIGRldGVy
bWluZSB0aGUgcGxhdGZvcm0gdG8gYmUgY29uZmlndXJlZC4NCiAgICAtIFByZXByb2Nlc3MgQ29u
ZmlnLnVrIHRvIGRldGVybWluZSB0aGUgaG9zdCBhcmNoaXRlY3R1cmUuDQogICAgDQogICAgVGhl
IHBhdGNoIHNldCBhbHNvIGNoYW5nZXMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2Yg
dGhlIGJ1aWxkIGZyb20gdGhlDQogICAgVW5pa3JhZnQgc291cmNlIHRyZWUgdG8gdGhlIGJ1aWxk
IGRpcmVjdG9yeSBpbiB0aGUgdGFyZ2V0IGFwcGxpY2F0aW9uLg0KICAgIA0KICAgIENoYW5nZXMg
c2luY2UgdjI6DQogICAgLSBUaGUgdjIgb2YgdGhlIHNlcmllcyBkaWQgbm90IGFwcGx5IGNsZWFu
bHkgb24gdGhlIHN0YWdpbmcgYnJhbmNoDQogICAgLSBQcmVmaXggdGhlIGV4dGVybmFsIHBsYXRm
b3JtIGFuZCBleHRlcm5hbCBsaWJyYXJpZXMgd2l0aCBDT05GSUdfVUtfQkFTRQ0KICAgIA0KICAg
IFsxXSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9rYnVpbGQva2NvbmZp
Zy1tYWNyby1sYW5ndWFnZS5odG1sDQogICAgWzJdIGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy83
NTMxOTYvDQogICAgDQogICAgDQogICAgU2hhcmFuIFNhbnRoYW5hbSAoMjMpOg0KICAgICAga2Nv
bmZpZzogSW1wb3J0IGtjb25maWcgZnJvbSBMaW51eCBrZXJuZWwNCiAgICAgIGtjb25maWc6IElu
dHJvZHVjZSBSRUFETUUudW5pa3JhZnQNCiAgICAgIGtjb25maWc6IFJlcGxhY2UgdGhlIGtlcm5l
bCB3aXRoIFVuaWtyYWZ0DQogICAgICBLY29uZmlnOiBJbXBvcnRpbmcgZXhpc3RpbmcgTWFrZWZp
bGUuYnINCiAgICAgIGtidWlsZDogQWRkIGJ1aWxkIGhlbHBlciBmdW5jdGlvbiBmcm9tIExpbnV4
DQogICAgICBrY29uZmlnOiBSZW1vdmluZyB0aGUgZ2VuZXJpYyBydWxlDQogICAgICBrY29uZmln
OiBJbXBvcnQgZml4ZGVwIGZyb20gTGludXgga2VybmVsDQogICAgICBidWlsZDogQWRkIFVuaWty
YWZ0IHNwZWNpZmljIGZpeGRlcCBoZWFkZXINCiAgICAgIGJ1aWxkOiBSZW1vdmUgaW1wbGljaXQg
cnVsZXMNCiAgICAgIGJ1aWxkOiBJbXBvcnQgdGhlIGtjb25maWcgaG9zdCBydWxlcyBmcm9tIExp
bnV4DQogICAgICBrY29uZmlnOiBGaXhkZXAgYW5kIGhvc3QgZmxhZ3MNCiAgICAgIGtjb25maWc6
IFN1cHBvcnQgZ2xvYiBpbiBrY29uZmlnDQogICAgICBLY29uZmlnOiBTaGlmdGluZyB0byB0aGUg
bmV3IEtjb25maWcgc3lzdGVtDQogICAgICBrY29uZmlnOiBJbXBvcnQga2NvbmZpZ2xpYg0KICAg
ICAgYnVpbGQ6IFVzZSBrY29uZmlnbGliIGZyb20gVW5pa3JhZnQNCiAgICAgIFJlcGxhY2UgdGhl
IHNpbGVudG9sZGNvbmZpZyB3aXRoIHN5bmNjb25maWcNCiAgICAgIGxpYjogVXNlIGdsb2IgaW5z
dGVhZCBvZiBhZGRpbmcgZWFjaCBsaWINCiAgICAgIGJ1aWxkOiBQcmUtcHJvY2VzcyBDb25maWcu
dWsgd2l0aGluIGtjb25maWcNCiAgICAgIGJ1aWxkOiBTdXBwb3J0IHN5bmNjb25maWcgd2l0aCBr
Y29uZmlnbGliDQogICAgICBidWlsZDogU3dpdGNoIGJ1aWxkIGRpcmVjdG9yeSBhcyBDVVJESVIN
CiAgICAgIGtjb25maWc6IERldGVybWluZSB0aGUgZGVmYXVsdCBhcmNoIGZyb20gQ0MNCiAgICAg
IGtjb25maWc6IFJlbW92ZSB0aGUgb2xkIGtjb25maWcNCiAgICAgIGtjb25maWc6IFJlcGxhY2Ug
dGhlIGtjb25maWcgd2l0aCB0aGUgdXBkYXRlDQogICAgDQogICAgIENvbmZpZy51ayAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NCArLQ0KICAgICBNYWtlZmls
ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMjUgKy0NCiAg
ICAgYXJjaC9Db25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDEwICstDQogICAgIGxpYi9Db25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAzNCAtDQogICAgIHBsYXQvQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgNCAtDQogICAgIHN1cHBvcnQvYnVpbGQvTWFrZWZpbGUucnVs
ZXMgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQ0KICAgICBzdXBwb3J0L2tjb25maWcv
TWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNjcgKy0NCiAgICAgc3VwcG9y
dC9rY29uZmlnL01ha2VmaWxlLmJyICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTMyICstDQog
ICAgIHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5ydWxlcyAgICAgICAgICAgICAgICAgICAgIHwg
ICA4NCArDQogICAgIHN1cHBvcnQva2NvbmZpZy9QT1RGSUxFUy5pbiAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICAxMiAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9SRUFETUUudW5pa3JhZnQgICAg
ICAgICAgICAgICAgICAgIHwgICAgNiArLQ0KICAgICBzdXBwb3J0L2tjb25maWcvY2hlY2suc2gg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTQgLQ0KICAgICBzdXBwb3J0L2tjb25maWcv
Y29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMjkgKy0NCiAgICAgc3VwcG9y
dC9rY29uZmlnL2NvbmZkYXRhLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNTMxICstDQog
ICAgIHN1cHBvcnQva2NvbmZpZy9leHByLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDQ3MyArLQ0KICAgICBzdXBwb3J0L2tjb25maWcvZXhwci5oICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAxMTkgKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2ZpeGRlcC5jICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgIDU5ICstDQogICAgIHN1cHBvcnQva2NvbmZpZy9mb28uaCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxMiAtDQogICAgIHN1cHBvcnQva2NvbmZp
Zy9nY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICAgICAgIHwgICAzMCArDQogICAgIHN1cHBv
cnQva2NvbmZpZy9nY29uZi5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExNiArLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcvaW1hZ2VzLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgMzQgKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5oICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDMzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL2t4Z2V0dGV4dC5jICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMjM1IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2xleGVyLmwg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDk4ICsrDQogICAgIHN1cHBvcnQva2NvbmZp
Zy9saXN0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNyArLQ0KICAgICBzdXBw
b3J0L2tjb25maWcvbGtjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNjUgKy0N
CiAgICAgc3VwcG9ydC9rY29uZmlnL2xrY19wcm90by5oICAgICAgICAgICAgICAgICAgICAgICAg
fCAgMTA1ICstDQogICAgIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy8uZ2l0aWdub3JlICAgICAg
ICAgICAgICAgIHwgICAgNCAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9CSUcuRkFU
LldBUk5JTkcgICAgICAgICAgIHwgICAgMiArLQ0KICAgICBzdXBwb3J0L2tjb25maWcvbHhkaWFs
b2cvY2hlY2stbHhkaWFsb2cuc2ggICAgICAgICB8ICAgOTEgLQ0KICAgICBzdXBwb3J0L2tjb25m
aWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgICAgICAgICAgICAgICB8ICAgMjMgKy0NCiAgICAgc3Vw
cG9ydC9rY29uZmlnL2x4ZGlhbG9nL2RpYWxvZy5oICAgICAgICAgICAgICAgICAgfCAgIDI1ICst
DQogICAgIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9pbnB1dGJveC5jICAgICAgICAgICAgICAg
IHwgICAyNCArLQ0KICAgICBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jICAgICAg
ICAgICAgICAgICB8ICAgMjkgKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3RleHRi
b3guYyAgICAgICAgICAgICAgICAgfCAgIDE3ICstDQogICAgIHN1cHBvcnQva2NvbmZpZy9seGRp
YWxvZy91dGlsLmMgICAgICAgICAgICAgICAgICAgIHwgICAxNyArLQ0KICAgICBzdXBwb3J0L2tj
b25maWcvbHhkaWFsb2cveWVzbm8uYyAgICAgICAgICAgICAgICAgICB8ICAgMTkgKy0NCiAgICAg
c3VwcG9ydC9rY29uZmlnL21jb25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ3
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL21jb25mLmMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgMTg0ICstDQogICAgIHN1cHBvcnQva2NvbmZpZy9tZW51LmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDMxNSArLQ0KICAgICBzdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmln
LnNoICAgICAgICAgICAgICAgICAgICB8ICAxMDMgKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnL25j
b25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsNCiAgICAgc3VwcG9ydC9r
Y29uZmlnL25jb25mLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTg0ICstDQogICAg
IHN1cHBvcnQva2NvbmZpZy9uY29uZi5ndWkuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz
MCArLQ0KICAgICBzdXBwb3J0L2tjb25maWcvbmNvbmYuaCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMTAgKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnL3BhcnNlci55ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgNzMxICsrDQogICAgIC4uLi8wMS1rY29uZmlnLWtlcm5lbC10by1i
dWlsZHJvb3QtdW5pa29yZS5wYXRjaCAgIHwgICA5OCAtDQogICAgIC4uLi9wYXRjaGVzLzAxLWtj
b25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoICAgIHwgICA3NiArDQogICAgIHN1cHBvcnQv
a2NvbmZpZy9wYXRjaGVzLzAyLWltcG9ydC1tYWtlZmlsZS5iciAgICAgIHwgICA1OSArDQogICAg
IC4uLi9wYXRjaGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsIHwgIDEw
MiArDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUg
ICAgIHwgICAyNiArDQogICAgIC4uLi9rY29uZmlnL3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZp
eGRlcC1oZWFkZXIgIHwgICAxMiArDQogICAgIC4uLi9wYXRjaGVzLzA2LWJyLWJ1aWxkLXN5c3Rl
bS1pbnRlZ3JhdGlvbi5wYXRjaCAgIHwgICAzNSAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRj
aGVzLzA2LXJlbW92ZS1pbXBsaWNpdC1ydWxlcyAgIHwgICAxMyArDQogICAgIHN1cHBvcnQva2Nv
bmZpZy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzIHwgIDE0MiArDQogICAgIHN1
cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcgIHwgICAxOSAr
DQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmln
IHwgICA3MCArDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzEwLWJyLWJ1aWxkLXN5c3Rl
bS5wYXRjaCAgIHwgICA4MCAtDQogICAgIC4uLi9wYXRjaGVzLzExLXVzZS1ta3RlbXAtZm9yLWx4
ZGlhbG9nLnBhdGNoICAgICAgIHwgICAxNyAtDQogICAgIC4uLi9rY29uZmlnL3BhdGNoZXMvMTIt
Zml4LWdsYWRlLWZpbGUtcGF0aC5wYXRjaCAgIHwgICAxNyAtDQogICAgIC4uLi9wYXRjaGVzLzE0
LXN1cHBvcnQtb3V0LW9mLXRyZWUtY29uZmlnLnBhdGNoICAgIHwgIDIwNyAtDQogICAgIC4uLi9r
Y29uZmlnL3BhdGNoZXMvMTUtZml4LXFjb25mLW1vYy1ydWxlLnBhdGNoICAgIHwgICAyNCAtDQog
ICAgIC4uLmRpYWxvZy1nZXQtbmN1cnNlcy1DRkxBR1Mtd2l0aC1wa2ctY29uZmlnLnBhdGNoIHwg
ICA1MCAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzL3NlcmllcyAgICAgICAgICAgICAg
ICAgICAgIHwgICAgOCAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9wcmVwcm9jZXNzLmMgICAgICAg
ICAgICAgICAgICAgICAgIHwgIDU3MyArKw0KICAgICBzdXBwb3J0L2tjb25maWcvcWNvbmYtY2Zn
LnNoICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzIgKw0KICAgICBzdXBwb3J0L2tjb25maWcv
cWNvbmYuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4MDkgKystDQogICAgIHN1cHBv
cnQva2NvbmZpZy9xY29uZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1MyArLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwgICAgICAgICAgICAgICB8
ICAgNjQgKy0NCiAgICAgc3VwcG9ydC9rY29uZmlnL3N5bWJvbC5jICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMzQyICstDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1l
bnUvS2NvbmZpZyAgICAgICAgIHwgICA1MiArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9h
dXRvX3N1Ym1lbnUvX19pbml0X18ucHkgICAgIHwgICAxMyArDQogICAgIHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IHwgICAxMCArDQogICAgIHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICA1NiArDQog
ICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkgICAgICAgICAgIHwg
ICA0MSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29u
ZmlnICAgIHwgICAgNSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhw
ZWN0ZWRfY29uZmlnICAgIHwgICAgOSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9p
Y2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnIHwgICAgNSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3Rz
L2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnICAgIHwgICAgOSArDQogICAgIC4uLi9rY29u
ZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dCAgIHwgICAxMCArDQogICAg
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcgICAgICAgIHwgICAg
MiArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2V4cGVjdGVkX3N0ZG91
dCAgIHwgICAxNSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21f
ZGVwL0tjb25maWcgIHwgICAyMSArDQogICAgIC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9t
X2RlcC9fX2luaXRfXy5weSAgICAgIHwgICAxNiArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZpZyAgIHwgICAgMiArDQogICAgIC4uLi90ZXN0cy9j
aG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9jb25maWcgIHwgICAgMyArDQogICAgIC4u
Li90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQgIHwgICAgNCAr
DQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jb25mdGVzdC5weSAgICAgICAgICAgICAgICAg
IHwgIDI5MSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9L
Y29uZmlnICAgIHwgICA2MyArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
ZGVwL19faW5pdF9fLnB5ICAgIHwgICAxMCArDQogICAgIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZl
X2RlcC9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAzOCArDQogICAgIHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnICAgIHwgICAgMiArDQogICAgIC4uLi9r
Y29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMSAgIHwgICAgNSArDQog
ICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMiAgIHwg
ICAgNCArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcu
aW5jMyAgIHwgICAgMiArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5j
L19faW5pdF9fLnB5ICAgIHwgICAxMSArDQogICAgIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2lu
Yy9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAgNiArDQogICAgIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZyAgICAgICAgIHwgICAyNSArDQogICAgIHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18ucHkgICAgIHwgICAxNSArDQogICAg
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnICAgICAgIHwgICAg
MSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29u
ZmlnIHwgICAgNCArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhf
ZGVwL0tjb25maWcgIHwgICAzOSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvX19pbml0X18ucHkgIHwgICAxNSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZyAgIHwgICAgMyArDQogICAgIC4uLi90ZXN0cy9u
ZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0ZG91dCAgICAgIHwgICAxMCArDQogICAgIC4u
Li9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnICAgIHwgICAxNiAr
DQogICAgIC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkgICAgICAg
IHwgICAyMCArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5t
ZXQvY29uZmlnIHwgICAgMSArDQogICAgIC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQv
ZXhwZWN0ZWRfY29uZmlnICAgIHwgICAgNSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXBy
b2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcgIHwgICAyNyArDQogICAgIC4uLi90ZXN0cy9wcmVw
cm9jZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weSAgICAgIHwgICAgOSArDQogICAgIC4uLi90
ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIgIHwgICAgNSArDQog
ICAgIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQgIHwg
ICAgMSArDQogICAgIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29u
ZmlnICAgIHwgICAgNSArDQogICAgIC4uLi9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9f
X2luaXRfXy5weSAgICAgIHwgICAxMSArDQogICAgIC4uLi9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4
cGFuc2lvbi9leHBlY3RlZF9zdGRlcnIgIHwgICAgMSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnICAgIHwgICA0NCArDQogICAgIC4uLi9rY29u
ZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5ICAgIHwgICAgOCArDQogICAg
IC4uLi90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAx
MCArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25m
aWcgIHwgICA1MyArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUv
X19pbml0X18ucHkgIHwgICAgOCArDQogICAgIC4uLi90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxl
L2V4cGVjdGVkX3N0ZGVyciAgICAgIHwgICAgOSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9weXRlc3QuaW5pICAgICAgICAgICAgICAgICAgIHwgICAgNyArDQogICAgIHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZyAgIHwgICAzNSArDQogICAgIC4u
Li9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weSAgIHwgICAxNyAr
DQogICAgIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCAgICAg
IHwgICAgMiArDQogICAgIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MSAgICAgIHwgICAgNCArDQogICAgIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhw
ZWN0ZWRfc3Rkb3V0MiAgICAgIHwgICAgNSArDQogICAgIHN1cHBvcnQva2NvbmZpZy91dGlsLmMg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDEwNiArLQ0KICAgICBzdXBwb3J0L2tjb25m
aWcvemNvbmYuZ3BlcmYgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDcgLQ0KICAgICBzdXBw
b3J0L2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgICAgICAgICAgICAgICB8ICAyODYgLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcvemNvbmYubCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAzNjMgLQ0KICAgICBzdXBwb3J0L2tjb25maWcvemNvbmYubGV4LmMgICAgICAgICAgICAgICAg
ICAgICAgICB8IDI4MjAgKysrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnL3pjb25mLmxleC5j
X3NoaXBwZWQgICAgICAgICAgICAgICAgfCAyNDIwIC0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29u
ZmlnL3pjb25mLnRhYi5jICAgICAgICAgICAgICAgICAgICAgICAgfCAyNTA0ICsrKysrKysNCiAg
ICAgc3VwcG9ydC9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQgICAgICAgICAgICAgICAgfCAy
NTM4IC0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL3pjb25mLnkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgNzMzIC0tDQogICAgIHN1cHBvcnQva2NvbmZpZ2xpYi9MSUNFTlNFLnR4
dCAgICAgICAgICAgICAgICAgICAgIHwgICAgNSArDQogICAgIHN1cHBvcnQva2NvbmZpZ2xpYi9N
QU5JRkVTVC5pbiAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArDQogICAgIHN1cHBvcnQva2Nv
bmZpZ2xpYi9SRUFETUUucnN0ICAgICAgICAgICAgICAgICAgICAgIHwgIDgwNiArKysNCiAgICAg
c3VwcG9ydC9rY29uZmlnbGliL2FsbGRlZmNvbmZpZy5weSAgICAgICAgICAgICAgICAgfCAgIDI3
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2FsbG1vZGNvbmZpZy5weSAgICAgICAgICAgICAg
ICAgfCAgIDQ2ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2FsbG5vY29uZmlnLnB5ICAgICAg
ICAgICAgICAgICAgfCAgIDQ1ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2FsbHllc2NvbmZp
Zy5weSAgICAgICAgICAgICAgICAgfCAgIDU2ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2Rl
ZmNvbmZpZy5weSAgICAgICAgICAgICAgICAgICAgfCAgIDQzICsNCiAgICAgc3VwcG9ydC9rY29u
ZmlnbGliL2V4YW1wbGVzL0ttZW51Y29uZmlnICAgICAgICAgICAgfCAgMTAyICsNCiAgICAgc3Vw
cG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2FsbG5vY29uZmlnX3dhbGsucHkgICAgfCAgIDY2ICsN
CiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2RlZmNvbmZpZ19vbGRjb25maWcucHkg
fCAgIDM5ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2R1bXB2YXJzLnB5ICAg
ICAgICAgICAgfCAgIDE1ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2V2YWxf
ZXhwci5weSAgICAgICAgICAgfCAgIDI0ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1w
bGVzL2ZpbmRfc3ltYm9sLnB5ICAgICAgICAgfCAgMTEyICsNCiAgICAgc3VwcG9ydC9rY29uZmln
bGliL2V4YW1wbGVzL2hlbHBfZ3JlcC5weSAgICAgICAgICAgfCAgIDY0ICsNCiAgICAgc3VwcG9y
dC9rY29uZmlnbGliL2V4YW1wbGVzL2tjb25maWdsaWIucHkgICAgICAgICAgfCAgICAxICsNCiAg
ICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2xpc3RfdW5kZWZpbmVkLnB5ICAgICAgfCAg
MTU2ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL21lbnVjb25maWdfZXhhbXBs
ZS5weSAgfCAgMzQxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL21lcmdlX2Nv
bmZpZy5weSAgICAgICAgfCAgMTMzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVz
L3ByaW50X2NvbmZpZ190cmVlLnB5ICAgfCAgMTk5ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGli
L2V4YW1wbGVzL3ByaW50X3N5bV9pbmZvLnB5ICAgICAgfCAgIDU0ICsNCiAgICAgc3VwcG9ydC9r
Y29uZmlnbGliL2V4YW1wbGVzL3ByaW50X3RyZWUucHkgICAgICAgICAgfCAgIDc1ICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnbGliL2dlbmNvbmZpZy5weSAgICAgICAgICAgICAgICAgICAgfCAgMTMy
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2d1aWNvbmZpZy5weSAgICAgICAgICAgICAgICAg
ICAgfCAyMzE2ICsrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2tjb25maWdsaWIucHkg
ICAgICAgICAgICAgICAgICAgfCA3MDE4ICsrKysrKysrKysrKysrKysrKysrDQogICAgIHN1cHBv
cnQva2NvbmZpZ2xpYi9saXN0bmV3Y29uZmlnLnB5ICAgICAgICAgICAgICAgIHwgICA0NyArDQog
ICAgIHN1cHBvcnQva2NvbmZpZ2xpYi9tYWtlZmlsZS5wYXRjaCAgICAgICAgICAgICAgICAgIHwg
ICA0OCArDQogICAgIHN1cHBvcnQva2NvbmZpZ2xpYi9tZW51Y29uZmlnLnB5ICAgICAgICAgICAg
ICAgICAgIHwgMzI2NCArKysrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL29sZGNvbmZp
Zy5weSAgICAgICAgICAgICAgICAgICAgfCAgMjQ2ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGli
L29sZGRlZmNvbmZpZy5weSAgICAgICAgICAgICAgICAgfCAgIDI4ICsNCiAgICAgc3VwcG9ydC9r
Y29uZmlnbGliL3NhdmVkZWZjb25maWcucHkgICAgICAgICAgICAgICAgfCAgIDQ5ICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnbGliL3NldGNvbmZpZy5weSAgICAgICAgICAgICAgICAgICAgfCAgIDky
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3NldHVwLmNmZyAgICAgICAgICAgICAgICAgICAg
ICAgfCAgICA3ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3NldHVwLnB5ICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgMTAwICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0thcHBl
bmQgICAgICAgICAgICAgICAgICAgfCAgIDEyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0thc3NpZ25hYmxlICAgICAgICAgICAgICAgfCAgMjMwICsNCiAgICAgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tjaG9pY2UgICAgICAgICAgICAgICAgICAgfCAgMTk4ICsNCiAgICAgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnQgICAgICAgfCAgICA4ICsN
CiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnRfYnV0X24g
fCAgIDEwICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfbm9uZXhp
c3RlbnQgICAgfCAgICA1ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25m
aWdfc3JjdHJlZSAgICAgICAgfCAgICA1ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tkZXBjb3B5ICAgICAgICAgICAgICAgICAgfCAgMTczICsNCiAgICAgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0tkZXBsb29wMCAgICAgICAgICAgICAgICAgfCAgICAzICsNCiAgICAgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMSAgICAgICAgICAgICAgICAgfCAgICAzICsNCiAg
ICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMTAgICAgICAgICAgICAgICAgfCAg
IDQ4ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMiAgICAgICAgICAg
ICAgICAgfCAgICAzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMyAg
ICAgICAgICAgICAgICAgfCAgICAzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tk
ZXBsb29wNCAgICAgICAgICAgICAgICAgfCAgICA3ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tkZXBsb29wNSAgICAgICAgICAgICAgICAgfCAgICA3ICsNCiAgICAgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNiAgICAgICAgICAgICAgICAgfCAgICA2ICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNyAgICAgICAgICAgICAgICAgfCAgIDEx
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOCAgICAgICAgICAgICAg
ICAgfCAgICA4ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOSAgICAg
ICAgICAgICAgICAgfCAgICA3ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkaXJk
ZXAgICAgICAgICAgICAgICAgICAgfCAgIDMwICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0tlc2NhcGUgICAgICAgICAgICAgICAgICAgfCAgICAzICsNCiAgICAgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tldmFsICAgICAgICAgICAgICAgICAgICAgfCAgIDM0ICsNCiAgICAgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tleHByX2l0ZW1zICAgICAgICAgICAgICAgfCAgIDExICsN
CiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0toZWxwICAgICAgICAgICAgICAgICAgICAg
fCAgIDUwICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpZnJlbW92YWwgICAgICAg
ICAgICAgICAgfCAgIDk5ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbXBseSAg
ICAgICAgICAgICAgICAgICAgfCAgMTQ1ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tpbmNsdWRlX3BhdGggICAgICAgICAgICAgfCAgIDEyICsNCiAgICAgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8xICAgfCAgIDEyICsNCiAgICAgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8yICAgfCAgIDExICsNCiAg
ICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpdGVtbGlzdHMgICAgICAgICAgICAgICAgfCAg
IDM2ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tsb2NhdGlvbiAgICAgICAgICAg
ICAgICAgfCAgIDcyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tsb2NhdGlvbl9z
b3VyY2VkICAgICAgICAgfCAgIDE4ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tt
YWlubWVudSAgICAgICAgICAgICAgICAgfCAgICA1ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0ttZW51Y29uZmlnICAgICAgICAgICAgICAgfCAgIDM3ICsNCiAgICAgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0ttaXNjICAgICAgICAgICAgICAgICAgICAgfCAgIDgyICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNzaW5ncnNvdXJjZSAgICAgICAgICAgfCAgICAx
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNzaW5nc291cmNlICAgICAgICAg
ICAgfCAgICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tvcmRlciAgICAgICAg
ICAgICAgICAgICAgfCAgIDM1ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0twcmVw
cm9jZXNzICAgICAgICAgICAgICAgfCAgMTQ3ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0tyYW5nZSAgICAgICAgICAgICAgICAgICAgfCAgMTMzICsNCiAgICAgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tyZWN1cnNpdmUxICAgICAgICAgICAgICAgfCAgICAxICsNCiAgICAgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNpdmUyICAgICAgICAgICAgICAgfCAgICAxICsN
CiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWZlcmVuY2VkICAgICAgICAgICAgICAg
fCAgIDYzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWxhdGlvbiAgICAgICAg
ICAgICAgICAgfCAgIDM2ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZXByICAg
ICAgICAgICAgICAgICAgICAgfCAgIDY0ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tzdHIgICAgICAgICAgICAgICAgICAgICAgfCAgMjkzICsNCiAgICAgc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0t1bmRlZiAgICAgICAgICAgICAgICAgICAgfCAgIDIzICsNCiAgICAgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0t1c2VyZnVuY3Rpb25zICAgICAgICAgICAgfCAgIDExICsNCiAg
ICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0t2aXNpYmlsaXR5ICAgICAgICAgICAgICAgfCAg
MzQyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19pbmRlbnRlZCAgICAg
ICAgICAgfCAgICAzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19zZXRf
Ym9vbCAgICAgICAgICAgfCAgICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2Nv
bmZpZ19zZXRfc3RyaW5nICAgICAgICAgfCAgICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL2RlZmNvbmZpZ18xICAgICAgICAgICAgICAgfCAgICAwDQogICAgIHN1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9kZWZjb25maWdfMiAgICAgICAgICAgICAgIHwgICAgMA0KICAgICBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvZW1wdHkgICAgICAgICAgICAgICAgICAgICB8ICAgIDANCiAg
ICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2tjb25maWdmdW5jdGlvbnMucHkgICAgICAgfCAg
IDE0ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3JlbHRlc3QgICAgICAgICAgICAg
ICAgICAgfCAgIDUxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LY29uZmln
X3N5bWxpbmtfMiAgICAgfCAgICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1
Yi9LY29uZmlnX3N5bWxpbmtfMyAgICAgfCAgICAyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3VyY2VkMSAgfCAgICAxICsNCiAgICAgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3VyY2VkMiAgfCAgICAxICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3NvdXJjZWQxICAgfCAgICAx
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3NvdXJjZWQy
ICAgfCAgICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25f
cnNvdXJjZWQgICAgfCAgICAyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9k
ZWZjb25maWdfaW5fc3ViICAgICAgfCAgICAwDQogICAgIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9zdWIvc3ViL0tjb25maWdfc3ltbGlua18xIHwgICAgMiArDQogICAgIHN1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9zeW1saW5rICAgICAgICAgICAgICAgICAgIHwgICAgMSArDQogICAgIHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0c3VpdGUucHkgICAgICAgICAgICAgICAgICAgIHwgMzEzNiArKysr
KysrKysNCiAgICAgc3VwcG9ydC9zY3JpcHRzL2NvbmZpZ3VwZGF0ZSAgICAgICAgICAgICAgICAg
ICAgICAgfCAgICA0ICstDQogICAgIHN1cHBvcnQvc2NyaXB0cy91a19idWlsZF9jb25maWd1cmUu
c2ggICAgICAgICAgICAgIHwgIDEwMiArDQogICAgIDI0MSBmaWxlcyBjaGFuZ2VkLCAzMzM3NyBp
bnNlcnRpb25zKCspLCA5NjA3IGRlbGV0aW9ucygtKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLnJ1bGVzDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvUE9URklMRVMuaW4NCiAgICAgZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBv
cnQva2NvbmZpZy9jaGVjay5zaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL2Zvby5oDQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcvZ2NvbmYt
Y2ZnLnNoDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvaW1hZ2VzLmgN
CiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9reGdldHRleHQuYw0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2xleGVyLmwNCiAgICAgZGVsZXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy8uZ2l0aWdub3JlDQogICAgIGRl
bGV0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cu
c2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9tY29uZi1jZmcuc2gN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9uY29uZi1jZmcuc2gNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXJzZXIueQ0KICAgICBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwt
dG8tYnVpbGRyb290LXVuaWtvcmUucGF0Y2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wMi1pbXBvcnQt
bWFrZWZpbGUuYnINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRj
aGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxl
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNS1hZGQt
dW5pa3JhZnQtZml4ZGVwLWhlYWRlcg0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3BhdGNoZXMvMDYtYnItYnVpbGQtc3lzdGVtLWludGVncmF0aW9uLnBhdGNoDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1w
bGljaXQtcnVsZXMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRj
aGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOC1maXhkZXAtYW5kLWNvbmZpZy1mbGFnDQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOS1zdXBwb3J0LWdsb2It
aW4ta2NvbmZpZw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNo
ZXMvMTAtYnItYnVpbGQtc3lzdGVtLnBhdGNoDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcvcGF0Y2hlcy8xMS11c2UtbWt0ZW1wLWZvci1seGRpYWxvZy5wYXRjaA0KICAg
ICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMTItZml4LWdsYWRl
LWZpbGUtcGF0aC5wYXRjaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
L3BhdGNoZXMvMTQtc3VwcG9ydC1vdXQtb2YtdHJlZS1jb25maWcucGF0Y2gNCiAgICAgZGVsZXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzE1LWZpeC1xY29uZi1tb2MtcnVs
ZS5wYXRjaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMv
MTcta2NvbmZpZy1seGRpYWxvZy1nZXQtbmN1cnNlcy1DRkxBR1Mtd2l0aC1wa2ctY29uZmlnLnBh
dGNoDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy9zZXJp
ZXMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wcmVwcm9jZXNzLmMN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9xY29uZi1jZmcuc2gNCiAg
ICAgbW9kZSBjaGFuZ2UgMTAwNjQ0ID0+IDEwMDc1NSBzdXBwb3J0L2tjb25maWcvc3RyZWFtbGlu
ZV9jb25maWcucGwNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9hdXRvX3N1Ym1lbnUvS2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvS2Nv
bmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2lj
ZS9fX2luaXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25maWcNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsbm9f
ZXhwZWN0ZWRfY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xk
YXNrMV9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVl
X3dpdGhfbV9kZXAvX19pbml0X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcNCiAgICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2Rl
cC9leHBlY3RlZF9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jb25mdGVzdC5weQ0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVw
L0tjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9l
cnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycg0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzENCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzINCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZl
X2luYy9LY29uZmlnLmluYzMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0
ZGVycg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVy
X2Nob2ljZS9LY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcv
dGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZw0KICAgICBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9j
b25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdf
Y2hvaWNlX3dpdGhfZGVwL0tjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5DQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9j
b25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdf
Y2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0ZG91dA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVw
X3VubWV0L19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3Rl
ZF9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9w
cmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9LY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0X18ucHkN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNz
L2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRv
dXQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9j
ZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0
X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVw
cm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnINCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmln
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vz
cy9lc2NhcGUvX19pbml0X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnINCiAgICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tj
b25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVw
cm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBlY3RlZF9zdGRlcnINCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9weXRlc3QuaW5pDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRf
Y2hvaWNlL0tjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rk
b3V0MA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRf
bmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIN
CiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96Y29uZi5ncGVyZg0KICAg
ICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVk
DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvemNvbmYubA0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLmxleC5jDQogICAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvemNvbmYubGV4LmNfc2hpcHBlZA0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLnRhYi5jDQogICAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZA0KICAgICBk
ZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLnkNCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9MSUNFTlNFLnR4dA0KICAgICBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL01BTklGRVNULmluDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvUkVBRE1FLnJzdA0KICAgICBjcmVhdGUgbW9kZSAx
MDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2FsbGRlZmNvbmZpZy5weQ0KICAgICBjcmVhdGUgbW9k
ZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2FsbG1vZGNvbmZpZy5weQ0KICAgICBjcmVhdGUg
bW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2FsbG5vY29uZmlnLnB5DQogICAgIGNyZWF0
ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvYWxseWVzY29uZmlnLnB5DQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvZGVmY29uZmlnLnB5DQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvS21lbnVjb25maWcN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9hbGxu
b2NvbmZpZ193YWxrLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvZXhhbXBsZXMvZGVmY29uZmlnX29sZGNvbmZpZy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2R1bXB2YXJzLnB5DQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZXZhbF9leHByLnB5DQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZmluZF9zeW1i
b2wucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxl
cy9oZWxwX2dyZXAucHkNCiAgICAgY3JlYXRlIG1vZGUgMTIwMDAwIHN1cHBvcnQva2NvbmZpZ2xp
Yi9leGFtcGxlcy9rY29uZmlnbGliLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWdsaWIvZXhhbXBsZXMvbGlzdF91bmRlZmluZWQucHkNCiAgICAgY3JlYXRlIG1vZGUg
MTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9tZW51Y29uZmlnX2V4YW1wbGUucHkN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9tZXJn
ZV9jb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9l
eGFtcGxlcy9wcmludF9jb25maWdfdHJlZS5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL3ByaW50X3N5bV9pbmZvLnB5DQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfdHJlZS5weQ0KICAg
ICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2dlbmNvbmZpZy5weQ0KICAg
ICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2d1aWNvbmZpZy5weQ0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2tjb25maWdsaWIucHkNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9saXN0bmV3Y29uZmlnLnB5
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvbWFrZWZpbGUucGF0
Y2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9tZW51Y29uZmln
LnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvb2xkY29uZmln
LnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvb2xkZGVmY29u
ZmlnLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvc2F2ZWRl
ZmNvbmZpZy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL3Nl
dGNvbmZpZy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Nl
dHVwLmNmZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3NldHVw
LnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Fw
cGVuZA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0th
c3NpZ25hYmxlDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2Nob2ljZQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0tkZWZjb25maWdfZXhpc3RlbnQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX2V4aXN0ZW50X2J1dF9uDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19ub25leGlzdGVu
dA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZj
b25maWdfc3JjdHJlZQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tkZXBjb3B5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2RlcGxvb3AwDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS2RlcGxvb3AxDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RlcGxvb3AxMA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNA0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNQ0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNg0KICAgICBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNw0KICAgICBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOA0KICAgICBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOQ0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkaXJkZXANCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXNjYXBlDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2V2YWwNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXhwcl9pdGVtcw0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0toZWxwDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2lmcmVtb3Zh
bA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbXBs
eQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbmNs
dWRlX3BhdGgNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9LaW5jbHVkZV9wYXRoX3NvdXJjZWRfMQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8yDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2l0ZW1saXN0cw0KICAgICBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tsb2NhdGlvbg0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tsb2NhdGlvbl9zb3Vy
Y2VkDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21h
aW5tZW51DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S21lbnVjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90
ZXN0cy9LbWlzYw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0ttaXNzaW5ncnNvdXJjZQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0ttaXNzaW5nc291cmNlDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS29yZGVyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS3ByZXByb2Nlc3MNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmFuZ2UNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVjdXJzaXZlMQ0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNpdmUyDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JlZmVyZW5jZWQNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVsYXRpb24NCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVwcg0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tzdHINCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdW5kZWYNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdXNlcmZ1bmN0aW9ucw0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0t2aXNpYmls
aXR5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvY29u
ZmlnX2luZGVudGVkDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvY29uZmlnX3NldF9ib29sDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvY29uZmlnX3NldF9zdHJpbmcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9kZWZjb25maWdfMQ0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2RlZmNvbmZpZ18yDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvZW1wdHkNCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9rY29uZmlnZnVuY3Rpb25zLnB5DQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvcmVsdGVzdA0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LY29u
ZmlnX3N5bWxpbmtfMg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL3N1Yi9LY29uZmlnX3N5bWxpbmtfMw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3VyY2VkMQ0KICAgICBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jz
b3VyY2VkMg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L3N1Yi9LbG9jYXRpb25fZ3NvdXJjZWQxDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9nc291cmNlZDINCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX3Jzb3VyY2Vk
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL2Rl
ZmNvbmZpZ19pbl9zdWINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9zdWIvc3ViL0tjb25maWdfc3ltbGlua18xDQogICAgIGNyZWF0ZSBtb2RlIDEyMDAw
MCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ltbGluaw0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzdWl0ZS5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA3
NTUgc3VwcG9ydC9zY3JpcHRzL3VrX2J1aWxkX2NvbmZpZ3VyZS5zaA0KICAgIA0KICAgIC0tIA0K
ICAgIDIuNy40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0
Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:54:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:54:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxpA-0003HR-6H; Thu, 19 Sep 2019 14:54:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxfC-00019j-Qe
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:44:07 +0000
X-Inumbo-ID: ed65ad3e-daeb-11e9-9661-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ed65ad3e-daeb-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:44:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 4FAE11056D8;
 Thu, 19 Sep 2019 16:44:04 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id PyQD6moqryXy; Thu, 19 Sep 2019 16:44:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 1DBE4105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:44:03 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:44:00 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:44:00
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 22/23] kconfig: Remove the old
 kconfig
Thread-Index: AQHVbuL19/dBT6C6sUGLPIxnknJJ96czE5GA
Date: Thu, 19 Sep 2019 14:43:59 +0000
Message-ID: <97B2F300-3DC1-4E9C-9C52-DC6D1F107768@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-23-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-23-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <E20321BB3585B741A428A3EF1E708035@office.hd>
MIME-Version: 1.0
X-Mailman-Approved-At: Thu, 19 Sep 2019 14:54:22 +0000
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 22/23] kconfig: Remove the
 old kconfig
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDE0OjA4LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFNpZ25lZC1vZmYtYnk6
IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAzMjEgLS0tDQogICAgIHN1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5iciAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICA1MyAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9QT1RGSUxFUy5pbiAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAxMiAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9SRUFETUUu
dW5pa3JhZnQgICAgICAgICAgICAgICAgICAgIHwgICAyMSAtDQogICAgIHN1cHBvcnQva2NvbmZp
Zy9jaGVjay5zaCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNCAtDQogICAgIHN1cHBv
cnQva2NvbmZpZy9jb25mLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDcxNyAtLS0t
LS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2NvbmZkYXRhLmMgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAxMjc5IC0tLS0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2V4cHIuYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAxMTY4IC0tLS0tLS0tLQ0KICAgICBzdXBwb3J0L2tjb25m
aWcvZXhwci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMzggLS0NCiAgICAgc3Vw
cG9ydC9rY29uZmlnL2ZpeGRlcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDA5IC0t
LS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2Zvby5oICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDEyIC0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2djb25mLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAxNTQyIC0tLS0tLS0tLS0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcvZ2Nv
bmYuZ2xhZGUgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NjEgLS0tLS0NCiAgICAgc3VwcG9y
dC9rY29uZmlnL2ltYWdlcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzI2IC0tLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcva3hnZXR0ZXh0LmMgICAgICAgICAgICAgICAgICAgICAgICB8
ICAyMzUgLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2xpc3QuaCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTMxIC0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2xrYy5oICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCAgMTk5IC0tDQogICAgIHN1cHBvcnQva2NvbmZpZy9sa2NfcHJv
dG8uaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1NyAtDQogICAgIHN1cHBvcnQva2NvbmZp
Zy9seGRpYWxvZy8uZ2l0aWdub3JlICAgICAgICAgICAgICAgIHwgICAgNCAtDQogICAgIHN1cHBv
cnQva2NvbmZpZy9seGRpYWxvZy9CSUcuRkFULldBUk5JTkcgICAgICAgICAgIHwgICAgNCAtDQog
ICAgIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5zaCAgICAgICAgIHwg
ICA5MSAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYyAgICAgICAg
ICAgICAgIHwgIDMzMiAtLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2RpYWxvZy5o
ICAgICAgICAgICAgICAgICAgfCAgMjU3IC0tDQogICAgIHN1cHBvcnQva2NvbmZpZy9seGRpYWxv
Zy9pbnB1dGJveC5jICAgICAgICAgICAgICAgIHwgIDMwMSAtLS0NCiAgICAgc3VwcG9ydC9rY29u
ZmlnL2x4ZGlhbG9nL21lbnVib3guYyAgICAgICAgICAgICAgICAgfCAgNDM3IC0tLS0NCiAgICAg
c3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3guYyAgICAgICAgICAgICAgICAgfCAgNDA4
IC0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYyAgICAgICAgICAgICAg
ICAgICAgfCAgNzEzIC0tLS0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cveWVzbm8u
YyAgICAgICAgICAgICAgICAgICB8ICAxMTQgLQ0KICAgICBzdXBwb3J0L2tjb25maWcvbWNvbmYu
YyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEwMzcgLS0tLS0tLS0NCiAgICAgc3VwcG9y
dC9rY29uZmlnL21lbnUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjk0IC0tLS0t
LQ0KICAgICBzdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmlnLnNoICAgICAgICAgICAgICAgICAg
ICB8ICAxNTAgLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL25jb25mLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAxNTU3IC0tLS0tLS0tLS0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcvbmNv
bmYuZ3VpLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NTYgLS0tLS0NCiAgICAgc3VwcG9y
dC9rY29uZmlnL25jb25mLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDk2IC0NCiAg
ICAgLi4uLzAxLWtjb25maWcta2VybmVsLXRvLWJ1aWxkcm9vdC11bmlrb3JlLnBhdGNoICAgfCAg
IDk4IC0NCiAgICAgLi4uL3BhdGNoZXMvMDYtYnItYnVpbGQtc3lzdGVtLWludGVncmF0aW9uLnBh
dGNoICAgfCAgIDM1IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMTAtYnItYnVpbGQt
c3lzdGVtLnBhdGNoICAgfCAgIDgwIC0NCiAgICAgLi4uL3BhdGNoZXMvMTEtdXNlLW1rdGVtcC1m
b3ItbHhkaWFsb2cucGF0Y2ggICAgICAgfCAgIDE3IC0NCiAgICAgLi4uL2tjb25maWcvcGF0Y2hl
cy8xMi1maXgtZ2xhZGUtZmlsZS1wYXRoLnBhdGNoICAgfCAgIDE3IC0NCiAgICAgLi4uL3BhdGNo
ZXMvMTQtc3VwcG9ydC1vdXQtb2YtdHJlZS1jb25maWcucGF0Y2ggICAgfCAgMjA3IC0tDQogICAg
IC4uLi9rY29uZmlnL3BhdGNoZXMvMTUtZml4LXFjb25mLW1vYy1ydWxlLnBhdGNoICAgIHwgICAy
NCAtDQogICAgIC4uLmRpYWxvZy1nZXQtbmN1cnNlcy1DRkxBR1Mtd2l0aC1wa2ctY29uZmlnLnBh
dGNoIHwgICA1MCAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzL3NlcmllcyAgICAgICAg
ICAgICAgICAgICAgIHwgICAgOCAtDQogICAgIHN1cHBvcnQva2NvbmZpZy9xY29uZi5jYyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgMTc5NSAtLS0tLS0tLS0tLS0tLQ0KICAgICBzdXBwb3J0
L2tjb25maWcvcWNvbmYuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMzggLS0tDQog
ICAgIHN1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbCAgICAgICAgICAgICAgIHwg
IDY0MCAtLS0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcvc3ltYm9sLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IDEzNzMgLS0tLS0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL3V0aWwu
YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcxIC0tDQogICAgIHN1cHBvcnQva2Nv
bmZpZy96Y29uZi5ncGVyZiAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NyAtDQogICAgIHN1
cHBvcnQva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZCAgICAgICAgICAgICAgIHwgIDI4NiAt
LS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL3pjb25mLmwgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgMzYzIC0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcvemNvbmYubGV4LmNfc2hpcHBlZCAg
ICAgICAgICAgICAgICB8IDI0MjAgLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICBzdXBwb3J0L2tj
b25maWcvemNvbmYudGFiLmNfc2hpcHBlZCAgICAgICAgICAgICAgICB8IDI1MzggLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnL3pjb25mLnkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgNzMzIC0tLS0tLQ0KICAgICA1NCBmaWxlcyBjaGFuZ2VkLCAyNTQ4NiBk
ZWxldGlvbnMoLSkNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9NYWtl
ZmlsZQ0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLmJy
DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvUE9URklMRVMuaW4NCiAg
ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9SRUFETUUudW5pa3JhZnQNCiAg
ICAgZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9jaGVjay5zaA0KICAgICBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2NvbmYuYw0KICAgICBkZWxldGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL2NvbmZkYXRhLmMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy9leHByLmMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy9leHByLmgNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9m
aXhkZXAuYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2Zvby5oDQog
ICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvZ2NvbmYuYw0KICAgICBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2djb25mLmdsYWRlDQogICAgIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvaW1hZ2VzLmMNCiAgICAgZGVsZXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy9reGdldHRleHQuYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL2xpc3QuaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL2xrYy5oDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbGtj
X3Byb3RvLmgNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9seGRpYWxv
Zy8uZ2l0aWdub3JlDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhk
aWFsb2cvQklHLkZBVC5XQVJOSU5HDQogICAgIGRlbGV0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tj
b25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9jaGVja2xpc3QuYw0KICAgICBkZWxldGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2RpYWxvZy5oDQogICAgIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvaW5wdXRib3guYw0KICAgICBkZWxldGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYw0KICAgICBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3guYw0KICAgICBk
ZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3V0aWwuYw0KICAgICBk
ZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3llc25vLmMNCiAgICAg
ZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9tY29uZi5jDQogICAgIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbWVudS5jDQogICAgIGRlbGV0ZSBtb2RlIDEwMDc1
NSBzdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmlnLnNoDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvbmNvbmYuYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9y
dC9rY29uZmlnL25jb25mLmd1aS5jDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvbmNvbmYuaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Bh
dGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tYnVpbGRyb290LXVuaWtvcmUucGF0Y2gNCiAgICAg
ZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA2LWJyLWJ1aWxkLXN5
c3RlbS1pbnRlZ3JhdGlvbi5wYXRjaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3BhdGNoZXMvMTAtYnItYnVpbGQtc3lzdGVtLnBhdGNoDQogICAgIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8xMS11c2UtbWt0ZW1wLWZvci1seGRpYWxv
Zy5wYXRjaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMv
MTItZml4LWdsYWRlLWZpbGUtcGF0aC5wYXRjaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3BhdGNoZXMvMTQtc3VwcG9ydC1vdXQtb2YtdHJlZS1jb25maWcucGF0Y2gN
CiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzE1LWZpeC1x
Y29uZi1tb2MtcnVsZS5wYXRjaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL3BhdGNoZXMvMTcta2NvbmZpZy1seGRpYWxvZy1nZXQtbmN1cnNlcy1DRkxBR1Mtd2l0aC1w
a2ctY29uZmlnLnBhdGNoDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcv
cGF0Y2hlcy9zZXJpZXMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9x
Y29uZi5jYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Fjb25mLmgN
CiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZp
Zy5wbA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3N5bWJvbC5jDQog
ICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdXRpbC5jDQogICAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvemNvbmYuZ3BlcmYNCiAgICAgZGVsZXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96Y29uZi5oYXNoLmNfc2hpcHBlZA0KICAgICBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLmwNCiAgICAgZGVsZXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy96Y29uZi5sZXguY19zaGlwcGVkDQogICAgIGRlbGV0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZA0KICAgICBkZWxl
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3pjb25mLnkNCiAgICANCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlIGIvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxl
DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggNmQ1YjYxMS4uMDAwMDAw
MA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZQ0KICAgICsrKyAvZGV2L251bGwN
CiAgICBAQCAtMSwzMjEgKzAsMCBAQA0KICAgIC0jID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIC0j
IEtlcm5lbCBjb25maWd1cmF0aW9uIHRhcmdldHMNCiAgICAtIyBUaGVzZSB0YXJnZXRzIGFyZSB1
c2VkIGZyb20gdG9wLWxldmVsIG1ha2VmaWxlDQogICAgLQ0KICAgIC1QSE9OWSArPSBvbGRjb25m
aWcgeGNvbmZpZyBnY29uZmlnIG1lbnVjb25maWcgY29uZmlnIHNpbGVudG9sZGNvbmZpZyB1cGRh
dGUtcG8tY29uZmlnIFwNCiAgICAtCWxvY2FsbW9kY29uZmlnIGxvY2FseWVzY29uZmlnDQogICAg
LQ0KICAgIC1pZmRlZiBLQlVJTERfS0NPTkZJRw0KICAgIC1LY29uZmlnIDo9ICQoS0JVSUxEX0tD
T05GSUcpDQogICAgLWVsc2UNCiAgICAtS2NvbmZpZyA6PSBLY29uZmlnDQogICAgLWVuZGlmDQog
ICAgLQ0KICAgIC0jIFdlIG5lZWQgdGhpcywgaW4gY2FzZSB0aGUgdXNlciBoYXMgaXQgaW4gaXRz
IGVudmlyb25tZW50DQogICAgLXVuZXhwb3J0IENPTkZJR18NCiAgICAtDQogICAgLXhjb25maWc6
ICQob2JqKS9xY29uZg0KICAgIC0JJDwgJChLY29uZmlnKQ0KICAgIC0NCiAgICAtZ2NvbmZpZzog
JChvYmopL2djb25mDQogICAgLQkkPCAkKEtjb25maWcpDQogICAgLQ0KICAgIC1tZW51Y29uZmln
OiAkKG9iaikvbWNvbmYNCiAgICAtCSQ8ICQoS2NvbmZpZykNCiAgICAtDQogICAgLWNvbmZpZzog
JChvYmopL2NvbmYNCiAgICAtCSQ8IC0tb2xkYXNrY29uZmlnICQoS2NvbmZpZykNCiAgICAtDQog
ICAgLW5jb25maWc6ICQob2JqKS9uY29uZg0KICAgIC0JJDwgJChLY29uZmlnKQ0KICAgIC0NCiAg
ICAtb2xkY29uZmlnOiAkKG9iaikvY29uZg0KICAgIC0JJDwgLS0kQCAkKEtjb25maWcpDQogICAg
LQ0KICAgIC1zaWxlbnRvbGRjb25maWc6ICQob2JqKS9jb25mDQogICAgLQkkKFEpbWtkaXIgLXAg
aW5jbHVkZS9nZW5lcmF0ZWQNCiAgICAtCSQ8IC0tJEAgJChLY29uZmlnKQ0KICAgIC0NCiAgICAt
bG9jYWx5ZXNjb25maWcgbG9jYWxtb2Rjb25maWc6ICQob2JqKS9zdHJlYW1saW5lX2NvbmZpZy5w
bCAkKG9iaikvY29uZg0KICAgIC0JJChRKW1rZGlyIC1wIGluY2x1ZGUvZ2VuZXJhdGVkDQogICAg
LQkkKFEpcGVybCAkPCAtLSRAICQoc3JjdHJlZSkgJChLY29uZmlnKSA+IC50bXAuY29uZmlnDQog
ICAgLQkkKFEpaWYgWyAtZiAuY29uZmlnIF07IHRoZW4gCQkJCQlcDQogICAgLQkJCWNtcCAtcyAu
dG1wLmNvbmZpZyAuY29uZmlnIHx8CQkJXA0KICAgIC0JCQkobXYgLWYgLmNvbmZpZyAuY29uZmln
Lm9sZC4xOwkJCVwNCiAgICAtCQkJIG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXA0KICAg
IC0JCQkgJChvYmopL2NvbmYgLS1zaWxlbnRvbGRjb25maWcgJChLY29uZmlnKTsJXA0KICAgIC0J
CQkgbXYgLWYgLmNvbmZpZy5vbGQuMSAuY29uZmlnLm9sZCkJCVwNCiAgICAtCWVsc2UJCQkJCQkJ
CVwNCiAgICAtCQkJbXYgLWYgLnRtcC5jb25maWcgLmNvbmZpZzsJCQlcDQogICAgLQkJCSQob2Jq
KS9jb25mIC0tc2lsZW50b2xkY29uZmlnICQoS2NvbmZpZyk7CVwNCiAgICAtCWZpDQogICAgLQkk
KFEpcm0gLWYgLnRtcC5jb25maWcNCiAgICAtDQogICAgLSMgQ3JlYXRlIG5ldyBsaW51eC5wb3Qg
ZmlsZQ0KICAgIC0jIEFkanVzdCBjaGFyc2V0IHRvIFVURi04IGluIC5wbyBmaWxlIHRvIGFjY2Vw
dCBVVEYtOCBpbiBLY29uZmlnIGZpbGVzDQogICAgLXVwZGF0ZS1wby1jb25maWc6ICQob2JqKS9r
eGdldHRleHQgJChvYmopL2djb25mLmdsYWRlLmgNCiAgICAtCSQoUSllY2hvICIgIEdFTiAgICAg
Y29uZmlnLnBvdCINCiAgICAtCSQoUSl4Z2V0dGV4dCAtLWRlZmF1bHQtZG9tYWluPWxpbnV4ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtCSAgICAtLWFkZC1jb21tZW50cyAtLWtleXdv
cmQ9XyAtLWtleXdvcmQ9Tl8gICAgICAgICAgICAgICAgIFwNCiAgICAtCSAgICAtLWZyb20tY29k
ZT1VVEYtOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtCSAg
ICAtLWZpbGVzLWZyb209JChzcmN0cmVlKS9zY3JpcHRzL2tjb25maWcvUE9URklMRVMuaW4gICAg
IFwNCiAgICAtCSAgICAtLWRpcmVjdG9yeT0kKHNyY3RyZWUpIC0tZGlyZWN0b3J5PSQob2JqdHJl
ZSkgICAgICAgICAgIFwNCiAgICAtCSAgICAtLW91dHB1dCAkKG9iaikvY29uZmlnLnBvdA0KICAg
IC0JJChRKXNlZCAtaSBzL0NIQVJTRVQvVVRGLTgvICQob2JqKS9jb25maWcucG90DQogICAgLQkk
KFEpKGZvciBpIGluIGBscyAkKHNyY3RyZWUpL2FyY2gvKi9LY29uZmlnICAgICAgXA0KICAgIC0J
ICAgICQoc3JjdHJlZSkvYXJjaC8qL3VtL0tjb25maWdgOyAgICAgICAgICAgICAgIFwNCiAgICAt
CSAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAg
LQkJZWNobyAiICBHRU4gICAgICQkaSI7ICAgICAgICAgICAgICAgICAgICBcDQogICAgLQkJJChv
YmopL2t4Z2V0dGV4dCAkJGkgICAgICAgICAgICAgICAgICAgICBcDQogICAgLQkJICAgICA+PiAk
KG9iaikvY29uZmlnLnBvdDsgICAgICAgICAgICAgICBcDQogICAgLQkgICAgZG9uZSApDQogICAg
LQkkKFEpZWNobyAiICBHRU4gICAgIGxpbnV4LnBvdCINCiAgICAtCSQoUSltc2d1bmlxIC0tc29y
dC1ieS1maWxlIC0tdG8tY29kZT1VVEYtOCAkKG9iaikvY29uZmlnLnBvdCBcDQogICAgLQkgICAg
LS1vdXRwdXQgJChvYmopL2xpbnV4LnBvdA0KICAgIC0JJChRKXJtIC1mICQob2JqKS9jb25maWcu
cG90DQogICAgLQ0KICAgIC1QSE9OWSArPSBhbGxub2NvbmZpZyBhbGx5ZXNjb25maWcgYWxsbW9k
Y29uZmlnIGFsbGRlZmNvbmZpZyByYW5kY29uZmlnDQogICAgLQ0KICAgIC1hbGxub2NvbmZpZyBh
bGx5ZXNjb25maWcgYWxsbW9kY29uZmlnIGFsbGRlZmNvbmZpZyByYW5kY29uZmlnOiAkKG9iaikv
Y29uZg0KICAgIC0JJDwgLS0kQCAkKEtjb25maWcpDQogICAgLQ0KICAgIC1QSE9OWSArPSBsaXN0
bmV3Y29uZmlnIG9sZGRlZmNvbmZpZyBvbGRub2NvbmZpZyBzYXZlZGVmY29uZmlnIGRlZmNvbmZp
Zw0KICAgIC0NCiAgICAtbGlzdG5ld2NvbmZpZyBvbGRkZWZjb25maWc6ICQob2JqKS9jb25mDQog
ICAgLQkkPCAtLSRAICQoS2NvbmZpZykNCiAgICAtDQogICAgLSMgb2xkbm9jb25maWcgaXMgYW4g
YWxpYXMgb2Ygb2xkZGVmY29uZmlnLCBiZWNhdXNlIHBlb3BsZSBhbHJlYWR5IGFyZSBkZXBlbmRl
bnQNCiAgICAtIyBvbiBpdHMgYmVoYXZpb3Ioc2V0cyBuZXcgc3ltYm9scyB0byB0aGVpciBkZWZh
dWx0IHZhbHVlIGJ1dCBub3QgJ24nKSB3aXRoIHRoZQ0KICAgIC0jIGNvdW50ZXItaW50dWl0aXZl
IG5hbWUuDQogICAgLW9sZG5vY29uZmlnOiAkKG9iaikvY29uZg0KICAgIC0JJDwgLS1vbGRkZWZj
b25maWcgJChLY29uZmlnKQ0KICAgIC0NCiAgICAtc2F2ZWRlZmNvbmZpZzogJChvYmopL2NvbmYN
CiAgICAtCSQ8IC0tJEA9ZGVmY29uZmlnICQoS2NvbmZpZykNCiAgICAtDQogICAgLWRlZmNvbmZp
ZzogJChvYmopL2NvbmYNCiAgICAtaWZlcSAoJChLQlVJTERfREVGQ09ORklHKSwpDQogICAgLQkk
PCAtLWRlZmNvbmZpZyAkKEtjb25maWcpDQogICAgLWVsc2UNCiAgICAtCUBlY2hvICIqKiogRGVm
YXVsdCBjb25maWd1cmF0aW9uIGlzIGJhc2VkIG9uICckKEtCVUlMRF9ERUZDT05GSUcpJyINCiAg
ICAtCSQoUSkkPCAtLWRlZmNvbmZpZz1hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kKEtCVUlMRF9E
RUZDT05GSUcpICQoS2NvbmZpZykNCiAgICAtZW5kaWYNCiAgICAtDQogICAgLSVfZGVmY29uZmln
OiAkKG9iaikvY29uZg0KICAgIC0JJChRKSQ8IC0tZGVmY29uZmlnPWFyY2gvJChTUkNBUkNIKS9j
b25maWdzLyRAICQoS2NvbmZpZykNCiAgICAtDQogICAgLSMgSGVscCB0ZXh0IHVzZWQgYnkgbWFr
ZSBoZWxwDQogICAgLWhlbHA6DQogICAgLQlAZWNobyAgJyAgY29uZmlnCSAgLSBVcGRhdGUgY3Vy
cmVudCBjb25maWcgdXRpbGlzaW5nIGEgbGluZS1vcmllbnRlZCBwcm9ncmFtJw0KICAgIC0JQGVj
aG8gICcgIG5jb25maWcgICAgICAgICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcg
YSBuY3Vyc2VzIG1lbnUgYmFzZWQgcHJvZ3JhbScNCiAgICAtCUBlY2hvICAnICBtZW51Y29uZmln
CSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbWVudSBiYXNlZCBwcm9ncmFt
Jw0KICAgIC0JQGVjaG8gICcgIHhjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGls
aXNpbmcgYSBRVCBiYXNlZCBmcm9udC1lbmQnDQogICAgLQlAZWNobyAgJyAgZ2NvbmZpZwkgIC0g
VXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIEdUSyBiYXNlZCBmcm9udC1lbmQnDQog
ICAgLQlAZWNobyAgJyAgb2xkY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlz
aW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlJw0KICAgIC0JQGVjaG8gICcgIGxvY2FsbW9k
Y29uZmlnICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyBkaXNhYmxpbmcgbW9kdWxlcyBub3QgbG9h
ZGVkJw0KICAgIC0JQGVjaG8gICcgIGxvY2FseWVzY29uZmlnICAtIFVwZGF0ZSBjdXJyZW50IGNv
bmZpZyBjb252ZXJ0aW5nIGxvY2FsIG1vZHMgdG8gY29yZScNCiAgICAtCUBlY2hvICAnICBzaWxl
bnRvbGRjb25maWcgLSBTYW1lIGFzIG9sZGNvbmZpZywgYnV0IHF1aWV0bHksIGFkZGl0aW9uYWxs
eSB1cGRhdGUgZGVwcycNCiAgICAtCUBlY2hvICAnICBkZWZjb25maWcJICAtIE5ldyBjb25maWcg
d2l0aCBkZWZhdWx0IGZyb20gQVJDSCBzdXBwbGllZCBkZWZjb25maWcnDQogICAgLQlAZWNobyAg
JyAgc2F2ZWRlZmNvbmZpZyAgIC0gU2F2ZSBjdXJyZW50IGNvbmZpZyBhcyAuL2RlZmNvbmZpZyAo
bWluaW1hbCBjb25maWcpJw0KICAgIC0JQGVjaG8gICcgIGFsbG5vY29uZmlnCSAgLSBOZXcgY29u
ZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG5vJw0KICAgIC0JQGVjaG8g
ICcgIGFsbHllc2NvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYWNj
ZXB0ZWQgd2l0aCB5ZXMnDQogICAgLQlAZWNobyAgJyAgYWxsbW9kY29uZmlnCSAgLSBOZXcgY29u
ZmlnIHNlbGVjdGluZyBtb2R1bGVzIHdoZW4gcG9zc2libGUnDQogICAgLQlAZWNobyAgJyAgYWxs
ZGVmY29uZmlnICAgIC0gTmV3IGNvbmZpZyB3aXRoIGFsbCBzeW1ib2xzIHNldCB0byBkZWZhdWx0
Jw0KICAgIC0JQGVjaG8gICcgIHJhbmRjb25maWcJICAtIE5ldyBjb25maWcgd2l0aCByYW5kb20g
YW5zd2VyIHRvIGFsbCBvcHRpb25zJw0KICAgIC0JQGVjaG8gICcgIGxpc3RuZXdjb25maWcgICAt
IExpc3QgbmV3IG9wdGlvbnMnDQogICAgLQlAZWNobyAgJyAgb2xkZGVmY29uZmlnCSAgLSBTYW1l
IGFzIHNpbGVudG9sZGNvbmZpZyBidXQgc2V0cyBuZXcgc3ltYm9scyB0byB0aGVpciBkZWZhdWx0
IHZhbHVlJw0KICAgIC0NCiAgICAtIyBseGRpYWxvZyBzdHVmZg0KICAgIC1jaGVjay1seGRpYWxv
ZyAgOj0gJChzcmN0cmVlKS8kKHNyYykvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gNCiAgICAt
DQogICAgLSMgVXNlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlcyBzbyB3ZSBkbyBub3Qg
Y2FsbCBnY2MgdW5sZXNzDQogICAgLSMgd2UgcmVhbGx5IG5lZWQgdG8gZG8gc28uIChEbyBub3Qg
Y2FsbCBnY2MgYXMgcGFydCBvZiBtYWtlIG1ycHJvcGVyKQ0KICAgIC1IT1NUX0VYVFJBQ0ZMQUdT
ICs9ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cpIC1jY2ZsYWdzKSBc
DQogICAgLSAgICAgICAgICAgICAgICAgICAgLURMT0NBTEUNCiAgICAtDQogICAgLSMgPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQogICAgLSMgU2hhcmVkIE1ha2VmaWxlIGZvciB0aGUgdmFyaW91cyBrY29u
ZmlnIGV4ZWN1dGFibGVzOg0KICAgIC0jIGNvbmY6CSAgVXNlZCBmb3IgZGVmY29uZmlnLCBvbGRj
b25maWcgYW5kIHJlbGF0ZWQgdGFyZ2V0cw0KICAgIC0jIG5jb25mOiAgVXNlZCBmb3IgdGhlIG5j
b25maWcgdGFyZ2V0Lg0KICAgIC0jICAgICAgICAgVXRpbGl6ZXMgbmN1cnNlcw0KICAgIC0jIG1j
b25mOiAgVXNlZCBmb3IgdGhlIG1lbnVjb25maWcgdGFyZ2V0DQogICAgLSMgICAgICAgICBVdGls
aXplcyB0aGUgbHhkaWFsb2cgcGFja2FnZQ0KICAgIC0jIHFjb25mOiAgVXNlZCBmb3IgdGhlIHhj
b25maWcgdGFyZ2V0DQogICAgLSMgICAgICAgICBCYXNlZCBvbiBRVCB3aGljaCBuZWVkcyB0byBi
ZSBpbnN0YWxsZWQgdG8gY29tcGlsZSBpdA0KICAgIC0jIGdjb25mOiAgVXNlZCBmb3IgdGhlIGdj
b25maWcgdGFyZ2V0DQogICAgLSMgICAgICAgICBCYXNlZCBvbiBHVEsgd2hpY2ggbmVlZHMgdG8g
YmUgaW5zdGFsbGVkIHRvIGNvbXBpbGUgaXQNCiAgICAtIyBvYmplY3QgZmlsZXMgdXNlZCBieSBh
bGwga2NvbmZpZyBmbGF2b3Vycw0KICAgIC0NCiAgICAtbHhkaWFsb2cgOj0gbHhkaWFsb2cvY2hl
Y2tsaXN0Lm8gbHhkaWFsb2cvdXRpbC5vIGx4ZGlhbG9nL2lucHV0Ym94Lm8NCiAgICAtbHhkaWFs
b2cgKz0gbHhkaWFsb2cvdGV4dGJveC5vIGx4ZGlhbG9nL3llc25vLm8gbHhkaWFsb2cvbWVudWJv
eC5vDQogICAgLQ0KICAgIC1jb25mLW9ianMJOj0gY29uZi5vICB6Y29uZi50YWIubw0KICAgIC1t
Y29uZi1vYmpzICAgICA6PSBtY29uZi5vIHpjb25mLnRhYi5vICQobHhkaWFsb2cpDQogICAgLW5j
b25mLW9ianMgICAgIDo9IG5jb25mLm8gemNvbmYudGFiLm8gbmNvbmYuZ3VpLm8NCiAgICAta3hn
ZXR0ZXh0LW9ianMJOj0ga3hnZXR0ZXh0Lm8gemNvbmYudGFiLm8NCiAgICAtcWNvbmYtY3h4b2Jq
cwk6PSBxY29uZi5vDQogICAgLXFjb25mLW9ianMJOj0gemNvbmYudGFiLm8NCiAgICAtZ2NvbmYt
b2Jqcwk6PSBnY29uZi5vIHpjb25mLnRhYi5vDQogICAgLWZpeGRlcC1vYmoJOj0gZml4ZGVwLm8N
CiAgICAtDQogICAgLWhvc3Rwcm9ncy15IDo9IGNvbmYNCiAgICAtaG9zdHByb2dzLXkgKz0gZml4
ZGVwDQogICAgLQ0KICAgIC1pZmVxICgkKE1BS0VDTURHT0FMUyksbmNvbmYpDQogICAgLQlob3N0
cHJvZ3MteSArPSBuY29uZg0KICAgIC1lbmRpZg0KICAgIC0NCiAgICAtaWZlcSAoJChNQUtFQ01E
R09BTFMpLG1jb25mKQ0KICAgIC0JaG9zdHByb2dzLXkgKz0gbWNvbmYNCiAgICAtZW5kaWYNCiAg
ICAtDQogICAgLWlmZXEgKCQoTUFLRUNNREdPQUxTKSx1cGRhdGUtcG8tY29uZmlnKQ0KICAgIC0J
aG9zdHByb2dzLXkgKz0ga3hnZXR0ZXh0DQogICAgLWVuZGlmDQogICAgLQ0KICAgIC1pZmVxICgk
KE1BS0VDTURHT0FMUykscWNvbmYpDQogICAgLQlxY29uZi10YXJnZXQgOj0gMQ0KICAgIC1lbmRp
Zg0KICAgIC1pZmVxICgkKE1BS0VDTURHT0FMUyksZ2NvbmYpDQogICAgLQlnY29uZi10YXJnZXQg
Oj0gMQ0KICAgIC1lbmRpZg0KICAgIC0NCiAgICAtDQogICAgLWlmZXEgKCQocWNvbmYtdGFyZ2V0
KSwxKQ0KICAgIC0JaG9zdHByb2dzLXkgKz0gcWNvbmYNCiAgICAtZW5kaWYNCiAgICAtDQogICAg
LWlmZXEgKCQoZ2NvbmYtdGFyZ2V0KSwxKQ0KICAgIC0JaG9zdHByb2dzLXkgKz0gZ2NvbmYNCiAg
ICAtZW5kaWYNCiAgICAtDQogICAgLWNsZWFuLWZpbGVzCTo9IHFjb25mLm1vYyAudG1wX3F0Y2hl
Y2sgLnRtcF9ndGtjaGVjaw0KICAgIC1jbGVhbi1maWxlcwkrPSB6Y29uZi50YWIuYyB6Y29uZi5s
ZXguYyB6Y29uZi5oYXNoLmMgZ2NvbmYuZ2xhZGUuaA0KICAgIC1jbGVhbi1maWxlcyAgICAgKz0g
bWNvbmYgcWNvbmYgZ2NvbmYgbmNvbmYNCiAgICAtY2xlYW4tZmlsZXMgICAgICs9IGNvbmZpZy5w
b3QgbGludXgucG90DQogICAgLQ0KICAgIC0jIENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgcmVxdWly
ZWQgbmN1cnNlcyBzdHVmZiBpbnN0YWxsZWQgZm9yIGx4ZGlhbG9nIChtZW51Y29uZmlnKQ0KICAg
IC1QSE9OWSArPSAkKG9iaikvZG9jaGVja2x4ZGlhbG9nDQogICAgLSQoYWRkcHJlZml4ICQob2Jq
KS8sJChseGRpYWxvZykpOiAkKG9iaikvZG9jaGVja2x4ZGlhbG9nDQogICAgLSQob2JqKS9kb2No
ZWNrbHhkaWFsb2c6DQogICAgLQkkKFEpJChDT05GSUdfU0hFTEwpICQoY2hlY2stbHhkaWFsb2cp
IC1jaGVjayAkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RMT0FETElCRVNfbWNv
bmYpDQogICAgLQ0KICAgIC1hbHdheXMgOj0gZG9jaGVja2x4ZGlhbG9nDQogICAgLQ0KICAgIC0j
IEFkZCBlbnZpcm9ubWVudCBzcGVjaWZpYyBmbGFncw0KICAgIC1IT1NUX0VYVFJBQ0ZMQUdTICs9
ICQoc2hlbGwgJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvJChzcmMpL2NoZWNrLnNoICQoSE9T
VENDKSAkKEhPU1RDRkxBR1MpKQ0KICAgIC0NCiAgICAtIyBnZW5lcmF0ZWQgZmlsZXMgc2VlbSB0
byBuZWVkIHRoaXMgdG8gZmluZCBsb2NhbCBpbmNsdWRlIGZpbGVzDQogICAgLUhPU1RDRkxBR1Nf
emNvbmYubGV4Lm8JOj0gLUkkKHNyYykNCiAgICAtSE9TVENGTEFHU196Y29uZi50YWIubwk6PSAt
SSQoc3JjKQ0KICAgIC0NCiAgICAtTEVYX1BSRUZJWF96Y29uZgk6PSB6Y29uZg0KICAgIC1ZQUND
X1BSRUZJWF96Y29uZgk6PSB6Y29uZg0KICAgIC0NCiAgICAtSE9TVExPQURMSUJFU19xY29uZgk9
ICQoS0NfUVRfTElCUykNCiAgICAtSE9TVENYWEZMQUdTX3Fjb25mLm8JPSAkKEtDX1FUX0NGTEFH
UykNCiAgICAtDQogICAgLUhPU1RMT0FETElCRVNfZ2NvbmYJPSBgcGtnLWNvbmZpZyAtLWxpYnMg
Z3RrKy0yLjAgZ21vZHVsZS0yLjAgbGliZ2xhZGUtMi4wYA0KICAgIC1IT1NUQ0ZMQUdTX2djb25m
Lm8JPSBgcGtnLWNvbmZpZyAtLWNmbGFncyBndGsrLTIuMCBnbW9kdWxlLTIuMCBsaWJnbGFkZS0y
LjBgIFwNCiAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAtV25vLW1pc3NpbmctcHJvdG90
eXBlcw0KICAgIC0NCiAgICAtSE9TVExPQURMSUJFU19tY29uZiAgID0gJChzaGVsbCAkKENPTkZJ
R19TSEVMTCkgJChjaGVjay1seGRpYWxvZykgLWxkZmxhZ3MgJChIT1NUQ0MpKQ0KICAgIC0NCiAg
ICAtSE9TVExPQURMSUJFU19uY29uZgk9ICQoc2hlbGwgXA0KICAgIC0JCQkJcGtnLWNvbmZpZyAt
LWxpYnMgbWVudSBwYW5lbCBuY3Vyc2VzIDI+L2Rldi9udWxsIFwNCiAgICAtCQkJCXx8IGVjaG8g
Ii1sbWVudSAtbHBhbmVsIC1sbmN1cnNlcyIgICkNCiAgICAtJChvYmopL3Fjb25mLm86ICQob2Jq
KS8udG1wX3F0Y2hlY2sNCiAgICAtDQogICAgLWlmZXEgKCQocWNvbmYtdGFyZ2V0KSwxKQ0KICAg
IC0kKG9iaikvLnRtcF9xdGNoZWNrOiAkKHNyYykvTWFrZWZpbGUNCiAgICAtLWluY2x1ZGUgJChv
YmopLy50bXBfcXRjaGVjaw0KICAgIC0NCiAgICAtIyBRVCBuZWVkcyBzb21lIGV4dHJhIGVmZm9y
dC4uLg0KICAgIC0kKG9iaikvLnRtcF9xdGNoZWNrOg0KICAgIC0JQHNldCAtZTsgZWNobyAiICBD
SEVDSyAgIHF0IjsgZGlyPSIiOyBwa2c9IiI7IFwNCiAgICAtCWlmICEgcGtnLWNvbmZpZyAtLWV4
aXN0cyBRdENvcmUgMj4gL2Rldi9udWxsOyB0aGVuIFwNCiAgICAtCSAgICBlY2hvICIqIFVuYWJs
ZSB0byBmaW5kIHRoZSBRVDQgdG9vbCBxbWFrZS4gVHJ5aW5nIHRvIHVzZSBRVDMiOyBcDQogICAg
LQkgICAgcGtnLWNvbmZpZyAtLWV4aXN0cyBxdCAyPiAvZGV2L251bGwgJiYgcGtnPXF0OyBcDQog
ICAgLQkgICAgcGtnLWNvbmZpZyAtLWV4aXN0cyBxdC1tdCAyPiAvZGV2L251bGwgJiYgcGtnPXF0
LW10OyBcDQogICAgLQkgICAgaWYgWyAtbiAiJCRwa2ciIF07IHRoZW4gXA0KICAgIC0JICAgICAg
Y2ZsYWdzPSJcJCQoc2hlbGwgcGtnLWNvbmZpZyAkJHBrZyAtLWNmbGFncykiOyBcDQogICAgLQkg
ICAgICBsaWJzPSJcJCQoc2hlbGwgcGtnLWNvbmZpZyAkJHBrZyAtLWxpYnMpIjsgXA0KICAgIC0J
ICAgICAgbW9jPSJcJCQoc2hlbGwgcGtnLWNvbmZpZyAkJHBrZyAtLXZhcmlhYmxlPXByZWZpeCkv
YmluL21vYyI7IFwNCiAgICAtCSAgICAgIGRpcj0iJCQocGtnLWNvbmZpZyAkJHBrZyAtLXZhcmlh
YmxlPXByZWZpeCkiOyBcDQogICAgLQkgICAgZWxzZSBcDQogICAgLQkgICAgICBmb3IgZCBpbiAk
JFFURElSIC91c3Ivc2hhcmUvcXQqIC91c3IvbGliL3F0KjsgZG8gXA0KICAgIC0JICAgICAgICBp
ZiBbIC1mICQkZC9pbmNsdWRlL3Fjb25maWcuaCBdOyB0aGVuIGRpcj0kJGQ7IGJyZWFrOyBmaTsg
XA0KICAgIC0JICAgICAgZG9uZTsgXA0KICAgIC0JICAgICAgaWYgWyAteiAiJCRkaXIiIF07IHRo
ZW4gXA0KICAgIC0JICAgICAgICBlY2hvID4mMiAiKiI7IFwNCiAgICAtCSAgICAgICAgZWNobyA+
JjIgIiogVW5hYmxlIHRvIGZpbmQgYW55IFFUIGluc3RhbGxhdGlvbi4gUGxlYXNlIG1ha2Ugc3Vy
ZSB0aGF0IjsgXA0KICAgIC0JICAgICAgICBlY2hvID4mMiAiKiB0aGUgUVQ0IG9yIFFUMyBkZXZl
bG9wbWVudCBwYWNrYWdlIGlzIGNvcnJlY3RseSBpbnN0YWxsZWQgYW5kIjsgXA0KICAgIC0JICAg
ICAgICBlY2hvID4mMiAiKiBlaXRoZXIgcW1ha2UgY2FuIGJlIGZvdW5kIG9yIGluc3RhbGwgcGtn
LWNvbmZpZyBvciBzZXQiOyBcDQogICAgLQkgICAgICAgIGVjaG8gPiYyICIqIHRoZSBRVERJUiBl
bnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgY29ycmVjdCBsb2NhdGlvbi4iOyBcDQogICAgLQkg
ICAgICAgIGVjaG8gPiYyICIqIjsgXA0KICAgIC0JICAgICAgICBmYWxzZTsgXA0KICAgIC0JICAg
ICAgZmk7IFwNCiAgICAtCSAgICAgIGxpYnBhdGg9JCRkaXIvbGliOyBsaWI9cXQ7IG9zZGlyPSIi
OyBcDQogICAgLQkgICAgICAkKEhPU1RDWFgpIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgPiAv
ZGV2L251bGwgMj4mMSAmJiBcDQogICAgLQkgICAgICAgIG9zZGlyPXgkJCgkKEhPU1RDWFgpIC1w
cmludC1tdWx0aS1vcy1kaXJlY3RvcnkpOyBcDQogICAgLQkgICAgICB0ZXN0IC1kICQkbGlicGF0
aC8kJG9zZGlyICYmIGxpYnBhdGg9JCRsaWJwYXRoLyQkb3NkaXI7IFwNCiAgICAtCSAgICAgIHRl
c3QgLWYgJCRsaWJwYXRoL2xpYnF0LW10LnNvICYmIGxpYj1xdC1tdDsgXA0KICAgIC0JICAgICAg
Y2ZsYWdzPSItSSQkZGlyL2luY2x1ZGUiOyBcDQogICAgLQkgICAgICBsaWJzPSItTCQkbGlicGF0
aCAtV2wsLXJwYXRoLCQkbGlicGF0aCAtbCQkbGliIjsgXA0KICAgIC0JICAgICAgbW9jPSIkJGRp
ci9iaW4vbW9jIjsgXA0KICAgIC0JICAgIGZpOyBcDQogICAgLQkgICAgaWYgWyAhIC14ICQkZGly
L2Jpbi9tb2MgLWEgLXggL3Vzci9iaW4vbW9jIF07IHRoZW4gXA0KICAgIC0JICAgICAgZWNobyAi
KiI7IFwNCiAgICAtCSAgICAgIGVjaG8gIiogVW5hYmxlIHRvIGZpbmQgJCRkaXIvYmluL21vYywg
dXNpbmcgL3Vzci9iaW4vbW9jIGluc3RlYWQuIjsgXA0KICAgIC0JICAgICAgZWNobyAiKiI7IFwN
CiAgICAtCSAgICAgIG1vYz0iL3Vzci9iaW4vbW9jIjsgXA0KICAgIC0JICAgIGZpOyBcDQogICAg
LQllbHNlIFwNCiAgICAtCSAgY2ZsYWdzPSJcJCQoc2hlbGwgcGtnLWNvbmZpZyBRdENvcmUgUXRH
dWkgUXQzU3VwcG9ydCAtLWNmbGFncykiOyBcDQogICAgLQkgIGxpYnM9IlwkJChzaGVsbCBwa2ct
Y29uZmlnIFF0Q29yZSBRdEd1aSBRdDNTdXBwb3J0IC0tbGlicykiOyBcDQogICAgLQkgIG1vYz0i
XCQkKHNoZWxsIHBrZy1jb25maWcgUXRDb3JlIC0tdmFyaWFibGU9bW9jX2xvY2F0aW9uKSI7IFwN
CiAgICAtCSAgWyAtbiAiJCRtb2MiIF0gfHwgbW9jPSJcJCQoc2hlbGwgcGtnLWNvbmZpZyBRdENv
cmUgLS12YXJpYWJsZT1wcmVmaXgpL2Jpbi9tb2MiOyBcDQogICAgLQlmaTsgXA0KICAgIC0JZWNo
byAiS0NfUVRfQ0ZMQUdTPSQkY2ZsYWdzIiA+ICRAOyBcDQogICAgLQllY2hvICJLQ19RVF9MSUJT
PSQkbGlicyIgPj4gJEA7IFwNCiAgICAtCWVjaG8gIktDX1FUX01PQz0kJG1vYyIgPj4gJEANCiAg
ICAtZW5kaWYNCiAgICAtDQogICAgLSQob2JqKS9nY29uZi5vOiAkKG9iaikvLnRtcF9ndGtjaGVj
aw0KICAgIC0NCiAgICAtaWZlcSAoJChnY29uZi10YXJnZXQpLDEpDQogICAgLS1pbmNsdWRlICQo
b2JqKS8udG1wX2d0a2NoZWNrDQogICAgLQ0KICAgIC0jIEdUSyBuZWVkcyBzb21lIGV4dHJhIGVm
Zm9ydCwgdG9vLi4uDQogICAgLSQob2JqKS8udG1wX2d0a2NoZWNrOg0KICAgIC0JQGlmIGBwa2ct
Y29uZmlnIC0tZXhpc3RzIGd0aystMi4wIGdtb2R1bGUtMi4wIGxpYmdsYWRlLTIuMGA7IHRoZW4J
CVwNCiAgICAtCQlpZiBgcGtnLWNvbmZpZyAtLWF0bGVhc3QtdmVyc2lvbj0yLjAuMCBndGsrLTIu
MGA7IHRoZW4JCQlcDQogICAgLQkJCXRvdWNoICRAOwkJCQkJCQkJXA0KICAgIC0JCWVsc2UJCQkJ
CQkJCQlcDQogICAgLQkJCWVjaG8gPiYyICIqIjsgCQkJCQkJCVwNCiAgICAtCQkJZWNobyA+JjIg
IiogR1RLKyBpcyBwcmVzZW50IGJ1dCB2ZXJzaW9uID49IDIuMC4wIGlzIHJlcXVpcmVkLiI7CVwN
CiAgICAtCQkJZWNobyA+JjIgIioiOwkJCQkJCQlcDQogICAgLQkJCWZhbHNlOwkJCQkJCQkJXA0K
ICAgIC0JCWZpCQkJCQkJCQkJXA0KICAgIC0JZWxzZQkJCQkJCQkJCQlcDQogICAgLQkJZWNobyA+
JjIgIioiOyAJCQkJCQkJCVwNCiAgICAtCQllY2hvID4mMiAiKiBVbmFibGUgdG8gZmluZCB0aGUg
R1RLKyBpbnN0YWxsYXRpb24uIFBsZWFzZSBtYWtlIHN1cmUgdGhhdCI7IAlcDQogICAgLQkJZWNo
byA+JjIgIiogdGhlIEdUSysgMi4wIGRldmVsb3BtZW50IHBhY2thZ2UgaXMgY29ycmVjdGx5IGlu
c3RhbGxlZC4uLiI7IAlcDQogICAgLQkJZWNobyA+JjIgIiogWW91IG5lZWQgZ3RrKy0yLjAsIGds
aWItMi4wIGFuZCBsaWJnbGFkZS0yLjAuIjsgCQlcDQogICAgLQkJZWNobyA+JjIgIioiOyAJCQkJ
CQkJCVwNCiAgICAtCQlmYWxzZTsJCQkJCQkJCQlcDQogICAgLQlmaQ0KICAgIC1lbmRpZg0KICAg
IC0NCiAgICAtJChvYmopL3pjb25mLnRhYi5vOiAkKG9iaikvemNvbmYubGV4LmMgJChvYmopL3pj
b25mLmhhc2guYw0KICAgIC0NCiAgICAtJChvYmopL3Fjb25mLm86ICQob2JqKS9xY29uZi5tb2MN
CiAgICAtDQogICAgLSQob2JqKS8lLm1vYzogJChzcmMpLyUuaCAkKG9iaikvLnRtcF9xdGNoZWNr
DQogICAgLQkkKEtDX1FUX01PQykgLWkgJDwgLW8gJEANCiAgICAtDQogICAgLSMgRXh0cmFjdCBn
Y29uZiBtZW51IGl0ZW1zIGZvciBJMThOIHN1cHBvcnQNCiAgICAtJChvYmopL2djb25mLmdsYWRl
Lmg6ICQob2JqKS9nY29uZi5nbGFkZQ0KICAgIC0JJChRKWludGx0b29sLWV4dHJhY3QgLS10eXBl
PWdldHRleHQvZ2xhZGUgLS1zcmNkaXI9JChzcmN0cmVlKSBcDQogICAgLQkkKG9iaikvZ2NvbmYu
Z2xhZGUNCiAgICAtDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5i
ciBiL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5icg0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDQxYzVjZTEuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25m
aWcvTWFrZWZpbGUuYnINCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsNTMgKzAsMCBAQA0K
ICAgIC1zcmMgOj0gLg0KICAgIC10b3Bfc3JjZGlyPS4uLy4uLw0KICAgIC10b3BfYnVpbGRkaXI9
Li4vLi4vDQogICAgLXNyY3RyZWUgOj0gLg0KICAgIC1vYmogPz0gLg0KICAgIC0NCiAgICAtaW5j
bHVkZSBNYWtlZmlsZQ0KICAgIC0jSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9v
LmgNCiAgICAtLWluY2x1ZGUgJChvYmopLy5kZXBlbmQNCiAgICAtJChvYmopLy5kZXBlbmQ6ICQo
d2lsZGNhcmQgKi5oICouYykNCiAgICAtCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQo
SE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoNCiAgICAtDQogICAgLV9f
aG9zdHByb2dzIDo9ICQoc29ydCAkKGhvc3Rwcm9ncy15KSAkKGhvc3Rwcm9ncy1tKSkNCiAgICAt
aG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9i
anMpLCwkKG0pKSkNCiAgICAtaG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9n
cyksXA0KICAgIC0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCwkKGlmICQoJChtKS1v
YmpzKSwkKG0pKSkpDQogICAgLWhvc3QtY3h4bXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rw
cm9ncyksXA0KICAgIC0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAk
KCQobSktb2JqcyksKSkpDQogICAgLWhvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywk
KHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkpDQogICAgLWhv
c3QtY3h4b2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9f
aG9zdHByb2dzKSwkKCQobSktY3h4b2JqcykpKSkNCiAgICAtDQogICAgLUhPU1RfRVhUUkFDRkxB
R1MgKz0gLUkkKG9iaikgLURDT05GSUdfPVwiXCINCiAgICAtDQogICAgLSQoaG9zdC1jc2luZ2xl
KTogJTogJS5jDQogICAgLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxB
R1MpICQoSE9TVENGTEFHU18kQCkgJDwgLW8gJChvYmopLyRADQogICAgLQ0KICAgIC0kKGhvc3Qt
Y211bHRpKTogJTogJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgIC0JJChIT1NUQ0Mp
ICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJEApICQoYWRk
cHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAk
KG9iaikvJEANCiAgICAtDQogICAgLSQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpz
KSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpDQogICAgLQkkKEhPU1RDWFgpICQoSE9TVF9F
WFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDWFhGTEFHU18kQCkgJChhZGRwcmVmaXgg
JChvYmopLywkKCQoQEYpLW9ianMpICQoJChARiktY3h4b2JqcykpICQoSE9TVExPQURMSUJFU18k
KEBGKSkgLW8gJChvYmopLyRADQogICAgLQ0KICAgIC0kKG9iaikvJS5vOiAlLmMNCiAgICAtCSQo
SE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQo
QEYpKSAtYyAkPCAtbyAkQA0KICAgIC0NCiAgICAtJChvYmopLyUubzogJChvYmopLyUuYw0KICAg
IC0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxB
R1NfJChARikpIC1jICQ8IC1vICRADQogICAgLQ0KICAgIC0kKG9iaikvJS5vOiAlLmNjDQogICAg
LQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZM
QUdTXyQoQEYpKSAtYyAkPCAtbyAkQA0KICAgIC0NCiAgICAtJChvYmopLyU6OiAkKHNyYykvJV9z
aGlwcGVkDQogICAgLQkkKFEpY2F0ICQ8ID4gJEANCiAgICAtDQogICAgLWNsZWFuOg0KICAgIC0J
JChRKXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpDQogICAgLWRpc3Rj
bGVhbjogY2xlYW4NCiAgICAtCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQobHhkaWFs
b2cpICQoY29uZi1vYmpzKSAkKG1jb25mLW9ianMpICQoa3hnZXR0ZXh0LW9ianMpIFwNCiAgICAt
CQkkKGhvc3Rwcm9ncy15KSAkKHFjb25mLWN4eG9ianMpICQocWNvbmYtb2JqcykgJChnY29uZi1v
YmpzKSBcDQogICAgLQkJbWNvbmYgLmRlcGVuZCkNCiAgICAtDQogICAgLUZPUkNFOg0KICAgIC0u
UEhPTlk6IEZPUkNFIGNsZWFuIGRpc3RjbGVhbg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcvUE9URklMRVMuaW4gYi9zdXBwb3J0L2tjb25maWcvUE9URklMRVMuaW4NCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA5Njc0NTczLi4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnL1BPVEZJTEVTLmluDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBA
IC0xLDEyICswLDAgQEANCiAgICAtc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5j
DQogICAgLXNjcmlwdHMva2NvbmZpZy9seGRpYWxvZy9pbnB1dGJveC5jDQogICAgLXNjcmlwdHMv
a2NvbmZpZy9seGRpYWxvZy9tZW51Ym94LmMNCiAgICAtc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9n
L3RleHRib3guYw0KICAgIC1zY3JpcHRzL2tjb25maWcvbHhkaWFsb2cvdXRpbC5jDQogICAgLXNj
cmlwdHMva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jDQogICAgLXNjcmlwdHMva2NvbmZpZy9tY29u
Zi5jDQogICAgLXNjcmlwdHMva2NvbmZpZy9jb25mLmMNCiAgICAtc2NyaXB0cy9rY29uZmlnL2Nv
bmZkYXRhLmMNCiAgICAtc2NyaXB0cy9rY29uZmlnL2djb25mLmMNCiAgICAtc2NyaXB0cy9rY29u
ZmlnL2djb25mLmdsYWRlLmgNCiAgICAtc2NyaXB0cy9rY29uZmlnL3Fjb25mLmNjDQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9SRUFETUUudW5pa3JhZnQgYi9zdXBwb3J0L2tjb25m
aWcvUkVBRE1FLnVuaWtyYWZ0DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggZWU4YTMxZi4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy9SRUFETUUudW5p
a3JhZnQNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMjEgKzAsMCBAQA0KICAgIC1UaGlz
IGlzIGEgY29weSBvZiB0aGUga2NvbmZpZyBjb2RlIGluIHRoZSBrZXJuZWwgKGN1cnJlbnRseSAz
LjEzLXJjNSkgdHdlYWtlZA0KICAgIC10byBzdWl0IFVuaWtyYWZ0LiBJdCB3YXMgcmV0cmlldmVk
IGFuZCBtb2RpZmllZCBmcm9tIGJ1aWxkcm9vdCAyMDE2LjA1LWdpdA0KICAgIC0oYzAyOTNjMyku
DQogICAgLQ0KICAgIC1UbyB1cGRhdGUgKGZyb20gbGludXgpOg0KICAgIC0JY3AgLXIgL3Vzci9z
cmMvbGludXgvc2NyaXB0cy9rY29uZmlnIHN1cHBvcnQva2NvbmZpZy5uZXcNCiAgICAtCWNkIHN1
cHBvcnQva2NvbmZpZy5uZXcNCiAgICAtCWNwIC1hIC4uL2tjb25maWcvcGF0Y2hlcyAuLi9rY29u
ZmlnL1JFQURNRS51bmlrcmFmdCAuLi9rY29uZmlnLy5naXRpZ25vcmUgLg0KICAgIC0JcXVpbHQg
cHVzaCAtYQ0KICAgIC0JIyBGaXggYW55IGNvbmZsaWN0DQogICAgLQljZCAuLg0KICAgIC0Jcm0g
LXJmIGtjb25maWcNCiAgICAtCW12IGtjb25maWcubmV3IGtjb25maWcNCiAgICAtDQogICAgLVRo
ZW4gdmVyaWZ5IHRoZSB0b3BsZXZlbCB0YXJnZXRzIHdvcms6DQogICAgLQljb25maWcNCiAgICAt
CWRlZmNvbmZpZw0KICAgIC0JbWVudWNvbmZpZw0KICAgIC0JeGNvbmZpZw0KICAgIC0JZ2NvbmZp
Zw0KICAgIC0Jb2xkY29uZmlnDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9jaGVj
ay5zaCBiL3N1cHBvcnQva2NvbmZpZy9jaGVjay5zaA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDc1NQ0KICAgIGluZGV4IDg1NGQ5YzcuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25m
aWcvY2hlY2suc2gNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTQgKzAsMCBAQA0KICAg
IC0jIS9iaW4vc2gNCiAgICAtIyBOZWVkZWQgZm9yIHN5c3RlbXMgd2l0aG91dCBnZXR0ZXh0DQog
ICAgLSQqIC14IGMgLW8gL2Rldi9udWxsIC0gPiAvZGV2L251bGwgMj4mMSA8PCBFT0YNCiAgICAt
I2luY2x1ZGUgPGxpYmludGwuaD4NCiAgICAtaW50IG1haW4oKQ0KICAgIC17DQogICAgLQlnZXR0
ZXh0KCIiKTsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLUVPRg0KICAgIC1pZiBbICEg
IiQ/IiAtZXEgIjAiICBdOyB0aGVuDQogICAgLQllY2hvIC1ES0JVSUxEX05PX05MUzsNCiAgICAt
ZmkNCiAgICAtDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9jb25mLmMgYi9zdXBw
b3J0L2tjb25maWcvY29uZi5jDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggNTUzZmM3Ni4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy9jb25mLmMNCiAg
ICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsNzE3ICswLDAgQEANCiAgICAtLyoNCiAgICAtICog
Q29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0K
ICAgIC0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4NCiAg
ICAtICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSA8bG9jYWxlLmg+DQogICAgLSNpbmNsdWRlIDxj
dHlwZS5oPg0KICAgIC0jaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5o
Pg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNpbmNsdWRlIDx0aW1lLmg+DQogICAg
LSNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAtI2luY2x1ZGUgPGdldG9wdC5oPg0KICAgIC0jaW5j
bHVkZSA8c3lzL3N0YXQuaD4NCiAgICAtI2luY2x1ZGUgPHN5cy90aW1lLmg+DQogICAgLSNpbmNs
dWRlIDxlcnJuby5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5oIg0KICAgIC0NCiAgICAt
c3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgLXN0YXRpYyB2b2lkIGNo
ZWNrX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC1zdGF0aWMgdm9pZCB4ZmdldHMoY2hh
ciAqc3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pOw0KICAgIC0NCiAgICAtZW51bSBpbnB1dF9tb2Rl
IHsNCiAgICAtCW9sZGFza2NvbmZpZywNCiAgICAtCXNpbGVudG9sZGNvbmZpZywNCiAgICAtCW9s
ZGNvbmZpZywNCiAgICAtCWFsbG5vY29uZmlnLA0KICAgIC0JYWxseWVzY29uZmlnLA0KICAgIC0J
YWxsbW9kY29uZmlnLA0KICAgIC0JYWxsZGVmY29uZmlnLA0KICAgIC0JcmFuZGNvbmZpZywNCiAg
ICAtCWRlZmNvbmZpZywNCiAgICAtCXNhdmVkZWZjb25maWcsDQogICAgLQlsaXN0bmV3Y29uZmln
LA0KICAgIC0Jb2xkZGVmY29uZmlnLA0KICAgIC19IGlucHV0X21vZGUgPSBvbGRhc2tjb25maWc7
DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGluZGVudCA9IDE7DQogICAgLXN0YXRpYyBpbnQgdHR5
X3N0ZGlvOw0KICAgIC1zdGF0aWMgaW50IHZhbGlkX3N0ZGluID0gMTsNCiAgICAtc3RhdGljIGlu
dCBzeW5jX2tjb25maWc7DQogICAgLXN0YXRpYyBpbnQgY29uZl9jbnQ7DQogICAgLXN0YXRpYyBj
aGFyIGxpbmVbMTI4XTsNCiAgICAtc3RhdGljIHN0cnVjdCBtZW51ICpyb290RW50cnk7DQogICAg
LQ0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17
DQogICAgLQlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygpOw0KICAgIC0NCiAgICAtCW1lbnVf
Z2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsNCiAgICAtDQogICAgLQlwcmludGYoIlxuJXNcbiIs
IHN0cl9nZXQoJmhlbHApKTsNCiAgICAtCXN0cl9mcmVlKCZoZWxwKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtc3RhdGljIHZvaWQgc3RyaXAoY2hhciAqc3RyKQ0KICAgIC17DQogICAgLQljaGFyICpw
ID0gc3RyOw0KICAgIC0JaW50IGw7DQogICAgLQ0KICAgIC0Jd2hpbGUgKChpc3NwYWNlKCpwKSkp
DQogICAgLQkJcCsrOw0KICAgIC0JbCA9IHN0cmxlbihwKTsNCiAgICAtCWlmIChwICE9IHN0cikN
CiAgICAtCQltZW1tb3ZlKHN0ciwgcCwgbCArIDEpOw0KICAgIC0JaWYgKCFsKQ0KICAgIC0JCXJl
dHVybjsNCiAgICAtCXAgPSBzdHIgKyBsIC0gMTsNCiAgICAtCXdoaWxlICgoaXNzcGFjZSgqcCkp
KQ0KICAgIC0JCSpwLS0gPSAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjaGVj
a19zdGRpbih2b2lkKQ0KICAgIC17DQogICAgLQlpZiAoIXZhbGlkX3N0ZGluKSB7DQogICAgLQkJ
cHJpbnRmKF8oImFib3J0ZWQhXG5cbiIpKTsNCiAgICAtCQlwcmludGYoXygiQ29uc29sZSBpbnB1
dC9vdXRwdXQgaXMgcmVkaXJlY3RlZC4gIikpOw0KICAgIC0JCXByaW50ZihfKCJSdW4gJ21ha2Ug
b2xkY29uZmlnJyB0byB1cGRhdGUgY29uZmlndXJhdGlvbi5cblxuIikpOw0KICAgIC0JCWV4aXQo
MSk7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBpbnQgY29uZl9hc2t2YWx1
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKmRlZikNCiAgICAtew0KICAgIC0JZW51
bSBzeW1ib2xfdHlwZSB0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7DQogICAgLQ0KICAgIC0JaWYg
KCFzeW1faGFzX3ZhbHVlKHN5bSkpDQogICAgLQkJcHJpbnRmKF8oIihORVcpICIpKTsNCiAgICAt
DQogICAgLQlsaW5lWzBdID0gJ1xuJzsNCiAgICAtCWxpbmVbMV0gPSAwOw0KICAgIC0NCiAgICAt
CWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7DQogICAgLQkJcHJpbnRmKCIlc1xuIiwgZGVm
KTsNCiAgICAtCQlsaW5lWzBdID0gJ1xuJzsNCiAgICAtCQlsaW5lWzFdID0gMDsNCiAgICAtCQly
ZXR1cm4gMDsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzd2l0Y2ggKGlucHV0X21vZGUpIHsNCiAg
ICAtCWNhc2Ugb2xkY29uZmlnOg0KICAgIC0JY2FzZSBzaWxlbnRvbGRjb25maWc6DQogICAgLQkJ
aWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgew0KICAgIC0JCQlwcmludGYoIiVzXG4iLCBkZWYpOw0K
ICAgIC0JCQlyZXR1cm4gMDsNCiAgICAtCQl9DQogICAgLQkJY2hlY2tfc3RkaW4oKTsNCiAgICAt
CQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICAtCWNhc2Ugb2xkYXNrY29uZmlnOg0KICAgIC0JCWZm
bHVzaChzdGRvdXQpOw0KICAgIC0JCXhmZ2V0cyhsaW5lLCAxMjgsIHN0ZGluKTsNCiAgICAtCQlp
ZiAoIXR0eV9zdGRpbykNCiAgICAtCQkJcHJpbnRmKCJcbiIpOw0KICAgIC0JCXJldHVybiAxOw0K
ICAgIC0JZGVmYXVsdDoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzd2l0
Y2ggKHR5cGUpIHsNCiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQljYXNlIFNfSEVYOg0KICAgIC0J
Y2FzZSBTX1NUUklORzoNCiAgICAtCQlwcmludGYoIiVzXG4iLCBkZWYpOw0KICAgIC0JCXJldHVy
biAxOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLQlwcmludGYoIiVz
IiwgbGluZSk7DQogICAgLQlyZXR1cm4gMTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGlu
dCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5
bWJvbCAqc3ltID0gbWVudS0+c3ltOw0KICAgIC0JY29uc3QgY2hhciAqZGVmOw0KICAgIC0NCiAg
ICAtCXdoaWxlICgxKSB7DQogICAgLQkJcHJpbnRmKCIlKnMlcyAiLCBpbmRlbnQgLSAxLCAiIiwg
XyhtZW51LT5wcm9tcHQtPnRleHQpKTsNCiAgICAtCQlwcmludGYoIiglcykgIiwgc3ltLT5uYW1l
KTsNCiAgICAtCQlkZWYgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0KICAgIC0JCWlmIChz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKQ0KICAgIC0JCQlwcmludGYoIlslc10gIiwgZGVmKTsN
CiAgICAtCQlpZiAoIWNvbmZfYXNrdmFsdWUoc3ltLCBkZWYpKQ0KICAgIC0JCQlyZXR1cm4gMDsN
CiAgICAtCQlzd2l0Y2ggKGxpbmVbMF0pIHsNCiAgICAtCQljYXNlICdcbic6DQogICAgLQkJCWJy
ZWFrOw0KICAgIC0JCWNhc2UgJz8nOg0KICAgIC0JCQkvKiBwcmludCBoZWxwICovDQogICAgLQkJ
CWlmIChsaW5lWzFdID09ICdcbicpIHsNCiAgICAtCQkJCXByaW50X2hlbHAobWVudSk7DQogICAg
LQkJCQlkZWYgPSBOVUxMOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQkJLyog
ZmFsbCB0aHJvdWdoICovDQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJbGluZVtzdHJsZW4obGlu
ZSktMV0gPSAwOw0KICAgIC0JCQlkZWYgPSBsaW5lOw0KICAgIC0JCX0NCiAgICAtCQlpZiAoZGVm
ICYmIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN5bSwgZGVmKSkNCiAgICAtCQkJcmV0dXJuIDA7DQog
ICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBpbnQgY29uZl9zeW0oc3RydWN0IG1l
bnUgKm1lbnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsN
CiAgICAtCXRyaXN0YXRlIG9sZHZhbCwgbmV3dmFsOw0KICAgIC0NCiAgICAtCXdoaWxlICgxKSB7
DQogICAgLQkJcHJpbnRmKCIlKnMlcyAiLCBpbmRlbnQgLSAxLCAiIiwgXyhtZW51LT5wcm9tcHQt
PnRleHQpKTsNCiAgICAtCQlpZiAoc3ltLT5uYW1lKQ0KICAgIC0JCQlwcmludGYoIiglcykgIiwg
c3ltLT5uYW1lKTsNCiAgICAtCQlwdXRjaGFyKCdbJyk7DQogICAgLQkJb2xkdmFsID0gc3ltX2dl
dF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0JCXN3aXRjaCAob2xkdmFsKSB7DQogICAgLQkJ
Y2FzZSBubzoNCiAgICAtCQkJcHV0Y2hhcignTicpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQlj
YXNlIG1vZDoNCiAgICAtCQkJcHV0Y2hhcignTScpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQlj
YXNlIHllczoNCiAgICAtCQkJcHV0Y2hhcignWScpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9
DQogICAgLQkJaWYgKG9sZHZhbCAhPSBubyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5
bSwgbm8pKQ0KICAgIC0JCQlwcmludGYoIi9uIik7DQogICAgLQkJaWYgKG9sZHZhbCAhPSBtb2Qg
JiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1vZCkpDQogICAgLQkJCXByaW50Zigi
L20iKTsNCiAgICAtCQlpZiAob2xkdmFsICE9IHllcyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3Jh
bmdlKHN5bSwgeWVzKSkNCiAgICAtCQkJcHJpbnRmKCIveSIpOw0KICAgIC0JCWlmIChtZW51X2hh
c19oZWxwKG1lbnUpKQ0KICAgIC0JCQlwcmludGYoIi8/Iik7DQogICAgLQkJcHJpbnRmKCJdICIp
Ow0KICAgIC0JCWlmICghY29uZl9hc2t2YWx1ZShzeW0sIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5
bSkpKQ0KICAgIC0JCQlyZXR1cm4gMDsNCiAgICAtCQlzdHJpcChsaW5lKTsNCiAgICAtDQogICAg
LQkJc3dpdGNoIChsaW5lWzBdKSB7DQogICAgLQkJY2FzZSAnbic6DQogICAgLQkJY2FzZSAnTic6
DQogICAgLQkJCW5ld3ZhbCA9IG5vOw0KICAgIC0JCQlpZiAoIWxpbmVbMV0gfHwgIXN0cmNtcCgm
bGluZVsxXSwgIm8iKSkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljb250aW51ZTsNCiAgICAt
CQljYXNlICdtJzoNCiAgICAtCQljYXNlICdNJzoNCiAgICAtCQkJbmV3dmFsID0gbW9kOw0KICAg
IC0JCQlpZiAoIWxpbmVbMV0pDQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY29udGludWU7DQog
ICAgLQkJY2FzZSAneSc6DQogICAgLQkJY2FzZSAnWSc6DQogICAgLQkJCW5ld3ZhbCA9IHllczsN
CiAgICAtCQkJaWYgKCFsaW5lWzFdIHx8ICFzdHJjbXAoJmxpbmVbMV0sICJlcyIpKQ0KICAgIC0J
CQkJYnJlYWs7DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJbmV3
dmFsID0gb2xkdmFsOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICc/JzoNCiAgICAtCQkJ
Z290byBoZWxwOw0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCX0N
CiAgICAtCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCkpDQogICAgLQkJ
CXJldHVybiAwOw0KICAgIC1oZWxwOg0KICAgIC0JCXByaW50X2hlbHAobWVudSk7DQogICAgLQl9
DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBpbnQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUg
Km1lbnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bSwgKmRlZl9zeW07DQogICAg
LQlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgLQlib29sIGlzX25ldzsNCiAgICAtDQogICAgLQlz
eW0gPSBtZW51LT5zeW07DQogICAgLQlpc19uZXcgPSAhc3ltX2hhc192YWx1ZShzeW0pOw0KICAg
IC0JaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgIC0JCWNvbmZfc3ltKG1lbnUpOw0K
ICAgIC0JCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgLQkJc3dpdGNoIChzeW1fZ2V0X3RyaXN0
YXRlX3ZhbHVlKHN5bSkpIHsNCiAgICAtCQljYXNlIG5vOg0KICAgIC0JCQlyZXR1cm4gMTsNCiAg
ICAtCQljYXNlIG1vZDoNCiAgICAtCQkJcmV0dXJuIDA7DQogICAgLQkJY2FzZSB5ZXM6DQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCX0gZWxzZSB7DQogICAgLQkJc3dpdGNoIChzeW1f
Z2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpIHsNCiAgICAtCQljYXNlIG5vOg0KICAgIC0JCQlyZXR1
cm4gMTsNCiAgICAtCQljYXNlIG1vZDoNCiAgICAtCQkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50
IC0gMSwgIiIsIF8obWVudV9nZXRfcHJvbXB0KG1lbnUpKSk7DQogICAgLQkJCXJldHVybiAwOw0K
ICAgIC0JCWNhc2UgeWVzOg0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQl9DQogICAg
LQ0KICAgIC0Jd2hpbGUgKDEpIHsNCiAgICAtCQlpbnQgY250LCBkZWY7DQogICAgLQ0KICAgIC0J
CXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51
KSkpOw0KICAgIC0JCWRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOw0KICAgIC0J
CWNudCA9IGRlZiA9IDA7DQogICAgLQkJbGluZVswXSA9IDA7DQogICAgLQkJZm9yIChjaGlsZCA9
IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgLQkJCWlmICgh
bWVudV9pc192aXNpYmxlKGNoaWxkKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlpZiAo
IWNoaWxkLT5zeW0pIHsNCiAgICAtCQkJCXByaW50ZigiJSpjICVzXG4iLCBpbmRlbnQsICcqJywg
XyhtZW51X2dldF9wcm9tcHQoY2hpbGQpKSk7DQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJ
fQ0KICAgIC0JCQljbnQrKzsNCiAgICAtCQkJaWYgKGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkgew0K
ICAgIC0JCQkJZGVmID0gY250Ow0KICAgIC0JCQkJcHJpbnRmKCIlKmMiLCBpbmRlbnQsICc+Jyk7
DQogICAgLQkJCX0gZWxzZQ0KICAgIC0JCQkJcHJpbnRmKCIlKmMiLCBpbmRlbnQsICcgJyk7DQog
ICAgLQkJCXByaW50ZigiICVkLiAlcyIsIGNudCwgXyhtZW51X2dldF9wcm9tcHQoY2hpbGQpKSk7
DQogICAgLQkJCWlmIChjaGlsZC0+c3ltLT5uYW1lKQ0KICAgIC0JCQkJcHJpbnRmKCIgKCVzKSIs
IGNoaWxkLT5zeW0tPm5hbWUpOw0KICAgIC0JCQlpZiAoIXN5bV9oYXNfdmFsdWUoY2hpbGQtPnN5
bSkpDQogICAgLQkJCQlwcmludGYoXygiIChORVcpIikpOw0KICAgIC0JCQlwcmludGYoIlxuIik7
DQogICAgLQkJfQ0KICAgIC0JCXByaW50ZihfKCIlKnNjaG9pY2UiKSwgaW5kZW50IC0gMSwgIiIp
Ow0KICAgIC0JCWlmIChjbnQgPT0gMSkgew0KICAgIC0JCQlwcmludGYoIlsxXTogMVxuIik7DQog
ICAgLQkJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgLQkJfQ0KICAgIC0JCXByaW50ZigiWzEtJWQi
LCBjbnQpOw0KICAgIC0JCWlmIChtZW51X2hhc19oZWxwKG1lbnUpKQ0KICAgIC0JCQlwcmludGYo
Ij8iKTsNCiAgICAtCQlwcmludGYoIl06ICIpOw0KICAgIC0JCXN3aXRjaCAoaW5wdXRfbW9kZSkg
ew0KICAgIC0JCWNhc2Ugb2xkY29uZmlnOg0KICAgIC0JCWNhc2Ugc2lsZW50b2xkY29uZmlnOg0K
ICAgIC0JCQlpZiAoIWlzX25ldykgew0KICAgIC0JCQkJY250ID0gZGVmOw0KICAgIC0JCQkJcHJp
bnRmKCIlZFxuIiwgY250KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCWNo
ZWNrX3N0ZGluKCk7DQogICAgLQkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgIC0JCWNhc2Ugb2xk
YXNrY29uZmlnOg0KICAgIC0JCQlmZmx1c2goc3Rkb3V0KTsNCiAgICAtCQkJeGZnZXRzKGxpbmUs
IDEyOCwgc3RkaW4pOw0KICAgIC0JCQlzdHJpcChsaW5lKTsNCiAgICAtCQkJaWYgKGxpbmVbMF0g
PT0gJz8nKSB7DQogICAgLQkJCQlwcmludF9oZWxwKG1lbnUpOw0KICAgIC0JCQkJY29udGludWU7
DQogICAgLQkJCX0NCiAgICAtCQkJaWYgKCFsaW5lWzBdKQ0KICAgIC0JCQkJY250ID0gZGVmOw0K
ICAgIC0JCQllbHNlIGlmIChpc2RpZ2l0KGxpbmVbMF0pKQ0KICAgIC0JCQkJY250ID0gYXRvaShs
aW5lKTsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQlj
b25mX2NoaWxkczoNCiAgICAtCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHQpIHsNCiAgICAtCQkJaWYgKCFjaGlsZC0+c3ltIHx8ICFtZW51X2lzX3Zp
c2libGUoY2hpbGQpKQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCWlmICghLS1jbnQpDQog
ICAgLQkJCQlicmVhazsNCiAgICAtCQl9DQogICAgLQkJaWYgKCFjaGlsZCkNCiAgICAtCQkJY29u
dGludWU7DQogICAgLQkJaWYgKGxpbmVbMF0gJiYgbGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAn
PycpIHsNCiAgICAtCQkJcHJpbnRfaGVscChjaGlsZCk7DQogICAgLQkJCWNvbnRpbnVlOw0KICAg
IC0JCX0NCiAgICAtCQlzeW1fc2V0X2Nob2ljZV92YWx1ZShzeW0sIGNoaWxkLT5zeW0pOw0KICAg
IC0JCWZvciAoY2hpbGQgPSBjaGlsZC0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQp
IHsNCiAgICAtCQkJaW5kZW50ICs9IDI7DQogICAgLQkJCWNvbmYoY2hpbGQpOw0KICAgIC0JCQlp
bmRlbnQgLT0gMjsNCiAgICAtCQl9DQogICAgLQkJcmV0dXJuIDE7DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsN
CiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsN
CiAgICAtCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtDQogICAgLQlpZiAoIW1lbnVfaXNfdmlz
aWJsZShtZW51KSkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0Jc3ltID0gbWVudS0+c3lt
Ow0KICAgIC0JcHJvcCA9IG1lbnUtPnByb21wdDsNCiAgICAtCWlmIChwcm9wKSB7DQogICAgLQkJ
Y29uc3QgY2hhciAqcHJvbXB0Ow0KICAgIC0NCiAgICAtCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsN
CiAgICAtCQljYXNlIFBfTUVOVToNCiAgICAtCQkJaWYgKChpbnB1dF9tb2RlID09IHNpbGVudG9s
ZGNvbmZpZyB8fA0KICAgIC0JCQkgICAgIGlucHV0X21vZGUgPT0gbGlzdG5ld2NvbmZpZyB8fA0K
ICAgIC0JCQkgICAgIGlucHV0X21vZGUgPT0gb2xkZGVmY29uZmlnKSAmJg0KICAgIC0JCQkgICAg
cm9vdEVudHJ5ICE9IG1lbnUpIHsNCiAgICAtCQkJCWNoZWNrX2NvbmYobWVudSk7DQogICAgLQkJ
CQlyZXR1cm47DQogICAgLQkJCX0NCiAgICAtCQkJLyogZmFsbCB0aHJvdWdoICovDQogICAgLQkJ
Y2FzZSBQX0NPTU1FTlQ6DQogICAgLQkJCXByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsN
CiAgICAtCQkJaWYgKHByb21wdCkNCiAgICAtCQkJCXByaW50ZigiJSpjXG4lKmMgJXNcbiUqY1xu
IiwNCiAgICAtCQkJCQlpbmRlbnQsICcqJywNCiAgICAtCQkJCQlpbmRlbnQsICcqJywgXyhwcm9t
cHQpLA0KICAgIC0JCQkJCWluZGVudCwgJyonKTsNCiAgICAtCQlkZWZhdWx0Og0KICAgIC0JCQk7
DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmICghc3ltKQ0KICAgIC0JCWdvdG8g
Y29uZl9jaGlsZHM7DQogICAgLQ0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAg
IC0JCWNvbmZfY2hvaWNlKG1lbnUpOw0KICAgIC0JCWlmIChzeW0tPmN1cnIudHJpICE9IG1vZCkN
CiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCWdvdG8gY29uZl9jaGlsZHM7DQogICAgLQl9DQogICAg
LQ0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQlj
YXNlIFNfSEVYOg0KICAgIC0JY2FzZSBTX1NUUklORzoNCiAgICAtCQljb25mX3N0cmluZyhtZW51
KTsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJY29uZl9zeW0obWVudSk7
DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQ0KICAgIC1jb25mX2NoaWxkczoNCiAgICAt
CWlmIChzeW0pDQogICAgLQkJaW5kZW50ICs9IDI7DQogICAgLQlmb3IgKGNoaWxkID0gbWVudS0+
bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpDQogICAgLQkJY29uZihjaGlsZCk7DQog
ICAgLQlpZiAoc3ltKQ0KICAgIC0JCWluZGVudCAtPSAyOw0KICAgIC19DQogICAgLQ0KICAgIC1z
dGF0aWMgdm9pZCBjaGVja19jb25mKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQlz
dHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgLQ0KICAg
IC0JaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAg
ICAtCXN5bSA9IG1lbnUtPnN5bTsNCiAgICAtCWlmIChzeW0gJiYgIXN5bV9oYXNfdmFsdWUoc3lt
KSkgew0KICAgIC0JCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkgfHwNCiAgICAtCQkgICAgKHN5
bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKSkg
ew0KICAgIC0JCQlpZiAoaW5wdXRfbW9kZSA9PSBsaXN0bmV3Y29uZmlnKSB7DQogICAgLQkJCQlp
ZiAoc3ltLT5uYW1lICYmICFzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsNCiAgICAtCQkJCQlw
cmludGYoIiVzJXNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSk7DQogICAgLQkJCQl9DQogICAgLQkJ
CX0gZWxzZSBpZiAoaW5wdXRfbW9kZSAhPSBvbGRkZWZjb25maWcpIHsNCiAgICAtCQkJCWlmICgh
Y29uZl9jbnQrKykNCiAgICAtCQkJCQlwcmludGYoXygiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxu
KlxuIikpOw0KICAgIC0JCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRfcGFyZW50X21lbnUobWVudSk7
DQogICAgLQkJCQljb25mKHJvb3RFbnRyeSk7DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQl9
DQogICAgLQ0KICAgIC0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0KQ0KICAgIC0JCWNoZWNrX2NvbmYoY2hpbGQpOw0KICAgIC19DQogICAgLQ0KICAg
IC1zdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdHNbXSA9IHsNCiAgICAtCXsib2xkYXNrY29u
ZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGFza2NvbmZpZ30sDQogICAgLQl7
Im9sZGNvbmZpZyIsICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBvbGRjb25maWd9LA0K
ICAgIC0JeyJzaWxlbnRvbGRjb25maWciLCBub19hcmd1bWVudCwgICAgICAgTlVMTCwgc2lsZW50
b2xkY29uZmlnfSwNCiAgICAtCXsiZGVmY29uZmlnIiwgICAgICAgb3B0aW9uYWxfYXJndW1lbnQs
IE5VTEwsIGRlZmNvbmZpZ30sDQogICAgLQl7InNhdmVkZWZjb25maWciLCAgIHJlcXVpcmVkX2Fy
Z3VtZW50LCBOVUxMLCBzYXZlZGVmY29uZmlnfSwNCiAgICAtCXsiYWxsbm9jb25maWciLCAgICAg
bm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbG5vY29uZmlnfSwNCiAgICAtCXsiYWxseWVzY29u
ZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbHllc2NvbmZpZ30sDQogICAgLQl7
ImFsbG1vZGNvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxtb2Rjb25maWd9
LA0KICAgIC0JeyJhbGxkZWZjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxs
ZGVmY29uZmlnfSwNCiAgICAtCXsicmFuZGNvbmZpZyIsICAgICAgbm9fYXJndW1lbnQsICAgICAg
IE5VTEwsIHJhbmRjb25maWd9LA0KICAgIC0JeyJsaXN0bmV3Y29uZmlnIiwgICBub19hcmd1bWVu
dCwgICAgICAgTlVMTCwgbGlzdG5ld2NvbmZpZ30sDQogICAgLQl7Im9sZGRlZmNvbmZpZyIsICAg
IG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBvbGRkZWZjb25maWd9LA0KICAgIC0JLyoNCiAgICAt
CSAqIG9sZG5vY29uZmlnIGlzIGFuIGFsaWFzIG9mIG9sZGRlZmNvbmZpZywgYmVjYXVzZSBwZW9w
bGUgYWxyZWFkeQ0KICAgIC0JICogYXJlIGRlcGVuZGVudCBvbiBpdHMgYmVoYXZpb3Ioc2V0cyBu
ZXcgc3ltYm9scyB0byB0aGVpciBkZWZhdWx0DQogICAgLQkgKiB2YWx1ZSBidXQgbm90ICduJykg
d2l0aCB0aGUgY291bnRlci1pbnR1aXRpdmUgbmFtZS4NCiAgICAtCSAqLw0KICAgIC0JeyJvbGRu
b2NvbmZpZyIsICAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkZGVmY29uZmlnfSwNCiAg
ICAtCXtOVUxMLCAwLCBOVUxMLCAwfQ0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQg
Y29uZl91c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkNCiAgICAtew0KICAgIC0NCiAgICAtCXBy
aW50ZigiVXNhZ2U6ICVzIFtvcHRpb25dIDxrY29uZmlnLWZpbGU+XG4iLCBwcm9nbmFtZSk7DQog
ICAgLQlwcmludGYoIltvcHRpb25dIGlzIF9vbmVfIG9mIHRoZSBmb2xsb3dpbmc6XG4iKTsNCiAg
ICAtCXByaW50ZigiICAtLWxpc3RuZXdjb25maWcgICAgICAgICBMaXN0IG5ldyBvcHRpb25zXG4i
KTsNCiAgICAtCXByaW50ZigiICAtLW9sZGFza2NvbmZpZyAgICAgICAgICBTdGFydCBhIG5ldyBj
b25maWd1cmF0aW9uIHVzaW5nIGEgbGluZS1vcmllbnRlZCBwcm9ncmFtXG4iKTsNCiAgICAtCXBy
aW50ZigiICAtLW9sZGNvbmZpZyAgICAgICAgICAgICBVcGRhdGUgYSBjb25maWd1cmF0aW9uIHVz
aW5nIGEgcHJvdmlkZWQgLmNvbmZpZyBhcyBiYXNlXG4iKTsNCiAgICAtCXByaW50ZigiICAtLXNp
bGVudG9sZGNvbmZpZyAgICAgICBTYW1lIGFzIG9sZGNvbmZpZywgYnV0IHF1aWV0bHksIGFkZGl0
aW9uYWxseSB1cGRhdGUgZGVwc1xuIik7DQogICAgLQlwcmludGYoIiAgLS1vbGRkZWZjb25maWcg
ICAgICAgICAgU2FtZSBhcyBzaWxlbnRvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8g
dGhlaXIgZGVmYXVsdCB2YWx1ZVxuIik7DQogICAgLQlwcmludGYoIiAgLS1vbGRub2NvbmZpZyAg
ICAgICAgICAgQW4gYWxpYXMgb2Ygb2xkZGVmY29uZmlnXG4iKTsNCiAgICAtCXByaW50ZigiICAt
LWRlZmNvbmZpZyA8ZmlsZT4gICAgICBOZXcgY29uZmlnIHdpdGggZGVmYXVsdCBkZWZpbmVkIGlu
IDxmaWxlPlxuIik7DQogICAgLQlwcmludGYoIiAgLS1zYXZlZGVmY29uZmlnIDxmaWxlPiAgU2F2
ZSB0aGUgbWluaW1hbCBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG8gPGZpbGU+XG4iKTsNCiAgICAt
CXByaW50ZigiICAtLWFsbG5vY29uZmlnICAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBv
cHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG5vXG4iKTsNCiAgICAtCXByaW50ZigiICAtLWFsbHll
c2NvbmZpZyAgICAgICAgICBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJl
ZCB3aXRoIHllc1xuIik7DQogICAgLQlwcmludGYoIiAgLS1hbGxtb2Rjb25maWcgICAgICAgICAg
TmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCBtb2RcbiIpOw0K
ICAgIC0JcHJpbnRmKCIgIC0tYWxsZGVmY29uZmlnICAgICAgICAgIE5ldyBjb25maWcgd2l0aCBh
bGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdFxuIik7DQogICAgLQlwcmludGYoIiAgLS1yYW5kY29u
ZmlnICAgICAgICAgICAgTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIgdG8gYWxsIG9wdGlv
bnNcbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgbWFpbihpbnQgYWMsIGNoYXIgKiphdikN
CiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqcHJvZ25hbWUgPSBhdlswXTsNCiAgICAtCWludCBv
cHQ7DQogICAgLQljb25zdCBjaGFyICpuYW1lLCAqZGVmY29uZmlnX2ZpbGUgPSBOVUxMIC8qIGdj
YyB1bmluaXQgKi87DQogICAgLQlzdHJ1Y3Qgc3RhdCB0bXBzdGF0Ow0KICAgIC0NCiAgICAtCXNl
dGxvY2FsZShMQ19BTEwsICIiKTsNCiAgICAtCWJpbmR0ZXh0ZG9tYWluKFBBQ0tBR0UsIExPQ0FM
RURJUik7DQogICAgLQl0ZXh0ZG9tYWluKFBBQ0tBR0UpOw0KICAgIC0NCiAgICAtCXR0eV9zdGRp
byA9IGlzYXR0eSgwKSAmJiBpc2F0dHkoMSkgJiYgaXNhdHR5KDIpOw0KICAgIC0NCiAgICAtCXdo
aWxlICgob3B0ID0gZ2V0b3B0X2xvbmcoYWMsIGF2LCAiIiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0g
LTEpIHsNCiAgICAtCQlpbnB1dF9tb2RlID0gKGVudW0gaW5wdXRfbW9kZSlvcHQ7DQogICAgLQkJ
c3dpdGNoIChvcHQpIHsNCiAgICAtCQljYXNlIHNpbGVudG9sZGNvbmZpZzoNCiAgICAtCQkJc3lu
Y19rY29uZmlnID0gMTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBkZWZjb25maWc6DQog
ICAgLQkJY2FzZSBzYXZlZGVmY29uZmlnOg0KICAgIC0JCQlkZWZjb25maWdfZmlsZSA9IG9wdGFy
ZzsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSByYW5kY29uZmlnOg0KICAgIC0JCXsNCiAg
ICAtCQkJc3RydWN0IHRpbWV2YWwgbm93Ow0KICAgIC0JCQl1bnNpZ25lZCBpbnQgc2VlZDsNCiAg
ICAtCQkJY2hhciAqc2VlZF9lbnY7DQogICAgLQ0KICAgIC0JCQkvKg0KICAgIC0JCQkgKiBVc2Ug
bWljcm9zZWNvbmRzIGRlcml2ZWQgc2VlZCwNCiAgICAtCQkJICogY29tcGVuc2F0ZSBmb3Igc3lz
dGVtcyB3aGVyZSBpdCBtYXkgYmUgemVybw0KICAgIC0JCQkgKi8NCiAgICAtCQkJZ2V0dGltZW9m
ZGF5KCZub3csIE5VTEwpOw0KICAgIC0JCQlzZWVkID0gKHVuc2lnbmVkIGludCkoKG5vdy50dl9z
ZWMgKyAxKSAqIChub3cudHZfdXNlYyArIDEpKTsNCiAgICAtDQogICAgLQkJCXNlZWRfZW52ID0g
Z2V0ZW52KCJLQ09ORklHX1NFRUQiKTsNCiAgICAtCQkJaWYoIHNlZWRfZW52ICYmICpzZWVkX2Vu
diApIHsNCiAgICAtCQkJCWNoYXIgKmVuZHA7DQogICAgLQkJCQlpbnQgdG1wID0gKGludClzdHJ0
b2woc2VlZF9lbnYsICZlbmRwLCAwKTsNCiAgICAtCQkJCWlmICgqZW5kcCA9PSAnXDAnKSB7DQog
ICAgLQkJCQkJc2VlZCA9IHRtcDsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCQlmcHJp
bnRmKCBzdGRlcnIsICJLQ09ORklHX1NFRUQ9MHglWFxuIiwgc2VlZCApOw0KICAgIC0JCQlzcmFu
ZChzZWVkKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWNhc2Ugb2xkYXNrY29u
ZmlnOg0KICAgIC0JCWNhc2Ugb2xkY29uZmlnOg0KICAgIC0JCWNhc2UgYWxsbm9jb25maWc6DQog
ICAgLQkJY2FzZSBhbGx5ZXNjb25maWc6DQogICAgLQkJY2FzZSBhbGxtb2Rjb25maWc6DQogICAg
LQkJY2FzZSBhbGxkZWZjb25maWc6DQogICAgLQkJY2FzZSBsaXN0bmV3Y29uZmlnOg0KICAgIC0J
CWNhc2Ugb2xkZGVmY29uZmlnOg0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICc/JzoNCiAg
ICAtCQkJY29uZl91c2FnZShwcm9nbmFtZSk7DQogICAgLQkJCWV4aXQoMSk7DQogICAgLQkJCWJy
ZWFrOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWlmIChhYyA9PSBvcHRpbmQpIHsNCiAgICAt
CQlwcmludGYoXygiJXM6IEtjb25maWcgZmlsZSBtaXNzaW5nXG4iKSwgYXZbMF0pOw0KICAgIC0J
CWNvbmZfdXNhZ2UocHJvZ25hbWUpOw0KICAgIC0JCWV4aXQoMSk7DQogICAgLQl9DQogICAgLQlu
YW1lID0gYXZbb3B0aW5kXTsNCiAgICAtCWNvbmZfcGFyc2UobmFtZSk7DQogICAgLQlpZiAoc3lu
Y19rY29uZmlnKSB7DQogICAgLQkJbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsNCiAgICAt
CQlpZiAoc3RhdChuYW1lLCAmdG1wc3RhdCkpIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsIF8o
IioqKlxuIg0KICAgIC0JCQkJIioqKiBDb25maWd1cmF0aW9uIGZpbGUgXCIlc1wiIG5vdCBmb3Vu
ZCFcbiINCiAgICAtCQkJCSIqKipcbiINCiAgICAtCQkJCSIqKiogUGxlYXNlIHJ1biBzb21lIGNv
bmZpZ3VyYXRvciAoZS5nLiBcIm1ha2Ugb2xkY29uZmlnXCIgb3JcbiINCiAgICAtCQkJCSIqKiog
XCJtYWtlIG1lbnVjb25maWdcIiBvciBcIm1ha2UgeGNvbmZpZ1wiKS5cbiINCiAgICAtCQkJCSIq
KipcbiIpLCBuYW1lKTsNCiAgICAtCQkJZXhpdCgxKTsNCiAgICAtCQl9DQogICAgLQl9DQogICAg
LQ0KICAgIC0Jc3dpdGNoIChpbnB1dF9tb2RlKSB7DQogICAgLQljYXNlIGRlZmNvbmZpZzoNCiAg
ICAtCQlpZiAoIWRlZmNvbmZpZ19maWxlKQ0KICAgIC0JCQlkZWZjb25maWdfZmlsZSA9IGNvbmZf
Z2V0X2RlZmF1bHRfY29uZm5hbWUoKTsNCiAgICAtCQlpZiAoY29uZl9yZWFkKGRlZmNvbmZpZ19m
aWxlKSkgew0KICAgIC0JCQlwcmludGYoXygiKioqXG4iDQogICAgLQkJCQkiKioqIENhbid0IGZp
bmQgZGVmYXVsdCBjb25maWd1cmF0aW9uIFwiJXNcIiFcbiINCiAgICAtCQkJCSIqKipcbiIpLCBk
ZWZjb25maWdfZmlsZSk7DQogICAgLQkJCWV4aXQoMSk7DQogICAgLQkJfQ0KICAgIC0JCWJyZWFr
Ow0KICAgIC0JY2FzZSBzYXZlZGVmY29uZmlnOg0KICAgIC0JY2FzZSBzaWxlbnRvbGRjb25maWc6
DQogICAgLQljYXNlIG9sZGFza2NvbmZpZzoNCiAgICAtCWNhc2Ugb2xkY29uZmlnOg0KICAgIC0J
Y2FzZSBsaXN0bmV3Y29uZmlnOg0KICAgIC0JY2FzZSBvbGRkZWZjb25maWc6DQogICAgLQkJY29u
Zl9yZWFkKE5VTEwpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBhbGxub2NvbmZpZzoNCiAg
ICAtCWNhc2UgYWxseWVzY29uZmlnOg0KICAgIC0JY2FzZSBhbGxtb2Rjb25maWc6DQogICAgLQlj
YXNlIGFsbGRlZmNvbmZpZzoNCiAgICAtCWNhc2UgcmFuZGNvbmZpZzoNCiAgICAtCQluYW1lID0g
Z2V0ZW52KCJLQ09ORklHX0FMTENPTkZJRyIpOw0KICAgIC0JCWlmICghbmFtZSkNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJaWYgKChzdHJjbXAobmFtZSwgIiIpICE9IDApICYmIChzdHJjbXAobmFt
ZSwgIjEiKSAhPSAwKSkgew0KICAgIC0JCQlpZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RF
Rl9VU0VSKSkgew0KICAgIC0JCQkJZnByaW50ZihzdGRlcnIsDQogICAgLQkJCQkJXygiKioqIENh
bid0IHJlYWQgc2VlZCBjb25maWd1cmF0aW9uIFwiJXNcIiFcbiIpLA0KICAgIC0JCQkJCW5hbWUp
Ow0KICAgIC0JCQkJZXhpdCgxKTsNCiAgICAtCQkJfQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9
DQogICAgLQkJc3dpdGNoIChpbnB1dF9tb2RlKSB7DQogICAgLQkJY2FzZSBhbGxub2NvbmZpZzoJ
bmFtZSA9ICJhbGxuby5jb25maWciOyBicmVhazsNCiAgICAtCQljYXNlIGFsbHllc2NvbmZpZzoJ
bmFtZSA9ICJhbGx5ZXMuY29uZmlnIjsgYnJlYWs7DQogICAgLQkJY2FzZSBhbGxtb2Rjb25maWc6
CW5hbWUgPSAiYWxsbW9kLmNvbmZpZyI7IGJyZWFrOw0KICAgIC0JCWNhc2UgYWxsZGVmY29uZmln
OgluYW1lID0gImFsbGRlZi5jb25maWciOyBicmVhazsNCiAgICAtCQljYXNlIHJhbmRjb25maWc6
CW5hbWUgPSAiYWxscmFuZG9tLmNvbmZpZyI7IGJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6IGJyZWFr
Ow0KICAgIC0JCX0NCiAgICAtCQlpZiAoY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9VU0VS
KSAmJg0KICAgIC0JCSAgICBjb25mX3JlYWRfc2ltcGxlKCJhbGwuY29uZmlnIiwgU19ERUZfVVNF
UikpIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsDQogICAgLQkJCQlfKCIqKiogS0NPTkZJR19B
TExDT05GSUcgc2V0LCBidXQgbm8gXCIlc1wiIG9yIFwiYWxsLmNvbmZpZ1wiIGZpbGUgZm91bmRc
biIpLA0KICAgIC0JCQkJbmFtZSk7DQogICAgLQkJCWV4aXQoMSk7DQogICAgLQkJfQ0KICAgIC0J
CWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQog
ICAgLQlpZiAoc3luY19rY29uZmlnKSB7DQogICAgLQkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkg
ew0KICAgIC0JCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX05PU0lMRU5UVVBEQVRFIik7DQogICAg
LQkJCWlmIChuYW1lICYmICpuYW1lKSB7DQogICAgLQkJCQlmcHJpbnRmKHN0ZGVyciwNCiAgICAt
CQkJCQlfKCJcbioqKiBUaGUgY29uZmlndXJhdGlvbiByZXF1aXJlcyBleHBsaWNpdCB1cGRhdGUu
XG5cbiIpKTsNCiAgICAtCQkJCXJldHVybiAxOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0J
CXZhbGlkX3N0ZGluID0gdHR5X3N0ZGlvOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXN3aXRjaCAo
aW5wdXRfbW9kZSkgew0KICAgIC0JY2FzZSBhbGxub2NvbmZpZzoNCiAgICAtCQljb25mX3NldF9h
bGxfbmV3X3N5bWJvbHMoZGVmX25vKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgYWxseWVz
Y29uZmlnOg0KICAgIC0JCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfeWVzKTsNCiAgICAt
CQlicmVhazsNCiAgICAtCWNhc2UgYWxsbW9kY29uZmlnOg0KICAgIC0JCWNvbmZfc2V0X2FsbF9u
ZXdfc3ltYm9scyhkZWZfbW9kKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgYWxsZGVmY29u
ZmlnOg0KICAgIC0JCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfZGVmYXVsdCk7DQogICAg
LQkJYnJlYWs7DQogICAgLQljYXNlIHJhbmRjb25maWc6DQogICAgLQkJLyogUmVhbGx5IG5vdGhp
bmcgdG8gZG8gaW4gdGhpcyBsb29wICovDQogICAgLQkJd2hpbGUgKGNvbmZfc2V0X2FsbF9uZXdf
c3ltYm9scyhkZWZfcmFuZG9tKSkgOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBkZWZjb25m
aWc6DQogICAgLQkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9kZWZhdWx0KTsNCiAgICAt
CQlicmVhazsNCiAgICAtCWNhc2Ugc2F2ZWRlZmNvbmZpZzoNCiAgICAtCQlicmVhazsNCiAgICAt
CWNhc2Ugb2xkYXNrY29uZmlnOg0KICAgIC0JCXJvb3RFbnRyeSA9ICZyb290bWVudTsNCiAgICAt
CQljb25mKCZyb290bWVudSk7DQogICAgLQkJaW5wdXRfbW9kZSA9IHNpbGVudG9sZGNvbmZpZzsN
CiAgICAtCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICAtCWNhc2Ugb2xkY29uZmlnOg0KICAgIC0J
Y2FzZSBsaXN0bmV3Y29uZmlnOg0KICAgIC0JY2FzZSBvbGRkZWZjb25maWc6DQogICAgLQljYXNl
IHNpbGVudG9sZGNvbmZpZzoNCiAgICAtCQkvKiBVcGRhdGUgdW50aWwgYSBsb29wIGNhdXNlZCBu
byBtb3JlIGNoYW5nZXMgKi8NCiAgICAtCQlkbyB7DQogICAgLQkJCWNvbmZfY250ID0gMDsNCiAg
ICAtCQkJY2hlY2tfY29uZigmcm9vdG1lbnUpOw0KICAgIC0JCX0gd2hpbGUgKGNvbmZfY250ICYm
DQogICAgLQkJCSAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmlnICYmDQogICAgLQkJCSAgaW5w
dXRfbW9kZSAhPSBvbGRkZWZjb25maWcpKTsNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAt
DQogICAgLQlpZiAoc3luY19rY29uZmlnKSB7DQogICAgLQkJLyogc2lsZW50b2xkY29uZmlnIGlz
IHVzZWQgZHVyaW5nIHRoZSBidWlsZCBzbyB3ZSBzaGFsbCB1cGRhdGUgYXV0b2NvbmYuDQogICAg
LQkJICogQWxsIG90aGVyIGNvbW1hbmRzIGFyZSBvbmx5IHVzZWQgdG8gZ2VuZXJhdGUgYSBjb25m
aWcuDQogICAgLQkJICovDQogICAgLQkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSAmJiBjb25mX3dy
aXRlKE5VTEwpKSB7DQogICAgLQkJCWZwcmludGYoc3RkZXJyLCBfKCJcbioqKiBFcnJvciBkdXJp
bmcgd3JpdGluZyBvZiB0aGUgY29uZmlndXJhdGlvbi5cblxuIikpOw0KICAgIC0JCQlleGl0KDEp
Ow0KICAgIC0JCX0NCiAgICAtCQlpZiAoY29uZl93cml0ZV9hdXRvY29uZigpKSB7DQogICAgLQkJ
CWZwcmludGYoc3RkZXJyLCBfKCJcbioqKiBFcnJvciBkdXJpbmcgdXBkYXRlIG9mIHRoZSBjb25m
aWd1cmF0aW9uLlxuXG4iKSk7DQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JCX0NCiAgICAtCX0g
ZWxzZSBpZiAoaW5wdXRfbW9kZSA9PSBzYXZlZGVmY29uZmlnKSB7DQogICAgLQkJaWYgKGNvbmZf
d3JpdGVfZGVmY29uZmlnKGRlZmNvbmZpZ19maWxlKSkgew0KICAgIC0JCQlmcHJpbnRmKHN0ZGVy
ciwgXygibioqKiBFcnJvciB3aGlsZSBzYXZpbmcgZGVmY29uZmlnIHRvOiAlc1xuXG4iKSwNCiAg
ICAtCQkJICAgICAgICBkZWZjb25maWdfZmlsZSk7DQogICAgLQkJCXJldHVybiAxOw0KICAgIC0J
CX0NCiAgICAtCX0gZWxzZSBpZiAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmlnKSB7DQogICAg
LQkJaWYgKGNvbmZfd3JpdGUoTlVMTCkpIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsIF8oIlxu
KioqIEVycm9yIGR1cmluZyB3cml0aW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG4iKSk7DQog
ICAgLQkJCWV4aXQoMSk7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIDA7DQogICAg
LX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIEhlbHBlciBmdW5jdGlvbiB0byBmYWNpbGl0YXRl
IGZnZXRzKCkgYnkgSmVhbiBTYWNyZW4uDQogICAgLSAqLw0KICAgIC12b2lkIHhmZ2V0cyhjaGFy
ICpzdHIsIGludCBzaXplLCBGSUxFICppbikNCiAgICAtew0KICAgIC0JaWYgKGZnZXRzKHN0ciwg
c2l6ZSwgaW4pID09IE5VTEwpDQogICAgLQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIGluIHJl
YWRpbmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsNCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcvY29uZmRhdGEuYyBiL3N1cHBvcnQva2NvbmZpZy9jb25mZGF0YS5jDQogICAg
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggNGQ4YzlhYy4uMDAwMDAwMA0KICAg
IC0tLSBhL3N1cHBvcnQva2NvbmZpZy9jb25mZGF0YS5jDQogICAgKysrIC9kZXYvbnVsbA0KICAg
IEBAIC0xLDEyNzkgKzAsMCBAQA0KICAgIC0vKg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIwMDIg
Um9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgLSAqIFJlbGVhc2VkIHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLg0KICAgIC0gKi8NCiAgICAtDQogICAg
LSNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KICAgIC0jaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAtI2lu
Y2x1ZGUgPGVycm5vLmg+DQogICAgLSNpbmNsdWRlIDxmY250bC5oPg0KICAgIC0jaW5jbHVkZSA8
c3RkYXJnLmg+DQogICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGli
Lmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAtI2luY2x1ZGUgPHRpbWUuaD4NCiAg
ICAtI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgIC0jaW5jbHVkZSA8bGliZ2VuLmg+DQogICAgLQ0K
ICAgIC0jaW5jbHVkZSAibGtjLmgiDQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX3dhcm5p
bmcoY29uc3QgY2hhciAqZm10LCAuLi4pDQogICAgLQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChw
cmludGYsIDEsIDIpKSk7DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX21lc3NhZ2UoY29u
c3QgY2hhciAqZm10LCAuLi4pDQogICAgLQlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYs
IDEsIDIpKSk7DQogICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgY2hhciAqY29uZl9maWxlbmFtZTsN
CiAgICAtc3RhdGljIGludCBjb25mX2xpbmVubywgY29uZl93YXJuaW5ncywgY29uZl91bnNhdmVk
Ow0KICAgIC0NCiAgICAtY29uc3QgY2hhciBjb25mX2RlZm5hbWVbXSA9ICIuZGVmY29uZmlnIjsN
CiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGNvbmZfd2FybmluZyhjb25zdCBjaGFyICpmbXQsIC4u
LikNCiAgICAtew0KICAgIC0JdmFfbGlzdCBhcDsNCiAgICAtCXZhX3N0YXJ0KGFwLCBmbXQpOw0K
ICAgIC0JZnByaW50ZihzdGRlcnIsICIlczolZDp3YXJuaW5nOiAiLCBjb25mX2ZpbGVuYW1lLCBj
b25mX2xpbmVubyk7DQogICAgLQl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOw0KICAgIC0JZnBy
aW50ZihzdGRlcnIsICJcbiIpOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtCWNvbmZfd2Fybmlu
Z3MrKzsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9kZWZhdWx0X21lc3Nh
Z2VfY2FsbGJhY2soY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQ0KICAgIC17DQogICAgLQlw
cmludGYoIiNcbiMgIik7DQogICAgLQl2cHJpbnRmKGZtdCwgYXApOw0KICAgIC0JcHJpbnRmKCJc
biNcbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCAoKmNvbmZfbWVzc2FnZV9j
YWxsYmFjaykgKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkgPQ0KICAgIC0JY29uZl9kZWZh
dWx0X21lc3NhZ2VfY2FsbGJhY2s7DQogICAgLXZvaWQgY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFj
ayh2b2lkICgqZm4pIChjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApKQ0KICAgIC17DQogICAg
LQljb25mX21lc3NhZ2VfY2FsbGJhY2sgPSBmbjsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGlj
IHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgIC17DQogICAgLQl2
YV9saXN0IGFwOw0KICAgIC0NCiAgICAtCXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0JaWYgKGNv
bmZfbWVzc2FnZV9jYWxsYmFjaykNCiAgICAtCQljb25mX21lc3NhZ2VfY2FsbGJhY2soZm10LCBh
cCk7DQogICAgLX0NCiAgICAtDQogICAgLWNvbnN0IGNoYXIgKmNvbmZfZ2V0X2NvbmZpZ25hbWUo
dm9pZCkNCiAgICAtew0KICAgIC0JY2hhciAqbmFtZSA9IGdldGVudigiQlIyX0NPTkZJRyIpOw0K
ICAgIC0NCiAgICAtCXJldHVybiBuYW1lID8gbmFtZSA6ICIuY29uZmlnIjsNCiAgICAtfQ0KICAg
IC0NCiAgICAtY29uc3QgY2hhciAqY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKHZvaWQpDQogICAg
LXsNCiAgICAtCXJldHVybiBnZXRlbnYoIktDT05GSUdfQVVUT0NPTkZJRyIpOw0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgY2hhciAqY29uZl9leHBhbmRfdmFsdWUoY29uc3QgY2hhciAqaW4p
DQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCWNvbnN0IGNoYXIgKnNy
YzsNCiAgICAtCXN0YXRpYyBjaGFyIHJlc192YWx1ZVtTWU1CT0xfTUFYTEVOR1RIXTsNCiAgICAt
CWNoYXIgKmRzdCwgbmFtZVtTWU1CT0xfTUFYTEVOR1RIXTsNCiAgICAtDQogICAgLQlyZXNfdmFs
dWVbMF0gPSAwOw0KICAgIC0JZHN0ID0gbmFtZTsNCiAgICAtCXdoaWxlICgoc3JjID0gc3RyY2hy
KGluLCAnJCcpKSkgew0KICAgIC0JCXN0cm5jYXQocmVzX3ZhbHVlLCBpbiwgc3JjIC0gaW4pOw0K
ICAgIC0JCXNyYysrOw0KICAgIC0JCWRzdCA9IG5hbWU7DQogICAgLQkJd2hpbGUgKGlzYWxudW0o
KnNyYykgfHwgKnNyYyA9PSAnXycpDQogICAgLQkJCSpkc3QrKyA9ICpzcmMrKzsNCiAgICAtCQkq
ZHN0ID0gMDsNCiAgICAtCQlzeW0gPSBzeW1fbG9va3VwKG5hbWUsIDApOw0KICAgIC0JCXN5bV9j
YWxjX3ZhbHVlKHN5bSk7DQogICAgLQkJc3RyY2F0KHJlc192YWx1ZSwgc3ltX2dldF9zdHJpbmdf
dmFsdWUoc3ltKSk7DQogICAgLQkJaW4gPSBzcmM7DQogICAgLQl9DQogICAgLQlzdHJjYXQocmVz
X3ZhbHVlLCBpbik7DQogICAgLQ0KICAgIC0JcmV0dXJuIHJlc192YWx1ZTsNCiAgICAtfQ0KICAg
IC0NCiAgICAtY2hhciAqY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSh2b2lkKQ0KICAgIC17DQog
ICAgLQlzdHJ1Y3Qgc3RhdCBidWY7DQogICAgLQlzdGF0aWMgY2hhciBmdWxsbmFtZVtQQVRIX01B
WCsxXTsNCiAgICAtCWNoYXIgKmVudiwgKm5hbWU7DQogICAgLQ0KICAgIC0JbmFtZSA9IGNvbmZf
ZXhwYW5kX3ZhbHVlKGNvbmZfZGVmbmFtZSk7DQogICAgLQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7
DQogICAgLQlpZiAoZW52KSB7DQogICAgLQkJc3ByaW50ZihmdWxsbmFtZSwgIiVzLyVzIiwgZW52
LCBuYW1lKTsNCiAgICAtCQlpZiAoIXN0YXQoZnVsbG5hbWUsICZidWYpKQ0KICAgIC0JCQlyZXR1
cm4gZnVsbG5hbWU7DQogICAgLQl9DQogICAgLQlyZXR1cm4gbmFtZTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtc3RhdGljIGludCBjb25mX3NldF9zeW1fdmFsKHN0cnVjdCBzeW1ib2wgKnN5bSwgaW50
IGRlZiwgaW50IGRlZl9mbGFncywgY2hhciAqcCkNCiAgICAtew0KICAgIC0JY2hhciAqcDI7DQog
ICAgLQ0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19UUklTVEFURToN
CiAgICAtCQlpZiAocFswXSA9PSAnbScpIHsNCiAgICAtCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBt
b2Q7DQogICAgLQkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAgIC0JCQlicmVhazsNCiAg
ICAtCQl9DQogICAgLQkJLyogZmFsbCB0aHJvdWdoICovDQogICAgLQljYXNlIFNfQk9PTEVBTjoN
CiAgICAtCQlpZiAocFswXSA9PSAneScpIHsNCiAgICAtCQkJc3ltLT5kZWZbZGVmXS50cmkgPSB5
ZXM7DQogICAgLQkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAgIC0JCQlicmVhazsNCiAg
ICAtCQl9DQogICAgLQkJaWYgKHBbMF0gPT0gJ24nKSB7DQogICAgLQkJCXN5bS0+ZGVmW2RlZl0u
dHJpID0gbm87DQogICAgLQkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAgIC0JCQlicmVh
azsNCiAgICAtCQl9DQogICAgLQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQ0KICAgIC0JCQljb25m
X3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVzIiwNCiAgICAtCQkJCSAg
ICAgcCwgc3ltLT5uYW1lKTsNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtCWNhc2UgU19PVEhFUjoN
CiAgICAtCQlpZiAoKnAgIT0gJyInKSB7DQogICAgLQkJCWZvciAocDIgPSBwOyAqcDIgJiYgIWlz
c3BhY2UoKnAyKTsgcDIrKykNCiAgICAtCQkJCTsNCiAgICAtCQkJc3ltLT50eXBlID0gU19TVFJJ
Tkc7DQogICAgLQkJCWdvdG8gZG9uZTsNCiAgICAtCQl9DQogICAgLQkJLyogZmFsbCB0aHJvdWdo
ICovDQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCWlmICgqcCsrICE9ICciJykNCiAgICAt
CQkJYnJlYWs7DQogICAgLQkJZm9yIChwMiA9IHA7IChwMiA9IHN0cnBicmsocDIsICJcIlxcIikp
OyBwMisrKSB7DQogICAgLQkJCWlmICgqcDIgPT0gJyInKSB7DQogICAgLQkJCQkqcDIgPSAwOw0K
ICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQkJbWVtbW92ZShwMiwgcDIgKyAxLCBz
dHJsZW4ocDIpKTsNCiAgICAtCQl9DQogICAgLQkJaWYgKCFwMikgew0KICAgIC0JCQlpZiAoZGVm
ICE9IFNfREVGX0FVVE8pDQogICAgLQkJCQljb25mX3dhcm5pbmcoImludmFsaWQgc3RyaW5nIGZv
dW5kIik7DQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JCX0NCiAgICAtCQkvKiBmYWxsIHRocm91
Z2ggKi8NCiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQljYXNlIFNfSEVYOg0KICAgIC0JZG9uZToN
CiAgICAtCQlpZiAoc3ltX3N0cmluZ192YWxpZChzeW0sIHApKSB7DQogICAgLQkJCXN5bS0+ZGVm
W2RlZl0udmFsID0gc3RyZHVwKHApOw0KICAgIC0JCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsN
CiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQlpZiAoZGVmICE9IFNfREVGX0FVVE8pDQogICAgLQkJ
CQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVzIiwNCiAgICAt
CQkJCQkgICAgIHAsIHN5bS0+bmFtZSk7DQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JCX0NCiAg
ICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0JcmV0
dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLSNkZWZpbmUgTElORV9HUk9XVEggMTYNCiAgICAt
c3RhdGljIGludCBhZGRfYnl0ZShpbnQgYywgY2hhciAqKmxpbmVwdHIsIHNpemVfdCBzbGVuLCBz
aXplX3QgKm4pDQogICAgLXsNCiAgICAtCWNoYXIgKm5saW5lOw0KICAgIC0Jc2l6ZV90IG5ld19z
aXplID0gc2xlbiArIDE7DQogICAgLQlpZiAobmV3X3NpemUgPiAqbikgew0KICAgIC0JCW5ld19z
aXplICs9IExJTkVfR1JPV1RIIC0gMTsNCiAgICAtCQluZXdfc2l6ZSAqPSAyOw0KICAgIC0JCW5s
aW5lID0gcmVhbGxvYygqbGluZXB0ciwgbmV3X3NpemUpOw0KICAgIC0JCWlmICghbmxpbmUpDQog
ICAgLQkJCXJldHVybiAtMTsNCiAgICAtDQogICAgLQkJKmxpbmVwdHIgPSBubGluZTsNCiAgICAt
CQkqbiA9IG5ld19zaXplOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCSgqbGluZXB0cilbc2xlbl0g
PSBjOw0KICAgIC0NCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
c3NpemVfdCBjb21wYXRfZ2V0bGluZShjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpuLCBGSUxFICpz
dHJlYW0pDQogICAgLXsNCiAgICAtCWNoYXIgKmxpbmUgPSAqbGluZXB0cjsNCiAgICAtCXNpemVf
dCBzbGVuID0gMDsNCiAgICAtDQogICAgLQlmb3IgKDs7KSB7DQogICAgLQkJaW50IGMgPSBnZXRj
KHN0cmVhbSk7DQogICAgLQ0KICAgIC0JCXN3aXRjaCAoYykgew0KICAgIC0JCWNhc2UgJ1xuJzoN
CiAgICAtCQkJaWYgKGFkZF9ieXRlKGMsICZsaW5lLCBzbGVuLCBuKSA8IDApDQogICAgLQkJCQln
b3RvIGVfb3V0Ow0KICAgIC0JCQlzbGVuKys7DQogICAgLQkJCS8qIGZhbGwgdGhyb3VnaCAqLw0K
ICAgIC0JCWNhc2UgRU9GOg0KICAgIC0JCQlpZiAoYWRkX2J5dGUoJ1wwJywgJmxpbmUsIHNsZW4s
IG4pIDwgMCkNCiAgICAtCQkJCWdvdG8gZV9vdXQ7DQogICAgLQkJCSpsaW5lcHRyID0gbGluZTsN
CiAgICAtCQkJaWYgKHNsZW4gPT0gMCkNCiAgICAtCQkJCXJldHVybiAtMTsNCiAgICAtCQkJcmV0
dXJuIHNsZW47DQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJaWYgKGFkZF9ieXRlKGMsICZsaW5l
LCBzbGVuLCBuKSA8IDApDQogICAgLQkJCQlnb3RvIGVfb3V0Ow0KICAgIC0JCQlzbGVuKys7DQog
ICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtZV9vdXQ6DQogICAgLQlsaW5lW3NsZW4tMV0g
PSAnXDAnOw0KICAgIC0JKmxpbmVwdHIgPSBsaW5lOw0KICAgIC0JcmV0dXJuIC0xOw0KICAgIC19
DQogICAgLQ0KICAgIC1pbnQgY29uZl9yZWFkX3NpbXBsZShjb25zdCBjaGFyICpuYW1lLCBpbnQg
ZGVmKQ0KICAgIC17DQogICAgLQlGSUxFICppbiA9IE5VTEw7DQogICAgLQljaGFyICAgKmxpbmUg
PSBOVUxMOw0KICAgIC0Jc2l6ZV90ICBsaW5lX2FzaXplID0gMDsNCiAgICAtCWNoYXIgKnAsICpw
MjsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCWludCBpLCBkZWZfZmxhZ3M7DQog
ICAgLQ0KICAgIC0JaWYgKG5hbWUpIHsNCiAgICAtCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOw0K
ICAgIC0JfSBlbHNlIHsNCiAgICAtCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQ0KICAg
IC0JCW5hbWUgPSBjb25mX2dldF9jb25maWduYW1lKCk7DQogICAgLQkJaW4gPSB6Y29uZl9mb3Bl
bihuYW1lKTsNCiAgICAtCQlpZiAoaW4pDQogICAgLQkJCWdvdG8gbG9hZDsNCiAgICAtCQlzeW1f
YWRkX2NoYW5nZV9jb3VudCgxKTsNCiAgICAtCQlpZiAoIXN5bV9kZWZjb25maWdfbGlzdCkgew0K
ICAgIC0JCQlpZiAobW9kdWxlc19zeW0pDQogICAgLQkJCQlzeW1fY2FsY192YWx1ZShtb2R1bGVz
X3N5bSk7DQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJZm9yX2Fs
bF9kZWZhdWx0cyhzeW1fZGVmY29uZmlnX2xpc3QsIHByb3ApIHsNCiAgICAtCQkJaWYgKGV4cHJf
Y2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpID09IG5vIHx8DQogICAgLQkJCSAgICBwcm9w
LT5leHByLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCW5h
bWUgPSBjb25mX2V4cGFuZF92YWx1ZShwcm9wLT5leHByLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAg
LQkJCWluID0gemNvbmZfZm9wZW4obmFtZSk7DQogICAgLQkJCWlmIChpbikgew0KICAgIC0JCQkJ
Y29uZl9tZXNzYWdlKF8oInVzaW5nIGRlZmF1bHRzIGZvdW5kIGluICVzIiksDQogICAgLQkJCQkJ
IG5hbWUpOw0KICAgIC0JCQkJZ290byBsb2FkOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0J
fQ0KICAgIC0JaWYgKCFpbikNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtDQogICAgLWxvYWQ6DQog
ICAgLQljb25mX2ZpbGVuYW1lID0gbmFtZTsNCiAgICAtCWNvbmZfbGluZW5vID0gMDsNCiAgICAt
CWNvbmZfd2FybmluZ3MgPSAwOw0KICAgIC0JY29uZl91bnNhdmVkID0gMDsNCiAgICAtDQogICAg
LQlkZWZfZmxhZ3MgPSBTWU1CT0xfREVGIDw8IGRlZjsNCiAgICAtCWZvcl9hbGxfc3ltYm9scyhp
LCBzeW0pIHsNCiAgICAtCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9DSEFOR0VEOw0KICAgIC0JCXN5
bS0+ZmxhZ3MgJj0gfihkZWZfZmxhZ3N8U1lNQk9MX1ZBTElEKTsNCiAgICAtCQlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pKQ0KICAgIC0JCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsNCiAgICAtCQlz
d2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0JCWNhc2UgU19JTlQ6DQogICAgLQkJY2FzZSBTX0hF
WDoNCiAgICAtCQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCQlpZiAoc3ltLT5kZWZbZGVmXS52YWwp
DQogICAgLQkJCQlmcmVlKHN5bS0+ZGVmW2RlZl0udmFsKTsNCiAgICAtCQkJLyogZmFsbCB0aHJv
dWdoICovDQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJc3ltLT5kZWZbZGVmXS52YWwgPSBOVUxM
Ow0KICAgIC0JCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOw0KICAgIC0JCX0NCiAgICAtCX0NCiAg
ICAtDQogICAgLQl3aGlsZSAoY29tcGF0X2dldGxpbmUoJmxpbmUsICZsaW5lX2FzaXplLCBpbikg
IT0gLTEpIHsNCiAgICAtCQljb25mX2xpbmVubysrOw0KICAgIC0JCXN5bSA9IE5VTEw7DQogICAg
LQkJaWYgKGxpbmVbMF0gPT0gJyMnKSB7DQogICAgLQkJCWlmIChtZW1jbXAobGluZSArIDIsIENP
TkZJR18sIHN0cmxlbihDT05GSUdfKSkpDQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJcCA9
IHN0cmNocihsaW5lICsgMiArIHN0cmxlbihDT05GSUdfKSwgJyAnKTsNCiAgICAtCQkJaWYgKCFw
KQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCSpwKysgPSAwOw0KICAgIC0JCQlpZiAoc3Ry
bmNtcChwLCAiaXMgbm90IHNldCIsIDEwKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlp
ZiAoZGVmID09IFNfREVGX1VTRVIpIHsNCiAgICAtCQkJCXN5bSA9IHN5bV9maW5kKGxpbmUgKyAy
ICsgc3RybGVuKENPTkZJR18pKTsNCiAgICAtCQkJCWlmICghc3ltKSB7DQogICAgLQkJCQkJc3lt
X2FkZF9jaGFuZ2VfY291bnQoMSk7DQogICAgLQkJCQkJZ290byBzZXRzeW07DQogICAgLQkJCQl9
DQogICAgLQkJCX0gZWxzZSB7DQogICAgLQkJCQlzeW0gPSBzeW1fbG9va3VwKGxpbmUgKyAyICsg
c3RybGVuKENPTkZJR18pLCAwKTsNCiAgICAtCQkJCWlmIChzeW0tPnR5cGUgPT0gU19VTktOT1dO
KQ0KICAgIC0JCQkJCXN5bS0+dHlwZSA9IFNfQk9PTEVBTjsNCiAgICAtCQkJfQ0KICAgIC0JCQlp
ZiAoc3ltLT5mbGFncyAmIGRlZl9mbGFncykgew0KICAgIC0JCQkJY29uZl93YXJuaW5nKCJvdmVy
cmlkZTogcmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsNCiAgICAtCQkJfQ0K
ICAgIC0JCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0JCQljYXNlIFNfQk9PTEVBTjoNCiAg
ICAtCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsN
CiAgICAtCQkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAgIC0JCQkJYnJlYWs7DQogICAg
LQkJCWRlZmF1bHQ6DQogICAgLQkJCQk7DQogICAgLQkJCX0NCiAgICAtCQl9IGVsc2UgaWYgKG1l
bWNtcChsaW5lLCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsNCiAgICAtCQkJcCA9
IHN0cmNocihsaW5lICsgc3RybGVuKENPTkZJR18pLCAnPScpOw0KICAgIC0JCQlpZiAoIXApDQog
ICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJKnArKyA9IDA7DQogICAgLQkJCXAyID0gc3RyY2hy
KHAsICdcbicpOw0KICAgIC0JCQlpZiAocDIpIHsNCiAgICAtCQkJCSpwMi0tID0gMDsNCiAgICAt
CQkJCWlmICgqcDIgPT0gJ1xyJykNCiAgICAtCQkJCQkqcDIgPSAwOw0KICAgIC0JCQl9DQogICAg
LQkJCWlmIChkZWYgPT0gU19ERUZfVVNFUikgew0KICAgIC0JCQkJc3ltID0gc3ltX2ZpbmQobGlu
ZSArIHN0cmxlbihDT05GSUdfKSk7DQogICAgLQkJCQlpZiAoIXN5bSkgew0KICAgIC0JCQkJCXN5
bV9hZGRfY2hhbmdlX2NvdW50KDEpOw0KICAgIC0JCQkJCWdvdG8gc2V0c3ltOw0KICAgIC0JCQkJ
fQ0KICAgIC0JCQl9IGVsc2Ugew0KICAgIC0JCQkJc3ltID0gc3ltX2xvb2t1cChsaW5lICsgc3Ry
bGVuKENPTkZJR18pLCAwKTsNCiAgICAtCQkJCWlmIChzeW0tPnR5cGUgPT0gU19VTktOT1dOKQ0K
ICAgIC0JCQkJCXN5bS0+dHlwZSA9IFNfT1RIRVI7DQogICAgLQkJCX0NCiAgICAtCQkJaWYgKHN5
bS0+ZmxhZ3MgJiBkZWZfZmxhZ3MpIHsNCiAgICAtCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6
IHJlYXNzaWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7DQogICAgLQkJCX0NCiAgICAt
CQkJaWYgKGNvbmZfc2V0X3N5bV92YWwoc3ltLCBkZWYsIGRlZl9mbGFncywgcCkpDQogICAgLQkJ
CQljb250aW51ZTsNCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQlpZiAobGluZVswXSAhPSAnXHIn
ICYmIGxpbmVbMF0gIT0gJ1xuJykNCiAgICAtCQkJCWNvbmZfd2FybmluZygidW5leHBlY3RlZCBk
YXRhIik7DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCX0NCiAgICAtc2V0c3ltOg0KICAgIC0J
CWlmIChzeW0gJiYgc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7DQogICAgLQkJCXN0cnVjdCBz
eW1ib2wgKmNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7DQog
ICAgLQkJCXN3aXRjaCAoc3ltLT5kZWZbZGVmXS50cmkpIHsNCiAgICAtCQkJY2FzZSBubzoNCiAg
ICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIG1vZDoNCiAgICAtCQkJCWlmIChjcy0+ZGVmW2Rl
Zl0udHJpID09IHllcykgew0KICAgIC0JCQkJCWNvbmZfd2FybmluZygiJXMgY3JlYXRlcyBpbmNv
bnNpc3RlbnQgY2hvaWNlIHN0YXRlIiwgc3ltLT5uYW1lKTsNCiAgICAtCQkJCQljcy0+ZmxhZ3Mg
Jj0gfmRlZl9mbGFnczsNCiAgICAtCQkJCX0NCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNl
IHllczoNCiAgICAtCQkJCWlmIChjcy0+ZGVmW2RlZl0udHJpICE9IG5vKQ0KICAgIC0JCQkJCWNv
bmZfd2FybmluZygib3ZlcnJpZGU6ICVzIGNoYW5nZXMgY2hvaWNlIHN0YXRlIiwgc3ltLT5uYW1l
KTsNCiAgICAtCQkJCWNzLT5kZWZbZGVmXS52YWwgPSBzeW07DQogICAgLQkJCQlicmVhazsNCiAg
ICAtCQkJfQ0KICAgIC0JCQljcy0+ZGVmW2RlZl0udHJpID0gRVhQUl9PUihjcy0+ZGVmW2RlZl0u
dHJpLCBzeW0tPmRlZltkZWZdLnRyaSk7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JZnJlZShs
aW5lKTsNCiAgICAtCWZjbG9zZShpbik7DQogICAgLQ0KICAgIC0JaWYgKG1vZHVsZXNfc3ltKQ0K
ICAgIC0JCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsNCiAgICAtCXJldHVybiAwOw0KICAg
IC19DQogICAgLQ0KICAgIC1pbnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgLXsN
CiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCWludCBpOw0KICAgIC0NCiAgICAtCXN5
bV9zZXRfY2hhbmdlX2NvdW50KDApOw0KICAgIC0NCiAgICAtCWlmIChjb25mX3JlYWRfc2ltcGxl
KG5hbWUsIFNfREVGX1VTRVIpKQ0KICAgIC0JCXJldHVybiAxOw0KICAgIC0NCiAgICAtCWZvcl9h
bGxfc3ltYm9scyhpLCBzeW0pIHsNCiAgICAtCQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAgIC0J
CWlmIChzeW1faXNfY2hvaWNlKHN5bSkgfHwgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQVVUTykpDQog
ICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgJiYgKHN5bS0+
ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKSB7DQogICAgLQkJCS8qIGNoZWNrIHRoYXQgY2FsY3VsYXRl
ZCB2YWx1ZSBhZ3JlZXMgd2l0aCBzYXZlZCB2YWx1ZSAqLw0KICAgIC0JCQlzd2l0Y2ggKHN5bS0+
dHlwZSkgew0KICAgIC0JCQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCQkJY2FzZSBTX1RSSVNUQVRF
Og0KICAgIC0JCQkJaWYgKHN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSAhPSBzeW1fZ2V0X3RyaXN0
YXRlX3ZhbHVlKHN5bSkpDQogICAgLQkJCQkJYnJlYWs7DQogICAgLQkJCQlpZiAoIXN5bV9pc19j
aG9pY2Uoc3ltKSkNCiAgICAtCQkJCQljb250aW51ZTsNCiAgICAtCQkJCS8qIGZhbGwgdGhyb3Vn
aCAqLw0KICAgIC0JCQlkZWZhdWx0Og0KICAgIC0JCQkJaWYgKCFzdHJjbXAoc3ltLT5jdXJyLnZh
bCwgc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsKSkNCiAgICAtCQkJCQljb250aW51ZTsNCiAgICAt
CQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJfSBlbHNlIGlmICghc3ltX2hhc192YWx1ZShz
eW0pICYmICEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkpDQogICAgLQkJCS8qIG5vIHByZXZp
b3VzIHZhbHVlIGFuZCBub3Qgc2F2ZWQgKi8NCiAgICAtCQkJY29udGludWU7DQogICAgLQkJY29u
Zl91bnNhdmVkKys7DQogICAgLQkJLyogbWF5YmUgcHJpbnQgdmFsdWUgaW4gdmVyYm9zZSBtb2Rl
Li4uICovDQogICAgLQl9DQogICAgLQ0KICAgIC0JZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0K
ICAgIC0JCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUoc3lt
KSkgew0KICAgIC0JCQkvKiBSZXNldCB2YWx1ZXMgb2YgZ2VuZXJhdGVzIHZhbHVlcywgc28gdGhl
eSdsbCBhcHBlYXINCiAgICAtCQkJICogYXMgbmV3LCBpZiB0aGV5IHNob3VsZCBiZWNvbWUgdmlz
aWJsZSwgYnV0IHRoYXQNCiAgICAtCQkJICogZG9lc24ndCBxdWl0ZSB3b3JrIGlmIHRoZSBLY29u
ZmlnIGFuZCB0aGUgc2F2ZWQNCiAgICAtCQkJICogY29uZmlndXJhdGlvbiBkaXNhZ3JlZS4NCiAg
ICAtCQkJICovDQogICAgLQkJCWlmIChzeW0tPnZpc2libGUgPT0gbm8gJiYgIWNvbmZfdW5zYXZl
ZCkNCiAgICAtCQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ERUZfVVNFUjsNCiAgICAtCQkJc3dp
dGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCQkJY2FzZSBTX1NUUklORzoNCiAgICAtCQkJY2FzZSBT
X0lOVDoNCiAgICAtCQkJY2FzZSBTX0hFWDoNCiAgICAtCQkJCS8qIFJlc2V0IGEgc3RyaW5nIHZh
bHVlIGlmIGl0J3Mgb3V0IG9mIHJhbmdlICovDQogICAgLQkJCQlpZiAoc3ltX3N0cmluZ193aXRo
aW5fcmFuZ2Uoc3ltLCBzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwpKQ0KICAgIC0JCQkJCWJyZWFr
Ow0KICAgIC0JCQkJc3ltLT5mbGFncyAmPSB+KFNZTUJPTF9WQUxJRHxTWU1CT0xfREVGX1VTRVIp
Ow0KICAgIC0JCQkJY29uZl91bnNhdmVkKys7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJZGVm
YXVsdDoNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JfQ0KICAg
IC0NCiAgICAtCXN5bV9hZGRfY2hhbmdlX2NvdW50KGNvbmZfd2FybmluZ3MgfHwgY29uZl91bnNh
dmVkKTsNCiAgICAtDQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAg
ICAtICogS2NvbmZpZyBjb25maWd1cmF0aW9uIHByaW50ZXINCiAgICAtICoNCiAgICAtICogVGhp
cyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSByZXN1bHRpbmcgY29uZmlndXJh
dGlvbiBhZnRlcg0KICAgIC0gKiBrY29uZmlnIGludm9jYXRpb24gYW5kIGBkZWZjb25maWcnIGZp
bGVzLiBVbnNldCBzeW1ib2wgbWlnaHQgYmUgb21pdHRlZCBieQ0KICAgIC0gKiBwYXNzaW5nIGEg
bm9uLU5VTEwgYXJndW1lbnQgdG8gdGhlIHByaW50ZXIuDQogICAgLSAqDQogICAgLSAqLw0KICAg
IC1zdGF0aWMgdm9pZA0KICAgIC1rY29uZmlnX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0
IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQ0KICAgIC17DQogICAg
LQ0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAg
IC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCWlmICgqdmFsdWUgPT0gJ24nKSB7DQogICAgLQkJ
CWJvb2wgc2tpcF91bnNldCA9IChhcmcgIT0gTlVMTCk7DQogICAgLQ0KICAgIC0JCQlpZiAoIXNr
aXBfdW5zZXQpDQogICAgLQkJCQlmcHJpbnRmKGZwLCAiIyAlcyVzIGlzIG5vdCBzZXRcbiIsDQog
ICAgLQkJCQkgICAgQ09ORklHXywgc3ltLT5uYW1lKTsNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0J
CX0NCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJYnJlYWs7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JZnByaW50ZihmcCwgIiVzJXM9JXNcbiIsIENPTkZJR18sIHN5bS0+bmFt
ZSwgdmFsdWUpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZA0KICAgIC1rY29uZmln
X3ByaW50X2NvbW1lbnQoRklMRSAqZnAsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpDQog
ICAgLXsNCiAgICAtCWNvbnN0IGNoYXIgKnAgPSB2YWx1ZTsNCiAgICAtCXNpemVfdCBsOw0KICAg
IC0NCiAgICAtCWZvciAoOzspIHsNCiAgICAtCQlsID0gc3RyY3NwbihwLCAiXG4iKTsNCiAgICAt
CQlmcHJpbnRmKGZwLCAiIyIpOw0KICAgIC0JCWlmIChsKSB7DQogICAgLQkJCWZwcmludGYoZnAs
ICIgIik7DQogICAgLQkJCXhmd3JpdGUocCwgbCwgMSwgZnApOw0KICAgIC0JCQlwICs9IGw7DQog
ICAgLQkJfQ0KICAgIC0JCWZwcmludGYoZnAsICJcbiIpOw0KICAgIC0JCWlmICgqcCsrID09ICdc
MCcpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
c3RydWN0IGNvbmZfcHJpbnRlciBrY29uZmlnX3ByaW50ZXJfY2IgPQ0KICAgIC17DQogICAgLQku
cHJpbnRfc3ltYm9sID0ga2NvbmZpZ19wcmludF9zeW1ib2wsDQogICAgLQkucHJpbnRfY29tbWVu
dCA9IGtjb25maWdfcHJpbnRfY29tbWVudCwNCiAgICAtfTsNCiAgICAtDQogICAgLS8qDQogICAg
LSAqIEhlYWRlciBwcmludGVyDQogICAgLSAqDQogICAgLSAqIFRoaXMgcHJpbnRlciBpcyB1c2Vk
IHdoZW4gZ2VuZXJhdGluZyB0aGUgYGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgnIGZpbGUu
DQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZA0KICAgIC1oZWFkZXJfcHJpbnRfc3ltYm9sKEZJ
TEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcp
DQogICAgLXsNCiAgICAtDQogICAgLQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0JY2FzZSBT
X0JPT0xFQU46DQogICAgLQljYXNlIFNfVFJJU1RBVEU6IHsNCiAgICAtCQljb25zdCBjaGFyICpz
dWZmaXggPSAiIjsNCiAgICAtDQogICAgLQkJc3dpdGNoICgqdmFsdWUpIHsNCiAgICAtCQljYXNl
ICduJzoNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnbSc6DQogICAgLQkJCXN1ZmZpeCA9
ICJfTU9EVUxFIjsNCiAgICAtCQkJLyogZmFsbCB0aHJvdWdoICovDQogICAgLQkJZGVmYXVsdDoN
CiAgICAtCQkJZnByaW50ZihmcCwgIiNkZWZpbmUgJXMlcyVzIDFcbiIsDQogICAgLQkJCSAgICBD
T05GSUdfLCBzeW0tPm5hbWUsIHN1ZmZpeCk7DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAg
IC0JfQ0KICAgIC0JY2FzZSBTX0hFWDogew0KICAgIC0JCWNvbnN0IGNoYXIgKnByZWZpeCA9ICIi
Ow0KICAgIC0NCiAgICAtCQlpZiAodmFsdWVbMF0gIT0gJzAnIHx8ICh2YWx1ZVsxXSAhPSAneCcg
JiYgdmFsdWVbMV0gIT0gJ1gnKSkNCiAgICAtCQkJcHJlZml4ID0gIjB4IjsNCiAgICAtCQlmcHJp
bnRmKGZwLCAiI2RlZmluZSAlcyVzICVzJXNcbiIsDQogICAgLQkJICAgIENPTkZJR18sIHN5bS0+
bmFtZSwgcHJlZml4LCB2YWx1ZSk7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQljYXNl
IFNfU1RSSU5HOg0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCQlmcHJpbnRmKGZwLCAiI2RlZmlu
ZSAlcyVzICVzXG4iLA0KICAgIC0JCSAgICBDT05GSUdfLCBzeW0tPm5hbWUsIHZhbHVlKTsNCiAg
ICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAg
LQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZA0KICAgIC1oZWFkZXJfcHJpbnRfY29t
bWVudChGSUxFICpmcCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykNCiAgICAtew0KICAg
IC0JY29uc3QgY2hhciAqcCA9IHZhbHVlOw0KICAgIC0Jc2l6ZV90IGw7DQogICAgLQ0KICAgIC0J
ZnByaW50ZihmcCwgIi8qXG4iKTsNCiAgICAtCWZvciAoOzspIHsNCiAgICAtCQlsID0gc3RyY3Nw
bihwLCAiXG4iKTsNCiAgICAtCQlmcHJpbnRmKGZwLCAiICoiKTsNCiAgICAtCQlpZiAobCkgew0K
ICAgIC0JCQlmcHJpbnRmKGZwLCAiICIpOw0KICAgIC0JCQl4ZndyaXRlKHAsIGwsIDEsIGZwKTsN
CiAgICAtCQkJcCArPSBsOw0KICAgIC0JCX0NCiAgICAtCQlmcHJpbnRmKGZwLCAiXG4iKTsNCiAg
ICAtCQlpZiAoKnArKyA9PSAnXDAnKQ0KICAgIC0JCQlicmVhazsNCiAgICAtCX0NCiAgICAtCWZw
cmludGYoZnAsICIgKi9cbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IGNv
bmZfcHJpbnRlciBoZWFkZXJfcHJpbnRlcl9jYiA9DQogICAgLXsNCiAgICAtCS5wcmludF9zeW1i
b2wgPSBoZWFkZXJfcHJpbnRfc3ltYm9sLA0KICAgIC0JLnByaW50X2NvbW1lbnQgPSBoZWFkZXJf
cHJpbnRfY29tbWVudCwNCiAgICAtfTsNCiAgICAtDQogICAgLS8qDQogICAgLSAqIFRyaXN0YXRl
IHByaW50ZXINCiAgICAtICoNCiAgICAtICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5l
cmF0aW5nIHRoZSBgaW5jbHVkZS9jb25maWcvdHJpc3RhdGUuY29uZicgZmlsZS4NCiAgICAtICov
DQogICAgLXN0YXRpYyB2b2lkDQogICAgLXRyaXN0YXRlX3ByaW50X3N5bWJvbChGSUxFICpmcCwg
c3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQ0KICAgIC17
DQogICAgLQ0KICAgIC0JaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFICYmICp2YWx1ZSAhPSAn
bicpDQogICAgLQkJZnByaW50ZihmcCwgIiVzJXM9JWNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSwg
KGNoYXIpdG91cHBlcigqdmFsdWUpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHN0cnVj
dCBjb25mX3ByaW50ZXIgdHJpc3RhdGVfcHJpbnRlcl9jYiA9DQogICAgLXsNCiAgICAtCS5wcmlu
dF9zeW1ib2wgPSB0cmlzdGF0ZV9wcmludF9zeW1ib2wsDQogICAgLQkucHJpbnRfY29tbWVudCA9
IGtjb25maWdfcHJpbnRfY29tbWVudCwNCiAgICAtfTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lk
IGNvbmZfd3JpdGVfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sDQogICAgLQkJ
CSAgICAgIHN0cnVjdCBjb25mX3ByaW50ZXIgKnByaW50ZXIsIHZvaWQgKnByaW50ZXJfYXJnKQ0K
ICAgIC17DQogICAgLQljb25zdCBjaGFyICpzdHI7DQogICAgLQ0KICAgIC0Jc3dpdGNoIChzeW0t
PnR5cGUpIHsNCiAgICAtCWNhc2UgU19PVEhFUjoNCiAgICAtCWNhc2UgU19VTktOT1dOOg0KICAg
IC0JCWJyZWFrOw0KICAgIC0JY2FzZSBTX1NUUklORzoNCiAgICAtCQlzdHIgPSBzeW1fZ2V0X3N0
cmluZ192YWx1ZShzeW0pOw0KICAgIC0JCXN0ciA9IHN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKHN0
cik7DQogICAgLQkJcHJpbnRlci0+cHJpbnRfc3ltYm9sKGZwLCBzeW0sIHN0ciwgcHJpbnRlcl9h
cmcpOw0KICAgIC0JCWZyZWUoKHZvaWQgKilzdHIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVm
YXVsdDoNCiAgICAtCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0KICAgIC0JCXBy
aW50ZXItPnByaW50X3N5bWJvbChmcCwgc3ltLCBzdHIsIHByaW50ZXJfYXJnKTsNCiAgICAtCX0N
CiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQNCiAgICAtY29uZl93cml0ZV9oZWFkaW5n
KEZJTEUgKmZwLCBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpwcmludGVyX2Fy
ZykNCiAgICAtew0KICAgIC0JY2hhciBidWZbMjU2XTsNCiAgICAtDQogICAgLQlzbnByaW50Zihi
dWYsIHNpemVvZihidWYpLA0KICAgIC0JICAgICJcbiINCiAgICAtCSAgICAiQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgZmlsZTsgRE8gTk9UIEVESVQuXG4iDQogICAgLQkgICAgIiVzXG4iLA0KICAg
IC0JICAgIHJvb3RtZW51LnByb21wdC0+dGV4dCk7DQogICAgLQ0KICAgIC0JcHJpbnRlci0+cHJp
bnRfY29tbWVudChmcCwgYnVmLCBwcmludGVyX2FyZyk7DQogICAgLX0NCiAgICAtDQogICAgLS8q
DQogICAgLSAqIFdyaXRlIG91dCBhIG1pbmltYWwgY29uZmlnLg0KICAgIC0gKiBBbGwgdmFsdWVz
IHRoYXQgaGFzIGRlZmF1bHQgdmFsdWVzIGFyZSBza2lwcGVkIGFzIHRoaXMgaXMgcmVkdW5kYW50
Lg0KICAgIC0gKi8NCiAgICAtaW50IGNvbmZfd3JpdGVfZGVmY29uZmlnKGNvbnN0IGNoYXIgKmZp
bGVuYW1lKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3Qg
bWVudSAqbWVudTsNCiAgICAtCUZJTEUgKm91dDsNCiAgICAtDQogICAgLQlvdXQgPSBmb3Blbihm
aWxlbmFtZSwgInciKTsNCiAgICAtCWlmICghb3V0KQ0KICAgIC0JCXJldHVybiAxOw0KICAgIC0N
CiAgICAtCXN5bV9jbGVhcl9hbGxfdmFsaWQoKTsNCiAgICAtDQogICAgLQkvKiBUcmF2ZXJzZSBh
bGwgbWVudXMgdG8gZmluZCBhbGwgcmVsZXZhbnQgc3ltYm9scyAqLw0KICAgIC0JbWVudSA9IHJv
b3RtZW51Lmxpc3Q7DQogICAgLQ0KICAgIC0Jd2hpbGUgKG1lbnUgIT0gTlVMTCkNCiAgICAtCXsN
CiAgICAtCQlzeW0gPSBtZW51LT5zeW07DQogICAgLQkJaWYgKHN5bSA9PSBOVUxMKSB7DQogICAg
LQkJCWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQ0KICAgIC0JCQkJZ290byBuZXh0X21lbnU7
DQogICAgLQkJfSBlbHNlIGlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgLQkJCXN5bV9j
YWxjX3ZhbHVlKHN5bSk7DQogICAgLQkJCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUp
KQ0KICAgIC0JCQkJZ290byBuZXh0X21lbnU7DQogICAgLQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJP
TF9XUklURTsNCiAgICAtCQkJLyogSWYgd2UgY2Fubm90IGNoYW5nZSB0aGUgc3ltYm9sIC0gc2tp
cCAqLw0KICAgIC0JCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkNCiAgICAtCQkJCWdvdG8g
bmV4dF9tZW51Ow0KICAgIC0JCQkvKiBJZiBzeW1ib2wgZXF1YWxzIHRvIGRlZmF1bHQgdmFsdWUg
LSBza2lwICovDQogICAgLQkJCWlmIChzdHJjbXAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwg
c3ltX2dldF9zdHJpbmdfZGVmYXVsdChzeW0pKSA9PSAwKQ0KICAgIC0JCQkJZ290byBuZXh0X21l
bnU7DQogICAgLQ0KICAgIC0JCQkvKg0KICAgIC0JCQkgKiBJZiBzeW1ib2wgaXMgYSBjaG9pY2Ug
dmFsdWUgYW5kIGVxdWFscyB0byB0aGUNCiAgICAtCQkJICogZGVmYXVsdCBmb3IgYSBjaG9pY2Ug
LSBza2lwLg0KICAgIC0JCQkgKiBCdXQgb25seSBpZiB2YWx1ZSBpcyBib29sIGFuZCBlcXVhbCB0
byAieSIgYW5kDQogICAgLQkJCSAqIGNob2ljZSBpcyBub3QgIm9wdGlvbmFsIi4NCiAgICAtCQkJ
ICogKElmIGNob2ljZSBpcyAib3B0aW9uYWwiIHRoZW4gYWxsIHZhbHVlcyBjYW4gYmUgIm4iKQ0K
ICAgIC0JCQkgKi8NCiAgICAtCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgew0KICAg
IC0JCQkJc3RydWN0IHN5bWJvbCAqY3M7DQogICAgLQkJCQlzdHJ1Y3Qgc3ltYm9sICpkczsNCiAg
ICAtDQogICAgLQkJCQljcyA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5
bSkpOw0KICAgIC0JCQkJZHMgPSBzeW1fY2hvaWNlX2RlZmF1bHQoY3MpOw0KICAgIC0JCQkJaWYg
KCFzeW1faXNfb3B0aW9uYWwoY3MpICYmIHN5bSA9PSBkcykgew0KICAgIC0JCQkJCWlmICgoc3lt
LT50eXBlID09IFNfQk9PTEVBTikgJiYNCiAgICAtCQkJCQkgICAgc3ltX2dldF90cmlzdGF0ZV92
YWx1ZShzeW0pID09IHllcykNCiAgICAtCQkJCQkJZ290byBuZXh0X21lbnU7DQogICAgLQkJCQl9
DQogICAgLQkJCX0NCiAgICAtCQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29uZmln
X3ByaW50ZXJfY2IsIE5VTEwpOw0KICAgIC0JCX0NCiAgICAtbmV4dF9tZW51Og0KICAgIC0JCWlm
IChtZW51LT5saXN0ICE9IE5VTEwpIHsNCiAgICAtCQkJbWVudSA9IG1lbnUtPmxpc3Q7DQogICAg
LQkJfQ0KICAgIC0JCWVsc2UgaWYgKG1lbnUtPm5leHQgIT0gTlVMTCkgew0KICAgIC0JCQltZW51
ID0gbWVudS0+bmV4dDsNCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQl3aGlsZSAoKG1lbnUgPSBt
ZW51LT5wYXJlbnQpKSB7DQogICAgLQkJCQlpZiAobWVudS0+bmV4dCAhPSBOVUxMKSB7DQogICAg
LQkJCQkJbWVudSA9IG1lbnUtPm5leHQ7DQogICAgLQkJCQkJYnJlYWs7DQogICAgLQkJCQl9DQog
ICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlmY2xvc2Uob3V0KTsNCiAgICAtCXJl
dHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgY29uZl93cml0ZShjb25zdCBjaGFyICpu
YW1lKQ0KICAgIC17DQogICAgLQlGSUxFICpvdXQ7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07
DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtCWNvbnN0IGNoYXIgKmJhc2VuYW1lOw0K
ICAgIC0JY29uc3QgY2hhciAqc3RyOw0KICAgIC0JY2hhciBkaXJuYW1lW1BBVEhfTUFYKzFdLCB0
bXBuYW1lW1BBVEhfTUFYKzFdLCBuZXduYW1lW1BBVEhfTUFYKzFdOw0KICAgIC0JY2hhciAqZW52
Ow0KICAgIC0NCiAgICAtCWlmICghbmFtZSkNCiAgICAtCQluYW1lID0gY29uZl9nZXRfY29uZmln
bmFtZSgpOw0KICAgIC0NCiAgICAtCWRpcm5hbWVbMF0gPSAwOw0KICAgIC0JaWYgKG5hbWUgJiYg
bmFtZVswXSkgew0KICAgIC0JCXN0cnVjdCBzdGF0IHN0Ow0KICAgIC0JCWNoYXIgKnNsYXNoOw0K
ICAgIC0NCiAgICAtCQlpZiAoIXN0YXQobmFtZSwgJnN0KSAmJiBTX0lTRElSKHN0LnN0X21vZGUp
KSB7DQogICAgLQkJCXN0cmNweShkaXJuYW1lLCBuYW1lKTsNCiAgICAtCQkJc3RyY2F0KGRpcm5h
bWUsICIvIik7DQogICAgLQkJCWJhc2VuYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgpOw0KICAg
IC0JCX0gZWxzZSBpZiAoKHNsYXNoID0gc3RycmNocihuYW1lLCAnLycpKSkgew0KICAgIC0JCQlp
bnQgc2l6ZSA9IHNsYXNoIC0gbmFtZSArIDE7DQogICAgLQkJCW1lbWNweShkaXJuYW1lLCBuYW1l
LCBzaXplKTsNCiAgICAtCQkJZGlybmFtZVtzaXplXSA9IDA7DQogICAgLQkJCWlmIChzbGFzaFsx
XSkNCiAgICAtCQkJCWJhc2VuYW1lID0gc2xhc2ggKyAxOw0KICAgIC0JCQllbHNlDQogICAgLQkJ
CQliYXNlbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsNCiAgICAtCQl9IGVsc2UNCiAgICAt
CQkJYmFzZW5hbWUgPSBuYW1lOw0KICAgIC0JfSBlbHNlDQogICAgLQkJYmFzZW5hbWUgPSBjb25m
X2dldF9jb25maWduYW1lKCk7DQogICAgLQ0KICAgIC0Jc3ByaW50ZihuZXduYW1lLCAiJXMlcyIs
IGRpcm5hbWUsIGJhc2VuYW1lKTsNCiAgICAtCWVudiA9IGdldGVudigiS0NPTkZJR19PVkVSV1JJ
VEVDT05GSUciKTsNCiAgICAtCWlmICghZW52IHx8ICEqZW52KSB7DQogICAgLQkJc3ByaW50Zih0
bXBuYW1lLCAiJXMudG1wY29uZmlnLiVkIiwgZGlybmFtZSwgKGludClnZXRwaWQoKSk7DQogICAg
LQkJb3V0ID0gZm9wZW4odG1wbmFtZSwgInciKTsNCiAgICAtCX0gZWxzZSB7DQogICAgLQkJKnRt
cG5hbWUgPSAwOw0KICAgIC0JCW91dCA9IGZvcGVuKG5ld25hbWUsICJ3Iik7DQogICAgLQl9DQog
ICAgLQlpZiAoIW91dCkNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtDQogICAgLQljb25mX3dyaXRl
X2hlYWRpbmcob3V0LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsNCiAgICAtDQogICAgLQlp
ZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkNCiAgICAtCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7DQog
ICAgLQ0KICAgIC0JbWVudSA9IHJvb3RtZW51Lmxpc3Q7DQogICAgLQl3aGlsZSAobWVudSkgew0K
ICAgIC0JCXN5bSA9IG1lbnUtPnN5bTsNCiAgICAtCQlpZiAoIXN5bSkgew0KICAgIC0JCQlpZiAo
IW1lbnVfaXNfdmlzaWJsZShtZW51KSkNCiAgICAtCQkJCWdvdG8gbmV4dDsNCiAgICAtCQkJc3Ry
ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgIC0JCQlmcHJpbnRmKG91dCwgIlxuIg0KICAg
IC0JCQkJICAgICAiI1xuIg0KICAgIC0JCQkJICAgICAiIyAlc1xuIg0KICAgIC0JCQkJICAgICAi
I1xuIiwgc3RyKTsNCiAgICAtCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9J
Q0UpKSB7DQogICAgLQkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgLQkJCWlmICghKHN5bS0+
ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQ0KICAgIC0JCQkJZ290byBuZXh0Ow0KICAgIC0JCQlzeW0t
PmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7DQogICAgLQ0KICAgIC0JCQljb25mX3dyaXRlX3N5bWJv
bChvdXQsIHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7DQogICAgLQkJfQ0KICAgIC0N
CiAgICAtbmV4dDoNCiAgICAtCQlpZiAobWVudS0+bGlzdCkgew0KICAgIC0JCQltZW51ID0gbWVu
dS0+bGlzdDsNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJfQ0KICAgIC0JCWlmIChtZW51LT5u
ZXh0KQ0KICAgIC0JCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICAtCQllbHNlIHdoaWxlICgobWVu
dSA9IG1lbnUtPnBhcmVudCkpIHsNCiAgICAtCQkJaWYgKG1lbnUtPm5leHQpIHsNCiAgICAtCQkJ
CW1lbnUgPSBtZW51LT5uZXh0Ow0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQl9
DQogICAgLQl9DQogICAgLQlmY2xvc2Uob3V0KTsNCiAgICAtDQogICAgLQlpZiAoKnRtcG5hbWUp
IHsNCiAgICAtCQlzdHJjYXQoZGlybmFtZSwgYmFzZW5hbWUpOw0KICAgIC0JCXN0cmNhdChkaXJu
YW1lLCAiLm9sZCIpOw0KICAgIC0JCXJlbmFtZShuZXduYW1lLCBkaXJuYW1lKTsNCiAgICAtCQlp
ZiAocmVuYW1lKHRtcG5hbWUsIG5ld25hbWUpKQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCX0N
CiAgICAtDQogICAgLQljb25mX21lc3NhZ2UoXygiY29uZmlndXJhdGlvbiB3cml0dGVuIHRvICVz
IiksIG5ld25hbWUpOw0KICAgIC0NCiAgICAtCXN5bV9zZXRfY2hhbmdlX2NvdW50KDApOw0KICAg
IC0NCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGNvbmZf
c3BsaXRfY29uZmlnKHZvaWQpDQogICAgLXsNCiAgICAtCWNvbnN0IGNoYXIgKm5hbWU7DQogICAg
LQljaGFyIHBhdGhbUEFUSF9NQVgrMV07DQogICAgLQljaGFyICpvcHdkLCAqZGlyLCAqX25hbWU7
DQogICAgLQljaGFyICpzLCAqZCwgYzsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAt
CXN0cnVjdCBzdGF0IHNiOw0KICAgIC0JaW50IHJlcywgaSwgZmQ7DQogICAgLQ0KICAgIC0JbmFt
ZSA9IGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpOw0KICAgIC0JY29uZl9yZWFkX3NpbXBsZShu
YW1lLCBTX0RFRl9BVVRPKTsNCiAgICAtDQogICAgLQlvcHdkID0gbWFsbG9jKDI1Nik7DQogICAg
LQlfbmFtZSA9IHN0cmR1cChuYW1lKTsNCiAgICAtCWlmIChvcHdkID09IE5VTEwgfHwgX25hbWUg
PT0gTlVMTCkNCiAgICAtIAkJcmV0dXJuIDE7DQogICAgLQlvcHdkID0gZ2V0Y3dkKG9wd2QsIDI1
Nik7DQogICAgLQlkaXIgPSBkaXJuYW1lKF9uYW1lKTsNCiAgICAtCWlmIChkaXIgPT0gTlVMTCkg
ew0KICAgIC0JCXJlcyA9IDE7DQogICAgLQkJZ290byBlcnI7DQogICAgLQl9DQogICAgLQ0KICAg
IC0Jc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLCBkaXIsICJkZXBpbmNsdWRl
Iik7DQogICAgLQlpZiAoc3RhdChwYXRoLCAmc2IpICYmIG1rZGlyKHBhdGgsIDA3NTUpKSB7DQog
ICAgLQkJcmVzID0gMTsNCiAgICAtCQlnb3RvIGVycjsNCiAgICAtCX0NCiAgICAtDQogICAgLQlp
ZiAoY2hkaXIocGF0aCkpIHsNCiAgICAtCQlyZXMgPSAxOw0KICAgIC0JCWdvdG8gZXJyOw0KICAg
IC0JfQ0KICAgIC0NCiAgICAtCXJlcyA9IDA7DQogICAgLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3lt
KSB7DQogICAgLQkJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICAtCQlpZiAoKHN5bS0+ZmxhZ3Mg
JiBTWU1CT0xfQVVUTykgfHwgIXN5bS0+bmFtZSkNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJ
aWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHsNCiAgICAtCQkJaWYgKHN5bS0+ZmxhZ3Mg
JiBTWU1CT0xfREVGX0FVVE8pIHsNCiAgICAtCQkJCS8qDQogICAgLQkJCQkgKiBzeW1ib2wgaGFz
IG9sZCBhbmQgbmV3IHZhbHVlLA0KICAgIC0JCQkJICogc28gY29tcGFyZSB0aGVtLi4uDQogICAg
LQkJCQkgKi8NCiAgICAtCQkJCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgLQkJCQljYXNlIFNf
Qk9PTEVBTjoNCiAgICAtCQkJCWNhc2UgU19UUklTVEFURToNCiAgICAtCQkJCQlpZiAoc3ltX2dl
dF90cmlzdGF0ZV92YWx1ZShzeW0pID09DQogICAgLQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FV
VE9dLnRyaSkNCiAgICAtCQkJCQkJY29udGludWU7DQogICAgLQkJCQkJYnJlYWs7DQogICAgLQkJ
CQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCQkJY2FzZSBTX0hFWDoNCiAgICAtCQkJCWNhc2UgU19J
TlQ6DQogICAgLQkJCQkJaWYgKCFzdHJjbXAoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwNCiAg
ICAtCQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnZhbCkpDQogICAgLQkJCQkJCWNvbnRp
bnVlOw0KICAgIC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJZGVmYXVsdDoNCiAgICAtCQkJCQlicmVh
azsNCiAgICAtCQkJCX0NCiAgICAtCQkJfSBlbHNlIHsNCiAgICAtCQkJCS8qDQogICAgLQkJCQkg
KiBJZiB0aGVyZSBpcyBubyBvbGQgdmFsdWUsIG9ubHkgJ25vJyAodW5zZXQpDQogICAgLQkJCQkg
KiBpcyBhbGxvd2VkIGFzIG5ldyB2YWx1ZS4NCiAgICAtCQkJCSAqLw0KICAgIC0JCQkJc3dpdGNo
IChzeW0tPnR5cGUpIHsNCiAgICAtCQkJCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCQkJY2FzZSBT
X1RSSVNUQVRFOg0KICAgIC0JCQkJCWlmIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0g
bm8pDQogICAgLQkJCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJZGVm
YXVsdDoNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCX0g
ZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9BVVRPKSkNCiAgICAtCQkJLyogVGhl
cmUgaXMgbmVpdGhlciBhbiBvbGQgbm9yIGEgbmV3IHZhbHVlLiAqLw0KICAgIC0JCQljb250aW51
ZTsNCiAgICAtCQkvKiBlbHNlDQogICAgLQkJICoJVGhlcmUgaXMgYW4gb2xkIHZhbHVlLCBidXQg
bm8gbmV3IHZhbHVlICgnbm8nICh1bnNldCkNCiAgICAtCQkgKglpc24ndCBzYXZlZCBpbiBhdXRv
LmNvbmYsIHNvIHRoZSBvbGQgdmFsdWUgaXMgYWx3YXlzDQogICAgLQkJICoJZGlmZmVyZW50IGZy
b20gJ25vJykuDQogICAgLQkJICovDQogICAgLQ0KICAgIC0JCS8qIFJlcGxhY2UgYWxsICdfJyBh
bmQgYXBwZW5kICIuaCIgKi8NCiAgICAtCQlzID0gc3ltLT5uYW1lOw0KICAgIC0JCWQgPSBwYXRo
Ow0KICAgIC0JCXdoaWxlICgoYyA9ICpzKyspKSB7DQogICAgLQkJCWMgPSB0b2xvd2VyKGMpOw0K
ICAgIC0JCQkqZCsrID0gKGMgPT0gJ18nKSA/ICcvJyA6IGM7DQogICAgLQkJfQ0KICAgIC0JCXN0
cmNweShkLCAiLmgiKTsNCiAgICAtDQogICAgLQkJLyogQXNzdW1lIGRpcmVjdG9yeSBwYXRoIGFs
cmVhZHkgZXhpc3RzLiAqLw0KICAgIC0JCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9fQ1JF
QVQgfCBPX1RSVU5DLCAwNjQ0KTsNCiAgICAtCQlpZiAoZmQgPT0gLTEpIHsNCiAgICAtCQkJaWYg
KGVycm5vICE9IEVOT0VOVCkgew0KICAgIC0JCQkJcmVzID0gMTsNCiAgICAtCQkJCWJyZWFrOw0K
ICAgIC0JCQl9DQogICAgLQkJCS8qDQogICAgLQkJCSAqIENyZWF0ZSBkaXJlY3RvcnkgY29tcG9u
ZW50cywNCiAgICAtCQkJICogdW5sZXNzIHRoZXkgZXhpc3QgYWxyZWFkeS4NCiAgICAtCQkJICov
DQogICAgLQkJCWQgPSBwYXRoOw0KICAgIC0JCQl3aGlsZSAoKGQgPSBzdHJjaHIoZCwgJy8nKSkp
IHsNCiAgICAtCQkJCSpkID0gMDsNCiAgICAtCQkJCWlmIChzdGF0KHBhdGgsICZzYikgJiYgbWtk
aXIocGF0aCwgMDc1NSkpIHsNCiAgICAtCQkJCQlyZXMgPSAxOw0KICAgIC0JCQkJCWdvdG8gb3V0
Ow0KICAgIC0JCQkJfQ0KICAgIC0JCQkJKmQrKyA9ICcvJzsNCiAgICAtCQkJfQ0KICAgIC0JCQkv
KiBUcnkgaXQgYWdhaW4uICovDQogICAgLQkJCWZkID0gb3BlbihwYXRoLCBPX1dST05MWSB8IE9f
Q1JFQVQgfCBPX1RSVU5DLCAwNjQ0KTsNCiAgICAtCQkJaWYgKGZkID09IC0xKSB7DQogICAgLQkJ
CQlyZXMgPSAxOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQkJ
Y2xvc2UoZmQpOw0KICAgIC0JfQ0KICAgIC1vdXQ6DQogICAgLQlpZiAoY2hkaXIob3B3ZCkpDQog
ICAgLQkJcmVzID0gMTsNCiAgICAtZXJyOg0KICAgIC0JZnJlZShvcHdkKTsNCiAgICAtCWZyZWUo
X25hbWUpOw0KICAgIC0JcmV0dXJuIHJlczsNCiAgICAtfQ0KICAgIC0NCiAgICAtaW50IGNvbmZf
d3JpdGVfYXV0b2NvbmYodm9pZCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0K
ICAgIC0JY29uc3QgY2hhciAqbmFtZTsNCiAgICAtCUZJTEUgKm91dCwgKnRyaXN0YXRlLCAqb3V0
X2g7DQogICAgLQlpbnQgaTsNCiAgICAtCWNoYXIgZGlyW1BBVEhfTUFYKzFdLCBidWZbUEFUSF9N
QVgrMV07DQogICAgLQljaGFyICpzOw0KICAgIC0NCiAgICAtCXN0cmNweShkaXIsIGNvbmZfZ2V0
X2NvbmZpZ25hbWUoKSk7DQogICAgLQlzID0gc3RycmNocihkaXIsICcvJyk7DQogICAgLQlpZiAo
cykNCiAgICAtCQlzWzFdID0gMDsNCiAgICAtCWVsc2UNCiAgICAtCQlkaXJbMF0gPSAwOw0KICAg
IC0NCiAgICAtCXN5bV9jbGVhcl9hbGxfdmFsaWQoKTsNCiAgICAtDQogICAgLQlzcHJpbnRmKGJ1
ZiwgIiVzLmNvbmZpZy5jbWQiLCBkaXIpOw0KICAgIC0JZmlsZV93cml0ZV9kZXAoYnVmKTsNCiAg
ICAtDQogICAgLQlpZiAoY29uZl9zcGxpdF9jb25maWcoKSkNCiAgICAtCQlyZXR1cm4gMTsNCiAg
ICAtDQogICAgLQlzcHJpbnRmKGJ1ZiwgIiVzLnRtcGNvbmZpZyIsIGRpcik7DQogICAgLQlvdXQg
PSBmb3BlbihidWYsICJ3Iik7DQogICAgLQlpZiAoIW91dCkNCiAgICAtCQlyZXR1cm4gMTsNCiAg
ICAtDQogICAgLQlzcHJpbnRmKGJ1ZiwgIiVzLnRtcGNvbmZpZ190cmlzdGF0ZSIsIGRpcik7DQog
ICAgLQl0cmlzdGF0ZSA9IGZvcGVuKGJ1ZiwgInciKTsNCiAgICAtCWlmICghdHJpc3RhdGUpIHsN
CiAgICAtCQlmY2xvc2Uob3V0KTsNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtCX0NCiAgICAtDQog
ICAgLQlzcHJpbnRmKGJ1ZiwgIiVzLnRtcGNvbmZpZy5oIiwgZGlyKTsNCiAgICAtCW91dF9oID0g
Zm9wZW4oYnVmLCAidyIpOw0KICAgIC0JaWYgKCFvdXRfaCkgew0KICAgIC0JCWZjbG9zZShvdXQp
Ow0KICAgIC0JCWZjbG9zZSh0cmlzdGF0ZSk7DQogICAgLQkJcmV0dXJuIDE7DQogICAgLQl9DQog
ICAgLQ0KICAgIC0JY29uZl93cml0ZV9oZWFkaW5nKG91dCwgJmtjb25maWdfcHJpbnRlcl9jYiwg
TlVMTCk7DQogICAgLQ0KICAgIC0JY29uZl93cml0ZV9oZWFkaW5nKHRyaXN0YXRlLCAmdHJpc3Rh
dGVfcHJpbnRlcl9jYiwgTlVMTCk7DQogICAgLQ0KICAgIC0JY29uZl93cml0ZV9oZWFkaW5nKG91
dF9oLCAmaGVhZGVyX3ByaW50ZXJfY2IsIE5VTEwpOw0KICAgIC0NCiAgICAtCWZvcl9hbGxfc3lt
Ym9scyhpLCBzeW0pIHsNCiAgICAtCQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAgIC0JCWlmICgh
KHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8ICFzeW0tPm5hbWUpDQogICAgLQkJCWNvbnRp
bnVlOw0KICAgIC0NCiAgICAtCQkvKiB3cml0ZSBzeW1ib2wgdG8gYXV0by5jb25mLCB0cmlzdGF0
ZSBhbmQgaGVhZGVyIGZpbGVzICovDQogICAgLQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0s
ICZrY29uZmlnX3ByaW50ZXJfY2IsICh2b2lkICopMSk7DQogICAgLQ0KICAgIC0JCWNvbmZfd3Jp
dGVfc3ltYm9sKHRyaXN0YXRlLCBzeW0sICZ0cmlzdGF0ZV9wcmludGVyX2NiLCAodm9pZCAqKTEp
Ow0KICAgIC0NCiAgICAtCQljb25mX3dyaXRlX3N5bWJvbChvdXRfaCwgc3ltLCAmaGVhZGVyX3By
aW50ZXJfY2IsIE5VTEwpOw0KICAgIC0JfQ0KICAgIC0JZmNsb3NlKG91dCk7DQogICAgLQlmY2xv
c2UodHJpc3RhdGUpOw0KICAgIC0JZmNsb3NlKG91dF9oKTsNCiAgICAtDQogICAgLQluYW1lID0g
Z2V0ZW52KCJLQ09ORklHX0FVVE9IRUFERVIiKTsNCiAgICAtCWlmICghbmFtZSkNCiAgICAtCQlu
YW1lID0gImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgiOw0KICAgIC0Jc3ByaW50ZihidWYs
ICIlcy50bXBjb25maWcuaCIsIGRpcik7DQogICAgLQlpZiAocmVuYW1lKGJ1ZiwgbmFtZSkpDQog
ICAgLQkJcmV0dXJuIDE7DQogICAgLQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX1RSSVNUQVRFIik7
DQogICAgLQlpZiAoIW5hbWUpDQogICAgLQkJbmFtZSA9ICJpbmNsdWRlL2NvbmZpZy90cmlzdGF0
ZS5jb25mIjsNCiAgICAtCXNwcmludGYoYnVmLCAiJXMudG1wY29uZmlnX3RyaXN0YXRlIiwgZGly
KTsNCiAgICAtCWlmIChyZW5hbWUoYnVmLCBuYW1lKSkNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAt
CW5hbWUgPSBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKTsNCiAgICAtCS8qDQogICAgLQkgKiBU
aGlzIG11c3QgYmUgdGhlIGxhc3Qgc3RlcCwga2J1aWxkIGhhcyBhIGRlcGVuZGVuY3kgb24gYXV0
by5jb25mDQogICAgLQkgKiBhbmQgdGhpcyBtYXJrcyB0aGUgc3VjY2Vzc2Z1bCBjb21wbGV0aW9u
IG9mIHRoZSBwcmV2aW91cyBzdGVwcy4NCiAgICAtCSAqLw0KICAgIC0Jc3ByaW50ZihidWYsICIl
cy50bXBjb25maWciLCBkaXIpOw0KICAgIC0JaWYgKHJlbmFtZShidWYsIG5hbWUpKQ0KICAgIC0J
CXJldHVybiAxOw0KICAgIC0NCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1z
dGF0aWMgaW50IHN5bV9jaGFuZ2VfY291bnQ7DQogICAgLXN0YXRpYyB2b2lkICgqY29uZl9jaGFu
Z2VkX2NhbGxiYWNrKSh2b2lkKTsNCiAgICAtDQogICAgLXZvaWQgc3ltX3NldF9jaGFuZ2VfY291
bnQoaW50IGNvdW50KQ0KICAgIC17DQogICAgLQlpbnQgX3N5bV9jaGFuZ2VfY291bnQgPSBzeW1f
Y2hhbmdlX2NvdW50Ow0KICAgIC0Jc3ltX2NoYW5nZV9jb3VudCA9IGNvdW50Ow0KICAgIC0JaWYg
KGNvbmZfY2hhbmdlZF9jYWxsYmFjayAmJg0KICAgIC0JICAgIChib29sKV9zeW1fY2hhbmdlX2Nv
dW50ICE9IChib29sKWNvdW50KQ0KICAgIC0JCWNvbmZfY2hhbmdlZF9jYWxsYmFjaygpOw0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50KGludCBjb3VudCkNCiAg
ICAtew0KICAgIC0Jc3ltX3NldF9jaGFuZ2VfY291bnQoY291bnQgKyBzeW1fY2hhbmdlX2NvdW50
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBjb25mX2dldF9jaGFuZ2VkKHZvaWQpDQogICAg
LXsNCiAgICAtCXJldHVybiBzeW1fY2hhbmdlX2NvdW50Ow0KICAgIC19DQogICAgLQ0KICAgIC12
b2lkIGNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZuKSh2b2lkKSkNCiAgICAtew0K
ICAgIC0JY29uZl9jaGFuZ2VkX2NhbGxiYWNrID0gZm47DQogICAgLX0NCiAgICAtDQogICAgLXN0
YXRpYyBib29sIHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pDQog
ICAgLXsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBzeW1ib2wg
KnN5bTsNCiAgICAtCXN0cnVjdCBleHByICplOw0KICAgIC0JaW50IGNudCwgZGVmOw0KICAgIC0N
CiAgICAtCS8qDQogICAgLQkgKiBJZiBjaG9pY2UgaXMgbW9kIHRoZW4gd2UgbWF5IGhhdmUgbW9y
ZSBpdGVtcyBzZWxlY3RlZA0KICAgIC0JICogYW5kIGlmIG5vIHRoZW4gbm8tb25lLg0KICAgIC0J
ICogSW4gYm90aCBjYXNlcyBzdG9wLg0KICAgIC0JICovDQogICAgLQlpZiAoY3N5bS0+Y3Vyci50
cmkgIT0geWVzKQ0KICAgIC0JCXJldHVybiBmYWxzZTsNCiAgICAtDQogICAgLQlwcm9wID0gc3lt
X2dldF9jaG9pY2VfcHJvcChjc3ltKTsNCiAgICAtDQogICAgLQkvKiBjb3VudCBlbnRyaWVzIGlu
IGNob2ljZSBibG9jayAqLw0KICAgIC0JY250ID0gMDsNCiAgICAtCWV4cHJfbGlzdF9mb3JfZWFj
aF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQ0KICAgIC0JCWNudCsrOw0KICAgIC0NCiAgICAtCS8q
DQogICAgLQkgKiBmaW5kIGEgcmFuZG9tIHZhbHVlIGFuZCBzZXQgaXQgdG8geWVzLA0KICAgIC0J
ICogc2V0IHRoZSByZXN0IHRvIG5vIHNvIHdlIGhhdmUgb25seSBvbmUgc2V0DQogICAgLQkgKi8N
CiAgICAtCWRlZiA9IChyYW5kKCkgJSBjbnQpOw0KICAgIC0NCiAgICAtCWNudCA9IDA7DQogICAg
LQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgew0KICAgIC0JCWlm
IChkZWYgPT0gY250KyspIHsNCiAgICAtCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVz
Ow0KICAgIC0JCQljc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gc3ltOw0KICAgIC0JCX0NCiAg
ICAtCQllbHNlIHsNCiAgICAtCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87DQogICAg
LQkJfQ0KICAgIC0JCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgIC0JCS8qIGNs
ZWFyIFZBTElEIHRvIGdldCB2YWx1ZSBjYWxjdWxhdGVkICovDQogICAgLQkJc3ltLT5mbGFncyAm
PSB+U1lNQk9MX1ZBTElEOw0KICAgIC0JfQ0KICAgIC0JY3N5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RF
Rl9VU0VSOw0KICAgIC0JLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8N
CiAgICAtCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsNCiAgICAtDQogICAgLQlyZXR1
cm4gdHJ1ZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBzZXRfYWxsX2Nob2ljZV92YWx1ZXMo
c3RydWN0IHN5bWJvbCAqY3N5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9w
Ow0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IGV4cHIgKmU7DQogICAg
LQ0KICAgIC0JcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3N5bSk7DQogICAgLQ0KICAgIC0J
LyoNCiAgICAtCSAqIFNldCBhbGwgbm9uLWFzc2luZ2VkIGNob2ljZSB2YWx1ZXMgdG8gbm8NCiAg
ICAtCSAqLw0KICAgIC0JZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0p
IHsNCiAgICAtCQlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkNCiAgICAtCQkJc3ltLT5kZWZbU19E
RUZfVVNFUl0udHJpID0gbm87DQogICAgLQl9DQogICAgLQljc3ltLT5mbGFncyB8PSBTWU1CT0xf
REVGX1VTRVI7DQogICAgLQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2FsY3VsYXRlZCAq
Lw0KICAgIC0JY3N5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUQgfCBTWU1CT0xfTkVFRF9TRVRf
Q0hPSUNFX1ZBTFVFUyk7DQogICAgLX0NCiAgICAtDQogICAgLWJvb2wgY29uZl9zZXRfYWxsX25l
d19zeW1ib2xzKGVudW0gY29uZl9kZWZfbW9kZSBtb2RlKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qg
c3ltYm9sICpzeW0sICpjc3ltOw0KICAgIC0JaW50IGksIGNudCwgcGJ5LCBwdHksIHB0bTsJLyog
cGJ5OiBwcm9iYWJpbGl0eSBvZiBib29sZWFuICA9IHkNCiAgICAtCQkJCQkgKiBwdHk6IHByb2Jh
YmlsaXR5IG9mIHRyaXN0YXRlID0geQ0KICAgIC0JCQkJCSAqIHB0bTogcHJvYmFiaWxpdHkgb2Yg
dHJpc3RhdGUgPSBtDQogICAgLQkJCQkJICovDQogICAgLQ0KICAgIC0JcGJ5ID0gNTA7IHB0eSA9
IHB0bSA9IDMzOyAvKiBjYW4ndCBnbyBhcyB0aGUgZGVmYXVsdCBpbiBzd2l0Y2gtY2FzZQ0KICAg
IC0JCQkJICAgKiBiZWxvdywgb3RoZXJ3aXNlIGdjYyB3aGluZXMgYWJvdXQNCiAgICAtCQkJCSAg
ICogLVdtYXliZS11bmluaXRpYWxpemVkICovDQogICAgLQlpZiAobW9kZSA9PSBkZWZfcmFuZG9t
KSB7DQogICAgLQkJaW50IG4sIHBbM107DQogICAgLQkJY2hhciAqZW52ID0gZ2V0ZW52KCJLQ09O
RklHX1BST0JBQklMSVRZIik7DQogICAgLQkJbiA9IDA7DQogICAgLQkJd2hpbGUoIGVudiAmJiAq
ZW52ICkgew0KICAgIC0JCQljaGFyICplbmRwOw0KICAgIC0JCQlpbnQgdG1wID0gc3RydG9sKCBl
bnYsICZlbmRwLCAxMCApOw0KICAgIC0JCQlpZiggdG1wID49IDAgJiYgdG1wIDw9IDEwMCApIHsN
CiAgICAtCQkJCXBbbisrXSA9IHRtcDsNCiAgICAtCQkJfSBlbHNlIHsNCiAgICAtCQkJCWVycm5v
ID0gRVJBTkdFOw0KICAgIC0JCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIgKTsNCiAg
ICAtCQkJCWV4aXQoIDEgKTsNCiAgICAtCQkJfQ0KICAgIC0JCQllbnYgPSAoKmVuZHAgPT0gJzon
KSA/IGVuZHArMSA6IGVuZHA7DQogICAgLQkJCWlmKCBuID49MyApIHsNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCXN3aXRjaCggbiApIHsNCiAgICAtCQljYXNl
IDE6DQogICAgLQkJCXBieSA9IHBbMF07IHB0bSA9IHBieS8yOyBwdHkgPSBwYnktcHRtOw0KICAg
IC0JCQlicmVhazsNCiAgICAtCQljYXNlIDI6DQogICAgLQkJCXB0eSA9IHBbMF07IHB0bSA9IHBb
MV07IHBieSA9IHB0eSArIHB0bTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAzOg0KICAg
IC0JCQlwYnkgPSBwWzBdOyBwdHkgPSBwWzFdOyBwdG0gPSBwWzJdOw0KICAgIC0JCQlicmVhazsN
CiAgICAtCQl9DQogICAgLQ0KICAgIC0JCWlmKCBwdHkrcHRtID4gMTAwICkgew0KICAgIC0JCQll
cnJubyA9IEVSQU5HRTsNCiAgICAtCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIgKTsN
CiAgICAtCQkJZXhpdCggMSApOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWJvb2wgaGFzX2No
YW5nZWQgPSBmYWxzZTsNCiAgICAtDQogICAgLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7DQog
ICAgLQkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9WQUxJ
RCkpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkp
IHsNCiAgICAtCQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCQljYXNlIFNfVFJJU1RBVEU6DQogICAg
LQkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsNCiAgICAtCQkJc3dpdGNoIChtb2RlKSB7DQogICAgLQkJ
CWNhc2UgZGVmX3llczoNCiAgICAtCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsN
CiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIGRlZl9tb2Q6DQogICAgLQkJCQlzeW0tPmRl
ZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSBk
ZWZfbm86DQogICAgLQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsNCiAgICAtCQkJ
CWJyZWFrOw0KICAgIC0JCQljYXNlIGRlZl9yYW5kb206DQogICAgLQkJCQlzeW0tPmRlZltTX0RF
Rl9VU0VSXS50cmkgPSBubzsNCiAgICAtCQkJCWNudCA9IHJhbmQoKSAlIDEwMDsNCiAgICAtCQkJ
CWlmIChzeW0tPnR5cGUgPT0gU19UUklTVEFURSkgew0KICAgIC0JCQkJCWlmIChjbnQgPCBwdHkp
DQogICAgLQkJCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsNCiAgICAtCQkJCQll
bHNlIGlmIChjbnQgPCAocHR5K3B0bSkpDQogICAgLQkJCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJd
LnRyaSA9IG1vZDsNCiAgICAtCQkJCX0gZWxzZSBpZiAoY250IDwgcGJ5KQ0KICAgIC0JCQkJCXN5
bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQlk
ZWZhdWx0Og0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCX0NCiAgICAtCQkJaWYgKCEoc3lt
X2lzX2Nob2ljZShzeW0pICYmIG1vZGUgPT0gZGVmX3JhbmRvbSkpDQogICAgLQkJCQlzeW0tPmZs
YWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJZGVmYXVsdDoN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCX0NCiAgICAtDQogICAgLQlz
eW1fY2xlYXJfYWxsX3ZhbGlkKCk7DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAqIFdlIGhhdmUg
ZGlmZmVyZW50IHR5cGUgb2YgY2hvaWNlIGJsb2Nrcy4NCiAgICAtCSAqIElmIGN1cnIudHJpIGVx
dWFscyB0byBtb2QgdGhlbiB3ZSBjYW4gc2VsZWN0IHNldmVyYWwNCiAgICAtCSAqIGNob2ljZSBz
eW1ib2xzIGluIG9uZSBibG9jay4NCiAgICAtCSAqIEluIHRoaXMgY2FzZSB3ZSBkbyBub3RoaW5n
Lg0KICAgIC0JICogSWYgY3Vyci50cmkgZXF1YWxzIHllcyB0aGVuIG9ubHkgb25lIHN5bWJvbCBj
YW4gYmUNCiAgICAtCSAqIHNlbGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQgaXQg
dG8geWVzLA0KICAgIC0JICogYW5kIHRoZSByZXN0IHRvIG5vLg0KICAgIC0JICovDQogICAgLQlp
ZiAobW9kZSAhPSBkZWZfcmFuZG9tKSB7DQogICAgLQkJZm9yX2FsbF9zeW1ib2xzKGksIGNzeW0p
IHsNCiAgICAtCQkJaWYgKChzeW1faXNfY2hvaWNlKGNzeW0pICYmICFzeW1faGFzX3ZhbHVlKGNz
eW0pKSB8fA0KICAgIC0JCQkgICAgc3ltX2lzX2Nob2ljZV92YWx1ZShjc3ltKSkNCiAgICAtCQkJ
CWNzeW0tPmZsYWdzIHw9IFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTOw0KICAgIC0JCX0N
CiAgICAtCX0NCiAgICAtDQogICAgLQlmb3JfYWxsX3N5bWJvbHMoaSwgY3N5bSkgew0KICAgIC0J
CWlmIChzeW1faGFzX3ZhbHVlKGNzeW0pIHx8ICFzeW1faXNfY2hvaWNlKGNzeW0pKQ0KICAgIC0J
CQljb250aW51ZTsNCiAgICAtDQogICAgLQkJc3ltX2NhbGNfdmFsdWUoY3N5bSk7DQogICAgLQkJ
aWYgKG1vZGUgPT0gZGVmX3JhbmRvbSkNCiAgICAtCQkJaGFzX2NoYW5nZWQgPSByYW5kb21pemVf
Y2hvaWNlX3ZhbHVlcyhjc3ltKTsNCiAgICAtCQllbHNlIHsNCiAgICAtCQkJc2V0X2FsbF9jaG9p
Y2VfdmFsdWVzKGNzeW0pOw0KICAgIC0JCQloYXNfY2hhbmdlZCA9IHRydWU7DQogICAgLQkJfQ0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCXJldHVybiBoYXNfY2hhbmdlZDsNCiAgICAtfQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvZXhwci5jIGIvc3VwcG9ydC9rY29uZmlnL2V4cHIu
Yw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGQ2NjI2NTIuLjAwMDAw
MDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcvZXhwci5jDQogICAgKysrIC9kZXYvbnVsbA0K
ICAgIEBAIC0xLDExNjggKzAsMCBAQA0KICAgIC0vKg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIw
MDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgLSAqIFJlbGVhc2Vk
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLg0KICAgIC0gKi8NCiAgICAtDQog
ICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAgLSNp
bmNsdWRlIDxzdHJpbmcuaD4NCiAgICAtDQogICAgLSNpbmNsdWRlICJsa2MuaCINCiAgICAtDQog
ICAgLSNkZWZpbmUgREVCVUdfRVhQUgkwDQogICAgLQ0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9h
bGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZXhw
ciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7DQogICAgLQllLT50eXBlID0gRV9TWU1CT0w7
DQogICAgLQllLT5sZWZ0LnN5bSA9IHN5bTsNCiAgICAtCXJldHVybiBlOw0KICAgIC19DQogICAg
LQ0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwg
c3RydWN0IGV4cHIgKmNlKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2Mo
MSwgc2l6ZW9mKCplKSk7DQogICAgLQllLT50eXBlID0gdHlwZTsNCiAgICAtCWUtPmxlZnQuZXhw
ciA9IGNlOw0KICAgIC0JcmV0dXJuIGU7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBleHBy
ICpleHByX2FsbG9jX3R3byhlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqZTEsIHN0
cnVjdCBleHByICplMikNCiAgICAtew0KICAgIC0Jc3RydWN0IGV4cHIgKmUgPSB4Y2FsbG9jKDEs
IHNpemVvZigqZSkpOw0KICAgIC0JZS0+dHlwZSA9IHR5cGU7DQogICAgLQllLT5sZWZ0LmV4cHIg
PSBlMTsNCiAgICAtCWUtPnJpZ2h0LmV4cHIgPSBlMjsNCiAgICAtCXJldHVybiBlOw0KICAgIC19
DQogICAgLQ0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19jb21wKGVudW0gZXhwcl90eXBl
IHR5cGUsIHN0cnVjdCBzeW1ib2wgKnMxLCBzdHJ1Y3Qgc3ltYm9sICpzMikNCiAgICAtew0KICAg
IC0Jc3RydWN0IGV4cHIgKmUgPSB4Y2FsbG9jKDEsIHNpemVvZigqZSkpOw0KICAgIC0JZS0+dHlw
ZSA9IHR5cGU7DQogICAgLQllLT5sZWZ0LnN5bSA9IHMxOw0KICAgIC0JZS0+cmlnaHQuc3ltID0g
czI7DQogICAgLQlyZXR1cm4gZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RydWN0IGV4cHIgKmV4
cHJfYWxsb2NfYW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQ0KICAgIC17DQog
ICAgLQlpZiAoIWUxKQ0KICAgIC0JCXJldHVybiBlMjsNCiAgICAtCXJldHVybiBlMiA/IGV4cHJf
YWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpIDogZTE7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVj
dCBleHByICpleHByX2FsbG9jX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQ0K
ICAgIC17DQogICAgLQlpZiAoIWUxKQ0KICAgIC0JCXJldHVybiBlMjsNCiAgICAtCXJldHVybiBl
MiA/IGV4cHJfYWxsb2NfdHdvKEVfT1IsIGUxLCBlMikgOiBlMTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RydWN0IGV4cHIgKmV4cHJfY29weShjb25zdCBzdHJ1Y3QgZXhwciAqb3JnKQ0KICAgIC17
DQogICAgLQlzdHJ1Y3QgZXhwciAqZTsNCiAgICAtDQogICAgLQlpZiAoIW9yZykNCiAgICAtCQly
ZXR1cm4gTlVMTDsNCiAgICAtDQogICAgLQllID0geG1hbGxvYyhzaXplb2YoKm9yZykpOw0KICAg
IC0JbWVtY3B5KGUsIG9yZywgc2l6ZW9mKCpvcmcpKTsNCiAgICAtCXN3aXRjaCAob3JnLT50eXBl
KSB7DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAgIC0JCWUtPmxlZnQgPSBvcmctPmxlZnQ7DQog
ICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0JCWUtPmxlZnQuZXhwciA9IGV4
cHJfY29weShvcmctPmxlZnQuZXhwcik7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfRVFV
QUw6DQogICAgLQljYXNlIEVfVU5FUVVBTDoNCiAgICAtCQllLT5sZWZ0LnN5bSA9IG9yZy0+bGVm
dC5zeW07DQogICAgLQkJZS0+cmlnaHQuc3ltID0gb3JnLT5yaWdodC5zeW07DQogICAgLQkJYnJl
YWs7DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JY2FzZSBFX09SOg0KICAgIC0JY2FzZSBFX0xJ
U1Q6DQogICAgLQkJZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsNCiAg
ICAtCQllLT5yaWdodC5leHByID0gZXhwcl9jb3B5KG9yZy0+cmlnaHQuZXhwcik7DQogICAgLQkJ
YnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCXByaW50ZigiY2FuJ3QgY29weSB0eXBlICVk
XG4iLCBlLT50eXBlKTsNCiAgICAtCQlmcmVlKGUpOw0KICAgIC0JCWUgPSBOVUxMOw0KICAgIC0J
CWJyZWFrOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXJldHVybiBlOw0KICAgIC19DQogICAgLQ0K
ICAgIC12b2lkIGV4cHJfZnJlZShzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0JaWYgKCFl
KQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlzd2l0Y2ggKGUtPnR5cGUpIHsNCiAgICAt
CWNhc2UgRV9TWU1CT0w6DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0J
CWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCWNhc2UgRV9F
UVVBTDoNCiAgICAtCWNhc2UgRV9VTkVRVUFMOg0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBF
X09SOg0KICAgIC0JY2FzZSBFX0FORDoNCiAgICAtCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsN
CiAgICAtCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQogICAgLQkJYnJlYWs7DQogICAgLQlk
ZWZhdWx0Og0KICAgIC0JCXByaW50ZigiaG93IHRvIGZyZWUgdHlwZSAlZD9cbiIsIGUtPnR5cGUp
Ow0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JZnJlZShlKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtc3RhdGljIGludCB0cmFuc19jb3VudDsNCiAgICAtDQogICAgLSNkZWZpbmUgZTEgKCpl
cDEpDQogICAgLSNkZWZpbmUgZTIgKCplcDIpDQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBfX2V4
cHJfZWxpbWluYXRlX2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBz
dHJ1Y3QgZXhwciAqKmVwMikNCiAgICAtew0KICAgIC0JaWYgKGUxLT50eXBlID09IHR5cGUpIHsN
CiAgICAtCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOw0K
ICAgIC0JCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLT5yaWdodC5leHByLCAmZTIpOw0K
ICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtCWlmIChlMi0+dHlwZSA9PSB0eXBlKSB7DQog
ICAgLQkJX19leHByX2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEsICZlMi0+bGVmdC5leHByKTsNCiAg
ICAtCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsNCiAg
ICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQlpZiAoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYg
ZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYNCiAgICAtCSAgICBlMS0+bGVmdC5zeW0gPT0gZTItPmxl
ZnQuc3ltICYmDQogICAgLQkgICAgKGUxLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcyB8fCBlMS0+
bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykpDQogICAgLQkJcmV0dXJuOw0KICAgIC0JaWYgKCFleHBy
X2VxKGUxLCBlMikpDQogICAgLQkJcmV0dXJuOw0KICAgIC0JdHJhbnNfY291bnQrKzsNCiAgICAt
CWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7DQogICAgLQlzd2l0Y2ggKHR5cGUpIHsNCiAg
ICAtCWNhc2UgRV9PUjoNCiAgICAtCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8p
Ow0KICAgIC0JCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7DQogICAgLQkJYnJl
YWs7DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5
bWJvbF95ZXMpOw0KICAgIC0JCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOw0K
ICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLXZvaWQgZXhwcl9lbGltaW5hdGVfZXEoc3RydWN0IGV4cHIgKiplcDEsIHN0
cnVjdCBleHByICoqZXAyKQ0KICAgIC17DQogICAgLQlpZiAoIWUxIHx8ICFlMikNCiAgICAtCQly
ZXR1cm47DQogICAgLQlzd2l0Y2ggKGUxLT50eXBlKSB7DQogICAgLQljYXNlIEVfT1I6DQogICAg
LQljYXNlIEVfQU5EOg0KICAgIC0JCV9fZXhwcl9lbGltaW5hdGVfZXEoZTEtPnR5cGUsIGVwMSwg
ZXAyKTsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0JaWYgKGUxLT50
eXBlICE9IGUyLT50eXBlKSBzd2l0Y2ggKGUyLT50eXBlKSB7DQogICAgLQljYXNlIEVfT1I6DQog
ICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCV9fZXhwcl9lbGltaW5hdGVfZXEoZTItPnR5cGUsIGVw
MSwgZXAyKTsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0JZTEgPSBl
eHByX2VsaW1pbmF0ZV95bihlMSk7DQogICAgLQllMiA9IGV4cHJfZWxpbWluYXRlX3luKGUyKTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtI3VuZGVmIGUxDQogICAgLSN1bmRlZiBlMg0KICAgIC0NCiAg
ICAtaW50IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpDQogICAgLXsN
CiAgICAtCWludCByZXMsIG9sZF9jb3VudDsNCiAgICAtDQogICAgLQlpZiAoZTEtPnR5cGUgIT0g
ZTItPnR5cGUpDQogICAgLQkJcmV0dXJuIDA7DQogICAgLQlzd2l0Y2ggKGUxLT50eXBlKSB7DQog
ICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQljYXNlIEVfVU5FUVVBTDoNCiAgICAtCQlyZXR1cm4g
ZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSAmJiBlMS0+cmlnaHQuc3ltID09IGUyLT5yaWdo
dC5zeW07DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAgIC0JCXJldHVybiBlMS0+bGVmdC5zeW0g
PT0gZTItPmxlZnQuc3ltOw0KICAgIC0JY2FzZSBFX05PVDoNCiAgICAtCQlyZXR1cm4gZXhwcl9l
cShlMS0+bGVmdC5leHByLCBlMi0+bGVmdC5leHByKTsNCiAgICAtCWNhc2UgRV9BTkQ6DQogICAg
LQljYXNlIEVfT1I6DQogICAgLQkJZTEgPSBleHByX2NvcHkoZTEpOw0KICAgIC0JCWUyID0gZXhw
cl9jb3B5KGUyKTsNCiAgICAtCQlvbGRfY291bnQgPSB0cmFuc19jb3VudDsNCiAgICAtCQlleHBy
X2VsaW1pbmF0ZV9lcSgmZTEsICZlMik7DQogICAgLQkJcmVzID0gKGUxLT50eXBlID09IEVfU1lN
Qk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MICYmDQogICAgLQkJICAgICAgIGUxLT5sZWZ0LnN5
bSA9PSBlMi0+bGVmdC5zeW0pOw0KICAgIC0JCWV4cHJfZnJlZShlMSk7DQogICAgLQkJZXhwcl9m
cmVlKGUyKTsNCiAgICAtCQl0cmFuc19jb3VudCA9IG9sZF9jb3VudDsNCiAgICAtCQlyZXR1cm4g
cmVzOw0KICAgIC0JY2FzZSBFX0xJU1Q6DQogICAgLQljYXNlIEVfUkFOR0U6DQogICAgLQljYXNl
IEVfTk9ORToNCiAgICAtCQkvKiBwYW5pYyAqLzsNCiAgICAtCX0NCiAgICAtDQogICAgLQlpZiAo
REVCVUdfRVhQUikgew0KICAgIC0JCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOw0KICAgIC0JCXBy
aW50ZigiID0gIik7DQogICAgLQkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7DQogICAgLQkJcHJp
bnRmKCIgP1xuIik7DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAg
ICAtDQogICAgLXN0cnVjdCBleHByICpleHByX2VsaW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSkN
CiAgICAtew0KICAgIC0Jc3RydWN0IGV4cHIgKnRtcDsNCiAgICAtDQogICAgLQlpZiAoZSkgc3dp
dGNoIChlLT50eXBlKSB7DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCWUtPmxlZnQuZXhwciA9
IGV4cHJfZWxpbWluYXRlX3luKGUtPmxlZnQuZXhwcik7DQogICAgLQkJZS0+cmlnaHQuZXhwciA9
IGV4cHJfZWxpbWluYXRlX3luKGUtPnJpZ2h0LmV4cHIpOw0KICAgIC0JCWlmIChlLT5sZWZ0LmV4
cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsNCiAgICAtCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5z
eW0gPT0gJnN5bWJvbF9ubykgew0KICAgIC0JCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7DQog
ICAgLQkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQogICAgLQkJCQllLT50eXBlID0gRV9T
WU1CT0w7DQogICAgLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87DQogICAgLQkJCQllLT5y
aWdodC5leHByID0gTlVMTDsNCiAgICAtCQkJCXJldHVybiBlOw0KICAgIC0JCQl9IGVsc2UgaWYg
KGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAgICAtCQkJCWZyZWUo
ZS0+bGVmdC5leHByKTsNCiAgICAtCQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7DQogICAgLQkJCQkq
ZSA9ICooZS0+cmlnaHQuZXhwcik7DQogICAgLQkJCQlmcmVlKHRtcCk7DQogICAgLQkJCQlyZXR1
cm4gZTsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCQlpZiAoZS0+cmlnaHQuZXhwci0+dHlw
ZSA9PSBFX1NZTUJPTCkgew0KICAgIC0JCQlpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0g
JnN5bWJvbF9ubykgew0KICAgIC0JCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7DQogICAgLQkJ
CQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQogICAgLQkJCQllLT50eXBlID0gRV9TWU1CT0w7
DQogICAgLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87DQogICAgLQkJCQllLT5yaWdodC5l
eHByID0gTlVMTDsNCiAgICAtCQkJCXJldHVybiBlOw0KICAgIC0JCQl9IGVsc2UgaWYgKGUtPnJp
Z2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7DQogICAgLQkJCQlmcmVlKGUtPnJp
Z2h0LmV4cHIpOw0KICAgIC0JCQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgIC0JCQkJKmUgPSAq
KGUtPmxlZnQuZXhwcik7DQogICAgLQkJCQlmcmVlKHRtcCk7DQogICAgLQkJCQlyZXR1cm4gZTsN
CiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgRV9PUjoNCiAg
ICAtCQllLT5sZWZ0LmV4cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5sZWZ0LmV4cHIpOw0KICAg
IC0JCWUtPnJpZ2h0LmV4cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5yaWdodC5leHByKTsNCiAg
ICAtCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7DQogICAgLQkJCWlmIChl
LT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsNCiAgICAtCQkJCWZyZWUoZS0+
bGVmdC5leHByKTsNCiAgICAtCQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7DQogICAgLQkJCQkqZSA9
ICooZS0+cmlnaHQuZXhwcik7DQogICAgLQkJCQlmcmVlKHRtcCk7DQogICAgLQkJCQlyZXR1cm4g
ZTsNCiAgICAtCQkJfSBlbHNlIGlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xf
eWVzKSB7DQogICAgLQkJCQlleHByX2ZyZWUoZS0+bGVmdC5leHByKTsNCiAgICAtCQkJCWV4cHJf
ZnJlZShlLT5yaWdodC5leHByKTsNCiAgICAtCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICAt
CQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7DQogICAgLQkJCQllLT5yaWdodC5leHByID0g
TlVMTDsNCiAgICAtCQkJCXJldHVybiBlOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWlm
IChlLT5yaWdodC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7DQogICAgLQkJCWlmIChlLT5yaWdo
dC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKSB7DQogICAgLQkJCQlmcmVlKGUtPnJpZ2h0
LmV4cHIpOw0KICAgIC0JCQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgIC0JCQkJKmUgPSAqKGUt
PmxlZnQuZXhwcik7DQogICAgLQkJCQlmcmVlKHRtcCk7DQogICAgLQkJCQlyZXR1cm4gZTsNCiAg
ICAtCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykg
ew0KICAgIC0JCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7DQogICAgLQkJCQlleHByX2ZyZWUo
ZS0+cmlnaHQuZXhwcik7DQogICAgLQkJCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCQll
LT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOw0KICAgIC0JCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7
DQogICAgLQkJCQlyZXR1cm4gZTsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCQlicmVhazsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIGU7DQogICAg
LX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIGJvb2wgRk9PIT1uID0+IEZPTw0KICAgIC0gKi8N
CiAgICAtc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNfYm9vbChzdHJ1Y3QgZXhwciAqZSkNCiAgICAt
ew0KICAgIC0JaWYgKCFlKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0Jc3dpdGNoIChlLT50
eXBlKSB7DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JY2FzZSBFX09SOg0KICAgIC0JY2FzZSBF
X05PVDoNCiAgICAtCQllLT5sZWZ0LmV4cHIgPSBleHByX3RyYW5zX2Jvb2woZS0+bGVmdC5leHBy
KTsNCiAgICAtCQllLT5yaWdodC5leHByID0gZXhwcl90cmFuc19ib29sKGUtPnJpZ2h0LmV4cHIp
Ow0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX1VORVFVQUw6DQogICAgLQkJLy8gRk9PIT1u
IC0+IEZPTw0KICAgIC0JCWlmIChlLT5sZWZ0LnN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7DQog
ICAgLQkJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAgIC0JCQkJZS0+dHlw
ZSA9IEVfU1lNQk9MOw0KICAgIC0JCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICAtCQkJfQ0K
ICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0J
fQ0KICAgIC0JcmV0dXJuIGU7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIGUxIHx8
IGUyIC0+ID8NCiAgICAtICovDQogICAgLXN0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX29y
KHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qg
ZXhwciAqdG1wOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7DQogICAgLQ0KICAg
IC0JaWYgKGV4cHJfZXEoZTEsIGUyKSkNCiAgICAtCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsNCiAg
ICAtCWlmIChlMS0+dHlwZSAhPSBFX0VRVUFMICYmIGUxLT50eXBlICE9IEVfVU5FUVVBTCAmJiBl
MS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMS0+dHlwZSAhPSBFX05PVCkNCiAgICAtCQlyZXR1cm4g
TlVMTDsNCiAgICAtCWlmIChlMi0+dHlwZSAhPSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5F
UVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMi0+dHlwZSAhPSBFX05PVCkNCiAgICAt
CQlyZXR1cm4gTlVMTDsNCiAgICAtCWlmIChlMS0+dHlwZSA9PSBFX05PVCkgew0KICAgIC0JCXRt
cCA9IGUxLT5sZWZ0LmV4cHI7DQogICAgLQkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRt
cC0+dHlwZSAhPSBFX1VORVFVQUwgJiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgIC0JCQly
ZXR1cm4gTlVMTDsNCiAgICAtCQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsNCiAgICAtCX0gZWxzZQ0K
ICAgIC0JCXN5bTEgPSBlMS0+bGVmdC5zeW07DQogICAgLQlpZiAoZTItPnR5cGUgPT0gRV9OT1Qp
IHsNCiAgICAtCQlpZiAoZTItPmxlZnQuZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICAtCQkJ
cmV0dXJuIE5VTEw7DQogICAgLQkJc3ltMiA9IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOw0KICAg
IC0JfSBlbHNlDQogICAgLQkJc3ltMiA9IGUyLT5sZWZ0LnN5bTsNCiAgICAtCWlmIChzeW0xICE9
IHN5bTIpDQogICAgLQkJcmV0dXJuIE5VTEw7DQogICAgLQlpZiAoc3ltMS0+dHlwZSAhPSBTX0JP
T0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNUQVRFKQ0KICAgIC0JCXJldHVybiBOVUxMOw0K
ICAgIC0JaWYgKHN5bTEtPnR5cGUgPT0gU19UUklTVEFURSkgew0KICAgIC0JCWlmIChlMS0+dHlw
ZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYNCiAgICAtCQkgICAgKChlMS0+
cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2Qp
IHx8DQogICAgLQkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmln
aHQuc3ltID09ICZzeW1ib2xfeWVzKSkpIHsNCiAgICAtCQkJLy8gKGE9J3knKSB8fCAoYT0nbScp
IC0+IChhIT0nbicpDQogICAgLQkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBz
eW0xLCAmc3ltYm9sX25vKTsNCiAgICAtCQl9DQogICAgLQkJaWYgKGUxLT50eXBlID09IEVfRVFV
QUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJg0KICAgIC0JCSAgICAoKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fA0KICAgIC0J
CSAgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZz
eW1ib2xfeWVzKSkpIHsNCiAgICAtCQkJLy8gKGE9J3knKSB8fCAoYT0nbicpIC0+IChhIT0nbScp
DQogICAgLQkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9s
X21vZCk7DQogICAgLQkJfQ0KICAgIC0JCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50
eXBlID09IEVfRVFVQUwgJiYNCiAgICAtCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xf
bW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgfHwNCiAgICAtCQkgICAgIChlMS0+
cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkp
KSB7DQogICAgLQkJCS8vIChhPSdtJykgfHwgKGE9J24nKSAtPiAoYSE9J3knKQ0KICAgIC0JCQly
ZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOw0KICAg
IC0JCX0NCiAgICAtCX0NCiAgICAtCWlmIChzeW0xLT50eXBlID09IFNfQk9PTEVBTiAmJiBzeW0x
ID09IHN5bTIpIHsNCiAgICAtCQlpZiAoKGUxLT50eXBlID09IEVfTk9UICYmIGUxLT5sZWZ0LmV4
cHItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wpIHx8DQogICAgLQkJ
ICAgIChlMi0+dHlwZSA9PSBFX05PVCAmJiBlMi0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9M
ICYmIGUxLT50eXBlID09IEVfU1lNQk9MKSkNCiAgICAtCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3lt
Ym9sKCZzeW1ib2xfeWVzKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlpZiAoREVCVUdfRVhQUikg
ew0KICAgIC0JCXByaW50Zigib3B0aW1pemUgKCIpOw0KICAgIC0JCWV4cHJfZnByaW50KGUxLCBz
dGRvdXQpOw0KICAgIC0JCXByaW50ZigiKSB8fCAoIik7DQogICAgLQkJZXhwcl9mcHJpbnQoZTIs
IHN0ZG91dCk7DQogICAgLQkJcHJpbnRmKCIpP1xuIik7DQogICAgLQl9DQogICAgLQlyZXR1cm4g
TlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHN0cnVjdCBleHByICpleHByX2pvaW5f
YW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQ0KICAgIC17DQogICAgLQlzdHJ1
Y3QgZXhwciAqdG1wOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7DQogICAgLQ0K
ICAgIC0JaWYgKGV4cHJfZXEoZTEsIGUyKSkNCiAgICAtCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsN
CiAgICAtCWlmIChlMS0+dHlwZSAhPSBFX0VRVUFMICYmIGUxLT50eXBlICE9IEVfVU5FUVVBTCAm
JiBlMS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMS0+dHlwZSAhPSBFX05PVCkNCiAgICAtCQlyZXR1
cm4gTlVMTDsNCiAgICAtCWlmIChlMi0+dHlwZSAhPSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVf
VU5FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMi0+dHlwZSAhPSBFX05PVCkNCiAg
ICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtCWlmIChlMS0+dHlwZSA9PSBFX05PVCkgew0KICAgIC0J
CXRtcCA9IGUxLT5sZWZ0LmV4cHI7DQogICAgLQkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYm
IHRtcC0+dHlwZSAhPSBFX1VORVFVQUwgJiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgIC0J
CQlyZXR1cm4gTlVMTDsNCiAgICAtCQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsNCiAgICAtCX0gZWxz
ZQ0KICAgIC0JCXN5bTEgPSBlMS0+bGVmdC5zeW07DQogICAgLQlpZiAoZTItPnR5cGUgPT0gRV9O
T1QpIHsNCiAgICAtCQlpZiAoZTItPmxlZnQuZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICAt
CQkJcmV0dXJuIE5VTEw7DQogICAgLQkJc3ltMiA9IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOw0K
ICAgIC0JfSBlbHNlDQogICAgLQkJc3ltMiA9IGUyLT5sZWZ0LnN5bTsNCiAgICAtCWlmIChzeW0x
ICE9IHN5bTIpDQogICAgLQkJcmV0dXJuIE5VTEw7DQogICAgLQlpZiAoc3ltMS0+dHlwZSAhPSBT
X0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNUQVRFKQ0KICAgIC0JCXJldHVybiBOVUxM
Ow0KICAgIC0NCiAgICAtCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0g
RV9FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fA0KICAgIC0JICAgIChl
Mi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF95ZXMpKQ0KICAgIC0JCS8vIChhKSAmJiAoYT0neScpIC0+IChhPSd5JykN
CiAgICAtCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVz
KTsNCiAgICAtDQogICAgLQlpZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09
IEVfVU5FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8DQogICAgLQkgICAg
KGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmln
aHQuc3ltID09ICZzeW1ib2xfbm8pKQ0KICAgIC0JCS8vIChhKSAmJiAoYSE9J24nKSAtPiAoYSkN
CiAgICAtCQlyZXR1cm4gZXhwcl9hbGxvY19zeW1ib2woc3ltMSk7DQogICAgLQ0KICAgIC0JaWYg
KChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJp
Z2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwNCiAgICAtCSAgICAoZTItPnR5cGUgPT0gRV9TWU1C
T0wgJiYgZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9t
b2QpKQ0KICAgIC0JCS8vIChhKSAmJiAoYSE9J20nKSAtPiAoYT0neScpDQogICAgLQkJcmV0dXJu
IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7DQogICAgLQ0KICAg
IC0JaWYgKHN5bTEtPnR5cGUgPT0gU19UUklTVEFURSkgew0KICAgIC0JCWlmIChlMS0+dHlwZSA9
PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCkgew0KICAgIC0JCQkvLyAoYT0nYicp
ICYmIChhIT0nYycpIC0+ICdiJz0nYycgPyAnbicgOiBhPSdiJw0KICAgIC0JCQlzeW0yID0gZTEt
PnJpZ2h0LnN5bTsNCiAgICAtCQkJaWYgKChlMi0+cmlnaHQuc3ltLT5mbGFncyAmIFNZTUJPTF9D
T05TVCkgJiYgKHN5bTItPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkNCiAgICAtCQkJCXJldHVybiBz
eW0yICE9IGUyLT5yaWdodC5zeW0gPyBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgc3lt
MikNCiAgICAtCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsNCiAg
ICAtCQl9DQogICAgLQkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSA9PSBF
X0VRVUFMKSB7DQogICAgLQkJCS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICdu
JyA6IGE9J2InDQogICAgLQkJCXN5bTIgPSBlMi0+cmlnaHQuc3ltOw0KICAgIC0JCQlpZiAoKGUx
LT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSAmJiAoc3ltMi0+ZmxhZ3MgJiBTWU1C
T0xfQ09OU1QpKQ0KICAgIC0JCQkJcmV0dXJuIHN5bTIgIT0gZTEtPnJpZ2h0LnN5bSA/IGV4cHJf
YWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCBzeW0yKQ0KICAgIC0JCQkJCQkJICAgICA6IGV4cHJf
YWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOw0KICAgIC0JCX0NCiAgICAtCQlpZiAoZTEtPnR5cGUg
PT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJg0KICAgIC0JCQkgICAoKGUx
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25v
KSB8fA0KICAgIC0JCQkgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmln
aHQuc3ltID09ICZzeW1ib2xfeWVzKSkpDQogICAgLQkJCS8vIChhIT0neScpICYmIChhIT0nbicp
IC0+IChhPSdtJykNCiAgICAtCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0x
LCAmc3ltYm9sX21vZCk7DQogICAgLQ0KICAgIC0JCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwg
JiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmDQogICAgLQkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9
PSAmc3ltYm9sX3llcyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fA0KICAgIC0J
CQkgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAm
c3ltYm9sX3llcykpKQ0KICAgIC0JCQkvLyAoYSE9J3knKSAmJiAoYSE9J20nKSAtPiAoYT0nbicp
DQogICAgLQkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF9u
byk7DQogICAgLQ0KICAgIC0JCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUg
PT0gRV9VTkVRVUFMICYmDQogICAgLQkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21v
ZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8DQogICAgLQkJCSAgICAoZTEtPnJp
Z2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkN
CiAgICAtCQkJLy8gKGEhPSdtJykgJiYgKGEhPSduJykgLT4gKGE9J20nKQ0KICAgIC0JCQlyZXR1
cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsNCiAgICAtDQog
ICAgLQkJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYm
IGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8DQogICAgLQkJICAgIChlMi0+dHlwZSA9
PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5
bWJvbF9tb2QpIHx8DQogICAgLQkJICAgIChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlw
ZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgfHwNCiAgICAt
CQkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBl
MS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkNCiAgICAtCQkJcmV0dXJuIE5VTEw7DQogICAg
LQl9DQogICAgLQ0KICAgIC0JaWYgKERFQlVHX0VYUFIpIHsNCiAgICAtCQlwcmludGYoIm9wdGlt
aXplICgiKTsNCiAgICAtCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsNCiAgICAtCQlwcmludGYo
IikgJiYgKCIpOw0KICAgIC0JCWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOw0KICAgIC0JCXByaW50
ZigiKT9cbiIpOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQog
ICAgLXN0YXRpYyB2b2lkIGV4cHJfZWxpbWluYXRlX2R1cHMxKGVudW0gZXhwcl90eXBlIHR5cGUs
IHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikNCiAgICAtew0KICAgIC0jZGVm
aW5lIGUxICgqZXAxKQ0KICAgIC0jZGVmaW5lIGUyICgqZXAyKQ0KICAgIC0Jc3RydWN0IGV4cHIg
KnRtcDsNCiAgICAtDQogICAgLQlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgew0KICAgIC0JCWV4cHJf
ZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOw0KICAgIC0JCWV4cHJf
ZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsNCiAgICAtCQlyZXR1
cm47DQogICAgLQl9DQogICAgLQlpZiAoZTItPnR5cGUgPT0gdHlwZSkgew0KICAgIC0JCWV4cHJf
ZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOw0KICAgIC0JCWV4cHJf
ZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsNCiAgICAtCQlyZXR1
cm47DQogICAgLQl9DQogICAgLQlpZiAoZTEgPT0gZTIpDQogICAgLQkJcmV0dXJuOw0KICAgIC0N
CiAgICAtCXN3aXRjaCAoZTEtPnR5cGUpIHsNCiAgICAtCWNhc2UgRV9PUjogY2FzZSBFX0FORDoN
CiAgICAtCQlleHByX2VsaW1pbmF0ZV9kdXBzMShlMS0+dHlwZSwgJmUxLCAmZTEpOw0KICAgIC0J
ZGVmYXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3dpdGNoICh0eXBlKSB7
DQogICAgLQljYXNlIEVfT1I6DQogICAgLQkJdG1wID0gZXhwcl9qb2luX29yKGUxLCBlMik7DQog
ICAgLQkJaWYgKHRtcCkgew0KICAgIC0JCQlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUoZTIpOw0K
ICAgIC0JCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOw0KICAgIC0JCQllMiA9
IHRtcDsNCiAgICAtCQkJdHJhbnNfY291bnQrKzsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQog
ICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCXRtcCA9IGV4cHJfam9pbl9hbmQoZTEsIGUyKTsNCiAg
ICAtCQlpZiAodG1wKSB7DQogICAgLQkJCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7DQog
ICAgLQkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOw0KICAgIC0JCQllMiA9
IHRtcDsNCiAgICAtCQkJdHJhbnNfY291bnQrKzsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQog
ICAgLQlkZWZhdWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAgICAtI3VuZGVmIGUxDQogICAgLSN1
bmRlZiBlMg0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBleHByX2VsaW1pbmF0ZV9k
dXBzMihlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIg
KiplcDIpDQogICAgLXsNCiAgICAtI2RlZmluZSBlMSAoKmVwMSkNCiAgICAtI2RlZmluZSBlMiAo
KmVwMikNCiAgICAtCXN0cnVjdCBleHByICp0bXAsICp0bXAxLCAqdG1wMjsNCiAgICAtDQogICAg
LQlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgew0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMyKHR5
cGUsICZlMS0+bGVmdC5leHByLCAmZTIpOw0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMyKHR5
cGUsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAg
LQlpZiAoZTItPnR5cGUgPT0gdHlwZSkgew0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMyKHR5
cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOw0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMyKHR5
cGUsICZlMSwgJmUyLT5yaWdodC5leHByKTsNCiAgICAtCX0NCiAgICAtCWlmIChlMSA9PSBlMikN
CiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0Jc3dpdGNoIChlMS0+dHlwZSkgew0KICAgIC0J
Y2FzZSBFX09SOg0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMyKGUxLT50eXBlLCAmZTEsICZl
MSk7DQogICAgLQkJLy8gKEZPTyB8fCBCQVIpICYmICghRk9PICYmICFCQVIpIC0+IG4NCiAgICAt
CQl0bXAxID0gZXhwcl90cmFuc2Zvcm0oZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShl
MSkpKTsNCiAgICAtCQl0bXAyID0gZXhwcl9jb3B5KGUyKTsNCiAgICAtCQl0bXAgPSBleHByX2V4
dHJhY3RfZXFfYW5kKCZ0bXAxLCAmdG1wMik7DQogICAgLQkJaWYgKGV4cHJfaXNfeWVzKHRtcDEp
KSB7DQogICAgLQkJCWV4cHJfZnJlZShlMSk7DQogICAgLQkJCWUxID0gZXhwcl9hbGxvY19zeW1i
b2woJnN5bWJvbF9ubyk7DQogICAgLQkJCXRyYW5zX2NvdW50Kys7DQogICAgLQkJfQ0KICAgIC0J
CWV4cHJfZnJlZSh0bXAyKTsNCiAgICAtCQlleHByX2ZyZWUodG1wMSk7DQogICAgLQkJZXhwcl9m
cmVlKHRtcCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCWV4cHJf
ZWxpbWluYXRlX2R1cHMyKGUxLT50eXBlLCAmZTEsICZlMSk7DQogICAgLQkJLy8gKEZPTyAmJiBC
QVIpIHx8ICghRk9PIHx8ICFCQVIpIC0+IHkNCiAgICAtCQl0bXAxID0gZXhwcl90cmFuc2Zvcm0o
ZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlMSkpKTsNCiAgICAtCQl0bXAyID0gZXhw
cl9jb3B5KGUyKTsNCiAgICAtCQl0bXAgPSBleHByX2V4dHJhY3RfZXFfb3IoJnRtcDEsICZ0bXAy
KTsNCiAgICAtCQlpZiAoZXhwcl9pc19ubyh0bXAxKSkgew0KICAgIC0JCQlleHByX2ZyZWUoZTEp
Ow0KICAgIC0JCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsNCiAgICAtCQkJ
dHJhbnNfY291bnQrKzsNCiAgICAtCQl9DQogICAgLQkJZXhwcl9mcmVlKHRtcDIpOw0KICAgIC0J
CWV4cHJfZnJlZSh0bXAxKTsNCiAgICAtCQlleHByX2ZyZWUodG1wKTsNCiAgICAtCQlicmVhazsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0jdW5kZWYgZTENCiAgICAt
I3VuZGVmIGUyDQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBleHByICpleHByX2VsaW1pbmF0
ZV9kdXBzKHN0cnVjdCBleHByICplKQ0KICAgIC17DQogICAgLQlpbnQgb2xkY291bnQ7DQogICAg
LQlpZiAoIWUpDQogICAgLQkJcmV0dXJuIGU7DQogICAgLQ0KICAgIC0Jb2xkY291bnQgPSB0cmFu
c19jb3VudDsNCiAgICAtCXdoaWxlICgxKSB7DQogICAgLQkJdHJhbnNfY291bnQgPSAwOw0KICAg
IC0JCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgIC0JCWNhc2UgRV9PUjogY2FzZSBFX0FORDoNCiAg
ICAtCQkJZXhwcl9lbGltaW5hdGVfZHVwczEoZS0+dHlwZSwgJmUsICZlKTsNCiAgICAtCQkJZXhw
cl9lbGltaW5hdGVfZHVwczIoZS0+dHlwZSwgJmUsICZlKTsNCiAgICAtCQlkZWZhdWx0Og0KICAg
IC0JCQk7DQogICAgLQkJfQ0KICAgIC0JCWlmICghdHJhbnNfY291bnQpDQogICAgLQkJCWJyZWFr
Ow0KICAgIC0JCWUgPSBleHByX2VsaW1pbmF0ZV95bihlKTsNCiAgICAtCX0NCiAgICAtCXRyYW5z
X2NvdW50ID0gb2xkY291bnQ7DQogICAgLQlyZXR1cm4gZTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
c3RydWN0IGV4cHIgKmV4cHJfdHJhbnNmb3JtKHN0cnVjdCBleHByICplKQ0KICAgIC17DQogICAg
LQlzdHJ1Y3QgZXhwciAqdG1wOw0KICAgIC0NCiAgICAtCWlmICghZSkNCiAgICAtCQlyZXR1cm4g
TlVMTDsNCiAgICAtCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAg
IC0JY2FzZSBFX1VORVFVQUw6DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAgIC0JY2FzZSBFX0xJ
U1Q6DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCWUtPmxlZnQuZXhwciA9
IGV4cHJfdHJhbnNmb3JtKGUtPmxlZnQuZXhwcik7DQogICAgLQkJZS0+cmlnaHQuZXhwciA9IGV4
cHJfdHJhbnNmb3JtKGUtPnJpZ2h0LmV4cHIpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXN3aXRj
aCAoZS0+dHlwZSkgew0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAgIC0JCWlmIChlLT5sZWZ0LnN5
bS0+dHlwZSAhPSBTX0JPT0xFQU4pDQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWlmIChlLT5yaWdo
dC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAgIC0JCQllLT50eXBlID0gRV9OT1Q7DQogICAgLQkJ
CWUtPmxlZnQuZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKGUtPmxlZnQuc3ltKTsNCiAgICAtCQkJ
ZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWlm
IChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsNCiAgICAtCQkJcHJpbnRmKCJib29sZWFu
IHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVzdCBmb3JjZWQgdG8gJ24nXG4iLCBlLT5sZWZ0
LnN5bS0+bmFtZSk7DQogICAgLQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICAtCQkJZS0+bGVm
dC5zeW0gPSAmc3ltYm9sX25vOw0KICAgIC0JCQllLT5yaWdodC5zeW0gPSBOVUxMOw0KICAgIC0J
CQlicmVhazsNCiAgICAtCQl9DQogICAgLQkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3ll
cykgew0KICAgIC0JCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCWUtPnJpZ2h0LnN5bSA9
IE5VTEw7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAtCWNh
c2UgRV9VTkVRVUFMOg0KICAgIC0JCWlmIChlLT5sZWZ0LnN5bS0+dHlwZSAhPSBTX0JPT0xFQU4p
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykg
ew0KICAgIC0JCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCWUtPnJpZ2h0LnN5bSA9IE5V
TEw7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlpZiAoZS0+cmlnaHQuc3ltID09
ICZzeW1ib2xfbW9kKSB7DQogICAgLQkJCXByaW50ZigiYm9vbGVhbiBzeW1ib2wgJXMgdGVzdGVk
IGZvciAnbSc/IHRlc3QgZm9yY2VkIHRvICd5J1xuIiwgZS0+bGVmdC5zeW0tPm5hbWUpOw0KICAg
IC0JCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95
ZXM7DQogICAgLQkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CX0NCiAgICAtCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7DQogICAgLQkJCWUt
PnR5cGUgPSBFX05PVDsNCiAgICAtCQkJZS0+bGVmdC5leHByID0gZXhwcl9hbGxvY19zeW1ib2wo
ZS0+bGVmdC5zeW0pOw0KICAgIC0JCQllLT5yaWdodC5zeW0gPSBOVUxMOw0KICAgIC0JCQlicmVh
azsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0JCXN3
aXRjaCAoZS0+bGVmdC5leHByLT50eXBlKSB7DQogICAgLQkJY2FzZSBFX05PVDoNCiAgICAtCQkJ
Ly8gISFhIC0+IGENCiAgICAtCQkJdG1wID0gZS0+bGVmdC5leHByLT5sZWZ0LmV4cHI7DQogICAg
LQkJCWZyZWUoZS0+bGVmdC5leHByKTsNCiAgICAtCQkJZnJlZShlKTsNCiAgICAtCQkJZSA9IHRt
cDsNCiAgICAtCQkJZSA9IGV4cHJfdHJhbnNmb3JtKGUpOw0KICAgIC0JCQlicmVhazsNCiAgICAt
CQljYXNlIEVfRVFVQUw6DQogICAgLQkJY2FzZSBFX1VORVFVQUw6DQogICAgLQkJCS8vICFhPSd4
JyAtPiBhIT0neCcNCiAgICAtCQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgIC0JCQlmcmVlKGUp
Ow0KICAgIC0JCQllID0gdG1wOw0KICAgIC0JCQllLT50eXBlID0gZS0+dHlwZSA9PSBFX0VRVUFM
ID8gRV9VTkVRVUFMIDogRV9FUVVBTDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBFX09S
Og0KICAgIC0JCQkvLyAhKGEgfHwgYikgLT4gIWEgJiYgIWINCiAgICAtCQkJdG1wID0gZS0+bGVm
dC5leHByOw0KICAgIC0JCQllLT50eXBlID0gRV9BTkQ7DQogICAgLQkJCWUtPnJpZ2h0LmV4cHIg
PSBleHByX2FsbG9jX29uZShFX05PVCwgdG1wLT5yaWdodC5leHByKTsNCiAgICAtCQkJdG1wLT50
eXBlID0gRV9OT1Q7DQogICAgLQkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgLQkJCWUg
PSBleHByX3RyYW5zZm9ybShlKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBFX0FORDoN
CiAgICAtCQkJLy8gIShhICYmIGIpIC0+ICFhIHx8ICFiDQogICAgLQkJCXRtcCA9IGUtPmxlZnQu
ZXhwcjsNCiAgICAtCQkJZS0+dHlwZSA9IEVfT1I7DQogICAgLQkJCWUtPnJpZ2h0LmV4cHIgPSBl
eHByX2FsbG9jX29uZShFX05PVCwgdG1wLT5yaWdodC5leHByKTsNCiAgICAtCQkJdG1wLT50eXBl
ID0gRV9OT1Q7DQogICAgLQkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgLQkJCWUgPSBl
eHByX3RyYW5zZm9ybShlKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBFX1NZTUJPTDoN
CiAgICAtCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAg
ICAtCQkJCS8vICEneScgLT4gJ24nDQogICAgLQkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7DQogICAg
LQkJCQlmcmVlKGUpOw0KICAgIC0JCQkJZSA9IHRtcDsNCiAgICAtCQkJCWUtPnR5cGUgPSBFX1NZ
TUJPTDsNCiAgICAtCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0JCQl9DQogICAgLQkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1i
b2xfbW9kKSB7DQogICAgLQkJCQkvLyAhJ20nIC0+ICdtJw0KICAgIC0JCQkJdG1wID0gZS0+bGVm
dC5leHByOw0KICAgIC0JCQkJZnJlZShlKTsNCiAgICAtCQkJCWUgPSB0bXA7DQogICAgLQkJCQll
LT50eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbW9kOw0K
ICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVm
dC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAgIC0JCQkJLy8gISduJyAtPiAneScNCiAgICAtCQkJ
CXRtcCA9IGUtPmxlZnQuZXhwcjsNCiAgICAtCQkJCWZyZWUoZSk7DQogICAgLQkJCQllID0gdG1w
Ow0KICAgIC0JCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0KICAgIC0JCQkJZS0+bGVmdC5zeW0gPSAm
c3ltYm9sX3llczsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCTsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQogICAg
LQlkZWZhdWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAgICAtCXJldHVybiBlOw0KICAgIC19DQog
ICAgLQ0KICAgIC1pbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3Ry
dWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlpZiAoIWRlcCkNCiAgICAtCQlyZXR1cm4g
MDsNCiAgICAtDQogICAgLQlzd2l0Y2ggKGRlcC0+dHlwZSkgew0KICAgIC0JY2FzZSBFX0FORDoN
CiAgICAtCWNhc2UgRV9PUjoNCiAgICAtCQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVw
LT5sZWZ0LmV4cHIsIHN5bSkgfHwNCiAgICAtCQkgICAgICAgZXhwcl9jb250YWluc19zeW1ib2wo
ZGVwLT5yaWdodC5leHByLCBzeW0pOw0KICAgIC0JY2FzZSBFX1NZTUJPTDoNCiAgICAtCQlyZXR1
cm4gZGVwLT5sZWZ0LnN5bSA9PSBzeW07DQogICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQljYXNl
IEVfVU5FUVVBTDoNCiAgICAtCQlyZXR1cm4gZGVwLT5sZWZ0LnN5bSA9PSBzeW0gfHwNCiAgICAt
CQkgICAgICAgZGVwLT5yaWdodC5zeW0gPT0gc3ltOw0KICAgIC0JY2FzZSBFX05PVDoNCiAgICAt
CQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSk7DQogICAg
LQlkZWZhdWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAgICAtCXJldHVybiAwOw0KICAgIC19DQog
ICAgLQ0KICAgIC1ib29sIGV4cHJfZGVwZW5kc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3Ry
dWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlpZiAoIWRlcCkNCiAgICAtCQlyZXR1cm4g
ZmFsc2U7DQogICAgLQ0KICAgIC0Jc3dpdGNoIChkZXAtPnR5cGUpIHsNCiAgICAtCWNhc2UgRV9B
TkQ6DQogICAgLQkJcmV0dXJuIGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5
bSkgfHwNCiAgICAtCQkgICAgICAgZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAtPnJpZ2h0LmV4cHIs
IHN5bSk7DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAgIC0JCXJldHVybiBkZXAtPmxlZnQuc3lt
ID09IHN5bTsNCiAgICAtCWNhc2UgRV9FUVVBTDoNCiAgICAtCQlpZiAoZGVwLT5sZWZ0LnN5bSA9
PSBzeW0pIHsNCiAgICAtCQkJaWYgKGRlcC0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzIHx8IGRl
cC0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKQ0KICAgIC0JCQkJcmV0dXJuIHRydWU7DQogICAg
LQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX1VORVFVQUw6DQogICAgLQkJaWYgKGRl
cC0+bGVmdC5zeW0gPT0gc3ltKSB7DQogICAgLQkJCWlmIChkZXAtPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX25vKQ0KICAgIC0JCQkJcmV0dXJuIHRydWU7DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0K
ICAgIC0JZGVmYXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLSAJcmV0dXJuIGZhbHNlOw0K
ICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9leHRyYWN0X2VxX2FuZChzdHJ1
Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpDQogICAgLXsNCiAgICAtCXN0cnVjdCBl
eHByICp0bXAgPSBOVUxMOw0KICAgIC0JZXhwcl9leHRyYWN0X2VxKEVfQU5ELCAmdG1wLCBlcDEs
IGVwMik7DQogICAgLQlpZiAodG1wKSB7DQogICAgLQkJKmVwMSA9IGV4cHJfZWxpbWluYXRlX3lu
KCplcDEpOw0KICAgIC0JCSplcDIgPSBleHByX2VsaW1pbmF0ZV95bigqZXAyKTsNCiAgICAtCX0N
CiAgICAtCXJldHVybiB0bXA7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBleHByICpleHBy
X2V4dHJhY3RfZXFfb3Ioc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQ0KICAg
IC17DQogICAgLQlzdHJ1Y3QgZXhwciAqdG1wID0gTlVMTDsNCiAgICAtCWV4cHJfZXh0cmFjdF9l
cShFX09SLCAmdG1wLCBlcDEsIGVwMik7DQogICAgLQlpZiAodG1wKSB7DQogICAgLQkJKmVwMSA9
IGV4cHJfZWxpbWluYXRlX3luKCplcDEpOw0KICAgIC0JCSplcDIgPSBleHByX2VsaW1pbmF0ZV95
bigqZXAyKTsNCiAgICAtCX0NCiAgICAtCXJldHVybiB0bXA7DQogICAgLX0NCiAgICAtDQogICAg
LXZvaWQgZXhwcl9leHRyYWN0X2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoq
ZXAsIHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikNCiAgICAtew0KICAgIC0j
ZGVmaW5lIGUxICgqZXAxKQ0KICAgIC0jZGVmaW5lIGUyICgqZXAyKQ0KICAgIC0JaWYgKGUxLT50
eXBlID09IHR5cGUpIHsNCiAgICAtCQlleHByX2V4dHJhY3RfZXEodHlwZSwgZXAsICZlMS0+bGVm
dC5leHByLCAmZTIpOw0KICAgIC0JCWV4cHJfZXh0cmFjdF9lcSh0eXBlLCBlcCwgJmUxLT5yaWdo
dC5leHByLCAmZTIpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtCWlmIChlMi0+dHlw
ZSA9PSB0eXBlKSB7DQogICAgLQkJZXhwcl9leHRyYWN0X2VxKHR5cGUsIGVwLCBlcDEsICZlMi0+
bGVmdC5leHByKTsNCiAgICAtCQlleHByX2V4dHJhY3RfZXEodHlwZSwgZXAsIGVwMSwgJmUyLT5y
aWdodC5leHByKTsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQlpZiAoZXhwcl9lcShl
MSwgZTIpKSB7DQogICAgLQkJKmVwID0gKmVwID8gZXhwcl9hbGxvY190d28odHlwZSwgKmVwLCBl
MSkgOiBlMTsNCiAgICAtCQlleHByX2ZyZWUoZTIpOw0KICAgIC0JCWlmICh0eXBlID09IEVfQU5E
KSB7DQogICAgLQkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOw0KICAgIC0J
CQllMiA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsNCiAgICAtCQl9IGVsc2UgaWYg
KHR5cGUgPT0gRV9PUikgew0KICAgIC0JCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xf
bm8pOw0KICAgIC0JCQllMiA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOw0KICAgIC0J
CX0NCiAgICAtCX0NCiAgICAtI3VuZGVmIGUxDQogICAgLSN1bmRlZiBlMg0KICAgIC19DQogICAg
LQ0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19jb21wYXJlKHN0cnVjdCBleHByICplLCBl
bnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0
cnVjdCBleHByICplMSwgKmUyOw0KICAgIC0NCiAgICAtCWlmICghZSkgew0KICAgIC0JCWUgPSBl
eHByX2FsbG9jX3N5bWJvbChzeW0pOw0KICAgIC0JCWlmICh0eXBlID09IEVfVU5FUVVBTCkNCiAg
ICAtCQkJZSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBlKTsNCiAgICAtCQlyZXR1cm4gZTsNCiAg
ICAtCX0NCiAgICAtCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgIC0JY2FzZSBFX0FORDoNCiAgICAt
CQllMSA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIEVfRVFVQUwsIHN5bSk7DQog
ICAgLQkJZTIgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+cmlnaHQuZXhwciwgRV9FUVVBTCwgc3lt
KTsNCiAgICAtCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQ0KICAgIC0JCQllID0gZXhwcl9hbGxv
Y190d28oRV9BTkQsIGUxLCBlMik7DQogICAgLQkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQ0KICAg
IC0JCQllID0gZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKTsNCiAgICAtCQlpZiAodHlwZSA9
PSBFX1VORVFVQUwpDQogICAgLQkJCWUgPSBleHByX2FsbG9jX29uZShFX05PVCwgZSk7DQogICAg
LQkJcmV0dXJuIGU7DQogICAgLQljYXNlIEVfT1I6DQogICAgLQkJZTEgPSBleHByX3RyYW5zX2Nv
bXBhcmUoZS0+bGVmdC5leHByLCBFX0VRVUFMLCBzeW0pOw0KICAgIC0JCWUyID0gZXhwcl90cmFu
c19jb21wYXJlKGUtPnJpZ2h0LmV4cHIsIEVfRVFVQUwsIHN5bSk7DQogICAgLQkJaWYgKHN5bSA9
PSAmc3ltYm9sX3llcykNCiAgICAtCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsIGUxLCBlMik7
DQogICAgLQkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQ0KICAgIC0JCQllID0gZXhwcl9hbGxvY190
d28oRV9BTkQsIGUxLCBlMik7DQogICAgLQkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQ0KICAgIC0J
CQllID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGUpOw0KICAgIC0JCXJldHVybiBlOw0KICAgIC0J
Y2FzZSBFX05PVDoNCiAgICAtCQlyZXR1cm4gZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhw
ciwgdHlwZSA9PSBFX0VRVUFMID8gRV9VTkVRVUFMIDogRV9FUVVBTCwgc3ltKTsNCiAgICAtCWNh
c2UgRV9VTkVRVUFMOg0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAgIC0JCWlmICh0eXBlID09IEVf
RVFVQUwpIHsNCiAgICAtCQkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykNCiAgICAtCQkJCXJldHVy
biBleHByX2NvcHkoZSk7DQogICAgLQkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgLQkJ
CQlyZXR1cm4gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7DQogICAgLQkJCWlmIChzeW0g
PT0gJnN5bWJvbF9ubykNCiAgICAtCQkJCXJldHVybiBleHByX2FsbG9jX29uZShFX05PVCwgZXhw
cl9jb3B5KGUpKTsNCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQlpZiAoc3ltID09ICZzeW1ib2xf
eWVzKQ0KICAgIC0JCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2NvcHkoZSkp
Ow0KICAgIC0JCQlpZiAoc3ltID09ICZzeW1ib2xfbW9kKQ0KICAgIC0JCQkJcmV0dXJuIGV4cHJf
YWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsNCiAgICAtCQkJaWYgKHN5bSA9PSAmc3ltYm9sX25v
KQ0KICAgIC0JCQkJcmV0dXJuIGV4cHJfY29weShlKTsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7
DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAgIC0JCXJldHVybiBleHByX2FsbG9jX2NvbXAodHlw
ZSwgZS0+bGVmdC5zeW0sIHN5bSk7DQogICAgLQljYXNlIEVfTElTVDoNCiAgICAtCWNhc2UgRV9S
QU5HRToNCiAgICAtCWNhc2UgRV9OT05FOg0KICAgIC0JCS8qIHBhbmljICovOw0KICAgIC0JfQ0K
ICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLXRyaXN0YXRlIGV4cHJfY2Fs
Y192YWx1ZShzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0JdHJpc3RhdGUgdmFsMSwgdmFs
MjsNCiAgICAtCWNvbnN0IGNoYXIgKnN0cjEsICpzdHIyOw0KICAgIC0NCiAgICAtCWlmICghZSkN
CiAgICAtCQlyZXR1cm4geWVzOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoZS0+dHlwZSkgew0KICAg
IC0JY2FzZSBFX1NZTUJPTDoNCiAgICAtCQlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5bSk7DQog
ICAgLQkJcmV0dXJuIGUtPmxlZnQuc3ltLT5jdXJyLnRyaTsNCiAgICAtCWNhc2UgRV9BTkQ6DQog
ICAgLQkJdmFsMSA9IGV4cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOw0KICAgIC0JCXZhbDIg
PSBleHByX2NhbGNfdmFsdWUoZS0+cmlnaHQuZXhwcik7DQogICAgLQkJcmV0dXJuIEVYUFJfQU5E
KHZhbDEsIHZhbDIpOw0KICAgIC0JY2FzZSBFX09SOg0KICAgIC0JCXZhbDEgPSBleHByX2NhbGNf
dmFsdWUoZS0+bGVmdC5leHByKTsNCiAgICAtCQl2YWwyID0gZXhwcl9jYWxjX3ZhbHVlKGUtPnJp
Z2h0LmV4cHIpOw0KICAgIC0JCXJldHVybiBFWFBSX09SKHZhbDEsIHZhbDIpOw0KICAgIC0JY2Fz
ZSBFX05PVDoNCiAgICAtCQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7DQog
ICAgLQkJcmV0dXJuIEVYUFJfTk9UKHZhbDEpOw0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAgIC0J
CXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsNCiAgICAtCQlzeW1fY2FsY192YWx1ZShlLT5y
aWdodC5zeW0pOw0KICAgIC0JCXN0cjEgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShlLT5sZWZ0LnN5
bSk7DQogICAgLQkJc3RyMiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPnJpZ2h0LnN5bSk7DQog
ICAgLQkJcmV0dXJuICFzdHJjbXAoc3RyMSwgc3RyMikgPyB5ZXMgOiBubzsNCiAgICAtCWNhc2Ug
RV9VTkVRVUFMOg0KICAgIC0JCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsNCiAgICAtCQlz
eW1fY2FsY192YWx1ZShlLT5yaWdodC5zeW0pOw0KICAgIC0JCXN0cjEgPSBzeW1fZ2V0X3N0cmlu
Z192YWx1ZShlLT5sZWZ0LnN5bSk7DQogICAgLQkJc3RyMiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVl
KGUtPnJpZ2h0LnN5bSk7DQogICAgLQkJcmV0dXJuICFzdHJjbXAoc3RyMSwgc3RyMikgPyBubyA6
IHllczsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJcHJpbnRmKCJleHByX2NhbGNfdmFsdWU6ICVk
P1xuIiwgZS0+dHlwZSk7DQogICAgLQkJcmV0dXJuIG5vOw0KICAgIC0JfQ0KICAgIC19DQogICAg
LQ0KICAgIC1pbnQgZXhwcl9jb21wYXJlX3R5cGUoZW51bSBleHByX3R5cGUgdDEsIGVudW0gZXhw
cl90eXBlIHQyKQ0KICAgIC17DQogICAgLSNpZiAwDQogICAgLQlyZXR1cm4gMTsNCiAgICAtI2Vs
c2UNCiAgICAtCWlmICh0MSA9PSB0MikNCiAgICAtCQlyZXR1cm4gMDsNCiAgICAtCXN3aXRjaCAo
dDEpIHsNCiAgICAtCWNhc2UgRV9FUVVBTDoNCiAgICAtCWNhc2UgRV9VTkVRVUFMOg0KICAgIC0J
CWlmICh0MiA9PSBFX05PVCkNCiAgICAtCQkJcmV0dXJuIDE7DQogICAgLQljYXNlIEVfTk9UOg0K
ICAgIC0JCWlmICh0MiA9PSBFX0FORCkNCiAgICAtCQkJcmV0dXJuIDE7DQogICAgLQljYXNlIEVf
QU5EOg0KICAgIC0JCWlmICh0MiA9PSBFX09SKQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCWNh
c2UgRV9PUjoNCiAgICAtCQlpZiAodDIgPT0gRV9MSVNUKQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAg
ICAtCWNhc2UgRV9MSVNUOg0KICAgIC0JCWlmICh0MiA9PSAwKQ0KICAgIC0JCQlyZXR1cm4gMTsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkJcmV0dXJuIC0xOw0KICAgIC0JfQ0KICAgIC0JcHJpbnRm
KCJbJWRndCVkP10iLCB0MSwgdDIpOw0KICAgIC0JcmV0dXJuIDA7DQogICAgLSNlbmRpZg0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW5saW5lIHN0cnVjdCBleHByICoNCiAgICAtZXhwcl9n
ZXRfbGVmdG1vc3Rfc3ltYm9sKGNvbnN0IHN0cnVjdCBleHByICplKQ0KICAgIC17DQogICAgLQ0K
ICAgIC0JaWYgKGUgPT0gTlVMTCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtDQogICAgLQl3
aGlsZSAoZS0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICAtCQllID0gZS0+bGVmdC5leHByOw0KICAg
IC0NCiAgICAtCXJldHVybiBleHByX2NvcHkoZSk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQog
ICAgLSAqIEdpdmVuIGV4cHJlc3Npb24gYGUxJyBhbmQgYGUyJywgcmV0dXJucyB0aGUgbGVhZiBv
ZiB0aGUgbG9uZ2VzdA0KICAgIC0gKiBzdWItZXhwcmVzc2lvbiBvZiBgZTEnIG5vdCBjb250YWlu
aW5nICdlMi4NCiAgICAtICovDQogICAgLXN0cnVjdCBleHByICpleHByX3NpbXBsaWZ5X3VubWV0
X2RlcChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikNCiAgICAtew0KICAgIC0Jc3Ry
dWN0IGV4cHIgKnJldDsNCiAgICAtDQogICAgLQlzd2l0Y2ggKGUxLT50eXBlKSB7DQogICAgLQlj
YXNlIEVfT1I6DQogICAgLQkJcmV0dXJuIGV4cHJfYWxsb2NfYW5kKA0KICAgIC0JCSAgICBleHBy
X3NpbXBsaWZ5X3VubWV0X2RlcChlMS0+bGVmdC5leHByLCBlMiksDQogICAgLQkJICAgIGV4cHJf
c2ltcGxpZnlfdW5tZXRfZGVwKGUxLT5yaWdodC5leHByLCBlMikpOw0KICAgIC0JY2FzZSBFX0FO
RDogew0KICAgIC0JCXN0cnVjdCBleHByICplOw0KICAgIC0JCWUgPSBleHByX2FsbG9jX2FuZChl
eHByX2NvcHkoZTEpLCBleHByX2NvcHkoZTIpKTsNCiAgICAtCQllID0gZXhwcl9lbGltaW5hdGVf
ZHVwcyhlKTsNCiAgICAtCQlyZXQgPSAoIWV4cHJfZXEoZSwgZTEpKSA/IGUxIDogTlVMTDsNCiAg
ICAtCQlleHByX2ZyZWUoZSk7DQogICAgLQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JZGVmYXVs
dDoNCiAgICAtCQlyZXQgPSBlMTsNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAg
LQlyZXR1cm4gZXhwcl9nZXRfbGVmdG1vc3Rfc3ltYm9sKHJldCk7DQogICAgLX0NCiAgICAtDQog
ICAgLXZvaWQgZXhwcl9wcmludChzdHJ1Y3QgZXhwciAqZSwgdm9pZCAoKmZuKSh2b2lkICosIHN0
cnVjdCBzeW1ib2wgKiwgY29uc3QgY2hhciAqKSwgdm9pZCAqZGF0YSwgaW50IHByZXZ0b2tlbikN
CiAgICAtew0KICAgIC0JaWYgKCFlKSB7DQogICAgLQkJZm4oZGF0YSwgTlVMTCwgInkiKTsNCiAg
ICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKGV4cHJfY29tcGFyZV90eXBl
KHByZXZ0b2tlbiwgZS0+dHlwZSkgPiAwKQ0KICAgIC0JCWZuKGRhdGEsIE5VTEwsICIoIik7DQog
ICAgLQlzd2l0Y2ggKGUtPnR5cGUpIHsNCiAgICAtCWNhc2UgRV9TWU1CT0w6DQogICAgLQkJaWYg
KGUtPmxlZnQuc3ltLT5uYW1lKQ0KICAgIC0JCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVm
dC5zeW0tPm5hbWUpOw0KICAgIC0JCWVsc2UNCiAgICAtCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9p
Y2U+Iik7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0JCWZuKGRhdGEs
IE5VTEwsICIhIik7DQogICAgLQkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBF
X05PVCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQkJaWYgKGUt
PmxlZnQuc3ltLT5uYW1lKQ0KICAgIC0JCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5z
eW0tPm5hbWUpOw0KICAgIC0JCWVsc2UNCiAgICAtCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+
Iik7DQogICAgLQkJZm4oZGF0YSwgTlVMTCwgIj0iKTsNCiAgICAtCQlmbihkYXRhLCBlLT5yaWdo
dC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVf
VU5FUVVBTDoNCiAgICAtCQlpZiAoZS0+bGVmdC5zeW0tPm5hbWUpDQogICAgLQkJCWZuKGRhdGEs
IGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAgLQkJZWxzZQ0KICAgIC0JCQlm
bihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsNCiAgICAtCQlmbihkYXRhLCBOVUxMLCAiIT0iKTsN
CiAgICAtCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAg
LQkJYnJlYWs7DQogICAgLQljYXNlIEVfT1I6DQogICAgLQkJZXhwcl9wcmludChlLT5sZWZ0LmV4
cHIsIGZuLCBkYXRhLCBFX09SKTsNCiAgICAtCQlmbihkYXRhLCBOVUxMLCAiIHx8ICIpOw0KICAg
IC0JCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEsIEVfT1IpOw0KICAgIC0JCWJy
ZWFrOw0KICAgIC0JY2FzZSBFX0FORDoNCiAgICAtCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwg
Zm4sIGRhdGEsIEVfQU5EKTsNCiAgICAtCQlmbihkYXRhLCBOVUxMLCAiICYmICIpOw0KICAgIC0J
CWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEsIEVfQU5EKTsNCiAgICAtCQlicmVh
azsNCiAgICAtCWNhc2UgRV9MSVNUOg0KICAgIC0JCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+
cmlnaHQuc3ltLT5uYW1lKTsNCiAgICAtCQlpZiAoZS0+bGVmdC5leHByKSB7DQogICAgLQkJCWZu
KGRhdGEsIE5VTEwsICIgXiAiKTsNCiAgICAtCQkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZu
LCBkYXRhLCBFX0xJU1QpOw0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgRV9S
QU5HRToNCiAgICAtCQlmbihkYXRhLCBOVUxMLCAiWyIpOw0KICAgIC0JCWZuKGRhdGEsIGUtPmxl
ZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAgLQkJZm4oZGF0YSwgTlVMTCwgIiAiKTsN
CiAgICAtCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAg
LQkJZm4oZGF0YSwgTlVMTCwgIl0iKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQog
ICAgLQkgIHsNCiAgICAtCQljaGFyIGJ1ZlszMl07DQogICAgLQkJc3ByaW50ZihidWYsICI8dW5r
bm93biB0eXBlICVkPiIsIGUtPnR5cGUpOw0KICAgIC0JCWZuKGRhdGEsIE5VTEwsIGJ1Zik7DQog
ICAgLQkJYnJlYWs7DQogICAgLQkgIH0NCiAgICAtCX0NCiAgICAtCWlmIChleHByX2NvbXBhcmVf
dHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkNCiAgICAtCQlmbihkYXRhLCBOVUxMLCAiKSIp
Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBleHByX3ByaW50X2ZpbGVfaGVscGVy
KHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQ0KICAgIC17
DQogICAgLQl4ZndyaXRlKHN0ciwgc3RybGVuKHN0ciksIDEsIGRhdGEpOw0KICAgIC19DQogICAg
LQ0KICAgIC12b2lkIGV4cHJfZnByaW50KHN0cnVjdCBleHByICplLCBGSUxFICpvdXQpDQogICAg
LXsNCiAgICAtCWV4cHJfcHJpbnQoZSwgZXhwcl9wcmludF9maWxlX2hlbHBlciwgb3V0LCBFX05P
TkUpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBleHByX3ByaW50X2dzdHJfaGVs
cGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQ0KICAg
IC17DQogICAgLQlzdHJ1Y3QgZ3N0ciAqZ3MgPSAoc3RydWN0IGdzdHIqKWRhdGE7DQogICAgLQlj
b25zdCBjaGFyICpzeW1fc3RyID0gTlVMTDsNCiAgICAtDQogICAgLQlpZiAoc3ltKQ0KICAgIC0J
CXN5bV9zdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0KICAgIC0NCiAgICAtCWlmIChn
cy0+bWF4X3dpZHRoKSB7DQogICAgLQkJdW5zaWduZWQgZXh0cmFfbGVuZ3RoID0gc3RybGVuKHN0
cik7DQogICAgLQkJY29uc3QgY2hhciAqbGFzdF9jciA9IHN0cnJjaHIoZ3MtPnMsICdcbicpOw0K
ICAgIC0JCXVuc2lnbmVkIGxhc3RfbGluZV9sZW5ndGg7DQogICAgLQ0KICAgIC0JCWlmIChzeW1f
c3RyKQ0KICAgIC0JCQlleHRyYV9sZW5ndGggKz0gNCArIHN0cmxlbihzeW1fc3RyKTsNCiAgICAt
DQogICAgLQkJaWYgKCFsYXN0X2NyKQ0KICAgIC0JCQlsYXN0X2NyID0gZ3MtPnM7DQogICAgLQ0K
ICAgIC0JCWxhc3RfbGluZV9sZW5ndGggPSBzdHJsZW4oZ3MtPnMpIC0gKGxhc3RfY3IgLSBncy0+
cyk7DQogICAgLQ0KICAgIC0JCWlmICgobGFzdF9saW5lX2xlbmd0aCArIGV4dHJhX2xlbmd0aCkg
PiBncy0+bWF4X3dpZHRoKQ0KICAgIC0JCQlzdHJfYXBwZW5kKGdzLCAiXFxcbiIpOw0KICAgIC0J
fQ0KICAgIC0NCiAgICAtCXN0cl9hcHBlbmQoZ3MsIHN0cik7DQogICAgLQlpZiAoc3ltICYmIHN5
bS0+dHlwZSAhPSBTX1VOS05PV04pDQogICAgLQkJc3RyX3ByaW50ZihncywgIiBbPSVzXSIsIHN5
bV9zdHIpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3Qg
ZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKQ0KICAgIC17DQogICAgLQlleHByX3ByaW50KGUsIGV4
cHJfcHJpbnRfZ3N0cl9oZWxwZXIsIGdzLCBFX05PTkUpOw0KICAgIC19DQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy9leHByLmggYi9zdXBwb3J0L2tjb25maWcvZXhwci5oDQogICAg
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggYmE2NjNlMS4uMDAwMDAwMA0KICAg
IC0tLSBhL3N1cHBvcnQva2NvbmZpZy9leHByLmgNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAg
LTEsMjM4ICswLDAgQEANCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu
IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0gKiBSZWxlYXNlZCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaWZu
ZGVmIEVYUFJfSA0KICAgIC0jZGVmaW5lIEVYUFJfSA0KICAgIC0NCiAgICAtI2lmZGVmIF9fY3Bs
dXNwbHVzDQogICAgLWV4dGVybiAiQyIgew0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpbmNs
dWRlIDxhc3NlcnQuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgLSNpbmNsdWRlICJs
aXN0LmgiDQogICAgLSNpZm5kZWYgX19jcGx1c3BsdXMNCiAgICAtI2luY2x1ZGUgPHN0ZGJvb2wu
aD4NCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC1zdHJ1Y3QgZmlsZSB7DQogICAgLQlzdHJ1Y3Qg
ZmlsZSAqbmV4dDsNCiAgICAtCXN0cnVjdCBmaWxlICpwYXJlbnQ7DQogICAgLQljb25zdCBjaGFy
ICpuYW1lOw0KICAgIC0JaW50IGxpbmVubzsNCiAgICAtfTsNCiAgICAtDQogICAgLXR5cGVkZWYg
ZW51bSB0cmlzdGF0ZSB7DQogICAgLQlubywgbW9kLCB5ZXMNCiAgICAtfSB0cmlzdGF0ZTsNCiAg
ICAtDQogICAgLWVudW0gZXhwcl90eXBlIHsNCiAgICAtCUVfTk9ORSwgRV9PUiwgRV9BTkQsIEVf
Tk9ULCBFX0VRVUFMLCBFX1VORVFVQUwsIEVfTElTVCwgRV9TWU1CT0wsIEVfUkFOR0UNCiAgICAt
fTsNCiAgICAtDQogICAgLXVuaW9uIGV4cHJfZGF0YSB7DQogICAgLQlzdHJ1Y3QgZXhwciAqZXhw
cjsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtfTsNCiAgICAtDQogICAgLXN0cnVj
dCBleHByIHsNCiAgICAtCWVudW0gZXhwcl90eXBlIHR5cGU7DQogICAgLQl1bmlvbiBleHByX2Rh
dGEgbGVmdCwgcmlnaHQ7DQogICAgLX07DQogICAgLQ0KICAgIC0jZGVmaW5lIEVYUFJfT1IoZGVw
MSwgZGVwMikJKCgoZGVwMSk+KGRlcDIpKT8oZGVwMSk6KGRlcDIpKQ0KICAgIC0jZGVmaW5lIEVY
UFJfQU5EKGRlcDEsIGRlcDIpCSgoKGRlcDEpPChkZXAyKSk/KGRlcDEpOihkZXAyKSkNCiAgICAt
I2RlZmluZSBFWFBSX05PVChkZXApCQkoMi0oZGVwKSkNCiAgICAtDQogICAgLSNkZWZpbmUgZXhw
cl9saXN0X2Zvcl9lYWNoX3N5bShsLCBlLCBzKSBcDQogICAgLQlmb3IgKGUgPSAobCk7IGUgJiYg
KHMgPSBlLT5yaWdodC5zeW0pOyBlID0gZS0+bGVmdC5leHByKQ0KICAgIC0NCiAgICAtc3RydWN0
IGV4cHJfdmFsdWUgew0KICAgIC0Jc3RydWN0IGV4cHIgKmV4cHI7DQogICAgLQl0cmlzdGF0ZSB0
cmk7DQogICAgLX07DQogICAgLQ0KICAgIC1zdHJ1Y3Qgc3ltYm9sX3ZhbHVlIHsNCiAgICAtCXZv
aWQgKnZhbDsNCiAgICAtCXRyaXN0YXRlIHRyaTsNCiAgICAtfTsNCiAgICAtDQogICAgLWVudW0g
c3ltYm9sX3R5cGUgew0KICAgIC0JU19VTktOT1dOLCBTX0JPT0xFQU4sIFNfVFJJU1RBVEUsIFNf
SU5ULCBTX0hFWCwgU19TVFJJTkcsIFNfT1RIRVINCiAgICAtfTsNCiAgICAtDQogICAgLS8qIGVu
dW0gdmFsdWVzIGFyZSB1c2VkIGFzIGluZGV4IHRvIHN5bWJvbC5kZWZbXSAqLw0KICAgIC1lbnVt
IHsNCiAgICAtCVNfREVGX1VTRVIsCQkvKiBtYWluIHVzZXIgdmFsdWUgKi8NCiAgICAtCVNfREVG
X0FVVE8sCQkvKiB2YWx1ZXMgcmVhZCBmcm9tIGF1dG8uY29uZiAqLw0KICAgIC0JU19ERUZfREVG
MywJCS8qIFJlc2VydmVkIGZvciBVSSB1c2FnZSAqLw0KICAgIC0JU19ERUZfREVGNCwJCS8qIFJl
c2VydmVkIGZvciBVSSB1c2FnZSAqLw0KICAgIC0JU19ERUZfQ09VTlQNCiAgICAtfTsNCiAgICAt
DQogICAgLXN0cnVjdCBzeW1ib2wgew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqbmV4dDsNCiAgICAt
CWNoYXIgKm5hbWU7DQogICAgLQllbnVtIHN5bWJvbF90eXBlIHR5cGU7DQogICAgLQlzdHJ1Y3Qg
c3ltYm9sX3ZhbHVlIGN1cnI7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIGRlZltTX0RFRl9D
T1VOVF07DQogICAgLQl0cmlzdGF0ZSB2aXNpYmxlOw0KICAgIC0JaW50IGZsYWdzOw0KICAgIC0J
c3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3RydWN0IGV4cHJfdmFsdWUgZGlyX2RlcDsN
CiAgICAtCXN0cnVjdCBleHByX3ZhbHVlIHJldl9kZXA7DQogICAgLX07DQogICAgLQ0KICAgIC0j
ZGVmaW5lIGZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIGZvciAoaSA9IDA7IGkgPCBTWU1CT0xfSEFT
SFNJWkU7IGkrKykgZm9yIChzeW0gPSBzeW1ib2xfaGFzaFtpXTsgc3ltOyBzeW0gPSBzeW0tPm5l
eHQpIGlmIChzeW0tPnR5cGUgIT0gU19PVEhFUikNCiAgICAtDQogICAgLSNkZWZpbmUgU1lNQk9M
X0NPTlNUICAgICAgMHgwMDAxICAvKiBzeW1ib2wgaXMgY29uc3QgKi8NCiAgICAtI2RlZmluZSBT
WU1CT0xfQ0hFQ0sgICAgICAweDAwMDggIC8qIHVzZWQgZHVyaW5nIGRlcGVuZGVuY3kgY2hlY2tp
bmcgKi8NCiAgICAtI2RlZmluZSBTWU1CT0xfQ0hPSUNFICAgICAweDAwMTAgIC8qIHN0YXJ0IG9m
IGEgY2hvaWNlIGJsb2NrIChudWxsIG5hbWUpICovDQogICAgLSNkZWZpbmUgU1lNQk9MX0NIT0lD
RVZBTCAgMHgwMDIwICAvKiB1c2VkIGFzIGEgdmFsdWUgaW4gYSBjaG9pY2UgYmxvY2sgKi8NCiAg
ICAtI2RlZmluZSBTWU1CT0xfVkFMSUQgICAgICAweDAwODAgIC8qIHNldCB3aGVuIHN5bWJvbC5j
dXJyIGlzIGNhbGN1bGF0ZWQgKi8NCiAgICAtI2RlZmluZSBTWU1CT0xfT1BUSU9OQUwgICAweDAx
MDAgIC8qIGNob2ljZSBpcyBvcHRpb25hbCAtIHZhbHVlcyBjYW4gYmUgJ24nICovDQogICAgLSNk
ZWZpbmUgU1lNQk9MX1dSSVRFICAgICAgMHgwMjAwICAvKiB3cml0ZSBzeW1ib2wgdG8gZmlsZSAo
S0NPTkZJR19DT05GSUcpICovDQogICAgLSNkZWZpbmUgU1lNQk9MX0NIQU5HRUQgICAgMHgwNDAw
ICAvKiA/ICovDQogICAgLSNkZWZpbmUgU1lNQk9MX0FVVE8gICAgICAgMHgxMDAwICAvKiB2YWx1
ZSBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlICovDQogICAgLSNkZWZpbmUgU1lNQk9MX0NIRUNL
RUQgICAgMHgyMDAwICAvKiB1c2VkIGR1cmluZyBkZXBlbmRlbmN5IGNoZWNraW5nICovDQogICAg
LSNkZWZpbmUgU1lNQk9MX1dBUk5FRCAgICAgMHg4MDAwICAvKiB3YXJuaW5nIGhhcyBiZWVuIGlz
c3VlZCAqLw0KICAgIC0NCiAgICAtLyogU2V0IHdoZW4gc3ltYm9sLmRlZltdIGlzIHVzZWQgKi8N
CiAgICAtI2RlZmluZSBTWU1CT0xfREVGICAgICAgICAweDEwMDAwICAvKiBGaXJzdCBiaXQgb2Yg
U1lNQk9MX0RFRiAqLw0KICAgIC0jZGVmaW5lIFNZTUJPTF9ERUZfVVNFUiAgIDB4MTAwMDAgIC8q
IHN5bWJvbC5kZWZbU19ERUZfVVNFUl0gaXMgdmFsaWQgKi8NCiAgICAtI2RlZmluZSBTWU1CT0xf
REVGX0FVVE8gICAweDIwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGX0FVVE9dIGlzIHZhbGlkICov
DQogICAgLSNkZWZpbmUgU1lNQk9MX0RFRjMgICAgICAgMHg0MDAwMCAgLyogc3ltYm9sLmRlZltT
X0RFRl8zXSBpcyB2YWxpZCAqLw0KICAgIC0jZGVmaW5lIFNZTUJPTF9ERUY0ICAgICAgIDB4ODAw
MDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfNF0gaXMgdmFsaWQgKi8NCiAgICAtDQogICAgLS8qIGNo
b2ljZSB2YWx1ZXMgbmVlZCB0byBiZSBzZXQgYmVmb3JlIGNhbGN1bGF0aW5nIHRoaXMgc3ltYm9s
IHZhbHVlICovDQogICAgLSNkZWZpbmUgU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMgIDB4
MTAwMDAwDQogICAgLQ0KICAgIC0jZGVmaW5lIFNZTUJPTF9NQVhMRU5HVEgJMjU2DQogICAgLSNk
ZWZpbmUgU1lNQk9MX0hBU0hTSVpFCQk5OTczDQogICAgLQ0KICAgIC0vKiBBIHByb3BlcnR5IHJl
cHJlc2VudCB0aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZA0KICAgIC0g
KiB3aXRoIGEgY29uZmlnICJzeW1ib2wiLg0KICAgIC0gKiBTYW1wbGU6DQogICAgLSAqIGNvbmZp
ZyBGT08NCiAgICAtICogICAgICAgICBkZWZhdWx0IHkNCiAgICAtICogICAgICAgICBwcm9tcHQg
ImZvbyBwcm9tcHQiDQogICAgLSAqICAgICAgICAgc2VsZWN0IEJBUg0KICAgIC0gKiBjb25maWcg
QkFaDQogICAgLSAqICAgICAgICAgaW50ICJCQVogVmFsdWUiDQogICAgLSAqICAgICAgICAgcmFu
Z2UgMS4uMjU1DQogICAgLSAqLw0KICAgIC1lbnVtIHByb3BfdHlwZSB7DQogICAgLQlQX1VOS05P
V04sDQogICAgLQlQX1BST01QVCwgICAvKiBwcm9tcHQgImZvbyBwcm9tcHQiIG9yICJCQVogVmFs
dWUiICovDQogICAgLQlQX0NPTU1FTlQsICAvKiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1l
bnQgKi8NCiAgICAtCVBfTUVOVSwgICAgIC8qIHByb21wdCBhc3NvY2lhdGVkIHdpdGggYSBtZW51
Y29uZmlnIG9wdGlvbiAqLw0KICAgIC0JUF9ERUZBVUxULCAgLyogZGVmYXVsdCB5ICovDQogICAg
LQlQX0NIT0lDRSwgICAvKiBjaG9pY2UgdmFsdWUgKi8NCiAgICAtCVBfU0VMRUNULCAgIC8qIHNl
bGVjdCBCQVIgKi8NCiAgICAtCVBfUkFOR0UsICAgIC8qIHJhbmdlIDcuLjEwMCAoZm9yIGEgc3lt
Ym9sKSAqLw0KICAgIC0JUF9FTlYsICAgICAgLyogdmFsdWUgZnJvbSBlbnZpcm9ubWVudCB2YXJp
YWJsZSAqLw0KICAgIC0JUF9TWU1CT0wsICAgLyogd2hlcmUgYSBzeW1ib2wgaXMgZGVmaW5lZCAq
Lw0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RydWN0IHByb3BlcnR5IHsNCiAgICAtCXN0cnVjdCBw
cm9wZXJ0eSAqbmV4dDsgICAgIC8qIG5leHQgcHJvcGVydHkgLSBudWxsIGlmIGxhc3QgKi8NCiAg
ICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsgICAgICAgIC8qIHRoZSBzeW1ib2wgZm9yIHdoaWNoIHRo
ZSBwcm9wZXJ0eSBpcyBhc3NvY2lhdGVkICovDQogICAgLQllbnVtIHByb3BfdHlwZSB0eXBlOyAg
ICAgICAvKiB0eXBlIG9mIHByb3BlcnR5ICovDQogICAgLQljb25zdCBjaGFyICp0ZXh0OyAgICAg
ICAgICAvKiB0aGUgcHJvbXB0IHZhbHVlIC0gUF9QUk9NUFQsIFBfTUVOVSwgUF9DT01NRU5UICov
DQogICAgLQlzdHJ1Y3QgZXhwcl92YWx1ZSB2aXNpYmxlOw0KICAgIC0Jc3RydWN0IGV4cHIgKmV4
cHI7ICAgICAgICAgLyogdGhlIG9wdGlvbmFsIGNvbmRpdGlvbmFsIHBhcnQgb2YgdGhlIHByb3Bl
cnR5ICovDQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsgICAgICAgICAvKiB0aGUgbWVudSB0aGUg
cHJvcGVydHkgYXJlIGFzc29jaWF0ZWQgd2l0aA0KICAgIC0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogdmFsaWQgZm9yOiBQX1NFTEVDVCwgUF9SQU5HRSwgUF9DSE9JQ0UsDQogICAgLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBQX1BST01QVCwgUF9ERUZBVUxULCBQX01FTlUs
IFBfQ09NTUVOVCAqLw0KICAgIC0Jc3RydWN0IGZpbGUgKmZpbGU7ICAgICAgICAgLyogd2hhdCBm
aWxlIHdhcyB0aGlzIHByb3BlcnR5IGRlZmluZWQgKi8NCiAgICAtCWludCBsaW5lbm87ICAgICAg
ICAgICAgICAgIC8qIHdoYXQgbGluZW5vIHdhcyB0aGlzIHByb3BlcnR5IGRlZmluZWQgKi8NCiAg
ICAtfTsNCiAgICAtDQogICAgLSNkZWZpbmUgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIHRv
aykgXA0KICAgIC0JZm9yIChzdCA9IHN5bS0+cHJvcDsgc3Q7IHN0ID0gc3QtPm5leHQpIFwNCiAg
ICAtCQlpZiAoc3QtPnR5cGUgPT0gKHRvaykpDQogICAgLSNkZWZpbmUgZm9yX2FsbF9kZWZhdWx0
cyhzeW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgUF9ERUZBVUxUKQ0KICAgIC0j
ZGVmaW5lIGZvcl9hbGxfY2hvaWNlcyhzeW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBz
dCwgUF9DSE9JQ0UpDQogICAgLSNkZWZpbmUgZm9yX2FsbF9wcm9tcHRzKHN5bSwgc3QpIFwNCiAg
ICAtCWZvciAoc3QgPSBzeW0tPnByb3A7IHN0OyBzdCA9IHN0LT5uZXh0KSBcDQogICAgLQkJaWYg
KHN0LT50ZXh0KQ0KICAgIC0NCiAgICAtc3RydWN0IG1lbnUgew0KICAgIC0Jc3RydWN0IG1lbnUg
Km5leHQ7DQogICAgLQlzdHJ1Y3QgbWVudSAqcGFyZW50Ow0KICAgIC0Jc3RydWN0IG1lbnUgKmxp
c3Q7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnBy
b21wdDsNCiAgICAtCXN0cnVjdCBleHByICp2aXNpYmlsaXR5Ow0KICAgIC0Jc3RydWN0IGV4cHIg
KmRlcDsNCiAgICAtCXVuc2lnbmVkIGludCBmbGFnczsNCiAgICAtCWNoYXIgKmhlbHA7DQogICAg
LQlzdHJ1Y3QgZmlsZSAqZmlsZTsNCiAgICAtCWludCBsaW5lbm87DQogICAgLQl2b2lkICpkYXRh
Ow0KICAgIC19Ow0KICAgIC0NCiAgICAtI2RlZmluZSBNRU5VX0NIQU5HRUQJCTB4MDAwMQ0KICAg
IC0jZGVmaW5lIE1FTlVfUk9PVAkJMHgwMDAyDQogICAgLQ0KICAgIC1zdHJ1Y3QganVtcF9rZXkg
ew0KICAgIC0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOw0KICAgIC0Jc2l6ZV90IG9mZnNldDsN
CiAgICAtCXN0cnVjdCBtZW51ICp0YXJnZXQ7DQogICAgLQlpbnQgaW5kZXg7DQogICAgLX07DQog
ICAgLQ0KICAgIC0jZGVmaW5lIEpVTVBfTkIJCQk5DQogICAgLQ0KICAgIC1leHRlcm4gc3RydWN0
IGZpbGUgKmZpbGVfbGlzdDsNCiAgICAtZXh0ZXJuIHN0cnVjdCBmaWxlICpjdXJyZW50X2ZpbGU7
DQogICAgLXN0cnVjdCBmaWxlICpsb29rdXBfZmlsZShjb25zdCBjaGFyICpuYW1lKTsNCiAgICAt
DQogICAgLWV4dGVybiBzdHJ1Y3Qgc3ltYm9sIHN5bWJvbF95ZXMsIHN5bWJvbF9ubywgc3ltYm9s
X21vZDsNCiAgICAtZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKm1vZHVsZXNfc3ltOw0KICAgIC1leHRl
cm4gc3RydWN0IHN5bWJvbCAqc3ltX2RlZmNvbmZpZ19saXN0Ow0KICAgIC1leHRlcm4gaW50IGNk
ZWJ1ZzsNCiAgICAtc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfc3ltYm9sKHN0cnVjdCBzeW1ib2wg
KnN5bSk7DQogICAgLXN0cnVjdCBleHByICpleHByX2FsbG9jX29uZShlbnVtIGV4cHJfdHlwZSB0
eXBlLCBzdHJ1Y3QgZXhwciAqY2UpOw0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY190d28o
ZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOw0K
ICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19jb21wKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0
cnVjdCBzeW1ib2wgKnMxLCBzdHJ1Y3Qgc3ltYm9sICpzMik7DQogICAgLXN0cnVjdCBleHByICpl
eHByX2FsbG9jX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7DQogICAgLXN0
cnVjdCBleHByICpleHByX2FsbG9jX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUy
KTsNCiAgICAtc3RydWN0IGV4cHIgKmV4cHJfY29weShjb25zdCBzdHJ1Y3QgZXhwciAqb3JnKTsN
CiAgICAtdm9pZCBleHByX2ZyZWUoc3RydWN0IGV4cHIgKmUpOw0KICAgIC1pbnQgZXhwcl9lcShz
dHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7DQogICAgLXZvaWQgZXhwcl9lbGltaW5h
dGVfZXEoc3RydWN0IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKTsNCiAgICAtdHJpc3Rh
dGUgZXhwcl9jYWxjX3ZhbHVlKHN0cnVjdCBleHByICplKTsNCiAgICAtc3RydWN0IGV4cHIgKmV4
cHJfZWxpbWluYXRlX3luKHN0cnVjdCBleHByICplKTsNCiAgICAtc3RydWN0IGV4cHIgKmV4cHJf
dHJhbnNfYm9vbChzdHJ1Y3QgZXhwciAqZSk7DQogICAgLXN0cnVjdCBleHByICpleHByX2VsaW1p
bmF0ZV9kdXBzKHN0cnVjdCBleHByICplKTsNCiAgICAtc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNm
b3JtKHN0cnVjdCBleHByICplKTsNCiAgICAtaW50IGV4cHJfY29udGFpbnNfc3ltYm9sKHN0cnVj
dCBleHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLWJvb2wgZXhwcl9kZXBlbmRz
X3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgIC1zdHJ1
Y3QgZXhwciAqZXhwcl9leHRyYWN0X2VxX2FuZChzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4
cHIgKiplcDIpOw0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9leHRyYWN0X2VxX29yKHN0cnVjdCBl
eHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMik7DQogICAgLXZvaWQgZXhwcl9leHRyYWN0X2Vx
KGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAsIHN0cnVjdCBleHByICoqZXAx
LCBzdHJ1Y3QgZXhwciAqKmVwMik7DQogICAgLXN0cnVjdCBleHByICpleHByX3RyYW5zX2NvbXBh
cmUoc3RydWN0IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5
bSk7DQogICAgLXN0cnVjdCBleHByICpleHByX3NpbXBsaWZ5X3VubWV0X2RlcChzdHJ1Y3QgZXhw
ciAqZTEsIHN0cnVjdCBleHByICplMik7DQogICAgLQ0KICAgIC12b2lkIGV4cHJfZnByaW50KHN0
cnVjdCBleHByICplLCBGSUxFICpvdXQpOw0KICAgIC1zdHJ1Y3QgZ3N0cjsgLyogZm9yd2FyZCAq
Lw0KICAgIC12b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIg
KmdzKTsNCiAgICAtDQogICAgLXN0YXRpYyBpbmxpbmUgaW50IGV4cHJfaXNfeWVzKHN0cnVjdCBl
eHByICplKQ0KICAgIC17DQogICAgLQlyZXR1cm4gIWUgfHwgKGUtPnR5cGUgPT0gRV9TWU1CT0wg
JiYgZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0
aWMgaW5saW5lIGludCBleHByX2lzX25vKHN0cnVjdCBleHByICplKQ0KICAgIC17DQogICAgLQly
ZXR1cm4gZSAmJiAoZS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlLT5sZWZ0LnN5bSA9PSAmc3ltYm9s
X25vKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgLX0NCiAg
ICAtI2VuZGlmDQogICAgLQ0KICAgIC0jZW5kaWYgLyogRVhQUl9IICovDQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy9maXhkZXAuYyBiL3N1cHBvcnQva2NvbmZpZy9maXhkZXAuYw0K
ICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGY4MGEwYzQuLjAwMDAwMDAN
CiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcvZml4ZGVwLmMNCiAgICArKysgL2Rldi9udWxsDQog
ICAgQEAgLTEsNDA5ICswLDAgQEANCiAgICAtLyoNCiAgICAtICogIk9wdGltaXplIiBhIGxpc3Qg
b2YgZGVwZW5kZW5jaWVzIGFzIHNwaXQgb3V0IGJ5IGdjYyAtTUQNCiAgICAtICogZm9yIHRoZSBr
ZXJuZWwgYnVpbGQNCiAgICAtICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgLSAqDQogICAgLSAq
IEF1dGhvciAgICAgICBLYWkgR2VybWFzY2hld3NraQ0KICAgIC0gKiBDb3B5cmlnaHQgICAgMjAw
MiBieSBLYWkgR2VybWFzY2hld3NraSAgPGthaS5nZXJtYXNjaGV3c2tpQGdteC5kZT4NCiAgICAt
ICoNCiAgICAtICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNj
b3JkaW5nIHRvIHRoZSB0ZXJtcw0KICAgIC0gKiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLg0KICAgIC0gKg0KICAgIC0g
Kg0KICAgIC0gKiBJbnRyb2R1Y3Rpb246DQogICAgLSAqDQogICAgLSAqIGdjYyBwcm9kdWNlcyBh
IHZlcnkgbmljZSBhbmQgY29ycmVjdCBsaXN0IG9mIGRlcGVuZGVuY2llcyB3aGljaA0KICAgIC0g
KiB0ZWxscyBtYWtlIHdoZW4gdG8gcmVtYWtlIGEgZmlsZS4NCiAgICAtICoNCiAgICAtICogVG8g
dXNlIHRoaXMgbGlzdCBhcy1pcyBob3dldmVyIGhhcyB0aGUgZHJhd2JhY2sgdGhhdCB2aXJ0dWFs
bHkNCiAgICAtICogZXZlcnkgZmlsZSBpbiB0aGUga2VybmVsIGluY2x1ZGVzIGF1dG9jb25mLmgu
DQogICAgLSAqDQogICAgLSAqIElmIHRoZSB1c2VyIHJlLXJ1bnMgbWFrZSAqY29uZmlnLCBhdXRv
Y29uZi5oIHdpbGwgYmUNCiAgICAtICogcmVnZW5lcmF0ZWQuICBtYWtlIG5vdGljZXMgdGhhdCBh
bmQgd2lsbCByZWJ1aWxkIGV2ZXJ5IGZpbGUgd2hpY2gNCiAgICAtICogaW5jbHVkZXMgYXV0b2Nv
bmYuaCwgaS5lLiBiYXNpY2FsbHkgYWxsIGZpbGVzLiBUaGlzIGlzIGV4dHJlbWVseQ0KICAgIC0g
KiBhbm5veWluZyBpZiB0aGUgdXNlciBqdXN0IGNoYW5nZWQgQ09ORklHX0hJU19EUklWRVIgZnJv
bSBuIHRvIG0uDQogICAgLSAqDQogICAgLSAqIFNvIHdlIHBsYXkgdGhlIHNhbWUgdHJpY2sgdGhh
dCAibWtkZXAiIHBsYXllZCBiZWZvcmUuIFdlIHJlcGxhY2UNCiAgICAtICogdGhlIGRlcGVuZGVu
Y3kgb24gYXV0b2NvbmYuaCBieSBhIGRlcGVuZGVuY3kgb24gZXZlcnkgY29uZmlnDQogICAgLSAq
IG9wdGlvbiB3aGljaCBpcyBtZW50aW9uZWQgaW4gYW55IG9mIHRoZSBsaXN0ZWQgcHJlcmVxdWlz
aXRlcy4NCiAgICAtICoNCiAgICAtICoga2NvbmZpZyBwb3B1bGF0ZXMgYSB0cmVlIGluIGluY2x1
ZGUvY29uZmlnLyB3aXRoIGFuIGVtcHR5IGZpbGUNCiAgICAtICogZm9yIGVhY2ggY29uZmlnIHN5
bWJvbCBhbmQgd2hlbiB0aGUgY29uZmlndXJhdGlvbiBpcyB1cGRhdGVkDQogICAgLSAqIHRoZSBm
aWxlcyByZXByZXNlbnRpbmcgY2hhbmdlZCBjb25maWcgb3B0aW9ucyBhcmUgdG91Y2hlZA0KICAg
IC0gKiB3aGljaCB0aGVuIGxldCBtYWtlIHBpY2sgdXAgdGhlIGNoYW5nZXMgYW5kIHRoZSBmaWxl
cyB0aGF0IHVzZQ0KICAgIC0gKiB0aGUgY29uZmlnIHN5bWJvbHMgYXJlIHJlYnVpbHQuDQogICAg
LSAqDQogICAgLSAqIFNvIGlmIHRoZSB1c2VyIGNoYW5nZXMgaGlzIENPTkZJR19ISVNfRFJJVkVS
IG9wdGlvbiwgb25seSB0aGUgb2JqZWN0cw0KICAgIC0gKiB3aGljaCBkZXBlbmQgb24gImluY2x1
ZGUvY29uZmlnL2hpcy9kcml2ZXIuaCIgd2lsbCBiZSByZWJ1aWx0LA0KICAgIC0gKiBzbyBtb3N0
IGxpa2VseSBvbmx5IGhpcyBkcml2ZXIgOy0pDQogICAgLSAqDQogICAgLSAqIFRoZSBpZGVhIGFi
b3ZlIGRhdGVzLCBieSB0aGUgd2F5LCBiYWNrIHRvIE1pY2hhZWwgRSBDaGFzdGFpbiwgQUZBSUsu
DQogICAgLSAqDQogICAgLSAqIFNvIHRvIGdldCBkZXBlbmRlbmNpZXMgcmlnaHQsIHRoZXJlIGFy
ZSB0d28gaXNzdWVzOg0KICAgIC0gKiBvIGlmIGFueSBvZiB0aGUgZmlsZXMgdGhlIGNvbXBpbGVy
IHJlYWQgY2hhbmdlZCwgd2UgbmVlZCB0byByZWJ1aWxkDQogICAgLSAqIG8gaWYgdGhlIGNvbW1h
bmQgbGluZSBnaXZlbiB0byB0aGUgY29tcGlsZSB0aGUgZmlsZSBjaGFuZ2VkLCB3ZQ0KICAgIC0g
KiAgIGJldHRlciByZWJ1aWxkIGFzIHdlbGwuDQogICAgLSAqDQogICAgLSAqIFRoZSBmb3JtZXIg
aXMgaGFuZGxlZCBieSB1c2luZyB0aGUgLU1EIG91dHB1dCwgdGhlIGxhdGVyIGJ5IHNhdmluZw0K
ICAgIC0gKiB0aGUgY29tbWFuZCBsaW5lIHVzZWQgdG8gY29tcGlsZSB0aGUgb2xkIG9iamVjdCBh
bmQgY29tcGFyaW5nIGl0DQogICAgLSAqIHRvIHRoZSBvbmUgd2Ugd291bGQgbm93IHVzZS4NCiAg
ICAtICoNCiAgICAtICogQWdhaW4sIGFsc28gdGhpcyBpZGVhIGlzIHByZXR0eSBvbGQgYW5kIGhh
cyBiZWVuIGRpc2N1c3NlZCBvbg0KICAgIC0gKiBrYnVpbGQtZGV2ZWwgYSBsb25nIHRpbWUgYWdv
LiBJIGRvbid0IGhhdmUgYSBzZW5zaWJseSB3b3JraW5nDQogICAgLSAqIGludGVybmV0IGNvbm5l
Y3Rpb24gcmlnaHQgbm93LCBzbyBJIHJhdGhlciBkb24ndCBtZW50aW9uIG5hbWVzDQogICAgLSAq
IHdpdGhvdXQgZG91YmxlIGNoZWNraW5nLg0KICAgIC0gKg0KICAgIC0gKiBUaGlzIGNvZGUgaGVy
ZSBoYXMgYmVlbiBiYXNlZCBwYXJ0aWFsbHkgYmFzZWQgb24gbWtkZXAuYywgd2hpY2gNCiAgICAt
ICogc2F5cyB0aGUgZm9sbG93aW5nIGFib3V0IGl0cyBoaXN0b3J5Og0KICAgIC0gKg0KICAgIC0g
KiAgIENvcHlyaWdodCBhYmFuZG9uZWQsIE1pY2hhZWwgQ2hhc3RhaW4sIDxtYWlsdG86bWVjQHNo
b3V0Lm5ldD4uDQogICAgLSAqICAgVGhpcyBpcyBhIEMgdmVyc2lvbiBvZiBzeW5jZGVwLnBsIGJ5
IFdlcm5lciBBbG1lc2Jlcmdlci4NCiAgICAtICoNCiAgICAtICoNCiAgICAtICogSXQgaXMgaW52
b2tlZCBhcw0KICAgIC0gKg0KICAgIC0gKiAgIGZpeGRlcCA8ZGVwZmlsZT4gPHRhcmdldD4gPGNt
ZGxpbmU+DQogICAgLSAqDQogICAgLSAqIGFuZCB3aWxsIHJlYWQgdGhlIGRlcGVuZGVuY3kgZmls
ZSA8ZGVwZmlsZT4NCiAgICAtICoNCiAgICAtICogVGhlIHRyYW5zZm9ybWVkIGRlcGVuZGVuY3kg
c25pcHBlZCBpcyB3cml0dGVuIHRvIHN0ZG91dC4NCiAgICAtICoNCiAgICAtICogSXQgZmlyc3Qg
Z2VuZXJhdGVzIGEgbGluZQ0KICAgIC0gKg0KICAgIC0gKiAgIGNtZF88dGFyZ2V0PiA9IDxjbWRs
aW5lPg0KICAgIC0gKg0KICAgIC0gKiBhbmQgdGhlbiBiYXNpY2FsbHkgY29waWVzIHRoZSAuPHRh
cmdldD4uZCBmaWxlIHRvIHN0ZG91dCwgaW4gdGhlDQogICAgLSAqIHByb2Nlc3MgZmlsdGVyaW5n
IG91dCB0aGUgZGVwZW5kZW5jeSBvbiBhdXRvY29uZi5oIGFuZCBhZGRpbmcNCiAgICAtICogZGVw
ZW5kZW5jaWVzIG9uIGluY2x1ZGUvY29uZmlnL215L29wdGlvbi5oIGZvciBldmVyeQ0KICAgIC0g
KiBDT05GSUdfTVlfT1BUSU9OIGVuY291bnRlcmVkIGluIGFueSBvZiB0aGUgcHJlcmVxdWlzaXRl
cy4NCiAgICAtICoNCiAgICAtICogSXQgd2lsbCBhbHNvIGZpbHRlciBvdXQgYWxsIHRoZSBkZXBl
bmRlbmNpZXMgb24gKi52ZXIuIFdlIG5lZWQNCiAgICAtICogdG8gbWFrZSBzdXJlIHRoYXQgdGhl
IGdlbmVyYXRlZCB2ZXJzaW9uIGNoZWNrc3VtIGFyZSBnbG9iYWxseSB1cA0KICAgIC0gKiB0byBk
YXRlIGJlZm9yZSBldmVuIHN0YXJ0aW5nIHRoZSByZWN1cnNpdmUgYnVpbGQsIHNvIGl0J3MgdG9v
IGxhdGUNCiAgICAtICogYXQgdGhpcyBwb2ludCBhbnl3YXkuDQogICAgLSAqDQogICAgLSAqIFdl
IGRvbid0IGV2ZW4gdHJ5IHRvIHJlYWxseSBwYXJzZSB0aGUgaGVhZGVyIGZpbGVzLCBidXQNCiAg
ICAtICogbWVyZWx5IGdyZXAsIGkuZS4gaWYgQ09ORklHX0ZPTyBpcyBtZW50aW9uZWQgaW4gYSBj
b21tZW50LCBpdCB3aWxsDQogICAgLSAqIGJlIHBpY2tlZCB1cCBhcyB3ZWxsLiBJdCdzIG5vdCBh
IHByb2JsZW0gd2l0aCByZXNwZWN0IHRvDQogICAgLSAqIGNvcnJlY3RuZXNzLCBzaW5jZSB0aGF0
IGNhbiBvbmx5IGdpdmUgdG9vIG1hbnkgZGVwZW5kZW5jaWVzLCB0aHVzDQogICAgLSAqIHdlIGNh
bm5vdCBtaXNzIGEgcmVidWlsZC4gU2luY2UgcGVvcGxlIHRlbmQgdG8gbm90IG1lbnRpb24gdG90
YWxseQ0KICAgIC0gKiB1bnJlbGF0ZWQgQ09ORklHXyBvcHRpb25zIGFsbCBvdmVyIHRoZSBwbGFj
ZSwgaXQncyBub3QgYW4NCiAgICAtICogZWZmaWNpZW5jeSBwcm9ibGVtIGVpdGhlci4NCiAgICAt
ICoNCiAgICAtICogKE5vdGU6IGl0J2QgYmUgZWFzeSB0byBwb3J0IG92ZXIgdGhlIGNvbXBsZXRl
IG1rZGVwIHN0YXRlIG1hY2hpbmUsDQogICAgLSAqICBidXQgSSBkb24ndCB0aGluayB0aGUgYWRk
ZWQgY29tcGxleGl0eSBpcyB3b3J0aCBpdCkNCiAgICAtICoNCiAgICAtICogVGhpcyBzb3VyY2Ug
aXMgY29waWVkIGZyb20gbGludXgga2VybmVsDQogICAgLSAqIChzY3JpcHRzL2Jhc2ljL2ZpeGRl
cC5jKS4gVGFnIDQuMTctcmMxLCBjb21taXQNCiAgICAtICogNjBjYzQzZmM4ODg0MjhiYjJmMThm
MDg5OTc0MzJkNDI2YTI0MzMzOA0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4NCiAgICAtI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogICAgLSNpbmNsdWRlIDx1bmlz
dGQuaD4NCiAgICAtI2luY2x1ZGUgPGZjbnRsLmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4N
CiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAt
I2luY2x1ZGUgPGN0eXBlLmg+DQogICAgLQ0KICAgIC0vKiBUaGUgZ2xvYmFsIHZhcmlhYmxlIGlz
IGEgYml0IGFnYWluc3QgdGhlIHN0eWxlIG9mIGZpeGRlcC4gQnV0IHRoaXMNCiAgICAtICogcmVk
dWNlcyBudW1iZXIgb2YgY2hhbmdlZCBsaW5lcyBzaWduaWZpY2FudGx5LiBXaGljaCBob3BlZnVs
bHkgd2lsbA0KICAgIC0gKiBtYWtlIGl0IGVhc2llciB0byBtZXJnZSB3aXRoIG5ld2VyIHZlcnNp
b24gZnJvbSBsaW51eCBzb3VyY2UgdHJlZS4NCiAgICAtICovDQogICAgLXN0YXRpYyBjb25zdCBj
aGFyICpidWlsZGRpcjsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpDQogICAg
LXsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGZpeGRlcCBbLWVdIDxkZXBmaWxlPiA8
dGFyZ2V0PiA8Y21kbGluZT4gPGJ1aWxkZGlyPlxuIik7DQogICAgLQlmcHJpbnRmKHN0ZGVyciwg
IiAtZSAgaW5zZXJ0IGV4dHJhIGRlcGVuZGVuY2llcyBnaXZlbiBvbiBzdGRpblxuIik7DQogICAg
LQlleGl0KDEpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBQcmludCBvdXQgYSBk
ZXBlbmRlbmN5IHBhdGggZnJvbSBhIHN5bWJvbCBuYW1lDQogICAgLSAqLw0KICAgIC1zdGF0aWMg
dm9pZCBwcmludF9kZXAoY29uc3QgY2hhciAqbSwgaW50IHNsZW4sIGNvbnN0IGNoYXIgKmRpcikN
CiAgICAtew0KICAgIC0JaW50IGMsIGk7DQogICAgLQ0KICAgIC0JcHJpbnRmKCIgICAgJCh3aWxk
Y2FyZCAlcy8lcy8iLCBidWlsZGRpciwgZGlyKTsNCiAgICAtCWZvciAoaSA9IDA7IGkgPCBzbGVu
OyBpKyspIHsNCiAgICAtCQljID0gbVtpXTsNCiAgICAtCQlpZiAoYyA9PSAnXycpDQogICAgLQkJ
CWMgPSAnLyc7DQogICAgLQkJZWxzZQ0KICAgIC0JCQljID0gdG9sb3dlcihjKTsNCiAgICAtCQlw
dXRjaGFyKGMpOw0KICAgIC0JfQ0KICAgIC0JcHJpbnRmKCIuaCkgXFxcbiIpOw0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBkb19leHRyYV9kZXBzKHZvaWQpDQogICAgLXsNCiAgICAt
CWNoYXIgYnVmWzgwXTsNCiAgICAtDQogICAgLQl3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVm
KSwgc3RkaW4pKSB7DQogICAgLQkJaW50IGxlbiA9IHN0cmxlbihidWYpOw0KICAgIC0NCiAgICAt
CQlpZiAobGVuIDwgMiB8fCBidWZbbGVuIC0gMV0gIT0gJ1xuJykgew0KICAgIC0JCQlmcHJpbnRm
KHN0ZGVyciwgImZpeGRlcDogYmFkIGRhdGEgb24gc3RkaW5cbiIpOw0KICAgIC0JCQlleGl0KDEp
Ow0KICAgIC0JCX0NCiAgICAtCQlwcmludF9kZXAoYnVmLCBsZW4gLSAxLCAiaW5jbHVkZS9rc3lt
Iik7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBpdGVtIHsNCiAgICAtCXN0
cnVjdCBpdGVtCSpuZXh0Ow0KICAgIC0JdW5zaWduZWQgaW50CWxlbjsNCiAgICAtCXVuc2lnbmVk
IGludAloYXNoOw0KICAgIC0JY2hhcgkJbmFtZVswXTsNCiAgICAtfTsNCiAgICAtDQogICAgLSNk
ZWZpbmUgSEFTSFNaIDI1Ng0KICAgIC1zdGF0aWMgc3RydWN0IGl0ZW0gKmhhc2h0YWJbSEFTSFNa
XTsNCiAgICAtDQogICAgLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RyaGFzaChjb25zdCBjaGFyICpz
dHIsIHVuc2lnbmVkIGludCBzeikNCiAgICAtew0KICAgIC0JLyogZm52MzIgaGFzaCAqLw0KICAg
IC0JdW5zaWduZWQgaW50IGksIGhhc2ggPSAyMTY2MTM2MjYxVTsNCiAgICAtDQogICAgLQlmb3Ig
KGkgPSAwOyBpIDwgc3o7IGkrKykNCiAgICAtCQloYXNoID0gKGhhc2ggXiBzdHJbaV0pICogMHgw
MTAwMDE5MzsNCiAgICAtCXJldHVybiBoYXNoOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAg
IC0gKiBMb29rdXAgYSB2YWx1ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBzdHJpbmcuDQogICAgLSAq
Lw0KICAgIC1zdGF0aWMgaW50IGlzX2RlZmluZWRfY29uZmlnKGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBsZW4sIHVuc2lnbmVkIGludCBoYXNoKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgaXRlbSAqYXV4
Ow0KICAgIC0NCiAgICAtCWZvciAoYXV4ID0gaGFzaHRhYltoYXNoICUgSEFTSFNaXTsgYXV4OyBh
dXggPSBhdXgtPm5leHQpIHsNCiAgICAtCQlpZiAoYXV4LT5oYXNoID09IGhhc2ggJiYgYXV4LT5s
ZW4gPT0gbGVuICYmDQogICAgLQkJICAgIG1lbWNtcChhdXgtPm5hbWUsIG5hbWUsIGxlbikgPT0g
MCkNCiAgICAtCQkJcmV0dXJuIDE7DQogICAgLQl9DQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtLyoNCiAgICAtICogQWRkIGEgbmV3IHZhbHVlIHRvIHRoZSBjb25maWd1cmF0
aW9uIHN0cmluZy4NCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkIGRlZmluZV9jb25maWcoY29u
c3QgY2hhciAqbmFtZSwgaW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpDQogICAgLXsNCiAgICAt
CXN0cnVjdCBpdGVtICphdXggPSBtYWxsb2Moc2l6ZW9mKCphdXgpICsgbGVuKTsNCiAgICAtDQog
ICAgLQlpZiAoIWF1eCkgew0KICAgIC0JCXBlcnJvcigiZml4ZGVwOm1hbGxvYyIpOw0KICAgIC0J
CWV4aXQoMSk7DQogICAgLQl9DQogICAgLQltZW1jcHkoYXV4LT5uYW1lLCBuYW1lLCBsZW4pOw0K
ICAgIC0JYXV4LT5sZW4gPSBsZW47DQogICAgLQlhdXgtPmhhc2ggPSBoYXNoOw0KICAgIC0JYXV4
LT5uZXh0ID0gaGFzaHRhYltoYXNoICUgSEFTSFNaXTsNCiAgICAtCWhhc2h0YWJbaGFzaCAlIEhB
U0hTWl0gPSBhdXg7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIFJlY29yZCB0aGUg
dXNlIG9mIGEgQ09ORklHXyogd29yZC4NCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkIHVzZV9j
b25maWcoY29uc3QgY2hhciAqbSwgaW50IHNsZW4pDQogICAgLXsNCiAgICAtCXVuc2lnbmVkIGlu
dCBoYXNoID0gc3RyaGFzaChtLCBzbGVuKTsNCiAgICAtDQogICAgLQlpZiAoaXNfZGVmaW5lZF9j
b25maWcobSwgc2xlbiwgaGFzaCkpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCWRlZmlu
ZV9jb25maWcobSwgc2xlbiwgaGFzaCk7DQogICAgLQlwcmludF9kZXAobSwgc2xlbiwgImtjb25m
aWcvZGVwaW5jbHVkZSIpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiB0ZXN0IGlmIHMgZW5kcyBp
biBzdWIgKi8NCiAgICAtc3RhdGljIGludCBzdHJfZW5kc193aXRoKGNvbnN0IGNoYXIgKnMsIGlu
dCBzbGVuLCBjb25zdCBjaGFyICpzdWIpDQogICAgLXsNCiAgICAtCWludCBzdWJsZW4gPSBzdHJs
ZW4oc3ViKTsNCiAgICAtDQogICAgLQlpZiAoc3VibGVuID4gc2xlbikNCiAgICAtCQlyZXR1cm4g
MDsNCiAgICAtDQogICAgLQlyZXR1cm4gIW1lbWNtcChzICsgc2xlbiAtIHN1Ymxlbiwgc3ViLCBz
dWJsZW4pOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBwYXJzZV9jb25maWdfZmls
ZShjb25zdCBjaGFyICpwKQ0KICAgIC17DQogICAgLQljb25zdCBjaGFyICpxLCAqcjsNCiAgICAt
CWNvbnN0IGNoYXIgKnN0YXJ0ID0gcDsNCiAgICAtDQogICAgLQl3aGlsZSAoKHAgPSBzdHJzdHIo
cCwgIkNPTkZJR18iKSkpIHsNCiAgICAtCQlpZiAocCA+IHN0YXJ0ICYmIChpc2FsbnVtKHBbLTFd
KSB8fCBwWy0xXSA9PSAnXycpKSB7DQogICAgLQkJCXAgKz0gNzsNCiAgICAtCQkJY29udGludWU7
DQogICAgLQkJfQ0KICAgIC0JCXAgKz0gNzsNCiAgICAtCQlxID0gcDsNCiAgICAtCQl3aGlsZSAo
KnEgJiYgKGlzYWxudW0oKnEpIHx8ICpxID09ICdfJykpDQogICAgLQkJCXErKzsNCiAgICAtCQlp
ZiAoc3RyX2VuZHNfd2l0aChwLCBxIC0gcCwgIl9NT0RVTEUiKSkNCiAgICAtCQkJciA9IHEgLSA3
Ow0KICAgIC0JCWVsc2UNCiAgICAtCQkJciA9IHE7DQogICAgLQkJaWYgKHIgPiBwKQ0KICAgIC0J
CQl1c2VfY29uZmlnKHAsIHIgLSBwKTsNCiAgICAtCQlwID0gcTsNCiAgICAtCX0NCiAgICAtfQ0K
ICAgIC0NCiAgICAtc3RhdGljIHZvaWQgKnJlYWRfZmlsZShjb25zdCBjaGFyICpmaWxlbmFtZSkN
CiAgICAtew0KICAgIC0Jc3RydWN0IHN0YXQgc3Q7DQogICAgLQlpbnQgZmQ7DQogICAgLQljaGFy
ICpidWY7DQogICAgLQ0KICAgIC0JZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7DQogICAg
LQlpZiAoZmQgPCAwKSB7DQogICAgLQkJZnByaW50ZihzdGRlcnIsICJmaXhkZXA6IGVycm9yIG9w
ZW5pbmcgZmlsZTogIik7DQogICAgLQkJcGVycm9yKGZpbGVuYW1lKTsNCiAgICAtCQlleGl0KDIp
Ow0KICAgIC0JfQ0KICAgIC0JaWYgKGZzdGF0KGZkLCAmc3QpIDwgMCkgew0KICAgIC0JCWZwcmlu
dGYoc3RkZXJyLCAiZml4ZGVwOiBlcnJvciBmc3RhdCdpbmcgZmlsZTogIik7DQogICAgLQkJcGVy
cm9yKGZpbGVuYW1lKTsNCiAgICAtCQlleGl0KDIpOw0KICAgIC0JfQ0KICAgIC0JYnVmID0gbWFs
bG9jKHN0LnN0X3NpemUgKyAxKTsNCiAgICAtCWlmICghYnVmKSB7DQogICAgLQkJcGVycm9yKCJm
aXhkZXA6IG1hbGxvYyIpOw0KICAgIC0JCWV4aXQoMik7DQogICAgLQl9DQogICAgLQlpZiAocmVh
ZChmZCwgYnVmLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKSB7DQogICAgLQkJcGVycm9yKCJm
aXhkZXA6IHJlYWQiKTsNCiAgICAtCQlleGl0KDIpOw0KICAgIC0JfQ0KICAgIC0JYnVmW3N0LnN0
X3NpemVdID0gJ1wwJzsNCiAgICAtCWNsb3NlKGZkKTsNCiAgICAtDQogICAgLQlyZXR1cm4gYnVm
Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKiBJZ25vcmUgY2VydGFpbiBkZXBlbmRlbmNpZXMgKi8N
CiAgICAtc3RhdGljIGludCBpc19pZ25vcmVkX2ZpbGUoY29uc3QgY2hhciAqcywgaW50IGxlbikN
CiAgICAtew0KICAgIC0JcmV0dXJuIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiYnVpbGQvaW5jbHVk
ZS91ay9fY29uZmlnLmgiKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogSW1wb3J0
YW50OiBUaGUgYmVsb3cgZ2VuZXJhdGVkIHNvdXJjZV9mb28ubyBhbmQgZGVwc19mb28ubyB2YXJp
YWJsZQ0KICAgIC0gKiBhc3NpZ25tZW50cyBhcmUgcGFyc2VkIG5vdCBvbmx5IGJ5IG1ha2UsIGJ1
dCBhbHNvIGJ5IHRoZSByYXRoZXIgc2ltcGxlDQogICAgLSAqIHBhcnNlciBpbiBzY3JpcHRzL21v
ZC9zdW12ZXJzaW9uLmMuDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZCBwYXJzZV9kZXBfZmls
ZShjaGFyICptLCBjb25zdCBjaGFyICp0YXJnZXQsIGludCBpbnNlcnRfZXh0cmFfZGVwcykNCiAg
ICAtew0KICAgIC0JY2hhciAqcDsNCiAgICAtCWludCBpc19sYXN0LCBpc190YXJnZXQ7DQogICAg
LQlpbnQgc2F3X2FueV90YXJnZXQgPSAwOw0KICAgIC0JaW50IGlzX2ZpcnN0X2RlcCA9IDA7DQog
ICAgLQl2b2lkICpidWY7DQogICAgLQ0KICAgIC0Jd2hpbGUgKDEpIHsNCiAgICAtCQkvKiBTa2lw
IGFueSAid2hpdGUgc3BhY2UiICovDQogICAgLQkJd2hpbGUgKCptID09ICcgJyB8fCAqbSA9PSAn
XFwnIHx8ICptID09ICdcbicpDQogICAgLQkJCW0rKzsNCiAgICAtDQogICAgLQkJaWYgKCEqbSkN
CiAgICAtCQkJYnJlYWs7DQogICAgLQ0KICAgIC0JCS8qIEZpbmQgbmV4dCAid2hpdGUgc3BhY2Ui
ICovDQogICAgLQkJcCA9IG07DQogICAgLQkJd2hpbGUgKCpwICYmICpwICE9ICcgJyAmJiAqcCAh
PSAnXFwnICYmICpwICE9ICdcbicpDQogICAgLQkJCXArKzsNCiAgICAtCQlpc19sYXN0ID0gKCpw
ID09ICdcMCcpOw0KICAgIC0JCS8qIElzIHRoZSB0b2tlbiB3ZSBmb3VuZCBhIHRhcmdldCBuYW1l
PyAqLw0KICAgIC0JCWlzX3RhcmdldCA9ICgqKHAtMSkgPT0gJzonKTsNCiAgICAtCQkvKiBEb24n
dCB3cml0ZSBhbnkgdGFyZ2V0IG5hbWVzIGludG8gdGhlIGRlcGVuZGVuY3kgZmlsZSAqLw0KICAg
IC0JCWlmIChpc190YXJnZXQpIHsNCiAgICAtCQkJLyogVGhlIC9uZXh0LyBmaWxlIGlzIHRoZSBm
aXJzdCBkZXBlbmRlbmN5ICovDQogICAgLQkJCWlzX2ZpcnN0X2RlcCA9IDE7DQogICAgLQkJfSBl
bHNlIGlmICghaXNfaWdub3JlZF9maWxlKG0sIHAgLSBtKSkgew0KICAgIC0JCQkqcCA9ICdcMCc7
DQogICAgLQ0KICAgIC0JCQkvKg0KICAgIC0JCQkgKiBEbyBub3QgbGlzdCB0aGUgc291cmNlIGZp
bGUgYXMgZGVwZW5kZW5jeSwgc28gdGhhdA0KICAgIC0JCQkgKiBrYnVpbGQgaXMgbm90IGNvbmZ1
c2VkIGlmIGEgLmMgZmlsZSBpcyByZXdyaXR0ZW4NCiAgICAtCQkJICogaW50byAuUyBvciB2aWNl
IHZlcnNhLiBTdG9yaW5nIGl0IGluIHNvdXJjZV8qIGlzDQogICAgLQkJCSAqIG5lZWRlZCBmb3Ig
bW9kcG9zdCB0byBjb21wdXRlIHNyY3ZlcnNpb25zLg0KICAgIC0JCQkgKi8NCiAgICAtCQkJaWYg
KGlzX2ZpcnN0X2RlcCkgew0KICAgIC0JCQkJLyoNCiAgICAtCQkJCSAqIElmIHByb2Nlc3Npbmcg
dGhlIGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUNCiAgICAtCQkJCSAqIGRlcGVuZGVuY3kgZmls
ZXMsIG9ubHkgcHJvY2VzcyB0aGUgZmlyc3QNCiAgICAtCQkJCSAqIHRhcmdldCBuYW1lLCB3aGlj
aCB3aWxsIGJlIHRoZSBvcmlnaW5hbA0KICAgIC0JCQkJICogc291cmNlIG5hbWUsIGFuZCBpZ25v
cmUgYW55IG90aGVyIHRhcmdldA0KICAgIC0JCQkJICogbmFtZXMsIHdoaWNoIHdpbGwgYmUgaW50
ZXJtZWRpYXRlIHRlbXBvcmFyeQ0KICAgIC0JCQkJICogZmlsZXMuDQogICAgLQkJCQkgKi8NCiAg
ICAtCQkJCWlmICghc2F3X2FueV90YXJnZXQpIHsNCiAgICAtCQkJCQlzYXdfYW55X3RhcmdldCA9
IDE7DQogICAgLQkJCQkJcHJpbnRmKCJzb3VyY2VfJXMgOj0gJXNcblxuIiwNCiAgICAtCQkJCQkg
ICAgICAgdGFyZ2V0LCBtKTsNCiAgICAtCQkJCQlwcmludGYoImRlcHNfJXMgOj0gXFxcbiIsIHRh
cmdldCk7DQogICAgLQkJCQl9DQogICAgLQkJCQlpc19maXJzdF9kZXAgPSAwOw0KICAgIC0JCQl9
IGVsc2Ugew0KICAgIC0JCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBtKTsNCiAgICAtCQkJfQ0KICAg
IC0NCiAgICAtCQkJYnVmID0gcmVhZF9maWxlKG0pOw0KICAgIC0JCQlwYXJzZV9jb25maWdfZmls
ZShidWYpOw0KICAgIC0JCQlmcmVlKGJ1Zik7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpZiAo
aXNfbGFzdCkNCiAgICAtCQkJYnJlYWs7DQogICAgLQ0KICAgIC0JCS8qDQogICAgLQkJICogU3Rh
cnQgc2VhcmNoaW5nIGZvciBuZXh0IHRva2VuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmaXJzdA0K
ICAgIC0JCSAqICJ3aGl0ZXNwYWNlIiBjaGFyYWN0ZXIgdGhhdCBmb2xsb3dzIHRoaXMgdG9rZW4u
DQogICAgLQkJICovDQogICAgLQkJbSA9IHAgKyAxOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlm
ICghc2F3X2FueV90YXJnZXQpIHsNCiAgICAtCQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogcGFy
c2UgZXJyb3I7IG5vIHRhcmdldHMgZm91bmRcbiIpOw0KICAgIC0JCWV4aXQoMSk7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JaWYgKGluc2VydF9leHRyYV9kZXBzKQ0KICAgIC0JCWRvX2V4dHJhX2Rl
cHMoKTsNCiAgICAtDQogICAgLQlwcmludGYoIlxuJXM6ICQoZGVwc18lcylcblxuIiwgdGFyZ2V0
LCB0YXJnZXQpOw0KICAgIC0JcHJpbnRmKCIkKGRlcHNfJXMpOlxuIiwgdGFyZ2V0KTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICAtew0K
ICAgIC0JY29uc3QgY2hhciAqZGVwZmlsZSwgKnRhcmdldCwgKmNtZGxpbmU7DQogICAgLQlpbnQg
aW5zZXJ0X2V4dHJhX2RlcHMgPSAwOw0KICAgIC0Jdm9pZCAqYnVmOw0KICAgIC0NCiAgICAtCWlm
IChhcmdjID09IDYgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWUiKSkgew0KICAgIC0JCWluc2VydF9l
eHRyYV9kZXBzID0gMTsNCiAgICAtCQlhcmd2Kys7DQogICAgLQl9IGVsc2UgaWYgKGFyZ2MgIT0g
NSkNCiAgICAtCQl1c2FnZSgpOw0KICAgIC0NCiAgICAtCWRlcGZpbGUgPSBhcmd2WzFdOw0KICAg
IC0JdGFyZ2V0ID0gYXJndlsyXTsNCiAgICAtCWNtZGxpbmUgPSBhcmd2WzNdOw0KICAgIC0JYnVp
bGRkaXIgPSBhcmd2WzRdOw0KICAgIC0NCiAgICAtCXByaW50ZigiY21kXyVzIDo9ICVzXG5cbiIs
IHRhcmdldCwgY21kbGluZSk7DQogICAgLQ0KICAgIC0JYnVmID0gcmVhZF9maWxlKGRlcGZpbGUp
Ow0KICAgIC0JcGFyc2VfZGVwX2ZpbGUoYnVmLCB0YXJnZXQsIGluc2VydF9leHRyYV9kZXBzKTsN
CiAgICAtCWZyZWUoYnVmKTsNCiAgICAtDQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvZm9vLmggYi9zdXBwb3J0L2tjb25maWcvZm9vLmgN
CiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBiOWNmZGY4Li4wMDAwMDAw
DQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2Zvby5oDQogICAgKysrIC9kZXYvbnVsbA0KICAg
IEBAIC0xLDEyICswLDAgQEANCiAgICAtI2lmbmRlZiBfX0tDT05GSUdfRk9PX0gNCiAgICAtI2Rl
ZmluZSBfX0tDT05GSUdfRk9PX0gNCiAgICAtDQogICAgLSNpZm5kZWYgX19BUFBMRV9fDQogICAg
LSNpbmNsdWRlIDxmZWF0dXJlcy5oPg0KICAgIC0jZW5kaWYNCiAgICAtI2luY2x1ZGUgPGxpbWl0
cy5oPg0KICAgIC0NCiAgICAtI2lmbmRlZiBQQVRIX01BWA0KICAgIC0jZGVmaW5lIFBBVEhfTUFY
IDEwMjQNCiAgICAtI2VuZGlmDQogICAgLSNlbmRpZiAvKiBfX0tDT05GSUdfRk9PX0ggKi8NCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2djb25mLmMgYi9zdXBwb3J0L2tjb25maWcv
Z2NvbmYuYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDdjYmU2OGUu
LjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcvZ2NvbmYuYw0KICAgICsrKyAvZGV2
L251bGwNCiAgICBAQCAtMSwxNTQyICswLDAgQEANCiAgICAtLyogSGV5IEVNQUNTIC0qLSBsaW51
eC1jIC0qLSAqLw0KICAgIC0vKg0KICAgIC0gKg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIwMDIt
MjAwMyBSb21haW4gTGlldmluIDxyb21zQHRpbHAuaW5mbz4NCiAgICAtICogUmVsZWFzZWQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAgLSAqDQogICAgLSAqLw0KICAg
IC0NCiAgICAtI2lmZGVmIEhBVkVfQ09ORklHX0gNCiAgICAtIyAgaW5jbHVkZSA8Y29uZmlnLmg+
DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5j
bHVkZSAibGtjLmgiDQogICAgLSNpbmNsdWRlICJpbWFnZXMuYyINCiAgICAtDQogICAgLSNpbmNs
dWRlIDxnbGFkZS9nbGFkZS5oPg0KICAgIC0jaW5jbHVkZSA8Z3RrL2d0ay5oPg0KICAgIC0jaW5j
bHVkZSA8Z2xpYi5oPg0KICAgIC0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4NCiAgICAtDQog
ICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNp
bmNsdWRlIDx1bmlzdGQuaD4NCiAgICAtI2luY2x1ZGUgPHRpbWUuaD4NCiAgICAtDQogICAgLS8v
I2RlZmluZSBERUJVRw0KICAgIC0NCiAgICAtZW51bSB7DQogICAgLQlTSU5HTEVfVklFVywgU1BM
SVRfVklFVywgRlVMTF9WSUVXDQogICAgLX07DQogICAgLQ0KICAgIC1lbnVtIHsNCiAgICAtCU9Q
VF9OT1JNQUwsIE9QVF9BTEwsIE9QVF9QUk9NUFQNCiAgICAtfTsNCiAgICAtDQogICAgLXN0YXRp
YyBnaW50IHZpZXdfbW9kZSA9IEZVTExfVklFVzsNCiAgICAtc3RhdGljIGdib29sZWFuIHNob3df
bmFtZSA9IFRSVUU7DQogICAgLXN0YXRpYyBnYm9vbGVhbiBzaG93X3JhbmdlID0gVFJVRTsNCiAg
ICAtc3RhdGljIGdib29sZWFuIHNob3dfdmFsdWUgPSBUUlVFOw0KICAgIC1zdGF0aWMgZ2Jvb2xl
YW4gcmVzaXplYWJsZSA9IEZBTFNFOw0KICAgIC1zdGF0aWMgaW50IG9wdF9tb2RlID0gT1BUX05P
Uk1BTDsNCiAgICAtDQogICAgLUd0a1dpZGdldCAqbWFpbl93bmQgPSBOVUxMOw0KICAgIC1HdGtX
aWRnZXQgKnRyZWUxX3cgPSBOVUxMOwkvLyBsZWZ0ICBmcmFtZQ0KICAgIC1HdGtXaWRnZXQgKnRy
ZWUyX3cgPSBOVUxMOwkvLyByaWdodCBmcmFtZQ0KICAgIC1HdGtXaWRnZXQgKnRleHRfdyA9IE5V
TEw7DQogICAgLUd0a1dpZGdldCAqaHBhbmVkID0gTlVMTDsNCiAgICAtR3RrV2lkZ2V0ICp2cGFu
ZWQgPSBOVUxMOw0KICAgIC1HdGtXaWRnZXQgKmJhY2tfYnRuID0gTlVMTDsNCiAgICAtR3RrV2lk
Z2V0ICpzYXZlX2J0biA9IE5VTEw7DQogICAgLUd0a1dpZGdldCAqc2F2ZV9tZW51X2l0ZW0gPSBO
VUxMOw0KICAgIC0NCiAgICAtR3RrVGV4dFRhZyAqdGFnMSwgKnRhZzI7DQogICAgLUdka0NvbG9y
IGNvbG9yOw0KICAgIC0NCiAgICAtR3RrVHJlZVN0b3JlICp0cmVlMSwgKnRyZWUyLCAqdHJlZTsN
CiAgICAtR3RrVHJlZU1vZGVsICptb2RlbDEsICptb2RlbDI7DQogICAgLXN0YXRpYyBHdGtUcmVl
SXRlciAqcGFyZW50c1syNTZdOw0KICAgIC1zdGF0aWMgZ2ludCBpbmRlbnQ7DQogICAgLQ0KICAg
IC1zdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnQ7IC8vIGN1cnJlbnQgbm9kZSBmb3IgU0lOR0xF
IHZpZXcNCiAgICAtc3RhdGljIHN0cnVjdCBtZW51ICpicm93c2VkOyAvLyBicm93c2VkIG5vZGUg
Zm9yIFNQTElUIHZpZXcNCiAgICAtDQogICAgLWVudW0gew0KICAgIC0JQ09MX09QVElPTiwgQ09M
X05BTUUsIENPTF9OTywgQ09MX01PRCwgQ09MX1lFUywgQ09MX1ZBTFVFLA0KICAgIC0JQ09MX01F
TlUsIENPTF9DT0xPUiwgQ09MX0VESVQsIENPTF9QSVhCVUYsDQogICAgLQlDT0xfUElYVklTLCBD
T0xfQlROVklTLCBDT0xfQlROQUNULCBDT0xfQlROSU5DLCBDT0xfQlROUkFELA0KICAgIC0JQ09M
X05VTUJFUg0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgZGlzcGxheV9saXN0KHZv
aWQpOw0KICAgIC1zdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWUoc3RydWN0IG1lbnUgKm1lbnUpOw0K
ICAgIC1zdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lkKTsNCiAgICAtc3RhdGljIHZv
aWQgdXBkYXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJlZUl0ZXIgKiBkc3QpOw0KICAg
IC1zdGF0aWMgdm9pZCBzZXRfbm9kZShHdGtUcmVlSXRlciAqIG5vZGUsIHN0cnVjdCBtZW51ICpt
ZW51LCBnY2hhciAqKiByb3cpOw0KICAgIC1zdGF0aWMgZ2NoYXIgKipmaWxsX3JvdyhzdHJ1Y3Qg
bWVudSAqbWVudSk7DQogICAgLXN0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKTsNCiAgICAt
DQogICAgLS8qIEhlbHBpbmcvRGVidWdnaW5nIEZ1bmN0aW9ucyAqLw0KICAgIC0NCiAgICAtY29u
c3QgY2hhciAqZGJnX3N5bV9mbGFncyhpbnQgdmFsKQ0KICAgIC17DQogICAgLQlzdGF0aWMgY2hh
ciBidWZbMjU2XTsNCiAgICAtDQogICAgLQliemVybyhidWYsIDI1Nik7DQogICAgLQ0KICAgIC0J
aWYgKHZhbCAmIFNZTUJPTF9DT05TVCkNCiAgICAtCQlzdHJjYXQoYnVmLCAiY29uc3QvIik7DQog
ICAgLQlpZiAodmFsICYgU1lNQk9MX0NIRUNLKQ0KICAgIC0JCXN0cmNhdChidWYsICJjaGVjay8i
KTsNCiAgICAtCWlmICh2YWwgJiBTWU1CT0xfQ0hPSUNFKQ0KICAgIC0JCXN0cmNhdChidWYsICJj
aG9pY2UvIik7DQogICAgLQlpZiAodmFsICYgU1lNQk9MX0NIT0lDRVZBTCkNCiAgICAtCQlzdHJj
YXQoYnVmLCAiY2hvaWNldmFsLyIpOw0KICAgIC0JaWYgKHZhbCAmIFNZTUJPTF9WQUxJRCkNCiAg
ICAtCQlzdHJjYXQoYnVmLCAidmFsaWQvIik7DQogICAgLQlpZiAodmFsICYgU1lNQk9MX09QVElP
TkFMKQ0KICAgIC0JCXN0cmNhdChidWYsICJvcHRpb25hbC8iKTsNCiAgICAtCWlmICh2YWwgJiBT
WU1CT0xfV1JJVEUpDQogICAgLQkJc3RyY2F0KGJ1ZiwgIndyaXRlLyIpOw0KICAgIC0JaWYgKHZh
bCAmIFNZTUJPTF9DSEFOR0VEKQ0KICAgIC0JCXN0cmNhdChidWYsICJjaGFuZ2VkLyIpOw0KICAg
IC0JaWYgKHZhbCAmIFNZTUJPTF9BVVRPKQ0KICAgIC0JCXN0cmNhdChidWYsICJhdXRvLyIpOw0K
ICAgIC0NCiAgICAtCWJ1ZltzdHJsZW4oYnVmKSAtIDFdID0gJ1wwJzsNCiAgICAtDQogICAgLQly
ZXR1cm4gYnVmOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHJlcGxhY2VfYnV0dG9uX2ljb24o
R2xhZGVYTUwgKiB4bWwsIEdka0RyYXdhYmxlICogd2luZG93LA0KICAgIC0JCQkgR3RrU3R5bGUg
KiBzdHlsZSwgZ2NoYXIgKiBidG5fbmFtZSwgZ2NoYXIgKiogeHBtKQ0KICAgIC17DQogICAgLQlH
ZGtQaXhtYXAgKnBpeG1hcDsNCiAgICAtCUdka0JpdG1hcCAqbWFzazsNCiAgICAtCUd0a1Rvb2xC
dXR0b24gKmJ1dHRvbjsNCiAgICAtCUd0a1dpZGdldCAqaW1hZ2U7DQogICAgLQ0KICAgIC0JcGl4
bWFwID0gZ2RrX3BpeG1hcF9jcmVhdGVfZnJvbV94cG1fZCh3aW5kb3csICZtYXNrLA0KICAgIC0J
CQkJCSAgICAgICZzdHlsZS0+YmdbR1RLX1NUQVRFX05PUk1BTF0sDQogICAgLQkJCQkJICAgICAg
eHBtKTsNCiAgICAtDQogICAgLQlidXR0b24gPSBHVEtfVE9PTF9CVVRUT04oZ2xhZGVfeG1sX2dl
dF93aWRnZXQoeG1sLCBidG5fbmFtZSkpOw0KICAgIC0JaW1hZ2UgPSBndGtfaW1hZ2VfbmV3X2Zy
b21fcGl4bWFwKHBpeG1hcCwgbWFzayk7DQogICAgLQlndGtfd2lkZ2V0X3Nob3coaW1hZ2UpOw0K
ICAgIC0JZ3RrX3Rvb2xfYnV0dG9uX3NldF9pY29uX3dpZGdldChidXR0b24sIGltYWdlKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtLyogTWFpbiBXaW5kb3cgSW5pdGlhbGl6YXRpb24gKi8NCiAgICAt
dm9pZCBpbml0X21haW5fd2luZG93KGNvbnN0IGdjaGFyICogZ2xhZGVfZmlsZSkNCiAgICAtew0K
ICAgIC0JR2xhZGVYTUwgKnhtbDsNCiAgICAtCUd0a1dpZGdldCAqd2lkZ2V0Ow0KICAgIC0JR3Rr
VGV4dEJ1ZmZlciAqdHh0YnVmOw0KICAgIC0JR3RrU3R5bGUgKnN0eWxlOw0KICAgIC0NCiAgICAt
CXhtbCA9IGdsYWRlX3htbF9uZXcoZ2xhZGVfZmlsZSwgIndpbmRvdzEiLCBOVUxMKTsNCiAgICAt
CWlmICgheG1sKQ0KICAgIC0JCWdfZXJyb3IoXygiR1VJIGxvYWRpbmcgZmFpbGVkICFcbiIpKTsN
CiAgICAtCWdsYWRlX3htbF9zaWduYWxfYXV0b2Nvbm5lY3QoeG1sKTsNCiAgICAtDQogICAgLQlt
YWluX3duZCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgIndpbmRvdzEiKTsNCiAgICAtCWhw
YW5lZCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgImhwYW5lZDEiKTsNCiAgICAtCXZwYW5l
ZCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInZwYW5lZDEiKTsNCiAgICAtCXRyZWUxX3cg
PSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0cmVldmlldzEiKTsNCiAgICAtCXRyZWUyX3cg
PSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0cmVldmlldzIiKTsNCiAgICAtCXRleHRfdyA9
IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRleHR2aWV3MyIpOw0KICAgIC0NCiAgICAtCWJh
Y2tfYnRuID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiYnV0dG9uMSIpOw0KICAgIC0JZ3Rr
X3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7DQogICAgLQ0KICAgIC0Jd2lk
Z2V0ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAic2hvd19uYW1lMSIpOw0KICAgIC0JZ3Rr
X2NoZWNrX21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtDaGVja01lbnVJdGVtICopIHdpZGdldCwN
CiAgICAtCQkJCSAgICAgICBzaG93X25hbWUpOw0KICAgIC0NCiAgICAtCXdpZGdldCA9IGdsYWRl
X3htbF9nZXRfd2lkZ2V0KHhtbCwgInNob3dfcmFuZ2UxIik7DQogICAgLQlndGtfY2hlY2tfbWVu
dV9pdGVtX3NldF9hY3RpdmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lkZ2V0LA0KICAgIC0JCQkJ
ICAgICAgIHNob3dfcmFuZ2UpOw0KICAgIC0NCiAgICAtCXdpZGdldCA9IGdsYWRlX3htbF9nZXRf
d2lkZ2V0KHhtbCwgInNob3dfZGF0YTEiKTsNCiAgICAtCWd0a19jaGVja19tZW51X2l0ZW1fc2V0
X2FjdGl2ZSgoR3RrQ2hlY2tNZW51SXRlbSAqKSB3aWRnZXQsDQogICAgLQkJCQkgICAgICAgc2hv
d192YWx1ZSk7DQogICAgLQ0KICAgIC0Jc2F2ZV9idG4gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4
bWwsICJidXR0b24zIik7DQogICAgLQlzYXZlX21lbnVfaXRlbSA9IGdsYWRlX3htbF9nZXRfd2lk
Z2V0KHhtbCwgInNhdmUxIik7DQogICAgLQljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZf
Y2hhbmdlZCk7DQogICAgLQ0KICAgIC0Jc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShtYWlu
X3duZCk7DQogICAgLQl3aWRnZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0b29sYmFy
MSIpOw0KICAgIC0NCiAgICAtI2lmIDAJLyogVXNlIHN0b2NrIEd0ayBpY29ucyBpbnN0ZWFkICov
DQogICAgLQlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwgbWFpbl93bmQtPndpbmRvdywgc3R5bGUs
DQogICAgLQkJCSAgICAiYnV0dG9uMSIsIChnY2hhciAqKikgeHBtX2JhY2spOw0KICAgIC0JcmVw
bGFjZV9idXR0b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLA0KICAgIC0JCQkg
ICAgImJ1dHRvbjIiLCAoZ2NoYXIgKiopIHhwbV9sb2FkKTsNCiAgICAtCXJlcGxhY2VfYnV0dG9u
X2ljb24oeG1sLCBtYWluX3duZC0+d2luZG93LCBzdHlsZSwNCiAgICAtCQkJICAgICJidXR0b24z
IiwgKGdjaGFyICoqKSB4cG1fc2F2ZSk7DQogICAgLSNlbmRpZg0KICAgIC0JcmVwbGFjZV9idXR0
b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLA0KICAgIC0JCQkgICAgImJ1dHRv
bjQiLCAoZ2NoYXIgKiopIHhwbV9zaW5nbGVfdmlldyk7DQogICAgLQlyZXBsYWNlX2J1dHRvbl9p
Y29uKHhtbCwgbWFpbl93bmQtPndpbmRvdywgc3R5bGUsDQogICAgLQkJCSAgICAiYnV0dG9uNSIs
IChnY2hhciAqKikgeHBtX3NwbGl0X3ZpZXcpOw0KICAgIC0JcmVwbGFjZV9idXR0b25faWNvbih4
bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLA0KICAgIC0JCQkgICAgImJ1dHRvbjYiLCAoZ2No
YXIgKiopIHhwbV90cmVlX3ZpZXcpOw0KICAgIC0NCiAgICAtI2lmIDANCiAgICAtCXN3aXRjaCAo
dmlld19tb2RlKSB7DQogICAgLQljYXNlIFNJTkdMRV9WSUVXOg0KICAgIC0JCXdpZGdldCA9IGds
YWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgImJ1dHRvbjQiKTsNCiAgICAtCQlnX3NpZ25hbF9lbWl0
X2J5X25hbWUod2lkZ2V0LCAiY2xpY2tlZCIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBT
UExJVF9WSUVXOg0KICAgIC0JCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgImJ1
dHRvbjUiKTsNCiAgICAtCQlnX3NpZ25hbF9lbWl0X2J5X25hbWUod2lkZ2V0LCAiY2xpY2tlZCIp
Ow0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBGVUxMX1ZJRVc6DQogICAgLQkJd2lkZ2V0ID0g
Z2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiYnV0dG9uNiIpOw0KICAgIC0JCWdfc2lnbmFsX2Vt
aXRfYnlfbmFtZSh3aWRnZXQsICJjbGlja2VkIik7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQog
ICAgLSNlbmRpZg0KICAgIC0JdHh0YnVmID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVyKEdUS19U
RVhUX1ZJRVcodGV4dF93KSk7DQogICAgLQl0YWcxID0gZ3RrX3RleHRfYnVmZmVyX2NyZWF0ZV90
YWcodHh0YnVmLCAibXl0YWcxIiwNCiAgICAtCQkJCQkgICJmb3JlZ3JvdW5kIiwgInJlZCIsDQog
ICAgLQkJCQkJICAid2VpZ2h0IiwgUEFOR09fV0VJR0hUX0JPTEQsDQogICAgLQkJCQkJICBOVUxM
KTsNCiAgICAtCXRhZzIgPSBndGtfdGV4dF9idWZmZXJfY3JlYXRlX3RhZyh0eHRidWYsICJteXRh
ZzIiLA0KICAgIC0JCQkJCSAgLyoic3R5bGUiLCBQQU5HT19TVFlMRV9PQkxJUVVFLCAqLw0KICAg
IC0JCQkJCSAgTlVMTCk7DQogICAgLQ0KICAgIC0JZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJ
TkRPVyhtYWluX3duZCksIHJvb3RtZW51LnByb21wdC0+dGV4dCk7DQogICAgLQ0KICAgIC0JZ3Rr
X3dpZGdldF9zaG93KG1haW5fd25kKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBpbml0X3Ry
ZWVfbW9kZWwodm9pZCkNCiAgICAtew0KICAgIC0JZ2ludCBpOw0KICAgIC0NCiAgICAtCXRyZWUg
PSB0cmVlMiA9IGd0a190cmVlX3N0b3JlX25ldyhDT0xfTlVNQkVSLA0KICAgIC0JCQkJCSAgR19U
WVBFX1NUUklORywgR19UWVBFX1NUUklORywNCiAgICAtCQkJCQkgIEdfVFlQRV9TVFJJTkcsIEdf
VFlQRV9TVFJJTkcsDQogICAgLQkJCQkJICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLA0K
ICAgIC0JCQkJCSAgR19UWVBFX1BPSU5URVIsIEdES19UWVBFX0NPTE9SLA0KICAgIC0JCQkJCSAg
R19UWVBFX0JPT0xFQU4sIEdES19UWVBFX1BJWEJVRiwNCiAgICAtCQkJCQkgIEdfVFlQRV9CT09M
RUFOLCBHX1RZUEVfQk9PTEVBTiwNCiAgICAtCQkJCQkgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVf
Qk9PTEVBTiwNCiAgICAtCQkJCQkgIEdfVFlQRV9CT09MRUFOKTsNCiAgICAtCW1vZGVsMiA9IEdU
S19UUkVFX01PREVMKHRyZWUyKTsNCiAgICAtDQogICAgLQlmb3IgKHBhcmVudHNbMF0gPSBOVUxM
LCBpID0gMTsgaSA8IDI1NjsgaSsrKQ0KICAgIC0JCXBhcmVudHNbaV0gPSAoR3RrVHJlZUl0ZXIg
KikgZ19tYWxsb2Moc2l6ZW9mKEd0a1RyZWVJdGVyKSk7DQogICAgLQ0KICAgIC0JdHJlZTEgPSBn
dGtfdHJlZV9zdG9yZV9uZXcoQ09MX05VTUJFUiwNCiAgICAtCQkJCSAgIEdfVFlQRV9TVFJJTkcs
IEdfVFlQRV9TVFJJTkcsDQogICAgLQkJCQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5H
LA0KICAgIC0JCQkJICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywNCiAgICAtCQkJCSAg
IEdfVFlQRV9QT0lOVEVSLCBHREtfVFlQRV9DT0xPUiwNCiAgICAtCQkJCSAgIEdfVFlQRV9CT09M
RUFOLCBHREtfVFlQRV9QSVhCVUYsDQogICAgLQkJCQkgICBHX1RZUEVfQk9PTEVBTiwgR19UWVBF
X0JPT0xFQU4sDQogICAgLQkJCQkgICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sDQog
ICAgLQkJCQkgICBHX1RZUEVfQk9PTEVBTik7DQogICAgLQltb2RlbDEgPSBHVEtfVFJFRV9NT0RF
TCh0cmVlMSk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgaW5pdF9sZWZ0X3RyZWUodm9pZCkN
CiAgICAtew0KICAgIC0JR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHRyZWUxX3cp
Ow0KICAgIC0JR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsNCiAgICAtCUd0a1RyZWVTZWxlY3Rp
b24gKnNlbDsNCiAgICAtCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47DQogICAgLQ0KICAgIC0J
Z3RrX3RyZWVfdmlld19zZXRfbW9kZWwodmlldywgbW9kZWwxKTsNCiAgICAtCWd0a190cmVlX3Zp
ZXdfc2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVFKTsNCiAgICAtCWd0a190cmVlX3ZpZXdf
c2V0X3J1bGVzX2hpbnQodmlldywgVFJVRSk7DQogICAgLQ0KICAgIC0JY29sdW1uID0gZ3RrX3Ry
ZWVfdmlld19jb2x1bW5fbmV3KCk7DQogICAgLQlndGtfdHJlZV92aWV3X2FwcGVuZF9jb2x1bW4o
dmlldywgY29sdW1uKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF90aXRsZShjb2x1
bW4sIF8oIk9wdGlvbnMiKSk7DQogICAgLQ0KICAgIC0JcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5k
ZXJlcl90b2dnbGVfbmV3KCk7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0
KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgLQkJCQkJcmVuZGVyZXIsIEZBTFNF
KTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJ
RVdfQ09MVU1OKGNvbHVtbiksDQogICAgLQkJCQkJICAgIHJlbmRlcmVyLA0KICAgIC0JCQkJCSAg
ICAiYWN0aXZlIiwgQ09MX0JUTkFDVCwNCiAgICAtCQkJCQkgICAgImluY29uc2lzdGVudCIsIENP
TF9CVE5JTkMsDQogICAgLQkJCQkJICAgICJ2aXNpYmxlIiwgQ09MX0JUTlZJUywNCiAgICAtCQkJ
CQkgICAgInJhZGlvIiwgQ09MX0JUTlJBRCwgTlVMTCk7DQogICAgLQlyZW5kZXJlciA9IGd0a19j
ZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNr
X3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgLQkJCQkJcmVuZGVyZXIs
IEZBTFNFKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19U
UkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgLQkJCQkJICAgIHJlbmRlcmVyLA0KICAgIC0J
CQkJCSAgICAidGV4dCIsIENPTF9PUFRJT04sDQogICAgLQkJCQkJICAgICJmb3JlZ3JvdW5kLWdk
ayIsDQogICAgLQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgLQ0KICAgIC0Jc2VsID0g
Z3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHZpZXcpOw0KICAgIC0JZ3RrX3RyZWVfc2VsZWN0
aW9uX3NldF9tb2RlKHNlbCwgR1RLX1NFTEVDVElPTl9TSU5HTEUpOw0KICAgIC0JZ3RrX3dpZGdl
dF9yZWFsaXplKHRyZWUxX3cpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCByZW5k
ZXJlcl9lZGl0ZWQoR3RrQ2VsbFJlbmRlcmVyVGV4dCAqIGNlbGwsDQogICAgLQkJCSAgICBjb25z
dCBnY2hhciAqIHBhdGhfc3RyaW5nLA0KICAgIC0JCQkgICAgY29uc3QgZ2NoYXIgKiBuZXdfdGV4
dCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsNCiAgICAtDQogICAgLXZvaWQgaW5pdF9yaWdodF90cmVl
KHZvaWQpDQogICAgLXsNCiAgICAtCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh0
cmVlMl93KTsNCiAgICAtCUd0a0NlbGxSZW5kZXJlciAqcmVuZGVyZXI7DQogICAgLQlHdGtUcmVl
U2VsZWN0aW9uICpzZWw7DQogICAgLQlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOw0KICAgIC0J
Z2ludCBpOw0KICAgIC0NCiAgICAtCWd0a190cmVlX3ZpZXdfc2V0X21vZGVsKHZpZXcsIG1vZGVs
Mik7DQogICAgLQlndGtfdHJlZV92aWV3X3NldF9oZWFkZXJzX3Zpc2libGUodmlldywgVFJVRSk7
DQogICAgLQlndGtfdHJlZV92aWV3X3NldF9ydWxlc19oaW50KHZpZXcsIFRSVUUpOw0KICAgIC0N
CiAgICAtCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfY29sdW1uX25ldygpOw0KICAgIC0JZ3RrX3Ry
ZWVfdmlld19hcHBlbmRfY29sdW1uKHZpZXcsIGNvbHVtbik7DQogICAgLQlndGtfdHJlZV92aWV3
X2NvbHVtbl9zZXRfdGl0bGUoY29sdW1uLCBfKCJPcHRpb25zIikpOw0KICAgIC0NCiAgICAtCXJl
bmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfcGl4YnVmX25ldygpOw0KICAgIC0JZ3RrX3RyZWVf
dmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLA0KICAg
IC0JCQkJCXJlbmRlcmVyLCBGQUxTRSk7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRf
YXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCSAgICBy
ZW5kZXJlciwNCiAgICAtCQkJCQkgICAgInBpeGJ1ZiIsIENPTF9QSVhCVUYsDQogICAgLQkJCQkJ
ICAgICJ2aXNpYmxlIiwgQ09MX1BJWFZJUywgTlVMTCk7DQogICAgLQlyZW5kZXJlciA9IGd0a19j
ZWxsX3JlbmRlcmVyX3RvZ2dsZV9uZXcoKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3Bh
Y2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwNCiAgICAtCQkJCQlyZW5kZXJl
ciwgRkFMU0UpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0dHJpYnV0ZXMoR1RL
X1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwNCiAgICAtCQkJCQkgICAgcmVuZGVyZXIsDQogICAg
LQkJCQkJICAgICJhY3RpdmUiLCBDT0xfQlROQUNULA0KICAgIC0JCQkJCSAgICAiaW5jb25zaXN0
ZW50IiwgQ09MX0JUTklOQywNCiAgICAtCQkJCQkgICAgInZpc2libGUiLCBDT0xfQlROVklTLA0K
ICAgIC0JCQkJCSAgICAicmFkaW8iLCBDT0xfQlROUkFELCBOVUxMKTsNCiAgICAtCXJlbmRlcmVy
ID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29s
dW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwNCiAgICAtCQkJCQly
ZW5kZXJlciwgRkFMU0UpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0dHJpYnV0
ZXMoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwNCiAgICAtCQkJCQkgICAgcmVuZGVyZXIs
DQogICAgLQkJCQkJICAgICJ0ZXh0IiwgQ09MX09QVElPTiwNCiAgICAtCQkJCQkgICAgImZvcmVn
cm91bmQtZ2RrIiwNCiAgICAtCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsNCiAgICAtDQogICAg
LQlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgLQlndGtfdHJl
ZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLA0KICAgIC0JCQkJ
CQkgICAgXygiTmFtZSIpLCByZW5kZXJlciwNCiAgICAtCQkJCQkJICAgICJ0ZXh0IiwgQ09MX05B
TUUsDQogICAgLQkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLA0KICAgIC0JCQkJCQkgICAgQ09M
X0NPTE9SLCBOVUxMKTsNCiAgICAtCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9u
ZXcoKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXMo
dmlldywgLTEsDQogICAgLQkJCQkJCSAgICAiTiIsIHJlbmRlcmVyLA0KICAgIC0JCQkJCQkgICAg
InRleHQiLCBDT0xfTk8sDQogICAgLQkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLA0KICAgIC0J
CQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsNCiAgICAtCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVu
ZGVyZXJfdGV4dF9uZXcoKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVtbl93aXRo
X2F0dHJpYnV0ZXModmlldywgLTEsDQogICAgLQkJCQkJCSAgICAiTSIsIHJlbmRlcmVyLA0KICAg
IC0JCQkJCQkgICAgInRleHQiLCBDT0xfTU9ELA0KICAgIC0JCQkJCQkgICAgImZvcmVncm91bmQt
Z2RrIiwNCiAgICAtCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgLQlyZW5kZXJlciA9
IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgLQlndGtfdHJlZV92aWV3X2luc2Vy
dF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLA0KICAgIC0JCQkJCQkgICAgIlkiLCBy
ZW5kZXJlciwNCiAgICAtCQkJCQkJICAgICJ0ZXh0IiwgQ09MX1lFUywNCiAgICAtCQkJCQkJICAg
ICJmb3JlZ3JvdW5kLWdkayIsDQogICAgLQkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOw0KICAg
IC0JcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOw0KICAgIC0JZ3RrX3Ry
ZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwNCiAgICAtCQkJ
CQkJICAgIF8oIlZhbHVlIiksIHJlbmRlcmVyLA0KICAgIC0JCQkJCQkgICAgInRleHQiLCBDT0xf
VkFMVUUsDQogICAgLQkJCQkJCSAgICAiZWRpdGFibGUiLA0KICAgIC0JCQkJCQkgICAgQ09MX0VE
SVQsDQogICAgLQkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLA0KICAgIC0JCQkJCQkgICAgQ09M
X0NPTE9SLCBOVUxMKTsNCiAgICAtCWdfc2lnbmFsX2Nvbm5lY3QoR19PQkpFQ1QocmVuZGVyZXIp
LCAiZWRpdGVkIiwNCiAgICAtCQkJIEdfQ0FMTEJBQ0socmVuZGVyZXJfZWRpdGVkKSwgTlVMTCk7
DQogICAgLQ0KICAgIC0JY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENP
TF9OQU1FKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwg
c2hvd19uYW1lKTsNCiAgICAtCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3
LCBDT0xfTk8pOw0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sdW1u
LCBzaG93X3JhbmdlKTsNCiAgICAtCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2
aWV3LCBDT0xfTU9EKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNv
bHVtbiwgc2hvd19yYW5nZSk7DQogICAgLQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1
bW4odmlldywgQ09MX1lFUyk7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJs
ZShjb2x1bW4sIHNob3dfcmFuZ2UpOw0KICAgIC0JY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRf
Y29sdW1uKHZpZXcsIENPTF9WQUxVRSk7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRf
dmlzaWJsZShjb2x1bW4sIHNob3dfdmFsdWUpOw0KICAgIC0NCiAgICAtCWlmIChyZXNpemVhYmxl
KSB7DQogICAgLQkJZm9yIChpID0gMDsgaSA8IENPTF9WQUxVRTsgaSsrKSB7DQogICAgLQkJCWNv
bHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBpKTsNCiAgICAtCQkJZ3RrX3Ry
ZWVfdmlld19jb2x1bW5fc2V0X3Jlc2l6YWJsZShjb2x1bW4sIFRSVUUpOw0KICAgIC0JCX0NCiAg
ICAtCX0NCiAgICAtDQogICAgLQlzZWwgPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24odmll
dyk7DQogICAgLQlndGtfdHJlZV9zZWxlY3Rpb25fc2V0X21vZGUoc2VsLCBHVEtfU0VMRUNUSU9O
X1NJTkdMRSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC0vKiBVdGlsaXR5IEZ1bmN0aW9u
cyAqLw0KICAgIC0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHRleHRfaW5zZXJ0X2hlbHAoc3Ry
dWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCUd0a1RleHRCdWZmZXIgKmJ1ZmZlcjsNCiAg
ICAtCUd0a1RleHRJdGVyIHN0YXJ0LCBlbmQ7DQogICAgLQljb25zdCBjaGFyICpwcm9tcHQgPSBf
KG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQogICAgLQlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25l
dygpOw0KICAgIC0NCiAgICAtCW1lbnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsNCiAgICAt
DQogICAgLQlidWZmZXIgPSBndGtfdGV4dF92aWV3X2dldF9idWZmZXIoR1RLX1RFWFRfVklFVyh0
ZXh0X3cpKTsNCiAgICAtCWd0a190ZXh0X2J1ZmZlcl9nZXRfYm91bmRzKGJ1ZmZlciwgJnN0YXJ0
LCAmZW5kKTsNCiAgICAtCWd0a190ZXh0X2J1ZmZlcl9kZWxldGUoYnVmZmVyLCAmc3RhcnQsICZl
bmQpOw0KICAgIC0JZ3RrX3RleHRfdmlld19zZXRfbGVmdF9tYXJnaW4oR1RLX1RFWFRfVklFVyh0
ZXh0X3cpLCAxNSk7DQogICAgLQ0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2dldF9lbmRfaXRlcihi
dWZmZXIsICZlbmQpOw0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2luc2VydF93aXRoX3RhZ3MoYnVm
ZmVyLCAmZW5kLCBwcm9tcHQsIC0xLCB0YWcxLA0KICAgIC0JCQkJCSBOVUxMKTsNCiAgICAtCWd0
a190ZXh0X2J1ZmZlcl9pbnNlcnRfYXRfY3Vyc29yKGJ1ZmZlciwgIlxuXG4iLCAyKTsNCiAgICAt
CWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIoYnVmZmVyLCAmZW5kKTsNCiAgICAtCWd0a190
ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwgc3RyX2dldCgmaGVscCks
IC0xLCB0YWcyLA0KICAgIC0JCQkJCSBOVUxMKTsNCiAgICAtCXN0cl9mcmVlKCZoZWxwKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHRleHRfaW5zZXJ0X21zZyhjb25z
dCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqbWVzc2FnZSkNCiAgICAtew0KICAgIC0JR3RrVGV4
dEJ1ZmZlciAqYnVmZmVyOw0KICAgIC0JR3RrVGV4dEl0ZXIgc3RhcnQsIGVuZDsNCiAgICAtCWNv
bnN0IGNoYXIgKm1zZyA9IG1lc3NhZ2U7DQogICAgLQ0KICAgIC0JYnVmZmVyID0gZ3RrX3RleHRf
dmlld19nZXRfYnVmZmVyKEdUS19URVhUX1ZJRVcodGV4dF93KSk7DQogICAgLQlndGtfdGV4dF9i
dWZmZXJfZ2V0X2JvdW5kcyhidWZmZXIsICZzdGFydCwgJmVuZCk7DQogICAgLQlndGtfdGV4dF9i
dWZmZXJfZGVsZXRlKGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsNCiAgICAtCWd0a190ZXh0X3ZpZXdf
c2V0X2xlZnRfbWFyZ2luKEdUS19URVhUX1ZJRVcodGV4dF93KSwgMTUpOw0KICAgIC0NCiAgICAt
CWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIoYnVmZmVyLCAmZW5kKTsNCiAgICAtCWd0a190
ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwgdGl0bGUsIC0xLCB0YWcx
LA0KICAgIC0JCQkJCSBOVUxMKTsNCiAgICAtCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfYXRfY3Vy
c29yKGJ1ZmZlciwgIlxuXG4iLCAyKTsNCiAgICAtCWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0
ZXIoYnVmZmVyLCAmZW5kKTsNCiAgICAtCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdz
KGJ1ZmZlciwgJmVuZCwgbXNnLCAtMSwgdGFnMiwNCiAgICAtCQkJCQkgTlVMTCk7DQogICAgLX0N
CiAgICAtDQogICAgLQ0KICAgIC0vKiBNYWluIFdpbmRvd3MgQ2FsbGJhY2tzICovDQogICAgLQ0K
ICAgIC12b2lkIG9uX3NhdmVfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50
ZXIgdXNlcl9kYXRhKTsNCiAgICAtZ2Jvb2xlYW4gb25fd2luZG93MV9kZWxldGVfZXZlbnQoR3Rr
V2lkZ2V0ICogd2lkZ2V0LCBHZGtFdmVudCAqIGV2ZW50LA0KICAgIC0JCQkJIGdwb2ludGVyIHVz
ZXJfZGF0YSkNCiAgICAtew0KICAgIC0JR3RrV2lkZ2V0ICpkaWFsb2csICpsYWJlbDsNCiAgICAt
CWdpbnQgcmVzdWx0Ow0KICAgIC0NCiAgICAtCWlmICghY29uZl9nZXRfY2hhbmdlZCgpKQ0KICAg
IC0JCXJldHVybiBGQUxTRTsNCiAgICAtDQogICAgLQlkaWFsb2cgPSBndGtfZGlhbG9nX25ld193
aXRoX2J1dHRvbnMoXygiV2FybmluZyAhIiksDQogICAgLQkJCQkJICAgICBHVEtfV0lORE9XKG1h
aW5fd25kKSwNCiAgICAtCQkJCQkgICAgIChHdGtEaWFsb2dGbGFncykNCiAgICAtCQkJCQkgICAg
IChHVEtfRElBTE9HX01PREFMIHwNCiAgICAtCQkJCQkgICAgICBHVEtfRElBTE9HX0RFU1RST1lf
V0lUSF9QQVJFTlQpLA0KICAgIC0JCQkJCSAgICAgR1RLX1NUT0NLX09LLA0KICAgIC0JCQkJCSAg
ICAgR1RLX1JFU1BPTlNFX1lFUywNCiAgICAtCQkJCQkgICAgIEdUS19TVE9DS19OTywNCiAgICAt
CQkJCQkgICAgIEdUS19SRVNQT05TRV9OTywNCiAgICAtCQkJCQkgICAgIEdUS19TVE9DS19DQU5D
RUwsDQogICAgLQkJCQkJICAgICBHVEtfUkVTUE9OU0VfQ0FOQ0VMLCBOVUxMKTsNCiAgICAtCWd0
a19kaWFsb2dfc2V0X2RlZmF1bHRfcmVzcG9uc2UoR1RLX0RJQUxPRyhkaWFsb2cpLA0KICAgIC0J
CQkJCUdUS19SRVNQT05TRV9DQU5DRUwpOw0KICAgIC0NCiAgICAtCWxhYmVsID0gZ3RrX2xhYmVs
X25ldyhfKCJcblNhdmUgY29uZmlndXJhdGlvbiA/XG4iKSk7DQogICAgLQlndGtfY29udGFpbmVy
X2FkZChHVEtfQ09OVEFJTkVSKEdUS19ESUFMT0coZGlhbG9nKS0+dmJveCksIGxhYmVsKTsNCiAg
ICAtCWd0a193aWRnZXRfc2hvdyhsYWJlbCk7DQogICAgLQ0KICAgIC0JcmVzdWx0ID0gZ3RrX2Rp
YWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsNCiAgICAtCXN3aXRjaCAocmVzdWx0KSB7DQog
ICAgLQljYXNlIEdUS19SRVNQT05TRV9ZRVM6DQogICAgLQkJb25fc2F2ZV9hY3RpdmF0ZShOVUxM
LCBOVUxMKTsNCiAgICAtCQlyZXR1cm4gRkFMU0U7DQogICAgLQljYXNlIEdUS19SRVNQT05TRV9O
TzoNCiAgICAtCQlyZXR1cm4gRkFMU0U7DQogICAgLQljYXNlIEdUS19SRVNQT05TRV9DQU5DRUw6
DQogICAgLQljYXNlIEdUS19SRVNQT05TRV9ERUxFVEVfRVZFTlQ6DQogICAgLQlkZWZhdWx0Og0K
ICAgIC0JCWd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOw0KICAgIC0JCXJldHVybiBUUlVFOw0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCXJldHVybiBGQUxTRTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
DQogICAgLXZvaWQgb25fd2luZG93MV9kZXN0cm95KEd0a09iamVjdCAqIG9iamVjdCwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlndGtfbWFpbl9xdWl0KCk7DQogICAgLX0NCiAg
ICAtDQogICAgLQ0KICAgIC12b2lkDQogICAgLW9uX3dpbmRvdzFfc2l6ZV9yZXF1ZXN0KEd0a1dp
ZGdldCAqIHdpZGdldCwNCiAgICAtCQkJR3RrUmVxdWlzaXRpb24gKiByZXF1aXNpdGlvbiwgZ3Bv
aW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlzdGF0aWMgZ2ludCBvbGRfaDsNCiAgICAt
CWdpbnQgdywgaDsNCiAgICAtDQogICAgLQlpZiAod2lkZ2V0LT53aW5kb3cgPT0gTlVMTCkNCiAg
ICAtCQlndGtfd2luZG93X2dldF9kZWZhdWx0X3NpemUoR1RLX1dJTkRPVyhtYWluX3duZCksICZ3
LCAmaCk7DQogICAgLQllbHNlDQogICAgLQkJZ2RrX3dpbmRvd19nZXRfc2l6ZSh3aWRnZXQtPndp
bmRvdywgJncsICZoKTsNCiAgICAtDQogICAgLQlpZiAoaCA9PSBvbGRfaCkNCiAgICAtCQlyZXR1
cm47DQogICAgLQlvbGRfaCA9IGg7DQogICAgLQ0KICAgIC0JZ3RrX3BhbmVkX3NldF9wb3NpdGlv
bihHVEtfUEFORUQodnBhbmVkKSwgMiAqIGggLyAzKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQog
ICAgLS8qIE1lbnUgJiBUb29sYmFyIENhbGxiYWNrcyAqLw0KICAgIC0NCiAgICAtDQogICAgLXN0
YXRpYyB2b2lkDQogICAgLWxvYWRfZmlsZW5hbWUoR3RrRmlsZVNlbGVjdGlvbiAqIGZpbGVfc2Vs
ZWN0b3IsIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JY29uc3QgZ2NoYXIgKmZu
Ow0KICAgIC0NCiAgICAtCWZuID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX2dldF9maWxlbmFtZShHVEtf
RklMRV9TRUxFQ1RJT04NCiAgICAtCQkJCQkgICAgICh1c2VyX2RhdGEpKTsNCiAgICAtDQogICAg
LQlpZiAoY29uZl9yZWFkKGZuKSkNCiAgICAtCQl0ZXh0X2luc2VydF9tc2coXygiRXJyb3IiKSwg
XygiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJhdGlvbiAhIikpOw0KICAgIC0JZWxzZQ0KICAgIC0J
CWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIG9uX2xv
YWQxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkN
CiAgICAtew0KICAgIC0JR3RrV2lkZ2V0ICpmczsNCiAgICAtDQogICAgLQlmcyA9IGd0a19maWxl
X3NlbGVjdGlvbl9uZXcoXygiTG9hZCBmaWxlLi4uIikpOw0KICAgIC0JZ19zaWduYWxfY29ubmVj
dChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksDQogICAgLQkJ
CSAiY2xpY2tlZCIsDQogICAgLQkJCSBHX0NBTExCQUNLKGxvYWRfZmlsZW5hbWUpLCAoZ3BvaW50
ZXIpIGZzKTsNCiAgICAtCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUDQogICAg
LQkJCQkgKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksDQogICAgLQkJCQkgImNs
aWNrZWQiLCBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksDQogICAgLQkJCQkgKGdwb2lu
dGVyKSBmcyk7DQogICAgLQlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVA0KICAg
IC0JCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5jYW5jZWxfYnV0dG9uKSwNCiAgICAtCQkJ
CSAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwNCiAgICAtCQkJCSAo
Z3BvaW50ZXIpIGZzKTsNCiAgICAtCWd0a193aWRnZXRfc2hvdyhmcyk7DQogICAgLX0NCiAgICAt
DQogICAgLQ0KICAgIC12b2lkIG9uX3NhdmVfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRl
bSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlpZiAoY29uZl93cml0ZShOVUxM
KSkNCiAgICAtCQl0ZXh0X2luc2VydF9tc2coXygiRXJyb3IiKSwgXygiVW5hYmxlIHRvIHNhdmUg
Y29uZmlndXJhdGlvbiAhIikpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtc3RhdGljIHZv
aWQNCiAgICAtc3RvcmVfZmlsZW5hbWUoR3RrRmlsZVNlbGVjdGlvbiAqIGZpbGVfc2VsZWN0b3Is
IGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JY29uc3QgZ2NoYXIgKmZuOw0KICAg
IC0NCiAgICAtCWZuID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX2dldF9maWxlbmFtZShHVEtfRklMRV9T
RUxFQ1RJT04NCiAgICAtCQkJCQkgICAgICh1c2VyX2RhdGEpKTsNCiAgICAtDQogICAgLQlpZiAo
Y29uZl93cml0ZShmbikpDQogICAgLQkJdGV4dF9pbnNlcnRfbXNnKF8oIkVycm9yIiksIF8oIlVu
YWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24gISIpKTsNCiAgICAtDQogICAgLQlndGtfd2lkZ2V0
X2Rlc3Ryb3koR1RLX1dJREdFVCh1c2VyX2RhdGEpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9p
ZCBvbl9zYXZlX2FzMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1
c2VyX2RhdGEpDQogICAgLXsNCiAgICAtCUd0a1dpZGdldCAqZnM7DQogICAgLQ0KICAgIC0JZnMg
PSBndGtfZmlsZV9zZWxlY3Rpb25fbmV3KF8oIlNhdmUgZmlsZSBhcy4uLiIpKTsNCiAgICAtCWdf
c2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0
b24pLA0KICAgIC0JCQkgImNsaWNrZWQiLA0KICAgIC0JCQkgR19DQUxMQkFDSyhzdG9yZV9maWxl
bmFtZSksIChncG9pbnRlcikgZnMpOw0KICAgIC0JZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdU
S19PQkpFQ1QNCiAgICAtCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+b2tfYnV0dG9uKSwN
CiAgICAtCQkJCSAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwNCiAg
ICAtCQkJCSAoZ3BvaW50ZXIpIGZzKTsNCiAgICAtCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChH
VEtfT0JKRUNUDQogICAgLQkJCQkgKEdUS19GSUxFX1NFTEVDVElPTihmcyktPmNhbmNlbF9idXR0
b24pLA0KICAgIC0JCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kp
LA0KICAgIC0JCQkJIChncG9pbnRlcikgZnMpOw0KICAgIC0JZ3RrX3dpZGdldF9zaG93KGZzKTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25fcXVpdDFfYWN0aXZhdGUoR3RrTWVu
dUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlpZiAo
IW9uX3dpbmRvdzFfZGVsZXRlX2V2ZW50KE5VTEwsIE5VTEwsIE5VTEwpKQ0KICAgIC0JCWd0a193
aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKG1haW5fd25kKSk7DQogICAgLX0NCiAgICAtDQogICAg
LQ0KICAgIC12b2lkIG9uX3Nob3dfbmFtZTFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRl
bSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlHdGtUcmVlVmlld0NvbHVtbiAq
Y29sOw0KICAgIC0NCiAgICAtCXNob3dfbmFtZSA9IEdUS19DSEVDS19NRU5VX0lURU0obWVudWl0
ZW0pLT5hY3RpdmU7DQogICAgLQljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RS
RUVfVklFVyh0cmVlMl93KSwgQ09MX05BTUUpOw0KICAgIC0JaWYgKGNvbCkNCiAgICAtCQlndGtf
dHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3dfbmFtZSk7DQogICAgLX0NCiAg
ICAtDQogICAgLQ0KICAgIC12b2lkIG9uX3Nob3dfcmFuZ2UxX2FjdGl2YXRlKEd0a01lbnVJdGVt
ICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JR3RrVHJlZVZp
ZXdDb2x1bW4gKmNvbDsNCiAgICAtDQogICAgLQlzaG93X3JhbmdlID0gR1RLX0NIRUNLX01FTlVf
SVRFTShtZW51aXRlbSktPmFjdGl2ZTsNCiAgICAtCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2Nv
bHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBDT0xfTk8pOw0KICAgIC0JaWYgKGNvbCkNCiAg
ICAtCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3dfcmFuZ2UpOw0K
ICAgIC0JY29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJf
dyksIENPTF9NT0QpOw0KICAgIC0JaWYgKGNvbCkNCiAgICAtCQlndGtfdHJlZV92aWV3X2NvbHVt
bl9zZXRfdmlzaWJsZShjb2wsIHNob3dfcmFuZ2UpOw0KICAgIC0JY29sID0gZ3RrX3RyZWVfdmll
d19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9ZRVMpOw0KICAgIC0JaWYg
KGNvbCkNCiAgICAtCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3df
cmFuZ2UpOw0KICAgIC0NCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25fc2hvd19k
YXRhMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEp
DQogICAgLXsNCiAgICAtCUd0a1RyZWVWaWV3Q29sdW1uICpjb2w7DQogICAgLQ0KICAgIC0Jc2hv
d192YWx1ZSA9IEdUS19DSEVDS19NRU5VX0lURU0obWVudWl0ZW0pLT5hY3RpdmU7DQogICAgLQlj
b2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09M
X1ZBTFVFKTsNCiAgICAtCWlmIChjb2wpDQogICAgLQkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0
X3Zpc2libGUoY29sLCBzaG93X3ZhbHVlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZv
aWQNCiAgICAtb25fc2V0X29wdGlvbl9tb2RlMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0
ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0Jb3B0X21vZGUgPSBPUFRfTk9S
TUFMOw0KICAgIC0JZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAgIC0JZGlzcGxheV90
cmVlKCZyb290bWVudSk7CS8qIGluc3RlYWQgb2YgdXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAgKi8N
CiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQNCiAgICAtb25fc2V0X29wdGlvbl9tb2Rl
Ml9hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAg
ICAtew0KICAgIC0Jb3B0X21vZGUgPSBPUFRfQUxMOw0KICAgIC0JZ3RrX3RyZWVfc3RvcmVfY2xl
YXIodHJlZTIpOw0KICAgIC0JZGlzcGxheV90cmVlKCZyb290bWVudSk7CS8qIGluc3RlYWQgb2Yg
dXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAgKi8NCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZv
aWQNCiAgICAtb25fc2V0X29wdGlvbl9tb2RlM19hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0
ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0Jb3B0X21vZGUgPSBPUFRfUFJP
TVBUOw0KICAgIC0JZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAgIC0JZGlzcGxheV90
cmVlKCZyb290bWVudSk7CS8qIGluc3RlYWQgb2YgdXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAgKi8N
CiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25faW50cm9kdWN0aW9uMV9hY3RpdmF0
ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAg
ICAtCUd0a1dpZGdldCAqZGlhbG9nOw0KICAgIC0JY29uc3QgZ2NoYXIgKmludHJvX3RleHQgPSBf
KA0KICAgIC0JICAgICJXZWxjb21lIHRvIGdrYywgdGhlIEdUSysgZ3JhcGhpY2FsIGNvbmZpZ3Vy
YXRpb24gdG9vbFxuIg0KICAgIC0JICAgICJGb3IgZWFjaCBvcHRpb24sIGEgYmxhbmsgYm94IGlu
ZGljYXRlcyB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCwgYVxuIg0KICAgIC0JICAgICJjaGVjayBp
bmRpY2F0ZXMgaXQgaXMgZW5hYmxlZCwgYW5kIGEgZG90IGluZGljYXRlcyB0aGF0IGl0IGlzIHRv
XG4iDQogICAgLQkgICAgImJlIGNvbXBpbGVkIGFzIGEgbW9kdWxlLiAgQ2xpY2tpbmcgb24gdGhl
IGJveCB3aWxsIGN5Y2xlIHRocm91Z2ggdGhlIHRocmVlIHN0YXRlcy5cbiINCiAgICAtCSAgICAi
XG4iDQogICAgLQkgICAgIklmIHlvdSBkbyBub3Qgc2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBkZXZp
Y2UgZHJpdmVyKSB0aGF0IHlvdVxuIg0KICAgIC0JICAgICJiZWxpZXZlIHNob3VsZCBiZSBwcmVz
ZW50LCB0cnkgdHVybmluZyBvbiBTaG93IEFsbCBPcHRpb25zXG4iDQogICAgLQkgICAgInVuZGVy
IHRoZSBPcHRpb25zIG1lbnUuXG4iDQogICAgLQkgICAgIkFsdGhvdWdoIHRoZXJlIGlzIG5vIGNy
b3NzIHJlZmVyZW5jZSB5ZXQgdG8gaGVscCB5b3UgZmlndXJlIG91dFxuIg0KICAgIC0JICAgICJ3
aGF0IG90aGVyIG9wdGlvbnMgbXVzdCBiZSBlbmFibGVkIHRvIHN1cHBvcnQgdGhlIG9wdGlvbiB5
b3VcbiINCiAgICAtCSAgICAiYXJlIGludGVyZXN0ZWQgaW4sIHlvdSBjYW4gc3RpbGwgdmlldyB0
aGUgaGVscCBvZiBhIGdyYXllZC1vdXRcbiINCiAgICAtCSAgICAib3B0aW9uLlxuIg0KICAgIC0J
ICAgICJcbiINCiAgICAtCSAgICAiVG9nZ2xpbmcgU2hvdyBEZWJ1ZyBJbmZvIHVuZGVyIHRoZSBP
cHRpb25zIG1lbnUgd2lsbCBzaG93IFxuIg0KICAgIC0JICAgICJ0aGUgZGVwZW5kZW5jaWVzLCB3
aGljaCB5b3UgY2FuIHRoZW4gbWF0Y2ggYnkgZXhhbWluaW5nIG90aGVyIG9wdGlvbnMuIik7DQog
ICAgLQ0KICAgIC0JZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhHVEtfV0lORE9XKG1h
aW5fd25kKSwNCiAgICAtCQkJCQlHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9QQVJFTlQsDQogICAg
LQkJCQkJR1RLX01FU1NBR0VfSU5GTywNCiAgICAtCQkJCQlHVEtfQlVUVE9OU19DTE9TRSwgIiVz
IiwgaW50cm9fdGV4dCk7DQogICAgLQlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVD
VChkaWFsb2cpLCAicmVzcG9uc2UiLA0KICAgIC0JCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9k
ZXN0cm95KSwNCiAgICAtCQkJCSBHVEtfT0JKRUNUKGRpYWxvZykpOw0KICAgIC0JZ3RrX3dpZGdl
dF9zaG93X2FsbChkaWFsb2cpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtdm9pZCBvbl9h
Ym91dDFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRh
KQ0KICAgIC17DQogICAgLQlHdGtXaWRnZXQgKmRpYWxvZzsNCiAgICAtCWNvbnN0IGdjaGFyICph
Ym91dF90ZXh0ID0NCiAgICAtCSAgICBfKCJna2MgaXMgY29weXJpZ2h0IChjKSAyMDAyIFJvbWFp
biBMaWV2aW4gPHJvbXNAbHBnLnRpY2FsYy5vcmc+LlxuIg0KICAgIC0JICAgICAgIkJhc2VkIG9u
IHRoZSBzb3VyY2UgY29kZSBmcm9tIFJvbWFuIFppcHBlbC5cbiIpOw0KICAgIC0NCiAgICAtCWRp
YWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksDQogICAg
LQkJCQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULA0KICAgIC0JCQkJCUdUS19NRVNT
QUdFX0lORk8sDQogICAgLQkJCQkJR1RLX0JVVFRPTlNfQ0xPU0UsICIlcyIsIGFib3V0X3RleHQp
Ow0KICAgIC0JZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QoZGlhbG9nKSwgInJl
c3BvbnNlIiwNCiAgICAtCQkJCSBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksDQogICAg
LQkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsNCiAgICAtCWd0a193aWRnZXRfc2hvd19hbGwoZGlh
bG9nKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25fbGljZW5zZTFfYWN0aXZh
dGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQog
ICAgLQlHdGtXaWRnZXQgKmRpYWxvZzsNCiAgICAtCWNvbnN0IGdjaGFyICpsaWNlbnNlX3RleHQg
PQ0KICAgIC0JICAgIF8oImdrYyBpcyByZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBHUEwgdjIuXG4iDQogICAgLQkgICAgICAiRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBz
ZWUgdGhlIHNvdXJjZSBjb2RlIG9yXG4iDQogICAgLQkgICAgICAidmlzaXQgaHR0cDovL3d3dy5m
c2Yub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWxcbiIpOw0KICAgIC0NCiAgICAtCWRpYWxvZyA9
IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksDQogICAgLQkJCQkJ
R1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULA0KICAgIC0JCQkJCUdUS19NRVNTQUdFX0lO
Rk8sDQogICAgLQkJCQkJR1RLX0JVVFRPTlNfQ0xPU0UsICIlcyIsIGxpY2Vuc2VfdGV4dCk7DQog
ICAgLQlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVChkaWFsb2cpLCAicmVzcG9u
c2UiLA0KICAgIC0JCQkJIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwNCiAgICAtCQkJ
CSBHVEtfT0JKRUNUKGRpYWxvZykpOw0KICAgIC0JZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cp
Ow0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtdm9pZCBvbl9iYWNrX2NsaWNrZWQoR3RrQnV0
dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAgICAtCWVudW0gcHJv
cF90eXBlIHB0eXBlOw0KICAgIC0NCiAgICAtCWN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQ7DQog
ICAgLQlwdHlwZSA9IGN1cnJlbnQtPnByb21wdCA/IGN1cnJlbnQtPnByb21wdC0+dHlwZSA6IFBf
VU5LTk9XTjsNCiAgICAtCWlmIChwdHlwZSAhPSBQX01FTlUpDQogICAgLQkJY3VycmVudCA9IGN1
cnJlbnQtPnBhcmVudDsNCiAgICAtCWRpc3BsYXlfdHJlZV9wYXJ0KCk7DQogICAgLQ0KICAgIC0J
aWYgKGN1cnJlbnQgPT0gJnJvb3RtZW51KQ0KICAgIC0JCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2
ZShiYWNrX2J0biwgRkFMU0UpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtdm9pZCBvbl9s
b2FkX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAg
LXsNCiAgICAtCW9uX2xvYWQxX2FjdGl2YXRlKE5VTEwsIHVzZXJfZGF0YSk7DQogICAgLX0NCiAg
ICAtDQogICAgLQ0KICAgIC12b2lkIG9uX3NpbmdsZV9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRv
biwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQl2aWV3X21vZGUgPSBTSU5HTEVf
VklFVzsNCiAgICAtCWd0a193aWRnZXRfaGlkZSh0cmVlMV93KTsNCiAgICAtCWN1cnJlbnQgPSAm
cm9vdG1lbnU7DQogICAgLQlkaXNwbGF5X3RyZWVfcGFydCgpOw0KICAgIC19DQogICAgLQ0KICAg
IC0NCiAgICAtdm9pZCBvbl9zcGxpdF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlnaW50IHcsIGg7DQogICAgLQl2aWV3X21vZGUg
PSBTUExJVF9WSUVXOw0KICAgIC0JZ3RrX3dpZGdldF9zaG93KHRyZWUxX3cpOw0KICAgIC0JZ3Rr
X3dpbmRvd19nZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cobWFpbl93bmQpLCAmdywgJmgpOw0K
ICAgIC0JZ3RrX3BhbmVkX3NldF9wb3NpdGlvbihHVEtfUEFORUQoaHBhbmVkKSwgdyAvIDIpOw0K
ICAgIC0JaWYgKHRyZWUyKQ0KICAgIC0JCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsNCiAg
ICAtCWRpc3BsYXlfbGlzdCgpOw0KICAgIC0NCiAgICAtCS8qIERpc2FibGUgYmFjayBidG4sIGxp
a2UgaW4gZnVsbCBtb2RlLiAqLw0KICAgIC0JZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tf
YnRuLCBGQUxTRSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIG9uX2Z1bGxfY2xp
Y2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAg
IC0Jdmlld19tb2RlID0gRlVMTF9WSUVXOw0KICAgIC0JZ3RrX3dpZGdldF9oaWRlKHRyZWUxX3cp
Ow0KICAgIC0JaWYgKHRyZWUyKQ0KICAgIC0JCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsN
CiAgICAtCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOw0KICAgIC0JZ3RrX3dpZGdldF9zZXRfc2Vu
c2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lk
IG9uX2NvbGxhcHNlX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2Rh
dGEpDQogICAgLXsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sbGFwc2VfYWxsKEdUS19UUkVFX1ZJ
RVcodHJlZTJfdykpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtdm9pZCBvbl9leHBhbmRf
Y2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0K
ICAgIC0JZ3RrX3RyZWVfdmlld19leHBhbmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTJfdykpOw0K
ICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogQ1RyZWUgQ2FsbGJhY2tzICovDQogICAgLQ0K
ICAgIC0vKiBDaGFuZ2UgaGV4L2ludC9zdHJpbmcgdmFsdWUgaW4gdGhlIGNlbGwgKi8NCiAgICAt
c3RhdGljIHZvaWQgcmVuZGVyZXJfZWRpdGVkKEd0a0NlbGxSZW5kZXJlclRleHQgKiBjZWxsLA0K
ICAgIC0JCQkgICAgY29uc3QgZ2NoYXIgKiBwYXRoX3N0cmluZywNCiAgICAtCQkJICAgIGNvbnN0
IGdjaGFyICogbmV3X3RleHQsIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JR3Rr
VHJlZVBhdGggKnBhdGggPSBndGtfdHJlZV9wYXRoX25ld19mcm9tX3N0cmluZyhwYXRoX3N0cmlu
Zyk7DQogICAgLQlHdGtUcmVlSXRlciBpdGVyOw0KICAgIC0JY29uc3QgY2hhciAqb2xkX2RlZiwg
Km5ld19kZWY7DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtCXN0cnVjdCBzeW1ib2wg
KnN5bTsNCiAgICAtDQogICAgLQlpZiAoIWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsMiwg
Jml0ZXIsIHBhdGgpKQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlndGtfdHJlZV9tb2Rl
bF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7DQogICAgLQlzeW0gPSBt
ZW51LT5zeW07DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIs
IENPTF9WQUxVRSwgJm9sZF9kZWYsIC0xKTsNCiAgICAtCW5ld19kZWYgPSBuZXdfdGV4dDsNCiAg
ICAtDQogICAgLQlzeW1fc2V0X3N0cmluZ192YWx1ZShzeW0sIG5ld19kZWYpOw0KICAgIC0NCiAg
ICAtCXVwZGF0ZV90cmVlKCZyb290bWVudSwgTlVMTCk7DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVf
cGF0aF9mcmVlKHBhdGgpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBDaGFuZ2UgdGhlIHZhbHVl
IG9mIGEgc3ltYm9sIGFuZCB1cGRhdGUgdGhlIHRyZWUgKi8NCiAgICAtc3RhdGljIHZvaWQgY2hh
bmdlX3N5bV92YWx1ZShzdHJ1Y3QgbWVudSAqbWVudSwgZ2ludCBjb2wpDQogICAgLXsNCiAgICAt
CXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsNCiAgICAtCXRyaXN0YXRlIG5ld3ZhbDsN
CiAgICAtDQogICAgLQlpZiAoIXN5bSkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0JaWYg
KGNvbCA9PSBDT0xfTk8pDQogICAgLQkJbmV3dmFsID0gbm87DQogICAgLQllbHNlIGlmIChjb2wg
PT0gQ09MX01PRCkNCiAgICAtCQluZXd2YWwgPSBtb2Q7DQogICAgLQllbHNlIGlmIChjb2wgPT0g
Q09MX1lFUykNCiAgICAtCQluZXd2YWwgPSB5ZXM7DQogICAgLQllbHNlDQogICAgLQkJcmV0dXJu
Ow0KICAgIC0NCiAgICAtCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkpIHsNCiAgICAtCWNhc2Ug
U19CT09MRUFOOg0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCWlmICghc3ltX3RyaXN0
YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5ld3ZhbCkpDQogICAgLQkJCW5ld3ZhbCA9IHllczsNCiAg
ICAtCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbmV3dmFsKTsNCiAgICAtCQlpZiAodmll
d19tb2RlID09IEZVTExfVklFVykNCiAgICAtCQkJdXBkYXRlX3RyZWUoJnJvb3RtZW51LCBOVUxM
KTsNCiAgICAtCQllbHNlIGlmICh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykgew0KICAgIC0JCQl1
cGRhdGVfdHJlZShicm93c2VkLCBOVUxMKTsNCiAgICAtCQkJZGlzcGxheV9saXN0KCk7DQogICAg
LQkJfQ0KICAgIC0JCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykNCiAgICAtCQkJ
ZGlzcGxheV90cmVlX3BhcnQoKTsJLy9maXhtZToga2VlcCBleHAvY29sbA0KICAgIC0JCWJyZWFr
Ow0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQljYXNlIFNfU1RS
SU5HOg0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtfQ0KICAg
IC0NCiAgICAtc3RhdGljIHZvaWQgdG9nZ2xlX3N5bV92YWx1ZShzdHJ1Y3QgbWVudSAqbWVudSkN
CiAgICAtew0KICAgIC0JaWYgKCFtZW51LT5zeW0pDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAg
ICAtCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUobWVudS0+c3ltKTsNCiAgICAtCWlmICh2aWV3
X21vZGUgPT0gRlVMTF9WSUVXKQ0KICAgIC0JCXVwZGF0ZV90cmVlKCZyb290bWVudSwgTlVMTCk7
DQogICAgLQllbHNlIGlmICh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykgew0KICAgIC0JCXVwZGF0
ZV90cmVlKGJyb3dzZWQsIE5VTEwpOw0KICAgIC0JCWRpc3BsYXlfbGlzdCgpOw0KICAgIC0JfQ0K
ICAgIC0JZWxzZSBpZiAodmlld19tb2RlID09IFNJTkdMRV9WSUVXKQ0KICAgIC0JCWRpc3BsYXlf
dHJlZV9wYXJ0KCk7CS8vZml4bWU6IGtlZXAgZXhwL2NvbGwNCiAgICAtfQ0KICAgIC0NCiAgICAt
c3RhdGljIGdpbnQgY29sdW1uMmluZGV4KEd0a1RyZWVWaWV3Q29sdW1uICogY29sdW1uKQ0KICAg
IC17DQogICAgLQlnaW50IGk7DQogICAgLQ0KICAgIC0JZm9yIChpID0gMDsgaSA8IENPTF9OVU1C
RVI7IGkrKykgew0KICAgIC0JCUd0a1RyZWVWaWV3Q29sdW1uICpjb2w7DQogICAgLQ0KICAgIC0J
CWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBp
KTsNCiAgICAtCQlpZiAoY29sID09IGNvbHVtbikNCiAgICAtCQkJcmV0dXJuIGk7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JcmV0dXJuIC0xOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyog
VXNlciBjbGljazogdXBkYXRlIGNob2ljZSAoZnVsbCkgb3IgZ29lcyBkb3duIChzaW5nbGUpICov
DQogICAgLWdib29sZWFuDQogICAgLW9uX3RyZWV2aWV3Ml9idXR0b25fcHJlc3NfZXZlbnQoR3Rr
V2lkZ2V0ICogd2lkZ2V0LA0KICAgIC0JCQkJR2RrRXZlbnRCdXR0b24gKiBldmVudCwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlHdGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVF
X1ZJRVcod2lkZ2V0KTsNCiAgICAtCUd0a1RyZWVQYXRoICpwYXRoOw0KICAgIC0JR3RrVHJlZVZp
ZXdDb2x1bW4gKmNvbHVtbjsNCiAgICAtCUd0a1RyZWVJdGVyIGl0ZXI7DQogICAgLQlzdHJ1Y3Qg
bWVudSAqbWVudTsNCiAgICAtCWdpbnQgY29sOw0KICAgIC0NCiAgICAtI2lmIEdUS19DSEVDS19W
RVJTSU9OKDIsMSw0KSAvLyBidWcgaW4gY3RyZWUgd2l0aCBlYXJsaWVyIHZlcnNpb24gb2YgR1RL
DQogICAgLQlnaW50IHR4ID0gKGdpbnQpIGV2ZW50LT54Ow0KICAgIC0JZ2ludCB0eSA9IChnaW50
KSBldmVudC0+eTsNCiAgICAtCWdpbnQgY3gsIGN5Ow0KICAgIC0NCiAgICAtCWd0a190cmVlX3Zp
ZXdfZ2V0X3BhdGhfYXRfcG9zKHZpZXcsIHR4LCB0eSwgJnBhdGgsICZjb2x1bW4sICZjeCwNCiAg
ICAtCQkJCSAgICAgICZjeSk7DQogICAgLSNlbHNlDQogICAgLQlndGtfdHJlZV92aWV3X2dldF9j
dXJzb3IodmlldywgJnBhdGgsICZjb2x1bW4pOw0KICAgIC0jZW5kaWYNCiAgICAtCWlmIChwYXRo
ID09IE5VTEwpDQogICAgLQkJcmV0dXJuIEZBTFNFOw0KICAgIC0NCiAgICAtCWlmICghZ3RrX3Ry
ZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAmaXRlciwgcGF0aCkpDQogICAgLQkJcmV0dXJuIEZB
TFNFOw0KICAgIC0JZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAm
bWVudSwgLTEpOw0KICAgIC0NCiAgICAtCWNvbCA9IGNvbHVtbjJpbmRleChjb2x1bW4pOw0KICAg
IC0JaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKSB7DQogICAgLQkJZW51bSBw
cm9wX3R5cGUgcHR5cGU7DQogICAgLQkJcHR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9t
cHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQ0KICAgIC0JCWlmIChwdHlwZSA9PSBQX01FTlUg
JiYgdmlld19tb2RlICE9IEZVTExfVklFVyAmJiBjb2wgPT0gQ09MX09QVElPTikgew0KICAgIC0J
CQkvLyBnb2VzIGRvd24gaW50byBtZW51DQogICAgLQkJCWN1cnJlbnQgPSBtZW51Ow0KICAgIC0J
CQlkaXNwbGF5X3RyZWVfcGFydCgpOw0KICAgIC0JCQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUo
YmFja19idG4sIFRSVUUpOw0KICAgIC0JCX0gZWxzZSBpZiAoKGNvbCA9PSBDT0xfT1BUSU9OKSkg
ew0KICAgIC0JCQl0b2dnbGVfc3ltX3ZhbHVlKG1lbnUpOw0KICAgIC0JCQlndGtfdHJlZV92aWV3
X2V4cGFuZF9yb3codmlldywgcGF0aCwgVFJVRSk7DQogICAgLQkJfQ0KICAgIC0JfSBlbHNlIHsN
CiAgICAtCQlpZiAoY29sID09IENPTF9WQUxVRSkgew0KICAgIC0JCQl0b2dnbGVfc3ltX3ZhbHVl
KG1lbnUpOw0KICAgIC0JCQlndGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywgcGF0aCwgVFJV
RSk7DQogICAgLQkJfSBlbHNlIGlmIChjb2wgPT0gQ09MX05PIHx8IGNvbCA9PSBDT0xfTU9EDQog
ICAgLQkJCSAgIHx8IGNvbCA9PSBDT0xfWUVTKSB7DQogICAgLQkJCWNoYW5nZV9zeW1fdmFsdWUo
bWVudSwgY29sKTsNCiAgICAtCQkJZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgs
IFRSVUUpOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLQlyZXR1cm4gRkFMU0U7DQog
ICAgLX0NCiAgICAtDQogICAgLS8qIEtleSBwcmVzc2VkOiB1cGRhdGUgY2hvaWNlICovDQogICAg
LWdib29sZWFuDQogICAgLW9uX3RyZWV2aWV3Ml9rZXlfcHJlc3NfZXZlbnQoR3RrV2lkZ2V0ICog
d2lkZ2V0LA0KICAgIC0JCQkgICAgIEdka0V2ZW50S2V5ICogZXZlbnQsIGdwb2ludGVyIHVzZXJf
ZGF0YSkNCiAgICAtew0KICAgIC0JR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdp
ZGdldCk7DQogICAgLQlHdGtUcmVlUGF0aCAqcGF0aDsNCiAgICAtCUd0a1RyZWVWaWV3Q29sdW1u
ICpjb2x1bW47DQogICAgLQlHdGtUcmVlSXRlciBpdGVyOw0KICAgIC0Jc3RydWN0IG1lbnUgKm1l
bnU7DQogICAgLQlnaW50IGNvbDsNCiAgICAtDQogICAgLQlndGtfdHJlZV92aWV3X2dldF9jdXJz
b3IodmlldywgJnBhdGgsICZjb2x1bW4pOw0KICAgIC0JaWYgKHBhdGggPT0gTlVMTCkNCiAgICAt
CQlyZXR1cm4gRkFMU0U7DQogICAgLQ0KICAgIC0JaWYgKGV2ZW50LT5rZXl2YWwgPT0gR0RLX3Nw
YWNlKSB7DQogICAgLQkJaWYgKGd0a190cmVlX3ZpZXdfcm93X2V4cGFuZGVkKHZpZXcsIHBhdGgp
KQ0KICAgIC0JCQlndGtfdHJlZV92aWV3X2NvbGxhcHNlX3Jvdyh2aWV3LCBwYXRoKTsNCiAgICAt
CQllbHNlDQogICAgLQkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBGQUxT
RSk7DQogICAgLQkJcmV0dXJuIFRSVUU7DQogICAgLQl9DQogICAgLQlpZiAoZXZlbnQtPmtleXZh
bCA9PSBHREtfS1BfRW50ZXIpIHsNCiAgICAtCX0NCiAgICAtCWlmICh3aWRnZXQgPT0gdHJlZTFf
dykNCiAgICAtCQlyZXR1cm4gRkFMU0U7DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVfbW9kZWxfZ2V0
X2l0ZXIobW9kZWwyLCAmaXRlciwgcGF0aCk7DQogICAgLQlndGtfdHJlZV9tb2RlbF9nZXQobW9k
ZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7DQogICAgLQ0KICAgIC0JaWYgKCFzdHJj
YXNlY21wKGV2ZW50LT5zdHJpbmcsICJuIikpDQogICAgLQkJY29sID0gQ09MX05POw0KICAgIC0J
ZWxzZSBpZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgIm0iKSkNCiAgICAtCQljb2wgPSBD
T0xfTU9EOw0KICAgIC0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgInkiKSkN
CiAgICAtCQljb2wgPSBDT0xfWUVTOw0KICAgIC0JZWxzZQ0KICAgIC0JCWNvbCA9IC0xOw0KICAg
IC0JY2hhbmdlX3N5bV92YWx1ZShtZW51LCBjb2wpOw0KICAgIC0NCiAgICAtCXJldHVybiBGQUxT
RTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qIFJvdyBzZWxlY3Rpb24gY2hhbmdlZDog
dXBkYXRlIGhlbHAgKi8NCiAgICAtdm9pZA0KICAgIC1vbl90cmVldmlldzJfY3Vyc29yX2NoYW5n
ZWQoR3RrVHJlZVZpZXcgKiB0cmVldmlldywgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQog
ICAgLQlHdGtUcmVlU2VsZWN0aW9uICpzZWxlY3Rpb247DQogICAgLQlHdGtUcmVlSXRlciBpdGVy
Ow0KICAgIC0Jc3RydWN0IG1lbnUgKm1lbnU7DQogICAgLQ0KICAgIC0Jc2VsZWN0aW9uID0gZ3Rr
X3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHRyZWV2aWV3KTsNCiAgICAtCWlmIChndGtfdHJlZV9z
ZWxlY3Rpb25fZ2V0X3NlbGVjdGVkKHNlbGVjdGlvbiwgJm1vZGVsMiwgJml0ZXIpKSB7DQogICAg
LQkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEp
Ow0KICAgIC0JCXRleHRfaW5zZXJ0X2hlbHAobWVudSk7DQogICAgLQl9DQogICAgLX0NCiAgICAt
DQogICAgLQ0KICAgIC0vKiBVc2VyIGNsaWNrOiBkaXNwbGF5IHN1Yi10cmVlIGluIHRoZSByaWdo
dCBmcmFtZS4gKi8NCiAgICAtZ2Jvb2xlYW4NCiAgICAtb25fdHJlZXZpZXcxX2J1dHRvbl9wcmVz
c19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsDQogICAgLQkJCQlHZGtFdmVudEJ1dHRvbiAqIGV2
ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAgICAtCUd0a1RyZWVWaWV3ICp2aWV3
ID0gR1RLX1RSRUVfVklFVyh3aWRnZXQpOw0KICAgIC0JR3RrVHJlZVBhdGggKnBhdGg7DQogICAg
LQlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOw0KICAgIC0JR3RrVHJlZUl0ZXIgaXRlcjsNCiAg
ICAtCXN0cnVjdCBtZW51ICptZW51Ow0KICAgIC0NCiAgICAtCWdpbnQgdHggPSAoZ2ludCkgZXZl
bnQtPng7DQogICAgLQlnaW50IHR5ID0gKGdpbnQpIGV2ZW50LT55Ow0KICAgIC0JZ2ludCBjeCwg
Y3k7DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVfdmlld19nZXRfcGF0aF9hdF9wb3ModmlldywgdHgs
IHR5LCAmcGF0aCwgJmNvbHVtbiwgJmN4LA0KICAgIC0JCQkJICAgICAgJmN5KTsNCiAgICAtCWlm
IChwYXRoID09IE5VTEwpDQogICAgLQkJcmV0dXJuIEZBTFNFOw0KICAgIC0NCiAgICAtCWd0a190
cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsMSwgJml0ZXIsIHBhdGgpOw0KICAgIC0JZ3RrX3RyZWVf
bW9kZWxfZ2V0KG1vZGVsMSwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOw0KICAgIC0NCiAg
ICAtCWlmIChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykgew0KICAgIC0JCXRvZ2ds
ZV9zeW1fdmFsdWUobWVudSk7DQogICAgLQkJY3VycmVudCA9IG1lbnU7DQogICAgLQkJZGlzcGxh
eV90cmVlX3BhcnQoKTsNCiAgICAtCX0gZWxzZSB7DQogICAgLQkJYnJvd3NlZCA9IG1lbnU7DQog
ICAgLQkJZGlzcGxheV90cmVlX3BhcnQoKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlndGtfd2lk
Z2V0X3JlYWxpemUodHJlZTJfdyk7DQogICAgLQlndGtfdHJlZV92aWV3X3NldF9jdXJzb3Iodmll
dywgcGF0aCwgTlVMTCwgRkFMU0UpOw0KICAgIC0JZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHRyZWUy
X3cpOw0KICAgIC0NCiAgICAtCXJldHVybiBGQUxTRTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQog
ICAgLS8qIEZpbGwgYSByb3cgb2Ygc3RyaW5ncyAqLw0KICAgIC1zdGF0aWMgZ2NoYXIgKipmaWxs
X3JvdyhzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RhdGljIGdjaGFyICpyb3db
Q09MX05VTUJFUl07DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAg
LQljb25zdCBjaGFyICpkZWY7DQogICAgLQlpbnQgc3R5cGU7DQogICAgLQl0cmlzdGF0ZSB2YWw7
DQogICAgLQllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICAtCWludCBpOw0KICAgIC0NCiAgICAt
CWZvciAoaSA9IENPTF9PUFRJT047IGkgPD0gQ09MX0NPTE9SOyBpKyspDQogICAgLQkJZ19mcmVl
KHJvd1tpXSk7DQogICAgLQliemVybyhyb3csIHNpemVvZihyb3cpKTsNCiAgICAtDQogICAgLQly
b3dbQ09MX09QVElPTl0gPQ0KICAgIC0JICAgIGdfc3RyZHVwX3ByaW50ZigiJXMgJXMiLCBfKG1l
bnVfZ2V0X3Byb21wdChtZW51KSksDQogICAgLQkJCSAgICBzeW0gJiYgIXN5bV9oYXNfdmFsdWUo
c3ltKSA/ICIoTkVXKSIgOiAiIik7DQogICAgLQ0KICAgIC0JaWYgKG9wdF9tb2RlID09IE9QVF9B
TEwgJiYgIW1lbnVfaXNfdmlzaWJsZShtZW51KSkNCiAgICAtCQlyb3dbQ09MX0NPTE9SXSA9IGdf
c3RyZHVwKCJEYXJrR3JheSIpOw0KICAgIC0JZWxzZSBpZiAob3B0X21vZGUgPT0gT1BUX1BST01Q
VCAmJg0KICAgIC0JCQltZW51X2hhc19wcm9tcHQobWVudSkgJiYgIW1lbnVfaXNfdmlzaWJsZSht
ZW51KSkNCiAgICAtCQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJEYXJrR3JheSIpOw0KICAg
IC0JZWxzZQ0KICAgIC0JCXJvd1tDT0xfQ09MT1JdID0gZ19zdHJkdXAoIkJsYWNrIik7DQogICAg
LQ0KICAgIC0JcHR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VO
S05PV047DQogICAgLQlzd2l0Y2ggKHB0eXBlKSB7DQogICAgLQljYXNlIFBfTUVOVToNCiAgICAt
CQlyb3dbQ09MX1BJWEJVRl0gPSAoZ2NoYXIgKikgeHBtX21lbnU7DQogICAgLQkJaWYgKHZpZXdf
bW9kZSA9PSBTSU5HTEVfVklFVykNCiAgICAtCQkJcm93W0NPTF9QSVhWSVNdID0gR0lOVF9UT19Q
T0lOVEVSKFRSVUUpOw0KICAgIC0JCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihG
QUxTRSk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFBfQ09NTUVOVDoNCiAgICAtCQlyb3db
Q09MX1BJWEJVRl0gPSAoZ2NoYXIgKikgeHBtX3ZvaWQ7DQogICAgLQkJcm93W0NPTF9QSVhWSVNd
ID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAgICAtCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5U
X1RPX1BPSU5URVIoRkFMU0UpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAt
CQlyb3dbQ09MX1BJWEJVRl0gPSAoZ2NoYXIgKikgeHBtX3ZvaWQ7DQogICAgLQkJcm93W0NPTF9Q
SVhWSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAgICAtCQlyb3dbQ09MX0JUTlZJU10g
PSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQ0K
ICAgIC0JaWYgKCFzeW0pDQogICAgLQkJcmV0dXJuIHJvdzsNCiAgICAtCXJvd1tDT0xfTkFNRV0g
PSBnX3N0cmR1cChzeW0tPm5hbWUpOw0KICAgIC0NCiAgICAtCXN5bV9jYWxjX3ZhbHVlKHN5bSk7
DQogICAgLQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hBTkdFRDsNCiAgICAtDQogICAgLQlpZiAo
c3ltX2lzX2Nob2ljZShzeW0pKSB7CS8vIHBhcnNlIGNoaWxkcyBmb3IgZ2V0dGluZyBmaW5hbCB2
YWx1ZQ0KICAgIC0JCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtCQlzdHJ1Y3Qgc3ltYm9sICpk
ZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsNCiAgICAtCQlzdHJ1Y3QgbWVudSAq
ZGVmX21lbnUgPSBOVUxMOw0KICAgIC0NCiAgICAtCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RP
X1BPSU5URVIoRkFMU0UpOw0KICAgIC0NCiAgICAtCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICAtCQkJaWYgKG1lbnVfaXNfdmlzaWJs
ZShjaGlsZCkNCiAgICAtCQkJICAgICYmIGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkNCiAgICAtCQkJ
CWRlZl9tZW51ID0gY2hpbGQ7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpZiAoZGVmX21lbnUp
DQogICAgLQkJCXJvd1tDT0xfVkFMVUVdID0NCiAgICAtCQkJICAgIGdfc3RyZHVwKF8obWVudV9n
ZXRfcHJvbXB0KGRlZl9tZW51KSkpOw0KICAgIC0JfQ0KICAgIC0JaWYgKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfQ0hPSUNFVkFMKQ0KICAgIC0JCXJvd1tDT0xfQlROUkFEXSA9IEdJTlRfVE9fUE9JTlRF
UihUUlVFKTsNCiAgICAtDQogICAgLQlzdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgIC0J
c3dpdGNoIChzdHlwZSkgew0KICAgIC0JY2FzZSBTX0JPT0xFQU46DQogICAgLQkJaWYgKEdQT0lO
VEVSX1RPX0lOVChyb3dbQ09MX1BJWFZJU10pID09IEZBTFNFKQ0KICAgIC0JCQlyb3dbQ09MX0JU
TlZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7DQogICAgLQkJaWYgKHN5bV9pc19jaG9pY2Uo
c3ltKSkNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJLyogZmFsbCB0aHJvdWdoICovDQogICAgLQlj
YXNlIFNfVFJJU1RBVEU6DQogICAgLQkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0p
Ow0KICAgIC0JCXN3aXRjaCAodmFsKSB7DQogICAgLQkJY2FzZSBubzoNCiAgICAtCQkJcm93W0NP
TF9OT10gPSBnX3N0cmR1cCgiTiIpOw0KICAgIC0JCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3RyZHVw
KCJOIik7DQogICAgLQkJCXJvd1tDT0xfQlROQUNUXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7
DQogICAgLQkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7DQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgbW9kOg0KICAgIC0JCQlyb3dbQ09MX01PRF0gPSBnX3N0
cmR1cCgiTSIpOw0KICAgIC0JCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3RyZHVwKCJNIik7DQogICAg
LQkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsNCiAgICAtCQkJYnJl
YWs7DQogICAgLQkJY2FzZSB5ZXM6DQogICAgLQkJCXJvd1tDT0xfWUVTXSA9IGdfc3RyZHVwKCJZ
Iik7DQogICAgLQkJCXJvd1tDT0xfVkFMVUVdID0gZ19zdHJkdXAoIlkiKTsNCiAgICAtCQkJcm93
W0NPTF9CVE5BQ1RdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOw0KICAgIC0JCQlyb3dbQ09MX0JU
TklOQ10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9
DQogICAgLQ0KICAgIC0JCWlmICh2YWwgIT0gbm8gJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5n
ZShzeW0sIG5vKSkNCiAgICAtCQkJcm93W0NPTF9OT10gPSBnX3N0cmR1cCgiXyIpOw0KICAgIC0J
CWlmICh2YWwgIT0gbW9kICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpKQ0K
ICAgIC0JCQlyb3dbQ09MX01PRF0gPSBnX3N0cmR1cCgiXyIpOw0KICAgIC0JCWlmICh2YWwgIT0g
eWVzICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5ZXMpKQ0KICAgIC0JCQlyb3db
Q09MX1lFU10gPSBnX3N0cmR1cCgiXyIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBTX0lO
VDoNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCWRlZiA9
IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7DQogICAgLQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0
cmR1cChkZWYpOw0KICAgIC0JCXJvd1tDT0xfRURJVF0gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7
DQogICAgLQkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAgICAt
CQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLQlyZXR1cm4gcm93Ow0KICAgIC19DQogICAg
LQ0KICAgIC0NCiAgICAtLyogU2V0IHRoZSBub2RlIGNvbnRlbnQgd2l0aCBhIHJvdyBvZiBzdHJp
bmdzICovDQogICAgLXN0YXRpYyB2b2lkIHNldF9ub2RlKEd0a1RyZWVJdGVyICogbm9kZSwgc3Ry
dWN0IG1lbnUgKm1lbnUsIGdjaGFyICoqIHJvdykNCiAgICAtew0KICAgIC0JR2RrQ29sb3IgY29s
b3I7DQogICAgLQlnYm9vbGVhbiBzdWNjZXNzOw0KICAgIC0JR2RrUGl4YnVmICpwaXg7DQogICAg
LQ0KICAgIC0JcGl4ID0gZ2RrX3BpeGJ1Zl9uZXdfZnJvbV94cG1fZGF0YSgoY29uc3QgY2hhciAq
KikNCiAgICAtCQkJCQkgICByb3dbQ09MX1BJWEJVRl0pOw0KICAgIC0NCiAgICAtCWdka19jb2xv
cl9wYXJzZShyb3dbQ09MX0NPTE9SXSwgJmNvbG9yKTsNCiAgICAtCWdka19jb2xvcm1hcF9hbGxv
Y19jb2xvcnMoZ2RrX2NvbG9ybWFwX2dldF9zeXN0ZW0oKSwgJmNvbG9yLCAxLA0KICAgIC0JCQkJ
ICBGQUxTRSwgRkFMU0UsICZzdWNjZXNzKTsNCiAgICAtDQogICAgLQlndGtfdHJlZV9zdG9yZV9z
ZXQodHJlZSwgbm9kZSwNCiAgICAtCQkJICAgQ09MX09QVElPTiwgcm93W0NPTF9PUFRJT05dLA0K
ICAgIC0JCQkgICBDT0xfTkFNRSwgcm93W0NPTF9OQU1FXSwNCiAgICAtCQkJICAgQ09MX05PLCBy
b3dbQ09MX05PXSwNCiAgICAtCQkJICAgQ09MX01PRCwgcm93W0NPTF9NT0RdLA0KICAgIC0JCQkg
ICBDT0xfWUVTLCByb3dbQ09MX1lFU10sDQogICAgLQkJCSAgIENPTF9WQUxVRSwgcm93W0NPTF9W
QUxVRV0sDQogICAgLQkJCSAgIENPTF9NRU5VLCAoZ3BvaW50ZXIpIG1lbnUsDQogICAgLQkJCSAg
IENPTF9DT0xPUiwgJmNvbG9yLA0KICAgIC0JCQkgICBDT0xfRURJVCwgR1BPSU5URVJfVE9fSU5U
KHJvd1tDT0xfRURJVF0pLA0KICAgIC0JCQkgICBDT0xfUElYQlVGLCBwaXgsDQogICAgLQkJCSAg
IENPTF9QSVhWSVMsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX1BJWFZJU10pLA0KICAgIC0JCQkg
ICBDT0xfQlROVklTLCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9CVE5WSVNdKSwNCiAgICAtCQkJ
ICAgQ09MX0JUTkFDVCwgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfQlROQUNUXSksDQogICAgLQkJ
CSAgIENPTF9CVE5JTkMsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTklOQ10pLA0KICAgIC0J
CQkgICBDT0xfQlROUkFELCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9CVE5SQURdKSwNCiAgICAt
CQkJICAgLTEpOw0KICAgIC0NCiAgICAtCWdfb2JqZWN0X3VucmVmKHBpeCk7DQogICAgLX0NCiAg
ICAtDQogICAgLQ0KICAgIC0vKiBBZGQgYSBub2RlIHRvIHRoZSB0cmVlICovDQogICAgLXN0YXRp
YyB2b2lkIHBsYWNlX25vZGUoc3RydWN0IG1lbnUgKm1lbnUsIGNoYXIgKipyb3cpDQogICAgLXsN
CiAgICAtCUd0a1RyZWVJdGVyICpwYXJlbnQgPSBwYXJlbnRzW2luZGVudCAtIDFdOw0KICAgIC0J
R3RrVHJlZUl0ZXIgKm5vZGUgPSBwYXJlbnRzW2luZGVudF07DQogICAgLQ0KICAgIC0JZ3RrX3Ry
ZWVfc3RvcmVfYXBwZW5kKHRyZWUsIG5vZGUsIHBhcmVudCk7DQogICAgLQlzZXRfbm9kZShub2Rl
LCBtZW51LCByb3cpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogRmluZCBhIG5vZGUg
aW4gdGhlIEdUSysgdHJlZSAqLw0KICAgIC1zdGF0aWMgR3RrVHJlZUl0ZXIgZm91bmQ7DQogICAg
LQ0KICAgIC0vKg0KICAgIC0gKiBGaW5kIGEgbWVudSBpbiB0aGUgR3RrVHJlZSBzdGFydGluZyBh
dCBwYXJlbnQuDQogICAgLSAqLw0KICAgIC1HdGtUcmVlSXRlciAqZ3RrdHJlZV9pdGVyX2ZpbmRf
bm9kZShHdGtUcmVlSXRlciAqIHBhcmVudCwNCiAgICAtCQkJCSAgICBzdHJ1Y3QgbWVudSAqdG9m
aW5kKQ0KICAgIC17DQogICAgLQlHdGtUcmVlSXRlciBpdGVyOw0KICAgIC0JR3RrVHJlZUl0ZXIg
KmNoaWxkID0gJml0ZXI7DQogICAgLQlnYm9vbGVhbiB2YWxpZDsNCiAgICAtCUd0a1RyZWVJdGVy
ICpyZXQ7DQogICAgLQ0KICAgIC0JdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX2NoaWxkcmVu
KG1vZGVsMiwgY2hpbGQsIHBhcmVudCk7DQogICAgLQl3aGlsZSAodmFsaWQpIHsNCiAgICAtCQlz
dHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtDQogICAgLQkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVs
MiwgY2hpbGQsIDYsICZtZW51LCAtMSk7DQogICAgLQ0KICAgIC0JCWlmIChtZW51ID09IHRvZmlu
ZCkgew0KICAgIC0JCQltZW1jcHkoJmZvdW5kLCBjaGlsZCwgc2l6ZW9mKEd0a1RyZWVJdGVyKSk7
DQogICAgLQkJCXJldHVybiAmZm91bmQ7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlyZXQgPSBn
dGt0cmVlX2l0ZXJfZmluZF9ub2RlKGNoaWxkLCB0b2ZpbmQpOw0KICAgIC0JCWlmIChyZXQpDQog
ICAgLQkJCXJldHVybiByZXQ7DQogICAgLQ0KICAgIC0JCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxf
aXRlcl9uZXh0KG1vZGVsMiwgY2hpbGQpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXJldHVybiBO
VUxMOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogVXBkYXRlIHRoZSB0
cmVlIGJ5IGFkZGluZy9yZW1vdmluZyBlbnRyaWVzDQogICAgLSAqIERvZXMgbm90IGNoYW5nZSBv
dGhlciBub2Rlcw0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0
IG1lbnUgKnNyYywgR3RrVHJlZUl0ZXIgKiBkc3QpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51
ICpjaGlsZDE7DQogICAgLQlHdGtUcmVlSXRlciBpdGVyLCB0bXA7DQogICAgLQlHdGtUcmVlSXRl
ciAqY2hpbGQyID0gJml0ZXI7DQogICAgLQlnYm9vbGVhbiB2YWxpZDsNCiAgICAtCUd0a1RyZWVJ
dGVyICpzaWJsaW5nOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IG1l
bnUgKm1lbnUxLCAqbWVudTI7DQogICAgLQ0KICAgIC0JaWYgKHNyYyA9PSAmcm9vdG1lbnUpDQog
ICAgLQkJaW5kZW50ID0gMTsNCiAgICAtDQogICAgLQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0
ZXJfY2hpbGRyZW4obW9kZWwyLCBjaGlsZDIsIGRzdCk7DQogICAgLQlmb3IgKGNoaWxkMSA9IHNy
Yy0+bGlzdDsgY2hpbGQxOyBjaGlsZDEgPSBjaGlsZDEtPm5leHQpIHsNCiAgICAtDQogICAgLQkJ
c3ltID0gY2hpbGQxLT5zeW07DQogICAgLQ0KICAgIC0JICAgICAgcmVwYXJzZToNCiAgICAtCQlt
ZW51MSA9IGNoaWxkMTsNCiAgICAtCQlpZiAodmFsaWQpDQogICAgLQkJCWd0a190cmVlX21vZGVs
X2dldChtb2RlbDIsIGNoaWxkMiwgQ09MX01FTlUsDQogICAgLQkJCQkJICAgJm1lbnUyLCAtMSk7
DQogICAgLQkJZWxzZQ0KICAgIC0JCQltZW51MiA9IE5VTEw7CS8vIGZvcmNlIGFkZGluZyBvZiBh
IGZpcnN0IGNoaWxkDQogICAgLQ0KICAgIC0jaWZkZWYgREVCVUcNCiAgICAtCQlwcmludGYoIiUq
YyVzIHwgJXNcbiIsIGluZGVudCwgJyAnLA0KICAgIC0JCSAgICAgICBtZW51MSA/IG1lbnVfZ2V0
X3Byb21wdChtZW51MSkgOiAibmlsIiwNCiAgICAtCQkgICAgICAgbWVudTIgPyBtZW51X2dldF9w
cm9tcHQobWVudTIpIDogIm5pbCIpOw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLQkJaWYgKChv
cHRfbW9kZSA9PSBPUFRfTk9STUFMICYmICFtZW51X2lzX3Zpc2libGUoY2hpbGQxKSkgfHwNCiAg
ICAtCQkgICAgKG9wdF9tb2RlID09IE9QVF9QUk9NUFQgJiYgIW1lbnVfaGFzX3Byb21wdChjaGls
ZDEpKSB8fA0KICAgIC0JCSAgICAob3B0X21vZGUgPT0gT1BUX0FMTCAgICAmJiAhbWVudV9nZXRf
cHJvbXB0KGNoaWxkMSkpKSB7DQogICAgLQ0KICAgIC0JCQkvKiByZW1vdmUgbm9kZSAqLw0KICAg
IC0JCQlpZiAoZ3RrdHJlZV9pdGVyX2ZpbmRfbm9kZShkc3QsIG1lbnUxKSAhPSBOVUxMKSB7DQog
ICAgLQkJCQltZW1jcHkoJnRtcCwgY2hpbGQyLCBzaXplb2YoR3RrVHJlZUl0ZXIpKTsNCiAgICAt
CQkJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwNCiAgICAtCQkJCQkJ
CQkgY2hpbGQyKTsNCiAgICAtCQkJCWd0a190cmVlX3N0b3JlX3JlbW92ZSh0cmVlMiwgJnRtcCk7
DQogICAgLQkJCQlpZiAoIXZhbGlkKQ0KICAgIC0JCQkJCXJldHVybjsJCS8qIG5leHQgcGFyZW50
ICovDQogICAgLQkJCQllbHNlDQogICAgLQkJCQkJZ290byByZXBhcnNlOwkvKiBuZXh0IGNoaWxk
ICovDQogICAgLQkJCX0gZWxzZQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJfQ0KICAgIC0N
CiAgICAtCQlpZiAobWVudTEgIT0gbWVudTIpIHsNCiAgICAtCQkJaWYgKGd0a3RyZWVfaXRlcl9m
aW5kX25vZGUoZHN0LCBtZW51MSkgPT0gTlVMTCkgewkvLyBhZGQgbm9kZQ0KICAgIC0JCQkJaWYg
KCF2YWxpZCAmJiAhbWVudTIpDQogICAgLQkJCQkJc2libGluZyA9IE5VTEw7DQogICAgLQkJCQll
bHNlDQogICAgLQkJCQkJc2libGluZyA9IGNoaWxkMjsNCiAgICAtCQkJCWd0a190cmVlX3N0b3Jl
X2luc2VydF9iZWZvcmUodHJlZTIsDQogICAgLQkJCQkJCQkgICAgIGNoaWxkMiwNCiAgICAtCQkJ
CQkJCSAgICAgZHN0LCBzaWJsaW5nKTsNCiAgICAtCQkJCXNldF9ub2RlKGNoaWxkMiwgbWVudTEs
IGZpbGxfcm93KG1lbnUxKSk7DQogICAgLQkJCQlpZiAobWVudTIgPT0gTlVMTCkNCiAgICAtCQkJ
CQl2YWxpZCA9IFRSVUU7DQogICAgLQkJCX0gZWxzZSB7CS8vIHJlbW92ZSBub2RlDQogICAgLQkJ
CQltZW1jcHkoJnRtcCwgY2hpbGQyLCBzaXplb2YoR3RrVHJlZUl0ZXIpKTsNCiAgICAtCQkJCXZh
bGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwNCiAgICAtCQkJCQkJCQkgY2hp
bGQyKTsNCiAgICAtCQkJCWd0a190cmVlX3N0b3JlX3JlbW92ZSh0cmVlMiwgJnRtcCk7DQogICAg
LQkJCQlpZiAoIXZhbGlkKQ0KICAgIC0JCQkJCXJldHVybjsJLy8gbmV4dCBwYXJlbnQNCiAgICAt
CQkJCWVsc2UNCiAgICAtCQkJCQlnb3RvIHJlcGFyc2U7CS8vIG5leHQgY2hpbGQNCiAgICAtCQkJ
fQ0KICAgIC0JCX0gZWxzZSBpZiAoc3ltICYmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIQU5HRUQp
KSB7DQogICAgLQkJCXNldF9ub2RlKGNoaWxkMiwgbWVudTEsIGZpbGxfcm93KG1lbnUxKSk7DQog
ICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpbmRlbnQrKzsNCiAgICAtCQl1cGRhdGVfdHJlZShjaGls
ZDEsIGNoaWxkMik7DQogICAgLQkJaW5kZW50LS07DQogICAgLQ0KICAgIC0JCXZhbGlkID0gZ3Rr
X3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwgY2hpbGQyKTsNCiAgICAtCX0NCiAgICAtfQ0K
ICAgIC0NCiAgICAtDQogICAgLS8qIERpc3BsYXkgdGhlIHdob2xlIHRyZWUgKHNpbmdsZS9zcGxp
dC9mdWxsIHZpZXcpICovDQogICAgLXN0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZShzdHJ1Y3QgbWVu
dSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0
IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgIC0JZW51bSBw
cm9wX3R5cGUgcHR5cGU7DQogICAgLQ0KICAgIC0JaWYgKG1lbnUgPT0gJnJvb3RtZW51KSB7DQog
ICAgLQkJaW5kZW50ID0gMTsNCiAgICAtCQljdXJyZW50ID0gJnJvb3RtZW51Ow0KICAgIC0JfQ0K
ICAgIC0NCiAgICAtCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dCkgew0KICAgIC0JCXByb3AgPSBjaGlsZC0+cHJvbXB0Ow0KICAgIC0JCXN5bSA9IGNo
aWxkLT5zeW07DQogICAgLQkJcHR5cGUgPSBwcm9wID8gcHJvcC0+dHlwZSA6IFBfVU5LTk9XTjsN
CiAgICAtDQogICAgLQkJaWYgKHN5bSkNCiAgICAtCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX0NI
QU5HRUQ7DQogICAgLQ0KICAgIC0JCWlmICgodmlld19tb2RlID09IFNQTElUX1ZJRVcpDQogICAg
LQkJICAgICYmICEoY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UKSAmJiAodHJlZSA9PSB0cmVlMSkp
DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0NCiAgICAtCQlpZiAoKHZpZXdfbW9kZSA9PSBTUExJ
VF9WSUVXKSAmJiAoY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UKQ0KICAgIC0JCSAgICAmJiAodHJl
ZSA9PSB0cmVlMikpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0NCiAgICAtCQlpZiAoKG9wdF9t
b2RlID09IE9QVF9OT1JNQUwgJiYgbWVudV9pc192aXNpYmxlKGNoaWxkKSkgfHwNCiAgICAtCQkg
ICAgKG9wdF9tb2RlID09IE9QVF9QUk9NUFQgJiYgbWVudV9oYXNfcHJvbXB0KGNoaWxkKSkgfHwN
CiAgICAtCQkgICAgKG9wdF9tb2RlID09IE9QVF9BTEwgICAgJiYgbWVudV9nZXRfcHJvbXB0KGNo
aWxkKSkpDQogICAgLQkJCXBsYWNlX25vZGUoY2hpbGQsIGZpbGxfcm93KGNoaWxkKSk7DQogICAg
LSNpZmRlZiBERUJVRw0KICAgIC0JCXByaW50ZigiJSpjJXM6ICIsIGluZGVudCwgJyAnLCBtZW51
X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAgICAtCQlwcmludGYoIiVzIiwgY2hpbGQtPmZsYWdzICYg
TUVOVV9ST09UID8gInJvb3RtZW51IHwgIiA6ICIiKTsNCiAgICAtCQlwcmludGYoIiVzIiwgcHJv
cF9nZXRfdHlwZV9uYW1lKHB0eXBlKSk7DQogICAgLQkJcHJpbnRmKCIgfCAiKTsNCiAgICAtCQlp
ZiAoc3ltKSB7DQogICAgLQkJCXByaW50ZigiJXMiLCBzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkp
Ow0KICAgIC0JCQlwcmludGYoIiB8ICIpOw0KICAgIC0JCQlwcmludGYoIiVzIiwgZGJnX3N5bV9m
bGFncyhzeW0tPmZsYWdzKSk7DQogICAgLQkJCXByaW50ZigiXG4iKTsNCiAgICAtCQl9IGVsc2UN
CiAgICAtCQkJcHJpbnRmKCJcbiIpOw0KICAgIC0jZW5kaWYNCiAgICAtCQlpZiAoKHZpZXdfbW9k
ZSAhPSBGVUxMX1ZJRVcpICYmIChwdHlwZSA9PSBQX01FTlUpDQogICAgLQkJICAgICYmICh0cmVl
ID09IHRyZWUyKSkNCiAgICAtCQkJY29udGludWU7DQogICAgLS8qDQogICAgLSAgICAgICAgICAg
ICAgICBpZiAoKChtZW51ICE9ICZyb290bWVudSkgJiYgIShtZW51LT5mbGFncyAmIE1FTlVfUk9P
VCkpDQogICAgLQkJICAgIHx8ICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQ0KICAgIC0JCSAgICB8
fCAodmlld19tb2RlID09IFNQTElUX1ZJRVcpKSovDQogICAgLQ0KICAgIC0JCS8qIENoYW5nZSBw
YW5lZCBwb3NpdGlvbiBpZiB0aGUgdmlldyBpcyBub3QgaW4gJ3NwbGl0IG1vZGUnICovDQogICAg
LQkJaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVyB8fCB2aWV3X21vZGUgPT0gRlVMTF9WSUVX
KSB7DQogICAgLQkJCWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKGhwYW5lZCksIDAp
Ow0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJaWYgKCgodmlld19tb2RlID09IFNJTkdMRV9WSUVX
KSAmJiAobWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQ0KICAgIC0JCSAgICB8fCAodmlld19tb2Rl
ID09IEZVTExfVklFVykNCiAgICAtCQkgICAgfHwgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSkg
ew0KICAgIC0JCQlpbmRlbnQrKzsNCiAgICAtCQkJZGlzcGxheV90cmVlKGNoaWxkKTsNCiAgICAt
CQkJaW5kZW50LS07DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKiBE
aXNwbGF5IGEgcGFydCBvZiB0aGUgdHJlZSBzdGFydGluZyBhdCBjdXJyZW50IG5vZGUgKHNpbmds
ZS9zcGxpdCB2aWV3KSAqLw0KICAgIC1zdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lk
KQ0KICAgIC17DQogICAgLQlpZiAodHJlZTIpDQogICAgLQkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIo
dHJlZTIpOw0KICAgIC0JaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykNCiAgICAtCQlkaXNw
bGF5X3RyZWUoY3VycmVudCk7DQogICAgLQllbHNlIGlmICh2aWV3X21vZGUgPT0gU1BMSVRfVklF
VykNCiAgICAtCQlkaXNwbGF5X3RyZWUoYnJvd3NlZCk7DQogICAgLQlndGtfdHJlZV92aWV3X2V4
cGFuZF9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMl93KSk7DQogICAgLX0NCiAgICAtDQogICAgLS8q
IERpc3BsYXkgdGhlIGxpc3QgaW4gdGhlIGxlZnQgZnJhbWUgKHNwbGl0IHZpZXcpICovDQogICAg
LXN0YXRpYyB2b2lkIGRpc3BsYXlfbGlzdCh2b2lkKQ0KICAgIC17DQogICAgLQlpZiAodHJlZTEp
DQogICAgLQkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTEpOw0KICAgIC0NCiAgICAtCXRyZWUg
PSB0cmVlMTsNCiAgICAtCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOw0KICAgIC0JZ3RrX3RyZWVf
dmlld19leHBhbmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTFfdykpOw0KICAgIC0JdHJlZSA9IHRy
ZWUyOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIGZpeHVwX3Jvb3RtZW51KHN0cnVjdCBtZW51
ICptZW51KQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgLQlzdGF0aWMg
aW50IG1lbnVfY250ID0gMDsNCiAgICAtDQogICAgLQltZW51LT5mbGFncyB8PSBNRU5VX1JPT1Q7
DQogICAgLQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHQpIHsNCiAgICAtCQlpZiAoY2hpbGQtPnByb21wdCAmJiBjaGlsZC0+cHJvbXB0LT50eXBlID09
IFBfTUVOVSkgew0KICAgIC0JCQltZW51X2NudCsrOw0KICAgIC0JCQlmaXh1cF9yb290bWVudShj
aGlsZCk7DQogICAgLQkJCW1lbnVfY250LS07DQogICAgLQkJfSBlbHNlIGlmICghbWVudV9jbnQp
DQogICAgLQkJCWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0N
CiAgICAtDQogICAgLS8qIE1haW4gKi8NCiAgICAtaW50IG1haW4oaW50IGFjLCBjaGFyICphdltd
KQ0KICAgIC17DQogICAgLQljb25zdCBjaGFyICpuYW1lOw0KICAgIC0JY2hhciAqZW52Ow0KICAg
IC0JZ2NoYXIgKmdsYWRlX2ZpbGU7DQogICAgLQ0KICAgIC0JYmluZHRleHRkb21haW4oUEFDS0FH
RSwgTE9DQUxFRElSKTsNCiAgICAtCWJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KFBBQ0tBR0UsICJV
VEYtOCIpOw0KICAgIC0JdGV4dGRvbWFpbihQQUNLQUdFKTsNCiAgICAtDQogICAgLQkvKiBHVEsg
c3R1ZmZzICovDQogICAgLQlndGtfc2V0X2xvY2FsZSgpOw0KICAgIC0JZ3RrX2luaXQoJmFjLCAm
YXYpOw0KICAgIC0JZ2xhZGVfaW5pdCgpOw0KICAgIC0NCiAgICAtCS8vYWRkX3BpeG1hcF9kaXJl
Y3RvcnkgKFBBQ0tBR0VfREFUQV9ESVIgIi8iIFBBQ0tBR0UgIi9waXhtYXBzIik7DQogICAgLQkv
L2FkZF9waXhtYXBfZGlyZWN0b3J5IChQQUNLQUdFX1NPVVJDRV9ESVIgIi9waXhtYXBzIik7DQog
ICAgLQ0KICAgIC0JLyogRGV0ZXJtaW5lIEdVSSBwYXRoICovDQogICAgLQllbnYgPSBnZXRlbnYo
U1JDVFJFRSk7DQogICAgLQlpZiAoZW52KQ0KICAgIC0JCWdsYWRlX2ZpbGUgPSBnX3N0cmNvbmNh
dChlbnYsICIvc3VwcG9ydC9rY29uZmlnL2djb25mLmdsYWRlIiwgTlVMTCk7DQogICAgLQllbHNl
IGlmIChhdlswXVswXSA9PSAnLycpDQogICAgLQkJZ2xhZGVfZmlsZSA9IGdfc3RyY29uY2F0KGF2
WzBdLCAiLmdsYWRlIiwgTlVMTCk7DQogICAgLQllbHNlDQogICAgLQkJZ2xhZGVfZmlsZSA9IGdf
c3RyY29uY2F0KGdfZ2V0X2N1cnJlbnRfZGlyKCksICIvIiwgYXZbMF0sICIuZ2xhZGUiLCBOVUxM
KTsNCiAgICAtDQogICAgLQkvKiBDb25mIHN0dWZmcyAqLw0KICAgIC0JaWYgKGFjID4gMSAmJiBh
dlsxXVswXSA9PSAnLScpIHsNCiAgICAtCQlzd2l0Y2ggKGF2WzFdWzFdKSB7DQogICAgLQkJY2Fz
ZSAnYSc6DQogICAgLQkJCS8vc2hvd0FsbCA9IDE7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgJ2gnOg0KICAgIC0JCWNhc2UgJz8nOg0KICAgIC0JCQlwcmludGYoIiVzIDxjb25maWc+XG4i
LCBhdlswXSk7DQogICAgLQkJCWV4aXQoMCk7DQogICAgLQkJfQ0KICAgIC0JCW5hbWUgPSBhdlsy
XTsNCiAgICAtCX0gZWxzZQ0KICAgIC0JCW5hbWUgPSBhdlsxXTsNCiAgICAtDQogICAgLQljb25m
X3BhcnNlKG5hbWUpOw0KICAgIC0JZml4dXBfcm9vdG1lbnUoJnJvb3RtZW51KTsNCiAgICAtCWNv
bmZfcmVhZChOVUxMKTsNCiAgICAtDQogICAgLQkvKiBMb2FkIHRoZSBpbnRlcmZhY2UgYW5kIGNv
bm5lY3Qgc2lnbmFscyAqLw0KICAgIC0JaW5pdF9tYWluX3dpbmRvdyhnbGFkZV9maWxlKTsNCiAg
ICAtCWluaXRfdHJlZV9tb2RlbCgpOw0KICAgIC0JaW5pdF9sZWZ0X3RyZWUoKTsNCiAgICAtCWlu
aXRfcmlnaHRfdHJlZSgpOw0KICAgIC0NCiAgICAtCXN3aXRjaCAodmlld19tb2RlKSB7DQogICAg
LQljYXNlIFNJTkdMRV9WSUVXOg0KICAgIC0JCWRpc3BsYXlfdHJlZV9wYXJ0KCk7DQogICAgLQkJ
YnJlYWs7DQogICAgLQljYXNlIFNQTElUX1ZJRVc6DQogICAgLQkJZGlzcGxheV9saXN0KCk7DQog
ICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEZVTExfVklFVzoNCiAgICAtCQlkaXNwbGF5X3RyZWUo
JnJvb3RtZW51KTsNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLQlndGtfbWFp
bigpOw0KICAgIC0NCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZCBjb25mX2NoYW5nZWQodm9pZCkNCiAgICAtew0KICAgIC0JYm9vbCBjaGFuZ2VkID0gY29u
Zl9nZXRfY2hhbmdlZCgpOw0KICAgIC0JZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHNhdmVfYnRu
LCBjaGFuZ2VkKTsNCiAgICAtCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShzYXZlX21lbnVfaXRl
bSwgY2hhbmdlZCk7DQogICAgLX0NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2dj
b25mLmdsYWRlIGIvc3VwcG9ydC9rY29uZmlnL2djb25mLmdsYWRlDQogICAgZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDNlOTdkNy4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBv
cnQva2NvbmZpZy9nY29uZi5nbGFkZQ0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw2NjEg
KzAsMCBAQA0KICAgIC08P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+IDwhLS0q
LSBtb2RlOiB4bWwgLSotLT4NCiAgICAtDQogICAgLTxnbGFkZS1pbnRlcmZhY2U+DQogICAgLQ0K
ICAgIC08d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cxIj4NCiAgICAtICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLSAgPHByb3BlcnR5IG5h
bWU9InRpdGxlIiB0cmFuc2xhdGFibGU9InllcyI+R3RrIFVuaWtyYWZ0IENvbmZpZ3VyYXRvcjwv
cHJvcGVydHk+DQogICAgLSAgPHByb3BlcnR5IG5hbWU9InR5cGUiPkdUS19XSU5ET1dfVE9QTEVW
RUw8L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdU
S19XSU5fUE9TX05PTkU8L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+
RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0X3dpZHRoIj42
NDA8L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0X2hlaWdodCI+NDgw
PC9wcm9wZXJ0eT4NCiAgICAtICA8cHJvcGVydHkgbmFtZT0icmVzaXphYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICAtICA8cHJvcGVydHkgbmFtZT0iZGVzdHJveV93aXRoX3BhcmVudCI+RmFsc2U8
L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJkZWNvcmF0ZWQiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJza2lwX3Rhc2tiYXJfaGludCI+RmFsc2U8L3By
b3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJza2lwX3BhZ2VyX2hpbnQiPkZhbHNlPC9w
cm9wZXJ0eT4NCiAgICAtICA8cHJvcGVydHkgbmFtZT0idHlwZV9oaW50Ij5HREtfV0lORE9XX1RZ
UEVfSElOVF9OT1JNQUw8L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJncmF2aXR5
Ij5HREtfR1JBVklUWV9OT1JUSF9XRVNUPC9wcm9wZXJ0eT4NCiAgICAtICA8c2lnbmFsIG5hbWU9
ImRlc3Ryb3kiIGhhbmRsZXI9Im9uX3dpbmRvdzFfZGVzdHJveSIgb2JqZWN0PSJ3aW5kb3cxIi8+
DQogICAgLSAgPHNpZ25hbCBuYW1lPSJzaXplX3JlcXVlc3QiIGhhbmRsZXI9Im9uX3dpbmRvdzFf
c2l6ZV9yZXF1ZXN0IiBvYmplY3Q9InZwYW5lZDEiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZy
aSwgMTEgSmFuIDIwMDIgMTY6MTc6MTEgR01UIi8+DQogICAgLSAgPHNpZ25hbCBuYW1lPSJkZWxl
dGVfZXZlbnQiIGhhbmRsZXI9Im9uX3dpbmRvdzFfZGVsZXRlX2V2ZW50IiBvYmplY3Q9IndpbmRv
dzEiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMDkgTWFyIDIwMDMgMTk6NDI6NDYgR01U
Ii8+DQogICAgLQ0KICAgIC0gIDxjaGlsZD4NCiAgICAtICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZC
b3giIGlkPSJ2Ym94MSI+DQogICAgLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtICAgICAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxz
ZTwvcHJvcGVydHk+DQogICAgLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4wPC9wcm9w
ZXJ0eT4NCiAgICAtDQogICAgLSAgICAgIDxjaGlsZD4NCiAgICAtCTx3aWRnZXQgY2xhc3M9Ikd0
a01lbnVCYXIiIGlkPSJtZW51YmFyMSI+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtDQogICAgLQkgIDxjaGlsZD4NCiAgICAtCSAgICA8d2lk
Z2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9ImZpbGUxIj4NCiAgICAtCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9GaWxlPC9wcm9wZXJ0eT4NCiAgICAtCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
DQogICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9
ImZpbGUxX21lbnUiPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdl
dCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9ImxvYWQxIj4NCiAgICAtCQkgICAgICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3Bl
cnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2FkIGEgY29uZmlnIGZpbGU8
L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRh
YmxlPSJ5ZXMiPl9Mb2FkPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
dXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1l
PSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fbG9hZDFfYWN0aXZhdGUiLz4NCiAgICAtCQkgICAgICA8
YWNjZWxlcmF0b3Iga2V5PSJMIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0siIHNpZ25hbD0i
YWN0aXZhdGUiLz4NCiAgICAtDQogICAgLQkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJp
bWFnZSI+DQogICAgLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2UzOSI+DQog
ICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0J
CQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLW9wZW48L3Byb3BlcnR5Pg0KICAgIC0JCQkg
IDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5h
bWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieHBh
ZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3Bl
cnR5Pg0KICAgIC0JCQk8L3dpZGdldD4NCiAgICAtCQkgICAgICA8L2NoaWxkPg0KICAgIC0JCSAg
ICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JCSAgPGNoaWxkPg0K
ICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ic2F2ZTEiPg0K
ICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNh
dmUgdGhlIGNvbmZpZyBpbiAuY29uZmlnPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fU2F2ZTwvcHJvcGVydHk+DQogICAg
LQkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmVfYWN0
aXZhdGUiLz4NCiAgICAtCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJTIiBtb2RpZmllcnM9IkdE
S19DT05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4NCiAgICAtDQogICAgLQkJICAgICAg
PGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+DQogICAgLQkJCTx3aWRnZXQgY2xhc3M9Ikd0
a0ltYWdlIiBpZD0iaW1hZ2U0MCI+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXNh
dmU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3By
b3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+
DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICAt
CQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3Bl
cnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5Pg0KICAgIC0JCQk8L3dpZGdldD4NCiAgICAtCQkg
ICAgICA8L2NoaWxkPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQog
ICAgLQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFn
ZU1lbnVJdGVtIiBpZD0ic2F2ZV9hczEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9v
bHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgdGhlIGNvbmZpZyBpbiBhIGZpbGU8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5
ZXMiPlNhdmUgX2FzPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNl
X3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJh
Y3RpdmF0ZSIgaGFuZGxlcj0ib25fc2F2ZV9hczFfYWN0aXZhdGUiLz4NCiAgICAtDQogICAgLQkJ
ICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+DQogICAgLQkJCTx3aWRnZXQgY2xh
c3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0MSI+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InZp
c2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+
Z3RrLXNhdmUtYXM8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3Np
emUiPjE8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwv
cHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0
eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJ
CSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5Pg0KICAgIC0JCQk8L3dpZGdldD4N
CiAgICAtCQkgICAgICA8L2NoaWxkPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwv
Y2hpbGQ+DQogICAgLQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNz
PSJHdGtTZXBhcmF0b3JNZW51SXRlbSIgaWQ9InNlcGFyYXRvcjEiPg0KICAgIC0JCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgPC93aWRn
ZXQ+DQogICAgLQkJICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkg
ICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9InF1aXQxIj4NCiAgICAtCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAg
ICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X1F1aXQ8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9w
cm9wZXJ0eT4NCiAgICAtCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJv
bl9xdWl0MV9hY3RpdmF0ZSIvPg0KICAgIC0JCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IlEiIG1v
ZGlmaWVycz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPg0KICAgIC0NCiAg
ICAtCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4NCiAgICAtCQkJPHdpZGdl
dCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQyIj4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InN0
b2NrIj5ndGstcXVpdDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25f
c2l6ZSI+MTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41
PC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3Bl
cnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICAt
CQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCTwvd2lkZ2V0
Pg0KICAgIC0JCSAgICAgIDwvY2hpbGQ+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAg
PC9jaGlsZD4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQkg
ICAgPC93aWRnZXQ+DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICA8Y2hpbGQ+DQog
ICAgLQkgICAgPHdpZGdldCBjbGFzcz0iR3RrTWVudUl0ZW0iIGlkPSJvcHRpb25zMSI+DQogICAg
LQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkg
ICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fT3B0aW9uczwv
cHJvcGVydHk+DQogICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQ0KICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQg
Y2xhc3M9Ikd0a01lbnUiIGlkPSJvcHRpb25zMV9tZW51Ij4NCiAgICAtDQogICAgLQkJICA8Y2hp
bGQ+DQogICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0NoZWNrTWVudUl0ZW0iIGlkPSJzaG93
X25hbWUxIj4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJv
cGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJs
ZT0ieWVzIj5TaG93IG5hbWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgX25hbWU8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+DQogICAg
LQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2hvd19uYW1lMV9h
Y3RpdmF0ZSIvPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAg
LQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDaGVja01l
bnVJdGVtIiBpZD0ic2hvd19yYW5nZTEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9v
bHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgcmFuZ2UgKFkvTS9OKTwvcHJvcGVydHk+DQog
ICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hv
dyBfcmFuZ2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5k
ZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0
aXZlIj5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0
ZSIgaGFuZGxlcj0ib25fc2hvd19yYW5nZTFfYWN0aXZhdGUiLz4NCiAgICAtCQkgICAgPC93aWRn
ZXQ+DQogICAgLQkJICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkg
ICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIgaWQ9InNob3dfZGF0YTEiPg0KICAg
IC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cg
dmFsdWUgb2YgdGhlIG9wdGlvbjwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5h
bWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfZGF0YTwvcHJvcGVydHk+DQogICAg
LQkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAg
ICAtCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zaG93X2RhdGEx
X2FjdGl2YXRlIi8+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAgPC9jaGlsZD4NCiAg
ICAtDQogICAgLQkJICA8Y2hpbGQ+DQogICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1NlcGFy
YXRvck1lbnVJdGVtIiBpZD0ic2VwYXJhdG9yMiI+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAt
CQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0
IGNsYXNzPSJHdGtSYWRpb01lbnVJdGVtIiBpZD0ic2V0X29wdGlvbl9tb2RlMSI+DQogICAgLQkJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBub3Jt
YWwgb3B0aW9uczwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVs
IiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBub3JtYWwgb3B0aW9uczwvcHJvcGVydHk+DQogICAg
LQkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPlRydWU8L3Byb3BlcnR5Pg0KICAg
IC0JCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NldF9vcHRpb25f
bW9kZTFfYWN0aXZhdGUiLz4NCiAgICAtCQkgICAgPC93aWRnZXQ+DQogICAgLQkJICA8L2NoaWxk
Pg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3Rr
UmFkaW9NZW51SXRlbSIgaWQ9InNldF9vcHRpb25fbW9kZTIiPg0KICAgIC0JCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgYWxsIG9wdGlvbnM8L3By
b3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxl
PSJ5ZXMiPlNob3cgYWxsIF9vcHRpb25zPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHBy
b3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJncm91cCI+c2V0X29wdGlvbl9tb2RlMTwvcHJvcGVydHk+DQogICAgLQkJICAg
ICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2V0X29wdGlvbl9tb2RlMl9h
Y3RpdmF0ZSIvPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAg
LQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtSYWRpb01l
bnVJdGVtIiBpZD0ic2V0X29wdGlvbl9tb2RlMyI+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBhbGwgb3B0aW9ucyB3aXRoIHByb21w
dHM8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPlNob3cgYWxsIHByb21wdCBvcHRpb25zPC9wcm9wZXJ0eT4NCiAgICAtCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAg
LQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJncm91cCI+c2V0X29wdGlvbl9tb2RlMTwvcHJvcGVydHk+
DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2V0X29w
dGlvbl9tb2RlM19hY3RpdmF0ZSIvPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwv
Y2hpbGQ+DQogICAgLQ0KICAgIC0JCTwvd2lkZ2V0Pg0KICAgIC0JICAgICAgPC9jaGlsZD4NCiAg
ICAtCSAgICA8L3dpZGdldD4NCiAgICAtCSAgPC9jaGlsZD4NCiAgICAtDQogICAgLQkgIDxjaGls
ZD4NCiAgICAtCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9ImhlbHAxIj4NCiAg
ICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9IZWxwPC9w
cm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtDQogICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBj
bGFzcz0iR3RrTWVudSIgaWQ9ImhlbHAxX21lbnUiPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4N
CiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9ImludHJvZHVj
dGlvbjEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0i
eWVzIj5fSW50cm9kdWN0aW9uPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBu
YW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25faW50cm9kdWN0aW9uMV9hY3RpdmF0ZSIgbGFzdF9t
b2RpZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBHTVQiLz4NCiAgICAt
CQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJJIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0si
IHNpZ25hbD0iYWN0aXZhdGUiLz4NCiAgICAtDQogICAgLQkJICAgICAgPGNoaWxkIGludGVybmFs
LWNoaWxkPSJpbWFnZSI+DQogICAgLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1h
Z2U0MyI+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLWRpYWxvZy1xdWVzdGlvbjwv
cHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVy
dHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAg
ICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgIC0JCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVydHkg
bmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCTwvd2lkZ2V0Pg0KICAgIC0JCSAgICAg
IDwvY2hpbGQ+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAgPC9jaGlsZD4NCiAgICAt
DQogICAgLQkJICA8Y2hpbGQ+DQogICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVu
dUl0ZW0iIGlkPSJhYm91dDEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRy
YW5zbGF0YWJsZT0ieWVzIj5fQWJvdXQ8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8c2ln
bmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9hYm91dDFfYWN0aXZhdGUiIGxhc3RfbW9k
aWZpY2F0aW9uX3RpbWU9IkZyaSwgMTUgTm92IDIwMDIgMjA6MjY6MzAgR01UIi8+DQogICAgLQkJ
ICAgICAgPGFjY2VsZXJhdG9yIGtleT0iQSIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBz
aWduYWw9ImFjdGl2YXRlIi8+DQogICAgLQ0KICAgIC0JCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1j
aGlsZD0iaW1hZ2UiPg0KICAgIC0JCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdl
NDQiPg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1wcm9wZXJ0aWVzPC9wcm9wZXJ0
eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4NCiAg
ICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgIC0JCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3Bl
cnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5
cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICAtCQkJPC93aWRnZXQ+DQogICAgLQkJICAgICAgPC9jaGls
ZD4NCiAgICAtCQkgICAgPC93aWRnZXQ+DQogICAgLQkJICA8L2NoaWxkPg0KICAgIC0NCiAgICAt
CQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIg
aWQ9ImxpY2Vuc2UxIj4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xh
dGFibGU9InllcyI+X0xpY2Vuc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8c2lnbmFs
IG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9saWNlbnNlMV9hY3RpdmF0ZSIgbGFzdF9tb2Rp
ZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBHTVQiLz4NCiAgICAtDQog
ICAgLQkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+DQogICAgLQkJCTx3aWRn
ZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0NSI+DQogICAgLQkJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJz
dG9jayI+Z3RrLWp1c3RpZnktZmlsbDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5h
bWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Inhh
bGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4w
LjU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0
eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJ
CTwvd2lkZ2V0Pg0KICAgIC0JCSAgICAgIDwvY2hpbGQ+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0K
ICAgIC0JCSAgPC9jaGlsZD4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCSAgICAgIDwvY2hpbGQ+
DQogICAgLQkgICAgPC93aWRnZXQ+DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQk8L3dpZGdldD4N
CiAgICAtCTxwYWNraW5nPg0KICAgIC0JICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJv
cGVydHk+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4N
CiAgICAtCSAgPHByb3BlcnR5IG5hbWU9ImZpbGwiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCTwv
cGFja2luZz4NCiAgICAtICAgICAgPC9jaGlsZD4NCiAgICAtDQogICAgLSAgICAgIDxjaGlsZD4N
CiAgICAtCTx3aWRnZXQgY2xhc3M9Ikd0a0hhbmRsZUJveCIgaWQ9ImhhbmRsZWJveDEiPg0KICAg
IC0JICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkgIDxw
cm9wZXJ0eSBuYW1lPSJzaGFkb3dfdHlwZSI+R1RLX1NIQURPV19PVVQ8L3Byb3BlcnR5Pg0KICAg
IC0JICA8cHJvcGVydHkgbmFtZT0iaGFuZGxlX3Bvc2l0aW9uIj5HVEtfUE9TX0xFRlQ8L3Byb3Bl
cnR5Pg0KICAgIC0JICA8cHJvcGVydHkgbmFtZT0ic25hcF9lZGdlIj5HVEtfUE9TX1RPUDwvcHJv
cGVydHk+DQogICAgLQ0KICAgIC0JICA8Y2hpbGQ+DQogICAgLQkgICAgPHdpZGdldCBjbGFzcz0i
R3RrVG9vbGJhciIgaWQ9InRvb2xiYXIxIj4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmll
bnRhdGlvbiI+R1RLX09SSUVOVEFUSU9OX0hPUklaT05UQUw8L3Byb3BlcnR5Pg0KICAgIC0JICAg
ICAgPHByb3BlcnR5IG5hbWU9InRvb2xiYXJfc3R5bGUiPkdUS19UT09MQkFSX0JPVEg8L3Byb3Bl
cnR5Pg0KICAgIC0JICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXBzIj5UcnVlPC9wcm9wZXJ0
eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaG93X2Fycm93Ij5UcnVlPC9wcm9wZXJ0
eT4NCiAgICAtDQogICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0iR3Rr
VG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjEiPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRy
YW5zbGF0YWJsZT0ieWVzIj5Hb2VzIHVwIG9mIG9uZSBsZXZlbCAoc2luZ2xlIHZpZXcpPC9wcm9w
ZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
PkJhY2s8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGst
dW5kbzwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9u
dGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3Zl
cnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBv
cnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIg
aGFuZGxlcj0ib25fYmFja19jbGlja2VkIi8+DQogICAgLQkJPC93aWRnZXQ+DQogICAgLQkJPHBh
Y2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+
DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCTwvcGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICAg
ICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0
ZW0xIj4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3By
b3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3By
b3BlcnR5Pg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFz
cz0iR3RrVlNlcGFyYXRvciIgaWQ9InZzZXBhcmF0b3IxIj4NCiAgICAtCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0K
ICAgIC0JCSAgPC9jaGlsZD4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCQk8cGFja2luZz4NCiAg
ICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkg
IDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCTwv
cGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICAgICAgPGNoaWxk
Pg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b24yIj4NCiAg
ICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+TG9hZCBhIGNvbmZp
ZyBmaWxlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPkxvYWQ8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InVz
ZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InN0
b2NrX2lkIj5ndGstb3BlbjwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBu
YW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxzaWduYWwgbmFt
ZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fbG9hZF9jbGlja2VkIi8+DQogICAgLQkJPC93aWRnZXQ+
DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxz
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8
L3Byb3BlcnR5Pg0KICAgIC0JCTwvcGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAg
LQ0KICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0
b24iIGlkPSJidXR0b24zIj4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFi
bGU9InllcyI+U2F2ZSBhIGNvbmZpZyBmaWxlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0
eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmU8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstc2F2ZTwvcHJvcGVydHk+DQogICAgLQkJ
ICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4N
CiAgICAtCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fc2F2ZV9hY3RpdmF0
ZSIvPg0KICAgIC0JCTwvd2lkZ2V0Pg0KICAgIC0JCTxwYWNraW5nPg0KICAgIC0JCSAgPHByb3Bl
cnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5h
bWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAg
LQkgICAgICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lk
Z2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMiI+DQogICAgLQkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtDQogICAgLQkJ
ICA8Y2hpbGQ+DQogICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2
c2VwYXJhdG9yMiI+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAg
LQkJPC93aWRnZXQ+DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0i
ZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dl
bmVvdXMiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8
L2NoaWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lkZ2V0IGNsYXNz
PSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uNCI+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNpbmdsZSB2aWV3PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxw
cm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNpbmdsZTwvcHJvcGVydHk+
DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1taXNzaW5nLWltYWdlPC9w
cm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwi
PlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+
RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVy
PSJvbl9zaW5nbGVfY2xpY2tlZCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4g
MjAwMyAxNDoyODozOSBHTVQiLz4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCQk8cGFja2luZz4N
CiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAt
CQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJ
PC9wYWNraW5nPg0KICAgIC0JICAgICAgPC9jaGlsZD4NCiAgICAtDQogICAgLQkgICAgICA8Y2hp
bGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjUiPg0K
ICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TcGxpdCB2aWV3
PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxl
PSJ5ZXMiPlNwbGl0PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5k
ZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19p
ZCI+Z3RrLW1pc3NpbmctaW1hZ2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9
InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVy
dHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8c2lnbmFs
IG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX3NwbGl0X2NsaWNrZWQiIGxhc3RfbW9kaWZpY2F0
aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTQ6Mjg6NDUgR01UIi8+DQogICAgLQkJPC93aWRn
ZXQ+DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5G
YWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgIC0JCTwvcGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQog
ICAgLQ0KICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xC
dXR0b24iIGlkPSJidXR0b242Ij4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xh
dGFibGU9InllcyI+RnVsbCB2aWV3PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1l
PSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkZ1bGw8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHBy
b3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHBy
b3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVydHk+DQogICAg
LQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0
eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0
eT4NCiAgICAtCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fZnVsbF9jbGlj
a2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE0OjI4OjUwIEdN
VCIvPg0KICAgIC0JCTwvd2lkZ2V0Pg0KICAgIC0JCTxwYWNraW5nPg0KICAgIC0JCSAgPHByb3Bl
cnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5h
bWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAg
LQkgICAgICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lk
Z2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMyI+DQogICAgLQkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtDQogICAgLQkJ
ICA8Y2hpbGQ+DQogICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2
c2VwYXJhdG9yMyI+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAg
LQkJPC93aWRnZXQ+DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0i
ZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dl
bmVvdXMiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8
L2NoaWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lkZ2V0IGNsYXNz
PSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uNyI+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkNvbGxhcHNlIHRoZSB3aG9sZSB0cmVlIGluIHRoZSByaWdo
dCBmcmFtZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5z
bGF0YWJsZT0ieWVzIj5Db2xsYXBzZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFt
ZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFt
ZT0ic3RvY2tfaWQiPmd0ay1yZW1vdmU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJv
cGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8c2ln
bmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2NvbGxhcHNlX2NsaWNrZWQiLz4NCiAgICAt
CQk8L3dpZGdldD4NCiAgICAtCQk8cGFja2luZz4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJl
eHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2Vu
ZW91cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJPC9wYWNraW5nPg0KICAgIC0JICAgICAgPC9j
aGlsZD4NCiAgICAtDQogICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0i
R3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjgiPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZp
c2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAi
IHRyYW5zbGF0YWJsZT0ieWVzIj5FeHBhbmQgdGhlIHdob2xlIHRyZWUgaW4gdGhlIHJpZ2h0IGZy
YW1lPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRh
YmxlPSJ5ZXMiPkV4cGFuZDwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idXNl
X3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ic3Rv
Y2tfaWQiPmd0ay1hZGQ8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFt
ZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8c2lnbmFsIG5hbWU9
ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2V4cGFuZF9jbGlja2VkIi8+DQogICAgLQkJPC93aWRnZXQ+
DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxz
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8
L3Byb3BlcnR5Pg0KICAgIC0JCTwvcGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAg
LQkgICAgPC93aWRnZXQ+DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQk8L3dpZGdldD4NCiAgICAt
CTxwYWNraW5nPg0KICAgIC0JICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+
DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAt
CSAgPHByb3BlcnR5IG5hbWU9ImZpbGwiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCTwvcGFja2lu
Zz4NCiAgICAtICAgICAgPC9jaGlsZD4NCiAgICAtDQogICAgLSAgICAgIDxjaGlsZD4NCiAgICAt
CTx3aWRnZXQgY2xhc3M9Ikd0a0hQYW5lZCIgaWQ9ImhwYW5lZDEiPg0KICAgIC0JICA8cHJvcGVy
dHkgbmFtZT0id2lkdGhfcmVxdWVzdCI+MTwvcHJvcGVydHk+DQogICAgLQkgIDxwcm9wZXJ0eSBu
YW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgPHByb3BlcnR5IG5hbWU9ImNh
bl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlv
biI+MDwvcHJvcGVydHk+DQogICAgLQ0KICAgIC0JICA8Y2hpbGQ+DQogICAgLQkgICAgPHdpZGdl
dCBjbGFzcz0iR3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzEiPg0KICAgIC0J
ICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JICAg
ICAgPHByb3BlcnR5IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJ
QzwvcHJvcGVydHk+DQogICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xp
Y3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJzaGFkb3dfdHlwZSI+R1RLX1NIQURPV19JTjwvcHJvcGVydHk+DQogICAgLQkgICAg
ICA8cHJvcGVydHkgbmFtZT0id2luZG93X3BsYWNlbWVudCI+R1RLX0NPUk5FUl9UT1BfTEVGVDwv
cHJvcGVydHk+DQogICAgLQ0KICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xh
c3M9Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcxIj4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5f
Zm9jdXMiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImhlYWRlcnNf
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0icnVsZXNf
aGludCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InJlb3JkZXJh
YmxlIj5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZW5hYmxlX3Nl
YXJjaCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHNpZ25hbCBuYW1lPSJjdXJzb3JfY2hh
bmdlZCIgaGFuZGxlcj0ib25fdHJlZXZpZXcyX2N1cnNvcl9jaGFuZ2VkIiBsYXN0X21vZGlmaWNh
dGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE1OjU4OjIyIEdNVCIvPg0KICAgIC0JCSAgPHNp
Z25hbCBuYW1lPSJidXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3MV9idXR0
b25fcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMg
MTY6MDM6NTIgR01UIi8+DQogICAgLQkJICA8c2lnbmFsIG5hbWU9ImtleV9wcmVzc19ldmVudCIg
aGFuZGxlcj0ib25fdHJlZXZpZXcyX2tleV9wcmVzc19ldmVudCIgbGFzdF9tb2RpZmljYXRpb25f
dGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNjoxMTo0NCBHTVQiLz4NCiAgICAtCQk8L3dpZGdldD4N
CiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQkgICAgPC93aWRnZXQ+DQogICAgLQkgICAgPHBh
Y2tpbmc+DQogICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0
eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPkZhbHNlPC9wcm9wZXJ0eT4N
CiAgICAtCSAgICA8L3BhY2tpbmc+DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICA8
Y2hpbGQ+DQogICAgLQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlBhbmVkIiBpZD0idnBhbmVkMSI+
DQogICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQog
ICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MDwvcHJvcGVydHk+DQogICAgLQ0K
ICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2lu
ZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cyIj4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFy
X3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3Bl
cnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVy
dHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUiPkdUS19TSEFET1dfSU48
L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wbGFjZW1lbnQiPkdU
S19DT1JORVJfVE9QX0xFRlQ8L3Byb3BlcnR5Pg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAg
ICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzIiPg0KICAg
IC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
CQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
CQkgICAgICA8cHJvcGVydHkgbmFtZT0iaGFzX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
CQkgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZGVyc192aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0icnVsZXNfaGludCI+RmFsc2U8L3Byb3BlcnR5
Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZW9yZGVyYWJsZSI+RmFsc2U8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVfc2VhcmNoIj5GYWxzZTwv
cHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJjdXJzb3JfY2hhbmdlZCIgaGFu
ZGxlcj0ib25fdHJlZXZpZXcyX2N1cnNvcl9jaGFuZ2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1l
PSJTdW4sIDEyIEphbiAyMDAzIDE1OjU3OjU1IEdNVCIvPg0KICAgIC0JCSAgICAgIDxzaWduYWwg
bmFtZT0iYnV0dG9uX3ByZXNzX2V2ZW50IiBoYW5kbGVyPSJvbl90cmVldmlldzJfYnV0dG9uX3By
ZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE1OjU3
OjU4IEdNVCIvPg0KICAgIC0JCSAgICAgIDxzaWduYWwgbmFtZT0ia2V5X3ByZXNzX2V2ZW50IiBo
YW5kbGVyPSJvbl90cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90
aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE1OjU4OjAxIEdNVCIvPg0KICAgIC0JCSAgICA8L3dpZGdl
dD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQkJPC93aWRnZXQ+DQogICAgLQkJPHBhY2tpbmc+
DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
CQkgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3Bh
Y2tpbmc+DQogICAgLQkgICAgICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4N
CiAgICAtCQk8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2lu
ZG93MyI+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lf
TkVWRVI8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9s
aWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkg
bmFtZT0ic2hhZG93X3R5cGUiPkdUS19TSEFET1dfSU48L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHBy
b3BlcnR5IG5hbWU9IndpbmRvd19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9QX0xFRlQ8L3Byb3Bl
cnR5Pg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0i
R3RrVGV4dFZpZXciIGlkPSJ0ZXh0dmlldzMiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
Y2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
ZWRpdGFibGUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
b3ZlcndyaXRlIj5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9
ImFjY2VwdHNfdGFiIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0ianVzdGlmaWNhdGlvbiI+R1RLX0pVU1RJRllfTEVGVDwvcHJvcGVydHk+DQogICAgLQkJICAg
ICAgPHByb3BlcnR5IG5hbWU9IndyYXBfbW9kZSI+R1RLX1dSQVBfV09SRDwvcHJvcGVydHk+DQog
ICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImN1cnNvcl92aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2Fib3ZlX2xpbmVzIj4wPC9w
cm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2JlbG93X2xpbmVz
Ij4wPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2luc2lk
ZV93cmFwIj4wPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9t
YXJnaW4iPjA8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9t
YXJnaW4iPjA8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmRlbnQi
PjA8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB0cmFuc2xh
dGFibGU9InllcyI+U29ycnksIG5vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbiB5ZXQu
PC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgPC93aWRnZXQ+DQogICAgLQkJICA8L2NoaWxkPg0KICAg
IC0JCTwvd2lkZ2V0Pg0KICAgIC0JCTxwYWNraW5nPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9
InNocmluayI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0icmVzaXpl
Ij5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8L2NoaWxk
Pg0KICAgIC0JICAgIDwvd2lkZ2V0Pg0KICAgIC0JICAgIDxwYWNraW5nPg0KICAgIC0JICAgICAg
PHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkgICAgICA8cHJv
cGVydHkgbmFtZT0icmVzaXplIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICA8L3BhY2tpbmc+
DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQk8L3dpZGdldD4NCiAgICAtCTxwYWNraW5nPg0KICAg
IC0JICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+DQogICAgLQkgIDxwcm9w
ZXJ0eSBuYW1lPSJleHBhbmQiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JICA8cHJvcGVydHkgbmFt
ZT0iZmlsbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQk8L3BhY2tpbmc+DQogICAgLSAgICAgIDwv
Y2hpbGQ+DQogICAgLSAgICA8L3dpZGdldD4NCiAgICAtICA8L2NoaWxkPg0KICAgIC08L3dpZGdl
dD4NCiAgICAtDQogICAgLTwvZ2xhZGUtaW50ZXJmYWNlPg0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcvaW1hZ2VzLmMgYi9zdXBwb3J0L2tjb25maWcvaW1hZ2VzLmMNCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBkNGY4NGJkLi4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0x
LDMyNiArMCwwIEBADQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBa
aXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAtICogUmVsZWFzZWQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAgLSAqLw0KICAgIC0NCiAgICAtc3RhdGlj
IGNvbnN0IGNoYXIgKnhwbV9sb2FkW10gPSB7DQogICAgLSIyMiAyMiA1IDEiLA0KICAgIC0iLiBj
IE5vbmUiLA0KICAgIC0iIyBjICMwMDAwMDAiLA0KICAgIC0iYyBjICM4MzgxMDAiLA0KICAgIC0i
YSBjICNmZmZmMDAiLA0KICAgIC0iYiBjICNmZmZmZmYiLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uIyMjIy4uLi4jLiIsDQogICAgLSIu
Li4uLi4uLi4uLiMuLi4uIyMuIyMuIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLiMjIy4iLA0K
ICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4jIyMjLiIsDQogICAgLSIuIyMjIy4uLi4uLi4uLi4uIyMj
IyMuIiwNCiAgICAtIiNhYmFiIyMjIyMjIyMjIy4uLi4uLi4iLA0KICAgIC0iI2JhYmFiYWJhYmFi
YWIjLi4uLi4uLiIsDQogICAgLSIjYWJhYmFiYWJhYmFiYSMuLi4uLi4uIiwNCiAgICAtIiNiYWJh
YmFiYWJhYmFiIy4uLi4uLi4iLA0KICAgIC0iI2FiYWJhYiMjIyMjIyMjIyMjIyMjIyIsDQogICAg
LSIjYmFiYWIjI2NjY2NjY2NjY2NjYyMjIiwNCiAgICAtIiNhYmFiIyNjY2NjY2NjY2NjY2MjIy4i
LA0KICAgIC0iI2JhYiMjY2NjY2NjY2NjY2NjIyMuLiIsDQogICAgLSIjYWIjI2NjY2NjY2NjY2Nj
YyMjLi4uIiwNCiAgICAtIiNiIyNjY2NjY2NjY2NjY2MjIy4uLi4iLA0KICAgIC0iIyMjY2NjY2Nj
Y2NjY2NjIyMuLi4uLiIsDQogICAgLSIjI2NjY2NjY2NjY2NjYyMjLi4uLi4uIiwNCiAgICAtIiMj
IyMjIyMjIyMjIyMjIy4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0K
ICAgIC0NCiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKnhwbV9zYXZlW10gPSB7DQogICAgLSIyMiAy
MiA1IDEiLA0KICAgIC0iLiBjIE5vbmUiLA0KICAgIC0iIyBjICMwMDAwMDAiLA0KICAgIC0iYSBj
ICM4MzgxMDAiLA0KICAgIC0iYiBjICNjNWMyYzUiLA0KICAgIC0iYyBjICNjZGI2ZDUiLA0KICAg
IC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuIyMjIyMjIyMjIyMjIyMjIyMjIyMu
IiwNCiAgICAtIi4jYWEjYmJiYmJiYmJiYmJiI2JiIy4iLA0KICAgIC0iLiNhYSNiYmJiYmJiYmJi
YmIjYmIjLiIsDQogICAgLSIuI2FhI2JiYmJiYmJiYmNiYiMjIyMuIiwNCiAgICAtIi4jYWEjYmJi
Y2NiYmJiYmJiI2FhIy4iLA0KICAgIC0iLiNhYSNiYmJjY2JiYmJiYmIjYWEjLiIsDQogICAgLSIu
I2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwNCiAgICAtIi4jYWEjYmJiYmJiYmJiYmJiI2FhIy4iLA0K
ICAgIC0iLiNhYSNiYmJiYmJiYmJiYmIjYWEjLiIsDQogICAgLSIuI2FhI2JiYmJiYmJiYmJiYiNh
YSMuIiwNCiAgICAtIi4jYWFhIyMjIyMjIyMjIyMjYWFhIy4iLA0KICAgIC0iLiNhYWFhYWFhYWFh
YWFhYWFhYWEjLiIsDQogICAgLSIuI2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwNCiAgICAtIi4jYWFh
IyMjIyMjIyMjIyMjI2FhIy4iLA0KICAgIC0iLiNhYWEjIyMjIyMjIyNiYmIjYWEjLiIsDQogICAg
LSIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwNCiAgICAtIi4jYWFhIyMjIyMjIyMjYmJiI2FhIy4i
LA0KICAgIC0iLiNhYWEjIyMjIyMjIyNiYmIjYWEjLiIsDQogICAgLSIuI2FhYSMjIyMjIyMjI2Ji
YiNhYSMuIiwNCiAgICAtIi4uIyMjIyMjIyMjIyMjIyMjIyMjLi4iLA0KICAgIC0iLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiJ9Ow0KICAgIC0NCiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKnhwbV9iYWNr
W10gPSB7DQogICAgLSIyMiAyMiAzIDEiLA0KICAgIC0iLiBjIE5vbmUiLA0KICAgIC0iIyBjICMw
MDAwODMiLA0KICAgIC0iYSBjICM4MzgxODMiLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uIyMjIyMjYS4uLi4iLA0KICAgIC0i
Li4jLi4uLi4uIyMjIyMjIyMjIy4uLiIsDQogICAgLSIuLiMjLi4uIyMjIy4uLi4uLiMjYS4uIiwN
CiAgICAtIi4uIyMjLiMjIy4uLi4uLi4uLiMjLi4iLA0KICAgIC0iLi4jIyMjIyMuLi4uLi4uLi4u
IyMuLiIsDQogICAgLSIuLiMjIyMjLi4uLi4uLi4uLi4jIy4uIiwNCiAgICAtIi4uIyMjIyMjLi4u
Li4uLi4uLiMjLi4iLA0KICAgIC0iLi4jIyMjIyMjLi4uLi4uLi4uIyMuLiIsDQogICAgLSIuLiMj
IyMjIyMjLi4uLi4uLiMjYS4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLmEjIyMuLi4iLA0KICAg
IC0iLi4uLi4uLi4uLi4uLi4uIyMjLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAgIC0N
CiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXSA9IHsNCiAgICAtIjIyIDIy
IDIgMSIsDQogICAgLSIuIGMgTm9uZSIsDQogICAgLSIjIGMgIzAwMDAwMCIsDQogICAgLSIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAg
IC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uLi4uLi4uLi4u
IiwNCiAgICAtIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLi4u
Li4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMj
IyMjIyMjLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIu
Li4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0K
ICAgIC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uLi4uLi4u
Li4uIiwNCiAgICAtIi4uLi4uLiMjIyMjIyMjLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4u
Li4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4u
LiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAg
LSIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMjIyMjIyMjLi4uLi4uLi4i
LA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIn07DQogICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgY2hhciAqeHBtX3NpbmdsZV92aWV3
W10gPSB7DQogICAgLSIyMiAyMiAyIDEiLA0KICAgIC0iLiBjIE5vbmUiLA0KICAgIC0iIyBjICMw
MDAwMDAiLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4u
Li4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4u
Li4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAg
ICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4jLi4u
Li4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4u
Li4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgIC0i
Li4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwN
CiAgICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4u
Li4uLiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4j
Li4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIuLi4u
Li4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAg
IC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAgIC0NCiAgICAtc3RhdGljIGNvbnN0IGNo
YXIgKnhwbV9zcGxpdF92aWV3W10gPSB7DQogICAgLSIyMiAyMiAyIDEiLA0KICAgIC0iLiBjIE5v
bmUiLA0KICAgIC0iIyBjICMwMDAwMDAiLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIs
DQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4jLi4u
Li4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgIC0iLi4u
Li4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAg
ICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMuLi4uLi4u
LiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4j
Li4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgIC0i
Li4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwN
CiAgICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMuLi4u
Li4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAgIC0NCiAg
ICAtc3RhdGljIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXSA9IHsNCiAgICAtIjEyIDEyIDIg
MSIsDQogICAgLSIgIGMgd2hpdGUiLA0KICAgIC0iLiBjIGJsYWNrIiwNCiAgICAtIiAgICAgICAg
ICAgICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0KICAgIC0iIC4gICAgICAgIC4gIiwNCiAgICAt
IiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4gICAgICAgIC4g
IiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4g
ICAgICAgIC4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0K
ICAgIC0iICAgICAgICAgICAgIn07DQogICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgY2hhciAqeHBt
X3N5bWJvbF9tb2RbXSA9IHsNCiAgICAtIjEyIDEyIDIgMSIsDQogICAgLSIgIGMgd2hpdGUiLA0K
ICAgIC0iLiBjIGJsYWNrIiwNCiAgICAtIiAgICAgICAgICAgICIsDQogICAgLSIgLi4uLi4uLi4u
LiAiLA0KICAgIC0iIC4gICAgICAgIC4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIg
LiAgIC4uICAgLiAiLA0KICAgIC0iIC4gIC4uLi4gIC4gIiwNCiAgICAtIiAuICAuLi4uICAuICIs
DQogICAgLSIgLiAgIC4uICAgLiAiLA0KICAgIC0iIC4gICAgICAgIC4gIiwNCiAgICAtIiAuICAg
ICAgICAuICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0KICAgIC0iICAgICAgICAgICAgIn07DQog
ICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgY2hhciAqeHBtX3N5bWJvbF95ZXNbXSA9IHsNCiAgICAt
IjEyIDEyIDIgMSIsDQogICAgLSIgIGMgd2hpdGUiLA0KICAgIC0iLiBjIGJsYWNrIiwNCiAgICAt
IiAgICAgICAgICAgICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0KICAgIC0iIC4gICAgICAgIC4g
IiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgIC4gLiAiLA0KICAgIC0iIC4g
ICAgIC4uIC4gIiwNCiAgICAtIiAuIC4gIC4uICAuICIsDQogICAgLSIgLiAuLi4uICAgLiAiLA0K
ICAgIC0iIC4gIC4uICAgIC4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLi4uLi4u
Li4uLiAiLA0KICAgIC0iICAgICAgICAgICAgIn07DQogICAgLQ0KICAgIC1zdGF0aWMgY29uc3Qg
Y2hhciAqeHBtX2Nob2ljZV9ub1tdID0gew0KICAgIC0iMTIgMTIgMiAxIiwNCiAgICAtIiAgYyB3
aGl0ZSIsDQogICAgLSIuIGMgYmxhY2siLA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAtIiAg
ICAuLi4uICAgICIsDQogICAgLSIgIC4uICAgIC4uICAiLA0KICAgIC0iICAuICAgICAgLiAgIiwN
CiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4gICAg
ICAgIC4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgIC4gICAgICAuICAiLA0KICAg
IC0iICAuLiAgICAuLiAgIiwNCiAgICAtIiAgICAuLi4uICAgICIsDQogICAgLSIgICAgICAgICAg
ICAifTsNCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCBjaGFyICp4cG1fY2hvaWNlX3llc1tdID0g
ew0KICAgIC0iMTIgMTIgMiAxIiwNCiAgICAtIiAgYyB3aGl0ZSIsDQogICAgLSIuIGMgYmxhY2si
LA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAtIiAgICAuLi4uICAgICIsDQogICAgLSIgIC4u
ICAgIC4uICAiLA0KICAgIC0iICAuICAgICAgLiAgIiwNCiAgICAtIiAuICAgLi4gICAuICIsDQog
ICAgLSIgLiAgLi4uLiAgLiAiLA0KICAgIC0iIC4gIC4uLi4gIC4gIiwNCiAgICAtIiAuICAgLi4g
ICAuICIsDQogICAgLSIgIC4gICAgICAuICAiLA0KICAgIC0iICAuLiAgICAuLiAgIiwNCiAgICAt
IiAgICAuLi4uICAgICIsDQogICAgLSIgICAgICAgICAgICAifTsNCiAgICAtDQogICAgLXN0YXRp
YyBjb25zdCBjaGFyICp4cG1fbWVudVtdID0gew0KICAgIC0iMTIgMTIgMiAxIiwNCiAgICAtIiAg
YyB3aGl0ZSIsDQogICAgLSIuIGMgYmxhY2siLA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAt
IiAuLi4uLi4uLi4uICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4gLi4gICAgIC4g
IiwNCiAgICAtIiAuIC4uLi4gICAuICIsDQogICAgLSIgLiAuLi4uLi4gLiAiLA0KICAgIC0iIC4g
Li4uLi4uIC4gIiwNCiAgICAtIiAuIC4uLi4gICAuICIsDQogICAgLSIgLiAuLiAgICAgLiAiLA0K
ICAgIC0iIC4gICAgICAgIC4gIiwNCiAgICAtIiAuLi4uLi4uLi4uICIsDQogICAgLSIgICAgICAg
ICAgICAifTsNCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXSA9
IHsNCiAgICAtIjEyIDEyIDIgMSIsDQogICAgLSIgIGMgd2hpdGUiLA0KICAgIC0iLiBjIGJsYWNr
IiwNCiAgICAtIiAgICAgICAgICAgICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0KICAgIC0iIC4u
Li4uLi4uLi4gIiwNCiAgICAtIiAuLiAgLi4uLi4uICIsDQogICAgLSIgLi4gICAgLi4uLiAiLA0K
ICAgIC0iIC4uICAgICAgLi4gIiwNCiAgICAtIiAuLiAgICAgIC4uICIsDQogICAgLSIgLi4gICAg
Li4uLiAiLA0KICAgIC0iIC4uICAuLi4uLi4gIiwNCiAgICAtIiAuLi4uLi4uLi4uICIsDQogICAg
LSIgLi4uLi4uLi4uLiAiLA0KICAgIC0iICAgICAgICAgICAgIn07DQogICAgLQ0KICAgIC1zdGF0
aWMgY29uc3QgY2hhciAqeHBtX21lbnViYWNrW10gPSB7DQogICAgLSIxMiAxMiAyIDEiLA0KICAg
IC0iICBjIHdoaXRlIiwNCiAgICAtIi4gYyBibGFjayIsDQogICAgLSIgICAgICAgICAgICAiLA0K
ICAgIC0iIC4uLi4uLi4uLi4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAg
Li4gLiAiLA0KICAgIC0iIC4gICAuLi4uIC4gIiwNCiAgICAtIiAuIC4uLi4uLiAuICIsDQogICAg
LSIgLiAuLi4uLi4gLiAiLA0KICAgIC0iIC4gICAuLi4uIC4gIiwNCiAgICAtIiAuICAgICAuLiAu
ICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4uLi4uLi4uLi4gIiwNCiAgICAtIiAg
ICAgICAgICAgICJ9Ow0KICAgIC0NCiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKnhwbV92b2lkW10g
PSB7DQogICAgLSIxMiAxMiAyIDEiLA0KICAgIC0iICBjIHdoaXRlIiwNCiAgICAtIi4gYyBibGFj
ayIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAtIiAg
ICAgICAgICAgICIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iICAgICAgICAgICAgIiwN
CiAgICAtIiAgICAgICAgICAgICIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iICAgICAg
ICAgICAgIiwNCiAgICAtIiAgICAgICAgICAgICIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAg
IC0iICAgICAgICAgICAgIiwNCiAgICAtIiAgICAgICAgICAgICJ9Ow0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcva3hnZXR0ZXh0LmMgYi9zdXBwb3J0L2tjb25maWcva3hnZXR0ZXh0
LmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAyODU4NzM4Li4wMDAw
MDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2t4Z2V0dGV4dC5jDQogICAgKysrIC9kZXYv
bnVsbA0KICAgIEBAIC0xLDIzNSArMCwwIEBADQogICAgLS8qDQogICAgLSAqIEFybmFsZG8gQ2Fy
dmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPiwgMjAwNQ0KICAgIC0gKg0KICAg
IC0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMA0KICAgIC0g
Ki8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICAtI2luY2x1ZGUgPHN0cmlu
Zy5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5oIg0KICAgIC0NCiAgICAtc3RhdGljIGNo
YXIgKmVzY2FwZShjb25zdCBjaGFyKiB0ZXh0LCBjaGFyICpiZiwgaW50IGxlbikNCiAgICAtew0K
ICAgIC0JY2hhciAqYmZwID0gYmY7DQogICAgLQlpbnQgbXVsdGlsaW5lID0gc3RyY2hyKHRleHQs
ICdcbicpICE9IE5VTEw7DQogICAgLQlpbnQgZW9sID0gMDsNCiAgICAtCWludCB0ZXh0bGVuID0g
c3RybGVuKHRleHQpOw0KICAgIC0NCiAgICAtCWlmICgodGV4dGxlbiA+IDApICYmICh0ZXh0W3Rl
eHRsZW4tMV0gPT0gJ1xuJykpDQogICAgLQkJZW9sID0gMTsNCiAgICAtDQogICAgLQkqYmZwKysg
PSAnIic7DQogICAgLQktLWxlbjsNCiAgICAtDQogICAgLQlpZiAobXVsdGlsaW5lKSB7DQogICAg
LQkJKmJmcCsrID0gJyInOw0KICAgIC0JCSpiZnArKyA9ICdcbic7DQogICAgLQkJKmJmcCsrID0g
JyInOw0KICAgIC0JCWxlbiAtPSAzOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXdoaWxlICgqdGV4
dCAhPSAnXDAnICYmIGxlbiA+IDEpIHsNCiAgICAtCQlpZiAoKnRleHQgPT0gJyInKQ0KICAgIC0J
CQkqYmZwKysgPSAnXFwnOw0KICAgIC0JCWVsc2UgaWYgKCp0ZXh0ID09ICdcbicpIHsNCiAgICAt
CQkJKmJmcCsrID0gJ1xcJzsNCiAgICAtCQkJKmJmcCsrID0gJ24nOw0KICAgIC0JCQkqYmZwKysg
PSAnIic7DQogICAgLQkJCSpiZnArKyA9ICdcbic7DQogICAgLQkJCSpiZnArKyA9ICciJzsNCiAg
ICAtCQkJbGVuIC09IDU7DQogICAgLQkJCSsrdGV4dDsNCiAgICAtCQkJZ290byBuZXh0Ow0KICAg
IC0JCX0NCiAgICAtCQllbHNlIGlmICgqdGV4dCA9PSAnXFwnKSB7DQogICAgLQkJCSpiZnArKyA9
ICdcXCc7DQogICAgLQkJCWxlbi0tOw0KICAgIC0JCX0NCiAgICAtCQkqYmZwKysgPSAqdGV4dCsr
Ow0KICAgIC1uZXh0Og0KICAgIC0JCS0tbGVuOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmICht
dWx0aWxpbmUgJiYgZW9sKQ0KICAgIC0JCWJmcCAtPSAzOw0KICAgIC0NCiAgICAtCSpiZnArKyA9
ICciJzsNCiAgICAtCSpiZnAgPSAnXDAnOw0KICAgIC0NCiAgICAtCXJldHVybiBiZjsNCiAgICAt
fQ0KICAgIC0NCiAgICAtc3RydWN0IGZpbGVfbGluZSB7DQogICAgLQlzdHJ1Y3QgZmlsZV9saW5l
ICpuZXh0Ow0KICAgIC0JY29uc3QgY2hhciAqZmlsZTsNCiAgICAtCWludCBsaW5lbm87DQogICAg
LX07DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IGZpbGVfbGluZSAqZmlsZV9saW5lX19uZXco
Y29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmVubykNCiAgICAtew0KICAgIC0Jc3RydWN0IGZpbGVf
bGluZSAqc2VsZiA9IG1hbGxvYyhzaXplb2YoKnNlbGYpKTsNCiAgICAtDQogICAgLQlpZiAoc2Vs
ZiA9PSBOVUxMKQ0KICAgIC0JCWdvdG8gb3V0Ow0KICAgIC0NCiAgICAtCXNlbGYtPmZpbGUgICA9
IGZpbGU7DQogICAgLQlzZWxmLT5saW5lbm8gPSBsaW5lbm87DQogICAgLQlzZWxmLT5uZXh0ICAg
PSBOVUxMOw0KICAgIC1vdXQ6DQogICAgLQlyZXR1cm4gc2VsZjsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RydWN0IG1lc3NhZ2Ugew0KICAgIC0JY29uc3QgY2hhcgkgKm1zZzsNCiAgICAtCWNvbnN0
IGNoYXIJICpvcHRpb247DQogICAgLQlzdHJ1Y3QgbWVzc2FnZQkgKm5leHQ7DQogICAgLQlzdHJ1
Y3QgZmlsZV9saW5lICpmaWxlczsNCiAgICAtfTsNCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3Qg
bWVzc2FnZSAqbWVzc2FnZV9fbGlzdDsNCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3QgbWVzc2Fn
ZSAqbWVzc2FnZV9fbmV3KGNvbnN0IGNoYXIgKm1zZywgY2hhciAqb3B0aW9uLA0KICAgIC0JCQkJ
ICAgIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lbm8pDQogICAgLXsNCiAgICAtCXN0cnVjdCBt
ZXNzYWdlICpzZWxmID0gbWFsbG9jKHNpemVvZigqc2VsZikpOw0KICAgIC0NCiAgICAtCWlmIChz
ZWxmID09IE5VTEwpDQogICAgLQkJZ290byBvdXQ7DQogICAgLQ0KICAgIC0Jc2VsZi0+ZmlsZXMg
PSBmaWxlX2xpbmVfX25ldyhmaWxlLCBsaW5lbm8pOw0KICAgIC0JaWYgKHNlbGYtPmZpbGVzID09
IE5VTEwpDQogICAgLQkJZ290byBvdXRfZmFpbDsNCiAgICAtDQogICAgLQlzZWxmLT5tc2cgPSBz
dHJkdXAobXNnKTsNCiAgICAtCWlmIChzZWxmLT5tc2cgPT0gTlVMTCkNCiAgICAtCQlnb3RvIG91
dF9mYWlsX21zZzsNCiAgICAtDQogICAgLQlzZWxmLT5vcHRpb24gPSBvcHRpb247DQogICAgLQlz
ZWxmLT5uZXh0ID0gTlVMTDsNCiAgICAtb3V0Og0KICAgIC0JcmV0dXJuIHNlbGY7DQogICAgLW91
dF9mYWlsX21zZzoNCiAgICAtCWZyZWUoc2VsZi0+ZmlsZXMpOw0KICAgIC1vdXRfZmFpbDoNCiAg
ICAtCWZyZWUoc2VsZik7DQogICAgLQlzZWxmID0gTlVMTDsNCiAgICAtCWdvdG8gb3V0Ow0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IG1lc3NhZ2UgKm1lc2FnZV9fZmluZChjb25z
dCBjaGFyICptc2cpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZXNzYWdlICptID0gbWVzc2FnZV9f
bGlzdDsNCiAgICAtDQogICAgLQl3aGlsZSAobSAhPSBOVUxMKSB7DQogICAgLQkJaWYgKHN0cmNt
cChtLT5tc2csIG1zZykgPT0gMCkNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJbSA9IG0tPm5leHQ7
DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIG07DQogICAgLX0NCiAgICAtDQogICAgLXN0
YXRpYyBpbnQgbWVzc2FnZV9fYWRkX2ZpbGVfbGluZShzdHJ1Y3QgbWVzc2FnZSAqc2VsZiwgY29u
c3QgY2hhciAqZmlsZSwNCiAgICAtCQkJCSAgaW50IGxpbmVubykNCiAgICAtew0KICAgIC0JaW50
IHJjID0gLTE7DQogICAgLQlzdHJ1Y3QgZmlsZV9saW5lICpmbCA9IGZpbGVfbGluZV9fbmV3KGZp
bGUsIGxpbmVubyk7DQogICAgLQ0KICAgIC0JaWYgKGZsID09IE5VTEwpDQogICAgLQkJZ290byBv
dXQ7DQogICAgLQ0KICAgIC0JZmwtPm5leHQgICAgPSBzZWxmLT5maWxlczsNCiAgICAtCXNlbGYt
PmZpbGVzID0gZmw7DQogICAgLQlyYyA9IDA7DQogICAgLW91dDoNCiAgICAtCXJldHVybiByYzsN
CiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGludCBtZXNzYWdlX19hZGQoY29uc3QgY2hhciAq
bXNnLCBjaGFyICpvcHRpb24sIGNvbnN0IGNoYXIgKmZpbGUsDQogICAgLQkJCWludCBsaW5lbm8p
DQogICAgLXsNCiAgICAtCWludCByYyA9IDA7DQogICAgLQljaGFyIGJmWzE2Mzg0XTsNCiAgICAt
CWNoYXIgKmVzY2FwZWQgPSBlc2NhcGUobXNnLCBiZiwgc2l6ZW9mKGJmKSk7DQogICAgLQlzdHJ1
Y3QgbWVzc2FnZSAqbSA9IG1lc2FnZV9fZmluZChlc2NhcGVkKTsNCiAgICAtDQogICAgLQlpZiAo
bSAhPSBOVUxMKQ0KICAgIC0JCXJjID0gbWVzc2FnZV9fYWRkX2ZpbGVfbGluZShtLCBmaWxlLCBs
aW5lbm8pOw0KICAgIC0JZWxzZSB7DQogICAgLQkJbSA9IG1lc3NhZ2VfX25ldyhlc2NhcGVkLCBv
cHRpb24sIGZpbGUsIGxpbmVubyk7DQogICAgLQ0KICAgIC0JCWlmIChtICE9IE5VTEwpIHsNCiAg
ICAtCQkJbS0+bmV4dAkgICAgICA9IG1lc3NhZ2VfX2xpc3Q7DQogICAgLQkJCW1lc3NhZ2VfX2xp
c3QgPSBtOw0KICAgIC0JCX0gZWxzZQ0KICAgIC0JCQlyYyA9IC0xOw0KICAgIC0JfQ0KICAgIC0J
cmV0dXJuIHJjOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBtZW51X2J1aWxkX21l
c3NhZ2VfbGlzdChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IG1lbnUg
KmNoaWxkOw0KICAgIC0NCiAgICAtCW1lc3NhZ2VfX2FkZChtZW51X2dldF9wcm9tcHQobWVudSks
IE5VTEwsDQogICAgLQkJICAgICBtZW51LT5maWxlID09IE5VTEwgPyAiUm9vdCBNZW51IiA6IG1l
bnUtPmZpbGUtPm5hbWUsDQogICAgLQkJICAgICBtZW51LT5saW5lbm8pOw0KICAgIC0NCiAgICAt
CWlmIChtZW51LT5zeW0gIT0gTlVMTCAmJiBtZW51X2hhc19oZWxwKG1lbnUpKQ0KICAgIC0JCW1l
c3NhZ2VfX2FkZChtZW51X2dldF9oZWxwKG1lbnUpLCBtZW51LT5zeW0tPm5hbWUsDQogICAgLQkJ
CSAgICAgbWVudS0+ZmlsZSA9PSBOVUxMID8gIlJvb3QgTWVudSIgOiBtZW51LT5maWxlLT5uYW1l
LA0KICAgIC0JCQkgICAgIG1lbnUtPmxpbmVubyk7DQogICAgLQ0KICAgIC0JZm9yIChjaGlsZCA9
IG1lbnUtPmxpc3Q7IGNoaWxkICE9IE5VTEw7IGNoaWxkID0gY2hpbGQtPm5leHQpDQogICAgLQkJ
aWYgKGNoaWxkLT5wcm9tcHQgIT0gTlVMTCkNCiAgICAtCQkJbWVudV9idWlsZF9tZXNzYWdlX2xp
c3QoY2hpbGQpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBtZXNzYWdlX19wcmlu
dF9maWxlX2xpbmVubyhzdHJ1Y3QgbWVzc2FnZSAqc2VsZikNCiAgICAtew0KICAgIC0Jc3RydWN0
IGZpbGVfbGluZSAqZmwgPSBzZWxmLT5maWxlczsNCiAgICAtDQogICAgLQlwdXRjaGFyKCdcbicp
Ow0KICAgIC0JaWYgKHNlbGYtPm9wdGlvbiAhPSBOVUxMKQ0KICAgIC0JCXByaW50ZigiIyAlczow
MDAwMFxuIiwgc2VsZi0+b3B0aW9uKTsNCiAgICAtDQogICAgLQlwcmludGYoIiM6ICVzOiVkIiwg
ZmwtPmZpbGUsIGZsLT5saW5lbm8pOw0KICAgIC0JZmwgPSBmbC0+bmV4dDsNCiAgICAtDQogICAg
LQl3aGlsZSAoZmwgIT0gTlVMTCkgew0KICAgIC0JCXByaW50ZigiLCAlczolZCIsIGZsLT5maWxl
LCBmbC0+bGluZW5vKTsNCiAgICAtCQlmbCA9IGZsLT5uZXh0Ow0KICAgIC0JfQ0KICAgIC0NCiAg
ICAtCXB1dGNoYXIoJ1xuJyk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIG1lc3Nh
Z2VfX3ByaW50X2dldHRleHRfbXNnaWRfbXNnc3RyKHN0cnVjdCBtZXNzYWdlICpzZWxmKQ0KICAg
IC17DQogICAgLQltZXNzYWdlX19wcmludF9maWxlX2xpbmVubyhzZWxmKTsNCiAgICAtDQogICAg
LQlwcmludGYoIm1zZ2lkICVzXG4iDQogICAgLQkgICAgICAgIm1zZ3N0ciBcIlwiXG4iLCBzZWxm
LT5tc2cpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBtZW51X194Z2V0dGV4dCh2
b2lkKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgbWVzc2FnZSAqbSA9IG1lc3NhZ2VfX2xpc3Q7DQog
ICAgLQ0KICAgIC0Jd2hpbGUgKG0gIT0gTlVMTCkgew0KICAgIC0JCS8qIHNraXAgZW1wdHkgbGlu
ZXMgKCIiKSAqLw0KICAgIC0JCWlmIChzdHJsZW4obS0+bXNnKSA+IHNpemVvZigiXCJcIiIpKQ0K
ICAgIC0JCQltZXNzYWdlX19wcmludF9nZXR0ZXh0X21zZ2lkX21zZ3N0cihtKTsNCiAgICAtCQlt
ID0gbS0+bmV4dDsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtaW50IG1haW4oaW50IGFj
LCBjaGFyICoqYXYpDQogICAgLXsNCiAgICAtCWNvbmZfcGFyc2UoYXZbMV0pOw0KICAgIC0NCiAg
ICAtCW1lbnVfYnVpbGRfbWVzc2FnZV9saXN0KG1lbnVfZ2V0X3Jvb3RfbWVudShOVUxMKSk7DQog
ICAgLQltZW51X194Z2V0dGV4dCgpOw0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICBkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2xpc3QuaCBiL3N1cHBvcnQva2NvbmZpZy9saXN0LmgN
CiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA2ODVkODBlLi4wMDAwMDAw
DQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2xpc3QuaA0KICAgICsrKyAvZGV2L251bGwNCiAg
ICBAQCAtMSwxMzEgKzAsMCBAQA0KICAgIC0jaWZuZGVmIExJU1RfSA0KICAgIC0jZGVmaW5lIExJ
U1RfSA0KICAgIC0NCiAgICAtLyoNCiAgICAtICogQ29waWVkIGZyb20gaW5jbHVkZS9saW51eC8u
Li4NCiAgICAtICovDQogICAgLQ0KICAgIC0jdW5kZWYgb2Zmc2V0b2YNCiAgICAtI2RlZmluZSBv
ZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikNCiAg
ICAtDQogICAgLS8qKg0KICAgIC0gKiBjb250YWluZXJfb2YgLSBjYXN0IGEgbWVtYmVyIG9mIGEg
c3RydWN0dXJlIG91dCB0byB0aGUgY29udGFpbmluZyBzdHJ1Y3R1cmUNCiAgICAtICogQHB0cjog
ICAgICAgIHRoZSBwb2ludGVyIHRvIHRoZSBtZW1iZXIuDQogICAgLSAqIEB0eXBlOiAgICAgICB0
aGUgdHlwZSBvZiB0aGUgY29udGFpbmVyIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLg0KICAg
IC0gKiBAbWVtYmVyOiAgICAgdGhlIG5hbWUgb2YgdGhlIG1lbWJlciB3aXRoaW4gdGhlIHN0cnVj
dC4NCiAgICAtICoNCiAgICAtICovDQogICAgLSNkZWZpbmUgY29udGFpbmVyX29mKHB0ciwgdHlw
ZSwgbWVtYmVyKSAoeyAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLQljb25zdCB0eXBlb2Yo
ICgodHlwZSAqKTApLT5tZW1iZXIgKSAqX19tcHRyID0gKHB0cik7ICAgIFwNCiAgICAtCSh0eXBl
ICopKCAoY2hhciAqKV9fbXB0ciAtIG9mZnNldG9mKHR5cGUsbWVtYmVyKSApO30pDQogICAgLQ0K
ICAgIC0NCiAgICAtc3RydWN0IGxpc3RfaGVhZCB7DQogICAgLQlzdHJ1Y3QgbGlzdF9oZWFkICpu
ZXh0LCAqcHJldjsNCiAgICAtfTsNCiAgICAtDQogICAgLQ0KICAgIC0jZGVmaW5lIExJU1RfSEVB
RF9JTklUKG5hbWUpIHsgJihuYW1lKSwgJihuYW1lKSB9DQogICAgLQ0KICAgIC0jZGVmaW5lIExJ
U1RfSEVBRChuYW1lKSBcDQogICAgLQlzdHJ1Y3QgbGlzdF9oZWFkIG5hbWUgPSBMSVNUX0hFQURf
SU5JVChuYW1lKQ0KICAgIC0NCiAgICAtLyoqDQogICAgLSAqIGxpc3RfZW50cnkgLSBnZXQgdGhl
IHN0cnVjdCBmb3IgdGhpcyBlbnRyeQ0KICAgIC0gKiBAcHRyOgl0aGUgJnN0cnVjdCBsaXN0X2hl
YWQgcG9pbnRlci4NCiAgICAtICogQHR5cGU6CXRoZSB0eXBlIG9mIHRoZSBzdHJ1Y3QgdGhpcyBp
cyBlbWJlZGRlZCBpbi4NCiAgICAtICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3Ry
dWN0IHdpdGhpbiB0aGUgc3RydWN0Lg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBsaXN0X2VudHJ5
KHB0ciwgdHlwZSwgbWVtYmVyKSBcDQogICAgLQljb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1i
ZXIpDQogICAgLQ0KICAgIC0vKioNCiAgICAtICogbGlzdF9mb3JfZWFjaF9lbnRyeQktCWl0ZXJh
dGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUNCiAgICAtICogQHBvczoJdGhlIHR5cGUgKiB0byB1
c2UgYXMgYSBsb29wIGN1cnNvci4NCiAgICAtICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxp
c3QuDQogICAgLSAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X3N0cnVjdCB3aXRoaW4g
dGhlIHN0cnVjdC4NCiAgICAtICovDQogICAgLSNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeShw
b3MsIGhlYWQsIG1lbWJlcikJCQkJXA0KICAgIC0JZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFk
KS0+bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcDQogICAgLQkgICAgICZwb3MtPm1lbWJl
ciAhPSAoaGVhZCk7IAlcDQogICAgLQkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIu
bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQ0KICAgIC0NCiAgICAtLyoqDQogICAgLSAqIGxp
c3RfZm9yX2VhY2hfZW50cnlfc2FmZSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUg
c2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQ0KICAgIC0gKiBAcG9zOgl0aGUgdHlw
ZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLg0KICAgIC0gKiBAbjoJCWFub3RoZXIgdHlwZSAq
IHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQ0KICAgIC0gKiBAaGVhZDoJdGhlIGhlYWQgZm9y
IHlvdXIgbGlzdC4NCiAgICAtICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3Rfc3RydWN0
IHdpdGhpbiB0aGUgc3RydWN0Lg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBsaXN0X2Zvcl9lYWNo
X2VudHJ5X3NhZmUocG9zLCBuLCBoZWFkLCBtZW1iZXIpCQkJXA0KICAgIC0JZm9yIChwb3MgPSBs
aXN0X2VudHJ5KChoZWFkKS0+bmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpLAlcDQogICAgLQkJ
biA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlc
DQogICAgLQkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CQkJCQlcDQogICAgLQkgICAgIHBv
cyA9IG4sIG4gPSBsaXN0X2VudHJ5KG4tPm1lbWJlci5uZXh0LCB0eXBlb2YoKm4pLCBtZW1iZXIp
KQ0KICAgIC0NCiAgICAtLyoqDQogICAgLSAqIGxpc3RfZW1wdHkgLSB0ZXN0cyB3aGV0aGVyIGEg
bGlzdCBpcyBlbXB0eQ0KICAgIC0gKiBAaGVhZDogdGhlIGxpc3QgdG8gdGVzdC4NCiAgICAtICov
DQogICAgLXN0YXRpYyBpbmxpbmUgaW50IGxpc3RfZW1wdHkoY29uc3Qgc3RydWN0IGxpc3RfaGVh
ZCAqaGVhZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIGhlYWQtPm5leHQgPT0gaGVhZDsNCiAgICAt
fQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJldHdlZW4gdHdv
IGtub3duIGNvbnNlY3V0aXZlIGVudHJpZXMuDQogICAgLSAqDQogICAgLSAqIFRoaXMgaXMgb25s
eSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdw0KICAgIC0gKiB0
aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSENCiAgICAtICovDQogICAgLXN0YXRpYyBpbmxp
bmUgdm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKl9uZXcsDQogICAgLQkJCSAgICAg
IHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsDQogICAgLQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQg
Km5leHQpDQogICAgLXsNCiAgICAtCW5leHQtPnByZXYgPSBfbmV3Ow0KICAgIC0JX25ldy0+bmV4
dCA9IG5leHQ7DQogICAgLQlfbmV3LT5wcmV2ID0gcHJldjsNCiAgICAtCXByZXYtPm5leHQgPSBf
bmV3Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKioNCiAgICAtICogbGlzdF9hZGRfdGFpbCAtIGFk
ZCBhIG5ldyBlbnRyeQ0KICAgIC0gKiBAbmV3OiBuZXcgZW50cnkgdG8gYmUgYWRkZWQNCiAgICAt
ICogQGhlYWQ6IGxpc3QgaGVhZCB0byBhZGQgaXQgYmVmb3JlDQogICAgLSAqDQogICAgLSAqIElu
c2VydCBhIG5ldyBlbnRyeSBiZWZvcmUgdGhlIHNwZWNpZmllZCBoZWFkLg0KICAgIC0gKiBUaGlz
IGlzIHVzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIHF1ZXVlcy4NCiAgICAtICovDQogICAgLXN0YXRp
YyBpbmxpbmUgdm9pZCBsaXN0X2FkZF90YWlsKHN0cnVjdCBsaXN0X2hlYWQgKl9uZXcsIHN0cnVj
dCBsaXN0X2hlYWQgKmhlYWQpDQogICAgLXsNCiAgICAtCV9fbGlzdF9hZGQoX25ldywgaGVhZC0+
cHJldiwgaGVhZCk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIERlbGV0ZSBhIGxp
c3QgZW50cnkgYnkgbWFraW5nIHRoZSBwcmV2L25leHQgZW50cmllcw0KICAgIC0gKiBwb2ludCB0
byBlYWNoIG90aGVyLg0KICAgIC0gKg0KICAgIC0gKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFs
IGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cNCiAgICAtICogdGhlIHByZXYvbmV4dCBl
bnRyaWVzIGFscmVhZHkhDQogICAgLSAqLw0KICAgIC1zdGF0aWMgaW5saW5lIHZvaWQgX19saXN0
X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQ0KICAg
IC17DQogICAgLQluZXh0LT5wcmV2ID0gcHJldjsNCiAgICAtCXByZXYtPm5leHQgPSBuZXh0Ow0K
ICAgIC19DQogICAgLQ0KICAgIC0jZGVmaW5lIExJU1RfUE9JU09OMSAgKCh2b2lkICopIDB4MDAx
MDAxMDApDQogICAgLSNkZWZpbmUgTElTVF9QT0lTT04yICAoKHZvaWQgKikgMHgwMDIwMDIwMCkN
CiAgICAtLyoqDQogICAgLSAqIGxpc3RfZGVsIC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3QuDQog
ICAgLSAqIEBlbnRyeTogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuDQogICAg
LSAqIE5vdGU6IGxpc3RfZW1wdHkoKSBvbiBlbnRyeSBkb2VzIG5vdCByZXR1cm4gdHJ1ZSBhZnRl
ciB0aGlzLCB0aGUgZW50cnkgaXMNCiAgICAtICogaW4gYW4gdW5kZWZpbmVkIHN0YXRlLg0KICAg
IC0gKi8NCiAgICAtc3RhdGljIGlubGluZSB2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQg
KmVudHJ5KQ0KICAgIC17DQogICAgLQlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4
dCk7DQogICAgLQllbnRyeS0+bmV4dCA9IChzdHJ1Y3QgbGlzdF9oZWFkKilMSVNUX1BPSVNPTjE7
DQogICAgLQllbnRyeS0+cHJldiA9IChzdHJ1Y3QgbGlzdF9oZWFkKilMSVNUX1BPSVNPTjI7DQog
ICAgLX0NCiAgICAtI2VuZGlmDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9sa2Mu
aCBiL3N1cHBvcnQva2NvbmZpZy9sa2MuaA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0K
ICAgIGluZGV4IDA5ZjRlZGYuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcvbGtj
LmgNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTk5ICswLDAgQEANCiAgICAtLyoNCiAg
ICAtICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsu
b3JnPg0KICAgIC0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIu
MC4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaWZuZGVmIExLQ19IDQogICAgLSNkZWZpbmUgTEtD
X0gNCiAgICAtDQogICAgLSNpbmNsdWRlICJleHByLmgiDQogICAgLQ0KICAgIC0jaWZuZGVmIEtC
VUlMRF9OT19OTFMNCiAgICAtIyBpbmNsdWRlIDxsaWJpbnRsLmg+DQogICAgLSNlbHNlDQogICAg
LXN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZ2V0dGV4dChjb25zdCBjaGFyICp0eHQpIHsgcmV0
dXJuIHR4dDsgfQ0KICAgIC1zdGF0aWMgaW5saW5lIHZvaWQgdGV4dGRvbWFpbihjb25zdCBjaGFy
ICpkb21haW5uYW1lKSB7fQ0KICAgIC1zdGF0aWMgaW5saW5lIHZvaWQgYmluZHRleHRkb21haW4o
Y29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZGlyKSB7fQ0KICAgIC1zdGF0aWMgaW5saW5l
IGNoYXIgKmJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0KGNvbnN0IGNoYXIgKmRuLCBjaGFyICpjKSB7
IHJldHVybiBjOyB9DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2lmZGVmIF9fY3BsdXNwbHVz
DQogICAgLWV4dGVybiAiQyIgew0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNkZWZpbmUgUChu
YW1lLHR5cGUsYXJnKQlleHRlcm4gdHlwZSBuYW1lIGFyZw0KICAgIC0jaW5jbHVkZSAibGtjX3By
b3RvLmgiDQogICAgLSN1bmRlZiBQDQogICAgLQ0KICAgIC0jZGVmaW5lIFNSQ1RSRUUgInNyY3Ry
ZWUiDQogICAgLQ0KICAgIC0jaWZuZGVmIFBBQ0tBR0UNCiAgICAtI2RlZmluZSBQQUNLQUdFICJs
aW51eCINCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jZGVmaW5lIExPQ0FMRURJUiAiL3Vzci9z
aGFyZS9sb2NhbGUiDQogICAgLQ0KICAgIC0jZGVmaW5lIF8odGV4dCkgZ2V0dGV4dCh0ZXh0KQ0K
ICAgIC0jZGVmaW5lIE5fKHRleHQpICh0ZXh0KQ0KICAgIC0NCiAgICAtI2lmbmRlZiBDT05GSUdf
DQogICAgLSNkZWZpbmUgQ09ORklHXyAiQ09ORklHXyINCiAgICAtI2VuZGlmDQogICAgLXN0YXRp
YyBpbmxpbmUgY29uc3QgY2hhciAqQ09ORklHX3ByZWZpeCh2b2lkKQ0KICAgIC17DQogICAgLQly
ZXR1cm4gZ2V0ZW52KCAiQ09ORklHXyIgKSA/OiBDT05GSUdfOw0KICAgIC19DQogICAgLSN1bmRl
ZiBDT05GSUdfDQogICAgLSNkZWZpbmUgQ09ORklHXyBDT05GSUdfcHJlZml4KCkNCiAgICAtDQog
ICAgLSNkZWZpbmUgVEZfQ09NTUFORAkweDAwMDENCiAgICAtI2RlZmluZSBURl9QQVJBTQkweDAw
MDINCiAgICAtI2RlZmluZSBURl9PUFRJT04JMHgwMDA0DQogICAgLQ0KICAgIC1lbnVtIGNvbmZf
ZGVmX21vZGUgew0KICAgIC0JZGVmX2RlZmF1bHQsDQogICAgLQlkZWZfeWVzLA0KICAgIC0JZGVm
X21vZCwNCiAgICAtCWRlZl9ubywNCiAgICAtCWRlZl9yYW5kb20NCiAgICAtfTsNCiAgICAtDQog
ICAgLSNkZWZpbmUgVF9PUFRfTU9EVUxFUwkJMQ0KICAgIC0jZGVmaW5lIFRfT1BUX0RFRkNPTkZJ
R19MSVNUCTINCiAgICAtI2RlZmluZSBUX09QVF9FTlYJCTMNCiAgICAtDQogICAgLXN0cnVjdCBr
Y29uZl9pZCB7DQogICAgLQlpbnQgbmFtZTsNCiAgICAtCWludCB0b2tlbjsNCiAgICAtCXVuc2ln
bmVkIGludCBmbGFnczsNCiAgICAtCWVudW0gc3ltYm9sX3R5cGUgc3R5cGU7DQogICAgLX07DQog
ICAgLQ0KICAgIC1leHRlcm4gaW50IHpjb25mZGVidWc7DQogICAgLQ0KICAgIC1pbnQgemNvbmZw
YXJzZSh2b2lkKTsNCiAgICAtdm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KTsNCiAgICAtdm9pZCB6
Y29uZl9zdGFydGhlbHAodm9pZCk7DQogICAgLUZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIg
Km5hbWUpOw0KICAgIC12b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpOw0KICAg
IC12b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpOw0KICAgIC1pbnQgemNvbmZf
bGluZW5vKHZvaWQpOw0KICAgIC1jb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpOw0KICAg
IC0NCiAgICAtLyogY29uZmRhdGEuYyAqLw0KICAgIC1jb25zdCBjaGFyICpjb25mX2dldF9jb25m
aWduYW1lKHZvaWQpOw0KICAgIC1jb25zdCBjaGFyICpjb25mX2dldF9hdXRvY29uZmlnX25hbWUo
dm9pZCk7DQogICAgLWNoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUodm9pZCk7DQogICAg
LXZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50KTsNCiAgICAtdm9pZCBzeW1fYWRk
X2NoYW5nZV9jb3VudChpbnQgY291bnQpOw0KICAgIC1ib29sIGNvbmZfc2V0X2FsbF9uZXdfc3lt
Ym9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSk7DQogICAgLXZvaWQgc2V0X2FsbF9jaG9pY2Vf
dmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pOw0KICAgIC0NCiAgICAtc3RydWN0IGNvbmZfcHJp
bnRlciB7DQogICAgLQl2b2lkICgqcHJpbnRfc3ltYm9sKShGSUxFICosIHN0cnVjdCBzeW1ib2wg
KiwgY29uc3QgY2hhciAqLCB2b2lkICopOw0KICAgIC0Jdm9pZCAoKnByaW50X2NvbW1lbnQpKEZJ
TEUgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOw0KICAgIC19Ow0KICAgIC0NCiAgICAtLyogY29u
ZmRhdGEuYyBhbmQgZXhwci5jICovDQogICAgLXN0YXRpYyBpbmxpbmUgdm9pZCB4ZndyaXRlKGNv
bnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IGNvdW50LCBGSUxFICpvdXQpDQogICAg
LXsNCiAgICAtCWFzc2VydChsZW4gIT0gMCk7DQogICAgLQ0KICAgIC0JaWYgKGZ3cml0ZShzdHIs
IGxlbiwgY291bnQsIG91dCkgIT0gY291bnQpDQogICAgLQkJZnByaW50ZihzdGRlcnIsICJFcnJv
ciBpbiB3cml0aW5nIG9yIGVuZCBvZiBmaWxlLlxuIik7DQogICAgLX0NCiAgICAtDQogICAgLS8q
IG1lbnUuYyAqLw0KICAgIC12b2lkIF9tZW51X2luaXQodm9pZCk7DQogICAgLXZvaWQgbWVudV93
YXJuKHN0cnVjdCBtZW51ICptZW51LCBjb25zdCBjaGFyICpmbXQsIC4uLik7DQogICAgLXN0cnVj
dCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOw0KICAgIC12b2lkIG1lbnVfZW5kX21lbnUodm9p
ZCk7DQogICAgLXZvaWQgbWVudV9hZGRfZW50cnkoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAt
dm9pZCBtZW51X2VuZF9lbnRyeSh2b2lkKTsNCiAgICAtdm9pZCBtZW51X2FkZF9kZXAoc3RydWN0
IGV4cHIgKmRlcCk7DQogICAgLXZvaWQgbWVudV9hZGRfdmlzaWJpbGl0eShzdHJ1Y3QgZXhwciAq
ZGVwKTsNCiAgICAtc3RydWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9wKGVudW0gcHJvcF90eXBl
IHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmV4cHIsIHN0cnVjdCBleHByICpkZXAp
Ow0KICAgIC1zdHJ1Y3QgcHJvcGVydHkgKm1lbnVfYWRkX3Byb21wdChlbnVtIHByb3BfdHlwZSB0
eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHByICpkZXApOw0KICAgIC12b2lkIG1lbnVfYWRk
X2V4cHIoZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmV4cHIsIHN0cnVjdCBleHBy
ICpkZXApOw0KICAgIC12b2lkIG1lbnVfYWRkX3N5bWJvbChlbnVtIHByb3BfdHlwZSB0eXBlLCBz
dHJ1Y3Qgc3ltYm9sICpzeW0sIHN0cnVjdCBleHByICpkZXApOw0KICAgIC12b2lkIG1lbnVfYWRk
X29wdGlvbihpbnQgdG9rZW4sIGNoYXIgKmFyZyk7DQogICAgLXZvaWQgbWVudV9maW5hbGl6ZShz
dHJ1Y3QgbWVudSAqcGFyZW50KTsNCiAgICAtdm9pZCBtZW51X3NldF90eXBlKGludCB0eXBlKTsN
CiAgICAtDQogICAgLS8qIHV0aWwuYyAqLw0KICAgIC1zdHJ1Y3QgZmlsZSAqZmlsZV9sb29rdXAo
Y29uc3QgY2hhciAqbmFtZSk7DQogICAgLWludCBmaWxlX3dyaXRlX2RlcChjb25zdCBjaGFyICpu
YW1lKTsNCiAgICAtdm9pZCAqeG1hbGxvYyhzaXplX3Qgc2l6ZSk7DQogICAgLXZvaWQgKnhjYWxs
b2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7DQogICAgLQ0KICAgIC1zdHJ1Y3QgZ3N0ciB7
DQogICAgLQlzaXplX3QgbGVuOw0KICAgIC0JY2hhciAgKnM7DQogICAgLQkvKg0KICAgIC0JKiB3
aGVuIG1heF93aWR0aCBpcyBub3QgemVybyBsb25nIGxpbmVzIGluIHN0cmluZyBzIChpZiBhbnkp
IGdldA0KICAgIC0JKiB3cmFwcGVkIG5vdCB0byBleGNlZWQgdGhlIG1heF93aWR0aCB2YWx1ZQ0K
ICAgIC0JKi8NCiAgICAtCWludCBtYXhfd2lkdGg7DQogICAgLX07DQogICAgLXN0cnVjdCBnc3Ry
IHN0cl9uZXcodm9pZCk7DQogICAgLXN0cnVjdCBnc3RyIHN0cl9hc3NpZ24oY29uc3QgY2hhciAq
cyk7DQogICAgLXZvaWQgc3RyX2ZyZWUoc3RydWN0IGdzdHIgKmdzKTsNCiAgICAtdm9pZCBzdHJf
YXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqcyk7DQogICAgLXZvaWQgc3RyX3By
aW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCiAgICAtY29uc3Qg
Y2hhciAqc3RyX2dldChzdHJ1Y3QgZ3N0ciAqZ3MpOw0KICAgIC0NCiAgICAtLyogc3ltYm9sLmMg
Ki8NCiAgICAtZXh0ZXJuIHN0cnVjdCBleHByICpzeW1fZW52X2xpc3Q7DQogICAgLQ0KICAgIC12
b2lkIHN5bV9pbml0KHZvaWQpOw0KICAgIC12b2lkIHN5bV9jbGVhcl9hbGxfdmFsaWQodm9pZCk7
DQogICAgLXZvaWQgc3ltX3NldF9hbGxfY2hhbmdlZCh2b2lkKTsNCiAgICAtdm9pZCBzeW1fc2V0
X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAtc3RydWN0IHN5bWJvbCAqc3ltX2No
b2ljZV9kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLWNvbnN0IGNoYXIgKnN5bV9n
ZXRfc3RyaW5nX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAtc3RydWN0IHN5bWJv
bCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAtc3RydWN0IHByb3Bl
cnR5ICpwcm9wX2FsbG9jKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSk7
DQogICAgLXN0cnVjdCBzeW1ib2wgKnByb3BfZ2V0X3N5bWJvbChzdHJ1Y3QgcHJvcGVydHkgKnBy
b3ApOw0KICAgIC1zdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfZW52X3Byb3Aoc3RydWN0IHN5bWJv
bCAqc3ltKTsNCiAgICAtDQogICAgLXN0YXRpYyBpbmxpbmUgdHJpc3RhdGUgc3ltX2dldF90cmlz
dGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXJldHVybiBzeW0t
PmN1cnIudHJpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtc3RhdGljIGlubGluZSBzdHJ1
Y3Qgc3ltYm9sICpzeW1fZ2V0X2Nob2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAg
LXsNCiAgICAtCXJldHVybiAoc3RydWN0IHN5bWJvbCAqKXN5bS0+Y3Vyci52YWw7DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyBpbmxpbmUgYm9vbCBzeW1fc2V0X2Nob2ljZV92YWx1ZShzdHJ1
Y3Qgc3ltYm9sICpjaCwgc3RydWN0IHN5bWJvbCAqY2h2YWwpDQogICAgLXsNCiAgICAtCXJldHVy
biBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKGNodmFsLCB5ZXMpOw0KICAgIC19DQogICAgLQ0KICAg
IC1zdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQog
ICAgLXsNCiAgICAtCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRSA/IHRydWUgOiBm
YWxzZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGlubGluZSBib29sIHN5bV9pc19jaG9p
Y2VfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlyZXR1cm4gc3ltLT5m
bGFncyAmIFNZTUJPTF9DSE9JQ0VWQUwgPyB0cnVlIDogZmFsc2U7DQogICAgLX0NCiAgICAtDQog
ICAgLXN0YXRpYyBpbmxpbmUgYm9vbCBzeW1faXNfb3B0aW9uYWwoc3RydWN0IHN5bWJvbCAqc3lt
KQ0KICAgIC17DQogICAgLQlyZXR1cm4gc3ltLT5mbGFncyAmIFNZTUJPTF9PUFRJT05BTCA/IHRy
dWUgOiBmYWxzZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGlubGluZSBib29sIHN5bV9o
YXNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlyZXR1cm4gc3ltLT5m
bGFncyAmIFNZTUJPTF9ERUZfVVNFUiA/IHRydWUgOiBmYWxzZTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgLX0NCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0j
ZW5kaWYgLyogTEtDX0ggKi8NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2xrY19w
cm90by5oIGIvc3VwcG9ydC9rY29uZmlnL2xrY19wcm90by5oDQogICAgZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggZWNkYjk2NS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQv
a2NvbmZpZy9sa2NfcHJvdG8uaA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw1NyArMCww
IEBADQogICAgLSNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICAtDQogICAgLS8qIGNvbmZkYXRhLmMg
Ki8NCiAgICAtUChjb25mX3BhcnNlLHZvaWQsKGNvbnN0IGNoYXIgKm5hbWUpKTsNCiAgICAtUChj
b25mX3JlYWQsaW50LChjb25zdCBjaGFyICpuYW1lKSk7DQogICAgLVAoY29uZl9yZWFkX3NpbXBs
ZSxpbnQsKGNvbnN0IGNoYXIgKm5hbWUsIGludCkpOw0KICAgIC1QKGNvbmZfd3JpdGVfZGVmY29u
ZmlnLGludCwoY29uc3QgY2hhciAqbmFtZSkpOw0KICAgIC1QKGNvbmZfd3JpdGUsaW50LChjb25z
dCBjaGFyICpuYW1lKSk7DQogICAgLVAoY29uZl93cml0ZV9hdXRvY29uZixpbnQsKHZvaWQpKTsN
CiAgICAtUChjb25mX2dldF9jaGFuZ2VkLGJvb2wsKHZvaWQpKTsNCiAgICAtUChjb25mX3NldF9j
aGFuZ2VkX2NhbGxiYWNrLCB2b2lkLCh2b2lkICgqZm4pKHZvaWQpKSk7DQogICAgLVAoY29uZl9z
ZXRfbWVzc2FnZV9jYWxsYmFjaywgdm9pZCwodm9pZCAoKmZuKShjb25zdCBjaGFyICpmbXQsIHZh
X2xpc3QgYXApKSk7DQogICAgLQ0KICAgIC0vKiBtZW51LmMgKi8NCiAgICAtUChyb290bWVudSxz
dHJ1Y3QgbWVudSwpOw0KICAgIC0NCiAgICAtUChtZW51X2lzX2VtcHR5LCBib29sLCAoc3RydWN0
IG1lbnUgKm1lbnUpKTsNCiAgICAtUChtZW51X2lzX3Zpc2libGUsIGJvb2wsIChzdHJ1Y3QgbWVu
dSAqbWVudSkpOw0KICAgIC1QKG1lbnVfaGFzX3Byb21wdCwgYm9vbCwgKHN0cnVjdCBtZW51ICpt
ZW51KSk7DQogICAgLVAobWVudV9nZXRfcHJvbXB0LGNvbnN0IGNoYXIgKiwoc3RydWN0IG1lbnUg
Km1lbnUpKTsNCiAgICAtUChtZW51X2dldF9yb290X21lbnUsc3RydWN0IG1lbnUgKiwoc3RydWN0
IG1lbnUgKm1lbnUpKTsNCiAgICAtUChtZW51X2dldF9wYXJlbnRfbWVudSxzdHJ1Y3QgbWVudSAq
LChzdHJ1Y3QgbWVudSAqbWVudSkpOw0KICAgIC1QKG1lbnVfaGFzX2hlbHAsYm9vbCwoc3RydWN0
IG1lbnUgKm1lbnUpKTsNCiAgICAtUChtZW51X2dldF9oZWxwLGNvbnN0IGNoYXIgKiwoc3RydWN0
IG1lbnUgKm1lbnUpKTsNCiAgICAtUChnZXRfc3ltYm9sX3N0ciwgdm9pZCwgKHN0cnVjdCBnc3Ry
ICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIHN0cnVjdCBsaXN0X2hlYWQNCiAgICAtCQkJICpoZWFk
KSk7DQogICAgLVAoZ2V0X3JlbGF0aW9uc19zdHIsIHN0cnVjdCBnc3RyLCAoc3RydWN0IHN5bWJv
bCAqKnN5bV9hcnIsIHN0cnVjdCBsaXN0X2hlYWQNCiAgICAtCQkJCSAgICpoZWFkKSk7DQogICAg
LVAobWVudV9nZXRfZXh0X2hlbHAsdm9pZCwoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBnc3Ry
ICpoZWxwKSk7DQogICAgLQ0KICAgIC0vKiBzeW1ib2wuYyAqLw0KICAgIC1QKHN5bWJvbF9oYXNo
LHN0cnVjdCBzeW1ib2wgKixbU1lNQk9MX0hBU0hTSVpFXSk7DQogICAgLQ0KICAgIC1QKHN5bV9s
b29rdXAsc3RydWN0IHN5bWJvbCAqLChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpKTsNCiAg
ICAtUChzeW1fZmluZCxzdHJ1Y3Qgc3ltYm9sICosKGNvbnN0IGNoYXIgKm5hbWUpKTsNCiAgICAt
UChzeW1fZXhwYW5kX3N0cmluZ192YWx1ZSxjb25zdCBjaGFyICosKGNvbnN0IGNoYXIgKmluKSk7
DQogICAgLVAoc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUsIGNvbnN0IGNoYXIgKiwoY29uc3QgY2hh
ciAqaW4pKTsNCiAgICAtUChzeW1fcmVfc2VhcmNoLHN0cnVjdCBzeW1ib2wgKiosKGNvbnN0IGNo
YXIgKnBhdHRlcm4pKTsNCiAgICAtUChzeW1fdHlwZV9uYW1lLGNvbnN0IGNoYXIgKiwoZW51bSBz
eW1ib2xfdHlwZSB0eXBlKSk7DQogICAgLVAoc3ltX2NhbGNfdmFsdWUsdm9pZCwoc3RydWN0IHN5
bWJvbCAqc3ltKSk7DQogICAgLVAoc3ltX2dldF90eXBlLGVudW0gc3ltYm9sX3R5cGUsKHN0cnVj
dCBzeW1ib2wgKnN5bSkpOw0KICAgIC1QKHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2UsYm9vbCwo
c3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSkpOw0KICAgIC1QKHN5bV9zZXRfdHJpc3Rh
dGVfdmFsdWUsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSkpOw0KICAgIC1Q
KHN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUsdHJpc3RhdGUsKHN0cnVjdCBzeW1ib2wgKnN5bSkp
Ow0KICAgIC1QKHN5bV9zdHJpbmdfdmFsaWQsYm9vbCwoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25z
dCBjaGFyICpuZXd2YWwpKTsNCiAgICAtUChzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZSxib29sLChz
dHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikpOw0KICAgIC1QKHN5bV9zZXRfc3Ry
aW5nX3ZhbHVlLGJvb2wsKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqbmV3dmFsKSk7
DQogICAgLVAoc3ltX2lzX2NoYW5nYWJsZSxib29sLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsNCiAg
ICAtUChzeW1fZ2V0X2Nob2ljZV9wcm9wLHN0cnVjdCBwcm9wZXJ0eSAqLChzdHJ1Y3Qgc3ltYm9s
ICpzeW0pKTsNCiAgICAtUChzeW1fZ2V0X2RlZmF1bHRfcHJvcCxzdHJ1Y3QgcHJvcGVydHkgKiwo
c3RydWN0IHN5bWJvbCAqc3ltKSk7DQogICAgLVAoc3ltX2dldF9zdHJpbmdfdmFsdWUsY29uc3Qg
Y2hhciAqLChzdHJ1Y3Qgc3ltYm9sICpzeW0pKTsNCiAgICAtDQogICAgLVAocHJvcF9nZXRfdHlw
ZV9uYW1lLGNvbnN0IGNoYXIgKiwoZW51bSBwcm9wX3R5cGUgdHlwZSkpOw0KICAgIC0NCiAgICAt
LyogZXhwci5jICovDQogICAgLVAoZXhwcl9jb21wYXJlX3R5cGUsaW50LChlbnVtIGV4cHJfdHlw
ZSB0MSwgZW51bSBleHByX3R5cGUgdDIpKTsNCiAgICAtUChleHByX3ByaW50LHZvaWQsKHN0cnVj
dCBleHByICplLCB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFy
ICopLCB2b2lkICpkYXRhLCBpbnQgcHJldnRva2VuKSk7DQogICAgZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy9seGRpYWxvZy8uZ2l0aWdub3JlIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9n
Ly5naXRpZ25vcmUNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA5MGIw
OGZmLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nLy5naXRpZ25v
cmUNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsNCArMCwwIEBADQogICAgLSMNCiAgICAt
IyBHZW5lcmF0ZWQgZmlsZXMNCiAgICAtIw0KICAgIC1seGRpYWxvZw0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HIGIvc3VwcG9ydC9rY29u
ZmlnL2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IGE4OTk5ZDguLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcv
bHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDQg
KzAsMCBAQA0KICAgIC1UaGlzIGlzIE5PVCB0aGUgb2ZmaWNpYWwgdmVyc2lvbiBvZiBkaWFsb2cu
ICBUaGlzIHZlcnNpb24gaGFzIGJlZW4NCiAgICAtc2lnbmlmaWNhbnRseSBtb2RpZmllZCBmcm9t
IHRoZSBvcmlnaW5hbC4gIEl0IGlzIGZvciB1c2UgYnkgdGhlIExpbnV4DQogICAgLWtlcm5lbCBj
b25maWd1cmF0aW9uIHNjcmlwdC4gIFBsZWFzZSBkbyBub3QgYm90aGVyIFNhdmlvIExhbSB3aXRo
IA0KICAgIC1xdWVzdGlvbnMgYWJvdXQgdGhpcyBwcm9ncmFtLg0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggYi9zdXBwb3J0L2tjb25m
aWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA3
NTUNCiAgICBpbmRleCAzY2UwYTIzLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL2NoZWNrLWx4ZGlhbG9nLnNoDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0x
LDkxICswLDAgQEANCiAgICAtIyEvYmluL3NoDQogICAgLSMgQ2hlY2sgbmN1cnNlcyBjb21wYXRp
YmlsaXR5DQogICAgLQ0KICAgIC0jIFdoYXQgbGlicmFyeSB0byBsaW5rDQogICAgLWxkZmxhZ3Mo
KQ0KICAgIC17DQogICAgLQlwa2ctY29uZmlnIC0tbGlicyBuY3Vyc2VzdyAyPi9kZXYvbnVsbCAm
JiBleGl0DQogICAgLQlwa2ctY29uZmlnIC0tbGlicyBuY3Vyc2VzIDI+L2Rldi9udWxsICYmIGV4
aXQNCiAgICAtCWZvciBleHQgaW4gc28gYSBkbGwuYSBkeWxpYiA7IGRvDQogICAgLQkJZm9yIGxp
YiBpbiBuY3Vyc2VzdyBuY3Vyc2VzIGN1cnNlcyA7IGRvDQogICAgLQkJCSRjYyAtcHJpbnQtZmls
ZS1uYW1lPWxpYiR7bGlifS4ke2V4dH0gfCBncmVwIC1xIC8NCiAgICAtCQkJaWYgWyAkPyAtZXEg
MCBdOyB0aGVuDQogICAgLQkJCQllY2hvICItbCR7bGlifSINCiAgICAtCQkJCWV4aXQNCiAgICAt
CQkJZmkNCiAgICAtCQlkb25lDQogICAgLQlkb25lDQogICAgLQlleGl0IDENCiAgICAtfQ0KICAg
IC0NCiAgICAtIyBXaGVyZSBpcyBuY3Vyc2VzLmg/DQogICAgLWNjZmxhZ3MoKQ0KICAgIC17DQog
ICAgLQlpZiBwa2ctY29uZmlnIC0tY2ZsYWdzIG5jdXJzZXN3IDI+L2Rldi9udWxsOyB0aGVuDQog
ICAgLQkJZWNobyAnLURDVVJTRVNfTE9DPSI8bmN1cnNlcy5oPiIgLUROQ1VSU0VTX1dJREVDSEFS
PTEnDQogICAgLQllbGlmIHBrZy1jb25maWcgLS1jZmxhZ3MgbmN1cnNlcyAyPi9kZXYvbnVsbDsg
dGhlbg0KICAgIC0JCWVjaG8gJy1EQ1VSU0VTX0xPQz0iPG5jdXJzZXMuaD4iJw0KICAgIC0JZWxp
ZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCBdOyB0aGVuDQogICAgLQkJZWNo
byAnLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3cgLURDVVJTRVNfTE9DPSI8Y3Vyc2VzLmg+IicNCiAg
ICAtCQllY2hvICcgLUROQ1VSU0VTX1dJREVDSEFSPTEnDQogICAgLQllbGlmIFsgLWYgL3Vzci9p
bmNsdWRlL25jdXJzZXMvbmN1cnNlcy5oIF07IHRoZW4NCiAgICAtCQllY2hvICctSS91c3IvaW5j
bHVkZS9uY3Vyc2VzIC1EQ1VSU0VTX0xPQz0iPG5jdXJzZXMuaD4iJw0KICAgIC0JZWxpZiBbIC1m
IC91c3IvaW5jbHVkZS9uY3Vyc2VzL2N1cnNlcy5oIF07IHRoZW4NCiAgICAtCQllY2hvICctSS91
c3IvaW5jbHVkZS9uY3Vyc2VzIC1EQ1VSU0VTX0xPQz0iPGN1cnNlcy5oPiInDQogICAgLQllbGlm
IFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXMuaCBdOyB0aGVuDQogICAgLQkJZWNobyAnLURDVVJT
RVNfTE9DPSI8bmN1cnNlcy5oPiInDQogICAgLQllbHNlDQogICAgLQkJZWNobyAnLURDVVJTRVNf
TE9DPSI8Y3Vyc2VzLmg+IicNCiAgICAtCWZpDQogICAgLX0NCiAgICAtDQogICAgLSMgVGVtcCBm
aWxlLCB0cnkgdG8gY2xlYW4gdXAgYWZ0ZXIgdXMNCiAgICAtdG1wPSQobWt0ZW1wKQ0KICAgIC10
cmFwICJybSAtZiAkdG1wIiAwIDEgMiAzIDE1DQogICAgLQ0KICAgIC0jIENoZWNrIGlmIHdlIGNh
biBsaW5rIHRvIG5jdXJzZXMNCiAgICAtY2hlY2soKSB7DQogICAgLSAgICAgICAgJGNjIC14IGMg
LSAtbyAkdG1wIDI+L2Rldi9udWxsIDw8J0VPRicNCiAgICAtI2luY2x1ZGUgQ1VSU0VTX0xPQw0K
ICAgIC1tYWluKCkge30NCiAgICAtRU9GDQogICAgLQlpZiBbICQ/ICE9IDAgXTsgdGhlbg0KICAg
IC0JICAgIGVjaG8gIiAqKiogVW5hYmxlIHRvIGZpbmQgdGhlIG5jdXJzZXMgbGlicmFyaWVzIG9y
IHRoZSIgICAgICAgMT4mMg0KICAgIC0JICAgIGVjaG8gIiAqKiogcmVxdWlyZWQgaGVhZGVyIGZp
bGVzLiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMT4mMg0KICAgIC0JICAgIGVjaG8gIiAq
KiogJ21ha2UgbWVudWNvbmZpZycgcmVxdWlyZXMgdGhlIG5jdXJzZXMgbGlicmFyaWVzLiIgMT4m
Mg0KICAgIC0JICAgIGVjaG8gIiAqKiogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMT4mMg0KICAgIC0JICAgIGVjaG8gIiAqKiogSW5zdGFsbCBuY3Vy
c2VzIChuY3Vyc2VzLWRldmVsKSBhbmQgdHJ5IGFnYWluLiIgICAgMT4mMg0KICAgIC0JICAgIGVj
aG8gIiAqKiogIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMT4mMg0KICAgIC0JICAgIGV4aXQgMQ0KICAgIC0JZmkNCiAgICAtfQ0KICAgIC0NCiAgICAt
dXNhZ2UoKSB7DQogICAgLQlwcmludGYgIlVzYWdlOiAkMCBbLWNoZWNrIGNvbXBpbGVyIG9wdGlv
bnN8LWNjZmxhZ3N8LWxkZmxhZ3MgY29tcGlsZXIgb3B0aW9uc11cbiINCiAgICAtfQ0KICAgIC0N
CiAgICAtaWYgWyAkIyAtZXEgMCBdOyB0aGVuDQogICAgLQl1c2FnZQ0KICAgIC0JZXhpdCAxDQog
ICAgLWZpDQogICAgLQ0KICAgIC1jYz0iIg0KICAgIC1jYXNlICIkMSIgaW4NCiAgICAtCSItY2hl
Y2siKQ0KICAgIC0JCXNoaWZ0DQogICAgLQkJY2M9IiRAIg0KICAgIC0JCWNoZWNrDQogICAgLQkJ
OzsNCiAgICAtCSItY2NmbGFncyIpDQogICAgLQkJY2NmbGFncw0KICAgIC0JCTs7DQogICAgLQki
LWxkZmxhZ3MiKQ0KICAgIC0JCXNoaWZ0DQogICAgLQkJY2M9IiRAIg0KICAgIC0JCWxkZmxhZ3MN
CiAgICAtCQk7Ow0KICAgIC0JIioiKQ0KICAgIC0JCXVzYWdlDQogICAgLQkJZXhpdCAxDQogICAg
LQkJOzsNCiAgICAtZXNhYw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbHhkaWFs
b2cvY2hlY2tsaXN0LmMgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvY2hlY2tsaXN0LmMNCiAg
ICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAzYjE1YzA4Li4wMDAwMDAwDQog
ICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jDQogICAgKysrIC9k
ZXYvbnVsbA0KICAgIEBAIC0xLDMzMiArMCwwIEBADQogICAgLS8qDQogICAgLSAqICBjaGVja2xp
c3QuYyAtLSBpbXBsZW1lbnRzIHRoZSBjaGVja2xpc3QgYm94DQogICAgLSAqDQogICAgLSAqICBP
UklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQogICAgLSAqICAg
ICBTdHVhcnQgSGVyYmVydCAtIFMuSGVyYmVydEBzaGVmZmllbGQuYWMudWs6IHJhZGlvbGlzdCBl
eHRlbnNpb24NCiAgICAtICogICAgIEFsZXNzYW5kcm8gUnViaW5pIC0gcnViaW5pQGlwdnZpcy51
bmlwdi5pdDogbWVyZ2VkIHRoZSB0d28NCiAgICAtICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJO
RUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkNCiAgICAtICoN
CiAgICAtICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3INCiAgICAtICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogICAgLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMg0KICAgIC0gKiAgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogICAg
LSAqDQogICAgLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAgICAtICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogICAgLSAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQogICAg
LSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICAgIC0g
Kg0KICAgIC0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UNCiAgICAtICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogICAgLSAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4NCiAgICAtICovDQog
ICAgLQ0KICAgIC0jaW5jbHVkZSAiZGlhbG9nLmgiDQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGxp
c3Rfd2lkdGgsIGNoZWNrX3gsIGl0ZW1feDsNCiAgICAtDQogICAgLS8qDQogICAgLSAqIFByaW50
IGxpc3QgaXRlbQ0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgcHJpbnRfaXRlbShXSU5ET1cg
KiB3aW4sIGludCBjaG9pY2UsIGludCBzZWxlY3RlZCkNCiAgICAtew0KICAgIC0JaW50IGk7DQog
ICAgLQljaGFyICpsaXN0X2l0ZW0gPSBtYWxsb2MobGlzdF93aWR0aCArIDEpOw0KICAgIC0NCiAg
ICAtCXN0cm5jcHkobGlzdF9pdGVtLCBpdGVtX3N0cigpLCBsaXN0X3dpZHRoIC0gaXRlbV94KTsN
CiAgICAtCWxpc3RfaXRlbVtsaXN0X3dpZHRoIC0gaXRlbV94XSA9ICdcMCc7DQogICAgLQ0KICAg
IC0JLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIGxhc3QgaXRlbSAqLw0KICAgIC0Jd2F0dHJzZXQod2lu
LCBkbGcubWVudWJveC5hdHIpOw0KICAgIC0Jd21vdmUod2luLCBjaG9pY2UsIDApOw0KICAgIC0J
Zm9yIChpID0gMDsgaSA8IGxpc3Rfd2lkdGg7IGkrKykNCiAgICAtCQl3YWRkY2god2luLCAnICcp
Ow0KICAgIC0NCiAgICAtCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194KTsNCiAgICAtCXdhdHRy
c2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuY2hlY2tfc2VsZWN0ZWQuYXRyDQogICAgLQkJIDogZGxn
LmNoZWNrLmF0cik7DQogICAgLQlpZiAoIWl0ZW1faXNfdGFnKCc6JykpDQogICAgLQkJd3ByaW50
dyh3aW4sICIoJWMpIiwgaXRlbV9pc190YWcoJ1gnKSA/ICdYJyA6ICcgJyk7DQogICAgLQ0KICAg
IC0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy50YWdfc2VsZWN0ZWQuYXRyIDogZGxnLnRh
Zy5hdHIpOw0KICAgIC0JbXZ3YWRkY2god2luLCBjaG9pY2UsIGl0ZW1feCwgbGlzdF9pdGVtWzBd
KTsNCiAgICAtCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuaXRlbV9zZWxlY3RlZC5hdHIg
OiBkbGcuaXRlbS5hdHIpOw0KICAgIC0Jd2FkZHN0cih3aW4sIGxpc3RfaXRlbSArIDEpOw0KICAg
IC0JaWYgKHNlbGVjdGVkKSB7DQogICAgLQkJd21vdmUod2luLCBjaG9pY2UsIGNoZWNrX3ggKyAx
KTsNCiAgICAtCQl3cmVmcmVzaCh3aW4pOw0KICAgIC0JfQ0KICAgIC0JZnJlZShsaXN0X2l0ZW0p
Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBQcmludCB0aGUgc2Nyb2xsIGluZGlj
YXRvcnMuDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9hcnJvd3MoV0lORE9XICog
d2luLCBpbnQgY2hvaWNlLCBpbnQgaXRlbV9ubywgaW50IHNjcm9sbCwNCiAgICAtCSAgICAgaW50
IHksIGludCB4LCBpbnQgaGVpZ2h0KQ0KICAgIC17DQogICAgLQl3bW92ZSh3aW4sIHksIHgpOw0K
ICAgIC0NCiAgICAtCWlmIChzY3JvbGwgPiAwKSB7DQogICAgLQkJd2F0dHJzZXQod2luLCBkbGcu
dWFycm93LmF0cik7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX1VBUlJPVyk7DQogICAgLQkJd2Fk
ZHN0cih3aW4sICIoLSkiKTsNCiAgICAtCX0gZWxzZSB7DQogICAgLQkJd2F0dHJzZXQod2luLCBk
bGcubWVudWJveC5hdHIpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAgLQkJ
d2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0K
ICAgIC0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JeSA9
IHkgKyBoZWlnaHQgKyAxOw0KICAgIC0Jd21vdmUod2luLCB5LCB4KTsNCiAgICAtDQogICAgLQlp
ZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYmIChzY3JvbGwgKyBjaG9pY2UgPCBpdGVtX25vIC0gMSkp
IHsNCiAgICAtCQl3YXR0cnNldCh3aW4sIGRsZy5kYXJyb3cuYXRyKTsNCiAgICAtCQl3YWRkY2go
d2luLCBBQ1NfREFSUk9XKTsNCiAgICAtCQl3YWRkc3RyKHdpbiwgIigrKSIpOw0KICAgIC0JfSBl
bHNlIHsNCiAgICAtCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94X2JvcmRlci5hdHIpOw0KICAg
IC0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5F
KTsNCiAgICAtCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFD
U19ITElORSk7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqICBEaXNw
bGF5IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZCBw
cmludF9idXR0b25zKFdJTkRPVyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQg
c2VsZWN0ZWQpDQogICAgLXsNCiAgICAtCWludCB4ID0gd2lkdGggLyAyIC0gMTE7DQogICAgLQlp
bnQgeSA9IGhlaWdodCAtIDI7DQogICAgLQ0KICAgIC0JcHJpbnRfYnV0dG9uKGRpYWxvZywgZ2V0
dGV4dCgiU2VsZWN0IiksIHksIHgsIHNlbGVjdGVkID09IDApOw0KICAgIC0JcHJpbnRfYnV0dG9u
KGRpYWxvZywgZ2V0dGV4dCgiIEhlbHAgIiksIHksIHggKyAxNCwgc2VsZWN0ZWQgPT0gMSk7DQog
ICAgLQ0KICAgIC0Jd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDE0ICogc2VsZWN0ZWQpOw0KICAg
IC0Jd3JlZnJlc2goZGlhbG9nKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogRGlz
cGxheSBhIGRpYWxvZyBib3ggd2l0aCBhIGxpc3Qgb2Ygb3B0aW9ucyB0aGF0IGNhbiBiZSB0dXJu
ZWQgb24gb3Igb2ZmDQogICAgLSAqIGluIHRoZSBzdHlsZSBvZiByYWRpb2xpc3QgKG9ubHkgb25l
IG9wdGlvbiB0dXJuZWQgb24gYXQgYSB0aW1lKS4NCiAgICAtICovDQogICAgLWludCBkaWFsb2df
Y2hlY2tsaXN0KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWln
aHQsDQogICAgLQkJICAgICBpbnQgd2lkdGgsIGludCBsaXN0X2hlaWdodCkNCiAgICAtew0KICAg
IC0JaW50IGksIHgsIHksIGJveF94LCBib3hfeTsNCiAgICAtCWludCBrZXkgPSAwLCBidXR0b24g
PSAwLCBjaG9pY2UgPSAwLCBzY3JvbGwgPSAwLCBtYXhfY2hvaWNlOw0KICAgIC0JV0lORE9XICpk
aWFsb2csICpsaXN0Ow0KICAgIC0NCiAgICAtCS8qIHdoaWNoIGl0ZW0gdG8gaGlnaGxpZ2h0ICov
DQogICAgLQlpdGVtX2ZvcmVhY2goKSB7DQogICAgLQkJaWYgKGl0ZW1faXNfdGFnKCdYJykpDQog
ICAgLQkJCWNob2ljZSA9IGl0ZW1fbigpOw0KICAgIC0JCWlmIChpdGVtX2lzX3NlbGVjdGVkKCkp
IHsNCiAgICAtCQkJY2hvaWNlID0gaXRlbV9uKCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0N
CiAgICAtCX0NCiAgICAtDQogICAgLWRvX3Jlc2l6ZToNCiAgICAtCWlmIChnZXRtYXh5KHN0ZHNj
cikgPCAoaGVpZ2h0ICsgQ0hFQ0tMSVNUX0hFSUdUSF9NSU4pKQ0KICAgIC0JCXJldHVybiAtRVJS
RElTUExBWVRPT1NNQUxMOw0KICAgIC0JaWYgKGdldG1heHgoc3Rkc2NyKSA8ICh3aWR0aCArIENI
RUNLTElTVF9XSURUSF9NSU4pKQ0KICAgIC0JCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0K
ICAgIC0NCiAgICAtCW1heF9jaG9pY2UgPSBNSU4obGlzdF9oZWlnaHQsIGl0ZW1fY291bnQoKSk7
DQogICAgLQ0KICAgIC0JLyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovDQogICAgLQl4
ID0gKGdldG1heHgoc3Rkc2NyKSAtIHdpZHRoKSAvIDI7DQogICAgLQl5ID0gKGdldG1heHkoc3Rk
c2NyKSAtIGhlaWdodCkgLyAyOw0KICAgIC0NCiAgICAtCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwg
eCwgaGVpZ2h0LCB3aWR0aCk7DQogICAgLQ0KICAgIC0JZGlhbG9nID0gbmV3d2luKGhlaWdodCwg
d2lkdGgsIHksIHgpOw0KICAgIC0Ja2V5cGFkKGRpYWxvZywgVFJVRSk7DQogICAgLQ0KICAgIC0J
ZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLA0KICAgIC0JCSBkbGcuZGlhbG9n
LmF0ciwgZGxnLmJvcmRlci5hdHIpOw0KICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuYm9yZGVy
LmF0cik7DQogICAgLQltdndhZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsN
CiAgICAtCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykNCiAgICAtCQl3YWRkY2goZGlh
bG9nLCBBQ1NfSExJTkUpOw0KICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7
DQogICAgLQl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7DQogICAgLQ0KICAgIC0JcHJpbnRfdGl0
bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOw0KICAgIC0NCiAgICAtCXdhdHRyc2V0KGRpYWxvZywg
ZGxnLmRpYWxvZy5hdHIpOw0KICAgIC0JcHJpbnRfYXV0b3dyYXAoZGlhbG9nLCBwcm9tcHQsIHdp
ZHRoIC0gMiwgMSwgMyk7DQogICAgLQ0KICAgIC0JbGlzdF93aWR0aCA9IHdpZHRoIC0gNjsNCiAg
ICAtCWJveF95ID0gaGVpZ2h0IC0gbGlzdF9oZWlnaHQgLSA1Ow0KICAgIC0JYm94X3ggPSAod2lk
dGggLSBsaXN0X3dpZHRoKSAvIDIgLSAxOw0KICAgIC0NCiAgICAtCS8qIGNyZWF0ZSBuZXcgd2lu
ZG93IGZvciB0aGUgbGlzdCAqLw0KICAgIC0JbGlzdCA9IHN1YndpbihkaWFsb2csIGxpc3RfaGVp
Z2h0LCBsaXN0X3dpZHRoLCB5ICsgYm94X3kgKyAxLA0KICAgIC0JICAgICAgICAgICAgICB4ICsg
Ym94X3ggKyAxKTsNCiAgICAtDQogICAgLQlrZXlwYWQobGlzdCwgVFJVRSk7DQogICAgLQ0KICAg
IC0JLyogZHJhdyBhIGJveCBhcm91bmQgdGhlIGxpc3QgaXRlbXMgKi8NCiAgICAtCWRyYXdfYm94
KGRpYWxvZywgYm94X3ksIGJveF94LCBsaXN0X2hlaWdodCArIDIsIGxpc3Rfd2lkdGggKyAyLA0K
ICAgIC0JICAgICAgICAgZGxnLm1lbnVib3hfYm9yZGVyLmF0ciwgZGxnLm1lbnVib3guYXRyKTsN
CiAgICAtDQogICAgLQkvKiBGaW5kIGxlbmd0aCBvZiBsb25nZXN0IGl0ZW0gaW4gb3JkZXIgdG8g
Y2VudGVyIGNoZWNrbGlzdCAqLw0KICAgIC0JY2hlY2tfeCA9IDA7DQogICAgLQlpdGVtX2ZvcmVh
Y2goKQ0KICAgIC0JCWNoZWNrX3ggPSBNQVgoY2hlY2tfeCwgc3RybGVuKGl0ZW1fc3RyKCkpICsg
NCk7DQogICAgLQljaGVja194ID0gTUlOKGNoZWNrX3gsIGxpc3Rfd2lkdGgpOw0KICAgIC0NCiAg
ICAtCWNoZWNrX3ggPSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8gMjsNCiAgICAtCWl0ZW1feCA9
IGNoZWNrX3ggKyA0Ow0KICAgIC0NCiAgICAtCWlmIChjaG9pY2UgPj0gbGlzdF9oZWlnaHQpIHsN
CiAgICAtCQlzY3JvbGwgPSBjaG9pY2UgLSBsaXN0X2hlaWdodCArIDE7DQogICAgLQkJY2hvaWNl
IC09IHNjcm9sbDsNCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBQcmludCB0aGUgbGlzdCAqLw0K
ICAgIC0JZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgew0KICAgIC0JCWl0ZW1fc2V0
KHNjcm9sbCArIGkpOw0KICAgIC0JCXByaW50X2l0ZW0obGlzdCwgaSwgaSA9PSBjaG9pY2UpOw0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9j
b3VudCgpLCBzY3JvbGwsDQogICAgLQkJICAgICBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwg
bGlzdF9oZWlnaHQpOw0KICAgIC0NCiAgICAtCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQs
IHdpZHRoLCAwKTsNCiAgICAtDQogICAgLQl3bm91dHJlZnJlc2goZGlhbG9nKTsNCiAgICAtCXdu
b3V0cmVmcmVzaChsaXN0KTsNCiAgICAtCWRvdXBkYXRlKCk7DQogICAgLQ0KICAgIC0Jd2hpbGUg
KGtleSAhPSBLRVlfRVNDKSB7DQogICAgLQkJa2V5ID0gd2dldGNoKGRpYWxvZyk7DQogICAgLQ0K
ICAgIC0JCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsNCiAgICAtCQkJaXRlbV9z
ZXQoaSArIHNjcm9sbCk7DQogICAgLQkJCWlmICh0b3VwcGVyKGtleSkgPT0gdG91cHBlcihpdGVt
X3N0cigpWzBdKSkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJaWYg
KGkgPCBtYXhfY2hvaWNlIHx8IGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dOIHx8DQog
ICAgLQkJICAgIGtleSA9PSAnKycgfHwga2V5ID09ICctJykgew0KICAgIC0JCQlpZiAoa2V5ID09
IEtFWV9VUCB8fCBrZXkgPT0gJy0nKSB7DQogICAgLQkJCQlpZiAoIWNob2ljZSkgew0KICAgIC0J
CQkJCWlmICghc2Nyb2xsKQ0KICAgIC0JCQkJCQljb250aW51ZTsNCiAgICAtCQkJCQkvKiBTY3Jv
bGwgbGlzdCBkb3duICovDQogICAgLQkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4gMSkgew0KICAgIC0J
CQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBmaXJzdCBpdGVtICovDQogICAgLQkJCQkJCWl0
ZW1fc2V0KHNjcm9sbCk7DQogICAgLQkJCQkJCXByaW50X2l0ZW0obGlzdCwgMCwgRkFMU0UpOw0K
ICAgIC0JCQkJCQlzY3JvbGxvayhsaXN0LCBUUlVFKTsNCiAgICAtCQkJCQkJd3NjcmwobGlzdCwg
LTEpOw0KICAgIC0JCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7DQogICAgLQkJCQkJfQ0KICAg
IC0JCQkJCXNjcm9sbC0tOw0KICAgIC0JCQkJCWl0ZW1fc2V0KHNjcm9sbCk7DQogICAgLQkJCQkJ
cHJpbnRfaXRlbShsaXN0LCAwLCBUUlVFKTsNCiAgICAtCQkJCQlwcmludF9hcnJvd3MoZGlhbG9n
LCBjaG9pY2UsIGl0ZW1fY291bnQoKSwNCiAgICAtCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBi
b3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7DQogICAgLQ0KICAgIC0JCQkJCXdub3V0
cmVmcmVzaChkaWFsb2cpOw0KICAgIC0JCQkJCXdyZWZyZXNoKGxpc3QpOw0KICAgIC0NCiAgICAt
CQkJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8NCiAgICAtCQkJ
CX0gZWxzZQ0KICAgIC0JCQkJCWkgPSBjaG9pY2UgLSAxOw0KICAgIC0JCQl9IGVsc2UgaWYgKGtl
eSA9PSBLRVlfRE9XTiB8fCBrZXkgPT0gJysnKSB7DQogICAgLQkJCQlpZiAoY2hvaWNlID09IG1h
eF9jaG9pY2UgLSAxKSB7DQogICAgLQkJCQkJaWYgKHNjcm9sbCArIGNob2ljZSA+PSBpdGVtX2Nv
dW50KCkgLSAxKQ0KICAgIC0JCQkJCQljb250aW51ZTsNCiAgICAtCQkJCQkvKiBTY3JvbGwgbGlz
dCB1cCAqLw0KICAgIC0JCQkJCWlmIChsaXN0X2hlaWdodCA+IDEpIHsNCiAgICAtCQkJCQkJLyog
RGUtaGlnaGxpZ2h0IGN1cnJlbnQgbGFzdCBpdGVtIGJlZm9yZSBzY3JvbGxpbmcgdXAgKi8NCiAg
ICAtCQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpOw0KICAgIC0JCQkJCQlw
cmludF9pdGVtKGxpc3QsDQogICAgLQkJCQkJCQkgICAgbWF4X2Nob2ljZSAtIDEsDQogICAgLQkJ
CQkJCQkgICAgRkFMU0UpOw0KICAgIC0JCQkJCQlzY3JvbGxvayhsaXN0LCBUUlVFKTsNCiAgICAt
CQkJCQkJd3NjcmwobGlzdCwgMSk7DQogICAgLQkJCQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNFKTsN
CiAgICAtCQkJCQl9DQogICAgLQkJCQkJc2Nyb2xsKys7DQogICAgLQkJCQkJaXRlbV9zZXQoc2Ny
b2xsICsgbWF4X2Nob2ljZSAtIDEpOw0KICAgIC0JCQkJCXByaW50X2l0ZW0obGlzdCwgbWF4X2No
b2ljZSAtIDEsIFRSVUUpOw0KICAgIC0NCiAgICAtCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBj
aG9pY2UsIGl0ZW1fY291bnQoKSwNCiAgICAtCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hf
eCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7DQogICAgLQ0KICAgIC0JCQkJCXdub3V0cmVm
cmVzaChkaWFsb2cpOw0KICAgIC0JCQkJCXdyZWZyZXNoKGxpc3QpOw0KICAgIC0NCiAgICAtCQkJ
CQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8NCiAgICAtCQkJCX0g
ZWxzZQ0KICAgIC0JCQkJCWkgPSBjaG9pY2UgKyAxOw0KICAgIC0JCQl9DQogICAgLQkJCWlmIChp
ICE9IGNob2ljZSkgew0KICAgIC0JCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgaXRlbSAqLw0K
ICAgIC0JCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsNCiAgICAtCQkJCXByaW50X2l0ZW0o
bGlzdCwgY2hvaWNlLCBGQUxTRSk7DQogICAgLQkJCQkvKiBIaWdobGlnaHQgbmV3IGl0ZW0gKi8N
CiAgICAtCQkJCWNob2ljZSA9IGk7DQogICAgLQkJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2Up
Ow0KICAgIC0JCQkJcHJpbnRfaXRlbShsaXN0LCBjaG9pY2UsIFRSVUUpOw0KICAgIC0JCQkJd25v
dXRyZWZyZXNoKGRpYWxvZyk7DQogICAgLQkJCQl3cmVmcmVzaChsaXN0KTsNCiAgICAtCQkJfQ0K
ICAgIC0JCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8NCiAgICAt
CQl9DQogICAgLQkJc3dpdGNoIChrZXkpIHsNCiAgICAtCQljYXNlICdIJzoNCiAgICAtCQljYXNl
ICdoJzoNCiAgICAtCQljYXNlICc/JzoNCiAgICAtCQkJYnV0dG9uID0gMTsNCiAgICAtCQkJLyog
ZmFsbC10aHJvdWdoICovDQogICAgLQkJY2FzZSAnUyc6DQogICAgLQkJY2FzZSAncyc6DQogICAg
LQkJY2FzZSAnICc6DQogICAgLQkJY2FzZSAnXG4nOg0KICAgIC0JCQlpdGVtX2ZvcmVhY2goKQ0K
ICAgIC0JCQkJaXRlbV9zZXRfc2VsZWN0ZWQoMCk7DQogICAgLQkJCWl0ZW1fc2V0KHNjcm9sbCAr
IGNob2ljZSk7DQogICAgLQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOw0KICAgIC0JCQlkZWx3aW4o
bGlzdCk7DQogICAgLQkJCWRlbHdpbihkaWFsb2cpOw0KICAgIC0JCQlyZXR1cm4gYnV0dG9uOw0K
ICAgIC0JCWNhc2UgVEFCOg0KICAgIC0JCWNhc2UgS0VZX0xFRlQ6DQogICAgLQkJY2FzZSBLRVlf
UklHSFQ6DQogICAgLQkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiAr
K2J1dHRvbikgPCAwKQ0KICAgIC0JCQkgICAgPyAxIDogKGJ1dHRvbiA+IDEgPyAwIDogYnV0dG9u
KTsNCiAgICAtDQogICAgLQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBi
dXR0b24pOw0KICAgIC0JCQl3cmVmcmVzaChkaWFsb2cpOw0KICAgIC0JCQlicmVhazsNCiAgICAt
CQljYXNlICdYJzoNCiAgICAtCQljYXNlICd4JzoNCiAgICAtCQkJa2V5ID0gS0VZX0VTQzsNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRVNDOg0KICAgIC0JCQlrZXkgPSBvbl9rZXlf
ZXNjKGRpYWxvZyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX1JFU0laRToNCiAg
ICAtCQkJZGVsd2luKGxpc3QpOw0KICAgIC0JCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAtCQkJb25f
a2V5X3Jlc2l6ZSgpOw0KICAgIC0JCQlnb3RvIGRvX3Jlc2l6ZTsNCiAgICAtCQl9DQogICAgLQ0K
ICAgIC0JCS8qIE5vdywgdXBkYXRlIGV2ZXJ5dGhpbmcuLi4gKi8NCiAgICAtCQlkb3VwZGF0ZSgp
Ow0KICAgIC0JfQ0KICAgIC0JZGVsd2luKGxpc3QpOw0KICAgIC0JZGVsd2luKGRpYWxvZyk7DQog
ICAgLQlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8NCiAgICAtfQ0KICAgIGRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmggYi9zdXBwb3J0L2tjb25maWcv
bHhkaWFsb2cvZGlhbG9nLmgNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCBiNDM0M2QzLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2Rp
YWxvZy5oDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDI1NyArMCwwIEBADQogICAgLS8q
DQogICAgLSAqICBkaWFsb2cuaCAtLSBjb21tb24gZGVjbGFyYXRpb25zIGZvciBhbGwgZGlhbG9n
IG1vZHVsZXMNCiAgICAtICoNCiAgICAtICogIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3Mu
Y3Voay5oaykNCiAgICAtICoNCiAgICAtICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCiAgICAtICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogICAgLSAqICBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp
b24gMg0KICAgIC0gKiAgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uDQogICAgLSAqDQogICAgLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAgICAtICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQog
ICAgLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlDQogICAgLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLg0KICAgIC0gKg0KICAgIC0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAgICAtICogIGFsb25nIHdp
dGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQogICAg
LSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzks
IFVTQS4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogICAg
LSNpbmNsdWRlIDxmY250bC5oPg0KICAgIC0jaW5jbHVkZSA8dW5pc3RkLmg+DQogICAgLSNpbmNs
dWRlIDxjdHlwZS5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAgLSNpbmNsdWRlIDxz
dHJpbmcuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCiAgICAtDQogICAgLSNpZm5kZWYg
S0JVSUxEX05PX05MUw0KICAgIC0jIGluY2x1ZGUgPGxpYmludGwuaD4NCiAgICAtI2Vsc2UNCiAg
ICAtIyBkZWZpbmUgZ2V0dGV4dChNc2dpZCkgKChjb25zdCBjaGFyICopIChNc2dpZCkpDQogICAg
LSNlbmRpZg0KICAgIC0NCiAgICAtI2lmZGVmIF9fc3VuX18NCiAgICAtI2RlZmluZSBDVVJTX01B
Q1JPUw0KICAgIC0jZW5kaWYNCiAgICAtI2luY2x1ZGUgQ1VSU0VTX0xPQw0KICAgIC0NCiAgICAt
LyoNCiAgICAtICogQ29sb3JzIGluIG5jdXJzZXMgMS45LjllIGRvIG5vdCB3b3JrIHByb3Blcmx5
IHNpbmNlIGZvcmVncm91bmQgYW5kDQogICAgLSAqIGJhY2tncm91bmQgY29sb3JzIGFyZSBPUidk
IHJhdGhlciB0aGFuIHNlcGFyYXRlbHkgbWFza2VkLiAgVGhpcyB2ZXJzaW9uDQogICAgLSAqIG9m
IGRpYWxvZyB3YXMgaGFja2VkIHRvIHdvcmsgd2l0aCBuY3Vyc2VzIDEuOS45ZSwgbWFraW5nIGl0
IGluY29tcGF0aWJsZQ0KICAgIC0gKiB3aXRoIHN0YW5kYXJkIGN1cnNlcy4gIFRoZSBzaW1wbGVz
dCBmaXggKHRvIG1ha2UgdGhpcyB3b3JrIHdpdGggc3RhbmRhcmQNCiAgICAtICogY3Vyc2VzKSB1
c2VzIHRoZSB3YmtnZHNldCgpIGZ1bmN0aW9uLCBub3QgdXNlZCBpbiB0aGUgb3JpZ2luYWwgaGFj
ay4NCiAgICAtICogVHVybiBpdCBvZmYgaWYgd2UncmUgYnVpbGRpbmcgd2l0aCAxLjkuOWUsIHNp
bmNlIGl0IGp1c3QgY29uZnVzZXMgdGhpbmdzLg0KICAgIC0gKi8NCiAgICAtI2lmIGRlZmluZWQo
TkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKF9ORUVEX1dSQVApICYmICFkZWZpbmVkKEdDQ19Q
UklOVEZMSUtFKQ0KICAgIC0jZGVmaW5lIE9MRF9OQ1VSU0VTIDENCiAgICAtI3VuZGVmICB3Ymtn
ZHNldA0KICAgIC0jZGVmaW5lIHdia2dkc2V0KHcscCkJCS8qbm90aGluZyAqLw0KICAgIC0jZWxz
ZQ0KICAgIC0jZGVmaW5lIE9MRF9OQ1VSU0VTIDANCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0j
ZGVmaW5lIFRSKHBhcmFtcykgX3RyYWNlZiBwYXJhbXMNCiAgICAtDQogICAgLSNkZWZpbmUgS0VZ
X0VTQyAyNw0KICAgIC0jZGVmaW5lIFRBQiA5DQogICAgLSNkZWZpbmUgTUFYX0xFTiAyMDQ4DQog
ICAgLSNkZWZpbmUgQlVGX1NJWkUgKDEwKjEwMjQpDQogICAgLSNkZWZpbmUgTUlOKHgseSkgKHgg
PCB5ID8geCA6IHkpDQogICAgLSNkZWZpbmUgTUFYKHgseSkgKHggPiB5ID8geCA6IHkpDQogICAg
LQ0KICAgIC0jaWZuZGVmIEFDU19VTENPUk5FUg0KICAgIC0jZGVmaW5lIEFDU19VTENPUk5FUiAn
KycNCiAgICAtI2VuZGlmDQogICAgLSNpZm5kZWYgQUNTX0xMQ09STkVSDQogICAgLSNkZWZpbmUg
QUNTX0xMQ09STkVSICcrJw0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBBQ1NfVVJDT1JORVIN
CiAgICAtI2RlZmluZSBBQ1NfVVJDT1JORVIgJysnDQogICAgLSNlbmRpZg0KICAgIC0jaWZuZGVm
IEFDU19MUkNPUk5FUg0KICAgIC0jZGVmaW5lIEFDU19MUkNPUk5FUiAnKycNCiAgICAtI2VuZGlm
DQogICAgLSNpZm5kZWYgQUNTX0hMSU5FDQogICAgLSNkZWZpbmUgQUNTX0hMSU5FICctJw0KICAg
IC0jZW5kaWYNCiAgICAtI2lmbmRlZiBBQ1NfVkxJTkUNCiAgICAtI2RlZmluZSBBQ1NfVkxJTkUg
J3wnDQogICAgLSNlbmRpZg0KICAgIC0jaWZuZGVmIEFDU19MVEVFDQogICAgLSNkZWZpbmUgQUNT
X0xURUUgJysnDQogICAgLSNlbmRpZg0KICAgIC0jaWZuZGVmIEFDU19SVEVFDQogICAgLSNkZWZp
bmUgQUNTX1JURUUgJysnDQogICAgLSNlbmRpZg0KICAgIC0jaWZuZGVmIEFDU19VQVJST1cNCiAg
ICAtI2RlZmluZSBBQ1NfVUFSUk9XICdeJw0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBBQ1Nf
REFSUk9XDQogICAgLSNkZWZpbmUgQUNTX0RBUlJPVyAndicNCiAgICAtI2VuZGlmDQogICAgLQ0K
ICAgIC0vKiBlcnJvciByZXR1cm4gY29kZXMgKi8NCiAgICAtI2RlZmluZSBFUlJESVNQTEFZVE9P
U01BTEwgKEtFWV9NQVggKyAxKQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogICBDb2xvciBkZWZp
bml0aW9ucw0KICAgIC0gKi8NCiAgICAtc3RydWN0IGRpYWxvZ19jb2xvciB7DQogICAgLQljaHR5
cGUgYXRyOwkvKiBDb2xvciBhdHRyaWJ1dGUgKi8NCiAgICAtCWludCBmZzsJCS8qIGZvcmVncm91
bmQgKi8NCiAgICAtCWludCBiZzsJCS8qIGJhY2tncm91bmQgKi8NCiAgICAtCWludCBobDsJCS8q
IGhpZ2hsaWdodCB0aGlzIGl0ZW0gKi8NCiAgICAtfTsNCiAgICAtDQogICAgLXN0cnVjdCBzdWJ0
aXRsZV9saXN0IHsNCiAgICAtCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpuZXh0Ow0KICAgIC0JY29u
c3QgY2hhciAqdGV4dDsNCiAgICAtfTsNCiAgICAtDQogICAgLXN0cnVjdCBkaWFsb2dfaW5mbyB7
DQogICAgLQljb25zdCBjaGFyICpiYWNrdGl0bGU7DQogICAgLQlzdHJ1Y3Qgc3VidGl0bGVfbGlz
dCAqc3VidGl0bGVzOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBzY3JlZW47DQogICAgLQlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIHNoYWRvdzsNCiAgICAtCXN0cnVjdCBkaWFsb2dfY29sb3IgZGlh
bG9nOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciB0aXRsZTsNCiAgICAtCXN0cnVjdCBkaWFs
b2dfY29sb3IgYm9yZGVyOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fYWN0aXZl
Ow0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25faW5hY3RpdmU7DQogICAgLQlzdHJ1
Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9rZXlfYWN0aXZlOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19j
b2xvciBidXR0b25fa2V5X2luYWN0aXZlOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBidXR0
b25fbGFiZWxfYWN0aXZlOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fbGFiZWxf
aW5hY3RpdmU7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGlucHV0Ym94Ow0KICAgIC0Jc3Ry
dWN0IGRpYWxvZ19jb2xvciBpbnB1dGJveF9ib3JkZXI7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2Nv
bG9yIHNlYXJjaGJveDsNCiAgICAtCXN0cnVjdCBkaWFsb2dfY29sb3Igc2VhcmNoYm94X3RpdGxl
Ow0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBzZWFyY2hib3hfYm9yZGVyOw0KICAgIC0Jc3Ry
dWN0IGRpYWxvZ19jb2xvciBwb3NpdGlvbl9pbmRpY2F0b3I7DQogICAgLQlzdHJ1Y3QgZGlhbG9n
X2NvbG9yIG1lbnVib3g7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIG1lbnVib3hfYm9yZGVy
Ow0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBpdGVtOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19j
b2xvciBpdGVtX3NlbGVjdGVkOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciB0YWc7DQogICAg
LQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19zZWxlY3RlZDsNCiAgICAtCXN0cnVjdCBkaWFsb2df
Y29sb3IgdGFnX2tleTsNCiAgICAtCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnX2tleV9zZWxlY3Rl
ZDsNCiAgICAtCXN0cnVjdCBkaWFsb2dfY29sb3IgY2hlY2s7DQogICAgLQlzdHJ1Y3QgZGlhbG9n
X2NvbG9yIGNoZWNrX3NlbGVjdGVkOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciB1YXJyb3c7
DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGRhcnJvdzsNCiAgICAtfTsNCiAgICAtDQogICAg
LS8qDQogICAgLSAqIEdsb2JhbCB2YXJpYWJsZXMNCiAgICAtICovDQogICAgLWV4dGVybiBzdHJ1
Y3QgZGlhbG9nX2luZm8gZGxnOw0KICAgIC1leHRlcm4gY2hhciBkaWFsb2dfaW5wdXRfcmVzdWx0
W107DQogICAgLWV4dGVybiBpbnQgc2F2ZWRfeCwgc2F2ZWRfeTsJCS8qIE5lZWRlZCBpbiBzaWdu
YWwgaGFuZGxlciBpbiBtY29uZi5jICovDQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBGdW5jdGlv
biBwcm90b3R5cGVzDQogICAgLSAqLw0KICAgIC0NCiAgICAtLyogaXRlbSBsaXN0IGFzIHVzZWQg
YnkgY2hlY2tsaXN0IGFuZCBtZW51Ym94ICovDQogICAgLXZvaWQgaXRlbV9yZXNldCh2b2lkKTsN
CiAgICAtdm9pZCBpdGVtX21ha2UoY29uc3QgY2hhciAqZm10LCAuLi4pOw0KICAgIC12b2lkIGl0
ZW1fYWRkX3N0cihjb25zdCBjaGFyICpmbXQsIC4uLik7DQogICAgLXZvaWQgaXRlbV9zZXRfdGFn
KGNoYXIgdGFnKTsNCiAgICAtdm9pZCBpdGVtX3NldF9kYXRhKHZvaWQgKnApOw0KICAgIC12b2lk
IGl0ZW1fc2V0X3NlbGVjdGVkKGludCB2YWwpOw0KICAgIC1pbnQgaXRlbV9hY3RpdmF0ZV9zZWxl
Y3RlZCh2b2lkKTsNCiAgICAtdm9pZCAqaXRlbV9kYXRhKHZvaWQpOw0KICAgIC1jaGFyIGl0ZW1f
dGFnKHZvaWQpOw0KICAgIC0NCiAgICAtLyogaXRlbSBsaXN0IG1hbmlwdWxhdGlvbiBmb3IgbHhk
aWFsb2cgdXNlICovDQogICAgLSNkZWZpbmUgTUFYSVRFTVNUUiAyMDANCiAgICAtc3RydWN0IGRp
YWxvZ19pdGVtIHsNCiAgICAtCWNoYXIgc3RyW01BWElURU1TVFJdOwkvKiBwcm9tdHAgZGlzcGxh
eWVkICovDQogICAgLQljaGFyIHRhZzsNCiAgICAtCXZvaWQgKmRhdGE7CS8qIHBvaW50ZXIgdG8g
bWVudSBpdGVtIC0gdXNlZCBieSBtZW51Ym94K2NoZWNrbGlzdCAqLw0KICAgIC0JaW50IHNlbGVj
dGVkOwkvKiBTZXQgdG8gMSBieSBkaWFsb2dfKigpIGZ1bmN0aW9uIGlmIHNlbGVjdGVkLiAqLw0K
ICAgIC19Ow0KICAgIC0NCiAgICAtLyogbGlzdCBvZiBsaWFsb2dfaXRlbXMgKi8NCiAgICAtc3Ry
dWN0IGRpYWxvZ19saXN0IHsNCiAgICAtCXN0cnVjdCBkaWFsb2dfaXRlbSBub2RlOw0KICAgIC0J
c3RydWN0IGRpYWxvZ19saXN0ICpuZXh0Ow0KICAgIC19Ow0KICAgIC0NCiAgICAtZXh0ZXJuIHN0
cnVjdCBkaWFsb2dfbGlzdCAqaXRlbV9jdXI7DQogICAgLWV4dGVybiBzdHJ1Y3QgZGlhbG9nX2xp
c3QgaXRlbV9uaWw7DQogICAgLWV4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1faGVhZDsN
CiAgICAtDQogICAgLWludCBpdGVtX2NvdW50KHZvaWQpOw0KICAgIC12b2lkIGl0ZW1fc2V0KGlu
dCBuKTsNCiAgICAtaW50IGl0ZW1fbih2b2lkKTsNCiAgICAtY29uc3QgY2hhciAqaXRlbV9zdHIo
dm9pZCk7DQogICAgLWludCBpdGVtX2lzX3NlbGVjdGVkKHZvaWQpOw0KICAgIC1pbnQgaXRlbV9p
c190YWcoY2hhciB0YWcpOw0KICAgIC0jZGVmaW5lIGl0ZW1fZm9yZWFjaCgpIFwNCiAgICAtCWZv
ciAoaXRlbV9jdXIgPSBpdGVtX2hlYWQgPyBpdGVtX2hlYWQ6IGl0ZW1fY3VyOyBcDQogICAgLQkg
ICAgIGl0ZW1fY3VyICYmIChpdGVtX2N1ciAhPSAmaXRlbV9uaWwpOyBpdGVtX2N1ciA9IGl0ZW1f
Y3VyLT5uZXh0KQ0KICAgIC0NCiAgICAtLyogZ2VuZXJpYyBrZXkgaGFuZGxlcnMgKi8NCiAgICAt
aW50IG9uX2tleV9lc2MoV0lORE9XICp3aW4pOw0KICAgIC1pbnQgb25fa2V5X3Jlc2l6ZSh2b2lk
KTsNCiAgICAtDQogICAgLS8qIG1pbmltdW0gKHJlKXNpemUgdmFsdWVzICovDQogICAgLSNkZWZp
bmUgQ0hFQ0tMSVNUX0hFSUdUSF9NSU4gNgkvKiBGb3IgZGlhbG9nX2NoZWNrbGlzdCgpICovDQog
ICAgLSNkZWZpbmUgQ0hFQ0tMSVNUX1dJRFRIX01JTiA2DQogICAgLSNkZWZpbmUgSU5QVVRCT1hf
SEVJR1RIX01JTiAyCS8qIEZvciBkaWFsb2dfaW5wdXRib3goKSAqLw0KICAgIC0jZGVmaW5lIElO
UFVUQk9YX1dJRFRIX01JTiAyDQogICAgLSNkZWZpbmUgTUVOVUJPWF9IRUlHVEhfTUlOIDE1CS8q
IEZvciBkaWFsb2dfbWVudSgpICovDQogICAgLSNkZWZpbmUgTUVOVUJPWF9XSURUSF9NSU4gNjUN
CiAgICAtI2RlZmluZSBURVhUQk9YX0hFSUdUSF9NSU4gOAkvKiBGb3IgZGlhbG9nX3RleHRib3go
KSAqLw0KICAgIC0jZGVmaW5lIFRFWFRCT1hfV0lEVEhfTUlOIDgNCiAgICAtI2RlZmluZSBZRVNO
T19IRUlHVEhfTUlOIDQJLyogRm9yIGRpYWxvZ195ZXNubygpICovDQogICAgLSNkZWZpbmUgWUVT
Tk9fV0lEVEhfTUlOIDQNCiAgICAtI2RlZmluZSBXSU5ET1dfSEVJR1RIX01JTiAxOQkvKiBGb3Ig
aW5pdF9kaWFsb2coKSAqLw0KICAgIC0jZGVmaW5lIFdJTkRPV19XSURUSF9NSU4gODANCiAgICAt
DQogICAgLWludCBpbml0X2RpYWxvZyhjb25zdCBjaGFyICpiYWNrdGl0bGUpOw0KICAgIC12b2lk
IHNldF9kaWFsb2dfYmFja3RpdGxlKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSk7DQogICAgLXZvaWQg
c2V0X2RpYWxvZ19zdWJ0aXRsZXMoc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlcyk7DQog
ICAgLXZvaWQgZW5kX2RpYWxvZyhpbnQgeCwgaW50IHkpOw0KICAgIC12b2lkIGF0dHJfY2xlYXIo
V0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGNodHlwZSBhdHRyKTsNCiAgICAt
dm9pZCBkaWFsb2dfY2xlYXIodm9pZCk7DQogICAgLXZvaWQgcHJpbnRfYXV0b3dyYXAoV0lORE9X
ICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0aCwgaW50IHksIGludCB4KTsNCiAg
ICAtdm9pZCBwcmludF9idXR0b24oV0lORE9XICogd2luLCBjb25zdCBjaGFyICpsYWJlbCwgaW50
IHksIGludCB4LCBpbnQgc2VsZWN0ZWQpOw0KICAgIC12b2lkIHByaW50X3RpdGxlKFdJTkRPVyAq
ZGlhbG9nLCBjb25zdCBjaGFyICp0aXRsZSwgaW50IHdpZHRoKTsNCiAgICAtdm9pZCBkcmF3X2Jv
eChXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5
cGUgYm94LA0KICAgIC0JICAgICAgY2h0eXBlIGJvcmRlcik7DQogICAgLXZvaWQgZHJhd19zaGFk
b3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCk7DQog
ICAgLQ0KICAgIC1pbnQgZmlyc3RfYWxwaGEoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFy
ICpleGVtcHQpOw0KICAgIC1pbnQgZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25z
dCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCk7DQogICAgLWludCBkaWFsb2df
bXNnYm94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQs
DQogICAgLQkJICBpbnQgd2lkdGgsIGludCBwYXVzZSk7DQogICAgLQ0KICAgIC0NCiAgICAtdHlw
ZWRlZiB2b2lkICgqdXBkYXRlX3RleHRfZm4pKGNoYXIgKmJ1Ziwgc2l6ZV90IHN0YXJ0LCBzaXpl
X3QgZW5kLCB2b2lkDQogICAgLQkJCSAgICAgICAqX2RhdGEpOw0KICAgIC1pbnQgZGlhbG9nX3Rl
eHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRidWYsIGludCBpbml0aWFsX2hlaWdodCwN
CiAgICAtCQkgICBpbnQgaW5pdGlhbF93aWR0aCwgaW50ICprZXlzLCBpbnQgKl92c2Nyb2xsLCBp
bnQgKl9oc2Nyb2xsLA0KICAgIC0JCSAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lk
ICpkYXRhKTsNCiAgICAtaW50IGRpYWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBj
aGFyICpwcm9tcHQsDQogICAgLQkJY29uc3Qgdm9pZCAqc2VsZWN0ZWQsIGludCAqc19zY3JvbGwp
Ow0KICAgIC1pbnQgZGlhbG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hh
ciAqcHJvbXB0LCBpbnQgaGVpZ2h0LA0KICAgIC0JCSAgICAgaW50IHdpZHRoLCBpbnQgbGlzdF9o
ZWlnaHQpOw0KICAgIC1pbnQgZGlhbG9nX2lucHV0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25z
dCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsDQogICAgLQkJICAgIGludCB3aWR0aCwgY29uc3Qg
Y2hhciAqaW5pdCk7DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBUaGlzIGlzIHRoZSBiYXNlIGZv
ciBmaWN0aXRpb3VzIGtleXMsIHdoaWNoIGFjdGl2YXRlDQogICAgLSAqIHRoZSBidXR0b25zLg0K
ICAgIC0gKg0KICAgIC0gKiBNb3VzZS1nZW5lcmF0ZWQga2V5cyBhcmUgdGhlIGZvbGxvd2luZzoN
CiAgICAtICogICAtLSB0aGUgZmlyc3QgMzIgYXJlIHVzZWQgYXMgbnVtYmVycywgaW4gYWRkaXRp
b24gdG8gJzAnLSc5Jw0KICAgIC0gKiAgIC0tIHRoZSBsb3dlcmNhc2UgYXJlIHVzZWQgdG8gc2ln
bmFsIG1vdXNlLWVudGVyIGV2ZW50cyAoTV9FVkVOVCArICdvJykNCiAgICAtICogICAtLSB1cHBl
cmNhc2UgY2hhcnMgYXJlIHVzZWQgdG8gaW52b2tlIHRoZSBidXR0b24gKE1fRVZFTlQgKyAnTycp
DQogICAgLSAqLw0KICAgIC0jZGVmaW5lIE1fRVZFTlQgKEtFWV9NQVgrMSkNCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94LmMgYi9zdXBwb3J0L2tjb25m
aWcvbHhkaWFsb2cvaW5wdXRib3guYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAg
IGluZGV4IDQ0N2E1ODIuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcvbHhkaWFs
b2cvaW5wdXRib3guYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwzMDEgKzAsMCBAQA0K
ICAgIC0vKg0KICAgIC0gKiAgaW5wdXRib3guYyAtLSBpbXBsZW1lbnRzIHRoZSBpbnB1dCBib3gN
CiAgICAtICoNCiAgICAtICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3Mu
Y3Voay5oaykNCiAgICAtICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBX
aWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkNCiAgICAtICoNCiAgICAtICogIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IN
CiAgICAtICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlDQogICAgLSAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMg0KICAgIC0gKiAgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQogICAgLSAqDQogICAgLSAqICBU
aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwNCiAgICAtICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogICAgLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQogICAgLSAqICBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICAgIC0gKg0KICAgIC0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UNCiAgICAtICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlDQogICAgLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBB
dmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5j
bHVkZSAiZGlhbG9nLmgiDQogICAgLQ0KICAgIC1jaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbTUFY
X0xFTiArIDFdOw0KICAgIC0NCiAgICAtLyoNCiAgICAtICogIFByaW50IHRoZSB0ZXJtaW5hdGlv
biBidXR0b25zDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9idXR0b25zKFdJTkRP
VyAqIGRpYWxvZywgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0ZWQpDQogICAgLXsN
CiAgICAtCWludCB4ID0gd2lkdGggLyAyIC0gMTE7DQogICAgLQlpbnQgeSA9IGhlaWdodCAtIDI7
DQogICAgLQ0KICAgIC0JcHJpbnRfYnV0dG9uKGRpYWxvZywgZ2V0dGV4dCgiICBPayAgIiksIHks
IHgsIHNlbGVjdGVkID09IDApOw0KICAgIC0JcHJpbnRfYnV0dG9uKGRpYWxvZywgZ2V0dGV4dCgi
IEhlbHAgIiksIHksIHggKyAxNCwgc2VsZWN0ZWQgPT0gMSk7DQogICAgLQ0KICAgIC0Jd21vdmUo
ZGlhbG9nLCB5LCB4ICsgMSArIDE0ICogc2VsZWN0ZWQpOw0KICAgIC0Jd3JlZnJlc2goZGlhbG9n
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogRGlzcGxheSBhIGRpYWxvZyBib3gg
Zm9yIGlucHV0aW5nIGEgc3RyaW5nDQogICAgLSAqLw0KICAgIC1pbnQgZGlhbG9nX2lucHV0Ym94
KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3
aWR0aCwNCiAgICAtICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbml0KQ0KICAgIC17
DQogICAgLQlpbnQgaSwgeCwgeSwgYm94X3ksIGJveF94LCBib3hfd2lkdGg7DQogICAgLQlpbnQg
aW5wdXRfeCA9IDAsIGtleSA9IDAsIGJ1dHRvbiA9IC0xOw0KICAgIC0JaW50IHNob3dfeCwgbGVu
LCBwb3M7DQogICAgLQljaGFyICppbnN0ciA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7DQogICAgLQlX
SU5ET1cgKmRpYWxvZzsNCiAgICAtDQogICAgLQlpZiAoIWluaXQpDQogICAgLQkJaW5zdHJbMF0g
PSAnXDAnOw0KICAgIC0JZWxzZQ0KICAgIC0JCXN0cmNweShpbnN0ciwgaW5pdCk7DQogICAgLQ0K
ICAgIC1kb19yZXNpemU6DQogICAgLQlpZiAoZ2V0bWF4eShzdGRzY3IpIDw9IChoZWlnaHQgLSBJ
TlBVVEJPWF9IRUlHVEhfTUlOKSkNCiAgICAtCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsN
CiAgICAtCWlmIChnZXRtYXh4KHN0ZHNjcikgPD0gKHdpZHRoIC0gSU5QVVRCT1hfV0lEVEhfTUlO
KSkNCiAgICAtCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICAtDQogICAgLQkvKiBj
ZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICAtCXggPSAoZ2V0bWF4eChzdGRzY3Ip
IC0gd2lkdGgpIC8gMjsNCiAgICAtCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7
DQogICAgLQ0KICAgIC0JZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsN
CiAgICAtDQogICAgLQlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7DQogICAg
LQlrZXlwYWQoZGlhbG9nLCBUUlVFKTsNCiAgICAtDQogICAgLQlkcmF3X2JveChkaWFsb2csIDAs
IDAsIGhlaWdodCwgd2lkdGgsDQogICAgLQkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0
cik7DQogICAgLQl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsNCiAgICAtCW12d2Fk
ZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0KICAgIC0JZm9yIChpID0gMDsg
aSA8IHdpZHRoIC0gMjsgaSsrKQ0KICAgIC0JCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7DQog
ICAgLQl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAtCXdhZGRjaChkaWFs
b2csIEFDU19SVEVFKTsNCiAgICAtDQogICAgLQlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3
aWR0aCk7DQogICAgLQ0KICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQog
ICAgLQlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsNCiAg
ICAtDQogICAgLQkvKiBEcmF3IHRoZSBpbnB1dCBmaWVsZCBib3ggKi8NCiAgICAtCWJveF93aWR0
aCA9IHdpZHRoIC0gNjsNCiAgICAtCWdldHl4KGRpYWxvZywgeSwgeCk7DQogICAgLQlib3hfeSA9
IHkgKyAyOw0KICAgIC0JYm94X3ggPSAod2lkdGggLSBib3hfd2lkdGgpIC8gMjsNCiAgICAtCWRy
YXdfYm94KGRpYWxvZywgeSArIDEsIGJveF94IC0gMSwgMywgYm94X3dpZHRoICsgMiwNCiAgICAt
CQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsNCiAgICAtDQogICAgLQlwcmludF9i
dXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgLQ0KICAgIC0JLyogU2V0IHVw
IHRoZSBpbml0aWFsIHZhbHVlICovDQogICAgLQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7
DQogICAgLQl3YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJveC5hdHIpOw0KICAgIC0NCiAgICAt
CWxlbiA9IHN0cmxlbihpbnN0cik7DQogICAgLQlwb3MgPSBsZW47DQogICAgLQ0KICAgIC0JaWYg
KGxlbiA+PSBib3hfd2lkdGgpIHsNCiAgICAtCQlzaG93X3ggPSBsZW4gLSBib3hfd2lkdGggKyAx
Ow0KICAgIC0JCWlucHV0X3ggPSBib3hfd2lkdGggLSAxOw0KICAgIC0JCWZvciAoaSA9IDA7IGkg
PCBib3hfd2lkdGggLSAxOyBpKyspDQogICAgLQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3df
eCArIGldKTsNCiAgICAtCX0gZWxzZSB7DQogICAgLQkJc2hvd194ID0gMDsNCiAgICAtCQlpbnB1
dF94ID0gbGVuOw0KICAgIC0JCXdhZGRzdHIoZGlhbG9nLCBpbnN0cik7DQogICAgLQl9DQogICAg
LQ0KICAgIC0Jd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsNCiAgICAtDQog
ICAgLQl3cmVmcmVzaChkaWFsb2cpOw0KICAgIC0NCiAgICAtCXdoaWxlIChrZXkgIT0gS0VZX0VT
Qykgew0KICAgIC0JCWtleSA9IHdnZXRjaChkaWFsb2cpOw0KICAgIC0NCiAgICAtCQlpZiAoYnV0
dG9uID09IC0xKSB7CS8qIElucHV0IGJveCBzZWxlY3RlZCAqLw0KICAgIC0JCQlzd2l0Y2ggKGtl
eSkgew0KICAgIC0JCQljYXNlIFRBQjoNCiAgICAtCQkJY2FzZSBLRVlfVVA6DQogICAgLQkJCWNh
c2UgS0VZX0RPV046DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSBLRVlfQkFDS1NQQUNF
Og0KICAgIC0JCQljYXNlIDEyNzoNCiAgICAtCQkJCWlmIChwb3MpIHsNCiAgICAtCQkJCQl3YXR0
cnNldChkaWFsb2csIGRsZy5pbnB1dGJveC5hdHIpOw0KICAgIC0JCQkJCWlmIChpbnB1dF94ID09
IDApIHsNCiAgICAtCQkJCQkJc2hvd194LS07DQogICAgLQkJCQkJfSBlbHNlDQogICAgLQkJCQkJ
CWlucHV0X3gtLTsNCiAgICAtDQogICAgLQkJCQkJaWYgKHBvcyA8IGxlbikgew0KICAgIC0JCQkJ
CQlmb3IgKGkgPSBwb3MgLSAxOyBpIDwgbGVuOyBpKyspIHsNCiAgICAtCQkJCQkJCWluc3RyW2ld
ID0gaW5zdHJbaSsxXTsNCiAgICAtCQkJCQkJfQ0KICAgIC0JCQkJCX0NCiAgICAtDQogICAgLQkJ
CQkJcG9zLS07DQogICAgLQkJCQkJbGVuLS07DQogICAgLQkJCQkJaW5zdHJbbGVuXSA9ICdcMCc7
DQogICAgLQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOw0KICAgIC0JCQkJCWZvciAo
aSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykgew0KICAgIC0JCQkJCQlpZiAoIWluc3RyW3Nob3df
eCArIGldKSB7DQogICAgLQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOw0KICAgIC0JCQkJCQkJ
YnJlYWs7DQogICAgLQkJCQkJCX0NCiAgICAtCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hv
d194ICsgaV0pOw0KICAgIC0JCQkJCX0NCiAgICAtCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBp
bnB1dF94ICsgYm94X3gpOw0KICAgIC0JCQkJCXdyZWZyZXNoKGRpYWxvZyk7DQogICAgLQkJCQl9
DQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJY2FzZSBLRVlfTEVGVDoNCiAgICAtCQkJCWlm
IChwb3MgPiAwKSB7DQogICAgLQkJCQkJaWYgKGlucHV0X3ggPiAwKSB7DQogICAgLQkJCQkJCXdt
b3ZlKGRpYWxvZywgYm94X3ksIC0taW5wdXRfeCArIGJveF94KTsNCiAgICAtCQkJCQl9IGVsc2Ug
aWYgKGlucHV0X3ggPT0gMCkgew0KICAgIC0JCQkJCQlzaG93X3gtLTsNCiAgICAtCQkJCQkJd21v
dmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOw0KICAgIC0JCQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94
X3dpZHRoOyBpKyspIHsNCiAgICAtCQkJCQkJCWlmICghaW5zdHJbc2hvd194ICsgaV0pIHsNCiAg
ICAtCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOw0KICAgIC0JCQkJCQkJCWJyZWFrOw0KICAg
IC0JCQkJCQkJfQ0KICAgIC0JCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0p
Ow0KICAgIC0JCQkJCQl9DQogICAgLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsN
CiAgICAtCQkJCQl9DQogICAgLQkJCQkJcG9zLS07DQogICAgLQkJCQl9DQogICAgLQkJCQljb250
aW51ZTsNCiAgICAtCQkJY2FzZSBLRVlfUklHSFQ6DQogICAgLQkJCQlpZiAocG9zIDwgbGVuKSB7
DQogICAgLQkJCQkJaWYgKGlucHV0X3ggPCBib3hfd2lkdGggLSAxKSB7DQogICAgLQkJCQkJCXdt
b3ZlKGRpYWxvZywgYm94X3ksICsraW5wdXRfeCArIGJveF94KTsNCiAgICAtCQkJCQl9IGVsc2Ug
aWYgKGlucHV0X3ggPT0gYm94X3dpZHRoIC0gMSkgew0KICAgIC0JCQkJCQlzaG93X3grKzsNCiAg
ICAtCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOw0KICAgIC0JCQkJCQlmb3IgKGkg
PSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsNCiAgICAtCQkJCQkJCWlmICghaW5zdHJbc2hvd194
ICsgaV0pIHsNCiAgICAtCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOw0KICAgIC0JCQkJCQkJ
CWJyZWFrOw0KICAgIC0JCQkJCQkJfQ0KICAgIC0JCQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJb
c2hvd194ICsgaV0pOw0KICAgIC0JCQkJCQl9DQogICAgLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94
X3ksIGlucHV0X3ggKyBib3hfeCk7DQogICAgLQkJCQkJfQ0KICAgIC0JCQkJCXBvcysrOw0KICAg
IC0JCQkJfQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCWRlZmF1bHQ6DQogICAgLQkJCQlp
ZiAoa2V5IDwgMHgxMDAgJiYgaXNwcmludChrZXkpKSB7DQogICAgLQkJCQkJaWYgKGxlbiA8IE1B
WF9MRU4pIHsNCiAgICAtCQkJCQkJd2F0dHJzZXQoZGlhbG9nLCBkbGcuaW5wdXRib3guYXRyKTsN
CiAgICAtCQkJCQkJaWYgKHBvcyA8IGxlbikgew0KICAgIC0JCQkJCQkJZm9yIChpID0gbGVuOyBp
ID4gcG9zOyBpLS0pDQogICAgLQkJCQkJCQkJaW5zdHJbaV0gPSBpbnN0cltpLTFdOw0KICAgIC0J
CQkJCQkJaW5zdHJbcG9zXSA9IGtleTsNCiAgICAtCQkJCQkJfSBlbHNlIHsNCiAgICAtCQkJCQkJ
CWluc3RyW2xlbl0gPSBrZXk7DQogICAgLQkJCQkJCX0NCiAgICAtCQkJCQkJcG9zKys7DQogICAg
LQkJCQkJCWxlbisrOw0KICAgIC0JCQkJCQlpbnN0cltsZW5dID0gJ1wwJzsNCiAgICAtDQogICAg
LQkJCQkJCWlmIChpbnB1dF94ID09IGJveF93aWR0aCAtIDEpIHsNCiAgICAtCQkJCQkJCXNob3df
eCsrOw0KICAgIC0JCQkJCQl9IGVsc2Ugew0KICAgIC0JCQkJCQkJaW5wdXRfeCsrOw0KICAgIC0J
CQkJCQl9DQogICAgLQ0KICAgIC0JCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7DQog
ICAgLQkJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykgew0KICAgIC0JCQkJCQkJ
aWYgKCFpbnN0cltzaG93X3ggKyBpXSkgew0KICAgIC0JCQkJCQkJCXdhZGRjaChkaWFsb2csICcg
Jyk7DQogICAgLQkJCQkJCQkJYnJlYWs7DQogICAgLQkJCQkJCQl9DQogICAgLQkJCQkJCQl3YWRk
Y2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7DQogICAgLQkJCQkJCX0NCiAgICAtCQkJCQkJ
d21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCArIGJveF94KTsNCiAgICAtCQkJCQkJd3JlZnJl
c2goZGlhbG9nKTsNCiAgICAtCQkJCQl9IGVsc2UNCiAgICAtCQkJCQkJZmxhc2goKTsJLyogQWxh
cm0gdXNlciBhYm91dCBvdmVyZmxvdyAqLw0KICAgIC0JCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJ
fQ0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCXN3aXRjaCAoa2V5KSB7DQogICAgLQkJY2Fz
ZSAnTyc6DQogICAgLQkJY2FzZSAnbyc6DQogICAgLQkJCWRlbHdpbihkaWFsb2cpOw0KICAgIC0J
CQlyZXR1cm4gMDsNCiAgICAtCQljYXNlICdIJzoNCiAgICAtCQljYXNlICdoJzoNCiAgICAtCQkJ
ZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JCWNhc2UgS0VZX1VQOg0K
ICAgIC0JCWNhc2UgS0VZX0xFRlQ6DQogICAgLQkJCXN3aXRjaCAoYnV0dG9uKSB7DQogICAgLQkJ
CWNhc2UgLTE6DQogICAgLQkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1dHRv
biBpcyBzZWxlY3RlZCAqLw0KICAgIC0JCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwg
d2lkdGgsIDEpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgMDoNCiAgICAtCQkJCWJ1
dHRvbiA9IC0xOwkvKiBJbmRpY2F0ZXMgaW5wdXQgYm94IGlzIHNlbGVjdGVkICovDQogICAgLQkJ
CQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgLQkJCQl3bW92
ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOw0KICAgIC0JCQkJd3JlZnJlc2goZGlh
bG9nKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIDE6DQogICAgLQkJCQlidXR0b24g
PSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8NCiAgICAtCQkJCXBy
aW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICAtCQkJCWJyZWFrOw0K
ICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgVEFCOg0KICAgIC0JCWNhc2Ug
S0VZX0RPV046DQogICAgLQkJY2FzZSBLRVlfUklHSFQ6DQogICAgLQkJCXN3aXRjaCAoYnV0dG9u
KSB7DQogICAgLQkJCWNhc2UgLTE6DQogICAgLQkJCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMg
Ik9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8NCiAgICAtCQkJCXByaW50X2J1dHRvbnMoZGlhbG9n
LCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIDA6DQog
ICAgLQkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3Rl
ZCAqLw0KICAgIC0JCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDEpOw0K
ICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgMToNCiAgICAtCQkJCWJ1dHRvbiA9IC0xOwkv
KiBJbmRpY2F0ZXMgaW5wdXQgYm94IGlzIHNlbGVjdGVkICovDQogICAgLQkJCQlwcmludF9idXR0
b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgLQkJCQl3bW92ZShkaWFsb2csIGJv
eF95LCBib3hfeCArIGlucHV0X3gpOw0KICAgIC0JCQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICAt
CQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgJyAnOg0K
ICAgIC0JCWNhc2UgJ1xuJzoNCiAgICAtCQkJZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCXJldHVy
biAoYnV0dG9uID09IC0xID8gMCA6IGJ1dHRvbik7DQogICAgLQkJY2FzZSAnWCc6DQogICAgLQkJ
Y2FzZSAneCc6DQogICAgLQkJCWtleSA9IEtFWV9FU0M7DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CWNhc2UgS0VZX0VTQzoNCiAgICAtCQkJa2V5ID0gb25fa2V5X2VzYyhkaWFsb2cpOw0KICAgIC0J
CQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9SRVNJWkU6DQogICAgLQkJCWRlbHdpbihkaWFsb2cp
Ow0KICAgIC0JCQlvbl9rZXlfcmVzaXplKCk7DQogICAgLQkJCWdvdG8gZG9fcmVzaXplOw0KICAg
IC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLQlkZWx3aW4oZGlhbG9nKTsNCiAgICAtCXJldHVy
biBLRVlfRVNDOwkJLyogRVNDIHByZXNzZWQgKi8NCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlh
bG9nL21lbnVib3guYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGM5
M2RlMGIuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvbWVudWJv
eC5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDQzNyArMCwwIEBADQogICAgLS8qDQog
ICAgLSAqICBtZW51Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgbWVudSBib3gNCiAgICAtICoNCiAg
ICAtICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykNCiAg
ICAtICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRj
YXAgKHJvYWRjYXB3QGNmdy5jb20pDQogICAgLSAqDQogICAgLSAqICBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogICAgLSAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQ0KICAgIC0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlciB2ZXJzaW9uIDINCiAgICAtICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICAgIC0gKg0KICAgIC0gKiAgVGhpcyBwcm9ncmFt
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogICAg
LSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZg0KICAgIC0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KICAgIC0gKiAgR05VIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAgICAtICoNCiAgICAtICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogICAg
LSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQ0KICAgIC0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlk
Z2UsIE1BIDAyMTM5LCBVU0EuDQogICAgLSAqLw0KICAgIC0NCiAgICAtLyoNCiAgICAtICogIENo
YW5nZXMgYnkgQ2xpZmZvcmQgV29sZiAoZ29kQGNsaWZmb3JkLmF0KQ0KICAgIC0gKg0KICAgIC0g
KiAgWyAxOTk4LTA2LTEzIF0NCiAgICAtICoNCiAgICAtICogICAgKikgIEEgYnVnZml4IGZvciB0
aGUgUGFnZS1Eb3duIHByb2JsZW0NCiAgICAtICoNCiAgICAtICogICAgKikgIEZvcm1lcmx5IHdo
ZW4gSSB1c2VkIFBhZ2UgRG93biBhbmQgUGFnZSBVcCwgdGhlIGN1cnNvciB3b3VsZCBiZSBzZXQN
CiAgICAtICogICAgICAgIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUgbWVudSBib3guICBO
b3cgbHhkaWFsb2cgaXMgYSBiaXQNCiAgICAtICogICAgICAgIHNtYXJ0ZXIgYW5kIHdvcmtzIG1v
cmUgbGlrZSBvdGhlciBtZW51IHN5c3RlbXMgKGp1c3QgaGF2ZSBhIGxvb2sgYXQNCiAgICAtICog
ICAgICAgIGl0KS4NCiAgICAtICoNCiAgICAtICogICAgKikgIEZvcm1lcmx5IGlmIEkgc2VsZWN0
ZWQgc29tZXRoaW5nIG15IHNjcm9sbGluZyB3b3VsZCBiZSBicm9rZW4gYmVjYXVzZQ0KICAgIC0g
KiAgICAgICAgbHhkaWFsb2cgaXMgcmUtaW52b2tlZCBieSB0aGUgTWVudWNvbmZpZyBzaGVsbCBz
Y3JpcHQsIGNhbid0DQogICAgLSAqICAgICAgICByZW1lbWJlciB0aGUgbGFzdCBzY3JvbGxpbmcg
cG9zaXRpb24sIGFuZCBqdXN0IHNldHMgaXQgc28gdGhhdCB0aGUNCiAgICAtICogICAgICAgIGN1
cnNvciBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBib3guICBOb3cgaXQgd3JpdGVzIHRoZSB0ZW1w
b3JhcnkgZmlsZQ0KICAgIC0gKiAgICAgICAgbHhkaWFsb2cuc2NybHRtcCB3aGljaCBjb250YWlu
cyB0aGlzIGluZm9ybWF0aW9uLiBUaGUgZmlsZSBpcw0KICAgIC0gKiAgICAgICAgZGVsZXRlZCBi
eSBseGRpYWxvZyBpZiB0aGUgdXNlciBsZWF2ZXMgYSBzdWJtZW51IG9yIGVudGVycyBhIG5ldw0K
ICAgIC0gKiAgICAgICAgb25lLCBidXQgaXQgd291bGQgYmUgbmljZSBpZiBNZW51Y29uZmlnIGNv
dWxkIG1ha2UgYW5vdGhlciAicm0gLWYiDQogICAgLSAqICAgICAgICBqdXN0IHRvIGJlIHN1cmUu
ICBKdXN0IHRyeSBpdCBvdXQgLSB5b3Ugd2lsbCByZWNvZ25pc2UgYSBkaWZmZXJlbmNlIQ0KICAg
IC0gKg0KICAgIC0gKiAgWyAxOTk4LTA2LTE0IF0NCiAgICAtICoNCiAgICAtICogICAgKikgIE5v
dyBseGRpYWxvZyBpcyBjcmFzaC1zYWZlIGFnYWluc3QgYnJva2VuICJseGRpYWxvZy5zY3JsdG1w
IiBmaWxlcw0KICAgIC0gKiAgICAgICAgYW5kIG1lbnVzIGNoYW5nZSB0aGVpciBzaXplIG9uIHRo
ZSBmbHkuDQogICAgLSAqDQogICAgLSAqICAgICopICBJZiBmb3Igc29tZSByZWFzb24gdGhlIGxh
c3Qgc2Nyb2xsaW5nIHBvc2l0aW9uIGlzIG5vdCBzYXZlZCBieQ0KICAgIC0gKiAgICAgICAgbHhk
aWFsb2csIGl0IHNldHMgdGhlIHNjcm9sbGluZyBzbyB0aGF0IHRoZSBzZWxlY3RlZCBpdGVtIGlz
IGluIHRoZQ0KICAgIC0gKiAgICAgICAgbWlkZGxlIG9mIHRoZSBtZW51IGJveCwgbm90IGF0IHRo
ZSBib3R0b20uDQogICAgLSAqDQogICAgLSAqIDAyIEphbnVhcnkgMTk5OSwgTWljaGFlbCBFbGl6
YWJldGggQ2hhc3RhaW4gKG1lY0BzaG91dC5uZXQpDQogICAgLSAqIFJlc2V0ICdzY3JvbGwnIHRv
IDAgaWYgdGhlIHZhbHVlIGZyb20gbHhkaWFsb2cuc2NybHRtcCBpcyBib2d1cy4NCiAgICAtICog
VGhpcyBmaXhlcyBhIGJ1ZyBpbiBNZW51Y29uZmlnIHdoZXJlIHVzaW5nICcgJyB0byBkZXNjZW5k
IGludG8gbWVudXMNCiAgICAtICogd291bGQgbGVhdmUgbWlzLXN5bmNocm9uaXplZCBseGRpYWxv
Zy5zY3JsdG1wIGZpbGVzIGx5aW5nIGFyb3VuZCwNCiAgICAtICogZnNjYW5mIHdvdWxkIHJlYWQg
aW4gJ3Njcm9sbCcsIGFuZCBldmVudHVhbGx5IHRoYXQgdmFsdWUgd291bGQgZ2V0IHVzZWQuDQog
ICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgImRpYWxvZy5oIg0KICAgIC0NCiAgICAtc3Rh
dGljIGludCBtZW51X3dpZHRoLCBpdGVtX3g7DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBQcmlu
dCBtZW51IGl0ZW0NCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkIGRvX3ByaW50X2l0ZW0oV0lO
RE9XICogd2luLCBjb25zdCBjaGFyICppdGVtLCBpbnQgbGluZV95LA0KICAgIC0gICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBzZWxlY3RlZCwgaW50IGhvdGtleSkNCiAgICAtew0KICAgIC0J
aW50IGo7DQogICAgLQljaGFyICptZW51X2l0ZW0gPSBtYWxsb2MobWVudV93aWR0aCArIDEpOw0K
ICAgIC0NCiAgICAtCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0gaXRlbV94
KTsNCiAgICAtCW1lbnVfaXRlbVttZW51X3dpZHRoIC0gaXRlbV94XSA9ICdcMCc7DQogICAgLQlq
ID0gZmlyc3RfYWxwaGEobWVudV9pdGVtLCAiWXlObk1tSGgiKTsNCiAgICAtDQogICAgLQkvKiBD
bGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovDQogICAgLQl3YXR0cnNldCh3aW4sIGRsZy5t
ZW51Ym94LmF0cik7DQogICAgLQl3bW92ZSh3aW4sIGxpbmVfeSwgMCk7DQogICAgLSNpZiBPTERf
TkNVUlNFUw0KICAgIC0Jew0KICAgIC0JCWludCBpOw0KICAgIC0JCWZvciAoaSA9IDA7IGkgPCBt
ZW51X3dpZHRoOyBpKyspDQogICAgLQkJCXdhZGRjaCh3aW4sICcgJyk7DQogICAgLQl9DQogICAg
LSNlbHNlDQogICAgLQl3Y2xydG9lb2wod2luKTsNCiAgICAtI2VuZGlmDQogICAgLQl3YXR0cnNl
dCh3aW4sIHNlbGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDogZGxnLml0ZW0uYXRyKTsN
CiAgICAtCW12d2FkZHN0cih3aW4sIGxpbmVfeSwgaXRlbV94LCBtZW51X2l0ZW0pOw0KICAgIC0J
aWYgKGhvdGtleSkgew0KICAgIC0JCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX2tl
eV9zZWxlY3RlZC5hdHINCiAgICAtCQkJIDogZGxnLnRhZ19rZXkuYXRyKTsNCiAgICAtCQltdndh
ZGRjaCh3aW4sIGxpbmVfeSwgaXRlbV94ICsgaiwgbWVudV9pdGVtW2pdKTsNCiAgICAtCX0NCiAg
ICAtCWlmIChzZWxlY3RlZCkgew0KICAgIC0JCXdtb3ZlKHdpbiwgbGluZV95LCBpdGVtX3ggKyAx
KTsNCiAgICAtCX0NCiAgICAtCWZyZWUobWVudV9pdGVtKTsNCiAgICAtCXdyZWZyZXNoKHdpbik7
DQogICAgLX0NCiAgICAtDQogICAgLSNkZWZpbmUgcHJpbnRfaXRlbShpbmRleCwgY2hvaWNlLCBz
ZWxlY3RlZCkJCQkJXA0KICAgIC1kbyB7CQkJCQkJCQkJXA0KICAgIC0JaXRlbV9zZXQoaW5kZXgp
OwkJCQkJCVwNCiAgICAtCWRvX3ByaW50X2l0ZW0obWVudSwgaXRlbV9zdHIoKSwgY2hvaWNlLCBz
ZWxlY3RlZCwgIWl0ZW1faXNfdGFnKCc6JykpOyBcDQogICAgLX0gd2hpbGUgKDApDQogICAgLQ0K
ICAgIC0vKg0KICAgIC0gKiBQcmludCB0aGUgc2Nyb2xsIGluZGljYXRvcnMuDQogICAgLSAqLw0K
ICAgIC1zdGF0aWMgdm9pZCBwcmludF9hcnJvd3MoV0lORE9XICogd2luLCBpbnQgaXRlbV9ubywg
aW50IHNjcm9sbCwgaW50IHksIGludCB4LA0KICAgIC0JCQkgaW50IGhlaWdodCkNCiAgICAtew0K
ICAgIC0JaW50IGN1cl95LCBjdXJfeDsNCiAgICAtDQogICAgLQlnZXR5eCh3aW4sIGN1cl95LCBj
dXJfeCk7DQogICAgLQ0KICAgIC0Jd21vdmUod2luLCB5LCB4KTsNCiAgICAtDQogICAgLQlpZiAo
c2Nyb2xsID4gMCkgew0KICAgIC0JCXdhdHRyc2V0KHdpbiwgZGxnLnVhcnJvdy5hdHIpOw0KICAg
IC0JCXdhZGRjaCh3aW4sIEFDU19VQVJST1cpOw0KICAgIC0JCXdhZGRzdHIod2luLCAiKC0pIik7
DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsN
CiAgICAtCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFDU19I
TElORSk7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCQl3YWRkY2god2lu
LCBBQ1NfSExJTkUpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXkgPSB5ICsgaGVpZ2h0ICsgMTsN
CiAgICAtCXdtb3ZlKHdpbiwgeSwgeCk7DQogICAgLQl3cmVmcmVzaCh3aW4pOw0KICAgIC0NCiAg
ICAtCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGhlaWdodCA8IGl0ZW1fbm8p
KSB7DQogICAgLQkJd2F0dHJzZXQod2luLCBkbGcuZGFycm93LmF0cik7DQogICAgLQkJd2FkZGNo
KHdpbiwgQUNTX0RBUlJPVyk7DQogICAgLQkJd2FkZHN0cih3aW4sICIoKykiKTsNCiAgICAtCX0g
ZWxzZSB7DQogICAgLQkJd2F0dHJzZXQod2luLCBkbGcubWVudWJveF9ib3JkZXIuYXRyKTsNCiAg
ICAtCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFDU19ITElO
RSk7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCQl3YWRkY2god2luLCBB
Q1NfSExJTkUpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94
KTsNCiAgICAtCXdyZWZyZXNoKHdpbik7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAq
IERpc3BsYXkgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMuDQogICAgLSAqLw0KICAgIC1zdGF0aWMg
dm9pZCBwcmludF9idXR0b25zKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBp
bnQgc2VsZWN0ZWQpDQogICAgLXsNCiAgICAtCWludCB4ID0gd2lkdGggLyAyIC0gMjg7DQogICAg
LQlpbnQgeSA9IGhlaWdodCAtIDI7DQogICAgLQ0KICAgIC0JcHJpbnRfYnV0dG9uKHdpbiwgZ2V0
dGV4dCgiU2VsZWN0IiksIHksIHgsIHNlbGVjdGVkID09IDApOw0KICAgIC0JcHJpbnRfYnV0dG9u
KHdpbiwgZ2V0dGV4dCgiIEV4aXQgIiksIHksIHggKyAxMiwgc2VsZWN0ZWQgPT0gMSk7DQogICAg
LQlwcmludF9idXR0b24od2luLCBnZXR0ZXh0KCIgSGVscCAiKSwgeSwgeCArIDI0LCBzZWxlY3Rl
ZCA9PSAyKTsNCiAgICAtCXByaW50X2J1dHRvbih3aW4sIGdldHRleHQoIiBTYXZlICIpLCB5LCB4
ICsgMzYsIHNlbGVjdGVkID09IDMpOw0KICAgIC0JcHJpbnRfYnV0dG9uKHdpbiwgZ2V0dGV4dCgi
IExvYWQgIiksIHksIHggKyA0OCwgc2VsZWN0ZWQgPT0gNCk7DQogICAgLQ0KICAgIC0Jd21vdmUo
d2luLCB5LCB4ICsgMSArIDEyICogc2VsZWN0ZWQpOw0KICAgIC0Jd3JlZnJlc2god2luKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtLyogc2Nyb2xsIHVwIG4gbGluZXMgKG4gbWF5IGJlIG5lZ2F0aXZl
KSAqLw0KICAgIC1zdGF0aWMgdm9pZCBkb19zY3JvbGwoV0lORE9XICp3aW4sIGludCAqc2Nyb2xs
LCBpbnQgbikNCiAgICAtew0KICAgIC0JLyogU2Nyb2xsIG1lbnUgdXAgKi8NCiAgICAtCXNjcm9s
bG9rKHdpbiwgVFJVRSk7DQogICAgLQl3c2NybCh3aW4sIG4pOw0KICAgIC0Jc2Nyb2xsb2sod2lu
LCBGQUxTRSk7DQogICAgLQkqc2Nyb2xsID0gKnNjcm9sbCArIG47DQogICAgLQl3cmVmcmVzaCh3
aW4pOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBEaXNwbGF5IGEgbWVudSBmb3Ig
Y2hvb3NpbmcgYW1vbmcgYSBudW1iZXIgb2Ygb3B0aW9ucw0KICAgIC0gKi8NCiAgICAtaW50IGRp
YWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsDQogICAgLSAg
ICAgICAgICAgICAgICBjb25zdCB2b2lkICpzZWxlY3RlZCwgaW50ICpzX3Njcm9sbCkNCiAgICAt
ew0KICAgIC0JaW50IGksIGosIHgsIHksIGJveF94LCBib3hfeTsNCiAgICAtCWludCBoZWlnaHQs
IHdpZHRoLCBtZW51X2hlaWdodDsNCiAgICAtCWludCBrZXkgPSAwLCBidXR0b24gPSAwLCBzY3Jv
bGwgPSAwLCBjaG9pY2UgPSAwOw0KICAgIC0JaW50IGZpcnN0X2l0ZW0gPSAgMCwgbWF4X2Nob2lj
ZTsNCiAgICAtCVdJTkRPVyAqZGlhbG9nLCAqbWVudTsNCiAgICAtDQogICAgLWRvX3Jlc2l6ZToN
CiAgICAtCWhlaWdodCA9IGdldG1heHkoc3Rkc2NyKTsNCiAgICAtCXdpZHRoID0gZ2V0bWF4eChz
dGRzY3IpOw0KICAgIC0JaWYgKGhlaWdodCA8IE1FTlVCT1hfSEVJR1RIX01JTiB8fCB3aWR0aCA8
IE1FTlVCT1hfV0lEVEhfTUlOKQ0KICAgIC0JCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0K
ICAgIC0NCiAgICAtCWhlaWdodCAtPSA0Ow0KICAgIC0Jd2lkdGggIC09IDU7DQogICAgLQltZW51
X2hlaWdodCA9IGhlaWdodCAtIDEwOw0KICAgIC0NCiAgICAtCW1heF9jaG9pY2UgPSBNSU4obWVu
dV9oZWlnaHQsIGl0ZW1fY291bnQoKSk7DQogICAgLQ0KICAgIC0JLyogY2VudGVyIGRpYWxvZyBi
b3ggb24gc2NyZWVuICovDQogICAgLQl4ID0gKGdldG1heHgoc3Rkc2NyKSAtIHdpZHRoKSAvIDI7
DQogICAgLQl5ID0gKGdldG1heHkoc3Rkc2NyKSAtIGhlaWdodCkgLyAyOw0KICAgIC0NCiAgICAt
CWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0aCk7DQogICAgLQ0KICAgIC0J
ZGlhbG9nID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOw0KICAgIC0Ja2V5cGFkKGRpYWxv
ZywgVFJVRSk7DQogICAgLQ0KICAgIC0JZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdp
ZHRoLA0KICAgIC0JCSBkbGcuZGlhbG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOw0KICAgIC0Jd2F0
dHJzZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7DQogICAgLQltdndhZGRjaChkaWFsb2csIGhl
aWdodCAtIDMsIDAsIEFDU19MVEVFKTsNCiAgICAtCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIDI7
IGkrKykNCiAgICAtCQl3YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUpOw0KICAgIC0Jd2F0dHJzZXQo
ZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQogICAgLQl3YmtnZHNldChkaWFsb2csIGRsZy5kaWFs
b2cuYXRyICYgQV9DT0xPUik7DQogICAgLQl3YWRkY2goZGlhbG9nLCBBQ1NfUlRFRSk7DQogICAg
LQ0KICAgIC0JcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOw0KICAgIC0NCiAgICAt
CXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOw0KICAgIC0JcHJpbnRfYXV0b3dyYXAo
ZGlhbG9nLCBwcm9tcHQsIHdpZHRoIC0gMiwgMSwgMyk7DQogICAgLQ0KICAgIC0JbWVudV93aWR0
aCA9IHdpZHRoIC0gNjsNCiAgICAtCWJveF95ID0gaGVpZ2h0IC0gbWVudV9oZWlnaHQgLSA1Ow0K
ICAgIC0JYm94X3ggPSAod2lkdGggLSBtZW51X3dpZHRoKSAvIDIgLSAxOw0KICAgIC0NCiAgICAt
CS8qIGNyZWF0ZSBuZXcgd2luZG93IGZvciB0aGUgbWVudSAqLw0KICAgIC0JbWVudSA9IHN1Yndp
bihkaWFsb2csIG1lbnVfaGVpZ2h0LCBtZW51X3dpZHRoLA0KICAgIC0JCSAgICAgIHkgKyBib3hf
eSArIDEsIHggKyBib3hfeCArIDEpOw0KICAgIC0Ja2V5cGFkKG1lbnUsIFRSVUUpOw0KICAgIC0N
CiAgICAtCS8qIGRyYXcgYSBib3ggYXJvdW5kIHRoZSBtZW51IGl0ZW1zICovDQogICAgLQlkcmF3
X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbWVudV9oZWlnaHQgKyAyLCBtZW51X3dpZHRoICsg
MiwNCiAgICAtCQkgZGxnLm1lbnVib3hfYm9yZGVyLmF0ciwgZGxnLm1lbnVib3guYXRyKTsNCiAg
ICAtDQogICAgLQlpZiAobWVudV93aWR0aCA+PSA4MCkNCiAgICAtCQlpdGVtX3ggPSAobWVudV93
aWR0aCAtIDcwKSAvIDI7DQogICAgLQllbHNlDQogICAgLQkJaXRlbV94ID0gNDsNCiAgICAtDQog
ICAgLQkvKiBTZXQgY2hvaWNlIHRvIGRlZmF1bHQgaXRlbSAqLw0KICAgIC0JaXRlbV9mb3JlYWNo
KCkNCiAgICAtCQlpZiAoc2VsZWN0ZWQgJiYgKHNlbGVjdGVkID09IGl0ZW1fZGF0YSgpKSkNCiAg
ICAtCQkJY2hvaWNlID0gaXRlbV9uKCk7DQogICAgLQkvKiBnZXQgdGhlIHNhdmVkIHNjcm9sbCBp
bmZvICovDQogICAgLQlzY3JvbGwgPSAqc19zY3JvbGw7DQogICAgLQlpZiAoKHNjcm9sbCA8PSBj
aG9pY2UpICYmIChzY3JvbGwgKyBtYXhfY2hvaWNlID4gY2hvaWNlKSAmJg0KICAgIC0JICAgKHNj
cm9sbCA+PSAwKSAmJiAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8PSBpdGVtX2NvdW50KCkpKSB7DQog
ICAgLQkJZmlyc3RfaXRlbSA9IHNjcm9sbDsNCiAgICAtCQljaG9pY2UgPSBjaG9pY2UgLSBzY3Jv
bGw7DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCXNjcm9sbCA9IDA7DQogICAgLQl9DQogICAgLQlp
ZiAoKGNob2ljZSA+PSBtYXhfY2hvaWNlKSkgew0KICAgIC0JCWlmIChjaG9pY2UgPj0gaXRlbV9j
b3VudCgpIC0gbWF4X2Nob2ljZSAvIDIpDQogICAgLQkJCXNjcm9sbCA9IGZpcnN0X2l0ZW0gPSBp
dGVtX2NvdW50KCkgLSBtYXhfY2hvaWNlOw0KICAgIC0JCWVsc2UNCiAgICAtCQkJc2Nyb2xsID0g
Zmlyc3RfaXRlbSA9IGNob2ljZSAtIG1heF9jaG9pY2UgLyAyOw0KICAgIC0JCWNob2ljZSA9IGNo
b2ljZSAtIHNjcm9sbDsNCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBQcmludCB0aGUgbWVudSAq
Lw0KICAgIC0JZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgew0KICAgIC0JCXByaW50
X2l0ZW0oZmlyc3RfaXRlbSArIGksIGksIGkgPT0gY2hvaWNlKTsNCiAgICAtCX0NCiAgICAtDQog
ICAgLQl3bm91dHJlZnJlc2gobWVudSk7DQogICAgLQ0KICAgIC0JcHJpbnRfYXJyb3dzKGRpYWxv
ZywgaXRlbV9jb3VudCgpLCBzY3JvbGwsDQogICAgLQkJICAgICBib3hfeSwgYm94X3ggKyBpdGVt
X3ggKyAxLCBtZW51X2hlaWdodCk7DQogICAgLQ0KICAgIC0JcHJpbnRfYnV0dG9ucyhkaWFsb2cs
IGhlaWdodCwgd2lkdGgsIDApOw0KICAgIC0Jd21vdmUobWVudSwgY2hvaWNlLCBpdGVtX3ggKyAx
KTsNCiAgICAtCXdyZWZyZXNoKG1lbnUpOw0KICAgIC0NCiAgICAtCXdoaWxlIChrZXkgIT0gS0VZ
X0VTQykgew0KICAgIC0JCWtleSA9IHdnZXRjaChtZW51KTsNCiAgICAtDQogICAgLQkJaWYgKGtl
eSA8IDI1NiAmJiBpc2FscGhhKGtleSkpDQogICAgLQkJCWtleSA9IHRvbG93ZXIoa2V5KTsNCiAg
ICAtDQogICAgLQkJaWYgKHN0cmNocigieW5taCIsIGtleSkpDQogICAgLQkJCWkgPSBtYXhfY2hv
aWNlOw0KICAgIC0JCWVsc2Ugew0KICAgIC0JCQlmb3IgKGkgPSBjaG9pY2UgKyAxOyBpIDwgbWF4
X2Nob2ljZTsgaSsrKSB7DQogICAgLQkJCQlpdGVtX3NldChzY3JvbGwgKyBpKTsNCiAgICAtCQkJ
CWogPSBmaXJzdF9hbHBoYShpdGVtX3N0cigpLCAiWXlObk1tSGgiKTsNCiAgICAtCQkJCWlmIChr
ZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pdKSkNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJ
fQ0KICAgIC0JCQlpZiAoaSA9PSBtYXhfY2hvaWNlKQ0KICAgIC0JCQkJZm9yIChpID0gMDsgaSA8
IG1heF9jaG9pY2U7IGkrKykgew0KICAgIC0JCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGkpOw0KICAg
IC0JCQkJCWogPSBmaXJzdF9hbHBoYShpdGVtX3N0cigpLCAiWXlObk1tSGgiKTsNCiAgICAtCQkJ
CQlpZiAoa2V5ID09IHRvbG93ZXIoaXRlbV9zdHIoKVtqXSkpDQogICAgLQkJCQkJCWJyZWFrOw0K
ICAgIC0JCQkJfQ0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJaWYgKGl0ZW1fY291bnQoKSAhPSAw
ICYmDQogICAgLQkJICAgIChpIDwgbWF4X2Nob2ljZSB8fA0KICAgIC0JCSAgICAga2V5ID09IEtF
WV9VUCB8fCBrZXkgPT0gS0VZX0RPV04gfHwNCiAgICAtCQkgICAgIGtleSA9PSAnLScgfHwga2V5
ID09ICcrJyB8fA0KICAgIC0JCSAgICAga2V5ID09IEtFWV9QUEFHRSB8fCBrZXkgPT0gS0VZX05Q
QUdFKSkgew0KICAgIC0JCQkvKiBSZW1vdmUgaGlnaGxpZ3Qgb2YgY3VycmVudCBpdGVtICovDQog
ICAgLQkJCXByaW50X2l0ZW0oc2Nyb2xsICsgY2hvaWNlLCBjaG9pY2UsIEZBTFNFKTsNCiAgICAt
DQogICAgLQkJCWlmIChrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSAnLScpIHsNCiAgICAtCQkJCWlm
IChjaG9pY2UgPCAyICYmIHNjcm9sbCkgew0KICAgIC0JCQkJCS8qIFNjcm9sbCBtZW51IGRvd24g
Ki8NCiAgICAtCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgLTEpOw0KICAgIC0NCiAgICAt
CQkJCQlwcmludF9pdGVtKHNjcm9sbCwgMCwgRkFMU0UpOw0KICAgIC0JCQkJfSBlbHNlDQogICAg
LQkJCQkJY2hvaWNlID0gTUFYKGNob2ljZSAtIDEsIDApOw0KICAgIC0NCiAgICAtCQkJfSBlbHNl
IGlmIChrZXkgPT0gS0VZX0RPV04gfHwga2V5ID09ICcrJykgew0KICAgIC0JCQkJcHJpbnRfaXRl
bShzY3JvbGwrY2hvaWNlLCBjaG9pY2UsIEZBTFNFKTsNCiAgICAtDQogICAgLQkJCQlpZiAoKGNo
b2ljZSA+IG1heF9jaG9pY2UgLSAzKSAmJg0KICAgIC0JCQkJICAgIChzY3JvbGwgKyBtYXhfY2hv
aWNlIDwgaXRlbV9jb3VudCgpKSkgew0KICAgIC0JCQkJCS8qIFNjcm9sbCBtZW51IHVwICovDQog
ICAgLQkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIDEpOw0KICAgIC0NCiAgICAtCQkJCQlw
cmludF9pdGVtKHNjcm9sbCttYXhfY2hvaWNlIC0gMSwNCiAgICAtCQkJCQkJICAgbWF4X2Nob2lj
ZSAtIDEsIEZBTFNFKTsNCiAgICAtCQkJCX0gZWxzZQ0KICAgIC0JCQkJCWNob2ljZSA9IE1JTihj
aG9pY2UgKyAxLCBtYXhfY2hvaWNlIC0gMSk7DQogICAgLQ0KICAgIC0JCQl9IGVsc2UgaWYgKGtl
eSA9PSBLRVlfUFBBR0UpIHsNCiAgICAtCQkJCXNjcm9sbG9rKG1lbnUsIFRSVUUpOw0KICAgIC0J
CQkJZm9yIChpID0gMDsgKGkgPCBtYXhfY2hvaWNlKTsgaSsrKSB7DQogICAgLQkJCQkJaWYgKHNj
cm9sbCA+IDApIHsNCiAgICAtCQkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIC0xKTsNCiAg
ICAtCQkJCQkJcHJpbnRfaXRlbShzY3JvbGwsIDAsIEZBTFNFKTsNCiAgICAtCQkJCQl9IGVsc2Ug
ew0KICAgIC0JCQkJCQlpZiAoY2hvaWNlID4gMCkNCiAgICAtCQkJCQkJCWNob2ljZS0tOw0KICAg
IC0JCQkJCX0NCiAgICAtCQkJCX0NCiAgICAtDQogICAgLQkJCX0gZWxzZSBpZiAoa2V5ID09IEtF
WV9OUEFHRSkgew0KICAgIC0JCQkJZm9yIChpID0gMDsgKGkgPCBtYXhfY2hvaWNlKTsgaSsrKSB7
DQogICAgLQkJCQkJaWYgKHNjcm9sbCArIG1heF9jaG9pY2UgPCBpdGVtX2NvdW50KCkpIHsNCiAg
ICAtCQkJCQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIDEpOw0KICAgIC0JCQkJCQlwcmludF9p
dGVtKHNjcm9sbCttYXhfY2hvaWNlLTEsDQogICAgLQkJCQkJCQkgICBtYXhfY2hvaWNlIC0gMSwg
RkFMU0UpOw0KICAgIC0JCQkJCX0gZWxzZSB7DQogICAgLQkJCQkJCWlmIChjaG9pY2UgKyAxIDwg
bWF4X2Nob2ljZSkNCiAgICAtCQkJCQkJCWNob2ljZSsrOw0KICAgIC0JCQkJCX0NCiAgICAtCQkJ
CX0NCiAgICAtCQkJfSBlbHNlDQogICAgLQkJCQljaG9pY2UgPSBpOw0KICAgIC0NCiAgICAtCQkJ
cHJpbnRfaXRlbShzY3JvbGwgKyBjaG9pY2UsIGNob2ljZSwgVFJVRSk7DQogICAgLQ0KICAgIC0J
CQlwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX2NvdW50KCksIHNjcm9sbCwNCiAgICAtCQkJCSAg
ICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVudV9oZWlnaHQpOw0KICAgIC0NCiAgICAt
CQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7DQogICAgLQkJCXdyZWZyZXNoKG1lbnUpOw0KICAgIC0N
CiAgICAtCQkJY29udGludWU7CS8qIHdhaXQgZm9yIGFub3RoZXIga2V5IHByZXNzICovDQogICAg
LQkJfQ0KICAgIC0NCiAgICAtCQlzd2l0Y2ggKGtleSkgew0KICAgIC0JCWNhc2UgS0VZX0xFRlQ6
DQogICAgLQkJY2FzZSBUQUI6DQogICAgLQkJY2FzZSBLRVlfUklHSFQ6DQogICAgLQkJCWJ1dHRv
biA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKQ0KICAgIC0J
CQkgICAgPyA0IDogKGJ1dHRvbiA+IDQgPyAwIDogYnV0dG9uKTsNCiAgICAtDQogICAgLQkJCXBy
aW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOw0KICAgIC0JCQl3cmVm
cmVzaChtZW51KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnICc6DQogICAgLQkJY2Fz
ZSAncyc6DQogICAgLQkJY2FzZSAneSc6DQogICAgLQkJY2FzZSAnbic6DQogICAgLQkJY2FzZSAn
bSc6DQogICAgLQkJY2FzZSAnLyc6DQogICAgLQkJY2FzZSAnaCc6DQogICAgLQkJY2FzZSAnPyc6
DQogICAgLQkJY2FzZSAneic6DQogICAgLQkJY2FzZSAnXG4nOg0KICAgIC0JCQkvKiBzYXZlIHNj
cm9sbCBpbmZvICovDQogICAgLQkJCSpzX3Njcm9sbCA9IHNjcm9sbDsNCiAgICAtCQkJZGVsd2lu
KG1lbnUpOw0KICAgIC0JCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAtCQkJaXRlbV9zZXQoc2Nyb2xs
ICsgY2hvaWNlKTsNCiAgICAtCQkJaXRlbV9zZXRfc2VsZWN0ZWQoMSk7DQogICAgLQkJCXN3aXRj
aCAoa2V5KSB7DQogICAgLQkJCWNhc2UgJ2gnOg0KICAgIC0JCQljYXNlICc/JzoNCiAgICAtCQkJ
CXJldHVybiAyOw0KICAgIC0JCQljYXNlICdzJzoNCiAgICAtCQkJY2FzZSAneSc6DQogICAgLQkJ
CQlyZXR1cm4gNTsNCiAgICAtCQkJY2FzZSAnbic6DQogICAgLQkJCQlyZXR1cm4gNjsNCiAgICAt
CQkJY2FzZSAnbSc6DQogICAgLQkJCQlyZXR1cm4gNzsNCiAgICAtCQkJY2FzZSAnICc6DQogICAg
LQkJCQlyZXR1cm4gODsNCiAgICAtCQkJY2FzZSAnLyc6DQogICAgLQkJCQlyZXR1cm4gOTsNCiAg
ICAtCQkJY2FzZSAneic6DQogICAgLQkJCQlyZXR1cm4gMTA7DQogICAgLQkJCWNhc2UgJ1xuJzoN
CiAgICAtCQkJCXJldHVybiBidXR0b247DQogICAgLQkJCX0NCiAgICAtCQkJcmV0dXJuIDA7DQog
ICAgLQkJY2FzZSAnZSc6DQogICAgLQkJY2FzZSAneCc6DQogICAgLQkJCWtleSA9IEtFWV9FU0M7
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX0VTQzoNCiAgICAtCQkJa2V5ID0gb25f
a2V5X2VzYyhtZW51KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfUkVTSVpFOg0K
ICAgIC0JCQlvbl9rZXlfcmVzaXplKCk7DQogICAgLQkJCWRlbHdpbihtZW51KTsNCiAgICAtCQkJ
ZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCWdvdG8gZG9fcmVzaXplOw0KICAgIC0JCX0NCiAgICAt
CX0NCiAgICAtCWRlbHdpbihtZW51KTsNCiAgICAtCWRlbHdpbihkaWFsb2cpOw0KICAgIC0JcmV0
dXJuIGtleTsJCS8qIEVTQyBwcmVzc2VkICovDQogICAgLX0NCiAgICBkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3guYyBiL3N1cHBvcnQva2NvbmZpZy9seGRpYWxv
Zy90ZXh0Ym94LmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAxNzcz
MzE5Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3gu
Yw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw0MDggKzAsMCBAQA0KICAgIC0vKg0KICAg
IC0gKiAgdGV4dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIHRleHQgYm94DQogICAgLSAqDQogICAg
LSAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQogICAg
LSAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2Fw
IChyb2FkY2FwQGNmdy5jb20pDQogICAgLSAqDQogICAgLSAqICBUaGlzIHByb2dyYW0gaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQogICAgLSAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0K
ICAgIC0gKiAgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlciB2ZXJzaW9uIDINCiAgICAtICogIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICAgIC0gKg0KICAgIC0gKiAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQogICAgLSAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZg0KICAgIC0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KICAgIC0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4NCiAgICAtICoNCiAgICAtICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogICAgLSAq
ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQ0KICAgIC0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2Us
IE1BIDAyMTM5LCBVU0EuDQogICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgImRpYWxvZy5o
Ig0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbik7DQogICAgLXN0YXRp
YyB2b2lkIHByaW50X3BhZ2UoV0lORE9XICp3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgdXBk
YXRlX3RleHRfZm4NCiAgICAtCQkgICAgICAgdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpOw0KICAg
IC1zdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqd2luLCBpbnQgcm93LCBpbnQgd2lkdGgp
Ow0KICAgIC1zdGF0aWMgY2hhciAqZ2V0X2xpbmUodm9pZCk7DQogICAgLXN0YXRpYyB2b2lkIHBy
aW50X3Bvc2l0aW9uKFdJTkRPVyAqIHdpbik7DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGhzY3Jv
bGw7DQogICAgLXN0YXRpYyBpbnQgYmVnaW5fcmVhY2hlZCwgZW5kX3JlYWNoZWQsIHBhZ2VfbGVu
Z3RoOw0KICAgIC1zdGF0aWMgY2hhciAqYnVmOw0KICAgIC1zdGF0aWMgY2hhciAqcGFnZTsNCiAg
ICAtDQogICAgLS8qDQogICAgLSAqIHJlZnJlc2ggd2luZG93IGNvbnRlbnQNCiAgICAtICovDQog
ICAgLXN0YXRpYyB2b2lkIHJlZnJlc2hfdGV4dF9ib3goV0lORE9XICpkaWFsb2csIFdJTkRPVyAq
Ym94LCBpbnQgYm94aCwgaW50IGJveHcsDQogICAgLQkJCSAgICAgaW50IGN1cl95LCBpbnQgY3Vy
X3gsIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LA0KICAgIC0JCQkgICAgIHZvaWQgKmRhdGEp
DQogICAgLXsNCiAgICAtCXByaW50X3BhZ2UoYm94LCBib3hoLCBib3h3LCB1cGRhdGVfdGV4dCwg
ZGF0YSk7DQogICAgLQlwcmludF9wb3NpdGlvbihkaWFsb2cpOw0KICAgIC0Jd21vdmUoZGlhbG9n
LCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLw0KICAgIC0Jd3Jl
ZnJlc2goZGlhbG9nKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIERp
c3BsYXkgdGV4dCBmcm9tIGEgZmlsZSBpbiBhIGRpYWxvZyBib3guDQogICAgLSAqDQogICAgLSAq
IGtleXMgaXMgYSBudWxsLXRlcm1pbmF0ZWQgYXJyYXkNCiAgICAtICogdXBkYXRlX3RleHQoKSBt
YXkgbm90IGFkZCBvciByZW1vdmUgYW55ICdcbicgb3IgJ1wwJyBpbiB0YnVmDQogICAgLSAqLw0K
ICAgIC1pbnQgZGlhbG9nX3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRidWYsIGlu
dCBpbml0aWFsX2hlaWdodCwNCiAgICAtCQkgICBpbnQgaW5pdGlhbF93aWR0aCwgaW50ICprZXlz
LCBpbnQgKl92c2Nyb2xsLCBpbnQgKl9oc2Nyb2xsLA0KICAgIC0JCSAgIHVwZGF0ZV90ZXh0X2Zu
IHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKQ0KICAgIC17DQogICAgLQlpbnQgaSwgeCwgeSwgY3Vy
X3gsIGN1cl95LCBrZXkgPSAwOw0KICAgIC0JaW50IGhlaWdodCwgd2lkdGgsIGJveGgsIGJveHc7
DQogICAgLQlXSU5ET1cgKmRpYWxvZywgKmJveDsNCiAgICAtCWJvb2wgZG9uZSA9IGZhbHNlOw0K
ICAgIC0NCiAgICAtCWJlZ2luX3JlYWNoZWQgPSAxOw0KICAgIC0JZW5kX3JlYWNoZWQgPSAwOw0K
ICAgIC0JcGFnZV9sZW5ndGggPSAwOw0KICAgIC0JaHNjcm9sbCA9IDA7DQogICAgLQlidWYgPSB0
YnVmOw0KICAgIC0JcGFnZSA9IGJ1ZjsJLyogcGFnZSBpcyBwb2ludGVyIHRvIHN0YXJ0IG9mIHBh
Z2UgdG8gYmUgZGlzcGxheWVkICovDQogICAgLQ0KICAgIC0JaWYgKF92c2Nyb2xsICYmICpfdnNj
cm9sbCkgew0KICAgIC0JCWJlZ2luX3JlYWNoZWQgPSAwOw0KICAgIC0NCiAgICAtCQlmb3IgKGkg
PSAwOyBpIDwgKl92c2Nyb2xsOyBpKyspDQogICAgLQkJCWdldF9saW5lKCk7DQogICAgLQl9DQog
ICAgLQlpZiAoX2hzY3JvbGwpDQogICAgLQkJaHNjcm9sbCA9ICpfaHNjcm9sbDsNCiAgICAtDQog
ICAgLWRvX3Jlc2l6ZToNCiAgICAtCWdldG1heHl4KHN0ZHNjciwgaGVpZ2h0LCB3aWR0aCk7DQog
ICAgLQlpZiAoaGVpZ2h0IDwgVEVYVEJPWF9IRUlHVEhfTUlOIHx8IHdpZHRoIDwgVEVYVEJPWF9X
SURUSF9NSU4pDQogICAgLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7DQogICAgLQlpZiAo
aW5pdGlhbF9oZWlnaHQgIT0gMCkNCiAgICAtCQloZWlnaHQgPSBpbml0aWFsX2hlaWdodDsNCiAg
ICAtCWVsc2UNCiAgICAtCQlpZiAoaGVpZ2h0ID4gNCkNCiAgICAtCQkJaGVpZ2h0IC09IDQ7DQog
ICAgLQkJZWxzZQ0KICAgIC0JCQloZWlnaHQgPSAwOw0KICAgIC0JaWYgKGluaXRpYWxfd2lkdGgg
IT0gMCkNCiAgICAtCQl3aWR0aCA9IGluaXRpYWxfd2lkdGg7DQogICAgLQllbHNlDQogICAgLQkJ
aWYgKHdpZHRoID4gNSkNCiAgICAtCQkJd2lkdGggLT0gNTsNCiAgICAtCQllbHNlDQogICAgLQkJ
CXdpZHRoID0gMDsNCiAgICAtDQogICAgLQkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4g
Ki8NCiAgICAtCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsNCiAgICAtCXkgPSAo
Z2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7DQogICAgLQ0KICAgIC0JZHJhd19zaGFkb3co
c3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsNCiAgICAtDQogICAgLQlkaWFsb2cgPSBuZXd3
aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7DQogICAgLQlrZXlwYWQoZGlhbG9nLCBUUlVFKTsNCiAg
ICAtDQogICAgLQkvKiBDcmVhdGUgd2luZG93IGZvciBib3ggcmVnaW9uLCB1c2VkIGZvciBzY3Jv
bGxpbmcgdGV4dCAqLw0KICAgIC0JYm94aCA9IGhlaWdodCAtIDQ7DQogICAgLQlib3h3ID0gd2lk
dGggLSAyOw0KICAgIC0JYm94ID0gc3Vid2luKGRpYWxvZywgYm94aCwgYm94dywgeSArIDEsIHgg
KyAxKTsNCiAgICAtCXdhdHRyc2V0KGJveCwgZGxnLmRpYWxvZy5hdHIpOw0KICAgIC0Jd2JrZ2Rz
ZXQoYm94LCBkbGcuZGlhbG9nLmF0ciAmIEFfQ09MT1IpOw0KICAgIC0NCiAgICAtCWtleXBhZChi
b3gsIFRSVUUpOw0KICAgIC0NCiAgICAtCS8qIHJlZ2lzdGVyIHRoZSBuZXcgd2luZG93LCBhbG9u
ZyB3aXRoIGl0cyBib3JkZXJzICovDQogICAgLQlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdo
dCwgd2lkdGgsDQogICAgLQkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7DQogICAg
LQ0KICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7DQogICAgLQltdndhZGRj
aChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsNCiAgICAtCWZvciAoaSA9IDA7IGkg
PCB3aWR0aCAtIDI7IGkrKykNCiAgICAtCQl3YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUpOw0KICAg
IC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQogICAgLQl3YmtnZHNldChkaWFs
b2csIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7DQogICAgLQl3YWRkY2goZGlhbG9nLCBBQ1Nf
UlRFRSk7DQogICAgLQ0KICAgIC0JcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lkdGgpOw0K
ICAgIC0NCiAgICAtCXByaW50X2J1dHRvbihkaWFsb2csIGdldHRleHQoIiBFeGl0ICIpLCBoZWln
aHQgLSAyLCB3aWR0aCAvIDIgLSA0LCBUUlVFKTsNCiAgICAtCXdub3V0cmVmcmVzaChkaWFsb2cp
Ow0KICAgIC0JZ2V0eXgoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBTYXZlIGN1cnNvciBwb3Np
dGlvbiAqLw0KICAgIC0NCiAgICAtCS8qIFByaW50IGZpcnN0IHBhZ2Ugb2YgdGV4dCAqLw0KICAg
IC0JYXR0cl9jbGVhcihib3gsIGJveGgsIGJveHcsIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAtCXJl
ZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LCBjdXJfeCwgdXBk
YXRlX3RleHQsDQogICAgLQkJCSBkYXRhKTsNCiAgICAtDQogICAgLQl3aGlsZSAoIWRvbmUpIHsN
CiAgICAtCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsNCiAgICAtCQlzd2l0Y2ggKGtleSkgew0KICAg
IC0JCWNhc2UgJ0UnOgkvKiBFeGl0ICovDQogICAgLQkJY2FzZSAnZSc6DQogICAgLQkJY2FzZSAn
WCc6DQogICAgLQkJY2FzZSAneCc6DQogICAgLQkJY2FzZSAncSc6DQogICAgLQkJY2FzZSAnXG4n
Og0KICAgIC0JCQlkb25lID0gdHJ1ZTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnZyc6
CS8qIEZpcnN0IHBhZ2UgKi8NCiAgICAtCQljYXNlIEtFWV9IT01FOg0KICAgIC0JCQlpZiAoIWJl
Z2luX3JlYWNoZWQpIHsNCiAgICAtCQkJCWJlZ2luX3JlYWNoZWQgPSAxOw0KICAgIC0JCQkJcGFn
ZSA9IGJ1ZjsNCiAgICAtCQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJv
eHcsDQogICAgLQkJCQkJCSBjdXJfeSwgY3VyX3gsIHVwZGF0ZV90ZXh0LA0KICAgIC0JCQkJCQkg
ZGF0YSk7DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnRyc6CS8qIExh
c3QgcGFnZSAqLw0KICAgIC0JCWNhc2UgS0VZX0VORDoNCiAgICAtDQogICAgLQkJCWVuZF9yZWFj
aGVkID0gMTsNCiAgICAtCQkJLyogcG9pbnQgdG8gbGFzdCBjaGFyIGluIGJ1ZiAqLw0KICAgIC0J
CQlwYWdlID0gYnVmICsgc3RybGVuKGJ1Zik7DQogICAgLQkJCWJhY2tfbGluZXMoYm94aCk7DQog
ICAgLQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LA0K
ICAgIC0JCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgIC0JCQlicmVhazsNCiAg
ICAtCQljYXNlICdLJzoJLyogUHJldmlvdXMgbGluZSAqLw0KICAgIC0JCWNhc2UgJ2snOg0KICAg
IC0JCWNhc2UgS0VZX1VQOg0KICAgIC0JCQlpZiAoYmVnaW5fcmVhY2hlZCkNCiAgICAtCQkJCWJy
ZWFrOw0KICAgIC0NCiAgICAtCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCArIDEpOw0KICAgIC0J
CQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICAt
CQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
Y2FzZSAnQic6CS8qIFByZXZpb3VzIHBhZ2UgKi8NCiAgICAtCQljYXNlICdiJzoNCiAgICAtCQlj
YXNlICd1JzoNCiAgICAtCQljYXNlIEtFWV9QUEFHRToNCiAgICAtCQkJaWYgKGJlZ2luX3JlYWNo
ZWQpDQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCArIGJv
eGgpOw0KICAgIC0JCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBj
dXJfeSwNCiAgICAtCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJl
YWs7DQogICAgLQkJY2FzZSAnSic6CS8qIE5leHQgbGluZSAqLw0KICAgIC0JCWNhc2UgJ2onOg0K
ICAgIC0JCWNhc2UgS0VZX0RPV046DQogICAgLQkJCWlmIChlbmRfcmVhY2hlZCkNCiAgICAtCQkJ
CWJyZWFrOw0KICAgIC0NCiAgICAtCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCAtIDEpOw0KICAg
IC0JCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAg
ICAtCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAg
LQkJY2FzZSBLRVlfTlBBR0U6CS8qIE5leHQgcGFnZSAqLw0KICAgIC0JCWNhc2UgJyAnOg0KICAg
IC0JCWNhc2UgJ2QnOg0KICAgIC0JCQlpZiAoZW5kX3JlYWNoZWQpDQogICAgLQkJCQlicmVhazsN
CiAgICAtDQogICAgLQkJCWJlZ2luX3JlYWNoZWQgPSAwOw0KICAgIC0JCQlyZWZyZXNoX3RleHRf
Ym94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICAtCQkJCQkgY3VyX3gsIHVw
ZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnMCc6CS8qIEJl
Z2lubmluZyBvZiBsaW5lICovDQogICAgLQkJY2FzZSAnSCc6CS8qIFNjcm9sbCBsZWZ0ICovDQog
ICAgLQkJY2FzZSAnaCc6DQogICAgLQkJY2FzZSBLRVlfTEVGVDoNCiAgICAtCQkJaWYgKGhzY3Jv
bGwgPD0gMCkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0NCiAgICAtCQkJaWYgKGtleSA9PSAnMCcp
DQogICAgLQkJCQloc2Nyb2xsID0gMDsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJaHNjcm9sbC0t
Ow0KICAgIC0JCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5
ICovDQogICAgLQkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGgpOw0KICAgIC0JCQlyZWZyZXNoX3Rl
eHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICAtCQkJCQkgY3VyX3gs
IHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnTCc6CS8q
IFNjcm9sbCByaWdodCAqLw0KICAgIC0JCWNhc2UgJ2wnOg0KICAgIC0JCWNhc2UgS0VZX1JJR0hU
Og0KICAgIC0JCQlpZiAoaHNjcm9sbCA+PSBNQVhfTEVOKQ0KICAgIC0JCQkJYnJlYWs7DQogICAg
LQkJCWhzY3JvbGwrKzsNCiAgICAtCQkJLyogUmVwcmludCBjdXJyZW50IHBhZ2UgdG8gc2Nyb2xs
IGhvcml6b250YWxseSAqLw0KICAgIC0JCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsNCiAgICAt
CQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksDQogICAg
LQkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CWNhc2UgS0VZX0VTQzoNCiAgICAtCQkJaWYgKG9uX2tleV9lc2MoZGlhbG9nKSA9PSBLRVlfRVND
KQ0KICAgIC0JCQkJZG9uZSA9IHRydWU7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZ
X1JFU0laRToNCiAgICAtCQkJYmFja19saW5lcyhoZWlnaHQpOw0KICAgIC0JCQlkZWx3aW4oYm94
KTsNCiAgICAtCQkJZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCW9uX2tleV9yZXNpemUoKTsNCiAg
ICAtCQkJZ290byBkb19yZXNpemU7DQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJZm9yIChpID0g
MDsga2V5c1tpXTsgaSsrKSB7DQogICAgLQkJCQlpZiAoa2V5ID09IGtleXNbaV0pIHsNCiAgICAt
CQkJCQlkb25lID0gdHJ1ZTsNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJCX0NCiAgICAtCQkJ
fQ0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWRlbHdpbihib3gpOw0KICAgIC0JZGVsd2luKGRp
YWxvZyk7DQogICAgLQlpZiAoX3ZzY3JvbGwpIHsNCiAgICAtCQljb25zdCBjaGFyICpzOw0KICAg
IC0NCiAgICAtCQlzID0gYnVmOw0KICAgIC0JCSpfdnNjcm9sbCA9IDA7DQogICAgLQkJYmFja19s
aW5lcyhwYWdlX2xlbmd0aCk7DQogICAgLQkJd2hpbGUgKHMgPCBwYWdlICYmIChzID0gc3RyY2hy
KHMsICdcbicpKSkgew0KICAgIC0JCQkoKl92c2Nyb2xsKSsrOw0KICAgIC0JCQlzKys7DQogICAg
LQkJfQ0KICAgIC0JfQ0KICAgIC0JaWYgKF9oc2Nyb2xsKQ0KICAgIC0JCSpfaHNjcm9sbCA9IGhz
Y3JvbGw7DQogICAgLQlyZXR1cm4ga2V5Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0g
KiBHbyBiYWNrICduJyBsaW5lcyBpbiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKS4N
CiAgICAtICogJ3BhZ2UnIHdpbGwgYmUgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZGVzaXJlZCBs
aW5lIGluICdidWYnLg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQg
bikNCiAgICAtew0KICAgIC0JaW50IGk7DQogICAgLQ0KICAgIC0JYmVnaW5fcmVhY2hlZCA9IDA7
DQogICAgLQkvKiBHbyBiYWNrICduJyBsaW5lcyAqLw0KICAgIC0JZm9yIChpID0gMDsgaSA8IG47
IGkrKykgew0KICAgIC0JCWlmICgqcGFnZSA9PSAnXDAnKSB7DQogICAgLQkJCWlmIChlbmRfcmVh
Y2hlZCkgew0KICAgIC0JCQkJZW5kX3JlYWNoZWQgPSAwOw0KICAgIC0JCQkJY29udGludWU7DQog
ICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQkJaWYgKHBhZ2UgPT0gYnVmKSB7DQogICAgLQkJCWJl
Z2luX3JlYWNoZWQgPSAxOw0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0JCXBhZ2Ut
LTsNCiAgICAtCQlkbyB7DQogICAgLQkJCWlmIChwYWdlID09IGJ1Zikgew0KICAgIC0JCQkJYmVn
aW5fcmVhY2hlZCA9IDE7DQogICAgLQkJCQlyZXR1cm47DQogICAgLQkJCX0NCiAgICAtCQkJcGFn
ZS0tOw0KICAgIC0JCX0gd2hpbGUgKCpwYWdlICE9ICdcbicpOw0KICAgIC0JCXBhZ2UrKzsNCiAg
ICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogUHJpbnQgYSBuZXcgcGFnZSBv
ZiB0ZXh0Lg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5ET1cgKndp
biwgaW50IGhlaWdodCwgaW50IHdpZHRoLCB1cGRhdGVfdGV4dF9mbg0KICAgIC0JCSAgICAgICB1
cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkNCiAgICAtew0KICAgIC0JaW50IGksIHBhc3NlZF9lbmQg
PSAwOw0KICAgIC0NCiAgICAtCWlmICh1cGRhdGVfdGV4dCkgew0KICAgIC0JCWNoYXIgKmVuZDsN
CiAgICAtDQogICAgLQkJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKQ0KICAgIC0JCQlnZXRf
bGluZSgpOw0KICAgIC0JCWVuZCA9IHBhZ2U7DQogICAgLQkJYmFja19saW5lcyhoZWlnaHQpOw0K
ICAgIC0JCXVwZGF0ZV90ZXh0KGJ1ZiwgcGFnZSAtIGJ1ZiwgZW5kIC0gYnVmLCBkYXRhKTsNCiAg
ICAtCX0NCiAgICAtDQogICAgLQlwYWdlX2xlbmd0aCA9IDA7DQogICAgLQlmb3IgKGkgPSAwOyBp
IDwgaGVpZ2h0OyBpKyspIHsNCiAgICAtCQlwcmludF9saW5lKHdpbiwgaSwgd2lkdGgpOw0KICAg
IC0JCWlmICghcGFzc2VkX2VuZCkNCiAgICAtCQkJcGFnZV9sZW5ndGgrKzsNCiAgICAtCQlpZiAo
ZW5kX3JlYWNoZWQgJiYgIXBhc3NlZF9lbmQpDQogICAgLQkJCXBhc3NlZF9lbmQgPSAxOw0KICAg
IC0JfQ0KICAgIC0Jd25vdXRyZWZyZXNoKHdpbik7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQog
ICAgLSAqIFByaW50IGEgbmV3IGxpbmUgb2YgdGV4dC4NCiAgICAtICovDQogICAgLXN0YXRpYyB2
b2lkIHByaW50X2xpbmUoV0lORE9XICogd2luLCBpbnQgcm93LCBpbnQgd2lkdGgpDQogICAgLXsN
CiAgICAtCWNoYXIgKmxpbmU7DQogICAgLQ0KICAgIC0JbGluZSA9IGdldF9saW5lKCk7DQogICAg
LQlsaW5lICs9IE1JTihzdHJsZW4obGluZSksIGhzY3JvbGwpOwkvKiBTY3JvbGwgaG9yaXpvbnRh
bGx5ICovDQogICAgLQl3bW92ZSh3aW4sIHJvdywgMCk7CS8qIG1vdmUgY3Vyc29yIHRvIGNvcnJl
Y3QgbGluZSAqLw0KICAgIC0Jd2FkZGNoKHdpbiwgJyAnKTsNCiAgICAtCXdhZGRuc3RyKHdpbiwg
bGluZSwgTUlOKHN0cmxlbihsaW5lKSwgd2lkdGggLSAyKSk7DQogICAgLQ0KICAgIC0JLyogQ2xl
YXIgJ3Jlc2lkdWUnIG9mIHByZXZpb3VzIGxpbmUgKi8NCiAgICAtI2lmIE9MRF9OQ1VSU0VTDQog
ICAgLQl7DQogICAgLQkJaW50IHggPSBnZXRjdXJ4KHdpbik7DQogICAgLQkJaW50IGk7DQogICAg
LQkJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0geDsgaSsrKQ0KICAgIC0JCQl3YWRkY2god2luLCAn
ICcpOw0KICAgIC0JfQ0KICAgIC0jZWxzZQ0KICAgIC0Jd2NscnRvZW9sKHdpbik7DQogICAgLSNl
bmRpZg0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBSZXR1cm4gY3VycmVudCBsaW5l
IG9mIHRleHQuIENhbGxlZCBieSBkaWFsb2dfdGV4dGJveCgpIGFuZCBwcmludF9saW5lKCkuDQog
ICAgLSAqICdwYWdlJyBzaG91bGQgcG9pbnQgdG8gc3RhcnQgb2YgY3VycmVudCBsaW5lIGJlZm9y
ZSBjYWxsaW5nLCBhbmQgd2lsbCBiZQ0KICAgIC0gKiB1cGRhdGVkIHRvIHBvaW50IHRvIHN0YXJ0
IG9mIG5leHQgbGluZS4NCiAgICAtICovDQogICAgLXN0YXRpYyBjaGFyICpnZXRfbGluZSh2b2lk
KQ0KICAgIC17DQogICAgLQlpbnQgaSA9IDA7DQogICAgLQlzdGF0aWMgY2hhciBsaW5lW01BWF9M
RU4gKyAxXTsNCiAgICAtDQogICAgLQllbmRfcmVhY2hlZCA9IDA7DQogICAgLQl3aGlsZSAoKnBh
Z2UgIT0gJ1xuJykgew0KICAgIC0JCWlmICgqcGFnZSA9PSAnXDAnKSB7DQogICAgLQkJCWVuZF9y
ZWFjaGVkID0gMTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfSBlbHNlIGlmIChpIDwgTUFYX0xF
TikNCiAgICAtCQkJbGluZVtpKytdID0gKihwYWdlKyspOw0KICAgIC0JCWVsc2Ugew0KICAgIC0J
CQkvKiBUcnVuY2F0ZSBsaW5lcyBsb25nZXIgdGhhbiBNQVhfTEVOIGNoYXJhY3RlcnMgKi8NCiAg
ICAtCQkJaWYgKGkgPT0gTUFYX0xFTikNCiAgICAtCQkJCWxpbmVbaSsrXSA9ICdcMCc7DQogICAg
LQkJCXBhZ2UrKzsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlpZiAoaSA8PSBNQVhfTEVOKQ0K
ICAgIC0JCWxpbmVbaV0gPSAnXDAnOw0KICAgIC0JaWYgKCFlbmRfcmVhY2hlZCkNCiAgICAtCQlw
YWdlKys7CQkvKiBtb3ZlIHBhc3QgJ1xuJyAqLw0KICAgIC0NCiAgICAtCXJldHVybiBsaW5lOw0K
ICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBQcmludCBjdXJyZW50IHBvc2l0aW9uDQog
ICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9wb3NpdGlvbihXSU5ET1cgKiB3aW4pDQog
ICAgLXsNCiAgICAtCWludCBwZXJjZW50Ow0KICAgIC0NCiAgICAtCXdhdHRyc2V0KHdpbiwgZGxn
LnBvc2l0aW9uX2luZGljYXRvci5hdHIpOw0KICAgIC0Jd2JrZ2RzZXQod2luLCBkbGcucG9zaXRp
b25faW5kaWNhdG9yLmF0ciAmIEFfQ09MT1IpOw0KICAgIC0JcGVyY2VudCA9IChwYWdlIC0gYnVm
KSAqIDEwMCAvIHN0cmxlbihidWYpOw0KICAgIC0Jd21vdmUod2luLCBnZXRtYXh5KHdpbikgLSAz
LCBnZXRtYXh4KHdpbikgLSA5KTsNCiAgICAtCXdwcmludHcod2luLCAiKCUzZCUlKSIsIHBlcmNl
bnQpOw0KICAgIC19DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy91
dGlsLmMgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jDQogICAgZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggNThhODI4OS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBv
cnQva2NvbmZpZy9seGRpYWxvZy91dGlsLmMNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEs
NzEzICswLDAgQEANCiAgICAtLyoNCiAgICAtICogIHV0aWwuYw0KICAgIC0gKg0KICAgIC0gKiAg
T1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQ0KICAgIC0gKiAg
TU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9h
ZGNhcEBjZncuY29tKQ0KICAgIC0gKg0KICAgIC0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICAgIC0gKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAgICAt
ICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg
dmVyc2lvbiAyDQogICAgLSAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4NCiAgICAtICoNCiAgICAtICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICAgIC0gKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YNCiAgICAtICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUNCiAgICAtICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuDQogICAgLSAqDQogICAgLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICAgIC0gKiAgYWxv
bmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUN
CiAgICAtICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAw
MjEzOSwgVVNBLg0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxzdGRhcmcuaD4NCiAg
ICAtDQogICAgLSNpbmNsdWRlICJkaWFsb2cuaCINCiAgICAtDQogICAgLS8qIE5lZWRlZCBpbiBz
aWduYWwgaGFuZGxlciBpbiBtY29uZi5jICovDQogICAgLWludCBzYXZlZF94LCBzYXZlZF95Ow0K
ICAgIC0NCiAgICAtc3RydWN0IGRpYWxvZ19pbmZvIGRsZzsNCiAgICAtDQogICAgLXN0YXRpYyB2
b2lkIHNldF9tb25vX3RoZW1lKHZvaWQpDQogICAgLXsNCiAgICAtCWRsZy5zY3JlZW4uYXRyID0g
QV9OT1JNQUw7DQogICAgLQlkbGcuc2hhZG93LmF0ciA9IEFfTk9STUFMOw0KICAgIC0JZGxnLmRp
YWxvZy5hdHIgPSBBX05PUk1BTDsNCiAgICAtCWRsZy50aXRsZS5hdHIgPSBBX0JPTEQ7DQogICAg
LQlkbGcuYm9yZGVyLmF0ciA9IEFfTk9STUFMOw0KICAgIC0JZGxnLmJ1dHRvbl9hY3RpdmUuYXRy
ID0gQV9SRVZFUlNFOw0KICAgIC0JZGxnLmJ1dHRvbl9pbmFjdGl2ZS5hdHIgPSBBX0RJTTsNCiAg
ICAtCWRsZy5idXR0b25fa2V5X2FjdGl2ZS5hdHIgPSBBX1JFVkVSU0U7DQogICAgLQlkbGcuYnV0
dG9uX2tleV9pbmFjdGl2ZS5hdHIgPSBBX0JPTEQ7DQogICAgLQlkbGcuYnV0dG9uX2xhYmVsX2Fj
dGl2ZS5hdHIgPSBBX1JFVkVSU0U7DQogICAgLQlkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlLmF0
ciA9IEFfTk9STUFMOw0KICAgIC0JZGxnLmlucHV0Ym94LmF0ciA9IEFfTk9STUFMOw0KICAgIC0J
ZGxnLmlucHV0Ym94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsNCiAgICAtCWRsZy5zZWFyY2hib3gu
YXRyID0gQV9OT1JNQUw7DQogICAgLQlkbGcuc2VhcmNoYm94X3RpdGxlLmF0ciA9IEFfQk9MRDsN
CiAgICAtCWRsZy5zZWFyY2hib3hfYm9yZGVyLmF0ciA9IEFfTk9STUFMOw0KICAgIC0JZGxnLnBv
c2l0aW9uX2luZGljYXRvci5hdHIgPSBBX0JPTEQ7DQogICAgLQlkbGcubWVudWJveC5hdHIgPSBB
X05PUk1BTDsNCiAgICAtCWRsZy5tZW51Ym94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsNCiAgICAt
CWRsZy5pdGVtLmF0ciA9IEFfTk9STUFMOw0KICAgIC0JZGxnLml0ZW1fc2VsZWN0ZWQuYXRyID0g
QV9SRVZFUlNFOw0KICAgIC0JZGxnLnRhZy5hdHIgPSBBX0JPTEQ7DQogICAgLQlkbGcudGFnX3Nl
bGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsNCiAgICAtCWRsZy50YWdfa2V5LmF0ciA9IEFfQk9MRDsN
CiAgICAtCWRsZy50YWdfa2V5X3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJTRTsNCiAgICAtCWRsZy5j
aGVjay5hdHIgPSBBX0JPTEQ7DQogICAgLQlkbGcuY2hlY2tfc2VsZWN0ZWQuYXRyID0gQV9SRVZF
UlNFOw0KICAgIC0JZGxnLnVhcnJvdy5hdHIgPSBBX0JPTEQ7DQogICAgLQlkbGcuZGFycm93LmF0
ciA9IEFfQk9MRDsNCiAgICAtfQ0KICAgIC0NCiAgICAtI2RlZmluZSBETEdfQ09MT1IoZGlhbG9n
LCBmLCBiLCBoKSBcDQogICAgLWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K
ICAgIC0JZGxnLmRpYWxvZy5mZyA9IChmKTsgICAgICAgXA0KICAgIC0JZGxnLmRpYWxvZy5iZyA9
IChiKTsgICAgICAgXA0KICAgIC0JZGxnLmRpYWxvZy5obCA9IChoKTsgICAgICAgXA0KICAgIC19
IHdoaWxlICgwKQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgc2V0X2NsYXNzaWNfdGhlbWUodm9p
ZCkNCiAgICAtew0KICAgIC0JRExHX0NPTE9SKHNjcmVlbiwgICAgICAgICAgICAgICAgQ09MT1Jf
Q1lBTiwgICBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHNoYWRvdywgICAg
ICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9CTEFDSywgIHRydWUpOw0KICAgIC0JRExH
X0NPTE9SKGRpYWxvZywgICAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwg
IGZhbHNlKTsNCiAgICAtCURMR19DT0xPUih0aXRsZSwgICAgICAgICAgICAgICAgIENPTE9SX1lF
TExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihib3JkZXIsICAgICAg
ICAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICAtCURMR19D
T0xPUihidXR0b25fYWN0aXZlLCAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0
cnVlKTsNCiAgICAtCURMR19DT0xPUihidXR0b25faW5hY3RpdmUsICAgICAgIENPTE9SX0JMQUNL
LCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IoYnV0dG9uX2tleV9hY3Rp
dmUsICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7DQogICAgLQlETEdfQ09M
T1IoYnV0dG9uX2tleV9pbmFjdGl2ZSwgICBDT0xPUl9SRUQsICAgIENPTE9SX1dISVRFLCAgZmFs
c2UpOw0KICAgIC0JRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9hY3RpdmUsICAgQ09MT1JfWUVMTE9X
LCBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9pbmFj
dGl2ZSwgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIHRydWUpOw0KICAgIC0JRExHX0NPTE9S
KGlucHV0Ym94LCAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNl
KTsNCiAgICAtCURMR19DT0xPUihpbnB1dGJveF9ib3JkZXIsICAgICAgIENPTE9SX0JMQUNLLCAg
Q09MT1JfV0hJVEUsICBmYWxzZSk7DQogICAgLQlETEdfQ09MT1Ioc2VhcmNoYm94LCAgICAgICAg
ICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9S
KHNlYXJjaGJveF90aXRsZSwgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUp
Ow0KICAgIC0JRExHX0NPTE9SKHNlYXJjaGJveF9ib3JkZXIsICAgICAgQ09MT1JfV0hJVEUsICBD
T0xPUl9XSElURSwgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHBvc2l0aW9uX2luZGljYXRvciwg
ICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKG1l
bnVib3gsICAgICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsN
CiAgICAtCURMR19DT0xPUihtZW51Ym94X2JvcmRlciwgICAgICAgIENPTE9SX1dISVRFLCAgQ09M
T1JfV0hJVEUsICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihpdGVtLCAgICAgICAgICAgICAgICAg
IENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IoaXRl
bV9zZWxlY3RlZCwgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7DQog
ICAgLQlETEdfQ09MT1IodGFnLCAgICAgICAgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9S
X1dISVRFLCAgdHJ1ZSk7DQogICAgLQlETEdfQ09MT1IodGFnX3NlbGVjdGVkLCAgICAgICAgICBD
T0xPUl9ZRUxMT1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7DQogICAgLQlETEdfQ09MT1IodGFnX2tl
eSwgICAgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAg
LQlETEdfQ09MT1IodGFnX2tleV9zZWxlY3RlZCwgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JM
VUUsICAgdHJ1ZSk7DQogICAgLQlETEdfQ09MT1IoY2hlY2ssICAgICAgICAgICAgICAgICBDT0xP
Ul9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKGNoZWNrX3Nl
bGVjdGVkLCAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAgIC0J
RExHX0NPTE9SKHVhcnJvdywgICAgICAgICAgICAgICAgQ09MT1JfR1JFRU4sICBDT0xPUl9XSElU
RSwgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKGRhcnJvdywgICAgICAgICAgICAgICAgQ09MT1Jf
R1JFRU4sICBDT0xPUl9XSElURSwgIHRydWUpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZCBzZXRfYmxhY2tiZ190aGVtZSh2b2lkKQ0KICAgIC17DQogICAgLQlETEdfQ09MT1Ioc2Ny
ZWVuLCBDT0xPUl9SRUQsICAgQ09MT1JfQkxBQ0ssIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHNo
YWRvdywgQ09MT1JfQkxBQ0ssIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgLQlETEdfQ09MT1Io
ZGlhbG9nLCBDT0xPUl9XSElURSwgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAtCURMR19DT0xP
Uih0aXRsZSwgIENPTE9SX1JFRCwgICBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgIC0JRExHX0NP
TE9SKGJvcmRlciwgQ09MT1JfQkxBQ0ssIENPTE9SX0JMQUNLLCB0cnVlKTsNCiAgICAtDQogICAg
LQlETEdfQ09MT1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JF
RCwgICBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IoYnV0dG9uX2luYWN0aXZlLCAgICAgICBDT0xP
Ul9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IoYnV0dG9uX2tl
eV9hY3RpdmUsICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsNCiAgICAtCURM
R19DT0xPUihidXR0b25fa2V5X2luYWN0aXZlLCAgIENPTE9SX1JFRCwgICAgQ09MT1JfQkxBQ0ss
IGZhbHNlKTsNCiAgICAtCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCAgIENPTE9SX1dI
SVRFLCAgQ09MT1JfUkVELCAgIGZhbHNlKTsNCiAgICAtCURMR19DT0xPUihidXR0b25fbGFiZWxf
aW5hY3RpdmUsIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssIHRydWUpOw0KICAgIC0NCiAgICAt
CURMR19DT0xPUihpbnB1dGJveCwgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBm
YWxzZSk7DQogICAgLQlETEdfQ09MT1IoaW5wdXRib3hfYm9yZGVyLCAgQ09MT1JfWUVMTE9XLCBD
T0xPUl9CTEFDSywgZmFsc2UpOw0KICAgIC0NCiAgICAtCURMR19DT0xPUihzZWFyY2hib3gsICAg
ICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgLQlETEdfQ09MT1Io
c2VhcmNoYm94X3RpdGxlLCAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgdHJ1ZSk7DQogICAg
LQlETEdfQ09MT1Ioc2VhcmNoYm94X2JvcmRlciwgQ09MT1JfQkxBQ0ssICBDT0xPUl9CTEFDSywg
dHJ1ZSk7DQogICAgLQ0KICAgIC0JRExHX0NPTE9SKHBvc2l0aW9uX2luZGljYXRvciwgQ09MT1Jf
UkVELCBDT0xPUl9CTEFDSywgIGZhbHNlKTsNCiAgICAtDQogICAgLQlETEdfQ09MT1IobWVudWJv
eCwgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgIC0JRExH
X0NPTE9SKG1lbnVib3hfYm9yZGVyLCAgIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssIHRydWUp
Ow0KICAgIC0NCiAgICAtCURMR19DT0xPUihpdGVtLCAgICAgICAgICAgICBDT0xPUl9XSElURSwg
Q09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAtCURMR19DT0xPUihpdGVtX3NlbGVjdGVkLCAgICBD
T0xPUl9XSElURSwgQ09MT1JfUkVELCAgIGZhbHNlKTsNCiAgICAtDQogICAgLQlETEdfQ09MT1Io
dGFnLCAgICAgICAgICAgICAgQ09MT1JfUkVELCAgICBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAg
IC0JRExHX0NPTE9SKHRhZ19zZWxlY3RlZCwgICAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAg
IHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHRhZ19rZXksICAgICAgICAgIENPTE9SX1JFRCwgICAg
Q09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAtCURMR19DT0xPUih0YWdfa2V5X3NlbGVjdGVkLCBD
T0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0cnVlKTsNCiAgICAtDQogICAgLQlETEdfQ09MT1Io
Y2hlY2ssICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAg
IC0JRExHX0NPTE9SKGNoZWNrX3NlbGVjdGVkLCAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAg
IHRydWUpOw0KICAgIC0NCiAgICAtCURMR19DT0xPUih1YXJyb3csIENPTE9SX1JFRCwgQ09MT1Jf
QkxBQ0ssIGZhbHNlKTsNCiAgICAtCURMR19DT0xPUihkYXJyb3csIENPTE9SX1JFRCwgQ09MT1Jf
QkxBQ0ssIGZhbHNlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgc2V0X2JsdWV0
aXRsZV90aGVtZSh2b2lkKQ0KICAgIC17DQogICAgLQlzZXRfY2xhc3NpY190aGVtZSgpOw0KICAg
IC0JRExHX0NPTE9SKHRpdGxlLCAgICAgICAgICAgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJ
VEUsIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKGJ1dHRvbl9rZXlfYWN0aXZlLCAgIENPTE9SX1lF
TExPVywgQ09MT1JfQkxVRSwgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9h
Y3RpdmUsIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgIHRydWUpOw0KICAgIC0JRExHX0NPTE9S
KHNlYXJjaGJveF90aXRsZSwgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOw0K
ICAgIC0JRExHX0NPTE9SKHBvc2l0aW9uX2luZGljYXRvciwgIENPTE9SX0JMVUUsICAgQ09MT1Jf
V0hJVEUsIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHRhZywgICAgICAgICAgICAgICAgIENPTE9S
X0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHRhZ19rZXksICAg
ICAgICAgICAgIENPTE9SX0JMVUUsICAgQ09MT1JfV0hJVEUsIHRydWUpOw0KICAgIC0NCiAgICAt
fQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogU2VsZWN0IGNvbG9yIHRoZW1lDQogICAgLSAqLw0K
ICAgIC1zdGF0aWMgaW50IHNldF90aGVtZShjb25zdCBjaGFyICp0aGVtZSkNCiAgICAtew0KICAg
IC0JaW50IHVzZV9jb2xvciA9IDE7DQogICAgLQlpZiAoIXRoZW1lKQ0KICAgIC0JCXNldF9ibHVl
dGl0bGVfdGhlbWUoKTsNCiAgICAtCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwgImNsYXNzaWMiKSA9
PSAwKQ0KICAgIC0JCXNldF9jbGFzc2ljX3RoZW1lKCk7DQogICAgLQllbHNlIGlmIChzdHJjbXAo
dGhlbWUsICJibHVldGl0bGUiKSA9PSAwKQ0KICAgIC0JCXNldF9ibHVldGl0bGVfdGhlbWUoKTsN
CiAgICAtCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwgImJsYWNrYmciKSA9PSAwKQ0KICAgIC0JCXNl
dF9ibGFja2JnX3RoZW1lKCk7DQogICAgLQllbHNlIGlmIChzdHJjbXAodGhlbWUsICJtb25vIikg
PT0gMCkNCiAgICAtCQl1c2VfY29sb3IgPSAwOw0KICAgIC0NCiAgICAtCXJldHVybiB1c2VfY29s
b3I7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGluaXRfb25lX2NvbG9yKHN0cnVj
dCBkaWFsb2dfY29sb3IgKmNvbG9yKQ0KICAgIC17DQogICAgLQlzdGF0aWMgaW50IHBhaXIgPSAw
Ow0KICAgIC0NCiAgICAtCXBhaXIrKzsNCiAgICAtCWluaXRfcGFpcihwYWlyLCBjb2xvci0+Zmcs
IGNvbG9yLT5iZyk7DQogICAgLQlpZiAoY29sb3ItPmhsKQ0KICAgIC0JCWNvbG9yLT5hdHIgPSBB
X0JPTEQgfCBDT0xPUl9QQUlSKHBhaXIpOw0KICAgIC0JZWxzZQ0KICAgIC0JCWNvbG9yLT5hdHIg
PSBDT0xPUl9QQUlSKHBhaXIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBpbml0
X2RpYWxvZ19jb2xvcnModm9pZCkNCiAgICAtew0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5z
Y3JlZW4pOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5zaGFkb3cpOw0KICAgIC0JaW5pdF9v
bmVfY29sb3IoJmRsZy5kaWFsb2cpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy50aXRsZSk7
DQogICAgLQlpbml0X29uZV9jb2xvcigmZGxnLmJvcmRlcik7DQogICAgLQlpbml0X29uZV9jb2xv
cigmZGxnLmJ1dHRvbl9hY3RpdmUpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25f
aW5hY3RpdmUpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fa2V5X2FjdGl2ZSk7
DQogICAgLQlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUpOw0KICAgIC0J
aW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fbGFiZWxfYWN0aXZlKTsNCiAgICAtCWluaXRfb25l
X2NvbG9yKCZkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlKTsNCiAgICAtCWluaXRfb25lX2NvbG9y
KCZkbGcuaW5wdXRib3gpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5pbnB1dGJveF9ib3Jk
ZXIpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5zZWFyY2hib3gpOw0KICAgIC0JaW5pdF9v
bmVfY29sb3IoJmRsZy5zZWFyY2hib3hfdGl0bGUpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRs
Zy5zZWFyY2hib3hfYm9yZGVyKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcucG9zaXRpb25f
aW5kaWNhdG9yKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcubWVudWJveCk7DQogICAgLQlp
bml0X29uZV9jb2xvcigmZGxnLm1lbnVib3hfYm9yZGVyKTsNCiAgICAtCWluaXRfb25lX2NvbG9y
KCZkbGcuaXRlbSk7DQogICAgLQlpbml0X29uZV9jb2xvcigmZGxnLml0ZW1fc2VsZWN0ZWQpOw0K
ICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy50YWcpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRs
Zy50YWdfc2VsZWN0ZWQpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy50YWdfa2V5KTsNCiAg
ICAtCWluaXRfb25lX2NvbG9yKCZkbGcudGFnX2tleV9zZWxlY3RlZCk7DQogICAgLQlpbml0X29u
ZV9jb2xvcigmZGxnLmNoZWNrKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcuY2hlY2tfc2Vs
ZWN0ZWQpOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy51YXJyb3cpOw0KICAgIC0JaW5pdF9v
bmVfY29sb3IoJmRsZy5kYXJyb3cpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBT
ZXR1cCBmb3IgY29sb3IgZGlzcGxheQ0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgY29sb3Jf
c2V0dXAoY29uc3QgY2hhciAqdGhlbWUpDQogICAgLXsNCiAgICAtCWludCB1c2VfY29sb3I7DQog
ICAgLQ0KICAgIC0JdXNlX2NvbG9yID0gc2V0X3RoZW1lKHRoZW1lKTsNCiAgICAtCWlmICh1c2Vf
Y29sb3IgJiYgaGFzX2NvbG9ycygpKSB7DQogICAgLQkJc3RhcnRfY29sb3IoKTsNCiAgICAtCQlp
bml0X2RpYWxvZ19jb2xvcnMoKTsNCiAgICAtCX0gZWxzZQ0KICAgIC0JCXNldF9tb25vX3RoZW1l
KCk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIFNldCB3aW5kb3cgdG8gYXR0cmli
dXRlICdhdHRyJw0KICAgIC0gKi8NCiAgICAtdm9pZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwg
aW50IGhlaWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYXR0cikNCiAgICAtew0KICAgIC0JaW50IGks
IGo7DQogICAgLQ0KICAgIC0Jd2F0dHJzZXQod2luLCBhdHRyKTsNCiAgICAtCWZvciAoaSA9IDA7
IGkgPCBoZWlnaHQ7IGkrKykgew0KICAgIC0JCXdtb3ZlKHdpbiwgaSwgMCk7DQogICAgLQkJZm9y
IChqID0gMDsgaiA8IHdpZHRoOyBqKyspDQogICAgLQkJCXdhZGRjaCh3aW4sICcgJyk7DQogICAg
LQl9DQogICAgLQl0b3VjaHdpbih3aW4pOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIGRpYWxv
Z19jbGVhcih2b2lkKQ0KICAgIC17DQogICAgLQlpbnQgbGluZXMsIGNvbHVtbnM7DQogICAgLQ0K
ICAgIC0JbGluZXMgPSBnZXRtYXh5KHN0ZHNjcik7DQogICAgLQljb2x1bW5zID0gZ2V0bWF4eChz
dGRzY3IpOw0KICAgIC0NCiAgICAtCWF0dHJfY2xlYXIoc3Rkc2NyLCBsaW5lcywgY29sdW1ucywg
ZGxnLnNjcmVlbi5hdHIpOw0KICAgIC0JLyogRGlzcGxheSBiYWNrZ3JvdW5kIHRpdGxlIGlmIGl0
IGV4aXN0cyAuLi4gLSBTTEggKi8NCiAgICAtCWlmIChkbGcuYmFja3RpdGxlICE9IE5VTEwpIHsN
CiAgICAtCQlpbnQgaSwgbGVuID0gMCwgc2tpcCA9IDA7DQogICAgLQkJc3RydWN0IHN1YnRpdGxl
X2xpc3QgKnBvczsNCiAgICAtDQogICAgLQkJd2F0dHJzZXQoc3Rkc2NyLCBkbGcuc2NyZWVuLmF0
cik7DQogICAgLQkJbXZ3YWRkc3RyKHN0ZHNjciwgMCwgMSwgKGNoYXIgKilkbGcuYmFja3RpdGxl
KTsNCiAgICAtDQogICAgLQkJZm9yIChwb3MgPSBkbGcuc3VidGl0bGVzOyBwb3MgIT0gTlVMTDsg
cG9zID0gcG9zLT5uZXh0KSB7DQogICAgLQkJCS8qIDMgaXMgZm9yIHRoZSBhcnJvdyBhbmQgc3Bh
Y2VzICovDQogICAgLQkJCWxlbiArPSBzdHJsZW4ocG9zLT50ZXh0KSArIDM7DQogICAgLQkJfQ0K
ICAgIC0NCiAgICAtCQl3bW92ZShzdGRzY3IsIDEsIDEpOw0KICAgIC0JCWlmIChsZW4gPiBjb2x1
bW5zIC0gMikgew0KICAgIC0JCQljb25zdCBjaGFyICplbGxpcHNpcyA9ICJbLi4uXSAiOw0KICAg
IC0JCQl3YWRkc3RyKHN0ZHNjciwgZWxsaXBzaXMpOw0KICAgIC0JCQlza2lwID0gbGVuIC0gKGNv
bHVtbnMgLSAyIC0gc3RybGVuKGVsbGlwc2lzKSk7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlm
b3IgKHBvcyA9IGRsZy5zdWJ0aXRsZXM7IHBvcyAhPSBOVUxMOyBwb3MgPSBwb3MtPm5leHQpIHsN
CiAgICAtCQkJaWYgKHNraXAgPT0gMCkNCiAgICAtCQkJCXdhZGRjaChzdGRzY3IsIEFDU19SQVJS
T1cpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQlza2lwLS07DQogICAgLQ0KICAgIC0JCQlpZiAo
c2tpcCA9PSAwKQ0KICAgIC0JCQkJd2FkZGNoKHN0ZHNjciwgJyAnKTsNCiAgICAtCQkJZWxzZQ0K
ICAgIC0JCQkJc2tpcC0tOw0KICAgIC0NCiAgICAtCQkJaWYgKHNraXAgPCBzdHJsZW4ocG9zLT50
ZXh0KSkgew0KICAgIC0JCQkJd2FkZHN0cihzdGRzY3IsIHBvcy0+dGV4dCArIHNraXApOw0KICAg
IC0JCQkJc2tpcCA9IDA7DQogICAgLQkJCX0gZWxzZQ0KICAgIC0JCQkJc2tpcCAtPSBzdHJsZW4o
cG9zLT50ZXh0KTsNCiAgICAtDQogICAgLQkJCWlmIChza2lwID09IDApDQogICAgLQkJCQl3YWRk
Y2goc3Rkc2NyLCAnICcpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQlza2lwLS07DQogICAgLQkJ
fQ0KICAgIC0NCiAgICAtCQlmb3IgKGkgPSBsZW4gKyAxOyBpIDwgY29sdW1ucyAtIDE7IGkrKykN
CiAgICAtCQkJd2FkZGNoKHN0ZHNjciwgQUNTX0hMSU5FKTsNCiAgICAtCX0NCiAgICAtCXdub3V0
cmVmcmVzaChzdGRzY3IpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBEbyBzb21l
IGluaXRpYWxpemF0aW9uIGZvciBkaWFsb2cNCiAgICAtICovDQogICAgLWludCBpbml0X2RpYWxv
Zyhjb25zdCBjaGFyICpiYWNrdGl0bGUpDQogICAgLXsNCiAgICAtCWludCBoZWlnaHQsIHdpZHRo
Ow0KICAgIC0NCiAgICAtCWluaXRzY3IoKTsJCS8qIEluaXQgY3Vyc2VzICovDQogICAgLQ0KICAg
IC0JLyogR2V0IGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uIGZvciBzaWduYWwgaGFuZGxlciBpbiBt
Y29uZi5jICovDQogICAgLQlnZXR5eChzdGRzY3IsIHNhdmVkX3ksIHNhdmVkX3gpOw0KICAgIC0N
CiAgICAtCWdldG1heHl4KHN0ZHNjciwgaGVpZ2h0LCB3aWR0aCk7DQogICAgLQlpZiAoaGVpZ2h0
IDwgV0lORE9XX0hFSUdUSF9NSU4gfHwgd2lkdGggPCBXSU5ET1dfV0lEVEhfTUlOKSB7DQogICAg
LQkJZW5kd2luKCk7DQogICAgLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JZGxnLmJhY2t0aXRsZSA9IGJhY2t0aXRsZTsNCiAgICAtCWNvbG9yX3Nl
dHVwKGdldGVudigiTUVOVUNPTkZJR19DT0xPUiIpKTsNCiAgICAtDQogICAgLQlrZXlwYWQoc3Rk
c2NyLCBUUlVFKTsNCiAgICAtCWNicmVhaygpOw0KICAgIC0Jbm9lY2hvKCk7DQogICAgLQlkaWFs
b2dfY2xlYXIoKTsNCiAgICAtDQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAt
dm9pZCBzZXRfZGlhbG9nX2JhY2t0aXRsZShjb25zdCBjaGFyICpiYWNrdGl0bGUpDQogICAgLXsN
CiAgICAtCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7DQogICAgLX0NCiAgICAtDQogICAgLXZv
aWQgc2V0X2RpYWxvZ19zdWJ0aXRsZXMoc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlcykN
CiAgICAtew0KICAgIC0JZGxnLnN1YnRpdGxlcyA9IHN1YnRpdGxlczsNCiAgICAtfQ0KICAgIC0N
CiAgICAtLyoNCiAgICAtICogRW5kIHVzaW5nIGRpYWxvZyBmdW5jdGlvbnMuDQogICAgLSAqLw0K
ICAgIC12b2lkIGVuZF9kaWFsb2coaW50IHgsIGludCB5KQ0KICAgIC17DQogICAgLQkvKiBtb3Zl
IGN1cnNvciBiYWNrIHRvIG9yaWdpbmFsIHBvc2l0aW9uICovDQogICAgLQltb3ZlKHksIHgpOw0K
ICAgIC0JcmVmcmVzaCgpOw0KICAgIC0JZW5kd2luKCk7DQogICAgLX0NCiAgICAtDQogICAgLS8q
IFByaW50IHRoZSB0aXRsZSBvZiB0aGUgZGlhbG9nLiBDZW50ZXIgdGhlIHRpdGxlIGFuZCB0cnVu
Y2F0ZQ0KICAgIC0gKiB0aWxlIGlmIHdpZGVyIHRoYW4gZGlhbG9nICgtIDIgY2hhcnMpLg0KICAg
IC0gKiovDQogICAgLXZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2csIGNvbnN0IGNoYXIg
KnRpdGxlLCBpbnQgd2lkdGgpDQogICAgLXsNCiAgICAtCWlmICh0aXRsZSkgew0KICAgIC0JCWlu
dCB0bGVuID0gTUlOKHdpZHRoIC0gMiwgc3RybGVuKHRpdGxlKSk7DQogICAgLQkJd2F0dHJzZXQo
ZGlhbG9nLCBkbGcudGl0bGUuYXRyKTsNCiAgICAtCQltdndhZGRjaChkaWFsb2csIDAsICh3aWR0
aCAtIHRsZW4pIC8gMiAtIDEsICcgJyk7DQogICAgLQkJbXZ3YWRkbnN0cihkaWFsb2csIDAsICh3
aWR0aCAtIHRsZW4pLzIsIHRpdGxlLCB0bGVuKTsNCiAgICAtCQl3YWRkY2goZGlhbG9nLCAnICcp
Ow0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBQcmludCBhIHN0cmlu
ZyBvZiB0ZXh0IGluIGEgd2luZG93LCBhdXRvbWF0aWNhbGx5IHdyYXAgYXJvdW5kIHRvIHRoZQ0K
ICAgIC0gKiBuZXh0IGxpbmUgaWYgdGhlIHN0cmluZyBpcyB0b28gbG9uZyB0byBmaXQgb24gb25l
IGxpbmUuIE5ld2xpbmUNCiAgICAtICogY2hhcmFjdGVycyAnXG4nIGFyZSBwcm9wcGVybHkgcHJv
Y2Vzc2VkLiAgV2Ugc3RhcnQgb24gYSBuZXcgbGluZQ0KICAgIC0gKiBpZiB0aGVyZSBpcyBubyBy
b29tIGZvciBhdCBsZWFzdCA0IG5vbmJsYW5rcyBmb2xsb3dpbmcgYSBkb3VibGUtc3BhY2UuDQog
ICAgLSAqLw0KICAgIC12b2lkIHByaW50X2F1dG93cmFwKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hh
ciAqcHJvbXB0LCBpbnQgd2lkdGgsIGludCB5LCBpbnQgeCkNCiAgICAtew0KICAgIC0JaW50IG5l
d2wsIGN1cl94LCBjdXJfeTsNCiAgICAtCWludCBwcm9tcHRfbGVuLCByb29tLCB3bGVuOw0KICAg
IC0JY2hhciB0ZW1wc3RyW01BWF9MRU4gKyAxXSwgKndvcmQsICpzcCwgKnNwMiwgKm5ld2xpbmVf
c2VwYXJhdG9yID0gMDsNCiAgICAtDQogICAgLQlzdHJjcHkodGVtcHN0ciwgcHJvbXB0KTsNCiAg
ICAtDQogICAgLQlwcm9tcHRfbGVuID0gc3RybGVuKHRlbXBzdHIpOw0KICAgIC0NCiAgICAtCWlm
IChwcm9tcHRfbGVuIDw9IHdpZHRoIC0geCAqIDIpIHsJLyogSWYgcHJvbXB0IGlzIHNob3J0ICov
DQogICAgLQkJd21vdmUod2luLCB5LCAod2lkdGggLSBwcm9tcHRfbGVuKSAvIDIpOw0KICAgIC0J
CXdhZGRzdHIod2luLCB0ZW1wc3RyKTsNCiAgICAtCX0gZWxzZSB7DQogICAgLQkJY3VyX3ggPSB4
Ow0KICAgIC0JCWN1cl95ID0geTsNCiAgICAtCQluZXdsID0gMTsNCiAgICAtCQl3b3JkID0gdGVt
cHN0cjsNCiAgICAtCQl3aGlsZSAod29yZCAmJiAqd29yZCkgew0KICAgIC0JCQlzcCA9IHN0cnBi
cmsod29yZCwgIlxuICIpOw0KICAgIC0JCQlpZiAoc3AgJiYgKnNwID09ICdcbicpDQogICAgLQkJ
CQluZXdsaW5lX3NlcGFyYXRvciA9IHNwOw0KICAgIC0NCiAgICAtCQkJaWYgKHNwKQ0KICAgIC0J
CQkJKnNwKysgPSAwOw0KICAgIC0NCiAgICAtCQkJLyogV3JhcCB0byBuZXh0IGxpbmUgaWYgZWl0
aGVyIHRoZSB3b3JkIGRvZXMgbm90IGZpdCwNCiAgICAtCQkJICAgb3IgaXQgaXMgdGhlIGZpcnN0
IHdvcmQgb2YgYSBuZXcgc2VudGVuY2UsIGFuZCBpdCBpcw0KICAgIC0JCQkgICBzaG9ydCwgYW5k
IHRoZSBuZXh0IHdvcmQgZG9lcyBub3QgZml0LiAqLw0KICAgIC0JCQlyb29tID0gd2lkdGggLSBj
dXJfeDsNCiAgICAtCQkJd2xlbiA9IHN0cmxlbih3b3JkKTsNCiAgICAtCQkJaWYgKHdsZW4gPiBy
b29tIHx8DQogICAgLQkJCSAgICAobmV3bCAmJiB3bGVuIDwgNCAmJiBzcA0KICAgIC0JCQkgICAg
ICYmIHdsZW4gKyAxICsgc3RybGVuKHNwKSA+IHJvb20NCiAgICAtCQkJICAgICAmJiAoIShzcDIg
PSBzdHJwYnJrKHNwLCAiXG4gIikpDQogICAgLQkJCQkgfHwgd2xlbiArIDEgKyAoc3AyIC0gc3Ap
ID4gcm9vbSkpKSB7DQogICAgLQkJCQljdXJfeSsrOw0KICAgIC0JCQkJY3VyX3ggPSB4Ow0KICAg
IC0JCQl9DQogICAgLQkJCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsNCiAgICAtCQkJd2FkZHN0
cih3aW4sIHdvcmQpOw0KICAgIC0JCQlnZXR5eCh3aW4sIGN1cl95LCBjdXJfeCk7DQogICAgLQ0K
ICAgIC0JCQkvKiBNb3ZlIHRvIHRoZSBuZXh0IGxpbmUgaWYgdGhlIHdvcmQgc2VwYXJhdG9yIHdh
cyBhIG5ld2xpbmUgKi8NCiAgICAtCQkJaWYgKG5ld2xpbmVfc2VwYXJhdG9yKSB7DQogICAgLQkJ
CQljdXJfeSsrOw0KICAgIC0JCQkJY3VyX3ggPSB4Ow0KICAgIC0JCQkJbmV3bGluZV9zZXBhcmF0
b3IgPSAwOw0KICAgIC0JCQl9IGVsc2UNCiAgICAtCQkJCWN1cl94Kys7DQogICAgLQ0KICAgIC0J
CQlpZiAoc3AgJiYgKnNwID09ICcgJykgew0KICAgIC0JCQkJY3VyX3grKzsJLyogZG91YmxlIHNw
YWNlICovDQogICAgLQkJCQl3aGlsZSAoKisrc3AgPT0gJyAnKSA7DQogICAgLQkJCQluZXdsID0g
MTsNCiAgICAtCQkJfSBlbHNlDQogICAgLQkJCQluZXdsID0gMDsNCiAgICAtCQkJd29yZCA9IHNw
Ow0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogUHJp
bnQgYSBidXR0b24NCiAgICAtICovDQogICAgLXZvaWQgcHJpbnRfYnV0dG9uKFdJTkRPVyAqIHdp
biwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5LCBpbnQgeCwgaW50IHNlbGVjdGVkKQ0KICAgIC17
DQogICAgLQlpbnQgaSwgdGVtcDsNCiAgICAtDQogICAgLQl3bW92ZSh3aW4sIHksIHgpOw0KICAg
IC0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fYWN0aXZlLmF0cg0KICAgIC0J
CSA6IGRsZy5idXR0b25faW5hY3RpdmUuYXRyKTsNCiAgICAtCXdhZGRzdHIod2luLCAiPCIpOw0K
ICAgIC0JdGVtcCA9IHN0cnNwbihsYWJlbCwgIiAiKTsNCiAgICAtCWxhYmVsICs9IHRlbXA7DQog
ICAgLQl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUuYXRy
DQogICAgLQkJIDogZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIpOw0KICAgIC0JZm9yIChp
ID0gMDsgaSA8IHRlbXA7IGkrKykNCiAgICAtCQl3YWRkY2god2luLCAnICcpOw0KICAgIC0Jd2F0
dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fa2V5X2FjdGl2ZS5hdHINCiAgICAtCQkg
OiBkbGcuYnV0dG9uX2tleV9pbmFjdGl2ZS5hdHIpOw0KICAgIC0Jd2FkZGNoKHdpbiwgbGFiZWxb
MF0pOw0KICAgIC0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fbGFiZWxfYWN0
aXZlLmF0cg0KICAgIC0JCSA6IGRsZy5idXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyKTsNCiAgICAt
CXdhZGRzdHIod2luLCAoY2hhciAqKWxhYmVsICsgMSk7DQogICAgLQl3YXR0cnNldCh3aW4sIHNl
bGVjdGVkID8gZGxnLmJ1dHRvbl9hY3RpdmUuYXRyDQogICAgLQkJIDogZGxnLmJ1dHRvbl9pbmFj
dGl2ZS5hdHIpOw0KICAgIC0Jd2FkZHN0cih3aW4sICI+Iik7DQogICAgLQl3bW92ZSh3aW4sIHks
IHggKyB0ZW1wICsgMSk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIERyYXcgYSBy
ZWN0YW5ndWxhciBib3ggd2l0aCBsaW5lIGRyYXdpbmcgY2hhcmFjdGVycw0KICAgIC0gKi8NCiAg
ICAtdm9pZA0KICAgIC1kcmF3X2JveChXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhl
aWdodCwgaW50IHdpZHRoLA0KICAgIC0JIGNodHlwZSBib3gsIGNodHlwZSBib3JkZXIpDQogICAg
LXsNCiAgICAtCWludCBpLCBqOw0KICAgIC0NCiAgICAtCXdhdHRyc2V0KHdpbiwgMCk7DQogICAg
LQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsNCiAgICAtCQl3bW92ZSh3aW4sIHkgKyBp
LCB4KTsNCiAgICAtCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykNCiAgICAtCQkJaWYgKCFp
ICYmICFqKQ0KICAgIC0JCQkJd2FkZGNoKHdpbiwgYm9yZGVyIHwgQUNTX1VMQ09STkVSKTsNCiAg
ICAtCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmICFqKQ0KICAgIC0JCQkJd2FkZGNoKHdp
biwgYm9yZGVyIHwgQUNTX0xMQ09STkVSKTsNCiAgICAtCQkJZWxzZSBpZiAoIWkgJiYgaiA9PSB3
aWR0aCAtIDEpDQogICAgLQkJCQl3YWRkY2god2luLCBib3ggfCBBQ1NfVVJDT1JORVIpOw0KICAg
IC0JCQllbHNlIGlmIChpID09IGhlaWdodCAtIDEgJiYgaiA9PSB3aWR0aCAtIDEpDQogICAgLQkJ
CQl3YWRkY2god2luLCBib3ggfCBBQ1NfTFJDT1JORVIpOw0KICAgIC0JCQllbHNlIGlmICghaSkN
CiAgICAtCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19ITElORSk7DQogICAgLQkJCWVsc2Ug
aWYgKGkgPT0gaGVpZ2h0IC0gMSkNCiAgICAtCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19ITElO
RSk7DQogICAgLQkJCWVsc2UgaWYgKCFqKQ0KICAgIC0JCQkJd2FkZGNoKHdpbiwgYm9yZGVyIHwg
QUNTX1ZMSU5FKTsNCiAgICAtCQkJZWxzZSBpZiAoaiA9PSB3aWR0aCAtIDEpDQogICAgLQkJCQl3
YWRkY2god2luLCBib3ggfCBBQ1NfVkxJTkUpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQl3YWRk
Y2god2luLCBib3ggfCAnICcpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAg
IC0gKiBEcmF3IHNoYWRvd3MgYWxvbmcgdGhlIHJpZ2h0IGFuZCBib3R0b20gZWRnZSB0byBnaXZl
IGEgbW9yZSAzRCBsb29rDQogICAgLSAqIHRvIHRoZSBib3hlcw0KICAgIC0gKi8NCiAgICAtdm9p
ZCBkcmF3X3NoYWRvdyhXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50
IHdpZHRoKQ0KICAgIC17DQogICAgLQlpbnQgaTsNCiAgICAtDQogICAgLQlpZiAoaGFzX2NvbG9y
cygpKSB7CS8qIFdoZXRoZXIgdGVybWluYWwgc3VwcG9ydHMgY29sb3I/ICovDQogICAgLQkJd2F0
dHJzZXQod2luLCBkbGcuc2hhZG93LmF0cik7DQogICAgLQkJd21vdmUod2luLCB5ICsgaGVpZ2h0
LCB4ICsgMik7DQogICAgLQkJZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspDQogICAgLQkJCXdh
ZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBBX0NIQVJURVhUKTsNCiAgICAtCQlmb3IgKGkgPSB5ICsg
MTsgaSA8IHkgKyBoZWlnaHQgKyAxOyBpKyspIHsNCiAgICAtCQkJd21vdmUod2luLCBpLCB4ICsg
d2lkdGgpOw0KICAgIC0JCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7DQog
ICAgLQkJCXdhZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBBX0NIQVJURVhUKTsNCiAgICAtCQl9DQog
ICAgLQkJd25vdXRyZWZyZXNoKHdpbik7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLS8q
DQogICAgLSAqICBSZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJzdCBhbHBoYWJldGljIGNo
YXJhY3RlciBpbiBhIHN0cmluZy4NCiAgICAtICovDQogICAgLWludCBmaXJzdF9hbHBoYShjb25z
dCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4ZW1wdCkNCiAgICAtew0KICAgIC0JaW50IGks
IGluX3BhcmVuID0gMCwgYzsNCiAgICAtDQogICAgLQlmb3IgKGkgPSAwOyBpIDwgc3RybGVuKHN0
cmluZyk7IGkrKykgew0KICAgIC0JCWMgPSB0b2xvd2VyKHN0cmluZ1tpXSk7DQogICAgLQ0KICAg
IC0JCWlmIChzdHJjaHIoIjxbKCIsIGMpKQ0KICAgIC0JCQkrK2luX3BhcmVuOw0KICAgIC0JCWlm
IChzdHJjaHIoIj5dKSIsIGMpICYmIGluX3BhcmVuID4gMCkNCiAgICAtCQkJLS1pbl9wYXJlbjsN
CiAgICAtDQogICAgLQkJaWYgKCghaW5fcGFyZW4pICYmIGlzYWxwaGEoYykgJiYgc3RyY2hyKGV4
ZW1wdCwgYykgPT0gMCkNCiAgICAtCQkJcmV0dXJuIGk7DQogICAgLQl9DQogICAgLQ0KICAgIC0J
cmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIG5jdXJzZXMgdXNlcyBF
U0MgdG8gZGV0ZWN0IGVzY2FwZWQgY2hhciBzZXF1ZW5jZXMuIFRoaXMgcmVzdXRsIGluDQogICAg
LSAqIGEgc21hbGwgdGltZW91dCBiZWZvcmUgRVNDIGlzIGFjdHVhbGx5IGRlbGl2ZXJlZCB0byB0
aGUgYXBwbGljYXRpb24uDQogICAgLSAqIGx4ZGlhbG9nIHN1Z2dlc3QgPEVTQz4gPEVTQz4gd2hp
Y2ggaXMgY29ycmVjdGx5IHRyYW5zbGF0ZWQgdG8gdHdvDQogICAgLSAqIHRpbWVzIGVzYy4gQnV0
IHRoZW4gd2UgbmVlZCB0byBpZ25vcmUgdGhlIHNlY29uZCBlc2MgdG8gYXZvaWQgc3RlcHBpbmcN
CiAgICAtICogb3V0IG9uZSBtZW51IHRvbyBtdWNoLiBGaWx0ZXIgYXdheSBhbGwgZXNjYXBlZCBr
ZXkgc2VxdWVuY2VzIHNpbmNlDQogICAgLSAqIGtleXBhZChGQUxTRSkgdHVybiBvZmYgbmN1cnNl
cyBzdXBwb3J0IGZvciBlc2NhcGUgc2VxdWVuY2VzIC0gYW5kIHRoYXRzDQogICAgLSAqIG5lZWRl
ZCB0byBtYWtlIG5vdGltZW91dCgpIGRvIGFzIGV4cGVjdGVkLg0KICAgIC0gKi8NCiAgICAtaW50
IG9uX2tleV9lc2MoV0lORE9XICp3aW4pDQogICAgLXsNCiAgICAtCWludCBrZXk7DQogICAgLQlp
bnQga2V5MjsNCiAgICAtCWludCBrZXkzOw0KICAgIC0NCiAgICAtCW5vZGVsYXkod2luLCBUUlVF
KTsNCiAgICAtCWtleXBhZCh3aW4sIEZBTFNFKTsNCiAgICAtCWtleSA9IHdnZXRjaCh3aW4pOw0K
ICAgIC0Ja2V5MiA9IHdnZXRjaCh3aW4pOw0KICAgIC0JZG8gew0KICAgIC0JCWtleTMgPSB3Z2V0
Y2god2luKTsNCiAgICAtCX0gd2hpbGUgKGtleTMgIT0gRVJSKTsNCiAgICAtCW5vZGVsYXkod2lu
LCBGQUxTRSk7DQogICAgLQlrZXlwYWQod2luLCBUUlVFKTsNCiAgICAtCWlmIChrZXkgPT0gS0VZ
X0VTQyAmJiBrZXkyID09IEVSUikNCiAgICAtCQlyZXR1cm4gS0VZX0VTQzsNCiAgICAtCWVsc2Ug
aWYgKGtleSAhPSBFUlIgJiYga2V5ICE9IEtFWV9FU0MgJiYga2V5MiA9PSBFUlIpDQogICAgLQkJ
dW5nZXRjaChrZXkpOw0KICAgIC0NCiAgICAtCXJldHVybiAtMTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtLyogcmVkcmF3IHNjcmVlbiBpbiBuZXcgc2l6ZSAqLw0KICAgIC1pbnQgb25fa2V5X3Jlc2l6
ZSh2b2lkKQ0KICAgIC17DQogICAgLQlkaWFsb2dfY2xlYXIoKTsNCiAgICAtCXJldHVybiBLRVlf
UkVTSVpFOw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3QgZGlhbG9nX2xpc3QgKml0ZW1fY3Vy
Ow0KICAgIC1zdHJ1Y3QgZGlhbG9nX2xpc3QgaXRlbV9uaWw7DQogICAgLXN0cnVjdCBkaWFsb2df
bGlzdCAqaXRlbV9oZWFkOw0KICAgIC0NCiAgICAtdm9pZCBpdGVtX3Jlc2V0KHZvaWQpDQogICAg
LXsNCiAgICAtCXN0cnVjdCBkaWFsb2dfbGlzdCAqcCwgKm5leHQ7DQogICAgLQ0KICAgIC0JZm9y
IChwID0gaXRlbV9oZWFkOyBwOyBwID0gbmV4dCkgew0KICAgIC0JCW5leHQgPSBwLT5uZXh0Ow0K
ICAgIC0JCWZyZWUocCk7DQogICAgLQl9DQogICAgLQlpdGVtX2hlYWQgPSBOVUxMOw0KICAgIC0J
aXRlbV9jdXIgPSAmaXRlbV9uaWw7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgaXRlbV9tYWtl
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0J
c3RydWN0IGRpYWxvZ19saXN0ICpwID0gbWFsbG9jKHNpemVvZigqcCkpOw0KICAgIC0NCiAgICAt
CWlmIChpdGVtX2hlYWQpDQogICAgLQkJaXRlbV9jdXItPm5leHQgPSBwOw0KICAgIC0JZWxzZQ0K
ICAgIC0JCWl0ZW1faGVhZCA9IHA7DQogICAgLQlpdGVtX2N1ciA9IHA7DQogICAgLQltZW1zZXQo
cCwgMCwgc2l6ZW9mKCpwKSk7DQogICAgLQ0KICAgIC0JdmFfc3RhcnQoYXAsIGZtdCk7DQogICAg
LQl2c25wcmludGYoaXRlbV9jdXItPm5vZGUuc3RyLCBzaXplb2YoaXRlbV9jdXItPm5vZGUuc3Ry
KSwgZm10LCBhcCk7DQogICAgLQl2YV9lbmQoYXApOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lk
IGl0ZW1fYWRkX3N0cihjb25zdCBjaGFyICpmbXQsIC4uLikNCiAgICAtew0KICAgIC0JdmFfbGlz
dCBhcDsNCiAgICAtICAgICAgICBzaXplX3QgYXZhaWw7DQogICAgLQ0KICAgIC0JYXZhaWwgPSBz
aXplb2YoaXRlbV9jdXItPm5vZGUuc3RyKSAtIHN0cmxlbihpdGVtX2N1ci0+bm9kZS5zdHIpOw0K
ICAgIC0NCiAgICAtCXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0JdnNucHJpbnRmKGl0ZW1fY3Vy
LT5ub2RlLnN0ciArIHN0cmxlbihpdGVtX2N1ci0+bm9kZS5zdHIpLA0KICAgIC0JCSAgYXZhaWws
IGZtdCwgYXApOw0KICAgIC0JaXRlbV9jdXItPm5vZGUuc3RyW3NpemVvZihpdGVtX2N1ci0+bm9k
ZS5zdHIpIC0gMV0gPSAnXDAnOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtdm9pZCBpdGVtX3NldF90YWcoY2hhciB0YWcpDQogICAgLXsNCiAgICAtCWl0ZW1fY3VyLT5u
b2RlLnRhZyA9IHRhZzsNCiAgICAtfQ0KICAgIC12b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcHRy
KQ0KICAgIC17DQogICAgLQlpdGVtX2N1ci0+bm9kZS5kYXRhID0gcHRyOw0KICAgIC19DQogICAg
LQ0KICAgIC12b2lkIGl0ZW1fc2V0X3NlbGVjdGVkKGludCB2YWwpDQogICAgLXsNCiAgICAtCWl0
ZW1fY3VyLT5ub2RlLnNlbGVjdGVkID0gdmFsOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgaXRl
bV9hY3RpdmF0ZV9zZWxlY3RlZCh2b2lkKQ0KICAgIC17DQogICAgLQlpdGVtX2ZvcmVhY2goKQ0K
ICAgIC0JCWlmIChpdGVtX2lzX3NlbGVjdGVkKCkpDQogICAgLQkJCXJldHVybiAxOw0KICAgIC0J
cmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgKml0ZW1fZGF0YSh2b2lkKQ0KICAg
IC17DQogICAgLQlyZXR1cm4gaXRlbV9jdXItPm5vZGUuZGF0YTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtY2hhciBpdGVtX3RhZyh2b2lkKQ0KICAgIC17DQogICAgLQlyZXR1cm4gaXRlbV9jdXItPm5v
ZGUudGFnOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgaXRlbV9jb3VudCh2b2lkKQ0KICAgIC17
DQogICAgLQlpbnQgbiA9IDA7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7DQogICAgLQ0K
ICAgIC0JZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+bmV4dCkNCiAgICAtCQluKys7DQog
ICAgLQlyZXR1cm4gbjsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBpdGVtX3NldChpbnQgbikN
CiAgICAtew0KICAgIC0JaW50IGkgPSAwOw0KICAgIC0JaXRlbV9mb3JlYWNoKCkNCiAgICAtCQlp
ZiAoaSsrID09IG4pDQogICAgLQkJCXJldHVybjsNCiAgICAtfQ0KICAgIC0NCiAgICAtaW50IGl0
ZW1fbih2b2lkKQ0KICAgIC17DQogICAgLQlpbnQgbiA9IDA7DQogICAgLQlzdHJ1Y3QgZGlhbG9n
X2xpc3QgKnA7DQogICAgLQ0KICAgIC0JZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+bmV4
dCkgew0KICAgIC0JCWlmIChwID09IGl0ZW1fY3VyKQ0KICAgIC0JCQlyZXR1cm4gbjsNCiAgICAt
CQluKys7DQogICAgLQl9DQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtY29u
c3QgY2hhciAqaXRlbV9zdHIodm9pZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIGl0ZW1fY3VyLT5u
b2RlLnN0cjsNCiAgICAtfQ0KICAgIC0NCiAgICAtaW50IGl0ZW1faXNfc2VsZWN0ZWQodm9pZCkN
CiAgICAtew0KICAgIC0JcmV0dXJuIChpdGVtX2N1ci0+bm9kZS5zZWxlY3RlZCAhPSAwKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtaW50IGl0ZW1faXNfdGFnKGNoYXIgdGFnKQ0KICAgIC17DQogICAg
LQlyZXR1cm4gKGl0ZW1fY3VyLT5ub2RlLnRhZyA9PSB0YWcpOw0KICAgIC19DQogICAgZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jIGIvc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL3llc25vLmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCA2NzZmYjJmLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3ll
c25vLmMNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTE0ICswLDAgQEANCiAgICAtLyoN
CiAgICAtICogIHllc25vLmMgLS0gaW1wbGVtZW50cyB0aGUgeWVzL25vIGJveA0KICAgIC0gKg0K
ICAgIC0gKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQ0K
ICAgIC0gKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9h
ZGNhcCAocm9hZGNhcEBjZncuY29tKQ0KICAgIC0gKg0KICAgIC0gKiAgVGhpcyBwcm9ncmFtIGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICAgIC0gKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UNCiAgICAtICogIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIgdmVyc2lvbiAyDQogICAgLSAqICBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAgICAtICoNCiAgICAtICogIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICAg
IC0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YNCiAgICAtICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAgICAtICogIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogICAgLSAqDQogICAgLSAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICAg
IC0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUNCiAgICAtICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJp
ZGdlLCBNQSAwMjEzOSwgVVNBLg0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRlICJkaWFs
b2cuaCINCiAgICAtDQogICAgLS8qDQogICAgLSAqIERpc3BsYXkgdGVybWluYXRpb24gYnV0dG9u
cw0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFs
b2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQ0KICAgIC17DQogICAgLQlp
bnQgeCA9IHdpZHRoIC8gMiAtIDEwOw0KICAgIC0JaW50IHkgPSBoZWlnaHQgLSAyOw0KICAgIC0N
CiAgICAtCXByaW50X2J1dHRvbihkaWFsb2csIGdldHRleHQoIiBZZXMgIiksIHksIHgsIHNlbGVj
dGVkID09IDApOw0KICAgIC0JcHJpbnRfYnV0dG9uKGRpYWxvZywgZ2V0dGV4dCgiICBObyAgIiks
IHksIHggKyAxMywgc2VsZWN0ZWQgPT0gMSk7DQogICAgLQ0KICAgIC0Jd21vdmUoZGlhbG9nLCB5
LCB4ICsgMSArIDEzICogc2VsZWN0ZWQpOw0KICAgIC0Jd3JlZnJlc2goZGlhbG9nKTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogRGlzcGxheSBhIGRpYWxvZyBib3ggd2l0aCB0d28g
YnV0dG9ucyAtIFllcyBhbmQgTm8NCiAgICAtICovDQogICAgLWludCBkaWFsb2dfeWVzbm8oY29u
c3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRo
KQ0KICAgIC17DQogICAgLQlpbnQgaSwgeCwgeSwga2V5ID0gMCwgYnV0dG9uID0gMDsNCiAgICAt
CVdJTkRPVyAqZGlhbG9nOw0KICAgIC0NCiAgICAtZG9fcmVzaXplOg0KICAgIC0JaWYgKGdldG1h
eHkoc3Rkc2NyKSA8IChoZWlnaHQgKyBZRVNOT19IRUlHVEhfTUlOKSkNCiAgICAtCQlyZXR1cm4g
LUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICAtCWlmIChnZXRtYXh4KHN0ZHNjcikgPCAod2lkdGgg
KyBZRVNOT19XSURUSF9NSU4pKQ0KICAgIC0JCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0K
ICAgIC0NCiAgICAtCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLw0KICAgIC0JeCA9
IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0aCkgLyAyOw0KICAgIC0JeSA9IChnZXRtYXh5KHN0ZHNj
cikgLSBoZWlnaHQpIC8gMjsNCiAgICAtDQogICAgLQlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgs
IGhlaWdodCwgd2lkdGgpOw0KICAgIC0NCiAgICAtCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdp
ZHRoLCB5LCB4KTsNCiAgICAtCWtleXBhZChkaWFsb2csIFRSVUUpOw0KICAgIC0NCiAgICAtCWRy
YXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwNCiAgICAtCQkgZGxnLmRpYWxvZy5h
dHIsIGRsZy5ib3JkZXIuYXRyKTsNCiAgICAtCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5h
dHIpOw0KICAgIC0JbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7DQog
ICAgLQlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBpKyspDQogICAgLQkJd2FkZGNoKGRpYWxv
ZywgQUNTX0hMSU5FKTsNCiAgICAtCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOw0K
ICAgIC0Jd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOw0KICAgIC0NCiAgICAtCXByaW50X3RpdGxl
KGRpYWxvZywgdGl0bGUsIHdpZHRoKTsNCiAgICAtDQogICAgLQl3YXR0cnNldChkaWFsb2csIGRs
Zy5kaWFsb2cuYXRyKTsNCiAgICAtCXByaW50X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0
aCAtIDIsIDEsIDMpOw0KICAgIC0NCiAgICAtCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQs
IHdpZHRoLCAwKTsNCiAgICAtDQogICAgLQl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsNCiAgICAt
CQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsNCiAgICAtCQlzd2l0Y2ggKGtleSkgew0KICAgIC0JCWNh
c2UgJ1knOg0KICAgIC0JCWNhc2UgJ3knOg0KICAgIC0JCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAt
CQkJcmV0dXJuIDA7DQogICAgLQkJY2FzZSAnTic6DQogICAgLQkJY2FzZSAnbic6DQogICAgLQkJ
CWRlbHdpbihkaWFsb2cpOw0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtDQogICAgLQkJY2FzZSBU
QUI6DQogICAgLQkJY2FzZSBLRVlfTEVGVDoNCiAgICAtCQljYXNlIEtFWV9SSUdIVDoNCiAgICAt
CQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDAp
ID8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRvbik7DQogICAgLQ0KICAgIC0JCQlwcmludF9i
dXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgYnV0dG9uKTsNCiAgICAtCQkJd3JlZnJlc2go
ZGlhbG9nKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnICc6DQogICAgLQkJY2FzZSAn
XG4nOg0KICAgIC0JCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAtCQkJcmV0dXJuIGJ1dHRvbjsNCiAg
ICAtCQljYXNlIEtFWV9FU0M6DQogICAgLQkJCWtleSA9IG9uX2tleV9lc2MoZGlhbG9nKTsNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfUkVTSVpFOg0KICAgIC0JCQlkZWx3aW4oZGlh
bG9nKTsNCiAgICAtCQkJb25fa2V5X3Jlc2l6ZSgpOw0KICAgIC0JCQlnb3RvIGRvX3Jlc2l6ZTsN
CiAgICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JZGVsd2luKGRpYWxvZyk7DQogICAgLQly
ZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8NCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvbWNvbmYuYyBiL3N1cHBvcnQva2NvbmZpZy9tY29uZi5jDQogICAgZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMTJmOGM2Yy4uMDAwMDAwMA0KICAgIC0t
LSBhL3N1cHBvcnQva2NvbmZpZy9tY29uZi5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0x
LDEwMzcgKzAsMCBAQA0KICAgIC0vKg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4g
WmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgLSAqIFJlbGVhc2VkIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLg0KICAgIC0gKg0KICAgIC0gKiBJbnRyb2R1Y2Vk
IHNpbmdsZSBtZW51IG1vZGUgKHNob3cgYWxsIHN1Yi1tZW51cyBpbiBvbmUgbGFyZ2UgdHJlZSku
DQogICAgLSAqIDIwMDItMTEtMDYgUGV0ciBCYXVkaXMgPHBhc2t5QHVjdy5jej4NCiAgICAtICoN
CiAgICAtICogaTE4biwgMjAwNSwgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVj
dGl2YS5jb20uYnI+DQogICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgPGN0eXBlLmg+DQog
ICAgLSNpbmNsdWRlIDxlcnJuby5oPg0KICAgIC0jaW5jbHVkZSA8ZmNudGwuaD4NCiAgICAtI2lu
Y2x1ZGUgPGxpbWl0cy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkYXJnLmg+DQogICAgLSNpbmNsdWRl
IDxzdGRsaWIuaD4NCiAgICAtI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSA8c2ln
bmFsLmg+DQogICAgLSNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAtI2luY2x1ZGUgPGxvY2FsZS5o
Pg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5oIg0KICAgIC0jaW5jbHVkZSAibHhkaWFsb2cv
ZGlhbG9nLmgiDQogICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgY2hhciBtY29uZl9yZWFkbWVbXSA9
IE5fKA0KICAgIC0iT3ZlcnZpZXdcbiINCiAgICAtIi0tLS0tLS0tXG4iDQogICAgLSJUaGlzIGlu
dGVyZmFjZSBsZXRzIHlvdSBzZWxlY3QgZmVhdHVyZXMgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBi
dWlsZC5cbiINCiAgICAtIkZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJp
emVkLCBvciBpZ25vcmVkLiBQYXJhbWV0ZXJzXG4iDQogICAgLSJtdXN0IGJlIGVudGVyZWQgaW4g
YXMgZGVjaW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzIG9yIHRleHQuXG4iDQogICAgLSJcbiIN
CiAgICAtIk1lbnUgaXRlbXMgYmVnaW5uaW5nIHdpdGggZm9sbG93aW5nIGJyYWNlcyByZXByZXNl
bnQgZmVhdHVyZXMgdGhhdFxuIg0KICAgIC0iICBbIF0gY2FuIGJlIGJ1aWx0IGluIG9yIHJlbW92
ZWRcbiINCiAgICAtIiAgPCA+IGNhbiBiZSBidWlsdCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3Zl
ZFxuIg0KICAgIC0iICB7IH0gY2FuIGJlIGJ1aWx0IGluIG9yIG1vZHVsYXJpemVkIChzZWxlY3Rl
ZCBieSBvdGhlciBmZWF0dXJlKVxuIg0KICAgIC0iICAtIC0gYXJlIHNlbGVjdGVkIGJ5IG90aGVy
IGZlYXR1cmUsXG4iDQogICAgLSJ3aGlsZSAqLCBNIG9yIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNl
cyBtZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXNcbiINCiAgICAtImEgbW9kdWxlIG9yIHRvIGV4
Y2x1ZGUgdGhlIGZlYXR1cmUgcmVzcGVjdGl2ZWx5LlxuIg0KICAgIC0iXG4iDQogICAgLSJUbyBj
aGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQgd2l0aCB0aGUgY3Vyc29y
XG4iDQogICAgLSJrZXlzIGFuZCBwcmVzcyA8WT4gdG8gYnVpbGQgaXQgaW4sIDxNPiB0byBtYWtl
IGl0IGEgbW9kdWxlIG9yXG4iDQogICAgLSI8Tj4gdG8gcmVtb3ZlIGl0LiAgWW91IG1heSBhbHNv
IHByZXNzIHRoZSA8U3BhY2UgQmFyPiB0byBjeWNsZVxuIg0KICAgIC0idGhyb3VnaCB0aGUgYXZh
aWxhYmxlIG9wdGlvbnMgKGkuZS4gWS0+Ti0+TS0+WSkuXG4iDQogICAgLSJcbiINCiAgICAtIlNv
bWUgYWRkaXRpb25hbCBrZXlib2FyZCBoaW50czpcbiINCiAgICAtIlxuIg0KICAgIC0iTWVudXNc
biINCiAgICAtIi0tLS0tLS0tLS1cbiINCiAgICAtIm8gIFVzZSB0aGUgVXAvRG93biBhcnJvdyBr
ZXlzIChjdXJzb3Iga2V5cykgdG8gaGlnaGxpZ2h0IHRoZSBpdGVtIHlvdVxuIg0KICAgIC0iICAg
d2lzaCB0byBjaGFuZ2Ugb3IgdGhlIHN1Ym1lbnUgeW91IHdpc2ggdG8gc2VsZWN0IGFuZCBwcmVz
cyA8RW50ZXI+LlxuIg0KICAgIC0iICAgU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgXCItLS0+
XCIsIGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iDQogICAgLSJcbiINCiAgICAtIiAgIFNob3J0
Y3V0OiBQcmVzcyB0aGUgb3B0aW9uJ3MgaGlnaGxpZ2h0ZWQgbGV0dGVyIChob3RrZXkpLlxuIg0K
ICAgIC0iICAgICAgICAgICAgIFByZXNzaW5nIGEgaG90a2V5IG1vcmUgdGhhbiBvbmNlIHdpbGwg
c2VxdWVuY2VcbiINCiAgICAtIiAgICAgICAgICAgICB0aHJvdWdoIGFsbCB2aXNpYmxlIGl0ZW1z
IHdoaWNoIHVzZSB0aGF0IGhvdGtleS5cbiINCiAgICAtIlxuIg0KICAgIC0iICAgWW91IG1heSBh
bHNvIHVzZSB0aGUgPFBBR0UgVVA+IGFuZCA8UEFHRSBET1dOPiBrZXlzIHRvIHNjcm9sbFxuIg0K
ICAgIC0iICAgdW5zZWVuIG9wdGlvbnMgaW50byB2aWV3LlxuIg0KICAgIC0iXG4iDQogICAgLSJv
ICBUbyBleGl0IGEgbWVudSB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCB0aGUgPEV4
aXQ+IGJ1dHRvblxuIg0KICAgIC0iICAgYW5kIHByZXNzIDxFTlRFUj4uXG4iDQogICAgLSJcbiIN
CiAgICAtIiAgIFNob3J0Y3V0OiBQcmVzcyA8RVNDPjxFU0M+IG9yIDxFPiBvciA8WD4gaWYgdGhl
cmUgaXMgbm8gaG90a2V5XG4iDQogICAgLSIgICAgICAgICAgICAgdXNpbmcgdGhvc2UgbGV0dGVy
cy4gIFlvdSBtYXkgcHJlc3MgYSBzaW5nbGUgPEVTQz4sIGJ1dFxuIg0KICAgIC0iICAgICAgICAg
ICAgIHRoZXJlIGlzIGEgZGVsYXllZCByZXNwb25zZSB3aGljaCB5b3UgbWF5IGZpbmQgYW5ub3lp
bmcuXG4iDQogICAgLSJcbiINCiAgICAtIiAgIEFsc28sIHRoZSA8VEFCPiBhbmQgY3Vyc29yIGtl
eXMgd2lsbCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+LFxuIg0KICAgIC0iICAgPEV4aXQ+LCA8SGVs
cD4sIDxTYXZlPiwgYW5kIDxMb2FkPi5cbiINCiAgICAtIlxuIg0KICAgIC0ibyAgVG8gZ2V0IGhl
bHAgd2l0aCBhbiBpdGVtLCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCA8SGVscD5c
biINCiAgICAtIiAgIGFuZCBwcmVzcyA8RU5URVI+LlxuIg0KICAgIC0iXG4iDQogICAgLSIgICBT
aG9ydGN1dDogUHJlc3MgPEg+IG9yIDw/Pi5cbiINCiAgICAtIlxuIg0KICAgIC0ibyAgVG8gdG9n
Z2xlIHRoZSBkaXNwbGF5IG9mIGhpZGRlbiBvcHRpb25zLCBwcmVzcyA8Wj4uXG4iDQogICAgLSJc
biINCiAgICAtIlxuIg0KICAgIC0iUmFkaW9saXN0cyAgKENob2ljZSBsaXN0cylcbiINCiAgICAt
Ii0tLS0tLS0tLS0tXG4iDQogICAgLSJvICBVc2UgdGhlIGN1cnNvciBrZXlzIHRvIHNlbGVjdCB0
aGUgb3B0aW9uIHlvdSB3aXNoIHRvIHNldCBhbmQgcHJlc3NcbiINCiAgICAtIiAgIDxTPiBvciB0
aGUgPFNQQUNFIEJBUj4uXG4iDQogICAgLSJcbiINCiAgICAtIiAgIFNob3J0Y3V0OiBQcmVzcyB0
aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBvcHRpb24geW91IHdpc2ggdG8gc2V0IHRoZW5cbiINCiAg
ICAtIiAgICAgICAgICAgICBwcmVzcyA8Uz4gb3IgPFNQQUNFIEJBUj4uXG4iDQogICAgLSJcbiIN
CiAgICAtIm8gIFRvIHNlZSBhdmFpbGFibGUgaGVscCBmb3IgdGhlIGl0ZW0sIHVzZSB0aGUgY3Vy
c29yIGtleXMgdG8gaGlnaGxpZ2h0XG4iDQogICAgLSIgICA8SGVscD4gYW5kIFByZXNzIDxFTlRF
Uj4uXG4iDQogICAgLSJcbiINCiAgICAtIiAgIFNob3J0Y3V0OiBQcmVzcyA8SD4gb3IgPD8+Llxu
Ig0KICAgIC0iXG4iDQogICAgLSIgICBBbHNvLCB0aGUgPFRBQj4gYW5kIGN1cnNvciBrZXlzIHdp
bGwgY3ljbGUgYmV0d2VlbiA8U2VsZWN0PiBhbmRcbiINCiAgICAtIiAgIDxIZWxwPlxuIg0KICAg
IC0iXG4iDQogICAgLSJcbiINCiAgICAtIkRhdGEgRW50cnlcbiINCiAgICAtIi0tLS0tLS0tLS0t
XG4iDQogICAgLSJvICBFbnRlciB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFuZCBwcmVzcyA8
RU5URVI+XG4iDQogICAgLSIgICBJZiB5b3UgYXJlIGVudGVyaW5nIGhleGFkZWNpbWFsIHZhbHVl
cywgaXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuIg0KICAgIC0iICAgYWRkIHRoZSAnMHgnIHByZWZp
eCB0byB0aGUgZW50cnkuXG4iDQogICAgLSJcbiINCiAgICAtIm8gIEZvciBoZWxwLCB1c2UgdGhl
IDxUQUI+IG9yIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCB0aGUgaGVscCBvcHRpb25cbiINCiAg
ICAtIiAgIGFuZCBwcmVzcyA8RU5URVI+LiAgWW91IGNhbiB0cnkgPFRBQj48SD4gYXMgd2VsbC5c
biINCiAgICAtIlxuIg0KICAgIC0iXG4iDQogICAgLSJUZXh0IEJveCAgICAoSGVscCBXaW5kb3cp
XG4iDQogICAgLSItLS0tLS0tLVxuIg0KICAgIC0ibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBz
Y3JvbGwgdXAvZG93bi9sZWZ0L3JpZ2h0LiAgVGhlIFZJIGVkaXRvclxuIg0KICAgIC0iICAga2V5
cyBoLGosayxsIGZ1bmN0aW9uIGhlcmUgYXMgZG8gPHU+LCA8ZD4sIDxTUEFDRSBCQVI+IGFuZCA8
Qj4gZm9yXG4iDQogICAgLSIgICB0aG9zZSB3aG8gYXJlIGZhbWlsaWFyIHdpdGggbGVzcyBhbmQg
bHlueC5cbiINCiAgICAtIlxuIg0KICAgIC0ibyAgUHJlc3MgPEU+LCA8WD4sIDxxPiwgPEVudGVy
PiBvciA8RXNjPjxFc2M+IHRvIGV4aXQuXG4iDQogICAgLSJcbiINCiAgICAtIlxuIg0KICAgIC0i
QWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24gRmlsZXNcbiINCiAgICAtIi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iDQogICAgLSJNZW51Y29uZmlnIHN1cHBvcnRzIHRoZSB1c2Ugb2YgYWx0
ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yXG4iDQogICAgLSJ0aG9zZSB3aG8sIGZvciB2
YXJpb3VzIHJlYXNvbnMsIGZpbmQgaXQgbmVjZXNzYXJ5IHRvIHN3aXRjaFxuIg0KICAgIC0iYmV0
d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iDQogICAgLSJcbiINCiAgICAtIlRoZSA8
U2F2ZT4gYnV0dG9uIHdpbGwgbGV0IHlvdSBzYXZlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24g
dG9cbiINCiAgICAtImEgZmlsZSBvZiB5b3VyIGNob29zaW5nLiAgVXNlIHRoZSA8TG9hZD4gYnV0
dG9uIHRvIGxvYWQgYSBwcmV2aW91c2x5XG4iDQogICAgLSJzYXZlZCBhbHRlcm5hdGUgY29uZmln
dXJhdGlvbi5cbiINCiAgICAtIlxuIg0KICAgIC0iRXZlbiBpZiB5b3UgZG9uJ3QgdXNlIGFsdGVy
bmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzLCBidXQgeW91IGZpbmRcbiINCiAgICAtImR1cmluZyBh
IE1lbnVjb25maWcgc2Vzc2lvbiB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgbWVzc2VkIHVwIHlv
dXJcbiINCiAgICAtInNldHRpbmdzLCB5b3UgbWF5IHVzZSB0aGUgPExvYWQ+IGJ1dHRvbiB0byBy
ZXN0b3JlIHlvdXIgcHJldmlvdXNseVxuIg0KICAgIC0ic2F2ZWQgc2V0dGluZ3MgZnJvbSBcIi5j
b25maWdcIiB3aXRob3V0IHJlc3RhcnRpbmcgTWVudWNvbmZpZy5cbiINCiAgICAtIlxuIg0KICAg
IC0iT3RoZXIgaW5mb3JtYXRpb25cbiINCiAgICAtIi0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAg
LSJJZiB5b3UgdXNlIE1lbnVjb25maWcgaW4gYW4gWFRFUk0gd2luZG93LCBtYWtlIHN1cmUgeW91
IGhhdmUgeW91clxuIg0KICAgIC0iJFRFUk0gdmFyaWFibGUgc2V0IHRvIHBvaW50IHRvIGFuIHh0
ZXJtIGRlZmluaXRpb24gd2hpY2ggc3VwcG9ydHNcbiINCiAgICAtImNvbG9yLiAgT3RoZXJ3aXNl
LCBNZW51Y29uZmlnIHdpbGwgbG9vayByYXRoZXIgYmFkLiAgTWVudWNvbmZpZyB3aWxsXG4iDQog
ICAgLSJub3QgZGlzcGxheSBjb3JyZWN0bHkgaW4gYW4gUlhWVCB3aW5kb3cgYmVjYXVzZSByeHZ0
IGRpc3BsYXlzIG9ubHkgb25lXG4iDQogICAgLSJpbnRlbnNpdHkgb2YgY29sb3IsIGJyaWdodC5c
biINCiAgICAtIlxuIg0KICAgIC0iTWVudWNvbmZpZyB3aWxsIGRpc3BsYXkgbGFyZ2VyIG1lbnVz
IG9uIHNjcmVlbnMgb3IgeHRlcm1zIHdoaWNoIGFyZVxuIg0KICAgIC0ic2V0IHRvIGRpc3BsYXkg
bW9yZSB0aGFuIHRoZSBzdGFuZGFyZCAyNSByb3cgYnkgODAgY29sdW1uIGdlb21ldHJ5LlxuIg0K
ICAgIC0iSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgdGhlIFwic3R0eSBzaXplXCIgY29tbWFu
ZCBtdXN0IGJlIGFibGUgdG9cbiINCiAgICAtImRpc3BsYXkgdGhlIHNjcmVlbidzIGN1cnJlbnQg
cm93IGFuZCBjb2x1bW4gZ2VvbWV0cnkuICBJIFNUUk9OR0xZXG4iDQogICAgLSJSRUNPTU1FTkQg
dGhhdCB5b3UgbWFrZSBzdXJlIHlvdSBkbyBOT1QgaGF2ZSB0aGUgc2hlbGwgdmFyaWFibGVzXG4i
DQogICAgLSJMSU5FUyBhbmQgQ09MVU1OUyBleHBvcnRlZCBpbnRvIHlvdXIgZW52aXJvbm1lbnQu
ICBTb21lIGRpc3RyaWJ1dGlvbnNcbiINCiAgICAtImV4cG9ydCB0aG9zZSB2YXJpYWJsZXMgdmlh
IC9ldGMvcHJvZmlsZS4gIFNvbWUgbmN1cnNlcyBwcm9ncmFtcyBjYW5cbiINCiAgICAtImJlY29t
ZSBjb25mdXNlZCB3aGVuIHRob3NlIHZhcmlhYmxlcyAoTElORVMgJiBDT0xVTU5TKSBkb24ndCBy
ZWZsZWN0XG4iDQogICAgLSJ0aGUgdHJ1ZSBzY3JlZW4gc2l6ZS5cbiINCiAgICAtIlxuIg0KICAg
IC0iT3B0aW9uYWwgcGVyc29uYWxpdHkgYXZhaWxhYmxlXG4iDQogICAgLSItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAtIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2Yg
dGhlIG9wdGlvbnMgbGlzdGVkIGluIGEgc2luZ2xlIG1lbnUsXG4iDQogICAgLSJyYXRoZXIgdGhh
biB0aGUgZGVmYXVsdCBtdWx0aW1lbnUgaGllcmFyY2h5LCBydW4gdGhlIG1lbnVjb25maWcgd2l0
aFxuIg0KICAgIC0iTUVOVUNPTkZJR19NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBz
aW5nbGVfbWVudS4gRXhhbXBsZTpcbiINCiAgICAtIlxuIg0KICAgIC0ibWFrZSBNRU5VQ09ORklH
X01PREU9c2luZ2xlX21lbnUgbWVudWNvbmZpZ1xuIg0KICAgIC0iXG4iDQogICAgLSI8RW50ZXI+
IHdpbGwgdGhlbiB1bnJvbGwgdGhlIGFwcHJvcHJpYXRlIGNhdGVnb3J5LCBvciBlbmZvbGQgaXQg
aWYgaXRcbiINCiAgICAtImlzIGFscmVhZHkgdW5yb2xsZWQuXG4iDQogICAgLSJcbiINCiAgICAt
Ik5vdGUgdGhhdCB0aGlzIG1vZGUgY2FuIGV2ZW50dWFsbHkgYmUgYSBsaXR0bGUgbW9yZSBDUFUg
ZXhwZW5zaXZlXG4iDQogICAgLSIoZXNwZWNpYWxseSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiB1
bnJvbGxlZCBjYXRlZ29yaWVzKSB0aGFuIHRoZVxuIg0KICAgIC0iZGVmYXVsdCBtb2RlLlxuIg0K
ICAgIC0iXG4iDQogICAgLSJEaWZmZXJlbnQgY29sb3IgdGhlbWVzIGF2YWlsYWJsZVxuIg0KICAg
IC0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAtIkl0IGlzIHBvc3Np
YmxlIHRvIHNlbGVjdCBkaWZmZXJlbnQgY29sb3IgdGhlbWVzIHVzaW5nIHRoZSB2YXJpYWJsZVxu
Ig0KICAgIC0iTUVOVUNPTkZJR19DT0xPUi4gVG8gc2VsZWN0IGEgdGhlbWUgdXNlOlxuIg0KICAg
IC0iXG4iDQogICAgLSJtYWtlIE1FTlVDT05GSUdfQ09MT1I9PHRoZW1lPiBtZW51Y29uZmlnXG4i
DQogICAgLSJcbiINCiAgICAtIkF2YWlsYWJsZSB0aGVtZXMgYXJlXG4iDQogICAgLSIgbW9ubyAg
ICAgICA9PiBzZWxlY3RzIGNvbG9ycyBzdWl0YWJsZSBmb3IgbW9ub2Nocm9tZSBkaXNwbGF5c1xu
Ig0KICAgIC0iIGJsYWNrYmcgICAgPT4gc2VsZWN0cyBhIGNvbG9yIHNjaGVtZSB3aXRoIGJsYWNr
IGJhY2tncm91bmRcbiINCiAgICAtIiBjbGFzc2ljICAgID0+IHRoZW1lIHdpdGggYmx1ZSBiYWNr
Z3JvdW5kLiBUaGUgY2xhc3NpYyBsb29rXG4iDQogICAgLSIgYmx1ZXRpdGxlICA9PiBhbiBMQ0Qg
ZnJpZW5kbHkgdmVyc2lvbiBvZiBjbGFzc2ljLiAoZGVmYXVsdClcbiINCiAgICAtIlxuIiksDQog
ICAgLW1lbnVfaW5zdHJ1Y3Rpb25zW10gPSBOXygNCiAgICAtCSJBcnJvdyBrZXlzIG5hdmlnYXRl
IHRoZSBtZW51LiAgIg0KICAgIC0JIjxFbnRlcj4gc2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBl
bXB0eSBzdWJtZW51cyAtLS0tKS4gICINCiAgICAtCSJIaWdobGlnaHRlZCBsZXR0ZXJzIGFyZSBo
b3RrZXlzLiAgIg0KICAgIC0JIlByZXNzaW5nIDxZPiBzZWxlY3RlcyBhIGZlYXR1cmUsIHdoaWxl
IDxOPiB3aWxsIGV4Y2x1ZGUgYSBmZWF0dXJlLiAgIg0KICAgIC0JIlByZXNzIDxFc2M+PEVzYz4g
dG8gZXhpdCwgPD8+IGZvciBIZWxwLCA8Lz4gZm9yIFNlYXJjaC4gICINCiAgICAtCSJMZWdlbmQ6
IFsqXSBmZWF0dXJlIGlzIHNlbGVjdGVkICBbIF0gZmVhdHVyZSBpcyBleGNsdWRlZCIpLA0KICAg
IC1yYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPSBOXygNCiAgICAtCSJVc2UgdGhlIGFycm93IGtl
eXMgdG8gbmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIg0KICAgIC0JInByZXNzIHRoZSBob3RrZXkg
b2YgdGhlIGl0ZW0geW91IHdpc2ggdG8gc2VsZWN0ICINCiAgICAtCSJmb2xsb3dlZCBieSB0aGUg
PFNQQUNFIEJBUj4uICINCiAgICAtCSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRp
b24gYWJvdXQgdGhpcyBvcHRpb24uIiksDQogICAgLWlucHV0Ym94X2luc3RydWN0aW9uc19pbnRb
XSA9IE5fKA0KICAgIC0JIlBsZWFzZSBlbnRlciBhIGRlY2ltYWwgdmFsdWUuICINCiAgICAtCSJG
cmFjdGlvbnMgd2lsbCBub3QgYmUgYWNjZXB0ZWQuICAiDQogICAgLQkiVXNlIHRoZSA8VEFCPiBr
ZXkgdG8gbW92ZSBmcm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4i
KSwNCiAgICAtaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleFtdID0gTl8oDQogICAgLQkiUGxlYXNl
IGVudGVyIGEgaGV4YWRlY2ltYWwgdmFsdWUuICINCiAgICAtCSJVc2UgdGhlIDxUQUI+IGtleSB0
byBtb3ZlIGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIpLA0K
ICAgIC1pbnB1dGJveF9pbnN0cnVjdGlvbnNfc3RyaW5nW10gPSBOXygNCiAgICAtCSJQbGVhc2Ug
ZW50ZXIgYSBzdHJpbmcgdmFsdWUuICINCiAgICAtCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3Zl
IGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIpLA0KICAgIC1z
ZXRtb2RfdGV4dFtdID0gTl8oDQogICAgLQkiVGhpcyBmZWF0dXJlIGRlcGVuZHMgb24gYW5vdGhl
ciB3aGljaCBoYXMgYmVlbiBjb25maWd1cmVkIGFzIGEgbW9kdWxlLlxuIg0KICAgIC0JIkFzIGEg
cmVzdWx0LCB0aGlzIGZlYXR1cmUgd2lsbCBiZSBidWlsdCBhcyBhIG1vZHVsZS4iKSwNCiAgICAt
bG9hZF9jb25maWdfdGV4dFtdID0gTl8oDQogICAgLQkiRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNv
bmZpZ3VyYXRpb24gZmlsZSB5b3Ugd2lzaCB0byBsb2FkLiAgIg0KICAgIC0JIkFjY2VwdCB0aGUg
bmFtZSBzaG93biB0byByZXN0b3JlIHRoZSBjb25maWd1cmF0aW9uIHlvdSAiDQogICAgLQkibGFz
dCByZXRyaWV2ZWQuICBMZWF2ZSBibGFuayB0byBhYm9ydC4iKSwNCiAgICAtbG9hZF9jb25maWdf
aGVscFtdID0gTl8oDQogICAgLQkiXG4iDQogICAgLQkiRm9yIHZhcmlvdXMgcmVhc29ucywgb25l
IG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJhbCBkaWZmZXJlbnRcbiINCiAgICAtCSJjb25maWd1cmF0
aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiINCiAgICAtCSJcbiINCiAgICAt
CSJJZiB5b3UgaGF2ZSBzYXZlZCBhIHByZXZpb3VzIGNvbmZpZ3VyYXRpb24gaW4gYSBmaWxlIG90
aGVyIHRoYW4gdGhlXG4iDQogICAgLQkiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhl
cmUgd2lsbCBhbGxvdyB5b3UgdG8gbW9kaWZ5IHRoYXRcbiINCiAgICAtCSJjb25maWd1cmF0aW9u
LlxuIg0KICAgIC0JIlxuIg0KICAgIC0JIklmIHlvdSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBo
YXZlIHByb2JhYmx5IG5ldmVyIHVzZWQgYWx0ZXJuYXRlXG4iDQogICAgLQkiY29uZmlndXJhdGlv
biBmaWxlcy4gWW91IHNob3VsZCB0aGVyZWZvcmUgbGVhdmUgdGhpcyBibGFuayB0byBhYm9ydC5c
biIpLA0KICAgIC1zYXZlX2NvbmZpZ190ZXh0W10gPSBOXygNCiAgICAtCSJFbnRlciBhIGZpbGVu
YW1lIHRvIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgc2F2ZWQgIg0KICAgIC0J
ImFzIGFuIGFsdGVybmF0ZS4gIExlYXZlIGJsYW5rIHRvIGFib3J0LiIpLA0KICAgIC1zYXZlX2Nv
bmZpZ19oZWxwW10gPSBOXygNCiAgICAtCSJcbiINCiAgICAtCSJGb3IgdmFyaW91cyByZWFzb25z
LCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnNcbiINCiAgICAt
CSJhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiINCiAgICAtCSJcbiINCiAgICAtCSJF
bnRlcmluZyBhIGZpbGUgbmFtZSBoZXJlIHdpbGwgYWxsb3cgeW91IHRvIGxhdGVyIHJldHJpZXZl
LCBtb2RpZnlcbiINCiAgICAtCSJhbmQgdXNlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYXMg
YW4gYWx0ZXJuYXRlIHRvIHdoYXRldmVyXG4iDQogICAgLQkiY29uZmlndXJhdGlvbiBvcHRpb25z
IHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5cbiINCiAgICAtCSJcbiINCiAgICAtCSJJ
ZiB5b3UgYXJlIHVuY2VydGFpbiB3aGF0IGFsbCB0aGlzIG1lYW5zIHRoZW4geW91IHNob3VsZCBw
cm9iYWJseVxuIg0KICAgIC0JImxlYXZlIHRoaXMgYmxhbmsuXG4iKSwNCiAgICAtc2VhcmNoX2hl
bHBbXSA9IE5fKA0KICAgIC0JIlxuIg0KICAgIC0JIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlz
cGxheSB0aGVpciByZWxhdGlvbnMuXG4iDQogICAgLQkiUmVndWxhciBleHByZXNzaW9ucyBhcmUg
YWxsb3dlZC5cbiINCiAgICAtCSJFeGFtcGxlOiBzZWFyY2ggZm9yIFwiXkZPT1wiXG4iDQogICAg
LQkiUmVzdWx0OlxuIg0KICAgIC0JIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgLQkiU3ltYm9sOiBGT08gWz1t
XVxuIg0KICAgIC0JIlR5cGUgIDogdHJpc3RhdGVcbiINCiAgICAtCSJQcm9tcHQ6IEZvbyBidXMg
aXMgdXNlZCB0byBkcml2ZSB0aGUgYmFyIEhXXG4iDQogICAgLQkiICBMb2NhdGlvbjpcbiINCiAg
ICAtCSIgICAgLT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EpXG4iDQogICAg
LQkiICAgICAgLT4gUENJIHN1cHBvcnQgKFBDSSBbPXldKVxuIg0KICAgIC0JIigxKSAgICAgLT4g
UENJIGFjY2VzcyBtb2RlICg8Y2hvaWNlPiBbPXldKVxuIg0KICAgIC0JIiAgRGVmaW5lZCBhdCBk
cml2ZXJzL3BjaS9LY29uZmlnOjQ3XG4iDQogICAgLQkiICBEZXBlbmRzIG9uOiBYODZfTE9DQUxf
QVBJQyAmJiBYODZfSU9fQVBJQyB8fCBJQTY0XG4iDQogICAgLQkiICBTZWxlY3RzOiBMSUJDUkMz
MlxuIg0KICAgIC0JIiAgU2VsZWN0ZWQgYnk6IEJBUiBbPW5dXG4iDQogICAgLQkiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c
biINCiAgICAtCSJvIFRoZSBsaW5lICdUeXBlOicgc2hvd3MgdGhlIHR5cGUgb2YgdGhlIGNvbmZp
Z3VyYXRpb24gb3B0aW9uIGZvclxuIg0KICAgIC0JIiAgdGhpcyBzeW1ib2wgKGJvb2xlYW4sIHRy
aXN0YXRlLCBzdHJpbmcsIC4uLilcbiINCiAgICAtCSJvIFRoZSBsaW5lICdQcm9tcHQ6JyBzaG93
cyB0aGUgdGV4dCB1c2VkIGluIHRoZSBtZW51IHN0cnVjdHVyZSBmb3JcbiINCiAgICAtCSIgIHRo
aXMgc3ltYm9sXG4iDQogICAgLQkibyBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQgd2hh
dCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIg0KICAgIC0JIiAgaXMgZGVmaW5lZFxu
Ig0KICAgIC0JIm8gVGhlICdEZXBlbmRzIG9uOicgbGluZSB0ZWxscyB3aGF0IHN5bWJvbHMgbmVl
ZCB0byBiZSBkZWZpbmVkIGZvclxuIg0KICAgIC0JIiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJs
ZSBpbiB0aGUgbWVudSAoc2VsZWN0YWJsZSlcbiINCiAgICAtCSJvIFRoZSAnTG9jYXRpb246JyBs
aW5lcyB0ZWxscyB3aGVyZSBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgdGhpcyBzeW1ib2xcbiINCiAg
ICAtCSIgIGlzIGxvY2F0ZWRcbiINCiAgICAtCSIgICAgQSBsb2NhdGlvbiBmb2xsb3dlZCBieSBh
IFs9eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhXG4iDQogICAgLQkiICAgIHNlbGVjdGFibGUg
bWVudSBpdGVtIC0gYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGRpc3BsYXllZCBpbnNpZGVcbiIN
CiAgICAtCSIgICAgYnJhY2tldHMuXG4iDQogICAgLQkiICAgIFByZXNzIHRoZSBrZXkgaW4gdGhl
ICgjKSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iDQogICAgLQkiICAgIGxvY2F0
aW9uLiBZb3Ugd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgY3VycmVudCBzZWFyY2ggcmVzdWx0c1xu
Ig0KICAgIC0JIiAgICBhZnRlciBleGl0aW5nIHRoaXMgbmV3IG1lbnUuXG4iDQogICAgLQkibyBU
aGUgJ1NlbGVjdHM6JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyB3aWxsIGJlIGF1dG9tYXRpY2Fs
bHlcbiINCiAgICAtCSIgIHNlbGVjdGVkIGlmIHRoaXMgc3ltYm9sIGlzIHNlbGVjdGVkICh5IG9y
IG0pXG4iDQogICAgLQkibyBUaGUgJ1NlbGVjdGVkIGJ5JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9s
IGhhcyBzZWxlY3RlZCB0aGlzIHN5bWJvbFxuIg0KICAgIC0JIlxuIg0KICAgIC0JIk9ubHkgcmVs
ZXZhbnQgbGluZXMgYXJlIHNob3duLlxuIg0KICAgIC0JIlxuXG4iDQogICAgLQkiU2VhcmNoIGV4
YW1wbGVzOlxuIg0KICAgIC0JIkV4YW1wbGVzOiBVU0IJPT4gZmluZCBhbGwgc3ltYm9scyBjb250
YWluaW5nIFVTQlxuIg0KICAgIC0JIiAgICAgICAgICBeVVNCID0+IGZpbmQgYWxsIHN5bWJvbHMg
c3RhcnRpbmcgd2l0aCBVU0JcbiINCiAgICAtCSIgICAgICAgICAgVVNCJCA9PiBmaW5kIGFsbCBz
eW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIg0KICAgIC0JIlxuIik7DQogICAgLQ0KICAgIC1zdGF0
aWMgaW50IGluZGVudDsNCiAgICAtc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnU7DQog
ICAgLXN0YXRpYyBpbnQgY2hpbGRfY291bnQ7DQogICAgLXN0YXRpYyBpbnQgc2luZ2xlX21lbnVf
bW9kZTsNCiAgICAtc3RhdGljIGludCBzaG93X2FsbF9vcHRpb25zOw0KICAgIC1zdGF0aWMgaW50
IHNhdmVfYW5kX2V4aXQ7DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51
ICptZW51LCBzdHJ1Y3QgbWVudSAqYWN0aXZlX21lbnUpOw0KICAgIC1zdGF0aWMgdm9pZCBjb25m
X2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgLXN0YXRpYyB2b2lkIGNvbmZfc3RyaW5n
KHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpOw0K
ICAgIC1zdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7DQogICAgLXN0YXRpYyBpbnQgc2hvd190
ZXh0Ym94X2V4dChjb25zdCBjaGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIsIGludCBjLA0K
ICAgIC0JCQkgICAgaW50ICprZXlzLCBpbnQgKnZzY3JvbGwsIGludCAqaHNjcm9sbCwNCiAgICAt
CQkJICAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsNCiAgICAtc3Rh
dGljIHZvaWQgc2hvd190ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp0ZXh0
LCBpbnQgciwgaW50IGMpOw0KICAgIC1zdGF0aWMgdm9pZCBzaG93X2hlbHB0ZXh0KGNvbnN0IGNo
YXIgKnRpdGxlLCBjb25zdCBjaGFyICp0ZXh0KTsNCiAgICAtc3RhdGljIHZvaWQgc2hvd19oZWxw
KHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtDQogICAgLXN0YXRpYyBjaGFyIGZpbGVuYW1lW1BB
VEhfTUFYKzFdOw0KICAgIC1zdGF0aWMgdm9pZCBzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNo
YXIgKmNvbmZpZ19maWxlbmFtZSkNCiAgICAtew0KICAgIC0Jc3RhdGljIGNoYXIgbWVudV9iYWNr
dGl0bGVbUEFUSF9NQVgrMTI4XTsNCiAgICAtCWludCBzaXplOw0KICAgIC0NCiAgICAtCXNpemUg
PSBzbnByaW50ZihtZW51X2JhY2t0aXRsZSwgc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSwNCiAgICAt
CSAgICAgICAgICAgICAgICAiJXMgLSAlcyIsIGNvbmZpZ19maWxlbmFtZSwgcm9vdG1lbnUucHJv
bXB0LT50ZXh0KTsNCiAgICAtCWlmIChzaXplID49IHNpemVvZihtZW51X2JhY2t0aXRsZSkpDQog
ICAgLQkJbWVudV9iYWNrdGl0bGVbc2l6ZW9mKG1lbnVfYmFja3RpdGxlKS0xXSA9ICdcMCc7DQog
ICAgLQlzZXRfZGlhbG9nX2JhY2t0aXRsZShtZW51X2JhY2t0aXRsZSk7DQogICAgLQ0KICAgIC0J
c2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMiLCBjb25maWdf
ZmlsZW5hbWUpOw0KICAgIC0JaWYgKHNpemUgPj0gc2l6ZW9mKGZpbGVuYW1lKSkNCiAgICAtCQlm
aWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gJ1wwJzsNCiAgICAtfQ0KICAgIC0NCiAgICAt
c3RydWN0IHN1YnRpdGxlX3BhcnQgew0KICAgIC0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyaWVzOw0K
ICAgIC0JY29uc3QgY2hhciAqdGV4dDsNCiAgICAtfTsNCiAgICAtc3RhdGljIExJU1RfSEVBRCh0
cmFpbCk7DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxl
czsNCiAgICAtc3RhdGljIHZvaWQgc2V0X3N1YnRpdGxlKHZvaWQpDQogICAgLXsNCiAgICAtCXN0
cnVjdCBzdWJ0aXRsZV9wYXJ0ICpzcDsNCiAgICAtCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpwb3Ms
ICp0bXA7DQogICAgLQ0KICAgIC0JZm9yIChwb3MgPSBzdWJ0aXRsZXM7IHBvcyAhPSBOVUxMOyBw
b3MgPSB0bXApIHsNCiAgICAtCQl0bXAgPSBwb3MtPm5leHQ7DQogICAgLQkJZnJlZShwb3MpOw0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCXN1YnRpdGxlcyA9IE5VTEw7DQogICAgLQlsaXN0X2Zvcl9l
YWNoX2VudHJ5KHNwLCAmdHJhaWwsIGVudHJpZXMpIHsNCiAgICAtCQlpZiAoc3AtPnRleHQpIHsN
CiAgICAtCQkJaWYgKHBvcykgew0KICAgIC0JCQkJcG9zLT5uZXh0ID0geGNhbGxvYyhzaXplb2Yo
KnBvcyksIDEpOw0KICAgIC0JCQkJcG9zID0gcG9zLT5uZXh0Ow0KICAgIC0JCQl9IGVsc2Ugew0K
ICAgIC0JCQkJc3VidGl0bGVzID0gcG9zID0geGNhbGxvYyhzaXplb2YoKnBvcyksIDEpOw0KICAg
IC0JCQl9DQogICAgLQkJCXBvcy0+dGV4dCA9IHNwLT50ZXh0Ow0KICAgIC0JCX0NCiAgICAtCX0N
CiAgICAtDQogICAgLQlzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdWJ0aXRsZXMpOw0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCByZXNldF9zdWJ0aXRsZSh2b2lkKQ0KICAgIC17DQogICAg
LQlzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqcG9zLCAqdG1wOw0KICAgIC0NCiAgICAtCWZvciAocG9z
ID0gc3VidGl0bGVzOyBwb3MgIT0gTlVMTDsgcG9zID0gdG1wKSB7DQogICAgLQkJdG1wID0gcG9z
LT5uZXh0Ow0KICAgIC0JCWZyZWUocG9zKTsNCiAgICAtCX0NCiAgICAtCXN1YnRpdGxlcyA9IE5V
TEw7DQogICAgLQlzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdWJ0aXRsZXMpOw0KICAgIC19DQogICAg
LQ0KICAgIC1zdHJ1Y3Qgc2VhcmNoX2RhdGEgew0KICAgIC0Jc3RydWN0IGxpc3RfaGVhZCAqaGVh
ZDsNCiAgICAtCXN0cnVjdCBtZW51ICoqdGFyZ2V0czsNCiAgICAtCWludCAqa2V5czsNCiAgICAt
fTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHVwZGF0ZV90ZXh0KGNoYXIgKmJ1Ziwgc2l6ZV90
IHN0YXJ0LCBzaXplX3QgZW5kLCB2b2lkICpfZGF0YSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHNl
YXJjaF9kYXRhICpkYXRhID0gX2RhdGE7DQogICAgLQlzdHJ1Y3QganVtcF9rZXkgKnBvczsNCiAg
ICAtCWludCBrID0gMDsNCiAgICAtDQogICAgLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgZGF0
YS0+aGVhZCwgZW50cmllcykgew0KICAgIC0JCWlmIChwb3MtPm9mZnNldCA+PSBzdGFydCAmJiBw
b3MtPm9mZnNldCA8IGVuZCkgew0KICAgIC0JCQljaGFyIGhlYWRlcls0XTsNCiAgICAtDQogICAg
LQkJCWlmIChrIDwgSlVNUF9OQikgew0KICAgIC0JCQkJaW50IGtleSA9ICcwJyArIChwb3MtPmlu
ZGV4ICUgSlVNUF9OQikgKyAxOw0KICAgIC0NCiAgICAtCQkJCXNwcmludGYoaGVhZGVyLCAiKCVj
KSIsIGtleSk7DQogICAgLQkJCQlkYXRhLT5rZXlzW2tdID0ga2V5Ow0KICAgIC0JCQkJZGF0YS0+
dGFyZ2V0c1trXSA9IHBvcy0+dGFyZ2V0Ow0KICAgIC0JCQkJaysrOw0KICAgIC0JCQl9IGVsc2Ug
ew0KICAgIC0JCQkJc3ByaW50ZihoZWFkZXIsICIgICAiKTsNCiAgICAtCQkJfQ0KICAgIC0NCiAg
ICAtCQkJbWVtY3B5KGJ1ZiArIHBvcy0+b2Zmc2V0LCBoZWFkZXIsIHNpemVvZihoZWFkZXIpIC0g
MSk7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JZGF0YS0+a2V5c1trXSA9IDA7DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpDQogICAgLXsNCiAgICAt
CXN0cnVjdCBzeW1ib2wgKipzeW1fYXJyOw0KICAgIC0Jc3RydWN0IGdzdHIgcmVzOw0KICAgIC0J
c3RydWN0IGdzdHIgdGl0bGU7DQogICAgLQljaGFyICpkaWFsb2dfaW5wdXQ7DQogICAgLQlpbnQg
ZHJlcywgdnNjcm9sbCA9IDAsIGhzY3JvbGwgPSAwOw0KICAgIC0JYm9vbCBhZ2FpbjsNCiAgICAt
CXN0cnVjdCBnc3RyIHN0dGV4dDsNCiAgICAtCXN0cnVjdCBzdWJ0aXRsZV9wYXJ0IHN0cGFydDsN
CiAgICAtDQogICAgLQl0aXRsZSA9IHN0cl9uZXcoKTsNCiAgICAtCXN0cl9wcmludGYoICZ0aXRs
ZSwgXygiRW50ZXIgKHN1YilzdHJpbmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIg0KICAgIC0J
CQkgICAgICAiKHdpdGggb3Igd2l0aG91dCBcIiVzXCIpIiksIENPTkZJR18pOw0KICAgIC0NCiAg
ICAtYWdhaW46DQogICAgLQlkaWFsb2dfY2xlYXIoKTsNCiAgICAtCWRyZXMgPSBkaWFsb2dfaW5w
dXRib3goXygiU2VhcmNoIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVyIiksDQogICAgLQkJCSAgICAg
IHN0cl9nZXQoJnRpdGxlKSwNCiAgICAtCQkJICAgICAgMTAsIDc1LCAiIik7DQogICAgLQlzd2l0
Y2ggKGRyZXMpIHsNCiAgICAtCWNhc2UgMDoNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgMToN
CiAgICAtCQlzaG93X2hlbHB0ZXh0KF8oIlNlYXJjaCBDb25maWd1cmF0aW9uIiksIHNlYXJjaF9o
ZWxwKTsNCiAgICAtCQlnb3RvIGFnYWluOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlzdHJfZnJl
ZSgmdGl0bGUpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBzdHJp
cCB0aGUgcHJlZml4IGlmIG5lY2Vzc2FyeSAqLw0KICAgIC0JZGlhbG9nX2lucHV0ID0gZGlhbG9n
X2lucHV0X3Jlc3VsdDsNCiAgICAtCWlmIChzdHJuY2FzZWNtcChkaWFsb2dfaW5wdXRfcmVzdWx0
LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApDQogICAgLQkJZGlhbG9nX2lucHV0ICs9
IHN0cmxlbihDT05GSUdfKTsNCiAgICAtDQogICAgLQlzdHRleHQgPSBzdHJfbmV3KCk7DQogICAg
LQlzdHJfcHJpbnRmKCZzdHRleHQsICJTZWFyY2ggKCVzKSIsIGRpYWxvZ19pbnB1dF9yZXN1bHQp
Ow0KICAgIC0Jc3RwYXJ0LnRleHQgPSBzdHJfZ2V0KCZzdHRleHQpOw0KICAgIC0JbGlzdF9hZGRf
dGFpbCgmc3RwYXJ0LmVudHJpZXMsICZ0cmFpbCk7DQogICAgLQ0KICAgIC0Jc3ltX2FyciA9IHN5
bV9yZV9zZWFyY2goZGlhbG9nX2lucHV0KTsNCiAgICAtCWRvIHsNCiAgICAtCQlMSVNUX0hFQUQo
aGVhZCk7DQogICAgLQkJc3RydWN0IG1lbnUgKnRhcmdldHNbSlVNUF9OQl07DQogICAgLQkJaW50
IGtleXNbSlVNUF9OQiArIDFdLCBpOw0KICAgIC0JCXN0cnVjdCBzZWFyY2hfZGF0YSBkYXRhID0g
ew0KICAgIC0JCQkuaGVhZCA9ICZoZWFkLA0KICAgIC0JCQkudGFyZ2V0cyA9IHRhcmdldHMsDQog
ICAgLQkJCS5rZXlzID0ga2V5cywNCiAgICAtCQl9Ow0KICAgIC0JCXN0cnVjdCBqdW1wX2tleSAq
cG9zLCAqdG1wOw0KICAgIC0NCiAgICAtCQlyZXMgPSBnZXRfcmVsYXRpb25zX3N0cihzeW1fYXJy
LCAmaGVhZCk7DQogICAgLQkJc2V0X3N1YnRpdGxlKCk7DQogICAgLQkJZHJlcyA9IHNob3dfdGV4
dGJveF9leHQoXygiU2VhcmNoIFJlc3VsdHMiKSwgKGNoYXIgKikNCiAgICAtCQkJCQlzdHJfZ2V0
KCZyZXMpLCAwLCAwLCBrZXlzLCAmdnNjcm9sbCwNCiAgICAtCQkJCQkmaHNjcm9sbCwgJnVwZGF0
ZV90ZXh0LCAodm9pZCAqKQ0KICAgIC0JCQkJCSZkYXRhKTsNCiAgICAtCQlhZ2FpbiA9IGZhbHNl
Ow0KICAgIC0JCWZvciAoaSA9IDA7IGkgPCBKVU1QX05CICYmIGtleXNbaV07IGkrKykNCiAgICAt
CQkJaWYgKGRyZXMgPT0ga2V5c1tpXSkgew0KICAgIC0JCQkJY29uZih0YXJnZXRzW2ldLT5wYXJl
bnQsIHRhcmdldHNbaV0pOw0KICAgIC0JCQkJYWdhaW4gPSB0cnVlOw0KICAgIC0JCQl9DQogICAg
LQkJc3RyX2ZyZWUoJnJlcyk7DQogICAgLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywg
dG1wLCAmaGVhZCwgZW50cmllcykNCiAgICAtCQkJZnJlZShwb3MpOw0KICAgIC0JfSB3aGlsZSAo
YWdhaW4pOw0KICAgIC0JZnJlZShzeW1fYXJyKTsNCiAgICAtCXN0cl9mcmVlKCZ0aXRsZSk7DQog
ICAgLQlsaXN0X2RlbCh0cmFpbC5wcmV2KTsNCiAgICAtCXN0cl9mcmVlKCZzdHRleHQpOw0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBidWlsZF9jb25mKHN0cnVjdCBtZW51ICptZW51
KQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7DQogICAgLQlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgLQlpbnQgdHlwZSwgdG1w
LCBkb2ludCA9IDI7DQogICAgLQl0cmlzdGF0ZSB2YWw7DQogICAgLQljaGFyIGNoOw0KICAgIC0J
Ym9vbCB2aXNpYmxlOw0KICAgIC0NCiAgICAtCS8qDQogICAgLQkgKiBub3RlOiBtZW51X2lzX3Zp
c2libGUoKSBoYXMgc2lkZSBlZmZlY3QgdGhhdCBpdCB3aWxsDQogICAgLQkgKiByZWNhbGMgdGhl
IHZhbHVlIG9mIHRoZSBzeW1ib2wuDQogICAgLQkgKi8NCiAgICAtCXZpc2libGUgPSBtZW51X2lz
X3Zpc2libGUobWVudSk7DQogICAgLQlpZiAoc2hvd19hbGxfb3B0aW9ucyAmJiAhbWVudV9oYXNf
cHJvbXB0KG1lbnUpKQ0KICAgIC0JCXJldHVybjsNCiAgICAtCWVsc2UgaWYgKCFzaG93X2FsbF9v
cHRpb25zICYmICF2aXNpYmxlKQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlzeW0gPSBt
ZW51LT5zeW07DQogICAgLQlwcm9wID0gbWVudS0+cHJvbXB0Ow0KICAgIC0JaWYgKCFzeW0pIHsN
CiAgICAtCQlpZiAocHJvcCAmJiBtZW51ICE9IGN1cnJlbnRfbWVudSkgew0KICAgIC0JCQljb25z
dCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgLQkJCXN3aXRjaCAo
cHJvcC0+dHlwZSkgew0KICAgIC0JCQljYXNlIFBfTUVOVToNCiAgICAtCQkJCWNoaWxkX2NvdW50
Kys7DQogICAgLQkJCQlwcm9tcHQgPSBfKHByb21wdCk7DQogICAgLQkJCQlpZiAoc2luZ2xlX21l
bnVfbW9kZSkgew0KICAgIC0JCQkJCWl0ZW1fbWFrZSgiJXMlKmMlcyIsDQogICAgLQkJCQkJCSAg
bWVudS0+ZGF0YSA/ICItLT4iIDogIisrPiIsDQogICAgLQkJCQkJCSAgaW5kZW50ICsgMSwgJyAn
LCBwcm9tcHQpOw0KICAgIC0JCQkJfSBlbHNlDQogICAgLQkJCQkJaXRlbV9tYWtlKCIgICAlKmMl
cyAgJXMiLA0KICAgIC0JCQkJCQkgIGluZGVudCArIDEsICcgJywgcHJvbXB0LA0KICAgIC0JCQkJ
CQkgIG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0tLSIgOiAiLS0tPiIpOw0KICAgIC0JCQkJaXRl
bV9zZXRfdGFnKCdtJyk7DQogICAgLQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOw0KICAgIC0JCQkJ
aWYgKHNpbmdsZV9tZW51X21vZGUgJiYgbWVudS0+ZGF0YSkNCiAgICAtCQkJCQlnb3RvIGNvbmZf
Y2hpbGRzOw0KICAgIC0JCQkJcmV0dXJuOw0KICAgIC0JCQljYXNlIFBfQ09NTUVOVDoNCiAgICAt
CQkJCWlmIChwcm9tcHQpIHsNCiAgICAtCQkJCQljaGlsZF9jb3VudCsrOw0KICAgIC0JCQkJCWl0
ZW1fbWFrZSgiICAgJSpjKioqICVzICoqKiIsIGluZGVudCArIDEsICcgJywgXyhwcm9tcHQpKTsN
CiAgICAtCQkJCQlpdGVtX3NldF90YWcoJzonKTsNCiAgICAtCQkJCQlpdGVtX3NldF9kYXRhKG1l
bnUpOw0KICAgIC0JCQkJfQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWRlZmF1bHQ6DQogICAg
LQkJCQlpZiAocHJvbXB0KSB7DQogICAgLQkJCQkJY2hpbGRfY291bnQrKzsNCiAgICAtCQkJCQlp
dGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwgJyAnLCBfKHByb21wdCkpOw0KICAgIC0J
CQkJCWl0ZW1fc2V0X3RhZygnOicpOw0KICAgIC0JCQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7DQog
ICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtCQl9IGVsc2UNCiAgICAtCQkJZG9pbnQgPSAwOw0K
ICAgIC0JCWdvdG8gY29uZl9jaGlsZHM7DQogICAgLQl9DQogICAgLQ0KICAgIC0JdHlwZSA9IHN5
bV9nZXRfdHlwZShzeW0pOw0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgIC0J
CXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOw0KICAg
IC0JCXN0cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7DQogICAgLQ0KICAgIC0JCWNoaWxkX2Nv
dW50Kys7DQogICAgLQkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0KSB7DQogICAgLQkJCWlmIChtZW51X2lzX3Zpc2libGUoY2hpbGQpICYmIGNoaWxk
LT5zeW0gPT0gZGVmX3N5bSkNCiAgICAtCQkJCWRlZl9tZW51ID0gY2hpbGQ7DQogICAgLQkJfQ0K
ICAgIC0NCiAgICAtCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQkJ
aWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgIC0JCQlzd2l0Y2ggKHR5cGUpIHsNCiAg
ICAtCQkJY2FzZSBTX0JPT0xFQU46DQogICAgLQkJCQlpdGVtX21ha2UoIlslY10iLCB2YWwgPT0g
bm8gPyAnICcgOiAnKicpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgU19UUklTVEFU
RToNCiAgICAtCQkJCXN3aXRjaCAodmFsKSB7DQogICAgLQkJCQljYXNlIHllczogY2ggPSAnKic7
IGJyZWFrOw0KICAgIC0JCQkJY2FzZSBtb2Q6IGNoID0gJ00nOyBicmVhazsNCiAgICAtCQkJCWRl
ZmF1bHQ6ICBjaCA9ICcgJzsgYnJlYWs7DQogICAgLQkJCQl9DQogICAgLQkJCQlpdGVtX21ha2Uo
IjwlYz4iLCBjaCk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCQlpdGVtX3Nl
dF90YWcoJ3QnKTsNCiAgICAtCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICAtCQl9IGVsc2Ug
ew0KICAgIC0JCQlpdGVtX21ha2UoIiAgICIpOw0KICAgIC0JCQlpdGVtX3NldF90YWcoZGVmX21l
bnUgPyAndCcgOiAnOicpOw0KICAgIC0JCQlpdGVtX3NldF9kYXRhKG1lbnUpOw0KICAgIC0JCX0N
CiAgICAtDQogICAgLQkJaXRlbV9hZGRfc3RyKCIlKmMlcyIsIGluZGVudCArIDEsICcgJywgXyht
ZW51X2dldF9wcm9tcHQobWVudSkpKTsNCiAgICAtCQlpZiAodmFsID09IHllcykgew0KICAgIC0J
CQlpZiAoZGVmX21lbnUpIHsNCiAgICAtCQkJCWl0ZW1fYWRkX3N0cigiICglcykiLCBfKG1lbnVf
Z2V0X3Byb21wdChkZWZfbWVudSkpKTsNCiAgICAtCQkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7
DQogICAgLQkJCQlpZiAoZGVmX21lbnUtPmxpc3QpIHsNCiAgICAtCQkJCQlpbmRlbnQgKz0gMjsN
CiAgICAtCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsNCiAgICAtCQkJCQlpbmRlbnQgLT0gMjsN
CiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0J
fSBlbHNlIHsNCiAgICAtCQlpZiAobWVudSA9PSBjdXJyZW50X21lbnUpIHsNCiAgICAtCQkJaXRl
bV9tYWtlKCItLS0lKmMlcyIsIGluZGVudCArIDEsICcgJywgXyhtZW51X2dldF9wcm9tcHQobWVu
dSkpKTsNCiAgICAtCQkJaXRlbV9zZXRfdGFnKCc6Jyk7DQogICAgLQkJCWl0ZW1fc2V0X2RhdGEo
bWVudSk7DQogICAgLQkJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgLQkJfQ0KICAgIC0JCWNoaWxk
X2NvdW50Kys7DQogICAgLQkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAg
IC0JCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgew0KICAgIC0J
CQlpdGVtX21ha2UoIiAgICIpOw0KICAgIC0JCQlpdGVtX3NldF90YWcoJzonKTsNCiAgICAtCQkJ
aXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQlzd2l0Y2ggKHR5
cGUpIHsNCiAgICAtCQkJY2FzZSBTX0JPT0xFQU46DQogICAgLQkJCQlpZiAoc3ltX2lzX2NoYW5n
YWJsZShzeW0pKQ0KICAgIC0JCQkJCWl0ZW1fbWFrZSgiWyVjXSIsIHZhbCA9PSBubyA/ICcgJyA6
ICcqJyk7DQogICAgLQkJCQllbHNlDQogICAgLQkJCQkJaXRlbV9tYWtlKCItJWMtIiwgdmFsID09
IG5vID8gJyAnIDogJyonKTsNCiAgICAtCQkJCWl0ZW1fc2V0X3RhZygndCcpOw0KICAgIC0JCQkJ
aXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIFNfVFJJ
U1RBVEU6DQogICAgLQkJCQlzd2l0Y2ggKHZhbCkgew0KICAgIC0JCQkJY2FzZSB5ZXM6IGNoID0g
JyonOyBicmVhazsNCiAgICAtCQkJCWNhc2UgbW9kOiBjaCA9ICdNJzsgYnJlYWs7DQogICAgLQkJ
CQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOw0KICAgIC0JCQkJfQ0KICAgIC0JCQkJaWYgKHN5
bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgIC0JCQkJCWlmIChzeW0tPnJldl9kZXAudHJpID09
IG1vZCkNCiAgICAtCQkJCQkJaXRlbV9tYWtlKCJ7JWN9IiwgY2gpOw0KICAgIC0JCQkJCWVsc2UN
CiAgICAtCQkJCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOw0KICAgIC0JCQkJfSBlbHNlDQogICAg
LQkJCQkJaXRlbV9tYWtlKCItJWMtIiwgY2gpOw0KICAgIC0JCQkJaXRlbV9zZXRfdGFnKCd0Jyk7
DQogICAgLQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJ
CWRlZmF1bHQ6DQogICAgLQkJCQl0bXAgPSAyICsgc3RybGVuKHN5bV9nZXRfc3RyaW5nX3ZhbHVl
KHN5bSkpOyAvKiAoKSA9IDIgKi8NCiAgICAtCQkJCWl0ZW1fbWFrZSgiKCVzKSIsIHN5bV9nZXRf
c3RyaW5nX3ZhbHVlKHN5bSkpOw0KICAgIC0JCQkJdG1wID0gaW5kZW50IC0gdG1wICsgNDsNCiAg
ICAtCQkJCWlmICh0bXAgPCAwKQ0KICAgIC0JCQkJCXRtcCA9IDA7DQogICAgLQkJCQlpdGVtX2Fk
ZF9zdHIoIiUqYyVzJXMiLCB0bXAsICcgJywgXyhtZW51X2dldF9wcm9tcHQobWVudSkpLA0KICAg
IC0JCQkJCSAgICAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0p
KSA/DQogICAgLQkJCQkJICAgICAiIiA6IF8oIiAoTkVXKSIpKTsNCiAgICAtCQkJCWl0ZW1fc2V0
X3RhZygncycpOw0KICAgIC0JCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICAtCQkJCWdvdG8g
Y29uZl9jaGlsZHM7DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQkJaXRlbV9hZGRfc3RyKCIl
KmMlcyVzIiwgaW5kZW50ICsgMSwgJyAnLCBfKG1lbnVfZ2V0X3Byb21wdChtZW51KSksDQogICAg
LQkJCSAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/DQog
ICAgLQkJCSAgIiIgOiBfKCIgKE5FVykiKSk7DQogICAgLQkJaWYgKG1lbnUtPnByb21wdC0+dHlw
ZSA9PSBQX01FTlUpIHsNCiAgICAtCQkJaXRlbV9hZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0
eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7DQogICAgLQkJCXJldHVybjsNCiAgICAtCQl9DQog
ICAgLQl9DQogICAgLQ0KICAgIC1jb25mX2NoaWxkczoNCiAgICAtCWluZGVudCArPSBkb2ludDsN
CiAgICAtCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dCkNCiAgICAtCQlidWlsZF9jb25mKGNoaWxkKTsNCiAgICAtCWluZGVudCAtPSBkb2ludDsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSwgc3Ry
dWN0IG1lbnUgKmFjdGl2ZV9tZW51KQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgbWVudSAqc3VibWVu
dTsNCiAgICAtCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsNCiAg
ICAtCXN0cnVjdCBzdWJ0aXRsZV9wYXJ0IHN0cGFydDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5
bTsNCiAgICAtCWludCByZXM7DQogICAgLQlpbnQgc19zY3JvbGwgPSAwOw0KICAgIC0NCiAgICAt
CWlmIChtZW51ICE9ICZyb290bWVudSkNCiAgICAtCQlzdHBhcnQudGV4dCA9IG1lbnVfZ2V0X3By
b21wdChtZW51KTsNCiAgICAtCWVsc2UNCiAgICAtCQlzdHBhcnQudGV4dCA9IE5VTEw7DQogICAg
LQlsaXN0X2FkZF90YWlsKCZzdHBhcnQuZW50cmllcywgJnRyYWlsKTsNCiAgICAtDQogICAgLQl3
aGlsZSAoMSkgew0KICAgIC0JCWl0ZW1fcmVzZXQoKTsNCiAgICAtCQljdXJyZW50X21lbnUgPSBt
ZW51Ow0KICAgIC0JCWJ1aWxkX2NvbmYobWVudSk7DQogICAgLQkJaWYgKCFjaGlsZF9jb3VudCkN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJc2V0X3N1YnRpdGxlKCk7DQogICAgLQkJZGlhbG9nX2Ns
ZWFyKCk7DQogICAgLQkJcmVzID0gZGlhbG9nX21lbnUocHJvbXB0ID8gXyhwcm9tcHQpIDogXygi
TWFpbiBNZW51IiksDQogICAgLQkJCQkgIF8obWVudV9pbnN0cnVjdGlvbnMpLA0KICAgIC0JCQkJ
ICBhY3RpdmVfbWVudSwgJnNfc2Nyb2xsKTsNCiAgICAtCQlpZiAocmVzID09IDEgfHwgcmVzID09
IEtFWV9FU0MgfHwgcmVzID09IC1FUlJESVNQTEFZVE9PU01BTEwpDQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCWlmIChpdGVtX2NvdW50KCkgIT0gMCkgew0KICAgIC0JCQlpZiAoIWl0ZW1fYWN0aXZh
dGVfc2VsZWN0ZWQoKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlpZiAoIWl0ZW1fdGFn
KCkpDQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQl9DQogICAgLQkJc3VibWVudSA9IGl0ZW1f
ZGF0YSgpOw0KICAgIC0JCWFjdGl2ZV9tZW51ID0gaXRlbV9kYXRhKCk7DQogICAgLQkJaWYgKHN1
Ym1lbnUpDQogICAgLQkJCXN5bSA9IHN1Ym1lbnUtPnN5bTsNCiAgICAtCQllbHNlDQogICAgLQkJ
CXN5bSA9IE5VTEw7DQogICAgLQ0KICAgIC0JCXN3aXRjaCAocmVzKSB7DQogICAgLQkJY2FzZSAw
Og0KICAgIC0JCQlzd2l0Y2ggKGl0ZW1fdGFnKCkpIHsNCiAgICAtCQkJY2FzZSAnbSc6DQogICAg
LQkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkNCiAgICAtCQkJCQlzdWJtZW51LT5kYXRhID0gKHZv
aWQgKikgKGxvbmcpICFzdWJtZW51LT5kYXRhOw0KICAgIC0JCQkJZWxzZQ0KICAgIC0JCQkJCWNv
bmYoc3VibWVudSwgTlVMTCk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSAndCc6DQog
ICAgLQkJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUo
c3ltKSA9PSB5ZXMpDQogICAgLQkJCQkJY29uZl9jaG9pY2Uoc3VibWVudSk7DQogICAgLQkJCQll
bHNlIGlmIChzdWJtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQ0KICAgIC0JCQkJCWNvbmYo
c3VibWVudSwgTlVMTCk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSAncyc6DQogICAg
LQkJCQljb25mX3N0cmluZyhzdWJtZW51KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQog
ICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgMjoNCiAgICAtCQkJaWYgKHN5bSkNCiAgICAtCQkJ
CXNob3dfaGVscChzdWJtZW51KTsNCiAgICAtCQkJZWxzZSB7DQogICAgLQkJCQlyZXNldF9zdWJ0
aXRsZSgpOw0KICAgIC0JCQkJc2hvd19oZWxwdGV4dChfKCJSRUFETUUiKSwgXyhtY29uZl9yZWFk
bWUpKTsNCiAgICAtCQkJfQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIDM6DQogICAgLQkJ
CXJlc2V0X3N1YnRpdGxlKCk7DQogICAgLQkJCWNvbmZfc2F2ZSgpOw0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIDQ6DQogICAgLQkJCXJlc2V0X3N1YnRpdGxlKCk7DQogICAgLQkJCWNvbmZf
bG9hZCgpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIDU6DQogICAgLQkJCWlmIChpdGVt
X2lzX3RhZygndCcpKSB7DQogICAgLQkJCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0s
IHllcykpDQogICAgLQkJCQkJYnJlYWs7DQogICAgLQkJCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92
YWx1ZShzeW0sIG1vZCkpDQogICAgLQkJCQkJc2hvd190ZXh0Ym94KE5VTEwsIHNldG1vZF90ZXh0
LCA2LCA3NCk7DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSA2Og0KICAg
IC0JCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkNCiAgICAtCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCBubyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgNzoNCiAgICAtCQkJaWYg
KGl0ZW1faXNfdGFnKCd0JykpDQogICAgLQkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwg
bW9kKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSA4Og0KICAgIC0JCQlpZiAoaXRlbV9p
c190YWcoJ3QnKSkNCiAgICAtCQkJCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAg
ICAtCQkJZWxzZSBpZiAoaXRlbV9pc190YWcoJ20nKSkNCiAgICAtCQkJCWNvbmYoc3VibWVudSwg
TlVMTCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgOToNCiAgICAtCQkJc2VhcmNoX2Nv
bmYoKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAxMDoNCiAgICAtCQkJc2hvd19hbGxf
b3B0aW9ucyA9ICFzaG93X2FsbF9vcHRpb25zOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQog
ICAgLQl9DQogICAgLQ0KICAgIC0JbGlzdF9kZWwodHJhaWwucHJldik7DQogICAgLX0NCiAgICAt
DQogICAgLXN0YXRpYyBpbnQgc2hvd190ZXh0Ym94X2V4dChjb25zdCBjaGFyICp0aXRsZSwgY2hh
ciAqdGV4dCwgaW50IHIsIGludCBjLCBpbnQNCiAgICAtCQkJICAgICprZXlzLCBpbnQgKnZzY3Jv
bGwsIGludCAqaHNjcm9sbCwgdXBkYXRlX3RleHRfZm4NCiAgICAtCQkJICAgIHVwZGF0ZV90ZXh0
LCB2b2lkICpkYXRhKQ0KICAgIC17DQogICAgLQlkaWFsb2dfY2xlYXIoKTsNCiAgICAtCXJldHVy
biBkaWFsb2dfdGV4dGJveCh0aXRsZSwgdGV4dCwgciwgYywga2V5cywgdnNjcm9sbCwgaHNjcm9s
bCwNCiAgICAtCQkJICAgICAgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgIC19DQogICAgLQ0KICAg
IC1zdGF0aWMgdm9pZCBzaG93X3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIg
KnRleHQsIGludCByLCBpbnQgYykNCiAgICAtew0KICAgIC0Jc2hvd190ZXh0Ym94X2V4dCh0aXRs
ZSwgKGNoYXIgKikgdGV4dCwgciwgYywgKGludCBbXSkgezB9LCBOVUxMLCBOVUxMLA0KICAgIC0J
CQkgTlVMTCwgTlVMTCk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHNob3dfaGVs
cHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQpDQogICAgLXsNCiAgICAt
CXNob3dfdGV4dGJveCh0aXRsZSwgdGV4dCwgMCwgMCk7DQogICAgLX0NCiAgICAtDQogICAgLXN0
YXRpYyB2b2lkIGNvbmZfbWVzc2FnZV9jYWxsYmFjayhjb25zdCBjaGFyICpmbXQsIHZhX2xpc3Qg
YXApDQogICAgLXsNCiAgICAtCWNoYXIgYnVmW1BBVEhfTUFYKzFdOw0KICAgIC0NCiAgICAtCXZz
bnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsNCiAgICAtCWlmIChzYXZlX2FuZF9l
eGl0KQ0KICAgIC0JCXByaW50ZigiJXMiLCBidWYpOw0KICAgIC0JZWxzZQ0KICAgIC0JCXNob3df
dGV4dGJveChOVUxMLCBidWYsIDYsIDYwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZv
aWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZ3N0
ciBoZWxwID0gc3RyX25ldygpOw0KICAgIC0NCiAgICAtCWhlbHAubWF4X3dpZHRoID0gZ2V0bWF4
eChzdGRzY3IpIC0gMTA7DQogICAgLQltZW51X2dldF9leHRfaGVscChtZW51LCAmaGVscCk7DQog
ICAgLQ0KICAgIC0Jc2hvd19oZWxwdGV4dChfKG1lbnVfZ2V0X3Byb21wdChtZW51KSksIHN0cl9n
ZXQoJmhlbHApKTsNCiAgICAtCXN0cl9mcmVlKCZoZWxwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
c3RhdGljIHZvaWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAt
CWNvbnN0IGNoYXIgKnByb21wdCA9IF8obWVudV9nZXRfcHJvbXB0KG1lbnUpKTsNCiAgICAtCXN0
cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKmFjdGl2ZTsNCiAgICAtDQog
ICAgLQlhY3RpdmUgPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pOw0KICAgIC0Jd2hp
bGUgKDEpIHsNCiAgICAtCQlpbnQgcmVzOw0KICAgIC0JCWludCBzZWxlY3RlZDsNCiAgICAtCQlp
dGVtX3Jlc2V0KCk7DQogICAgLQ0KICAgIC0JCWN1cnJlbnRfbWVudSA9IG1lbnU7DQogICAgLQkJ
Zm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQog
ICAgLQkJCWlmICghbWVudV9pc192aXNpYmxlKGNoaWxkKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0K
ICAgIC0JCQlpZiAoY2hpbGQtPnN5bSkNCiAgICAtCQkJCWl0ZW1fbWFrZSgiJXMiLCBfKG1lbnVf
Z2V0X3Byb21wdChjaGlsZCkpKTsNCiAgICAtCQkJZWxzZSB7DQogICAgLQkJCQlpdGVtX21ha2Uo
IioqKiAlcyAqKioiLCBfKG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpKTsNCiAgICAtCQkJCWl0ZW1f
c2V0X3RhZygnOicpOw0KICAgIC0JCQl9DQogICAgLQkJCWl0ZW1fc2V0X2RhdGEoY2hpbGQpOw0K
ICAgIC0JCQlpZiAoY2hpbGQtPnN5bSA9PSBhY3RpdmUpDQogICAgLQkJCQlpdGVtX3NldF9zZWxl
Y3RlZCgxKTsNCiAgICAtCQkJaWYgKGNoaWxkLT5zeW0gPT0gc3ltX2dldF9jaG9pY2VfdmFsdWUo
bWVudS0+c3ltKSkNCiAgICAtCQkJCWl0ZW1fc2V0X3RhZygnWCcpOw0KICAgIC0JCX0NCiAgICAt
CQlkaWFsb2dfY2xlYXIoKTsNCiAgICAtCQlyZXMgPSBkaWFsb2dfY2hlY2tsaXN0KHByb21wdCA/
IF8ocHJvbXB0KSA6IF8oIk1haW4gTWVudSIpLA0KICAgIC0JCQkJCV8ocmFkaW9saXN0X2luc3Ry
dWN0aW9ucyksDQogICAgLQkJCQkJTUVOVUJPWF9IRUlHVEhfTUlOLA0KICAgIC0JCQkJCU1FTlVC
T1hfV0lEVEhfTUlOLA0KICAgIC0JCQkJCUNIRUNLTElTVF9IRUlHVEhfTUlOKTsNCiAgICAtCQlz
ZWxlY3RlZCA9IGl0ZW1fYWN0aXZhdGVfc2VsZWN0ZWQoKTsNCiAgICAtCQlzd2l0Y2ggKHJlcykg
ew0KICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJaWYgKHNlbGVjdGVkKSB7DQogICAgLQkJCQljaGls
ZCA9IGl0ZW1fZGF0YSgpOw0KICAgIC0JCQkJaWYgKCFjaGlsZC0+c3ltKQ0KICAgIC0JCQkJCWJy
ZWFrOw0KICAgIC0NCiAgICAtCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwg
eWVzKTsNCiAgICAtCQkJfQ0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJY2FzZSAxOg0KICAgIC0J
CQlpZiAoc2VsZWN0ZWQpIHsNCiAgICAtCQkJCWNoaWxkID0gaXRlbV9kYXRhKCk7DQogICAgLQkJ
CQlzaG93X2hlbHAoY2hpbGQpOw0KICAgIC0JCQkJYWN0aXZlID0gY2hpbGQtPnN5bTsNCiAgICAt
CQkJfSBlbHNlDQogICAgLQkJCQlzaG93X2hlbHAobWVudSk7DQogICAgLQkJCWJyZWFrOw0KICAg
IC0JCWNhc2UgS0VZX0VTQzoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCWNhc2UgLUVSUkRJU1BM
QVlUT09TTUFMTDoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0K
ICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9zdHJpbmcoc3RydWN0IG1lbnUgKm1lbnUpDQog
ICAgLXsNCiAgICAtCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsN
CiAgICAtDQogICAgLQl3aGlsZSAoMSkgew0KICAgIC0JCWludCByZXM7DQogICAgLQkJY29uc3Qg
Y2hhciAqaGVhZGluZzsNCiAgICAtDQogICAgLQkJc3dpdGNoIChzeW1fZ2V0X3R5cGUobWVudS0+
c3ltKSkgew0KICAgIC0JCWNhc2UgU19JTlQ6DQogICAgLQkJCWhlYWRpbmcgPSBfKGlucHV0Ym94
X2luc3RydWN0aW9uc19pbnQpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIFNfSEVYOg0K
ICAgIC0JCQloZWFkaW5nID0gXyhpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4KTsNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJY2FzZSBTX1NUUklORzoNCiAgICAtCQkJaGVhZGluZyA9IF8oaW5wdXRi
b3hfaW5zdHJ1Y3Rpb25zX3N0cmluZyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6
DQogICAgLQkJCWhlYWRpbmcgPSBfKCJJbnRlcm5hbCBtY29uZiBlcnJvciEiKTsNCiAgICAtCQl9
DQogICAgLQkJZGlhbG9nX2NsZWFyKCk7DQogICAgLQkJcmVzID0gZGlhbG9nX2lucHV0Ym94KHBy
b21wdCA/IF8ocHJvbXB0KSA6IF8oIk1haW4gTWVudSIpLA0KICAgIC0JCQkJICAgICAgaGVhZGlu
ZywgMTAsIDc1LA0KICAgIC0JCQkJICAgICAgc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+c3lt
KSk7DQogICAgLQkJc3dpdGNoIChyZXMpIHsNCiAgICAtCQljYXNlIDA6DQogICAgLQkJCWlmIChz
eW1fc2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0sIGRpYWxvZ19pbnB1dF9yZXN1bHQpKQ0KICAg
IC0JCQkJcmV0dXJuOw0KICAgIC0JCQlzaG93X3RleHRib3goTlVMTCwgXygiWW91IGhhdmUgbWFk
ZSBhbiBpbnZhbGlkIGVudHJ5LiIpLCA1LCA0Myk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgMToNCiAgICAtCQkJc2hvd19oZWxwKG1lbnUpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQlj
YXNlIEtFWV9FU0M6DQogICAgLQkJCXJldHVybjsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKQ0KICAgIC17DQogICAgLQ0K
ICAgIC0Jd2hpbGUgKDEpIHsNCiAgICAtCQlpbnQgcmVzOw0KICAgIC0JCWRpYWxvZ19jbGVhcigp
Ow0KICAgIC0JCXJlcyA9IGRpYWxvZ19pbnB1dGJveChOVUxMLCBsb2FkX2NvbmZpZ190ZXh0LA0K
ICAgIC0JCQkJICAgICAgMTEsIDU1LCBmaWxlbmFtZSk7DQogICAgLQkJc3dpdGNoKHJlcykgew0K
ICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQ0KICAg
IC0JCQkJcmV0dXJuOw0KICAgIC0JCQlpZiAoIWNvbmZfcmVhZChkaWFsb2dfaW5wdXRfcmVzdWx0
KSkgew0KICAgIC0JCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsN
CiAgICAtCQkJCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOw0KICAgIC0JCQkJcmV0dXJuOw0KICAg
IC0JCQl9DQogICAgLQkJCXNob3dfdGV4dGJveChOVUxMLCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0
ISIpLCA1LCAzOCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgMToNCiAgICAtCQkJc2hv
d19oZWxwdGV4dChfKCJMb2FkIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiksIGxvYWRfY29uZmln
X2hlbHApOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9FU0M6DQogICAgLQkJCXJl
dHVybjsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lk
IGNvbmZfc2F2ZSh2b2lkKQ0KICAgIC17DQogICAgLQl3aGlsZSAoMSkgew0KICAgIC0JCWludCBy
ZXM7DQogICAgLQkJZGlhbG9nX2NsZWFyKCk7DQogICAgLQkJcmVzID0gZGlhbG9nX2lucHV0Ym94
KE5VTEwsIHNhdmVfY29uZmlnX3RleHQsDQogICAgLQkJCQkgICAgICAxMSwgNTUsIGZpbGVuYW1l
KTsNCiAgICAtCQlzd2l0Y2gocmVzKSB7DQogICAgLQkJY2FzZSAwOg0KICAgIC0JCQlpZiAoIWRp
YWxvZ19pbnB1dF9yZXN1bHRbMF0pDQogICAgLQkJCQlyZXR1cm47DQogICAgLQkJCWlmICghY29u
Zl93cml0ZShkaWFsb2dfaW5wdXRfcmVzdWx0KSkgew0KICAgIC0JCQkJc2V0X2NvbmZpZ19maWxl
bmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsNCiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJfQ0K
ICAgIC0JCQlzaG93X3RleHRib3goTlVMTCwgXygiQ2FuJ3QgY3JlYXRlIGZpbGUhICBQcm9iYWJs
eSBhIG5vbmV4aXN0ZW50IGRpcmVjdG9yeS4iKSwgNSwgNjApOw0KICAgIC0JCQlicmVhazsNCiAg
ICAtCQljYXNlIDE6DQogICAgLQkJCXNob3dfaGVscHRleHQoXygiU2F2ZSBBbHRlcm5hdGUgQ29u
ZmlndXJhdGlvbiIpLCBzYXZlX2NvbmZpZ19oZWxwKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
Y2FzZSBLRVlfRVNDOg0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19
DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGhhbmRsZV9leGl0KHZvaWQpDQogICAgLXsNCiAgICAt
CWludCByZXM7DQogICAgLQ0KICAgIC0Jc2F2ZV9hbmRfZXhpdCA9IDE7DQogICAgLQlyZXNldF9z
dWJ0aXRsZSgpOw0KICAgIC0JZGlhbG9nX2NsZWFyKCk7DQogICAgLQlpZiAoY29uZl9nZXRfY2hh
bmdlZCgpKQ0KICAgIC0JCXJlcyA9IGRpYWxvZ195ZXNubyhOVUxMLA0KICAgIC0JCQkJICAgXygi
RG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyIG5ldyBjb25maWd1cmF0aW9uP1xuIg0KICAgIC0JCQkJ
ICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUgVW5pa3JhZnQgY29uZmlndXJhdGlv
bi4pIiksDQogICAgLQkJCQkgICA2LCA2MCk7DQogICAgLQllbHNlDQogICAgLQkJcmVzID0gLTE7
DQogICAgLQ0KICAgIC0JZW5kX2RpYWxvZyhzYXZlZF94LCBzYXZlZF95KTsNCiAgICAtDQogICAg
LQlzd2l0Y2ggKHJlcykgew0KICAgIC0JY2FzZSAwOg0KICAgIC0JCWlmIChjb25mX3dyaXRlKGZp
bGVuYW1lKSkgew0KICAgIC0JCQlmcHJpbnRmKHN0ZGVyciwgXygiXG5cbiINCiAgICAtCQkJCQkg
ICJFcnJvciB3aGlsZSB3cml0aW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuIg0KICAgIC0JCQkJ
CSAgIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiINCiAgICAtCQkJ
CQkgICJcblxuIikpOw0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCQl9DQogICAgLQkJLyogZmFs
bCB0aHJvdWdoICovDQogICAgLQljYXNlIC0xOg0KICAgIC0JCXByaW50ZihfKCJcblxuIg0KICAg
IC0JCQkgIioqKiBFbmQgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4iDQogICAgLQkJCSAiKioqIEV4
ZWN1dGUgJ21ha2UnIHRvIHN0YXJ0IHRoZSBidWlsZCBvciB0cnkgJ21ha2UgaGVscCcuIg0KICAg
IC0JCQkgIlxuXG4iKSk7DQogICAgLQkJcmVzID0gMDsNCiAgICAtCQlicmVhazsNCiAgICAtCWRl
ZmF1bHQ6DQogICAgLQkJZnByaW50ZihzdGRlcnIsIF8oIlxuXG4iDQogICAgLQkJCQkgICJZb3Vy
IGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iDQogICAgLQkJCQkgICJcblxu
IikpOw0KICAgIC0JCWlmIChyZXMgIT0gS0VZX0VTQykNCiAgICAtCQkJcmVzID0gMDsNCiAgICAt
CX0NCiAgICAtDQogICAgLQlyZXR1cm4gcmVzOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnbm8pDQogICAgLXsNCiAgICAtCWV4aXQoaGFuZGxlX2V4
aXQoKSk7DQogICAgLX0NCiAgICAtDQogICAgLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQ0K
ICAgIC17DQogICAgLQljaGFyICptb2RlOw0KICAgIC0JaW50IHJlczsNCiAgICAtDQogICAgLQlz
ZXRsb2NhbGUoTENfQUxMLCAiIik7DQogICAgLQliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NB
TEVESVIpOw0KICAgIC0JdGV4dGRvbWFpbihQQUNLQUdFKTsNCiAgICAtDQogICAgLQlzaWduYWwo
U0lHSU5ULCBzaWdfaGFuZGxlcik7DQogICAgLQ0KICAgIC0JY29uZl9wYXJzZShhdlsxXSk7DQog
ICAgLQljb25mX3JlYWQoTlVMTCk7DQogICAgLQ0KICAgIC0JbW9kZSA9IGdldGVudigiTUVOVUNP
TkZJR19NT0RFIik7DQogICAgLQlpZiAobW9kZSkgew0KICAgIC0JCWlmICghc3RyY2FzZWNtcCht
b2RlLCAic2luZ2xlX21lbnUiKSkNCiAgICAtCQkJc2luZ2xlX21lbnVfbW9kZSA9IDE7DQogICAg
LQl9DQogICAgLQ0KICAgIC0JaWYgKGluaXRfZGlhbG9nKE5VTEwpKSB7DQogICAgLQkJZnByaW50
ZihzdGRlcnIsIE5fKCJZb3VyIGRpc3BsYXkgaXMgdG9vIHNtYWxsIHRvIHJ1biBNZW51Y29uZmln
IVxuIikpOw0KICAgIC0JCWZwcmludGYoc3RkZXJyLCBOXygiSXQgbXVzdCBiZSBhdCBsZWFzdCAx
OSBsaW5lcyBieSA4MCBjb2x1bW5zLlxuIikpOw0KICAgIC0JCXJldHVybiAxOw0KICAgIC0JfQ0K
ICAgIC0NCiAgICAtCXNldF9jb25maWdfZmlsZW5hbWUoY29uZl9nZXRfY29uZmlnbmFtZSgpKTsN
CiAgICAtCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soY29uZl9tZXNzYWdlX2NhbGxiYWNrKTsN
CiAgICAtCWRvIHsNCiAgICAtCQljb25mKCZyb290bWVudSwgTlVMTCk7DQogICAgLQkJcmVzID0g
aGFuZGxlX2V4aXQoKTsNCiAgICAtCX0gd2hpbGUgKHJlcyA9PSBLRVlfRVNDKTsNCiAgICAtDQog
ICAgLQlyZXR1cm4gcmVzOw0KICAgIC19DQogICAgLQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcvbWVudS5jIGIvc3VwcG9ydC9rY29uZmlnL21lbnUuYw0KICAgIGRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGRiMTUxMmEuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBw
b3J0L2tjb25maWcvbWVudS5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDY5NCArMCww
IEBADQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHpp
cHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAtICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR1BMIHYyLjAuDQogICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgPGN0eXBl
Lmg+DQogICAgLSNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0K
ICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLQ0KICAgIC0jaW5jbHVkZSAibGtjLmgiDQog
ICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgY2hhciBub2hlbHBfdGV4dFtdID0gIlRoZXJlIGlzIG5v
IGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbi4iOw0KICAgIC0NCiAgICAtc3RydWN0IG1l
bnUgcm9vdG1lbnU7DQogICAgLXN0YXRpYyBzdHJ1Y3QgbWVudSAqKmxhc3RfZW50cnlfcHRyOw0K
ICAgIC0NCiAgICAtc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsNCiAgICAtc3RydWN0IGZpbGUgKmN1
cnJlbnRfZmlsZTsNCiAgICAtDQogICAgLXZvaWQgbWVudV93YXJuKHN0cnVjdCBtZW51ICptZW51
LCBjb25zdCBjaGFyICpmbXQsIC4uLikNCiAgICAtew0KICAgIC0JdmFfbGlzdCBhcDsNCiAgICAt
CXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICIlczolZDp3YXJuaW5n
OiAiLCBtZW51LT5maWxlLT5uYW1lLCBtZW51LT5saW5lbm8pOw0KICAgIC0JdmZwcmludGYoc3Rk
ZXJyLCBmbXQsIGFwKTsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiXG4iKTsNCiAgICAtCXZhX2Vu
ZChhcCk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHByb3Bfd2FybihzdHJ1Y3Qg
cHJvcGVydHkgKnByb3AsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9s
aXN0IGFwOw0KICAgIC0JdmFfc3RhcnQoYXAsIGZtdCk7DQogICAgLQlmcHJpbnRmKHN0ZGVyciwg
IiVzOiVkOndhcm5pbmc6ICIsIHByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubyk7DQogICAg
LQl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICJcbiIp
Ow0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBfbWVudV9pbml0
KHZvaWQpDQogICAgLXsNCiAgICAtCWN1cnJlbnRfZW50cnkgPSBjdXJyZW50X21lbnUgPSAmcm9v
dG1lbnU7DQogICAgLQlsYXN0X2VudHJ5X3B0ciA9ICZyb290bWVudS5saXN0Ow0KICAgIC19DQog
ICAgLQ0KICAgIC12b2lkIG1lbnVfYWRkX2VudHJ5KHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAt
ew0KICAgIC0Jc3RydWN0IG1lbnUgKm1lbnU7DQogICAgLQ0KICAgIC0JbWVudSA9IHhtYWxsb2Mo
c2l6ZW9mKCptZW51KSk7DQogICAgLQltZW1zZXQobWVudSwgMCwgc2l6ZW9mKCptZW51KSk7DQog
ICAgLQltZW51LT5zeW0gPSBzeW07DQogICAgLQltZW51LT5wYXJlbnQgPSBjdXJyZW50X21lbnU7
DQogICAgLQltZW51LT5maWxlID0gY3VycmVudF9maWxlOw0KICAgIC0JbWVudS0+bGluZW5vID0g
emNvbmZfbGluZW5vKCk7DQogICAgLQ0KICAgIC0JKmxhc3RfZW50cnlfcHRyID0gbWVudTsNCiAg
ICAtCWxhc3RfZW50cnlfcHRyID0gJm1lbnUtPm5leHQ7DQogICAgLQljdXJyZW50X2VudHJ5ID0g
bWVudTsNCiAgICAtCWlmIChzeW0pDQogICAgLQkJbWVudV9hZGRfc3ltYm9sKFBfU1lNQk9MLCBz
eW0sIE5VTEwpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIG1lbnVfZW5kX2VudHJ5KHZvaWQp
DQogICAgLXsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUo
dm9pZCkNCiAgICAtew0KICAgIC0JbWVudV9lbmRfZW50cnkoKTsNCiAgICAtCWxhc3RfZW50cnlf
cHRyID0gJmN1cnJlbnRfZW50cnktPmxpc3Q7DQogICAgLQlyZXR1cm4gY3VycmVudF9tZW51ID0g
Y3VycmVudF9lbnRyeTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2VuZF9tZW51KHZv
aWQpDQogICAgLXsNCiAgICAtCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfbWVudS0+bmV4dDsN
CiAgICAtCWN1cnJlbnRfbWVudSA9IGN1cnJlbnRfbWVudS0+cGFyZW50Ow0KICAgIC19DQogICAg
LQ0KICAgIC1zdGF0aWMgc3RydWN0IGV4cHIgKm1lbnVfY2hlY2tfZGVwKHN0cnVjdCBleHByICpl
KQ0KICAgIC17DQogICAgLQlpZiAoIWUpDQogICAgLQkJcmV0dXJuIGU7DQogICAgLQ0KICAgIC0J
c3dpdGNoIChlLT50eXBlKSB7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0JCWUtPmxlZnQuZXhw
ciA9IG1lbnVfY2hlY2tfZGVwKGUtPmxlZnQuZXhwcik7DQogICAgLQkJYnJlYWs7DQogICAgLQlj
YXNlIEVfT1I6DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCWUtPmxlZnQuZXhwciA9IG1lbnVf
Y2hlY2tfZGVwKGUtPmxlZnQuZXhwcik7DQogICAgLQkJZS0+cmlnaHQuZXhwciA9IG1lbnVfY2hl
Y2tfZGVwKGUtPnJpZ2h0LmV4cHIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX1NZTUJP
TDoNCiAgICAtCQkvKiBjaGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8NCiAgICAtCQlp
ZiAoZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgLQkJCXJldHVybiBleHByX2FsbG9j
X2FuZChlLCBleHByX2FsbG9jX3N5bWJvbChtb2R1bGVzX3N5bSkpOw0KICAgIC0JCWJyZWFrOw0K
ICAgIC0JZGVmYXVsdDoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtCXJldHVybiBlOw0K
ICAgIC19DQogICAgLQ0KICAgIC12b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVwKQ0K
ICAgIC17DQogICAgLQljdXJyZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJyZW50
X2VudHJ5LT5kZXAsIG1lbnVfY2hlY2tfZGVwKGRlcCkpOw0KICAgIC19DQogICAgLQ0KICAgIC12
b2lkIG1lbnVfc2V0X3R5cGUoaW50IHR5cGUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wg
KnN5bSA9IGN1cnJlbnRfZW50cnktPnN5bTsNCiAgICAtDQogICAgLQlpZiAoc3ltLT50eXBlID09
IHR5cGUpDQogICAgLQkJcmV0dXJuOw0KICAgIC0JaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04p
IHsNCiAgICAtCQlzeW0tPnR5cGUgPSB0eXBlOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAg
ICAtCW1lbnVfd2FybihjdXJyZW50X2VudHJ5LA0KICAgIC0JCSJpZ25vcmluZyB0eXBlIHJlZGVm
aW5pdGlvbiBvZiAnJXMnIGZyb20gJyVzJyB0byAnJXMnIiwNCiAgICAtCQlzeW0tPm5hbWUgPyBz
eW0tPm5hbWUgOiAiPGNob2ljZT4iLA0KICAgIC0JCXN5bV90eXBlX25hbWUoc3ltLT50eXBlKSwg
c3ltX3R5cGVfbmFtZSh0eXBlKSk7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBwcm9wZXJ0
eSAqbWVudV9hZGRfcHJvcChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVj
dCBleHByICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgcHJv
cGVydHkgKnByb3AgPSBwcm9wX2FsbG9jKHR5cGUsIGN1cnJlbnRfZW50cnktPnN5bSk7DQogICAg
LQ0KICAgIC0JcHJvcC0+bWVudSA9IGN1cnJlbnRfZW50cnk7DQogICAgLQlwcm9wLT5leHByID0g
ZXhwcjsNCiAgICAtCXByb3AtPnZpc2libGUuZXhwciA9IG1lbnVfY2hlY2tfZGVwKGRlcCk7DQog
ICAgLQ0KICAgIC0JaWYgKHByb21wdCkgew0KICAgIC0JCWlmIChpc3NwYWNlKCpwcm9tcHQpKSB7
DQogICAgLQkJCXByb3Bfd2Fybihwcm9wLCAibGVhZGluZyB3aGl0ZXNwYWNlIGlnbm9yZWQiKTsN
CiAgICAtCQkJd2hpbGUgKGlzc3BhY2UoKnByb21wdCkpDQogICAgLQkJCQlwcm9tcHQrKzsNCiAg
ICAtCQl9DQogICAgLQkJaWYgKGN1cnJlbnRfZW50cnktPnByb21wdCAmJiBjdXJyZW50X2VudHJ5
ICE9ICZyb290bWVudSkNCiAgICAtCQkJcHJvcF93YXJuKHByb3AsICJwcm9tcHQgcmVkZWZpbmVk
Iik7DQogICAgLQ0KICAgIC0JCS8qIEFwcGx5IGFsbCB1cHBlciBtZW51cycgdmlzaWJpbGl0aWVz
IHRvIGFjdHVhbCBwcm9tcHRzLiAqLw0KICAgIC0JCWlmKHR5cGUgPT0gUF9QUk9NUFQpIHsNCiAg
ICAtCQkJc3RydWN0IG1lbnUgKm1lbnUgPSBjdXJyZW50X2VudHJ5Ow0KICAgIC0NCiAgICAtCQkJ
d2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSAhPSBOVUxMKSB7DQogICAgLQkJCQlzdHJ1Y3Qg
ZXhwciAqZHVwX2V4cHI7DQogICAgLQ0KICAgIC0JCQkJaWYgKCFtZW51LT52aXNpYmlsaXR5KQ0K
ICAgIC0JCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJLyoNCiAgICAtCQkJCSAqIERvIG5vdCBhZGQg
YSByZWZlcmVuY2UgdG8gdGhlDQogICAgLQkJCQkgKiBtZW51J3MgdmlzaWJpbGl0eSBleHByZXNz
aW9uIGJ1dA0KICAgIC0JCQkJICogdXNlIGEgY29weSBvZiBpdC4gIE90aGVyd2lzZSB0aGUNCiAg
ICAtCQkJCSAqIGV4cHJlc3Npb24gcmVkdWN0aW9uIGZ1bmN0aW9ucw0KICAgIC0JCQkJICogd2ls
bCBtb2RpZnkgZXhwcmVzc2lvbnMgdGhhdCBoYXZlDQogICAgLQkJCQkgKiBtdWx0aXBsZSByZWZl
cmVuY2VzIHdoaWNoIGNhbg0KICAgIC0JCQkJICogY2F1c2UgdW53YW50ZWQgc2lkZSBlZmZlY3Rz
Lg0KICAgIC0JCQkJICovDQogICAgLQkJCQlkdXBfZXhwciA9IGV4cHJfY29weShtZW51LT52aXNp
YmlsaXR5KTsNCiAgICAtDQogICAgLQkJCQlwcm9wLT52aXNpYmxlLmV4cHINCiAgICAtCQkJCQk9
IGV4cHJfYWxsb2NfYW5kKHByb3AtPnZpc2libGUuZXhwciwNCiAgICAtCQkJCQkJCSBkdXBfZXhw
cik7DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCWN1cnJlbnRfZW50cnktPnBy
b21wdCA9IHByb3A7DQogICAgLQl9DQogICAgLQlwcm9wLT50ZXh0ID0gcHJvbXB0Ow0KICAgIC0N
CiAgICAtCXJldHVybiBwcm9wOw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3QgcHJvcGVydHkg
Km1lbnVfYWRkX3Byb21wdChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVj
dCBleHByICpkZXApDQogICAgLXsNCiAgICAtCXJldHVybiBtZW51X2FkZF9wcm9wKHR5cGUsIHBy
b21wdCwgTlVMTCwgZGVwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2FkZF92aXNp
YmlsaXR5KHN0cnVjdCBleHByICpleHByKQ0KICAgIC17DQogICAgLQljdXJyZW50X2VudHJ5LT52
aXNpYmlsaXR5ID0gZXhwcl9hbGxvY19hbmQoY3VycmVudF9lbnRyeS0+dmlzaWJpbGl0eSwNCiAg
ICAtCSAgICBleHByKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2FkZF9leHByKGVu
dW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBleHByICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKQ0K
ICAgIC17DQogICAgLQltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4cHIsIGRlcCk7DQogICAg
LX0NCiAgICAtDQogICAgLXZvaWQgbWVudV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5cGUs
IHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IGV4cHIgKmRlcCkNCiAgICAtew0KICAgIC0JbWVu
dV9hZGRfcHJvcCh0eXBlLCBOVUxMLCBleHByX2FsbG9jX3N5bWJvbChzeW0pLCBkZXApOw0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIG1lbnVfYWRkX29wdGlvbihpbnQgdG9rZW4sIGNoYXIgKmFy
ZykNCiAgICAtew0KICAgIC0Jc3dpdGNoICh0b2tlbikgew0KICAgIC0JY2FzZSBUX09QVF9NT0RV
TEVTOg0KICAgIC0JCWlmIChtb2R1bGVzX3N5bSkNCiAgICAtCQkJemNvbmZfZXJyb3IoInN5bWJv
bCAnJXMnIHJlZGVmaW5lcyBvcHRpb24gJ21vZHVsZXMnIg0KICAgIC0JCQkJICAgICIgYWxyZWFk
eSBkZWZpbmVkIGJ5IHN5bWJvbCAnJXMnIiwNCiAgICAtCQkJCSAgICBjdXJyZW50X2VudHJ5LT5z
eW0tPm5hbWUsDQogICAgLQkJCQkgICAgbW9kdWxlc19zeW0tPm5hbWUNCiAgICAtCQkJCSAgICAp
Ow0KICAgIC0JCW1vZHVsZXNfc3ltID0gY3VycmVudF9lbnRyeS0+c3ltOw0KICAgIC0JCWJyZWFr
Ow0KICAgIC0JY2FzZSBUX09QVF9ERUZDT05GSUdfTElTVDoNCiAgICAtCQlpZiAoIXN5bV9kZWZj
b25maWdfbGlzdCkNCiAgICAtCQkJc3ltX2RlZmNvbmZpZ19saXN0ID0gY3VycmVudF9lbnRyeS0+
c3ltOw0KICAgIC0JCWVsc2UgaWYgKHN5bV9kZWZjb25maWdfbGlzdCAhPSBjdXJyZW50X2VudHJ5
LT5zeW0pDQogICAgLQkJCXpjb25mX2Vycm9yKCJ0cnlpbmcgdG8gcmVkZWZpbmUgZGVmY29uZmln
IHN5bWJvbCIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBUX09QVF9FTlY6DQogICAgLQkJ
cHJvcF9hZGRfZW52KGFyZyk7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLX0NCiAgICAt
DQogICAgLXN0YXRpYyBpbnQgbWVudV92YWxpZGF0ZV9udW1iZXIoc3RydWN0IHN5bWJvbCAqc3lt
LCBzdHJ1Y3Qgc3ltYm9sICpzeW0yKQ0KICAgIC17DQogICAgLQlyZXR1cm4gc3ltMi0+dHlwZSA9
PSBTX0lOVCB8fCBzeW0yLT50eXBlID09IFNfSEVYIHx8DQogICAgLQkgICAgICAgKHN5bTItPnR5
cGUgPT0gU19VTktOT1dOICYmIHN5bV9zdHJpbmdfdmFsaWQoc3ltLCBzeW0yLT5uYW1lKSk7DQog
ICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHN5bV9jaGVja19wcm9wKHN0cnVjdCBzeW1i
b2wgKnN5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3Ry
dWN0IHN5bWJvbCAqc3ltMjsNCiAgICAtCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJv
cCA9IHByb3AtPm5leHQpIHsNCiAgICAtCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAgICAtCQlj
YXNlIFBfREVGQVVMVDoNCiAgICAtCQkJaWYgKChzeW0tPnR5cGUgPT0gU19TVFJJTkcgfHwgc3lt
LT50eXBlID09IFNfSU5UIHx8IHN5bS0+dHlwZSA9PSBTX0hFWCkgJiYNCiAgICAtCQkJICAgIHBy
b3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpDQogICAgLQkJCQlwcm9wX3dhcm4ocHJvcCwNCiAg
ICAtCQkJCSAgICAiZGVmYXVsdCBmb3IgY29uZmlnIHN5bWJvbCAnJXMnIg0KICAgIC0JCQkJICAg
ICIgbXVzdCBiZSBhIHNpbmdsZSBzeW1ib2wiLCBzeW0tPm5hbWUpOw0KICAgIC0JCQlpZiAocHJv
cC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQlzeW0y
ID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOw0KICAgIC0JCQlpZiAoc3ltLT50eXBlID09IFNfSEVY
IHx8IHN5bS0+dHlwZSA9PSBTX0lOVCkgew0KICAgIC0JCQkJaWYgKCFtZW51X3ZhbGlkYXRlX251
bWJlcihzeW0sIHN5bTIpKQ0KICAgIC0JCQkJCXByb3Bfd2Fybihwcm9wLA0KICAgIC0JCQkJCSAg
ICAiJyVzJzogbnVtYmVyIGlzIGludmFsaWQiLA0KICAgIC0JCQkJCSAgICBzeW0tPm5hbWUpOw0K
ICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9TRUxFQ1Q6DQogICAgLQkJ
CXN5bTIgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7DQogICAgLQkJCWlmIChzeW0tPnR5cGUgIT0g
U19CT09MRUFOICYmIHN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKQ0KICAgIC0JCQkJcHJvcF93YXJu
KHByb3AsDQogICAgLQkJCQkgICAgImNvbmZpZyBzeW1ib2wgJyVzJyB1c2VzIHNlbGVjdCwgYnV0
IGlzICINCiAgICAtCQkJCSAgICAibm90IGJvb2xlYW4gb3IgdHJpc3RhdGUiLCBzeW0tPm5hbWUp
Ow0KICAgIC0JCQllbHNlIGlmIChzeW0yLT50eXBlICE9IFNfVU5LTk9XTiAmJg0KICAgIC0JCQkg
ICAgICAgICBzeW0yLT50eXBlICE9IFNfQk9PTEVBTiAmJg0KICAgIC0JCQkgICAgICAgICBzeW0y
LT50eXBlICE9IFNfVFJJU1RBVEUpDQogICAgLQkJCQlwcm9wX3dhcm4ocHJvcCwNCiAgICAtCQkJ
CSAgICAiJyVzJyBoYXMgd3JvbmcgdHlwZS4gJ3NlbGVjdCcgb25seSAiDQogICAgLQkJCQkgICAg
ImFjY2VwdCBhcmd1bWVudHMgb2YgYm9vbGVhbiBhbmQgIg0KICAgIC0JCQkJICAgICJ0cmlzdGF0
ZSB0eXBlIiwgc3ltMi0+bmFtZSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9SQU5H
RToNCiAgICAtCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0lOVCAmJiBzeW0tPnR5cGUgIT0gU19IRVgp
DQogICAgLQkJCQlwcm9wX3dhcm4ocHJvcCwgInJhbmdlIGlzIG9ubHkgYWxsb3dlZCAiDQogICAg
LQkJCQkgICAgICAgICAgICAgICAgImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsNCiAgICAtCQkJ
aWYgKCFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPmxlZnQuc3ltKSB8fA0K
ICAgIC0JCQkgICAgIW1lbnVfdmFsaWRhdGVfbnVtYmVyKHN5bSwgcHJvcC0+ZXhwci0+cmlnaHQu
c3ltKSkNCiAgICAtCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgaW52YWxpZCIpOw0KICAg
IC0JCQlicmVhazsNCiAgICAtCQlkZWZhdWx0Og0KICAgIC0JCQk7DQogICAgLQkJfQ0KICAgIC0J
fQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIG1lbnVfZmluYWxpemUoc3RydWN0IG1lbnUgKnBh
cmVudCkNCiAgICAtew0KICAgIC0Jc3RydWN0IG1lbnUgKm1lbnUsICpsYXN0X21lbnU7DQogICAg
LQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAg
LQlzdHJ1Y3QgZXhwciAqcGFyZW50ZGVwLCAqYmFzZWRlcCwgKmRlcCwgKmRlcDIsICoqZXA7DQog
ICAgLQ0KICAgIC0Jc3ltID0gcGFyZW50LT5zeW07DQogICAgLQlpZiAocGFyZW50LT5saXN0KSB7
DQogICAgLQkJaWYgKHN5bSAmJiBzeW1faXNfY2hvaWNlKHN5bSkpIHsNCiAgICAtCQkJaWYgKHN5
bS0+dHlwZSA9PSBTX1VOS05PV04pIHsNCiAgICAtCQkJCS8qIGZpbmQgdGhlIGZpcnN0IGNob2lj
ZSB2YWx1ZSB0byBmaW5kIG91dCBjaG9pY2UgdHlwZSAqLw0KICAgIC0JCQkJY3VycmVudF9lbnRy
eSA9IHBhcmVudDsNCiAgICAtCQkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVu
dSA9IG1lbnUtPm5leHQpIHsNCiAgICAtCQkJCQlpZiAobWVudS0+c3ltICYmIG1lbnUtPnN5bS0+
dHlwZSAhPSBTX1VOS05PV04pIHsNCiAgICAtCQkJCQkJbWVudV9zZXRfdHlwZShtZW51LT5zeW0t
PnR5cGUpOw0KICAgIC0JCQkJCQlicmVhazsNCiAgICAtCQkJCQl9DQogICAgLQkJCQl9DQogICAg
LQkJCX0NCiAgICAtCQkJLyogc2V0IHRoZSB0eXBlIG9mIHRoZSByZW1haW5pbmcgY2hvaWNlIHZh
bHVlcyAqLw0KICAgIC0JCQlmb3IgKG1lbnUgPSBwYXJlbnQtPmxpc3Q7IG1lbnU7IG1lbnUgPSBt
ZW51LT5uZXh0KSB7DQogICAgLQkJCQljdXJyZW50X2VudHJ5ID0gbWVudTsNCiAgICAtCQkJCWlm
IChtZW51LT5zeW0gJiYgbWVudS0+c3ltLT50eXBlID09IFNfVU5LTk9XTikNCiAgICAtCQkJCQlt
ZW51X3NldF90eXBlKHN5bS0+dHlwZSk7DQogICAgLQkJCX0NCiAgICAtCQkJcGFyZW50ZGVwID0g
ZXhwcl9hbGxvY19zeW1ib2woc3ltKTsNCiAgICAtCQl9IGVsc2UgaWYgKHBhcmVudC0+cHJvbXB0
KQ0KICAgIC0JCQlwYXJlbnRkZXAgPSBwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByOw0KICAg
IC0JCWVsc2UNCiAgICAtCQkJcGFyZW50ZGVwID0gcGFyZW50LT5kZXA7DQogICAgLQ0KICAgIC0J
CWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsNCiAg
ICAtCQkJYmFzZWRlcCA9IGV4cHJfdHJhbnNmb3JtKG1lbnUtPmRlcCk7DQogICAgLQkJCWJhc2Vk
ZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkocGFyZW50ZGVwKSwgYmFzZWRlcCk7DQogICAg
LQkJCWJhc2VkZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGJhc2VkZXApOw0KICAgIC0JCQltZW51
LT5kZXAgPSBiYXNlZGVwOw0KICAgIC0JCQlpZiAobWVudS0+c3ltKQ0KICAgIC0JCQkJcHJvcCA9
IG1lbnUtPnN5bS0+cHJvcDsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJcHJvcCA9IG1lbnUtPnBy
b21wdDsNCiAgICAtCQkJZm9yICg7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgLQkJ
CQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQ0KICAgIC0JCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJ
ZGVwID0gZXhwcl90cmFuc2Zvcm0ocHJvcC0+dmlzaWJsZS5leHByKTsNCiAgICAtCQkJCWRlcCA9
IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShiYXNlZGVwKSwgZGVwKTsNCiAgICAtCQkJCWRlcCA9
IGV4cHJfZWxpbWluYXRlX2R1cHMoZGVwKTsNCiAgICAtCQkJCWlmIChtZW51LT5zeW0gJiYgbWVu
dS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpDQogICAgLQkJCQkJZGVwID0gZXhwcl90cmFuc19i
b29sKGRlcCk7DQogICAgLQkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7DQogICAgLQkJCQlp
ZiAocHJvcC0+dHlwZSA9PSBQX1NFTEVDVCkgew0KICAgIC0JCQkJCXN0cnVjdCBzeW1ib2wgKmVz
ID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOw0KICAgIC0JCQkJCWVzLT5yZXZfZGVwLmV4cHIgPSBl
eHByX2FsbG9jX29yKGVzLT5yZXZfZGVwLmV4cHIsDQogICAgLQkJCQkJCQlleHByX2FsbG9jX2Fu
ZChleHByX2FsbG9jX3N5bWJvbChtZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOw0KICAgIC0J
CQkJfQ0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWZvciAobWVudSA9IHBhcmVudC0+bGlz
dDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpDQogICAgLQkJCW1lbnVfZmluYWxpemUobWVudSk7
DQogICAgLQl9IGVsc2UgaWYgKHN5bSkgew0KICAgIC0JCWJhc2VkZXAgPSBwYXJlbnQtPnByb21w
dCA/IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIgOiBOVUxMOw0KICAgIC0JCWJhc2VkZXAg
PSBleHByX3RyYW5zX2NvbXBhcmUoYmFzZWRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsNCiAg
ICAtCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhleHByX3RyYW5zZm9ybShiYXNlZGVw
KSk7DQogICAgLQkJbGFzdF9tZW51ID0gTlVMTDsNCiAgICAtCQlmb3IgKG1lbnUgPSBwYXJlbnQt
Pm5leHQ7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7DQogICAgLQkJCWRlcCA9IG1lbnUtPnBy
b21wdCA/IG1lbnUtPnByb21wdC0+dmlzaWJsZS5leHByIDogbWVudS0+ZGVwOw0KICAgIC0JCQlp
ZiAoIWV4cHJfY29udGFpbnNfc3ltYm9sKGRlcCwgc3ltKSkNCiAgICAtCQkJCWJyZWFrOw0KICAg
IC0JCQlpZiAoZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAsIHN5bSkpDQogICAgLQkJCQlnb3RvIG5l
eHQ7DQogICAgLQkJCWRlcCA9IGV4cHJfdHJhbnNfY29tcGFyZShkZXAsIEVfVU5FUVVBTCwgJnN5
bWJvbF9ubyk7DQogICAgLQkJCWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90cmFuc2Zv
cm0oZGVwKSk7DQogICAgLQkJCWRlcDIgPSBleHByX2NvcHkoYmFzZWRlcCk7DQogICAgLQkJCWV4
cHJfZWxpbWluYXRlX2VxKCZkZXAsICZkZXAyKTsNCiAgICAtCQkJZXhwcl9mcmVlKGRlcCk7DQog
ICAgLQkJCWlmICghZXhwcl9pc195ZXMoZGVwMikpIHsNCiAgICAtCQkJCWV4cHJfZnJlZShkZXAy
KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCWV4cHJfZnJlZShkZXAyKTsN
CiAgICAtCQluZXh0Og0KICAgIC0JCQltZW51X2ZpbmFsaXplKG1lbnUpOw0KICAgIC0JCQltZW51
LT5wYXJlbnQgPSBwYXJlbnQ7DQogICAgLQkJCWxhc3RfbWVudSA9IG1lbnU7DQogICAgLQkJfQ0K
ICAgIC0JCWlmIChsYXN0X21lbnUpIHsNCiAgICAtCQkJcGFyZW50LT5saXN0ID0gcGFyZW50LT5u
ZXh0Ow0KICAgIC0JCQlwYXJlbnQtPm5leHQgPSBsYXN0X21lbnUtPm5leHQ7DQogICAgLQkJCWxh
c3RfbWVudS0+bmV4dCA9IE5VTEw7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlzeW0tPmRpcl9k
ZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5kaXJfZGVwLmV4cHIsIHBhcmVudC0+ZGVwKTsN
CiAgICAtCX0NCiAgICAtCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1l
bnUtPm5leHQpIHsNCiAgICAtCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSAmJg0KICAg
IC0JCSAgICBtZW51LT5zeW0gJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUobWVudS0+c3ltKSkgew0K
ICAgIC0JCQljdXJyZW50X2VudHJ5ID0gbWVudTsNCiAgICAtCQkJbWVudS0+c3ltLT5mbGFncyB8
PSBTWU1CT0xfQ0hPSUNFVkFMOw0KICAgIC0JCQlpZiAoIW1lbnUtPnByb21wdCkNCiAgICAtCQkJ
CW1lbnVfd2FybihtZW51LCAiY2hvaWNlIHZhbHVlIG11c3QgaGF2ZSBhIHByb21wdCIpOw0KICAg
IC0JCQlmb3IgKHByb3AgPSBtZW51LT5zeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0
KSB7DQogICAgLQkJCQlpZiAocHJvcC0+dHlwZSA9PSBQX0RFRkFVTFQpDQogICAgLQkJCQkJcHJv
cF93YXJuKHByb3AsICJkZWZhdWx0cyBmb3IgY2hvaWNlICINCiAgICAtCQkJCQkJICAidmFsdWVz
IG5vdCBzdXBwb3J0ZWQiKTsNCiAgICAtCQkJCWlmIChwcm9wLT5tZW51ID09IG1lbnUpDQogICAg
LQkJCQkJY29udGludWU7DQogICAgLQkJCQlpZiAocHJvcC0+dHlwZSA9PSBQX1BST01QVCAmJg0K
ICAgIC0JCQkJICAgIHByb3AtPm1lbnUtPnBhcmVudC0+c3ltICE9IHN5bSkNCiAgICAtCQkJCQlw
cm9wX3dhcm4ocHJvcCwgImNob2ljZSB2YWx1ZSB1c2VkIG91dHNpZGUgaXRzIGNob2ljZSBncm91
cCIpOw0KICAgIC0JCQl9DQogICAgLQkJCS8qIE5vbi10cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIG9m
IHRyaXN0YXRlIGNob2ljZXMgbXVzdA0KICAgIC0JCQkgKiBkZXBlbmQgb24gdGhlIGNob2ljZSBi
ZWluZyBzZXQgdG8gWS4gVGhlIGNob2ljZQ0KICAgIC0JCQkgKiB2YWx1ZXMnIGRlcGVuZGVuY2ll
cyB3ZXJlIHByb3BhZ2F0ZWQgdG8gdGhlaXINCiAgICAtCQkJICogcHJvcGVydGllcyBhYm92ZSwg
c28gdGhlIGNoYW5nZSBoZXJlIG11c3QgYmUgcmUtDQogICAgLQkJCSAqIHByb3BhZ2F0ZWQuDQog
ICAgLQkJCSAqLw0KICAgIC0JCQlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYgbWVudS0+
c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpIHsNCiAgICAtCQkJCWJhc2VkZXAgPSBleHByX2FsbG9j
X2NvbXAoRV9FUVVBTCwgc3ltLCAmc3ltYm9sX3llcyk7DQogICAgLQkJCQltZW51LT5kZXAgPSBl
eHByX2FsbG9jX2FuZChiYXNlZGVwLCBtZW51LT5kZXApOw0KICAgIC0JCQkJZm9yIChwcm9wID0g
bWVudS0+c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgIC0JCQkJCWlm
IChwcm9wLT5tZW51ICE9IG1lbnUpDQogICAgLQkJCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJCXBy
b3AtPnZpc2libGUuZXhwciA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShiYXNlZGVwKSwNCiAg
ICAtCQkJCQkJCQkJICAgIHByb3AtPnZpc2libGUuZXhwcik7DQogICAgLQkJCQl9DQogICAgLQkJ
CX0NCiAgICAtCQkJbWVudV9hZGRfc3ltYm9sKFBfQ0hPSUNFLCBzeW0sIE5VTEwpOw0KICAgIC0J
CQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOw0KICAgIC0JCQlmb3IgKGVwID0gJnBy
b3AtPmV4cHI7ICplcDsgZXAgPSAmKCplcCktPmxlZnQuZXhwcikNCiAgICAtCQkJCTsNCiAgICAt
CQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxMKTsNCiAgICAtCQkJKCplcCktPnJp
Z2h0LnN5bSA9IG1lbnUtPnN5bTsNCiAgICAtCQl9DQogICAgLQkJaWYgKG1lbnUtPmxpc3QgJiYg
KCFtZW51LT5wcm9tcHQgfHwgIW1lbnUtPnByb21wdC0+dGV4dCkpIHsNCiAgICAtCQkJZm9yIChs
YXN0X21lbnUgPSBtZW51LT5saXN0OyA7IGxhc3RfbWVudSA9IGxhc3RfbWVudS0+bmV4dCkgew0K
ICAgIC0JCQkJbGFzdF9tZW51LT5wYXJlbnQgPSBwYXJlbnQ7DQogICAgLQkJCQlpZiAoIWxhc3Rf
bWVudS0+bmV4dCkNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCQlsYXN0X21l
bnUtPm5leHQgPSBtZW51LT5uZXh0Ow0KICAgIC0JCQltZW51LT5uZXh0ID0gbWVudS0+bGlzdDsN
CiAgICAtCQkJbWVudS0+bGlzdCA9IE5VTEw7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAg
ICAtCWlmIChzeW0gJiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX1dBUk5FRCkpIHsNCiAgICAtCQlp
ZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikNCiAgICAtCQkJbWVudV93YXJuKHBhcmVudCwgImNv
bmZpZyBzeW1ib2wgZGVmaW5lZCB3aXRob3V0IHR5cGUiKTsNCiAgICAtDQogICAgLQkJaWYgKHN5
bV9pc19jaG9pY2Uoc3ltKSAmJiAhcGFyZW50LT5wcm9tcHQpDQogICAgLQkJCW1lbnVfd2Fybihw
YXJlbnQsICJjaG9pY2UgbXVzdCBoYXZlIGEgcHJvbXB0Iik7DQogICAgLQ0KICAgIC0JCS8qIENo
ZWNrIHByb3BlcnRpZXMgY29ubmVjdGVkIHRvIHRoaXMgc3ltYm9sICovDQogICAgLQkJc3ltX2No
ZWNrX3Byb3Aoc3ltKTsNCiAgICAtCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XQVJORUQ7DQogICAg
LQl9DQogICAgLQ0KICAgIC0JaWYgKHN5bSAmJiAhc3ltX2lzX29wdGlvbmFsKHN5bSkgJiYgcGFy
ZW50LT5wcm9tcHQpIHsNCiAgICAtCQlzeW0tPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Io
c3ltLT5yZXZfZGVwLmV4cHIsDQogICAgLQkJCQlleHByX2FsbG9jX2FuZChwYXJlbnQtPnByb21w
dC0+dmlzaWJsZS5leHByLA0KICAgIC0JCQkJCWV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbW9k
KSkpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC1ib29sIG1lbnVfaGFzX3Byb21wdChz
dHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0JaWYgKCFtZW51LT5wcm9tcHQpDQogICAg
LQkJcmV0dXJuIGZhbHNlOw0KICAgIC0JcmV0dXJuIHRydWU7DQogICAgLX0NCiAgICAtDQogICAg
LS8qDQogICAgLSAqIERldGVybWluZSBpZiBhIG1lbnUgaXMgZW1wdHkuDQogICAgLSAqIEEgbWVu
dSBpcyBjb25zaWRlcmVkIGVtcHR5IGlmIGl0IGNvbnRhaW5zIG5vIG9yIG9ubHkNCiAgICAtICog
aW52aXNpYmxlIGVudHJpZXMuDQogICAgLSAqLw0KICAgIC1ib29sIG1lbnVfaXNfZW1wdHkoc3Ry
dWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAt
DQogICAgLQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5l
eHQpIHsNCiAgICAtCQlpZiAobWVudV9pc192aXNpYmxlKGNoaWxkKSkNCiAgICAtCQkJcmV0dXJu
KGZhbHNlKTsNCiAgICAtCX0NCiAgICAtCXJldHVybih0cnVlKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtYm9vbCBtZW51X2lzX3Zpc2libGUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAt
CXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCXRy
aXN0YXRlIHZpc2libGU7DQogICAgLQ0KICAgIC0JaWYgKCFtZW51LT5wcm9tcHQpDQogICAgLQkJ
cmV0dXJuIGZhbHNlOw0KICAgIC0NCiAgICAtCWlmIChtZW51LT52aXNpYmlsaXR5KSB7DQogICAg
LQkJaWYgKGV4cHJfY2FsY192YWx1ZShtZW51LT52aXNpYmlsaXR5KSA9PSBubykNCiAgICAtCQkJ
cmV0dXJuIG5vOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXN5bSA9IG1lbnUtPnN5bTsNCiAgICAt
CWlmIChzeW0pIHsNCiAgICAtCQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAgIC0JCXZpc2libGUg
PSBtZW51LT5wcm9tcHQtPnZpc2libGUudHJpOw0KICAgIC0JfSBlbHNlDQogICAgLQkJdmlzaWJs
ZSA9IG1lbnUtPnByb21wdC0+dmlzaWJsZS50cmkgPSBleHByX2NhbGNfdmFsdWUobWVudS0+cHJv
bXB0LT52aXNpYmxlLmV4cHIpOw0KICAgIC0NCiAgICAtCWlmICh2aXNpYmxlICE9IG5vKQ0KICAg
IC0JCXJldHVybiB0cnVlOw0KICAgIC0NCiAgICAtCWlmICghc3ltIHx8IHN5bV9nZXRfdHJpc3Rh
dGVfdmFsdWUobWVudS0+c3ltKSA9PSBubykNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQ0K
ICAgIC0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
KSB7DQogICAgLQkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkpIHsNCiAgICAtCQkJaWYgKHN5
bSkNCiAgICAtCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgIC0JCQlyZXR1
cm4gdHJ1ZTsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIGZhbHNlOw0K
ICAgIC19DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICptZW51X2dldF9wcm9tcHQoc3RydWN0IG1l
bnUgKm1lbnUpDQogICAgLXsNCiAgICAtCWlmIChtZW51LT5wcm9tcHQpDQogICAgLQkJcmV0dXJu
IG1lbnUtPnByb21wdC0+dGV4dDsNCiAgICAtCWVsc2UgaWYgKG1lbnUtPnN5bSkNCiAgICAtCQly
ZXR1cm4gbWVudS0+c3ltLT5uYW1lOw0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAt
DQogICAgLXN0cnVjdCBtZW51ICptZW51X2dldF9yb290X21lbnUoc3RydWN0IG1lbnUgKm1lbnUp
DQogICAgLXsNCiAgICAtCXJldHVybiAmcm9vdG1lbnU7DQogICAgLX0NCiAgICAtDQogICAgLXN0
cnVjdCBtZW51ICptZW51X2dldF9wYXJlbnRfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAt
ew0KICAgIC0JZW51bSBwcm9wX3R5cGUgdHlwZTsNCiAgICAtDQogICAgLQlmb3IgKDsgbWVudSAh
PSAmcm9vdG1lbnU7IG1lbnUgPSBtZW51LT5wYXJlbnQpIHsNCiAgICAtCQl0eXBlID0gbWVudS0+
cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogMDsNCiAgICAtCQlpZiAodHlwZSA9PSBQX01F
TlUpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIG1lbnU7DQogICAgLX0N
CiAgICAtDQogICAgLWJvb2wgbWVudV9oYXNfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAt
ew0KICAgIC0JcmV0dXJuIG1lbnUtPmhlbHAgIT0gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAt
Y29uc3QgY2hhciAqbWVudV9nZXRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAg
IC0JaWYgKG1lbnUtPmhlbHApDQogICAgLQkJcmV0dXJuIG1lbnUtPmhlbHA7DQogICAgLQllbHNl
DQogICAgLQkJcmV0dXJuICIiOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBnZXRf
cHJvbXB0X3N0cihzdHJ1Y3QgZ3N0ciAqciwgc3RydWN0IHByb3BlcnR5ICpwcm9wLA0KICAgIC0J
CQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQ0KICAgIC17DQogICAgLQlpbnQgaSwgajsNCiAg
ICAtCXN0cnVjdCBtZW51ICpzdWJtZW51WzhdLCAqbWVudSwgKmxvY2F0aW9uID0gTlVMTDsNCiAg
ICAtCXN0cnVjdCBqdW1wX2tleSAqanVtcDsNCiAgICAtDQogICAgLQlzdHJfcHJpbnRmKHIsIF8o
IlByb21wdDogJXNcbiIpLCBfKHByb3AtPnRleHQpKTsNCiAgICAtCW1lbnUgPSBwcm9wLT5tZW51
LT5wYXJlbnQ7DQogICAgLQlmb3IgKGkgPSAwOyBtZW51ICE9ICZyb290bWVudSAmJiBpIDwgODsg
bWVudSA9IG1lbnUtPnBhcmVudCkgew0KICAgIC0JCWJvb2wgYWNjZXNzaWJsZSA9IG1lbnVfaXNf
dmlzaWJsZShtZW51KTsNCiAgICAtDQogICAgLQkJc3VibWVudVtpKytdID0gbWVudTsNCiAgICAt
CQlpZiAobG9jYXRpb24gPT0gTlVMTCAmJiBhY2Nlc3NpYmxlKQ0KICAgIC0JCQlsb2NhdGlvbiA9
IG1lbnU7DQogICAgLQl9DQogICAgLQlpZiAoaGVhZCAmJiBsb2NhdGlvbikgew0KICAgIC0JCWp1
bXAgPSB4bWFsbG9jKHNpemVvZihzdHJ1Y3QganVtcF9rZXkpKTsNCiAgICAtDQogICAgLQkJaWYg
KG1lbnVfaXNfdmlzaWJsZShwcm9wLT5tZW51KSkgew0KICAgIC0JCQkvKg0KICAgIC0JCQkgKiBU
aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gdG8gcHV0IHRoZSBoaW50IGF0IHRoZQ0KICAgIC0JCQkg
KiBiZWdpbm5pbmcgb2YgdGhlICJQcm9tcHQiIGxpbmUuIFB1dCB0aGUgaGludCBvbiB0aGUNCiAg
ICAtCQkJICogbGFzdCAiTG9jYXRpb24iIGxpbmUgZXZlbiB3aGVuIGl0IHdvdWxkIGJlbG9uZyBv
bg0KICAgIC0JCQkgKiB0aGUgZm9ybWVyLg0KICAgIC0JCQkgKi8NCiAgICAtCQkJanVtcC0+dGFy
Z2V0ID0gcHJvcC0+bWVudTsNCiAgICAtCQl9IGVsc2UNCiAgICAtCQkJanVtcC0+dGFyZ2V0ID0g
bG9jYXRpb247DQogICAgLQ0KICAgIC0JCWlmIChsaXN0X2VtcHR5KGhlYWQpKQ0KICAgIC0JCQlq
dW1wLT5pbmRleCA9IDA7DQogICAgLQkJZWxzZQ0KICAgIC0JCQlqdW1wLT5pbmRleCA9IGxpc3Rf
ZW50cnkoaGVhZC0+cHJldiwgc3RydWN0IGp1bXBfa2V5LA0KICAgIC0JCQkJCQkgZW50cmllcykt
PmluZGV4ICsgMTsNCiAgICAtDQogICAgLQkJbGlzdF9hZGRfdGFpbCgmanVtcC0+ZW50cmllcywg
aGVhZCk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKGkgPiAwKSB7DQogICAgLQkJc3RyX3By
aW50ZihyLCBfKCIgIExvY2F0aW9uOlxuIikpOw0KICAgIC0JCWZvciAoaiA9IDQ7IC0taSA+PSAw
OyBqICs9IDIpIHsNCiAgICAtCQkJbWVudSA9IHN1Ym1lbnVbaV07DQogICAgLQkJCWlmIChoZWFk
ICYmIGxvY2F0aW9uICYmIG1lbnUgPT0gbG9jYXRpb24pDQogICAgLQkJCQlqdW1wLT5vZmZzZXQg
PSBzdHJsZW4oci0+cyk7DQogICAgLQkJCXN0cl9wcmludGYociwgIiUqYy0+ICVzIiwgaiwgJyAn
LA0KICAgIC0JCQkJICAgXyhtZW51X2dldF9wcm9tcHQobWVudSkpKTsNCiAgICAtCQkJaWYgKG1l
bnUtPnN5bSkgew0KICAgIC0JCQkJc3RyX3ByaW50ZihyLCAiICglcyBbPSVzXSkiLCBtZW51LT5z
eW0tPm5hbWUgPw0KICAgIC0JCQkJCW1lbnUtPnN5bS0+bmFtZSA6IF8oIjxjaG9pY2U+IiksDQog
ICAgLQkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltKSk7DQogICAgLQkJCX0NCiAg
ICAtCQkJc3RyX2FwcGVuZChyLCAiXG4iKTsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLX0NCiAg
ICAtDQogICAgLS8qDQogICAgLSAqIGdldCBwcm9wZXJ0eSBvZiB0eXBlIFBfU1lNQk9MDQogICAg
LSAqLw0KICAgIC1zdGF0aWMgc3RydWN0IHByb3BlcnR5ICpnZXRfc3ltYm9sX3Byb3Aoc3RydWN0
IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBOVUxM
Ow0KICAgIC0NCiAgICAtCWZvcl9hbGxfcHJvcGVydGllcyhzeW0sIHByb3AsIFBfU1lNQk9MKQ0K
ICAgIC0JCWJyZWFrOw0KICAgIC0JcmV0dXJuIHByb3A7DQogICAgLX0NCiAgICAtDQogICAgLS8q
DQogICAgLSAqIGhlYWQgaXMgb3B0aW9uYWwgYW5kIG1heSBiZSBOVUxMDQogICAgLSAqLw0KICAg
IC12b2lkIGdldF9zeW1ib2xfc3RyKHN0cnVjdCBnc3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0s
DQogICAgLQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpDQogICAgLXsNCiAgICAtCWJvb2wg
aGl0Ow0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0NCiAgICAtCWlmIChzeW0g
JiYgc3ltLT5uYW1lKSB7DQogICAgLQkJc3RyX3ByaW50ZihyLCAiU3ltYm9sOiAlcyBbPSVzXVxu
Iiwgc3ltLT5uYW1lLA0KICAgIC0JCQkgICBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsNCiAg
ICAtCQlzdHJfcHJpbnRmKHIsICJUeXBlICA6ICVzXG4iLCBzeW1fdHlwZV9uYW1lKHN5bS0+dHlw
ZSkpOw0KICAgIC0JCWlmIChzeW0tPnR5cGUgPT0gU19JTlQgfHwgc3ltLT50eXBlID09IFNfSEVY
KSB7DQogICAgLQkJCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3Byb3Aoc3ltKTsNCiAgICAtCQkJaWYg
KHByb3ApIHsNCiAgICAtCQkJCXN0cl9wcmludGYociwgIlJhbmdlIDogIik7DQogICAgLQkJCQll
eHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7DQogICAgLQkJCQlzdHJfYXBwZW5kKHIsICJc
biIpOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JZm9yX2FsbF9wcm9tcHRz
KHN5bSwgcHJvcCkNCiAgICAtCQlnZXRfcHJvbXB0X3N0cihyLCBwcm9wLCBoZWFkKTsNCiAgICAt
DQogICAgLQlwcm9wID0gZ2V0X3N5bWJvbF9wcm9wKHN5bSk7DQogICAgLQlpZiAocHJvcCkgew0K
ICAgIC0JCXN0cl9wcmludGYociwgXygiICBEZWZpbmVkIGF0ICVzOiVkXG4iKSwgcHJvcC0+bWVu
dS0+ZmlsZS0+bmFtZSwNCiAgICAtCQkJcHJvcC0+bWVudS0+bGluZW5vKTsNCiAgICAtCQlpZiAo
IWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAgICAtCQkJc3RyX2FwcGVuZChy
LCBfKCIgIERlcGVuZHMgb246ICIpKTsNCiAgICAtCQkJZXhwcl9nc3RyX3ByaW50KHByb3AtPnZp
c2libGUuZXhwciwgcik7DQogICAgLQkJCXN0cl9hcHBlbmQociwgIlxuIik7DQogICAgLQkJfQ0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCWhpdCA9IGZhbHNlOw0KICAgIC0JZm9yX2FsbF9wcm9wZXJ0
aWVzKHN5bSwgcHJvcCwgUF9TRUxFQ1QpIHsNCiAgICAtCQlpZiAoIWhpdCkgew0KICAgIC0JCQlz
dHJfYXBwZW5kKHIsICIgIFNlbGVjdHM6ICIpOw0KICAgIC0JCQloaXQgPSB0cnVlOw0KICAgIC0J
CX0gZWxzZQ0KICAgIC0JCQlzdHJfcHJpbnRmKHIsICIgJiYgIik7DQogICAgLQkJZXhwcl9nc3Ry
X3ByaW50KHByb3AtPmV4cHIsIHIpOw0KICAgIC0JfQ0KICAgIC0JaWYgKGhpdCkNCiAgICAtCQlz
dHJfYXBwZW5kKHIsICJcbiIpOw0KICAgIC0JaWYgKHN5bS0+cmV2X2RlcC5leHByKSB7DQogICAg
LQkJc3RyX2FwcGVuZChyLCBfKCIgIFNlbGVjdGVkIGJ5OiAiKSk7DQogICAgLQkJZXhwcl9nc3Ry
X3ByaW50KHN5bS0+cmV2X2RlcC5leHByLCByKTsNCiAgICAtCQlzdHJfYXBwZW5kKHIsICJcbiIp
Ow0KICAgIC0JfQ0KICAgIC0Jc3RyX2FwcGVuZChyLCAiXG5cbiIpOw0KICAgIC19DQogICAgLQ0K
ICAgIC1zdHJ1Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0cihzdHJ1Y3Qgc3ltYm9sICoqc3ltX2Fy
ciwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAq
c3ltOw0KICAgIC0Jc3RydWN0IGdzdHIgcmVzID0gc3RyX25ldygpOw0KICAgIC0JaW50IGk7DQog
ICAgLQ0KICAgIC0JZm9yIChpID0gMDsgc3ltX2FyciAmJiAoc3ltID0gc3ltX2FycltpXSk7IGkr
KykNCiAgICAtCQlnZXRfc3ltYm9sX3N0cigmcmVzLCBzeW0sIGhlYWQpOw0KICAgIC0JaWYgKCFp
KQ0KICAgIC0JCXN0cl9hcHBlbmQoJnJlcywgXygiTm8gbWF0Y2hlcyBmb3VuZC5cbiIpKTsNCiAg
ICAtCXJldHVybiByZXM7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIG1lbnVfZ2V0
X2V4dF9oZWxwKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCkNCiAgICAtew0K
ICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOw0KICAgIC0JY29uc3QgY2hhciAq
aGVscF90ZXh0ID0gbm9oZWxwX3RleHQ7DQogICAgLQ0KICAgIC0JaWYgKG1lbnVfaGFzX2hlbHAo
bWVudSkpIHsNCiAgICAtCQlpZiAoc3ltLT5uYW1lKQ0KICAgIC0JCQlzdHJfcHJpbnRmKGhlbHAs
ICIlcyVzOlxuXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUpOw0KICAgIC0JCWhlbHBfdGV4dCA9IG1l
bnVfZ2V0X2hlbHAobWVudSk7DQogICAgLQl9DQogICAgLQlzdHJfcHJpbnRmKGhlbHAsICIlc1xu
IiwgXyhoZWxwX3RleHQpKTsNCiAgICAtCWlmIChzeW0pDQogICAgLQkJZ2V0X3N5bWJvbF9zdHIo
aGVscCwgc3ltLCBOVUxMKTsNCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcvbWVyZ2VfY29uZmlnLnNoIGIvc3VwcG9ydC9rY29uZmlnL21lcmdlX2NvbmZpZy5zaA0KICAg
IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDhhMTcwOGIuLjAwMDAwMDANCiAg
ICAtLS0gYS9zdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmlnLnNoDQogICAgKysrIC9kZXYvbnVs
bA0KICAgIEBAIC0xLDE1MCArMCwwIEBADQogICAgLSMhL2Jpbi9zaA0KICAgIC0jICBtZXJnZV9j
b25maWcuc2ggLSBUYWtlcyBhIGxpc3Qgb2YgY29uZmlnIGZyYWdtZW50IHZhbHVlcywgYW5kIG1l
cmdlcw0KICAgIC0jICB0aGVtIG9uZSBieSBvbmUuIFByb3ZpZGVzIHdhcm5pbmdzIG9uIG92ZXJy
aWRkZW4gdmFsdWVzLCBhbmQgc3BlY2lmaWVkDQogICAgLSMgIHZhbHVlcyB0aGF0IGRpZCBub3Qg
bWFrZSBpdCB0byB0aGUgcmVzdWx0aW5nIC5jb25maWcgZmlsZSAoZHVlIHRvIG1pc3NlZA0KICAg
IC0jICBkZXBlbmRlbmNpZXMgb3IgY29uZmlnIHN5bWJvbCByZW1vdmFsKS4NCiAgICAtIw0KICAg
IC0jICBQb3J0aW9ucyByZXVzZWQgZnJvbSBrY29uZl9jaGVjayBhbmQgZ2VuZXJhdGVfY2ZnOg0K
ICAgIC0jICBodHRwOi8vZ2l0LnlvY3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1r
ZXJuZWwtdG9vbHMvdHJlZS90b29scy9rY29uZl9jaGVjaw0KICAgIC0jICBodHRwOi8vZ2l0Lnlv
Y3RvcHJvamVjdC5vcmcvY2dpdC9jZ2l0LmNnaS95b2N0by1rZXJuZWwtdG9vbHMvdHJlZS90b29s
cy9nZW5lcmF0ZV9jZmcNCiAgICAtIw0KICAgIC0jICBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBX
aW5kIFJpdmVyIFN5c3RlbXMsIEluYy4NCiAgICAtIyAgQ29weXJpZ2h0IDIwMTEgTGluYXJvDQog
ICAgLSMNCiAgICAtIyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgICAtIyAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMNCiAgICAtIyAgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uDQogICAgLSMNCiAgICAtIyAg
VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsDQogICAgLSMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogICAgLSMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4NCiAgICAtIyAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICAgIC0NCiAgICAtY2xlYW5fdXAoKSB7
DQogICAgLQlybSAtZiAkVE1QX0ZJTEUNCiAgICAtCWV4aXQNCiAgICAtfQ0KICAgIC10cmFwIGNs
ZWFuX3VwIEhVUCBJTlQgVEVSTQ0KICAgIC0NCiAgICAtdXNhZ2UoKSB7DQogICAgLQllY2hvICJV
c2FnZTogJDAgW09QVElPTlNdIFtDT05GSUcgWy4uLl1dIg0KICAgIC0JZWNobyAiICAtaCAgICBk
aXNwbGF5IHRoaXMgaGVscCB0ZXh0Ig0KICAgIC0JZWNobyAiICAtbSAgICBvbmx5IG1lcmdlIHRo
ZSBmcmFnbWVudHMsIGRvIG5vdCBleGVjdXRlIHRoZSBtYWtlIGNvbW1hbmQiDQogICAgLQllY2hv
ICIgIC1uICAgIHVzZSBhbGxub2NvbmZpZyBpbnN0ZWFkIG9mIGFsbGRlZmNvbmZpZyINCiAgICAt
CWVjaG8gIiAgLXIgICAgbGlzdCByZWR1bmRhbnQgZW50cmllcyB3aGVuIG1lcmdpbmcgZnJhZ21l
bnRzIg0KICAgIC0JZWNobyAiICAtTyAgICBkaXIgdG8gcHV0IGdlbmVyYXRlZCBvdXRwdXQgZmls
ZXMiDQogICAgLX0NCiAgICAtDQogICAgLU1BS0U9dHJ1ZQ0KICAgIC1BTExUQVJHRVQ9YWxsZGVm
Y29uZmlnDQogICAgLVdBUk5SRURVTj1mYWxzZQ0KICAgIC1PVVRQVVQ9Lg0KICAgIC0NCiAgICAt
d2hpbGUgdHJ1ZTsgZG8NCiAgICAtCWNhc2UgJDEgaW4NCiAgICAtCSItbiIpDQogICAgLQkJQUxM
VEFSR0VUPWFsbG5vY29uZmlnDQogICAgLQkJc2hpZnQNCiAgICAtCQljb250aW51ZQ0KICAgIC0J
CTs7DQogICAgLQkiLW0iKQ0KICAgIC0JCU1BS0U9ZmFsc2UNCiAgICAtCQlzaGlmdA0KICAgIC0J
CWNvbnRpbnVlDQogICAgLQkJOzsNCiAgICAtCSItaCIpDQogICAgLQkJdXNhZ2UNCiAgICAtCQll
eGl0DQogICAgLQkJOzsNCiAgICAtCSItciIpDQogICAgLQkJV0FSTlJFRFVOPXRydWUNCiAgICAt
CQlzaGlmdA0KICAgIC0JCWNvbnRpbnVlDQogICAgLQkJOzsNCiAgICAtCSItTyIpDQogICAgLQkJ
aWYgWyAtZCAkMiBdO3RoZW4NCiAgICAtCQkJT1VUUFVUPSQoZWNobyAkMiB8IHNlZCAncy9cLyok
Ly8nKQ0KICAgIC0JCWVsc2UNCiAgICAtCQkJZWNobyAib3V0cHV0IGRpcmVjdG9yeSAkMiBkb2Vz
IG5vdCBleGlzdCIgMT4mMg0KICAgIC0JCQlleGl0IDENCiAgICAtCQlmaQ0KICAgIC0JCXNoaWZ0
IDINCiAgICAtCQljb250aW51ZQ0KICAgIC0JCTs7DQogICAgLQkqKQ0KICAgIC0JCWJyZWFrDQog
ICAgLQkJOzsNCiAgICAtCWVzYWMNCiAgICAtZG9uZQ0KICAgIC0NCiAgICAtSU5JVEZJTEU9JDEN
CiAgICAtc2hpZnQ7DQogICAgLQ0KICAgIC1NRVJHRV9MSVNUPSQqDQogICAgLVNFRF9DT05GSUdf
RVhQPSJzL15cKCMgXClcezAsMVx9XChDT05GSUdfW2EtekEtWjAtOV9dKlwpWz0gXS4qL1wyL3Ai
DQogICAgLVRNUF9GSUxFPSQobWt0ZW1wIC10IC50bXAuY29uZmlnLlhYWFhYWFhYWFgpDQogICAg
LQ0KICAgIC1lY2hvICJVc2luZyAkSU5JVEZJTEUgYXMgYmFzZSINCiAgICAtY2F0ICRJTklURklM
RSA+ICRUTVBfRklMRQ0KICAgIC0NCiAgICAtIyBNZXJnZSBmaWxlcywgcHJpbnRpbmcgd2Fybmlu
Z3Mgb24gb3ZlcnJpZGVkIHZhbHVlcw0KICAgIC1mb3IgTUVSR0VfRklMRSBpbiAkTUVSR0VfTElT
VCA7IGRvDQogICAgLQllY2hvICJNZXJnaW5nICRNRVJHRV9GSUxFIg0KICAgIC0JQ0ZHX0xJU1Q9
JChzZWQgLW4gIiRTRURfQ09ORklHX0VYUCIgJE1FUkdFX0ZJTEUpDQogICAgLQ0KICAgIC0JZm9y
IENGRyBpbiAkQ0ZHX0xJU1QgOyBkbw0KICAgIC0JCWdyZXAgLXEgLXcgJENGRyAkVE1QX0ZJTEUN
CiAgICAtCQlpZiBbICQ/IC1lcSAwIF0gOyB0aGVuDQogICAgLQkJCVBSRVZfVkFMPSQoZ3JlcCAt
dyAkQ0ZHICRUTVBfRklMRSkNCiAgICAtCQkJTkVXX1ZBTD0kKGdyZXAgLXcgJENGRyAkTUVSR0Vf
RklMRSkNCiAgICAtCQkJaWYgWyAieCRQUkVWX1ZBTCIgIT0gIngkTkVXX1ZBTCIgXSA7IHRoZW4N
CiAgICAtCQkJZWNobyBWYWx1ZSBvZiAkQ0ZHIGlzIHJlZGVmaW5lZCBieSBmcmFnbWVudCAkTUVS
R0VfRklMRToNCiAgICAtCQkJZWNobyBQcmV2aW91cyAgdmFsdWU6ICRQUkVWX1ZBTA0KICAgIC0J
CQllY2hvIE5ldyB2YWx1ZTogICAgICAgJE5FV19WQUwNCiAgICAtCQkJZWNobw0KICAgIC0JCQll
bGlmIFsgIiRXQVJOUkVEVU4iID0gInRydWUiIF07IHRoZW4NCiAgICAtCQkJZWNobyBWYWx1ZSBv
ZiAkQ0ZHIGlzIHJlZHVuZGFudCBieSBmcmFnbWVudCAkTUVSR0VfRklMRToNCiAgICAtCQkJZmkN
CiAgICAtCQkJc2VkIC1pICIvJENGR1sgPV0vZCIgJFRNUF9GSUxFDQogICAgLQkJZmkNCiAgICAt
CWRvbmUNCiAgICAtCWNhdCAkTUVSR0VfRklMRSA+PiAkVE1QX0ZJTEUNCiAgICAtZG9uZQ0KICAg
IC0NCiAgICAtaWYgWyAiJE1BS0UiID0gImZhbHNlIiBdOyB0aGVuDQogICAgLQljcCAkVE1QX0ZJ
TEUgJE9VVFBVVC8uY29uZmlnDQogICAgLQllY2hvICIjIg0KICAgIC0JZWNobyAiIyBtZXJnZWQg
Y29uZmlndXJhdGlvbiB3cml0dGVuIHRvICRPVVRQVVQvLmNvbmZpZyAobmVlZHMgbWFrZSkiDQog
ICAgLQllY2hvICIjIg0KICAgIC0JY2xlYW5fdXANCiAgICAtCWV4aXQNCiAgICAtZmkNCiAgICAt
DQogICAgLSMgSWYgd2UgaGF2ZSBhbiBvdXRwdXQgZGlyLCBzZXR1cCB0aGUgTz0gYXJndW1lbnQs
IG90aGVyd2lzZSBsZWF2ZQ0KICAgIC0jIGl0IGJsYW5rLCBzaW5jZSBPPS4gd2lsbCBjcmVhdGUg
YW4gdW5uZWNlc3NhcnkgLi9zb3VyY2Ugc29mdGxpbmsNCiAgICAtT1VUUFVUX0FSRz0iIg0KICAg
IC1pZiBbICIkT1VUUFVUIiAhPSAiLiIgXSA7IHRoZW4NCiAgICAtCU9VVFBVVF9BUkc9Ik89JE9V
VFBVVCINCiAgICAtZmkNCiAgICAtDQogICAgLQ0KICAgIC0jIFVzZSB0aGUgbWVyZ2VkIGZpbGUg
YXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvcjoNCiAgICAtIyBhbGxkZWZjb25maWc6IEZpbGxzIGlu
IGFueSBtaXNzaW5nIHN5bWJvbHMgd2l0aCBLY29uZmlnIGRlZmF1bHQNCiAgICAtIyBhbGxub2Nv
bmZpZzogRmlsbHMgaW4gYW55IG1pc3Npbmcgc3ltYm9scyB3aXRoICMgQ09ORklHXyogaXMgbm90
IHNldA0KICAgIC1tYWtlIEtDT05GSUdfQUxMQ09ORklHPSRUTVBfRklMRSAkT1VUUFVUX0FSRyAk
QUxMVEFSR0VUDQogICAgLQ0KICAgIC0NCiAgICAtIyBDaGVjayBhbGwgc3BlY2lmaWVkIGNvbmZp
ZyB2YWx1ZXMgdG9vayAobWlnaHQgaGF2ZSBtaXNzZWQtZGVwZW5kZW5jeSBpc3N1ZXMpDQogICAg
LWZvciBDRkcgaW4gJChzZWQgLW4gIiRTRURfQ09ORklHX0VYUCIgJFRNUF9GSUxFKTsgZG8NCiAg
ICAtDQogICAgLQlSRVFVRVNURURfVkFMPSQoZ3JlcCAtdyAtZSAiJENGRyIgJFRNUF9GSUxFKQ0K
ICAgIC0JQUNUVUFMX1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICRPVVRQVVQvLmNvbmZpZykNCiAg
ICAtCWlmIFsgIngkUkVRVUVTVEVEX1ZBTCIgIT0gIngkQUNUVUFMX1ZBTCIgXSA7IHRoZW4NCiAg
ICAtCQllY2hvICJWYWx1ZSByZXF1ZXN0ZWQgZm9yICRDRkcgbm90IGluIGZpbmFsIC5jb25maWci
DQogICAgLQkJZWNobyAiUmVxdWVzdGVkIHZhbHVlOiAgJFJFUVVFU1RFRF9WQUwiDQogICAgLQkJ
ZWNobyAiQWN0dWFsIHZhbHVlOiAgICAgJEFDVFVBTF9WQUwiDQogICAgLQkJZWNobyAiIg0KICAg
IC0JZmkNCiAgICAtZG9uZQ0KICAgIC0NCiAgICAtY2xlYW5fdXANCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL25jb25mLmMgYi9zdXBwb3J0L2tjb25maWcvbmNvbmYuYw0KICAgIGRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDRmYmVjZDIuLjAwMDAwMDANCiAgICAt
LS0gYS9zdXBwb3J0L2tjb25maWcvbmNvbmYuYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAt
MSwxNTU3ICswLDAgQEANCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAyMDA4IE5pciBU
emFjaGFyIDxuaXIudHphY2hhckBnbWFpbC5jb20/DQogICAgLSAqIFJlbGVhc2VkIHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLg0KICAgIC0gKg0KICAgIC0gKiBEZXJpdmVkIGZy
b20gbWVudWNvbmZpZy4NCiAgICAtICoNCiAgICAtICovDQogICAgLSNkZWZpbmUgX0dOVV9TT1VS
Q0UNCiAgICAtI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQog
ICAgLQ0KICAgIC0jaW5jbHVkZSAibGtjLmgiDQogICAgLSNpbmNsdWRlICJuY29uZi5oIg0KICAg
IC0jaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCBjaGFyIG5jb25m
X2dsb2JhbF9oZWxwW10gPSBOXygNCiAgICAtIkhlbHAgd2luZG93c1xuIg0KICAgIC0iLS0tLS0t
LS0tLS0tXG4iDQogICAgLSJvICBHbG9iYWwgaGVscDogIFVubGVzcyBpbiBhIGRhdGEgZW50cnkg
d2luZG93LCBwcmVzc2luZyA8RjE+IHdpbGwgZ2l2ZSBcbiINCiAgICAtIiAgIHlvdSB0aGUgZ2xv
YmFsIGhlbHAgd2luZG93LCB3aGljaCB5b3UgYXJlIGp1c3QgcmVhZGluZy5cbiINCiAgICAtIlxu
Ig0KICAgIC0ibyAgQSBzaG9ydCB2ZXJzaW9uIG9mIHRoZSBnbG9iYWwgaGVscCBpcyBhdmFpbGFi
bGUgYnkgcHJlc3NpbmcgPEYzPi5cbiINCiAgICAtIlxuIg0KICAgIC0ibyAgTG9jYWwgaGVscDog
IFRvIGdldCBoZWxwIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBlbnRyeSwgdXNlIGFueVxu
Ig0KICAgIC0iICAgb2YgPD8+IDxoPiwgb3IgaWYgaW4gYSBkYXRhIGVudHJ5IHdpbmRvdyB0aGVu
IHByZXNzIDxGMT4uXG4iDQogICAgLSJcbiINCiAgICAtIlxuIg0KICAgIC0iTWVudSBlbnRyaWVz
XG4iDQogICAgLSItLS0tLS0tLS0tLS1cbiINCiAgICAtIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91
IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIg0KICAgIC0i
YnVpbGQuICBLZXJuZWwgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxhcml6
ZWQsIG9yIHJlbW92ZWQuXG4iDQogICAgLSJQYXJhbWV0ZXJzIG11c3QgYmUgZW50ZXJlZCBhcyB0
ZXh0IG9yIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycy5cbiINCiAgICAtIlxuIg0KICAg
IC0iTWVudSBlbnRyaWVzIGJlZ2lubmluZyB3aXRoIGZvbGxvd2luZyBicmFjZXMgcmVwcmVzZW50
IGZlYXR1cmVzIHRoYXRcbiINCiAgICAtIiAgWyBdICBjYW4gYmUgYnVpbHQgaW4gb3IgcmVtb3Zl
ZFxuIg0KICAgIC0iICA8ID4gIGNhbiBiZSBidWlsdCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3Zl
ZFxuIg0KICAgIC0iICB7IH0gIGNhbiBiZSBidWlsdCBpbiBvciBtb2R1bGFyaXplZCwgYXJlIHNl
bGVjdGVkIGJ5IGFub3RoZXIgZmVhdHVyZVxuIg0KICAgIC0iICAtIC0gIGFyZSBzZWxlY3RlZCBi
eSBhbm90aGVyIGZlYXR1cmVcbiINCiAgICAtIiAgWFhYICBjYW5ub3QgYmUgc2VsZWN0ZWQuICBT
eW1ib2wgSW5mbyA8RjI+IHRlbGxzIHlvdSB3aHkuXG4iDQogICAgLSIqLCBNIG9yIHdoaXRlc3Bh
Y2UgaW5zaWRlIGJyYWNlcyBtZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXMgYSBtb2R1bGVcbiIN
CiAgICAtIm9yIHRvIGV4Y2x1ZGUgdGhlIGZlYXR1cmUgcmVzcGVjdGl2ZWx5LlxuIg0KICAgIC0i
XG4iDQogICAgLSJUbyBjaGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQg
d2l0aCB0aGUgbW92ZW1lbnQga2V5c1xuIg0KICAgIC0ibGlzdGVkIGJlbG93IGFuZCBwcmVzcyA8
eT4gdG8gYnVpbGQgaXQgaW4sIDxtPiB0byBtYWtlIGl0IGEgbW9kdWxlIG9yXG4iDQogICAgLSI8
bj4gdG8gcmVtb3ZlIGl0LiAgWW91IG1heSBwcmVzcyB0aGUgPFNwYWNlPiBrZXkgdG8gY3ljbGUg
dGhyb3VnaCB0aGVcbiINCiAgICAtImF2YWlsYWJsZSBvcHRpb25zLlxuIg0KICAgIC0iXG4iDQog
ICAgLSJBIHRyYWlsaW5nIFwiLS0tPlwiIGRlc2lnbmF0ZXMgYSBzdWJtZW51LCBhIHRyYWlsaW5n
IFwiLS0tLVwiIGFuXG4iDQogICAgLSJlbXB0eSBzdWJtZW51LlxuIg0KICAgIC0iXG4iDQogICAg
LSJNZW51IG5hdmlnYXRpb24ga2V5c1xuIg0KICAgIC0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0i
TGluZXdpc2UgdXAgICAgICAgICAgICAgICAgIDxVcD5cbiINCiAgICAtIkxpbmV3aXNlIGRvd24g
ICAgICAgICAgICAgICA8RG93bj5cbiINCiAgICAtIlBhZ2V3aXNlIHVwICAgICAgICAgICAgICAg
ICA8UGFnZSBVcD5cbiINCiAgICAtIlBhZ2V3aXNlIGRvd24gICAgICAgICAgICAgICA8UGFnZSBE
b3duPlxuIg0KICAgIC0iRmlyc3QgZW50cnkgICAgICAgICAgICAgICAgIDxIb21lPlxuIg0KICAg
IC0iTGFzdCBlbnRyeSAgICAgICAgICAgICAgICAgIDxFbmQ+XG4iDQogICAgLSJFbnRlciBhIHN1
Ym1lbnUgICAgICAgICAgICAgPFJpZ2h0PiAgPEVudGVyPlxuIg0KICAgIC0iR28gYmFjayB0byBw
YXJlbnQgbWVudSAgICAgIDxMZWZ0PiAgIDxFc2M+ICA8RjU+XG4iDQogICAgLSJDbG9zZSBhIGhl
bHAgd2luZG93ICAgICAgICAgPEVudGVyPiAgPEVzYz4gIDxGNT5cbiINCiAgICAtIkNsb3NlIGVu
dHJ5IHdpbmRvdywgYXBwbHkgICA8RW50ZXI+XG4iDQogICAgLSJDbG9zZSBlbnRyeSB3aW5kb3cs
IGZvcmdldCAgPEVzYz4gIDxGNT5cbiINCiAgICAtIlN0YXJ0IGluY3JlbWVudGFsLCBjYXNlLWlu
c2Vuc2l0aXZlIHNlYXJjaCBmb3IgU1RSSU5HIGluIG1lbnUgZW50cmllcyxcbiINCiAgICAtIiAg
ICBubyByZWdleCBzdXBwb3J0LCBTVFJJTkcgaXMgZGlzcGxheWVkIGluIHVwcGVyIGxlZnQgY29y
bmVyXG4iDQogICAgLSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+U1RSSU5HXG4iDQog
ICAgLSIgICAgUmVtb3ZlIGxhc3QgY2hhcmFjdGVyICAgPEJhY2tzcGFjZT5cbiINCiAgICAtIiAg
ICBKdW1wIHRvIG5leHQgaGl0ICAgICAgICA8RG93bj5cbiINCiAgICAtIiAgICBKdW1wIHRvIHBy
ZXZpb3VzIGhpdCAgICA8VXA+XG4iDQogICAgLSJFeGl0IG1lbnUgc2VhcmNoIG1vZGUgICAgICAg
PC8+ICA8RXNjPlxuIg0KICAgIC0iU2VhcmNoIGZvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3
aXRoIG9yIHdpdGhvdXQgbGVhZGluZyBDT05GSUdfXG4iDQogICAgLSIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPEY4PlJlZ0V4cHI8RW50ZXI+XG4iDQogICAgLSJWZXJib3NlIHNlYXJjaCBo
ZWxwICAgICAgICAgPEY4PjxGMT5cbiINCiAgICAtIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAtIlxu
Ig0KICAgIC0iVW5sZXNzIGluIGEgZGF0YSBlbnRyeSB3aW5kb3csIGtleSA8MT4gbWF5IGJlIHVz
ZWQgaW5zdGVhZCBvZiA8RjE+LFxuIg0KICAgIC0iPDI+IGluc3RlYWQgb2YgPEYyPiwgZXRjLlxu
Ig0KICAgIC0iXG4iDQogICAgLSJcbiINCiAgICAtIlJhZGlvbGlzdCAoQ2hvaWNlIGxpc3QpXG4i
DQogICAgLSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0iVXNlIHRoZSBtb3ZlbWVu
dCBrZXlzIGxpc3RlZCBhYm92ZSB0byBzZWxlY3QgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXRc
biINCiAgICAtImFuZCBwcmVzcyA8U3BhY2U+LlxuIg0KICAgIC0iXG4iDQogICAgLSJcbiINCiAg
ICAtIkRhdGEgZW50cnlcbiINCiAgICAtIi0tLS0tLS0tLS1cbiINCiAgICAtIkVudGVyIHRoZSBy
ZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYW5kIHByZXNzIDxFbnRlcj4uICBIZXhhZGVjaW1hbCB2YWx1
ZXNcbiINCiAgICAtIm1heSBiZSBlbnRlcmVkIHdpdGhvdXQgdGhlIFwiMHhcIiBwcmVmaXguXG4i
DQogICAgLSJcbiINCiAgICAtIlxuIg0KICAgIC0iVGV4dCBCb3ggKEhlbHAgV2luZG93KVxuIg0K
ICAgIC0iLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0iVXNlIG1vdmVtZW50IGtleXMg
YXMgbGlzdGVkIGluIHRhYmxlIGFib3ZlLlxuIg0KICAgIC0iXG4iDQogICAgLSJQcmVzcyBhbnkg
b2YgPEVudGVyPiA8RXNjPiA8cT4gPEY1PiA8Rjk+IHRvIGV4aXQuXG4iDQogICAgLSJcbiINCiAg
ICAtIlxuIg0KICAgIC0iQWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXNcbiINCiAgICAtIi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgLSJuY29uZmlnIHN1cHBvcnRzIHN3
aXRjaGluZyBiZXR3ZWVuIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cbiINCiAgICAtIlByZXNz
IDxGNj4gdG8gc2F2ZSB5b3VyIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFByZXNzIDxGNz4gYW5k
IGVudGVyXG4iDQogICAgLSJhIGZpbGUgbmFtZSB0byBsb2FkIGEgcHJldmlvdXNseSBzYXZlZCBj
b25maWd1cmF0aW9uLlxuIg0KICAgIC0iXG4iDQogICAgLSJcbiINCiAgICAtIlRlcm1pbmFsIGNv
bmZpZ3VyYXRpb25cbiINCiAgICAtIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAtIklm
IHlvdSB1c2UgbmNvbmZpZyBpbiBhIHh0ZXJtIHdpbmRvdywgbWFrZSBzdXJlIHlvdXIgVEVSTSBl
bnZpcm9ubWVudFxuIg0KICAgIC0idmFyaWFibGUgc3BlY2lmaWVzIGEgdGVybWluYWwgY29uZmln
dXJhdGlvbiB3aGljaCBzdXBwb3J0cyBhdCBsZWFzdFxuIg0KICAgIC0iMTYgY29sb3JzLiAgT3Ro
ZXJ3aXNlIG5jb25maWcgd2lsbCBsb29rIHJhdGhlciBiYWQuXG4iDQogICAgLSJcbiINCiAgICAt
IklmIHRoZSBcInN0dHkgc2l6ZVwiIGNvbW1hbmQgcmVwb3J0cyB0aGUgY3VycmVudCB0ZXJtaW5h
bHNpemUgY29ycmVjdGx5LFxuIg0KICAgIC0ibmNvbmZpZyB3aWxsIGFkYXB0IHRvIHNpemVzIGxh
cmdlciB0aGFuIHRoZSB0cmFkaXRpb25hbCA4MHgyNSBcInN0YW5kYXJkXCJcbiINCiAgICAtImFu
ZCBkaXNwbGF5IGxvbmdlciBtZW51cyBwcm9wZXJseS5cbiINCiAgICAtIlxuIg0KICAgIC0iXG4i
DQogICAgLSJTaW5nbGUgbWVudSBtb2RlXG4iDQogICAgLSItLS0tLS0tLS0tLS0tLS0tXG4iDQog
ICAgLSJJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIG9mIHRoZSBtZW51IGVudHJpZXMgbGlzdGVk
IGluIGEgc2luZ2xlIG1lbnUsXG4iDQogICAgLSJyYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBtdWx0
aW1lbnUgaGllcmFyY2h5LCBydW4gbmNvbmZpZyB3aXRoXG4iDQogICAgLSJOQ09ORklHX01PREUg
ZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiAgRXhhbXBsZTpcbiINCiAg
ICAtIlxuIg0KICAgIC0ibWFrZSBOQ09ORklHX01PREU9c2luZ2xlX21lbnUgbmNvbmZpZ1xuIg0K
ICAgIC0iXG4iDQogICAgLSI8RW50ZXI+IHdpbGwgdGhlbiB1bmZvbGQgdGhlIGFwcHJvcHJpYXRl
IGNhdGVnb3J5LCBvciBmb2xkIGl0IGlmIGl0XG4iDQogICAgLSJpcyBhbHJlYWR5IHVuZm9sZGVk
LiAgRm9sZGVkIG1lbnUgZW50cmllcyB3aWxsIGJlIGRlc2lnbmF0ZWQgYnkgYVxuIg0KICAgIC0i
bGVhZGluZyBcIisrPlwiIGFuZCB1bmZvbGRlZCBlbnRyaWVzIGJ5IGEgbGVhZGluZyBcIi0tPlwi
LlxuIg0KICAgIC0iXG4iDQogICAgLSJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5
IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZSB0aGFuXG4iDQogICAgLSJ0aGUgZGVmYXVs
dCBtb2RlLCBlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVuZm9sZGVkIHN1Ym1l
bnVzLlxuIg0KICAgIC0iXG4iKSwNCiAgICAtbWVudV9ub19mX2luc3RydWN0aW9uc1tdID0gTl8o
DQogICAgLSJMZWdlbmQ6ICBbKl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+IG1vZHVsZSAg
PCA+IG1vZHVsZSBjYXBhYmxlLlxuIg0KICAgIC0iU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkg
YSB0cmFpbGluZyBcIi0tLT5cIiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiINCiAgICAtIlxu
Ig0KICAgIC0iVXNlIHRoZSBmb2xsb3dpbmcga2V5cyB0byBuYXZpZ2F0ZSB0aGUgbWVudXM6XG4i
DQogICAgLSJNb3ZlIHVwIG9yIGRvd24gd2l0aCA8VXA+IGFuZCA8RG93bj4uXG4iDQogICAgLSJF
bnRlciBhIHN1Ym1lbnUgd2l0aCA8RW50ZXI+IG9yIDxSaWdodD4uXG4iDQogICAgLSJFeGl0IGEg
c3VibWVudSB0byBpdHMgcGFyZW50IG1lbnUgd2l0aCA8RXNjPiBvciA8TGVmdD4uXG4iDQogICAg
LSJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxuPiBleGNsdWRlcywgPG0+IG1vZHVsYXJpemVzIGZl
YXR1cmVzLlxuIg0KICAgIC0iUHJlc3NpbmcgPFNwYWNlPiBjeWNsZXMgdGhyb3VnaCB0aGUgYXZh
aWxhYmxlIG9wdGlvbnMuXG4iDQogICAgLSJUbyBzZWFyY2ggZm9yIG1lbnUgZW50cmllcyBwcmVz
cyA8Lz4uXG4iDQogICAgLSI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBjdXJyZW50IHdpbmRvdy5c
biINCiAgICAtIlxuIg0KICAgIC0iWW91IGRvIG5vdCBoYXZlIGZ1bmN0aW9uIGtleXMgc3VwcG9y
dC5cbiINCiAgICAtIlByZXNzIDwxPiBpbnN0ZWFkIG9mIDxGMT4sIDwyPiBpbnN0ZWFkIG9mIDxG
Mj4sIGV0Yy5cbiINCiAgICAtIkZvciB2ZXJib3NlIGdsb2JhbCBoZWxwIHVzZSBrZXkgPDE+Llxu
Ig0KICAgIC0iRm9yIGhlbHAgcmVsYXRlZCB0byB0aGUgY3VycmVudCBtZW51IGVudHJ5IHByZXNz
IDw/PiBvciA8aD4uXG4iKSwNCiAgICAtbWVudV9pbnN0cnVjdGlvbnNbXSA9IE5fKA0KICAgIC0i
TGVnZW5kOiAgWypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1
bGUgY2FwYWJsZS5cbiINCiAgICAtIlN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IGEgdHJhaWxp
bmcgXCItLS0+XCIsIGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iDQogICAgLSJcbiINCiAgICAt
IlVzZSB0aGUgZm9sbG93aW5nIGtleXMgdG8gbmF2aWdhdGUgdGhlIG1lbnVzOlxuIg0KICAgIC0i
TW92ZSB1cCBvciBkb3duIHdpdGggPFVwPiBvciA8RG93bj4uXG4iDQogICAgLSJFbnRlciBhIHN1
Ym1lbnUgd2l0aCA8RW50ZXI+IG9yIDxSaWdodD4uXG4iDQogICAgLSJFeGl0IGEgc3VibWVudSB0
byBpdHMgcGFyZW50IG1lbnUgd2l0aCA8RXNjPiBvciA8TGVmdD4uXG4iDQogICAgLSJQcmVzc2lu
ZyA8eT4gaW5jbHVkZXMsIDxuPiBleGNsdWRlcywgPG0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxu
Ig0KICAgIC0iUHJlc3NpbmcgPFNwYWNlPiBjeWNsZXMgdGhyb3VnaCB0aGUgYXZhaWxhYmxlIG9w
dGlvbnMuXG4iDQogICAgLSJUbyBzZWFyY2ggZm9yIG1lbnUgZW50cmllcyBwcmVzcyA8Lz4uXG4i
DQogICAgLSI8RXNjPiBhbHdheXMgbGVhdmVzIHRoZSBjdXJyZW50IHdpbmRvdy5cbiINCiAgICAt
IlxuIg0KICAgIC0iUHJlc3NpbmcgPDE+IG1heSBiZSB1c2VkIGluc3RlYWQgb2YgPEYxPiwgPDI+
IGluc3RlYWQgb2YgPEYyPiwgZXRjLlxuIg0KICAgIC0iRm9yIHZlcmJvc2UgZ2xvYmFsIGhlbHAg
cHJlc3MgPEYxPi5cbiINCiAgICAtIkZvciBoZWxwIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVu
dSBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIiksDQogICAgLXJhZGlvbGlzdF9pbnN0cnVjdGlv
bnNbXSA9IE5fKA0KICAgIC0iUHJlc3MgPFVwPiwgPERvd24+LCA8SG9tZT4gb3IgPEVuZD4gdG8g
bmF2aWdhdGUgYSByYWRpb2xpc3QsIHNlbGVjdFxuIg0KICAgIC0id2l0aCA8U3BhY2U+LlxuIg0K
ICAgIC0iRm9yIGhlbHAgcmVsYXRlZCB0byB0aGUgY3VycmVudCBlbnRyeSBwcmVzcyA8Pz4gb3Ig
PGg+LlxuIg0KICAgIC0iRm9yIGdsb2JhbCBoZWxwIHByZXNzIDxGMT4uXG4iKSwNCiAgICAtaW5w
dXRib3hfaW5zdHJ1Y3Rpb25zX2ludFtdID0gTl8oDQogICAgLSJQbGVhc2UgZW50ZXIgYSBkZWNp
bWFsIHZhbHVlLlxuIg0KICAgIC0iRnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLlxuIg0K
ICAgIC0iUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIpLA0KICAgIC1p
bnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPSBOXygNCiAgICAtIlBsZWFzZSBlbnRlciBhIGhl
eGFkZWNpbWFsIHZhbHVlLlxuIg0KICAgIC0iUHJlc3MgPEVudGVyPiB0byBhcHBseSwgPEVzYz4g
dG8gY2FuY2VsLiIpLA0KICAgIC1pbnB1dGJveF9pbnN0cnVjdGlvbnNfc3RyaW5nW10gPSBOXygN
CiAgICAtIlBsZWFzZSBlbnRlciBhIHN0cmluZyB2YWx1ZS5cbiINCiAgICAtIlByZXNzIDxFbnRl
cj4gdG8gYXBwbHksIDxFc2M+IHRvIGNhbmNlbC4iKSwNCiAgICAtc2V0bW9kX3RleHRbXSA9IE5f
KA0KICAgIC0iVGhpcyBmZWF0dXJlIGRlcGVuZHMgb24gYW5vdGhlciBmZWF0dXJlIHdoaWNoIGhh
cyBiZWVuIGNvbmZpZ3VyZWQgYXMgYVxuIg0KICAgIC0ibW9kdWxlLiAgQXMgYSByZXN1bHQsIHRo
ZSBjdXJyZW50IGZlYXR1cmUgd2lsbCBiZSBidWlsdCBhcyBhIG1vZHVsZSB0b28uIiksDQogICAg
LWxvYWRfY29uZmlnX3RleHRbXSA9IE5fKA0KICAgIC0iRW50ZXIgdGhlIG5hbWUgb2YgdGhlIGNv
bmZpZ3VyYXRpb24gZmlsZSB5b3Ugd2lzaCB0byBsb2FkLlxuIg0KICAgIC0iQWNjZXB0IHRoZSBu
YW1lIHNob3duIHRvIHJlc3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24geW91IGxhc3RcbiINCiAgICAt
InJldHJpZXZlZC4gIExlYXZlIGVtcHR5IHRvIGFib3J0LiIpLA0KICAgIC1sb2FkX2NvbmZpZ19o
ZWxwW10gPSBOXygNCiAgICAtIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBr
ZWVwIHNldmVyYWwgZGlmZmVyZW50XG4iDQogICAgLSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUg
b24gYSBzaW5nbGUgbWFjaGluZS5cbiINCiAgICAtIlxuIg0KICAgIC0iSWYgeW91IGhhdmUgc2F2
ZWQgYSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGluIGEgZmlsZSBvdGhlciB0aGFuIHRoZVxuIg0K
ICAgIC0iZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3Ug
dG8gbG9hZCBhbmQgbW9kaWZ5XG4iDQogICAgLSJ0aGF0IGNvbmZpZ3VyYXRpb24uXG4iDQogICAg
LSJcbiINCiAgICAtIkxlYXZlIGVtcHR5IHRvIGFib3J0LlxuIiksDQogICAgLXNhdmVfY29uZmln
X3RleHRbXSA9IE5fKA0KICAgIC0iRW50ZXIgYSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZp
Z3VyYXRpb24gc2hvdWxkIGJlIHNhdmVkXG4iDQogICAgLSJhcyBhbiBhbHRlcm5hdGUuICBMZWF2
ZSBlbXB0eSB0byBhYm9ydC4iKSwNCiAgICAtc2F2ZV9jb25maWdfaGVscFtdID0gTl8oDQogICAg
LSJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZl
cmVudFxuIg0KICAgIC0iY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIG9uIGEgc2luZ2xlIG1hY2hp
bmUuXG4iDQogICAgLSJcbiINCiAgICAtIkVudGVyaW5nIGEgZmlsZSBuYW1lIGhlcmUgd2lsbCBh
bGxvdyB5b3UgdG8gbGF0ZXIgcmV0cmlldmUsIG1vZGlmeVxuIg0KICAgIC0iYW5kIHVzZSB0aGUg
Y3VycmVudCBjb25maWd1cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0ZXZlclxuIg0KICAg
IC0iY29uZmlndXJhdGlvbiBvcHRpb25zIHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5c
biINCiAgICAtIlxuIg0KICAgIC0iTGVhdmUgZW1wdHkgdG8gYWJvcnQuXG4iKSwNCiAgICAtc2Vh
cmNoX2hlbHBbXSA9IE5fKA0KICAgIC0iU2VhcmNoIGZvciBzeW1ib2xzIChjb25maWd1cmF0aW9u
IHZhcmlhYmxlIG5hbWVzIENPTkZJR18qKSBhbmQgZGlzcGxheVxuIg0KICAgIC0idGhlaXIgcmVs
YXRpb25zLiAgUmVndWxhciBleHByZXNzaW9ucyBhcmUgc3VwcG9ydGVkLlxuIg0KICAgIC0iRXhh
bXBsZTogIFNlYXJjaCBmb3IgXCJeRk9PXCIuXG4iDQogICAgLSJSZXN1bHQ6XG4iDQogICAgLSIt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLVxuIg0KICAgIC0iU3ltYm9sOiBGT08gWyA9IG1dXG4iDQogICAgLSJQcm9tcHQ6IEZv
byBidXMgaXMgdXNlZCB0byBkcml2ZSB0aGUgYmFyIEhXXG4iDQogICAgLSJEZWZpbmVkIGF0IGRy
aXZlcnMvcGNpL0tjb25maWc6NDdcbiINCiAgICAtIkRlcGVuZHMgb246IFg4Nl9MT0NBTF9BUElD
ICYmIFg4Nl9JT19BUElDIHx8IElBNjRcbiINCiAgICAtIkxvY2F0aW9uOlxuIg0KICAgIC0iICAt
PiBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSlcbiINCiAgICAtIiAgICAtPiBQ
Q0kgc3VwcG9ydCAoUENJIFsgPSB5XSlcbiINCiAgICAtIiAgICAgIC0+IFBDSSBhY2Nlc3MgbW9k
ZSAoPGNob2ljZT4gWyA9IHldKVxuIg0KICAgIC0iU2VsZWN0czogTElCQ1JDMzJcbiINCiAgICAt
IlNlbGVjdGVkIGJ5OiBCQVJcbiINCiAgICAtIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgLSJvICBUaGUgbGlu
ZSAnUHJvbXB0Oicgc2hvd3MgdGhlIHRleHQgZGlzcGxheWVkIGZvciB0aGlzIHN5bWJvbCBpblxu
Ig0KICAgIC0iICAgdGhlIG1lbnUgaGllcmFyY2h5LlxuIg0KICAgIC0ibyAgVGhlICdEZWZpbmVk
IGF0JyBsaW5lIHRlbGxzIGF0IHdoYXQgZmlsZSAvIGxpbmUgbnVtYmVyIHRoZSBzeW1ib2wgaXNc
biINCiAgICAtIiAgIGRlZmluZWQuXG4iDQogICAgLSJvICBUaGUgJ0RlcGVuZHMgb246JyBsaW5l
IGxpc3RzIHN5bWJvbHMgdGhhdCBuZWVkIHRvIGJlIGRlZmluZWQgZm9yXG4iDQogICAgLSIgICB0
aGlzIHN5bWJvbCB0byBiZSB2aXNpYmxlIGFuZCBzZWxlY3RhYmxlIGluIHRoZSBtZW51LlxuIg0K
ICAgIC0ibyAgVGhlICdMb2NhdGlvbjonIGxpbmVzIHRlbGwsIHdoZXJlIGluIHRoZSBtZW51IHN0
cnVjdHVyZSB0aGlzIHN5bWJvbFxuIg0KICAgIC0iICAgaXMgbG9jYXRlZC4gIEEgbG9jYXRpb24g
Zm9sbG93ZWQgYnkgYSBbID0geV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpc1xuIg0KICAgIC0iICAg
YSBzZWxlY3RhYmxlIG1lbnUgaXRlbSwgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGRpc3BsYXll
ZCBpbnNpZGVcbiINCiAgICAtIiAgIGJyYWNrZXRzLlxuIg0KICAgIC0ibyAgVGhlICdTZWxlY3Rz
OicgbGluZSB0ZWxscywgd2hhdCBzeW1ib2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVk
XG4iDQogICAgLSIgICBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKS5cbiINCiAg
ICAtIm8gIFRoZSAnU2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVj
dGVkIHRoaXMgc3ltYm9sLlxuIg0KICAgIC0iXG4iDQogICAgLSJPbmx5IHJlbGV2YW50IGxpbmVz
IGFyZSBzaG93bi5cbiINCiAgICAtIlxuXG4iDQogICAgLSJTZWFyY2ggZXhhbXBsZXM6XG4iDQog
ICAgLSJVU0IgID0+IGZpbmQgYWxsIHN5bWJvbHMgY29udGFpbmluZyBVU0JcbiINCiAgICAtIl5V
U0IgPT4gZmluZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxuIg0KICAgIC0iVVNCJCA9
PiBmaW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIg0KICAgIC0iXG4iKTsNCiAgICAt
DQogICAgLXN0cnVjdCBtaXRlbSB7DQogICAgLQljaGFyIHN0clsyNTZdOw0KICAgIC0JY2hhciB0
YWc7DQogICAgLQl2b2lkICp1c3JwdHI7DQogICAgLQlpbnQgaXNfdmlzaWJsZTsNCiAgICAtfTsN
CiAgICAtDQogICAgLSNkZWZpbmUgTUFYX01FTlVfSVRFTVMgNDA5Ng0KICAgIC1zdGF0aWMgaW50
IHNob3dfYWxsX2l0ZW1zOw0KICAgIC1zdGF0aWMgaW50IGluZGVudDsNCiAgICAtc3RhdGljIHN0
cnVjdCBtZW51ICpjdXJyZW50X21lbnU7DQogICAgLXN0YXRpYyBpbnQgY2hpbGRfY291bnQ7DQog
ICAgLXN0YXRpYyBpbnQgc2luZ2xlX21lbnVfbW9kZTsNCiAgICAtLyogdGhlIHdpbmRvdyBpbiB3
aGljaCBhbGwgaW5mb3JtYXRpb24gYXBwZWFycyAqLw0KICAgIC1zdGF0aWMgV0lORE9XICptYWlu
X3dpbmRvdzsNCiAgICAtLyogdGhlIGxhcmdlc3Qgc2l6ZSBvZiB0aGUgbWVudSB3aW5kb3cgKi8N
CiAgICAtc3RhdGljIGludCBtd2luX21heF9saW5lczsNCiAgICAtc3RhdGljIGludCBtd2luX21h
eF9jb2xzOw0KICAgIC0vKiB0aGUgd2luZG93IGluIHdoaWNoIHdlIHNob3cgb3B0aW9uIGJ1dHRv
bnMgKi8NCiAgICAtc3RhdGljIE1FTlUgKmN1cnNlc19tZW51Ow0KICAgIC1zdGF0aWMgSVRFTSAq
Y3Vyc2VzX21lbnVfaXRlbXNbTUFYX01FTlVfSVRFTVNdOw0KICAgIC1zdGF0aWMgc3RydWN0IG1p
dGVtIGtfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107DQogICAgLXN0YXRpYyBpbnQgaXRlbXNf
bnVtOw0KICAgIC1zdGF0aWMgaW50IGdsb2JhbF9leGl0Ow0KICAgIC0vKiB0aGUgY3VycmVudGx5
IHNlbGVjdGVkIGJ1dHRvbiAqLw0KICAgIC1jb25zdCBjaGFyICpjdXJyZW50X2luc3RydWN0aW9u
cyA9IG1lbnVfaW5zdHJ1Y3Rpb25zOw0KICAgIC0NCiAgICAtc3RhdGljIGNoYXIgKmRpYWxvZ19p
bnB1dF9yZXN1bHQ7DQogICAgLXN0YXRpYyBpbnQgZGlhbG9nX2lucHV0X3Jlc3VsdF9sZW47DQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtc3Rh
dGljIHZvaWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC1zdGF0aWMgdm9p
ZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgLXN0YXRpYyB2b2lkIGNvbmZf
bG9hZCh2b2lkKTsNCiAgICAtc3RhdGljIHZvaWQgY29uZl9zYXZlKHZvaWQpOw0KICAgIC1zdGF0
aWMgdm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC1zdGF0aWMgaW50IGRv
X2V4aXQodm9pZCk7DQogICAgLXN0YXRpYyB2b2lkIHNldHVwX3dpbmRvd3Modm9pZCk7DQogICAg
LXN0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpOw0KICAgIC0NCiAgICAtdHlwZWRlZiB2b2lk
ICgqZnVuY3Rpb25fa2V5X2hhbmRsZXJfdCkoaW50ICprZXksIHN0cnVjdCBtZW51ICptZW51KTsN
CiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9pdGVtKTsNCiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2YyKGludCAqa2V5LCBzdHJ1Y3QgbWVu
dSAqY3VycmVudF9pdGVtKTsNCiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2YzKGludCAqa2V5LCBz
dHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2Y0KGlu
dCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICAtc3RhdGljIHZvaWQgaGFu
ZGxlX2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICAtc3RhdGlj
IHZvaWQgaGFuZGxlX2Y2KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAg
ICAtc3RhdGljIHZvaWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9p
dGVtKTsNCiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAq
Y3VycmVudF9pdGVtKTsNCiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2Y5KGludCAqa2V5LCBzdHJ1
Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICAtDQogICAgLXN0cnVjdCBmdW5jdGlvbl9rZXlz
IHsNCiAgICAtCWNvbnN0IGNoYXIgKmtleV9zdHI7DQogICAgLQljb25zdCBjaGFyICpmdW5jOw0K
ICAgIC0JZnVuY3Rpb25fa2V5IGtleTsNCiAgICAtCWZ1bmN0aW9uX2tleV9oYW5kbGVyX3QgaGFu
ZGxlcjsNCiAgICAtfTsNCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCBpbnQgZnVuY3Rpb25fa2V5
c19udW0gPSA5Ow0KICAgIC1zdHJ1Y3QgZnVuY3Rpb25fa2V5cyBmdW5jdGlvbl9rZXlzW10gPSB7
DQogICAgLQl7DQogICAgLQkJLmtleV9zdHIgPSAiRjEiLA0KICAgIC0JCS5mdW5jID0gIkhlbHAi
LA0KICAgIC0JCS5rZXkgPSBGX0hFTFAsDQogICAgLQkJLmhhbmRsZXIgPSBoYW5kbGVfZjEsDQog
ICAgLQl9LA0KICAgIC0Jew0KICAgIC0JCS5rZXlfc3RyID0gIkYyIiwNCiAgICAtCQkuZnVuYyA9
ICJTeW1JbmZvIiwNCiAgICAtCQkua2V5ID0gRl9TWU1CT0wsDQogICAgLQkJLmhhbmRsZXIgPSBo
YW5kbGVfZjIsDQogICAgLQl9LA0KICAgIC0Jew0KICAgIC0JCS5rZXlfc3RyID0gIkYzIiwNCiAg
ICAtCQkuZnVuYyA9ICJIZWxwIDIiLA0KICAgIC0JCS5rZXkgPSBGX0lOU1RTLA0KICAgIC0JCS5o
YW5kbGVyID0gaGFuZGxlX2YzLA0KICAgIC0JfSwNCiAgICAtCXsNCiAgICAtCQkua2V5X3N0ciA9
ICJGNCIsDQogICAgLQkJLmZ1bmMgPSAiU2hvd0FsbCIsDQogICAgLQkJLmtleSA9IEZfQ09ORiwN
CiAgICAtCQkuaGFuZGxlciA9IGhhbmRsZV9mNCwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkJ
LmtleV9zdHIgPSAiRjUiLA0KICAgIC0JCS5mdW5jID0gIkJhY2siLA0KICAgIC0JCS5rZXkgPSBG
X0JBQ0ssDQogICAgLQkJLmhhbmRsZXIgPSBoYW5kbGVfZjUsDQogICAgLQl9LA0KICAgIC0Jew0K
ICAgIC0JCS5rZXlfc3RyID0gIkY2IiwNCiAgICAtCQkuZnVuYyA9ICJTYXZlIiwNCiAgICAtCQku
a2V5ID0gRl9TQVZFLA0KICAgIC0JCS5oYW5kbGVyID0gaGFuZGxlX2Y2LA0KICAgIC0JfSwNCiAg
ICAtCXsNCiAgICAtCQkua2V5X3N0ciA9ICJGNyIsDQogICAgLQkJLmZ1bmMgPSAiTG9hZCIsDQog
ICAgLQkJLmtleSA9IEZfTE9BRCwNCiAgICAtCQkuaGFuZGxlciA9IGhhbmRsZV9mNywNCiAgICAt
CX0sDQogICAgLQl7DQogICAgLQkJLmtleV9zdHIgPSAiRjgiLA0KICAgIC0JCS5mdW5jID0gIlN5
bVNlYXJjaCIsDQogICAgLQkJLmtleSA9IEZfU0VBUkNILA0KICAgIC0JCS5oYW5kbGVyID0gaGFu
ZGxlX2Y4LA0KICAgIC0JfSwNCiAgICAtCXsNCiAgICAtCQkua2V5X3N0ciA9ICJGOSIsDQogICAg
LQkJLmZ1bmMgPSAiRXhpdCIsDQogICAgLQkJLmtleSA9IEZfRVhJVCwNCiAgICAtCQkuaGFuZGxl
ciA9IGhhbmRsZV9mOSwNCiAgICAtCX0sDQogICAgLX07DQogICAgLQ0KICAgIC1zdGF0aWMgdm9p
ZCBwcmludF9mdW5jdGlvbl9saW5lKHZvaWQpDQogICAgLXsNCiAgICAtCWludCBpOw0KICAgIC0J
aW50IG9mZnNldCA9IDE7DQogICAgLQljb25zdCBpbnQgc2tpcCA9IDE7DQogICAgLQlpbnQgbGlu
ZXMgPSBnZXRtYXh5KHN0ZHNjcik7DQogICAgLQ0KICAgIC0JZm9yIChpID0gMDsgaSA8IGZ1bmN0
aW9uX2tleXNfbnVtOyBpKyspIHsNCiAgICAtCQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3cs
IGF0dHJpYnV0ZXNbRlVOQ1RJT05fSElHSExJR0hUXSk7DQogICAgLQkJbXZ3cHJpbnR3KG1haW5f
d2luZG93LCBsaW5lcy0zLCBvZmZzZXQsDQogICAgLQkJCQkiJXMiLA0KICAgIC0JCQkJZnVuY3Rp
b25fa2V5c1tpXS5rZXlfc3RyKTsNCiAgICAtCQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3cs
IGF0dHJpYnV0ZXNbRlVOQ1RJT05fVEVYVF0pOw0KICAgIC0JCW9mZnNldCArPSBzdHJsZW4oZnVu
Y3Rpb25fa2V5c1tpXS5rZXlfc3RyKTsNCiAgICAtCQltdndwcmludHcobWFpbl93aW5kb3csIGxp
bmVzLTMsDQogICAgLQkJCQlvZmZzZXQsICIlcyIsDQogICAgLQkJCQlmdW5jdGlvbl9rZXlzW2ld
LmZ1bmMpOw0KICAgIC0JCW9mZnNldCArPSBzdHJsZW4oZnVuY3Rpb25fa2V5c1tpXS5mdW5jKSAr
IHNraXA7DQogICAgLQl9DQogICAgLQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJp
YnV0ZXNbTk9STUFMXSk7DQogICAgLX0NCiAgICAtDQogICAgLS8qIGhlbHAgKi8NCiAgICAtc3Rh
dGljIHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0K
ICAgIC17DQogICAgLQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csDQogICAgLQkJCV8oIkds
b2JhbCBoZWxwIiksIF8obmNvbmZfZ2xvYmFsX2hlbHApKTsNCiAgICAtCXJldHVybjsNCiAgICAt
fQ0KICAgIC0NCiAgICAtLyogc3ltYm9sZSBoZWxwICovDQogICAgLXN0YXRpYyB2b2lkIGhhbmRs
ZV9mMihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkNCiAgICAtew0KICAgIC0J
c2hvd19oZWxwKGN1cnJlbnRfaXRlbSk7DQogICAgLQlyZXR1cm47DQogICAgLX0NCiAgICAtDQog
ICAgLS8qIGluc3RydWN0aW9ucyAqLw0KICAgIC1zdGF0aWMgdm9pZCBoYW5kbGVfZjMoaW50ICpr
ZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgLXsNCiAgICAtCXNob3dfc2Nyb2xs
X3dpbihtYWluX3dpbmRvdywNCiAgICAtCQkJXygiU2hvcnQgaGVscCIpLA0KICAgIC0JCQlfKGN1
cnJlbnRfaW5zdHJ1Y3Rpb25zKSk7DQogICAgLQlyZXR1cm47DQogICAgLX0NCiAgICAtDQogICAg
LS8qIGNvbmZpZyAqLw0KICAgIC1zdGF0aWMgdm9pZCBoYW5kbGVfZjQoaW50ICprZXksIHN0cnVj
dCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgLXsNCiAgICAtCWludCByZXMgPSBidG5fZGlhbG9n
KG1haW5fd2luZG93LA0KICAgIC0JCQlfKCJTaG93IGFsbCBzeW1ib2xzPyIpLA0KICAgIC0JCQky
LA0KICAgIC0JCQkiICAgPFNob3cgQWxsPiAgICIsDQogICAgLQkJCSI8RG9uJ3Qgc2hvdyBhbGw+
Iik7DQogICAgLQlpZiAocmVzID09IDApDQogICAgLQkJc2hvd19hbGxfaXRlbXMgPSAxOw0KICAg
IC0JZWxzZSBpZiAocmVzID09IDEpDQogICAgLQkJc2hvd19hbGxfaXRlbXMgPSAwOw0KICAgIC0N
CiAgICAtCXJldHVybjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogYmFjayAqLw0KICAgIC1zdGF0
aWMgdm9pZCBoYW5kbGVfZjUoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQog
ICAgLXsNCiAgICAtCSprZXkgPSBLRVlfTEVGVDsNCiAgICAtCXJldHVybjsNCiAgICAtfQ0KICAg
IC0NCiAgICAtLyogc2F2ZSAqLw0KICAgIC1zdGF0aWMgdm9pZCBoYW5kbGVfZjYoaW50ICprZXks
IHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgLXsNCiAgICAtCWNvbmZfc2F2ZSgpOw0K
ICAgIC0JcmV0dXJuOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBsb2FkICovDQogICAgLXN0YXRp
YyB2b2lkIGhhbmRsZV9mNyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkNCiAg
ICAtew0KICAgIC0JY29uZl9sb2FkKCk7DQogICAgLQlyZXR1cm47DQogICAgLX0NCiAgICAtDQog
ICAgLS8qIHNlYXJjaCAqLw0KICAgIC1zdGF0aWMgdm9pZCBoYW5kbGVfZjgoaW50ICprZXksIHN0
cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgLXsNCiAgICAtCXNlYXJjaF9jb25mKCk7DQog
ICAgLQlyZXR1cm47DQogICAgLX0NCiAgICAtDQogICAgLS8qIGV4aXQgKi8NCiAgICAtc3RhdGlj
IHZvaWQgaGFuZGxlX2Y5KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0KICAg
IC17DQogICAgLQlkb19leGl0KCk7DQogICAgLQlyZXR1cm47DQogICAgLX0NCiAgICAtDQogICAg
LS8qIHJldHVybiAhPSAwIHRvIGluZGljYXRlIHRoZSBrZXkgd2FzIGhhbmRsZXMgKi8NCiAgICAt
c3RhdGljIGludCBwcm9jZXNzX3NwZWNpYWxfa2V5cyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKm1l
bnUpDQogICAgLXsNCiAgICAtCWludCBpOw0KICAgIC0NCiAgICAtCWlmICgqa2V5ID09IEtFWV9S
RVNJWkUpIHsNCiAgICAtCQlzZXR1cF93aW5kb3dzKCk7DQogICAgLQkJcmV0dXJuIDE7DQogICAg
LQl9DQogICAgLQ0KICAgIC0JZm9yIChpID0gMDsgaSA8IGZ1bmN0aW9uX2tleXNfbnVtOyBpKysp
IHsNCiAgICAtCQlpZiAoKmtleSA9PSBLRVlfRihmdW5jdGlvbl9rZXlzW2ldLmtleSkgfHwNCiAg
ICAtCQkgICAgKmtleSA9PSAnMCcgKyBmdW5jdGlvbl9rZXlzW2ldLmtleSl7DQogICAgLQkJCWZ1
bmN0aW9uX2tleXNbaV0uaGFuZGxlcihrZXksIG1lbnUpOw0KICAgIC0JCQlyZXR1cm4gMTsNCiAg
ICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQog
ICAgLXN0YXRpYyB2b2lkIGNsZWFuX2l0ZW1zKHZvaWQpDQogICAgLXsNCiAgICAtCWludCBpOw0K
ICAgIC0JZm9yIChpID0gMDsgY3Vyc2VzX21lbnVfaXRlbXNbaV07IGkrKykNCiAgICAtCQlmcmVl
X2l0ZW0oY3Vyc2VzX21lbnVfaXRlbXNbaV0pOw0KICAgIC0JYnplcm8oY3Vyc2VzX21lbnVfaXRl
bXMsIHNpemVvZihjdXJzZXNfbWVudV9pdGVtcykpOw0KICAgIC0JYnplcm8oa19tZW51X2l0ZW1z
LCBzaXplb2Yoa19tZW51X2l0ZW1zKSk7DQogICAgLQlpdGVtc19udW0gPSAwOw0KICAgIC19DQog
ICAgLQ0KICAgIC10eXBlZGVmIGVudW0ge01BVENIX1RJTktFUl9QQVRURVJOX1VQLCBNQVRDSF9U
SU5LRVJfUEFUVEVSTl9ET1dOLA0KICAgIC0JRklORF9ORVhUX01BVENIX0RPV04sIEZJTkRfTkVY
VF9NQVRDSF9VUH0gbWF0Y2hfZjsNCiAgICAtDQogICAgLS8qIHJldHVybiB0aGUgaW5kZXggb2Yg
dGhlIG1hdGNoZWQgaXRlbSwgb3IgLTEgaWYgbm8gc3VjaCBpdGVtIGV4aXN0cyAqLw0KICAgIC1z
dGF0aWMgaW50IGdldF9tZXh0X21hdGNoKGNvbnN0IGNoYXIgKm1hdGNoX3N0ciwgbWF0Y2hfZiBm
bGFnKQ0KICAgIC17DQogICAgLQlpbnQgbWF0Y2hfc3RhcnQgPSBpdGVtX2luZGV4KGN1cnJlbnRf
aXRlbShjdXJzZXNfbWVudSkpOw0KICAgIC0JaW50IGluZGV4Ow0KICAgIC0NCiAgICAtCWlmIChm
bGFnID09IEZJTkRfTkVYVF9NQVRDSF9ET1dOKQ0KICAgIC0JCSsrbWF0Y2hfc3RhcnQ7DQogICAg
LQllbHNlIGlmIChmbGFnID09IEZJTkRfTkVYVF9NQVRDSF9VUCkNCiAgICAtCQktLW1hdGNoX3N0
YXJ0Ow0KICAgIC0NCiAgICAtCWluZGV4ID0gbWF0Y2hfc3RhcnQ7DQogICAgLQlpbmRleCA9IChp
bmRleCArIGl0ZW1zX251bSkgJSBpdGVtc19udW07DQogICAgLQl3aGlsZSAodHJ1ZSkgew0KICAg
IC0JCWNoYXIgKnN0ciA9IGtfbWVudV9pdGVtc1tpbmRleF0uc3RyOw0KICAgIC0JCWlmIChzdHJj
YXNlc3RyKHN0ciwgbWF0Y2hfc3RyKSAhPSAwKQ0KICAgIC0JCQlyZXR1cm4gaW5kZXg7DQogICAg
LQkJaWYgKGZsYWcgPT0gRklORF9ORVhUX01BVENIX1VQIHx8DQogICAgLQkJICAgIGZsYWcgPT0g
TUFUQ0hfVElOS0VSX1BBVFRFUk5fVVApDQogICAgLQkJCS0taW5kZXg7DQogICAgLQkJZWxzZQ0K
ICAgIC0JCQkrK2luZGV4Ow0KICAgIC0JCWluZGV4ID0gKGluZGV4ICsgaXRlbXNfbnVtKSAlIGl0
ZW1zX251bTsNCiAgICAtCQlpZiAoaW5kZXggPT0gbWF0Y2hfc3RhcnQpDQogICAgLQkJCXJldHVy
biAtMTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyogTWFrZSBhIG5ldyBpdGVtLiAq
Lw0KICAgIC1zdGF0aWMgdm9pZCBpdGVtX21ha2Uoc3RydWN0IG1lbnUgKm1lbnUsIGNoYXIgdGFn
LCBjb25zdCBjaGFyICpmbXQsIC4uLikNCiAgICAtew0KICAgIC0JdmFfbGlzdCBhcDsNCiAgICAt
DQogICAgLQlpZiAoaXRlbXNfbnVtID4gTUFYX01FTlVfSVRFTVMtMSkNCiAgICAtCQlyZXR1cm47
DQogICAgLQ0KICAgIC0JYnplcm8oJmtfbWVudV9pdGVtc1tpdGVtc19udW1dLCBzaXplb2Yoa19t
ZW51X2l0ZW1zWzBdKSk7DQogICAgLQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS50YWcgPSB0YWc7
DQogICAgLQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS51c3JwdHIgPSBtZW51Ow0KICAgIC0JaWYg
KG1lbnUgIT0gTlVMTCkNCiAgICAtCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNpYmxl
ID0NCiAgICAtCQkJbWVudV9pc192aXNpYmxlKG1lbnUpOw0KICAgIC0JZWxzZQ0KICAgIC0JCWtf
bWVudV9pdGVtc1tpdGVtc19udW1dLmlzX3Zpc2libGUgPSAxOw0KICAgIC0NCiAgICAtCXZhX3N0
YXJ0KGFwLCBmbXQpOw0KICAgIC0JdnNucHJpbnRmKGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0
ciwNCiAgICAtCQkgIHNpemVvZihrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIpLA0KICAgIC0J
CSAgZm10LCBhcCk7DQogICAgLQl2YV9lbmQoYXApOw0KICAgIC0NCiAgICAtCWlmICgha19tZW51
X2l0ZW1zW2l0ZW1zX251bV0uaXNfdmlzaWJsZSkNCiAgICAtCQltZW1jcHkoa19tZW51X2l0ZW1z
W2l0ZW1zX251bV0uc3RyLCAiWFhYIiwgMyk7DQogICAgLQ0KICAgIC0JY3Vyc2VzX21lbnVfaXRl
bXNbaXRlbXNfbnVtXSA9IG5ld19pdGVtKA0KICAgIC0JCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVt
XS5zdHIsDQogICAgLQkJCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0cik7DQogICAgLQlzZXRf
aXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0ZW1zW2l0ZW1zX251bV0sDQogICAgLQkJCSZrX21l
bnVfaXRlbXNbaXRlbXNfbnVtXSk7DQogICAgLQkvKg0KICAgIC0JaWYgKCFrX21lbnVfaXRlbXNb
aXRlbXNfbnVtXS5pc192aXNpYmxlKQ0KICAgIC0JCWl0ZW1fb3B0c19vZmYoY3Vyc2VzX21lbnVf
aXRlbXNbaXRlbXNfbnVtXSwgT19TRUxFQ1RBQkxFKTsNCiAgICAtCSovDQogICAgLQ0KICAgIC0J
aXRlbXNfbnVtKys7DQogICAgLQljdXJzZXNfbWVudV9pdGVtc1tpdGVtc19udW1dID0gTlVMTDsN
CiAgICAtfQ0KICAgIC0NCiAgICAtLyogdmVyeSBoYWNraXNoLiBhZGRzIGEgc3RyaW5nIHRvIHRo
ZSBsYXN0IGl0ZW0gYWRkZWQgKi8NCiAgICAtc3RhdGljIHZvaWQgaXRlbV9hZGRfc3RyKGNvbnN0
IGNoYXIgKmZtdCwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0JaW50IGlu
ZGV4ID0gaXRlbXNfbnVtLTE7DQogICAgLQljaGFyIG5ld19zdHJbMjU2XTsNCiAgICAtCWNoYXIg
dG1wX3N0clsyNTZdOw0KICAgIC0NCiAgICAtCWlmIChpbmRleCA8IDApDQogICAgLQkJcmV0dXJu
Ow0KICAgIC0NCiAgICAtCXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0JdnNucHJpbnRmKG5ld19z
dHIsIHNpemVvZihuZXdfc3RyKSwgZm10LCBhcCk7DQogICAgLQl2YV9lbmQoYXApOw0KICAgIC0J
c25wcmludGYodG1wX3N0ciwgc2l6ZW9mKHRtcF9zdHIpLCAiJXMlcyIsDQogICAgLQkJCWtfbWVu
dV9pdGVtc1tpbmRleF0uc3RyLCBuZXdfc3RyKTsNCiAgICAtCXN0cm5jcHkoa19tZW51X2l0ZW1z
W2luZGV4XS5zdHIsDQogICAgLQkJdG1wX3N0ciwNCiAgICAtCQlzaXplb2Yoa19tZW51X2l0ZW1z
W2luZGV4XS5zdHIpKTsNCiAgICAtDQogICAgLQlmcmVlX2l0ZW0oY3Vyc2VzX21lbnVfaXRlbXNb
aW5kZXhdKTsNCiAgICAtCWN1cnNlc19tZW51X2l0ZW1zW2luZGV4XSA9IG5ld19pdGVtKA0KICAg
IC0JCQlrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwNCiAgICAtCQkJa19tZW51X2l0ZW1zW2luZGV4
XS5zdHIpOw0KICAgIC0Jc2V0X2l0ZW1fdXNlcnB0cihjdXJzZXNfbWVudV9pdGVtc1tpbmRleF0s
DQogICAgLQkJCSZrX21lbnVfaXRlbXNbaW5kZXhdKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyog
Z2V0IHRoZSB0YWcgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtICovDQogICAgLXN0YXRp
YyBjaGFyIGl0ZW1fdGFnKHZvaWQpDQogICAgLXsNCiAgICAtCUlURU0gKmN1cjsNCiAgICAtCXN0
cnVjdCBtaXRlbSAqbWN1cjsNCiAgICAtDQogICAgLQljdXIgPSBjdXJyZW50X2l0ZW0oY3Vyc2Vz
X21lbnUpOw0KICAgIC0JaWYgKGN1ciA9PSBOVUxMKQ0KICAgIC0JCXJldHVybiAwOw0KICAgIC0J
bWN1ciA9IChzdHJ1Y3QgbWl0ZW0gKikgaXRlbV91c2VycHRyKGN1cik7DQogICAgLQlyZXR1cm4g
bWN1ci0+dGFnOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGN1cnNlc19pdGVtX2lu
ZGV4KHZvaWQpDQogICAgLXsNCiAgICAtCXJldHVybiAgaXRlbV9pbmRleChjdXJyZW50X2l0ZW0o
Y3Vyc2VzX21lbnUpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgKml0ZW1fZGF0
YSh2b2lkKQ0KICAgIC17DQogICAgLQlJVEVNICpjdXI7DQogICAgLQlzdHJ1Y3QgbWl0ZW0gKm1j
dXI7DQogICAgLQ0KICAgIC0JY3VyID0gY3VycmVudF9pdGVtKGN1cnNlc19tZW51KTsNCiAgICAt
CWlmICghY3VyKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0JbWN1ciA9IChzdHJ1Y3QgbWl0
ZW0gKikgaXRlbV91c2VycHRyKGN1cik7DQogICAgLQlyZXR1cm4gbWN1ci0+dXNycHRyOw0KICAg
IC0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGludCBpdGVtX2lzX3RhZyhjaGFyIHRhZykN
CiAgICAtew0KICAgIC0JcmV0dXJuIGl0ZW1fdGFnKCkgPT0gdGFnOw0KICAgIC19DQogICAgLQ0K
ICAgIC1zdGF0aWMgY2hhciBmaWxlbmFtZVtQQVRIX01BWCsxXTsNCiAgICAtc3RhdGljIGNoYXIg
bWVudV9iYWNrdGl0bGVbUEFUSF9NQVgrMTI4XTsNCiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKnNl
dF9jb25maWdfZmlsZW5hbWUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lKQ0KICAgIC17DQog
ICAgLQlpbnQgc2l6ZTsNCiAgICAtDQogICAgLQlzaXplID0gc25wcmludGYobWVudV9iYWNrdGl0
bGUsIHNpemVvZihtZW51X2JhY2t0aXRsZSksDQogICAgLQkJCSIlcyAtICVzIiwgY29uZmlnX2Zp
bGVuYW1lLCByb290bWVudS5wcm9tcHQtPnRleHQpOw0KICAgIC0JaWYgKHNpemUgPj0gc2l6ZW9m
KG1lbnVfYmFja3RpdGxlKSkNCiAgICAtCQltZW51X2JhY2t0aXRsZVtzaXplb2YobWVudV9iYWNr
dGl0bGUpLTFdID0gJ1wwJzsNCiAgICAtDQogICAgLQlzaXplID0gc25wcmludGYoZmlsZW5hbWUs
IHNpemVvZihmaWxlbmFtZSksICIlcyIsIGNvbmZpZ19maWxlbmFtZSk7DQogICAgLQlpZiAoc2l6
ZSA+PSBzaXplb2YoZmlsZW5hbWUpKQ0KICAgIC0JCWZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSkt
MV0gPSAnXDAnOw0KICAgIC0JcmV0dXJuIG1lbnVfYmFja3RpdGxlOw0KICAgIC19DQogICAgLQ0K
ICAgIC0vKiByZXR1cm4gPSAwIG1lYW5zIHdlIGFyZSBzdWNjZXNzZnVsLg0KICAgIC0gKiAtMSBt
ZWFucyBnbyBvbiBkb2luZyB3aGF0IHlvdSB3ZXJlIGRvaW5nDQogICAgLSAqLw0KICAgIC1zdGF0
aWMgaW50IGRvX2V4aXQodm9pZCkNCiAgICAtew0KICAgIC0JaW50IHJlczsNCiAgICAtCWlmICgh
Y29uZl9nZXRfY2hhbmdlZCgpKSB7DQogICAgLQkJZ2xvYmFsX2V4aXQgPSAxOw0KICAgIC0JCXJl
dHVybiAwOw0KICAgIC0JfQ0KICAgIC0JcmVzID0gYnRuX2RpYWxvZyhtYWluX3dpbmRvdywNCiAg
ICAtCQkJXygiRG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyIG5ldyBjb25maWd1cmF0aW9uP1xuIg0K
ICAgIC0JCQkJIjxFU0M+IHRvIGNhbmNlbCBhbmQgcmVzdW1lIG5jb25maWcuIiksDQogICAgLQkJ
CTIsDQogICAgLQkJCSIgICA8c2F2ZT4gICAiLA0KICAgIC0JCQkiPGRvbid0IHNhdmU+Iik7DQog
ICAgLQlpZiAocmVzID09IEtFWV9FWElUKSB7DQogICAgLQkJZ2xvYmFsX2V4aXQgPSAwOw0KICAg
IC0JCXJldHVybiAtMTsNCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBpZiB3ZSBnb3QgaGVyZSwg
dGhlIHVzZXIgcmVhbGx5IHdhbnRzIHRvIGV4aXQgKi8NCiAgICAtCXN3aXRjaCAocmVzKSB7DQog
ICAgLQljYXNlIDA6DQogICAgLQkJcmVzID0gY29uZl93cml0ZShmaWxlbmFtZSk7DQogICAgLQkJ
aWYgKHJlcykNCiAgICAtCQkJYnRuX2RpYWxvZygNCiAgICAtCQkJCW1haW5fd2luZG93LA0KICAg
IC0JCQkJXygiRXJyb3IgZHVyaW5nIHdyaXRpbmcgb2YgY29uZmlndXJhdGlvbi5cbiINCiAgICAt
CQkJCSAgIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIpLA0KICAg
IC0JCQkJICAxLA0KICAgIC0JCQkJICAiPE9LPiIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVm
YXVsdDoNCiAgICAtCQlidG5fZGlhbG9nKA0KICAgIC0JCQltYWluX3dpbmRvdywNCiAgICAtCQkJ
XygiWW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIiksDQogICAgLQkJ
CTEsDQogICAgLQkJCSI8T0s+Iik7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQlnbG9i
YWxfZXhpdCA9IDE7DQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAg
LXN0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1i
b2wgKipzeW1fYXJyOw0KICAgIC0Jc3RydWN0IGdzdHIgcmVzOw0KICAgIC0Jc3RydWN0IGdzdHIg
dGl0bGU7DQogICAgLQljaGFyICpkaWFsb2dfaW5wdXQ7DQogICAgLQlpbnQgZHJlczsNCiAgICAt
DQogICAgLQl0aXRsZSA9IHN0cl9uZXcoKTsNCiAgICAtCXN0cl9wcmludGYoICZ0aXRsZSwgXygi
RW50ZXIgKHN1YilzdHJpbmcgb3IgcmVnZXhwIHRvIHNlYXJjaCBmb3IgIg0KICAgIC0JCQkgICAg
ICAiKHdpdGggb3Igd2l0aG91dCBcIiVzXCIpIiksIENPTkZJR18pOw0KICAgIC0NCiAgICAtYWdh
aW46DQogICAgLQlkcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LA0KICAgIC0JCQlf
KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiKSwNCiAgICAtCQkJc3RyX2dldCgmdGl0
bGUpLA0KICAgIC0JCQkiIiwgJmRpYWxvZ19pbnB1dF9yZXN1bHQsICZkaWFsb2dfaW5wdXRfcmVz
dWx0X2xlbik7DQogICAgLQlzd2l0Y2ggKGRyZXMpIHsNCiAgICAtCWNhc2UgMDoNCiAgICAtCQli
cmVhazsNCiAgICAtCWNhc2UgMToNCiAgICAtCQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3cs
DQogICAgLQkJCQlfKCJTZWFyY2ggQ29uZmlndXJhdGlvbiIpLCBzZWFyY2hfaGVscCk7DQogICAg
LQkJZ290byBhZ2FpbjsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJc3RyX2ZyZWUoJnRpdGxlKTsN
CiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JLyogc3RyaXAgdGhlIHByZWZp
eCBpZiBuZWNlc3NhcnkgKi8NCiAgICAtCWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1
bHQ7DQogICAgLQlpZiAoc3RybmNhc2VjbXAoZGlhbG9nX2lucHV0X3Jlc3VsdCwgQ09ORklHXywg
c3RybGVuKENPTkZJR18pKSA9PSAwKQ0KICAgIC0JCWRpYWxvZ19pbnB1dCArPSBzdHJsZW4oQ09O
RklHXyk7DQogICAgLQ0KICAgIC0Jc3ltX2FyciA9IHN5bV9yZV9zZWFyY2goZGlhbG9nX2lucHV0
KTsNCiAgICAtCXJlcyA9IGdldF9yZWxhdGlvbnNfc3RyKHN5bV9hcnIsIE5VTEwpOw0KICAgIC0J
ZnJlZShzeW1fYXJyKTsNCiAgICAtCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywNCiAgICAt
CQkJXygiU2VhcmNoIFJlc3VsdHMiKSwgc3RyX2dldCgmcmVzKSk7DQogICAgLQlzdHJfZnJlZSgm
cmVzKTsNCiAgICAtCXN0cl9mcmVlKCZ0aXRsZSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAg
IC1zdGF0aWMgdm9pZCBidWlsZF9jb25mKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAg
LQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAg
LQlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgLQlpbnQgdHlwZSwgdG1wLCBkb2ludCA9IDI7DQog
ICAgLQl0cmlzdGF0ZSB2YWw7DQogICAgLQljaGFyIGNoOw0KICAgIC0NCiAgICAtCWlmICghbWVu
dSB8fCAoIXNob3dfYWxsX2l0ZW1zICYmICFtZW51X2lzX3Zpc2libGUobWVudSkpKQ0KICAgIC0J
CXJldHVybjsNCiAgICAtDQogICAgLQlzeW0gPSBtZW51LT5zeW07DQogICAgLQlwcm9wID0gbWVu
dS0+cHJvbXB0Ow0KICAgIC0JaWYgKCFzeW0pIHsNCiAgICAtCQlpZiAocHJvcCAmJiBtZW51ICE9
IGN1cnJlbnRfbWVudSkgew0KICAgIC0JCQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9w
cm9tcHQobWVudSk7DQogICAgLQkJCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAgIC0JCQlwdHlw
ZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICAt
CQkJc3dpdGNoIChwdHlwZSkgew0KICAgIC0JCQljYXNlIFBfTUVOVToNCiAgICAtCQkJCWNoaWxk
X2NvdW50Kys7DQogICAgLQkJCQlwcm9tcHQgPSBfKHByb21wdCk7DQogICAgLQkJCQlpZiAoc2lu
Z2xlX21lbnVfbW9kZSkgew0KICAgIC0JCQkJCWl0ZW1fbWFrZShtZW51LCAnbScsDQogICAgLQkJ
CQkJCSIlcyUqYyVzIiwNCiAgICAtCQkJCQkJbWVudS0+ZGF0YSA/ICItLT4iIDogIisrPiIsDQog
ICAgLQkJCQkJCWluZGVudCArIDEsICcgJywgcHJvbXB0KTsNCiAgICAtCQkJCX0gZWxzZQ0KICAg
IC0JCQkJCWl0ZW1fbWFrZShtZW51LCAnbScsDQogICAgLQkJCQkJCSAgIiAgICUqYyVzICAlcyIs
DQogICAgLQkJCQkJCSAgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQsDQogICAgLQkJCQkJCSAgbWVu
dV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7DQogICAgLQ0KICAgIC0JCQkJaWYg
KHNpbmdsZV9tZW51X21vZGUgJiYgbWVudS0+ZGF0YSkNCiAgICAtCQkJCQlnb3RvIGNvbmZfY2hp
bGRzOw0KICAgIC0JCQkJcmV0dXJuOw0KICAgIC0JCQljYXNlIFBfQ09NTUVOVDoNCiAgICAtCQkJ
CWlmIChwcm9tcHQpIHsNCiAgICAtCQkJCQljaGlsZF9jb3VudCsrOw0KICAgIC0JCQkJCWl0ZW1f
bWFrZShtZW51LCAnOicsDQogICAgLQkJCQkJCSIgICAlKmMqKiogJXMgKioqIiwNCiAgICAtCQkJ
CQkJaW5kZW50ICsgMSwgJyAnLA0KICAgIC0JCQkJCQlfKHByb21wdCkpOw0KICAgIC0JCQkJfQ0K
ICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWRlZmF1bHQ6DQogICAgLQkJCQlpZiAocHJvbXB0KSB7
DQogICAgLQkJCQkJY2hpbGRfY291bnQrKzsNCiAgICAtCQkJCQlpdGVtX21ha2UobWVudSwgJzon
LCAiLS0tJSpjJXMiLA0KICAgIC0JCQkJCQlpbmRlbnQgKyAxLCAnICcsDQogICAgLQkJCQkJCV8o
cHJvbXB0KSk7DQogICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtCQl9IGVsc2UNCiAgICAtCQkJ
ZG9pbnQgPSAwOw0KICAgIC0JCWdvdG8gY29uZl9jaGlsZHM7DQogICAgLQl9DQogICAgLQ0KICAg
IC0JdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3lt
KSkgew0KICAgIC0JCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1
ZShzeW0pOw0KICAgIC0JCXN0cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7DQogICAgLQ0KICAg
IC0JCWNoaWxkX2NvdW50Kys7DQogICAgLQkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgLQkJCWlmIChtZW51X2lzX3Zpc2libGUoY2hp
bGQpICYmIGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkNCiAgICAtCQkJCWRlZl9tZW51ID0gY2hpbGQ7
DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSk7DQogICAgLQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgIC0JCQlzd2l0Y2gg
KHR5cGUpIHsNCiAgICAtCQkJY2FzZSBTX0JPT0xFQU46DQogICAgLQkJCQlpdGVtX21ha2UobWVu
dSwgJ3QnLCAiWyVjXSIsDQogICAgLQkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7DQogICAg
LQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCQkJc3dpdGNoICh2
YWwpIHsNCiAgICAtCQkJCWNhc2UgeWVzOg0KICAgIC0JCQkJCWNoID0gJyonOw0KICAgIC0JCQkJ
CWJyZWFrOw0KICAgIC0JCQkJY2FzZSBtb2Q6DQogICAgLQkJCQkJY2ggPSAnTSc7DQogICAgLQkJ
CQkJYnJlYWs7DQogICAgLQkJCQlkZWZhdWx0Og0KICAgIC0JCQkJCWNoID0gJyAnOw0KICAgIC0J
CQkJCWJyZWFrOw0KICAgIC0JCQkJfQ0KICAgIC0JCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIjwl
Yz4iLCBjaCk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCX0gZWxzZSB7DQog
ICAgLQkJCWl0ZW1fbWFrZShtZW51LCBkZWZfbWVudSA/ICd0JyA6ICc6JywgIiAgICIpOw0KICAg
IC0JCX0NCiAgICAtDQogICAgLQkJaXRlbV9hZGRfc3RyKCIlKmMlcyIsIGluZGVudCArIDEsDQog
ICAgLQkJCQknICcsIF8obWVudV9nZXRfcHJvbXB0KG1lbnUpKSk7DQogICAgLQkJaWYgKHZhbCA9
PSB5ZXMpIHsNCiAgICAtCQkJaWYgKGRlZl9tZW51KSB7DQogICAgLQkJCQlpdGVtX2FkZF9zdHIo
IiAoJXMpIiwNCiAgICAtCQkJCQlfKG1lbnVfZ2V0X3Byb21wdChkZWZfbWVudSkpKTsNCiAgICAt
CQkJCWl0ZW1fYWRkX3N0cigiICAtLS0+Iik7DQogICAgLQkJCQlpZiAoZGVmX21lbnUtPmxpc3Qp
IHsNCiAgICAtCQkJCQlpbmRlbnQgKz0gMjsNCiAgICAtCQkJCQlidWlsZF9jb25mKGRlZl9tZW51
KTsNCiAgICAtCQkJCQlpbmRlbnQgLT0gMjsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0J
CQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0JfSBlbHNlIHsNCiAgICAtCQlpZiAobWVudSA9PSBj
dXJyZW50X21lbnUpIHsNCiAgICAtCQkJaXRlbV9tYWtlKG1lbnUsICc6JywNCiAgICAtCQkJCSIt
LS0lKmMlcyIsIGluZGVudCArIDEsDQogICAgLQkJCQknICcsIF8obWVudV9nZXRfcHJvbXB0KG1l
bnUpKSk7DQogICAgLQkJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgLQkJfQ0KICAgIC0JCWNoaWxk
X2NvdW50Kys7DQogICAgLQkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAg
IC0JCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgew0KICAgIC0J
CQlpdGVtX21ha2UobWVudSwgJzonLCAiICAgIik7DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJ
c3dpdGNoICh0eXBlKSB7DQogICAgLQkJCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCQkJaWYgKHN5
bV9pc19jaGFuZ2FibGUoc3ltKSkNCiAgICAtCQkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAiWyVj
XSIsDQogICAgLQkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7DQogICAgLQkJCQllbHNlDQog
ICAgLQkJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIi0lYy0iLA0KICAgIC0JCQkJCQl2YWwgPT0g
bm8gPyAnICcgOiAnKicpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgU19UUklTVEFU
RToNCiAgICAtCQkJCXN3aXRjaCAodmFsKSB7DQogICAgLQkJCQljYXNlIHllczoNCiAgICAtCQkJ
CQljaCA9ICcqJzsNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJCWNhc2UgbW9kOg0KICAgIC0J
CQkJCWNoID0gJ00nOw0KICAgIC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJZGVmYXVsdDoNCiAgICAt
CQkJCQljaCA9ICcgJzsNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJCX0NCiAgICAtCQkJCWlm
IChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICAtCQkJCQlpZiAoc3ltLT5yZXZfZGVwLnRy
aSA9PSBtb2QpDQogICAgLQkJCQkJCWl0ZW1fbWFrZShtZW51LA0KICAgIC0JCQkJCQkJJ3QnLCAi
eyVjfSIsIGNoKTsNCiAgICAtCQkJCQllbHNlDQogICAgLQkJCQkJCWl0ZW1fbWFrZShtZW51LA0K
ICAgIC0JCQkJCQkJJ3QnLCAiPCVjPiIsIGNoKTsNCiAgICAtCQkJCX0gZWxzZQ0KICAgIC0JCQkJ
CWl0ZW1fbWFrZShtZW51LCAndCcsICItJWMtIiwgY2gpOw0KICAgIC0JCQkJYnJlYWs7DQogICAg
LQkJCWRlZmF1bHQ6DQogICAgLQkJCQl0bXAgPSAyICsgc3RybGVuKHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKHN5bSkpOw0KICAgIC0JCQkJaXRlbV9tYWtlKG1lbnUsICdzJywgIiAgICAoJXMpIiwNCiAg
ICAtCQkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7DQogICAgLQkJCQl0bXAgPSBpbmRl
bnQgLSB0bXAgKyA0Ow0KICAgIC0JCQkJaWYgKHRtcCA8IDApDQogICAgLQkJCQkJdG1wID0gMDsN
CiAgICAtCQkJCWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIHRtcCwgJyAnLA0KICAgIC0JCQkJCQlf
KG1lbnVfZ2V0X3Byb21wdChtZW51KSksDQogICAgLQkJCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkg
fHwNCiAgICAtCQkJCQkJICFzeW1faXNfY2hhbmdhYmxlKHN5bSkpID8gIiIgOg0KICAgIC0JCQkJ
CQlfKCIgKE5FVykiKSk7DQogICAgLQkJCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgIC0JCQl9DQog
ICAgLQkJfQ0KICAgIC0JCWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIGluZGVudCArIDEsICcgJywN
CiAgICAtCQkJCV8obWVudV9nZXRfcHJvbXB0KG1lbnUpKSwNCiAgICAtCQkJCShzeW1faGFzX3Zh
bHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPw0KICAgIC0JCQkJIiIgOiBfKCIg
KE5FVykiKSk7DQogICAgLQkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUg
PT0gUF9NRU5VKSB7DQogICAgLQkJCWl0ZW1fYWRkX3N0cigiICAlcyIsIG1lbnVfaXNfZW1wdHko
bWVudSkgPyAiLS0tLSIgOiAiLS0tPiIpOw0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAg
IC0JfQ0KICAgIC0NCiAgICAtY29uZl9jaGlsZHM6DQogICAgLQlpbmRlbnQgKz0gZG9pbnQ7DQog
ICAgLQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQp
DQogICAgLQkJYnVpbGRfY29uZihjaGlsZCk7DQogICAgLQlpbmRlbnQgLT0gZG9pbnQ7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHJlc2V0X21lbnUodm9pZCkNCiAgICAtew0KICAg
IC0JdW5wb3N0X21lbnUoY3Vyc2VzX21lbnUpOw0KICAgIC0JY2xlYW5faXRlbXMoKTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtLyogYWRqdXN0IHRoZSBtZW51IHRvIHNob3cgdGhpcyBpdGVtLg0KICAg
IC0gKiBwcmVmZXIgbm90IHRvIHNjcm9sbCB0aGUgbWVudSBpZiBwb3NzaWJsZSovDQogICAgLXN0
YXRpYyB2b2lkIGNlbnRlcl9pdGVtKGludCBzZWxlY3RlZF9pbmRleCwgaW50ICpsYXN0X3RvcF9y
b3cpDQogICAgLXsNCiAgICAtCWludCB0b3Byb3c7DQogICAgLQ0KICAgIC0Jc2V0X3RvcF9yb3co
Y3Vyc2VzX21lbnUsICpsYXN0X3RvcF9yb3cpOw0KICAgIC0JdG9wcm93ID0gdG9wX3JvdyhjdXJz
ZXNfbWVudSk7DQogICAgLQlpZiAoc2VsZWN0ZWRfaW5kZXggPCB0b3Byb3cgfHwNCiAgICAtCSAg
ICBzZWxlY3RlZF9pbmRleCA+PSB0b3Byb3crbXdpbl9tYXhfbGluZXMpIHsNCiAgICAtCQl0b3By
b3cgPSBtYXgoc2VsZWN0ZWRfaW5kZXgtbXdpbl9tYXhfbGluZXMvMiwgMCk7DQogICAgLQkJaWYg
KHRvcHJvdyA+PSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1td2luX21heF9saW5lcykNCiAgICAt
CQkJdG9wcm93ID0gaXRlbV9jb3VudChjdXJzZXNfbWVudSktbXdpbl9tYXhfbGluZXM7DQogICAg
LQkJc2V0X3RvcF9yb3coY3Vyc2VzX21lbnUsIHRvcHJvdyk7DQogICAgLQl9DQogICAgLQlzZXRf
Y3VycmVudF9pdGVtKGN1cnNlc19tZW51LA0KICAgIC0JCQljdXJzZXNfbWVudV9pdGVtc1tzZWxl
Y3RlZF9pbmRleF0pOw0KICAgIC0JKmxhc3RfdG9wX3JvdyA9IHRvcHJvdzsNCiAgICAtCXBvc3Rf
bWVudShjdXJzZXNfbWVudSk7DQogICAgLQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHJlc2V0X21l
bnUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSAqLw0KICAgIC1zdGF0aWMgdm9pZCBzaG93X21lbnUo
Y29uc3QgY2hhciAqcHJvbXB0LCBjb25zdCBjaGFyICppbnN0cnVjdGlvbnMsDQogICAgLQkJaW50
IHNlbGVjdGVkX2luZGV4LCBpbnQgKmxhc3RfdG9wX3JvdykNCiAgICAtew0KICAgIC0JaW50IG1h
eHgsIG1heHk7DQogICAgLQlXSU5ET1cgKm1lbnVfd2luZG93Ow0KICAgIC0NCiAgICAtCWN1cnJl
bnRfaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zOw0KICAgIC0NCiAgICAtCWNsZWFyKCk7DQog
ICAgLQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0dHJpYnV0ZXNbTk9STUFMXSk7DQog
ICAgLQlwcmludF9pbl9taWRkbGUoc3Rkc2NyLCAxLCAwLCBnZXRtYXh4KHN0ZHNjciksDQogICAg
LQkJCW1lbnVfYmFja3RpdGxlLA0KICAgIC0JCQlhdHRyaWJ1dGVzW01BSU5fSEVBRElOR10pOw0K
ICAgIC0NCiAgICAtCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tNQUlO
X01FTlVfQk9YXSk7DQogICAgLQlib3gobWFpbl93aW5kb3csIDAsIDApOw0KICAgIC0JKHZvaWQp
IHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9IRUFESU5HXSk7DQog
ICAgLQltdndwcmludHcobWFpbl93aW5kb3csIDAsIDMsICIgJXMgIiwgcHJvbXB0KTsNCiAgICAt
CSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tOT1JNQUxdKTsNCiAgICAt
DQogICAgLQlzZXRfbWVudV9pdGVtcyhjdXJzZXNfbWVudSwgY3Vyc2VzX21lbnVfaXRlbXMpOw0K
ICAgIC0NCiAgICAtCS8qIHBvc2l0aW9uIHRoZSBtZW51IGF0IHRoZSBtaWRkbGUgb2YgdGhlIHNj
cmVlbiAqLw0KICAgIC0Jc2NhbGVfbWVudShjdXJzZXNfbWVudSwgJm1heHksICZtYXh4KTsNCiAg
ICAtCW1heHggPSBtaW4obWF4eCwgbXdpbl9tYXhfY29scy0yKTsNCiAgICAtCW1heHkgPSBtd2lu
X21heF9saW5lczsNCiAgICAtCW1lbnVfd2luZG93ID0gZGVyd2luKG1haW5fd2luZG93LA0KICAg
IC0JCQltYXh5LA0KICAgIC0JCQltYXh4LA0KICAgIC0JCQkyLA0KICAgIC0JCQkobXdpbl9tYXhf
Y29scy1tYXh4KS8yKTsNCiAgICAtCWtleXBhZChtZW51X3dpbmRvdywgVFJVRSk7DQogICAgLQlz
ZXRfbWVudV93aW4oY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsNCiAgICAtCXNldF9tZW51X3N1
YihjdXJzZXNfbWVudSwgbWVudV93aW5kb3cpOw0KICAgIC0NCiAgICAtCS8qIG11c3QgcmVhc3Nl
cnQgdGhpcyBhZnRlciBjaGFuZ2luZyBpdGVtcywgb3RoZXJ3aXNlIHJldHVybnMgdG8gYQ0KICAg
IC0JICogZGVmYXVsdCBvZiAxNg0KICAgIC0JICovDQogICAgLQlzZXRfbWVudV9mb3JtYXQoY3Vy
c2VzX21lbnUsIG1heHksIDEpOw0KICAgIC0JY2VudGVyX2l0ZW0oc2VsZWN0ZWRfaW5kZXgsIGxh
c3RfdG9wX3Jvdyk7DQogICAgLQlzZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEp
Ow0KICAgIC0NCiAgICAtCXByaW50X2Z1bmN0aW9uX2xpbmUoKTsNCiAgICAtDQogICAgLQkvKiBQ
b3N0IHRoZSBtZW51ICovDQogICAgLQlwb3N0X21lbnUoY3Vyc2VzX21lbnUpOw0KICAgIC0JcmVm
cmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRp
YyB2b2lkIGFkal9tYXRjaF9kaXIobWF0Y2hfZiAqbWF0Y2hfZGlyZWN0aW9uKQ0KICAgIC17DQog
ICAgLQlpZiAoKm1hdGNoX2RpcmVjdGlvbiA9PSBGSU5EX05FWFRfTUFUQ0hfRE9XTikNCiAgICAt
CQkqbWF0Y2hfZGlyZWN0aW9uID0NCiAgICAtCQkJTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTjsN
CiAgICAtCWVsc2UgaWYgKCptYXRjaF9kaXJlY3Rpb24gPT0gRklORF9ORVhUX01BVENIX1VQKQ0K
ICAgIC0JCSptYXRjaF9kaXJlY3Rpb24gPQ0KICAgIC0JCQlNQVRDSF9USU5LRVJfUEFUVEVSTl9V
UDsNCiAgICAtCS8qIGVsc2UsIGRvIG5vIGNoYW5nZS4uICovDQogICAgLX0NCiAgICAtDQogICAg
LXN0cnVjdCBtYXRjaF9zdGF0ZQ0KICAgIC17DQogICAgLQlpbnQgaW5fc2VhcmNoOw0KICAgIC0J
bWF0Y2hfZiBtYXRjaF9kaXJlY3Rpb247DQogICAgLQljaGFyIHBhdHRlcm5bMjU2XTsNCiAgICAt
fTsNCiAgICAtDQogICAgLS8qIFJldHVybiAwIG1lYW5zIEkgaGF2ZSBoYW5kbGVkIHRoZSBrZXku
IEluIHN1Y2ggYSBjYXNlLCBhbnMgc2hvdWxkIGhvbGQgdGhlDQogICAgLSAqIGl0ZW0gdG8gY2Vu
dGVyLCBvciAtMSBvdGhlcndpc2UuDQogICAgLSAqIEVsc2UgcmV0dXJuIC0xIC4NCiAgICAtICov
DQogICAgLXN0YXRpYyBpbnQgZG9fbWF0Y2goaW50IGtleSwgc3RydWN0IG1hdGNoX3N0YXRlICpz
dGF0ZSwgaW50ICphbnMpDQogICAgLXsNCiAgICAtCWNoYXIgYyA9IChjaGFyKSBrZXk7DQogICAg
LQlpbnQgdGVybWluYXRlX3NlYXJjaCA9IDA7DQogICAgLQkqYW5zID0gLTE7DQogICAgLQlpZiAo
a2V5ID09ICcvJyB8fCAoc3RhdGUtPmluX3NlYXJjaCAmJiBrZXkgPT0gMjcpKSB7DQogICAgLQkJ
bW92ZSgwLCAwKTsNCiAgICAtCQlyZWZyZXNoKCk7DQogICAgLQkJY2xydG9lb2woKTsNCiAgICAt
CQlzdGF0ZS0+aW5fc2VhcmNoID0gMS1zdGF0ZS0+aW5fc2VhcmNoOw0KICAgIC0JCWJ6ZXJvKHN0
YXRlLT5wYXR0ZXJuLCBzaXplb2Yoc3RhdGUtPnBhdHRlcm4pKTsNCiAgICAtCQlzdGF0ZS0+bWF0
Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTjsNCiAgICAtCQlyZXR1cm4g
MDsNCiAgICAtCX0gZWxzZSBpZiAoIXN0YXRlLT5pbl9zZWFyY2gpDQogICAgLQkJcmV0dXJuIDE7
DQogICAgLQ0KICAgIC0JaWYgKGlzYWxudW0oYykgfHwgaXNncmFwaChjKSB8fCBjID09ICcgJykg
ew0KICAgIC0JCXN0YXRlLT5wYXR0ZXJuW3N0cmxlbihzdGF0ZS0+cGF0dGVybildID0gYzsNCiAg
ICAtCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4pXSA9ICdcMCc7DQogICAg
LQkJYWRqX21hdGNoX2Rpcigmc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgLQkJKmFucyA9
IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLA0KICAgIC0JCQkJc3RhdGUtPm1hdGNoX2Rp
cmVjdGlvbik7DQogICAgLQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTikgew0KICAgIC0JCXN0
YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRfTUFUQ0hfRE9XTjsNCiAgICAtCQkqYW5z
ID0gZ2V0X21leHRfbWF0Y2goc3RhdGUtPnBhdHRlcm4sDQogICAgLQkJCQlzdGF0ZS0+bWF0Y2hf
ZGlyZWN0aW9uKTsNCiAgICAtCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9VUCkgew0KICAgIC0JCXN0
YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRfTUFUQ0hfVVA7DQogICAgLQkJKmFucyA9
IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLA0KICAgIC0JCQkJc3RhdGUtPm1hdGNoX2Rp
cmVjdGlvbik7DQogICAgLQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfQkFDS1NQQUNFIHx8IGtleSA9
PSAxMjcpIHsNCiAgICAtCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4pLTFd
ID0gJ1wwJzsNCiAgICAtCQlhZGpfbWF0Y2hfZGlyKCZzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsN
CiAgICAtCX0gZWxzZQ0KICAgIC0JCXRlcm1pbmF0ZV9zZWFyY2ggPSAxOw0KICAgIC0NCiAgICAt
CWlmICh0ZXJtaW5hdGVfc2VhcmNoKSB7DQogICAgLQkJc3RhdGUtPmluX3NlYXJjaCA9IDA7DQog
ICAgLQkJYnplcm8oc3RhdGUtPnBhdHRlcm4sIHNpemVvZihzdGF0ZS0+cGF0dGVybikpOw0KICAg
IC0JCW1vdmUoMCwgMCk7DQogICAgLQkJcmVmcmVzaCgpOw0KICAgIC0JCWNscnRvZW9sKCk7DQog
ICAgLQkJcmV0dXJuIC0xOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAt
DQogICAgLXN0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAt
CXN0cnVjdCBtZW51ICpzdWJtZW51ID0gMDsNCiAgICAtCWNvbnN0IGNoYXIgKnByb21wdCA9IG1l
bnVfZ2V0X3Byb21wdChtZW51KTsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCWlu
dCByZXM7DQogICAgLQlpbnQgY3VycmVudF9pbmRleCA9IDA7DQogICAgLQlpbnQgbGFzdF90b3Bf
cm93ID0gMDsNCiAgICAtCXN0cnVjdCBtYXRjaF9zdGF0ZSBtYXRjaF9zdGF0ZSA9IHsNCiAgICAt
CQkuaW5fc2VhcmNoID0gMCwNCiAgICAtCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VS
X1BBVFRFUk5fRE9XTiwNCiAgICAtCQkucGF0dGVybiA9ICIiLA0KICAgIC0JfTsNCiAgICAtDQog
ICAgLQl3aGlsZSAoIWdsb2JhbF9leGl0KSB7DQogICAgLQkJcmVzZXRfbWVudSgpOw0KICAgIC0J
CWN1cnJlbnRfbWVudSA9IG1lbnU7DQogICAgLQkJYnVpbGRfY29uZihtZW51KTsNCiAgICAtCQlp
ZiAoIWNoaWxkX2NvdW50KQ0KICAgIC0JCQlicmVhazsNCiAgICAtDQogICAgLQkJc2hvd19tZW51
KHByb21wdCA/IF8ocHJvbXB0KSA6IF8oIk1haW4gTWVudSIpLA0KICAgIC0JCQkJXyhtZW51X2lu
c3RydWN0aW9ucyksDQogICAgLQkJCQljdXJyZW50X2luZGV4LCAmbGFzdF90b3Bfcm93KTsNCiAg
ICAtCQlrZXlwYWQoKG1lbnVfd2luKGN1cnNlc19tZW51KSksIFRSVUUpOw0KICAgIC0JCXdoaWxl
ICghZ2xvYmFsX2V4aXQpIHsNCiAgICAtCQkJaWYgKG1hdGNoX3N0YXRlLmluX3NlYXJjaCkgew0K
ICAgIC0JCQkJbXZwcmludHcoMCwgMCwNCiAgICAtCQkJCQkic2VhcmNoaW5nOiAlcyIsIG1hdGNo
X3N0YXRlLnBhdHRlcm4pOw0KICAgIC0JCQkJY2xydG9lb2woKTsNCiAgICAtCQkJfQ0KICAgIC0J
CQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICAtCQkJcmVzID0gd2dldGNo
KG1lbnVfd2luKGN1cnNlc19tZW51KSk7DQogICAgLQkJCWlmICghcmVzKQ0KICAgIC0JCQkJYnJl
YWs7DQogICAgLQkJCWlmIChkb19tYXRjaChyZXMsICZtYXRjaF9zdGF0ZSwgJmN1cnJlbnRfaW5k
ZXgpID09IDApIHsNCiAgICAtCQkJCWlmIChjdXJyZW50X2luZGV4ICE9IC0xKQ0KICAgIC0JCQkJ
CWNlbnRlcl9pdGVtKGN1cnJlbnRfaW5kZXgsDQogICAgLQkJCQkJCSAgICAmbGFzdF90b3Bfcm93
KTsNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQl9DQogICAgLQkJCWlmIChwcm9jZXNzX3Nw
ZWNpYWxfa2V5cygmcmVzLA0KICAgIC0JCQkJCQkoc3RydWN0IG1lbnUgKikgaXRlbV9kYXRhKCkp
KQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCXN3aXRjaCAocmVzKSB7DQogICAgLQkJCWNhc2Ug
S0VZX0RPV046DQogICAgLQkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRF
TSk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSBLRVlfVVA6DQogICAgLQkJCQltZW51
X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1VQX0lURU0pOw0KICAgIC0JCQkJYnJlYWs7DQogICAg
LQkJCWNhc2UgS0VZX05QQUdFOg0KICAgIC0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJF
UV9TQ1JfRFBBR0UpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgS0VZX1BQQUdFOg0K
ICAgIC0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOw0KICAgIC0J
CQkJYnJlYWs7DQogICAgLQkJCWNhc2UgS0VZX0hPTUU6DQogICAgLQkJCQltZW51X2RyaXZlcihj
dXJzZXNfbWVudSwgUkVRX0ZJUlNUX0lURU0pOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNh
c2UgS0VZX0VORDoNCiAgICAtCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfTEFTVF9J
VEVNKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlICdoJzoNCiAgICAtCQkJY2FzZSAn
Pyc6DQogICAgLQkJCQlzaG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKTsNCiAg
ICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09
IDI3IHx8DQogICAgLQkJCQlyZXMgPT0gMzIgfHwgcmVzID09ICduJyB8fCByZXMgPT0gJ3knIHx8
DQogICAgLQkJCQlyZXMgPT0gS0VZX0xFRlQgfHwgcmVzID09IEtFWV9SSUdIVCB8fA0KICAgIC0J
CQkJcmVzID09ICdtJykNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQlyZWZyZXNoX2FsbF93aW5k
b3dzKG1haW5fd2luZG93KTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCXJlZnJlc2hfYWxsX3dp
bmRvd3MobWFpbl93aW5kb3cpOw0KICAgIC0JCS8qIGlmIEVTQyBvciBsZWZ0Ki8NCiAgICAtCQlp
ZiAocmVzID09IDI3IHx8IChtZW51ICE9ICZyb290bWVudSAmJiByZXMgPT0gS0VZX0xFRlQpKQ0K
ICAgIC0JCQlicmVhazsNCiAgICAtDQogICAgLQkJLyogcmVtZW1iZXIgbG9jYXRpb24gaW4gdGhl
IG1lbnUgKi8NCiAgICAtCQlsYXN0X3RvcF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsNCiAg
ICAtCQljdXJyZW50X2luZGV4ID0gY3Vyc2VzX2l0ZW1faW5kZXgoKTsNCiAgICAtDQogICAgLQkJ
aWYgKCFpdGVtX3RhZygpKQ0KICAgIC0JCQljb250aW51ZTsNCiAgICAtDQogICAgLQkJc3VibWVu
dSA9IChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKTsNCiAgICAtCQlpZiAoIXN1Ym1lbnUgfHwg
IW1lbnVfaXNfdmlzaWJsZShzdWJtZW51KSkNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJc3lt
ID0gc3VibWVudS0+c3ltOw0KICAgIC0NCiAgICAtCQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCWNh
c2UgJyAnOg0KICAgIC0JCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkNCiAgICAtCQkJCXN5bV90b2dn
bGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICAtCQkJZWxzZSBpZiAoaXRlbV9pc190YWcoJ20n
KSkNCiAgICAtCQkJCWNvbmYoc3VibWVudSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2Ug
S0VZX1JJR0hUOg0KICAgIC0JCWNhc2UgMTA6IC8qIEVOVEVSIFdBUyBQUkVTU0VEICovDQogICAg
LQkJCXN3aXRjaCAoaXRlbV90YWcoKSkgew0KICAgIC0JCQljYXNlICdtJzoNCiAgICAtCQkJCWlm
IChzaW5nbGVfbWVudV9tb2RlKQ0KICAgIC0JCQkJCXN1Ym1lbnUtPmRhdGEgPQ0KICAgIC0JCQkJ
CQkodm9pZCAqKSAobG9uZykgIXN1Ym1lbnUtPmRhdGE7DQogICAgLQkJCQllbHNlDQogICAgLQkJ
CQkJY29uZihzdWJtZW51KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlICd0JzoNCiAg
ICAtCQkJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkgJiYNCiAgICAtCQkJCSAgICBzeW1fZ2V0X3Ry
aXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQ0KICAgIC0JCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUp
Ow0KICAgIC0JCQkJZWxzZSBpZiAoc3VibWVudS0+cHJvbXB0ICYmDQogICAgLQkJCQkJIHN1Ym1l
bnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpDQogICAgLQkJCQkJY29uZihzdWJtZW51KTsNCiAg
ICAtCQkJCWVsc2UgaWYgKHJlcyA9PSAxMCkNCiAgICAtCQkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRl
X3ZhbHVlKHN5bSk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSAncyc6DQogICAgLQkJ
CQljb25mX3N0cmluZyhzdWJtZW51KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgJ3knOg0KICAgIC0JCQlpZiAoaXRlbV9pc190YWcoJ3Qn
KSkgew0KICAgIC0JCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQ0KICAg
IC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBt
b2QpKQ0KICAgIC0JCQkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csIHNldG1vZF90ZXh0LCAwKTsN
CiAgICAtCQkJfQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICduJzoNCiAgICAtCQkJaWYg
KGl0ZW1faXNfdGFnKCd0JykpDQogICAgLQkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwg
bm8pOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICdtJzoNCiAgICAtCQkJaWYgKGl0ZW1f
aXNfdGFnKCd0JykpDQogICAgLQkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC1z
dGF0aWMgdm9pZCBjb25mX21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqZm10LCB2YV9saXN0
IGFwKQ0KICAgIC17DQogICAgLQljaGFyIGJ1ZlsxMDI0XTsNCiAgICAtDQogICAgLQl2c25wcmlu
dGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7DQogICAgLQlidG5fZGlhbG9nKG1haW5fd2lu
ZG93LCBidWYsIDEsICI8T0s+Iik7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHNo
b3dfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IGdzdHIgaGVs
cDsNCiAgICAtDQogICAgLQlpZiAoIW1lbnUpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAt
CWhlbHAgPSBzdHJfbmV3KCk7DQogICAgLQltZW51X2dldF9leHRfaGVscChtZW51LCAmaGVscCk7
DQogICAgLQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csIF8obWVudV9nZXRfcHJvbXB0KG1l
bnUpKSwgc3RyX2dldCgmaGVscCkpOw0KICAgIC0Jc3RyX2ZyZWUoJmhlbHApOw0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSkNCiAg
ICAtew0KICAgIC0JY29uc3QgY2hhciAqcHJvbXB0ID0gXyhtZW51X2dldF9wcm9tcHQobWVudSkp
Ow0KICAgIC0Jc3RydWN0IG1lbnUgKmNoaWxkID0gMDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKmFj
dGl2ZTsNCiAgICAtCWludCBzZWxlY3RlZF9pbmRleCA9IDA7DQogICAgLQlpbnQgbGFzdF90b3Bf
cm93ID0gMDsNCiAgICAtCWludCByZXMsIGkgPSAwOw0KICAgIC0Jc3RydWN0IG1hdGNoX3N0YXRl
IG1hdGNoX3N0YXRlID0gew0KICAgIC0JCS5pbl9zZWFyY2ggPSAwLA0KICAgIC0JCS5tYXRjaF9k
aXJlY3Rpb24gPSBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLA0KICAgIC0JCS5wYXR0ZXJuID0g
IiIsDQogICAgLQl9Ow0KICAgIC0NCiAgICAtCWFjdGl2ZSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVl
KG1lbnUtPnN5bSk7DQogICAgLQkvKiB0aGlzIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gdGhl
IGNvbmYoKSBmdW5jdGlvbi4gKi8NCiAgICAtCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsNCiAgICAt
CQlyZXNldF9tZW51KCk7DQogICAgLQ0KICAgIC0JCWZvciAoaSA9IDAsIGNoaWxkID0gbWVudS0+
bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICAtCQkJaWYgKCFzaG93X2Fs
bF9pdGVtcyAmJiAhbWVudV9pc192aXNpYmxlKGNoaWxkKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0K
ICAgIC0NCiAgICAtCQkJaWYgKGNoaWxkLT5zeW0gPT0gc3ltX2dldF9jaG9pY2VfdmFsdWUobWVu
dS0+c3ltKSkNCiAgICAtCQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiPFg+ICVzIiwNCiAgICAt
CQkJCQkJXyhtZW51X2dldF9wcm9tcHQoY2hpbGQpKSk7DQogICAgLQkJCWVsc2UgaWYgKGNoaWxk
LT5zeW0pDQogICAgLQkJCQlpdGVtX21ha2UoY2hpbGQsICc6JywgIiAgICAlcyIsDQogICAgLQkJ
CQkJCV8obWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQlp
dGVtX21ha2UoY2hpbGQsICc6JywgIioqKiAlcyAqKioiLA0KICAgIC0JCQkJCQlfKG1lbnVfZ2V0
X3Byb21wdChjaGlsZCkpKTsNCiAgICAtDQogICAgLQkJCWlmIChjaGlsZC0+c3ltID09IGFjdGl2
ZSl7DQogICAgLQkJCQlsYXN0X3RvcF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsNCiAgICAt
CQkJCXNlbGVjdGVkX2luZGV4ID0gaTsNCiAgICAtCQkJfQ0KICAgIC0JCQlpKys7DQogICAgLQkJ
fQ0KICAgIC0JCXNob3dfbWVudShwcm9tcHQgPyBfKHByb21wdCkgOiBfKCJDaG9pY2UgTWVudSIp
LA0KICAgIC0JCQkJXyhyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zKSwNCiAgICAtCQkJCXNlbGVjdGVk
X2luZGV4LA0KICAgIC0JCQkJJmxhc3RfdG9wX3Jvdyk7DQogICAgLQkJd2hpbGUgKCFnbG9iYWxf
ZXhpdCkgew0KICAgIC0JCQlpZiAobWF0Y2hfc3RhdGUuaW5fc2VhcmNoKSB7DQogICAgLQkJCQlt
dnByaW50dygwLCAwLCAic2VhcmNoaW5nOiAlcyIsDQogICAgLQkJCQkJIG1hdGNoX3N0YXRlLnBh
dHRlcm4pOw0KICAgIC0JCQkJY2xydG9lb2woKTsNCiAgICAtCQkJfQ0KICAgIC0JCQlyZWZyZXNo
X2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICAtCQkJcmVzID0gd2dldGNoKG1lbnVfd2lu
KGN1cnNlc19tZW51KSk7DQogICAgLQkJCWlmICghcmVzKQ0KICAgIC0JCQkJYnJlYWs7DQogICAg
LQkJCWlmIChkb19tYXRjaChyZXMsICZtYXRjaF9zdGF0ZSwgJnNlbGVjdGVkX2luZGV4KSA9PSAw
KSB7DQogICAgLQkJCQlpZiAoc2VsZWN0ZWRfaW5kZXggIT0gLTEpDQogICAgLQkJCQkJY2VudGVy
X2l0ZW0oc2VsZWN0ZWRfaW5kZXgsDQogICAgLQkJCQkJCSAgICAmbGFzdF90b3Bfcm93KTsNCiAg
ICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQl9DQogICAgLQkJCWlmIChwcm9jZXNzX3NwZWNpYWxf
a2V5cygNCiAgICAtCQkJCQkJJnJlcywNCiAgICAtCQkJCQkJKHN0cnVjdCBtZW51ICopIGl0ZW1f
ZGF0YSgpKSkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQlzd2l0Y2ggKHJlcykgew0KICAgIC0J
CQljYXNlIEtFWV9ET1dOOg0KICAgIC0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9E
T1dOX0lURU0pOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgS0VZX1VQOg0KICAgIC0J
CQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9VUF9JVEVNKTsNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0JCQljYXNlIEtFWV9OUEFHRToNCiAgICAtCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19t
ZW51LCBSRVFfU0NSX0RQQUdFKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9Q
UEFHRToNCiAgICAtCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfU0NSX1VQQUdFKTsN
CiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9IT01FOg0KICAgIC0JCQkJbWVudV9k
cml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9GSVJTVF9JVEVNKTsNCiAgICAtCQkJCWJyZWFrOw0KICAg
IC0JCQljYXNlIEtFWV9FTkQ6DQogICAgLQkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVR
X0xBU1RfSVRFTSk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSAnaCc6DQogICAgLQkJ
CWNhc2UgJz8nOg0KICAgIC0JCQkJc2hvd19oZWxwKChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEo
KSk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCQlpZiAocmVzID09IDEwIHx8
IHJlcyA9PSAyNyB8fCByZXMgPT0gJyAnIHx8DQogICAgLQkJCQkJcmVzID09IEtFWV9MRUZUKXsN
CiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCXJlZnJlc2hfYWxsX3dpbmRvd3Mo
bWFpbl93aW5kb3cpOw0KICAgIC0JCX0NCiAgICAtCQkvKiBpZiBFU0Mgb3IgbGVmdCAqLw0KICAg
IC0JCWlmIChyZXMgPT0gMjcgfHwgcmVzID09IEtFWV9MRUZUKQ0KICAgIC0JCQlicmVhazsNCiAg
ICAtDQogICAgLQkJY2hpbGQgPSBpdGVtX2RhdGEoKTsNCiAgICAtCQlpZiAoIWNoaWxkIHx8ICFt
ZW51X2lzX3Zpc2libGUoY2hpbGQpIHx8ICFjaGlsZC0+c3ltKQ0KICAgIC0JCQljb250aW51ZTsN
CiAgICAtCQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCWNhc2UgJyAnOg0KICAgIC0JCWNhc2UgIDEw
Og0KICAgIC0JCWNhc2UgS0VZX1JJR0hUOg0KICAgIC0JCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVl
KGNoaWxkLT5zeW0sIHllcyk7DQogICAgLQkJCXJldHVybjsNCiAgICAtCQljYXNlICdoJzoNCiAg
ICAtCQljYXNlICc/JzoNCiAgICAtCQkJc2hvd19oZWxwKGNoaWxkKTsNCiAgICAtCQkJYWN0aXZl
ID0gY2hpbGQtPnN5bTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRVhJVDoNCiAg
ICAtCQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3Rh
dGljIHZvaWQgY29uZl9zdHJpbmcoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCWNv
bnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsNCiAgICAtDQogICAgLQl3
aGlsZSAoMSkgew0KICAgIC0JCWludCByZXM7DQogICAgLQkJY29uc3QgY2hhciAqaGVhZGluZzsN
CiAgICAtDQogICAgLQkJc3dpdGNoIChzeW1fZ2V0X3R5cGUobWVudS0+c3ltKSkgew0KICAgIC0J
CWNhc2UgU19JTlQ6DQogICAgLQkJCWhlYWRpbmcgPSBfKGlucHV0Ym94X2luc3RydWN0aW9uc19p
bnQpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIFNfSEVYOg0KICAgIC0JCQloZWFkaW5n
ID0gXyhpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
Y2FzZSBTX1NUUklORzoNCiAgICAtCQkJaGVhZGluZyA9IF8oaW5wdXRib3hfaW5zdHJ1Y3Rpb25z
X3N0cmluZyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCWhlYWRp
bmcgPSBfKCJJbnRlcm5hbCBuY29uZiBlcnJvciEiKTsNCiAgICAtCQl9DQogICAgLQkJcmVzID0g
ZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LA0KICAgIC0JCQkJcHJvbXB0ID8gXyhwcm9tcHQp
IDogXygiTWFpbiBNZW51IiksDQogICAgLQkJCQloZWFkaW5nLA0KICAgIC0JCQkJc3ltX2dldF9z
dHJpbmdfdmFsdWUobWVudS0+c3ltKSwNCiAgICAtCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0LA0K
ICAgIC0JCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsNCiAgICAtCQlzd2l0Y2ggKHJlcykg
ew0KICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJaWYgKHN5bV9zZXRfc3RyaW5nX3ZhbHVlKG1lbnUt
PnN5bSwNCiAgICAtCQkJCQkJZGlhbG9nX2lucHV0X3Jlc3VsdCkpDQogICAgLQkJCQlyZXR1cm47
DQogICAgLQkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csDQogICAgLQkJCQlfKCJZb3UgaGF2ZSBt
YWRlIGFuIGludmFsaWQgZW50cnkuIiksIDApOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNl
IDE6DQogICAgLQkJCXNob3dfaGVscChtZW51KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2Fz
ZSBLRVlfRVhJVDoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0K
ICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpDQogICAgLXsNCiAgICAtCXdo
aWxlICgxKSB7DQogICAgLQkJaW50IHJlczsNCiAgICAtCQlyZXMgPSBkaWFsb2dfaW5wdXRib3go
bWFpbl93aW5kb3csDQogICAgLQkJCQlOVUxMLCBsb2FkX2NvbmZpZ190ZXh0LA0KICAgIC0JCQkJ
ZmlsZW5hbWUsDQogICAgLQkJCQkmZGlhbG9nX2lucHV0X3Jlc3VsdCwNCiAgICAtCQkJCSZkaWFs
b2dfaW5wdXRfcmVzdWx0X2xlbik7DQogICAgLQkJc3dpdGNoIChyZXMpIHsNCiAgICAtCQljYXNl
IDA6DQogICAgLQkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkNCiAgICAtCQkJCXJldHVy
bjsNCiAgICAtCQkJaWYgKCFjb25mX3JlYWQoZGlhbG9nX2lucHV0X3Jlc3VsdCkpIHsNCiAgICAt
CQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7DQogICAgLQkJCQlz
eW1fc2V0X2NoYW5nZV9jb3VudCgxKTsNCiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJfQ0KICAg
IC0JCQlidG5fZGlhbG9nKG1haW5fd2luZG93LCBfKCJGaWxlIGRvZXMgbm90IGV4aXN0ISIpLCAw
KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAxOg0KICAgIC0JCQlzaG93X3Njcm9sbF93
aW4obWFpbl93aW5kb3csDQogICAgLQkJCQkJXygiTG9hZCBBbHRlcm5hdGUgQ29uZmlndXJhdGlv
biIpLA0KICAgIC0JCQkJCWxvYWRfY29uZmlnX2hlbHApOw0KICAgIC0JCQlicmVhazsNCiAgICAt
CQljYXNlIEtFWV9FWElUOg0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0JfQ0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCkNCiAgICAtew0KICAg
IC0Jd2hpbGUgKDEpIHsNCiAgICAtCQlpbnQgcmVzOw0KICAgIC0JCXJlcyA9IGRpYWxvZ19pbnB1
dGJveChtYWluX3dpbmRvdywNCiAgICAtCQkJCU5VTEwsIHNhdmVfY29uZmlnX3RleHQsDQogICAg
LQkJCQlmaWxlbmFtZSwNCiAgICAtCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0LA0KICAgIC0JCQkJ
JmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsNCiAgICAtCQlzd2l0Y2ggKHJlcykgew0KICAgIC0J
CWNhc2UgMDoNCiAgICAtCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQ0KICAgIC0JCQkJ
cmV0dXJuOw0KICAgIC0JCQlyZXMgPSBjb25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1bHQpOw0K
ICAgIC0JCQlpZiAoIXJlcykgew0KICAgIC0JCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2df
aW5wdXRfcmVzdWx0KTsNCiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJfQ0KICAgIC0JCQlidG5f
ZGlhbG9nKG1haW5fd2luZG93LCBfKCJDYW4ndCBjcmVhdGUgZmlsZSEgIg0KICAgIC0JCQkJIlBy
b2JhYmx5IGEgbm9uZXhpc3RlbnQgZGlyZWN0b3J5LiIpLA0KICAgIC0JCQkJMSwgIjxPSz4iKTsN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAxOg0KICAgIC0JCQlzaG93X3Njcm9sbF93aW4o
bWFpbl93aW5kb3csDQogICAgLQkJCQlfKCJTYXZlIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiks
DQogICAgLQkJCQlzYXZlX2NvbmZpZ19oZWxwKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2Fz
ZSBLRVlfRVhJVDoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0K
ICAgIC0NCiAgICAtdm9pZCBzZXR1cF93aW5kb3dzKHZvaWQpDQogICAgLXsNCiAgICAtCWludCBs
aW5lcywgY29sdW1uczsNCiAgICAtDQogICAgLQlnZXRtYXh5eChzdGRzY3IsIGxpbmVzLCBjb2x1
bW5zKTsNCiAgICAtDQogICAgLQlpZiAobWFpbl93aW5kb3cgIT0gTlVMTCkNCiAgICAtCQlkZWx3
aW4obWFpbl93aW5kb3cpOw0KICAgIC0NCiAgICAtCS8qIHNldCB1cCB0aGUgbWVudSBhbmQgbWVu
dSB3aW5kb3cgKi8NCiAgICAtCW1haW5fd2luZG93ID0gbmV3d2luKGxpbmVzLTIsIGNvbHVtbnMt
MiwgMiwgMSk7DQogICAgLQlrZXlwYWQobWFpbl93aW5kb3csIFRSVUUpOw0KICAgIC0JbXdpbl9t
YXhfbGluZXMgPSBsaW5lcy03Ow0KICAgIC0JbXdpbl9tYXhfY29scyA9IGNvbHVtbnMtNjsNCiAg
ICAtDQogICAgLQkvKiBwYW5lbHMgb3JkZXIgaXMgZnJvbSBib3R0b20gdG8gdG9wICovDQogICAg
LQluZXdfcGFuZWwobWFpbl93aW5kb3cpOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgbWFpbihp
bnQgYWMsIGNoYXIgKiphdikNCiAgICAtew0KICAgIC0JaW50IGxpbmVzLCBjb2x1bW5zOw0KICAg
IC0JY2hhciAqbW9kZTsNCiAgICAtDQogICAgLQlzZXRsb2NhbGUoTENfQUxMLCAiIik7DQogICAg
LQliaW5kdGV4dGRvbWFpbihQQUNLQUdFLCBMT0NBTEVESVIpOw0KICAgIC0JdGV4dGRvbWFpbihQ
QUNLQUdFKTsNCiAgICAtDQogICAgLQljb25mX3BhcnNlKGF2WzFdKTsNCiAgICAtCWNvbmZfcmVh
ZChOVUxMKTsNCiAgICAtDQogICAgLQltb2RlID0gZ2V0ZW52KCJOQ09ORklHX01PREUiKTsNCiAg
ICAtCWlmIChtb2RlKSB7DQogICAgLQkJaWYgKCFzdHJjYXNlY21wKG1vZGUsICJzaW5nbGVfbWVu
dSIpKQ0KICAgIC0JCQlzaW5nbGVfbWVudV9tb2RlID0gMTsNCiAgICAtCX0NCiAgICAtDQogICAg
LQkvKiBJbml0aWFsaXplIGN1cnNlcyAqLw0KICAgIC0JaW5pdHNjcigpOw0KICAgIC0JLyogc2V0
IGNvbG9yIHRoZW1lICovDQogICAgLQlzZXRfY29sb3JzKCk7DQogICAgLQ0KICAgIC0JY2JyZWFr
KCk7DQogICAgLQlub2VjaG8oKTsNCiAgICAtCWtleXBhZChzdGRzY3IsIFRSVUUpOw0KICAgIC0J
Y3Vyc19zZXQoMCk7DQogICAgLQ0KICAgIC0JZ2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1u
cyk7DQogICAgLQlpZiAoY29sdW1ucyA8IDc1IHx8IGxpbmVzIDwgMjApIHsNCiAgICAtCQllbmR3
aW4oKTsNCiAgICAtCQlwcmludGYoIllvdXIgdGVybWluYWwgc2hvdWxkIGhhdmUgYXQgIg0KICAg
IC0JCQkibGVhc3QgMjAgbGluZXMgYW5kIDc1IGNvbHVtbnNcbiIpOw0KICAgIC0JCXJldHVybiAx
Ow0KICAgIC0JfQ0KICAgIC0NCiAgICAtCW5vdGltZW91dChzdGRzY3IsIEZBTFNFKTsNCiAgICAt
I2lmIE5DVVJTRVNfUkVFTlRSQU5UDQogICAgLQlzZXRfZXNjZGVsYXkoMSk7DQogICAgLSNlbHNl
DQogICAgLQlFU0NERUxBWSA9IDE7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtCS8qIHNldCBi
dG5zIG1lbnUgKi8NCiAgICAtCWN1cnNlc19tZW51ID0gbmV3X21lbnUoY3Vyc2VzX21lbnVfaXRl
bXMpOw0KICAgIC0JbWVudV9vcHRzX29mZihjdXJzZXNfbWVudSwgT19TSE9XREVTQyk7DQogICAg
LQltZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fU0hPV01BVENIKTsNCiAgICAtCW1lbnVfb3B0
c19vbihjdXJzZXNfbWVudSwgT19PTkVWQUxVRSk7DQogICAgLQltZW51X29wdHNfb24oY3Vyc2Vz
X21lbnUsIE9fTk9OQ1lDTElDKTsNCiAgICAtCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19J
R05PUkVDQVNFKTsNCiAgICAtCXNldF9tZW51X21hcmsoY3Vyc2VzX21lbnUsICIgIik7DQogICAg
LQlzZXRfbWVudV9mb3JlKGN1cnNlc19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9GT1JFXSk7
DQogICAgLQlzZXRfbWVudV9iYWNrKGN1cnNlc19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9C
QUNLXSk7DQogICAgLQlzZXRfbWVudV9ncmV5KGN1cnNlc19tZW51LCBhdHRyaWJ1dGVzW01BSU5f
TUVOVV9HUkVZXSk7DQogICAgLQ0KICAgIC0Jc2V0X2NvbmZpZ19maWxlbmFtZShjb25mX2dldF9j
b25maWduYW1lKCkpOw0KICAgIC0Jc2V0dXBfd2luZG93cygpOw0KICAgIC0NCiAgICAtCS8qIGNo
ZWNrIGZvciBLRVlfRlVOQygxKSAqLw0KICAgIC0JaWYgKGhhc19rZXkoS0VZX0YoMSkpID09IEZB
TFNFKSB7DQogICAgLQkJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LA0KICAgIC0JCQkJXygi
SW5zdHJ1Y3Rpb25zIiksDQogICAgLQkJCQlfKG1lbnVfbm9fZl9pbnN0cnVjdGlvbnMpKTsNCiAg
ICAtCX0NCiAgICAtDQogICAgLQljb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKGNvbmZfbWVzc2Fn
ZV9jYWxsYmFjayk7DQogICAgLQkvKiBkbyB0aGUgd29yayAqLw0KICAgIC0Jd2hpbGUgKCFnbG9i
YWxfZXhpdCkgew0KICAgIC0JCWNvbmYoJnJvb3RtZW51KTsNCiAgICAtCQlpZiAoIWdsb2JhbF9l
eGl0ICYmIGRvX2V4aXQoKSA9PSAwKQ0KICAgIC0JCQlicmVhazsNCiAgICAtCX0NCiAgICAtCS8q
IG9rLCB3ZSBhcmUgZG9uZSAqLw0KICAgIC0JdW5wb3N0X21lbnUoY3Vyc2VzX21lbnUpOw0KICAg
IC0JZnJlZV9tZW51KGN1cnNlc19tZW51KTsNCiAgICAtCWRlbHdpbihtYWluX3dpbmRvdyk7DQog
ICAgLQljbGVhcigpOw0KICAgIC0JcmVmcmVzaCgpOw0KICAgIC0JZW5kd2luKCk7DQogICAgLQly
ZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
L25jb25mLmd1aS5jIGIvc3VwcG9ydC9rY29uZmlnL25jb25mLmd1aS5jDQogICAgZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggODI3NWYwZS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1
cHBvcnQva2NvbmZpZy9uY29uZi5ndWkuYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw2
NTYgKzAsMCBAQA0KICAgIC0vKg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlyIFR6YWNo
YXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT8NCiAgICAtICogUmVsZWFzZWQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAgLSAqDQogICAgLSAqIERlcml2ZWQgZnJvbSBt
ZW51Y29uZmlnLg0KICAgIC0gKg0KICAgIC0gKi8NCiAgICAtI2luY2x1ZGUgIm5jb25mLmgiDQog
ICAgLQ0KICAgIC0vKiBhIGxpc3Qgb2YgYWxsIHRoZSBkaWZmZXJlbnQgd2lkZ2V0cyB3ZSB1c2Ug
Ki8NCiAgICAtYXR0cmlidXRlc190IGF0dHJpYnV0ZXNbQVRUUl9NQVgrMV0gPSB7MH07DQogICAg
LQ0KICAgIC0vKiBhdmFpbGFibGUgY29sb3JzOg0KICAgIC0gICBDT0xPUl9CTEFDSyAgIDANCiAg
ICAtICAgQ09MT1JfUkVEICAgICAxDQogICAgLSAgIENPTE9SX0dSRUVOICAgMg0KICAgIC0gICBD
T0xPUl9ZRUxMT1cgIDMNCiAgICAtICAgQ09MT1JfQkxVRSAgICA0DQogICAgLSAgIENPTE9SX01B
R0VOVEEgNQ0KICAgIC0gICBDT0xPUl9DWUFOICAgIDYNCiAgICAtICAgQ09MT1JfV0hJVEUgICA3
DQogICAgLSAgICovDQogICAgLXN0YXRpYyB2b2lkIHNldF9ub3JtYWxfY29sb3JzKHZvaWQpDQog
ICAgLXsNCiAgICAtCWluaXRfcGFpcihOT1JNQUwsIC0xLCAtMSk7DQogICAgLQlpbml0X3BhaXIo
TUFJTl9IRUFESU5HLCBDT0xPUl9NQUdFTlRBLCAtMSk7DQogICAgLQ0KICAgIC0JLyogRk9SRSBp
cyBmb3IgdGhlIHNlbGVjdGVkIGl0ZW0gKi8NCiAgICAtCWluaXRfcGFpcihNQUlOX01FTlVfRk9S
RSwgLTEsIC0xKTsNCiAgICAtCS8qIEJBQ0sgZm9yIGFsbCB0aGUgcmVzdCAqLw0KICAgIC0JaW5p
dF9wYWlyKE1BSU5fTUVOVV9CQUNLLCAtMSwgLTEpOw0KICAgIC0JaW5pdF9wYWlyKE1BSU5fTUVO
VV9HUkVZLCAtMSwgLTEpOw0KICAgIC0JaW5pdF9wYWlyKE1BSU5fTUVOVV9IRUFESU5HLCBDT0xP
Ul9HUkVFTiwgLTEpOw0KICAgIC0JaW5pdF9wYWlyKE1BSU5fTUVOVV9CT1gsIENPTE9SX1lFTExP
VywgLTEpOw0KICAgIC0NCiAgICAtCWluaXRfcGFpcihTQ1JPTExXSU5fVEVYVCwgLTEsIC0xKTsN
CiAgICAtCWluaXRfcGFpcihTQ1JPTExXSU5fSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsNCiAg
ICAtCWluaXRfcGFpcihTQ1JPTExXSU5fQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsNCiAgICAtDQog
ICAgLQlpbml0X3BhaXIoRElBTE9HX1RFWFQsIC0xLCAtMSk7DQogICAgLQlpbml0X3BhaXIoRElB
TE9HX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7DQogICAgLQlpbml0X3BhaXIoRElBTE9HX01FTlVf
QkFDSywgQ09MT1JfWUVMTE9XLCAtMSk7DQogICAgLQlpbml0X3BhaXIoRElBTE9HX01FTlVfRk9S
RSwgQ09MT1JfUkVELCAtMSk7DQogICAgLQ0KICAgIC0JaW5pdF9wYWlyKElOUFVUX0JPWCwgQ09M
T1JfWUVMTE9XLCAtMSk7DQogICAgLQlpbml0X3BhaXIoSU5QVVRfSEVBRElORywgQ09MT1JfR1JF
RU4sIC0xKTsNCiAgICAtCWluaXRfcGFpcihJTlBVVF9URVhULCAtMSwgLTEpOw0KICAgIC0JaW5p
dF9wYWlyKElOUFVUX0ZJRUxELCAtMSwgLTEpOw0KICAgIC0NCiAgICAtCWluaXRfcGFpcihGVU5D
VElPTl9ISUdITElHSFQsIC0xLCAtMSk7DQogICAgLQlpbml0X3BhaXIoRlVOQ1RJT05fVEVYVCwg
Q09MT1JfWUVMTE9XLCAtMSk7DQogICAgLX0NCiAgICAtDQogICAgLS8qIGF2YWlsYWJsZSBhdHRy
aWJ1dGVzOg0KICAgIC0gICBBX05PUk1BTCAgICAgICAgTm9ybWFsIGRpc3BsYXkgKG5vIGhpZ2hs
aWdodCkNCiAgICAtICAgQV9TVEFORE9VVCAgICAgIEJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2Yg
dGhlIHRlcm1pbmFsLg0KICAgIC0gICBBX1VOREVSTElORSAgICAgVW5kZXJsaW5pbmcNCiAgICAt
ICAgQV9SRVZFUlNFICAgICAgIFJldmVyc2UgdmlkZW8NCiAgICAtICAgQV9CTElOSyAgICAgICAg
IEJsaW5raW5nDQogICAgLSAgIEFfRElNICAgICAgICAgICBIYWxmIGJyaWdodA0KICAgIC0gICBB
X0JPTEQgICAgICAgICAgRXh0cmEgYnJpZ2h0IG9yIGJvbGQNCiAgICAtICAgQV9QUk9URUNUICAg
ICAgIFByb3RlY3RlZCBtb2RlDQogICAgLSAgIEFfSU5WSVMgICAgICAgICBJbnZpc2libGUgb3Ig
YmxhbmsgbW9kZQ0KICAgIC0gICBBX0FMVENIQVJTRVQgICAgQWx0ZXJuYXRlIGNoYXJhY3RlciBz
ZXQNCiAgICAtICAgQV9DSEFSVEVYVCAgICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgYSBjaGFyYWN0
ZXINCiAgICAtICAgQ09MT1JfUEFJUihuKSAgIENvbG9yLXBhaXIgbnVtYmVyIG4NCiAgICAtICAg
Ki8NCiAgICAtc3RhdGljIHZvaWQgbm9ybWFsX2NvbG9yX3RoZW1lKHZvaWQpDQogICAgLXsNCiAg
ICAtCS8qIGF1dG9tYXRpY2FsbHkgYWRkIGNvbG9yLi4uICovDQogICAgLSNkZWZpbmUgbWthdHRy
KG5hbWUsIGF0dHIpIGRvIHsgXA0KICAgIC1hdHRyaWJ1dGVzW25hbWVdID0gYXR0ciB8IENPTE9S
X1BBSVIobmFtZSk7IH0gd2hpbGUgKDApDQogICAgLQlta2F0dHIoTk9STUFMLCBOT1JNQUwpOw0K
ICAgIC0JbWthdHRyKE1BSU5fSEVBRElORywgQV9CT0xEIHwgQV9VTkRFUkxJTkUpOw0KICAgIC0N
CiAgICAtCW1rYXR0cihNQUlOX01FTlVfRk9SRSwgQV9SRVZFUlNFKTsNCiAgICAtCW1rYXR0cihN
QUlOX01FTlVfQkFDSywgQV9OT1JNQUwpOw0KICAgIC0JbWthdHRyKE1BSU5fTUVOVV9HUkVZLCBB
X05PUk1BTCk7DQogICAgLQlta2F0dHIoTUFJTl9NRU5VX0hFQURJTkcsIEFfQk9MRCk7DQogICAg
LQlta2F0dHIoTUFJTl9NRU5VX0JPWCwgQV9OT1JNQUwpOw0KICAgIC0NCiAgICAtCW1rYXR0cihT
Q1JPTExXSU5fVEVYVCwgQV9OT1JNQUwpOw0KICAgIC0JbWthdHRyKFNDUk9MTFdJTl9IRUFESU5H
LCBBX0JPTEQpOw0KICAgIC0JbWthdHRyKFNDUk9MTFdJTl9CT1gsIEFfQk9MRCk7DQogICAgLQ0K
ICAgIC0JbWthdHRyKERJQUxPR19URVhULCBBX0JPTEQpOw0KICAgIC0JbWthdHRyKERJQUxPR19C
T1gsIEFfQk9MRCk7DQogICAgLQlta2F0dHIoRElBTE9HX01FTlVfRk9SRSwgQV9TVEFORE9VVCk7
DQogICAgLQlta2F0dHIoRElBTE9HX01FTlVfQkFDSywgQV9OT1JNQUwpOw0KICAgIC0NCiAgICAt
CW1rYXR0cihJTlBVVF9CT1gsIEFfTk9STUFMKTsNCiAgICAtCW1rYXR0cihJTlBVVF9IRUFESU5H
LCBBX0JPTEQpOw0KICAgIC0JbWthdHRyKElOUFVUX1RFWFQsIEFfTk9STUFMKTsNCiAgICAtCW1r
YXR0cihJTlBVVF9GSUVMRCwgQV9VTkRFUkxJTkUpOw0KICAgIC0NCiAgICAtCW1rYXR0cihGVU5D
VElPTl9ISUdITElHSFQsIEFfQk9MRCk7DQogICAgLQlta2F0dHIoRlVOQ1RJT05fVEVYVCwgQV9S
RVZFUlNFKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgbm9fY29sb3JzX3RoZW1l
KHZvaWQpDQogICAgLXsNCiAgICAtCS8qIGF1dG9tYXRpY2FsbHkgYWRkIGhpZ2hsaWdodCwgbm8g
Y29sb3IgKi8NCiAgICAtI2RlZmluZSBta2F0dHJuKG5hbWUsIGF0dHIpIHsgYXR0cmlidXRlc1tu
YW1lXSA9IGF0dHI7IH0NCiAgICAtDQogICAgLQlta2F0dHJuKE5PUk1BTCwgTk9STUFMKTsNCiAg
ICAtCW1rYXR0cm4oTUFJTl9IRUFESU5HLCBBX0JPTEQgfCBBX1VOREVSTElORSk7DQogICAgLQ0K
ICAgIC0JbWthdHRybihNQUlOX01FTlVfRk9SRSwgQV9TVEFORE9VVCk7DQogICAgLQlta2F0dHJu
KE1BSU5fTUVOVV9CQUNLLCBBX05PUk1BTCk7DQogICAgLQlta2F0dHJuKE1BSU5fTUVOVV9HUkVZ
LCBBX05PUk1BTCk7DQogICAgLQlta2F0dHJuKE1BSU5fTUVOVV9IRUFESU5HLCBBX0JPTEQpOw0K
ICAgIC0JbWthdHRybihNQUlOX01FTlVfQk9YLCBBX05PUk1BTCk7DQogICAgLQ0KICAgIC0JbWth
dHRybihTQ1JPTExXSU5fVEVYVCwgQV9OT1JNQUwpOw0KICAgIC0JbWthdHRybihTQ1JPTExXSU5f
SEVBRElORywgQV9CT0xEKTsNCiAgICAtCW1rYXR0cm4oU0NST0xMV0lOX0JPWCwgQV9CT0xEKTsN
CiAgICAtDQogICAgLQlta2F0dHJuKERJQUxPR19URVhULCBBX05PUk1BTCk7DQogICAgLQlta2F0
dHJuKERJQUxPR19CT1gsIEFfQk9MRCk7DQogICAgLQlta2F0dHJuKERJQUxPR19NRU5VX0ZPUkUs
IEFfU1RBTkRPVVQpOw0KICAgIC0JbWthdHRybihESUFMT0dfTUVOVV9CQUNLLCBBX05PUk1BTCk7
DQogICAgLQ0KICAgIC0JbWthdHRybihJTlBVVF9CT1gsIEFfQk9MRCk7DQogICAgLQlta2F0dHJu
KElOUFVUX0hFQURJTkcsIEFfQk9MRCk7DQogICAgLQlta2F0dHJuKElOUFVUX1RFWFQsIEFfTk9S
TUFMKTsNCiAgICAtCW1rYXR0cm4oSU5QVVRfRklFTEQsIEFfVU5ERVJMSU5FKTsNCiAgICAtDQog
ICAgLQlta2F0dHJuKEZVTkNUSU9OX0hJR0hMSUdIVCwgQV9CT0xEKTsNCiAgICAtCW1rYXR0cm4o
RlVOQ1RJT05fVEVYVCwgQV9SRVZFUlNFKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBzZXRf
Y29sb3JzKCkNCiAgICAtew0KICAgIC0Jc3RhcnRfY29sb3IoKTsNCiAgICAtCXVzZV9kZWZhdWx0
X2NvbG9ycygpOw0KICAgIC0Jc2V0X25vcm1hbF9jb2xvcnMoKTsNCiAgICAtCWlmIChoYXNfY29s
b3JzKCkpIHsNCiAgICAtCQlub3JtYWxfY29sb3JfdGhlbWUoKTsNCiAgICAtCX0gZWxzZSB7DQog
ICAgLQkJLyogZ2l2ZSBkZWZhdWx0cyAqLw0KICAgIC0JCW5vX2NvbG9yc190aGVtZSgpOw0KICAg
IC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogdGhpcyBjaGFuZ2VzIHRoZSB3aW5k
b3dzIGF0dHJpYnV0ZXMgISEhICovDQogICAgLXZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAq
d2luLA0KICAgIC0JCWludCBzdGFydHksDQogICAgLQkJaW50IHN0YXJ0eCwNCiAgICAtCQlpbnQg
d2lkdGgsDQogICAgLQkJY29uc3QgY2hhciAqc3RyaW5nLA0KICAgIC0JCWNodHlwZSBjb2xvcikN
CiAgICAteyAgICAgIGludCBsZW5ndGgsIHgsIHk7DQogICAgLQlmbG9hdCB0ZW1wOw0KICAgIC0N
CiAgICAtDQogICAgLQlpZiAod2luID09IE5VTEwpDQogICAgLQkJd2luID0gc3Rkc2NyOw0KICAg
IC0JZ2V0eXgod2luLCB5LCB4KTsNCiAgICAtCWlmIChzdGFydHggIT0gMCkNCiAgICAtCQl4ID0g
c3RhcnR4Ow0KICAgIC0JaWYgKHN0YXJ0eSAhPSAwKQ0KICAgIC0JCXkgPSBzdGFydHk7DQogICAg
LQlpZiAod2lkdGggPT0gMCkNCiAgICAtCQl3aWR0aCA9IDgwOw0KICAgIC0NCiAgICAtCWxlbmd0
aCA9IHN0cmxlbihzdHJpbmcpOw0KICAgIC0JdGVtcCA9ICh3aWR0aCAtIGxlbmd0aCkgLyAyOw0K
ICAgIC0JeCA9IHN0YXJ0eCArIChpbnQpdGVtcDsNCiAgICAtCSh2b2lkKSB3YXR0cnNldCh3aW4s
IGNvbG9yKTsNCiAgICAtCW12d3ByaW50dyh3aW4sIHksIHgsICIlcyIsIHN0cmluZyk7DQogICAg
LQlyZWZyZXNoKCk7DQogICAgLX0NCiAgICAtDQogICAgLWludCBnZXRfbGluZV9ubyhjb25zdCBj
aGFyICp0ZXh0KQ0KICAgIC17DQogICAgLQlpbnQgaTsNCiAgICAtCWludCB0b3RhbCA9IDE7DQog
ICAgLQ0KICAgIC0JaWYgKCF0ZXh0KQ0KICAgIC0JCXJldHVybiAwOw0KICAgIC0NCiAgICAtCWZv
ciAoaSA9IDA7IHRleHRbaV0gIT0gJ1wwJzsgaSsrKQ0KICAgIC0JCWlmICh0ZXh0W2ldID09ICdc
bicpDQogICAgLQkJCXRvdGFsKys7DQogICAgLQlyZXR1cm4gdG90YWw7DQogICAgLX0NCiAgICAt
DQogICAgLWNvbnN0IGNoYXIgKmdldF9saW5lKGNvbnN0IGNoYXIgKnRleHQsIGludCBsaW5lX25v
KQ0KICAgIC17DQogICAgLQlpbnQgaTsNCiAgICAtCWludCBsaW5lcyA9IDA7DQogICAgLQ0KICAg
IC0JaWYgKCF0ZXh0KQ0KICAgIC0JCXJldHVybiAwOw0KICAgIC0NCiAgICAtCWZvciAoaSA9IDA7
IHRleHRbaV0gIT0gJ1wwJyAmJiBsaW5lcyA8IGxpbmVfbm87IGkrKykNCiAgICAtCQlpZiAodGV4
dFtpXSA9PSAnXG4nKQ0KICAgIC0JCQlsaW5lcysrOw0KICAgIC0JcmV0dXJuIHRleHQraTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtaW50IGdldF9saW5lX2xlbmd0aChjb25zdCBjaGFyICpsaW5lKQ0K
ICAgIC17DQogICAgLQlpbnQgcmVzID0gMDsNCiAgICAtCXdoaWxlICgqbGluZSAhPSAnXDAnICYm
ICpsaW5lICE9ICdcbicpIHsNCiAgICAtCQlsaW5lKys7DQogICAgLQkJcmVzKys7DQogICAgLQl9
DQogICAgLQlyZXR1cm4gcmVzOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBwcmludCBhbGwgbGlu
ZXMgdG8gdGhlIHdpbmRvdy4gKi8NCiAgICAtdm9pZCBmaWxsX3dpbmRvdyhXSU5ET1cgKndpbiwg
Y29uc3QgY2hhciAqdGV4dCkNCiAgICAtew0KICAgIC0JaW50IHgsIHk7DQogICAgLQlpbnQgdG90
YWxfbGluZXMgPSBnZXRfbGluZV9ubyh0ZXh0KTsNCiAgICAtCWludCBpOw0KICAgIC0NCiAgICAt
CWdldG1heHl4KHdpbiwgeSwgeCk7DQogICAgLQkvKiBkbyBub3QgZ28gb3ZlciBlbmQgb2YgbGlu
ZSAqLw0KICAgIC0JdG90YWxfbGluZXMgPSBtaW4odG90YWxfbGluZXMsIHkpOw0KICAgIC0JZm9y
IChpID0gMDsgaSA8IHRvdGFsX2xpbmVzOyBpKyspIHsNCiAgICAtCQljaGFyIHRtcFt4KzEwXTsN
CiAgICAtCQljb25zdCBjaGFyICpsaW5lID0gZ2V0X2xpbmUodGV4dCwgaSk7DQogICAgLQkJaW50
IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5lKTsNCiAgICAtCQlzdHJuY3B5KHRtcCwgbGluZSwg
bWluKGxlbiwgeCkpOw0KICAgIC0JCXRtcFtsZW5dID0gJ1wwJzsNCiAgICAtCQltdndwcmludHco
d2luLCBpLCAwLCAiJXMiLCB0bXApOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKiBn
ZXQgdGhlIG1lc3NhZ2UsIGFuZCBidXR0b25zLg0KICAgIC0gKiBlYWNoIGJ1dHRvbiBtdXN0IGJl
IGEgY2hhcioNCiAgICAtICogcmV0dXJuIHRoZSBzZWxlY3RlZCBidXR0b24NCiAgICAtICoNCiAg
ICAtICogdGhpcyBkaWFsb2cgaXMgdXNlZCBmb3IgMiBkaWZmZXJlbnQgdGhpbmdzOg0KICAgIC0g
KiAxKSBzaG93IGEgdGV4dCBib3gsIG5vIGJ1dHRvbnMuDQogICAgLSAqIDIpIHNob3cgYSBkaWFs
b2csIHdpdGggaG9yaXpvbnRhbCBidXR0b25zDQogICAgLSAqLw0KICAgIC1pbnQgYnRuX2RpYWxv
ZyhXSU5ET1cgKm1haW5fd2luZG93LCBjb25zdCBjaGFyICptc2csIGludCBidG5fbnVtLCAuLi4p
DQogICAgLXsNCiAgICAtCXZhX2xpc3QgYXA7DQogICAgLQljaGFyICpidG47DQogICAgLQlpbnQg
YnRuc193aWR0aCA9IDA7DQogICAgLQlpbnQgbXNnX2xpbmVzID0gMDsNCiAgICAtCWludCBtc2df
d2lkdGggPSAwOw0KICAgIC0JaW50IHRvdGFsX3dpZHRoOw0KICAgIC0JaW50IHdpbl9yb3dzID0g
MDsNCiAgICAtCVdJTkRPVyAqd2luOw0KICAgIC0JV0lORE9XICptc2dfd2luOw0KICAgIC0JV0lO
RE9XICptZW51X3dpbjsNCiAgICAtCU1FTlUgKm1lbnU7DQogICAgLQlJVEVNICpidG5zW2J0bl9u
dW0rMV07DQogICAgLQlpbnQgaSwgeCwgeTsNCiAgICAtCWludCByZXMgPSAtMTsNCiAgICAtDQog
ICAgLQ0KICAgIC0JdmFfc3RhcnQoYXAsIGJ0bl9udW0pOw0KICAgIC0JZm9yIChpID0gMDsgaSA8
IGJ0bl9udW07IGkrKykgew0KICAgIC0JCWJ0biA9IHZhX2FyZyhhcCwgY2hhciAqKTsNCiAgICAt
CQlidG5zW2ldID0gbmV3X2l0ZW0oYnRuLCAiIik7DQogICAgLQkJYnRuc193aWR0aCArPSBzdHJs
ZW4oYnRuKSsxOw0KICAgIC0JfQ0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtCWJ0bnNbYnRuX251
bV0gPSBOVUxMOw0KICAgIC0NCiAgICAtCS8qIGZpbmQgdGhlIHdpZGVzdCBsaW5lIG9mIG1zZzog
Ki8NCiAgICAtCW1zZ19saW5lcyA9IGdldF9saW5lX25vKG1zZyk7DQogICAgLQlmb3IgKGkgPSAw
OyBpIDwgbXNnX2xpbmVzOyBpKyspIHsNCiAgICAtCQljb25zdCBjaGFyICpsaW5lID0gZ2V0X2xp
bmUobXNnLCBpKTsNCiAgICAtCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3RoKGxpbmUpOw0KICAg
IC0JCWlmIChtc2dfd2lkdGggPCBsZW4pDQogICAgLQkJCW1zZ193aWR0aCA9IGxlbjsNCiAgICAt
CX0NCiAgICAtDQogICAgLQl0b3RhbF93aWR0aCA9IG1heChtc2dfd2lkdGgsIGJ0bnNfd2lkdGgp
Ow0KICAgIC0JLyogcGxhY2UgZGlhbG9nIGluIG1pZGRsZSBvZiBzY3JlZW4gKi8NCiAgICAtCXkg
PSAoZ2V0bWF4eShzdGRzY3IpLShtc2dfbGluZXMrNCkpLzI7DQogICAgLQl4ID0gKGdldG1heHgo
c3Rkc2NyKS0odG90YWxfd2lkdGgrNCkpLzI7DQogICAgLQ0KICAgIC0NCiAgICAtCS8qIGNyZWF0
ZSB0aGUgd2luZG93cyAqLw0KICAgIC0JaWYgKGJ0bl9udW0gPiAwKQ0KICAgIC0JCXdpbl9yb3dz
ID0gbXNnX2xpbmVzKzQ7DQogICAgLQllbHNlDQogICAgLQkJd2luX3Jvd3MgPSBtc2dfbGluZXMr
MjsNCiAgICAtDQogICAgLQl3aW4gPSBuZXd3aW4od2luX3Jvd3MsIHRvdGFsX3dpZHRoKzQsIHks
IHgpOw0KICAgIC0Ja2V5cGFkKHdpbiwgVFJVRSk7DQogICAgLQltZW51X3dpbiA9IGRlcndpbih3
aW4sIDEsIGJ0bnNfd2lkdGgsIHdpbl9yb3dzLTIsDQogICAgLQkJCTErKHRvdGFsX3dpZHRoKzIt
YnRuc193aWR0aCkvMik7DQogICAgLQltZW51ID0gbmV3X21lbnUoYnRucyk7DQogICAgLQltc2df
d2luID0gZGVyd2luKHdpbiwgd2luX3Jvd3MtMiwgbXNnX3dpZHRoLCAxLA0KICAgIC0JCQkxKyh0
b3RhbF93aWR0aCsyLW1zZ193aWR0aCkvMik7DQogICAgLQ0KICAgIC0Jc2V0X21lbnVfZm9yZSht
ZW51LCBhdHRyaWJ1dGVzW0RJQUxPR19NRU5VX0ZPUkVdKTsNCiAgICAtCXNldF9tZW51X2JhY2so
bWVudSwgYXR0cmlidXRlc1tESUFMT0dfTUVOVV9CQUNLXSk7DQogICAgLQ0KICAgIC0JKHZvaWQp
IHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tESUFMT0dfQk9YXSk7DQogICAgLQlib3god2luLCAw
LCAwKTsNCiAgICAtDQogICAgLQkvKiBwcmludCBtZXNzYWdlICovDQogICAgLQkodm9pZCkgd2F0
dHJzZXQobXNnX3dpbiwgYXR0cmlidXRlc1tESUFMT0dfVEVYVF0pOw0KICAgIC0JZmlsbF93aW5k
b3cobXNnX3dpbiwgbXNnKTsNCiAgICAtDQogICAgLQlzZXRfbWVudV93aW4obWVudSwgd2luKTsN
CiAgICAtCXNldF9tZW51X3N1YihtZW51LCBtZW51X3dpbik7DQogICAgLQlzZXRfbWVudV9mb3Jt
YXQobWVudSwgMSwgYnRuX251bSk7DQogICAgLQltZW51X29wdHNfb2ZmKG1lbnUsIE9fU0hPV0RF
U0MpOw0KICAgIC0JbWVudV9vcHRzX29mZihtZW51LCBPX1NIT1dNQVRDSCk7DQogICAgLQltZW51
X29wdHNfb24obWVudSwgT19PTkVWQUxVRSk7DQogICAgLQltZW51X29wdHNfb24obWVudSwgT19O
T05DWUNMSUMpOw0KICAgIC0Jc2V0X21lbnVfbWFyayhtZW51LCAiIik7DQogICAgLQlwb3N0X21l
bnUobWVudSk7DQogICAgLQ0KICAgIC0NCiAgICAtCXRvdWNod2luKHdpbik7DQogICAgLQlyZWZy
ZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICAtCXdoaWxlICgocmVzID0gd2dldGNo
KHdpbikpKSB7DQogICAgLQkJc3dpdGNoIChyZXMpIHsNCiAgICAtCQljYXNlIEtFWV9MRUZUOg0K
ICAgIC0JCQltZW51X2RyaXZlcihtZW51LCBSRVFfTEVGVF9JVEVNKTsNCiAgICAtCQkJYnJlYWs7
DQogICAgLQkJY2FzZSBLRVlfUklHSFQ6DQogICAgLQkJCW1lbnVfZHJpdmVyKG1lbnUsIFJFUV9S
SUdIVF9JVEVNKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAxMDogLyogRU5URVIgKi8N
CiAgICAtCQljYXNlIDI3OiAvKiBFU0NBUEUgKi8NCiAgICAtCQljYXNlICcgJzoNCiAgICAtCQlj
YXNlIEtFWV9GKEZfQkFDSyk6DQogICAgLQkJY2FzZSBLRVlfRihGX0VYSVQpOg0KICAgIC0JCQli
cmVhazsNCiAgICAtCQl9DQogICAgLQkJdG91Y2h3aW4od2luKTsNCiAgICAtCQlyZWZyZXNoX2Fs
bF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICAtDQogICAgLQkJaWYgKHJlcyA9PSAxMCB8fCBy
ZXMgPT0gJyAnKSB7DQogICAgLQkJCXJlcyA9IGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKG1lbnUp
KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfSBlbHNlIGlmIChyZXMgPT0gMjcgfHwgcmVzID09
IEtFWV9GKEZfQkFDSykgfHwNCiAgICAtCQkJCXJlcyA9PSBLRVlfRihGX0VYSVQpKSB7DQogICAg
LQkJCXJlcyA9IEtFWV9FWElUOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQl9DQog
ICAgLQ0KICAgIC0JdW5wb3N0X21lbnUobWVudSk7DQogICAgLQlmcmVlX21lbnUobWVudSk7DQog
ICAgLQlmb3IgKGkgPSAwOyBpIDwgYnRuX251bTsgaSsrKQ0KICAgIC0JCWZyZWVfaXRlbShidG5z
W2ldKTsNCiAgICAtDQogICAgLQlkZWx3aW4od2luKTsNCiAgICAtCXJldHVybiByZXM7DQogICAg
LX0NCiAgICAtDQogICAgLWludCBkaWFsb2dfaW5wdXRib3goV0lORE9XICptYWluX3dpbmRvdywN
CiAgICAtCQljb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LA0KICAgIC0JCWNv
bnN0IGNoYXIgKmluaXQsIGNoYXIgKipyZXN1bHRwLCBpbnQgKnJlc3VsdF9sZW4pDQogICAgLXsN
CiAgICAtCWludCBwcm9tcHRfbGluZXMgPSAwOw0KICAgIC0JaW50IHByb21wdF93aWR0aCA9IDA7
DQogICAgLQlXSU5ET1cgKndpbjsNCiAgICAtCVdJTkRPVyAqcHJvbXB0X3dpbjsNCiAgICAtCVdJ
TkRPVyAqZm9ybV93aW47DQogICAgLQlQQU5FTCAqcGFuZWw7DQogICAgLQlpbnQgaSwgeCwgeTsN
CiAgICAtCWludCByZXMgPSAtMTsNCiAgICAtCWludCBjdXJzb3JfcG9zaXRpb24gPSBzdHJsZW4o
aW5pdCk7DQogICAgLQlpbnQgY3Vyc29yX2Zvcm1fd2luOw0KICAgIC0JY2hhciAqcmVzdWx0ID0g
KnJlc3VsdHA7DQogICAgLQ0KICAgIC0JaWYgKHN0cmxlbihpbml0KSsxID4gKnJlc3VsdF9sZW4p
IHsNCiAgICAtCQkqcmVzdWx0X2xlbiA9IHN0cmxlbihpbml0KSsxOw0KICAgIC0JCSpyZXN1bHRw
ID0gcmVzdWx0ID0gcmVhbGxvYyhyZXN1bHQsICpyZXN1bHRfbGVuKTsNCiAgICAtCX0NCiAgICAt
DQogICAgLQkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovDQogICAgLQlwcm9tcHRf
bGluZXMgPSBnZXRfbGluZV9ubyhwcm9tcHQpOw0KICAgIC0JZm9yIChpID0gMDsgaSA8IHByb21w
dF9saW5lczsgaSsrKSB7DQogICAgLQkJY29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKHByb21w
dCwgaSk7DQogICAgLQkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5lKTsNCiAgICAtCQlw
cm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBsZW4pOw0KICAgIC0JfQ0KICAgIC0NCiAg
ICAtCWlmICh0aXRsZSkNCiAgICAtCQlwcm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBz
dHJsZW4odGl0bGUpKTsNCiAgICAtDQogICAgLQkvKiBwbGFjZSBkaWFsb2cgaW4gbWlkZGxlIG9m
IHNjcmVlbiAqLw0KICAgIC0JeSA9IChnZXRtYXh5KHN0ZHNjciktKHByb21wdF9saW5lcys0KSkv
MjsNCiAgICAtCXggPSAoZ2V0bWF4eChzdGRzY3IpLShwcm9tcHRfd2lkdGgrNCkpLzI7DQogICAg
LQ0KICAgIC0Jc3RybmNweShyZXN1bHQsIGluaXQsICpyZXN1bHRfbGVuKTsNCiAgICAtDQogICAg
LQkvKiBjcmVhdGUgdGhlIHdpbmRvd3MgKi8NCiAgICAtCXdpbiA9IG5ld3dpbihwcm9tcHRfbGlu
ZXMrNiwgcHJvbXB0X3dpZHRoKzcsIHksIHgpOw0KICAgIC0JcHJvbXB0X3dpbiA9IGRlcndpbih3
aW4sIHByb21wdF9saW5lcysxLCBwcm9tcHRfd2lkdGgsIDIsIDIpOw0KICAgIC0JZm9ybV93aW4g
PSBkZXJ3aW4od2luLCAxLCBwcm9tcHRfd2lkdGgsIHByb21wdF9saW5lcyszLCAyKTsNCiAgICAt
CWtleXBhZChmb3JtX3dpbiwgVFJVRSk7DQogICAgLQ0KICAgIC0JKHZvaWQpIHdhdHRyc2V0KGZv
cm1fd2luLCBhdHRyaWJ1dGVzW0lOUFVUX0ZJRUxEXSk7DQogICAgLQ0KICAgIC0JKHZvaWQpIHdh
dHRyc2V0KHdpbiwgYXR0cmlidXRlc1tJTlBVVF9CT1hdKTsNCiAgICAtCWJveCh3aW4sIDAsIDAp
Ow0KICAgIC0JKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tJTlBVVF9IRUFESU5HXSk7
DQogICAgLQlpZiAodGl0bGUpDQogICAgLQkJbXZ3cHJpbnR3KHdpbiwgMCwgMywgIiVzIiwgdGl0
bGUpOw0KICAgIC0NCiAgICAtCS8qIHByaW50IG1lc3NhZ2UgKi8NCiAgICAtCSh2b2lkKSB3YXR0
cnNldChwcm9tcHRfd2luLCBhdHRyaWJ1dGVzW0lOUFVUX1RFWFRdKTsNCiAgICAtCWZpbGxfd2lu
ZG93KHByb21wdF93aW4sIHByb21wdCk7DQogICAgLQ0KICAgIC0JbXZ3cHJpbnR3KGZvcm1fd2lu
LCAwLCAwLCAiJSpzIiwgcHJvbXB0X3dpZHRoLCAiICIpOw0KICAgIC0JY3Vyc29yX2Zvcm1fd2lu
ID0gbWluKGN1cnNvcl9wb3NpdGlvbiwgcHJvbXB0X3dpZHRoLTEpOw0KICAgIC0JbXZ3cHJpbnR3
KGZvcm1fd2luLCAwLCAwLCAiJXMiLA0KICAgIC0JCSAgcmVzdWx0ICsgY3Vyc29yX3Bvc2l0aW9u
LWN1cnNvcl9mb3JtX3dpbik7DQogICAgLQ0KICAgIC0JLyogY3JlYXRlIHBhbmVscyAqLw0KICAg
IC0JcGFuZWwgPSBuZXdfcGFuZWwod2luKTsNCiAgICAtDQogICAgLQkvKiBzaG93IHRoZSBjdXJz
b3IgKi8NCiAgICAtCWN1cnNfc2V0KDEpOw0KICAgIC0NCiAgICAtCXRvdWNod2luKHdpbik7DQog
ICAgLQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICAtCXdoaWxlICgocmVz
ID0gd2dldGNoKGZvcm1fd2luKSkpIHsNCiAgICAtCQlpbnQgbGVuID0gc3RybGVuKHJlc3VsdCk7
DQogICAgLQkJc3dpdGNoIChyZXMpIHsNCiAgICAtCQljYXNlIDEwOiAvKiBFTlRFUiAqLw0KICAg
IC0JCWNhc2UgMjc6IC8qIEVTQ0FQRSAqLw0KICAgIC0JCWNhc2UgS0VZX0YoRl9IRUxQKToNCiAg
ICAtCQljYXNlIEtFWV9GKEZfRVhJVCk6DQogICAgLQkJY2FzZSBLRVlfRihGX0JBQ0spOg0KICAg
IC0JCQlicmVhazsNCiAgICAtCQljYXNlIDEyNzoNCiAgICAtCQljYXNlIEtFWV9CQUNLU1BBQ0U6
DQogICAgLQkJCWlmIChjdXJzb3JfcG9zaXRpb24gPiAwKSB7DQogICAgLQkJCQltZW1tb3ZlKCZy
ZXN1bHRbY3Vyc29yX3Bvc2l0aW9uLTFdLA0KICAgIC0JCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3Np
dGlvbl0sDQogICAgLQkJCQkJCWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7DQogICAgLQkJCQljdXJz
b3JfcG9zaXRpb24tLTsNCiAgICAtCQkJCWN1cnNvcl9mb3JtX3dpbi0tOw0KICAgIC0JCQkJbGVu
LS07DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfREM6DQogICAg
LQkJCWlmIChjdXJzb3JfcG9zaXRpb24gPj0gMCAmJiBjdXJzb3JfcG9zaXRpb24gPCBsZW4pIHsN
CiAgICAtCQkJCW1lbW1vdmUoJnJlc3VsdFtjdXJzb3JfcG9zaXRpb25dLA0KICAgIC0JCQkJCQkm
cmVzdWx0W2N1cnNvcl9wb3NpdGlvbisxXSwNCiAgICAtCQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlv
bisxKTsNCiAgICAtCQkJCWxlbi0tOw0KICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CWNhc2UgS0VZX1VQOg0KICAgIC0JCWNhc2UgS0VZX1JJR0hUOg0KICAgIC0JCQlpZiAoY3Vyc29y
X3Bvc2l0aW9uIDwgbGVuKSB7DQogICAgLQkJCQljdXJzb3JfcG9zaXRpb24rKzsNCiAgICAtCQkJ
CWN1cnNvcl9mb3JtX3dpbisrOw0KICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgS0VZX0RPV046DQogICAgLQkJY2FzZSBLRVlfTEVGVDoNCiAgICAtCQkJaWYgKGN1cnNvcl9w
b3NpdGlvbiA+IDApIHsNCiAgICAtCQkJCWN1cnNvcl9wb3NpdGlvbi0tOw0KICAgIC0JCQkJY3Vy
c29yX2Zvcm1fd2luLS07DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBL
RVlfSE9NRToNCiAgICAtCQkJY3Vyc29yX3Bvc2l0aW9uID0gMDsNCiAgICAtCQkJY3Vyc29yX2Zv
cm1fd2luID0gMDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRU5EOg0KICAgIC0J
CQljdXJzb3JfcG9zaXRpb24gPSBsZW47DQogICAgLQkJCWN1cnNvcl9mb3JtX3dpbiA9IG1pbihj
dXJzb3JfcG9zaXRpb24sIHByb21wdF93aWR0aC0xKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
ZGVmYXVsdDoNCiAgICAtCQkJaWYgKChpc2dyYXBoKHJlcykgfHwgaXNzcGFjZShyZXMpKSkgew0K
ICAgIC0JCQkJLyogb25lIGZvciBuZXcgY2hhciwgb25lIGZvciAnXDAnICovDQogICAgLQkJCQlp
ZiAobGVuKzIgPiAqcmVzdWx0X2xlbikgew0KICAgIC0JCQkJCSpyZXN1bHRfbGVuID0gbGVuKzI7
DQogICAgLQkJCQkJKnJlc3VsdHAgPSByZXN1bHQgPSByZWFsbG9jKHJlc3VsdCwNCiAgICAtCQkJ
CQkJCQkqcmVzdWx0X2xlbik7DQogICAgLQkJCQl9DQogICAgLQkJCQkvKiBpbnNlcnQgdGhlIGNo
YXIgYXQgdGhlIHByb3BlciBwb3NpdGlvbiAqLw0KICAgIC0JCQkJbWVtbW92ZSgmcmVzdWx0W2N1
cnNvcl9wb3NpdGlvbisxXSwNCiAgICAtCQkJCQkJJnJlc3VsdFtjdXJzb3JfcG9zaXRpb25dLA0K
ICAgIC0JCQkJCQlsZW4tY3Vyc29yX3Bvc2l0aW9uKzEpOw0KICAgIC0JCQkJcmVzdWx0W2N1cnNv
cl9wb3NpdGlvbl0gPSByZXM7DQogICAgLQkJCQljdXJzb3JfcG9zaXRpb24rKzsNCiAgICAtCQkJ
CWN1cnNvcl9mb3JtX3dpbisrOw0KICAgIC0JCQkJbGVuKys7DQogICAgLQkJCX0gZWxzZSB7DQog
ICAgLQkJCQltdnByaW50dygwLCAwLCAidW5rbm93biBrZXk6ICVkXG4iLCByZXMpOw0KICAgIC0J
CQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlpZiAoY3Vyc29yX2Zvcm1fd2lu
IDwgMCkNCiAgICAtCQkJY3Vyc29yX2Zvcm1fd2luID0gMDsNCiAgICAtCQllbHNlIGlmIChjdXJz
b3JfZm9ybV93aW4gPiBwcm9tcHRfd2lkdGgtMSkNCiAgICAtCQkJY3Vyc29yX2Zvcm1fd2luID0g
cHJvbXB0X3dpZHRoLTE7DQogICAgLQ0KICAgIC0JCXdtb3ZlKGZvcm1fd2luLCAwLCAwKTsNCiAg
ICAtCQl3Y2xydG9lb2woZm9ybV93aW4pOw0KICAgIC0JCW12d3ByaW50dyhmb3JtX3dpbiwgMCwg
MCwgIiUqcyIsIHByb21wdF93aWR0aCwgIiAiKTsNCiAgICAtCQltdndwcmludHcoZm9ybV93aW4s
IDAsIDAsICIlcyIsDQogICAgLQkJCXJlc3VsdCArIGN1cnNvcl9wb3NpdGlvbi1jdXJzb3JfZm9y
bV93aW4pOw0KICAgIC0JCXdtb3ZlKGZvcm1fd2luLCAwLCBjdXJzb3JfZm9ybV93aW4pOw0KICAg
IC0JCXRvdWNod2luKHdpbik7DQogICAgLQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRv
dyk7DQogICAgLQ0KICAgIC0JCWlmIChyZXMgPT0gMTApIHsNCiAgICAtCQkJcmVzID0gMDsNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJfSBlbHNlIGlmIChyZXMgPT0gMjcgfHwgcmVzID09IEtFWV9G
KEZfQkFDSykgfHwNCiAgICAtCQkJCXJlcyA9PSBLRVlfRihGX0VYSVQpKSB7DQogICAgLQkJCXJl
cyA9IEtFWV9FWElUOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9IGVsc2UgaWYgKHJlcyA9PSBL
RVlfRihGX0hFTFApKSB7DQogICAgLQkJCXJlcyA9IDE7DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CX0NCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBoaWRlIHRoZSBjdXJzb3IgKi8NCiAgICAtCWN1
cnNfc2V0KDApOw0KICAgIC0JZGVsX3BhbmVsKHBhbmVsKTsNCiAgICAtCWRlbHdpbihwcm9tcHRf
d2luKTsNCiAgICAtCWRlbHdpbihmb3JtX3dpbik7DQogICAgLQlkZWx3aW4od2luKTsNCiAgICAt
CXJldHVybiByZXM7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHJlZnJlc2ggYWxsIHdpbmRvd3Mg
aW4gdGhlIGNvcnJlY3Qgb3JkZXIgKi8NCiAgICAtdm9pZCByZWZyZXNoX2FsbF93aW5kb3dzKFdJ
TkRPVyAqbWFpbl93aW5kb3cpDQogICAgLXsNCiAgICAtCXVwZGF0ZV9wYW5lbHMoKTsNCiAgICAt
CXRvdWNod2luKG1haW5fd2luZG93KTsNCiAgICAtCXJlZnJlc2goKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtLyogbGF5bWFuJ3Mgc2Nyb2xsYWJsZSB3aW5kb3cuLi4gKi8NCiAgICAtdm9pZCBzaG93
X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywNCiAgICAtCQljb25zdCBjaGFyICp0aXRs
ZSwNCiAgICAtCQljb25zdCBjaGFyICp0ZXh0KQ0KICAgIC17DQogICAgLQlpbnQgcmVzOw0KICAg
IC0JaW50IHRvdGFsX2xpbmVzID0gZ2V0X2xpbmVfbm8odGV4dCk7DQogICAgLQlpbnQgeCwgeSwg
bGluZXMsIGNvbHVtbnM7DQogICAgLQlpbnQgc3RhcnRfeCA9IDAsIHN0YXJ0X3kgPSAwOw0KICAg
IC0JaW50IHRleHRfbGluZXMgPSAwLCB0ZXh0X2NvbHMgPSAwOw0KICAgIC0JaW50IHRvdGFsX2Nv
bHMgPSAwOw0KICAgIC0JaW50IHdpbl9jb2xzID0gMDsNCiAgICAtCWludCB3aW5fbGluZXMgPSAw
Ow0KICAgIC0JaW50IGkgPSAwOw0KICAgIC0JV0lORE9XICp3aW47DQogICAgLQlXSU5ET1cgKnBh
ZDsNCiAgICAtCVBBTkVMICpwYW5lbDsNCiAgICAtDQogICAgLQlnZXRtYXh5eChzdGRzY3IsIGxp
bmVzLCBjb2x1bW5zKTsNCiAgICAtDQogICAgLQkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBt
c2c6ICovDQogICAgLQl0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRleHQpOw0KICAgIC0JZm9y
IChpID0gMDsgaSA8IHRvdGFsX2xpbmVzOyBpKyspIHsNCiAgICAtCQljb25zdCBjaGFyICpsaW5l
ID0gZ2V0X2xpbmUodGV4dCwgaSk7DQogICAgLQkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChs
aW5lKTsNCiAgICAtCQl0b3RhbF9jb2xzID0gbWF4KHRvdGFsX2NvbHMsIGxlbisyKTsNCiAgICAt
CX0NCiAgICAtDQogICAgLQkvKiBjcmVhdGUgdGhlIHBhZCAqLw0KICAgIC0JcGFkID0gbmV3cGFk
KHRvdGFsX2xpbmVzKzEwLCB0b3RhbF9jb2xzKzEwKTsNCiAgICAtCSh2b2lkKSB3YXR0cnNldChw
YWQsIGF0dHJpYnV0ZXNbU0NST0xMV0lOX1RFWFRdKTsNCiAgICAtCWZpbGxfd2luZG93KHBhZCwg
dGV4dCk7DQogICAgLQ0KICAgIC0Jd2luX2xpbmVzID0gbWluKHRvdGFsX2xpbmVzKzQsIGxpbmVz
LTIpOw0KICAgIC0Jd2luX2NvbHMgPSBtaW4odG90YWxfY29scysyLCBjb2x1bW5zLTIpOw0KICAg
IC0JdGV4dF9saW5lcyA9IG1heCh3aW5fbGluZXMtNCwgMCk7DQogICAgLQl0ZXh0X2NvbHMgPSBt
YXgod2luX2NvbHMtMiwgMCk7DQogICAgLQ0KICAgIC0JLyogcGxhY2Ugd2luZG93IGluIG1pZGRs
ZSBvZiBzY3JlZW4gKi8NCiAgICAtCXkgPSAobGluZXMtd2luX2xpbmVzKS8yOw0KICAgIC0JeCA9
IChjb2x1bW5zLXdpbl9jb2xzKS8yOw0KICAgIC0NCiAgICAtCXdpbiA9IG5ld3dpbih3aW5fbGlu
ZXMsIHdpbl9jb2xzLCB5LCB4KTsNCiAgICAtCWtleXBhZCh3aW4sIFRSVUUpOw0KICAgIC0JLyog
c2hvdyB0aGUgaGVscCBpbiB0aGUgaGVscCB3aW5kb3csIGFuZCBzaG93IHRoZSBoZWxwIHBhbmVs
ICovDQogICAgLQkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1dGVzW1NDUk9MTFdJTl9CT1hd
KTsNCiAgICAtCWJveCh3aW4sIDAsIDApOw0KICAgIC0JKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0
cmlidXRlc1tTQ1JPTExXSU5fSEVBRElOR10pOw0KICAgIC0JbXZ3cHJpbnR3KHdpbiwgMCwgMywg
IiAlcyAiLCB0aXRsZSk7DQogICAgLQlwYW5lbCA9IG5ld19wYW5lbCh3aW4pOw0KICAgIC0NCiAg
ICAtCS8qIGhhbmRsZSBzY3JvbGxpbmcgKi8NCiAgICAtCWRvIHsNCiAgICAtDQogICAgLQkJY29w
eXdpbihwYWQsIHdpbiwgc3RhcnRfeSwgc3RhcnRfeCwgMiwgMiwgdGV4dF9saW5lcywNCiAgICAt
CQkJCXRleHRfY29scywgMCk7DQogICAgLQkJcHJpbnRfaW5fbWlkZGxlKHdpbiwNCiAgICAtCQkJ
CXRleHRfbGluZXMrMiwNCiAgICAtCQkJCTAsDQogICAgLQkJCQl0ZXh0X2NvbHMsDQogICAgLQkJ
CQkiPE9LPiIsDQogICAgLQkJCQlhdHRyaWJ1dGVzW0RJQUxPR19NRU5VX0ZPUkVdKTsNCiAgICAt
CQl3cmVmcmVzaCh3aW4pOw0KICAgIC0NCiAgICAtCQlyZXMgPSB3Z2V0Y2god2luKTsNCiAgICAt
CQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCWNhc2UgS0VZX05QQUdFOg0KICAgIC0JCWNhc2UgJyAn
Og0KICAgIC0JCWNhc2UgJ2QnOg0KICAgIC0JCQlzdGFydF95ICs9IHRleHRfbGluZXMtMjsNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfUFBBR0U6DQogICAgLQkJY2FzZSAndSc6DQog
ICAgLQkJCXN0YXJ0X3kgLT0gdGV4dF9saW5lcysyOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQlj
YXNlIEtFWV9IT01FOg0KICAgIC0JCQlzdGFydF95ID0gMDsNCiAgICAtCQkJYnJlYWs7DQogICAg
LQkJY2FzZSBLRVlfRU5EOg0KICAgIC0JCQlzdGFydF95ID0gdG90YWxfbGluZXMtdGV4dF9saW5l
czsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRE9XTjoNCiAgICAtCQljYXNlICdq
JzoNCiAgICAtCQkJc3RhcnRfeSsrOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9V
UDoNCiAgICAtCQljYXNlICdrJzoNCiAgICAtCQkJc3RhcnRfeS0tOw0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIEtFWV9MRUZUOg0KICAgIC0JCWNhc2UgJ2gnOg0KICAgIC0JCQlzdGFydF94
LS07DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX1JJR0hUOg0KICAgIC0JCWNhc2Ug
J2wnOg0KICAgIC0JCQlzdGFydF94Kys7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAt
CQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fCByZXMgPT0gJ3EnIHx8DQogICAgLQkJCXJl
cyA9PSBLRVlfRihGX0hFTFApIHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8DQogICAgLQkJCXJl
cyA9PSBLRVlfRihGX0VYSVQpKQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQlpZiAoc3RhcnRfeSA8
IDApDQogICAgLQkJCXN0YXJ0X3kgPSAwOw0KICAgIC0JCWlmIChzdGFydF95ID49IHRvdGFsX2xp
bmVzLXRleHRfbGluZXMpDQogICAgLQkJCXN0YXJ0X3kgPSB0b3RhbF9saW5lcy10ZXh0X2xpbmVz
Ow0KICAgIC0JCWlmIChzdGFydF94IDwgMCkNCiAgICAtCQkJc3RhcnRfeCA9IDA7DQogICAgLQkJ
aWYgKHN0YXJ0X3ggPj0gdG90YWxfY29scy10ZXh0X2NvbHMpDQogICAgLQkJCXN0YXJ0X3ggPSB0
b3RhbF9jb2xzLXRleHRfY29sczsNCiAgICAtCX0gd2hpbGUgKHJlcyk7DQogICAgLQ0KICAgIC0J
ZGVsX3BhbmVsKHBhbmVsKTsNCiAgICAtCWRlbHdpbih3aW4pOw0KICAgIC0JcmVmcmVzaF9hbGxf
d2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgLX0NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnL25jb25mLmggYi9zdXBwb3J0L2tjb25maWcvbmNvbmYuaA0KICAgIGRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDBkNTI2MTcuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBw
b3J0L2tjb25maWcvbmNvbmYuaA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw5NiArMCww
IEBADQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIgVHphY2hhciA8bmly
LnR6YWNoYXJAZ21haWwuY29tPw0KICAgIC0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBHUEwgdjIuMC4NCiAgICAtICoNCiAgICAtICogRGVyaXZlZCBmcm9tIG1lbnVjb25m
aWcuDQogICAgLSAqDQogICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgPGN0eXBlLmg+DQog
ICAgLSNpbmNsdWRlIDxlcnJuby5oPg0KICAgIC0jaW5jbHVkZSA8ZmNudGwuaD4NCiAgICAtI2lu
Y2x1ZGUgPGxpbWl0cy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkYXJnLmg+DQogICAgLSNpbmNsdWRl
IDxzdGRsaWIuaD4NCiAgICAtI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSA8dW5p
c3RkLmg+DQogICAgLSNpbmNsdWRlIDxsb2NhbGUuaD4NCiAgICAtI2luY2x1ZGUgPGN1cnNlcy5o
Pg0KICAgIC0jaW5jbHVkZSA8bWVudS5oPg0KICAgIC0jaW5jbHVkZSA8cGFuZWwuaD4NCiAgICAt
I2luY2x1ZGUgPGZvcm0uaD4NCiAgICAtDQogICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0j
aW5jbHVkZSA8dGltZS5oPg0KICAgIC0jaW5jbHVkZSA8c3lzL3RpbWUuaD4NCiAgICAtDQogICAg
LSNpbmNsdWRlICJuY3Vyc2VzLmgiDQogICAgLQ0KICAgIC0jZGVmaW5lIG1heChhLCBiKSAoe1wN
CiAgICAtCQl0eXBlb2YoYSkgX2EgPSBhO1wNCiAgICAtCQl0eXBlb2YoYikgX2IgPSBiO1wNCiAg
ICAtCQlfYSA+IF9iID8gX2EgOiBfYjsgfSkNCiAgICAtDQogICAgLSNkZWZpbmUgbWluKGEsIGIp
ICh7XA0KICAgIC0JCXR5cGVvZihhKSBfYSA9IGE7XA0KICAgIC0JCXR5cGVvZihiKSBfYiA9IGI7
XA0KICAgIC0JCV9hIDwgX2IgPyBfYSA6IF9iOyB9KQ0KICAgIC0NCiAgICAtdHlwZWRlZiBlbnVt
IHsNCiAgICAtCU5PUk1BTCA9IDEsDQogICAgLQlNQUlOX0hFQURJTkcsDQogICAgLQlNQUlOX01F
TlVfQk9YLA0KICAgIC0JTUFJTl9NRU5VX0ZPUkUsDQogICAgLQlNQUlOX01FTlVfQkFDSywNCiAg
ICAtCU1BSU5fTUVOVV9HUkVZLA0KICAgIC0JTUFJTl9NRU5VX0hFQURJTkcsDQogICAgLQlTQ1JP
TExXSU5fVEVYVCwNCiAgICAtCVNDUk9MTFdJTl9IRUFESU5HLA0KICAgIC0JU0NST0xMV0lOX0JP
WCwNCiAgICAtCURJQUxPR19URVhULA0KICAgIC0JRElBTE9HX01FTlVfRk9SRSwNCiAgICAtCURJ
QUxPR19NRU5VX0JBQ0ssDQogICAgLQlESUFMT0dfQk9YLA0KICAgIC0JSU5QVVRfQk9YLA0KICAg
IC0JSU5QVVRfSEVBRElORywNCiAgICAtCUlOUFVUX1RFWFQsDQogICAgLQlJTlBVVF9GSUVMRCwN
CiAgICAtCUZVTkNUSU9OX1RFWFQsDQogICAgLQlGVU5DVElPTl9ISUdITElHSFQsDQogICAgLQlB
VFRSX01BWA0KICAgIC19IGF0dHJpYnV0ZXNfdDsNCiAgICAtZXh0ZXJuIGF0dHJpYnV0ZXNfdCBh
dHRyaWJ1dGVzW107DQogICAgLQ0KICAgIC10eXBlZGVmIGVudW0gew0KICAgIC0JRl9IRUxQID0g
MSwNCiAgICAtCUZfU1lNQk9MID0gMiwNCiAgICAtCUZfSU5TVFMgPSAzLA0KICAgIC0JRl9DT05G
ID0gNCwNCiAgICAtCUZfQkFDSyA9IDUsDQogICAgLQlGX1NBVkUgPSA2LA0KICAgIC0JRl9MT0FE
ID0gNywNCiAgICAtCUZfU0VBUkNIID0gOCwNCiAgICAtCUZfRVhJVCA9IDksDQogICAgLX0gZnVu
Y3Rpb25fa2V5Ow0KICAgIC0NCiAgICAtdm9pZCBzZXRfY29sb3JzKHZvaWQpOw0KICAgIC0NCiAg
ICAtLyogdGhpcyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICovDQogICAgLXZv
aWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLA0KICAgIC0JCWludCBzdGFydHksDQogICAg
LQkJaW50IHN0YXJ0eCwNCiAgICAtCQlpbnQgd2lkdGgsDQogICAgLQkJY29uc3QgY2hhciAqc3Ry
aW5nLA0KICAgIC0JCWNodHlwZSBjb2xvcik7DQogICAgLWludCBnZXRfbGluZV9sZW5ndGgoY29u
c3QgY2hhciAqbGluZSk7DQogICAgLWludCBnZXRfbGluZV9ubyhjb25zdCBjaGFyICp0ZXh0KTsN
CiAgICAtY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVfbm8p
Ow0KICAgIC12b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KTsN
CiAgICAtaW50IGJ0bl9kaWFsb2coV0lORE9XICptYWluX3dpbmRvdywgY29uc3QgY2hhciAqbXNn
LCBpbnQgYnRuX251bSwgLi4uKTsNCiAgICAtaW50IGRpYWxvZ19pbnB1dGJveChXSU5ET1cgKm1h
aW5fd2luZG93LA0KICAgIC0JCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQs
DQogICAgLQkJY29uc3QgY2hhciAqaW5pdCwgY2hhciAqKnJlc3VsdHAsIGludCAqcmVzdWx0X2xl
bik7DQogICAgLXZvaWQgcmVmcmVzaF9hbGxfd2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93KTsN
CiAgICAtdm9pZCBzaG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywNCiAgICAtCQlj
b25zdCBjaGFyICp0aXRsZSwNCiAgICAtCQljb25zdCBjaGFyICp0ZXh0KTsNCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tYnVpbGRy
b290LXVuaWtvcmUucGF0Y2ggYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wMS1rY29uZmlnLWtl
cm5lbC10by1idWlsZHJvb3QtdW5pa29yZS5wYXRjaA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IGVjY2M2OGMuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25m
aWcvcGF0Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by1idWlsZHJvb3QtdW5pa29yZS5wYXRjaA0K
ICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw5OCArMCwwIEBADQogICAgLS0tLQ0KICAgIC0g
Y29uZmRhdGEuYyAgICAgICAgICB8ICAgIDQgKystLQ0KICAgIC0gZ2NvbmYuZ2xhZGUgICAgICAg
ICB8ICAgIDIgKy0NCiAgICAtIG1jb25mLmMgICAgICAgICAgICAgfCAgICA0ICsrLS0NCiAgICAt
IHpjb25mLnRhYi5jX3NoaXBwZWQgfCAgICAyICstDQogICAgLSB6Y29uZi55ICAgICAgICAgICAg
IHwgICAgMiArLQ0KICAgIC0gNSBmaWxlcyBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDcgZGVs
ZXRpb25zKC0pDQogICAgLQ0KICAgIC1JbmRleDoga2NvbmZpZy9nY29uZi5nbGFkZQ0KICAgIC09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQogICAgLS0tLSBrY29uZmlnLm9yaWcvZ2NvbmYuZ2xhZGUJMjAxMy0xMi0yNyAy
MjoxNDozMi4zOTU2Mjk4NDMgKzAxMDANCiAgICAtKysrIGtjb25maWcvZ2NvbmYuZ2xhZGUJMjAx
My0xMi0yNyAyMjoxNDozMi4zODc2MzAxNTggKzAxMDANCiAgICAtQEAgLTQsNyArNCw3IEBADQog
ICAgLSANCiAgICAtIDx3aWRnZXQgY2xhc3M9Ikd0a1dpbmRvdyIgaWQ9IndpbmRvdzEiPg0KICAg
IC0gICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLS0gIDxw
cm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0ayBLZXJuZWwgQ29uZmln
dXJhdG9yPC9wcm9wZXJ0eT4NCiAgICAtKyAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFuc2xh
dGFibGU9InllcyI+R3RrIFVuaWtyYWZ0IENvbmZpZ3VyYXRvcjwvcHJvcGVydHk+DQogICAgLSAg
IDxwcm9wZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lORE9XX1RPUExFVkVMPC9wcm9wZXJ0eT4NCiAg
ICAtICAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfTk9ORTwv
cHJvcGVydHk+DQogICAgLSAgIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+RmFsc2U8L3Byb3BlcnR5
Pg0KICAgIC1JbmRleDoga2NvbmZpZy9tY29uZi5jDQogICAgLT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAtLS0t
IGtjb25maWcub3JpZy9tY29uZi5jCTIwMTMtMTItMjcgMjI6MTQ6MzIuMzk1NjI5ODQzICswMTAw
DQogICAgLSsrKyBrY29uZmlnL21jb25mLmMJMjAxMy0xMi0yNyAyMjoxNDo0Mi4xNzkyNDQxNTMg
KzAxMDANCiAgICAtQEAgLTE3Niw5ICsxNzYsOSBAQA0KICAgIC0gCSJBcnJvdyBrZXlzIG5hdmln
YXRlIHRoZSBtZW51LiAgIg0KICAgIC0gCSI8RW50ZXI+IHNlbGVjdHMgc3VibWVudXMgLS0tPiAo
b3IgZW1wdHkgc3VibWVudXMgLS0tLSkuICAiDQogICAgLSAJIkhpZ2hsaWdodGVkIGxldHRlcnMg
YXJlIGhvdGtleXMuICAiDQogICAgLS0JIlByZXNzaW5nIDxZPiBpbmNsdWRlcywgPE4+IGV4Y2x1
ZGVzLCA8TT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuICAiDQogICAgLSsJIlByZXNzaW5nIDxZPiBz
ZWxlY3RlcyBhIGZlYXR1cmUsIHdoaWxlIDxOPiB3aWxsIGV4Y2x1ZGUgYSBmZWF0dXJlLiAgIg0K
ICAgIC0gCSJQcmVzcyA8RXNjPjxFc2M+IHRvIGV4aXQsIDw/PiBmb3IgSGVscCwgPC8+IGZvciBT
ZWFyY2guICAiDQogICAgLS0JIkxlZ2VuZDogWypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxN
PiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJsZSIpLA0KICAgIC0rCSJMZWdlbmQ6IFsqXSBmZWF0
dXJlIGlzIHNlbGVjdGVkICBbIF0gZmVhdHVyZSBpcyBleGNsdWRlZCIpLA0KICAgIC0gcmFkaW9s
aXN0X2luc3RydWN0aW9uc1tdID0gTl8oDQogICAgLSAJIlVzZSB0aGUgYXJyb3cga2V5cyB0byBu
YXZpZ2F0ZSB0aGlzIHdpbmRvdyBvciAiDQogICAgLSAJInByZXNzIHRoZSBob3RrZXkgb2YgdGhl
IGl0ZW0geW91IHdpc2ggdG8gc2VsZWN0ICINCiAgICAtQEAgLTk1OSw3ICs5NTksNyBAQA0KICAg
IC0gCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpDQogICAgLSAJCXJlcyA9IGRpYWxvZ195ZXNubyhO
VUxMLA0KICAgIC0gCQkJCSAgIF8oIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29uZmln
dXJhdGlvbj9cbiINCiAgICAtLQkJCQkgICAgICIoUHJlc3MgPEVTQz48RVNDPiB0byBjb250aW51
ZSBrZXJuZWwgY29uZmlndXJhdGlvbi4pIiksDQogICAgLSsJCQkJICAgICAiKFByZXNzIDxFU0M+
PEVTQz4gdG8gY29udGludWUgVW5pa3JhZnQgY29uZmlndXJhdGlvbi4pIiksDQogICAgLSAJCQkJ
ICAgNiwgNjApOw0KICAgIC0gCWVsc2UNCiAgICAtIAkJcmVzID0gLTE7DQogICAgLUluZGV4OiBr
Y29uZmlnL3pjb25mLnRhYi5jX3NoaXBwZWQNCiAgICAtPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIC0tLS0ga2Nv
bmZpZy5vcmlnL3pjb25mLnRhYi5jX3NoaXBwZWQJMjAxMy0xMi0yNyAyMjoxNDozMi4zOTU2Mjk4
NDMgKzAxMDANCiAgICAtKysrIGtjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZAkyMDEzLTEyLTI3
IDIyOjE0OjMyLjM5MTYzMDAwMCArMDEwMA0KICAgIC1AQCAtMjI5Nyw3ICsyMjk3LDcgQEANCiAg
ICAtIA0KICAgIC0gCXN5bV9pbml0KCk7DQogICAgLSAJX21lbnVfaW5pdCgpOw0KICAgIC0tCXJv
b3RtZW51LnByb21wdCA9IG1lbnVfYWRkX3Byb21wdChQX01FTlUsICJMaW51eCBLZXJuZWwgQ29u
ZmlndXJhdGlvbiIsIE5VTEwpOw0KICAgIC0rCXJvb3RtZW51LnByb21wdCA9IG1lbnVfYWRkX3By
b21wdChQX01FTlUsICJVbmlrcmFmdCBDb25maWd1cmF0aW9uIiwgTlVMTCk7DQogICAgLSANCiAg
ICAtIAlpZiAoZ2V0ZW52KCJaQ09ORl9ERUJVRyIpKQ0KICAgIC0gCQl6Y29uZmRlYnVnID0gMTsN
CiAgICAtSW5kZXg6IGtjb25maWcvemNvbmYueQ0KICAgIC09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgLS0tLSBr
Y29uZmlnLm9yaWcvemNvbmYueQkyMDEzLTEyLTI3IDIyOjE0OjMyLjM5NTYyOTg0MyArMDEwMA0K
ICAgIC0rKysga2NvbmZpZy96Y29uZi55CTIwMTMtMTItMjcgMjI6MTQ6MzIuMzkxNjMwMDAwICsw
MTAwDQogICAgLUBAIC00OTMsNyArNDkzLDcgQEANCiAgICAtIA0KICAgIC0gCXN5bV9pbml0KCk7
DQogICAgLSAJX21lbnVfaW5pdCgpOw0KICAgIC0tCXJvb3RtZW51LnByb21wdCA9IG1lbnVfYWRk
X3Byb21wdChQX01FTlUsICJMaW51eCBLZXJuZWwgQ29uZmlndXJhdGlvbiIsIE5VTEwpOw0KICAg
IC0rCXJvb3RtZW51LnByb21wdCA9IG1lbnVfYWRkX3Byb21wdChQX01FTlUsICJVbmlrcmFmdCBD
b25maWd1cmF0aW9uIiwgTlVMTCk7DQogICAgLSANCiAgICAtIAlpZiAoZ2V0ZW52KCJaQ09ORl9E
RUJVRyIpKQ0KICAgIC0gCQl6Y29uZmRlYnVnID0gMTsNCiAgICAtSW5kZXg6IGtjb25maWcvY29u
ZmRhdGEuYw0KICAgIC09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgLS0tLSBrY29uZmlnLm9yaWcvY29uZmRhdGEu
YwkyMDEzLTEyLTI3IDIyOjE0OjMyLjM5NTYyOTg0MyArMDEwMA0KICAgIC0rKysga2NvbmZpZy9j
b25mZGF0YS5jCTIwMTMtMTItMjcgMjI6MTQ6MzIuMzkxNjMwMDAwICswMTAwDQogICAgLUBAIC02
Myw3ICs2Myw3IEBADQogICAgLSANCiAgICAtIGNvbnN0IGNoYXIgKmNvbmZfZ2V0X2NvbmZpZ25h
bWUodm9pZCkNCiAgICAtIHsNCiAgICAtLQljaGFyICpuYW1lID0gZ2V0ZW52KCJLQ09ORklHX0NP
TkZJRyIpOw0KICAgIC0rCWNoYXIgKm5hbWUgPSBnZXRlbnYoIlVDX0NPTkZJRyIpOw0KICAgIC0g
DQogICAgLSAJcmV0dXJuIG5hbWUgPyBuYW1lIDogIi5jb25maWciOw0KICAgIC0gfQ0KICAgIC1J
bmRleDoga2NvbmZpZy9xY29uZi5jYw0KICAgIC09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgLS0tLSBrY29uZmln
Lm9yaWcvcWNvbmYuY2MJMjAxMy0xMi0yNyAyMjoxMjoxNS44MjUwMTM1NjcgKzAxMDANCiAgICAt
KysrIGtjb25maWcvcWNvbmYuY2MJMjAxMy0xMi0yNyAyMjoxNDo1Ny44MjY2MjczMDAgKzAxMDAN
CiAgICAtQEAgLTcwLDcgKzcwLDcgQEANCiAgICAtIH0NCiAgICAtIA0KICAgIC0gQ29uZmlnU2V0
dGluZ3M6OkNvbmZpZ1NldHRpbmdzKCkNCiAgICAtLQk6IFFTZXR0aW5ncygia2VybmVsLm9yZyIs
ICJxY29uZiIpDQogICAgLSsJOiBRU2V0dGluZ3MoImNucC5uZWNsYWIuZXUiLCAicWNvbmYiKQ0K
ICAgIC0gew0KICAgIC0gfQ0KICAgIC0gDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy9wYXRjaGVzLzA2LWJyLWJ1aWxkLXN5c3RlbS1pbnRlZ3JhdGlvbi5wYXRjaCBiL3N1cHBvcnQv
a2NvbmZpZy9wYXRjaGVzLzA2LWJyLWJ1aWxkLXN5c3RlbS1pbnRlZ3JhdGlvbi5wYXRjaA0KICAg
IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDNmYWEzOWUuLjAwMDAwMDANCiAg
ICAtLS0gYS9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNi1ici1idWlsZC1zeXN0ZW0taW50ZWdy
YXRpb24ucGF0Y2gNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMzUgKzAsMCBAQA0KICAg
IC0tLS0NCiAgICAtIE1ha2VmaWxlIHwgICAgOCArKysrLS0tLQ0KICAgIC0gMSBmaWxlIGNoYW5n
ZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkNCiAgICAtDQogICAgLUluZGV4OiBi
L01ha2VmaWxlDQogICAgLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAtLS0tIGEvTWFrZWZpbGUNCiAgICAtKysr
IGIvTWFrZWZpbGUNCiAgICAtQEAgLTE1OSwxMSArMTU5LDExIEBADQogICAgLSANCiAgICAtIGhv
c3Rwcm9ncy15IDo9IGNvbmYNCiAgICAtIA0KICAgIC0taWZlcSAoJChNQUtFQ01ER09BTFMpLG5j
b25maWcpDQogICAgLStpZmVxICgkKE1BS0VDTURHT0FMUyksbmNvbmYpDQogICAgLSAJaG9zdHBy
b2dzLXkgKz0gbmNvbmYNCiAgICAtIGVuZGlmDQogICAgLSANCiAgICAtLWlmZXEgKCQoTUFLRUNN
REdPQUxTKSxtZW51Y29uZmlnKQ0KICAgIC0raWZlcSAoJChNQUtFQ01ER09BTFMpLG1jb25mKQ0K
ICAgIC0gCWhvc3Rwcm9ncy15ICs9IG1jb25mDQogICAgLSBlbmRpZg0KICAgIC0gDQogICAgLUBA
IC0xNzEsMTAgKzE3MSwxMCBAQA0KICAgIC0gCWhvc3Rwcm9ncy15ICs9IGt4Z2V0dGV4dA0KICAg
IC0gZW5kaWYNCiAgICAtIA0KICAgIC0taWZlcSAoJChNQUtFQ01ER09BTFMpLHhjb25maWcpDQog
ICAgLStpZmVxICgkKE1BS0VDTURHT0FMUykscWNvbmYpDQogICAgLSAJcWNvbmYtdGFyZ2V0IDo9
IDENCiAgICAtIGVuZGlmDQogICAgLS1pZmVxICgkKE1BS0VDTURHT0FMUyksZ2NvbmZpZykNCiAg
ICAtK2lmZXEgKCQoTUFLRUNNREdPQUxTKSxnY29uZikNCiAgICAtIAlnY29uZi10YXJnZXQgOj0g
MQ0KICAgIC0gZW5kaWYNCiAgICAtIA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcv
cGF0Y2hlcy8xMC1ici1idWlsZC1zeXN0ZW0ucGF0Y2ggYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hl
cy8xMC1ici1idWlsZC1zeXN0ZW0ucGF0Y2gNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQN
CiAgICBpbmRleCBiZTZmZGEwLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL3Bh
dGNoZXMvMTAtYnItYnVpbGQtc3lzdGVtLnBhdGNoDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBA
IC0xLDgwICswLDAgQEANCiAgICAtLS0tDQogICAgLSBNYWtlZmlsZS5iciB8ICAgNTMgKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiAgICAtIGZv
by5oICAgICAgIHwgICAxMiArKysrKysrKysrKysNCiAgICAtIDIgZmlsZXMgY2hhbmdlZCwgNjUg
aW5zZXJ0aW9ucygrKQ0KICAgIC0NCiAgICAtSW5kZXg6IGIvTWFrZWZpbGUuYnINCiAgICAtPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KICAgIC0tLS0gL2Rldi9udWxsDQogICAgLSsrKyBiL01ha2VmaWxlLmJyDQogICAg
LUBAIC0wLDAgKzEsNTMgQEANCiAgICAtK3NyYyA6PSAuDQogICAgLSt0b3Bfc3JjZGlyPS4uLy4u
Lw0KICAgIC0rdG9wX2J1aWxkZGlyPS4uLy4uLw0KICAgIC0rc3JjdHJlZSA6PSAuDQogICAgLStv
YmogPz0gLg0KICAgIC0rDQogICAgLStpbmNsdWRlIE1ha2VmaWxlDQogICAgLSsjSE9TVENGTEFH
Uys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgNCiAgICAtKy1pbmNsdWRlICQob2JqKS8uZGVw
ZW5kDQogICAgLSskKG9iaikvLmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQ0KICAgIC0rCSQo
SE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+
L2Rldi9udWxsIHx8IDoNCiAgICAtKw0KICAgIC0rX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9z
dHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQ0KICAgIC0raG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFj
aCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkNCiAgICAtK2hvc3Qt
Y211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwNCiAgICAtKyAgICAgICAgICAg
JChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkNCiAgICAtK2hv
c3QtY3h4bXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXA0KICAgIC0rICAgICAg
ICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQ0KICAg
IC0raG9zdC1jb2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwk
KF9faG9zdHByb2dzKSwkKCQobSktb2JqcykpKSkNCiAgICAtK2hvc3QtY3h4b2JqcyA6PSAkKGFk
ZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSkt
Y3h4b2JqcykpKSkNCiAgICAtKw0KICAgIC0rSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAt
RENPTkZJR189XCJcIg0KICAgIC0rDQogICAgLSskKGhvc3QtY3NpbmdsZSk6ICU6ICUuYw0KICAg
IC0rCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZM
QUdTXyRAKSAkPCAtbyAkKG9iaikvJEANCiAgICAtKw0KICAgIC0rJChob3N0LWNtdWx0aSk6ICU6
ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikNCiAgICAtKwkkKEhPU1RDQykgJChIT1NUX0VY
VFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChv
YmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQA0K
ICAgIC0rDQogICAgLSskKGhvc3QtY3h4bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0
LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgIC0rCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZM
QUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikv
LCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAt
byAkKG9iaikvJEANCiAgICAtKw0KICAgIC0rJChvYmopLyUubzogJS5jDQogICAgLSsJJChIT1NU
Q0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikp
IC1jICQ8IC1vICRADQogICAgLSsNCiAgICAtKyQob2JqKS8lLm86ICQob2JqKS8lLmMNCiAgICAt
KwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFH
U18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICAtKw0KICAgIC0rJChvYmopLyUubzogJS5jYw0KICAg
IC0rCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hY
RkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAgLSsNCiAgICAtKyQob2JqKS8lOjogJChzcmMp
LyVfc2hpcHBlZA0KICAgIC0rCSQoUSljYXQgJDwgPiAkQA0KICAgIC0rDQogICAgLStjbGVhbjoN
CiAgICAtKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkNCiAg
ICAtK2Rpc3RjbGVhbjogY2xlYW4NCiAgICAtKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmop
LywkKGx4ZGlhbG9nKSAkKGNvbmYtb2JqcykgJChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpz
KSBcDQogICAgLSsJCSQoaG9zdHByb2dzLXkpICQocWNvbmYtY3h4b2JqcykgJChxY29uZi1vYmpz
KSAkKGdjb25mLW9ianMpIFwNCiAgICAtKwkJbWNvbmYgLmRlcGVuZCkNCiAgICAtKw0KICAgIC0r
Rk9SQ0U6DQogICAgLSsuUEhPTlk6IEZPUkNFIGNsZWFuIGRpc3RjbGVhbg0KICAgIC1JbmRleDog
Yi9mb28uaA0KICAgIC09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgLS0tLSAvZGV2L251bGwNCiAgICAtKysrIGIv
Zm9vLmgNCiAgICAtQEAgLTAsMCArMSwxMiBAQA0KICAgIC0rI2lmbmRlZiBfX0tDT05GSUdfRk9P
X0gNCiAgICAtKyNkZWZpbmUgX19LQ09ORklHX0ZPT19IDQogICAgLSsNCiAgICAtKyNpZm5kZWYg
X19BUFBMRV9fDQogICAgLSsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4NCiAgICAtKyNlbmRpZg0KICAg
IC0rI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgIC0rDQogICAgLSsjaWZuZGVmIFBBVEhfTUFYDQog
ICAgLSsjZGVmaW5lIFBBVEhfTUFYIDEwMjQNCiAgICAtKyNlbmRpZg0KICAgIC0rI2VuZGlmIC8q
IF9fS0NPTkZJR19GT09fSCAqLw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcGF0
Y2hlcy8xMS11c2UtbWt0ZW1wLWZvci1seGRpYWxvZy5wYXRjaCBiL3N1cHBvcnQva2NvbmZpZy9w
YXRjaGVzLzExLXVzZS1ta3RlbXAtZm9yLWx4ZGlhbG9nLnBhdGNoDQogICAgZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggYjM4YWYyNi4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBv
cnQva2NvbmZpZy9wYXRjaGVzLzExLXVzZS1ta3RlbXAtZm9yLWx4ZGlhbG9nLnBhdGNoDQogICAg
KysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDE3ICswLDAgQEANCiAgICAtLS0tDQogICAgLSBseGRp
YWxvZy9jaGVjay1seGRpYWxvZy5zaCB8ICAgIDIgKy0NCiAgICAtIDEgZmlsZSBjaGFuZ2VkLCAx
IGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQ0KICAgIC0NCiAgICAtSW5kZXg6IGIvbHhkaWFs
b2cvY2hlY2stbHhkaWFsb2cuc2gNCiAgICAtPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIC0tLS0gYS9seGRpYWxv
Zy9jaGVjay1seGRpYWxvZy5zaA0KICAgIC0rKysgYi9seGRpYWxvZy9jaGVjay1seGRpYWxvZy5z
aA0KICAgIC1AQCAtMzYsNyArMzYsNyBAQA0KICAgIC0gfQ0KICAgIC0gDQogICAgLSAjIFRlbXAg
ZmlsZSwgdHJ5IHRvIGNsZWFuIHVwIGFmdGVyIHVzDQogICAgLS10bXA9Lmx4ZGlhbG9nLnRtcA0K
ICAgIC0rdG1wPSQobWt0ZW1wKQ0KICAgIC0gdHJhcCAicm0gLWYgJHRtcCIgMCAxIDIgMyAxNQ0K
ICAgIC0gDQogICAgLSAjIENoZWNrIGlmIHdlIGNhbiBsaW5rIHRvIG5jdXJzZXMNCiAgICBkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMTItZml4LWdsYWRlLWZpbGUtcGF0aC5w
YXRjaCBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzEyLWZpeC1nbGFkZS1maWxlLXBhdGgucGF0
Y2gNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBhNTc3N2RhLi4wMDAw
MDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMTItZml4LWdsYWRlLWZpbGUt
cGF0aC5wYXRjaA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxNyArMCwwIEBADQogICAg
LS0tLQ0KICAgIC0gZ2NvbmYuYyB8ICAgIDIgKy0NCiAgICAtIDEgZmlsZSBjaGFuZ2VkLCAxIGlu
c2VydGlvbigrKSwgMSBkZWxldGlvbigtKQ0KICAgIC0NCiAgICAtSW5kZXg6IGIvZ2NvbmYuYw0K
ICAgIC09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQogICAgLS0tLSBhL2djb25mLmMNCiAgICAtKysrIGIvZ2NvbmYuYw0K
ICAgIC1AQCAtMTQ4Niw3ICsxNDg2LDcgQEANCiAgICAtIAkvKiBEZXRlcm1pbmUgR1VJIHBhdGgg
Ki8NCiAgICAtIAllbnYgPSBnZXRlbnYoU1JDVFJFRSk7DQogICAgLSAJaWYgKGVudikNCiAgICAt
LQkJZ2xhZGVfZmlsZSA9IGdfc3RyY29uY2F0KGVudiwgIi9zY3JpcHRzL2tjb25maWcvZ2NvbmYu
Z2xhZGUiLCBOVUxMKTsNCiAgICAtKwkJZ2xhZGVfZmlsZSA9IGdfc3RyY29uY2F0KGVudiwgIi9z
dXBwb3J0L2tjb25maWcvZ2NvbmYuZ2xhZGUiLCBOVUxMKTsNCiAgICAtIAllbHNlIGlmIChhdlsw
XVswXSA9PSAnLycpDQogICAgLSAJCWdsYWRlX2ZpbGUgPSBnX3N0cmNvbmNhdChhdlswXSwgIi5n
bGFkZSIsIE5VTEwpOw0KICAgIC0gCWVsc2UNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnL3BhdGNoZXMvMTQtc3VwcG9ydC1vdXQtb2YtdHJlZS1jb25maWcucGF0Y2ggYi9zdXBwb3J0
L2tjb25maWcvcGF0Y2hlcy8xNC1zdXBwb3J0LW91dC1vZi10cmVlLWNvbmZpZy5wYXRjaA0KICAg
IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGVjMzEzNGYuLjAwMDAwMDANCiAg
ICAtLS0gYS9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8xNC1zdXBwb3J0LW91dC1vZi10cmVlLWNv
bmZpZy5wYXRjaA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwyMDcgKzAsMCBAQA0KICAg
IC0tLS0NCiAgICAtIGNvbmYuYyAgICAgfCAgICAxIA0KICAgIC0gY29uZmRhdGEuYyB8ICAgNjIg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t
LS0tLQ0KICAgIC0gdXRpbC5jICAgICB8ICAgMTYgKysrKysrKysrKysrKy0tDQogICAgLSAzIGZp
bGVzIGNoYW5nZWQsIDYxIGluc2VydGlvbnMoKyksIDE4IGRlbGV0aW9ucygtKQ0KICAgIC0NCiAg
ICAtSW5kZXg6IGIvY29uZi5jDQogICAgLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAtLS0tIGEvY29uZi5jDQog
ICAgLSsrKyBiL2NvbmYuYw0KICAgIC1AQCAtNTU4LDcgKzU1OCw2IEBADQogICAgLSAJfQ0KICAg
IC0gCW5hbWUgPSBhdltvcHRpbmRdOw0KICAgIC0gCWNvbmZfcGFyc2UobmFtZSk7DQogICAgLS0J
Ly96Y29uZmR1bXAoc3Rkb3V0KTsNCiAgICAtIAlpZiAoc3luY19rY29uZmlnKSB7DQogICAgLSAJ
CW5hbWUgPSBjb25mX2dldF9jb25maWduYW1lKCk7DQogICAgLSAJCWlmIChzdGF0KG5hbWUsICZ0
bXBzdGF0KSkgew0KICAgIC1JbmRleDogYi9jb25mZGF0YS5jDQogICAgLT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAg
ICAtLS0tIGEvY29uZmRhdGEuYw0KICAgIC0rKysgYi9jb25mZGF0YS5jDQogICAgLUBAIC0xMyw2
ICsxMyw3IEBADQogICAgLSAjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSAjaW5jbHVkZSA8dGlt
ZS5oPg0KICAgIC0gI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgIC0rI2luY2x1ZGUgPGxpYmdlbi5o
Pg0KICAgIC0gDQogICAgLSAjaW5jbHVkZSAibGtjLmgiDQogICAgLSANCiAgICAtQEAgLTcwLDkg
KzcxLDcgQEANCiAgICAtIA0KICAgIC0gY29uc3QgY2hhciAqY29uZl9nZXRfYXV0b2NvbmZpZ19u
YW1lKHZvaWQpDQogICAgLSB7DQogICAgLS0JY2hhciAqbmFtZSA9IGdldGVudigiS0NPTkZJR19B
VVRPQ09ORklHIik7DQogICAgLS0NCiAgICAtLQlyZXR1cm4gbmFtZSA/IG5hbWUgOiAiaW5jbHVk
ZS9jb25maWcvYXV0by5jb25mIjsNCiAgICAtKwlyZXR1cm4gZ2V0ZW52KCJLQ09ORklHX0FVVE9D
T05GSUciKTsNCiAgICAtIH0NCiAgICAtIA0KICAgIC0gc3RhdGljIGNoYXIgKmNvbmZfZXhwYW5k
X3ZhbHVlKGNvbnN0IGNoYXIgKmluKQ0KICAgIC1AQCAtNzQyLDYgKzc0MSw5IEBADQogICAgLSAJ
Y2hhciBkaXJuYW1lW1BBVEhfTUFYKzFdLCB0bXBuYW1lW1BBVEhfTUFYKzFdLCBuZXduYW1lW1BB
VEhfTUFYKzFdOw0KICAgIC0gCWNoYXIgKmVudjsNCiAgICAtIA0KICAgIC0rCWlmICghbmFtZSkN
CiAgICAtKwkJbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsNCiAgICAtKw0KICAgIC0gCWRp
cm5hbWVbMF0gPSAwOw0KICAgIC0gCWlmIChuYW1lICYmIG5hbWVbMF0pIHsNCiAgICAtIAkJc3Ry
dWN0IHN0YXQgc3Q7DQogICAgLUBAIC04MzYsNiArODM4LDcgQEANCiAgICAtIHsNCiAgICAtIAlj
b25zdCBjaGFyICpuYW1lOw0KICAgIC0gCWNoYXIgcGF0aFtQQVRIX01BWCsxXTsNCiAgICAtKwlj
aGFyICpvcHdkLCAqZGlyLCAqX25hbWU7DQogICAgLSAJY2hhciAqcywgKmQsIGM7DQogICAgLSAJ
c3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0gCXN0cnVjdCBzdGF0IHNiOw0KICAgIC1AQCAtODQ0
LDggKzg0NywyMCBAQA0KICAgIC0gCW5hbWUgPSBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKTsN
CiAgICAtIAljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX0FVVE8pOw0KICAgIC0gDQogICAg
LS0JaWYgKGNoZGlyKCJpbmNsdWRlL2NvbmZpZyIpKQ0KICAgIC0tCQlyZXR1cm4gMTsNCiAgICAt
KwlvcHdkID0gbWFsbG9jKDI1Nik7DQogICAgLSsJX25hbWUgPSBzdHJkdXAobmFtZSk7DQogICAg
LSsJaWYgKG9wd2QgPT0gTlVMTCB8fCBfbmFtZSA9PSBOVUxMKQ0KICAgIC0rIAkJcmV0dXJuIDE7
DQogICAgLSsJb3B3ZCA9IGdldGN3ZChvcHdkLCAyNTYpOw0KICAgIC0rCWRpciA9IGRpcm5hbWUo
X25hbWUpOw0KICAgIC0rCWlmIChkaXIgPT0gTlVMTCkgew0KICAgIC0rCQlyZXMgPSAxOw0KICAg
IC0rCQlnb3RvIGVycjsNCiAgICAtKwl9DQogICAgLSsJaWYgKGNoZGlyKGRpcikpIHsNCiAgICAt
KwkJcmVzID0gMTsNCiAgICAtKwkJZ290byBlcnI7DQogICAgLSsJfQ0KICAgIC0gDQogICAgLSAJ
cmVzID0gMDsNCiAgICAtIAlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7DQogICAgLUBAIC05Mzgs
OSArOTUzLDExIEBADQogICAgLSAJCWNsb3NlKGZkKTsNCiAgICAtIAl9DQogICAgLSBvdXQ6DQog
ICAgLS0JaWYgKGNoZGlyKCIuLi8uLiIpKQ0KICAgIC0tCQlyZXR1cm4gMTsNCiAgICAtLQ0KICAg
IC0rCWlmIChjaGRpcihvcHdkKSkNCiAgICAtKwkJcmVzID0gMTsNCiAgICAtK2VycjoNCiAgICAt
KwlmcmVlKG9wd2QpOw0KICAgIC0rCWZyZWUoX25hbWUpOw0KICAgIC0gCXJldHVybiByZXM7DQog
ICAgLSB9DQogICAgLSANCiAgICAtQEAgLTk1MCwyNSArOTY3LDM4IEBADQogICAgLSAJY29uc3Qg
Y2hhciAqbmFtZTsNCiAgICAtIAlGSUxFICpvdXQsICp0cmlzdGF0ZSwgKm91dF9oOw0KICAgIC0g
CWludCBpOw0KICAgIC0rCWNoYXIgZGlyW1BBVEhfTUFYKzFdLCBidWZbUEFUSF9NQVgrMV07DQog
ICAgLSsJY2hhciAqczsNCiAgICAtKw0KICAgIC0rCXN0cmNweShkaXIsIGNvbmZfZ2V0X2NvbmZp
Z25hbWUoKSk7DQogICAgLSsJcyA9IHN0cnJjaHIoZGlyLCAnLycpOw0KICAgIC0rCWlmIChzKQ0K
ICAgIC0rCQlzWzFdID0gMDsNCiAgICAtKwllbHNlDQogICAgLSsJCWRpclswXSA9IDA7DQogICAg
LSANCiAgICAtIAlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7DQogICAgLSANCiAgICAtLQlmaWxlX3dy
aXRlX2RlcCgiaW5jbHVkZS9jb25maWcvYXV0by5jb25mLmNtZCIpOw0KICAgIC0rCXNwcmludGYo
YnVmLCAiJXMuY29uZmlnLmNtZCIsIGRpcik7DQogICAgLSsJZmlsZV93cml0ZV9kZXAoYnVmKTsN
CiAgICAtIA0KICAgIC0gCWlmIChjb25mX3NwbGl0X2NvbmZpZygpKQ0KICAgIC0gCQlyZXR1cm4g
MTsNCiAgICAtIA0KICAgIC0tCW91dCA9IGZvcGVuKCIudG1wY29uZmlnIiwgInciKTsNCiAgICAt
KwlzcHJpbnRmKGJ1ZiwgIiVzLnRtcGNvbmZpZyIsIGRpcik7DQogICAgLSsJb3V0ID0gZm9wZW4o
YnVmLCAidyIpOw0KICAgIC0gCWlmICghb3V0KQ0KICAgIC0gCQlyZXR1cm4gMTsNCiAgICAtIA0K
ICAgIC0tCXRyaXN0YXRlID0gZm9wZW4oIi50bXBjb25maWdfdHJpc3RhdGUiLCAidyIpOw0KICAg
IC0rCXNwcmludGYoYnVmLCAiJXMudG1wY29uZmlnX3RyaXN0YXRlIiwgZGlyKTsNCiAgICAtKwl0
cmlzdGF0ZSA9IGZvcGVuKGJ1ZiwgInciKTsNCiAgICAtIAlpZiAoIXRyaXN0YXRlKSB7DQogICAg
LSAJCWZjbG9zZShvdXQpOw0KICAgIC0gCQlyZXR1cm4gMTsNCiAgICAtIAl9DQogICAgLSANCiAg
ICAtLQlvdXRfaCA9IGZvcGVuKCIudG1wY29uZmlnLmgiLCAidyIpOw0KICAgIC0rCXNwcmludGYo
YnVmLCAiJXMudG1wY29uZmlnLmgiLCBkaXIpOw0KICAgIC0rCW91dF9oID0gZm9wZW4oYnVmLCAi
dyIpOw0KICAgIC0gCWlmICghb3V0X2gpIHsNCiAgICAtIAkJZmNsb3NlKG91dCk7DQogICAgLSAJ
CWZjbG9zZSh0cmlzdGF0ZSk7DQogICAgLUBAIC0xMDAwLDE5ICsxMDMwLDIyIEBADQogICAgLSAJ
bmFtZSA9IGdldGVudigiS0NPTkZJR19BVVRPSEVBREVSIik7DQogICAgLSAJaWYgKCFuYW1lKQ0K
ICAgIC0gCQluYW1lID0gImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgiOw0KICAgIC0tCWlm
IChyZW5hbWUoIi50bXBjb25maWcuaCIsIG5hbWUpKQ0KICAgIC0rCXNwcmludGYoYnVmLCAiJXMu
dG1wY29uZmlnLmgiLCBkaXIpOw0KICAgIC0rCWlmIChyZW5hbWUoYnVmLCBuYW1lKSkNCiAgICAt
IAkJcmV0dXJuIDE7DQogICAgLSAJbmFtZSA9IGdldGVudigiS0NPTkZJR19UUklTVEFURSIpOw0K
ICAgIC0gCWlmICghbmFtZSkNCiAgICAtIAkJbmFtZSA9ICJpbmNsdWRlL2NvbmZpZy90cmlzdGF0
ZS5jb25mIjsNCiAgICAtLQlpZiAocmVuYW1lKCIudG1wY29uZmlnX3RyaXN0YXRlIiwgbmFtZSkp
DQogICAgLSsJc3ByaW50ZihidWYsICIlcy50bXBjb25maWdfdHJpc3RhdGUiLCBkaXIpOw0KICAg
IC0rCWlmIChyZW5hbWUoYnVmLCBuYW1lKSkNCiAgICAtIAkJcmV0dXJuIDE7DQogICAgLSAJbmFt
ZSA9IGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpOw0KICAgIC0gCS8qDQogICAgLSAJICogVGhp
cyBtdXN0IGJlIHRoZSBsYXN0IHN0ZXAsIGtidWlsZCBoYXMgYSBkZXBlbmRlbmN5IG9uIGF1dG8u
Y29uZg0KICAgIC0gCSAqIGFuZCB0aGlzIG1hcmtzIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24g
b2YgdGhlIHByZXZpb3VzIHN0ZXBzLg0KICAgIC0gCSAqLw0KICAgIC0tCWlmIChyZW5hbWUoIi50
bXBjb25maWciLCBuYW1lKSkNCiAgICAtKwlzcHJpbnRmKGJ1ZiwgIiVzLnRtcGNvbmZpZyIsIGRp
cik7DQogICAgLSsJaWYgKHJlbmFtZShidWYsIG5hbWUpKQ0KICAgIC0gCQlyZXR1cm4gMTsNCiAg
ICAtIA0KICAgIC0gCXJldHVybiAwOw0KICAgIC1JbmRleDogYi91dGlsLmMNCiAgICAtPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KICAgIC0tLS0gYS91dGlsLmMNCiAgICAtKysrIGIvdXRpbC5jDQogICAgLUBAIC0zNCw2
ICszNCw4IEBADQogICAgLSAvKiB3cml0ZSBhIGRlcGVuZGVuY3kgZmlsZSBhcyB1c2VkIGJ5IGti
dWlsZCB0byB0cmFjayBkZXBlbmRlbmNpZXMgKi8NCiAgICAtIGludCBmaWxlX3dyaXRlX2RlcChj
b25zdCBjaGFyICpuYW1lKQ0KICAgIC0gew0KICAgIC0rCWNoYXIgKnN0cjsNCiAgICAtKwljaGFy
IGJ1ZltQQVRIX01BWCsxXSwgYnVmMltQQVRIX01BWCsxXSwgZGlyW1BBVEhfTUFYKzFdOw0KICAg
IC0gCXN0cnVjdCBzeW1ib2wgKnN5bSwgKmVudl9zeW07DQogICAgLSAJc3RydWN0IGV4cHIgKmU7
DQogICAgLSAJc3RydWN0IGZpbGUgKmZpbGU7DQogICAgLUBAIC00MSw3ICs0MywxNiBAQA0KICAg
IC0gDQogICAgLSAJaWYgKCFuYW1lKQ0KICAgIC0gCQluYW1lID0gIi5rY29uZmlnLmQiOw0KICAg
IC0tCW91dCA9IGZvcGVuKCIuLmNvbmZpZy50bXAiLCAidyIpOw0KICAgIC0rDQogICAgLSsJc3Ry
Y3B5KGRpciwgY29uZl9nZXRfY29uZmlnbmFtZSgpKTsNCiAgICAtKwlzdHIgPSBzdHJyY2hyKGRp
ciwgJy8nKTsNCiAgICAtKwlpZiAoc3RyKQ0KICAgIC0rCQlzdHJbMV0gPSAwOw0KICAgIC0rCWVs
c2UNCiAgICAtKwkJZGlyWzBdID0gMDsNCiAgICAtKw0KICAgIC0rCXNwcmludGYoYnVmLCAiJXMu
LmNvbmZpZy50bXAiLCBkaXIpOw0KICAgIC0rCW91dCA9IGZvcGVuKGJ1ZiwgInciKTsNCiAgICAt
IAlpZiAoIW91dCkNCiAgICAtIAkJcmV0dXJuIDE7DQogICAgLSAJZnByaW50ZihvdXQsICJkZXBz
X2NvbmZpZyA6PSBcXFxuIik7DQogICAgLUBAIC03Miw3ICs4Myw4IEBADQogICAgLSANCiAgICAt
IAlmcHJpbnRmKG91dCwgIlxuJChkZXBzX2NvbmZpZyk6IDtcbiIpOw0KICAgIC0gCWZjbG9zZShv
dXQpOw0KICAgIC0tCXJlbmFtZSgiLi5jb25maWcudG1wIiwgbmFtZSk7DQogICAgLSsJc3ByaW50
ZihidWYyLCAiJXMlcyIsIGRpciwgbmFtZSk7DQogICAgLSsJcmVuYW1lKGJ1ZiwgYnVmMik7DQog
ICAgLSAJcmV0dXJuIDA7DQogICAgLSB9DQogICAgLSANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3BhdGNoZXMvMTUtZml4LXFjb25mLW1vYy1ydWxlLnBhdGNoIGIvc3VwcG9ydC9r
Y29uZmlnL3BhdGNoZXMvMTUtZml4LXFjb25mLW1vYy1ydWxlLnBhdGNoDQogICAgZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggYzE4NDhkNy4uMDAwMDAwMA0KICAgIC0tLSBhL3N1
cHBvcnQva2NvbmZpZy9wYXRjaGVzLzE1LWZpeC1xY29uZi1tb2MtcnVsZS5wYXRjaA0KICAgICsr
KyAvZGV2L251bGwNCiAgICBAQCAtMSwyNCArMCwwIEBADQogICAgLUZpeCB0aGUgcnVsZSB0aGF0
IGdlbmVyYXRlcyB0aGUgLm1vYyBmaWxlDQogICAgLQ0KICAgIC1UaGUgTGludXgga2VybmVsIGhh
cyBhICJjbWQiIG1ha2UgZnVuY3Rpb24sIGJ1dCB3ZSBkb24ndCBoYXZlIGl0IGluDQogICAgLUJ1
aWxkcm9vdCwgc28gd2UgbmVlZCB0byBhZGp1c3QgdGhpcyBydWxlLg0KICAgIC0NCiAgICAtU2ln
bmVkLW9mZi1ieTogVGhvbWFzIFBldGF6em9uaSA8dGhvbWFzLnBldGF6em9uaUBmcmVlLWVsZWN0
cm9ucy5jb20+DQogICAgLQ0KICAgIC1JbmRleDogYi9NYWtlZmlsZQ0KICAgIC09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQogICAgLS0tLSBhL01ha2VmaWxlDQogICAgLSsrKyBiL01ha2VmaWxlDQogICAgLUBAIC0zMDks
MTEgKzMwOSw4IEBADQogICAgLSANCiAgICAtICQob2JqKS9xY29uZi5vOiAkKG9iaikvcWNvbmYu
bW9jDQogICAgLSANCiAgICAtLXF1aWV0X2NtZF9tb2MgPSBNT0MgICAgICRADQogICAgLS0gICAg
ICBjbWRfbW9jID0gJChLQ19RVF9NT0MpIC1pICQ8IC1vICRADQogICAgLS0NCiAgICAtICQob2Jq
KS8lLm1vYzogJChzcmMpLyUuaCAkKG9iaikvLnRtcF9xdGNoZWNrDQogICAgLS0JJChjYWxsIGNt
ZCxtb2MpDQogICAgLSsJJChLQ19RVF9NT0MpIC1pICQ8IC1vICRADQogICAgLSANCiAgICAtICMg
RXh0cmFjdCBnY29uZiBtZW51IGl0ZW1zIGZvciBJMThOIHN1cHBvcnQNCiAgICAtICQob2JqKS9n
Y29uZi5nbGFkZS5oOiAkKG9iaikvZ2NvbmYuZ2xhZGUNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3BhdGNoZXMvMTcta2NvbmZpZy1seGRpYWxvZy1nZXQtbmN1cnNlcy1DRkxBR1Mt
d2l0aC1wa2ctY29uZmlnLnBhdGNoIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMTcta2NvbmZp
Zy1seGRpYWxvZy1nZXQtbmN1cnNlcy1DRkxBR1Mtd2l0aC1wa2ctY29uZmlnLnBhdGNoDQogICAg
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMWViNDhlZi4uMDAwMDAwMA0KICAg
IC0tLSBhL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzE3LWtjb25maWctbHhkaWFsb2ctZ2V0LW5j
dXJzZXMtQ0ZMQUdTLXdpdGgtcGtnLWNvbmZpZy5wYXRjaA0KICAgICsrKyAvZGV2L251bGwNCiAg
ICBAQCAtMSw1MCArMCwwIEBADQogICAgLUZyb20gYmU4YWYyZDU0YTY2OTExNjkzZWRkYzU1NmU0
ZjdhODY2NjcwMDgyYiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDENCiAgICAtRnJvbTogPT9VVEYt
OD9xP0JqPUMzPUI4cm49MjBGb3JzbWFuPz0gPGJqb3JuLmZvcnNtYW5AZ21haWwuY29tPg0KICAg
IC1EYXRlOiBTdW4sIDE0IFNlcCAyMDE0IDEyOjU3OjUwICswMjAwDQogICAgLVN1YmplY3Q6IFtQ
QVRDSF0ga2NvbmZpZy9seGRpYWxvZzogZ2V0IG5jdXJzZXMgQ0ZMQUdTIHdpdGggcGtnLWNvbmZp
Zw0KICAgIC1NSU1FLVZlcnNpb246IDEuMA0KICAgIC1Db250ZW50LVR5cGU6IHRleHQvcGxhaW47
IGNoYXJzZXQ9VVRGLTgNCiAgICAtQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdA0KICAg
IC0NCiAgICAtVGhpcyBtYWtlcyAibWFrZSBtZW51Y29uZmlnIiBhbHNvIHdvcmsgb24gc3lzdGVt
cyB3aGVyZSBuY3Vyc2VzIGlzIG5vdA0KICAgIC1pbnN0YWxsZWQgaW4gYSBzdGFuZGFyZCBsb2Nh
dGlvbiAoc3VjaCBhcyBvbiBOaXhPUykuDQogICAgLQ0KICAgIC1UaGlzIHBhdGNoIGNoYW5nZXMg
Y2NmbGFncygpIHNvIHRoYXQgaXQgdHJpZXMgcGtnLWNvbmZpZyBmaXJzdCwgYW5kIG9ubHkNCiAg
ICAtaWYgcGtnLWNvbmZpZyBmYWlscyBkb2VzIGl0IGdvIGJhY2sgdG8gdGhlIGZhbGxiYWNrL21h
bnVhbCBjaGVja3MuIFRoaXMNCiAgICAtaXMgdGhlIHNhbWUgYWxnb3JpdGhtIHRoYXQgbGRmbGFn
cygpIGFscmVhZHkgdXNlcy4NCiAgICAtDQogICAgLVNpZ25lZC1vZmYtYnk6IEJqw7hybiBGb3Jz
bWFuIDxiam9ybi5mb3JzbWFuQGdtYWlsLmNvbT4NCiAgICAtU2lnbmVkLW9mZi1ieTogTWljaGFs
IE1hcmVrIDxtbWFyZWtAc3VzZS5jej4NCiAgICAtLS0tDQogICAgLVtUaGlzIHBhdGNoIGlzIGFs
cmVhZHkgYXBwbGllZCB1cHN0cmVhbSAoaXMgcGFydCBvZiBsaW51eCB2My4xOCk6DQogICAgLWh0
dHBzOi8vZ2l0Lmtlcm5lbC5vcmcvY2dpdC9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4
LmdpdC9jb21taXQvP2lkPWJlOGFmMmQ1NGE2NjkxMTY5M2VkZGM1NTZlNGY3YTg2NjY3MDA4MmIN
CiAgICAtDQogICAgLUknbSBhZGRpbmcgdGhpcyBpbnN0ZWFkIG9mIGRvaW5nIGEgZnVsbCB1cHN0
cmVhbSBrY29uZmlnIHN5bmMgYmVjYXVzZQ0KICAgIC10aGVyZSB3YXMgYSBjb25mbGljdCBpbiBv
bmUgb2YgdGhlIEJ1aWxkcm9vdCBrY29uZmlnIHBhdGNoZXMgKGFnYWluc3QNCiAgICAtbGludXgg
My4xOC1yYzEpLCB3aGljaCBJIHdhcyB1bmFibGUgdG8gcmVzb2x2ZS4gSnVzdCBkcm9wIHRoaXMg
cGF0Y2ggbmV4dCB0aW1lDQogICAgLUJ1aWxkcm9vdCBrY29uZmlnIGlzIHN5bmNlZCBhZ2FpbnN0
IHVwc3RyZWFtLg0KICAgIC1dDQogICAgLQ0KICAgIC0gc2NyaXB0cy9rY29uZmlnL2x4ZGlhbG9n
L2NoZWNrLWx4ZGlhbG9nLnNoIHwgNiArKysrKy0NCiAgICAtIDEgZmlsZSBjaGFuZ2VkLCA1IGlu
c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCiAgICAtDQogICAgLWRpZmYgLS1naXQgYS9zY3Jp
cHRzL2tjb25maWcvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2ggYi9zY3JpcHRzL2tjb25maWcv
bHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gNCiAgICAtaW5kZXggOWQyYTRjNS4uNTA3NWViZiAx
MDA3NTUNCiAgICAtLS0tIGEvbHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gNCiAgICAtKysrIGIv
bHhkaWFsb2cvY2hlY2stbHhkaWFsb2cuc2gNCiAgICAtQEAgLTIxLDcgKzIxLDExIEBAIGxkZmxh
Z3MoKQ0KICAgIC0gIyBXaGVyZSBpcyBuY3Vyc2VzLmg/DQogICAgLSBjY2ZsYWdzKCkNCiAgICAt
IHsNCiAgICAtLQlpZiBbIC1mIC91c3IvaW5jbHVkZS9uY3Vyc2Vzdy9jdXJzZXMuaCBdOyB0aGVu
DQogICAgLSsJaWYgcGtnLWNvbmZpZyAtLWNmbGFncyBuY3Vyc2VzdyAyPi9kZXYvbnVsbDsgdGhl
bg0KICAgIC0rCQllY2hvICctRENVUlNFU19MT0M9IjxuY3Vyc2VzLmg+IiAtRE5DVVJTRVNfV0lE
RUNIQVI9MScNCiAgICAtKwllbGlmIHBrZy1jb25maWcgLS1jZmxhZ3MgbmN1cnNlcyAyPi9kZXYv
bnVsbDsgdGhlbg0KICAgIC0rCQllY2hvICctRENVUlNFU19MT0M9IjxuY3Vyc2VzLmg+IicNCiAg
ICAtKwllbGlmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L2N1cnNlcy5oIF07IHRoZW4NCiAg
ICAtIAkJZWNobyAnLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3cgLURDVVJTRVNfTE9DPSI8Y3Vyc2Vz
Lmg+IicNCiAgICAtIAkJZWNobyAnIC1ETkNVUlNFU19XSURFQ0hBUj0xJw0KICAgIC0gCWVsaWYg
WyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy9uY3Vyc2VzLmggXTsgdGhlbg0KICAgIC0tLSANCiAg
ICAtMi4xLjMNCiAgICAtDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVz
L3NlcmllcyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzL3Nlcmllcw0KICAgIGRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDQ3ZjFiOGUuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBw
b3J0L2tjb25maWcvcGF0Y2hlcy9zZXJpZXMNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEs
OCArMCwwIEBADQogICAgLTAxLWtjb25maWcta2VybmVsLXRvLWJ1aWxkcm9vdC5wYXRjaA0KICAg
IC0wNi1ici1idWlsZC1zeXN0ZW0taW50ZWdyYXRpb24ucGF0Y2gNCiAgICAtMTAtYnItYnVpbGQt
c3lzdGVtLnBhdGNoDQogICAgLTExLXVzZS1ta3RlbXAtZm9yLWx4ZGlhbG9nLnBhdGNoDQogICAg
LTEyLWZpeC1nbGFkZS1maWxlLXBhdGgucGF0Y2gNCiAgICAtMTQtc3VwcG9ydC1vdXQtb2YtdHJl
ZS1jb25maWcucGF0Y2gNCiAgICAtMTUtZml4LXFjb25mLW1vYy1ydWxlLnBhdGNoDQogICAgLTE3
LWtjb25maWctbHhkaWFsb2ctZ2V0LW5jdXJzZXMtQ0ZMQUdTLXdpdGgtcGtnLWNvbmZpZy5wYXRj
aA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcWNvbmYuY2MgYi9zdXBwb3J0L2tj
b25maWcvcWNvbmYuY2MNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA3
MGVmNWMwLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL3Fjb25mLmNjDQogICAg
KysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDE3OTUgKzAsMCBAQA0KICAgIC0vKg0KICAgIC0gKiBD
b3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQog
ICAgLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLg0KICAg
IC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxxZ2xvYmFsLmg+DQogICAgLQ0KICAgIC0jaWYg
UVRfVkVSU0lPTiA8IDB4MDQwMDAwDQogICAgLSNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgICAtI2lu
Y2x1ZGUgPHFtYWlud2luZG93Lmg+DQogICAgLSNpbmNsdWRlIDxxdmJveC5oPg0KICAgIC0jaW5j
bHVkZSA8cXZhbHVlbGlzdC5oPg0KICAgIC0jaW5jbHVkZSA8cXRleHRicm93c2VyLmg+DQogICAg
LSNpbmNsdWRlIDxxYWN0aW9uLmg+DQogICAgLSNpbmNsdWRlIDxxaGVhZGVyLmg+DQogICAgLSNp
bmNsdWRlIDxxZmlsZWRpYWxvZy5oPg0KICAgIC0jaW5jbHVkZSA8cWRyYWdvYmplY3QuaD4NCiAg
ICAtI2luY2x1ZGUgPHFwb3B1cG1lbnUuaD4NCiAgICAtI2Vsc2UNCiAgICAtI2luY2x1ZGUgPHEz
bWFpbndpbmRvdy5oPg0KICAgIC0jaW5jbHVkZSA8cTN2Ym94Lmg+DQogICAgLSNpbmNsdWRlIDxx
M3ZhbHVlbGlzdC5oPg0KICAgIC0jaW5jbHVkZSA8cTN0ZXh0YnJvd3Nlci5oPg0KICAgIC0jaW5j
bHVkZSA8cTNhY3Rpb24uaD4NCiAgICAtI2luY2x1ZGUgPHEzaGVhZGVyLmg+DQogICAgLSNpbmNs
dWRlIDxxM2ZpbGVkaWFsb2cuaD4NCiAgICAtI2luY2x1ZGUgPHEzZHJhZ29iamVjdC5oPg0KICAg
IC0jaW5jbHVkZSA8cTNwb3B1cG1lbnUuaD4NCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jaW5j
bHVkZSA8cWFwcGxpY2F0aW9uLmg+DQogICAgLSNpbmNsdWRlIDxxZGVza3RvcHdpZGdldC5oPg0K
ICAgIC0jaW5jbHVkZSA8cXRvb2xiYXIuaD4NCiAgICAtI2luY2x1ZGUgPHFsYXlvdXQuaD4NCiAg
ICAtI2luY2x1ZGUgPHFzcGxpdHRlci5oPg0KICAgIC0jaW5jbHVkZSA8cWxpbmVlZGl0Lmg+DQog
ICAgLSNpbmNsdWRlIDxxbGFiZWwuaD4NCiAgICAtI2luY2x1ZGUgPHFwdXNoYnV0dG9uLmg+DQog
ICAgLSNpbmNsdWRlIDxxbWVudWJhci5oPg0KICAgIC0jaW5jbHVkZSA8cW1lc3NhZ2Vib3guaD4N
CiAgICAtI2luY2x1ZGUgPHFyZWdleHAuaD4NCiAgICAtI2luY2x1ZGUgPHFldmVudC5oPg0KICAg
IC0NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5o
Ig0KICAgIC0jaW5jbHVkZSAicWNvbmYuaCINCiAgICAtDQogICAgLSNpbmNsdWRlICJxY29uZi5t
b2MiDQogICAgLSNpbmNsdWRlICJpbWFnZXMuYyINCiAgICAtDQogICAgLSNpZmRlZiBfDQogICAg
LSMgdW5kZWYgXw0KICAgIC0jIGRlZmluZSBfIHFnZXR0ZXh0DQogICAgLSNlbmRpZg0KICAgIC0N
CiAgICAtc3RhdGljIFFBcHBsaWNhdGlvbiAqY29uZmlnQXBwOw0KICAgIC1zdGF0aWMgQ29uZmln
U2V0dGluZ3MgKmNvbmZpZ1NldHRpbmdzOw0KICAgIC0NCiAgICAtUTNBY3Rpb24gKkNvbmZpZ01h
aW5XaW5kb3c6OnNhdmVBY3Rpb247DQogICAgLQ0KICAgIC1zdGF0aWMgaW5saW5lIFFTdHJpbmcg
cWdldHRleHQoY29uc3QgY2hhciogc3RyKQ0KICAgIC17DQogICAgLQlyZXR1cm4gUVN0cmluZzo6
ZnJvbUxvY2FsOEJpdChnZXR0ZXh0KHN0cikpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
aW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgUVN0cmluZyYgc3RyKQ0KICAgIC17DQogICAg
LQlyZXR1cm4gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChnZXR0ZXh0KHN0ci5sYXRpbjEoKSkpOw0K
ICAgIC19DQogICAgLQ0KICAgIC1Db25maWdTZXR0aW5nczo6Q29uZmlnU2V0dGluZ3MoKQ0KICAg
IC0JOiBRU2V0dGluZ3MoImNucC5uZWNsYWIuZXUiLCAicWNvbmYiKQ0KICAgIC17DQogICAgLX0N
CiAgICAtDQogICAgLS8qKg0KICAgIC0gKiBSZWFkcyBhIGxpc3Qgb2YgaW50ZWdlciB2YWx1ZXMg
ZnJvbSB0aGUgYXBwbGljYXRpb24gc2V0dGluZ3MuDQogICAgLSAqLw0KICAgIC1RM1ZhbHVlTGlz
dDxpbnQ+IENvbmZpZ1NldHRpbmdzOjpyZWFkU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBib29s
ICpvaykNCiAgICAtew0KICAgIC0JUTNWYWx1ZUxpc3Q8aW50PiByZXN1bHQ7DQogICAgLQlRU3Ry
aW5nTGlzdCBlbnRyeUxpc3QgPSByZWFkTGlzdEVudHJ5KGtleSwgb2spOw0KICAgIC0JUVN0cmlu
Z0xpc3Q6Okl0ZXJhdG9yIGl0Ow0KICAgIC0NCiAgICAtCWZvciAoaXQgPSBlbnRyeUxpc3QuYmVn
aW4oKTsgaXQgIT0gZW50cnlMaXN0LmVuZCgpOyArK2l0KQ0KICAgIC0JCXJlc3VsdC5wdXNoX2Jh
Y2soKCppdCkudG9JbnQoKSk7DQogICAgLQ0KICAgIC0JcmV0dXJuIHJlc3VsdDsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtLyoqDQogICAgLSAqIFdyaXRlcyBhIGxpc3Qgb2YgaW50ZWdlciB2YWx1ZXMg
dG8gdGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzLg0KICAgIC0gKi8NCiAgICAtYm9vbCBDb25maWdT
ZXR0aW5nczo6d3JpdGVTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGNvbnN0IFEzVmFsdWVMaXN0
PGludD4mIHZhbHVlKQ0KICAgIC17DQogICAgLQlRU3RyaW5nTGlzdCBzdHJpbmdMaXN0Ow0KICAg
IC0JUTNWYWx1ZUxpc3Q8aW50Pjo6Q29uc3RJdGVyYXRvciBpdDsNCiAgICAtDQogICAgLQlmb3Ig
KGl0ID0gdmFsdWUuYmVnaW4oKTsgaXQgIT0gdmFsdWUuZW5kKCk7ICsraXQpDQogICAgLQkJc3Ry
aW5nTGlzdC5wdXNoX2JhY2soUVN0cmluZzo6bnVtYmVyKCppdCkpOw0KICAgIC0JcmV0dXJuIHdy
aXRlRW50cnkoa2V5LCBzdHJpbmdMaXN0KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8q
DQogICAgLSAqIHNldCB0aGUgbmV3IGRhdGENCiAgICAtICogVE9ETyBjaGVjayB0aGUgdmFsdWUN
CiAgICAtICovDQogICAgLXZvaWQgQ29uZmlnSXRlbTo6b2tSZW5hbWUoaW50IGNvbCkNCiAgICAt
ew0KICAgIC0JUGFyZW50Ojpva1JlbmFtZShjb2wpOw0KICAgIC0Jc3ltX3NldF9zdHJpbmdfdmFs
dWUobWVudS0+c3ltLCB0ZXh0KGRhdGFDb2xJZHgpLmxhdGluMSgpKTsNCiAgICAtCWxpc3RWaWV3
KCktPnVwZGF0ZUxpc3QodGhpcyk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIHVw
ZGF0ZSB0aGUgZGlzcGxheWVkIG9mIGEgbWVudSBlbnRyeQ0KICAgIC0gKi8NCiAgICAtdm9pZCBD
b25maWdJdGVtOjp1cGRhdGVNZW51KHZvaWQpDQogICAgLXsNCiAgICAtCUNvbmZpZ0xpc3QqIGxp
c3Q7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sKiBzeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnBy
b3A7DQogICAgLQlRU3RyaW5nIHByb21wdDsNCiAgICAtCWludCB0eXBlOw0KICAgIC0JdHJpc3Rh
dGUgZXhwcjsNCiAgICAtDQogICAgLQlsaXN0ID0gbGlzdFZpZXcoKTsNCiAgICAtCWlmIChnb1Bh
cmVudCkgew0KICAgIC0JCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPm1lbnVCYWNrUGl4
KTsNCiAgICAtCQlwcm9tcHQgPSAiLi4iOw0KICAgIC0JCWdvdG8gc2V0X3Byb21wdDsNCiAgICAt
CX0NCiAgICAtDQogICAgLQlzeW0gPSBtZW51LT5zeW07DQogICAgLQlwcm9wID0gbWVudS0+cHJv
bXB0Ow0KICAgIC0JcHJvbXB0ID0gXyhtZW51X2dldF9wcm9tcHQobWVudSkpOw0KICAgIC0NCiAg
ICAtCWlmIChwcm9wKSBzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAgICAtCWNhc2UgUF9NRU5VOg0K
ICAgIC0JCWlmIChsaXN0LT5tb2RlID09IHNpbmdsZU1vZGUgfHwgbGlzdC0+bW9kZSA9PSBzeW1i
b2xNb2RlKSB7DQogICAgLQkJCS8qIGEgbWVudWNvbmZpZyBlbnRyeSBpcyBkaXNwbGF5ZWQgZGlm
ZmVyZW50bHkNCiAgICAtCQkJICogZGVwZW5kaW5nIHdoZXRoZXIgaXQncyBhdCB0aGUgdmlldyBy
b290IG9yIGEgY2hpbGQuDQogICAgLQkJCSAqLw0KICAgIC0JCQlpZiAoc3ltICYmIGxpc3QtPnJv
b3RFbnRyeSA9PSBtZW51KQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCXNldFBpeG1hcChwcm9t
cHRDb2xJZHgsIGxpc3QtPm1lbnVQaXgpOw0KICAgIC0JCX0gZWxzZSB7DQogICAgLQkJCWlmIChz
eW0pDQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgMCk7
DQogICAgLQkJfQ0KICAgIC0JCWdvdG8gc2V0X3Byb21wdDsNCiAgICAtCWNhc2UgUF9DT01NRU5U
Og0KICAgIC0JCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIDApOw0KICAgIC0JCWdvdG8gc2V0X3By
b21wdDsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0JaWYgKCFzeW0p
DQogICAgLQkJZ290byBzZXRfcHJvbXB0Ow0KICAgIC0NCiAgICAtCXNldFRleHQobmFtZUNvbElk
eCwgUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzeW0tPm5hbWUpKTsNCiAgICAtDQogICAgLQl0eXBl
ID0gc3ltX2dldF90eXBlKHN5bSk7DQogICAgLQlzd2l0Y2ggKHR5cGUpIHsNCiAgICAtCWNhc2Ug
U19CT09MRUFOOg0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCWNoYXIgY2g7DQogICAg
LQ0KICAgIC0JCWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0pICYmIGxpc3QtPm9wdE1vZGUgPT0g
bm9ybWFsT3B0KSB7DQogICAgLQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIDApOw0KICAgIC0J
CQlzZXRUZXh0KG5vQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsNCiAgICAtCQkJc2V0VGV4dChtb2RD
b2xJZHgsIFFTdHJpbmc6Om51bGwpOw0KICAgIC0JCQlzZXRUZXh0KHllc0NvbElkeCwgUVN0cmlu
Zzo6bnVsbCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlleHByID0gc3ltX2dl
dF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0JCXN3aXRjaCAoZXhwcikgew0KICAgIC0JCWNh
c2UgeWVzOg0KICAgIC0JCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHR5cGUgPT0g
U19CT09MRUFOKQ0KICAgIC0JCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+Y2hvaWNl
WWVzUGl4KTsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwg
bGlzdC0+c3ltYm9sWWVzUGl4KTsNCiAgICAtCQkJc2V0VGV4dCh5ZXNDb2xJZHgsICJZIik7DQog
ICAgLQkJCWNoID0gJ1knOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIG1vZDoNCiAgICAt
CQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+c3ltYm9sTW9kUGl4KTsNCiAgICAtCQkJ
c2V0VGV4dChtb2RDb2xJZHgsICJNIik7DQogICAgLQkJCWNoID0gJ00nOw0KICAgIC0JCQlicmVh
azsNCiAgICAtCQlkZWZhdWx0Og0KICAgIC0JCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0p
ICYmIHR5cGUgPT0gU19CT09MRUFOKQ0KICAgIC0JCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwg
bGlzdC0+Y2hvaWNlTm9QaXgpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQlzZXRQaXhtYXAocHJv
bXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xOb1BpeCk7DQogICAgLQkJCXNldFRleHQobm9Db2xJZHgs
ICJOIik7DQogICAgLQkJCWNoID0gJ04nOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAg
LQkJaWYgKGV4cHIgIT0gbm8pDQogICAgLQkJCXNldFRleHQobm9Db2xJZHgsIHN5bV90cmlzdGF0
ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubykgPyAiXyIgOiAwKTsNCiAgICAtCQlpZiAoZXhwciAhPSBt
b2QpDQogICAgLQkJCXNldFRleHQobW9kQ29sSWR4LCBzeW1fdHJpc3RhdGVfd2l0aGluX3Jhbmdl
KHN5bSwgbW9kKSA/ICJfIiA6IDApOw0KICAgIC0JCWlmIChleHByICE9IHllcykNCiAgICAtCQkJ
c2V0VGV4dCh5ZXNDb2xJZHgsIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5ZXMpID8g
Il8iIDogMCk7DQogICAgLQ0KICAgIC0JCXNldFRleHQoZGF0YUNvbElkeCwgUUNoYXIoY2gpKTsN
CiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQljYXNlIFNfSEVYOg0KICAg
IC0JY2FzZSBTX1NUUklORzoNCiAgICAtCQljb25zdCBjaGFyKiBkYXRhOw0KICAgIC0NCiAgICAt
CQlkYXRhID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsNCiAgICAtDQogICAgLQkJaW50IGkg
PSBsaXN0LT5tYXBJZHgoZGF0YUNvbElkeCk7DQogICAgLQkJaWYgKGkgPj0gMCkNCiAgICAtCQkJ
c2V0UmVuYW1lRW5hYmxlZChpLCBUUlVFKTsNCiAgICAtCQlzZXRUZXh0KGRhdGFDb2xJZHgsIGRh
dGEpOw0KICAgIC0JCWlmICh0eXBlID09IFNfU1RSSU5HKQ0KICAgIC0JCQlwcm9tcHQgPSBRU3Ry
aW5nKCIlMTogJTIiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7DQogICAgLQkJZWxzZQ0KICAgIC0J
CQlwcm9tcHQgPSBRU3RyaW5nKCIoJTIpICUxIikuYXJnKHByb21wdCkuYXJnKGRhdGEpOw0KICAg
IC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkgJiYgdmlz
aWJsZSkNCiAgICAtCQlwcm9tcHQgKz0gXygiIChORVcpIik7DQogICAgLXNldF9wcm9tcHQ6DQog
ICAgLQlzZXRUZXh0KHByb21wdENvbElkeCwgcHJvbXB0KTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
dm9pZCBDb25maWdJdGVtOjp0ZXN0VXBkYXRlTWVudShib29sIHYpDQogICAgLXsNCiAgICAtCUNv
bmZpZ0l0ZW0qIGk7DQogICAgLQ0KICAgIC0JdmlzaWJsZSA9IHY7DQogICAgLQlpZiAoIW1lbnUp
DQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCXN5bV9jYWxjX3ZhbHVlKG1lbnUtPnN5bSk7
DQogICAgLQlpZiAobWVudS0+ZmxhZ3MgJiBNRU5VX0NIQU5HRUQpIHsNCiAgICAtCQkvKiB0aGUg
bWVudSBlbnRyeSBjaGFuZ2VkLCBzbyB1cGRhdGUgYWxsIGxpc3QgaXRlbXMgKi8NCiAgICAtCQlt
ZW51LT5mbGFncyAmPSB+TUVOVV9DSEFOR0VEOw0KICAgIC0JCWZvciAoaSA9IChDb25maWdJdGVt
KiltZW51LT5kYXRhOyBpOyBpID0gaS0+bmV4dEl0ZW0pDQogICAgLQkJCWktPnVwZGF0ZU1lbnUo
KTsNCiAgICAtCX0gZWxzZSBpZiAobGlzdFZpZXcoKS0+dXBkYXRlQWxsKQ0KICAgIC0JCXVwZGF0
ZU1lbnUoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdJdGVtOjpwYWludENlbGwo
UVBhaW50ZXIqIHAsIGNvbnN0IFFDb2xvckdyb3VwJiBjZywgaW50IGNvbHVtbiwgaW50IHdpZHRo
LCBpbnQgYWxpZ24pDQogICAgLXsNCiAgICAtCUNvbmZpZ0xpc3QqIGxpc3QgPSBsaXN0Vmlldygp
Ow0KICAgIC0NCiAgICAtCWlmICh2aXNpYmxlKSB7DQogICAgLQkJaWYgKGlzU2VsZWN0ZWQoKSAm
JiAhbGlzdC0+aGFzRm9jdXMoKSAmJiBsaXN0LT5tb2RlID09IG1lbnVNb2RlKQ0KICAgIC0JCQlQ
YXJlbnQ6OnBhaW50Q2VsbChwLCBsaXN0LT5pbmFjdGl2ZWRDb2xvckdyb3VwLCBjb2x1bW4sIHdp
ZHRoLCBhbGlnbik7DQogICAgLQkJZWxzZQ0KICAgIC0JCQlQYXJlbnQ6OnBhaW50Q2VsbChwLCBj
ZywgY29sdW1uLCB3aWR0aCwgYWxpZ24pOw0KICAgIC0JfSBlbHNlDQogICAgLQkJUGFyZW50Ojpw
YWludENlbGwocCwgbGlzdC0+ZGlzYWJsZWRDb2xvckdyb3VwLCBjb2x1bW4sIHdpZHRoLCBhbGln
bik7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIGNvbnN0cnVjdCBhIG1lbnUgZW50
cnkNCiAgICAtICovDQogICAgLXZvaWQgQ29uZmlnSXRlbTo6aW5pdCh2b2lkKQ0KICAgIC17DQog
ICAgLQlpZiAobWVudSkgew0KICAgIC0JCUNvbmZpZ0xpc3QqIGxpc3QgPSBsaXN0VmlldygpOw0K
ICAgIC0JCW5leHRJdGVtID0gKENvbmZpZ0l0ZW0qKW1lbnUtPmRhdGE7DQogICAgLQkJbWVudS0+
ZGF0YSA9IHRoaXM7DQogICAgLQ0KICAgIC0JCWlmIChsaXN0LT5tb2RlICE9IGZ1bGxNb2RlKQ0K
ICAgIC0JCQlzZXRPcGVuKFRSVUUpOw0KICAgIC0JCXN5bV9jYWxjX3ZhbHVlKG1lbnUtPnN5bSk7
DQogICAgLQl9DQogICAgLQl1cGRhdGVNZW51KCk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQog
ICAgLSAqIGRlc3RydWN0IGEgbWVudSBlbnRyeQ0KICAgIC0gKi8NCiAgICAtQ29uZmlnSXRlbTo6
fkNvbmZpZ0l0ZW0odm9pZCkNCiAgICAtew0KICAgIC0JaWYgKG1lbnUpIHsNCiAgICAtCQlDb25m
aWdJdGVtKiogaXAgPSAoQ29uZmlnSXRlbSoqKSZtZW51LT5kYXRhOw0KICAgIC0JCWZvciAoOyAq
aXA7IGlwID0gJigqaXApLT5uZXh0SXRlbSkgew0KICAgIC0JCQlpZiAoKmlwID09IHRoaXMpIHsN
CiAgICAtCQkJCSppcCA9IG5leHRJdGVtOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAg
ICAtCQl9DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLUNvbmZpZ0xpbmVFZGl0OjpDb25m
aWdMaW5lRWRpdChDb25maWdWaWV3KiBwYXJlbnQpDQogICAgLQk6IFBhcmVudChwYXJlbnQpDQog
ICAgLXsNCiAgICAtCWNvbm5lY3QodGhpcywgU0lHTkFMKGxvc3RGb2N1cygpKSwgU0xPVChoaWRl
KCkpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaW5lRWRpdDo6c2hvdyhDb25m
aWdJdGVtKiBpKQ0KICAgIC17DQogICAgLQlpdGVtID0gaTsNCiAgICAtCWlmIChzeW1fZ2V0X3N0
cmluZ192YWx1ZShpdGVtLT5tZW51LT5zeW0pKQ0KICAgIC0JCXNldFRleHQoUVN0cmluZzo6ZnJv
bUxvY2FsOEJpdChzeW1fZ2V0X3N0cmluZ192YWx1ZShpdGVtLT5tZW51LT5zeW0pKSk7DQogICAg
LQllbHNlDQogICAgLQkJc2V0VGV4dChRU3RyaW5nOjpudWxsKTsNCiAgICAtCVBhcmVudDo6c2hv
dygpOw0KICAgIC0Jc2V0Rm9jdXMoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdM
aW5lRWRpdDo6a2V5UHJlc3NFdmVudChRS2V5RXZlbnQqIGUpDQogICAgLXsNCiAgICAtCXN3aXRj
aCAoZS0+a2V5KCkpIHsNCiAgICAtCWNhc2UgUXQ6OktleV9Fc2NhcGU6DQogICAgLQkJYnJlYWs7
DQogICAgLQljYXNlIFF0OjpLZXlfUmV0dXJuOg0KICAgIC0JY2FzZSBRdDo6S2V5X0VudGVyOg0K
ICAgIC0JCXN5bV9zZXRfc3RyaW5nX3ZhbHVlKGl0ZW0tPm1lbnUtPnN5bSwgdGV4dCgpLmxhdGlu
MSgpKTsNCiAgICAtCQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVtKTsNCiAgICAtCQlicmVhazsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkJUGFyZW50OjprZXlQcmVzc0V2ZW50KGUpOw0KICAgIC0J
CXJldHVybjsNCiAgICAtCX0NCiAgICAtCWUtPmFjY2VwdCgpOw0KICAgIC0JcGFyZW50KCktPmxp
c3QtPnNldEZvY3VzKCk7DQogICAgLQloaWRlKCk7DQogICAgLX0NCiAgICAtDQogICAgLUNvbmZp
Z0xpc3Q6OkNvbmZpZ0xpc3QoQ29uZmlnVmlldyogcCwgY29uc3QgY2hhciAqbmFtZSkNCiAgICAt
CTogUGFyZW50KHAsIG5hbWUpLA0KICAgIC0JICB1cGRhdGVBbGwoZmFsc2UpLA0KICAgIC0JICBz
eW1ib2xZZXNQaXgoeHBtX3N5bWJvbF95ZXMpLCBzeW1ib2xNb2RQaXgoeHBtX3N5bWJvbF9tb2Qp
LCBzeW1ib2xOb1BpeCh4cG1fc3ltYm9sX25vKSwNCiAgICAtCSAgY2hvaWNlWWVzUGl4KHhwbV9j
aG9pY2VfeWVzKSwgY2hvaWNlTm9QaXgoeHBtX2Nob2ljZV9ubyksDQogICAgLQkgIG1lbnVQaXgo
eHBtX21lbnUpLCBtZW51SW52UGl4KHhwbV9tZW51X2ludiksIG1lbnVCYWNrUGl4KHhwbV9tZW51
YmFjayksIHZvaWRQaXgoeHBtX3ZvaWQpLA0KICAgIC0JICBzaG93TmFtZShmYWxzZSksIHNob3dS
YW5nZShmYWxzZSksIHNob3dEYXRhKGZhbHNlKSwgb3B0TW9kZShub3JtYWxPcHQpLA0KICAgIC0J
ICByb290RW50cnkoMCksIGhlYWRlclBvcHVwKDApDQogICAgLXsNCiAgICAtCWludCBpOw0KICAg
IC0NCiAgICAtCXNldFNvcnRpbmcoLTEpOw0KICAgIC0Jc2V0Um9vdElzRGVjb3JhdGVkKFRSVUUp
Ow0KICAgIC0JZGlzYWJsZWRDb2xvckdyb3VwID0gcGFsZXR0ZSgpLmFjdGl2ZSgpOw0KICAgIC0J
ZGlzYWJsZWRDb2xvckdyb3VwLnNldENvbG9yKFFDb2xvckdyb3VwOjpUZXh0LCBwYWxldHRlKCku
ZGlzYWJsZWQoKS50ZXh0KCkpOw0KICAgIC0JaW5hY3RpdmVkQ29sb3JHcm91cCA9IHBhbGV0dGUo
KS5hY3RpdmUoKTsNCiAgICAtCWluYWN0aXZlZENvbG9yR3JvdXAuc2V0Q29sb3IoUUNvbG9yR3Jv
dXA6OkhpZ2hsaWdodCwgcGFsZXR0ZSgpLmRpc2FibGVkKCkuaGlnaGxpZ2h0KCkpOw0KICAgIC0N
CiAgICAtCWNvbm5lY3QodGhpcywgU0lHTkFMKHNlbGVjdGlvbkNoYW5nZWQodm9pZCkpLA0KICAg
IC0JCVNMT1QodXBkYXRlU2VsZWN0aW9uKHZvaWQpKSk7DQogICAgLQ0KICAgIC0JaWYgKG5hbWUp
IHsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChuYW1lKTsNCiAgICAtCQlzaG93
TmFtZSA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkQm9vbEVudHJ5KCIvc2hvd05hbWUiLCBmYWxzZSk7
DQogICAgLQkJc2hvd1JhbmdlID0gY29uZmlnU2V0dGluZ3MtPnJlYWRCb29sRW50cnkoIi9zaG93
UmFuZ2UiLCBmYWxzZSk7DQogICAgLQkJc2hvd0RhdGEgPSBjb25maWdTZXR0aW5ncy0+cmVhZEJv
b2xFbnRyeSgiL3Nob3dEYXRhIiwgZmFsc2UpOw0KICAgIC0JCW9wdE1vZGUgPSAoZW51bSBvcHRp
b25Nb2RlKWNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnkoIi9vcHRpb25Nb2RlIiwgZmFsc2Up
Ow0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgIC0JCWNvbm5lY3QoY29u
ZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsNCiAg
ICAtCX0NCiAgICAtDQogICAgLQlmb3IgKGkgPSAwOyBpIDwgY29sTnI7IGkrKykNCiAgICAtCQlj
b2xNYXBbaV0gPSBjb2xSZXZNYXBbaV0gPSAtMTsNCiAgICAtCWFkZENvbHVtbihwcm9tcHRDb2xJ
ZHgsIF8oIk9wdGlvbiIpKTsNCiAgICAtDQogICAgLQlyZWluaXQoKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtYm9vbCBDb25maWdMaXN0OjptZW51U2tpcChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAt
ew0KICAgIC0JaWYgKG9wdE1vZGUgPT0gbm9ybWFsT3B0ICYmIG1lbnVfaXNfdmlzaWJsZShtZW51
KSkNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQlpZiAob3B0TW9kZSA9PSBwcm9tcHRPcHQg
JiYgbWVudV9oYXNfcHJvbXB0KG1lbnUpKQ0KICAgIC0JCXJldHVybiBmYWxzZTsNCiAgICAtCWlm
IChvcHRNb2RlID09IGFsbE9wdCkNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQlyZXR1cm4g
dHJ1ZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0OjpyZWluaXQodm9pZCkN
CiAgICAtew0KICAgIC0JcmVtb3ZlQ29sdW1uKGRhdGFDb2xJZHgpOw0KICAgIC0JcmVtb3ZlQ29s
dW1uKHllc0NvbElkeCk7DQogICAgLQlyZW1vdmVDb2x1bW4obW9kQ29sSWR4KTsNCiAgICAtCXJl
bW92ZUNvbHVtbihub0NvbElkeCk7DQogICAgLQlyZW1vdmVDb2x1bW4obmFtZUNvbElkeCk7DQog
ICAgLQ0KICAgIC0JaWYgKHNob3dOYW1lKQ0KICAgIC0JCWFkZENvbHVtbihuYW1lQ29sSWR4LCBf
KCJOYW1lIikpOw0KICAgIC0JaWYgKHNob3dSYW5nZSkgew0KICAgIC0JCWFkZENvbHVtbihub0Nv
bElkeCwgIk4iKTsNCiAgICAtCQlhZGRDb2x1bW4obW9kQ29sSWR4LCAiTSIpOw0KICAgIC0JCWFk
ZENvbHVtbih5ZXNDb2xJZHgsICJZIik7DQogICAgLQl9DQogICAgLQlpZiAoc2hvd0RhdGEpDQog
ICAgLQkJYWRkQ29sdW1uKGRhdGFDb2xJZHgsIF8oIlZhbHVlIikpOw0KICAgIC0NCiAgICAtCXVw
ZGF0ZUxpc3RBbGwoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0OjpzYXZl
U2V0dGluZ3Modm9pZCkNCiAgICAtew0KICAgIC0JaWYgKG5hbWUoKSkgew0KICAgIC0JCWNvbmZp
Z1NldHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUoKSk7DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPndy
aXRlRW50cnkoIi9zaG93TmFtZSIsIHNob3dOYW1lKTsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+
d3JpdGVFbnRyeSgiL3Nob3dSYW5nZSIsIHNob3dSYW5nZSk7DQogICAgLQkJY29uZmlnU2V0dGlu
Z3MtPndyaXRlRW50cnkoIi9zaG93RGF0YSIsIHNob3dEYXRhKTsNCiAgICAtCQljb25maWdTZXR0
aW5ncy0+d3JpdGVFbnRyeSgiL29wdGlvbk1vZGUiLCAoaW50KW9wdE1vZGUpOw0KICAgIC0JCWNv
bmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC1D
b25maWdJdGVtKiBDb25maWdMaXN0OjpmaW5kQ29uZmlnSXRlbShzdHJ1Y3QgbWVudSAqbWVudSkN
CiAgICAtew0KICAgIC0JQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKiltZW51LT5kYXRh
Ow0KICAgIC0NCiAgICAtCWZvciAoOyBpdGVtOyBpdGVtID0gaXRlbS0+bmV4dEl0ZW0pIHsNCiAg
ICAtCQlpZiAodGhpcyA9PSBpdGVtLT5saXN0VmlldygpKQ0KICAgIC0JCQlicmVhazsNCiAgICAt
CX0NCiAgICAtDQogICAgLQlyZXR1cm4gaXRlbTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBD
b25maWdMaXN0Ojp1cGRhdGVTZWxlY3Rpb24odm9pZCkNCiAgICAtew0KICAgIC0Jc3RydWN0IG1l
bnUgKm1lbnU7DQogICAgLQllbnVtIHByb3BfdHlwZSB0eXBlOw0KICAgIC0NCiAgICAtCUNvbmZp
Z0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSopc2VsZWN0ZWRJdGVtKCk7DQogICAgLQlpZiAoIWl0
ZW0pDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCW1lbnUgPSBpdGVtLT5tZW51Ow0KICAg
IC0JZW1pdCBtZW51Q2hhbmdlZChtZW51KTsNCiAgICAtCWlmICghbWVudSkNCiAgICAtCQlyZXR1
cm47DQogICAgLQl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9V
TktOT1dOOw0KICAgIC0JaWYgKG1vZGUgPT0gbWVudU1vZGUgJiYgdHlwZSA9PSBQX01FTlUpDQog
ICAgLQkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQg
Q29uZmlnTGlzdDo6dXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKQ0KICAgIC17DQogICAgLQlD
b25maWdJdGVtKiBsYXN0ID0gMDsNCiAgICAtDQogICAgLQlpZiAoIXJvb3RFbnRyeSkgew0KICAg
IC0JCWlmIChtb2RlICE9IGxpc3RNb2RlKQ0KICAgIC0JCQlnb3RvIHVwZGF0ZTsNCiAgICAtCQlR
M0xpc3RWaWV3SXRlbUl0ZXJhdG9yIGl0KHRoaXMpOw0KICAgIC0JCUNvbmZpZ0l0ZW0qIGl0ZW07
DQogICAgLQ0KICAgIC0JCWZvciAoOyBpdC5jdXJyZW50KCk7ICsraXQpIHsNCiAgICAtCQkJaXRl
bSA9IChDb25maWdJdGVtKilpdC5jdXJyZW50KCk7DQogICAgLQkJCWlmICghaXRlbS0+bWVudSkN
CiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlpdGVtLT50ZXN0VXBkYXRlTWVudShtZW51X2lz
X3Zpc2libGUoaXRlbS0+bWVudSkpOw0KICAgIC0JCX0NCiAgICAtCQlyZXR1cm47DQogICAgLQl9
DQogICAgLQ0KICAgIC0JaWYgKHJvb3RFbnRyeSAhPSAmcm9vdG1lbnUgJiYgKG1vZGUgPT0gc2lu
Z2xlTW9kZSB8fA0KICAgIC0JICAgIChtb2RlID09IHN5bWJvbE1vZGUgJiYgcm9vdEVudHJ5LT5w
YXJlbnQgIT0gJnJvb3RtZW51KSkpIHsNCiAgICAtCQlpdGVtID0gZmlyc3RDaGlsZCgpOw0KICAg
IC0JCWlmICghaXRlbSkNCiAgICAtCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHRoaXMsIDAsIHRy
dWUpOw0KICAgIC0JCWxhc3QgPSBpdGVtOw0KICAgIC0JfQ0KICAgIC0JaWYgKChtb2RlID09IHNp
bmdsZU1vZGUgfHwgKG1vZGUgPT0gc3ltYm9sTW9kZSAmJiAhKHJvb3RFbnRyeS0+ZmxhZ3MgJiBN
RU5VX1JPT1QpKSkgJiYNCiAgICAtCSAgICByb290RW50cnktPnN5bSAmJiByb290RW50cnktPnBy
b21wdCkgew0KICAgIC0JCWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmcoKSA6IGZpcnN0
Q2hpbGQoKTsNCiAgICAtCQlpZiAoIWl0ZW0pDQogICAgLQkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRl
bSh0aGlzLCBsYXN0LCByb290RW50cnksIHRydWUpOw0KICAgIC0JCWVsc2UNCiAgICAtCQkJaXRl
bS0+dGVzdFVwZGF0ZU1lbnUodHJ1ZSk7DQogICAgLQ0KICAgIC0JCXVwZGF0ZU1lbnVMaXN0KGl0
ZW0sIHJvb3RFbnRyeSk7DQogICAgLQkJdHJpZ2dlclVwZGF0ZSgpOw0KICAgIC0JCXJldHVybjsN
CiAgICAtCX0NCiAgICAtdXBkYXRlOg0KICAgIC0JdXBkYXRlTWVudUxpc3QodGhpcywgcm9vdEVu
dHJ5KTsNCiAgICAtCXRyaWdnZXJVcGRhdGUoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBD
b25maWdMaXN0OjpzZXRWYWx1ZShDb25maWdJdGVtKiBpdGVtLCB0cmlzdGF0ZSB2YWwpDQogICAg
LXsNCiAgICAtCXN0cnVjdCBzeW1ib2wqIHN5bTsNCiAgICAtCWludCB0eXBlOw0KICAgIC0JdHJp
c3RhdGUgb2xkdmFsOw0KICAgIC0NCiAgICAtCXN5bSA9IGl0ZW0tPm1lbnUgPyBpdGVtLT5tZW51
LT5zeW0gOiAwOw0KICAgIC0JaWYgKCFzeW0pDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAt
CXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsNCiAgICAtCXN3aXRjaCAodHlwZSkgew0KICAgIC0J
Y2FzZSBTX0JPT0xFQU46DQogICAgLQljYXNlIFNfVFJJU1RBVEU6DQogICAgLQkJb2xkdmFsID0g
c3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0NCiAgICAtCQlpZiAoIXN5bV9zZXRf
dHJpc3RhdGVfdmFsdWUoc3ltLCB2YWwpKQ0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJaWYgKG9s
ZHZhbCA9PSBubyAmJiBpdGVtLT5tZW51LT5saXN0KQ0KICAgIC0JCQlpdGVtLT5zZXRPcGVuKFRS
VUUpOw0KICAgIC0JCXBhcmVudCgpLT51cGRhdGVMaXN0KGl0ZW0pOw0KICAgIC0JCWJyZWFrOw0K
ICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0xpc3Q6OmNoYW5nZVZhbHVl
KENvbmZpZ0l0ZW0qIGl0ZW0pDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wqIHN5bTsNCiAg
ICAtCXN0cnVjdCBtZW51KiBtZW51Ow0KICAgIC0JaW50IHR5cGUsIG9sZGV4cHIsIG5ld2V4cHI7
DQogICAgLQ0KICAgIC0JbWVudSA9IGl0ZW0tPm1lbnU7DQogICAgLQlpZiAoIW1lbnUpDQogICAg
LQkJcmV0dXJuOw0KICAgIC0Jc3ltID0gbWVudS0+c3ltOw0KICAgIC0JaWYgKCFzeW0pIHsNCiAg
ICAtCQlpZiAoaXRlbS0+bWVudS0+bGlzdCkNCiAgICAtCQkJaXRlbS0+c2V0T3BlbighaXRlbS0+
aXNPcGVuKCkpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtDQogICAgLQl0eXBlID0g
c3ltX2dldF90eXBlKHN5bSk7DQogICAgLQlzd2l0Y2ggKHR5cGUpIHsNCiAgICAtCWNhc2UgU19C
T09MRUFOOg0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCW9sZGV4cHIgPSBzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQkJbmV3ZXhwciA9IHN5bV90b2dnbGVfdHJpc3Rh
dGVfdmFsdWUoc3ltKTsNCiAgICAtCQlpZiAoaXRlbS0+bWVudS0+bGlzdCkgew0KICAgIC0JCQlp
ZiAob2xkZXhwciA9PSBuZXdleHByKQ0KICAgIC0JCQkJaXRlbS0+c2V0T3BlbighaXRlbS0+aXNP
cGVuKCkpOw0KICAgIC0JCQllbHNlIGlmIChvbGRleHByID09IG5vKQ0KICAgIC0JCQkJaXRlbS0+
c2V0T3BlbihUUlVFKTsNCiAgICAtCQl9DQogICAgLQkJaWYgKG9sZGV4cHIgIT0gbmV3ZXhwcikN
CiAgICAtCQkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7DQogICAgLQkJYnJlYWs7DQogICAg
LQljYXNlIFNfSU5UOg0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAtCWNhc2UgU19TVFJJTkc6DQog
ICAgLQkJaWYgKGNvbE1hcFtkYXRhQ29sSWR4XSA+PSAwKQ0KICAgIC0JCQlpdGVtLT5zdGFydFJl
bmFtZShjb2xNYXBbZGF0YUNvbElkeF0pOw0KICAgIC0JCWVsc2UNCiAgICAtCQkJcGFyZW50KCkt
PmxpbmVFZGl0LT5zaG93KGl0ZW0pOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC19DQog
ICAgLQ0KICAgIC12b2lkIENvbmZpZ0xpc3Q6OnNldFJvb3RNZW51KHN0cnVjdCBtZW51ICptZW51
KQ0KICAgIC17DQogICAgLQllbnVtIHByb3BfdHlwZSB0eXBlOw0KICAgIC0NCiAgICAtCWlmIChy
b290RW50cnkgPT0gbWVudSkNCiAgICAtCQlyZXR1cm47DQogICAgLQl0eXBlID0gbWVudSAmJiBt
ZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQlpZiAo
dHlwZSAhPSBQX01FTlUpDQogICAgLQkJcmV0dXJuOw0KICAgIC0JdXBkYXRlTWVudUxpc3QodGhp
cywgMCk7DQogICAgLQlyb290RW50cnkgPSBtZW51Ow0KICAgIC0JdXBkYXRlTGlzdEFsbCgpOw0K
ICAgIC0Jc2V0U2VsZWN0ZWQoY3VycmVudEl0ZW0oKSwgaGFzRm9jdXMoKSk7DQogICAgLQllbnN1
cmVJdGVtVmlzaWJsZShjdXJyZW50SXRlbSgpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBD
b25maWdMaXN0OjpzZXRQYXJlbnRNZW51KHZvaWQpDQogICAgLXsNCiAgICAtCUNvbmZpZ0l0ZW0q
IGl0ZW07DQogICAgLQlzdHJ1Y3QgbWVudSAqb2xkcm9vdDsNCiAgICAtDQogICAgLQlvbGRyb290
ID0gcm9vdEVudHJ5Ow0KICAgIC0JaWYgKHJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpDQogICAgLQkJ
cmV0dXJuOw0KICAgIC0Jc2V0Um9vdE1lbnUobWVudV9nZXRfcGFyZW50X21lbnUocm9vdEVudHJ5
LT5wYXJlbnQpKTsNCiAgICAtDQogICAgLQlRM0xpc3RWaWV3SXRlbUl0ZXJhdG9yIGl0KHRoaXMp
Ow0KICAgIC0JZm9yICg7IChpdGVtID0gKENvbmZpZ0l0ZW0qKWl0LmN1cnJlbnQoKSk7IGl0Kysp
IHsNCiAgICAtCQlpZiAoaXRlbS0+bWVudSA9PSBvbGRyb290KSB7DQogICAgLQkJCXNldEN1cnJl
bnRJdGVtKGl0ZW0pOw0KICAgIC0JCQllbnN1cmVJdGVtVmlzaWJsZShpdGVtKTsNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0g
KiB1cGRhdGUgYWxsIHRoZSBjaGlsZHJlbiBvZiBhIG1lbnUgZW50cnkNCiAgICAtICogICByZW1v
dmVzL2FkZHMgdGhlIGVudHJpZXMgZnJvbSB0aGUgcGFyZW50IHdpZGdldCBhcyBuZWNlc3NhcnkN
CiAgICAtICoNCiAgICAtICogcGFyZW50OiBlaXRoZXIgdGhlIG1lbnUgbGlzdCB3aWRnZXQgb3Ig
YSBtZW51IGVudHJ5IHdpZGdldA0KICAgIC0gKiBtZW51OiBlbnRyeSB0byBiZSB1cGRhdGVkDQog
ICAgLSAqLw0KICAgIC10ZW1wbGF0ZSA8Y2xhc3MgUD4NCiAgICAtdm9pZCBDb25maWdMaXN0Ojp1
cGRhdGVNZW51TGlzdChQKiBwYXJlbnQsIHN0cnVjdCBtZW51KiBtZW51KQ0KICAgIC17DQogICAg
LQlzdHJ1Y3QgbWVudSogY2hpbGQ7DQogICAgLQlDb25maWdJdGVtKiBpdGVtOw0KICAgIC0JQ29u
ZmlnSXRlbSogbGFzdDsNCiAgICAtCWJvb2wgdmlzaWJsZTsNCiAgICAtCWVudW0gcHJvcF90eXBl
IHR5cGU7DQogICAgLQ0KICAgIC0JaWYgKCFtZW51KSB7DQogICAgLQkJd2hpbGUgKChpdGVtID0g
cGFyZW50LT5maXJzdENoaWxkKCkpKQ0KICAgIC0JCQlkZWxldGUgaXRlbTsNCiAgICAtCQlyZXR1
cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JbGFzdCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOw0K
ICAgIC0JaWYgKGxhc3QgJiYgIWxhc3QtPmdvUGFyZW50KQ0KICAgIC0JCWxhc3QgPSAwOw0KICAg
IC0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7
DQogICAgLQkJaXRlbSA9IGxhc3QgPyBsYXN0LT5uZXh0U2libGluZygpIDogcGFyZW50LT5maXJz
dENoaWxkKCk7DQogICAgLQkJdHlwZSA9IGNoaWxkLT5wcm9tcHQgPyBjaGlsZC0+cHJvbXB0LT50
eXBlIDogUF9VTktOT1dOOw0KICAgIC0NCiAgICAtCQlzd2l0Y2ggKG1vZGUpIHsNCiAgICAtCQlj
YXNlIG1lbnVNb2RlOg0KICAgIC0JCQlpZiAoIShjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQ0K
ICAgIC0JCQkJZ290byBoaWRlOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIHN5bWJvbE1v
ZGU6DQogICAgLQkJCWlmIChjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpDQogICAgLQkJCQlnb3Rv
IGhpZGU7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCX0NCiAgICAtDQogICAgLQkJdmlzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShjaGlsZCk7
DQogICAgLQkJaWYgKCFtZW51U2tpcChjaGlsZCkpIHsNCiAgICAtCQkJaWYgKCFjaGlsZC0+c3lt
ICYmICFjaGlsZC0+bGlzdCAmJiAhY2hpbGQtPnByb21wdCkNCiAgICAtCQkJCWNvbnRpbnVlOw0K
ICAgIC0JCQlpZiAoIWl0ZW0gfHwgaXRlbS0+bWVudSAhPSBjaGlsZCkNCiAgICAtCQkJCWl0ZW0g
PSBuZXcgQ29uZmlnSXRlbShwYXJlbnQsIGxhc3QsIGNoaWxkLCB2aXNpYmxlKTsNCiAgICAtCQkJ
ZWxzZQ0KICAgIC0JCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUodmlzaWJsZSk7DQogICAgLQ0KICAg
IC0JCQlpZiAobW9kZSA9PSBmdWxsTW9kZSB8fCBtb2RlID09IG1lbnVNb2RlIHx8IHR5cGUgIT0g
UF9NRU5VKQ0KICAgIC0JCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgY2hpbGQpOw0KICAgIC0JCQll
bHNlDQogICAgLQkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCAwKTsNCiAgICAtCQkJbGFzdCA9IGl0
ZW07DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCX0NCiAgICAtCWhpZGU6DQogICAgLQkJaWYg
KGl0ZW0gJiYgaXRlbS0+bWVudSA9PSBjaGlsZCkgew0KICAgIC0JCQlsYXN0ID0gcGFyZW50LT5m
aXJzdENoaWxkKCk7DQogICAgLQkJCWlmIChsYXN0ID09IGl0ZW0pDQogICAgLQkJCQlsYXN0ID0g
MDsNCiAgICAtCQkJZWxzZSB3aGlsZSAobGFzdC0+bmV4dFNpYmxpbmcoKSAhPSBpdGVtKQ0KICAg
IC0JCQkJbGFzdCA9IGxhc3QtPm5leHRTaWJsaW5nKCk7DQogICAgLQkJCWRlbGV0ZSBpdGVtOw0K
ICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojpr
ZXlQcmVzc0V2ZW50KFFLZXlFdmVudCogZXYpDQogICAgLXsNCiAgICAtCVEzTGlzdFZpZXdJdGVt
KiBpID0gY3VycmVudEl0ZW0oKTsNCiAgICAtCUNvbmZpZ0l0ZW0qIGl0ZW07DQogICAgLQlzdHJ1
Y3QgbWVudSAqbWVudTsNCiAgICAtCWVudW0gcHJvcF90eXBlIHR5cGU7DQogICAgLQ0KICAgIC0J
aWYgKGV2LT5rZXkoKSA9PSBRdDo6S2V5X0VzY2FwZSAmJiBtb2RlICE9IGZ1bGxNb2RlICYmIG1v
ZGUgIT0gbGlzdE1vZGUpIHsNCiAgICAtCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7DQogICAgLQkJ
ZXYtPmFjY2VwdCgpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtDQogICAgLQlpZiAo
IWkpIHsNCiAgICAtCQlQYXJlbnQ6OmtleVByZXNzRXZlbnQoZXYpOw0KICAgIC0JCXJldHVybjsN
CiAgICAtCX0NCiAgICAtCWl0ZW0gPSAoQ29uZmlnSXRlbSopaTsNCiAgICAtDQogICAgLQlzd2l0
Y2ggKGV2LT5rZXkoKSkgew0KICAgIC0JY2FzZSBRdDo6S2V5X1JldHVybjoNCiAgICAtCWNhc2Ug
UXQ6OktleV9FbnRlcjoNCiAgICAtCQlpZiAoaXRlbS0+Z29QYXJlbnQpIHsNCiAgICAtCQkJZW1p
dCBwYXJlbnRTZWxlY3RlZCgpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQkJbWVu
dSA9IGl0ZW0tPm1lbnU7DQogICAgLQkJaWYgKCFtZW51KQ0KICAgIC0JCQlicmVhazsNCiAgICAt
CQl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOw0K
ICAgIC0JCWlmICh0eXBlID09IFBfTUVOVSAmJiByb290RW50cnkgIT0gbWVudSAmJg0KICAgIC0J
CSAgICBtb2RlICE9IGZ1bGxNb2RlICYmIG1vZGUgIT0gbWVudU1vZGUpIHsNCiAgICAtCQkJZW1p
dCBtZW51U2VsZWN0ZWQobWVudSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCWNh
c2UgUXQ6OktleV9TcGFjZToNCiAgICAtCQljaGFuZ2VWYWx1ZShpdGVtKTsNCiAgICAtCQlicmVh
azsNCiAgICAtCWNhc2UgUXQ6OktleV9OOg0KICAgIC0JCXNldFZhbHVlKGl0ZW0sIG5vKTsNCiAg
ICAtCQlicmVhazsNCiAgICAtCWNhc2UgUXQ6OktleV9NOg0KICAgIC0JCXNldFZhbHVlKGl0ZW0s
IG1vZCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFF0OjpLZXlfWToNCiAgICAtCQlzZXRW
YWx1ZShpdGVtLCB5ZXMpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlQ
YXJlbnQ6OmtleVByZXNzRXZlbnQoZXYpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAt
CWV2LT5hY2NlcHQoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojpjb250
ZW50c01vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCogZSkNCiAgICAtew0KICAgIC0JLy9RUG9p
bnQgcChjb250ZW50c1RvVmlld3BvcnQoZS0+cG9zKCkpKTsNCiAgICAtCS8vcHJpbnRmKCJjb250
ZW50c01vdXNlUHJlc3NFdmVudDogJWQsJWRcbiIsIHAueCgpLCBwLnkoKSk7DQogICAgLQlQYXJl
bnQ6OmNvbnRlbnRzTW91c2VQcmVzc0V2ZW50KGUpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lk
IENvbmZpZ0xpc3Q6OmNvbnRlbnRzTW91c2VSZWxlYXNlRXZlbnQoUU1vdXNlRXZlbnQqIGUpDQog
ICAgLXsNCiAgICAtCVFQb2ludCBwKGNvbnRlbnRzVG9WaWV3cG9ydChlLT5wb3MoKSkpOw0KICAg
IC0JQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7DQogICAgLQlzdHJ1
Y3QgbWVudSAqbWVudTsNCiAgICAtCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAgIC0JY29uc3Qg
UVBpeG1hcCogcG07DQogICAgLQlpbnQgaWR4LCB4Ow0KICAgIC0NCiAgICAtCWlmICghaXRlbSkN
CiAgICAtCQlnb3RvIHNraXA7DQogICAgLQ0KICAgIC0JbWVudSA9IGl0ZW0tPm1lbnU7DQogICAg
LQl4ID0gaGVhZGVyKCktPm9mZnNldCgpICsgcC54KCk7DQogICAgLQlpZHggPSBjb2xSZXZNYXBb
aGVhZGVyKCktPnNlY3Rpb25BdCh4KV07DQogICAgLQlzd2l0Y2ggKGlkeCkgew0KICAgIC0JY2Fz
ZSBwcm9tcHRDb2xJZHg6DQogICAgLQkJcG0gPSBpdGVtLT5waXhtYXAocHJvbXB0Q29sSWR4KTsN
CiAgICAtCQlpZiAocG0pIHsNCiAgICAtCQkJaW50IG9mZiA9IGhlYWRlcigpLT5zZWN0aW9uUG9z
KDApICsgaXRlbU1hcmdpbigpICsNCiAgICAtCQkJCXRyZWVTdGVwU2l6ZSgpICogKGl0ZW0tPmRl
cHRoKCkgKyAocm9vdElzRGVjb3JhdGVkKCkgPyAxIDogMCkpOw0KICAgIC0JCQlpZiAoeCA+PSBv
ZmYgJiYgeCA8IG9mZiArIHBtLT53aWR0aCgpKSB7DQogICAgLQkJCQlpZiAoaXRlbS0+Z29QYXJl
bnQpIHsNCiAgICAtCQkJCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7DQogICAgLQkJCQkJYnJlYWs7
DQogICAgLQkJCQl9IGVsc2UgaWYgKCFtZW51KQ0KICAgIC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJ
cHR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQog
ICAgLQkJCQlpZiAocHR5cGUgPT0gUF9NRU5VICYmIHJvb3RFbnRyeSAhPSBtZW51ICYmDQogICAg
LQkJCQkgICAgbW9kZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IG1lbnVNb2RlKQ0KICAgIC0JCQkJ
CWVtaXQgbWVudVNlbGVjdGVkKG1lbnUpOw0KICAgIC0JCQkJZWxzZQ0KICAgIC0JCQkJCWNoYW5n
ZVZhbHVlKGl0ZW0pOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0J
Y2FzZSBub0NvbElkeDoNCiAgICAtCQlzZXRWYWx1ZShpdGVtLCBubyk7DQogICAgLQkJYnJlYWs7
DQogICAgLQljYXNlIG1vZENvbElkeDoNCiAgICAtCQlzZXRWYWx1ZShpdGVtLCBtb2QpOw0KICAg
IC0JCWJyZWFrOw0KICAgIC0JY2FzZSB5ZXNDb2xJZHg6DQogICAgLQkJc2V0VmFsdWUoaXRlbSwg
eWVzKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgZGF0YUNvbElkeDoNCiAgICAtCQljaGFu
Z2VWYWx1ZShpdGVtKTsNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLXNraXA6
DQogICAgLQkvL3ByaW50ZigiY29udGVudHNNb3VzZVJlbGVhc2VFdmVudDogJWQsJWRcbiIsIHAu
eCgpLCBwLnkoKSk7DQogICAgLQlQYXJlbnQ6OmNvbnRlbnRzTW91c2VSZWxlYXNlRXZlbnQoZSk7
DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6Y29udGVudHNNb3VzZU1vdmVF
dmVudChRTW91c2VFdmVudCogZSkNCiAgICAtew0KICAgIC0JLy9RUG9pbnQgcChjb250ZW50c1Rv
Vmlld3BvcnQoZS0+cG9zKCkpKTsNCiAgICAtCS8vcHJpbnRmKCJjb250ZW50c01vdXNlTW92ZUV2
ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsNCiAgICAtCVBhcmVudDo6Y29udGVudHNNb3Vz
ZU1vdmVFdmVudChlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojpjb250
ZW50c01vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCogZSkNCiAgICAtew0KICAgIC0J
UVBvaW50IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBvcygpKSk7DQogICAgLQlDb25maWdJdGVt
KiBpdGVtID0gKENvbmZpZ0l0ZW0qKWl0ZW1BdChwKTsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51
Ow0KICAgIC0JZW51bSBwcm9wX3R5cGUgcHR5cGU7DQogICAgLQ0KICAgIC0JaWYgKCFpdGVtKQ0K
ICAgIC0JCWdvdG8gc2tpcDsNCiAgICAtCWlmIChpdGVtLT5nb1BhcmVudCkgew0KICAgIC0JCWVt
aXQgcGFyZW50U2VsZWN0ZWQoKTsNCiAgICAtCQlnb3RvIHNraXA7DQogICAgLQl9DQogICAgLQlt
ZW51ID0gaXRlbS0+bWVudTsNCiAgICAtCWlmICghbWVudSkNCiAgICAtCQlnb3RvIHNraXA7DQog
ICAgLQlwdHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9X
TjsNCiAgICAtCWlmIChwdHlwZSA9PSBQX01FTlUgJiYgKG1vZGUgPT0gc2luZ2xlTW9kZSB8fCBt
b2RlID09IHN5bWJvbE1vZGUpKQ0KICAgIC0JCWVtaXQgbWVudVNlbGVjdGVkKG1lbnUpOw0KICAg
IC0JZWxzZSBpZiAobWVudS0+c3ltKQ0KICAgIC0JCWNoYW5nZVZhbHVlKGl0ZW0pOw0KICAgIC0N
CiAgICAtc2tpcDoNCiAgICAtCS8vcHJpbnRmKCJjb250ZW50c01vdXNlRG91YmxlQ2xpY2tFdmVu
dDogJWQsJWRcbiIsIHAueCgpLCBwLnkoKSk7DQogICAgLQlQYXJlbnQ6OmNvbnRlbnRzTW91c2VE
b3VibGVDbGlja0V2ZW50KGUpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0xpc3Q6
OmZvY3VzSW5FdmVudChRRm9jdXNFdmVudCAqZSkNCiAgICAtew0KICAgIC0Jc3RydWN0IG1lbnUg
Km1lbnUgPSBOVUxMOw0KICAgIC0NCiAgICAtCVBhcmVudDo6Zm9jdXNJbkV2ZW50KGUpOw0KICAg
IC0NCiAgICAtCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSAqKWN1cnJlbnRJdGVtKCk7
DQogICAgLQlpZiAoaXRlbSkgew0KICAgIC0JCXNldFNlbGVjdGVkKGl0ZW0sIFRSVUUpOw0KICAg
IC0JCW1lbnUgPSBpdGVtLT5tZW51Ow0KICAgIC0JfQ0KICAgIC0JZW1pdCBnb3RGb2N1cyhtZW51
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojpjb250ZXh0TWVudUV2ZW50
KFFDb250ZXh0TWVudUV2ZW50ICplKQ0KICAgIC17DQogICAgLQlpZiAoZS0+eSgpIDw9IGhlYWRl
cigpLT5nZW9tZXRyeSgpLmJvdHRvbSgpKSB7DQogICAgLQkJaWYgKCFoZWFkZXJQb3B1cCkgew0K
ICAgIC0JCQlRM0FjdGlvbiAqYWN0aW9uOw0KICAgIC0NCiAgICAtCQkJaGVhZGVyUG9wdXAgPSBu
ZXcgUTNQb3B1cE1lbnUodGhpcyk7DQogICAgLQkJCWFjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxM
LCBfKCJTaG93IE5hbWUiKSwgMCwgdGhpcyk7DQogICAgLQkJCSAgYWN0aW9uLT5zZXRUb2dnbGVB
Y3Rpb24oVFJVRSk7DQogICAgLQkJCSAgY29ubmVjdChhY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJv
b2wpKSwNCiAgICAtCQkJCSAgcGFyZW50KCksIFNMT1Qoc2V0U2hvd05hbWUoYm9vbCkpKTsNCiAg
ICAtCQkJICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hvd05hbWVDaGFuZ2VkKGJvb2wpKSwN
CiAgICAtCQkJCSAgYWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7DQogICAgLQkJCSAgYWN0aW9u
LT5zZXRPbihzaG93TmFtZSk7DQogICAgLQkJCSAgYWN0aW9uLT5hZGRUbyhoZWFkZXJQb3B1cCk7
DQogICAgLQkJCWFjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJTaG93IFJhbmdlIiksIDAs
IHRoaXMpOw0KICAgIC0JCQkgIGFjdGlvbi0+c2V0VG9nZ2xlQWN0aW9uKFRSVUUpOw0KICAgIC0J
CQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksDQogICAgLQkJCQkgIHBh
cmVudCgpLCBTTE9UKHNldFNob3dSYW5nZShib29sKSkpOw0KICAgIC0JCQkgIGNvbm5lY3QocGFy
ZW50KCksIFNJR05BTChzaG93UmFuZ2VDaGFuZ2VkKGJvb2wpKSwNCiAgICAtCQkJCSAgYWN0aW9u
LCBTTE9UKHNldE9uKGJvb2wpKSk7DQogICAgLQkJCSAgYWN0aW9uLT5zZXRPbihzaG93UmFuZ2Up
Ow0KICAgIC0JCQkgIGFjdGlvbi0+YWRkVG8oaGVhZGVyUG9wdXApOw0KICAgIC0JCQlhY3Rpb24g
PSBuZXcgUTNBY3Rpb24oTlVMTCwgXygiU2hvdyBEYXRhIiksIDAsIHRoaXMpOw0KICAgIC0JCQkg
IGFjdGlvbi0+c2V0VG9nZ2xlQWN0aW9uKFRSVUUpOw0KICAgIC0JCQkgIGNvbm5lY3QoYWN0aW9u
LCBTSUdOQUwodG9nZ2xlZChib29sKSksDQogICAgLQkJCQkgIHBhcmVudCgpLCBTTE9UKHNldFNo
b3dEYXRhKGJvb2wpKSk7DQogICAgLQkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dE
YXRhQ2hhbmdlZChib29sKSksDQogICAgLQkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkp
Ow0KICAgIC0JCQkgIGFjdGlvbi0+c2V0T24oc2hvd0RhdGEpOw0KICAgIC0JCQkgIGFjdGlvbi0+
YWRkVG8oaGVhZGVyUG9wdXApOw0KICAgIC0JCX0NCiAgICAtCQloZWFkZXJQb3B1cC0+ZXhlYyhl
LT5nbG9iYWxQb3MoKSk7DQogICAgLQkJZS0+YWNjZXB0KCk7DQogICAgLQl9IGVsc2UNCiAgICAt
CQllLT5pZ25vcmUoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtQ29uZmlnVmlldypDb25maWdWaWV3
Ojp2aWV3TGlzdDsNCiAgICAtUUFjdGlvbiAqQ29uZmlnVmlldzo6c2hvd05vcm1hbEFjdGlvbjsN
CiAgICAtUUFjdGlvbiAqQ29uZmlnVmlldzo6c2hvd0FsbEFjdGlvbjsNCiAgICAtUUFjdGlvbiAq
Q29uZmlnVmlldzo6c2hvd1Byb21wdEFjdGlvbjsNCiAgICAtDQogICAgLUNvbmZpZ1ZpZXc6OkNv
bmZpZ1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQ0KICAgIC0JOiBQYXJl
bnQocGFyZW50LCBuYW1lKQ0KICAgIC17DQogICAgLQlsaXN0ID0gbmV3IENvbmZpZ0xpc3QodGhp
cywgbmFtZSk7DQogICAgLQlsaW5lRWRpdCA9IG5ldyBDb25maWdMaW5lRWRpdCh0aGlzKTsNCiAg
ICAtCWxpbmVFZGl0LT5oaWRlKCk7DQogICAgLQ0KICAgIC0JdGhpcy0+bmV4dFZpZXcgPSB2aWV3
TGlzdDsNCiAgICAtCXZpZXdMaXN0ID0gdGhpczsNCiAgICAtfQ0KICAgIC0NCiAgICAtQ29uZmln
Vmlldzo6fkNvbmZpZ1ZpZXcodm9pZCkNCiAgICAtew0KICAgIC0JQ29uZmlnVmlldyoqIHZwOw0K
ICAgIC0NCiAgICAtCWZvciAodnAgPSAmdmlld0xpc3Q7ICp2cDsgdnAgPSAmKCp2cCktPm5leHRW
aWV3KSB7DQogICAgLQkJaWYgKCp2cCA9PSB0aGlzKSB7DQogICAgLQkJCSp2cCA9IG5leHRWaWV3
Ow0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAg
LXZvaWQgQ29uZmlnVmlldzo6c2V0T3B0aW9uTW9kZShRQWN0aW9uICphY3QpDQogICAgLXsNCiAg
ICAtCWlmIChhY3QgPT0gc2hvd05vcm1hbEFjdGlvbikNCiAgICAtCQlsaXN0LT5vcHRNb2RlID0g
bm9ybWFsT3B0Ow0KICAgIC0JZWxzZSBpZiAoYWN0ID09IHNob3dBbGxBY3Rpb24pDQogICAgLQkJ
bGlzdC0+b3B0TW9kZSA9IGFsbE9wdDsNCiAgICAtCWVsc2UNCiAgICAtCQlsaXN0LT5vcHRNb2Rl
ID0gcHJvbXB0T3B0Ow0KICAgIC0NCiAgICAtCWxpc3QtPnVwZGF0ZUxpc3RBbGwoKTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdWaWV3OjpzZXRTaG93TmFtZShib29sIGIpDQogICAg
LXsNCiAgICAtCWlmIChsaXN0LT5zaG93TmFtZSAhPSBiKSB7DQogICAgLQkJbGlzdC0+c2hvd05h
bWUgPSBiOw0KICAgIC0JCWxpc3QtPnJlaW5pdCgpOw0KICAgIC0JCWVtaXQgc2hvd05hbWVDaGFu
Z2VkKGIpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ1ZpZXc6OnNl
dFNob3dSYW5nZShib29sIGIpDQogICAgLXsNCiAgICAtCWlmIChsaXN0LT5zaG93UmFuZ2UgIT0g
Yikgew0KICAgIC0JCWxpc3QtPnNob3dSYW5nZSA9IGI7DQogICAgLQkJbGlzdC0+cmVpbml0KCk7
DQogICAgLQkJZW1pdCBzaG93UmFuZ2VDaGFuZ2VkKGIpOw0KICAgIC0JfQ0KICAgIC19DQogICAg
LQ0KICAgIC12b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dEYXRhKGJvb2wgYikNCiAgICAtew0KICAg
IC0JaWYgKGxpc3QtPnNob3dEYXRhICE9IGIpIHsNCiAgICAtCQlsaXN0LT5zaG93RGF0YSA9IGI7
DQogICAgLQkJbGlzdC0+cmVpbml0KCk7DQogICAgLQkJZW1pdCBzaG93RGF0YUNoYW5nZWQoYik7
DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6c2V0QWxsT3Bl
bihib29sIG9wZW4pDQogICAgLXsNCiAgICAtCVEzTGlzdFZpZXdJdGVtSXRlcmF0b3IgaXQodGhp
cyk7DQogICAgLQ0KICAgIC0JZm9yICg7IGl0LmN1cnJlbnQoKTsgaXQrKykNCiAgICAtCQlpdC5j
dXJyZW50KCktPnNldE9wZW4ob3Blbik7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmln
Vmlldzo6dXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKQ0KICAgIC17DQogICAgLQlDb25maWdW
aWV3KiB2Ow0KICAgIC0NCiAgICAtCWZvciAodiA9IHZpZXdMaXN0OyB2OyB2ID0gdi0+bmV4dFZp
ZXcpDQogICAgLQkJdi0+bGlzdC0+dXBkYXRlTGlzdChpdGVtKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtdm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0QWxsKHZvaWQpDQogICAgLXsNCiAgICAtCUNv
bmZpZ1ZpZXcqIHY7DQogICAgLQ0KICAgIC0JZm9yICh2ID0gdmlld0xpc3Q7IHY7IHYgPSB2LT5u
ZXh0VmlldykNCiAgICAtCQl2LT5saXN0LT51cGRhdGVMaXN0QWxsKCk7DQogICAgLX0NCiAgICAt
DQogICAgLUNvbmZpZ0luZm9WaWV3OjpDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNv
bnN0IGNoYXIgKm5hbWUpDQogICAgLQk6IFBhcmVudChwYXJlbnQsIG5hbWUpLCBzeW0oMCksIF9t
ZW51KDApDQogICAgLXsNCiAgICAtCWlmIChuYW1lKSB7DQogICAgLQkJY29uZmlnU2V0dGluZ3Mt
PmJlZ2luR3JvdXAobmFtZSk7DQogICAgLQkJX3Nob3dEZWJ1ZyA9IGNvbmZpZ1NldHRpbmdzLT5y
ZWFkQm9vbEVudHJ5KCIvc2hvd0RlYnVnIiwgZmFsc2UpOw0KICAgIC0JCWNvbmZpZ1NldHRpbmdz
LT5lbmRHcm91cCgpOw0KICAgIC0JCWNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1
aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdzKCkpKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAg
ICAtdm9pZCBDb25maWdJbmZvVmlldzo6c2F2ZVNldHRpbmdzKHZvaWQpDQogICAgLXsNCiAgICAt
CWlmIChuYW1lKCkpIHsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChuYW1lKCkp
Ow0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvc2hvd0RlYnVnIiwgc2hvd0Rl
YnVnKCkpOw0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgIC0JfQ0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0luZm9WaWV3OjpzZXRTaG93RGVidWcoYm9vbCBi
KQ0KICAgIC17DQogICAgLQlpZiAoX3Nob3dEZWJ1ZyAhPSBiKSB7DQogICAgLQkJX3Nob3dEZWJ1
ZyA9IGI7DQogICAgLQkJaWYgKF9tZW51KQ0KICAgIC0JCQltZW51SW5mbygpOw0KICAgIC0JCWVs
c2UgaWYgKHN5bSkNCiAgICAtCQkJc3ltYm9sSW5mbygpOw0KICAgIC0JCWVtaXQgc2hvd0RlYnVn
Q2hhbmdlZChiKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdJbmZv
Vmlldzo6c2V0SW5mbyhzdHJ1Y3QgbWVudSAqbSkNCiAgICAtew0KICAgIC0JaWYgKF9tZW51ID09
IG0pDQogICAgLQkJcmV0dXJuOw0KICAgIC0JX21lbnUgPSBtOw0KICAgIC0Jc3ltID0gTlVMTDsN
CiAgICAtCWlmICghX21lbnUpDQogICAgLQkJY2xlYXIoKTsNCiAgICAtCWVsc2UNCiAgICAtCQlt
ZW51SW5mbygpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0luZm9WaWV3OjpzeW1i
b2xJbmZvKHZvaWQpDQogICAgLXsNCiAgICAtCVFTdHJpbmcgc3RyOw0KICAgIC0NCiAgICAtCXN0
ciArPSAiPGJpZz5TeW1ib2w6IDxiPiI7DQogICAgLQlzdHIgKz0gcHJpbnRfZmlsdGVyKHN5bS0+
bmFtZSk7DQogICAgLQlzdHIgKz0gIjwvYj48L2JpZz48YnI+PGJyPnZhbHVlOiAiOw0KICAgIC0J
c3RyICs9IHByaW50X2ZpbHRlcihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsNCiAgICAtCXN0
ciArPSAiPGJyPnZpc2liaWxpdHk6ICI7DQogICAgLQlzdHIgKz0gc3ltLT52aXNpYmxlID09IHll
cyA/ICJ5IiA6IHN5bS0+dmlzaWJsZSA9PSBtb2QgPyAibSIgOiAibiI7DQogICAgLQlzdHIgKz0g
Ijxicj4iOw0KICAgIC0Jc3RyICs9IGRlYnVnX2luZm8oc3ltKTsNCiAgICAtDQogICAgLQlzZXRU
ZXh0KHN0cik7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnSW5mb1ZpZXc6Om1lbnVJ
bmZvKHZvaWQpDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wqIHN5bTsNCiAgICAtCVFTdHJp
bmcgaGVhZCwgZGVidWcsIGhlbHA7DQogICAgLQ0KICAgIC0Jc3ltID0gX21lbnUtPnN5bTsNCiAg
ICAtCWlmIChzeW0pIHsNCiAgICAtCQlpZiAoX21lbnUtPnByb21wdCkgew0KICAgIC0JCQloZWFk
ICs9ICI8YmlnPjxiPiI7DQogICAgLQkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKF8oX21lbnUtPnBy
b21wdC0+dGV4dCkpOw0KICAgIC0JCQloZWFkICs9ICI8L2I+PC9iaWc+IjsNCiAgICAtCQkJaWYg
KHN5bS0+bmFtZSkgew0KICAgIC0JCQkJaGVhZCArPSAiICgiOw0KICAgIC0JCQkJaWYgKHNob3dE
ZWJ1ZygpKQ0KICAgIC0JCQkJCWhlYWQgKz0gUVN0cmluZygpLnNwcmludGYoIjxhIGhyZWY9XCJz
JXBcIj4iLCBzeW0pOw0KICAgIC0JCQkJaGVhZCArPSBwcmludF9maWx0ZXIoc3ltLT5uYW1lKTsN
CiAgICAtCQkJCWlmIChzaG93RGVidWcoKSkNCiAgICAtCQkJCQloZWFkICs9ICI8L2E+IjsNCiAg
ICAtCQkJCWhlYWQgKz0gIikiOw0KICAgIC0JCQl9DQogICAgLQkJfSBlbHNlIGlmIChzeW0tPm5h
bWUpIHsNCiAgICAtCQkJaGVhZCArPSAiPGJpZz48Yj4iOw0KICAgIC0JCQlpZiAoc2hvd0RlYnVn
KCkpDQogICAgLQkJCQloZWFkICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+
Iiwgc3ltKTsNCiAgICAtCQkJaGVhZCArPSBwcmludF9maWx0ZXIoc3ltLT5uYW1lKTsNCiAgICAt
CQkJaWYgKHNob3dEZWJ1ZygpKQ0KICAgIC0JCQkJaGVhZCArPSAiPC9hPiI7DQogICAgLQkJCWhl
YWQgKz0gIjwvYj48L2JpZz4iOw0KICAgIC0JCX0NCiAgICAtCQloZWFkICs9ICI8YnI+PGJyPiI7
DQogICAgLQ0KICAgIC0JCWlmIChzaG93RGVidWcoKSkNCiAgICAtCQkJZGVidWcgPSBkZWJ1Z19p
bmZvKHN5bSk7DQogICAgLQ0KICAgIC0JCXN0cnVjdCBnc3RyIGhlbHBfZ3N0ciA9IHN0cl9uZXco
KTsNCiAgICAtCQltZW51X2dldF9leHRfaGVscChfbWVudSwgJmhlbHBfZ3N0cik7DQogICAgLQkJ
aGVscCA9IHByaW50X2ZpbHRlcihzdHJfZ2V0KCZoZWxwX2dzdHIpKTsNCiAgICAtCQlzdHJfZnJl
ZSgmaGVscF9nc3RyKTsNCiAgICAtCX0gZWxzZSBpZiAoX21lbnUtPnByb21wdCkgew0KICAgIC0J
CWhlYWQgKz0gIjxiaWc+PGI+IjsNCiAgICAtCQloZWFkICs9IHByaW50X2ZpbHRlcihfKF9tZW51
LT5wcm9tcHQtPnRleHQpKTsNCiAgICAtCQloZWFkICs9ICI8L2I+PC9iaWc+PGJyPjxicj4iOw0K
ICAgIC0JCWlmIChzaG93RGVidWcoKSkgew0KICAgIC0JCQlpZiAoX21lbnUtPnByb21wdC0+dmlz
aWJsZS5leHByKSB7DQogICAgLQkJCQlkZWJ1ZyArPSAiJm5ic3A7Jm5ic3A7ZGVwOiAiOw0KICAg
IC0JCQkJZXhwcl9wcmludChfbWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIsIGV4cHJfcHJpbnRf
aGVscCwgJmRlYnVnLCBFX05PTkUpOw0KICAgIC0JCQkJZGVidWcgKz0gIjxicj48YnI+IjsNCiAg
ICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWlmIChzaG93RGVidWcoKSkNCiAgICAt
CQlkZWJ1ZyArPSBRU3RyaW5nKCkuc3ByaW50ZigiZGVmaW5lZCBhdCAlczolZDxicj48YnI+Iiwg
X21lbnUtPmZpbGUtPm5hbWUsIF9tZW51LT5saW5lbm8pOw0KICAgIC0NCiAgICAtCXNldFRleHQo
aGVhZCArIGRlYnVnICsgaGVscCk7DQogICAgLX0NCiAgICAtDQogICAgLVFTdHJpbmcgQ29uZmln
SW5mb1ZpZXc6OmRlYnVnX2luZm8oc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlR
U3RyaW5nIGRlYnVnOw0KICAgIC0NCiAgICAtCWRlYnVnICs9ICJ0eXBlOiAiOw0KICAgIC0JZGVi
dWcgKz0gcHJpbnRfZmlsdGVyKHN5bV90eXBlX25hbWUoc3ltLT50eXBlKSk7DQogICAgLQlpZiAo
c3ltX2lzX2Nob2ljZShzeW0pKQ0KICAgIC0JCWRlYnVnICs9ICIgKGNob2ljZSkiOw0KICAgIC0J
ZGVidWcgKz0gIjxicj4iOw0KICAgIC0JaWYgKHN5bS0+cmV2X2RlcC5leHByKSB7DQogICAgLQkJ
ZGVidWcgKz0gInJldmVyc2UgZGVwOiAiOw0KICAgIC0JCWV4cHJfcHJpbnQoc3ltLT5yZXZfZGVw
LmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVnLCBFX05PTkUpOw0KICAgIC0JCWRlYnVnICs9
ICI8YnI+IjsNCiAgICAtCX0NCiAgICAtCWZvciAoc3RydWN0IHByb3BlcnR5ICpwcm9wID0gc3lt
LT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgIC0JCXN3aXRjaCAocHJvcC0+
dHlwZSkgew0KICAgIC0JCWNhc2UgUF9QUk9NUFQ6DQogICAgLQkJY2FzZSBQX01FTlU6DQogICAg
LQkJCWRlYnVnICs9IFFTdHJpbmcoKS5zcHJpbnRmKCJwcm9tcHQ6IDxhIGhyZWY9XCJtJXBcIj4i
LCBwcm9wLT5tZW51KTsNCiAgICAtCQkJZGVidWcgKz0gcHJpbnRfZmlsdGVyKF8ocHJvcC0+dGV4
dCkpOw0KICAgIC0JCQlkZWJ1ZyArPSAiPC9hPjxicj4iOw0KICAgIC0JCQlicmVhazsNCiAgICAt
CQljYXNlIFBfREVGQVVMVDoNCiAgICAtCQljYXNlIFBfU0VMRUNUOg0KICAgIC0JCWNhc2UgUF9S
QU5HRToNCiAgICAtCQljYXNlIFBfRU5WOg0KICAgIC0JCQlkZWJ1ZyArPSBwcm9wX2dldF90eXBl
X25hbWUocHJvcC0+dHlwZSk7DQogICAgLQkJCWRlYnVnICs9ICI6ICI7DQogICAgLQkJCWV4cHJf
cHJpbnQocHJvcC0+ZXhwciwgZXhwcl9wcmludF9oZWxwLCAmZGVidWcsIEVfTk9ORSk7DQogICAg
LQkJCWRlYnVnICs9ICI8YnI+IjsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX0NIT0lD
RToNCiAgICAtCQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgIC0JCQkJZGVidWcgKz0g
ImNob2ljZTogIjsNCiAgICAtCQkJCWV4cHJfcHJpbnQocHJvcC0+ZXhwciwgZXhwcl9wcmludF9o
ZWxwLCAmZGVidWcsIEVfTk9ORSk7DQogICAgLQkJCQlkZWJ1ZyArPSAiPGJyPiI7DQogICAgLQkJ
CX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJZGVidWcgKz0gInVu
a25vd24gcHJvcGVydHk6ICI7DQogICAgLQkJCWRlYnVnICs9IHByb3BfZ2V0X3R5cGVfbmFtZShw
cm9wLT50eXBlKTsNCiAgICAtCQkJZGVidWcgKz0gIjxicj4iOw0KICAgIC0JCX0NCiAgICAtCQlp
ZiAocHJvcC0+dmlzaWJsZS5leHByKSB7DQogICAgLQkJCWRlYnVnICs9ICImbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDtkZXA6ICI7DQogICAgLQkJCWV4cHJfcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsNCiAgICAtCQkJZGVidWcgKz0gIjxi
cj4iOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWRlYnVnICs9ICI8YnI+IjsNCiAgICAtDQog
ICAgLQlyZXR1cm4gZGVidWc7DQogICAgLX0NCiAgICAtDQogICAgLVFTdHJpbmcgQ29uZmlnSW5m
b1ZpZXc6OnByaW50X2ZpbHRlcihjb25zdCBRU3RyaW5nICZzdHIpDQogICAgLXsNCiAgICAtCVFS
ZWdFeHAgcmUoIls8PiZcIlxcbl0iKTsNCiAgICAtCVFTdHJpbmcgcmVzID0gc3RyOw0KICAgIC0J
Zm9yIChpbnQgaSA9IDA7IChpID0gcmVzLmZpbmQocmUsIGkpKSA+PSAwOykgew0KICAgIC0JCXN3
aXRjaCAocmVzW2ldLmxhdGluMSgpKSB7DQogICAgLQkJY2FzZSAnPCc6DQogICAgLQkJCXJlcy5y
ZXBsYWNlKGksIDEsICImbHQ7Iik7DQogICAgLQkJCWkgKz0gNDsNCiAgICAtCQkJYnJlYWs7DQog
ICAgLQkJY2FzZSAnPic6DQogICAgLQkJCXJlcy5yZXBsYWNlKGksIDEsICImZ3Q7Iik7DQogICAg
LQkJCWkgKz0gNDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnJic6DQogICAgLQkJCXJl
cy5yZXBsYWNlKGksIDEsICImYW1wOyIpOw0KICAgIC0JCQlpICs9IDU7DQogICAgLQkJCWJyZWFr
Ow0KICAgIC0JCWNhc2UgJyInOg0KICAgIC0JCQlyZXMucmVwbGFjZShpLCAxLCAiJnF1b3Q7Iik7
DQogICAgLQkJCWkgKz0gNjsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnXG4nOg0KICAg
IC0JCQlyZXMucmVwbGFjZShpLCAxLCAiPGJyPiIpOw0KICAgIC0JCQlpICs9IDQ7DQogICAgLQkJ
CWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCXJldHVybiByZXM7DQogICAgLX0NCiAg
ICAtDQogICAgLXZvaWQgQ29uZmlnSW5mb1ZpZXc6OmV4cHJfcHJpbnRfaGVscCh2b2lkICpkYXRh
LCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikNCiAgICAtew0KICAgIC0JUVN0
cmluZyogdGV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8UVN0cmluZyo+KGRhdGEpOw0KICAgIC0JUVN0
cmluZyBzdHIyID0gcHJpbnRfZmlsdGVyKHN0cik7DQogICAgLQ0KICAgIC0JaWYgKHN5bSAmJiBz
eW0tPm5hbWUgJiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkgew0KICAgIC0JCSp0ZXh0
ICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+Iiwgc3ltKTsNCiAgICAtCQkq
dGV4dCArPSBzdHIyOw0KICAgIC0JCSp0ZXh0ICs9ICI8L2E+IjsNCiAgICAtCX0gZWxzZQ0KICAg
IC0JCSp0ZXh0ICs9IHN0cjI7DQogICAgLX0NCiAgICAtDQogICAgLVEzUG9wdXBNZW51KiBDb25m
aWdJbmZvVmlldzo6Y3JlYXRlUG9wdXBNZW51KGNvbnN0IFFQb2ludCYgcG9zKQ0KICAgIC17DQog
ICAgLQlRM1BvcHVwTWVudSogcG9wdXAgPSBQYXJlbnQ6OmNyZWF0ZVBvcHVwTWVudShwb3MpOw0K
ICAgIC0JUTNBY3Rpb24qIGFjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJTaG93IERlYnVn
IEluZm8iKSwgMCwgcG9wdXApOw0KICAgIC0JICBhY3Rpb24tPnNldFRvZ2dsZUFjdGlvbihUUlVF
KTsNCiAgICAtCSAgY29ubmVjdChhY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgU0xPVChz
ZXRTaG93RGVidWcoYm9vbCkpKTsNCiAgICAtCSAgY29ubmVjdCh0aGlzLCBTSUdOQUwoc2hvd0Rl
YnVnQ2hhbmdlZChib29sKSksIGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkpOw0KICAgIC0JICBh
Y3Rpb24tPnNldE9uKHNob3dEZWJ1ZygpKTsNCiAgICAtCXBvcHVwLT5pbnNlcnRTZXBhcmF0b3Io
KTsNCiAgICAtCWFjdGlvbi0+YWRkVG8ocG9wdXApOw0KICAgIC0JcmV0dXJuIHBvcHVwOw0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0luZm9WaWV3Ojpjb250ZW50c0NvbnRleHRNZW51
RXZlbnQoUUNvbnRleHRNZW51RXZlbnQgKmUpDQogICAgLXsNCiAgICAtCVBhcmVudDo6Y29udGVu
dHNDb250ZXh0TWVudUV2ZW50KGUpOw0KICAgIC19DQogICAgLQ0KICAgIC1Db25maWdTZWFyY2hX
aW5kb3c6OkNvbmZpZ1NlYXJjaFdpbmRvdyhDb25maWdNYWluV2luZG93KiBwYXJlbnQsIGNvbnN0
IGNoYXIgKm5hbWUpDQogICAgLQk6IFBhcmVudChwYXJlbnQsIG5hbWUpLCByZXN1bHQoTlVMTCkN
CiAgICAtew0KICAgIC0Jc2V0Q2FwdGlvbigiU2VhcmNoIENvbmZpZyIpOw0KICAgIC0NCiAgICAt
CVFWQm94TGF5b3V0KiBsYXlvdXQxID0gbmV3IFFWQm94TGF5b3V0KHRoaXMsIDExLCA2KTsNCiAg
ICAtCVFIQm94TGF5b3V0KiBsYXlvdXQyID0gbmV3IFFIQm94TGF5b3V0KDAsIDAsIDYpOw0KICAg
IC0JbGF5b3V0Mi0+YWRkV2lkZ2V0KG5ldyBRTGFiZWwoXygiRmluZDoiKSwgdGhpcykpOw0KICAg
IC0JZWRpdEZpZWxkID0gbmV3IFFMaW5lRWRpdCh0aGlzKTsNCiAgICAtCWNvbm5lY3QoZWRpdEZp
ZWxkLCBTSUdOQUwocmV0dXJuUHJlc3NlZCgpKSwgU0xPVChzZWFyY2goKSkpOw0KICAgIC0JbGF5
b3V0Mi0+YWRkV2lkZ2V0KGVkaXRGaWVsZCk7DQogICAgLQlzZWFyY2hCdXR0b24gPSBuZXcgUVB1
c2hCdXR0b24oXygiU2VhcmNoIiksIHRoaXMpOw0KICAgIC0Jc2VhcmNoQnV0dG9uLT5zZXRBdXRv
RGVmYXVsdChGQUxTRSk7DQogICAgLQljb25uZWN0KHNlYXJjaEJ1dHRvbiwgU0lHTkFMKGNsaWNr
ZWQoKSksIFNMT1Qoc2VhcmNoKCkpKTsNCiAgICAtCWxheW91dDItPmFkZFdpZGdldChzZWFyY2hC
dXR0b24pOw0KICAgIC0JbGF5b3V0MS0+YWRkTGF5b3V0KGxheW91dDIpOw0KICAgIC0NCiAgICAt
CXNwbGl0ID0gbmV3IFFTcGxpdHRlcih0aGlzKTsNCiAgICAtCXNwbGl0LT5zZXRPcmllbnRhdGlv
bihRdDo6VmVydGljYWwpOw0KICAgIC0JbGlzdCA9IG5ldyBDb25maWdWaWV3KHNwbGl0LCBuYW1l
KTsNCiAgICAtCWxpc3QtPmxpc3QtPm1vZGUgPSBsaXN0TW9kZTsNCiAgICAtCWluZm8gPSBuZXcg
Q29uZmlnSW5mb1ZpZXcoc3BsaXQsIG5hbWUpOw0KICAgIC0JY29ubmVjdChsaXN0LT5saXN0LCBT
SUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0KICAgIC0JCWluZm8sIFNMT1Qoc2V0
SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0JY29ubmVjdChsaXN0LT5saXN0LCBTSUdOQUwo
bWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0KICAgIC0JCXBhcmVudCwgU0xPVChzZXRNZW51
TGluayhzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0NCiAgICAtCWxheW91dDEtPmFkZFdpZGdldChz
cGxpdCk7DQogICAgLQ0KICAgIC0JaWYgKG5hbWUpIHsNCiAgICAtCQlpbnQgeCwgeSwgd2lkdGgs
IGhlaWdodDsNCiAgICAtCQlib29sIG9rOw0KICAgIC0NCiAgICAtCQljb25maWdTZXR0aW5ncy0+
YmVnaW5Hcm91cChuYW1lKTsNCiAgICAtCQl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVt
RW50cnkoIi93aW5kb3cgd2lkdGgiLCBwYXJlbnQtPndpZHRoKCkgLyAyKTsNCiAgICAtCQloZWln
aHQgPSBjb25maWdTZXR0aW5ncy0+cmVhZE51bUVudHJ5KCIvd2luZG93IGhlaWdodCIsIHBhcmVu
dC0+aGVpZ2h0KCkgLyAyKTsNCiAgICAtCQlyZXNpemUod2lkdGgsIGhlaWdodCk7DQogICAgLQkJ
eCA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnkoIi93aW5kb3cgeCIsIDAsICZvayk7DQog
ICAgLQkJaWYgKG9rKQ0KICAgIC0JCQl5ID0gY29uZmlnU2V0dGluZ3MtPnJlYWROdW1FbnRyeSgi
L3dpbmRvdyB5IiwgMCwgJm9rKTsNCiAgICAtCQlpZiAob2spDQogICAgLQkJCW1vdmUoeCwgeSk7
DQogICAgLQkJUTNWYWx1ZUxpc3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6
ZXMoIi9zcGxpdCIsICZvayk7DQogICAgLQkJaWYgKG9rKQ0KICAgIC0JCQlzcGxpdC0+c2V0U2l6
ZXMoc2l6ZXMpOw0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgIC0JCWNv
bm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNldHRpbmdz
KCkpKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdTZWFyY2hXaW5k
b3c6OnNhdmVTZXR0aW5ncyh2b2lkKQ0KICAgIC17DQogICAgLQlpZiAobmFtZSgpKSB7DQogICAg
LQkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAobmFtZSgpKTsNCiAgICAtCQljb25maWdTZXR0
aW5ncy0+d3JpdGVFbnRyeSgiL3dpbmRvdyB4IiwgcG9zKCkueCgpKTsNCiAgICAtCQljb25maWdT
ZXR0aW5ncy0+d3JpdGVFbnRyeSgiL3dpbmRvdyB5IiwgcG9zKCkueSgpKTsNCiAgICAtCQljb25m
aWdTZXR0aW5ncy0+d3JpdGVFbnRyeSgiL3dpbmRvdyB3aWR0aCIsIHNpemUoKS53aWR0aCgpKTsN
CiAgICAtCQljb25maWdTZXR0aW5ncy0+d3JpdGVFbnRyeSgiL3dpbmRvdyBoZWlnaHQiLCBzaXpl
KCkuaGVpZ2h0KCkpOw0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT53cml0ZVNpemVzKCIvc3BsaXQi
LCBzcGxpdC0+c2l6ZXMoKSk7DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7DQog
ICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnU2VhcmNoV2luZG93OjpzZWFy
Y2godm9pZCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqKnA7DQogICAgLQlzdHJ1Y3Qg
cHJvcGVydHkgKnByb3A7DQogICAgLQlDb25maWdJdGVtICpsYXN0SXRlbSA9IE5VTEw7DQogICAg
LQ0KICAgIC0JZnJlZShyZXN1bHQpOw0KICAgIC0JbGlzdC0+bGlzdC0+Y2xlYXIoKTsNCiAgICAt
CWluZm8tPmNsZWFyKCk7DQogICAgLQ0KICAgIC0JcmVzdWx0ID0gc3ltX3JlX3NlYXJjaChlZGl0
RmllbGQtPnRleHQoKS5sYXRpbjEoKSk7DQogICAgLQlpZiAoIXJlc3VsdCkNCiAgICAtCQlyZXR1
cm47DQogICAgLQlmb3IgKHAgPSByZXN1bHQ7ICpwOyBwKyspIHsNCiAgICAtCQlmb3JfYWxsX3By
b21wdHMoKCpwKSwgcHJvcCkNCiAgICAtCQkJbGFzdEl0ZW0gPSBuZXcgQ29uZmlnSXRlbShsaXN0
LT5saXN0LCBsYXN0SXRlbSwgcHJvcC0+bWVudSwNCiAgICAtCQkJCQkJICBtZW51X2lzX3Zpc2li
bGUocHJvcC0+bWVudSkpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0g
KiBDb25zdHJ1Y3QgdGhlIGNvbXBsZXRlIGNvbmZpZyB3aWRnZXQNCiAgICAtICovDQogICAgLUNv
bmZpZ01haW5XaW5kb3c6OkNvbmZpZ01haW5XaW5kb3codm9pZCkNCiAgICAtCTogc2VhcmNoV2lu
ZG93KDApDQogICAgLXsNCiAgICAtCVFNZW51QmFyKiBtZW51Ow0KICAgIC0JYm9vbCBvazsNCiAg
ICAtCWludCB4LCB5LCB3aWR0aCwgaGVpZ2h0Ow0KICAgIC0JY2hhciB0aXRsZVsyNTZdOw0KICAg
IC0NCiAgICAtCVFEZXNrdG9wV2lkZ2V0ICpkID0gY29uZmlnQXBwLT5kZXNrdG9wKCk7DQogICAg
LQlzbnByaW50Zih0aXRsZSwgc2l6ZW9mKHRpdGxlKSwgIiVzJXMiLA0KICAgIC0JCXJvb3RtZW51
LnByb21wdC0+dGV4dCwNCiAgICAtI2lmIFFUX1ZFUlNJT04gPCAweDA0MDAwMA0KICAgIC0JCSIg
KFF0MykiDQogICAgLSNlbHNlDQogICAgLQkJIiINCiAgICAtI2VuZGlmDQogICAgLQkJKTsNCiAg
ICAtCXNldENhcHRpb24odGl0bGUpOw0KICAgIC0NCiAgICAtCXdpZHRoID0gY29uZmlnU2V0dGlu
Z3MtPnJlYWROdW1FbnRyeSgiL3dpbmRvdyB3aWR0aCIsIGQtPndpZHRoKCkgLSA2NCk7DQogICAg
LQloZWlnaHQgPSBjb25maWdTZXR0aW5ncy0+cmVhZE51bUVudHJ5KCIvd2luZG93IGhlaWdodCIs
IGQtPmhlaWdodCgpIC0gNjQpOw0KICAgIC0JcmVzaXplKHdpZHRoLCBoZWlnaHQpOw0KICAgIC0J
eCA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnkoIi93aW5kb3cgeCIsIDAsICZvayk7DQog
ICAgLQlpZiAob2spDQogICAgLQkJeSA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkTnVtRW50cnkoIi93
aW5kb3cgeSIsIDAsICZvayk7DQogICAgLQlpZiAob2spDQogICAgLQkJbW92ZSh4LCB5KTsNCiAg
ICAtDQogICAgLQlzcGxpdDEgPSBuZXcgUVNwbGl0dGVyKHRoaXMpOw0KICAgIC0Jc3BsaXQxLT5z
ZXRPcmllbnRhdGlvbihRdDo6SG9yaXpvbnRhbCk7DQogICAgLQlzZXRDZW50cmFsV2lkZ2V0KHNw
bGl0MSk7DQogICAgLQ0KICAgIC0JbWVudVZpZXcgPSBuZXcgQ29uZmlnVmlldyhzcGxpdDEsICJt
ZW51Iik7DQogICAgLQltZW51TGlzdCA9IG1lbnVWaWV3LT5saXN0Ow0KICAgIC0NCiAgICAtCXNw
bGl0MiA9IG5ldyBRU3BsaXR0ZXIoc3BsaXQxKTsNCiAgICAtCXNwbGl0Mi0+c2V0T3JpZW50YXRp
b24oUXQ6OlZlcnRpY2FsKTsNCiAgICAtDQogICAgLQkvLyBjcmVhdGUgY29uZmlnIHRyZWUNCiAg
ICAtCWNvbmZpZ1ZpZXcgPSBuZXcgQ29uZmlnVmlldyhzcGxpdDIsICJjb25maWciKTsNCiAgICAt
CWNvbmZpZ0xpc3QgPSBjb25maWdWaWV3LT5saXN0Ow0KICAgIC0NCiAgICAtCWhlbHBUZXh0ID0g
bmV3IENvbmZpZ0luZm9WaWV3KHNwbGl0MiwgImhlbHAiKTsNCiAgICAtCWhlbHBUZXh0LT5zZXRU
ZXh0Rm9ybWF0KFF0OjpSaWNoVGV4dCk7DQogICAgLQ0KICAgIC0Jc2V0VGFiT3JkZXIoY29uZmln
TGlzdCwgaGVscFRleHQpOw0KICAgIC0JY29uZmlnTGlzdC0+c2V0Rm9jdXMoKTsNCiAgICAtDQog
ICAgLQltZW51ID0gbWVudUJhcigpOw0KICAgIC0JdG9vbEJhciA9IG5ldyBRM1Rvb2xCYXIoIlRv
b2xzIiwgdGhpcyk7DQogICAgLQ0KICAgIC0JYmFja0FjdGlvbiA9IG5ldyBRM0FjdGlvbigiQmFj
ayIsIFFQaXhtYXAoeHBtX2JhY2spLCBfKCJCYWNrIiksIDAsIHRoaXMpOw0KICAgIC0JICBjb25u
ZWN0KGJhY2tBY3Rpb24sIFNJR05BTChhY3RpdmF0ZWQoKSksIFNMT1QoZ29CYWNrKCkpKTsNCiAg
ICAtCSAgYmFja0FjdGlvbi0+c2V0RW5hYmxlZChGQUxTRSk7DQogICAgLQlRM0FjdGlvbiAqcXVp
dEFjdGlvbiA9IG5ldyBRM0FjdGlvbigiUXVpdCIsIF8oIiZRdWl0IiksIFF0OjpDVFJMICsgUXQ6
OktleV9RLCB0aGlzKTsNCiAgICAtCSAgY29ubmVjdChxdWl0QWN0aW9uLCBTSUdOQUwoYWN0aXZh
dGVkKCkpLCBTTE9UKGNsb3NlKCkpKTsNCiAgICAtCVEzQWN0aW9uICpsb2FkQWN0aW9uID0gbmV3
IFEzQWN0aW9uKCJMb2FkIiwgUVBpeG1hcCh4cG1fbG9hZCksIF8oIiZMb2FkIiksIFF0OjpDVFJM
ICsgUXQ6OktleV9MLCB0aGlzKTsNCiAgICAtCSAgY29ubmVjdChsb2FkQWN0aW9uLCBTSUdOQUwo
YWN0aXZhdGVkKCkpLCBTTE9UKGxvYWRDb25maWcoKSkpOw0KICAgIC0Jc2F2ZUFjdGlvbiA9IG5l
dyBRM0FjdGlvbigiU2F2ZSIsIFFQaXhtYXAoeHBtX3NhdmUpLCBfKCImU2F2ZSIpLCBRdDo6Q1RS
TCArIFF0OjpLZXlfUywgdGhpcyk7DQogICAgLQkgIGNvbm5lY3Qoc2F2ZUFjdGlvbiwgU0lHTkFM
KGFjdGl2YXRlZCgpKSwgU0xPVChzYXZlQ29uZmlnKCkpKTsNCiAgICAtCWNvbmZfc2V0X2NoYW5n
ZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsNCiAgICAtCS8vIFNldCBzYXZlQWN0aW9uJ3MgaW5p
dGlhbCBzdGF0ZQ0KICAgIC0JY29uZl9jaGFuZ2VkKCk7DQogICAgLQlRM0FjdGlvbiAqc2F2ZUFz
QWN0aW9uID0gbmV3IFEzQWN0aW9uKCJTYXZlIEFzLi4uIiwgXygiU2F2ZSAmQXMuLi4iKSwgMCwg
dGhpcyk7DQogICAgLQkgIGNvbm5lY3Qoc2F2ZUFzQWN0aW9uLCBTSUdOQUwoYWN0aXZhdGVkKCkp
LCBTTE9UKHNhdmVDb25maWdBcygpKSk7DQogICAgLQlRM0FjdGlvbiAqc2VhcmNoQWN0aW9uID0g
bmV3IFEzQWN0aW9uKCJGaW5kIiwgXygiJkZpbmQiKSwgUXQ6OkNUUkwgKyBRdDo6S2V5X0YsIHRo
aXMpOw0KICAgIC0JICBjb25uZWN0KHNlYXJjaEFjdGlvbiwgU0lHTkFMKGFjdGl2YXRlZCgpKSwg
U0xPVChzZWFyY2hDb25maWcoKSkpOw0KICAgIC0JUTNBY3Rpb24gKnNpbmdsZVZpZXdBY3Rpb24g
PSBuZXcgUTNBY3Rpb24oIlNpbmdsZSBWaWV3IiwgUVBpeG1hcCh4cG1fc2luZ2xlX3ZpZXcpLCBf
KCJTaW5nbGUgVmlldyIpLCAwLCB0aGlzKTsNCiAgICAtCSAgY29ubmVjdChzaW5nbGVWaWV3QWN0
aW9uLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCBTTE9UKHNob3dTaW5nbGVWaWV3KCkpKTsNCiAgICAt
CVEzQWN0aW9uICpzcGxpdFZpZXdBY3Rpb24gPSBuZXcgUTNBY3Rpb24oIlNwbGl0IFZpZXciLCBR
UGl4bWFwKHhwbV9zcGxpdF92aWV3KSwgXygiU3BsaXQgVmlldyIpLCAwLCB0aGlzKTsNCiAgICAt
CSAgY29ubmVjdChzcGxpdFZpZXdBY3Rpb24sIFNJR05BTChhY3RpdmF0ZWQoKSksIFNMT1Qoc2hv
d1NwbGl0VmlldygpKSk7DQogICAgLQlRM0FjdGlvbiAqZnVsbFZpZXdBY3Rpb24gPSBuZXcgUTNB
Y3Rpb24oIkZ1bGwgVmlldyIsIFFQaXhtYXAoeHBtX3RyZWVfdmlldyksIF8oIkZ1bGwgVmlldyIp
LCAwLCB0aGlzKTsNCiAgICAtCSAgY29ubmVjdChmdWxsVmlld0FjdGlvbiwgU0lHTkFMKGFjdGl2
YXRlZCgpKSwgU0xPVChzaG93RnVsbFZpZXcoKSkpOw0KICAgIC0NCiAgICAtCVEzQWN0aW9uICpz
aG93TmFtZUFjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJTaG93IE5hbWUiKSwgMCwgdGhp
cyk7DQogICAgLQkgIHNob3dOYW1lQWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24oVFJVRSk7DQogICAg
LQkgIGNvbm5lY3Qoc2hvd05hbWVBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmln
VmlldywgU0xPVChzZXRTaG93TmFtZShib29sKSkpOw0KICAgIC0JICBjb25uZWN0KGNvbmZpZ1Zp
ZXcsIFNJR05BTChzaG93TmFtZUNoYW5nZWQoYm9vbCkpLCBzaG93TmFtZUFjdGlvbiwgU0xPVChz
ZXRPbihib29sKSkpOw0KICAgIC0JICBzaG93TmFtZUFjdGlvbi0+c2V0T24oY29uZmlnVmlldy0+
c2hvd05hbWUoKSk7DQogICAgLQlRM0FjdGlvbiAqc2hvd1JhbmdlQWN0aW9uID0gbmV3IFEzQWN0
aW9uKE5VTEwsIF8oIlNob3cgUmFuZ2UiKSwgMCwgdGhpcyk7DQogICAgLQkgIHNob3dSYW5nZUFj
dGlvbi0+c2V0VG9nZ2xlQWN0aW9uKFRSVUUpOw0KICAgIC0JICBjb25uZWN0KHNob3dSYW5nZUFj
dGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBjb25maWdWaWV3LCBTTE9UKHNldFNob3dSYW5n
ZShib29sKSkpOw0KICAgIC0JICBjb25uZWN0KGNvbmZpZ1ZpZXcsIFNJR05BTChzaG93UmFuZ2VD
aGFuZ2VkKGJvb2wpKSwgc2hvd1JhbmdlQWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7DQogICAg
LQkgIHNob3dSYW5nZUFjdGlvbi0+c2V0T24oY29uZmlnTGlzdC0+c2hvd1JhbmdlKTsNCiAgICAt
CVEzQWN0aW9uICpzaG93RGF0YUFjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJTaG93IERh
dGEiKSwgMCwgdGhpcyk7DQogICAgLQkgIHNob3dEYXRhQWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24o
VFJVRSk7DQogICAgLQkgIGNvbm5lY3Qoc2hvd0RhdGFBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJv
b2wpKSwgY29uZmlnVmlldywgU0xPVChzZXRTaG93RGF0YShib29sKSkpOw0KICAgIC0JICBjb25u
ZWN0KGNvbmZpZ1ZpZXcsIFNJR05BTChzaG93RGF0YUNoYW5nZWQoYm9vbCkpLCBzaG93RGF0YUFj
dGlvbiwgU0xPVChzZXRPbihib29sKSkpOw0KICAgIC0JICBzaG93RGF0YUFjdGlvbi0+c2V0T24o
Y29uZmlnTGlzdC0+c2hvd0RhdGEpOw0KICAgIC0NCiAgICAtCVFBY3Rpb25Hcm91cCAqb3B0R3Jv
dXAgPSBuZXcgUUFjdGlvbkdyb3VwKHRoaXMpOw0KICAgIC0Jb3B0R3JvdXAtPnNldEV4Y2x1c2l2
ZShUUlVFKTsNCiAgICAtCWNvbm5lY3Qob3B0R3JvdXAsIFNJR05BTChzZWxlY3RlZChRQWN0aW9u
ICopKSwgY29uZmlnVmlldywNCiAgICAtCQlTTE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKSkp
Ow0KICAgIC0JY29ubmVjdChvcHRHcm91cCwgU0lHTkFMKHNlbGVjdGVkKFFBY3Rpb24gKikpLCBt
ZW51VmlldywNCiAgICAtCQlTTE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKSkpOw0KICAgIC0N
CiAgICAtI2lmIFFUX1ZFUlNJT04gPj0gMHgwNDAwMDANCiAgICAtCWNvbmZpZ1ZpZXctPnNob3dO
b3JtYWxBY3Rpb24gPSBuZXcgUUFjdGlvbihfKCJTaG93IE5vcm1hbCBPcHRpb25zIiksIG9wdEdy
b3VwKTsNCiAgICAtCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24gPSBuZXcgUUFjdGlvbihfKCJT
aG93IEFsbCBPcHRpb25zIiksIG9wdEdyb3VwKTsNCiAgICAtCWNvbmZpZ1ZpZXctPnNob3dQcm9t
cHRBY3Rpb24gPSBuZXcgUUFjdGlvbihfKCJTaG93IFByb21wdCBPcHRpb25zIiksIG9wdEdyb3Vw
KTsNCiAgICAtI2Vsc2UNCiAgICAtCWNvbmZpZ1ZpZXctPnNob3dOb3JtYWxBY3Rpb24gPSBuZXcg
UUFjdGlvbihfKCJTaG93IE5vcm1hbCBPcHRpb25zIiksIDAsIG9wdEdyb3VwKTsNCiAgICAtCWNv
bmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24gPSBuZXcgUUFjdGlvbihfKCJTaG93IEFsbCBPcHRpb25z
IiksIDAsIG9wdEdyb3VwKTsNCiAgICAtCWNvbmZpZ1ZpZXctPnNob3dQcm9tcHRBY3Rpb24gPSBu
ZXcgUUFjdGlvbihfKCJTaG93IFByb21wdCBPcHRpb25zIiksIDAsIG9wdEdyb3VwKTsNCiAgICAt
I2VuZGlmDQogICAgLQljb25maWdWaWV3LT5zaG93Tm9ybWFsQWN0aW9uLT5zZXRUb2dnbGVBY3Rp
b24oVFJVRSk7DQogICAgLQljb25maWdWaWV3LT5zaG93Tm9ybWFsQWN0aW9uLT5zZXRPbihjb25m
aWdMaXN0LT5vcHRNb2RlID09IG5vcm1hbE9wdCk7DQogICAgLQljb25maWdWaWV3LT5zaG93QWxs
QWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24oVFJVRSk7DQogICAgLQljb25maWdWaWV3LT5zaG93QWxs
QWN0aW9uLT5zZXRPbihjb25maWdMaXN0LT5vcHRNb2RlID09IGFsbE9wdCk7DQogICAgLQljb25m
aWdWaWV3LT5zaG93UHJvbXB0QWN0aW9uLT5zZXRUb2dnbGVBY3Rpb24oVFJVRSk7DQogICAgLQlj
b25maWdWaWV3LT5zaG93UHJvbXB0QWN0aW9uLT5zZXRPbihjb25maWdMaXN0LT5vcHRNb2RlID09
IHByb21wdE9wdCk7DQogICAgLQ0KICAgIC0JUTNBY3Rpb24gKnNob3dEZWJ1Z0FjdGlvbiA9IG5l
dyBRM0FjdGlvbihOVUxMLCBfKCJTaG93IERlYnVnIEluZm8iKSwgMCwgdGhpcyk7DQogICAgLQkg
IHNob3dEZWJ1Z0FjdGlvbi0+c2V0VG9nZ2xlQWN0aW9uKFRSVUUpOw0KICAgIC0JICBjb25uZWN0
KHNob3dEZWJ1Z0FjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBoZWxwVGV4dCwgU0xPVChz
ZXRTaG93RGVidWcoYm9vbCkpKTsNCiAgICAtCSAgY29ubmVjdChoZWxwVGV4dCwgU0lHTkFMKHNo
b3dEZWJ1Z0NoYW5nZWQoYm9vbCkpLCBzaG93RGVidWdBY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkp
KTsNCiAgICAtCSAgc2hvd0RlYnVnQWN0aW9uLT5zZXRPbihoZWxwVGV4dC0+c2hvd0RlYnVnKCkp
Ow0KICAgIC0NCiAgICAtCVEzQWN0aW9uICpzaG93SW50cm9BY3Rpb24gPSBuZXcgUTNBY3Rpb24o
TlVMTCwgXygiSW50cm9kdWN0aW9uIiksIDAsIHRoaXMpOw0KICAgIC0JICBjb25uZWN0KHNob3dJ
bnRyb0FjdGlvbiwgU0lHTkFMKGFjdGl2YXRlZCgpKSwgU0xPVChzaG93SW50cm8oKSkpOw0KICAg
IC0JUTNBY3Rpb24gKnNob3dBYm91dEFjdGlvbiA9IG5ldyBRM0FjdGlvbihOVUxMLCBfKCJBYm91
dCIpLCAwLCB0aGlzKTsNCiAgICAtCSAgY29ubmVjdChzaG93QWJvdXRBY3Rpb24sIFNJR05BTChh
Y3RpdmF0ZWQoKSksIFNMT1Qoc2hvd0Fib3V0KCkpKTsNCiAgICAtDQogICAgLQkvLyBpbml0IHRv
b2wgYmFyDQogICAgLQliYWNrQWN0aW9uLT5hZGRUbyh0b29sQmFyKTsNCiAgICAtCXRvb2xCYXIt
PmFkZFNlcGFyYXRvcigpOw0KICAgIC0JbG9hZEFjdGlvbi0+YWRkVG8odG9vbEJhcik7DQogICAg
LQlzYXZlQWN0aW9uLT5hZGRUbyh0b29sQmFyKTsNCiAgICAtCXRvb2xCYXItPmFkZFNlcGFyYXRv
cigpOw0KICAgIC0Jc2luZ2xlVmlld0FjdGlvbi0+YWRkVG8odG9vbEJhcik7DQogICAgLQlzcGxp
dFZpZXdBY3Rpb24tPmFkZFRvKHRvb2xCYXIpOw0KICAgIC0JZnVsbFZpZXdBY3Rpb24tPmFkZFRv
KHRvb2xCYXIpOw0KICAgIC0NCiAgICAtCS8vIGNyZWF0ZSBjb25maWcgbWVudQ0KICAgIC0JUTNQ
b3B1cE1lbnUqIGNvbmZpZyA9IG5ldyBRM1BvcHVwTWVudSh0aGlzKTsNCiAgICAtCW1lbnUtPmlu
c2VydEl0ZW0oXygiJkZpbGUiKSwgY29uZmlnKTsNCiAgICAtCWxvYWRBY3Rpb24tPmFkZFRvKGNv
bmZpZyk7DQogICAgLQlzYXZlQWN0aW9uLT5hZGRUbyhjb25maWcpOw0KICAgIC0Jc2F2ZUFzQWN0
aW9uLT5hZGRUbyhjb25maWcpOw0KICAgIC0JY29uZmlnLT5pbnNlcnRTZXBhcmF0b3IoKTsNCiAg
ICAtCXF1aXRBY3Rpb24tPmFkZFRvKGNvbmZpZyk7DQogICAgLQ0KICAgIC0JLy8gY3JlYXRlIGVk
aXQgbWVudQ0KICAgIC0JUTNQb3B1cE1lbnUqIGVkaXRNZW51ID0gbmV3IFEzUG9wdXBNZW51KHRo
aXMpOw0KICAgIC0JbWVudS0+aW5zZXJ0SXRlbShfKCImRWRpdCIpLCBlZGl0TWVudSk7DQogICAg
LQlzZWFyY2hBY3Rpb24tPmFkZFRvKGVkaXRNZW51KTsNCiAgICAtDQogICAgLQkvLyBjcmVhdGUg
b3B0aW9ucyBtZW51DQogICAgLQlRM1BvcHVwTWVudSogb3B0aW9uTWVudSA9IG5ldyBRM1BvcHVw
TWVudSh0aGlzKTsNCiAgICAtCW1lbnUtPmluc2VydEl0ZW0oXygiJk9wdGlvbiIpLCBvcHRpb25N
ZW51KTsNCiAgICAtCXNob3dOYW1lQWN0aW9uLT5hZGRUbyhvcHRpb25NZW51KTsNCiAgICAtCXNo
b3dSYW5nZUFjdGlvbi0+YWRkVG8ob3B0aW9uTWVudSk7DQogICAgLQlzaG93RGF0YUFjdGlvbi0+
YWRkVG8ob3B0aW9uTWVudSk7DQogICAgLQlvcHRpb25NZW51LT5pbnNlcnRTZXBhcmF0b3IoKTsN
CiAgICAtCW9wdEdyb3VwLT5hZGRUbyhvcHRpb25NZW51KTsNCiAgICAtCW9wdGlvbk1lbnUtPmlu
c2VydFNlcGFyYXRvcigpOw0KICAgIC0NCiAgICAtCS8vIGNyZWF0ZSBoZWxwIG1lbnUNCiAgICAt
CVEzUG9wdXBNZW51KiBoZWxwTWVudSA9IG5ldyBRM1BvcHVwTWVudSh0aGlzKTsNCiAgICAtCW1l
bnUtPmluc2VydFNlcGFyYXRvcigpOw0KICAgIC0JbWVudS0+aW5zZXJ0SXRlbShfKCImSGVscCIp
LCBoZWxwTWVudSk7DQogICAgLQlzaG93SW50cm9BY3Rpb24tPmFkZFRvKGhlbHBNZW51KTsNCiAg
ICAtCXNob3dBYm91dEFjdGlvbi0+YWRkVG8oaGVscE1lbnUpOw0KICAgIC0NCiAgICAtCWNvbm5l
Y3QoY29uZmlnTGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwNCiAgICAt
CQloZWxwVGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgLQljb25uZWN0
KGNvbmZpZ0xpc3QsIFNJR05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLA0KICAgIC0J
CVNMT1QoY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0JY29ubmVjdChjb25maWdM
aXN0LCBTSUdOQUwocGFyZW50U2VsZWN0ZWQoKSksDQogICAgLQkJU0xPVChnb0JhY2soKSkpOw0K
ICAgIC0JY29ubmVjdChtZW51TGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICop
KSwNCiAgICAtCQloZWxwVGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAg
LQljb25uZWN0KG1lbnVMaXN0LCBTSUdOQUwobWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopKSwN
CiAgICAtCQlTTE9UKGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKikpKTsNCiAgICAtDQogICAgLQlj
b25uZWN0KGNvbmZpZ0xpc3QsIFNJR05BTChnb3RGb2N1cyhzdHJ1Y3QgbWVudSAqKSksDQogICAg
LQkJaGVscFRleHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0JY29ubmVj
dChtZW51TGlzdCwgU0lHTkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwNCiAgICAtCQloZWxw
VGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgLQljb25uZWN0KG1lbnVM
aXN0LCBTSUdOQUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLA0KICAgIC0JCVNMT1QobGlzdEZv
Y3VzQ2hhbmdlZCh2b2lkKSkpOw0KICAgIC0JY29ubmVjdChoZWxwVGV4dCwgU0lHTkFMKG1lbnVT
ZWxlY3RlZChzdHJ1Y3QgbWVudSAqKSksDQogICAgLQkJU0xPVChzZXRNZW51TGluayhzdHJ1Y3Qg
bWVudSAqKSkpOw0KICAgIC0NCiAgICAtCVFTdHJpbmcgbGlzdE1vZGUgPSBjb25maWdTZXR0aW5n
cy0+cmVhZEVudHJ5KCIvbGlzdE1vZGUiLCAic3ltYm9sIik7DQogICAgLQlpZiAobGlzdE1vZGUg
PT0gInNpbmdsZSIpDQogICAgLQkJc2hvd1NpbmdsZVZpZXcoKTsNCiAgICAtCWVsc2UgaWYgKGxp
c3RNb2RlID09ICJmdWxsIikNCiAgICAtCQlzaG93RnVsbFZpZXcoKTsNCiAgICAtCWVsc2UgLypp
ZiAobGlzdE1vZGUgPT0gInNwbGl0IikqLw0KICAgIC0JCXNob3dTcGxpdFZpZXcoKTsNCiAgICAt
DQogICAgLQkvLyBVSSBzZXR1cCBkb25lLCByZXN0b3JlIHNwbGl0dGVyIHBvc2l0aW9ucw0KICAg
IC0JUTNWYWx1ZUxpc3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9z
cGxpdDEiLCAmb2spOw0KICAgIC0JaWYgKG9rKQ0KICAgIC0JCXNwbGl0MS0+c2V0U2l6ZXMoc2l6
ZXMpOw0KICAgIC0NCiAgICAtCXNpemVzID0gY29uZmlnU2V0dGluZ3MtPnJlYWRTaXplcygiL3Nw
bGl0MiIsICZvayk7DQogICAgLQlpZiAob2spDQogICAgLQkJc3BsaXQyLT5zZXRTaXplcyhzaXpl
cyk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6bG9hZENvbmZp
Zyh2b2lkKQ0KICAgIC17DQogICAgLQlRU3RyaW5nIHMgPSBRM0ZpbGVEaWFsb2c6OmdldE9wZW5G
aWxlTmFtZShjb25mX2dldF9jb25maWduYW1lKCksIE5VTEwsIHRoaXMpOw0KICAgIC0JaWYgKHMu
aXNOdWxsKCkpDQogICAgLQkJcmV0dXJuOw0KICAgIC0JaWYgKGNvbmZfcmVhZChRRmlsZTo6ZW5j
b2RlTmFtZShzKSkpDQogICAgLQkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29u
ZiIsIF8oIlVuYWJsZSB0byBsb2FkIGNvbmZpZ3VyYXRpb24hIikpOw0KICAgIC0JQ29uZmlnVmll
dzo6dXBkYXRlTGlzdEFsbCgpOw0KICAgIC19DQogICAgLQ0KICAgIC1ib29sIENvbmZpZ01haW5X
aW5kb3c6OnNhdmVDb25maWcodm9pZCkNCiAgICAtew0KICAgIC0JaWYgKGNvbmZfd3JpdGUoTlVM
TCkpIHsNCiAgICAtCQlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwgXygi
VW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiEiKSk7DQogICAgLQkJcmV0dXJuIGZhbHNlOw0K
ICAgIC0JfQ0KICAgIC0JcmV0dXJuIHRydWU7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29u
ZmlnTWFpbldpbmRvdzo6c2F2ZUNvbmZpZ0FzKHZvaWQpDQogICAgLXsNCiAgICAtCVFTdHJpbmcg
cyA9IFEzRmlsZURpYWxvZzo6Z2V0U2F2ZUZpbGVOYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSwg
TlVMTCwgdGhpcyk7DQogICAgLQlpZiAocy5pc051bGwoKSkNCiAgICAtCQlyZXR1cm47DQogICAg
LQlzYXZlQ29uZmlnKCk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRv
dzo6c2VhcmNoQ29uZmlnKHZvaWQpDQogICAgLXsNCiAgICAtCWlmICghc2VhcmNoV2luZG93KQ0K
ICAgIC0JCXNlYXJjaFdpbmRvdyA9IG5ldyBDb25maWdTZWFyY2hXaW5kb3codGhpcywgInNlYXJj
aCIpOw0KICAgIC0Jc2VhcmNoV2luZG93LT5zaG93KCk7DQogICAgLX0NCiAgICAtDQogICAgLXZv
aWQgQ29uZmlnTWFpbldpbmRvdzo6Y2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAt
ew0KICAgIC0JY29uZmlnTGlzdC0+c2V0Um9vdE1lbnUobWVudSk7DQogICAgLQlpZiAoY29uZmln
TGlzdC0+cm9vdEVudHJ5LT5wYXJlbnQgPT0gJnJvb3RtZW51KQ0KICAgIC0JCWJhY2tBY3Rpb24t
PnNldEVuYWJsZWQoRkFMU0UpOw0KICAgIC0JZWxzZQ0KICAgIC0JCWJhY2tBY3Rpb24tPnNldEVu
YWJsZWQoVFJVRSk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6
c2V0TWVudUxpbmsoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51
ICpwYXJlbnQ7DQogICAgLQlDb25maWdMaXN0KiBsaXN0ID0gTlVMTDsNCiAgICAtCUNvbmZpZ0l0
ZW0qIGl0ZW07DQogICAgLQ0KICAgIC0JaWYgKGNvbmZpZ0xpc3QtPm1lbnVTa2lwKG1lbnUpKQ0K
ICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlzd2l0Y2ggKGNvbmZpZ0xpc3QtPm1vZGUpIHsN
CiAgICAtCWNhc2Ugc2luZ2xlTW9kZToNCiAgICAtCQlsaXN0ID0gY29uZmlnTGlzdDsNCiAgICAt
CQlwYXJlbnQgPSBtZW51X2dldF9wYXJlbnRfbWVudShtZW51KTsNCiAgICAtCQlpZiAoIXBhcmVu
dCkNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCWxpc3QtPnNldFJvb3RNZW51KHBhcmVudCk7DQog
ICAgLQkJYnJlYWs7DQogICAgLQljYXNlIHN5bWJvbE1vZGU6DQogICAgLQkJaWYgKG1lbnUtPmZs
YWdzICYgTUVOVV9ST09UKSB7DQogICAgLQkJCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KG1lbnUp
Ow0KICAgIC0JCQljb25maWdMaXN0LT5jbGVhclNlbGVjdGlvbigpOw0KICAgIC0JCQlsaXN0ID0g
bWVudUxpc3Q7DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJbGlzdCA9IGNvbmZpZ0xpc3Q7DQog
ICAgLQkJCXBhcmVudCA9IG1lbnVfZ2V0X3BhcmVudF9tZW51KG1lbnUtPnBhcmVudCk7DQogICAg
LQkJCWlmICghcGFyZW50KQ0KICAgIC0JCQkJcmV0dXJuOw0KICAgIC0JCQlpdGVtID0gbWVudUxp
c3QtPmZpbmRDb25maWdJdGVtKHBhcmVudCk7DQogICAgLQkJCWlmIChpdGVtKSB7DQogICAgLQkJ
CQltZW51TGlzdC0+c2V0U2VsZWN0ZWQoaXRlbSwgVFJVRSk7DQogICAgLQkJCQltZW51TGlzdC0+
ZW5zdXJlSXRlbVZpc2libGUoaXRlbSk7DQogICAgLQkJCX0NCiAgICAtCQkJbGlzdC0+c2V0Um9v
dE1lbnUocGFyZW50KTsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIGZ1bGxN
b2RlOg0KICAgIC0JCWxpc3QgPSBjb25maWdMaXN0Ow0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVm
YXVsdDoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLQlpZiAobGlzdCkgew0K
ICAgIC0JCWl0ZW0gPSBsaXN0LT5maW5kQ29uZmlnSXRlbShtZW51KTsNCiAgICAtCQlpZiAoaXRl
bSkgew0KICAgIC0JCQlsaXN0LT5zZXRTZWxlY3RlZChpdGVtLCBUUlVFKTsNCiAgICAtCQkJbGlz
dC0+ZW5zdXJlSXRlbVZpc2libGUoaXRlbSk7DQogICAgLQkJCWxpc3QtPnNldEZvY3VzKCk7DQog
ICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5k
b3c6Omxpc3RGb2N1c0NoYW5nZWQodm9pZCkNCiAgICAtew0KICAgIC0JaWYgKG1lbnVMaXN0LT5t
b2RlID09IG1lbnVNb2RlKQ0KICAgIC0JCWNvbmZpZ0xpc3QtPmNsZWFyU2VsZWN0aW9uKCk7DQog
ICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Z29CYWNrKHZvaWQpDQog
ICAgLXsNCiAgICAtCUNvbmZpZ0l0ZW0qIGl0ZW07DQogICAgLQ0KICAgIC0JY29uZmlnTGlzdC0+
c2V0UGFyZW50TWVudSgpOw0KICAgIC0JaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeSA9PSAmcm9v
dG1lbnUpDQogICAgLQkJYmFja0FjdGlvbi0+c2V0RW5hYmxlZChGQUxTRSk7DQogICAgLQlpdGVt
ID0gKENvbmZpZ0l0ZW0qKW1lbnVMaXN0LT5zZWxlY3RlZEl0ZW0oKTsNCiAgICAtCXdoaWxlIChp
dGVtKSB7DQogICAgLQkJaWYgKGl0ZW0tPm1lbnUgPT0gY29uZmlnTGlzdC0+cm9vdEVudHJ5KSB7
DQogICAgLQkJCW1lbnVMaXN0LT5zZXRTZWxlY3RlZChpdGVtLCBUUlVFKTsNCiAgICAtCQkJYnJl
YWs7DQogICAgLQkJfQ0KICAgIC0JCWl0ZW0gPSAoQ29uZmlnSXRlbSopaXRlbS0+cGFyZW50KCk7
DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hv
d1NpbmdsZVZpZXcodm9pZCkNCiAgICAtew0KICAgIC0JbWVudVZpZXctPmhpZGUoKTsNCiAgICAt
CW1lbnVMaXN0LT5zZXRSb290TWVudSgwKTsNCiAgICAtCWNvbmZpZ0xpc3QtPm1vZGUgPSBzaW5n
bGVNb2RlOw0KICAgIC0JaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpDQog
ICAgLQkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOw0KICAgIC0JZWxzZQ0KICAgIC0JCWNv
bmZpZ0xpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7DQogICAgLQljb25maWdMaXN0LT5zZXRB
bGxPcGVuKFRSVUUpOw0KICAgIC0JY29uZmlnTGlzdC0+c2V0Rm9jdXMoKTsNCiAgICAtfQ0KICAg
IC0NCiAgICAtdm9pZCBDb25maWdNYWluV2luZG93OjpzaG93U3BsaXRWaWV3KHZvaWQpDQogICAg
LXsNCiAgICAtCWNvbmZpZ0xpc3QtPm1vZGUgPSBzeW1ib2xNb2RlOw0KICAgIC0JaWYgKGNvbmZp
Z0xpc3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1lbnUpDQogICAgLQkJY29uZmlnTGlzdC0+dXBkYXRl
TGlzdEFsbCgpOw0KICAgIC0JZWxzZQ0KICAgIC0JCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KCZy
b290bWVudSk7DQogICAgLQljb25maWdMaXN0LT5zZXRBbGxPcGVuKFRSVUUpOw0KICAgIC0JY29u
ZmlnQXBwLT5wcm9jZXNzRXZlbnRzKCk7DQogICAgLQltZW51TGlzdC0+bW9kZSA9IG1lbnVNb2Rl
Ow0KICAgIC0JbWVudUxpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7DQogICAgLQltZW51TGlz
dC0+c2V0QWxsT3BlbihUUlVFKTsNCiAgICAtCW1lbnVWaWV3LT5zaG93KCk7DQogICAgLQltZW51
TGlzdC0+c2V0Rm9jdXMoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdNYWluV2lu
ZG93OjpzaG93RnVsbFZpZXcodm9pZCkNCiAgICAtew0KICAgIC0JbWVudVZpZXctPmhpZGUoKTsN
CiAgICAtCW1lbnVMaXN0LT5zZXRSb290TWVudSgwKTsNCiAgICAtCWNvbmZpZ0xpc3QtPm1vZGUg
PSBmdWxsTW9kZTsNCiAgICAtCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51
KQ0KICAgIC0JCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwoKTsNCiAgICAtCWVsc2UNCiAgICAt
CQljb25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOw0KICAgIC0JY29uZmlnTGlzdC0+
c2V0QWxsT3BlbihGQUxTRSk7DQogICAgLQljb25maWdMaXN0LT5zZXRGb2N1cygpOw0KICAgIC19
DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBhc2sgZm9yIHNhdmluZyBjb25maWd1cmF0aW9uIGJl
Zm9yZSBxdWl0dGluZw0KICAgIC0gKiBUT0RPIGFzayBvbmx5IHdoZW4gc29tZXRoaW5nIGNoYW5n
ZWQNCiAgICAtICovDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Y2xvc2VFdmVudChRQ2xv
c2VFdmVudCogZSkNCiAgICAtew0KICAgIC0JaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpIHsNCiAg
ICAtCQllLT5hY2NlcHQoKTsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQlRTWVzc2Fn
ZUJveCBtYigicWNvbmYiLCBfKCJTYXZlIGNvbmZpZ3VyYXRpb24/IiksIFFNZXNzYWdlQm94OjpX
YXJuaW5nLA0KICAgIC0JCQlRTWVzc2FnZUJveDo6WWVzIHwgUU1lc3NhZ2VCb3g6OkRlZmF1bHQs
IFFNZXNzYWdlQm94OjpObywgUU1lc3NhZ2VCb3g6OkNhbmNlbCB8IFFNZXNzYWdlQm94OjpFc2Nh
cGUpOw0KICAgIC0JbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJveDo6WWVzLCBfKCImU2F2ZSBD
aGFuZ2VzIikpOw0KICAgIC0JbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJveDo6Tm8sIF8oIiZE
aXNjYXJkIENoYW5nZXMiKSk7DQogICAgLQltYi5zZXRCdXR0b25UZXh0KFFNZXNzYWdlQm94OjpD
YW5jZWwsIF8oIkNhbmNlbCBFeGl0IikpOw0KICAgIC0Jc3dpdGNoIChtYi5leGVjKCkpIHsNCiAg
ICAtCWNhc2UgUU1lc3NhZ2VCb3g6OlllczoNCiAgICAtCQlpZiAoc2F2ZUNvbmZpZygpKQ0KICAg
IC0JCQllLT5hY2NlcHQoKTsNCiAgICAtCQllbHNlDQogICAgLQkJCWUtPmlnbm9yZSgpOw0KICAg
IC0JCWJyZWFrOw0KICAgIC0JY2FzZSBRTWVzc2FnZUJveDo6Tm86DQogICAgLQkJZS0+YWNjZXB0
KCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFFNZXNzYWdlQm94OjpDYW5jZWw6DQogICAg
LQkJZS0+aWdub3JlKCk7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQog
ICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0ludHJvKHZvaWQpDQogICAgLXsNCiAgICAt
CXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9IF8oIldlbGNvbWUgdG8gdGhlIHFjb25mIGdyYXBo
aWNhbCBjb25maWd1cmF0aW9uIHRvb2wuXG5cbiINCiAgICAtCQkiRm9yIGVhY2ggb3B0aW9uLCBh
IGJsYW5rIGJveCBpbmRpY2F0ZXMgdGhlIGZlYXR1cmUgaXMgZGlzYWJsZWQsIGEgY2hlY2tcbiIN
CiAgICAtCQkiaW5kaWNhdGVzIGl0IGlzIGVuYWJsZWQsIGFuZCBhIGRvdCBpbmRpY2F0ZXMgdGhh
dCBpdCBpcyB0byBiZSBjb21waWxlZFxuIg0KICAgIC0JCSJhcyBhIG1vZHVsZS4gIENsaWNraW5n
IG9uIHRoZSBib3ggd2lsbCBjeWNsZSB0aHJvdWdoIHRoZSB0aHJlZSBzdGF0ZXMuXG5cbiINCiAg
ICAtCQkiSWYgeW91IGRvIG5vdCBzZWUgYW4gb3B0aW9uIChlLmcuLCBhIGRldmljZSBkcml2ZXIp
IHRoYXQgeW91IGJlbGlldmVcbiINCiAgICAtCQkic2hvdWxkIGJlIHByZXNlbnQsIHRyeSB0dXJu
aW5nIG9uIFNob3cgQWxsIE9wdGlvbnMgdW5kZXIgdGhlIE9wdGlvbnMgbWVudS5cbiINCiAgICAt
CQkiQWx0aG91Z2ggdGhlcmUgaXMgbm8gY3Jvc3MgcmVmZXJlbmNlIHlldCB0byBoZWxwIHlvdSBm
aWd1cmUgb3V0IHdoYXQgb3RoZXJcbiINCiAgICAtCQkib3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQg
dG8gc3VwcG9ydCB0aGUgb3B0aW9uIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiwgeW91IGNhblxuIg0K
ICAgIC0JCSJzdGlsbCB2aWV3IHRoZSBoZWxwIG9mIGEgZ3JheWVkLW91dCBvcHRpb24uXG5cbiIN
CiAgICAtCQkiVG9nZ2xpbmcgU2hvdyBEZWJ1ZyBJbmZvIHVuZGVyIHRoZSBPcHRpb25zIG1lbnUg
d2lsbCBzaG93IHRoZSBkZXBlbmRlbmNpZXMsXG4iDQogICAgLQkJIndoaWNoIHlvdSBjYW4gdGhl
biBtYXRjaCBieSBleGFtaW5pbmcgb3RoZXIgb3B0aW9ucy5cblxuIik7DQogICAgLQ0KICAgIC0J
UU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7DQogICAgLX0NCiAg
ICAtDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Fib3V0KHZvaWQpDQogICAgLXsN
CiAgICAtCXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9IF8oInFjb25mIGlzIENvcHlyaWdodCAo
QykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4uXG5cbiINCiAgICAt
CQkiQnVnIHJlcG9ydHMgYW5kIGZlYXR1cmUgcmVxdWVzdCBjYW4gYWxzbyBiZSBlbnRlcmVkIGF0
IGh0dHA6Ly9idWd6aWxsYS5rZXJuZWwub3JnL1xuIik7DQogICAgLQ0KICAgIC0JUU1lc3NhZ2VC
b3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7DQogICAgLX0NCiAgICAtDQogICAg
LXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZVNldHRpbmdzKHZvaWQpDQogICAgLXsNCiAgICAt
CWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvd2luZG93IHgiLCBwb3MoKS54KCkpOw0KICAg
IC0JY29uZmlnU2V0dGluZ3MtPndyaXRlRW50cnkoIi93aW5kb3cgeSIsIHBvcygpLnkoKSk7DQog
ICAgLQljb25maWdTZXR0aW5ncy0+d3JpdGVFbnRyeSgiL3dpbmRvdyB3aWR0aCIsIHNpemUoKS53
aWR0aCgpKTsNCiAgICAtCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvd2luZG93IGhlaWdo
dCIsIHNpemUoKS5oZWlnaHQoKSk7DQogICAgLQ0KICAgIC0JUVN0cmluZyBlbnRyeTsNCiAgICAt
CXN3aXRjaChjb25maWdMaXN0LT5tb2RlKSB7DQogICAgLQljYXNlIHNpbmdsZU1vZGUgOg0KICAg
IC0JCWVudHJ5ID0gInNpbmdsZSI7DQogICAgLQkJYnJlYWs7DQogICAgLQ0KICAgIC0JY2FzZSBz
eW1ib2xNb2RlIDoNCiAgICAtCQllbnRyeSA9ICJzcGxpdCI7DQogICAgLQkJYnJlYWs7DQogICAg
LQ0KICAgIC0JY2FzZSBmdWxsTW9kZSA6DQogICAgLQkJZW50cnkgPSAiZnVsbCI7DQogICAgLQkJ
YnJlYWs7DQogICAgLQ0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAg
ICAtCWNvbmZpZ1NldHRpbmdzLT53cml0ZUVudHJ5KCIvbGlzdE1vZGUiLCBlbnRyeSk7DQogICAg
LQ0KICAgIC0JY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxpdDEiLCBzcGxpdDEtPnNp
emVzKCkpOw0KICAgIC0JY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxpdDIiLCBzcGxp
dDItPnNpemVzKCkpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6
OmNvbmZfY2hhbmdlZCh2b2lkKQ0KICAgIC17DQogICAgLQlpZiAoc2F2ZUFjdGlvbikNCiAgICAt
CQlzYXZlQWN0aW9uLT5zZXRFbmFibGVkKGNvbmZfZ2V0X2NoYW5nZWQoKSk7DQogICAgLX0NCiAg
ICAtDQogICAgLXZvaWQgZml4dXBfcm9vdG1lbnUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsN
CiAgICAtCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtCXN0YXRpYyBpbnQgbWVudV9jbnQgPSAw
Ow0KICAgIC0NCiAgICAtCW1lbnUtPmZsYWdzIHw9IE1FTlVfUk9PVDsNCiAgICAtCWZvciAoY2hp
bGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgIC0JCWlm
IChjaGlsZC0+cHJvbXB0ICYmIGNoaWxkLT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7DQogICAg
LQkJCW1lbnVfY250Kys7DQogICAgLQkJCWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsNCiAgICAtCQkJ
bWVudV9jbnQtLTsNCiAgICAtCQl9IGVsc2UgaWYgKCFtZW51X2NudCkNCiAgICAtCQkJZml4dXBf
cm9vdG1lbnUoY2hpbGQpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgY29u
c3QgY2hhciAqcHJvZ25hbWU7DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQ0K
ICAgIC17DQogICAgLQlwcmludGYoXygiJXMgPGNvbmZpZz5cbiIpLCBwcm9nbmFtZSk7DQogICAg
LQlleGl0KDApOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgbWFpbihpbnQgYWMsIGNoYXIqKiBh
dikNCiAgICAtew0KICAgIC0JQ29uZmlnTWFpbldpbmRvdyogdjsNCiAgICAtCWNvbnN0IGNoYXIg
Km5hbWU7DQogICAgLQ0KICAgIC0JYmluZHRleHRkb21haW4oUEFDS0FHRSwgTE9DQUxFRElSKTsN
CiAgICAtCXRleHRkb21haW4oUEFDS0FHRSk7DQogICAgLQ0KICAgIC0JcHJvZ25hbWUgPSBhdlsw
XTsNCiAgICAtCWNvbmZpZ0FwcCA9IG5ldyBRQXBwbGljYXRpb24oYWMsIGF2KTsNCiAgICAtCWlm
IChhYyA+IDEgJiYgYXZbMV1bMF0gPT0gJy0nKSB7DQogICAgLQkJc3dpdGNoIChhdlsxXVsxXSkg
ew0KICAgIC0JCWNhc2UgJ2gnOg0KICAgIC0JCWNhc2UgJz8nOg0KICAgIC0JCQl1c2FnZSgpOw0K
ICAgIC0JCX0NCiAgICAtCQluYW1lID0gYXZbMl07DQogICAgLQl9IGVsc2UNCiAgICAtCQluYW1l
ID0gYXZbMV07DQogICAgLQlpZiAoIW5hbWUpDQogICAgLQkJdXNhZ2UoKTsNCiAgICAtDQogICAg
LQljb25mX3BhcnNlKG5hbWUpOw0KICAgIC0JZml4dXBfcm9vdG1lbnUoJnJvb3RtZW51KTsNCiAg
ICAtCWNvbmZfcmVhZChOVUxMKTsNCiAgICAtCS8vemNvbmZkdW1wKHN0ZG91dCk7DQogICAgLQ0K
ICAgIC0JY29uZmlnU2V0dGluZ3MgPSBuZXcgQ29uZmlnU2V0dGluZ3MoKTsNCiAgICAtCWNvbmZp
Z1NldHRpbmdzLT5iZWdpbkdyb3VwKCIva2NvbmZpZy9xY29uZiIpOw0KICAgIC0JdiA9IG5ldyBD
b25maWdNYWluV2luZG93KCk7DQogICAgLQ0KICAgIC0JLy96Y29uZmR1bXAoc3Rkb3V0KTsNCiAg
ICAtCWNvbmZpZ0FwcC0+c2V0TWFpbldpZGdldCh2KTsNCiAgICAtCWNvbmZpZ0FwcC0+Y29ubmVj
dChjb25maWdBcHAsIFNJR05BTChsYXN0V2luZG93Q2xvc2VkKCkpLCBTTE9UKHF1aXQoKSkpOw0K
ICAgIC0JY29uZmlnQXBwLT5jb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkp
LCB2LCBTTE9UKHNhdmVTZXR0aW5ncygpKSk7DQogICAgLQl2LT5zaG93KCk7DQogICAgLQljb25m
aWdBcHAtPmV4ZWMoKTsNCiAgICAtDQogICAgLQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsN
CiAgICAtCWRlbGV0ZSBjb25maWdTZXR0aW5nczsNCiAgICAtDQogICAgLQlyZXR1cm4gMDsNCiAg
ICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcWNvbmYuaCBiL3N1cHBvcnQv
a2NvbmZpZy9xY29uZi5oDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
YmRlMGM2Yi4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy9xY29uZi5oDQogICAg
KysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDMzOCArMCwwIEBADQogICAgLS8qDQogICAgLSAqIENv
cHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAg
ICAtICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAg
LSAqLw0KICAgIC0NCiAgICAtI2lmIFFUX1ZFUlNJT04gPCAweDA0MDAwMA0KICAgIC0jaW5jbHVk
ZSA8cWxpc3R2aWV3Lmg+DQogICAgLSNlbHNlDQogICAgLSNpbmNsdWRlIDxxM2xpc3R2aWV3Lmg+
DQogICAgLSNlbmRpZg0KICAgIC0jaW5jbHVkZSA8cXNldHRpbmdzLmg+DQogICAgLQ0KICAgIC0j
aWYgUVRfVkVSU0lPTiA8IDB4MDQwMDAwDQogICAgLSNkZWZpbmUgUTNWYWx1ZUxpc3QgICAgICAg
ICAgICAgUVZhbHVlTGlzdA0KICAgIC0jZGVmaW5lIFEzUG9wdXBNZW51ICAgICAgICAgICAgIFFQ
b3B1cE1lbnUNCiAgICAtI2RlZmluZSBRM0xpc3RWaWV3ICAgICAgICAgICAgICBRTGlzdFZpZXcN
CiAgICAtI2RlZmluZSBRM0xpc3RWaWV3SXRlbSAgICAgICAgICBRTGlzdFZpZXdJdGVtDQogICAg
LSNkZWZpbmUgUTNWQm94ICAgICAgICAgICAgICAgICAgUVZCb3gNCiAgICAtI2RlZmluZSBRM1Rl
eHRCcm93c2VyICAgICAgICAgICBRVGV4dEJyb3dzZXINCiAgICAtI2RlZmluZSBRM01haW5XaW5k
b3cgICAgICAgICAgICBRTWFpbldpbmRvdw0KICAgIC0jZGVmaW5lIFEzQWN0aW9uICAgICAgICAg
ICAgICAgIFFBY3Rpb24NCiAgICAtI2RlZmluZSBRM1Rvb2xCYXIgICAgICAgICAgICAgICBRVG9v
bEJhcg0KICAgIC0jZGVmaW5lIFEzTGlzdFZpZXdJdGVtSXRlcmF0b3IgIFFMaXN0Vmlld0l0ZW1J
dGVyYXRvcg0KICAgIC0jZGVmaW5lIFEzRmlsZURpYWxvZyAgICAgICAgICAgIFFGaWxlRGlhbG9n
DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtY2xhc3MgQ29uZmlnVmlldzsNCiAgICAtY2xhc3Mg
Q29uZmlnTGlzdDsNCiAgICAtY2xhc3MgQ29uZmlnSXRlbTsNCiAgICAtY2xhc3MgQ29uZmlnTGlu
ZUVkaXQ7DQogICAgLWNsYXNzIENvbmZpZ01haW5XaW5kb3c7DQogICAgLQ0KICAgIC1jbGFzcyBD
b25maWdTZXR0aW5ncyA6IHB1YmxpYyBRU2V0dGluZ3Mgew0KICAgIC1wdWJsaWM6DQogICAgLQlD
b25maWdTZXR0aW5ncygpOw0KICAgIC0JUTNWYWx1ZUxpc3Q8aW50PiByZWFkU2l6ZXMoY29uc3Qg
UVN0cmluZyYga2V5LCBib29sICpvayk7DQogICAgLQlib29sIHdyaXRlU2l6ZXMoY29uc3QgUVN0
cmluZyYga2V5LCBjb25zdCBRM1ZhbHVlTGlzdDxpbnQ+JiB2YWx1ZSk7DQogICAgLX07DQogICAg
LQ0KICAgIC1lbnVtIGNvbElkeCB7DQogICAgLQlwcm9tcHRDb2xJZHgsIG5hbWVDb2xJZHgsIG5v
Q29sSWR4LCBtb2RDb2xJZHgsIHllc0NvbElkeCwgZGF0YUNvbElkeCwgY29sTnINCiAgICAtfTsN
CiAgICAtZW51bSBsaXN0TW9kZSB7DQogICAgLQlzaW5nbGVNb2RlLCBtZW51TW9kZSwgc3ltYm9s
TW9kZSwgZnVsbE1vZGUsIGxpc3RNb2RlDQogICAgLX07DQogICAgLWVudW0gb3B0aW9uTW9kZSB7
DQogICAgLQlub3JtYWxPcHQgPSAwLCBhbGxPcHQsIHByb21wdE9wdA0KICAgIC19Ow0KICAgIC0N
CiAgICAtY2xhc3MgQ29uZmlnTGlzdCA6IHB1YmxpYyBRM0xpc3RWaWV3IHsNCiAgICAtCVFfT0JK
RUNUDQogICAgLQl0eXBlZGVmIGNsYXNzIFEzTGlzdFZpZXcgUGFyZW50Ow0KICAgIC1wdWJsaWM6
DQogICAgLQlDb25maWdMaXN0KENvbmZpZ1ZpZXcqIHAsIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsN
CiAgICAtCXZvaWQgcmVpbml0KHZvaWQpOw0KICAgIC0JQ29uZmlnVmlldyogcGFyZW50KHZvaWQp
IGNvbnN0DQogICAgLQl7DQogICAgLQkJcmV0dXJuIChDb25maWdWaWV3KilQYXJlbnQ6OnBhcmVu
dCgpOw0KICAgIC0JfQ0KICAgIC0JQ29uZmlnSXRlbSogZmluZENvbmZpZ0l0ZW0oc3RydWN0IG1l
bnUgKik7DQogICAgLQ0KICAgIC1wcm90ZWN0ZWQ6DQogICAgLQl2b2lkIGtleVByZXNzRXZlbnQo
UUtleUV2ZW50ICplKTsNCiAgICAtCXZvaWQgY29udGVudHNNb3VzZVByZXNzRXZlbnQoUU1vdXNl
RXZlbnQgKmUpOw0KICAgIC0Jdm9pZCBjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2
ZW50ICplKTsNCiAgICAtCXZvaWQgY29udGVudHNNb3VzZU1vdmVFdmVudChRTW91c2VFdmVudCAq
ZSk7DQogICAgLQl2b2lkIGNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50
ICplKTsNCiAgICAtCXZvaWQgZm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50ICplKTsNCiAgICAtCXZv
aWQgY29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSk7DQogICAgLQ0KICAgIC1w
dWJsaWMgc2xvdHM6DQogICAgLQl2b2lkIHNldFJvb3RNZW51KHN0cnVjdCBtZW51ICptZW51KTsN
CiAgICAtDQogICAgLQl2b2lkIHVwZGF0ZUxpc3QoQ29uZmlnSXRlbSAqaXRlbSk7DQogICAgLQl2
b2lkIHNldFZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0sIHRyaXN0YXRlIHZhbCk7DQogICAgLQl2b2lk
IGNoYW5nZVZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0pOw0KICAgIC0Jdm9pZCB1cGRhdGVTZWxlY3Rp
b24odm9pZCk7DQogICAgLQl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsNCiAgICAtc2lnbmFsczoN
CiAgICAtCXZvaWQgbWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC0Jdm9pZCBt
ZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC0Jdm9pZCBwYXJlbnRTZWxlY3Rl
ZCh2b2lkKTsNCiAgICAtCXZvaWQgZ290Rm9jdXMoc3RydWN0IG1lbnUgKik7DQogICAgLQ0KICAg
IC1wdWJsaWM6DQogICAgLQl2b2lkIHVwZGF0ZUxpc3RBbGwodm9pZCkNCiAgICAtCXsNCiAgICAt
CQl1cGRhdGVBbGwgPSB0cnVlOw0KICAgIC0JCXVwZGF0ZUxpc3QoTlVMTCk7DQogICAgLQkJdXBk
YXRlQWxsID0gZmFsc2U7DQogICAgLQl9DQogICAgLQlDb25maWdMaXN0KiBsaXN0VmlldygpDQog
ICAgLQl7DQogICAgLQkJcmV0dXJuIHRoaXM7DQogICAgLQl9DQogICAgLQlDb25maWdJdGVtKiBm
aXJzdENoaWxkKCkgY29uc3QNCiAgICAtCXsNCiAgICAtCQlyZXR1cm4gKENvbmZpZ0l0ZW0gKilQ
YXJlbnQ6OmZpcnN0Q2hpbGQoKTsNCiAgICAtCX0NCiAgICAtCWludCBtYXBJZHgoY29sSWR4IGlk
eCkNCiAgICAtCXsNCiAgICAtCQlyZXR1cm4gY29sTWFwW2lkeF07DQogICAgLQl9DQogICAgLQl2
b2lkIGFkZENvbHVtbihjb2xJZHggaWR4LCBjb25zdCBRU3RyaW5nJiBsYWJlbCkNCiAgICAtCXsN
CiAgICAtCQljb2xNYXBbaWR4XSA9IFBhcmVudDo6YWRkQ29sdW1uKGxhYmVsKTsNCiAgICAtCQlj
b2xSZXZNYXBbY29sTWFwW2lkeF1dID0gaWR4Ow0KICAgIC0JfQ0KICAgIC0Jdm9pZCByZW1vdmVD
b2x1bW4oY29sSWR4IGlkeCkNCiAgICAtCXsNCiAgICAtCQlpbnQgY29sID0gY29sTWFwW2lkeF07
DQogICAgLQkJaWYgKGNvbCA+PSAwKSB7DQogICAgLQkJCVBhcmVudDo6cmVtb3ZlQ29sdW1uKGNv
bCk7DQogICAgLQkJCWNvbFJldk1hcFtjb2xdID0gY29sTWFwW2lkeF0gPSAtMTsNCiAgICAtCQl9
DQogICAgLQl9DQogICAgLQl2b2lkIHNldEFsbE9wZW4oYm9vbCBvcGVuKTsNCiAgICAtCXZvaWQg
c2V0UGFyZW50TWVudSh2b2lkKTsNCiAgICAtDQogICAgLQlib29sIG1lbnVTa2lwKHN0cnVjdCBt
ZW51ICopOw0KICAgIC0NCiAgICAtCXRlbXBsYXRlIDxjbGFzcyBQPg0KICAgIC0Jdm9pZCB1cGRh
dGVNZW51TGlzdChQKiwgc3RydWN0IG1lbnUqKTsNCiAgICAtDQogICAgLQlib29sIHVwZGF0ZUFs
bDsNCiAgICAtDQogICAgLQlRUGl4bWFwIHN5bWJvbFllc1BpeCwgc3ltYm9sTW9kUGl4LCBzeW1i
b2xOb1BpeDsNCiAgICAtCVFQaXhtYXAgY2hvaWNlWWVzUGl4LCBjaG9pY2VOb1BpeDsNCiAgICAt
CVFQaXhtYXAgbWVudVBpeCwgbWVudUludlBpeCwgbWVudUJhY2tQaXgsIHZvaWRQaXg7DQogICAg
LQ0KICAgIC0JYm9vbCBzaG93TmFtZSwgc2hvd1JhbmdlLCBzaG93RGF0YTsNCiAgICAtCWVudW0g
bGlzdE1vZGUgbW9kZTsNCiAgICAtCWVudW0gb3B0aW9uTW9kZSBvcHRNb2RlOw0KICAgIC0Jc3Ry
dWN0IG1lbnUgKnJvb3RFbnRyeTsNCiAgICAtCVFDb2xvckdyb3VwIGRpc2FibGVkQ29sb3JHcm91
cDsNCiAgICAtCVFDb2xvckdyb3VwIGluYWN0aXZlZENvbG9yR3JvdXA7DQogICAgLQlRM1BvcHVw
TWVudSogaGVhZGVyUG9wdXA7DQogICAgLQ0KICAgIC1wcml2YXRlOg0KICAgIC0JaW50IGNvbE1h
cFtjb2xOcl07DQogICAgLQlpbnQgY29sUmV2TWFwW2NvbE5yXTsNCiAgICAtfTsNCiAgICAtDQog
ICAgLWNsYXNzIENvbmZpZ0l0ZW0gOiBwdWJsaWMgUTNMaXN0Vmlld0l0ZW0gew0KICAgIC0JdHlw
ZWRlZiBjbGFzcyBRM0xpc3RWaWV3SXRlbSBQYXJlbnQ7DQogICAgLXB1YmxpYzoNCiAgICAtCUNv
bmZpZ0l0ZW0oUTNMaXN0VmlldyAqcGFyZW50LCBDb25maWdJdGVtICphZnRlciwgc3RydWN0IG1l
bnUgKm0sIGJvb2wgdikNCiAgICAtCTogUGFyZW50KHBhcmVudCwgYWZ0ZXIpLCBtZW51KG0pLCB2
aXNpYmxlKHYpLCBnb1BhcmVudChmYWxzZSkNCiAgICAtCXsNCiAgICAtCQlpbml0KCk7DQogICAg
LQl9DQogICAgLQlDb25maWdJdGVtKENvbmZpZ0l0ZW0gKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0
ZXIsIHN0cnVjdCBtZW51ICptLCBib29sIHYpDQogICAgLQk6IFBhcmVudChwYXJlbnQsIGFmdGVy
KSwgbWVudShtKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQoZmFsc2UpDQogICAgLQl7DQogICAgLQkJ
aW5pdCgpOw0KICAgIC0JfQ0KICAgIC0JQ29uZmlnSXRlbShRM0xpc3RWaWV3ICpwYXJlbnQsIENv
bmZpZ0l0ZW0gKmFmdGVyLCBib29sIHYpDQogICAgLQk6IFBhcmVudChwYXJlbnQsIGFmdGVyKSwg
bWVudSgwKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQodHJ1ZSkNCiAgICAtCXsNCiAgICAtCQlpbml0
KCk7DQogICAgLQl9DQogICAgLQl+Q29uZmlnSXRlbSh2b2lkKTsNCiAgICAtCXZvaWQgaW5pdCh2
b2lkKTsNCiAgICAtCXZvaWQgb2tSZW5hbWUoaW50IGNvbCk7DQogICAgLQl2b2lkIHVwZGF0ZU1l
bnUodm9pZCk7DQogICAgLQl2b2lkIHRlc3RVcGRhdGVNZW51KGJvb2wgdik7DQogICAgLQlDb25m
aWdMaXN0KiBsaXN0VmlldygpIGNvbnN0DQogICAgLQl7DQogICAgLQkJcmV0dXJuIChDb25maWdM
aXN0KilQYXJlbnQ6Omxpc3RWaWV3KCk7DQogICAgLQl9DQogICAgLQlDb25maWdJdGVtKiBmaXJz
dENoaWxkKCkgY29uc3QNCiAgICAtCXsNCiAgICAtCQlyZXR1cm4gKENvbmZpZ0l0ZW0gKilQYXJl
bnQ6OmZpcnN0Q2hpbGQoKTsNCiAgICAtCX0NCiAgICAtCUNvbmZpZ0l0ZW0qIG5leHRTaWJsaW5n
KCkgY29uc3QNCiAgICAtCXsNCiAgICAtCQlyZXR1cm4gKENvbmZpZ0l0ZW0gKilQYXJlbnQ6Om5l
eHRTaWJsaW5nKCk7DQogICAgLQl9DQogICAgLQl2b2lkIHNldFRleHQoY29sSWR4IGlkeCwgY29u
c3QgUVN0cmluZyYgdGV4dCkNCiAgICAtCXsNCiAgICAtCQlQYXJlbnQ6OnNldFRleHQobGlzdFZp
ZXcoKS0+bWFwSWR4KGlkeCksIHRleHQpOw0KICAgIC0JfQ0KICAgIC0JUVN0cmluZyB0ZXh0KGNv
bElkeCBpZHgpIGNvbnN0DQogICAgLQl7DQogICAgLQkJcmV0dXJuIFBhcmVudDo6dGV4dChsaXN0
VmlldygpLT5tYXBJZHgoaWR4KSk7DQogICAgLQl9DQogICAgLQl2b2lkIHNldFBpeG1hcChjb2xJ
ZHggaWR4LCBjb25zdCBRUGl4bWFwJiBwbSkNCiAgICAtCXsNCiAgICAtCQlQYXJlbnQ6OnNldFBp
eG1hcChsaXN0VmlldygpLT5tYXBJZHgoaWR4KSwgcG0pOw0KICAgIC0JfQ0KICAgIC0JY29uc3Qg
UVBpeG1hcCogcGl4bWFwKGNvbElkeCBpZHgpIGNvbnN0DQogICAgLQl7DQogICAgLQkJcmV0dXJu
IFBhcmVudDo6cGl4bWFwKGxpc3RWaWV3KCktPm1hcElkeChpZHgpKTsNCiAgICAtCX0NCiAgICAt
CXZvaWQgcGFpbnRDZWxsKFFQYWludGVyKiBwLCBjb25zdCBRQ29sb3JHcm91cCYgY2csIGludCBj
b2x1bW4sIGludCB3aWR0aCwgaW50IGFsaWduKTsNCiAgICAtDQogICAgLQlDb25maWdJdGVtKiBu
ZXh0SXRlbTsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51Ow0KICAgIC0JYm9vbCB2aXNpYmxlOw0K
ICAgIC0JYm9vbCBnb1BhcmVudDsNCiAgICAtfTsNCiAgICAtDQogICAgLWNsYXNzIENvbmZpZ0xp
bmVFZGl0IDogcHVibGljIFFMaW5lRWRpdCB7DQogICAgLQlRX09CSkVDVA0KICAgIC0JdHlwZWRl
ZiBjbGFzcyBRTGluZUVkaXQgUGFyZW50Ow0KICAgIC1wdWJsaWM6DQogICAgLQlDb25maWdMaW5l
RWRpdChDb25maWdWaWV3KiBwYXJlbnQpOw0KICAgIC0JQ29uZmlnVmlldyogcGFyZW50KHZvaWQp
IGNvbnN0DQogICAgLQl7DQogICAgLQkJcmV0dXJuIChDb25maWdWaWV3KilQYXJlbnQ6OnBhcmVu
dCgpOw0KICAgIC0JfQ0KICAgIC0Jdm9pZCBzaG93KENvbmZpZ0l0ZW0gKmkpOw0KICAgIC0Jdm9p
ZCBrZXlQcmVzc0V2ZW50KFFLZXlFdmVudCAqZSk7DQogICAgLQ0KICAgIC1wdWJsaWM6DQogICAg
LQlDb25maWdJdGVtICppdGVtOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY2xhc3MgQ29uZmlnVmll
dyA6IHB1YmxpYyBRM1ZCb3ggew0KICAgIC0JUV9PQkpFQ1QNCiAgICAtCXR5cGVkZWYgY2xhc3Mg
UTNWQm94IFBhcmVudDsNCiAgICAtcHVibGljOg0KICAgIC0JQ29uZmlnVmlldyhRV2lkZ2V0KiBw
YXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsNCiAgICAtCX5Db25maWdWaWV3KHZvaWQpOw0K
ICAgIC0Jc3RhdGljIHZvaWQgdXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKTsNCiAgICAtCXN0
YXRpYyB2b2lkIHVwZGF0ZUxpc3RBbGwodm9pZCk7DQogICAgLQ0KICAgIC0JYm9vbCBzaG93TmFt
ZSh2b2lkKSBjb25zdCB7IHJldHVybiBsaXN0LT5zaG93TmFtZTsgfQ0KICAgIC0JYm9vbCBzaG93
UmFuZ2Uodm9pZCkgY29uc3QgeyByZXR1cm4gbGlzdC0+c2hvd1JhbmdlOyB9DQogICAgLQlib29s
IHNob3dEYXRhKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGxpc3QtPnNob3dEYXRhOyB9DQogICAgLXB1
YmxpYyBzbG90czoNCiAgICAtCXZvaWQgc2V0U2hvd05hbWUoYm9vbCk7DQogICAgLQl2b2lkIHNl
dFNob3dSYW5nZShib29sKTsNCiAgICAtCXZvaWQgc2V0U2hvd0RhdGEoYm9vbCk7DQogICAgLQl2
b2lkIHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKTsNCiAgICAtc2lnbmFsczoNCiAgICAtCXZvaWQg
c2hvd05hbWVDaGFuZ2VkKGJvb2wpOw0KICAgIC0Jdm9pZCBzaG93UmFuZ2VDaGFuZ2VkKGJvb2wp
Ow0KICAgIC0Jdm9pZCBzaG93RGF0YUNoYW5nZWQoYm9vbCk7DQogICAgLXB1YmxpYzoNCiAgICAt
CUNvbmZpZ0xpc3QqIGxpc3Q7DQogICAgLQlDb25maWdMaW5lRWRpdCogbGluZUVkaXQ7DQogICAg
LQ0KICAgIC0Jc3RhdGljIENvbmZpZ1ZpZXcqIHZpZXdMaXN0Ow0KICAgIC0JQ29uZmlnVmlldyog
bmV4dFZpZXc7DQogICAgLQ0KICAgIC0Jc3RhdGljIFFBY3Rpb24gKnNob3dOb3JtYWxBY3Rpb247
DQogICAgLQlzdGF0aWMgUUFjdGlvbiAqc2hvd0FsbEFjdGlvbjsNCiAgICAtCXN0YXRpYyBRQWN0
aW9uICpzaG93UHJvbXB0QWN0aW9uOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY2xhc3MgQ29uZmln
SW5mb1ZpZXcgOiBwdWJsaWMgUTNUZXh0QnJvd3NlciB7DQogICAgLQlRX09CSkVDVA0KICAgIC0J
dHlwZWRlZiBjbGFzcyBRM1RleHRCcm93c2VyIFBhcmVudDsNCiAgICAtcHVibGljOg0KICAgIC0J
Q29uZmlnSW5mb1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCk7DQog
ICAgLQlib29sIHNob3dEZWJ1Zyh2b2lkKSBjb25zdCB7IHJldHVybiBfc2hvd0RlYnVnOyB9DQog
ICAgLQ0KICAgIC1wdWJsaWMgc2xvdHM6DQogICAgLQl2b2lkIHNldEluZm8oc3RydWN0IG1lbnUg
Km1lbnUpOw0KICAgIC0Jdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7DQogICAgLQl2b2lkIHNldFNo
b3dEZWJ1Zyhib29sKTsNCiAgICAtDQogICAgLXNpZ25hbHM6DQogICAgLQl2b2lkIHNob3dEZWJ1
Z0NoYW5nZWQoYm9vbCk7DQogICAgLQl2b2lkIG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqKTsN
CiAgICAtDQogICAgLXByb3RlY3RlZDoNCiAgICAtCXZvaWQgc3ltYm9sSW5mbyh2b2lkKTsNCiAg
ICAtCXZvaWQgbWVudUluZm8odm9pZCk7DQogICAgLQlRU3RyaW5nIGRlYnVnX2luZm8oc3RydWN0
IHN5bWJvbCAqc3ltKTsNCiAgICAtCXN0YXRpYyBRU3RyaW5nIHByaW50X2ZpbHRlcihjb25zdCBR
U3RyaW5nICZzdHIpOw0KICAgIC0Jc3RhdGljIHZvaWQgZXhwcl9wcmludF9oZWxwKHZvaWQgKmRh
dGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKTsNCiAgICAtCVEzUG9wdXBN
ZW51KiBjcmVhdGVQb3B1cE1lbnUoY29uc3QgUVBvaW50JiBwb3MpOw0KICAgIC0Jdm9pZCBjb250
ZW50c0NvbnRleHRNZW51RXZlbnQoUUNvbnRleHRNZW51RXZlbnQgKmUpOw0KICAgIC0NCiAgICAt
CXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCXN0cnVjdCBtZW51ICpfbWVudTsNCiAgICAtCWJv
b2wgX3Nob3dEZWJ1ZzsNCiAgICAtfTsNCiAgICAtDQogICAgLWNsYXNzIENvbmZpZ1NlYXJjaFdp
bmRvdyA6IHB1YmxpYyBRRGlhbG9nIHsNCiAgICAtCVFfT0JKRUNUDQogICAgLQl0eXBlZGVmIGNs
YXNzIFFEaWFsb2cgUGFyZW50Ow0KICAgIC1wdWJsaWM6DQogICAgLQlDb25maWdTZWFyY2hXaW5k
b3coQ29uZmlnTWFpbldpbmRvdyogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCk7DQogICAg
LQ0KICAgIC1wdWJsaWMgc2xvdHM6DQogICAgLQl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsNCiAg
ICAtCXZvaWQgc2VhcmNoKHZvaWQpOw0KICAgIC0NCiAgICAtcHJvdGVjdGVkOg0KICAgIC0JUUxp
bmVFZGl0KiBlZGl0RmllbGQ7DQogICAgLQlRUHVzaEJ1dHRvbiogc2VhcmNoQnV0dG9uOw0KICAg
IC0JUVNwbGl0dGVyKiBzcGxpdDsNCiAgICAtCUNvbmZpZ1ZpZXcqIGxpc3Q7DQogICAgLQlDb25m
aWdJbmZvVmlldyogaW5mbzsNCiAgICAtDQogICAgLQlzdHJ1Y3Qgc3ltYm9sICoqcmVzdWx0Ow0K
ICAgIC19Ow0KICAgIC0NCiAgICAtY2xhc3MgQ29uZmlnTWFpbldpbmRvdyA6IHB1YmxpYyBRM01h
aW5XaW5kb3cgew0KICAgIC0JUV9PQkpFQ1QNCiAgICAtDQogICAgLQlzdGF0aWMgUTNBY3Rpb24g
KnNhdmVBY3Rpb247DQogICAgLQlzdGF0aWMgdm9pZCBjb25mX2NoYW5nZWQodm9pZCk7DQogICAg
LXB1YmxpYzoNCiAgICAtCUNvbmZpZ01haW5XaW5kb3codm9pZCk7DQogICAgLXB1YmxpYyBzbG90
czoNCiAgICAtCXZvaWQgY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKTsNCiAgICAtCXZvaWQgc2V0
TWVudUxpbmsoc3RydWN0IG1lbnUgKik7DQogICAgLQl2b2lkIGxpc3RGb2N1c0NoYW5nZWQodm9p
ZCk7DQogICAgLQl2b2lkIGdvQmFjayh2b2lkKTsNCiAgICAtCXZvaWQgbG9hZENvbmZpZyh2b2lk
KTsNCiAgICAtCWJvb2wgc2F2ZUNvbmZpZyh2b2lkKTsNCiAgICAtCXZvaWQgc2F2ZUNvbmZpZ0Fz
KHZvaWQpOw0KICAgIC0Jdm9pZCBzZWFyY2hDb25maWcodm9pZCk7DQogICAgLQl2b2lkIHNob3dT
aW5nbGVWaWV3KHZvaWQpOw0KICAgIC0Jdm9pZCBzaG93U3BsaXRWaWV3KHZvaWQpOw0KICAgIC0J
dm9pZCBzaG93RnVsbFZpZXcodm9pZCk7DQogICAgLQl2b2lkIHNob3dJbnRybyh2b2lkKTsNCiAg
ICAtCXZvaWQgc2hvd0Fib3V0KHZvaWQpOw0KICAgIC0Jdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7
DQogICAgLQ0KICAgIC1wcm90ZWN0ZWQ6DQogICAgLQl2b2lkIGNsb3NlRXZlbnQoUUNsb3NlRXZl
bnQgKmUpOw0KICAgIC0NCiAgICAtCUNvbmZpZ1NlYXJjaFdpbmRvdyAqc2VhcmNoV2luZG93Ow0K
ICAgIC0JQ29uZmlnVmlldyAqbWVudVZpZXc7DQogICAgLQlDb25maWdMaXN0ICptZW51TGlzdDsN
CiAgICAtCUNvbmZpZ1ZpZXcgKmNvbmZpZ1ZpZXc7DQogICAgLQlDb25maWdMaXN0ICpjb25maWdM
aXN0Ow0KICAgIC0JQ29uZmlnSW5mb1ZpZXcgKmhlbHBUZXh0Ow0KICAgIC0JUTNUb29sQmFyICp0
b29sQmFyOw0KICAgIC0JUTNBY3Rpb24gKmJhY2tBY3Rpb247DQogICAgLQlRU3BsaXR0ZXIqIHNw
bGl0MTsNCiAgICAtCVFTcGxpdHRlciogc3BsaXQyOw0KICAgIC19Ow0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwgYi9zdXBwb3J0L2tjb25maWcv
c3RyZWFtbGluZV9jb25maWcucGwNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCA0NjA2Y2RmLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL3N0cmVhbWxp
bmVfY29uZmlnLnBsDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDY0MCArMCwwIEBADQog
ICAgLSMhL3Vzci9iaW4vcGVybCAtdw0KICAgIC0jDQogICAgLSMgQ29weXJpZ2h0IDIwMDUtMjAw
OSAtIFN0ZXZlbiBSb3N0ZWR0DQogICAgLSMgTGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR1BMIExpY2Vuc2UgdmVyc2lvbiAyDQogICAgLSMNCiAgICAtIyAgSXQncyBzaW1wbGUg
ZW5vdWdoIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgd29ya3MuDQogICAgLSMgIElmIG5vdCwgdGhl
biB5b3UgY2FuIGFzayBtZSBhdCBzdHJpcGNvbmZpZ0Bnb29kbWlzLm9yZw0KICAgIC0jDQogICAg
LSMgV2hhdCBpdCBkb2VzPw0KICAgIC0jDQogICAgLSMgICBJZiB5b3UgaGF2ZSBpbnN0YWxsZWQg
YSBMaW51eCBrZXJuZWwgZnJvbSBhIGRpc3RyaWJ1dGlvbg0KICAgIC0jICAgdGhhdCB0dXJucyBv
biB3YXkgdG9vIG1hbnkgbW9kdWxlcyB0aGFuIHlvdSBuZWVkLCBhbmQNCiAgICAtIyAgIHlvdSBv
bmx5IHdhbnQgdGhlIG1vZHVsZXMgeW91IHVzZSwgdGhlbiB0aGlzIHByb2dyYW0NCiAgICAtIyAg
IGlzIHBlcmZlY3QgZm9yIHlvdS4NCiAgICAtIw0KICAgIC0jICAgSXQgZ2l2ZXMgeW91IHRoZSBh
YmlsaXR5IHRvIHR1cm4gb2ZmIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFyZQ0KICAgIC0jICAgbm90
IGxvYWRlZCBvbiB5b3VyIHN5c3RlbS4NCiAgICAtIw0KICAgIC0jIEhvd3RvOg0KICAgIC0jDQog
ICAgLSMgIDEuIEJvb3QgdXAgdGhlIGtlcm5lbCB0aGF0IHlvdSB3YW50IHRvIHN0cmVhbSBsaW5l
IHRoZSBjb25maWcgb24uDQogICAgLSMgIDIuIENoYW5nZSBkaXJlY3RvcnkgdG8gdGhlIGRpcmVj
dG9yeSBob2xkaW5nIHRoZSBzb3VyY2Ugb2YgdGhlDQogICAgLSMgICAgICAga2VybmVsIHRoYXQg
eW91IGp1c3QgYm9vdGVkLg0KICAgIC0jICAzLiBDb3B5IHRoZSBjb25maWd1cmF0b24gZmlsZSB0
byB0aGlzIGRpcmVjdG9yeSBhcyAuY29uZmlnDQogICAgLSMgIDQuIEhhdmUgYWxsIHlvdXIgZGV2
aWNlcyB0aGF0IHlvdSBuZWVkIG1vZHVsZXMgZm9yIGNvbm5lY3RlZCBhbmQNCiAgICAtIyAgICAg
IG9wZXJhdGlvbmFsIChtYWtlIHN1cmUgdGhhdCB0aGVpciBjb3JyZXNwb25kaW5nIG1vZHVsZXMg
YXJlIGxvYWRlZCkNCiAgICAtIyAgNS4gUnVuIHRoaXMgc2NyaXB0IHJlZGlyZWN0aW5nIHRoZSBv
dXRwdXQgdG8gc29tZSBvdGhlciBmaWxlDQogICAgLSMgICAgICAgbGlrZSBjb25maWdfc3RyaXAu
DQogICAgLSMgIDYuIEJhY2sgdXAgeW91ciBvbGQgY29uZmlnIChpZiB5b3Ugd2FudCB0b28pLg0K
ICAgIC0jICA3LiBjb3B5IHRoZSBjb25maWdfc3RyaXAgZmlsZSB0byAuY29uZmlnDQogICAgLSMg
IDguIFJ1biAibWFrZSBvbGRjb25maWciDQogICAgLSMNCiAgICAtIyAgTm93IHlvdXIga2VybmVs
IGlzIHJlYWR5IHRvIGJlIGJ1aWx0IHdpdGggb25seSB0aGUgbW9kdWxlcyB0aGF0DQogICAgLSMg
IGFyZSBsb2FkZWQuDQogICAgLSMNCiAgICAtIyBIZXJlJ3Mgd2hhdCBJIGRpZCB3aXRoIG15IERl
YmlhbiBkaXN0cmlidXRpb24uDQogICAgLSMNCiAgICAtIyAgICBjZCAvdXNyL3NyYy9saW51eC0y
LjYuMTANCiAgICAtIyAgICBjcCAvYm9vdC9jb25maWctMi42LjEwLTEtNjg2LXNtcCAuY29uZmln
DQogICAgLSMgICAgfi9iaW4vc3RyZWFtbGluZV9jb25maWcgPiBjb25maWdfc3RyaXANCiAgICAt
IyAgICBtdiAuY29uZmlnIGNvbmZpZ19zYXYNCiAgICAtIyAgICBtdiBjb25maWdfc3RyaXAgLmNv
bmZpZw0KICAgIC0jICAgIG1ha2Ugb2xkY29uZmlnDQogICAgLSMNCiAgICAtdXNlIHN0cmljdDsN
CiAgICAtdXNlIEdldG9wdDo6TG9uZzsNCiAgICAtDQogICAgLSMgc2V0IHRoZSBlbnZpcm9ubWVu
dCB2YXJpYWJsZSBMT0NBTE1PRENPTkZJR19ERUJVRyB0byBnZXQNCiAgICAtIyBkZWJ1ZyBvdXRw
dXQuDQogICAgLW15ICRkZWJ1Z3ByaW50ID0gMDsNCiAgICAtJGRlYnVncHJpbnQgPSAxIGlmIChk
ZWZpbmVkKCRFTlZ7TE9DQUxNT0RDT05GSUdfREVCVUd9KSk7DQogICAgLQ0KICAgIC1zdWIgZHBy
aW50IHsNCiAgICAtICAgIHJldHVybiBpZiAoISRkZWJ1Z3ByaW50KTsNCiAgICAtICAgIHByaW50
IFNUREVSUiBAXzsNCiAgICAtfQ0KICAgIC0NCiAgICAtbXkgJGNvbmZpZyA9ICIuY29uZmlnIjsN
CiAgICAtDQogICAgLW15ICR1bmFtZSA9IGB1bmFtZSAtcmA7DQogICAgLWNob21wICR1bmFtZTsN
CiAgICAtDQogICAgLW15IEBzZWFyY2hjb25maWdzID0gKA0KICAgIC0Jew0KICAgIC0JICAgICJm
aWxlIiA9PiAiLmNvbmZpZyIsDQogICAgLQkgICAgImV4ZWMiID0+ICJjYXQiLA0KICAgIC0JfSwN
CiAgICAtCXsNCiAgICAtCSAgICAiZmlsZSIgPT4gIi9wcm9jL2NvbmZpZy5neiIsDQogICAgLQkg
ICAgImV4ZWMiID0+ICJ6Y2F0IiwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkgICAgImZpbGUi
ID0+ICIvYm9vdC9jb25maWctJHVuYW1lIiwNCiAgICAtCSAgICAiZXhlYyIgPT4gImNhdCIsDQog
ICAgLQl9LA0KICAgIC0Jew0KICAgIC0JICAgICJmaWxlIiA9PiAiL2Jvb3Qvdm1saW51ei0kdW5h
bWUiLA0KICAgIC0JICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAg
ICAtCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsDQogICAgLQl9LA0K
ICAgIC0Jew0KICAgIC0JICAgICJmaWxlIiA9PiAidm1saW51eCIsDQogICAgLQkgICAgImV4ZWMi
ID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgIC0JICAgICJ0ZXN0IiA9PiAic2Ny
aXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkgICAgImZp
bGUiID0+ICIvbGliL21vZHVsZXMvJHVuYW1lL2tlcm5lbC9rZXJuZWwvY29uZmlncy5rbyIsDQog
ICAgLQkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgIC0JICAg
ICJ0ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICAtCX0sDQogICAgLQl7
DQogICAgLQkgICAgImZpbGUiID0+ICJrZXJuZWwvY29uZmlncy5rbyIsDQogICAgLQkgICAgImV4
ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgIC0JICAgICJ0ZXN0IiA9PiAi
c2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkgICAg
ImZpbGUiID0+ICJrZXJuZWwvY29uZmlncy5vIiwNCiAgICAtCSAgICAiZXhlYyIgPT4gInNjcmlw
dHMvZXh0cmFjdC1pa2NvbmZpZyIsDQogICAgLQkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJh
Y3QtaWtjb25maWciLA0KICAgIC0JfSwNCiAgICAtKTsNCiAgICAtDQogICAgLXN1YiByZWFkX2Nv
bmZpZyB7DQogICAgLSAgICBmb3JlYWNoIG15ICRjb25mIChAc2VhcmNoY29uZmlncykgew0KICAg
IC0JbXkgJGZpbGUgPSAkY29uZi0+eyJmaWxlIn07DQogICAgLQ0KICAgIC0JbmV4dCBpZiAoICEg
LWYgIiRmaWxlIik7DQogICAgLQ0KICAgIC0JaWYgKGRlZmluZWQoJGNvbmYtPnsidGVzdCJ9KSkg
ew0KICAgIC0JICAgIGAkY29uZi0+eyJ0ZXN0In0gJGNvbmYtPnsiZmlsZSJ9IDI+L2Rldi9udWxs
YDsNCiAgICAtCSAgICBuZXh0IGlmICgkPyk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JbXkgJGV4
ZWMgPSAkY29uZi0+eyJleGVjIn07DQogICAgLQ0KICAgIC0JcHJpbnQgU1RERVJSICJ1c2luZyBj
b25maWc6ICckZmlsZSdcbiI7DQogICAgLQ0KICAgIC0Jb3BlbihteSAkaW5maWxlLCAnLXwnLCAi
JGV4ZWMgJGZpbGUiKSB8fCBkaWUgIkZhaWxlZCB0byBydW4gJGV4ZWMgJGZpbGUiOw0KICAgIC0J
bXkgQHggPSA8JGluZmlsZT47DQogICAgLQljbG9zZSAkaW5maWxlOw0KICAgIC0JcmV0dXJuIEB4
Ow0KICAgIC0gICAgfQ0KICAgIC0gICAgZGllICJObyBjb25maWcgZmlsZSBmb3VuZCI7DQogICAg
LX0NCiAgICAtDQogICAgLW15IEBjb25maWdfZmlsZSA9IHJlYWRfY29uZmlnOw0KICAgIC0NCiAg
ICAtIyBQYXJzZSBvcHRpb25zDQogICAgLW15ICRsb2NhbG1vZGNvbmZpZyA9IDA7DQogICAgLW15
ICRsb2NhbHllc2NvbmZpZyA9IDA7DQogICAgLQ0KICAgIC1HZXRPcHRpb25zKCJsb2NhbG1vZGNv
bmZpZyIgPT4gXCRsb2NhbG1vZGNvbmZpZywNCiAgICAtCSAgICJsb2NhbHllc2NvbmZpZyIgPT4g
XCRsb2NhbHllc2NvbmZpZyk7DQogICAgLQ0KICAgIC0jIEdldCB0aGUgYnVpbGQgc291cmNlIGFu
ZCB0b3AgbGV2ZWwgS2NvbmZpZyBmaWxlIChwYXNzZWQgaW4pDQogICAgLW15ICRrc291cmNlID0g
KCRBUkdWWzBdID8gJEFSR1ZbMF0gOiAnLicpOw0KICAgIC1teSAka2NvbmZpZyA9ICRBUkdWWzFd
Ow0KICAgIC1teSAkbHNtb2RfZmlsZSA9ICRFTlZ7J0xTTU9EJ307DQogICAgLQ0KICAgIC1teSBA
bWFrZWZpbGVzID0gYGZpbmQgJGtzb3VyY2UgLW5hbWUgTWFrZWZpbGUgMj4vZGV2L251bGxgOw0K
ICAgIC1jaG9tcCBAbWFrZWZpbGVzOw0KICAgIC0NCiAgICAtbXkgJWRlcGVuZHM7DQogICAgLW15
ICVzZWxlY3RzOw0KICAgIC1teSAlcHJvbXB0czsNCiAgICAtbXkgJW9iamVjdHM7DQogICAgLW15
ICR2YXI7DQogICAgLW15ICRpZmxldmVsID0gMDsNCiAgICAtbXkgQGlmZGVwczsNCiAgICAtDQog
ICAgLSMgcHJldmVudCByZWN1cnNpb24NCiAgICAtbXkgJXJlYWRfa2NvbmZpZ3M7DQogICAgLQ0K
ICAgIC1zdWIgcmVhZF9rY29uZmlnIHsNCiAgICAtICAgIG15ICgka2NvbmZpZykgPSBAXzsNCiAg
ICAtDQogICAgLSAgICBteSAkc3RhdGUgPSAiTk9ORSI7DQogICAgLSAgICBteSAkY29uZmlnOw0K
ICAgIC0NCiAgICAtICAgIG15ICRjb250ID0gMDsNCiAgICAtICAgIG15ICRsaW5lOw0KICAgIC0N
CiAgICAtICAgIG15ICRzb3VyY2UgPSAiJGtzb3VyY2UvJGtjb25maWciOw0KICAgIC0gICAgbXkg
JGxhc3Rfc291cmNlID0gIiI7DQogICAgLQ0KICAgIC0gICAgIyBDaGVjayBmb3IgYW55IGVudmly
b25tZW50IHZhcmlhYmxlcyB1c2VkDQogICAgLSAgICB3aGlsZSAoJHNvdXJjZSA9fiAvXCQoXHcr
KS8gJiYgJGxhc3Rfc291cmNlIG5lICRzb3VyY2UpIHsNCiAgICAtCW15ICRlbnYgPSAkMTsNCiAg
ICAtCSRsYXN0X3NvdXJjZSA9ICRzb3VyY2U7DQogICAgLQkkc291cmNlID1+IHMvXCQkZW52LyRF
TlZ7JGVudn0vOw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICAgIG9wZW4obXkgJGtpbmZpbGUs
ICc8JywgJHNvdXJjZSkgfHwgZGllICJDYW4ndCBvcGVuICRrY29uZmlnIjsNCiAgICAtICAgIHdo
aWxlICg8JGtpbmZpbGU+KSB7DQogICAgLQljaG9tcDsNCiAgICAtDQogICAgLQkjIE1ha2Ugc3Vy
ZSB0aGF0IGxpbmVzIGVuZGluZyB3aXRoIFwgY29udGludWUNCiAgICAtCWlmICgkY29udCkgew0K
ICAgIC0JICAgICRfID0gJGxpbmUgLiAiICIgLiAkXzsNCiAgICAtCX0NCiAgICAtDQogICAgLQlp
ZiAocy9cXCQvLykgew0KICAgIC0JICAgICRjb250ID0gMTsNCiAgICAtCSAgICAkbGluZSA9ICRf
Ow0KICAgIC0JICAgIG5leHQ7DQogICAgLQl9DQogICAgLQ0KICAgIC0JJGNvbnQgPSAwOw0KICAg
IC0NCiAgICAtCSMgY29sbGVjdCBhbnkgS2NvbmZpZyBzb3VyY2VzDQogICAgLQlpZiAoL15zb3Vy
Y2VccyoiKC4qKSIvKSB7DQogICAgLQkgICAgbXkgJGtjb25maWcgPSAkMTsNCiAgICAtCSAgICAj
IHByZXZlbnQgcmVhZGluZyB0d2ljZS4NCiAgICAtCSAgICBpZiAoIWRlZmluZWQoJHJlYWRfa2Nv
bmZpZ3N7JGtjb25maWd9KSkgew0KICAgIC0JCSRyZWFkX2tjb25maWdzeyRrY29uZmlnfSA9IDE7
DQogICAgLQkJcmVhZF9rY29uZmlnKCRrY29uZmlnKTsNCiAgICAtCSAgICB9DQogICAgLQkgICAg
bmV4dDsNCiAgICAtCX0NCiAgICAtDQogICAgLQkjIGNvbmZpZ3MgZm91bmQNCiAgICAtCWlmICgv
XlxzKihtZW51KT9jb25maWdccysoXFMrKVxzKiQvKSB7DQogICAgLQkgICAgJHN0YXRlID0gIk5F
VyI7DQogICAgLQkgICAgJGNvbmZpZyA9ICQyOw0KICAgIC0NCiAgICAtCSAgICAjIEFkZCBkZXBl
bmRzIGZvciAnaWYnIG5lc3RpbmcNCiAgICAtCSAgICBmb3IgKG15ICRpID0gMDsgJGkgPCAkaWZs
ZXZlbDsgJGkrKykgew0KICAgIC0JCWlmICgkaSkgew0KICAgIC0JCSAgICAkZGVwZW5kc3skY29u
ZmlnfSAuPSAiICIgLiAkaWZkZXBzWyRpXTsNCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCSAgICAk
ZGVwZW5kc3skY29uZmlnfSA9ICRpZmRlcHNbJGldOw0KICAgIC0JCX0NCiAgICAtCQkkc3RhdGUg
PSAiREVQIjsNCiAgICAtCSAgICB9DQogICAgLQ0KICAgIC0JIyBjb2xsZWN0IHRoZSBkZXBlbmRz
IGZvciB0aGUgY29uZmlnDQogICAgLQl9IGVsc2lmICgkc3RhdGUgZXEgIk5FVyIgJiYgL15ccypk
ZXBlbmRzXHMrb25ccysoLiopJC8pIHsNCiAgICAtCSAgICAkc3RhdGUgPSAiREVQIjsNCiAgICAt
CSAgICAkZGVwZW5kc3skY29uZmlnfSA9ICQxOw0KICAgIC0JfSBlbHNpZiAoJHN0YXRlIGVxICJE
RVAiICYmIC9eXHMqZGVwZW5kc1xzK29uXHMrKC4qKSQvKSB7DQogICAgLQkgICAgJGRlcGVuZHN7
JGNvbmZpZ30gLj0gIiAiIC4gJDE7DQogICAgLQ0KICAgIC0JIyBHZXQgdGhlIGNvbmZpZ3MgdGhh
dCBzZWxlY3QgdGhpcyBjb25maWcNCiAgICAtCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYg
L15ccypzZWxlY3RccysoXFMrKS8pIHsNCiAgICAtCSAgICBteSAkY29uZiA9ICQxOw0KICAgIC0J
ICAgIGlmIChkZWZpbmVkKCRzZWxlY3RzeyRjb25mfSkpIHsNCiAgICAtCQkkc2VsZWN0c3skY29u
Zn0gLj0gIiAiIC4gJGNvbmZpZzsNCiAgICAtCSAgICB9IGVsc2Ugew0KICAgIC0JCSRzZWxlY3Rz
eyRjb25mfSA9ICRjb25maWc7DQogICAgLQkgICAgfQ0KICAgIC0NCiAgICAtCSMgY29uZmlncyB3
aXRob3V0IHByb21wdHMgbXVzdCBiZSBzZWxlY3RlZA0KICAgIC0JfSBlbHNpZiAoJHN0YXRlIG5l
ICJOT05FIiAmJiAvXlxzKnRyaXN0YXRlXHNcUy8pIHsNCiAgICAtCSAgICAjIG5vdGUgaWYgdGhl
IGNvbmZpZyBoYXMgYSBwcm9tcHQNCiAgICAtCSAgICAkcHJvbXB0c3skY29uZmlnfSA9IDE7DQog
ICAgLQ0KICAgIC0JIyBDaGVjayBmb3IgaWYgc3RhdGVtZW50cw0KICAgIC0JfSBlbHNpZiAoL15p
ZlxzKyguKlxTKVxzKiQvKSB7DQogICAgLQkgICAgbXkgJGRlcHMgPSAkMTsNCiAgICAtCSAgICAj
IHJlbW92ZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBub24gdGV4dA0KICAgIC0JICAgICRkZXBzID1+
IHMvXlteYS16QS1aMC05X10qLy87DQogICAgLQkgICAgJGRlcHMgPX4gcy9bXmEtekEtWjAtOV9d
KiQvLzsNCiAgICAtDQogICAgLQkgICAgbXkgQGRlcHMgPSBzcGxpdCAvW15hLXpBLVowLTlfXSsv
LCAkZGVwczsNCiAgICAtDQogICAgLQkgICAgJGlmZGVwc1skaWZsZXZlbCsrXSA9IGpvaW4gJzon
LCBAZGVwczsNCiAgICAtDQogICAgLQl9IGVsc2lmICgvXmVuZGlmLykgew0KICAgIC0NCiAgICAt
CSAgICAkaWZsZXZlbC0tIGlmICgkaWZsZXZlbCk7DQogICAgLQ0KICAgIC0JIyBzdG9wIG9uICJo
ZWxwIg0KICAgIC0JfSBlbHNpZiAoL15ccypoZWxwXHMqJC8pIHsNCiAgICAtCSAgICAkc3RhdGUg
PSAiTk9ORSI7DQogICAgLQl9DQogICAgLSAgICB9DQogICAgLSAgICBjbG9zZSgka2luZmlsZSk7
DQogICAgLX0NCiAgICAtDQogICAgLWlmICgka2NvbmZpZykgew0KICAgIC0gICAgcmVhZF9rY29u
ZmlnKCRrY29uZmlnKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtIyBNYWtlZmlsZXMgY2FuIHVzZSB2
YXJpYWJsZXMgdG8gZGVmaW5lIHRoZWlyIGRlcGVuZGVuY2llcw0KICAgIC1zdWIgY29udmVydF92
YXJzIHsNCiAgICAtICAgIG15ICgkbGluZSwgJXZhcnMpID0gQF87DQogICAgLQ0KICAgIC0gICAg
bXkgJHByb2Nlc3MgPSAiIjsNCiAgICAtDQogICAgLSAgICB3aGlsZSAoJGxpbmUgPX4gcy9eKC4q
PykoXCRcKCguKj8pXCkpLy8pIHsNCiAgICAtCW15ICRzdGFydCA9ICQxOw0KICAgIC0JbXkgJHZh
cmlhYmxlID0gJDI7DQogICAgLQlteSAkdmFyID0gJDM7DQogICAgLQ0KICAgIC0JaWYgKGRlZmlu
ZWQoJHZhcnN7JHZhcn0pKSB7DQogICAgLQkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcnN7
JHZhcn07DQogICAgLQl9IGVsc2Ugew0KICAgIC0JICAgICRwcm9jZXNzIC49ICRzdGFydCAuICR2
YXJpYWJsZTsNCiAgICAtCX0NCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgICAkcHJvY2VzcyAu
PSAkbGluZTsNCiAgICAtDQogICAgLSAgICByZXR1cm4gJHByb2Nlc3M7DQogICAgLX0NCiAgICAt
DQogICAgLSMgUmVhZCBhbGwgTWFrZWZpbGVzIHRvIG1hcCB0aGUgY29uZmlncyB0byB0aGUgb2Jq
ZWN0cw0KICAgIC1mb3JlYWNoIG15ICRtYWtlZmlsZSAoQG1ha2VmaWxlcykgew0KICAgIC0NCiAg
ICAtICAgIG15ICRsaW5lID0gIiI7DQogICAgLSAgICBteSAlbWFrZV92YXJzOw0KICAgIC0NCiAg
ICAtICAgIG9wZW4obXkgJGluZmlsZSwgJzwnLCAkbWFrZWZpbGUpIHx8IGRpZSAiQ2FuJ3Qgb3Bl
biAkbWFrZWZpbGUiOw0KICAgIC0gICAgd2hpbGUgKDwkaW5maWxlPikgew0KICAgIC0JIyBpZiB0
aGlzIGxpbmUgZW5kcyB3aXRoIGEgYmFja3NsYXNoLCBjb250aW51ZQ0KICAgIC0JY2hvbXA7DQog
ICAgLQlpZiAoL14oLiopXFwkLykgew0KICAgIC0JICAgICRsaW5lIC49ICQxOw0KICAgIC0JICAg
IG5leHQ7DQogICAgLQl9DQogICAgLQ0KICAgIC0JJGxpbmUgLj0gJF87DQogICAgLQkkXyA9ICRs
aW5lOw0KICAgIC0JJGxpbmUgPSAiIjsNCiAgICAtDQogICAgLQlteSAkb2JqczsNCiAgICAtDQog
ICAgLQkjIENvbnZlcnQgdmFyaWFibGVzIGluIGEgbGluZSAoY291bGQgZGVmaW5lIGNvbmZpZ3Mp
DQogICAgLQkkXyA9IGNvbnZlcnRfdmFycygkXywgJW1ha2VfdmFycyk7DQogICAgLQ0KICAgIC0J
IyBjb2xsZWN0IG9iamVjdHMgYWZ0ZXIgb2JqLSQoQ09ORklHX0ZPT19CQVIpDQogICAgLQlpZiAo
L29iai1cJFwoKENPTkZJR19bXlwpXSopXClccypbKzpdPz1ccyooLiopLykgew0KICAgIC0JICAg
ICR2YXIgPSAkMTsNCiAgICAtCSAgICAkb2JqcyA9ICQyOw0KICAgIC0NCiAgICAtCSMgY2hlY2sg
aWYgdmFyaWFibGVzIGFyZSBzZXQNCiAgICAtCX0gZWxzaWYgKC9eXHMqKFxTKylccypbOl0/PVxz
KiguKlxTKS8pIHsNCiAgICAtCSAgICAkbWFrZV92YXJzeyQxfSA9ICQyOw0KICAgIC0JfQ0KICAg
IC0JaWYgKGRlZmluZWQoJG9ianMpKSB7DQogICAgLQkgICAgZm9yZWFjaCBteSAkb2JqIChzcGxp
dCAvXHMrLywkb2Jqcykgew0KICAgIC0JCSRvYmogPX4gcy8tL18vZzsNCiAgICAtCQlpZiAoJG9i
aiA9fiAvKC4qKVwubyQvKSB7DQogICAgLQkJICAgICMgT2JqZWN0cyBtYXkgYmUgZW5hYmxlZCBi
eSBtb3JlIHRoYW4gb25lIGNvbmZpZy4NCiAgICAtCQkgICAgIyBTdG9yZSBjb25maWdzIGluIGFu
IGFycmF5Lg0KICAgIC0JCSAgICBteSBAYXJyOw0KICAgIC0NCiAgICAtCQkgICAgaWYgKGRlZmlu
ZWQoJG9iamVjdHN7JDF9KSkgew0KICAgIC0JCQlAYXJyID0gQHskb2JqZWN0c3skMX19Ow0KICAg
IC0JCSAgICB9DQogICAgLQ0KICAgIC0JCSAgICAkYXJyWyQjYXJyKzFdID0gJHZhcjsNCiAgICAt
DQogICAgLQkJICAgICMgVGhlIG9iamVjdHMgaGF2ZSBhIGhhc2ggbWFwcGluZyB0byBhIHJlZmVy
ZW5jZQ0KICAgIC0JCSAgICAjIG9mIGFuIGFycmF5IG9mIGNvbmZpZ3MuDQogICAgLQkJICAgICRv
YmplY3RzeyQxfSA9IFxAYXJyOw0KICAgIC0JCX0NCiAgICAtCSAgICB9DQogICAgLQl9DQogICAg
LSAgICB9DQogICAgLSAgICBjbG9zZSgkaW5maWxlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtbXkg
JW1vZHVsZXM7DQogICAgLW15ICRsaW5maWxlOw0KICAgIC0NCiAgICAtaWYgKGRlZmluZWQoJGxz
bW9kX2ZpbGUpKSB7DQogICAgLSAgICBpZiAoICEgLWYgJGxzbW9kX2ZpbGUpIHsNCiAgICAtCWlm
ICggLWYgJEVOVnsnb2JqdHJlZSd9LiIvIi4kbHNtb2RfZmlsZSkgew0KICAgIC0JICAgICRsc21v
ZF9maWxlID0gJEVOVnsnb2JqdHJlZSd9LiIvIi4kbHNtb2RfZmlsZTsNCiAgICAtCX0gZWxzZSB7
DQogICAgLQkJZGllICIkbHNtb2RfZmlsZSBub3QgZm91bmQiOw0KICAgIC0JfQ0KICAgIC0gICAg
fQ0KICAgIC0NCiAgICAtICAgIG15ICRvdHlwZSA9ICggLXggJGxzbW9kX2ZpbGUpID8gJy18JyA6
ICc8JzsNCiAgICAtICAgIG9wZW4oJGxpbmZpbGUsICRvdHlwZSwgJGxzbW9kX2ZpbGUpOw0KICAg
IC0NCiAgICAtfSBlbHNlIHsNCiAgICAtDQogICAgLSAgICAjIHNlZSB3aGF0IG1vZHVsZXMgYXJl
IGxvYWRlZCBvbiB0aGlzIHN5c3RlbQ0KICAgIC0gICAgbXkgJGxzbW9kOw0KICAgIC0NCiAgICAt
ICAgIGZvcmVhY2ggbXkgJGRpciAoICgiL3NiaW4iLCAiL2JpbiIsICIvdXNyL3NiaW4iLCAiL3Vz
ci9iaW4iKSApIHsNCiAgICAtCWlmICggLXggIiRkaXIvbHNtb2QiICkgew0KICAgIC0JICAgICRs
c21vZCA9ICIkZGlyL2xzbW9kIjsNCiAgICAtCSAgICBsYXN0Ow0KICAgIC0JfQ0KICAgIC19DQog
ICAgLSAgICBpZiAoIWRlZmluZWQoJGxzbW9kKSkgew0KICAgIC0JIyB0cnkganVzdCB0aGUgcGF0
aA0KICAgIC0JJGxzbW9kID0gImxzbW9kIjsNCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgICBv
cGVuKCRsaW5maWxlLCAnLXwnLCAkbHNtb2QpIHx8IGRpZSAiQ2FuIG5vdCBjYWxsIGxzbW9kIHdp
dGggJGxzbW9kIjsNCiAgICAtfQ0KICAgIC0NCiAgICAtd2hpbGUgKDwkbGluZmlsZT4pIHsNCiAg
ICAtCW5leHQgaWYgKC9eTW9kdWxlLyk7ICAjIFNraXAgdGhlIGZpcnN0IGxpbmUuDQogICAgLQlp
ZiAoL14oXFMrKS8pIHsNCiAgICAtCQkkbW9kdWxlc3skMX0gPSAxOw0KICAgIC0JfQ0KICAgIC19
DQogICAgLWNsb3NlICgkbGluZmlsZSk7DQogICAgLQ0KICAgIC0jIGFkZCB0byB0aGUgY29uZmln
cyBoYXNoIGFsbCBjb25maWdzIHRoYXQgYXJlIG5lZWRlZCB0byBlbmFibGUNCiAgICAtIyBhIGxv
YWRlZCBtb2R1bGUuIFRoaXMgaXMgYSBkaXJlY3Qgb2JqLSR7Q09ORklHX0ZPT30gKz0gYmFyLm8N
CiAgICAtIyB3aGVyZSB3ZSBrbm93IHdlIG5lZWQgYmFyLm8gc28gd2UgYWRkIEZPTyB0byB0aGUg
bGlzdC4NCiAgICAtbXkgJWNvbmZpZ3M7DQogICAgLWZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cygl
bW9kdWxlcykpIHsNCiAgICAtICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyRtb2R1bGV9KSkgew0K
ICAgIC0JbXkgQGFyciA9IEB7JG9iamVjdHN7JG1vZHVsZX19Ow0KICAgIC0JZm9yZWFjaCBteSAk
Y29uZiAoQGFycikgew0KICAgIC0JICAgICRjb25maWdzeyRjb25mfSA9ICRtb2R1bGU7DQogICAg
LQkgICAgZHByaW50ICIkY29uZiBhZGRlZCBieSBkaXJlY3QgKCRtb2R1bGUpXG4iOw0KICAgIC0J
ICAgIGlmICgkZGVidWdwcmludCkgew0KICAgIC0JCW15ICRjPSRjb25mOw0KICAgIC0JCSRjID1+
IHMvXkNPTkZJR18vLzsNCiAgICAtCQlpZiAoZGVmaW5lZCgkZGVwZW5kc3skY30pKSB7DQogICAg
LQkJICAgIGRwcmludCAiIGRlcHMgPSAkZGVwZW5kc3skY31cbiI7DQogICAgLQkJfSBlbHNlIHsN
CiAgICAtCQkgICAgZHByaW50ICIgbm8gZGVwc1xuIjsNCiAgICAtCQl9DQogICAgLQkgICAgfQ0K
ICAgIC0JfQ0KICAgIC0gICAgfSBlbHNlIHsNCiAgICAtCSMgTW9zdCBsaWtlbHksIHNvbWVvbmUg
aGFzIGEgY3VzdG9tIChiaW5hcnk/KSBtb2R1bGUgbG9hZGVkLg0KICAgIC0JcHJpbnQgU1RERVJS
ICIkbW9kdWxlIGNvbmZpZyBub3QgZm91bmQhIVxuIjsNCiAgICAtICAgIH0NCiAgICAtfQ0KICAg
IC0NCiAgICAtIyBSZWFkIHRoZSBjdXJyZW50IGNvbmZpZywgYW5kIHNlZSB3aGF0IGlzIGVuYWJs
ZWQuIFdlIHdhbnQgdG8NCiAgICAtIyBpZ25vcmUgY29uZmlncyB0aGF0IHdlIHdvdWxkIG5vdCBl
bmFibGUgYW55d2F5Lg0KICAgIC0NCiAgICAtbXkgJW9yaWdfY29uZmlnczsNCiAgICAtbXkgJHZh
bGlkID0gIkEtWmEtel8wLTkiOw0KICAgIC0NCiAgICAtZm9yZWFjaCBteSAkbGluZSAoQGNvbmZp
Z19maWxlKSB7DQogICAgLSAgICAkXyA9ICRsaW5lOw0KICAgIC0NCiAgICAtICAgIGlmICgvKENP
TkZJR19bJHZhbGlkXSopPShtfHkpLykgew0KICAgIC0JJG9yaWdfY29uZmlnc3skMX0gPSAkMjsN
CiAgICAtICAgIH0NCiAgICAtfQ0KICAgIC0NCiAgICAtbXkgJHJlcGVhdCA9IDE7DQogICAgLQ0K
ICAgIC1teSAkZGVwY29uZmlnOw0KICAgIC0NCiAgICAtIw0KICAgIC0jIE5vdGUsIHdlIGRvIG5v
dCBjYXJlIGFib3V0IG9wZXJhbmRzIChsaWtlOiAmJiwgfHwsICEpIHdlIHdhbnQgdG8gYWRkIGFu
eQ0KICAgIC0jIGNvbmZpZyB0aGF0IGlzIGluIHRoZSBkZXBlbmQgbGlzdCBvZiBhbm90aGVyIGNv
bmZpZy4gVGhpcyBzY3JpcHQgZG9lcw0KICAgIC0jIG5vdCBlbmFibGUgY29uZmlncyB0aGF0IGFy
ZSBub3QgYWxyZWFkeSBlbmFibGVkLiBJZiB3ZSBjb21lIGFjcm9zcyBhDQogICAgLSMgY29uZmln
IEEgdGhhdCBkZXBlbmRzIG9uICFCLCB3ZSBjYW4gc3RpbGwgYWRkIEIgdG8gdGhlIGxpc3Qgb2Yg
ZGVwZW5kcw0KICAgIC0jIHRvIGtlZXAgb24uIElmIEEgd2FzIG9uIGluIHRoZSBvcmlnaW5hbCBj
b25maWcsIEIgd291bGQgbm90IGhhdmUgYmVlbg0KICAgIC0jIGFuZCBCIHdvdWxkIG5vdCBiZSB0
dXJuZWQgb24gYnkgdGhpcyBzY3JpcHQuDQogICAgLSMNCiAgICAtc3ViIHBhcnNlX2NvbmZpZ19k
ZXBlbmRzDQogICAgLXsNCiAgICAtICAgIG15ICgkcCkgPSBAXzsNCiAgICAtDQogICAgLSAgICB3
aGlsZSAoJHAgPX4gL1skdmFsaWRdLykgew0KICAgIC0NCiAgICAtCWlmICgkcCA9fiAvXlteJHZh
bGlkXSooWyR2YWxpZF0rKS8pIHsNCiAgICAtCSAgICBteSAkY29uZiA9ICJDT05GSUdfIiAuICQx
Ow0KICAgIC0NCiAgICAtCSAgICAkcCA9fiBzL15bXiR2YWxpZF0qWyR2YWxpZF0rLy87DQogICAg
LQ0KICAgIC0JICAgICMgV2Ugb25seSBuZWVkIHRvIHByb2Nlc3MgaWYgdGhlIGRlcGVuZCBjb25m
aWcgaXMgYSBtb2R1bGUNCiAgICAtCSAgICBpZiAoIWRlZmluZWQoJG9yaWdfY29uZmlnc3skY29u
Zn0pIHx8ICEkb3JpZ19jb25maWdze2NvbmZ9IGVxICJtIikgew0KICAgIC0JCW5leHQ7DQogICAg
LQkgICAgfQ0KICAgIC0NCiAgICAtCSAgICBpZiAoIWRlZmluZWQoJGNvbmZpZ3N7JGNvbmZ9KSkg
ew0KICAgIC0JCSMgV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGlzIGNvbmZpZyBoYXMgaXRzDQog
ICAgLQkJIyBkZXBlbmRlbmNpZXMgbWV0Lg0KICAgIC0JCSRyZXBlYXQgPSAxOyAjIGRvIGFnYWlu
DQogICAgLQkJZHByaW50ICIkY29uZiBzZWxlY3RlZCBieSBkZXBlbmQgJGRlcGNvbmZpZ1xuIjsN
CiAgICAtCQkkY29uZmlnc3skY29uZn0gPSAxOw0KICAgIC0JICAgIH0NCiAgICAtCX0gZWxzZSB7
DQogICAgLQkgICAgZGllICJ0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4iOw0KICAgIC0JfQ0KICAg
IC0gICAgfQ0KICAgIC19DQogICAgLQ0KICAgIC0jIFNlbGVjdCBpcyB0cmVhdGVkIGEgYml0IGRp
ZmZlcmVudGx5IHRoYW4gZGVwZW5kcy4gV2UgY2FsbCB0aGlzDQogICAgLSMgd2hlbiBhIGNvbmZp
ZyBoYXMgbm8gcHJvbXB0IGFuZCByZXF1aXJlcyBhbm90aGVyIGNvbmZpZyB0byBiZQ0KICAgIC0j
IHNlbGVjdGVkLiBXZSB1c2UgdG8ganVzdCBzZWxlY3QgYWxsIGNvbmZpZ3MgdGhhdCBzZWxlY3Rl
ZCB0aGlzDQogICAgLSMgY29uZmlnLCBidXQgZm91bmQgdGhhdCB0aGF0IGNhbiBiYWxsb29uIGlu
dG8gZW5hYmxpbmcgaHVuZHJlZHMNCiAgICAtIyBvZiBjb25maWdzIHRoYXQgd2UgZG8gbm90IGNh
cmUgYWJvdXQuDQogICAgLSMNCiAgICAtIyBUaGUgaWRlYSBpcyB3ZSBsb29rIGF0IGFsbCB0aGUg
Y29uZmlncyB0aGF0IHNlbGVjdCBpdC4gSWYgb25lDQogICAgLSMgaXMgYWxyZWFkeSBpbiBvdXIg
bGlzdCBvZiBjb25maWdzIHRvIGVuYWJsZSwgdGhlbiB0aGVyZSdzIG5vdGhpbmcNCiAgICAtIyBl
bHNlIHRvIGRvLiBJZiB0aGVyZSBpc24ndCwgd2UgcGljayB0aGUgZmlyc3QgY29uZmlnIHRoYXQg
d2FzDQogICAgLSMgZW5hYmxlZCBpbiB0aGUgb3JpZ25hbCBjb25maWcgYW5kIHVzZSB0aGF0Lg0K
ICAgIC1zdWIgcGFyc2VfY29uZmlnX3NlbGVjdHMNCiAgICAtew0KICAgIC0gICAgbXkgKCRjb25m
aWcsICRwKSA9IEBfOw0KICAgIC0NCiAgICAtICAgIG15ICRuZXh0X2NvbmZpZzsNCiAgICAtDQog
ICAgLSAgICB3aGlsZSAoJHAgPX4gL1skdmFsaWRdLykgew0KICAgIC0NCiAgICAtCWlmICgkcCA9
fiAvXlteJHZhbGlkXSooWyR2YWxpZF0rKS8pIHsNCiAgICAtCSAgICBteSAkY29uZiA9ICJDT05G
SUdfIiAuICQxOw0KICAgIC0NCiAgICAtCSAgICAkcCA9fiBzL15bXiR2YWxpZF0qWyR2YWxpZF0r
Ly87DQogICAgLQ0KICAgIC0JICAgICMgTWFrZSBzdXJlIHRoYXQgdGhpcyBjb25maWcgZXhpc3Rz
IGluIHRoZSBjdXJyZW50IC5jb25maWcgZmlsZQ0KICAgIC0JICAgIGlmICghZGVmaW5lZCgkb3Jp
Z19jb25maWdzeyRjb25mfSkpIHsNCiAgICAtCQlkcHJpbnQgIiRjb25mIG5vdCBzZXQgZm9yICRj
b25maWcgc2VsZWN0XG4iOw0KICAgIC0JCW5leHQ7DQogICAgLQkgICAgfQ0KICAgIC0NCiAgICAt
CSAgICAjIENoZWNrIGlmIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbW9kdWxlIHNlbGVjdHMgdGhp
cyBjb25maWcNCiAgICAtCSAgICBpZiAoZGVmaW5lZCgkb3JpZ19jb25maWdzeyRjb25mfSkgJiYg
JG9yaWdfY29uZmlnc3skY29uZn0gbmUgIm0iKSB7DQogICAgLQkJZHByaW50ICIkY29uZiAobm9u
IG1vZHVsZSkgc2VsZWN0cyBjb25maWcsIHdlIGFyZSBnb29kXG4iOw0KICAgIC0JCSMgd2UgYXJl
IGdvb2Qgd2l0aCB0aGlzDQogICAgLQkJcmV0dXJuOw0KICAgIC0JICAgIH0NCiAgICAtCSAgICBp
ZiAoZGVmaW5lZCgkY29uZmlnc3skY29uZn0pKSB7DQogICAgLQkJZHByaW50ICIkY29uZiBzZWxl
Y3RzICRjb25maWcgc28gd2UgYXJlIGdvb2RcbiI7DQogICAgLQkJIyBBIHNldCBjb25maWcgc2Vs
ZWN0cyB0aGlzIGNvbmZpZywgd2UgYXJlIGdvb2QNCiAgICAtCQlyZXR1cm47DQogICAgLQkgICAg
fQ0KICAgIC0JICAgICMgU2V0IHRoaXMgY29uZmlnIHRvIGJlIHNlbGVjdGVkDQogICAgLQkgICAg
aWYgKCFkZWZpbmVkKCRuZXh0X2NvbmZpZykpIHsNCiAgICAtCQkkbmV4dF9jb25maWcgPSAkY29u
ZjsNCiAgICAtCSAgICB9DQogICAgLQl9IGVsc2Ugew0KICAgIC0JICAgIGRpZSAidGhpcyBzaG91
bGQgbmV2ZXIgaGFwcGVuIjsNCiAgICAtCX0NCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgICAj
IElmIG5vIHBvc3NpYmxlIGNvbmZpZyBzZWxlY3RlZCB0aGlzLCB0aGVuIHNvbWV0aGluZyBoYXBw
ZW5lZC4NCiAgICAtICAgIGlmICghZGVmaW5lZCgkbmV4dF9jb25maWcpKSB7DQogICAgLQlwcmlu
dCBTVERFUlIgIldBUk5JTkc6ICRjb25maWcgaXMgcmVxdWlyZWQsIGJ1dCBub3RoaW5nIGluIHRo
ZVxuIjsNCiAgICAtCXByaW50IFNUREVSUiAiICBjdXJyZW50IGNvbmZpZyBzZWxlY3RzIGl0Llxu
IjsNCiAgICAtCXJldHVybjsNCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgICAjIElmIHdlIGFy
ZSBoZXJlLCB0aGVuIHdlIGZvdW5kIG5vIGNvbmZpZyB0aGF0IGlzIHNldCBhbmQNCiAgICAtICAg
ICMgc2VsZWN0cyB0aGlzIGNvbmZpZy4gUmVwZWF0Lg0KICAgIC0gICAgJHJlcGVhdCA9IDE7DQog
ICAgLSAgICAjIE1ha2UgdGhpcyBjb25maWcgbmVlZCB0byBiZSBzZWxlY3RlZA0KICAgIC0gICAg
JGNvbmZpZ3N7JG5leHRfY29uZmlnfSA9IDE7DQogICAgLSAgICBkcHJpbnQgIiRuZXh0X2NvbmZp
ZyBzZWxlY3RlZCBieSBzZWxlY3QgJGNvbmZpZ1xuIjsNCiAgICAtfQ0KICAgIC0NCiAgICAtbXkg
JXByb2Nlc3Nfc2VsZWN0czsNCiAgICAtDQogICAgLSMgbG9vcCB0aHJvdWdoIGFsbCBjb25maWdz
LCBzZWxlY3QgdGhlaXIgZGVwZW5kZW5jaWVzLg0KICAgIC1zdWIgbG9vcF9kZXBlbmQgew0KICAg
IC0gICAgJHJlcGVhdCA9IDE7DQogICAgLQ0KICAgIC0gICAgd2hpbGUgKCRyZXBlYXQpIHsNCiAg
ICAtCSRyZXBlYXQgPSAwOw0KICAgIC0NCiAgICAtICAgICAgZm9ybG9vcDoNCiAgICAtCWZvcmVh
Y2ggbXkgJGNvbmZpZyAoa2V5cyAlY29uZmlncykgew0KICAgIC0NCiAgICAtCSAgICAjIElmIHRo
aXMgY29uZmlnIGlzIG5vdCBhIG1vZHVsZSwgd2UgZG8gbm90IG5lZWQgdG8gcHJvY2VzcyBpdA0K
ICAgIC0JICAgIGlmIChkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7JGNvbmZpZ30pICYmICRvcmlnX2Nv
bmZpZ3N7JGNvbmZpZ30gbmUgIm0iKSB7DQogICAgLQkJbmV4dCBmb3Jsb29wOw0KICAgIC0JICAg
IH0NCiAgICAtDQogICAgLQkgICAgJGNvbmZpZyA9fiBzL15DT05GSUdfLy87DQogICAgLQkgICAg
JGRlcGNvbmZpZyA9ICRjb25maWc7DQogICAgLQ0KICAgIC0JICAgIGlmIChkZWZpbmVkKCRkZXBl
bmRzeyRjb25maWd9KSkgew0KICAgIC0JCSMgVGhpcyBjb25maWcgaGFzIGRlcGVuZGVuY2llcy4g
TWFrZSBzdXJlIHRoZXkgYXJlIGFsc28gaW5jbHVkZWQNCiAgICAtCQlwYXJzZV9jb25maWdfZGVw
ZW5kcyAkZGVwZW5kc3skY29uZmlnfTsNCiAgICAtCSAgICB9DQogICAgLQ0KICAgIC0JICAgICMg
SWYgdGhlIGNvbmZpZyBoYXMgbm8gcHJvbXB0LCB0aGVuIHdlIG5lZWQgdG8gY2hlY2sgaWYgYSBj
b25maWcNCiAgICAtCSAgICAjIHRoYXQgaXMgZW5hYmxlZCBzZWxlY3RlZCBpdC4gT3IgaWYgd2Ug
bmVlZCB0byBlbmFibGUgb25lLg0KICAgIC0JICAgIGlmICghZGVmaW5lZCgkcHJvbXB0c3skY29u
ZmlnfSkgJiYgZGVmaW5lZCgkc2VsZWN0c3skY29uZmlnfSkpIHsNCiAgICAtCQkkcHJvY2Vzc19z
ZWxlY3RzeyRjb25maWd9ID0gMTsNCiAgICAtCSAgICB9DQogICAgLQl9DQogICAgLSAgICB9DQog
ICAgLX0NCiAgICAtDQogICAgLXN1YiBsb29wX3NlbGVjdCB7DQogICAgLQ0KICAgIC0gICAgZm9y
ZWFjaCBteSAkY29uZmlnIChrZXlzICVwcm9jZXNzX3NlbGVjdHMpIHsNCiAgICAtCSRjb25maWcg
PX4gcy9eQ09ORklHXy8vOw0KICAgIC0NCiAgICAtCWRwcmludCAiUHJvY2VzcyBzZWxlY3QgJGNv
bmZpZ1xuIjsNCiAgICAtDQogICAgLQkjIGNvbmZpZyBoYXMgbm8gcHJvbXB0IGFuZCBtdXN0IGJl
IHNlbGVjdGVkLg0KICAgIC0JcGFyc2VfY29uZmlnX3NlbGVjdHMgJGNvbmZpZywgJHNlbGVjdHN7
JGNvbmZpZ307DQogICAgLSAgICB9DQogICAgLX0NCiAgICAtDQogICAgLXdoaWxlICgkcmVwZWF0
KSB7DQogICAgLSAgICAjIEdldCB0aGUgZmlyc3Qgc2V0IG9mIGNvbmZpZ3MgYW5kIHRoZWlyIGRl
cGVuZGVuY2llcy4NCiAgICAtICAgIGxvb3BfZGVwZW5kOw0KICAgIC0NCiAgICAtICAgICRyZXBl
YXQgPSAwOw0KICAgIC0NCiAgICAtICAgICMgTm93IHdlIG5lZWQgdG8gc2VlIGlmIHdlIGhhdmUg
dG8gY2hlY2sgc2VsZWN0czsNCiAgICAtICAgIGxvb3Bfc2VsZWN0Ow0KICAgIC19CSAgICANCiAg
ICAtDQogICAgLW15ICVzZXRjb25maWdzOw0KICAgIC0NCiAgICAtIyBGaW5hbGx5LCByZWFkIHRo
ZSAuY29uZmlnIGZpbGUgYW5kIHR1cm4gb2ZmIGFueSBtb2R1bGUgZW5hYmxlZCB0aGF0DQogICAg
LSMgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb24gdG8ga2VlcCBlbmFibGVkLg0KICAgIC1mb3Jl
YWNoIG15ICRsaW5lIChAY29uZmlnX2ZpbGUpIHsNCiAgICAtICAgICRfID0gJGxpbmU7DQogICAg
LQ0KICAgIC0gICAgaWYgKC9DT05GSUdfSUtDT05GSUcvKSB7DQogICAgLQlpZiAoLyMgQ09ORklH
X0lLQ09ORklHIGlzIG5vdCBzZXQvKSB7DQogICAgLQkgICAgIyBlbmFibGUgSUtDT05GSUcgYXQg
bGVhc3QgYXMgYSBtb2R1bGUNCiAgICAtCSAgICBwcmludCAiQ09ORklHX0lLQ09ORklHPW1cbiI7
DQogICAgLQkgICAgIyBkb24ndCBhc2sgYWJvdXQgUFJPQw0KICAgIC0JICAgIHByaW50ICIjIENP
TkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXRcbiI7DQogICAgLQl9IGVsc2Ugew0KICAgIC0J
ICAgIHByaW50Ow0KICAgIC0JfQ0KICAgIC0JbmV4dDsNCiAgICAtICAgIH0NCiAgICAtDQogICAg
LSAgICBpZiAoL14oQ09ORklHLiopPShtfHkpLykgew0KICAgIC0JaWYgKGRlZmluZWQoJGNvbmZp
Z3N7JDF9KSkgew0KICAgIC0JICAgIGlmICgkbG9jYWx5ZXNjb25maWcpIHsNCiAgICAtCSAgICAg
ICAgJHNldGNvbmZpZ3N7JDF9ID0gJ3knOw0KICAgIC0JCXByaW50ICIkMT15XG4iOw0KICAgIC0J
CW5leHQ7DQogICAgLQkgICAgfSBlbHNlIHsNCiAgICAtCSAgICAgICAgJHNldGNvbmZpZ3N7JDF9
ID0gJDI7DQogICAgLQkgICAgfQ0KICAgIC0JfSBlbHNpZiAoJDIgZXEgIm0iKSB7DQogICAgLQkg
ICAgcHJpbnQgIiMgJDEgaXMgbm90IHNldFxuIjsNCiAgICAtCSAgICBuZXh0Ow0KICAgIC0JfQ0K
ICAgIC0gICAgfQ0KICAgIC0gICAgcHJpbnQ7DQogICAgLX0NCiAgICAtDQogICAgLSMgSW50ZWdy
aXR5IGNoZWNrLCBtYWtlIHN1cmUgYWxsIG1vZHVsZXMgdGhhdCB3ZSB3YW50IGVuYWJsZWQgZG8N
CiAgICAtIyBpbmRlZWQgaGF2ZSB0aGVpciBjb25maWdzIHNldC4NCiAgICAtbG9vcDoNCiAgICAt
Zm9yZWFjaCBteSAkbW9kdWxlIChrZXlzKCVtb2R1bGVzKSkgew0KICAgIC0gICAgaWYgKGRlZmlu
ZWQoJG9iamVjdHN7JG1vZHVsZX0pKSB7DQogICAgLQlteSBAYXJyID0gQHskb2JqZWN0c3skbW9k
dWxlfX07DQogICAgLQlmb3JlYWNoIG15ICRjb25mIChAYXJyKSB7DQogICAgLQkgICAgaWYgKGRl
ZmluZWQoJHNldGNvbmZpZ3N7JGNvbmZ9KSkgew0KICAgIC0JCW5leHQgbG9vcDsNCiAgICAtCSAg
ICB9DQogICAgLQl9DQogICAgLQlwcmludCBTVERFUlIgIm1vZHVsZSAkbW9kdWxlIGRpZCBub3Qg
aGF2ZSBjb25maWdzIjsNCiAgICAtCWZvcmVhY2ggbXkgJGNvbmYgKEBhcnIpIHsNCiAgICAtCSAg
ICBwcmludCBTVERFUlIgIiAiICwgJGNvbmY7DQogICAgLQl9DQogICAgLQlwcmludCBTVERFUlIg
IlxuIjsNCiAgICAtICAgIH0NCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcvc3ltYm9sLmMgYi9zdXBwb3J0L2tjb25maWcvc3ltYm9sLmMNCiAgICBkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCA3Y2FhYmRiLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9y
dC9rY29uZmlnL3N5bWJvbC5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDEzNzMgKzAs
MCBAQA0KICAgIC0vKg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6
aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdQTCB2Mi4wLg0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxjdHlw
ZS5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4N
CiAgICAtI2luY2x1ZGUgPHJlZ2V4Lmg+DQogICAgLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPg0K
ICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5oIg0KICAgIC0NCiAgICAtc3RydWN0IHN5bWJvbCBz
eW1ib2xfeWVzID0gew0KICAgIC0JLm5hbWUgPSAieSIsDQogICAgLQkuY3VyciA9IHsgInkiLCB5
ZXMgfSwNCiAgICAtCS5mbGFncyA9IFNZTUJPTF9DT05TVHxTWU1CT0xfVkFMSUQsDQogICAgLX0s
IHN5bWJvbF9tb2QgPSB7DQogICAgLQkubmFtZSA9ICJtIiwNCiAgICAtCS5jdXJyID0geyAibSIs
IG1vZCB9LA0KICAgIC0JLmZsYWdzID0gU1lNQk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwNCiAgICAt
fSwgc3ltYm9sX25vID0gew0KICAgIC0JLm5hbWUgPSAibiIsDQogICAgLQkuY3VyciA9IHsgIm4i
LCBubyB9LA0KICAgIC0JLmZsYWdzID0gU1lNQk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwNCiAgICAt
fSwgc3ltYm9sX2VtcHR5ID0gew0KICAgIC0JLm5hbWUgPSAiIiwNCiAgICAtCS5jdXJyID0geyAi
Iiwgbm8gfSwNCiAgICAtCS5mbGFncyA9IFNZTUJPTF9WQUxJRCwNCiAgICAtfTsNCiAgICAtDQog
ICAgLXN0cnVjdCBzeW1ib2wgKnN5bV9kZWZjb25maWdfbGlzdDsNCiAgICAtc3RydWN0IHN5bWJv
bCAqbW9kdWxlc19zeW07DQogICAgLXRyaXN0YXRlIG1vZHVsZXNfdmFsOw0KICAgIC0NCiAgICAt
c3RydWN0IGV4cHIgKnN5bV9lbnZfbGlzdDsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHN5bV9h
ZGRfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKmRlZikNCiAgICAtew0K
ICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wID0gcHJvcF9hbGxvYyhQX0RFRkFVTFQsIHN5bSk7
DQogICAgLQ0KICAgIC0JcHJvcC0+ZXhwciA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bV9sb29rdXAo
ZGVmLCBTWU1CT0xfQ09OU1QpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBzeW1faW5pdCh2
b2lkKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgdXRz
bmFtZSB1dHM7DQogICAgLQlzdGF0aWMgYm9vbCBpbml0ZWQgPSBmYWxzZTsNCiAgICAtDQogICAg
LQlpZiAoaW5pdGVkKQ0KICAgIC0JCXJldHVybjsNCiAgICAtCWluaXRlZCA9IHRydWU7DQogICAg
LQ0KICAgIC0JdW5hbWUoJnV0cyk7DQogICAgLQ0KICAgIC0Jc3ltID0gc3ltX2xvb2t1cCgiVU5B
TUVfUkVMRUFTRSIsIDApOw0KICAgIC0Jc3ltLT50eXBlID0gU19TVFJJTkc7DQogICAgLQlzeW0t
PmZsYWdzIHw9IFNZTUJPTF9BVVRPOw0KICAgIC0Jc3ltX2FkZF9kZWZhdWx0KHN5bSwgdXRzLnJl
bGVhc2UpOw0KICAgIC19DQogICAgLQ0KICAgIC1lbnVtIHN5bWJvbF90eXBlIHN5bV9nZXRfdHlw
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCWVudW0gc3ltYm9sX3R5cGUgdHlw
ZSA9IHN5bS0+dHlwZTsNCiAgICAtDQogICAgLQlpZiAodHlwZSA9PSBTX1RSSVNUQVRFKSB7DQog
ICAgLQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBzeW0tPnZpc2libGUgPT0geWVz
KQ0KICAgIC0JCQl0eXBlID0gU19CT09MRUFOOw0KICAgIC0JCWVsc2UgaWYgKG1vZHVsZXNfdmFs
ID09IG5vKQ0KICAgIC0JCQl0eXBlID0gU19CT09MRUFOOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJu
IHR5cGU7DQogICAgLX0NCiAgICAtDQogICAgLWNvbnN0IGNoYXIgKnN5bV90eXBlX25hbWUoZW51
bSBzeW1ib2xfdHlwZSB0eXBlKQ0KICAgIC17DQogICAgLQlzd2l0Y2ggKHR5cGUpIHsNCiAgICAt
CWNhc2UgU19CT09MRUFOOg0KICAgIC0JCXJldHVybiAiYm9vbGVhbiI7DQogICAgLQljYXNlIFNf
VFJJU1RBVEU6DQogICAgLQkJcmV0dXJuICJ0cmlzdGF0ZSI7DQogICAgLQljYXNlIFNfSU5UOg0K
ICAgIC0JCXJldHVybiAiaW50ZWdlciI7DQogICAgLQljYXNlIFNfSEVYOg0KICAgIC0JCXJldHVy
biAiaGV4IjsNCiAgICAtCWNhc2UgU19TVFJJTkc6DQogICAgLQkJcmV0dXJuICJzdHJpbmciOw0K
ICAgIC0JY2FzZSBTX1VOS05PV046DQogICAgLQkJcmV0dXJuICJ1bmtub3duIjsNCiAgICAtCWNh
c2UgU19PVEhFUjoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtCXJldHVybiAiPz8/IjsN
CiAgICAtfQ0KICAgIC0NCiAgICAtc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0X2Nob2ljZV9wcm9w
KHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9w
Ow0KICAgIC0NCiAgICAtCWZvcl9hbGxfY2hvaWNlcyhzeW0sIHByb3ApDQogICAgLQkJcmV0dXJu
IHByb3A7DQogICAgLQlyZXR1cm4gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RydWN0IHBy
b3BlcnR5ICpzeW1fZ2V0X2Vudl9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAg
IC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0NCiAgICAtCWZvcl9hbGxfcHJvcGVydGll
cyhzeW0sIHByb3AsIFBfRU5WKQ0KICAgIC0JCXJldHVybiBwcm9wOw0KICAgIC0JcmV0dXJuIE5V
TEw7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9kZWZhdWx0
X3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7DQogICAgLQ0KICAgIC0JZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHByb3ApIHsNCiAgICAt
CQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIp
Ow0KICAgIC0JCWlmIChwcm9wLT52aXNpYmxlLnRyaSAhPSBubykNCiAgICAtCQkJcmV0dXJuIHBy
b3A7DQogICAgLQl9DQogICAgLQlyZXR1cm4gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3Rh
dGljIHN0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5
bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0NCiAgICAtCWZv
cl9hbGxfcHJvcGVydGllcyhzeW0sIHByb3AsIFBfUkFOR0UpIHsNCiAgICAtCQlwcm9wLT52aXNp
YmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgIC0JCWlm
IChwcm9wLT52aXNpYmxlLnRyaSAhPSBubykNCiAgICAtCQkJcmV0dXJuIHByb3A7DQogICAgLQl9
DQogICAgLQlyZXR1cm4gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGxvbmcgbG9u
ZyBzeW1fZ2V0X3JhbmdlX3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBiYXNlKQ0KICAgIC17
DQogICAgLQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsN
CiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQkJYmFzZSA9IDEwOw0KICAgIC0JCWJyZWFrOw0KICAg
IC0JY2FzZSBTX0hFWDoNCiAgICAtCQliYXNlID0gMTY7DQogICAgLQkJYnJlYWs7DQogICAgLQlk
ZWZhdWx0Og0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIHN0cnRvbGwoc3lt
LT5jdXJyLnZhbCwgTlVMTCwgYmFzZSk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lk
IHN5bV92YWxpZGF0ZV9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0
cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCWludCBiYXNlOw0KICAgIC0JbG9uZyBsb25nIHZh
bCwgdmFsMjsNCiAgICAtCWNoYXIgc3RyWzY0XTsNCiAgICAtDQogICAgLQlzd2l0Y2ggKHN5bS0+
dHlwZSkgew0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCQliYXNlID0gMTA7DQogICAgLQkJYnJl
YWs7DQogICAgLQljYXNlIFNfSEVYOg0KICAgIC0JCWJhc2UgPSAxNjsNCiAgICAtCQlicmVhazsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0JcHJvcCA9IHN5
bV9nZXRfcmFuZ2VfcHJvcChzeW0pOw0KICAgIC0JaWYgKCFwcm9wKQ0KICAgIC0JCXJldHVybjsN
CiAgICAtCXZhbCA9IHN0cnRvbGwoc3ltLT5jdXJyLnZhbCwgTlVMTCwgYmFzZSk7DQogICAgLQl2
YWwyID0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIGJhc2UpOw0KICAg
IC0JaWYgKHZhbCA+PSB2YWwyKSB7DQogICAgLQkJdmFsMiA9IHN5bV9nZXRfcmFuZ2VfdmFsKHBy
b3AtPmV4cHItPnJpZ2h0LnN5bSwgYmFzZSk7DQogICAgLQkJaWYgKHZhbCA8PSB2YWwyKQ0KICAg
IC0JCQlyZXR1cm47DQogICAgLQl9DQogICAgLQlpZiAoc3ltLT50eXBlID09IFNfSU5UKQ0KICAg
IC0JCXNwcmludGYoc3RyLCAiJWxsZCIsIHZhbDIpOw0KICAgIC0JZWxzZQ0KICAgIC0JCXNwcmlu
dGYoc3RyLCAiMHglbGx4IiwgdmFsMik7DQogICAgLQlzeW0tPmN1cnIudmFsID0gc3RyZHVwKHN0
cik7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHN5bV9jYWxjX3Zpc2liaWxpdHko
c3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7
DQogICAgLQl0cmlzdGF0ZSB0cmk7DQogICAgLQ0KICAgIC0JLyogYW55IHByb21wdCB2aXNpYmxl
PyAqLw0KICAgIC0JdHJpID0gbm87DQogICAgLQlmb3JfYWxsX3Byb21wdHMoc3ltLCBwcm9wKSB7
DQogICAgLQkJcHJvcC0+dmlzaWJsZS50cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJs
ZS5leHByKTsNCiAgICAtCQl0cmkgPSBFWFBSX09SKHRyaSwgcHJvcC0+dmlzaWJsZS50cmkpOw0K
ICAgIC0JfQ0KICAgIC0JaWYgKHRyaSA9PSBtb2QgJiYgKHN5bS0+dHlwZSAhPSBTX1RSSVNUQVRF
IHx8IG1vZHVsZXNfdmFsID09IG5vKSkNCiAgICAtCQl0cmkgPSB5ZXM7DQogICAgLQlpZiAoc3lt
LT52aXNpYmxlICE9IHRyaSkgew0KICAgIC0JCXN5bS0+dmlzaWJsZSA9IHRyaTsNCiAgICAtCQlz
eW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICAtCX0NCiAgICAtCWlmIChzeW1faXNfY2hvaWNlX3Zh
bHVlKHN5bSkpDQogICAgLQkJcmV0dXJuOw0KICAgIC0JLyogZGVmYXVsdGluZyB0byAieWVzIiBp
ZiBubyBleHBsaWNpdCAiZGVwZW5kcyBvbiIgYXJlIGdpdmVuICovDQogICAgLQl0cmkgPSB5ZXM7
DQogICAgLQlpZiAoc3ltLT5kaXJfZGVwLmV4cHIpDQogICAgLQkJdHJpID0gZXhwcl9jYWxjX3Zh
bHVlKHN5bS0+ZGlyX2RlcC5leHByKTsNCiAgICAtCWlmICh0cmkgPT0gbW9kKQ0KICAgIC0JCXRy
aSA9IHllczsNCiAgICAtCWlmIChzeW0tPmRpcl9kZXAudHJpICE9IHRyaSkgew0KICAgIC0JCXN5
bS0+ZGlyX2RlcC50cmkgPSB0cmk7DQogICAgLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAg
LQl9DQogICAgLQl0cmkgPSBubzsNCiAgICAtCWlmIChzeW0tPnJldl9kZXAuZXhwcikNCiAgICAt
CQl0cmkgPSBleHByX2NhbGNfdmFsdWUoc3ltLT5yZXZfZGVwLmV4cHIpOw0KICAgIC0JaWYgKHRy
aSA9PSBtb2QgJiYgc3ltX2dldF90eXBlKHN5bSkgPT0gU19CT09MRUFOKQ0KICAgIC0JCXRyaSA9
IHllczsNCiAgICAtCWlmIChzeW0tPnJldl9kZXAudHJpICE9IHRyaSkgew0KICAgIC0JCXN5bS0+
cmV2X2RlcC50cmkgPSB0cmk7DQogICAgLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAgLQl9
DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIEZpbmQgdGhlIGRlZmF1bHQgc3ltYm9s
IGZvciBhIGNob2ljZS4NCiAgICAtICogRmlyc3QgdHJ5IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Ig
dGhlIGNob2ljZSBzeW1ib2wNCiAgICAtICogTmV4dCBsb2NhdGUgdGhlIGZpcnN0IHZpc2libGUg
Y2hvaWNlIHZhbHVlDQogICAgLSAqIFJldHVybiBOVUxMIGlmIG5vbmUgd2FzIGZvdW5kDQogICAg
LSAqLw0KICAgIC1zdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3RydWN0IHN5bWJv
bCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltOw0KICAgIC0Jc3Ry
dWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3RydWN0IGV4cHIgKmU7DQogICAgLQ0KICAgIC0J
LyogYW55IG9mIHRoZSBkZWZhdWx0cyB2aXNpYmxlPyAqLw0KICAgIC0JZm9yX2FsbF9kZWZhdWx0
cyhzeW0sIHByb3ApIHsNCiAgICAtCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1
ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgIC0JCWlmIChwcm9wLT52aXNpYmxlLnRyaSA9PSBu
bykNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJZGVmX3N5bSA9IHByb3BfZ2V0X3N5bWJvbChw
cm9wKTsNCiAgICAtCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykNCiAgICAtCQkJcmV0dXJu
IGRlZl9zeW07DQogICAgLQl9DQogICAgLQ0KICAgIC0JLyoganVzdCBnZXQgdGhlIGZpcnN0IHZp
c2libGUgdmFsdWUgKi8NCiAgICAtCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7DQog
ICAgLQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIGRlZl9zeW0pDQogICAg
LQkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8pDQogICAgLQkJCXJldHVybiBkZWZfc3ltOw0K
ICAgIC0NCiAgICAtCS8qIGZhaWxlZCB0byBsb2NhdGUgYW55IGRlZmF1bHRzICovDQogICAgLQly
ZXR1cm4gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5
bV9jYWxjX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0cnVjdCBz
eW1ib2wgKmRlZl9zeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1
Y3QgZXhwciAqZTsNCiAgICAtCWludCBmbGFnczsNCiAgICAtDQogICAgLQkvKiBmaXJzdCBjYWxj
dWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGllcyAqLw0KICAgIC0JZmxhZ3MgPSBz
eW0tPmZsYWdzOw0KICAgIC0JcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsNCiAgICAt
CWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkgew0KICAgIC0J
CXN5bV9jYWxjX3Zpc2liaWxpdHkoZGVmX3N5bSk7DQogICAgLQkJaWYgKGRlZl9zeW0tPnZpc2li
bGUgIT0gbm8pDQogICAgLQkJCWZsYWdzICY9IGRlZl9zeW0tPmZsYWdzOw0KICAgIC0JfQ0KICAg
IC0NCiAgICAtCXN5bS0+ZmxhZ3MgJj0gZmxhZ3MgfCB+U1lNQk9MX0RFRl9VU0VSOw0KICAgIC0N
CiAgICAtCS8qIGlzIHRoZSB1c2VyIGNob2ljZSB2aXNpYmxlPyAqLw0KICAgIC0JZGVmX3N5bSA9
IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsNCiAgICAtCWlmIChkZWZfc3ltICYmIGRlZl9zeW0t
PnZpc2libGUgIT0gbm8pDQogICAgLQkJcmV0dXJuIGRlZl9zeW07DQogICAgLQ0KICAgIC0JZGVm
X3N5bSA9IHN5bV9jaG9pY2VfZGVmYXVsdChzeW0pOw0KICAgIC0NCiAgICAtCWlmIChkZWZfc3lt
ID09IE5VTEwpDQogICAgLQkJLyogbm8gY2hvaWNlPyByZXNldCB0cmlzdGF0ZSB2YWx1ZSAqLw0K
ICAgIC0JCXN5bS0+Y3Vyci50cmkgPSBubzsNCiAgICAtDQogICAgLQlyZXR1cm4gZGVmX3N5bTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBzeW1fY2FsY192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpz
eW0pDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2xfdmFsdWUgbmV3dmFsLCBvbGR2YWw7DQog
ICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1Y3QgZXhwciAqZTsNCiAgICAt
DQogICAgLQlpZiAoIXN5bSkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0JaWYgKHN5bS0+
ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCWlmIChz
eW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYNCiAgICAtCSAgICBzeW0tPmZsYWdzICYgU1lNQk9M
X05FRURfU0VUX0NIT0lDRV9WQUxVRVMpIHsNCiAgICAtCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xf
TkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUzsNCiAgICAtCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJv
cChzeW0pOw0KICAgIC0JCXN5bV9jYWxjX3ZhbHVlKHByb3BfZ2V0X3N5bWJvbChwcm9wKSk7DQog
ICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltLT5mbGFncyB8PSBTWU1CT0xfVkFMSUQ7DQogICAgLQ0K
ICAgIC0Jb2xkdmFsID0gc3ltLT5jdXJyOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoc3ltLT50eXBl
KSB7DQogICAgLQljYXNlIFNfSU5UOg0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAtCWNhc2UgU19T
VFJJTkc6DQogICAgLQkJbmV3dmFsID0gc3ltYm9sX2VtcHR5LmN1cnI7DQogICAgLQkJYnJlYWs7
DQogICAgLQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCWNhc2UgU19UUklTVEFURToNCiAgICAtCQlu
ZXd2YWwgPSBzeW1ib2xfbm8uY3VycjsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQog
ICAgLQkJc3ltLT5jdXJyLnZhbCA9IHN5bS0+bmFtZTsNCiAgICAtCQlzeW0tPmN1cnIudHJpID0g
bm87DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0JaWYgKCFzeW1faXNfY2hvaWNlX3Zh
bHVlKHN5bSkpDQogICAgLQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRFOw0KICAgIC0NCiAg
ICAtCXN5bV9jYWxjX3Zpc2liaWxpdHkoc3ltKTsNCiAgICAtDQogICAgLQkvKiBzZXQgZGVmYXVs
dCBpZiByZWN1cnNpdmVseSBjYWxsZWQgKi8NCiAgICAtCXN5bS0+Y3VyciA9IG5ld3ZhbDsNCiAg
ICAtDQogICAgLQlzd2l0Y2ggKHN5bV9nZXRfdHlwZShzeW0pKSB7DQogICAgLQljYXNlIFNfQk9P
TEVBTjoNCiAgICAtCWNhc2UgU19UUklTVEFURToNCiAgICAtCQlpZiAoc3ltX2lzX2Nob2ljZV92
YWx1ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpIHsNCiAgICAtCQkJcHJvcCA9IHN5bV9n
ZXRfY2hvaWNlX3Byb3Aoc3ltKTsNCiAgICAtCQkJbmV3dmFsLnRyaSA9IChwcm9wX2dldF9zeW1i
b2wocHJvcCktPmN1cnIudmFsID09IHN5bSkgPyB5ZXMgOiBubzsNCiAgICAtCQl9IGVsc2Ugew0K
ICAgIC0JCQlpZiAoc3ltLT52aXNpYmxlICE9IG5vKSB7DQogICAgLQkJCQkvKiBpZiB0aGUgc3lt
Ym9sIGlzIHZpc2libGUgdXNlIHRoZSB1c2VyIHZhbHVlDQogICAgLQkJCQkgKiBpZiBhdmFpbGFi
bGUsIG90aGVyd2lzZSB0cnkgdGhlIGRlZmF1bHQgdmFsdWUNCiAgICAtCQkJCSAqLw0KICAgIC0J
CQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7DQogICAgLQkJCQlpZiAoc3ltX2hhc192YWx1
ZShzeW0pKSB7DQogICAgLQkJCQkJbmV3dmFsLnRyaSA9IEVYUFJfQU5EKHN5bS0+ZGVmW1NfREVG
X1VTRVJdLnRyaSwNCiAgICAtCQkJCQkJCSAgICAgIHN5bS0+dmlzaWJsZSk7DQogICAgLQkJCQkJ
Z290byBjYWxjX25ld3ZhbDsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCQlpZiAoc3lt
LT5yZXZfZGVwLnRyaSAhPSBubykNCiAgICAtCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRF
Ow0KICAgIC0JCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgIC0JCQkJcHJvcCA9IHN5
bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7DQogICAgLQkJCQlpZiAocHJvcCkgew0KICAgIC0JCQkJ
CXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOw0KICAgIC0JCQkJCW5ld3ZhbC50cmkgPSBFWFBS
X0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwciksDQogICAgLQkJCQkJCQkgICAgICBwcm9w
LT52aXNpYmxlLnRyaSk7DQogICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtCQljYWxjX25ld3Zh
bDoNCiAgICAtCQkJaWYgKHN5bS0+ZGlyX2RlcC50cmkgPT0gbm8gJiYgc3ltLT5yZXZfZGVwLnRy
aSAhPSBubykgew0KICAgIC0JCQkJc3RydWN0IGV4cHIgKmU7DQogICAgLQkJCQllID0gZXhwcl9z
aW1wbGlmeV91bm1ldF9kZXAoc3ltLT5yZXZfZGVwLmV4cHIsDQogICAgLQkJCQkgICAgc3ltLT5k
aXJfZGVwLmV4cHIpOw0KICAgIC0JCQkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiAoIik7DQog
ICAgLQkJCQlleHByX2ZwcmludChlLCBzdGRlcnIpOw0KICAgIC0JCQkJZnByaW50ZihzdGRlcnIs
ICIpIHNlbGVjdHMgJXMgd2hpY2ggaGFzIHVubWV0IGRpcmVjdCBkZXBlbmRlbmNpZXMgKCIsDQog
ICAgLQkJCQkJc3ltLT5uYW1lKTsNCiAgICAtCQkJCWV4cHJfZnByaW50KHN5bS0+ZGlyX2RlcC5l
eHByLCBzdGRlcnIpOw0KICAgIC0JCQkJZnByaW50ZihzdGRlcnIsICIpXG4iKTsNCiAgICAtCQkJ
CWV4cHJfZnJlZShlKTsNCiAgICAtCQkJfQ0KICAgIC0JCQluZXd2YWwudHJpID0gRVhQUl9PUihu
ZXd2YWwudHJpLCBzeW0tPnJldl9kZXAudHJpKTsNCiAgICAtCQl9DQogICAgLQkJaWYgKG5ld3Zh
bC50cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikNCiAgICAtCQkJ
bmV3dmFsLnRyaSA9IHllczsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgU19TVFJJTkc6DQog
ICAgLQljYXNlIFNfSEVYOg0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCQlpZiAoc3ltLT52aXNp
YmxlICE9IG5vKSB7DQogICAgLQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOw0KICAgIC0J
CQlpZiAoc3ltX2hhc192YWx1ZShzeW0pKSB7DQogICAgLQkJCQluZXd2YWwudmFsID0gc3ltLT5k
ZWZbU19ERUZfVVNFUl0udmFsOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQl9
DQogICAgLQkJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7DQogICAgLQkJaWYgKHBy
b3ApIHsNCiAgICAtCQkJc3RydWN0IHN5bWJvbCAqZHMgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7
DQogICAgLQkJCWlmIChkcykgew0KICAgIC0JCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7
DQogICAgLQkJCQlzeW1fY2FsY192YWx1ZShkcyk7DQogICAgLQkJCQluZXd2YWwudmFsID0gZHMt
PmN1cnIudmFsOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVm
YXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltLT5jdXJyID0gbmV3dmFs
Ow0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBuZXd2YWwudHJpID09IHllcykNCiAg
ICAtCQlzeW0tPmN1cnIudmFsID0gc3ltX2NhbGNfY2hvaWNlKHN5bSk7DQogICAgLQlzeW1fdmFs
aWRhdGVfcmFuZ2Uoc3ltKTsNCiAgICAtDQogICAgLQlpZiAobWVtY21wKCZvbGR2YWwsICZzeW0t
PmN1cnIsIHNpemVvZihvbGR2YWwpKSkgew0KICAgIC0JCXN5bV9zZXRfY2hhbmdlZChzeW0pOw0K
ICAgIC0JCWlmIChtb2R1bGVzX3N5bSA9PSBzeW0pIHsNCiAgICAtCQkJc3ltX3NldF9hbGxfY2hh
bmdlZCgpOw0KICAgIC0JCQltb2R1bGVzX3ZhbCA9IG1vZHVsZXNfc3ltLT5jdXJyLnRyaTsNCiAg
ICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0K
ICAgIC0JCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW07DQogICAgLQ0KICAgIC0JCXByb3AgPSBz
eW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7DQogICAgLQkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShw
cm9wLT5leHByLCBlLCBjaG9pY2Vfc3ltKSB7DQogICAgLQkJCWlmICgoc3ltLT5mbGFncyAmIFNZ
TUJPTF9XUklURSkgJiYNCiAgICAtCQkJICAgIGNob2ljZV9zeW0tPnZpc2libGUgIT0gbm8pDQog
ICAgLQkJCQljaG9pY2Vfc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7DQogICAgLQkJCWlmIChz
eW0tPmZsYWdzICYgU1lNQk9MX0NIQU5HRUQpDQogICAgLQkJCQlzeW1fc2V0X2NoYW5nZWQoY2hv
aWNlX3N5bSk7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX0FVVE8pDQogICAgLQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRFOw0KICAg
IC0NCiAgICAtCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMp
DQogICAgLQkJc2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN5bSk7DQogICAgLX0NCiAgICAtDQogICAg
LXZvaWQgc3ltX2NsZWFyX2FsbF92YWxpZCh2b2lkKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3lt
Ym9sICpzeW07DQogICAgLQlpbnQgaTsNCiAgICAtDQogICAgLQlmb3JfYWxsX3N5bWJvbHMoaSwg
c3ltKQ0KICAgIC0JCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsNCiAgICAtCXN5bV9hZGRf
Y2hhbmdlX2NvdW50KDEpOw0KICAgIC0JaWYgKG1vZHVsZXNfc3ltKQ0KICAgIC0JCXN5bV9jYWxj
X3ZhbHVlKG1vZHVsZXNfc3ltKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBzeW1fc2V0X2No
YW5nZWQoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7DQogICAgLQ0KICAgIC0Jc3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hBTkdFRDsNCiAgICAt
CWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsNCiAgICAt
CQlpZiAocHJvcC0+bWVudSkNCiAgICAtCQkJcHJvcC0+bWVudS0+ZmxhZ3MgfD0gTUVOVV9DSEFO
R0VEOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHN5bV9zZXRfYWxsX2NoYW5n
ZWQodm9pZCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0JaW50IGk7
DQogICAgLQ0KICAgIC0JZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkNCiAgICAtCQlzeW1fc2V0X2No
YW5nZWQoc3ltKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBzeW1fdHJpc3RhdGVfd2l0aGlu
X3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSwgdHJpc3RhdGUgdmFsKQ0KICAgIC17DQogICAgLQlp
bnQgdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgIC0NCiAgICAtCWlmIChzeW0tPnZpc2li
bGUgPT0gbm8pDQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0NCiAgICAtCWlmICh0eXBlICE9
IFNfQk9PTEVBTiAmJiB0eXBlICE9IFNfVFJJU1RBVEUpDQogICAgLQkJcmV0dXJuIGZhbHNlOw0K
ICAgIC0NCiAgICAtCWlmICh0eXBlID09IFNfQk9PTEVBTiAmJiB2YWwgPT0gbW9kKQ0KICAgIC0J
CXJldHVybiBmYWxzZTsNCiAgICAtCWlmIChzeW0tPnZpc2libGUgPD0gc3ltLT5yZXZfZGVwLnRy
aSkNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShz
eW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpDQogICAgLQkJcmV0dXJuIHZhbCA9PSB5ZXM7DQog
ICAgLQlyZXR1cm4gdmFsID49IHN5bS0+cmV2X2RlcC50cmkgJiYgdmFsIDw9IHN5bS0+dmlzaWJs
ZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVj
dCBzeW1ib2wgKnN5bSwgdHJpc3RhdGUgdmFsKQ0KICAgIC17DQogICAgLQl0cmlzdGF0ZSBvbGR2
YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQ0KICAgIC0JaWYgKG9sZHZh
bCAhPSB2YWwgJiYgIXN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB2YWwpKQ0KICAgIC0J
CXJldHVybiBmYWxzZTsNCiAgICAtDQogICAgLQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0RF
Rl9VU0VSKSkgew0KICAgIC0JCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgIC0J
CXN5bV9zZXRfY2hhbmdlZChzeW0pOw0KICAgIC0JfQ0KICAgIC0JLyoNCiAgICAtCSAqIHNldHRp
bmcgYSBjaG9pY2UgdmFsdWUgYWxzbyByZXNldHMgdGhlIG5ldyBmbGFnIG9mIHRoZSBjaG9pY2UN
CiAgICAtCSAqIHN5bWJvbCBhbmQgYWxsIG90aGVyIGNob2ljZSB2YWx1ZXMuDQogICAgLQkgKi8N
CiAgICAtCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgew0KICAg
IC0JCXN0cnVjdCBzeW1ib2wgKmNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3By
b3Aoc3ltKSk7DQogICAgLQkJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0JCXN0cnVjdCBl
eHByICplOw0KICAgIC0NCiAgICAtCQljcy0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsNCiAg
ICAtCQljcy0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgIC0JCXByb3AgPSBzeW1fZ2V0
X2Nob2ljZV9wcm9wKGNzKTsNCiAgICAtCQlmb3IgKGUgPSBwcm9wLT5leHByOyBlOyBlID0gZS0+
bGVmdC5leHByKSB7DQogICAgLQkJCWlmIChlLT5yaWdodC5zeW0tPnZpc2libGUgIT0gbm8pDQog
ICAgLQkJCQllLT5yaWdodC5zeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsNCiAgICAtCQl9
DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gdmFsOw0K
ICAgIC0JaWYgKG9sZHZhbCAhPSB2YWwpDQogICAgLQkJc3ltX2NsZWFyX2FsbF92YWxpZCgpOw0K
ICAgIC0NCiAgICAtCXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC10cmlzdGF0ZSBz
eW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAg
IC0JdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7DQogICAgLQ0KICAgIC0Jb2xkdmFsID0gbmV3dmFs
ID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0JZG8gew0KICAgIC0JCXN3aXRj
aCAobmV3dmFsKSB7DQogICAgLQkJY2FzZSBubzoNCiAgICAtCQkJbmV3dmFsID0gbW9kOw0KICAg
IC0JCQlicmVhazsNCiAgICAtCQljYXNlIG1vZDoNCiAgICAtCQkJbmV3dmFsID0geWVzOw0KICAg
IC0JCQlicmVhazsNCiAgICAtCQljYXNlIHllczoNCiAgICAtCQkJbmV3dmFsID0gbm87DQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShz
eW0sIG5ld3ZhbCkpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JfSB3aGlsZSAob2xkdmFsICE9IG5l
d3ZhbCk7DQogICAgLQlyZXR1cm4gbmV3dmFsOw0KICAgIC19DQogICAgLQ0KICAgIC1ib29sIHN5
bV9zdHJpbmdfdmFsaWQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpDQogICAg
LXsNCiAgICAtCXNpZ25lZCBjaGFyIGNoOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoc3ltLT50eXBl
KSB7DQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCXJldHVybiB0cnVlOw0KICAgIC0JY2Fz
ZSBTX0lOVDoNCiAgICAtCQljaCA9ICpzdHIrKzsNCiAgICAtCQlpZiAoY2ggPT0gJy0nKQ0KICAg
IC0JCQljaCA9ICpzdHIrKzsNCiAgICAtCQlpZiAoIWlzZGlnaXQoY2gpKQ0KICAgIC0JCQlyZXR1
cm4gZmFsc2U7DQogICAgLQkJaWYgKGNoID09ICcwJyAmJiAqc3RyICE9IDApDQogICAgLQkJCXJl
dHVybiBmYWxzZTsNCiAgICAtCQl3aGlsZSAoKGNoID0gKnN0cisrKSkgew0KICAgIC0JCQlpZiAo
IWlzZGlnaXQoY2gpKQ0KICAgIC0JCQkJcmV0dXJuIGZhbHNlOw0KICAgIC0JCX0NCiAgICAtCQly
ZXR1cm4gdHJ1ZTsNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQkJaWYgKHN0clswXSA9PSAnMCcg
JiYgKHN0clsxXSA9PSAneCcgfHwgc3RyWzFdID09ICdYJykpDQogICAgLQkJCXN0ciArPSAyOw0K
ICAgIC0JCWNoID0gKnN0cisrOw0KICAgIC0JCWRvIHsNCiAgICAtCQkJaWYgKCFpc3hkaWdpdChj
aCkpDQogICAgLQkJCQlyZXR1cm4gZmFsc2U7DQogICAgLQkJfSB3aGlsZSAoKGNoID0gKnN0cisr
KSk7DQogICAgLQkJcmV0dXJuIHRydWU7DQogICAgLQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCWNh
c2UgU19UUklTVEFURToNCiAgICAtCQlzd2l0Y2ggKHN0clswXSkgew0KICAgIC0JCWNhc2UgJ3kn
OiBjYXNlICdZJzoNCiAgICAtCQljYXNlICdtJzogY2FzZSAnTSc6DQogICAgLQkJY2FzZSAnbic6
IGNhc2UgJ04nOg0KICAgIC0JCQlyZXR1cm4gdHJ1ZTsNCiAgICAtCQl9DQogICAgLQkJcmV0dXJu
IGZhbHNlOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQl9DQog
ICAgLX0NCiAgICAtDQogICAgLWJvb2wgc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3RydWN0IHN5
bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpDQogICAgLXsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0
eSAqcHJvcDsNCiAgICAtCWxvbmcgbG9uZyB2YWw7DQogICAgLQ0KICAgIC0Jc3dpdGNoIChzeW0t
PnR5cGUpIHsNCiAgICAtCWNhc2UgU19TVFJJTkc6DQogICAgLQkJcmV0dXJuIHN5bV9zdHJpbmdf
dmFsaWQoc3ltLCBzdHIpOw0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCQlpZiAoIXN5bV9zdHJp
bmdfdmFsaWQoc3ltLCBzdHIpKQ0KICAgIC0JCQlyZXR1cm4gZmFsc2U7DQogICAgLQkJcHJvcCA9
IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOw0KICAgIC0JCWlmICghcHJvcCkNCiAgICAtCQkJcmV0
dXJuIHRydWU7DQogICAgLQkJdmFsID0gc3RydG9sbChzdHIsIE5VTEwsIDEwKTsNCiAgICAtCQly
ZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxMCkg
JiYNCiAgICAtCQkgICAgICAgdmFsIDw9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJp
Z2h0LnN5bSwgMTApOw0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAtCQlpZiAoIXN5bV9zdHJpbmdf
dmFsaWQoc3ltLCBzdHIpKQ0KICAgIC0JCQlyZXR1cm4gZmFsc2U7DQogICAgLQkJcHJvcCA9IHN5
bV9nZXRfcmFuZ2VfcHJvcChzeW0pOw0KICAgIC0JCWlmICghcHJvcCkNCiAgICAtCQkJcmV0dXJu
IHRydWU7DQogICAgLQkJdmFsID0gc3RydG9sbChzdHIsIE5VTEwsIDE2KTsNCiAgICAtCQlyZXR1
cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxNikgJiYN
CiAgICAtCQkgICAgICAgdmFsIDw9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJpZ2h0
LnN5bSwgMTYpOw0KICAgIC0JY2FzZSBTX0JPT0xFQU46DQogICAgLQljYXNlIFNfVFJJU1RBVEU6
DQogICAgLQkJc3dpdGNoIChzdHJbMF0pIHsNCiAgICAtCQljYXNlICd5JzogY2FzZSAnWSc6DQog
ICAgLQkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKTsNCiAgICAt
CQljYXNlICdtJzogY2FzZSAnTSc6DQogICAgLQkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGlu
X3JhbmdlKHN5bSwgbW9kKTsNCiAgICAtCQljYXNlICduJzogY2FzZSAnTic6DQogICAgLQkJCXJl
dHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbm8pOw0KICAgIC0JCX0NCiAgICAt
CQlyZXR1cm4gZmFsc2U7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCXJldHVybiBmYWxzZTsNCiAg
ICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShzdHJ1
Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCkNCiAgICAtew0KICAgIC0JY29uc3Qg
Y2hhciAqb2xkdmFsOw0KICAgIC0JY2hhciAqdmFsOw0KICAgIC0JaW50IHNpemU7DQogICAgLQ0K
ICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0J
Y2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCXN3aXRjaCAobmV3dmFsWzBdKSB7DQogICAgLQkJY2Fz
ZSAneSc6IGNhc2UgJ1knOg0KICAgIC0JCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShz
eW0sIHllcyk7DQogICAgLQkJY2FzZSAnbSc6IGNhc2UgJ00nOg0KICAgIC0JCQlyZXR1cm4gc3lt
X3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCk7DQogICAgLQkJY2FzZSAnbic6IGNhc2UgJ04n
Og0KICAgIC0JCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsNCiAgICAt
CQl9DQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQk7DQogICAg
LQl9DQogICAgLQ0KICAgIC0JaWYgKCFzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzeW0sIG5ld3Zh
bCkpDQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0NCiAgICAtCWlmICghKHN5bS0+ZmxhZ3Mg
JiBTWU1CT0xfREVGX1VTRVIpKSB7DQogICAgLQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VT
RVI7DQogICAgLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAgLQl9DQogICAgLQ0KICAgIC0J
b2xkdmFsID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOw0KICAgIC0Jc2l6ZSA9IHN0cmxlbihu
ZXd2YWwpICsgMTsNCiAgICAtCWlmIChzeW0tPnR5cGUgPT0gU19IRVggJiYgKG5ld3ZhbFswXSAh
PSAnMCcgfHwgKG5ld3ZhbFsxXSAhPSAneCcgJiYgbmV3dmFsWzFdICE9ICdYJykpKSB7DQogICAg
LQkJc2l6ZSArPSAyOw0KICAgIC0JCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHZhbCA9IHht
YWxsb2Moc2l6ZSk7DQogICAgLQkJKnZhbCsrID0gJzAnOw0KICAgIC0JCSp2YWwrKyA9ICd4JzsN
CiAgICAtCX0gZWxzZSBpZiAoIW9sZHZhbCB8fCBzdHJjbXAob2xkdmFsLCBuZXd2YWwpKQ0KICAg
IC0JCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHZhbCA9IHhtYWxsb2Moc2l6ZSk7DQogICAg
LQllbHNlDQogICAgLQkJcmV0dXJuIHRydWU7DQogICAgLQ0KICAgIC0Jc3RyY3B5KHZhbCwgbmV3
dmFsKTsNCiAgICAtCWZyZWUoKHZvaWQgKilvbGR2YWwpOw0KICAgIC0Jc3ltX2NsZWFyX2FsbF92
YWxpZCgpOw0KICAgIC0NCiAgICAtCXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC0v
Kg0KICAgIC0gKiBGaW5kIHRoZSBkZWZhdWx0IHZhbHVlIGFzc29jaWF0ZWQgdG8gYSBzeW1ib2wu
DQogICAgLSAqIEZvciB0cmlzdGF0ZSBzeW1ib2wgaGFuZGxlIHRoZSBtb2R1bGVzPW4gY2FzZQ0K
ICAgIC0gKiBpbiB3aGljaCBjYXNlICJtIiBiZWNvbWVzICJ5Ii4NCiAgICAtICogSWYgdGhlIHN5
bWJvbCBkb2VzIG5vdCBoYXZlIGFueSBkZWZhdWx0IHRoZW4gZmFsbGJhY2sNCiAgICAtICogdG8g
dGhlIGZpeGVkIGRlZmF1bHQgdmFsdWVzLg0KICAgIC0gKi8NCiAgICAtY29uc3QgY2hhciAqc3lt
X2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0
cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKmRzOw0KICAgIC0JY29u
c3QgY2hhciAqc3RyOw0KICAgIC0JdHJpc3RhdGUgdmFsOw0KICAgIC0NCiAgICAtCXN5bV9jYWxj
X3Zpc2liaWxpdHkoc3ltKTsNCiAgICAtCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsNCiAg
ICAtCXZhbCA9IHN5bWJvbF9uby5jdXJyLnRyaTsNCiAgICAtCXN0ciA9IHN5bWJvbF9lbXB0eS5j
dXJyLnZhbDsNCiAgICAtDQogICAgLQkvKiBJZiBzeW1ib2wgaGFzIGEgZGVmYXVsdCB2YWx1ZSBs
b29rIGl0IHVwICovDQogICAgLQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsNCiAg
ICAtCWlmIChwcm9wICE9IE5VTEwpIHsNCiAgICAtCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAg
IC0JCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCWNhc2UgU19UUklTVEFURToNCiAgICAtCQkJLyog
VGhlIHZpc2liaWxpdHkgbWF5IGxpbWl0IHRoZSB2YWx1ZSBmcm9tIHllcyA9PiBtb2QgKi8NCiAg
ICAtCQkJdmFsID0gRVhQUl9BTkQoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLCBwcm9wLT52
aXNpYmxlLnRyaSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCS8q
DQogICAgLQkJCSAqIFRoZSBmb2xsb3dpbmcgZmFpbHMgdG8gaGFuZGxlIHRoZSBzaXR1YXRpb24N
CiAgICAtCQkJICogd2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGZ1cnRoZXIgbGltaXRlZCBieQ0K
ICAgIC0JCQkgKiB0aGUgdmFsaWQgcmFuZ2UuDQogICAgLQkJCSAqLw0KICAgIC0JCQlkcyA9IHBy
b3BfZ2V0X3N5bWJvbChwcm9wKTsNCiAgICAtCQkJaWYgKGRzICE9IE5VTEwpIHsNCiAgICAtCQkJ
CXN5bV9jYWxjX3ZhbHVlKGRzKTsNCiAgICAtCQkJCXN0ciA9IChjb25zdCBjaGFyICopZHMtPmN1
cnIudmFsOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCS8qIEhh
bmRsZSBzZWxlY3Qgc3RhdGVtZW50cyAqLw0KICAgIC0JdmFsID0gRVhQUl9PUih2YWwsIHN5bS0+
cmV2X2RlcC50cmkpOw0KICAgIC0NCiAgICAtCS8qIHRyYW5zcG9zZSBtb2QgdG8geWVzIGlmIG1v
ZHVsZXMgYXJlIG5vdCBlbmFibGVkICovDQogICAgLQlpZiAodmFsID09IG1vZCkNCiAgICAtCQlp
ZiAoIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBtb2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0g
bm8pDQogICAgLQkJCXZhbCA9IHllczsNCiAgICAtDQogICAgLQkvKiB0cmFuc3Bvc2UgbW9kIHRv
IHllcyBpZiB0eXBlIGlzIGJvb2wgKi8NCiAgICAtCWlmIChzeW0tPnR5cGUgPT0gU19CT09MRUFO
ICYmIHZhbCA9PSBtb2QpDQogICAgLQkJdmFsID0geWVzOw0KICAgIC0NCiAgICAtCXN3aXRjaCAo
c3ltLT50eXBlKSB7DQogICAgLQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCWNhc2UgU19UUklTVEFU
RToNCiAgICAtCQlzd2l0Y2ggKHZhbCkgew0KICAgIC0JCWNhc2Ugbm86IHJldHVybiAibiI7DQog
ICAgLQkJY2FzZSBtb2Q6IHJldHVybiAibSI7DQogICAgLQkJY2FzZSB5ZXM6IHJldHVybiAieSI7
DQogICAgLQkJfQ0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQkJ
cmV0dXJuIHN0cjsNCiAgICAtCWNhc2UgU19TVFJJTkc6DQogICAgLQkJcmV0dXJuIHN0cjsNCiAg
ICAtCWNhc2UgU19PVEhFUjoNCiAgICAtCWNhc2UgU19VTktOT1dOOg0KICAgIC0JCWJyZWFrOw0K
ICAgIC0JfQ0KICAgIC0JcmV0dXJuICIiOw0KICAgIC19DQogICAgLQ0KICAgIC1jb25zdCBjaGFy
ICpzeW1fZ2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAt
CXRyaXN0YXRlIHZhbDsNCiAgICAtDQogICAgLQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0J
Y2FzZSBTX0JPT0xFQU46DQogICAgLQljYXNlIFNfVFJJU1RBVEU6DQogICAgLQkJdmFsID0gc3lt
X2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0JCXN3aXRjaCAodmFsKSB7DQogICAgLQkJ
Y2FzZSBubzoNCiAgICAtCQkJcmV0dXJuICJuIjsNCiAgICAtCQljYXNlIG1vZDoNCiAgICAtCQkJ
c3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOw0KICAgIC0JCQlyZXR1cm4gKG1vZHVsZXNfc3lt
LT5jdXJyLnRyaSA9PSBubykgPyAibiIgOiAibSI7DQogICAgLQkJY2FzZSB5ZXM6DQogICAgLQkJ
CXJldHVybiAieSI7DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAg
ICAtCQk7DQogICAgLQl9DQogICAgLQlyZXR1cm4gKGNvbnN0IGNoYXIgKilzeW0tPmN1cnIudmFs
Ow0KICAgIC19DQogICAgLQ0KICAgIC1ib29sIHN5bV9pc19jaGFuZ2FibGUoc3RydWN0IHN5bWJv
bCAqc3ltKQ0KICAgIC17DQogICAgLQlyZXR1cm4gc3ltLT52aXNpYmxlID4gc3ltLT5yZXZfZGVw
LnRyaTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHVuc2lnbmVkIHN0cmhhc2goY29uc3Qg
Y2hhciAqcykNCiAgICAtew0KICAgIC0JLyogZm52MzIgaGFzaCAqLw0KICAgIC0JdW5zaWduZWQg
aGFzaCA9IDIxNjYxMzYyNjFVOw0KICAgIC0JZm9yICg7ICpzOyBzKyspDQogICAgLQkJaGFzaCA9
IChoYXNoIF4gKnMpICogMHgwMTAwMDE5MzsNCiAgICAtCXJldHVybiBoYXNoOw0KICAgIC19DQog
ICAgLQ0KICAgIC1zdHJ1Y3Qgc3ltYm9sICpzeW1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBmbGFncykNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltYm9sOw0KICAgIC0JY2hh
ciAqbmV3X25hbWU7DQogICAgLQlpbnQgaGFzaDsNCiAgICAtDQogICAgLQlpZiAobmFtZSkgew0K
ICAgIC0JCWlmIChuYW1lWzBdICYmICFuYW1lWzFdKSB7DQogICAgLQkJCXN3aXRjaCAobmFtZVsw
XSkgew0KICAgIC0JCQljYXNlICd5JzogcmV0dXJuICZzeW1ib2xfeWVzOw0KICAgIC0JCQljYXNl
ICdtJzogcmV0dXJuICZzeW1ib2xfbW9kOw0KICAgIC0JCQljYXNlICduJzogcmV0dXJuICZzeW1i
b2xfbm87DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQkJaGFzaCA9IHN0cmhhc2gobmFtZSkg
JSBTWU1CT0xfSEFTSFNJWkU7DQogICAgLQ0KICAgIC0JCWZvciAoc3ltYm9sID0gc3ltYm9sX2hh
c2hbaGFzaF07IHN5bWJvbDsgc3ltYm9sID0gc3ltYm9sLT5uZXh0KSB7DQogICAgLQkJCWlmIChz
eW1ib2wtPm5hbWUgJiYNCiAgICAtCQkJICAgICFzdHJjbXAoc3ltYm9sLT5uYW1lLCBuYW1lKSAm
Jg0KICAgIC0JCQkgICAgKGZsYWdzID8gc3ltYm9sLT5mbGFncyAmIGZsYWdzDQogICAgLQkJCQkg
ICA6ICEoc3ltYm9sLT5mbGFncyAmIChTWU1CT0xfQ09OU1R8U1lNQk9MX0NIT0lDRSkpKSkNCiAg
ICAtCQkJCXJldHVybiBzeW1ib2w7DQogICAgLQkJfQ0KICAgIC0JCW5ld19uYW1lID0gc3RyZHVw
KG5hbWUpOw0KICAgIC0JfSBlbHNlIHsNCiAgICAtCQluZXdfbmFtZSA9IE5VTEw7DQogICAgLQkJ
aGFzaCA9IDA7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltYm9sID0geG1hbGxvYyhzaXplb2Yo
KnN5bWJvbCkpOw0KICAgIC0JbWVtc2V0KHN5bWJvbCwgMCwgc2l6ZW9mKCpzeW1ib2wpKTsNCiAg
ICAtCXN5bWJvbC0+bmFtZSA9IG5ld19uYW1lOw0KICAgIC0Jc3ltYm9sLT50eXBlID0gU19VTktO
T1dOOw0KICAgIC0Jc3ltYm9sLT5mbGFncyB8PSBmbGFnczsNCiAgICAtDQogICAgLQlzeW1ib2wt
Pm5leHQgPSBzeW1ib2xfaGFzaFtoYXNoXTsNCiAgICAtCXN5bWJvbF9oYXNoW2hhc2hdID0gc3lt
Ym9sOw0KICAgIC0NCiAgICAtCXJldHVybiBzeW1ib2w7DQogICAgLX0NCiAgICAtDQogICAgLXN0
cnVjdCBzeW1ib2wgKnN5bV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgLXsNCiAgICAtCXN0
cnVjdCBzeW1ib2wgKnN5bWJvbCA9IE5VTEw7DQogICAgLQlpbnQgaGFzaCA9IDA7DQogICAgLQ0K
ICAgIC0JaWYgKCFuYW1lKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0NCiAgICAtCWlmIChu
YW1lWzBdICYmICFuYW1lWzFdKSB7DQogICAgLQkJc3dpdGNoIChuYW1lWzBdKSB7DQogICAgLQkJ
Y2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3llczsNCiAgICAtCQljYXNlICdtJzogcmV0dXJuICZz
eW1ib2xfbW9kOw0KICAgIC0JCWNhc2UgJ24nOiByZXR1cm4gJnN5bWJvbF9ubzsNCiAgICAtCQl9
DQogICAgLQl9DQogICAgLQloYXNoID0gc3RyaGFzaChuYW1lKSAlIFNZTUJPTF9IQVNIU0laRTsN
CiAgICAtDQogICAgLQlmb3IgKHN5bWJvbCA9IHN5bWJvbF9oYXNoW2hhc2hdOyBzeW1ib2w7IHN5
bWJvbCA9IHN5bWJvbC0+bmV4dCkgew0KICAgIC0JCWlmIChzeW1ib2wtPm5hbWUgJiYNCiAgICAt
CQkgICAgIXN0cmNtcChzeW1ib2wtPm5hbWUsIG5hbWUpICYmDQogICAgLQkJICAgICEoc3ltYm9s
LT5mbGFncyAmIFNZTUJPTF9DT05TVCkpDQogICAgLQkJCQlicmVhazsNCiAgICAtCX0NCiAgICAt
DQogICAgLQlyZXR1cm4gc3ltYm9sOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBF
eHBhbmQgc3ltYm9sJ3MgbmFtZXMgZW1iZWRkZWQgaW4gdGhlIHN0cmluZyBnaXZlbiBpbiBhcmd1
bWVudC4gU3ltYm9scycNCiAgICAtICogbmFtZSB0byBiZSBleHBhbmRlZCBzaGFsbCBiZSBwcmVm
aXhlZCBieSBhICckJy4gVW5rbm93biBzeW1ib2wgZXhwYW5kcyB0bw0KICAgIC0gKiB0aGUgZW1w
dHkgc3RyaW5nLg0KICAgIC0gKi8NCiAgICAtY29uc3QgY2hhciAqc3ltX2V4cGFuZF9zdHJpbmdf
dmFsdWUoY29uc3QgY2hhciAqaW4pDQogICAgLXsNCiAgICAtCWNvbnN0IGNoYXIgKnNyYzsNCiAg
ICAtCWNoYXIgKnJlczsNCiAgICAtCXNpemVfdCByZXNsZW47DQogICAgLQ0KICAgIC0JcmVzbGVu
ID0gc3RybGVuKGluKSArIDE7DQogICAgLQlyZXMgPSB4bWFsbG9jKHJlc2xlbik7DQogICAgLQly
ZXNbMF0gPSAnXDAnOw0KICAgIC0NCiAgICAtCXdoaWxlICgoc3JjID0gc3RyY2hyKGluLCAnJCcp
KSkgew0KICAgIC0JCWNoYXIgKnAsIG5hbWVbU1lNQk9MX01BWExFTkdUSF07DQogICAgLQkJY29u
c3QgY2hhciAqc3ltdmFsID0gIiI7DQogICAgLQkJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0J
CXNpemVfdCBuZXdsZW47DQogICAgLQ0KICAgIC0JCXN0cm5jYXQocmVzLCBpbiwgc3JjIC0gaW4p
Ow0KICAgIC0JCXNyYysrOw0KICAgIC0NCiAgICAtCQlwID0gbmFtZTsNCiAgICAtCQl3aGlsZSAo
aXNhbG51bSgqc3JjKSB8fCAqc3JjID09ICdfJykNCiAgICAtCQkJKnArKyA9ICpzcmMrKzsNCiAg
ICAtCQkqcCA9ICdcMCc7DQogICAgLQ0KICAgIC0JCXN5bSA9IHN5bV9maW5kKG5hbWUpOw0KICAg
IC0JCWlmIChzeW0gIT0gTlVMTCkgew0KICAgIC0JCQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAg
IC0JCQlzeW12YWwgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0KICAgIC0JCX0NCiAgICAt
DQogICAgLQkJbmV3bGVuID0gc3RybGVuKHJlcykgKyBzdHJsZW4oc3ltdmFsKSArIHN0cmxlbihz
cmMpICsgMTsNCiAgICAtCQlpZiAobmV3bGVuID4gcmVzbGVuKSB7DQogICAgLQkJCXJlc2xlbiA9
IG5ld2xlbjsNCiAgICAtCQkJcmVzID0gcmVhbGxvYyhyZXMsIHJlc2xlbik7DQogICAgLQkJfQ0K
ICAgIC0NCiAgICAtCQlzdHJjYXQocmVzLCBzeW12YWwpOw0KICAgIC0JCWluID0gc3JjOw0KICAg
IC0JfQ0KICAgIC0Jc3RyY2F0KHJlcywgaW4pOw0KICAgIC0NCiAgICAtCXJldHVybiByZXM7DQog
ICAgLX0NCiAgICAtDQogICAgLWNvbnN0IGNoYXIgKnN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKGNv
bnN0IGNoYXIgKmluKQ0KICAgIC17DQogICAgLQljb25zdCBjaGFyICpwOw0KICAgIC0Jc2l6ZV90
IHJlc2xlbjsNCiAgICAtCWNoYXIgKnJlczsNCiAgICAtCXNpemVfdCBsOw0KICAgIC0NCiAgICAt
CXJlc2xlbiA9IHN0cmxlbihpbikgKyBzdHJsZW4oIlwiXCIiKSArIDE7DQogICAgLQ0KICAgIC0J
cCA9IGluOw0KICAgIC0JZm9yICg7Oykgew0KICAgIC0JCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7
DQogICAgLQkJcCArPSBsOw0KICAgIC0NCiAgICAtCQlpZiAocFswXSA9PSAnXDAnKQ0KICAgIC0J
CQlicmVhazsNCiAgICAtDQogICAgLQkJcmVzbGVuKys7DQogICAgLQkJcCsrOw0KICAgIC0JfQ0K
ICAgIC0NCiAgICAtCXJlcyA9IHhtYWxsb2MocmVzbGVuKTsNCiAgICAtCXJlc1swXSA9ICdcMCc7
DQogICAgLQ0KICAgIC0Jc3RyY2F0KHJlcywgIlwiIik7DQogICAgLQ0KICAgIC0JcCA9IGluOw0K
ICAgIC0JZm9yICg7Oykgew0KICAgIC0JCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7DQogICAgLQkJ
c3RybmNhdChyZXMsIHAsIGwpOw0KICAgIC0JCXAgKz0gbDsNCiAgICAtDQogICAgLQkJaWYgKHBb
MF0gPT0gJ1wwJykNCiAgICAtCQkJYnJlYWs7DQogICAgLQ0KICAgIC0JCXN0cmNhdChyZXMsICJc
XCIpOw0KICAgIC0JCXN0cm5jYXQocmVzLCBwKyssIDEpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAt
CXN0cmNhdChyZXMsICJcIiIpOw0KICAgIC0JcmV0dXJuIHJlczsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RydWN0IHN5bV9tYXRjaCB7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sCSpzeW07DQogICAgLQlv
ZmZfdAkJc28sIGVvOw0KICAgIC19Ow0KICAgIC0NCiAgICAtLyogQ29tcGFyZSBtYXRjaGVkIHN5
bWJvbHMgYXMgdGh1czoNCiAgICAtICogLSBmaXJzdCwgc3ltYm9scyB0aGF0IG1hdGNoIGV4YWN0
bHkNCiAgICAtICogLSB0aGVuLCBhbHBoYWJldGljYWwgc29ydA0KICAgIC0gKi8NCiAgICAtc3Rh
dGljIGludCBzeW1fcmVsX2NvbXAoY29uc3Qgdm9pZCAqc3ltMSwgY29uc3Qgdm9pZCAqc3ltMikN
CiAgICAtew0KICAgIC0JY29uc3Qgc3RydWN0IHN5bV9tYXRjaCAqczEgPSBzeW0xOw0KICAgIC0J
Y29uc3Qgc3RydWN0IHN5bV9tYXRjaCAqczIgPSBzeW0yOw0KICAgIC0JaW50IGV4YWN0MSwgZXhh
Y3QyOw0KICAgIC0NCiAgICAtCS8qIEV4YWN0IG1hdGNoOg0KICAgIC0JICogLSBpZiBtYXRjaGVk
IGxlbmd0aCBvbiBzeW1ib2wgczEgaXMgdGhlIGxlbmd0aCBvZiB0aGF0IHN5bWJvbCwNCiAgICAt
CSAqICAgdGhlbiB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdDsNCiAgICAtCSAqIC0gaWYg
bWF0Y2hlZCBsZW5ndGggb24gc3ltYm9sIHMyIGlzIHRoZSBsZW5ndGggb2YgdGhhdCBzeW1ib2ws
DQogICAgLQkgKiAgIHRoZW4gdGhpcyBzeW1ib2wgc2hvdWxkIGNvbWUgZmlyc3QuDQogICAgLQkg
KiBOb3RlOiBzaW5jZSB0aGUgc2VhcmNoIGNhbiBiZSBhIHJlZ2V4cCwgYm90aCBzeW1ib2xzIG1h
eSBtYXRjaA0KICAgIC0JICogZXhhY3RseTsgaWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgY2FuJ3Qg
ZGVjaWRlIHdoaWNoIGNvbWVzIGZpcnN0LA0KICAgIC0JICogYW5kIHdlIGZhbGxiYWNrIHRvIHNv
cnRpbmcgYWxwaGFiZXRpY2FsbHkuDQogICAgLQkgKi8NCiAgICAtCWV4YWN0MSA9IChzMS0+ZW8g
LSBzMS0+c28pID09IHN0cmxlbihzMS0+c3ltLT5uYW1lKTsNCiAgICAtCWV4YWN0MiA9IChzMi0+
ZW8gLSBzMi0+c28pID09IHN0cmxlbihzMi0+c3ltLT5uYW1lKTsNCiAgICAtCWlmIChleGFjdDEg
JiYgIWV4YWN0MikNCiAgICAtCQlyZXR1cm4gLTE7DQogICAgLQlpZiAoIWV4YWN0MSAmJiBleGFj
dDIpDQogICAgLQkJcmV0dXJuIDE7DQogICAgLQ0KICAgIC0JLyogQXMgYSBmYWxsYmFjaywgc29y
dCBzeW1ib2xzIGFscGhhYmV0aWNhbGx5ICovDQogICAgLQlyZXR1cm4gc3RyY21wKHMxLT5zeW0t
Pm5hbWUsIHMyLT5zeW0tPm5hbWUpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3Qgc3ltYm9s
ICoqc3ltX3JlX3NlYXJjaChjb25zdCBjaGFyICpwYXR0ZXJuKQ0KICAgIC17DQogICAgLQlzdHJ1
Y3Qgc3ltYm9sICpzeW0sICoqc3ltX2FyciA9IE5VTEw7DQogICAgLQlzdHJ1Y3Qgc3ltX21hdGNo
ICpzeW1fbWF0Y2hfYXJyID0gTlVMTDsNCiAgICAtCWludCBpLCBjbnQsIHNpemU7DQogICAgLQly
ZWdleF90IHJlOw0KICAgIC0JcmVnbWF0Y2hfdCBtYXRjaFsxXTsNCiAgICAtDQogICAgLQljbnQg
PSBzaXplID0gMDsNCiAgICAtCS8qIFNraXAgaWYgZW1wdHkgKi8NCiAgICAtCWlmIChzdHJsZW4o
cGF0dGVybikgPT0gMCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtCWlmIChyZWdjb21wKCZy
ZSwgcGF0dGVybiwgUkVHX0VYVEVOREVEfFJFR19JQ0FTRSkpDQogICAgLQkJcmV0dXJuIE5VTEw7
DQogICAgLQ0KICAgIC0JZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgIC0JCWlmIChzeW0t
PmZsYWdzICYgU1lNQk9MX0NPTlNUIHx8ICFzeW0tPm5hbWUpDQogICAgLQkJCWNvbnRpbnVlOw0K
ICAgIC0JCWlmIChyZWdleGVjKCZyZSwgc3ltLT5uYW1lLCAxLCBtYXRjaCwgMCkpDQogICAgLQkJ
CWNvbnRpbnVlOw0KICAgIC0JCWlmIChjbnQgPj0gc2l6ZSkgew0KICAgIC0JCQl2b2lkICp0bXA7
DQogICAgLQkJCXNpemUgKz0gMTY7DQogICAgLQkJCXRtcCA9IHJlYWxsb2Moc3ltX21hdGNoX2Fy
ciwgc2l6ZSAqIHNpemVvZihzdHJ1Y3Qgc3ltX21hdGNoKSk7DQogICAgLQkJCWlmICghdG1wKQ0K
ICAgIC0JCQkJZ290byBzeW1fcmVfc2VhcmNoX2ZyZWU7DQogICAgLQkJCXN5bV9tYXRjaF9hcnIg
PSB0bXA7DQogICAgLQkJfQ0KICAgIC0JCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgLQkJLyog
QXMgcmVnZXhlYyByZXR1cm5lZCAwLCB3ZSBrbm93IHdlIGhhdmUgYSBtYXRjaCwgc28NCiAgICAt
CQkgKiB3ZSBjYW4gdXNlIG1hdGNoWzBdLnJtX1tzZV1vIHdpdGhvdXQgZnVydGhlciBjaGVja3MN
CiAgICAtCQkgKi8NCiAgICAtCQlzeW1fbWF0Y2hfYXJyW2NudF0uc28gPSBtYXRjaFswXS5ybV9z
bzsNCiAgICAtCQlzeW1fbWF0Y2hfYXJyW2NudF0uZW8gPSBtYXRjaFswXS5ybV9lbzsNCiAgICAt
CQlzeW1fbWF0Y2hfYXJyW2NudCsrXS5zeW0gPSBzeW07DQogICAgLQl9DQogICAgLQlpZiAoc3lt
X21hdGNoX2Fycikgew0KICAgIC0JCXFzb3J0KHN5bV9tYXRjaF9hcnIsIGNudCwgc2l6ZW9mKHN0
cnVjdCBzeW1fbWF0Y2gpLCBzeW1fcmVsX2NvbXApOw0KICAgIC0JCXN5bV9hcnIgPSBtYWxsb2Mo
KGNudCsxKSAqIHNpemVvZihzdHJ1Y3Qgc3ltYm9sKSk7DQogICAgLQkJaWYgKCFzeW1fYXJyKQ0K
ICAgIC0JCQlnb3RvIHN5bV9yZV9zZWFyY2hfZnJlZTsNCiAgICAtCQlmb3IgKGkgPSAwOyBpIDwg
Y250OyBpKyspDQogICAgLQkJCXN5bV9hcnJbaV0gPSBzeW1fbWF0Y2hfYXJyW2ldLnN5bTsNCiAg
ICAtCQlzeW1fYXJyW2NudF0gPSBOVUxMOw0KICAgIC0JfQ0KICAgIC1zeW1fcmVfc2VhcmNoX2Zy
ZWU6DQogICAgLQkvKiBzeW1fbWF0Y2hfYXJyIGNhbiBiZSBOVUxMIGlmIG5vIG1hdGNoLCBidXQg
ZnJlZShOVUxMKSBpcyBPSyAqLw0KICAgIC0JZnJlZShzeW1fbWF0Y2hfYXJyKTsNCiAgICAtCXJl
Z2ZyZWUoJnJlKTsNCiAgICAtDQogICAgLQlyZXR1cm4gc3ltX2FycjsNCiAgICAtfQ0KICAgIC0N
CiAgICAtLyoNCiAgICAtICogV2hlbiB3ZSBjaGVjayBmb3IgcmVjdXJzaXZlIGRlcGVuZGVuY2ll
cyB3ZSB1c2UgYSBzdGFjayB0byBzYXZlDQogICAgLSAqIGN1cnJlbnQgc3RhdGUgc28gd2UgY2Fu
IHByaW50IG91dCByZWxldmFudCBpbmZvIHRvIHVzZXIuDQogICAgLSAqIFRoZSBlbnRyaWVzIGFy
ZSBsb2NhdGVkIG9uIHRoZSBjYWxsIHN0YWNrIHNvIG5vIG5lZWQgdG8gZnJlZSBtZW1vcnkuDQog
ICAgLSAqIE5vdGUgaW5zZXJ0KCkgcmVtb3ZlKCkgbXVzdCBhbHdheXMgbWF0Y2ggdG8gcHJvcGVy
bHkgY2xlYXIgdGhlIHN0YWNrLg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHN0cnVjdCBkZXBfc3Rh
Y2sgew0KICAgIC0Jc3RydWN0IGRlcF9zdGFjayAqcHJldiwgKm5leHQ7DQogICAgLQlzdHJ1Y3Qg
c3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1Y3Qg
ZXhwciAqZXhwcjsNCiAgICAtfSAqY2hlY2tfdG9wOw0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQg
ZGVwX3N0YWNrX2luc2VydChzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAq
c3ltKQ0KICAgIC17DQogICAgLQltZW1zZXQoc3RhY2ssIDAsIHNpemVvZigqc3RhY2spKTsNCiAg
ICAtCWlmIChjaGVja190b3ApDQogICAgLQkJY2hlY2tfdG9wLT5uZXh0ID0gc3RhY2s7DQogICAg
LQlzdGFjay0+cHJldiA9IGNoZWNrX3RvcDsNCiAgICAtCXN0YWNrLT5zeW0gPSBzeW07DQogICAg
LQljaGVja190b3AgPSBzdGFjazsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgZGVw
X3N0YWNrX3JlbW92ZSh2b2lkKQ0KICAgIC17DQogICAgLQljaGVja190b3AgPSBjaGVja190b3At
PnByZXY7DQogICAgLQlpZiAoY2hlY2tfdG9wKQ0KICAgIC0JCWNoZWNrX3RvcC0+bmV4dCA9IE5V
TEw7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIENhbGxlZCB3aGVuIHdlIGhhdmUg
ZGV0ZWN0ZWQgYSByZWN1cnNpdmUgZGVwZW5kZW5jeS4NCiAgICAtICogY2hlY2tfdG9wIHBvaW50
IHRvIHRoZSB0b3Agb2YgdGhlIHN0YWN0IHNvIHdlIHVzZQ0KICAgIC0gKiB0aGUgLT5wcmV2IHBv
aW50ZXIgdG8gbG9jYXRlIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KICAgIC0gKi8NCiAgICAt
c3RhdGljIHZvaWQgc3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2ZShzdHJ1Y3Qgc3ltYm9sICpsYXN0
X3N5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IGRlcF9zdGFjayAqc3RhY2s7DQogICAgLQlzdHJ1
Y3Qgc3ltYm9sICpzeW0sICpuZXh0X3N5bTsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51ID0gTlVM
TDsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBkZXBfc3RhY2sg
Y3Zfc3RhY2s7DQogICAgLQ0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUobGFzdF9zeW0p
KSB7DQogICAgLQkJZGVwX3N0YWNrX2luc2VydCgmY3Zfc3RhY2ssIGxhc3Rfc3ltKTsNCiAgICAt
CQlsYXN0X3N5bSA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKGxhc3Rfc3lt
KSk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JZm9yIChzdGFjayA9IGNoZWNrX3RvcDsgc3RhY2sg
IT0gTlVMTDsgc3RhY2sgPSBzdGFjay0+cHJldikNCiAgICAtCQlpZiAoc3RhY2stPnN5bSA9PSBs
YXN0X3N5bSkNCiAgICAtCQkJYnJlYWs7DQogICAgLQlpZiAoIXN0YWNrKSB7DQogICAgLQkJZnBy
aW50ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVycm9yXG4iKTsN
CiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JZm9yICg7IHN0YWNrOyBzdGFj
ayA9IHN0YWNrLT5uZXh0KSB7DQogICAgLQkJc3ltID0gc3RhY2stPnN5bTsNCiAgICAtCQluZXh0
X3N5bSA9IHN0YWNrLT5uZXh0ID8gc3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOw0KICAgIC0J
CXByb3AgPSBzdGFjay0+cHJvcDsNCiAgICAtCQlpZiAocHJvcCA9PSBOVUxMKQ0KICAgIC0JCQlw
cm9wID0gc3RhY2stPnN5bS0+cHJvcDsNCiAgICAtDQogICAgLQkJLyogZm9yIGNob2ljZSB2YWx1
ZXMgZmluZCB0aGUgbWVudSBlbnRyeSAodXNlZCBiZWxvdykgKi8NCiAgICAtCQlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pIHx8IHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgew0KICAgIC0JCQlmb3Ig
KHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgLQkJCQlt
ZW51ID0gcHJvcC0+bWVudTsNCiAgICAtCQkJCWlmIChwcm9wLT5tZW51KQ0KICAgIC0JCQkJCWJy
ZWFrOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWlmIChzdGFjay0+c3ltID09IGxhc3Rf
c3ltKQ0KICAgIC0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOmVycm9yOiByZWN1cnNpdmUgZGVw
ZW5kZW5jeSBkZXRlY3RlZCFcbiIsDQogICAgLQkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5s
aW5lbm8pOw0KICAgIC0JCWlmIChzdGFjay0+ZXhwcikgew0KICAgIC0JCQlmcHJpbnRmKHN0ZGVy
ciwgIiVzOiVkOlx0c3ltYm9sICVzICVzIHZhbHVlIGNvbnRhaW5zICVzXG4iLA0KICAgIC0JCQkJ
cHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLA0KICAgIC0JCQkJc3ltLT5uYW1lID8gc3lt
LT5uYW1lIDogIjxjaG9pY2U+IiwNCiAgICAtCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50
eXBlKSwNCiAgICAtCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2lj
ZT4iKTsNCiAgICAtCQl9IGVsc2UgaWYgKHN0YWNrLT5wcm9wKSB7DQogICAgLQkJCWZwcmludGYo
c3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgZGVwZW5kcyBvbiAlc1xuIiwNCiAgICAtCQkJCXBy
b3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywNCiAgICAtCQkJCXN5bS0+bmFtZSA/IHN5bS0+
bmFtZSA6ICI8Y2hvaWNlPiIsDQogICAgLQkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5u
YW1lIDogIjxjaG9pY2U+Iik7DQogICAgLQkJfSBlbHNlIGlmIChzeW1faXNfY2hvaWNlKHN5bSkp
IHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdGNob2ljZSAlcyBjb250YWlucyBz
eW1ib2wgJXNcbiIsDQogICAgLQkJCQltZW51LT5maWxlLT5uYW1lLCBtZW51LT5saW5lbm8sDQog
ICAgLQkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLA0KICAgIC0JCQkJbmV4
dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOw0KICAgIC0JCX0gZWxz
ZSBpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7DQogICAgLQkJCWZwcmludGYoc3RkZXJy
LCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgcGFydCBvZiBjaG9pY2UgJXNcbiIsDQogICAgLQkJCQlt
ZW51LT5maWxlLT5uYW1lLCBtZW51LT5saW5lbm8sDQogICAgLQkJCQlzeW0tPm5hbWUgPyBzeW0t
Pm5hbWUgOiAiPGNob2ljZT4iLA0KICAgIC0JCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+
bmFtZSA6ICI8Y2hvaWNlPiIpOw0KICAgIC0JCX0gZWxzZSB7DQogICAgLQkJCWZwcmludGYoc3Rk
ZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgc2VsZWN0ZWQgYnkgJXNcbiIsDQogICAgLQkJCQlw
cm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sDQogICAgLQkJCQlzeW0tPm5hbWUgPyBzeW0t
Pm5hbWUgOiAiPGNob2ljZT4iLA0KICAgIC0JCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+
bmFtZSA6ICI8Y2hvaWNlPiIpOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLQlpZiAo
Y2hlY2tfdG9wID09ICZjdl9zdGFjaykNCiAgICAtCQlkZXBfc3RhY2tfcmVtb3ZlKCk7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZXhwcl9kZXBz
KHN0cnVjdCBleHByICplKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAg
LQ0KICAgIC0JaWYgKCFlKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0Jc3dpdGNoIChlLT50
eXBlKSB7DQogICAgLQljYXNlIEVfT1I6DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCXN5bSA9
IHN5bV9jaGVja19leHByX2RlcHMoZS0+bGVmdC5leHByKTsNCiAgICAtCQlpZiAoc3ltKQ0KICAg
IC0JCQlyZXR1cm4gc3ltOw0KICAgIC0JCXJldHVybiBzeW1fY2hlY2tfZXhwcl9kZXBzKGUtPnJp
Z2h0LmV4cHIpOw0KICAgIC0JY2FzZSBFX05PVDoNCiAgICAtCQlyZXR1cm4gc3ltX2NoZWNrX2V4
cHJfZGVwcyhlLT5sZWZ0LmV4cHIpOw0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAgIC0JY2FzZSBF
X1VORVFVQUw6DQogICAgLQkJc3ltID0gc3ltX2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOw0KICAg
IC0JCWlmIChzeW0pDQogICAgLQkJCXJldHVybiBzeW07DQogICAgLQkJcmV0dXJuIHN5bV9jaGVj
a19kZXBzKGUtPnJpZ2h0LnN5bSk7DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAgIC0JCXJldHVy
biBzeW1fY2hlY2tfZGVwcyhlLT5sZWZ0LnN5bSk7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCWJy
ZWFrOw0KICAgIC0JfQ0KICAgIC0JcHJpbnRmKCJPb3BzISBIb3cgdG8gY2hlY2sgJWQ/XG4iLCBl
LT50eXBlKTsNCiAgICAtCXJldHVybiBOVUxMOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiByZXR1
cm4gTlVMTCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgT0sgKi8NCiAgICAtc3RhdGljIHN0cnVjdCBz
eW1ib2wgKnN5bV9jaGVja19zeW1fZGVwcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAg
ICAtCXN0cnVjdCBzeW1ib2wgKnN5bTI7DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQog
ICAgLQlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOw0KICAgIC0NCiAgICAtCWRlcF9zdGFja19pbnNl
cnQoJnN0YWNrLCBzeW0pOw0KICAgIC0NCiAgICAtCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBz
KHN5bS0+cmV2X2RlcC5leHByKTsNCiAgICAtCWlmIChzeW0yKQ0KICAgIC0JCWdvdG8gb3V0Ow0K
ICAgIC0NCiAgICAtCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5l
eHQpIHsNCiAgICAtCQlpZiAocHJvcC0+dHlwZSA9PSBQX0NIT0lDRSB8fCBwcm9wLT50eXBlID09
IFBfU0VMRUNUKQ0KICAgIC0JCQljb250aW51ZTsNCiAgICAtCQlzdGFjay5wcm9wID0gcHJvcDsN
CiAgICAtCQlzeW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhwcm9wLT52aXNpYmxlLmV4cHIpOw0K
ICAgIC0JCWlmIChzeW0yKQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQlpZiAocHJvcC0+dHlwZSAh
PSBQX0RFRkFVTFQgfHwgc3ltX2lzX2Nob2ljZShzeW0pKQ0KICAgIC0JCQljb250aW51ZTsNCiAg
ICAtCQlzdGFjay5leHByID0gcHJvcC0+ZXhwcjsNCiAgICAtCQlzeW0yID0gc3ltX2NoZWNrX2V4
cHJfZGVwcyhwcm9wLT5leHByKTsNCiAgICAtCQlpZiAoc3ltMikNCiAgICAtCQkJYnJlYWs7DQog
ICAgLQkJc3RhY2suZXhwciA9IE5VTEw7DQogICAgLQl9DQogICAgLQ0KICAgIC1vdXQ6DQogICAg
LQlkZXBfc3RhY2tfcmVtb3ZlKCk7DQogICAgLQ0KICAgIC0JcmV0dXJuIHN5bTI7DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfY2hvaWNlX2RlcHMo
c3RydWN0IHN5bWJvbCAqY2hvaWNlKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0s
ICpzeW0yOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3RydWN0IGV4cHIg
KmU7DQogICAgLQlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOw0KICAgIC0NCiAgICAtCWRlcF9zdGFj
a19pbnNlcnQoJnN0YWNrLCBjaG9pY2UpOw0KICAgIC0NCiAgICAtCXByb3AgPSBzeW1fZ2V0X2No
b2ljZV9wcm9wKGNob2ljZSk7DQogICAgLQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4
cHIsIGUsIHN5bSkNCiAgICAtCQlzeW0tPmZsYWdzIHw9IChTWU1CT0xfQ0hFQ0sgfCBTWU1CT0xf
Q0hFQ0tFRCk7DQogICAgLQ0KICAgIC0JY2hvaWNlLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwg
U1lNQk9MX0NIRUNLRUQpOw0KICAgIC0Jc3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhjaG9pY2Up
Ow0KICAgIC0JY2hvaWNlLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOw0KICAgIC0JaWYgKHN5bTIp
DQogICAgLQkJZ290byBvdXQ7DQogICAgLQ0KICAgIC0JZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShw
cm9wLT5leHByLCBlLCBzeW0pIHsNCiAgICAtCQlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKHN5
bSk7DQogICAgLQkJaWYgKHN5bTIpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JfQ0KICAgIC1vdXQ6
DQogICAgLQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkNCiAgICAt
CQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7DQogICAgLQ0KICAgIC0JaWYgKHN5bTIgJiYg
c3ltX2lzX2Nob2ljZV92YWx1ZShzeW0yKSAmJg0KICAgIC0JICAgIHByb3BfZ2V0X3N5bWJvbChz
eW1fZ2V0X2Nob2ljZV9wcm9wKHN5bTIpKSA9PSBjaG9pY2UpDQogICAgLQkJc3ltMiA9IGNob2lj
ZTsNCiAgICAtDQogICAgLQlkZXBfc3RhY2tfcmVtb3ZlKCk7DQogICAgLQ0KICAgIC0JcmV0dXJu
IHN5bTI7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19kZXBz
KHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltMjsN
CiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtDQogICAgLQlpZiAoc3ltLT5mbGFn
cyAmIFNZTUJPTF9DSEVDSykgew0KICAgIC0JCXN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3lt
KTsNCiAgICAtCQlyZXR1cm4gc3ltOw0KICAgIC0JfQ0KICAgIC0JaWYgKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfQ0hFQ0tFRCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtDQogICAgLQlpZiAoc3lt
X2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7DQogICAgLQkJc3RydWN0IGRlcF9zdGFjayBzdGFjazsN
CiAgICAtDQogICAgLQkJLyogZm9yIGNob2ljZSBncm91cHMgc3RhcnQgdGhlIGNoZWNrIHdpdGgg
bWFpbiBjaG9pY2Ugc3ltYm9sICovDQogICAgLQkJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIHN5
bSk7DQogICAgLQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsNCiAgICAtCQlzeW0y
ID0gc3ltX2NoZWNrX2RlcHMocHJvcF9nZXRfc3ltYm9sKHByb3ApKTsNCiAgICAtCQlkZXBfc3Rh
Y2tfcmVtb3ZlKCk7DQogICAgLQl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAg
IC0JCXN5bTIgPSBzeW1fY2hlY2tfY2hvaWNlX2RlcHMoc3ltKTsNCiAgICAtCX0gZWxzZSB7DQog
ICAgLQkJc3ltLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NIRUNLRUQpOw0KICAg
IC0JCXN5bTIgPSBzeW1fY2hlY2tfc3ltX2RlcHMoc3ltKTsNCiAgICAtCQlzeW0tPmZsYWdzICY9
IH5TWU1CT0xfQ0hFQ0s7DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKHN5bTIgJiYgc3ltMiA9
PSBzeW0pDQogICAgLQkJc3ltMiA9IE5VTEw7DQogICAgLQ0KICAgIC0JcmV0dXJuIHN5bTI7DQog
ICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBwcm9wZXJ0eSAqcHJvcF9hbGxvYyhlbnVtIHByb3Bf
dHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0cnVjdCBwcm9w
ZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqKnByb3BwOw0KICAgIC0NCiAgICAt
CXByb3AgPSB4bWFsbG9jKHNpemVvZigqcHJvcCkpOw0KICAgIC0JbWVtc2V0KHByb3AsIDAsIHNp
emVvZigqcHJvcCkpOw0KICAgIC0JcHJvcC0+dHlwZSA9IHR5cGU7DQogICAgLQlwcm9wLT5zeW0g
PSBzeW07DQogICAgLQlwcm9wLT5maWxlID0gY3VycmVudF9maWxlOw0KICAgIC0JcHJvcC0+bGlu
ZW5vID0gemNvbmZfbGluZW5vKCk7DQogICAgLQ0KICAgIC0JLyogYXBwZW5kIHByb3BlcnR5IHRv
IHRoZSBwcm9wIGxpc3Qgb2Ygc3ltYm9sICovDQogICAgLQlpZiAoc3ltKSB7DQogICAgLQkJZm9y
IChwcm9wcCA9ICZzeW0tPnByb3A7ICpwcm9wcDsgcHJvcHAgPSAmKCpwcm9wcCktPm5leHQpDQog
ICAgLQkJCTsNCiAgICAtCQkqcHJvcHAgPSBwcm9wOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXJl
dHVybiBwcm9wOw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3Qgc3ltYm9sICpwcm9wX2dldF9z
eW1ib2woc3RydWN0IHByb3BlcnR5ICpwcm9wKQ0KICAgIC17DQogICAgLQlpZiAocHJvcC0+ZXhw
ciAmJiAocHJvcC0+ZXhwci0+dHlwZSA9PSBFX1NZTUJPTCB8fA0KICAgIC0JCQkgICBwcm9wLT5l
eHByLT50eXBlID09IEVfTElTVCkpDQogICAgLQkJcmV0dXJuIHByb3AtPmV4cHItPmxlZnQuc3lt
Ow0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLWNvbnN0IGNoYXIgKnBy
b3BfZ2V0X3R5cGVfbmFtZShlbnVtIHByb3BfdHlwZSB0eXBlKQ0KICAgIC17DQogICAgLQlzd2l0
Y2ggKHR5cGUpIHsNCiAgICAtCWNhc2UgUF9QUk9NUFQ6DQogICAgLQkJcmV0dXJuICJwcm9tcHQi
Ow0KICAgIC0JY2FzZSBQX0VOVjoNCiAgICAtCQlyZXR1cm4gImVudiI7DQogICAgLQljYXNlIFBf
Q09NTUVOVDoNCiAgICAtCQlyZXR1cm4gImNvbW1lbnQiOw0KICAgIC0JY2FzZSBQX01FTlU6DQog
ICAgLQkJcmV0dXJuICJtZW51IjsNCiAgICAtCWNhc2UgUF9ERUZBVUxUOg0KICAgIC0JCXJldHVy
biAiZGVmYXVsdCI7DQogICAgLQljYXNlIFBfQ0hPSUNFOg0KICAgIC0JCXJldHVybiAiY2hvaWNl
IjsNCiAgICAtCWNhc2UgUF9TRUxFQ1Q6DQogICAgLQkJcmV0dXJuICJzZWxlY3QiOw0KICAgIC0J
Y2FzZSBQX1JBTkdFOg0KICAgIC0JCXJldHVybiAicmFuZ2UiOw0KICAgIC0JY2FzZSBQX1NZTUJP
TDoNCiAgICAtCQlyZXR1cm4gInN5bWJvbCI7DQogICAgLQljYXNlIFBfVU5LTk9XTjoNCiAgICAt
CQlicmVhazsNCiAgICAtCX0NCiAgICAtCXJldHVybiAidW5rbm93biI7DQogICAgLX0NCiAgICAt
DQogICAgLXN0YXRpYyB2b2lkIHByb3BfYWRkX2Vudihjb25zdCBjaGFyICplbnYpDQogICAgLXsN
CiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bSwgKnN5bTI7DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7DQogICAgLQljaGFyICpwOw0KICAgIC0NCiAgICAtCXN5bSA9IGN1cnJlbnRfZW50cnkt
PnN5bTsNCiAgICAtCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0FVVE87DQogICAgLQlmb3JfYWxsX3By
b3BlcnRpZXMoc3ltLCBwcm9wLCBQX0VOVikgew0KICAgIC0JCXN5bTIgPSBwcm9wX2dldF9zeW1i
b2wocHJvcCk7DQogICAgLQkJaWYgKHN0cmNtcChzeW0yLT5uYW1lLCBlbnYpKQ0KICAgIC0JCQlt
ZW51X3dhcm4oY3VycmVudF9lbnRyeSwgInJlZGVmaW5pbmcgZW52aXJvbm1lbnQgc3ltYm9sIGZy
b20gJXMiLA0KICAgIC0JCQkJICBzeW0yLT5uYW1lKTsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9
DQogICAgLQ0KICAgIC0JcHJvcCA9IHByb3BfYWxsb2MoUF9FTlYsIHN5bSk7DQogICAgLQlwcm9w
LT5leHByID0gZXhwcl9hbGxvY19zeW1ib2woc3ltX2xvb2t1cChlbnYsIFNZTUJPTF9DT05TVCkp
Ow0KICAgIC0NCiAgICAtCXN5bV9lbnZfbGlzdCA9IGV4cHJfYWxsb2Nfb25lKEVfTElTVCwgc3lt
X2Vudl9saXN0KTsNCiAgICAtCXN5bV9lbnZfbGlzdC0+cmlnaHQuc3ltID0gc3ltOw0KICAgIC0N
CiAgICAtCXAgPSBnZXRlbnYoZW52KTsNCiAgICAtCWlmIChwKQ0KICAgIC0JCXN5bV9hZGRfZGVm
YXVsdChzeW0sIHApOw0KICAgIC0JZWxzZQ0KICAgIC0JCW1lbnVfd2FybihjdXJyZW50X2VudHJ5
LCAiZW52aXJvbm1lbnQgdmFyaWFibGUgJXMgdW5kZWZpbmVkIiwgZW52KTsNCiAgICAtfQ0KICAg
IGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnL3V0
aWwuYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDYwZWI1NjYuLjAw
MDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcvdXRpbC5jDQogICAgKysrIC9kZXYvbnVs
bA0KICAgIEBAIC0xLDE3MSArMCwwIEBADQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykg
MjAwMi0yMDA1IFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0gKiBD
b3B5cmlnaHQgKEMpIDIwMDItMjAwNSBTYW0gUmF2bmJvcmcgPHNhbUByYXZuYm9yZy5vcmc+DQog
ICAgLSAqDQogICAgLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2
Mi4wLg0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICAtI2lu
Y2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNpbmNsdWRl
ICJsa2MuaCINCiAgICAtDQogICAgLS8qIGZpbGUgYWxyZWFkeSBwcmVzZW50IGluIGxpc3Q/IElm
IG5vdCBhZGQgaXQgKi8NCiAgICAtc3RydWN0IGZpbGUgKmZpbGVfbG9va3VwKGNvbnN0IGNoYXIg
Km5hbWUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBmaWxlICpmaWxlOw0KICAgIC0JY29uc3QgY2hh
ciAqZmlsZV9uYW1lID0gc3ltX2V4cGFuZF9zdHJpbmdfdmFsdWUobmFtZSk7DQogICAgLQ0KICAg
IC0JZm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBmaWxlID0gZmlsZS0+bmV4dCkgew0KICAg
IC0JCWlmICghc3RyY21wKG5hbWUsIGZpbGUtPm5hbWUpKSB7DQogICAgLQkJCWZyZWUoKHZvaWQg
KilmaWxlX25hbWUpOw0KICAgIC0JCQlyZXR1cm4gZmlsZTsNCiAgICAtCQl9DQogICAgLQl9DQog
ICAgLQ0KICAgIC0JZmlsZSA9IHhtYWxsb2Moc2l6ZW9mKCpmaWxlKSk7DQogICAgLQltZW1zZXQo
ZmlsZSwgMCwgc2l6ZW9mKCpmaWxlKSk7DQogICAgLQlmaWxlLT5uYW1lID0gZmlsZV9uYW1lOw0K
ICAgIC0JZmlsZS0+bmV4dCA9IGZpbGVfbGlzdDsNCiAgICAtCWZpbGVfbGlzdCA9IGZpbGU7DQog
ICAgLQlyZXR1cm4gZmlsZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogd3JpdGUgYSBkZXBlbmRl
bmN5IGZpbGUgYXMgdXNlZCBieSBrYnVpbGQgdG8gdHJhY2sgZGVwZW5kZW5jaWVzICovDQogICAg
LWludCBmaWxlX3dyaXRlX2RlcChjb25zdCBjaGFyICpuYW1lKQ0KICAgIC17DQogICAgLQljaGFy
ICpzdHI7DQogICAgLQljaGFyIGJ1ZltQQVRIX01BWCsxXSwgYnVmMltQQVRIX01BWCsxXSwgZGly
W1BBVEhfTUFYKzFdOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltLCAqZW52X3N5bTsNCiAgICAt
CXN0cnVjdCBleHByICplOw0KICAgIC0Jc3RydWN0IGZpbGUgKmZpbGU7DQogICAgLQlGSUxFICpv
dXQ7DQogICAgLQ0KICAgIC0JaWYgKCFuYW1lKQ0KICAgIC0JCW5hbWUgPSAiLmtjb25maWcuZCI7
DQogICAgLQ0KICAgIC0Jc3RyY3B5KGRpciwgY29uZl9nZXRfY29uZmlnbmFtZSgpKTsNCiAgICAt
CXN0ciA9IHN0cnJjaHIoZGlyLCAnLycpOw0KICAgIC0JaWYgKHN0cikNCiAgICAtCQlzdHJbMV0g
PSAwOw0KICAgIC0JZWxzZQ0KICAgIC0JCWRpclswXSA9IDA7DQogICAgLQ0KICAgIC0Jc3ByaW50
ZihidWYsICIlcy4uY29uZmlnLnRtcCIsIGRpcik7DQogICAgLQlvdXQgPSBmb3BlbihidWYsICJ3
Iik7DQogICAgLQlpZiAoIW91dCkNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtCWZwcmludGYob3V0
LCAiZGVwc19jb25maWcgOj0gXFxcbiIpOw0KICAgIC0JZm9yIChmaWxlID0gZmlsZV9saXN0OyBm
aWxlOyBmaWxlID0gZmlsZS0+bmV4dCkgew0KICAgIC0JCWlmIChmaWxlLT5uZXh0KQ0KICAgIC0J
CQlmcHJpbnRmKG91dCwgIlx0JXMgXFxcbiIsIGZpbGUtPm5hbWUpOw0KICAgIC0JCWVsc2UNCiAg
ICAtCQkJZnByaW50ZihvdXQsICJcdCVzXG4iLCBmaWxlLT5uYW1lKTsNCiAgICAtCX0NCiAgICAt
CWZwcmludGYob3V0LCAiXG4lczogXFxcbiINCiAgICAtCQkgICAgICJcdCQoZGVwc19jb25maWcp
XG5cbiIsIGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpKTsNCiAgICAtDQogICAgLQlleHByX2xp
c3RfZm9yX2VhY2hfc3ltKHN5bV9lbnZfbGlzdCwgZSwgc3ltKSB7DQogICAgLQkJc3RydWN0IHBy
b3BlcnR5ICpwcm9wOw0KICAgIC0JCWNvbnN0IGNoYXIgKnZhbHVlOw0KICAgIC0NCiAgICAtCQlw
cm9wID0gc3ltX2dldF9lbnZfcHJvcChzeW0pOw0KICAgIC0JCWVudl9zeW0gPSBwcm9wX2dldF9z
eW1ib2wocHJvcCk7DQogICAgLQkJaWYgKCFlbnZfc3ltKQ0KICAgIC0JCQljb250aW51ZTsNCiAg
ICAtCQl2YWx1ZSA9IGdldGVudihlbnZfc3ltLT5uYW1lKTsNCiAgICAtCQlpZiAoIXZhbHVlKQ0K
ICAgIC0JCQl2YWx1ZSA9ICIiOw0KICAgIC0JCWZwcmludGYob3V0LCAiaWZuZXEgXCIkKCVzKVwi
IFwiJXNcIlxuIiwgZW52X3N5bS0+bmFtZSwgdmFsdWUpOw0KICAgIC0JCWZwcmludGYob3V0LCAi
JXM6IEZPUkNFXG4iLCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7DQogICAgLQkJZnByaW50
ZihvdXQsICJlbmRpZlxuIik7DQogICAgLQl9DQogICAgLQ0KICAgIC0JZnByaW50ZihvdXQsICJc
biQoZGVwc19jb25maWcpOiA7XG4iKTsNCiAgICAtCWZjbG9zZShvdXQpOw0KICAgIC0Jc3ByaW50
ZihidWYyLCAiJXMlcyIsIGRpciwgbmFtZSk7DQogICAgLQlyZW5hbWUoYnVmLCBidWYyKTsNCiAg
ICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogQWxsb2NhdGUgaW5p
dGlhbCBncm93YWJsZSBzdHJpbmcgKi8NCiAgICAtc3RydWN0IGdzdHIgc3RyX25ldyh2b2lkKQ0K
ICAgIC17DQogICAgLQlzdHJ1Y3QgZ3N0ciBnczsNCiAgICAtCWdzLnMgPSB4bWFsbG9jKHNpemVv
ZihjaGFyKSAqIDY0KTsNCiAgICAtCWdzLmxlbiA9IDY0Ow0KICAgIC0JZ3MubWF4X3dpZHRoID0g
MDsNCiAgICAtCXN0cmNweShncy5zLCAiXDAiKTsNCiAgICAtCXJldHVybiBnczsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtLyogQWxsb2NhdGUgYW5kIGFzc2lnbiBncm93YWJsZSBzdHJpbmcgKi8NCiAg
ICAtc3RydWN0IGdzdHIgc3RyX2Fzc2lnbihjb25zdCBjaGFyICpzKQ0KICAgIC17DQogICAgLQlz
dHJ1Y3QgZ3N0ciBnczsNCiAgICAtCWdzLnMgPSBzdHJkdXAocyk7DQogICAgLQlncy5sZW4gPSBz
dHJsZW4ocykgKyAxOw0KICAgIC0JZ3MubWF4X3dpZHRoID0gMDsNCiAgICAtCXJldHVybiBnczsN
CiAgICAtfQ0KICAgIC0NCiAgICAtLyogRnJlZSBzdG9yYWdlIGZvciBncm93YWJsZSBzdHJpbmcg
Ki8NCiAgICAtdm9pZCBzdHJfZnJlZShzdHJ1Y3QgZ3N0ciAqZ3MpDQogICAgLXsNCiAgICAtCWlm
IChncy0+cykNCiAgICAtCQlmcmVlKGdzLT5zKTsNCiAgICAtCWdzLT5zID0gTlVMTDsNCiAgICAt
CWdzLT5sZW4gPSAwOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBBcHBlbmQgdG8gZ3Jvd2FibGUg
c3RyaW5nICovDQogICAgLXZvaWQgc3RyX2FwcGVuZChzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNo
YXIgKnMpDQogICAgLXsNCiAgICAtCXNpemVfdCBsOw0KICAgIC0JaWYgKHMpIHsNCiAgICAtCQls
ID0gc3RybGVuKGdzLT5zKSArIHN0cmxlbihzKSArIDE7DQogICAgLQkJaWYgKGwgPiBncy0+bGVu
KSB7DQogICAgLQkJCWdzLT5zICAgPSByZWFsbG9jKGdzLT5zLCBsKTsNCiAgICAtCQkJZ3MtPmxl
biA9IGw7DQogICAgLQkJfQ0KICAgIC0JCXN0cmNhdChncy0+cywgcyk7DQogICAgLQl9DQogICAg
LX0NCiAgICAtDQogICAgLS8qIEFwcGVuZCBwcmludGYgZm9ybWF0dGVkIHN0cmluZyB0byBncm93
YWJsZSBzdHJpbmcgKi8NCiAgICAtdm9pZCBzdHJfcHJpbnRmKHN0cnVjdCBnc3RyICpncywgY29u
c3QgY2hhciAqZm10LCAuLi4pDQogICAgLXsNCiAgICAtCXZhX2xpc3QgYXA7DQogICAgLQljaGFy
IHNbMTAwMDBdOyAvKiBiaWcgZW5vdWdoLi4uICovDQogICAgLQl2YV9zdGFydChhcCwgZm10KTsN
CiAgICAtCXZzbnByaW50ZihzLCBzaXplb2YocyksIGZtdCwgYXApOw0KICAgIC0Jc3RyX2FwcGVu
ZChncywgcyk7DQogICAgLQl2YV9lbmQoYXApOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBSZXRy
aWV2ZSB2YWx1ZSBvZiBncm93YWJsZSBzdHJpbmcgKi8NCiAgICAtY29uc3QgY2hhciAqc3RyX2dl
dChzdHJ1Y3QgZ3N0ciAqZ3MpDQogICAgLXsNCiAgICAtCXJldHVybiBncy0+czsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtdm9pZCAqeG1hbGxvYyhzaXplX3Qgc2l6ZSkNCiAgICAtew0KICAgIC0Jdm9p
ZCAqcCA9IG1hbGxvYyhzaXplKTsNCiAgICAtCWlmIChwKQ0KICAgIC0JCXJldHVybiBwOw0KICAg
IC0JZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7DQogICAgLQlleGl0KDEpOw0K
ICAgIC19DQogICAgLQ0KICAgIC12b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNp
emUpDQogICAgLXsNCiAgICAtCXZvaWQgKnAgPSBjYWxsb2Mobm1lbWIsIHNpemUpOw0KICAgIC0J
aWYgKHApDQogICAgLQkJcmV0dXJuIHA7DQogICAgLQlmcHJpbnRmKHN0ZGVyciwgIk91dCBvZiBt
ZW1vcnkuXG4iKTsNCiAgICAtCWV4aXQoMSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvemNvbmYuZ3BlcmYgYi9zdXBwb3J0L2tjb25maWcv
emNvbmYuZ3BlcmYNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBmMTRh
YjQxLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL3pjb25mLmdwZXJmDQogICAg
KysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDQ3ICswLDAgQEANCiAgICAtJWxhbmd1YWdlPUFOU0kt
Qw0KICAgIC0lZGVmaW5lIGhhc2gtZnVuY3Rpb24tbmFtZSBrY29uZl9pZF9oYXNoDQogICAgLSVk
ZWZpbmUgbG9va3VwLWZ1bmN0aW9uLW5hbWUga2NvbmZfaWRfbG9va3VwDQogICAgLSVkZWZpbmUg
c3RyaW5nLXBvb2wtbmFtZSBrY29uZl9pZF9zdHJpbmdzDQogICAgLSVjb21wYXJlLXN0cm5jbXAN
CiAgICAtJWVudW0NCiAgICAtJXBpYw0KICAgIC0lc3RydWN0LXR5cGUNCiAgICAtDQogICAgLXN0
cnVjdCBrY29uZl9pZDsNCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2NvbmZfaWQg
Kmtjb25mX2lkX2xvb2t1cChyZWdpc3RlciBjb25zdCBjaGFyICpzdHIsIHJlZ2lzdGVyIHVuc2ln
bmVkIGludCBsZW4pOw0KICAgIC0NCiAgICAtJSUNCiAgICAtbWFpbm1lbnUsCVRfTUFJTk1FTlUs
CVRGX0NPTU1BTkQNCiAgICAtbWVudSwJCVRfTUVOVSwJCVRGX0NPTU1BTkQNCiAgICAtZW5kbWVu
dSwJVF9FTkRNRU5VLAlURl9DT01NQU5EDQogICAgLXNvdXJjZSwJCVRfU09VUkNFLAlURl9DT01N
QU5EDQogICAgLWNob2ljZSwJCVRfQ0hPSUNFLAlURl9DT01NQU5EDQogICAgLWVuZGNob2ljZSwJ
VF9FTkRDSE9JQ0UsCVRGX0NPTU1BTkQNCiAgICAtY29tbWVudCwJVF9DT01NRU5ULAlURl9DT01N
QU5EDQogICAgLWNvbmZpZywJCVRfQ09ORklHLAlURl9DT01NQU5EDQogICAgLW1lbnVjb25maWcs
CVRfTUVOVUNPTkZJRywJVEZfQ09NTUFORA0KICAgIC1oZWxwLAkJVF9IRUxQLAkJVEZfQ09NTUFO
RA0KICAgIC1pZiwJCVRfSUYsCQlURl9DT01NQU5EfFRGX1BBUkFNDQogICAgLWVuZGlmLAkJVF9F
TkRJRiwJVEZfQ09NTUFORA0KICAgIC1kZXBlbmRzLAlUX0RFUEVORFMsCVRGX0NPTU1BTkQNCiAg
ICAtb3B0aW9uYWwsCVRfT1BUSU9OQUwsCVRGX0NPTU1BTkQNCiAgICAtZGVmYXVsdCwJVF9ERUZB
VUxULAlURl9DT01NQU5ELCBTX1VOS05PV04NCiAgICAtcHJvbXB0LAkJVF9QUk9NUFQsCVRGX0NP
TU1BTkQNCiAgICAtdHJpc3RhdGUsCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfVFJJU1RBVEUNCiAg
ICAtZGVmX3RyaXN0YXRlLAlUX0RFRkFVTFQsCVRGX0NPTU1BTkQsIFNfVFJJU1RBVEUNCiAgICAt
Ym9vbCwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfQk9PTEVBTg0KICAgIC1ib29sZWFuLAlUX1RZ
UEUsCQlURl9DT01NQU5ELCBTX0JPT0xFQU4NCiAgICAtZGVmX2Jvb2wsCVRfREVGQVVMVCwJVEZf
Q09NTUFORCwgU19CT09MRUFODQogICAgLWludCwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSU5U
DQogICAgLWhleCwJCVRfVFlQRSwJCVRGX0NPTU1BTkQsIFNfSEVYDQogICAgLXN0cmluZywJCVRf
VFlQRSwJCVRGX0NPTU1BTkQsIFNfU1RSSU5HDQogICAgLXNlbGVjdCwJCVRfU0VMRUNULAlURl9D
T01NQU5EDQogICAgLXJhbmdlLAkJVF9SQU5HRSwJVEZfQ09NTUFORA0KICAgIC12aXNpYmxlLAlU
X1ZJU0lCTEUsCVRGX0NPTU1BTkQNCiAgICAtb3B0aW9uLAkJVF9PUFRJT04sCVRGX0NPTU1BTkQN
CiAgICAtb24sCQlUX09OLAkJVEZfUEFSQU0NCiAgICAtbW9kdWxlcywJVF9PUFRfTU9EVUxFUywJ
VEZfT1BUSU9ODQogICAgLWRlZmNvbmZpZ19saXN0LAlUX09QVF9ERUZDT05GSUdfTElTVCxURl9P
UFRJT04NCiAgICAtZW52LAkJVF9PUFRfRU5WLAlURl9PUFRJT04NCiAgICAtJSUNCiAgICBkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkIGIvc3VwcG9ydC9r
Y29uZmlnL3pjb25mLmhhc2guY19zaGlwcGVkDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgaW5kZXggNDBkZjAwMC4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy96
Y29uZi5oYXNoLmNfc2hpcHBlZA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwyODYgKzAs
MCBAQA0KICAgIC0vKiBBTlNJLUMgY29kZSBwcm9kdWNlZCBieSBncGVyZiB2ZXJzaW9uIDMuMC40
ICovDQogICAgLS8qIENvbW1hbmQtbGluZTogZ3BlcmYgLXQgLS1vdXRwdXQtZmlsZSBzY3JpcHRz
L2tjb25maWcvemNvbmYuaGFzaC5jX3NoaXBwZWQgLWEgLUMgLUUgLWcgLWsgJzEsMywkJyAtcCAt
dCBzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYgICovDQogICAgLQ0KICAgIC0jaWYgISgoJyAn
ID09IDMyKSAmJiAoJyEnID09IDMzKSAmJiAoJyInID09IDM0KSAmJiAoJyMnID09IDM1KSBcDQog
ICAgLSAgICAgICYmICgnJScgPT0gMzcpICYmICgnJicgPT0gMzgpICYmICgnXCcnID09IDM5KSAm
JiAoJygnID09IDQwKSBcDQogICAgLSAgICAgICYmICgnKScgPT0gNDEpICYmICgnKicgPT0gNDIp
ICYmICgnKycgPT0gNDMpICYmICgnLCcgPT0gNDQpIFwNCiAgICAtICAgICAgJiYgKCctJyA9PSA0
NSkgJiYgKCcuJyA9PSA0NikgJiYgKCcvJyA9PSA0NykgJiYgKCcwJyA9PSA0OCkgXA0KICAgIC0g
ICAgICAmJiAoJzEnID09IDQ5KSAmJiAoJzInID09IDUwKSAmJiAoJzMnID09IDUxKSAmJiAoJzQn
ID09IDUyKSBcDQogICAgLSAgICAgICYmICgnNScgPT0gNTMpICYmICgnNicgPT0gNTQpICYmICgn
NycgPT0gNTUpICYmICgnOCcgPT0gNTYpIFwNCiAgICAtICAgICAgJiYgKCc5JyA9PSA1NykgJiYg
KCc6JyA9PSA1OCkgJiYgKCc7JyA9PSA1OSkgJiYgKCc8JyA9PSA2MCkgXA0KICAgIC0gICAgICAm
JiAoJz0nID09IDYxKSAmJiAoJz4nID09IDYyKSAmJiAoJz8nID09IDYzKSAmJiAoJ0EnID09IDY1
KSBcDQogICAgLSAgICAgICYmICgnQicgPT0gNjYpICYmICgnQycgPT0gNjcpICYmICgnRCcgPT0g
NjgpICYmICgnRScgPT0gNjkpIFwNCiAgICAtICAgICAgJiYgKCdGJyA9PSA3MCkgJiYgKCdHJyA9
PSA3MSkgJiYgKCdIJyA9PSA3MikgJiYgKCdJJyA9PSA3MykgXA0KICAgIC0gICAgICAmJiAoJ0on
ID09IDc0KSAmJiAoJ0snID09IDc1KSAmJiAoJ0wnID09IDc2KSAmJiAoJ00nID09IDc3KSBcDQog
ICAgLSAgICAgICYmICgnTicgPT0gNzgpICYmICgnTycgPT0gNzkpICYmICgnUCcgPT0gODApICYm
ICgnUScgPT0gODEpIFwNCiAgICAtICAgICAgJiYgKCdSJyA9PSA4MikgJiYgKCdTJyA9PSA4Mykg
JiYgKCdUJyA9PSA4NCkgJiYgKCdVJyA9PSA4NSkgXA0KICAgIC0gICAgICAmJiAoJ1YnID09IDg2
KSAmJiAoJ1cnID09IDg3KSAmJiAoJ1gnID09IDg4KSAmJiAoJ1knID09IDg5KSBcDQogICAgLSAg
ICAgICYmICgnWicgPT0gOTApICYmICgnWycgPT0gOTEpICYmICgnXFwnID09IDkyKSAmJiAoJ10n
ID09IDkzKSBcDQogICAgLSAgICAgICYmICgnXicgPT0gOTQpICYmICgnXycgPT0gOTUpICYmICgn
YScgPT0gOTcpICYmICgnYicgPT0gOTgpIFwNCiAgICAtICAgICAgJiYgKCdjJyA9PSA5OSkgJiYg
KCdkJyA9PSAxMDApICYmICgnZScgPT0gMTAxKSAmJiAoJ2YnID09IDEwMikgXA0KICAgIC0gICAg
ICAmJiAoJ2cnID09IDEwMykgJiYgKCdoJyA9PSAxMDQpICYmICgnaScgPT0gMTA1KSAmJiAoJ2on
ID09IDEwNikgXA0KICAgIC0gICAgICAmJiAoJ2snID09IDEwNykgJiYgKCdsJyA9PSAxMDgpICYm
ICgnbScgPT0gMTA5KSAmJiAoJ24nID09IDExMCkgXA0KICAgIC0gICAgICAmJiAoJ28nID09IDEx
MSkgJiYgKCdwJyA9PSAxMTIpICYmICgncScgPT0gMTEzKSAmJiAoJ3InID09IDExNCkgXA0KICAg
IC0gICAgICAmJiAoJ3MnID09IDExNSkgJiYgKCd0JyA9PSAxMTYpICYmICgndScgPT0gMTE3KSAm
JiAoJ3YnID09IDExOCkgXA0KICAgIC0gICAgICAmJiAoJ3cnID09IDExOSkgJiYgKCd4JyA9PSAx
MjApICYmICgneScgPT0gMTIxKSAmJiAoJ3onID09IDEyMikgXA0KICAgIC0gICAgICAmJiAoJ3sn
ID09IDEyMykgJiYgKCd8JyA9PSAxMjQpICYmICgnfScgPT0gMTI1KSAmJiAoJ34nID09IDEyNikp
DQogICAgLS8qIFRoZSBjaGFyYWN0ZXIgc2V0IGlzIG5vdCBiYXNlZCBvbiBJU08tNjQ2LiAgKi8N
CiAgICAtI2Vycm9yICJncGVyZiBnZW5lcmF0ZWQgdGFibGVzIGRvbid0IHdvcmsgd2l0aCB0aGlz
IGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0LiBQbGVhc2UgcmVwb3J0IGEgYnVnIHRvIDxidWctZ251
LWdwZXJmQGdudS5vcmc+LiINCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jbGluZSAxMCAic2Ny
aXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIg0KICAgIC1zdHJ1Y3Qga2NvbmZfaWQ7DQogICAgLQ0K
ICAgIC1zdGF0aWMgY29uc3Qgc3RydWN0IGtjb25mX2lkICprY29uZl9pZF9sb29rdXAocmVnaXN0
ZXIgY29uc3QgY2hhciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKTsNCiAgICAtLyog
bWF4aW11bSBrZXkgcmFuZ2UgPSA3MSwgZHVwbGljYXRlcyA9IDAgKi8NCiAgICAtDQogICAgLSNp
ZmRlZiBfX0dOVUNfXw0KICAgIC1fX2lubGluZQ0KICAgIC0jZWxzZQ0KICAgIC0jaWZkZWYgX19j
cGx1c3BsdXMNCiAgICAtaW5saW5lDQogICAgLSNlbmRpZg0KICAgIC0jZW5kaWYNCiAgICAtc3Rh
dGljIHVuc2lnbmVkIGludA0KICAgIC1rY29uZl9pZF9oYXNoIChyZWdpc3RlciBjb25zdCBjaGFy
ICpzdHIsIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBsZW4pDQogICAgLXsNCiAgICAtICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgY2hhciBhc3NvX3ZhbHVlc1tdID0NCiAgICAtICAgIHsNCiAgICAtICAg
ICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsDQogICAgLSAgICAgIDcz
LCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLA0KICAgIC0gICAgICA3MywgNzMs
IDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywNCiAgICAtICAgICAgNzMsIDczLCA3Mywg
NzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsDQogICAgLSAgICAgIDczLCA3MywgNzMsIDczLCA3
MywgNzMsIDczLCA3MywgNzMsIDczLA0KICAgIC0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDcz
LCA3MywgNzMsIDczLCA3MywNCiAgICAtICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMs
IDczLCA3MywgNzMsDQogICAgLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3Mywg
NzMsIDczLA0KICAgIC0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3
MywNCiAgICAtICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCAyNSwgMjUsDQog
ICAgLSAgICAgICAwLCAgMCwgIDAsICA1LCAgMCwgIDAsIDczLCA3MywgIDUsICAwLA0KICAgIC0g
ICAgICAxMCwgIDUsIDQ1LCA3MywgMjAsIDIwLCAgMCwgMTUsIDE1LCA3MywNCiAgICAtICAgICAg
MjAsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsDQogICAgLSAgICAgIDczLCA3
MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLA0KICAgIC0gICAgICA3MywgNzMsIDcz
LCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywNCiAgICAtICAgICAgNzMsIDczLCA3MywgNzMs
IDczLCA3MywgNzMsIDczLCA3MywgNzMsDQogICAgLSAgICAgIDczLCA3MywgNzMsIDczLCA3Mywg
NzMsIDczLCA3MywgNzMsIDczLA0KICAgIC0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3
MywgNzMsIDczLCA3MywNCiAgICAtICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDcz
LCA3MywgNzMsDQogICAgLSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMs
IDczLA0KICAgIC0gICAgICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywN
CiAgICAtICAgICAgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsDQogICAg
LSAgICAgIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLA0KICAgIC0gICAg
ICA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywNCiAgICAtICAgICAgNzMs
IDczLCA3MywgNzMsIDczLCA3MywgNzMsIDczLCA3MywgNzMsDQogICAgLSAgICAgIDczLCA3Mywg
NzMsIDczLCA3MywgNzMNCiAgICAtICAgIH07DQogICAgLSAgcmVnaXN0ZXIgaW50IGh2YWwgPSBs
ZW47DQogICAgLQ0KICAgIC0gIHN3aXRjaCAoaHZhbCkNCiAgICAtICAgIHsNCiAgICAtICAgICAg
ZGVmYXVsdDoNCiAgICAtICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzWyh1bnNpZ25lZCBjaGFy
KXN0clsyXV07DQogICAgLSAgICAgIC8qRkFMTFRIUk9VR0gqLw0KICAgIC0gICAgICBjYXNlIDI6
DQogICAgLSAgICAgIGNhc2UgMToNCiAgICAtICAgICAgICBodmFsICs9IGFzc29fdmFsdWVzWyh1
bnNpZ25lZCBjaGFyKXN0clswXV07DQogICAgLSAgICAgICAgYnJlYWs7DQogICAgLSAgICB9DQog
ICAgLSAgcmV0dXJuIGh2YWwgKyBhc3NvX3ZhbHVlc1sodW5zaWduZWQgY2hhcilzdHJbbGVuIC0g
MV1dOw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190DQogICAg
LSAgew0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjJbc2l6ZW9mKCJpZiIpXTsN
CiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzW3NpemVvZigiaW50IildOw0KICAg
IC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjVbc2l6ZW9mKCJlbmRpZiIpXTsNCiAgICAt
ICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI3W3NpemVvZigiZGVmYXVsdCIpXTsNCiAgICAt
ICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI4W3NpemVvZigidHJpc3RhdGUiKV07DQogICAg
LSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyOVtzaXplb2YoImVuZGNob2ljZSIpXTsNCiAg
ICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxMltzaXplb2YoImRlZl90cmlzdGF0ZSIp
XTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxM1tzaXplb2YoImRlZl9ib29s
IildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjE0W3NpemVvZigiZGVmY29u
ZmlnX2xpc3QiKV07DQogICAgLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMTdbc2l6ZW9m
KCJvbiIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIxOFtzaXplb2YoIm9w
dGlvbmFsIildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIxW3NpemVvZigi
b3B0aW9uIildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjIyW3NpemVvZigi
ZW5kbWVudSIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyM1tzaXplb2Yo
Im1haW5tZW51IildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjI1W3NpemVv
ZigibWVudWNvbmZpZyIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIyN1tz
aXplb2YoIm1vZHVsZXMiKV07DQogICAgLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyMjlb
c2l6ZW9mKCJtZW51IildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjMxW3Np
emVvZigic2VsZWN0IildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjMyW3Np
emVvZigiY29tbWVudCIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzM1tz
aXplb2YoImVudiIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHIzNVtzaXpl
b2YoInJhbmdlIildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjM2W3NpemVv
ZigiY2hvaWNlIildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjM5W3NpemVv
ZigiYm9vbCIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0MVtzaXplb2Yo
InNvdXJjZSIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI0MltzaXplb2Yo
InZpc2libGUiKV07DQogICAgLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDNbc2l6ZW9m
KCJoZXgiKV07DQogICAgLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDZbc2l6ZW9mKCJj
b25maWciKV07DQogICAgLSAgICBjaGFyIGtjb25mX2lkX3N0cmluZ3Nfc3RyNDdbc2l6ZW9mKCJi
b29sZWFuIildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjUxW3NpemVvZigi
c3RyaW5nIildOw0KICAgIC0gICAgY2hhciBrY29uZl9pZF9zdHJpbmdzX3N0cjU0W3NpemVvZigi
aGVscCIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI1NltzaXplb2YoInBy
b21wdCIpXTsNCiAgICAtICAgIGNoYXIga2NvbmZfaWRfc3RyaW5nc19zdHI3MltzaXplb2YoImRl
cGVuZHMiKV07DQogICAgLSAgfTsNCiAgICAtc3RhdGljIGNvbnN0IHN0cnVjdCBrY29uZl9pZF9z
dHJpbmdzX3Qga2NvbmZfaWRfc3RyaW5nc19jb250ZW50cyA9DQogICAgLSAgew0KICAgIC0gICAg
ImlmIiwNCiAgICAtICAgICJpbnQiLA0KICAgIC0gICAgImVuZGlmIiwNCiAgICAtICAgICJkZWZh
dWx0IiwNCiAgICAtICAgICJ0cmlzdGF0ZSIsDQogICAgLSAgICAiZW5kY2hvaWNlIiwNCiAgICAt
ICAgICJkZWZfdHJpc3RhdGUiLA0KICAgIC0gICAgImRlZl9ib29sIiwNCiAgICAtICAgICJkZWZj
b25maWdfbGlzdCIsDQogICAgLSAgICAib24iLA0KICAgIC0gICAgIm9wdGlvbmFsIiwNCiAgICAt
ICAgICJvcHRpb24iLA0KICAgIC0gICAgImVuZG1lbnUiLA0KICAgIC0gICAgIm1haW5tZW51IiwN
CiAgICAtICAgICJtZW51Y29uZmlnIiwNCiAgICAtICAgICJtb2R1bGVzIiwNCiAgICAtICAgICJt
ZW51IiwNCiAgICAtICAgICJzZWxlY3QiLA0KICAgIC0gICAgImNvbW1lbnQiLA0KICAgIC0gICAg
ImVudiIsDQogICAgLSAgICAicmFuZ2UiLA0KICAgIC0gICAgImNob2ljZSIsDQogICAgLSAgICAi
Ym9vbCIsDQogICAgLSAgICAic291cmNlIiwNCiAgICAtICAgICJ2aXNpYmxlIiwNCiAgICAtICAg
ICJoZXgiLA0KICAgIC0gICAgImNvbmZpZyIsDQogICAgLSAgICAiYm9vbGVhbiIsDQogICAgLSAg
ICAic3RyaW5nIiwNCiAgICAtICAgICJoZWxwIiwNCiAgICAtICAgICJwcm9tcHQiLA0KICAgIC0g
ICAgImRlcGVuZHMiDQogICAgLSAgfTsNCiAgICAtI2RlZmluZSBrY29uZl9pZF9zdHJpbmdzICgo
Y29uc3QgY2hhciAqKSAma2NvbmZfaWRfc3RyaW5nc19jb250ZW50cykNCiAgICAtI2lmZGVmIF9f
R05VQ19fDQogICAgLV9faW5saW5lDQogICAgLSNpZiBkZWZpbmVkIF9fR05VQ19TVERDX0lOTElO
RV9fIHx8IGRlZmluZWQgX19HTlVDX0dOVV9JTkxJTkVfXw0KICAgIC1fX2F0dHJpYnV0ZV9fICgo
X19nbnVfaW5saW5lX18pKQ0KICAgIC0jZW5kaWYNCiAgICAtI2VuZGlmDQogICAgLWNvbnN0IHN0
cnVjdCBrY29uZl9pZCAqDQogICAgLWtjb25mX2lkX2xvb2t1cCAocmVnaXN0ZXIgY29uc3QgY2hh
ciAqc3RyLCByZWdpc3RlciB1bnNpZ25lZCBpbnQgbGVuKQ0KICAgIC17DQogICAgLSAgZW51bQ0K
ICAgIC0gICAgew0KICAgIC0gICAgICBUT1RBTF9LRVlXT1JEUyA9IDMyLA0KICAgIC0gICAgICBN
SU5fV09SRF9MRU5HVEggPSAyLA0KICAgIC0gICAgICBNQVhfV09SRF9MRU5HVEggPSAxNCwNCiAg
ICAtICAgICAgTUlOX0hBU0hfVkFMVUUgPSAyLA0KICAgIC0gICAgICBNQVhfSEFTSF9WQUxVRSA9
IDcyDQogICAgLSAgICB9Ow0KICAgIC0NCiAgICAtICBzdGF0aWMgY29uc3Qgc3RydWN0IGtjb25m
X2lkIHdvcmRsaXN0W10gPQ0KICAgIC0gICAgew0KICAgIC0gICAgICB7LTF9LCB7LTF9LA0KICAg
IC0jbGluZSAyNSAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGlu
dCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmlu
Z3Nfc3RyMiwJCVRfSUYsCQlURl9DT01NQU5EfFRGX1BBUkFNfSwNCiAgICAtI2xpbmUgMzYgInNj
cmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3Ry
dWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjMsCQlUX1RZ
UEUsCQlURl9DT01NQU5ELCBTX0lOVH0sDQogICAgLSAgICAgIHstMX0sDQogICAgLSNsaW5lIDI2
ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiDQogICAgLSAgICAgIHsoaW50KShsb25nKSYo
KHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI1LAkJ
VF9FTkRJRiwJVEZfQ09NTUFORH0sDQogICAgLSAgICAgIHstMX0sDQogICAgLSNsaW5lIDI5ICJz
Y3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiDQogICAgLSAgICAgIHsoaW50KShsb25nKSYoKHN0
cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI3LAlUX0RF
RkFVTFQsCVRGX0NPTU1BTkQsIFNfVU5LTk9XTn0sDQogICAgLSNsaW5lIDMxICJzY3JpcHRzL2tj
b25maWcvemNvbmYuZ3BlcmYiDQogICAgLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29u
Zl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI4LAlUX1RZUEUsCQlURl9D
T01NQU5ELCBTX1RSSVNUQVRFfSwNCiAgICAtI2xpbmUgMjAgInNjcmlwdHMva2NvbmZpZy96Y29u
Zi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmlu
Z3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjksCVRfRU5EQ0hPSUNFLAlURl9DT01NQU5E
fSwNCiAgICAtICAgICAgey0xfSwgey0xfSwNCiAgICAtI2xpbmUgMzIgInNjcmlwdHMva2NvbmZp
Zy96Y29uZi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lk
X3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjEyLAlUX0RFRkFVTFQsCVRGX0NP
TU1BTkQsIFNfVFJJU1RBVEV9LA0KICAgIC0jbGluZSAzNSAic2NyaXB0cy9rY29uZmlnL3pjb25m
LmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5n
c190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTMsCVRfREVGQVVMVCwJVEZfQ09NTUFORCwg
U19CT09MRUFOfSwNCiAgICAtI2xpbmUgNDUgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiIN
CiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTAp
LT5rY29uZl9pZF9zdHJpbmdzX3N0cjE0LAlUX09QVF9ERUZDT05GSUdfTElTVCxURl9PUFRJT059
LA0KICAgIC0gICAgICB7LTF9LCB7LTF9LA0KICAgIC0jbGluZSA0MyAic2NyaXB0cy9rY29uZmln
L3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRf
c3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMTcsCQlUX09OLAkJVEZfUEFSQU19
LA0KICAgIC0jbGluZSAyOCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAg
ICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lk
X3N0cmluZ3Nfc3RyMTgsCVRfT1BUSU9OQUwsCVRGX0NPTU1BTkR9LA0KICAgIC0gICAgICB7LTF9
LCB7LTF9LA0KICAgIC0jbGluZSA0MiAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIg0KICAg
IC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtj
b25mX2lkX3N0cmluZ3Nfc3RyMjEsCQlUX09QVElPTiwJVEZfQ09NTUFORH0sDQogICAgLSNsaW5l
IDE3ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiDQogICAgLSAgICAgIHsoaW50KShsb25n
KSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIy
MiwJVF9FTkRNRU5VLAlURl9DT01NQU5EfSwNCiAgICAtI2xpbmUgMTUgInNjcmlwdHMva2NvbmZp
Zy96Y29uZi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lk
X3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjIzLAlUX01BSU5NRU5VLAlURl9D
T01NQU5EfSwNCiAgICAtICAgICAgey0xfSwNCiAgICAtI2xpbmUgMjMgInNjcmlwdHMva2NvbmZp
Zy96Y29uZi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lk
X3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjI1LAlUX01FTlVDT05GSUcsCVRG
X0NPTU1BTkR9LA0KICAgIC0gICAgICB7LTF9LA0KICAgIC0jbGluZSA0NCAic2NyaXB0cy9rY29u
ZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZf
aWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMjcsCVRfT1BUX01PRFVMRVMs
CVRGX09QVElPTn0sDQogICAgLSAgICAgIHstMX0sDQogICAgLSNsaW5lIDE2ICJzY3JpcHRzL2tj
b25maWcvemNvbmYuZ3BlcmYiDQogICAgLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29u
Zl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHIyOSwJCVRfTUVOVSwJCVRG
X0NPTU1BTkR9LA0KICAgIC0gICAgICB7LTF9LA0KICAgIC0jbGluZSAzOSAic2NyaXB0cy9rY29u
ZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZf
aWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzEsCQlUX1NFTEVDVCwJVEZf
Q09NTUFORH0sDQogICAgLSNsaW5lIDIxICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiDQog
ICAgLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+
a2NvbmZfaWRfc3RyaW5nc19zdHIzMiwJVF9DT01NRU5ULAlURl9DT01NQU5EfSwNCiAgICAtI2xp
bmUgNDYgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxv
bmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0
cjMzLAkJVF9PUFRfRU5WLAlURl9PUFRJT059LA0KICAgIC0gICAgICB7LTF9LA0KICAgIC0jbGlu
ZSA0MCAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9u
ZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3Ry
MzUsCQlUX1JBTkdFLAlURl9DT01NQU5EfSwNCiAgICAtI2xpbmUgMTkgInNjcmlwdHMva2NvbmZp
Zy96Y29uZi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lk
X3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjM2LAkJVF9DSE9JQ0UsCVRGX0NP
TU1BTkR9LA0KICAgIC0gICAgICB7LTF9LCB7LTF9LA0KICAgIC0jbGluZSAzMyAic2NyaXB0cy9r
Y29uZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2Nv
bmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyMzksCQlUX1RZUEUsCQlU
Rl9DT01NQU5ELCBTX0JPT0xFQU59LA0KICAgIC0gICAgICB7LTF9LA0KICAgIC0jbGluZSAxOCAi
c2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9uZykmKChz
dHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDEsCQlU
X1NPVVJDRSwJVEZfQ09NTUFORH0sDQogICAgLSNsaW5lIDQxICJzY3JpcHRzL2tjb25maWcvemNv
bmYuZ3BlcmYiDQogICAgLSAgICAgIHsoaW50KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJp
bmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5nc19zdHI0MiwJVF9WSVNJQkxFLAlURl9DT01NQU5E
fSwNCiAgICAtI2xpbmUgMzcgInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVyZiINCiAgICAtICAg
ICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAqKTApLT5rY29uZl9p
ZF9zdHJpbmdzX3N0cjQzLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19IRVh9LA0KICAgIC0gICAg
ICB7LTF9LCB7LTF9LA0KICAgIC0jbGluZSAyMiAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJm
Ig0KICAgIC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICop
MCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNDYsCQlUX0NPTkZJRywJVEZfQ09NTUFORH0sDQogICAg
LSNsaW5lIDM0ICJzY3JpcHRzL2tjb25maWcvemNvbmYuZ3BlcmYiDQogICAgLSAgICAgIHsoaW50
KShsb25nKSYoKHN0cnVjdCBrY29uZl9pZF9zdHJpbmdzX3QgKikwKS0+a2NvbmZfaWRfc3RyaW5n
c19zdHI0NywJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19CT09MRUFOfSwNCiAgICAtICAgICAgey0x
fSwgey0xfSwgey0xfSwNCiAgICAtI2xpbmUgMzggInNjcmlwdHMva2NvbmZpZy96Y29uZi5ncGVy
ZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lkX3N0cmluZ3NfdCAq
KTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjUxLAkJVF9UWVBFLAkJVEZfQ09NTUFORCwgU19TVFJJ
Tkd9LA0KICAgIC0gICAgICB7LTF9LCB7LTF9LA0KICAgIC0jbGluZSAyNCAic2NyaXB0cy9rY29u
ZmlnL3pjb25mLmdwZXJmIg0KICAgIC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZf
aWRfc3RyaW5nc190ICopMCktPmtjb25mX2lkX3N0cmluZ3Nfc3RyNTQsCQlUX0hFTFAsCQlURl9D
T01NQU5EfSwNCiAgICAtICAgICAgey0xfSwNCiAgICAtI2xpbmUgMzAgInNjcmlwdHMva2NvbmZp
Zy96Y29uZi5ncGVyZiINCiAgICAtICAgICAgeyhpbnQpKGxvbmcpJigoc3RydWN0IGtjb25mX2lk
X3N0cmluZ3NfdCAqKTApLT5rY29uZl9pZF9zdHJpbmdzX3N0cjU2LAkJVF9QUk9NUFQsCVRGX0NP
TU1BTkR9LA0KICAgIC0gICAgICB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7
LTF9LCB7LTF9LCB7LTF9LA0KICAgIC0gICAgICB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9LCB7LTF9
LCB7LTF9LA0KICAgIC0jbGluZSAyNyAic2NyaXB0cy9rY29uZmlnL3pjb25mLmdwZXJmIg0KICAg
IC0gICAgICB7KGludCkobG9uZykmKChzdHJ1Y3Qga2NvbmZfaWRfc3RyaW5nc190ICopMCktPmtj
b25mX2lkX3N0cmluZ3Nfc3RyNzIsCVRfREVQRU5EUywJVEZfQ09NTUFORH0NCiAgICAtICAgIH07
DQogICAgLQ0KICAgIC0gIGlmIChsZW4gPD0gTUFYX1dPUkRfTEVOR1RIICYmIGxlbiA+PSBNSU5f
V09SRF9MRU5HVEgpDQogICAgLSAgICB7DQogICAgLSAgICAgIHJlZ2lzdGVyIGludCBrZXkgPSBr
Y29uZl9pZF9oYXNoIChzdHIsIGxlbik7DQogICAgLQ0KICAgIC0gICAgICBpZiAoa2V5IDw9IE1B
WF9IQVNIX1ZBTFVFICYmIGtleSA+PSAwKQ0KICAgIC0gICAgICAgIHsNCiAgICAtICAgICAgICAg
IHJlZ2lzdGVyIGludCBvID0gd29yZGxpc3Rba2V5XS5uYW1lOw0KICAgIC0gICAgICAgICAgaWYg
KG8gPj0gMCkNCiAgICAtICAgICAgICAgICAgew0KICAgIC0gICAgICAgICAgICAgIHJlZ2lzdGVy
IGNvbnN0IGNoYXIgKnMgPSBvICsga2NvbmZfaWRfc3RyaW5nczsNCiAgICAtDQogICAgLSAgICAg
ICAgICAgICAgaWYgKCpzdHIgPT0gKnMgJiYgIXN0cm5jbXAgKHN0ciArIDEsIHMgKyAxLCBsZW4g
LSAxKSAmJiBzW2xlbl0gPT0gJ1wwJykNCiAgICAtICAgICAgICAgICAgICAgIHJldHVybiAmd29y
ZGxpc3Rba2V5XTsNCiAgICAtICAgICAgICAgICAgfQ0KICAgIC0gICAgICAgIH0NCiAgICAtICAg
IH0NCiAgICAtICByZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0jbGluZSA0NyAic2NyaXB0cy9rY29u
ZmlnL3pjb25mLmdwZXJmIg0KICAgIC0NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
L3pjb25mLmwgYi9zdXBwb3J0L2tjb25maWcvemNvbmYubA0KICAgIGRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NA0KICAgIGluZGV4IDFhOWY1M2UuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tj
b25maWcvemNvbmYubA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwzNjMgKzAsMCBAQA0K
ICAgIC0lb3B0aW9uIG5vc3RkaW5pdCBub3l5d3JhcCBuZXZlci1pbnRlcmFjdGl2ZSBmdWxsIGVj
cw0KICAgIC0lb3B0aW9uIDhiaXQgbm9kZWZhdWx0IHBlcmYtcmVwb3J0IHBlcmYtcmVwb3J0DQog
ICAgLSVvcHRpb24gbm9pbnB1dA0KICAgIC0leCBDT01NQU5EIEhFTFAgU1RSSU5HIFBBUkFNDQog
ICAgLSV7DQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwg
PHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAtICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgPGxp
bWl0cy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5o
Pg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNpbmNsdWRlIDx1bmlzdGQuaD4NCiAg
ICAtDQogICAgLSNpbmNsdWRlICJsa2MuaCINCiAgICAtDQogICAgLSNkZWZpbmUgU1RBUlRfU1RS
U0laRQkxNg0KICAgIC0NCiAgICAtc3RhdGljIHN0cnVjdCB7DQogICAgLQlzdHJ1Y3QgZmlsZSAq
ZmlsZTsNCiAgICAtCWludCBsaW5lbm87DQogICAgLX0gY3VycmVudF9wb3M7DQogICAgLQ0KICAg
IC1zdGF0aWMgY2hhciAqdGV4dDsNCiAgICAtc3RhdGljIGludCB0ZXh0X3NpemUsIHRleHRfYXNp
emU7DQogICAgLQ0KICAgIC1zdHJ1Y3QgYnVmZmVyIHsNCiAgICAtICAgICAgICBzdHJ1Y3QgYnVm
ZmVyICpwYXJlbnQ7DQogICAgLSAgICAgICAgWVlfQlVGRkVSX1NUQVRFIHN0YXRlOw0KICAgIC19
Ow0KICAgIC0NCiAgICAtc3RydWN0IGJ1ZmZlciAqY3VycmVudF9idWY7DQogICAgLQ0KICAgIC1z
dGF0aWMgaW50IGxhc3RfdHMsIGZpcnN0X3RzOw0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNv
bmZfZW5kaGVscCh2b2lkKTsNCiAgICAtc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsN
CiAgICAtDQogICAgLXN0YXRpYyB2b2lkIG5ld19zdHJpbmcodm9pZCkNCiAgICAtew0KICAgIC0J
dGV4dCA9IHhtYWxsb2MoU1RBUlRfU1RSU0laRSk7DQogICAgLQl0ZXh0X2FzaXplID0gU1RBUlRf
U1RSU0laRTsNCiAgICAtCXRleHRfc2l6ZSA9IDA7DQogICAgLQkqdGV4dCA9IDA7DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBp
bnQgc2l6ZSkNCiAgICAtew0KICAgIC0JaW50IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSAr
IDE7DQogICAgLQlpZiAobmV3X3NpemUgPiB0ZXh0X2FzaXplKSB7DQogICAgLQkJbmV3X3NpemUg
Kz0gU1RBUlRfU1RSU0laRSAtIDE7DQogICAgLQkJbmV3X3NpemUgJj0gLVNUQVJUX1NUUlNJWkU7
DQogICAgLQkJdGV4dCA9IHJlYWxsb2ModGV4dCwgbmV3X3NpemUpOw0KICAgIC0JCXRleHRfYXNp
emUgPSBuZXdfc2l6ZTsNCiAgICAtCX0NCiAgICAtCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBz
dHIsIHNpemUpOw0KICAgIC0JdGV4dF9zaXplICs9IHNpemU7DQogICAgLQl0ZXh0W3RleHRfc2l6
ZV0gPSAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29u
c3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkNCiAgICAtew0KICAgIC0JdGV4dCA9IHhtYWxsb2Moc2l6
ZSArIDEpOw0KICAgIC0JbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7DQogICAgLQl0ZXh0W3NpemVd
ID0gMDsNCiAgICAtfQ0KICAgIC0lfQ0KICAgIC0NCiAgICAtbglbQS1aYS16MC05X10NCiAgICAt
DQogICAgLSUlDQogICAgLQlpbnQgc3RyID0gMDsNCiAgICAtCWludCB0cywgaTsNCiAgICAtDQog
ICAgLVsgXHRdKiMuKlxuCXwNCiAgICAtWyBcdF0qXG4Jew0KICAgIC0JY3VycmVudF9maWxlLT5s
aW5lbm8rKzsNCiAgICAtCXJldHVybiBUX0VPTDsNCiAgICAtfQ0KICAgIC1bIFx0XSojLioNCiAg
ICAtDQogICAgLQ0KICAgIC1bIFx0XSsJew0KICAgIC0JQkVHSU4oQ09NTUFORCk7DQogICAgLX0N
CiAgICAtDQogICAgLS4Jew0KICAgIC0JdW5wdXQoeXl0ZXh0WzBdKTsNCiAgICAtCUJFR0lOKENP
TU1BTkQpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtPENPTU1BTkQ+ew0KICAgIC0Je259
Kwl7DQogICAgLQkJY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5
eXRleHQsIHl5bGVuZyk7DQogICAgLQkJQkVHSU4oUEFSQU0pOw0KICAgIC0JCWN1cnJlbnRfcG9z
LmZpbGUgPSBjdXJyZW50X2ZpbGU7DQogICAgLQkJY3VycmVudF9wb3MubGluZW5vID0gY3VycmVu
dF9maWxlLT5saW5lbm87DQogICAgLQkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX0NPTU1BTkQp
IHsNCiAgICAtCQkJemNvbmZsdmFsLmlkID0gaWQ7DQogICAgLQkJCXJldHVybiBpZC0+dG9rZW47
DQogICAgLQkJfQ0KICAgIC0JCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7DQogICAgLQkJ
emNvbmZsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgLQkJcmV0dXJuIFRfV09SRDsNCiAgICAtCX0N
CiAgICAtCS4NCiAgICAtCVxuCXsNCiAgICAtCQlCRUdJTihJTklUSUFMKTsNCiAgICAtCQljdXJy
ZW50X2ZpbGUtPmxpbmVubysrOw0KICAgIC0JCXJldHVybiBUX0VPTDsNCiAgICAtCX0NCiAgICAt
fQ0KICAgIC0NCiAgICAtPFBBUkFNPnsNCiAgICAtCSImJiIJcmV0dXJuIFRfQU5EOw0KICAgIC0J
Inx8IglyZXR1cm4gVF9PUjsNCiAgICAtCSIoIglyZXR1cm4gVF9PUEVOX1BBUkVOOw0KICAgIC0J
IikiCXJldHVybiBUX0NMT1NFX1BBUkVOOw0KICAgIC0JIiEiCXJldHVybiBUX05PVDsNCiAgICAt
CSI9IglyZXR1cm4gVF9FUVVBTDsNCiAgICAtCSIhPSIJcmV0dXJuIFRfVU5FUVVBTDsNCiAgICAt
CVwifFwnCXsNCiAgICAtCQlzdHIgPSB5eXRleHRbMF07DQogICAgLQkJbmV3X3N0cmluZygpOw0K
ICAgIC0JCUJFR0lOKFNUUklORyk7DQogICAgLQl9DQogICAgLQlcbglCRUdJTihJTklUSUFMKTsg
Y3VycmVudF9maWxlLT5saW5lbm8rKzsgcmV0dXJuIFRfRU9MOw0KICAgIC0JLS0tCS8qIGlnbm9y
ZSAqLw0KICAgIC0JKHtufXxbLS8uXSkrCXsNCiAgICAtCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQg
KmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5nKTsNCiAgICAtCQlpZiAoaWQgJiYg
aWQtPmZsYWdzICYgVEZfUEFSQU0pIHsNCiAgICAtCQkJemNvbmZsdmFsLmlkID0gaWQ7DQogICAg
LQkJCXJldHVybiBpZC0+dG9rZW47DQogICAgLQkJfQ0KICAgIC0JCWFsbG9jX3N0cmluZyh5eXRl
eHQsIHl5bGVuZyk7DQogICAgLQkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgLQkJcmV0
dXJuIFRfV09SRDsNCiAgICAtCX0NCiAgICAtCSMuKgkvKiBjb21tZW50ICovDQogICAgLQlcXFxu
CWN1cnJlbnRfZmlsZS0+bGluZW5vKys7DQogICAgLQkuDQogICAgLQk8PEVPRj4+IHsNCiAgICAt
CQlCRUdJTihJTklUSUFMKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtPFNUUklORz57
DQogICAgLQlbXiciXFxcbl0rL1xuCXsNCiAgICAtCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXls
ZW5nKTsNCiAgICAtCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICAtCQlyZXR1cm4gVF9X
T1JEX1FVT1RFOw0KICAgIC0JfQ0KICAgIC0JW14nIlxcXG5dKwl7DQogICAgLQkJYXBwZW5kX3N0
cmluZyh5eXRleHQsIHl5bGVuZyk7DQogICAgLQl9DQogICAgLQlcXC4/L1xuCXsNCiAgICAtCQlh
cHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOw0KICAgIC0JCXpjb25mbHZhbC5z
dHJpbmcgPSB0ZXh0Ow0KICAgIC0JCXJldHVybiBUX1dPUkRfUVVPVEU7DQogICAgLQl9DQogICAg
LQlcXC4/CXsNCiAgICAtCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOw0K
ICAgIC0JfQ0KICAgIC0JXCd8XCIJew0KICAgIC0JCWlmIChzdHIgPT0geXl0ZXh0WzBdKSB7DQog
ICAgLQkJCUJFR0lOKFBBUkFNKTsNCiAgICAtCQkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7DQog
ICAgLQkJCXJldHVybiBUX1dPUkRfUVVPVEU7DQogICAgLQkJfSBlbHNlDQogICAgLQkJCWFwcGVu
ZF9zdHJpbmcoeXl0ZXh0LCAxKTsNCiAgICAtCX0NCiAgICAtCVxuCXsNCiAgICAtCQlwcmludGYo
IiVzOiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5ncyBub3Qgc3VwcG9ydGVkXG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtCQljdXJyZW50X2ZpbGUtPmxpbmVu
bysrOw0KICAgIC0JCUJFR0lOKElOSVRJQUwpOw0KICAgIC0JCXJldHVybiBUX0VPTDsNCiAgICAt
CX0NCiAgICAtCTw8RU9GPj4Jew0KICAgIC0JCUJFR0lOKElOSVRJQUwpOw0KICAgIC0JfQ0KICAg
IC19DQogICAgLQ0KICAgIC08SEVMUD57DQogICAgLQlbIFx0XSsJew0KICAgIC0JCXRzID0gMDsN
CiAgICAtCQlmb3IgKGkgPSAwOyBpIDwgeXlsZW5nOyBpKyspIHsNCiAgICAtCQkJaWYgKHl5dGV4
dFtpXSA9PSAnXHQnKQ0KICAgIC0JCQkJdHMgPSAodHMgJiB+NykgKyA4Ow0KICAgIC0JCQllbHNl
DQogICAgLQkJCQl0cysrOw0KICAgIC0JCX0NCiAgICAtCQlsYXN0X3RzID0gdHM7DQogICAgLQkJ
aWYgKGZpcnN0X3RzKSB7DQogICAgLQkJCWlmICh0cyA8IGZpcnN0X3RzKSB7DQogICAgLQkJCQl6
Y29uZl9lbmRoZWxwKCk7DQogICAgLQkJCQlyZXR1cm4gVF9IRUxQVEVYVDsNCiAgICAtCQkJfQ0K
ICAgIC0JCQl0cyAtPSBmaXJzdF90czsNCiAgICAtCQkJd2hpbGUgKHRzID4gOCkgew0KICAgIC0J
CQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCA4KTsNCiAgICAtCQkJCXRzIC09IDg7DQogICAg
LQkJCX0NCiAgICAtCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCB0cyk7DQogICAgLQkJfQ0K
ICAgIC0JfQ0KICAgIC0JWyBcdF0qXG4vW14gXHRcbl0gew0KICAgIC0JCWN1cnJlbnRfZmlsZS0+
bGluZW5vKys7DQogICAgLQkJemNvbmZfZW5kaGVscCgpOw0KICAgIC0JCXJldHVybiBUX0hFTFBU
RVhUOw0KICAgIC0JfQ0KICAgIC0JWyBcdF0qXG4Jew0KICAgIC0JCWN1cnJlbnRfZmlsZS0+bGlu
ZW5vKys7DQogICAgLQkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsNCiAgICAtCX0NCiAgICAtCVte
IFx0XG5dLiogew0KICAgIC0JCXdoaWxlICh5eWxlbmcpIHsNCiAgICAtCQkJaWYgKCh5eXRleHRb
eXlsZW5nLTFdICE9ICcgJykgJiYgKHl5dGV4dFt5eWxlbmctMV0gIT0gJ1x0JykpDQogICAgLQkJ
CQlicmVhazsNCiAgICAtCQkJeXlsZW5nLS07DQogICAgLQkJfQ0KICAgIC0JCWFwcGVuZF9zdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpOw0KICAgIC0JCWlmICghZmlyc3RfdHMpDQogICAgLQkJCWZpcnN0
X3RzID0gbGFzdF90czsNCiAgICAtCX0NCiAgICAtCTw8RU9GPj4Jew0KICAgIC0JCXpjb25mX2Vu
ZGhlbHAoKTsNCiAgICAtCQlyZXR1cm4gVF9IRUxQVEVYVDsNCiAgICAtCX0NCiAgICAtfQ0KICAg
IC0NCiAgICAtPDxFT0Y+Pgl7DQogICAgLQlpZiAoY3VycmVudF9maWxlKSB7DQogICAgLQkJemNv
bmZfZW5kZmlsZSgpOw0KICAgIC0JCXJldHVybiBUX0VPTDsNCiAgICAtCX0NCiAgICAtCWZjbG9z
ZSh5eWluKTsNCiAgICAtCXl5dGVybWluYXRlKCk7DQogICAgLX0NCiAgICAtDQogICAgLSUlDQog
ICAgLXZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpDQogICAgLXsNCiAgICAtCW5ld19zdHJpbmco
KTsNCiAgICAtCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7DQogICAgLQlCRUdJTihIRUxQKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKQ0KICAgIC17
DQogICAgLQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICAtCUJFR0lOKElOSVRJQUwpOw0K
ICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogVHJ5IHRvIG9wZW4gc3BlY2lm
aWVkIGZpbGUgd2l0aCBmb2xsb3dpbmcgbmFtZXM6DQogICAgLSAqIC4vbmFtZQ0KICAgIC0gKiAk
KHNyY3RyZWUpL25hbWUNCiAgICAtICogVGhlIGxhdHRlciBpcyB1c2VkIHdoZW4gc3JjdHJlZSBp
cyBzZXBhcmF0ZSBmcm9tIG9ianRyZWUNCiAgICAtICogd2hlbiBjb21waWxpbmcgdGhlIGtlcm5l
bC4NCiAgICAtICogUmV0dXJuIE5VTEwgaWYgZmlsZSBpcyBub3QgZm91bmQuDQogICAgLSAqLw0K
ICAgIC1GSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKQ0KICAgIC17DQogICAgLQlj
aGFyICplbnYsIGZ1bGxuYW1lW1BBVEhfTUFYKzFdOw0KICAgIC0JRklMRSAqZjsNCiAgICAtDQog
ICAgLQlmID0gZm9wZW4obmFtZSwgInIiKTsNCiAgICAtCWlmICghZiAmJiBuYW1lICE9IE5VTEwg
JiYgbmFtZVswXSAhPSAnLycpIHsNCiAgICAtCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7DQogICAg
LQkJaWYgKGVudikgew0KICAgIC0JCQlzcHJpbnRmKGZ1bGxuYW1lLCAiJXMvJXMiLCBlbnYsIG5h
bWUpOw0KICAgIC0JCQlmID0gZm9wZW4oZnVsbG5hbWUsICJyIik7DQogICAgLQkJfQ0KICAgIC0J
fQ0KICAgIC0JcmV0dXJuIGY7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgemNvbmZfaW5pdHNj
YW4oY29uc3QgY2hhciAqbmFtZSkNCiAgICAtew0KICAgIC0JeXlpbiA9IHpjb25mX2ZvcGVuKG5h
bWUpOw0KICAgIC0JaWYgKCF5eWluKSB7DQogICAgLQkJcHJpbnRmKCJjYW4ndCBmaW5kIGZpbGUg
JXNcbiIsIG5hbWUpOw0KICAgIC0JCWV4aXQoMSk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JY3Vy
cmVudF9idWYgPSB4bWFsbG9jKHNpemVvZigqY3VycmVudF9idWYpKTsNCiAgICAtCW1lbXNldChj
dXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOw0KICAgIC0NCiAgICAtCWN1cnJl
bnRfZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOw0KICAgIC0JY3VycmVudF9maWxlLT5saW5lbm8g
PSAxOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIg
Km5hbWUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBmaWxlICppdGVyOw0KICAgIC0Jc3RydWN0IGZp
bGUgKmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsNCiAgICAtCXN0cnVjdCBidWZmZXIgKmJ1ZiA9
IHhtYWxsb2Moc2l6ZW9mKCpidWYpKTsNCiAgICAtCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVm
KSk7DQogICAgLQ0KICAgIC0JY3VycmVudF9idWYtPnN0YXRlID0gWVlfQ1VSUkVOVF9CVUZGRVI7
DQogICAgLQl5eWluID0gemNvbmZfZm9wZW4oZmlsZS0+bmFtZSk7DQogICAgLQlpZiAoIXl5aW4p
IHsNCiAgICAtCQlwcmludGYoIiVzOiVkOiBjYW4ndCBvcGVuIGZpbGUgXCIlc1wiXG4iLA0KICAg
IC0JCSAgICB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBmaWxlLT5uYW1lKTsNCiAg
ICAtCQlleGl0KDEpOw0KICAgIC0JfQ0KICAgIC0JeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9jcmVh
dGVfYnVmZmVyKHl5aW4sIFlZX0JVRl9TSVpFKSk7DQogICAgLQlidWYtPnBhcmVudCA9IGN1cnJl
bnRfYnVmOw0KICAgIC0JY3VycmVudF9idWYgPSBidWY7DQogICAgLQ0KICAgIC0JZm9yIChpdGVy
ID0gY3VycmVudF9maWxlLT5wYXJlbnQ7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5wYXJlbnQgKSB7DQog
ICAgLQkJaWYgKCFzdHJjbXAoY3VycmVudF9maWxlLT5uYW1lLGl0ZXItPm5hbWUpICkgew0KICAg
IC0JCQlwcmludGYoIiVzOiVkOiByZWN1cnNpdmUgaW5jbHVzaW9uIGRldGVjdGVkLiAiDQogICAg
LQkJCSAgICAgICAiSW5jbHVzaW9uIHBhdGg6XG4gIGN1cnJlbnQgZmlsZSA6ICclcydcbiIsDQog
ICAgLQkJCSAgICAgICB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLA0KICAgIC0JCQkg
ICAgICAgemNvbmZfY3VybmFtZSgpKTsNCiAgICAtCQkJaXRlciA9IGN1cnJlbnRfZmlsZS0+cGFy
ZW50Ow0KICAgIC0JCQl3aGlsZSAoaXRlciAmJiBcDQogICAgLQkJCSAgICAgICBzdHJjbXAoaXRl
ci0+bmFtZSxjdXJyZW50X2ZpbGUtPm5hbWUpKSB7DQogICAgLQkJCQlwcmludGYoIiAgaW5jbHVk
ZWQgZnJvbTogJyVzOiVkJ1xuIiwNCiAgICAtCQkJCSAgICAgICBpdGVyLT5uYW1lLCBpdGVyLT5s
aW5lbm8tMSk7DQogICAgLQkJCQlpdGVyID0gaXRlci0+cGFyZW50Ow0KICAgIC0JCQl9DQogICAg
LQkJCWlmIChpdGVyKQ0KICAgIC0JCQkJcHJpbnRmKCIgIGluY2x1ZGVkIGZyb206ICclczolZCdc
biIsDQogICAgLQkJCQkgICAgICAgaXRlci0+bmFtZSwgaXRlci0+bGluZW5vKzEpOw0KICAgIC0J
CQlleGl0KDEpOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWZpbGUtPmxpbmVubyA9IDE7DQog
ICAgLQlmaWxlLT5wYXJlbnQgPSBjdXJyZW50X2ZpbGU7DQogICAgLQljdXJyZW50X2ZpbGUgPSBm
aWxlOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQp
DQogICAgLXsNCiAgICAtCXN0cnVjdCBidWZmZXIgKnBhcmVudDsNCiAgICAtDQogICAgLQljdXJy
ZW50X2ZpbGUgPSBjdXJyZW50X2ZpbGUtPnBhcmVudDsNCiAgICAtDQogICAgLQlwYXJlbnQgPSBj
dXJyZW50X2J1Zi0+cGFyZW50Ow0KICAgIC0JaWYgKHBhcmVudCkgew0KICAgIC0JCWZjbG9zZSh5
eWluKTsNCiAgICAtCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsNCiAgICAt
CQl5eV9zd2l0Y2hfdG9fYnVmZmVyKHBhcmVudC0+c3RhdGUpOw0KICAgIC0JfQ0KICAgIC0JZnJl
ZShjdXJyZW50X2J1Zik7DQogICAgLQljdXJyZW50X2J1ZiA9IHBhcmVudDsNCiAgICAtfQ0KICAg
IC0NCiAgICAtaW50IHpjb25mX2xpbmVubyh2b2lkKQ0KICAgIC17DQogICAgLQlyZXR1cm4gY3Vy
cmVudF9wb3MubGluZW5vOw0KICAgIC19DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICp6Y29uZl9j
dXJuYW1lKHZvaWQpDQogICAgLXsNCiAgICAtCXJldHVybiBjdXJyZW50X3Bvcy5maWxlID8gY3Vy
cmVudF9wb3MuZmlsZS0+bmFtZSA6ICI8bm9uZT4iOw0KICAgIC19DQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy96Y29uZi5sZXguY19zaGlwcGVkIGIvc3VwcG9ydC9rY29uZmlnL3pj
b25mLmxleC5jX3NoaXBwZWQNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCBhMDUyMWFhLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnL3pjb25mLmxleC5j
X3NoaXBwZWQNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMjQyMCArMCwwIEBADQogICAg
LQ0KICAgIC0jbGluZSAzICJzY3JpcHRzL2tjb25maWcvemNvbmYubGV4LmNfc2hpcHBlZCINCiAg
ICAtDQogICAgLSNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludA0KICAgIC0NCiAgICAt
LyogQSBsZXhpY2FsIHNjYW5uZXIgZ2VuZXJhdGVkIGJ5IGZsZXggKi8NCiAgICAtDQogICAgLSNk
ZWZpbmUgeXlfY3JlYXRlX2J1ZmZlciB6Y29uZl9jcmVhdGVfYnVmZmVyDQogICAgLSNkZWZpbmUg
eXlfZGVsZXRlX2J1ZmZlciB6Y29uZl9kZWxldGVfYnVmZmVyDQogICAgLSNkZWZpbmUgeXlfZmxl
eF9kZWJ1ZyB6Y29uZl9mbGV4X2RlYnVnDQogICAgLSNkZWZpbmUgeXlfaW5pdF9idWZmZXIgemNv
bmZfaW5pdF9idWZmZXINCiAgICAtI2RlZmluZSB5eV9mbHVzaF9idWZmZXIgemNvbmZfZmx1c2hf
YnVmZmVyDQogICAgLSNkZWZpbmUgeXlfbG9hZF9idWZmZXJfc3RhdGUgemNvbmZfbG9hZF9idWZm
ZXJfc3RhdGUNCiAgICAtI2RlZmluZSB5eV9zd2l0Y2hfdG9fYnVmZmVyIHpjb25mX3N3aXRjaF90
b19idWZmZXINCiAgICAtI2RlZmluZSB5eWluIHpjb25maW4NCiAgICAtI2RlZmluZSB5eWxlbmcg
emNvbmZsZW5nDQogICAgLSNkZWZpbmUgeXlsZXggemNvbmZsZXgNCiAgICAtI2RlZmluZSB5eWxp
bmVubyB6Y29uZmxpbmVubw0KICAgIC0jZGVmaW5lIHl5b3V0IHpjb25mb3V0DQogICAgLSNkZWZp
bmUgeXlyZXN0YXJ0IHpjb25mcmVzdGFydA0KICAgIC0jZGVmaW5lIHl5dGV4dCB6Y29uZnRleHQN
CiAgICAtI2RlZmluZSB5eXdyYXAgemNvbmZ3cmFwDQogICAgLSNkZWZpbmUgeXlhbGxvYyB6Y29u
ZmFsbG9jDQogICAgLSNkZWZpbmUgeXlyZWFsbG9jIHpjb25mcmVhbGxvYw0KICAgIC0jZGVmaW5l
IHl5ZnJlZSB6Y29uZmZyZWUNCiAgICAtDQogICAgLSNkZWZpbmUgRkxFWF9TQ0FOTkVSDQogICAg
LSNkZWZpbmUgWVlfRkxFWF9NQUpPUl9WRVJTSU9OIDINCiAgICAtI2RlZmluZSBZWV9GTEVYX01J
Tk9SX1ZFUlNJT04gNQ0KICAgIC0jZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQ0K
ICAgIC0jaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMA0KICAgIC0jZGVmaW5lIEZMRVhf
QkVUQQ0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLS8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBs
YXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8NCiAgICAtDQog
ICAgLS8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8NCiAgICAtI2luY2x1ZGUgPHN0ZGlv
Lmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAtI2luY2x1ZGUgPGVycm5vLmg+DQog
ICAgLSNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICAtDQogICAgLS8qIGVuZCBzdGFuZGFyZCBDIGhl
YWRlcnMuICovDQogICAgLQ0KICAgIC0vKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAq
Lw0KICAgIC0NCiAgICAtI2lmbmRlZiBGTEVYSU5UX0gNCiAgICAtI2RlZmluZSBGTEVYSU5UX0gN
CiAgICAtDQogICAgLS8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5
c3RlbXMgbWF5IG9yIG1heSBub3QuICovDQogICAgLQ0KICAgIC0jaWYgZGVmaW5lZCAoX19TVERD
X1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMDQogICAgLQ0KICAgIC0v
KiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5n
IHN0ZGludC5oLA0KICAgIC0gKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3Jv
cyBmb3IgaW50IHR5cGVzLiANCiAgICAtICovDQogICAgLSNpZm5kZWYgX19TVERDX0xJTUlUX01B
Q1JPUw0KICAgIC0jZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQ0KICAgIC0jZW5kaWYNCiAg
ICAtDQogICAgLSNpbmNsdWRlIDxpbnR0eXBlcy5oPg0KICAgIC10eXBlZGVmIGludDhfdCBmbGV4
X2ludDhfdDsNCiAgICAtdHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsNCiAgICAtdHlwZWRl
ZiBpbnQxNl90IGZsZXhfaW50MTZfdDsNCiAgICAtdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQx
Nl90Ow0KICAgIC10eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90Ow0KICAgIC10eXBlZGVmIHVp
bnQzMl90IGZsZXhfdWludDMyX3Q7DQogICAgLSNlbHNlDQogICAgLXR5cGVkZWYgc2lnbmVkIGNo
YXIgZmxleF9pbnQ4X3Q7DQogICAgLXR5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsNCiAg
ICAtdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90Ow0KICAgIC10eXBlZGVmIHVuc2lnbmVkIGNoYXIg
ZmxleF91aW50OF90OyANCiAgICAtdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50
MTZfdDsNCiAgICAtdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsNCiAgICAtI2Vu
ZGlmIC8qICEgQzk5ICovDQogICAgLQ0KICAgIC0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMu
ICovDQogICAgLSNpZm5kZWYgSU5UOF9NSU4NCiAgICAtI2RlZmluZSBJTlQ4X01JTiAgICAgICAg
ICAgICAgICgtMTI4KQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBJTlQxNl9NSU4NCiAgICAt
I2RlZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkNCiAgICAtI2VuZGlmDQog
ICAgLSNpZm5kZWYgSU5UMzJfTUlODQogICAgLSNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAg
ICAoLTIxNDc0ODM2NDctMSkNCiAgICAtI2VuZGlmDQogICAgLSNpZm5kZWYgSU5UOF9NQVgNCiAg
ICAtI2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpDQogICAgLSNlbmRpZg0KICAg
IC0jaWZuZGVmIElOVDE2X01BWA0KICAgIC0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAg
KDMyNzY3KQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBJTlQzMl9NQVgNCiAgICAtI2RlZmlu
ZSBJTlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQ0KICAgIC0jZW5kaWYNCiAgICAt
I2lmbmRlZiBVSU5UOF9NQVgNCiAgICAtI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgy
NTVVKQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBVSU5UMTZfTUFYDQogICAgLSNkZWZpbmUg
VUlOVDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRl
ZiBVSU5UMzJfTUFYDQogICAgLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2
NzI5NVUpDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2VuZGlmIC8qICEgRkxFWElOVF9IICov
DQogICAgLQ0KICAgIC0jaWZkZWYgX19jcGx1c3BsdXMNCiAgICAtDQogICAgLS8qIFRoZSAiY29u
c3QiIHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovDQogICAgLSNkZWZpbmUgWVlf
VVNFX0NPTlNUDQogICAgLQ0KICAgIC0jZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovDQogICAgLQ0K
ICAgIC0vKiBDOTkgcmVxdWlyZXMgX19TVERDX18gdG8gYmUgZGVmaW5lZCBhcyAxLiAqLw0KICAg
IC0jaWYgZGVmaW5lZCAoX19TVERDX18pDQogICAgLQ0KICAgIC0jZGVmaW5lIFlZX1VTRV9DT05T
VA0KICAgIC0NCiAgICAtI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLw0KICAgIC0jZW5k
aWYJLyogISBfX2NwbHVzcGx1cyAqLw0KICAgIC0NCiAgICAtI2lmZGVmIFlZX1VTRV9DT05TVA0K
ICAgIC0jZGVmaW5lIHl5Y29uc3QgY29uc3QNCiAgICAtI2Vsc2UNCiAgICAtI2RlZmluZSB5eWNv
bnN0DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtLyogUmV0dXJuZWQgdXBvbiBlbmQtb2YtZmls
ZS4gKi8NCiAgICAtI2RlZmluZSBZWV9OVUxMIDANCiAgICAtDQogICAgLS8qIFByb21vdGVzIGEg
cG9zc2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkDQog
ICAgLSAqIGludGVnZXIgZm9yIHVzZSBhcyBhbiBhcnJheSBpbmRleC4gIElmIHRoZSBzaWduZWQg
Y2hhciBpcyBuZWdhdGl2ZSwNCiAgICAtICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFz
IGFuIDgtYml0IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQ0KICAgIC0gKiBkb3VibGUgY2FzdC4N
CiAgICAtICovDQogICAgLSNkZWZpbmUgWVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1
bnNpZ25lZCBjaGFyKSBjKQ0KICAgIC0NCiAgICAtLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24u
ICBUaGlzIG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLA0KICAgIC0gKiBi
dXQgd2UgZG8gaXQgdGhlIGRpc2d1c3RpbmcgY3J1ZnR5IHdheSBmb3JjZWQgb24gdXMgYnkgdGhl
ICgpLWxlc3MNCiAgICAtICogZGVmaW5pdGlvbiBvZiBCRUdJTi4NCiAgICAtICovDQogICAgLSNk
ZWZpbmUgQkVHSU4gKHl5X3N0YXJ0KSA9IDEgKyAyICoNCiAgICAtDQogICAgLS8qIFRyYW5zbGF0
ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIg
aGFuZGVkDQogICAgLSAqIHRvIEJFR0lOIHRvIHJldHVybiB0byB0aGUgc3RhdGUuICBUaGUgWVlT
VEFURSBhbGlhcyBpcyBmb3IgbGV4DQogICAgLSAqIGNvbXBhdGliaWxpdHkuDQogICAgLSAqLw0K
ICAgIC0jZGVmaW5lIFlZX1NUQVJUICgoKHl5X3N0YXJ0KSAtIDEpIC8gMikNCiAgICAtI2RlZmlu
ZSBZWVNUQVRFIFlZX1NUQVJUDQogICAgLQ0KICAgIC0vKiBBY3Rpb24gbnVtYmVyIGZvciBFT0Yg
cnVsZSBvZiBhIGdpdmVuIHN0YXJ0IHN0YXRlLiAqLw0KICAgIC0jZGVmaW5lIFlZX1NUQVRFX0VP
RihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpDQogICAgLQ0KICAgIC0vKiBT
cGVjaWFsIGFjdGlvbiBtZWFuaW5nICJzdGFydCBwcm9jZXNzaW5nIGEgbmV3IGZpbGUiLiAqLw0K
ICAgIC0jZGVmaW5lIFlZX05FV19GSUxFIHpjb25mcmVzdGFydCh6Y29uZmluICApDQogICAgLQ0K
ICAgIC0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJfQ0hBUiAwDQogICAgLQ0KICAgIC0vKiBTaXpl
IG9mIGRlZmF1bHQgaW5wdXQgYnVmZmVyLiAqLw0KICAgIC0jaWZuZGVmIFlZX0JVRl9TSVpFDQog
ICAgLSNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQNCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0v
KiBUaGUgc3RhdGUgYnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBl
ciBjaGFyYWN0ZXIgaW4gdGhlIG1haW4gYnVmZmVyLg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBZ
WV9TVEFURV9CVUZfU0laRSAgICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90
eXBlKSkNCiAgICAtDQogICAgLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUNCiAg
ICAtI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQ0KICAgIC10eXBlZGVmIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsNCiAgICAtI2VuZGlmDQogICAgLQ0K
ICAgIC1leHRlcm4gaW50IHpjb25mbGVuZzsNCiAgICAtDQogICAgLWV4dGVybiBGSUxFICp6Y29u
ZmluLCAqemNvbmZvdXQ7DQogICAgLQ0KICAgIC0jZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAwDQogICAgLSNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxDQogICAgLSNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDINCiAgICAtDQogICAgLSAgICAjZGVmaW5lIFlZX0xFU1NfTElORU5P
KG4pDQogICAgLSAgICANCiAgICAtLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJuIiBtYXRj
aGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLw0KICAgIC0jZGVmaW5l
IHl5bGVzcyhuKSBcDQogICAgLQlkbyBcDQogICAgLQkJeyBcDQogICAgLQkJLyogVW5kbyBlZmZl
Y3RzIG9mIHNldHRpbmcgdXAgemNvbmZ0ZXh0LiAqLyBcDQogICAgLSAgICAgICAgaW50IHl5bGVz
c19tYWNyb19hcmcgPSAobik7IFwNCiAgICAtICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3Nf
bWFjcm9fYXJnKTtcDQogICAgLQkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IFwNCiAgICAtCQlZ
WV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwNCiAgICAtCQkoeXlfY19idWZfcCkgPSB5eV9jcCA9
IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcDQogICAgLQkJWVlfRE9f
QkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLyBcDQogICAgLQkJfSBc
DQogICAgLQl3aGlsZSAoIDAgKQ0KICAgIC0NCiAgICAtI2RlZmluZSB1bnB1dChjKSB5eXVucHV0
KCBjLCAoeXl0ZXh0X3B0cikgICkNCiAgICAtDQogICAgLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9T
SVpFX1QNCiAgICAtI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVA0KICAgIC10eXBlZGVmIHNp
emVfdCB5eV9zaXplX3Q7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2lmbmRlZiBZWV9TVFJV
Q1RfWVlfQlVGRkVSX1NUQVRFDQogICAgLSNkZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFU
RQ0KICAgIC1zdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlDQogICAgLQl7DQogICAgLQlGSUxFICp5eV9p
bnB1dF9maWxlOw0KICAgIC0NCiAgICAtCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZl
ciAqLw0KICAgIC0JY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5w
dXQgYnVmZmVyICovDQogICAgLQ0KICAgIC0JLyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0
ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CDQogICAgLQkgKiBjaGFyYWN0ZXJzLg0KICAg
IC0JICovDQogICAgLQl5eV9zaXplX3QgeXlfYnVmX3NpemU7DQogICAgLQ0KICAgIC0JLyogTnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IN
CiAgICAtCSAqIGNoYXJhY3RlcnMuDQogICAgLQkgKi8NCiAgICAtCWludCB5eV9uX2NoYXJzOw0K
ICAgIC0NCiAgICAtCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtu
b3cgd2UgY3JlYXRlZCBpdCwNCiAgICAtCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cg
aXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvDQogICAgLQkgKiBkZWxldGUgaXQuDQogICAgLQkg
Ki8NCiAgICAtCWludCB5eV9pc19vdXJfYnVmZmVyOw0KICAgIC0NCiAgICAtCS8qIFdoZXRoZXIg
dGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZA0KICAgIC0J
ICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdl
dGMoKQ0KICAgIC0JICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBm
ZXRjaGluZyBpbnB1dCBhZnRlcg0KICAgIC0JICogZWFjaCBuZXdsaW5lLg0KICAgIC0JICovDQog
ICAgLQlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7DQogICAgLQ0KICAgIC0JLyogV2hldGhlciB3ZSdy
ZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLg0KICAgIC0JICog
SWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3
aXNlDQogICAgLQkgKiBub3QuDQogICAgLQkgKi8NCiAgICAtCWludCB5eV9hdF9ib2w7DQogICAg
LQ0KICAgIC0gICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8NCiAg
ICAtICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8NCiAgICAt
ICAgIA0KICAgIC0JLyogV2hldGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdo
ZW4gd2UgcmVhY2ggdGhlDQogICAgLQkgKiBlbmQgb2YgaXQuDQogICAgLQkgKi8NCiAgICAtCWlu
dCB5eV9maWxsX2J1ZmZlcjsNCiAgICAtDQogICAgLQlpbnQgeXlfYnVmZmVyX3N0YXR1czsNCiAg
ICAtDQogICAgLSNkZWZpbmUgWVlfQlVGRkVSX05FVyAwDQogICAgLSNkZWZpbmUgWVlfQlVGRkVS
X05PUk1BTCAxDQogICAgLQkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBz
dGlsbCBzb21lIHRleHQgdG8gcHJvY2Vzcw0KICAgIC0JICogdGhlbiB3ZSBtYXJrIHRoZSBidWZm
ZXIgYXMgWVlfRU9GX1BFTkRJTkcsIHRvIGluZGljYXRlIHRoYXQgd2UNCiAgICAtCSAqIHNob3Vs
ZG4ndCB0cnkgcmVhZGluZyBmcm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdo
dA0KICAgIC0JICogc3RpbGwgaGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdo
LCBiZWNhdXNlIG9mDQogICAgLQkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLg0KICAgIC0JICoNCiAg
ICAtCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVz
IHRvICJuZXciDQogICAgLQkgKiAodmlhIHpjb25mcmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNl
ciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkNCiAgICAtCSAqIGp1c3QgcG9pbnRpbmcgemNvbmZp
biBhdCBhIG5ldyBpbnB1dCBmaWxlLg0KICAgIC0JICovDQogICAgLSNkZWZpbmUgWVlfQlVGRkVS
X0VPRl9QRU5ESU5HIDINCiAgICAtDQogICAgLQl9Ow0KICAgIC0jZW5kaWYgLyogIVlZX1NUUlVD
VF9ZWV9CVUZGRVJfU1RBVEUgKi8NCiAgICAtDQogICAgLS8qIFN0YWNrIG9mIGlucHV0IGJ1ZmZl
cnMuICovDQogICAgLXN0YXRpYyBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7IC8qKjwg
aW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLw0KICAgIC1zdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9z
dGFja19tYXggPSAwOyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLw0KICAgIC1zdGF0aWMgWVlf
QlVGRkVSX1NUQVRFICogeXlfYnVmZmVyX3N0YWNrID0gMDsgLyoqPCBTdGFjayBhcyBhbiBhcnJh
eS4gKi8NCiAgICAtDQogICAgLS8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVm
ZmVyIHN0YXRlcyBpbiBjYXNlIGluIHRoZQ0KICAgIC0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQg
dGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3JlIGdlbmVyYWwNCiAgICAtICogInNjYW5uZXIgc3Rh
dGUiLg0KICAgIC0gKg0KICAgIC0gKiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBO
VUxMLg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoICh5eV9idWZm
ZXJfc3RhY2spIFwNCiAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh5eV9idWZmZXJf
c3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0gXA0KICAgIC0gICAgICAgICAgICAgICAgICAg
ICAgICAgIDogTlVMTCkNCiAgICAtDQogICAgLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1
dCB1c2VmdWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QNCiAgICAt
ICogTlVMTCBvciB3aGVuIHdlIG5lZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHku
DQogICAgLSAqLw0KICAgIC0jZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSAoeXlfYnVm
ZmVyX3N0YWNrKVsoeXlfYnVmZmVyX3N0YWNrX3RvcCldDQogICAgLQ0KICAgIC0vKiB5eV9ob2xk
X2NoYXIgaG9sZHMgdGhlIGNoYXJhY3RlciBsb3N0IHdoZW4gemNvbmZ0ZXh0IGlzIGZvcm1lZC4g
Ki8NCiAgICAtc3RhdGljIGNoYXIgeXlfaG9sZF9jaGFyOw0KICAgIC1zdGF0aWMgaW50IHl5X25f
Y2hhcnM7CQkvKiBudW1iZXIgb2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmICovDQog
ICAgLWludCB6Y29uZmxlbmc7DQogICAgLQ0KICAgIC0vKiBQb2ludHMgdG8gY3VycmVudCBjaGFy
YWN0ZXIgaW4gYnVmZmVyLiAqLw0KICAgIC1zdGF0aWMgY2hhciAqeXlfY19idWZfcCA9IChjaGFy
ICopIDA7DQogICAgLXN0YXRpYyBpbnQgeXlfaW5pdCA9IDA7CQkvKiB3aGV0aGVyIHdlIG5lZWQg
dG8gaW5pdGlhbGl6ZSAqLw0KICAgIC1zdGF0aWMgaW50IHl5X3N0YXJ0ID0gMDsJLyogc3RhcnQg
c3RhdGUgbnVtYmVyICovDQogICAgLQ0KICAgIC0vKiBGbGFnIHdoaWNoIGlzIHVzZWQgdG8gYWxs
b3cgemNvbmZ3cmFwKCkncyB0byBkbyBidWZmZXIgc3dpdGNoZXMNCiAgICAtICogaW5zdGVhZCBv
ZiBzZXR0aW5nIHVwIGEgZnJlc2ggemNvbmZpbi4gIEEgYml0IG9mIGEgaGFjayAuLi4NCiAgICAt
ICovDQogICAgLXN0YXRpYyBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOw0KICAgIC0N
CiAgICAtdm9pZCB6Y29uZnJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUgICk7DQogICAgLXZvaWQg
emNvbmZfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgICk7DQog
ICAgLVlZX0JVRkZFUl9TVEFURSB6Y29uZl9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBz
aXplICApOw0KICAgIC12b2lkIHpjb25mX2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBi
ICApOw0KICAgIC12b2lkIHpjb25mX2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7
DQogICAgLXZvaWQgemNvbmZwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19i
dWZmZXIgICk7DQogICAgLXZvaWQgemNvbmZwb3BfYnVmZmVyX3N0YXRlICh2b2lkICk7DQogICAg
LQ0KICAgIC1zdGF0aWMgdm9pZCB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKHZvaWQgKTsNCiAg
ICAtc3RhdGljIHZvaWQgemNvbmZfbG9hZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsNCiAgICAtc3Rh
dGljIHZvaWQgemNvbmZfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUg
ICk7DQogICAgLQ0KICAgIC0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB6Y29uZl9mbHVzaF9idWZm
ZXIoWVlfQ1VSUkVOVF9CVUZGRVIgKQ0KICAgIC0NCiAgICAtWVlfQlVGRkVSX1NUQVRFIHpjb25m
X3NjYW5fYnVmZmVyIChjaGFyICpiYXNlLHl5X3NpemVfdCBzaXplICApOw0KICAgIC1ZWV9CVUZG
RVJfU1RBVEUgemNvbmZfc2Nhbl9zdHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICApOw0KICAg
IC1ZWV9CVUZGRVJfU1RBVEUgemNvbmZfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxp
bnQgbGVuICApOw0KICAgIC0NCiAgICAtdm9pZCAqemNvbmZhbGxvYyAoeXlfc2l6ZV90ICApOw0K
ICAgIC12b2lkICp6Y29uZnJlYWxsb2MgKHZvaWQgKix5eV9zaXplX3QgICk7DQogICAgLXZvaWQg
emNvbmZmcmVlICh2b2lkICogICk7DQogICAgLQ0KICAgIC0jZGVmaW5lIHl5X25ld19idWZmZXIg
emNvbmZfY3JlYXRlX2J1ZmZlcg0KICAgIC0NCiAgICAtI2RlZmluZSB5eV9zZXRfaW50ZXJhY3Rp
dmUoaXNfaW50ZXJhY3RpdmUpIFwNCiAgICAtCXsgXA0KICAgIC0JaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSICl7IFwNCiAgICAtICAgICAgICB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwN
CiAgICAtCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcDQogICAgLSAgICAgICAgICAg
IHpjb25mX2NyZWF0ZV9idWZmZXIoemNvbmZpbixZWV9CVUZfU0laRSApOyBcDQogICAgLQl9IFwN
CiAgICAtCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUgPSBpc19p
bnRlcmFjdGl2ZTsgXA0KICAgIC0JfQ0KICAgIC0NCiAgICAtI2RlZmluZSB5eV9zZXRfYm9sKGF0
X2JvbCkgXA0KICAgIC0JeyBcDQogICAgLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXtcDQog
ICAgLSAgICAgICAgemNvbmZlbnN1cmVfYnVmZmVyX3N0YWNrICgpOyBcDQogICAgLQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXA0KICAgIC0gICAgICAgICAgICB6Y29uZl9jcmVhdGVf
YnVmZmVyKHpjb25maW4sWVlfQlVGX1NJWkUgKTsgXA0KICAgIC0JfSBcDQogICAgLQlZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXA0KICAgIC0JfQ0KICAgIC0N
CiAgICAtI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9h
dF9ib2wpDQogICAgLQ0KICAgIC0vKiBCZWdpbiB1c2VyIHNlY3QzICovDQogICAgLQ0KICAgIC0j
ZGVmaW5lIHpjb25md3JhcChuKSAxDQogICAgLSNkZWZpbmUgWVlfU0tJUF9ZWVdSQVANCiAgICAt
DQogICAgLXR5cGVkZWYgdW5zaWduZWQgY2hhciBZWV9DSEFSOw0KICAgIC0NCiAgICAtRklMRSAq
emNvbmZpbiA9IChGSUxFICopIDAsICp6Y29uZm91dCA9IChGSUxFICopIDA7DQogICAgLQ0KICAg
IC10eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOw0KICAgIC0NCiAgICAtZXh0ZXJuIGludCB6Y29u
ZmxpbmVubzsNCiAgICAtDQogICAgLWludCB6Y29uZmxpbmVubyA9IDE7DQogICAgLQ0KICAgIC1l
eHRlcm4gY2hhciAqemNvbmZ0ZXh0Ow0KICAgIC0jZGVmaW5lIHl5dGV4dF9wdHIgemNvbmZ0ZXh0
DQogICAgLXN0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbXVsxN10gPQ0KICAgIC0g
ICAgew0KICAgIC0gICAgew0KICAgIC0gICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsDQogICAgLSAgICAgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7
DQogICAgLSAgICAgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxMiwgICAxMiwgICAxNSwgICAx
MiwgICAxMiwgICAxMiwNCiAgICAtICAgICAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAgIDEyLCAg
IDEyLCAgIDEyDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEx
LCAgIDEyLCAgIDEzLCAgIDE0LCAgIDEyLCAgIDEyLCAgIDE1LCAgIDEyLCAgIDEyLCAgIDEyLA0K
ICAgIC0gICAgICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTIsICAgMTINCiAgICAt
ICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAgMTYsICAgMTYsICAg
MTcsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsICAgMTYsDQogICAgLSAgICAgICAxNiwg
ICAxNiwgICAxNiwgICAxOCwgICAxNiwgICAxNiwgICAxNg0KICAgIC0gICAgfSwNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgICAxNiwgICAxNiwgICAxNywgICAxNiwgICAxNiwg
ICAxNiwgICAxNiwgICAxNiwgICAxNiwNCiAgICAtICAgICAgIDE2LCAgIDE2LCAgIDE2LCAgIDE4
LCAgIDE2LCAgIDE2LCAgIDE2DQogICAgLQ0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7
DQogICAgLSAgICAgICAxMSwgICAxOSwgICAyMCwgICAyMSwgICAxOSwgICAxOSwgICAxOSwgICAx
OSwgICAxOSwgICAxOSwNCiAgICAtICAgICAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAg
IDE5LCAgIDE5DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEx
LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LCAgIDE5LA0K
ICAgIC0gICAgICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTksICAgMTkNCiAgICAt
ICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAgMjIsICAgMjIsICAg
MjMsICAgMjIsICAgMjQsICAgMjIsICAgMjIsICAgMjQsICAgMjIsDQogICAgLSAgICAgICAyMiwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyNSwgICAyMg0KICAgIC0gICAgfSwNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgICAyMiwgICAyMiwgICAyMywgICAyMiwgICAyNCwg
ICAyMiwgICAyMiwgICAyNCwgICAyMiwNCiAgICAtICAgICAgIDIyLCAgIDIyLCAgIDIyLCAgIDIy
LCAgIDIyLCAgIDI1LCAgIDIyDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAt
ICAgICAgIDExLCAgIDI2LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI5
LCAgIDMyLA0KICAgIC0gICAgICAgMzMsICAgMzQsICAgMzUsICAgMzUsICAgMzYsICAgMzcsICAg
MzgNCiAgICAtDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEx
LCAgIDI2LCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDMxLCAgIDI5LCAgIDMyLA0K
ICAgIC0gICAgICAgMzMsICAgMzQsICAgMzUsICAgMzUsICAgMzYsICAgMzcsICAgMzgNCiAgICAt
ICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAtMTEsICAtMTEsICAtMTEsICAt
MTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsICAtMTEsDQogICAgLSAgICAgIC0xMSwg
IC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMSwgIC0xMQ0KICAgIC0gICAgfSwNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwg
IC0xMiwgIC0xMiwgIC0xMiwgIC0xMiwNCiAgICAtICAgICAgLTEyLCAgLTEyLCAgLTEyLCAgLTEy
LCAgLTEyLCAgLTEyLCAgLTEyDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAt
ICAgICAgIDExLCAgLTEzLCAgIDM5LCAgIDQwLCAgLTEzLCAgLTEzLCAgIDQxLCAgLTEzLCAgLTEz
LCAgLTEzLA0KICAgIC0gICAgICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAtMTMsICAt
MTMNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAtMTQs
ICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsDQogICAgLSAg
ICAgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNA0KICAgIC0NCiAgICAt
ICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAgNDIsICAgNDIsICAg
NDMsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsDQogICAgLSAgICAgICA0Miwg
ICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0Mg0KICAgIC0gICAgfSwNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwg
IC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwNCiAgICAtICAgICAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2
LCAgLTE2LCAgLTE2LCAgLTE2DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAt
ICAgICAgIDExLCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3LCAgLTE3
LCAgLTE3LA0KICAgIC0gICAgICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAtMTcsICAt
MTcNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAtMTgs
ICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsDQogICAgLSAg
ICAgIC0xOCwgIC0xOCwgIC0xOCwgICA0NCwgIC0xOCwgIC0xOCwgIC0xOA0KICAgIC0gICAgfSwN
CiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgICA0NSwgICA0NSwgIC0xOSwgICA0
NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwNCiAgICAtICAgICAgIDQ1LCAgIDQ1LCAg
IDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1LCAgIDQ1DQogICAgLQ0KICAgIC0gICAgfSwNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0yMCwgICA0NiwgICA0NywgIC0yMCwgIC0yMCwg
IC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwNCiAgICAtICAgICAgLTIwLCAgLTIwLCAgLTIwLCAgLTIw
LCAgLTIwLCAgLTIwLCAgLTIwDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAt
ICAgICAgIDExLCAgIDQ4LCAgLTIxLCAgLTIxLCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4
LCAgIDQ4LA0KICAgIC0gICAgICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAgNDgsICAg
NDgNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAgNDks
ICAgNDksICAgNTAsICAgNDksICAtMjIsICAgNDksICAgNDksICAtMjIsICAgNDksDQogICAgLSAg
ICAgICA0OSwgICA0OSwgICA0OSwgICA0OSwgICA0OSwgIC0yMiwgICA0OQ0KICAgIC0gICAgfSwN
CiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0yMywgIC0yMywgIC0yMywgIC0y
MywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywNCiAgICAtICAgICAgLTIzLCAgLTIzLCAg
LTIzLCAgLTIzLCAgLTIzLCAgLTIzLCAgLTIzDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAg
IHsNCiAgICAtICAgICAgIDExLCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAg
LTI0LCAgLTI0LCAgLTI0LA0KICAgIC0gICAgICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQs
ICAtMjQsICAtMjQNCiAgICAtDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAt
ICAgICAgIDExLCAgIDUxLCAgIDUxLCAgIDUyLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUxLCAgIDUx
LCAgIDUxLA0KICAgIC0gICAgICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAgNTEsICAg
NTENCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAtMjYs
ICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsICAtMjYsDQogICAgLSAg
ICAgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNiwgIC0yNg0KICAgIC0gICAgfSwN
CiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0yNywgIC0yNywgIC0yNywgIC0y
NywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywNCiAgICAtICAgICAgLTI3LCAgLTI3LCAg
LTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAg
IHsNCiAgICAtICAgICAgIDExLCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAgLTI4LCAg
LTI4LCAgLTI4LCAgLTI4LA0KICAgIC0gICAgICAtMjgsICAtMjgsICAtMjgsICAtMjgsICAgNTMs
ICAtMjgsICAtMjgNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAg
MTEsICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjksICAtMjks
DQogICAgLSAgICAgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOSwgIC0yOQ0KICAg
IC0NCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTEsICAgNTQs
ICAgNTQsICAtMzAsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQsDQogICAgLSAg
ICAgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NCwgICA1NA0KICAgIC0gICAgfSwN
CiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0z
MSwgIC0zMSwgIC0zMSwgICA1NSwgIC0zMSwgIC0zMSwNCiAgICAtICAgICAgLTMxLCAgLTMxLCAg
LTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAg
IHsNCiAgICAtICAgICAgIDExLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAgLTMyLCAg
LTMyLCAgLTMyLCAgLTMyLA0KICAgIC0gICAgICAtMzIsICAtMzIsICAtMzIsICAtMzIsICAtMzIs
ICAtMzIsICAtMzINCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAg
MTEsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMsICAtMzMs
DQogICAgLSAgICAgIC0zMywgIC0zMywgIC0zMywgIC0zMywgIC0zMywgIC0zMywgIC0zMw0KICAg
IC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0zNCwgIC0zNCwg
IC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwNCiAgICAtICAgICAgLTM0
LCAgIDU2LCAgIDU3LCAgIDU3LCAgLTM0LCAgLTM0LCAgLTM0DQogICAgLQ0KICAgIC0gICAgfSwN
CiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0z
NSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwNCiAgICAtICAgICAgLTM1LCAgIDU3LCAg
IDU3LCAgIDU3LCAgLTM1LCAgLTM1LCAgLTM1DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAg
IHsNCiAgICAtICAgICAgIDExLCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAg
LTM2LCAgLTM2LCAgLTM2LA0KICAgIC0gICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYs
ICAtMzYsICAtMzYNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAg
MTEsICAtMzcsICAtMzcsICAgNTgsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcs
DQogICAgLSAgICAgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNw0KICAg
IC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC0zOCwgIC0zOCwg
IC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwNCiAgICAtICAgICAgLTM4
LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgIDU5DQogICAgLSAgICB9LA0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtICAgICAgIDExLCAgLTM5LCAgIDM5LCAgIDQwLCAgLTM5LCAgLTM5
LCAgIDQxLCAgLTM5LCAgLTM5LCAgLTM5LA0KICAgIC0gICAgICAtMzksICAtMzksICAtMzksICAt
MzksICAtMzksICAtMzksICAtMzkNCiAgICAtDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAg
IHsNCiAgICAtICAgICAgIDExLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAg
LTQwLCAgLTQwLCAgLTQwLA0KICAgIC0gICAgICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAs
ICAtNDAsICAtNDANCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAg
MTEsICAgNDIsICAgNDIsICAgNDMsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIsICAgNDIs
DQogICAgLSAgICAgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0Mg0KICAg
IC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgICA0MiwgICA0Miwg
ICA0MywgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwgICA0MiwNCiAgICAtICAgICAgIDQy
LCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyLCAgIDQyDQogICAgLSAgICB9LA0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtICAgICAgIDExLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQz
LCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLA0KICAgIC0gICAgICAtNDMsICAtNDMsICAtNDMsICAt
NDMsICAtNDMsICAtNDMsICAtNDMNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAg
IC0gICAgICAgMTEsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAt
NDQsICAtNDQsDQogICAgLSAgICAgIC00NCwgIC00NCwgIC00NCwgICA0NCwgIC00NCwgIC00NCwg
IC00NA0KICAgIC0NCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAg
MTEsICAgNDUsICAgNDUsICAtNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUsICAgNDUs
DQogICAgLSAgICAgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NSwgICA0NQ0KICAg
IC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC00NiwgICA0Niwg
ICA0NywgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwNCiAgICAtICAgICAgLTQ2
LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2DQogICAgLSAgICB9LA0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtICAgICAgIDExLCAgIDQ4LCAgLTQ3LCAgLTQ3LCAgIDQ4LCAgIDQ4
LCAgIDQ4LCAgIDQ4LCAgIDQ4LCAgIDQ4LA0KICAgIC0gICAgICAgNDgsICAgNDgsICAgNDgsICAg
NDgsICAgNDgsICAgNDgsICAgNDgNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAg
IC0gICAgICAgMTEsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAt
NDgsICAtNDgsDQogICAgLSAgICAgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwg
IC00OA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgICA0
OSwgICA0OSwgICA1MCwgICA0OSwgIC00OSwgICA0OSwgICA0OSwgIC00OSwgICA0OSwNCiAgICAt
ICAgICAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgIDQ5LCAgLTQ5LCAgIDQ5DQogICAgLQ0KICAg
IC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC01MCwgIC01MCwg
IC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwgIC01MCwNCiAgICAtICAgICAgLTUw
LCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwLCAgLTUwDQogICAgLSAgICB9LA0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtICAgICAgIDExLCAgLTUxLCAgLTUxLCAgIDUyLCAgLTUxLCAgLTUx
LCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLA0KICAgIC0gICAgICAtNTEsICAtNTEsICAtNTEsICAt
NTEsICAtNTEsICAtNTEsICAtNTENCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAg
IC0gICAgICAgMTEsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAt
NTIsICAtNTIsDQogICAgLSAgICAgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01Miwg
IC01Mg0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC01
MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywNCiAgICAt
ICAgICAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzLCAgLTUzDQogICAgLSAgICB9
LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDExLCAgIDU0LCAgIDU0LCAgLTU0LCAg
IDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LCAgIDU0LA0KICAgIC0gICAgICAgNTQsICAgNTQs
ICAgNTQsICAgNTQsICAgNTQsICAgNTQsICAgNTQNCiAgICAtDQogICAgLSAgICB9LA0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtICAgICAgIDExLCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1
LCAgLTU1LCAgLTU1LCAgLTU1LCAgLTU1LA0KICAgIC0gICAgICAtNTUsICAtNTUsICAtNTUsICAt
NTUsICAtNTUsICAtNTUsICAtNTUNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAg
IC0gICAgICAgMTEsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAtNTYsICAt
NTYsICAtNTYsDQogICAgLSAgICAgIC01NiwgICA2MCwgICA1NywgICA1NywgIC01NiwgIC01Niwg
IC01Ng0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMSwgIC01
NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywNCiAgICAt
ICAgICAgLTU3LCAgIDU3LCAgIDU3LCAgIDU3LCAgLTU3LCAgLTU3LCAgLTU3DQogICAgLSAgICB9
LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDExLCAgLTU4LCAgLTU4LCAgLTU4LCAg
LTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LA0KICAgIC0gICAgICAtNTgsICAtNTgs
ICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0g
ICAgew0KICAgIC0gICAgICAgMTEsICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTks
ICAtNTksICAtNTksICAtNTksDQogICAgLSAgICAgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01
OSwgIC01OSwgIC01OQ0KICAgIC0NCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAg
IC0gICAgICAgMTEsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAt
NjAsICAtNjAsDQogICAgLSAgICAgIC02MCwgICA1NywgICA1NywgICA1NywgIC02MCwgIC02MCwg
IC02MA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB9IDsNCiAgICAtDQogICAgLXN0YXRp
YyB5eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAodm9pZCApOw0KICAgIC1zdGF0
aWMgeXlfc3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRf
c3RhdGUgICk7DQogICAgLXN0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh2b2lkICk7DQog
ICAgLXN0YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gICk7DQog
ICAgLQ0KICAgIC0vKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0
Y2hlZCBhbmQgYmVmb3JlIHRoZQ0KICAgIC0gKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMg
dXAgemNvbmZ0ZXh0Lg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9O
IFwNCiAgICAtCSh5eXRleHRfcHRyKSA9IHl5X2JwOyBcDQogICAgLQl6Y29uZmxlbmcgPSAoc2l6
ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwNCiAgICAtCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBc
DQogICAgLQkqeXlfY3AgPSAnXDAnOyBcDQogICAgLQkoeXlfY19idWZfcCkgPSB5eV9jcDsNCiAg
ICAtDQogICAgLSNkZWZpbmUgWVlfTlVNX1JVTEVTIDMzDQogICAgLSNkZWZpbmUgWVlfRU5EX09G
X0JVRkZFUiAzNA0KICAgIC0vKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5u
ZXIsDQogICAgLSAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLw0KICAgIC1zdHJ1
Y3QgeXlfdHJhbnNfaW5mbw0KICAgIC0Jew0KICAgIC0JZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsN
CiAgICAtCWZsZXhfaW50MzJfdCB5eV9ueHQ7DQogICAgLQl9Ow0KICAgIC1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzYxXSA9DQogICAgLSAgICB7ICAgMCwNCiAgICAtICAg
ICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLA0KICAgIC0gICAgICAgMzQsICAgIDUsICAgIDQsICAgIDIsICAgIDMsICAgIDcsICAgIDgs
ICAgIDYsICAgMzIsICAgMjksDQogICAgLSAgICAgICAzMSwgICAyNCwgICAyOCwgICAyNywgICAy
NiwgICAyMiwgICAxNywgICAxMywgICAxNiwgICAyMCwNCiAgICAtICAgICAgIDIyLCAgIDExLCAg
IDEyLCAgIDE5LCAgIDE5LCAgIDE0LCAgIDIyLCAgIDIyLCAgICA0LCAgICAyLA0KICAgIC0gICAg
ICAgIDMsICAgIDMsICAgIDEsICAgIDYsICAgMzIsICAgMjksICAgMzEsICAgMzAsICAgMjQsICAg
MjMsDQogICAgLSAgICAgICAyNiwgICAyNSwgICAxNSwgICAyMCwgICAgOSwgICAxOSwgICAxOSwg
ICAyMSwgICAxMCwgICAxOA0KICAgIC0gICAgfSA7DQogICAgLQ0KICAgIC1zdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfZWNbMjU2XSA9DQogICAgLSAgICB7ICAgMCwNCiAgICAtICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAgICAz
LA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsDQogICAgLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICAtICAgICAgICAxLCAgICAyLCAgICA0
LCAgICA1LCAgICA2LCAgICAxLCAgICAxLCAgICA3LCAgICA4LCAgICA5LA0KICAgIC0gICAgICAg
MTAsICAgIDEsICAgIDEsICAgIDEsICAgMTEsICAgMTIsICAgMTIsICAgMTMsICAgMTMsICAgMTMs
DQogICAgLSAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAg
MSwgICAgMSwgICAgMSwNCiAgICAtICAgICAgIDE0LCAgICAxLCAgICAxLCAgICAxLCAgIDEzLCAg
IDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLA0KICAgIC0gICAgICAgMTMsICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsDQogICAgLSAgICAgICAx
MywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywN
CiAgICAtICAgICAgICAxLCAgIDE1LCAgICAxLCAgICAxLCAgIDEzLCAgICAxLCAgIDEzLCAgIDEz
LCAgIDEzLCAgIDEzLA0KICAgIC0NCiAgICAtICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAg
IDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLA0KICAgIC0gICAgICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsDQogICAgLSAg
ICAgICAxMywgICAxMywgICAgMSwgICAxNiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwNCiAgICAtICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICAtICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsDQogICAgLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICAtICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgIC0NCiAg
ICAtICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICAtICAgICAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAg
IC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsDQogICAgLSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQ0KICAgIC0g
ICAgfSA7DQogICAgLQ0KICAgIC1leHRlcm4gaW50IHpjb25mX2ZsZXhfZGVidWc7DQogICAgLWlu
dCB6Y29uZl9mbGV4X2RlYnVnID0gMDsNCiAgICAtDQogICAgLS8qIFRoZSBpbnRlbnQgYmVoaW5k
IHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoDQogICAgLSAqIGFueSB1c2VzIG9m
IFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4NCiAgICAtICovDQogICAgLSNkZWZpbmUgUkVKRUNU
IHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQNCiAgICAtI2RlZmluZSB5eW1vcmUoKSB5eW1v
cmVfdXNlZF9idXRfbm90X2RldGVjdGVkDQogICAgLSNkZWZpbmUgWVlfTU9SRV9BREogMA0KICAg
IC0jZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQNCiAgICAtY2hhciAqemNvbmZ0ZXh0
Ow0KICAgIC0jZGVmaW5lIFlZX05PX0lOUFVUIDENCiAgICAtDQogICAgLS8qDQogICAgLSAqIENv
cHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAg
ICAtICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAg
LSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgIC0jaW5jbHVkZSA8c3Rk
aW8uaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+
DQogICAgLSNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAtDQogICAgLSNpbmNsdWRlICJsa2MuaCIN
CiAgICAtDQogICAgLSNkZWZpbmUgU1RBUlRfU1RSU0laRQkxNg0KICAgIC0NCiAgICAtc3RhdGlj
IHN0cnVjdCB7DQogICAgLQlzdHJ1Y3QgZmlsZSAqZmlsZTsNCiAgICAtCWludCBsaW5lbm87DQog
ICAgLX0gY3VycmVudF9wb3M7DQogICAgLQ0KICAgIC1zdGF0aWMgY2hhciAqdGV4dDsNCiAgICAt
c3RhdGljIGludCB0ZXh0X3NpemUsIHRleHRfYXNpemU7DQogICAgLQ0KICAgIC1zdHJ1Y3QgYnVm
ZmVyIHsNCiAgICAtICAgICAgICBzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7DQogICAgLSAgICAgICAg
WVlfQlVGRkVSX1NUQVRFIHN0YXRlOw0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RydWN0IGJ1ZmZl
ciAqY3VycmVudF9idWY7DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGxhc3RfdHMsIGZpcnN0X3Rz
Ow0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsNCiAgICAtc3Rh
dGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIG5l
d19zdHJpbmcodm9pZCkNCiAgICAtew0KICAgIC0JdGV4dCA9IHhtYWxsb2MoU1RBUlRfU1RSU0la
RSk7DQogICAgLQl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsNCiAgICAtCXRleHRfc2l6ZSA9
IDA7DQogICAgLQkqdGV4dCA9IDA7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGFw
cGVuZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkNCiAgICAtew0KICAgIC0JaW50
IG5ld19zaXplID0gdGV4dF9zaXplICsgc2l6ZSArIDE7DQogICAgLQlpZiAobmV3X3NpemUgPiB0
ZXh0X2FzaXplKSB7DQogICAgLQkJbmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7DQogICAg
LQkJbmV3X3NpemUgJj0gLVNUQVJUX1NUUlNJWkU7DQogICAgLQkJdGV4dCA9IHJlYWxsb2ModGV4
dCwgbmV3X3NpemUpOw0KICAgIC0JCXRleHRfYXNpemUgPSBuZXdfc2l6ZTsNCiAgICAtCX0NCiAg
ICAtCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBzdHIsIHNpemUpOw0KICAgIC0JdGV4dF9zaXpl
ICs9IHNpemU7DQogICAgLQl0ZXh0W3RleHRfc2l6ZV0gPSAwOw0KICAgIC19DQogICAgLQ0KICAg
IC1zdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkNCiAg
ICAtew0KICAgIC0JdGV4dCA9IHhtYWxsb2Moc2l6ZSArIDEpOw0KICAgIC0JbWVtY3B5KHRleHQs
IHN0ciwgc2l6ZSk7DQogICAgLQl0ZXh0W3NpemVdID0gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAt
I2RlZmluZSBJTklUSUFMIDANCiAgICAtI2RlZmluZSBDT01NQU5EIDENCiAgICAtI2RlZmluZSBI
RUxQIDINCiAgICAtI2RlZmluZSBTVFJJTkcgMw0KICAgIC0jZGVmaW5lIFBBUkFNIDQNCiAgICAt
DQogICAgLSNpZm5kZWYgWVlfTk9fVU5JU1REX0gNCiAgICAtLyogU3BlY2lhbCBjYXNlIGZvciAi
dW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBpdCB3YXkNCiAgICAt
ICogZG93biBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdXNlcidzIHNlY3Rpb24gMSB0byBoYXZl
IGJlZW4gc2Nhbm5lZCBmaXJzdC4NCiAgICAtICogVGhlIHVzZXIgaGFzIGEgY2hhbmNlIHRvIG92
ZXJyaWRlIGl0IHdpdGggYW4gb3B0aW9uLg0KICAgIC0gKi8NCiAgICAtI2luY2x1ZGUgPHVuaXN0
ZC5oPg0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZm5kZWYgWVlfRVhUUkFfVFlQRQ0KICAg
IC0jZGVmaW5lIFlZX0VYVFJBX1RZUEUgdm9pZCAqDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAt
c3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsNCiAgICAtDQogICAgLS8qIEFjY2Vz
c29yIG1ldGhvZHMgdG8gZ2xvYmFscy4NCiAgICAtICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0
byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8NCiAgICAtDQogICAg
LWludCB6Y29uZmxleF9kZXN0cm95ICh2b2lkICk7DQogICAgLQ0KICAgIC1pbnQgemNvbmZnZXRf
ZGVidWcgKHZvaWQgKTsNCiAgICAtDQogICAgLXZvaWQgemNvbmZzZXRfZGVidWcgKGludCBkZWJ1
Z19mbGFnICApOw0KICAgIC0NCiAgICAtWVlfRVhUUkFfVFlQRSB6Y29uZmdldF9leHRyYSAodm9p
ZCApOw0KICAgIC0NCiAgICAtdm9pZCB6Y29uZnNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2Vy
X2RlZmluZWQgICk7DQogICAgLQ0KICAgIC1GSUxFICp6Y29uZmdldF9pbiAodm9pZCApOw0KICAg
IC0NCiAgICAtdm9pZCB6Y29uZnNldF9pbiAgKEZJTEUgKiBpbl9zdHIgICk7DQogICAgLQ0KICAg
IC1GSUxFICp6Y29uZmdldF9vdXQgKHZvaWQgKTsNCiAgICAtDQogICAgLXZvaWQgemNvbmZzZXRf
b3V0ICAoRklMRSAqIG91dF9zdHIgICk7DQogICAgLQ0KICAgIC1pbnQgemNvbmZnZXRfbGVuZyAo
dm9pZCApOw0KICAgIC0NCiAgICAtY2hhciAqemNvbmZnZXRfdGV4dCAodm9pZCApOw0KICAgIC0N
CiAgICAtaW50IHpjb25mZ2V0X2xpbmVubyAodm9pZCApOw0KICAgIC0NCiAgICAtdm9pZCB6Y29u
ZnNldF9saW5lbm8gKGludCBsaW5lX251bWJlciAgKTsNCiAgICAtDQogICAgLS8qIE1hY3JvcyBh
ZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25z
IGluDQogICAgLSAqIHNlY3Rpb24gMS4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaWZuZGVmIFlZ
X1NLSVBfWVlXUkFQDQogICAgLSNpZmRlZiBfX2NwbHVzcGx1cw0KICAgIC1leHRlcm4gIkMiIGlu
dCB6Y29uZndyYXAgKHZvaWQgKTsNCiAgICAtI2Vsc2UNCiAgICAtZXh0ZXJuIGludCB6Y29uZndy
YXAgKHZvaWQgKTsNCiAgICAtI2VuZGlmDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtICAgIHN0
YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLGNoYXIgKmJ1Zl9wdHIgICk7DQogICAgLSAgICANCiAg
ICAtI2lmbmRlZiB5eXRleHRfcHRyDQogICAgLXN0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAo
Y2hhciAqLHl5Y29uc3QgY2hhciAqLGludCApOw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNp
ZmRlZiBZWV9ORUVEX1NUUkxFTg0KICAgIC1zdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNv
bnN0IGNoYXIgKiApOw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZm5kZWYgWVlfTk9fSU5Q
VVQNCiAgICAtDQogICAgLSNpZmRlZiBfX2NwbHVzcGx1cw0KICAgIC1zdGF0aWMgaW50IHl5aW5w
dXQgKHZvaWQgKTsNCiAgICAtI2Vsc2UNCiAgICAtc3RhdGljIGludCBpbnB1dCAodm9pZCApOw0K
ICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtLyogQW1vdW50IG9m
IHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLw0KICAgIC0jaWZuZGVmIFlZX1JF
QURfQlVGX1NJWkUNCiAgICAtI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTINCiAgICAtI2Vu
ZGlmDQogICAgLQ0KICAgIC0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0
byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLw0KICAgIC0jaWZuZGVmIEVDSE8NCiAgICAtLyogVGhp
cyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5nIG1pZ2h0IGNvbnRh
aW4gTlVMJ3MsDQogICAgLSAqIHdlIG5vdyB1c2UgZndyaXRlKCkuDQogICAgLSAqLw0KICAgIC0j
ZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB6Y29uZnRleHQsIHpjb25mbGVuZywgMSwgemNv
bmZvdXQgKSkge30gfSB3aGlsZSAoMCkNCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0vKiBHZXRz
IGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJl
YWQsIG9yIFlZX05VTEwsDQogICAgLSAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLg0KICAgIC0g
Ki8NCiAgICAtI2lmbmRlZiBZWV9JTlBVVA0KICAgIC0jZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1
bHQsbWF4X3NpemUpIFwNCiAgICAtCWVycm5vPTA7IFwNCiAgICAtCXdoaWxlICggKHJlc3VsdCA9
IHJlYWQoIGZpbGVubyh6Y29uZmluKSwgKGNoYXIgKikgYnVmLCBtYXhfc2l6ZSApKSA8IDAgKSBc
DQogICAgLQl7IFwNCiAgICAtCQlpZiggZXJybm8gIT0gRUlOVFIpIFwNCiAgICAtCQl7IFwNCiAg
ICAtCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVkIiApOyBc
DQogICAgLQkJCWJyZWFrOyBcDQogICAgLQkJfSBcDQogICAgLQkJZXJybm89MDsgXA0KICAgIC0J
CWNsZWFyZXJyKHpjb25maW4pOyBcDQogICAgLQl9XA0KICAgIC1cDQogICAgLQ0KICAgIC0jZW5k
aWYNCiAgICAtDQogICAgLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVz
YWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQ0KICAgIC0gKiB3ZSBkb24ndCB3YW50
IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UN
CiAgICAtICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUgc3Rh
dGVtZW50cy4NCiAgICAtICovDQogICAgLSNpZm5kZWYgeXl0ZXJtaW5hdGUNCiAgICAtI2RlZmlu
ZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAt
LyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdyb3dz
LiAqLw0KICAgIC0jaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1INCiAgICAtI2RlZmluZSBZWV9T
VEFSVF9TVEFDS19JTkNSIDI1DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtLyogUmVwb3J0IGEg
ZmF0YWwgZXJyb3IuICovDQogICAgLSNpZm5kZWYgWVlfRkFUQUxfRVJST1INCiAgICAtI2RlZmlu
ZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgKQ0KICAgIC0jZW5kaWYN
CiAgICAtDQogICAgLS8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFuZCBw
cm90b3R5cGVzICovDQogICAgLQ0KICAgIC0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVy
YXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuDQogICAgLSAqIGVhc2lseSBh
ZGQgcGFyYW1ldGVycy4NCiAgICAtICovDQogICAgLSNpZm5kZWYgWVlfREVDTA0KICAgIC0jZGVm
aW5lIFlZX0RFQ0xfSVNfT1VSUyAxDQogICAgLQ0KICAgIC1leHRlcm4gaW50IHpjb25mbGV4ICh2
b2lkKTsNCiAgICAtDQogICAgLSNkZWZpbmUgWVlfREVDTCBpbnQgemNvbmZsZXggKHZvaWQpDQog
ICAgLSNlbmRpZiAvKiAhWVlfREVDTCAqLw0KICAgIC0NCiAgICAtLyogQ29kZSBleGVjdXRlZCBh
dCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgemNvbmZ0ZXh0IGFuZCB6Y29uZmxl
bmcNCiAgICAtICogaGF2ZSBiZWVuIHNldCB1cC4NCiAgICAtICovDQogICAgLSNpZm5kZWYgWVlf
VVNFUl9BQ1RJT04NCiAgICAtI2RlZmluZSBZWV9VU0VSX0FDVElPTg0KICAgIC0jZW5kaWYNCiAg
ICAtDQogICAgLS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovDQog
ICAgLSNpZm5kZWYgWVlfQlJFQUsNCiAgICAtI2RlZmluZSBZWV9CUkVBSyBicmVhazsNCiAgICAt
I2VuZGlmDQogICAgLQ0KICAgIC0jZGVmaW5lIFlZX1JVTEVfU0VUVVAgXA0KICAgIC0JWVlfVVNF
Ul9BQ1RJT04NCiAgICAtDQogICAgLS8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNo
IGRvZXMgYWxsIHRoZSB3b3JrLg0KICAgIC0gKi8NCiAgICAtWVlfREVDTA0KICAgIC17DQogICAg
LQlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7DQogICAgLQlyZWdpc3Rl
ciBjaGFyICp5eV9jcCwgKnl5X2JwOw0KICAgIC0JcmVnaXN0ZXIgaW50IHl5X2FjdDsNCiAgICAt
ICAgIA0KICAgIC0JaW50IHN0ciA9IDA7DQogICAgLQlpbnQgdHMsIGk7DQogICAgLQ0KICAgIC0J
aWYgKCAhKHl5X2luaXQpICkNCiAgICAtCQl7DQogICAgLQkJKHl5X2luaXQpID0gMTsNCiAgICAt
DQogICAgLSNpZmRlZiBZWV9VU0VSX0lOSVQNCiAgICAtCQlZWV9VU0VSX0lOSVQ7DQogICAgLSNl
bmRpZg0KICAgIC0NCiAgICAtCQlpZiAoICEgKHl5X3N0YXJ0KSApDQogICAgLQkJCSh5eV9zdGFy
dCkgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLw0KICAgIC0NCiAgICAtCQlpZiAoICEgemNv
bmZpbiApDQogICAgLQkJCXpjb25maW4gPSBzdGRpbjsNCiAgICAtDQogICAgLQkJaWYgKCAhIHpj
b25mb3V0ICkNCiAgICAtCQkJemNvbmZvdXQgPSBzdGRvdXQ7DQogICAgLQ0KICAgIC0JCWlmICgg
ISBZWV9DVVJSRU5UX0JVRkZFUiApIHsNCiAgICAtCQkJemNvbmZlbnN1cmVfYnVmZmVyX3N0YWNr
ICgpOw0KICAgIC0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQ0KICAgIC0JCQkJemNvbmZf
Y3JlYXRlX2J1ZmZlcih6Y29uZmluLFlZX0JVRl9TSVpFICk7DQogICAgLQkJfQ0KICAgIC0NCiAg
ICAtCQl6Y29uZl9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0J
d2hpbGUgKCAxICkJCS8qIGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8NCiAg
ICAtCQl7DQogICAgLQkJeXlfY3AgPSAoeXlfY19idWZfcCk7DQogICAgLQ0KICAgIC0JCS8qIFN1
cHBvcnQgb2YgemNvbmZ0ZXh0LiAqLw0KICAgIC0JCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOw0K
ICAgIC0NCiAgICAtCQkvKiB5eV9icCBwb2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1
ZiBvZiB0aGUgc3RhcnQgb2YNCiAgICAtCQkgKiB0aGUgY3VycmVudCBydW4uDQogICAgLQkJICov
DQogICAgLQkJeXlfYnAgPSB5eV9jcDsNCiAgICAtDQogICAgLQkJeXlfY3VycmVudF9zdGF0ZSA9
ICh5eV9zdGFydCk7DQogICAgLXl5X21hdGNoOg0KICAgIC0JCXdoaWxlICggKHl5X2N1cnJlbnRf
c3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9zdGF0ZV1bIHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9j
cCldICBdKSA+IDAgKQ0KICAgIC0JCQkrK3l5X2NwOw0KICAgIC0NCiAgICAtCQl5eV9jdXJyZW50
X3N0YXRlID0gLXl5X2N1cnJlbnRfc3RhdGU7DQogICAgLQ0KICAgIC15eV9maW5kX2FjdGlvbjoN
CiAgICAtCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07DQogICAgLQ0KICAg
IC0JCVlZX0RPX0JFRk9SRV9BQ1RJT047DQogICAgLQ0KICAgIC1kb19hY3Rpb246CS8qIFRoaXMg
bGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8NCiAgICAtDQogICAg
LQkJc3dpdGNoICggeXlfYWN0ICkNCiAgICAtCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0
Y2ggKi8NCiAgICAtY2FzZSAxOg0KICAgIC0vKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLw0KICAg
IC1jYXNlIDI6DQogICAgLS8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovDQogICAgLVlZX1JVTEVf
U0VUVVANCiAgICAtew0KICAgIC0JY3VycmVudF9maWxlLT5saW5lbm8rKzsNCiAgICAtCXJldHVy
biBUX0VPTDsNCiAgICAtfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAzOg0KICAgIC1ZWV9S
VUxFX1NFVFVQDQogICAgLQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSA0Og0KICAgIC1ZWV9S
VUxFX1NFVFVQDQogICAgLXsNCiAgICAtCUJFR0lOKENPTU1BTkQpOw0KICAgIC19DQogICAgLQlZ
WV9CUkVBSw0KICAgIC1jYXNlIDU6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtew0KICAgIC0J
dW5wdXQoemNvbmZ0ZXh0WzBdKTsNCiAgICAtCUJFR0lOKENPTU1BTkQpOw0KICAgIC19DQogICAg
LQlZWV9CUkVBSw0KICAgIC0NCiAgICAtY2FzZSA2Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAg
LXsNCiAgICAtCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHpj
b25mdGV4dCwgemNvbmZsZW5nKTsNCiAgICAtCQlCRUdJTihQQVJBTSk7DQogICAgLQkJY3VycmVu
dF9wb3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsNCiAgICAtCQljdXJyZW50X3Bvcy5saW5lbm8gPSBj
dXJyZW50X2ZpbGUtPmxpbmVubzsNCiAgICAtCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfQ09N
TUFORCkgew0KICAgIC0JCQl6Y29uZmx2YWwuaWQgPSBpZDsNCiAgICAtCQkJcmV0dXJuIGlkLT50
b2tlbjsNCiAgICAtCQl9DQogICAgLQkJYWxsb2Nfc3RyaW5nKHpjb25mdGV4dCwgemNvbmZsZW5n
KTsNCiAgICAtCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICAtCQlyZXR1cm4gVF9XT1JE
Ow0KICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSA3Og0KICAgIC1ZWV9SVUxFX1NF
VFVQDQogICAgLQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSA4Og0KICAgIC0vKiBydWxlIDgg
Y2FuIG1hdGNoIGVvbCAqLw0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQlCRUdJ
TihJTklUSUFMKTsNCiAgICAtCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOw0KICAgIC0JCXJldHVy
biBUX0VPTDsNCiAgICAtCX0NCiAgICAtCVlZX0JSRUFLDQogICAgLQ0KICAgIC1jYXNlIDk6DQog
ICAgLVlZX1JVTEVfU0VUVVANCiAgICAtcmV0dXJuIFRfQU5EOw0KICAgIC0JWVlfQlJFQUsNCiAg
ICAtY2FzZSAxMDoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC1yZXR1cm4gVF9PUjsNCiAgICAt
CVlZX0JSRUFLDQogICAgLWNhc2UgMTE6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtcmV0dXJu
IFRfT1BFTl9QQVJFTjsNCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMTI6DQogICAgLVlZX1JV
TEVfU0VUVVANCiAgICAtcmV0dXJuIFRfQ0xPU0VfUEFSRU47DQogICAgLQlZWV9CUkVBSw0KICAg
IC1jYXNlIDEzOg0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXJldHVybiBUX05PVDsNCiAgICAt
CVlZX0JSRUFLDQogICAgLWNhc2UgMTQ6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtcmV0dXJu
IFRfRVFVQUw7DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDE1Og0KICAgIC1ZWV9SVUxFX1NF
VFVQDQogICAgLXJldHVybiBUX1VORVFVQUw7DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDE2
Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQlzdHIgPSB6Y29uZnRleHRbMF07
DQogICAgLQkJbmV3X3N0cmluZygpOw0KICAgIC0JCUJFR0lOKFNUUklORyk7DQogICAgLQl9DQog
ICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDE3Og0KICAgIC0vKiBydWxlIDE3IGNhbiBtYXRjaCBl
b2wgKi8NCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC1CRUdJTihJTklUSUFMKTsgY3VycmVudF9m
aWxlLT5saW5lbm8rKzsgcmV0dXJuIFRfRU9MOw0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAx
ODoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC0vKiBpZ25vcmUgKi8NCiAgICAtCVlZX0JSRUFL
DQogICAgLWNhc2UgMTk6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtew0KICAgIC0JCWNvbnN0
IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoemNvbmZ0ZXh0LCB6Y29uZmxl
bmcpOw0KICAgIC0JCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9QQVJBTSkgew0KICAgIC0JCQl6
Y29uZmx2YWwuaWQgPSBpZDsNCiAgICAtCQkJcmV0dXJuIGlkLT50b2tlbjsNCiAgICAtCQl9DQog
ICAgLQkJYWxsb2Nfc3RyaW5nKHpjb25mdGV4dCwgemNvbmZsZW5nKTsNCiAgICAtCQl6Y29uZmx2
YWwuc3RyaW5nID0gdGV4dDsNCiAgICAtCQlyZXR1cm4gVF9XT1JEOw0KICAgIC0JfQ0KICAgIC0J
WVlfQlJFQUsNCiAgICAtY2FzZSAyMDoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC0vKiBjb21t
ZW50ICovDQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDIxOg0KICAgIC0vKiBydWxlIDIxIGNh
biBtYXRjaCBlb2wgKi8NCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC1jdXJyZW50X2ZpbGUtPmxp
bmVubysrOw0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAyMjoNCiAgICAtWVlfUlVMRV9TRVRV
UA0KICAgIC0NCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgWVlfU1RBVEVfRU9GKFBBUkFNKToN
CiAgICAtew0KICAgIC0JCUJFR0lOKElOSVRJQUwpOw0KICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsN
CiAgICAtDQogICAgLWNhc2UgMjM6DQogICAgLS8qIHJ1bGUgMjMgY2FuIG1hdGNoIGVvbCAqLw0K
ICAgIC0qeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcg
dXAgemNvbmZ0ZXh0ICovDQogICAgLSh5eV9jX2J1Zl9wKSA9IHl5X2NwIC09IDE7DQogICAgLVlZ
X0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB6Y29uZnRleHQgYWdhaW4gKi8NCiAgICAtWVlf
UlVMRV9TRVRVUA0KICAgIC17DQogICAgLQkJYXBwZW5kX3N0cmluZyh6Y29uZnRleHQsIHpjb25m
bGVuZyk7DQogICAgLQkJemNvbmZsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgLQkJcmV0dXJuIFRf
V09SRF9RVU9URTsNCiAgICAtCX0NCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMjQ6DQogICAg
LVlZX1JVTEVfU0VUVVANCiAgICAtew0KICAgIC0JCWFwcGVuZF9zdHJpbmcoemNvbmZ0ZXh0LCB6
Y29uZmxlbmcpOw0KICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAyNToNCiAgICAt
LyogcnVsZSAyNSBjYW4gbWF0Y2ggZW9sICovDQogICAgLSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIp
OyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB6Y29uZnRleHQgKi8NCiAgICAtKHl5X2Nf
YnVmX3ApID0geXlfY3AgLT0gMTsNCiAgICAtWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVw
IHpjb25mdGV4dCBhZ2FpbiAqLw0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQlh
cHBlbmRfc3RyaW5nKHpjb25mdGV4dCArIDEsIHpjb25mbGVuZyAtIDEpOw0KICAgIC0JCXpjb25m
bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAgIC0JCXJldHVybiBUX1dPUkRfUVVPVEU7DQogICAgLQl9
DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDI2Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAg
LXsNCiAgICAtCQlhcHBlbmRfc3RyaW5nKHpjb25mdGV4dCArIDEsIHpjb25mbGVuZyAtIDEpOw0K
ICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAyNzoNCiAgICAtWVlfUlVMRV9TRVRV
UA0KICAgIC17DQogICAgLQkJaWYgKHN0ciA9PSB6Y29uZnRleHRbMF0pIHsNCiAgICAtCQkJQkVH
SU4oUEFSQU0pOw0KICAgIC0JCQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICAtCQkJcmV0
dXJuIFRfV09SRF9RVU9URTsNCiAgICAtCQl9IGVsc2UNCiAgICAtCQkJYXBwZW5kX3N0cmluZyh6
Y29uZnRleHQsIDEpOw0KICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAyODoNCiAg
ICAtLyogcnVsZSAyOCBjYW4gbWF0Y2ggZW9sICovDQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAt
ew0KICAgIC0JCXByaW50ZigiJXM6JWQ6d2FybmluZzogbXVsdGktbGluZSBzdHJpbmdzIG5vdCBz
dXBwb3J0ZWRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JCWN1
cnJlbnRfZmlsZS0+bGluZW5vKys7DQogICAgLQkJQkVHSU4oSU5JVElBTCk7DQogICAgLQkJcmV0
dXJuIFRfRU9MOw0KICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSBZWV9TVEFURV9F
T0YoU1RSSU5HKToNCiAgICAtew0KICAgIC0JCUJFR0lOKElOSVRJQUwpOw0KICAgIC0JfQ0KICAg
IC0JWVlfQlJFQUsNCiAgICAtDQogICAgLWNhc2UgMjk6DQogICAgLVlZX1JVTEVfU0VUVVANCiAg
ICAtew0KICAgIC0JCXRzID0gMDsNCiAgICAtCQlmb3IgKGkgPSAwOyBpIDwgemNvbmZsZW5nOyBp
KyspIHsNCiAgICAtCQkJaWYgKHpjb25mdGV4dFtpXSA9PSAnXHQnKQ0KICAgIC0JCQkJdHMgPSAo
dHMgJiB+NykgKyA4Ow0KICAgIC0JCQllbHNlDQogICAgLQkJCQl0cysrOw0KICAgIC0JCX0NCiAg
ICAtCQlsYXN0X3RzID0gdHM7DQogICAgLQkJaWYgKGZpcnN0X3RzKSB7DQogICAgLQkJCWlmICh0
cyA8IGZpcnN0X3RzKSB7DQogICAgLQkJCQl6Y29uZl9lbmRoZWxwKCk7DQogICAgLQkJCQlyZXR1
cm4gVF9IRUxQVEVYVDsNCiAgICAtCQkJfQ0KICAgIC0JCQl0cyAtPSBmaXJzdF90czsNCiAgICAt
CQkJd2hpbGUgKHRzID4gOCkgew0KICAgIC0JCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCA4
KTsNCiAgICAtCQkJCXRzIC09IDg7DQogICAgLQkJCX0NCiAgICAtCQkJYXBwZW5kX3N0cmluZygi
ICAgICAgICAiLCB0cyk7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAt
Y2FzZSAzMDoNCiAgICAtLyogcnVsZSAzMCBjYW4gbWF0Y2ggZW9sICovDQogICAgLSp5eV9jcCA9
ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB6Y29uZnRleHQg
Ki8NCiAgICAtKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsNCiAgICAtWVlfRE9fQkVGT1JFX0FD
VElPTjsgLyogc2V0IHVwIHpjb25mdGV4dCBhZ2FpbiAqLw0KICAgIC1ZWV9SVUxFX1NFVFVQDQog
ICAgLXsNCiAgICAtCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOw0KICAgIC0JCXpjb25mX2VuZGhl
bHAoKTsNCiAgICAtCQlyZXR1cm4gVF9IRUxQVEVYVDsNCiAgICAtCX0NCiAgICAtCVlZX0JSRUFL
DQogICAgLWNhc2UgMzE6DQogICAgLS8qIHJ1bGUgMzEgY2FuIG1hdGNoIGVvbCAqLw0KICAgIC1Z
WV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQljdXJyZW50X2ZpbGUtPmxpbmVubysrOw0KICAg
IC0JCWFwcGVuZF9zdHJpbmcoIlxuIiwgMSk7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0KICAg
IC1jYXNlIDMyOg0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQl3aGlsZSAoemNv
bmZsZW5nKSB7DQogICAgLQkJCWlmICgoemNvbmZ0ZXh0W3pjb25mbGVuZy0xXSAhPSAnICcpICYm
ICh6Y29uZnRleHRbemNvbmZsZW5nLTFdICE9ICdcdCcpKQ0KICAgIC0JCQkJYnJlYWs7DQogICAg
LQkJCXpjb25mbGVuZy0tOw0KICAgIC0JCX0NCiAgICAtCQlhcHBlbmRfc3RyaW5nKHpjb25mdGV4
dCwgemNvbmZsZW5nKTsNCiAgICAtCQlpZiAoIWZpcnN0X3RzKQ0KICAgIC0JCQlmaXJzdF90cyA9
IGxhc3RfdHM7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIFlZX1NUQVRFX0VP
RihIRUxQKToNCiAgICAtew0KICAgIC0JCXpjb25mX2VuZGhlbHAoKTsNCiAgICAtCQlyZXR1cm4g
VF9IRUxQVEVYVDsNCiAgICAtCX0NCiAgICAtCVlZX0JSRUFLDQogICAgLQ0KICAgIC1jYXNlIFlZ
X1NUQVRFX0VPRihJTklUSUFMKToNCiAgICAtY2FzZSBZWV9TVEFURV9FT0YoQ09NTUFORCk6DQog
ICAgLXsNCiAgICAtCWlmIChjdXJyZW50X2ZpbGUpIHsNCiAgICAtCQl6Y29uZl9lbmRmaWxlKCk7
DQogICAgLQkJcmV0dXJuIFRfRU9MOw0KICAgIC0JfQ0KICAgIC0JZmNsb3NlKHpjb25maW4pOw0K
ICAgIC0JeXl0ZXJtaW5hdGUoKTsNCiAgICAtfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAz
MzoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC1ZWV9GQVRBTF9FUlJPUiggImZsZXggc2Nhbm5l
ciBqYW1tZWQiICk7DQogICAgLQlZWV9CUkVBSw0KICAgIC0NCiAgICAtCWNhc2UgWVlfRU5EX09G
X0JVRkZFUjoNCiAgICAtCQl7DQogICAgLQkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3Qg
aW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8NCiAgICAtCQlpbnQgeXlfYW1vdW50X29mX21hdGNo
ZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtICh5eXRleHRfcHRyKSkgLSAxOw0KICAgIC0NCiAgICAt
CQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovDQogICAgLQkJ
Knl5X2NwID0gKHl5X2hvbGRfY2hhcik7DQogICAgLQkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNF
VA0KICAgIC0NCiAgICAtCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkNCiAgICAtCQkJew0KICAgIC0JCQkvKiBXZSdyZSBz
Y2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MNCiAgICAtCQkJICogcG9z
c2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXINCiAgICAtCQkJICoganVz
dCBwb2ludGVkIHpjb25maW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQNCiAgICAtCQkJICog
emNvbmZsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlDQogICAgLQkJCSAqIGNv
bnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cg0KICAgIC0JCQkgKiBn
bG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1c2UNCiAgICAt
CQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGENCiAg
ICAtCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJj
ZS4NCiAgICAtCQkJICovDQogICAgLQkJCSh5eV9uX2NoYXJzKSA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfbl9jaGFyczsNCiAgICAtCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9pbnB1dF9maWxlID0gemNvbmZpbjsNCiAgICAtCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsNCiAgICAtCQkJfQ0KICAgIC0N
CiAgICAtCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8g
dGhlIHBvc2l0aW9uDQogICAgLQkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBz
aW5jZSB5eV9jX2J1Zl9wIHdpbGwNCiAgICAtCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1l
bnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyDQogICAgLQkJICogKHNpbmNlIGFsbCBzdGF0ZXMg
bWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlDQogICAgLQkJICogZW5kLW9mLWJ1ZmZlciBz
dGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QNCiAgICAtCQkgKiBpbiBpbnB1dCgp
Lg0KICAgIC0JCSAqLw0KICAgIC0JCWlmICggKHl5X2NfYnVmX3ApIDw9ICZZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkNCiAgICAtCQkJeyAvKiBUaGlz
IHdhcyByZWFsbHkgYSBOVUwuICovDQogICAgLQkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0
ZTsNCiAgICAtDQogICAgLQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIHl5X2Ftb3Vu
dF9vZl9tYXRjaGVkX3RleHQ7DQogICAgLQ0KICAgIC0JCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsNCiAgICAtDQogICAgLQkJCS8qIE9rYXksIHdlJ3JlIG5v
dyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTA0KICAgIC0JCQkgKiB0cmFuc2l0aW9uLiAgV2Ug
Y291bGRuJ3QgaGF2ZQ0KICAgIC0JCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVh
ZCBhbmQgZG8gaXQNCiAgICAtCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhv
dyB0byBkZWFsDQogICAgLQkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFu
ZCB3ZSBkb24ndA0KICAgIC0JCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNh
dXNlIHRoZW4gaXQNCiAgICAtCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLg0KICAgIC0JCQkg
Ki8NCiAgICAtDQogICAgLQkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9j
dXJyZW50X3N0YXRlICk7DQogICAgLQ0KICAgIC0JCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZ
X01PUkVfQURKOw0KICAgIC0NCiAgICAtCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkNCiAgICAtCQkJ
CXsNCiAgICAtCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8NCiAgICAtCQkJCXl5X2NwID0gKyso
eXlfY19idWZfcCk7DQogICAgLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsN
CiAgICAtCQkJCWdvdG8geXlfbWF0Y2g7DQogICAgLQkJCQl9DQogICAgLQ0KICAgIC0JCQllbHNl
DQogICAgLQkJCQl7DQogICAgLQkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsNCiAgICAtCQkJCWdv
dG8geXlfZmluZF9hY3Rpb247DQogICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtDQogICAgLQkJ
ZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkNCiAgICAtCQkJew0KICAgIC0J
CQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6DQogICAgLQkJCQl7DQogICAgLQkJCQkoeXlfZGlk
X2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDA7DQogICAgLQ0KICAgIC0JCQkJaWYgKCB6Y29uZndy
YXAoICkgKQ0KICAgIC0JCQkJCXsNCiAgICAtCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRh
a2VuIGNhcmUgaW4NCiAgICAtCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZlIHNl
dCB1cA0KICAgIC0JCQkJCSAqIHpjb25mdGV4dCwgd2UgY2FuIG5vdyBzZXQgdXANCiAgICAtCQkJ
CQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbA0KICAgIC0JCQkJCSAqIGhvc2Vy
IChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bw0KICAgIC0JCQkJCSAqIGNhbGwgdGhlIHNjYW5u
ZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQ0KICAgIC0JCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxs
IHdvcmsgLSBhbm90aGVyDQogICAgLQkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4N
CiAgICAtCQkJCQkgKi8NCiAgICAtCQkJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikgKyBZ
WV9NT1JFX0FESjsNCiAgICAtDQogICAgLQkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NU
QVJUKTsNCiAgICAtCQkJCQlnb3RvIGRvX2FjdGlvbjsNCiAgICAtCQkJCQl9DQogICAgLQ0KICAg
IC0JCQkJZWxzZQ0KICAgIC0JCQkJCXsNCiAgICAtCQkJCQlpZiAoICEgKHl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZikgKQ0KICAgIC0JCQkJCQlZWV9ORVdfRklMRTsNCiAgICAtCQkJCQl9DQog
ICAgLQkJCQlicmVhazsNCiAgICAtCQkJCX0NCiAgICAtDQogICAgLQkJCWNhc2UgRU9CX0FDVF9D
T05USU5VRV9TQ0FOOg0KICAgIC0JCQkJKHl5X2NfYnVmX3ApID0NCiAgICAtCQkJCQkoeXl0ZXh0
X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Ow0KICAgIC0NCiAgICAtCQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoICApOw0KICAgIC0NCiAgICAtCQkJ
CXl5X2NwID0gKHl5X2NfYnVmX3ApOw0KICAgIC0JCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZ
WV9NT1JFX0FESjsNCiAgICAtCQkJCWdvdG8geXlfbWF0Y2g7DQogICAgLQ0KICAgIC0JCQljYXNl
IEVPQl9BQ1RfTEFTVF9NQVRDSDoNCiAgICAtCQkJCSh5eV9jX2J1Zl9wKSA9DQogICAgLQkJCQkm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXTsNCiAgICAt
DQogICAgLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsN
CiAgICAtDQogICAgLQkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsNCiAgICAtCQkJCXl5X2JwID0g
KHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7DQogICAgLQkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9u
Ow0KICAgIC0JCQl9DQogICAgLQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCWRlZmF1
bHQ6DQogICAgLQkJWVlfRkFUQUxfRVJST1IoDQogICAgLQkJCSJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsNCiAgICAtCX0gLyogZW5kIG9mIGFj
dGlvbiBzd2l0Y2ggKi8NCiAgICAtCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8N
CiAgICAtfSAvKiBlbmQgb2YgemNvbmZsZXggKi8NCiAgICAtDQogICAgLS8qIHl5X2dldF9uZXh0
X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcg0KICAgIC0gKg0KICAgIC0gKiBS
ZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOg0KICAgIC0gKglFT0JfQUNUX0xB
U1RfTUFUQ0ggLQ0KICAgIC0gKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2Fu
bmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24NCiAgICAtICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAt
IGVuZCBvZiBmaWxlDQogICAgLSAqLw0KICAgIC1zdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZl
ciAodm9pZCkNCiAgICAtew0KICAgIC0gICAgCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsNCiAgICAtCXJlZ2lzdGVyIGNoYXIgKnNvdXJj
ZSA9ICh5eXRleHRfcHRyKTsNCiAgICAtCXJlZ2lzdGVyIGludCBudW1iZXJfdG9fbW92ZSwgaTsN
CiAgICAtCWludCByZXRfdmFsOw0KICAgIC0NCiAgICAtCWlmICggKHl5X2NfYnVmX3ApID4gJllZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdICkNCiAg
ICAtCQlZWV9GQVRBTF9FUlJPUigNCiAgICAtCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFs
IGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsNCiAgICAtDQogICAgLQlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApDQogICAgLQkJeyAvKiBE
b24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8NCiAgICAt
CQlpZiAoICh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAtIFlZX01PUkVfQURKID09IDEgKQ0K
ICAgIC0JCQl7DQogICAgLQkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUg
RU9CLCBzbw0KICAgIC0JCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9GLg0KICAgIC0JCQkg
Ki8NCiAgICAtCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7DQogICAgLQkJCX0NCiAgICAt
DQogICAgLQkJZWxzZQ0KICAgIC0JCQl7DQogICAgLQkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0
IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0DQogICAgLQkJCSAqIHByb2Nlc3MgaXQuDQogICAgLQkJ
CSAqLw0KICAgIC0JCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOw0KICAgIC0JCQl9DQogICAg
LQkJfQ0KICAgIC0NCiAgICAtCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8NCiAgICAtDQog
ICAgLQkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLw0KICAg
IC0JbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpKSAt
IDE7DQogICAgLQ0KICAgIC0JZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkN
CiAgICAtCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsNCiAgICAtDQogICAgLQlpZiAoIFlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BF
TkRJTkcgKQ0KICAgIC0JCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVk
IHRvIHJldHVybiBhbiBFT0YsDQogICAgLQkJICoganVzdCBmb3JjZSBhbiBFT0YNCiAgICAtCQkg
Ki8NCiAgICAtCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9j
aGFycykgPSAwOw0KICAgIC0NCiAgICAtCWVsc2UNCiAgICAtCQl7DQogICAgLQkJCWludCBudW1f
dG9fcmVhZCA9DQogICAgLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUg
LSBudW1iZXJfdG9fbW92ZSAtIDE7DQogICAgLQ0KICAgIC0JCXdoaWxlICggbnVtX3RvX3JlYWQg
PD0gMCApDQogICAgLQkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93
IGl0LiAqLw0KICAgIC0NCiAgICAtCQkJLyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1
cnJlbnQgYnVmZmVyICovDQogICAgLQkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9C
VUZGRVI7DQogICAgLQ0KICAgIC0JCQlpbnQgeXlfY19idWZfcF9vZmZzZXQgPQ0KICAgIC0JCQkJ
KGludCkgKCh5eV9jX2J1Zl9wKSAtIGItPnl5X2NoX2J1Zik7DQogICAgLQ0KICAgIC0JCQlpZiAo
IGItPnl5X2lzX291cl9idWZmZXIgKQ0KICAgIC0JCQkJew0KICAgIC0JCQkJaW50IG5ld19zaXpl
ID0gYi0+eXlfYnVmX3NpemUgKiAyOw0KICAgIC0NCiAgICAtCQkJCWlmICggbmV3X3NpemUgPD0g
MCApDQogICAgLQkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4Ow0KICAg
IC0JCQkJZWxzZQ0KICAgIC0JCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7DQogICAgLQ0KICAgIC0J
CQkJYi0+eXlfY2hfYnVmID0gKGNoYXIgKikNCiAgICAtCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4g
Zm9yIDIgRU9CIGNoYXJzLiAqLw0KICAgIC0JCQkJCXpjb25mcmVhbGxvYygodm9pZCAqKSBiLT55
eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICApOw0KICAgIC0JCQkJfQ0KICAgIC0JCQllbHNl
DQogICAgLQkJCQkvKiBDYW4ndCBncm93IGl0LCB3ZSBkb24ndCBvd24gaXQuICovDQogICAgLQkJ
CQliLT55eV9jaF9idWYgPSAwOw0KICAgIC0NCiAgICAtCQkJaWYgKCAhIGItPnl5X2NoX2J1ZiAp
DQogICAgLQkJCQlZWV9GQVRBTF9FUlJPUigNCiAgICAtCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5u
ZXIgaW5wdXQgYnVmZmVyIG92ZXJmbG93IiApOw0KICAgIC0NCiAgICAtCQkJKHl5X2NfYnVmX3Ap
ID0gJmItPnl5X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07DQogICAgLQ0KICAgIC0JCQludW1f
dG9fcmVhZCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLQ0KICAgIC0J
CQkJCQludW1iZXJfdG9fbW92ZSAtIDE7DQogICAgLQ0KICAgIC0JCQl9DQogICAgLQ0KICAgIC0J
CWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkNCiAgICAtCQkJbnVtX3RvX3Jl
YWQgPSBZWV9SRUFEX0JVRl9TSVpFOw0KICAgIC0NCiAgICAtCQkvKiBSZWFkIGluIG1vcmUgZGF0
YS4gKi8NCiAgICAtCQlZWV9JTlBVVCggKCZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2No
X2J1ZltudW1iZXJfdG9fbW92ZV0pLA0KICAgIC0JCQkoeXlfbl9jaGFycyksIChzaXplX3QpIG51
bV90b19yZWFkICk7DQogICAgLQ0KICAgIC0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFycyA9ICh5eV9uX2NoYXJzKTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JaWYgKCAoeXlf
bl9jaGFycykgPT0gMCApDQogICAgLQkJew0KICAgIC0JCWlmICggbnVtYmVyX3RvX21vdmUgPT0g
WVlfTU9SRV9BREogKQ0KICAgIC0JCQl7DQogICAgLQkJCXJldF92YWwgPSBFT0JfQUNUX0VORF9P
Rl9GSUxFOw0KICAgIC0JCQl6Y29uZnJlc3RhcnQoemNvbmZpbiAgKTsNCiAgICAtCQkJfQ0KICAg
IC0NCiAgICAtCQllbHNlDQogICAgLQkJCXsNCiAgICAtCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFT
VF9NQVRDSDsNCiAgICAtCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3Rh
dHVzID0NCiAgICAtCQkJCVlZX0JVRkZFUl9FT0ZfUEVORElORzsNCiAgICAtCQkJfQ0KICAgIC0J
CX0NCiAgICAtDQogICAgLQllbHNlDQogICAgLQkJcmV0X3ZhbCA9IEVPQl9BQ1RfQ09OVElOVUVf
U0NBTjsNCiAgICAtDQogICAgLQlpZiAoKHl5X3NpemVfdCkgKCh5eV9uX2NoYXJzKSArIG51bWJl
cl90b19tb3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsNCiAg
ICAtCQkvKiBFeHRlbmQgdGhlIGFycmF5IGJ5IDUwJSwgcGx1cyB0aGUgbnVtYmVyIHdlIHJlYWxs
eSBuZWVkLiAqLw0KICAgIC0JCXl5X3NpemVfdCBuZXdfc2l6ZSA9ICh5eV9uX2NoYXJzKSArIG51
bWJlcl90b19tb3ZlICsgKCh5eV9uX2NoYXJzKSA+PiAxKTsNCiAgICAtCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiA9IChjaGFyICopIHpjb25mcmVhbGxvYygodm9pZCAqKSBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAgKTsNCiAgICAtCQlp
ZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQ0KICAgIC0JCQlZWV9G
QVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIo
KSIgKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQkoeXlfbl9jaGFycykgKz0gbnVtYmVyX3RvX21v
dmU7DQogICAgLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFy
cyldID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOw0KICAgIC0JWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpICsgMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
DQogICAgLQ0KICAgIC0JKHl5dGV4dF9wdHIpID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmWzBdOw0KICAgIC0NCiAgICAtCXJldHVybiByZXRfdmFsOw0KICAgIC19DQogICAg
LQ0KICAgIC0vKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVm
b3JlIHRoZSBFT0IgY2hhciB3YXMgcmVhY2hlZCAqLw0KICAgIC0NCiAgICAtICAgIHN0YXRpYyB5
eV9zdGF0ZV90eXBlIHl5X2dldF9wcmV2aW91c19zdGF0ZSAodm9pZCkNCiAgICAtew0KICAgIC0J
cmVnaXN0ZXIgeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOw0KICAgIC0JcmVnaXN0ZXIg
Y2hhciAqeXlfY3A7DQogICAgLSAgICANCiAgICAtCXl5X2N1cnJlbnRfc3RhdGUgPSAoeXlfc3Rh
cnQpOw0KICAgIC0NCiAgICAtCWZvciAoIHl5X2NwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9B
REo7IHl5X2NwIDwgKHl5X2NfYnVmX3ApOyArK3l5X2NwICkNCiAgICAtCQl7DQogICAgLQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9jdXJyZW50X3N0YXRlXVsoKnl5X2NwID8geXlfZWNb
WVlfU0NfVE9fVUkoKnl5X2NwKV0gOiAxKV07DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCXJldHVy
biB5eV9jdXJyZW50X3N0YXRlOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiB5eV90cnlfTlVMX3Ry
YW5zIC0gdHJ5IHRvIG1ha2UgYSB0cmFuc2l0aW9uIG9uIHRoZSBOVUwgY2hhcmFjdGVyDQogICAg
LSAqDQogICAgLSAqIHN5bm9wc2lzDQogICAgLSAqCW5leHRfc3RhdGUgPSB5eV90cnlfTlVMX3Ry
YW5zKCBjdXJyZW50X3N0YXRlICk7DQogICAgLSAqLw0KICAgIC0gICAgc3RhdGljIHl5X3N0YXRl
X3R5cGUgeXlfdHJ5X05VTF90cmFucyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAp
DQogICAgLXsNCiAgICAtCXJlZ2lzdGVyIGludCB5eV9pc19qYW07DQogICAgLSAgICANCiAgICAt
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9zdGF0ZV1bMV07DQogICAgLQl5
eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA8PSAwKTsNCiAgICAtDQogICAgLQlyZXR1cm4g
eXlfaXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7DQogICAgLX0NCiAgICAtDQogICAgLSAg
ICBzdGF0aWMgdm9pZCB5eXVucHV0IChpbnQgYywgcmVnaXN0ZXIgY2hhciAqIHl5X2JwICkNCiAg
ICAtew0KICAgIC0JcmVnaXN0ZXIgY2hhciAqeXlfY3A7DQogICAgLSAgICANCiAgICAtICAgIHl5
X2NwID0gKHl5X2NfYnVmX3ApOw0KICAgIC0NCiAgICAtCS8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0
aW5nIHVwIHpjb25mdGV4dCAqLw0KICAgIC0JKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7DQogICAg
LQ0KICAgIC0JaWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
ICsgMiApDQogICAgLQkJeyAvKiBuZWVkIHRvIHNoaWZ0IHRoaW5ncyB1cCB0byBtYWtlIHJvb20g
Ki8NCiAgICAtCQkvKiArMiBmb3IgRU9CIGNoYXJzLiAqLw0KICAgIC0JCXJlZ2lzdGVyIGludCBu
dW1iZXJfdG9fbW92ZSA9ICh5eV9uX2NoYXJzKSArIDI7DQogICAgLQkJcmVnaXN0ZXIgY2hhciAq
ZGVzdCA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsNCiAgICAtCQkJCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplICsgMl07DQogICAgLQkJcmVnaXN0
ZXIgY2hhciAqc291cmNlID0NCiAgICAtCQkJCSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZltudW1iZXJfdG9fbW92ZV07DQogICAgLQ0KICAgIC0JCXdoaWxlICggc291cmNlID4g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQ0KICAgIC0JCQkqLS1kZXN0ID0g
Ki0tc291cmNlOw0KICAgIC0NCiAgICAtCQl5eV9jcCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7
DQogICAgLQkJeXlfYnAgKz0gKGludCkgKGRlc3QgLSBzb3VyY2UpOw0KICAgIC0JCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9DQogICAgLQkJCSh5eV9uX2NoYXJzKSA9IFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemU7DQogICAgLQ0KICAgIC0JCWlmICgg
eXlfY3AgPCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQ0KICAgIC0J
CQlZWV9GQVRBTF9FUlJPUiggImZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3ciICk7DQog
ICAgLQkJfQ0KICAgIC0NCiAgICAtCSotLXl5X2NwID0gKGNoYXIpIGM7DQogICAgLQ0KICAgIC0J
KHl5dGV4dF9wdHIpID0geXlfYnA7DQogICAgLQkoeXlfaG9sZF9jaGFyKSA9ICp5eV9jcDsNCiAg
ICAtCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOw0KICAgIC19DQogICAgLQ0KICAgIC0jaWZuZGVmIFlZ
X05PX0lOUFVUDQogICAgLSNpZmRlZiBfX2NwbHVzcGx1cw0KICAgIC0gICAgc3RhdGljIGludCB5
eWlucHV0ICh2b2lkKQ0KICAgIC0jZWxzZQ0KICAgIC0gICAgc3RhdGljIGludCBpbnB1dCAgKHZv
aWQpDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtew0KICAgIC0JaW50IGM7DQogICAgLSAgICAN
CiAgICAtCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsNCiAgICAtDQogICAgLQlpZiAo
ICooeXlfY19idWZfcCkgPT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkNCiAgICAtCQl7DQogICAg
LQkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRoZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byBy
ZXR1cm4uDQogICAgLQkJICogSWYgdGhpcyBvY2N1cnMgKmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0
ZXJzLCB0aGVuIGl0J3MgYQ0KICAgIC0JCSAqIHZhbGlkIE5VTDsgaWYgbm90LCB0aGVuIHdlJ3Zl
IGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuDQogICAgLQkJICovDQogICAgLQkJaWYgKCAoeXlf
Y19idWZfcCkgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hh
cnMpXSApDQogICAgLQkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8NCiAgICAtCQkJKih5
eV9jX2J1Zl9wKSA9ICdcMCc7DQogICAgLQ0KICAgIC0JCWVsc2UNCiAgICAtCQkJeyAvKiBuZWVk
IG1vcmUgaW5wdXQgKi8NCiAgICAtCQkJaW50IG9mZnNldCA9ICh5eV9jX2J1Zl9wKSAtICh5eXRl
eHRfcHRyKTsNCiAgICAtCQkJKysoeXlfY19idWZfcCk7DQogICAgLQ0KICAgIC0JCQlzd2l0Y2gg
KCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkNCiAgICAtCQkJCXsNCiAgICAtCQkJCWNhc2UgRU9C
X0FDVF9MQVNUX01BVENIOg0KICAgIC0JCQkJCS8qIFRoaXMgaGFwcGVucyBiZWNhdXNlIHl5X2df
bl9iKCkNCiAgICAtCQkJCQkgKiBzZWVzIHRoYXQgd2UndmUgYWNjdW11bGF0ZWQgYQ0KICAgIC0J
CQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8NCiAgICAtCQkJCQkgKiB0cnkg
bWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQ0KICAgIC0JCQkJCSAqIHByb2NlZWRpbmcuICBCdXQg
Zm9yIGlucHV0KCksDQogICAgLQkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25zaWRl
ci4NCiAgICAtCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBFT0JfQUNUX0xBU1RfTUFUQ0gNCiAgICAt
CQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLg0KICAgIC0JCQkJCSAqLw0KICAgIC0NCiAg
ICAtCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAqLw0KICAgIC0JCQkJCXpjb25mcmVzdGFy
dCh6Y29uZmluICk7DQogICAgLQ0KICAgIC0JCQkJCS8qRkFMTFRIUk9VR0gqLw0KICAgIC0NCiAg
ICAtCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToNCiAgICAtCQkJCQl7DQogICAgLQkJCQkJ
aWYgKCB6Y29uZndyYXAoICkgKQ0KICAgIC0JCQkJCQlyZXR1cm4gRU9GOw0KICAgIC0NCiAgICAt
CQkJCQlpZiAoICEgKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgKQ0KICAgIC0JCQkJCQlZ
WV9ORVdfRklMRTsNCiAgICAtI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgLQkJCQkJcmV0dXJuIHl5
aW5wdXQoKTsNCiAgICAtI2Vsc2UNCiAgICAtCQkJCQlyZXR1cm4gaW5wdXQoKTsNCiAgICAtI2Vu
ZGlmDQogICAgLQkJCQkJfQ0KICAgIC0NCiAgICAtCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9T
Q0FOOg0KICAgIC0JCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsNCiAg
ICAtCQkJCQlicmVhazsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtDQog
ICAgLQljID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3IgOC1i
aXQgY2hhcidzICovDQogICAgLQkqKHl5X2NfYnVmX3ApID0gJ1wwJzsJLyogcHJlc2VydmUgemNv
bmZ0ZXh0ICovDQogICAgLQkoeXlfaG9sZF9jaGFyKSA9ICorKyh5eV9jX2J1Zl9wKTsNCiAgICAt
DQogICAgLQlyZXR1cm4gYzsNCiAgICAtfQ0KICAgIC0jZW5kaWYJLyogaWZuZGVmIFlZX05PX0lO
UFVUICovDQogICAgLQ0KICAgIC0vKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVyZW50
IGlucHV0IHN0cmVhbS4NCiAgICAtICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJl
YW0uDQogICAgLSAqIA0KICAgIC0gKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0
IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElBTCAuDQogICAgLSAqLw0KICAgIC0gICAg
dm9pZCB6Y29uZnJlc3RhcnQgIChGSUxFICogaW5wdXRfZmlsZSApDQogICAgLXsNCiAgICAtICAg
IA0KICAgIC0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7DQogICAgLSAgICAgICAgemNvbmZl
bnN1cmVfYnVmZmVyX3N0YWNrICgpOw0KICAgIC0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
DQogICAgLSAgICAgICAgICAgIHpjb25mX2NyZWF0ZV9idWZmZXIoemNvbmZpbixZWV9CVUZfU0la
RSApOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXpjb25mX2luaXRfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSLGlucHV0X2ZpbGUgKTsNCiAgICAtCXpjb25mX2xvYWRfYnVmZmVyX3N0YXRlKCApOw0K
ICAgIC19DQogICAgLQ0KICAgIC0vKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZl
ci4NCiAgICAtICogQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBpbnB1dCBidWZmZXIuDQogICAg
LSAqIA0KICAgIC0gKi8NCiAgICAtICAgIHZvaWQgemNvbmZfc3dpdGNoX3RvX2J1ZmZlciAgKFlZ
X0JVRkZFUl9TVEFURSAgbmV3X2J1ZmZlciApDQogICAgLXsNCiAgICAtICAgIA0KICAgIC0JLyog
VE9ETy4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBi
b2R5DQogICAgLQkgKiB3aXRoDQogICAgLQkgKgkJemNvbmZwb3BfYnVmZmVyX3N0YXRlKCk7DQog
ICAgLQkgKgkJemNvbmZwdXNoX2J1ZmZlcl9zdGF0ZShuZXdfYnVmZmVyKTsNCiAgICAtICAgICAq
Lw0KICAgIC0JemNvbmZlbnN1cmVfYnVmZmVyX3N0YWNrICgpOw0KICAgIC0JaWYgKCBZWV9DVVJS
RU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0J
aWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApDQogICAgLQkJew0KICAgIC0JCS8qIEZsdXNoIG91dCBp
bmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8NCiAgICAtCQkqKHl5X2NfYnVmX3ApID0gKHl5
X2hvbGRfY2hhcik7DQogICAgLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9z
ID0gKHl5X2NfYnVmX3ApOw0KICAgIC0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9j
aGFycyA9ICh5eV9uX2NoYXJzKTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFID0gbmV3X2J1ZmZlcjsNCiAgICAtCXpjb25mX2xvYWRfYnVmZmVyX3N0YXRl
KCApOw0KICAgIC0NCiAgICAtCS8qIFdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBk
aWQgdGhpcyBzd2l0Y2ggZHVyaW5nDQogICAgLQkgKiBFT0YgKHpjb25md3JhcCgpKSBwcm9jZXNz
aW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcNCiAgICAtCSAqIGlzIGxvb2tlZCBhdCBp
cyBhZnRlciB6Y29uZndyYXAoKSBpcyBjYWxsZWQsIHNvIGl0J3Mgc2FmZQ0KICAgIC0JICogdG8g
Z28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuDQogICAgLQkgKi8NCiAgICAtCSh5eV9kaWRfYnVm
ZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQg
emNvbmZfbG9hZF9idWZmZXJfc3RhdGUgICh2b2lkKQ0KICAgIC17DQogICAgLSAgICAJKHl5X25f
Y2hhcnMpID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOw0KICAgIC0JKHl5
dGV4dF9wdHIpID0gKHl5X2NfYnVmX3ApID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9i
dWZfcG9zOw0KICAgIC0JemNvbmZpbiA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5w
dXRfZmlsZTsNCiAgICAtCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1Zl9wKTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtLyoqIEFsbG9jYXRlIGFuZCBpbml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBz
dGF0ZS4NCiAgICAtICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBzdHJlYW0uDQogICAgLSAqIEBw
YXJhbSBzaXplIFRoZSBjaGFyYWN0ZXIgYnVmZmVyIHNpemUgaW4gYnl0ZXMuIFdoZW4gaW4gZG91
YnQsIHVzZSBAYyBZWV9CVUZfU0laRS4NCiAgICAtICogDQogICAgLSAqIEByZXR1cm4gdGhlIGFs
bG9jYXRlZCBidWZmZXIgc3RhdGUuDQogICAgLSAqLw0KICAgIC0gICAgWVlfQlVGRkVSX1NUQVRF
IHpjb25mX2NyZWF0ZV9idWZmZXIgIChGSUxFICogZmlsZSwgaW50ICBzaXplICkNCiAgICAtew0K
ICAgIC0JWVlfQlVGRkVSX1NUQVRFIGI7DQogICAgLSAgICANCiAgICAtCWIgPSAoWVlfQlVGRkVS
X1NUQVRFKSB6Y29uZmFsbG9jKHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICApOw0K
ICAgIC0JaWYgKCAhIGIgKQ0KICAgIC0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHpjb25mX2NyZWF0ZV9idWZmZXIoKSIgKTsNCiAgICAtDQogICAgLQliLT55eV9i
dWZfc2l6ZSA9IHNpemU7DQogICAgLQ0KICAgIC0JLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNo
YXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQ0KICAgIC0JICogd2Ug
bmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuDQogICAgLQkgKi8NCiAg
ICAtCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHpjb25mYWxsb2MoYi0+eXlfYnVmX3NpemUgKyAy
ICApOw0KICAgIC0JaWYgKCAhIGItPnl5X2NoX2J1ZiApDQogICAgLQkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4gemNvbmZfY3JlYXRlX2J1ZmZlcigpIiApOw0KICAg
IC0NCiAgICAtCWItPnl5X2lzX291cl9idWZmZXIgPSAxOw0KICAgIC0NCiAgICAtCXpjb25mX2lu
aXRfYnVmZmVyKGIsZmlsZSApOw0KICAgIC0NCiAgICAtCXJldHVybiBiOw0KICAgIC19DQogICAg
LQ0KICAgIC0vKiogRGVzdHJveSB0aGUgYnVmZmVyLg0KICAgIC0gKiBAcGFyYW0gYiBhIGJ1ZmZl
ciBjcmVhdGVkIHdpdGggemNvbmZfY3JlYXRlX2J1ZmZlcigpDQogICAgLSAqIA0KICAgIC0gKi8N
CiAgICAtICAgIHZvaWQgemNvbmZfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkN
CiAgICAtew0KICAgIC0gICAgDQogICAgLQlpZiAoICEgYiApDQogICAgLQkJcmV0dXJuOw0KICAg
IC0NCiAgICAtCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdl
IHNob3VsZCBwb3AgaGVyZS4gKi8NCiAgICAtCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAo
WVlfQlVGRkVSX1NUQVRFKSAwOw0KICAgIC0NCiAgICAtCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZl
ciApDQogICAgLQkJemNvbmZmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAgKTsNCiAgICAtDQog
ICAgLQl6Y29uZmZyZWUoKHZvaWQgKikgYiAgKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogSW5p
dGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4NCiAgICAtICogVGhpcyBmdW5jdGlv
biBpcyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwN
CiAgICAtICogc3VjaCBhcyBkdXJpbmcgYSB6Y29uZnJlc3RhcnQoKSBvciBhdCBFT0YuDQogICAg
LSAqLw0KICAgIC0gICAgc3RhdGljIHZvaWQgemNvbmZfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJf
U1RBVEUgIGIsIEZJTEUgKiBmaWxlICkNCiAgICAtDQogICAgLXsNCiAgICAtCWludCBvZXJybm8g
PSBlcnJubzsNCiAgICAtICAgIA0KICAgIC0JemNvbmZfZmx1c2hfYnVmZmVyKGIgKTsNCiAgICAt
DQogICAgLQliLT55eV9pbnB1dF9maWxlID0gZmlsZTsNCiAgICAtCWItPnl5X2ZpbGxfYnVmZmVy
ID0gMTsNCiAgICAtDQogICAgLSAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhl
biB6Y29uZl9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5Xw0KICAgIC0gICAgICogY2FsbGVkIGZy
b20gemNvbmZyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuDQogICAgLSAg
ICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBj
b2x1bW4uDQogICAgLSAgICAgKi8NCiAgICAtICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVS
KXsNCiAgICAtICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOw0KICAgIC0gICAgICAgIGItPnl5
X2JzX2NvbHVtbiA9IDA7DQogICAgLSAgICB9DQogICAgLQ0KICAgIC0gICAgICAgIGItPnl5X2lz
X2ludGVyYWN0aXZlID0gMDsNCiAgICAtICAgIA0KICAgIC0JZXJybm8gPSBvZXJybm87DQogICAg
LX0NCiAgICAtDQogICAgLS8qKiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0
aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4NCiAgICAtICogQHBhcmFtIGIg
dGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVG
RkVSLg0KICAgIC0gKiANCiAgICAtICovDQogICAgLSAgICB2b2lkIHpjb25mX2ZsdXNoX2J1ZmZl
ciAoWVlfQlVGRkVSX1NUQVRFICBiICkNCiAgICAtew0KICAgIC0gICAgCWlmICggISBiICkNCiAg
ICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0JYi0+eXlfbl9jaGFycyA9IDA7DQogICAgLQ0KICAg
IC0JLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBm
aXJzdCBjYXVzZXMNCiAgICAtCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBz
dGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzDQogICAgLQkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLg0K
ICAgIC0JICovDQogICAgLQliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
DQogICAgLQliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7DQogICAgLQ0K
ICAgIC0JYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07DQogICAgLQ0KICAgIC0JYi0+
eXlfYXRfYm9sID0gMTsNCiAgICAtCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVX
Ow0KICAgIC0NCiAgICAtCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApDQogICAgLQkJemNv
bmZfbG9hZF9idWZmZXJfc3RhdGUoICk7DQogICAgLX0NCiAgICAtDQogICAgLS8qKiBQdXNoZXMg
dGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzDQogICAg
LSAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBz
dGFjaw0KICAgIC0gKiAgaWYgbmVjZXNzYXJ5Lg0KICAgIC0gKiAgQHBhcmFtIG5ld19idWZmZXIg
VGhlIG5ldyBzdGF0ZS4NCiAgICAtICogIA0KICAgIC0gKi8NCiAgICAtdm9pZCB6Y29uZnB1c2hf
YnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciApDQogICAgLXsNCiAgICAt
ICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAg
LQl6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2soKTsNCiAgICAtDQogICAgLQkvKiBUaGlzIGJsb2Nr
IGlzIGNvcGllZCBmcm9tIHpjb25mX3N3aXRjaF90b19idWZmZXIuICovDQogICAgLQlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSICkNCiAgICAtCQl7DQogICAgLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0
aW9uIGZvciBvbGQgYnVmZmVyLiAqLw0KICAgIC0JCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9j
aGFyKTsNCiAgICAtCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSAoeXlf
Y19idWZfcCk7DQogICAgLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0g
KHl5X25fY2hhcnMpOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkvKiBPbmx5IHB1c2ggaWYgdG9w
IGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8NCiAgICAtCWlmIChZWV9DVVJSRU5U
X0JVRkZFUikNCiAgICAtCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkrKzsNCiAgICAtCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7DQogICAgLQ0KICAgIC0JLyogY29waWVkIGZy
b20gemNvbmZfc3dpdGNoX3RvX2J1ZmZlci4gKi8NCiAgICAtCXpjb25mX2xvYWRfYnVmZmVyX3N0
YXRlKCApOw0KICAgIC0JKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAxOw0KICAgIC19
DQogICAgLQ0KICAgIC0vKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFj
aywgaWYgcHJlc2VudC4NCiAgICAtICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3
IHRvcC4NCiAgICAtICogIA0KICAgIC0gKi8NCiAgICAtdm9pZCB6Y29uZnBvcF9idWZmZXJfc3Rh
dGUgKHZvaWQpDQogICAgLXsNCiAgICAtICAgIAlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQ0KICAg
IC0JCXJldHVybjsNCiAgICAtDQogICAgLQl6Y29uZl9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRf
QlVGRkVSICk7DQogICAgLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOw0KICAgIC0J
aWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+IDApDQogICAgLQkJLS0oeXlfYnVmZmVyX3N0YWNr
X3RvcCk7DQogICAgLQ0KICAgIC0JaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7DQogICAgLQkJemNv
bmZfbG9hZF9idWZmZXJfc3RhdGUoICk7DQogICAgLQkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZikgPSAxOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKiBBbGxvY2F0ZXMgdGhl
IHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0Lg0KICAgIC0gKiAgR3VhcmFudGVlcyBzcGFjZSBm
b3IgYXQgbGVhc3Qgb25lIHB1c2guDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZCB6Y29uZmVu
c3VyZV9idWZmZXJfc3RhY2sgKHZvaWQpDQogICAgLXsNCiAgICAtCWludCBudW1fdG9fYWxsb2M7
DQogICAgLSAgICANCiAgICAtCWlmICghKHl5X2J1ZmZlcl9zdGFjaykpIHsNCiAgICAtDQogICAg
LQkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBk
b24ndCBrbm93IGlmIHRoaXMNCiAgICAtCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3Rh
Y2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbg0KICAgIC0JCSAqIGltbWVkaWF0
ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuDQogICAgLSAgICAgICAgICovDQogICAgLQkJbnVt
X3RvX2FsbG9jID0gMTsNCiAgICAtCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVm
ZmVyX3N0YXRlKiopemNvbmZhbGxvYw0KICAgIC0JCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXpl
b2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopDQogICAgLQkJCQkJCQkJKTsNCiAgICAtCQlpZiAo
ICEgKHl5X2J1ZmZlcl9zdGFjaykgKQ0KICAgIC0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBk
eW5hbWljIG1lbW9yeSBpbiB6Y29uZmVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsNCiAgICAtCQkJ
CQkJCQkgIA0KICAgIC0JCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwgbnVtX3RvX2FsbG9j
ICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7DQogICAgLQkJCQkNCiAgICAtCQko
eXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7DQogICAgLQkJKHl5X2J1ZmZlcl9z
dGFja190b3ApID0gMDsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYg
KCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+PSAoKHl5X2J1ZmZlcl9zdGFja19tYXgpKSAtIDEpew0K
ICAgIC0NCiAgICAtCQkvKiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9z
c2libGUgcHVzaC4gKi8NCiAgICAtCQlpbnQgZ3Jvd19zaXplID0gOCAvKiBhcmJpdHJhcnkgZ3Jv
dyBzaXplICovOw0KICAgIC0NCiAgICAtCQludW1fdG9fYWxsb2MgPSAoeXlfYnVmZmVyX3N0YWNr
X21heCkgKyBncm93X3NpemU7DQogICAgLQkJKHl5X2J1ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5
X2J1ZmZlcl9zdGF0ZSoqKXpjb25mcmVhbGxvYw0KICAgIC0JCQkJCQkJCSgoeXlfYnVmZmVyX3N0
YWNrKSwNCiAgICAtCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZl
cl9zdGF0ZSopDQogICAgLQkJCQkJCQkJKTsNCiAgICAtCQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFj
aykgKQ0KICAgIC0JCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB6
Y29uZmVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsNCiAgICAtDQogICAgLQkJLyogemVybyBvbmx5
IHRoZSBuZXcgc2xvdHMuKi8NCiAgICAtCQltZW1zZXQoKHl5X2J1ZmZlcl9zdGFjaykgKyAoeXlf
YnVmZmVyX3N0YWNrX21heCksIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVy
X3N0YXRlKikpOw0KICAgIC0JCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsN
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIg
c3RhdGUgdG8gc2NhbiBkaXJlY3RseSBmcm9tIGEgdXNlci1zcGVjaWZpZWQgY2hhcmFjdGVyIGJ1
ZmZlci4NCiAgICAtICogQHBhcmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXINCiAgICAtICog
QHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXINCiAg
ICAtICogDQogICAgLSAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUg
b2JqZWN0LiANCiAgICAtICovDQogICAgLVlZX0JVRkZFUl9TVEFURSB6Y29uZl9zY2FuX2J1ZmZl
ciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgKQ0KICAgIC17DQogICAgLQlZWV9CVUZG
RVJfU1RBVEUgYjsNCiAgICAtICAgIA0KICAgIC0JaWYgKCBzaXplIDwgMiB8fA0KICAgIC0JICAg
ICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8DQogICAgLQkgICAgIGJh
c2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQ0KICAgIC0JCS8qIFRoZXkgZm9y
Z290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8NCiAgICAtCQlyZXR1cm4gMDsNCiAg
ICAtDQogICAgLQliID0gKFlZX0JVRkZFUl9TVEFURSkgemNvbmZhbGxvYyhzaXplb2YoIHN0cnVj
dCB5eV9idWZmZXJfc3RhdGUgKSAgKTsNCiAgICAtCWlmICggISBiICkNCiAgICAtCQlZWV9GQVRB
TF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB6Y29uZl9zY2FuX2J1ZmZlcigpIiAp
Ow0KICAgIC0NCiAgICAtCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRh
a2UgY2FyZSBvZiBFT0IncyAqLw0KICAgIC0JYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9
IGJhc2U7DQogICAgLQliLT55eV9pc19vdXJfYnVmZmVyID0gMDsNCiAgICAtCWItPnl5X2lucHV0
X2ZpbGUgPSAwOw0KICAgIC0JYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOw0KICAgIC0J
Yi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOw0KICAgIC0JYi0+eXlfYXRfYm9sID0gMTsNCiAgICAt
CWItPnl5X2ZpbGxfYnVmZmVyID0gMDsNCiAgICAtCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTkVXOw0KICAgIC0NCiAgICAtCXpjb25mX3N3aXRjaF90b19idWZmZXIoYiAgKTsNCiAg
ICAtDQogICAgLQlyZXR1cm4gYjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoqIFNldHVwIHRoZSBp
bnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB6Y29u
ZmxleCgpIHdpbGwNCiAgICAtICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuDQogICAg
LSAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuDQogICAgLSAq
IA0KICAgIC0gKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVj
dC4NCiAgICAtICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250
YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlDQogICAgLSAqICAgICAgIHpjb25mX3NjYW5fYnl0ZXMo
KSBpbnN0ZWFkLg0KICAgIC0gKi8NCiAgICAtWVlfQlVGRkVSX1NUQVRFIHpjb25mX3NjYW5fc3Ry
aW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciApDQogICAgLXsNCiAgICAtICAgIA0KICAgIC0JcmV0
dXJuIHpjb25mX3NjYW5fYnl0ZXMoeXlzdHIsc3RybGVuKHl5c3RyKSApOw0KICAgIC19DQogICAg
LQ0KICAgIC0vKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZl
biBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB6Y29uZmxleCgpIHdpbGwNCiAgICAtICogc2NhbiBm
cm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4NCiAgICAtICogQHBhcmFtIGJ5dGVzIHRoZSBieXRl
IGJ1ZmZlciB0byBzY2FuDQogICAgLSAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBvZiBieXRlcyBp
biB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuDQogICAgLSAqIA0KICAgIC0gKiBA
cmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4NCiAgICAtICov
DQogICAgLVlZX0JVRkZFUl9TVEFURSB6Y29uZl9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gKQ0KICAgIC17DQogICAgLQlZWV9CVUZGRVJfU1RB
VEUgYjsNCiAgICAtCWNoYXIgKmJ1ZjsNCiAgICAtCXl5X3NpemVfdCBuOw0KICAgIC0JaW50IGk7
DQogICAgLSAgICANCiAgICAtCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRp
bmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLw0KICAgIC0JbiA9IF95eWJ5dGVzX2xlbiAr
IDI7DQogICAgLQlidWYgPSAoY2hhciAqKSB6Y29uZmFsbG9jKG4gICk7DQogICAgLQlpZiAoICEg
YnVmICkNCiAgICAtCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB6
Y29uZl9zY2FuX2J5dGVzKCkiICk7DQogICAgLQ0KICAgIC0JZm9yICggaSA9IDA7IGkgPCBfeXli
eXRlc19sZW47ICsraSApDQogICAgLQkJYnVmW2ldID0geXlieXRlc1tpXTsNCiAgICAtDQogICAg
LQlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXlieXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVG
RkVSX0NIQVI7DQogICAgLQ0KICAgIC0JYiA9IHpjb25mX3NjYW5fYnVmZmVyKGJ1ZixuICk7DQog
ICAgLQlpZiAoICEgYiApDQogICAgLQkJWVlfRkFUQUxfRVJST1IoICJiYWQgYnVmZmVyIGluIHpj
b25mX3NjYW5fYnl0ZXMoKSIgKTsNCiAgICAtDQogICAgLQkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBl
dGMuIHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0DQogICAgLQkgKiBhd2F5IHdo
ZW4gd2UncmUgZG9uZS4NCiAgICAtCSAqLw0KICAgIC0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7
DQogICAgLQ0KICAgIC0JcmV0dXJuIGI7DQogICAgLX0NCiAgICAtDQogICAgLSNpZm5kZWYgWVlf
RVhJVF9GQUlMVVJFDQogICAgLSNkZWZpbmUgWVlfRVhJVF9GQUlMVVJFIDINCiAgICAtI2VuZGlm
DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBt
c2cgKQ0KICAgIC17DQogICAgLSAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBt
c2cgKTsNCiAgICAtCWV4aXQoIFlZX0VYSVRfRkFJTFVSRSApOw0KICAgIC19DQogICAgLQ0KICAg
IC0vKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8N
CiAgICAtDQogICAgLSN1bmRlZiB5eWxlc3MNCiAgICAtI2RlZmluZSB5eWxlc3MobikgXA0KICAg
IC0JZG8gXA0KICAgIC0JCXsgXA0KICAgIC0JCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVw
IHpjb25mdGV4dC4gKi8gXA0KICAgIC0gICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4p
OyBcDQogICAgLSAgICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XA0KICAg
IC0JCXpjb25mdGV4dFt6Y29uZmxlbmddID0gKHl5X2hvbGRfY2hhcik7IFwNCiAgICAtCQkoeXlf
Y19idWZfcCkgPSB6Y29uZnRleHQgKyB5eWxlc3NfbWFjcm9fYXJnOyBcDQogICAgLQkJKHl5X2hv
bGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOyBcDQogICAgLQkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7
IFwNCiAgICAtCQl6Y29uZmxlbmcgPSB5eWxlc3NfbWFjcm9fYXJnOyBcDQogICAgLQkJfSBcDQog
ICAgLQl3aGlsZSAoIDAgKQ0KICAgIC0NCiAgICAtLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdldC9z
ZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8NCiAgICAtDQogICAgLS8qKiBHZXQg
dGhlIGN1cnJlbnQgbGluZSBudW1iZXIuDQogICAgLSAqIA0KICAgIC0gKi8NCiAgICAtaW50IHpj
b25mZ2V0X2xpbmVubyAgKHZvaWQpDQogICAgLXsNCiAgICAtICAgICAgICANCiAgICAtICAgIHJl
dHVybiB6Y29uZmxpbmVubzsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoqIEdldCB0aGUgaW5wdXQg
c3RyZWFtLg0KICAgIC0gKiANCiAgICAtICovDQogICAgLUZJTEUgKnpjb25mZ2V0X2luICAodm9p
ZCkNCiAgICAtew0KICAgIC0gICAgICAgIHJldHVybiB6Y29uZmluOw0KICAgIC19DQogICAgLQ0K
ICAgIC0vKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLg0KICAgIC0gKiANCiAgICAtICovDQogICAg
LUZJTEUgKnpjb25mZ2V0X291dCAgKHZvaWQpDQogICAgLXsNCiAgICAtICAgICAgICByZXR1cm4g
emNvbmZvdXQ7DQogICAgLX0NCiAgICAtDQogICAgLS8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUg
Y3VycmVudCB0b2tlbi4NCiAgICAtICogDQogICAgLSAqLw0KICAgIC1pbnQgemNvbmZnZXRfbGVu
ZyAgKHZvaWQpDQogICAgLXsNCiAgICAtICAgICAgICByZXR1cm4gemNvbmZsZW5nOw0KICAgIC19
DQogICAgLQ0KICAgIC0vKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLg0KICAgIC0gKiANCiAgICAt
ICovDQogICAgLQ0KICAgIC1jaGFyICp6Y29uZmdldF90ZXh0ICAodm9pZCkNCiAgICAtew0KICAg
IC0gICAgICAgIHJldHVybiB6Y29uZnRleHQ7DQogICAgLX0NCiAgICAtDQogICAgLS8qKiBTZXQg
dGhlIGN1cnJlbnQgbGluZSBudW1iZXIuDQogICAgLSAqIEBwYXJhbSBsaW5lX251bWJlcg0KICAg
IC0gKiANCiAgICAtICovDQogICAgLXZvaWQgemNvbmZzZXRfbGluZW5vIChpbnQgIGxpbmVfbnVt
YmVyICkNCiAgICAtew0KICAgIC0gICAgDQogICAgLSAgICB6Y29uZmxpbmVubyA9IGxpbmVfbnVt
YmVyOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMg
ZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudA0KICAgIC0gKiBpbnB1dCBidWZmZXIuDQogICAg
LSAqIEBwYXJhbSBpbl9zdHIgQSByZWFkYWJsZSBzdHJlYW0uDQogICAgLSAqIA0KICAgIC0gKiBA
c2VlIHpjb25mX3N3aXRjaF90b19idWZmZXINCiAgICAtICovDQogICAgLXZvaWQgemNvbmZzZXRf
aW4gKEZJTEUgKiAgaW5fc3RyICkNCiAgICAtew0KICAgIC0gICAgICAgIHpjb25maW4gPSBpbl9z
dHIgOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHpjb25mc2V0X291dCAoRklMRSAqICBvdXRf
c3RyICkNCiAgICAtew0KICAgIC0gICAgICAgIHpjb25mb3V0ID0gb3V0X3N0ciA7DQogICAgLX0N
CiAgICAtDQogICAgLWludCB6Y29uZmdldF9kZWJ1ZyAgKHZvaWQpDQogICAgLXsNCiAgICAtICAg
ICAgICByZXR1cm4gemNvbmZfZmxleF9kZWJ1ZzsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCB6
Y29uZnNldF9kZWJ1ZyAoaW50ICBiZGVidWcgKQ0KICAgIC17DQogICAgLSAgICAgICAgemNvbmZf
ZmxleF9kZWJ1ZyA9IGJkZWJ1ZyA7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBpbnQgeXlf
aW5pdF9nbG9iYWxzICh2b2lkKQ0KICAgIC17DQogICAgLSAgICAgICAgLyogSW5pdGlhbGl6YXRp
b24gaXMgdGhlIHNhbWUgYXMgZm9yIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuDQogICAgLSAg
ICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHpjb25mbGV4X2Rlc3Ryb3koKSwgc28g
ZG9uJ3QgYWxsb2NhdGUgaGVyZS4NCiAgICAtICAgICAqLw0KICAgIC0NCiAgICAtICAgICh5eV9i
dWZmZXJfc3RhY2spID0gMDsNCiAgICAtICAgICh5eV9idWZmZXJfc3RhY2tfdG9wKSA9IDA7DQog
ICAgLSAgICAoeXlfYnVmZmVyX3N0YWNrX21heCkgPSAwOw0KICAgIC0gICAgKHl5X2NfYnVmX3Ap
ID0gKGNoYXIgKikgMDsNCiAgICAtICAgICh5eV9pbml0KSA9IDA7DQogICAgLSAgICAoeXlfc3Rh
cnQpID0gMDsNCiAgICAtDQogICAgLS8qIERlZmluZWQgaW4gbWFpbi5jICovDQogICAgLSNpZmRl
ZiBZWV9TVERJTklUDQogICAgLSAgICB6Y29uZmluID0gc3RkaW47DQogICAgLSAgICB6Y29uZm91
dCA9IHN0ZG91dDsNCiAgICAtI2Vsc2UNCiAgICAtICAgIHpjb25maW4gPSAoRklMRSAqKSAwOw0K
ICAgIC0gICAgemNvbmZvdXQgPSAoRklMRSAqKSAwOw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAg
LSAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3
ZSBhcmUgY2FsbGVkIGJ5DQogICAgLSAgICAgKiB6Y29uZmxleF9pbml0KCkNCiAgICAtICAgICAq
Lw0KICAgIC0gICAgcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHpjb25mbGV4X2Rl
c3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAq
Lw0KICAgIC1pbnQgemNvbmZsZXhfZGVzdHJveSAgKHZvaWQpDQogICAgLXsNCiAgICAtICAgIA0K
ICAgIC0gICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50
LiAqLw0KICAgIC0Jd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpew0KICAgIC0JCXpjb25mX2RlbGV0
ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgICk7DQogICAgLQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFID0gTlVMTDsNCiAgICAtCQl6Y29uZnBvcF9idWZmZXJfc3RhdGUoKTsNCiAgICAtCX0N
CiAgICAtDQogICAgLQkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovDQogICAgLQl6Y29u
ZmZyZWUoKHl5X2J1ZmZlcl9zdGFjaykgKTsNCiAgICAtCSh5eV9idWZmZXJfc3RhY2spID0gTlVM
TDsNCiAgICAtDQogICAgLSAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRh
bnQgaW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQ0KICAgIC0gICAg
ICogemNvbmZsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovDQog
ICAgLSAgICB5eV9pbml0X2dsb2JhbHMoICk7DQogICAgLQ0KICAgIC0gICAgcmV0dXJuIDA7DQog
ICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIEludGVybmFsIHV0aWxpdHkgcm91dGluZXMu
DQogICAgLSAqLw0KICAgIC0NCiAgICAtI2lmbmRlZiB5eXRleHRfcHRyDQogICAgLXN0YXRpYyB2
b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAp
DQogICAgLXsNCiAgICAtCXJlZ2lzdGVyIGludCBpOw0KICAgIC0JZm9yICggaSA9IDA7IGkgPCBu
OyArK2kgKQ0KICAgIC0JCXMxW2ldID0gczJbaV07DQogICAgLX0NCiAgICAtI2VuZGlmDQogICAg
LQ0KICAgIC0jaWZkZWYgWVlfTkVFRF9TVFJMRU4NCiAgICAtc3RhdGljIGludCB5eV9mbGV4X3N0
cmxlbiAoeXljb25zdCBjaGFyICogcyApDQogICAgLXsNCiAgICAtCXJlZ2lzdGVyIGludCBuOw0K
ICAgIC0JZm9yICggbiA9IDA7IHNbbl07ICsrbiApDQogICAgLQkJOw0KICAgIC0NCiAgICAtCXJl
dHVybiBuOw0KICAgIC19DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtdm9pZCAqemNvbmZhbGxv
YyAoeXlfc2l6ZV90ICBzaXplICkNCiAgICAtew0KICAgIC0JcmV0dXJuICh2b2lkICopIG1hbGxv
Yyggc2l6ZSApOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkICp6Y29uZnJlYWxsb2MgICh2b2lk
ICogcHRyLCB5eV9zaXplX3QgIHNpemUgKQ0KICAgIC17DQogICAgLQkvKiBUaGUgY2FzdCB0byAo
Y2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoDQogICAgLQkgKiBpbXBs
ZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlDQog
ICAgLQkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0
aGUgbGF0dGVyDQogICAgLQkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2Fz
dGxlc3MgYXNzaWdubWVudCBmcm9tDQogICAgLQkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQq
LCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zDQogICAgLQkgKiBhcyB0aG91Z2gg
ZG9pbmcgYW4gYXNzaWdubWVudC4NCiAgICAtCSAqLw0KICAgIC0JcmV0dXJuICh2b2lkICopIHJl
YWxsb2MoIChjaGFyICopIHB0ciwgc2l6ZSApOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHpj
b25mZnJlZSAodm9pZCAqIHB0ciApDQogICAgLXsNCiAgICAtCWZyZWUoIChjaGFyICopIHB0ciAp
OwkvKiBzZWUgemNvbmZyZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8NCiAgICAtfQ0KICAg
IC0NCiAgICAtI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyINCiAgICAtDQogICAgLXZv
aWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpDQogICAgLXsNCiAgICAtCW5ld19zdHJpbmcoKTsNCiAg
ICAtCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7DQogICAgLQlCRUdJTihIRUxQKTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKQ0KICAgIC17DQogICAg
LQl6Y29uZmx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICAtCUJFR0lOKElOSVRJQUwpOw0KICAgIC19
DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBUcnkgdG8gb3BlbiBzcGVjaWZpZWQgZmlsZSB3aXRo
IGZvbGxvd2luZyBuYW1lczoNCiAgICAtICogLi9uYW1lDQogICAgLSAqICQoc3JjdHJlZSkvbmFt
ZQ0KICAgIC0gKiBUaGUgbGF0dGVyIGlzIHVzZWQgd2hlbiBzcmN0cmVlIGlzIHNlcGFyYXRlIGZy
b20gb2JqdHJlZQ0KICAgIC0gKiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLg0KICAgIC0gKiBS
ZXR1cm4gTlVMTCBpZiBmaWxlIGlzIG5vdCBmb3VuZC4NCiAgICAtICovDQogICAgLUZJTEUgKnpj
b25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgLXsNCiAgICAtCWNoYXIgKmVudiwgZnVs
bG5hbWVbUEFUSF9NQVgrMV07DQogICAgLQlGSUxFICpmOw0KICAgIC0NCiAgICAtCWYgPSBmb3Bl
bihuYW1lLCAiciIpOw0KICAgIC0JaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9
ICcvJykgew0KICAgIC0JCWVudiA9IGdldGVudihTUkNUUkVFKTsNCiAgICAtCQlpZiAoZW52KSB7
DQogICAgLQkJCXNwcmludGYoZnVsbG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7DQogICAgLQkJ
CWYgPSBmb3BlbihmdWxsbmFtZSwgInIiKTsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlyZXR1
cm4gZjsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFy
ICpuYW1lKQ0KICAgIC17DQogICAgLQl6Y29uZmluID0gemNvbmZfZm9wZW4obmFtZSk7DQogICAg
LQlpZiAoIXpjb25maW4pIHsNCiAgICAtCQlwcmludGYoImNhbid0IGZpbmQgZmlsZSAlc1xuIiwg
bmFtZSk7DQogICAgLQkJZXhpdCgxKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQljdXJyZW50X2J1
ZiA9IHhtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1ZikpOw0KICAgIC0JbWVtc2V0KGN1cnJlbnRf
YnVmLCAwLCBzaXplb2YoKmN1cnJlbnRfYnVmKSk7DQogICAgLQ0KICAgIC0JY3VycmVudF9maWxl
ID0gZmlsZV9sb29rdXAobmFtZSk7DQogICAgLQljdXJyZW50X2ZpbGUtPmxpbmVubyA9IDE7DQog
ICAgLX0NCiAgICAtDQogICAgLXZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSkN
CiAgICAtew0KICAgIC0Jc3RydWN0IGZpbGUgKml0ZXI7DQogICAgLQlzdHJ1Y3QgZmlsZSAqZmls
ZSA9IGZpbGVfbG9va3VwKG5hbWUpOw0KICAgIC0Jc3RydWN0IGJ1ZmZlciAqYnVmID0geG1hbGxv
YyhzaXplb2YoKmJ1ZikpOw0KICAgIC0JbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsNCiAg
ICAtDQogICAgLQljdXJyZW50X2J1Zi0+c3RhdGUgPSBZWV9DVVJSRU5UX0JVRkZFUjsNCiAgICAt
CXpjb25maW4gPSB6Y29uZl9mb3BlbihmaWxlLT5uYW1lKTsNCiAgICAtCWlmICghemNvbmZpbikg
ew0KICAgIC0JCXByaW50ZigiJXM6JWQ6IGNhbid0IG9wZW4gZmlsZSBcIiVzXCJcbiIsDQogICAg
LQkJICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksIGZpbGUtPm5hbWUpOw0KICAg
IC0JCWV4aXQoMSk7DQogICAgLQl9DQogICAgLQl6Y29uZl9zd2l0Y2hfdG9fYnVmZmVyKHpjb25m
X2NyZWF0ZV9idWZmZXIoemNvbmZpbixZWV9CVUZfU0laRSkpOw0KICAgIC0JYnVmLT5wYXJlbnQg
PSBjdXJyZW50X2J1ZjsNCiAgICAtCWN1cnJlbnRfYnVmID0gYnVmOw0KICAgIC0NCiAgICAtCWZv
ciAoaXRlciA9IGN1cnJlbnRfZmlsZS0+cGFyZW50OyBpdGVyOyBpdGVyID0gaXRlci0+cGFyZW50
ICkgew0KICAgIC0JCWlmICghc3RyY21wKGN1cnJlbnRfZmlsZS0+bmFtZSxpdGVyLT5uYW1lKSAp
IHsNCiAgICAtCQkJcHJpbnRmKCIlczolZDogcmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC4g
Ig0KICAgIC0JCQkgICAgICAgIkluY2x1c2lvbiBwYXRoOlxuICBjdXJyZW50IGZpbGUgOiAnJXMn
XG4iLA0KICAgIC0JCQkgICAgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwNCiAg
ICAtCQkJICAgICAgIHpjb25mX2N1cm5hbWUoKSk7DQogICAgLQkJCWl0ZXIgPSBjdXJyZW50X2Zp
bGUtPnBhcmVudDsNCiAgICAtCQkJd2hpbGUgKGl0ZXIgJiYgXA0KICAgIC0JCQkgICAgICAgc3Ry
Y21wKGl0ZXItPm5hbWUsY3VycmVudF9maWxlLT5uYW1lKSkgew0KICAgIC0JCQkJcHJpbnRmKCIg
IGluY2x1ZGVkIGZyb206ICclczolZCdcbiIsDQogICAgLQkJCQkgICAgICAgaXRlci0+bmFtZSwg
aXRlci0+bGluZW5vLTEpOw0KICAgIC0JCQkJaXRlciA9IGl0ZXItPnBhcmVudDsNCiAgICAtCQkJ
fQ0KICAgIC0JCQlpZiAoaXRlcikNCiAgICAtCQkJCXByaW50ZigiICBpbmNsdWRlZCBmcm9tOiAn
JXM6JWQnXG4iLA0KICAgIC0JCQkJICAgICAgIGl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubysxKTsN
CiAgICAtCQkJZXhpdCgxKTsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlmaWxlLT5saW5lbm8g
PSAxOw0KICAgIC0JZmlsZS0+cGFyZW50ID0gY3VycmVudF9maWxlOw0KICAgIC0JY3VycmVudF9m
aWxlID0gZmlsZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZfZW5kZmls
ZSh2b2lkKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7DQogICAgLQ0KICAg
IC0JY3VycmVudF9maWxlID0gY3VycmVudF9maWxlLT5wYXJlbnQ7DQogICAgLQ0KICAgIC0JcGFy
ZW50ID0gY3VycmVudF9idWYtPnBhcmVudDsNCiAgICAtCWlmIChwYXJlbnQpIHsNCiAgICAtCQlm
Y2xvc2UoemNvbmZpbik7DQogICAgLQkJemNvbmZfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUik7DQogICAgLQkJemNvbmZfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQtPnN0YXRlKTsNCiAg
ICAtCX0NCiAgICAtCWZyZWUoY3VycmVudF9idWYpOw0KICAgIC0JY3VycmVudF9idWYgPSBwYXJl
bnQ7DQogICAgLX0NCiAgICAtDQogICAgLWludCB6Y29uZl9saW5lbm8odm9pZCkNCiAgICAtew0K
ICAgIC0JcmV0dXJuIGN1cnJlbnRfcG9zLmxpbmVubzsNCiAgICAtfQ0KICAgIC0NCiAgICAtY29u
c3QgY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKQ0KICAgIC17DQogICAgLQlyZXR1cm4gY3VycmVu
dF9wb3MuZmlsZSA/IGN1cnJlbnRfcG9zLmZpbGUtPm5hbWUgOiAiPG5vbmU+IjsNCiAgICAtfQ0K
ICAgIC0NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3pjb25mLnRhYi5jX3NoaXBw
ZWQgYi9zdXBwb3J0L2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZA0KICAgIGRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDczZDkyNTAuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBw
b3J0L2tjb25maWcvemNvbmYudGFiLmNfc2hpcHBlZA0KICAgICsrKyAvZGV2L251bGwNCiAgICBA
QCAtMSwyNTM4ICswLDAgQEANCiAgICAtLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJp
c29uIDIuNS4gICovDQogICAgLQ0KICAgIC0vKiBCaXNvbiBpbXBsZW1lbnRhdGlvbiBmb3IgWWFj
Yy1saWtlIHBhcnNlcnMgaW4gQw0KICAgIC0gICANCiAgICAtICAgICAgQ29weXJpZ2h0IChDKSAx
OTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4N
CiAgICAtICAgDQogICAgLSAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQogICAgLSAgIGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQogICAg
LSAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl
IExpY2Vuc2UsIG9yDQogICAgLSAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
DQogICAgLSAgIA0KICAgIC0gICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCiAgICAtICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCiAgICAtICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0K
ICAgIC0gICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KICAg
IC0gICANCiAgICAtICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiAgICAtICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0u
ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLw0KICAgIC0N
CiAgICAtLyogQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgeW91IG1heSBjcmVhdGUgYSBsYXJnZXIg
d29yayB0aGF0IGNvbnRhaW5zDQogICAgLSAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrDQogICAgLSAgIHVuZGVyIHRlcm1z
IG9mIHlvdXIgY2hvaWNlLCBzbyBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQ0KICAg
IC0gICBwYXJzZXIgZ2VuZXJhdG9yIHVzaW5nIHRoZSBza2VsZXRvbiBvciBhIG1vZGlmaWVkIHZl
cnNpb24gdGhlcmVvZg0KICAgIC0gICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZl
bHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlDQogICAgLSAgIHRoZSBwYXJzZXIgc2tl
bGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9wdGlvbikgcmVtb3ZlIHRoaXMNCiAgICAt
ICAgc3BlY2lhbCBleGNlcHRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHNrZWxldG9uIGFuZCB0
aGUgcmVzdWx0aW5nDQogICAgLSAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1
bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljDQogICAgLSAgIExpY2Vuc2Ugd2l0aG91dCB0aGlz
IHNwZWNpYWwgZXhjZXB0aW9uLg0KICAgIC0gICANCiAgICAtICAgVGhpcyBzcGVjaWFsIGV4Y2Vw
dGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbg0KICAgIC0g
ICB2ZXJzaW9uIDIuMiBvZiBCaXNvbi4gICovDQogICAgLQ0KICAgIC0vKiBDIExBTFIoMSkgcGFy
c2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBTdGFsbG1hbiwgYnkNCiAgICAtICAgc2lt
cGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNvLWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovDQog
ICAgLQ0KICAgIC0vKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBiZWdpbiB3aXRo
IHl5IG9yIFlZLCB0byBhdm9pZA0KICAgIC0gICBpbmZyaW5naW5nIG9uIHVzZXIgbmFtZSBzcGFj
ZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwNCiAgICAtICAgdmFyaWFibGVz
LCBhcyB0aGV5IG1pZ2h0IG90aGVyd2lzZSBiZSBleHBhbmRlZCBieSB1c2VyIG1hY3Jvcy4NCiAg
ICAtICAgVGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVk
ZSBmaWxlcyB0bw0KICAgIC0gICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsgdGhl
eSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTg0KICAgIC0gICBVU0VSIE5BTUUgU1BBQ0UiIGJlbG93
LiAgKi8NCiAgICAtDQogICAgLS8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovDQogICAgLSNk
ZWZpbmUgWVlCSVNPTiAxDQogICAgLQ0KICAgIC0vKiBCaXNvbiB2ZXJzaW9uLiAgKi8NCiAgICAt
I2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNSINCiAgICAtDQogICAgLS8qIFNrZWxldG9uIG5h
bWUuICAqLw0KICAgIC0jZGVmaW5lIFlZU0tFTEVUT05fTkFNRSAieWFjYy5jIg0KICAgIC0NCiAg
ICAtLyogUHVyZSBwYXJzZXJzLiAgKi8NCiAgICAtI2RlZmluZSBZWVBVUkUgMA0KICAgIC0NCiAg
ICAtLyogUHVzaCBwYXJzZXJzLiAgKi8NCiAgICAtI2RlZmluZSBZWVBVU0ggMA0KICAgIC0NCiAg
ICAtLyogUHVsbCBwYXJzZXJzLiAgKi8NCiAgICAtI2RlZmluZSBZWVBVTEwgMQ0KICAgIC0NCiAg
ICAtLyogVXNpbmcgbG9jYXRpb25zLiAgKi8NCiAgICAtI2RlZmluZSBZWUxTUF9ORUVERUQgMA0K
ICAgIC0NCiAgICAtLyogU3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVz
LiAgKi8NCiAgICAtI2RlZmluZSB5eXBhcnNlICAgICAgICAgemNvbmZwYXJzZQ0KICAgIC0jZGVm
aW5lIHl5bGV4ICAgICAgICAgICB6Y29uZmxleA0KICAgIC0jZGVmaW5lIHl5ZXJyb3IgICAgICAg
ICB6Y29uZmVycm9yDQogICAgLSNkZWZpbmUgeXlsdmFsICAgICAgICAgIHpjb25mbHZhbA0KICAg
IC0jZGVmaW5lIHl5Y2hhciAgICAgICAgICB6Y29uZmNoYXINCiAgICAtI2RlZmluZSB5eWRlYnVn
ICAgICAgICAgemNvbmZkZWJ1Zw0KICAgIC0jZGVmaW5lIHl5bmVycnMgICAgICAgICB6Y29uZm5l
cnJzDQogICAgLQ0KICAgIC0NCiAgICAtLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRl
Y2xhcmF0aW9ucy4gICovDQogICAgLQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0
IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0gKiBS
ZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4NCiAgICAtICovDQog
ICAgLQ0KICAgIC0jaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGFyZy5oPg0K
ICAgIC0jaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0j
aW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNpbmNsdWRlIDxzdGRib29sLmg+DQogICAgLQ0KICAg
IC0jaW5jbHVkZSAibGtjLmgiDQogICAgLQ0KICAgIC0jZGVmaW5lIHByaW50ZChtYXNrLCBmbXQu
Li4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpDQogICAgLQ0KICAgIC0jZGVmaW5l
IFBSSU5URAkJMHgwMDAxDQogICAgLSNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyDQogICAgLQ0K
ICAgIC1pbnQgY2RlYnVnID0gUFJJTlREOw0KICAgIC0NCiAgICAtZXh0ZXJuIGludCB6Y29uZmxl
eCh2b2lkKTsNCiAgICAtc3RhdGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4u
Lik7DQogICAgLXN0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsN
CiAgICAtc3RhdGljIHZvaWQgemNvbmZlcnJvcihjb25zdCBjaGFyICplcnIpOw0KICAgIC1zdGF0
aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3Rh
cnR0b2tlbiwgaW50IGVuZHRva2VuKTsNCiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2wgKnN5bWJv
bF9oYXNoW1NZTUJPTF9IQVNIU0laRV07DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IG1lbnUg
KmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7DQogICAgLQ0KICAgIC0NCiAgICAtDQogICAg
LQ0KICAgIC0vKiBFbmFibGluZyB0cmFjZXMuICAqLw0KICAgIC0jaWZuZGVmIFlZREVCVUcNCiAg
ICAtIyBkZWZpbmUgWVlERUJVRyAxDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtLyogRW5hYmxp
bmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovDQogICAgLSNpZmRlZiBZWUVSUk9SX1ZFUkJP
U0UNCiAgICAtIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UNCiAgICAtIyBkZWZpbmUgWVlFUlJPUl9W
RVJCT1NFIDENCiAgICAtI2Vsc2UNCiAgICAtIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDANCiAg
ICAtI2VuZGlmDQogICAgLQ0KICAgIC0vKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLw0K
ICAgIC0jaWZuZGVmIFlZVE9LRU5fVEFCTEUNCiAgICAtIyBkZWZpbmUgWVlUT0tFTl9UQUJMRSAw
DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtDQogICAgLS8qIFRva2Vucy4gICovDQogICAgLSNp
Zm5kZWYgWVlUT0tFTlRZUEUNCiAgICAtIyBkZWZpbmUgWVlUT0tFTlRZUEUNCiAgICAtICAgLyog
UHV0IHRoZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3Ro
ZXIgZGVidWdnZXJzDQogICAgLSAgICAgIGtub3cgYWJvdXQgdGhlbS4gICovDQogICAgLSAgIGVu
dW0geXl0b2tlbnR5cGUgew0KICAgIC0gICAgIFRfTUFJTk1FTlUgPSAyNTgsDQogICAgLSAgICAg
VF9NRU5VID0gMjU5LA0KICAgIC0gICAgIFRfRU5ETUVOVSA9IDI2MCwNCiAgICAtICAgICBUX1NP
VVJDRSA9IDI2MSwNCiAgICAtICAgICBUX0NIT0lDRSA9IDI2MiwNCiAgICAtICAgICBUX0VORENI
T0lDRSA9IDI2MywNCiAgICAtICAgICBUX0NPTU1FTlQgPSAyNjQsDQogICAgLSAgICAgVF9DT05G
SUcgPSAyNjUsDQogICAgLSAgICAgVF9NRU5VQ09ORklHID0gMjY2LA0KICAgIC0gICAgIFRfSEVM
UCA9IDI2NywNCiAgICAtICAgICBUX0hFTFBURVhUID0gMjY4LA0KICAgIC0gICAgIFRfSUYgPSAy
NjksDQogICAgLSAgICAgVF9FTkRJRiA9IDI3MCwNCiAgICAtICAgICBUX0RFUEVORFMgPSAyNzEs
DQogICAgLSAgICAgVF9PUFRJT05BTCA9IDI3MiwNCiAgICAtICAgICBUX1BST01QVCA9IDI3MywN
CiAgICAtICAgICBUX1RZUEUgPSAyNzQsDQogICAgLSAgICAgVF9ERUZBVUxUID0gMjc1LA0KICAg
IC0gICAgIFRfU0VMRUNUID0gMjc2LA0KICAgIC0gICAgIFRfUkFOR0UgPSAyNzcsDQogICAgLSAg
ICAgVF9WSVNJQkxFID0gMjc4LA0KICAgIC0gICAgIFRfT1BUSU9OID0gMjc5LA0KICAgIC0gICAg
IFRfT04gPSAyODAsDQogICAgLSAgICAgVF9XT1JEID0gMjgxLA0KICAgIC0gICAgIFRfV09SRF9R
VU9URSA9IDI4MiwNCiAgICAtICAgICBUX1VORVFVQUwgPSAyODMsDQogICAgLSAgICAgVF9DTE9T
RV9QQVJFTiA9IDI4NCwNCiAgICAtICAgICBUX09QRU5fUEFSRU4gPSAyODUsDQogICAgLSAgICAg
VF9FT0wgPSAyODYsDQogICAgLSAgICAgVF9PUiA9IDI4NywNCiAgICAtICAgICBUX0FORCA9IDI4
OCwNCiAgICAtICAgICBUX0VRVUFMID0gMjg5LA0KICAgIC0gICAgIFRfTk9UID0gMjkwDQogICAg
LSAgIH07DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtDQogICAgLQ0KICAgIC0jaWYgISBkZWZp
bmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQNCiAgICAtdHlwZWRl
ZiB1bmlvbiBZWVNUWVBFDQogICAgLXsNCiAgICAtDQogICAgLQ0KICAgIC0JY2hhciAqc3RyaW5n
Ow0KICAgIC0Jc3RydWN0IGZpbGUgKmZpbGU7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7
DQogICAgLQlzdHJ1Y3QgZXhwciAqZXhwcjsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51Ow0KICAg
IC0JY29uc3Qgc3RydWN0IGtjb25mX2lkICppZDsNCiAgICAtDQogICAgLQ0KICAgIC0NCiAgICAt
fSBZWVNUWVBFOw0KICAgIC0jIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQ0KICAgIC0jIGRl
ZmluZSB5eXN0eXBlIFlZU1RZUEUgLyogb2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICov
DQogICAgLSMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQ0KICAgIC0jZW5kaWYNCiAgICAt
DQogICAgLQ0KICAgIC0vKiBDb3B5IHRoZSBzZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9u
cy4gICovDQogICAgLQ0KICAgIC0NCiAgICAtLyogSW5jbHVkZSB6Y29uZi5oYXNoLmMgaGVyZSBz
byBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICovDQogICAgLSNpbmNsdWRlICJ6Y29u
Zi5oYXNoLmMiDQogICAgLQ0KICAgIC0NCiAgICAtDQogICAgLSNpZmRlZiBzaG9ydA0KICAgIC0j
IHVuZGVmIHNob3J0DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2lmZGVmIFlZVFlQRV9VSU5U
OA0KICAgIC10eXBlZGVmIFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7DQogICAgLSNlbHNlDQog
ICAgLXR5cGVkZWYgdW5zaWduZWQgY2hhciB5eXR5cGVfdWludDg7DQogICAgLSNlbmRpZg0KICAg
IC0NCiAgICAtI2lmZGVmIFlZVFlQRV9JTlQ4DQogICAgLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0
eXBlX2ludDg7DQogICAgLSNlbGlmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlf
X0ZVTkNfXyBcDQogICAgLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQ0KICAgIC10eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4Ow0KICAgIC0jZWxz
ZQ0KICAgIC10eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50ODsNCiAgICAtI2VuZGlmDQogICAg
LQ0KICAgIC0jaWZkZWYgWVlUWVBFX1VJTlQxNg0KICAgIC10eXBlZGVmIFlZVFlQRV9VSU5UMTYg
eXl0eXBlX3VpbnQxNjsNCiAgICAtI2Vsc2UNCiAgICAtdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp
bnQgeXl0eXBlX3VpbnQxNjsNCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jaWZkZWYgWVlUWVBF
X0lOVDE2DQogICAgLXR5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsNCiAgICAtI2Vs
c2UNCiAgICAtdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2Ow0KICAgIC0jZW5kaWYNCiAg
ICAtDQogICAgLSNpZm5kZWYgWVlTSVpFX1QNCiAgICAtIyBpZmRlZiBfX1NJWkVfVFlQRV9fDQog
ICAgLSMgIGRlZmluZSBZWVNJWkVfVCBfX1NJWkVfVFlQRV9fDQogICAgLSMgZWxpZiBkZWZpbmVk
IHNpemVfdA0KICAgIC0jICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90DQogICAgLSMgZWxpZiAhIGRl
ZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVO
Q19fIFwNCiAgICAtICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19W
RVIpDQogICAgLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1F
IFNQQUNFICovDQogICAgLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QNCiAgICAtIyBlbHNlDQog
ICAgLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQNCiAgICAtIyBlbmRpZg0KICAgIC0j
ZW5kaWYNCiAgICAtDQogICAgLSNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEp
DQogICAgLQ0KICAgIC0jaWZuZGVmIFlZXw0KICAgIC0jIGlmIGRlZmluZWQgWVlFTkFCTEVfTkxT
ICYmIFlZRU5BQkxFX05MUw0KICAgIC0jICBpZiBFTkFCTEVfTkxTDQogICAgLSMgICBpbmNsdWRl
IDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8NCiAgICAtIyAg
IGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQ0KICAg
IC0jICBlbmRpZg0KICAgIC0jIGVuZGlmDQogICAgLSMgaWZuZGVmIFlZXw0KICAgIC0jICBkZWZp
bmUgWVlfKG1zZ2lkKSBtc2dpZA0KICAgIC0jIGVuZGlmDQogICAgLSNlbmRpZg0KICAgIC0NCiAg
ICAtLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICov
DQogICAgLSNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fDQogICAgLSMgZGVm
aW5lIFlZVVNFKGUpICgodm9pZCkgKGUpKQ0KICAgIC0jZWxzZQ0KICAgIC0jIGRlZmluZSBZWVVT
RShlKSAvKiBlbXB0eSAqLw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLS8qIElkZW50aXR5IGZ1
bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0YW50IGNvbmRpdGlv
bnMuICAqLw0KICAgIC0jaWZuZGVmIGxpbnQNCiAgICAtIyBkZWZpbmUgWVlJRChuKSAobikNCiAg
ICAtI2Vsc2UNCiAgICAtI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcDQogICAgLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQ0KICAgIC1zdGF0aWMgaW50DQogICAgLVlZSUQgKGludCB5eWkpDQogICAgLSNlbHNlDQog
ICAgLXN0YXRpYyBpbnQNCiAgICAtWVlJRCAoeXlpKQ0KICAgIC0gICAgaW50IHl5aTsNCiAgICAt
I2VuZGlmDQogICAgLXsNCiAgICAtICByZXR1cm4geXlpOw0KICAgIC19DQogICAgLSNlbmRpZg0K
ICAgIC0NCiAgICAtI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQ0K
ICAgIC0NCiAgICAtLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmlu
ZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLw0KICAgIC0NCiAgICAtIyBpZmRlZiBZWVNUQUNL
X1VTRV9BTExPQ0ENCiAgICAtIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBDQogICAgLSMgICBpZmRl
ZiBfX0dOVUNfXw0KICAgIC0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxv
Y2ENCiAgICAtIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1INCiAgICAtIyAg
ICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0K
ICAgIC0jICAgZWxpZiBkZWZpbmVkIF9BSVgNCiAgICAtIyAgICBkZWZpbmUgWVlTVEFDS19BTExP
QyBfX2FsbG9jYQ0KICAgIC0jICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSDQogICAgLSMgICAgaW5j
bHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8NCiAgICAt
IyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2ENCiAgICAtIyAgIGVsc2UNCiAgICAtIyAgICBkZWZp
bmUgWVlTVEFDS19BTExPQyBhbGxvY2ENCiAgICAtIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9I
ICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5l
ZCBfX0M5OV9fRlVOQ19fIFwNCiAgICAtICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl
ZmluZWQgX01TQ19WRVIpDQogICAgLSMgICAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovDQogICAgLSMgICAgIGlmbmRlZiBFWElUX1NVQ0NFU1MN
CiAgICAtIyAgICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMA0KICAgIC0jICAgICBlbmRpZg0KICAg
IC0jICAgIGVuZGlmDQogICAgLSMgICBlbmRpZg0KICAgIC0jICBlbmRpZg0KICAgIC0jIGVuZGlm
DQogICAgLQ0KICAgIC0jIGlmZGVmIFlZU1RBQ0tfQUxMT0MNCiAgICAtICAgLyogUGFjaWZ5IEdD
QydzIGBlbXB0eSBpZi1ib2R5JyB3YXJuaW5nLiAgKi8NCiAgICAtIyAgZGVmaW5lIFlZU1RBQ0tf
RlJFRShQdHIpIGRvIHsgLyogZW1wdHkgKi87IH0gd2hpbGUgKFlZSUQgKDApKQ0KICAgIC0jICBp
Zm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNDQogICAgLSAgICAvKiBUaGUgT1MgbWlnaHQgZ3Vh
cmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssDQog
ICAgLSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJlIGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMu
ICBTbyB3ZSBjYW5ub3Qgc2FmZWx5DQogICAgLSAgICAgICBpbnZva2UgYWxsb2NhIChOKSBpZiBO
IGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyDQogICAgLSAgICAg
ICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRlbXBvcmFyeSBzdGFjayBz
bG90cy4gICovDQogICAgLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIDQwMzIgLyog
cmVhc29uYWJsZSBjaXJjYSAyMDA2ICovDQogICAgLSMgIGVuZGlmDQogICAgLSMgZWxzZQ0KICAg
IC0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExPQw0KICAgIC0jICBkZWZpbmUgWVlTVEFD
S19GUkVFIFlZRlJFRQ0KICAgIC0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNDQogICAg
LSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVNIFlZU0laRV9NQVhJTVVNDQogICAgLSMg
IGVuZGlmDQogICAgLSMgIGlmIChkZWZpbmVkIF9fY3BsdXNwbHVzICYmICEgZGVmaW5lZCBFWElU
X1NVQ0NFU1MgXA0KICAgIC0gICAgICAgJiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5l
ZCBtYWxsb2MpIFwNCiAgICAtCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJl
ZSkpKQ0KICAgIC0jICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8NCiAgICAtIyAgIGlmbmRlZiBFWElUX1NVQ0NFU1MNCiAgICAtIyAgICBkZWZp
bmUgRVhJVF9TVUNDRVNTIDANCiAgICAtIyAgIGVuZGlmDQogICAgLSMgIGVuZGlmDQogICAgLSMg
IGlmbmRlZiBZWU1BTExPQw0KICAgIC0jICAgZGVmaW5lIFlZTUFMTE9DIG1hbGxvYw0KICAgIC0j
ICAgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcDQogICAgLSAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQ0KICAgIC12b2lkICptYWxsb2Mg
KFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgIC0jICAg
ZW5kaWYNCiAgICAtIyAgZW5kaWYNCiAgICAtIyAgaWZuZGVmIFlZRlJFRQ0KICAgIC0jICAgZGVm
aW5lIFlZRlJFRSBmcmVlDQogICAgLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQg
RVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNf
XyBcDQogICAgLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVS
KQ0KICAgIC12b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BB
Q0UgKi8NCiAgICAtIyAgIGVuZGlmDQogICAgLSMgIGVuZGlmDQogICAgLSMgZW5kaWYNCiAgICAt
I2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLw0KICAg
IC0NCiAgICAtDQogICAgLSNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXA0KICAgIC0gICAgICYm
ICghIGRlZmluZWQgX19jcGx1c3BsdXMgXA0KICAgIC0JIHx8IChkZWZpbmVkIFlZU1RZUEVfSVNf
VFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkNCiAgICAtDQogICAgLS8qIEEgdHlwZSB0
aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLw0KICAgIC11
bmlvbiB5eWFsbG9jDQogICAgLXsNCiAgICAtICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsNCiAg
ICAtICBZWVNUWVBFIHl5dnNfYWxsb2M7DQogICAgLX07DQogICAgLQ0KICAgIC0vKiBUaGUgc2l6
ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5l
eHQuICAqLw0KICAgIC0jIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVuaW9u
IHl5YWxsb2MpIC0gMSkNCiAgICAtDQogICAgLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdl
IHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aA0KICAgIC0gICBOIGVsZW1l
bnRzLiAgKi8NCiAgICAtIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcDQogICAgLSAgICAgKChO
KSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcDQogICAgLSAg
ICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkNCiAgICAtDQogICAgLSMgZGVmaW5lIFlZQ09QWV9O
RUVERUQgMQ0KICAgIC0NCiAgICAtLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0
aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlDQogICAgLSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUg
YW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZg0KICAgIC0gICBl
bGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9uIG9m
IHRoZQ0KICAgIC0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGlnbmVk
IGxvY2F0aW9uIGZvciB0aGUgbmV4dA0KICAgIC0gICBzdGFjay4gICovDQogICAgLSMgZGVmaW5l
IFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKQkJCQlcDQogICAgLSAgICBkbwkJ
CQkJCQkJCVwNCiAgICAtICAgICAgewkJCQkJCQkJCVwNCiAgICAtCVlZU0laRV9UIHl5bmV3Ynl0
ZXM7CQkJCQkJXA0KICAgIC0JWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlz
aXplKTsJCQlcDQogICAgLQlTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7CQkJCQlcDQogICAg
LQl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2YgKCpTdGFjaykgKyBZWVNUQUNLX0dB
UF9NQVhJTVVNOyBcDQogICAgLQl5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIp
OwkJCQlcDQogICAgLSAgICAgIH0JCQkJCQkJCQlcDQogICAgLSAgICB3aGlsZSAoWVlJRCAoMCkp
DQogICAgLQ0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZiBkZWZpbmVkIFlZQ09QWV9ORUVE
RUQgJiYgWVlDT1BZX05FRURFRA0KICAgIC0vKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9N
IHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8NCiAgICAtICAgbm90IG92ZXJs
YXAuICAqLw0KICAgIC0jIGlmbmRlZiBZWUNPUFkNCiAgICAtIyAgaWYgZGVmaW5lZCBfX0dOVUNf
XyAmJiAxIDwgX19HTlVDX18NCiAgICAtIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50
KSBcDQogICAgLSAgICAgIF9fYnVpbHRpbl9tZW1jcHkgKFRvLCBGcm9tLCAoQ291bnQpICogc2l6
ZW9mICgqKEZyb20pKSkNCiAgICAtIyAgZWxzZQ0KICAgIC0jICAgZGVmaW5lIFlZQ09QWShUbywg
RnJvbSwgQ291bnQpCQlcDQogICAgLSAgICAgIGRvCQkJCQlcDQogICAgLQl7CQkJCQlcDQogICAg
LQkgIFlZU0laRV9UIHl5aTsJCQkJXA0KICAgIC0JICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3Vu
dCk7IHl5aSsrKQlcDQogICAgLQkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcDQogICAg
LQl9CQkJCQlcDQogICAgLSAgICAgIHdoaWxlIChZWUlEICgwKSkNCiAgICAtIyAgZW5kaWYNCiAg
ICAtIyBlbmRpZg0KICAgIC0jZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8NCiAgICAtDQogICAg
LS8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICov
DQogICAgLSNkZWZpbmUgWVlGSU5BTCAgMTENCiAgICAtLyogWVlMQVNUIC0tIExhc3QgaW5kZXgg
aW4gWVlUQUJMRS4gICovDQogICAgLSNkZWZpbmUgWVlMQVNUICAgMjkwDQogICAgLQ0KICAgIC0v
KiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovDQogICAgLSNkZWZpbmUgWVlO
VE9LRU5TICAzNg0KICAgIC0vKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICov
DQogICAgLSNkZWZpbmUgWVlOTlRTICA1MA0KICAgIC0vKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2Yg
cnVsZXMuICAqLw0KICAgIC0jZGVmaW5lIFlZTlJVTEVTICAxMTgNCiAgICAtLyogWVlOUlVMRVMg
LS0gTnVtYmVyIG9mIHN0YXRlcy4gICovDQogICAgLSNkZWZpbmUgWVlOU1RBVEVTICAxOTENCiAg
ICAtDQogICAgLS8qIFlZVFJBTlNMQVRFKFlZTEVYKSAtLSBCaXNvbiBzeW1ib2wgbnVtYmVyIGNv
cnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLw0KICAgIC0jZGVmaW5lIFlZVU5ERUZUT0sgIDINCiAg
ICAtI2RlZmluZSBZWU1BWFVUT0sgICAyOTANCiAgICAtDQogICAgLSNkZWZpbmUgWVlUUkFOU0xB
VEUoWVlYKQkJCQkJCVwNCiAgICAtICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9L
ID8geXl0cmFuc2xhdGVbWVlYXSA6IFlZVU5ERUZUT0spDQogICAgLQ0KICAgIC0vKiBZWVRSQU5T
TEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVY
LiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0NCiAg
ICAtew0KICAgIC0gICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
DQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAg
ICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQog
ICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywg
ICAgIDQsDQogICAgLSAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LA0KICAgIC0gICAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwNCiAgICAt
ICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAzMywgICAgMzQsDQogICAgLSAgICAgIDM1DQogICAgLX07DQogICAgLQ0KICAgIC0jaWYg
WVlERUJVRw0KICAgIC0vKiBZWVBSSFNbWVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5
bWJvbCBvZiBydWxlIG51bWJlciBZWU4gaW4NCiAgICAtICAgWVlSSFMuICAqLw0KICAgIC1zdGF0
aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXByaHNbXSA9DQogICAgLXsNCiAgICAtICAgICAgIDAs
ICAgICAwLCAgICAgMywgICAgIDYsICAgICA4LCAgICAxMSwgICAgMTMsICAgIDE0LCAgICAxNywg
ICAgMjAsDQogICAgLSAgICAgIDIzLCAgICAyNiwgICAgMzEsICAgIDM2LCAgICA0MCwgICAgNDIs
ICAgIDQ0LCAgICA0NiwgICAgNDgsICAgIDUwLA0KICAgIC0gICAgICA1MiwgICAgNTQsICAgIDU2
LCAgICA1OCwgICAgNjAsICAgIDYyLCAgICA2NCwgICAgNjYsICAgIDY4LCAgICA3MiwNCiAgICAt
ICAgICAgNzUsICAgIDc5LCAgICA4MiwgICAgODYsICAgIDg5LCAgICA5MCwgICAgOTMsICAgIDk2
LCAgICA5OSwgICAxMDIsDQogICAgLSAgICAgMTA1LCAgIDEwOCwgICAxMTIsICAgMTE3LCAgIDEy
MiwgICAxMjcsICAgMTMzLCAgIDEzNywgICAxMzgsICAgMTQyLA0KICAgIC0gICAgIDE0MywgICAx
NDYsICAgMTUwLCAgIDE1MywgICAxNTUsICAgMTU5LCAgIDE2MCwgICAxNjMsICAgMTY2LCAgIDE2
OSwNCiAgICAtICAgICAxNzIsICAgMTc1LCAgIDE4MCwgICAxODQsICAgMTg3LCAgIDE5MiwgICAx
OTMsICAgMTk2LCAgIDIwMCwgICAyMDIsDQogICAgLSAgICAgMjA2LCAgIDIwNywgICAyMTAsICAg
MjEzLCAgIDIxNiwgICAyMjAsICAgMjI0LCAgIDIyOCwgICAyMzAsICAgMjM0LA0KICAgIC0gICAg
IDIzNSwgICAyMzgsICAgMjQxLCAgIDI0NCwgICAyNDgsICAgMjUyLCAgIDI1NSwgICAyNTgsICAg
MjYxLCAgIDI2MiwNCiAgICAtICAgICAyNjUsICAgMjY4LCAgIDI3MSwgICAyNzYsICAgMjc3LCAg
IDI4MCwgICAyODMsICAgMjg2LCAgIDI4NywgICAyOTAsDQogICAgLSAgICAgMjkyLCAgIDI5NCwg
ICAyOTcsICAgMzAwLCAgIDMwMywgICAzMDUsICAgMzA4LCAgIDMwOSwgICAzMTIsICAgMzE0LA0K
ICAgIC0gICAgIDMxOCwgICAzMjIsICAgMzI2LCAgIDMyOSwgICAzMzMsICAgMzM3LCAgIDMzOSwg
ICAzNDEsICAgMzQyDQogICAgLX07DQogICAgLQ0KICAgIC0vKiBZWVJIUyAtLSBBIGAtMSctc2Vw
YXJhdGVkIGxpc3Qgb2YgdGhlIHJ1bGVzJyBSSFMuICAqLw0KICAgIC1zdGF0aWMgY29uc3QgeXl0
eXBlX2ludDggeXlyaHNbXSA9DQogICAgLXsNCiAgICAtICAgICAgMzcsICAgICAwLCAgICAtMSwg
ICAgODEsICAgIDM4LCAgICAtMSwgICAgMzgsICAgIC0xLCAgICA2MywgICAgMzksDQogICAgLSAg
ICAgIC0xLCAgICAzOSwgICAgLTEsICAgIC0xLCAgICAzOSwgICAgNDEsICAgIC0xLCAgICAzOSwg
ICAgNTUsICAgIC0xLA0KICAgIC0gICAgICAzOSwgICAgNjcsICAgIC0xLCAgICAzOSwgICAgODAs
ICAgIC0xLCAgICAzOSwgICAgMjYsICAgICAxLCAgICAzMSwNCiAgICAtICAgICAgLTEsICAgIDM5
LCAgICA0MCwgICAgIDEsICAgIDMxLCAgICAtMSwgICAgMzksICAgICAxLCAgICAzMSwgICAgLTEs
DQogICAgLSAgICAgIDE2LCAgICAtMSwgICAgMTgsICAgIC0xLCAgICAxOSwgICAgLTEsICAgIDIx
LCAgICAtMSwgICAgMTcsICAgIC0xLA0KICAgIC0gICAgICAyMiwgICAgLTEsICAgIDIwLCAgICAt
MSwgICAgMjMsICAgIC0xLCAgICAzMSwgICAgLTEsICAgIDYxLCAgICAtMSwNCiAgICAtICAgICAg
NzEsICAgIC0xLCAgICA0NCwgICAgLTEsICAgIDQ2LCAgICAtMSwgICAgNjksICAgIC0xLCAgICAy
NiwgICAgIDEsDQogICAgLSAgICAgIDMxLCAgICAtMSwgICAgIDEsICAgIDMxLCAgICAtMSwgICAg
MTAsICAgIDI2LCAgICAzMSwgICAgLTEsICAgIDQzLA0KICAgIC0gICAgICA0NywgICAgLTEsICAg
IDExLCAgICAyNiwgICAgMzEsICAgIC0xLCAgICA0NSwgICAgNDcsICAgIC0xLCAgICAtMSwNCiAg
ICAtICAgICAgNDcsICAgIDQ4LCAgICAtMSwgICAgNDcsICAgIDQ5LCAgICAtMSwgICAgNDcsICAg
IDc1LCAgICAtMSwgICAgNDcsDQogICAgLSAgICAgIDczLCAgICAtMSwgICAgNDcsICAgIDQyLCAg
ICAtMSwgICAgNDcsICAgIDMxLCAgICAtMSwgICAgMTksICAgIDc4LA0KICAgIC0gICAgICAzMSwg
ICAgLTEsICAgIDE4LCAgICA3OSwgICAgODIsICAgIDMxLCAgICAtMSwgICAgMjAsICAgIDgzLCAg
ICA4MiwNCiAgICAtICAgICAgMzEsICAgIC0xLCAgICAyMSwgICAgMjYsICAgIDgyLCAgICAzMSwg
ICAgLTEsICAgIDIyLCAgICA4NCwgICAgODQsDQogICAgLSAgICAgIDgyLCAgICAzMSwgICAgLTEs
ICAgIDI0LCAgICA1MCwgICAgMzEsICAgIC0xLCAgICAtMSwgICAgNTAsICAgIDI2LA0KICAgIC0g
ICAgICA1MSwgICAgLTEsICAgIC0xLCAgICAzNCwgICAgNzksICAgIC0xLCAgICAgNywgICAgODUs
ICAgIDMxLCAgICAtMSwNCiAgICAtICAgICAgNTIsICAgIDU2LCAgICAtMSwgICAgODAsICAgIC0x
LCAgICA1MywgICAgNTgsICAgIDU0LCAgICAtMSwgICAgLTEsDQogICAgLSAgICAgIDU2LCAgICA1
NywgICAgLTEsICAgIDU2LCAgICA3NSwgICAgLTEsICAgIDU2LCAgICA3MywgICAgLTEsICAgIDU2
LA0KICAgIC0gICAgICAzMSwgICAgLTEsICAgIDU2LCAgICA0MiwgICAgLTEsICAgIDE4LCAgICA3
OSwgICAgODIsICAgIDMxLCAgICAtMSwNCiAgICAtICAgICAgMTksICAgIDc4LCAgICAzMSwgICAg
LTEsICAgIDE3LCAgICAzMSwgICAgLTEsICAgIDIwLCAgICAyNiwgICAgODIsDQogICAgLSAgICAg
IDMxLCAgICAtMSwgICAgLTEsICAgIDU4LCAgICA0MSwgICAgLTEsICAgIDE0LCAgICA4MywgICAg
ODEsICAgIC0xLA0KICAgIC0gICAgICA4MCwgICAgLTEsICAgIDU5LCAgICA2MiwgICAgNjAsICAg
IC0xLCAgICAtMSwgICAgNjIsICAgIDQxLCAgICAtMSwNCiAgICAtICAgICAgNjIsICAgIDY3LCAg
ICAtMSwgICAgNjIsICAgIDU1LCAgICAtMSwgICAgIDMsICAgIDc5LCAgICA4MSwgICAgLTEsDQog
ICAgLSAgICAgICA0LCAgICA3OSwgICAgMzEsICAgIC0xLCAgICA2NCwgICAgNzYsICAgIDc0LCAg
ICAtMSwgICAgODAsICAgIC0xLA0KICAgIC0gICAgICA2NSwgICAgNjgsICAgIDY2LCAgICAtMSwg
ICAgLTEsICAgIDY4LCAgICA0MSwgICAgLTEsICAgIDY4LCAgICA2NywNCiAgICAtICAgICAgLTEs
ICAgIDY4LCAgICA1NSwgICAgLTEsICAgICA2LCAgICA3OSwgICAgMzEsICAgIC0xLCAgICAgOSwg
ICAgNzksDQogICAgLSAgICAgIDMxLCAgICAtMSwgICAgNzAsICAgIDc0LCAgICAtMSwgICAgMTIs
ICAgIDMxLCAgICAtMSwgICAgNzIsICAgIDEzLA0KICAgIC0gICAgICAtMSwgICAgLTEsICAgIDc0
LCAgICA3NSwgICAgLTEsICAgIDc0LCAgICAzMSwgICAgLTEsICAgIDc0LCAgICA0MiwNCiAgICAt
ICAgICAgLTEsICAgIDE2LCAgICAyNSwgICAgODMsICAgIDMxLCAgICAtMSwgICAgLTEsICAgIDc2
LCAgICA3NywgICAgLTEsDQogICAgLSAgICAgIDc2LCAgICAzMSwgICAgLTEsICAgIDIzLCAgICA4
MiwgICAgLTEsICAgIC0xLCAgICA3OSwgICAgODIsICAgIC0xLA0KICAgIC0gICAgICAyNiwgICAg
LTEsICAgIDI3LCAgICAtMSwgICAgIDUsICAgIDMxLCAgICAtMSwgICAgIDgsICAgIDMxLCAgICAt
MSwNCiAgICAtICAgICAgMTUsICAgIDMxLCAgICAtMSwgICAgMzEsICAgIC0xLCAgICA4MSwgICAg
MzEsICAgIC0xLCAgICAtMSwgICAgMTQsDQogICAgLSAgICAgIDgzLCAgICAtMSwgICAgODQsICAg
IC0xLCAgICA4NCwgICAgMzQsICAgIDg0LCAgICAtMSwgICAgODQsICAgIDI4LA0KICAgIC0gICAg
ICA4NCwgICAgLTEsICAgIDMwLCAgICA4MywgICAgMjksICAgIC0xLCAgICAzNSwgICAgODMsICAg
IC0xLCAgICA4MywNCiAgICAtICAgICAgMzIsICAgIDgzLCAgICAtMSwgICAgODMsICAgIDMzLCAg
ICA4MywgICAgLTEsICAgIDI2LCAgICAtMSwgICAgMjcsDQogICAgLSAgICAgIC0xLCAgICAtMSwg
ICAgMjYsICAgIC0xDQogICAgLX07DQogICAgLQ0KICAgIC0vKiBZWVJMSU5FW1lZTl0gLS0gc291
cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVkLiAgKi8NCiAgICAtc3Rh
dGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0NCiAgICAtew0KICAgIC0gICAgICAg
MCwgICAxMDMsICAgMTAzLCAgIDEwMywgICAxMDUsICAgMTA1LCAgIDEwNywgICAxMDksICAgMTEw
LCAgIDExMSwNCiAgICAtICAgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTgsICAgMTIyLCAgIDEy
MiwgICAxMjIsICAgMTIyLCAgIDEyMiwgICAxMjIsDQogICAgLSAgICAgMTIyLCAgIDEyMiwgICAx
MjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMzUsICAgMTM2LA0KICAg
IC0gICAgIDE0MiwgICAxNTAsICAgMTU2LCAgIDE2NCwgICAxNzQsICAgMTc2LCAgIDE3NywgICAx
NzgsICAgMTc5LCAgIDE4MCwNCiAgICAtICAgICAxODEsICAgMTg0LCAgIDE5MiwgICAxOTgsICAg
MjA4LCAgIDIxNCwgICAyMjAsICAgMjIzLCAgIDIyNSwgICAyMzYsDQogICAgLSAgICAgMjM3LCAg
IDI0MiwgICAyNTEsICAgMjU2LCAgIDI2NCwgICAyNjcsICAgMjY5LCAgIDI3MCwgICAyNzEsICAg
MjcyLA0KICAgIC0gICAgIDI3MywgICAyNzYsICAgMjgyLCAgIDI5MywgICAyOTksICAgMzA5LCAg
IDMxMSwgICAzMTYsICAgMzI0LCAgIDMzMiwNCiAgICAtICAgICAzMzUsICAgMzM3LCAgIDMzOCwg
ICAzMzksICAgMzQ0LCAgIDM1MSwgICAzNTgsICAgMzYzLCAgIDM3MSwgICAzNzQsDQogICAgLSAg
ICAgMzc2LCAgIDM3NywgICAzNzgsICAgMzgxLCAgIDM4OSwgICAzOTYsICAgNDAzLCAgIDQwOSwg
ICA0MTYsICAgNDE4LA0KICAgIC0gICAgIDQxOSwgICA0MjAsICAgNDIzLCAgIDQzMSwgICA0MzMs
ICAgNDM0LCAgIDQzNywgICA0NDQsICAgNDQ2LCAgIDQ1MSwNCiAgICAtICAgICA0NTIsICAgNDU1
LCAgIDQ1NiwgICA0NTcsICAgNDYxLCAgIDQ2MiwgICA0NjUsICAgNDY2LCAgIDQ2OSwgICA0NzAs
DQogICAgLSAgICAgNDcxLCAgIDQ3MiwgICA0NzMsICAgNDc0LCAgIDQ3NSwgICA0NzgsICAgNDc5
LCAgIDQ4MiwgICA0ODMNCiAgICAtfTsNCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jaWYgWVlE
RUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgWVlUT0tFTl9UQUJMRQ0KICAgIC0vKiBZWVROQU1F
W1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4NCiAg
ICAtICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywg
bm9udGVybWluYWxzLiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVb
XSA9DQogICAgLXsNCiAgICAtICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIlRfTUFJ
Tk1FTlUiLCAiVF9NRU5VIiwgIlRfRU5ETUVOVSIsDQogICAgLSAgIlRfU09VUkNFIiwgIlRfQ0hP
SUNFIiwgIlRfRU5EQ0hPSUNFIiwgIlRfQ09NTUVOVCIsICJUX0NPTkZJRyIsDQogICAgLSAgIlRf
TUVOVUNPTkZJRyIsICJUX0hFTFAiLCAiVF9IRUxQVEVYVCIsICJUX0lGIiwgIlRfRU5ESUYiLCAi
VF9ERVBFTkRTIiwNCiAgICAtICAiVF9PUFRJT05BTCIsICJUX1BST01QVCIsICJUX1RZUEUiLCAi
VF9ERUZBVUxUIiwgIlRfU0VMRUNUIiwgIlRfUkFOR0UiLA0KICAgIC0gICJUX1ZJU0lCTEUiLCAi
VF9PUFRJT04iLCAiVF9PTiIsICJUX1dPUkQiLCAiVF9XT1JEX1FVT1RFIiwgIlRfVU5FUVVBTCIs
DQogICAgLSAgIlRfQ0xPU0VfUEFSRU4iLCAiVF9PUEVOX1BBUkVOIiwgIlRfRU9MIiwgIlRfT1Ii
LCAiVF9BTkQiLCAiVF9FUVVBTCIsDQogICAgLSAgIlRfTk9UIiwgIiRhY2NlcHQiLCAiaW5wdXQi
LCAic3RhcnQiLCAic3RtdF9saXN0IiwgIm9wdGlvbl9uYW1lIiwNCiAgICAtICAiY29tbW9uX3N0
bXQiLCAib3B0aW9uX2Vycm9yIiwgImNvbmZpZ19lbnRyeV9zdGFydCIsICJjb25maWdfc3RtdCIs
DQogICAgLSAgIm1lbnVjb25maWdfZW50cnlfc3RhcnQiLCAibWVudWNvbmZpZ19zdG10IiwgImNv
bmZpZ19vcHRpb25fbGlzdCIsDQogICAgLSAgImNvbmZpZ19vcHRpb24iLCAic3ltYm9sX29wdGlv
biIsICJzeW1ib2xfb3B0aW9uX2xpc3QiLA0KICAgIC0gICJzeW1ib2xfb3B0aW9uX2FyZyIsICJj
aG9pY2UiLCAiY2hvaWNlX2VudHJ5IiwgImNob2ljZV9lbmQiLA0KICAgIC0gICJjaG9pY2Vfc3Rt
dCIsICJjaG9pY2Vfb3B0aW9uX2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9pY2VfYmxvY2si
LA0KICAgIC0gICJpZl9lbnRyeSIsICJpZl9lbmQiLCAiaWZfc3RtdCIsICJpZl9ibG9jayIsICJt
YWlubWVudV9zdG10IiwgIm1lbnUiLA0KICAgIC0gICJtZW51X2VudHJ5IiwgIm1lbnVfZW5kIiwg
Im1lbnVfc3RtdCIsICJtZW51X2Jsb2NrIiwgInNvdXJjZV9zdG10IiwNCiAgICAtICAiY29tbWVu
dCIsICJjb21tZW50X3N0bXQiLCAiaGVscF9zdGFydCIsICJoZWxwIiwgImRlcGVuZHNfbGlzdCIs
DQogICAgLSAgImRlcGVuZHMiLCAidmlzaWJpbGl0eV9saXN0IiwgInZpc2libGUiLCAicHJvbXB0
X3N0bXRfb3B0IiwgInByb21wdCIsDQogICAgLSAgImVuZCIsICJubCIsICJpZl9leHByIiwgImV4
cHIiLCAic3ltYm9sIiwgIndvcmRfb3B0IiwgMA0KICAgIC19Ow0KICAgIC0jZW5kaWYNCiAgICAt
DQogICAgLSMgaWZkZWYgWVlQUklOVA0KICAgIC0vKiBZWVRPS05VTVtZWUxFWC1OVU1dIC0tIElu
dGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvDQogICAgLSAgIHRva2VuIFlZTEVY
LU5VTS4gICovDQogICAgLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQ0K
ICAgIC17DQogICAgLSAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAs
ICAgMjYxLCAgIDI2MiwgICAyNjMsICAgMjY0LA0KICAgIC0gICAgIDI2NSwgICAyNjYsICAgMjY3
LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwNCiAgICAt
ICAgICAyNzUsICAgMjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgy
LCAgIDI4MywgICAyODQsDQogICAgLSAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAgIDI4
OSwgICAyOTANCiAgICAtfTsNCiAgICAtIyBlbmRpZg0KICAgIC0NCiAgICAtLyogWVlSMVtZWU5d
IC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovDQog
ICAgLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMVtdID0NCiAgICAtew0KICAgIC0gICAg
ICAgMCwgICAgMzYsICAgIDM3LCAgICAzNywgICAgMzgsICAgIDM4LCAgICAzOSwgICAgMzksICAg
IDM5LCAgICAzOSwNCiAgICAtICAgICAgMzksICAgIDM5LCAgICAzOSwgICAgMzksICAgIDQwLCAg
ICA0MCwgICAgNDAsICAgIDQwLCAgICA0MCwgICAgNDAsDQogICAgLSAgICAgIDQwLCAgICA0MCwg
ICAgNDEsICAgIDQxLCAgICA0MSwgICAgNDEsICAgIDQxLCAgICA0MSwgICAgNDIsICAgIDQyLA0K
ICAgIC0gICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ3LCAgICA0Nywg
ICAgNDcsICAgIDQ3LCAgICA0NywNCiAgICAtICAgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDgs
ICAgIDQ4LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1MCwgICAgNTEsDQogICAgLSAgICAgIDUx
LCAgICA1MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwgICAgNTYs
ICAgIDU2LA0KICAgIC0gICAgICA1NiwgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU4
LCAgICA1OCwgICAgNTksICAgIDYwLCAgICA2MSwNCiAgICAtICAgICAgNjIsICAgIDYyLCAgICA2
MiwgICAgNjIsICAgIDYzLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjgsDQogICAg
LSAgICAgIDY4LCAgICA2OCwgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3
MywgICAgNzQsICAgIDc0LA0KICAgIC0gICAgICA3NCwgICAgNzQsICAgIDc1LCAgICA3NiwgICAg
NzYsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc4LCAgICA3OSwNCiAgICAtICAgICAgNzksICAg
IDgwLCAgICA4MCwgICAgODAsICAgIDgxLCAgICA4MSwgICAgODIsICAgIDgyLCAgICA4MywgICAg
ODMsDQogICAgLSAgICAgIDgzLCAgICA4MywgICAgODMsICAgIDgzLCAgICA4MywgICAgODQsICAg
IDg0LCAgICA4NSwgICAgODUNCiAgICAtfTsNCiAgICAtDQogICAgLS8qIFlZUjJbWVlOXSAtLSBO
dW1iZXIgb2Ygc3ltYm9scyBjb21wb3NpbmcgcmlnaHQgaGFuZCBzaWRlIG9mIHJ1bGUgWVlOLiAg
Ki8NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIyW10gPQ0KICAgIC17DQogICAg
LSAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAwLCAgICAg
MiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMywgICAg
IDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwNCiAgICAtICAgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAg
IDIsDQogICAgLSAgICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMCwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDMsICAgICA0LCAg
ICAgNCwgICAgIDQsICAgICA1LCAgICAgMywgICAgIDAsICAgICAzLCAgICAgMCwNCiAgICAtICAg
ICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgNCwg
ICAgIDAsICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLA0KICAgIC0gICAgICAgMCwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMCwN
CiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMCwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDQsICAgICAw
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAxLA0KICAgIC0gICAgICAg
MSwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDIsICAgICAx
LCAgICAgMywNCiAgICAtICAgICAgIDMsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAzLCAgICAg
MSwgICAgIDEsICAgICAwLCAgICAgMQ0KICAgIC19Ow0KICAgIC0NCiAgICAtLyogWVlERUZBQ1Rb
U1RBVEUtTkFNRV0gLS0gRGVmYXVsdCByZWR1Y3Rpb24gbnVtYmVyIGluIHN0YXRlIFNUQVRFLU5V
TS4NCiAgICAtICAgUGVyZm9ybWVkIHdoZW4gWVlUQUJMRSBkb2Vzbid0IHNwZWNpZnkgc29tZXRo
aW5nIGVsc2UgdG8gZG8uICBaZXJvDQogICAgLSAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVy
cm9yLiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0NCiAg
ICAtew0KICAgIC0gICAgICAgNiwgICAgIDAsICAgMTA0LCAgICAgMCwgICAgIDMsICAgICAwLCAg
ICAgNiwgICAgIDYsICAgIDk5LCAgIDEwMCwNCiAgICAtICAgICAgIDAsICAgICAxLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxMTcsICAgICAwLCAgICAgMCwgICAgIDAsDQogICAgLSAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgIDE0LCAgICAxOCwgICAgMTUsICAgIDE2LCAgICAyMCwg
ICAgMTcsICAgIDE5LA0KICAgIC0gICAgICAyMSwgICAgIDAsICAgIDIyLCAgICAgMCwgICAgIDcs
ICAgIDM0LCAgICAyNSwgICAgMzQsICAgIDI2LCAgICA1NSwNCiAgICAtICAgICAgNjUsICAgICA4
LCAgICA3MCwgICAgMjMsICAgIDkzLCAgICA3OSwgICAgIDksICAgIDI3LCAgICA4OCwgICAgMjQs
DQogICAgLSAgICAgIDEwLCAgICAgMCwgICAxMDUsICAgICAyLCAgICA3NCwgICAgMTMsICAgICAw
LCAgIDEwMSwgICAgIDAsICAgMTE4LA0KICAgIC0gICAgICAgMCwgICAxMDIsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTE1LCAgIDExNiwgICAgIDAsICAgICAwLCAgICAgMCwNCiAgICAtICAgICAx
MDgsICAgMTAzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgODgsDQogICAgLSAgICAgICAwLCAgICAgMCwgICAgNzUsICAgIDgzLCAgICA1MSwgICAg
ODQsICAgIDMwLCAgICAzMiwgICAgIDAsICAgMTEyLA0KICAgIC0gICAgICAgMCwgICAgIDAsICAg
IDY3LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgIDAsICAgICAwLCAgICAgMCwNCiAg
ICAtICAgICAgIDAsICAgIDk3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA0NywgICAgIDAsICAg
IDQwLCAgICAzOSwgICAgMzUsDQogICAgLSAgICAgIDM2LCAgICAgMCwgICAgMzgsICAgIDM3LCAg
ICAgMCwgICAgIDAsICAgIDk3LCAgICAgMCwgICAgNTksICAgIDYwLA0KICAgIC0gICAgICA1Niwg
ICAgNTgsICAgIDU3LCAgICA2NiwgICAgNTQsICAgIDUzLCAgICA3MSwgICAgNzMsICAgIDY5LCAg
ICA3MiwNCiAgICAtICAgICAgNjgsICAgMTA2LCAgICA5NSwgICAgIDAsICAgIDk0LCAgICA4MCwg
ICAgODIsICAgIDc4LCAgICA4MSwgICAgNzcsDQogICAgLSAgICAgIDkwLCAgICA5MSwgICAgODks
ICAgMTExLCAgIDExMywgICAxMTQsICAgMTEwLCAgIDEwOSwgICAgMjksICAgIDg2LA0KICAgIC0g
ICAgICAgMCwgICAxMDYsICAgICAwLCAgIDEwNiwgICAxMDYsICAgMTA2LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA4NywNCiAgICAtICAgICAgNjMsICAgMTA2LCAgICAgMCwgICAxMDYsICAgICAw
LCAgICA5NiwgICAgIDAsICAgICAwLCAgICA0MSwgICAgOTgsDQogICAgLSAgICAgICAwLCAgICAg
MCwgICAxMDYsICAgIDQ5LCAgICA0NiwgICAgMjgsICAgICAwLCAgICA2MiwgICAgIDAsICAgMTA3
LA0KICAgIC0gICAgICA5MiwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgIDAsICAgICAwLCAgICA0
OCwgICAgNjEsICAgIDY0LCAgICA0NSwNCiAgICAtICAgICAgNTANCiAgICAtfTsNCiAgICAtDQog
ICAgLS8qIFlZREVGR09UT1tOVEVSTS1OVU1dLiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlw
ZV9pbnQxNiB5eWRlZmdvdG9bXSA9DQogICAgLXsNCiAgICAtICAgICAgLTEsICAgICAzLCAgICAg
NCwgICAgIDUsICAgIDMzLCAgICAzNCwgICAxMDgsICAgIDM1LCAgICAzNiwgICAgMzcsDQogICAg
LSAgICAgIDM4LCAgICA3NCwgICAxMDksICAgMTEwLCAgIDE1NywgICAxODYsICAgIDM5LCAgICA0
MCwgICAxMjQsICAgIDQxLA0KICAgIC0gICAgICA3NiwgICAxMjAsICAgIDc3LCAgICA0MiwgICAx
MjgsICAgIDQzLCAgICA3OCwgICAgIDYsICAgIDQ0LCAgICA0NSwNCiAgICAtICAgICAxMzcsICAg
IDQ2LCAgICA4MCwgICAgNDcsICAgIDQ4LCAgICA0OSwgICAxMTEsICAgMTEyLCAgICA4MSwgICAx
MTMsDQogICAgLSAgICAgIDc5LCAgIDEzNCwgICAxNTIsICAgMTUzLCAgICA1MCwgICAgIDcsICAg
MTY1LCAgICA2OSwgICAgNzAsICAgIDYwDQogICAgLX07DQogICAgLQ0KICAgIC0vKiBZWVBBQ1Rb
U1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJpbmcN
CiAgICAtICAgU1RBVEUtTlVNLiAgKi8NCiAgICAtI2RlZmluZSBZWVBBQ1RfTklORiAtOTANCiAg
ICAtc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9DQogICAgLXsNCiAgICAtICAg
ICAgIDQsICAgIDQyLCAgIC05MCwgICAgOTYsICAgLTkwLCAgIDExMSwgICAtOTAsICAgIDE1LCAg
IC05MCwgICAtOTAsDQogICAgLSAgICAgIDc1LCAgIC05MCwgICAgODIsICAgIDQyLCAgIDEwNCwg
ICAgNDIsICAgMTEwLCAgIDEwNywgICAgNDIsICAgMTE1LA0KICAgIC0gICAgIDEyNSwgICAgLTQs
ICAgMTIxLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwN
CiAgICAtICAgICAtOTAsICAgMTYyLCAgIC05MCwgICAxNjMsICAgLTkwLCAgIC05MCwgICAtOTAs
ICAgLTkwLCAgIC05MCwgICAtOTAsDQogICAgLSAgICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkw
LCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLA0KICAgIC0gICAgIC05
MCwgICAxMzksICAgLTkwLCAgIC05MCwgICAxMzgsICAgLTkwLCAgIDE0MiwgICAtOTAsICAgMTQz
LCAgIC05MCwNCiAgICAtICAgICAxNTIsICAgLTkwLCAgIDE2NCwgICAxNjcsICAgMTY4LCAgIC05
MCwgICAtOTAsICAgIC00LCAgICAtNCwgICAgNzcsDQogICAgLSAgICAgLTE4LCAgIC05MCwgICAx
NzcsICAgMTg1LCAgICAzMywgICAgNzEsICAgMTk1LCAgIDI0NywgICAyMzYsICAgIC0yLA0KICAg
IC0gICAgIDIzNiwgICAxNzEsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAt
OTAsICAgIDQxLCAgIC05MCwNCiAgICAtICAgICAgLTQsICAgIC00LCAgIDEzOCwgICAgOTcsICAg
IDk3LCAgIC05MCwgICAtOTAsICAgMTg2LCAgIDE4NywgICAxOTQsDQogICAgLSAgICAgIDQyLCAg
ICA0MiwgICAgLTQsICAgMTk2LCAgICA5NywgICAtOTAsICAgMjE5LCAgIC05MCwgICAtOTAsICAg
LTkwLA0KICAgIC0gICAgIC05MCwgICAyMTAsICAgLTkwLCAgIC05MCwgICAyMDQsICAgIDQyLCAg
ICA0MiwgICAxOTksICAgLTkwLCAgIC05MCwNCiAgICAtICAgICAtOTAsICAgLTkwLCAgIC05MCwg
ICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsDQogICAgLSAg
ICAgLTkwLCAgIDIyMiwgICAtOTAsICAgMjIzLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwg
ICAtOTAsICAgLTkwLA0KICAgIC0gICAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAyMTUs
ICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwNCiAgICAtICAgICAgLTQsICAgMjIy
LCAgIDIyOCwgICAyMjIsICAgIC01LCAgIDIyMiwgICAgOTcsICAgIDM1LCAgIDIyOSwgICAtOTAs
DQogICAgLSAgICAgLTkwLCAgIDIyMiwgICAyMzIsICAgMjIyLCAgICAtNCwgICAtOTAsICAgMTM1
LCAgIDIzMywgICAtOTAsICAgLTkwLA0KICAgIC0gICAgIDIzNCwgICAyMzUsICAgMjIyLCAgIDI0
MCwgICAtOTAsICAgLTkwLCAgIDIzNywgICAtOTAsICAgMjM5LCAgIC0xMywNCiAgICAtICAgICAt
OTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgMjQ0LCAgICA0MiwgICAtOTAsICAgLTkwLCAgIC05
MCwgICAtOTAsDQogICAgLSAgICAgLTkwDQogICAgLX07DQogICAgLQ0KICAgIC0vKiBZWVBHT1RP
W05URVJNLU5VTV0uICAqLw0KICAgIC1zdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9b
XSA9DQogICAgLXsNCiAgICAtICAgICAtOTAsICAgLTkwLCAgIDI2OSwgICAyNzEsICAgLTkwLCAg
ICAyMywgICAtNzAsICAgLTkwLCAgIC05MCwgICAtOTAsDQogICAgLSAgICAgLTkwLCAgIDI0Mywg
ICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTQ4LA0K
ICAgIC0gICAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwgICAtOTAsICAgLTkwLCAgIC05MCwg
ICAtOTAsICAgLTkwLCAgIC05MCwNCiAgICAtICAgICAtOTAsICAgLTIwLCAgIC05MCwgICAtOTAs
ICAgLTkwLCAgIC05MCwgICAtOTAsICAgMjA2LCAgIDIwNSwgICAtNjgsDQogICAgLSAgICAgLTkw
LCAgIC05MCwgICAxNjksICAgIC0xLCAgICAyNywgICAgLTcsICAgMTE4LCAgIC02NiwgICAtODks
ICAgLTkwDQogICAgLX07DQogICAgLQ0KICAgIC0vKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1d
XS4gIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLiAgSWYNCiAgICAtICAgcG9zaXRpdmUs
IHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoDQog
ICAgLSAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBl
cnJvci4gICovDQogICAgLSNkZWZpbmUgWVlUQUJMRV9OSU5GIC04Ng0KICAgIC1zdGF0aWMgY29u
c3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9DQogICAgLXsNCiAgICAtICAgICAgMTAsICAgIDg4
LCAgICA4OSwgICAgNTQsICAgMTQ2LCAgIDE0NywgICAxMTksICAgICAxLCAgIDEyMiwgICAxNjQs
DQogICAgLSAgICAgIDkzLCAgIDE0MSwgICAgNTYsICAgMTQyLCAgICA1OCwgICAxNTYsICAgIDk0
LCAgICA2MiwgICAgIDEsICAgIDkwLA0KICAgIC0gICAgICA5MSwgICAxMzEsICAgIDY1LCAgICA2
NiwgICAxNDQsICAgMTQ1LCAgICA2NywgICAgOTAsICAgIDkxLCAgIDEzMiwNCiAgICAtICAgICAx
MjcsICAgIDY4LCAgIDEzNiwgICAtMzEsICAgIDk3LCAgICAgMiwgICAxNTQsICAgLTMxLCAgIC0z
MSwgICAtMzEsDQogICAgLSAgICAgLTMxLCAgIC0zMSwgICAtMzEsICAgLTMxLCAgIC0zMSwgICAg
OTgsICAgIDUyLCAgIC0zMSwgICAtMzEsICAgIDk5LA0KICAgIC0gICAgIC0zMSwgICAxMDAsICAg
MTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIC0zMSwgICAxMDUsICAgMTI5LCAgIDEwNiwNCiAg
ICAtICAgICAxMzgsICAgMTczLCAgICA5MiwgICAxNDEsICAgMTA3LCAgIDE0MiwgICAxNzQsICAg
MTcyLCAgICAgOCwgICAgIDksDQogICAgLSAgICAgMTQzLCAgIC0zMywgICAgOTcsICAgIDkwLCAg
ICA5MSwgICAtMzMsICAgLTMzLCAgIC0zMywgICAtMzMsICAgLTMzLA0KICAgIC0gICAgIC0zMywg
ICAtMzMsICAgLTMzLCAgICA5OCwgICAxNjYsICAgLTMzLCAgIC0zMywgICAgOTksICAgLTMzLCAg
IDEwMCwNCiAgICAtICAgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgLTMzLCAgIDEwNSwg
ICAgMTEsICAgMTA2LCAgIDE3OSwgICAxNTEsDQogICAgLSAgICAgMTIzLCAgIDEyNiwgICAxMDcs
ICAgMTM1LCAgIDEyNSwgICAxMzAsICAgICAyLCAgIDEzOSwgICAgIDIsICAgIDkwLA0KICAgIC0g
ICAgICA5MSwgICAgLTUsICAgIDEyLCAgICA1NSwgICAxNjEsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywNCiAgICAtICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgNjUsICAgIDY2
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsDQogICAgLSAgICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgNTcsICAgIDU5LCAgICAzMSwgICAgNjEsICAgIC00
LA0KICAgIC0gICAgICAxMiwgICAgNjMsICAgIDMyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LCAgICAxOSwNCiAgICAtICAgICAgMjAsICAgIDY0LCAgICA3MSwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsDQogICAgLSAgICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDcyLCAgICA3MywgICAgMzEsICAgMTgwLCAgICA5MCwgICAg
OTEsICAgIDUyLA0KICAgIC0gICAgICAzMiwgICAtODUsICAgIDk3LCAgICA4MiwgICAgODMsICAg
LTg1LCAgIC04NSwgICAtODUsICAgLTg1LCAgIC04NSwNCiAgICAtICAgICAtODUsICAgLTg1LCAg
IC04NSwgICAgODQsICAgMTkwLCAgIC04NSwgICAtODUsICAgIDk5LCAgIC04NSwgICAtODUsDQog
ICAgLSAgICAgLTg1LCAgIC04NSwgICAtODUsICAgLTg1LCAgIC04NSwgICAgODUsICAgIDk3LCAg
IDEwNiwgICAgODYsICAgIDg3LA0KICAgIC0gICAgIC01MiwgICAtNTIsICAgMTQwLCAgIC01Miwg
ICAtNTIsICAgLTUyLCAgIC01MiwgICAgOTgsICAgIDk1LCAgIC01MiwNCiAgICAtICAgICAtNTIs
ICAgIDk5LCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDExNywgICAgOTYsICAgMTQ4LCAgIDE0OSwg
ICAxNTAsDQogICAgLSAgICAgMTU4LCAgIDEwNiwgICAxNTUsICAgMTU5LCAgICA5NywgICAxNjMs
ICAgMTE4LCAgIC03NiwgICAtNzYsICAgLTc2LA0KICAgIC0gICAgIC03NiwgICAtNzYsICAgLTc2
LCAgIC03NiwgICAtNzYsICAgMTYwLCAgIDE2NCwgICAtNzYsICAgLTc2LCAgICA5OSwNCiAgICAt
ICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICA5MSwgICAxMDYsDQogICAgLSAgICAgIDIxLCAgICAyMiwgICAgMTQsICAgIDE1LCAgIDE0
MCwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgMTY4LA0KICAgIC0gICAgIDE3NSwgICAg
MjEsICAgIDIyLCAgIDE3NywgICAxODEsICAgMTgyLCAgIDE4MywgICAgMzIsICAgMTg3LCAgIDE2
NywNCiAgICAtICAgICAxODgsICAgMTY5LCAgIDE3MCwgICAxNzEsICAgMTg1LCAgIDE4OSwgICAg
NTMsICAgIDUxLCAgICAzMiwgICAxNzYsDQogICAgLSAgICAgIDc1LCAgIDE3OCwgICAxMjEsICAg
ICAwLCAgIDEzMywgICAxNjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLA0KICAgIC0gICAg
IDE4NA0KICAgIC19Ow0KICAgIC0NCiAgICAtI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVs
dCh5eXN0YXRlKSBcDQogICAgLSAgKCh5eXN0YXRlKSA9PSAoLTkwKSkNCiAgICAtDQogICAgLSNk
ZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcih5eXRhYmxlX3ZhbHVlKSBcDQogICAgLSAgWVlJ
RCAoMCkNCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0N
CiAgICAtew0KICAgIC0gICAgICAgMSwgICAgNjcsICAgIDY4LCAgICAxMCwgICAgOTMsICAgIDk0
LCAgICA3NiwgICAgIDMsICAgIDc2LCAgICAxNCwNCiAgICAtICAgICAgMjgsICAgIDgxLCAgICAx
MywgICAgODEsICAgIDE1LCAgIDEwNCwgICAgMzQsICAgIDE4LCAgICAgMywgICAgMzIsDQogICAg
LSAgICAgIDMzLCAgICAyMywgICAgMjYsICAgIDI3LCAgICA5MCwgICAgOTEsICAgIDMwLCAgICAz
MiwgICAgMzMsICAgIDMxLA0KICAgIC0gICAgICA3OCwgICAgMzUsICAgIDgwLCAgICAgMCwgICAg
IDEsICAgIDMxLCAgIDEwMiwgICAgIDQsICAgICA1LCAgICAgNiwNCiAgICAtICAgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMzEsICAgIDE0LCAgICAxNSwgICAg
MTYsDQogICAgLSAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAg
IDIzLCAgICAyNCwgICAgNzgsICAgIDI2LA0KICAgIC0gICAgICA4MCwgICAgMjYsICAgIDY5LCAg
IDEzMywgICAgMzEsICAgMTMzLCAgICAzMSwgICAxNTYsICAgIDI2LCAgICAyNywNCiAgICAtICAg
ICAgMjksICAgICAwLCAgICAgMSwgICAgMzIsICAgIDMzLCAgICAgNCwgICAgIDUsICAgICA2LCAg
ICAgNywgICAgIDgsDQogICAgLSAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgIDE1MCwg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LA0KICAgIC0gICAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAgMCwgICAgMjYsICAgMTY0LCAgIDEwMCwN
CiAgICAtICAgICAgNzcsICAgIDc4LCAgICAzMSwgICAgODAsICAgIDc3LCAgICA3OCwgICAgMzEs
ICAgIDgwLCAgICAzMSwgICAgMzIsDQogICAgLSAgICAgIDMzLCAgICAgMCwgICAgIDEsICAgIDMx
LCAgIDExNSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LA0KICAgIC0gICAgICAg
OSwgICAgMTAsICAgIDExLCAgICAyNiwgICAgMjcsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwNCiAgICAtICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAz
MSwgICAgMjYsICAgIDI2LCAgICAzMSwgICAgIDAsDQogICAgLSAgICAgICAxLCAgICAyNiwgICAg
MzEsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLA0KICAg
IC0gICAgICAxMSwgICAgMjYsICAgIDMxLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwNCiAgICAtICAgICAgMjEsICAgIDIyLCAgICAyMywgICAgIDEsICAg
ICAxLCAgICAyNiwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzEsDQogICAgLSAgICAgIDMxLCAg
ICAgMCwgICAgIDEsICAgIDMxLCAgICAzMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LA0KICAgIC0gICAgICAgOSwgICAgMTAsICAgIDExLCAgICAzMSwgICAxODUsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwNCiAgICAtICAgICAgMTksICAgIDIwLCAgICAyMSwg
ICAgMjIsICAgIDIzLCAgICAzMSwgICAgIDEsICAgIDI2LCAgICAzMSwgICAgMzEsDQogICAgLSAg
ICAgICA1LCAgICAgNiwgICAgMzEsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwg
ICAgMzEsICAgIDE0LA0KICAgIC0gICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAzMSwgICAgMzEsICAgIDMxLCAgICAyNSwNCiAgICAtICAgICAgIDEsICAgIDI2
LCAgICAyNiwgICAgMTMsICAgICAxLCAgICAyNiwgICAgMzEsICAgICA0LCAgICAgNSwgICAgIDYs
DQogICAgLSAgICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzEsICAgIDE0
LCAgICAxNCwgICAgMTUsICAgIDE2LA0KICAgIC0gICAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDMzLCAgICAyNiwNCiAgICAtICAgICAg
MTQsICAgIDE1LCAgICAgNSwgICAgIDYsICAgIDMxLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMzEsDQogICAgLSAgICAgIDMxLCAgICAxNCwgICAgMTUsICAgIDMxLCAgICAzMSwgICAg
MzEsICAgIDMxLCAgICAzMSwgICAgMzEsICAgMTUxLA0KICAgIC0gICAgICAzMSwgICAxNTMsICAg
MTU0LCAgIDE1NSwgICAgMzQsICAgIDMxLCAgICAgNywgICAgIDYsICAgIDMxLCAgIDE2MSwNCiAg
ICAtICAgICAgMzcsICAgMTYzLCAgICA3NiwgICAgLTEsICAgIDc5LCAgIDExNiwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsDQogICAgLSAgICAgMTcyDQogICAgLX07DQogICAgLQ0KICAgIC0v
KiBZWVNUT1NbU1RBVEUtTlVNXSAtLSBUaGUgKGludGVybmFsIG51bWJlciBvZiB0aGUpIGFjY2Vz
c2luZw0KICAgIC0gICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8NCiAgICAtc3RhdGlj
IGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9DQogICAgLXsNCiAgICAtICAgICAgIDAsICAg
ICAzLCAgICAzMSwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNjMsICAgIDgxLCAgICAyNiwgICAg
MjcsDQogICAgLSAgICAgIDc5LCAgICAgMCwgICAgIDEsICAgICA0LCAgICAgNSwgICAgIDYsICAg
ICA3LCAgICAgOCwgICAgIDksICAgIDEwLA0KICAgIC0gICAgICAxMSwgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwNCiAgICAtICAg
ICAgMjMsICAgIDI2LCAgICAzMSwgICAgNDAsICAgIDQxLCAgICA0MywgICAgNDQsICAgIDQ1LCAg
ICA0NiwgICAgNTIsDQogICAgLSAgICAgIDUzLCAgICA1NSwgICAgNTksICAgIDYxLCAgICA2NCwg
ICAgNjUsICAgIDY3LCAgICA2OSwgICAgNzAsICAgIDcxLA0KICAgIC0gICAgICA4MCwgICAgMzks
ICAgIDMxLCAgICAzOCwgICAgODEsICAgIDMxLCAgICA3OSwgICAgMzEsICAgIDc5LCAgICAyNiwN
CiAgICAtICAgICAgODUsICAgIDMxLCAgICA3OSwgICAgMjYsICAgIDI2LCAgICAyNiwgICAgMjcs
ICAgIDMwLCAgICAzNSwgICAgODMsDQogICAgLSAgICAgIDg0LCAgICAzMSwgICAgIDEsICAgICAx
LCAgICA0NywgICAgNDcsICAgIDU2LCAgICA1OCwgICAgNjIsICAgIDc2LA0KICAgIC0gICAgICA2
OCwgICAgNzQsICAgIDMxLCAgICAzMSwgICAgMzEsICAgIDMxLCAgICAzMSwgICAgMzEsICAgIDgz
LCAgICA4MywNCiAgICAtICAgICAgMzIsICAgIDMzLCAgICA4MSwgICAgMjgsICAgIDM0LCAgICAz
MSwgICAgMzEsICAgICAxLCAgICAxMiwgICAgMTYsDQogICAgLSAgICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgMjQsICAgIDI2LCAgICAzMSwgICAgNDIsICAgIDQ4LA0KICAg
IC0gICAgICA0OSwgICAgNzIsICAgIDczLCAgICA3NSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDMxLCAgICA0MiwNCiAgICAtICAgICAgNTcsICAgIDczLCAgICA3NSwgICAgNDEsICAg
IDU0LCAgICA4MCwgICAgNDEsICAgIDU1LCAgICA2MCwgICAgNjcsDQogICAgLSAgICAgIDgwLCAg
ICAyMywgICAgMzEsICAgIDc0LCAgICA3NywgICAgNDEsICAgIDU1LCAgICA2NiwgICAgNjcsICAg
IDgwLA0KICAgIC0gICAgICAzMSwgICAgNDIsICAgIDc1LCAgICAyOSwgICAgODMsICAgIDgzLCAg
ICA4NCwgICAgODQsICAgIDMxLCAgICAzMSwNCiAgICAtICAgICAgMjUsICAgIDc5LCAgICA3OCwg
ICAgNzksICAgIDgzLCAgICAyNiwgICAgODQsICAgIDUwLCAgICAgMSwgICAgMTMsDQogICAgLSAg
ICAgIDMxLCAgICA3OSwgICAgNzgsICAgIDI2LCAgICAxNCwgICAgODIsICAgIDgzLCAgICA4Miwg
ICAgMzEsICAgIDgyLA0KICAgIC0gICAgICA4MiwgICAgODIsICAgIDg0LCAgICAyNiwgICAgMzEs
ICAgIDMxLCAgICA4MiwgICAgMzEsICAgIDgyLCAgICA4MywNCiAgICAtICAgICAgMzEsICAgIDMx
LCAgICAzMSwgICAgMzEsICAgIDgyLCAgICAzNCwgICAgNTEsICAgIDMxLCAgICAzMSwgICAgMzEs
DQogICAgLSAgICAgIDc5DQogICAgLX07DQogICAgLQ0KICAgIC0jZGVmaW5lIHl5ZXJyb2sJCSh5
eWVycnN0YXR1cyA9IDApDQogICAgLSNkZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZ
KQ0KICAgIC0jZGVmaW5lIFlZRU1QVFkJCSgtMikNCiAgICAtI2RlZmluZSBZWUVPRgkJMA0KICAg
IC0NCiAgICAtI2RlZmluZSBZWUFDQ0VQVAlnb3RvIHl5YWNjZXB0bGFiDQogICAgLSNkZWZpbmUg
WVlBQk9SVAkJZ290byB5eWFib3J0bGFiDQogICAgLSNkZWZpbmUgWVlFUlJPUgkJZ290byB5eWVy
cm9ybGFiDQogICAgLQ0KICAgIC0NCiAgICAtLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxs
IHl5ZXJyb3IuICBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQ0KICAgIC0gICB0byBlYXNl
IHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLg0K
ICAgIC0gICBPbmNlIEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlz
IGNhbiBnby4gIEhvd2V2ZXIsDQogICAgLSAgIFlZRkFJTCBhcHBlYXJzIHRvIGJlIGluIHVzZS4g
IE5ldmVydGhlbGVzcywgaXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZA0KICAgIC0gICBpbiBCaXNv
biAyLjQuMidzIE5FV1MgZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMNCiAg
ICAtICAgZGlzY3Vzc2VkLiAgKi8NCiAgICAtDQogICAgLSNkZWZpbmUgWVlGQUlMCQlnb3RvIHl5
ZXJybGFiDQogICAgLSNpZiBkZWZpbmVkIFlZRkFJTA0KICAgIC0gIC8qIFRoaXMgaXMgaGVyZSB0
byBzdXBwcmVzcyB3YXJuaW5ncyBmcm9tIHRoZSBHQ0MgY3BwJ3MNCiAgICAtICAgICAtV3VudXNl
ZC1tYWNyb3MuICBOb3JtYWxseSB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGF0IHdhcm5pbmcsIGJ1
dA0KICAgIC0gICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBm
b3IgdXNlcnMgdG8gcmVtb3ZlDQogICAgLSAgICAgWVlGQUlMIHVzZXMsIHdoaWNoIHdpbGwgcHJv
ZHVjZSB3YXJuaW5ncyBmcm9tIEJpc29uIDIuNS4gICovDQogICAgLSNlbmRpZg0KICAgIC0NCiAg
ICAtI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXllcnJzdGF0dXMpDQogICAgLQ0KICAgIC0j
ZGVmaW5lIFlZQkFDS1VQKFRva2VuLCBWYWx1ZSkJCQkJCVwNCiAgICAtZG8JCQkJCQkJCVwNCiAg
ICAtICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0gMSkJCQkJXA0KICAgIC0gICAg
ewkJCQkJCQkJXA0KICAgIC0gICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwNCiAgICAtICAg
ICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcDQogICAgLSAgICAgIFlZUE9QU1RBQ0sgKDEpOwkJ
CQkJCVwNCiAgICAtICAgICAgZ290byB5eWJhY2t1cDsJCQkJCQlcDQogICAgLSAgICB9CQkJCQkJ
CQlcDQogICAgLSAgZWxzZQkJCQkJCQkJXA0KICAgIC0gICAgewkJCQkJCQkJXA0KICAgIC0gICAg
ICB5eWVycm9yIChZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAiKSk7IFwNCiAgICAt
ICAgICAgWVlFUlJPUjsJCQkJCQkJXA0KICAgIC0gICAgfQkJCQkJCQkJXA0KICAgIC13aGlsZSAo
WVlJRCAoMCkpDQogICAgLQ0KICAgIC0NCiAgICAtI2RlZmluZSBZWVRFUlJPUgkxDQogICAgLSNk
ZWZpbmUgWVlFUlJDT0RFCTI1Ng0KICAgIC0NCiAgICAtDQogICAgLS8qIFlZTExPQ19ERUZBVUxU
IC0tIFNldCBDVVJSRU5UIHRvIHNwYW4gZnJvbSBSSFNbMV0gdG8gUkhTW05dLg0KICAgIC0gICBJ
ZiBOIGlzIDAsIHRoZW4gc2V0IENVUlJFTlQgdG8gdGhlIGVtcHR5IGxvY2F0aW9uIHdoaWNoIGVu
ZHMNCiAgICAtICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMgZGVmaW5lZCku
ICAqLw0KICAgIC0NCiAgICAtI2RlZmluZSBZWVJIU0xPQyhSaHMsIEspICgoUmhzKVtLXSkNCiAg
ICAtI2lmbmRlZiBZWUxMT0NfREVGQVVMVA0KICAgIC0jIGRlZmluZSBZWUxMT0NfREVGQVVMVChD
dXJyZW50LCBSaHMsIE4pCQkJCVwNCiAgICAtICAgIGRvCQkJCQkJCQkJXA0KICAgIC0gICAgICBp
ZiAoWVlJRCAoTikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwNCiAgICAtCXsJCQkJCQkJCVwNCiAgICAtCSAgKEN1cnJlbnQpLmZpcnN0X2xpbmUg
ICA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2xpbmU7CVwNCiAgICAtCSAgKEN1cnJlbnQpLmZp
cnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0X2NvbHVtbjsJXA0KICAgIC0JICAo
Q3VycmVudCkubGFzdF9saW5lICAgID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXA0K
ICAgIC0JICAoQ3VycmVudCkubGFzdF9jb2x1bW4gID0gWVlSSFNMT0MgKFJocywgTikubGFzdF9j
b2x1bW47CVwNCiAgICAtCX0JCQkJCQkJCVwNCiAgICAtICAgICAgZWxzZQkJCQkJCQkJXA0KICAg
IC0JewkJCQkJCQkJXA0KICAgIC0JICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQp
Lmxhc3RfbGluZSAgID0JCVwNCiAgICAtCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7
CQkJCVwNCiAgICAtCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IChDdXJyZW50KS5sYXN0X2Nv
bHVtbiA9CQlcDQogICAgLQkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwN
CiAgICAtCX0JCQkJCQkJCVwNCiAgICAtICAgIHdoaWxlIChZWUlEICgwKSkNCiAgICAtI2VuZGlm
DQogICAgLQ0KICAgIC0NCiAgICAtLyogVGhpcyBtYWNybyBpcyBwcm92aWRlZCBmb3IgYmFja3dh
cmQgY29tcGF0aWJpbGl0eS4gKi8NCiAgICAtDQogICAgLSNpZm5kZWYgWVlfTE9DQVRJT05fUFJJ
TlQNCiAgICAtIyBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDAp
DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtDQogICAgLS8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5
bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLw0KICAgIC0NCiAgICAtI2lmZGVmIFlZ
TEVYX1BBUkFNDQogICAgLSMgZGVmaW5lIFlZTEVYIHl5bGV4IChZWUxFWF9QQVJBTSkNCiAgICAt
I2Vsc2UNCiAgICAtIyBkZWZpbmUgWVlMRVggeXlsZXggKCkNCiAgICAtI2VuZGlmDQogICAgLQ0K
ICAgIC0vKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovDQogICAgLSNpZiBZWURF
QlVHDQogICAgLQ0KICAgIC0jIGlmbmRlZiBZWUZQUklOVEYNCiAgICAtIyAgaW5jbHVkZSA8c3Rk
aW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgIC0jICBkZWZpbmUg
WVlGUFJJTlRGIGZwcmludGYNCiAgICAtIyBlbmRpZg0KICAgIC0NCiAgICAtIyBkZWZpbmUgWVlE
UFJJTlRGKEFyZ3MpCQkJXA0KICAgIC1kbyB7CQkJCQkJXA0KICAgIC0gIGlmICh5eWRlYnVnKQkJ
CQkJXA0KICAgIC0gICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwNCiAgICAtfSB3aGlsZSAoWVlJRCAo
MCkpDQogICAgLQ0KICAgIC0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUsIFZh
bHVlLCBMb2NhdGlvbikJCQkgIFwNCiAgICAtZG8gewkJCQkJCQkJCSAgXA0KICAgIC0gIGlmICh5
eWRlYnVnKQkJCQkJCQkJICBcDQogICAgLSAgICB7CQkJCQkJCQkJICBcDQogICAgLSAgICAgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcDQogICAgLSAgICAgIHl5X3N5
bWJvbF9wcmludCAoc3RkZXJyLAkJCQkJCSAgXA0KICAgIC0JCSAgVHlwZSwgVmFsdWUpOyBcDQog
ICAgLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwNCiAgICAtICAgIH0J
CQkJCQkJCQkgIFwNCiAgICAtfSB3aGlsZSAoWVlJRCAoMCkpDQogICAgLQ0KICAgIC0NCiAgICAt
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICAtfCBQcmludCB0aGlzIHN5
bWJvbCBvbiBZWU9VVFBVVC4gIHwNCiAgICAtYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8NCiAgICAtDQogICAgLS8qQVJHU1VTRUQqLw0KICAgIC0jaWYgKGRlZmluZWQgX19TVERD
X18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwNCiAgICAtICAgICB8fCBkZWZpbmVkIF9fY3Bs
dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpDQogICAgLXN0YXRpYyB2b2lkDQogICAgLXl5X3N5
bWJvbF92YWx1ZV9wcmludCAoRklMRSAqeXlvdXRwdXQsIGludCB5eXR5cGUsIFlZU1RZUEUgY29u
c3QgKiBjb25zdCB5eXZhbHVlcCkNCiAgICAtI2Vsc2UNCiAgICAtc3RhdGljIHZvaWQNCiAgICAt
eXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCkNCiAgICAt
ICAgIEZJTEUgKnl5b3V0cHV0Ow0KICAgIC0gICAgaW50IHl5dHlwZTsNCiAgICAtICAgIFlZU1RZ
UEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsNCiAgICAtI2VuZGlmDQogICAgLXsNCiAgICAtICBp
ZiAoIXl5dmFsdWVwKQ0KICAgIC0gICAgcmV0dXJuOw0KICAgIC0jIGlmZGVmIFlZUFJJTlQNCiAg
ICAtICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQ0KICAgIC0gICAgWVlQUklOVCAoeXlvdXRwdXQs
IHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7DQogICAgLSMgZWxzZQ0KICAgIC0gIFlZVVNF
ICh5eW91dHB1dCk7DQogICAgLSMgZW5kaWYNCiAgICAtICBzd2l0Y2ggKHl5dHlwZSkNCiAgICAt
ICAgIHsNCiAgICAtICAgICAgZGVmYXVsdDoNCiAgICAtCWJyZWFrOw0KICAgIC0gICAgfQ0KICAg
IC19DQogICAgLQ0KICAgIC0NCiAgICAtLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4NCiAgICAtfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwNCiAgICAtYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAtDQogICAgLSNpZiAoZGVmaW5lZCBf
X1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXA0KICAgIC0gICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikNCiAgICAtc3RhdGljIHZvaWQNCiAgICAt
eXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25z
dCAqIGNvbnN0IHl5dmFsdWVwKQ0KICAgIC0jZWxzZQ0KICAgIC1zdGF0aWMgdm9pZA0KICAgIC15
eV9zeW1ib2xfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwKQ0KICAgIC0gICAgRklM
RSAqeXlvdXRwdXQ7DQogICAgLSAgICBpbnQgeXl0eXBlOw0KICAgIC0gICAgWVlTVFlQRSBjb25z
dCAqIGNvbnN0IHl5dmFsdWVwOw0KICAgIC0jZW5kaWYNCiAgICAtew0KICAgIC0gIGlmICh5eXR5
cGUgPCBZWU5UT0tFTlMpDQogICAgLSAgICBZWUZQUklOVEYgKHl5b3V0cHV0LCAidG9rZW4gJXMg
KCIsIHl5dG5hbWVbeXl0eXBlXSk7DQogICAgLSAgZWxzZQ0KICAgIC0gICAgWVlGUFJJTlRGICh5
eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOw0KICAgIC0NCiAgICAtICB5
eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwKTsNCiAgICAt
ICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4NCiAgICAtfCB5eV9zdGFja19wcmludCAtLSBQcmludCB0aGUgc3RhdGUgc3RhY2sgZnJv
bSBpdHMgQk9UVE9NIHVwIHRvIGl0cyB8DQogICAgLXwgVE9QIChpbmNsdWRlZCkuICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KICAgIC1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8NCiAgICAtDQogICAgLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5
X19GVU5DX18gXA0KICAgIC0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBf
TVNDX1ZFUikNCiAgICAtc3RhdGljIHZvaWQNCiAgICAteXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9p
bnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApDQogICAgLSNlbHNlDQogICAgLXN0
YXRpYyB2b2lkDQogICAgLXl5X3N0YWNrX3ByaW50ICh5eWJvdHRvbSwgeXl0b3ApDQogICAgLSAg
ICB5eXR5cGVfaW50MTYgKnl5Ym90dG9tOw0KICAgIC0gICAgeXl0eXBlX2ludDE2ICp5eXRvcDsN
CiAgICAtI2VuZGlmDQogICAgLXsNCiAgICAtICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5v
dyIpOw0KICAgIC0gIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykNCiAgICAt
ICAgIHsNCiAgICAtICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOw0KICAgIC0gICAgICBZWUZQ
UklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsNCiAgICAtICAgIH0NCiAgICAtICBZWUZQUklO
VEYgKHN0ZGVyciwgIlxuIik7DQogICAgLX0NCiAgICAtDQogICAgLSMgZGVmaW5lIFlZX1NUQUNL
X1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcDQogICAgLWRvIHsJCQkJCQkJCVwNCiAgICAtICBpZiAo
eXlkZWJ1ZykJCQkJCQkJXA0KICAgIC0gICAgeXlfc3RhY2tfcHJpbnQgKChCb3R0b20pLCAoVG9w
KSk7CQkJCVwNCiAgICAtfSB3aGlsZSAoWVlJRCAoMCkpDQogICAgLQ0KICAgIC0NCiAgICAtLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAgLXwg
UmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfA0KICAgIC1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAt
DQogICAgLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXA0K
ICAgIC0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikNCiAg
ICAtc3RhdGljIHZvaWQNCiAgICAteXlfcmVkdWNlX3ByaW50IChZWVNUWVBFICp5eXZzcCwgaW50
IHl5cnVsZSkNCiAgICAtI2Vsc2UNCiAgICAtc3RhdGljIHZvaWQNCiAgICAteXlfcmVkdWNlX3By
aW50ICh5eXZzcCwgeXlydWxlKQ0KICAgIC0gICAgWVlTVFlQRSAqeXl2c3A7DQogICAgLSAgICBp
bnQgeXlydWxlOw0KICAgIC0jZW5kaWYNCiAgICAtew0KICAgIC0gIGludCB5eW5yaHMgPSB5eXIy
W3l5cnVsZV07DQogICAgLSAgaW50IHl5aTsNCiAgICAtICB1bnNpZ25lZCBsb25nIGludCB5eWxu
byA9IHl5cmxpbmVbeXlydWxlXTsNCiAgICAtICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVjaW5n
IHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsDQogICAgLQkgICAgIHl5cnVsZSAtIDEs
IHl5bG5vKTsNCiAgICAtICAvKiBUaGUgc3ltYm9scyBiZWluZyByZWR1Y2VkLiAgKi8NCiAgICAt
ICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspDQogICAgLSAgICB7DQogICAgLSAg
ICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7DQogICAgLSAgICAg
IHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5aV0sDQog
ICAgLQkJICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQ0KICAgIC0JCSAgICAg
ICAJCSAgICAgICApOw0KICAgIC0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7DQogICAg
LSAgICB9DQogICAgLX0NCiAgICAtDQogICAgLSMgZGVmaW5lIFlZX1JFRFVDRV9QUklOVChSdWxl
KQkJXA0KICAgIC1kbyB7CQkJCQlcDQogICAgLSAgaWYgKHl5ZGVidWcpCQkJCVwNCiAgICAtICAg
IHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUpOyBcDQogICAgLX0gd2hpbGUgKFlZSUQgKDAp
KQ0KICAgIC0NCiAgICAtLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlz
IGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0DQogICAgLSAgIG11bHRpcGxlIHBhcnNlcnMgY2Fu
IGNvZXhpc3QuICAqLw0KICAgIC1pbnQgeXlkZWJ1ZzsNCiAgICAtI2Vsc2UgLyogIVlZREVCVUcg
Ki8NCiAgICAtIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpDQogICAgLSMgZGVmaW5lIFlZX1NZTUJP
TF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQ0KICAgIC0jIGRlZmluZSBZWV9T
VEFDS19QUklOVChCb3R0b20sIFRvcCkNCiAgICAtIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1
bGUpDQogICAgLSNlbmRpZiAvKiAhWVlERUJVRyAqLw0KICAgIC0NCiAgICAtDQogICAgLS8qIFlZ
SU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8NCiAg
ICAtI2lmbmRlZglZWUlOSVRERVBUSA0KICAgIC0jIGRlZmluZSBZWUlOSVRERVBUSCAyMDANCiAg
ICAtI2VuZGlmDQogICAgLQ0KICAgIC0vKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUg
c3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQ0KICAgIC0gICBpZiB0aGUgYnVpbHQt
aW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4NCiAgICAtDQogICAgLSAgIERvIG5v
dCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlm
DQogICAgLSAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQ
VEgpDQogICAgLSAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFy
aXRobWV0aWMuICAqLw0KICAgIC0NCiAgICAtI2lmbmRlZiBZWU1BWERFUFRIDQogICAgLSMgZGVm
aW5lIFlZTUFYREVQVEggMTAwMDANCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0NCiAgICAtI2lm
IFlZRVJST1JfVkVSQk9TRQ0KICAgIC0NCiAgICAtIyBpZm5kZWYgeXlzdHJsZW4NCiAgICAtIyAg
aWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gNCiAgICAtIyAgIGRlZmlu
ZSB5eXN0cmxlbiBzdHJsZW4NCiAgICAtIyAgZWxzZQ0KICAgIC0vKiBSZXR1cm4gdGhlIGxlbmd0
aCBvZiBZWVNUUi4gICovDQogICAgLSNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXA0KICAgIC0gICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5l
ZCBfTVNDX1ZFUikNCiAgICAtc3RhdGljIFlZU0laRV9UDQogICAgLXl5c3RybGVuIChjb25zdCBj
aGFyICp5eXN0cikNCiAgICAtI2Vsc2UNCiAgICAtc3RhdGljIFlZU0laRV9UDQogICAgLXl5c3Ry
bGVuICh5eXN0cikNCiAgICAtICAgIGNvbnN0IGNoYXIgKnl5c3RyOw0KICAgIC0jZW5kaWYNCiAg
ICAtew0KICAgIC0gIFlZU0laRV9UIHl5bGVuOw0KICAgIC0gIGZvciAoeXlsZW4gPSAwOyB5eXN0
clt5eWxlbl07IHl5bGVuKyspDQogICAgLSAgICBjb250aW51ZTsNCiAgICAtICByZXR1cm4geXls
ZW47DQogICAgLX0NCiAgICAtIyAgZW5kaWYNCiAgICAtIyBlbmRpZg0KICAgIC0NCiAgICAtIyBp
Zm5kZWYgeXlzdHBjcHkNCiAgICAtIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBf
U1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQ0KICAgIC0jICAgZGVmaW5lIHl5c3RwY3B5
IHN0cGNweQ0KICAgIC0jICBlbHNlDQogICAgLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1
cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4NCiAgICAtICAgWVlE
RVNULiAgKi8NCiAgICAtI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcDQogICAgLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0Nf
VkVSKQ0KICAgIC1zdGF0aWMgY2hhciAqDQogICAgLXl5c3RwY3B5IChjaGFyICp5eWRlc3QsIGNv
bnN0IGNoYXIgKnl5c3JjKQ0KICAgIC0jZWxzZQ0KICAgIC1zdGF0aWMgY2hhciAqDQogICAgLXl5
c3RwY3B5ICh5eWRlc3QsIHl5c3JjKQ0KICAgIC0gICAgY2hhciAqeXlkZXN0Ow0KICAgIC0gICAg
Y29uc3QgY2hhciAqeXlzcmM7DQogICAgLSNlbmRpZg0KICAgIC17DQogICAgLSAgY2hhciAqeXlk
ID0geXlkZXN0Ow0KICAgIC0gIGNvbnN0IGNoYXIgKnl5cyA9IHl5c3JjOw0KICAgIC0NCiAgICAt
ICB3aGlsZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykNCiAgICAtICAgIGNvbnRpbnVlOw0K
ICAgIC0NCiAgICAtICByZXR1cm4geXlkIC0gMTsNCiAgICAtfQ0KICAgIC0jICBlbmRpZg0KICAg
IC0jIGVuZGlmDQogICAgLQ0KICAgIC0jIGlmbmRlZiB5eXRuYW1lcnINCiAgICAtLyogQ29weSB0
byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkgdW5uZWNl
c3NhcnkNCiAgICAtICAgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcywgc28gdGhhdCBpdCdzIHN1aXRh
YmxlIGZvciB5eWVycm9yLiAgVGhlDQogICAgLSAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1x
dW90aW5nIGlzIHVubmVjZXNzYXJ5IHVubGVzcyB0aGUgc3RyaW5nDQogICAgLSAgIGNvbnRhaW5z
IGFuIGFwb3N0cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbg0KICAgIC0g
ICBiYWNrc2xhc2gtYmFja3NsYXNoKS4gIFlZU1RSIGlzIHRha2VuIGZyb20geXl0bmFtZS4gIElm
IFlZUkVTIGlzDQogICAgLSAgIG51bGwsIGRvIG5vdCBjb3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhl
IGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQNCiAgICAtICAgd291bGQgaGF2ZSBiZWVuLiAgKi8N
CiAgICAtc3RhdGljIFlZU0laRV9UDQogICAgLXl5dG5hbWVyciAoY2hhciAqeXlyZXMsIGNvbnN0
IGNoYXIgKnl5c3RyKQ0KICAgIC17DQogICAgLSAgaWYgKCp5eXN0ciA9PSAnIicpDQogICAgLSAg
ICB7DQogICAgLSAgICAgIFlZU0laRV9UIHl5biA9IDA7DQogICAgLSAgICAgIGNoYXIgY29uc3Qg
Knl5cCA9IHl5c3RyOw0KICAgIC0NCiAgICAtICAgICAgZm9yICg7OykNCiAgICAtCXN3aXRjaCAo
KisreXlwKQ0KICAgIC0JICB7DQogICAgLQkgIGNhc2UgJ1wnJzoNCiAgICAtCSAgY2FzZSAnLCc6
DQogICAgLQkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOw0KICAgIC0NCiAgICAtCSAgY2Fz
ZSAnXFwnOg0KICAgIC0JICAgIGlmICgqKyt5eXAgIT0gJ1xcJykNCiAgICAtCSAgICAgIGdvdG8g
ZG9fbm90X3N0cmlwX3F1b3RlczsNCiAgICAtCSAgICAvKiBGYWxsIHRocm91Z2guICAqLw0KICAg
IC0JICBkZWZhdWx0Og0KICAgIC0JICAgIGlmICh5eXJlcykNCiAgICAtCSAgICAgIHl5cmVzW3l5
bl0gPSAqeXlwOw0KICAgIC0JICAgIHl5bisrOw0KICAgIC0JICAgIGJyZWFrOw0KICAgIC0NCiAg
ICAtCSAgY2FzZSAnIic6DQogICAgLQkgICAgaWYgKHl5cmVzKQ0KICAgIC0JICAgICAgeXlyZXNb
eXluXSA9ICdcMCc7DQogICAgLQkgICAgcmV0dXJuIHl5bjsNCiAgICAtCSAgfQ0KICAgIC0gICAg
ZG9fbm90X3N0cmlwX3F1b3RlczogOw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICBpZiAoISB5
eXJlcykNCiAgICAtICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOw0KICAgIC0NCiAgICAtICBy
ZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsNCiAgICAtfQ0KICAgIC0jIGVu
ZGlmDQogICAgLQ0KICAgIC0vKiBDb3B5IGludG8gKllZTVNHLCB3aGljaCBpcyBvZiBzaXplICpZ
WU1TR19BTExPQywgYW4gZXJyb3IgbWVzc2FnZQ0KICAgIC0gICBhYm91dCB0aGUgdW5leHBlY3Rl
ZCB0b2tlbiBZWVRPS0VOIGZvciB0aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzDQogICAgLSAg
IFlZU1NQLg0KICAgIC0NCiAgICAtICAgUmV0dXJuIDAgaWYgKllZTVNHIHdhcyBzdWNjZXNzZnVs
bHkgd3JpdHRlbi4gIFJldHVybiAxIGlmICpZWU1TRyBpcw0KICAgIC0gICBub3QgbGFyZ2UgZW5v
dWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0DQogICAgLSAg
ICpZWU1TR19BTExPQyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJuIDIg
aWYgdGhlDQogICAgLSAgIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2UgdG8g
c3RvcmUuICAqLw0KICAgIC1zdGF0aWMgaW50DQogICAgLXl5c3ludGF4X2Vycm9yIChZWVNJWkVf
VCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywNCiAgICAtICAgICAgICAgICAgICAgIHl5dHlw
ZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQ0KICAgIC17DQogICAgLSAgWVlTSVpFX1QgeXlz
aXplMCA9IHl5dG5hbWVyciAoMCwgeXl0bmFtZVt5eXRva2VuXSk7DQogICAgLSAgWVlTSVpFX1Qg
eXlzaXplID0geXlzaXplMDsNCiAgICAtICBZWVNJWkVfVCB5eXNpemUxOw0KICAgIC0gIGVudW0g
eyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNID0gNSB9Ow0KICAgIC0gIC8qIEludGVybmF0
aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICovDQogICAgLSAgY29uc3QgY2hhciAqeXlmb3JtYXQg
PSAwOw0KICAgIC0gIC8qIEFyZ3VtZW50cyBvZiB5eWZvcm1hdC4gKi8NCiAgICAtICBjaGFyIGNv
bnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsNCiAgICAtICAvKiBOdW1i
ZXIgb2YgcmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9uZSBwZXIN
CiAgICAtICAgICAiZXhwZWN0ZWQiKS4gKi8NCiAgICAtICBpbnQgeXljb3VudCA9IDA7DQogICAg
LQ0KICAgIC0gIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRl
cjoNCiAgICAtICAgICAtIEFzc3VtZSBZWUZBSUwgaXMgbm90IHVzZWQuICBJdCdzIHRvbyBmbGF3
ZWQgdG8gY29uc2lkZXIuICBTZWUNCiAgICAtICAgICAgIDxodHRwOi8vbGlzdHMuZ251Lm9yZy9h
cmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTEyL21zZzAwMDI0Lmh0bWw+DQogICAgLSAg
ICAgICBmb3IgZGV0YWlscy4gIFlZRVJST1IgaXMgZmluZSBhcyBpdCBkb2VzIG5vdCBpbnZva2Ug
dGhpcw0KICAgIC0gICAgICAgZnVuY3Rpb24uDQogICAgLSAgICAgLSBJZiB0aGlzIHN0YXRlIGlz
IGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4NCiAgICAtICAg
ICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkIGlzIGlmIHRoZSBkZWZh
dWx0IGFjdGlvbg0KICAgIC0gICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNl
LCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQNCiAgICAtICAgICAgIHRva2VucyBiZWNhdXNlIHRo
ZXJlIGFyZSBub25lLg0KICAgIC0gICAgIC0gVGhlIG9ubHkgd2F5IHRoZXJlIGNhbiBiZSBubyBs
b29rYWhlYWQgcHJlc2VudCAoaW4geXljaGFyKSBpcyBpZg0KICAgIC0gICAgICAgdGhpcyBzdGF0
ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywNCiAg
ICAtICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNp
ZW50IHRvIGRldGVybWluZQ0KICAgIC0gICAgICAgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVk
IG9yIGV4cGVjdGVkIHRva2VuIHRvIHJlcG9ydC4gIEluIHRoYXQNCiAgICAtICAgICAgIGNhc2Us
IGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLg0KICAgIC0gICAgIC0gRG9uJ3Qg
YXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlz
IGENCiAgICAtICAgICAgIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAg
VGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGENCiAgICAtICAgICAgIHByZXZpb3VzIGluY29uc2lzdGVu
dCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgbm9uLWRlZmF1bHQNCiAgICAtICAgICAg
IGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZCB5eWNoYXIu
DQogICAgLSAgICAgLSBPZiBjb3Vyc2UsIHRoZSBleHBlY3RlZCB0b2tlbiBsaXN0IGRlcGVuZHMg
b24gc3RhdGVzIHRvIGhhdmUNCiAgICAtICAgICAgIGNvcnJlY3QgbG9va2FoZWFkIGluZm9ybWF0
aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdA0KICAgIC0gICAgICAgdG8gcGVy
Zm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhl
DQogICAgLSAgICAgICBzY2FubmVyIGFuZCBiZWZvcmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVycm9y
LiAgVGh1cywgc3RhdGUgbWVyZ2luZw0KICAgIC0gICAgICAgKGZyb20gTEFMUiBvciBJRUxSKSBh
bmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4cGVjdGVkDQogICAgLSAgICAgICB0
b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExS
IHdpdGgNCiAgICAtICAgICAgIG9uZSBleGNlcHRpb246IGl0IHdpbGwgc3RpbGwgY29udGFpbiBh
bnkgdG9rZW4gdGhhdCB3aWxsIG5vdCBiZQ0KICAgIC0gICAgICAgYWNjZXB0ZWQgZHVlIHRvIGFu
IGVycm9yIGFjdGlvbiBpbiBhIGxhdGVyIHN0YXRlLg0KICAgIC0gICovDQogICAgLSAgaWYgKHl5
dG9rZW4gIT0gWVlFTVBUWSkNCiAgICAtICAgIHsNCiAgICAtICAgICAgaW50IHl5biA9IHl5cGFj
dFsqeXlzc3BdOw0KICAgIC0gICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXRva2Vu
XTsNCiAgICAtICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkNCiAgICAt
ICAgICAgICB7DQogICAgLSAgICAgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2
ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluDQogICAgLSAgICAgICAgICAgICBZWUNIRUNL
LiAgSW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0IC1ZWU4gYWN0aW9ucyBmb3INCiAgICAt
ICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMu
ICAqLw0KICAgIC0gICAgICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOw0K
ICAgIC0gICAgICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQg
eXl0bmFtZS4gICovDQogICAgLSAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5
biArIDE7DQogICAgLSAgICAgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VO
UyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7DQogICAgLSAgICAgICAgICBpbnQgeXl4Ow0KICAg
IC0NCiAgICAtICAgICAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5
eXgpDQogICAgLSAgICAgICAgICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5
eCAhPSBZWVRFUlJPUg0KICAgIC0gICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNf
ZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpDQogICAgLSAgICAgICAgICAgICAgew0KICAgIC0g
ICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1V
TSkNCiAgICAtICAgICAgICAgICAgICAgICAgew0KICAgIC0gICAgICAgICAgICAgICAgICAgIHl5
Y291bnQgPSAxOw0KICAgIC0gICAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7DQog
ICAgLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgLSAgICAgICAgICAgICAgICAgIH0N
CiAgICAtICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07DQog
ICAgLSAgICAgICAgICAgICAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRu
YW1lW3l5eF0pOw0KICAgIC0gICAgICAgICAgICAgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eXNpemUx
DQogICAgLSAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9D
X01BWElNVU0pKQ0KICAgIC0gICAgICAgICAgICAgICAgICByZXR1cm4gMjsNCiAgICAtICAgICAg
ICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7DQogICAgLSAgICAgICAgICAgICAgfQ0KICAgIC0g
ICAgICAgIH0NCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgc3dpdGNoICh5eWNvdW50KQ0KICAg
IC0gICAgew0KICAgIC0jIGRlZmluZSBZWUNBU0VfKE4sIFMpICAgICAgICAgICAgICAgICAgICAg
IFwNCiAgICAtICAgICAgY2FzZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQog
ICAgLSAgICAgICAgeXlmb3JtYXQgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0g
ICAgICBicmVhaw0KICAgIC0gICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOw0K
ICAgIC0gICAgICBZWUNBU0VfKDEsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikp
Ow0KICAgIC0gICAgICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
LCBleHBlY3RpbmcgJXMiKSk7DQogICAgLSAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJy
b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsNCiAgICAtICAgICAgWVlD
QVNFXyg0LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9y
ICVzIG9yICVzIikpOw0KICAgIC0gICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1
bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7DQogICAgLSMg
dW5kZWYgWVlDQVNFXw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICB5eXNpemUxID0geXlzaXpl
ICsgeXlzdHJsZW4gKHl5Zm9ybWF0KTsNCiAgICAtICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEg
JiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQ0KICAgIC0gICAgcmV0dXJuIDI7
DQogICAgLSAgeXlzaXplID0geXlzaXplMTsNCiAgICAtDQogICAgLSAgaWYgKCp5eW1zZ19hbGxv
YyA8IHl5c2l6ZSkNCiAgICAtICAgIHsNCiAgICAtICAgICAgKnl5bXNnX2FsbG9jID0gMiAqIHl5
c2l6ZTsNCiAgICAtICAgICAgaWYgKCEgKHl5c2l6ZSA8PSAqeXltc2dfYWxsb2MNCiAgICAtICAg
ICAgICAgICAgICYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQ0KICAg
IC0gICAgICAgICp5eW1zZ19hbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsNCiAgICAtICAg
ICAgcmV0dXJuIDE7DQogICAgLSAgICB9DQogICAgLQ0KICAgIC0gIC8qIEF2b2lkIHNwcmludGYs
IGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4NCiAgICAtICAgICBE
b24ndCBoYXZlIHVuZGVmaW5lZCBiZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbg0KICAg
IC0gICAgIHByb2R1Y2VkIGEgc3RyaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiAiJXMicy4g
ICovDQogICAgLSAgew0KICAgIC0gICAgY2hhciAqeXlwID0gKnl5bXNnOw0KICAgIC0gICAgaW50
IHl5aSA9IDA7DQogICAgLSAgICB3aGlsZSAoKCp5eXAgPSAqeXlmb3JtYXQpICE9ICdcMCcpDQog
ICAgLSAgICAgIGlmICgqeXlwID09ICclJyAmJiB5eWZvcm1hdFsxXSA9PSAncycgJiYgeXlpIDwg
eXljb3VudCkNCiAgICAtICAgICAgICB7DQogICAgLSAgICAgICAgICB5eXAgKz0geXl0bmFtZXJy
ICh5eXAsIHl5YXJnW3l5aSsrXSk7DQogICAgLSAgICAgICAgICB5eWZvcm1hdCArPSAyOw0KICAg
IC0gICAgICAgIH0NCiAgICAtICAgICAgZWxzZQ0KICAgIC0gICAgICAgIHsNCiAgICAtICAgICAg
ICAgIHl5cCsrOw0KICAgIC0gICAgICAgICAgeXlmb3JtYXQrKzsNCiAgICAtICAgICAgICB9DQog
ICAgLSAgfQ0KICAgIC0gIHJldHVybiAwOw0KICAgIC19DQogICAgLSNlbmRpZiAvKiBZWUVSUk9S
X1ZFUkJPU0UgKi8NCiAgICAtDQogICAgLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uDQogICAgLXwgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0ZWQg
dG8gdGhpcyBzeW1ib2wuICB8DQogICAgLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSovDQogICAgLQ0KICAgIC0vKkFSR1NVU0VEKi8NCiAgICAtI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcDQogICAgLSAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQ0KICAgIC1zdGF0aWMgdm9p
ZA0KICAgIC15eWRlc3RydWN0IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQ
RSAqeXl2YWx1ZXApDQogICAgLSNlbHNlDQogICAgLXN0YXRpYyB2b2lkDQogICAgLXl5ZGVzdHJ1
Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwKQ0KICAgIC0gICAgY29uc3QgY2hhciAqeXltc2c7
DQogICAgLSAgICBpbnQgeXl0eXBlOw0KICAgIC0gICAgWVlTVFlQRSAqeXl2YWx1ZXA7DQogICAg
LSNlbmRpZg0KICAgIC17DQogICAgLSAgWVlVU0UgKHl5dmFsdWVwKTsNCiAgICAtDQogICAgLSAg
aWYgKCF5eW1zZykNCiAgICAtICAgIHl5bXNnID0gIkRlbGV0aW5nIjsNCiAgICAtICBZWV9TWU1C
T0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7DQogICAgLQ0K
ICAgIC0gIHN3aXRjaCAoeXl0eXBlKQ0KICAgIC0gICAgew0KICAgIC0gICAgICBjYXNlIDUzOiAv
KiAiY2hvaWNlX2VudHJ5IiAqLw0KICAgIC0NCiAgICAtCXsNCiAgICAtCWZwcmludGYoc3RkZXJy
LCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwNCiAgICAt
CQkoeXl2YWx1ZXAtPm1lbnUpLT5maWxlLT5uYW1lLCAoeXl2YWx1ZXAtPm1lbnUpLT5saW5lbm8p
Ow0KICAgIC0JaWYgKGN1cnJlbnRfbWVudSA9PSAoeXl2YWx1ZXAtPm1lbnUpKQ0KICAgIC0JCW1l
bnVfZW5kX21lbnUoKTsNCiAgICAtfTsNCiAgICAtDQogICAgLQlicmVhazsNCiAgICAtICAgICAg
Y2FzZSA1OTogLyogImlmX2VudHJ5IiAqLw0KICAgIC0NCiAgICAtCXsNCiAgICAtCWZwcmludGYo
c3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwN
CiAgICAtCQkoeXl2YWx1ZXAtPm1lbnUpLT5maWxlLT5uYW1lLCAoeXl2YWx1ZXAtPm1lbnUpLT5s
aW5lbm8pOw0KICAgIC0JaWYgKGN1cnJlbnRfbWVudSA9PSAoeXl2YWx1ZXAtPm1lbnUpKQ0KICAg
IC0JCW1lbnVfZW5kX21lbnUoKTsNCiAgICAtfTsNCiAgICAtDQogICAgLQlicmVhazsNCiAgICAt
ICAgICAgY2FzZSA2NTogLyogIm1lbnVfZW50cnkiICovDQogICAgLQ0KICAgIC0Jew0KICAgIC0J
ZnByaW50ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVu
dHJ5XG4iLA0KICAgIC0JCSh5eXZhbHVlcC0+bWVudSktPmZpbGUtPm5hbWUsICh5eXZhbHVlcC0+
bWVudSktPmxpbmVubyk7DQogICAgLQlpZiAoY3VycmVudF9tZW51ID09ICh5eXZhbHVlcC0+bWVu
dSkpDQogICAgLQkJbWVudV9lbmRfbWVudSgpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtCWJyZWFr
Ow0KICAgIC0NCiAgICAtICAgICAgZGVmYXVsdDoNCiAgICAtCWJyZWFrOw0KICAgIC0gICAgfQ0K
ICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogUHJldmVudCB3YXJuaW5ncyBmcm9tIC1XbWlz
c2luZy1wcm90b3R5cGVzLiAgKi8NCiAgICAtI2lmZGVmIFlZUEFSU0VfUEFSQU0NCiAgICAtI2lm
IGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX2NwbHVzcGx1cw0KICAgIC1pbnQgeXlwYXJz
ZSAodm9pZCAqWVlQQVJTRV9QQVJBTSk7DQogICAgLSNlbHNlDQogICAgLWludCB5eXBhcnNlICgp
Ow0KICAgIC0jZW5kaWYNCiAgICAtI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovDQogICAgLSNp
ZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMNCiAgICAtaW50IHl5cGFy
c2UgKHZvaWQpOw0KICAgIC0jZWxzZQ0KICAgIC1pbnQgeXlwYXJzZSAoKTsNCiAgICAtI2VuZGlm
DQogICAgLSNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0gKi8NCiAgICAtDQogICAgLQ0KICAgIC0v
KiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovDQogICAgLWludCB5eWNoYXI7DQogICAgLQ0KICAg
IC0vKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLw0KICAg
IC1ZWVNUWVBFIHl5bHZhbDsNCiAgICAtDQogICAgLS8qIE51bWJlciBvZiBzeW50YXggZXJyb3Jz
IHNvIGZhci4gICovDQogICAgLWludCB5eW5lcnJzOw0KICAgIC0NCiAgICAtDQogICAgLS8qLS0t
LS0tLS0tLS4NCiAgICAtfCB5eXBhcnNlLiAgfA0KICAgIC1gLS0tLS0tLS0tLSovDQogICAgLQ0K
ICAgIC0jaWZkZWYgWVlQQVJTRV9QQVJBTQ0KICAgIC0jaWYgKGRlZmluZWQgX19TVERDX18gfHwg
ZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwNCiAgICAtICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpDQogICAgLWludA0KICAgIC15eXBhcnNlICh2b2lkICpZWVBB
UlNFX1BBUkFNKQ0KICAgIC0jZWxzZQ0KICAgIC1pbnQNCiAgICAteXlwYXJzZSAoWVlQQVJTRV9Q
QVJBTSkNCiAgICAtICAgIHZvaWQgKllZUEFSU0VfUEFSQU07DQogICAgLSNlbmRpZg0KICAgIC0j
ZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8NCiAgICAtI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8
IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcDQogICAgLSAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1
cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQ0KICAgIC1pbnQNCiAgICAteXlwYXJzZSAodm9pZCkNCiAg
ICAtI2Vsc2UNCiAgICAtaW50DQogICAgLXl5cGFyc2UgKCkNCiAgICAtDQogICAgLSNlbmRpZg0K
ICAgIC0jZW5kaWYNCiAgICAtew0KICAgIC0gICAgaW50IHl5c3RhdGU7DQogICAgLSAgICAvKiBO
dW1iZXIgb2YgdG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAg
Ki8NCiAgICAtICAgIGludCB5eWVycnN0YXR1czsNCiAgICAtDQogICAgLSAgICAvKiBUaGUgc3Rh
Y2tzIGFuZCB0aGVpciB0b29sczoNCiAgICAtICAgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0
ZXMuDQogICAgLSAgICAgICBgeXl2cyc6IHJlbGF0ZWQgdG8gc2VtYW50aWMgdmFsdWVzLg0KICAg
IC0NCiAgICAtICAgICAgIFJlZmVyIHRvIHRoZSBzdGFja3MgdGhydSBzZXBhcmF0ZSBwb2ludGVy
cywgdG8gYWxsb3cgeXlvdmVyZmxvdw0KICAgIC0gICAgICAgdG8gcmVhbGxvY2F0ZSB0aGVtIGVs
c2V3aGVyZS4gICovDQogICAgLQ0KICAgIC0gICAgLyogVGhlIHN0YXRlIHN0YWNrLiAgKi8NCiAg
ICAtICAgIHl5dHlwZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07DQogICAgLSAgICB5eXR5cGVf
aW50MTYgKnl5c3M7DQogICAgLSAgICB5eXR5cGVfaW50MTYgKnl5c3NwOw0KICAgIC0NCiAgICAt
ICAgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFjay4gICovDQogICAgLSAgICBZWVNUWVBFIHl5
dnNhW1lZSU5JVERFUFRIXTsNCiAgICAtICAgIFlZU1RZUEUgKnl5dnM7DQogICAgLSAgICBZWVNU
WVBFICp5eXZzcDsNCiAgICAtDQogICAgLSAgICBZWVNJWkVfVCB5eXN0YWNrc2l6ZTsNCiAgICAt
DQogICAgLSAgaW50IHl5bjsNCiAgICAtICBpbnQgeXlyZXN1bHQ7DQogICAgLSAgLyogTG9va2Fo
ZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFuc2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLw0K
ICAgIC0gIGludCB5eXRva2VuOw0KICAgIC0gIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1
cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlDQogICAgLSAgICAgYWN0aW9u
IHJvdXRpbmVzLiAgKi8NCiAgICAtICBZWVNUWVBFIHl5dmFsOw0KICAgIC0NCiAgICAtI2lmIFlZ
RVJST1JfVkVSQk9TRQ0KICAgIC0gIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBp
dHMgYWxsb2NhdGVkIHNpemUuICAqLw0KICAgIC0gIGNoYXIgeXltc2didWZbMTI4XTsNCiAgICAt
ICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOw0KICAgIC0gIFlZU0laRV9UIHl5bXNnX2FsbG9jID0g
c2l6ZW9mIHl5bXNnYnVmOw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNkZWZpbmUgWVlQT1BT
VEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkNCiAgICAtDQogICAgLSAgLyog
VGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4NCiAg
ICAtICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICov
DQogICAgLSAgaW50IHl5bGVuID0gMDsNCiAgICAtDQogICAgLSAgeXl0b2tlbiA9IDA7DQogICAg
LSAgeXlzcyA9IHl5c3NhOw0KICAgIC0gIHl5dnMgPSB5eXZzYTsNCiAgICAtICB5eXN0YWNrc2l6
ZSA9IFlZSU5JVERFUFRIOw0KICAgIC0NCiAgICAtICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFy
dGluZyBwYXJzZVxuIikpOw0KICAgIC0NCiAgICAtICB5eXN0YXRlID0gMDsNCiAgICAtICB5eWVy
cnN0YXR1cyA9IDA7DQogICAgLSAgeXluZXJycyA9IDA7DQogICAgLSAgeXljaGFyID0gWVlFTVBU
WTsgLyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8NCiAgICAtDQogICAgLSAgLyogSW5p
dGlhbGl6ZSBzdGFjayBwb2ludGVycy4NCiAgICAtICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2
YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sNCiAgICAtICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0
aGUgc2FtZSBsZXZlbCBhcyB0aGUgc3RhdGUgc3RhY2suDQogICAgLSAgICAgVGhlIHdhc3RlZCBl
bGVtZW50cyBhcmUgbmV2ZXIgaW5pdGlhbGl6ZWQuICAqLw0KICAgIC0gIHl5c3NwID0geXlzczsN
CiAgICAtICB5eXZzcCA9IHl5dnM7DQogICAgLQ0KICAgIC0gIGdvdG8geXlzZXRzdGF0ZTsNCiAg
ICAtDQogICAgLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLg0KICAgIC18IHl5bmV3c3RhdGUgLS0gUHVzaCBhIG5ldyBzdGF0ZSwg
d2hpY2ggaXMgZm91bmQgaW4geXlzdGF0ZS4gIHwNCiAgICAtYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgLSB5eW5ld3N0
YXRlOg0KICAgIC0gIC8qIEluIGFsbCBjYXNlcywgd2hlbiB5b3UgZ2V0IGhlcmUsIHRoZSB2YWx1
ZSBhbmQgbG9jYXRpb24gc3RhY2tzDQogICAgLSAgICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAg
U28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMgdGhlIHN0YWNrcy4gICovDQogICAgLSAgeXlz
c3ArKzsNCiAgICAtDQogICAgLSB5eXNldHN0YXRlOg0KICAgIC0gICp5eXNzcCA9IHl5c3RhdGU7
DQogICAgLQ0KICAgIC0gIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQ0KICAg
IC0gICAgew0KICAgIC0gICAgICAvKiBHZXQgdGhlIGN1cnJlbnQgdXNlZCBzaXplIG9mIHRoZSB0
aHJlZSBzdGFja3MsIGluIGVsZW1lbnRzLiAgKi8NCiAgICAtICAgICAgWVlTSVpFX1QgeXlzaXpl
ID0geXlzc3AgLSB5eXNzICsgMTsNCiAgICAtDQogICAgLSNpZmRlZiB5eW92ZXJmbG93DQogICAg
LSAgICAgIHsNCiAgICAtCS8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBz
dGFjay4gIFVzZSBjb3BpZXMgb2YNCiAgICAtCSAgIHRoZXNlIHNvIHRoYXQgdGhlICYncyBkb24n
dCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8NCiAgICAtCSAgIG1lbW9yeS4gICovDQogICAgLQlZ
WVNUWVBFICp5eXZzMSA9IHl5dnM7DQogICAgLQl5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsN
CiAgICAtDQogICAgLQkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBi
eSB0aGUgc2l6ZSBvZiB0aGUNCiAgICAtCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGlu
IGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGENCiAgICAtCSAgIGNvbmRpdGlvbmFsIGFyb3VuZCBq
dXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQNCiAgICAtCSAgIGJlIHVuZGVm
aW5lZCBpZiB5eW92ZXJmbG93IGlzIGEgbWFjcm8uICAqLw0KICAgIC0JeXlvdmVyZmxvdyAoWVlf
KCJtZW1vcnkgZXhoYXVzdGVkIiksDQogICAgLQkJICAgICZ5eXNzMSwgeXlzaXplICogc2l6ZW9m
ICgqeXlzc3ApLA0KICAgIC0JCSAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwN
CiAgICAtCQkgICAgJnl5c3RhY2tzaXplKTsNCiAgICAtDQogICAgLQl5eXNzID0geXlzczE7DQog
ICAgLQl5eXZzID0geXl2czE7DQogICAgLSAgICAgIH0NCiAgICAtI2Vsc2UgLyogbm8geXlvdmVy
ZmxvdyAqLw0KICAgIC0jIGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFDQogICAgLSAgICAgIGdvdG8g
eXlleGhhdXN0ZWRsYWI7DQogICAgLSMgZWxzZQ0KICAgIC0gICAgICAvKiBFeHRlbmQgdGhlIHN0
YWNrIG91ciBvd24gd2F5LiAgKi8NCiAgICAtICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFj
a3NpemUpDQogICAgLQlnb3RvIHl5ZXhoYXVzdGVkbGFiOw0KICAgIC0gICAgICB5eXN0YWNrc2l6
ZSAqPSAyOw0KICAgIC0gICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQ0KICAgIC0J
eXlzdGFja3NpemUgPSBZWU1BWERFUFRIOw0KICAgIC0NCiAgICAtICAgICAgew0KICAgIC0JeXl0
eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7DQogICAgLQl1bmlvbiB5eWFsbG9jICp5eXB0ciA9DQog
ICAgLQkgICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5
c3RhY2tzaXplKSk7DQogICAgLQlpZiAoISB5eXB0cikNCiAgICAtCSAgZ290byB5eWV4aGF1c3Rl
ZGxhYjsNCiAgICAtCVlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2MsIHl5c3MpOw0KICAgIC0J
WVlTVEFDS19SRUxPQ0FURSAoeXl2c19hbGxvYywgeXl2cyk7DQogICAgLSMgIHVuZGVmIFlZU1RB
Q0tfUkVMT0NBVEUNCiAgICAtCWlmICh5eXNzMSAhPSB5eXNzYSkNCiAgICAtCSAgWVlTVEFDS19G
UkVFICh5eXNzMSk7DQogICAgLSAgICAgIH0NCiAgICAtIyBlbmRpZg0KICAgIC0jZW5kaWYgLyog
bm8geXlvdmVyZmxvdyAqLw0KICAgIC0NCiAgICAtICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXpl
IC0gMTsNCiAgICAtICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXplIC0gMTsNCiAgICAtDQogICAg
LSAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxu
IiwNCiAgICAtCQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsNCiAgICAtDQog
ICAgLSAgICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQ0KICAgIC0JWVlB
Qk9SVDsNCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50
ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsNCiAgICAtDQogICAgLSAgaWYgKHl5c3RhdGUg
PT0gWVlGSU5BTCkNCiAgICAtICAgIFlZQUNDRVBUOw0KICAgIC0NCiAgICAtICBnb3RvIHl5YmFj
a3VwOw0KICAgIC0NCiAgICAtLyotLS0tLS0tLS0tLS4NCiAgICAtfCB5eWJhY2t1cC4gIHwNCiAg
ICAtYC0tLS0tLS0tLS0tKi8NCiAgICAteXliYWNrdXA6DQogICAgLQ0KICAgIC0gIC8qIERvIGFw
cHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGENCiAg
ICAtICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkg
aGF2ZSBvbmUuICAqLw0KICAgIC0NCiAgICAtICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQg
dG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8NCiAgICAtICB5
eW4gPSB5eXBhY3RbeXlzdGF0ZV07DQogICAgLSAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0
ICh5eW4pKQ0KICAgIC0gICAgZ290byB5eWRlZmF1bHQ7DQogICAgLQ0KICAgIC0gIC8qIE5vdCBr
bm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4g
ICovDQogICAgLQ0KICAgIC0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBv
ciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLw0KICAgIC0gIGlmICh5eWNoYXIgPT0gWVlF
TVBUWSkNCiAgICAtICAgIHsNCiAgICAtICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGlu
ZyBhIHRva2VuOiAiKSk7DQogICAgLSAgICAgIHl5Y2hhciA9IFlZTEVYOw0KICAgIC0gICAgfQ0K
ICAgIC0NCiAgICAtICBpZiAoeXljaGFyIDw9IFlZRU9GKQ0KICAgIC0gICAgew0KICAgIC0gICAg
ICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7DQogICAgLSAgICAgIFlZRFBSSU5URiAoKHN0ZGVy
ciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7DQogICAgLSAgICB9DQogICAgLSAgZWxzZQ0K
ICAgIC0gICAgew0KICAgIC0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7DQog
ICAgLSAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAmeXls
dmFsLCAmeXlsbG9jKTsNCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgLyogSWYgdGhlIHByb3Bl
ciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvDQogICAg
LSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8NCiAgICAtICB5eW4g
Kz0geXl0b2tlbjsNCiAgICAtICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVj
a1t5eW5dICE9IHl5dG9rZW4pDQogICAgLSAgICBnb3RvIHl5ZGVmYXVsdDsNCiAgICAtICB5eW4g
PSB5eXRhYmxlW3l5bl07DQogICAgLSAgaWYgKHl5biA8PSAwKQ0KICAgIC0gICAgew0KICAgIC0g
ICAgICBpZiAoeXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXluKSkNCiAgICAtICAgICAgICBnb3Rv
IHl5ZXJybGFiOw0KICAgIC0gICAgICB5eW4gPSAteXluOw0KICAgIC0gICAgICBnb3RvIHl5cmVk
dWNlOw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICAvKiBDb3VudCB0b2tlbnMgc2hpZnRlZCBz
aW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yDQogICAgLSAgICAgc3RhdHVz
LiAgKi8NCiAgICAtICBpZiAoeXllcnJzdGF0dXMpDQogICAgLSAgICB5eWVycnN0YXR1cy0tOw0K
ICAgIC0NCiAgICAtICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8NCiAgICAtICBZ
WV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MpOw0K
ICAgIC0NCiAgICAtICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8NCiAgICAtICB5
eWNoYXIgPSBZWUVNUFRZOw0KICAgIC0NCiAgICAtICB5eXN0YXRlID0geXluOw0KICAgIC0gICor
K3l5dnNwID0geXlsdmFsOw0KICAgIC0NCiAgICAtICBnb3RvIHl5bmV3c3RhdGU7DQogICAgLQ0K
ICAgIC0NCiAgICAtLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4NCiAgICAtfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0
aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwNCiAgICAtYC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAteXlkZWZhdWx0
Og0KICAgIC0gIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOw0KICAgIC0gIGlmICh5eW4gPT0gMCkN
CiAgICAtICAgIGdvdG8geXllcnJsYWI7DQogICAgLSAgZ290byB5eXJlZHVjZTsNCiAgICAtDQog
ICAgLQ0KICAgIC0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgIC18IHl5cmVk
dWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfA0KICAgIC1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLw0KICAgIC15eXJlZHVjZToNCiAgICAtICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBh
IHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLw0KICAgIC0gIHl5bGVuID0geXlyMlt5eW5dOw0KICAg
IC0NCiAgICAtICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQg
dmFsdWUgb2YgdGhlIGFjdGlvbjoNCiAgICAtICAgICBgJCQgPSAkMScuDQogICAgLQ0KICAgIC0g
ICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4N
CiAgICAtICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24NCiAgICAt
ICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTA0K
ICAgIC0gICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIs
IGFuZCBpdCBhdm9pZHMgYQ0KICAgIC0gICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJl
IHVzZWQgdW5pbml0aWFsaXplZC4gICovDQogICAgLSAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsN
CiAgICAtDQogICAgLQ0KICAgIC0gIFlZX1JFRFVDRV9QUklOVCAoeXluKTsNCiAgICAtICBzd2l0
Y2ggKHl5bikNCiAgICAtICAgIHsNCiAgICAtICAgICAgICBjYXNlIDEwOg0KICAgIC0NCiAgICAt
ICAgIHsgemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgZW5kIHN0YXRlbWVudCIpOyB9DQogICAgLSAg
ICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMToNCiAgICAtDQogICAgLSAgICB7IHpjb25m
X2Vycm9yKCJ1bmtub3duIHN0YXRlbWVudCBcIiVzXCIiLCAoeXl2c3BbKDIpIC0gKDQpXS5zdHJp
bmcpKTsgfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTI6DQogICAgLQ0K
ICAgIC0gICAgew0KICAgIC0JemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgb3B0aW9uIFwiJXNcIiIs
IGtjb25mX2lkX3N0cmluZ3MgKyAoeXl2c3BbKDIpIC0gKDQpXS5pZCktPm5hbWUpOw0KICAgIC19
DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMzoNCiAgICAtDQogICAgLSAg
ICB7IHpjb25mX2Vycm9yKCJpbnZhbGlkIHN0YXRlbWVudCIpOyB9DQogICAgLSAgICBicmVhazsN
CiAgICAtDQogICAgLSAgY2FzZSAyODoNCiAgICAtDQogICAgLSAgICB7IHpjb25mX2Vycm9yKCJ1
bmtub3duIG9wdGlvbiBcIiVzXCIiLCAoeXl2c3BbKDEpIC0gKDMpXS5zdHJpbmcpKTsgfQ0KICAg
IC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMjk6DQogICAgLQ0KICAgIC0gICAgeyB6
Y29uZl9lcnJvcigiaW52YWxpZCBvcHRpb24iKTsgfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0K
ICAgIC0gIGNhc2UgMzA6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0Jc3RydWN0IHN5bWJvbCAq
c3ltID0gc3ltX2xvb2t1cCgoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCAwKTsNCiAgICAtCXN5
bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOw0KICAgIC0JbWVudV9hZGRfZW50cnkoc3ltKTsN
CiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbmZpZyAlc1xuIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSk7DQogICAg
LX0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDMxOg0KICAgIC0NCiAgICAt
ICAgIHsNCiAgICAtCW1lbnVfZW5kX2VudHJ5KCk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0K
ICAgIC19DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAzMjoNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKCh5eXZzcFso
MikgLSAoMyldLnN0cmluZyksIDApOw0KICAgIC0Jc3ltLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9O
QUw7DQogICAgLQltZW51X2FkZF9lbnRyeShzeW0pOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6bWVudWNvbmZpZyAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSwgKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSk7DQogICAgLX0NCiAgICAtICAgIGJyZWFrOw0K
ICAgIC0NCiAgICAtICBjYXNlIDMzOg0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCWlmIChjdXJy
ZW50X2VudHJ5LT5wcm9tcHQpDQogICAgLQkJY3VycmVudF9lbnRyeS0+cHJvbXB0LT50eXBlID0g
UF9NRU5VOw0KICAgIC0JZWxzZQ0KICAgIC0JCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25m
aWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7DQogICAgLQltZW51X2VuZF9lbnRyeSgpOw0K
ICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0K
ICAgIC0gIGNhc2UgNDE6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0JbWVudV9zZXRfdHlwZSgo
eXl2c3BbKDEpIC0gKDMpXS5pZCktPnN0eXBlKTsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwg
IiVzOiVkOnR5cGUoJXUpXG4iLA0KICAgIC0JCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCksDQogICAgLQkJKHl5dnNwWygxKSAtICgzKV0uaWQpLT5zdHlwZSk7DQogICAgLX0NCiAgICAt
ICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDQyOg0KICAgIC0NCiAgICAtICAgIHsNCiAg
ICAtCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWygyKSAtICg0KV0uc3RyaW5nKSwg
KHl5dnNwWygzKSAtICg0KV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfQ0K
ICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNDM6DQogICAgLQ0KICAgIC0gICAg
ew0KICAgIC0JbWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICh5eXZzcFsoMikgLSAoNCldLmV4cHIp
LCAoeXl2c3BbKDMpIC0gKDQpXS5leHByKSk7DQogICAgLQlpZiAoKHl5dnNwWygxKSAtICg0KV0u
aWQpLT5zdHlwZSAhPSBTX1VOS05PV04pDQogICAgLQkJbWVudV9zZXRfdHlwZSgoeXl2c3BbKDEp
IC0gKDQpXS5pZCktPnN0eXBlKTsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRl
ZmF1bHQoJXUpXG4iLA0KICAgIC0JCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksDQog
ICAgLQkJKHl5dnNwWygxKSAtICg0KV0uaWQpLT5zdHlwZSk7DQogICAgLX0NCiAgICAtICAgIGJy
ZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDQ0Og0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCW1l
bnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgc3ltX2xvb2t1cCgoeXl2c3BbKDIpIC0gKDQpXS5zdHJp
bmcpLCAwKSwgKHl5dnNwWygzKSAtICg0KV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6c2VsZWN0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsN
CiAgICAtfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNDU6DQogICAgLQ0K
ICAgIC0gICAgew0KICAgIC0JbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAo
RV9SQU5HRSwoeXl2c3BbKDIpIC0gKDUpXS5zeW1ib2wpLCAoeXl2c3BbKDMpIC0gKDUpXS5zeW1i
b2wpKSwgKHl5dnNwWyg0KSAtICg1KV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6cmFuZ2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAg
IC19DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA0ODoNCiAgICAtDQogICAg
LSAgICB7DQogICAgLQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3Vw
KCh5eXZzcFsoMikgLSAoMyldLnN0cmluZyksIHN0cmxlbigoeXl2c3BbKDIpIC0gKDMpXS5zdHJp
bmcpKSk7DQogICAgLQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfT1BUSU9OKQ0KICAgIC0JCW1l
bnVfYWRkX29wdGlvbihpZC0+dG9rZW4sICh5eXZzcFsoMykgLSAoMyldLnN0cmluZykpOw0KICAg
IC0JZWxzZQ0KICAgIC0JCXpjb25mcHJpbnQoIndhcm5pbmc6IGlnbm9yaW5nIHVua25vd24gb3B0
aW9uICVzIiwgKHl5dnNwWygyKSAtICgzKV0uc3RyaW5nKSk7DQogICAgLQlmcmVlKCh5eXZzcFso
MikgLSAoMyldLnN0cmluZykpOw0KICAgIC19DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAg
LSAgY2FzZSA0OToNCiAgICAtDQogICAgLSAgICB7ICh5eXZhbC5zdHJpbmcpID0gTlVMTDsgfQ0K
ICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNTA6DQogICAgLQ0KICAgIC0gICAg
eyAoeXl2YWwuc3RyaW5nKSA9ICh5eXZzcFsoMikgLSAoMildLnN0cmluZyk7IH0NCiAgICAtICAg
IGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDUxOg0KICAgIC0NCiAgICAtICAgIHsNCiAgICAt
CXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoKHl5dnNwWygyKSAtICgzKV0uc3RyaW5n
KSwgU1lNQk9MX0NIT0lDRSk7DQogICAgLQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9BVVRPOw0KICAg
IC0JbWVudV9hZGRfZW50cnkoc3ltKTsNCiAgICAtCW1lbnVfYWRkX2V4cHIoUF9DSE9JQ0UsIE5V
TEwsIE5VTEwpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y2hvaWNlXG4iLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfQ0KICAgIC0gICAgYnJlYWs7
DQogICAgLQ0KICAgIC0gIGNhc2UgNTI6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0JKHl5dmFs
Lm1lbnUpID0gbWVudV9hZGRfbWVudSgpOw0KICAgIC19DQogICAgLSAgICBicmVhazsNCiAgICAt
DQogICAgLSAgY2FzZSA1MzoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQlpZiAoemNvbmZfZW5k
dG9rZW4oKHl5dnNwWygxKSAtICgxKV0uaWQpLCBUX0NIT0lDRSwgVF9FTkRDSE9JQ0UpKSB7DQog
ICAgLQkJbWVudV9lbmRfbWVudSgpOw0KICAgIC0JCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk
OmVuZGNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLQl9
DQogICAgLX0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDYxOg0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWygyKSAt
ICg0KV0uc3RyaW5nKSwgKHl5dnNwWygzKSAtICg0KV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICAtfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNjI6DQog
ICAgLQ0KICAgIC0gICAgew0KICAgIC0JaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlkKS0+c3R5cGUg
PT0gU19CT09MRUFOIHx8ICh5eXZzcFsoMSkgLSAoMyldLmlkKS0+c3R5cGUgPT0gU19UUklTVEFU
RSkgew0KICAgIC0JCW1lbnVfc2V0X3R5cGUoKHl5dnNwWygxKSAtICgzKV0uaWQpLT5zdHlwZSk7
DQogICAgLQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsDQogICAgLQkJ
CXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksDQogICAgLQkJCSh5eXZzcFsoMSkgLSAo
MyldLmlkKS0+c3R5cGUpOw0KICAgIC0JfSBlbHNlDQogICAgLQkJWVlFUlJPUjsNCiAgICAtfQ0K
ICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNjM6DQogICAgLQ0KICAgIC0gICAg
ew0KICAgIC0JY3VycmVudF9lbnRyeS0+c3ltLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7DQog
ICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpvcHRpb25hbFxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLX0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAg
ICAtICBjYXNlIDY0Og0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCWlmICgoeXl2c3BbKDEpIC0g
KDQpXS5pZCktPnN0eXBlID09IFNfVU5LTk9XTikgew0KICAgIC0JCW1lbnVfYWRkX3N5bWJvbChQ
X0RFRkFVTFQsIHN5bV9sb29rdXAoKHl5dnNwWygyKSAtICg0KV0uc3RyaW5nKSwgMCksICh5eXZz
cFsoMykgLSAoNCldLmV4cHIpKTsNCiAgICAtCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpk
ZWZhdWx0XG4iLA0KICAgIC0JCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAg
ICAtCX0gZWxzZQ0KICAgIC0JCVlZRVJST1I7DQogICAgLX0NCiAgICAtICAgIGJyZWFrOw0KICAg
IC0NCiAgICAtICBjYXNlIDY3Og0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsN
CiAgICAtCW1lbnVfYWRkX2VudHJ5KE5VTEwpOw0KICAgIC0JbWVudV9hZGRfZGVwKCh5eXZzcFso
MikgLSAoMyldLmV4cHIpKTsNCiAgICAtCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsN
CiAgICAtfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNjg6DQogICAgLQ0K
ICAgIC0gICAgew0KICAgIC0JaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFsoMSkgLSAoMSldLmlk
KSwgVF9JRiwgVF9FTkRJRikpIHsNCiAgICAtCQltZW51X2VuZF9tZW51KCk7DQogICAgLQkJcHJp
bnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kaWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZf
bGluZW5vKCkpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAg
LSAgY2FzZSA3NDoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQltZW51X2FkZF9wcm9tcHQoUF9N
RU5VLCAoeXl2c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCBOVUxMKTsNCiAgICAtfQ0KICAgIC0gICAg
YnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNzU6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0J
bWVudV9hZGRfZW50cnkoTlVMTCk7DQogICAgLQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAoeXl2
c3BbKDIpIC0gKDMpXS5zdHJpbmcpLCBOVUxMKTsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwg
IiVzOiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19
DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA3NjoNCiAgICAtDQogICAgLSAg
ICB7DQogICAgLQkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9tZW51KCk7DQogICAgLX0NCiAgICAt
ICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDc3Og0KICAgIC0NCiAgICAtICAgIHsNCiAg
ICAtCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2c3BbKDEpIC0gKDEpXS5pZCksIFRfTUVOVSwgVF9F
TkRNRU5VKSkgew0KICAgIC0JCW1lbnVfZW5kX21lbnUoKTsNCiAgICAtCQlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDplbmRtZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2Ug
ODM6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6
c291cmNlICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbKDIp
IC0gKDMpXS5zdHJpbmcpKTsNCiAgICAtCXpjb25mX25leHRmaWxlKCh5eXZzcFsoMikgLSAoMyld
LnN0cmluZykpOw0KICAgIC19DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA4
NDoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQltZW51X2FkZF9lbnRyeShOVUxMKTsNCiAgICAt
CW1lbnVfYWRkX3Byb21wdChQX0NPTU1FTlQsICh5eXZzcFsoMikgLSAoMyldLnN0cmluZyksIE5V
TEwpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29tbWVudFxuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLX0NCiAgICAtICAgIGJyZWFrOw0KICAg
IC0NCiAgICAtICBjYXNlIDg1Og0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCW1lbnVfZW5kX2Vu
dHJ5KCk7DQogICAgLX0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDg2Og0K
ICAgIC0NCiAgICAtICAgIHsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmhlbHBc
biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JemNvbmZfc3RhcnRo
ZWxwKCk7DQogICAgLX0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDg3Og0K
ICAgIC0NCiAgICAtICAgIHsNCiAgICAtCWN1cnJlbnRfZW50cnktPmhlbHAgPSAoeXl2c3BbKDIp
IC0gKDIpXS5zdHJpbmcpOw0KICAgIC19DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAg
Y2FzZSA5MjoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQltZW51X2FkZF9kZXAoKHl5dnNwWygz
KSAtICg0KV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVwZW5k
cyBvblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLX0NCiAgICAt
ICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDk2Og0KICAgIC0NCiAgICAtICAgIHsNCiAg
ICAtCW1lbnVfYWRkX3Zpc2liaWxpdHkoKHl5dnNwWygyKSAtICgyKV0uZXhwcikpOw0KICAgIC19
DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA5ODoNCiAgICAtDQogICAgLSAg
ICB7DQogICAgLQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICh5eXZzcFsoMSkgLSAoMildLnN0
cmluZyksICh5eXZzcFsoMikgLSAoMildLmV4cHIpKTsNCiAgICAtfQ0KICAgIC0gICAgYnJlYWs7
DQogICAgLQ0KICAgIC0gIGNhc2UgMTAxOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmlkKSA9
ICh5eXZzcFsoMSkgLSAoMildLmlkKTsgfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0g
IGNhc2UgMTAyOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFsoMSkgLSAo
MildLmlkKTsgfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTAzOg0KICAg
IC0NCiAgICAtICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFsoMSkgLSAoMildLmlkKTsgfQ0KICAg
IC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTA2Og0KICAgIC0NCiAgICAtICAgIHsg
KHl5dmFsLmV4cHIpID0gTlVMTDsgfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNh
c2UgMTA3Og0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWygyKSAtICgy
KV0uZXhwcik7IH0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDEwODoNCiAg
ICAtDQogICAgLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCh5eXZzcFso
MSkgLSAoMSldLnN5bWJvbCkpOyB9DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2Fz
ZSAxMDk6DQogICAgLQ0KICAgIC0gICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAo
RV9FUVVBTCwgKHl5dnNwWygxKSAtICgzKV0uc3ltYm9sKSwgKHl5dnNwWygzKSAtICgzKV0uc3lt
Ym9sKSk7IH0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDExMDoNCiAgICAt
DQogICAgLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsICh5
eXZzcFsoMSkgLSAoMyldLnN5bWJvbCksICh5eXZzcFsoMykgLSAoMyldLnN5bWJvbCkpOyB9DQog
ICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMTE6DQogICAgLQ0KICAgIC0gICAg
eyAoeXl2YWwuZXhwcikgPSAoeXl2c3BbKDIpIC0gKDMpXS5leHByKTsgfQ0KICAgIC0gICAgYnJl
YWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTEyOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4
cHIpID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsICh5eXZzcFsoMikgLSAoMildLmV4cHIpKTsgfQ0K
ICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTEzOg0KICAgIC0NCiAgICAtICAg
IHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY190d28oRV9PUiwgKHl5dnNwWygxKSAtICgzKV0u
ZXhwciksICh5eXZzcFsoMykgLSAoMyldLmV4cHIpKTsgfQ0KICAgIC0gICAgYnJlYWs7DQogICAg
LQ0KICAgIC0gIGNhc2UgMTE0Og0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4cHIpID0gZXhw
cl9hbGxvY190d28oRV9BTkQsICh5eXZzcFsoMSkgLSAoMyldLmV4cHIpLCAoeXl2c3BbKDMpIC0g
KDMpXS5leHByKSk7IH0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDExNToN
CiAgICAtDQogICAgLSAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgoeXl2c3BbKDEp
IC0gKDEpXS5zdHJpbmcpLCAwKTsgZnJlZSgoeXl2c3BbKDEpIC0gKDEpXS5zdHJpbmcpKTsgfQ0K
ICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTE2Og0KICAgIC0NCiAgICAtICAg
IHsgKHl5dmFsLnN5bWJvbCkgPSBzeW1fbG9va3VwKCh5eXZzcFsoMSkgLSAoMSldLnN0cmluZyks
IFNZTUJPTF9DT05TVCk7IGZyZWUoKHl5dnNwWygxKSAtICgxKV0uc3RyaW5nKSk7IH0NCiAgICAt
ICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDExNzoNCiAgICAtDQogICAgLSAgICB7ICh5
eXZhbC5zdHJpbmcpID0gTlVMTDsgfQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0NCiAg
ICAtDQogICAgLSAgICAgIGRlZmF1bHQ6IGJyZWFrOw0KICAgIC0gICAgfQ0KICAgIC0gIC8qIFVz
ZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1
aXJlcw0KICAgIC0gICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGggdGhlIG5ldyB0cmFu
c2xhdGlvbi4gIFdlIHRha2UgdGhlDQogICAgLSAgICAgYXBwcm9hY2ggb2YgdHJhbnNsYXRpbmcg
aW1tZWRpYXRlbHkgYmVmb3JlIGV2ZXJ5IHVzZSBvZiB5eXRva2VuLg0KICAgIC0gICAgIE9uZSBh
bHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlv
biwNCiAgICAtICAgICBidXQgdGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYgdGhl
IHNlbWFudGljIGFjdGlvbiBpbnZva2VzDQogICAgLSAgICAgWVlBQk9SVCwgWVlBQ0NFUFQsIG9y
IFlZRVJST1IgaW1tZWRpYXRlbHkgYWZ0ZXIgYWx0ZXJpbmcgeXljaGFyIG9yDQogICAgLSAgICAg
aWYgaXQgaW52b2tlcyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NF
UFQsIGFuDQogICAgLSAgICAgaW5jb3JyZWN0IGRlc3RydWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZv
a2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlDQogICAgLSAgICAgY2FzZSBvZiBZWUVSUk9SIG9yIFlZ
QkFDS1VQLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQNCiAgICAtICAgICB0
byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1l
c3NhZ2UNCiAgICAtICAgICBiZWZvcmUgdGhlIGxvb2thaGVhZCBpcyB0cmFuc2xhdGVkLiAgKi8N
CiAgICAtICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5
eWxvYyk7DQogICAgLQ0KICAgIC0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsNCiAgICAtICB5eWxlbiA9
IDA7DQogICAgLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsNCiAgICAtDQogICAgLSAg
KisreXl2c3AgPSB5eXZhbDsNCiAgICAtDQogICAgLSAgLyogTm93IGBzaGlmdCcgdGhlIHJlc3Vs
dCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUNCiAgICAtICAgICB0aGF0
IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1
bGUNCiAgICAtICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovDQogICAgLQ0KICAgIC0gIHl5biA9
IHl5cjFbeXluXTsNCiAgICAtDQogICAgLSAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9L
RU5TXSArICp5eXNzcDsNCiAgICAtICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlM
QVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQ0KICAgIC0gICAgeXlzdGF0ZSA9IHl5
dGFibGVbeXlzdGF0ZV07DQogICAgLSAgZWxzZQ0KICAgIC0gICAgeXlzdGF0ZSA9IHl5ZGVmZ290
b1t5eW4gLSBZWU5UT0tFTlNdOw0KICAgIC0NCiAgICAtICBnb3RvIHl5bmV3c3RhdGU7DQogICAg
LQ0KICAgIC0NCiAgICAtLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQog
ICAgLXwgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfA0KICAgIC1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAteXllcnJsYWI6DQogICAgLSAg
LyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBj
b21tZW50cyBhdA0KICAgIC0gICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMg
aXMgbmVjZXNzYXJ5LiAgKi8NCiAgICAtICB5eXRva2VuID0geXljaGFyID09IFlZRU1QVFkgPyBZ
WUVNUFRZIDogWVlUUkFOU0xBVEUgKHl5Y2hhcik7DQogICAgLQ0KICAgIC0gIC8qIElmIG5vdCBh
bHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLw0K
ICAgIC0gIGlmICgheXllcnJzdGF0dXMpDQogICAgLSAgICB7DQogICAgLSAgICAgICsreXluZXJy
czsNCiAgICAtI2lmICEgWVlFUlJPUl9WRVJCT1NFDQogICAgLSAgICAgIHl5ZXJyb3IgKFlZXygi
c3ludGF4IGVycm9yIikpOw0KICAgIC0jZWxzZQ0KICAgIC0jIGRlZmluZSBZWVNZTlRBWF9FUlJP
UiB5eXN5bnRheF9lcnJvciAoJnl5bXNnX2FsbG9jLCAmeXltc2csIFwNCiAgICAtICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5eXRva2VuKQ0KICAgIC0gICAg
ICB7DQogICAgLSAgICAgICAgY2hhciBjb25zdCAqeXltc2dwID0gWVlfKCJzeW50YXggZXJyb3Ii
KTsNCiAgICAtICAgICAgICBpbnQgeXlzeW50YXhfZXJyb3Jfc3RhdHVzOw0KICAgIC0gICAgICAg
IHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOw0KICAgIC0gICAgICAgIGlm
ICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMCkNCiAgICAtICAgICAgICAgIHl5bXNncCA9IHl5
bXNnOw0KICAgIC0gICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAxKQ0K
ICAgIC0gICAgICAgICAgew0KICAgIC0gICAgICAgICAgICBpZiAoeXltc2cgIT0geXltc2didWYp
DQogICAgLSAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7DQogICAgLSAgICAgICAg
ICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXltc2dfYWxsb2MpOw0KICAgIC0g
ICAgICAgICAgICBpZiAoIXl5bXNnKQ0KICAgIC0gICAgICAgICAgICAgIHsNCiAgICAtICAgICAg
ICAgICAgICAgIHl5bXNnID0geXltc2didWY7DQogICAgLSAgICAgICAgICAgICAgICB5eW1zZ19h
bGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsNCiAgICAtICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vy
cm9yX3N0YXR1cyA9IDI7DQogICAgLSAgICAgICAgICAgICAgfQ0KICAgIC0gICAgICAgICAgICBl
bHNlDQogICAgLSAgICAgICAgICAgICAgew0KICAgIC0gICAgICAgICAgICAgICAgeXlzeW50YXhf
ZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7DQogICAgLSAgICAgICAgICAgICAgICB5eW1z
Z3AgPSB5eW1zZzsNCiAgICAtICAgICAgICAgICAgICB9DQogICAgLSAgICAgICAgICB9DQogICAg
LSAgICAgICAgeXllcnJvciAoeXltc2dwKTsNCiAgICAtICAgICAgICBpZiAoeXlzeW50YXhfZXJy
b3Jfc3RhdHVzID09IDIpDQogICAgLSAgICAgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOw0KICAg
IC0gICAgICB9DQogICAgLSMgdW5kZWYgWVlTWU5UQVhfRVJST1INCiAgICAtI2VuZGlmDQogICAg
LSAgICB9DQogICAgLQ0KICAgIC0NCiAgICAtDQogICAgLSAgaWYgKHl5ZXJyc3RhdHVzID09IDMp
DQogICAgLSAgICB7DQogICAgLSAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byBy
ZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4NCiAgICAtCSBlcnJvciwgZGlzY2FyZCBpdC4g
ICovDQogICAgLQ0KICAgIC0gICAgICBpZiAoeXljaGFyIDw9IFlZRU9GKQ0KICAgIC0Jew0KICAg
IC0JICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLw0KICAgIC0JICBp
ZiAoeXljaGFyID09IFlZRU9GKQ0KICAgIC0JICAgIFlZQUJPUlQ7DQogICAgLQl9DQogICAgLSAg
ICAgIGVsc2UNCiAgICAtCXsNCiAgICAtCSAgeXlkZXN0cnVjdCAoIkVycm9yOiBkaXNjYXJkaW5n
IiwNCiAgICAtCQkgICAgICB5eXRva2VuLCAmeXlsdmFsKTsNCiAgICAtCSAgeXljaGFyID0gWVlF
TVBUWTsNCiAgICAtCX0NCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgLyogRWxzZSB3aWxsIHRy
eSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yDQogICAg
LSAgICAgdG9rZW4uICAqLw0KICAgIC0gIGdvdG8geXllcnJsYWIxOw0KICAgIC0NCiAgICAtDQog
ICAgLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Lg0KICAgIC18IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJP
Ui4gIHwNCiAgICAtYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovDQogICAgLXl5ZXJyb3JsYWI6DQogICAgLQ0KICAgIC0gIC8qIFBhY2lmeSBjb21w
aWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMNCiAgICAtICAg
ICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFy
cyBpbiB1c2VyDQogICAgLSAgICAgY29kZS4gICovDQogICAgLSAgaWYgKC8qQ09OU1RDT05EKi8g
MCkNCiAgICAtICAgICBnb3RvIHl5ZXJyb3JsYWI7DQogICAgLQ0KICAgIC0gIC8qIERvIG5vdCBy
ZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQNCiAg
ICAtICAgICB0aGlzIFlZRVJST1IuICAqLw0KICAgIC0gIFlZUE9QU1RBQ0sgKHl5bGVuKTsNCiAg
ICAtICB5eWxlbiA9IDA7DQogICAgLSAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsNCiAg
ICAtICB5eXN0YXRlID0gKnl5c3NwOw0KICAgIC0gIGdvdG8geXllcnJsYWIxOw0KICAgIC0NCiAg
ICAtDQogICAgLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS4NCiAgICAtfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJv
dGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfA0KICAgIC1gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgLXl5ZXJy
bGFiMToNCiAgICAtICB5eWVycnN0YXR1cyA9IDM7CS8qIEVhY2ggcmVhbCB0b2tlbiBzaGlmdGVk
IGRlY3JlbWVudHMgdGhpcy4gICovDQogICAgLQ0KICAgIC0gIGZvciAoOzspDQogICAgLSAgICB7
DQogICAgLSAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsNCiAgICAtICAgICAgaWYgKCF5eXBh
Y3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkNCiAgICAtCXsNCiAgICAtCSAgeXluICs9IFlZVEVS
Uk9SOw0KICAgIC0JICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5
bl0gPT0gWVlURVJST1IpDQogICAgLQkgICAgew0KICAgIC0JICAgICAgeXluID0geXl0YWJsZVt5
eW5dOw0KICAgIC0JICAgICAgaWYgKDAgPCB5eW4pDQogICAgLQkJYnJlYWs7DQogICAgLQkgICAg
fQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJl
Y2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLw0KICAgIC0gICAgICBp
ZiAoeXlzc3AgPT0geXlzcykNCiAgICAtCVlZQUJPUlQ7DQogICAgLQ0KICAgIC0NCiAgICAtICAg
ICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwNCiAgICAtCQkgIHl5c3Rvc1t5eXN0YXRl
XSwgeXl2c3ApOw0KICAgIC0gICAgICBZWVBPUFNUQUNLICgxKTsNCiAgICAtICAgICAgeXlzdGF0
ZSA9ICp5eXNzcDsNCiAgICAtICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsNCiAg
ICAtICAgIH0NCiAgICAtDQogICAgLSAgKisreXl2c3AgPSB5eWx2YWw7DQogICAgLQ0KICAgIC0N
CiAgICAtICAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLw0KICAgIC0gIFlZX1NZTUJPTF9Q
UklOVCAoIlNoaWZ0aW5nIiwgeXlzdG9zW3l5bl0sIHl5dnNwLCB5eWxzcCk7DQogICAgLQ0KICAg
IC0gIHl5c3RhdGUgPSB5eW47DQogICAgLSAgZ290byB5eW5ld3N0YXRlOw0KICAgIC0NCiAgICAt
DQogICAgLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICAtfCB5
eWFjY2VwdGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfA0KICAgIC1gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgLXl5YWNjZXB0bGFiOg0KICAgIC0gIHl5
cmVzdWx0ID0gMDsNCiAgICAtICBnb3RvIHl5cmV0dXJuOw0KICAgIC0NCiAgICAtLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICAtfCB5eWFib3J0bGFiIC0tIFlZQUJP
UlQgY29tZXMgaGVyZS4gIHwNCiAgICAtYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8NCiAgICAteXlhYm9ydGxhYjoNCiAgICAtICB5eXJlc3VsdCA9IDE7DQogICAgLSAgZ290
byB5eXJldHVybjsNCiAgICAtDQogICAgLSNpZiAhZGVmaW5lZCh5eW92ZXJmbG93KSB8fCBZWUVS
Uk9SX1ZFUkJPU0UNCiAgICAtLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLg0KICAgIC18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9u
IGNvbWVzIGhlcmUuICB8DQogICAgLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8NCiAgICAteXlleGhhdXN0ZWRsYWI6DQogICAgLSAgeXllcnJvciAo
WVlfKCJtZW1vcnkgZXhoYXVzdGVkIikpOw0KICAgIC0gIHl5cmVzdWx0ID0gMjsNCiAgICAtICAv
KiBGYWxsIHRocm91Z2guICAqLw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLXl5cmV0dXJuOg0K
ICAgIC0gIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkNCiAgICAtICAgIHsNCiAgICAtICAgICAgLyog
TWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21t
ZW50cyBhdA0KICAgIC0gICAgICAgICB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlz
IGlzIG5lY2Vzc2FyeS4gICovDQogICAgLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXlj
aGFyKTsNCiAgICAtICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2Fo
ZWFkIiwNCiAgICAtICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCk7DQogICAgLSAg
ICB9DQogICAgLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hp
Y2ggYWN0aW9uIHRyaWdnZXJlZA0KICAgIC0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4g
ICovDQogICAgLSAgWVlQT1BTVEFDSyAoeXlsZW4pOw0KICAgIC0gIFlZX1NUQUNLX1BSSU5UICh5
eXNzLCB5eXNzcCk7DQogICAgLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpDQogICAgLSAgICB7DQog
ICAgLSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwNCiAgICAtCQkgIHl5c3Rv
c1sqeXlzc3BdLCB5eXZzcCk7DQogICAgLSAgICAgIFlZUE9QU1RBQ0sgKDEpOw0KICAgIC0gICAg
fQ0KICAgIC0jaWZuZGVmIHl5b3ZlcmZsb3cNCiAgICAtICBpZiAoeXlzcyAhPSB5eXNzYSkNCiAg
ICAtICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7DQogICAgLSNlbmRpZg0KICAgIC0jaWYgWVlFUlJP
Ul9WRVJCT1NFDQogICAgLSAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQ0KICAgIC0gICAgWVlTVEFD
S19GUkVFICh5eW1zZyk7DQogICAgLSNlbmRpZg0KICAgIC0gIC8qIE1ha2Ugc3VyZSBZWUlEIGlz
IHVzZWQuICAqLw0KICAgIC0gIHJldHVybiBZWUlEICh5eXJlc3VsdCk7DQogICAgLX0NCiAgICAt
DQogICAgLQ0KICAgIC0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIGNvbmZfcGFyc2UoY29uc3Qg
Y2hhciAqbmFtZSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0JaW50
IGk7DQogICAgLQ0KICAgIC0JemNvbmZfaW5pdHNjYW4obmFtZSk7DQogICAgLQ0KICAgIC0Jc3lt
X2luaXQoKTsNCiAgICAtCV9tZW51X2luaXQoKTsNCiAgICAtCXJvb3RtZW51LnByb21wdCA9IG1l
bnVfYWRkX3Byb21wdChQX01FTlUsICJVbmlrcmFmdCBDb25maWd1cmF0aW9uIiwgTlVMTCk7DQog
ICAgLQ0KICAgIC0JaWYgKGdldGVudigiWkNPTkZfREVCVUciKSkNCiAgICAtCQl6Y29uZmRlYnVn
ID0gMTsNCiAgICAtCXpjb25mcGFyc2UoKTsNCiAgICAtCWlmICh6Y29uZm5lcnJzKQ0KICAgIC0J
CWV4aXQoMSk7DQogICAgLQlpZiAoIW1vZHVsZXNfc3ltKQ0KICAgIC0JCW1vZHVsZXNfc3ltID0g
c3ltX2ZpbmQoICJuIiApOw0KICAgIC0NCiAgICAtCXJvb3RtZW51LnByb21wdC0+dGV4dCA9IF8o
cm9vdG1lbnUucHJvbXB0LT50ZXh0KTsNCiAgICAtCXJvb3RtZW51LnByb21wdC0+dGV4dCA9IHN5
bV9leHBhbmRfc3RyaW5nX3ZhbHVlKHJvb3RtZW51LnByb21wdC0+dGV4dCk7DQogICAgLQ0KICAg
IC0JbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOw0KICAgIC0JZm9yX2FsbF9zeW1ib2xzKGksIHN5
bSkgew0KICAgIC0JCWlmIChzeW1fY2hlY2tfZGVwcyhzeW0pKQ0KICAgIC0JCQl6Y29uZm5lcnJz
Kys7DQogICAgLSAgICAgICAgfQ0KICAgIC0JaWYgKHpjb25mbmVycnMpDQogICAgLQkJZXhpdCgx
KTsNCiAgICAtCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOw0KICAgIC19DQogICAgLQ0KICAgIC1z
dGF0aWMgY29uc3QgY2hhciAqemNvbmZfdG9rZW5uYW1lKGludCB0b2tlbikNCiAgICAtew0KICAg
IC0Jc3dpdGNoICh0b2tlbikgew0KICAgIC0JY2FzZSBUX01FTlU6CQlyZXR1cm4gIm1lbnUiOw0K
ICAgIC0JY2FzZSBUX0VORE1FTlU6CQlyZXR1cm4gImVuZG1lbnUiOw0KICAgIC0JY2FzZSBUX0NI
T0lDRToJCXJldHVybiAiY2hvaWNlIjsNCiAgICAtCWNhc2UgVF9FTkRDSE9JQ0U6CXJldHVybiAi
ZW5kY2hvaWNlIjsNCiAgICAtCWNhc2UgVF9JRjoJCXJldHVybiAiaWYiOw0KICAgIC0JY2FzZSBU
X0VORElGOgkJcmV0dXJuICJlbmRpZiI7DQogICAgLQljYXNlIFRfREVQRU5EUzoJCXJldHVybiAi
ZGVwZW5kcyI7DQogICAgLQljYXNlIFRfVklTSUJMRToJCXJldHVybiAidmlzaWJsZSI7DQogICAg
LQl9DQogICAgLQlyZXR1cm4gIjx0b2tlbj4iOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
Ym9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0
b2tlbiwgaW50IGVuZHRva2VuKQ0KICAgIC17DQogICAgLQlpZiAoaWQtPnRva2VuICE9IGVuZHRv
a2VuKSB7DQogICAgLQkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgJyVzJyB3aXRoaW4gJXMgYmxv
Y2siLA0KICAgIC0JCQlrY29uZl9pZF9zdHJpbmdzICsgaWQtPm5hbWUsIHpjb25mX3Rva2VubmFt
ZShzdGFydHRva2VuKSk7DQogICAgLQkJemNvbmZuZXJycysrOw0KICAgIC0JCXJldHVybiBmYWxz
ZTsNCiAgICAtCX0NCiAgICAtCWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9maWxl
KSB7DQogICAgLQkJemNvbmZfZXJyb3IoIiclcycgaW4gZGlmZmVyZW50IGZpbGUgdGhhbiAnJXMn
IiwNCiAgICAtCQkJa2NvbmZfaWRfc3RyaW5ncyArIGlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUo
c3RhcnR0b2tlbikpOw0KICAgIC0JCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9m
IHRoZSAnJXMnXG4iLA0KICAgIC0JCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRf
bWVudS0+bGluZW5vLA0KICAgIC0JCQl6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOw0KICAg
IC0JCXpjb25mbmVycnMrKzsNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQl9DQogICAgLQly
ZXR1cm4gdHJ1ZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZwcmludChj
b25zdCBjaGFyICplcnIsIC4uLikNCiAgICAtew0KICAgIC0JdmFfbGlzdCBhcDsNCiAgICAtDQog
ICAgLQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpKTsNCiAgICAtCXZhX3N0YXJ0KGFwLCBlcnIpOw0KICAgIC0JdmZwcmludGYoc3RkZXJy
LCBlcnIsIGFwKTsNCiAgICAtCXZhX2VuZChhcCk7DQogICAgLQlmcHJpbnRmKHN0ZGVyciwgIlxu
Iik7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNo
YXIgKmVyciwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0NCiAgICAtCXpj
b25mbmVycnMrKzsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JdmFfc3RhcnQoYXAsIGVycik7DQogICAgLQl2
ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtCWZwcmlu
dGYoc3RkZXJyLCAiXG4iKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZl
cnJvcihjb25zdCBjaGFyICplcnIpDQogICAgLXsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiJXM6
JWQ6ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpv
dXQsIGNvbnN0IGNoYXIgKnN0cikNCiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqcDsNCiAgICAt
CWludCBsZW47DQogICAgLQ0KICAgIC0JcHV0YygnIicsIG91dCk7DQogICAgLQl3aGlsZSAoKHAg
PSBzdHJjaHIoc3RyLCAnIicpKSkgew0KICAgIC0JCWxlbiA9IHAgLSBzdHI7DQogICAgLQkJaWYg
KGxlbikNCiAgICAtCQkJZnByaW50ZihvdXQsICIlLipzIiwgbGVuLCBzdHIpOw0KICAgIC0JCWZw
dXRzKCJcXFwiIiwgb3V0KTsNCiAgICAtCQlzdHIgPSBwICsgMTsNCiAgICAtCX0NCiAgICAtCWZw
dXRzKHN0ciwgb3V0KTsNCiAgICAtCXB1dGMoJyInLCBvdXQpOw0KICAgIC19DQogICAgLQ0KICAg
IC1zdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkN
CiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOw0KICAgIC0Jc3Ry
dWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0NCiAgICAtCWlmIChzeW1faXNfY2hvaWNlKHN5bSkp
DQogICAgLQkJZnByaW50ZihvdXQsICJcbmNob2ljZVxuIik7DQogICAgLQllbHNlDQogICAgLQkJ
ZnByaW50ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsNCiAgICAtCXN3aXRjaCAo
c3ltLT50eXBlKSB7DQogICAgLQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCQlmcHV0cygiICBib29s
ZWFuXG4iLCBvdXQpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAg
IC0JCWZwdXRzKCIgIHRyaXN0YXRlXG4iLCBvdXQpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2Fz
ZSBTX1NUUklORzoNCiAgICAtCQlmcHV0cygiICBzdHJpbmdcbiIsIG91dCk7DQogICAgLQkJYnJl
YWs7DQogICAgLQljYXNlIFNfSU5UOg0KICAgIC0JCWZwdXRzKCIgIGludGVnZXJcbiIsIG91dCk7
DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNfSEVYOg0KICAgIC0JCWZwdXRzKCIgIGhleFxu
Iiwgb3V0KTsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJZnB1dHMoIiAg
Pz8/XG4iLCBvdXQpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JZm9yIChwcm9wID0g
c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgIC0JCWlmIChwcm9wLT5t
ZW51ICE9IG1lbnUpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCXN3aXRjaCAocHJvcC0+dHlw
ZSkgew0KICAgIC0JCWNhc2UgUF9QUk9NUFQ6DQogICAgLQkJCWZwdXRzKCIgIHByb21wdCAiLCBv
dXQpOw0KICAgIC0JCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAg
LQkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgIC0JCQkJZnB1
dHMoIiBpZiAiLCBvdXQpOw0KICAgIC0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCBvdXQpOw0KICAgIC0JCQl9DQogICAgLQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgLQkJCWJy
ZWFrOw0KICAgIC0JCWNhc2UgUF9ERUZBVUxUOg0KICAgIC0JCQlmcHV0cyggIiAgZGVmYXVsdCAi
LCBvdXQpOw0KICAgIC0JCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOw0KICAgIC0JCQlp
ZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAgICAtCQkJCWZwdXRzKCIg
aWYgIiwgb3V0KTsNCiAgICAtCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0
KTsNCiAgICAtCQkJfQ0KICAgIC0JCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIFBfQ0hPSUNFOg0KICAgIC0JCQlmcHV0cygiICAjY2hvaWNlIHZhbHVlXG4i
LCBvdXQpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIFBfU0VMRUNUOg0KICAgIC0JCQlm
cHV0cyggIiAgc2VsZWN0ICIsIG91dCk7DQogICAgLQkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIs
IG91dCk7DQogICAgLQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CWNhc2UgUF9SQU5HRToNCiAgICAtCQkJZnB1dHMoICIgIHJhbmdlICIsIG91dCk7DQogICAgLQkJ
CWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAgLQkJCWZwdXRjKCdcbicsIG91dCk7
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9NRU5VOg0KICAgIC0JCQlmcHV0cyggIiAg
bWVudSAiLCBvdXQpOw0KICAgIC0JCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4
dCk7DQogICAgLQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWRl
ZmF1bHQ6DQogICAgLQkJCWZwcmludGYob3V0LCAiICB1bmtub3duIHByb3AgJWQhXG4iLCBwcm9w
LT50eXBlKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JaWYgKG1l
bnUtPmhlbHApIHsNCiAgICAtCQlpbnQgbGVuID0gc3RybGVuKG1lbnUtPmhlbHApOw0KICAgIC0J
CXdoaWxlIChtZW51LT5oZWxwWy0tbGVuXSA9PSAnXG4nKQ0KICAgIC0JCQltZW51LT5oZWxwW2xl
bl0gPSAwOw0KICAgIC0JCWZwcmludGYob3V0LCAiICBoZWxwXG4lc1xuIiwgbWVudS0+aGVscCk7
DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCkN
CiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3RydWN0IHN5bWJv
bCAqc3ltOw0KICAgIC0Jc3RydWN0IG1lbnUgKm1lbnU7DQogICAgLQ0KICAgIC0JbWVudSA9IHJv
b3RtZW51Lmxpc3Q7DQogICAgLQl3aGlsZSAobWVudSkgew0KICAgIC0JCWlmICgoc3ltID0gbWVu
dS0+c3ltKSkNCiAgICAtCQkJcHJpbnRfc3ltYm9sKG91dCwgbWVudSk7DQogICAgLQkJZWxzZSBp
ZiAoKHByb3AgPSBtZW51LT5wcm9tcHQpKSB7DQogICAgLQkJCXN3aXRjaCAocHJvcC0+dHlwZSkg
ew0KICAgIC0JCQljYXNlIFBfQ09NTUVOVDoNCiAgICAtCQkJCWZwdXRzKCJcbmNvbW1lbnQgIiwg
b3V0KTsNCiAgICAtCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAg
ICAtCQkJCWZwdXRzKCJcbiIsIG91dCk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSBQ
X01FTlU6DQogICAgLQkJCQlmcHV0cygiXG5tZW51ICIsIG91dCk7DQogICAgLQkJCQlwcmludF9x
dW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAgLQkJCQlmcHV0cygiXG4iLCBvdXQp
Ow0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWRlZmF1bHQ6DQogICAgLQkJCQk7DQogICAgLQkJ
CX0NCiAgICAtCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7DQogICAg
LQkJCQlmcHV0cygiICBkZXBlbmRzICIsIG91dCk7DQogICAgLQkJCQlleHByX2ZwcmludChwcm9w
LT52aXNpYmxlLmV4cHIsIG91dCk7DQogICAgLQkJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgIC0J
CQl9DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpZiAobWVudS0+bGlzdCkNCiAgICAtCQkJbWVu
dSA9IG1lbnUtPmxpc3Q7DQogICAgLQkJZWxzZSBpZiAobWVudS0+bmV4dCkNCiAgICAtCQkJbWVu
dSA9IG1lbnUtPm5leHQ7DQogICAgLQkJZWxzZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQp
KSB7DQogICAgLQkJCWlmIChtZW51LT5wcm9tcHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBf
TUVOVSkNCiAgICAtCQkJCWZwdXRzKCJcbmVuZG1lbnVcbiIsIG91dCk7DQogICAgLQkJCWlmICht
ZW51LT5uZXh0KSB7DQogICAgLQkJCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0jaW5j
bHVkZSAiemNvbmYubGV4LmMiDQogICAgLSNpbmNsdWRlICJ1dGlsLmMiDQogICAgLSNpbmNsdWRl
ICJjb25mZGF0YS5jIg0KICAgIC0jaW5jbHVkZSAiZXhwci5jIg0KICAgIC0jaW5jbHVkZSAic3lt
Ym9sLmMiDQogICAgLSNpbmNsdWRlICJtZW51LmMiDQogICAgLQ0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvemNvbmYueSBiL3N1cHBvcnQva2NvbmZpZy96Y29uZi55DQogICAgZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggOWIwMmQwMi4uMDAwMDAwMA0KICAgIC0t
LSBhL3N1cHBvcnQva2NvbmZpZy96Y29uZi55DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0x
LDczMyArMCwwIEBADQogICAgLSV7DQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAw
MiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAtICogUmVsZWFzZWQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAgLSAqLw0KICAgIC0NCiAg
ICAtI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgLSNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICAtI2lu
Y2x1ZGUgPHN0ZGlvLmg+DQogICAgLSNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICAtI2luY2x1ZGUg
PHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkYm9vbC5oPg0KICAgIC0NCiAgICAtI2luY2x1
ZGUgImxrYy5oIg0KICAgIC0NCiAgICAtI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAo
Y2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQ0KICAgIC0NCiAgICAtI2RlZmluZSBQUklOVEQJ
CTB4MDAwMQ0KICAgIC0jZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMg0KICAgIC0NCiAgICAtaW50
IGNkZWJ1ZyA9IFBSSU5URDsNCiAgICAtDQogICAgLWV4dGVybiBpbnQgemNvbmZsZXgodm9pZCk7
DQogICAgLXN0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pOw0KICAg
IC1zdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLik7DQogICAgLXN0
YXRpYyB2b2lkIHpjb25mZXJyb3IoY29uc3QgY2hhciAqZXJyKTsNCiAgICAtc3RhdGljIGJvb2wg
emNvbmZfZW5kdG9rZW4oY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCwgaW50IHN0YXJ0dG9rZW4s
IGludCBlbmR0b2tlbik7DQogICAgLQ0KICAgIC1zdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfaGFzaFtT
WU1CT0xfSEFTSFNJWkVdOw0KICAgIC0NCiAgICAtc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50
X21lbnUsICpjdXJyZW50X2VudHJ5Ow0KICAgIC0NCiAgICAtJX0NCiAgICAtJWV4cGVjdCAzMA0K
ICAgIC0NCiAgICAtJXVuaW9uDQogICAgLXsNCiAgICAtCWNoYXIgKnN0cmluZzsNCiAgICAtCXN0
cnVjdCBmaWxlICpmaWxlOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltYm9sOw0KICAgIC0Jc3Ry
dWN0IGV4cHIgKmV4cHI7DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtCWNvbnN0IHN0
cnVjdCBrY29uZl9pZCAqaWQ7DQogICAgLX0NCiAgICAtDQogICAgLSV0b2tlbiA8aWQ+VF9NQUlO
TUVOVQ0KICAgIC0ldG9rZW4gPGlkPlRfTUVOVQ0KICAgIC0ldG9rZW4gPGlkPlRfRU5ETUVOVQ0K
ICAgIC0ldG9rZW4gPGlkPlRfU09VUkNFDQogICAgLSV0b2tlbiA8aWQ+VF9DSE9JQ0UNCiAgICAt
JXRva2VuIDxpZD5UX0VORENIT0lDRQ0KICAgIC0ldG9rZW4gPGlkPlRfQ09NTUVOVA0KICAgIC0l
dG9rZW4gPGlkPlRfQ09ORklHDQogICAgLSV0b2tlbiA8aWQ+VF9NRU5VQ09ORklHDQogICAgLSV0
b2tlbiA8aWQ+VF9IRUxQDQogICAgLSV0b2tlbiA8c3RyaW5nPiBUX0hFTFBURVhUDQogICAgLSV0
b2tlbiA8aWQ+VF9JRg0KICAgIC0ldG9rZW4gPGlkPlRfRU5ESUYNCiAgICAtJXRva2VuIDxpZD5U
X0RFUEVORFMNCiAgICAtJXRva2VuIDxpZD5UX09QVElPTkFMDQogICAgLSV0b2tlbiA8aWQ+VF9Q
Uk9NUFQNCiAgICAtJXRva2VuIDxpZD5UX1RZUEUNCiAgICAtJXRva2VuIDxpZD5UX0RFRkFVTFQN
CiAgICAtJXRva2VuIDxpZD5UX1NFTEVDVA0KICAgIC0ldG9rZW4gPGlkPlRfUkFOR0UNCiAgICAt
JXRva2VuIDxpZD5UX1ZJU0lCTEUNCiAgICAtJXRva2VuIDxpZD5UX09QVElPTg0KICAgIC0ldG9r
ZW4gPGlkPlRfT04NCiAgICAtJXRva2VuIDxzdHJpbmc+IFRfV09SRA0KICAgIC0ldG9rZW4gPHN0
cmluZz4gVF9XT1JEX1FVT1RFDQogICAgLSV0b2tlbiBUX1VORVFVQUwNCiAgICAtJXRva2VuIFRf
Q0xPU0VfUEFSRU4NCiAgICAtJXRva2VuIFRfT1BFTl9QQVJFTg0KICAgIC0ldG9rZW4gVF9FT0wN
CiAgICAtDQogICAgLSVsZWZ0IFRfT1INCiAgICAtJWxlZnQgVF9BTkQNCiAgICAtJWxlZnQgVF9F
UVVBTCBUX1VORVFVQUwNCiAgICAtJW5vbmFzc29jIFRfTk9UDQogICAgLQ0KICAgIC0ldHlwZSA8
c3RyaW5nPiBwcm9tcHQNCiAgICAtJXR5cGUgPHN5bWJvbD4gc3ltYm9sDQogICAgLSV0eXBlIDxl
eHByPiBleHByDQogICAgLSV0eXBlIDxleHByPiBpZl9leHByDQogICAgLSV0eXBlIDxpZD4gZW5k
DQogICAgLSV0eXBlIDxpZD4gb3B0aW9uX25hbWUNCiAgICAtJXR5cGUgPG1lbnU+IGlmX2VudHJ5
IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5DQogICAgLSV0eXBlIDxzdHJpbmc+IHN5bWJvbF9vcHRp
b25fYXJnIHdvcmRfb3B0DQogICAgLQ0KICAgIC0lZGVzdHJ1Y3RvciB7DQogICAgLQlmcHJpbnRm
KHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIs
DQogICAgLQkJJCQtPmZpbGUtPm5hbWUsICQkLT5saW5lbm8pOw0KICAgIC0JaWYgKGN1cnJlbnRf
bWVudSA9PSAkJCkNCiAgICAtCQltZW51X2VuZF9tZW51KCk7DQogICAgLX0gaWZfZW50cnkgbWVu
dV9lbnRyeSBjaG9pY2VfZW50cnkNCiAgICAtDQogICAgLSV7DQogICAgLS8qIEluY2x1ZGUgemNv
bmYuaGFzaC5jIGhlcmUgc28gaXQgY2FuIHNlZSB0aGUgdG9rZW4gY29uc3RhbnRzLiAqLw0KICAg
IC0jaW5jbHVkZSAiemNvbmYuaGFzaC5jIg0KICAgIC0lfQ0KICAgIC0NCiAgICAtJSUNCiAgICAt
aW5wdXQ6IG5sIHN0YXJ0IHwgc3RhcnQ7DQogICAgLQ0KICAgIC1zdGFydDogbWFpbm1lbnVfc3Rt
dCBzdG10X2xpc3QgfCBzdG10X2xpc3Q7DQogICAgLQ0KICAgIC1zdG10X2xpc3Q6DQogICAgLQkg
IC8qIGVtcHR5ICovDQogICAgLQl8IHN0bXRfbGlzdCBjb21tb25fc3RtdA0KICAgIC0JfCBzdG10
X2xpc3QgY2hvaWNlX3N0bXQNCiAgICAtCXwgc3RtdF9saXN0IG1lbnVfc3RtdA0KICAgIC0JfCBz
dG10X2xpc3QgZW5kCQkJeyB6Y29uZl9lcnJvcigidW5leHBlY3RlZCBlbmQgc3RhdGVtZW50Iik7
IH0NCiAgICAtCXwgc3RtdF9saXN0IFRfV09SRCBlcnJvciBUX0VPTAl7IHpjb25mX2Vycm9yKCJ1
bmtub3duIHN0YXRlbWVudCBcIiVzXCIiLCAkMik7IH0NCiAgICAtCXwgc3RtdF9saXN0IG9wdGlv
bl9uYW1lIGVycm9yIFRfRU9MDQogICAgLXsNCiAgICAtCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVk
IG9wdGlvbiBcIiVzXCIiLCBrY29uZl9pZF9zdHJpbmdzICsgJDItPm5hbWUpOw0KICAgIC19DQog
ICAgLQl8IHN0bXRfbGlzdCBlcnJvciBUX0VPTAkJeyB6Y29uZl9lcnJvcigiaW52YWxpZCBzdGF0
ZW1lbnQiKTsgfQ0KICAgIC07DQogICAgLQ0KICAgIC1vcHRpb25fbmFtZToNCiAgICAtCVRfREVQ
RU5EUyB8IFRfUFJPTVBUIHwgVF9UWVBFIHwgVF9TRUxFQ1QgfCBUX09QVElPTkFMIHwgVF9SQU5H
RSB8IFRfREVGQVVMVCB8IFRfVklTSUJMRQ0KICAgIC07DQogICAgLQ0KICAgIC1jb21tb25fc3Rt
dDoNCiAgICAtCSAgVF9FT0wNCiAgICAtCXwgaWZfc3RtdA0KICAgIC0JfCBjb21tZW50X3N0bXQN
CiAgICAtCXwgY29uZmlnX3N0bXQNCiAgICAtCXwgbWVudWNvbmZpZ19zdG10DQogICAgLQl8IHNv
dXJjZV9zdG10DQogICAgLTsNCiAgICAtDQogICAgLW9wdGlvbl9lcnJvcjoNCiAgICAtCSAgVF9X
T1JEIGVycm9yIFRfRU9MCQl7IHpjb25mX2Vycm9yKCJ1bmtub3duIG9wdGlvbiBcIiVzXCIiLCAk
MSk7IH0NCiAgICAtCXwgZXJyb3IgVF9FT0wJCQl7IHpjb25mX2Vycm9yKCJpbnZhbGlkIG9wdGlv
biIpOyB9DQogICAgLTsNCiAgICAtDQogICAgLQ0KICAgIC0vKiBjb25maWcvbWVudWNvbmZpZyBl
bnRyeSAqLw0KICAgIC0NCiAgICAtY29uZmlnX2VudHJ5X3N0YXJ0OiBUX0NPTkZJRyBUX1dPUkQg
VF9FT0wNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgkMiwg
MCk7DQogICAgLQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsNCiAgICAtCW1lbnVfYWRk
X2VudHJ5KHN5bSk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNc
biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsNCiAgICAtfTsNCiAgICAt
DQogICAgLWNvbmZpZ19zdG10OiBjb25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0
DQogICAgLXsNCiAgICAtCW1lbnVfZW5kX2VudHJ5KCk7DQogICAgLQlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkp
Ow0KICAgIC19Ow0KICAgIC0NCiAgICAtbWVudWNvbmZpZ19lbnRyeV9zdGFydDogVF9NRU5VQ09O
RklHIFRfV09SRCBUX0VPTA0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1f
bG9va3VwKCQyLCAwKTsNCiAgICAtCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOw0KICAg
IC0JbWVudV9hZGRfZW50cnkoc3ltKTsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk
Om1lbnVjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsN
CiAgICAtfTsNCiAgICAtDQogICAgLW1lbnVjb25maWdfc3RtdDogbWVudWNvbmZpZ19lbnRyeV9z
dGFydCBjb25maWdfb3B0aW9uX2xpc3QNCiAgICAtew0KICAgIC0JaWYgKGN1cnJlbnRfZW50cnkt
PnByb21wdCkNCiAgICAtCQljdXJyZW50X2VudHJ5LT5wcm9tcHQtPnR5cGUgPSBQX01FTlU7DQog
ICAgLQllbHNlDQogICAgLQkJemNvbmZwcmludCgid2FybmluZzogbWVudWNvbmZpZyBzdGF0ZW1l
bnQgd2l0aG91dCBwcm9tcHQiKTsNCiAgICAtCW1lbnVfZW5kX2VudHJ5KCk7DQogICAgLQlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNv
bmZfbGluZW5vKCkpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY29uZmlnX29wdGlvbl9saXN0Og0K
ICAgIC0JICAvKiBlbXB0eSAqLw0KICAgIC0JfCBjb25maWdfb3B0aW9uX2xpc3QgY29uZmlnX29w
dGlvbg0KICAgIC0JfCBjb25maWdfb3B0aW9uX2xpc3Qgc3ltYm9sX29wdGlvbg0KICAgIC0JfCBj
b25maWdfb3B0aW9uX2xpc3QgZGVwZW5kcw0KICAgIC0JfCBjb25maWdfb3B0aW9uX2xpc3QgaGVs
cA0KICAgIC0JfCBjb25maWdfb3B0aW9uX2xpc3Qgb3B0aW9uX2Vycm9yDQogICAgLQl8IGNvbmZp
Z19vcHRpb25fbGlzdCBUX0VPTA0KICAgIC07DQogICAgLQ0KICAgIC1jb25maWdfb3B0aW9uOiBU
X1RZUEUgcHJvbXB0X3N0bXRfb3B0IFRfRU9MDQogICAgLXsNCiAgICAtCW1lbnVfc2V0X3R5cGUo
JDEtPnN0eXBlKTsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnR5cGUoJXUpXG4i
LA0KICAgIC0JCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksDQogICAgLQkJJDEtPnN0
eXBlKTsNCiAgICAtfTsNCiAgICAtDQogICAgLWNvbmZpZ19vcHRpb246IFRfUFJPTVBUIHByb21w
dCBpZl9leHByIFRfRU9MDQogICAgLXsNCiAgICAtCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwg
JDIsICQzKTsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNv
bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLX07DQogICAgLQ0KICAgIC1jb25m
aWdfb3B0aW9uOiBUX0RFRkFVTFQgZXhwciBpZl9leHByIFRfRU9MDQogICAgLXsNCiAgICAtCW1l
bnVfYWRkX2V4cHIoUF9ERUZBVUxULCAkMiwgJDMpOw0KICAgIC0JaWYgKCQxLT5zdHlwZSAhPSBT
X1VOS05PV04pDQogICAgLQkJbWVudV9zZXRfdHlwZSgkMS0+c3R5cGUpOw0KICAgIC0JcHJpbnRk
KERFQlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdCgldSlcbiIsDQogICAgLQkJemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSwNCiAgICAtCQkkMS0+c3R5cGUpOw0KICAgIC19Ow0KICAgIC0N
CiAgICAtY29uZmlnX29wdGlvbjogVF9TRUxFQ1QgVF9XT1JEIGlmX2V4cHIgVF9FT0wNCiAgICAt
ew0KICAgIC0JbWVudV9hZGRfc3ltYm9sKFBfU0VMRUNULCBzeW1fbG9va3VwKCQyLCAwKSwgJDMp
Ow0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c2VsZWN0XG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfTsNCiAgICAtDQogICAgLWNvbmZpZ19vcHRp
b246IFRfUkFOR0Ugc3ltYm9sIHN5bWJvbCBpZl9leHByIFRfRU9MDQogICAgLXsNCiAgICAtCW1l
bnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFOR0UsJDIsICQzKSwgJDQp
Ow0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cmFuZ2VcbiIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtc3ltYm9sX29wdGlv
bjogVF9PUFRJT04gc3ltYm9sX29wdGlvbl9saXN0IFRfRU9MDQogICAgLTsNCiAgICAtDQogICAg
LXN5bWJvbF9vcHRpb25fbGlzdDoNCiAgICAtCSAgLyogZW1wdHkgKi8NCiAgICAtCXwgc3ltYm9s
X29wdGlvbl9saXN0IFRfV09SRCBzeW1ib2xfb3B0aW9uX2FyZw0KICAgIC17DQogICAgLQljb25z
dCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKCQyLCBzdHJsZW4oJDIpKTsN
CiAgICAtCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9PUFRJT04pDQogICAgLQkJbWVudV9hZGRf
b3B0aW9uKGlkLT50b2tlbiwgJDMpOw0KICAgIC0JZWxzZQ0KICAgIC0JCXpjb25mcHJpbnQoIndh
cm5pbmc6IGlnbm9yaW5nIHVua25vd24gb3B0aW9uICVzIiwgJDIpOw0KICAgIC0JZnJlZSgkMik7
DQogICAgLX07DQogICAgLQ0KICAgIC1zeW1ib2xfb3B0aW9uX2FyZzoNCiAgICAtCSAgLyogZW1w
dHkgKi8JCXsgJCQgPSBOVUxMOyB9DQogICAgLQl8IFRfRVFVQUwgcHJvbXB0CXsgJCQgPSAkMjsg
fQ0KICAgIC07DQogICAgLQ0KICAgIC0vKiBjaG9pY2UgZW50cnkgKi8NCiAgICAtDQogICAgLWNo
b2ljZTogVF9DSE9JQ0Ugd29yZF9vcHQgVF9FT0wNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJv
bCAqc3ltID0gc3ltX2xvb2t1cCgkMiwgU1lNQk9MX0NIT0lDRSk7DQogICAgLQlzeW0tPmZsYWdz
IHw9IFNZTUJPTF9BVVRPOw0KICAgIC0JbWVudV9hZGRfZW50cnkoc3ltKTsNCiAgICAtCW1lbnVf
YWRkX2V4cHIoUF9DSE9JQ0UsIE5VTEwsIE5VTEwpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6Y2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAg
ICAtfTsNCiAgICAtDQogICAgLWNob2ljZV9lbnRyeTogY2hvaWNlIGNob2ljZV9vcHRpb25fbGlz
dA0KICAgIC17DQogICAgLQkkJCA9IG1lbnVfYWRkX21lbnUoKTsNCiAgICAtfTsNCiAgICAtDQog
ICAgLWNob2ljZV9lbmQ6IGVuZA0KICAgIC17DQogICAgLQlpZiAoemNvbmZfZW5kdG9rZW4oJDEs
IFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsNCiAgICAtCQltZW51X2VuZF9tZW51KCk7DQogICAg
LQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtCX0NCiAgICAtfTsNCiAgICAtDQogICAgLWNob2lj
ZV9zdG10OiBjaG9pY2VfZW50cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQNCiAgICAtOw0KICAg
IC0NCiAgICAtY2hvaWNlX29wdGlvbl9saXN0Og0KICAgIC0JICAvKiBlbXB0eSAqLw0KICAgIC0J
fCBjaG9pY2Vfb3B0aW9uX2xpc3QgY2hvaWNlX29wdGlvbg0KICAgIC0JfCBjaG9pY2Vfb3B0aW9u
X2xpc3QgZGVwZW5kcw0KICAgIC0JfCBjaG9pY2Vfb3B0aW9uX2xpc3QgaGVscA0KICAgIC0JfCBj
aG9pY2Vfb3B0aW9uX2xpc3QgVF9FT0wNCiAgICAtCXwgY2hvaWNlX29wdGlvbl9saXN0IG9wdGlv
bl9lcnJvcg0KICAgIC07DQogICAgLQ0KICAgIC1jaG9pY2Vfb3B0aW9uOiBUX1BST01QVCBwcm9t
cHQgaWZfZXhwciBUX0VPTA0KICAgIC17DQogICAgLQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQs
ICQyLCAkMyk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY2hv
aWNlX29wdGlvbjogVF9UWVBFIHByb21wdF9zdG10X29wdCBUX0VPTA0KICAgIC17DQogICAgLQlp
ZiAoJDEtPnN0eXBlID09IFNfQk9PTEVBTiB8fCAkMS0+c3R5cGUgPT0gU19UUklTVEFURSkgew0K
ICAgIC0JCW1lbnVfc2V0X3R5cGUoJDEtPnN0eXBlKTsNCiAgICAtCQlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDp0eXBlKCV1KVxuIiwNCiAgICAtCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSwNCiAgICAtCQkJJDEtPnN0eXBlKTsNCiAgICAtCX0gZWxzZQ0KICAgIC0JCVlZRVJS
T1I7DQogICAgLX07DQogICAgLQ0KICAgIC1jaG9pY2Vfb3B0aW9uOiBUX09QVElPTkFMIFRfRU9M
DQogICAgLXsNCiAgICAtCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElP
TkFMOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6b3B0aW9uYWxcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY2hvaWNl
X29wdGlvbjogVF9ERUZBVUxUIFRfV09SRCBpZl9leHByIFRfRU9MDQogICAgLXsNCiAgICAtCWlm
ICgkMS0+c3R5cGUgPT0gU19VTktOT1dOKSB7DQogICAgLQkJbWVudV9hZGRfc3ltYm9sKFBfREVG
QVVMVCwgc3ltX2xvb2t1cCgkMiwgMCksICQzKTsNCiAgICAtCQlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpkZWZhdWx0XG4iLA0KICAgIC0JCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICAtCX0gZWxzZQ0KICAgIC0JCVlZRVJST1I7DQogICAgLX07DQogICAgLQ0KICAg
IC1jaG9pY2VfYmxvY2s6DQogICAgLQkgIC8qIGVtcHR5ICovDQogICAgLQl8IGNob2ljZV9ibG9j
ayBjb21tb25fc3RtdA0KICAgIC07DQogICAgLQ0KICAgIC0vKiBpZiBlbnRyeSAqLw0KICAgIC0N
CiAgICAtaWZfZW50cnk6IFRfSUYgZXhwciBubA0KICAgIC17DQogICAgLQlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQog
ICAgLQltZW51X2FkZF9lbnRyeShOVUxMKTsNCiAgICAtCW1lbnVfYWRkX2RlcCgkMik7DQogICAg
LQkkJCA9IG1lbnVfYWRkX21lbnUoKTsNCiAgICAtfTsNCiAgICAtDQogICAgLWlmX2VuZDogZW5k
DQogICAgLXsNCiAgICAtCWlmICh6Y29uZl9lbmR0b2tlbigkMSwgVF9JRiwgVF9FTkRJRikpIHsN
CiAgICAtCQltZW51X2VuZF9tZW51KCk7DQogICAgLQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6ZW5kaWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JfQ0K
ICAgIC19Ow0KICAgIC0NCiAgICAtaWZfc3RtdDogaWZfZW50cnkgaWZfYmxvY2sgaWZfZW5kDQog
ICAgLTsNCiAgICAtDQogICAgLWlmX2Jsb2NrOg0KICAgIC0JICAvKiBlbXB0eSAqLw0KICAgIC0J
fCBpZl9ibG9jayBjb21tb25fc3RtdA0KICAgIC0JfCBpZl9ibG9jayBtZW51X3N0bXQNCiAgICAt
CXwgaWZfYmxvY2sgY2hvaWNlX3N0bXQNCiAgICAtOw0KICAgIC0NCiAgICAtLyogbWFpbm1lbnUg
ZW50cnkgKi8NCiAgICAtDQogICAgLW1haW5tZW51X3N0bXQ6IFRfTUFJTk1FTlUgcHJvbXB0IG5s
DQogICAgLXsNCiAgICAtCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICQyLCBOVUxMKTsNCiAgICAt
fTsNCiAgICAtDQogICAgLS8qIG1lbnUgZW50cnkgKi8NCiAgICAtDQogICAgLW1lbnU6IFRfTUVO
VSBwcm9tcHQgVF9FT0wNCiAgICAtew0KICAgIC0JbWVudV9hZGRfZW50cnkoTlVMTCk7DQogICAg
LQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAkMiwgTlVMTCk7DQogICAgLQlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsN
CiAgICAtfTsNCiAgICAtDQogICAgLW1lbnVfZW50cnk6IG1lbnUgdmlzaWJpbGl0eV9saXN0IGRl
cGVuZHNfbGlzdA0KICAgIC17DQogICAgLQkkJCA9IG1lbnVfYWRkX21lbnUoKTsNCiAgICAtfTsN
CiAgICAtDQogICAgLW1lbnVfZW5kOiBlbmQNCiAgICAtew0KICAgIC0JaWYgKHpjb25mX2VuZHRv
a2VuKCQxLCBUX01FTlUsIFRfRU5ETUVOVSkpIHsNCiAgICAtCQltZW51X2VuZF9tZW51KCk7DQog
ICAgLQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLQl9DQogICAgLX07DQogICAgLQ0KICAgIC1tZW51
X3N0bXQ6IG1lbnVfZW50cnkgbWVudV9ibG9jayBtZW51X2VuZA0KICAgIC07DQogICAgLQ0KICAg
IC1tZW51X2Jsb2NrOg0KICAgIC0JICAvKiBlbXB0eSAqLw0KICAgIC0JfCBtZW51X2Jsb2NrIGNv
bW1vbl9zdG10DQogICAgLQl8IG1lbnVfYmxvY2sgbWVudV9zdG10DQogICAgLQl8IG1lbnVfYmxv
Y2sgY2hvaWNlX3N0bXQNCiAgICAtOw0KICAgIC0NCiAgICAtc291cmNlX3N0bXQ6IFRfU09VUkNF
IHByb21wdCBUX0VPTA0KICAgIC17DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpz
b3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsNCiAgICAt
CXpjb25mX25leHRmaWxlKCQyKTsNCiAgICAtfTsNCiAgICAtDQogICAgLS8qIGNvbW1lbnQgZW50
cnkgKi8NCiAgICAtDQogICAgLWNvbW1lbnQ6IFRfQ09NTUVOVCBwcm9tcHQgVF9FT0wNCiAgICAt
ew0KICAgIC0JbWVudV9hZGRfZW50cnkoTlVMTCk7DQogICAgLQltZW51X2FkZF9wcm9tcHQoUF9D
T01NRU5ULCAkMiwgTlVMTCk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21t
ZW50XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfTsNCiAgICAt
DQogICAgLWNvbW1lbnRfc3RtdDogY29tbWVudCBkZXBlbmRzX2xpc3QNCiAgICAtew0KICAgIC0J
bWVudV9lbmRfZW50cnkoKTsNCiAgICAtfTsNCiAgICAtDQogICAgLS8qIGhlbHAgb3B0aW9uICov
DQogICAgLQ0KICAgIC1oZWxwX3N0YXJ0OiBUX0hFTFAgVF9FT0wNCiAgICAtew0KICAgIC0JcHJp
bnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVscFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSk7DQogICAgLQl6Y29uZl9zdGFydGhlbHAoKTsNCiAgICAtfTsNCiAgICAtDQogICAg
LWhlbHA6IGhlbHBfc3RhcnQgVF9IRUxQVEVYVA0KICAgIC17DQogICAgLQljdXJyZW50X2VudHJ5
LT5oZWxwID0gJDI7DQogICAgLX07DQogICAgLQ0KICAgIC0vKiBkZXBlbmRzIG9wdGlvbiAqLw0K
ICAgIC0NCiAgICAtZGVwZW5kc19saXN0Og0KICAgIC0JICAvKiBlbXB0eSAqLw0KICAgIC0JfCBk
ZXBlbmRzX2xpc3QgZGVwZW5kcw0KICAgIC0JfCBkZXBlbmRzX2xpc3QgVF9FT0wNCiAgICAtCXwg
ZGVwZW5kc19saXN0IG9wdGlvbl9lcnJvcg0KICAgIC07DQogICAgLQ0KICAgIC1kZXBlbmRzOiBU
X0RFUEVORFMgVF9PTiBleHByIFRfRU9MDQogICAgLXsNCiAgICAtCW1lbnVfYWRkX2RlcCgkMyk7
DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9j
dXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfTsNCiAgICAtDQogICAgLS8qIHZpc2li
aWxpdHkgb3B0aW9uICovDQogICAgLQ0KICAgIC12aXNpYmlsaXR5X2xpc3Q6DQogICAgLQkgIC8q
IGVtcHR5ICovDQogICAgLQl8IHZpc2liaWxpdHlfbGlzdCB2aXNpYmxlDQogICAgLQl8IHZpc2li
aWxpdHlfbGlzdCBUX0VPTA0KICAgIC07DQogICAgLQ0KICAgIC12aXNpYmxlOiBUX1ZJU0lCTEUg
aWZfZXhwcg0KICAgIC17DQogICAgLQltZW51X2FkZF92aXNpYmlsaXR5KCQyKTsNCiAgICAtfTsN
CiAgICAtDQogICAgLS8qIHByb21wdCBzdGF0ZW1lbnQgKi8NCiAgICAtDQogICAgLXByb21wdF9z
dG10X29wdDoNCiAgICAtCSAgLyogZW1wdHkgKi8NCiAgICAtCXwgcHJvbXB0IGlmX2V4cHINCiAg
ICAtew0KICAgIC0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMSwgJDIpOw0KICAgIC19Ow0K
ICAgIC0NCiAgICAtcHJvbXB0OgkgIFRfV09SRA0KICAgIC0JfCBUX1dPUkRfUVVPVEUNCiAgICAt
Ow0KICAgIC0NCiAgICAtZW5kOgkgIFRfRU5ETUVOVSBUX0VPTAl7ICQkID0gJDE7IH0NCiAgICAt
CXwgVF9FTkRDSE9JQ0UgVF9FT0wJeyAkJCA9ICQxOyB9DQogICAgLQl8IFRfRU5ESUYgVF9FT0wJ
CXsgJCQgPSAkMTsgfQ0KICAgIC07DQogICAgLQ0KICAgIC1ubDoNCiAgICAtCSAgVF9FT0wNCiAg
ICAtCXwgbmwgVF9FT0wNCiAgICAtOw0KICAgIC0NCiAgICAtaWZfZXhwcjogIC8qIGVtcHR5ICov
CQkJeyAkJCA9IE5VTEw7IH0NCiAgICAtCXwgVF9JRiBleHByCQkJeyAkJCA9ICQyOyB9DQogICAg
LTsNCiAgICAtDQogICAgLWV4cHI6CSAgc3ltYm9sCQkJCXsgJCQgPSBleHByX2FsbG9jX3N5bWJv
bCgkMSk7IH0NCiAgICAtCXwgc3ltYm9sIFRfRVFVQUwgc3ltYm9sCQkJeyAkJCA9IGV4cHJfYWxs
b2NfY29tcChFX0VRVUFMLCAkMSwgJDMpOyB9DQogICAgLQl8IHN5bWJvbCBUX1VORVFVQUwgc3lt
Ym9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgJDEsICQzKTsgfQ0KICAgIC0J
fCBUX09QRU5fUEFSRU4gZXhwciBUX0NMT1NFX1BBUkVOCXsgJCQgPSAkMjsgfQ0KICAgIC0JfCBU
X05PVCBleHByCQkJCXsgJCQgPSBleHByX2FsbG9jX29uZShFX05PVCwgJDIpOyB9DQogICAgLQl8
IGV4cHIgVF9PUiBleHByCQkJeyAkJCA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsICQxLCAkMyk7IH0N
CiAgICAtCXwgZXhwciBUX0FORCBleHByCQkJeyAkJCA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCAk
MSwgJDMpOyB9DQogICAgLTsNCiAgICAtDQogICAgLXN5bWJvbDoJICBUX1dPUkQJeyAkJCA9IHN5
bV9sb29rdXAoJDEsIDApOyBmcmVlKCQxKTsgfQ0KICAgIC0JfCBUX1dPUkRfUVVPVEUJeyAkJCA9
IHN5bV9sb29rdXAoJDEsIFNZTUJPTF9DT05TVCk7IGZyZWUoJDEpOyB9DQogICAgLTsNCiAgICAt
DQogICAgLXdvcmRfb3B0OiAvKiBlbXB0eSAqLwkJCXsgJCQgPSBOVUxMOyB9DQogICAgLQl8IFRf
V09SRA0KICAgIC0NCiAgICAtJSUNCiAgICAtDQogICAgLXZvaWQgY29uZl9wYXJzZShjb25zdCBj
aGFyICpuYW1lKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlpbnQg
aTsNCiAgICAtDQogICAgLQl6Y29uZl9pbml0c2NhbihuYW1lKTsNCiAgICAtDQogICAgLQlzeW1f
aW5pdCgpOw0KICAgIC0JX21lbnVfaW5pdCgpOw0KICAgIC0Jcm9vdG1lbnUucHJvbXB0ID0gbWVu
dV9hZGRfcHJvbXB0KFBfTUVOVSwgIlVuaWtyYWZ0IENvbmZpZ3VyYXRpb24iLCBOVUxMKTsNCiAg
ICAtDQogICAgLQlpZiAoZ2V0ZW52KCJaQ09ORl9ERUJVRyIpKQ0KICAgIC0JCXpjb25mZGVidWcg
PSAxOw0KICAgIC0JemNvbmZwYXJzZSgpOw0KICAgIC0JaWYgKHpjb25mbmVycnMpDQogICAgLQkJ
ZXhpdCgxKTsNCiAgICAtCWlmICghbW9kdWxlc19zeW0pDQogICAgLQkJbW9kdWxlc19zeW0gPSBz
eW1fZmluZCggIm4iICk7DQogICAgLQ0KICAgIC0Jcm9vdG1lbnUucHJvbXB0LT50ZXh0ID0gXyhy
b290bWVudS5wcm9tcHQtPnRleHQpOw0KICAgIC0Jcm9vdG1lbnUucHJvbXB0LT50ZXh0ID0gc3lt
X2V4cGFuZF9zdHJpbmdfdmFsdWUocm9vdG1lbnUucHJvbXB0LT50ZXh0KTsNCiAgICAtDQogICAg
LQltZW51X2ZpbmFsaXplKCZyb290bWVudSk7DQogICAgLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3lt
KSB7DQogICAgLQkJaWYgKHN5bV9jaGVja19kZXBzKHN5bSkpDQogICAgLQkJCXpjb25mbmVycnMr
KzsNCiAgICAtICAgICAgICB9DQogICAgLQlpZiAoemNvbmZuZXJycykNCiAgICAtCQlleGl0KDEp
Ow0KICAgIC0Jc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7DQogICAgLX0NCiAgICAtDQogICAgLXN0
YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQ0KICAgIC17DQogICAg
LQlzd2l0Y2ggKHRva2VuKSB7DQogICAgLQljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7DQog
ICAgLQljYXNlIFRfRU5ETUVOVToJCXJldHVybiAiZW5kbWVudSI7DQogICAgLQljYXNlIFRfQ0hP
SUNFOgkJcmV0dXJuICJjaG9pY2UiOw0KICAgIC0JY2FzZSBUX0VORENIT0lDRToJcmV0dXJuICJl
bmRjaG9pY2UiOw0KICAgIC0JY2FzZSBUX0lGOgkJcmV0dXJuICJpZiI7DQogICAgLQljYXNlIFRf
RU5ESUY6CQlyZXR1cm4gImVuZGlmIjsNCiAgICAtCWNhc2UgVF9ERVBFTkRTOgkJcmV0dXJuICJk
ZXBlbmRzIjsNCiAgICAtCWNhc2UgVF9WSVNJQkxFOgkJcmV0dXJuICJ2aXNpYmxlIjsNCiAgICAt
CX0NCiAgICAtCXJldHVybiAiPHRva2VuPiI7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBi
b29sIHpjb25mX2VuZHRva2VuKGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRv
a2VuLCBpbnQgZW5kdG9rZW4pDQogICAgLXsNCiAgICAtCWlmIChpZC0+dG9rZW4gIT0gZW5kdG9r
ZW4pIHsNCiAgICAtCQl6Y29uZl9lcnJvcigidW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9j
ayIsDQogICAgLQkJCWtjb25mX2lkX3N0cmluZ3MgKyBpZC0+bmFtZSwgemNvbmZfdG9rZW5uYW1l
KHN0YXJ0dG9rZW4pKTsNCiAgICAtCQl6Y29uZm5lcnJzKys7DQogICAgLQkJcmV0dXJuIGZhbHNl
Ow0KICAgIC0JfQ0KICAgIC0JaWYgKGN1cnJlbnRfbWVudS0+ZmlsZSAhPSBjdXJyZW50X2ZpbGUp
IHsNCiAgICAtCQl6Y29uZl9lcnJvcigiJyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyci
LA0KICAgIC0JCQlrY29uZl9pZF9zdHJpbmdzICsgaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShz
dGFydHRva2VuKSk7DQogICAgLQkJZnByaW50ZihzdGRlcnIsICIlczolZDogbG9jYXRpb24gb2Yg
dGhlICclcydcbiIsDQogICAgLQkJCWN1cnJlbnRfbWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9t
ZW51LT5saW5lbm8sDQogICAgLQkJCXpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7DQogICAg
LQkJemNvbmZuZXJycysrOw0KICAgIC0JCXJldHVybiBmYWxzZTsNCiAgICAtCX0NCiAgICAtCXJl
dHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB6Y29uZnByaW50KGNv
bnN0IGNoYXIgKmVyciwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0NCiAg
ICAtCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCkpOw0KICAgIC0JdmFfc3RhcnQoYXAsIGVycik7DQogICAgLQl2ZnByaW50ZihzdGRlcnIs
IGVyciwgYXApOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiXG4i
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hh
ciAqZXJyLCAuLi4pDQogICAgLXsNCiAgICAtCXZhX2xpc3QgYXA7DQogICAgLQ0KICAgIC0JemNv
bmZuZXJycysrOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLQl2YV9zdGFydChhcCwgZXJyKTsNCiAgICAtCXZm
cHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7DQogICAgLQl2YV9lbmQoYXApOw0KICAgIC0JZnByaW50
ZihzdGRlcnIsICJcbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB6Y29uZmVy
cm9yKGNvbnN0IGNoYXIgKmVycikNCiAgICAtew0KICAgIC0JZnByaW50ZihzdGRlcnIsICIlczol
ZDogJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkgKyAxLCBlcnIpOw0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5nKEZJTEUgKm91
dCwgY29uc3QgY2hhciAqc3RyKQ0KICAgIC17DQogICAgLQljb25zdCBjaGFyICpwOw0KICAgIC0J
aW50IGxlbjsNCiAgICAtDQogICAgLQlwdXRjKCciJywgb3V0KTsNCiAgICAtCXdoaWxlICgocCA9
IHN0cmNocihzdHIsICciJykpKSB7DQogICAgLQkJbGVuID0gcCAtIHN0cjsNCiAgICAtCQlpZiAo
bGVuKQ0KICAgIC0JCQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4sIHN0cik7DQogICAgLQkJZnB1
dHMoIlxcXCIiLCBvdXQpOw0KICAgIC0JCXN0ciA9IHAgKyAxOw0KICAgIC0JfQ0KICAgIC0JZnB1
dHMoc3RyLCBvdXQpOw0KICAgIC0JcHV0YygnIicsIG91dCk7DQogICAgLX0NCiAgICAtDQogICAg
LXN0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51ICptZW51KQ0K
ICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgLQlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQ0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkN
CiAgICAtCQlmcHJpbnRmKG91dCwgIlxuY2hvaWNlXG4iKTsNCiAgICAtCWVsc2UNCiAgICAtCQlm
cHJpbnRmKG91dCwgIlxuY29uZmlnICVzXG4iLCBzeW0tPm5hbWUpOw0KICAgIC0Jc3dpdGNoIChz
eW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCWZwdXRzKCIgIGJvb2xl
YW5cbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNfVFJJU1RBVEU6DQogICAg
LQkJZnB1dHMoIiAgdHJpc3RhdGVcbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNl
IFNfU1RSSU5HOg0KICAgIC0JCWZwdXRzKCIgIHN0cmluZ1xuIiwgb3V0KTsNCiAgICAtCQlicmVh
azsNCiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQkJZnB1dHMoIiAgaW50ZWdlclxuIiwgb3V0KTsN
CiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQkJZnB1dHMoIiAgaGV4XG4i
LCBvdXQpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlmcHV0cygiICA/
Pz9cbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQlmb3IgKHByb3AgPSBz
eW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgLQkJaWYgKHByb3AtPm1l
bnUgIT0gbWVudSkNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJc3dpdGNoIChwcm9wLT50eXBl
KSB7DQogICAgLQkJY2FzZSBQX1BST01QVDoNCiAgICAtCQkJZnB1dHMoIiAgcHJvbXB0ICIsIG91
dCk7DQogICAgLQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAgICAt
CQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7DQogICAgLQkJCQlmcHV0
cygiIGlmICIsIG91dCk7DQogICAgLQkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxlLmV4cHIs
IG91dCk7DQogICAgLQkJCX0NCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJYnJl
YWs7DQogICAgLQkJY2FzZSBQX0RFRkFVTFQ6DQogICAgLQkJCWZwdXRzKCAiICBkZWZhdWx0ICIs
IG91dCk7DQogICAgLQkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAgLQkJCWlm
ICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgIC0JCQkJZnB1dHMoIiBp
ZiAiLCBvdXQpOw0KICAgIC0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQp
Ow0KICAgIC0JCQl9DQogICAgLQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCWNhc2UgUF9DSE9JQ0U6DQogICAgLQkJCWZwdXRzKCIgICNjaG9pY2UgdmFsdWVcbiIs
IG91dCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9TRUxFQ1Q6DQogICAgLQkJCWZw
dXRzKCAiICBzZWxlY3QgIiwgb3V0KTsNCiAgICAtCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwg
b3V0KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
Y2FzZSBQX1JBTkdFOg0KICAgIC0JCQlmcHV0cyggIiAgcmFuZ2UgIiwgb3V0KTsNCiAgICAtCQkJ
ZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX01FTlU6DQogICAgLQkJCWZwdXRzKCAiICBt
ZW51ICIsIG91dCk7DQogICAgLQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0
KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJZGVm
YXVsdDoNCiAgICAtCQkJZnByaW50ZihvdXQsICIgIHVua25vd24gcHJvcCAlZCFcbiIsIHByb3At
PnR5cGUpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlpZiAobWVu
dS0+aGVscCkgew0KICAgIC0JCWludCBsZW4gPSBzdHJsZW4obWVudS0+aGVscCk7DQogICAgLQkJ
d2hpbGUgKG1lbnUtPmhlbHBbLS1sZW5dID09ICdcbicpDQogICAgLQkJCW1lbnUtPmhlbHBbbGVu
XSA9IDA7DQogICAgLQkJZnByaW50ZihvdXQsICIgIGhlbHBcbiVzXG4iLCBtZW51LT5oZWxwKTsN
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KQ0K
ICAgIC17DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1Y3Qgc3ltYm9s
ICpzeW07DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtDQogICAgLQltZW51ID0gcm9v
dG1lbnUubGlzdDsNCiAgICAtCXdoaWxlIChtZW51KSB7DQogICAgLQkJaWYgKChzeW0gPSBtZW51
LT5zeW0pKQ0KICAgIC0JCQlwcmludF9zeW1ib2wob3V0LCBtZW51KTsNCiAgICAtCQllbHNlIGlm
ICgocHJvcCA9IG1lbnUtPnByb21wdCkpIHsNCiAgICAtCQkJc3dpdGNoIChwcm9wLT50eXBlKSB7
DQogICAgLQkJCWNhc2UgUF9DT01NRU5UOg0KICAgIC0JCQkJZnB1dHMoIlxuY29tbWVudCAiLCBv
dXQpOw0KICAgIC0JCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOw0KICAg
IC0JCQkJZnB1dHMoIlxuIiwgb3V0KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIFBf
TUVOVToNCiAgICAtCQkJCWZwdXRzKCJcbm1lbnUgIiwgb3V0KTsNCiAgICAtCQkJCXByaW50X3F1
b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAgICAtCQkJCWZwdXRzKCJcbiIsIG91dCk7
DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJZGVmYXVsdDoNCiAgICAtCQkJCTsNCiAgICAtCQkJ
fQ0KICAgIC0JCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAgICAt
CQkJCWZwdXRzKCIgIGRlcGVuZHMgIiwgb3V0KTsNCiAgICAtCQkJCWV4cHJfZnByaW50KHByb3At
PnZpc2libGUuZXhwciwgb3V0KTsNCiAgICAtCQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgLQkJ
CX0NCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCWlmIChtZW51LT5saXN0KQ0KICAgIC0JCQltZW51
ID0gbWVudS0+bGlzdDsNCiAgICAtCQllbHNlIGlmIChtZW51LT5uZXh0KQ0KICAgIC0JCQltZW51
ID0gbWVudS0+bmV4dDsNCiAgICAtCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkp
IHsNCiAgICAtCQkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9N
RU5VKQ0KICAgIC0JCQkJZnB1dHMoIlxuZW5kbWVudVxuIiwgb3V0KTsNCiAgICAtCQkJaWYgKG1l
bnUtPm5leHQpIHsNCiAgICAtCQkJCW1lbnUgPSBtZW51LT5uZXh0Ow0KICAgIC0JCQkJYnJlYWs7
DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLSNpbmNs
dWRlICJ6Y29uZi5sZXguYyINCiAgICAtI2luY2x1ZGUgInV0aWwuYyINCiAgICAtI2luY2x1ZGUg
ImNvbmZkYXRhLmMiDQogICAgLSNpbmNsdWRlICJleHByLmMiDQogICAgLSNpbmNsdWRlICJzeW1i
b2wuYyINCiAgICAtI2luY2x1ZGUgIm1lbnUuYyINCiAgICAtLSANCiAgICAyLjcuNA0KICAgIA0K
ICAgIA0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:54:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:54:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxp9-0003HJ-Se; Thu, 19 Sep 2019 14:54:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxbl-0000OF-Fk
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:40:33 +0000
X-Inumbo-ID: 6dc65e2a-daeb-11e9-9660-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 6dc65e2a-daeb-11e9-9660-12813bfff9fa;
 Thu, 19 Sep 2019 14:40:31 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 1D45D1056D8;
 Thu, 19 Sep 2019 16:40:30 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id j0AdkXuUM1ca; Thu, 19 Sep 2019 16:40:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 9A587105607
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:40:28 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:40:26 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:40:26
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 14/23] kconfig: Import
 kconfiglib
Thread-Index: AQHVbuLjhS2sqBPetk+L+SOmrNeSxaczEpEA
Date: Thu, 19 Sep 2019 14:40:25 +0000
Message-ID: <996F645A-710A-48B1-B640-C2BE1477D24C@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-15-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-15-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <5CD03E35437FE144B4FD44616BB98A67@office.hd>
MIME-Version: 1.0
X-Mailman-Approved-At: Thu, 19 Sep 2019 14:54:22 +0000
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 14/23] kconfig: Import
 kconfiglib
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCg0K77u/T24gMTku
MDkuMTksIDE0OjA4LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBTaGFyYW4gU2FudGhhbmFt
IiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9m
IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIEltcG9ydCBLY29uZmln
bGliIGZvciBwcm92aWRpbmcgcHl0aG9uIGJhc2VkIGZyb250IGVuZCB0byB0aGUga2NvbmZpZy4N
CiAgICANCiAgICBVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYg0K
ICAgIFRBRzogdjEyLjEzLjANCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhh
bmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAgICAgc3VwcG9ydC9r
Y29uZmlnbGliL0xJQ0VOU0UudHh0ICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnbGliL01BTklGRVNULmluICAgICAgICAgICAgICAgICAgICAgfCAgICAy
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL1JFQURNRS5yc3QgICAgICAgICAgICAgICAgICAg
ICAgfCAgODA2ICsrKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvYWxsZGVmY29uZmlnLnB5ICAg
ICAgICAgICAgICAgICB8ICAgMjcgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvYWxsbW9kY29u
ZmlnLnB5ICAgICAgICAgICAgICAgICB8ICAgNDYgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIv
YWxsbm9jb25maWcucHkgICAgICAgICAgICAgICAgICB8ICAgNDUgKw0KICAgICBzdXBwb3J0L2tj
b25maWdsaWIvYWxseWVzY29uZmlnLnB5ICAgICAgICAgICAgICAgICB8ICAgNTYgKw0KICAgICBz
dXBwb3J0L2tjb25maWdsaWIvZGVmY29uZmlnLnB5ICAgICAgICAgICAgICAgICAgICB8ICAgNDMg
Kw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvS21lbnVjb25maWcgICAgICAgICAg
ICB8ICAxMDIgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvYWxsbm9jb25maWdf
d2Fsay5weSAgICB8ICAgNjYgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZGVm
Y29uZmlnX29sZGNvbmZpZy5weSB8ICAgMzkgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhh
bXBsZXMvZHVtcHZhcnMucHkgICAgICAgICAgICB8ICAgMTUgKw0KICAgICBzdXBwb3J0L2tjb25m
aWdsaWIvZXhhbXBsZXMvZXZhbF9leHByLnB5ICAgICAgICAgICB8ICAgMjQgKw0KICAgICBzdXBw
b3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZmluZF9zeW1ib2wucHkgICAgICAgICB8ICAxMTIgKw0K
ICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvaGVscF9ncmVwLnB5ICAgICAgICAgICB8
ICAgNjQgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMva2NvbmZpZ2xpYi5weSAg
ICAgICAgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvbGlzdF91
bmRlZmluZWQucHkgICAgICB8ICAxNTYgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBs
ZXMvbWVudWNvbmZpZ19leGFtcGxlLnB5ICB8ICAzNDEgKw0KICAgICBzdXBwb3J0L2tjb25maWds
aWIvZXhhbXBsZXMvbWVyZ2VfY29uZmlnLnB5ICAgICAgICB8ICAxMzMgKw0KICAgICBzdXBwb3J0
L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfY29uZmlnX3RyZWUucHkgICB8ICAxOTkgKw0KICAg
ICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfc3ltX2luZm8ucHkgICAgICB8ICAg
NTQgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfdHJlZS5weSAgICAg
ICAgICB8ICAgNzUgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZ2VuY29uZmlnLnB5ICAgICAg
ICAgICAgICAgICAgICB8ICAxMzIgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvZ3VpY29uZmln
LnB5ICAgICAgICAgICAgICAgICAgICB8IDIzMTYgKysrKysrKw0KICAgICBzdXBwb3J0L2tjb25m
aWdsaWIva2NvbmZpZ2xpYi5weSAgICAgICAgICAgICAgICAgICB8IDcwMTggKysrKysrKysrKysr
KysrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL2xpc3RuZXdjb25maWcucHkgICAgICAg
ICAgICAgICAgfCAgIDQ3ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL21ha2VmaWxlLnBhdGNo
ICAgICAgICAgICAgICAgICAgfCAgIDQ4ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL21lbnVj
b25maWcucHkgICAgICAgICAgICAgICAgICAgfCAzMjY0ICsrKysrKysrKw0KICAgICBzdXBwb3J0
L2tjb25maWdsaWIvb2xkY29uZmlnLnB5ICAgICAgICAgICAgICAgICAgICB8ICAyNDYgKw0KICAg
ICBzdXBwb3J0L2tjb25maWdsaWIvb2xkZGVmY29uZmlnLnB5ICAgICAgICAgICAgICAgICB8ICAg
MjggKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvc2F2ZWRlZmNvbmZpZy5weSAgICAgICAgICAg
ICAgICB8ICAgNDkgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvc2V0Y29uZmlnLnB5ICAgICAg
ICAgICAgICAgICAgICB8ICAgOTIgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvc2V0dXAuY2Zn
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIv
c2V0dXAucHkgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMDAgKw0KICAgICBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2FwcGVuZCAgICAgICAgICAgICAgICAgICB8ICAgMTIgKw0KICAgICBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Fzc2lnbmFibGUgICAgICAgICAgICAgICB8ICAyMzAg
Kw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Nob2ljZSAgICAgICAgICAgICAgICAg
ICB8ICAxOTggKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19leGlz
dGVudCAgICAgICB8ICAgIDggKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNv
bmZpZ19leGlzdGVudF9idXRfbiB8ICAgMTAgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2RlZmNvbmZpZ19ub25leGlzdGVudCAgICB8ICAgIDUgKw0KICAgICBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19zcmN0cmVlICAgICAgICB8ICAgIDUgKw0KICAgICBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGNvcHkgICAgICAgICAgICAgICAgICB8ICAxNzMgKw0K
ICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AwICAgICAgICAgICAgICAgICB8
ICAgIDMgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AxICAgICAgICAg
ICAgICAgICB8ICAgIDMgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3Ax
MCAgICAgICAgICAgICAgICB8ICAgNDggKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2RlcGxvb3AyICAgICAgICAgICAgICAgICB8ICAgIDMgKw0KICAgICBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2RlcGxvb3AzICAgICAgICAgICAgICAgICB8ICAgIDMgKw0KICAgICBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A0ICAgICAgICAgICAgICAgICB8ICAgIDcgKw0KICAg
ICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A1ICAgICAgICAgICAgICAgICB8ICAg
IDcgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A2ICAgICAgICAgICAg
ICAgICB8ICAgIDYgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A3ICAg
ICAgICAgICAgICAgICB8ICAgMTEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Rl
cGxvb3A4ICAgICAgICAgICAgICAgICB8ICAgIDggKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2RlcGxvb3A5ICAgICAgICAgICAgICAgICB8ICAgIDcgKw0KICAgICBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RpcmRlcCAgICAgICAgICAgICAgICAgICB8ICAgMzAgKw0KICAgICBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2VzY2FwZSAgICAgICAgICAgICAgICAgICB8ICAgIDMg
Kw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2V2YWwgICAgICAgICAgICAgICAgICAg
ICB8ICAgMzQgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2V4cHJfaXRlbXMgICAg
ICAgICAgICAgICB8ICAgMTEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2hlbHAg
ICAgICAgICAgICAgICAgICAgICB8ICAgNTAgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2lmcmVtb3ZhbCAgICAgICAgICAgICAgICB8ICAgOTkgKw0KICAgICBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS2ltcGx5ICAgICAgICAgICAgICAgICAgICB8ICAxNDUgKw0KICAgICBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aCAgICAgICAgICAgICB8ICAgMTIgKw0K
ICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzEgICB8
ICAgMTIgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aF9zb3Vy
Y2VkXzIgICB8ICAgMTEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2l0ZW1saXN0
cyAgICAgICAgICAgICAgICB8ICAgMzYgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2xvY2F0aW9uICAgICAgICAgICAgICAgICB8ICAgNzIgKw0KICAgICBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2xvY2F0aW9uX3NvdXJjZWQgICAgICAgICB8ICAgMTggKw0KICAgICBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvS21haW5tZW51ICAgICAgICAgICAgICAgICB8ICAgIDUgKw0KICAg
ICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21lbnVjb25maWcgICAgICAgICAgICAgICB8ICAg
MzcgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc2MgICAgICAgICAgICAgICAg
ICAgICB8ICAgODIgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc3Npbmdyc291
cmNlICAgICAgICAgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21p
c3Npbmdzb3VyY2UgICAgICAgICAgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS29yZGVyICAgICAgICAgICAgICAgICAgICB8ICAgMzUgKw0KICAgICBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS3ByZXByb2Nlc3MgICAgICAgICAgICAgICB8ICAxNDcgKw0KICAgICBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JhbmdlICAgICAgICAgICAgICAgICAgICB8ICAxMzMg
Kw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JlY3Vyc2l2ZTEgICAgICAgICAgICAg
ICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JlY3Vyc2l2ZTIgICAg
ICAgICAgICAgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JlZmVy
ZW5jZWQgICAgICAgICAgICAgICB8ICAgNjMgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS3JlbGF0aW9uICAgICAgICAgICAgICAgICB8ICAgMzYgKw0KICAgICBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS3JlcHIgICAgICAgICAgICAgICAgICAgICB8ICAgNjQgKw0KICAgICBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS3N0ciAgICAgICAgICAgICAgICAgICAgICB8ICAyOTMgKw0K
ICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3VuZGVmICAgICAgICAgICAgICAgICAgICB8
ICAgMjMgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3VzZXJmdW5jdGlvbnMgICAg
ICAgICAgICB8ICAgMTEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3Zpc2liaWxp
dHkgICAgICAgICAgICAgICB8ICAzNDIgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
Y29uZmlnX2luZGVudGVkICAgICAgICAgICB8ICAgIDMgKw0KICAgICBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvY29uZmlnX3NldF9ib29sICAgICAgICAgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvY29uZmlnX3NldF9zdHJpbmcgICAgICAgICB8ICAgIDEgKw0KICAg
ICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvZGVmY29uZmlnXzEgICAgICAgICAgICAgICB8ICAg
IDANCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2RlZmNvbmZpZ18yICAgICAgICAgICAg
ICAgfCAgICAwDQogICAgIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9lbXB0eSAgICAgICAgICAg
ICAgICAgICAgIHwgICAgMA0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMva2NvbmZpZ2Z1
bmN0aW9ucy5weSAgICAgICB8ICAgMTQgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
cmVsdGVzdCAgICAgICAgICAgICAgICAgICB8ICAgNTEgKw0KICAgICBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18yICAgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18zICAgICB8ICAgIDIgKw0KICAg
ICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWQxICB8ICAg
IDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJj
ZWQyICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlv
bl9nc291cmNlZDEgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3Vi
L0tsb2NhdGlvbl9nc291cmNlZDIgICB8ICAgIDEgKw0KICAgICBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvc3ViL0tsb2NhdGlvbl9yc291cmNlZCAgICB8ICAgIDIgKw0KICAgICBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvc3ViL2RlZmNvbmZpZ19pbl9zdWIgICAgICB8ICAgIDANCiAgICAgc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9zdWIvS2NvbmZpZ19zeW1saW5rXzEgfCAgICAyICsN
CiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N5bWxpbmsgICAgICAgICAgICAgICAgICAg
fCAgICAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzdWl0ZS5weSAgICAgICAgICAg
ICAgICAgICAgfCAzMTM2ICsrKysrKysrKw0KICAgICAxMDIgZmlsZXMgY2hhbmdlZCwgMjE1MzEg
aW5zZXJ0aW9ucygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L0xJQ0VOU0UudHh0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
TUFOSUZFU1QuaW4NCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9S
RUFETUUucnN0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvYWxs
ZGVmY29uZmlnLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIv
YWxsbW9kY29uZmlnLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWds
aWIvYWxsbm9jb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZp
Z2xpYi9hbGx5ZXNjb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2Nv
bmZpZ2xpYi9kZWZjb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZ2xpYi9leGFtcGxlcy9LbWVudWNvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2FsbG5vY29uZmlnX3dhbGsucHkNCiAgICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9kZWZjb25maWdfb2xkY29u
ZmlnLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBs
ZXMvZHVtcHZhcnMucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi9leGFtcGxlcy9ldmFsX2V4cHIucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZ2xpYi9leGFtcGxlcy9maW5kX3N5bWJvbC5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2hlbHBfZ3JlcC5weQ0KICAgICBjcmVhdGUg
bW9kZSAxMjAwMDAgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2tjb25maWdsaWIucHkNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9saXN0X3Vu
ZGVmaW5lZC5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnbGliL2V4
YW1wbGVzL21lbnVjb25maWdfZXhhbXBsZS5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA3NTUgc3Vw
cG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL21lcmdlX2NvbmZpZy5weQ0KICAgICBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL3ByaW50X2NvbmZpZ190cmVlLnB5
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJp
bnRfc3ltX2luZm8ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi9leGFtcGxlcy9wcmludF90cmVlLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0
L2tjb25maWdsaWIvZ2VuY29uZmlnLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0
L2tjb25maWdsaWIvZ3VpY29uZmlnLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWdsaWIva2NvbmZpZ2xpYi5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9y
dC9rY29uZmlnbGliL2xpc3RuZXdjb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi9tYWtlZmlsZS5wYXRjaA0KICAgICBjcmVhdGUgbW9kZSAxMDA3NTUg
c3VwcG9ydC9rY29uZmlnbGliL21lbnVjb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1
IHN1cHBvcnQva2NvbmZpZ2xpYi9vbGRjb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1
IHN1cHBvcnQva2NvbmZpZ2xpYi9vbGRkZWZjb25maWcucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NzU1IHN1cHBvcnQva2NvbmZpZ2xpYi9zYXZlZGVmY29uZmlnLnB5DQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDc1NSBzdXBwb3J0L2tjb25maWdsaWIvc2V0Y29uZmlnLnB5DQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvc2V0dXAuY2ZnDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWdsaWIvc2V0dXAucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LYXBwZW5kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Fzc2lnbmFibGUNCiAgICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LY2hvaWNlDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19leGlzdGVudA0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdf
ZXhpc3RlbnRfYnV0X24NCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LZGVmY29uZmlnX25vbmV4aXN0ZW50DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19zcmN0cmVlDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGNvcHkNCiAgICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDANCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDENCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDEwDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3Ay
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxv
b3AzDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Rl
cGxvb3A0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2RlcGxvb3A1DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2RlcGxvb3A2DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2RlcGxvb3A3DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS2RlcGxvb3A4DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS2RlcGxvb3A5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RpcmRlcA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0tlc2NhcGUNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9LZXZhbA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0tleHByX2l0ZW1zDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS2hlbHANCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LaWZyZW1vdmFsDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2ltcGx5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aA0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8xDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVf
cGF0aF9zb3VyY2VkXzINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LaXRlbWxpc3RzDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvS2xvY2F0aW9uDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2xvY2F0aW9uX3NvdXJjZWQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWFpbm1lbnUNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWVudWNvbmZpZw0KICAgICBjcmVhdGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNjDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc3Npbmdyc291cmNlDQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc3Npbmdzb3VyY2UN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9Lb3JkZXIN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcHJlcHJv
Y2Vzcw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ty
YW5nZQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ty
ZWN1cnNpdmUxDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS3JlY3Vyc2l2ZTINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LcmVmZXJlbmNlZA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tyZWxhdGlvbg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0tyZXByDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS3N0cg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0t1bmRlZg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0t1c2VyZnVuY3Rpb25zDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS3Zpc2liaWxpdHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfaW5kZW50ZWQNCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfc2V0X2Jvb2wNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfc2V0X3N0
cmluZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2Rl
ZmNvbmZpZ18xDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvZGVmY29uZmlnXzINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9lbXB0eQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL2tjb25maWdmdW5jdGlvbnMucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9yZWx0ZXN0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18yDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18z
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0ts
b2NhdGlvbl9ncnNvdXJjZWQxDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWQyDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9nc291cmNlZDENCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0
aW9uX2dzb3VyY2VkMg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL3N1Yi9LbG9jYXRpb25fcnNvdXJjZWQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvZGVmY29uZmlnX2luX3N1Yg0KICAgICBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9zdWIvS2NvbmZpZ19zeW1s
aW5rXzENCiAgICAgY3JlYXRlIG1vZGUgMTIwMDAwIHN1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9z
eW1saW5rDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWdsaWIvdGVzdHN1
aXRlLnB5DQogICAgDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9MSUNFTlNF
LnR4dCBiL3N1cHBvcnQva2NvbmZpZ2xpYi9MSUNFTlNFLnR4dA0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uOGIzMWVmYw0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvTElDRU5TRS50eHQNCiAgICBAQCAtMCwwICsxLDUg
QEANCiAgICArQ29weXJpZ2h0IChjKSAyMDExLTIwMTksIFVsZiBNYWdudXNzb24gPHVsZmFsaXpl
ckBnbWFpbC5jb20+DQogICAgKw0KICAgICtQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5
LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSB3aXRoIG9y
IHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwg
Y29waWVzLg0KICAgICsNCiAgICArVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5E
IFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMg
U09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBE
QVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdF
TkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVD
VElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4NCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL01BTklGRVNULmluIGIvc3VwcG9ydC9rY29u
ZmlnbGliL01BTklGRVNULmluDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAw
MDAwMDAwLi44ODFhNzk0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2Nv
bmZpZ2xpYi9NQU5JRkVTVC5pbg0KICAgIEBAIC0wLDAgKzEsMiBAQA0KICAgICsjIEluY2x1ZGUg
dGhlIGxpY2Vuc2UgZmlsZSBpbiBzb3VyY2UgZGlzdHJpYnV0aW9ucw0KICAgICtpbmNsdWRlIExJ
Q0VOU0UudHh0DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9SRUFETUUucnN0
IGIvc3VwcG9ydC9rY29uZmlnbGliL1JFQURNRS5yc3QNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLmJkYmQ0NTcNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnbGliL1JFQURNRS5yc3QNCiAgICBAQCAtMCwwICsxLDgwNiBAQA0K
ICAgICsuLiBjb250ZW50czo6IFRhYmxlIG9mIGNvbnRlbnRzDQogICAgKyAgIDpiYWNrbGlua3M6
IG5vbmUNCiAgICArDQogICAgK092ZXJ2aWV3DQogICAgKy0tLS0tLS0tDQogICAgKw0KICAgICtL
Y29uZmlnbGliIGlzIGEgYEtjb25maWcNCiAgICArPGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxk
cy9saW51eC9ibG9iL21hc3Rlci9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdl
LnJzdD5gX18NCiAgICAraW1wbGVtZW50YXRpb24gaW4gUHl0aG9uIDIvMy4gSXQgc3RhcnRlZCBv
dXQgYXMgYSBoZWxwZXIgbGlicmFyeSwgYnV0IG5vdyBoYXMgYQ0KICAgICtlbm91Z2ggZnVuY3Rp
b25hbGl0eSB0byBhbHNvIHdvcmsgd2VsbCBhcyBhIHN0YW5kYWxvbmUgS2NvbmZpZyBpbXBsZW1l
bnRhdGlvbg0KICAgICsoaW5jbHVkaW5nIGB0ZXJtaW5hbCBhbmQgR1VJIG1lbnVjb25maWcgaW50
ZXJmYWNlcyA8TWVudWNvbmZpZyBpbnRlcmZhY2VzXz5gXw0KICAgICthbmQgYEtjb25maWcgZXh0
ZW5zaW9uc2BfKS4NCiAgICArDQogICAgK1RoZSBlbnRpcmUgbGlicmFyeSBpcyBjb250YWluZWQg
aW4gYGtjb25maWdsaWIucHkNCiAgICArPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2Nv
bmZpZ2xpYi9ibG9iL21hc3Rlci9rY29uZmlnbGliLnB5PmBfLiBUaGUNCiAgICArYnVuZGxlZCBz
Y3JpcHRzIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgaXQuIEltcGxlbWVudGluZyB5b3VyIG93
biBzY3JpcHRzDQogICAgK3Nob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3ksIGlmIG5lZWRlZC4NCiAg
ICArDQogICAgK0tjb25maWdsaWIgaXMgdXNlZCBleGNsdXNpdmVseSBieSBlLmcuIHRoZSBgWmVw
aHlyIDxodHRwczovL3d3dy56ZXBoeXJwcm9qZWN0Lm9yZy8+YF8gDQogICAgK2FuZCBgQUNSTiA8
aHR0cHM6Ly9wcm9qZWN0YWNybi5vcmcvPmBfIHByb2plY3RzLiBJdCBpcyBhbHNvIHVzZWQgZm9y
IG1hbnkgc21hbGwgaGVscGVyDQogICAgK3NjcmlwdHMgaW4gdmFyaW91cyBwcm9qZWN0cy4NCiAg
ICArDQogICAgK1NpbmNlIEtjb25maWdsaWIgaXMgYmFzZWQgYXJvdW5kIGEgbGlicmFyeSwgaXQg
Y2FuIGJlIHVzZWQgZS5nLiB0byBnZW5lcmF0ZSBhDQogICAgK2BLY29uZmlnIGNyb3NzLXJlZmVy
ZW5jZSA8aHR0cHM6Ly9kb2NzLnplcGh5cnByb2plY3Qub3JnL2xhdGVzdC9yZWZlcmVuY2Uva2Nv
bmZpZy9pbmRleC5odG1sPmBfIChub3RlOiBoZWF2eSBwYWdlKSwNCiAgICArdXNpbmcgdGhlIHNh
bWUgcm9idXN0IEtjb25maWcgcGFyc2VyIHVzZWQgZm9yIG90aGVyIEtjb25maWcgdG9vbHMsIGlu
c3RlYWQgb2YgYnJpdHRsZSBhZC1ob2MgcGFyc2luZy4gVGhlIGRvY3VtZW50YXRpb24gZ2VuZXJh
dGlvbiBzY3JpcHQgY2FuIGJlIGZvdW5kIGBoZXJlIDxodHRwczovL2dpdGh1Yi5jb20vemVwaHly
cHJvamVjdC1ydG9zL3plcGh5ci9ibG9iL21hc3Rlci9kb2Mvc2NyaXB0cy9nZW5yZXN0LnB5PmBf
Xy4NCiAgICArDQogICAgK0tjb25maWdsaWIgaW1wbGVtZW50cyB0aGUgcmVjZW50bHkgYWRkZWQg
YEtjb25maWcgcHJlcHJvY2Vzc29yDQogICAgKzxodHRwczovL2dpdGh1Yi5jb20vdG9ydmFsZHMv
bGludXgvYmxvYi9tYXN0ZXIvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1tYWNyby1sYW5n
dWFnZS5yc3Q+YF9fLg0KICAgICtGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGVudmlyb25t
ZW50IHZhcmlhYmxlcyBjYW4gYmUgcmVmZXJlbmNlZCBib3RoIGFzDQogICAgK2BgJChGT08pYGAg
KHRoZSBuZXcgc3ludGF4KSBhbmQgYXMgYGAkRk9PYGAgKHRoZSBvbGQgc3ludGF4KS4gVGhlIG9s
ZCBzeW50YXggaXMNCiAgICArZGVwcmVjYXRlZCwgYnV0IHdpbGwgcHJvYmFibHkgYmUgc3VwcG9y
dGVkIGZvciBhIGxvbmcgdGltZSwgYXMgaXRzIG5lZWRlZCB0bw0KICAgICtzdGF5IGNvbXBhdGli
bGUgd2l0aCBvbGRlciBMaW51eCBrZXJuZWxzLiBUaGUgbWFqb3IgdmVyc2lvbiB3aWxsIGJlIGlu
Y3JlYXNlZA0KICAgICtpZiBzdXBwb3J0IGlzIGV2ZXIgZHJvcHBlZC4gVXNpbmcgdGhlIG9sZCBz
eW50YXggd2l0aCBhbiB1bmRlZmluZWQgZW52aXJvbm1lbnQNCiAgICArdmFyaWFibGUga2VlcHMg
dGhlIHN0cmluZyBhcyBpcy4NCiAgICArDQogICAgK05vdGU6IFNlZSBgdGhpcyBpc3N1ZSA8aHR0
cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2lzc3Vlcy80Nz5gXyBpZiB5b3Ug
cnVuIGludG8NCiAgICArYSAibWFjcm8gZXhwYW5kZWQgdG8gYmxhbmsgc3RyaW5nIiBlcnJvciB3
aXRoIGtlcm5lbCA0LjE4Ky4NCiAgICArDQogICAgK1NlZSBgdGhpcyBwYWdlDQogICAgKzxodHRw
czovL2RvY3MuemVwaHlycHJvamVjdC5vcmcvbGF0ZXN0L2d1aWRlcy9rY29uZmlnL2luZGV4Lmh0
bWw+YF9fIGZvciBzb21lDQogICAgK0tjb25maWcgdGlwcyBhbmQgYmVzdCBwcmFjdGljZXMuDQog
ICAgKw0KICAgICtJbnN0YWxsYXRpb24NCiAgICArLS0tLS0tLS0tLS0tDQogICAgKw0KICAgICtJ
bnN0YWxsYXRpb24gd2l0aCBwaXANCiAgICArfn5+fn5+fn5+fn5+fn5+fn5+fn5+DQogICAgKw0K
ICAgICtLY29uZmlnbGliIGlzIGF2YWlsYWJsZSBvbiBgUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhv
bi5vcmcvcHlwaS9rY29uZmlnbGliLz5gXyBhbmQgY2FuIGJlDQogICAgK2luc3RhbGxlZCB3aXRo
IGUuZy4NCiAgICArDQogICAgKy4uIGNvZGU6Og0KICAgICsNCiAgICArICAgICQgcGlwKDMpIGlu
c3RhbGwga2NvbmZpZ2xpYg0KICAgICsNCiAgICArTWljcm9zb2Z0IFdpbmRvd3MgaXMgc3VwcG9y
dGVkLg0KICAgICsNCiAgICArVGhlIGBgcGlwYGAgaW5zdGFsbGF0aW9uIHdpbGwgZ2l2ZSB5b3Ug
Ym90aCB0aGUgYmFzZSBsaWJyYXJ5IGFuZCB0aGUgZm9sbG93aW5nDQogICAgK2V4ZWN1dGFibGVz
LiBBbGwgYnV0IHR3byAoYGBnZW5jb25maWdgYCBhbmQgYGBzZXRjb25maWdgYCkgbWlycm9yIGZ1
bmN0aW9uYWxpdHkNCiAgICArYXZhaWxhYmxlIGluIHRoZSBDIHRvb2xzLg0KICAgICsNCiAgICAr
LSBgbWVudWNvbmZpZyA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2Js
b2IvbWFzdGVyL21lbnVjb25maWcucHk+YF8NCiAgICArDQogICAgKy0gYGd1aWNvbmZpZyA8aHR0
cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL2d1aWNvbmZp
Zy5weT5gXw0KICAgICsNCiAgICArLSBgb2xkY29uZmlnIDxodHRwczovL2dpdGh1Yi5jb20vdWxm
YWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIvb2xkY29uZmlnLnB5PmBfDQogICAgKw0KICAg
ICstIGBvbGRkZWZjb25maWcgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xp
Yi9ibG9iL21hc3Rlci9vbGRkZWZjb25maWcucHk+YF8NCiAgICArDQogICAgKy0gYHNhdmVkZWZj
b25maWcgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rl
ci9zYXZlZGVmY29uZmlnLnB5PmBfDQogICAgKw0KICAgICstIGBkZWZjb25maWcgPGh0dHBzOi8v
Z2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9kZWZjb25maWcucHk+
YF8NCiAgICArDQogICAgKy0gYGFsbGRlZmNvbmZpZyA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFs
aXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL2FsbGRlZmNvbmZpZy5weT5gXw0KICAgICsNCiAg
ICArLSBgYWxsbm9jb25maWcgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xp
Yi9ibG9iL21hc3Rlci9hbGxub2NvbmZpZy5weT5gXw0KICAgICsNCiAgICArLSBgYWxsbW9kY29u
ZmlnIDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIv
YWxsbW9kY29uZmlnLnB5PmBfDQogICAgKw0KICAgICstIGBhbGx5ZXNjb25maWcgPGh0dHBzOi8v
Z2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9hbGx5ZXNjb25maWcu
cHk+YF8NCiAgICArDQogICAgKy0gYGxpc3RuZXdjb25maWcgPGh0dHBzOi8vZ2l0aHViLmNvbS91
bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9saXN0bmV3Y29uZmlnLnB5PmBfDQogICAg
Kw0KICAgICstIGBnZW5jb25maWcgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZp
Z2xpYi9ibG9iL21hc3Rlci9nZW5jb25maWcucHk+YF8NCiAgICArDQogICAgKy0gYHNldGNvbmZp
ZyA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL3Nl
dGNvbmZpZy5weT5gXw0KICAgICsNCiAgICArYGBnZW5jb25maWdgYCBpcyBpbnRlbmRlZCB0byBi
ZSBydW4gYXQgYnVpbGQgdGltZS4gSXQgZ2VuZXJhdGVzIGEgQyBoZWFkZXIgZnJvbQ0KICAgICt0
aGUgY29uZmlndXJhdGlvbiBhbmQgKG9wdGlvbmFsbHkpIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJl
IHVzZWQgdG8gcmVidWlsZCBvbmx5DQogICAgK2ZpbGVzIHRoYXQgcmVmZXJlbmNlIEtjb25maWcg
c3ltYm9scyB0aGF0IGhhdmUgY2hhbmdlZCB2YWx1ZS4NCiAgICArDQogICAgK1N0YXJ0aW5nIHdp
dGggS2NvbmZpZ2xpYiB2ZXJzaW9uIDEyLjIuMCwgYWxsIHV0aWxpdGllcyBhcmUgY29tcGF0aWJs
ZSB3aXRoIGJvdGgNCiAgICArUHl0aG9uIDIgYW5kIFB5dGhvbiAzLiBQcmV2aW91c2x5LCBgYG1l
bnVjb25maWcucHlgYCBvbmx5IHJhbiB1bmRlciBQeXRob24gMw0KICAgICsoaS5lLiwgaXQncyBu
b3cgbW9yZSBiYWNrd2FyZHMgY29tcGF0aWJsZSB0aGFuIGJlZm9yZSkuDQogICAgKw0KICAgICsq
Kk5vdGU6KiogSWYgeW91IGluc3RhbGwgS2NvbmZpZ2xpYiB3aXRoIGBgcGlwYGAncyBgYC0tdXNl
cmBgIGZsYWcsIG1ha2Ugc3VyZQ0KICAgICt0aGF0IHlvdXIgYGBQQVRIYGAgaW5jbHVkZXMgdGhl
IGRpcmVjdG9yeSB3aGVyZSB0aGUgZXhlY3V0YWJsZXMgZW5kIHVwLiBZb3UgY2FuDQogICAgK2xp
c3QgdGhlIGluc3RhbGxlZCBmaWxlcyB3aXRoIGBgcGlwKDMpIHNob3cgLWYga2NvbmZpZ2xpYmBg
Lg0KICAgICsNCiAgICArQWxsIHJlbGVhc2VzIGhhdmUgYSBjb3JyZXNwb25kaW5nIHRhZyBpbiB0
aGUgZ2l0IHJlcG9zaXRvcnksIGUuZy4gYGB2MTIuMTMuMGBgDQogICAgKyh0aGUgbGF0ZXN0IHZl
cnNpb24pLg0KICAgICsNCiAgICArYFNlbWFudGljIHZlcnNpb25pbmcgPGh0dHA6Ly9zZW12ZXIu
b3JnLz5gXyBpcyB1c2VkLiBUaGVyZSdzIGJlZW4NCiAgICArdGVuIHNtYWxsIGNoYW5nZXMgKGAx
IDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvY29tbWl0L2U4YjRlY2I2
ZmY2Y2NjMWM3YmUwODE4MzE0ZmJjY2RhMmVmMmIyZWU+YF8sDQogICAgK2AyIDxodHRwczovL2dp
dGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvY29tbWl0L2RiNjMzMDE1YTRkN2IwYmExZTg4
MmY2NjVlMTkxZjM1MDkzMmIyYWY+YF8sDQogICAgK2AzIDxodHRwczovL2dpdGh1Yi5jb20vdWxm
YWxpemVyL0tjb25maWdsaWIvY29tbWl0Lzg5ODNmN2ViMjk3ZGQ2MTRmYWYwYmVlZTMxMjk1NTli
YzhiYTMzOGU+YF8sDQogICAgK2A0IDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25m
aWdsaWIvY29tbWl0L2NiZjMyZTI5YTEzMGQyMmJjNzM0Yjc3NzhlNjMwNGFjOWRmMmEzZTg+YF8s
DQogICAgK2A1IDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvY29tbWl0
L2ViNmMyMWE5YjMzYTJkNmUyYmVkOTg4MmQ0ZjkzMGQwY2FiMmYwM2I+YF8sDQogICAgK2A2IDxo
dHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvY29tbWl0L2MxOWZjMTEzNTVi
MTNkNzVkOTcyODY0MDJjN2E5MzNmYjIzZDNiNzA+YF8sDQogICAgK2A3IDxodHRwczovL2dpdGh1
Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvY29tbWl0LzdhNDI4YWE0MTU2MDY4MjBhNDQyOTFm
NDc1MjQ4YjA4ZTM5NTJjNGI+YF8sDQogICAgK2A4IDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxp
emVyL0tjb25maWdsaWIvY29tbWl0L2YyNDdkZGY2MThhZDI5NzE4ZTVlZmQzZTY5ZjhiYWY3NWQ0
ZDM0N2I+YF8sDQogICAgK2A5IDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWds
aWIvY29tbWl0LzRmZWQzOWQ5MjcxY2ViNjhiZTQxNTdhYjNmOTZhNDViOTRmNzdkYzA+YF8sDQog
ICAgK2AxMCA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2NvbW1pdC81
NWJjOGMzODA4NjllYTY2MzA5MjIxMmU4ZmUzODhhZDdhYmFlNTk2PmBfKQ0KICAgICt0byB0aGUg
YmVoYXZpb3Igb2YgdGhlIEFQSSwgd2hpY2ggaXMgd2h5IHRoZSBtYWpvciB2ZXJzaW9uIGlzIGF0
IDEyIHJhdGhlciB0aGFuDQogICAgKzIuIEkgZG8gbWFqb3IgdmVyc2lvbiBidW1wcyBmb3IgYWxs
IGJlaGF2aW9yIGNoYW5nZXMsIGV2ZW4gdGlueSBvbmVzLCBhbmQgbW9zdCBvZiB0aGVzZSB3ZXJl
DQogICAgK2ZpeGVzIGZvciBiYWJ5IGlzc3VlcyBpbiB0aGUgZWFybHkgZGF5cyBvZiB0aGUgS2Nv
bmZpZ2xpYiAyIEFQSS4NCiAgICArDQogICAgK01hbnVhbCBpbnN0YWxsYXRpb24NCiAgICArfn5+
fn5+fn5+fn5+fn5+fn5+fg0KICAgICsNCiAgICArSnVzdCBkcm9wIGBga2NvbmZpZ2xpYi5weWBg
IGFuZCB0aGUgc2NyaXB0cyB5b3Ugd2FudCBzb21ld2hlcmUuIFRoZXJlIGFyZSBubw0KICAgICt0
aGlyZC1wYXJ0eSBkZXBlbmRlbmNpZXMgKGV4Y2VwdCBmb3IgdGhlIGB3aW5kb3dzLWN1cnNlcw0K
ICAgICs8aHR0cHM6Ly9naXRodWIuY29tL3plcGh5cnByb2plY3QtcnRvcy93aW5kb3dzLWN1cnNl
cz5gXyBwYWNrYWdlIG9uIFdpbmRvd3MsDQogICAgK3doZW4gcnVubmluZyB0aGUgdGVybWluYWwg
YGBtZW51Y29uZmlnYGAgaW1wbGVtZW50YXRpb24pLg0KICAgICsNCiAgICArSW5zdGFsbGF0aW9u
IGZvciB0aGUgTGludXgga2VybmVsDQogICAgK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fg0KICAgICsNCiAgICArU2VlIHRoZSBtb2R1bGUgZG9jc3RyaW5nIGF0IHRoZSB0b3Agb2Yg
YGtjb25maWdsaWIucHkgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9i
bG9iL21hc3Rlci9rY29uZmlnbGliLnB5PmBfLg0KICAgICsNCiAgICArUHl0aG9uIHZlcnNpb24g
Y29tcGF0aWJpbGl0eSAoMi43LzMuMispDQogICAgK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fg0KICAgICsNCiAgICArS2NvbmZpZ2xpYiBhbmQgYWxsIHV0aWxpdGllcyBy
dW4gdW5kZXIgYm90aCBQeXRob24gMi43IGFuZCBQeXRob24gMy4yIGFuZA0KICAgICtsYXRlci4g
VGhlIGNvZGUgbW9zdGx5IHVzZXMgYmFzaWMgUHl0aG9uIGZlYXR1cmVzIGFuZCBoYXMgbm8gdGhp
cmQtcGFydHkNCiAgICArZGVwZW5kZW5jaWVzLCBzbyBrZWVwaW5nIGl0IGJhY2t3YXJkcy1jb21w
YXRpYmxlIGlzIHByZXR0eSBsb3cgZWZmb3J0Lg0KICAgICsNCiAgICArVGhlIDMuMiByZXF1aXJl
bWVudCBjb21lcyBmcm9tIGBgYXJncGFyc2VgYC4gYGBmb3JtYXQoKWBgIHdpdGggdW5udW1iZXJl
ZA0KICAgICtgYHt9YGAgaXMgdXNlZCBhcyB3ZWxsLg0KICAgICsNCiAgICArQSByZWNlbnQgUHl0
aG9uIDMgdmVyc2lvbiBpcyByZWNvbW1lbmRlZCBpZiB5b3UgaGF2ZSBhIGNob2ljZSwgYXMgaXQn
bGwgZ2l2ZQ0KICAgICt5b3UgYmV0dGVyIFVuaWNvZGUgaGFuZGxpbmcuDQogICAgKw0KICAgICtH
ZXR0aW5nIHN0YXJ0ZWQNCiAgICArLS0tLS0tLS0tLS0tLS0tDQogICAgKw0KICAgICsxLiBgSW5z
dGFsbCA8SW5zdGFsbGF0aW9uXz5gXyB0aGUgbGlicmFyeSBhbmQgdGhlIHV0aWxpdGllcy4NCiAg
ICArDQogICAgKzIuIFdyaXRlIGBLY29uZmlnDQogICAgKyAgIDxodHRwczovL3d3dy5rZXJuZWwu
b3JnL2RvYy9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dD5gX18NCiAg
ICArICAgZmlsZXMgdGhhdCBkZXNjcmliZSB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24gb3B0
aW9ucy4NCiAgICArDQogICAgKzMuIEdlbmVyYXRlIGFuIGluaXRpYWwgY29uZmlndXJhdGlvbiB3
aXRoIGUuZy4gYGBtZW51Y29uZmlnYGAvYGBndWljb25maWdgYCBvcg0KICAgICsgICBgYGFsbGRl
ZmNvbmZpZ2BgLiBUaGUgY29uZmlndXJhdGlvbiBpcyBzYXZlZCBhcyBgYC5jb25maWdgYCBieSBk
ZWZhdWx0Lg0KICAgICsNCiAgICArICAgRm9yIG1vcmUgYWR2YW5jZWQgcHJvamVjdHMsIHRoZSBg
YGRlZmNvbmZpZ2BgIHV0aWxpdHkgY2FuIGJlIHVzZWQgdG8NCiAgICArICAgZ2VuZXJhdGUgdGhl
IGluaXRpYWwgY29uZmlndXJhdGlvbiBmcm9tIGFuIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gZmls
ZS4NCiAgICArICAgVXN1YWxseSwgdGhpcyBleGlzdGluZyBjb25maWd1cmF0aW9uIGZpbGUgd291
bGQgYmUgYSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24NCiAgICArICAgZmlsZSwgYXMgZ2VuZXJhdGVk
IGJ5IGUuZy4gYGBzYXZlZGVmY29uZmlnYGAuDQogICAgKw0KICAgICs0LiBSdW4gYGBnZW5jb25m
aWdgYCB0byBnZW5lcmF0ZSBhIGhlYWRlciBmaWxlLiBCeSBkZWZhdWx0LCBpdCBpcyBzYXZlZCBh
cw0KICAgICsgICBgYGNvbmZpZy5oYGAuDQogICAgKw0KICAgICsgICBOb3JtYWxseSwgYGBnZW5j
b25maWdgYCB3b3VsZCBiZSBydW4gYXV0b21hdGljYWxseSBhcyBwYXJ0IG9mIHRoZSBidWlsZC4N
CiAgICArDQogICAgKyAgIEJlZm9yZSB3cml0aW5nIGEgaGVhZGVyIGZpbGUgb3Igb3RoZXIgY29u
ZmlndXJhdGlvbiBvdXRwdXQsIEtjb25maWdsaWINCiAgICArICAgY29tcGFyZXMgdGhlIG9sZCBj
b250ZW50cyBvZiB0aGUgZmlsZSBhZ2FpbnN0IHRoZSBuZXcgY29udGVudHMuIElmIHRoZXJlJ3MN
CiAgICArICAgbm8gY2hhbmdlLCB0aGUgd3JpdGUgaXMgc2tpcHBlZC4gVGhpcyBhdm9pZHMgdXBk
YXRpbmcgZmlsZSBtZXRhZGF0YSBsaWtlIHRoZQ0KICAgICsgICBtb2RpZmljYXRpb24gdGltZSwg
YW5kIG1pZ2h0IHNhdmUgd29yayBkZXBlbmRpbmcgb24geW91ciBidWlsZCBzZXR1cC4NCiAgICAr
ICAgDQogICAgKyAgIEFkZGluZyBuZXcgY29uZmlndXJhdGlvbiBvdXRwdXQgZm9ybWF0cyBzaG91
bGQgYmUgcmVsYXRpdmVseSBzdHJhaWdodGZvcndhcmQuDQogICAgKyAgIFNlZSB0aGUgaW1wbGVt
ZW50YXRpb24gb2YgYGB3cml0ZV9jb25maWcoKWBgIGluIGBrY29uZmlnbGliLnB5DQogICAgKyAg
IDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIva2Nv
bmZpZ2xpYi5weT5gXy4NCiAgICArICAgVGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBgYFN5bWJv
bC5jb25maWdfc3RyaW5nYGAgcHJvcGVydHkgaGFzIHNvbWUgdGlwcyBhcw0KICAgICsgICB3ZWxs
Lg0KICAgICsgICANCiAgICArNS4gVG8gdXBkYXRlIGFuIG9sZCBgYC5jb25maWdgYCBmaWxlIGFm
dGVyIHRoZSBLY29uZmlnIGZpbGVzIGhhdmUgY2hhbmdlZCAoZS5nLg0KICAgICsgICB0byBhZGQg
bmV3IG9wdGlvbnMpLCBydW4gYGBvbGRjb25maWdgYCAocHJvbXB0cyBmb3IgdmFsdWVzIGZvciBu
ZXcgb3B0aW9ucykNCiAgICArICAgb3IgYGBvbGRkZWZjb25maWdgYCAoZ2l2ZXMgbmV3IG9wdGlv
bnMgdGhlaXIgZGVmYXVsdCB2YWx1ZSkuIEVudGVyaW5nIHRoZQ0KICAgICsgICBgYG1lbnVjb25m
aWdgYCBvciBgYGd1aWNvbmZpZ2BgIGludGVyZmFjZSBhbmQgc2F2aW5nIHRoZSBjb25maWd1cmF0
aW9uIHdpbGwNCiAgICArICAgYWxzbyB1cGRhdGUgaXQgKHRoZSBjb25maWd1cmF0aW9uIGludGVy
ZmFjZXMgYWx3YXlzIHByb21wdCBmb3Igc2F2aW5nDQogICAgKyAgIG9uIGV4aXQgaWYgaXQgd291
bGQgbW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgYGAuY29uZmlnYGAgZmlsZSkuDQogICAgKw0K
ICAgICsgICBEdWUgdG8gS2NvbmZpZyBzZW1hbnRpY3MsIHNpbXBseSBsb2FkaW5nIGFuIG9sZCBg
YC5jb25maWdgYCBmaWxlIHBlcmZvcm1zIGFuDQogICAgKyAgIGltcGxpY2l0IGBgb2xkZGVmY29u
ZmlnYGAsIHNvIGJ1aWxkaW5nIHdpbGwgbm9ybWFsbHkgbm90IGJlIGFmZmVjdGVkIGJ5DQogICAg
KyAgIGhhdmluZyBhbiBvdXRkYXRlZCBjb25maWd1cmF0aW9uLg0KICAgICsNCiAgICArV2hlbmV2
ZXIgYGAuY29uZmlnYGAgaXMgb3ZlcndyaXR0ZW4sIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRo
ZSBmaWxlIGlzIHNhdmVkDQogICAgK3RvIGBgLmNvbmZpZy5vbGRgYCAob3IsIG1vcmUgZ2VuZXJh
bGx5LCB0byBgYCRLQ09ORklHX0NPTkZJRy5vbGRgYCkuDQogICAgKw0KICAgICtGb3Igc29tZSBn
ZW5lcmFsIEtjb25maWcgYWR2aWNlLCBzZWUgYHRoaXMgcGFnZQ0KICAgICs8aHR0cHM6Ly9kb2Nz
LnplcGh5cnByb2plY3Qub3JnL2xhdGVzdC9ndWlkZXMva2NvbmZpZy9pbmRleC5odG1sPmBfXy4N
CiAgICArDQogICAgK1VzaW5nIGBgLmNvbmZpZ2BgIGZpbGVzIGFzIE1ha2UgaW5wdXQNCiAgICAr
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KICAgICsNCiAgICArYGAuY29u
ZmlnYGAgZmlsZXMgdXNlIE1ha2Ugc3ludGF4IGFuZCBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0bHkg
aW4gTWFrZWZpbGVzIHRvDQogICAgK3JlYWQgY29uZmlndXJhdGlvbiB2YWx1ZXMgZnJvbSB0aGVy
ZS4gVGhpcyBpcyB3aHkgYGBuYGAtdmFsdWVkDQogICAgK2BgYm9vbGBgL2BgdHJpc3RhdGVgYCB2
YWx1ZXMgYXJlIHdyaXR0ZW4gb3V0IGFzIGBgIyBDT05GSUdfRk9PIGlzIG5vdCBzZXRgYCAoYQ0K
ICAgICtNYWtlIGNvbW1lbnQpIGluIGBgLmNvbmZpZ2BgLCBhbGxvd2luZyB0aGVtIHRvIGJlIHRl
c3RlZCB3aXRoIGBgaWZkZWZgYCBpbg0KICAgICtNYWtlLg0KICAgICsNCiAgICArSWYgeW91IG1h
a2UgdXNlIG9mIHRoaXMsIHlvdSBtaWdodCB3YW50IHRvIHBhc3MgYGAtLWNvbmZpZy1vdXQgPGZp
bGVuYW1lPmBgIHRvDQogICAgK2BgZ2VuY29uZmlnYGAgYW5kIGluY2x1ZGUgdGhlIGNvbmZpZ3Vy
YXRpb24gZmlsZSBpdCBnZW5lcmF0ZXMgaW5zdGVhZCBvZg0KICAgICtpbmNsdWRpbmcgYGAuY29u
ZmlnYGAgZGlyZWN0bHkuIFRoaXMgaGFzIHRoZSBhZHZhbnRhZ2UgdGhhdCB0aGUgZ2VuZXJhdGVk
DQogICAgK2NvbmZpZ3VyYXRpb24gZmlsZSB3aWxsIGFsd2F5cyBiZSBhICJmdWxsIiBjb25maWd1
cmF0aW9uIGZpbGUsIGV2ZW4gaWYNCiAgICArYGAuY29uZmlnYGAgaXMgb3V0ZGF0ZWQuIE90aGVy
d2lzZSwgaXQgbWlnaHQgYmUgbmVjZXNzYXJ5IHRvIHJ1bg0KICAgICtgYG9sZChkZWYpY29uZmln
YGAgb3IgYGBtZW51Y29uZmlnYGAvYGBndWljb25maWdgYCBiZWZvcmUgcmVidWlsZGluZyB3aXRo
IGFuDQogICAgK291dGRhdGVkIGBgLmNvbmZpZ2BgLg0KICAgICsNCiAgICArSWYgeW91IHVzZSBg
YC0tc3luYy1kZXBzYGAgdG8gZ2VuZXJhdGUgaW5jcmVtZW50YWwgYnVpbGQgaW5mb3JtYXRpb24s
IHlvdSBjYW4NCiAgICAraW5jbHVkZSBgYGRlcHMvYXV0by5jb25mYGAgaW5zdGVhZCwgd2hpY2gg
aXMgYWxzbyBhIGZ1bGwgY29uZmlndXJhdGlvbiBmaWxlLg0KICAgICsNCiAgICArVXNlZnVsIGhl
bHBlciBtYWNyb3MNCiAgICArfn5+fn5+fn5+fn5+fn5+fn5+fn4NCiAgICArDQogICAgK1RoZSBg
aW5jbHVkZS9saW51eC9rY29uZmlnLmgNCiAgICArPGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxk
cy9saW51eC9ibG9iL21hc3Rlci9pbmNsdWRlL2xpbnV4L2tjb25maWcuaD5gXw0KICAgICtoZWFk
ZXIgaW4gdGhlIExpbnV4IGtlcm5lbCBkZWZpbmVzIHNvbWUgdXNlZnVsIGhlbHBlciBtYWNyb3Mg
Zm9yIHRlc3RpbmcNCiAgICArS2NvbmZpZyBjb25maWd1cmF0aW9uIHZhbHVlcy4NCiAgICArDQog
ICAgK2BgSVNfRU5BQkxFRCgpYGAgaXMgZ2VuZXJhbGx5IHVzZWZ1bCwgYWxsb3dpbmcgY29uZmln
dXJhdGlvbiB2YWx1ZXMgdG8gYmUNCiAgICArdGVzdGVkIGluIGBgaWZgYCBzdGF0ZW1lbnRzIHdp
dGggbm8gcnVudGltZSBvdmVyaGVhZC4NCiAgICArDQogICAgK0luY3JlbWVudGFsIGJ1aWxkaW5n
DQogICAgK35+fn5+fn5+fn5+fn5+fn5+fn5+DQogICAgKw0KICAgICtTZWUgdGhlIGRvY3N0cmlu
ZyBmb3IgYGBLY29uZmlnLnN5bmNfZGVwcygpYGAgaW4gYGtjb25maWdsaWIucHkNCiAgICArPGh0
dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9rY29uZmln
bGliLnB5PmBfIGZvciBoaW50cw0KICAgICtvbiBpbXBsZW1lbnRpbmcgaW5jcmVtZW50YWwgYnVp
bGRzIChyZWJ1aWxkaW5nIGp1c3Qgc291cmNlIGZpbGVzIHRoYXQgcmVmZXJlbmNlDQogICAgK2No
YW5nZWQgY29uZmlndXJhdGlvbiB2YWx1ZXMpLg0KICAgICsNCiAgICArUnVubmluZyB0aGUgYGBz
Y3JpcHRzL2Jhc2ljL2ZpeGRlcC5jYGAgdG9vbCBmcm9tIHRoZSBrZXJuZWwgb24gdGhlIG91dHB1
dCBvZg0KICAgICtgYGdjYyAtTUQgPHNvdXJjZSBmaWxlPmBgIG1pZ2h0IGdpdmUgeW91IGFuIGlk
ZWEgb2YgaG93IGl0IGFsbCBmaXRzIHRvZ2V0aGVyLg0KICAgICsNCiAgICArTGlicmFyeSBkb2N1
bWVudGF0aW9uDQogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICsNCiAgICArS2NvbmZp
Z2xpYiBjb21lcyB3aXRoIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIGluIHRoZSBmb3JtIG9mIGRv
Y3N0cmluZ3MuIFRvIHZpZXcgaXQsIHJ1biBlLmcuDQogICAgK3RoZSBmb2xsb3dpbmcgY29tbWFu
ZDoNCiAgICArDQogICAgKy4uIGNvZGU6OiBzaA0KICAgICsNCiAgICArICAgICQgcHlkb2MoMykg
a2NvbmZpZ2xpYg0KICAgICsNCiAgICArRm9yIEhUTUwgb3V0cHV0LCBhZGQgYGAtd2BgOg0KICAg
ICsNCiAgICArLi4gY29kZTo6IHNoDQogICAgKw0KICAgICsgICAgJCBweWRvYygzKSAtdyBrY29u
ZmlnbGliDQogICAgKw0KICAgICtUaGlzIHdpbGwgYWxzbyB3b3JrIGFmdGVyIGluc3RhbGxpbmcg
S2NvbmZpZ2xpYiB3aXRoIGBgcGlwKDMpYGAuDQogICAgKw0KICAgICtEb2N1bWVudGF0aW9uIGZv
ciB0aGUgYGBtZW51Y29uZmlnYGAgYW5kIGBgZ3VpY29uZmlnYGAgaW50ZXJmYWNlcyBjYW4gYmUg
dmlld2VkDQogICAgK2luIHRoZSBzYW1lIHdheToNCiAgICArDQogICAgKy4uIGNvZGU6OiBzaA0K
ICAgICsNCiAgICArICAgICQgcHlkb2MzIG1lbnVjb25maWcvZ3VpY29uZmlnDQogICAgKw0KICAg
ICtBIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGxlYXJuaW5nIHRoZSBsaWJyYXJ5IGlzIHRvIHJl
YWQgdGhlIG1vZHVsZSBkb2NzdHJpbmcNCiAgICArKHdoaWNoIHlvdSBjb3VsZCBhbHNvIGp1c3Qg
cmVhZCBkaXJlY3RseSBhdCB0aGUgYmVnaW5uaW5nIG9mIGBrY29uZmlnbGliLnB5DQogICAgKzxo
dHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIva2NvbmZp
Z2xpYi5weT5gXykuIEl0DQogICAgK2dpdmVzIGFuIGludHJvZHVjdGlvbiB0byBzeW1ib2wgdmFs
dWVzLCB0aGUgbWVudSB0cmVlLCBhbmQgZXhwcmVzc2lvbnMuDQogICAgKw0KICAgICtBZnRlciBy
ZWFkaW5nIHRoZSBtb2R1bGUgZG9jc3RyaW5nLCBhIGdvb2QgbmV4dCBzdGVwIGlzIHRvIHJlYWQg
dGhlIGBgS2NvbmZpZ2BgDQogICAgK2NsYXNzIGRvY3VtZW50YXRpb24sIGFuZCB0aGVuIHRoZSBk
b2N1bWVudGF0aW9uIGZvciB0aGUgYGBTeW1ib2xgYCwgYGBDaG9pY2VgYCwNCiAgICArYW5kIGBg
TWVudU5vZGVgYCBjbGFzc2VzLg0KICAgICsNCiAgICArUGxlYXNlIHRlbGwgbWUgaWYgc29tZXRo
aW5nIGlzIHVuY2xlYXIgb3IgY2FuIGJlIGV4cGxhaW5lZCBiZXR0ZXIuDQogICAgKw0KICAgICtM
aWJyYXJ5IGZlYXR1cmVzDQogICAgKy0tLS0tLS0tLS0tLS0tLS0NCiAgICArDQogICAgK0tjb25m
aWdsaWIgY2FuIGRvIHRoZSBmb2xsb3dpbmcsIGFtb25nIG90aGVyIHRoaW5nczoNCiAgICArDQog
ICAgKy0gKipQcm9ncmFtbWF0aWNhbGx5IGdldCBhbmQgc2V0IHN5bWJvbCB2YWx1ZXMqKg0KICAg
ICsNCiAgICArICBTZWUgYGFsbG5vY29uZmlnLnB5DQogICAgKyAgPGh0dHBzOi8vZ2l0aHViLmNv
bS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9hbGxub2NvbmZpZy5weT5gXyBhbmQN
CiAgICArICBgYWxseWVzY29uZmlnLnB5DQogICAgKyAgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZh
bGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9hbGx5ZXNjb25maWcucHk+YF8sDQogICAgKyAg
d2hpY2ggYXJlIGF1dG9tYXRpY2FsbHkgdmVyaWZpZWQgdG8gcHJvZHVjZSBpZGVudGljYWwgb3V0
cHV0IHRvIHRoZSBzdGFuZGFyZA0KICAgICsgIGBgbWFrZSBhbGxub2NvbmZpZ2BgIGFuZCBgYG1h
a2UgYWxseWVzY29uZmlnYGAuDQogICAgKw0KICAgICstICoqUmVhZCBhbmQgd3JpdGUgLmNvbmZp
ZyBhbmQgZGVmY29uZmlnIGZpbGVzKioNCiAgICArDQogICAgKyAgVGhlIGdlbmVyYXRlZCBgYC5j
b25maWdgYCBhbmQgYGBkZWZjb25maWdgYCAobWluaW1hbCBjb25maWd1cmF0aW9uKSBmaWxlcyBh
cmUNCiAgICArICBjaGFyYWN0ZXItZm9yLWNoYXJhY3RlciBpZGVudGljYWwgdG8gd2hhdCB0aGUg
QyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBnZW5lcmF0ZQ0KICAgICsgIChleGNlcHQgZm9yIHRoZSBo
ZWFkZXIgY29tbWVudCkuIFRoZSB0ZXN0IHN1aXRlIHJlbGllcyBvbiB0aGlzLCBhcyBpdA0KICAg
ICsgIGNvbXBhcmVzIHRoZSBnZW5lcmF0ZWQgZmlsZXMuDQogICAgKyAgDQogICAgKy0gKipXcml0
ZSBDIGhlYWRlcnMqKg0KICAgICsNCiAgICArICBUaGUgZ2VuZXJhdGVkIGhlYWRlcnMgdXNlIHRo
ZSBzYW1lIGZvcm1hdCBhcyBgYGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmhgYA0KICAgICsg
IGZyb20gdGhlIExpbnV4IGtlcm5lbC4NCiAgICArDQogICAgKy0gKipJbXBsZW1lbnQgaW5jcmVt
ZW50YWwgYnVpbGRzKioNCiAgICArDQogICAgKyAgVGhpcyB1c2VzIHRoZSBzYW1lIHNjaGVtZSBh
cyB0aGUgYGBpbmNsdWRlL2NvbmZpZ2BgIGRpcmVjdG9yeSBpbiB0aGUga2VybmVsOg0KICAgICsg
IFN5bWJvbHMgYXJlIHRyYW5zbGF0ZWQgaW50byBmaWxlcyB0aGF0IGFyZSB0b3VjaGVkIHdoZW4g
dGhlIHN5bWJvbCdzIHZhbHVlDQogICAgKyAgY2hhbmdlcyBiZXR3ZWVuIGJ1aWxkcywgd2hpY2gg
Y2FuIGJlIHVzZWQgdG8gYXZvaWQgaGF2aW5nIHRvIGRvIGEgZnVsbA0KICAgICsgIHJlYnVpbGQg
d2hlbmV2ZXIgdGhlIGNvbmZpZ3VyYXRpb24gaXMgY2hhbmdlZC4NCiAgICArDQogICAgKyAgU2Vl
IHRoZSBgYHN5bmNfZGVwcygpYGAgZnVuY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uDQogICAg
Kw0KICAgICstICoqSW5zcGVjdCBzeW1ib2xzKioNCiAgICArDQogICAgKyAgUHJpbnRpbmcgYSBz
eW1ib2wgb3Igb3RoZXIgaXRlbSAod2hpY2ggY2FsbHMgYGBfX3N0cl9fKClgYCkgcmV0dXJucyBp
dHMNCiAgICArICBkZWZpbml0aW9uIGluIEtjb25maWcgZm9ybWF0LiBUaGlzIGFsc28gd29ya3Mg
Zm9yIHN5bWJvbHMgZGVmaW5lZCBpbiBtdWx0aXBsZQ0KICAgICsgIGxvY2F0aW9ucy4NCiAgICAr
DQogICAgKyAgQSBoZWxwZnVsIGBgX19yZXByX18oKWBgIGlzICBvbiBhbGwgb2JqZWN0cyB0b28u
DQogICAgKw0KICAgICsgIEFsbCBgYF9fc3RyX18oKWBgIGFuZCBgYF9fcmVwcl9fKClgYCBtZXRo
b2RzIGFyZSBkZWxpYmVyYXRlbHkgaW1wbGVtZW50ZWQNCiAgICArICB3aXRoIGp1c3QgcHVibGlj
IEFQSXMsIHNvIGFsbCBzeW1ib2wgaW5mb3JtYXRpb24gY2FuIGJlIGZldGNoZWQgc2VwYXJhdGVs
eSBhcw0KICAgICsgIHdlbGwuDQogICAgKw0KICAgICstICoqSW5zcGVjdCBleHByZXNzaW9ucyoq
DQogICAgKw0KICAgICsgIEV4cHJlc3Npb25zIHVzZSBhIHNpbXBsZSB0dXBsZS1iYXNlZCBmb3Jt
YXQgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkIG1hbnVhbGx5DQogICAgKyAgaWYgbmVlZGVkLiBFeHBy
ZXNzaW9uIHByaW50aW5nIGFuZCBldmFsdWF0aW9uIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQsDQog
ICAgKyAgaW1wbGVtZW50ZWQgd2l0aCBwdWJsaWMgQVBJcy4NCiAgICArDQogICAgKy0gKipJbnNw
ZWN0IHRoZSBtZW51IHRyZWUqKg0KICAgICsNCiAgICArICBUaGUgdW5kZXJseWluZyBtZW51IHRy
ZWUgaXMgZXhwb3NlZCwgaW5jbHVkaW5nIHN1Ym1lbnVzIGNyZWF0ZWQgaW1wbGljaXRseQ0KICAg
ICsgIGZyb20gc3ltYm9scyBkZXBlbmRpbmcgb24gcHJlY2VkaW5nIHN5bWJvbHMuIFRoaXMgY2Fu
IGJlIHVzZWQgZS5nLiB0bw0KICAgICsgIGltcGxlbWVudCBtZW51Y29uZmlnLWxpa2UgZnVuY3Rp
b25hbGl0eS4NCiAgICArICANCiAgICArICBTZWUgYG1lbnVjb25maWcucHkNCiAgICArICA8aHR0
cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL21lbnVjb25m
aWcucHk+YF8vYGd1aWNvbmZpZy5weQ0KICAgICsgIDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxp
emVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIvZ3VpY29uZmlnLnB5PmBfIGFuZCB0aGUNCiAgICAr
ICBtaW5pbWFsaXN0aWMgYG1lbnVjb25maWdfZXhhbXBsZS5weQ0KICAgICsgIDxodHRwczovL2dp
dGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIvZXhhbXBsZXMvbWVudWNv
bmZpZ19leGFtcGxlLnB5PmBfDQogICAgKyAgZXhhbXBsZS4NCiAgICArDQogICAgK0tjb25maWcg
ZXh0ZW5zaW9ucw0KICAgICt+fn5+fn5+fn5+fn5+fn5+fn4NCiAgICArDQogICAgK1RoZSBmb2xs
b3dpbmcgS2NvbmZpZyBleHRlbnNpb25zIGFyZSBhdmFpbGFibGU6DQogICAgKw0KICAgICstIGBg
c291cmNlYGAgc3VwcG9ydHMgZ2xvYiBwYXR0ZXJucyBhbmQgaW5jbHVkZXMgZWFjaCBtYXRjaGlu
ZyBmaWxlLiBBIHBhdHRlcm4NCiAgICArICBpcyByZXF1aXJlZCB0byBtYXRjaCBhdCBsZWFzdCBv
bmUgZmlsZS4NCiAgICArDQogICAgKyAgQSBzZXBhcmF0ZSBgYG9zb3VyY2VgYCBzdGF0ZW1lbnQg
aXMgYXZhaWxhYmxlIGZvciBjYXNlcyB3aGVyZSBpdCdzIG9rYXkgZm9yDQogICAgKyAgdGhlIHBh
dHRlcm4gdG8gbWF0Y2ggbm8gZmlsZXMgKGluIHdoaWNoIGNhc2UgYGBvc291cmNlYGAgdHVybnMg
aW50byBhIG5vLW9wKS4NCiAgICArICANCiAgICArLSBBIHJlbGF0aXZlIGBgc291cmNlYGAgc3Rh
dGVtZW50IChgYHJzb3VyY2VgYCkgaXMgYXZhaWxhYmxlLCB3aGVyZSBmaWxlIHBhdGhzDQogICAg
KyAgYXJlIHNwZWNpZmllZCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjdXJyZW50
IEtjb25maWcgZmlsZS4gQW4NCiAgICArICBgYG9yc291cmNlYGAgc3RhdGVtZW50IGlzIGF2YWls
YWJsZSBhcyB3ZWxsLCBhbmFsb2dvdXMgdG8gYGBvc291cmNlYGAuDQogICAgKw0KICAgICstIFBy
ZXByb2Nlc3NvciB1c2VyIGZ1bmN0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBQeXRob24sIHdoaWNo
IG1ha2VzIGl0IHNpbXBsZQ0KICAgICsgIHRvIGludGVncmF0ZSBpbmZvcm1hdGlvbiBmcm9tIGV4
aXN0aW5nIFB5dGhvbiB0b29scyBpbnRvIEtjb25maWcgKGUuZy4gdG8NCiAgICArICBoYXZlIEtj
b25maWcgc3ltYm9scyBkZXBlbmQgb24gaGFyZHdhcmUgaW5mb3JtYXRpb24gc3RvcmVkIGluIHNv
bWUgb3RoZXINCiAgICArICBmb3JtYXQpLg0KICAgICsNCiAgICArICBTZWUgdGhlICpLY29uZmln
IGV4dGVuc2lvbnMqIHNlY3Rpb24gaW4gdGhlDQogICAgKyAgYGtjb25maWdsaWIucHkgPGh0dHBz
Oi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9rY29uZmlnbGli
LnB5PmBfDQogICAgKyAgbW9kdWxlIGRvY3N0cmluZyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4NCiAg
ICArDQogICAgKy0gYGBkZWZfaW50YGAsIGBgZGVmX2hleGBgLCBhbmQgYGBkZWZfc3RyaW5nYGAg
YXJlIGF2YWlsYWJsZSBpbiBhZGRpdGlvbiB0bw0KICAgICsgIGBgZGVmX2Jvb2xgYCBhbmQgYGBk
ZWZfdHJpc3RhdGVgYCwgYWxsb3dpbmcgYGBpbnRgYCwgYGBoZXhgYCwgYW5kIGBgc3RyaW5nYGAN
CiAgICArICBzeW1ib2xzIHRvIGJlIGdpdmVuIGEgdHlwZSBhbmQgYSBkZWZhdWx0IGF0IHRoZSBz
YW1lIHRpbWUuDQogICAgKw0KICAgICsgIFRoZXNlIGNhbiBiZSB1c2VmdWwgaW4gcHJvamVjdHMg
dGhhdCBtYWtlIHVzZSBvZiBzeW1ib2xzIGRlZmluZWQgaW4gbXVsdGlwbGUNCiAgICArICBsb2Nh
dGlvbnMsIGFuZCByZW1vdmUgc29tZSBLY29uZmlnIGluY29uc2lzdGVuY3kuDQogICAgKyAgDQog
ICAgKy0gRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBleHBhbmRlZCBkaXJlY3RseSBpbiBlLmcu
IGBgc291cmNlYGAgYW5kDQogICAgKyAgYGBtYWlubWVudWBgIHN0YXRlbWVudHMsIG1lYW5pbmcg
YGBvcHRpb24gZW52YGAgc3ltYm9scyBhcmUgcmVkdW5kYW50Lg0KICAgICsNCiAgICArICBUaGlz
IGlzIHRoZSBzdGFuZGFyZCBiZWhhdmlvciB3aXRoIHRoZSBuZXcgYEtjb25maWcgcHJlcHJvY2Vz
c29yDQogICAgKyAgPGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL21hc3Rl
ci9Eb2N1bWVudGF0aW9uL2tidWlsZC9rY29uZmlnLW1hY3JvLWxhbmd1YWdlLnR4dD5gX18sDQog
ICAgKyAgd2hpY2ggS2NvbmZpZ2xpYiBpbXBsZW1lbnRzLg0KICAgICsNCiAgICArICBgYG9wdGlv
biBlbnZgYCBzeW1ib2xzIGFyZSBhY2NlcHRlZCBidXQgaWdub3JlZCwgd2hpY2ggbGVhZHMgdGhl
IGNhdmVhdCB0aGF0DQogICAgKyAgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUg
ZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoZXkgcmVmZXJlbmNlDQogICAgKyAgKEtjb25maWdsaWIg
d2FybnMgaWYgdGhlIG5hbWVzIGRpZmZlcikuIFRoaXMga2VlcHMgS2NvbmZpZ2xpYiBjb21wYXRp
YmxlIHdpdGgNCiAgICArICBvbGRlciBMaW51eCBrZXJuZWxzLCB3aGVyZSB0aGUgbmFtZSBvZiB0
aGUgYGBvcHRpb24gZW52YGAgc3ltYm9sIGFsd2F5cw0KICAgICsgIG1hdGNoZWQgdGhlIGVudmly
b25tZW50IHZhcmlhYmxlLiBDb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgTGludXgga2VybmVscyBp
cw0KICAgICsgIHRoZSBtYWluIHJlYXNvbiBgYG9wdGlvbiBlbnZgYCBpcyBzdGlsbCBzdXBwb3J0
ZWQuDQogICAgKw0KICAgICsgIFRoZSBDIHRvb2xzIGhhdmUgZHJvcHBlZCBzdXBwb3J0IGZvciBg
YG9wdGlvbiBlbnZgYC4NCiAgICArDQogICAgKy0gVHdvIGV4dHJhIG9wdGlvbmFsIHdhcm5pbmdz
IGNhbiBiZSBlbmFibGVkIGJ5IHNldHRpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzLA0KICAgICsg
IGNvdmVyaW5nIGNhc2VzIHRoYXQgYXJlIGVhc2lseSBtaXNzZWQgd2hlbiBtYWtpbmcgY2hhbmdl
cyB0byBLY29uZmlnIGZpbGVzOg0KICAgICsNCiAgICArICAqIGBgS0NPTkZJR19XQVJOX1VOREVG
YGA6IElmIHNldCB0byBgYHlgYCwgd2FybmluZ3Mgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIGFsbA0K
ICAgICsgICAgcmVmZXJlbmNlcyB0byB1bmRlZmluZWQgc3ltYm9scyB3aXRoaW4gS2NvbmZpZyBm
aWxlcy4gVGhlIG9ubHkgZ290Y2hhIGlzDQogICAgKyAgICB0aGF0IGFsbCBoZXggbGl0ZXJhbHMg
bXVzdCBiZSBwcmVmaXhlZCB3aXRoIGBgMHhgYCBvciBgYDBYYGAsIHRvIG1ha2UgaXQNCiAgICAr
ICAgIHBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBzeW1ib2wgcmVmZXJlbmNlcy4N
CiAgICArDQogICAgKyAgICBTb21lIHByb2plY3RzIChlLmcuIHRoZSBMaW51eCBrZXJuZWwpIHVz
ZSBtdWx0aXBsZSBLY29uZmlnIHRyZWVzIHdpdGggbWFueQ0KICAgICsgICAgc2hhcmVkIEtjb25m
aWcgZmlsZXMsIGxlYWRpbmcgdG8gc29tZSBzYWZlIHVuZGVmaW5lZCBzeW1ib2wgcmVmZXJlbmNl
cy4NCiAgICArICAgIGBgS0NPTkZJR19XQVJOX1VOREVGYGAgaXMgdXNlZnVsIGluIHByb2plY3Rz
IHRoYXQgb25seSBoYXZlIGEgc2luZ2xlDQogICAgKyAgICBLY29uZmlnIHRyZWUgdGhvdWdoLg0K
ICAgICsNCiAgICArICAgIGBgS0NPTkZJR19TVFJJQ1RgYCBpcyBhbiBvbGRlciBhbGlhcyBmb3Ig
dGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSwNCiAgICArICAgIHN1cHBvcnRlZCBmb3IgYmFja3dh
cmRzIGNvbXBhdGliaWxpdHkuDQogICAgKw0KICAgICsgICogYGBLQ09ORklHX1dBUk5fVU5ERUZf
QVNTSUdOYGA6IElmIHNldCB0byBgYHlgYCwgd2FybmluZ3Mgd2lsbCBiZSBnZW5lcmF0ZWQNCiAg
ICArICAgIGZvciBhbGwgYXNzaWdubWVudHMgdG8gdW5kZWZpbmVkIHN5bWJvbHMgd2l0aGluIGBg
LmNvbmZpZ2BgIGZpbGVzLiBCeQ0KICAgICsgICAgZGVmYXVsdCwgbm8gc3VjaCB3YXJuaW5ncyBh
cmUgZ2VuZXJhdGVkLg0KICAgICsNCiAgICArICAgIFRoaXMgd2FybmluZyBjYW4gYWxzbyBiZSBl
bmFibGVkL2Rpc2FibGVkIGJ5IHNldHRpbmcNCiAgICArICAgIGBgS2NvbmZpZy53YXJuX2Fzc2ln
bl91bmRlZmBgIHRvIGBgVHJ1ZWBgL2BgRmFsc2VgYC4NCiAgICArDQogICAgK090aGVyIGZlYXR1
cmVzDQogICAgKy0tLS0tLS0tLS0tLS0tDQogICAgKw0KICAgICstICoqU2luZ2xlLWZpbGUgaW1w
bGVtZW50YXRpb24qKg0KICAgICsgIA0KICAgICsgIFRoZSBlbnRpcmUgbGlicmFyeSBpcyBjb250
YWluZWQgaW4gYGtjb25maWdsaWIucHkNCiAgICArICA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFs
aXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL2tjb25maWdsaWIucHk+YF8uDQogICAgKw0KICAg
ICsgIFRoZSB0b29scyBpbXBsZW1lbnRlZCBvbiB0b3Agb2YgaXQgYXJlIG9uZSBmaWxlIGVhY2gu
DQogICAgKw0KICAgICstICoqUm9idXN0IGFuZCBoaWdobHkgY29tcGF0aWJsZSB3aXRoIHRoZSBD
IEtjb25maWcgdG9vbHMqKg0KICAgICsgIA0KICAgICsgIFRoZSBgdGVzdCBzdWl0ZSA8aHR0cHM6
Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL3Rlc3RzdWl0ZS5w
eT5gXw0KICAgICsgIGF1dG9tYXRpY2FsbHkgY29tcGFyZXMgb3V0cHV0IGZyb20gS2NvbmZpZ2xp
YiBhbmQgdGhlIEMgdG9vbHMNCiAgICArICBieSBkaWZmaW5nIHRoZSBnZW5lcmF0ZWQgYGAuY29u
ZmlnYGAgZmlsZXMgZm9yIHRoZSByZWFsIGtlcm5lbCBLY29uZmlnIGFuZA0KICAgICsgIGRlZmNv
bmZpZyBmaWxlcywgZm9yIGFsbCBBUkNIZXMuDQogICAgKyAgDQogICAgKyAgVGhpcyBjdXJyZW50
bHkgaW52b2x2ZXMgY29tcGFyaW5nIHRoZSBvdXRwdXQgZm9yIDM2IEFSQ0hlcyBhbmQgNDk4IGRl
ZmNvbmZpZw0KICAgICsgIGZpbGVzIChvciBvdmVyIDE4MDAwIEFSQ0gvZGVmY29uZmlnIGNvbWJp
bmF0aW9ucyBpbiAib2JzZXNzaXZlIiB0ZXN0IHN1aXRlDQogICAgKyAgbW9kZSkuIEFsbCB0ZXN0
cyBhcmUgZXhwZWN0ZWQgdG8gcGFzcy4NCiAgICArDQogICAgKyAgQSBjb21wcmVoZW5zaXZlIHN1
aXRlIG9mIHNlbGZ0ZXN0cyBpcyBpbmNsdWRlZCBhcyB3ZWxsLg0KICAgICsNCiAgICArLSAqKk5v
dCBob3JyaWJseSBzbG93IGRlc3BpdGUgYmVpbmcgYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlv
bioqDQogICAgKyAgDQogICAgKyAgVGhlIGBhbGx5ZXNjb25maWcucHkNCiAgICArICA8aHR0cHM6
Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL2FsbHllc2NvbmZp
Zy5weT5gXw0KICAgICsgIHNjcmlwdCBjdXJyZW50bHkgcnVucyBpbiBhYm91dCAxLjMgc2Vjb25k
cyBvbiB0aGUgTGludXgga2VybmVsIG9uIGEgQ29yZSBpNw0KICAgICsgIDI2MDBLICh3aXRoIGEg
d2FybSBmaWxlIGNhY2hlKSwgaW5jbHVkaW5nIHRoZSBgYG1ha2VgYCBvdmVyaGVhZCBmcm9tIGBg
bWFrZQ0KICAgICsgIHNjcmlwdGNvbmZpZ2BgLiBOb3RlIHRoYXQgdGhlIExpbnV4IGtlcm5lbCBL
Y29uZmlncyBhcmUgYWJzb2x1dGVseSBtYXNzaXZlDQogICAgKyAgKG92ZXIgMTRrIHN5bWJvbHMg
Zm9yIHg4NikgY29tcGFyZWQgdG8gbW9zdCBwcm9qZWN0cywgYW5kIGFsc28gaGF2ZSBvdmVyaGVh
ZA0KICAgICsgIGZyb20gcnVubmluZyBzaGVsbCBjb21tYW5kcyB2aWEgdGhlIEtjb25maWcgcHJl
cHJvY2Vzc29yLg0KICAgICsgIA0KICAgICsgIEtjb25maWdsaWIgaXMgZXNwZWNpYWxseSBzcGVl
ZHkgaW4gY2FzZXMgd2hlcmUgbXVsdGlwbGUgYGAuY29uZmlnYGAgZmlsZXMNCiAgICArICBuZWVk
IHRvIGJlIHByb2Nlc3NlZCwgYmVjYXVzZSB0aGUgYGBLY29uZmlnYGAgZmlsZXMgd2lsbCBvbmx5
IG5lZWQgdG8gYmUgcGFyc2VkDQogICAgKyAgb25jZS4NCiAgICArDQogICAgKyAgRm9yIGxvbmct
cnVubmluZyBqb2JzLCBgUHlQeSA8aHR0cHM6Ly9weXB5Lm9yZy8+YF8gZ2l2ZXMgYSBiaWcgcGVy
Zm9ybWFuY2UNCiAgICArICBib29zdC4gQ1B5dGhvbiBpcyBmYXN0ZXIgZm9yIHNob3J0LXJ1bm5p
bmcgam9icyBhcyBQeVB5IG5lZWRzIHNvbWUgdGltZSB0bw0KICAgICsgIHdhcm0gdXAuDQogICAg
KyAgDQogICAgKyAgS2NvbmZpZ2xpYiBhbHNvIHdvcmtzIHdlbGwgd2l0aCB0aGUNCiAgICArICBg
bXVsdGlwcm9jZXNzaW5nIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvbXVsdGlw
cm9jZXNzaW5nLmh0bWw+YF8NCiAgICArICBtb2R1bGUuIE5vIGdsb2JhbCBzdGF0ZSBpcyBrZXB0
Lg0KICAgICsNCiAgICArLSAqKkdlbmVyYXRlcyBtb3JlIHdhcm5pbmdzIHRoYW4gdGhlIEMgaW1w
bGVtZW50YXRpb24qKg0KICAgICsNCiAgICArICBHZW5lcmF0ZXMgdGhlIHNhbWUgd2FybmluZ3Mg
YXMgdGhlIEMgaW1wbGVtZW50YXRpb24sIHBsdXMgYWRkaXRpb25hbCBvbmVzLg0KICAgICsgIEFs
c28gZGV0ZWN0cyBkZXBlbmRlbmN5IGFuZCBgYHNvdXJjZWBgIGxvb3BzLg0KICAgICsNCiAgICAr
ICBBbGwgd2FybmluZ3MgcG9pbnQgb3V0IHRoZSBsb2NhdGlvbihzKSBpbiB0aGUgYGBLY29uZmln
YGAgZmlsZXMgd2hlcmUgYQ0KICAgICsgIHN5bWJvbCBpcyBkZWZpbmVkLCB3aGVyZSBhcHBsaWNh
YmxlLg0KICAgICsNCiAgICArLSAqKlVuaWNvZGUgc3VwcG9ydCoqDQogICAgKw0KICAgICsgIFVu
aWNvZGUgY2hhcmFjdGVycyBpbiBzdHJpbmcgbGl0ZXJhbHMgaW4gYGBLY29uZmlnYGAgYW5kIGBg
LmNvbmZpZ2BgIGZpbGVzIGFyZQ0KICAgICsgIGNvcnJlY3RseSBoYW5kbGVkLiBUaGlzIHN1cHBv
cnQgbW9zdGx5IGNvbWVzIGZvciBmcmVlIGZyb20gUHl0aG9uLg0KICAgICsNCiAgICArLSAqKldp
bmRvd3Mgc3VwcG9ydCoqDQogICAgKw0KICAgICsgIE5vdGhpbmcgTGludXgtc3BlY2lmaWMgaXMg
dXNlZC4gVW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgaXMgdXNlZCBmb3IgYm90aA0KICAgICsgIFB5
dGhvbiAyIGFuZCBQeXRob24gMy4NCiAgICArICANCiAgICArICBUaGUgYFplcGh5ciA8aHR0cHM6
Ly93d3cuemVwaHlycHJvamVjdC5vcmcvPmBfIHByb2plY3QgdXNlcyBLY29uZmlnbGliIHRvDQog
ICAgKyAgZ2VuZXJhdGUgYGAuY29uZmlnYGAgZmlsZXMgYW5kIEMgaGVhZGVycyBvbiBMaW51eCBh
cyB3ZWxsIGFzIFdpbmRvd3MuDQogICAgKw0KICAgICstICoqSW50ZXJuYWxzIHRoYXQgKG1vc3Rs
eSkgbWlycm9yIHRoZSBDIGltcGxlbWVudGF0aW9uKioNCiAgICArICANCiAgICArICBXaGlsZSBi
ZWluZyBzaW1wbGVyIHRvIHVuZGVyc3RhbmQgYW5kIHR3ZWFrLg0KICAgICsNCiAgICArTWVudWNv
bmZpZyBpbnRlcmZhY2VzDQogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICsNCiAgICAr
VGhyZWUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VzIGFyZSBjdXJyZW50bHkgYXZhaWxhYmxlOg0K
ICAgICsNCiAgICArLSBgbWVudWNvbmZpZy5weSA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXpl
ci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL21lbnVjb25maWcucHk+YF8NCiAgICArICBpcyBhIHRl
cm1pbmFsLWJhc2VkIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGltcGxlbWVudGVkIHVzaW5nIHRo
ZSBzdGFuZGFyZA0KICAgICsgIFB5dGhvbiBgYGN1cnNlc2BgIG1vZHVsZS4gYGB4Y29uZmlnYGAg
ZmVhdHVyZXMgbGlrZSBzaG93aW5nIGludmlzaWJsZSBzeW1ib2xzIGFuZA0KICAgICsgIHNob3dp
bmcgc3ltYm9sIG5hbWVzIGFyZSBpbmNsdWRlZCwgYW5kIGl0J3MgcG9zc2libGUgdG8ganVtcCBk
aXJlY3RseSB0byBhIHN5bWJvbA0KICAgICsgIGluIHRoZSBtZW51IHRyZWUgKGV2ZW4gaWYgaXQn
cyBjdXJyZW50bHkgaW52aXNpYmxlKS4NCiAgICArICANCiAgICArICAuLiBpbWFnZTo6IGh0dHBz
Oi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9zY3JlZW5z
aG90cy9zY3JlZW5zaG90cy9tZW51Y29uZmlnLmdpZg0KICAgICsNCiAgICArICAqVGhlcmUgaXMg
bm93IGFsc28gYSBzaG93LWhlbHAgbW9kZSB0aGF0IHNob3dzIHRoZSBoZWxwIHRleHQgb2YgdGhl
IGN1cnJlbnRseQ0KICAgICsgIHNlbGVjdGVkIHN5bWJvbCBpbiB0aGUgaGVscCB3aW5kb3cgYXQg
dGhlIGJvdHRvbS4qDQogICAgKw0KICAgICsgIFN0YXJ0aW5nIHdpdGggS2NvbmZpZ2xpYiAxMi4y
LjAsIGBgbWVudWNvbmZpZy5weWBgIHJ1bnMgdW5kZXIgYm90aCBQeXRob24gMg0KICAgICsgIGFu
ZCBQeXRob24gMyAocHJldmlvdXNseSwgaXQgb25seSByYW4gdW5kZXIgUHl0aG9uIDMsIHNvIHRo
aXMgd2FzIGENCiAgICArICBiYWNrcG9ydCkuIFJ1bm5pbmcgaXQgdW5kZXIgUHl0aG9uIDMgcHJv
dmlkZXMgYmV0dGVyIHN1cHBvcnQgZm9yIFVuaWNvZGUgdGV4dA0KICAgICsgIGVudHJ5IChgYGdl
dF93Y2goKWBgIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGBgY3Vyc2VzYGAgbW9kdWxlIG9uIFB5
dGhvbiAyKS4NCiAgICArDQogICAgKyAgVGhlcmUgYXJlIG5vIHRoaXJkLXBhcnR5IGRlcGVuZGVu
Y2llcyBvbiBcKm5peC4gT24gV2luZG93cywNCiAgICArICB0aGUgYGBjdXJzZXNgYCBtb2R1bGVz
IGlzIG5vdCBhdmFpbGFibGUgYnkgZGVmYXVsdCwgYnV0IHN1cHBvcnQNCiAgICArICBjYW4gYmUg
YWRkZWQgYnkgaW5zdGFsbGluZyB0aGUgYGB3aW5kb3dzLWN1cnNlc2BgIHBhY2thZ2UgKHdoaWNo
IGlzDQogICAgKyAgaW5zdGFsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBLY29uZmlnbGliIGlzIGlu
c3RhbGxlZCB2aWEgYGBwaXBgYA0KICAgICsgIG9uIFdpbmRvd3MpOg0KICAgICsgIA0KICAgICsg
IC4uIGNvZGUtYmxvY2s6OiBzaGVsbA0KICAgICsNCiAgICArICAgICAgJCBwaXAgaW5zdGFsbCB3
aW5kb3dzLWN1cnNlcw0KICAgICsNCiAgICArICBUaGlzIHVzZXMgd2hlZWxzIGJ1aWx0IGZyb20g
YHRoaXMgcmVwb3NpdG9yeQ0KICAgICsgIDxodHRwczovL2dpdGh1Yi5jb20vemVwaHlycHJvamVj
dC1ydG9zL3dpbmRvd3MtY3Vyc2VzPmBfLCB3aGljaCBpcyBpbiB0dXJuDQogICAgKyAgYmFzZWQg
b24gQ2hyaXN0b3BoIEdvaGxrZSdzIGBQeXRob24gRXh0ZW5zaW9uIFBhY2thZ2VzIGZvciBXaW5k
b3dzDQogICAgKyAgPGh0dHBzOi8vd3d3LmxmZC51Y2kuZWR1L35nb2hsa2UvcHl0aG9ubGlicy8j
Y3Vyc2VzPmBfLg0KICAgICsNCiAgICArICBTZWUgdGhlIGRvY3N0cmluZyBhdCB0aGUgdG9wIG9m
IGBtZW51Y29uZmlnLnB5DQogICAgKyAgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2Nv
bmZpZ2xpYi9ibG9iL21hc3Rlci9tZW51Y29uZmlnLnB5PmBfIGZvcg0KICAgICsgIG1vcmUgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIHRlcm1pbmFsIG1lbnVjb25maWcgaW1wbGVtZW50YXRpb24uDQog
ICAgKw0KICAgICstIGBndWljb25maWcucHkNCiAgICArICA8aHR0cHM6Ly9naXRodWIuY29tL3Vs
ZmFsaXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL2d1aWNvbmZpZy5weT5gXyBpcyBhDQogICAg
KyAgZ3JhcGhpY2FsIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIHdyaXR0ZW4gaW4gYFRraW50ZXIN
CiAgICArICA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3RraW50ZXIuaHRtbD5g
Xy4gTGlrZSBgYG1lbnVjb25maWcucHlgYCwNCiAgICArICBpdCBzdXBwb3J0cyBzaG93aW5nIGFs
bCBzeW1ib2xzICh3aXRoIGludmlzaWJsZSBzeW1ib2xzIGluIHJlZCkgYW5kIGp1bXBpbmcNCiAg
ICArICBkaXJlY3RseSB0byBzeW1ib2xzLiBTeW1ib2wgdmFsdWVzIGNhbiBhbHNvIGJlIGNoYW5n
ZWQgZGlyZWN0bHkgZnJvbSB0aGUNCiAgICArICBqdW1wLXRvIGRpYWxvZy4NCiAgICArDQogICAg
KyAgV2hlbiBzaW5nbGUtbWVudSBtb2RlIGlzIGVuYWJsZWQsIGEgc2luZ2xlIG1lbnUgaXMgc2hv
d24gYXQgYSB0aW1lLCBsaWtlIGluDQogICAgKyAgdGhlIHRlcm1pbmFsIG1lbnVjb25maWcuIE9u
bHkgdGhpcyBtb2RlIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBzeW1ib2xzIGRlZmluZWQNCiAgICAr
ICB3aXRoIGBgY29uZmlnYGAgYW5kIHN5bWJvbHMgZGVmaW5lZCB3aXRoIGBgbWVudWNvbmZpZ2Bg
Lg0KICAgICsNCiAgICArICBgYGd1aWNvbmZpZy5weWBgIGhhcyBiZWVuIHRlc3RlZCBvbiBYMTEs
IFdpbmRvd3MsIGFuZCBtYWNPUywgYW5kIGlzDQogICAgKyAgY29tcGF0aWJsZSB3aXRoIGJvdGgg
UHl0aG9uIDIgYW5kIFB5dGhvbiAzLg0KICAgICsNCiAgICArICBEZXNwaXRlIGJlaW5nIHBhcnQg
b2YgdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5LCBgYHRraW50ZXJgYCBvZnRlbiBpc24ndA0K
ICAgICsgIGluY2x1ZGVkIGJ5IGRlZmF1bHQgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMgb24gTGlu
dXguIFRoZXNlIGNvbW1hbmRzIHdpbGwNCiAgICArICBpbnN0YWxsIGl0IG9uIGEgZmV3IGRpZmZl
cmVudCBkaXN0cmlidXRpb25zOg0KICAgICsNCiAgICArICAtIFVidW50dTogYGBzdWRvIGFwdCBp
bnN0YWxsIHB5dGhvbi10a2BgL2Bgc3VkbyBhcHQgaW5zdGFsbCBweXRob24zLXRrYGANCiAgICAr
DQogICAgKyAgLSBGZWRvcmE6IGBgZG5mIGluc3RhbGwgcHl0aG9uMi10a2ludGVyYGAvYGBkbmYg
aW5zdGFsbCBweXRob24zLXRraW50ZXJgYA0KICAgICsNCiAgICArICAtIEFyY2g6IGBgc3VkbyBw
YWNtYW4gLVMgdGtgYA0KICAgICsNCiAgICArICAtIENsZWFyIExpbnV4OiBgYHN1ZG8gc3d1cGQg
YnVuZGxlLWFkZCBweXRob24zLXRjbGBgDQogICAgKw0KICAgICsgIFNjcmVlbnNob3QgYmVsb3cs
IHdpdGggc2hvdy1hbGwgbW9kZSBlbmFibGVkIGFuZCB0aGUganVtcC10byBkaWFsb2cgb3BlbjoN
CiAgICArDQogICAgKyAgLi4gaW1hZ2U6OiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5j
b20vdWxmYWxpemVyL0tjb25maWdsaWIvc2NyZWVuc2hvdHMvc2NyZWVuc2hvdHMvZ3VpY29uZmln
LnBuZw0KICAgICsNCiAgICArICBUbyBhdm9pZCBoYXZpbmcgdG8gY2FycnkgYXJvdW5kIGEgYnVu
Y2ggb2YgR0lGcywgdGhlIGltYWdlIGRhdGEgaXMgZW1iZWRkZWQNCiAgICArICBpbiBgYGd1aWNv
bmZpZy5weWBgLiBUbyB1c2Ugc2VwYXJhdGUgR0lGIGZpbGVzIGluc3RlYWQsIGNoYW5nZQ0KICAg
ICsgIGBgX1VTRV9FTUJFRERFRF9JTUFHRVNgYCB0byBgYEZhbHNlYGAgaW4gYGBndWljb25maWcu
cHlgYC4gVGhlIGltYWdlIGZpbGVzDQogICAgKyAgY2FuIGJlIGZvdW5kIGluIHRoZSBgc2NyZWVu
c2hvdHMNCiAgICArICA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL3Ry
ZWUvc2NyZWVuc2hvdHMvZ3VpY29uZmlnPmBfDQogICAgKyAgYnJhbmNoLg0KICAgICsNCiAgICAr
ICBJIGRpZCBteSBiZXN0IHdpdGggdGhlIGltYWdlcywgYnV0IHNvbWUgYXJlIGRlZmluaXRlbHkg
b25seSBhcnQgYWRqYWNlbnQuDQogICAgKyAgVG91Y2gtdXBzIGFyZSB3ZWxjb21lLiA6KQ0KICAg
ICsNCiAgICArLSBgcHltZW51Y29uZmlnIDxodHRwczovL2dpdGh1Yi5jb20vUm9tYVZpcy9weW1l
bnVjb25maWc+YF8sIGJ1aWx0IGJ5IGBSb21hVmlzDQogICAgKyAgPGh0dHBzOi8vZ2l0aHViLmNv
bS9Sb21hVmlzPmBfLCBpcyBhbiBvbGRlciBwb3J0YWJsZSBQeXRob24gMi8zIFRrSW50ZXINCiAg
ICArICBtZW51Y29uZmlnIGltcGxlbWVudGF0aW9uLg0KICAgICsNCiAgICArICBTY3JlZW5zaG90
IGJlbG93Og0KICAgICsNCiAgICArICAuLiBpbWFnZTo6IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJj
b250ZW50LmNvbS9Sb21hVmlzL3B5bWVudWNvbmZpZy9tYXN0ZXIvc2NyZWVuc2hvdC5QTkcNCiAg
ICArDQogICAgKyAgV2hpbGUgd29ya2luZyBvbiB0aGUgdGVybWluYWwgbWVudWNvbmZpZyBpbXBs
ZW1lbnRhdGlvbiwgSSBhZGRlZCBhIGZldyBBUElzDQogICAgKyAgdG8gS2NvbmZpZ2xpYiB0aGF0
IHR1cm5lZCBvdXQgdG8gYmUgaGFuZHkuIGBgcHltZW51Y29uZmlnYGAgcHJlZGF0ZXMNCiAgICAr
ICBgYG1lbnVjb25maWcucHlgYCBhbmQgYGBndWljb25maWcucHlgYCwgYW5kIHNvIGRpZG4ndCBo
YXZlIHRoZW0gYXZhaWxhYmxlLg0KICAgICsgIEJsYW1lIG1lIGZvciBhbnkgd29ya2Fyb3VuZHMu
DQogICAgKw0KICAgICtFeGFtcGxlcw0KICAgICstLS0tLS0tLQ0KICAgICsNCiAgICArRXhhbXBs
ZSBzY3JpcHRzDQogICAgK35+fn5+fn5+fn5+fn5+fg0KICAgICsNCiAgICArVGhlIGBleGFtcGxl
cy8gPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9l
eGFtcGxlcz5gXyBkaXJlY3RvcnkgY29udGFpbnMgc29tZSBzaW1wbGUgZXhhbXBsZSBzY3JpcHRz
LiBBbW9uZyB0aGVzZSBhcmUgdGhlIGZvbGxvd2luZyBvbmVzLiBNYWtlIHN1cmUgeW91IHJ1biB0
aGVtIHdpdGggdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIEtjb25maWdsaWIsIGFzIHRoZXkgbWlnaHQg
bWFrZSB1c2Ugb2YgbmV3bHkgYWRkZWQgZmVhdHVyZXMuDQogICAgKw0KICAgICstIGBldmFsX2V4
cHIucHkgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rl
ci9leGFtcGxlcy9ldmFsX2V4cHIucHk+YF8gZXZhbHVhdGVzIGFuIGV4cHJlc3Npb24gaW4gdGhl
IGNvbnRleHQgb2YgYSBjb25maWd1cmF0aW9uLg0KICAgICsNCiAgICArLSBgZmluZF9zeW1ib2wu
cHkgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9l
eGFtcGxlcy9maW5kX3N5bWJvbC5weT5gXyBzZWFyY2hlcyB0aHJvdWdoIGV4cHJlc3Npb25zIHRv
IGZpbmQgcmVmZXJlbmNlcyB0byBhIHN5bWJvbCwgYWxzbyBwcmludGluZyBhICJiYWNrdHJhY2Ui
IHdpdGggcGFyZW50cyBmb3IgZWFjaCByZWZlcmVuY2UgZm91bmQuDQogICAgKw0KICAgICstIGBo
ZWxwX2dyZXAucHkgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9i
L21hc3Rlci9leGFtcGxlcy9oZWxwX2dyZXAucHk+YF8gc2VhcmNoZXMgZm9yIGEgc3RyaW5nIGlu
IGFsbCBoZWxwIHRleHRzLg0KICAgICsNCiAgICArLSBgcHJpbnRfdHJlZS5weSA8aHR0cHM6Ly9n
aXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL3ByaW50
X3RyZWUucHk+YF8gcHJpbnRzIGEgdHJlZSBvZiBhbGwgY29uZmlndXJhdGlvbiBpdGVtcy4NCiAg
ICArDQogICAgKy0gYHByaW50X2NvbmZpZ190cmVlLnB5IDxodHRwczovL2dpdGh1Yi5jb20vdWxm
YWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIvZXhhbXBsZXMvcHJpbnRfY29uZmlnX3RyZWUu
cHk+YF8gaXMgc2ltaWxhciB0byBgYHByaW50X3RyZWUucHlgYCwgYnV0IGR1bXBzIHRoZSB0cmVl
IGFzIGl0IHdvdWxkIGFwcGVhciBpbiBgYG1lbnVjb25maWdgYCwgaW5jbHVkaW5nIHZhbHVlcy4g
VGhpcyBjYW4gYmUgaGFuZHkgZm9yIHZpc3VhbGx5IGRpZmZpbmcgYmV0d2VlbiBgYC5jb25maWdg
YCBmaWxlcyBhbmQgZGlmZmVyZW50IHZlcnNpb25zIG9mIGBgS2NvbmZpZ2BgIGZpbGVzLg0KICAg
ICsNCiAgICArLSBgbGlzdF91bmRlZmluZWQucHkgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6
ZXIvS2NvbmZpZ2xpYi9ibG9iL21hc3Rlci9leGFtcGxlcy9saXN0X3VuZGVmaW5lZC5weT5gXyBm
aW5kcyByZWZlcmVuY2VzIHRvIHN5bWJvbHMgdGhhdCBhcmUgbm90IGRlZmluZWQgYnkgYW55IGFy
Y2hpdGVjdHVyZSBpbiB0aGUgTGludXgga2VybmVsLg0KICAgICsNCiAgICArLSBgbWVyZ2VfY29u
ZmlnLnB5IDxodHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0
ZXIvZXhhbXBsZXMvbWVyZ2VfY29uZmlnLnB5PmBfIG1lcmdlcyBjb25maWd1cmF0aW9uIGZyYWdt
ZW50cyB0byBwcm9kdWNlIGEgY29tcGxldGUgLmNvbmZpZywgc2ltaWxhcmx5IHRvIGBgc2NyaXB0
cy9rY29uZmlnL21lcmdlX2NvbmZpZy5zaGBgIGZyb20gdGhlIGtlcm5lbC4NCiAgICArDQogICAg
Ky0gYG1lbnVjb25maWdfZXhhbXBsZS5weSA8aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9L
Y29uZmlnbGliL2Jsb2IvbWFzdGVyL2V4YW1wbGVzL21lbnVjb25maWdfZXhhbXBsZS5weT5gXyBp
bXBsZW1lbnRzIGEgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgdGhhdCB1c2VzIG5vdGF0aW9uIHNp
bWlsYXIgdG8gYGBtYWtlIG1lbnVjb25maWdgYC4gSXQncyBkZWxpYmVyYXRlbHkga2VwdCBhcyBz
aW1wbGUgYXMgcG9zc2libGUgdG8gZGVtb25zdHJhdGUganVzdCB0aGUgY29yZSBjb25jZXB0cy4N
CiAgICArDQogICAgK1JlYWwtd29ybGQgZXhhbXBsZXMNCiAgICArfn5+fn5+fn5+fn5+fn5+fn5+
fg0KICAgICsNCiAgICArLSBga2NvbmZpZy5weQ0KICAgICsgIDxodHRwczovL2dpdGh1Yi5jb20v
emVwaHlycHJvamVjdC1ydG9zL3plcGh5ci9ibG9iL21hc3Rlci9zY3JpcHRzL2tjb25maWcva2Nv
bmZpZy5weT5gXw0KICAgICsgIGZyb20gdGhlIGBaZXBoeXIgPGh0dHBzOi8vd3d3LnplcGh5cnBy
b2plY3Qub3JnLz5gXyBwcm9qZWN0IGhhbmRsZXMNCiAgICArICBgYC5jb25maWdgYCBhbmQgaGVh
ZGVyIGZpbGUgZ2VuZXJhdGlvbiwgYWxzbyBkb2luZyBjb25maWd1cmF0aW9uIGZyYWdtZW50DQog
ICAgKyAgbWVyZ2luZw0KICAgICsNCiAgICArLSBgZ2VucmVzdC5weQ0KICAgICsgIDxodHRwczov
L2dpdGh1Yi5jb20vemVwaHlycHJvamVjdC1ydG9zL3plcGh5ci9ibG9iL21hc3Rlci9kb2Mvc2Ny
aXB0cy9nZW5yZXN0LnB5PmBfDQogICAgKyAgZ2VuZXJhdGVzIGEgS2NvbmZpZyBzeW1ib2wgY3Jv
c3MtcmVmZXJlbmNlLCB3aGljaCBjYW4gYmUgdmlld2VkIGBoZXJlDQogICAgKyAgPGh0dHA6Ly9k
b2NzLnplcGh5cnByb2plY3Qub3JnL3JlZmVyZW5jZS9rY29uZmlnL2luZGV4Lmh0bWw+YF9fDQog
ICAgKw0KICAgICstIGBDTWFrZSBhbmQgSURFIGludGVncmF0aW9uDQogICAgKyAgPGh0dHBzOi8v
Z2l0aHViLmNvbS9lc3ByZXNzaWYvZXNwLWlkZi90cmVlL21hc3Rlci90b29scy9rY29uZmlnX25l
dz5gXyBmcm9tDQogICAgKyAgdGhlIEVTUC1JREYgcHJvamVjdCwgdmlhIGEgY29uZmlndXJhdGlv
biBzZXJ2ZXIgcHJvZ3JhbS4NCiAgICArDQogICAgKy0gYEEgc2NyaXB0IGZvciB0dXJuaW5nIG9u
IFVTQi1yZWxhdGVkIG9wdGlvbnMNCiAgICArICA8aHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9z
eXprYWxsZXIvYmxvYi9tYXN0ZXIvZGFzaGJvYXJkL2NvbmZpZy9rY29uZmlnbGliLW1lcmdlLXVz
Yi1jb25maWdzLnB5PmBfLA0KICAgICsgIGZyb20gdGhlIGBzeXprYWxsZXIgPGh0dHBzOi8vZ2l0
aHViLmNvbS9nb29nbGUvc3l6a2FsbGVyPmBfIHByb2plY3QuDQogICAgKw0KICAgICstIGBWYXJp
b3VzIGF1dG9tYXRlZCBjaGVja3MNCiAgICArICA8aHR0cHM6Ly9naXRodWIuY29tL3plcGh5cnBy
b2plY3QtcnRvcy9jaS10b29scy9ibG9iL21hc3Rlci9zY3JpcHRzL2NoZWNrX2NvbXBsaWFuY2Uu
cHk+YF8sDQogICAgKyAgaW5jbHVkaW5nIGEgY2hlY2sgZm9yIHJlZmVyZW5jZXMgdG8gdW5kZWZp
bmVkIEtjb25maWcgc3ltYm9scyBpbiBzb3VyY2UgY29kZS4NCiAgICArICBTZWUgdGhlIGBgS2Nv
bmZpZ0NoZWNrYGAgY2xhc3MuDQogICAgKw0KICAgICstIGBWYXJpb3VzIHV0aWxpdGllcw0KICAg
ICsgIDxodHRwczovL2dpdGh1Yi5jb20vcHJvamVjdGFjcm4vYWNybi1oeXBlcnZpc29yL3RyZWUv
bWFzdGVyL3NjcmlwdHMva2NvbmZpZz5gXw0KICAgICsgIGZyb20gdGhlIGBBQ1JOIDxodHRwczov
L3Byb2plY3RhY3JuLm9yZy8+YF8gcHJvamVjdA0KICAgICsNCiAgICArVGhlc2UgdXNlIHRoZSBv
bGRlciBLY29uZmlnbGliIDEgQVBJLCB3aGljaCB3YXMgY2x1bmtpZXIgYW5kIG5vdCBhcyBnZW5l
cmFsDQogICAgKyhmdW5jdGlvbnMgaW5zdGVhZCBvZiBwcm9wZXJ0aWVzLCBubyBkaXJlY3QgYWNj
ZXNzIHRvIHRoZSBtZW51IHN0cnVjdHVyZSBvcg0KICAgICtwcm9wZXJ0aWVzLCB1Z2xpZXIgYGBf
X3N0cl9fKClgYCBvdXRwdXQpOg0KICAgICsNCiAgICArLSBgZ2VuYm9hcmRzY2ZnLnB5IDxodHRw
Oi8vZ2l0LmRlbnguZGUvP3A9dS1ib290LmdpdDthPWJsb2I7Zj10b29scy9nZW5ib2FyZHNjZmcu
cHk7aGI9SEVBRD5gXyBmcm9tIGBEYXMgVS1Cb290IDxodHRwOi8vd3d3LmRlbnguZGUvd2lraS9V
LUJvb3Q+YF8gZ2VuZXJhdGVzIHNvbWUgc29ydCBvZiBsZWdhY3kgYm9hcmQgZGF0YWJhc2UgYnkg
cHVsbGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgbmV3bHkgYWRkZWQgS2NvbmZpZy1iYXNlZCBjb25m
aWd1cmF0aW9uIHN5c3RlbSAoYXMgZmFyIGFzIEkgdW5kZXJzdGFuZCBpdCA6KS4NCiAgICArDQog
ICAgKy0gYGdlbi1tYW51YWwtbGlzdHMucHkgPGh0dHBzOi8vZ2l0LmJ1c3lib3gubmV0L2J1aWxk
cm9vdC90cmVlL3N1cHBvcnQvc2NyaXB0cy9nZW4tbWFudWFsLWxpc3RzLnB5P2lkPTU2NzZhMmRl
ZWE4OTZmMzgxMjNiOTk3ODFkYTBhNjEyODY1YWRlYjA+YF8gZ2VuZXJhdGVkIGxpc3RpbmdzIGZv
ciBhbiBhcHBlbmRpeCBpbiB0aGUgYEJ1aWxkcm9vdCA8aHR0cHM6Ly9idWlsZHJvb3Qub3JnPmBf
IG1hbnVhbC4gKFRoZSBsaXN0aW5nIGhhcyBzaW5jZSBiZWVuIHJlbW92ZWQuKQ0KICAgICsNCiAg
ICArLSBgZ2VuX2tjb25maWdfZG9jLnB5IDxodHRwczovL2dpdGh1Yi5jb20vZXNwcmVzc2lmL2Vz
cC1pZGYvYmxvYi9tYXN0ZXIvZG9jcy9nZW4ta2NvbmZpZy1kb2MucHk+YF8gZnJvbSB0aGUgYGVz
cC1pZGYgPGh0dHBzOi8vZ2l0aHViLmNvbS9lc3ByZXNzaWYvZXNwLWlkZj5gXyBwcm9qZWN0IGdl
bmVyYXRlcyBkb2N1bWVudGF0aW9uIGZyb20gS2NvbmZpZyBmaWxlcy4NCiAgICArDQogICAgKy0g
YFNDb25mIDxodHRwczovL2dpdGh1Yi5jb20vQ29yeVhpZS9TQ29uZj5gXyBidWlsZHMgYW4gaW50
ZXJhY3RpdmUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgKGxpa2UgYGBtZW51Y29uZmlnYGApIG9u
IHRvcCBvZiBLY29uZmlnbGliLCBmb3IgdXNlIGUuZy4gd2l0aCBgU0NvbnMgPHNjb25zLm9yZz5g
Xy4NCiAgICArDQogICAgKy0gYGtjb25maWctZGlmZi5weSA8aHR0cHM6Ly9naXN0LmdpdGh1Yi5j
b20vZHViaW91c2ppbS81NjM4OTYxPmBfIC0tIGEgc2NyaXB0IGJ5IGBkdWJpb3VzamltIDxodHRw
czovL2dpdGh1Yi5jb20vZHViaW91c2ppbT5gXyB0aGF0IGNvbXBhcmVzIGtlcm5lbCBjb25maWd1
cmF0aW9ucy4NCiAgICArDQogICAgKy0gT3JpZ2luYWxseSwgS2NvbmZpZ2xpYiB3YXMgdXNlZCBp
biBjaGFwdGVyIDQgb2YgbXkgYG1hc3RlcidzIHRoZXNpcyA8aHR0cDovL2xpdS5kaXZhLXBvcnRh
bC5vcmcvc21hc2gvZ2V0L2RpdmEyOjQ3MzAzOC9GVUxMVEVYVDAxLnBkZj5gXyB0byBhdXRvbWF0
aWNhbGx5IGdlbmVyYXRlIGEgIm1pbmltYWwiIGtlcm5lbCBmb3IgYSBnaXZlbiBzeXN0ZW0uIFBh
cnRzIG9mIGl0IGJvdGhlciBtZSBhIGJpdCBub3csIGJ1dCB0aGF0J3MgaG93IGl0IGdvZXMgd2l0
aCBvbGQgd29yay4NCiAgICArDQogICAgK1NhbXBsZSBgYG1ha2UgaXNjcmlwdGNvbmZpZ2BgIHNl
c3Npb24NCiAgICArfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fg0KICAgICsN
CiAgICArVGhlIGZvbGxvd2luZyBsb2cgc2hvdWxkIGdpdmUgc29tZSBpZGVhIG9mIHRoZSBmdW5j
dGlvbmFsaXR5IGF2YWlsYWJsZSBpbiB0aGUgQVBJOg0KICAgICsNCiAgICArLi4gY29kZS1ibG9j
azo6DQogICAgKw0KICAgICsgICAgJCBtYWtlIGlzY3JpcHRjb25maWcNCiAgICArICAgIEEgS2Nv
bmZpZyBpbnN0YW5jZSAna2NvbmYnIGZvciB0aGUgYXJjaGl0ZWN0dXJlIHg4NiBoYXMgYmVlbiBj
cmVhdGVkLg0KICAgICsgICAgPj4+IGtjb25mICAjIENhbGxzIEtjb25maWcuX19yZXByX18oKQ0K
ICAgICsgICAgPGNvbmZpZ3VyYXRpb24gd2l0aCAxMzcxMSBzeW1ib2xzLCBtYWluIG1lbnUgcHJv
bXB0ICJMaW51eC94ODYgNC4xNC4wLXJjNyBLZXJuZWwgQ29uZmlndXJhdGlvbiIsIHNyY3RyZWUg
Ii4iLCBjb25maWcgc3ltYm9sIHByZWZpeCAiQ09ORklHXyIsIHdhcm5pbmdzIGVuYWJsZWQsIHVu
ZGVmLiBzeW1ib2wgYXNzaWdubWVudCB3YXJuaW5ncyBkaXNhYmxlZD4NCiAgICArICAgID4+PiBr
Y29uZi5tYWlubWVudV90ZXh0ICAjIEV4cGFuZGVkIG1haW4gbWVudSB0ZXh0DQogICAgKyAgICAn
TGludXgveDg2IDQuMTQuMC1yYzcgS2VybmVsIENvbmZpZ3VyYXRpb24nDQogICAgKyAgICA+Pj4g
a2NvbmYudG9wX25vZGUgICMgVGhlIGltcGxpY2l0IHRvcC1sZXZlbCBtZW51DQogICAgKyAgICA8
bWVudSBub2RlIGZvciBtZW51LCBwcm9tcHQgIkxpbnV4L3g4NiA0LjE0LjAtcmM3IEtlcm5lbCBD
b25maWd1cmF0aW9uIiAodmlzaWJpbGl0eSB5KSwgZGVwcyB5LCAndmlzaWJsZSBpZicgZGVwcyB5
LCBoYXMgY2hpbGQsIEtjb25maWc6NT4NCiAgICArICAgID4+PiBrY29uZi50b3Bfbm9kZS5saXN0
ICAjIEZpcnN0IGNoaWxkIG1lbnUgbm9kZQ0KICAgICsgICAgPG1lbnUgbm9kZSBmb3Igc3ltYm9s
IFNSQ0FSQ0gsIGRlcHMgeSwgaGFzIG5leHQsIEtjb25maWc6Nz4NCiAgICArICAgID4+PiBwcmlu
dChrY29uZi50b3Bfbm9kZS5saXN0KSAgIyBDYWxscyBNZW51Tm9kZS5fX3N0cl9fKCkNCiAgICAr
ICAgIGNvbmZpZyBTUkNBUkNIDQogICAgKyAgICAJc3RyaW5nDQogICAgKyAgICAJb3B0aW9uIGVu
dj0iU1JDQVJDSCINCiAgICArICAgIAlkZWZhdWx0ICJ4ODYiDQogICAgKyAgICA+Pj4gc3ltID0g
a2NvbmYudG9wX25vZGUubGlzdC5uZXh0Lml0ZW0gICMgSXRlbSBjb250YWluZWQgaW4gbmV4dCBt
ZW51IG5vZGUNCiAgICArICAgID4+PiBwcmludChzeW0pICAjIENhbGxzIFN5bWJvbC5fX3N0cl9f
KCkNCiAgICArICAgIGNvbmZpZyA2NEJJVA0KICAgICsgICAgCWJvb2wgIjY0LWJpdCBrZXJuZWwi
IGlmIEFSQ0ggPSAieDg2Ig0KICAgICsgICAgCWRlZmF1bHQgQVJDSCAhPSAiaTM4NiINCiAgICAr
ICAgIAloZWxwDQogICAgKyAgICAJICBTYXkgeWVzIHRvIGJ1aWxkIGEgNjQtYml0IGtlcm5lbCAt
IGZvcm1lcmx5IGtub3duIGFzIHg4Nl82NA0KICAgICsgICAgCSAgU2F5IG5vIHRvIGJ1aWxkIGEg
MzItYml0IGtlcm5lbCAtIGZvcm1lcmx5IGtub3duIGFzIGkzODYNCiAgICArICAgID4+PiBzeW0g
ICMgQ2FsbHMgU3ltYm9sLl9fcmVwcl9fKCkNCiAgICArICAgIDxzeW1ib2wgNjRCSVQsIGJvb2ws
ICI2NC1iaXQga2VybmVsIiwgdmFsdWUgeSwgdmlzaWJpbGl0eSB5LCBkaXJlY3QgZGVwcyB5LCBh
cmNoL3g4Ni9LY29uZmlnOjI+DQogICAgKyAgICA+Pj4gc3ltLmFzc2lnbmFibGUgICMgQ3VycmVu
dGx5IGFzc2lnbmFibGUgdmFsdWVzICgwLCAxLCAyID0gbiwgbSwgeSkNCiAgICArICAgICgwLCAy
KQ0KICAgICsgICAgPj4+IHN5bS5zZXRfdmFsdWUoMCkgICMgU2V0IGl0IHRvIG4NCiAgICArICAg
IFRydWUNCiAgICArICAgID4+PiBzeW0udHJpX3ZhbHVlICAjIENoZWNrIHRoZSBuZXcgdmFsdWUN
CiAgICArICAgIDANCiAgICArICAgID4+PiBzeW0gPSBrY29uZi5zeW1zWyJYODZfTVBQQVJTRSJd
ICAjIExvb2sgdXAgc3ltYm9sIGJ5IG5hbWUNCiAgICArICAgID4+PiBwcmludChzeW0pDQogICAg
KyAgICBjb25maWcgWDg2X01QUEFSU0UNCiAgICArICAgIAlib29sICJFbmFibGUgTVBTIHRhYmxl
IiBpZiAoQUNQSSB8fCBTRkkpICYmIFg4Nl9MT0NBTF9BUElDDQogICAgKyAgICAJZGVmYXVsdCB5
IGlmIFg4Nl9MT0NBTF9BUElDDQogICAgKyAgICAJaGVscA0KICAgICsgICAgCSAgRm9yIG9sZCBz
bXAgc3lzdGVtcyB0aGF0IGRvIG5vdCBoYXZlIHByb3BlciBhY3BpIHN1cHBvcnQuIE5ld2VyIHN5
c3RlbXMNCiAgICArICAgIAkgIChlc3Agd2l0aCA2NGJpdCBjcHVzKSB3aXRoIGFjcGkgc3VwcG9y
dCwgTUFEVCBhbmQgRFNEVCB3aWxsIG92ZXJyaWRlIGl0DQogICAgKyAgICA+Pj4gZGVmYXVsdCA9
IHN5bS5kZWZhdWx0c1swXSAgIyBGZXRjaCBpdHMgZmlyc3QgZGVmYXVsdA0KICAgICsgICAgPj4+
IHN5bSA9IGRlZmF1bHRbMV0gICMgRmV0Y2ggdGhlIGRlZmF1bHQncyBjb25kaXRpb24gKGp1c3Qg
YSBTeW1ib2wgaGVyZSkNCiAgICArICAgID4+PiBwcmludChzeW0pDQogICAgKyAgICBjb25maWcg
WDg2X0xPQ0FMX0FQSUMNCiAgICArICAgIAlib29sDQogICAgKyAgICAJZGVmYXVsdCB5DQogICAg
KyAgICAJc2VsZWN0IElSUV9ET01BSU5fSElFUkFSQ0hZDQogICAgKyAgICAJc2VsZWN0IFBDSV9N
U0lfSVJRX0RPTUFJTiBpZiBQQ0lfTVNJDQogICAgKyAgICAJZGVwZW5kcyBvbiBYODZfNjQgfHwg
U01QIHx8IFg4Nl8zMl9OT05fU1RBTkRBUkQgfHwgWDg2X1VQX0FQSUMgfHwgUENJX01TSQ0KICAg
ICsgICAgPj4+IHN5bS5ub2RlcyAgIyBTaG93IHRoZSBNZW51Tm9kZShzKSBhc3NvY2lhdGVkIHdp
dGggaXQNCiAgICArICAgIFs8bWVudSBub2RlIGZvciBzeW1ib2wgWDg2X0xPQ0FMX0FQSUMsIGRl
cHMgbiwgaGFzIG5leHQsIGFyY2gveDg2L0tjb25maWc6MTAxNT5dDQogICAgKyAgICA+Pj4ga2Nv
bmZpZ2xpYi5leHByX3N0cihzeW0uZGVmYXVsdHNbMF1bMV0pICAjIFByaW50IHRoZSBkZWZhdWx0
J3MgY29uZGl0aW9uDQogICAgKyAgICAnWDg2XzY0IHx8IFNNUCB8fCBYODZfMzJfTk9OX1NUQU5E
QVJEIHx8IFg4Nl9VUF9BUElDIHx8IFBDSV9NU0knDQogICAgKyAgICA+Pj4ga2NvbmZpZ2xpYi5l
eHByX3ZhbHVlKHN5bS5kZWZhdWx0c1swXVsxXSkgICMgRXZhbHVhdGUgaXQgKDAgPSBuKQ0KICAg
ICsgICAgMA0KICAgICsgICAgPj4+IGtjb25mLnN5bXNbIjY0QklUIl0uc2V0X3ZhbHVlKDIpDQog
ICAgKyAgICBUcnVlDQogICAgKyAgICA+Pj4ga2NvbmZpZ2xpYi5leHByX3ZhbHVlKHN5bS5kZWZh
dWx0c1swXVsxXSkgICMgRXZhbHVhdGUgaXQgYWdhaW4gKDIgPSB5KQ0KICAgICsgICAgMg0KICAg
ICsgICAgPj4+IGtjb25mLndyaXRlX2NvbmZpZygibXljb25maWciKSAgIyBTYXZlIGEgLmNvbmZp
Zw0KICAgICsgICAgPj4+IF5EDQogICAgKyAgICAkIGNhdCBteWNvbmZpZw0KICAgICsgICAgIyBH
ZW5lcmF0ZWQgYnkgS2NvbmZpZ2xpYiAoaHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29u
ZmlnbGliKQ0KICAgICsgICAgQ09ORklHXzY0QklUPXkNCiAgICArICAgIENPTkZJR19YODZfNjQ9
eQ0KICAgICsgICAgQ09ORklHX1g4Nj15DQogICAgKyAgICBDT05GSUdfSU5TVFJVQ1RJT05fREVD
T0RFUj15DQogICAgKyAgICBDT05GSUdfT1VUUFVUX0ZPUk1BVD0iZWxmNjQteDg2LTY0Ig0KICAg
ICsgICAgQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3g4Ni9jb25maWdzL3g4Nl82NF9kZWZj
b25maWciDQogICAgKyAgICBDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkNCiAgICArICAgIENPTkZJ
R19TVEFDS1RSQUNFX1NVUFBPUlQ9eQ0KICAgICsgICAgQ09ORklHX01NVT15DQogICAgKyAgICAu
Li4NCiAgICArIA0KICAgICtUZXN0IHN1aXRlDQogICAgKy0tLS0tLS0tLS0NCiAgICArDQogICAg
K1RoZSB0ZXN0IHN1aXRlIGlzIHJ1biB3aXRoDQogICAgKw0KICAgICsuLiBjb2RlOjoNCiAgICAr
DQogICAgKyAgICAkIHB5dGhvbigzKSBLY29uZmlnbGliL3Rlc3RzdWl0ZS5weQ0KICAgICsgICAg
DQogICAgK2BweXB5IDxodHRwczovL3B5cHkub3JnLz5gXyB3b3JrcyB0b28sIGFuZCBpcyBtdWNo
IHNwZWVkaWVyIGZvciBldmVyeXRoaW5nIGV4Y2VwdCBgYGFsbG5vY29uZmlnLnB5YGAvYGBhbGxu
b2NvbmZpZ19zaW1wbGVyLnB5YGAvYGBhbGx5ZXNjb25maWcucHlgYCwgd2hlcmUgaXQgZG9lc24n
dCBoYXZlIHRpbWUgdG8gd2FybSB1cCBzaW5jZQ0KICAgICt0aGUgc2NyaXB0cyBhcmUgcnVuIHZp
YSBgYG1ha2Ugc2NyaXB0Y29uZmlnYGAuDQogICAgKw0KICAgICtUaGUgdGVzdCBzdWl0ZSBtdXN0
IGJlIHJ1biBmcm9tIHRoZSB0b3AtbGV2ZWwga2VybmVsIGRpcmVjdG9yeS4gSXQgcmVxdWlyZXMg
dGhhdCB0aGUNCiAgICArS2NvbmZpZ2xpYiBnaXQgcmVwb3NpdG9yeSBoYXMgYmVlbiBjbG9uZWQg
aW50byBpdCBhbmQgdGhhdCB0aGUgbWFrZWZpbGUgcGF0Y2ggaGFzIGJlZW4gYXBwbGllZC4NCiAg
ICArDQogICAgK1RvIGdldCByaWQgb2Ygd2FybmluZ3MgZ2VuZXJhdGVkIGZvciB0aGUga2VybmVs
IGBgS2NvbmZpZ2BgIGZpbGVzLCBhZGQgYGAyPi9kZXYvbnVsbGBgIHRvIHRoZSBjb21tYW5kIHRv
DQogICAgK2Rpc2NhcmQgYGBzdGRlcnJgYC4NCiAgICArDQogICAgKyoqTk9URTogRm9yZ2V0dGlu
ZyB0byBhcHBseSB0aGUgTWFrZWZpbGUgcGF0Y2ggd2lsbCBjYXVzZSBzb21lIHRlc3RzIHRoYXQg
Y29tcGFyZSBnZW5lcmF0ZWQgY29uZmlndXJhdGlvbnMgdG8gZmFpbCoqDQogICAgKw0KICAgICsq
Kk5PVEU6IFRoZSB0ZXN0IHN1aXRlIG92ZXJ3cml0ZXMgLmNvbmZpZyBpbiB0aGUga2VybmVsIHJv
b3QsIHNvIG1ha2Ugc3VyZSB0byBiYWNrIGl0IHVwLioqDQogICAgKw0KICAgICtUaGUgdGVzdCBz
dWl0ZSBjb25zaXN0cyBvZiBhIHNldCBvZiBzZWxmdGVzdHMgYW5kIGEgc2V0IG9mIGNvbXBhdGli
aWxpdHkgdGVzdHMgdGhhdA0KICAgICtjb21wYXJlIGNvbmZpZ3VyYXRpb25zIGdlbmVyYXRlZCBi
eSBLY29uZmlnbGliIHdpdGgNCiAgICArY29uZmlndXJhdGlvbnMgZ2VuZXJhdGVkIGJ5IHRoZSBD
IHRvb2xzLCBmb3IgYSBudW1iZXIgb2YgY2FzZXMuIFNlZQ0KICAgICtgdGVzdHN1aXRlLnB5IDxo
dHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIvdGVzdHN1
aXRlLnB5PmBfDQogICAgK2ZvciB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuDQogICAgKw0KICAgICtU
aGUgYHRlc3RzL3JlbHRlc3QgPGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xp
Yi9ibG9iL21hc3Rlci90ZXN0cy9yZWx0ZXN0PmBfIHNjcmlwdCBydW5zIHRoZSB0ZXN0IHN1aXRl
DQogICAgK2FuZCBhbGwgdGhlIGV4YW1wbGUgc2NyaXB0cyBmb3IgYm90aCBQeXRob24gMiBhbmQg
UHl0aG9uIDMsIHZlcmlmeWluZyB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MuDQogICAgKw0KICAgICtS
YXJlbHksIHRoZSBvdXRwdXQgZnJvbSB0aGUgQyB0b29scyBpcyBjaGFuZ2VkIHNsaWdodGx5ICht
b3N0IHJlY2VudGx5IGR1ZSB0byBhDQogICAgK2BjaGFuZ2UgPGh0dHBzOi8vd3d3LnNwaW5pY3Mu
bmV0L2xpc3RzL2xpbnV4LWtidWlsZC9tc2cxNzA3NC5odG1sPmBfIEkgYWRkZWQpLg0KICAgICtJ
ZiB5b3UgZ2V0IHRlc3Qgc3VpdGUgZmFpbHVyZXMsIHRyeSBydW5uaW5nIHRoZSB0ZXN0IHN1aXRl
IGFnYWluIGFnYWluc3QgdGhlDQogICAgK2BsaW51eC1uZXh0IHRyZWUgPGh0dHBzOi8vd3d3Lmtl
cm5lbC5vcmcvZG9jL21hbi1wYWdlcy9saW51eC1uZXh0Lmh0bWw+YF8sDQogICAgK3doaWNoIGhh
cyBhbGwgdGhlIGxhdGVzdCBjaGFuZ2VzLiBJIHdpbGwgbWFrZSBpdCBjbGVhciBpZiBhbnkNCiAg
ICArbm9uLWJhY2t3YXJkcy1jb21wYXRpYmxlIGNoYW5nZXMgYXBwZWFyLg0KICAgICsNCiAgICAr
QSBsb3Qgb2YgdGltZSBpcyBzcGVudCB3YWl0aW5nIGFyb3VuZCBmb3IgYGBtYWtlYGAgYW5kIHRo
ZSBDIHV0aWxpdGllcyAod2hpY2ggbmVlZCB0byByZXBhcnNlIGFsbCB0aGUNCiAgICArS2NvbmZp
ZyBmaWxlcyBmb3IgZWFjaCBkZWZjb25maWcgdGVzdCkuIEFkZGluZyBzb21lIG11bHRpcHJvY2Vz
c2luZyB0byB0aGUgdGVzdCBzdWl0ZSB3b3VsZCBtYWtlIHNlbnNlDQogICAgK3Rvby4NCiAgICAr
DQogICAgK05vdGVzDQogICAgKy0tLS0tDQogICAgKw0KICAgICsqIFRoaXMgaXMgdmVyc2lvbiAy
IG9mIEtjb25maWdsaWIsIHdoaWNoIGlzIG5vdCBiYWNrd2FyZHMtY29tcGF0aWJsZSB3aXRoDQog
ICAgKyAgS2NvbmZpZ2xpYiAxLiBBIHN1bW1hcnkgb2YgY2hhbmdlcyBiZXR3ZWVuIEtjb25maWds
aWIgMSBhbmQgS2NvbmZpZ2xpYg0KICAgICsgIDIgY2FuIGJlIGZvdW5kIGBoZXJlDQogICAgKyAg
PGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2NvbmZpZ2xpYi9ibG9iL3NjcmVlbnNob3Rz
L2tjb25maWdsaWItMi1jaGFuZ2VzLnR4dD5gX18uDQogICAgKw0KICAgICsqIEkgc29tZXRpbWVz
IHNlZSBwZW9wbGUgYWRkIGN1c3RvbSBvdXRwdXQgZm9ybWF0cywgd2hpY2ggaXMgcHJldHR5DQog
ICAgKyAgc3RyYWlnaHRmb3J3YXJkIHRvIGRvIChzZWUgdGhlIGltcGxlbWVudGF0aW9ucyBvZiBg
YHdyaXRlX2F1dG9jb25mKClgYCBhbmQNCiAgICArICBgYHdyaXRlX2NvbmZpZygpYGAgZm9yIGEg
dGVtcGxhdGUsIGFuZCBhbHNvIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZQ0KICAgICsgIGBgU3lt
Ym9sLmNvbmZpZ19zdHJpbmdgYCBwcm9wZXJ0eSkuIElmIHlvdSBjb21lIHVwIHdpdGggc29tZXRo
aW5nIHlvdSB0aGluaw0KICAgICsgIG1pZ2h0IGJlIHVzZWZ1bCB0byBvdGhlciBwZW9wbGUsIEkn
bSBoYXBweSB0byB0YWtlIGl0IGluIHVwc3RyZWFtLiBCYXR0ZXJpZXMNCiAgICArICBpbmNsdWRl
ZCBhbmQgYWxsIHRoYXQuDQogICAgKw0KICAgICsqIEtjb25maWdsaWIgYXNzdW1lcyB0aGUgbW9k
dWxlcyBzeW1ib2wgaXMgYGBNT0RVTEVTYGAsIHdoaWNoIGlzIGJhY2t3YXJkcy1jb21wYXRpYmxl
Lg0KICAgICsgIEEgd2FybmluZyBpcyBwcmludGVkIGJ5IGRlZmF1bHQgaWYgYGBvcHRpb24gbW9k
dWxlc2BgIGlzIHNldCBvbiBzb21lIG90aGVyIHN5bWJvbC4NCiAgICArICANCiAgICArICBMZXQg
bWUga25vdyBpZiB5b3UgbmVlZCBwcm9wZXIgYGBvcHRpb24gbW9kdWxlc2BgIHN1cHBvcnQuIEl0
IHdvdWxkbid0IGJlIHRoYXQNCiAgICArICBoYXJkIHRvIGFkZC4NCiAgICArDQogICAgK1RoYW5r
cw0KICAgICstLS0tLS0NCiAgICArDQogICAgKy0gVG8gYFJvbWFWaXMgPGh0dHBzOi8vZ2l0aHVi
LmNvbS9Sb21hVmlzPmBfLCBmb3IgbWFraW5nDQogICAgKyAgYHB5bWVudWNvbmZpZyA8aHR0cHM6
Ly9naXRodWIuY29tL1JvbWFWaXMvcHltZW51Y29uZmlnPmBfIGFuZCBzdWdnZXN0aW5nDQogICAg
KyAgdGhlIGBgcnNvdXJjZWBgIGtleXdvcmQuDQogICAgKw0KICAgICstIFRvIGBNaXRqYSBIb3J2
YXQgPGh0dHBzOi8vZ2l0aHViLmNvbS9waW5rZmx1aWQ+YF8sIGZvciBhZGRpbmcgc3VwcG9ydA0K
ICAgICsgIGZvciB1c2VyLWRlZmluZWQgc3R5bGVzIHRvIHRoZSB0ZXJtaW5hbCBtZW51Y29uZmln
Lg0KICAgICsNCiAgICArLSBUbyBgUGhpbGlwIENyYWlnIDxodHRwczovL2dpdGh1Yi5jb20vcGhp
bGlwYz5gXyBmb3IgYWRkaW5nDQogICAgKyAgc3VwcG9ydCBmb3IgdGhlIGBgYWxsbm9jb25maWdf
eWBgIG9wdGlvbiBhbmQgZml4aW5nIGFuIG9ic2N1cmUgaXNzdWUNCiAgICArICB3aXRoIGBgY29t
bWVudGBgXHMgaW5zaWRlIGBgY2hvaWNlYGBccyAodGhhdCBkaWRuJ3QgYWZmZWN0IGNvcnJlY3Ru
ZXNzIGJ1dA0KICAgICsgIG1hZGUgb3V0cHV0cyBkaWZmZXIpLiBgYGFsbG5vY29uZmlnX3lgYCBp
cyB1c2VkIHRvIGZvcmNlIGNlcnRhaW4gc3ltYm9scw0KICAgICsgIHRvIGBgeWBgIGR1cmluZyBg
YG1ha2UgYWxsbm9jb25maWdgYCB0byBpbXByb3ZlIGNvdmVyYWdlLg0KICAgICsNCiAgICArTGlj
ZW5zZQ0KICAgICstLS0tLS0tDQogICAgKw0KICAgICtTZWUgYExJQ0VOU0UudHh0IDxodHRwczov
L2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvYmxvYi9tYXN0ZXIvTElDRU5TRS50eHQ+
YF8uIFNQRFggbGljZW5zZSBpZGVudGlmaWVycyBhcmUgdXNlZCBpbiB0aGUNCiAgICArc291cmNl
IGNvZGUuDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9hbGxkZWZjb25maWcu
cHkgYi9zdXBwb3J0L2tjb25maWdsaWIvYWxsZGVmY29uZmlnLnB5DQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA3NTUNCiAgICBpbmRleCAwMDAwMDAwLi41MDgyZmNiDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi9hbGxkZWZjb25maWcucHkNCiAgICBAQCAtMCww
ICsxLDI3IEBADQogICAgKyMhL3Vzci9iaW4vZW52IHB5dGhvbg0KICAgICsNCiAgICArIyBDb3B5
cmlnaHQgKGMpIDIwMTgtMjAxOSwgVWxmIE1hZ251c3Nvbg0KICAgICsjIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBJU0MNCiAgICArDQogICAgKyIiIg0KICAgICtXcml0ZXMgYSBjb25maWd1cmF0
aW9uIGZpbGUgd2hlcmUgYWxsIHN5bWJvbHMgYXJlIHNldCB0byB0aGVpciB0aGVpciBkZWZhdWx0
DQogICAgK3ZhbHVlcy4NCiAgICArDQogICAgK1RoZSBkZWZhdWx0IG91dHB1dCBmaWxlbmFtZSBp
cyAnLmNvbmZpZycuIEEgZGlmZmVyZW50IGZpbGVuYW1lIGNhbiBiZSBwYXNzZWQgaW4NCiAgICAr
dGhlIEtDT05GSUdfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlLg0KICAgICsNCiAgICArVXNh
Z2UgZm9yIHRoZSBMaW51eCBrZXJuZWw6DQogICAgKw0KICAgICsgICQgbWFrZSBbQVJDSD08YXJj
aD5dIHNjcmlwdGNvbmZpZyBTQ1JJUFQ9S2NvbmZpZ2xpYi9hbGxkZWZjb25maWcucHkNCiAgICAr
IiIiDQogICAgK2ltcG9ydCBrY29uZmlnbGliDQogICAgKw0KICAgICsNCiAgICArZGVmIG1haW4o
KToNCiAgICArICAgIGtjb25mID0ga2NvbmZpZ2xpYi5zdGFuZGFyZF9rY29uZmlnKCkNCiAgICAr
ICAgIGtjb25maWdsaWIubG9hZF9hbGxjb25maWcoa2NvbmYsICJhbGxkZWYuY29uZmlnIikNCiAg
ICArICAgIHByaW50KGtjb25mLndyaXRlX2NvbmZpZygpKQ0KICAgICsNCiAgICArDQogICAgK2lm
IF9fbmFtZV9fID09ICJfX21haW5fXyI6DQogICAgKyAgICBtYWluKCkNCiAgICBkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnbGliL2FsbG1vZGNvbmZpZy5weSBiL3N1cHBvcnQva2NvbmZpZ2xp
Yi9hbGxtb2Rjb25maWcucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDAw
MDAwMDAuLjlhZTBiM2INCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29u
ZmlnbGliL2FsbG1vZGNvbmZpZy5weQ0KICAgIEBAIC0wLDAgKzEsNDYgQEANCiAgICArIyEvdXNy
L2Jpbi9lbnYgcHl0aG9uDQogICAgKw0KICAgICsjIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBV
bGYgTWFnbnVzc29uDQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQw0KICAgICsN
CiAgICArIiIiDQogICAgK1dyaXRlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGVyZSBhcyBtYW55
IHN5bWJvbHMgYXMgcG9zc2libGUgYXJlIHNldCB0byAnbScuDQogICAgKw0KICAgICtUaGUgZGVm
YXVsdCBvdXRwdXQgZmlsZW5hbWUgaXMgJy5jb25maWcnLiBBIGRpZmZlcmVudCBmaWxlbmFtZSBj
YW4gYmUgcGFzc2VkDQogICAgK2luIHRoZSBLQ09ORklHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJp
YWJsZS4NCiAgICArDQogICAgK1VzYWdlIGZvciB0aGUgTGludXgga2VybmVsOg0KICAgICsNCiAg
ICArICAkIG1ha2UgW0FSQ0g9PGFyY2g+XSBzY3JpcHRjb25maWcgU0NSSVBUPUtjb25maWdsaWIv
ZXhhbXBsZXMvYWxsbW9kY29uZmlnLnB5DQogICAgKyIiIg0KICAgICtpbXBvcnQga2NvbmZpZ2xp
Yg0KICAgICsNCiAgICArDQogICAgK2RlZiBtYWluKCk6DQogICAgKyAgICBrY29uZiA9IGtjb25m
aWdsaWIuc3RhbmRhcmRfa2NvbmZpZygpDQogICAgKw0KICAgICsgICAgIyBTZWUgYWxsbm9jb25m
aWcucHkNCiAgICArICAgIGtjb25mLndhcm4gPSBGYWxzZQ0KICAgICsNCiAgICArICAgIGZvciBz
eW0gaW4ga2NvbmYudW5pcXVlX2RlZmluZWRfc3ltczoNCiAgICArICAgICAgICBpZiBzeW0ub3Jp
Z190eXBlID09IGtjb25maWdsaWIuQk9PTDoNCiAgICArICAgICAgICAgICAgIyAnYm9vbCcgY2hv
aWNlIHN5bWJvbHMgZ2V0IHRoZWlyIGRlZmF1bHQgdmFsdWUsIGFzIGRldGVybWluZWQgYnkNCiAg
ICArICAgICAgICAgICAgIyBlLmcuICdkZWZhdWx0J3Mgb24gdGhlIGNob2ljZQ0KICAgICsgICAg
ICAgICAgICBpZiBub3Qgc3ltLmNob2ljZToNCiAgICArICAgICAgICAgICAgICAgICMgQWxsIG90
aGVyIGJvb2wgc3ltYm9scyBnZXQgc2V0IHRvICd5JywgbGlrZSBmb3IgYWxseWVzY29uZmlnDQog
ICAgKyAgICAgICAgICAgICAgICBzeW0uc2V0X3ZhbHVlKDIpDQogICAgKyAgICAgICAgZWxpZiBz
eW0ub3JpZ190eXBlID09IGtjb25maWdsaWIuVFJJU1RBVEU6DQogICAgKyAgICAgICAgICAgIHN5
bS5zZXRfdmFsdWUoMSkNCiAgICArDQogICAgKyAgICBmb3IgY2hvaWNlIGluIGtjb25mLnVuaXF1
ZV9jaG9pY2VzOg0KICAgICsgICAgICAgIGNob2ljZS5zZXRfdmFsdWUoMiBpZiBjaG9pY2Uub3Jp
Z190eXBlID09IGtjb25maWdsaWIuQk9PTCBlbHNlIDEpDQogICAgKw0KICAgICsgICAga2NvbmYu
d2FybiA9IFRydWUNCiAgICArDQogICAgKyAgICBrY29uZmlnbGliLmxvYWRfYWxsY29uZmlnKGtj
b25mLCAiYWxsbW9kLmNvbmZpZyIpDQogICAgKw0KICAgICsgICAgcHJpbnQoa2NvbmYud3JpdGVf
Y29uZmlnKCkpDQogICAgKw0KICAgICsNCiAgICAraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoN
CiAgICArICAgIG1haW4oKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvYWxs
bm9jb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvYWxsbm9jb25maWcucHkNCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDAwMDAwMDAuLmUxNjJjY2INCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL2FsbG5vY29uZmlnLnB5DQogICAg
QEAgLTAsMCArMSw0NSBAQA0KICAgICsjIS91c3IvYmluL2VudiBweXRob24NCiAgICArDQogICAg
KyMgQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIFVsZiBNYWdudXNzb24NCiAgICArIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogSVNDDQogICAgKw0KICAgICsiIiINCiAgICArV3JpdGVzIGEgY29u
ZmlndXJhdGlvbiBmaWxlIHdoZXJlIGFzIG1hbnkgc3ltYm9scyBhcyBwb3NzaWJsZSBhcmUgc2V0
IHRvICduJy4NCiAgICArDQogICAgK1RoZSBkZWZhdWx0IG91dHB1dCBmaWxlbmFtZSBpcyAnLmNv
bmZpZycuIEEgZGlmZmVyZW50IGZpbGVuYW1lIGNhbiBiZSBwYXNzZWQNCiAgICAraW4gdGhlIEtD
T05GSUdfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlLg0KICAgICsNCiAgICArVXNhZ2UgZm9y
IHRoZSBMaW51eCBrZXJuZWw6DQogICAgKw0KICAgICsgICQgbWFrZSBbQVJDSD08YXJjaD5dIHNj
cmlwdGNvbmZpZyBTQ1JJUFQ9S2NvbmZpZ2xpYi9leGFtcGxlcy9hbGxtb2Rjb25maWcucHkNCiAg
ICArDQogICAgK1NlZSB0aGUgZXhhbXBsZXMvYWxsbm9jb25maWdfd2Fsay5weSBleGFtcGxlIHNj
cmlwdCBmb3IgYW5vdGhlciB3YXkgdG8NCiAgICAraW1wbGVtZW50IHRoaXMgc2NyaXB0Lg0KICAg
ICsiIiINCiAgICAraW1wb3J0IGtjb25maWdsaWINCiAgICArDQogICAgKw0KICAgICtkZWYgbWFp
bigpOg0KICAgICsgICAga2NvbmYgPSBrY29uZmlnbGliLnN0YW5kYXJkX2tjb25maWcoKQ0KICAg
ICsNCiAgICArICAgICMgQXZvaWQgd2FybmluZ3MgdGhhdCB3b3VsZCBvdGhlcndpc2UgZ2V0IHBy
aW50ZWQgYnkgS2NvbmZpZ2xpYiBmb3IgdGhlDQogICAgKyAgICAjIGZvbGxvd2luZzoNCiAgICAr
ICAgICMNCiAgICArICAgICMgMS4gQXNzaWduaW5nIGEgdmFsdWUgdG8gYSBzeW1ib2wgd2l0aG91
dCBhIHByb21wdCwgd2hpY2ggbmV2ZXIgaGFzIGFueQ0KICAgICsgICAgIyAgICBlZmZlY3QNCiAg
ICArICAgICMNCiAgICArICAgICMgMi4gQXNzaWduaW5nIHZhbHVlcyBpbnZhbGlkIGZvciB0aGUg
dHlwZSAob25seSBib29sL3RyaXN0YXRlIHN5bWJvbHMNCiAgICArICAgICMgICAgYWNjZXB0IDAv
MS8yLCBmb3Igbi9tL3kpLiBUaGUgYXNzaWdubWVudHMgd2lsbCBiZSBpZ25vcmVkIGZvciBvdGhl
cg0KICAgICsgICAgIyAgICBzeW1ib2wgdHlwZXMsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudC4NCiAg
ICArICAgIGtjb25mLndhcm4gPSBGYWxzZQ0KICAgICsgICAgZm9yIHN5bSBpbiBrY29uZi51bmlx
dWVfZGVmaW5lZF9zeW1zOg0KICAgICsgICAgICAgIHN5bS5zZXRfdmFsdWUoMiBpZiBzeW0uaXNf
YWxsbm9jb25maWdfeSBlbHNlIDApDQogICAgKyAgICBrY29uZi53YXJuID0gVHJ1ZQ0KICAgICsN
CiAgICArICAgIGtjb25maWdsaWIubG9hZF9hbGxjb25maWcoa2NvbmYsICJhbGxuby5jb25maWci
KQ0KICAgICsNCiAgICArICAgIHByaW50KGtjb25mLndyaXRlX2NvbmZpZygpKQ0KICAgICsNCiAg
ICArDQogICAgK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6DQogICAgKyAgICBtYWluKCkNCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL2FsbHllc2NvbmZpZy5weSBiL3N1cHBv
cnQva2NvbmZpZ2xpYi9hbGx5ZXNjb25maWcucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0K
ICAgIGluZGV4IDAwMDAwMDAuLmUxOWFiMzENCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIv
c3VwcG9ydC9rY29uZmlnbGliL2FsbHllc2NvbmZpZy5weQ0KICAgIEBAIC0wLDAgKzEsNTYgQEAN
CiAgICArIyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQogICAgKw0KICAgICsjIENvcHlyaWdodCAoYykg
MjAxOC0yMDE5LCBVbGYgTWFnbnVzc29uDQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IElTQw0KICAgICsNCiAgICArIiIiDQogICAgK1dyaXRlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSB3
aGVyZSBhcyBtYW55IHN5bWJvbHMgYXMgcG9zc2libGUgYXJlIHNldCB0byAneScuDQogICAgKw0K
ICAgICtUaGUgZGVmYXVsdCBvdXRwdXQgZmlsZW5hbWUgaXMgJy5jb25maWcnLiBBIGRpZmZlcmVu
dCBmaWxlbmFtZSBjYW4gYmUgcGFzc2VkDQogICAgK2luIHRoZSBLQ09ORklHX0NPTkZJRyBlbnZp
cm9ubWVudCB2YXJpYWJsZS4NCiAgICArDQogICAgK1VzYWdlIGZvciB0aGUgTGludXgga2VybmVs
Og0KICAgICsNCiAgICArICAkIG1ha2UgW0FSQ0g9PGFyY2g+XSBzY3JpcHRjb25maWcgU0NSSVBU
PUtjb25maWdsaWIvZXhhbXBsZXMvYWxsbW9kY29uZmlnLnB5DQogICAgKyIiIg0KICAgICtpbXBv
cnQga2NvbmZpZ2xpYg0KICAgICsNCiAgICArDQogICAgK2RlZiBtYWluKCk6DQogICAgKyAgICBr
Y29uZiA9IGtjb25maWdsaWIuc3RhbmRhcmRfa2NvbmZpZygpDQogICAgKw0KICAgICsgICAgIyBT
ZWUgYWxsbm9jb25maWcucHkNCiAgICArICAgIGtjb25mLndhcm4gPSBGYWxzZQ0KICAgICsNCiAg
ICArICAgICMgVHJ5IHRvIHNldCBhbGwgc3ltYm9scyB0byAneScuIERlcGVuZGVuY2llcyBtaWdo
dCB0cnVuY2F0ZSB0aGUgdmFsdWUgZG93bg0KICAgICsgICAgIyBsYXRlciwgYnV0IHRoaXMgd2ls
bCBhdCBsZWFzdCBnaXZlIHRoZSBoaWdoZXN0IHBvc3NpYmxlIHZhbHVlLg0KICAgICsgICAgIw0K
ICAgICsgICAgIyBBc3NpZ25pbmcgMC8xLzIgdG8gbm9uLWJvb2wvdHJpc3RhdGUgc3ltYm9scyBo
YXMgbm8gZWZmZWN0IChpbnQvaGV4DQogICAgKyAgICAjIHN5bWJvbHMgc3RpbGwgdGFrZSBhIHN0
cmluZywgYmVjYXVzZSB0aGV5IHByZXNlcnZlIGZvcm1hdHRpbmcpLg0KICAgICsgICAgZm9yIHN5
bSBpbiBrY29uZi51bmlxdWVfZGVmaW5lZF9zeW1zOg0KICAgICsgICAgICAgICMgU2V0IGNob2lj
ZSBzeW1ib2xzIHRvICdtJy4gVGhpcyB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQgZm9yIGNob2ljZXMg
aW4NCiAgICArICAgICAgICAjICd5JyBtb2RlICh0aGUgIm5vcm1hbCIgbW9kZSksIHdoaWNoIHdp
bGwgaW5zdGVhZCBqdXN0IGdldCB0aGVpcg0KICAgICsgICAgICAgICMgZGVmYXVsdCBzZWxlY3Rp
b24sIGJ1dCB3aWxsIHNldCBhbGwgc3ltYm9scyBpbiBtLW1vZGUgY2hvaWNlcyB0byAnbScsDQog
ICAgKyAgICAgICAgIyB3aGljaCBpcyBhcyBoaWdoIGFzIHRoZXkgY2FuIGdvLg0KICAgICsgICAg
ICAgICMNCiAgICArICAgICAgICAjIEhlcmUncyBhIGNvbnZvbHV0ZWQgZXhhbXBsZSBvZiBob3cg
eW91IG1pZ2h0IGdldCBhbiBtLW1vZGUgY2hvaWNlDQogICAgKyAgICAgICAgIyBldmVuIGR1cmlu
ZyBhbGx5ZXNjb25maWc6DQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAgICMgICBjaG9pY2UN
CiAgICArICAgICAgICAjICAgICAgICAgICB0cmlzdGF0ZSAid2VpcmQgY2hvaWNlIg0KICAgICsg
ICAgICAgICMgICAgICAgICAgIGRlcGVuZHMgb24gbQ0KICAgICsgICAgICAgIHN5bS5zZXRfdmFs
dWUoMSBpZiBzeW0uY2hvaWNlIGVsc2UgMikNCiAgICArDQogICAgKyAgICAjIFNldCBhbGwgY2hv
aWNlcyB0byB0aGUgaGlnaGVzdCBwb3NzaWJsZSBtb2RlDQogICAgKyAgICBmb3IgY2hvaWNlIGlu
IGtjb25mLnVuaXF1ZV9jaG9pY2VzOg0KICAgICsgICAgICAgIGNob2ljZS5zZXRfdmFsdWUoMikN
CiAgICArDQogICAgKyAgICBrY29uZi53YXJuID0gVHJ1ZQ0KICAgICsNCiAgICArICAgIGtjb25m
aWdsaWIubG9hZF9hbGxjb25maWcoa2NvbmYsICJhbGx5ZXMuY29uZmlnIikNCiAgICArDQogICAg
KyAgICBwcmludChrY29uZi53cml0ZV9jb25maWcoKSkNCiAgICArDQogICAgKw0KICAgICtpZiBf
X25hbWVfXyA9PSAiX19tYWluX18iOg0KICAgICsgICAgbWFpbigpDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZ2xpYi9kZWZjb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvZGVm
Y29uZmlnLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA3NTUNCiAgICBpbmRleCAwMDAwMDAwLi5k
MWIxZTRlDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi9k
ZWZjb25maWcucHkNCiAgICBAQCAtMCwwICsxLDQzIEBADQogICAgKyMhL3Vzci9iaW4vZW52IHB5
dGhvbg0KICAgICsNCiAgICArIyBDb3B5cmlnaHQgKGMpIDIwMTksIFVsZiBNYWdudXNzb24NCiAg
ICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDDQogICAgKw0KICAgICsiIiINCiAgICAr
UmVhZHMgYSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBmaWxlLCB0aGVuIHdyaXRlcyBhIG5ldyBj
b25maWd1cmF0aW9uIGZpbGUuDQogICAgK1RoaXMgY2FuIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0
aGUgY29uZmlndXJhdGlvbiBmcm9tIGUuZy4gYW4gYXJjaC1zcGVjaWZpYw0KICAgICtjb25maWd1
cmF0aW9uIGZpbGUuIFRoaXMgaW5wdXQgY29uZmlndXJhdGlvbiBmaWxlIHdvdWxkIHVzdWFsbHkg
YmUgYSBtaW5pbWFsDQogICAgK2NvbmZpZ3VyYXRpb24gZmlsZSwgYXMgZ2VuZXJhdGVkIGJ5IGUu
Zy4gc2F2ZWRlZmNvbmZpZy4NCiAgICArDQogICAgK1RoZSBkZWZhdWx0IG91dHB1dCBmaWxlbmFt
ZSBpcyAnLmNvbmZpZycuIEEgZGlmZmVyZW50IGZpbGVuYW1lIGNhbiBiZSBwYXNzZWQgaW4NCiAg
ICArdGhlIEtDT05GSUdfQ09ORklHIGVudmlyb25tZW50IHZhcmlhYmxlLg0KICAgICsiIiINCiAg
ICAraW1wb3J0IGFyZ3BhcnNlDQogICAgKw0KICAgICtpbXBvcnQga2NvbmZpZ2xpYg0KICAgICsN
CiAgICArDQogICAgK2RlZiBtYWluKCk6DQogICAgKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1
bWVudFBhcnNlcigNCiAgICArICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVz
Y3JpcHRpb25IZWxwRm9ybWF0dGVyLA0KICAgICsgICAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18p
DQogICAgKw0KICAgICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgNCiAgICArICAgICAgICAiLS1r
Y29uZmlnIiwNCiAgICArICAgICAgICBkZWZhdWx0PSJLY29uZmlnIiwNCiAgICArICAgICAgICBo
ZWxwPSJCYXNlIEtjb25maWcgZmlsZSAoZGVmYXVsdDogS2NvbmZpZykiKQ0KICAgICsNCiAgICAr
ICAgIHBhcnNlci5hZGRfYXJndW1lbnQoDQogICAgKyAgICAgICAgImNvbmZpZyIsDQogICAgKyAg
ICAgICAgbWV0YXZhcj0iQ09ORklHVVJBVElPTiIsDQogICAgKyAgICAgICAgaGVscD0iSW5wdXQg
Y29uZmlndXJhdGlvbiBmaWxlIikNCiAgICArDQogICAgKyAgICBhcmdzID0gcGFyc2VyLnBhcnNl
X2FyZ3MoKQ0KICAgICsNCiAgICArICAgIGtjb25mID0ga2NvbmZpZ2xpYi5LY29uZmlnKGFyZ3Mu
a2NvbmZpZykNCiAgICArICAgIHByaW50KGtjb25mLmxvYWRfY29uZmlnKGFyZ3MuY29uZmlnKSkN
CiAgICArICAgIHByaW50KGtjb25mLndyaXRlX2NvbmZpZygpKQ0KICAgICsNCiAgICArDQogICAg
K2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6DQogICAgKyAgICBtYWluKCkNCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL0ttZW51Y29uZmlnIGIvc3VwcG9ydC9r
Y29uZmlnbGliL2V4YW1wbGVzL0ttZW51Y29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQN
CiAgICBpbmRleCAwMDAwMDAwLi5mMWNiNjdiDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBi
L3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9LbWVudWNvbmZpZw0KICAgIEBAIC0wLDAgKzEs
MTAyIEBADQogICAgK21haW5tZW51ICJFeGFtcGxlIEtjb25maWcgY29uZmlndXJhdGlvbiINCiAg
ICArDQogICAgK2NvbmZpZyBNT0RVTEVTDQogICAgKwlib29sICJFbmFibGUgbG9hZGFibGUgbW9k
dWxlIHN1cHBvcnQiDQogICAgKwlvcHRpb24gbW9kdWxlcw0KICAgICsJZGVmYXVsdCB5DQogICAg
Kw0KICAgICttZW51ICJCb29sIGFuZCB0cmlzdGF0ZSBzeW1ib2xzIg0KICAgICsNCiAgICArY29u
ZmlnIEJPT0wNCiAgICArCWJvb2wgIkJvb2wgc3ltYm9sIg0KICAgICsJZGVmYXVsdCB5DQogICAg
Kw0KICAgICtjb25maWcgQk9PTF9ERVANCiAgICArCWJvb2wgIkRlcGVuZGVudCBib29sIHN5bWJv
bCINCiAgICArCWRlcGVuZHMgb24gQk9PTA0KICAgICsNCiAgICArIyBNaXggaXQgdXAgYSBiaXQg
d2l0aCBhbiAnaWYnIGluc3RlYWQgb2YgYSAnZGVwZW5kcyBvbicNCiAgICAraWYgQk9PTA0KICAg
ICsNCiAgICArY29uZmlnIFRSSV9ERVANCiAgICArCXRyaXN0YXRlICJEZXBlbmRlbnQgdHJpc3Rh
dGUgc3ltYm9sIg0KICAgICsJc2VsZWN0IFNFTEVDVEVEX0JZX1RSSV9ERVANCiAgICArCWltcGx5
IElNUExJRURfQllfVFJJX0RFUA0KICAgICsNCiAgICArZW5kaWYNCiAgICArDQogICAgK2NvbmZp
ZyBUV09fTUVOVV9OT0RFUw0KICAgICsJYm9vbCAiRmlyc3QgcHJvbXB0Ig0KICAgICsJZGVwZW5k
cyBvbiBCT09MDQogICAgKw0KICAgICtjb25maWcgVFJJDQogICAgKwl0cmlzdGF0ZSAiVHJpc3Rh
dGUgc3ltYm9sIg0KICAgICsNCiAgICArY29uZmlnIFRXT19NRU5VX05PREVTDQogICAgKwlib29s
ICJTZWNvbmQgcHJvbXB0Ig0KICAgICsNCiAgICArY29tbWVudCAiVGhlc2UgYXJlIHNlbGVjdGVk
IGJ5IFRSSV9ERVAiDQogICAgKw0KICAgICtjb25maWcgU0VMRUNURURfQllfVFJJX0RFUA0KICAg
ICsJdHJpc3RhdGUgIlRyaXN0YXRlIHNlbGVjdGVkIGJ5IFRSSV9ERVAiDQogICAgKw0KICAgICtj
b25maWcgSU1QTElFRF9CWV9UUklfREVQDQogICAgKwl0cmlzdGF0ZSAiVHJpc3RhdGUgaW1wbGll
ZCBieSBUUklfREVQIg0KICAgICsNCiAgICArZW5kbWVudQ0KICAgICsNCiAgICArDQogICAgK21l
bnUgIlN0cmluZywgaW50LCBhbmQgaGV4IHN5bWJvbHMiDQogICAgKw0KICAgICtjb25maWcgU1RS
SU5HDQogICAgKwlzdHJpbmcgIlN0cmluZyBzeW1ib2wiDQogICAgKwlkZWZhdWx0ICJmb28iDQog
ICAgKw0KICAgICtjb25maWcgSU5UDQogICAgKwlpbnQgIkludCBzeW1ib2wiDQogICAgKwlkZWZh
dWx0IDc0Nw0KICAgICsNCiAgICArY29uZmlnIEhFWA0KICAgICsJaGV4ICJIZXggc3ltYm9sIg0K
ICAgICsJZGVmYXVsdCAweEFCQw0KICAgICsNCiAgICArZW5kbWVudQ0KICAgICsNCiAgICArDQog
ICAgK21lbnUgIlZhcmlvdXMgY2hvaWNlcyINCiAgICArDQogICAgK2Nob2ljZSBCT09MX0NIT0lD
RQ0KICAgICsJYm9vbCAiQm9vbCBjaG9pY2UiDQogICAgKw0KICAgICtjb25maWcgQk9PTF9DSE9J
Q0VfU1lNXzENCiAgICArCWJvb2wgIkJvb2wgY2hvaWNlIHN5bSAxIg0KICAgICsNCiAgICArY29u
ZmlnIEJPT0xfQ0hPSUNFX1NZTV8yDQogICAgKwlib29sICJCb29sIGNob2ljZSBzeW0gMiINCiAg
ICArDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArY2hvaWNlIFRSSV9DSE9JQ0UNCiAgICAr
CXRyaXN0YXRlICJUcmlzdGF0ZSBjaG9pY2UiDQogICAgKw0KICAgICtjb25maWcgVFJJX0NIT0lD
RV9TWU1fMQ0KICAgICsJdHJpc3RhdGUgIlRyaXN0YXRlIGNob2ljZSBzeW0gMSINCiAgICArDQog
ICAgK2NvbmZpZyBUUklfQ0hPSUNFX1NZTV8yDQogICAgKwl0cmlzdGF0ZSAiVHJpc3RhdGUgY2hv
aWNlIHN5bSAyIg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UgT1BU
X0JPT0xfQ0hPSUNFDQogICAgKwlib29sICJPcHRpb25hbCBib29sIGNob2ljZSINCiAgICArCW9w
dGlvbmFsDQogICAgKw0KICAgICtjb25maWcgT1BUX0JPT0xfQ0hPSUNFX1NZTV8xDQogICAgKwli
b29sICJPcHRpb25hbCBib29sIGNob2ljZSBzeW0gMSINCiAgICArDQogICAgK2NvbmZpZyBPUFRf
Qk9PTF9DSE9JQ0VfU1lNXzINCiAgICArCWJvb2wgIk9wdGlvbmFsIGJvb2wgY2hvaWNlIHN5bSAy
Ig0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtlbmRtZW51DQogICAgZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9hbGxub2NvbmZpZ193YWxrLnB5IGIv
c3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2FsbG5vY29uZmlnX3dhbGsucHkNCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjVhOGNjMjMNCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2FsbG5vY29uZmln
X3dhbGsucHkNCiAgICBAQCAtMCwwICsxLDY2IEBADQogICAgKyMgVGhpcyBpcyB0cmVlLXdhbGtp
bmcgdmVyc2lvbiBvZiBhbGxub2NvbmZpZy5weSwgZm9yIGRlbW9uc3RyYXRpb24gcHVycG9zZXMu
DQogICAgKyMgVmVyaWZpZWQgYnkgdGhlIHRlc3Qgc3VpdGUgdG8gZ2VuZXJhdGUgaWRlbnRpY2Fs
IG91dHB1dCB0byAnbWFrZSBhbGxub2NvbmZpZycNCiAgICArIyBmb3IgYWxsIEFSQ0hlcy4NCiAg
ICArIw0KICAgICsjIE5vdGU6IEEgbW9yZSBwcmFjdGljYWwgdmVyc2lvbiB3b3VsZCB1c2UgS2Nv
bmZpZy5ub2RlX2l0ZXIoKS4gVGhlIG1hbnVhbCB0cmVlDQogICAgKyMgd2Fsa2luZyBpcyBmb3Ig
ZGVtb25zdHJhdGlvbiBwdXJwb3Nlcy4NCiAgICArIw0KICAgICsjIFVzYWdlIGZvciB0aGUgTGlu
dXgga2VybmVsOg0KICAgICsjDQogICAgKyMgICAkIG1ha2UgW0FSQ0g9PGFyY2g+XSBzY3JpcHRj
b25maWcgU0NSSVBUPUtjb25maWdsaWIvZXhhbXBsZXMvYWxsbm9jb25maWdfd2Fsay5weQ0KICAg
ICsNCiAgICAraW1wb3J0IHN5cw0KICAgICsNCiAgICArZnJvbSBrY29uZmlnbGliIGltcG9ydCBL
Y29uZmlnLCBTeW1ib2wNCiAgICArDQogICAgKw0KICAgICtkZWYgZG9fYWxsbm9jb25maWcobm9k
ZSk6DQogICAgKyAgICBnbG9iYWwgY2hhbmdlZA0KICAgICsNCiAgICArICAgICMgV2FsayB0aGUg
dHJlZSBvZiBtZW51IG5vZGVzLiBZb3UgY2FuIGltYWdpbmUgdGhpcyBhcyBnb2luZyBkb3duL2lu
dG8gbWVudQ0KICAgICsgICAgIyBlbnRyaWVzIGluIHRoZSBtZW51Y29uZmlnIGludGVyZmFjZSwg
c2V0dGluZyBlYWNoIHRvIG4gKG9yIHRoZSBsb3dlc3QNCiAgICArICAgICMgYXNzaWduYWJsZSB2
YWx1ZSkuDQogICAgKw0KICAgICsgICAgd2hpbGUgbm9kZToNCiAgICArICAgICAgICBpZiBpc2lu
c3RhbmNlKG5vZGUuaXRlbSwgU3ltYm9sKToNCiAgICArICAgICAgICAgICAgc3ltID0gbm9kZS5p
dGVtDQogICAgKw0KICAgICsgICAgICAgICAgICAjIElzIHRoZSBzeW1ib2wgYSBub24tYWxsbm9j
b25maWdfeSBzeW1ib2wgdGhhdCBjYW4gYmUgc2V0IHRvIGENCiAgICArICAgICAgICAgICAgIyBs
b3dlciB2YWx1ZSB0aGFuIGl0cyBjdXJyZW50IHZhbHVlPw0KICAgICsgICAgICAgICAgICBpZiAo
bm90IHN5bS5pc19hbGxub2NvbmZpZ195IGFuZA0KICAgICsgICAgICAgICAgICAgICAgc3ltLmFz
c2lnbmFibGUgYW5kDQogICAgKyAgICAgICAgICAgICAgICBzeW0uYXNzaWduYWJsZVswXSA8IHN5
bS50cmlfdmFsdWUpOg0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICMgWXVwLCBsb3dlciBp
dA0KICAgICsgICAgICAgICAgICAgICAgc3ltLnNldF92YWx1ZShzeW0uYXNzaWduYWJsZVswXSkN
CiAgICArICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlDQogICAgKw0KICAgICsgICAgICAg
ICMgUmVjdXJzaXZlbHkgbG93ZXIgY2hpbGRyZW4NCiAgICArICAgICAgICBpZiBub2RlLmxpc3Q6
DQogICAgKyAgICAgICAgICAgIGRvX2FsbG5vY29uZmlnKG5vZGUubGlzdCkNCiAgICArDQogICAg
KyAgICAgICAgbm9kZSA9IG5vZGUubmV4dA0KICAgICsNCiAgICArDQogICAgKyMgUGFyc2UgdGhl
IEtjb25maWcgZmlsZXMNCiAgICAra2NvbmYgPSBLY29uZmlnKHN5cy5hcmd2WzFdKQ0KICAgICsN
CiAgICArIyBEbyBhbiBpbml0aWFsIHBhc3MgdG8gc2V0ICdvcHRpb24gYWxsbm9jb25maWdfeScg
c3ltYm9scyB0byB5DQogICAgK2ZvciBzeW0gaW4ga2NvbmYudW5pcXVlX2RlZmluZWRfc3ltczoN
CiAgICArICAgIGlmIHN5bS5pc19hbGxub2NvbmZpZ195Og0KICAgICsgICAgICAgIHN5bS5zZXRf
dmFsdWUoMikNCiAgICArDQogICAgK3doaWxlIFRydWU6DQogICAgKyAgICAjIENoYW5naW5nIGxh
dGVyIHN5bWJvbHMgaW4gdGhlIGNvbmZpZ3VyYXRpb24gY2FuIHNvbWV0aW1lcyBhbGxvdyBlYXJs
aWVyDQogICAgKyAgICAjIHN5bWJvbHMgdG8gYmUgbG93ZXJlZCwgZS5nLiBpZiBhIGxhdGVyIHN5
bWJvbCAnc2VsZWN0J3MgYW4gZWFybGllcg0KICAgICsgICAgIyBzeW1ib2wuIFRvIGhhbmRsZSBz
dWNoIHNpdHVhdGlvbnMsIHdlIGRvIGFkZGl0aW9uYWwgcGFzc2VzIG92ZXIgdGhlIHRyZWUNCiAg
ICArICAgICMgdW50aWwgd2UncmUgbm8gbG9uZ2VyIGFibGUgdG8gY2hhbmdlIHRoZSB2YWx1ZSBv
ZiBhbnkgc3ltYm9sIGluIGEgcGFzcy4NCiAgICArICAgIGNoYW5nZWQgPSBGYWxzZQ0KICAgICsN
CiAgICArICAgIGRvX2FsbG5vY29uZmlnKGtjb25mLnRvcF9ub2RlKQ0KICAgICsNCiAgICArICAg
ICMgRGlkIHRoZSBwYXNzIGNoYW5nZSBhbnkgc3ltYm9scz8NCiAgICArICAgIGlmIG5vdCBjaGFu
Z2VkOg0KICAgICsgICAgICAgIGJyZWFrDQogICAgKw0KICAgICtwcmludChrY29uZi53cml0ZV9j
b25maWcoKSkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2Rl
ZmNvbmZpZ19vbGRjb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZGVmY29u
ZmlnX29sZGNvbmZpZy5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAw
MDAwMC4uNjgzMzZjNg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25m
aWdsaWIvZXhhbXBsZXMvZGVmY29uZmlnX29sZGNvbmZpZy5weQ0KICAgIEBAIC0wLDAgKzEsMzkg
QEANCiAgICArIyBQcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIG91dHB1dCBhcyB0aGUgZm9sbG93
aW5nIHNjcmlwdDoNCiAgICArIw0KICAgICsjIG1ha2UgZGVmY29uZmlnDQogICAgKyMgZWNobyBD
T05GSUdfRVRIRVJORVQ9biA+PiAuY29uZmlnDQogICAgKyMgbWFrZSBvbGRjb25maWcNCiAgICAr
IyBlY2hvIENPTkZJR19FVEhFUk5FVD15ID4+IC5jb25maWcNCiAgICArIyB5ZXMgbiB8IG1ha2Ug
b2xkY29uZmlnDQogICAgKyMNCiAgICArIyBUaGlzIGNhbWUgdXAgaW4gaHR0cHM6Ly9naXRodWIu
Y29tL3VsZmFsaXplci9LY29uZmlnbGliL2lzc3Vlcy8xNS4NCiAgICArIw0KICAgICsjIFVzYWdl
Og0KICAgICsjDQogICAgKyMgICAkIG1ha2UgW0FSQ0g9PGFyY2g+XSBzY3JpcHRjb25maWcgU0NS
SVBUPUtjb25maWdsaWIvZXhhbXBsZXMvZGVmY29uZmlnX29sZGNvbmZpZy5weQ0KICAgICsNCiAg
ICAraW1wb3J0IHN5cw0KICAgICsNCiAgICAraW1wb3J0IGtjb25maWdsaWINCiAgICArDQogICAg
Kw0KICAgICtrY29uZiA9IGtjb25maWdsaWIuS2NvbmZpZyhzeXMuYXJndlsxXSkNCiAgICArDQog
ICAgKyMgTWlycm9ycyBkZWZjb25maWcNCiAgICAra2NvbmYubG9hZF9jb25maWcoImFyY2gveDg2
L2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZyIpDQogICAgK2tjb25mLndyaXRlX2NvbmZpZygpDQog
ICAgKw0KICAgICsjIE1pcnJvcnMgdGhlIGZpcnN0IG9sZGNvbmZpZw0KICAgICtrY29uZi5sb2Fk
X2NvbmZpZygpDQogICAgK2tjb25mLnN5bXNbIkVUSEVSTkVUIl0uc2V0X3ZhbHVlKDApDQogICAg
K2tjb25mLndyaXRlX2NvbmZpZygpDQogICAgKw0KICAgICsjIE1pcnJvcnMgdGhlIHNlY29uZCBv
bGRjb25maWcNCiAgICAra2NvbmYubG9hZF9jb25maWcoKQ0KICAgICtrY29uZi5zeW1zWyJFVEhF
Uk5FVCJdLnNldF92YWx1ZSgyKQ0KICAgICtmb3IgcyBpbiBrY29uZi51bmlxdWVfZGVmaW5lZF9z
eW1zOg0KICAgICsgICAgaWYgcy51c2VyX3ZhbHVlIGlzIE5vbmUgYW5kIDAgaW4gcy5hc3NpZ25h
YmxlOg0KICAgICsgICAgICAgIHMuc2V0X3ZhbHVlKDApDQogICAgKw0KICAgICsjIFdyaXRlIHRo
ZSBmaW5hbCBjb25maWd1cmF0aW9uDQogICAgK3ByaW50KGtjb25mLndyaXRlX2NvbmZpZygpKQ0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZHVtcHZhcnMucHkg
Yi9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvZHVtcHZhcnMucHkNCiAgICBuZXcgZmlsZSBt
b2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjBmOGFiNDMNCiAgICAtLS0gL2Rldi9udWxs
DQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2R1bXB2YXJzLnB5DQogICAg
QEAgLTAsMCArMSwxNSBAQA0KICAgICsjIFByaW50cyBhbGwgKHNldCkgZW52aXJvbm1lbnQgdmFy
aWFibGVzIHJlZmVyZW5jZWQgaW4gdGhlIEtjb25maWcgZmlsZXMNCiAgICArIyB0b2dldGhlciB3
aXRoIHRoZWlyIHZhbHVlcywgYXMgYSBsaXN0IG9mIGFzc2lnbm1lbnRzLg0KICAgICsjDQogICAg
KyMgTm90ZTogVGhpcyBvbmx5IHdvcmtzIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMgcmVmZXJl
bmNlZCB2aWEgdGhlICQoRk9PKQ0KICAgICsjIHByZXByb2Nlc3NvciBzeW50YXguIFRoZSBvbGRl
ciAkRk9PIHN5bnRheCBpcyBtYWludGFpbmVkIGZvciBiYWNrd2FyZHMNCiAgICArIyBjb21wYXRp
YmlsaXR5Lg0KICAgICsNCiAgICAraW1wb3J0IG9zDQogICAgK2ltcG9ydCBzeXMNCiAgICArDQog
ICAgK2ltcG9ydCBrY29uZmlnbGliDQogICAgKw0KICAgICsNCiAgICArcHJpbnQoIiAiLmpvaW4o
Int9PSd7fSciLmZvcm1hdCh2YXIsIG9zLmVudmlyb25bdmFyXSkNCiAgICArICAgICAgICAgICAg
ICAgZm9yIHZhciBpbiBrY29uZmlnbGliLktjb25maWcoc3lzLmFyZ3ZbMV0pLmVudl92YXJzKSkN
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2V2YWxfZXhwci5w
eSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9ldmFsX2V4cHIucHkNCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjIzZWVkYjQNCiAgICAtLS0gL2Rldi9u
dWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL2V2YWxfZXhwci5weQ0K
ICAgIEBAIC0wLDAgKzEsMjQgQEANCiAgICArIyBFdmFsdWF0ZXMgYW4gZXhwcmVzc2lvbiAoZS5n
LiAiWDg2XzY0IHx8IChYODZfMzIgJiYgWDg2X0xPQ0FMX0FQSUMpIikgaW4gdGhlDQogICAgKyMg
Y29udGV4dCBvZiBhIGNvbmZpZ3VyYXRpb24uIE5vdGUgdGhhdCB0aGlzIGFsd2F5cyB5aWVsZHMg
YSB0cmlzdGF0ZSB2YWx1ZSAobiwNCiAgICArIyBtLCBvciB5KS4NCiAgICArIw0KICAgICsjIFVz
YWdlOg0KICAgICsjDQogICAgKyMgICAkIG1ha2UgW0FSQ0g9PGFyY2g+XSBzY3JpcHRjb25maWcg
U0NSSVBUPUtjb25maWdsaWIvZXhhbXBsZXMvZXZhbF9leHByLnB5IFNDUklQVF9BUkc9PGV4cHI+
DQogICAgKw0KICAgICtpbXBvcnQgc3lzDQogICAgKw0KICAgICtpbXBvcnQga2NvbmZpZ2xpYg0K
ICAgICsNCiAgICArDQogICAgK2lmIGxlbihzeXMuYXJndikgPCAzOg0KICAgICsgICAgc3lzLmV4
aXQoIlBhc3MgdGhlIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgd2l0aCBTQ1JJUFRfQVJHPTxleHBy
ZXNzaW9uPiIpDQogICAgKw0KICAgICtrY29uZiA9IGtjb25maWdsaWIuS2NvbmZpZyhzeXMuYXJn
dlsxXSkNCiAgICArZXhwciA9IHN5cy5hcmd2WzJdDQogICAgKw0KICAgICsjIEVuYWJsZSBtb2R1
bGVzIHNvIHRoYXQgbSBkb2Vzbid0IGdldCBkZW1vdGVkIHRvIG4NCiAgICAra2NvbmYubW9kdWxl
cy5zZXRfdmFsdWUoMikNCiAgICArDQogICAgK3ByaW50KCJ0aGUgZXhwcmVzc2lvbiAne30nIGV2
YWx1YXRlcyB0byB7fSINCiAgICArICAgICAgLmZvcm1hdChleHByLCBrY29uZi5ldmFsX3N0cmlu
ZyhleHByKSkpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9m
aW5kX3N5bWJvbC5weSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9maW5kX3N5bWJvbC5w
eQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZjc0NzEwMw0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMv
ZmluZF9zeW1ib2wucHkNCiAgICBAQCAtMCwwICsxLDExMiBAQA0KICAgICsjIFByaW50cyBhbGwg
bWVudSBub2RlcyB0aGF0IHJlZmVyZW5jZSBhIGdpdmVuIHN5bWJvbCBhbnkgb2YgdGhlaXIgcHJv
cGVydGllcw0KICAgICsjIG9yIHByb3BlcnR5IGNvbmRpdGlvbnMsIGFsb25nIHdpdGggdGhlaXIg
cGFyZW50IG1lbnUgbm9kZXMuDQogICAgKyMNCiAgICArIyBVc2FnZToNCiAgICArIw0KICAgICsj
ICAgJCBtYWtlIFtBUkNIPTxhcmNoPl0gc2NyaXB0Y29uZmlnIFNDUklQVD1LY29uZmlnbGliL2V4
YW1wbGVzL2ZpbmRfc3ltYm9sLnB5IFNDUklQVF9BUkc9PG5hbWU+DQogICAgKyMNCiAgICArIyBF
eGFtcGxlIG91dHB1dCBmb3IgU0NSSVBUX0FSRz1YODY6DQogICAgKyMNCiAgICArIyAgIEZvdW5k
IDQ3MCBsb2NhdGlvbnMgdGhhdCByZWZlcmVuY2UgWDg2Og0KICAgICsjDQogICAgKyMgICA9PT09
PT09PT09IExvY2F0aW9uIDEgKGluaXQvS2NvbmZpZzoxMTA4KSA9PT09PT09PT09DQogICAgKyMN
CiAgICArIyAgIGNvbmZpZyBTR0VUTUFTS19TWVNDQUxMDQogICAgKyMgICAJYm9vbA0KICAgICsj
ICAgCXByb21wdCAic2dldG1hc2svc3NldG1hc2sgc3lzY2FsbHMgc3VwcG9ydCIgaWYgRVhQRVJU
DQogICAgKyMgICAJZGVmYXVsdCBQQVJJU0MgfHwgTTY4SyB8fCBQUEMgfHwgTUlQUyB8fCBYODYg
fHwgU1BBUkMgfHwgTUlDUk9CTEFaRSB8fCBTVVBFUkgNCiAgICArIyAgIAloZWxwDQogICAgKyMg
ICAJICBzeXNfc2dldG1hc2sgYW5kIHN5c19zc2V0bWFzayBhcmUgb2Jzb2xldGUgc3lzdGVtIGNh
bGxzDQogICAgKyMgICAJICBubyBsb25nZXIgc3VwcG9ydGVkIGluIGxpYmMgYnV0IHN0aWxsIGVu
YWJsZWQgYnkgZGVmYXVsdCBpbiBzb21lDQogICAgKyMgICAJICBhcmNoaXRlY3R1cmVzLg0KICAg
ICsjDQogICAgKyMgICAJICBJZiB1bnN1cmUsIGxlYXZlIHRoZSBkZWZhdWx0IG9wdGlvbiBoZXJl
Lg0KICAgICsjDQogICAgKyMgICAtLS0tLS0tLS0tIFBhcmVudCAxIChpbml0L0tjb25maWc6MTA3
NykgIC0tLS0tLS0tLS0NCiAgICArIw0KICAgICsjICAgbWVudWNvbmZpZyBFWFBFUlQNCiAgICAr
IyAgIAlib29sDQogICAgKyMgICAJcHJvbXB0ICJDb25maWd1cmUgc3RhbmRhcmQga2VybmVsIGZl
YXR1cmVzIChleHBlcnQgdXNlcnMpIg0KICAgICsjICAgCXNlbGVjdCBERUJVR19LRVJORUwNCiAg
ICArIyAgIAloZWxwDQogICAgKyMgICAJICBUaGlzIG9wdGlvbiBhbGxvd3MgY2VydGFpbiBiYXNl
IGtlcm5lbCBvcHRpb25zIGFuZCBzZXR0aW5ncw0KICAgICsjICAgCSAgdG8gYmUgZGlzYWJsZWQg
b3IgdHdlYWtlZC4gVGhpcyBpcyBmb3Igc3BlY2lhbGl6ZWQNCiAgICArIyAgIAkgIGVudmlyb25t
ZW50cyB3aGljaCBjYW4gdG9sZXJhdGUgYSAibm9uLXN0YW5kYXJkIiBrZXJuZWwuDQogICAgKyMg
ICAJICBPbmx5IHVzZSB0aGlzIGlmIHlvdSByZWFsbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcu
DQogICAgKyMNCiAgICArIyAgIC0tLS0tLS0tLS0gUGFyZW50IDIgKGluaXQvS2NvbmZpZzozOSkg
IC0tLS0tLS0tLS0NCiAgICArIw0KICAgICsjICAgbWVudSAiR2VuZXJhbCBzZXR1cCINCiAgICAr
Iw0KICAgICsjICAgPT09PT09PT09PSBMb2NhdGlvbiAyIChhcmNoL0tjb25maWc6MjkpID09PT09
PT09PT0NCiAgICArIw0KICAgICsjICAgY29uZmlnIE9QUk9GSUxFX0VWRU5UX01VTFRJUExFWA0K
ICAgICsjICAgCWJvb2wNCiAgICArIyAgIAlwcm9tcHQgIk9Qcm9maWxlIG11bHRpcGxleGluZyBz
dXBwb3J0IChFWFBFUklNRU5UQUwpIg0KICAgICsjICAgCWRlZmF1bHQgIm4iDQogICAgKyMgICAJ
ZGVwZW5kcyBvbiBPUFJPRklMRSAmJiBYODYNCiAgICArIyAgIAloZWxwDQogICAgKyMgICAJICBU
aGUgbnVtYmVyIG9mIGhhcmR3YXJlIGNvdW50ZXJzIGlzIGxpbWl0ZWQuIFRoZSBtdWx0aXBsZXhp
bmcNCiAgICArIyAgIAkgIGZlYXR1cmUgZW5hYmxlcyBPUHJvZmlsZSB0byBnYXRoZXIgbW9yZSBl
dmVudHMgdGhhbiBjb3VudGVycw0KICAgICsjICAgCSAgYXJlIHByb3ZpZGVkIGJ5IHRoZSBoYXJk
d2FyZS4gVGhpcyBpcyByZWFsaXplZCBieSBzd2l0Y2hpbmcNCiAgICArIyAgIAkgIGJldHdlZW4g
ZXZlbnRzIGF0IGEgdXNlciBzcGVjaWZpZWQgdGltZSBpbnRlcnZhbC4NCiAgICArIw0KICAgICsj
ICAgCSAgSWYgdW5zdXJlLCBzYXkgTi4NCiAgICArIw0KICAgICsjICAgLS0tLS0tLS0tLSBQYXJl
bnQgMSAoYXJjaC9LY29uZmlnOjE2KSAgLS0tLS0tLS0tLQ0KICAgICsjDQogICAgKyMgICBjb25m
aWcgT1BST0ZJTEUNCiAgICArIyAgIAl0cmlzdGF0ZQ0KICAgICsjICAgCXByb21wdCAiT1Byb2Zp
bGUgc3lzdGVtIHByb2ZpbGluZyINCiAgICArIyAgIAlzZWxlY3QgUklOR19CVUZGRVINCiAgICAr
IyAgIAlzZWxlY3QgUklOR19CVUZGRVJfQUxMT1dfU1dBUA0KICAgICsjICAgCWRlcGVuZHMgb24g
UFJPRklMSU5HICYmIEhBVkVfT1BST0ZJTEUNCiAgICArIyAgIAloZWxwDQogICAgKyMgICAJICBP
UHJvZmlsZSBpcyBhIHByb2ZpbGluZyBzeXN0ZW0gY2FwYWJsZSBvZiBwcm9maWxpbmcgdGhlDQog
ICAgKyMgICAJICB3aG9sZSBzeXN0ZW0sIGluY2x1ZGUgdGhlIGtlcm5lbCwga2VybmVsIG1vZHVs
ZXMsIGxpYnJhcmllcywNCiAgICArIyAgIAkgIGFuZCBhcHBsaWNhdGlvbnMuDQogICAgKyMNCiAg
ICArIyAgIAkgIElmIHVuc3VyZSwgc2F5IE4uDQogICAgKyMNCiAgICArIyAgIC0tLS0tLS0tLS0g
UGFyZW50IDIgKGluaXQvS2NvbmZpZzozOSkgIC0tLS0tLS0tLS0NCiAgICArIw0KICAgICsjICAg
bWVudSAiR2VuZXJhbCBzZXR1cCINCiAgICArIw0KICAgICsjICAgLi4uICh0b25zIG1vcmUpDQog
ICAgKw0KICAgICtpbXBvcnQgc3lzDQogICAgKw0KICAgICtpbXBvcnQga2NvbmZpZ2xpYg0KICAg
ICsNCiAgICArDQogICAgK2lmIGxlbihzeXMuYXJndikgPCAzOg0KICAgICsgICAgc3lzLmV4aXQo
J1Bhc3Mgc3ltYm9sIG5hbWUgKHdpdGhvdXQgIkNPTkZJR18iIHByZWZpeCkgd2l0aCBTQ1JJUFRf
QVJHPTxuYW1lPicpDQogICAgKw0KICAgICtrY29uZiA9IGtjb25maWdsaWIuS2NvbmZpZyhzeXMu
YXJndlsxXSkNCiAgICArc3ltX25hbWUgPSBzeXMuYXJndlsyXQ0KICAgICtpZiBzeW1fbmFtZSBu
b3QgaW4ga2NvbmYuc3ltczoNCiAgICArICAgIHByaW50KCJObyBzeW1ib2wge30gZXhpc3RzIGlu
IHRoZSBjb25maWd1cmF0aW9uIi5mb3JtYXQoc3ltX25hbWUpKQ0KICAgICsgICAgc3lzLmV4aXQo
MCkNCiAgICArDQogICAgK3JlZmVyZW5jaW5nID0gW25vZGUgZm9yIG5vZGUgaW4ga2NvbmYubm9k
ZV9pdGVyKCkNCiAgICArICAgICAgICAgICAgICAgaWYga2NvbmYuc3ltc1tzeW1fbmFtZV0gaW4g
bm9kZS5yZWZlcmVuY2VkXQ0KICAgICtpZiBub3QgcmVmZXJlbmNpbmc6DQogICAgKyAgICBwcmlu
dCgiTm8gcmVmZXJlbmNlcyB0byB7fSBmb3VuZCIuZm9ybWF0KHN5bV9uYW1lKSkNCiAgICArICAg
IHN5cy5leGl0KDApDQogICAgKw0KICAgICtwcmludCgiRm91bmQge30gbG9jYXRpb25zIHRoYXQg
cmVmZXJlbmNlIHt9OlxuIg0KICAgICsgICAgICAuZm9ybWF0KGxlbihyZWZlcmVuY2luZyksIHN5
bV9uYW1lKSkNCiAgICArDQogICAgK2ZvciBpLCBub2RlIGluIGVudW1lcmF0ZShyZWZlcmVuY2lu
ZywgMSk6DQogICAgKyAgICBwcmludCgiPT09PT09PT09PSBMb2NhdGlvbiB7fSAoe306e30pID09
PT09PT09PT1cblxue30iDQogICAgKyAgICAgICAgICAuZm9ybWF0KGksIG5vZGUuZmlsZW5hbWUs
IG5vZGUubGluZW5yLCBub2RlKSkNCiAgICArDQogICAgKyAgICAjIFByaW50IHRoZSBwYXJlbnRz
IG9mIHRoZSBtZW51IG5vZGUgdG9vDQogICAgKw0KICAgICsgICAgbm9kZSA9IG5vZGUucGFyZW50
DQogICAgKyAgICBwYXJlbnRfaSA9IDENCiAgICArICAgIHdoaWxlIG5vZGUgaXMgbm90IGtjb25m
LnRvcF9ub2RlOg0KICAgICsgICAgICAgIHByaW50KCItLS0tLS0tLS0tIFBhcmVudCB7fSAoe306
e30pICAtLS0tLS0tLS0tXG5cbnt9Ig0KICAgICsgICAgICAgICAgICAgIC5mb3JtYXQocGFyZW50
X2ksIG5vZGUuZmlsZW5hbWUsIG5vZGUubGluZW5yLCBub2RlKSkNCiAgICArICAgICAgICBub2Rl
ID0gbm9kZS5wYXJlbnQNCiAgICArICAgICAgICBwYXJlbnRfaSArPSAxDQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9oZWxwX2dyZXAucHkgYi9zdXBwb3J0L2tj
b25maWdsaWIvZXhhbXBsZXMvaGVscF9ncmVwLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQN
CiAgICBpbmRleCAwMDAwMDAwLi4xNTdkOGYyDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBi
L3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9oZWxwX2dyZXAucHkNCiAgICBAQCAtMCwwICsx
LDY0IEBADQogICAgKyMgRG9lcyBhIGNhc2UtaW5zZW5zaXRpdmUgc2VhcmNoIGZvciBhIHJlZ3Vs
YXIgZXhwcmVzc2lvbiBpbiB0aGUgaGVscCB0ZXh0cyBvZg0KICAgICsjIHN5bWJvbHMgYW5kIGNo
b2ljZXMgYW5kIHRoZSBwcm9tcHRzIG9mIG1lbnVzIGFuZCBjb21tZW50cy4gUHJpbnRzIHRoZQ0K
ICAgICsjIG1hdGNoaW5nIGl0ZW1zIHRvZ2V0aGVyIHdpdGggdGhlaXIgbG9jYXRpb25zIGFuZCB0
aGUgbWF0Y2hpbmcgdGV4dC4NCiAgICArIw0KICAgICsjIFVzYWdlOg0KICAgICsjDQogICAgKyMg
ICAkIG1ha2UgW0FSQ0g9PGFyY2g+XSBzY3JpcHRjb25maWcgU0NSSVBUPUtjb25maWdsaWIvZXhh
bXBsZXMvaGVscF9ncmVwLnB5IFNDUklQVF9BUkc9PHJlZ2V4Pg0KICAgICsjDQogICAgKyMgU2hv
cnRlbmVkIGV4YW1wbGUgb3V0cHV0IGZvciBTQ1JJUFRfQVJHPWdlbmVyYWw6DQogICAgKyMNCiAg
ICArIyAgIG1lbnUgIkdlbmVyYWwgc2V0dXAiDQogICAgKyMgICBsb2NhdGlvbjogaW5pdC9LY29u
ZmlnOjM5DQogICAgKyMNCiAgICArIyAgIGNvbmZpZyBTWVNWSVBDDQogICAgKyMgICAJYm9vbA0K
ICAgICsjICAgCXByb21wdCAiU3lzdGVtIFYgSVBDIg0KICAgICsjICAgCWhlbHANCiAgICArIyAg
IAkgIC4uLg0KICAgICsjICAgCSAgZXhjaGFuZ2UgaW5mb3JtYXRpb24uIEl0IGlzIGdlbmVyYWxs
eSBjb25zaWRlcmVkIHRvIGJlIGEgZ29vZCB0aGluZywNCiAgICArIyAgIAkgIC4uLg0KICAgICsj
DQogICAgKyMgICBsb2NhdGlvbjogaW5pdC9LY29uZmlnOjIzMw0KICAgICsjDQogICAgKyMgICBj
b25maWcgQlNEX1BST0NFU1NfQUNDVA0KICAgICsjICAgCWJvb2wNCiAgICArIyAgIAlwcm9tcHQg
IkJTRCBQcm9jZXNzIEFjY291bnRpbmciIGlmIE1VTFRJVVNFUg0KICAgICsjICAgCWhlbHANCiAg
ICArIyAgIAkgIC4uLg0KICAgICsjICAgCSAgaW5mb3JtYXRpb24uICBUaGlzIGlzIGdlbmVyYWxs
eSBhIGdvb2QgaWRlYSwgc28gc2F5IFkuDQogICAgKyMNCiAgICArIyAgIGxvY2F0aW9uOiBpbml0
L0tjb25maWc6NDAzDQogICAgKyMNCiAgICArIyAgIC4uLg0KICAgICsNCiAgICArDQogICAgK2lt
cG9ydCByZQ0KICAgICtpbXBvcnQgc3lzDQogICAgKw0KICAgICtmcm9tIGtjb25maWdsaWIgaW1w
b3J0IEtjb25maWcsIFN5bWJvbCwgQ2hvaWNlLCBNRU5VLCBDT01NRU5UDQogICAgKw0KICAgICsN
CiAgICAraWYgbGVuKHN5cy5hcmd2KSA8IDM6DQogICAgKyAgICBzeXMuZXhpdCgiUGFzcyB0aGUg
cmVnZXggd2l0aCBTQ1JJUFRfQVJHPTxyZWdleD4iKQ0KICAgICsNCiAgICArc2VhcmNoID0gcmUu
Y29tcGlsZShzeXMuYXJndlsyXSwgcmUuSUdOT1JFQ0FTRSkuc2VhcmNoDQogICAgKw0KICAgICtm
b3Igbm9kZSBpbiBLY29uZmlnKHN5cy5hcmd2WzFdKS5ub2RlX2l0ZXIoKToNCiAgICArICAgIG1h
dGNoID0gRmFsc2UNCiAgICArDQogICAgKyAgICBpZiBpc2luc3RhbmNlKG5vZGUuaXRlbSwgKFN5
bWJvbCwgQ2hvaWNlKSkgYW5kIFwNCiAgICArICAgICAgIG5vZGUuaGVscCBpcyBub3QgTm9uZSBh
bmQgc2VhcmNoKG5vZGUuaGVscCk6DQogICAgKyAgICAgICAgcHJpbnQobm9kZS5pdGVtKQ0KICAg
ICsgICAgICAgIG1hdGNoID0gVHJ1ZQ0KICAgICsNCiAgICArICAgIGVsaWYgbm9kZS5pdGVtID09
IE1FTlUgYW5kIHNlYXJjaChub2RlLnByb21wdFswXSk6DQogICAgKyAgICAgICAgcHJpbnQoJ21l
bnUgInt9IicuZm9ybWF0KG5vZGUucHJvbXB0WzBdKSkNCiAgICArICAgICAgICBtYXRjaCA9IFRy
dWUNCiAgICArDQogICAgKyAgICBlbGlmIG5vZGUuaXRlbSA9PSBDT01NRU5UIGFuZCBzZWFyY2go
bm9kZS5wcm9tcHRbMF0pOg0KICAgICsgICAgICAgIHByaW50KCdjb21tZW50ICJ7fSInLmZvcm1h
dChub2RlLnByb21wdFswXSkpDQogICAgKyAgICAgICAgbWF0Y2ggPSBUcnVlDQogICAgKw0KICAg
ICsgICAgaWYgbWF0Y2g6DQogICAgKyAgICAgICAgcHJpbnQoImxvY2F0aW9uOiB7fTp7fVxuIi5m
b3JtYXQobm9kZS5maWxlbmFtZSwgbm9kZS5saW5lbnIpKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWdsaWIvZXhhbXBsZXMva2NvbmZpZ2xpYi5weSBiL3N1cHBvcnQva2NvbmZpZ2xp
Yi9leGFtcGxlcy9rY29uZmlnbGliLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMjAwMDANCiAgICBp
bmRleCAwMDAwMDAwLi5iOWRmYjY0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBv
cnQva2NvbmZpZ2xpYi9leGFtcGxlcy9rY29uZmlnbGliLnB5DQogICAgQEAgLTAsMCArMSBAQA0K
ICAgICsuLi9rY29uZmlnbGliLnB5DQogICAgXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQog
ICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9saXN0X3VuZGVmaW5l
ZC5weSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9saXN0X3VuZGVmaW5lZC5weQ0KICAg
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNGEzYmM5Yg0KICAgIC0t
LSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvbGlzdF91
bmRlZmluZWQucHkNCiAgICBAQCAtMCwwICsxLDE1NiBAQA0KICAgICsjIFByaW50cyBhIGxpc3Qg
b2Ygc3ltYm9scyB0aGF0IGFyZSByZWZlcmVuY2VkIGluIHRoZSBLY29uZmlnIGZpbGVzIG9mIHNv
bWUNCiAgICArIyBhcmNoaXRlY3R1cmUgYnV0IG5vdCBkZWZpbmVkIGJ5IHRoZSBLY29uZmlnIGZp
bGVzIG9mIGFueSBhcmNoaXRlY3R1cmUuDQogICAgKyMNCiAgICArIyBBIEtjb25maWcgZmlsZSBt
aWdodCBiZSBzaGFyZWQgYmV0d2VlbiBtYW55IGFyY2hpdGVjdHVyZXMgYW5kIGxlZ2l0aW1hdGVs
eQ0KICAgICsjIHJlZmVyZW5jZSB1bmRlZmluZWQgc3ltYm9scyBmb3Igc29tZSBvZiB0aGVtLCBi
dXQgaWYgbm8gYXJjaGl0ZWN0dXJlIGRlZmluZXMNCiAgICArIyB0aGUgc3ltYm9sLCBpdCB1c3Vh
bGx5IGluZGljYXRlcyBhIHByb2JsZW0gb3IgcG90ZW50aWFsIGNsZWFudXAuDQogICAgKyMNCiAg
ICArIyBUaGlzIHNjcmlwdCBjb3VsZCBiZSBzcGVkIHVwIGEgbG90IGlmIG5lZWRlZC4gU2VlIHRo
ZSBjb21tZW50IG5lYXIgdGhlDQogICAgKyMgcmVmZXJlbmNpbmdfbm9kZXMoKSBjYWxsLg0KICAg
ICsjDQogICAgKyMgUnVuIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIHRoZSBrZXJuZWwg
cm9vdDoNCiAgICArIw0KICAgICsjICAgJCBweXRob24oMykgS2NvbmZpZ2xpYi9leGFtcGxlcy9s
aXN0X3VuZGVmaW5lZC5weQ0KICAgICsjDQogICAgKyMgRXhhbXBsZSBvdXRwdXQ6DQogICAgKyMN
CiAgICArIyAgIFJlZ2lzdGVyaW5nIGRlZmluZWQgYW5kIHVuZGVmaW5lZCBzeW1ib2xzIGZvciBh
bGwgYXJjaGVzDQogICAgKyMgICAgIFByb2Nlc3NpbmcgbWlwcw0KICAgICsjICAgICBQcm9jZXNz
aW5nIGlhNjQNCiAgICArIyAgICAgUHJvY2Vzc2luZyBtZXRhZw0KICAgICsjICAgICAuLi4NCiAg
ICArIw0KICAgICsjICAgRmluZGluZyByZWZlcmVuY2VzIHRvIGVhY2ggdW5kZWZpbmVkIHN5bWJv
bA0KICAgICsjICAgICBQcm9jZXNzaW5nIG1pcHMNCiAgICArIyAgICAgUHJvY2Vzc2luZyBpYTY0
DQogICAgKyMgICAgIFByb2Nlc3NpbmcgbWV0YWcNCiAgICArIyAgICAgLi4uDQogICAgKyMNCiAg
ICArIyAgIFRoZSBmb2xsb3dpbmcgZ2xvYmFsbHkgdW5kZWZpbmVkIHN5bWJvbHMgd2VyZSBmb3Vu
ZCwgbGlzdGVkIGhlcmUNCiAgICArIyAgIHRvZ2V0aGVyIHdpdGggdGhlIGxvY2F0aW9ucyBvZiB0
aGUgaXRlbXMgdGhhdCByZWZlcmVuY2UgdGhlbS4NCiAgICArIyAgIFJlZmVyZW5jZXMgbWlnaHQg
Y29tZSBmcm9tIGVuY2xvc2luZyBtZW51cyBhbmQgaWZzLg0KICAgICsjDQogICAgKyMgICAgIEFS
TV9FUlJBVEFfNzUzOTcwOiBhcmNoL2FybS9tYWNoLW12ZWJ1L0tjb25maWc6NTYsIGFyY2gvYXJt
L21hY2gtbXZlYnUvS2NvbmZpZzozOQ0KICAgICsjICAgICBTVU5YSV9DQ1VfTVA6IGRyaXZlcnMv
Y2xrL3N1bnhpLW5nL0tjb25maWc6MTQNCiAgICArIyAgICAgU1VOWElfQ0NVX0RJVjogZHJpdmVy
cy9jbGsvc3VueGktbmcvS2NvbmZpZzoxNA0KICAgICsjICAgICBBQzk3OiBzb3VuZC9hYzk3L0tj
b25maWc6Ng0KICAgICsjICAgICAuLi4NCiAgICArDQogICAgK2ltcG9ydCBvcw0KICAgICtpbXBv
cnQgc3VicHJvY2Vzcw0KICAgICsNCiAgICArZnJvbSBrY29uZmlnbGliIGltcG9ydCBLY29uZmln
DQogICAgKw0KICAgICsNCiAgICArIyBSZWZlcmVuY2VkIGluc2lkZSB0aGUgS2NvbmZpZyBmaWxl
cw0KICAgICtvcy5lbnZpcm9uWyJLRVJORUxWRVJTSU9OIl0gPSBzdHIoDQogICAgKyAgICBzdWJw
cm9jZXNzLmNoZWNrX291dHB1dCgoIm1ha2UiLCAia2VybmVsdmVyc2lvbiIpKS5kZWNvZGUoInV0
Zi04IikucnN0cmlwKCkNCiAgICArKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBhbGxfYXJjaF9z
cmNhcmNoX3BhaXJzKCk6DQogICAgKyAgICAiIiINCiAgICArICAgIEdlbmVyYXRlcyBhbGwgdmFs
aWQgKEFSQ0gsIFNSQ0FSQ0gpIHR1cGxlcyBmb3IgdGhlIGtlcm5lbCwgY29ycmVzcG9uZGluZyB0
bw0KICAgICsgICAgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMuIFNSQ0FSQ0ggaG9sZHMgdGhlIGFy
Y2gvIHN1YmRpcmVjdG9yeS4NCiAgICArICAgICIiIg0KICAgICsgICAgZm9yIHNyY2FyY2ggaW4g
b3MubGlzdGRpcigiYXJjaCIpOg0KICAgICsgICAgICAgICMgRWFjaCBzdWJkaXJlY3Rvcnkgb2Yg
YXJjaC8gY29udGFpbmluZyBhIEtjb25maWcgZmlsZSBjb3JyZXNwb25kcyB0bw0KICAgICsgICAg
ICAgICMgYW4gYXJjaGl0ZWN0dXJlDQogICAgKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3Mu
cGF0aC5qb2luKCJhcmNoIiwgc3JjYXJjaCwgIktjb25maWciKSk6DQogICAgKyAgICAgICAgICAg
IHlpZWxkIChzcmNhcmNoLCBzcmNhcmNoKQ0KICAgICsNCiAgICArICAgICMgU29tZSBhcmNoaXRl
Y3R1cmVzIGRlZmluZSBhZGRpdGlvbmFsIEFSQ0ggc2V0dGluZ3Mgd2l0aCBBUkNIICE9IFNSQ0FS
Q0gNCiAgICArICAgICMgKHNlYXJjaCBmb3IgIkFkZGl0aW9uYWwgQVJDSCBzZXR0aW5ncyBmb3Ii
IGluIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUpDQogICAgKw0KICAgICsgICAgeWllbGQgKCJpMzg2
IiwgIng4NiIpDQogICAgKyAgICB5aWVsZCAoIng4Nl82NCIsICJ4ODYiKQ0KICAgICsNCiAgICAr
ICAgIHlpZWxkICgic3BhcmMzMiIsICJzcGFyYyIpDQogICAgKyAgICB5aWVsZCAoInNwYXJjNjQi
LCAic3BhcmMiKQ0KICAgICsNCiAgICArICAgIHlpZWxkICgic2g2NCIsICJzaCIpDQogICAgKw0K
ICAgICsgICAgeWllbGQgKCJ1bSIsICJ1bSIpDQogICAgKw0KICAgICsNCiAgICArZGVmIGFsbF9h
cmNoX3NyY2FyY2hfa2NvbmZpZ3MoKToNCiAgICArICAgICIiIg0KICAgICsgICAgR2VuZXJhdGVz
IEtjb25maWcgaW5zdGFuY2VzIGZvciBhbGwgdGhlIGFyY2hpdGVjdHVyZXMgaW4gdGhlIGtlcm5l
bA0KICAgICsgICAgIiIiDQogICAgKw0KICAgICsgICAgb3MuZW52aXJvblsic3JjdHJlZSJdID0g
Ii4iDQogICAgKyAgICBvcy5lbnZpcm9uWyJIT1NUQ0MiXSA9ICJnY2MiDQogICAgKyAgICBvcy5l
bnZpcm9uWyJIT1NUQ1hYIl0gPSAiZysrIg0KICAgICsgICAgb3MuZW52aXJvblsiQ0MiXSA9ICJn
Y2MiDQogICAgKyAgICBvcy5lbnZpcm9uWyJMRCJdID0gImxkIg0KICAgICsNCiAgICArICAgIGZv
ciBhcmNoLCBzcmNhcmNoIGluIGFsbF9hcmNoX3NyY2FyY2hfcGFpcnMoKToNCiAgICArICAgICAg
ICBwcmludCgiICBQcm9jZXNzaW5nICIgKyBhcmNoKQ0KICAgICsNCiAgICArICAgICAgICBvcy5l
bnZpcm9uWyJBUkNIIl0gPSBhcmNoDQogICAgKyAgICAgICAgb3MuZW52aXJvblsiU1JDQVJDSCJd
ID0gc3JjYXJjaA0KICAgICsNCiAgICArICAgICAgICAjIHVtIChVc2VyIE1vZGUgTGludXgpIHVz
ZXMgYSBkaWZmZXJlbnQgYmFzZSBLY29uZmlnIGZpbGUNCiAgICArICAgICAgICB5aWVsZCBLY29u
ZmlnKCJLY29uZmlnIiBpZiBhcmNoICE9ICJ1bSIgZWxzZSAiYXJjaC94ODYvdW0vS2NvbmZpZyIs
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICB3YXJuPUZhbHNlKQ0KICAgICsNCiAgICArDQog
ICAgK3ByaW50KCJSZWdpc3RlcmluZyBkZWZpbmVkIGFuZCB1bmRlZmluZWQgc3ltYm9scyBmb3Ig
YWxsIGFyY2hlcyIpDQogICAgKw0KICAgICsjIFNldHMgaG9sZGluZyB0aGUgbmFtZXMgb2YgYWxs
IGRlZmluZWQgYW5kIHVuZGVmaW5lZCBzeW1ib2xzLCBmb3IgYWxsDQogICAgKyMgYXJjaGl0ZWN0
dXJlcw0KICAgICtkZWZpbmVkID0gc2V0KCkNCiAgICArdW5kZWZpbmVkID0gc2V0KCkNCiAgICAr
DQogICAgK2ZvciBrY29uZiBpbiBhbGxfYXJjaF9zcmNhcmNoX2tjb25maWdzKCk6DQogICAgKyAg
ICBmb3IgbmFtZSwgc3ltIGluIGtjb25mLnN5bXMuaXRlbXMoKToNCiAgICArICAgICAgICBpZiBz
eW0ubm9kZXM6DQogICAgKyAgICAgICAgICAgICMgSWYgdGhlIHN5bWJvbCBoYXMgYSBtZW51IG5v
ZGUsIGl0IGlzIGRlZmluZWQNCiAgICArICAgICAgICAgICAgZGVmaW5lZC5hZGQobmFtZSkNCiAg
ICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAjIFVuZGVmaW5lZCBzeW1ib2wuIFdl
IHNraXAgc29tZSBvZiB0aGUgdW5pbnRlcmVzdGluZyBvbmVzLg0KICAgICsNCiAgICArICAgICAg
ICAgICAgIyBEdWUgdG8gaG93IEtjb25maWcgd29ya3MsIGludGVnZXIgbGl0ZXJhbHMgc2hvdyB1
cCBhcyBzeW1ib2xzDQogICAgKyAgICAgICAgICAgICMgKGZyb20gZS5nLiAnZGVmYXVsdCAxJyku
IFNraXAgdGhvc2UuDQogICAgKyAgICAgICAgICAgIHRyeToNCiAgICArICAgICAgICAgICAgICAg
IGludChuYW1lLCAwKQ0KICAgICsgICAgICAgICAgICAgICAgY29udGludWUNCiAgICArICAgICAg
ICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6DQogICAgKyAgICAgICAgICAgICAgICAjIEludGVyZXN0
aW5nIHVuZGVmaW5lZCBzeW1ib2wNCiAgICArICAgICAgICAgICAgICAgIHVuZGVmaW5lZC5hZGQo
bmFtZSkNCiAgICArDQogICAgKw0KICAgICtwcmludCgiXG5GaW5kaW5nIHJlZmVyZW5jZXMgdG8g
ZWFjaCB1bmRlZmluZWQgc3ltYm9sIikNCiAgICArDQogICAgK2RlZiByZWZlcmVuY2luZ19ub2Rl
cyhrY29uZiwgbmFtZSk6DQogICAgKyAgICAjIFJldHVybnMgYSBsaXN0IG9mIGFsbCBtZW51IG5v
ZGVzIHRoYXQgcmVmZXJlbmNlIGEgc3ltYm9sIG5hbWVkICduYW1lJyBpbg0KICAgICsgICAgIyBh
bnkgb2YgdGhlaXIgcHJvcGVydGllcyBvciBwcm9wZXJ0eSBjb25kaXRpb25zDQogICAgKyAgICBy
ZXMgPSBbXQ0KICAgICsNCiAgICArICAgIGZvciBub2RlIGluIGtjb25mLm5vZGVfaXRlcigpOg0K
ICAgICsgICAgICAgIGZvciByZWYgaW4gbm9kZS5yZWZlcmVuY2VkOg0KICAgICsgICAgICAgICAg
ICBpZiByZWYubmFtZSA9PSBuYW1lOg0KICAgICsgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChu
b2RlKQ0KICAgICsNCiAgICArICAgIHJldHVybiByZXMNCiAgICArDQogICAgKw0KICAgICsjIE1h
cHMgZWFjaCBnbG9iYWxseSB1bmRlZmluZWQgc3ltYm9sIHRvIHRoZSBtZW51IG5vZGVzIHRoYXQg
cmVmZXJlbmNlIGl0DQogICAgK3VuZGVmX3N5bV9yZWZzID0gWyhuYW1lLCBzZXQoKSkgZm9yIG5h
bWUgaW4gdW5kZWZpbmVkIC0gZGVmaW5lZF0NCiAgICArDQogICAgK2ZvciBrY29uZiBpbiBhbGxf
YXJjaF9zcmNhcmNoX2tjb25maWdzKCk6DQogICAgKyAgICBmb3IgbmFtZSwgcmVmcyBpbiB1bmRl
Zl9zeW1fcmVmczoNCiAgICArICAgICAgICAjIFRoaXMgbWVhbnMgdGhhdCB3ZSBzZWFyY2ggdGhl
IGVudGlyZSBjb25maWd1cmF0aW9uIHRyZWUgZm9yIGVhY2gNCiAgICArICAgICAgICAjIHVuZGVm
aW5lZCBzeW1ib2wsIHdoaWNoIGlzIHRlcnJpYmx5IGluZWZmaWNpZW50LiBXZSBjb3VsZCBzcGVl
ZA0KICAgICsgICAgICAgICMgdGhpbmdzIHVwIGJ5IHR3ZWFraW5nIHJlZmVyZW5jaW5nX25vZGVz
KCkgdG8gY29tcGFyZSBlYWNoIHN5bWJvbCB0bw0KICAgICsgICAgICAgICMgbXVsdGlwbGUgc3lt
Ym9scyB3aGlsZSB3YWxraW5nIHRoZSBjb25maWd1cmF0aW9uIHRyZWUuDQogICAgKyAgICAgICAg
Zm9yIG5vZGUgaW4gcmVmZXJlbmNpbmdfbm9kZXMoa2NvbmYsIG5hbWUpOg0KICAgICsgICAgICAg
ICAgICByZWZzLmFkZCgie306e30iLmZvcm1hdChub2RlLmZpbGVuYW1lLCBub2RlLmxpbmVucikp
DQogICAgKw0KICAgICsNCiAgICArcHJpbnQoIlxuVGhlIGZvbGxvd2luZyBnbG9iYWxseSB1bmRl
ZmluZWQgc3ltYm9scyB3ZXJlIGZvdW5kLCBsaXN0ZWQgaGVyZVxuIg0KICAgICsgICAgICAidG9n
ZXRoZXIgd2l0aCB0aGUgbG9jYXRpb25zIG9mIHRoZSBpdGVtcyB0aGF0IHJlZmVyZW5jZSB0aGVt
LlxuIg0KICAgICsgICAgICAiUmVmZXJlbmNlcyBtaWdodCBjb21lIGZyb20gZW5jbG9zaW5nIG1l
bnVzIGFuZCBpZnMuXG4iKQ0KICAgICsNCiAgICArZm9yIG5hbWUsIHJlZnMgaW4gdW5kZWZfc3lt
X3JlZnM6DQogICAgKyAgICBwcmludCgiICB7fToge30iLmZvcm1hdChuYW1lLCAiLCAiLmpvaW4o
cmVmcykpKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvbWVu
dWNvbmZpZ19leGFtcGxlLnB5IGIvc3VwcG9ydC9rY29uZmlnbGliL2V4YW1wbGVzL21lbnVjb25m
aWdfZXhhbXBsZS5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDAwMDAw
MC4uYTA2YjA1ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWds
aWIvZXhhbXBsZXMvbWVudWNvbmZpZ19leGFtcGxlLnB5DQogICAgQEAgLTAsMCArMSwzNDEgQEAN
CiAgICArIyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQogICAgKw0KICAgICsjIEltcGxlbWVudHMgYSBz
aW1wbGUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2Ugb24gdG9wIG9mIEtjb25maWdsaWIgdG8NCiAg
ICArIyBkZW1vbnN0cmF0ZSBjb25jZXB0cyBmb3IgYnVpbGRpbmcgYSBtZW51Y29uZmlnLWxpa2Uu
IEVtdWxhdGVzIGhvdyB0aGUNCiAgICArIyBzdGFuZGFyZCBtZW51Y29uZmlnIHByaW50cyBtZW51
IGVudHJpZXMuDQogICAgKyMNCiAgICArIyBBbHdheXMgZGlzcGxheXMgdGhlIGVudGlyZSBLY29u
ZmlnIHRyZWUgdG8ga2VlcCB0aGluZ3MgYXMgc2ltcGxlIGFzIHBvc3NpYmxlDQogICAgKyMgKGFs
bCBzeW1ib2xzLCBjaG9pY2VzLCBtZW51cywgYW5kIGNvbW1lbnRzKS4NCiAgICArIw0KICAgICsj
IFVzYWdlOg0KICAgICsjDQogICAgKyMgICAkIHB5dGhvbigzKSBLY29uZmlnbGliL2V4YW1wbGVz
L21lbnVjb25maWcucHkgPEtjb25maWcgZmlsZT4NCiAgICArIw0KICAgICsjIEEgc2FtcGxlIEtj
b25maWcgaXMgYXZhaWxhYmxlIGluIEtjb25maWdsaWIvZXhhbXBsZXMvS21lbnVjb25maWcuDQog
ICAgKyMNCiAgICArIyBIZXJlJ3MgYSBub3RhdGlvbiBndWlkZS4gVGhlIG5vdGF0aW9uIG1hdGNo
ZXMgdGhlIG9uZSB1c2VkIGJ5IG1lbnVjb25maWcNCiAgICArIyAoc2NyaXB0cy9rY29uZmlnL21j
b25mKToNCiAgICArIw0KICAgICsjICAgWyBdIHByb21wdCAgICAgIC0gQm9vbA0KICAgICsjICAg
PCA+IHByb21wdCAgICAgIC0gVHJpc3RhdGUNCiAgICArIyAgIHtNfSBwcm9tcHQgICAgICAtIFRy
aXN0YXRlIHNlbGVjdGVkIHRvIG0uIENhbiBvbmx5IGJlIHNldCB0byBtIG9yIHkuDQogICAgKyMg
ICAtKi0gcHJvbXB0ICAgICAgLSBCb29sL3RyaXN0YXRlIHNlbGVjdGVkIHRvIHksIHBpbm5pbmcg
aXQNCiAgICArIyAgIC1NLSBwcm9tcHQgICAgICAtIFRyaXN0YXRlIHNlbGVjdGVkIHRvIG0gdGhh
dCBhbHNvIGhhcyBtIHZpc2liaWxpdHksDQogICAgKyMgICAgICAgICAgICAgICAgICAgICBwaW5u
aW5nIGl0IHRvIG0NCiAgICArIyAgIChmb28pIHByb21wdCAgICAtIFN0cmluZy9pbnQvaGV4IHN5
bWJvbCB3aXRoIHZhbHVlICJmb28iDQogICAgKyMgICAtLT4gcHJvbXB0ICAgICAgLSBUaGUgc2Vs
ZWN0ZWQgc3ltYm9sIGluIGEgY2hvaWNlIGluIHkgbW9kZS4gVGhpcw0KICAgICsjICAgICAgICAg
ICAgICAgICAgICAgc3ludGF4IGlzIHVuaXF1ZSB0byB0aGlzIGV4YW1wbGUuDQogICAgKyMNCiAg
ICArIyBXaGVuIG1vZHVsZXMgYXJlIGRpc2FibGVkLCB0aGUgLnR5cGUgYXR0cmlidXRlIG9mIFRS
SVNUQVRFIHN5bWJvbHMgYW5kDQogICAgKyMgY2hvaWNlcyBhdXRvbWF0aWNhbGx5IGNoYW5nZXMg
dG8gQk9PTC4gVGhpcyB0cmljayBpcyB1c2VkIGJ5IHRoZSBDDQogICAgKyMgaW1wbGVtZW50YXRp
b24gYXMgd2VsbCwgYW5kIGdpdmVzIHRoZSBleHBlY3RlZCBiZWhhdmlvciB3aXRob3V0IGhhdmlu
ZyB0byBkbw0KICAgICsjIGFueXRoaW5nIGV4dHJhIGhlcmUuIFRoZSBvcmlnaW5hbCB0eXBlIGlz
IGF2YWlsYWJsZSBpbiAub3JpZ190eXBlIGlmIG5lZWRlZC4NCiAgICArIw0KICAgICsjIFRoZSBL
Y29uZmlnbGliL2V4YW1wbGVzL0ttZW51Y29uZmlnIGV4YW1wbGUgdXNlcyBuYW1lZCBjaG9pY2Vz
IHRvIGJlIGFibGUgdG8NCiAgICArIyByZWZlciB0byBjaG9pY2VzIGJ5IG5hbWUuIE5hbWVkIGNo
b2ljZXMgYXJlIHN1cHBvcnRlZCBpbiB0aGUgQyB0b29scyB0b28sIGJ1dA0KICAgICsjIEkgZG9u
J3QgdGhpbmsgSSd2ZSBldmVyIHNlZW4gdGhlbSB1c2VkIGluIHRoZSB3aWxkLg0KICAgICsjDQog
ICAgKyMgU2FtcGxlIHNlc3Npb246DQogICAgKyMNCiAgICArIyAgICQgcHl0aG9uIEtjb25maWds
aWIvZXhhbXBsZXMvbWVudWNvbmZpZy5weSBLY29uZmlnbGliL2V4YW1wbGVzL0ttZW51Y29uZmln
DQogICAgKyMNCiAgICArIyAgID09PT09PT09IEV4YW1wbGUgS2NvbmZpZyBjb25maWd1cmF0aW9u
ID09PT09PT09DQogICAgKyMNCiAgICArIyAgIFsqXSBFbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1
cHBvcnQgKE1PRFVMRVMpDQogICAgKyMgICAgICAgQm9vbCBhbmQgdHJpc3RhdGUgc3ltYm9scw0K
ICAgICsjICAgICAgICAgICBbKl0gQm9vbCBzeW1ib2wgKEJPT0wpDQogICAgKyMgICAgICAgICAg
ICAgICAgICAgWyBdIERlcGVuZGVudCBib29sIHN5bWJvbCAoQk9PTF9ERVApDQogICAgKyMgICAg
ICAgICAgICAgICAgICAgPCA+IERlcGVuZGVudCB0cmlzdGF0ZSBzeW1ib2wgKFRSSV9ERVApDQog
ICAgKyMgICAgICAgICAgICAgICAgICAgWyBdIEZpcnN0IHByb21wdCAoVFdPX01FTlVfTk9ERVMp
DQogICAgKyMgICAgICAgICAgIDwgPiBUcmlzdGF0ZSBzeW1ib2wgKFRSSSkNCiAgICArIyAgICAg
ICAgICAgWyBdIFNlY29uZCBwcm9tcHQgKFRXT19NRU5VX05PREVTKQ0KICAgICsjICAgICAgICAg
ICAgICAgKioqIFRoZXNlIGFyZSBzZWxlY3RlZCBieSBUUklfREVQICoqKg0KICAgICsjICAgICAg
ICAgICA8ID4gVHJpc3RhdGUgc2VsZWN0ZWQgYnkgVFJJX0RFUCAoU0VMRUNURURfQllfVFJJX0RF
UCkNCiAgICArIyAgICAgICAgICAgPCA+IFRyaXN0YXRlIGltcGxpZWQgYnkgVFJJX0RFUCAoSU1Q
TElFRF9CWV9UUklfREVQKQ0KICAgICsjICAgICAgIFN0cmluZywgaW50LCBhbmQgaGV4IHN5bWJv
bHMNCiAgICArIyAgICAgICAgICAgKGZvbykgU3RyaW5nIHN5bWJvbCAoU1RSSU5HKQ0KICAgICsj
ICAgICAgICAgICAoNzQ3KSBJbnQgc3ltYm9sIChJTlQpDQogICAgKyMgICAgICAgICAgICgweEFC
QykgSGV4IHN5bWJvbCAoSEVYKQ0KICAgICsjICAgICAgIFZhcmlvdXMgY2hvaWNlcw0KICAgICsj
ICAgICAgICAgICAtKi0gQm9vbCBjaG9pY2UgKEJPT0xfQ0hPSUNFKQ0KICAgICsjICAgICAgICAg
ICAgICAgICAgIC0tPiBCb29sIGNob2ljZSBzeW0gMSAoQk9PTF9DSE9JQ0VfU1lNXzEpDQogICAg
KyMgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgY2hvaWNlIHN5bSAyIChCT09MX0NIT0lDRV9T
WU1fMikNCiAgICArIyAgICAgICAgICAge019IFRyaXN0YXRlIGNob2ljZSAoVFJJX0NIT0lDRSkN
CiAgICArIyAgICAgICAgICAgICAgICAgICA8ID4gVHJpc3RhdGUgY2hvaWNlIHN5bSAxIChUUklf
Q0hPSUNFX1NZTV8xKQ0KICAgICsjICAgICAgICAgICAgICAgICAgIDwgPiBUcmlzdGF0ZSBjaG9p
Y2Ugc3ltIDIgKFRSSV9DSE9JQ0VfU1lNXzIpDQogICAgKyMgICAgICAgICAgIFsgXSBPcHRpb25h
bCBib29sIGNob2ljZSAoT1BUX0JPT0xfQ0hPSUNFKQ0KICAgICsjDQogICAgKyMgICBFbnRlciBh
IHN5bWJvbC9jaG9pY2UgbmFtZSwgImxvYWRfY29uZmlnIiwgb3IgIndyaXRlX2NvbmZpZyIgKG9y
IHByZXNzIENUUkwrRCB0byBleGl0KTogQk9PTA0KICAgICsjICAgVmFsdWUgZm9yIEJPT0wgKGF2
YWlsYWJsZTogbiwgeSk6IG4NCiAgICArIw0KICAgICsjICAgPT09PT09PT0gRXhhbXBsZSBLY29u
ZmlnIGNvbmZpZ3VyYXRpb24gPT09PT09PT0NCiAgICArIw0KICAgICsjICAgWypdIEVuYWJsZSBs
b2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAoTU9EVUxFUykNCiAgICArIyAgICAgICBCb29sIGFuZCB0
cmlzdGF0ZSBzeW1ib2xzDQogICAgKyMgICAgICAgICAgIFsgXSBCb29sIHN5bWJvbCAoQk9PTCkN
CiAgICArIyAgICAgICAgICAgPCA+IFRyaXN0YXRlIHN5bWJvbCAoVFJJKQ0KICAgICsjICAgICAg
ICAgICBbIF0gU2Vjb25kIHByb21wdCAoVFdPX01FTlVfTk9ERVMpDQogICAgKyMgICAgICAgICAg
ICAgICAqKiogVGhlc2UgYXJlIHNlbGVjdGVkIGJ5IFRSSV9ERVAgKioqDQogICAgKyMgICAgICAg
ICAgIDwgPiBUcmlzdGF0ZSBzZWxlY3RlZCBieSBUUklfREVQIChTRUxFQ1RFRF9CWV9UUklfREVQ
KQ0KICAgICsjICAgICAgICAgICA8ID4gVHJpc3RhdGUgaW1wbGllZCBieSBUUklfREVQIChJTVBM
SUVEX0JZX1RSSV9ERVApDQogICAgKyMgICAgICAgU3RyaW5nLCBpbnQsIGFuZCBoZXggc3ltYm9s
cw0KICAgICsjICAgICAgICAgICAoZm9vKSBTdHJpbmcgc3ltYm9sIChTVFJJTkcpDQogICAgKyMg
ICAgICAgICAgICg3NDcpIEludCBzeW1ib2wgKElOVCkNCiAgICArIyAgICAgICAgICAgKDB4QUJD
KSBIZXggc3ltYm9sIChIRVgpDQogICAgKyMgICAgICAgVmFyaW91cyBjaG9pY2VzDQogICAgKyMg
ICAgICAgICAgIC0qLSBCb29sIGNob2ljZSAoQk9PTF9DSE9JQ0UpDQogICAgKyMgICAgICAgICAg
ICAgICAgICAgLS0+IEJvb2wgY2hvaWNlIHN5bSAxIChCT09MX0NIT0lDRV9TWU1fMSkNCiAgICAr
IyAgICAgICAgICAgICAgICAgICAgICAgQm9vbCBjaG9pY2Ugc3ltIDIgKEJPT0xfQ0hPSUNFX1NZ
TV8yKQ0KICAgICsjICAgICAgICAgICB7TX0gVHJpc3RhdGUgY2hvaWNlIChUUklfQ0hPSUNFKQ0K
ICAgICsjICAgICAgICAgICAgICAgICAgIDwgPiBUcmlzdGF0ZSBjaG9pY2Ugc3ltIDEgKFRSSV9D
SE9JQ0VfU1lNXzEpDQogICAgKyMgICAgICAgICAgICAgICAgICAgPCA+IFRyaXN0YXRlIGNob2lj
ZSBzeW0gMiAoVFJJX0NIT0lDRV9TWU1fMikNCiAgICArIyAgICAgICAgICBbIF0gT3B0aW9uYWwg
Ym9vbCBjaG9pY2UgKE9QVF9CT09MX0NIT0lDRSkNCiAgICArIw0KICAgICsjICAgRW50ZXIgYSBz
eW1ib2wvY2hvaWNlIG5hbWUsICJsb2FkX2NvbmZpZyIsIG9yICJ3cml0ZV9jb25maWciIChvciBw
cmVzcyBDVFJMK0QgdG8gZXhpdCk6IE1PRFVMRVMNCiAgICArIyAgIFZhbHVlIGZvciBNT0RVTEVT
IChhdmFpbGFibGU6IG4sIHkpOiBuDQogICAgKyMNCiAgICArIyAgID09PT09PT09IEV4YW1wbGUg
S2NvbmZpZyBjb25maWd1cmF0aW9uID09PT09PT09DQogICAgKyMNCiAgICArIyAgIFsgXSBFbmFi
bGUgbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgKE1PRFVMRVMpDQogICAgKyMgICAgICAgQm9vbCBh
bmQgdHJpc3RhdGUgc3ltYm9scw0KICAgICsjICAgICAgICAgICBbIF0gQm9vbCBzeW1ib2wgKEJP
T0wpDQogICAgKyMgICAgICAgICAgIFsgXSBUcmlzdGF0ZSBzeW1ib2wgKFRSSSkNCiAgICArIyAg
ICAgICAgICAgWyBdIFNlY29uZCBwcm9tcHQgKFRXT19NRU5VX05PREVTKQ0KICAgICsjICAgICAg
ICAgICAgICAgKioqIFRoZXNlIGFyZSBzZWxlY3RlZCBieSBUUklfREVQICoqKg0KICAgICsjICAg
ICAgICAgICBbIF0gVHJpc3RhdGUgc2VsZWN0ZWQgYnkgVFJJX0RFUCAoU0VMRUNURURfQllfVFJJ
X0RFUCkNCiAgICArIyAgICAgICAgICAgWyBdIFRyaXN0YXRlIGltcGxpZWQgYnkgVFJJX0RFUCAo
SU1QTElFRF9CWV9UUklfREVQKQ0KICAgICsjICAgICAgIFN0cmluZywgaW50LCBhbmQgaGV4IHN5
bWJvbHMNCiAgICArIyAgICAgICAgICAgKGZvbykgU3RyaW5nIHN5bWJvbCAoU1RSSU5HKQ0KICAg
ICsjICAgICAgICAgICAoNzQ3KSBJbnQgc3ltYm9sIChJTlQpDQogICAgKyMgICAgICAgICAgICgw
eEFCQykgSGV4IHN5bWJvbCAoSEVYKQ0KICAgICsjICAgICAgIFZhcmlvdXMgY2hvaWNlcw0KICAg
ICsjICAgICAgICAgICAtKi0gQm9vbCBjaG9pY2UgKEJPT0xfQ0hPSUNFKQ0KICAgICsjICAgICAg
ICAgICAgICAgICAgIC0tPiBCb29sIGNob2ljZSBzeW0gMSAoQk9PTF9DSE9JQ0VfU1lNXzEpDQog
ICAgKyMgICAgICAgICAgICAgICAgICAgICAgIEJvb2wgY2hvaWNlIHN5bSAyIChCT09MX0NIT0lD
RV9TWU1fMikNCiAgICArIyAgICAgICAgICAgLSotIFRyaXN0YXRlIGNob2ljZSAoVFJJX0NIT0lD
RSkNCiAgICArIyAgICAgICAgICAgICAgICAgICAtLT4gVHJpc3RhdGUgY2hvaWNlIHN5bSAxIChU
UklfQ0hPSUNFX1NZTV8xKQ0KICAgICsjICAgICAgICAgICAgICAgICAgICAgICBUcmlzdGF0ZSBj
aG9pY2Ugc3ltIDIgKFRSSV9DSE9JQ0VfU1lNXzIpDQogICAgKyMgICAgICAgICAgIFsgXSBPcHRp
b25hbCBib29sIGNob2ljZSAoT1BUX0JPT0xfQ0hPSUNFKQ0KICAgICsjDQogICAgKyMgICBFbnRl
ciBhIHN5bWJvbC9jaG9pY2UgbmFtZSwgImxvYWRfY29uZmlnIiwgb3IgIndyaXRlX2NvbmZpZyIg
KG9yIHByZXNzIENUUkwrRCB0byBleGl0KTogXkQNCiAgICArDQogICAgK2Zyb20gX19mdXR1cmVf
XyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24NCiAgICAraW1wb3J0IHJlYWRsaW5lDQogICAgK2ltcG9y
dCBzeXMNCiAgICArDQogICAgK2Zyb20ga2NvbmZpZ2xpYiBpbXBvcnQgS2NvbmZpZywgXA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgIFN5bWJvbCwgTUVOVSwgQ09NTUVOVCwgXA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgIEJPT0wsIFRSSVNUQVRFLCBTVFJJTkcsIElOVCwgSEVYLCBV
TktOT1dOLCBcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgZXhwcl92YWx1ZSwgXA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgIFRSSV9UT19TVFINCiAgICArDQogICAgKw0KICAgICsj
IFB5dGhvbiAyLzMgY29tcGF0aWJpbGl0eSBoYWNrDQogICAgK2lmIHN5cy52ZXJzaW9uX2luZm9b
MF0gPCAzOg0KICAgICsgICAgaW5wdXQgPSByYXdfaW5wdXQNCiAgICArDQogICAgKw0KICAgICtk
ZWYgaW5kZW50X3ByaW50KHMsIGluZGVudCk6DQogICAgKyAgICBwcmludChpbmRlbnQqIiAiICsg
cykNCiAgICArDQogICAgKw0KICAgICtkZWYgdmFsdWVfc3RyKHNjKToNCiAgICArICAgICIiIg0K
ICAgICsgICAgUmV0dXJucyB0aGUgdmFsdWUgcGFydCAoIlsqXSIsICI8TT4iLCAiKGZvbykiIGV0
Yy4pIG9mIGEgbWVudSBlbnRyeS4NCiAgICArDQogICAgKyAgICBzYzogU3ltYm9sIG9yIENob2lj
ZS4NCiAgICArICAgICIiIg0KICAgICsgICAgaWYgc2MudHlwZSBpbiAoU1RSSU5HLCBJTlQsIEhF
WCk6DQogICAgKyAgICAgICAgcmV0dXJuICIoe30pIi5mb3JtYXQoc2Muc3RyX3ZhbHVlKQ0KICAg
ICsNCiAgICArICAgICMgQk9PTCBvciBUUklTVEFURQ0KICAgICsNCiAgICArICAgICMgVGhlIGNo
b2ljZSBtb2RlIGlzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB2aXNpYmlsaXR5IG9mIGNob2ljZSBz
eW1ib2xzLCBzbw0KICAgICsgICAgIyB3ZSBjYW4gY2hlY2sgdGhlIGNob2ljZSBzeW1ib2xzJyBv
d24gdmlzaWJpbGl0eSB0byBzZWUgaWYgdGhlIGNob2ljZSBpcw0KICAgICsgICAgIyBpbiB5IG1v
ZGUNCiAgICArICAgIGlmIGlzaW5zdGFuY2Uoc2MsIFN5bWJvbCkgYW5kIHNjLmNob2ljZSBhbmQg
c2MudmlzaWJpbGl0eSA9PSAyOg0KICAgICsgICAgICAgICMgRm9yIGNob2ljZXMgaW4geSBtb2Rl
LCBwcmludCAnLS0+JyBuZXh0IHRvIHRoZSBzZWxlY3RlZCBzeW1ib2wNCiAgICArICAgICAgICBy
ZXR1cm4gIi0tPiIgaWYgc2MuY2hvaWNlLnNlbGVjdGlvbiBpcyBzYyBlbHNlICIgICAiDQogICAg
Kw0KICAgICsgICAgdHJpX3ZhbF9zdHIgPSAoIiAiLCAiTSIsICIqIilbc2MudHJpX3ZhbHVlXQ0K
ICAgICsNCiAgICArICAgIGlmIGxlbihzYy5hc3NpZ25hYmxlKSA9PSAxOg0KICAgICsgICAgICAg
ICMgUGlubmVkIHRvIGEgc2luZ2xlIHZhbHVlDQogICAgKyAgICAgICAgcmV0dXJuICIte30tIi5m
b3JtYXQodHJpX3ZhbF9zdHIpDQogICAgKw0KICAgICsgICAgaWYgc2MudHlwZSA9PSBCT09MOg0K
ICAgICsgICAgICAgIHJldHVybiAiW3t9XSIuZm9ybWF0KHRyaV92YWxfc3RyKQ0KICAgICsNCiAg
ICArICAgIGlmIHNjLnR5cGUgPT0gVFJJU1RBVEU6DQogICAgKyAgICAgICAgaWYgc2MuYXNzaWdu
YWJsZSA9PSAoMSwgMik6DQogICAgKyAgICAgICAgICAgICMgbSBhbmQgeSBhdmFpbGFibGUNCiAg
ICArICAgICAgICAgICAgcmV0dXJuICJ7IiArIHRyaV92YWxfc3RyICsgIn0iICAjIEdldHMgYSBi
aXQgY29uZnVzaW5nIHdpdGggLmZvcm1hdCgpDQogICAgKyAgICAgICAgcmV0dXJuICI8e30+Ii5m
b3JtYXQodHJpX3ZhbF9zdHIpDQogICAgKw0KICAgICsNCiAgICArZGVmIG5vZGVfc3RyKG5vZGUp
Og0KICAgICsgICAgIiIiDQogICAgKyAgICBSZXR1cm5zIHRoZSBjb21wbGV0ZSBtZW51IGVudHJ5
IHRleHQgZm9yIGEgbWVudSBub2RlLCBvciAiIiBmb3IgaW52aXNpYmxlDQogICAgKyAgICBtZW51
IG5vZGVzLiBJbnZpc2libGUgbWVudSBub2RlcyBhcmUgdGhvc2UgdGhhdCBsYWNrIGEgcHJvbXB0
IG9yIHRoYXQgZG8NCiAgICArICAgIG5vdCBoYXZlIGEgc2F0aXNmaWVkIHByb21wdCBjb25kaXRp
b24uDQogICAgKw0KICAgICsgICAgRXhhbXBsZSByZXR1cm4gdmFsdWU6ICJbKl0gQm9vbCBzeW1i
b2wgKEJPT0wpIg0KICAgICsNCiAgICArICAgIFRoZSBzeW1ib2wgbmFtZSBpcyBwcmludGVkIGlu
IHBhcmVudGhlc2VzIHRvIHRoZSByaWdodCBvZiB0aGUgcHJvbXB0LiBUaGlzDQogICAgKyAgICBp
cyBzbyB0aGF0IHN5bWJvbHMgY2FuIGVhc2lseSBiZSByZWZlcnJlZCB0byBpbiB0aGUgY29uZmln
dXJhdGlvbg0KICAgICsgICAgaW50ZXJmYWNlLg0KICAgICsgICAgIiIiDQogICAgKyAgICBpZiBu
b3Qgbm9kZS5wcm9tcHQ6DQogICAgKyAgICAgICAgcmV0dXJuICIiDQogICAgKw0KICAgICsgICAg
IyBFdmVuIGZvciBtZW51IG5vZGVzIGZvciBzeW1ib2xzIGFuZCBjaG9pY2VzLCBpdCdzIHdyb25n
IHRvIGNoZWNrDQogICAgKyAgICAjIFN5bWJvbC52aXNpYmlsaXR5IC8gQ2hvaWNlLnZpc2liaWxp
dHkgaGVyZS4gVGhlIHJlYXNvbiBpcyB0aGF0IGEgc3ltYm9sDQogICAgKyAgICAjIChhbmQgYSBj
aG9pY2UsIGluIHRoZW9yeSkgY2FuIGJlIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zLCBn
aXZpbmcgaXQNCiAgICArICAgICMgbXVsdGlwbGUgbWVudSBub2Rlcywgd2hpY2ggZG8gbm90IG5l
Y2Vzc2FyaWx5IGFsbCBoYXZlIHRoZSBzYW1lIHByb21wdA0KICAgICsgICAgIyB2aXNpYmlsaXR5
LiBTeW1ib2wudmlzaWJpbGl0eSAvIENob2ljZS52aXNpYmlsaXR5IGlzIGNhbGN1bGF0ZWQgYXMg
dGhlIE9SDQogICAgKyAgICAjIG9mIHRoZSB2aXNpYmlsaXR5IG9mIGFsbCB0aGUgcHJvbXB0cy4N
CiAgICArICAgIHByb21wdCwgcHJvbXB0X2NvbmQgPSBub2RlLnByb21wdA0KICAgICsgICAgaWYg
bm90IGV4cHJfdmFsdWUocHJvbXB0X2NvbmQpOg0KICAgICsgICAgICAgIHJldHVybiAiIg0KICAg
ICsNCiAgICArICAgIGlmIG5vZGUuaXRlbSA9PSBNRU5VOg0KICAgICsgICAgICAgIHJldHVybiAi
ICAgICIgKyBwcm9tcHQNCiAgICArDQogICAgKyAgICBpZiBub2RlLml0ZW0gPT0gQ09NTUVOVDoN
CiAgICArICAgICAgICByZXR1cm4gIiAgICAqKioge30gKioqIi5mb3JtYXQocHJvbXB0KQ0KICAg
ICsNCiAgICArICAgICMgU3ltYm9sIG9yIENob2ljZQ0KICAgICsNCiAgICArICAgIHNjID0gbm9k
ZS5pdGVtDQogICAgKw0KICAgICsgICAgaWYgc2MudHlwZSA9PSBVTktOT1dOOg0KICAgICsgICAg
ICAgICMgU2tpcCBzeW1ib2xzIGRlZmluZWQgd2l0aG91dCBhIHR5cGUgKHRoZXNlIGFyZSBvYnNj
dXJlIGFuZCBnZW5lcmF0ZQ0KICAgICsgICAgICAgICMgYSB3YXJuaW5nKQ0KICAgICsgICAgICAg
IHJldHVybiAiIg0KICAgICsNCiAgICArICAgICMgezozfSBzZXRzIHRoZSBmaWVsZCB3aWR0aCB0
byB0aHJlZS4gR2l2ZXMgbmljZSBhbGlnbm1lbnQgZm9yIGVtcHR5IHN0cmluZw0KICAgICsgICAg
IyB2YWx1ZXMuDQogICAgKyAgICByZXMgPSAiezozfSB7fSIuZm9ybWF0KHZhbHVlX3N0cihzYyks
IHByb21wdCkNCiAgICArDQogICAgKyAgICAjIERvbid0IHByaW50IHRoZSBuYW1lIGZvciB1bm5h
bWVkIGNob2ljZXMgKHRoZSBub3JtYWwga2luZCkNCiAgICArICAgIGlmIHNjLm5hbWUgaXMgbm90
IE5vbmU6DQogICAgKyAgICAgICAgcmVzICs9ICIgKHt9KSIuZm9ybWF0KHNjLm5hbWUpDQogICAg
Kw0KICAgICsgICAgcmV0dXJuIHJlcw0KICAgICsNCiAgICArDQogICAgK2RlZiBwcmludF9tZW51
Y29uZmlnX25vZGVzKG5vZGUsIGluZGVudCk6DQogICAgKyAgICAiIiINCiAgICArICAgIFByaW50
cyBhIHRyZWUgd2l0aCBhbGwgdGhlIG1lbnUgZW50cmllcyByb290ZWQgYXQgJ25vZGUnLiBDaGls
ZCBtZW51DQogICAgKyAgICBlbnRyaWVzIGFyZSBpbmRlbnRlZC4NCiAgICArICAgICIiIg0KICAg
ICsgICAgd2hpbGUgbm9kZToNCiAgICArICAgICAgICBzdHJpbmcgPSBub2RlX3N0cihub2RlKQ0K
ICAgICsgICAgICAgIGlmIHN0cmluZzoNCiAgICArICAgICAgICAgICAgaW5kZW50X3ByaW50KHN0
cmluZywgaW5kZW50KQ0KICAgICsNCiAgICArICAgICAgICBpZiBub2RlLmxpc3Q6DQogICAgKyAg
ICAgICAgICAgIHByaW50X21lbnVjb25maWdfbm9kZXMobm9kZS5saXN0LCBpbmRlbnQgKyA4KQ0K
ICAgICsNCiAgICArICAgICAgICBub2RlID0gbm9kZS5uZXh0DQogICAgKw0KICAgICsNCiAgICAr
ZGVmIHByaW50X21lbnVjb25maWcoa2NvbmYpOg0KICAgICsgICAgIiIiDQogICAgKyAgICBQcmlu
dHMgYWxsIG1lbnUgZW50cmllcyBmb3IgdGhlIGNvbmZpZ3VyYXRpb24uDQogICAgKyAgICAiIiIN
CiAgICArICAgICMgUHJpbnQgdGhlIGV4cGFuZGVkIG1haW5tZW51IHRleHQgYXQgdGhlIHRvcC4g
VGhpcyBpcyB0aGUgc2FtZSBhcw0KICAgICsgICAgIyBrY29uZi50b3Bfbm9kZS5wcm9tcHRbMF0s
IGJ1dCB3aXRoIHZhcmlhYmxlIHJlZmVyZW5jZXMgZXhwYW5kZWQuDQogICAgKyAgICBwcmludCgi
XG49PT09PT09PSB7fSA9PT09PT09PVxuIi5mb3JtYXQoa2NvbmYubWFpbm1lbnVfdGV4dCkpDQog
ICAgKw0KICAgICsgICAgcHJpbnRfbWVudWNvbmZpZ19ub2RlcyhrY29uZi50b3Bfbm9kZS5saXN0
LCAwKQ0KICAgICsgICAgcHJpbnQoIiIpDQogICAgKw0KICAgICsNCiAgICArZGVmIGdldF92YWx1
ZV9mcm9tX3VzZXIoc2MpOg0KICAgICsgICAgIiIiDQogICAgKyAgICBQcm9tcHRzIHRoZSB1c2Vy
IGZvciBhIHZhbHVlIGZvciB0aGUgc3ltYm9sIG9yIGNob2ljZSAnc2MnLiBGb3INCiAgICArICAg
IGJvb2wvdHJpc3RhdGUgc3ltYm9scyBhbmQgY2hvaWNlcywgcHJvdmlkZXMgYSBsaXN0IG9mIGFs
bCB0aGUgYXNzaWduYWJsZQ0KICAgICsgICAgdmFsdWVzLg0KICAgICsgICAgIiIiDQogICAgKyAg
ICBpZiBub3Qgc2MudmlzaWJpbGl0eToNCiAgICArICAgICAgICBwcmludChzYy5uYW1lICsgIiBp
cyBub3QgY3VycmVudGx5IHZpc2libGUiKQ0KICAgICsgICAgICAgIHJldHVybiBGYWxzZQ0KICAg
ICsNCiAgICArICAgIHByb21wdCA9ICJWYWx1ZSBmb3Ige30iLmZvcm1hdChzYy5uYW1lKQ0KICAg
ICsgICAgaWYgc2MudHlwZSBpbiAoQk9PTCwgVFJJU1RBVEUpOg0KICAgICsgICAgICAgIHByb21w
dCArPSAiIChhdmFpbGFibGU6IHt9KSIgXA0KICAgICsgICAgICAgICAgICAgICAgICAuZm9ybWF0
KCIsICIuam9pbihUUklfVE9fU1RSW3ZhbF0gZm9yIHZhbCBpbiBzYy5hc3NpZ25hYmxlKSkNCiAg
ICArICAgIHByb21wdCArPSAiOiAiDQogICAgKw0KICAgICsgICAgdmFsID0gaW5wdXQocHJvbXB0
KQ0KICAgICsNCiAgICArICAgICMgQXV0b21hdGljYWxseSBhZGQgYSAiMHgiIHByZWZpeCBmb3Ig
aGV4IHN5bWJvbHMsIGxpa2UgdGhlIG1lbnVjb25maWcNCiAgICArICAgICMgaW50ZXJmYWNlIGRv
ZXMuIFRoaXMgaXNuJ3QgZG9uZSB3aGVuIGxvYWRpbmcgLmNvbmZpZyBmaWxlcywgaGVuY2Ugd2h5
DQogICAgKyAgICAjIHNldF92YWx1ZSgpIGRvZXNuJ3QgZG8gaXQgYXV0b21hdGljYWxseS4NCiAg
ICArICAgIGlmIHNjLnR5cGUgPT0gSEVYIGFuZCBub3QgdmFsLnN0YXJ0c3dpdGgoKCIweCIsICIw
WCIpKToNCiAgICArICAgICAgICB2YWwgPSAiMHgiICsgdmFsDQogICAgKw0KICAgICsgICAgIyBM
ZXQgS2NvbmZpZ2xpYiBpdHNlbGYgcHJpbnQgYSB3YXJuaW5nIGhlcmUgaWYgdGhlIHZhbHVlIGlz
IGludmFsaWQuIFdlDQogICAgKyAgICAjIGNvdWxkIGFsc28gZGlzYWJsZSB3YXJuaW5ncyB0ZW1w
b3JhcmlseSB3aXRoICdrY29uZi53YXJuID0gRmFsc2UnIGFuZA0KICAgICsgICAgIyBwcmludCBv
dXIgb3duIHdhcm5pbmcuDQogICAgKyAgICByZXR1cm4gc2Muc2V0X3ZhbHVlKHZhbCkNCiAgICAr
DQogICAgKw0KICAgICtpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOg0KICAgICsgICAgaWYgbGVu
KHN5cy5hcmd2KSAhPSAyOg0KICAgICsgICAgICAgIHN5cy5leGl0KCJ1c2FnZTogbWVudWNvbmZp
Zy5weSA8S2NvbmZpZyBmaWxlPiIpDQogICAgKw0KICAgICsgICAgIyBMb2FkIEtjb25maWcgY29u
ZmlndXJhdGlvbiBmaWxlcw0KICAgICsgICAga2NvbmYgPSBLY29uZmlnKHN5cy5hcmd2WzFdKQ0K
ICAgICsNCiAgICArICAgICMgUHJpbnQgdGhlIGluaXRpYWwgY29uZmlndXJhdGlvbiB0cmVlDQog
ICAgKyAgICBwcmludF9tZW51Y29uZmlnKGtjb25mKQ0KICAgICsNCiAgICArICAgIHdoaWxlIFRy
dWU6DQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBjbWQgPSBpbnB1dCgnRW50
ZXIgYSBzeW1ib2wvY2hvaWNlIG5hbWUsICJsb2FkX2NvbmZpZyIsIG9yICcNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgJyJ3cml0ZV9jb25maWciIChvciBwcmVzcyBDVFJMK0QgdG8gZXhp
dCk6ICcpLnN0cmlwKCkNCiAgICArICAgICAgICBleGNlcHQgRU9GRXJyb3I6DQogICAgKyAgICAg
ICAgICAgIHByaW50KCIiKQ0KICAgICsgICAgICAgICAgICBicmVhaw0KICAgICsNCiAgICArICAg
ICAgICBpZiBjbWQgPT0gImxvYWRfY29uZmlnIjoNCiAgICArICAgICAgICAgICAgY29uZmlnX2Zp
bGVuYW1lID0gaW5wdXQoIi5jb25maWcgZmlsZSB0byBsb2FkOiAiKQ0KICAgICsgICAgICAgICAg
ICB0cnk6DQogICAgKyAgICAgICAgICAgICAgICAjIFJldHVybnMgYSBtZXNzYWdlIHRlbGxpbmcg
d2hpY2ggZmlsZSBnb3QgbG9hZGVkDQogICAgKyAgICAgICAgICAgICAgICBwcmludChrY29uZi5s
b2FkX2NvbmZpZyhjb25maWdfZmlsZW5hbWUpKQ0KICAgICsgICAgICAgICAgICBleGNlcHQgRW52
aXJvbm1lbnRFcnJvciBhcyBlOg0KICAgICsgICAgICAgICAgICAgICAgcHJpbnQoZSwgZmlsZT1z
eXMuc3RkZXJyKQ0KICAgICsNCiAgICArICAgICAgICAgICAgcHJpbnRfbWVudWNvbmZpZyhrY29u
ZikNCiAgICArICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgaWYgY21k
ID09ICJ3cml0ZV9jb25maWciOg0KICAgICsgICAgICAgICAgICBjb25maWdfZmlsZW5hbWUgPSBp
bnB1dCgiVG8gdGhpcyBmaWxlOiAiKQ0KICAgICsgICAgICAgICAgICB0cnk6DQogICAgKyAgICAg
ICAgICAgICAgICAjIFJldHVybnMgYSBtZXNzYWdlIHRlbGxpbmcgd2hpY2ggZmlsZSBnb3Qgc2F2
ZWQNCiAgICArICAgICAgICAgICAgICAgIHByaW50KGtjb25mLndyaXRlX2NvbmZpZyhjb25maWdf
ZmlsZW5hbWUpKQ0KICAgICsgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBl
Og0KICAgICsgICAgICAgICAgICAgICAgcHJpbnQoZSwgZmlsZT1zeXMuc3RkZXJyKQ0KICAgICsN
CiAgICArICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgIyBBc3N1bWUg
J2NtZCcgaXMgdGhlIG5hbWUgb2YgYSBzeW1ib2wgb3IgY2hvaWNlIGlmIGl0IGlzbid0IG9uZSBv
ZiB0aGUNCiAgICArICAgICAgICAjIGNvbW1hbmRzIGFib3ZlLCBwcm9tcHQgdGhlIHVzZXIgZm9y
IGEgdmFsdWUgZm9yIGl0LCBhbmQgcHJpbnQgdGhlIG5ldw0KICAgICsgICAgICAgICMgY29uZmln
dXJhdGlvbiB0cmVlDQogICAgKw0KICAgICsgICAgICAgIGlmIGNtZCBpbiBrY29uZi5zeW1zOg0K
ICAgICsgICAgICAgICAgICBpZiBnZXRfdmFsdWVfZnJvbV91c2VyKGtjb25mLnN5bXNbY21kXSk6
DQogICAgKyAgICAgICAgICAgICAgICBwcmludF9tZW51Y29uZmlnKGtjb25mKQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgaWYgY21kIGluIGtj
b25mLm5hbWVkX2Nob2ljZXM6DQogICAgKyAgICAgICAgICAgIGlmIGdldF92YWx1ZV9mcm9tX3Vz
ZXIoa2NvbmYubmFtZWRfY2hvaWNlc1tjbWRdKToNCiAgICArICAgICAgICAgICAgICAgIHByaW50
X21lbnVjb25maWcoa2NvbmYpDQogICAgKw0KICAgICsgICAgICAgICAgICBjb250aW51ZQ0KICAg
ICsNCiAgICArICAgICAgICBwcmludCgiTm8gc3ltYm9sL2Nob2ljZSBuYW1lZCAne30nIGluIHRo
ZSBjb25maWd1cmF0aW9uIi5mb3JtYXQoY21kKSwNCiAgICArICAgICAgICAgICAgICBmaWxlPXN5
cy5zdGRlcnIpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9t
ZXJnZV9jb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvbWVyZ2VfY29uZmln
LnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA3NTUNCiAgICBpbmRleCAwMDAwMDAwLi5lZjExZDc5
DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxl
cy9tZXJnZV9jb25maWcucHkNCiAgICBAQCAtMCwwICsxLDEzMyBAQA0KICAgICsjIS91c3IvYmlu
L2VudiBweXRob24NCiAgICArDQogICAgKyMgVGhpcyBzY3JpcHQgZnVuY3Rpb25zIHNpbWlsYXJs
eSB0byBzY3JpcHRzL2tjb25maWcvbWVyZ2VfY29uZmlnLnNoIGZyb20gdGhlDQogICAgKyMga2Vy
bmVsIHRyZWUsIG1lcmdpbmcgbXVsdGlwbGUgY29uZmlndXJhdGlvbnMgZnJhZ21lbnRzIHRvIHBy
b2R1Y2UgYSBjb21wbGV0ZQ0KICAgICsjIC5jb25maWcsIHdpdGggdW5zcGVjaWZpZWQgdmFsdWVz
IGZpbGxlZCBpbiBhcyBmb3IgYWxsZGVmY29uZmlnLg0KICAgICsjDQogICAgKyMgVGhlIGdlbmVy
YXRlZCAuY29uZmlnIHJlc3BlY3RzIHN5bWJvbCBkZXBlbmRlbmNpZXMsIGFuZCBhIHdhcm5pbmcg
aXMgcHJpbnRlZA0KICAgICsjIGlmIGFueSBzeW1ib2wgZ2V0cyBhIGRpZmZlcmVudCB2YWx1ZSBm
cm9tIHRoZSBhc3NpZ25lZCB2YWx1ZS4NCiAgICArIw0KICAgICsjIEZvciBhIHJlYWwtd29ybGQg
bWVyZ2luZyBleGFtcGxlIGJhc2VkIG9uIHRoaXMgc2NyaXB0LCBzZWUNCiAgICArIyBodHRwczov
L2dpdGh1Yi5jb20vemVwaHlycHJvamVjdC1ydG9zL3plcGh5ci9ibG9iL21hc3Rlci9zY3JpcHRz
L2tjb25maWcva2NvbmZpZy5weS4NCiAgICArIw0KICAgICsjIEhlcmUncyBhIGRlbW86DQogICAg
KyMNCiAgICArIyBLY29uZmlnIGNvbnRlbnRzOg0KICAgICsjDQogICAgKyMgICAgIGNvbmZpZyBG
T08NCiAgICArIyAgICAgICAgIGJvb2wgIkZPTyINCiAgICArIw0KICAgICsjICAgICBjb25maWcg
QkFSDQogICAgKyMgICAgICAgICBib29sICJCQVIiDQogICAgKyMNCiAgICArIyAgICAgY29uZmln
IEJBWg0KICAgICsjICAgICAgICAgc3RyaW5nICJCQVoiDQogICAgKyMNCiAgICArIyAgICAgY29u
ZmlnIFFBWg0KICAgICsjICAgICAgICAgYm9vbCAiUUFaIiBpZiBuDQogICAgKyMNCiAgICArIw0K
ICAgICsjIGNvbmYxIGNvbnRlbnRzOg0KICAgICsjDQogICAgKyMgICAgIENPTkZJR19GT089eQ0K
ICAgICsjDQogICAgKyMNCiAgICArIyBjb25mMiBjb250ZW50czoNCiAgICArIw0KICAgICsjICAg
ICBDT05GSUdfQkFSPXkNCiAgICArIw0KICAgICsjDQogICAgKyMgY29uZjMgY29udGVudHM6DQog
ICAgKyMNCiAgICArIyAgICAgIyBBc3NpZ25lZCB0d2ljZSAod291bGQgZ2VuZXJhdGUgd2Fybmlu
ZyBpZiAnd2Fybl9hc3NpZ25fb3ZlcnJpZGUnIHdhcw0KICAgICsjICAgICAjIFRydWUpDQogICAg
KyMgICAgICMgQ09ORklHX0ZPTyBpcyBub3Qgc2V0DQogICAgKyMNCiAgICArIyAgICAgIyBPcHMu
Li4gdGhpcyBzeW1ib2wgZG9lc24ndCBleGlzdA0KICAgICsjICAgICBDT05GSUdfT1BTPXkNCiAg
ICArIw0KICAgICsjICAgICBDT05GSUdfQkFaPSJiYXogc3RyaW5nIg0KICAgICsjDQogICAgKyMN
CiAgICArIyBjb25mNCBjb250ZW50czoNCiAgICArIw0KICAgICsjICAgICBDT05GSUdfUUFaPXkN
CiAgICArIw0KICAgICsjDQogICAgKyMgUnVubmluZzoNCiAgICArIw0KICAgICsjICAgICAkIHB5
dGhvbigzKSBtZXJnZV9jb25maWcucHkgS2NvbmZpZyBtZXJnZWQgY29uZjEgY29uZjIgY29uZjMg
Y29uZjQNCiAgICArIyAgICAgTWVyZ2VkIGNvbmZpZ3VyYXRpb24gJ2NvbmYxJw0KICAgICsjICAg
ICBNZXJnZWQgY29uZmlndXJhdGlvbiAnY29uZjInDQogICAgKyMgICAgIGNvbmYzOjU6IHdhcm5p
bmc6IGF0dGVtcHQgdG8gYXNzaWduIHRoZSB2YWx1ZSAneScgdG8gdGhlIHVuZGVmaW5lZCBzeW1i
b2wgT1BTDQogICAgKyMgICAgIE1lcmdlZCBjb25maWd1cmF0aW9uICdjb25mMycNCiAgICArIyAg
ICAgTWVyZ2VkIGNvbmZpZ3VyYXRpb24gJ2NvbmY0Jw0KICAgICsjICAgICBDb25maWd1cmF0aW9u
IHNhdmVkIHRvICdtZXJnZWQnDQogICAgKyMgICAgIHdhcm5pbmc6IFFBWiAoZGVmaW5lZCBhdCBL
Y29uZmlnOjEwKSB3YXMgYXNzaWduZWQgdGhlIHZhbHVlICd5JyBidXQgZ290IHRoZSB2YWx1ZSAn
bicgLS0gY2hlY2sgZGVwZW5kZW5jaWVzDQogICAgKyMgICAgICQgY2F0IG1lcmdlZA0KICAgICsj
ICAgICBHZW5lcmF0ZWQgYnkgS2NvbmZpZ2xpYiAoaHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXpl
ci9LY29uZmlnbGliKQ0KICAgICsjICAgICAjIENPTkZJR19GT08gaXMgbm90IHNldA0KICAgICsj
ICAgICBDT05GSUdfQkFSPXkNCiAgICArIyAgICAgQ09ORklHX0JBWj0iYmF6IHN0cmluZyINCiAg
ICArDQogICAgK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24NCiAgICAraW1w
b3J0IHN5cw0KICAgICsNCiAgICArZnJvbSBrY29uZmlnbGliIGltcG9ydCBLY29uZmlnLCBCT09M
LCBUUklTVEFURSwgVFJJX1RPX1NUUg0KICAgICsNCiAgICArDQogICAgK2lmIGxlbihzeXMuYXJn
dikgPCA0Og0KICAgICsgICAgc3lzLmV4aXQoInVzYWdlOiBtZXJnZV9jb25maWcucHkgS2NvbmZp
ZyBtZXJnZWRfY29uZmlnIGNvbmZpZzEgW2NvbmZpZzIgLi4uXSIpDQogICAgKw0KICAgICtrY29u
ZiA9IEtjb25maWcoc3lzLmFyZ3ZbMV0pDQogICAgKw0KICAgICsjIEVuYWJsZSB3YXJuaW5ncyBm
b3IgYXNzaWdubWVudHMgdG8gdW5kZWZpbmVkIHN5bWJvbHMNCiAgICAra2NvbmYud2Fybl9hc3Np
Z25fdW5kZWYgPSBUcnVlDQogICAgKw0KICAgICsjIChUaGlzIHNjcmlwdCB1c2VzIGFsbGRlZmNv
bmZpZyBhcyB0aGUgYmFzZS4gT3RoZXIgc3RhcnRpbmcgc3RhdGVzIGNvdWxkIGJlDQogICAgKyMg
c2V0IHVwIGhlcmUgYXMgd2VsbC4gVGhlIGFwcHJvYWNoIGluIGV4YW1wbGVzL2FsbG5vY29uZmln
X3NpbXBsZXIucHkgY291bGQNCiAgICArIyBwcm92aWRlIGFuIGFsbG5vY29uZmlnIHN0YXJ0aW5n
IHN0YXRlIGZvciBleGFtcGxlLikNCiAgICArDQogICAgKyMgRGlzYWJsZSB3YXJuaW5ncyBnZW5l
cmF0ZWQgZm9yIG11bHRpcGxlIGFzc2lnbm1lbnRzIHRvIHRoZSBzYW1lIHN5bWJvbCB3aXRoaW4N
CiAgICArIyBhIChzZXQgb2YpIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEFzc2lnbmluZyBhIHN5bWJv
bCBtdWx0aXBsZSB0aW1lcyBtaWdodCBiZQ0KICAgICsjIGRvbmUgaW50ZW50aW9uYWxseSB3aGVu
IG1lcmdpbmcgY29uZmlndXJhdGlvbiBmaWxlcy4NCiAgICAra2NvbmYud2Fybl9hc3NpZ25fb3Zl
cnJpZGUgPSBGYWxzZQ0KICAgICtrY29uZi53YXJuX2Fzc2lnbl9yZWR1biA9IEZhbHNlDQogICAg
Kw0KICAgICsjIENyZWF0ZSBhIG1lcmdlZCBjb25maWd1cmF0aW9uIGJ5IGxvYWRpbmcgdGhlIGZy
YWdtZW50cyB3aXRoIHJlcGxhY2U9RmFsc2UuDQogICAgKyMgbG9hZF9jb25maWcoKSBhbmQgd3Jp
dGVfY29uZmlnKCkgcmV0dXJucyBhIG1lc3NhZ2UgdG8gcHJpbnQuDQogICAgK2ZvciBjb25maWcg
aW4gc3lzLmFyZ3ZbMzpdOg0KICAgICsgICAgcHJpbnQoa2NvbmYubG9hZF9jb25maWcoY29uZmln
LCByZXBsYWNlPUZhbHNlKSkNCiAgICArDQogICAgKyMgV3JpdGUgdGhlIG1lcmdlZCBjb25maWd1
cmF0aW9uDQogICAgK3ByaW50KGtjb25mLndyaXRlX2NvbmZpZyhzeXMuYXJndlsyXSkpDQogICAg
Kw0KICAgICsjIFByaW50IHdhcm5pbmdzIGZvciBzeW1ib2xzIHdob3NlIGFjdHVhbCB2YWx1ZSBk
b2Vzbid0IG1hdGNoIHRoZSBhc3NpZ25lZA0KICAgICsjIHZhbHVlDQogICAgKw0KICAgICtkZWYg
bmFtZV9hbmRfbG9jKHN5bSk6DQogICAgKyAgICAjIEhlbHBlciBmb3IgcHJpbnRpbmcgc3ltYm9s
IG5hbWVzIGFuZCBLY29uZmlnIGZpbGUgbG9jYXRpb24ocykgaW4gd2FybmluZ3MNCiAgICArDQog
ICAgKyAgICBpZiBub3Qgc3ltLm5vZGVzOg0KICAgICsgICAgICAgIHJldHVybiBzeW0ubmFtZSAr
ICIgKHVuZGVmaW5lZCkiDQogICAgKw0KICAgICsgICAgcmV0dXJuICJ7fSAoZGVmaW5lZCBhdCB7
fSkiLmZvcm1hdCgNCiAgICArICAgICAgICBzeW0ubmFtZSwNCiAgICArICAgICAgICAiLCAiLmpv
aW4oInt9Ont9Ii5mb3JtYXQobm9kZS5maWxlbmFtZSwgbm9kZS5saW5lbnIpDQogICAgKyAgICAg
ICAgICAgICAgICAgIGZvciBub2RlIGluIHN5bS5ub2RlcykpDQogICAgKw0KICAgICtmb3Igc3lt
IGluIGtjb25mLmRlZmluZWRfc3ltczoNCiAgICArICAgICMgV2FzIHRoZSBzeW1ib2wgYXNzaWdu
ZWQgdG8/DQogICAgKyAgICBpZiBzeW0udXNlcl92YWx1ZSBpcyBub3QgTm9uZToNCiAgICArICAg
ICAgICAjIFRyaXN0YXRlIHZhbHVlcyBhcmUgcmVwcmVzZW50ZWQgYXMgMCwgMSwgMi4gSGF2aW5n
IHRoZW0gYXMNCiAgICArICAgICAgICAjICJuIiwgIm0iLCAieSIgaXMgbW9yZSBjb252ZW5pZW50
IGhlcmUsIHNvIGNvbnZlcnQuDQogICAgKyAgICAgICAgaWYgc3ltLnR5cGUgaW4gKEJPT0wsIFRS
SVNUQVRFKToNCiAgICArICAgICAgICAgICAgdXNlcl92YWx1ZSA9IFRSSV9UT19TVFJbc3ltLnVz
ZXJfdmFsdWVdDQogICAgKyAgICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgdXNlcl92YWx1
ZSA9IHN5bS51c2VyX3ZhbHVlDQogICAgKw0KICAgICsgICAgICAgIGlmIHVzZXJfdmFsdWUgIT0g
c3ltLnN0cl92YWx1ZToNCiAgICArICAgICAgICAgICAgcHJpbnQoIndhcm5pbmc6IHt9IHdhcyBh
c3NpZ25lZCB0aGUgdmFsdWUgJ3t9JyBidXQgZ290IHRoZSAiDQogICAgKyAgICAgICAgICAgICAg
ICAgICJ2YWx1ZSAne30nIC0tIGNoZWNrIGRlcGVuZGVuY2llcyIuZm9ybWF0KA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgbmFtZV9hbmRfbG9jKHN5bSksIHVzZXJfdmFsdWUsIHN5bS5zdHJf
dmFsdWUpLA0KICAgICsgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpDQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9wcmludF9jb25maWdfdHJlZS5w
eSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9wcmludF9jb25maWdfdHJlZS5weQ0KICAg
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZGM4MWQ5ZA0KICAgIC0t
LSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRf
Y29uZmlnX3RyZWUucHkNCiAgICBAQCAtMCwwICsxLDE5OSBAQA0KICAgICsjIFByaW50cyBtZW51
IGVudHJpZXMgYXMgYSB0cmVlIHdpdGggaXRzIHZhbHVlIGluIHRoZSAuY29uZmlnIGZpbGUuIFRo
aXMgY2FuIGJlDQogICAgKyMgaGFuZHkgZS5nLiBmb3IgZGlmZmluZyBiZXR3ZWVuIGRpZmZlcmVu
dCAuY29uZmlnIGZpbGVzIG9yIHZlcnNpb25zIG9mIEtjb25maWcgZmlsZXMuDQogICAgKyMNCiAg
ICArIyBVc2FnZToNCiAgICArIw0KICAgICsjICAgJCBtYWtlIFtBUkNIPTxhcmNoPl0gc2NyaXB0
Y29uZmlnIFNDUklQVD1wcmludF9jb25maWdfdHJlZS5weSBbU0NSSVBUX0FSRz08LmNvbmZpZz5d
DQogICAgKyMNCiAgICArIyAgIElmIHRoZSB2YXJpYWJsZSBXSVRIX0hFTFBfREVTQyBpcyBtb2Rp
ZmllZCB0byAnVHJ1ZScsIHRoZSBoZWxwIGlzIGFkZGVkDQogICAgKyMgICB0byB0aGUgc3ltYm9s
cy4NCiAgICArIw0KICAgICsjIEhlcmUncyBhIG5vdGF0aW9uIGd1aWRlLiBUaGUgbm90YXRpb24g
bWF0Y2hlcyB0aGUgb25lIHVzZWQgYnkgbWVudWNvbmZpZw0KICAgICsjIChzY3JpcHRzL2tjb25m
aWcvbWNvbmYpOg0KICAgICsjDQogICAgKyMgICBbIF0gcHJvbXB0ICAgICAgLSBCb29sDQogICAg
KyMgICA8ID4gcHJvbXB0ICAgICAgLSBUcmlzdGF0ZQ0KICAgICsjICAge019IHByb21wdCAgICAg
IC0gVHJpc3RhdGUgc2VsZWN0ZWQgdG8gbS4gQ2FuIG9ubHkgYmUgc2V0IHRvIG0gb3IgeS4NCiAg
ICArIyAgIC0qLSBwcm9tcHQgICAgICAtIEJvb2wvdHJpc3RhdGUgc2VsZWN0ZWQgdG8geSwgcGlu
bmluZyBpdA0KICAgICsjICAgLU0tIHByb21wdCAgICAgIC0gVHJpc3RhdGUgc2VsZWN0ZWQgdG8g
bSB0aGF0IGFsc28gaGFzIG0gdmlzaWJpbGl0eSwNCiAgICArIyAgICAgICAgICAgICAgICAgICAg
IHBpbm5pbmcgaXQgdG8gbQ0KICAgICsjICAgKGZvbykgcHJvbXB0ICAgIC0gU3RyaW5nL2ludC9o
ZXggc3ltYm9sIHdpdGggdmFsdWUgImZvbyINCiAgICArIyAgIC0tPiBwcm9tcHQgICAgICAtIFRo
ZSBzZWxlY3RlZCBzeW1ib2wgaW4gYSBjaG9pY2UgaW4geSBtb2RlLiBUaGlzDQogICAgKyMgICAg
ICAgICAgICAgICAgICAgICBzeW50YXggaXMgdW5pcXVlIHRvIHRoaXMgZXhhbXBsZS4NCiAgICAr
Iw0KICAgICsjIFdoZW4gbW9kdWxlcyBhcmUgZGlzYWJsZWQsIHRoZSAudHlwZSBhdHRyaWJ1dGUg
b2YgVFJJU1RBVEUgc3ltYm9scyBhbmQNCiAgICArIyBjaG9pY2VzIGF1dG9tYXRpY2FsbHkgY2hh
bmdlcyB0byBCT09MLiBUaGlzIHRyaWNrIGlzIHVzZWQgYnkgdGhlIEMNCiAgICArIyBpbXBsZW1l
bnRhdGlvbiBhcyB3ZWxsLCBhbmQgZ2l2ZXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHdpdGhvdXQg
aGF2aW5nIHRvIGRvDQogICAgKyMgYW55dGhpbmcgZXh0cmEgaGVyZS4gVGhlIG9yaWdpbmFsIHR5
cGUgaXMgYXZhaWxhYmxlIGluIC5vcmlnX3R5cGUgaWYgbmVlZGVkLg0KICAgICsjDQogICAgKyMg
RXhhbXBsZSBvdXRwdXQ6DQogICAgKyMNCiAgICArIyAgICQgbWFrZSBzY3JpcHRjb25maWcgU0NS
SVBUPUtjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfY29uZmlnX3RyZWUucHkgW1NDUklQVF9BUkc9
PC5jb25maWcgZmlsZT5dDQogICAgKyMNCiAgICArIyAgID09PT09PT09IExpbnV4L3g4NiA0Ljku
ODIgS2VybmVsIENvbmZpZ3VyYXRpb24gPT09PT09PT0NCiAgICArIw0KICAgICsjICAgWypdIDY0
LWJpdCBrZXJuZWwgKDY0QklUKQ0KICAgICsjICAgICAgIEdlbmVyYWwgc2V0dXANCiAgICArIyAg
ICAgICAgICAoKSAgQ3Jvc3MtY29tcGlsZXIgdG9vbCBwcmVmaXggKENST1NTX0NPTVBJTEUpDQog
ICAgKyMgICAgICAgICAgWyBdIENvbXBpbGUgYWxzbyBkcml2ZXJzIHdoaWNoIHdpbGwgbm90IGxv
YWQgKENPTVBJTEVfVEVTVCkNCiAgICArIyAgICAgICAgICAoKSAgTG9jYWwgdmVyc2lvbiAtIGFw
cGVuZCB0byBrZXJuZWwgcmVsZWFzZSAoTE9DQUxWRVJTSU9OKQ0KICAgICsjICAgICAgICAgIFsq
XSBBdXRvbWF0aWNhbGx5IGFwcGVuZCB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIHRoZSB2ZXJzaW9u
IHN0cmluZyAoTE9DQUxWRVJTSU9OX0FVVE8pDQogICAgKyMgICAgICAgICAgLSotIEtlcm5lbCBj
b21wcmVzc2lvbiBtb2RlDQogICAgKyMgICAgICAgICAgLi4uDQogICAgKyMNCiAgICArIyBXaXRo
IHRoZSB2YXJpYWJsZSBXSVRIX0hFTFBfREVTQyBtb2RpZmllZCB0byAnVHJ1ZSc6DQogICAgKyMN
CiAgICArIyAgID09PT09PT09IExpbnV4L3g4NiA0LjkuODIgS2VybmVsIENvbmZpZ3VyYXRpb24g
PT09PT09PT0NCiAgICArIw0KICAgICsjICAgWypdIDY0LWJpdCBrZXJuZWwgLSBTYXkgeWVzIHRv
IGJ1aWxkIGEgNjQtYml0IGtlcm5lbCAtIGZvcm1lcmx5IGtub3duIGFzIHg4Nl82NCBTYXkgbm8g
dG8gYnVpbGQgYSAzMi1iaXQga2VybmVsIC0gZm9ybWVybHkga25vd24gYXMgaTM4NiAgKDY0QklU
KQ0KICAgICsjICAgICAgIEdlbmVyYWwgc2V0dXANCiAgICArIyAgICAgICAgICAgKCkgIENyb3Nz
LWNvbXBpbGVyIHRvb2wgcHJlZml4IC0gU2FtZSBhcyBydW5uaW5nICdtYWtlIENST1NTX0NPTVBJ
TEU9cHJlZml4LScgYnV0IHN0b3JlZCBmb3IgZGVmYXVsdCBtYWtlIHJ1bnMgaW4gdGhpcyBrZXJu
ZWwgYnVpbGQgZGlyZWN0b3J5LiAgWW91IGRvbid0IG5lZWQgdG8gc2V0IHRoaXMgdW5sZXNzIHlv
dSB3YW50IHRoZSBjb25maWd1cmVkIGtlcm5lbCBidWlsZCBkaXJlY3RvcnkgdG8gc2VsZWN0IHRo
ZSBjcm9zcy1jb21waWxlciBhdXRvbWF0aWNhbGx5LiAgKENST1NTX0NPTVBJTEUpDQogICAgKyMg
ICAgICAgICAgIFsgXSBDb21waWxlIGFsc28gZHJpdmVycyB3aGljaCB3aWxsIG5vdCBsb2FkIC0g
U29tZSBkcml2ZXJzIGNhbiBiZSBjb21waWxlZCBvbiBhIGRpZmZlcmVudCBwbGF0Zm9ybSB0aGFu
IHRoZXkgYXJlIGludGVuZGVkIHRvIGJlIHJ1biBvbi4gRGVzcGl0ZSB0aGV5IGNhbm5vdCBiZSBs
b2FkZWQgdGhlcmUgKG9yIGV2ZW4gd2hlbiB0aGV5IGxvYWQgdGhleSBjYW5ub3QgYmUgdXNlZCBk
dWUgdG8gbWlzc2luZyBIVyBzdXBwb3J0KSwgZGV2ZWxvcGVycyBzdGlsbCwgb3Bwb3NpbmcgdG8g
ZGlzdHJpYnV0b3JzLCBtaWdodCB3YW50IHRvIGJ1aWxkIHN1Y2ggZHJpdmVycyB0byBjb21waWxl
LXRlc3QgdGhlbS4gIElmIHlvdSBhcmUgYSBkZXZlbG9wZXIgYW5kIHdhbnQgdG8gYnVpbGQgZXZl
cnl0aGluZyBhdmFpbGFibGUsIHNheSBZIGhlcmUuIElmIHlvdSBhcmUgYSB1c2VyL2Rpc3RyaWJ1
dG9yLCBzYXkgTiBoZXJlIHRvIGV4Y2x1ZGUgdXNlbGVzcyBkcml2ZXJzIHRvIGJlIGRpc3RyaWJ1
dGVkLiAgKENPTVBJTEVfVEVTVCkNCiAgICArIyAgICAgICAgICAgLi4uDQogICAgKw0KICAgICtp
bXBvcnQgc3lzDQogICAgKw0KICAgICtmcm9tIGtjb25maWdsaWIgaW1wb3J0IEtjb25maWcsIFwN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICBTeW1ib2wsIE1FTlUsIENPTU1FTlQsIFwNCiAg
ICArICAgICAgICAgICAgICAgICAgICAgICBCT09MLCBUUklTVEFURSwgU1RSSU5HLCBJTlQsIEhF
WCwgVU5LTk9XTiwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdmFsdWUNCiAg
ICArDQogICAgKw0KICAgICsjIEFkZCBoZWxwIGRlc2NyaXB0aW9uIHRvIG91dHB1dA0KICAgICtX
SVRIX0hFTFBfREVTQyA9IEZhbHNlDQogICAgKw0KICAgICsNCiAgICArZGVmIGluZGVudF9wcmlu
dChzLCBpbmRlbnQpOg0KICAgICsgICAgcHJpbnQoaW5kZW50KiIgIiArIHMpDQogICAgKw0KICAg
ICsNCiAgICArZGVmIHZhbHVlX3N0cihzYyk6DQogICAgKyAgICAiIiINCiAgICArICAgIFJldHVy
bnMgdGhlIHZhbHVlIHBhcnQgKCJbKl0iLCAiPE0+IiwgIihmb28pIiBldGMuKSBvZiBhIG1lbnUg
ZW50cnkuDQogICAgKw0KICAgICsgICAgc2M6IFN5bWJvbCBvciBDaG9pY2UuDQogICAgKyAgICAi
IiINCiAgICArICAgIGlmIHNjLnR5cGUgaW4gKFNUUklORywgSU5ULCBIRVgpOg0KICAgICsgICAg
ICAgIHJldHVybiAiKHt9KSIuZm9ybWF0KHNjLnN0cl92YWx1ZSkNCiAgICArDQogICAgKyAgICAj
IEJPT0wgb3IgVFJJU1RBVEUNCiAgICArDQogICAgKyAgICAjIFRoZSBjaG9pY2UgbW9kZSBpcyBh
biB1cHBlciBib3VuZCBvbiB0aGUgdmlzaWJpbGl0eSBvZiBjaG9pY2Ugc3ltYm9scywgc28NCiAg
ICArICAgICMgd2UgY2FuIGNoZWNrIHRoZSBjaG9pY2Ugc3ltYm9scycgb3duIHZpc2liaWxpdHkg
dG8gc2VlIGlmIHRoZSBjaG9pY2UgaXMNCiAgICArICAgICMgaW4geSBtb2RlDQogICAgKyAgICBp
ZiBpc2luc3RhbmNlKHNjLCBTeW1ib2wpIGFuZCBzYy5jaG9pY2UgYW5kIHNjLnZpc2liaWxpdHkg
PT0gMjoNCiAgICArICAgICAgICAjIEZvciBjaG9pY2VzIGluIHkgbW9kZSwgcHJpbnQgJy0tPicg
bmV4dCB0byB0aGUgc2VsZWN0ZWQgc3ltYm9sDQogICAgKyAgICAgICAgcmV0dXJuICItLT4iIGlm
IHNjLmNob2ljZS5zZWxlY3Rpb24gaXMgc2MgZWxzZSAiICAgIg0KICAgICsNCiAgICArICAgIHRy
aV92YWxfc3RyID0gKCIgIiwgIk0iLCAiKiIpW3NjLnRyaV92YWx1ZV0NCiAgICArDQogICAgKyAg
ICBpZiBsZW4oc2MuYXNzaWduYWJsZSkgPT0gMToNCiAgICArICAgICAgICAjIFBpbm5lZCB0byBh
IHNpbmdsZSB2YWx1ZQ0KICAgICsgICAgICAgIHJldHVybiAiLXt9LSIuZm9ybWF0KHRyaV92YWxf
c3RyKQ0KICAgICsNCiAgICArICAgIGlmIHNjLnR5cGUgPT0gQk9PTDoNCiAgICArICAgICAgICBy
ZXR1cm4gIlt7fV0iLmZvcm1hdCh0cmlfdmFsX3N0cikNCiAgICArDQogICAgKyAgICBpZiBzYy50
eXBlID09IFRSSVNUQVRFOg0KICAgICsgICAgICAgIGlmIHNjLmFzc2lnbmFibGUgPT0gKDEsIDIp
Og0KICAgICsgICAgICAgICAgICAjIG0gYW5kIHkgYXZhaWxhYmxlDQogICAgKyAgICAgICAgICAg
IHJldHVybiAieyIgKyB0cmlfdmFsX3N0ciArICJ9IiAgIyBHZXRzIGEgYml0IGNvbmZ1c2luZyB3
aXRoIC5mb3JtYXQoKQ0KICAgICsgICAgICAgIHJldHVybiAiPHt9PiIuZm9ybWF0KHRyaV92YWxf
c3RyKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBub2RlX3N0cihub2RlKToNCiAgICArICAgICIi
Ig0KICAgICsgICAgUmV0dXJucyB0aGUgY29tcGxldGUgbWVudSBlbnRyeSB0ZXh0IGZvciBhIG1l
bnUgbm9kZSwgb3IgIiIgZm9yIGludmlzaWJsZQ0KICAgICsgICAgbWVudSBub2Rlcy4gSW52aXNp
YmxlIG1lbnUgbm9kZXMgYXJlIHRob3NlIHRoYXQgbGFjayBhIHByb21wdCBvciB0aGF0IGRvDQog
ICAgKyAgICBub3QgaGF2ZSBhIHNhdGlzZmllZCBwcm9tcHQgY29uZGl0aW9uLg0KICAgICsNCiAg
ICArICAgIEV4YW1wbGUgcmV0dXJuIHZhbHVlOiAiWypdIEJvb2wgc3ltYm9sIChCT09MKSINCiAg
ICArDQogICAgKyAgICBUaGUgc3ltYm9sIG5hbWUgaXMgcHJpbnRlZCBpbiBwYXJlbnRoZXNlcyB0
byB0aGUgcmlnaHQgb2YgdGhlIHByb21wdC4NCiAgICArICAgICIiIg0KICAgICsgICAgaWYgbm90
IG5vZGUucHJvbXB0Og0KICAgICsgICAgICAgIHJldHVybiAiIg0KICAgICsNCiAgICArICAgICMg
RXZlbiBmb3IgbWVudSBub2RlcyBmb3Igc3ltYm9scyBhbmQgY2hvaWNlcywgaXQncyB3cm9uZyB0
byBjaGVjaw0KICAgICsgICAgIyBTeW1ib2wudmlzaWJpbGl0eSAvIENob2ljZS52aXNpYmlsaXR5
IGhlcmUuIFRoZSByZWFzb24gaXMgdGhhdCBhIHN5bWJvbA0KICAgICsgICAgIyAoYW5kIGEgY2hv
aWNlLCBpbiB0aGVvcnkpIGNhbiBiZSBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucywgZ2l2
aW5nIGl0DQogICAgKyAgICAjIG11bHRpcGxlIG1lbnUgbm9kZXMsIHdoaWNoIGRvIG5vdCBuZWNl
c3NhcmlseSBhbGwgaGF2ZSB0aGUgc2FtZSBwcm9tcHQNCiAgICArICAgICMgdmlzaWJpbGl0eS4g
U3ltYm9sLnZpc2liaWxpdHkgLyBDaG9pY2UudmlzaWJpbGl0eSBpcyBjYWxjdWxhdGVkIGFzIHRo
ZSBPUg0KICAgICsgICAgIyBvZiB0aGUgdmlzaWJpbGl0eSBvZiBhbGwgdGhlIHByb21wdHMuDQog
ICAgKyAgICBwcm9tcHQsIHByb21wdF9jb25kID0gbm9kZS5wcm9tcHQNCiAgICArICAgIGlmIG5v
dCBleHByX3ZhbHVlKHByb21wdF9jb25kKToNCiAgICArICAgICAgICByZXR1cm4gIiINCiAgICAr
DQogICAgKyAgICBpZiBub2RlLml0ZW0gPT0gTUVOVToNCiAgICArICAgICAgICByZXR1cm4gIiAg
ICAiICsgcHJvbXB0DQogICAgKw0KICAgICsgICAgaWYgbm9kZS5pdGVtID09IENPTU1FTlQ6DQog
ICAgKyAgICAgICAgcmV0dXJuICIgICAgKioqIHt9ICoqKiIuZm9ybWF0KHByb21wdCkNCiAgICAr
DQogICAgKyAgICAjIFN5bWJvbCBvciBDaG9pY2UNCiAgICArDQogICAgKyAgICBzYyA9IG5vZGUu
aXRlbQ0KICAgICsNCiAgICArICAgIGlmIHNjLnR5cGUgPT0gVU5LTk9XTjoNCiAgICArICAgICAg
ICAjIFNraXAgc3ltYm9scyBkZWZpbmVkIHdpdGhvdXQgYSB0eXBlICh0aGVzZSBhcmUgb2JzY3Vy
ZSBhbmQgZ2VuZXJhdGUNCiAgICArICAgICAgICAjIGEgd2FybmluZykNCiAgICArICAgICAgICBy
ZXR1cm4gIiINCiAgICArDQogICAgKyAgICAjIEFkZCBoZWxwIHRleHQNCiAgICArICAgIGlmIFdJ
VEhfSEVMUF9ERVNDOg0KICAgICsgICAgICAgIHByb21wdCArPSAnIC0gJyArIHN0cihub2RlLmhl
bHApLnJlcGxhY2UoJ1xuJywgJyAnKS5yZXBsYWNlKCdccicsICcnKQ0KICAgICsNCiAgICArICAg
ICMgezozfSBzZXRzIHRoZSBmaWVsZCB3aWR0aCB0byB0aHJlZS4gR2l2ZXMgbmljZSBhbGlnbm1l
bnQgZm9yIGVtcHR5IHN0cmluZw0KICAgICsgICAgIyB2YWx1ZXMuDQogICAgKyAgICByZXMgPSAi
ezozfSB7fSIuZm9ybWF0KHZhbHVlX3N0cihzYyksIHByb21wdCkNCiAgICArDQogICAgKyAgICAj
IERvbid0IHByaW50IHRoZSBuYW1lIGZvciB1bm5hbWVkIGNob2ljZXMgKHRoZSBub3JtYWwga2lu
ZCkNCiAgICArICAgIGlmIHNjLm5hbWUgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgcmVzICs9
ICIgKHt9KSIuZm9ybWF0KHNjLm5hbWUpDQogICAgKw0KICAgICsgICAgcmV0dXJuIHJlcw0KICAg
ICsNCiAgICArDQogICAgK2RlZiBwcmludF9tZW51Y29uZmlnX25vZGVzKG5vZGUsIGluZGVudCk6
DQogICAgKyAgICAiIiINCiAgICArICAgIFByaW50cyBhIHRyZWUgd2l0aCBhbGwgdGhlIG1lbnUg
ZW50cmllcyByb290ZWQgYXQgJ25vZGUnLiBDaGlsZCBtZW51DQogICAgKyAgICBlbnRyaWVzIGFy
ZSBpbmRlbnRlZC4NCiAgICArICAgICIiIg0KICAgICsgICAgd2hpbGUgbm9kZToNCiAgICArICAg
ICAgICBzdHJpbmcgPSBub2RlX3N0cihub2RlKQ0KICAgICsgICAgICAgIGlmIHN0cmluZzoNCiAg
ICArICAgICAgICAgICAgaW5kZW50X3ByaW50KHN0cmluZywgaW5kZW50KQ0KICAgICsNCiAgICAr
ICAgICAgICBpZiBub2RlLmxpc3Q6DQogICAgKyAgICAgICAgICAgIHByaW50X21lbnVjb25maWdf
bm9kZXMobm9kZS5saXN0LCBpbmRlbnQgKyA4KQ0KICAgICsNCiAgICArICAgICAgICBub2RlID0g
bm9kZS5uZXh0DQogICAgKw0KICAgICsNCiAgICArZGVmIHByaW50X21lbnVjb25maWcoa2NvbmYp
Og0KICAgICsgICAgIiIiDQogICAgKyAgICBQcmludHMgYWxsIG1lbnUgZW50cmllcyBmb3IgdGhl
IGNvbmZpZ3VyYXRpb24uDQogICAgKyAgICAiIiINCiAgICArICAgICMgUHJpbnQgdGhlIGV4cGFu
ZGVkIG1haW5tZW51IHRleHQgYXQgdGhlIHRvcC4gVGhpcyBpcyB0aGUgc2FtZSBhcw0KICAgICsg
ICAgIyBrY29uZi50b3Bfbm9kZS5wcm9tcHRbMF0sIGJ1dCB3aXRoIHZhcmlhYmxlIHJlZmVyZW5j
ZXMgZXhwYW5kZWQuDQogICAgKyAgICBwcmludCgiXG49PT09PT09PSB7fSA9PT09PT09PVxuIi5m
b3JtYXQoa2NvbmYubWFpbm1lbnVfdGV4dCkpDQogICAgKw0KICAgICsgICAgcHJpbnRfbWVudWNv
bmZpZ19ub2RlcyhrY29uZi50b3Bfbm9kZS5saXN0LCAwKQ0KICAgICsgICAgcHJpbnQoIiIpDQog
ICAgKw0KICAgICsNCiAgICAraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoNCiAgICArDQogICAg
KyAgICAjIExvYWQgS2NvbmZpZyBjb25maWd1cmF0aW9uIGZpbGVzDQogICAgKyAgICBrY29uZiA9
IEtjb25maWcoc3lzLmFyZ3ZbMV0pDQogICAgKw0KICAgICsgICAgIyBTZXQgZGVmYXVsdCAuY29u
ZmlnIGZpbGUgb3IgbG9hZCBpdCBmcm9tIGFyZ3YNCiAgICArICAgIGlmIGxlbihzeXMuYXJndikg
PT0gMjoNCiAgICArICAgICAgICBjb25maWdfZmlsZW5hbWUgPSAnLmNvbmZpZycNCiAgICArICAg
IGVsc2U6DQogICAgKyAgICAgICAgY29uZmlnX2ZpbGVuYW1lID0gc3lzLmFyZ3ZbMl0NCiAgICAr
DQogICAgKyAgICBrY29uZi5sb2FkX2NvbmZpZyhjb25maWdfZmlsZW5hbWUpDQogICAgKw0KICAg
ICsgICAgIyBQcmludCB0aGUgY29uZmlndXJhdGlvbiB0cmVlDQogICAgKyAgICBwcmludF9tZW51
Y29uZmlnKGtjb25mKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBs
ZXMvcHJpbnRfc3ltX2luZm8ucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRf
c3ltX2luZm8ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAu
LmVhNmZjNzINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGli
L2V4YW1wbGVzL3ByaW50X3N5bV9pbmZvLnB5DQogICAgQEAgLTAsMCArMSw1NCBAQA0KICAgICsj
IExvYWRzIGEgS2NvbmZpZyBhbmQgYSAuY29uZmlnIGFuZCBwcmludHMgYSBzeW1ib2wuDQogICAg
KyMNCiAgICArIyBVc2FnZToNCiAgICArIw0KICAgICsjICAgJCBtYWtlIFtBUkNIPTxhcmNoPl0g
c2NyaXB0Y29uZmlnIFNDUklQVD1LY29uZmlnbGliL2V4YW1wbGVzL3ByaW50X3N5bV9pbmZvLnB5
IFNDUklQVF9BUkc9PG5hbWU+DQogICAgKyMNCiAgICArIyBFeGFtcGxlIG91dHB1dCBmb3IgU0NS
SVBUX0FSRz1NT0RVTEVTOg0KICAgICsjDQogICAgKyMgbWVudWNvbmZpZyBNT0RVTEVTDQogICAg
KyMgCWJvb2wNCiAgICArIyAJcHJvbXB0ICJFbmFibGUgbG9hZGFibGUgbW9kdWxlIHN1cHBvcnQi
DQogICAgKyMgCW9wdGlvbiBtb2R1bGVzDQogICAgKyMgCWhlbHANCiAgICArIyAJICBLZXJuZWwg
bW9kdWxlcyBhcmUgc21hbGwgcGllY2VzIG9mIGNvbXBpbGVkIGNvZGUgd2hpY2ggY2FuDQogICAg
KyMgCSAgYmUgaW5zZXJ0ZWQgaW4gdGhlIHJ1bm5pbmcga2VybmVsLCByYXRoZXIgdGhhbiBiZWlu
Zw0KICAgICsjIAkgIHBlcm1hbmVudGx5IGJ1aWx0IGludG8gdGhlIGtlcm5lbC4gIFlvdSB1c2Ug
dGhlICJtb2Rwcm9iZSINCiAgICArIyAJICB0b29sIHRvIGFkZCAoYW5kIHNvbWV0aW1lcyByZW1v
dmUpIHRoZW0uICBJZiB5b3Ugc2F5IFkgaGVyZSwNCiAgICArIyAJICBtYW55IHBhcnRzIG9mIHRo
ZSBrZXJuZWwgY2FuIGJlIGJ1aWx0IGFzIG1vZHVsZXMgKGJ5DQogICAgKyMgCSAgYW5zd2VyaW5n
IE0gaW5zdGVhZCBvZiBZIHdoZXJlIGluZGljYXRlZCk6IHRoaXMgaXMgbW9zdA0KICAgICsjIAkg
IHVzZWZ1bCBmb3IgaW5mcmVxdWVudGx5IHVzZWQgb3B0aW9ucyB3aGljaCBhcmUgbm90IHJlcXVp
cmVkDQogICAgKyMgCSAgZm9yIGJvb3RpbmcuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIHRo
ZSBtYW4gcGFnZXMgZm9yDQogICAgKyMgCSAgbW9kcHJvYmUsIGxzbW9kLCBtb2RpbmZvLCBpbnNt
b2QgYW5kIHJtbW9kLg0KICAgICsjDQogICAgKyMgCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSB3
aWxsIG5lZWQgdG8gcnVuICJtYWtlDQogICAgKyMgCSAgbW9kdWxlc19pbnN0YWxsIiB0byBwdXQg
dGhlIG1vZHVsZXMgdW5kZXIgL2xpYi9tb2R1bGVzLw0KICAgICsjIAkgIHdoZXJlIG1vZHByb2Jl
IGNhbiBmaW5kIHRoZW0gKHlvdSBtYXkgbmVlZCB0byBiZSByb290IHRvIGRvDQogICAgKyMgCSAg
dGhpcykuDQogICAgKyMNCiAgICArIyAJICBJZiB1bnN1cmUsIHNheSBZLg0KICAgICsjDQogICAg
KyMgdmFsdWUgPSBuDQogICAgKyMgdmlzaWJpbGl0eSA9IHkNCiAgICArIyBjdXJyZW50bHkgYXNz
aWduYWJsZSB2YWx1ZXM6IG4sIHkNCiAgICArIyBkZWZpbmVkIGF0IGluaXQvS2NvbmZpZzoxNjc0
DQogICAgKw0KICAgICtpbXBvcnQgc3lzDQogICAgKw0KICAgICtmcm9tIGtjb25maWdsaWIgaW1w
b3J0IEtjb25maWcsIFRSSV9UT19TVFINCiAgICArDQogICAgKw0KICAgICtpZiBsZW4oc3lzLmFy
Z3YpIDwgMzoNCiAgICArICAgIHN5cy5leGl0KCdQYXNzIHN5bWJvbCBuYW1lICh3aXRob3V0ICJD
T05GSUdfIiBwcmVmaXgpIHdpdGggU0NSSVBUX0FSRz08bmFtZT4nKQ0KICAgICsNCiAgICAra2Nv
bmYgPSBLY29uZmlnKHN5cy5hcmd2WzFdKQ0KICAgICtzeW0gPSBrY29uZi5zeW1zW3N5cy5hcmd2
WzJdXQ0KICAgICsNCiAgICArcHJpbnQoc3ltKQ0KICAgICtwcmludCgidmFsdWUgPSAiICsgc3lt
LnN0cl92YWx1ZSkNCiAgICArcHJpbnQoInZpc2liaWxpdHkgPSAiICsgVFJJX1RPX1NUUltzeW0u
dmlzaWJpbGl0eV0pDQogICAgK3ByaW50KCJjdXJyZW50bHkgYXNzaWduYWJsZSB2YWx1ZXM6ICIg
Kw0KICAgICsgICAgICAiLCAiLmpvaW4oW1RSSV9UT19TVFJbdl0gZm9yIHYgaW4gc3ltLmFzc2ln
bmFibGVdKSkNCiAgICArDQogICAgK2ZvciBub2RlIGluIHN5bS5ub2RlczoNCiAgICArICAgIHBy
aW50KCJkZWZpbmVkIGF0IHt9Ont9Ii5mb3JtYXQobm9kZS5maWxlbmFtZSwgbm9kZS5saW5lbnIp
KQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfdHJl
ZS5weSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9wcmludF90cmVlLnB5DQogICAgbmV3
IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40OWNiOTU0DQogICAgLS0tIC9k
ZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi9leGFtcGxlcy9wcmludF90cmVl
LnB5DQogICAgQEAgLTAsMCArMSw3NSBAQA0KICAgICsjIFByaW50cyB0aGUgbWVudSB0cmVlIG9m
IHRoZSBjb25maWd1cmF0aW9uLiBEZXBlbmRlbmNpZXMgYmV0d2VlbiBzeW1ib2xzIGNhbg0KICAg
ICsjIHNvbWV0aW1lcyBpbXBsaWNpdGx5IGFsdGVyIHRoZSBtZW51IHN0cnVjdHVyZSAoc2VlIGtj
b25maWctbGFuZ3VhZ2UudHh0KSwgYW5kDQogICAgKyMgdGhhdCdzIGltcGxlbWVudGVkIHRvby4N
CiAgICArIw0KICAgICsjIE5vdGU6IFNlZSB0aGUgS2NvbmZpZy5ub2RlX2l0ZXIoKSBmdW5jdGlv
biBhcyB3ZWxsLCB3aGljaCBwcm92aWRlcyBhIHNpbXBsZXINCiAgICArIyBpbnRlcmZhY2UgZm9y
IHdhbGtpbmcgdGhlIG1lbnUgdHJlZS4NCiAgICArIw0KICAgICsjIFVzYWdlOg0KICAgICsjDQog
ICAgKyMgICAkIG1ha2UgW0FSQ0g9PGFyY2g+XSBzY3JpcHRjb25maWcgU0NSSVBUPUtjb25maWds
aWIvZXhhbXBsZXMvcHJpbnRfdHJlZS5weQ0KICAgICsjDQogICAgKyMgRXhhbXBsZSBvdXRwdXQ6
DQogICAgKyMNCiAgICArIyAgIC4uLg0KICAgICsjICAgY29uZmlnIEhBVkVfS0VSTkVMX0xaTw0K
ICAgICsjICAgY29uZmlnIEhBVkVfS0VSTkVMX0xaNA0KICAgICsjICAgY2hvaWNlDQogICAgKyMg
ICAgIGNvbmZpZyBLRVJORUxfR1pJUA0KICAgICsjICAgICBjb25maWcgS0VSTkVMX0JaSVAyDQog
ICAgKyMgICAgIGNvbmZpZyBLRVJORUxfTFpNQQ0KICAgICsjICAgICBjb25maWcgS0VSTkVMX1ha
DQogICAgKyMgICAgIGNvbmZpZyBLRVJORUxfTFpPDQogICAgKyMgICAgIGNvbmZpZyBLRVJORUxf
TFo0DQogICAgKyMgICBjb25maWcgREVGQVVMVF9IT1NUTkFNRQ0KICAgICsjICAgY29uZmlnIFNX
QVANCiAgICArIyAgIGNvbmZpZyBTWVNWSVBDDQogICAgKyMgICAgIGNvbmZpZyBTWVNWSVBDX1NZ
U0NUTA0KICAgICsjICAgY29uZmlnIFBPU0lYX01RVUVVRQ0KICAgICsjICAgICBjb25maWcgUE9T
SVhfTVFVRVVFX1NZU0NUTA0KICAgICsjICAgY29uZmlnIENST1NTX01FTU9SWV9BVFRBQ0gNCiAg
ICArIyAgIGNvbmZpZyBGSEFORExFDQogICAgKyMgICBjb25maWcgVVNFTElCDQogICAgKyMgICBj
b25maWcgQVVESVQNCiAgICArIyAgIGNvbmZpZyBIQVZFX0FSQ0hfQVVESVRTWVNDQUxMDQogICAg
KyMgICBjb25maWcgQVVESVRTWVNDQUxMDQogICAgKyMgICBjb25maWcgQVVESVRfV0FUQ0gNCiAg
ICArIyAgIGNvbmZpZyBBVURJVF9UUkVFDQogICAgKyMgICBtZW51ICJJUlEgc3Vic3lzdGVtIg0K
ICAgICsjICAgICBjb25maWcgTUFZX0hBVkVfU1BBUlNFX0lSUQ0KICAgICsjICAgICBjb25maWcg
R0VORVJJQ19JUlFfTEVHQUNZDQogICAgKyMgICAgIGNvbmZpZyBHRU5FUklDX0lSUV9QUk9CRQ0K
ICAgICsjICAgLi4uDQogICAgKw0KICAgICtpbXBvcnQgc3lzDQogICAgKw0KICAgICtmcm9tIGtj
b25maWdsaWIgaW1wb3J0IEtjb25maWcsIFN5bWJvbCwgQ2hvaWNlLCBNRU5VLCBDT01NRU5UDQog
ICAgKw0KICAgICsNCiAgICArZGVmIGluZGVudF9wcmludChzLCBpbmRlbnQpOg0KICAgICsgICAg
cHJpbnQoaW5kZW50KiIgIiArIHMpDQogICAgKw0KICAgICsNCiAgICArZGVmIHByaW50X2l0ZW1z
KG5vZGUsIGluZGVudCk6DQogICAgKyAgICB3aGlsZSBub2RlOg0KICAgICsgICAgICAgIGlmIGlz
aW5zdGFuY2Uobm9kZS5pdGVtLCBTeW1ib2wpOg0KICAgICsgICAgICAgICAgICBpbmRlbnRfcHJp
bnQoImNvbmZpZyAiICsgbm9kZS5pdGVtLm5hbWUsIGluZGVudCkNCiAgICArDQogICAgKyAgICAg
ICAgZWxpZiBpc2luc3RhbmNlKG5vZGUuaXRlbSwgQ2hvaWNlKToNCiAgICArICAgICAgICAgICAg
aW5kZW50X3ByaW50KCJjaG9pY2UiLCBpbmRlbnQpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYg
bm9kZS5pdGVtID09IE1FTlU6DQogICAgKyAgICAgICAgICAgIGluZGVudF9wcmludCgnbWVudSAi
e30iJy5mb3JtYXQobm9kZS5wcm9tcHRbMF0pLCBpbmRlbnQpDQogICAgKw0KICAgICsgICAgICAg
IGVsaWYgbm9kZS5pdGVtID09IENPTU1FTlQ6DQogICAgKyAgICAgICAgICAgIGluZGVudF9wcmlu
dCgnY29tbWVudCAie30iJy5mb3JtYXQobm9kZS5wcm9tcHRbMF0pLCBpbmRlbnQpDQogICAgKw0K
ICAgICsNCiAgICArICAgICAgICBpZiBub2RlLmxpc3Q6DQogICAgKyAgICAgICAgICAgIHByaW50
X2l0ZW1zKG5vZGUubGlzdCwgaW5kZW50ICsgMikNCiAgICArDQogICAgKyAgICAgICAgbm9kZSA9
IG5vZGUubmV4dA0KICAgICsNCiAgICArDQogICAgK2tjb25mID0gS2NvbmZpZyhzeXMuYXJndlsx
XSkNCiAgICArcHJpbnRfaXRlbXMoa2NvbmYudG9wX25vZGUsIDApDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZ2xpYi9nZW5jb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvZ2Vu
Y29uZmlnLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA3NTUNCiAgICBpbmRleCAwMDAwMDAwLi5i
YjNlNmZmDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi9n
ZW5jb25maWcucHkNCiAgICBAQCAtMCwwICsxLDEzMiBAQA0KICAgICsjIS91c3IvYmluL2VudiBw
eXRob24NCiAgICArDQogICAgKyMgQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIFVsZiBNYWdudXNz
b24NCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDDQogICAgKw0KICAgICsiIiIN
CiAgICArR2VuZXJhdGVzIGEgaGVhZGVyIGZpbGUgd2l0aCAjZGVmaW5lcyBmcm9tIHRoZSBjb25m
aWd1cmF0aW9uLCBtYXRjaGluZyB0aGUNCiAgICArZm9ybWF0IG9mIGluY2x1ZGUvZ2VuZXJhdGVk
L2F1dG9jb25mLmggaW4gdGhlIExpbnV4IGtlcm5lbC4NCiAgICArDQogICAgK09wdGlvbmFsbHks
IGFsc28gd3JpdGVzIHRoZSBjb25maWd1cmF0aW9uIG91dHB1dCBhcyBhIC5jb25maWcgZmlsZS4g
U2VlDQogICAgKy0tY29uZmlnLW91dC4NCiAgICArDQogICAgK1RoZSAtLXN5bmMtZGVwcywgLS1m
aWxlLWxpc3QsIGFuZCAtLWVudi1saXN0IG9wdGlvbnMgZ2VuZXJhdGUgaW5mb3JtYXRpb24gdGhh
dA0KICAgICtjYW4gYmUgdXNlZCB0byBhdm9pZCBuZWVkbGVzcyByZWJ1aWxkcy9yZWNvbmZpZ3Vy
YXRpb25zLg0KICAgICsNCiAgICArQmVmb3JlIHdyaXRpbmcgYSBoZWFkZXIgb3IgY29uZmlndXJh
dGlvbiBmaWxlLCBLY29uZmlnbGliIGNvbXBhcmVzIHRoZSBvbGQNCiAgICArY29udGVudHMgb2Yg
dGhlIGZpbGUgYWdhaW5zdCB0aGUgbmV3IGNvbnRlbnRzLiBJZiB0aGVyZSdzIG5vIGNoYW5nZSwg
dGhlIHdyaXRlDQogICAgK2lzIHNraXBwZWQuIFRoaXMgYXZvaWRzIHVwZGF0aW5nIGZpbGUgbWV0
YWRhdGEgbGlrZSB0aGUgbW9kaWZpY2F0aW9uIHRpbWUsIGFuZA0KICAgICttaWdodCBzYXZlIHdv
cmsgZGVwZW5kaW5nIG9uIHlvdXIgYnVpbGQgc2V0dXAuDQogICAgKw0KICAgICtCeSBkZWZhdWx0
LCB0aGUgY29uZmlndXJhdGlvbiBpcyBnZW5lcmF0ZWQgZnJvbSAnLmNvbmZpZycuIEEgZGlmZmVy
ZW50DQogICAgK2NvbmZpZ3VyYXRpb24gZmlsZSBjYW4gYmUgcGFzc2VkIGluIHRoZSBLQ09ORklH
X0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZS4NCiAgICArIiIiDQogICAgK2ltcG9ydCBhcmdw
YXJzZQ0KICAgICtpbXBvcnQgb3MNCiAgICAraW1wb3J0IHN5cw0KICAgICsNCiAgICAraW1wb3J0
IGtjb25maWdsaWINCiAgICArDQogICAgKw0KICAgICtERUZBVUxUX0hFQURFUl9QQVRIID0gImNv
bmZpZy5oIg0KICAgICtERUZBVUxUX1NZTkNfREVQU19QQVRIID0gImRlcHMvIg0KICAgICsNCiAg
ICArDQogICAgK2RlZiBtYWluKCk6DQogICAgKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVu
dFBhcnNlcigNCiAgICArICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJncGFyc2UuUmF3RGVzY3Jp
cHRpb25IZWxwRm9ybWF0dGVyLA0KICAgICsgICAgICAgIGRlc2NyaXB0aW9uPV9fZG9jX18pDQog
ICAgKw0KICAgICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgNCiAgICArICAgICAgICAiLS1oZWFk
ZXItcGF0aCIsDQogICAgKyAgICAgICAgbWV0YXZhcj0iSEVBREVSX0ZJTEUiLA0KICAgICsgICAg
ICAgIGRlZmF1bHQ9REVGQVVMVF9IRUFERVJfUEFUSCwNCiAgICArICAgICAgICBoZWxwPSJQYXRo
IGZvciB0aGUgZ2VuZXJhdGVkIGhlYWRlciBmaWxlIChkZWZhdWx0OiB7fSkiDQogICAgKyAgICAg
ICAgICAgICAuZm9ybWF0KERFRkFVTFRfSEVBREVSX1BBVEgpKQ0KICAgICsNCiAgICArICAgIHBh
cnNlci5hZGRfYXJndW1lbnQoDQogICAgKyAgICAgICAgIi0tY29uZmlnLW91dCIsDQogICAgKyAg
ICAgICAgbWV0YXZhcj0iQ09ORklHX0ZJTEUiLA0KICAgICsgICAgICAgIGhlbHA9IiIiDQogICAg
K1dyaXRlIHRoZSBjb25maWd1cmF0aW9uIHRvIENPTkZJR19GSUxFLiBUaGlzIGlzIHVzZWZ1bCBp
ZiB5b3UgaW5jbHVkZSAuY29uZmlnDQogICAgK2ZpbGVzIGluIE1ha2VmaWxlcywgYXMgdGhlIGdl
bmVyYXRlZCBjb25maWd1cmF0aW9uIGZpbGUgd2lsbCBiZSBhIGZ1bGwgLmNvbmZpZw0KICAgICtm
aWxlIGV2ZW4gaWYgLmNvbmZpZyBpcyBvdXRkYXRlZC4gVGhlIGdlbmVyYXRlZCBjb25maWd1cmF0
aW9uIG1hdGNoZXMgd2hhdA0KICAgICtvbGRkZWZjb25maWcgd291bGQgcHJvZHVjZS4gSWYgeW91
IHVzZSBzeW5jLWRlcHMsIHlvdSBjYW4gaW5jbHVkZQ0KICAgICtkZXBzL2F1dG8uY29uZiBpbnN0
ZWFkLiAtLWNvbmZpZy1vdXQgaXMgbWVhbnQgZm9yIGNhc2VzIHdoZXJlIGluY3JlbWVudGFsIGJ1
aWxkDQogICAgK2luZm9ybWF0aW9uIGlzbid0IG5lZWRlZC4NCiAgICArIiIiKQ0KICAgICsNCiAg
ICArICAgIHBhcnNlci5hZGRfYXJndW1lbnQoDQogICAgKyAgICAgICAgIi0tc3luYy1kZXBzIiwN
CiAgICArICAgICAgICBtZXRhdmFyPSJPVVRQVVRfRElSIiwNCiAgICArICAgICAgICBuYXJncz0i
PyIsDQogICAgKyAgICAgICAgY29uc3Q9REVGQVVMVF9TWU5DX0RFUFNfUEFUSCwNCiAgICArICAg
ICAgICBoZWxwPSIiIg0KICAgICtFbmFibGUgZ2VuZXJhdGlvbiBvZiBzeW1ib2wgZGVwZW5kZW5j
eSBpbmZvcm1hdGlvbiBmb3IgaW5jcmVtZW50YWwgYnVpbGRzLA0KICAgICtvcHRpb25hbGx5IHNw
ZWNpZnlpbmcgdGhlIG91dHB1dCBkaXJlY3RvcnkgKGRlZmF1bHQ6IHt9KS4gU2VlIHRoZSBkb2Nz
dHJpbmcgb2YNCiAgICArS2NvbmZpZy5zeW5jX2RlcHMoKSBpbiBLY29uZmlnbGliIGZvciBtb3Jl
IGluZm9ybWF0aW9uLg0KICAgICsiIiIuZm9ybWF0KERFRkFVTFRfU1lOQ19ERVBTX1BBVEgpKQ0K
ICAgICsNCiAgICArICAgIHBhcnNlci5hZGRfYXJndW1lbnQoDQogICAgKyAgICAgICAgIi0tZmls
ZS1saXN0IiwNCiAgICArICAgICAgICBtZXRhdmFyPSJPVVRQVVRfRklMRSIsDQogICAgKyAgICAg
ICAgaGVscD0iIiINCiAgICArV3JpdGUgYSBsaXN0IG9mIGFsbCBLY29uZmlnIGZpbGVzIHRvIE9V
VFBVVF9GSUxFLCB3aXRoIG9uZSBmaWxlIHBlciBsaW5lLiBUaGUNCiAgICArcGF0aHMgYXJlIHJl
bGF0aXZlIHRvICRzcmN0cmVlIChvciB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkgaWYgJHNyY3Ry
ZWUgaXMNCiAgICArdW5zZXQpLiBGaWxlcyBhcHBlYXIgaW4gdGhlIG9yZGVyIHRoZXkncmUgJ3Nv
dXJjZSdkLg0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgN
CiAgICArICAgICAgICAiLS1lbnYtbGlzdCIsDQogICAgKyAgICAgICAgbWV0YXZhcj0iT1VUUFVU
X0ZJTEUiLA0KICAgICsgICAgICAgIGhlbHA9IiIiDQogICAgK1dyaXRlIGEgbGlzdCBvZiBhbGwg
ZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlZmVyZW5jZWQgaW4gS2NvbmZpZyBmaWxlcyB0bw0KICAg
ICtPVVRQVVRfRklMRSwgd2l0aCBvbmUgdmFyaWFibGUgcGVyIGxpbmUuIEVhY2ggbGluZSBoYXMg
dGhlIGZvcm1hdCBOQU1FPVZBTFVFLg0KICAgICtPbmx5IGVudmlyb25tZW50IHZhcmlhYmxlcyBy
ZWZlcmVuY2VkIHdpdGggdGhlIHByZXByb2Nlc3NvciAkKFZBUikgc3ludGF4IGFyZQ0KICAgICtp
bmNsdWRlZCwgYW5kIG5vdCB2YXJpYWJsZXMgcmVmZXJlbmNlZCB3aXRoIHRoZSBvbGRlciAkVkFS
IHN5bnRheCAod2hpY2ggaXMNCiAgICArb25seSBzdXBwb3J0ZWQgZm9yIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5KS4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoDQogICAgKyAgICAgICAgImtjb25maWdfZmlsZW5hbWUiLA0KICAgICsgICAgICAgIG1ldGF2
YXI9IktDT05GSUdfRklMRU5BTUUiLA0KICAgICsgICAgICAgIG5hcmdzPSI/IiwNCiAgICArICAg
ICAgICBkZWZhdWx0PSJLY29uZmlnIiwNCiAgICArICAgICAgICBoZWxwPSJUb3AtbGV2ZWwgS2Nv
bmZpZyBmaWxlIChkZWZhdWx0OiBLY29uZmlnKSIpDQogICAgKw0KICAgICsgICAgYXJncyA9IHBh
cnNlci5wYXJzZV9hcmdzKCkNCiAgICArDQogICAgKw0KICAgICsgICAga2NvbmYgPSBrY29uZmln
bGliLktjb25maWcoYXJncy5rY29uZmlnX2ZpbGVuYW1lKQ0KICAgICsgICAga2NvbmYubG9hZF9j
b25maWcoKQ0KICAgICsNCiAgICArICAgIGtjb25mLndyaXRlX2F1dG9jb25mKGFyZ3MuaGVhZGVy
X3BhdGgpDQogICAgKw0KICAgICsgICAgaWYgYXJncy5jb25maWdfb3V0IGlzIG5vdCBOb25lOg0K
ICAgICsgICAgICAgIGtjb25mLndyaXRlX2NvbmZpZyhhcmdzLmNvbmZpZ19vdXQsIHNhdmVfb2xk
PUZhbHNlKQ0KICAgICsNCiAgICArICAgIGlmIGFyZ3Muc3luY19kZXBzIGlzIG5vdCBOb25lOg0K
ICAgICsgICAgICAgIGtjb25mLnN5bmNfZGVwcyhhcmdzLnN5bmNfZGVwcykNCiAgICArDQogICAg
KyAgICBpZiBhcmdzLmZpbGVfbGlzdCBpcyBub3QgTm9uZToNCiAgICArICAgICAgICB3aXRoIF9v
cGVuX3dyaXRlKGFyZ3MuZmlsZV9saXN0KSBhcyBmOg0KICAgICsgICAgICAgICAgICBmb3IgcGF0
aCBpbiBrY29uZi5rY29uZmlnX2ZpbGVuYW1lczoNCiAgICArICAgICAgICAgICAgICAgIGYud3Jp
dGUocGF0aCArICJcbiIpDQogICAgKw0KICAgICsgICAgaWYgYXJncy5lbnZfbGlzdCBpcyBub3Qg
Tm9uZToNCiAgICArICAgICAgICB3aXRoIF9vcGVuX3dyaXRlKGFyZ3MuZW52X2xpc3QpIGFzIGY6
DQogICAgKyAgICAgICAgICAgIGZvciBlbnZfdmFyIGluIGtjb25mLmVudl92YXJzOg0KICAgICsg
ICAgICAgICAgICAgICAgZi53cml0ZSgie309e31cbiIuZm9ybWF0KGVudl92YXIsIG9zLmVudmly
b25bZW52X3Zhcl0pKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfb3Blbl93cml0ZShwYXRoKToN
CiAgICArICAgICMgUHl0aG9uIDIvMyBjb21wYXRpYmlsaXR5LiBpby5vcGVuKCkgaXMgYXZhaWxh
YmxlIG9uIGJvdGgsIGJ1dCBtYWtlcw0KICAgICsgICAgIyB3cml0ZSgpIGV4cGVjdCAndW5pY29k
ZScgc3RyaW5ncyBvbiBQeXRob24gMi4NCiAgICArDQogICAgKyAgICBpZiBzeXMudmVyc2lvbl9p
bmZvWzBdIDwgMzoNCiAgICArICAgICAgICByZXR1cm4gb3BlbihwYXRoLCAidyIpDQogICAgKyAg
ICByZXR1cm4gb3BlbihwYXRoLCAidyIsIGVuY29kaW5nPSJ1dGYtOCIpDQogICAgKw0KICAgICsN
CiAgICAraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoNCiAgICArICAgIG1haW4oKQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvZ3VpY29uZmlnLnB5IGIvc3VwcG9ydC9rY29u
ZmlnbGliL2d1aWNvbmZpZy5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXgg
MDAwMDAwMC4uMDUwNzg5YQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tj
b25maWdsaWIvZ3VpY29uZmlnLnB5DQogICAgQEAgLTAsMCArMSwyMzE2IEBADQogICAgKyMhL3Vz
ci9iaW4vZW52IHB5dGhvbg0KICAgICsNCiAgICArIyBDb3B5cmlnaHQgKGMpIDIwMTksIFVsZiBN
YWdudXNzb24NCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDDQogICAgKw0KICAg
ICsiIiINCiAgICArT3ZlcnZpZXcNCiAgICArPT09PT09PT0NCiAgICArDQogICAgK0EgVGtpbnRl
ci1iYXNlZCBtZW51Y29uZmlnIGltcGxlbWVudGF0aW9uLCBiYXNlZCBhcm91bmQgYSB0cmVldmll
dyBjb250cm9sIGFuZA0KICAgICthIGhlbHAgZGlzcGxheS4gVGhlIGludGVyZmFjZSBzaG91bGQg
ZmVlbCBmYW1pbGlhciB0byBwZW9wbGUgdXNlZCB0byBxY29uZg0KICAgICsoJ21ha2UgeGNvbmZp
ZycpLiBDb21wYXRpYmxlIHdpdGggYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMuDQogICAgKw0K
ICAgICtUaGUgZGlzcGxheSBjYW4gYmUgdG9nZ2xlZCBiZXR3ZWVuIHNob3dpbmcgdGhlIGZ1bGwg
dHJlZSBhbmQgc2hvd2luZyBqdXN0IGENCiAgICArc2luZ2xlIG1lbnUgKGxpa2UgbWVudWNvbmZp
Zy5weSkuIE9ubHkgc2luZ2xlLW1lbnUgbW9kZSBkaXN0aW5ndWlzaGVzIGJldHdlZW4NCiAgICAr
c3ltYm9scyBkZWZpbmVkIHdpdGggJ2NvbmZpZycgYW5kIHN5bWJvbHMgZGVmaW5lZCB3aXRoICdt
ZW51Y29uZmlnJy4NCiAgICArDQogICAgK0Egc2hvdy1hbGwgbW9kZSBpcyBhdmFpbGFibGUgdGhh
dCBzaG93cyBpbnZpc2libGUgaXRlbXMgaW4gcmVkLg0KICAgICsNCiAgICArU3VwcG9ydHMgYm90
aCBtb3VzZSBhbmQga2V5Ym9hcmQgY29udHJvbHMuIFRoZSBmb2xsb3dpbmcga2V5Ym9hcmQgc2hv
cnRjdXRzIGFyZQ0KICAgICthdmFpbGFibGU6DQogICAgKw0KICAgICsgIEN0cmwtUyAgIDogU2F2
ZSBjb25maWd1cmF0aW9uDQogICAgKyAgQ3RybC1PICAgOiBPcGVuIGNvbmZpZ3VyYXRpb24NCiAg
ICArICBDdHJsLUEgICA6IFRvZ2dsZSBzaG93LWFsbCBtb2RlDQogICAgKyAgQ3RybC1OICAgOiBU
b2dnbGUgc2hvdy1uYW1lIG1vZGUNCiAgICArICBDdHJsLU0gICA6IFRvZ2dsZSBzaW5nbGUtbWVu
dSBtb2RlDQogICAgKyAgQ3RybC1GLCAvOiBPcGVuIGp1bXAtdG8gZGlhbG9nDQogICAgKyAgRVND
ICAgICAgOiBDbG9zZQ0KICAgICsNCiAgICArUnVubmluZw0KICAgICs9PT09PT09DQogICAgKw0K
ICAgICtndWljb25maWcucHkgY2FuIGJlIHJ1biBlaXRoZXIgYXMgYSBzdGFuZGFsb25lIGV4ZWN1
dGFibGUgb3IgYnkgY2FsbGluZyB0aGUNCiAgICArbWVudWNvbmZpZygpIGZ1bmN0aW9uIHdpdGgg
YW4gZXhpc3RpbmcgS2NvbmZpZyBpbnN0YW5jZS4gVGhlIHNlY29uZCBvcHRpb24gaXMgYQ0KICAg
ICtiaXQgaW5mbGV4aWJsZSBpbiB0aGF0IGl0IHdpbGwgc3RpbGwgbG9hZCBhbmQgc2F2ZSAuY29u
ZmlnLCBldGMuDQogICAgKw0KICAgICtXaGVuIHJ1biBpbiBzdGFuZGFsb25lIG1vZGUsIHRoZSB0
b3AtbGV2ZWwgS2NvbmZpZyBmaWxlIHRvIGxvYWQgY2FuIGJlIHBhc3NlZA0KICAgICthcyBhIGNv
bW1hbmQtbGluZSBhcmd1bWVudC4gV2l0aCBubyBhcmd1bWVudCwgaXQgZGVmYXVsdHMgdG8gIktj
b25maWciLg0KICAgICsNCiAgICArVGhlIEtDT05GSUdfQ09ORklHIGVudmlyb25tZW50IHZhcmlh
YmxlIHNwZWNpZmllcyB0aGUgLmNvbmZpZyBmaWxlIHRvIGxvYWQgKGlmDQogICAgK2l0IGV4aXN0
cykgYW5kIHNhdmUuIElmIEtDT05GSUdfQ09ORklHIGlzIHVuc2V0LCAiLmNvbmZpZyIgaXMgdXNl
ZC4NCiAgICArDQogICAgK1doZW4gb3ZlcndyaXRpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUsIHRo
ZSBvbGQgdmVyc2lvbiBpcyBzYXZlZCB0bw0KICAgICs8ZmlsZW5hbWU+Lm9sZCAoZS5nLiAuY29u
ZmlnLm9sZCkuDQogICAgKw0KICAgICskc3JjdHJlZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCBLY29u
ZmlnbGliLg0KICAgICsiIiINCiAgICArDQogICAgKyMgTm90ZTogVGhlcmUncyBzb21lIGNvZGUg
ZHVwbGljYXRpb24gd2l0aCBtZW51Y29uZmlnLnB5IGJlbG93LCBlc3BlY2lhbGx5IGZvcg0KICAg
ICsjIHRoZSBoZWxwIHRleHQuIE1heWJlIHNvbWUgb2YgaXQgY291bGQgYmUgbW92ZWQgaW50byBr
Y29uZmlnbGliLnB5IG9yIGEgc2hhcmVkDQogICAgKyMgaGVscGVyIHNjcmlwdCwgYnV0IE9UT0gg
aXQncyBwcmV0dHkgbmljZSB0byBoYXZlIHRoaW5ncyBzdGFuZGFsb25lIGFuZA0KICAgICsjIGN1
c3RvbWl6YWJsZS4NCiAgICArDQogICAgK2ltcG9ydCBlcnJubw0KICAgICtpbXBvcnQgb3MNCiAg
ICAraW1wb3J0IHN5cw0KICAgICsNCiAgICArX1BZMiA9IHN5cy52ZXJzaW9uX2luZm9bMF0gPCAz
DQogICAgKw0KICAgICtpZiBfUFkyOg0KICAgICsgICAgIyBQeXRob24gMg0KICAgICsgICAgZnJv
bSBUa2ludGVyIGltcG9ydCAqDQogICAgKyAgICBpbXBvcnQgdHRrDQogICAgKyAgICBpbXBvcnQg
dGtGb250IGFzIGZvbnQNCiAgICArICAgIGltcG9ydCB0a0ZpbGVEaWFsb2cgYXMgZmlsZWRpYWxv
Zw0KICAgICsgICAgaW1wb3J0IHRrTWVzc2FnZUJveCBhcyBtZXNzYWdlYm94DQogICAgK2Vsc2U6
DQogICAgKyAgICAjIFB5dGhvbiAzDQogICAgKyAgICBmcm9tIHRraW50ZXIgaW1wb3J0ICoNCiAg
ICArICAgIGltcG9ydCB0a2ludGVyLnR0ayBhcyB0dGsNCiAgICArICAgIGltcG9ydCB0a2ludGVy
LmZvbnQgYXMgZm9udA0KICAgICsgICAgZnJvbSB0a2ludGVyIGltcG9ydCBmaWxlZGlhbG9nLCBt
ZXNzYWdlYm94DQogICAgKw0KICAgICtmcm9tIGtjb25maWdsaWIgaW1wb3J0IFN5bWJvbCwgQ2hv
aWNlLCBNRU5VLCBDT01NRU5ULCBNZW51Tm9kZSwgXA0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgIEJPT0wsIFRSSVNUQVRFLCBTVFJJTkcsIElOVCwgSEVYLCBcDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgQU5ELCBPUiwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIGV4cHJf
c3RyLCBleHByX3ZhbHVlLCBzcGxpdF9leHByLCBcDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgc3RhbmRhcmRfc2NfZXhwcl9zdHIsIFwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICBU
UklfVE9fU1RSLCBUWVBFX1RPX1NUUiwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIHN0
YW5kYXJkX2tjb25maWcsIHN0YW5kYXJkX2NvbmZpZ19maWxlbmFtZQ0KICAgICsNCiAgICArDQog
ICAgKyMgSWYgVHJ1ZSwgdXNlIEdJRiBpbWFnZSBkYXRhIGVtYmVkZGVkIGluIHRoaXMgZmlsZSBp
bnN0ZWFkIG9mIHNlcGFyYXRlIEdJRg0KICAgICsjIGZpbGVzLiBTZWUgX2xvYWRfaW1hZ2VzKCku
DQogICAgK19VU0VfRU1CRURERURfSU1BR0VTID0gVHJ1ZQ0KICAgICsNCiAgICArDQogICAgKyMg
SGVscCB0ZXh0IGZvciB0aGUganVtcC10byBkaWFsb2cNCiAgICArX0pVTVBfVE9fSEVMUCA9ICIi
IlwNCiAgICArVHlwZSBvbmUgb3IgbW9yZSBzdHJpbmdzL3JlZ2V4ZXMgYW5kIHByZXNzIEVudGVy
IHRvIGxpc3QgaXRlbXMgdGhhdCBtYXRjaCBhbGwNCiAgICArb2YgdGhlbS4gUHl0aG9uJ3MgcmVn
ZXggZmxhdm9yIGlzIHVzZWQgKHNlZSB0aGUgJ3JlJyBtb2R1bGUpLiBEb3VibGUtY2xpY2tpbmcN
CiAgICArYW4gaXRlbSB3aWxsIGp1bXAgdG8gaXQuIEl0ZW0gdmFsdWVzIGNhbiBiZSB0b2dnbGVk
IGRpcmVjdGx5IHdpdGhpbiB0aGUgZGlhbG9nLlwNCiAgICArIiIiDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9tYWluKCk6DQogICAgKyAgICBtZW51Y29uZmlnKHN0YW5kYXJkX2tjb25maWcoKSkN
CiAgICArDQogICAgKw0KICAgICsjIEdsb2JhbCB2YXJpYWJsZXMgdXNlZCBiZWxvdzoNCiAgICAr
Iw0KICAgICsjICAgX3Jvb3Q6DQogICAgKyMgICAgIFRoZSBUb3BsZXZlbCBpbnN0YW5jZSBmb3Ig
dGhlIG1haW4gd2luZG93DQogICAgKyMNCiAgICArIyAgIF90cmVlOg0KICAgICsjICAgICBUaGUg
VHJlZXZpZXcgaW4gdGhlIG1haW4gd2luZG93DQogICAgKyMNCiAgICArIyAgIF9qdW1wX3RvX3Ry
ZWU6DQogICAgKyMgICAgIFRoZSBUcmVldmlldyBpbiB0aGUganVtcC10byBkaWFsb2cuIE5vbmUg
aWYgdGhlIGp1bXAtdG8gZGlhbG9nIGlzbid0DQogICAgKyMgICAgIG9wZW4uIERvdWJsZXMgYXMg
YSBmbGFnLg0KICAgICsjDQogICAgKyMgICBfanVtcF90b19tYXRjaGVzOg0KICAgICsjICAgICBM
aXN0IG9mIE5vZGVzIHNob3duIGluIHRoZSBqdW1wLXRvIGRpYWxvZw0KICAgICsjDQogICAgKyMg
ICBfbWVudXBhdGg6DQogICAgKyMgICAgIFRoZSBMYWJlbCB0aGF0IHNob3dzIHRoZSBtZW51IHBh
dGggb2YgdGhlIHNlbGVjdGVkIGl0ZW0NCiAgICArIw0KICAgICsjICAgX2JhY2tidXR0b246DQog
ICAgKyMgICAgIFRoZSBidXR0b24gc2hvd24gaW4gc2luZ2xlLW1lbnUgbW9kZSBmb3IganVtcGlu
ZyB0byB0aGUgcGFyZW50IG1lbnUNCiAgICArIw0KICAgICsjICAgX3N0YXR1c19sYWJlbDoNCiAg
ICArIyAgICAgTGFiZWwgd2l0aCBzdGF0dXMgdGV4dCBzaG93biBhdCB0aGUgYm90dG9tIG9mIHRo
ZSBtYWluIHdpbmRvdw0KICAgICsjICAgICAoIk1vZGlmaWVkIiwgIlNhdmVkIHRvIC4uLiIsIGV0
Yy4pDQogICAgKyMNCiAgICArIyAgIF9pZF90b19ub2RlOg0KICAgICsjICAgICBXZSBjYW4ndCB1
c2UgTm9kZSBvYmplY3RzIGRpcmVjdGx5IGFzIFRyZWV2aWV3IGl0ZW0gSURzLCBzbyB3ZSB1c2Ug
dGhlaXINCiAgICArIyAgICAgaWQoKXMgaW5zdGVhZC4gVGhpcyBkaWN0aW9uYXJ5IG1hcHMgTm9k
ZSBpZCgpcyBiYWNrIHRvIE5vZGVzLiAoVGhlIGtleXMNCiAgICArIyAgICAgYXJlIGFjdHVhbGx5
IHN0cihpZChub2RlKSksIGp1c3QgdG8gc2ltcGxpZnkgbG9va3Vwcy4pDQogICAgKyMNCiAgICAr
IyAgIF9jdXJfbWVudToNCiAgICArIyAgICAgVGhlIGN1cnJlbnQgbWVudS4gSWdub3JlZCBvdXRz
aWRlIHNpbmdsZS1tZW51IG1vZGUuDQogICAgKyMNCiAgICArIyAgIF9zaG93X2FsbF92YXIvX3No
b3dfbmFtZV92YXIvX3NpbmdsZV9tZW51X3ZhcjoNCiAgICArIyAgICAgVGtpbnRlciBWYXJpYWJs
ZSBpbnN0YW5jZXMgYm91bmQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2hlY2tib3hlcw0KICAgICsj
DQogICAgKyMgICBfc2hvd19hbGwvX3NpbmdsZV9tZW51Og0KICAgICsjICAgICBQbGFpbiBQeXRo
b24gYm9vbHMgdGhhdCB0cmFjayBfc2hvd19hbGxfdmFyIGFuZCBfc2luZ2xlX21lbnVfdmFyLCB0
bw0KICAgICsjICAgICBzcGVlZCB1cCBhbmQgc2ltcGxpZnkgdGhpbmdzIGEgYml0DQogICAgKyMN
CiAgICArIyAgIF9jb25mX2ZpbGVuYW1lOg0KICAgICsjICAgICBGaWxlIHRvIHNhdmUgdGhlIGNv
bmZpZ3VyYXRpb24gdG8NCiAgICArIw0KICAgICsjICAgX21pbmNvbmZfZmlsZW5hbWU6DQogICAg
KyMgICAgIEZpbGUgdG8gc2F2ZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb25zIHRvDQogICAgKyMNCiAg
ICArIyAgIF9jb25mX2NoYW5nZWQ6DQogICAgKyMgICAgIFRydWUgaWYgdGhlIGNvbmZpZ3VyYXRp
b24gaGFzIGJlZW4gY2hhbmdlZC4gSWYgRmFsc2UsIHdlIGRvbid0IGJvdGhlcg0KICAgICsjICAg
ICBzaG93aW5nIHRoZSBzYXZlLWFuZC1xdWl0IGRpYWxvZy4NCiAgICArIw0KICAgICsjICAgICBX
ZSByZXNldCB0aGlzIHRvIEZhbHNlIHdoZW5ldmVyIHRoZSBjb25maWd1cmF0aW9uIGlzIHNhdmVk
Lg0KICAgICsjDQogICAgKyMgICBfKl9pbWc6DQogICAgKyMgICAgIFBob3RvSW1hZ2UgaW5zdGFu
Y2VzIGZvciBpbWFnZXMNCiAgICArDQogICAgKw0KICAgICtkZWYgbWVudWNvbmZpZyhrY29uZik6
DQogICAgKyAgICAiIiINCiAgICArICAgIExhdW5jaGVzIHRoZSBjb25maWd1cmF0aW9uIGludGVy
ZmFjZSwgcmV0dXJuaW5nIGFmdGVyIHRoZSB1c2VyIGV4aXRzLg0KICAgICsNCiAgICArICAgIGtj
b25mOg0KICAgICsgICAgICBLY29uZmlnIGluc3RhbmNlIHRvIGJlIGNvbmZpZ3VyZWQNCiAgICAr
ICAgICIiIg0KICAgICsgICAgZ2xvYmFsIF9rY29uZg0KICAgICsgICAgZ2xvYmFsIF9jb25mX2Zp
bGVuYW1lDQogICAgKyAgICBnbG9iYWwgX21pbmNvbmZfZmlsZW5hbWUNCiAgICArICAgIGdsb2Jh
bCBfanVtcF90b190cmVlDQogICAgKyAgICBnbG9iYWwgX2N1cl9tZW51DQogICAgKw0KICAgICsg
ICAgX2tjb25mID0ga2NvbmYNCiAgICArDQogICAgKyAgICBfanVtcF90b190cmVlID0gTm9uZQ0K
ICAgICsNCiAgICArICAgIF9jcmVhdGVfaWRfdG9fbm9kZSgpDQogICAgKw0KICAgICsgICAgX2Ny
ZWF0ZV91aSgpDQogICAgKw0KICAgICsgICAgIyBGaWxlbmFtZSB0byBzYXZlIGNvbmZpZ3VyYXRp
b24gdG8NCiAgICArICAgIF9jb25mX2ZpbGVuYW1lID0gc3RhbmRhcmRfY29uZmlnX2ZpbGVuYW1l
KCkNCiAgICArDQogICAgKyAgICAjIExvYWQgZXhpc3RpbmcgY29uZmlndXJhdGlvbiBhbmQgY2hl
Y2sgaWYgaXQncyBvdXRkYXRlZA0KICAgICsgICAgX3NldF9jb25mX2NoYW5nZWQoX2xvYWRfY29u
ZmlnKCkpDQogICAgKw0KICAgICsgICAgIyBGaWxlbmFtZSB0byBzYXZlIG1pbmltYWwgY29uZmln
dXJhdGlvbiB0bw0KICAgICsgICAgX21pbmNvbmZfZmlsZW5hbWUgPSAiZGVmY29uZmlnIg0KICAg
ICsNCiAgICArICAgICMgQ3VycmVudCBtZW51IGluIHNpbmdsZS1tZW51IG1vZGUNCiAgICArICAg
IF9jdXJfbWVudSA9IF9rY29uZi50b3Bfbm9kZQ0KICAgICsNCiAgICArICAgICMgQW55IHZpc2li
bGUgaXRlbXMgaW4gdGhlIHRvcCBtZW51Pw0KICAgICsgICAgaWYgbm90IF9zaG93bl9tZW51X25v
ZGVzKGtjb25mLnRvcF9ub2RlKToNCiAgICArICAgICAgICAjIE5vdGhpbmcgdmlzaWJsZS4gU3Rh
cnQgaW4gc2hvdy1hbGwgbW9kZSBhbmQgdHJ5IGFnYWluLg0KICAgICsgICAgICAgIF9zaG93X2Fs
bF92YXIuc2V0KFRydWUpDQogICAgKyAgICAgICAgaWYgbm90IF9zaG93bl9tZW51X25vZGVzKGtj
b25mLnRvcF9ub2RlKToNCiAgICArICAgICAgICAgICAgIyBHaXZlIHVwIGFuZCBzaG93IGFuIGVy
cm9yLiBJdCdzIG5pY2UgdG8gYmUgYWJsZSB0byBhc3N1bWUgdGhhdA0KICAgICsgICAgICAgICAg
ICAjIHRoZSB0cmVlIGlzIG5vbi1lbXB0eSBpbiB0aGUgcmVzdCBvZiB0aGUgY29kZS4NCiAgICAr
ICAgICAgICAgICAgX3Jvb3Qud2FpdF92aXNpYmlsaXR5KCkNCiAgICArICAgICAgICAgICAgbWVz
c2FnZWJveC5zaG93ZXJyb3IoDQogICAgKyAgICAgICAgICAgICAgICAiRXJyb3IiLA0KICAgICsg
ICAgICAgICAgICAgICAgIkVtcHR5IGNvbmZpZ3VyYXRpb24gLS0gbm90aGluZyB0byBjb25maWd1
cmUuXG5cbiINCiAgICArICAgICAgICAgICAgICAgICJDaGVjayB0aGF0IGVudmlyb25tZW50IHZh
cmlhYmxlcyBhcmUgc2V0IHByb3Blcmx5LiIpDQogICAgKyAgICAgICAgICAgIF9yb290LmRlc3Ry
b3koKQ0KICAgICsgICAgICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICAjIEJ1aWxkIHRo
ZSBpbml0aWFsIHRyZWUNCiAgICArICAgIF91cGRhdGVfdHJlZSgpDQogICAgKw0KICAgICsgICAg
IyBTZWxlY3QgdGhlIGZpcnN0IGl0ZW0gYW5kIGZvY3VzIHRoZSBUcmVldmlldywgc28gdGhhdCBr
ZXlib2FyZCBjb250cm9scw0KICAgICsgICAgIyB3b3JrIGltbWVkaWF0ZWx5DQogICAgKyAgICBf
c2VsZWN0KF90cmVlLCBfdHJlZS5nZXRfY2hpbGRyZW4oKVswXSkNCiAgICArICAgIF90cmVlLmZv
Y3VzX3NldCgpDQogICAgKw0KICAgICsgICAgIyBNYWtlIGdlb21ldHJ5IGluZm9ybWF0aW9uIGF2
YWlsYWJsZSBmb3IgY2VudGVyaW5nIHRoZSB3aW5kb3cuIFRoaXMNCiAgICArICAgICMgaW5kaXJl
Y3RseSBjcmVhdGVzIHRoZSB3aW5kb3csIHNvIGhpZGUgaXQgc28gdGhhdCBpdCdzIG5ldmVyIHNo
b3duIGF0IHRoZQ0KICAgICsgICAgIyBvbGQgbG9jYXRpb24uDQogICAgKyAgICBfcm9vdC53aXRo
ZHJhdygpDQogICAgKyAgICBfcm9vdC51cGRhdGVfaWRsZXRhc2tzKCkNCiAgICArDQogICAgKyAg
ICAjIENlbnRlciB0aGUgd2luZG93DQogICAgKyAgICBfcm9vdC5nZW9tZXRyeSgiK3t9K3t9Ii5m
b3JtYXQoDQogICAgKyAgICAgICAgKF9yb290LndpbmZvX3NjcmVlbndpZHRoKCkgLSBfcm9vdC53
aW5mb19yZXF3aWR0aCgpKS8vMiwNCiAgICArICAgICAgICAoX3Jvb3Qud2luZm9fc2NyZWVuaGVp
Z2h0KCkgLSBfcm9vdC53aW5mb19yZXFoZWlnaHQoKSkvLzIpKQ0KICAgICsNCiAgICArICAgICMg
U2hvdyBpdA0KICAgICsgICAgX3Jvb3QuZGVpY29uaWZ5KCkNCiAgICArDQogICAgKyAgICAjIFBy
ZXZlbnQgdGhlIHdpbmRvdyBmcm9tIGJlaW5nIGF1dG9tYXRpY2FsbHkgcmVzaXplZC4gT3RoZXJ3
aXNlLCBpdA0KICAgICsgICAgIyBjaGFuZ2VzIHNpemUgd2hlbiBzY3JvbGxiYXJzIGFwcGVhci9k
aXNhcHBlYXIgYmVmb3JlIHRoZSB1c2VyIGhhcw0KICAgICsgICAgIyBtYW51YWxseSByZXNpemVk
IGl0Lg0KICAgICsgICAgX3Jvb3QuZ2VvbWV0cnkoX3Jvb3QuZ2VvbWV0cnkoKSkNCiAgICArDQog
ICAgKyAgICBfcm9vdC5tYWlubG9vcCgpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9sb2FkX2Nv
bmZpZygpOg0KICAgICsgICAgIyBMb2FkcyBhbnkgZXhpc3RpbmcgLmNvbmZpZyBmaWxlLiBTZWUg
dGhlIEtjb25maWcubG9hZF9jb25maWcoKSBkb2NzdHJpbmcuDQogICAgKyAgICAjDQogICAgKyAg
ICAjIFJldHVybnMgVHJ1ZSBpZiAuY29uZmlnIGlzIG1pc3Npbmcgb3Igb3V0ZGF0ZWQuIFdlIGFs
d2F5cyBwcm9tcHQgZm9yDQogICAgKyAgICAjIHNhdmluZyB0aGUgY29uZmlndXJhdGlvbiBpbiB0
aGF0IGNhc2UuDQogICAgKw0KICAgICsgICAgcHJpbnQoX2tjb25mLmxvYWRfY29uZmlnKCkpDQog
ICAgKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoX2NvbmZfZmlsZW5hbWUpOg0KICAgICsgICAg
ICAgICMgTm8gLmNvbmZpZw0KICAgICsgICAgICAgIHJldHVybiBUcnVlDQogICAgKw0KICAgICsg
ICAgcmV0dXJuIF9uZWVkc19zYXZlKCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX25lZWRzX3Nh
dmUoKToNCiAgICArICAgICMgUmV0dXJucyBUcnVlIGlmIGEganVzdC1sb2FkZWQgLmNvbmZpZyBm
aWxlIGlzIG91dGRhdGVkICh3b3VsZCBnZXQNCiAgICArICAgICMgbW9kaWZpZWQgd2hlbiBzYXZp
bmcpDQogICAgKw0KICAgICsgICAgaWYgX2tjb25mLm1pc3Npbmdfc3ltczoNCiAgICArICAgICAg
ICAjIEFzc2lnbm1lbnRzIHRvIHVuZGVmaW5lZCBzeW1ib2xzIGluIHRoZSAuY29uZmlnDQogICAg
KyAgICAgICAgcmV0dXJuIFRydWUNCiAgICArDQogICAgKyAgICBmb3Igc3ltIGluIF9rY29uZi51
bmlxdWVfZGVmaW5lZF9zeW1zOg0KICAgICsgICAgICAgIGlmIHN5bS51c2VyX3ZhbHVlIGlzIE5v
bmU6DQogICAgKyAgICAgICAgICAgIGlmIHN5bS5jb25maWdfc3RyaW5nOg0KICAgICsgICAgICAg
ICAgICAgICAgIyBVbndyaXR0ZW4gc3ltYm9sDQogICAgKyAgICAgICAgICAgICAgICByZXR1cm4g
VHJ1ZQ0KICAgICsgICAgICAgIGVsaWYgc3ltLm9yaWdfdHlwZSBpbiAoQk9PTCwgVFJJU1RBVEUp
Og0KICAgICsgICAgICAgICAgICBpZiBzeW0udHJpX3ZhbHVlICE9IHN5bS51c2VyX3ZhbHVlOg0K
ICAgICsgICAgICAgICAgICAgICAgIyBXcml0dGVuIGJvb2wvdHJpc3RhdGUgc3ltYm9sLCBuZXcg
dmFsdWUNCiAgICArICAgICAgICAgICAgICAgIHJldHVybiBUcnVlDQogICAgKyAgICAgICAgZWxp
ZiBzeW0uc3RyX3ZhbHVlICE9IHN5bS51c2VyX3ZhbHVlOg0KICAgICsgICAgICAgICAgICAjIFdy
aXR0ZW4gc3RyaW5nL2ludC9oZXggc3ltYm9sLCBuZXcgdmFsdWUNCiAgICArICAgICAgICAgICAg
cmV0dXJuIFRydWUNCiAgICArDQogICAgKyAgICAjIE5vIG5lZWQgdG8gcHJvbXB0IGZvciBzYXZl
DQogICAgKyAgICByZXR1cm4gRmFsc2UNCiAgICArDQogICAgKw0KICAgICtkZWYgX2NyZWF0ZV9p
ZF90b19ub2RlKCk6DQogICAgKyAgICBnbG9iYWwgX2lkX3RvX25vZGUNCiAgICArDQogICAgKyAg
ICBfaWRfdG9fbm9kZSA9IHtzdHIoaWQobm9kZSkpOiBub2RlIGZvciBub2RlIGluIF9rY29uZi5u
b2RlX2l0ZXIoKX0NCiAgICArDQogICAgKw0KICAgICtkZWYgX2NyZWF0ZV91aSgpOg0KICAgICsg
ICAgIyBDcmVhdGVzIHRoZSBtYWluIHdpbmRvdyBVSQ0KICAgICsNCiAgICArICAgIGdsb2JhbCBf
cm9vdA0KICAgICsgICAgZ2xvYmFsIF90cmVlDQogICAgKw0KICAgICsgICAgIyBDcmVhdGUgdGhl
IHJvb3Qgd2luZG93LiBUaGlzIGluaXRpYWxpemVzIFRraW50ZXIgYW5kIG1ha2VzIGUuZy4NCiAg
ICArICAgICMgUGhvdG9JbWFnZSBhdmFpbGFibGUsIHNvIGRvIGl0IGVhcmx5Lg0KICAgICsgICAg
X3Jvb3QgPSBUaygpDQogICAgKw0KICAgICsgICAgX2xvYWRfaW1hZ2VzKCkNCiAgICArICAgIF9p
bml0X21pc2NfdWkoKQ0KICAgICsgICAgX2ZpeF90cmVldmlld19pc3N1ZXMoKQ0KICAgICsNCiAg
ICArICAgIF9jcmVhdGVfdG9wX3dpZGdldHMoKQ0KICAgICsgICAgIyBDcmVhdGUgdGhlIHBhbmUg
d2l0aCB0aGUgS2NvbmZpZyB0cmVlIGFuZCBkZXNjcmlwdGlvbiB0ZXh0DQogICAgKyAgICBwYW5l
ZHdpbmRvdywgX3RyZWUgPSBfY3JlYXRlX2tjb25maWdfdHJlZV9hbmRfZGVzYyhfcm9vdCkNCiAg
ICArICAgIHBhbmVkd2luZG93LmdyaWQoY29sdW1uPTAsIHJvdz0xLCBzdGlja3k9Im5zZXciKQ0K
ICAgICsgICAgX2NyZWF0ZV9zdGF0dXNfYmFyKCkNCiAgICArDQogICAgKyAgICBfcm9vdC5jb2x1
bW5jb25maWd1cmUoMCwgd2VpZ2h0PTEpDQogICAgKyAgICAjIE9ubHkgdGhlIHBhbmUgd2l0aCB0
aGUgS2NvbmZpZyB0cmVlIGFuZCBkZXNjcmlwdGlvbiBncm93cyB2ZXJ0aWNhbGx5DQogICAgKyAg
ICBfcm9vdC5yb3djb25maWd1cmUoMSwgd2VpZ2h0PTEpDQogICAgKw0KICAgICsgICAgIyBTdGFy
dCB3aXRoIHNob3ctbmFtZSBkaXNhYmxlZA0KICAgICsgICAgX2RvX3Nob3duYW1lKCkNCiAgICAr
DQogICAgKyAgICBfdHJlZS5iaW5kKCI8TGVmdD4iLCBfdHJlZV9sZWZ0X2tleSkNCiAgICArICAg
IF90cmVlLmJpbmQoIjxSaWdodD4iLCBfdHJlZV9yaWdodF9rZXkpDQogICAgKyAgICAjIE5vdGU6
IEJpbmRpbmcgdGhpcyBmb3IgdGhlIGp1bXAtdG8gdHJlZSBhcyB3ZWxsIHdvdWxkIGNhdXNlIGlz
c3VlcyBkdWUgdG8NCiAgICArICAgICMgdGhlIFRrIGJ1ZyBtZW50aW9uZWQgaW4gX3RyZWVfb3Bl
bigpDQogICAgKyAgICBfdHJlZS5iaW5kKCI8PFRyZWV2aWV3T3Blbj4+IiwgX3RyZWVfb3BlbikN
CiAgICArICAgICMgYWRkPVRydWUgdG8gYXZvaWQgb3ZlcnJpZGluZyB0aGUgZGVzY3JpcHRpb24g
dGV4dCB1cGRhdGUNCiAgICArICAgIF90cmVlLmJpbmQoIjw8VHJlZXZpZXdTZWxlY3Q+PiIsIF91
cGRhdGVfbWVudV9wYXRoLCBhZGQ9VHJ1ZSkNCiAgICArDQogICAgKyAgICBfcm9vdC5iaW5kKCI8
Q29udHJvbC1zPiIsIF9zYXZlKQ0KICAgICsgICAgX3Jvb3QuYmluZCgiPENvbnRyb2wtbz4iLCBf
b3BlbikNCiAgICArICAgIF9yb290LmJpbmQoIjxDb250cm9sLWE+IiwgX3RvZ2dsZV9zaG93YWxs
KQ0KICAgICsgICAgX3Jvb3QuYmluZCgiPENvbnRyb2wtbj4iLCBfdG9nZ2xlX3Nob3duYW1lKQ0K
ICAgICsgICAgX3Jvb3QuYmluZCgiPENvbnRyb2wtbT4iLCBfdG9nZ2xlX3RyZWVfbW9kZSkNCiAg
ICArICAgIF9yb290LmJpbmQoIjxDb250cm9sLWY+IiwgX2p1bXBfdG9fZGlhbG9nKQ0KICAgICsg
ICAgX3Jvb3QuYmluZCgiLyIsIF9qdW1wX3RvX2RpYWxvZykNCiAgICArICAgIF9yb290LmJpbmQo
IjxFc2NhcGU+IiwgX29uX3F1aXQpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9sb2FkX2ltYWdl
cygpOg0KICAgICsgICAgIyBMb2FkcyBHSUYgaW1hZ2VzLCBjcmVhdGluZyB0aGUgZ2xvYmFsIF8q
X2ltZyBQaG90b0ltYWdlIHZhcmlhYmxlcy4NCiAgICArICAgICMgQmFzZTY0LWVuY29kZWQgaW1h
Z2VzIGVtYmVkZGVkIGluIHRoaXMgc2NyaXB0IGFyZSB1c2VkIGlmDQogICAgKyAgICAjIF9VU0Vf
RU1CRURERURfSU1BR0VTIGlzIFRydWUsIGFuZCBzZXBhcmF0ZSBpbWFnZSBmaWxlcyBpbiB0aGUg
c2FtZQ0KICAgICsgICAgIyBkaXJlY3RvcnkgYXMgdGhlIHNjcmlwdCBvdGhlcndpc2UuDQogICAg
KyAgICAjDQogICAgKyAgICAjIFVzaW5nIGEgZ2xvYmFsIHZhcmlhYmxlIGluZGlyZWN0bHkgcHJl
dmVudHMgdGhlIGltYWdlIGZyb20gYmVpbmcNCiAgICArICAgICMgZ2FyYmFnZS1jb2xsZWN0ZWQu
IFBhc3NpbmcgYW4gaW1hZ2UgdG8gYSBUa2ludGVyIGZ1bmN0aW9uIGlzbid0IGVub3VnaCB0bw0K
ICAgICsgICAgIyBrZWVwIGl0IGFsaXZlLg0KICAgICsNCiAgICArICAgIGRlZiBsb2FkX2ltYWdl
KG5hbWUsIGRhdGEpOg0KICAgICsgICAgICAgIHZhcl9uYW1lID0gIl97fV9pbWciLmZvcm1hdChu
YW1lKQ0KICAgICsNCiAgICArICAgICAgICBpZiBfVVNFX0VNQkVEREVEX0lNQUdFUzoNCiAgICAr
ICAgICAgICAgICAgZ2xvYmFscygpW3Zhcl9uYW1lXSA9IFBob3RvSW1hZ2UoZGF0YT1kYXRhLCBm
b3JtYXQ9ImdpZiIpDQogICAgKyAgICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgZ2xvYmFs
cygpW3Zhcl9uYW1lXSA9IFBob3RvSW1hZ2UoDQogICAgKyAgICAgICAgICAgICAgICBmaWxlPW9z
LnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBuYW1lICsgIi5naWYiKSwNCiAg
ICArICAgICAgICAgICAgICAgIGZvcm1hdD0iZ2lmIikNCiAgICArDQogICAgKyAgICAjIE5vdGU6
IEJhc2U2NCBkYXRhIGNhbiBiZSBwdXQgb24gdGhlIGNsaXBib2FyZCB3aXRoDQogICAgKyAgICAj
ICAgJCBiYXNlNjQgLXcwIGZvby5naWYgfCB4Y2xpcA0KICAgICsNCiAgICArICAgIGxvYWRfaW1h
Z2UoImljb24iLCAiUjBsR09EbGhNQUF3QVBFREFBQUFBQURRQU83dTd2Ly8veUg1QkFVS0FBTUFM
QUFBQUFBd0FEQUFBQUwvbkkrZ3krMlBva3l2MmphenVaeHJ5UWppU0pabXlYeEhlTGJ1bUg2c0VB
VHZXOE9MTnRmNWJmTFpSTEZJVHpnRWlwREo0bVl4WXY2QTB1YnVxWWhXazY2dFZURTRlbkhlcjdq
Y0t2dDBMTFV3NlA0NWx2RXByVDZjMCt2N09CdXFoWWRIb2hjb3FJYlNBSGM0bGpoRHdyaDFVbGdT
eWRSQ1dXbHA1d2lZWnZtU3VTaDRJenJxVjZwNGN3aGtDc21ZK25oSzZ1SjZ0MW1yT2h1SnFmdTYr
V1lpQ2l3bDdIdExqTlNaWlppcy9NZU03TlkzVGFSS1M0MG9vRGVvaVZxSXVsdHNyYXY5MmJpOWMz
YTVLa2tPc09KWnBTUzk5bTRrLzB6UG5nNEdrczlKU2JCKzhESWNvUWZuandwWkNIdjVXK2lwNGFR
cktyQjB1T2lrWWhpTUNCdzEvdVBvUVVNQkFEcz0iKQ0KICAgICsgICAgbG9hZF9pbWFnZSgibl9i
b29sIiwgIlIwbEdPRGRoRUFBUUFQQUFBQWdJQ1AvLy95d0FBQUFBRUFBUUFBQUNJSVNQYWNIdHZw
NWtjYjVxRzg1aFoyK0JreWlSRjhCQmFFcXRyS2txc2xFQUFEcz0iKQ0KICAgICsgICAgbG9hZF9p
bWFnZSgieV9ib29sIiwgIlIwbEdPRGRoRUFBUUFQRUFBQWdJQ0FEUUFQLy8vd0FBQUN3QUFBQUFF
QUFRQUFBQ01vU1BhY0x0dmxoNFlySVlzc3QyY1YxOUF2YVZGOUNVWEJOSkpvdW03eW1yc0t1Q25o
aXVwSVdqU1NqQUZ1V2hTQ0lLQURzPSIpDQogICAgKyAgICBsb2FkX2ltYWdlKCJuX3RyaSIsICJS
MGxHT0RsaEVBQVFBUEQvQUFFQkFmLy8veUg1QkFVS0FBSUFMQUFBQUFBUUFCQUFBQUlubEkrcEJy
QUtRbkNQU1VsWHZGaHpubGtmZUd3aktaaG5KNjVoNm5yZmk2aDBzdDJRWGlrRkFEcz0iKQ0KICAg
ICsgICAgbG9hZF9pbWFnZSgibV90cmkiLCAiUjBsR09EbGhFQUFRQVBFREFBRUJBZVFNdXYvLy93
QUFBQ0g1QkFVS0FBTUFMQUFBQUFBUUFCQUFBQUk1bkkrcEJyQVdBaFBDalloaUFKUUNuV21kb0Vs
SEdWQm9pSzVNMjFvZlhGcFhSSXJnaWVjcXhrdU5jaVpJaE5PWkZSTkkyNFBoZkVvTEFEcz0iKQ0K
ICAgICsgICAgbG9hZF9pbWFnZSgieV90cmkiLCAiUjBsR09EbGhFQUFRQVBFREFBSUNBZ0RRQVAv
Ly93QUFBQ0g1QkFVS0FBTUFMQUFBQUFBUUFCQUFBQUkwbkkrcEJyQVlCaERDUlJVeXBmbWVyZ21n
WjR4ak1wbWF3MnpteGs3Y0NCK3BXaVZxcDRNekR3bjlGaEdaNVdGaklaZUdBZ0E3IikNCiAgICAr
ICAgIGxvYWRfaW1hZ2UoIm1fbXkiLCAiUjBsR09EbGhFQUFRQVBFREFBQUFBT1FNdXYvLy93QUFB
Q0g1QkFVS0FBTUFMQUFBQUFBUUFCQUFBQUk1bklHcHhpQVBJMmdoeEZpbnEvWnlnUWhjOTR6Z1pv
cG1PTFlmNjdhbkdyK29aZHAwMmVtZlY1bjlNRUhONVFocUlDRVR4a0FCYlE0S0FEcz0iKQ0KICAg
ICsgICAgbG9hZF9pbWFnZSgieV9teSIsICJSMGxHT0RsaEVBQVFBUEgvQUFBQUFBRFFBQVBSQS8v
Ly95SDVCQVVLQUFRQUxBQUFBQUFRQUJBQUFBTStTQXJjcmhDTVNTdUlNOVE4cnh4QldJWGF3SUJr
bVdvbnVwTGQ1NjVVbTlHMVBJczU5Zkttenc4V25BbHVzQllSMlNFSU42RG1BbXFCTEJ4WVNBSUFP
dz09IikNCiAgICArICAgIGxvYWRfaW1hZ2UoIm5fbG9ja2VkIiwgIlIwbEdPRGxoRUFBUUFQQUJB
QUFBQVAvLy95SDVCQVVLQUFFQUxBQUFBQUFRQUJBQUFBSWdqQjhBeUt3TjA0cHUwdk11dHBxcXo0
SGloNHlkbG5VcHlsMnIyM3B4VUFBQU93PT0iKQ0KICAgICsgICAgbG9hZF9pbWFnZSgibV9sb2Nr
ZWQiLCAiUjBsR09EbGhFQUFRQVBEL0FBQUFBT1FNdWlINUJBVUtBQUlBTEFBQUFBQVFBQkFBQUFJ
eWxDOEF5S3dOMDRvaG5HY3FxbFptZlhEV0kyNmlJblpveWlvcmUwNXdhbG9sVjM5ZnR4c1lIZ0w5
UUJCTUJHRkVGQUFBT3c9PSIpDQogICAgKyAgICBsb2FkX2ltYWdlKCJ5X2xvY2tlZCIsICJSMGxH
T0RsaEVBQVFBUEQvQUFBQUFBRFFBQ0g1QkFVS0FBSUFMQUFBQUFBUUFCQUFBQUl5bEM4QXlLek5n
bmxDdG9EVHd2WndySHlkSVlwUW1SM0tXcTR1Szc0SU9ucDBIUVBtbkQzY09WbFVJQWdLc1Noa0ZB
QUFPdz09IikNCiAgICArICAgIGxvYWRfaW1hZ2UoIm5vdF9zZWxlY3RlZCIsICJSMGxHT0RsaEVB
QVFBUEQvQUFBQUFQLy8veUg1QkFVS0FBSUFMQUFBQUFBUUFCQUFBQUlybEEycHg2SUJ3MklwV2ds
T3ZUWWh6bVViR0Qza05aNVFxcktuMllycWlnQ3hab01lbFU2Tm85Z2RDZ0E3IikNCiAgICArICAg
IGxvYWRfaW1hZ2UoInNlbGVjdGVkIiwgIlIwbEdPRGxoRUFBUUFQRC9BQUFBQVAvLy95SDVCQVVL
QUFJQUxBQUFBQUFRQUJBQUFBSXpsQTJweDZJQncySXBXZ2xPdlRhaC9rVFpoaW1BU0pvbWlxb25s
TG92MXFwdEhUc2dLU0V6aDlIOFFJMFF6TlB3bVJvRkFEcz0iKQ0KICAgICsgICAgbG9hZF9pbWFn
ZSgiZWRpdCIsICJSMGxHT0RsaEVBQVFBUElGQUFBQUFLT0xBTXV1RVB2WEN2cnh2Z0FBQUFBQUFB
QUFBQ0g1QkFVS0FBVUFMQUFBQUFBUUFCQUFBQU5DV0xxdy9ncU1CcDhjc3pKeGN3VkMyRkVPRUlB
aTVrVkJpM0lxV1podUNHTXlmZHBqMmU0cG5LK1dBc2htdnhlQWNFVFdsc3hQa2tCdHNxQk1hOFRJ
QlNRQUFEcz0iKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfZml4X3RyZWV2aWV3X2lzc3Vlcygp
Og0KICAgICsgICAgIyBGaXhlcyBzb21lIFRyZWV2aWV3IGlzc3Vlcw0KICAgICsNCiAgICArICAg
IGdsb2JhbCBfdHJlZXZpZXdfcm93aGVpZ2h0DQogICAgKw0KICAgICsgICAgc3R5bGUgPSB0dGsu
U3R5bGUoKQ0KICAgICsNCiAgICArICAgICMgVGhlIHRyZWV2aWV3IHJvd2hlaWdodCBpc24ndCBh
ZGp1c3RlZCBhdXRvbWF0aWNhbGx5IG9uIGhpZ2gtRFBJIGRpc3BsYXlzLA0KICAgICsgICAgIyBz
byBkbyBpdCBvdXJzZWx2ZXMuIFRoZSBmb250IHdpbGwgcHJvYmFibHkgYWx3YXlzIGJlIFRrRGVm
YXVsdEZvbnQsIGJ1dA0KICAgICsgICAgIyBwbGF5IGl0IHNhZmUgYW5kIGxvb2sgaXQgdXAuDQog
ICAgKw0KICAgICsgICAgX3RyZWV2aWV3X3Jvd2hlaWdodCA9IGZvbnQuRm9udChmb250PXN0eWxl
Lmxvb2t1cCgiVHJlZXZpZXciLCAiZm9udCIpKSBcDQogICAgKyAgICAgICAgLm1ldHJpY3MoImxp
bmVzcGFjZSIpICsgMg0KICAgICsNCiAgICArICAgIHN0eWxlLmNvbmZpZ3VyZSgiVHJlZXZpZXci
LCByb3doZWlnaHQ9X3RyZWV2aWV3X3Jvd2hlaWdodCkNCiAgICArDQogICAgKyAgICAjIFdvcmsg
YXJvdW5kIHJlZ3Jlc3Npb24gaW4gaHR0cHM6Ly9jb3JlLnRjbC50ay90ay90a3R2aWV3P25hbWU9
NTA5Y2FmYWZhZSwNCiAgICArICAgICMgd2hpY2ggYnJlYWtzIHRhZyBiYWNrZ3JvdW5kIGNvbG9y
cw0KICAgICsNCiAgICArICAgIGZvciBvcHRpb24gaW4gImZvcmVncm91bmQiLCAiYmFja2dyb3Vu
ZCI6DQogICAgKyAgICAgICAgIyBGaWx0ZXIgb3V0IGFueSBzdHlsZXMgc3RhcnRpbmcgd2l0aCAo
IiFkaXNhYmxlZCIsICIhc2VsZWN0ZWQiLCAuLi4pLg0KICAgICsgICAgICAgICMgc3R5bGUubWFw
KCkgcmV0dXJucyBhbiBlbXB0eSBsaXN0IGZvciBtaXNzaW5nIG9wdGlvbnMsIHNvIHRoaXMgc2hv
dWxkDQogICAgKyAgICAgICAgIyBiZSBmdXR1cmUtc2FmZS4NCiAgICArICAgICAgICBzdHlsZS5t
YXAoDQogICAgKyAgICAgICAgICAgICJUcmVldmlldyIsDQogICAgKyAgICAgICAgICAgICoqe29w
dGlvbjogW2VsbSBmb3IgZWxtIGluIHN0eWxlLm1hcCgiVHJlZXZpZXciLCBxdWVyeV9vcHQ9b3B0
aW9uKQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBpZiBlbG1bOjJdICE9ICgiIWRpc2Fi
bGVkIiwgIiFzZWxlY3RlZCIpXX0pDQogICAgKw0KICAgICsNCiAgICArZGVmIF9pbml0X21pc2Nf
dWkoKToNCiAgICArICAgICMgRG9lcyBtaXNjLiBVSSBpbml0aWFsaXphdGlvbiwgbGlrZSBzZXR0
aW5nIHRoZSB0aXRsZSwgaWNvbiwgYW5kIHRoZW1lDQogICAgKw0KICAgICsgICAgX3Jvb3QudGl0
bGUoX2tjb25mLm1haW5tZW51X3RleHQpDQogICAgKyAgICAjIGljb25waG90bygpIGlzbid0IGF2
YWlsYWJsZSBpbiBQeXRob24gMidzIFRraW50ZXINCiAgICArICAgIF9yb290LnRrLmNhbGwoIndt
IiwgImljb25waG90byIsIF9yb290Ll93LCAiLWRlZmF1bHQiLCBfaWNvbl9pbWcpDQogICAgKyAg
ICAjIFJlZHVjaW5nIHRoZSB3aWR0aCBvZiB0aGUgd2luZG93IHRvIDEgcGl4ZWwgbWFrZXMgaXQg
bW92ZSBhcm91bmQsIGF0DQogICAgKyAgICAjIGxlYXN0IG9uIEdOT01FLiBQcmV2ZW50IHdlaXJk
IHN0dWZmIGxpa2UgdGhhdC4NCiAgICArICAgIF9yb290Lm1pbnNpemUoMTI4LCAxMjgpDQogICAg
KyAgICBfcm9vdC5wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIF9vbl9xdWl0KQ0KICAgICsN
CiAgICArICAgICMgVXNlIHRoZSAnY2xhbScgdGhlbWUgb24gKm5peCBpZiBpdCdzIGF2YWlsYWJs
ZS4gSXQgbG9va3MgbmljZXIgdGhhbiB0aGUNCiAgICArICAgICMgJ2RlZmF1bHQnIHRoZW1lLg0K
ICAgICsgICAgaWYgX3Jvb3QudGsuY2FsbCgidGsiLCAid2luZG93aW5nc3lzdGVtIikgPT0gIngx
MSI6DQogICAgKyAgICAgICAgc3R5bGUgPSB0dGsuU3R5bGUoKQ0KICAgICsgICAgICAgIGlmICJj
bGFtIiBpbiBzdHlsZS50aGVtZV9uYW1lcygpOg0KICAgICsgICAgICAgICAgICBzdHlsZS50aGVt
ZV91c2UoImNsYW0iKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfY3JlYXRlX3RvcF93aWRnZXRz
KCk6DQogICAgKyAgICAjIENyZWF0ZXMgdGhlIGNvbnRyb2xzIGFib3ZlIHRoZSBLY29uZmlnIHRy
ZWUgaW4gdGhlIG1haW4gd2luZG93DQogICAgKw0KICAgICsgICAgZ2xvYmFsIF9zaG93X2FsbF92
YXINCiAgICArICAgIGdsb2JhbCBfc2hvd19uYW1lX3Zhcg0KICAgICsgICAgZ2xvYmFsIF9zaW5n
bGVfbWVudV92YXINCiAgICArICAgIGdsb2JhbCBfbWVudXBhdGgNCiAgICArICAgIGdsb2JhbCBf
YmFja2J1dHRvbg0KICAgICsNCiAgICArICAgIHRvcGZyYW1lID0gdHRrLkZyYW1lKF9yb290KQ0K
ICAgICsgICAgdG9wZnJhbWUuZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0iZXciKQ0KICAg
ICsNCiAgICArICAgIHR0ay5CdXR0b24odG9wZnJhbWUsIHRleHQ9IlNhdmUiLCBjb21tYW5kPV9z
YXZlKSBcDQogICAgKyAgICAgICAgLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9ImV3Iiwg
cGFkeD0iLjA1YyIsIHBhZHk9Ii4wNWMiKQ0KICAgICsNCiAgICArICAgIHR0ay5CdXR0b24odG9w
ZnJhbWUsIHRleHQ9IlNhdmUgYXMuLi4iLCBjb21tYW5kPV9zYXZlX2FzKSBcDQogICAgKyAgICAg
ICAgLmdyaWQoY29sdW1uPTEsIHJvdz0wLCBzdGlja3k9ImV3IikNCiAgICArDQogICAgKyAgICB0
dGsuQnV0dG9uKHRvcGZyYW1lLCB0ZXh0PSJTYXZlIG1pbmltYWwgKGFkdmFuY2VkKS4uLiIsDQog
ICAgKyAgICAgICAgICAgICAgIGNvbW1hbmQ9X3NhdmVfbWluaW1hbCkgXA0KICAgICsgICAgICAg
IC5ncmlkKGNvbHVtbj0yLCByb3c9MCwgc3RpY2t5PSJldyIsIHBhZHg9Ii4wNWMiKQ0KICAgICsN
CiAgICArICAgIHR0ay5CdXR0b24odG9wZnJhbWUsIHRleHQ9Ik9wZW4uLi4iLCBjb21tYW5kPV9v
cGVuKSBcDQogICAgKyAgICAgICAgLmdyaWQoY29sdW1uPTMsIHJvdz0wKQ0KICAgICsNCiAgICAr
ICAgIHR0ay5CdXR0b24odG9wZnJhbWUsIHRleHQ9Ikp1bXAgdG8uLi4iLCBjb21tYW5kPV9qdW1w
X3RvX2RpYWxvZykgXA0KICAgICsgICAgICAgIC5ncmlkKGNvbHVtbj00LCByb3c9MCwgcGFkeD0i
LjA1YyIpDQogICAgKw0KICAgICsgICAgX3Nob3dfbmFtZV92YXIgPSBCb29sZWFuVmFyKCkNCiAg
ICArICAgIHR0ay5DaGVja2J1dHRvbih0b3BmcmFtZSwgdGV4dD0iU2hvdyBuYW1lIiwgY29tbWFu
ZD1fZG9fc2hvd25hbWUsDQogICAgKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9X3Nob3df
bmFtZV92YXIpIFwNCiAgICArICAgICAgICAuZ3JpZChjb2x1bW49MCwgcm93PTEsIHN0aWNreT0i
bnNldyIsIHBhZHg9Ii4wNWMiLCBwYWR5PSIwIC4wNWMiLA0KICAgICsgICAgICAgICAgICAgIGlw
YWR5PSIuMmMiKQ0KICAgICsNCiAgICArICAgIF9zaG93X2FsbF92YXIgPSBCb29sZWFuVmFyKCkN
CiAgICArICAgIHR0ay5DaGVja2J1dHRvbih0b3BmcmFtZSwgdGV4dD0iU2hvdyBhbGwiLCBjb21t
YW5kPV9kb19zaG93YWxsLA0KICAgICsgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPV9zaG93
X2FsbF92YXIpIFwNCiAgICArICAgICAgICAuZ3JpZChjb2x1bW49MSwgcm93PTEsIHN0aWNreT0i
bnNldyIsIHBhZHk9IjAgLjA1YyIpDQogICAgKw0KICAgICsgICAgIyBBbGxvdyB0aGUgc2hvdy1h
bGwgYW5kIHNpbmdsZS1tZW51IHN0YXR1cyB0byBiZSBxdWVyaWVkIHZpYSBwbGFpbiBnbG9iYWwN
CiAgICArICAgICMgUHl0aG9uIHZhcmlhYmxlcywgd2hpY2ggaXMgZmFzdGVyIGFuZCBzaW1wbGVy
DQogICAgKw0KICAgICsgICAgZGVmIHNob3dfYWxsX3VwZGF0ZWQoKl8pOg0KICAgICsgICAgICAg
IGdsb2JhbCBfc2hvd19hbGwNCiAgICArICAgICAgICBfc2hvd19hbGwgPSBfc2hvd19hbGxfdmFy
LmdldCgpDQogICAgKw0KICAgICsgICAgX3RyYWNlX3dyaXRlKF9zaG93X2FsbF92YXIsIHNob3df
YWxsX3VwZGF0ZWQpDQogICAgKyAgICBfc2hvd19hbGxfdmFyLnNldChGYWxzZSkNCiAgICArDQog
ICAgKyAgICBfc2luZ2xlX21lbnVfdmFyID0gQm9vbGVhblZhcigpDQogICAgKyAgICB0dGsuQ2hl
Y2tidXR0b24odG9wZnJhbWUsIHRleHQ9IlNpbmdsZS1tZW51IG1vZGUiLCBjb21tYW5kPV9kb190
cmVlX21vZGUsDQogICAgKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGU9X3NpbmdsZV9tZW51
X3ZhcikgXA0KICAgICsgICAgICAgIC5ncmlkKGNvbHVtbj0yLCByb3c9MSwgc3RpY2t5PSJuc2V3
IiwgcGFkeD0iLjA1YyIsIHBhZHk9IjAgLjA1YyIpDQogICAgKw0KICAgICsgICAgX2JhY2tidXR0
b24gPSB0dGsuQnV0dG9uKHRvcGZyYW1lLCB0ZXh0PSI8LS0iLCBjb21tYW5kPV9sZWF2ZV9tZW51
LA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlPSJkaXNhYmxlZCIpDQog
ICAgKyAgICBfYmFja2J1dHRvbi5ncmlkKGNvbHVtbj0wLCByb3c9NCwgc3RpY2t5PSJuc2V3Iiwg
cGFkeD0iLjA1YyIsIHBhZHk9IjAgLjA1YyIpDQogICAgKw0KICAgICsgICAgZGVmIHRyZWVfbW9k
ZV91cGRhdGVkKCpfKToNCiAgICArICAgICAgICBnbG9iYWwgX3NpbmdsZV9tZW51DQogICAgKyAg
ICAgICAgX3NpbmdsZV9tZW51ID0gX3NpbmdsZV9tZW51X3Zhci5nZXQoKQ0KICAgICsNCiAgICAr
ICAgICAgICBpZiBfc2luZ2xlX21lbnU6DQogICAgKyAgICAgICAgICAgIF9iYWNrYnV0dG9uLmdy
aWQoKQ0KICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIF9iYWNrYnV0dG9uLmdy
aWRfcmVtb3ZlKCkNCiAgICArDQogICAgKyAgICBfdHJhY2Vfd3JpdGUoX3NpbmdsZV9tZW51X3Zh
ciwgdHJlZV9tb2RlX3VwZGF0ZWQpDQogICAgKyAgICBfc2luZ2xlX21lbnVfdmFyLnNldChGYWxz
ZSkNCiAgICArDQogICAgKyAgICAjIENvbHVtbiB0byB0aGUgcmlnaHQgb2YgdGhlIGJ1dHRvbnMg
dGhhdCB0aGUgbWVudSBwYXRoIGV4dGVuZHMgaW50bywgc28NCiAgICArICAgICMgdGhhdCBpdCBj
YW4gZ3JvdyB3aWRlciB0aGFuIHRoZSBidXR0b25zDQogICAgKyAgICB0b3BmcmFtZS5jb2x1bW5j
b25maWd1cmUoNSwgd2VpZ2h0PTEpDQogICAgKw0KICAgICsgICAgX21lbnVwYXRoID0gdHRrLkxh
YmVsKHRvcGZyYW1lKQ0KICAgICsgICAgX21lbnVwYXRoLmdyaWQoY29sdW1uPTAsIHJvdz0zLCBj
b2x1bW5zcGFuPTYsIHN0aWNreT0idyIsIHBhZHg9IjAuMDVjIiwNCiAgICArICAgICAgICAgICAg
ICAgICAgIHBhZHk9IjAgLjA1YyIpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9jcmVhdGVfa2Nv
bmZpZ190cmVlX2FuZF9kZXNjKHBhcmVudCk6DQogICAgKyAgICAjIENyZWF0ZXMgYSBQYW5lZHdp
bmRvdyB3aXRoIGEgVHJlZXZpZXcgdGhhdCBzaG93cyBLY29uZmlnIG5vZGVzIGFuZCBhIFRleHQN
CiAgICArICAgICMgdGhhdCBzaG93cyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBzZWxlY3RlZCBub2Rl
LiBSZXR1cm5zIGEgdHVwbGUgd2l0aCB0aGUNCiAgICArICAgICMgUGFuZWR3aW5kb3cgYW5kIHRo
ZSBUcmVldmlldy4gVGhpcyBjb2RlIGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBtYWluIHdpbmRvdw0K
ICAgICsgICAgIyBhbmQgdGhlIGp1bXAtdG8gZGlhbG9nLg0KICAgICsNCiAgICArICAgIHBhbmVk
d2luZG93ID0gdHRrLlBhbmVkd2luZG93KHBhcmVudCwgb3JpZW50PVZFUlRJQ0FMKQ0KICAgICsN
CiAgICArICAgIHRyZWVfZnJhbWUsIHRyZWUgPSBfY3JlYXRlX2tjb25maWdfdHJlZShwYW5lZHdp
bmRvdykNCiAgICArICAgIGRlc2NfZnJhbWUsIGRlc2MgPSBfY3JlYXRlX2tjb25maWdfZGVzYyhw
YW5lZHdpbmRvdykNCiAgICArDQogICAgKyAgICBwYW5lZHdpbmRvdy5hZGQodHJlZV9mcmFtZSwg
d2VpZ2h0PTEpDQogICAgKyAgICBwYW5lZHdpbmRvdy5hZGQoZGVzY19mcmFtZSkNCiAgICArDQog
ICAgKyAgICBkZWYgdHJlZV9zZWxlY3QoXyk6DQogICAgKyAgICAgICAgIyBUaGUgVGV4dCB3aWRn
ZXQgZG9lcyBub3QgYWxsb3cgZWRpdGluZyB0aGUgdGV4dCBpbiBpdHMgZGlzYWJsZWQNCiAgICAr
ICAgICAgICAjIHN0YXRlLiBXZSBuZWVkIHRvIHRlbXBvcmFyaWx5IGVuYWJsZSBpdC4NCiAgICAr
ICAgICAgICBkZXNjWyJzdGF0ZSJdID0gIm5vcm1hbCINCiAgICArDQogICAgKyAgICAgICAgc2Vs
ID0gdHJlZS5zZWxlY3Rpb24oKQ0KICAgICsgICAgICAgIGlmIG5vdCBzZWw6DQogICAgKyAgICAg
ICAgICAgIGRlc2MuZGVsZXRlKCIxLjAiLCAiZW5kIikNCiAgICArICAgICAgICAgICAgZGVzY1si
c3RhdGUiXSA9ICJkaXNhYmxlZCINCiAgICArICAgICAgICAgICAgcmV0dXJuDQogICAgKw0KICAg
ICsgICAgICAgICMgVGV4dC5yZXBsYWNlKCkgaXMgbm90IGF2YWlsYWJsZSBpbiBQeXRob24gMidz
IFRraW50ZXINCiAgICArICAgICAgICBkZXNjLmRlbGV0ZSgiMS4wIiwgImVuZCIpDQogICAgKyAg
ICAgICAgZGVzYy5pbnNlcnQoImVuZCIsIF9pbmZvX3N0cihfaWRfdG9fbm9kZVtzZWxbMF1dKSkN
CiAgICArDQogICAgKyAgICAgICAgZGVzY1sic3RhdGUiXSA9ICJkaXNhYmxlZCINCiAgICArDQog
ICAgKyAgICB0cmVlLmJpbmQoIjw8VHJlZXZpZXdTZWxlY3Q+PiIsIHRyZWVfc2VsZWN0KQ0KICAg
ICsgICAgdHJlZS5iaW5kKCI8MT4iLCBfdHJlZV9jbGljaykNCiAgICArICAgIHRyZWUuYmluZCgi
PERvdWJsZS0xPiIsIF90cmVlX2RvdWJsZV9jbGljaykNCiAgICArICAgIHRyZWUuYmluZCgiPFJl
dHVybj4iLCBfdHJlZV9lbnRlcikNCiAgICArICAgIHRyZWUuYmluZCgiPEtQX0VudGVyPiIsIF90
cmVlX2VudGVyKQ0KICAgICsgICAgdHJlZS5iaW5kKCI8c3BhY2U+IiwgX3RyZWVfdG9nZ2xlKQ0K
ICAgICsgICAgdHJlZS5iaW5kKCJuIiwgX3RyZWVfc2V0X3ZhbCgwKSkNCiAgICArICAgIHRyZWUu
YmluZCgibSIsIF90cmVlX3NldF92YWwoMSkpDQogICAgKyAgICB0cmVlLmJpbmQoInkiLCBfdHJl
ZV9zZXRfdmFsKDIpKQ0KICAgICsNCiAgICArICAgIHJldHVybiBwYW5lZHdpbmRvdywgdHJlZQ0K
ICAgICsNCiAgICArDQogICAgK2RlZiBfY3JlYXRlX2tjb25maWdfdHJlZShwYXJlbnQpOg0KICAg
ICsgICAgIyBDcmVhdGVzIGEgVHJlZXZpZXcgZm9yIHNob3dpbmcgS2NvbmZpZyBub2Rlcw0KICAg
ICsNCiAgICArICAgIGZyYW1lID0gdHRrLkZyYW1lKHBhcmVudCkNCiAgICArDQogICAgKyAgICB0
cmVlID0gdHRrLlRyZWV2aWV3KGZyYW1lLCBzZWxlY3Rtb2RlPSJicm93c2UiLCBoZWlnaHQ9MjAs
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnM9KCJuYW1lIiwpKQ0KICAgICsg
ICAgdHJlZS5oZWFkaW5nKCIjMCIsIHRleHQ9Ik9wdGlvbiIsIGFuY2hvcj0idyIpDQogICAgKyAg
ICB0cmVlLmhlYWRpbmcoIm5hbWUiLCB0ZXh0PSJOYW1lIiwgYW5jaG9yPSJ3IikNCiAgICArDQog
ICAgKyAgICB0cmVlLnRhZ19jb25maWd1cmUoIm4tYm9vbCIsIGltYWdlPV9uX2Jvb2xfaW1nKQ0K
ICAgICsgICAgdHJlZS50YWdfY29uZmlndXJlKCJ5LWJvb2wiLCBpbWFnZT1feV9ib29sX2ltZykN
CiAgICArICAgIHRyZWUudGFnX2NvbmZpZ3VyZSgibS10cmkiLCBpbWFnZT1fbV90cmlfaW1nKQ0K
ICAgICsgICAgdHJlZS50YWdfY29uZmlndXJlKCJuLXRyaSIsIGltYWdlPV9uX3RyaV9pbWcpDQog
ICAgKyAgICB0cmVlLnRhZ19jb25maWd1cmUoIm0tdHJpIiwgaW1hZ2U9X21fdHJpX2ltZykNCiAg
ICArICAgIHRyZWUudGFnX2NvbmZpZ3VyZSgieS10cmkiLCBpbWFnZT1feV90cmlfaW1nKQ0KICAg
ICsgICAgdHJlZS50YWdfY29uZmlndXJlKCJtLW15IiwgaW1hZ2U9X21fbXlfaW1nKQ0KICAgICsg
ICAgdHJlZS50YWdfY29uZmlndXJlKCJ5LW15IiwgaW1hZ2U9X3lfbXlfaW1nKQ0KICAgICsgICAg
dHJlZS50YWdfY29uZmlndXJlKCJuLWxvY2tlZCIsIGltYWdlPV9uX2xvY2tlZF9pbWcpDQogICAg
KyAgICB0cmVlLnRhZ19jb25maWd1cmUoIm0tbG9ja2VkIiwgaW1hZ2U9X21fbG9ja2VkX2ltZykN
CiAgICArICAgIHRyZWUudGFnX2NvbmZpZ3VyZSgieS1sb2NrZWQiLCBpbWFnZT1feV9sb2NrZWRf
aW1nKQ0KICAgICsgICAgdHJlZS50YWdfY29uZmlndXJlKCJub3Qtc2VsZWN0ZWQiLCBpbWFnZT1f
bm90X3NlbGVjdGVkX2ltZykNCiAgICArICAgIHRyZWUudGFnX2NvbmZpZ3VyZSgic2VsZWN0ZWQi
LCBpbWFnZT1fc2VsZWN0ZWRfaW1nKQ0KICAgICsgICAgdHJlZS50YWdfY29uZmlndXJlKCJlZGl0
IiwgaW1hZ2U9X2VkaXRfaW1nKQ0KICAgICsgICAgdHJlZS50YWdfY29uZmlndXJlKCJpbnZpc2li
bGUiLCBmb3JlZ3JvdW5kPSJyZWQiKQ0KICAgICsNCiAgICArICAgIHRyZWUuZ3JpZChjb2x1bW49
MCwgcm93PTAsIHN0aWNreT0ibnNldyIpDQogICAgKw0KICAgICsgICAgX2FkZF92c2Nyb2xsYmFy
KGZyYW1lLCB0cmVlKQ0KICAgICsNCiAgICArICAgIGZyYW1lLmNvbHVtbmNvbmZpZ3VyZSgwLCB3
ZWlnaHQ9MSkNCiAgICArICAgIGZyYW1lLnJvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkNCiAgICAr
DQogICAgKyAgICAjIENyZWF0ZSBpdGVtcyBmb3IgYWxsIG1lbnUgbm9kZXMuIFRoZXNlIGNhbiBi
ZSBkZXRhY2hlZC9tb3ZlZCBsYXRlci4NCiAgICArICAgICMgTWljcm8tb3B0aW1pemUgdGhpcyBh
IGJpdC4NCiAgICArICAgIGluc2VydCA9IHRyZWUuaW5zZXJ0DQogICAgKyAgICBpZF8gPSBpZA0K
ICAgICsgICAgU3ltYm9sXyA9IFN5bWJvbA0KICAgICsgICAgZm9yIG5vZGUgaW4gX2tjb25mLm5v
ZGVfaXRlcigpOg0KICAgICsgICAgICAgIGl0ZW0gPSBub2RlLml0ZW0NCiAgICArICAgICAgICBp
bnNlcnQoIiIsICJlbmQiLCBpaWQ9aWRfKG5vZGUpLA0KICAgICsgICAgICAgICAgICAgICB2YWx1
ZXM9aXRlbS5uYW1lIGlmIGl0ZW0uX19jbGFzc19fIGlzIFN5bWJvbF8gZWxzZSAiIikNCiAgICAr
DQogICAgKyAgICByZXR1cm4gZnJhbWUsIHRyZWUNCiAgICArDQogICAgKw0KICAgICtkZWYgX2Ny
ZWF0ZV9rY29uZmlnX2Rlc2MocGFyZW50KToNCiAgICArICAgICMgQ3JlYXRlcyBhIFRleHQgZm9y
IHNob3dpbmcgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzZWxlY3RlZCBLY29uZmlnIG5vZGUNCiAg
ICArDQogICAgKyAgICBmcmFtZSA9IHR0ay5GcmFtZShwYXJlbnQpDQogICAgKw0KICAgICsgICAg
ZGVzYyA9IFRleHQoZnJhbWUsIGhlaWdodD0xMiwgd3JhcD0ibm9uZSIsIGJvcmRlcndpZHRoPTAs
DQogICAgKyAgICAgICAgICAgICAgICBzdGF0ZT0iZGlzYWJsZWQiKQ0KICAgICsgICAgZGVzYy5n
cmlkKGNvbHVtbj0wLCByb3c9MCwgc3RpY2t5PSJuc2V3IikNCiAgICArDQogICAgKyAgICAjIFdv
cmsgYXJvdW5kIG5vdCBiZWluZyB0byBDdHJsLUMvViB0ZXh0IGZyb20gYSBkaXNhYmxlZCBUZXh0
IHdpZGdldCwgd2l0aCBhDQogICAgKyAgICAjIHRpcCBmb3VuZCBpbiBodHRwczovL3N0YWNrb3Zl
cmZsb3cuY29tL3F1ZXN0aW9ucy8zODQyMTU1L2lzLXRoZXJlLWEtd2F5LXRvLW1ha2UtdGhlLXRr
aW50ZXItdGV4dC13aWRnZXQtcmVhZC1vbmx5DQogICAgKyAgICBkZXNjLmJpbmQoIjwxPiIsIGxh
bWJkYSBfOiBkZXNjLmZvY3VzX3NldCgpKQ0KICAgICsNCiAgICArICAgIF9hZGRfdnNjcm9sbGJh
cihmcmFtZSwgZGVzYykNCiAgICArDQogICAgKyAgICBmcmFtZS5jb2x1bW5jb25maWd1cmUoMCwg
d2VpZ2h0PTEpDQogICAgKyAgICBmcmFtZS5yb3djb25maWd1cmUoMCwgd2VpZ2h0PTEpDQogICAg
Kw0KICAgICsgICAgcmV0dXJuIGZyYW1lLCBkZXNjDQogICAgKw0KICAgICsNCiAgICArZGVmIF9h
ZGRfdnNjcm9sbGJhcihwYXJlbnQsIHdpZGdldCk6DQogICAgKyAgICAjIEFkZHMgYSB2ZXJ0aWNh
bCBzY3JvbGxiYXIgdG8gJ3dpZGdldCcgdGhhdCdzIG9ubHkgc2hvd24gYXMgbmVlZGVkDQogICAg
Kw0KICAgICsgICAgdnNjcm9sbGJhciA9IHR0ay5TY3JvbGxiYXIocGFyZW50LCBvcmllbnQ9InZl
cnRpY2FsIiwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9d2lk
Z2V0Lnl2aWV3KQ0KICAgICsgICAgdnNjcm9sbGJhci5ncmlkKGNvbHVtbj0xLCByb3c9MCwgc3Rp
Y2t5PSJucyIpDQogICAgKw0KICAgICsgICAgZGVmIHlzY3JvbGxjb21tYW5kKGZpcnN0LCBsYXN0
KToNCiAgICArICAgICAgICAjIE9ubHkgc2hvdyB0aGUgc2Nyb2xsYmFyIHdoZW4gbmVlZGVkLiAn
Zmlyc3QnIGFuZCAnbGFzdCcgYXJlDQogICAgKyAgICAgICAgIyBzdHJpbmdzLg0KICAgICsgICAg
ICAgIGlmIGZsb2F0KGZpcnN0KSA8PSAwLjAgYW5kIGZsb2F0KGxhc3QpID49IDEuMDoNCiAgICAr
ICAgICAgICAgICAgdnNjcm9sbGJhci5ncmlkX3JlbW92ZSgpDQogICAgKyAgICAgICAgZWxzZToN
CiAgICArICAgICAgICAgICAgdnNjcm9sbGJhci5ncmlkKCkNCiAgICArDQogICAgKyAgICAgICAg
dnNjcm9sbGJhci5zZXQoZmlyc3QsIGxhc3QpDQogICAgKw0KICAgICsgICAgd2lkZ2V0WyJ5c2Ny
b2xsY29tbWFuZCJdID0geXNjcm9sbGNvbW1hbmQNCiAgICArDQogICAgKw0KICAgICtkZWYgX2Ny
ZWF0ZV9zdGF0dXNfYmFyKCk6DQogICAgKyAgICAjIENyZWF0ZXMgdGhlIHN0YXR1cyBiYXIgYXQg
dGhlIGJvdHRvbSBvZiB0aGUgbWFpbiB3aW5kb3cNCiAgICArDQogICAgKyAgICBnbG9iYWwgX3N0
YXR1c19sYWJlbA0KICAgICsNCiAgICArICAgIF9zdGF0dXNfbGFiZWwgPSB0dGsuTGFiZWwoX3Jv
b3QsIGFuY2hvcj0iZSIsIHBhZGRpbmc9IjAgMCAwLjRjIDAiKQ0KICAgICsgICAgX3N0YXR1c19s
YWJlbC5ncmlkKGNvbHVtbj0wLCByb3c9Mywgc3RpY2t5PSJldyIpDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9zZXRfc3RhdHVzKHMpOg0KICAgICsgICAgIyBTZXRzIHRoZSB0ZXh0IGluIHRoZSBz
dGF0dXMgYmFyIHRvICdzJw0KICAgICsNCiAgICArICAgIF9zdGF0dXNfbGFiZWxbInRleHQiXSA9
IHMNCiAgICArDQogICAgKw0KICAgICtkZWYgX3NldF9jb25mX2NoYW5nZWQoY2hhbmdlZCk6DQog
ICAgKyAgICAjIFVwZGF0ZXMgdGhlIHN0YXR1cyByZS4gd2hldGhlciB0aGVyZSBhcmUgdW5zYXZl
ZCBjaGFuZ2VzDQogICAgKw0KICAgICsgICAgZ2xvYmFsIF9jb25mX2NoYW5nZWQNCiAgICArDQog
ICAgKyAgICBfY29uZl9jaGFuZ2VkID0gY2hhbmdlZA0KICAgICsgICAgaWYgY2hhbmdlZDoNCiAg
ICArICAgICAgICBfc2V0X3N0YXR1cygiTW9kaWZpZWQiKQ0KICAgICsNCiAgICArDQogICAgK2Rl
ZiBfdXBkYXRlX3RyZWUoKToNCiAgICArICAgICMgVXBkYXRlcyB0aGUgS2NvbmZpZyB0cmVlIGlu
IHRoZSBtYWluIHdpbmRvdyBieSBmaXJzdCBkZXRhY2hpbmcgYWxsIG5vZGVzDQogICAgKyAgICAj
IGFuZCB0aGVuIHVwZGF0aW5nIGFuZCByZWF0dGFjaGluZyB0aGVtLiBUaGUgdHJlZSBzdHJ1Y3R1
cmUgbWlnaHQgaGF2ZQ0KICAgICsgICAgIyBjaGFuZ2VkLg0KICAgICsNCiAgICArICAgICMgSWYg
YSBzZWxlY3RlZC9mb2N1c2VkIGl0ZW0gaXMgZGV0YWNoZWQgYW5kIGxhdGVyIHJlYXR0YWNoZWQs
IGl0IHN0YXlzDQogICAgKyAgICAjIHNlbGVjdGVkL2ZvY3VzZWQuIFRoYXQgY2FuIGdpdmUgbXVs
dGlwbGUgc2VsZWN0aW9ucyBldmVuIHRob3VnaA0KICAgICsgICAgIyBzZWxlY3Rtb2RlPWJyb3dz
ZS4gU2F2ZSBhbmQgbGF0ZXIgcmVzdG9yZSB0aGUgc2VsZWN0aW9uIGFuZCBmb2N1cyBhcyBhDQog
ICAgKyAgICAjIHdvcmthcm91bmQuDQogICAgKyAgICBvbGRfc2VsZWN0aW9uID0gX3RyZWUuc2Vs
ZWN0aW9uKCkNCiAgICArICAgIG9sZF9mb2N1cyA9IF90cmVlLmZvY3VzKCkNCiAgICArDQogICAg
KyAgICAjIERldGFjaCBhbGwgdHJlZSBpdGVtcyBiZWZvcmUgcmUtc3RyaW5naW5nIHRoZW0uIFRo
aXMgaXMgcmVsYXRpdmVseSBmYXN0LA0KICAgICsgICAgIyBsdWNraWx5Lg0KICAgICsgICAgX3Ry
ZWUuZGV0YWNoKCpfaWRfdG9fbm9kZS5rZXlzKCkpDQogICAgKw0KICAgICsgICAgaWYgX3Npbmds
ZV9tZW51Og0KICAgICsgICAgICAgIF9idWlsZF9tZW51X3RyZWUoKQ0KICAgICsgICAgZWxzZToN
CiAgICArICAgICAgICBfYnVpbGRfZnVsbF90cmVlKF9rY29uZi50b3Bfbm9kZSkNCiAgICArDQog
ICAgKyAgICBfdHJlZS5zZWxlY3Rpb25fc2V0KG9sZF9zZWxlY3Rpb24pDQogICAgKyAgICBfdHJl
ZS5mb2N1cyhvbGRfZm9jdXMpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9idWlsZF9mdWxsX3Ry
ZWUobWVudSk6DQogICAgKyAgICAjIFVwZGF0ZXMgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBtZW51
Lmxpc3QsIGluIGZ1bGwtdHJlZSBtb2RlLiBUbyBzcGVlZA0KICAgICsgICAgIyB0aGluZ3MgdXAs
IG9ubHkgb3BlbiBtZW51cyBhcmUgdXBkYXRlZC4gVGhlIG1lbnUtYXQtYS10aW1lIGxvZ2ljIGhl
cmUgaXMNCiAgICArICAgICMgdG8gZGVhbCB3aXRoIGludmlzaWJsZSBpdGVtcyB0aGF0IGNhbiBz
aG93IHVwIG91dHNpZGUgc2hvdy1hbGwgbW9kZSAoc2VlDQogICAgKyAgICAjIF9zaG93bl9mdWxs
X25vZGVzKCkpLg0KICAgICsNCiAgICArICAgIGZvciBub2RlIGluIF9zaG93bl9mdWxsX25vZGVz
KG1lbnUpOg0KICAgICsgICAgICAgIF9hZGRfdG9fdHJlZShub2RlLCBfa2NvbmYudG9wX25vZGUp
DQogICAgKw0KICAgICsgICAgICAgICMgX3Nob3duX2Z1bGxfbm9kZXMoKSBpbmNsdWRlcyBub2Rl
cyBmcm9tIG1lbnVzIHJvb3RlZCBhdCBzeW1ib2xzLCBzbw0KICAgICsgICAgICAgICMgd2Ugb25s
eSBuZWVkIHRvIGNoZWNrICJyZWFsIiBtZW51cy9jaG9pY2VzIGhlcmUNCiAgICArICAgICAgICBp
ZiBub2RlLmxpc3QgYW5kIG5vdCBpc2luc3RhbmNlKG5vZGUuaXRlbSwgU3ltYm9sKToNCiAgICAr
ICAgICAgICAgICAgaWYgX3RyZWUuaXRlbShpZChub2RlKSwgIm9wZW4iKToNCiAgICArICAgICAg
ICAgICAgICAgIF9idWlsZF9mdWxsX3RyZWUobm9kZSkNCiAgICArICAgICAgICAgICAgZWxzZToN
CiAgICArICAgICAgICAgICAgICAgICMgV2UncmUganVzdCBwcm9iaW5nIGhlcmUsIHNvIF9zaG93
bl9tZW51X25vZGVzKCkgd2lsbCB3b3JrDQogICAgKyAgICAgICAgICAgICAgICAjIGZpbmUsIGFu
ZCBtaWdodCBiZSBhIGJpdCBmYXN0ZXINCiAgICArICAgICAgICAgICAgICAgIHNob3duID0gX3No
b3duX21lbnVfbm9kZXMobm9kZSkNCiAgICArICAgICAgICAgICAgICAgIGlmIHNob3duOg0KICAg
ICsgICAgICAgICAgICAgICAgICAgICMgRHVtbXkgZWxlbWVudCB0byBtYWtlIHRoZSBvcGVuL2Ns
b3NlZCB0b2dnbGUgYXBwZWFyDQogICAgKyAgICAgICAgICAgICAgICAgICAgX3RyZWUubW92ZShp
ZChzaG93blswXSksIGlkKHNob3duWzBdLnBhcmVudCksICJlbmQiKQ0KICAgICsNCiAgICArDQog
ICAgK2RlZiBfc2hvd25fZnVsbF9ub2RlcyhtZW51KToNCiAgICArICAgICMgUmV0dXJucyB0aGUg
bGlzdCBvZiBtZW51IG5vZGVzIHNob3duIGluICdtZW51JyAoYSBtZW51IG5vZGUgZm9yIGEgbWVu
dSkNCiAgICArICAgICMgZm9yIGZ1bGwtdHJlZSBtb2RlLiBBIHRyaWNreSBkZXRhaWwgaXMgdGhh
dCBpbnZpc2libGUgaXRlbXMgbmVlZCB0byBiZQ0KICAgICsgICAgIyBzaG93biBpZiB0aGV5IGhh
dmUgdmlzaWJsZSBjaGlsZHJlbi4NCiAgICArDQogICAgKyAgICBkZWYgcmVjKG5vZGUpOg0KICAg
ICsgICAgICAgIHJlcyA9IFtdDQogICAgKw0KICAgICsgICAgICAgIHdoaWxlIG5vZGU6DQogICAg
KyAgICAgICAgICAgIGlmIF92aXNpYmxlKG5vZGUpIG9yIF9zaG93X2FsbDoNCiAgICArICAgICAg
ICAgICAgICAgIHJlcy5hcHBlbmQobm9kZSkNCiAgICArICAgICAgICAgICAgICAgIGlmIG5vZGUu
bGlzdCBhbmQgaXNpbnN0YW5jZShub2RlLml0ZW0sIFN5bWJvbCk6DQogICAgKyAgICAgICAgICAg
ICAgICAgICAgIyBOb2RlcyBmcm9tIG1lbnUgY3JlYXRlZCBmcm9tIGRlcGVuZGVuY2llcw0KICAg
ICsgICAgICAgICAgICAgICAgICAgIHJlcyArPSByZWMobm9kZS5saXN0KQ0KICAgICsNCiAgICAr
ICAgICAgICAgICAgZWxpZiBub2RlLmxpc3QgYW5kIGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBTeW1i
b2wpOg0KICAgICsgICAgICAgICAgICAgICAgIyBTaG93IGludmlzaWJsZSBzeW1ib2xzIChkZWZp
bmVkIHdpdGggZWl0aGVyICdjb25maWcnIGFuZA0KICAgICsgICAgICAgICAgICAgICAgIyAnbWVu
dWNvbmZpZycpIGlmIHRoZXkgaGF2ZSB2aXNpYmxlIGNoaWxkcmVuLiBUaGlzIGNhbiBoYXBwZW4N
CiAgICArICAgICAgICAgICAgICAgICMgZm9yIGFuIG0veS12YWx1ZWQgc3ltYm9sIHdpdGggYW4g
b3B0aW9uYWwgcHJvbXB0DQogICAgKyAgICAgICAgICAgICAgICAjICgncHJvbXB0ICJmb28iIGlz
IENPTkQnKSB0aGF0IGlzIGN1cnJlbnRseSBkaXNhYmxlZC4NCiAgICArICAgICAgICAgICAgICAg
IHNob3duX2NoaWxkcmVuID0gcmVjKG5vZGUubGlzdCkNCiAgICArICAgICAgICAgICAgICAgIGlm
IHNob3duX2NoaWxkcmVuOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQobm9k
ZSkNCiAgICArICAgICAgICAgICAgICAgICAgICByZXMgKz0gc2hvd25fY2hpbGRyZW4NCiAgICAr
DQogICAgKyAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQNCiAgICArDQogICAgKyAgICAgICAg
cmV0dXJuIHJlcw0KICAgICsNCiAgICArICAgIHJldHVybiByZWMobWVudS5saXN0KQ0KICAgICsN
CiAgICArDQogICAgK2RlZiBfYnVpbGRfbWVudV90cmVlKCk6DQogICAgKyAgICAjIFVwZGF0ZXMg
dGhlIHRyZWUgaW4gc2luZ2xlLW1lbnUgbW9kZS4gU2VlIF9idWlsZF9mdWxsX3RyZWUoKSBhcyB3
ZWxsLg0KICAgICsNCiAgICArICAgIGZvciBub2RlIGluIF9zaG93bl9tZW51X25vZGVzKF9jdXJf
bWVudSk6DQogICAgKyAgICAgICAgX2FkZF90b190cmVlKG5vZGUsIF9jdXJfbWVudSkNCiAgICAr
DQogICAgKw0KICAgICtkZWYgX3Nob3duX21lbnVfbm9kZXMobWVudSk6DQogICAgKyAgICAjIFVz
ZWQgZm9yIHNpbmdsZS1tZW51IG1vZGUuIFNpbWlsYXIgdG8gX3Nob3duX2Z1bGxfbm9kZXMoKSwg
YnV0IGRvZXNuJ3QNCiAgICArICAgICMgaW5jbHVkZSBjaGlsZHJlbiBvZiBzeW1ib2xzIGRlZmlu
ZWQgd2l0aCAnbWVudWNvbmZpZycuDQogICAgKw0KICAgICsgICAgZGVmIHJlYyhub2RlKToNCiAg
ICArICAgICAgICByZXMgPSBbXQ0KICAgICsNCiAgICArICAgICAgICB3aGlsZSBub2RlOg0KICAg
ICsgICAgICAgICAgICBpZiBfdmlzaWJsZShub2RlKSBvciBfc2hvd19hbGw6DQogICAgKyAgICAg
ICAgICAgICAgICByZXMuYXBwZW5kKG5vZGUpDQogICAgKyAgICAgICAgICAgICAgICBpZiBub2Rl
Lmxpc3QgYW5kIG5vdCBub2RlLmlzX21lbnVjb25maWc6DQogICAgKyAgICAgICAgICAgICAgICAg
ICAgcmVzICs9IHJlYyhub2RlLmxpc3QpDQogICAgKw0KICAgICsgICAgICAgICAgICBlbGlmIG5v
ZGUubGlzdCBhbmQgaXNpbnN0YW5jZShub2RlLml0ZW0sIFN5bWJvbCk6DQogICAgKyAgICAgICAg
ICAgICAgICBzaG93bl9jaGlsZHJlbiA9IHJlYyhub2RlLmxpc3QpDQogICAgKyAgICAgICAgICAg
ICAgICBpZiBzaG93bl9jaGlsZHJlbjoNCiAgICArICAgICAgICAgICAgICAgICAgICAjIEludmlz
aWJsZSBpdGVtIHdpdGggdmlzaWJsZSBjaGlsZHJlbg0KICAgICsgICAgICAgICAgICAgICAgICAg
IHJlcy5hcHBlbmQobm9kZSkNCiAgICArICAgICAgICAgICAgICAgICAgICBpZiBub3Qgbm9kZS5p
c19tZW51Y29uZmlnOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gc2hvd25f
Y2hpbGRyZW4NCiAgICArDQogICAgKyAgICAgICAgICAgIG5vZGUgPSBub2RlLm5leHQNCiAgICAr
DQogICAgKyAgICAgICAgcmV0dXJuIHJlcw0KICAgICsNCiAgICArICAgIHJldHVybiByZWMobWVu
dS5saXN0KQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfdmlzaWJsZShub2RlKToNCiAgICArICAg
ICMgUmV0dXJucyBUcnVlIGlmIHRoZSBub2RlIHNob3VsZCBhcHBlYXIgaW4gdGhlIG1lbnUgKG91
dHNpZGUgc2hvdy1hbGwNCiAgICArICAgICMgbW9kZSkNCiAgICArDQogICAgKyAgICByZXR1cm4g
bm9kZS5wcm9tcHQgYW5kIGV4cHJfdmFsdWUobm9kZS5wcm9tcHRbMV0pIGFuZCBub3QgXA0KICAg
ICsgICAgICAgIChub2RlLml0ZW0gPT0gTUVOVSBhbmQgbm90IGV4cHJfdmFsdWUobm9kZS52aXNp
YmlsaXR5KSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2FkZF90b190cmVlKG5vZGUsIHRvcCk6
DQogICAgKyAgICAjIEFkZHMgJ25vZGUnIHRvIHRoZSB0cmVlLCBhdCB0aGUgZW5kIG9mIGl0cyBt
ZW51LiBXZSByZWx5IG9uIGdvaW5nIHRocm91Z2gNCiAgICArICAgICMgdGhlIG5vZGVzIGxpbmVh
cmx5IHRvIGdldCB0aGUgY29ycmVjdCBvcmRlci4gJ3RvcCcgaG9sZHMgdGhlIG1lbnUgdGhhdA0K
ICAgICsgICAgIyBjb3JyZXNwb25kcyB0byB0aGUgdG9wLWxldmVsIG1lbnUsIGFuZCBjYW4gdmFy
eSBpbiBzaW5nbGUtbWVudSBtb2RlLg0KICAgICsNCiAgICArICAgIHBhcmVudCA9IG5vZGUucGFy
ZW50DQogICAgKyAgICBfdHJlZS5tb3ZlKGlkKG5vZGUpLCAiIiBpZiBwYXJlbnQgaXMgdG9wIGVs
c2UgaWQocGFyZW50KSwgImVuZCIpDQogICAgKyAgICBfdHJlZS5pdGVtKA0KICAgICsgICAgICAg
IGlkKG5vZGUpLA0KICAgICsgICAgICAgIHRleHQ9X25vZGVfc3RyKG5vZGUpLA0KICAgICsgICAg
ICAgICMgVGhlIF9zaG93X2FsbCB0ZXN0IGF2b2lkcyBzaG93aW5nIGludmlzaWJsZSBpdGVtcyBp
biByZWQgb3V0c2lkZQ0KICAgICsgICAgICAgICMgc2hvdy1hbGwgbW9kZSwgd2hpY2ggY291bGQg
bG9vayBjb25mdXNpbmcvYnJva2VuLiBJbnZpc2libGUgc3ltYm9scw0KICAgICsgICAgICAgICMg
YXJlIHNob3duIG91dHNpZGUgc2hvdy1hbGwgbW9kZSBpZiBhbiBpbnZpc2libGUgc3ltYm9sIGhh
cyB2aXNpYmxlDQogICAgKyAgICAgICAgIyBjaGlsZHJlbiBpbiBhbiBpbXBsaWNpdCBtZW51Lg0K
ICAgICsgICAgICAgIHRhZ3M9X2ltZ190YWcobm9kZSkgaWYgX3Zpc2libGUobm9kZSkgb3Igbm90
IF9zaG93X2FsbCBlbHNlDQogICAgKyAgICAgICAgICAgIF9pbWdfdGFnKG5vZGUpICsgIiBpbnZp
c2libGUiKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfbm9kZV9zdHIobm9kZSk6DQogICAgKyAg
ICAjIFJldHVybnMgdGhlIHN0cmluZyBzaG93biB0byB0aGUgcmlnaHQgb2YgdGhlIGltYWdlIChp
ZiBhbnkpIGZvciB0aGUgbm9kZQ0KICAgICsNCiAgICArICAgIGlmIG5vZGUucHJvbXB0Og0KICAg
ICsgICAgICAgIGlmIG5vZGUuaXRlbSA9PSBDT01NRU5UOg0KICAgICsgICAgICAgICAgICBzID0g
IioqKiB7fSAqKioiLmZvcm1hdChub2RlLnByb21wdFswXSkNCiAgICArICAgICAgICBlbHNlOg0K
ICAgICsgICAgICAgICAgICBzID0gbm9kZS5wcm9tcHRbMF0NCiAgICArDQogICAgKyAgICAgICAg
aWYgaXNpbnN0YW5jZShub2RlLml0ZW0sIFN5bWJvbCk6DQogICAgKyAgICAgICAgICAgIHN5bSA9
IG5vZGUuaXRlbQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyBQcmludCAiKE5FVykiIG5leHQg
dG8gc3ltYm9scyB3aXRob3V0IGEgdXNlciB2YWx1ZSAoZnJvbSBlLmcuIGENCiAgICArICAgICAg
ICAgICAgIyAuY29uZmlnKSwgYnV0IHNraXAgaXQgZm9yIGNob2ljZSBzeW1ib2xzIGluIGNob2lj
ZXMgaW4geSBtb2RlLA0KICAgICsgICAgICAgICAgICAjIGFuZCBmb3Igc3ltYm9scyBvZiBVTktO
T1dOIHR5cGUgKHdoaWNoIGdlbmVyYXRlIGEgd2FybmluZyB0aG91Z2gpDQogICAgKyAgICAgICAg
ICAgIGlmIHN5bS51c2VyX3ZhbHVlIGlzIE5vbmUgYW5kIHN5bS50eXBlIGFuZCBub3QgXA0KICAg
ICsgICAgICAgICAgICAgICAgKHN5bS5jaG9pY2UgYW5kIHN5bS5jaG9pY2UudHJpX3ZhbHVlID09
IDIpOg0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHMgKz0gIiAoTkVXKSINCiAgICArDQog
ICAgKyAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBTeW1ib2wpOg0KICAgICsgICAgICAg
ICMgU3ltYm9sIHdpdGhvdXQgcHJvbXB0IChjYW4gc2hvdyB1cCBpbiBzaG93LWFsbCkNCiAgICAr
ICAgICAgICBzID0gIjx7fT4iLmZvcm1hdChub2RlLml0ZW0ubmFtZSkNCiAgICArDQogICAgKyAg
ICBlbHNlOg0KICAgICsgICAgICAgICMgQ2hvaWNlIHdpdGhvdXQgcHJvbXB0LiBVc2Ugc3RhbmRh
cmRfc2NfZXhwcl9zdHIoKSBzbyB0aGF0IGl0IHNob3dzIHVwDQogICAgKyAgICAgICAgIyBhcyAn
PGNob2ljZSAobmFtZSBpZiBhbnkpPicuDQogICAgKyAgICAgICAgcyA9IHN0YW5kYXJkX3NjX2V4
cHJfc3RyKG5vZGUuaXRlbSkNCiAgICArDQogICAgKw0KICAgICsgICAgaWYgaXNpbnN0YW5jZShu
b2RlLml0ZW0sIFN5bWJvbCk6DQogICAgKyAgICAgICAgc3ltID0gbm9kZS5pdGVtDQogICAgKyAg
ICAgICAgaWYgc3ltLm9yaWdfdHlwZSA9PSBTVFJJTkc6DQogICAgKyAgICAgICAgICAgIHMgKz0g
IjogIiArIHN5bS5zdHJfdmFsdWUNCiAgICArICAgICAgICBlbGlmIHN5bS5vcmlnX3R5cGUgaW4g
KElOVCwgSEVYKToNCiAgICArICAgICAgICAgICAgcyA9ICIoe30pIHt9Ii5mb3JtYXQoc3ltLnN0
cl92YWx1ZSwgcykNCiAgICArDQogICAgKyAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBD
aG9pY2UpIGFuZCBub2RlLml0ZW0udHJpX3ZhbHVlID09IDI6DQogICAgKyAgICAgICAgIyBQcmlu
dCB0aGUgcHJvbXB0IG9mIHRoZSBzZWxlY3RlZCBzeW1ib2wgYWZ0ZXIgdGhlIGNob2ljZSBmb3IN
CiAgICArICAgICAgICAjIGNob2ljZXMgaW4geSBtb2RlDQogICAgKyAgICAgICAgc3ltID0gbm9k
ZS5pdGVtLnNlbGVjdGlvbg0KICAgICsgICAgICAgIGlmIHN5bToNCiAgICArICAgICAgICAgICAg
Zm9yIHN5bV9ub2RlIGluIHN5bS5ub2RlczoNCiAgICArICAgICAgICAgICAgICAgICMgVXNlIHRo
ZSBwcm9tcHQgdXNlZCBhdCB0aGlzIGNob2ljZSBsb2NhdGlvbiwgaW4gY2FzZSB0aGUNCiAgICAr
ICAgICAgICAgICAgICAgICMgY2hvaWNlIHN5bWJvbCBpcyBkZWZpbmVkIGluIG11bHRpcGxlIGxv
Y2F0aW9ucw0KICAgICsgICAgICAgICAgICAgICAgaWYgc3ltX25vZGUucGFyZW50IGlzIG5vZGUg
YW5kIHN5bV9ub2RlLnByb21wdDoNCiAgICArICAgICAgICAgICAgICAgICAgICBzICs9ICIgKHt9
KSIuZm9ybWF0KHN5bV9ub2RlLnByb21wdFswXSkNCiAgICArICAgICAgICAgICAgICAgICAgICBi
cmVhaw0KICAgICsgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgIyBJZiB0
aGUgc3ltYm9sIGlzbid0IGRlZmluZWQgYXQgdGhpcyBjaG9pY2UgbG9jYXRpb24sIHRoZW4NCiAg
ICArICAgICAgICAgICAgICAgICMganVzdCB1c2Ugd2hhdGV2ZXIgcHJvbXB0IHdlIGNhbiBmaW5k
IGZvciBpdA0KICAgICsgICAgICAgICAgICAgICAgZm9yIHN5bV9ub2RlIGluIHN5bS5ub2RlczoN
CiAgICArICAgICAgICAgICAgICAgICAgICBpZiBzeW1fbm9kZS5wcm9tcHQ6DQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgIHMgKz0gIiAoe30pIi5mb3JtYXQoc3ltX25vZGUucHJvbXB0WzBd
KQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsNCiAgICArICAgICMg
SW4gc2luZ2xlLW1lbnUgbW9kZSwgcHJpbnQgIi0tLT4iIG5leHQgdG8gbm9kZXMgdGhhdCBoYXZl
IG1lbnVzIHRoYXQgY2FuDQogICAgKyAgICAjIHBvdGVudGlhbGx5IGJlIGVudGVyZWQuIFByaW50
ICItLS0tIiBpZiB0aGUgbWVudSBpcyBlbXB0eS4gV2UgZG9uJ3QgYWxsb3cNCiAgICArICAgICMg
dGhvc2UgdG8gYmUgZW50ZXJlZC4NCiAgICArICAgIGlmIF9zaW5nbGVfbWVudSBhbmQgbm9kZS5p
c19tZW51Y29uZmlnOg0KICAgICsgICAgICAgIHMgKz0gIiAgLS0tPiIgaWYgX3Nob3duX21lbnVf
bm9kZXMobm9kZSkgZWxzZSAiICAtLS0tIg0KICAgICsNCiAgICArICAgIHJldHVybiBzDQogICAg
Kw0KICAgICsNCiAgICArZGVmIF9pbWdfdGFnKG5vZGUpOg0KICAgICsgICAgIyBSZXR1cm5zIHRo
ZSB0YWcgZm9yIHRoZSBpbWFnZSB0aGF0IHNob3VsZCBiZSBzaG93biBuZXh0IHRvICdub2RlJywg
b3IgdGhlDQogICAgKyAgICAjIGVtcHR5IHN0cmluZyBpZiBpdCBzaG91bGRuJ3QgaGF2ZSBhbiBp
bWFnZQ0KICAgICsNCiAgICArICAgIGl0ZW0gPSBub2RlLml0ZW0NCiAgICArDQogICAgKyAgICBp
ZiBpdGVtIGluIChNRU5VLCBDT01NRU5UKSBvciBub3QgaXRlbS5vcmlnX3R5cGU6DQogICAgKyAg
ICAgICAgcmV0dXJuICIiDQogICAgKw0KICAgICsgICAgaWYgaXRlbS5vcmlnX3R5cGUgaW4gKFNU
UklORywgSU5ULCBIRVgpOg0KICAgICsgICAgICAgIHJldHVybiAiZWRpdCINCiAgICArDQogICAg
KyAgICAjIEJPT0wgb3IgVFJJU1RBVEUNCiAgICArDQogICAgKyAgICBpZiBfaXNfeV9tb2RlX2No
b2ljZV9zeW0oaXRlbSk6DQogICAgKyAgICAgICAgIyBDaG9pY2Ugc3ltYm9sIGluIHktbW9kZSBj
aG9pY2UNCiAgICArICAgICAgICByZXR1cm4gInNlbGVjdGVkIiBpZiBpdGVtLmNob2ljZS5zZWxl
Y3Rpb24gaXMgaXRlbSBlbHNlICJub3Qtc2VsZWN0ZWQiDQogICAgKw0KICAgICsgICAgaWYgbGVu
KGl0ZW0uYXNzaWduYWJsZSkgPD0gMToNCiAgICArICAgICAgICAjIFBpbm5lZCB0byBhIHNpbmds
ZSB2YWx1ZQ0KICAgICsgICAgICAgIHJldHVybiAiIiBpZiBpc2luc3RhbmNlKGl0ZW0sIENob2lj
ZSkgZWxzZSBpdGVtLnN0cl92YWx1ZSArICItbG9ja2VkIg0KICAgICsNCiAgICArICAgIGlmIGl0
ZW0udHlwZSA9PSBCT09MOg0KICAgICsgICAgICAgIHJldHVybiBpdGVtLnN0cl92YWx1ZSArICIt
Ym9vbCINCiAgICArDQogICAgKyAgICAjIGl0ZW0udHlwZSA9PSBUUklTVEFURQ0KICAgICsgICAg
aWYgaXRlbS5hc3NpZ25hYmxlID09ICgxLCAyKToNCiAgICArICAgICAgICByZXR1cm4gaXRlbS5z
dHJfdmFsdWUgKyAiLW15Ig0KICAgICsgICAgcmV0dXJuIGl0ZW0uc3RyX3ZhbHVlICsgIi10cmki
DQogICAgKw0KICAgICsNCiAgICArZGVmIF9pc195X21vZGVfY2hvaWNlX3N5bShpdGVtKToNCiAg
ICArICAgICMgVGhlIGNob2ljZSBtb2RlIGlzIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB2aXNpYmls
aXR5IG9mIGNob2ljZSBzeW1ib2xzLCBzbw0KICAgICsgICAgIyB3ZSBjYW4gY2hlY2sgdGhlIGNo
b2ljZSBzeW1ib2xzJyBvd24gdmlzaWJpbGl0eSB0byBzZWUgaWYgdGhlIGNob2ljZSBpcw0KICAg
ICsgICAgIyBpbiB5IG1vZGUNCiAgICArICAgIHJldHVybiBpc2luc3RhbmNlKGl0ZW0sIFN5bWJv
bCkgYW5kIGl0ZW0uY2hvaWNlIGFuZCBpdGVtLnZpc2liaWxpdHkgPT0gMg0KICAgICsNCiAgICAr
DQogICAgK2RlZiBfdHJlZV9jbGljayhldmVudCk6DQogICAgKyAgICAjIENsaWNrIG9uIHRoZSBL
Y29uZmlnIFRyZWV2aWV3DQogICAgKw0KICAgICsgICAgdHJlZSA9IGV2ZW50LndpZGdldA0KICAg
ICsgICAgaWYgdHJlZS5pZGVudGlmeV9lbGVtZW50KGV2ZW50LngsIGV2ZW50LnkpID09ICJpbWFn
ZSI6DQogICAgKyAgICAgICAgaXRlbSA9IHRyZWUuaWRlbnRpZnlfcm93KGV2ZW50LnkpDQogICAg
KyAgICAgICAgIyBTZWxlY3QgdGhlIGl0ZW0gYmVmb3JlIHBvc3NpYmx5IHBvcHBpbmcgdXAgYSBk
aWFsb2cgZm9yDQogICAgKyAgICAgICAgIyBzdHJpbmcvaW50L2hleCBpdGVtcywgc28gdGhhdCBp
dHMgaGVscCBpcyB2aXNpYmxlDQogICAgKyAgICAgICAgX3NlbGVjdCh0cmVlLCBpdGVtKQ0KICAg
ICsgICAgICAgIF9jaGFuZ2Vfbm9kZShfaWRfdG9fbm9kZVtpdGVtXSwgdHJlZS53aW5mb190b3Bs
ZXZlbCgpKQ0KICAgICsgICAgICAgIHJldHVybiAiYnJlYWsiDQogICAgKw0KICAgICsNCiAgICAr
ZGVmIF90cmVlX2RvdWJsZV9jbGljayhldmVudCk6DQogICAgKyAgICAjIERvdWJsZS1jbGljayBv
biB0aGUgS2NvbmZpZyB0cmVldmlldw0KICAgICsNCiAgICArICAgICMgRG8gYW4gZXh0cmEgY2hl
Y2sgdG8gYXZvaWQgd2VpcmRuZXNzIHdoZW4gZG91YmxlLWNsaWNraW5nIGluIHRoZSB0cmVlDQog
ICAgKyAgICAjIGhlYWRpbmcgYXJlYQ0KICAgICsgICAgaWYgbm90IF9pbl9oZWFkaW5nKGV2ZW50
KToNCiAgICArICAgICAgICByZXR1cm4gX3RyZWVfZW50ZXIoZXZlbnQpDQogICAgKw0KICAgICsN
CiAgICArZGVmIF9pbl9oZWFkaW5nKGV2ZW50KToNCiAgICArICAgICMgUmV0dXJucyBUcnVlIGlm
ICdldmVudCcgdG9vayBwbGFjZSBpbiB0aGUgdHJlZSBoZWFkaW5nDQogICAgKw0KICAgICsgICAg
dHJlZSA9IGV2ZW50LndpZGdldA0KICAgICsgICAgcmV0dXJuIGhhc2F0dHIodHJlZSwgImlkZW50
aWZ5X3JlZ2lvbiIpIGFuZCBcDQogICAgKyAgICAgICAgdHJlZS5pZGVudGlmeV9yZWdpb24oZXZl
bnQueCwgZXZlbnQueSkgaW4gKCJoZWFkaW5nIiwgInNlcGFyYXRvciIpDQogICAgKw0KICAgICsN
CiAgICArZGVmIF90cmVlX2VudGVyKGV2ZW50KToNCiAgICArICAgICMgRW50ZXIgcHJlc3Mgb3Ig
ZG91YmxlLWNsaWNrIHdpdGhpbiB0aGUgS2NvbmZpZyB0cmVldmlldy4gUHJlZmVyIHRvDQogICAg
KyAgICAjIG9wZW4vY2xvc2UvZW50ZXIgbWVudXMsIGJ1dCB0b2dnbGUgdGhlIHZhbHVlIGlmIHRo
YXQncyBub3QgcG9zc2libGUuDQogICAgKw0KICAgICsgICAgdHJlZSA9IGV2ZW50LndpZGdldA0K
ICAgICsgICAgc2VsID0gdHJlZS5mb2N1cygpDQogICAgKyAgICBpZiBzZWw6DQogICAgKyAgICAg
ICAgbm9kZSA9IF9pZF90b19ub2RlW3NlbF0NCiAgICArDQogICAgKyAgICAgICAgaWYgdHJlZS5n
ZXRfY2hpbGRyZW4oc2VsKToNCiAgICArICAgICAgICAgICAgX3RyZWVfdG9nZ2xlX29wZW4oc2Vs
KQ0KICAgICsgICAgICAgIGVsaWYgX3NpbmdsZV9tZW51X21vZGVfbWVudShub2RlLCB0cmVlKToN
CiAgICArICAgICAgICAgICAgX2VudGVyX21lbnVfYW5kX3NlbGVjdF9maXJzdChub2RlKQ0KICAg
ICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIF9jaGFuZ2Vfbm9kZShub2RlLCB0cmVl
LndpbmZvX3RvcGxldmVsKCkpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiAiYnJlYWsiDQog
ICAgKw0KICAgICsNCiAgICArZGVmIF90cmVlX3RvZ2dsZShldmVudCk6DQogICAgKyAgICAjIFNw
YWNlIHByZXNzIHdpdGhpbiB0aGUgS2NvbmZpZyB0cmVldmlldy4gUHJlZmVyIHRvIHRvZ2dsZSB0
aGUgdmFsdWUsIGJ1dA0KICAgICsgICAgIyBvcGVuL2Nsb3NlL2VudGVyIHRoZSBtZW51IGlmIHRo
YXQncyBub3QgcG9zc2libGUuDQogICAgKw0KICAgICsgICAgdHJlZSA9IGV2ZW50LndpZGdldA0K
ICAgICsgICAgc2VsID0gdHJlZS5mb2N1cygpDQogICAgKyAgICBpZiBzZWw6DQogICAgKyAgICAg
ICAgbm9kZSA9IF9pZF90b19ub2RlW3NlbF0NCiAgICArDQogICAgKyAgICAgICAgaWYgX2NoYW5n
ZWFibGUobm9kZSk6DQogICAgKyAgICAgICAgICAgIF9jaGFuZ2Vfbm9kZShub2RlLCB0cmVlLndp
bmZvX3RvcGxldmVsKCkpDQogICAgKyAgICAgICAgZWxpZiBfc2luZ2xlX21lbnVfbW9kZV9tZW51
KG5vZGUsIHRyZWUpOg0KICAgICsgICAgICAgICAgICBfZW50ZXJfbWVudV9hbmRfc2VsZWN0X2Zp
cnN0KG5vZGUpDQogICAgKyAgICAgICAgZWxpZiB0cmVlLmdldF9jaGlsZHJlbihzZWwpOg0KICAg
ICsgICAgICAgICAgICBfdHJlZV90b2dnbGVfb3BlbihzZWwpDQogICAgKw0KICAgICsgICAgICAg
IHJldHVybiAiYnJlYWsiDQogICAgKw0KICAgICsNCiAgICArZGVmIF90cmVlX2xlZnRfa2V5KF8p
Og0KICAgICsgICAgIyBMZWZ0IGFycm93IGtleSBwcmVzcyB3aXRoaW4gdGhlIEtjb25maWcgdHJl
ZXZpZXcNCiAgICArDQogICAgKyAgICBpZiBfc2luZ2xlX21lbnU6DQogICAgKyAgICAgICAgIyBM
ZWF2ZSB0aGUgY3VycmVudCBtZW51IGluIHNpbmdsZS1tZW51IG1vZGUNCiAgICArICAgICAgICBf
bGVhdmVfbWVudSgpDQogICAgKyAgICAgICAgcmV0dXJuICJicmVhayINCiAgICArDQogICAgKyAg
ICAjIE90aGVyd2lzZSwgZGVmYXVsdCBhY3Rpb24NCiAgICArDQogICAgKw0KICAgICtkZWYgX3Ry
ZWVfcmlnaHRfa2V5KF8pOg0KICAgICsgICAgIyBSaWdodCBhcnJvdyBrZXkgcHJlc3Mgd2l0aGlu
IHRoZSBLY29uZmlnIHRyZWV2aWV3DQogICAgKw0KICAgICsgICAgc2VsID0gX3RyZWUuZm9jdXMo
KQ0KICAgICsgICAgaWYgc2VsOg0KICAgICsgICAgICAgIG5vZGUgPSBfaWRfdG9fbm9kZVtzZWxd
DQogICAgKyAgICAgICAgIyBJZiB0aGUgbm9kZSBjYW4gYmUgZW50ZXJlZCBpbiBzaW5nbGUtbWVu
dSBtb2RlLCBkbyBpdA0KICAgICsgICAgICAgIGlmIF9zaW5nbGVfbWVudV9tb2RlX21lbnUobm9k
ZSwgX3RyZWUpOg0KICAgICsgICAgICAgICAgICBfZW50ZXJfbWVudV9hbmRfc2VsZWN0X2ZpcnN0
KG5vZGUpDQogICAgKyAgICAgICAgICAgIHJldHVybiAiYnJlYWsiDQogICAgKw0KICAgICsgICAg
IyBPdGhlcndpc2UsIGRlZmF1bHQgYWN0aW9uDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zaW5n
bGVfbWVudV9tb2RlX21lbnUobm9kZSwgdHJlZSk6DQogICAgKyAgICAjIFJldHVybnMgVHJ1ZSBp
ZiBzaW5nbGUtbWVudSBtb2RlIGlzIG9uIGFuZCAnbm9kZScgaXMgYW4gKGludGVyZmFjZSkNCiAg
ICArICAgICMgbWVudSB0aGF0IGNhbiBiZSBlbnRlcmVkDQogICAgKw0KICAgICsgICAgcmV0dXJu
IF9zaW5nbGVfbWVudSBhbmQgdHJlZSBpcyBfdHJlZSBhbmQgbm9kZS5pc19tZW51Y29uZmlnIGFu
ZCBcDQogICAgKyAgICAgICAgICAgX3Nob3duX21lbnVfbm9kZXMobm9kZSkNCiAgICArDQogICAg
Kw0KICAgICtkZWYgX2NoYW5nZWFibGUobm9kZSk6DQogICAgKyAgICAjIFJldHVybnMgVHJ1ZSBp
ZiAnbm9kZScgaXMgYSBTeW1ib2wvQ2hvaWNlIHdob3NlIHZhbHVlIGNhbiBiZSBjaGFuZ2VkDQog
ICAgKw0KICAgICsgICAgc2MgPSBub2RlLml0ZW0NCiAgICArDQogICAgKyAgICBpZiBub3QgaXNp
bnN0YW5jZShzYywgKFN5bWJvbCwgQ2hvaWNlKSk6DQogICAgKyAgICAgICAgcmV0dXJuIEZhbHNl
DQogICAgKw0KICAgICsgICAgIyBUaGlzIHdpbGwgaGl0IGZvciBpbnZpc2libGUgc3ltYm9scywg
d2hpY2ggYXBwZWFyIGluIHNob3ctYWxsIG1vZGUgYW5kDQogICAgKyAgICAjIHdoZW4gYW4gaW52
aXNpYmxlIHN5bWJvbCBoYXMgdmlzaWJsZSBjaGlsZHJlbiAod2hpY2ggY2FuIGhhcHBlbiBlLmcu
IGZvcg0KICAgICsgICAgIyBzeW1ib2xzIHdpdGggb3B0aW9uYWwgcHJvbXB0cykNCiAgICArICAg
IGlmIG5vdCAobm9kZS5wcm9tcHQgYW5kIGV4cHJfdmFsdWUobm9kZS5wcm9tcHRbMV0pKToNCiAg
ICArICAgICAgICByZXR1cm4gRmFsc2UNCiAgICArDQogICAgKyAgICByZXR1cm4gc2Mub3JpZ190
eXBlIGluIChTVFJJTkcsIElOVCwgSEVYKSBvciBsZW4oc2MuYXNzaWduYWJsZSkgPiAxIFwNCiAg
ICArICAgICAgICAgICBvciBfaXNfeV9tb2RlX2Nob2ljZV9zeW0oc2MpDQogICAgKw0KICAgICsN
CiAgICArZGVmIF90cmVlX3RvZ2dsZV9vcGVuKGl0ZW0pOg0KICAgICsgICAgIyBPcGVucy9jbG9z
ZXMgdGhlIFRyZWV2aWV3IGl0ZW0gJ2l0ZW0nDQogICAgKw0KICAgICsgICAgaWYgX3RyZWUuaXRl
bShpdGVtLCAib3BlbiIpOg0KICAgICsgICAgICAgIF90cmVlLml0ZW0oaXRlbSwgb3Blbj1GYWxz
ZSkNCiAgICArICAgIGVsc2U6DQogICAgKyAgICAgICAgbm9kZSA9IF9pZF90b19ub2RlW2l0ZW1d
DQogICAgKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBTeW1ib2wpOg0KICAg
ICsgICAgICAgICAgICAjIENhbiBvbmx5IGdldCBoZXJlIGluIGZ1bGwtdHJlZSBtb2RlDQogICAg
KyAgICAgICAgICAgIF9idWlsZF9mdWxsX3RyZWUobm9kZSkNCiAgICArICAgICAgICBfdHJlZS5p
dGVtKGl0ZW0sIG9wZW49VHJ1ZSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX3RyZWVfc2V0X3Zh
bCh0cmlfdmFsKToNCiAgICArICAgIGRlZiB0cmVlX3NldF92YWwoZXZlbnQpOg0KICAgICsgICAg
ICAgICMgbi9tL3kgcHJlc3Mgd2l0aGluIHRoZSBLY29uZmlnIHRyZWV2aWV3DQogICAgKw0KICAg
ICsgICAgICAgICMgU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVt
IHRvICd0cmlfdmFsJywgaWYgdGhhdA0KICAgICsgICAgICAgICMgdmFsdWUgY2FuIGJlIGFzc2ln
bmVkDQogICAgKw0KICAgICsgICAgICAgIHNlbCA9IGV2ZW50LndpZGdldC5mb2N1cygpDQogICAg
KyAgICAgICAgaWYgc2VsOg0KICAgICsgICAgICAgICAgICBzYyA9IF9pZF90b19ub2RlW3NlbF0u
aXRlbQ0KICAgICsgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNjLCAoU3ltYm9sLCBDaG9pY2Up
KSBhbmQgdHJpX3ZhbCBpbiBzYy5hc3NpZ25hYmxlOg0KICAgICsgICAgICAgICAgICAgICAgX3Nl
dF92YWwoc2MsIHRyaV92YWwpDQogICAgKw0KICAgICsgICAgcmV0dXJuIHRyZWVfc2V0X3ZhbA0K
ICAgICsNCiAgICArDQogICAgK2RlZiBfdHJlZV9vcGVuKF8pOg0KICAgICsgICAgIyBMYXppbHkg
cG9wdWxhdGVzIHRoZSBLY29uZmlnIHRyZWUgd2hlbiBtZW51cyBhcmUgb3BlbmVkIGluIGZ1bGwt
dHJlZSBtb2RlDQogICAgKw0KICAgICsgICAgaWYgX3NpbmdsZV9tZW51Og0KICAgICsgICAgICAg
ICMgV29yayBhcm91bmQgaHR0cHM6Ly9jb3JlLnRjbC50ay90ay90a3R2aWV3P25hbWU9MzY4ZmE0
NTYxZQ0KICAgICsgICAgICAgICMgKCJ0dGs6OnRyZWV2aWV3IG9wZW4vY2xvc2VkIGluZGljYXRv
cnMgY2FuIGJlIHRvZ2dsZWQgd2hpbGUgaGlkZGVuIikuDQogICAgKyAgICAgICAgIyBDbGlja2lu
ZyBvbiB0aGUgaGlkZGVuIGluZGljYXRvciB3aWxsIGNhbGwgX2J1aWxkX2Z1bGxfdHJlZSgpIGlu
DQogICAgKyAgICAgICAgIyBzaW5nbGUtbWVudSBtb2RlIG90aGVyd2lzZS4NCiAgICArICAgICAg
ICByZXR1cm4NCiAgICArDQogICAgKyAgICBub2RlID0gX2lkX3RvX25vZGVbX3RyZWUuZm9jdXMo
KV0NCiAgICArICAgICMgX3Nob3duX2Z1bGxfbm9kZXMoKSBpbmNsdWRlcyBub2RlcyBmcm9tIG1l
bnVzIHJvb3RlZCBhdCBzeW1ib2xzLCBzbyB3ZQ0KICAgICsgICAgIyBvbmx5IG5lZWQgdG8gY2hl
Y2sgInJlYWwiIG1lbnVzIGFuZCBjaG9pY2VzIGhlcmUNCiAgICArICAgIGlmIG5vdCBpc2luc3Rh
bmNlKG5vZGUuaXRlbSwgU3ltYm9sKToNCiAgICArICAgICAgICBfYnVpbGRfZnVsbF90cmVlKG5v
ZGUpDQogICAgKw0KICAgICsNCiAgICArZGVmIF91cGRhdGVfbWVudV9wYXRoKF8pOg0KICAgICsg
ICAgIyBVcGRhdGVzIHRoZSBkaXNwbGF5ZWQgbWVudSBwYXRoIHdoZW4gbm9kZXMgYXJlIHNlbGVj
dGVkIGluIHRoZSBLY29uZmlnDQogICAgKyAgICAjIHRyZWV2aWV3DQogICAgKw0KICAgICsgICAg
c2VsID0gX3RyZWUuc2VsZWN0aW9uKCkNCiAgICArICAgIF9tZW51cGF0aFsidGV4dCJdID0gX21l
bnVfcGF0aF9pbmZvKF9pZF90b19ub2RlW3NlbFswXV0pIGlmIHNlbCBlbHNlICIiDQogICAgKw0K
ICAgICsNCiAgICArZGVmIF9pdGVtX3JvdyhpdGVtKToNCiAgICArICAgICMgUmV0dXJucyB0aGUg
cm93IG51bWJlciAnaXRlbScgYXBwZWFycyBvbiB3aXRoaW4gdGhlIEtjb25maWcgdHJlZXZpZXcs
DQogICAgKyAgICAjIHN0YXJ0aW5nIGZyb20gdGhlIHRvcCBvZiB0aGUgdHJlZS4gVXNlZCB0byBw
cmVzZXJ2ZSBzY3JvbGxpbmcuDQogICAgKyAgICAjDQogICAgKyAgICAjIHR0a1RyZWV2aWV3LmMg
aW4gdGhlIFRrIHNvdXJjZXMgZGVmaW5lcyBhIFJvd051bWJlcigpIGZ1bmN0aW9uIHRoYXQgZG9l
cw0KICAgICsgICAgIyB0aGUgc2FtZSB0aGluZywgYnV0IGl0J3Mgbm90IGV4cG9zZWQuDQogICAg
Kw0KICAgICsgICAgcm93ID0gMA0KICAgICsNCiAgICArICAgIHdoaWxlIFRydWU6DQogICAgKyAg
ICAgICAgcHJldiA9IF90cmVlLnByZXYoaXRlbSkNCiAgICArICAgICAgICBpZiBwcmV2Og0KICAg
ICsgICAgICAgICAgICBpdGVtID0gcHJldg0KICAgICsgICAgICAgICAgICByb3cgKz0gX25fcm93
cyhpdGVtKQ0KICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIGl0ZW0gPSBfdHJl
ZS5wYXJlbnQoaXRlbSkNCiAgICArICAgICAgICAgICAgaWYgbm90IGl0ZW06DQogICAgKyAgICAg
ICAgICAgICAgICByZXR1cm4gcm93DQogICAgKyAgICAgICAgICAgIHJvdyArPSAxDQogICAgKw0K
ICAgICsNCiAgICArZGVmIF9uX3Jvd3MoaXRlbSk6DQogICAgKyAgICAjIF9pdGVtX3JvdygpIGhl
bHBlci4gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJvd3Mgb2NjdXBpZWQgYnkgJ2l0ZW0nIGFuZCAj
DQogICAgKyAgICAjIGl0cyBjaGlsZHJlbi4NCiAgICArDQogICAgKyAgICByb3dzID0gMQ0KICAg
ICsNCiAgICArICAgIGlmIF90cmVlLml0ZW0oaXRlbSwgIm9wZW4iKToNCiAgICArICAgICAgICBm
b3IgY2hpbGQgaW4gX3RyZWUuZ2V0X2NoaWxkcmVuKGl0ZW0pOg0KICAgICsgICAgICAgICAgICBy
b3dzICs9IF9uX3Jvd3MoY2hpbGQpDQogICAgKw0KICAgICsgICAgcmV0dXJuIHJvd3MNCiAgICAr
DQogICAgKw0KICAgICtkZWYgX2F0dGFjaGVkKGl0ZW0pOg0KICAgICsgICAgIyBIZXVyaXN0aWMg
Zm9yIGNoZWNraW5nIGlmIGEgVHJlZXZpZXcgaXRlbSBpcyBhdHRhY2hlZC4gRG9lc24ndCBzZWVt
IHRvIGJlDQogICAgKyAgICAjIGdvb2QgQVBJcyBmb3IgdGhpcy4gTWlnaHQgZmFpbCBmb3Igc3Vw
ZXItb2JzY3VyZSBjYXNlcyB3aXRoIHRpbnkgdHJlZXMsDQogICAgKyAgICAjIGJ1dCB5b3UnZCBq
dXN0IGdldCBhIHNtYWxsIHNjcm9sbCBtZXNzLXVwLg0KICAgICsNCiAgICArICAgIHJldHVybiBi
b29sKF90cmVlLm5leHQoaXRlbSkgb3IgX3RyZWUucHJldihpdGVtKSBvciBfdHJlZS5wYXJlbnQo
aXRlbSkpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9jaGFuZ2Vfbm9kZShub2RlLCBwYXJlbnQp
Og0KICAgICsgICAgIyBUb2dnbGVzL2NoYW5nZXMgdGhlIHZhbHVlIG9mICdub2RlJy4gJ3BhcmVu
dCcgaXMgdGhlIHBhcmVudCB3aW5kb3cNCiAgICArICAgICMgKGVpdGhlciB0aGUgbWFpbiB3aW5k
b3cgb3IgdGhlIGp1bXAtdG8gZGlhbG9nKSwgaW4gY2FzZSB3ZSBuZWVkIHRvIHBvcCB1cA0KICAg
ICsgICAgIyBhIGRpYWxvZy4NCiAgICArDQogICAgKyAgICBpZiBub3QgX2NoYW5nZWFibGUobm9k
ZSk6DQogICAgKyAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsgICAgIyBzYyA9IHN5bWJvbC9j
aG9pY2UNCiAgICArICAgIHNjID0gbm9kZS5pdGVtDQogICAgKw0KICAgICsgICAgaWYgc2MudHlw
ZSBpbiAoSU5ULCBIRVgsIFNUUklORyk6DQogICAgKyAgICAgICAgcyA9IF9zZXRfdmFsX2RpYWxv
Zyhub2RlLCBwYXJlbnQpDQogICAgKw0KICAgICsgICAgICAgICMgVGtpbnRlciBjYW4gcmV0dXJu
ICd1bmljb2RlJyBzdHJpbmdzIG9uIFB5dGhvbiAyLCB3aGljaCBLY29uZmlnbGliDQogICAgKyAg
ICAgICAgIyBjYW4ndCBkZWFsIHdpdGguIFVURi04LWVuY29kZSB0aGUgc3RyaW5nIHRvIHdvcmsg
YXJvdW5kIGl0Lg0KICAgICsgICAgICAgIGlmIF9QWTIgYW5kIGlzaW5zdGFuY2UocywgdW5pY29k
ZSk6DQogICAgKyAgICAgICAgICAgIHMgPSBzLmVuY29kZSgidXRmLTgiLCAiaWdub3JlIikNCiAg
ICArDQogICAgKyAgICAgICAgaWYgcyBpcyBub3QgTm9uZToNCiAgICArICAgICAgICAgICAgX3Nl
dF92YWwoc2MsIHMpDQogICAgKw0KICAgICsgICAgZWxpZiBsZW4oc2MuYXNzaWduYWJsZSkgPT0g
MToNCiAgICArICAgICAgICAjIEhhbmRsZXMgY2hvaWNlIHN5bWJvbHMgZm9yIGNob2ljZXMgaW4g
eSBtb2RlLCB3aGljaCBhcmUgYSBzcGVjaWFsDQogICAgKyAgICAgICAgIyBjYXNlOiAuYXNzaWdu
YWJsZSBjYW4gYmUgKDIsKSB3aGlsZSAudHJpX3ZhbHVlIGlzIDAuDQogICAgKyAgICAgICAgX3Nl
dF92YWwoc2MsIHNjLmFzc2lnbmFibGVbMF0pDQogICAgKw0KICAgICsgICAgZWxzZToNCiAgICAr
ICAgICAgICAjIFNldCB0aGUgc3ltYm9sIHRvIHRoZSB2YWx1ZSBhZnRlciB0aGUgY3VycmVudCB2
YWx1ZSBpbg0KICAgICsgICAgICAgICMgc2MuYXNzaWduYWJsZSwgd2l0aCB3cmFwcGluZw0KICAg
ICsgICAgICAgIHZhbF9pbmRleCA9IHNjLmFzc2lnbmFibGUuaW5kZXgoc2MudHJpX3ZhbHVlKQ0K
ICAgICsgICAgICAgIF9zZXRfdmFsKHNjLCBzYy5hc3NpZ25hYmxlWyh2YWxfaW5kZXggKyAxKSAl
IGxlbihzYy5hc3NpZ25hYmxlKV0pDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zZXRfdmFsKHNj
LCB2YWwpOg0KICAgICsgICAgIyBXcmFwcGVyIGFyb3VuZCBTeW1ib2wvQ2hvaWNlLnNldF92YWx1
ZSgpIGZvciB1cGRhdGluZyB0aGUgbWVudSBzdGF0ZSBhbmQNCiAgICArICAgICMgX2NvbmZfY2hh
bmdlZA0KICAgICsNCiAgICArICAgICMgVXNlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Yg
dHJpc3RhdGUgdmFsdWVzLiBUaGlzIG1ha2VzIHRoZSBmb3JtYXQNCiAgICArICAgICMgY29uc2lz
dGVudCBmb3IgYWxsIHN5bWJvbCB0eXBlcy4NCiAgICArICAgIGlmIHZhbCBpbiBUUklfVE9fU1RS
Og0KICAgICsgICAgICAgIHZhbCA9IFRSSV9UT19TVFJbdmFsXQ0KICAgICsNCiAgICArICAgIGlm
IHZhbCAhPSBzYy5zdHJfdmFsdWU6DQogICAgKyAgICAgICAgc2Muc2V0X3ZhbHVlKHZhbCkNCiAg
ICArICAgICAgICBfc2V0X2NvbmZfY2hhbmdlZChUcnVlKQ0KICAgICsNCiAgICArICAgICAgICAj
IFVwZGF0ZSB0aGUgdHJlZSBhbmQgdHJ5IHRvIHByZXNlcnZlIHRoZSBzY3JvbGwuIERvIGEgY2hl
YXBlciB2YXJpYW50DQogICAgKyAgICAgICAgIyB0aGFuIGluIHRoZSBzaG93LWFsbCBjYXNlLCB0
aGF0IG1pZ2h0IG1lc3MgdXAgdGhlIHNjcm9sbCBzbGlnaHRseSBpbg0KICAgICsgICAgICAgICMg
cmFyZSBjYXNlcywgYnV0IGlzIGZhc3QgYW5kIGZsaWNrZXItZnJlZS4NCiAgICArDQogICAgKyAg
ICAgICAgc3RheXB1dCA9IF9sb2NfcmVmX2l0ZW0oKSAgIyBJdGVtIHRvIHByZXNlcnZlIHNjcm9s
bCBmb3INCiAgICArICAgICAgICBvbGRfcm93ID0gX2l0ZW1fcm93KHN0YXlwdXQpDQogICAgKw0K
ICAgICsgICAgICAgIF91cGRhdGVfdHJlZSgpDQogICAgKw0KICAgICsgICAgICAgICMgSWYgdGhl
IHJlZmVyZW5jZSBpdGVtIGRpc2FwcGVhcmVkIChjYW4gaGFwcGVuIGlmIHRoZSBjaGFuZ2Ugd2Fz
IGRvbmUNCiAgICArICAgICAgICAjIGZyb20gdGhlIGp1bXAtdG8gZGlhbG9nKSwgdGhlbiBhdm9p
ZCBtZXNzaW5nIHdpdGggdGhlIHNjcm9sbCBhbmQgaG9wZQ0KICAgICsgICAgICAgICMgZm9yIHRo
ZSBiZXN0DQogICAgKyAgICAgICAgaWYgX2F0dGFjaGVkKHN0YXlwdXQpOg0KICAgICsgICAgICAg
ICAgICBfdHJlZS55dmlld19zY3JvbGwoX2l0ZW1fcm93KHN0YXlwdXQpIC0gb2xkX3JvdywgInVu
aXRzIikNCiAgICArDQogICAgKyAgICAgICAgaWYgX2p1bXBfdG9fdHJlZToNCiAgICArICAgICAg
ICAgICAgX3VwZGF0ZV9qdW1wX3RvX2Rpc3BsYXkoKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBf
c2V0X3ZhbF9kaWFsb2cobm9kZSwgcGFyZW50KToNCiAgICArICAgICMgUG9wcyB1cCBhIGRpYWxv
ZyBmb3Igc2V0dGluZyB0aGUgdmFsdWUgb2YgdGhlIHN0cmluZy9pbnQvaGV4DQogICAgKyAgICAj
IHN5bWJvbCBhdCBub2RlICdub2RlJy4gJ3BhcmVudCcgaXMgdGhlIHBhcmVudCB3aW5kb3cuDQog
ICAgKw0KICAgICsgICAgZGVmIG9rKF89Tm9uZSk6DQogICAgKyAgICAgICAgIyBObyAnbm9ubG9j
YWwnIGluIFB5dGhvbiAyDQogICAgKyAgICAgICAgZ2xvYmFsIF9lbnRyeV9yZXMNCiAgICArDQog
ICAgKyAgICAgICAgcyA9IGVudHJ5LmdldCgpDQogICAgKyAgICAgICAgaWYgc3ltLnR5cGUgPT0g
SEVYIGFuZCBub3Qgcy5zdGFydHN3aXRoKCgiMHgiLCAiMFgiKSk6DQogICAgKyAgICAgICAgICAg
IHMgPSAiMHgiICsgcw0KICAgICsNCiAgICArICAgICAgICBpZiBfY2hlY2tfdmFsaWQoZGlhbG9n
LCBlbnRyeSwgc3ltLCBzKToNCiAgICArICAgICAgICAgICAgX2VudHJ5X3JlcyA9IHMNCiAgICAr
ICAgICAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQ0KICAgICsNCiAgICArICAgIGRlZiBjYW5jZWwo
Xz1Ob25lKToNCiAgICArICAgICAgICBnbG9iYWwgX2VudHJ5X3Jlcw0KICAgICsgICAgICAgIF9l
bnRyeV9yZXMgPSBOb25lDQogICAgKyAgICAgICAgZGlhbG9nLmRlc3Ryb3koKQ0KICAgICsNCiAg
ICArICAgIHN5bSA9IG5vZGUuaXRlbQ0KICAgICsNCiAgICArICAgIGRpYWxvZyA9IFRvcGxldmVs
KHBhcmVudCkNCiAgICArICAgIGRpYWxvZy50aXRsZSgiRW50ZXIge30gdmFsdWUiLmZvcm1hdChU
WVBFX1RPX1NUUltzeW0udHlwZV0pKQ0KICAgICsgICAgZGlhbG9nLnJlc2l6YWJsZShGYWxzZSwg
RmFsc2UpDQogICAgKyAgICBkaWFsb2cudHJhbnNpZW50KHBhcmVudCkNCiAgICArICAgIGRpYWxv
Zy5wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIGNhbmNlbCkNCiAgICArDQogICAgKyAgICB0
dGsuTGFiZWwoZGlhbG9nLCB0ZXh0PW5vZGUucHJvbXB0WzBdICsgIjoiKSBcDQogICAgKyAgICAg
ICAgLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBjb2x1bW5zcGFuPTIsIHN0aWNreT0idyIsIHBhZHg9
Ii4zYyIsDQogICAgKyAgICAgICAgICAgICAgcGFkeT0iLjJjIC4wNWMiKQ0KICAgICsNCiAgICAr
ICAgIGVudHJ5ID0gdHRrLkVudHJ5KGRpYWxvZywgd2lkdGg9MzApDQogICAgKyAgICAjIFN0YXJ0
IHdpdGggdGhlIHByZXZpb3VzIHZhbHVlIGluIHRoZSBlZGl0Ym94LCBzZWxlY3RlZA0KICAgICsg
ICAgZW50cnkuaW5zZXJ0KDAsIHN5bS5zdHJfdmFsdWUpDQogICAgKyAgICBlbnRyeS5zZWxlY3Rp
b25fcmFuZ2UoMCwgImVuZCIpDQogICAgKyAgICBlbnRyeS5ncmlkKGNvbHVtbj0wLCByb3c9MSwg
Y29sdW1uc3Bhbj0yLCBzdGlja3k9ImV3IiwgcGFkeD0iLjNjIikNCiAgICArICAgIGVudHJ5LmZv
Y3VzX3NldCgpDQogICAgKw0KICAgICsgICAgcmFuZ2VfaW5mbyA9IF9yYW5nZV9pbmZvKHN5bSkN
CiAgICArICAgIGlmIHJhbmdlX2luZm86DQogICAgKyAgICAgICAgdHRrLkxhYmVsKGRpYWxvZywg
dGV4dD1yYW5nZV9pbmZvKSBcDQogICAgKyAgICAgICAgICAgIC5ncmlkKGNvbHVtbj0wLCByb3c9
MiwgY29sdW1uc3Bhbj0yLCBzdGlja3k9InciLCBwYWR4PSIuM2MiLA0KICAgICsgICAgICAgICAg
ICAgICAgICBwYWR5PSIuMmMgMCIpDQogICAgKw0KICAgICsgICAgdHRrLkJ1dHRvbihkaWFsb2cs
IHRleHQ9Ik9LIiwgY29tbWFuZD1vaykgXA0KICAgICsgICAgICAgIC5ncmlkKGNvbHVtbj0wLCBy
b3c9NCBpZiByYW5nZV9pbmZvIGVsc2UgMywgc3RpY2t5PSJlIiwgcGFkeD0iLjNjIiwNCiAgICAr
ICAgICAgICAgICAgICBwYWR5PSIuNGMiKQ0KICAgICsNCiAgICArICAgIHR0ay5CdXR0b24oZGlh
bG9nLCB0ZXh0PSJDYW5jZWwiLCBjb21tYW5kPWNhbmNlbCkgXA0KICAgICsgICAgICAgIC5ncmlk
KGNvbHVtbj0xLCByb3c9NCBpZiByYW5nZV9pbmZvIGVsc2UgMywgcGFkeD0iMCAuM2MiKQ0KICAg
ICsNCiAgICArICAgICMgR2l2ZSBhbGwgaG9yaXpvbnRhbCBzcGFjZSB0byB0aGUgZ3JpZCBjZWxs
IHdpdGggdGhlIE9LIGJ1dHRvbiwgc28gdGhhdA0KICAgICsgICAgIyBDYW5jZWwgbW92ZXMgdG8g
dGhlIHJpZ2h0DQogICAgKyAgICBkaWFsb2cuY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQ0K
ICAgICsNCiAgICArICAgIF9jZW50ZXJfb25fcm9vdChkaWFsb2cpDQogICAgKw0KICAgICsgICAg
IyBIYWNrIHRvIHNjcm9sbCB0aGUgZW50cnkgc28gdGhhdCB0aGUgZW5kIG9mIHRoZSB0ZXh0IGlz
IHNob3duLCBmcm9tDQogICAgKyAgICAjIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rp
b25zLzI5MzM0NTQ0L3doeS1kb2VzLXRraW50ZXJzLWVudHJ5LXh2aWV3LW1vdmV0by1mYWlsLg0K
ICAgICsgICAgIyBSZWxhdGVkIFRrIHRpY2tldDogaHR0cHM6Ly9jb3JlLnRjbC50ay90ay9pbmZv
LzI1MTMxODZmZmYNCiAgICArICAgIGRlZiBzY3JvbGxfZW50cnkoXyk6DQogICAgKyAgICAgICAg
X3Jvb3QudXBkYXRlX2lkbGV0YXNrcygpDQogICAgKyAgICAgICAgZW50cnkudW5iaW5kKCI8RXhw
b3NlPiIpDQogICAgKyAgICAgICAgZW50cnkueHZpZXdfbW92ZXRvKDEpDQogICAgKyAgICBlbnRy
eS5iaW5kKCI8RXhwb3NlPiIsIHNjcm9sbF9lbnRyeSkNCiAgICArDQogICAgKyAgICAjIFRoZSBk
aWFsb2cgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSBjYW4gZ3JhYiB0aGUgaW5wdXQNCiAgICAr
ICAgIGRpYWxvZy53YWl0X3Zpc2liaWxpdHkoKQ0KICAgICsgICAgZGlhbG9nLmdyYWJfc2V0KCkN
CiAgICArDQogICAgKyAgICBkaWFsb2cuYmluZCgiPFJldHVybj4iLCBvaykNCiAgICArICAgIGRp
YWxvZy5iaW5kKCI8S1BfRW50ZXI+Iiwgb2spDQogICAgKyAgICBkaWFsb2cuYmluZCgiPEVzY2Fw
ZT4iLCBjYW5jZWwpDQogICAgKw0KICAgICsgICAgIyBXYWl0IGZvciB0aGUgdXNlciB0byBiZSBk
b25lIHdpdGggdGhlIGRpYWxvZw0KICAgICsgICAgcGFyZW50LndhaXRfd2luZG93KGRpYWxvZykN
CiAgICArDQogICAgKyAgICAjIFJlZ3JhYiB0aGUgaW5wdXQgaW4gdGhlIHBhcmVudA0KICAgICsg
ICAgcGFyZW50LmdyYWJfc2V0KCkNCiAgICArDQogICAgKyAgICByZXR1cm4gX2VudHJ5X3Jlcw0K
ICAgICsNCiAgICArDQogICAgK2RlZiBfY2VudGVyX29uX3Jvb3QoZGlhbG9nKToNCiAgICArICAg
ICMgQ2VudGVycyAnZGlhbG9nJyBvbiB0aGUgcm9vdCB3aW5kb3cuIEl0IG9mdGVuIGVuZHMgdXAg
YXQgc29tZSBiYWQgcGxhY2UNCiAgICArICAgICMgbGlrZSB0aGUgdG9wLWxlZnQgY29ybmVyIG9m
IHRoZSBzY3JlZW4gb3RoZXJ3aXNlLiBTZWUgdGhlIG1lbnVjb25maWcoKQ0KICAgICsgICAgIyBm
dW5jdGlvbiwgd2hpY2ggaGFzIHNpbWlsYXIgbG9naWMuDQogICAgKw0KICAgICsgICAgZGlhbG9n
LndpdGhkcmF3KCkNCiAgICArICAgIF9yb290LnVwZGF0ZV9pZGxldGFza3MoKQ0KICAgICsNCiAg
ICArICAgIGRpYWxvZ193aWR0aCA9IGRpYWxvZy53aW5mb19yZXF3aWR0aCgpDQogICAgKyAgICBk
aWFsb2dfaGVpZ2h0ID0gZGlhbG9nLndpbmZvX3JlcWhlaWdodCgpDQogICAgKw0KICAgICsgICAg
c2NyZWVuX3dpZHRoID0gX3Jvb3Qud2luZm9fc2NyZWVud2lkdGgoKQ0KICAgICsgICAgc2NyZWVu
X2hlaWdodCA9IF9yb290LndpbmZvX3NjcmVlbmhlaWdodCgpDQogICAgKw0KICAgICsgICAgeCA9
IF9yb290LndpbmZvX3Jvb3R4KCkgKyAoX3Jvb3Qud2luZm9fd2lkdGgoKSAtIGRpYWxvZ193aWR0
aCkvLzINCiAgICArICAgIHkgPSBfcm9vdC53aW5mb19yb290eSgpICsgKF9yb290LndpbmZvX2hl
aWdodCgpIC0gZGlhbG9nX2hlaWdodCkvLzINCiAgICArDQogICAgKyAgICAjIENsYW1wIHNvIHRo
YXQgbm8gcGFydCBvZiB0aGUgZGlhbG9nIGlzIG91dHNpZGUgdGhlIHNjcmVlbg0KICAgICsgICAg
aWYgeCArIGRpYWxvZ193aWR0aCA+IHNjcmVlbl93aWR0aDoNCiAgICArICAgICAgICB4ID0gc2Ny
ZWVuX3dpZHRoIC0gZGlhbG9nX3dpZHRoDQogICAgKyAgICBlbGlmIHggPCAwOg0KICAgICsgICAg
ICAgIHggPSAwDQogICAgKyAgICBpZiB5ICsgZGlhbG9nX2hlaWdodCA+IHNjcmVlbl9oZWlnaHQ6
DQogICAgKyAgICAgICAgeSA9IHNjcmVlbl9oZWlnaHQgLSBkaWFsb2dfaGVpZ2h0DQogICAgKyAg
ICBlbGlmIHkgPCAwOg0KICAgICsgICAgICAgIHkgPSAwDQogICAgKw0KICAgICsgICAgZGlhbG9n
Lmdlb21ldHJ5KCIre30re30iLmZvcm1hdCh4LCB5KSkNCiAgICArDQogICAgKyAgICBkaWFsb2cu
ZGVpY29uaWZ5KCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2NoZWNrX3ZhbGlkKGRpYWxvZywg
ZW50cnksIHN5bSwgcyk6DQogICAgKyAgICAjIFJldHVybnMgVHJ1ZSBpZiB0aGUgc3RyaW5nICdz
JyBpcyBhIHdlbGwtZm9ybWVkIHZhbHVlIGZvciAnc3ltJy4NCiAgICArICAgICMgT3RoZXJ3aXNl
LCBwb3BzIHVwIGFuIGVycm9yIGFuZCByZXR1cm5zIEZhbHNlLg0KICAgICsNCiAgICArICAgIGlm
IHN5bS50eXBlIG5vdCBpbiAoSU5ULCBIRVgpOg0KICAgICsgICAgICAgICMgQW55dGhpbmcgZ29l
cyBmb3Igbm9uLWludC9oZXggc3ltYm9scw0KICAgICsgICAgICAgIHJldHVybiBUcnVlDQogICAg
Kw0KICAgICsgICAgYmFzZSA9IDEwIGlmIHN5bS50eXBlID09IElOVCBlbHNlIDE2DQogICAgKyAg
ICB0cnk6DQogICAgKyAgICAgICAgaW50KHMsIGJhc2UpDQogICAgKyAgICBleGNlcHQgVmFsdWVF
cnJvcjoNCiAgICArICAgICAgICBtZXNzYWdlYm94LnNob3dlcnJvcigNCiAgICArICAgICAgICAg
ICAgIkJhZCB2YWx1ZSIsDQogICAgKyAgICAgICAgICAgICIne30nIGlzIGEgbWFsZm9ybWVkIHt9
IHZhbHVlIi5mb3JtYXQoDQogICAgKyAgICAgICAgICAgICAgICBzLCBUWVBFX1RPX1NUUltzeW0u
dHlwZV0pLA0KICAgICsgICAgICAgICAgICBwYXJlbnQ9ZGlhbG9nKQ0KICAgICsgICAgICAgIGVu
dHJ5LmZvY3VzX3NldCgpDQogICAgKyAgICAgICAgcmV0dXJuIEZhbHNlDQogICAgKw0KICAgICsg
ICAgZm9yIGxvd19zeW0sIGhpZ2hfc3ltLCBjb25kIGluIHN5bS5yYW5nZXM6DQogICAgKyAgICAg
ICAgaWYgZXhwcl92YWx1ZShjb25kKToNCiAgICArICAgICAgICAgICAgbG93X3MgPSBsb3dfc3lt
LnN0cl92YWx1ZQ0KICAgICsgICAgICAgICAgICBoaWdoX3MgPSBoaWdoX3N5bS5zdHJfdmFsdWUN
CiAgICArDQogICAgKyAgICAgICAgICAgIGlmIG5vdCBpbnQobG93X3MsIGJhc2UpIDw9IGludChz
LCBiYXNlKSA8PSBpbnQoaGlnaF9zLCBiYXNlKToNCiAgICArICAgICAgICAgICAgICAgIG1lc3Nh
Z2Vib3guc2hvd2Vycm9yKA0KICAgICsgICAgICAgICAgICAgICAgICAgICJWYWx1ZSBvdXQgb2Yg
cmFuZ2UiLA0KICAgICsgICAgICAgICAgICAgICAgICAgICJ7fSBpcyBvdXRzaWRlIHRoZSByYW5n
ZSB7fS17fSIuZm9ybWF0KHMsIGxvd19zLCBoaWdoX3MpLA0KICAgICsgICAgICAgICAgICAgICAg
ICAgIHBhcmVudD1kaWFsb2cpDQogICAgKyAgICAgICAgICAgICAgICBlbnRyeS5mb2N1c19zZXQo
KQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQogICAgKw0KICAgICsgICAgICAg
ICAgICBicmVhaw0KICAgICsNCiAgICArICAgIHJldHVybiBUcnVlDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9yYW5nZV9pbmZvKHN5bSk6DQogICAgKyAgICAjIFJldHVybnMgYSBzdHJpbmcgd2l0
aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsaWQgcmFuZ2UgZm9yIHRoZSBzeW1ib2wNCiAgICAr
ICAgICMgJ3N5bScsIG9yIE5vbmUgaWYgJ3N5bScgZG9lc24ndCBoYXZlIGEgcmFuZ2UNCiAgICAr
DQogICAgKyAgICBpZiBzeW0udHlwZSBpbiAoSU5ULCBIRVgpOg0KICAgICsgICAgICAgIGZvciBs
b3csIGhpZ2gsIGNvbmQgaW4gc3ltLnJhbmdlczoNCiAgICArICAgICAgICAgICAgaWYgZXhwcl92
YWx1ZShjb25kKToNCiAgICArICAgICAgICAgICAgICAgIHJldHVybiAiUmFuZ2U6IHt9LXt9Ii5m
b3JtYXQobG93LnN0cl92YWx1ZSwgaGlnaC5zdHJfdmFsdWUpDQogICAgKw0KICAgICsgICAgcmV0
dXJuIE5vbmUNCiAgICArDQogICAgKw0KICAgICtkZWYgX3NhdmUoXz1Ob25lKToNCiAgICArICAg
ICMgVHJpZXMgdG8gc2F2ZSB0aGUgY29uZmlndXJhdGlvbg0KICAgICsNCiAgICArICAgIGlmIF90
cnlfc2F2ZShfa2NvbmYud3JpdGVfY29uZmlnLCBfY29uZl9maWxlbmFtZSwgImNvbmZpZ3VyYXRp
b24iKToNCiAgICArICAgICAgICBfc2V0X2NvbmZfY2hhbmdlZChGYWxzZSkNCiAgICArDQogICAg
KyAgICBfdHJlZS5mb2N1c19zZXQoKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfc2F2ZV9hcygp
Og0KICAgICsgICAgIyBQb3BzIHVwIGEgZGlhbG9nIGZvciBzYXZpbmcgdGhlIGNvbmZpZ3VyYXRp
b24gdG8gYSBzcGVjaWZpYyBsb2NhdGlvbg0KICAgICsNCiAgICArICAgIGdsb2JhbCBfY29uZl9m
aWxlbmFtZQ0KICAgICsNCiAgICArICAgIGZpbGVuYW1lID0gX2NvbmZfZmlsZW5hbWUNCiAgICAr
ICAgIHdoaWxlIFRydWU6DQogICAgKyAgICAgICAgZmlsZW5hbWUgPSBmaWxlZGlhbG9nLmFza3Nh
dmVhc2ZpbGVuYW1lKA0KICAgICsgICAgICAgICAgICB0aXRsZT0iU2F2ZSBjb25maWd1cmF0aW9u
IGFzIiwNCiAgICArICAgICAgICAgICAgaW5pdGlhbGRpcj1vcy5wYXRoLmRpcm5hbWUoZmlsZW5h
bWUpLA0KICAgICsgICAgICAgICAgICBpbml0aWFsZmlsZT1vcy5wYXRoLmJhc2VuYW1lKGZpbGVu
YW1lKSwNCiAgICArICAgICAgICAgICAgcGFyZW50PV9yb290KQ0KICAgICsNCiAgICArICAgICAg
ICBpZiBub3QgZmlsZW5hbWU6DQogICAgKyAgICAgICAgICAgIGJyZWFrDQogICAgKw0KICAgICsg
ICAgICAgIGlmIF90cnlfc2F2ZShfa2NvbmYud3JpdGVfY29uZmlnLCBmaWxlbmFtZSwgImNvbmZp
Z3VyYXRpb24iKToNCiAgICArICAgICAgICAgICAgX2NvbmZfZmlsZW5hbWUgPSBmaWxlbmFtZQ0K
ICAgICsgICAgICAgICAgICBicmVhaw0KICAgICsNCiAgICArICAgIF90cmVlLmZvY3VzX3NldCgp
DQogICAgKw0KICAgICsNCiAgICArZGVmIF9zYXZlX21pbmltYWwoKToNCiAgICArICAgICMgUG9w
cyB1cCBhIGRpYWxvZyBmb3Igc2F2aW5nIGEgbWluaW1hbCBjb25maWd1cmF0aW9uIChkZWZjb25m
aWcpIHRvIGENCiAgICArICAgICMgc3BlY2lmaWMgbG9jYXRpb24NCiAgICArDQogICAgKyAgICBn
bG9iYWwgX21pbmNvbmZfZmlsZW5hbWUNCiAgICArDQogICAgKyAgICBmaWxlbmFtZSA9IF9taW5j
b25mX2ZpbGVuYW1lDQogICAgKyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAgICAgIGZpbGVuYW1l
ID0gZmlsZWRpYWxvZy5hc2tzYXZlYXNmaWxlbmFtZSgNCiAgICArICAgICAgICAgICAgdGl0bGU9
IlNhdmUgbWluaW1hbCBjb25maWd1cmF0aW9uIGFzIiwNCiAgICArICAgICAgICAgICAgaW5pdGlh
bGRpcj1vcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpLA0KICAgICsgICAgICAgICAgICBpbml0aWFs
ZmlsZT1vcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSwNCiAgICArICAgICAgICAgICAgcGFyZW50
PV9yb290KQ0KICAgICsNCiAgICArICAgICAgICBpZiBub3QgZmlsZW5hbWU6DQogICAgKyAgICAg
ICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAgICAgIGlmIF90cnlfc2F2ZShfa2NvbmYud3Jp
dGVfbWluX2NvbmZpZywgZmlsZW5hbWUsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICJtaW5p
bWFsIGNvbmZpZ3VyYXRpb24iKToNCiAgICArDQogICAgKyAgICAgICAgICAgIF9taW5jb25mX2Zp
bGVuYW1lID0gZmlsZW5hbWUNCiAgICArICAgICAgICAgICAgYnJlYWsNCiAgICArDQogICAgKyAg
ICBfdHJlZS5mb2N1c19zZXQoKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfb3BlbihfPU5vbmUp
Og0KICAgICsgICAgIyBQb3BzIHVwIGEgZGlhbG9nIGZvciBsb2FkaW5nIGEgY29uZmlndXJhdGlv
bg0KICAgICsNCiAgICArICAgIGdsb2JhbCBfY29uZl9maWxlbmFtZQ0KICAgICsNCiAgICArICAg
IGlmIF9jb25mX2NoYW5nZWQgYW5kIFwNCiAgICArICAgICAgICBub3QgbWVzc2FnZWJveC5hc2tv
a2NhbmNlbCgNCiAgICArICAgICAgICAgICAgIlVuc2F2ZWQgY2hhbmdlcyIsDQogICAgKyAgICAg
ICAgICAgICJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIExvYWQgbmV3IGNvbmZpZ3VyYXRpb24g
YW55d2F5PyIpOg0KICAgICsNCiAgICArICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICBm
aWxlbmFtZSA9IF9jb25mX2ZpbGVuYW1lDQogICAgKyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAg
ICAgIGZpbGVuYW1lID0gZmlsZWRpYWxvZy5hc2tvcGVuZmlsZW5hbWUoDQogICAgKyAgICAgICAg
ICAgIHRpdGxlPSJPcGVuIGNvbmZpZ3VyYXRpb24iLA0KICAgICsgICAgICAgICAgICBpbml0aWFs
ZGlyPW9zLnBhdGguZGlybmFtZShmaWxlbmFtZSksDQogICAgKyAgICAgICAgICAgIGluaXRpYWxm
aWxlPW9zLnBhdGguYmFzZW5hbWUoZmlsZW5hbWUpLA0KICAgICsgICAgICAgICAgICBwYXJlbnQ9
X3Jvb3QpDQogICAgKw0KICAgICsgICAgICAgIGlmIG5vdCBmaWxlbmFtZToNCiAgICArICAgICAg
ICAgICAgYnJlYWsNCiAgICArDQogICAgKyAgICAgICAgaWYgX3RyeV9sb2FkKGZpbGVuYW1lKToN
CiAgICArICAgICAgICAgICAgIyBNYXliZSBzb21ldGhpbmcgZmFuY2llciBjb3VsZCBiZSBkb25l
IGhlcmUgbGF0ZXIgdG8gdHJ5IHRvDQogICAgKyAgICAgICAgICAgICMgcHJlc2VydmUgdGhlIHNj
cm9sbA0KICAgICsNCiAgICArICAgICAgICAgICAgX2NvbmZfZmlsZW5hbWUgPSBmaWxlbmFtZQ0K
ICAgICsgICAgICAgICAgICBfc2V0X2NvbmZfY2hhbmdlZChfbmVlZHNfc2F2ZSgpKQ0KICAgICsN
CiAgICArICAgICAgICAgICAgaWYgX3NpbmdsZV9tZW51IGFuZCBub3QgX3Nob3duX21lbnVfbm9k
ZXMoX2N1cl9tZW51KToNCiAgICArICAgICAgICAgICAgICAgICMgVHVybiBvbiBzaG93LWFsbCBp
ZiB3ZSdyZSBpbiBzaW5nbGUtbWVudSBtb2RlIGFuZCB3b3VsZCBlbmQNCiAgICArICAgICAgICAg
ICAgICAgICMgdXAgd2l0aCBhbiBlbXB0eSBtZW51DQogICAgKyAgICAgICAgICAgICAgICBfc2hv
d19hbGxfdmFyLnNldChUcnVlKQ0KICAgICsNCiAgICArICAgICAgICAgICAgX3VwZGF0ZV90cmVl
KCkNCiAgICArDQogICAgKyAgICAgICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAgX3RyZWUu
Zm9jdXNfc2V0KCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX3RvZ2dsZV9zaG93bmFtZShfKToN
CiAgICArICAgICMgVG9nZ2xlcyBzaG93LW5hbWUgbW9kZSBvbi9vZmYNCiAgICArDQogICAgKyAg
ICBfc2hvd19uYW1lX3Zhci5zZXQobm90IF9zaG93X25hbWVfdmFyLmdldCgpKQ0KICAgICsgICAg
X2RvX3Nob3duYW1lKCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2RvX3Nob3duYW1lKCk6DQog
ICAgKyAgICAjIFVwZGF0ZXMgdGhlIFVJIGZvciB0aGUgY3VycmVudCBzaG93LW5hbWUgc2V0dGlu
Zw0KICAgICsNCiAgICArICAgICMgQ29sdW1ucyBkbyBub3QgYXV0b21hdGljYWxseSBzaHJpbmsv
ZXhwYW5kLCBzbyB3ZSBoYXZlIHRvIHVwZGF0ZQ0KICAgICsgICAgIyBjb2x1bW4gd2lkdGhzIG91
cnNlbHZlcw0KICAgICsNCiAgICArICAgIHRyZWVfd2lkdGggPSBfdHJlZS53aW5mb193aWR0aCgp
DQogICAgKw0KICAgICsgICAgaWYgX3Nob3dfbmFtZV92YXIuZ2V0KCk6DQogICAgKyAgICAgICAg
X3RyZWVbImRpc3BsYXljb2x1bW5zIl0gPSAoIm5hbWUiLCkNCiAgICArICAgICAgICBfdHJlZVsi
c2hvdyJdID0gInRyZWUgaGVhZGluZ3MiDQogICAgKyAgICAgICAgbmFtZV93aWR0aCA9IHRyZWVf
d2lkdGgvLzMNCiAgICArICAgICAgICBfdHJlZS5jb2x1bW4oIiMwIiwgd2lkdGg9bWF4KHRyZWVf
d2lkdGggLSBuYW1lX3dpZHRoLCAxKSkNCiAgICArICAgICAgICBfdHJlZS5jb2x1bW4oIm5hbWUi
LCB3aWR0aD1uYW1lX3dpZHRoKQ0KICAgICsgICAgZWxzZToNCiAgICArICAgICAgICBfdHJlZVsi
ZGlzcGxheWNvbHVtbnMiXSA9ICgpDQogICAgKyAgICAgICAgX3RyZWVbInNob3ciXSA9ICJ0cmVl
Ig0KICAgICsgICAgICAgIF90cmVlLmNvbHVtbigiIzAiLCB3aWR0aD10cmVlX3dpZHRoKQ0KICAg
ICsNCiAgICArICAgIF90cmVlLmZvY3VzX3NldCgpDQogICAgKw0KICAgICsNCiAgICArZGVmIF90
b2dnbGVfc2hvd2FsbChfKToNCiAgICArICAgICMgVG9nZ2xlcyBzaG93LWFsbCBtb2RlIG9uL29m
Zg0KICAgICsNCiAgICArICAgIF9zaG93X2FsbF92YXIuc2V0KG5vdCBfc2hvd19hbGwpDQogICAg
KyAgICBfZG9fc2hvd2FsbCgpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9kb19zaG93YWxsKCk6
DQogICAgKyAgICAjIFVwZGF0ZXMgdGhlIFVJIGZvciB0aGUgY3VycmVudCBzaG93LWFsbCBzZXR0
aW5nDQogICAgKw0KICAgICsgICAgIyBEb24ndCBhbGxvdyB0dXJuaW5nIG9mZiBzaG93LWFsbCBp
ZiB3ZSdyZSBpbiBzaW5nbGUtbWVudSBtb2RlIGFuZCB0aGUNCiAgICArICAgICMgY3VycmVudCBt
ZW51IHdvdWxkIGJlY29tZSBlbXB0eQ0KICAgICsgICAgaWYgX3NpbmdsZV9tZW51IGFuZCBub3Qg
X3Nob3duX21lbnVfbm9kZXMoX2N1cl9tZW51KToNCiAgICArICAgICAgICBfc2hvd19hbGxfdmFy
LnNldChUcnVlKQ0KICAgICsgICAgICAgIHJldHVybg0KICAgICsNCiAgICArICAgICMgU2F2ZSBz
Y3JvbGwgaW5mb3JtYXRpb24uIG9sZF9zY3JvbGwgY2FuIGVuZCB1cCBuZWdhdGl2ZSBoZXJlLCBp
ZiB0aGUNCiAgICArICAgICMgcmVmZXJlbmNlIGl0ZW0gaXNuJ3Qgc2hvd24gKG9ubHkgaW52aXNp
YmxlIGl0ZW1zIG9uIHRoZSBzY3JlZW4sIGFuZA0KICAgICsgICAgIyBzaG93LWFsbCBiZWluZyB0
dXJuZWQgb2ZmKS4NCiAgICArDQogICAgKyAgICBzdGF5cHV0ID0gX3Zpc19sb2NfcmVmX2l0ZW0o
KQ0KICAgICsgICAgIyBQcm9iZSB0aGUgbWlkZGxlIG9mIHRoZSBmaXJzdCByb3csIHRvIHBsYXkg
aXQgc2FmZS4gaWRlbnRpZnlfcm93KDApIHNlZW1zDQogICAgKyAgICAjIHRvIHJldHVybiB0aGUg
cm93IGJlZm9yZSB0aGUgdG9wIHJvdy4NCiAgICArICAgIG9sZF9zY3JvbGwgPSBfaXRlbV9yb3co
c3RheXB1dCkgLSBcDQogICAgKyAgICAgICAgX2l0ZW1fcm93KF90cmVlLmlkZW50aWZ5X3Jvdyhf
dHJlZXZpZXdfcm93aGVpZ2h0Ly8yKSkNCiAgICArDQogICAgKyAgICBfdXBkYXRlX3RyZWUoKQ0K
ICAgICsNCiAgICArICAgIGlmIF9zaG93X2FsbDoNCiAgICArICAgICAgICAjIERlZXAgbWFnaWM6
IFVubGVzcyB3ZSBjYWxsIHVwZGF0ZV9pZGxldGFza3MoKSwgdGhlIHNjcm9sbCBhZGp1c3RtZW50
DQogICAgKyAgICAgICAgIyBiZWxvdyBpcyByZXN0cmljdGVkIHRvIHRoZSBoZWlnaHQgb2YgdGhl
IG9sZCB0cmVlLCBpbnN0ZWFkIG9mIHRoZQ0KICAgICsgICAgICAgICMgaGVpZ2h0IG9mIHRoZSBu
ZXcgdHJlZS4gU2luY2UgdGhlIHRyZWUgd2l0aCBzaG93LWFsbCBvbiBpcyBndWFyYW50ZWVkDQog
ICAgKyAgICAgICAgIyB0byBiZSB0YWxsZXIsIGFuZCB3ZSB3YW50IHRoZSBtYXhpbXVtIHJhbmdl
LCB3ZSBvbmx5IGNhbGwgaXQgd2hlbg0KICAgICsgICAgICAgICMgdHVybmluZyBzaG93LWFsbCBv
bi4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBTdHJpY3RseSBzcGVha2luZywgc29t
ZXRoaW5nIHNpbWlsYXIgb3VnaHQgdG8gYmUgZG9uZSB3aGVuIGNoYW5naW5nDQogICAgKyAgICAg
ICAgIyBzeW1ib2wgdmFsdWVzLCBidXQgaXQgY2F1c2VzIGFubm95aW5nIGZsaWNrZXIsIGFuZCBp
biA5OSUgb2YgY2FzZXMNCiAgICArICAgICAgICAjIHRoaW5ncyB3b3JrIGFueXdheSB0aGVyZSAo
d2l0aCB1c3VhbGx5IG1pbm9yIHNjcm9sbCBtZXNzLXVwcyBpbiB0aGUNCiAgICArICAgICAgICAj
IDElIGNhc2UpLg0KICAgICsgICAgICAgIF9yb290LnVwZGF0ZV9pZGxldGFza3MoKQ0KICAgICsN
CiAgICArICAgICMgUmVzdG9yZSBzY3JvbGwNCiAgICArICAgIF90cmVlLnl2aWV3KF9pdGVtX3Jv
dyhzdGF5cHV0KSAtIG9sZF9zY3JvbGwpDQogICAgKw0KICAgICsgICAgX3RyZWUuZm9jdXNfc2V0
KCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX3RvZ2dsZV90cmVlX21vZGUoXyk6DQogICAgKyAg
ICAjIFRvZ2dsZXMgc2luZ2xlLW1lbnUgbW9kZSBvbi9vZmYNCiAgICArDQogICAgKyAgICBfc2lu
Z2xlX21lbnVfdmFyLnNldChub3QgX3NpbmdsZV9tZW51KQ0KICAgICsgICAgX2RvX3RyZWVfbW9k
ZSgpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9kb190cmVlX21vZGUoKToNCiAgICArICAgICMg
VXBkYXRlcyB0aGUgVUkgZm9yIHRoZSBjdXJyZW50IHRyZWUgbW9kZSAoZnVsbC10cmVlIG9yIHNp
bmdsZS1tZW51KQ0KICAgICsNCiAgICArICAgIGxvY19yZWZfbm9kZSA9IF9pZF90b19ub2RlW19s
b2NfcmVmX2l0ZW0oKV0NCiAgICArDQogICAgKyAgICBpZiBub3QgX3NpbmdsZV9tZW51Og0KICAg
ICsgICAgICAgICMgX2p1bXBfdG8oKSAtPiBfZW50ZXJfbWVudSgpIGFscmVhZHkgdXBkYXRlcyB0
aGUgdHJlZSwgYnV0DQogICAgKyAgICAgICAgIyBfanVtcF90bygpIC0+IGxvYWRfcGFyZW50cygp
IGRvZXNuJ3QsIGJlY2F1c2UgaXQgaXNuJ3QgYWx3YXlzIG5lZWRlZC4NCiAgICArICAgICAgICAj
IFdlIGFsd2F5cyBuZWVkIHRvIHVwZGF0ZSB0aGUgdHJlZSBoZXJlLCBlLmcuIHRvIGFkZC9yZW1v
dmUgIi0tLT4iLg0KICAgICsgICAgICAgIF91cGRhdGVfdHJlZSgpDQogICAgKw0KICAgICsgICAg
X2p1bXBfdG8obG9jX3JlZl9ub2RlKQ0KICAgICsgICAgX3RyZWUuZm9jdXNfc2V0KCkNCiAgICAr
DQogICAgKw0KICAgICtkZWYgX2VudGVyX21lbnVfYW5kX3NlbGVjdF9maXJzdChtZW51KToNCiAg
ICArICAgICMgRW50ZXJzIHRoZSBtZW51ICdtZW51JyBhbmQgc2VsZWN0cyB0aGUgZmlyc3QgaXRl
bS4gVXNlZCBpbiBzaW5nbGUtbWVudQ0KICAgICsgICAgIyBtb2RlLg0KICAgICsNCiAgICArICAg
IF9lbnRlcl9tZW51KG1lbnUpDQogICAgKyAgICBfc2VsZWN0KF90cmVlLCBfdHJlZS5nZXRfY2hp
bGRyZW4oKVswXSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2VudGVyX21lbnUobWVudSk6DQog
ICAgKyAgICAjIEVudGVycyB0aGUgbWVudSAnbWVudScuIFVzZWQgaW4gc2luZ2xlLW1lbnUgbW9k
ZS4NCiAgICArDQogICAgKyAgICBnbG9iYWwgX2N1cl9tZW51DQogICAgKw0KICAgICsgICAgX2N1
cl9tZW51ID0gbWVudQ0KICAgICsgICAgX3VwZGF0ZV90cmVlKCkNCiAgICArDQogICAgKyAgICBf
YmFja2J1dHRvblsic3RhdGUiXSA9ICJkaXNhYmxlZCIgaWYgbWVudSBpcyBfa2NvbmYudG9wX25v
ZGUgZWxzZSAibm9ybWFsIg0KICAgICsNCiAgICArDQogICAgK2RlZiBfbGVhdmVfbWVudSgpOg0K
ICAgICsgICAgIyBMZWF2ZXMgdGhlIGN1cnJlbnQgbWVudS4gVXNlZCBpbiBzaW5nbGUtbWVudSBt
b2RlLg0KICAgICsNCiAgICArICAgIGdsb2JhbCBfY3VyX21lbnUNCiAgICArDQogICAgKyAgICBp
ZiBfY3VyX21lbnUgaXMgbm90IF9rY29uZi50b3Bfbm9kZToNCiAgICArICAgICAgICBvbGRfbWVu
dSA9IF9jdXJfbWVudQ0KICAgICsNCiAgICArICAgICAgICBfY3VyX21lbnUgPSBfcGFyZW50X21l
bnUoX2N1cl9tZW51KQ0KICAgICsgICAgICAgIF91cGRhdGVfdHJlZSgpDQogICAgKw0KICAgICsg
ICAgICAgIF9zZWxlY3QoX3RyZWUsIGlkKG9sZF9tZW51KSkNCiAgICArDQogICAgKyAgICAgICAg
aWYgX2N1cl9tZW51IGlzIF9rY29uZi50b3Bfbm9kZToNCiAgICArICAgICAgICAgICAgX2JhY2ti
dXR0b25bInN0YXRlIl0gPSAiZGlzYWJsZWQiDQogICAgKw0KICAgICsgICAgX3RyZWUuZm9jdXNf
c2V0KCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX3NlbGVjdCh0cmVlLCBpdGVtKToNCiAgICAr
ICAgICMgU2VsZWN0cywgZm9jdXNlcywgYW5kIHNlZSgpcyAnaXRlbScgaW4gJ3RyZWUnDQogICAg
Kw0KICAgICsgICAgdHJlZS5zZWxlY3Rpb25fc2V0KGl0ZW0pDQogICAgKyAgICB0cmVlLmZvY3Vz
KGl0ZW0pDQogICAgKyAgICB0cmVlLnNlZShpdGVtKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBf
bG9jX3JlZl9pdGVtKCk6DQogICAgKyAgICAjIFJldHVybnMgYSBUcmVldmlldyBpdGVtIHRoYXQg
Y2FuIHNlcnZlIGFzIGEgcmVmZXJlbmNlIGZvciB0aGUgY3VycmVudA0KICAgICsgICAgIyBzY3Jv
bGwgbG9jYXRpb24uIFdlIHRyeSB0byBtYWtlIHRoaXMgaXRlbSBzdGF5IG9uIHRoZSBzYW1lIHJv
dyBvbiB0aGUNCiAgICArICAgICMgc2NyZWVuIHdoZW4gdXBkYXRpbmcgdGhlIHRyZWUuDQogICAg
Kw0KICAgICsgICAgIyBJZiB0aGUgc2VsZWN0ZWQgaXRlbSBpcyB2aXNpYmxlLCB1c2UgdGhhdA0K
ICAgICsgICAgc2VsID0gX3RyZWUuc2VsZWN0aW9uKCkNCiAgICArICAgIGlmIHNlbCBhbmQgX3Ry
ZWUuYmJveChzZWxbMF0pOg0KICAgICsgICAgICAgIHJldHVybiBzZWxbMF0NCiAgICArDQogICAg
KyAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBtaWRkbGUgaXRlbSBvbiB0aGUgc2NyZWVuLiBJZiBp
dCBkb2Vzbid0IGV4aXN0LCB0aGUNCiAgICArICAgICMgdHJlZSBpcyBwcm9iYWJseSByZWFsbHkg
c21hbGwsIHNvIHVzZSB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgZW50aXJlIHRyZWUuDQogICAgKyAg
ICByZXR1cm4gX3RyZWUuaWRlbnRpZnlfcm93KF90cmVlLndpbmZvX2hlaWdodCgpLy8yKSBvciBc
DQogICAgKyAgICAgICAgX3RyZWUuZ2V0X2NoaWxkcmVuKClbMF0NCiAgICArDQogICAgKw0KICAg
ICtkZWYgX3Zpc19sb2NfcmVmX2l0ZW0oKToNCiAgICArICAgICMgTGlrZSBfbG9jX3JlZl9pdGVt
KCksIGJ1dCBmaW5kcyBhIHZpc2libGUgaXRlbSBhcm91bmQgdGhlIHJlZmVyZW5jZSBpdGVtLg0K
ICAgICsgICAgIyBVc2VkIHdoZW4gY2hhbmdpbmcgc2hvdy1hbGwgbW9kZSwgd2hlcmUgbm9uLXZp
c2libGUgKHJlZCkgaXRlbXMgd2lsbA0KICAgICsgICAgIyBkaXNhcHBlYXIuDQogICAgKw0KICAg
ICsgICAgaXRlbSA9IF9sb2NfcmVmX2l0ZW0oKQ0KICAgICsNCiAgICArICAgIHZpc19iZWZvcmUg
PSBfdmlzX2JlZm9yZShpdGVtKQ0KICAgICsgICAgaWYgdmlzX2JlZm9yZSBhbmQgX3RyZWUuYmJv
eCh2aXNfYmVmb3JlKToNCiAgICArICAgICAgICByZXR1cm4gdmlzX2JlZm9yZQ0KICAgICsNCiAg
ICArICAgIHZpc19hZnRlciA9IF92aXNfYWZ0ZXIoaXRlbSkNCiAgICArICAgIGlmIHZpc19hZnRl
ciBhbmQgX3RyZWUuYmJveCh2aXNfYWZ0ZXIpOg0KICAgICsgICAgICAgIHJldHVybiB2aXNfYWZ0
ZXINCiAgICArDQogICAgKyAgICByZXR1cm4gdmlzX2JlZm9yZSBvciB2aXNfYWZ0ZXINCiAgICAr
DQogICAgKw0KICAgICtkZWYgX3Zpc19iZWZvcmUoaXRlbSk6DQogICAgKyAgICAjIF92aXNfbG9j
X3JlZl9pdGVtKCkgaGVscGVyLiBSZXR1cm5zIHRoZSBmaXJzdCB2aXNpYmxlIChub3QgcmVkKSBp
dGVtLA0KICAgICsgICAgIyBzZWFyY2hpbmcgYmFja3dhcmRzIGZyb20gJ2l0ZW0nLg0KICAgICsN
CiAgICArICAgIHdoaWxlIGl0ZW06DQogICAgKyAgICAgICAgaWYgbm90IF90cmVlLnRhZ19oYXMo
ImludmlzaWJsZSIsIGl0ZW0pOg0KICAgICsgICAgICAgICAgICByZXR1cm4gaXRlbQ0KICAgICsN
CiAgICArICAgICAgICBwcmV2ID0gX3RyZWUucHJldihpdGVtKQ0KICAgICsgICAgICAgIGl0ZW0g
PSBwcmV2IGlmIHByZXYgZWxzZSBfdHJlZS5wYXJlbnQoaXRlbSkNCiAgICArDQogICAgKyAgICBy
ZXR1cm4gTm9uZQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfdmlzX2FmdGVyKGl0ZW0pOg0KICAg
ICsgICAgIyBfdmlzX2xvY19yZWZfaXRlbSgpIGhlbHBlci4gUmV0dXJucyB0aGUgZmlyc3Qgdmlz
aWJsZSAobm90IHJlZCkgaXRlbSwNCiAgICArICAgICMgc2VhcmNoaW5nIGZvcndhcmRzIGZyb20g
J2l0ZW0nLg0KICAgICsNCiAgICArICAgIHdoaWxlIGl0ZW06DQogICAgKyAgICAgICAgaWYgbm90
IF90cmVlLnRhZ19oYXMoImludmlzaWJsZSIsIGl0ZW0pOg0KICAgICsgICAgICAgICAgICByZXR1
cm4gaXRlbQ0KICAgICsNCiAgICArICAgICAgICBuZXh0ID0gX3RyZWUubmV4dChpdGVtKQ0KICAg
ICsgICAgICAgIGlmIG5leHQ6DQogICAgKyAgICAgICAgICAgIGl0ZW0gPSBuZXh0DQogICAgKyAg
ICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgaXRlbSA9IF90cmVlLnBhcmVudChpdGVtKQ0K
ICAgICsgICAgICAgICAgICBpZiBub3QgaXRlbToNCiAgICArICAgICAgICAgICAgICAgIGJyZWFr
DQogICAgKyAgICAgICAgICAgIGl0ZW0gPSBfdHJlZS5uZXh0KGl0ZW0pDQogICAgKw0KICAgICsg
ICAgcmV0dXJuIE5vbmUNCiAgICArDQogICAgKw0KICAgICtkZWYgX29uX3F1aXQoXz1Ob25lKToN
CiAgICArICAgICMgQ2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gZXhpdA0KICAgICsNCiAg
ICArICAgIGlmIG5vdCBfY29uZl9jaGFuZ2VkOg0KICAgICsgICAgICAgIF9xdWl0KCJObyBjaGFu
Z2VzIHRvIHNhdmUgKGZvciAne30nKSIuZm9ybWF0KF9jb25mX2ZpbGVuYW1lKSkNCiAgICArICAg
ICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAgICAgIHlu
YyA9IG1lc3NhZ2Vib3guYXNreWVzbm9jYW5jZWwoIlF1aXQiLCAiU2F2ZSBjaGFuZ2VzPyIpDQog
ICAgKyAgICAgICAgaWYgeW5jIGlzIE5vbmU6DQogICAgKyAgICAgICAgICAgIHJldHVybg0KICAg
ICsNCiAgICArICAgICAgICBpZiBub3QgeW5jOg0KICAgICsgICAgICAgICAgICBfcXVpdCgiQ29u
ZmlndXJhdGlvbiAoe30pIHdhcyBub3Qgc2F2ZWQiLmZvcm1hdChfY29uZl9maWxlbmFtZSkpDQog
ICAgKyAgICAgICAgICAgIHJldHVybg0KICAgICsNCiAgICArICAgICAgICBpZiBfdHJ5X3NhdmUo
X2tjb25mLndyaXRlX2NvbmZpZywgX2NvbmZfZmlsZW5hbWUsICJjb25maWd1cmF0aW9uIik6DQog
ICAgKyAgICAgICAgICAgICMgX3RyeV9zYXZlKCkgYWxyZWFkeSBwcmludHMgdGhlICJDb25maWd1
cmF0aW9uIHNhdmVkIHRvIC4uLiINCiAgICArICAgICAgICAgICAgIyBtZXNzYWdlDQogICAgKyAg
ICAgICAgICAgIF9xdWl0KCkNCiAgICArICAgICAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsN
CiAgICArZGVmIF9xdWl0KG1zZz1Ob25lKToNCiAgICArICAgICMgUXVpdHMgdGhlIGFwcGxpY2F0
aW9uDQogICAgKw0KICAgICsgICAgIyBEbyBub3QgY2FsbCBzeXMuZXhpdCgpIGhlcmUsIGluIGNh
c2Ugd2UncmUgYmVpbmcgcnVuIGZyb20gYSBzY3JpcHQNCiAgICArICAgIF9yb290LmRlc3Ryb3ko
KQ0KICAgICsgICAgaWYgbXNnOg0KICAgICsgICAgICAgIHByaW50KG1zZykNCiAgICArDQogICAg
Kw0KICAgICtkZWYgX3RyeV9zYXZlKHNhdmVfZm4sIGZpbGVuYW1lLCBkZXNjcmlwdGlvbik6DQog
ICAgKyAgICAjIFRyaWVzIHRvIHNhdmUgYSBjb25maWd1cmF0aW9uIGZpbGUuIFBvcHMgdXAgYW4g
ZXJyb3IgYW5kIHJldHVybnMgRmFsc2Ugb24NCiAgICArICAgICMgZmFpbHVyZS4NCiAgICArICAg
ICMNCiAgICArICAgICMgc2F2ZV9mbjoNCiAgICArICAgICMgICBGdW5jdGlvbiB0byBjYWxsIHdp
dGggJ2ZpbGVuYW1lJyB0byBzYXZlIHRoZSBmaWxlDQogICAgKyAgICAjDQogICAgKyAgICAjIGRl
c2NyaXB0aW9uOg0KICAgICsgICAgIyAgIFN0cmluZyBkZXNjcmliaW5nIHRoZSB0aGluZyBiZWlu
ZyBzYXZlZA0KICAgICsNCiAgICArICAgIHRyeToNCiAgICArICAgICAgICAjIHNhdmVfZm4oKSBy
ZXR1cm5zIGEgbWVzc2FnZSB0byBwcmludA0KICAgICsgICAgICAgIG1zZyA9IHNhdmVfZm4oZmls
ZW5hbWUpDQogICAgKyAgICAgICAgX3NldF9zdGF0dXMobXNnKQ0KICAgICsgICAgICAgIHByaW50
KG1zZykNCiAgICArICAgICAgICByZXR1cm4gVHJ1ZQ0KICAgICsgICAgZXhjZXB0IEVudmlyb25t
ZW50RXJyb3IgYXMgZToNCiAgICArICAgICAgICBtZXNzYWdlYm94LnNob3dlcnJvcigNCiAgICAr
ICAgICAgICAgICAgIkVycm9yIHNhdmluZyAiICsgZGVzY3JpcHRpb24sDQogICAgKyAgICAgICAg
ICAgICJFcnJvciBzYXZpbmcge30gdG8gJ3t9Jzoge30gKGVycm5vOiB7fSkiDQogICAgKyAgICAg
ICAgICAgIC5mb3JtYXQoZGVzY3JpcHRpb24sIGUuZmlsZW5hbWUsIGUuc3RyZXJyb3IsDQogICAg
KyAgICAgICAgICAgICAgICAgICAgZXJybm8uZXJyb3Jjb2RlW2UuZXJybm9dKSkNCiAgICArICAg
ICAgICByZXR1cm4gRmFsc2UNCiAgICArDQogICAgKw0KICAgICtkZWYgX3RyeV9sb2FkKGZpbGVu
YW1lKToNCiAgICArICAgICMgVHJpZXMgdG8gbG9hZCBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gUG9w
cyB1cCBhbiBlcnJvciBhbmQgcmV0dXJucyBGYWxzZSBvbg0KICAgICsgICAgIyBmYWlsdXJlLg0K
ICAgICsgICAgIw0KICAgICsgICAgIyBmaWxlbmFtZToNCiAgICArICAgICMgICBDb25maWd1cmF0
aW9uIGZpbGUgdG8gbG9hZA0KICAgICsNCiAgICArICAgIHRyeToNCiAgICArICAgICAgICBtc2cg
PSBfa2NvbmYubG9hZF9jb25maWcoZmlsZW5hbWUpDQogICAgKyAgICAgICAgX3NldF9zdGF0dXMo
bXNnKQ0KICAgICsgICAgICAgIHByaW50KG1zZykNCiAgICArICAgICAgICByZXR1cm4gVHJ1ZQ0K
ICAgICsgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToNCiAgICArICAgICAgICBtZXNz
YWdlYm94LnNob3dlcnJvcigNCiAgICArICAgICAgICAgICAgIkVycm9yIGxvYWRpbmcgY29uZmln
dXJhdGlvbiIsDQogICAgKyAgICAgICAgICAgICJFcnJvciBsb2FkaW5nICd7fSc6IHt9IChlcnJu
bzoge30pIg0KICAgICsgICAgICAgICAgICAuZm9ybWF0KGZpbGVuYW1lLCBlLnN0cmVycm9yLCBl
cnJuby5lcnJvcmNvZGVbZS5lcnJub10pKQ0KICAgICsgICAgICAgIHJldHVybiBGYWxzZQ0KICAg
ICsNCiAgICArDQogICAgK2RlZiBfanVtcF90b19kaWFsb2coXz1Ob25lKToNCiAgICArICAgICMg
UG9wcyB1cCBhIGRpYWxvZyBmb3IganVtcGluZyBkaXJlY3RseSB0byBhIHBhcnRpY3VsYXIgbm9k
ZS4gU3ltYm9sIHZhbHVlcw0KICAgICsgICAgIyBjYW4gYWxzbyBiZSBjaGFuZ2VkIHdpdGhpbiB0
aGUgZGlhbG9nLg0KICAgICsgICAgIw0KICAgICsgICAgIyBOb3RlOiBUaGVyZSdzIG5vdGhpbmcg
cHJldmVudGluZyB0aGlzIGZyb20gZG9pbmcgYW4gaW5jcmVtZW50YWwgc2VhcmNoDQogICAgKyAg
ICAjIGxpa2UgbWVudWNvbmZpZy5weSBkb2VzLCBidXQgY3VycmVudGx5IGl0J3MgYSBiaXQgamVy
a3kgZm9yIGxhcmdlIEtjb25maWcNCiAgICArICAgICMgdHJlZXMsIGF0IGxlYXN0IHdoZW4gaW5w
dXR0aW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlYXJjaCBzdHJpbmcuIFdlJ2QNCiAgICArICAg
ICMgbmVlZCB0byBzb21laG93IG9ubHkgdXBkYXRlIHRoZSB0cmVlIGl0ZW1zIHRoYXQgYXJlIHNo
b3duIGluIHRoZSBUcmVldmlldw0KICAgICsgICAgIyB0byBmaXggaXQuDQogICAgKw0KICAgICsg
ICAgZ2xvYmFsIF9qdW1wX3RvX3RyZWUNCiAgICArDQogICAgKyAgICBkZWYgc2VhcmNoKF89Tm9u
ZSk6DQogICAgKyAgICAgICAgX3VwZGF0ZV9qdW1wX3RvX21hdGNoZXMobXNnbGFiZWwsIGVudHJ5
LmdldCgpKQ0KICAgICsNCiAgICArICAgIGRlZiBqdW1wX3RvX3NlbGVjdGVkKGV2ZW50PU5vbmUp
Og0KICAgICsgICAgICAgICMgSnVtcHMgdG8gdGhlIHNlbGVjdGVkIG5vZGUgYW5kIGNsb3NlcyB0
aGUgZGlhbG9nDQogICAgKw0KICAgICsgICAgICAgICMgSWdub3JlIGRvdWJsZSBjbGlja3Mgb24g
dGhlIGltYWdlIGFuZCBpbiB0aGUgaGVhZGluZyBhcmVhDQogICAgKyAgICAgICAgaWYgZXZlbnQg
YW5kICh0cmVlLmlkZW50aWZ5X2VsZW1lbnQoZXZlbnQueCwgZXZlbnQueSkgPT0gImltYWdlIiBv
cg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgX2luX2hlYWRpbmcoZXZlbnQpKToNCiAgICAr
ICAgICAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsgICAgICAgIHNlbCA9IHRyZWUuc2VsZWN0
aW9uKCkNCiAgICArICAgICAgICBpZiBub3Qgc2VsOg0KICAgICsgICAgICAgICAgICByZXR1cm4N
CiAgICArDQogICAgKyAgICAgICAgbm9kZSA9IF9pZF90b19ub2RlW3NlbFswXV0NCiAgICArDQog
ICAgKyAgICAgICAgaWYgbm9kZSBub3QgaW4gX3Nob3duX21lbnVfbm9kZXMoX3BhcmVudF9tZW51
KG5vZGUpKToNCiAgICArICAgICAgICAgICAgX3Nob3dfYWxsX3Zhci5zZXQoVHJ1ZSkNCiAgICAr
ICAgICAgICAgICAgaWYgbm90IF9zaW5nbGVfbWVudToNCiAgICArICAgICAgICAgICAgICAgICMg
U2VlIGNvbW1lbnQgaW4gX2RvX3RyZWVfbW9kZSgpDQogICAgKyAgICAgICAgICAgICAgICBfdXBk
YXRlX3RyZWUoKQ0KICAgICsNCiAgICArICAgICAgICBfanVtcF90byhub2RlKQ0KICAgICsNCiAg
ICArICAgICAgICBkaWFsb2cuZGVzdHJveSgpDQogICAgKw0KICAgICsgICAgZGVmIHRyZWVfc2Vs
ZWN0KF8pOg0KICAgICsgICAgICAgIGp1bXB0b19idXR0b25bInN0YXRlIl0gPSAibm9ybWFsIiBp
ZiB0cmVlLnNlbGVjdGlvbigpIGVsc2UgImRpc2FibGVkIg0KICAgICsNCiAgICArDQogICAgKyAg
ICBkaWFsb2cgPSBUb3BsZXZlbChfcm9vdCkNCiAgICArICAgIGRpYWxvZy5nZW9tZXRyeSgiK3t9
K3t9Ii5mb3JtYXQoDQogICAgKyAgICAgICAgX3Jvb3Qud2luZm9fcm9vdHgoKSArIDUwLCBfcm9v
dC53aW5mb19yb290eSgpICsgNTApKQ0KICAgICsgICAgZGlhbG9nLnRpdGxlKCJKdW1wIHRvIHN5
bWJvbC9jaG9pY2UvbWVudS9jb21tZW50IikNCiAgICArICAgIGRpYWxvZy5taW5zaXplKDEyOCwg
MTI4KSAgIyBTZWUgX2NyZWF0ZV91aSgpDQogICAgKyAgICBkaWFsb2cudHJhbnNpZW50KF9yb290
KQ0KICAgICsNCiAgICArICAgIHR0ay5MYWJlbChkaWFsb2csIHRleHQ9X0pVTVBfVE9fSEVMUCkg
XA0KICAgICsgICAgICAgIC5ncmlkKGNvbHVtbj0wLCByb3c9MCwgY29sdW1uc3Bhbj0yLCBzdGlj
a3k9InciLCBwYWR4PSIuMWMiLA0KICAgICsgICAgICAgICAgICAgIHBhZHk9Ii4xYyIpDQogICAg
Kw0KICAgICsgICAgZW50cnkgPSB0dGsuRW50cnkoZGlhbG9nKQ0KICAgICsgICAgZW50cnkuZ3Jp
ZChjb2x1bW49MCwgcm93PTEsIHN0aWNreT0iZXciLCBwYWR4PSIuMWMiLCBwYWR5PSIuMWMiKQ0K
ICAgICsgICAgZW50cnkuZm9jdXNfc2V0KCkNCiAgICArDQogICAgKyAgICBlbnRyeS5iaW5kKCI8
UmV0dXJuPiIsIHNlYXJjaCkNCiAgICArICAgIGVudHJ5LmJpbmQoIjxLUF9FbnRlcj4iLCBzZWFy
Y2gpDQogICAgKw0KICAgICsgICAgdHRrLkJ1dHRvbihkaWFsb2csIHRleHQ9IlNlYXJjaCIsIGNv
bW1hbmQ9c2VhcmNoKSBcDQogICAgKyAgICAgICAgLmdyaWQoY29sdW1uPTEsIHJvdz0xLCBwYWR4
PSIwIC4xYyIsIHBhZHk9IjAgLjFjIikNCiAgICArDQogICAgKyAgICBtc2dsYWJlbCA9IHR0ay5M
YWJlbChkaWFsb2cpDQogICAgKyAgICBtc2dsYWJlbC5ncmlkKGNvbHVtbj0wLCByb3c9Miwgc3Rp
Y2t5PSJ3IiwgcGFkeT0iMCAuMWMiKQ0KICAgICsNCiAgICArICAgIHBhbmVkd2luZG93LCB0cmVl
ID0gX2NyZWF0ZV9rY29uZmlnX3RyZWVfYW5kX2Rlc2MoZGlhbG9nKQ0KICAgICsgICAgcGFuZWR3
aW5kb3cuZ3JpZChjb2x1bW49MCwgcm93PTMsIGNvbHVtbnNwYW49Miwgc3RpY2t5PSJuc2V3IikN
CiAgICArDQogICAgKyAgICAjIENsZWFyIHRyZWUNCiAgICArICAgIHRyZWUuc2V0X2NoaWxkcmVu
KCIiKQ0KICAgICsNCiAgICArICAgIF9qdW1wX3RvX3RyZWUgPSB0cmVlDQogICAgKw0KICAgICsg
ICAganVtcHRvX2J1dHRvbiA9IHR0ay5CdXR0b24oZGlhbG9nLCB0ZXh0PSJKdW1wIHRvIHNlbGVj
dGVkIGl0ZW0iLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU9ImRp
c2FibGVkIiwgY29tbWFuZD1qdW1wX3RvX3NlbGVjdGVkKQ0KICAgICsgICAganVtcHRvX2J1dHRv
bi5ncmlkKGNvbHVtbj0wLCByb3c9NCwgY29sdW1uc3Bhbj0yLCBzdGlja3k9Im5zIiwgcGFkeT0i
LjFjIikNCiAgICArDQogICAgKyAgICBkaWFsb2cuY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0x
KQ0KICAgICsgICAgIyBPbmx5IHRoZSBwYW5lIHdpdGggdGhlIEtjb25maWcgdHJlZSBhbmQgZGVz
Y3JpcHRpb24gZ3Jvd3MgdmVydGljYWxseQ0KICAgICsgICAgZGlhbG9nLnJvd2NvbmZpZ3VyZSgz
LCB3ZWlnaHQ9MSkNCiAgICArDQogICAgKyAgICAjIFNlZSB0aGUgbWVudWNvbmZpZygpIGZ1bmN0
aW9uDQogICAgKyAgICBfcm9vdC51cGRhdGVfaWRsZXRhc2tzKCkNCiAgICArICAgIGRpYWxvZy5n
ZW9tZXRyeShkaWFsb2cuZ2VvbWV0cnkoKSkNCiAgICArDQogICAgKyAgICAjIFRoZSBkaWFsb2cg
bXVzdCBiZSB2aXNpYmxlIGJlZm9yZSB3ZSBjYW4gZ3JhYiB0aGUgaW5wdXQNCiAgICArICAgIGRp
YWxvZy53YWl0X3Zpc2liaWxpdHkoKQ0KICAgICsgICAgZGlhbG9nLmdyYWJfc2V0KCkNCiAgICAr
DQogICAgKyAgICB0cmVlLmJpbmQoIjxEb3VibGUtMT4iLCBqdW1wX3RvX3NlbGVjdGVkKQ0KICAg
ICsgICAgdHJlZS5iaW5kKCI8UmV0dXJuPiIsIGp1bXBfdG9fc2VsZWN0ZWQpDQogICAgKyAgICB0
cmVlLmJpbmQoIjxLUF9FbnRlcj4iLCBqdW1wX3RvX3NlbGVjdGVkKQ0KICAgICsgICAgIyBhZGQ9
VHJ1ZSB0byBhdm9pZCBvdmVycmlkaW5nIHRoZSBkZXNjcmlwdGlvbiB0ZXh0IHVwZGF0ZQ0KICAg
ICsgICAgdHJlZS5iaW5kKCI8PFRyZWV2aWV3U2VsZWN0Pj4iLCB0cmVlX3NlbGVjdCwgYWRkPVRy
dWUpDQogICAgKw0KICAgICsgICAgZGlhbG9nLmJpbmQoIjxFc2NhcGU+IiwgbGFtYmRhIF86IGRp
YWxvZy5kZXN0cm95KCkpDQogICAgKw0KICAgICsgICAgIyBXYWl0IGZvciB0aGUgdXNlciB0byBi
ZSBkb25lIHdpdGggdGhlIGRpYWxvZw0KICAgICsgICAgX3Jvb3Qud2FpdF93aW5kb3coZGlhbG9n
KQ0KICAgICsNCiAgICArICAgIF9qdW1wX3RvX3RyZWUgPSBOb25lDQogICAgKw0KICAgICsgICAg
X3RyZWUuZm9jdXNfc2V0KCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX3VwZGF0ZV9qdW1wX3Rv
X21hdGNoZXMobXNnbGFiZWwsIHNlYXJjaF9zdHJpbmcpOg0KICAgICsgICAgIyBTZWFyY2hlcyBm
b3Igbm9kZXMgbWF0Y2hpbmcgdGhlIHNlYXJjaCBzdHJpbmcgYW5kIHVwZGF0ZXMNCiAgICArICAg
ICMgX2p1bXBfdG9fbWF0Y2hlcy4gUHV0cyBhIG1lc3NhZ2UgaW4gJ21zZ2xhYmVsJyBpZiB0aGVy
ZSBhcmUgbm8gbWF0Y2hlcywNCiAgICArICAgICMgb3IgcmVnZXggZXJyb3JzLg0KICAgICsNCiAg
ICArICAgIGdsb2JhbCBfanVtcF90b19tYXRjaGVzDQogICAgKw0KICAgICsgICAgX2p1bXBfdG9f
dHJlZS5zZWxlY3Rpb25fc2V0KCgpKQ0KICAgICsNCiAgICArICAgIHRyeToNCiAgICArICAgICAg
ICAjIFdlIGNvdWxkIHVzZSByZS5JR05PUkVDQVNFIGhlcmUgaW5zdGVhZCBvZiBsb3dlcigpLCBi
dXQgdGhpcyBpcw0KICAgICsgICAgICAgICMgZmFzdGVyIGZvciByZWdleGVzIGxpa2UgJy4qZGVi
dWckJyAodGhvdWdoIHRoZSAnLionIGlzIHJlZHVuZGFudA0KICAgICsgICAgICAgICMgdGhlcmUp
LiBUaG9zZSBwcm9iYWJseSBoYXZlIGJhZCBpbnRlcmFjdGlvbnMgd2l0aCByZS5zZWFyY2goKSwg
d2hpY2gNCiAgICArICAgICAgICAjIG1hdGNoZXMgYW55d2hlcmUgaW4gdGhlIHN0cmluZy4NCiAg
ICArICAgICAgICByZWdleF9zZWFyY2hlcyA9IFtyZS5jb21waWxlKHJlZ2V4KS5zZWFyY2gNCiAg
ICArICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcmVnZXggaW4gc2VhcmNoX3N0cmluZy5s
b3dlcigpLnNwbGl0KCldDQogICAgKyAgICBleGNlcHQgcmUuZXJyb3IgYXMgZToNCiAgICArICAg
ICAgICBtc2cgPSAiQmFkIHJlZ3VsYXIgZXhwcmVzc2lvbiINCiAgICArICAgICAgICAjIHJlLmVy
cm9yLm1zZyB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuNQ0KICAgICsgICAgICAgIGlmIGhhc2F0dHIo
ZSwgIm1zZyIpOg0KICAgICsgICAgICAgICAgICBtc2cgKz0gIjogIiArIGUubXNnDQogICAgKyAg
ICAgICAgbXNnbGFiZWxbInRleHQiXSA9IG1zZw0KICAgICsgICAgICAgICMgQ2xlYXIgdHJlZQ0K
ICAgICsgICAgICAgIF9qdW1wX3RvX3RyZWUuc2V0X2NoaWxkcmVuKCIiKQ0KICAgICsgICAgICAg
IHJldHVybg0KICAgICsNCiAgICArICAgIF9qdW1wX3RvX21hdGNoZXMgPSBbXQ0KICAgICsgICAg
YWRkX21hdGNoID0gX2p1bXBfdG9fbWF0Y2hlcy5hcHBlbmQNCiAgICArDQogICAgKyAgICBmb3Ig
bm9kZSBpbiBfc29ydGVkX3NjX25vZGVzKCk6DQogICAgKyAgICAgICAgIyBTeW1ib2wvY2hvaWNl
DQogICAgKyAgICAgICAgc2MgPSBub2RlLml0ZW0NCiAgICArDQogICAgKyAgICAgICAgZm9yIHNl
YXJjaCBpbiByZWdleF9zZWFyY2hlczoNCiAgICArICAgICAgICAgICAgIyBCb3RoIHRoZSBuYW1l
IGFuZCB0aGUgcHJvbXB0IG1pZ2h0IGJlIG1pc3NpbmcsIHNpbmNlDQogICAgKyAgICAgICAgICAg
ICMgd2UncmUgc2VhcmNoaW5nIGJvdGggc3ltYm9scyBhbmQgY2hvaWNlcw0KICAgICsNCiAgICAr
ICAgICAgICAgICAgIyBEb2VzIHRoZSByZWdleCBtYXRjaCBlaXRoZXIgdGhlIHN5bWJvbCBuYW1l
IG9yIHRoZQ0KICAgICsgICAgICAgICAgICAjIHByb21wdCAoaWYgYW55KT8NCiAgICArICAgICAg
ICAgICAgaWYgbm90IChzYy5uYW1lIGFuZCBzZWFyY2goc2MubmFtZS5sb3dlcigpKSBvcg0KICAg
ICsgICAgICAgICAgICAgICAgICAgIG5vZGUucHJvbXB0IGFuZCBzZWFyY2gobm9kZS5wcm9tcHRb
MF0ubG93ZXIoKSkpOg0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICMgR2l2ZSB1cCBvbiB0
aGUgZmlyc3QgcmVnZXggdGhhdCBkb2Vzbid0IG1hdGNoLCB0bw0KICAgICsgICAgICAgICAgICAg
ICAgIyBzcGVlZCB0aGluZ3MgdXAgYSBiaXQgd2hlbiBtdWx0aXBsZSByZWdleGVzIGFyZQ0KICAg
ICsgICAgICAgICAgICAgICAgIyBlbnRlcmVkDQogICAgKyAgICAgICAgICAgICAgICBicmVhaw0K
ICAgICsNCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICBhZGRfbWF0Y2gobm9k
ZSkNCiAgICArDQogICAgKyAgICAjIFNlYXJjaCBtZW51cyBhbmQgY29tbWVudHMNCiAgICArDQog
ICAgKyAgICBmb3Igbm9kZSBpbiBfc29ydGVkX21lbnVfY29tbWVudF9ub2RlcygpOg0KICAgICsg
ICAgICAgIGZvciBzZWFyY2ggaW4gcmVnZXhfc2VhcmNoZXM6DQogICAgKyAgICAgICAgICAgIGlm
IG5vdCBzZWFyY2gobm9kZS5wcm9tcHRbMF0ubG93ZXIoKSk6DQogICAgKyAgICAgICAgICAgICAg
ICBicmVhaw0KICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIGFkZF9tYXRjaChu
b2RlKQ0KICAgICsNCiAgICArICAgIG1zZ2xhYmVsWyJ0ZXh0Il0gPSAiIiBpZiBfanVtcF90b19t
YXRjaGVzIGVsc2UgIk5vIG1hdGNoZXMiDQogICAgKw0KICAgICsgICAgX3VwZGF0ZV9qdW1wX3Rv
X2Rpc3BsYXkoKQ0KICAgICsNCiAgICArICAgIGlmIF9qdW1wX3RvX21hdGNoZXM6DQogICAgKyAg
ICAgICAgaXRlbSA9IGlkKF9qdW1wX3RvX21hdGNoZXNbMF0pDQogICAgKyAgICAgICAgX2p1bXBf
dG9fdHJlZS5zZWxlY3Rpb25fc2V0KGl0ZW0pDQogICAgKyAgICAgICAgX2p1bXBfdG9fdHJlZS5m
b2N1cyhpdGVtKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfdXBkYXRlX2p1bXBfdG9fZGlzcGxh
eSgpOg0KICAgICsgICAgIyBVcGRhdGVzIHRoZSBpbWFnZXMgYW5kIHRleHQgZm9yIHRoZSBpdGVt
cyBpbiBfanVtcF90b19tYXRjaGVzLCBhbmQgc2V0cw0KICAgICsgICAgIyB0aGVtIGFzIHRoZSBp
dGVtcyBvZiBfanVtcF90b190cmVlDQogICAgKw0KICAgICsgICAgIyBNaWNyby1vcHRpbWl6ZSBh
IGJpdA0KICAgICsgICAgaXRlbSA9IF9qdW1wX3RvX3RyZWUuaXRlbQ0KICAgICsgICAgaWRfID0g
aWQNCiAgICArICAgIG5vZGVfc3RyID0gX25vZGVfc3RyDQogICAgKyAgICBpbWdfdGFnID0gX2lt
Z190YWcNCiAgICArICAgIHZpc2libGUgPSBfdmlzaWJsZQ0KICAgICsgICAgZm9yIG5vZGUgaW4g
X2p1bXBfdG9fbWF0Y2hlczoNCiAgICArICAgICAgICBpdGVtKGlkXyhub2RlKSwNCiAgICArICAg
ICAgICAgICAgIHRleHQ9bm9kZV9zdHIobm9kZSksDQogICAgKyAgICAgICAgICAgICB0YWdzPWlt
Z190YWcobm9kZSkgaWYgdmlzaWJsZShub2RlKSBlbHNlDQogICAgKyAgICAgICAgICAgICAgICAg
aW1nX3RhZyhub2RlKSArICIgaW52aXNpYmxlIikNCiAgICArDQogICAgKyAgICBfanVtcF90b190
cmVlLnNldF9jaGlsZHJlbigiIiwgKm1hcChpZCwgX2p1bXBfdG9fbWF0Y2hlcykpDQogICAgKw0K
ICAgICsNCiAgICArZGVmIF9qdW1wX3RvKG5vZGUpOg0KICAgICsgICAgIyBKdW1wcyBkaXJlY3Rs
eSB0byAnbm9kZScgYW5kIHNlbGVjdHMgaXQNCiAgICArDQogICAgKyAgICBpZiBfc2luZ2xlX21l
bnU6DQogICAgKyAgICAgICAgX2VudGVyX21lbnUoX3BhcmVudF9tZW51KG5vZGUpKQ0KICAgICsg
ICAgZWxzZToNCiAgICArICAgICAgICBfbG9hZF9wYXJlbnRzKG5vZGUpDQogICAgKw0KICAgICsg
ICAgX3NlbGVjdChfdHJlZSwgaWQobm9kZSkpDQogICAgKw0KICAgICsNCiAgICArIyBPYnNjdXJl
IFB5dGhvbjogV2UgbmV2ZXIgcGFzcyBhIHZhbHVlIGZvciBjYWNoZWRfbm9kZXMsIGFuZCBpdCBr
ZWVwcyBwb2ludGluZw0KICAgICsjIHRvIHRoZSBzYW1lIGxpc3QuIFRoaXMgYXZvaWRzIGEgZ2xv
YmFsLg0KICAgICtkZWYgX3NvcnRlZF9zY19ub2RlcyhjYWNoZWRfbm9kZXM9W10pOg0KICAgICsg
ICAgIyBSZXR1cm5zIGEgc29ydGVkIGxpc3Qgb2Ygc3ltYm9sIGFuZCBjaG9pY2Ugbm9kZXMgdG8g
c2VhcmNoLiBUaGUgc3ltYm9sDQogICAgKyAgICAjIG5vZGVzIGFwcGVhciBmaXJzdCwgc29ydGVk
IGJ5IG5hbWUsIGFuZCB0aGVuIHRoZSBjaG9pY2Ugbm9kZXMsIHNvcnRlZCBieQ0KICAgICsgICAg
IyBwcm9tcHQgYW5kIChzZWNvbmRhcmlseSkgbmFtZS4NCiAgICArDQogICAgKyAgICBpZiBub3Qg
Y2FjaGVkX25vZGVzOg0KICAgICsgICAgICAgICMgQWRkIHN5bWJvbCBub2Rlcw0KICAgICsgICAg
ICAgIGZvciBzeW0gaW4gc29ydGVkKF9rY29uZi51bmlxdWVfZGVmaW5lZF9zeW1zLA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtleT1sYW1iZGEgc3ltOiBzeW0ubmFtZSk6DQogICAg
KyAgICAgICAgICAgICMgKz0gaXMgaW4tcGxhY2UgZm9yIGxpc3RzDQogICAgKyAgICAgICAgICAg
IGNhY2hlZF9ub2RlcyArPSBzeW0ubm9kZXMNCiAgICArDQogICAgKyAgICAgICAgIyBBZGQgY2hv
aWNlIG5vZGVzDQogICAgKw0KICAgICsgICAgICAgIGNob2ljZXMgPSBzb3J0ZWQoX2tjb25mLnVu
aXF1ZV9jaG9pY2VzLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAga2V5PWxhbWJkYSBj
aG9pY2U6IGNob2ljZS5uYW1lIG9yICIiKQ0KICAgICsNCiAgICArICAgICAgICBjYWNoZWRfbm9k
ZXMgKz0gc29ydGVkKA0KICAgICsgICAgICAgICAgICBbbm9kZQ0KICAgICsgICAgICAgICAgICAg
Zm9yIGNob2ljZSBpbiBjaG9pY2VzDQogICAgKyAgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4g
Y2hvaWNlLm5vZGVzXSwNCiAgICArICAgICAgICAgICAga2V5PWxhbWJkYSBub2RlOiBub2RlLnBy
b21wdFswXSBpZiBub2RlLnByb21wdCBlbHNlICIiKQ0KICAgICsNCiAgICArICAgIHJldHVybiBj
YWNoZWRfbm9kZXMNCiAgICArDQogICAgKw0KICAgICtkZWYgX3NvcnRlZF9tZW51X2NvbW1lbnRf
bm9kZXMoY2FjaGVkX25vZGVzPVtdKToNCiAgICArICAgICMgUmV0dXJucyBhIGxpc3Qgb2YgbWVu
dSBhbmQgY29tbWVudCBub2RlcyB0byBzZWFyY2gsIHNvcnRlZCBieSBwcm9tcHQsDQogICAgKyAg
ICAjIHdpdGggdGhlIG1lbnVzIGZpcnN0DQogICAgKw0KICAgICsgICAgaWYgbm90IGNhY2hlZF9u
b2RlczoNCiAgICArICAgICAgICBkZWYgcHJvbXB0X3RleHQobWMpOg0KICAgICsgICAgICAgICAg
ICByZXR1cm4gbWMucHJvbXB0WzBdDQogICAgKw0KICAgICsgICAgICAgIGNhY2hlZF9ub2RlcyAr
PSBzb3J0ZWQoX2tjb25mLm1lbnVzLCBrZXk9cHJvbXB0X3RleHQpDQogICAgKyAgICAgICAgY2Fj
aGVkX25vZGVzICs9IHNvcnRlZChfa2NvbmYuY29tbWVudHMsIGtleT1wcm9tcHRfdGV4dCkNCiAg
ICArDQogICAgKyAgICByZXR1cm4gY2FjaGVkX25vZGVzDQogICAgKw0KICAgICsNCiAgICArZGVm
IF9sb2FkX3BhcmVudHMobm9kZSk6DQogICAgKyAgICAjIE1lbnVzIGFyZSBsYXppbHkgcG9wdWxh
dGVkIGFzIHRoZXkncmUgb3BlbmVkIGluIGZ1bGwtdHJlZSBtb2RlLCBidXQNCiAgICArICAgICMg
anVtcGluZyB0byBhbiBpdGVtIG5lZWRzIGl0cyBwYXJlbnQgbWVudXMgdG8gYmUgcG9wdWxhdGVk
LiBUaGlzIGZ1bmN0aW9uDQogICAgKyAgICAjIHBvcHVsYXRlcyAnbm9kZSdzIHBhcmVudHMuDQog
ICAgKw0KICAgICsgICAgIyBHZXQgYWxsIHBhcmVudHMgbGVhZGluZyB1cCB0byAnbm9kZScsIHNv
cnRlZCB3aXRoIHRoZSByb290IGZpcnN0DQogICAgKyAgICBwYXJlbnRzID0gW10NCiAgICArICAg
IGN1ciA9IG5vZGUucGFyZW50DQogICAgKyAgICB3aGlsZSBjdXIgaXMgbm90IF9rY29uZi50b3Bf
bm9kZToNCiAgICArICAgICAgICBwYXJlbnRzLmFwcGVuZChjdXIpDQogICAgKyAgICAgICAgY3Vy
ID0gY3VyLnBhcmVudA0KICAgICsgICAgcGFyZW50cy5yZXZlcnNlKCkNCiAgICArDQogICAgKyAg
ICBmb3IgaSwgcGFyZW50IGluIGVudW1lcmF0ZShwYXJlbnRzKToNCiAgICArICAgICAgICBpZiBu
b3QgX3RyZWUuaXRlbShpZChwYXJlbnQpLCAib3BlbiIpOg0KICAgICsgICAgICAgICAgICAjIEZv
dW5kIGEgY2xvc2VkIG1lbnUuIFBvcHVsYXRlIGl0IGFuZCBhbGwgdGhlIHJlbWFpbmluZyBtZW51
cw0KICAgICsgICAgICAgICAgICAjIGxlYWRpbmcgdXAgdG8gJ25vZGUnLg0KICAgICsgICAgICAg
ICAgICBmb3IgcGFyZW50IGluIHBhcmVudHNbaTpdOg0KICAgICsgICAgICAgICAgICAgICAgIyBX
ZSBvbmx5IG5lZWQgdG8gcG9wdWxhdGUgInJlYWwiIG1lbnVzL2Nob2ljZXMuIEltcGxpY2l0IG1l
bnVzDQogICAgKyAgICAgICAgICAgICAgICAjIGFyZSBwb3B1bGF0ZWQgd2hlbiB0aGVpciBwYXJl
bnRzIG1lbnVzIGFyZSBlbnRlcmVkLg0KICAgICsgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5z
dGFuY2UocGFyZW50Lml0ZW0sIFN5bWJvbCk6DQogICAgKyAgICAgICAgICAgICAgICAgICAgX2J1
aWxkX2Z1bGxfdHJlZShwYXJlbnQpDQogICAgKyAgICAgICAgICAgIHJldHVybg0KICAgICsNCiAg
ICArDQogICAgK2RlZiBfcGFyZW50X21lbnUobm9kZSk6DQogICAgKyAgICAjIFJldHVybnMgdGhl
IG1lbnUgbm9kZSBvZiB0aGUgbWVudSB0aGF0IGNvbnRhaW5zICdub2RlJy4gSW4gYWRkaXRpb24g
dG8NCiAgICArICAgICMgcHJvcGVyICdtZW51J3MsIHRoaXMgbWlnaHQgYWxzbyBiZSBhICdtZW51
Y29uZmlnJyBzeW1ib2wgb3IgYSAnY2hvaWNlJy4NCiAgICArICAgICMgIk1lbnUiIGhlcmUgbWVh
bnMgYSBtZW51IGluIHRoZSBpbnRlcmZhY2UuDQogICAgKw0KICAgICsgICAgbWVudSA9IG5vZGUu
cGFyZW50DQogICAgKyAgICB3aGlsZSBub3QgbWVudS5pc19tZW51Y29uZmlnOg0KICAgICsgICAg
ICAgIG1lbnUgPSBtZW51LnBhcmVudA0KICAgICsgICAgcmV0dXJuIG1lbnUNCiAgICArDQogICAg
Kw0KICAgICtkZWYgX3RyYWNlX3dyaXRlKHZhciwgZm4pOg0KICAgICsgICAgIyBNYWtlcyBmbigp
IGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgVGtpbnRlciBWYXJpYWJsZSAndmFyJyBjaGFuZ2VzIHZh
bHVlDQogICAgKw0KICAgICsgICAgIyB0cmFjZV92YXJpYWJsZSgpIGlzIGRlcHJlY2F0ZWQgYWNj
b3JkaW5nIHRvIHRoZSBkb2NzdHJpbmcsDQogICAgKyAgICAjIHdoaWNoIHJlY29tbWVuZHMgdHJh
Y2VfYWRkKCkNCiAgICArICAgIGlmIGhhc2F0dHIodmFyLCAidHJhY2VfYWRkIik6DQogICAgKyAg
ICAgICAgdmFyLnRyYWNlX2FkZCgid3JpdGUiLCBmbikNCiAgICArICAgIGVsc2U6DQogICAgKyAg
ICAgICAgdmFyLnRyYWNlX3ZhcmlhYmxlKCJ3IiwgZm4pDQogICAgKw0KICAgICsNCiAgICArZGVm
IF9pbmZvX3N0cihub2RlKToNCiAgICArICAgICMgUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgbWVudSBub2RlICdub2RlJyBhcyBhIHN0cmluZy4NCiAgICArICAgICMNCiAgICArICAgICMg
VGhlIGhlbHBlciBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgbmV3bGluZXMu
IFRoaXMgYWxsb3dzDQogICAgKyAgICAjIHRoZW0gdG8gcmV0dXJuICIiIGlmIHRoZXkgZG9uJ3Qg
d2FudCB0byBhZGQgYW55IG91dHB1dC4NCiAgICArDQogICAgKyAgICBpZiBpc2luc3RhbmNlKG5v
ZGUuaXRlbSwgU3ltYm9sKToNCiAgICArICAgICAgICBzeW0gPSBub2RlLml0ZW0NCiAgICArDQog
ICAgKyAgICAgICAgcmV0dXJuICgNCiAgICArICAgICAgICAgICAgX25hbWVfaW5mbyhzeW0pICsN
CiAgICArICAgICAgICAgICAgX2hlbHBfaW5mbyhzeW0pICsNCiAgICArICAgICAgICAgICAgX2Rp
cmVjdF9kZXBfaW5mbyhzeW0pICsNCiAgICArICAgICAgICAgICAgX2RlZmF1bHRzX2luZm8oc3lt
KSArDQogICAgKyAgICAgICAgICAgIF9zZWxlY3RfaW1wbHlfaW5mbyhzeW0pICsNCiAgICArICAg
ICAgICAgICAgX2tjb25maWdfZGVmX2luZm8oc3ltKQ0KICAgICsgICAgICAgICkNCiAgICArDQog
ICAgKyAgICBpZiBpc2luc3RhbmNlKG5vZGUuaXRlbSwgQ2hvaWNlKToNCiAgICArICAgICAgICBj
aG9pY2UgPSBub2RlLml0ZW0NCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuICgNCiAgICArICAg
ICAgICAgICAgX25hbWVfaW5mbyhjaG9pY2UpICsNCiAgICArICAgICAgICAgICAgX2hlbHBfaW5m
byhjaG9pY2UpICsNCiAgICArICAgICAgICAgICAgJ01vZGU6IHt9XG5cbicuZm9ybWF0KGNob2lj
ZS5zdHJfdmFsdWUpICsNCiAgICArICAgICAgICAgICAgX2Nob2ljZV9zeW1zX2luZm8oY2hvaWNl
KSArDQogICAgKyAgICAgICAgICAgIF9kaXJlY3RfZGVwX2luZm8oY2hvaWNlKSArDQogICAgKyAg
ICAgICAgICAgIF9kZWZhdWx0c19pbmZvKGNob2ljZSkgKw0KICAgICsgICAgICAgICAgICBfa2Nv
bmZpZ19kZWZfaW5mbyhjaG9pY2UpDQogICAgKyAgICAgICAgKQ0KICAgICsNCiAgICArICAgICMg
bm9kZS5pdGVtIGluIChNRU5VLCBDT01NRU5UKQ0KICAgICsgICAgcmV0dXJuIF9rY29uZmlnX2Rl
Zl9pbmZvKG5vZGUpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9uYW1lX2luZm8oc2MpOg0KICAg
ICsgICAgIyBSZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIG5hbWUgb2YgdGhlIHN5bWJvbC9jaG9p
Y2UuIENob2ljZXMgYXJlIHNob3duIGFzDQogICAgKyAgICAjIDxjaG9pY2UgKG5hbWUgaWYgYW55
KT4uDQogICAgKw0KICAgICsgICAgcmV0dXJuIChzYy5uYW1lIGlmIHNjLm5hbWUgZWxzZSBzdGFu
ZGFyZF9zY19leHByX3N0cihzYykpICsgIlxuXG4iDQogICAgKw0KICAgICsNCiAgICArZGVmIF92
YWx1ZV9pbmZvKHN5bSk6DQogICAgKyAgICAjIFJldHVybnMgYSBzdHJpbmcgc2hvd2luZyAnc3lt
J3MgdmFsdWUNCiAgICArDQogICAgKyAgICAjIE9ubHkgcHV0IHF1b3RlcyBhcm91bmQgdGhlIHZh
bHVlIGZvciBzdHJpbmcgc3ltYm9scw0KICAgICsgICAgcmV0dXJuICJWYWx1ZToge31cbiIuZm9y
bWF0KA0KICAgICsgICAgICAgICcie30iJy5mb3JtYXQoc3ltLnN0cl92YWx1ZSkNCiAgICArICAg
ICAgICBpZiBzeW0ub3JpZ190eXBlID09IFNUUklORw0KICAgICsgICAgICAgIGVsc2Ugc3ltLnN0
cl92YWx1ZSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2Nob2ljZV9zeW1zX2luZm8oY2hvaWNl
KToNCiAgICArICAgICMgUmV0dXJucyBhIHN0cmluZyBsaXN0aW5nIHRoZSBjaG9pY2Ugc3ltYm9s
cyBpbiAnY2hvaWNlJy4gQWRkcw0KICAgICsgICAgIyAiKHNlbGVjdGVkKSIgbmV4dCB0byB0aGUg
c2VsZWN0ZWQgb25lLg0KICAgICsNCiAgICArICAgIHMgPSAiQ2hvaWNlIHN5bWJvbHM6XG4iDQog
ICAgKw0KICAgICsgICAgZm9yIHN5bSBpbiBjaG9pY2Uuc3ltczoNCiAgICArICAgICAgICBzICs9
ICIgIC0gIiArIHN5bS5uYW1lDQogICAgKyAgICAgICAgaWYgc3ltIGlzIGNob2ljZS5zZWxlY3Rp
b246DQogICAgKyAgICAgICAgICAgIHMgKz0gIiAoc2VsZWN0ZWQpIg0KICAgICsgICAgICAgIHMg
Kz0gIlxuIg0KICAgICsNCiAgICArICAgIHJldHVybiBzICsgIlxuIg0KICAgICsNCiAgICArDQog
ICAgK2RlZiBfaGVscF9pbmZvKHNjKToNCiAgICArICAgICMgUmV0dXJucyBhIHN0cmluZyB3aXRo
IHRoZSBoZWxwIHRleHQocykgb2YgJ3NjJyAoU3ltYm9sIG9yIENob2ljZSkuDQogICAgKyAgICAj
IFN5bWJvbHMgYW5kIGNob2ljZXMgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgY2FuIGhh
dmUgbXVsdGlwbGUgaGVscA0KICAgICsgICAgIyB0ZXh0cy4NCiAgICArDQogICAgKyAgICBzID0g
IiINCiAgICArDQogICAgKyAgICBmb3Igbm9kZSBpbiBzYy5ub2RlczoNCiAgICArICAgICAgICBp
ZiBub2RlLmhlbHAgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgIHMgKz0gbm9kZS5oZWxw
ICsgIlxuXG4iDQogICAgKw0KICAgICsgICAgcmV0dXJuIHMNCiAgICArDQogICAgKw0KICAgICtk
ZWYgX2RpcmVjdF9kZXBfaW5mbyhzYyk6DQogICAgKyAgICAjIFJldHVybnMgYSBzdHJpbmcgZGVz
Y3JpYmluZyB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiAnc2MnIChTeW1ib2wgb3INCiAgICAr
ICAgICMgQ2hvaWNlKS4gVGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgYXJlIHRoZSBPUiBvZiB0aGUg
ZGVwZW5kZW5jaWVzIGZyb20gZWFjaA0KICAgICsgICAgIyBkZWZpbml0aW9uIGxvY2F0aW9uLiBU
aGUgZGVwZW5kZW5jaWVzIGF0IGVhY2ggZGVmaW5pdGlvbiBsb2NhdGlvbiBjb21lDQogICAgKyAg
ICAjIGZyb20gJ2RlcGVuZHMgb24nIGFuZCBkZXBlbmRlbmNpZXMgaW5oZXJpdGVkIGZyb20gcGFy
ZW50IGl0ZW1zLg0KICAgICsNCiAgICArICAgIHJldHVybiAiIiBpZiBzYy5kaXJlY3RfZGVwIGlz
IF9rY29uZi55IGVsc2UgXA0KICAgICsgICAgICAgICdEaXJlY3QgZGVwZW5kZW5jaWVzICg9e30p
Olxue31cbicgXA0KICAgICsgICAgICAgIC5mb3JtYXQoVFJJX1RPX1NUUltleHByX3ZhbHVlKHNj
LmRpcmVjdF9kZXApXSwNCiAgICArICAgICAgICAgICAgICAgIF9zcGxpdF9leHByX2luZm8oc2Mu
ZGlyZWN0X2RlcCwgMikpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9kZWZhdWx0c19pbmZvKHNj
KToNCiAgICArICAgICMgUmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBkZWZhdWx0cyBv
ZiAnc2MnIChTeW1ib2wgb3IgQ2hvaWNlKQ0KICAgICsNCiAgICArICAgIGlmIG5vdCBzYy5kZWZh
dWx0czoNCiAgICArICAgICAgICByZXR1cm4gIiINCiAgICArDQogICAgKyAgICBzID0gIkRlZmF1
bHQiDQogICAgKyAgICBpZiBsZW4oc2MuZGVmYXVsdHMpID4gMToNCiAgICArICAgICAgICBzICs9
ICJzIg0KICAgICsgICAgcyArPSAiOlxuIg0KICAgICsNCiAgICArICAgIGZvciB2YWwsIGNvbmQg
aW4gc2Mub3JpZ19kZWZhdWx0czoNCiAgICArICAgICAgICBzICs9ICIgIC0gIg0KICAgICsgICAg
ICAgIGlmIGlzaW5zdGFuY2Uoc2MsIFN5bWJvbCk6DQogICAgKyAgICAgICAgICAgIHMgKz0gX2V4
cHJfc3RyKHZhbCkNCiAgICArDQogICAgKyAgICAgICAgICAgICMgU2tpcCB0aGUgdHJpc3RhdGUg
dmFsdWUgaGludCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBqdXN0IGEgc2luZ2xlDQogICAgKyAgICAg
ICAgICAgICMgc3ltYm9sLiBfZXhwcl9zdHIoKSBhbHJlYWR5IHNob3dzIGl0cyB2YWx1ZSBhcyBh
IHN0cmluZy4NCiAgICArICAgICAgICAgICAgIw0KICAgICsgICAgICAgICAgICAjIFRoaXMgYWxz
byBhdm9pZHMgc2hvd2luZyB0aGUgdHJpc3RhdGUgdmFsdWUgZm9yIHN0cmluZy9pbnQvaGV4DQog
ICAgKyAgICAgICAgICAgICMgZGVmYXVsdHMsIHdoaWNoIHdvdWxkbid0IG1ha2UgYW55IHNlbnNl
Lg0KICAgICsgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbCwgdHVwbGUpOg0KICAgICsgICAg
ICAgICAgICAgICAgcyArPSAnICAoPXt9KScuZm9ybWF0KFRSSV9UT19TVFJbZXhwcl92YWx1ZSh2
YWwpXSkNCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAjIERvbid0IHByaW50
IHRoZSB2YWx1ZSBuZXh0IHRvIHRoZSBzeW1ib2wgbmFtZSBmb3IgY2hvaWNlDQogICAgKyAgICAg
ICAgICAgICMgZGVmYXVsdHMsIGFzIGl0IGxvb2tzIGEgYml0IGNvbmZ1c2luZw0KICAgICsgICAg
ICAgICAgICBzICs9IHZhbC5uYW1lDQogICAgKyAgICAgICAgcyArPSAiXG4iDQogICAgKw0KICAg
ICsgICAgICAgIGlmIGNvbmQgaXMgbm90IF9rY29uZi55Og0KICAgICsgICAgICAgICAgICBzICs9
ICIgICAgQ29uZGl0aW9uICg9e30pOlxue30iIFwNCiAgICArICAgICAgICAgICAgICAgICAuZm9y
bWF0KFRSSV9UT19TVFJbZXhwcl92YWx1ZShjb25kKV0sDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgICBfc3BsaXRfZXhwcl9pbmZvKGNvbmQsIDQpKQ0KICAgICsNCiAgICArICAgIHJldHVy
biBzICsgIlxuIg0KICAgICsNCiAgICArDQogICAgK2RlZiBfc3BsaXRfZXhwcl9pbmZvKGV4cHIs
IGluZGVudCk6DQogICAgKyAgICAjIFJldHVybnMgYSBzdHJpbmcgd2l0aCAnZXhwcicgc3BsaXQg
aW50byBpdHMgdG9wLWxldmVsICYmIG9yIHx8IG9wZXJhbmRzLA0KICAgICsgICAgIyB3aXRoIG9u
ZSBvcGVyYW5kIHBlciBsaW5lLCB0b2dldGhlciB3aXRoIHRoZSBvcGVyYW5kJ3MgdmFsdWUuIFRo
aXMgaXMNCiAgICArICAgICMgdXN1YWxseSBlbm91Z2ggdG8gZ2V0IHNvbWV0aGluZyByZWFkYWJs
ZSBmb3IgbG9uZyBleHByZXNzaW9ucy4gQSBmYW5jaWVyDQogICAgKyAgICAjIHJlY3Vyc2l2ZSB0
aGluZ3kgd291bGQgYmUgcG9zc2libGUgdG9vLg0KICAgICsgICAgIw0KICAgICsgICAgIyBpbmRl
bnQ6DQogICAgKyAgICAjICAgTnVtYmVyIG9mIGxlYWRpbmcgc3BhY2VzIHRvIGFkZCBiZWZvcmUg
dGhlIHNwbGl0IGV4cHJlc3Npb24uDQogICAgKw0KICAgICsgICAgaWYgbGVuKHNwbGl0X2V4cHIo
ZXhwciwgQU5EKSkgPiAxOg0KICAgICsgICAgICAgIHNwbGl0X29wID0gQU5EDQogICAgKyAgICAg
ICAgb3Bfc3RyID0gIiYmIg0KICAgICsgICAgZWxzZToNCiAgICArICAgICAgICBzcGxpdF9vcCA9
IE9SDQogICAgKyAgICAgICAgb3Bfc3RyID0gInx8Ig0KICAgICsNCiAgICArICAgIHMgPSAiIg0K
ICAgICsgICAgZm9yIGksIHRlcm0gaW4gZW51bWVyYXRlKHNwbGl0X2V4cHIoZXhwciwgc3BsaXRf
b3ApKToNCiAgICArICAgICAgICBzICs9ICJ7fXt9IHt9Ii5mb3JtYXQoaW5kZW50KiIgIiwNCiAg
ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIiBpZiBpID09IDAgZWxzZSBvcF9z
dHIsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9leHByX3N0cih0ZXJtKSkN
CiAgICArDQogICAgKyAgICAgICAgIyBEb24ndCBib3RoZXIgc2hvd2luZyB0aGUgdmFsdWUgaGlu
dCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBqdXN0IGENCiAgICArICAgICAgICAjIHNpbmdsZSBzeW1i
b2wuIF9leHByX3N0cigpIGFscmVhZHkgc2hvd3MgaXRzIHZhbHVlLg0KICAgICsgICAgICAgIGlm
IGlzaW5zdGFuY2UodGVybSwgdHVwbGUpOg0KICAgICsgICAgICAgICAgICBzICs9ICIgICg9e30p
Ii5mb3JtYXQoVFJJX1RPX1NUUltleHByX3ZhbHVlKHRlcm0pXSkNCiAgICArDQogICAgKyAgICAg
ICAgcyArPSAiXG4iDQogICAgKw0KICAgICsgICAgcmV0dXJuIHMNCiAgICArDQogICAgKw0KICAg
ICtkZWYgX3NlbGVjdF9pbXBseV9pbmZvKHN5bSk6DQogICAgKyAgICAjIFJldHVybnMgYSBzdHJp
bmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB3aGljaCBzeW1ib2xzICdzZWxlY3QnIG9yICdpbXBs
eScNCiAgICArICAgICMgJ3N5bScuIFRoZSBzZWxlY3RpbmcvaW1wbHlpbmcgc3ltYm9scyBhcmUg
Z3JvdXBlZCBhY2NvcmRpbmcgdG8gd2hpY2gNCiAgICArICAgICMgdmFsdWUgdGhleSBzZWxlY3Qv
aW1wbHkgJ3N5bScgdG8gKG4vbS95KS4NCiAgICArDQogICAgKyAgICBkZWYgc2lzKGV4cHIsIHZh
bCwgdGl0bGUpOg0KICAgICsgICAgICAgICMgc2lzID0gc2VsZWN0cy9pbXBsaWVzDQogICAgKyAg
ICAgICAgc2lzID0gW3NpIGZvciBzaSBpbiBzcGxpdF9leHByKGV4cHIsIE9SKSBpZiBleHByX3Zh
bHVlKHNpKSA9PSB2YWxdDQogICAgKyAgICAgICAgaWYgbm90IHNpczoNCiAgICArICAgICAgICAg
ICAgcmV0dXJuICIiDQogICAgKw0KICAgICsgICAgICAgIHJlcyA9IHRpdGxlDQogICAgKyAgICAg
ICAgZm9yIHNpIGluIHNpczoNCiAgICArICAgICAgICAgICAgcmVzICs9ICIgIC0ge31cbiIuZm9y
bWF0KHNwbGl0X2V4cHIoc2ksIEFORClbMF0ubmFtZSkNCiAgICArICAgICAgICByZXR1cm4gcmVz
ICsgIlxuIg0KICAgICsNCiAgICArICAgIHMgPSAiIg0KICAgICsNCiAgICArICAgIGlmIHN5bS5y
ZXZfZGVwIGlzIG5vdCBfa2NvbmYubjoNCiAgICArICAgICAgICBzICs9IHNpcyhzeW0ucmV2X2Rl
cCwgMiwNCiAgICArICAgICAgICAgICAgICAgICAiU3ltYm9scyBjdXJyZW50bHkgeS1zZWxlY3Rp
bmcgdGhpcyBzeW1ib2w6XG4iKQ0KICAgICsgICAgICAgIHMgKz0gc2lzKHN5bS5yZXZfZGVwLCAx
LA0KICAgICsgICAgICAgICAgICAgICAgICJTeW1ib2xzIGN1cnJlbnRseSBtLXNlbGVjdGluZyB0
aGlzIHN5bWJvbDpcbiIpDQogICAgKyAgICAgICAgcyArPSBzaXMoc3ltLnJldl9kZXAsIDAsDQog
ICAgKyAgICAgICAgICAgICAgICAgIlN5bWJvbHMgY3VycmVudGx5IG4tc2VsZWN0aW5nIHRoaXMg
c3ltYm9sIChubyBlZmZlY3QpOlxuIikNCiAgICArDQogICAgKyAgICBpZiBzeW0ud2Vha19yZXZf
ZGVwIGlzIG5vdCBfa2NvbmYubjoNCiAgICArICAgICAgICBzICs9IHNpcyhzeW0ud2Vha19yZXZf
ZGVwLCAyLA0KICAgICsgICAgICAgICAgICAgICAgICJTeW1ib2xzIGN1cnJlbnRseSB5LWltcGx5
aW5nIHRoaXMgc3ltYm9sOlxuIikNCiAgICArICAgICAgICBzICs9IHNpcyhzeW0ud2Vha19yZXZf
ZGVwLCAxLA0KICAgICsgICAgICAgICAgICAgICAgICJTeW1ib2xzIGN1cnJlbnRseSBtLWltcGx5
aW5nIHRoaXMgc3ltYm9sOlxuIikNCiAgICArICAgICAgICBzICs9IHNpcyhzeW0ud2Vha19yZXZf
ZGVwLCAwLA0KICAgICsgICAgICAgICAgICAgICAgICJTeW1ib2xzIGN1cnJlbnRseSBuLWltcGx5
aW5nIHRoaXMgc3ltYm9sIChubyBlZmZlY3QpOlxuIikNCiAgICArDQogICAgKyAgICByZXR1cm4g
cw0KICAgICsNCiAgICArDQogICAgK2RlZiBfa2NvbmZpZ19kZWZfaW5mbyhpdGVtKToNCiAgICAr
ICAgICMgUmV0dXJucyBhIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mICdpdGVtJyBpbiBL
Y29uZmlnIHN5bnRheCwNCiAgICArICAgICMgdG9nZXRoZXIgd2l0aCB0aGUgZGVmaW5pdGlvbiBs
b2NhdGlvbihzKSBhbmQgdGhlaXIgaW5jbHVkZSBhbmQgbWVudSBwYXRocw0KICAgICsNCiAgICAr
ICAgIG5vZGVzID0gW2l0ZW1dIGlmIGlzaW5zdGFuY2UoaXRlbSwgTWVudU5vZGUpIGVsc2UgaXRl
bS5ub2Rlcw0KICAgICsNCiAgICArICAgIHMgPSAiS2NvbmZpZyBkZWZpbml0aW9ue30sIHdpdGgg
cGFyZW50IGRlcHMuIHByb3BhZ2F0ZWQgdG8gJ2RlcGVuZHMgb24nXG4iIFwNCiAgICArICAgICAg
ICAuZm9ybWF0KCJzIiBpZiBsZW4obm9kZXMpID4gMSBlbHNlICIiKQ0KICAgICsgICAgcyArPSAo
bGVuKHMpIC0gMSkqIj0iDQogICAgKw0KICAgICsgICAgZm9yIG5vZGUgaW4gbm9kZXM6DQogICAg
KyAgICAgICAgcyArPSAiXG5cbiIgXA0KICAgICsgICAgICAgICAgICAgIkF0IHt9Ont9XG4iIFwN
CiAgICArICAgICAgICAgICAgICJ7fSIgXA0KICAgICsgICAgICAgICAgICAgIk1lbnUgcGF0aDog
e31cblxuIiBcDQogICAgKyAgICAgICAgICAgICAie30iIFwNCiAgICArICAgICAgICAgICAgIC5m
b3JtYXQobm9kZS5maWxlbmFtZSwgbm9kZS5saW5lbnIsDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgIF9pbmNsdWRlX3BhdGhfaW5mbyhub2RlKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAg
X21lbnVfcGF0aF9pbmZvKG5vZGUpLA0KICAgICsgICAgICAgICAgICAgICAgICAgICBub2RlLmN1
c3RvbV9zdHIoX25hbWVfYW5kX3ZhbF9zdHIpKQ0KICAgICsNCiAgICArICAgIHJldHVybiBzDQog
ICAgKw0KICAgICsNCiAgICArZGVmIF9pbmNsdWRlX3BhdGhfaW5mbyhub2RlKToNCiAgICArICAg
IGlmIG5vdCBub2RlLmluY2x1ZGVfcGF0aDoNCiAgICArICAgICAgICAjIEluIHRoZSB0b3AtbGV2
ZWwgS2NvbmZpZyBmaWxlDQogICAgKyAgICAgICAgcmV0dXJuICIiDQogICAgKw0KICAgICsgICAg
cmV0dXJuICJJbmNsdWRlZCB2aWEge31cbiIuZm9ybWF0KA0KICAgICsgICAgICAgICIgLT4gIi5q
b2luKCJ7fTp7fSIuZm9ybWF0KGZpbGVuYW1lLCBsaW5lbnIpDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgZm9yIGZpbGVuYW1lLCBsaW5lbnIgaW4gbm9kZS5pbmNsdWRlX3BhdGgpKQ0KICAgICsN
CiAgICArDQogICAgK2RlZiBfbWVudV9wYXRoX2luZm8obm9kZSk6DQogICAgKyAgICAjIFJldHVy
bnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgbWVudSBwYXRoIGxlYWRpbmcgdXAgdG8gJ25vZGUn
DQogICAgKw0KICAgICsgICAgcGF0aCA9ICIiDQogICAgKw0KICAgICsgICAgd2hpbGUgbm9kZS5w
YXJlbnQgaXMgbm90IF9rY29uZi50b3Bfbm9kZToNCiAgICArICAgICAgICBub2RlID0gbm9kZS5w
YXJlbnQNCiAgICArDQogICAgKyAgICAgICAgIyBQcm9tcHRsZXNzIGNob2ljZXMgbWlnaHQgYXBw
ZWFyIGFtb25nIHRoZSBwYXJlbnRzLiBVc2UNCiAgICArICAgICAgICAjIHN0YW5kYXJkX3NjX2V4
cHJfc3RyKCkgZm9yIHRoZW0sIHNvIHRoYXQgdGhleSBzaG93IHVwIGFzDQogICAgKyAgICAgICAg
IyAnPGNob2ljZSAobmFtZSBpZiBhbnkpPicuDQogICAgKyAgICAgICAgcGF0aCA9ICIgLT4gIiAr
IChub2RlLnByb21wdFswXSBpZiBub2RlLnByb21wdCBlbHNlDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFuZGFyZF9zY19leHByX3N0cihub2RlLml0ZW0pKSArIHBhdGgNCiAgICAr
DQogICAgKyAgICByZXR1cm4gIihUb3ApIiArIHBhdGgNCiAgICArDQogICAgKw0KICAgICtkZWYg
X25hbWVfYW5kX3ZhbF9zdHIoc2MpOg0KICAgICsgICAgIyBDdXN0b20gc3ltYm9sL2Nob2ljZSBw
cmludGVyIHRoYXQgc2hvd3Mgc3ltYm9sIHZhbHVlcyBhZnRlciBzeW1ib2xzDQogICAgKw0KICAg
ICsgICAgIyBTaG93IHRoZSB2YWx1ZXMgb2Ygbm9uLWNvbnN0YW50IChub24tcXVvdGVkKSBzeW1i
b2xzIHRoYXQgZG9uJ3QgbG9vayBsaWtlDQogICAgKyAgICAjIG51bWJlcnMuIFRoaW5ncyBsaWtl
IDEyMyBhcmUgYWN0dWFsbHkgc3ltYm9sIHJlZmVyZW5jZXMsIGFuZCBvbmx5IHdvcmsgYXMNCiAg
ICArICAgICMgZXhwZWN0ZWQgZHVlIHRvIHVuZGVmaW5lZCBzeW1ib2xzIGdldHRpbmcgdGhlaXIg
bmFtZSBhcyB0aGVpciB2YWx1ZS4NCiAgICArICAgICMgU2hvd2luZyB0aGUgc3ltYm9sIHZhbHVl
IGZvciB0aG9zZSBpc24ndCBoZWxwZnVsIHRob3VnaC4NCiAgICArICAgIGlmIGlzaW5zdGFuY2Uo
c2MsIFN5bWJvbCkgYW5kIG5vdCBzYy5pc19jb25zdGFudCBhbmQgbm90IF9pc19udW0oc2MubmFt
ZSk6DQogICAgKyAgICAgICAgaWYgbm90IHNjLm5vZGVzOg0KICAgICsgICAgICAgICAgICAjIFVu
ZGVmaW5lZCBzeW1ib2wgcmVmZXJlbmNlDQogICAgKyAgICAgICAgICAgIHJldHVybiAie30odW5k
ZWZpbmVkL24pIi5mb3JtYXQoc2MubmFtZSkNCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuICd7
fSg9e30pJy5mb3JtYXQoc2MubmFtZSwgc2Muc3RyX3ZhbHVlKQ0KICAgICsNCiAgICArICAgICMg
Rm9yIG90aGVyIGl0ZW1zLCB1c2UgdGhlIHN0YW5kYXJkIGZvcm1hdA0KICAgICsgICAgcmV0dXJu
IHN0YW5kYXJkX3NjX2V4cHJfc3RyKHNjKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfZXhwcl9z
dHIoZXhwcik6DQogICAgKyAgICAjIEN1c3RvbSBleHByZXNzaW9uIHByaW50ZXIgdGhhdCBzaG93
cyBzeW1ib2wgdmFsdWVzDQogICAgKyAgICByZXR1cm4gZXhwcl9zdHIoZXhwciwgX25hbWVfYW5k
X3ZhbF9zdHIpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9pc19udW0obmFtZSk6DQogICAgKyAg
ICAjIEhldXJpc3RpYyB0byBzZWUgaWYgYSBzeW1ib2wgbmFtZSBsb29rcyBsaWtlIGEgbnVtYmVy
LCBmb3IgbmljZXIgb3V0cHV0DQogICAgKyAgICAjIHdoZW4gcHJpbnRpbmcgZXhwcmVzc2lvbnMu
IFRoaW5ncyBsaWtlIDE2IGFyZSBhY3R1YWxseSBzeW1ib2wgbmFtZXMsIG9ubHkNCiAgICArICAg
ICMgdGhleSBnZXQgdGhlaXIgbmFtZSBhcyB0aGVpciB2YWx1ZSB3aGVuIHRoZSBzeW1ib2wgaXMg
dW5kZWZpbmVkLg0KICAgICsNCiAgICArICAgIHRyeToNCiAgICArICAgICAgICBpbnQobmFtZSkN
CiAgICArICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICsgICAgICAgIGlmIG5vdCBuYW1lLnN0
YXJ0c3dpdGgoKCIweCIsICIwWCIpKToNCiAgICArICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQog
ICAgKw0KICAgICsgICAgICAgIHRyeToNCiAgICArICAgICAgICAgICAgaW50KG5hbWUsIDE2KQ0K
ICAgICsgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICsgICAgICAgICAgICByZXR1cm4g
RmFsc2UNCiAgICArDQogICAgKyAgICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArDQogICAgK2lm
IF9fbmFtZV9fID09ICJfX21haW5fXyI6DQogICAgKyAgICBfbWFpbigpDQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9rY29uZmlnbGliLnB5IGIvc3VwcG9ydC9rY29uZmlnbGli
L2tjb25maWdsaWIucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAw
MDAuLjQxMGRiMjgNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmln
bGliL2tjb25maWdsaWIucHkNCiAgICBAQCAtMCwwICsxLDcwMTggQEANCiAgICArIyBDb3B5cmln
aHQgKGMpIDIwMTEtMjAxOSwgVWxmIE1hZ251c3Nvbg0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBJU0MNCiAgICArDQogICAgKyIiIg0KICAgICtPdmVydmlldw0KICAgICs9PT09PT09
PQ0KICAgICsNCiAgICArS2NvbmZpZ2xpYiBpcyBhIFB5dGhvbiAyLzMgbGlicmFyeSBmb3Igc2Ny
aXB0aW5nIGFuZCBleHRyYWN0aW5nIGluZm9ybWF0aW9uDQogICAgK2Zyb20gS2NvbmZpZyAoaHR0
cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5n
dWFnZS50eHQpDQogICAgK2NvbmZpZ3VyYXRpb24gc3lzdGVtcy4NCiAgICArDQogICAgK1NlZSB0
aGUgaG9tZXBhZ2UgYXQgaHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliIGZv
ciBhIGxvbmdlcg0KICAgICtvdmVydmlldy4NCiAgICArDQogICAgK1NpbmNlIEtjb25maWdsaWIg
MTIuMC4wLCB0aGUgbGlicmFyeSB2ZXJzaW9uIGlzIGF2YWlsYWJsZSBpbg0KICAgICtrY29uZmln
bGliLlZFUlNJT04sIHdoaWNoIGlzIGEgKDxtYWpvcj4sIDxtaW5vcj4sIDxwYXRjaD4pIHR1cGxl
LCBlLmcuDQogICAgKygxMiwgMCwgMCkuDQogICAgKw0KICAgICsNCiAgICArVXNpbmcgS2NvbmZp
Z2xpYiBvbiB0aGUgTGludXgga2VybmVsIHdpdGggdGhlIE1ha2VmaWxlIHRhcmdldHMNCiAgICAr
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCiAgICArDQogICAgK0ZvciB0aGUgTGludXgga2VybmVsLCBhIGhhbmR5IGludGVyZmFj
ZSBpcyBwcm92aWRlZCBieSB0aGUNCiAgICArc2NyaXB0cy9rY29uZmlnL01ha2VmaWxlIHBhdGNo
LCB3aGljaCBjYW4gYmUgYXBwbGllZCB3aXRoIGVpdGhlciAnZ2l0IGFtJyBvcg0KICAgICt0aGUg
J3BhdGNoJyB1dGlsaXR5Og0KICAgICsNCiAgICArICAkIHdnZXQgLXFPLSBodHRwczovL3Jhdy5n
aXRodWJ1c2VyY29udGVudC5jb20vdWxmYWxpemVyL0tjb25maWdsaWIvbWFzdGVyL21ha2VmaWxl
LnBhdGNoIHwgZ2l0IGFtDQogICAgKyAgJCB3Z2V0IC1xTy0gaHR0cHM6Ly9yYXcuZ2l0aHVidXNl
cmNvbnRlbnQuY29tL3VsZmFsaXplci9LY29uZmlnbGliL21hc3Rlci9tYWtlZmlsZS5wYXRjaCB8
IHBhdGNoIC1wMQ0KICAgICsNCiAgICArV2FybmluZzogTm90IHBhc3NpbmcgLXAxIHRvIHBhdGNo
IHdpbGwgY2F1c2UgdGhlIHdyb25nIGZpbGUgdG8gYmUgcGF0Y2hlZC4NCiAgICArDQogICAgK1Bs
ZWFzZSB0ZWxsIG1lIGlmIHRoZSBwYXRjaCBkb2VzIG5vdCBhcHBseS4gSXQgc2hvdWxkIGJlIHRy
aXZpYWwgdG8gYXBwbHkNCiAgICArbWFudWFsbHksIGFzIGl0J3MganVzdCBhIGJsb2NrIG9mIHRl
eHQgdGhhdCBuZWVkcyB0byBiZSBpbnNlcnRlZCBuZWFyIHRoZSBvdGhlcg0KICAgICsqY29uZjog
dGFyZ2V0cyBpbiBzY3JpcHRzL2tjb25maWcvTWFrZWZpbGUuDQogICAgKw0KICAgICtMb29rIGZ1
cnRoZXIgZG93biBmb3IgYSBtb3RpdmF0aW9uIGZvciB0aGUgTWFrZWZpbGUgcGF0Y2ggYW5kIGZv
ciBpbnN0cnVjdGlvbnMNCiAgICArb24gaG93IHlvdSBjYW4gdXNlIEtjb25maWdsaWIgd2l0aG91
dCBpdC4NCiAgICArDQogICAgK0lmIHlvdSBkbyBub3Qgd2lzaCB0byBpbnN0YWxsIEtjb25maWds
aWIgdmlhIHBpcCwgdGhlIE1ha2VmaWxlIHBhdGNoIGlzIHNldCB1cA0KICAgICtzbyB0aGF0IHlv
dSBjYW4gYWxzbyBqdXN0IGNsb25lIEtjb25maWdsaWIgaW50byB0aGUga2VybmVsIHJvb3Q6DQog
ICAgKw0KICAgICsgICQgZ2l0IGNsb25lIGdpdDovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25m
aWdsaWIuZ2l0DQogICAgKyAgJCBnaXQgYW0gS2NvbmZpZ2xpYi9tYWtlZmlsZS5wYXRjaCAgKG9y
ICdwYXRjaCAtcDEgPCBLY29uZmlnbGliL21ha2VmaWxlLnBhdGNoJykNCiAgICArDQogICAgK1dh
cm5pbmc6IFRoZSBkaXJlY3RvcnkgbmFtZSBLY29uZmlnbGliLyBpcyBzaWduaWZpY2FudCBpbiB0
aGlzIGNhc2UsIGJlY2F1c2UNCiAgICAraXQncyBhZGRlZCB0byBQWVRIT05QQVRIIGJ5IHRoZSBu
ZXcgdGFyZ2V0cyBpbiBtYWtlZmlsZS5wYXRjaC4NCiAgICArDQogICAgK1RoZSB0YXJnZXRzIGFk
ZGVkIGJ5IHRoZSBNYWtlZmlsZSBwYXRjaCBhcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcN
CiAgICArc2VjdGlvbnMuDQogICAgKw0KICAgICsNCiAgICArbWFrZSBrbWVudWNvbmZpZw0KICAg
ICstLS0tLS0tLS0tLS0tLS0tDQogICAgKw0KICAgICtUaGlzIHRhcmdldCBydW5zIHRoZSBjdXJz
ZXMgbWVudWNvbmZpZyBpbnRlcmZhY2Ugd2l0aCBQeXRob24gMy4gQXMgb2YNCiAgICArS2NvbmZp
Z2xpYiAxMi4yLjAsIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzIGFyZSBzdXBwb3J0ZWQgKHBy
ZXZpb3VzbHksIG9ubHkNCiAgICArUHl0aG9uIDMgd2FzIHN1cHBvcnRlZCwgc28gdGhpcyB3YXMg
YSBiYWNrcG9ydCkuDQogICAgKw0KICAgICsNCiAgICArbWFrZSBndWljb25maWcNCiAgICArLS0t
LS0tLS0tLS0tLS0NCiAgICArDQogICAgK1RoaXMgdGFyZ2V0IHJ1bnMgdGhlIFRraW50ZXIgbWVu
dWNvbmZpZyBpbnRlcmZhY2UuIEJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzDQogICAgK2FyZSBz
dXBwb3J0ZWQuIFRvIGNoYW5nZSB0aGUgUHl0aG9uIGludGVycHJldGVyIHVzZWQsIHBhc3MNCiAg
ICArUFlUSE9OQ01EPTxleGVjdXRhYmxlPiB0byAnbWFrZScuIFRoZSBkZWZhdWx0IGlzICdweXRo
b24nLg0KICAgICsNCiAgICArDQogICAgK21ha2UgW0FSQ0g9PGFyY2g+XSBpc2NyaXB0Y29uZmln
DQogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgKw0KICAgICtUaGlz
IHRhcmdldCBnaXZlcyBhbiBpbnRlcmFjdGl2ZSBQeXRob24gcHJvbXB0IHdoZXJlIGEgS2NvbmZp
ZyBpbnN0YW5jZSBoYXMNCiAgICArYmVlbiBwcmVsb2FkZWQgYW5kIGlzIGF2YWlsYWJsZSBpbiAn
a2NvbmYnLiBUbyBjaGFuZ2UgdGhlIFB5dGhvbiBpbnRlcnByZXRlcg0KICAgICt1c2VkLCBwYXNz
IFBZVEhPTkNNRD08ZXhlY3V0YWJsZT4gdG8gJ21ha2UnLiBUaGUgZGVmYXVsdCBpcyAncHl0aG9u
Jy4NCiAgICArDQogICAgK1RvIGdldCBhIGZlZWwgZm9yIHRoZSBBUEksIHRyeSBldmFsdWF0aW5n
IGFuZCBwcmludGluZyB0aGUgc3ltYm9scyBpbg0KICAgICtrY29uZi5kZWZpbmVkX3N5bXMsIGFu
ZCBleHBsb3JlIHRoZSBNZW51Tm9kZSBtZW51IHRyZWUgc3RhcnRpbmcgYXQNCiAgICAra2NvbmYu
dG9wX25vZGUgYnkgZm9sbG93aW5nICduZXh0JyBhbmQgJ2xpc3QnIHBvaW50ZXJzLg0KICAgICsN
CiAgICArVGhlIGl0ZW0gY29udGFpbmVkIGluIGEgbWVudSBub2RlIGlzIGZvdW5kIGluIE1lbnVO
b2RlLml0ZW0gKG5vdGUgdGhhdCB0aGlzIGNhbg0KICAgICtiZSBvbmUgb2YgdGhlIGNvbnN0YW50
cyBrY29uZmlnbGliLk1FTlUgYW5kIGtjb25maWdsaWIuQ09NTUVOVCksIGFuZCBhbGwNCiAgICAr
c3ltYm9scyBhbmQgY2hvaWNlcyBoYXZlIGEgJ25vZGVzJyBhdHRyaWJ1dGUgY29udGFpbmluZyB0
aGVpciBtZW51IG5vZGVzDQogICAgKyh1c3VhbGx5IG9ubHkgb25lKS4gUHJpbnRpbmcgYSBtZW51
IG5vZGUgd2lsbCBwcmludCBpdHMgaXRlbSwgaW4gS2NvbmZpZw0KICAgICtmb3JtYXQuDQogICAg
Kw0KICAgICtJZiB5b3Ugd2FudCB0byBsb29rIHVwIGEgc3ltYm9sIGJ5IG5hbWUsIHVzZSB0aGUg
a2NvbmYuc3ltcyBkaWN0aW9uYXJ5Lg0KICAgICsNCiAgICArDQogICAgK21ha2Ugc2NyaXB0Y29u
ZmlnIFNDUklQVD08c2NyaXB0PiBbU0NSSVBUX0FSRz08YXJnPl0NCiAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICsNCiAgICArVGhp
cyB0YXJnZXQgcnVucyB0aGUgUHl0aG9uIHNjcmlwdCBnaXZlbiBieSB0aGUgU0NSSVBUIHBhcmFt
ZXRlciBvbiB0aGUNCiAgICArY29uZmlndXJhdGlvbi4gc3lzLmFyZ3ZbMV0gaG9sZHMgdGhlIG5h
bWUgb2YgdGhlIHRvcC1sZXZlbCBLY29uZmlnIGZpbGUNCiAgICArKGN1cnJlbnRseSBhbHdheXMg
Iktjb25maWciIGluIHByYWN0aWNlKSwgYW5kIHN5cy5hcmd2WzJdIGhvbGRzIHRoZSBTQ1JJUFRf
QVJHDQogICAgK2FyZ3VtZW50LCBpZiBnaXZlbi4NCiAgICArDQogICAgK1NlZSB0aGUgZXhhbXBs
ZXMvIHN1YmRpcmVjdG9yeSBmb3IgZXhhbXBsZSBzY3JpcHRzLg0KICAgICsNCiAgICArDQogICAg
K21ha2UgZHVtcHZhcnNjb25maWcNCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICsNCiAg
ICArVGhpcyB0YXJnZXQgcHJpbnRzIGEgbGlzdCBvZiBhbGwgZW52aXJvbm1lbnQgdmFyaWFibGVz
IHJlZmVyZW5jZWQgZnJvbSB0aGUNCiAgICArS2NvbmZpZyBmaWxlcywgdG9nZXRoZXIgd2l0aCB0
aGVpciB2YWx1ZXMuIFNlZSB0aGUNCiAgICArS2NvbmZpZ2xpYi9leGFtcGxlcy9kdW1wdmFycy5w
eSBzY3JpcHQuDQogICAgKw0KICAgICtPbmx5IGVudmlyb25tZW50IHZhcmlhYmxlcyB0aGF0IGFy
ZSByZWZlcmVuY2VkIHZpYSB0aGUgS2NvbmZpZyBwcmVwcm9jZXNzb3INCiAgICArJChGT08pIHN5
bnRheCBhcmUgaW5jbHVkZWQuIFRoZSBwcmVwcm9jZXNzb3Igd2FzIGFkZGVkIGluIExpbnV4IDQu
MTguDQogICAgKw0KICAgICsNCiAgICArVXNpbmcgS2NvbmZpZ2xpYiB3aXRob3V0IHRoZSBNYWtl
ZmlsZSB0YXJnZXRzDQogICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KICAgICsNCiAgICArVGhlIG1ha2UgdGFyZ2V0cyBhcmUgb25seSBuZWVkZWQgdG8g
cGljayB1cCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZXhwb3J0ZWQgZnJvbQ0KICAgICt0aGUgS2J1
aWxkIG1ha2VmaWxlcyBhbmQgcmVmZXJlbmNlZCBpbnNpZGUgS2NvbmZpZyBmaWxlcywgdmlhIGUu
Zy4NCiAgICArJ3NvdXJjZSAiYXJjaC8kKFNSQ0FSQ0gpL0tjb25maWciIGFuZCBjb21tYW5kcyBy
dW4gdmlhICckKHNoZWxsLC4uLiknLg0KICAgICsNCiAgICArVGhlc2UgdmFyaWFibGVzIGFyZSBy
ZWZlcmVuY2VkIGFzIG9mIHdyaXRpbmcgKExpbnV4IDQuMTgpLCB0b2dldGhlciB3aXRoIHNhbXBs
ZQ0KICAgICt2YWx1ZXM6DQogICAgKw0KICAgICsgIHNyY3RyZWUgICAgICAgICAgKC4pDQogICAg
KyAgQVJDSCAgICAgICAgICAgICAoeDg2KQ0KICAgICsgIFNSQ0FSQ0ggICAgICAgICAgKHg4NikN
CiAgICArICBLRVJORUxWRVJTSU9OICAgICg0LjE4LjApDQogICAgKyAgQ0MgICAgICAgICAgICAg
ICAoZ2NjKQ0KICAgICsgIEhPU1RDQyAgICAgICAgICAgKGdjYykNCiAgICArICBIT1NUQ1hYICAg
ICAgICAgIChnKyspDQogICAgKyAgQ0NfVkVSU0lPTl9URVhUICAoZ2NjIChVYnVudHUgNy4zLjAt
MTZ1YnVudHUzKSA3LjMuMCkNCiAgICArDQogICAgK09sZGVyIGtlcm5lbHMgb25seSByZWZlcmVu
Y2UgQVJDSCwgU1JDQVJDSCwgYW5kIEtFUk5FTFZFUlNJT04uDQogICAgKw0KICAgICtJZiB5b3Vy
IGtlcm5lbCBpcyByZWNlbnQgZW5vdWdoICg0LjE4KyksIHlvdSBjYW4gZ2V0IGEgbGlzdCBvZiBy
ZWZlcmVuY2VkDQogICAgK2Vudmlyb25tZW50IHZhcmlhYmxlcyB2aWEgJ21ha2UgZHVtcHZhcnNj
b25maWcnIChzZWUgYWJvdmUpLiBOb3RlIHRoYXQgdGhpcw0KICAgICtjb21tYW5kIGlzIGFkZGVk
IGJ5IHRoZSBNYWtlZmlsZSBwYXRjaC4NCiAgICArDQogICAgK1RvIHJ1biBLY29uZmlnbGliIHdp
dGhvdXQgdGhlIE1ha2VmaWxlIHBhdGNoLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcw0K
ICAgICttYW51YWxseToNCiAgICArDQogICAgKyAgJCBzcmN0cmVlPS4gQVJDSD14ODYgU1JDQVJD
SD14ODYgS0VSTkVMVkVSU0lPTj1gbWFrZSBrZXJuZWx2ZXJzaW9uYCAuLi4gcHl0aG9uKDMpDQog
ICAgKyAgPj4+IGltcG9ydCBrY29uZmlnbGliDQogICAgKyAgPj4+IGtjb25mID0ga2NvbmZpZ2xp
Yi5LY29uZmlnKCkgICMgZmlsZW5hbWUgZGVmYXVsdHMgdG8gIktjb25maWciDQogICAgKw0KICAg
ICtTZWFyY2ggdGhlIHRvcC1sZXZlbCBNYWtlZmlsZSBmb3IgIkFkZGl0aW9uYWwgQVJDSCBzZXR0
aW5ncyIgdG8gc2VlIG90aGVyDQogICAgK3Bvc3NpYmlsaXRpZXMgZm9yIEFSQ0ggYW5kIFNSQ0FS
Q0guDQogICAgKw0KICAgICsNCiAgICArSW50cm8gdG8gc3ltYm9sIHZhbHVlcw0KICAgICs9PT09
PT09PT09PT09PT09PT09PT09DQogICAgKw0KICAgICtLY29uZmlnbGliIGhhcyB0aGUgc2FtZSBh
c3NpZ25tZW50IHNlbWFudGljcyBhcyB0aGUgQyBpbXBsZW1lbnRhdGlvbi4NCiAgICArDQogICAg
K0FueSBzeW1ib2wgY2FuIGJlIGFzc2lnbmVkIGEgdmFsdWUgYnkgdGhlIHVzZXIgKHZpYSBLY29u
ZmlnLmxvYWRfY29uZmlnKCkgb3INCiAgICArU3ltYm9sLnNldF92YWx1ZSgpKSwgYnV0IHRoaXMg
dXNlciB2YWx1ZSBpcyBvbmx5IHJlc3BlY3RlZCBpZiB0aGUgc3ltYm9sIGlzDQogICAgK3Zpc2li
bGUsIHdoaWNoIGNvcnJlc3BvbmRzIHRvIGl0IChjdXJyZW50bHkpIGJlaW5nIHZpc2libGUgaW4g
dGhlIG1lbnVjb25maWcNCiAgICAraW50ZXJmYWNlLg0KICAgICsNCiAgICArRm9yIHN5bWJvbHMg
d2l0aCBwcm9tcHRzLCB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc3ltYm9sIGlzIGRldGVybWluZWQg
YnkgdGhlDQogICAgK2NvbmRpdGlvbiBvbiB0aGUgcHJvbXB0LiBTeW1ib2xzIHdpdGhvdXQgcHJv
bXB0cyBhcmUgbmV2ZXIgdmlzaWJsZSwgc28gc2V0dGluZw0KICAgICthIHVzZXIgdmFsdWUgb24g
dGhlbSBpcyBwb2ludGxlc3MuIEEgd2FybmluZyB3aWxsIGJlIHByaW50ZWQgYnkgZGVmYXVsdCBp
Zg0KICAgICtTeW1ib2wuc2V0X3ZhbHVlKCkgaXMgY2FsbGVkIG9uIGEgcHJvbXB0bGVzcyBzeW1i
b2wuIEFzc2lnbm1lbnRzIHRvIHByb21wdGxlc3MNCiAgICArc3ltYm9scyBhcmUgbm9ybWFsIHdp
dGhpbiBhIC5jb25maWcgZmlsZSwgc28gbm8gc2ltaWxhciB3YXJuaW5nIHdpbGwgYmUgcHJpbnRl
ZA0KICAgICtieSBsb2FkX2NvbmZpZygpLg0KICAgICsNCiAgICArRGVwZW5kZW5jaWVzIGZyb20g
cGFyZW50cyBhbmQgJ2lmJy8nZGVwZW5kcyBvbicgYXJlIHByb3BhZ2F0ZWQgdG8gcHJvcGVydGll
cywNCiAgICAraW5jbHVkaW5nIHByb21wdHMsIHNvIHRoZXNlIHR3byBjb25maWd1cmF0aW9ucyBh
cmUgbG9naWNhbGx5IGVxdWl2YWxlbnQ6DQogICAgKw0KICAgICsoMSkNCiAgICArDQogICAgKyAg
bWVudSAibWVudSINCiAgICArICAgICAgZGVwZW5kcyBvbiBBDQogICAgKw0KICAgICsgIGlmIEIN
CiAgICArDQogICAgKyAgY29uZmlnIEZPTw0KICAgICsgICAgICB0cmlzdGF0ZSAiZm9vIiBpZiBE
DQogICAgKyAgICAgIGRlZmF1bHQgeQ0KICAgICsgICAgICBkZXBlbmRzIG9uIEMNCiAgICArDQog
ICAgKyAgZW5kaWYNCiAgICArDQogICAgKyAgZW5kbWVudQ0KICAgICsNCiAgICArKDIpDQogICAg
Kw0KICAgICsgIG1lbnUgIm1lbnUiDQogICAgKyAgICAgIGRlcGVuZHMgb24gQQ0KICAgICsNCiAg
ICArICBjb25maWcgRk9PDQogICAgKyAgICAgIHRyaXN0YXRlICJmb28iIGlmIEEgJiYgQiAmJiBD
ICYmIEQNCiAgICArICAgICAgZGVmYXVsdCB5IGlmIEEgJiYgQiAmJiBDDQogICAgKw0KICAgICsg
IGVuZG1lbnUNCiAgICArDQogICAgK0luIHRoaXMgZXhhbXBsZSwgQSAmJiBCICYmIEMgJiYgRCAo
dGhlIHByb21wdCBjb25kaXRpb24pIG5lZWRzIHRvIGJlIG5vbi1uIGZvcg0KICAgICtGT08gdG8g
YmUgdmlzaWJsZSAoYXNzaWduYWJsZSkuIElmIGl0cyB2YWx1ZSBpcyBtLCB0aGUgc3ltYm9sIGNh
biBvbmx5IGJlDQogICAgK2Fzc2lnbmVkIHRoZSB2YWx1ZSBtOiBUaGUgdmlzaWJpbGl0eSBzZXRz
IGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB2YWx1ZSB0aGF0IGNhbg0KICAgICtiZSBhc3NpZ25lZCBi
eSB0aGUgdXNlciwgYW5kIGFueSBoaWdoZXIgdXNlciB2YWx1ZSB3aWxsIGJlIHRydW5jYXRlZCBk
b3duLg0KICAgICsNCiAgICArJ2RlZmF1bHQnIHByb3BlcnRpZXMgYXJlIGluZGVwZW5kZW50IG9m
IHRoZSB2aXNpYmlsaXR5LCB0aG91Z2ggYSAnZGVmYXVsdCcgd2lsbA0KICAgICtvZnRlbiBnZXQg
dGhlIHNhbWUgY29uZGl0aW9uIGFzIHRoZSBwcm9tcHQgZHVlIHRvIGRlcGVuZGVuY3kgcHJvcGFn
YXRpb24uDQogICAgKydkZWZhdWx0JyBwcm9wZXJ0aWVzIGFyZSB1c2VkIGlmIHRoZSBzeW1ib2wg
aXMgbm90IHZpc2libGUgb3IgaGFzIG5vIHVzZXINCiAgICArdmFsdWUuDQogICAgKw0KICAgICtT
eW1ib2xzIHdpdGggbm8gdXNlciB2YWx1ZSAob3IgdGhhdCBoYXZlIGEgdXNlciB2YWx1ZSBidXQg
YXJlIG5vdCB2aXNpYmxlKSBhbmQNCiAgICArbm8gKGFjdGl2ZSkgJ2RlZmF1bHQnIGRlZmF1bHQg
dG8gbiBmb3IgYm9vbC90cmlzdGF0ZSBzeW1ib2xzLCBhbmQgdG8gdGhlIGVtcHR5DQogICAgK3N0
cmluZyBmb3Igb3RoZXIgc3ltYm9sIHR5cGVzLg0KICAgICsNCiAgICArJ3NlbGVjdCcgd29ya3Mg
c2ltaWxhcmx5IHRvIHN5bWJvbCB2aXNpYmlsaXR5LCBidXQgc2V0cyBhIGxvd2VyIGJvdW5kIG9u
IHRoZQ0KICAgICt2YWx1ZSBvZiB0aGUgc3ltYm9sLiBUaGUgbG93ZXIgYm91bmQgaXMgZGV0ZXJt
aW5lZCBieSB0aGUgdmFsdWUgb2YgdGhlDQogICAgK3NlbGVjdCppbmcqIHN5bWJvbC4gJ3NlbGVj
dCcgZG9lcyBub3QgcmVzcGVjdCB2aXNpYmlsaXR5LCBzbyBub24tdmlzaWJsZQ0KICAgICtzeW1i
b2xzIGNhbiBiZSBmb3JjZWQgdG8gYSBwYXJ0aWN1bGFyIChtaW5pbXVtKSB2YWx1ZSBieSBhIHNl
bGVjdCBhcyB3ZWxsLg0KICAgICsNCiAgICArRm9yIG5vbi1ib29sL3RyaXN0YXRlIHN5bWJvbHMs
IGl0IG9ubHkgbWF0dGVycyB3aGV0aGVyIHRoZSB2aXNpYmlsaXR5IGlzIG4gb3INCiAgICArbm9u
LW46IG0gdmlzaWJpbGl0eSBhY3RzIHRoZSBzYW1lIGFzIHkgdmlzaWJpbGl0eS4NCiAgICArDQog
ICAgK0NvbmRpdGlvbnMgb24gJ2RlZmF1bHQnIGFuZCAnc2VsZWN0JyB3b3JrIGluIG1vc3RseSBp
bnR1aXRpdmUgd2F5cy4gSWYgdGhlDQogICAgK2NvbmRpdGlvbiBpcyBuLCB0aGUgJ2RlZmF1bHQn
IG9yICdzZWxlY3QnIGlzIGRpc2FibGVkLiBJZiBpdCBpcyBtLCB0aGUNCiAgICArJ2RlZmF1bHQn
IG9yICdzZWxlY3QnIHZhbHVlICh0aGUgdmFsdWUgb2YgdGhlIHNlbGVjdGluZyBzeW1ib2wpIGlz
IHRydW5jYXRlZA0KICAgICtkb3duIHRvIG0uDQogICAgKw0KICAgICtXaGVuIHdyaXRpbmcgYSBj
b25maWd1cmF0aW9uIHdpdGggS2NvbmZpZy53cml0ZV9jb25maWcoKSwgb25seSBzeW1ib2xzIHRo
YXQgYXJlDQogICAgK3Zpc2libGUsIGhhdmUgYW4gKGFjdGl2ZSkgZGVmYXVsdCwgb3IgYXJlIHNl
bGVjdGVkIHdpbGwgZ2V0IHdyaXR0ZW4gb3V0IChub3RlDQogICAgK3RoYXQgdGhpcyBpbmNsdWRl
cyBhbGwgc3ltYm9scyB0aGF0IHdvdWxkIGFjY2VwdCB1c2VyIHZhbHVlcykuIEtjb25maWdsaWIN
CiAgICArbWF0Y2hlcyB0aGUgLmNvbmZpZyBmb3JtYXQgcHJvZHVjZWQgYnkgdGhlIEMgaW1wbGVt
ZW50YXRpb25zIGRvd24gdG8gdGhlDQogICAgK2NoYXJhY3Rlci4gVGhpcyBlYXNlcyB0ZXN0aW5n
Lg0KICAgICsNCiAgICArRm9yIGEgdmlzaWJsZSBib29sL3RyaXN0YXRlIHN5bWJvbCBGT08gd2l0
aCB2YWx1ZSBuLCB0aGlzIGxpbmUgaXMgd3JpdHRlbiB0bw0KICAgICsuY29uZmlnOg0KICAgICsN
CiAgICArICAgICMgQ09ORklHX0ZPTyBpcyBub3Qgc2V0DQogICAgKw0KICAgICtUaGUgcG9pbnQg
aXMgdG8gcmVtZW1iZXIgdGhlIHVzZXIgbiBzZWxlY3Rpb24gKHdoaWNoIG1pZ2h0IGRpZmZlciBm
cm9tIHRoZQ0KICAgICtkZWZhdWx0IHZhbHVlIHRoZSBzeW1ib2wgd291bGQgZ2V0KSwgd2hpbGUg
YXQgdGhlIHNhbWUgc3RpY2tpbmcgdG8gdGhlIHJ1bGUNCiAgICArdGhhdCB1bmRlZmluZWQgY29y
cmVzcG9uZHMgdG8gbiAoLmNvbmZpZyB1c2VzIE1ha2VmaWxlIGZvcm1hdCwgbWFraW5nIHRoZSBs
aW5lDQogICAgK2Fib3ZlIGEgY29tbWVudCkuIFdoZW4gdGhlIC5jb25maWcgZmlsZSBpcyByZWFk
IGJhY2sgaW4sIHRoaXMgbGluZSB3aWxsIGJlDQogICAgK3RyZWF0ZWQgdGhlIHNhbWUgYXMgdGhl
IGZvbGxvd2luZyBhc3NpZ25tZW50Og0KICAgICsNCiAgICArICAgIENPTkZJR19GT089bg0KICAg
ICsNCiAgICArSW4gS2NvbmZpZ2xpYiwgdGhlIHNldCBvZiAoY3VycmVudGx5KSBhc3NpZ25hYmxl
IHZhbHVlcyBmb3IgYSBib29sL3RyaXN0YXRlDQogICAgK3N5bWJvbCBhcHBlYXIgaW4gU3ltYm9s
LmFzc2lnbmFibGUuIEZvciBvdGhlciBzeW1ib2wgdHlwZXMsIGp1c3QgY2hlY2sgaWYNCiAgICAr
c3ltLnZpc2liaWxpdHkgaXMgbm9uLTAgKG5vbi1uKSB0byBzZWUgd2hldGhlciB0aGUgdXNlciB2
YWx1ZSB3aWxsIGhhdmUgYW4NCiAgICArZWZmZWN0Lg0KICAgICsNCiAgICArDQogICAgK0ludHJv
IHRvIHRoZSBtZW51IHRyZWUNCiAgICArPT09PT09PT09PT09PT09PT09PT09PQ0KICAgICsNCiAg
ICArVGhlIG1lbnUgc3RydWN0dXJlLCBhcyBzZWVuIGluIGUuZy4gbWVudWNvbmZpZywgaXMgcmVw
cmVzZW50ZWQgYnkgYSB0cmVlIG9mDQogICAgK01lbnVOb2RlIG9iamVjdHMuIFRoZSB0b3Agbm9k
ZSBvZiB0aGUgY29uZmlndXJhdGlvbiBjb3JyZXNwb25kcyB0byBhbiBpbXBsaWNpdA0KICAgICt0
b3AtbGV2ZWwgbWVudSwgdGhlIHRpdGxlIG9mIHdoaWNoIGlzIHNob3duIGF0IHRoZSB0b3AgaW4g
dGhlIHN0YW5kYXJkDQogICAgK21lbnVjb25maWcgaW50ZXJmYWNlLiAoVGhlIHRpdGxlIGlzIGFs
c28gYXZhaWxhYmxlIGluIEtjb25maWcubWFpbm1lbnVfdGV4dCBpbg0KICAgICtLY29uZmlnbGli
LikNCiAgICArDQogICAgK1RoZSB0b3Agbm9kZSBpcyBmb3VuZCBpbiBLY29uZmlnLnRvcF9ub2Rl
LiBGcm9tIHRoZXJlLCB5b3UgY2FuIHZpc2l0IGNoaWxkIG1lbnUNCiAgICArbm9kZXMgYnkgZm9s
bG93aW5nIHRoZSAnbGlzdCcgcG9pbnRlciwgYW5kIGFueSBmb2xsb3dpbmcgbWVudSBub2RlcyBi
eQ0KICAgICtmb2xsb3dpbmcgdGhlICduZXh0JyBwb2ludGVyLiBVc3VhbGx5LCBhIG5vbi1Ob25l
ICdsaXN0JyBwb2ludGVyIGluZGljYXRlcyBhDQogICAgK21lbnUgb3IgQ2hvaWNlLCBidXQgbWVu
dSBub2RlcyBmb3Igc3ltYm9scyBjYW4gc29tZXRpbWVzIGhhdmUgYSBub24tTm9uZSAnbGlzdCcN
CiAgICArcG9pbnRlciB0b28gZHVlIHRvIHN1Ym1lbnVzIGNyZWF0ZWQgaW1wbGljaXRseSBmcm9t
IGRlcGVuZGVuY2llcy4NCiAgICArDQogICAgK01lbnVOb2RlLml0ZW0gaXMgZWl0aGVyIGEgU3lt
Ym9sIG9yIGEgQ2hvaWNlIG9iamVjdCwgb3Igb25lIG9mIHRoZSBjb25zdGFudHMNCiAgICArTUVO
VSBhbmQgQ09NTUVOVC4gVGhlIHByb21wdCBvZiB0aGUgbWVudSBub2RlIGNhbiBiZSBmb3VuZCBp
biBNZW51Tm9kZS5wcm9tcHQsDQogICAgK3doaWNoIGFsc28gaG9sZHMgdGhlIHRpdGxlIGZvciBt
ZW51cyBhbmQgY29tbWVudHMuIEZvciBTeW1ib2wgYW5kIENob2ljZSwNCiAgICArTWVudU5vZGUu
aGVscCBob2xkcyB0aGUgaGVscCB0ZXh0IChpZiBhbnksIG90aGVyd2lzZSBOb25lKS4NCiAgICAr
DQogICAgK01vc3Qgc3ltYm9scyB3aWxsIG9ubHkgaGF2ZSBhIHNpbmdsZSBtZW51IG5vZGUuIEEg
c3ltYm9sIGRlZmluZWQgaW4gbXVsdGlwbGUNCiAgICArbG9jYXRpb25zIHdpbGwgaGF2ZSBvbmUg
bWVudSBub2RlIGZvciBlYWNoIGxvY2F0aW9uLiBUaGUgbGlzdCBvZiBtZW51IG5vZGVzIGZvcg0K
ICAgICthIFN5bWJvbCBvciBDaG9pY2UgY2FuIGJlIGZvdW5kIGluIHRoZSBTeW1ib2wvQ2hvaWNl
Lm5vZGVzIGF0dHJpYnV0ZS4NCiAgICArDQogICAgK05vdGUgdGhhdCBwcm9tcHRzIGFuZCBoZWxw
IHRleHRzIGZvciBzeW1ib2xzIGFuZCBjaG9pY2VzIGFyZSBzdG9yZWQgaW4gdGhlaXINCiAgICAr
bWVudSBub2RlKHMpIHJhdGhlciB0aGFuIGluIHRoZSBTeW1ib2wgb3IgQ2hvaWNlIG9iamVjdHMg
dGhlbXNlbHZlcy4gVGhpcyBtYWtlcw0KICAgICtpdCBwb3NzaWJsZSB0byBkZWZpbmUgYSBzeW1i
b2wgaW4gbXVsdGlwbGUgbG9jYXRpb25zIHdpdGggYSBkaWZmZXJlbnQgcHJvbXB0IG9yDQogICAg
K2hlbHAgdGV4dCBpbiBlYWNoIGxvY2F0aW9uLiBUbyBnZXQgdGhlIGhlbHAgdGV4dCBvciBwcm9t
cHQgZm9yIGEgc3ltYm9sIHdpdGggYQ0KICAgICtzaW5nbGUgbWVudSBub2RlLCBkbyBzeW0ubm9k
ZXNbMF0uaGVscCBhbmQgc3ltLm5vZGVzWzBdLnByb21wdCwgcmVzcGVjdGl2ZWx5Lg0KICAgICtU
aGUgcHJvbXB0IGlzIGEgKHRleHQsIGNvbmRpdGlvbikgdHVwbGUsIHdoZXJlIGNvbmRpdGlvbiBk
ZXRlcm1pbmVzIHRoZQ0KICAgICt2aXNpYmlsaXR5IChzZWUgJ0ludHJvIHRvIGV4cHJlc3Npb25z
JyBiZWxvdykuDQogICAgKw0KICAgICtUaGlzIG9yZ2FuaXphdGlvbiBtaXJyb3JzIHRoZSBDIGlt
cGxlbWVudGF0aW9uLiBNZW51Tm9kZSBpcyBjYWxsZWQNCiAgICArJ3N0cnVjdCBtZW51JyB0aGVy
ZSwgYnV0IEkgdGhvdWdodCAibWVudSIgd2FzIGEgY29uZnVzaW5nIG5hbWUuDQogICAgKw0KICAg
ICtJdCBpcyBwb3NzaWJsZSB0byBnaXZlIGEgQ2hvaWNlIGEgbmFtZSBhbmQgZGVmaW5lIGl0IGlu
IG11bHRpcGxlIGxvY2F0aW9ucywNCiAgICAraGVuY2Ugd2h5IENob2ljZS5ub2RlcyBpcyBhbHNv
IGEgbGlzdC4NCiAgICArDQogICAgK0FzIGEgY29udmVuaWVuY2UsIHRoZSBwcm9wZXJ0aWVzIGFk
ZGVkIGF0IGEgcGFydGljdWxhciBkZWZpbml0aW9uIGxvY2F0aW9uIGFyZQ0KICAgICthdmFpbGFi
bGUgb24gdGhlIE1lbnVOb2RlIGl0c2VsZiwgaW4gZS5nLiBNZW51Tm9kZS5kZWZhdWx0cy4gVGhp
cyBpcyBoZWxwZnVsDQogICAgK3doZW4gZ2VuZXJhdGluZyBkb2N1bWVudGF0aW9uLCBzbyB0aGF0
IHN5bWJvbHMvY2hvaWNlcyBkZWZpbmVkIGluIG11bHRpcGxlDQogICAgK2xvY2F0aW9ucyBjYW4g
YmUgc2hvd24gd2l0aCB0aGUgY29ycmVjdCBwcm9wZXJ0aWVzIGF0IGVhY2ggbG9jYXRpb24uDQog
ICAgKw0KICAgICsNCiAgICArSW50cm8gdG8gZXhwcmVzc2lvbnMNCiAgICArPT09PT09PT09PT09
PT09PT09PT0NCiAgICArDQogICAgK0V4cHJlc3Npb25zIGNhbiBiZSBldmFsdWF0ZWQgd2l0aCB0
aGUgZXhwcl92YWx1ZSgpIGZ1bmN0aW9uIGFuZCBwcmludGVkIHdpdGgNCiAgICArdGhlIGV4cHJf
c3RyKCkgZnVuY3Rpb24gKHRoZXNlIGFyZSB1c2VkIGludGVybmFsbHkgYXMgd2VsbCkuIEV2YWx1
YXRpbmcgYW4NCiAgICArZXhwcmVzc2lvbiBhbHdheXMgeWllbGRzIGEgdHJpc3RhdGUgdmFsdWUs
IHdoZXJlIG4sIG0sIGFuZCB5IGFyZSByZXByZXNlbnRlZCBhcw0KICAgICswLCAxLCBhbmQgMiwg
cmVzcGVjdGl2ZWx5Lg0KICAgICsNCiAgICArVGhlIGZvbGxvd2luZyB0YWJsZSBzaG91bGQgaGVs
cCB5b3UgZmlndXJlIG91dCBob3cgZXhwcmVzc2lvbnMgYXJlIHJlcHJlc2VudGVkLg0KICAgICtB
LCBCLCBDLCAuLi4gYXJlIHN5bWJvbHMgKFN5bWJvbCBpbnN0YW5jZXMpLCBOT1QgaXMgdGhlIGtj
b25maWdsaWIuTk9UDQogICAgK2NvbnN0YW50LCBldGMuDQogICAgKw0KICAgICtFeHByZXNzaW9u
ICAgICAgICAgICAgUmVwcmVzZW50YXRpb24NCiAgICArLS0tLS0tLS0tLSAgICAgICAgICAgIC0t
LS0tLS0tLS0tLS0tDQogICAgK0EgICAgICAgICAgICAgICAgICAgICBBDQogICAgKyJBIiAgICAg
ICAgICAgICAgICAgICBBIChjb25zdGFudCBzeW1ib2wpDQogICAgKyFBICAgICAgICAgICAgICAg
ICAgICAoTk9ULCBBKQ0KICAgICtBICYmIEIgICAgICAgICAgICAgICAgKEFORCwgQSwgQikNCiAg
ICArQSAmJiBCICYmIEMgICAgICAgICAgIChBTkQsIEEsIChBTkQsIEIsIEMpKQ0KICAgICtBIHx8
IEIgICAgICAgICAgICAgICAgKE9SLCBBLCBCKQ0KICAgICtBIHx8IChCICYmIEMgJiYgRCkgICAg
KE9SLCBBLCAoQU5ELCBCLCAoQU5ELCBDLCBEKSkpDQogICAgK0EgPSBCICAgICAgICAgICAgICAg
ICAoRVFVQUwsIEEsIEIpDQogICAgK0EgIT0gImZvbyIgICAgICAgICAgICAoVU5FUVVBTCwgQSwg
Zm9vIChjb25zdGFudCBzeW1ib2wpKQ0KICAgICtBICYmIEIgPSBDICYmIEQgICAgICAgKEFORCwg
QSwgKEFORCwgKEVRVUFMLCBCLCBDKSwgRCkpDQogICAgK24gICAgICAgICAgICAgICAgICAgICBL
Y29uZmlnLm4gKGNvbnN0YW50IHN5bWJvbCkNCiAgICArbSAgICAgICAgICAgICAgICAgICAgIEtj
b25maWcubSAoY29uc3RhbnQgc3ltYm9sKQ0KICAgICt5ICAgICAgICAgICAgICAgICAgICAgS2Nv
bmZpZy55IChjb25zdGFudCBzeW1ib2wpDQogICAgKyJ5IiAgICAgICAgICAgICAgICAgICBLY29u
ZmlnLnkgKGNvbnN0YW50IHN5bWJvbCkNCiAgICArDQogICAgK1N0cmluZ3MgbGlrZSAiZm9vIiBp
biAnZGVmYXVsdCAiZm9vIicgb3IgJ2RlcGVuZHMgb24gU1lNID0gImZvbyInIGFyZQ0KICAgICty
ZXByZXNlbnRlZCBhcyBjb25zdGFudCBzeW1ib2xzLCBzbyB0aGUgb25seSB2YWx1ZXMgdGhhdCBh
cHBlYXIgaW4gZXhwcmVzc2lvbnMNCiAgICArYXJlIHN5bWJvbHMqKiouIFRoaXMgbWlycm9ycyB0
aGUgQyBpbXBsZW1lbnRhdGlvbi4NCiAgICArDQogICAgKyoqKkZvciBjaG9pY2Ugc3ltYm9scywg
dGhlIHBhcmVudCBDaG9pY2Ugd2lsbCBhcHBlYXIgaW4gZXhwcmVzc2lvbnMgYXMgd2VsbCwNCiAg
ICArYnV0IGl0J3MgdXN1YWxseSBpbnZpc2libGUgYXMgdGhlIHZhbHVlIGludGVyZmFjZXMgb2Yg
U3ltYm9sIGFuZCBDaG9pY2UgYXJlDQogICAgK2lkZW50aWNhbC4gVGhpcyBtaXJyb3JzIHRoZSBD
IGltcGxlbWVudGF0aW9uIGFuZCBtYWtlcyBkaWZmZXJlbnQgY2hvaWNlIG1vZGVzDQogICAgKyJq
dXN0IHdvcmsiLg0KICAgICsNCiAgICArTWFudWFsIGV2YWx1YXRpb24gZXhhbXBsZXM6DQogICAg
Kw0KICAgICsgIC0gVGhlIHZhbHVlIG9mIEEgJiYgQiBpcyBtaW4oQS50cmlfdmFsdWUsIEIudHJp
X3ZhbHVlKQ0KICAgICsNCiAgICArICAtIFRoZSB2YWx1ZSBvZiBBIHx8IEIgaXMgbWF4KEEudHJp
X3ZhbHVlLCBCLnRyaV92YWx1ZSkNCiAgICArDQogICAgKyAgLSBUaGUgdmFsdWUgb2YgIUEgaXMg
MiAtIEEudHJpX3ZhbHVlDQogICAgKw0KICAgICsgIC0gVGhlIHZhbHVlIG9mIEEgPSBCIGlzIDIg
KHkpIGlmIEEuc3RyX3ZhbHVlID09IEIuc3RyX3ZhbHVlLCBhbmQgMCAobikNCiAgICArICAgIG90
aGVyd2lzZS4gTm90ZSB0aGF0IHN0cl92YWx1ZSBpcyB1c2VkIGhlcmUgaW5zdGVhZCBvZiB0cmlf
dmFsdWUuDQogICAgKw0KICAgICsgICAgRm9yIGNvbnN0YW50IChhcyB3ZWxsIGFzIHVuZGVmaW5l
ZCkgc3ltYm9scywgc3RyX3ZhbHVlIG1hdGNoZXMgdGhlIG5hbWUgb2YNCiAgICArICAgIHRoZSBz
eW1ib2wuIFRoaXMgbWlycm9ycyB0aGUgQyBpbXBsZW1lbnRhdGlvbiBhbmQgZXhwbGFpbnMgd2h5
DQogICAgKyAgICAnZGVwZW5kcyBvbiBTWU0gPSAiZm9vIicgYWJvdmUgd29ya3MgYXMgZXhwZWN0
ZWQuDQogICAgKw0KICAgICtuL20veSBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gdGhl
IGNvcnJlc3BvbmRpbmcgY29uc3RhbnQgc3ltYm9scw0KICAgICsibiIvIm0iLyJ5IiAoS2NvbmZp
Zy5uL20veSkgZHVyaW5nIHBhcnNpbmcuDQogICAgKw0KICAgICtLY29uZmlnLmNvbnN0X3N5bXMg
aXMgYSBkaWN0aW9uYXJ5IGxpa2UgS2NvbmZpZy5zeW1zIGJ1dCBmb3IgY29uc3RhbnQgc3ltYm9s
cy4NCiAgICArDQogICAgK0lmIGEgY29uZGl0aW9uIGlzIG1pc3NpbmcgKGUuZy4sIDxjb25kPiB3
aGVuIHRoZSAnaWYgPGNvbmQ+JyBpcyByZW1vdmVkIGZyb20NCiAgICArJ2RlZmF1bHQgQSBpZiA8
Y29uZD4nKSwgaXQgaXMgYWN0dWFsbHkgS2NvbmZpZy55LiBUaGUgc3RhbmRhcmQgX19zdHJfXygp
DQogICAgK2Z1bmN0aW9ucyBqdXN0IGF2b2lkIHByaW50aW5nICdpZiB5JyBjb25kaXRpb25zIHRv
IGdpdmUgY2xlYW5lciBvdXRwdXQuDQogICAgKw0KICAgICsNCiAgICArS2NvbmZpZyBleHRlbnNp
b25zDQogICAgKz09PT09PT09PT09PT09PT09PQ0KICAgICsNCiAgICArS2NvbmZpZ2xpYiBpbmNs
dWRlcyBhIGNvdXBsZSBvZiBLY29uZmlnIGV4dGVuc2lvbnM6DQogICAgKw0KICAgICsnc291cmNl
JyB3aXRoIHJlbGF0aXZlIHBhdGgNCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog
ICAgKw0KICAgICtUaGUgJ3Jzb3VyY2UnIHN0YXRlbWVudCBzb3VyY2VzIEtjb25maWcgZmlsZXMg
d2l0aCBhIHBhdGggcmVsYXRpdmUgdG8gZGlyZWN0b3J5DQogICAgK29mIHRoZSBLY29uZmlnIGZp
bGUgY29udGFpbmluZyB0aGUgJ3Jzb3VyY2UnIHN0YXRlbWVudCwgaW5zdGVhZCBvZiByZWxhdGl2
ZSB0bw0KICAgICt0aGUgcHJvamVjdCByb290Lg0KICAgICsNCiAgICArQ29uc2lkZXIgZm9sbG93
aW5nIGRpcmVjdG9yeSB0cmVlOg0KICAgICsNCiAgICArICBQcm9qZWN0DQogICAgKyAgKy0tS2Nv
bmZpZw0KICAgICsgIHwNCiAgICArICArLS1zcmMNCiAgICArICAgICArLS1LY29uZmlnDQogICAg
KyAgICAgfA0KICAgICsgICAgICstLVN1YlN5c3RlbTENCiAgICArICAgICAgICArLS1LY29uZmln
DQogICAgKyAgICAgICAgfA0KICAgICsgICAgICAgICstLU1vZHVsZUENCiAgICArICAgICAgICAg
ICArLS1LY29uZmlnDQogICAgKw0KICAgICtJbiB0aGlzIGV4YW1wbGUsIGFzc3VtZSB0aGF0IHNy
Yy9TdWJTeXN0ZW0xL0tjb25maWcgd2FudHMgdG8gc291cmNlDQogICAgK3NyYy9TdWJTeXN0ZW0x
L01vZHVsZUEvS2NvbmZpZy4NCiAgICArDQogICAgK1dpdGggJ3NvdXJjZScsIHRoaXMgc3RhdGVt
ZW50IHdvdWxkIGJlIHVzZWQ6DQogICAgKw0KICAgICsgIHNvdXJjZSAic3JjL1N1YlN5c3RlbTEv
TW9kdWxlQS9LY29uZmlnIg0KICAgICsNCiAgICArV2l0aCAncnNvdXJjZScsIHRoaXMgdHVybnMg
aW50bw0KICAgICsNCiAgICArICByc291cmNlICJNb2R1bGVBL0tjb25maWciDQogICAgKw0KICAg
ICtJZiBhbiBhYnNvbHV0ZSBwYXRoIGlzIGdpdmVuIHRvICdyc291cmNlJywgaXQgYWN0cyB0aGUg
c2FtZSBhcyAnc291cmNlJy4NCiAgICArDQogICAgKydyc291cmNlJyBjYW4gYmUgdXNlZCB0byBj
cmVhdGUgInBvc2l0aW9uLWluZGVwZW5kZW50IiBLY29uZmlnIHRyZWVzIHRoYXQgY2FuDQogICAg
K2JlIG1vdmVkIGFyb3VuZCBmcmVlbHkuDQogICAgKw0KICAgICsNCiAgICArR2xvYmJpbmcgJ3Nv
dXJjZScNCiAgICArLS0tLS0tLS0tLS0tLS0tLS0NCiAgICArDQogICAgKydzb3VyY2UnIGFuZCAn
cnNvdXJjZScgYWNjZXB0IGdsb2IgcGF0dGVybnMsIHNvdXJjaW5nIGFsbCBtYXRjaGluZyBLY29u
ZmlnDQogICAgK2ZpbGVzLiBUaGV5IHJlcXVpcmUgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGZpbGUs
IHJhaXNpbmcgYSBLY29uZmlnRXJyb3INCiAgICArb3RoZXJ3aXNlLg0KICAgICsNCiAgICArRm9y
IGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50IG1pZ2h0IHNvdXJjZSBzdWIxL2Zvb2Zv
b2ZvbyBhbmQNCiAgICArc3ViMi9mb29iYXJmb286DQogICAgKw0KICAgICsgIHNvdXJjZSAic3Vi
WzEyXS9mb28qZm9vIg0KICAgICsNCiAgICArVGhlIGdsb2IgcGF0dGVybnMgYWNjZXB0ZWQgYXJl
IHRoZSBzYW1lIGFzIGZvciB0aGUgc3RhbmRhcmQgZ2xvYi5nbG9iKCkNCiAgICArZnVuY3Rpb24u
DQogICAgKw0KICAgICtUd28gYWRkaXRpb25hbCBzdGF0ZW1lbnRzIGFyZSBwcm92aWRlZCBmb3Ig
Y2FzZXMgd2hlcmUgaXQncyBhY2NlcHRhYmxlIGZvciBhDQogICAgK3BhdHRlcm4gdG8gbWF0Y2gg
bm8gZmlsZXM6ICdvc291cmNlJyBhbmQgJ29yc291cmNlJyAodGhlIG8gaXMgZm9yICJvcHRpb25h
bCIpLg0KICAgICsNCiAgICArRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50cyB3
aWxsIGJlIG5vLW9wcyBpZiBuZWl0aGVyICJmb28iIG5vciBhbnkNCiAgICArZmlsZXMgbWF0Y2hp
bmcgImJhcioiIGV4aXN0Og0KICAgICsNCiAgICArICBvc291cmNlICJmb28iDQogICAgKyAgb3Nv
dXJjZSAiYmFyKiINCiAgICArDQogICAgKydvcnNvdXJjZScgZG9lcyBhIHJlbGF0aXZlIG9wdGlv
bmFsIHNvdXJjZS4NCiAgICArDQogICAgKydzb3VyY2UnIGFuZCAnb3NvdXJjZScgYXJlIGFuYWxv
Z291cyB0byAnaW5jbHVkZScgYW5kICctaW5jbHVkZScgaW4gTWFrZS4NCiAgICArDQogICAgKw0K
ICAgICtHZW5lcmFsaXplZCBkZWZfKiBrZXl3b3Jkcw0KICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQ0KICAgICsNCiAgICArZGVmX2ludCwgZGVmX2hleCwgYW5kIGRlZl9zdHJpbmcgYXJl
IGF2YWlsYWJsZSBpbiBhZGRpdGlvbiB0byBkZWZfYm9vbCBhbmQNCiAgICArZGVmX3RyaXN0YXRl
LCBhbGxvd2luZyBpbnQsIGhleCwgYW5kIHN0cmluZyBzeW1ib2xzIHRvIGJlIGdpdmVuIGEgdHlw
ZSBhbmQgYQ0KICAgICtkZWZhdWx0IGF0IHRoZSBzYW1lIHRpbWUuDQogICAgKw0KICAgICsNCiAg
ICArRXh0cmEgb3B0aW9uYWwgd2FybmluZ3MNCiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N
CiAgICArDQogICAgK1NvbWUgb3B0aW9uYWwgd2FybmluZ3MgY2FuIGJlIGNvbnRyb2xsZWQgdmlh
IGVudmlyb25tZW50IHZhcmlhYmxlczoNCiAgICArDQogICAgKyAgLSBLQ09ORklHX1dBUk5fVU5E
RUY6IElmIHNldCB0byAneScsIHdhcm5pbmdzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvciBhbGwNCiAg
ICArICAgIHJlZmVyZW5jZXMgdG8gdW5kZWZpbmVkIHN5bWJvbHMgd2l0aGluIEtjb25maWcgZmls
ZXMuIFRoZSBvbmx5IGdvdGNoYSBpcw0KICAgICsgICAgdGhhdCBhbGwgaGV4IGxpdGVyYWxzIG11
c3QgYmUgcHJlZml4ZWQgd2l0aCAiMHgiIG9yICIwWCIsIHRvIG1ha2UgaXQNCiAgICArICAgIHBv
c3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSBzeW1ib2wgcmVmZXJlbmNlcy4NCiAgICAr
DQogICAgKyAgICBTb21lIHByb2plY3RzIChlLmcuIHRoZSBMaW51eCBrZXJuZWwpIHVzZSBtdWx0
aXBsZSBLY29uZmlnIHRyZWVzIHdpdGggbWFueQ0KICAgICsgICAgc2hhcmVkIEtjb25maWcgZmls
ZXMsIGxlYWRpbmcgdG8gc29tZSBzYWZlIHVuZGVmaW5lZCBzeW1ib2wgcmVmZXJlbmNlcy4NCiAg
ICArICAgIEtDT05GSUdfV0FSTl9VTkRFRiBpcyB1c2VmdWwgaW4gcHJvamVjdHMgdGhhdCBvbmx5
IGhhdmUgYSBzaW5nbGUgS2NvbmZpZw0KICAgICsgICAgdHJlZSB0aG91Z2guDQogICAgKw0KICAg
ICsgICAgS0NPTkZJR19TVFJJQ1QgaXMgYW4gb2xkZXIgYWxpYXMgZm9yIHRoaXMgZW52aXJvbm1l
bnQgdmFyaWFibGUsIHN1cHBvcnRlZA0KICAgICsgICAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmls
aXR5Lg0KICAgICsNCiAgICArICAtIEtDT05GSUdfV0FSTl9VTkRFRl9BU1NJR046IElmIHNldCB0
byAneScsIHdhcm5pbmdzIHdpbGwgYmUgZ2VuZXJhdGVkIGZvcg0KICAgICsgICAgYWxsIGFzc2ln
bm1lbnRzIHRvIHVuZGVmaW5lZCBzeW1ib2xzIHdpdGhpbiAuY29uZmlnIGZpbGVzLiBCeSBkZWZh
dWx0LCBubw0KICAgICsgICAgc3VjaCB3YXJuaW5ncyBhcmUgZ2VuZXJhdGVkLg0KICAgICsNCiAg
ICArICAgIFRoaXMgd2FybmluZyBjYW4gYWxzbyBiZSBlbmFibGVkL2Rpc2FibGVkIHZpYSB0aGUg
S2NvbmZpZy53YXJuX2Fzc2lnbl91bmRlZg0KICAgICsgICAgdmFyaWFibGUuDQogICAgKw0KICAg
ICsNCiAgICArUHJlcHJvY2Vzc29yIHVzZXIgZnVuY3Rpb25zIGRlZmluZWQgaW4gUHl0aG9uDQog
ICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICsN
CiAgICArUHJlcHJvY2Vzc29yIGZ1bmN0aW9ucyBjYW4gYmUgZGVmaW5lZCBpbiBQeXRob24sIHdo
aWNoIG1ha2VzIGl0IHNpbXBsZSB0bw0KICAgICtpbnRlZ3JhdGUgaW5mb3JtYXRpb24gZnJvbSBl
eGlzdGluZyBQeXRob24gdG9vbHMgaW50byBLY29uZmlnIChlLmcuIHRvIGhhdmUNCiAgICArS2Nv
bmZpZyBzeW1ib2xzIGRlcGVuZCBvbiBoYXJkd2FyZSBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gc29t
ZSBvdGhlciBmb3JtYXQpLg0KICAgICsNCiAgICArUHV0dGluZyBhIFB5dGhvbiBtb2R1bGUgbmFt
ZWQga2NvbmZpZ2Z1bmN0aW9ucygucHkpIGFueXdoZXJlIGluIHN5cy5wYXRoIHdpbGwNCiAgICAr
Y2F1c2UgaXQgdG8gYmUgaW1wb3J0ZWQgYnkgS2NvbmZpZ2xpYiAoaW4gS2NvbmZpZy5fX2luaXRf
XygpKS4gTm90ZSB0aGF0DQogICAgK3N5cy5wYXRoIGNhbiBiZSBjdXN0b21pemVkIHZpYSBQWVRI
T05QQVRILCBhbmQgaW5jbHVkZXMgdGhlIGRpcmVjdG9yeSBvZiB0aGUNCiAgICArbW9kdWxlIGJl
aW5nIHJ1biBieSBkZWZhdWx0LCBhcyB3ZWxsIGFzIGluc3RhbGxhdGlvbiBkaXJlY3Rvcmllcy4N
CiAgICArDQogICAgK0lmIHRoZSBLQ09ORklHX0ZVTkNUSU9OUyBlbnZpcm9ubWVudCB2YXJpYWJs
ZSBpcyBzZXQsIGl0IGdpdmVzIGEgZGlmZmVyZW50DQogICAgK21vZHVsZSBuYW1lIHRvIHVzZSBp
bnN0ZWFkIG9mICdrY29uZmlnZnVuY3Rpb25zJy4NCiAgICArDQogICAgK1RoZSBpbXBvcnRlZCBt
b2R1bGUgaXMgZXhwZWN0ZWQgdG8gZGVmaW5lIGEgZ2xvYmFsIGRpY3Rpb25hcnkgbmFtZWQgJ2Z1
bmN0aW9ucycNCiAgICArdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzIHRvIFB5dGhvbiBmdW5jdGlv
bnMsIGFzIGZvbGxvd3M6DQogICAgKw0KICAgICsgIGRlZiBteV9mbihrY29uZiwgbmFtZSwgYXJn
XzEsIGFyZ18yLCAuLi4pOg0KICAgICsgICAgICAjIGtjb25mOg0KICAgICsgICAgICAjICAgS2Nv
bmZpZyBpbnN0YW5jZQ0KICAgICsgICAgICAjDQogICAgKyAgICAgICMgbmFtZToNCiAgICArICAg
ICAgIyAgIE5hbWUgb2YgdGhlIHVzZXItZGVmaW5lZCBmdW5jdGlvbiAoIm15LWZuIikuIFRoaW5r
IGFyZ3ZbMF0uDQogICAgKyAgICAgICMNCiAgICArICAgICAgIyBhcmdfMSwgYXJnXzIsIC4uLjoN
CiAgICArICAgICAgIyAgIEFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGZyb20gS2Nv
bmZpZyAoc3RyaW5ncykNCiAgICArICAgICAgIw0KICAgICsgICAgICAjIFJldHVybnMgYSBzdHJp
bmcgdG8gYmUgc3Vic3RpdHV0ZWQgYXMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZQ0KICAgICsg
ICAgICAjIGZ1bmN0aW9uDQogICAgKyAgICAgIC4uLg0KICAgICsNCiAgICArICBkZWYgbXlfb3Ro
ZXJfZm4oa2NvbmYsIG5hbWUsIGFyZ18xLCBhcmdfMiwgLi4uKToNCiAgICArICAgICAgLi4uDQog
ICAgKw0KICAgICsgIGZ1bmN0aW9ucyA9IHsNCiAgICArICAgICAgIm15LWZuIjogICAgICAgKG15
X2ZuLCAgICAgICA8bWluLmFyZ3M+LCA8bWF4LmFyZ3M+L05vbmUpLA0KICAgICsgICAgICAibXkt
b3RoZXItZm4iOiAobXlfb3RoZXJfZm4sIDxtaW4uYXJncz4sIDxtYXguYXJncz4vTm9uZSksDQog
ICAgKyAgICAgIC4uLg0KICAgICsgIH0NCiAgICArDQogICAgKyAgLi4uDQogICAgKw0KICAgICs8
bWluLmFyZ3M+IGFuZCA8bWF4LmFyZ3M+IGFyZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBudW1i
ZXIgb2YgYXJndW1lbnRzDQogICAgK2V4cGVjdGVkIGJ5IHRoZSBmdW5jdGlvbiAoZXhjbHVkaW5n
IHRoZSBpbXBsaWNpdCAnbmFtZScgYXJndW1lbnQpLiBJZg0KICAgICs8bWF4LmFyZ3M+IGlzIE5v
bmUsIHRoZXJlIGlzIG5vIHVwcGVyIGxpbWl0IHRvIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzLiBQ
YXNzaW5nDQogICAgK2FuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyB3aWxsIGdlbmVyYXRl
IGEgS2NvbmZpZ0Vycm9yIGV4Y2VwdGlvbi4NCiAgICArDQogICAgK09uY2UgZGVmaW5lZCwgdXNl
ciBmdW5jdGlvbnMgY2FuIGJlIGNhbGxlZCBmcm9tIEtjb25maWcgaW4gdGhlIHNhbWUgd2F5IGFz
DQogICAgK290aGVyIHByZXByb2Nlc3NvciBmdW5jdGlvbnM6DQogICAgKw0KICAgICsgICAgY29u
ZmlnIEZPTw0KICAgICsgICAgICAgIC4uLg0KICAgICsgICAgICAgIGRlcGVuZHMgb24gJChteS1m
bixhcmcxLGFyZzIpDQogICAgKw0KICAgICtJZiBteV9mbigpIHJldHVybnMgIm4iLCB0aGlzIHdp
bGwgcmVzdWx0IGluDQogICAgKw0KICAgICsgICAgY29uZmlnIEZPTw0KICAgICsgICAgICAgIC4u
Lg0KICAgICsgICAgICAgIGRlcGVuZHMgb24gbg0KICAgICsNCiAgICArV2FybmluZw0KICAgICsq
KioqKioqDQogICAgKw0KICAgICtVc2VyLWRlZmluZWQgcHJlcHJvY2Vzc29yIGZ1bmN0aW9ucyBh
cmUgY2FsbGVkIGFzIHRoZXkncmUgZW5jb3VudGVyZWQgYXQgcGFyc2UNCiAgICArdGltZSwgYmVm
b3JlIGFsbCBLY29uZmlnIGZpbGVzIGhhdmUgYmVlbiBwcm9jZXNzZWQsIGFuZCBiZWZvcmUgdGhl
IG1lbnUgdHJlZQ0KICAgICtoYXMgYmVlbiBmaW5hbGl6ZWQuIFRoZXJlIGFyZSBubyBndWFyYW50
ZWVzIHRoYXQgYWNjZXNzaW5nIEtjb25maWcgc3ltYm9scyBvcg0KICAgICt0aGUgbWVudSB0cmVl
IHZpYSB0aGUgJ2tjb25mJyBwYXJhbWV0ZXIgd2lsbCB3b3JrLCBhbmQgaXQgY291bGQgcG90ZW50
aWFsbHkNCiAgICArbGVhZCB0byBhIGNyYXNoLiBUaGUgJ2tjb25mJyBwYXJhbWV0ZXIgaXMgcHJv
dmlkZWQgZm9yIGZ1dHVyZSBleHRlbnNpb24gKGFuZA0KICAgICtiZWNhdXNlIHRoZSBwcmVkZWZp
bmVkIGZ1bmN0aW9ucyB0YWtlIGl0IGFueXdheSkuDQogICAgKw0KICAgICtQcmVmZXJhYmx5LCB1
c2VyLWRlZmluZWQgZnVuY3Rpb25zIHNob3VsZCBiZSBzdGF0ZWxlc3MuDQogICAgKw0KICAgICsN
CiAgICArRmVlZGJhY2sNCiAgICArPT09PT09PT0NCiAgICArDQogICAgK1NlbmQgYnVnIHJlcG9y
dHMsIHN1Z2dlc3Rpb25zLCBhbmQgcXVlc3Rpb25zIHRvIHVsZmFsaXplciBhLnQgR29vZ2xlJ3Mg
ZW1haWwNCiAgICArc2VydmljZSwgb3Igb3BlbiBhIHRpY2tldCBvbiB0aGUgR2l0SHViIHBhZ2Uu
DQogICAgKyIiIg0KICAgICtpbXBvcnQgZXJybm8NCiAgICAraW1wb3J0IGltcG9ydGxpYg0KICAg
ICtpbXBvcnQgb3MNCiAgICAraW1wb3J0IHJlDQogICAgK2ltcG9ydCBzeXMNCiAgICArDQogICAg
KyMgR2V0IHJpZCBvZiBzb21lIGF0dHJpYnV0ZSBsb29rdXBzLiBUaGVzZSBhcmUgb2J2aW91cyBp
biBjb250ZXh0Lg0KICAgICtmcm9tIGdsb2IgaW1wb3J0IGlnbG9iDQogICAgK2Zyb20gb3MucGF0
aCBpbXBvcnQgZGlybmFtZSwgZXhpc3RzLCBleHBhbmR2YXJzLCBpc2xpbmssIGpvaW4sIHJlYWxw
YXRoDQogICAgKw0KICAgICsNCiAgICArVkVSU0lPTiA9ICgxMiwgMTMsIDApDQogICAgKw0KICAg
ICsNCiAgICArIyBGaWxlIGxheW91dDoNCiAgICArIw0KICAgICsjIFB1YmxpYyBjbGFzc2VzDQog
ICAgKyMgUHVibGljIGZ1bmN0aW9ucw0KICAgICsjIEludGVybmFsIGZ1bmN0aW9ucw0KICAgICsj
IEdsb2JhbCBjb25zdGFudHMNCiAgICArDQogICAgKyMgTGluZSBsZW5ndGg6IDc5IGNvbHVtbnMN
CiAgICArDQogICAgKw0KICAgICsjDQogICAgKyMgUHVibGljIGNsYXNzZXMNCiAgICArIw0KICAg
ICsNCiAgICArDQogICAgK2NsYXNzIEtjb25maWcob2JqZWN0KToNCiAgICArICAgICIiIg0KICAg
ICsgICAgUmVwcmVzZW50cyBhIEtjb25maWcgY29uZmlndXJhdGlvbiwgZS5nLiBmb3IgeDg2IG9y
IEFSTS4gVGhpcyBpcyB0aGUgc2V0IG9mDQogICAgKyAgICBzeW1ib2xzLCBjaG9pY2VzLCBhbmQg
bWVudSBub2RlcyBhcHBlYXJpbmcgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIENyZWF0aW5nDQogICAg
KyAgICBhbnkgbnVtYmVyIG9mIEtjb25maWcgb2JqZWN0cyAoaW5jbHVkaW5nIGZvciBkaWZmZXJl
bnQgYXJjaGl0ZWN0dXJlcykgaXMNCiAgICArICAgIHNhZmUuIEtjb25maWdsaWIgZG9lc24ndCBr
ZWVwIGFueSBnbG9iYWwgc3RhdGUuDQogICAgKw0KICAgICsgICAgVGhlIGZvbGxvd2luZyBhdHRy
aWJ1dGVzIGFyZSBhdmFpbGFibGUuIFRoZXkgc2hvdWxkIGJlIHRyZWF0ZWQgYXMNCiAgICArICAg
IHJlYWQtb25seSwgYW5kIHNvbWUgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggQHByb3BlcnR5IG1h
Z2ljLg0KICAgICsNCiAgICArICAgIHN5bXM6DQogICAgKyAgICAgIEEgZGljdGlvbmFyeSB3aXRo
IGFsbCBzeW1ib2xzIGluIHRoZSBjb25maWd1cmF0aW9uLCBpbmRleGVkIGJ5IG5hbWUuIEFsc28N
CiAgICArICAgICAgaW5jbHVkZXMgYWxsIHN5bWJvbHMgdGhhdCBhcmUgcmVmZXJlbmNlZCBpbiBl
eHByZXNzaW9ucyBidXQgbmV2ZXINCiAgICArICAgICAgZGVmaW5lZCwgZXhjZXB0IGZvciBjb25z
dGFudCAocXVvdGVkKSBzeW1ib2xzLg0KICAgICsNCiAgICArICAgICAgVW5kZWZpbmVkIHN5bWJv
bHMgY2FuIGJlIHJlY29nbml6ZWQgYnkgU3ltYm9sLm5vZGVzIGJlaW5nIGVtcHR5IC0tIHNlZQ0K
ICAgICsgICAgICB0aGUgJ0ludHJvIHRvIHRoZSBtZW51IHRyZWUnIHNlY3Rpb24gaW4gdGhlIG1v
ZHVsZSBkb2NzdHJpbmcuDQogICAgKw0KICAgICsgICAgY29uc3Rfc3ltczoNCiAgICArICAgICAg
QSBkaWN0aW9uYXJ5IGxpa2UgJ3N5bXMnIGZvciBjb25zdGFudCAocXVvdGVkKSBzeW1ib2xzDQog
ICAgKw0KICAgICsgICAgbmFtZWRfY2hvaWNlczoNCiAgICArICAgICAgQSBkaWN0aW9uYXJ5IGxp
a2UgJ3N5bXMnIGZvciBuYW1lZCBjaG9pY2VzIChjaG9pY2UgRk9PKQ0KICAgICsNCiAgICArICAg
IGRlZmluZWRfc3ltczoNCiAgICArICAgICAgQSBsaXN0IHdpdGggYWxsIGRlZmluZWQgc3ltYm9s
cywgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcHBlYXIgaW4gdGhlDQogICAgKyAgICAgIEtj
b25maWcgZmlsZXMuIFN5bWJvbHMgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgYXBwZWFy
IG11bHRpcGxlDQogICAgKyAgICAgIHRpbWVzLg0KICAgICsNCiAgICArICAgICAgTm90ZTogWW91
IHByb2JhYmx5IHdhbnQgdG8gdXNlICd1bmlxdWVfZGVmaW5lZF9zeW1zJyBpbnN0ZWFkLiBUaGlz
DQogICAgKyAgICAgIGF0dHJpYnV0ZSBpcyBtb3N0bHkgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRz
IGNvbXBhdGliaWxpdHkuDQogICAgKw0KICAgICsgICAgdW5pcXVlX2RlZmluZWRfc3ltczoNCiAg
ICArICAgICAgQSBsaXN0IGxpa2UgJ2RlZmluZWRfc3ltcycsIGJ1dCB3aXRoIGR1cGxpY2F0ZXMg
cmVtb3ZlZC4gSnVzdCB0aGUgZmlyc3QNCiAgICArICAgICAgaW5zdGFuY2UgaXMga2VwdCBmb3Ig
c3ltYm9scyBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucy4gS2NvbmZpZyBvcmRlcg0KICAg
ICsgICAgICBpcyBwcmVzZXJ2ZWQgb3RoZXJ3aXNlLg0KICAgICsNCiAgICArICAgICAgVXNpbmcg
dGhpcyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAnZGVmaW5lZF9zeW1zJyBjYW4gc2F2ZSB3b3JrLCBh
bmQNCiAgICArICAgICAgYXV0b21hdGljYWxseSBnaXZlcyByZWFzb25hYmxlIGJlaGF2aW9yIHdo
ZW4gd3JpdGluZyBjb25maWd1cmF0aW9uIG91dHB1dA0KICAgICsgICAgICAoc3ltYm9scyBkZWZp
bmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucyBvbmx5IGdlbmVyYXRlIG91dHB1dCBvbmNlLCB3aGls
ZQ0KICAgICsgICAgICBzdGlsbCBwcmVzZXJ2aW5nIEtjb25maWcgb3JkZXIgZm9yIHJlYWRhYmls
aXR5KS4NCiAgICArDQogICAgKyAgICBjaG9pY2VzOg0KICAgICsgICAgICBBIGxpc3Qgd2l0aCBh
bGwgY2hvaWNlcywgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcHBlYXIgaW4gdGhlIEtjb25m
aWcNCiAgICArICAgICAgZmlsZXMuDQogICAgKw0KICAgICsgICAgICBOb3RlOiBZb3UgcHJvYmFi
bHkgd2FudCB0byB1c2UgJ3VuaXF1ZV9jaG9pY2VzJyBpbnN0ZWFkLiBUaGlzIGF0dHJpYnV0ZQ0K
ICAgICsgICAgICBpcyBtb3N0bHkgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxp
dHkuDQogICAgKw0KICAgICsgICAgdW5pcXVlX2Nob2ljZXM6DQogICAgKyAgICAgIEFuYWxvZ291
cyB0byAndW5pcXVlX2RlZmluZWRfc3ltcycsIGZvciBjaG9pY2VzLiBOYW1lZCBjaG9pY2VzIGNh
biBoYXZlDQogICAgKyAgICAgIG11bHRpcGxlIGRlZmluaXRpb24gbG9jYXRpb25zLg0KICAgICsN
CiAgICArICAgIG1lbnVzOg0KICAgICsgICAgICBBIGxpc3Qgd2l0aCBhbGwgbWVudXMsIGluIHRo
ZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBLY29uZmlnDQogICAgKyAgICAgIGZp
bGVzDQogICAgKw0KICAgICsgICAgY29tbWVudHM6DQogICAgKyAgICAgIEEgbGlzdCB3aXRoIGFs
bCBjb21tZW50cywgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhleSBhcHBlYXIgaW4gdGhlIEtjb25m
aWcNCiAgICArICAgICAgZmlsZXMNCiAgICArDQogICAgKyAgICBrY29uZmlnX2ZpbGVuYW1lczoN
CiAgICArICAgICAgQSBsaXN0IHdpdGggdGhlIGZpbGVuYW1lcyBvZiBhbGwgS2NvbmZpZyBmaWxl
cyBpbmNsdWRlZCBpbiB0aGUNCiAgICArICAgICAgY29uZmlndXJhdGlvbiwgcmVsYXRpdmUgdG8g
JHNyY3RyZWUgKG9yIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeQ0KICAgICsgICAg
ICBpZiAkc3JjdHJlZSBpc24ndCBzZXQpLCBleGNlcHQgYWJzb2x1dGUgcGF0aHMgKGUuZy4NCiAg
ICArICAgICAgJ3NvdXJjZSAiL2Zvby9LY29uZmlnIicpIGFyZSBrZXB0IGFzLWlzLg0KICAgICsN
CiAgICArICAgICAgVGhlIGZpbGVzIGFyZSBsaXN0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIHNv
dXJjZSdkLCBzdGFydGluZyB3aXRoIHRoZQ0KICAgICsgICAgICB0b3AtbGV2ZWwgS2NvbmZpZyBm
aWxlLiBJZiBhIGZpbGUgaXMgc291cmNlJ2QgbXVsdGlwbGUgdGltZXMsIGl0IHdpbGwNCiAgICAr
ICAgICAgYXBwZWFyIG11bHRpcGxlIHRpbWVzLiBVc2Ugc2V0KCkgdG8gZ2V0IHVuaXF1ZSBmaWxl
bmFtZXMuDQogICAgKw0KICAgICsgICAgICBOb3RlIHRoYXQgS2NvbmZpZy5zeW5jX2RlcHMoKSBh
bHJlYWR5IGluZGlyZWN0bHkgY2F0Y2hlcyBhbnkgZmlsZQ0KICAgICsgICAgICBtb2RpZmljYXRp
b25zIHRoYXQgY2hhbmdlIGNvbmZpZ3VyYXRpb24gb3V0cHV0Lg0KICAgICsNCiAgICArICAgIGVu
dl92YXJzOg0KICAgICsgICAgICBBIHNldCgpIHdpdGggdGhlIG5hbWVzIG9mIGFsbCBlbnZpcm9u
bWVudCB2YXJpYWJsZXMgcmVmZXJlbmNlZCBpbiB0aGUNCiAgICArICAgICAgS2NvbmZpZyBmaWxl
cy4NCiAgICArDQogICAgKyAgICAgIE9ubHkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHJlZmVyZW5j
ZWQgd2l0aCB0aGUgcHJlcHJvY2Vzc29yICQoRk9PKSBzeW50YXgNCiAgICArICAgICAgd2lsbCBi
ZSByZWdpc3RlcmVkLiBUaGUgb2xkZXIgJEZPTyBzeW50YXggaXMgb25seSBzdXBwb3J0ZWQgZm9y
IGJhY2t3YXJkcw0KICAgICsgICAgICBjb21wYXRpYmlsaXR5Lg0KICAgICsNCiAgICArICAgICAg
QWxzbyBub3RlIHRoYXQgJChGT08pIHdvbid0IGJlIHJlZ2lzdGVyZWQgdW5sZXNzIHRoZSBlbnZp
cm9ubWVudCB2YXJpYWJsZQ0KICAgICsgICAgICAkRk9PIGlzIGFjdHVhbGx5IHNldC4gSWYgaXQg
aXNuJ3QsICQoRk9PKSBpcyBhbiBleHBhbnNpb24gb2YgYW4gdW5zZXQNCiAgICArICAgICAgcHJl
cHJvY2Vzc29yIHZhcmlhYmxlICh3aGljaCBnaXZlcyB0aGUgZW1wdHkgc3RyaW5nKS4NCiAgICAr
DQogICAgKyAgICAgIEFub3RoZXIgZ290Y2hhIGlzIHRoYXQgZW52aXJvbm1lbnQgdmFyaWFibGVz
IHJlZmVyZW5jZWQgaW4gdGhlIHZhbHVlcyBvZg0KICAgICsgICAgICByZWN1cnNpdmVseSBleHBh
bmRlZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzICh0aG9zZSBkZWZpbmVkIHdpdGggPSkgd2lsbA0K
ICAgICsgICAgICBvbmx5IGJlIHJlZ2lzdGVyZWQgaWYgdGhlIHZhcmlhYmxlIGlzIGFjdHVhbGx5
IHVzZWQgKGV4cGFuZGVkKSBzb21ld2hlcmUuDQogICAgKw0KICAgICsgICAgICBUaGUgbm90ZSBm
cm9tIHRoZSAna2NvbmZpZ19maWxlbmFtZXMnIGRvY3VtZW50YXRpb24gYXBwbGllcyBoZXJlIHRv
by4NCiAgICArDQogICAgKyAgICBuL20veToNCiAgICArICAgICAgVGhlIHByZWRlZmluZWQgY29u
c3RhbnQgc3ltYm9scyBuL20veS4gQWxzbyBhdmFpbGFibGUgaW4gY29uc3Rfc3ltcy4NCiAgICAr
DQogICAgKyAgICBtb2R1bGVzOg0KICAgICsgICAgICBUaGUgU3ltYm9sIGluc3RhbmNlIGZvciB0
aGUgbW9kdWxlcyBzeW1ib2wuIEN1cnJlbnRseSBoYXJkY29kZWQgdG8NCiAgICArICAgICAgTU9E
VUxFUywgd2hpY2ggaXMgYmFja3dhcmRzIGNvbXBhdGlibGUuIEtjb25maWdsaWIgd2lsbCB3YXJu
IGlmDQogICAgKyAgICAgICdvcHRpb24gbW9kdWxlcycgaXMgc2V0IG9uIHNvbWUgb3RoZXIgc3lt
Ym9sLiBUZWxsIG1lIGlmIHlvdSBuZWVkIHByb3Blcg0KICAgICsgICAgICAnb3B0aW9uIG1vZHVs
ZXMnIHN1cHBvcnQuDQogICAgKw0KICAgICsgICAgICAnbW9kdWxlcycgaXMgbmV2ZXIgTm9uZS4g
SWYgdGhlIE1PRFVMRVMgc3ltYm9sIGlzIG5vdCBleHBsaWNpdGx5IGRlZmluZWQsDQogICAgKyAg
ICAgIGl0cyB0cmlfdmFsdWUgd2lsbCBiZSAwIChuKSwgYXMgZXhwZWN0ZWQuDQogICAgKw0KICAg
ICsgICAgICBBIHNpbXBsZSB3YXkgdG8gZW5hYmxlIG1vZHVsZXMgaXMgdG8gZG8gJ2tjb25mLm1v
ZHVsZXMuc2V0X3ZhbHVlKDIpJw0KICAgICsgICAgICAocHJvdmlkZWQgdGhlIE1PRFVMRVMgc3lt
Ym9sIGlzIGRlZmluZWQgYW5kIHZpc2libGUpLiBNb2R1bGVzIGFyZQ0KICAgICsgICAgICBkaXNh
YmxlZCBieSBkZWZhdWx0IGluIHRoZSBrZXJuZWwgS2NvbmZpZyBmaWxlcyBhcyBvZiB3cml0aW5n
LCB0aG91Z2gNCiAgICArICAgICAgbmVhcmx5IGFsbCBkZWZjb25maWcgZmlsZXMgZW5hYmxlIHRo
ZW0gKHdpdGggJ0NPTkZJR19NT0RVTEVTPXknKS4NCiAgICArDQogICAgKyAgICBkZWZjb25maWdf
bGlzdDoNCiAgICArICAgICAgVGhlIFN5bWJvbCBpbnN0YW5jZSBmb3IgdGhlICdvcHRpb24gZGVm
Y29uZmlnX2xpc3QnIHN5bWJvbCwgb3IgTm9uZSBpZiBubw0KICAgICsgICAgICBkZWZjb25maWdf
bGlzdCBzeW1ib2wgZXhpc3RzLiBUaGUgZGVmY29uZmlnIGZpbGVuYW1lIGRlcml2ZWQgZnJvbSB0
aGlzDQogICAgKyAgICAgIHN5bWJvbCBjYW4gYmUgZm91bmQgaW4gS2NvbmZpZy5kZWZjb25maWdf
ZmlsZW5hbWUuDQogICAgKw0KICAgICsgICAgZGVmY29uZmlnX2ZpbGVuYW1lOg0KICAgICsgICAg
ICBUaGUgZmlsZW5hbWUgZ2l2ZW4gYnkgdGhlIGRlZmNvbmZpZ19saXN0IHN5bWJvbC4gVGhpcyBp
cyB0YWtlbiBmcm9tIHRoZQ0KICAgICsgICAgICBmaXJzdCAnZGVmYXVsdCcgd2l0aCBhIHNhdGlz
ZmllZCBjb25kaXRpb24gd2hlcmUgdGhlIHNwZWNpZmllZCBmaWxlDQogICAgKyAgICAgIGV4aXN0
cyAoY2FuIGJlIG9wZW5lZCBmb3IgcmVhZGluZykuIElmIGEgZGVmY29uZmlnIGZpbGUgZm9vL2Rl
ZmNvbmZpZyBpcw0KICAgICsgICAgICBub3QgZm91bmQgYW5kICRzcmN0cmVlIHdhcyBzZXQgd2hl
biB0aGUgS2NvbmZpZyB3YXMgY3JlYXRlZCwNCiAgICArICAgICAgJHNyY3RyZWUvZm9vL2RlZmNv
bmZpZyBpcyBsb29rZWQgdXAgYXMgd2VsbC4NCiAgICArDQogICAgKyAgICAgICdkZWZjb25maWdf
ZmlsZW5hbWUnIGlzIE5vbmUgaWYgZWl0aGVyIG5vIGRlZmNvbmZpZ19saXN0IHN5bWJvbCBleGlz
dHMsDQogICAgKyAgICAgIG9yIGlmIHRoZSBkZWZjb25maWdfbGlzdCBzeW1ib2wgaGFzIG5vICdk
ZWZhdWx0JyB3aXRoIGEgc2F0aXNmaWVkDQogICAgKyAgICAgIGNvbmRpdGlvbiB0aGF0IHNwZWNp
ZmllcyBhIGZpbGUgdGhhdCBleGlzdHMuDQogICAgKw0KICAgICsgICAgICBHb3RjaGE6IHNjcmlw
dHMva2NvbmZpZy9NYWtlZmlsZSBtaWdodCBwYXNzIC0tZGVmY29uZmlnPTxkZWZjb25maWc+IHRv
DQogICAgKyAgICAgIHNjcmlwdHMva2NvbmZpZy9jb25mIHdoZW4gcnVubmluZyBlLmcuICdtYWtl
IGRlZmNvbmZpZycuIFRoaXMgb3B0aW9uDQogICAgKyAgICAgIG92ZXJyaWRlcyB0aGUgZGVmY29u
ZmlnX2xpc3Qgc3ltYm9sLCBtZWFuaW5nIGRlZmNvbmZpZ19maWxlbmFtZSBtaWdodCBub3QNCiAg
ICArICAgICAgYWx3YXlzIG1hdGNoIHdoYXQgJ21ha2UgZGVmY29uZmlnJyB3b3VsZCB1c2UuDQog
ICAgKw0KICAgICsgICAgdG9wX25vZGU6DQogICAgKyAgICAgIFRoZSBtZW51IG5vZGUgKHNlZSB0
aGUgTWVudU5vZGUgY2xhc3MpIG9mIHRoZSBpbXBsaWNpdCB0b3AtbGV2ZWwgbWVudS4NCiAgICAr
ICAgICAgQWN0cyBhcyB0aGUgcm9vdCBvZiB0aGUgbWVudSB0cmVlLg0KICAgICsNCiAgICArICAg
IG1haW5tZW51X3RleHQ6DQogICAgKyAgICAgIFRoZSBwcm9tcHQgKHRpdGxlKSBvZiB0aGUgdG9w
IG1lbnUgKHRvcF9ub2RlKS4gRGVmYXVsdHMgdG8gIk1haW4gbWVudSIuDQogICAgKyAgICAgIENh
biBiZSBjaGFuZ2VkIHdpdGggdGhlICdtYWlubWVudScgc3RhdGVtZW50IChzZWUga2NvbmZpZy1s
YW5ndWFnZS50eHQpLg0KICAgICsNCiAgICArICAgIHZhcmlhYmxlczoNCiAgICArICAgICAgQSBk
aWN0aW9uYXJ5IHdpdGggYWxsIHByZXByb2Nlc3NvciB2YXJpYWJsZXMsIGluZGV4ZWQgYnkgbmFt
ZS4gU2VlIHRoZQ0KICAgICsgICAgICBWYXJpYWJsZSBjbGFzcy4NCiAgICArDQogICAgKyAgICB3
YXJuOg0KICAgICsgICAgICBTZXQgdGhpcyB2YXJpYWJsZSB0byBUcnVlL0ZhbHNlIHRvIGVuYWJs
ZS9kaXNhYmxlIHdhcm5pbmdzLiBTZWUNCiAgICArICAgICAgS2NvbmZpZy5fX2luaXRfXygpLg0K
ICAgICsNCiAgICArICAgICAgV2hlbiAnd2FybicgaXMgRmFsc2UsIHRoZSB2YWx1ZXMgb2YgdGhl
IG90aGVyIHdhcm5pbmctcmVsYXRlZCB2YXJpYWJsZXMNCiAgICArICAgICAgYXJlIGlnbm9yZWQu
DQogICAgKw0KICAgICsgICAgICBUaGlzIHZhcmlhYmxlIGFzIHdlbGwgYXMgdGhlIG90aGVyIHdh
cm4qIHZhcmlhYmxlcyBjYW4gYmUgcmVhZCB0byBjaGVjaw0KICAgICsgICAgICB0aGUgY3VycmVu
dCB3YXJuaW5nIHNldHRpbmdzLg0KICAgICsNCiAgICArICAgIHdhcm5fdG9fc3RkZXJyOg0KICAg
ICsgICAgICBTZXQgdGhpcyB2YXJpYWJsZSB0byBUcnVlL0ZhbHNlIHRvIGVuYWJsZS9kaXNhYmxl
IHdhcm5pbmdzIG9uIHN0ZGVyci4gU2VlDQogICAgKyAgICAgIEtjb25maWcuX19pbml0X18oKS4N
CiAgICArDQogICAgKyAgICB3YXJuX2Fzc2lnbl91bmRlZjoNCiAgICArICAgICAgU2V0IHRoaXMg
dmFyaWFibGUgdG8gVHJ1ZSB0byBnZW5lcmF0ZSB3YXJuaW5ncyBmb3IgYXNzaWdubWVudHMgdG8N
CiAgICArICAgICAgdW5kZWZpbmVkIHN5bWJvbHMgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4NCiAg
ICArDQogICAgKyAgICAgIFRoaXMgdmFyaWFibGUgaXMgRmFsc2UgYnkgZGVmYXVsdCB1bmxlc3Mg
dGhlIEtDT05GSUdfV0FSTl9VTkRFRl9BU1NJR04NCiAgICArICAgICAgZW52aXJvbm1lbnQgdmFy
aWFibGUgd2FzIHNldCB0byAneScgd2hlbiB0aGUgS2NvbmZpZyBpbnN0YW5jZSB3YXMNCiAgICAr
ICAgICAgY3JlYXRlZC4NCiAgICArDQogICAgKyAgICB3YXJuX2Fzc2lnbl9vdmVycmlkZToNCiAg
ICArICAgICAgU2V0IHRoaXMgdmFyaWFibGUgdG8gVHJ1ZSB0byBnZW5lcmF0ZSB3YXJuaW5ncyBm
b3IgbXVsdGlwbGUgYXNzaWdubWVudHMNCiAgICArICAgICAgdG8gdGhlIHNhbWUgc3ltYm9sIGlu
IGNvbmZpZ3VyYXRpb24gZmlsZXMsIHdoZXJlIHRoZSBhc3NpZ25tZW50cyBzZXQNCiAgICArICAg
ICAgZGlmZmVyZW50IHZhbHVlcyAoZS5nLiBDT05GSUdfRk9PPW0gZm9sbG93ZWQgYnkgQ09ORklH
X0ZPTz15LCB3aGVyZSB0aGUNCiAgICArICAgICAgbGFzdCB2YWx1ZSB3b3VsZCBnZXQgdXNlZCku
DQogICAgKw0KICAgICsgICAgICBUaGlzIHZhcmlhYmxlIGlzIFRydWUgYnkgZGVmYXVsdC4gRGlz
YWJsaW5nIGl0IG1pZ2h0IGJlIHVzZWZ1bCB3aGVuDQogICAgKyAgICAgIG1lcmdpbmcgY29uZmln
dXJhdGlvbnMuDQogICAgKw0KICAgICsgICAgd2Fybl9hc3NpZ25fcmVkdW46DQogICAgKyAgICAg
IExpa2Ugd2Fybl9hc3NpZ25fb3ZlcnJpZGUsIGJ1dCBmb3IgbXVsdGlwbGUgYXNzaWdubWVudHMg
c2V0dGluZyBhIHN5bWJvbA0KICAgICsgICAgICB0byB0aGUgc2FtZSB2YWx1ZS4NCiAgICArDQog
ICAgKyAgICAgIFRoaXMgdmFyaWFibGUgaXMgVHJ1ZSBieSBkZWZhdWx0LiBEaXNhYmxpbmcgaXQg
bWlnaHQgYmUgdXNlZnVsIHdoZW4NCiAgICArICAgICAgbWVyZ2luZyBjb25maWd1cmF0aW9ucy4N
CiAgICArDQogICAgKyAgICB3YXJuaW5nczoNCiAgICArICAgICAgQSBsaXN0IG9mIHN0cmluZ3Mg
Y29udGFpbmluZyBhbGwgd2FybmluZ3MgdGhhdCBoYXZlIGJlZW4gZ2VuZXJhdGVkLCBmb3INCiAg
ICArICAgICAgY2FzZXMgd2hlcmUgbW9yZSBmbGV4aWJpbGl0eSBpcyBuZWVkZWQuDQogICAgKw0K
ICAgICsgICAgICBTZWUgdGhlICd3YXJuX3RvX3N0ZGVycicgcGFyYW1ldGVyIHRvIEtjb25maWcu
X19pbml0X18oKSBhbmQgdGhlDQogICAgKyAgICAgIEtjb25maWcud2Fybl90b19zdGRlcnIgdmFy
aWFibGUgYXMgd2VsbC4gTm90ZSB0aGF0IHdhcm5pbmdzIHN0aWxsIGdldA0KICAgICsgICAgICBh
ZGRlZCB0byBLY29uZmlnLndhcm5pbmdzIHdoZW4gJ3dhcm5fdG9fc3RkZXJyJyBpcyBUcnVlLg0K
ICAgICsNCiAgICArICAgICAgSnVzdCBhcyBmb3Igd2FybmluZ3MgcHJpbnRlZCB0byBzdGRlcnIs
IG9ubHkgd2FybmluZ3MgdGhhdCBhcmUgZW5hYmxlZA0KICAgICsgICAgICB3aWxsIGdldCBhZGRl
ZCB0byBLY29uZmlnLndhcm5pbmdzLiBTZWUgdGhlIHZhcmlvdXMgS2NvbmZpZy53YXJuKg0KICAg
ICsgICAgICB2YXJpYWJsZXMuDQogICAgKw0KICAgICsgICAgbWlzc2luZ19zeW1zOg0KICAgICsg
ICAgICBBIGxpc3Qgd2l0aCAobmFtZSwgdmFsdWUpIHR1cGxlcyBmb3IgYWxsIGFzc2lnbm1lbnRz
IHRvIHVuZGVmaW5lZCBzeW1ib2xzDQogICAgKyAgICAgIHdpdGhpbiB0aGUgbW9zdCByZWNlbnRs
eSBsb2FkZWQgLmNvbmZpZyBmaWxlKHMpLiAnbmFtZScgaXMgdGhlIHN5bWJvbA0KICAgICsgICAg
ICBuYW1lIHdpdGhvdXQgdGhlICdDT05GSUdfJyBwcmVmaXguICd2YWx1ZScgaXMgYSBzdHJpbmcg
dGhhdCBnaXZlcyB0aGUNCiAgICArICAgICAgcmlnaHQtaGFuZCBzaWRlIG9mIHRoZSBhc3NpZ25t
ZW50IHZlcmJhdGltLg0KICAgICsNCiAgICArICAgICAgU2VlIEtjb25maWcubG9hZF9jb25maWco
KSBhcyB3ZWxsLg0KICAgICsNCiAgICArICAgIHNyY3RyZWU6DQogICAgKyAgICAgIFRoZSB2YWx1
ZSBvZiB0aGUgJHNyY3RyZWUgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiB0aGUgY29uZmlndXJh
dGlvbiB3YXMNCiAgICArICAgICAgbG9hZGVkLCBvciB0aGUgZW1wdHkgc3RyaW5nIGlmICRzcmN0
cmVlIHdhc24ndCBzZXQuIFRoaXMgZ2l2ZXMgbmljZQ0KICAgICsgICAgICBiZWhhdmlvciB3aXRo
IG9zLnBhdGguam9pbigpLCB3aGljaCB0cmVhdHMgIiIgYXMgdGhlIGN1cnJlbnQgZGlyZWN0b3J5
LA0KICAgICsgICAgICB3aXRob3V0IGFkZGluZyAiLi8iLg0KICAgICsNCiAgICArICAgICAgS2Nv
bmZpZyBmaWxlcyBhcmUgbG9va2VkIHVwIHJlbGF0aXZlIHRvICRzcmN0cmVlICh1bmxlc3MgYWJz
b2x1dGUgcGF0aHMNCiAgICArICAgICAgYXJlIHVzZWQpLCBhbmQgLmNvbmZpZyBmaWxlcyBhcmUg
bG9va2VkIHVwIHJlbGF0aXZlIHRvICRzcmN0cmVlIGlmIHRoZXkNCiAgICArICAgICAgYXJlIG5v
dCBmb3VuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0
DQogICAgKyAgICAgIG91dC1vZi10cmVlIGJ1aWxkcy4gVGhlIEMgdG9vbHMgdXNlIHRoaXMgZW52
aXJvbm1lbnQgdmFyaWFibGUgaW4gdGhlIHNhbWUNCiAgICArICAgICAgd2F5Lg0KICAgICsNCiAg
ICArICAgICAgQ2hhbmdpbmcgJHNyY3RyZWUgYWZ0ZXIgY3JlYXRpbmcgdGhlIEtjb25maWcgaW5z
dGFuY2UgaGFzIG5vIGVmZmVjdC4gT25seQ0KICAgICsgICAgICB0aGUgdmFsdWUgd2hlbiB0aGUg
Y29uZmlndXJhdGlvbiBpcyBsb2FkZWQgbWF0dGVycy4gVGhpcyBhdm9pZHMgc3VycHJpc2VzDQog
ICAgKyAgICAgIGlmIG11bHRpcGxlIGNvbmZpZ3VyYXRpb25zIGFyZSBsb2FkZWQgd2l0aCBkaWZm
ZXJlbnQgdmFsdWVzIGZvciAkc3JjdHJlZS4NCiAgICArDQogICAgKyAgICBjb25maWdfcHJlZml4
Og0KICAgICsgICAgICBUaGUgdmFsdWUgb2YgdGhlICRDT05GSUdfIGVudmlyb25tZW50IHZhcmlh
YmxlIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gd2FzDQogICAgKyAgICAgIGxvYWRlZC4gVGhpcyBp
cyB0aGUgcHJlZml4IHVzZWQgKGFuZCBleHBlY3RlZCkgb24gc3ltYm9sIG5hbWVzIGluIC5jb25m
aWcNCiAgICArICAgICAgZmlsZXMgYW5kIEMgaGVhZGVycy4gRGVmYXVsdHMgdG8gIkNPTkZJR18i
LiBVc2VkIGluIHRoZSBzYW1lIHdheSBpbiB0aGUgQw0KICAgICsgICAgICB0b29scy4NCiAgICAr
DQogICAgKyAgICAgIExpa2UgZm9yIHNyY3RyZWUsIG9ubHkgdGhlIHZhbHVlIG9mICRDT05GSUdf
IHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMNCiAgICArICAgICAgbG9hZGVkIG1hdHRlcnMuDQog
ICAgKyAgICAiIiINCiAgICArICAgIF9fc2xvdHNfXyA9ICgNCiAgICArICAgICAgICAiX2VuY29k
aW5nIiwNCiAgICArICAgICAgICAiX2Z1bmN0aW9ucyIsDQogICAgKyAgICAgICAgIl9zZXRfbWF0
Y2giLA0KICAgICsgICAgICAgICJfc3JjdHJlZV9wcmVmaXgiLA0KICAgICsgICAgICAgICJfdW5z
ZXRfbWF0Y2giLA0KICAgICsgICAgICAgICJfd2Fybl9hc3NpZ25fbm9fcHJvbXB0IiwNCiAgICAr
ICAgICAgICAiY2hvaWNlcyIsDQogICAgKyAgICAgICAgImNvbW1lbnRzIiwNCiAgICArICAgICAg
ICAiY29uZmlnX3ByZWZpeCIsDQogICAgKyAgICAgICAgImNvbnN0X3N5bXMiLA0KICAgICsgICAg
ICAgICJkZWZjb25maWdfbGlzdCIsDQogICAgKyAgICAgICAgImRlZmluZWRfc3ltcyIsDQogICAg
KyAgICAgICAgImVudl92YXJzIiwNCiAgICArICAgICAgICAia2NvbmZpZ19maWxlbmFtZXMiLA0K
ICAgICsgICAgICAgICJtIiwNCiAgICArICAgICAgICAibWVudXMiLA0KICAgICsgICAgICAgICJt
aXNzaW5nX3N5bXMiLA0KICAgICsgICAgICAgICJtb2R1bGVzIiwNCiAgICArICAgICAgICAibiIs
DQogICAgKyAgICAgICAgIm5hbWVkX2Nob2ljZXMiLA0KICAgICsgICAgICAgICJzcmN0cmVlIiwN
CiAgICArICAgICAgICAic3ltcyIsDQogICAgKyAgICAgICAgInRvcF9ub2RlIiwNCiAgICArICAg
ICAgICAidW5pcXVlX2Nob2ljZXMiLA0KICAgICsgICAgICAgICJ1bmlxdWVfZGVmaW5lZF9zeW1z
IiwNCiAgICArICAgICAgICAidmFyaWFibGVzIiwNCiAgICArICAgICAgICAid2FybiIsDQogICAg
KyAgICAgICAgIndhcm5fYXNzaWduX292ZXJyaWRlIiwNCiAgICArICAgICAgICAid2Fybl9hc3Np
Z25fcmVkdW4iLA0KICAgICsgICAgICAgICJ3YXJuX2Fzc2lnbl91bmRlZiIsDQogICAgKyAgICAg
ICAgIndhcm5fdG9fc3RkZXJyIiwNCiAgICArICAgICAgICAid2FybmluZ3MiLA0KICAgICsgICAg
ICAgICJ5IiwNCiAgICArDQogICAgKyAgICAgICAgIyBQYXJzaW5nLXJlbGF0ZWQNCiAgICArICAg
ICAgICAiX3BhcnNpbmdfa2NvbmZpZ3MiLA0KICAgICsgICAgICAgICJfcmVhZGxpbmUiLA0KICAg
ICsgICAgICAgICJfZmlsZW5hbWUiLA0KICAgICsgICAgICAgICJfbGluZW5yIiwNCiAgICArICAg
ICAgICAiX2luY2x1ZGVfcGF0aCIsDQogICAgKyAgICAgICAgIl9maWxlc3RhY2siLA0KICAgICsg
ICAgICAgICJfbGluZSIsDQogICAgKyAgICAgICAgIl90b2tlbnMiLA0KICAgICsgICAgICAgICJf
dG9rZW5zX2kiLA0KICAgICsgICAgICAgICJfcmV1c2VfdG9rZW5zIiwNCiAgICArICAgICkNCiAg
ICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFB1YmxpYyBpbnRlcmZhY2UNCiAgICArICAgICMN
CiAgICArDQogICAgKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Iktjb25maWciLCB3
YXJuPVRydWUsIHdhcm5fdG9fc3RkZXJyPVRydWUsDQogICAgKyAgICAgICAgICAgICAgICAgZW5j
b2Rpbmc9InV0Zi04Iik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgQ3JlYXRlcyBh
IG5ldyBLY29uZmlnIG9iamVjdCBieSBwYXJzaW5nIEtjb25maWcgZmlsZXMuDQogICAgKyAgICAg
ICAgTm90ZSB0aGF0IEtjb25maWcgZmlsZXMgYXJlIG5vdCB0aGUgc2FtZSBhcyAuY29uZmlnIGZp
bGVzICh3aGljaCBzdG9yZQ0KICAgICsgICAgICAgIGNvbmZpZ3VyYXRpb24gc3ltYm9sIHZhbHVl
cykuDQogICAgKw0KICAgICsgICAgICAgIFNlZSB0aGUgbW9kdWxlIGRvY3N0cmluZyBmb3Igc29t
ZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBpbmZsdWVuY2UNCiAgICArICAgICAgICBkZWZh
dWx0IHdhcm5pbmcgc2V0dGluZ3MgKEtDT05GSUdfV0FSTl9VTkRFRiBhbmQNCiAgICArICAgICAg
ICBLQ09ORklHX1dBUk5fVU5ERUZfQVNTSUdOKS4NCiAgICArDQogICAgKyAgICAgICAgUmFpc2Vz
IEtjb25maWdFcnJvciBvbiBzeW50YXgvc2VtYW50aWMgZXJyb3JzLCBhbmQgT1NFcnJvciBvciAo
cG9zc2libHkNCiAgICArICAgICAgICBhIHN1YmNsYXNzIG9mKSBJT0Vycm9yIG9uIElPIGVycm9y
cyAoJ2Vycm5vJywgJ3N0cmVycm9yJywgYW5kDQogICAgKyAgICAgICAgJ2ZpbGVuYW1lJyBhcmUg
YXZhaWxhYmxlKS4gTm90ZSB0aGF0IElPRXJyb3IgaXMgYW4gYWxpYXMgZm9yIE9TRXJyb3Igb24N
CiAgICArICAgICAgICBQeXRob24gMywgc28gaXQncyBlbm91Z2ggdG8gY2F0Y2ggT1NFcnJvciB0
aGVyZS4gSWYgeW91IG5lZWQgUHl0aG9uIDIvMw0KICAgICsgICAgICAgIGNvbXBhdGliaWxpdHks
IGl0J3MgZWFzaWVzdCB0byBjYXRjaCBFbnZpcm9ubWVudEVycm9yLCB3aGljaCBpcyBhDQogICAg
KyAgICAgICAgY29tbW9uIGJhc2UgY2xhc3Mgb2YgT1NFcnJvci9JT0Vycm9yIG9uIFB5dGhvbiAy
IGFuZCBhbiBhbGlhcyBmb3INCiAgICArICAgICAgICBPU0Vycm9yIG9uIFB5dGhvbiAzLg0KICAg
ICsNCiAgICArICAgICAgICBmaWxlbmFtZSAoZGVmYXVsdDogIktjb25maWciKToNCiAgICArICAg
ICAgICAgIFRoZSBLY29uZmlnIGZpbGUgdG8gbG9hZC4gRm9yIHRoZSBMaW51eCBrZXJuZWwsIHlv
dSdsbCB3YW50ICJLY29uZmlnIg0KICAgICsgICAgICAgICAgZnJvbSB0aGUgdG9wLWxldmVsIGRp
cmVjdG9yeSwgYXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgbWFrZSBzdXJlDQogICAgKyAg
ICAgICAgICB0aGUgcmlnaHQgS2NvbmZpZyBpcyBpbmNsdWRlZCBmcm9tIHRoZXJlIChhcmNoLyRT
UkNBUkNIL0tjb25maWcgYXMgb2YNCiAgICArICAgICAgICAgIHdyaXRpbmcpLg0KICAgICsNCiAg
ICArICAgICAgICAgIElmICRzcmN0cmVlIGlzIHNldCwgJ2ZpbGVuYW1lJyB3aWxsIGJlIGxvb2tl
ZCB1cCByZWxhdGl2ZSB0byBpdC4NCiAgICArICAgICAgICAgICRzcmN0cmVlIGlzIGFsc28gdXNl
ZCB0byBsb29rIHVwIHNvdXJjZSdkIGZpbGVzIHdpdGhpbiBLY29uZmlnIGZpbGVzLg0KICAgICsg
ICAgICAgICAgU2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLg0KICAgICsNCiAgICArICAgICAg
ICAgIElmIHlvdSBhcmUgdXNpbmcgS2NvbmZpZ2xpYiB2aWEgJ21ha2Ugc2NyaXB0Y29uZmlnJywg
dGhlIGZpbGVuYW1lIG9mDQogICAgKyAgICAgICAgICB0aGUgYmFzZSBiYXNlIEtjb25maWcgZmls
ZSB3aWxsIGJlIGluIHN5cy5hcmd2WzFdLiBJdCdzIGN1cnJlbnRseQ0KICAgICsgICAgICAgICAg
YWx3YXlzICJLY29uZmlnIiBpbiBwcmFjdGljZS4NCiAgICArDQogICAgKyAgICAgICAgd2FybiAo
ZGVmYXVsdDogVHJ1ZSk6DQogICAgKyAgICAgICAgICBUcnVlIGlmIHdhcm5pbmdzIHJlbGF0ZWQg
dG8gdGhpcyBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBnZW5lcmF0ZWQuDQogICAgKyAgICAgICAg
ICBUaGlzIGNhbiBiZSBjaGFuZ2VkIGxhdGVyIGJ5IHNldHRpbmcgS2NvbmZpZy53YXJuIHRvIFRy
dWUvRmFsc2UuIEl0DQogICAgKyAgICAgICAgICBpcyBwcm92aWRlZCBhcyBhIGNvbnN0cnVjdG9y
IGFyZ3VtZW50IHNpbmNlIHdhcm5pbmdzIG1pZ2h0IGJlDQogICAgKyAgICAgICAgICBnZW5lcmF0
ZWQgZHVyaW5nIHBhcnNpbmcuDQogICAgKw0KICAgICsgICAgICAgICAgU2VlIHRoZSBvdGhlciBL
Y29uZmlnLndhcm5fKiB2YXJpYWJsZXMgYXMgd2VsbCwgd2hpY2ggZW5hYmxlIG9yDQogICAgKyAg
ICAgICAgICBzdXBwcmVzcyBjZXJ0YWluIHdhcm5pbmdzIHdoZW4gd2FybmluZ3MgYXJlIGVuYWJs
ZWQuDQogICAgKw0KICAgICsgICAgICAgICAgQWxsIGdlbmVyYXRlZCB3YXJuaW5ncyBhcmUgYWRk
ZWQgdG8gdGhlIEtjb25maWcud2FybmluZ3MgbGlzdC4gU2VlDQogICAgKyAgICAgICAgICB0aGUg
Y2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICArDQogICAgKyAgICAgICAgd2Fybl90b19zdGRlcnIg
KGRlZmF1bHQ6IFRydWUpOg0KICAgICsgICAgICAgICAgVHJ1ZSBpZiB3YXJuaW5ncyBzaG91bGQg
YmUgcHJpbnRlZCB0byBzdGRlcnIgaW4gYWRkaXRpb24gdG8gYmVpbmcNCiAgICArICAgICAgICAg
IGFkZGVkIHRvIEtjb25maWcud2FybmluZ3MuDQogICAgKw0KICAgICsgICAgICAgICAgVGhpcyBj
YW4gYmUgY2hhbmdlZCBsYXRlciBieSBzZXR0aW5nIEtjb25maWcud2Fybl90b19zdGRlcnIgdG8N
CiAgICArICAgICAgICAgIFRydWUvRmFsc2UuDQogICAgKw0KICAgICsgICAgICAgIGVuY29kaW5n
IChkZWZhdWx0OiAidXRmLTgiKToNCiAgICArICAgICAgICAgIFRoZSBlbmNvZGluZyB0byB1c2Ug
d2hlbiByZWFkaW5nIGFuZCB3cml0aW5nIGZpbGVzLCBhbmQgd2hlbiBkZWNvZGluZw0KICAgICsg
ICAgICAgICAgb3V0cHV0IGZyb20gY29tbWFuZHMgcnVuIHZpYSAkKHNoZWxsKS4gSWYgTm9uZSwg
dGhlIGVuY29kaW5nDQogICAgKyAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlIGN1cnJlbnQgbG9j
YWxlIHdpbGwgYmUgdXNlZC4NCiAgICArDQogICAgKyAgICAgICAgICBUaGUgInV0Zi04IiBkZWZh
dWx0IGF2b2lkcyBleGNlcHRpb25zIG9uIHN5c3RlbXMgdGhhdCBhcmUgY29uZmlndXJlZA0KICAg
ICsgICAgICAgICAgdG8gdXNlIHRoZSBDIGxvY2FsZSwgd2hpY2ggaW1wbGllcyBhbiBBU0NJSSBl
bmNvZGluZy4NCiAgICArDQogICAgKyAgICAgICAgICBUaGlzIHBhcmFtZXRlciBoYXMgbm8gZWZm
ZWN0IG9uIFB5dGhvbiAyLCBkdWUgdG8gaW1wbGVtZW50YXRpb24NCiAgICArICAgICAgICAgIGlz
c3VlcyAocmVndWxhciBzdHJpbmdzIHR1cm5pbmcgaW50byBVbmljb2RlIHN0cmluZ3MsIHdoaWNo
IGFyZQ0KICAgICsgICAgICAgICAgZGlzdGluY3QgaW4gUHl0aG9uIDIpLiBQeXRob24gMiBkb2Vz
bid0IGRlY29kZSByZWd1bGFyIHN0cmluZ3MNCiAgICArICAgICAgICAgIGFueXdheS4NCiAgICAr
DQogICAgKyAgICAgICAgICBSZWxhdGVkIFBFUDogaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYv
cGVwcy9wZXAtMDUzOC8NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBzZWxmLl9lbmNv
ZGluZyA9IGVuY29kaW5nDQogICAgKw0KICAgICsgICAgICAgIHNlbGYuc3JjdHJlZSA9IG9zLmdl
dGVudigic3JjdHJlZSIsICIiKQ0KICAgICsgICAgICAgICMgQSBwcmVmaXggd2UgY2FuIHJlbGlh
Ymx5IHN0cmlwIGZyb20gZ2xvYigpIHJlc3VsdHMgdG8gZ2V0IGEgZmlsZW5hbWUNCiAgICArICAg
ICAgICAjIHJlbGF0aXZlIHRvICRzcmN0cmVlLiByZWxwYXRoKCkgY2FuIGNhdXNlIGlzc3VlcyBm
b3Igc3ltbGlua3MsDQogICAgKyAgICAgICAgIyBiZWNhdXNlIGl0IGFzc3VtZXMgc3ltbGluay8u
Li9mb28gaXMgdGhlIHNhbWUgYXMgZm9vLy4NCiAgICArICAgICAgICBzZWxmLl9zcmN0cmVlX3By
ZWZpeCA9IHJlYWxwYXRoKHNlbGYuc3JjdHJlZSkgKyBvcy5zZXANCiAgICArDQogICAgKyAgICAg
ICAgc2VsZi53YXJuID0gd2Fybg0KICAgICsgICAgICAgIHNlbGYud2Fybl90b19zdGRlcnIgPSB3
YXJuX3RvX3N0ZGVycg0KICAgICsgICAgICAgIHNlbGYud2Fybl9hc3NpZ25fdW5kZWYgPSBvcy5n
ZXRlbnYoIktDT05GSUdfV0FSTl9VTkRFRl9BU1NJR04iKSA9PSAieSINCiAgICArICAgICAgICBz
ZWxmLndhcm5fYXNzaWduX292ZXJyaWRlID0gVHJ1ZQ0KICAgICsgICAgICAgIHNlbGYud2Fybl9h
c3NpZ25fcmVkdW4gPSBUcnVlDQogICAgKyAgICAgICAgc2VsZi5fd2Fybl9hc3NpZ25fbm9fcHJv
bXB0ID0gVHJ1ZQ0KICAgICsNCiAgICArICAgICAgICBzZWxmLndhcm5pbmdzID0gW10NCiAgICAr
DQogICAgKyAgICAgICAgc2VsZi5jb25maWdfcHJlZml4ID0gb3MuZ2V0ZW52KCJDT05GSUdfIiwg
IkNPTkZJR18iKQ0KICAgICsgICAgICAgICMgUmVndWxhciBleHByZXNzaW9ucyBmb3IgcGFyc2lu
ZyAuY29uZmlnIGZpbGVzDQogICAgKyAgICAgICAgc2VsZi5fc2V0X21hdGNoID0gX3JlX21hdGNo
KHNlbGYuY29uZmlnX3ByZWZpeCArIHIiKFtePV0rKT0oLiopIikNCiAgICArICAgICAgICBzZWxm
Ll91bnNldF9tYXRjaCA9IF9yZV9tYXRjaChyIiMge30oW14gXSspIGlzIG5vdCBzZXQiLmZvcm1h
dCgNCiAgICArICAgICAgICAgICAgc2VsZi5jb25maWdfcHJlZml4KSkNCiAgICArDQogICAgKyAg
ICAgICAgc2VsZi5zeW1zID0ge30NCiAgICArICAgICAgICBzZWxmLmNvbnN0X3N5bXMgPSB7fQ0K
ICAgICsgICAgICAgIHNlbGYuZGVmaW5lZF9zeW1zID0gW10NCiAgICArICAgICAgICBzZWxmLm1p
c3Npbmdfc3ltcyA9IFtdDQogICAgKyAgICAgICAgc2VsZi5uYW1lZF9jaG9pY2VzID0ge30NCiAg
ICArICAgICAgICBzZWxmLmNob2ljZXMgPSBbXQ0KICAgICsgICAgICAgIHNlbGYubWVudXMgPSBb
XQ0KICAgICsgICAgICAgIHNlbGYuY29tbWVudHMgPSBbXQ0KICAgICsNCiAgICArICAgICAgICBm
b3Igbm15IGluICJuIiwgIm0iLCAieSI6DQogICAgKyAgICAgICAgICAgIHN5bSA9IFN5bWJvbCgp
DQogICAgKyAgICAgICAgICAgIHN5bS5rY29uZmlnID0gc2VsZg0KICAgICsgICAgICAgICAgICBz
eW0ubmFtZSA9IG5teQ0KICAgICsgICAgICAgICAgICBzeW0uaXNfY29uc3RhbnQgPSBUcnVlDQog
ICAgKyAgICAgICAgICAgIHN5bS5vcmlnX3R5cGUgPSBUUklTVEFURQ0KICAgICsgICAgICAgICAg
ICBzeW0uX2NhY2hlZF90cmlfdmFsID0gU1RSX1RPX1RSSVtubXldDQogICAgKw0KICAgICsgICAg
ICAgICAgICBzZWxmLmNvbnN0X3N5bXNbbm15XSA9IHN5bQ0KICAgICsNCiAgICArICAgICAgICBz
ZWxmLm4gPSBzZWxmLmNvbnN0X3N5bXNbIm4iXQ0KICAgICsgICAgICAgIHNlbGYubSA9IHNlbGYu
Y29uc3Rfc3ltc1sibSJdDQogICAgKyAgICAgICAgc2VsZi55ID0gc2VsZi5jb25zdF9zeW1zWyJ5
Il0NCiAgICArDQogICAgKyAgICAgICAgIyBNYWtlIG4vbS95IHdlbGwtZm9ybWVkIHN5bWJvbHMN
CiAgICArICAgICAgICBmb3Igbm15IGluICJuIiwgIm0iLCAieSI6DQogICAgKyAgICAgICAgICAg
IHN5bSA9IHNlbGYuY29uc3Rfc3ltc1tubXldDQogICAgKyAgICAgICAgICAgIHN5bS5yZXZfZGVw
ID0gc3ltLndlYWtfcmV2X2RlcCA9IHN5bS5kaXJlY3RfZGVwID0gc2VsZi5uDQogICAgKw0KICAg
ICsgICAgICAgICMgTWFwcyBwcmVwcm9jZXNzb3IgdmFyaWFibGVzIG5hbWVzIHRvIFZhcmlhYmxl
IGluc3RhbmNlcw0KICAgICsgICAgICAgIHNlbGYudmFyaWFibGVzID0ge30NCiAgICArDQogICAg
KyAgICAgICAgIyBQcmVkZWZpbmVkIHByZXByb2Nlc3NvciBmdW5jdGlvbnMsIHdpdGggbWluL21h
eCBudW1iZXIgb2YgYXJndW1lbnRzDQogICAgKyAgICAgICAgc2VsZi5fZnVuY3Rpb25zID0gew0K
ICAgICsgICAgICAgICAgICAiaW5mbyI6ICAgICAgIChfaW5mb19mbiwgICAgICAgMSwgMSksDQog
ICAgKyAgICAgICAgICAgICJlcnJvci1pZiI6ICAgKF9lcnJvcl9pZl9mbiwgICAyLCAyKSwNCiAg
ICArICAgICAgICAgICAgImZpbGVuYW1lIjogICAoX2ZpbGVuYW1lX2ZuLCAgIDAsIDApLA0KICAg
ICsgICAgICAgICAgICAibGluZW5vIjogICAgIChfbGluZW5vX2ZuLCAgICAgMCwgMCksDQogICAg
KyAgICAgICAgICAgICJzaGVsbCI6ICAgICAgKF9zaGVsbF9mbiwgICAgICAxLCAxKSwNCiAgICAr
ICAgICAgICAgICAgIndhcm5pbmctaWYiOiAoX3dhcm5pbmdfaWZfZm4sIDIsIDIpLA0KICAgICsg
ICAgICAgIH0NCiAgICArDQogICAgKyAgICAgICAgIyBBZGQgYW55IHVzZXItZGVmaW5lZCBwcmVw
cm9jZXNzb3IgZnVuY3Rpb25zDQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBz
ZWxmLl9mdW5jdGlvbnMudXBkYXRlKA0KICAgICsgICAgICAgICAgICAgICAgaW1wb3J0bGliLmlt
cG9ydF9tb2R1bGUoDQogICAgKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0ZW52KCJLQ09ORklH
X0ZVTkNUSU9OUyIsICJrY29uZmlnZnVuY3Rpb25zIikNCiAgICArICAgICAgICAgICAgICAgICku
ZnVuY3Rpb25zKQ0KICAgICsgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICArICAgICAg
ICAgICAgcGFzcw0KICAgICsNCiAgICArICAgICAgICAjIFRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVy
IHByZXZpb3VzbHkgdW5zZWVuIHN5bWJvbHMgYXJlIHJlZ2lzdGVyZWQuDQogICAgKyAgICAgICAg
IyBUaGV5IHNob3VsZG4ndCBiZSBpZiB3ZSBwYXJzZSBleHByZXNzaW9ucyBhZnRlciBwYXJzaW5n
LCBhcyBwYXJ0IG9mDQogICAgKyAgICAgICAgIyBLY29uZmlnLmV2YWxfc3RyaW5nKCkuDQogICAg
KyAgICAgICAgc2VsZi5fcGFyc2luZ19rY29uZmlncyA9IFRydWUNCiAgICArDQogICAgKyAgICAg
ICAgc2VsZi5tb2R1bGVzID0gc2VsZi5fbG9va3VwX3N5bSgiTU9EVUxFUyIpDQogICAgKyAgICAg
ICAgc2VsZi5kZWZjb25maWdfbGlzdCA9IE5vbmUNCiAgICArDQogICAgKyAgICAgICAgc2VsZi50
b3Bfbm9kZSA9IE1lbnVOb2RlKCkNCiAgICArICAgICAgICBzZWxmLnRvcF9ub2RlLmtjb25maWcg
PSBzZWxmDQogICAgKyAgICAgICAgc2VsZi50b3Bfbm9kZS5pdGVtID0gTUVOVQ0KICAgICsgICAg
ICAgIHNlbGYudG9wX25vZGUuaXNfbWVudWNvbmZpZyA9IFRydWUNCiAgICArICAgICAgICBzZWxm
LnRvcF9ub2RlLnZpc2liaWxpdHkgPSBzZWxmLnkNCiAgICArICAgICAgICBzZWxmLnRvcF9ub2Rl
LnByb21wdCA9ICgiTWFpbiBtZW51Iiwgc2VsZi55KQ0KICAgICsgICAgICAgIHNlbGYudG9wX25v
ZGUucGFyZW50ID0gTm9uZQ0KICAgICsgICAgICAgIHNlbGYudG9wX25vZGUuZGVwID0gc2VsZi55
DQogICAgKyAgICAgICAgc2VsZi50b3Bfbm9kZS5maWxlbmFtZSA9IGZpbGVuYW1lDQogICAgKyAg
ICAgICAgc2VsZi50b3Bfbm9kZS5saW5lbnIgPSAxDQogICAgKyAgICAgICAgc2VsZi50b3Bfbm9k
ZS5pbmNsdWRlX3BhdGggPSAoKQ0KICAgICsNCiAgICArICAgICAgICAjIFBhcnNlIHRoZSBLY29u
ZmlnIGZpbGVzDQogICAgKw0KICAgICsgICAgICAgICMgTm90IHVzZWQgaW50ZXJuYWxseS4gUHJv
dmlkZWQgYXMgYSBjb252ZW5pZW5jZS4NCiAgICArICAgICAgICBzZWxmLmtjb25maWdfZmlsZW5h
bWVzID0gW2ZpbGVuYW1lXQ0KICAgICsgICAgICAgIHNlbGYuZW52X3ZhcnMgPSBzZXQoKQ0KICAg
ICsNCiAgICArICAgICAgICAjIEtlZXBzIHRyYWNrIG9mIHRoZSBsb2NhdGlvbiBpbiB0aGUgcGFy
ZW50IEtjb25maWcgZmlsZXMuIEtjb25maWcNCiAgICArICAgICAgICAjIGZpbGVzIHVzdWFsbHkg
c291cmNlIG90aGVyIEtjb25maWcgZmlsZXMuIFNlZSBfZW50ZXJfZmlsZSgpLg0KICAgICsgICAg
ICAgIHNlbGYuX2ZpbGVzdGFjayA9IFtdDQogICAgKyAgICAgICAgc2VsZi5faW5jbHVkZV9wYXRo
ID0gKCkNCiAgICArDQogICAgKyAgICAgICAgIyBUaGUgY3VycmVudCBwYXJzaW5nIGxvY2F0aW9u
DQogICAgKyAgICAgICAgc2VsZi5fZmlsZW5hbWUgPSBmaWxlbmFtZQ0KICAgICsgICAgICAgIHNl
bGYuX2xpbmVuciA9IDANCiAgICArDQogICAgKyAgICAgICAgIyBVc2VkIHRvIGF2b2lkIHJldG9r
ZW5pemluZyBsaW5lcyB3aGVuIHdlIGRpc2NvdmVyIHRoYXQgdGhleSdyZSBub3QNCiAgICArICAg
ICAgICAjIHBhcnQgb2YgdGhlIGNvbnN0cnVjdCBjdXJyZW50bHkgYmVpbmcgcGFyc2VkLiBUaGlz
IGlzIGtpbmRhIGxpa2UgYW4NCiAgICArICAgICAgICAjIHVuZ2V0IG9wZXJhdGlvbi4NCiAgICAr
ICAgICAgICBzZWxmLl9yZXVzZV90b2tlbnMgPSBGYWxzZQ0KICAgICsNCiAgICArICAgICAgICAj
IE9wZW4gdGhlIHRvcC1sZXZlbCBLY29uZmlnIGZpbGUuIFN0b3JlIHRoZSByZWFkbGluZSgpIG1l
dGhvZCBkaXJlY3RseQ0KICAgICsgICAgICAgICMgYXMgYSBzbWFsbCBvcHRpbWl6YXRpb24uDQog
ICAgKyAgICAgICAgc2VsZi5fcmVhZGxpbmUgPSBzZWxmLl9vcGVuKGpvaW4oc2VsZi5zcmN0cmVl
LCBmaWxlbmFtZSksICJyIikucmVhZGxpbmUNCiAgICArDQogICAgKyAgICAgICAgdHJ5Og0KICAg
ICsgICAgICAgICAgICAjIFBhcnNlIHRoZSBLY29uZmlnIGZpbGVzDQogICAgKyAgICAgICAgICAg
IHNlbGYuX3BhcnNlX2Jsb2NrKE5vbmUsIHNlbGYudG9wX25vZGUsIHNlbGYudG9wX25vZGUpDQog
ICAgKyAgICAgICAgICAgIHNlbGYudG9wX25vZGUubGlzdCA9IHNlbGYudG9wX25vZGUubmV4dA0K
ICAgICsgICAgICAgICAgICBzZWxmLnRvcF9ub2RlLm5leHQgPSBOb25lDQogICAgKyAgICAgICAg
ZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBlOg0KICAgICsgICAgICAgICAgICBfZGVjb2Rp
bmdfZXJyb3IoZSwgc2VsZi5fZmlsZW5hbWUpDQogICAgKw0KICAgICsgICAgICAgICMgQ2xvc2Ug
dGhlIHRvcC1sZXZlbCBLY29uZmlnIGZpbGUuIF9fc2VsZl9fIGZldGNoZXMgdGhlICdmaWxlJyBv
YmplY3QNCiAgICArICAgICAgICAjIGZvciB0aGUgbWV0aG9kLg0KICAgICsgICAgICAgIHNlbGYu
X3JlYWRsaW5lLl9fc2VsZl9fLmNsb3NlKCkNCiAgICArDQogICAgKyAgICAgICAgc2VsZi5fcGFy
c2luZ19rY29uZmlncyA9IEZhbHNlDQogICAgKw0KICAgICsgICAgICAgICMgRG8gdmFyaW91cyBt
ZW51IHRyZWUgcG9zdC1wcm9jZXNzaW5nDQogICAgKyAgICAgICAgc2VsZi5fZmluYWxpemVfbm9k
ZShzZWxmLnRvcF9ub2RlLCBzZWxmLnkpDQogICAgKw0KICAgICsgICAgICAgIHNlbGYudW5pcXVl
X2RlZmluZWRfc3ltcyA9IF9vcmRlcmVkX3VuaXF1ZShzZWxmLmRlZmluZWRfc3ltcykNCiAgICAr
ICAgICAgICBzZWxmLnVuaXF1ZV9jaG9pY2VzID0gX29yZGVyZWRfdW5pcXVlKHNlbGYuY2hvaWNl
cykNCiAgICArDQogICAgKyAgICAgICAgIyBEbyBzYW5pdHkgY2hlY2tzLiBTb21lIG9mIHRoZXNl
IGRlcGVuZCBvbiBldmVyeXRoaW5nIGJlaW5nIGZpbmFsaXplZC4NCiAgICArICAgICAgICBzZWxm
Ll9jaGVja19zeW1fc2FuaXR5KCkNCiAgICArICAgICAgICBzZWxmLl9jaGVja19jaG9pY2Vfc2Fu
aXR5KCkNCiAgICArDQogICAgKyAgICAgICAgIyBLQ09ORklHX1NUUklDVCBpcyBhbiBvbGRlciBh
bGlhcyBmb3IgS0NPTkZJR19XQVJOX1VOREVGLCBzdXBwb3J0ZWQNCiAgICArICAgICAgICAjIGZv
ciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQ0KICAgICsgICAgICAgIGlmIG9zLmdldGVudigiS0NP
TkZJR19XQVJOX1VOREVGIikgPT0gInkiIG9yIFwNCiAgICArICAgICAgICAgICBvcy5nZXRlbnYo
IktDT05GSUdfU1RSSUNUIikgPT0gInkiOg0KICAgICsNCiAgICArICAgICAgICAgICAgc2VsZi5f
Y2hlY2tfdW5kZWZfc3ltcygpDQogICAgKw0KICAgICsgICAgICAgICMgQnVpbGQgU3ltYm9sLl9k
ZXBlbmRlbnRzIGZvciBhbGwgc3ltYm9scyBhbmQgY2hvaWNlcw0KICAgICsgICAgICAgIHNlbGYu
X2J1aWxkX2RlcCgpDQogICAgKw0KICAgICsgICAgICAgICMgQ2hlY2sgZm9yIGRlcGVuZGVuY3kg
bG9vcHMNCiAgICArICAgICAgICBjaGVja19kZXBfbG9vcF9zeW0gPSBfY2hlY2tfZGVwX2xvb3Bf
c3ltICAjIE1pY3JvLW9wdGltaXphdGlvbg0KICAgICsgICAgICAgIGZvciBzeW0gaW4gc2VsZi51
bmlxdWVfZGVmaW5lZF9zeW1zOg0KICAgICsgICAgICAgICAgICBjaGVja19kZXBfbG9vcF9zeW0o
c3ltLCBGYWxzZSkNCiAgICArDQogICAgKyAgICAgICAgIyBBZGQgZXh0cmEgZGVwZW5kZW5jaWVz
IGZyb20gY2hvaWNlcyB0byBjaG9pY2Ugc3ltYm9scyB0aGF0IGdldA0KICAgICsgICAgICAgICMg
YXdrd2FyZCBkdXJpbmcgZGVwZW5kZW5jeSBsb29wIGRldGVjdGlvbg0KICAgICsgICAgICAgIHNl
bGYuX2FkZF9jaG9pY2VfZGVwcygpDQogICAgKw0KICAgICsgICAgQHByb3BlcnR5DQogICAgKyAg
ICBkZWYgbWFpbm1lbnVfdGV4dChzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAg
ICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRpb24uDQogICAgKyAgICAgICAgIiIiDQogICAgKyAg
ICAgICAgcmV0dXJuIHNlbGYudG9wX25vZGUucHJvbXB0WzBdDQogICAgKw0KICAgICsgICAgQHBy
b3BlcnR5DQogICAgKyAgICBkZWYgZGVmY29uZmlnX2ZpbGVuYW1lKHNlbGYpOg0KICAgICsgICAg
ICAgICIiIg0KICAgICsgICAgICAgIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICAr
ICAgICAgICAiIiINCiAgICArICAgICAgICBpZiBzZWxmLmRlZmNvbmZpZ19saXN0Og0KICAgICsg
ICAgICAgICAgICBmb3IgZmlsZW5hbWUsIGNvbmQgaW4gc2VsZi5kZWZjb25maWdfbGlzdC5kZWZh
dWx0czoNCiAgICArICAgICAgICAgICAgICAgIGlmIGV4cHJfdmFsdWUoY29uZCk6DQogICAgKyAg
ICAgICAgICAgICAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICB3aXRo
IHNlbGYuX29wZW5fY29uZmlnKGZpbGVuYW1lLnN0cl92YWx1ZSkgYXMgZjoNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmLm5hbWUNCiAgICArICAgICAgICAgICAgICAg
ICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoNCiAgICArICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuIE5vbmUNCiAgICArDQogICAg
KyAgICBkZWYgbG9hZF9jb25maWcoc2VsZiwgZmlsZW5hbWU9Tm9uZSwgcmVwbGFjZT1UcnVlLCB2
ZXJib3NlPU5vbmUpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIExvYWRzIHN5bWJv
bCB2YWx1ZXMgZnJvbSBhIGZpbGUgaW4gdGhlIC5jb25maWcgZm9ybWF0LiBFcXVpdmFsZW50IHRv
DQogICAgKyAgICAgICAgY2FsbGluZyBTeW1ib2wuc2V0X3ZhbHVlKCkgdG8gc2V0IGVhY2ggb2Yg
dGhlIHZhbHVlcy4NCiAgICArDQogICAgKyAgICAgICAgIiMgQ09ORklHX0ZPTyBpcyBub3Qgc2V0
IiB3aXRoaW4gYSAuY29uZmlnIGZpbGUgc2V0cyB0aGUgdXNlciB2YWx1ZSBvZg0KICAgICsgICAg
ICAgIEZPTyB0byBuLiBUaGUgQyB0b29scyB3b3JrIHRoZSBzYW1lIHdheS4NCiAgICArDQogICAg
KyAgICAgICAgRm9yIGVhY2ggc3ltYm9sLCB0aGUgU3ltYm9sLnVzZXJfdmFsdWUgYXR0cmlidXRl
IGhvbGRzIHRoZSB2YWx1ZSB0aGUNCiAgICArICAgICAgICBzeW1ib2wgd2FzIGFzc2lnbmVkIGlu
IHRoZSAuY29uZmlnIGZpbGUgKGlmIGFueSkuIFRoZSB1c2VyIHZhbHVlIG1pZ2h0DQogICAgKyAg
ICAgICAgZGlmZmVyIGZyb20gU3ltYm9sLnN0ci90cmlfdmFsdWUgaWYgdGhlcmUgYXJlIHVuc2F0
aXNmaWVkIGRlcGVuZGVuY2llcy4NCiAgICArDQogICAgKyAgICAgICAgQ2FsbGluZyB0aGlzIGZ1
bmN0aW9uIGFsc28gdXBkYXRlcyB0aGUgS2NvbmZpZy5taXNzaW5nX3N5bXMgYXR0cmlidXRlDQog
ICAgKyAgICAgICAgd2l0aCBhIGxpc3Qgb2YgYWxsIGFzc2lnbm1lbnRzIHRvIHVuZGVmaW5lZCBz
eW1ib2xzIHdpdGhpbiB0aGUNCiAgICArICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUuIEtjb25m
aWcubWlzc2luZ19zeW1zIGlzIGNsZWFyZWQgaWYgJ3JlcGxhY2UnIGlzDQogICAgKyAgICAgICAg
VHJ1ZSwgYW5kIGFwcGVuZGVkIHRvIG90aGVyd2lzZS4gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZv
cg0KICAgICsgICAgICAgIEtjb25maWcubWlzc2luZ19zeW1zIGFzIHdlbGwuDQogICAgKw0KICAg
ICsgICAgICAgIFNlZSB0aGUgS2NvbmZpZy5fX2luaXRfXygpIGRvY3N0cmluZyBmb3IgcmFpc2Vk
IGV4Y2VwdGlvbnMNCiAgICArICAgICAgICAoT1NFcnJvci9JT0Vycm9yKS4gS2NvbmZpZ0Vycm9y
IGlzIG5ldmVyIHJhaXNlZCBoZXJlLg0KICAgICsNCiAgICArICAgICAgICBmaWxlbmFtZSAoZGVm
YXVsdDogTm9uZSk6DQogICAgKyAgICAgICAgICBQYXRoIHRvIGxvYWQgY29uZmlndXJhdGlvbiBm
cm9tIChhIHN0cmluZykuIFJlc3BlY3RzICRzcmN0cmVlIGlmIHNldA0KICAgICsgICAgICAgICAg
KHNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbikuDQogICAgKw0KICAgICsgICAgICAgICAgSWYg
J2ZpbGVuYW1lJyBpcyBOb25lICh0aGUgZGVmYXVsdCksIHRoZSBjb25maWd1cmF0aW9uIGZpbGUg
dG8gbG9hZA0KICAgICsgICAgICAgICAgKGlmIGFueSkgaXMgY2FsY3VsYXRlZCBhdXRvbWF0aWNh
bGx5LCBnaXZpbmcgdGhlIGJlaGF2aW9yIHlvdSdkDQogICAgKyAgICAgICAgICB1c3VhbGx5IHdh
bnQ6DQogICAgKw0KICAgICsgICAgICAgICAgICAxLiBJZiB0aGUgS0NPTkZJR19DT05GSUcgZW52
aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0LCBpdCBnaXZlcyB0aGUNCiAgICArICAgICAgICAgICAg
ICAgcGF0aCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRvIGxvYWQuIE90aGVyd2lzZSwgIi5j
b25maWciIGlzDQogICAgKyAgICAgICAgICAgICAgIHVzZWQuIFNlZSBzdGFuZGFyZF9jb25maWdf
ZmlsZW5hbWUoKS4NCiAgICArDQogICAgKyAgICAgICAgICAgIDIuIElmIHRoZSBwYXRoIGZyb20g
KDEuKSBkb2Vzbid0IGV4aXN0LCB0aGUgY29uZmlndXJhdGlvbiBmaWxlDQogICAgKyAgICAgICAg
ICAgICAgIGdpdmVuIGJ5IGtjb25mLmRlZmNvbmZpZ19maWxlbmFtZSBpcyBsb2FkZWQgaW5zdGVh
ZCwgd2hpY2ggaXMNCiAgICArICAgICAgICAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSAnb3B0aW9u
IGRlZmNvbmZpZ19saXN0JyBzeW1ib2wuDQogICAgKw0KICAgICsgICAgICAgICAgICAzLiBJZiAo
MS4pIGFuZCAoMi4pIGZhaWwgdG8gZmluZCBhIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBsb2FkLCBu
bw0KICAgICsgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgaXMgbG9hZGVkLCBhbmQg
c3ltYm9scyByZXRhaW4gdGhlaXIgY3VycmVudA0KICAgICsgICAgICAgICAgICAgICB2YWx1ZXMg
KGUuZy4sIHRoZWlyIGRlZmF1bHQgdmFsdWVzKS4gVGhpcyBpcyBub3QgYW4gZXJyb3IuDQogICAg
Kw0KICAgICsgICAgICAgICAgIFNlZSB0aGUgcmV0dXJuIHZhbHVlIGFzIHdlbGwuDQogICAgKw0K
ICAgICsgICAgICAgIHJlcGxhY2UgKGRlZmF1bHQ6IFRydWUpOg0KICAgICsgICAgICAgICAgSWYg
VHJ1ZSwgYWxsIGV4aXN0aW5nIHVzZXIgdmFsdWVzIHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgbG9h
ZGluZyB0aGUNCiAgICArICAgICAgICAgIC5jb25maWcuIFBhc3MgRmFsc2UgdG8gbWVyZ2UgY29u
ZmlndXJhdGlvbnMuDQogICAgKw0KICAgICsgICAgICAgIHZlcmJvc2UgKGRlZmF1bHQ6IE5vbmUp
Og0KICAgICsgICAgICAgICAgTGltaXRlZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0byBwcmV2
ZW50IGNyYXNoZXMuIEEgd2FybmluZyBpcw0KICAgICsgICAgICAgICAgcHJpbnRlZCBpZiBhbnl0
aGluZyBidXQgTm9uZSBpcyBwYXNzZWQuDQogICAgKw0KICAgICsgICAgICAgICAgUHJpb3IgdG8g
S2NvbmZpZ2xpYiAxMi4wLjAsIHRoaXMgb3B0aW9uIGVuYWJsZWQgcHJpbnRpbmcgb2YgbWVzc2Fn
ZXMNCiAgICArICAgICAgICAgIHRvIHN0ZG91dCB3aGVuICdmaWxlbmFtZScgd2FzIE5vbmUuIEEg
bWVzc2FnZSBpcyAoYWx3YXlzKSByZXR1cm5lZA0KICAgICsgICAgICAgICAgbm93IGluc3RlYWQs
IHdoaWNoIGlzIG1vcmUgZmxleGlibGUuDQogICAgKw0KICAgICsgICAgICAgICAgV2lsbCBwcm9i
YWJseSBiZSByZW1vdmVkIGluIHNvbWUgZnV0dXJlIHZlcnNpb24uDQogICAgKw0KICAgICsgICAg
ICAgIFJldHVybnMgYSBzdHJpbmcgd2l0aCBhIG1lc3NhZ2Ugc2F5aW5nIHdoaWNoIGZpbGUgZ290
IGxvYWRlZCAob3INCiAgICArICAgICAgICBwb3NzaWJseSB0aGF0IG5vIGZpbGUgZ290IGxvYWRl
ZCwgd2hlbiAnZmlsZW5hbWUnIGlzIE5vbmUpLiBUaGlzIGlzDQogICAgKyAgICAgICAgbWVhbnQg
dG8gcmVkdWNlIGJvaWxlcnBsYXRlIGluIHRvb2xzLCB3aGljaCBjYW4gZG8gZS5nLg0KICAgICsg
ICAgICAgIHByaW50KGtjb25mLmxvYWRfY29uZmlnKCkpLiBUaGUgcmV0dXJuZWQgbWVzc2FnZSBk
aXN0aW5ndWlzaGVzIGJldHdlZW4NCiAgICArICAgICAgICBsb2FkaW5nIChyZXBsYWNlID09IFRy
dWUpIGFuZCBtZXJnaW5nIChyZXBsYWNlID09IEZhbHNlKS4NCiAgICArICAgICAgICAiIiINCiAg
ICArICAgICAgICBpZiB2ZXJib3NlIGlzIG5vdCBOb25lOg0KICAgICsgICAgICAgICAgICBfd2Fy
bl92ZXJib3NlX2RlcHJlY2F0ZWQoImxvYWRfY29uZmlnIikNCiAgICArDQogICAgKyAgICAgICAg
bXNnID0gTm9uZQ0KICAgICsgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6DQogICAgKyAgICAg
ICAgICAgIGZpbGVuYW1lID0gc3RhbmRhcmRfY29uZmlnX2ZpbGVuYW1lKCkNCiAgICArICAgICAg
ICAgICAgaWYgbm90IGV4aXN0cyhmaWxlbmFtZSkgYW5kIFwNCiAgICArICAgICAgICAgICAgICAg
bm90IGV4aXN0cyhqb2luKHNlbGYuc3JjdHJlZSwgZmlsZW5hbWUpKToNCiAgICArICAgICAgICAg
ICAgICAgIGRlZmNvbmZpZyA9IHNlbGYuZGVmY29uZmlnX2ZpbGVuYW1lDQogICAgKyAgICAgICAg
ICAgICAgICBpZiBkZWZjb25maWcgaXMgTm9uZToNCiAgICArICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gIlVzaW5nIGRlZmF1bHQgc3ltYm9sIHZhbHVlcyAobm8gJ3t9JykiIFwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmaWxlbmFtZSkNCiAgICArDQogICAgKyAg
ICAgICAgICAgICAgICBtc2cgPSAiIGRlZmF1bHQgY29uZmlndXJhdGlvbiAne30nIChubyAne30n
KSIgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChkZWZjb25maWcsIGZpbGVu
YW1lKQ0KICAgICsgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBkZWZjb25maWcNCiAgICArDQog
ICAgKyAgICAgICAgaWYgbm90IG1zZzoNCiAgICArICAgICAgICAgICAgbXNnID0gIiBjb25maWd1
cmF0aW9uICd7fSciLmZvcm1hdChmaWxlbmFtZSkNCiAgICArDQogICAgKyAgICAgICAgIyBEaXNh
YmxlIHRoZSB3YXJuaW5nIGFib3V0IGFzc2lnbmluZyB0byBzeW1ib2xzIHdpdGhvdXQgcHJvbXB0
cy4gVGhpcw0KICAgICsgICAgICAgICMgaXMgbm9ybWFsIGFuZCBleHBlY3RlZCB3aXRoaW4gYSAu
Y29uZmlnIGZpbGUuDQogICAgKyAgICAgICAgc2VsZi5fd2Fybl9hc3NpZ25fbm9fcHJvbXB0ID0g
RmFsc2UNCiAgICArDQogICAgKyAgICAgICAgIyBUaGlzIHN0dWIgb25seSBleGlzdHMgdG8gbWFr
ZSBzdXJlIF93YXJuX2Fzc2lnbl9ub19wcm9tcHQgZ2V0cw0KICAgICsgICAgICAgICMgcmVlbmFi
bGVkDQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBzZWxmLl9sb2FkX2NvbmZp
ZyhmaWxlbmFtZSwgcmVwbGFjZSkNCiAgICArICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVy
cm9yIGFzIGU6DQogICAgKyAgICAgICAgICAgIF9kZWNvZGluZ19lcnJvcihlLCBmaWxlbmFtZSkN
CiAgICArICAgICAgICBmaW5hbGx5Og0KICAgICsgICAgICAgICAgICBzZWxmLl93YXJuX2Fzc2ln
bl9ub19wcm9tcHQgPSBUcnVlDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiAoIkxvYWRlZCIg
aWYgcmVwbGFjZSBlbHNlICJNZXJnZWQiKSArIG1zZw0KICAgICsNCiAgICArICAgIGRlZiBfbG9h
ZF9jb25maWcoc2VsZiwgZmlsZW5hbWUsIHJlcGxhY2UpOg0KICAgICsgICAgICAgIHdpdGggc2Vs
Zi5fb3Blbl9jb25maWcoZmlsZW5hbWUpIGFzIGY6DQogICAgKyAgICAgICAgICAgIGlmIHJlcGxh
Y2U6DQogICAgKyAgICAgICAgICAgICAgICBzZWxmLm1pc3Npbmdfc3ltcyA9IFtdDQogICAgKw0K
ICAgICsgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSByZXBsYWNpbmcgdGhlIGNvbmZpZ3VyYXRp
b24sIGtlZXAgdHJhY2sgb2Ygd2hpY2gNCiAgICArICAgICAgICAgICAgICAgICMgc3ltYm9scyBh
bmQgY2hvaWNlcyBnb3Qgc2V0IHNvIHRoYXQgd2UgY2FuIHVuc2V0IHRoZSByZXN0DQogICAgKyAg
ICAgICAgICAgICAgICAjIGxhdGVyLiBUaGlzIGF2b2lkcyBpbnZhbGlkYXRpbmcgZXZlcnl0aGlu
ZyBhbmQgaXMgZmFzdGVyLg0KICAgICsgICAgICAgICAgICAgICAgIyBBbm90aGVyIGJlbmVmaXQg
aXMgdGhhdCBpbnZhbGlkYXRpb24gbXVzdCBiZSByb2NrIHNvbGlkIGZvcg0KICAgICsgICAgICAg
ICAgICAgICAgIyBpdCB0byB3b3JrLCBtYWtpbmcgaXQgYSBnb29kIHRlc3QuDQogICAgKw0KICAg
ICsgICAgICAgICAgICAgICAgZm9yIHN5bSBpbiBzZWxmLnVuaXF1ZV9kZWZpbmVkX3N5bXM6DQog
ICAgKyAgICAgICAgICAgICAgICAgICAgc3ltLl93YXNfc2V0ID0gRmFsc2UNCiAgICArDQogICAg
KyAgICAgICAgICAgICAgICBmb3IgY2hvaWNlIGluIHNlbGYudW5pcXVlX2Nob2ljZXM6DQogICAg
KyAgICAgICAgICAgICAgICAgICAgY2hvaWNlLl93YXNfc2V0ID0gRmFsc2UNCiAgICArDQogICAg
KyAgICAgICAgICAgICMgU21hbGwgb3B0aW1pemF0aW9ucw0KICAgICsgICAgICAgICAgICBzZXRf
bWF0Y2ggPSBzZWxmLl9zZXRfbWF0Y2gNCiAgICArICAgICAgICAgICAgdW5zZXRfbWF0Y2ggPSBz
ZWxmLl91bnNldF9tYXRjaA0KICAgICsgICAgICAgICAgICBnZXRfc3ltID0gc2VsZi5zeW1zLmdl
dA0KICAgICsNCiAgICArICAgICAgICAgICAgZm9yIGxpbmVuciwgbGluZSBpbiBlbnVtZXJhdGUo
ZiwgMSk6DQogICAgKyAgICAgICAgICAgICAgICAjIFRoZSBDIHRvb2xzIGlnbm9yZSB0cmFpbGlu
ZyB3aGl0ZXNwYWNlDQogICAgKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yc3RyaXAoKQ0K
ICAgICsNCiAgICArICAgICAgICAgICAgICAgIG1hdGNoID0gc2V0X21hdGNoKGxpbmUpDQogICAg
KyAgICAgICAgICAgICAgICBpZiBtYXRjaDoNCiAgICArICAgICAgICAgICAgICAgICAgICBuYW1l
LCB2YWwgPSBtYXRjaC5ncm91cHMoKQ0KICAgICsgICAgICAgICAgICAgICAgICAgIHN5bSA9IGdl
dF9zeW0obmFtZSkNCiAgICArICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3ltIG9yIG5vdCBz
eW0ubm9kZXM6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuZGVmX2Fzc2ln
bihuYW1lLCB2YWwsIGZpbGVuYW1lLCBsaW5lbnIpDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIHN5bS5vcmln
X3R5cGUgaW4gX0JPT0xfVFJJU1RBVEU6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICMg
VGhlIEMgaW1wbGVtZW50YXRpb24gb25seSBjaGVja3MgdGhlIGZpcnN0IGNoYXJhY3Rlcg0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgICAjIHRvIHRoZSByaWdodCBvZiAnPScsIGZvciB3aGF0
ZXZlciByZWFzb24NCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IChzeW0ub3Jp
Z190eXBlIGlzIEJPT0wNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQg
dmFsLnN0YXJ0c3dpdGgoKCJ5IiwgIm4iKSkgb3INCiAgICArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzeW0ub3JpZ190eXBlIGlzIFRSSVNUQVRFDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5kIHZhbC5zdGFydHN3aXRoKCgieSIsICJtIiwgIm4iKSkpOg0K
ICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FybigiJ3t9JyBpcyBub3Qg
YSB2YWxpZCB2YWx1ZSBmb3IgdGhlIHt9ICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInN5bWJvbCB7fS4gQXNzaWdubWVudCBpZ25vcmVkLiINCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh2YWwsIFRZUEVfVE9f
U1RSW3N5bS5vcmlnX3R5cGVdLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9uYW1lX2FuZF9sb2Moc3ltKSksDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbnIpDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsID0gdmFsWzBdDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBzeW0uY2hvaWNlIGFuZCB2YWwgIT0gIm4iOg0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIyBEdXJpbmcgLmNvbmZpZyBsb2FkaW5nLCB3ZSBpbmZlciB0aGUgbW9kZSBvZiB0
aGUNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hvaWNlIGZyb20gdGhlIGtp
bmQgb2YgdmFsdWVzIHRoYXQgYXJlIGFzc2lnbmVkDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIHRvIHRoZSBjaG9pY2Ugc3ltYm9scw0KICAgICsNCiAgICArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByZXZfbW9kZSA9IHN5bS5jaG9pY2UudXNlcl92YWx1ZQ0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJldl9tb2RlIGlzIG5vdCBOb25lIGFuZCBc
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUklfVE9fU1RSW3ByZXZfbW9k
ZV0gIT0gdmFsOg0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLl93YXJuKCJib3RoIG0gYW5kIHkgYXNzaWduZWQgdG8gc3ltYm9scyAiDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aGluIHRoZSBzYW1lIGNo
b2ljZSIsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
aWxlbmFtZSwgbGluZW5yKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgU2V0IHRoZSBjaG9pY2UncyBtb2RlDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzeW0uY2hvaWNlLnNldF92YWx1ZSh2YWwpDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAg
ICAgIGVsaWYgc3ltLm9yaWdfdHlwZSBpcyBTVFJJTkc6DQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoID0gX2NvbmZfc3RyaW5nX21hdGNoKHZhbCkNCiAgICArICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgbm90IG1hdGNoOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fd2FybigibWFsZm9ybWVkIHN0cmluZyBsaXRlcmFsIGluICINCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzc2lnbm1lbnQgdG8ge30uIEFzc2ln
bm1lbnQgaWdub3JlZC4iDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5mb3JtYXQoX25hbWVfYW5kX2xvYyhzeW0pKSwNCiAgICArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVucikNCiAgICArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICB2YWwgPSB1bmVzY2FwZShtYXRjaC5ncm91cCgxKSkNCiAgICArDQogICAgKyAgICAgICAg
ICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gdW5zZXRfbWF0
Y2gobGluZSkNCiAgICArICAgICAgICAgICAgICAgICAgICBpZiBub3QgbWF0Y2g6DQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgUHJpbnQgYSB3YXJuaW5nIGZvciBsaW5lcyB0aGF0IG1h
dGNoIG5laXRoZXINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgIyBzZXRfbWF0Y2goKSBu
b3IgdW5zZXRfbWF0Y2goKSBhbmQgdGhhdCBhcmUgbm90IGJsYW5rDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgICMgbGluZXMgb3IgY29tbWVudHMuICdsaW5lJyBoYXMgYWxyZWFkeSBiZWVu
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICMgcnN0cmlwKCknZCwgc28gYmxhbmsgbGlu
ZXMgc2hvdyB1cCBhcyAiIiBoZXJlLg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBpZiBs
aW5lIGFuZCBub3QgbGluZS5sc3RyaXAoKS5zdGFydHN3aXRoKCIjIik6DQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXJuKCJpZ25vcmluZyBtYWxmb3JtZWQgbGluZSAn
e30nIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0
KGxpbmUpLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxl
bmFtZSwgbGluZW5yKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWUNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICAgICAgbmFtZSA9IG1hdGNoLmdyb3VwKDEp
DQogICAgKyAgICAgICAgICAgICAgICAgICAgc3ltID0gZ2V0X3N5bShuYW1lKQ0KICAgICsgICAg
ICAgICAgICAgICAgICAgIGlmIG5vdCBzeW0gb3Igbm90IHN5bS5ub2RlczoNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi5fdW5kZWZfYXNzaWduKG5hbWUsICJuIiwgZmlsZW5hbWUs
IGxpbmVucikNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICArDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgaWYgc3ltLm9yaWdfdHlwZSBub3QgaW4gX0JPT0xfVFJJ
U1RBVEU6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgKw0KICAg
ICsgICAgICAgICAgICAgICAgICAgIHZhbCA9ICJuIg0KICAgICsNCiAgICArICAgICAgICAgICAg
ICAgICMgRG9uZSBwYXJzaW5nIHRoZSBhc3NpZ25tZW50LiBTZXQgdGhlIHZhbHVlLg0KICAgICsN
CiAgICArICAgICAgICAgICAgICAgIGlmIHN5bS5fd2FzX3NldDoNCiAgICArICAgICAgICAgICAg
ICAgICAgICBzZWxmLl9hc3NpZ25lZF90d2ljZShzeW0sIHZhbCwgZmlsZW5hbWUsIGxpbmVucikN
CiAgICArDQogICAgKyAgICAgICAgICAgICAgICBzeW0uc2V0X3ZhbHVlKHZhbCkNCiAgICArDQog
ICAgKyAgICAgICAgaWYgcmVwbGFjZToNCiAgICArICAgICAgICAgICAgIyBJZiB3ZSdyZSByZXBs
YWNpbmcgdGhlIGNvbmZpZ3VyYXRpb24sIHVuc2V0IHRoZSBzeW1ib2xzIHRoYXQNCiAgICArICAg
ICAgICAgICAgIyBkaWRuJ3QgZ2V0IHNldA0KICAgICsNCiAgICArICAgICAgICAgICAgZm9yIHN5
bSBpbiBzZWxmLnVuaXF1ZV9kZWZpbmVkX3N5bXM6DQogICAgKyAgICAgICAgICAgICAgICBpZiBu
b3Qgc3ltLl93YXNfc2V0Og0KICAgICsgICAgICAgICAgICAgICAgICAgIHN5bS51bnNldF92YWx1
ZSgpDQogICAgKw0KICAgICsgICAgICAgICAgICBmb3IgY2hvaWNlIGluIHNlbGYudW5pcXVlX2No
b2ljZXM6DQogICAgKyAgICAgICAgICAgICAgICBpZiBub3QgY2hvaWNlLl93YXNfc2V0Og0KICAg
ICsgICAgICAgICAgICAgICAgICAgIGNob2ljZS51bnNldF92YWx1ZSgpDQogICAgKw0KICAgICsg
ICAgZGVmIF91bmRlZl9hc3NpZ24oc2VsZiwgbmFtZSwgdmFsLCBmaWxlbmFtZSwgbGluZW5yKToN
CiAgICArICAgICAgICAjIENhbGxlZCBmb3IgYXNzaWdubWVudHMgdG8gdW5kZWZpbmVkIHN5bWJv
bHMgZHVyaW5nIC5jb25maWcgbG9hZGluZw0KICAgICsNCiAgICArICAgICAgICBzZWxmLm1pc3Np
bmdfc3ltcy5hcHBlbmQoKG5hbWUsIHZhbCkpDQogICAgKyAgICAgICAgaWYgc2VsZi53YXJuX2Fz
c2lnbl91bmRlZjoNCiAgICArICAgICAgICAgICAgc2VsZi5fd2FybigNCiAgICArICAgICAgICAg
ICAgICAgICJhdHRlbXB0IHRvIGFzc2lnbiB0aGUgdmFsdWUgJ3t9JyB0byB0aGUgdW5kZWZpbmVk
IHN5bWJvbCB7fSINCiAgICArICAgICAgICAgICAgICAgIC5mb3JtYXQodmFsLCBuYW1lKSwgZmls
ZW5hbWUsIGxpbmVucikNCiAgICArDQogICAgKyAgICBkZWYgX2Fzc2lnbmVkX3R3aWNlKHNlbGYs
IHN5bSwgbmV3X3ZhbCwgZmlsZW5hbWUsIGxpbmVucik6DQogICAgKyAgICAgICAgIyBDYWxsZWQg
d2hlbiBhIHN5bWJvbCBpcyBhc3NpZ25lZCBtb3JlIHRoYW4gb25jZSBpbiBhIC5jb25maWcgZmls
ZQ0KICAgICsNCiAgICArICAgICAgICAjIFVzZSBzdHJpbmdzIGZvciBib29sL3RyaXN0YXRlIHVz
ZXIgdmFsdWVzIGluIHRoZSB3YXJuaW5nDQogICAgKyAgICAgICAgaWYgc3ltLm9yaWdfdHlwZSBp
biBfQk9PTF9UUklTVEFURToNCiAgICArICAgICAgICAgICAgdXNlcl92YWwgPSBUUklfVE9fU1RS
W3N5bS51c2VyX3ZhbHVlXQ0KICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIHVz
ZXJfdmFsID0gc3ltLnVzZXJfdmFsdWUNCiAgICArDQogICAgKyAgICAgICAgbXNnID0gJ3t9IHNl
dCBtb3JlIHRoYW4gb25jZS4gT2xkIHZhbHVlICJ7fSIsIG5ldyB2YWx1ZSAie30iLicuZm9ybWF0
KA0KICAgICsgICAgICAgICAgICBfbmFtZV9hbmRfbG9jKHN5bSksIHVzZXJfdmFsLCBuZXdfdmFs
KQ0KICAgICsNCiAgICArICAgICAgICBpZiB1c2VyX3ZhbCA9PSBuZXdfdmFsOg0KICAgICsgICAg
ICAgICAgICBpZiBzZWxmLndhcm5fYXNzaWduX3JlZHVuOg0KICAgICsgICAgICAgICAgICAgICAg
c2VsZi5fd2Fybihtc2csIGZpbGVuYW1lLCBsaW5lbnIpDQogICAgKyAgICAgICAgZWxpZiBzZWxm
Lndhcm5fYXNzaWduX292ZXJyaWRlOg0KICAgICsgICAgICAgICAgICBzZWxmLl93YXJuKG1zZywg
ZmlsZW5hbWUsIGxpbmVucikNCiAgICArDQogICAgKyAgICBkZWYgd3JpdGVfYXV0b2NvbmYoc2Vs
ZiwgZmlsZW5hbWUsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyPSIvKiBHZW5l
cmF0ZWQgYnkgS2NvbmZpZ2xpYiAoaHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmln
bGliKSAqL1xuIik6DQogICAgKyAgICAgICAgciIiIg0KICAgICsgICAgICAgIFdyaXRlcyBvdXQg
c3ltYm9sIHZhbHVlcyBhcyBhIEMgaGVhZGVyIGZpbGUsIG1hdGNoaW5nIHRoZSBmb3JtYXQgdXNl
ZA0KICAgICsgICAgICAgIGJ5IGluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmggaW4gdGhlIGtl
cm5lbC4NCiAgICArDQogICAgKyAgICAgICAgVGhlIG9yZGVyaW5nIG9mIHRoZSAjZGVmaW5lcyBt
YXRjaGVzIHRoZSBvbmUgZ2VuZXJhdGVkIGJ5DQogICAgKyAgICAgICAgd3JpdGVfY29uZmlnKCku
IFRoZSBvcmRlciBpbiB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRzIG9uIHRoZSBoYXNoDQog
ICAgKyAgICAgICAgdGFibGUgaW1wbGVtZW50YXRpb24gYXMgb2Ygd3JpdGluZywgYW5kIHNvIHdv
bid0IG1hdGNoLg0KICAgICsNCiAgICArICAgICAgICBJZiAnZmlsZW5hbWUnIGV4aXN0cyBhbmQg
aXRzIGNvbnRlbnRzIGlzIGlkZW50aWNhbCB0byB3aGF0IHdvdWxkIGdldA0KICAgICsgICAgICAg
IHdyaXR0ZW4gb3V0LCBpdCBpcyBsZWZ0IHVudG91Y2hlZC4gVGhpcyBhdm9pZHMgdXBkYXRpbmcg
ZmlsZSBtZXRhZGF0YQ0KICAgICsgICAgICAgIGxpa2UgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGFu
ZCBwb3NzaWJseSB0cmlnZ2VyaW5nIHJlZHVuZGFudCB3b3JrIGluDQogICAgKyAgICAgICAgYnVp
bGQgdG9vbHMuDQogICAgKw0KICAgICsgICAgICAgIGZpbGVuYW1lOg0KICAgICsgICAgICAgICAg
U2VsZi1leHBsYW5hdG9yeS4NCiAgICArDQogICAgKyAgICAgICAgaGVhZGVyIChkZWZhdWx0OiAi
LyogR2VuZXJhdGVkIGJ5IEtjb25maWdsaWIgKGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIv
S2NvbmZpZ2xpYikgKi9cbiIpOg0KICAgICsgICAgICAgICAgVGV4dCB0aGF0IHdpbGwgYmUgaW5z
ZXJ0ZWQgdmVyYmF0aW0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gWW91DQogICAgKyAg
ICAgICAgICB3b3VsZCB1c3VhbGx5IHdhbnQgaXQgZW5jbG9zZWQgaW4gJy8qICovJyB0byBtYWtl
IGl0IGEgQyBjb21tZW50LA0KICAgICsgICAgICAgICAgYW5kIGluY2x1ZGUgYSBmaW5hbCB0ZXJt
aW5hdGluZyBuZXdsaW5lLg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHNlbGYuX3dy
aXRlX2lmX2NoYW5nZWQoZmlsZW5hbWUsIHNlbGYuX2F1dG9jb25mX2NvbnRlbnRzKGhlYWRlcikp
DQogICAgKw0KICAgICsgICAgZGVmIF9hdXRvY29uZl9jb250ZW50cyhzZWxmLCBoZWFkZXIpOg0K
ICAgICsgICAgICAgICMgd3JpdGVfYXV0b2NvbmYoKSBoZWxwZXIuIFJldHVybnMgdGhlIGNvbnRl
bnRzIHRvIHdyaXRlIGFzIGEgc3RyaW5nLA0KICAgICsgICAgICAgICMgd2l0aCAnaGVhZGVyJyBh
dCB0aGUgYmVnaW5uaW5nLg0KICAgICsNCiAgICArICAgICAgICAjICIiLmpvaW4oKWVkIGxhdGVy
DQogICAgKyAgICAgICAgY2h1bmtzID0gW2hlYWRlcl0NCiAgICArICAgICAgICBhZGQgPSBjaHVu
a3MuYXBwZW5kDQogICAgKw0KICAgICsgICAgICAgIGZvciBzeW0gaW4gc2VsZi51bmlxdWVfZGVm
aW5lZF9zeW1zOg0KICAgICsgICAgICAgICAgICAjIF93cml0ZV90b19jb25mIGlzIGRldGVybWlu
ZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2FsY3VsYXRlZC4gVGhpcw0KICAgICsgICAgICAgICAgICAj
IGlzIGEgaGlkZGVuIGZ1bmN0aW9uIGNhbGwgZHVlIHRvIHByb3BlcnR5IG1hZ2ljLg0KICAgICsg
ICAgICAgICAgICAjDQogICAgKyAgICAgICAgICAgICMgTm90ZTogSW4gY2xpZW50IGNvZGUsIHlv
dSBjYW4gY2hlY2sgaWYgc3ltLmNvbmZpZ19zdHJpbmcgaXMgZW1wdHkNCiAgICArICAgICAgICAg
ICAgIyBpbnN0ZWFkLCB0byBhdm9pZCBhY2Nlc3NpbmcgdGhlIGludGVybmFsIF93cml0ZV90b19j
b25mIHZhcmlhYmxlDQogICAgKyAgICAgICAgICAgICMgKHRob3VnaCBpdCdzIGxpa2VseSB0byBr
ZWVwIHdvcmtpbmcpLg0KICAgICsgICAgICAgICAgICB2YWwgPSBzeW0uc3RyX3ZhbHVlDQogICAg
KyAgICAgICAgICAgIGlmIG5vdCBzeW0uX3dyaXRlX3RvX2NvbmY6DQogICAgKyAgICAgICAgICAg
ICAgICBjb250aW51ZQ0KICAgICsNCiAgICArICAgICAgICAgICAgaWYgc3ltLm9yaWdfdHlwZSBp
biBfQk9PTF9UUklTVEFURToNCiAgICArICAgICAgICAgICAgICAgIGlmIHZhbCA9PSAieSI6DQog
ICAgKyAgICAgICAgICAgICAgICAgICAgYWRkKCIjZGVmaW5lIHt9e30gMVxuIg0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY29uZmlnX3ByZWZpeCwgc3ltLm5hbWUp
KQ0KICAgICsgICAgICAgICAgICAgICAgZWxpZiB2YWwgPT0gIm0iOg0KICAgICsgICAgICAgICAg
ICAgICAgICAgIGFkZCgiI2RlZmluZSB7fXt9X01PRFVMRSAxXG4iDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5jb25maWdfcHJlZml4LCBzeW0ubmFtZSkpDQogICAg
Kw0KICAgICsgICAgICAgICAgICBlbGlmIHN5bS5vcmlnX3R5cGUgaXMgU1RSSU5HOg0KICAgICsg
ICAgICAgICAgICAgICAgYWRkKCcjZGVmaW5lIHt9e30gInt9IlxuJw0KICAgICsgICAgICAgICAg
ICAgICAgICAgIC5mb3JtYXQoc2VsZi5jb25maWdfcHJlZml4LCBzeW0ubmFtZSwgZXNjYXBlKHZh
bCkpKQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxzZTogICMgc3ltLm9yaWdfdHlwZSBpbiBf
SU5UX0hFWDoNCiAgICArICAgICAgICAgICAgICAgIGlmIHN5bS5vcmlnX3R5cGUgaXMgSEVYIGFu
ZCBcDQogICAgKyAgICAgICAgICAgICAgICAgICBub3QgdmFsLnN0YXJ0c3dpdGgoKCIweCIsICIw
WCIpKToNCiAgICArICAgICAgICAgICAgICAgICAgICB2YWwgPSAiMHgiICsgdmFsDQogICAgKw0K
ICAgICsgICAgICAgICAgICAgICAgYWRkKCIjZGVmaW5lIHt9e30ge31cbiINCiAgICArICAgICAg
ICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuY29uZmlnX3ByZWZpeCwgc3ltLm5hbWUsIHZhbCkp
DQogICAgKw0KICAgICsgICAgICAgIHJldHVybiAiIi5qb2luKGNodW5rcykNCiAgICArDQogICAg
KyAgICBkZWYgd3JpdGVfY29uZmlnKHNlbGYsIGZpbGVuYW1lPU5vbmUsDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgIGhlYWRlcj0iIyBHZW5lcmF0ZWQgYnkgS2NvbmZpZ2xpYiAoaHR0cHM6Ly9n
aXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliKVxuIiwNCiAgICArICAgICAgICAgICAgICAg
ICAgICAgc2F2ZV9vbGQ9VHJ1ZSwgdmVyYm9zZT1Ob25lKToNCiAgICArICAgICAgICByIiIiDQog
ICAgKyAgICAgICAgV3JpdGVzIG91dCBzeW1ib2wgdmFsdWVzIGluIHRoZSAuY29uZmlnIGZvcm1h
dC4gVGhlIGZvcm1hdCBtYXRjaGVzIHRoZQ0KICAgICsgICAgICAgIEMgaW1wbGVtZW50YXRpb24s
IGluY2x1ZGluZyBvcmRlcmluZy4NCiAgICArDQogICAgKyAgICAgICAgU3ltYm9scyBhcHBlYXIg
aW4gdGhlIHNhbWUgb3JkZXIgaW4gZ2VuZXJhdGVkIC5jb25maWcgZmlsZXMgYXMgdGhleSBkbw0K
ICAgICsgICAgICAgIGluIHRoZSBLY29uZmlnIGZpbGVzLiBGb3Igc3ltYm9scyBkZWZpbmVkIGlu
IG11bHRpcGxlIGxvY2F0aW9ucywgYQ0KICAgICsgICAgICAgIHNpbmdsZSBhc3NpZ25tZW50IGlz
IHdyaXR0ZW4gb3V0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGxvY2F0aW9uDQogICAgKyAg
ICAgICAgd2hlcmUgdGhlIHN5bWJvbCBpcyBkZWZpbmVkLg0KICAgICsNCiAgICArICAgICAgICBT
ZWUgdGhlICdJbnRybyB0byBzeW1ib2wgdmFsdWVzJyBzZWN0aW9uIGluIHRoZSBtb2R1bGUgZG9j
c3RyaW5nIHRvDQogICAgKyAgICAgICAgdW5kZXJzdGFuZCB3aGljaCBzeW1ib2xzIGdldCB3cml0
dGVuIG91dC4NCiAgICArDQogICAgKyAgICAgICAgSWYgJ2ZpbGVuYW1lJyBleGlzdHMgYW5kIGl0
cyBjb250ZW50cyBpcyBpZGVudGljYWwgdG8gd2hhdCB3b3VsZCBnZXQNCiAgICArICAgICAgICB3
cml0dGVuIG91dCwgaXQgaXMgbGVmdCB1bnRvdWNoZWQuIFRoaXMgYXZvaWRzIHVwZGF0aW5nIGZp
bGUgbWV0YWRhdGENCiAgICArICAgICAgICBsaWtlIHRoZSBtb2RpZmljYXRpb24gdGltZSBhbmQg
cG9zc2libHkgdHJpZ2dlcmluZyByZWR1bmRhbnQgd29yayBpbg0KICAgICsgICAgICAgIGJ1aWxk
IHRvb2xzLg0KICAgICsNCiAgICArICAgICAgICBTZWUgdGhlIEtjb25maWcuX19pbml0X18oKSBk
b2NzdHJpbmcgZm9yIHJhaXNlZCBleGNlcHRpb25zDQogICAgKyAgICAgICAgKE9TRXJyb3IvSU9F
cnJvcikuIEtjb25maWdFcnJvciBpcyBuZXZlciByYWlzZWQgaGVyZS4NCiAgICArDQogICAgKyAg
ICAgICAgZmlsZW5hbWUgKGRlZmF1bHQ6IE5vbmUpOg0KICAgICsgICAgICAgICAgRmlsZW5hbWUg
dG8gc2F2ZSBjb25maWd1cmF0aW9uIHRvIChhIHN0cmluZykuDQogICAgKw0KICAgICsgICAgICAg
ICAgSWYgTm9uZSAodGhlIGRlZmF1bHQpLCB0aGUgZmlsZW5hbWUgaW4gdGhlIGVudmlyb25tZW50
IHZhcmlhYmxlDQogICAgKyAgICAgICAgICBLQ09ORklHX0NPTkZJRyBpcyB1c2VkIGlmIHNldCwg
YW5kICIuY29uZmlnIiBvdGhlcndpc2UuIFNlZQ0KICAgICsgICAgICAgICAgc3RhbmRhcmRfY29u
ZmlnX2ZpbGVuYW1lKCkuDQogICAgKw0KICAgICsgICAgICAgIGhlYWRlciAoZGVmYXVsdDogIiMg
R2VuZXJhdGVkIGJ5IEtjb25maWdsaWIgKGh0dHBzOi8vZ2l0aHViLmNvbS91bGZhbGl6ZXIvS2Nv
bmZpZ2xpYilcbiIpOg0KICAgICsgICAgICAgICAgVGV4dCB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQg
dmVyYmF0aW0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4gWW91DQogICAgKyAgICAgICAg
ICB3b3VsZCB1c3VhbGx5IHdhbnQgZWFjaCBsaW5lIHRvIHN0YXJ0IHdpdGggJyMnIHRvIG1ha2Ug
aXQgYSBjb21tZW50LA0KICAgICsgICAgICAgICAgYW5kIGluY2x1ZGUgYSBmaW5hbCB0ZXJtaW5h
dGluZyBuZXdsaW5lLg0KICAgICsNCiAgICArICAgICAgICBzYXZlX29sZCAoZGVmYXVsdDogVHJ1
ZSk6DQogICAgKyAgICAgICAgICBJZiBUcnVlIGFuZCA8ZmlsZW5hbWU+IGFscmVhZHkgZXhpc3Rz
LCBhIGNvcHkgb2YgaXQgd2lsbCBiZSBzYXZlZCB0bw0KICAgICsgICAgICAgICAgPGZpbGVuYW1l
Pi5vbGQgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGJlZm9yZSB0aGUgbmV3IGNvbmZpZ3VyYXRpb24g
aXMNCiAgICArICAgICAgICAgIHdyaXR0ZW4uDQogICAgKw0KICAgICsgICAgICAgICAgRXJyb3Jz
IGFyZSBzaWxlbnRseSBpZ25vcmVkIGlmIDxmaWxlbmFtZT4ub2xkIGNhbm5vdCBiZSB3cml0dGVu
IChlLmcuDQogICAgKyAgICAgICAgICBkdWUgdG8gYmVpbmcgYSBkaXJlY3RvcnksIG9yIDxmaWxl
bmFtZT4gYmVpbmcgc29tZXRoaW5nIGxpa2UNCiAgICArICAgICAgICAgIC9kZXYvbnVsbCkuDQog
ICAgKw0KICAgICsgICAgICAgIHZlcmJvc2UgKGRlZmF1bHQ6IE5vbmUpOg0KICAgICsgICAgICAg
ICAgTGltaXRlZCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0byBwcmV2ZW50IGNyYXNoZXMuIEEg
d2FybmluZyBpcw0KICAgICsgICAgICAgICAgcHJpbnRlZCBpZiBhbnl0aGluZyBidXQgTm9uZSBp
cyBwYXNzZWQuDQogICAgKw0KICAgICsgICAgICAgICAgUHJpb3IgdG8gS2NvbmZpZ2xpYiAxMi4w
LjAsIHRoaXMgb3B0aW9uIGVuYWJsZWQgcHJpbnRpbmcgb2YgbWVzc2FnZXMNCiAgICArICAgICAg
ICAgIHRvIHN0ZG91dCB3aGVuICdmaWxlbmFtZScgd2FzIE5vbmUuIEEgbWVzc2FnZSBpcyAoYWx3
YXlzKSByZXR1cm5lZA0KICAgICsgICAgICAgICAgbm93IGluc3RlYWQsIHdoaWNoIGlzIG1vcmUg
ZmxleGlibGUuDQogICAgKw0KICAgICsgICAgICAgICAgV2lsbCBwcm9iYWJseSBiZSByZW1vdmVk
IGluIHNvbWUgZnV0dXJlIHZlcnNpb24uDQogICAgKw0KICAgICsgICAgICAgIFJldHVybnMgYSBz
dHJpbmcgd2l0aCBhIG1lc3NhZ2Ugc2F5aW5nIHdoaWNoIGZpbGUgZ290IHNhdmVkLiBUaGlzIGlz
DQogICAgKyAgICAgICAgbWVhbnQgdG8gcmVkdWNlIGJvaWxlcnBsYXRlIGluIHRvb2xzLCB3aGlj
aCBjYW4gZG8gZS5nLg0KICAgICsgICAgICAgIHByaW50KGtjb25mLndyaXRlX2NvbmZpZygpKS4N
CiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBpZiB2ZXJib3NlIGlzIG5vdCBOb25lOg0K
ICAgICsgICAgICAgICAgICBfd2Fybl92ZXJib3NlX2RlcHJlY2F0ZWQoIndyaXRlX2NvbmZpZyIp
DQogICAgKw0KICAgICsgICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6DQogICAgKyAgICAgICAg
ICAgIGZpbGVuYW1lID0gc3RhbmRhcmRfY29uZmlnX2ZpbGVuYW1lKCkNCiAgICArDQogICAgKyAg
ICAgICAgY29udGVudHMgPSBzZWxmLl9jb25maWdfY29udGVudHMoaGVhZGVyKQ0KICAgICsgICAg
ICAgIGlmIHNlbGYuX2NvbnRlbnRzX2VxKGZpbGVuYW1lLCBjb250ZW50cyk6DQogICAgKyAgICAg
ICAgICAgIHJldHVybiAiTm8gY2hhbmdlIHRvICd7fSciLmZvcm1hdChmaWxlbmFtZSkNCiAgICAr
DQogICAgKyAgICAgICAgaWYgc2F2ZV9vbGQ6DQogICAgKyAgICAgICAgICAgIF9zYXZlX29sZChm
aWxlbmFtZSkNCiAgICArDQogICAgKyAgICAgICAgd2l0aCBzZWxmLl9vcGVuKGZpbGVuYW1lLCAi
dyIpIGFzIGY6DQogICAgKyAgICAgICAgICAgIGYud3JpdGUoY29udGVudHMpDQogICAgKw0KICAg
ICsgICAgICAgIHJldHVybiAiQ29uZmlndXJhdGlvbiBzYXZlZCB0byAne30nIi5mb3JtYXQoZmls
ZW5hbWUpDQogICAgKw0KICAgICsgICAgZGVmIF9jb25maWdfY29udGVudHMoc2VsZiwgaGVhZGVy
KToNCiAgICArICAgICAgICAjIHdyaXRlX2NvbmZpZygpIGhlbHBlci4gUmV0dXJucyB0aGUgY29u
dGVudHMgdG8gd3JpdGUgYXMgYSBzdHJpbmcsDQogICAgKyAgICAgICAgIyB3aXRoICdoZWFkZXIn
IGF0IHRoZSBiZWdpbm5pbmcuDQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAgICMgTW9yZSBt
ZW1vcnkgZnJpZW5kbHkgd291bGQgYmUgdG8gJ3lpZWxkJyB0aGUgc3RyaW5ncyBhbmQNCiAgICAr
ICAgICAgICAjICIiLmpvaW4oX2NvbmZpZ19jb250ZW50cygpKSwgYnV0IGl0IHdhcyBhIGJpdCBz
bG93ZXIgb24gbXkgc3lzdGVtLg0KICAgICsNCiAgICArICAgICAgICAjIG5vZGVfaXRlcigpIHdh
cyB1c2VkIGhlcmUgYmVmb3JlIGNvbW1pdCAzYWVhOWY3ICgiQWRkICcjIGVuZCBvZg0KICAgICsg
ICAgICAgICMgPG1lbnU+JyBhZnRlciBtZW51cyBpbiAuY29uZmlnIikuIFRob3NlIGNvbW1lbnRz
IGdldCB0cmlja3kgdG8NCiAgICArICAgICAgICAjIGltcGxlbWVudCB3aXRoIGl0Lg0KICAgICsN
CiAgICArICAgICAgICBmb3Igc3ltIGluIHNlbGYudW5pcXVlX2RlZmluZWRfc3ltczoNCiAgICAr
ICAgICAgICAgICAgc3ltLl92aXNpdGVkID0gRmFsc2UNCiAgICArDQogICAgKyAgICAgICAgIyBE
aWQgd2UganVzdCBwcmludCBhbiAnIyBlbmQgb2YgLi4uJyBjb21tZW50Pw0KICAgICsgICAgICAg
IGFmdGVyX2VuZF9jb21tZW50ID0gRmFsc2UNCiAgICArDQogICAgKyAgICAgICAgIyAiIi5qb2lu
KCllZCBsYXRlcg0KICAgICsgICAgICAgIGNodW5rcyA9IFtoZWFkZXJdDQogICAgKyAgICAgICAg
YWRkID0gY2h1bmtzLmFwcGVuZA0KICAgICsNCiAgICArICAgICAgICBub2RlID0gc2VsZi50b3Bf
bm9kZQ0KICAgICsgICAgICAgIHdoaWxlIDE6DQogICAgKyAgICAgICAgICAgICMgSnVtcCB0byB0
aGUgbmV4dCBub2RlIHdpdGggYW4gaXRlcmF0aXZlIHRyZWUgd2Fsaw0KICAgICsgICAgICAgICAg
ICBpZiBub2RlLmxpc3Q6DQogICAgKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5saXN0DQog
ICAgKyAgICAgICAgICAgIGVsaWYgbm9kZS5uZXh0Og0KICAgICsgICAgICAgICAgICAgICAgbm9k
ZSA9IG5vZGUubmV4dA0KICAgICsgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAg
ICAgd2hpbGUgbm9kZS5wYXJlbnQ6DQogICAgKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5v
ZGUucGFyZW50DQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgICMgQWRkIGEgY29tbWVu
dCB3aGVuIGxlYXZpbmcgdmlzaWJsZSBtZW51cw0KICAgICsgICAgICAgICAgICAgICAgICAgIGlm
IG5vZGUuaXRlbSBpcyBNRU5VIGFuZCBleHByX3ZhbHVlKG5vZGUuZGVwKSBhbmQgXA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdmFsdWUobm9kZS52aXNpYmlsaXR5KSBhbmQgXA0K
ICAgICsgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgaXMgbm90IHNlbGYudG9wX25vZGU6DQog
ICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZCgiIyBlbmQgb2Yge31cbiIuZm9ybWF0KG5v
ZGUucHJvbXB0WzBdKSkNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJfZW5kX2Nv
bW1lbnQgPSBUcnVlDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIG5vZGUubmV4
dDoNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAgICAgICAgICAgICAgZWxzZToN
CiAgICArICAgICAgICAgICAgICAgICAgICAjIE5vIG1vcmUgbm9kZXMNCiAgICArICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gIiIuam9pbihjaHVua3MpDQogICAgKw0KICAgICsgICAgICAgICAg
ICAjIEdlbmVyYXRlIGNvbmZpZ3VyYXRpb24gb3V0cHV0IGZvciB0aGUgbm9kZQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgaXRlbSA9IG5vZGUuaXRlbQ0KICAgICsNCiAgICArICAgICAgICAgICAg
aWYgaXRlbS5fX2NsYXNzX18gaXMgU3ltYm9sOg0KICAgICsgICAgICAgICAgICAgICAgaWYgaXRl
bS5fdmlzaXRlZDoNCiAgICArICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICsgICAg
ICAgICAgICAgICAgaXRlbS5fdmlzaXRlZCA9IFRydWUNCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICBjb25mX3N0cmluZyA9IGl0ZW0uY29uZmlnX3N0cmluZw0KICAgICsgICAgICAgICAgICAg
ICAgaWYgbm90IGNvbmZfc3RyaW5nOg0KICAgICsgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
DQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgaWYgYWZ0ZXJfZW5kX2NvbW1lbnQ6DQogICAg
KyAgICAgICAgICAgICAgICAgICAgIyBBZGQgYSBibGFuayBsaW5lIGJlZm9yZSB0aGUgZmlyc3Qg
c3ltYm9sIHByaW50ZWQgYWZ0ZXIgYW4NCiAgICArICAgICAgICAgICAgICAgICAgICAjICcjIGVu
ZCBvZiAuLi4nIGNvbW1lbnQNCiAgICArICAgICAgICAgICAgICAgICAgICBhZnRlcl9lbmRfY29t
bWVudCA9IEZhbHNlDQogICAgKyAgICAgICAgICAgICAgICAgICAgYWRkKCJcbiIpDQogICAgKyAg
ICAgICAgICAgICAgICBhZGQoY29uZl9zdHJpbmcpDQogICAgKw0KICAgICsgICAgICAgICAgICBl
bGlmIGV4cHJfdmFsdWUobm9kZS5kZXApIGFuZCBcDQogICAgKyAgICAgICAgICAgICAgICAgKChp
dGVtIGlzIE1FTlUgYW5kIGV4cHJfdmFsdWUobm9kZS52aXNpYmlsaXR5KSkgb3INCiAgICArICAg
ICAgICAgICAgICAgICAgaXRlbSBpcyBDT01NRU5UKToNCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICBhZGQoIlxuI1xuIyB7fVxuI1xuIi5mb3JtYXQobm9kZS5wcm9tcHRbMF0pKQ0KICAgICsg
ICAgICAgICAgICAgICAgYWZ0ZXJfZW5kX2NvbW1lbnQgPSBGYWxzZQ0KICAgICsNCiAgICArICAg
IGRlZiB3cml0ZV9taW5fY29uZmlnKHNlbGYsIGZpbGVuYW1lLA0KICAgICsgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVhZGVyPSIjIEdlbmVyYXRlZCBieSBLY29uZmlnbGliIChodHRwczovL2dp
dGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIpXG4iKToNCiAgICArICAgICAgICAiIiINCiAg
ICArICAgICAgICBXcml0ZXMgb3V0IGEgIm1pbmltYWwiIGNvbmZpZ3VyYXRpb24gZmlsZSwgb21p
dHRpbmcgc3ltYm9scyB3aG9zZSB2YWx1ZQ0KICAgICsgICAgICAgIG1hdGNoZXMgdGhlaXIgZGVm
YXVsdCB2YWx1ZS4gVGhlIGZvcm1hdCBtYXRjaGVzIHRoZSBvbmUgcHJvZHVjZWQgYnkNCiAgICAr
ICAgICAgICAnbWFrZSBzYXZlZGVmY29uZmlnJy4NCiAgICArDQogICAgKyAgICAgICAgVGhlIHJl
c3VsdGluZyBjb25maWd1cmF0aW9uIGZpbGUgaXMgaW5jb21wbGV0ZSwgYnV0IGEgY29tcGxldGUN
CiAgICArICAgICAgICBjb25maWd1cmF0aW9uIGNhbiBiZSBkZXJpdmVkIGZyb20gaXQgYnkgbG9h
ZGluZyBpdC4gTWluaW1hbA0KICAgICsgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMgY2FuIHNl
cnZlIGFzIGEgbW9yZSBtYW5hZ2VhYmxlIGNvbmZpZ3VyYXRpb24gZm9ybWF0DQogICAgKyAgICAg
ICAgY29tcGFyZWQgdG8gYSAiZnVsbCIgLmNvbmZpZyBmaWxlLCBlc3BlY2lhbGx5IHdoZW4gY29u
ZmlndXJhdGlvbnMgZmlsZXMNCiAgICArICAgICAgICBhcmUgbWVyZ2VkIG9yIGVkaXRlZCBieSBo
YW5kLg0KICAgICsNCiAgICArICAgICAgICBTZWUgdGhlIEtjb25maWcuX19pbml0X18oKSBkb2Nz
dHJpbmcgZm9yIHJhaXNlZCBleGNlcHRpb25zDQogICAgKyAgICAgICAgKE9TRXJyb3IvSU9FcnJv
cikuIEtjb25maWdFcnJvciBpcyBuZXZlciByYWlzZWQgaGVyZS4NCiAgICArDQogICAgKyAgICAg
ICAgZmlsZW5hbWU6DQogICAgKyAgICAgICAgICBTZWxmLWV4cGxhbmF0b3J5Lg0KICAgICsNCiAg
ICArICAgICAgICBoZWFkZXIgKGRlZmF1bHQ6ICIjIEdlbmVyYXRlZCBieSBLY29uZmlnbGliICho
dHRwczovL2dpdGh1Yi5jb20vdWxmYWxpemVyL0tjb25maWdsaWIpXG4iKToNCiAgICArICAgICAg
ICAgIFRleHQgdGhhdCB3aWxsIGJlIGluc2VydGVkIHZlcmJhdGltIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlIGZpbGUuIFlvdQ0KICAgICsgICAgICAgICAgd291bGQgdXN1YWxseSB3YW50IGVhY2gg
bGluZSB0byBzdGFydCB3aXRoICcjJyB0byBtYWtlIGl0IGEgY29tbWVudCwNCiAgICArICAgICAg
ICAgIGFuZCBpbmNsdWRlIGEgZmluYWwgdGVybWluYXRpbmcgbmV3bGluZS4NCiAgICArDQogICAg
KyAgICAgICAgUmV0dXJucyBhIHN0cmluZyB3aXRoIGEgbWVzc2FnZSBzYXlpbmcgd2hpY2ggZmls
ZSBnb3Qgc2F2ZWQuIFRoaXMgaXMNCiAgICArICAgICAgICBtZWFudCB0byByZWR1Y2UgYm9pbGVy
cGxhdGUgaW4gdG9vbHMsIHdoaWNoIGNhbiBkbyBlLmcuDQogICAgKyAgICAgICAgcHJpbnQoa2Nv
bmYud3JpdGVfbWluX2NvbmZpZygpKS4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBj
b250ZW50cyA9IHNlbGYuX21pbl9jb25maWdfY29udGVudHMoaGVhZGVyKQ0KICAgICsgICAgICAg
IGlmIHNlbGYuX2NvbnRlbnRzX2VxKGZpbGVuYW1lLCBjb250ZW50cyk6DQogICAgKyAgICAgICAg
ICAgIHJldHVybiAiTm8gY2hhbmdlIHRvICd7fSciLmZvcm1hdChmaWxlbmFtZSkNCiAgICArDQog
ICAgKyAgICAgICAgd2l0aCBzZWxmLl9vcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6DQogICAgKyAg
ICAgICAgICAgIGYud3JpdGUoY29udGVudHMpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiAi
TWluaW1hbCBjb25maWd1cmF0aW9uIHNhdmVkIHRvICd7fSciLmZvcm1hdChmaWxlbmFtZSkNCiAg
ICArDQogICAgKyAgICBkZWYgX21pbl9jb25maWdfY29udGVudHMoc2VsZiwgaGVhZGVyKToNCiAg
ICArICAgICAgICAjIHdyaXRlX21pbl9jb25maWcoKSBoZWxwZXIuIFJldHVybnMgdGhlIGNvbnRl
bnRzIHRvIHdyaXRlIGFzIGEgc3RyaW5nLA0KICAgICsgICAgICAgICMgd2l0aCAnaGVhZGVyJyBh
dCB0aGUgYmVnaW5uaW5nLg0KICAgICsNCiAgICArICAgICAgICBjaHVua3MgPSBbaGVhZGVyXQ0K
ICAgICsgICAgICAgIGFkZCA9IGNodW5rcy5hcHBlbmQNCiAgICArDQogICAgKyAgICAgICAgZm9y
IHN5bSBpbiBzZWxmLnVuaXF1ZV9kZWZpbmVkX3N5bXM6DQogICAgKyAgICAgICAgICAgICMgU2tp
cCBzeW1ib2xzIHRoYXQgY2Fubm90IGJlIGNoYW5nZWQuIE9ubHkgY2hlY2sNCiAgICArICAgICAg
ICAgICAgIyBub24tY2hvaWNlIHN5bWJvbHMsIGFzIHNlbGVjdHMgZG9uJ3QgYWZmZWN0IGNob2lj
ZQ0KICAgICsgICAgICAgICAgICAjIHN5bWJvbHMuDQogICAgKyAgICAgICAgICAgIGlmIG5vdCBz
eW0uY2hvaWNlIGFuZCBcDQogICAgKyAgICAgICAgICAgICAgIHN5bS52aXNpYmlsaXR5IDw9IGV4
cHJfdmFsdWUoc3ltLnJldl9kZXApOg0KICAgICsgICAgICAgICAgICAgICAgY29udGludWUNCiAg
ICArDQogICAgKyAgICAgICAgICAgICMgU2tpcCBzeW1ib2xzIHdob3NlIHZhbHVlIG1hdGNoZXMg
dGhlaXIgZGVmYXVsdA0KICAgICsgICAgICAgICAgICBpZiBzeW0uc3RyX3ZhbHVlID09IHN5bS5f
c3RyX2RlZmF1bHQoKToNCiAgICArICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgKw0KICAg
ICsgICAgICAgICAgICAjIFNraXAgc3ltYm9scyB0aGF0IHdvdWxkIGJlIHNlbGVjdGVkIGJ5IGRl
ZmF1bHQgaW4gYQ0KICAgICsgICAgICAgICAgICAjIGNob2ljZSwgdW5sZXNzIHRoZSBjaG9pY2Ug
aXMgb3B0aW9uYWwgb3IgdGhlIHN5bWJvbCB0eXBlDQogICAgKyAgICAgICAgICAgICMgaXNuJ3Qg
Ym9vbCAoaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gc2V0IHRoZSBjaG9pY2UgbW9kZQ0KICAgICsg
ICAgICAgICAgICAjIHRvIG4gb3IgdGhlIHN5bWJvbCB0byBtIGluIHRob3NlIGNhc2VzKS4NCiAg
ICArICAgICAgICAgICAgaWYgc3ltLmNob2ljZSBhbmQgXA0KICAgICsgICAgICAgICAgICAgICBu
b3Qgc3ltLmNob2ljZS5pc19vcHRpb25hbCBhbmQgXA0KICAgICsgICAgICAgICAgICAgICBzeW0u
Y2hvaWNlLl9zZWxlY3Rpb25fZnJvbV9kZWZhdWx0cygpIGlzIHN5bSBhbmQgXA0KICAgICsgICAg
ICAgICAgICAgICBzeW0ub3JpZ190eXBlIGlzIEJPT0wgYW5kIFwNCiAgICArICAgICAgICAgICAg
ICAgc3ltLnRyaV92YWx1ZSA9PSAyOg0KICAgICsgICAgICAgICAgICAgICAgY29udGludWUNCiAg
ICArDQogICAgKyAgICAgICAgICAgIGFkZChzeW0uY29uZmlnX3N0cmluZykNCiAgICArDQogICAg
KyAgICAgICAgcmV0dXJuICIiLmpvaW4oY2h1bmtzKQ0KICAgICsNCiAgICArICAgIGRlZiBzeW5j
X2RlcHMoc2VsZiwgcGF0aCk6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgQ3JlYXRl
cyBvciB1cGRhdGVzIGEgZGlyZWN0b3J5IHN0cnVjdHVyZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGF2
b2lkDQogICAgKyAgICAgICAgZG9pbmcgYSBmdWxsIHJlYnVpbGQgd2hlbmV2ZXIgdGhlIGNvbmZp
Z3VyYXRpb24gaXMgY2hhbmdlZCwgbWlycm9yaW5nDQogICAgKyAgICAgICAgaW5jbHVkZS9jb25m
aWcvIGluIHRoZSBrZXJuZWwuDQogICAgKw0KICAgICsgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMg
aW50ZW5kZWQgdG8gYmUgY2FsbGVkIGR1cmluZyBlYWNoIGJ1aWxkLCBiZWZvcmUNCiAgICArICAg
ICAgICBjb21waWxpbmcgc291cmNlIGZpbGVzIHRoYXQgZGVwZW5kIG9uIGNvbmZpZ3VyYXRpb24g
c3ltYm9scy4NCiAgICArDQogICAgKyAgICAgICAgU2VlIHRoZSBLY29uZmlnLl9faW5pdF9fKCkg
ZG9jc3RyaW5nIGZvciByYWlzZWQgZXhjZXB0aW9ucw0KICAgICsgICAgICAgIChPU0Vycm9yL0lP
RXJyb3IpLiBLY29uZmlnRXJyb3IgaXMgbmV2ZXIgcmFpc2VkIGhlcmUuDQogICAgKw0KICAgICsg
ICAgICAgIHBhdGg6DQogICAgKyAgICAgICAgICBQYXRoIHRvIGRpcmVjdG9yeQ0KICAgICsNCiAg
ICArICAgICAgICBzeW5jX2RlcHMocGF0aCkgZG9lcyB0aGUgZm9sbG93aW5nOg0KICAgICsNCiAg
ICArICAgICAgICAgIDEuIElmIHRoZSBkaXJlY3RvcnkgPHBhdGg+IGRvZXMgbm90IGV4aXN0LCBp
dCBpcyBjcmVhdGVkLg0KICAgICsNCiAgICArICAgICAgICAgIDIuIElmIDxwYXRoPi9hdXRvLmNv
bmYgZXhpc3RzLCBvbGQgc3ltYm9sIHZhbHVlcyBhcmUgbG9hZGVkIGZyb20gaXQsDQogICAgKyAg
ICAgICAgICAgICB3aGljaCBhcmUgdGhlbiBjb21wYXJlZCBhZ2FpbnN0IHRoZSBjdXJyZW50IHN5
bWJvbCB2YWx1ZXMuIElmIGENCiAgICArICAgICAgICAgICAgIHN5bWJvbCBoYXMgY2hhbmdlZCB2
YWx1ZSAod291bGQgZ2VuZXJhdGUgZGlmZmVyZW50IG91dHB1dCBpbg0KICAgICsgICAgICAgICAg
ICAgYXV0b2NvbmYuaCBjb21wYXJlZCB0byBiZWZvcmUpLCB0aGUgY2hhbmdlIGlzIHNpZ25hbGVk
IGJ5DQogICAgKyAgICAgICAgICAgICB0b3VjaCdpbmcgYSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIHN5bWJvbC4NCiAgICArDQogICAgKyAgICAgICAgICAgICBUaGUgZmlyc3QgdGltZSBzeW5j
X2RlcHMoKSBpcyBydW4gb24gYSBkaXJlY3RvcnksIDxwYXRoPi9hdXRvLmNvbmYNCiAgICArICAg
ICAgICAgICAgIHdvbid0IGV4aXN0LCBhbmQgbm8gb2xkIHN5bWJvbCB2YWx1ZXMgd2lsbCBiZSBh
dmFpbGFibGUuIFRoaXMNCiAgICArICAgICAgICAgICAgIGxvZ2ljYWxseSBoYXMgdGhlIHNhbWUg
ZWZmZWN0IGFzIHVwZGF0aW5nIHRoZSBlbnRpcmUNCiAgICArICAgICAgICAgICAgIGNvbmZpZ3Vy
YXRpb24uDQogICAgKw0KICAgICsgICAgICAgICAgICAgVGhlIHBhdGggdG8gYSBzeW1ib2wncyBm
aWxlIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgc3ltYm9sJ3MgbmFtZQ0KICAgICsgICAgICAgICAg
ICAgYnkgcmVwbGFjaW5nIGFsbCAnXycgd2l0aCAnLycgYW5kIGFwcGVuZGluZyAnLmgnLiBGb3Ig
ZXhhbXBsZSwgdGhlDQogICAgKyAgICAgICAgICAgICBzeW1ib2wgRk9PX0JBUl9CQVogZ2V0cyB0
aGUgZmlsZSA8cGF0aD4vZm9vL2Jhci9iYXouaCwgYW5kIEZPTw0KICAgICsgICAgICAgICAgICAg
Z2V0cyB0aGUgZmlsZSA8cGF0aD4vZm9vLmguDQogICAgKw0KICAgICsgICAgICAgICAgICAgVGhp
cyBzY2hlbWUgbWF0Y2hlcyB0aGUgQyB0b29scy4gVGhlIHBvaW50IGlzIHRvIGF2b2lkIGhhdmlu
ZyBhDQogICAgKyAgICAgICAgICAgICBzaW5nbGUgZGlyZWN0b3J5IHdpdGggYSBodWdlIG51bWJl
ciBvZiBmaWxlcywgd2hpY2ggdGhlIHVuZGVybHlpbmcNCiAgICArICAgICAgICAgICAgIGZpbGVz
eXN0ZW0gbWlnaHQgbm90IGhhbmRsZSB3ZWxsLg0KICAgICsNCiAgICArICAgICAgICAgIDMuIEEg
bmV3IGF1dG8uY29uZiB3aXRoIHRoZSBjdXJyZW50IHN5bWJvbCB2YWx1ZXMgaXMgd3JpdHRlbiwg
dG8ga2VlcA0KICAgICsgICAgICAgICAgICAgdHJhY2sgb2YgdGhlbSBmb3IgdGhlIG5leHQgYnVp
bGQuDQogICAgKw0KICAgICsgICAgICAgICAgICAgSWYgYXV0by5jb25mIGV4aXN0cyBhbmQgaXRz
IGNvbnRlbnRzIGlzIGlkZW50aWNhbCB0byB3aGF0IHdvdWxkDQogICAgKyAgICAgICAgICAgICBn
ZXQgd3JpdHRlbiBvdXQsIGl0IGlzIGxlZnQgdW50b3VjaGVkLiBUaGlzIGF2b2lkcyB1cGRhdGlu
ZyBmaWxlDQogICAgKyAgICAgICAgICAgICBtZXRhZGF0YSBsaWtlIHRoZSBtb2RpZmljYXRpb24g
dGltZSBhbmQgcG9zc2libHkgdHJpZ2dlcmluZw0KICAgICsgICAgICAgICAgICAgcmVkdW5kYW50
IHdvcmsgaW4gYnVpbGQgdG9vbHMuDQogICAgKw0KICAgICsNCiAgICArICAgICAgICBUaGUgbGFz
dCBwaWVjZSBvZiB0aGUgcHV6emxlIGlzIGtub3dpbmcgd2hhdCBzeW1ib2xzIGVhY2ggc291cmNl
IGZpbGUNCiAgICArICAgICAgICBkZXBlbmRzIG9uLiBLbm93aW5nIHRoYXQsIGRlcGVuZGVuY2ll
cyBjYW4gYmUgYWRkZWQgZnJvbSBzb3VyY2UgZmlsZXMNCiAgICArICAgICAgICB0byB0aGUgZmls
ZXMgY29ycmVzcG9uZGluZyB0byB0aGUgc3ltYm9scyB0aGV5IGRlcGVuZHMgb24uIFRoZSBzb3Vy
Y2UNCiAgICArICAgICAgICBmaWxlIHdpbGwgdGhlbiBnZXQgcmVjb21waWxlZCAob25seSkgd2hl
biB0aGUgc3ltYm9sIHZhbHVlIGNoYW5nZXMNCiAgICArICAgICAgICAocHJvdmlkZWQgc3luY19k
ZXBzKCkgaXMgcnVuIGZpcnN0IGR1cmluZyBlYWNoIGJ1aWxkKS4NCiAgICArDQogICAgKyAgICAg
ICAgVGhlIHRvb2wgaW4gdGhlIGtlcm5lbCB0aGF0IGV4dHJhY3RzIHN5bWJvbCBkZXBlbmRlbmNp
ZXMgZnJvbSBzb3VyY2UNCiAgICArICAgICAgICBmaWxlcyBpcyBzY3JpcHRzL2Jhc2ljL2ZpeGRl
cC5jLiBNaXNzaW5nIHN5bWJvbCBmaWxlcyBhbHNvIGNvcnJlc3BvbmQNCiAgICArICAgICAgICB0
byAibm90IGNoYW5nZWQiLCB3aGljaCBmaXhkZXAgZGVhbHMgd2l0aCBieSB1c2luZyB0aGUgJCh3
aWxkY2FyZCkgTWFrZQ0KICAgICsgICAgICAgIGZ1bmN0aW9uIHdoZW4gYWRkaW5nIHN5bWJvbCBw
cmVyZXF1aXNpdGVzIHRvIHNvdXJjZSBmaWxlcy4NCiAgICArDQogICAgKyAgICAgICAgSW4gY2Fz
ZSB5b3UgbmVlZCBhIGRpZmZlcmVudCBzY2hlbWUgZm9yIHlvdXIgcHJvamVjdCwgdGhlIHN5bmNf
ZGVwcygpDQogICAgKyAgICAgICAgaW1wbGVtZW50YXRpb24gY2FuIGJlIHVzZWQgYXMgYSB0ZW1w
bGF0ZS4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBpZiBub3QgZXhpc3RzKHBhdGgp
Og0KICAgICsgICAgICAgICAgICBvcy5ta2RpcihwYXRoLCAwbzc1NSkNCiAgICArDQogICAgKyAg
ICAgICAgIyBMb2FkIG9sZCB2YWx1ZXMgZnJvbSBhdXRvLmNvbmYsIGlmIGFueQ0KICAgICsgICAg
ICAgIHNlbGYuX2xvYWRfb2xkX3ZhbHMocGF0aCkNCiAgICArDQogICAgKyAgICAgICAgZm9yIHN5
bSBpbiBzZWxmLnVuaXF1ZV9kZWZpbmVkX3N5bXM6DQogICAgKyAgICAgICAgICAgICMgX3dyaXRl
X3RvX2NvbmYgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSB2YWx1ZSBpcyBjYWxjdWxhdGVkLiBUaGlz
DQogICAgKyAgICAgICAgICAgICMgaXMgYSBoaWRkZW4gZnVuY3Rpb24gY2FsbCBkdWUgdG8gcHJv
cGVydHkgbWFnaWMuDQogICAgKyAgICAgICAgICAgICMNCiAgICArICAgICAgICAgICAgIyBOb3Rl
OiBJbiBjbGllbnQgY29kZSwgeW91IGNhbiBjaGVjayBpZiBzeW0uY29uZmlnX3N0cmluZyBpcyBl
bXB0eQ0KICAgICsgICAgICAgICAgICAjIGluc3RlYWQsIHRvIGF2b2lkIGFjY2Vzc2luZyB0aGUg
aW50ZXJuYWwgX3dyaXRlX3RvX2NvbmYgdmFyaWFibGUNCiAgICArICAgICAgICAgICAgIyAodGhv
dWdoIGl0J3MgbGlrZWx5IHRvIGtlZXAgd29ya2luZykuDQogICAgKyAgICAgICAgICAgIHZhbCA9
IHN5bS5zdHJfdmFsdWUNCiAgICArDQogICAgKyAgICAgICAgICAgICMgbiB0cmlzdGF0ZSB2YWx1
ZXMgZG8gbm90IGdldCB3cml0dGVuIHRvIGF1dG8uY29uZiBhbmQgYXV0b2NvbmYuaCwNCiAgICAr
ICAgICAgICAgICAgIyBtYWtpbmcgYSBtaXNzaW5nIHN5bWJvbCBsb2dpY2FsbHkgZXF1aXZhbGVu
dCB0byBuDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBzeW0uX3dyaXRlX3RvX2NvbmY6DQog
ICAgKyAgICAgICAgICAgICAgICBpZiBzeW0uX29sZF92YWwgaXMgTm9uZSBhbmQgXA0KICAgICsg
ICAgICAgICAgICAgICAgICAgc3ltLm9yaWdfdHlwZSBpbiBfQk9PTF9UUklTVEFURSBhbmQgXA0K
ICAgICsgICAgICAgICAgICAgICAgICAgdmFsID09ICJuIjoNCiAgICArICAgICAgICAgICAgICAg
ICAgICAjIE5vIG9sZCB2YWx1ZSAodGhlIHN5bWJvbCB3YXMgbWlzc2luZyBvciBuKSwgbmV3IHZh
bHVlIG4uDQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBObyBjaGFuZ2UuDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBpZiB2
YWwgPT0gc3ltLl9vbGRfdmFsOg0KICAgICsgICAgICAgICAgICAgICAgICAgICMgTmV3IHZhbHVl
IG1hdGNoZXMgb2xkLiBObyBjaGFuZ2UuDQogICAgKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWUNCiAgICArDQogICAgKyAgICAgICAgICAgIGVsaWYgc3ltLl9vbGRfdmFsIGlzIE5vbmU6DQog
ICAgKyAgICAgICAgICAgICAgICAjIFRoZSBzeW1ib2wgd291bGRuJ3QgYXBwZWFyIGluIGF1dG9j
b25mLmggKGJlY2F1c2UNCiAgICArICAgICAgICAgICAgICAgICMgX3dyaXRlX3RvX2NvbmYgaXMg
ZmFsc2UpLCBhbmQgaXQgd291bGRuJ3QgaGF2ZSBhcHBlYXJlZCBpbg0KICAgICsgICAgICAgICAg
ICAgICAgIyBhdXRvY29uZi5oIHByZXZpb3VzbHkgZWl0aGVyIChiZWNhdXNlIGl0IGRpZG4ndCBh
cHBlYXIgaW4NCiAgICArICAgICAgICAgICAgICAgICMgYXV0by5jb25mKS4gTm8gY2hhbmdlLg0K
ICAgICsgICAgICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgICAgICMg
J3N5bScgaGFzIGEgbmV3IHZhbHVlLiBGbGFnIGl0Lg0KICAgICsgICAgICAgICAgICBfdG91Y2hf
ZGVwX2ZpbGUocGF0aCwgc3ltLm5hbWUpDQogICAgKw0KICAgICsgICAgICAgICMgUmVtZW1iZXIg
dGhlIGN1cnJlbnQgdmFsdWVzIGFzIHRoZSAibmV3IG9sZCIgdmFsdWVzLg0KICAgICsgICAgICAg
ICMNCiAgICArICAgICAgICAjIFRoaXMgY2FsbCBjb3VsZCBnbyBhbnl3aGVyZSBhZnRlciB0aGUg
Y2FsbCB0byBfbG9hZF9vbGRfdmFscygpLCBidXQNCiAgICArICAgICAgICAjIHB1dHRpbmcgaXQg
bGFzdCBtZWFucyBfc3luY19kZXBzKCkgY2FuIGJlIHNhZmVseSByZXJ1biBpZiBpdCBmYWlscw0K
ICAgICsgICAgICAgICMgYmVmb3JlIHRoaXMgcG9pbnQuDQogICAgKyAgICAgICAgc2VsZi5fd3Jp
dGVfb2xkX3ZhbHMocGF0aCkNCiAgICArDQogICAgKyAgICBkZWYgX2xvYWRfb2xkX3ZhbHMoc2Vs
ZiwgcGF0aCk6DQogICAgKyAgICAgICAgIyBMb2FkcyBvbGQgc3ltYm9sIHZhbHVlcyBmcm9tIGF1
dG8uY29uZiBpbnRvIGEgZGVkaWNhdGVkDQogICAgKyAgICAgICAgIyBTeW1ib2wuX29sZF92YWwg
ZmllbGQuIE1pcnJvcnMgbG9hZF9jb25maWcoKS4NCiAgICArICAgICAgICAjDQogICAgKyAgICAg
ICAgIyBUaGUgZXh0cmEgZmllbGQgY291bGQgYmUgYXZvaWRlZCB3aXRoIHNvbWUgdHJpY2tlcnkg
aW52b2x2aW5nIGR1bXBpbmcNCiAgICArICAgICAgICAjIHN5bWJvbCB2YWx1ZXMgYW5kIHJlc3Rv
cmluZyB0aGVtIGxhdGVyLCBidXQgdGhpcyBpcyBzaW1wbGVyIGFuZA0KICAgICsgICAgICAgICMg
ZmFzdGVyLiBUaGUgQyB0b29scyBhbHNvIHVzZSBhIGRlZGljYXRlZCBmaWVsZCBmb3IgdGhpcyBw
dXJwb3NlLg0KICAgICsNCiAgICArICAgICAgICBmb3Igc3ltIGluIHNlbGYudW5pcXVlX2RlZmlu
ZWRfc3ltczoNCiAgICArICAgICAgICAgICAgc3ltLl9vbGRfdmFsID0gTm9uZQ0KICAgICsNCiAg
ICArICAgICAgICB0cnk6DQogICAgKyAgICAgICAgICAgIGF1dG9fY29uZiA9IHNlbGYuX29wZW4o
am9pbihwYXRoLCAiYXV0by5jb25mIiksICJyIikNCiAgICArICAgICAgICBleGNlcHQgRW52aXJv
bm1lbnRFcnJvciBhcyBlOg0KICAgICsgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVO
T0VOVDoNCiAgICArICAgICAgICAgICAgICAgICMgTm8gb2xkIHZhbHVlcw0KICAgICsgICAgICAg
ICAgICAgICAgcmV0dXJuDQogICAgKyAgICAgICAgICAgIHJhaXNlDQogICAgKw0KICAgICsgICAg
ICAgIHdpdGggYXV0b19jb25mIGFzIGY6DQogICAgKyAgICAgICAgICAgIGZvciBsaW5lIGluIGY6
DQogICAgKyAgICAgICAgICAgICAgICBtYXRjaCA9IHNlbGYuX3NldF9tYXRjaChsaW5lKQ0KICAg
ICsgICAgICAgICAgICAgICAgaWYgbm90IG1hdGNoOg0KICAgICsgICAgICAgICAgICAgICAgICAg
ICMgV2Ugb25seSBleHBlY3QgQ09ORklHX0ZPTz0uLi4gKGFuZCBwb3NzaWJseSBhIGhlYWRlcg0K
ICAgICsgICAgICAgICAgICAgICAgICAgICMgY29tbWVudCkgaW4gYXV0by5jb25mDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBu
YW1lLCB2YWwgPSBtYXRjaC5ncm91cHMoKQ0KICAgICsgICAgICAgICAgICAgICAgaWYgbmFtZSBp
biBzZWxmLnN5bXM6DQogICAgKyAgICAgICAgICAgICAgICAgICAgc3ltID0gc2VsZi5zeW1zW25h
bWVdDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIHN5bS5vcmlnX3R5cGUgaXMg
U1RSSU5HOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IF9jb25mX3N0cmlu
Z19tYXRjaCh2YWwpDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBtYXRjaDoN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbCA9IHVuZXNjYXBlKG1hdGNoLmdyb3VwKDEpKQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgICAgICAgICBzZWxmLnN5bXNbbmFtZV0uX29sZF92YWwgPSB2YWwNCiAg
ICArICAgICAgICAgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBGbGFn
IHRoYXQgdGhlIHN5bWJvbCBubyBsb25nZXIgZXhpc3RzLCBpbg0KICAgICsgICAgICAgICAgICAg
ICAgICAgICMgY2FzZSBzb21ldGhpbmcgc3RpbGwgZGVwZW5kcyBvbiBpdA0KICAgICsgICAgICAg
ICAgICAgICAgICAgIF90b3VjaF9kZXBfZmlsZShwYXRoLCBuYW1lKQ0KICAgICsNCiAgICArICAg
IGRlZiBfd3JpdGVfb2xkX3ZhbHMoc2VsZiwgcGF0aCk6DQogICAgKyAgICAgICAgIyBIZWxwZXIg
Zm9yIHdyaXRpbmcgYXV0by5jb25mLiBCYXNpY2FsbHkganVzdCBhIHNpbXBsaWZpZWQNCiAgICAr
ICAgICAgICAjIHdyaXRlX2NvbmZpZygpIHRoYXQgZG9lc24ndCB3cml0ZSBhbnkgY29tbWVudHMg
KGluY2x1ZGluZw0KICAgICsgICAgICAgICMgJyMgQ09ORklHX0ZPTyBpcyBub3Qgc2V0JyBjb21t
ZW50cykuIFRoZSBmb3JtYXQgbWF0Y2hlcyB0aGUgQw0KICAgICsgICAgICAgICMgaW1wbGVtZW50
YXRpb24sIHRob3VnaCB0aGUgb3JkZXJpbmcgaXMgYXJiaXRyYXJ5IHRoZXJlIChkZXBlbmRzIG9u
DQogICAgKyAgICAgICAgIyB0aGUgaGFzaCB0YWJsZSBpbXBsZW1lbnRhdGlvbikuDQogICAgKyAg
ICAgICAgIw0KICAgICsgICAgICAgICMgQSBzZXBhcmF0ZSBoZWxwZXIgZnVuY3Rpb24gaXMgbmVh
dGVyIHRoYW4gY29tcGxpY2F0aW5nIHdyaXRlX2NvbmZpZygpDQogICAgKyAgICAgICAgIyBieSBw
YXNzaW5nIGEgZmxhZyB0byBpdCwgcGx1cyB3ZSBvbmx5IG5lZWQgdG8gbG9vayBhdCBzeW1ib2xz
IGhlcmUuDQogICAgKw0KICAgICsgICAgICAgIHNlbGYuX3dyaXRlX2lmX2NoYW5nZWQoDQogICAg
KyAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCAiYXV0by5jb25mIiksDQogICAgKyAgICAg
ICAgICAgIHNlbGYuX29sZF92YWxzX2NvbnRlbnRzKCkpDQogICAgKw0KICAgICsgICAgZGVmIF9v
bGRfdmFsc19jb250ZW50cyhzZWxmKToNCiAgICArICAgICAgICAjIF93cml0ZV9vbGRfdmFscygp
IGhlbHBlci4gUmV0dXJucyB0aGUgY29udGVudHMgdG8gd3JpdGUgYXMgYSBzdHJpbmcuDQogICAg
Kw0KICAgICsgICAgICAgICMgVGVtcG9yYXJ5IGxpc3QgaW5zdGVhZCBvZiBnZW5lcmF0b3IgbWFr
ZXMgdGhpcyBhIGJpdCBmYXN0ZXINCiAgICArICAgICAgICByZXR1cm4gIiIuam9pbihbDQogICAg
KyAgICAgICAgICAgIHN5bS5jb25maWdfc3RyaW5nIGZvciBzeW0gaW4gc2VsZi51bmlxdWVfZGVm
aW5lZF9zeW1zDQogICAgKyAgICAgICAgICAgICAgICBpZiBub3QgKHN5bS5vcmlnX3R5cGUgaW4g
X0JPT0xfVFJJU1RBVEUgYW5kIG5vdCBzeW0udHJpX3ZhbHVlKQ0KICAgICsgICAgICAgIF0pDQog
ICAgKw0KICAgICsgICAgZGVmIG5vZGVfaXRlcihzZWxmLCB1bmlxdWVfc3ltcz1GYWxzZSk6DQog
ICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgUmV0dXJucyBhIGdlbmVyYXRvciBmb3IgaXRl
cmF0aW5nIHRocm91Z2ggYWxsIE1lbnVOb2RlJ3MgaW4gdGhlIEtjb25maWcNCiAgICArICAgICAg
ICB0cmVlLiBUaGUgaXRlcmF0aW9uIGlzIGRvbmUgaW4gS2NvbmZpZyBkZWZpbml0aW9uIG9yZGVy
IChlYWNoIG5vZGUgaXMNCiAgICArICAgICAgICB2aXNpdGVkIGJlZm9yZSBpdHMgY2hpbGRyZW4s
IGFuZCB0aGUgY2hpbGRyZW4gb2YgYSBub2RlIGFyZSB2aXNpdGVkDQogICAgKyAgICAgICAgYmVm
b3JlIHRoZSBuZXh0IG5vZGUpLg0KICAgICsNCiAgICArICAgICAgICBUaGUgS2NvbmZpZy50b3Bf
bm9kZSBtZW51IG5vZGUgaXMgc2tpcHBlZC4gSXQgY29udGFpbnMgYW4gaW1wbGljaXQgbWVudQ0K
ICAgICsgICAgICAgIHRoYXQgaG9sZHMgdGhlIHRvcC1sZXZlbCBpdGVtcy4NCiAgICArDQogICAg
KyAgICAgICAgQXMgYW4gZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgcHJvZHVjZSBh
IGxpc3QgZXF1YWwgdG8NCiAgICArICAgICAgICBLY29uZmlnLmRlZmluZWRfc3ltczoNCiAgICAr
DQogICAgKyAgICAgICAgICBkZWZpbmVkX3N5bXMgPSBbbm9kZS5pdGVtIGZvciBub2RlIGluIGtj
b25mLm5vZGVfaXRlcigpDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNpbnN0
YW5jZShub2RlLml0ZW0sIFN5bWJvbCldDQogICAgKw0KICAgICsgICAgICAgIHVuaXF1ZV9zeW1z
IChkZWZhdWx0OiBGYWxzZSk6DQogICAgKyAgICAgICAgICBJZiBUcnVlLCBvbmx5IHRoZSBmaXJz
dCBNZW51Tm9kZSB3aWxsIGJlIGluY2x1ZGVkIGZvciBzeW1ib2xzIGRlZmluZWQNCiAgICArICAg
ICAgICAgIGluIG11bHRpcGxlIGxvY2F0aW9ucy4NCiAgICArDQogICAgKyAgICAgICAgICBVc2lu
ZyBrY29uZi5ub2RlX2l0ZXIoVHJ1ZSkgaW4gdGhlIGV4YW1wbGUgYWJvdmUgd291bGQgZ2l2ZSBh
IGxpc3QNCiAgICArICAgICAgICAgIGVxdWFsIHRvIHVuaXF1ZV9kZWZpbmVkX3N5bXMuDQogICAg
KyAgICAgICAgIiIiDQogICAgKyAgICAgICAgaWYgdW5pcXVlX3N5bXM6DQogICAgKyAgICAgICAg
ICAgIGZvciBzeW0gaW4gc2VsZi51bmlxdWVfZGVmaW5lZF9zeW1zOg0KICAgICsgICAgICAgICAg
ICAgICAgc3ltLl92aXNpdGVkID0gRmFsc2UNCiAgICArDQogICAgKyAgICAgICAgbm9kZSA9IHNl
bGYudG9wX25vZGUNCiAgICArICAgICAgICB3aGlsZSAxOg0KICAgICsgICAgICAgICAgICAjIEp1
bXAgdG8gdGhlIG5leHQgbm9kZSB3aXRoIGFuIGl0ZXJhdGl2ZSB0cmVlIHdhbGsNCiAgICArICAg
ICAgICAgICAgaWYgbm9kZS5saXN0Og0KICAgICsgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUu
bGlzdA0KICAgICsgICAgICAgICAgICBlbGlmIG5vZGUubmV4dDoNCiAgICArICAgICAgICAgICAg
ICAgIG5vZGUgPSBub2RlLm5leHQNCiAgICArICAgICAgICAgICAgZWxzZToNCiAgICArICAgICAg
ICAgICAgICAgIHdoaWxlIG5vZGUucGFyZW50Og0KICAgICsgICAgICAgICAgICAgICAgICAgIG5v
ZGUgPSBub2RlLnBhcmVudA0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIG5vZGUubmV4dDoN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUubmV4dA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAgICAgICAgICAgICAgZWxzZToNCiAg
ICArICAgICAgICAgICAgICAgICAgICAjIE5vIG1vcmUgbm9kZXMNCiAgICArICAgICAgICAgICAg
ICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICAgICAgICAgIGlmIHVuaXF1ZV9zeW1zIGFu
ZCBub2RlLml0ZW0uX19jbGFzc19fIGlzIFN5bWJvbDoNCiAgICArICAgICAgICAgICAgICAgIGlm
IG5vZGUuaXRlbS5fdmlzaXRlZDoNCiAgICArICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0K
ICAgICsgICAgICAgICAgICAgICAgbm9kZS5pdGVtLl92aXNpdGVkID0gVHJ1ZQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgeWllbGQgbm9kZQ0KICAgICsNCiAgICArICAgIGRlZiBldmFsX3N0cmlu
ZyhzZWxmLCBzKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBSZXR1cm5zIHRoZSB0
cmlzdGF0ZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiAncycsIHJlcHJlc2VudGVkIGFzIDAsIDEs
DQogICAgKyAgICAgICAgYW5kIDIgZm9yIG4sIG0sIGFuZCB5LCByZXNwZWN0aXZlbHkuIFJhaXNl
cyBLY29uZmlnRXJyb3Igb24gc3ludGF4DQogICAgKyAgICAgICAgZXJyb3JzLiBXYXJucyBpZiB1
bmRlZmluZWQgc3ltYm9scyBhcmUgcmVmZXJlbmNlZC4NCiAgICArDQogICAgKyAgICAgICAgQXMg
YW4gZXhhbXBsZSwgaWYgRk9PIGFuZCBCQVIgYXJlIHRyaXN0YXRlIHN5bWJvbHMgYXQgbGVhc3Qg
b25lIG9mDQogICAgKyAgICAgICAgd2hpY2ggaGFzIHRoZSB2YWx1ZSB5LCB0aGVuIGV2YWxfc3Ry
aW5nKCJ5ICYmIChGT08gfHwgQkFSKSIpIHJldHVybnMNCiAgICArICAgICAgICAyICh5KS4NCiAg
ICArDQogICAgKyAgICAgICAgVG8gZ2V0IHRoZSBzdHJpbmcgdmFsdWUgb2Ygbm9uLWJvb2wvdHJp
c3RhdGUgc3ltYm9scywgdXNlDQogICAgKyAgICAgICAgU3ltYm9sLnN0cl92YWx1ZS4gZXZhbF9z
dHJpbmcoKSBhbHdheXMgcmV0dXJucyBhIHRyaXN0YXRlIHZhbHVlLCBhbmQNCiAgICArICAgICAg
ICBhbGwgbm9uLWJvb2wvdHJpc3RhdGUgc3ltYm9scyBoYXZlIHRoZSB0cmlzdGF0ZSB2YWx1ZSAw
IChuKS4NCiAgICArDQogICAgKyAgICAgICAgVGhlIGV4cHJlc3Npb24gcGFyc2luZyBpcyBjb25z
aXN0ZW50IHdpdGggaG93IHBhcnNpbmcgd29ya3MgZm9yDQogICAgKyAgICAgICAgY29uZGl0aW9u
YWwgKCdpZiAuLi4nKSBleHByZXNzaW9ucyBpbiB0aGUgY29uZmlndXJhdGlvbiwgYW5kIG1hdGNo
ZXMNCiAgICArICAgICAgICB0aGUgQyBpbXBsZW1lbnRhdGlvbi4gbSBpcyByZXdyaXR0ZW4gdG8g
J20gJiYgTU9EVUxFUycsIHNvDQogICAgKyAgICAgICAgZXZhbF9zdHJpbmcoIm0iKSB3aWxsIHJl
dHVybiAwIChuKSB1bmxlc3MgbW9kdWxlcyBhcmUgZW5hYmxlZC4NCiAgICArICAgICAgICAiIiIN
CiAgICArICAgICAgICAjIFRoZSBwYXJzZXIgaXMgb3B0aW1pemVkIHRvIGJlIGZhc3Qgd2hlbiBw
YXJzaW5nIEtjb25maWcgZmlsZXMgKHdoZXJlDQogICAgKyAgICAgICAgIyBhbiBleHByZXNzaW9u
IGNhbiBuZXZlciBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIGxpbmUpLiBXZSBoYXZlDQog
ICAgKyAgICAgICAgIyB0byBtb25rZXktcGF0Y2ggdGhpbmdzIGEgYml0IGhlcmUgdG8gcmV1c2Ug
aXQuDQogICAgKw0KICAgICsgICAgICAgIHNlbGYuX2ZpbGVuYW1lID0gTm9uZQ0KICAgICsNCiAg
ICArICAgICAgICBzZWxmLl90b2tlbnMgPSBzZWxmLl90b2tlbml6ZSgiaWYgIiArIHMpDQogICAg
KyAgICAgICAgIyBTdHJpcCAiaWYgIiB0byBhdm9pZCBnaXZpbmcgY29uZnVzaW5nIGVycm9yIG1l
c3NhZ2VzDQogICAgKyAgICAgICAgc2VsZi5fbGluZSA9IHMNCiAgICArICAgICAgICBzZWxmLl90
b2tlbnNfaSA9IDEgICMgU2tpcCB0aGUgJ2lmJyB0b2tlbg0KICAgICsNCiAgICArICAgICAgICBy
ZXR1cm4gZXhwcl92YWx1ZShzZWxmLl9leHBlY3RfZXhwcl9hbmRfZW9sKCkpDQogICAgKw0KICAg
ICsgICAgZGVmIHVuc2V0X3ZhbHVlcyhzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAg
ICAgICBSZW1vdmVzIGFueSB1c2VyIHZhbHVlcyBmcm9tIGFsbCBzeW1ib2xzLCBhcyBpZiBLY29u
ZmlnLmxvYWRfY29uZmlnKCkNCiAgICArICAgICAgICBvciBTeW1ib2wuc2V0X3ZhbHVlKCkgaGFk
IG5ldmVyIGJlZW4gY2FsbGVkLg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHNlbGYu
X3dhcm5fYXNzaWduX25vX3Byb21wdCA9IEZhbHNlDQogICAgKyAgICAgICAgdHJ5Og0KICAgICsg
ICAgICAgICAgICAjIHNldF92YWx1ZSgpIGFscmVhZHkgcmVqZWN0cyB1bmRlZmluZWQgc3ltYm9s
cywgYW5kIHRoZXkgZG9uJ3QNCiAgICArICAgICAgICAgICAgIyBuZWVkIHRvIGJlIGludmFsaWRh
dGVkIChiZWNhdXNlIHRoZWlyIHZhbHVlIG5ldmVyIGNoYW5nZXMpLCBzbyB3ZQ0KICAgICsgICAg
ICAgICAgICAjIGNhbiBqdXN0IGl0ZXJhdGUgb3ZlciBkZWZpbmVkIHN5bWJvbHMNCiAgICArICAg
ICAgICAgICAgZm9yIHN5bSBpbiBzZWxmLnVuaXF1ZV9kZWZpbmVkX3N5bXM6DQogICAgKyAgICAg
ICAgICAgICAgICBzeW0udW5zZXRfdmFsdWUoKQ0KICAgICsNCiAgICArICAgICAgICAgICAgZm9y
IGNob2ljZSBpbiBzZWxmLnVuaXF1ZV9jaG9pY2VzOg0KICAgICsgICAgICAgICAgICAgICAgY2hv
aWNlLnVuc2V0X3ZhbHVlKCkNCiAgICArICAgICAgICBmaW5hbGx5Og0KICAgICsgICAgICAgICAg
ICBzZWxmLl93YXJuX2Fzc2lnbl9ub19wcm9tcHQgPSBUcnVlDQogICAgKw0KICAgICsgICAgZGVm
IGVuYWJsZV93YXJuaW5ncyhzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBE
byAnS2NvbmZpZy53YXJuID0gVHJ1ZScgaW5zdGVhZC4gTWFpbnRhaW5lZCBmb3IgYmFja3dhcmRz
DQogICAgKyAgICAgICAgY29tcGF0aWJpbGl0eS4NCiAgICArICAgICAgICAiIiINCiAgICArICAg
ICAgICBzZWxmLndhcm4gPSBUcnVlDQogICAgKw0KICAgICsgICAgZGVmIGRpc2FibGVfd2Fybmlu
Z3Moc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgRG8gJ0tjb25maWcud2Fy
biA9IEZhbHNlJyBpbnN0ZWFkLiBNYWludGFpbmVkIGZvciBiYWNrd2FyZHMNCiAgICArICAgICAg
ICBjb21wYXRpYmlsaXR5Lg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHNlbGYud2Fy
biA9IEZhbHNlDQogICAgKw0KICAgICsgICAgZGVmIGVuYWJsZV9zdGRlcnJfd2FybmluZ3Moc2Vs
Zik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgRG8gJ0tjb25maWcud2Fybl90b19z
dGRlcnIgPSBUcnVlJyBpbnN0ZWFkLiBNYWludGFpbmVkIGZvciBiYWNrd2FyZHMNCiAgICArICAg
ICAgICBjb21wYXRpYmlsaXR5Lg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHNlbGYu
d2Fybl90b19zdGRlcnIgPSBUcnVlDQogICAgKw0KICAgICsgICAgZGVmIGRpc2FibGVfc3RkZXJy
X3dhcm5pbmdzKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIERvICdLY29u
ZmlnLndhcm5fdG9fc3RkZXJyID0gRmFsc2UnIGluc3RlYWQuIE1haW50YWluZWQgZm9yIGJhY2t3
YXJkcw0KICAgICsgICAgICAgIGNvbXBhdGliaWxpdHkuDQogICAgKyAgICAgICAgIiIiDQogICAg
KyAgICAgICAgc2VsZi53YXJuX3RvX3N0ZGVyciA9IEZhbHNlDQogICAgKw0KICAgICsgICAgZGVm
IGVuYWJsZV91bmRlZl93YXJuaW5ncyhzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAg
ICAgICBEbyAnS2NvbmZpZy53YXJuX2Fzc2lnbl91bmRlZiA9IFRydWUnIGluc3RlYWQuIE1haW50
YWluZWQgZm9yIGJhY2t3YXJkcw0KICAgICsgICAgICAgIGNvbXBhdGliaWxpdHkuDQogICAgKyAg
ICAgICAgIiIiDQogICAgKyAgICAgICAgc2VsZi53YXJuX2Fzc2lnbl91bmRlZiA9IFRydWUNCiAg
ICArDQogICAgKyAgICBkZWYgZGlzYWJsZV91bmRlZl93YXJuaW5ncyhzZWxmKToNCiAgICArICAg
ICAgICAiIiINCiAgICArICAgICAgICBEbyAnS2NvbmZpZy53YXJuX2Fzc2lnbl91bmRlZiA9IEZh
bHNlJyBpbnN0ZWFkLiBNYWludGFpbmVkIGZvcg0KICAgICsgICAgICAgIGJhY2t3YXJkcyBjb21w
YXRpYmlsaXR5Lg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHNlbGYud2Fybl9hc3Np
Z25fdW5kZWYgPSBGYWxzZQ0KICAgICsNCiAgICArICAgIGRlZiBlbmFibGVfb3ZlcnJpZGVfd2Fy
bmluZ3Moc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgRG8gJ0tjb25maWcu
d2Fybl9hc3NpZ25fb3ZlcnJpZGUgPSBUcnVlJyBpbnN0ZWFkLiBNYWludGFpbmVkIGZvcg0KICAg
ICsgICAgICAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Lg0KICAgICsgICAgICAgICIiIg0KICAg
ICsgICAgICAgIHNlbGYud2Fybl9hc3NpZ25fb3ZlcnJpZGUgPSBUcnVlDQogICAgKw0KICAgICsg
ICAgZGVmIGRpc2FibGVfb3ZlcnJpZGVfd2FybmluZ3Moc2VsZik6DQogICAgKyAgICAgICAgIiIi
DQogICAgKyAgICAgICAgRG8gJ0tjb25maWcud2Fybl9hc3NpZ25fb3ZlcnJpZGUgPSBGYWxzZScg
aW5zdGVhZC4gTWFpbnRhaW5lZCBmb3INCiAgICArICAgICAgICBiYWNrd2FyZHMgY29tcGF0aWJp
bGl0eS4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBzZWxmLndhcm5fYXNzaWduX292
ZXJyaWRlID0gRmFsc2UNCiAgICArDQogICAgKyAgICBkZWYgZW5hYmxlX3JlZHVuX3dhcm5pbmdz
KHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIERvICdLY29uZmlnLndhcm5f
YXNzaWduX3JlZHVuID0gVHJ1ZScgaW5zdGVhZC4gTWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzDQog
ICAgKyAgICAgICAgY29tcGF0aWJpbGl0eS4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAg
ICBzZWxmLndhcm5fYXNzaWduX3JlZHVuID0gVHJ1ZQ0KICAgICsNCiAgICArICAgIGRlZiBkaXNh
YmxlX3JlZHVuX3dhcm5pbmdzKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAg
IERvICdLY29uZmlnLndhcm5fYXNzaWduX3JlZHVuID0gRmFsc2UnIGluc3RlYWQuIE1haW50YWlu
ZWQgZm9yDQogICAgKyAgICAgICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuDQogICAgKyAgICAg
ICAgIiIiDQogICAgKyAgICAgICAgc2VsZi53YXJuX2Fzc2lnbl9yZWR1biA9IEZhbHNlDQogICAg
Kw0KICAgICsgICAgZGVmIF9fcmVwcl9fKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsg
ICAgICAgIFJldHVybnMgYSBzdHJpbmcgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgS2NvbmZp
ZyBvYmplY3Qgd2hlbiBpdCBpcw0KICAgICsgICAgICAgIGV2YWx1YXRlZCBvbiBlLmcuIHRoZSBp
bnRlcmFjdGl2ZSBQeXRob24gcHJvbXB0Lg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAg
IGRlZiBzdGF0dXMoZmxhZyk6DQogICAgKyAgICAgICAgICAgIHJldHVybiAiZW5hYmxlZCIgaWYg
ZmxhZyBlbHNlICJkaXNhYmxlZCINCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuICI8e30+Ii5m
b3JtYXQoIiwgIi5qb2luKCgNCiAgICArICAgICAgICAgICAgImNvbmZpZ3VyYXRpb24gd2l0aCB7
fSBzeW1ib2xzIi5mb3JtYXQobGVuKHNlbGYuc3ltcykpLA0KICAgICsgICAgICAgICAgICAnbWFp
biBtZW51IHByb21wdCAie30iJy5mb3JtYXQoc2VsZi5tYWlubWVudV90ZXh0KSwNCiAgICArICAg
ICAgICAgICAgInNyY3RyZWUgaXMgY3VycmVudCBkaXJlY3RvcnkiIGlmIG5vdCBzZWxmLnNyY3Ry
ZWUgZWxzZQ0KICAgICsgICAgICAgICAgICAgICAgJ3NyY3RyZWUgInt9IicuZm9ybWF0KHNlbGYu
c3JjdHJlZSksDQogICAgKyAgICAgICAgICAgICdjb25maWcgc3ltYm9sIHByZWZpeCAie30iJy5m
b3JtYXQoc2VsZi5jb25maWdfcHJlZml4KSwNCiAgICArICAgICAgICAgICAgIndhcm5pbmdzICIg
KyBzdGF0dXMoc2VsZi53YXJuKSwNCiAgICArICAgICAgICAgICAgInByaW50aW5nIG9mIHdhcm5p
bmdzIHRvIHN0ZGVyciAiICsgc3RhdHVzKHNlbGYud2Fybl90b19zdGRlcnIpLA0KICAgICsgICAg
ICAgICAgICAidW5kZWYuIHN5bWJvbCBhc3NpZ25tZW50IHdhcm5pbmdzICIgKw0KICAgICsgICAg
ICAgICAgICAgICAgc3RhdHVzKHNlbGYud2Fybl9hc3NpZ25fdW5kZWYpLA0KICAgICsgICAgICAg
ICAgICAib3ZlcnJpZGluZyBzeW1ib2wgYXNzaWdubWVudCB3YXJuaW5ncyAiICsNCiAgICArICAg
ICAgICAgICAgICAgIHN0YXR1cyhzZWxmLndhcm5fYXNzaWduX292ZXJyaWRlKSwNCiAgICArICAg
ICAgICAgICAgInJlZHVuZGFudCBzeW1ib2wgYXNzaWdubWVudCB3YXJuaW5ncyAiICsNCiAgICAr
ICAgICAgICAgICAgICAgIHN0YXR1cyhzZWxmLndhcm5fYXNzaWduX3JlZHVuKQ0KICAgICsgICAg
ICAgICkpKQ0KICAgICsNCiAgICArICAgICMNCiAgICArICAgICMgUHJpdmF0ZSBtZXRob2RzDQog
ICAgKyAgICAjDQogICAgKw0KICAgICsNCiAgICArICAgICMNCiAgICArICAgICMgRmlsZSByZWFk
aW5nDQogICAgKyAgICAjDQogICAgKw0KICAgICsgICAgZGVmIF9vcGVuX2NvbmZpZyhzZWxmLCBm
aWxlbmFtZSk6DQogICAgKyAgICAgICAgIyBPcGVucyBhIC5jb25maWcgZmlsZS4gRmlyc3QgdHJp
ZXMgdG8gb3BlbiAnZmlsZW5hbWUnLCB0aGVuDQogICAgKyAgICAgICAgIyAnJHNyY3RyZWUvZmls
ZW5hbWUnIGlmICRzcmN0cmVlIHdhcyBzZXQgd2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMNCiAg
ICArICAgICAgICAjIGxvYWRlZC4NCiAgICArDQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAg
ICAgICAgICByZXR1cm4gc2VsZi5fb3BlbihmaWxlbmFtZSwgInIiKQ0KICAgICsgICAgICAgIGV4
Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6DQogICAgKyAgICAgICAgICAgICMgVGhpcyB3aWxs
IHRyeSBvcGVuaW5nIHRoZSBzYW1lIGZpbGUgdHdpY2UgaWYgJHNyY3RyZWUgaXMgdW5zZXQsDQog
ICAgKyAgICAgICAgICAgICMgYnV0IGl0J3Mgbm90IGEgYmlnIGRlYWwNCiAgICArICAgICAgICAg
ICAgdHJ5Og0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29wZW4oam9pbihzZWxm
LnNyY3RyZWUsIGZpbGVuYW1lKSwgInIiKQ0KICAgICsgICAgICAgICAgICBleGNlcHQgRW52aXJv
bm1lbnRFcnJvciBhcyBlMjoNCiAgICArICAgICAgICAgICAgICAgICMgVGhpcyBpcyBuZWVkZWQg
Zm9yIFB5dGhvbiAzLCBiZWNhdXNlIGUyIGlzIGRlbGV0ZWQgYWZ0ZXINCiAgICArICAgICAgICAg
ICAgICAgICMgdGhlIHRyeSBibG9jazoNCiAgICArICAgICAgICAgICAgICAgICMNCiAgICArICAg
ICAgICAgICAgICAgICMgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9yZWZlcmVuY2UvY29tcG91
bmRfc3RtdHMuaHRtbCN0aGUtdHJ5LXN0YXRlbWVudA0KICAgICsgICAgICAgICAgICAgICAgZSA9
IGUyDQogICAgKw0KICAgICsgICAgICAgICAgICByYWlzZSBfS2NvbmZpZ0lPRXJyb3IoDQogICAg
KyAgICAgICAgICAgICAgICBlLCAiQ291bGQgbm90IG9wZW4gJ3t9JyAoe306IHt9KS4gQ2hlY2sg
dGhhdCB0aGUgJHNyY3RyZWUgIg0KICAgICsgICAgICAgICAgICAgICAgICAgImVudmlyb25tZW50
IHZhcmlhYmxlICh7fSkgaXMgc2V0IGNvcnJlY3RseS4iDQogICAgKyAgICAgICAgICAgICAgICAg
ICAuZm9ybWF0KGZpbGVuYW1lLCBlcnJuby5lcnJvcmNvZGVbZS5lcnJub10sIGUuc3RyZXJyb3Is
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgdG8gJ3t9JyIuZm9ybWF0KHNl
bGYuc3JjdHJlZSkgaWYgc2VsZi5zcmN0cmVlDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlICJ1bnNldCBvciBibGFuayIpKQ0KICAgICsNCiAgICArICAgIGRlZiBfZW50
ZXJfZmlsZShzZWxmLCBmaWxlbmFtZSk6DQogICAgKyAgICAgICAgIyBKdW1wcyB0byB0aGUgYmVn
aW5uaW5nIG9mIGEgc291cmNlZCBLY29uZmlnIGZpbGUsIHNhdmluZyB0aGUgcHJldmlvdXMNCiAg
ICArICAgICAgICAjIHBvc2l0aW9uIGFuZCBmaWxlIG9iamVjdC4NCiAgICArICAgICAgICAjDQog
ICAgKyAgICAgICAgIyBmaWxlbmFtZToNCiAgICArICAgICAgICAjICAgQWJzb2x1dGUgcGF0aCB0
byBmaWxlDQogICAgKw0KICAgICsgICAgICAgICMgUGF0aCByZWxhdGl2ZSB0byAkc3JjdHJlZSwg
c3RvcmVkIGluIGUuZy4gc2VsZi5fZmlsZW5hbWUNCiAgICArICAgICAgICAjICh3aGljaCBtYWtl
cyBpdCBpbmRpcmVjdGx5IHNob3cgdXAgaW4gTWVudU5vZGUuZmlsZW5hbWUpLiBFcXVhbHMNCiAg
ICArICAgICAgICAjICdmaWxlbmFtZScgZm9yIGFic29sdXRlIHBhdGhzIHBhc3NlZCB0byAnc291
cmNlJy4NCiAgICArICAgICAgICBpZiBmaWxlbmFtZS5zdGFydHN3aXRoKHNlbGYuX3NyY3RyZWVf
cHJlZml4KToNCiAgICArICAgICAgICAgICAgIyBSZWxhdGl2ZSBwYXRoIChvciBhIHJlZHVuZGFu
dCBhYnNvbHV0ZSBwYXRoIHRvIHdpdGhpbiAkc3JjdHJlZSwNCiAgICArICAgICAgICAgICAgIyBi
dXQgaXQncyBwcm9iYWJseSBmaW5lIHRvIHJlZHVjZSB0aG9zZSB0b28pDQogICAgKyAgICAgICAg
ICAgIHJlbF9maWxlbmFtZSA9IGZpbGVuYW1lW2xlbihzZWxmLl9zcmN0cmVlX3ByZWZpeCk6XQ0K
ICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICMgQWJzb2x1dGUgcGF0aA0KICAg
ICsgICAgICAgICAgICByZWxfZmlsZW5hbWUgPSBmaWxlbmFtZQ0KICAgICsNCiAgICArICAgICAg
ICBzZWxmLmtjb25maWdfZmlsZW5hbWVzLmFwcGVuZChyZWxfZmlsZW5hbWUpDQogICAgKw0KICAg
ICsgICAgICAgICMgVGhlIHBhcmVudCBLY29uZmlnIGZpbGVzIGFyZSByZXByZXNlbnRlZCBhcyBh
IGxpc3Qgb2YNCiAgICArICAgICAgICAjICg8aW5jbHVkZSBwYXRoPiwgPFB5dGhvbiAnZmlsZScg
b2JqZWN0IGZvciBLY29uZmlnIGZpbGU+KSB0dXBsZXMuDQogICAgKyAgICAgICAgIw0KICAgICsg
ICAgICAgICMgPGluY2x1ZGUgcGF0aD4gaXMgaW1tdXRhYmxlIGFuZCBob2xkcyBhICp0dXBsZSog
b2YNCiAgICArICAgICAgICAjICg8ZmlsZW5hbWU+LCA8bGluZW5yPikgdHVwbGVzLCBnaXZpbmcg
dGhlIGxvY2F0aW9ucyBvZiB0aGUgJ3NvdXJjZScNCiAgICArICAgICAgICAjIHN0YXRlbWVudHMg
aW4gdGhlIHBhcmVudCBLY29uZmlnIGZpbGVzLiBUaGUgY3VycmVudCBpbmNsdWRlIHBhdGggaXMN
CiAgICArICAgICAgICAjIGFsc28gYXZhaWxhYmxlIGluIEtjb25maWcuX2luY2x1ZGVfcGF0aC4N
CiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBUaGUgcG9pbnQgb2YgdGhpcyByZWR1bmRh
bnQgc2V0dXAgaXMgdG8gYWxsb3cgS2NvbmZpZy5faW5jbHVkZV9wYXRoDQogICAgKyAgICAgICAg
IyB0byBiZSBhc3NpZ25lZCBkaXJlY3RseSB0byBNZW51Tm9kZS5pbmNsdWRlX3BhdGggd2l0aG91
dCBoYXZpbmcgdG8NCiAgICArICAgICAgICAjIGNvcHkgaXQsIHNoYXJpbmcgaXQgd2hlcmV2ZXIg
cG9zc2libGUuDQogICAgKw0KICAgICsgICAgICAgICMgU2F2ZSBpbmNsdWRlIHBhdGggYW5kICdm
aWxlJyBvYmplY3QgKHZpYSBpdHMgJ3JlYWRsaW5lJyBmdW5jdGlvbikNCiAgICArICAgICAgICAj
IGJlZm9yZSBlbnRlcmluZyB0aGUgZmlsZQ0KICAgICsgICAgICAgIHNlbGYuX2ZpbGVzdGFjay5h
cHBlbmQoKHNlbGYuX2luY2x1ZGVfcGF0aCwgc2VsZi5fcmVhZGxpbmUpKQ0KICAgICsNCiAgICAr
ICAgICAgICAjIF9pbmNsdWRlX3BhdGggaXMgYSB0dXBsZSwgc28gdGhpcyByZWJpbmRzIHRoZSB2
YXJpYWJsZSBpbnN0ZWFkIG9mDQogICAgKyAgICAgICAgIyBkb2luZyBpbi1wbGFjZSBtb2RpZmlj
YXRpb24NCiAgICArICAgICAgICBzZWxmLl9pbmNsdWRlX3BhdGggKz0gKChzZWxmLl9maWxlbmFt
ZSwgc2VsZi5fbGluZW5yKSwpDQogICAgKw0KICAgICsgICAgICAgICMgQ2hlY2sgZm9yIHJlY3Vy
c2l2ZSAnc291cmNlJw0KICAgICsgICAgICAgIGZvciBuYW1lLCBfIGluIHNlbGYuX2luY2x1ZGVf
cGF0aDoNCiAgICArICAgICAgICAgICAgaWYgbmFtZSA9PSByZWxfZmlsZW5hbWU6DQogICAgKyAg
ICAgICAgICAgICAgICByYWlzZSBLY29uZmlnRXJyb3IoDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgIlxue306e306IHJlY3Vyc2l2ZSAnc291cmNlJyBvZiAne30nIGRldGVjdGVkLiBDaGVjayB0
aGF0ICINCiAgICArICAgICAgICAgICAgICAgICAgICAiZW52aXJvbm1lbnQgdmFyaWFibGVzIGFy
ZSBzZXQgY29ycmVjdGx5LlxuIg0KICAgICsgICAgICAgICAgICAgICAgICAgICJJbmNsdWRlIHBh
dGg6XG57fSINCiAgICArICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuX2ZpbGVuYW1l
LCBzZWxmLl9saW5lbnIsIHJlbF9maWxlbmFtZSwNCiAgICArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJcbiIuam9pbigie306e30iLmZvcm1hdChuYW1lLCBsaW5lbnIpDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5hbWUsIGxpbmVuciBpbiBzZWxm
Ll9pbmNsdWRlX3BhdGgpKSkNCiAgICArDQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAgICAg
ICAgICBzZWxmLl9yZWFkbGluZSA9IHNlbGYuX29wZW4oZmlsZW5hbWUsICJyIikucmVhZGxpbmUN
CiAgICArICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOg0KICAgICsgICAgICAg
ICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmaWxlIGV4aXN0cw0KICAgICsgICAgICAg
ICAgICByYWlzZSBfS2NvbmZpZ0lPRXJyb3IoDQogICAgKyAgICAgICAgICAgICAgICBlLCAie306
e306IENvdWxkIG5vdCBvcGVuICd7fScgKGluICd7fScpICh7fToge30pIg0KICAgICsgICAgICAg
ICAgICAgICAgICAgLmZvcm1hdChzZWxmLl9maWxlbmFtZSwgc2VsZi5fbGluZW5yLCBmaWxlbmFt
ZSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZS5zdHJpcCgpLA0K
ICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5lcnJvcmNvZGVbZS5lcnJub10s
IGUuc3RyZXJyb3IpKQ0KICAgICsNCiAgICArICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHJlbF9m
aWxlbmFtZQ0KICAgICsgICAgICAgIHNlbGYuX2xpbmVuciA9IDANCiAgICArDQogICAgKyAgICBk
ZWYgX2xlYXZlX2ZpbGUoc2VsZik6DQogICAgKyAgICAgICAgIyBSZXR1cm5zIGZyb20gYSBLY29u
ZmlnIGZpbGUgdG8gdGhlIGZpbGUgdGhhdCBzb3VyY2VkIGl0LiBTZWUNCiAgICArICAgICAgICAj
IF9lbnRlcl9maWxlKCkuDQogICAgKw0KICAgICsgICAgICAgICMgUmVzdG9yZSBsb2NhdGlvbiBm
cm9tIHBhcmVudCBLY29uZmlnIGZpbGUNCiAgICArICAgICAgICBzZWxmLl9maWxlbmFtZSwgc2Vs
Zi5fbGluZW5yID0gc2VsZi5faW5jbHVkZV9wYXRoWy0xXQ0KICAgICsgICAgICAgICMgUmVzdG9y
ZSBpbmNsdWRlIHBhdGggYW5kICdmaWxlJyBvYmplY3QNCiAgICArICAgICAgICBzZWxmLl9yZWFk
bGluZS5fX3NlbGZfXy5jbG9zZSgpICAjIF9fc2VsZl9fIGZldGNoZXMgdGhlICdmaWxlJyBvYmpl
Y3QNCiAgICArICAgICAgICBzZWxmLl9pbmNsdWRlX3BhdGgsIHNlbGYuX3JlYWRsaW5lID0gc2Vs
Zi5fZmlsZXN0YWNrLnBvcCgpDQogICAgKw0KICAgICsgICAgZGVmIF9uZXh0X2xpbmUoc2VsZik6
DQogICAgKyAgICAgICAgIyBGZXRjaGVzIGFuZCB0b2tlbml6ZXMgdGhlIG5leHQgbGluZSBmcm9t
IHRoZSBjdXJyZW50IEtjb25maWcgZmlsZS4NCiAgICArICAgICAgICAjIFJldHVybnMgRmFsc2Ug
YXQgRU9GIGFuZCBUcnVlIG90aGVyd2lzZS4NCiAgICArDQogICAgKyAgICAgICAgIyBXZSBtaWdo
dCBhbHJlYWR5IGhhdmUgdG9rZW5zIGZyb20gcGFyc2luZyBhIGxpbmUgYW5kIGRpc2NvdmVyaW5n
IHRoYXQNCiAgICArICAgICAgICAjIGl0J3MgcGFydCBvZiBhIGRpZmZlcmVudCBjb25zdHJ1Y3QN
CiAgICArICAgICAgICBpZiBzZWxmLl9yZXVzZV90b2tlbnM6DQogICAgKyAgICAgICAgICAgIHNl
bGYuX3JldXNlX3Rva2VucyA9IEZhbHNlDQogICAgKyAgICAgICAgICAgICMgc2VsZi5fdG9rZW5z
X2kgaXMga25vd24gdG8gYmUgMSBoZXJlLCBiZWNhdXNlIF9wYXJzZV9wcm9wZXJ0aWVzKCkNCiAg
ICArICAgICAgICAgICAgIyBsZWF2ZXMgaXQgbGlrZSB0aGF0IHdoZW4gaXQgY2FuJ3QgcmVjb2du
aXplIGEgbGluZSAob3IgcGFyc2VzDQogICAgKyAgICAgICAgICAgICMgYSBoZWxwIHRleHQpDQog
ICAgKyAgICAgICAgICAgIHJldHVybiBUcnVlDQogICAgKw0KICAgICsgICAgICAgICMgcmVhZGxp
bmUoKSByZXR1cm5zICcnIG92ZXIgYW5kIG92ZXIgYXQgRU9GLCB3aGljaCB3ZSByZWx5IG9uIGZv
ciBoZWxwDQogICAgKyAgICAgICAgIyB0ZXh0cyBhdCB0aGUgZW5kIG9mIGZpbGVzIChzZWUgX2xp
bmVfYWZ0ZXJfaGVscCgpKQ0KICAgICsgICAgICAgIGxpbmUgPSBzZWxmLl9yZWFkbGluZSgpDQog
ICAgKyAgICAgICAgaWYgbm90IGxpbmU6DQogICAgKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0K
ICAgICsgICAgICAgIHNlbGYuX2xpbmVuciArPSAxDQogICAgKw0KICAgICsgICAgICAgICMgSGFu
ZGxlIGxpbmUgam9pbmluZw0KICAgICsgICAgICAgIHdoaWxlIGxpbmUuZW5kc3dpdGgoIlxcXG4i
KToNCiAgICArICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXSArIHNlbGYuX3JlYWRsaW5lKCkN
CiAgICArICAgICAgICAgICAgc2VsZi5fbGluZW5yICs9IDENCiAgICArDQogICAgKyAgICAgICAg
c2VsZi5fdG9rZW5zID0gc2VsZi5fdG9rZW5pemUobGluZSkNCiAgICArICAgICAgICAjIEluaXRp
YWxpemUgdG8gMSBpbnN0ZWFkIG9mIDAgdG8gZmFjdG9yIG91dCBjb2RlIGZyb20gX3BhcnNlX2Js
b2NrKCkNCiAgICArICAgICAgICAjIGFuZCBfcGFyc2VfcHJvcGVydGllcygpLiBUaGV5IGltbWVk
aWF0ZWx5IGZldGNoIHNlbGYuX3Rva2Vuc1swXS4NCiAgICArICAgICAgICBzZWxmLl90b2tlbnNf
aSA9IDENCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuIFRydWUNCiAgICArDQogICAgKyAgICBk
ZWYgX2xpbmVfYWZ0ZXJfaGVscChzZWxmLCBsaW5lKToNCiAgICArICAgICAgICAjIFRva2VuaXpl
cyBhIGxpbmUgYWZ0ZXIgYSBoZWxwIHRleHQuIFRoaXMgY2FzZSBpcyBzcGVjaWFsIGluIHRoYXQg
dGhlDQogICAgKyAgICAgICAgIyBsaW5lIGhhcyBhbHJlYWR5IGJlZW4gZmV0Y2hlZCAodG8gZGlz
Y292ZXIgdGhhdCBpdCBpc24ndCBwYXJ0IG9mIHRoZQ0KICAgICsgICAgICAgICMgaGVscCB0ZXh0
KS4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBBbiBlYXJsaWVyIHZlcnNpb24gdXNl
ZCBhIF9zYXZlZF9saW5lIHZhcmlhYmxlIGluc3RlYWQgdGhhdCB3YXMNCiAgICArICAgICAgICAj
IGNoZWNrZWQgaW4gX25leHRfbGluZSgpLiBUaGlzIHNwZWNpYWwtY2FzaW5nIGdldHMgcmlkIG9m
IGl0IGFuZCBtYWtlcw0KICAgICsgICAgICAgICMgX3JldXNlX3Rva2VucyBhbG9uZSBzdWZmaWNp
ZW50IHRvIGhhbmRsZSB1bmdldC4NCiAgICArDQogICAgKyAgICAgICAgIyBIYW5kbGUgbGluZSBq
b2luaW5nDQogICAgKyAgICAgICAgd2hpbGUgbGluZS5lbmRzd2l0aCgiXFxcbiIpOg0KICAgICsg
ICAgICAgICAgICBsaW5lID0gbGluZVs6LTJdICsgc2VsZi5fcmVhZGxpbmUoKQ0KICAgICsgICAg
ICAgICAgICBzZWxmLl9saW5lbnIgKz0gMQ0KICAgICsNCiAgICArICAgICAgICBzZWxmLl90b2tl
bnMgPSBzZWxmLl90b2tlbml6ZShsaW5lKQ0KICAgICsgICAgICAgIHNlbGYuX3JldXNlX3Rva2Vu
cyA9IFRydWUNCiAgICArDQogICAgKyAgICBkZWYgX3dyaXRlX2lmX2NoYW5nZWQoc2VsZiwgZmls
ZW5hbWUsIGNvbnRlbnRzKToNCiAgICArICAgICAgICAjIFdyaXRlcyAnY29udGVudHMnIGludG8g
J2ZpbGVuYW1lJywgYnV0IG9ubHkgaWYgaXQgZGlmZmVycyBmcm9tIHRoZQ0KICAgICsgICAgICAg
ICMgY3VycmVudCBjb250ZW50cyBvZiB0aGUgZmlsZS4NCiAgICArICAgICAgICAjDQogICAgKyAg
ICAgICAgIyBBbm90aGVyIHZhcmlhbnQgd291bGQgYmUgd3JpdGUgYSB0ZW1wb3JhcnkgZmlsZSBv
biB0aGUgc2FtZQ0KICAgICsgICAgICAgICMgZmlsZXN5c3RlbSwgY29tcGFyZSB0aGUgZmlsZXMs
IGFuZCByZW5hbWUoKSB0aGUgdGVtcG9yYXJ5IGZpbGUgaWYgaXQNCiAgICArICAgICAgICAjIGRp
ZmZlcnMsIGJ1dCBpdCBicmVha3Mgc3R1ZmYgbGlrZSB3cml0ZV9jb25maWcoIi9kZXYvbnVsbCIp
LCB3aGljaCBpcw0KICAgICsgICAgICAgICMgdXNlZCBvdXQgdGhlcmUgdG8gZm9yY2UgZXZhbHVh
dGlvbi1yZWxhdGVkIHdhcm5pbmdzIHRvIGJlIGdlbmVyYXRlZC4NCiAgICArICAgICAgICAjIFRo
aXMgc2ltcGxlIHZlcnNpb24gaXMgcHJldHR5IGZhaWxzYWZlIGFuZCBwb3J0YWJsZS4NCiAgICAr
DQogICAgKyAgICAgICAgaWYgbm90IHNlbGYuX2NvbnRlbnRzX2VxKGZpbGVuYW1lLCBjb250ZW50
cyk6DQogICAgKyAgICAgICAgICAgIHdpdGggc2VsZi5fb3BlbihmaWxlbmFtZSwgInciKSBhcyBm
Og0KICAgICsgICAgICAgICAgICAgICAgZi53cml0ZShjb250ZW50cykNCiAgICArDQogICAgKyAg
ICBkZWYgX2NvbnRlbnRzX2VxKHNlbGYsIGZpbGVuYW1lLCBjb250ZW50cyk6DQogICAgKyAgICAg
ICAgIyBSZXR1cm5zIFRydWUgaWYgdGhlIGNvbnRlbnRzIG9mICdmaWxlbmFtZScgaXMgJ2NvbnRl
bnRzJyAoYSBzdHJpbmcpLA0KICAgICsgICAgICAgICMgYW5kIEZhbHNlIG90aGVyd2lzZSAoaW5j
bHVkaW5nIGlmICdmaWxlbmFtZScgY2FuJ3QgYmUgb3BlbmVkL3JlYWQpDQogICAgKw0KICAgICsg
ICAgICAgIHRyeToNCiAgICArICAgICAgICAgICAgd2l0aCBzZWxmLl9vcGVuKGZpbGVuYW1lLCAi
ciIpIGFzIGY6DQogICAgKyAgICAgICAgICAgICAgICAjIFJvYnVzdCByZS4gdGhpbmdzIGxpa2Ug
ZW5jb2RpbmcgYW5kIGxpbmUgZW5kaW5ncyAobW1hcCgpDQogICAgKyAgICAgICAgICAgICAgICAj
IHRyaWNrZXJ5IGlzbid0KQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIGYucmVhZChsZW4o
Y29udGVudHMpICsgMSkgPT0gY29udGVudHMNCiAgICArICAgICAgICBleGNlcHQgRW52aXJvbm1l
bnRFcnJvcjoNCiAgICArICAgICAgICAgICAgIyBJZiB0aGUgZXJyb3IgaGVyZSB3b3VsZCBwcmV2
ZW50IHdyaXRpbmcgdGhlIGZpbGUgYXMgd2VsbCwgd2UnbGwNCiAgICArICAgICAgICAgICAgIyBu
b3RpY2UgaXQgbGF0ZXINCiAgICArICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQogICAgKw0KICAg
ICsgICAgIw0KICAgICsgICAgIyBUb2tlbml6YXRpb24NCiAgICArICAgICMNCiAgICArDQogICAg
KyAgICBkZWYgX2xvb2t1cF9zeW0oc2VsZiwgbmFtZSk6DQogICAgKyAgICAgICAgIyBGZXRjaGVz
IHRoZSBzeW1ib2wgJ25hbWUnIGZyb20gdGhlIHN5bWJvbCB0YWJsZSwgY3JlYXRpbmcgYW5kDQog
ICAgKyAgICAgICAgIyByZWdpc3RlcmluZyBpdCBpZiBpdCBkb2VzIG5vdCBleGlzdC4gSWYgJ19w
YXJzaW5nX2tjb25maWdzJyBpcyBGYWxzZSwNCiAgICArICAgICAgICAjIGl0IG1lYW5zIHdlJ3Jl
IGluIGV2YWxfc3RyaW5nKCksIGFuZCBuZXcgc3ltYm9scyB3b24ndCBiZSByZWdpc3RlcmVkLg0K
ICAgICsNCiAgICArICAgICAgICBpZiBuYW1lIGluIHNlbGYuc3ltczoNCiAgICArICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuc3ltc1tuYW1lXQ0KICAgICsNCiAgICArICAgICAgICBzeW0gPSBTeW1i
b2woKQ0KICAgICsgICAgICAgIHN5bS5rY29uZmlnID0gc2VsZg0KICAgICsgICAgICAgIHN5bS5u
YW1lID0gbmFtZQ0KICAgICsgICAgICAgIHN5bS5pc19jb25zdGFudCA9IEZhbHNlDQogICAgKyAg
ICAgICAgc3ltLnJldl9kZXAgPSBzeW0ud2Vha19yZXZfZGVwID0gc3ltLmRpcmVjdF9kZXAgPSBz
ZWxmLm4NCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5fcGFyc2luZ19rY29uZmlnczoNCiAg
ICArICAgICAgICAgICAgc2VsZi5zeW1zW25hbWVdID0gc3ltDQogICAgKyAgICAgICAgZWxzZToN
CiAgICArICAgICAgICAgICAgc2VsZi5fd2Fybigibm8gc3ltYm9sIHt9IGluIGNvbmZpZ3VyYXRp
b24iLmZvcm1hdChuYW1lKSkNCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuIHN5bQ0KICAgICsN
CiAgICArICAgIGRlZiBfbG9va3VwX2NvbnN0X3N5bShzZWxmLCBuYW1lKToNCiAgICArICAgICAg
ICAjIExpa2UgX2xvb2t1cF9zeW0oKSwgZm9yIGNvbnN0YW50IChxdW90ZWQpIHN5bWJvbHMNCiAg
ICArDQogICAgKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLmNvbnN0X3N5bXM6DQogICAgKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLmNvbnN0X3N5bXNbbmFtZV0NCiAgICArDQogICAgKyAgICAgICAg
c3ltID0gU3ltYm9sKCkNCiAgICArICAgICAgICBzeW0ua2NvbmZpZyA9IHNlbGYNCiAgICArICAg
ICAgICBzeW0ubmFtZSA9IG5hbWUNCiAgICArICAgICAgICBzeW0uaXNfY29uc3RhbnQgPSBUcnVl
DQogICAgKyAgICAgICAgc3ltLnJldl9kZXAgPSBzeW0ud2Vha19yZXZfZGVwID0gc3ltLmRpcmVj
dF9kZXAgPSBzZWxmLm4NCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5fcGFyc2luZ19rY29u
ZmlnczoNCiAgICArICAgICAgICAgICAgc2VsZi5jb25zdF9zeW1zW25hbWVdID0gc3ltDQogICAg
Kw0KICAgICsgICAgICAgIHJldHVybiBzeW0NCiAgICArDQogICAgKyAgICBkZWYgX3Rva2VuaXpl
KHNlbGYsIHMpOg0KICAgICsgICAgICAgICMgUGFyc2VzICdzJywgcmV0dXJuaW5nIGEgTm9uZS10
ZXJtaW5hdGVkIGxpc3Qgb2YgdG9rZW5zLiBSZWdpc3RlcnMgYW55DQogICAgKyAgICAgICAgIyBu
ZXcgc3ltYm9scyBlbmNvdW50ZXJlZCB3aXRoIF9sb29rdXAoX2NvbnN0KV9zeW0oKS4NCiAgICAr
ICAgICAgICAjDQogICAgKyAgICAgICAgIyBUcmllcyB0byBiZSByZWFzb25hYmx5IHNwZWVkeSBi
eSBwcm9jZXNzaW5nIGNodW5rcyBvZiB0ZXh0IHZpYQ0KICAgICsgICAgICAgICMgcmVnZXhlcyBh
bmQgc3RyaW5nIG9wZXJhdGlvbnMgd2hlcmUgcG9zc2libGUuIFRoaXMgaXMgdGhlIGJpZ2dlc3QN
CiAgICArICAgICAgICAjIGhvdHNwb3QgZHVyaW5nIHBhcnNpbmcuDQogICAgKyAgICAgICAgIw0K
ICAgICsgICAgICAgICMgSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gcmV3cml0ZSB0aGlzIHRvICd5
aWVsZCcgdG9rZW5zIGluc3RlYWQsDQogICAgKyAgICAgICAgIyB3b3JraW5nIGFjcm9zcyBtdWx0
aXBsZSBsaW5lcy4gTG9va2JhY2sgYW5kIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQNCiAgICArICAg
ICAgICAjIGphbmt5IHZlcnNpb25zIG9mIHRoZSBDIHRvb2xzIGNvbXBsaWNhdGUgdGhpbmdzIHRo
b3VnaC4NCiAgICArDQogICAgKyAgICAgICAgc2VsZi5fbGluZSA9IHMgICMgVXNlZCBmb3IgZXJy
b3IgcmVwb3J0aW5nDQogICAgKw0KICAgICsgICAgICAgICMgSW5pdGlhbCB0b2tlbiBvbiB0aGUg
bGluZQ0KICAgICsgICAgICAgIG1hdGNoID0gX2NvbW1hbmRfbWF0Y2gocykNCiAgICArICAgICAg
ICBpZiBub3QgbWF0Y2g6DQogICAgKyAgICAgICAgICAgIGlmIHMuaXNzcGFjZSgpIG9yIHMubHN0
cmlwKCkuc3RhcnRzd2l0aCgiIyIpOg0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIChOb25l
LCkNCiAgICArICAgICAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3IoInVua25vd24gdG9rZW4gYXQg
c3RhcnQgb2YgbGluZSIpDQogICAgKw0KICAgICsgICAgICAgICMgVHJpY2t5IGltcGxlbWVudGF0
aW9uIGRldGFpbDogV2hpbGUgcGFyc2luZyBhIHRva2VuLCAndG9rZW4nIHJlZmVycw0KICAgICsg
ICAgICAgICMgdG8gdGhlIHByZXZpb3VzIHRva2VuLiBTZWUgX1NUUklOR19MRVggZm9yIHdoeSB0
aGlzIGlzIG5lZWRlZC4NCiAgICArICAgICAgICB0b2tlbiA9IF9nZXRfa2V5d29yZChtYXRjaC5n
cm91cCgxKSkNCiAgICArICAgICAgICBpZiBub3QgdG9rZW46DQogICAgKyAgICAgICAgICAgICMg
QmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgdmVyc2lvbnMgb2YgdGhlIEMgdG9vbHMs
IHdoaWNoDQogICAgKyAgICAgICAgICAgICMgKGFjY2lkZW50YWxseSkgYWNjZXB0ZWQgc3R1ZmYg
bGlrZSAiLS1oZWxwLS0iIGFuZCAiLWhlbHAtLS0iLg0KICAgICsgICAgICAgICAgICAjIFRoaXMg
d2FzIGZpeGVkIGluIHRoZSBDIHRvb2xzIGJ5IGNvbW1pdCBjMjI2NDU2NCAoImtjb25maWc6IHdh
cm4NCiAgICArICAgICAgICAgICAgIyBvZiB1bmhhbmRsZWQgY2hhcmFjdGVycyBpbiBLY29uZmln
IGNvbW1hbmRzIiksIGNvbW1pdHRlZCBpbiBKdWx5DQogICAgKyAgICAgICAgICAgICMgMjAxNSwg
YnV0IGl0IHNlZW1zIHBlb3BsZSBzdGlsbCBydW4gS2NvbmZpZ2xpYiBvbiBvbGRlciBrZXJuZWxz
Lg0KICAgICsgICAgICAgICAgICBpZiBzLnN0cmlwKCIgXHRcbi0iKSA9PSAiaGVscCI6DQogICAg
KyAgICAgICAgICAgICAgICByZXR1cm4gKF9UX0hFTFAsIE5vbmUpDQogICAgKw0KICAgICsgICAg
ICAgICAgICAjIElmIHRoZSBmaXJzdCB0b2tlbiBpcyBub3QgYSBrZXl3b3JkIChhbmQgbm90IGEg
d2VpcmQgaGVscCB0b2tlbiksDQogICAgKyAgICAgICAgICAgICMgd2UgaGF2ZSBhIHByZXByb2Nl
c3NvciB2YXJpYWJsZSBhc3NpZ25tZW50IChvciBhIGJhcmUgbWFjcm8gb24gYQ0KICAgICsgICAg
ICAgICAgICAjIGxpbmUpDQogICAgKyAgICAgICAgICAgIHNlbGYuX3BhcnNlX2Fzc2lnbm1lbnQo
cykNCiAgICArICAgICAgICAgICAgcmV0dXJuIChOb25lLCkNCiAgICArDQogICAgKyAgICAgICAg
dG9rZW5zID0gW3Rva2VuXQ0KICAgICsgICAgICAgICMgVGhlIGN1cnJlbnQgaW5kZXggaW4gdGhl
IHN0cmluZyBiZWluZyB0b2tlbml6ZWQNCiAgICArICAgICAgICBpID0gbWF0Y2guZW5kKCkNCiAg
ICArDQogICAgKyAgICAgICAgIyBNYWluIHRva2VuaXphdGlvbiBsb29wIChmb3IgdG9rZW5zIHBh
c3QgdGhlIGZpcnN0IG9uZSkNCiAgICArICAgICAgICB3aGlsZSBpIDwgbGVuKHMpOg0KICAgICsg
ICAgICAgICAgICAjIFRlc3QgZm9yIGFuIGlkZW50aWZpZXIva2V5d29yZCBmaXJzdC4gVGhpcyBp
cyB0aGUgbW9zdCBjb21tb24NCiAgICArICAgICAgICAgICAgIyBjYXNlLg0KICAgICsgICAgICAg
ICAgICBtYXRjaCA9IF9pZF9rZXl3b3JkX21hdGNoKHMsIGkpDQogICAgKyAgICAgICAgICAgIGlm
IG1hdGNoOg0KICAgICsgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGFuIGlkZW50aWZpZXIgb3Ig
a2V5d29yZA0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICMgQ2hlY2sgd2hhdCBpdCBpcy4g
bG9va3VwX3N5bSgpIHdpbGwgdGFrZSBjYXJlIG9mIGFsbG9jYXRpbmcNCiAgICArICAgICAgICAg
ICAgICAgICMgbmV3IHN5bWJvbHMgZm9yIHVzIHRoZSBmaXJzdCB0aW1lIHdlIHNlZSB0aGVtLiBO
b3RlIHRoYXQNCiAgICArICAgICAgICAgICAgICAgICMgJ3Rva2VuJyBzdGlsbCByZWZlcnMgdG8g
dGhlIHByZXZpb3VzIHRva2VuLg0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIG5hbWUgPSBt
YXRjaC5ncm91cCgxKQ0KICAgICsgICAgICAgICAgICAgICAga2V5d29yZCA9IF9nZXRfa2V5d29y
ZChuYW1lKQ0KICAgICsgICAgICAgICAgICAgICAgaWYga2V5d29yZDoNCiAgICArICAgICAgICAg
ICAgICAgICAgICAjIEl0J3MgYSBrZXl3b3JkDQogICAgKyAgICAgICAgICAgICAgICAgICAgdG9r
ZW4gPSBrZXl3b3JkDQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBKdW1wIHBhc3QgaXQNCiAg
ICArICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2guZW5kKCkNCiAgICArDQogICAgKyAgICAg
ICAgICAgICAgICBlbGlmIHRva2VuIG5vdCBpbiBfU1RSSU5HX0xFWDoNCiAgICArICAgICAgICAg
ICAgICAgICAgICAjIEl0J3MgYSBub24tY29uc3Qgc3ltYm9sLCBleGNlcHQgd2UgdHJhbnNsYXRl
IG4sIG0sIGFuZCB5DQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBpbnRvIHRoZSBjb3JyZXNw
b25kaW5nIGNvbnN0YW50IHN5bWJvbHMsIGxpa2UgdGhlIEMNCiAgICArICAgICAgICAgICAgICAg
ICAgICAjIGltcGxlbWVudGF0aW9uDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIGlm
ICIkIiBpbiBuYW1lOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAjIE1hY3JvIGV4cGFu
c2lvbiB3aXRoaW4gc3ltYm9sIG5hbWUNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSwgcywgaSA9IHNlbGYuX2V4cGFuZF9uYW1lKHMsIGkpDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgZWxzZToNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgaSA9IG1hdGNoLmVuZCgpDQog
ICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIHRva2VuID0gc2VsZi5jb25zdF9zeW1zW25h
bWVdIGlmIG5hbWUgaW4gU1RSX1RPX1RSSSBlbHNlIFwNCiAgICArICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fbG9va3VwX3N5bShuYW1lKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAg
IGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBJdCdzIGEgY2FzZSBvZiBtaXNzaW5n
IHF1b3Rlcy4gRm9yIGV4YW1wbGUsIHRoZQ0KICAgICsgICAgICAgICAgICAgICAgICAgICMgZm9s
bG93aW5nIGlzIGFjY2VwdGVkOg0KICAgICsgICAgICAgICAgICAgICAgICAgICMNCiAgICArICAg
ICAgICAgICAgICAgICAgICAjICAgbWVudSB1bnF1b3RlZF90aXRsZQ0KICAgICsgICAgICAgICAg
ICAgICAgICAgICMNCiAgICArICAgICAgICAgICAgICAgICAgICAjICAgY29uZmlnIEENCiAgICAr
ICAgICAgICAgICAgICAgICAgICAjICAgICAgIHRyaXN0YXRlIHVucXVvdGVkX3Byb21wdA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICMNCiAgICArICAgICAgICAgICAgICAgICAgICAjICAgZW5k
bWVudQ0KICAgICsgICAgICAgICAgICAgICAgICAgICMNCiAgICArICAgICAgICAgICAgICAgICAg
ICAjIE5hbWVkIGNob2ljZXMgKCdjaG9pY2UgRk9PJykgYWxzbyBlbmQgdXAgaGVyZS4NCiAgICAr
DQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gaXMgbm90IF9UX0NIT0lDRToNCiAg
ICArICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2Fybigic3R5bGU6IHF1b3RlcyByZWNv
bW1lbmRlZCBhcm91bmQgJ3t9JyBpbiAne30nIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgc2VsZi5fbGluZS5zdHJpcCgpKSwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSwgc2VsZi5fbGlu
ZW5yKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IG5hbWUNCiAgICAr
ICAgICAgICAgICAgICAgICAgICBpID0gbWF0Y2guZW5kKCkNCiAgICArDQogICAgKyAgICAgICAg
ICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAjIE5laXRoZXIgYSBrZXl3b3JkIG5vciBh
IG5vbi1jb25zdCBzeW1ib2wNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICAjIFdlIGFsd2F5
cyBzdHJpcCB3aGl0ZXNwYWNlIGFmdGVyIHRva2Vucywgc28gaXQgaXMgc2FmZSB0bw0KICAgICsg
ICAgICAgICAgICAgICAgIyBhc3N1bWUgdGhhdCBzW2ldIGlzIHRoZSBzdGFydCBvZiBhIHRva2Vu
IGhlcmUuDQogICAgKyAgICAgICAgICAgICAgICBjID0gc1tpXQ0KICAgICsNCiAgICArICAgICAg
ICAgICAgICAgIGlmIGMgaW4gIlwiJyI6DQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgIiQi
IG5vdCBpbiBzIGFuZCAiXFwiIG5vdCBpbiBzOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICAjIEZhc3QgcGF0aCBmb3IgbGluZXMgd2l0aG91dCAkIGFuZCBcLiBGaW5kIHRoZQ0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICAjIG1hdGNoaW5nIHF1b3RlLg0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICBlbmRfaSA9IHMuZmluZChjLCBpICsgMSkgKyAxDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIG5vdCBlbmRfaToNCiAgICArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCJ1bnRlcm1pbmF0ZWQgc3RyaW5nIikNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsID0gc1tpICsgMTplbmRfaSAtIDFdDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgIGkgPSBlbmRfaQ0KICAgICsgICAgICAgICAgICAgICAgICAgIGVs
c2U6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICMgU2xvdyBwYXRoDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgIHMsIGVuZF9pID0gc2VsZi5fZXhwYW5kX3N0cihzLCBpKQ0KICAg
ICsNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgIyBvcy5wYXRoLmV4cGFuZHZhcnMoKSBh
bmQgdGhlICRVTkFNRV9SRUxFQVNFIHJlcGxhY2UoKQ0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICAjIGlzIGEgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaGFjaywgd2hpY2ggc2hvdWxkIGJl
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICMgcmVhc29uYWJseSBzYWZlIGFzIGV4cGFu
ZHZhcnMoKSBsZWF2ZXMgcmVmZXJlbmNlcyB0bw0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICAjIHVuZGVmaW5lZCBlbnYuIHZhcnMuIGFzIGlzLg0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICAjDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlIHByZXByb2Nlc3NvciBm
dW5jdGlvbmFsaXR5IGNoYW5nZWQgaG93DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICMg
ZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSByZWZlcmVuY2VkLCB0byAkKEZPTykuDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IGV4cGFuZHZhcnMoc1tpICsgMTplbmRfaSAtIDFd
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2Uo
IiRVTkFNRV9SRUxFQVNFIiwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfVU5BTUVfUkVMRUFTRSkpDQogICAgKw0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICBpID0gZW5kX2kNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICAgICAg
IyBUaGlzIGlzIHRoZSBvbmx5IHBsYWNlIHdoZXJlIHdlIGRvbid0IHN1cnZpdmUgd2l0aCBhDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgIyBzaW5nbGUgdG9rZW4gb2YgbG9va2JhY2s6ICdvcHRp
b24gZW52PSJGT08iJyBkb2VzIG5vdA0KICAgICsgICAgICAgICAgICAgICAgICAgICMgcmVmZXIg
dG8gYSBjb25zdGFudCBzeW1ib2wgbmFtZWQgIkZPTyIuDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgdG9rZW4gPSBcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCBpZiB0b2tlbiBp
biBfU1RSSU5HX0xFWCBvciB0b2tlbnNbMF0gaXMgX1RfT1BUSU9OIFwNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBzZWxmLl9sb29rdXBfY29uc3Rfc3ltKHZhbCkNCiAgICArDQog
ICAgKyAgICAgICAgICAgICAgICBlbGlmIHMuc3RhcnRzd2l0aCgiJiYiLCBpKToNCiAgICArICAg
ICAgICAgICAgICAgICAgICB0b2tlbiA9IF9UX0FORA0KICAgICsgICAgICAgICAgICAgICAgICAg
IGkgKz0gMg0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIGVsaWYgcy5zdGFydHN3aXRoKCJ8
fCIsIGkpOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHRva2VuID0gX1RfT1INCiAgICArICAg
ICAgICAgICAgICAgICAgICBpICs9IDINCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBlbGlm
IGMgPT0gIj0iOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHRva2VuID0gX1RfRVFVQUwNCiAg
ICArICAgICAgICAgICAgICAgICAgICBpICs9IDENCiAgICArDQogICAgKyAgICAgICAgICAgICAg
ICBlbGlmIHMuc3RhcnRzd2l0aCgiIT0iLCBpKToNCiAgICArICAgICAgICAgICAgICAgICAgICB0
b2tlbiA9IF9UX1VORVFVQUwNCiAgICArICAgICAgICAgICAgICAgICAgICBpICs9IDINCiAgICAr
DQogICAgKyAgICAgICAgICAgICAgICBlbGlmIGMgPT0gIiEiOg0KICAgICsgICAgICAgICAgICAg
ICAgICAgIHRva2VuID0gX1RfTk9UDQogICAgKyAgICAgICAgICAgICAgICAgICAgaSArPSAxDQog
ICAgKw0KICAgICsgICAgICAgICAgICAgICAgZWxpZiBjID09ICIoIjoNCiAgICArICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IF9UX09QRU5fUEFSRU4NCiAgICArICAgICAgICAgICAgICAgICAg
ICBpICs9IDENCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBlbGlmIGMgPT0gIikiOg0KICAg
ICsgICAgICAgICAgICAgICAgICAgIHRva2VuID0gX1RfQ0xPU0VfUEFSRU4NCiAgICArICAgICAg
ICAgICAgICAgICAgICBpICs9IDENCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBlbGlmIGMg
PT0gIiMiOg0KICAgICsgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgKw0KICAgICsNCiAg
ICArICAgICAgICAgICAgICAgICMgVmVyeSByYXJlDQogICAgKw0KICAgICsgICAgICAgICAgICAg
ICAgZWxpZiBzLnN0YXJ0c3dpdGgoIjw9IiwgaSk6DQogICAgKyAgICAgICAgICAgICAgICAgICAg
dG9rZW4gPSBfVF9MRVNTX0VRVUFMDQogICAgKyAgICAgICAgICAgICAgICAgICAgaSArPSAyDQog
ICAgKw0KICAgICsgICAgICAgICAgICAgICAgZWxpZiBjID09ICI8IjoNCiAgICArICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IF9UX0xFU1MNCiAgICArICAgICAgICAgICAgICAgICAgICBpICs9
IDENCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBlbGlmIHMuc3RhcnRzd2l0aCgiPj0iLCBp
KToNCiAgICArICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IF9UX0dSRUFURVJfRVFVQUwNCiAg
ICArICAgICAgICAgICAgICAgICAgICBpICs9IDINCiAgICArDQogICAgKyAgICAgICAgICAgICAg
ICBlbGlmIGMgPT0gIj4iOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHRva2VuID0gX1RfR1JF
QVRFUg0KICAgICsgICAgICAgICAgICAgICAgICAgIGkgKz0gMQ0KICAgICsNCiAgICArDQogICAg
KyAgICAgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Bh
cnNlX2Vycm9yKCJ1bmtub3duIHRva2VucyBpbiBsaW5lIikNCiAgICArDQogICAgKw0KICAgICsg
ICAgICAgICAgICAgICAgIyBTa2lwIHRyYWlsaW5nIHdoaXRlc3BhY2UNCiAgICArICAgICAgICAg
ICAgICAgIHdoaWxlIGkgPCBsZW4ocykgYW5kIHNbaV0uaXNzcGFjZSgpOg0KICAgICsgICAgICAg
ICAgICAgICAgICAgIGkgKz0gMQ0KICAgICsNCiAgICArDQogICAgKyAgICAgICAgICAgICMgQWRk
IHRoZSB0b2tlbg0KICAgICsgICAgICAgICAgICB0b2tlbnMuYXBwZW5kKHRva2VuKQ0KICAgICsN
CiAgICArICAgICAgICAjIE5vbmUtdGVybWluYXRpbmcgdGhlIHRva2VuIGxpc3QgbWFrZXMgdG9r
ZW4gZmV0Y2hpbmcgc2ltcGxlci9mYXN0ZXINCiAgICArICAgICAgICB0b2tlbnMuYXBwZW5kKE5v
bmUpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiB0b2tlbnMNCiAgICArDQogICAgKyAgICAj
IEhlbHBlcnMgZm9yIHN5bnRheCBjaGVja2luZyBhbmQgdG9rZW4gZmV0Y2hpbmcuIFNlZSB0aGUN
CiAgICArICAgICMgJ0ludHJvIHRvIGV4cHJlc3Npb25zJyBzZWN0aW9uIGZvciB3aGF0IGEgY29u
c3RhbnQgc3ltYm9sIGlzLg0KICAgICsgICAgIw0KICAgICsgICAgIyBNb3JlIG9mIHRoZXNlIGNv
dWxkIGJlIGFkZGVkLCBidXQgdGhlIHNpbmdsZS11c2UgY2FzZXMgYXJlIGlubGluZWQgYXMgYW4N
CiAgICArICAgICMgb3B0aW1pemF0aW9uLg0KICAgICsNCiAgICArICAgIGRlZiBfZXhwZWN0X3N5
bShzZWxmKToNCiAgICArICAgICAgICB0b2tlbiA9IHNlbGYuX3Rva2Vuc1tzZWxmLl90b2tlbnNf
aV0NCiAgICArICAgICAgICBzZWxmLl90b2tlbnNfaSArPSAxDQogICAgKw0KICAgICsgICAgICAg
IGlmIHRva2VuLl9fY2xhc3NfXyBpcyBub3QgU3ltYm9sOg0KICAgICsgICAgICAgICAgICBzZWxm
Ll9wYXJzZV9lcnJvcigiZXhwZWN0ZWQgc3ltYm9sIikNCiAgICArDQogICAgKyAgICAgICAgcmV0
dXJuIHRva2VuDQogICAgKw0KICAgICsgICAgZGVmIF9leHBlY3Rfbm9uY29uc3Rfc3ltKHNlbGYp
Og0KICAgICsgICAgICAgICMgVXNlZCBmb3IgJ3NlbGVjdCcgYW5kICdpbXBseScgb25seS4gV2Ug
a25vdyB0aGUgdG9rZW4gaW5kaWNlcy4NCiAgICArDQogICAgKyAgICAgICAgdG9rZW4gPSBzZWxm
Ll90b2tlbnNbMV0NCiAgICArICAgICAgICBzZWxmLl90b2tlbnNfaSA9IDINCiAgICArDQogICAg
KyAgICAgICAgaWYgdG9rZW4uX19jbGFzc19fIGlzIG5vdCBTeW1ib2wgb3IgdG9rZW4uaXNfY29u
c3RhbnQ6DQogICAgKyAgICAgICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCJleHBlY3RlZCBub25j
b25zdGFudCBzeW1ib2wiKQ0KICAgICsNCiAgICArICAgICAgICByZXR1cm4gdG9rZW4NCiAgICAr
DQogICAgKyAgICBkZWYgX2V4cGVjdF9zdHJfYW5kX2VvbChzZWxmKToNCiAgICArICAgICAgICB0
b2tlbiA9IHNlbGYuX3Rva2Vuc1tzZWxmLl90b2tlbnNfaV0NCiAgICArICAgICAgICBzZWxmLl90
b2tlbnNfaSArPSAxDQogICAgKw0KICAgICsgICAgICAgIGlmIHRva2VuLl9fY2xhc3NfXyBpcyBu
b3Qgc3RyOg0KICAgICsgICAgICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiZXhwZWN0ZWQgc3Ry
aW5nIikNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5fdG9rZW5zW3NlbGYuX3Rva2Vuc19p
XSBpcyBub3QgTm9uZToNCiAgICArICAgICAgICAgICAgc2VsZi5fdHJhaWxpbmdfdG9rZW5zX2Vy
cm9yKCkNCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuIHRva2VuDQogICAgKw0KICAgICsgICAg
ZGVmIF9leHBlY3RfZXhwcl9hbmRfZW9sKHNlbGYpOg0KICAgICsgICAgICAgIGV4cHIgPSBzZWxm
Ll9wYXJzZV9leHByKFRydWUpDQogICAgKw0KICAgICsgICAgICAgIGlmIHNlbGYuX3Rva2Vuc1tz
ZWxmLl90b2tlbnNfaV0gaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgIHNlbGYuX3RyYWls
aW5nX3Rva2Vuc19lcnJvcigpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiBleHByDQogICAg
Kw0KICAgICsgICAgZGVmIF9jaGVja190b2tlbihzZWxmLCB0b2tlbik6DQogICAgKyAgICAgICAg
IyBJZiB0aGUgbmV4dCB0b2tlbiBpcyAndG9rZW4nLCByZW1vdmVzIGl0IGFuZCByZXR1cm5zIFRy
dWUNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5fdG9rZW5zW3NlbGYuX3Rva2Vuc19pXSBp
cyB0b2tlbjoNCiAgICArICAgICAgICAgICAgc2VsZi5fdG9rZW5zX2kgKz0gMQ0KICAgICsgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQ0KICAgICsgICAgICAgIHJldHVybiBGYWxzZQ0KICAgICsNCiAg
ICArICAgICMNCiAgICArICAgICMgUHJlcHJvY2Vzc29yIGxvZ2ljDQogICAgKyAgICAjDQogICAg
Kw0KICAgICsgICAgZGVmIF9wYXJzZV9hc3NpZ25tZW50KHNlbGYsIHMpOg0KICAgICsgICAgICAg
ICMgUGFyc2VzIGEgcHJlcHJvY2Vzc29yIHZhcmlhYmxlIGFzc2lnbm1lbnQsIHJlZ2lzdGVyaW5n
IHRoZSB2YXJpYWJsZQ0KICAgICsgICAgICAgICMgaWYgaXQgZG9lc24ndCBhbHJlYWR5IGV4aXN0
LiBBbHNvIHRha2VzIGNhcmUgb2YgYmFyZSBtYWNyb3Mgb24gbGluZXMNCiAgICArICAgICAgICAj
ICh3aGljaCBhcmUgYWxsb3dlZCwgYW5kIGNhbiBiZSB1c2VmdWwgZm9yIHRoZWlyIHNpZGUgZWZm
ZWN0cykuDQogICAgKw0KICAgICsgICAgICAgICMgRXhwYW5kIGFueSBtYWNyb3MgaW4gdGhlIGxl
ZnQtaGFuZCBzaWRlIG9mIHRoZSBhc3NpZ25tZW50ICh0aGUNCiAgICArICAgICAgICAjIHZhcmlh
YmxlIG5hbWUpDQogICAgKyAgICAgICAgcyA9IHMubHN0cmlwKCkNCiAgICArICAgICAgICBpID0g
MA0KICAgICsgICAgICAgIHdoaWxlIDE6DQogICAgKyAgICAgICAgICAgIGkgPSBfYXNzaWdubWVu
dF9saHNfZnJhZ21lbnRfbWF0Y2gocywgaSkuZW5kKCkNCiAgICArICAgICAgICAgICAgaWYgcy5z
dGFydHN3aXRoKCIkKCIsIGkpOg0KICAgICsgICAgICAgICAgICAgICAgcywgaSA9IHNlbGYuX2V4
cGFuZF9tYWNybyhzLCBpLCAoKSkNCiAgICArICAgICAgICAgICAgZWxzZToNCiAgICArICAgICAg
ICAgICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAgICAgIGlmIHMuaXNzcGFjZSgpOg0KICAg
ICsgICAgICAgICAgICAjIFdlIGFsc28gYWNjZXB0IGEgYmFyZSBtYWNybyBvbiBhIGxpbmUgKGUu
Zy4NCiAgICArICAgICAgICAgICAgIyAkKHdhcm5pbmctaWYsJChmb28pLG9wcykpLCBwcm92aWRl
ZCBpdCBleHBhbmRzIHRvIGEgYmxhbmsgc3RyaW5nDQogICAgKyAgICAgICAgICAgIHJldHVybg0K
ICAgICsNCiAgICArICAgICAgICAjIEFzc2lnbmVkIHZhcmlhYmxlDQogICAgKyAgICAgICAgbmFt
ZSA9IHNbOmldDQogICAgKw0KICAgICsNCiAgICArICAgICAgICAjIEV4dHJhY3QgYXNzaWdubWVu
dCBvcGVyYXRvciAoPSwgOj0sIG9yICs9KSBhbmQgdmFsdWUNCiAgICArICAgICAgICByaHNfbWF0
Y2ggPSBfYXNzaWdubWVudF9yaHNfbWF0Y2gocywgaSkNCiAgICArICAgICAgICBpZiBub3Qgcmhz
X21hdGNoOg0KICAgICsgICAgICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigic3ludGF4IGVycm9y
IikNCiAgICArDQogICAgKyAgICAgICAgb3AsIHZhbCA9IHJoc19tYXRjaC5ncm91cHMoKQ0KICAg
ICsNCiAgICArDQogICAgKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLnZhcmlhYmxlczoNCiAgICAr
ICAgICAgICAgICAgIyBBbHJlYWR5IHNlZW4gdmFyaWFibGUNCiAgICArICAgICAgICAgICAgdmFy
ID0gc2VsZi52YXJpYWJsZXNbbmFtZV0NCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAg
ICAgICAjIE5ldyB2YXJpYWJsZQ0KICAgICsgICAgICAgICAgICB2YXIgPSBWYXJpYWJsZSgpDQog
ICAgKyAgICAgICAgICAgIHZhci5rY29uZmlnID0gc2VsZg0KICAgICsgICAgICAgICAgICB2YXIu
bmFtZSA9IG5hbWUNCiAgICArICAgICAgICAgICAgdmFyLl9uX2V4cGFuc2lvbnMgPSAwDQogICAg
KyAgICAgICAgICAgIHNlbGYudmFyaWFibGVzW25hbWVdID0gdmFyDQogICAgKw0KICAgICsgICAg
ICAgICAgICAjICs9IGFjdHMgbGlrZSA9IG9uIHVuZGVmaW5lZCB2YXJpYWJsZXMgKGRlZmluZXMg
YSByZWN1cnNpdmUNCiAgICArICAgICAgICAgICAgIyB2YXJpYWJsZSkNCiAgICArICAgICAgICAg
ICAgaWYgb3AgPT0gIis9IjoNCiAgICArICAgICAgICAgICAgICAgIG9wID0gIj0iDQogICAgKw0K
ICAgICsgICAgICAgIGlmIG9wID09ICI9IjoNCiAgICArICAgICAgICAgICAgdmFyLmlzX3JlY3Vy
c2l2ZSA9IFRydWUNCiAgICArICAgICAgICAgICAgdmFyLnZhbHVlID0gdmFsDQogICAgKyAgICAg
ICAgZWxpZiBvcCA9PSAiOj0iOg0KICAgICsgICAgICAgICAgICB2YXIuaXNfcmVjdXJzaXZlID0g
RmFsc2UNCiAgICArICAgICAgICAgICAgdmFyLnZhbHVlID0gc2VsZi5fZXhwYW5kX3dob2xlKHZh
bCwgKCkpDQogICAgKyAgICAgICAgZWxzZTogICMgb3AgPT0gIis9Ig0KICAgICsgICAgICAgICAg
ICAjICs9IGRvZXMgaW1tZWRpYXRlIGV4cGFuc2lvbiBpZiB0aGUgdmFyaWFibGUgd2FzIGxhc3Qg
c2V0DQogICAgKyAgICAgICAgICAgICMgd2l0aCA6PQ0KICAgICsgICAgICAgICAgICB2YXIudmFs
dWUgKz0gIiAiICsgKHZhbCBpZiB2YXIuaXNfcmVjdXJzaXZlIGVsc2UNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHBhbmRfd2hvbGUodmFsLCAoKSkpDQogICAg
Kw0KICAgICsgICAgZGVmIF9leHBhbmRfd2hvbGUoc2VsZiwgcywgYXJncyk6DQogICAgKyAgICAg
ICAgIyBFeHBhbmRzIHByZXByb2Nlc3NvciBtYWNyb3MgaW4gYWxsIG9mICdzJy4gVXNlZCB3aGVu
ZXZlciB3ZSBkb24ndA0KICAgICsgICAgICAgICMgaGF2ZSB0byB3b3JyeSBhYm91dCBkZWxpbWl0
ZXJzLiBTZWUgX2V4cGFuZF9tYWNybygpIHJlLiB0aGUgJ2FyZ3MnDQogICAgKyAgICAgICAgIyBw
YXJhbWV0ZXIuDQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAgICMgUmV0dXJucyB0aGUgZXhw
YW5kZWQgc3RyaW5nLg0KICAgICsNCiAgICArICAgICAgICBpID0gMA0KICAgICsgICAgICAgIHdo
aWxlIDE6DQogICAgKyAgICAgICAgICAgIGkgPSBzLmZpbmQoIiQoIiwgaSkNCiAgICArICAgICAg
ICAgICAgaWYgaSA9PSAtMToNCiAgICArICAgICAgICAgICAgICAgIGJyZWFrDQogICAgKyAgICAg
ICAgICAgIHMsIGkgPSBzZWxmLl9leHBhbmRfbWFjcm8ocywgaSwgYXJncykNCiAgICArICAgICAg
ICByZXR1cm4gcw0KICAgICsNCiAgICArICAgIGRlZiBfZXhwYW5kX25hbWUoc2VsZiwgcywgaSk6
DQogICAgKyAgICAgICAgIyBFeHBhbmRzIGEgc3ltYm9sIG5hbWUgc3RhcnRpbmcgYXQgaW5kZXgg
J2knIGluICdzJy4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBSZXR1cm5zIHRoZSBl
eHBhbmRlZCBuYW1lLCB0aGUgZXhwYW5kZWQgJ3MnIChpbmNsdWRpbmcgdGhlIHBhcnQNCiAgICAr
ICAgICAgICAjIGJlZm9yZSB0aGUgbmFtZSksIGFuZCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNo
YXJhY3RlciBpbiB0aGUgbmV4dA0KICAgICsgICAgICAgICMgdG9rZW4gYWZ0ZXIgdGhlIG5hbWUu
DQogICAgKw0KICAgICsgICAgICAgIHMsIGVuZF9pID0gc2VsZi5fZXhwYW5kX25hbWVfaXRlcihz
LCBpKQ0KICAgICsgICAgICAgIG5hbWUgPSBzW2k6ZW5kX2ldDQogICAgKyAgICAgICAgIyBpc3Nw
YWNlKCkgaXMgRmFsc2UgZm9yIGVtcHR5IHN0cmluZ3MNCiAgICArICAgICAgICBpZiBub3QgbmFt
ZS5zdHJpcCgpOg0KICAgICsgICAgICAgICAgICAjIEF2b2lkIGNyZWF0aW5nIGEgS2NvbmZpZyBz
eW1ib2wgd2l0aCBhIGJsYW5rIG5hbWUuIEl0J3MgYWxtb3N0DQogICAgKyAgICAgICAgICAgICMg
Z3VhcmFudGVlZCB0byBiZSBhbiBlcnJvci4NCiAgICArICAgICAgICAgICAgc2VsZi5fcGFyc2Vf
ZXJyb3IoIm1hY3JvIGV4cGFuZGVkIHRvIGJsYW5rIHN0cmluZyIpDQogICAgKw0KICAgICsgICAg
ICAgICMgU2tpcCB0cmFpbGluZyB3aGl0ZXNwYWNlDQogICAgKyAgICAgICAgd2hpbGUgZW5kX2kg
PCBsZW4ocykgYW5kIHNbZW5kX2ldLmlzc3BhY2UoKToNCiAgICArICAgICAgICAgICAgZW5kX2kg
Kz0gMQ0KICAgICsNCiAgICArICAgICAgICByZXR1cm4gbmFtZSwgcywgZW5kX2kNCiAgICArDQog
ICAgKyAgICBkZWYgX2V4cGFuZF9uYW1lX2l0ZXIoc2VsZiwgcywgaSk6DQogICAgKyAgICAgICAg
IyBFeHBhbmRzIGEgc3ltYm9sIG5hbWUgc3RhcnRpbmcgYXQgaW5kZXggJ2knIGluICdzJy4NCiAg
ICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBSZXR1cm5zIHRoZSBleHBhbmRlZCAncycgKGlu
Y2x1ZGluZyB0aGUgcGFydCBiZWZvcmUgdGhlIG5hbWUpIGFuZCB0aGUNCiAgICArICAgICAgICAj
IGluZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGFuZGVkIG5hbWUgaW4g
J3MnLg0KICAgICsNCiAgICArICAgICAgICB3aGlsZSAxOg0KICAgICsgICAgICAgICAgICBtYXRj
aCA9IF9uYW1lX3NwZWNpYWxfc2VhcmNoKHMsIGkpDQogICAgKw0KICAgICsgICAgICAgICAgICBp
ZiBtYXRjaC5ncm91cCgpID09ICIkKCI6DQogICAgKyAgICAgICAgICAgICAgICBzLCBpID0gc2Vs
Zi5fZXhwYW5kX21hY3JvKHMsIG1hdGNoLnN0YXJ0KCksICgpKQ0KICAgICsgICAgICAgICAgICBl
bHNlOg0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIChzLCBtYXRjaC5zdGFydCgpKQ0KICAg
ICsNCiAgICArICAgIGRlZiBfZXhwYW5kX3N0cihzZWxmLCBzLCBpKToNCiAgICArICAgICAgICAj
IEV4cGFuZHMgYSBxdW90ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0IGluZGV4ICdpJyBpbiAncycuIEhh
bmRsZXMgYm90aA0KICAgICsgICAgICAgICMgYmFja3NsYXNoIGVzY2FwZXMgYW5kIG1hY3JvIGV4
cGFuc2lvbi4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBSZXR1cm5zIHRoZSBleHBh
bmRlZCAncycgKGluY2x1ZGluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHN0cmluZykgYW5kDQogICAg
KyAgICAgICAgIyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgZXhw
YW5kZWQgc3RyaW5nIGluICdzJy4NCiAgICArDQogICAgKyAgICAgICAgcXVvdGUgPSBzW2ldDQog
ICAgKyAgICAgICAgaSArPSAxICAjIFNraXAgb3ZlciBpbml0aWFsICIvJw0KICAgICsgICAgICAg
IHdoaWxlIDE6DQogICAgKyAgICAgICAgICAgIG1hdGNoID0gX3N0cmluZ19zcGVjaWFsX3NlYXJj
aChzLCBpKQ0KICAgICsgICAgICAgICAgICBpZiBub3QgbWF0Y2g6DQogICAgKyAgICAgICAgICAg
ICAgICBzZWxmLl9wYXJzZV9lcnJvcigidW50ZXJtaW5hdGVkIHN0cmluZyIpDQogICAgKw0KICAg
ICsNCiAgICArICAgICAgICAgICAgaWYgbWF0Y2guZ3JvdXAoKSA9PSBxdW90ZToNCiAgICArICAg
ICAgICAgICAgICAgICMgRm91bmQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nDQogICAgKyAgICAgICAg
ICAgICAgICByZXR1cm4gKHMsIG1hdGNoLmVuZCgpKQ0KICAgICsNCiAgICArICAgICAgICAgICAg
ZWxpZiBtYXRjaC5ncm91cCgpID09ICJcXCI6DQogICAgKyAgICAgICAgICAgICAgICAjIFJlcGxh
Y2UgJ1x4JyB3aXRoICd4Jy4gJ2knIGVuZHMgdXAgcG9pbnRpbmcgdG8gdGhlIGNoYXJhY3Rlcg0K
ICAgICsgICAgICAgICAgICAgICAgIyBhZnRlciAneCcsIHdoaWNoIGFsbG93cyBtYWNyb3MgdG8g
YmUgY2FuY2VsZWQgd2l0aCAnXCQoZm9vKScuDQogICAgKyAgICAgICAgICAgICAgICBpID0gbWF0
Y2guZW5kKCkNCiAgICArICAgICAgICAgICAgICAgIHMgPSBzWzptYXRjaC5zdGFydCgpXSArIHNb
aTpdDQogICAgKw0KICAgICsgICAgICAgICAgICBlbGlmIG1hdGNoLmdyb3VwKCkgPT0gIiQoIjoN
CiAgICArICAgICAgICAgICAgICAgICMgQSBtYWNybyBjYWxsIHdpdGhpbiB0aGUgc3RyaW5nDQog
ICAgKyAgICAgICAgICAgICAgICBzLCBpID0gc2VsZi5fZXhwYW5kX21hY3JvKHMsIG1hdGNoLnN0
YXJ0KCksICgpKQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxzZToNCiAgICArICAgICAgICAg
ICAgICAgICMgQSAnIHF1b3RlIHdpdGhpbiAiIHF1b3RlcyBvciB2aWNlIHZlcnNhDQogICAgKyAg
ICAgICAgICAgICAgICBpICs9IDENCiAgICArDQogICAgKyAgICBkZWYgX2V4cGFuZF9tYWNybyhz
ZWxmLCBzLCBpLCBhcmdzKToNCiAgICArICAgICAgICAjIEV4cGFuZHMgYSBtYWNybyBzdGFydGlu
ZyBhdCBpbmRleCAnaScgaW4gJ3MnLiBJZiB0aGlzIG1hY3JvIHJlc3VsdGVkDQogICAgKyAgICAg
ICAgIyBmcm9tIHRoZSBleHBhbnNpb24gb2YgYW5vdGhlciBtYWNybywgJ2FyZ3MnIGhvbGRzIHRo
ZSBhcmd1bWVudHMNCiAgICArICAgICAgICAjIHBhc3NlZCB0byB0aGF0IG1hY3JvLg0KICAgICsg
ICAgICAgICMNCiAgICArICAgICAgICAjIFJldHVybnMgdGhlIGV4cGFuZGVkICdzJyAoaW5jbHVk
aW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgbWFjcm8pIGFuZA0KICAgICsgICAgICAgICMgdGhlIGlu
ZGV4IG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGV4cGFuZGVkIG1hY3JvIGluICdz
Jy4NCiAgICArDQogICAgKyAgICAgICAgc3RhcnQgPSBpDQogICAgKyAgICAgICAgaSArPSAyICAj
IFNraXAgb3ZlciAiJCgiDQogICAgKw0KICAgICsgICAgICAgICMgU3RhcnQgb2YgY3VycmVudCBt
YWNybyBhcmd1bWVudA0KICAgICsgICAgICAgIGFyZ19zdGFydCA9IGkNCiAgICArDQogICAgKyAg
ICAgICAgIyBBcmd1bWVudHMgb2YgdGhpcyBtYWNybyBjYWxsDQogICAgKyAgICAgICAgbmV3X2Fy
Z3MgPSBbXQ0KICAgICsNCiAgICArICAgICAgICB3aGlsZSAxOg0KICAgICsgICAgICAgICAgICBt
YXRjaCA9IF9tYWNyb19zcGVjaWFsX3NlYXJjaChzLCBpKQ0KICAgICsgICAgICAgICAgICBpZiBu
b3QgbWF0Y2g6DQogICAgKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigibWlzc2lu
ZyBlbmQgcGFyZW50aGVzaXMgaW4gbWFjcm8gZXhwYW5zaW9uIikNCiAgICArDQogICAgKw0KICAg
ICsgICAgICAgICAgICBpZiBtYXRjaC5ncm91cCgpID09ICIpIjoNCiAgICArICAgICAgICAgICAg
ICAgICMgRm91bmQgdGhlIGVuZCBvZiB0aGUgbWFjcm8NCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICBuZXdfYXJncy5hcHBlbmQoc1thcmdfc3RhcnQ6bWF0Y2guc3RhcnQoKV0pDQogICAgKw0K
ICAgICsgICAgICAgICAgICAgICAgcHJlZml4ID0gc1s6c3RhcnRdDQogICAgKw0KICAgICsgICAg
ICAgICAgICAgICAgIyAkKDEpIGlzIHJlcGxhY2VkIGJ5IHRoZSBmaXJzdCBhcmd1bWVudCB0byB0
aGUgZnVuY3Rpb24sIGV0Yy4sDQogICAgKyAgICAgICAgICAgICAgICAjIHByb3ZpZGVkIGF0IGxl
YXN0IHRoYXQgbWFueSBhcmd1bWVudHMgd2VyZSBwYXNzZWQNCiAgICArDQogICAgKyAgICAgICAg
ICAgICAgICB0cnk6DQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBEb2VzIHRoZSBtYWNybyBs
b29rIGxpa2UgYW4gaW50ZWdlciwgd2l0aCBhIGNvcnJlc3BvbmRpbmcNCiAgICArICAgICAgICAg
ICAgICAgICAgICAjIGFyZ3VtZW50PyBJZiBzbywgZXhwYW5kIGl0IHRvIHRoZSB2YWx1ZSBvZiB0
aGUgYXJndW1lbnQuDQogICAgKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ICs9IGFyZ3NbaW50
KG5ld19hcmdzWzBdKV0NCiAgICArICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwg
SW5kZXhFcnJvcik6DQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBSZWd1bGFyIHZhcmlhYmxl
cyBhcmUganVzdCBmdW5jdGlvbnMgd2l0aG91dCBhcmd1bWVudHMsDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgIyBhbmQgYWxzbyBnbyB0aHJvdWdoIHRoZSBmdW5jdGlvbiB2YWx1ZSBwYXRoDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgcHJlZml4ICs9IHNlbGYuX2ZuX3ZhbChuZXdfYXJncykN
CiAgICArDQogICAgKyAgICAgICAgICAgICAgICByZXR1cm4gKHByZWZpeCArIHNbbWF0Y2guZW5k
KCk6XSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHByZWZpeCkpDQogICAgKw0K
ICAgICsgICAgICAgICAgICBlbGlmIG1hdGNoLmdyb3VwKCkgPT0gIiwiOg0KICAgICsgICAgICAg
ICAgICAgICAgIyBGb3VuZCB0aGUgZW5kIG9mIGEgbWFjcm8gYXJndW1lbnQNCiAgICArICAgICAg
ICAgICAgICAgIG5ld19hcmdzLmFwcGVuZChzW2FyZ19zdGFydDptYXRjaC5zdGFydCgpXSkNCiAg
ICArICAgICAgICAgICAgICAgIGFyZ19zdGFydCA9IGkgPSBtYXRjaC5lbmQoKQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgZWxzZTogICMgbWF0Y2guZ3JvdXAoKSA9PSAiJCgiDQogICAgKyAgICAg
ICAgICAgICAgICAjIEEgbmVzdGVkIG1hY3JvIGNhbGwgd2l0aGluIHRoZSBtYWNybw0KICAgICsg
ICAgICAgICAgICAgICAgcywgaSA9IHNlbGYuX2V4cGFuZF9tYWNybyhzLCBtYXRjaC5zdGFydCgp
LCBhcmdzKQ0KICAgICsNCiAgICArICAgIGRlZiBfZm5fdmFsKHNlbGYsIGFyZ3MpOg0KICAgICsg
ICAgICAgICMgUmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIGZ1bmN0aW9uIGFyZ3Nb
MF0gd2l0aCB0aGUgYXJndW1lbnRzDQogICAgKyAgICAgICAgIyBhcmdzWzEuLmxlbihhcmdzKS0x
XS4gUGxhaW4gdmFyaWFibGVzIGFyZSB0cmVhdGVkIGFzIGZ1bmN0aW9ucw0KICAgICsgICAgICAg
ICMgd2l0aG91dCBhcmd1bWVudHMuDQogICAgKw0KICAgICsgICAgICAgIGZuID0gYXJnc1swXQ0K
ICAgICsNCiAgICArICAgICAgICBpZiBmbiBpbiBzZWxmLnZhcmlhYmxlczoNCiAgICArICAgICAg
ICAgICAgdmFyID0gc2VsZi52YXJpYWJsZXNbZm5dDQogICAgKw0KICAgICsgICAgICAgICAgICBp
ZiBsZW4oYXJncykgPT0gMToNCiAgICArICAgICAgICAgICAgICAgICMgUGxhaW4gdmFyaWFibGUN
CiAgICArICAgICAgICAgICAgICAgIGlmIHZhci5fbl9leHBhbnNpb25zOg0KICAgICsgICAgICAg
ICAgICAgICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCJQcmVwcm9jZXNzb3IgdmFyaWFibGUge30g
cmVjdXJzaXZlbHkgIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJyZWZlcmVuY2VzIGl0c2VsZiIuZm9ybWF0KHZhci5uYW1lKSkNCiAgICArICAgICAgICAgICAg
ZWxpZiB2YXIuX25fZXhwYW5zaW9ucyA+IDEwMDoNCiAgICArICAgICAgICAgICAgICAgICMgQWxs
b3cgZnVuY3Rpb25zIHRvIGNhbGwgdGhlbXNlbHZlcywgYnV0IGd1ZXNzIHRoYXQgZnVuY3Rpb25z
DQogICAgKyAgICAgICAgICAgICAgICAjIHRoYXQgYXJlIG92ZXJseSByZWN1cnNpdmUgYXJlIHN0
dWNrDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiUHJlcHJvY2Vzc29y
IGZ1bmN0aW9uIHt9IHNlZW1zIHN0dWNrICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJpbiBpbmZpbml0ZSByZWN1cnNpb24iLmZvcm1hdCh2YXIubmFtZSkpDQogICAg
Kw0KICAgICsgICAgICAgICAgICB2YXIuX25fZXhwYW5zaW9ucyArPSAxDQogICAgKyAgICAgICAg
ICAgIHJlcyA9IHNlbGYuX2V4cGFuZF93aG9sZShzZWxmLnZhcmlhYmxlc1tmbl0udmFsdWUsIGFy
Z3MpDQogICAgKyAgICAgICAgICAgIHZhci5fbl9leHBhbnNpb25zIC09IDENCiAgICArICAgICAg
ICAgICAgcmV0dXJuIHJlcw0KICAgICsNCiAgICArICAgICAgICBpZiBmbiBpbiBzZWxmLl9mdW5j
dGlvbnM6DQogICAgKyAgICAgICAgICAgICMgQnVpbHQtaW4gb3IgdXNlci1kZWZpbmVkIGZ1bmN0
aW9uDQogICAgKw0KICAgICsgICAgICAgICAgICBweV9mbiwgbWluX2FyZywgbWF4X2FyZyA9IHNl
bGYuX2Z1bmN0aW9uc1tmbl0NCiAgICArDQogICAgKyAgICAgICAgICAgIGlmIGxlbihhcmdzKSAt
IDEgPCBtaW5fYXJnIG9yIFwNCiAgICArICAgICAgICAgICAgICAgKG1heF9hcmcgaXMgbm90IE5v
bmUgYW5kIGxlbihhcmdzKSAtIDEgPiBtYXhfYXJnKToNCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICBpZiBtaW5fYXJnID09IG1heF9hcmc6DQogICAgKyAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWRfYXJncyA9IG1pbl9hcmcNCiAgICArICAgICAgICAgICAgICAgIGVsaWYgbWF4X2FyZyBp
cyBOb25lOg0KICAgICsgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3MgPSAie30gb3Ig
bW9yZSIuZm9ybWF0KG1pbl9hcmcpDQogICAgKyAgICAgICAgICAgICAgICBlbHNlOg0KICAgICsg
ICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3MgPSAie30te30iLmZvcm1hdChtaW5fYXJn
LCBtYXhfYXJnKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHJhaXNlIEtjb25maWdFcnJv
cigie306e306IGJhZCBudW1iZXIgb2YgYXJndW1lbnRzIGluIGNhbGwgIg0KICAgICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byB7fSwgZXhwZWN0ZWQge30sIGdvdCB7fSIN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHNlbGYuX2Zp
bGVuYW1lLCBzZWxmLl9saW5lbnIsIGZuLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfYXJncywgbGVuKGFyZ3MpIC0gMSkpDQogICAgKw0K
ICAgICsgICAgICAgICAgICByZXR1cm4gcHlfZm4oc2VsZiwgKmFyZ3MpDQogICAgKw0KICAgICsg
ICAgICAgICMgRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSB0cmllZCBsYXN0DQogICAgKyAgICAg
ICAgaWYgZm4gaW4gb3MuZW52aXJvbjoNCiAgICArICAgICAgICAgICAgc2VsZi5lbnZfdmFycy5h
ZGQoZm4pDQogICAgKyAgICAgICAgICAgIHJldHVybiBvcy5lbnZpcm9uW2ZuXQ0KICAgICsNCiAg
ICArICAgICAgICByZXR1cm4gIiINCiAgICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFBhcnNp
bmcNCiAgICArICAgICMNCiAgICArDQogICAgKyAgICBkZWYgX21ha2VfYW5kKHNlbGYsIGUxLCBl
Mik6DQogICAgKyAgICAgICAgIyBDb25zdHJ1Y3RzIGFuIEFORCAoJiYpIGV4cHJlc3Npb24uIFBl
cmZvcm1zIHRyaXZpYWwgc2ltcGxpZmljYXRpb24uDQogICAgKw0KICAgICsgICAgICAgIGlmIGUx
IGlzIHNlbGYueToNCiAgICArICAgICAgICAgICAgcmV0dXJuIGUyDQogICAgKw0KICAgICsgICAg
ICAgIGlmIGUyIGlzIHNlbGYueToNCiAgICArICAgICAgICAgICAgcmV0dXJuIGUxDQogICAgKw0K
ICAgICsgICAgICAgIGlmIGUxIGlzIHNlbGYubiBvciBlMiBpcyBzZWxmLm46DQogICAgKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLm4NCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuIChBTkQsIGUx
LCBlMikNCiAgICArDQogICAgKyAgICBkZWYgX21ha2Vfb3Ioc2VsZiwgZTEsIGUyKToNCiAgICAr
ICAgICAgICAjIENvbnN0cnVjdHMgYW4gT1IgKHx8KSBleHByZXNzaW9uLiBQZXJmb3JtcyB0cml2
aWFsIHNpbXBsaWZpY2F0aW9uLg0KICAgICsNCiAgICArICAgICAgICBpZiBlMSBpcyBzZWxmLm46
DQogICAgKyAgICAgICAgICAgIHJldHVybiBlMg0KICAgICsNCiAgICArICAgICAgICBpZiBlMiBp
cyBzZWxmLm46DQogICAgKyAgICAgICAgICAgIHJldHVybiBlMQ0KICAgICsNCiAgICArICAgICAg
ICBpZiBlMSBpcyBzZWxmLnkgb3IgZTIgaXMgc2VsZi55Og0KICAgICsgICAgICAgICAgICByZXR1
cm4gc2VsZi55DQogICAgKw0KICAgICsgICAgICAgIHJldHVybiAoT1IsIGUxLCBlMikNCiAgICAr
DQogICAgKyAgICBkZWYgX3BhcnNlX2Jsb2NrKHNlbGYsIGVuZF90b2tlbiwgcGFyZW50LCBwcmV2
KToNCiAgICArICAgICAgICAjIFBhcnNlcyBhIGJsb2NrLCB3aGljaCBpcyB0aGUgY29udGVudHMg
b2YgZWl0aGVyIGEgZmlsZSBvciBhbiBpZiwNCiAgICArICAgICAgICAjIG1lbnUsIG9yIGNob2lj
ZSBzdGF0ZW1lbnQuDQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAgICMgZW5kX3Rva2VuOg0K
ICAgICsgICAgICAgICMgICBUaGUgdG9rZW4gdGhhdCBlbmRzIHRoZSBibG9jaywgZS5nLiBfVF9F
TkRJRiAoImVuZGlmIikgZm9yIGlmcy4NCiAgICArICAgICAgICAjICAgTm9uZSBmb3IgZmlsZXMu
DQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAgICMgcGFyZW50Og0KICAgICsgICAgICAgICMg
ICBUaGUgcGFyZW50IG1lbnUgbm9kZSwgY29ycmVzcG9uZGluZyB0byBhIG1lbnUsIENob2ljZSwg
b3IgJ2lmJy4NCiAgICArICAgICAgICAjICAgJ2lmJ3MgYXJlIGZsYXR0ZW5lZCBhZnRlciBwYXJz
aW5nLg0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjIHByZXY6DQogICAgKyAgICAgICAg
IyAgIFRoZSBwcmV2aW91cyBtZW51IG5vZGUuIE5ldyBub2RlcyB3aWxsIGJlIGFkZGVkIGFmdGVy
IHRoaXMgb25lIChieQ0KICAgICsgICAgICAgICMgICBtb2RpZnlpbmcgdGhlaXIgJ25leHQnIHBv
aW50ZXIpLg0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjICAgJ3ByZXYnIGlzIHJldXNl
ZCB0byBwYXJzZSBhIGxpc3Qgb2YgY2hpbGQgbWVudSBub2RlcyAoZm9yIGEgbWVudSBvcg0KICAg
ICsgICAgICAgICMgICBDaG9pY2UpOiBBZnRlciBwYXJzaW5nIHRoZSBjaGlsZHJlbiwgdGhlICdu
ZXh0JyBwb2ludGVyIGlzIGFzc2lnbmVkDQogICAgKyAgICAgICAgIyAgIHRvIHRoZSAnbGlzdCcg
cG9pbnRlciB0byAidGlsdCB1cCIgdGhlIGNoaWxkcmVuIGFib3ZlIHRoZSBub2RlLg0KICAgICsg
ICAgICAgICMNCiAgICArICAgICAgICAjIFJldHVybnMgdGhlIGZpbmFsIG1lbnUgbm9kZSBpbiB0
aGUgYmxvY2sgKG9yICdwcmV2JyBpZiB0aGUgYmxvY2sgaXMNCiAgICArICAgICAgICAjIGVtcHR5
KS4gVGhpcyBhbGxvd3MgY2hhaW5pbmcuDQogICAgKw0KICAgICsgICAgICAgIHdoaWxlIHNlbGYu
X25leHRfbGluZSgpOg0KICAgICsgICAgICAgICAgICB0MCA9IHNlbGYuX3Rva2Vuc1swXQ0KICAg
ICsNCiAgICArICAgICAgICAgICAgaWYgdDAgaXMgX1RfQ09ORklHIG9yIHQwIGlzIF9UX01FTlVD
T05GSUc6DQogICAgKyAgICAgICAgICAgICAgICAjIFRoZSB0b2tlbml6ZXIgYWxsb2NhdGVzIFN5
bWJvbCBvYmplY3RzIGZvciB1cw0KICAgICsgICAgICAgICAgICAgICAgc3ltID0gc2VsZi5fdG9r
ZW5zWzFdDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgaWYgc3ltLl9fY2xhc3NfXyBpcyBu
b3QgU3ltYm9sIG9yIHN5bS5pc19jb25zdGFudDoNCiAgICArICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9wYXJzZV9lcnJvcigibWlzc2luZyBvciBiYWQgc3ltYm9sIG5hbWUiKQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgICAgIGlmIHNlbGYuX3Rva2Vuc1syXSBpcyBub3QgTm9uZToNCiAgICAr
ICAgICAgICAgICAgICAgICAgICBzZWxmLl90cmFpbGluZ190b2tlbnNfZXJyb3IoKQ0KICAgICsN
CiAgICArICAgICAgICAgICAgICAgIHNlbGYuZGVmaW5lZF9zeW1zLmFwcGVuZChzeW0pDQogICAg
Kw0KICAgICsgICAgICAgICAgICAgICAgbm9kZSA9IE1lbnVOb2RlKCkNCiAgICArICAgICAgICAg
ICAgICAgIG5vZGUua2NvbmZpZyA9IHNlbGYNCiAgICArICAgICAgICAgICAgICAgIG5vZGUuaXRl
bSA9IHN5bQ0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5pc19tZW51Y29uZmlnID0gKHQwIGlz
IF9UX01FTlVDT05GSUcpDQogICAgKyAgICAgICAgICAgICAgICBub2RlLnByb21wdCA9IG5vZGUu
aGVscCA9IG5vZGUubGlzdCA9IE5vbmUNCiAgICArICAgICAgICAgICAgICAgIG5vZGUucGFyZW50
ID0gcGFyZW50DQogICAgKyAgICAgICAgICAgICAgICBub2RlLmZpbGVuYW1lID0gc2VsZi5fZmls
ZW5hbWUNCiAgICArICAgICAgICAgICAgICAgIG5vZGUubGluZW5yID0gc2VsZi5fbGluZW5yDQog
ICAgKyAgICAgICAgICAgICAgICBub2RlLmluY2x1ZGVfcGF0aCA9IHNlbGYuX2luY2x1ZGVfcGF0
aA0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHN5bS5ub2Rlcy5hcHBlbmQobm9kZSkNCiAg
ICArDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9wcm9wZXJ0aWVzKG5vZGUpDQog
ICAgKw0KICAgICsgICAgICAgICAgICAgICAgaWYgbm9kZS5pc19tZW51Y29uZmlnIGFuZCBub3Qg
bm9kZS5wcm9tcHQ6DQogICAgKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FybigidGhlIG1l
bnVjb25maWcgc3ltYm9sIHt9IGhhcyBubyBwcm9tcHQiDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAuZm9ybWF0KF9uYW1lX2FuZF9sb2Moc3ltKSkpDQogICAgKw0KICAgICsg
ICAgICAgICAgICAgICAgIyBFcXVpdmFsZW50IHRvDQogICAgKyAgICAgICAgICAgICAgICAjDQog
ICAgKyAgICAgICAgICAgICAgICAjICAgcHJldi5uZXh0ID0gbm9kZQ0KICAgICsgICAgICAgICAg
ICAgICAgIyAgIHByZXYgPSBub2RlDQogICAgKyAgICAgICAgICAgICAgICAjDQogICAgKyAgICAg
ICAgICAgICAgICAjIGR1ZSB0byB0cmlja3kgUHl0aG9uIHNlbWFudGljcy4gVGhlIG9yZGVyIG1h
dHRlcnMuDQogICAgKyAgICAgICAgICAgICAgICBwcmV2Lm5leHQgPSBwcmV2ID0gbm9kZQ0KICAg
ICsNCiAgICArICAgICAgICAgICAgZWxpZiB0MCBpcyBOb25lOg0KICAgICsgICAgICAgICAgICAg
ICAgIyBCbGFuayBsaW5lDQogICAgKyAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgZWxpZiB0MCBpbiBfU09VUkNFX1RPS0VOUzoNCiAgICArICAgICAgICAg
ICAgICAgIHBhdHRlcm4gPSBzZWxmLl9leHBlY3Rfc3RyX2FuZF9lb2woKQ0KICAgICsNCiAgICAr
ICAgICAgICAgICAgICAgIGlmIHQwIGluIF9SRUxfU09VUkNFX1RPS0VOUzoNCiAgICArICAgICAg
ICAgICAgICAgICAgICAjIFJlbGF0aXZlIHNvdXJjZQ0KICAgICsgICAgICAgICAgICAgICAgICAg
IHBhdHRlcm4gPSBqb2luKGRpcm5hbWUoc2VsZi5fZmlsZW5hbWUpLCBwYXR0ZXJuKQ0KICAgICsN
CiAgICArICAgICAgICAgICAgICAgICMgLSBnbG9iKCkgZG9lc24ndCBzdXBwb3J0IGdsb2JiaW5n
IHJlbGF0aXZlIHRvIGEgZGlyZWN0b3J5LCBzbw0KICAgICsgICAgICAgICAgICAgICAgIyAgIHdl
IG5lZWQgdG8gcHJlcGVuZCAkc3JjdHJlZSB0byAncGF0dGVybicuIFVzZSBqb2luKCkNCiAgICAr
ICAgICAgICAgICAgICAgICMgICBpbnN0ZWFkIG9mICcrJyBzbyB0aGF0IGFuIGFic29sdXRlIHBh
dGggaW4gJ3BhdHRlcm4nIGlzDQogICAgKyAgICAgICAgICAgICAgICAjICAgcHJlc2VydmVkLg0K
ICAgICsgICAgICAgICAgICAgICAgIw0KICAgICsgICAgICAgICAgICAgICAgIyAtIFNvcnQgdGhl
IGdsb2IgcmVzdWx0cyB0byBlbnN1cmUgYSBjb25zaXN0ZW50IG9yZGVyaW5nIG9mDQogICAgKyAg
ICAgICAgICAgICAgICAjICAgS2NvbmZpZyBzeW1ib2xzLCB3aGljaCBpbmRpcmVjdGx5IGVuc3Vy
ZXMgYSBjb25zaXN0ZW50DQogICAgKyAgICAgICAgICAgICAgICAjICAgb3JkZXJpbmcgaW4gZS5n
LiAuY29uZmlnIGZpbGVzDQogICAgKyAgICAgICAgICAgICAgICBmaWxlbmFtZXMgPSBzb3J0ZWQo
aWdsb2Ioam9pbihzZWxmLl9zcmN0cmVlX3ByZWZpeCwgcGF0dGVybikpKQ0KICAgICsNCiAgICAr
ICAgICAgICAgICAgICAgIGlmIG5vdCBmaWxlbmFtZXMgYW5kIHQwIGluIF9PQkxfU09VUkNFX1RP
S0VOUzoNCiAgICArICAgICAgICAgICAgICAgICAgICByYWlzZSBLY29uZmlnRXJyb3IoDQogICAg
KyAgICAgICAgICAgICAgICAgICAgICAgICJ7fTp7fTogJ3t9JyBub3QgZm91bmQgKGluICd7fScp
LiBDaGVjayB0aGF0ICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgImVudmlyb25tZW50
IHZhcmlhYmxlcyBhcmUgc2V0IGNvcnJlY3RseSAoZS5nLiAiDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgICAgICIkc3JjdHJlZSwgd2hpY2ggaXMge30pLiBBbHNvIG5vdGUgdGhhdCB1bnNldCAi
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICJlbnZpcm9ubWVudCB2YXJpYWJsZXMgZXhw
YW5kIHRvIHRoZSBlbXB0eSBzdHJpbmcuIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAu
Zm9ybWF0KHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9saW5lbnIsIHBhdHRlcm4sDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbGluZS5zdHJpcCgpLA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXQgdG8gJ3t9JyIuZm9ybWF0KHNlbGYuc3Jj
dHJlZSkNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5z
cmN0cmVlIGVsc2UgInVuc2V0IG9yIGJsYW5rIikpDQogICAgKw0KICAgICsgICAgICAgICAgICAg
ICAgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lczoNCiAgICArICAgICAgICAgICAgICAgICAgICBz
ZWxmLl9lbnRlcl9maWxlKGZpbGVuYW1lKQ0KICAgICsgICAgICAgICAgICAgICAgICAgIHByZXYg
PSBzZWxmLl9wYXJzZV9ibG9jayhOb25lLCBwYXJlbnQsIHByZXYpDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fbGVhdmVfZmlsZSgpDQogICAgKw0KICAgICsgICAgICAgICAgICBlbGlm
IHQwIGlzIGVuZF90b2tlbjoNCiAgICArICAgICAgICAgICAgICAgICMgUmVhY2hlZCB0aGUgZW5k
IG9mIHRoZSBibG9jay4gVGVybWluYXRlIHRoZSBmaW5hbCBub2RlIGFuZA0KICAgICsgICAgICAg
ICAgICAgICAgIyByZXR1cm4gaXQuDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgaWYgc2Vs
Zi5fdG9rZW5zWzFdIGlzIG5vdCBOb25lOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3RyYWlsaW5nX3Rva2Vuc19lcnJvcigpDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgcHJl
di5uZXh0ID0gTm9uZQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIHByZXYNCiAgICArDQog
ICAgKyAgICAgICAgICAgIGVsaWYgdDAgaXMgX1RfSUY6DQogICAgKyAgICAgICAgICAgICAgICBu
b2RlID0gTWVudU5vZGUoKQ0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5pdGVtID0gbm9kZS5w
cm9tcHQgPSBOb25lDQogICAgKyAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudA0K
ICAgICsgICAgICAgICAgICAgICAgbm9kZS5kZXAgPSBzZWxmLl9leHBlY3RfZXhwcl9hbmRfZW9s
KCkNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9ibG9jayhfVF9FTkRJ
Riwgbm9kZSwgbm9kZSkNCiAgICArICAgICAgICAgICAgICAgIG5vZGUubGlzdCA9IG5vZGUubmV4
dA0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHByZXYubmV4dCA9IHByZXYgPSBub2RlDQog
ICAgKw0KICAgICsgICAgICAgICAgICBlbGlmIHQwIGlzIF9UX01FTlU6DQogICAgKyAgICAgICAg
ICAgICAgICBub2RlID0gTWVudU5vZGUoKQ0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5rY29u
ZmlnID0gc2VsZg0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5pdGVtID0gdDAgICMgX1RfTUVO
VSA9PSBNRU5VDQogICAgKyAgICAgICAgICAgICAgICBub2RlLmlzX21lbnVjb25maWcgPSBUcnVl
DQogICAgKyAgICAgICAgICAgICAgICBub2RlLnByb21wdCA9IChzZWxmLl9leHBlY3Rfc3RyX2Fu
ZF9lb2woKSwgc2VsZi55KQ0KICAgICsgICAgICAgICAgICAgICAgbm9kZS52aXNpYmlsaXR5ID0g
c2VsZi55DQogICAgKyAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudA0KICAgICsg
ICAgICAgICAgICAgICAgbm9kZS5maWxlbmFtZSA9IHNlbGYuX2ZpbGVuYW1lDQogICAgKyAgICAg
ICAgICAgICAgICBub2RlLmxpbmVuciA9IHNlbGYuX2xpbmVucg0KICAgICsgICAgICAgICAgICAg
ICAgbm9kZS5pbmNsdWRlX3BhdGggPSBzZWxmLl9pbmNsdWRlX3BhdGgNCiAgICArDQogICAgKyAg
ICAgICAgICAgICAgICBzZWxmLm1lbnVzLmFwcGVuZChub2RlKQ0KICAgICsNCiAgICArICAgICAg
ICAgICAgICAgIHNlbGYuX3BhcnNlX3Byb3BlcnRpZXMobm9kZSkNCiAgICArICAgICAgICAgICAg
ICAgIHNlbGYuX3BhcnNlX2Jsb2NrKF9UX0VORE1FTlUsIG5vZGUsIG5vZGUpDQogICAgKyAgICAg
ICAgICAgICAgICBub2RlLmxpc3QgPSBub2RlLm5leHQNCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICBwcmV2Lm5leHQgPSBwcmV2ID0gbm9kZQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxp
ZiB0MCBpcyBfVF9DT01NRU5UOg0KICAgICsgICAgICAgICAgICAgICAgbm9kZSA9IE1lbnVOb2Rl
KCkNCiAgICArICAgICAgICAgICAgICAgIG5vZGUua2NvbmZpZyA9IHNlbGYNCiAgICArICAgICAg
ICAgICAgICAgIG5vZGUuaXRlbSA9IHQwICAjIF9UX0NPTU1FTlQgPT0gQ09NTUVOVA0KICAgICsg
ICAgICAgICAgICAgICAgbm9kZS5pc19tZW51Y29uZmlnID0gRmFsc2UNCiAgICArICAgICAgICAg
ICAgICAgIG5vZGUucHJvbXB0ID0gKHNlbGYuX2V4cGVjdF9zdHJfYW5kX2VvbCgpLCBzZWxmLnkp
DQogICAgKyAgICAgICAgICAgICAgICBub2RlLmxpc3QgPSBOb25lDQogICAgKyAgICAgICAgICAg
ICAgICBub2RlLnBhcmVudCA9IHBhcmVudA0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5maWxl
bmFtZSA9IHNlbGYuX2ZpbGVuYW1lDQogICAgKyAgICAgICAgICAgICAgICBub2RlLmxpbmVuciA9
IHNlbGYuX2xpbmVucg0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5pbmNsdWRlX3BhdGggPSBz
ZWxmLl9pbmNsdWRlX3BhdGgNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLmNvbW1l
bnRzLmFwcGVuZChub2RlKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNl
X3Byb3BlcnRpZXMobm9kZSkNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBwcmV2Lm5leHQg
PSBwcmV2ID0gbm9kZQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxpZiB0MCBpcyBfVF9DSE9J
Q0U6DQogICAgKyAgICAgICAgICAgICAgICBpZiBzZWxmLl90b2tlbnNbMV0gaXMgTm9uZToNCiAg
ICArICAgICAgICAgICAgICAgICAgICBjaG9pY2UgPSBDaG9pY2UoKQ0KICAgICsgICAgICAgICAg
ICAgICAgICAgIGNob2ljZS5kaXJlY3RfZGVwID0gc2VsZi5uDQogICAgKyAgICAgICAgICAgICAg
ICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgICAgICMgTmFtZWQgY2hvaWNlDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2V4cGVjdF9zdHJfYW5kX2VvbCgpDQogICAg
KyAgICAgICAgICAgICAgICAgICAgY2hvaWNlID0gc2VsZi5uYW1lZF9jaG9pY2VzLmdldChuYW1l
KQ0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjaG9pY2U6DQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNob2ljZSA9IENob2ljZSgpDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNob2ljZS5uYW1lID0gbmFtZQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBj
aG9pY2UuZGlyZWN0X2RlcCA9IHNlbGYubg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLm5hbWVkX2Nob2ljZXNbbmFtZV0gPSBjaG9pY2UNCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICBzZWxmLmNob2ljZXMuYXBwZW5kKGNob2ljZSkNCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICBub2RlID0gTWVudU5vZGUoKQ0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5rY29uZmln
ID0gY2hvaWNlLmtjb25maWcgPSBzZWxmDQogICAgKyAgICAgICAgICAgICAgICBub2RlLml0ZW0g
PSBjaG9pY2UNCiAgICArICAgICAgICAgICAgICAgIG5vZGUuaXNfbWVudWNvbmZpZyA9IFRydWUN
CiAgICArICAgICAgICAgICAgICAgIG5vZGUucHJvbXB0ID0gbm9kZS5oZWxwID0gTm9uZQ0KICAg
ICsgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQNCiAgICArICAgICAgICAgICAg
ICAgIG5vZGUuZmlsZW5hbWUgPSBzZWxmLl9maWxlbmFtZQ0KICAgICsgICAgICAgICAgICAgICAg
bm9kZS5saW5lbnIgPSBzZWxmLl9saW5lbnINCiAgICArICAgICAgICAgICAgICAgIG5vZGUuaW5j
bHVkZV9wYXRoID0gc2VsZi5faW5jbHVkZV9wYXRoDQogICAgKw0KICAgICsgICAgICAgICAgICAg
ICAgY2hvaWNlLm5vZGVzLmFwcGVuZChub2RlKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAg
IHNlbGYuX3BhcnNlX3Byb3BlcnRpZXMobm9kZSkNCiAgICArICAgICAgICAgICAgICAgIHNlbGYu
X3BhcnNlX2Jsb2NrKF9UX0VORENIT0lDRSwgbm9kZSwgbm9kZSkNCiAgICArICAgICAgICAgICAg
ICAgIG5vZGUubGlzdCA9IG5vZGUubmV4dA0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHBy
ZXYubmV4dCA9IHByZXYgPSBub2RlDQogICAgKw0KICAgICsgICAgICAgICAgICBlbGlmIHQwIGlz
IF9UX01BSU5NRU5VOg0KICAgICsgICAgICAgICAgICAgICAgc2VsZi50b3Bfbm9kZS5wcm9tcHQg
PSAoc2VsZi5fZXhwZWN0X3N0cl9hbmRfZW9sKCksIHNlbGYueSkNCiAgICArDQogICAgKyAgICAg
ICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAjIEEgdmFsaWQgZW5kY2hvaWNlL2Vu
ZGlmL2VuZG1lbnUgaXMgY2F1Z2h0IGJ5IHRoZSAnZW5kX3Rva2VuJw0KICAgICsgICAgICAgICAg
ICAgICAgIyBjaGVjayBhYm92ZQ0KICAgICsgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfZXJy
b3IoDQogICAgKyAgICAgICAgICAgICAgICAgICAgIm5vIGNvcnJlc3BvbmRpbmcgJ2Nob2ljZSci
IGlmIHQwIGlzIF9UX0VORENIT0lDRSBlbHNlDQogICAgKyAgICAgICAgICAgICAgICAgICAgIm5v
IGNvcnJlc3BvbmRpbmcgJ2lmJyIgICAgIGlmIHQwIGlzIF9UX0VORElGIGVsc2UNCiAgICArICAg
ICAgICAgICAgICAgICAgICAibm8gY29ycmVzcG9uZGluZyAnbWVudSciICAgaWYgdDAgaXMgX1Rf
RU5ETUVOVSBlbHNlDQogICAgKyAgICAgICAgICAgICAgICAgICAgInVucmVjb2duaXplZCBjb25z
dHJ1Y3QiKQ0KICAgICsNCiAgICArICAgICAgICAjIEVuZCBvZiBmaWxlIHJlYWNoZWQuIFRlcm1p
bmF0ZSB0aGUgZmluYWwgbm9kZSBhbmQgcmV0dXJuIGl0Lg0KICAgICsNCiAgICArICAgICAgICBp
ZiBlbmRfdG9rZW46DQogICAgKyAgICAgICAgICAgIHJhaXNlIEtjb25maWdFcnJvcigNCiAgICAr
ICAgICAgICAgICAgICAgICJleHBlY3RlZCAne30nIGF0IGVuZCBvZiAne30nIg0KICAgICsgICAg
ICAgICAgICAgICAgLmZvcm1hdCgiZW5kY2hvaWNlIiBpZiBlbmRfdG9rZW4gaXMgX1RfRU5EQ0hP
SUNFIGVsc2UNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgImVuZGlmIiAgICAgaWYgZW5k
X3Rva2VuIGlzIF9UX0VORElGIGVsc2UNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgImVu
ZG1lbnUiLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSkpDQog
ICAgKw0KICAgICsgICAgICAgIHByZXYubmV4dCA9IE5vbmUNCiAgICArICAgICAgICByZXR1cm4g
cHJldg0KICAgICsNCiAgICArICAgIGRlZiBfcGFyc2VfY29uZChzZWxmKToNCiAgICArICAgICAg
ICAjIFBhcnNlcyBhbiBvcHRpb25hbCAnaWYgPGV4cHI+JyBjb25zdHJ1Y3QgYW5kIHJldHVybnMg
dGhlIHBhcnNlZA0KICAgICsgICAgICAgICMgPGV4cHI+LCBvciBzZWxmLnkgaWYgdGhlIG5leHQg
dG9rZW4gaXMgbm90IF9UX0lGDQogICAgKw0KICAgICsgICAgICAgIGV4cHIgPSBzZWxmLl9wYXJz
ZV9leHByKFRydWUpIGlmIHNlbGYuX2NoZWNrX3Rva2VuKF9UX0lGKSBlbHNlIHNlbGYueQ0KICAg
ICsNCiAgICArICAgICAgICBpZiBzZWxmLl90b2tlbnNbc2VsZi5fdG9rZW5zX2ldIGlzIG5vdCBO
b25lOg0KICAgICsgICAgICAgICAgICBzZWxmLl90cmFpbGluZ190b2tlbnNfZXJyb3IoKQ0KICAg
ICsNCiAgICArICAgICAgICByZXR1cm4gZXhwcg0KICAgICsNCiAgICArICAgIGRlZiBfcGFyc2Vf
cHJvcGVydGllcyhzZWxmLCBub2RlKToNCiAgICArICAgICAgICAjIFBhcnNlcyBhbmQgYWRkcyBw
cm9wZXJ0aWVzIHRvIHRoZSBNZW51Tm9kZSAnbm9kZScgKHR5cGUsICdwcm9tcHQnLA0KICAgICsg
ICAgICAgICMgJ2RlZmF1bHQncywgZXRjLikgUHJvcGVydGllcyBhcmUgbGF0ZXIgY29waWVkIHVw
IHRvIHN5bWJvbHMgYW5kDQogICAgKyAgICAgICAgIyBjaG9pY2VzIGluIGEgc2VwYXJhdGUgcGFz
cyBhZnRlciBwYXJzaW5nLCBpbiBlLmcuDQogICAgKyAgICAgICAgIyBfYWRkX3Byb3BzX3RvX3N5
bSgpLg0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjIEFuIG9sZGVyIHZlcnNpb24gb2Yg
dGhpcyBjb2RlIGFkZGVkIHByb3BlcnRpZXMgZGlyZWN0bHkgdG8gc3ltYm9scw0KICAgICsgICAg
ICAgICMgYW5kIGNob2ljZXMgaW5zdGVhZCBvZiB0byB0aGVpciBtZW51IG5vZGVzIChhbmQgaGFu
ZGxlZCBkZXBlbmRlbmN5DQogICAgKyAgICAgICAgIyBwcm9wYWdhdGlvbiBzaW11bHRhbmVvdXNs
eSksIGJ1dCB0aGF0IGxvc2VzIGluZm9ybWF0aW9uIG9uIHdoZXJlIGENCiAgICArICAgICAgICAj
IHByb3BlcnR5IGlzIGFkZGVkIHdoZW4gYSBzeW1ib2wgb3IgY2hvaWNlIGlzIGRlZmluZWQgaW4g
bXVsdGlwbGUNCiAgICArICAgICAgICAjIGxvY2F0aW9ucy4gU29tZSBLY29uZmlnIGNvbmZpZ3Vy
YXRpb24gc3lzdGVtcyByZWx5IGhlYXZpbHkgb24gc3VjaA0KICAgICsgICAgICAgICMgc3ltYm9s
cywgYW5kIGJldHRlciBkb2NzIGNhbiBiZSBnZW5lcmF0ZWQgYnkga2VlcGluZyB0cmFjayBvZiB3
aGVyZQ0KICAgICsgICAgICAgICMgcHJvcGVydGllcyBhcmUgYWRkZWQuDQogICAgKyAgICAgICAg
Iw0KICAgICsgICAgICAgICMgbm9kZToNCiAgICArICAgICAgICAjICAgVGhlIG1lbnUgbm9kZSB3
ZSdyZSBwYXJzaW5nIHByb3BlcnRpZXMgb24NCiAgICArDQogICAgKyAgICAgICAgIyBEZXBlbmRl
bmNpZXMgZnJvbSAnZGVwZW5kcyBvbicuIFdpbGwgZ2V0IHByb3BhZ2F0ZWQgdG8gdGhlIHByb3Bl
cnRpZXMNCiAgICArICAgICAgICAjIGJlbG93Lg0KICAgICsgICAgICAgIG5vZGUuZGVwID0gc2Vs
Zi55DQogICAgKw0KICAgICsgICAgICAgIHdoaWxlIHNlbGYuX25leHRfbGluZSgpOg0KICAgICsg
ICAgICAgICAgICB0MCA9IHNlbGYuX3Rva2Vuc1swXQ0KICAgICsNCiAgICArICAgICAgICAgICAg
aWYgdDAgaW4gX1RZUEVfVE9LRU5TOg0KICAgICsgICAgICAgICAgICAgICAgIyBSZWxpZXMgb24g
J19UX0JPT0wgaXMgQk9PTCcsIGV0Yy4sIHRvIHNhdmUgYSBjb252ZXJzaW9uDQogICAgKyAgICAg
ICAgICAgICAgICBzZWxmLl9zZXRfdHlwZShub2RlLCB0MCkNCiAgICArICAgICAgICAgICAgICAg
IGlmIHNlbGYuX3Rva2Vuc1sxXSBpcyBub3QgTm9uZToNCiAgICArICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9wYXJzZV9wcm9tcHQobm9kZSkNCiAgICArDQogICAgKyAgICAgICAgICAgIGVsaWYg
dDAgaXMgX1RfREVQRU5EUzoNCiAgICArICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jaGVj
a190b2tlbihfVF9PTik6DQogICAgKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfZXJy
b3IoImV4cGVjdGVkICdvbicgYWZ0ZXIgJ2RlcGVuZHMnIikNCiAgICArDQogICAgKyAgICAgICAg
ICAgICAgICBub2RlLmRlcCA9IHNlbGYuX21ha2VfYW5kKG5vZGUuZGVwLA0KICAgICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3RfZXhwcl9hbmRf
ZW9sKCkpDQogICAgKw0KICAgICsgICAgICAgICAgICBlbGlmIHQwIGlzIF9UX0hFTFA6DQogICAg
KyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9oZWxwKG5vZGUpDQogICAgKw0KICAgICsgICAg
ICAgICAgICBlbGlmIHQwIGlzIF9UX1NFTEVDVDoNCiAgICArICAgICAgICAgICAgICAgIGlmIG5v
ZGUuaXRlbS5fX2NsYXNzX18gaXMgbm90IFN5bWJvbDoNCiAgICArICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9wYXJzZV9lcnJvcigib25seSBzeW1ib2xzIGNhbiBzZWxlY3QiKQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgICAgIG5vZGUuc2VsZWN0cy5hcHBlbmQoKHNlbGYuX2V4cGVjdF9ub25j
b25zdF9zeW0oKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
bGYuX3BhcnNlX2NvbmQoKSkpDQogICAgKw0KICAgICsgICAgICAgICAgICBlbGlmIHQwIGlzIE5v
bmU6DQogICAgKyAgICAgICAgICAgICAgICAjIEJsYW5rIGxpbmUNCiAgICArICAgICAgICAgICAg
ICAgIGNvbnRpbnVlDQogICAgKw0KICAgICsgICAgICAgICAgICBlbGlmIHQwIGlzIF9UX0RFRkFV
TFQ6DQogICAgKyAgICAgICAgICAgICAgICBub2RlLmRlZmF1bHRzLmFwcGVuZCgoc2VsZi5fcGFy
c2VfZXhwcihGYWxzZSksDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2VsZi5fcGFyc2VfY29uZCgpKSkNCiAgICArDQogICAgKyAgICAgICAgICAgIGVsaWYgdDAg
aW4gX0RFRl9UT0tFTl9UT19UWVBFOg0KICAgICsgICAgICAgICAgICAgICAgc2VsZi5fc2V0X3R5
cGUobm9kZSwgX0RFRl9UT0tFTl9UT19UWVBFW3QwXSkNCiAgICArICAgICAgICAgICAgICAgIG5v
ZGUuZGVmYXVsdHMuYXBwZW5kKChzZWxmLl9wYXJzZV9leHByKEZhbHNlKSwNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9jb25kKCkpKQ0KICAg
ICsNCiAgICArICAgICAgICAgICAgZWxpZiB0MCBpcyBfVF9QUk9NUFQ6DQogICAgKyAgICAgICAg
ICAgICAgICBzZWxmLl9wYXJzZV9wcm9tcHQobm9kZSkNCiAgICArDQogICAgKyAgICAgICAgICAg
IGVsaWYgdDAgaXMgX1RfUkFOR0U6DQogICAgKyAgICAgICAgICAgICAgICBub2RlLnJhbmdlcy5h
cHBlbmQoKHNlbGYuX2V4cGVjdF9zeW0oKSwgc2VsZi5fZXhwZWN0X3N5bSgpLA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9jb25kKCkpKQ0KICAg
ICsNCiAgICArICAgICAgICAgICAgZWxpZiB0MCBpcyBfVF9JTVBMWToNCiAgICArICAgICAgICAg
ICAgICAgIGlmIG5vZGUuaXRlbS5fX2NsYXNzX18gaXMgbm90IFN5bWJvbDoNCiAgICArICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigib25seSBzeW1ib2xzIGNhbiBpbXBseSIp
DQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5pbXBsaWVzLmFwcGVuZCgoc2VsZi5f
ZXhwZWN0X25vbmNvbnN0X3N5bSgpLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2VsZi5fcGFyc2VfY29uZCgpKSkNCiAgICArDQogICAgKyAgICAgICAgICAgIGVs
aWYgdDAgaXMgX1RfVklTSUJMRToNCiAgICArICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9j
aGVja190b2tlbihfVF9JRik6DQogICAgKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2Vf
ZXJyb3IoImV4cGVjdGVkICdpZicgYWZ0ZXIgJ3Zpc2libGUnIikNCiAgICArDQogICAgKyAgICAg
ICAgICAgICAgICBub2RlLnZpc2liaWxpdHkgPSBzZWxmLl9tYWtlX2FuZChub2RlLnZpc2liaWxp
dHksDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxmLl9leHBlY3RfZXhwcl9hbmRfZW9sKCkpDQogICAgKw0KICAgICsgICAgICAgICAgICBl
bGlmIHQwIGlzIF9UX09QVElPTjoNCiAgICArICAgICAgICAgICAgICAgIGlmIHNlbGYuX2NoZWNr
X3Rva2VuKF9UX0VOVik6DQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2No
ZWNrX3Rva2VuKF9UX0VRVUFMKToNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5f
cGFyc2VfZXJyb3IoImV4cGVjdGVkICc9JyBhZnRlciAnZW52JyIpDQogICAgKw0KICAgICsgICAg
ICAgICAgICAgICAgICAgIGVudl92YXIgPSBzZWxmLl9leHBlY3Rfc3RyX2FuZF9lb2woKQ0KICAg
ICsgICAgICAgICAgICAgICAgICAgIG5vZGUuaXRlbS5lbnZfdmFyID0gZW52X3Zhcg0KICAgICsN
CiAgICArICAgICAgICAgICAgICAgICAgICBpZiBlbnZfdmFyIGluIG9zLmVudmlyb246DQogICAg
KyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGVmYXVsdHMuYXBwZW5kKA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuX2xvb2t1cF9jb25zdF9zeW0ob3MuZW52aXJv
bltlbnZfdmFyXSksDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi55KSkN
CiAgICArICAgICAgICAgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLl93YXJuKCJ7MX0gaGFzICdvcHRpb24gZW52PVwiezB9XCInLCAiDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1dCB0aGUgZW52aXJvbm1lbnQgdmFy
aWFibGUgezB9IGlzIG5vdCAiDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInNldCIuZm9ybWF0KG5vZGUuaXRlbS5uYW1lLCBlbnZfdmFyKSwNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSwgc2VsZi5fbGluZW5yKQ0K
ICAgICsNCiAgICArICAgICAgICAgICAgICAgICAgICBpZiBlbnZfdmFyICE9IG5vZGUuaXRlbS5u
YW1lOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXJuKCJLY29uZmlnbGli
IGV4cGFuZHMgZW52aXJvbm1lbnQgdmFyaWFibGVzICINCiAgICArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaW4gc3RyaW5ncyBkaXJlY3RseSwgbWVhbmluZyB5b3UgZG8gbm90
ICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZCAnb3B0aW9u
IGVudj0uLi4nIFwiYm91bmNlXCIgc3ltYm9scy4gIg0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBDIHRvb2xzLCAiDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlbmFtZSB7fSB0byB7fSAo
c28gdGhhdCB0aGUgc3ltYm9sIG5hbWUgIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJtYXRjaGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lKS4iDQogICAg
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChub2RlLml0ZW0ubmFt
ZSwgZW52X3ZhciksDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5fZmlsZW5hbWUsIHNlbGYuX2xpbmVucikNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBl
bGlmIHNlbGYuX2NoZWNrX3Rva2VuKF9UX0RFRkNPTkZJR19MSVNUKToNCiAgICArICAgICAgICAg
ICAgICAgICAgICBpZiBub3Qgc2VsZi5kZWZjb25maWdfbGlzdDoNCiAgICArICAgICAgICAgICAg
ICAgICAgICAgICAgc2VsZi5kZWZjb25maWdfbGlzdCA9IG5vZGUuaXRlbQ0KICAgICsgICAgICAg
ICAgICAgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dh
cm4oIidvcHRpb24gZGVmY29uZmlnX2xpc3QnIHNldCBvbiBtdWx0aXBsZSAiDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHMgKHswfSBhbmQgezF9KS4gT25s
eSB7MH0gd2lsbCBiZSAiDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InVzZWQuIi5mb3JtYXQoc2VsZi5kZWZjb25maWdfbGlzdC5uYW1lLA0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuaXRlbS5uYW1lKSwN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSwg
c2VsZi5fbGluZW5yKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fY2hl
Y2tfdG9rZW4oX1RfTU9EVUxFUyk6DQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBUbyByZWR1
Y2Ugd2FybmluZyBzcGFtLCBvbmx5IHdhcm4gaWYgJ29wdGlvbiBtb2R1bGVzJyBpcw0KICAgICsg
ICAgICAgICAgICAgICAgICAgICMgc2V0IG9uIHNvbWUgc3ltYm9sIHRoYXQgaXNuJ3QgTU9EVUxF
Uywgd2hpY2ggc2hvdWxkIGJlDQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBzYWZlLiBJIGhh
dmVuJ3QgcnVuIGludG8gYW55IHByb2plY3RzIHRoYXQgbWFrZSB1c2UNCiAgICArICAgICAgICAg
ICAgICAgICAgICAjIG1vZHVsZXMgYmVzaWRlcyB0aGUga2VybmVsIHlldCwgYW5kIHRoZXJlIGl0
J3MgbGlrZWx5IHRvDQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBrZWVwIGJlaW5nIGNhbGxl
ZCAiTU9EVUxFUyIuDQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgbm9kZS5pdGVtIGlzIG5v
dCBzZWxmLm1vZHVsZXM6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhcm4o
InRoZSAnbW9kdWxlcycgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuICINCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiTGV0IG1lIGtub3cgaWYgdGhpcyBpcyBhIHByb2Js
ZW0gZm9yIHlvdSwgIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh
cyBpdCB3b3VsZG4ndCBiZSB0aGF0IGhhcmQgdG8gaW1wbGVtZW50LiAiDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdGUgdGhhdCBtb2R1bGVzIGFyZSBzdXBwb3J0
ZWQgLS0gIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJLY29uZmln
bGliIGp1c3QgYXNzdW1lcyB0aGUgc3ltYm9sIG5hbWUgIg0KICAgICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJNT0RVTEVTLCBsaWtlIG9sZGVyIHZlcnNpb25zIG9mIHRoZSBD
ICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wbGVtZW50YXRp
b24gZGlkIHdoZW4gJ29wdGlvbiBtb2R1bGVzJyAiDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIndhc24ndCB1c2VkLiIsDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5hbWUsIHNlbGYuX2xpbmVucikNCiAgICArDQogICAg
KyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2NoZWNrX3Rva2VuKF9UX0FMTE5PQ09ORklHX1kp
Og0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIG5vZGUuaXRlbS5fX2NsYXNzX18gaXMgbm90
IFN5bWJvbDoNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3Io
InRoZSAnYWxsbm9jb25maWdfeScgb3B0aW9uIGlzIG9ubHkgIg0KICAgICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsaWQgZm9yIHN5bWJvbHMiKQ0KICAgICsN
CiAgICArICAgICAgICAgICAgICAgICAgICBub2RlLml0ZW0uaXNfYWxsbm9jb25maWdfeSA9IFRy
dWUNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3BhcnNlX2Vycm9yKCJ1bnJlY29nbml6ZWQgb3B0aW9uIikNCiAgICArDQog
ICAgKyAgICAgICAgICAgIGVsaWYgdDAgaXMgX1RfT1BUSU9OQUw6DQogICAgKyAgICAgICAgICAg
ICAgICBpZiBub2RlLml0ZW0uX19jbGFzc19fIGlzIG5vdCBDaG9pY2U6DQogICAgKyAgICAgICAg
ICAgICAgICAgICAgc2VsZi5fcGFyc2VfZXJyb3IoJyJvcHRpb25hbCIgaXMgb25seSB2YWxpZCBm
b3IgY2hvaWNlcycpDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgbm9kZS5pdGVtLmlzX29w
dGlvbmFsID0gVHJ1ZQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxzZToNCiAgICArICAgICAg
ICAgICAgICAgICMgUmV1c2UgdGhlIHRva2VucyBmb3IgdGhlIG5vbi1wcm9wZXJ0eSBsaW5lIGxh
dGVyDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLl9yZXVzZV90b2tlbnMgPSBUcnVlDQogICAg
KyAgICAgICAgICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICBkZWYgX3NldF90eXBlKHNl
bGYsIG5vZGUsIG5ld190eXBlKToNCiAgICArICAgICAgICAjIFVOS05PV04gaXMgZmFsc3kNCiAg
ICArICAgICAgICBpZiBub2RlLml0ZW0ub3JpZ190eXBlIGFuZCBub2RlLml0ZW0ub3JpZ190eXBl
IGlzIG5vdCBuZXdfdHlwZToNCiAgICArICAgICAgICAgICAgc2VsZi5fd2Fybigie30gZGVmaW5l
ZCB3aXRoIG11bHRpcGxlIHR5cGVzLCB7fSB3aWxsIGJlIHVzZWQiDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgLmZvcm1hdChfbmFtZV9hbmRfbG9jKG5vZGUuaXRlbSksDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFX1RPX1NUUltuZXdfdHlwZV0pKQ0KICAgICsN
CiAgICArICAgICAgICBub2RlLml0ZW0ub3JpZ190eXBlID0gbmV3X3R5cGUNCiAgICArDQogICAg
KyAgICBkZWYgX3BhcnNlX3Byb21wdChzZWxmLCBub2RlKToNCiAgICArICAgICAgICAjICdwcm9t
cHQnIHByb3BlcnRpZXMgb3ZlcnJpZGUgZWFjaCBvdGhlciB3aXRoaW4gYSBzaW5nbGUgZGVmaW5p
dGlvbiBvZg0KICAgICsgICAgICAgICMgYSBzeW1ib2wsIGJ1dCBhZGRpdGlvbmFsIHByb21wdHMg
Y2FuIGJlIGFkZGVkIGJ5IGRlZmluaW5nIHRoZSBzeW1ib2wNCiAgICArICAgICAgICAjIG11bHRp
cGxlIHRpbWVzDQogICAgKw0KICAgICsgICAgICAgIGlmIG5vZGUucHJvbXB0Og0KICAgICsgICAg
ICAgICAgICBzZWxmLl93YXJuKF9uYW1lX2FuZF9sb2Mobm9kZS5pdGVtKSArDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgIiBkZWZpbmVkIHdpdGggbXVsdGlwbGUgcHJvbXB0cyBpbiBzaW5n
bGUgbG9jYXRpb24iKQ0KICAgICsNCiAgICArICAgICAgICBwcm9tcHQgPSBzZWxmLl90b2tlbnNb
MV0NCiAgICArICAgICAgICBzZWxmLl90b2tlbnNfaSA9IDINCiAgICArDQogICAgKyAgICAgICAg
aWYgcHJvbXB0Ll9fY2xhc3NfXyBpcyBub3Qgc3RyOg0KICAgICsgICAgICAgICAgICBzZWxmLl9w
YXJzZV9lcnJvcigiZXhwZWN0ZWQgcHJvbXB0IHN0cmluZyIpDQogICAgKw0KICAgICsgICAgICAg
IGlmIHByb21wdCAhPSBwcm9tcHQuc3RyaXAoKToNCiAgICArICAgICAgICAgICAgc2VsZi5fd2Fy
bihfbmFtZV9hbmRfbG9jKG5vZGUuaXRlbSkgKw0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICIgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBpdHMgcHJvbXB0IikNCiAg
ICArDQogICAgKyAgICAgICAgICAgICMgVGhpcyBhdm9pZCBpc3N1ZXMgZm9yIGUuZy4gcmVTdHJ1
Y3R1cmVkVGV4dCBkb2N1bWVudGF0aW9uLCB3aGVyZQ0KICAgICsgICAgICAgICAgICAjICcqcHJv
bXB0IConIGlzIGludmFsaWQNCiAgICArICAgICAgICAgICAgcHJvbXB0ID0gcHJvbXB0LnN0cmlw
KCkNCiAgICArDQogICAgKyAgICAgICAgbm9kZS5wcm9tcHQgPSAocHJvbXB0LCBzZWxmLl9wYXJz
ZV9jb25kKCkpDQogICAgKw0KICAgICsgICAgZGVmIF9wYXJzZV9oZWxwKHNlbGYsIG5vZGUpOg0K
ICAgICsgICAgICAgIGlmIG5vZGUuaGVscCBpcyBub3QgTm9uZToNCiAgICArICAgICAgICAgICAg
c2VsZi5fd2FybihfbmFtZV9hbmRfbG9jKG5vZGUuaXRlbSkgKyAiIGRlZmluZWQgd2l0aCBtb3Jl
IHRoYW4gIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICJvbmUgaGVscCB0ZXh0IC0tIG9u
bHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCIpDQogICAgKw0KICAgICsgICAgICAgICMgTWlj
cm8tb3B0aW1pemF0aW9uLiBUaGlzIGNvZGUgaXMgcHJldHR5IGhvdC4NCiAgICArICAgICAgICBy
ZWFkbGluZSA9IHNlbGYuX3JlYWRsaW5lDQogICAgKw0KICAgICsgICAgICAgICMgRmluZCBmaXJz
dCBub24tYmxhbmsgKG5vdCBhbGwtc3BhY2UpIGxpbmUgYW5kIGdldCBpdHMNCiAgICArICAgICAg
ICAjIGluZGVudGF0aW9uDQogICAgKw0KICAgICsgICAgICAgIHdoaWxlIDE6DQogICAgKyAgICAg
ICAgICAgIGxpbmUgPSByZWFkbGluZSgpDQogICAgKyAgICAgICAgICAgIHNlbGYuX2xpbmVuciAr
PSAxDQogICAgKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOg0KICAgICsgICAgICAgICAgICAgICAg
c2VsZi5fZW1wdHlfaGVscChub2RlLCBsaW5lKQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJu
DQogICAgKyAgICAgICAgICAgIGlmIG5vdCBsaW5lLmlzc3BhY2UoKToNCiAgICArICAgICAgICAg
ICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAgICAgIGxlbl8gPSBsZW4gICMgTWljcm8tb3B0
aW1pemF0aW9uDQogICAgKw0KICAgICsgICAgICAgICMgVXNlIGEgc2VwYXJhdGUgJ2V4cGxpbmUn
IHZhcmlhYmxlIGhlcmUgYW5kIGJlbG93IHRvIGF2b2lkIHN0b21waW5nIG9uDQogICAgKyAgICAg
ICAgIyBhbnkgdGFicyBwZW9wbGUgbWlnaHQndmUgcHV0IGRlbGliZXJhdGVseSBpbnRvIHRoZSBm
aXJzdCBsaW5lIGFmdGVyDQogICAgKyAgICAgICAgIyB0aGUgaGVscCB0ZXh0DQogICAgKyAgICAg
ICAgZXhwbGluZSA9IGxpbmUuZXhwYW5kdGFicygpDQogICAgKyAgICAgICAgaW5kZW50ID0gbGVu
XyhleHBsaW5lKSAtIGxlbl8oZXhwbGluZS5sc3RyaXAoKSkNCiAgICArICAgICAgICBpZiBub3Qg
aW5kZW50Og0KICAgICsgICAgICAgICAgICBzZWxmLl9lbXB0eV9oZWxwKG5vZGUsIGxpbmUpDQog
ICAgKyAgICAgICAgICAgIHJldHVybg0KICAgICsNCiAgICArICAgICAgICAjIFRoZSBoZWxwIHRl
eHQgZ29lcyBvbiB0aWxsIHRoZSBmaXJzdCBub24tYmxhbmsgbGluZSB3aXRoIGxlc3MgaW5kZW50
DQogICAgKyAgICAgICAgIyB0aGFuIHRoZSBmaXJzdCBsaW5lDQogICAgKw0KICAgICsgICAgICAg
ICMgQWRkIHRoZSBmaXJzdCBsaW5lDQogICAgKyAgICAgICAgbGluZXMgPSBbZXhwbGluZVtpbmRl
bnQ6XV0NCiAgICArICAgICAgICBhZGRfbGluZSA9IGxpbmVzLmFwcGVuZCAgIyBNaWNyby1vcHRp
bWl6YXRpb24NCiAgICArDQogICAgKyAgICAgICAgd2hpbGUgMToNCiAgICArICAgICAgICAgICAg
bGluZSA9IHJlYWRsaW5lKCkNCiAgICArICAgICAgICAgICAgaWYgbGluZS5pc3NwYWNlKCk6DQog
ICAgKyAgICAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gcHJlc2VydmUgdGhlIGV4YWN0IHdoaXRl
c3BhY2UgaW4gdGhlc2UNCiAgICArICAgICAgICAgICAgICAgIGFkZF9saW5lKCJcbiIpDQogICAg
KyAgICAgICAgICAgIGVsaWYgbm90IGxpbmU6DQogICAgKyAgICAgICAgICAgICAgICAjIEVuZCBv
ZiBmaWxlDQogICAgKyAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAgICAgICAgICBlbHNl
Og0KICAgICsgICAgICAgICAgICAgICAgZXhwbGluZSA9IGxpbmUuZXhwYW5kdGFicygpDQogICAg
KyAgICAgICAgICAgICAgICBpZiBsZW5fKGV4cGxpbmUpIC0gbGVuXyhleHBsaW5lLmxzdHJpcCgp
KSA8IGluZGVudDoNCiAgICArICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAgICAg
ICAgICAgICAgYWRkX2xpbmUoZXhwbGluZVtpbmRlbnQ6XSkNCiAgICArDQogICAgKyAgICAgICAg
c2VsZi5fbGluZW5yICs9IGxlbl8obGluZXMpDQogICAgKyAgICAgICAgbm9kZS5oZWxwID0gIiIu
am9pbihsaW5lcykucnN0cmlwKCkNCiAgICArICAgICAgICBpZiBsaW5lOg0KICAgICsgICAgICAg
ICAgICBzZWxmLl9saW5lX2FmdGVyX2hlbHAobGluZSkNCiAgICArDQogICAgKyAgICBkZWYgX2Vt
cHR5X2hlbHAoc2VsZiwgbm9kZSwgbGluZSk6DQogICAgKyAgICAgICAgc2VsZi5fd2FybihfbmFt
ZV9hbmRfbG9jKG5vZGUuaXRlbSkgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIiBoYXMgJ2hl
bHAnIGJ1dCBlbXB0eSBoZWxwIHRleHQiKQ0KICAgICsgICAgICAgIG5vZGUuaGVscCA9ICIiDQog
ICAgKyAgICAgICAgaWYgbGluZToNCiAgICArICAgICAgICAgICAgc2VsZi5fbGluZV9hZnRlcl9o
ZWxwKGxpbmUpDQogICAgKw0KICAgICsgICAgZGVmIF9wYXJzZV9leHByKHNlbGYsIHRyYW5zZm9y
bV9tKToNCiAgICArICAgICAgICAjIFBhcnNlcyBhbiBleHByZXNzaW9uIGZyb20gdGhlIHRva2Vu
cyBpbiBLY29uZmlnLl90b2tlbnMgdXNpbmcgYQ0KICAgICsgICAgICAgICMgc2ltcGxlIHRvcC1k
b3duIGFwcHJvYWNoLiBTZWUgdGhlIG1vZHVsZSBkb2NzdHJpbmcgZm9yIHRoZSBleHByZXNzaW9u
DQogICAgKyAgICAgICAgIyBmb3JtYXQuDQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAgICMg
dHJhbnNmb3JtX206DQogICAgKyAgICAgICAgIyAgIFRydWUgaWYgbSBzaG91bGQgYmUgcmV3cml0
dGVuIHRvIG0gJiYgTU9EVUxFUy4gU2VlIHRoZQ0KICAgICsgICAgICAgICMgICBLY29uZmlnLmV2
YWxfc3RyaW5nKCkgZG9jdW1lbnRhdGlvbi4NCiAgICArDQogICAgKyAgICAgICAgIyBHcmFtbWFy
Og0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjICAgZXhwcjogICAgIGFuZF9leHByIFsn
fHwnIGV4cHJdDQogICAgKyAgICAgICAgIyAgIGFuZF9leHByOiBmYWN0b3IgWycmJicgYW5kX2V4
cHJdDQogICAgKyAgICAgICAgIyAgIGZhY3RvcjogICA8c3ltYm9sPiBbJz0nLychPScvJzwnLy4u
LiA8c3ltYm9sPl0NCiAgICArICAgICAgICAjICAgICAgICAgICAgICchJyBmYWN0b3INCiAgICAr
ICAgICAgICAjICAgICAgICAgICAgICcoJyBleHByICcpJw0KICAgICsgICAgICAgICMNCiAgICAr
ICAgICAgICAjIEl0IGhlbHBzIHRvIHRoaW5rIG9mIHRoZSAnZXhwcjogYW5kX2V4cHInIGNhc2Ug
YXMgYSBzaW5nbGUtb3BlcmFuZCBPUg0KICAgICsgICAgICAgICMgKG5vIHx8KSwgYW5kIG9mIHRo
ZSAnYW5kX2V4cHI6IGZhY3RvcicgY2FzZSBhcyBhIHNpbmdsZS1vcGVyYW5kIEFORA0KICAgICsg
ICAgICAgICMgKG5vICYmKS4gUGFyc2luZyBjb2RlIGlzIGFsd2F5cyBhIGJpdCB0cmlja3kuDQog
ICAgKw0KICAgICsgICAgICAgICMgTWluZCBkdW1wOiBwYXJzZV9mYWN0b3IoKSBhbmQgdHdvIG5l
c3RlZCBsb29wcyBmb3IgT1IgYW5kIEFORCB3b3VsZA0KICAgICsgICAgICAgICMgd29yayBhcyB3
ZWxsLiBUaGUgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIHRoZXJlIGdpdmVzIGENCiAg
ICArICAgICAgICAjIChvcCwgKG9wLCAob3AsIEEsIEIpLCBDKSwgRCkgcGFyc2UgZm9yIEEgb3Ag
QiBvcCBDIG9wIEQuIFJlcHJlc2VudGluZw0KICAgICsgICAgICAgICMgZXhwcmVzc2lvbnMgYXMg
KG9wLCBbbGlzdCBvZiBvcGVyYW5kc10pIGluc3RlYWQgZ29lcyBuaWNlbHkgd2l0aCB0aGF0DQog
ICAgKyAgICAgICAgIyB2ZXJzaW9uLCBidXQgaXMgd2FzdGVmdWwgZm9yIHNob3J0IGV4cHJlc3Np
b25zIGFuZCBjb21wbGljYXRlcw0KICAgICsgICAgICAgICMgZXhwcmVzc2lvbiBldmFsdWF0aW9u
IGFuZCBvdGhlciBjb2RlIHRoYXQgd29ya3Mgb24gZXhwcmVzc2lvbnMgKG1vcmUNCiAgICArICAg
ICAgICAjIGNvbXBsaWNhdGVkIGNvZGUgbGlrZWx5IG9mZnNldHMgYW55IHBlcmZvcm1hbmNlIGdh
aW4gZnJvbSBsZXNzDQogICAgKyAgICAgICAgIyByZWN1cnNpb24gdG9vKS4gSWYgd2UgYWxzbyB0
cnkgdG8gb3B0aW1pemUgdGhlIGxpc3QgcmVwcmVzZW50YXRpb24gYnkNCiAgICArICAgICAgICAj
IG1lcmdpbmcgbGlzdHMgd2hlbiBwb3NzaWJsZSAoZS5nLiB3aGVuIEFORGluZyB0d28gQU5EIGV4
cHJlc3Npb25zKSwNCiAgICArICAgICAgICAjIHdlIGVuZCB1cCBhbGxvY2F0aW5nIGEgdG9uIG9m
IGxpc3RzIGluc3RlYWQgb2YgcmV1c2luZyBleHByZXNzaW9ucywNCiAgICArICAgICAgICAjIHdo
aWNoIGlzIGJhZC4NCiAgICArDQogICAgKyAgICAgICAgYW5kX2V4cHIgPSBzZWxmLl9wYXJzZV9h
bmRfZXhwcih0cmFuc2Zvcm1fbSkNCiAgICArDQogICAgKyAgICAgICAgIyBSZXR1cm4gJ2FuZF9l
eHByJyBkaXJlY3RseSBpZiB3ZSBoYXZlIGEgInNpbmdsZS1vcGVyYW5kIiBPUi4NCiAgICArICAg
ICAgICAjIE90aGVyd2lzZSwgcGFyc2UgdGhlIGV4cHJlc3Npb24gb24gdGhlIHJpZ2h0IGFuZCBt
YWtlIGFuIE9SIG5vZGUuDQogICAgKyAgICAgICAgIyBUaGlzIHR1cm5zIEEgfHwgQiB8fCBDIHx8
IEQgaW50byAoT1IsIEEsIChPUiwgQiwgKE9SLCBDLCBEKSkpLg0KICAgICsgICAgICAgIHJldHVy
biBhbmRfZXhwciBpZiBub3Qgc2VsZi5fY2hlY2tfdG9rZW4oX1RfT1IpIGVsc2UgXA0KICAgICsg
ICAgICAgICAgICAoT1IsIGFuZF9leHByLCBzZWxmLl9wYXJzZV9leHByKHRyYW5zZm9ybV9tKSkN
CiAgICArDQogICAgKyAgICBkZWYgX3BhcnNlX2FuZF9leHByKHNlbGYsIHRyYW5zZm9ybV9tKToN
CiAgICArICAgICAgICBmYWN0b3IgPSBzZWxmLl9wYXJzZV9mYWN0b3IodHJhbnNmb3JtX20pDQog
ICAgKw0KICAgICsgICAgICAgICMgUmV0dXJuICdmYWN0b3InIGRpcmVjdGx5IGlmIHdlIGhhdmUg
YSAic2luZ2xlLW9wZXJhbmQiIEFORC4NCiAgICArICAgICAgICAjIE90aGVyd2lzZSwgcGFyc2Ug
dGhlIHJpZ2h0IG9wZXJhbmQgYW5kIG1ha2UgYW4gQU5EIG5vZGUuIFRoaXMgdHVybnMNCiAgICAr
ICAgICAgICAjIEEgJiYgQiAmJiBDICYmIEQgaW50byAoQU5ELCBBLCAoQU5ELCBCLCAoQU5ELCBD
LCBEKSkpLg0KICAgICsgICAgICAgIHJldHVybiBmYWN0b3IgaWYgbm90IHNlbGYuX2NoZWNrX3Rv
a2VuKF9UX0FORCkgZWxzZSBcDQogICAgKyAgICAgICAgICAgIChBTkQsIGZhY3Rvciwgc2VsZi5f
cGFyc2VfYW5kX2V4cHIodHJhbnNmb3JtX20pKQ0KICAgICsNCiAgICArICAgIGRlZiBfcGFyc2Vf
ZmFjdG9yKHNlbGYsIHRyYW5zZm9ybV9tKToNCiAgICArICAgICAgICB0b2tlbiA9IHNlbGYuX3Rv
a2Vuc1tzZWxmLl90b2tlbnNfaV0NCiAgICArICAgICAgICBzZWxmLl90b2tlbnNfaSArPSAxDQog
ICAgKw0KICAgICsgICAgICAgIGlmIHRva2VuLl9fY2xhc3NfXyBpcyBTeW1ib2w6DQogICAgKyAg
ICAgICAgICAgICMgUGxhaW4gc3ltYm9sIG9yIHJlbGF0aW9uDQogICAgKw0KICAgICsgICAgICAg
ICAgICBpZiBzZWxmLl90b2tlbnNbc2VsZi5fdG9rZW5zX2ldIG5vdCBpbiBfUkVMQVRJT05TOg0K
ICAgICsgICAgICAgICAgICAgICAgIyBQbGFpbiBzeW1ib2wNCiAgICArDQogICAgKyAgICAgICAg
ICAgICAgICAjIEZvciBjb25kaXRpb25hbCBleHByZXNzaW9ucyAoJ2RlcGVuZHMgb24gPGV4cHI+
JywNCiAgICArICAgICAgICAgICAgICAgICMgJy4uLiBpZiA8ZXhwcj4nLCBldGMuKSwgbSBpcyBy
ZXdyaXR0ZW4gdG8gbSAmJiBNT0RVTEVTLg0KICAgICsgICAgICAgICAgICAgICAgaWYgdHJhbnNm
b3JtX20gYW5kIHRva2VuIGlzIHNlbGYubToNCiAgICArICAgICAgICAgICAgICAgICAgICByZXR1
cm4gKEFORCwgc2VsZi5tLCBzZWxmLm1vZHVsZXMpDQogICAgKw0KICAgICsgICAgICAgICAgICAg
ICAgcmV0dXJuIHRva2VuDQogICAgKw0KICAgICsgICAgICAgICAgICAjIFJlbGF0aW9uDQogICAg
KyAgICAgICAgICAgICMNCiAgICArICAgICAgICAgICAgIyBfVF9FUVVBTCwgX1RfVU5FUVVBTCwg
ZXRjLiwgZGVsaWJlcmF0ZWx5IGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzDQogICAgKyAgICAgICAg
ICAgICMgRVFVQUwsIFVORVFVQUwsIGV0Yy4sIHNvIHdlIGNhbiBqdXN0IHVzZSB0aGUgdG9rZW4g
ZGlyZWN0bHkNCiAgICArICAgICAgICAgICAgc2VsZi5fdG9rZW5zX2kgKz0gMQ0KICAgICsgICAg
ICAgICAgICByZXR1cm4gKHNlbGYuX3Rva2Vuc1tzZWxmLl90b2tlbnNfaSAtIDFdLCB0b2tlbiwN
CiAgICArICAgICAgICAgICAgICAgICAgICBzZWxmLl9leHBlY3Rfc3ltKCkpDQogICAgKw0KICAg
ICsgICAgICAgIGlmIHRva2VuIGlzIF9UX05PVDoNCiAgICArICAgICAgICAgICAgIyB0b2tlbiA9
PSBfVF9OT1QgPT0gTk9UDQogICAgKyAgICAgICAgICAgIHJldHVybiAodG9rZW4sIHNlbGYuX3Bh
cnNlX2ZhY3Rvcih0cmFuc2Zvcm1fbSkpDQogICAgKw0KICAgICsgICAgICAgIGlmIHRva2VuIGlz
IF9UX09QRU5fUEFSRU46DQogICAgKyAgICAgICAgICAgIGV4cHJfcGFyc2UgPSBzZWxmLl9wYXJz
ZV9leHByKHRyYW5zZm9ybV9tKQ0KICAgICsgICAgICAgICAgICBpZiBzZWxmLl9jaGVja190b2tl
bihfVF9DTE9TRV9QQVJFTik6DQogICAgKyAgICAgICAgICAgICAgICByZXR1cm4gZXhwcl9wYXJz
ZQ0KICAgICsNCiAgICArICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigibWFsZm9ybWVkIGV4cHJl
c3Npb24iKQ0KICAgICsNCiAgICArICAgICMNCiAgICArICAgICMgQ2FjaGluZyBhbmQgaW52YWxp
ZGF0aW9uDQogICAgKyAgICAjDQogICAgKw0KICAgICsgICAgZGVmIF9idWlsZF9kZXAoc2VsZik6
DQogICAgKyAgICAgICAgIyBQb3B1bGF0ZXMgdGhlIFN5bWJvbC9DaG9pY2UuX2RlcGVuZGVudHMg
c2V0cywgd2hpY2ggY29udGFpbiBhbGwgb3RoZXINCiAgICArICAgICAgICAjIGl0ZW1zIChzeW1i
b2xzIGFuZCBjaG9pY2VzKSB0aGF0IGltbWVkaWF0ZWx5IGRlcGVuZCBvbiB0aGUgaXRlbSBpbg0K
ICAgICsgICAgICAgICMgdGhlIHNlbnNlIHRoYXQgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBp
dGVtIG1pZ2h0IGFmZmVjdCB0aGUgdmFsdWUNCiAgICArICAgICAgICAjIG9mIHRoZSBkZXBlbmRl
bnQgaXRlbXMuIFRoaXMgaXMgdXNlZCBmb3IgY2FjaGluZy9pbnZhbGlkYXRpb24uDQogICAgKyAg
ICAgICAgIw0KICAgICsgICAgICAgICMgVGhlIGNhbGN1bGF0ZWQgc2V0cyBtaWdodCBiZSBsYXJn
ZXIgdGhhbiBuZWNlc3NhcnkgYXMgd2UgZG9uJ3QgZG8gYW55DQogICAgKyAgICAgICAgIyBjb21w
bGV4IGFuYWx5c2lzIG9mIHRoZSBleHByZXNzaW9ucy4NCiAgICArDQogICAgKyAgICAgICAgbWFr
ZV9kZXBlbmRfb24gPSBfbWFrZV9kZXBlbmRfb24gICMgTWljcm8tb3B0aW1pemF0aW9uDQogICAg
Kw0KICAgICsgICAgICAgICMgT25seSBjYWxjdWxhdGUgX2RlcGVuZGVudHMgZm9yIGRlZmluZWQg
c3ltYm9scy4gQ29uc3RhbnQgYW5kDQogICAgKyAgICAgICAgIyB1bmRlZmluZWQgc3ltYm9scyBj
b3VsZCB0aGVvcmV0aWNhbGx5IGJlIHNlbGVjdGVkL2ltcGxpZWQsIGJ1dCBpdA0KICAgICsgICAg
ICAgICMgd291bGRuJ3QgY2hhbmdlIHRoZWlyIHZhbHVlLCBzbyBpdCdzIG5vdCBhIHRydWUgZGVw
ZW5kZW5jeS4NCiAgICArICAgICAgICBmb3Igc3ltIGluIHNlbGYudW5pcXVlX2RlZmluZWRfc3lt
czoNCiAgICArICAgICAgICAgICAgIyBTeW1ib2xzIGRlcGVuZCBvbiB0aGUgZm9sbG93aW5nOg0K
ICAgICsNCiAgICArICAgICAgICAgICAgIyBUaGUgcHJvbXB0IGNvbmRpdGlvbnMNCiAgICArICAg
ICAgICAgICAgZm9yIG5vZGUgaW4gc3ltLm5vZGVzOg0KICAgICsgICAgICAgICAgICAgICAgaWYg
bm9kZS5wcm9tcHQ6DQogICAgKyAgICAgICAgICAgICAgICAgICAgbWFrZV9kZXBlbmRfb24oc3lt
LCBub2RlLnByb21wdFsxXSkNCiAgICArDQogICAgKyAgICAgICAgICAgICMgVGhlIGRlZmF1bHQg
dmFsdWVzIGFuZCB0aGVpciBjb25kaXRpb25zDQogICAgKyAgICAgICAgICAgIGZvciB2YWx1ZSwg
Y29uZCBpbiBzeW0uZGVmYXVsdHM6DQogICAgKyAgICAgICAgICAgICAgICBtYWtlX2RlcGVuZF9v
bihzeW0sIHZhbHVlKQ0KICAgICsgICAgICAgICAgICAgICAgbWFrZV9kZXBlbmRfb24oc3ltLCBj
b25kKQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyBUaGUgcmV2ZXJzZSBhbmQgd2VhayByZXZl
cnNlIGRlcGVuZGVuY2llcw0KICAgICsgICAgICAgICAgICBtYWtlX2RlcGVuZF9vbihzeW0sIHN5
bS5yZXZfZGVwKQ0KICAgICsgICAgICAgICAgICBtYWtlX2RlcGVuZF9vbihzeW0sIHN5bS53ZWFr
X3Jldl9kZXApDQogICAgKw0KICAgICsgICAgICAgICAgICAjIFRoZSByYW5nZXMgYWxvbmcgd2l0
aCB0aGVpciBjb25kaXRpb25zDQogICAgKyAgICAgICAgICAgIGZvciBsb3csIGhpZ2gsIGNvbmQg
aW4gc3ltLnJhbmdlczoNCiAgICArICAgICAgICAgICAgICAgIG1ha2VfZGVwZW5kX29uKHN5bSwg
bG93KQ0KICAgICsgICAgICAgICAgICAgICAgbWFrZV9kZXBlbmRfb24oc3ltLCBoaWdoKQ0KICAg
ICsgICAgICAgICAgICAgICAgbWFrZV9kZXBlbmRfb24oc3ltLCBjb25kKQ0KICAgICsNCiAgICAr
ICAgICAgICAgICAgIyBUaGUgZGlyZWN0IGRlcGVuZGVuY2llcy4gVGhpcyBpcyB1c3VhbGx5IHJl
ZHVuZGFudCwgYXMgdGhlIGRpcmVjdA0KICAgICsgICAgICAgICAgICAjIGRlcGVuZGVuY2llcyBn
ZXQgcHJvcGFnYXRlZCB0byBwcm9wZXJ0aWVzLCBidXQgaXQncyBuZWVkZWQgdG8gZ2V0DQogICAg
KyAgICAgICAgICAgICMgaW52YWxpZGF0aW9uIHNvbGlkIGZvciAnaW1wbHknLCB3aGljaCBvbmx5
IGNoZWNrcyB0aGUgZGlyZWN0DQogICAgKyAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzIChldmVu
IGlmIHRoZXJlIGFyZSBubyBwcm9wZXJ0aWVzIHRvIHByb3BhZ2F0ZSBpdA0KICAgICsgICAgICAg
ICAgICAjIHRvKS4NCiAgICArICAgICAgICAgICAgbWFrZV9kZXBlbmRfb24oc3ltLCBzeW0uZGly
ZWN0X2RlcCkNCiAgICArDQogICAgKyAgICAgICAgICAgICMgSW4gYWRkaXRpb24gdG8gdGhlIGFi
b3ZlLCBjaG9pY2Ugc3ltYm9scyBkZXBlbmQgb24gdGhlIGNob2ljZQ0KICAgICsgICAgICAgICAg
ICAjIHRoZXkncmUgaW4sIGJ1dCB0aGF0J3MgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IHNpbmNlIHRo
ZSBDaG9pY2UgaXMNCiAgICArICAgICAgICAgICAgIyBwcm9wYWdhdGVkIHRvIHRoZSBjb25kaXRp
b25zIG9mIHRoZSBwcm9wZXJ0aWVzIGJlZm9yZQ0KICAgICsgICAgICAgICAgICAjIF9idWlsZF9k
ZXAoKSBydW5zLg0KICAgICsNCiAgICArICAgICAgICBmb3IgY2hvaWNlIGluIHNlbGYudW5pcXVl
X2Nob2ljZXM6DQogICAgKyAgICAgICAgICAgICMgQ2hvaWNlcyBkZXBlbmQgb24gdGhlIGZvbGxv
d2luZzoNCiAgICArDQogICAgKyAgICAgICAgICAgICMgVGhlIHByb21wdCBjb25kaXRpb25zDQog
ICAgKyAgICAgICAgICAgIGZvciBub2RlIGluIGNob2ljZS5ub2RlczoNCiAgICArICAgICAgICAg
ICAgICAgIGlmIG5vZGUucHJvbXB0Og0KICAgICsgICAgICAgICAgICAgICAgICAgIG1ha2VfZGVw
ZW5kX29uKGNob2ljZSwgbm9kZS5wcm9tcHRbMV0pDQogICAgKw0KICAgICsgICAgICAgICAgICAj
IFRoZSBkZWZhdWx0IHN5bWJvbCBjb25kaXRpb25zDQogICAgKyAgICAgICAgICAgIGZvciBfLCBj
b25kIGluIGNob2ljZS5kZWZhdWx0czoNCiAgICArICAgICAgICAgICAgICAgIG1ha2VfZGVwZW5k
X29uKGNob2ljZSwgY29uZCkNCiAgICArDQogICAgKyAgICBkZWYgX2FkZF9jaG9pY2VfZGVwcyhz
ZWxmKToNCiAgICArICAgICAgICAjIENob2ljZXMgYWxzbyBkZXBlbmQgb24gdGhlIGNob2ljZSBz
eW1ib2xzIHRoZW1zZWx2ZXMsIGJlY2F1c2UgdGhlDQogICAgKyAgICAgICAgIyB5LW1vZGUgc2Vs
ZWN0aW9uIG9mIHRoZSBjaG9pY2UgbWlnaHQgY2hhbmdlIGlmIGEgY2hvaWNlIHN5bWJvbCdzDQog
ICAgKyAgICAgICAgIyB2aXNpYmlsaXR5IGNoYW5nZXMuDQogICAgKyAgICAgICAgIw0KICAgICsg
ICAgICAgICMgV2UgYWRkIHRoZXNlIGRlcGVuZGVuY2llcyBzZXBhcmF0ZWx5IGFmdGVyIGRlcGVu
ZGVuY3kgbG9vcCBkZXRlY3Rpb24uDQogICAgKyAgICAgICAgIyBUaGUgaW52YWxpZGF0aW9uIGFs
Z29yaXRobSBjYW4gaGFuZGxlIHRoZSByZXN1bHRpbmcNCiAgICArICAgICAgICAjIDxjaG9pY2Ug
c3ltYm9sPiA8LT4gPGNob2ljZT4gZGVwZW5kZW5jeSBsb29wcywgYnV0IHRoZXkgbWFrZSBsb29w
DQogICAgKyAgICAgICAgIyBkZXRlY3Rpb24gYXdrd2FyZC4NCiAgICArDQogICAgKyAgICAgICAg
Zm9yIGNob2ljZSBpbiBzZWxmLnVuaXF1ZV9jaG9pY2VzOg0KICAgICsgICAgICAgICAgICBmb3Ig
c3ltIGluIGNob2ljZS5zeW1zOg0KICAgICsgICAgICAgICAgICAgICAgc3ltLl9kZXBlbmRlbnRz
LmFkZChjaG9pY2UpDQogICAgKw0KICAgICsgICAgZGVmIF9pbnZhbGlkYXRlX2FsbChzZWxmKToN
CiAgICArICAgICAgICAjIFVuZGVmaW5lZCBzeW1ib2xzIG5ldmVyIGNoYW5nZSB2YWx1ZSBhbmQg
ZG9uJ3QgbmVlZCB0byBiZQ0KICAgICsgICAgICAgICMgaW52YWxpZGF0ZWQsIHNvIHdlIGNhbiBq
dXN0IGl0ZXJhdGUgb3ZlciBkZWZpbmVkIHN5bWJvbHMuDQogICAgKyAgICAgICAgIyBJbnZhbGlk
YXRpbmcgY29uc3RhbnQgc3ltYm9scyB3b3VsZCBicmVhayB0aGluZ3MgaG9ycmlibHkuDQogICAg
KyAgICAgICAgZm9yIHN5bSBpbiBzZWxmLnVuaXF1ZV9kZWZpbmVkX3N5bXM6DQogICAgKyAgICAg
ICAgICAgIHN5bS5faW52YWxpZGF0ZSgpDQogICAgKw0KICAgICsgICAgICAgIGZvciBjaG9pY2Ug
aW4gc2VsZi51bmlxdWVfY2hvaWNlczoNCiAgICArICAgICAgICAgICAgY2hvaWNlLl9pbnZhbGlk
YXRlKCkNCiAgICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFBvc3QtcGFyc2luZyBtZW51IHRy
ZWUgcHJvY2Vzc2luZywgaW5jbHVkaW5nIGRlcGVuZGVuY3kgcHJvcGFnYXRpb24gYW5kDQogICAg
KyAgICAjIGltcGxpY2l0IHN1Ym1lbnUgY3JlYXRpb24NCiAgICArICAgICMNCiAgICArDQogICAg
KyAgICBkZWYgX2ZpbmFsaXplX25vZGUoc2VsZiwgbm9kZSwgdmlzaWJsZV9pZik6DQogICAgKyAg
ICAgICAgIyBGaW5hbGl6ZXMgYSBtZW51IG5vZGUgYW5kIGl0cyBjaGlsZHJlbjoNCiAgICArICAg
ICAgICAjDQogICAgKyAgICAgICAgIyAgLSBDb3BpZXMgcHJvcGVydGllcyBmcm9tIG1lbnUgbm9k
ZXMgdXAgdG8gdGhlaXIgY29udGFpbmVkDQogICAgKyAgICAgICAgIyAgICBzeW1ib2xzL2Nob2lj
ZXMNCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyAgLSBQcm9wYWdhdGVzIGRlcGVuZGVu
Y2llcyBmcm9tIHBhcmVudCB0byBjaGlsZCBub2Rlcw0KICAgICsgICAgICAgICMNCiAgICArICAg
ICAgICAjICAtIENyZWF0ZXMgaW1wbGljaXQgbWVudXMgKHNlZSBrY29uZmlnLWxhbmd1YWdlLnR4
dCkNCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyAgLSBSZW1vdmVzICdpZicgbm9kZXMN
CiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyAgLSBTZXRzICdjaG9pY2UnIHR5cGVzIGFu
ZCByZWdpc3RlcnMgY2hvaWNlIHN5bWJvbHMNCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAg
IyBtZW51X2ZpbmFsaXplKCkgaW4gdGhlIEMgaW1wbGVtZW50YXRpb24gaXMgc2ltaWxhci4NCiAg
ICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBub2RlOg0KICAgICsgICAgICAgICMgICBUaGUg
bWVudSBub2RlIHRvIGZpbmFsaXplLiBUaGlzIG5vZGUgYW5kIGl0cyBjaGlsZHJlbiB3aWxsIGhh
dmUNCiAgICArICAgICAgICAjICAgYmVlbiBmaW5hbGl6ZWQgd2hlbiB0aGUgZnVuY3Rpb24gcmV0
dXJucywgYW5kIGFueSBpbXBsaWNpdCBtZW51cw0KICAgICsgICAgICAgICMgICB3aWxsIGhhdmUg
YmVlbiBjcmVhdGVkLg0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjIHZpc2libGVfaWY6
DQogICAgKyAgICAgICAgIyAgIERlcGVuZGVuY2llcyBmcm9tICd2aXNpYmxlIGlmJyBvbiBwYXJl
bnQgbWVudXMuIFRoZXNlIGFyZSBhZGRlZCB0bw0KICAgICsgICAgICAgICMgICB0aGUgcHJvbXB0
cyBvZiBzeW1ib2xzIGFuZCBjaG9pY2VzLg0KICAgICsNCiAgICArICAgICAgICBpZiBub2RlLml0
ZW0uX19jbGFzc19fIGlzIFN5bWJvbDoNCiAgICArICAgICAgICAgICAgIyBDb3B5IGRlZmF1bHRz
LCByYW5nZXMsIHNlbGVjdHMsIGFuZCBpbXBsaWVzIHRvIHRoZSBTeW1ib2wNCiAgICArICAgICAg
ICAgICAgc2VsZi5fYWRkX3Byb3BzX3RvX3N5bShub2RlKQ0KICAgICsNCiAgICArICAgICAgICAg
ICAgIyBGaW5kIGFueSBpdGVtcyB0aGF0IHNob3VsZCBnbyBpbiBhbiBpbXBsaWNpdCBtZW51IHJv
b3RlZCBhdCB0aGUNCiAgICArICAgICAgICAgICAgIyBzeW1ib2wNCiAgICArICAgICAgICAgICAg
Y3VyID0gbm9kZQ0KICAgICsgICAgICAgICAgICB3aGlsZSBjdXIubmV4dCBhbmQgX2F1dG9fbWVu
dV9kZXAobm9kZSwgY3VyLm5leHQpOg0KICAgICsgICAgICAgICAgICAgICAgIyBUaGlzIG1ha2Vz
IGltcGxpY2l0IHN1Ym1lbnUgY3JlYXRpb24gd29yayByZWN1cnNpdmVseSwgd2l0aA0KICAgICsg
ICAgICAgICAgICAgICAgIyBpbXBsaWNpdCBtZW51cyBpbnNpZGUgaW1wbGljaXQgbWVudXMNCiAg
ICArICAgICAgICAgICAgICAgIHNlbGYuX2ZpbmFsaXplX25vZGUoY3VyLm5leHQsIHZpc2libGVf
aWYpDQogICAgKyAgICAgICAgICAgICAgICBjdXIgPSBjdXIubmV4dA0KICAgICsgICAgICAgICAg
ICAgICAgY3VyLnBhcmVudCA9IG5vZGUNCiAgICArDQogICAgKyAgICAgICAgICAgIGlmIGN1ciBp
cyBub3Qgbm9kZToNCiAgICArICAgICAgICAgICAgICAgICMgRm91bmQgc3ltYm9scyB0aGF0IHNo
b3VsZCBnbyBpbiBhbiBpbXBsaWNpdCBzdWJtZW51LiBUaWx0DQogICAgKyAgICAgICAgICAgICAg
ICAjIHRoZW0gdXAgYWJvdmUgdXMuDQogICAgKyAgICAgICAgICAgICAgICBub2RlLmxpc3QgPSBu
b2RlLm5leHQNCiAgICArICAgICAgICAgICAgICAgIG5vZGUubmV4dCA9IGN1ci5uZXh0DQogICAg
KyAgICAgICAgICAgICAgICBjdXIubmV4dCA9IE5vbmUNCiAgICArDQogICAgKyAgICAgICAgZWxp
ZiBub2RlLmxpc3Q6DQogICAgKyAgICAgICAgICAgICMgVGhlIG1lbnUgbm9kZSBpcyBhIGNob2lj
ZSwgbWVudSwgb3IgaWYuIEZpbmFsaXplIGVhY2ggY2hpbGQgbm9kZS4NCiAgICArDQogICAgKyAg
ICAgICAgICAgIGlmIG5vZGUuaXRlbSBpcyBNRU5VOg0KICAgICsgICAgICAgICAgICAgICAgdmlz
aWJsZV9pZiA9IHNlbGYuX21ha2VfYW5kKHZpc2libGVfaWYsIG5vZGUudmlzaWJpbGl0eSkNCiAg
ICArDQogICAgKyAgICAgICAgICAgICMgUHJvcGFnYXRlIHRoZSBtZW51IG5vZGUncyBkZXBlbmRl
bmNpZXMgdG8gZWFjaCBjaGlsZCBtZW51IG5vZGUuDQogICAgKyAgICAgICAgICAgICMNCiAgICAr
ICAgICAgICAgICAgIyBUaGlzIG5lZWRzIHRvIGdvIGJlZm9yZSB0aGUgcmVjdXJzaXZlIF9maW5h
bGl6ZV9ub2RlKCkgY2FsbCBzbw0KICAgICsgICAgICAgICAgICAjIHRoYXQgaW1wbGljaXQgc3Vi
bWVudSBjcmVhdGlvbiBjYW4gbG9vayBhaGVhZCBhdCBkZXBlbmRlbmNpZXMuDQogICAgKyAgICAg
ICAgICAgIHNlbGYuX3Byb3BhZ2F0ZV9kZXBzKG5vZGUsIHZpc2libGVfaWYpDQogICAgKw0KICAg
ICsgICAgICAgICAgICAjIEZpbmFsaXplIHRoZSBjaGlsZHJlbg0KICAgICsgICAgICAgICAgICBj
dXIgPSBub2RlLmxpc3QNCiAgICArICAgICAgICAgICAgd2hpbGUgY3VyOg0KICAgICsgICAgICAg
ICAgICAgICAgc2VsZi5fZmluYWxpemVfbm9kZShjdXIsIHZpc2libGVfaWYpDQogICAgKyAgICAg
ICAgICAgICAgICBjdXIgPSBjdXIubmV4dA0KICAgICsNCiAgICArICAgICAgICBpZiBub2RlLmxp
c3Q6DQogICAgKyAgICAgICAgICAgICMgbm9kZSdzIGNoaWxkcmVuIGhhdmUgYmVlbiBpbmRpdmlk
dWFsbHkgZmluYWxpemVkLiBEbyBmaW5hbCBzdGVwcw0KICAgICsgICAgICAgICAgICAjIHRvIGZp
bmFsaXplIHRoaXMgImxldmVsIiBpbiB0aGUgbWVudSB0cmVlLg0KICAgICsgICAgICAgICAgICBf
ZmxhdHRlbihub2RlLmxpc3QpDQogICAgKyAgICAgICAgICAgIF9yZW1vdmVfaWZzKG5vZGUpDQog
ICAgKw0KICAgICsgICAgICAgICMgRW1wdHkgY2hvaWNlcyAobm9kZS5saXN0IE5vbmUpIGFyZSBw
b3NzaWJsZSwgc28gdGhpcyBuZWVkcyB0byBnbw0KICAgICsgICAgICAgICMgb3V0c2lkZQ0KICAg
ICsgICAgICAgIGlmIG5vZGUuaXRlbS5fX2NsYXNzX18gaXMgQ2hvaWNlOg0KICAgICsgICAgICAg
ICAgICAjIEFkZCB0aGUgbm9kZSdzIG5vbi1ub2RlLXNwZWNpZmljIHByb3BlcnRpZXMgdG8gdGhl
IGNob2ljZSwgbGlrZQ0KICAgICsgICAgICAgICAgICAjIF9hZGRfcHJvcHNfdG9fc3ltKCkgZG9l
cw0KICAgICsgICAgICAgICAgICBjaG9pY2UgPSBub2RlLml0ZW0NCiAgICArICAgICAgICAgICAg
Y2hvaWNlLmRpcmVjdF9kZXAgPSBzZWxmLl9tYWtlX29yKGNob2ljZS5kaXJlY3RfZGVwLCBub2Rl
LmRlcCkNCiAgICArICAgICAgICAgICAgY2hvaWNlLmRlZmF1bHRzICs9IG5vZGUuZGVmYXVsdHMN
CiAgICArDQogICAgKyAgICAgICAgICAgIF9maW5hbGl6ZV9jaG9pY2Uobm9kZSkNCiAgICArDQog
ICAgKyAgICBkZWYgX3Byb3BhZ2F0ZV9kZXBzKHNlbGYsIG5vZGUsIHZpc2libGVfaWYpOg0KICAg
ICsgICAgICAgICMgUHJvcGFnYXRlcyAnbm9kZSdzIGRlcGVuZGVuY2llcyB0byBpdHMgY2hpbGQg
bWVudSBub2Rlcw0KICAgICsNCiAgICArICAgICAgICAjIElmIHRoZSBwYXJlbnQgbm9kZSBob2xk
cyBhIENob2ljZSwgd2UgdXNlIHRoZSBDaG9pY2UgaXRzZWxmIGFzIHRoZQ0KICAgICsgICAgICAg
ICMgcGFyZW50IGRlcGVuZGVuY3kuIFRoaXMgbWFrZXMgc2Vuc2UgYXMgdGhlIHZhbHVlIChtb2Rl
KSBvZiB0aGUgY2hvaWNlDQogICAgKyAgICAgICAgIyBsaW1pdHMgdGhlIHZpc2liaWxpdHkgb2Yg
dGhlIGNvbnRhaW5lZCBjaG9pY2Ugc3ltYm9scy4gVGhlIEMNCiAgICArICAgICAgICAjIGltcGxl
bWVudGF0aW9uIHdvcmtzIHRoZSBzYW1lIHdheS4NCiAgICArICAgICAgICAjDQogICAgKyAgICAg
ICAgIyBEdWUgdG8gdGhlIHNpbWlsYXIgaW50ZXJmYWNlLCBDaG9pY2Ugd29ya3MgYXMgYSBkcm9w
LWluIHJlcGxhY2VtZW50DQogICAgKyAgICAgICAgIyBmb3IgU3ltYm9sIGhlcmUuDQogICAgKyAg
ICAgICAgYmFzZWRlcCA9IG5vZGUuaXRlbSBpZiBub2RlLml0ZW0uX19jbGFzc19fIGlzIENob2lj
ZSBlbHNlIG5vZGUuZGVwDQogICAgKw0KICAgICsgICAgICAgIGN1ciA9IG5vZGUubGlzdA0KICAg
ICsgICAgICAgIHdoaWxlIGN1cjoNCiAgICArICAgICAgICAgICAgZGVwID0gY3VyLmRlcCA9IHNl
bGYuX21ha2VfYW5kKGN1ci5kZXAsIGJhc2VkZXApDQogICAgKw0KICAgICsgICAgICAgICAgICBp
ZiBjdXIuaXRlbS5fX2NsYXNzX18gaW4gX1NZTUJPTF9DSE9JQ0U6DQogICAgKyAgICAgICAgICAg
ICAgICAjIFByb3BhZ2F0ZSAndmlzaWJsZSBpZicgYW5kIGRlcGVuZGVuY2llcyB0byB0aGUgcHJv
bXB0DQogICAgKyAgICAgICAgICAgICAgICBpZiBjdXIucHJvbXB0Og0KICAgICsgICAgICAgICAg
ICAgICAgICAgIGN1ci5wcm9tcHQgPSAoY3VyLnByb21wdFswXSwNCiAgICArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX21ha2VfYW5kKA0KICAgICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGN1ci5wcm9tcHRbMV0sDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9hbmQodmlzaWJsZV9pZiwgZGVw
KSkpDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgIyBQcm9wYWdhdGUgZGVwZW5kZW5jaWVz
IHRvIGRlZmF1bHRzDQogICAgKyAgICAgICAgICAgICAgICBpZiBjdXIuZGVmYXVsdHM6DQogICAg
KyAgICAgICAgICAgICAgICAgICAgY3VyLmRlZmF1bHRzID0gWyhkZWZhdWx0LCBzZWxmLl9tYWtl
X2FuZChjb25kLCBkZXApKQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3IgZGVmYXVsdCwgY29uZCBpbiBjdXIuZGVmYXVsdHNdDQogICAgKw0KICAgICsgICAgICAg
ICAgICAgICAgIyBQcm9wYWdhdGUgZGVwZW5kZW5jaWVzIHRvIHJhbmdlcw0KICAgICsgICAgICAg
ICAgICAgICAgaWYgY3VyLnJhbmdlczoNCiAgICArICAgICAgICAgICAgICAgICAgICBjdXIucmFu
Z2VzID0gWyhsb3csIGhpZ2gsIHNlbGYuX21ha2VfYW5kKGNvbmQsIGRlcCkpDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbG93LCBoaWdoLCBjb25kIGluIGN1ci5y
YW5nZXNdDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgIyBQcm9wYWdhdGUgZGVwZW5kZW5j
aWVzIHRvIHNlbGVjdHMNCiAgICArICAgICAgICAgICAgICAgIGlmIGN1ci5zZWxlY3RzOg0KICAg
ICsgICAgICAgICAgICAgICAgICAgIGN1ci5zZWxlY3RzID0gWyh0YXJnZXQsIHNlbGYuX21ha2Vf
YW5kKGNvbmQsIGRlcCkpDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIHRhcmdldCwgY29uZCBpbiBjdXIuc2VsZWN0c10NCiAgICArDQogICAgKyAgICAgICAgICAg
ICAgICAjIFByb3BhZ2F0ZSBkZXBlbmRlbmNpZXMgdG8gaW1wbGllcw0KICAgICsgICAgICAgICAg
ICAgICAgaWYgY3VyLmltcGxpZXM6DQogICAgKyAgICAgICAgICAgICAgICAgICAgY3VyLmltcGxp
ZXMgPSBbKHRhcmdldCwgc2VsZi5fbWFrZV9hbmQoY29uZCwgZGVwKSkNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGFyZ2V0LCBjb25kIGluIGN1ci5pbXBsaWVz
XQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxpZiBjdXIucHJvbXB0OiAgIyBOb3QgYSBzeW1i
b2wvY2hvaWNlDQogICAgKyAgICAgICAgICAgICAgICAjIFByb3BhZ2F0ZSBkZXBlbmRlbmNpZXMg
dG8gdGhlIHByb21wdC4gJ3Zpc2libGUgaWYnIGlzIG9ubHkNCiAgICArICAgICAgICAgICAgICAg
ICMgcHJvcGFnYXRlZCB0byBzeW1ib2xzL2Nob2ljZXMuDQogICAgKyAgICAgICAgICAgICAgICBj
dXIucHJvbXB0ID0gKGN1ci5wcm9tcHRbMF0sDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX21ha2VfYW5kKGN1ci5wcm9tcHRbMV0sIGRlcCkpDQogICAgKw0KICAgICsg
ICAgICAgICAgICBjdXIgPSBjdXIubmV4dA0KICAgICsNCiAgICArICAgIGRlZiBfYWRkX3Byb3Bz
X3RvX3N5bShzZWxmLCBub2RlKToNCiAgICArICAgICAgICAjIENvcGllcyBwcm9wZXJ0aWVzIGZy
b20gdGhlIG1lbnUgbm9kZSAnbm9kZScgdXAgdG8gaXRzIGNvbnRhaW5lZA0KICAgICsgICAgICAg
ICMgc3ltYm9sLCBhbmQgYWRkcyAod2VhaykgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgdG8gc2VsZWN0
ZWQvaW1wbGllZA0KICAgICsgICAgICAgICMgc3ltYm9scy4NCiAgICArICAgICAgICAjDQogICAg
KyAgICAgICAgIyBUaGlzIGNhbid0IGJlIHJvbGxlZCBpbnRvIF9wcm9wYWdhdGVfZGVwcygpLCBi
ZWNhdXNlIHRoYXQgZnVuY3Rpb24NCiAgICArICAgICAgICAjIHRyYXZlcnNlcyB0aGUgbWVudSB0
cmVlIHJvdWdobHkgYnJlYWR0aC1maXJzdCwgbWVhbmluZyBwcm9wZXJ0aWVzIG9uDQogICAgKyAg
ICAgICAgIyBzeW1ib2xzIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGNvdWxkIGVuZCB1
cCBpbiB0aGUgd3JvbmcNCiAgICArICAgICAgICAjIG9yZGVyLg0KICAgICsNCiAgICArICAgICAg
ICBzeW0gPSBub2RlLml0ZW0NCiAgICArDQogICAgKyAgICAgICAgIyBTZWUgdGhlIFN5bWJvbCBj
bGFzcyBkb2NzdHJpbmcNCiAgICArICAgICAgICBzeW0uZGlyZWN0X2RlcCA9IHNlbGYuX21ha2Vf
b3Ioc3ltLmRpcmVjdF9kZXAsIG5vZGUuZGVwKQ0KICAgICsNCiAgICArICAgICAgICBzeW0uZGVm
YXVsdHMgKz0gbm9kZS5kZWZhdWx0cw0KICAgICsgICAgICAgIHN5bS5yYW5nZXMgKz0gbm9kZS5y
YW5nZXMNCiAgICArICAgICAgICBzeW0uc2VsZWN0cyArPSBub2RlLnNlbGVjdHMNCiAgICArICAg
ICAgICBzeW0uaW1wbGllcyArPSBub2RlLmltcGxpZXMNCiAgICArDQogICAgKyAgICAgICAgIyBN
b2RpZnkgdGhlIHJldmVyc2UgZGVwZW5kZW5jaWVzIG9mIHRoZSBzZWxlY3RlZCBzeW1ib2wNCiAg
ICArICAgICAgICBmb3IgdGFyZ2V0LCBjb25kIGluIG5vZGUuc2VsZWN0czoNCiAgICArICAgICAg
ICAgICAgdGFyZ2V0LnJldl9kZXAgPSBzZWxmLl9tYWtlX29yKA0KICAgICsgICAgICAgICAgICAg
ICAgdGFyZ2V0LnJldl9kZXAsDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX2FuZChz
eW0sIGNvbmQpKQ0KICAgICsNCiAgICArICAgICAgICAjIE1vZGlmeSB0aGUgd2VhayByZXZlcnNl
IGRlcGVuZGVuY2llcyBvZiB0aGUgaW1wbGllZA0KICAgICsgICAgICAgICMgc3ltYm9sDQogICAg
KyAgICAgICAgZm9yIHRhcmdldCwgY29uZCBpbiBub2RlLmltcGxpZXM6DQogICAgKyAgICAgICAg
ICAgIHRhcmdldC53ZWFrX3Jldl9kZXAgPSBzZWxmLl9tYWtlX29yKA0KICAgICsgICAgICAgICAg
ICAgICAgdGFyZ2V0LndlYWtfcmV2X2RlcCwNCiAgICArICAgICAgICAgICAgICAgIHNlbGYuX21h
a2VfYW5kKHN5bSwgY29uZCkpDQogICAgKw0KICAgICsgICAgIw0KICAgICsgICAgIyBNaXNjLg0K
ICAgICsgICAgIw0KICAgICsNCiAgICArICAgIGRlZiBfY2hlY2tfc3ltX3Nhbml0eShzZWxmKToN
CiAgICArICAgICAgICAjIENoZWNrcyB2YXJpb3VzIHN5bWJvbCBwcm9wZXJ0aWVzIHRoYXQgYXJl
IGhhbmRpZXN0IHRvIGNoZWNrIGFmdGVyDQogICAgKyAgICAgICAgIyBwYXJzaW5nLiBPbmx5IGdl
bmVyYXRlcyBlcnJvcnMgYW5kIHdhcm5pbmdzLg0KICAgICsNCiAgICArICAgICAgICBkZWYgbnVt
X29rKHN5bSwgdHlwZV8pOg0KICAgICsgICAgICAgICAgICAjIFJldHVybnMgVHJ1ZSBpZiB0aGUg
KHBvc3NpYmx5IGNvbnN0YW50KSBzeW1ib2wgJ3N5bScgaXMgdmFsaWQgYXMgYSB2YWx1ZQ0KICAg
ICsgICAgICAgICAgICAjIGZvciBhIHN5bWJvbCBvZiB0eXBlIHR5cGVfIChJTlQgb3IgSEVYKQ0K
ICAgICsNCiAgICArICAgICAgICAgICAgIyAnbm90IHN5bS5ub2RlcycgaW1wbGllcyBhIGNvbnN0
YW50IG9yIHVuZGVmaW5lZCBzeW1ib2wsIGUuZy4gYSBwbGFpbg0KICAgICsgICAgICAgICAgICAj
ICIxMjMiDQogICAgKyAgICAgICAgICAgIGlmIG5vdCBzeW0ubm9kZXM6DQogICAgKyAgICAgICAg
ICAgICAgICByZXR1cm4gX2lzX2Jhc2VfbihzeW0ubmFtZSwgX1RZUEVfVE9fQkFTRVt0eXBlX10p
DQogICAgKw0KICAgICsgICAgICAgICAgICByZXR1cm4gc3ltLm9yaWdfdHlwZSBpcyB0eXBlXw0K
ICAgICsNCiAgICArICAgICAgICBmb3Igc3ltIGluIHNlbGYudW5pcXVlX2RlZmluZWRfc3ltczoN
CiAgICArICAgICAgICAgICAgaWYgc3ltLm9yaWdfdHlwZSBpbiBfQk9PTF9UUklTVEFURToNCiAg
ICArICAgICAgICAgICAgICAgICMgQSBoZWxwZXIgZnVuY3Rpb24gY291bGQgYmUgZmFjdG9yZWQg
b3V0IGhlcmUsIGJ1dCBrZWVwIGl0DQogICAgKyAgICAgICAgICAgICAgICAjIHNwZWVkeS9zdHJh
aWdodGZvcndhcmQNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBmb3IgdGFyZ2V0X3N5bSwg
XyBpbiBzeW0uc2VsZWN0czoNCiAgICArICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXRfc3lt
Lm9yaWdfdHlwZSBub3QgaW4gX0JPT0xfVFJJU1RBVEVfVU5LTk9XTjoNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgc2VsZi5fd2Fybigie30gc2VsZWN0cyB0aGUge30gc3ltYm9sIHt9LCB3
aGljaCBpcyBub3QgIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJi
b29sIG9yIHRyaXN0YXRlIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5mb3JtYXQoX25hbWVfYW5kX2xvYyhzeW0pLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVFlQRV9UT19TVFJbdGFyZ2V0X3N5bS5vcmlnX3R5cGVdLA0K
ICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25hbWVfYW5k
X2xvYyh0YXJnZXRfc3ltKSkpDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgZm9yIHRhcmdl
dF9zeW0sIF8gaW4gc3ltLmltcGxpZXM6DQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgdGFy
Z2V0X3N5bS5vcmlnX3R5cGUgbm90IGluIF9CT09MX1RSSVNUQVRFX1VOS05PV046DQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhcm4oInt9IGltcGxpZXMgdGhlIHt9IHN5bWJv
bCB7fSwgd2hpY2ggaXMgbm90ICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYm9vbCBvciB0cmlzdGF0ZSINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZm9ybWF0KF9uYW1lX2FuZF9sb2Moc3ltKSwNCiAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRZUEVfVE9fU1RSW3RhcmdldF9zeW0ub3JpZ190
eXBlXSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9u
YW1lX2FuZF9sb2ModGFyZ2V0X3N5bSkpKQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxpZiBz
eW0ub3JpZ190eXBlOiAgIyBTVFJJTkcvSU5UL0hFWA0KICAgICsgICAgICAgICAgICAgICAgZm9y
IGRlZmF1bHQsIF8gaW4gc3ltLmRlZmF1bHRzOg0KICAgICsgICAgICAgICAgICAgICAgICAgIGlm
IGRlZmF1bHQuX19jbGFzc19fIGlzIG5vdCBTeW1ib2w6DQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIEtjb25maWdFcnJvcigNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ0aGUge30gc3ltYm9sIHt9IGhhcyBhIG1hbGZvcm1lZCBkZWZhdWx0IHt9IC0tIGV4cGVj
dGVkICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhIHNpbmdsZSBzeW1ib2wi
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KFRZUEVfVE9fU1RSW3N5
bS5vcmlnX3R5cGVdLCBfbmFtZV9hbmRfbG9jKHN5bSksDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGV4cHJfc3RyKGRlZmF1bHQpKSkNCiAgICArDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgaWYgc3ltLm9yaWdfdHlwZSBpcyBTVFJJTkc6DQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIG5vdCBkZWZhdWx0LmlzX2NvbnN0YW50IGFuZCBub3QgZGVmYXVs
dC5ub2RlcyBhbmQgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZGVmYXVs
dC5uYW1lLmlzdXBwZXIoKToNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ2Rl
ZmF1bHQgZm9vJyBvbiBhIHN0cmluZyBzeW1ib2wgY291bGQgYmUgZWl0aGVyIGEgc3ltYm9sDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHJlZmVyZW5jZSBvciBzb21lb25lIGxl
YXZpbmcgb3V0IHRoZSBxdW90ZXMuIEd1ZXNzIHRoYXQNCiAgICArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgdGhlIHF1b3RlcyB3ZXJlIGxlZnQgb3V0IGlmICdmb28nIGlzbid0IGFsbC11
cHBlcmNhc2UNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKGFuZCBubyBzeW1i
b2wgbmFtZWQgJ2ZvbycgZXhpc3RzKS4NCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlbGYuX3dhcm4oInN0eWxlOiBxdW90ZXMgcmVjb21tZW5kZWQgYXJvdW5kICINCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZmF1bHQgdmFsdWUgZm9yIHN0
cmluZyBzeW1ib2wgIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICArIF9uYW1lX2FuZF9sb2Moc3ltKSkNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ZWxpZiBub3QgbnVtX29rKGRlZmF1bHQsIHN5bS5vcmlnX3R5cGUpOiAgIyBJTlQvSEVYDQogICAg
KyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhcm4oInRoZSB7MH0gc3ltYm9sIHsxfSBo
YXMgYSBub24tezB9IGRlZmF1bHQgezJ9Ig0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC5mb3JtYXQoVFlQRV9UT19TVFJbc3ltLm9yaWdfdHlwZV0sDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZV9hbmRfbG9jKHN5bSks
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZV9h
bmRfbG9jKGRlZmF1bHQpKSkNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBpZiBzeW0uc2Vs
ZWN0cyBvciBzeW0uaW1wbGllczoNCiAgICArICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXJu
KCJ0aGUge30gc3ltYm9sIHt9IGhhcyBzZWxlY3RzIG9yIGltcGxpZXMiDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KFRZUEVfVE9fU1RSW3N5bS5vcmlnX3R5cGVd
LA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZV9hbmRf
bG9jKHN5bSkpKQ0KICAgICsNCiAgICArICAgICAgICAgICAgZWxzZTogICMgVU5LTk9XTg0KICAg
ICsgICAgICAgICAgICAgICAgc2VsZi5fd2Fybigie30gZGVmaW5lZCB3aXRob3V0IGEgdHlwZSIN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChfbmFtZV9hbmRfbG9jKHN5
bSkpKQ0KICAgICsNCiAgICArDQogICAgKyAgICAgICAgICAgIGlmIHN5bS5yYW5nZXM6DQogICAg
KyAgICAgICAgICAgICAgICBpZiBzeW0ub3JpZ190eXBlIG5vdCBpbiBfSU5UX0hFWDoNCiAgICAr
ICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXJuKA0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICAidGhlIHt9IHN5bWJvbCB7fSBoYXMgcmFuZ2VzLCBidXQgaXMgbm90IGludCBvciBoZXgi
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoVFlQRV9UT19TVFJbc3ltLm9y
aWdfdHlwZV0sDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25hbWVfYW5k
X2xvYyhzeW0pKSkNCiAgICArICAgICAgICAgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAg
ICAgICAgICAgZm9yIGxvdywgaGlnaCwgXyBpbiBzeW0ucmFuZ2VzOg0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBub3QgbnVtX29rKGxvdywgc3ltLm9yaWdfdHlwZSkgb3IgXA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgbnVtX29rKGhpZ2gsIHN5bS5vcmlnX3R5
cGUpOg0KICAgICsNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhcm4o
InRoZSB7MH0gc3ltYm9sIHsxfSBoYXMgYSBub24tezB9ICINCiAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInJhbmdlIFt7Mn0sIHszfV0iDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoVFlQRV9UT19TVFJbc3ltLm9y
aWdfdHlwZV0sDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX25hbWVfYW5kX2xvYyhzeW0pLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9uYW1lX2FuZF9sb2MobG93KSwNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZV9hbmRfbG9jKGhpZ2gp
KSkNCiAgICArDQogICAgKyAgICBkZWYgX2NoZWNrX2Nob2ljZV9zYW5pdHkoc2VsZik6DQogICAg
KyAgICAgICAgIyBDaGVja3MgdmFyaW91cyBjaG9pY2UgcHJvcGVydGllcyB0aGF0IGFyZSBoYW5k
aWVzdCB0byBjaGVjayBhZnRlcg0KICAgICsgICAgICAgICMgcGFyc2luZy4gT25seSBnZW5lcmF0
ZXMgZXJyb3JzIGFuZCB3YXJuaW5ncy4NCiAgICArDQogICAgKyAgICAgICAgZGVmIHdhcm5fc2Vs
ZWN0X2ltcGx5KHN5bSwgZXhwciwgZXhwcl90eXBlKToNCiAgICArICAgICAgICAgICAgbXNnID0g
InRoZSBjaG9pY2Ugc3ltYm9sIHt9IGlzIHt9IGJ5IHRoZSBmb2xsb3dpbmcgc3ltYm9scywgYnV0
ICIgXA0KICAgICsgICAgICAgICAgICAgICAgICAic2VsZWN0L2ltcGx5IGhhcyBubyBlZmZlY3Qg
b24gY2hvaWNlIHN5bWJvbHMiIFwNCiAgICArICAgICAgICAgICAgICAgICAgLmZvcm1hdChfbmFt
ZV9hbmRfbG9jKHN5bSksIGV4cHJfdHlwZSkNCiAgICArDQogICAgKyAgICAgICAgICAgICMgc2kg
PSBzZWxlY3QvaW1wbHkNCiAgICArICAgICAgICAgICAgZm9yIHNpIGluIHNwbGl0X2V4cHIoZXhw
ciwgT1IpOg0KICAgICsgICAgICAgICAgICAgICAgbXNnICs9ICJcbiAtICIgKyBfbmFtZV9hbmRf
bG9jKHNwbGl0X2V4cHIoc2ksIEFORClbMF0pDQogICAgKw0KICAgICsgICAgICAgICAgICBzZWxm
Ll93YXJuKG1zZykNCiAgICArDQogICAgKyAgICAgICAgZm9yIGNob2ljZSBpbiBzZWxmLnVuaXF1
ZV9jaG9pY2VzOg0KICAgICsgICAgICAgICAgICBpZiBjaG9pY2Uub3JpZ190eXBlIG5vdCBpbiBf
Qk9PTF9UUklTVEFURToNCiAgICArICAgICAgICAgICAgICAgIHNlbGYuX3dhcm4oInt9IGRlZmlu
ZWQgd2l0aCB0eXBlIHt9Ig0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0
KF9uYW1lX2FuZF9sb2MoY2hvaWNlKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUWVBFX1RPX1NUUltjaG9pY2Uub3JpZ190eXBlXSkpDQogICAgKw0KICAgICsgICAg
ICAgICAgICBmb3Igbm9kZSBpbiBjaG9pY2Uubm9kZXM6DQogICAgKyAgICAgICAgICAgICAgICBp
ZiBub2RlLnByb21wdDoNCiAgICArICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAg
ICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgc2VsZi5fd2FybihfbmFtZV9hbmRf
bG9jKGNob2ljZSkgKyAiIGRlZmluZWQgd2l0aG91dCBhIHByb21wdCIpDQogICAgKw0KICAgICsg
ICAgICAgICAgICBmb3IgZGVmYXVsdCwgXyBpbiBjaG9pY2UuZGVmYXVsdHM6DQogICAgKyAgICAg
ICAgICAgICAgICBpZiBkZWZhdWx0Ll9fY2xhc3NfXyBpcyBub3QgU3ltYm9sOg0KICAgICsgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIEtjb25maWdFcnJvcigNCiAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgInt9IGhhcyBhIG1hbGZvcm1lZCBkZWZhdWx0IHt9Ig0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICAuZm9ybWF0KF9uYW1lX2FuZF9sb2MoY2hvaWNlKSwgZXhwcl9zdHIoZGVm
YXVsdCkpKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIGlmIGRlZmF1bHQuY2hvaWNlIGlz
IG5vdCBjaG9pY2U6DQogICAgKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FybigidGhlIGRl
ZmF1bHQgc2VsZWN0aW9uIHt9IG9mIHt9IGlzIG5vdCAiDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiY29udGFpbmVkIGluIHRoZSBjaG9pY2UiDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KF9uYW1lX2FuZF9sb2MoZGVmYXVsdCksDQogICAg
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uYW1lX2FuZF9sb2MoY2hv
aWNlKSkpDQogICAgKw0KICAgICsgICAgICAgICAgICBmb3Igc3ltIGluIGNob2ljZS5zeW1zOg0K
ICAgICsgICAgICAgICAgICAgICAgaWYgc3ltLmRlZmF1bHRzOg0KICAgICsgICAgICAgICAgICAg
ICAgICAgIHNlbGYuX3dhcm4oImRlZmF1bHQgb24gdGhlIGNob2ljZSBzeW1ib2wge30gd2lsbCBo
YXZlICINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBlZmZlY3QsIGFz
IGRlZmF1bHRzIGRvIG5vdCBhZmZlY3QgY2hvaWNlICINCiAgICArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJzeW1ib2xzIi5mb3JtYXQoX25hbWVfYW5kX2xvYyhzeW0pKSkNCiAgICAr
DQogICAgKyAgICAgICAgICAgICAgICBpZiBzeW0ucmV2X2RlcCBpcyBub3Qgc3ltLmtjb25maWcu
bjoNCiAgICArICAgICAgICAgICAgICAgICAgICB3YXJuX3NlbGVjdF9pbXBseShzeW0sIHN5bS5y
ZXZfZGVwLCAic2VsZWN0ZWQiKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIGlmIHN5bS53
ZWFrX3Jldl9kZXAgaXMgbm90IHN5bS5rY29uZmlnLm46DQogICAgKyAgICAgICAgICAgICAgICAg
ICAgd2Fybl9zZWxlY3RfaW1wbHkoc3ltLCBzeW0ud2Vha19yZXZfZGVwLCAiaW1wbGllZCIpDQog
ICAgKw0KICAgICsgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gc3ltLm5vZGVzOg0KICAgICsg
ICAgICAgICAgICAgICAgICAgIGlmIG5vZGUucGFyZW50Lml0ZW0gaXMgY2hvaWNlOg0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgbm9kZS5wcm9tcHQ6DQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXJuKCJ0aGUgY2hvaWNlIHN5bWJvbCB7fSBoYXMg
bm8gcHJvbXB0Ig0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAu
Zm9ybWF0KF9uYW1lX2FuZF9sb2Moc3ltKSkpDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAg
ICAgIGVsaWYgbm9kZS5wcm9tcHQ6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu
X3dhcm4oInRoZSBjaG9pY2Ugc3ltYm9sIHt9IGlzIGRlZmluZWQgd2l0aCBhICINCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvbXB0IG91dHNpZGUgdGhlIGNob2lj
ZSINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KF9uYW1l
X2FuZF9sb2Moc3ltKSkpDQogICAgKw0KICAgICsgICAgZGVmIF9wYXJzZV9lcnJvcihzZWxmLCBt
c2cpOg0KICAgICsgICAgICAgIHJhaXNlIEtjb25maWdFcnJvcigie31jb3VsZG4ndCBwYXJzZSAn
e30nOiB7fSIuZm9ybWF0KA0KICAgICsgICAgICAgICAgICAiIiBpZiBzZWxmLl9maWxlbmFtZSBp
cyBOb25lIGVsc2UNCiAgICArICAgICAgICAgICAgICAgICJ7fTp7fTogIi5mb3JtYXQoc2VsZi5f
ZmlsZW5hbWUsIHNlbGYuX2xpbmVuciksDQogICAgKyAgICAgICAgICAgIHNlbGYuX2xpbmUuc3Ry
aXAoKSwgbXNnKSkNCiAgICArDQogICAgKyAgICBkZWYgX3RyYWlsaW5nX3Rva2Vuc19lcnJvcihz
ZWxmKToNCiAgICArICAgICAgICBzZWxmLl9wYXJzZV9lcnJvcigiZXh0cmEgdG9rZW5zIGF0IGVu
ZCBvZiBsaW5lIikNCiAgICArDQogICAgKyAgICBkZWYgX29wZW4oc2VsZiwgZmlsZW5hbWUsIG1v
ZGUpOg0KICAgICsgICAgICAgICMgb3BlbigpIHdyYXBwZXI6DQogICAgKyAgICAgICAgIw0KICAg
ICsgICAgICAgICMgLSBFbmFibGUgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgb24gUHl0aG9uIDIg
dG8gZWFzZQ0KICAgICsgICAgICAgICMgICBpbnRlcm9wZXJhYmlsaXR5IGJldHdlZW4gTGludXgg
YW5kIFdpbmRvd3MuIEl0J3MgYWxyZWFkeSB0aGUNCiAgICArICAgICAgICAjICAgZGVmYXVsdCBv
biBQeXRob24gMy4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyAgIFRoZSAiVSIgZmxh
ZyB3b3VsZCBjdXJyZW50bHkgd29yayBmb3IgYm90aCBQeXRob24gMiBhbmQgMywgYnV0IGl0J3MN
CiAgICArICAgICAgICAjICAgZGVwcmVjYXRlZCBvbiBQeXRob24gMywgc28gcGxheSBpdCBmdXR1
cmUtc2FmZS4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyAgIGlvLm9wZW4oKSBkZWZh
dWx0cyB0byB1bml2ZXJzYWwgbmV3bGluZXMgb24gUHl0aG9uIDIgKGFuZCBpcyBhbg0KICAgICsg
ICAgICAgICMgICBhbGlhcyBmb3Igb3BlbigpIG9uIFB5dGhvbiAzKSwgYnV0IGl0IHJldHVybnMg
J3VuaWNvZGUnIHN0cmluZ3MgYW5kDQogICAgKyAgICAgICAgIyAgIHNsb3dzIHRoaW5ncyBkb3du
Og0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjICAgICBQYXJzaW5nIHg4NiBLY29uZmln
cyBvbiBQeXRob24gMg0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjICAgICB3aXRoIG9w
ZW4oLi4uLCAiclUiKToNCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyAgICAgICByZWFs
ICAwbTAuOTMwcw0KICAgICsgICAgICAgICMgICAgICAgdXNlciAgMG0wLjkwNXMNCiAgICArICAg
ICAgICAjICAgICAgIHN5cyAgIDBtMC4wMjVzDQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAg
ICMgICAgIHdpdGggaW8ub3BlbigpOg0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjICAg
ICAgIHJlYWwgIDBtMS4wNjlzDQogICAgKyAgICAgICAgIyAgICAgICB1c2VyICAwbTEuMDQwcw0K
ICAgICsgICAgICAgICMgICAgICAgc3lzICAgMG0wLjAyOXMNCiAgICArICAgICAgICAjDQogICAg
KyAgICAgICAgIyAgIFRoZXJlJ3Mgbm8gYXBwcmVjaWFibGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5j
ZSBiZXR3ZWVuICJyIiBhbmQNCiAgICArICAgICAgICAjICAgInJVIiBmb3IgcGFyc2luZyBwZXJm
b3JtYW5jZSBvbiBQeXRob24gMi4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyAtIEZv
ciBQeXRob24gMywgZm9yY2UgdGhlIGVuY29kaW5nLiBGb3JjaW5nIHRoZSBlbmNvZGluZyBvbiBQ
eXRob24gMg0KICAgICsgICAgICAgICMgICB0dXJucyBzdHJpbmdzIGludG8gVW5pY29kZSBzdHJp
bmdzLCB3aGljaCBnZXRzIG1lc3N5LiBQeXRob24gMg0KICAgICsgICAgICAgICMgICBkb2Vzbid0
IGRlY29kZSByZWd1bGFyIHN0cmluZ3MgYW55d2F5Lg0KICAgICsgICAgICAgIHJldHVybiBvcGVu
KGZpbGVuYW1lLCAiclUiIGlmIG1vZGUgPT0gInIiIGVsc2UgbW9kZSkgaWYgX0lTX1BZMiBlbHNl
IFwNCiAgICArICAgICAgICAgICAgICAgb3BlbihmaWxlbmFtZSwgbW9kZSwgZW5jb2Rpbmc9c2Vs
Zi5fZW5jb2RpbmcpDQogICAgKw0KICAgICsgICAgZGVmIF9jaGVja191bmRlZl9zeW1zKHNlbGYp
Og0KICAgICsgICAgICAgICMgUHJpbnRzIHdhcm5pbmdzIGZvciBhbGwgcmVmZXJlbmNlcyB0byB1
bmRlZmluZWQgc3ltYm9scyB3aXRoaW4gdGhlDQogICAgKyAgICAgICAgIyBLY29uZmlnIGZpbGVz
DQogICAgKw0KICAgICsgICAgICAgIGRlZiBpc19udW0ocyk6DQogICAgKyAgICAgICAgICAgICMg
UmV0dXJucyBUcnVlIGlmIHRoZSBzdHJpbmcgJ3MnIGxvb2tzIGxpa2UgYSBudW1iZXIuDQogICAg
KyAgICAgICAgICAgICMNCiAgICArICAgICAgICAgICAgIyBJbnRlcm5hbGx5LCBhbGwgb3BlcmFu
ZHMgaW4gS2NvbmZpZyBhcmUgc3ltYm9scywgb25seSB1bmRlZmluZWQgc3ltYm9scw0KICAgICsg
ICAgICAgICAgICAjICh3aGljaCBudW1iZXJzIHVzdWFsbHkgYXJlKSBnZXQgdGhlaXIgbmFtZSBh
cyB0aGVpciB2YWx1ZS4NCiAgICArICAgICAgICAgICAgIw0KICAgICsgICAgICAgICAgICAjIE9u
bHkgaGV4IG51bWJlcnMgdGhhdCBzdGFydCB3aXRoIDB4LzBYIGFyZSBjbGFzc2lmaWVkIGFzIG51
bWJlcnMuDQogICAgKyAgICAgICAgICAgICMgT3RoZXJ3aXNlLCBzeW1ib2xzIHdob3NlIG5hbWVz
IGhhcHBlbiB0byBjb250YWluIG9ubHkgdGhlIGxldHRlcnMgQS1GDQogICAgKyAgICAgICAgICAg
ICMgd291bGQgdHJpZ2dlciBmYWxzZSBwb3NpdGl2ZXMuDQogICAgKw0KICAgICsgICAgICAgICAg
ICB0cnk6DQogICAgKyAgICAgICAgICAgICAgICBpbnQocykNCiAgICArICAgICAgICAgICAgZXhj
ZXB0IFZhbHVlRXJyb3I6DQogICAgKyAgICAgICAgICAgICAgICBpZiBub3Qgcy5zdGFydHN3aXRo
KCgiMHgiLCAiMFgiKSk6DQogICAgKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQog
ICAgKw0KICAgICsgICAgICAgICAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICAgICAgICAg
IGludChzLCAxNikNCiAgICArICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAg
ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KICAgICsNCiAgICArICAgICAgICAg
ICAgcmV0dXJuIFRydWUNCiAgICArDQogICAgKyAgICAgICAgZm9yIHN5bSBpbiAoc2VsZi5zeW1z
LnZpZXd2YWx1ZXMgaWYgX0lTX1BZMiBlbHNlIHNlbGYuc3ltcy52YWx1ZXMpKCk6DQogICAgKyAg
ICAgICAgICAgICMgLSBzeW0ubm9kZXMgZW1wdHkgbWVhbnMgdGhlIHN5bWJvbCBpcyB1bmRlZmlu
ZWQgKGhhcyBubw0KICAgICsgICAgICAgICAgICAjICAgZGVmaW5pdGlvbiBsb2NhdGlvbnMpDQog
ICAgKyAgICAgICAgICAgICMNCiAgICArICAgICAgICAgICAgIyAtIER1ZSB0byBLY29uZmlnIGlu
dGVybmFscywgbnVtYmVycyBzaG93IHVwIGFzIHVuZGVmaW5lZCBLY29uZmlnDQogICAgKyAgICAg
ICAgICAgICMgICBzeW1ib2xzLCBidXQgc2hvdWxkbid0IGJlIGZsYWdnZWQNCiAgICArICAgICAg
ICAgICAgIw0KICAgICsgICAgICAgICAgICAjIC0gVGhlIE1PRFVMRVMgc3ltYm9sIGFsd2F5cyBl
eGlzdHMNCiAgICArICAgICAgICAgICAgaWYgbm90IHN5bS5ub2RlcyBhbmQgbm90IGlzX251bShz
eW0ubmFtZSkgYW5kIFwNCiAgICArICAgICAgICAgICAgICAgc3ltLm5hbWUgIT0gIk1PRFVMRVMi
Og0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIG1zZyA9ICJ1bmRlZmluZWQgc3ltYm9sIHt9
OiIuZm9ybWF0KHN5bS5uYW1lKQ0KICAgICsgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gc2Vs
Zi5ub2RlX2l0ZXIoKToNCiAgICArICAgICAgICAgICAgICAgICAgICBpZiBzeW0gaW4gbm9kZS5y
ZWZlcmVuY2VkOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIlxuXG4tIFJl
ZmVyZW5jZWQgYXQge306e306XG5cbnt9IiBcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAuZm9ybWF0KG5vZGUuZmlsZW5hbWUsIG5vZGUubGluZW5yLCBub2RlKQ0KICAgICsg
ICAgICAgICAgICAgICAgc2VsZi5fd2Fybihtc2cpDQogICAgKw0KICAgICsgICAgZGVmIF93YXJu
KHNlbGYsIG1zZywgZmlsZW5hbWU9Tm9uZSwgbGluZW5yPU5vbmUpOg0KICAgICsgICAgICAgICMg
Rm9yIHByaW50aW5nIGdlbmVyYWwgd2FybmluZ3MNCiAgICArDQogICAgKyAgICAgICAgaWYgbm90
IHNlbGYud2FybjoNCiAgICArICAgICAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsgICAgICAg
IG1zZyA9ICJ3YXJuaW5nOiAiICsgbXNnDQogICAgKyAgICAgICAgaWYgZmlsZW5hbWUgaXMgbm90
IE5vbmU6DQogICAgKyAgICAgICAgICAgIG1zZyA9ICJ7fTp7fToge30iLmZvcm1hdChmaWxlbmFt
ZSwgbGluZW5yLCBtc2cpDQogICAgKw0KICAgICsgICAgICAgIHNlbGYud2FybmluZ3MuYXBwZW5k
KG1zZykNCiAgICArICAgICAgICBpZiBzZWxmLndhcm5fdG9fc3RkZXJyOg0KICAgICsgICAgICAg
ICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpDQogICAgKw0KICAgICsNCiAgICArY2xh
c3MgU3ltYm9sKG9iamVjdCk6DQogICAgKyAgICAiIiINCiAgICArICAgIFJlcHJlc2VudHMgYSBj
b25maWd1cmF0aW9uIHN5bWJvbDoNCiAgICArDQogICAgKyAgICAgIChtZW51KWNvbmZpZyBGT08N
CiAgICArICAgICAgICAgIC4uLg0KICAgICsNCiAgICArICAgIFRoZSBmb2xsb3dpbmcgYXR0cmli
dXRlcyBhcmUgYXZhaWxhYmxlLiBUaGV5IHNob3VsZCBiZSB2aWV3ZWQgYXMgcmVhZC1vbmx5LA0K
ICAgICsgICAgYW5kIHNvbWUgYXJlIGltcGxlbWVudGVkIHRocm91Z2ggQHByb3BlcnR5IG1hZ2lj
IChidXQgYXJlIHN0aWxsIGVmZmljaWVudA0KICAgICsgICAgdG8gYWNjZXNzIGR1ZSB0byBpbnRl
cm5hbCBjYWNoaW5nKS4NCiAgICArDQogICAgKyAgICBOb3RlOiBQcm9tcHRzLCBoZWxwIHRleHRz
LCBhbmQgbG9jYXRpb25zIGFyZSBzdG9yZWQgaW4gdGhlIFN5bWJvbCdzDQogICAgKyAgICBNZW51
Tm9kZShzKSByYXRoZXIgdGhhbiBpbiB0aGUgU3ltYm9sIGl0c2VsZi4gQ2hlY2sgdGhlIE1lbnVO
b2RlIGNsYXNzIGFuZA0KICAgICsgICAgdGhlIFN5bWJvbC5ub2RlcyBhdHRyaWJ1dGUuIFRoaXMg
b3JnYW5pemF0aW9uIG1hdGNoZXMgdGhlIEMgdG9vbHMuDQogICAgKw0KICAgICsgICAgbmFtZToN
CiAgICArICAgICAgVGhlIG5hbWUgb2YgdGhlIHN5bWJvbCwgZS5nLiAiRk9PIiBmb3IgJ2NvbmZp
ZyBGT08nLg0KICAgICsNCiAgICArICAgIHR5cGU6DQogICAgKyAgICAgIFRoZSB0eXBlIG9mIHRo
ZSBzeW1ib2wuIE9uZSBvZiBCT09MLCBUUklTVEFURSwgU1RSSU5HLCBJTlQsIEhFWCwgVU5LTk9X
Ti4NCiAgICArICAgICAgVU5LTk9XTiBpcyBmb3IgdW5kZWZpbmVkIHN5bWJvbHMsIChub24tc3Bl
Y2lhbCkgY29uc3RhbnQgc3ltYm9scywgYW5kDQogICAgKyAgICAgIHN5bWJvbHMgZGVmaW5lZCB3
aXRob3V0IGEgdHlwZS4NCiAgICArDQogICAgKyAgICAgIFdoZW4gcnVubmluZyB3aXRob3V0IG1v
ZHVsZXMgKE1PRFVMRVMgaGF2aW5nIHRoZSB2YWx1ZSBuKSwgVFJJU1RBVEUNCiAgICArICAgICAg
c3ltYm9scyBtYWdpY2FsbHkgY2hhbmdlIHR5cGUgdG8gQk9PTC4gVGhpcyBhbHNvIGhhcHBlbnMg
Zm9yIHN5bWJvbHMNCiAgICArICAgICAgd2l0aGluIGNob2ljZXMgaW4gInkiIG1vZGUuIFRoaXMg
bWF0Y2hlcyB0aGUgQyB0b29scywgYW5kIG1ha2VzIHNlbnNlIGZvcg0KICAgICsgICAgICBtZW51
Y29uZmlnLWxpa2UgZnVuY3Rpb25hbGl0eS4NCiAgICArDQogICAgKyAgICBvcmlnX3R5cGU6DQog
ICAgKyAgICAgIFRoZSB0eXBlIGFzIGdpdmVuIGluIHRoZSBLY29uZmlnIGZpbGUsIHdpdGhvdXQg
YW55IG1hZ2ljIGFwcGxpZWQuIFVzZWQNCiAgICArICAgICAgd2hlbiBwcmludGluZyB0aGUgc3lt
Ym9sLg0KICAgICsNCiAgICArICAgIHN0cl92YWx1ZToNCiAgICArICAgICAgVGhlIHZhbHVlIG9m
IHRoZSBzeW1ib2wgYXMgYSBzdHJpbmcuIEdpdmVzIHRoZSB2YWx1ZSBmb3Igc3RyaW5nL2ludC9o
ZXgNCiAgICArICAgICAgc3ltYm9scy4gRm9yIGJvb2wvdHJpc3RhdGUgc3ltYm9scywgZ2l2ZXMg
Im4iLCAibSIsIG9yICJ5Ii4NCiAgICArDQogICAgKyAgICAgIFRoaXMgaXMgdGhlIHN5bWJvbCB2
YWx1ZSB0aGF0J3MgdXNlZCBpbiByZWxhdGlvbmFsIGV4cHJlc3Npb25zDQogICAgKyAgICAgIChB
ID0gQiwgQSAhPSBCLCBldGMuKQ0KICAgICsNCiAgICArICAgICAgR290Y2hhOiBGb3IgaW50L2hl
eCBzeW1ib2xzLCB0aGUgZXhhY3QgZm9ybWF0IG9mIHRoZSB2YWx1ZSBtdXN0IG9mdGVuIGJlDQog
ICAgKyAgICAgIHByZXNlcnZlZCAoZS5nLiwgd2hlbiB3cml0aW5nIGEgLmNvbmZpZyBmaWxlKSwg
aGVuY2Ugd2h5IHlvdSBjYW4ndCBnZXQgaXQNCiAgICArICAgICAgZGlyZWN0bHkgYXMgYW4gaW50
LiBEbyBpbnQoaW50X3N5bS5zdHJfdmFsdWUpIG9yDQogICAgKyAgICAgIGludChoZXhfc3ltLnN0
cl92YWx1ZSwgMTYpIHRvIGdldCB0aGUgaW50ZWdlciB2YWx1ZS4NCiAgICArDQogICAgKyAgICB0
cmlfdmFsdWU6DQogICAgKyAgICAgIFRoZSB0cmlzdGF0ZSB2YWx1ZSBvZiB0aGUgc3ltYm9sIGFz
IGFuIGludGVnZXIuIE9uZSBvZiAwLCAxLCAyLA0KICAgICsgICAgICByZXByZXNlbnRpbmcgbiwg
bSwgeS4gQWx3YXlzIDAgKG4pIGZvciBub24tYm9vbC90cmlzdGF0ZSBzeW1ib2xzLg0KICAgICsN
CiAgICArICAgICAgVGhpcyBpcyB0aGUgc3ltYm9sIHZhbHVlIHRoYXQncyB1c2VkIG91dHNpZGUg
b2YgcmVsYXRpb24gZXhwcmVzc2lvbnMNCiAgICArICAgICAgKEEsICFBLCBBICYmIEIsIEEgfHwg
QikuDQogICAgKw0KICAgICsgICAgYXNzaWduYWJsZToNCiAgICArICAgICAgQSB0dXBsZSBjb250
YWluaW5nIHRoZSB0cmlzdGF0ZSB1c2VyIHZhbHVlcyB0aGF0IGNhbiBjdXJyZW50bHkgYmUNCiAg
ICArICAgICAgYXNzaWduZWQgdG8gdGhlIHN5bWJvbCAodGhhdCB3b3VsZCBiZSByZXNwZWN0ZWQp
LCBvcmRlcmVkIGZyb20gbG93ZXN0ICgwLA0KICAgICsgICAgICByZXByZXNlbnRpbmcgbikgdG8g
aGlnaGVzdCAoMiwgcmVwcmVzZW50aW5nIHkpLiBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZQ0KICAg
ICsgICAgICBzZWxlY3Rpb25zIGF2YWlsYWJsZSBpbiB0aGUgbWVudWNvbmZpZyBpbnRlcmZhY2Uu
IFRoZSBzZXQgb2YgYXNzaWduYWJsZQ0KICAgICsgICAgICB2YWx1ZXMgaXMgY2FsY3VsYXRlZCBm
cm9tIHRoZSBzeW1ib2wncyB2aXNpYmlsaXR5IGFuZCBzZWxlY3RzL2ltcGxpZXMuDQogICAgKw0K
ICAgICsgICAgICBSZXR1cm5zIHRoZSBlbXB0eSBzZXQgZm9yIG5vbi1ib29sL3RyaXN0YXRlIHN5
bWJvbHMgYW5kIGZvciBzeW1ib2xzIHdpdGgNCiAgICArICAgICAgdmlzaWJpbGl0eSBuLiBUaGUg
b3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZSAoMCwgMiksICgwLCAxLCAyKSwgKDEsIDIpLA0KICAg
ICsgICAgICAoMSwpLCBhbmQgKDIsKS4gQSAoMSwpIG9yICgyLCkgcmVzdWx0IG1lYW5zIHRoZSBz
eW1ib2wgaXMgdmlzaWJsZSBidXQNCiAgICArICAgICAgImxvY2tlZCIgdG8gbSBvciB5IHRocm91
Z2ggYSBzZWxlY3QsIHBlcmhhcHMgaW4gY29tYmluYXRpb24gd2l0aCB0aGUNCiAgICArICAgICAg
dmlzaWJpbGl0eS4gbWVudWNvbmZpZyByZXByZXNlbnRzIHRoaXMgYXMgLU0tIGFuZCAtKi0sIHJl
c3BlY3RpdmVseS4NCiAgICArDQogICAgKyAgICAgIEZvciBzdHJpbmcvaGV4L2ludCBzeW1ib2xz
LCBjaGVjayBpZiBTeW1ib2wudmlzaWJpbGl0eSBpcyBub24tMCAobm9uLW4pDQogICAgKyAgICAg
IGluc3RlYWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSB2YWx1ZSBjYW4gYmUgY2hhbmdlZC4NCiAgICAr
DQogICAgKyAgICAgIFNvbWUgaGFuZHkgJ2Fzc2lnbmFibGUnIGlkaW9tczoNCiAgICArDQogICAg
KyAgICAgICAgIyBJcyAnc3ltJyBhbiBhc3NpZ25hYmxlICh2aXNpYmxlKSBib29sL3RyaXN0YXRl
IHN5bWJvbD8NCiAgICArICAgICAgICBpZiBzeW0uYXNzaWduYWJsZToNCiAgICArICAgICAgICAg
ICAgIyBXaGF0J3MgdGhlIGhpZ2hlc3QgdmFsdWUgaXQgY2FuIGJlIGFzc2lnbmVkPyBbLTFdIGlu
IFB5dGhvbg0KICAgICsgICAgICAgICAgICAjIGdpdmVzIHRoZSBsYXN0IGVsZW1lbnQuDQogICAg
KyAgICAgICAgICAgIHN5bV9oaWdoID0gc3ltLmFzc2lnbmFibGVbLTFdDQogICAgKw0KICAgICsg
ICAgICAgICAgICAjIFRoZSBsb3dlc3Q/DQogICAgKyAgICAgICAgICAgIHN5bV9sb3cgPSBzeW0u
YXNzaWduYWJsZVswXQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyBDYW4gdGhlIHN5bWJvbCBi
ZSBzZXQgdG8gYXQgbGVhc3QgbT8NCiAgICArICAgICAgICAgICAgaWYgc3ltLmFzc2lnbmFibGVb
LTFdID49IDE6DQogICAgKyAgICAgICAgICAgICAgICAuLi4NCiAgICArDQogICAgKyAgICAgICAg
IyBDYW4gdGhlIHN5bWJvbCBiZSBzZXQgdG8gbT8NCiAgICArICAgICAgICBpZiAxIGluIHN5bS5h
c3NpZ25hYmxlOg0KICAgICsgICAgICAgICAgICAuLi4NCiAgICArDQogICAgKyAgICB2aXNpYmls
aXR5Og0KICAgICsgICAgICBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgc3ltYm9sLiBPbmUgb2YgMCwg
MSwgMiwgcmVwcmVzZW50aW5nIG4sIG0sIHkuIFNlZQ0KICAgICsgICAgICB0aGUgbW9kdWxlIGRv
Y3VtZW50YXRpb24gZm9yIGFuIG92ZXJ2aWV3IG9mIHN5bWJvbCB2YWx1ZXMgYW5kIHZpc2liaWxp
dHkuDQogICAgKw0KICAgICsgICAgdXNlcl92YWx1ZToNCiAgICArICAgICAgVGhlIHVzZXIgdmFs
dWUgb2YgdGhlIHN5bWJvbC4gTm9uZSBpZiBubyB1c2VyIHZhbHVlIGhhcyBiZWVuIGFzc2lnbmVk
DQogICAgKyAgICAgICh2aWEgS2NvbmZpZy5sb2FkX2NvbmZpZygpIG9yIFN5bWJvbC5zZXRfdmFs
dWUoKSkuDQogICAgKw0KICAgICsgICAgICBIb2xkcyAwLCAxLCBvciAyIGZvciBib29sL3RyaXN0
YXRlIHN5bWJvbHMsIGFuZCBhIHN0cmluZyBmb3IgdGhlIG90aGVyDQogICAgKyAgICAgIHN5bWJv
bCB0eXBlcy4NCiAgICArDQogICAgKyAgICAgIFdBUk5JTkc6IERvIG5vdCBhc3NpZ24gZGlyZWN0
bHkgdG8gdGhpcy4gSXQgd2lsbCBicmVhayB0aGluZ3MuIFVzZQ0KICAgICsgICAgICBTeW1ib2wu
c2V0X3ZhbHVlKCkuDQogICAgKw0KICAgICsgICAgY29uZmlnX3N0cmluZzoNCiAgICArICAgICAg
VGhlIC5jb25maWcgYXNzaWdubWVudCBzdHJpbmcgdGhhdCB3b3VsZCBnZXQgd3JpdHRlbiBvdXQg
Zm9yIHRoZSBzeW1ib2wNCiAgICArICAgICAgYnkgS2NvbmZpZy53cml0ZV9jb25maWcoKS4gUmV0
dXJucyB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vIC5jb25maWcNCiAgICArICAgICAgYXNzaWdubWVu
dCB3b3VsZCBnZXQgd3JpdHRlbiBvdXQuDQogICAgKw0KICAgICsgICAgICBJbiBnZW5lcmFsLCB2
aXNpYmxlIHN5bWJvbHMsIHN5bWJvbHMgd2l0aCAoYWN0aXZlKSBkZWZhdWx0cywgYW5kIHNlbGVj
dGVkDQogICAgKyAgICAgIHN5bWJvbHMgZ2V0IHdyaXR0ZW4gb3V0LiBUaGlzIGluY2x1ZGVzIGFs
bCBub24tbi12YWx1ZWQgYm9vbC90cmlzdGF0ZQ0KICAgICsgICAgICBzeW1ib2xzLCBhbmQgYWxs
IHZpc2libGUgc3RyaW5nL2ludC9oZXggc3ltYm9scy4NCiAgICArDQogICAgKyAgICAgIFN5bWJv
bHMgd2l0aCB0aGUgKG5vIGxvbmdlciBuZWVkZWQpICdvcHRpb24gZW52PS4uLicgb3B0aW9uIGdl
bmVyYXRlIG5vDQogICAgKyAgICAgIGNvbmZpZ3VyYXRpb24gb3V0cHV0LCBhbmQgbmVpdGhlciBk
b2VzIHRoZSBzcGVjaWFsDQogICAgKyAgICAgICdvcHRpb24gZGVmY29uZmlnX2xpc3QnIHN5bWJv
bC4NCiAgICArDQogICAgKyAgICAgIFRpcDogVGhpcyBmaWVsZCBpcyB1c2VmdWwgd2hlbiBnZW5l
cmF0aW5nIGN1c3RvbSBjb25maWd1cmF0aW9uIG91dHB1dCwNCiAgICArICAgICAgZXZlbiBmb3Ig
bm9uLS5jb25maWctbGlrZSBmb3JtYXRzLiBUbyB3cml0ZSBqdXN0IHRoZSBzeW1ib2xzIHRoYXQg
d291bGQNCiAgICArICAgICAgZ2V0IHdyaXR0ZW4gb3V0IHRvIC5jb25maWcgZmlsZXMsIGRvIHRo
aXM6DQogICAgKw0KICAgICsgICAgICAgIGlmIHN5bS5jb25maWdfc3RyaW5nOg0KICAgICsgICAg
ICAgICAgICAqV3JpdGUgc3ltYm9sLCBlLmcuIGJ5IGxvb2tpbmcgc3ltLnN0cl92YWx1ZSoNCiAg
ICArDQogICAgKyAgICAgIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgc3ltYm9scyB3cml0dGVu
IG91dCBieSB3cml0ZV9hdXRvY29uZigpLg0KICAgICsgICAgICBUaGF0IGZ1bmN0aW9uIHNraXBz
IGFsbCBuLXZhbHVlZCBzeW1ib2xzLg0KICAgICsNCiAgICArICAgICAgVGhlcmUgdXN1YWxseSB3
b24ndCBiZSBhbnkgZ3JlYXQgaGFybSBpbiBqdXN0IHdyaXRpbmcgYWxsIHN5bWJvbHMgZWl0aGVy
LA0KICAgICsgICAgICB0aG91Z2ggeW91IG1pZ2h0IGdldCBzb21lIHNwZWNpYWwgc3ltYm9scyBh
bmQgcG9zc2libHkgc29tZSAicmVkdW5kYW50Ig0KICAgICsgICAgICBuLXZhbHVlZCBzeW1ib2wg
ZW50cmllcyBpbiB0aGVyZS4NCiAgICArDQogICAgKyAgICBub2RlczoNCiAgICArICAgICAgQSBs
aXN0IG9mIE1lbnVOb2RlcyBmb3IgdGhpcyBzeW1ib2wuIFdpbGwgY29udGFpbiBhIHNpbmdsZSBN
ZW51Tm9kZSBmb3INCiAgICArICAgICAgbW9zdCBzeW1ib2xzLiBVbmRlZmluZWQgYW5kIGNvbnN0
YW50IHN5bWJvbHMgaGF2ZSBhbiBlbXB0eSBub2RlcyBsaXN0Lg0KICAgICsgICAgICBTeW1ib2xz
IGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGdldCBvbmUgbm9kZSBmb3IgZWFjaCBsb2Nh
dGlvbi4NCiAgICArDQogICAgKyAgICBjaG9pY2U6DQogICAgKyAgICAgIEhvbGRzIHRoZSBwYXJl
bnQgQ2hvaWNlIGZvciBjaG9pY2Ugc3ltYm9scywgYW5kIE5vbmUgZm9yIG5vbi1jaG9pY2UNCiAg
ICArICAgICAgc3ltYm9scy4gRG91YmxlcyBhcyBhIGZsYWcgZm9yIHdoZXRoZXIgYSBzeW1ib2wg
aXMgYSBjaG9pY2Ugc3ltYm9sLg0KICAgICsNCiAgICArICAgIGRlZmF1bHRzOg0KICAgICsgICAg
ICBMaXN0IG9mIChkZWZhdWx0LCBjb25kKSB0dXBsZXMgZm9yIHRoZSBzeW1ib2wncyAnZGVmYXVs
dCcgcHJvcGVydGllcy4gRm9yDQogICAgKyAgICAgIGV4YW1wbGUsICdkZWZhdWx0IEEgJiYgQiBp
ZiBDIHx8IEQnIGlzIHJlcHJlc2VudGVkIGFzDQogICAgKyAgICAgICgoQU5ELCBBLCBCKSwgKE9S
LCBDLCBEKSkuIElmIG5vIGNvbmRpdGlvbiB3YXMgZ2l2ZW4sICdjb25kJyBpcw0KICAgICsgICAg
ICBzZWxmLmtjb25maWcueS4NCiAgICArDQogICAgKyAgICAgIE5vdGUgdGhhdCAnZGVwZW5kcyBv
bicgYW5kIHBhcmVudCBkZXBlbmRlbmNpZXMgYXJlIHByb3BhZ2F0ZWQgdG8NCiAgICArICAgICAg
J2RlZmF1bHQnIGNvbmRpdGlvbnMuDQogICAgKw0KICAgICsgICAgc2VsZWN0czoNCiAgICArICAg
ICAgTGlzdCBvZiAoc3ltYm9sLCBjb25kKSB0dXBsZXMgZm9yIHRoZSBzeW1ib2wncyAnc2VsZWN0
JyBwcm9wZXJ0aWVzLiBGb3INCiAgICArICAgICAgZXhhbXBsZSwgJ3NlbGVjdCBBIGlmIEIgJiYg
QycgaXMgcmVwcmVzZW50ZWQgYXMgKEEsIChBTkQsIEIsIEMpKS4gSWYgbm8NCiAgICArICAgICAg
Y29uZGl0aW9uIHdhcyBnaXZlbiwgJ2NvbmQnIGlzIHNlbGYua2NvbmZpZy55Lg0KICAgICsNCiAg
ICArICAgICAgTm90ZSB0aGF0ICdkZXBlbmRzIG9uJyBhbmQgcGFyZW50IGRlcGVuZGVuY2llcyBh
cmUgcHJvcGFnYXRlZCB0byAnc2VsZWN0Jw0KICAgICsgICAgICBjb25kaXRpb25zLg0KICAgICsN
CiAgICArICAgIGltcGxpZXM6DQogICAgKyAgICAgIExpa2UgJ3NlbGVjdHMnLCBmb3IgaW1wbHku
DQogICAgKw0KICAgICsgICAgcmFuZ2VzOg0KICAgICsgICAgICBMaXN0IG9mIChsb3csIGhpZ2gs
IGNvbmQpIHR1cGxlcyBmb3IgdGhlIHN5bWJvbCdzICdyYW5nZScgcHJvcGVydGllcy4gRm9yDQog
ICAgKyAgICAgIGV4YW1wbGUsICdyYW5nZSAxIDIgaWYgQScgaXMgcmVwcmVzZW50ZWQgYXMgKDEs
IDIsIEEpLiBJZiB0aGVyZSBpcyBubw0KICAgICsgICAgICBjb25kaXRpb24sICdjb25kJyBpcyBz
ZWxmLmtjb25maWcueS4NCiAgICArDQogICAgKyAgICAgIE5vdGUgdGhhdCAnZGVwZW5kcyBvbicg
YW5kIHBhcmVudCBkZXBlbmRlbmNpZXMgYXJlIHByb3BhZ2F0ZWQgdG8gJ3JhbmdlJw0KICAgICsg
ICAgICBjb25kaXRpb25zLg0KICAgICsNCiAgICArICAgICAgR290Y2hhOiAxIGFuZCAyIGFib3Zl
IHdpbGwgYmUgcmVwcmVzZW50ZWQgYXMgKHVuZGVmaW5lZCkgU3ltYm9scyByYXRoZXINCiAgICAr
ICAgICAgdGhhbiBwbGFpbiBpbnRlZ2Vycy4gVW5kZWZpbmVkIHN5bWJvbHMgZ2V0IHRoZWlyIG5h
bWUgYXMgdGhlaXIgc3RyaW5nDQogICAgKyAgICAgIHZhbHVlLCBzbyB0aGlzIHdvcmtzIG91dC4g
VGhlIEMgdG9vbHMgd29yayB0aGUgc2FtZSB3YXkuDQogICAgKw0KICAgICsgICAgb3JpZ19kZWZh
dWx0czoNCiAgICArICAgIG9yaWdfc2VsZWN0czoNCiAgICArICAgIG9yaWdfaW1wbGllczoNCiAg
ICArICAgIG9yaWdfcmFuZ2VzOg0KICAgICsgICAgICBTZWUgdGhlIGNvcnJlc3BvbmRpbmcgYXR0
cmlidXRlcyBvbiB0aGUgTWVudU5vZGUgY2xhc3MuDQogICAgKw0KICAgICsgICAgcmV2X2RlcDoN
CiAgICArICAgICAgUmV2ZXJzZSBkZXBlbmRlbmN5IGV4cHJlc3Npb24gZnJvbSBvdGhlciBzeW1i
b2xzIHNlbGVjdGluZyB0aGlzIHN5bWJvbC4NCiAgICArICAgICAgTXVsdGlwbGUgc2VsZWN0aW9u
cyBnZXQgT1JlZCB0b2dldGhlci4gQSBjb25kaXRpb24gb24gYSBzZWxlY3QgaXMgQU5EZWQNCiAg
ICArICAgICAgd2l0aCB0aGUgc2VsZWN0aW5nIHN5bWJvbC4NCiAgICArDQogICAgKyAgICAgIEZv
ciBleGFtcGxlLCBpZiBBIGhhcyAnc2VsZWN0IEZPTycgYW5kIEIgaGFzICdzZWxlY3QgRk9PIGlm
IEMnLCB0aGVuDQogICAgKyAgICAgIEZPTydzIHJldl9kZXAgd2lsbCBiZSAoT1IsIEEsIChBTkQs
IEIsIEMpKS4NCiAgICArDQogICAgKyAgICB3ZWFrX3Jldl9kZXA6DQogICAgKyAgICAgIExpa2Ug
cmV2X2RlcCwgZm9yIGltcGx5Lg0KICAgICsNCiAgICArICAgIGRpcmVjdF9kZXA6DQogICAgKyAg
ICAgIFRoZSBkaXJlY3QgKCdkZXBlbmRzIG9uJykgZGVwZW5kZW5jaWVzIGZvciB0aGUgc3ltYm9s
LCBvciBzZWxmLmtjb25maWcueQ0KICAgICsgICAgICBpZiB0aGVyZSBhcmUgbm8gZGlyZWN0IGRl
cGVuZGVuY2llcy4NCiAgICArDQogICAgKyAgICAgIFRoaXMgYXR0cmlidXRlIGluY2x1ZGVzIGFu
eSBkZXBlbmRlbmNpZXMgZnJvbSBzdXJyb3VuZGluZyBtZW51cyBhbmQgaWZzLg0KICAgICsgICAg
ICBUaG9zZSBnZXQgcHJvcGFnYXRlZCB0byB0aGUgZGlyZWN0IGRlcGVuZGVuY2llcywgYW5kIHRo
ZSByZXN1bHRpbmcgZGlyZWN0DQogICAgKyAgICAgIGRlcGVuZGVuY2llcyBpbiB0dXJuIGdldCBw
cm9wYWdhdGVkIHRvIHRoZSBjb25kaXRpb25zIG9mIGFsbCBwcm9wZXJ0aWVzLg0KICAgICsNCiAg
ICArICAgICAgSWYgdGhlIHN5bWJvbCBpcyBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucywg
dGhlIGRlcGVuZGVuY2llcyBmcm9tIHRoZQ0KICAgICsgICAgICBkaWZmZXJlbnQgbG9jYXRpb25z
IGdldCBPUmVkIHRvZ2V0aGVyLg0KICAgICsNCiAgICArICAgIHJlZmVyZW5jZWQ6DQogICAgKyAg
ICAgIEEgc2V0KCkgd2l0aCBhbGwgc3ltYm9scyBhbmQgY2hvaWNlcyByZWZlcmVuY2VkIGluIHRo
ZSBwcm9wZXJ0aWVzIGFuZA0KICAgICsgICAgICBwcm9wZXJ0eSBjb25kaXRpb25zIG9mIHRoZSBz
eW1ib2wuDQogICAgKw0KICAgICsgICAgICBBbHNvIGluY2x1ZGVzIGRlcGVuZGVuY2llcyBmcm9t
IHN1cnJvdW5kaW5nIG1lbnVzIGFuZCBpZnMsIGJlY2F1c2UgdGhvc2UNCiAgICArICAgICAgZ2V0
IHByb3BhZ2F0ZWQgdG8gdGhlIHN5bWJvbCAoc2VlIHRoZSAnSW50cm8gdG8gc3ltYm9sIHZhbHVl
cycgc2VjdGlvbiBpbg0KICAgICsgICAgICB0aGUgbW9kdWxlIGRvY3N0cmluZykuDQogICAgKw0K
ICAgICsgICAgICBDaG9pY2VzIGFwcGVhciBpbiB0aGUgZGVwZW5kZW5jaWVzIG9mIGNob2ljZSBz
eW1ib2xzLg0KICAgICsNCiAgICArICAgICAgRm9yIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMs
IG9ubHkgQiBhbmQgbm90IEMgYXBwZWFycyBpbiBBJ3MNCiAgICArICAgICAgJ3JlZmVyZW5jZWQn
LiBUbyBnZXQgdHJhbnNpdGl2ZSByZWZlcmVuY2VzLCB5b3UnbGwgaGF2ZSB0byByZWN1cnNpdmVs
eQ0KICAgICsgICAgICBleHBhbmQgJ3JlZmVyZW5jZXMnIHVudGlsIG5vIG5ldyBpdGVtcyBhcHBl
YXIuDQogICAgKw0KICAgICsgICAgICAgIGNvbmZpZyBBDQogICAgKyAgICAgICAgICAgICAgICBi
b29sDQogICAgKyAgICAgICAgICAgICAgICBkZXBlbmRzIG9uIEINCiAgICArDQogICAgKyAgICAg
ICAgY29uZmlnIEINCiAgICArICAgICAgICAgICAgICAgIGJvb2wNCiAgICArICAgICAgICAgICAg
ICAgIGRlcGVuZHMgb24gQw0KICAgICsNCiAgICArICAgICAgICBjb25maWcgQw0KICAgICsgICAg
ICAgICAgICAgICAgYm9vbA0KICAgICsNCiAgICArICAgICAgU2VlIHRoZSBTeW1ib2wuZGlyZWN0
X2RlcCBhdHRyaWJ1dGUgaWYgeW91J3JlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUNCiAgICArICAg
ICAgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiB0aGUgc3ltYm9sIChpdHMgJ2RlcGVuZHMgb24nKS4g
WW91IGNhbiBleHRyYWN0IHRoZQ0KICAgICsgICAgICBzeW1ib2xzIGluIGl0IHdpdGggdGhlIGds
b2JhbCBleHByX2l0ZW1zKCkgZnVuY3Rpb24uDQogICAgKw0KICAgICsgICAgZW52X3ZhcjoNCiAg
ICArICAgICAgSWYgdGhlIFN5bWJvbCBoYXMgYW4gJ29wdGlvbiBlbnY9IkZPTyInIG9wdGlvbiwg
dGhpcyBjb250YWlucyB0aGUgbmFtZQ0KICAgICsgICAgICAoIkZPTyIpIG9mIHRoZSBlbnZpcm9u
bWVudCB2YXJpYWJsZS4gTm9uZSBmb3Igc3ltYm9scyB3aXRob3V0IG5vDQogICAgKyAgICAgICdv
cHRpb24gZW52Jy4NCiAgICArDQogICAgKyAgICAgICdvcHRpb24gZW52PSJGT08iJyBhY3RzIGxp
a2UgYSAnZGVmYXVsdCcgcHJvcGVydHkgd2hvc2UgdmFsdWUgaXMgdGhlDQogICAgKyAgICAgIHZh
bHVlIG9mICRGT08uDQogICAgKw0KICAgICsgICAgICBTeW1ib2xzIHdpdGggJ29wdGlvbiBlbnYn
IGFyZSBuZXZlciB3cml0dGVuIG91dCB0byAuY29uZmlnIGZpbGVzLCBldmVuIGlmDQogICAgKyAg
ICAgIHRoZXkgYXJlIHZpc2libGUuIGVudl92YXIgY29ycmVzcG9uZHMgdG8gYSBmbGFnIGNhbGxl
ZCBTWU1CT0xfQVVUTyBpbiB0aGUNCiAgICArICAgICAgQyBpbXBsZW1lbnRhdGlvbi4NCiAgICAr
DQogICAgKyAgICBpc19hbGxub2NvbmZpZ195Og0KICAgICsgICAgICBUcnVlIGlmIHRoZSBzeW1i
b2wgaGFzICdvcHRpb24gYWxsbm9jb25maWdfeScgc2V0IG9uIGl0LiBUaGlzIGhhcyBubw0KICAg
ICsgICAgICBlZmZlY3QgaW50ZXJuYWxseSAoZXhjZXB0IHdoZW4gcHJpbnRpbmcgc3ltYm9scyks
IGJ1dCBjYW4gYmUgY2hlY2tlZCBieQ0KICAgICsgICAgICBzY3JpcHRzLg0KICAgICsNCiAgICAr
ICAgIGlzX2NvbnN0YW50Og0KICAgICsgICAgICBUcnVlIGlmIHRoZSBzeW1ib2wgaXMgYSBjb25z
dGFudCAocXVvdGVkKSBzeW1ib2wuDQogICAgKw0KICAgICsgICAga2NvbmZpZzoNCiAgICArICAg
ICAgVGhlIEtjb25maWcgaW5zdGFuY2UgdGhpcyBzeW1ib2wgaXMgZnJvbS4NCiAgICArICAgICIi
Ig0KICAgICsgICAgX19zbG90c19fID0gKA0KICAgICsgICAgICAgICJfY2FjaGVkX2Fzc2lnbmFi
bGUiLA0KICAgICsgICAgICAgICJfY2FjaGVkX3N0cl92YWwiLA0KICAgICsgICAgICAgICJfY2Fj
aGVkX3RyaV92YWwiLA0KICAgICsgICAgICAgICJfY2FjaGVkX3ZpcyIsDQogICAgKyAgICAgICAg
Il9kZXBlbmRlbnRzIiwNCiAgICArICAgICAgICAiX29sZF92YWwiLA0KICAgICsgICAgICAgICJf
dmlzaXRlZCIsDQogICAgKyAgICAgICAgIl93YXNfc2V0IiwNCiAgICArICAgICAgICAiX3dyaXRl
X3RvX2NvbmYiLA0KICAgICsgICAgICAgICJjaG9pY2UiLA0KICAgICsgICAgICAgICJkZWZhdWx0
cyIsDQogICAgKyAgICAgICAgImRpcmVjdF9kZXAiLA0KICAgICsgICAgICAgICJlbnZfdmFyIiwN
CiAgICArICAgICAgICAiaW1wbGllcyIsDQogICAgKyAgICAgICAgImlzX2FsbG5vY29uZmlnX3ki
LA0KICAgICsgICAgICAgICJpc19jb25zdGFudCIsDQogICAgKyAgICAgICAgImtjb25maWciLA0K
ICAgICsgICAgICAgICJuYW1lIiwNCiAgICArICAgICAgICAibm9kZXMiLA0KICAgICsgICAgICAg
ICJvcmlnX3R5cGUiLA0KICAgICsgICAgICAgICJyYW5nZXMiLA0KICAgICsgICAgICAgICJyZXZf
ZGVwIiwNCiAgICArICAgICAgICAic2VsZWN0cyIsDQogICAgKyAgICAgICAgInVzZXJfdmFsdWUi
LA0KICAgICsgICAgICAgICJ3ZWFrX3Jldl9kZXAiLA0KICAgICsgICAgKQ0KICAgICsNCiAgICAr
ICAgICMNCiAgICArICAgICMgUHVibGljIGludGVyZmFjZQ0KICAgICsgICAgIw0KICAgICsNCiAg
ICArICAgIEBwcm9wZXJ0eQ0KICAgICsgICAgZGVmIHR5cGUoc2VsZik6DQogICAgKyAgICAgICAg
IiIiDQogICAgKyAgICAgICAgU2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLg0KICAgICsgICAg
ICAgICIiIg0KICAgICsgICAgICAgIGlmIHNlbGYub3JpZ190eXBlIGlzIFRSSVNUQVRFIGFuZCBc
DQogICAgKyAgICAgICAgICAgKHNlbGYuY2hvaWNlIGFuZCBzZWxmLmNob2ljZS50cmlfdmFsdWUg
PT0gMiBvcg0KICAgICsgICAgICAgICAgICBub3Qgc2VsZi5rY29uZmlnLm1vZHVsZXMudHJpX3Zh
bHVlKToNCiAgICArDQogICAgKyAgICAgICAgICAgIHJldHVybiBCT09MDQogICAgKw0KICAgICsg
ICAgICAgIHJldHVybiBzZWxmLm9yaWdfdHlwZQ0KICAgICsNCiAgICArICAgIEBwcm9wZXJ0eQ0K
ICAgICsgICAgZGVmIHN0cl92YWx1ZShzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAg
ICAgICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRpb24uDQogICAgKyAgICAgICAgIiIiDQogICAg
KyAgICAgICAgaWYgc2VsZi5fY2FjaGVkX3N0cl92YWwgaXMgbm90IE5vbmU6DQogICAgKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfc3RyX3ZhbA0KICAgICsNCiAgICArICAgICAgICBp
ZiBzZWxmLm9yaWdfdHlwZSBpbiBfQk9PTF9UUklTVEFURToNCiAgICArICAgICAgICAgICAgIyBB
bHNvIGNhbGN1bGF0ZXMgdGhlIHZpc2liaWxpdHksIHNvIGludmFsaWRhdGlvbiBzYWZlDQogICAg
KyAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9zdHJfdmFsID0gVFJJX1RPX1NUUltzZWxmLnRyaV92
YWx1ZV0NCiAgICArICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9zdHJfdmFsDQogICAg
Kw0KICAgICsgICAgICAgICMgQXMgYSBxdWlyayBvZiBLY29uZmlnLCB1bmRlZmluZWQgc3ltYm9s
cyBnZXQgdGhlaXIgbmFtZSBhcyB0aGVpcg0KICAgICsgICAgICAgICMgc3RyaW5nIHZhbHVlLiBU
aGlzIGlzIHdoeSB0aGluZ3MgbGlrZSAiRk9PID0gYmFyIiB3b3JrIGZvciBzZWVpbmcgaWYNCiAg
ICArICAgICAgICAjIEZPTyBoYXMgdGhlIHZhbHVlICJiYXIiLg0KICAgICsgICAgICAgIGlmIG5v
dCBzZWxmLm9yaWdfdHlwZTogICMgVU5LTk9XTg0KICAgICsgICAgICAgICAgICBzZWxmLl9jYWNo
ZWRfc3RyX3ZhbCA9IHNlbGYubmFtZQ0KICAgICsgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1l
DQogICAgKw0KICAgICsgICAgICAgIHZhbCA9ICIiDQogICAgKyAgICAgICAgIyBXYXJuaW5nOiBT
ZWUgU3ltYm9sLl9yZWNfaW52YWxpZGF0ZSgpLCBhbmQgbm90ZSB0aGF0IHRoaXMgaXMgYSBoaWRk
ZW4NCiAgICArICAgICAgICAjIGZ1bmN0aW9uIGNhbGwgKHByb3BlcnR5IG1hZ2ljKQ0KICAgICsg
ICAgICAgIHZpcyA9IHNlbGYudmlzaWJpbGl0eQ0KICAgICsNCiAgICArICAgICAgICBzZWxmLl93
cml0ZV90b19jb25mID0gKHZpcyAhPSAwKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLm9y
aWdfdHlwZSBpbiBfSU5UX0hFWDoNCiAgICArICAgICAgICAgICAgIyBUaGUgQyBpbXBsZW1lbnRh
dGlvbiBjaGVja3MgdGhlIHVzZXIgdmFsdWUgYWdhaW5zdCB0aGUgcmFuZ2UgaW4gYQ0KICAgICsg
ICAgICAgICAgICAjIHNlcGFyYXRlIGNvZGUgcGF0aCAocG9zdC1wcm9jZXNzaW5nIGFmdGVyIGxv
YWRpbmcgYSAuY29uZmlnKS4NCiAgICArICAgICAgICAgICAgIyBDaGVja2luZyBhbGwgdmFsdWVz
IGhlcmUgaW5zdGVhZCBtYWtlcyBtb3JlIHNlbnNlIGZvciB1cy4gSXQNCiAgICArICAgICAgICAg
ICAgIyByZXF1aXJlcyB0aGF0IHdlIGNoZWNrIGZvciBhIHJhbmdlIGZpcnN0Lg0KICAgICsNCiAg
ICArICAgICAgICAgICAgYmFzZSA9IF9UWVBFX1RPX0JBU0Vbc2VsZi5vcmlnX3R5cGVdDQogICAg
Kw0KICAgICsgICAgICAgICAgICAjIENoZWNrIGlmIGEgcmFuZ2UgaXMgaW4gZWZmZWN0DQogICAg
KyAgICAgICAgICAgIGZvciBsb3dfZXhwciwgaGlnaF9leHByLCBjb25kIGluIHNlbGYucmFuZ2Vz
Og0KICAgICsgICAgICAgICAgICAgICAgaWYgZXhwcl92YWx1ZShjb25kKToNCiAgICArICAgICAg
ICAgICAgICAgICAgICBoYXNfYWN0aXZlX3JhbmdlID0gVHJ1ZQ0KICAgICsNCiAgICArICAgICAg
ICAgICAgICAgICAgICAjIFRoZSB6ZXJvcyBhcmUgZnJvbSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBy
dW5uaW5nIHN0cnRvbGwoKQ0KICAgICsgICAgICAgICAgICAgICAgICAgICMgb24gZW1wdHkgc3Ry
aW5ncw0KICAgICsgICAgICAgICAgICAgICAgICAgIGxvdyA9IGludChsb3dfZXhwci5zdHJfdmFs
dWUsIGJhc2UpIGlmIFwNCiAgICArICAgICAgICAgICAgICAgICAgICAgIF9pc19iYXNlX24obG93
X2V4cHIuc3RyX3ZhbHVlLCBiYXNlKSBlbHNlIDANCiAgICArICAgICAgICAgICAgICAgICAgICBo
aWdoID0gaW50KGhpZ2hfZXhwci5zdHJfdmFsdWUsIGJhc2UpIGlmIFwNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgIF9pc19iYXNlX24oaGlnaF9leHByLnN0cl92YWx1ZSwgYmFzZSkgZWxzZSAw
DQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgKyAgICAgICAgICAg
IGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICBoYXNfYWN0aXZlX3JhbmdlID0gRmFsc2UNCiAg
ICArDQogICAgKyAgICAgICAgICAgICMgRGVmYXVsdHMgYXJlIHVzZWQgaWYgdGhlIHN5bWJvbCBp
cyBpbnZpc2libGUsIGxhY2tzIGEgdXNlciB2YWx1ZSwNCiAgICArICAgICAgICAgICAgIyBvciBo
YXMgYW4gb3V0LW9mLXJhbmdlIHVzZXIgdmFsdWUNCiAgICArICAgICAgICAgICAgdXNlX2RlZmF1
bHRzID0gVHJ1ZQ0KICAgICsNCiAgICArICAgICAgICAgICAgaWYgdmlzIGFuZCBzZWxmLnVzZXJf
dmFsdWU6DQogICAgKyAgICAgICAgICAgICAgICB1c2VyX3ZhbCA9IGludChzZWxmLnVzZXJfdmFs
dWUsIGJhc2UpDQogICAgKyAgICAgICAgICAgICAgICBpZiBoYXNfYWN0aXZlX3JhbmdlIGFuZCBu
b3QgbG93IDw9IHVzZXJfdmFsIDw9IGhpZ2g6DQogICAgKyAgICAgICAgICAgICAgICAgICAgbnVt
MnN0ciA9IHN0ciBpZiBiYXNlID09IDEwIGVsc2UgaGV4DQogICAgKyAgICAgICAgICAgICAgICAg
ICAgc2VsZi5rY29uZmlnLl93YXJuKA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAidXNl
ciB2YWx1ZSB7fSBvbiB0aGUge30gc3ltYm9sIHt9IGlnbm9yZWQgZHVlIHRvICINCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgImJlaW5nIG91dHNpZGUgdGhlIGFjdGl2ZSByYW5nZSAoW3t9
LCB7fV0pIC0tIGZhbGxpbmcgIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAiYmFjayBv
biBkZWZhdWx0cyINCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChudW0yc3Ry
KHVzZXJfdmFsKSwgVFlQRV9UT19TVFJbc2VsZi5vcmlnX3R5cGVdLA0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9uYW1lX2FuZF9sb2Moc2VsZiksDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtMnN0cihsb3cpLCBudW0yc3RyKGhpZ2gpKSkNCiAg
ICArICAgICAgICAgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBJZiB0
aGUgdXNlciB2YWx1ZSBpcyB3ZWxsLWZvcm1lZCBhbmQgc2F0aXNmaWVzIHJhbmdlDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgIyBjb250cmFpbnRzLCBpdCBpcyBzdG9yZWQgaW4gZXhhY3RseSB0
aGUgc2FtZSBmb3JtIGFzDQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBzcGVjaWZpZWQgaW4g
dGhlIGFzc2lnbm1lbnQgKHdpdGggb3Igd2l0aG91dCAiMHgiLCBldGMuKQ0KICAgICsgICAgICAg
ICAgICAgICAgICAgIHZhbCA9IHNlbGYudXNlcl92YWx1ZQ0KICAgICsgICAgICAgICAgICAgICAg
ICAgIHVzZV9kZWZhdWx0cyA9IEZhbHNlDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiB1c2Vf
ZGVmYXVsdHM6DQogICAgKyAgICAgICAgICAgICAgICAjIE5vIHVzZXIgdmFsdWUgb3IgaW52YWxp
ZCB1c2VyIHZhbHVlLiBMb29rIGF0IGRlZmF1bHRzLg0KICAgICsNCiAgICArICAgICAgICAgICAg
ICAgICMgVXNlZCB0byBpbXBsZW1lbnQgdGhlIHdhcm5pbmcgYmVsb3cNCiAgICArICAgICAgICAg
ICAgICAgIGhhc19kZWZhdWx0ID0gRmFsc2UNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICBm
b3Igc3ltLCBjb25kIGluIHNlbGYuZGVmYXVsdHM6DQogICAgKyAgICAgICAgICAgICAgICAgICAg
aWYgZXhwcl92YWx1ZShjb25kKToNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2Rl
ZmF1bHQgPSBzZWxmLl93cml0ZV90b19jb25mID0gVHJ1ZQ0KICAgICsNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsID0gc3ltLnN0cl92YWx1ZQ0KICAgICsNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgX2lzX2Jhc2Vfbih2YWwsIGJhc2UpOg0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsX251bSA9IGludCh2YWwsIGJhc2UpDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWxfbnVtID0gMCAgIyBzdHJ0b2xsKCkgb24gZW1wdHkgc3RyaW5nDQogICAgKw0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAgICAgICAgICAgICAgZWxzZToNCiAg
ICArICAgICAgICAgICAgICAgICAgICB2YWxfbnVtID0gMCAgIyBzdHJ0b2xsKCkgb24gZW1wdHkg
c3RyaW5nDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgIyBUaGlzIGNsYW1waW5nIHByb2Nl
ZHVyZSBydW5zIGV2ZW4gaWYgdGhlcmUncyBubyBkZWZhdWx0DQogICAgKyAgICAgICAgICAgICAg
ICBpZiBoYXNfYWN0aXZlX3JhbmdlOg0KICAgICsgICAgICAgICAgICAgICAgICAgIGNsYW1wID0g
Tm9uZQ0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIHZhbF9udW0gPCBsb3c6DQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYW1wID0gbG93DQogICAgKyAgICAgICAgICAgICAgICAg
ICAgZWxpZiB2YWxfbnVtID4gaGlnaDoNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgY2xh
bXAgPSBoaWdoDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIGNsYW1wIGlzIG5v
dCBOb25lOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSB2YWx1ZSBpcyByZXdy
aXR0ZW4gdG8gYSBzdGFuZGFyZCBmb3JtIGlmIGl0IGlzDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgICMgY2xhbXBlZA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzdHIo
Y2xhbXApIFwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5vcmln
X3R5cGUgaXMgSU5UIGVsc2UgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZXgoY2xhbXApDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNfZGVm
YXVsdDoNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTJzdHIgPSBzdHIgaWYg
YmFzZSA9PSAxMCBlbHNlIGhleA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5rY29uZmlnLl93YXJuKA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZWZhdWx0IHZhbHVlIHt9IG9uIHt9IGNsYW1wZWQgdG8ge30gZHVlIHRvICINCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiYmVpbmcgb3V0c2lkZSB0aGUgYWN0aXZlIHJhbmdl
IChbe30sIHt9XSkiDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1h
dCh2YWxfbnVtLCBfbmFtZV9hbmRfbG9jKHNlbGYpLA0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtMnN0cihjbGFtcCksIG51bTJzdHIobG93KSwNCiAgICAr
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bTJzdHIoaGlnaCkpKQ0K
ICAgICsNCiAgICArICAgICAgICBlbGlmIHNlbGYub3JpZ190eXBlIGlzIFNUUklORzoNCiAgICAr
ICAgICAgICAgICAgaWYgdmlzIGFuZCBzZWxmLnVzZXJfdmFsdWUgaXMgbm90IE5vbmU6DQogICAg
KyAgICAgICAgICAgICAgICAjIElmIHRoZSBzeW1ib2wgaXMgdmlzaWJsZSBhbmQgaGFzIGEgdXNl
ciB2YWx1ZSwgdXNlIHRoYXQNCiAgICArICAgICAgICAgICAgICAgIHZhbCA9IHNlbGYudXNlcl92
YWx1ZQ0KICAgICsgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgIyBPdGhl
cndpc2UsIGxvb2sgYXQgZGVmYXVsdHMNCiAgICArICAgICAgICAgICAgICAgIGZvciBzeW0sIGNv
bmQgaW4gc2VsZi5kZWZhdWx0czoNCiAgICArICAgICAgICAgICAgICAgICAgICBpZiBleHByX3Zh
bHVlKGNvbmQpOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzeW0uc3RyX3Zh
bHVlDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3RvX2NvbmYgPSBU
cnVlDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAg
ICAgICMgZW52X3ZhciBjb3JyZXNwb25kcyB0byBTWU1CT0xfQVVUTyBpbiB0aGUgQyBpbXBsZW1l
bnRhdGlvbiwgYW5kIGlzDQogICAgKyAgICAgICAgIyBhbHNvIHNldCBvbiB0aGUgZGVmY29uZmln
X2xpc3Qgc3ltYm9sIHRoZXJlLiBUZXN0IGZvciB0aGUNCiAgICArICAgICAgICAjIGRlZmNvbmZp
Z19saXN0IHN5bWJvbCBleHBsaWNpdGx5IGluc3RlYWQgaGVyZSwgdG8gYXZvaWQgYSBub25zZW5z
aWNhbA0KICAgICsgICAgICAgICMgZW52X3ZhciBzZXR0aW5nIGFuZCB0aGUgZGVmY29uZmlnX2xp
c3Qgc3ltYm9sIGJlaW5nIHByaW50ZWQNCiAgICArICAgICAgICAjIGluY29ycmVjdGx5LiBUaGlz
IGNvZGUgaXMgcHJldHR5IGNvbGQgYW55d2F5Lg0KICAgICsgICAgICAgIGlmIHNlbGYuZW52X3Zh
ciBpcyBub3QgTm9uZSBvciBzZWxmIGlzIHNlbGYua2NvbmZpZy5kZWZjb25maWdfbGlzdDoNCiAg
ICArICAgICAgICAgICAgc2VsZi5fd3JpdGVfdG9fY29uZiA9IEZhbHNlDQogICAgKw0KICAgICsg
ICAgICAgIHNlbGYuX2NhY2hlZF9zdHJfdmFsID0gdmFsDQogICAgKyAgICAgICAgcmV0dXJuIHZh
bA0KICAgICsNCiAgICArICAgIEBwcm9wZXJ0eQ0KICAgICsgICAgZGVmIHRyaV92YWx1ZShzZWxm
KToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50
YXRpb24uDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgaWYgc2VsZi5fY2FjaGVkX3Ry
aV92YWwgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRf
dHJpX3ZhbA0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLm9yaWdfdHlwZSBub3QgaW4gX0JP
T0xfVFJJU1RBVEU6DQogICAgKyAgICAgICAgICAgIGlmIHNlbGYub3JpZ190eXBlOiAgIyAhPSBV
TktOT1dODQogICAgKyAgICAgICAgICAgICAgICAjIFdvdWxkIHRha2Ugc29tZSB3b3JrIHRvIGdp
dmUgdGhlIGxvY2F0aW9uIGhlcmUNCiAgICArICAgICAgICAgICAgICAgIHNlbGYua2NvbmZpZy5f
d2FybigNCiAgICArICAgICAgICAgICAgICAgICAgICAiVGhlIHt9IHN5bWJvbCB7fSBpcyBiZWlu
ZyBldmFsdWF0ZWQgaW4gYSBsb2dpY2FsIGNvbnRleHQgIg0KICAgICsgICAgICAgICAgICAgICAg
ICAgICJzb21ld2hlcmUuIEl0IHdpbGwgYWx3YXlzIGV2YWx1YXRlIHRvIG4uIg0KICAgICsgICAg
ICAgICAgICAgICAgICAgIC5mb3JtYXQoVFlQRV9UT19TVFJbc2VsZi5vcmlnX3R5cGVdLCBfbmFt
ZV9hbmRfbG9jKHNlbGYpKSkNCiAgICArDQogICAgKyAgICAgICAgICAgIHNlbGYuX2NhY2hlZF90
cmlfdmFsID0gMA0KICAgICsgICAgICAgICAgICByZXR1cm4gMA0KICAgICsNCiAgICArICAgICAg
ICAjIFdhcm5pbmc6IFNlZSBTeW1ib2wuX3JlY19pbnZhbGlkYXRlKCksIGFuZCBub3RlIHRoYXQg
dGhpcyBpcyBhIGhpZGRlbg0KICAgICsgICAgICAgICMgZnVuY3Rpb24gY2FsbCAocHJvcGVydHkg
bWFnaWMpDQogICAgKyAgICAgICAgdmlzID0gc2VsZi52aXNpYmlsaXR5DQogICAgKyAgICAgICAg
c2VsZi5fd3JpdGVfdG9fY29uZiA9ICh2aXMgIT0gMCkNCiAgICArDQogICAgKyAgICAgICAgdmFs
ID0gMA0KICAgICsNCiAgICArICAgICAgICBpZiBub3Qgc2VsZi5jaG9pY2U6DQogICAgKyAgICAg
ICAgICAgICMgTm9uLWNob2ljZSBzeW1ib2wNCiAgICArDQogICAgKyAgICAgICAgICAgIGlmIHZp
cyBhbmQgc2VsZi51c2VyX3ZhbHVlIGlzIG5vdCBOb25lOg0KICAgICsgICAgICAgICAgICAgICAg
IyBJZiB0aGUgc3ltYm9sIGlzIHZpc2libGUgYW5kIGhhcyBhIHVzZXIgdmFsdWUsIHVzZSB0aGF0
DQogICAgKyAgICAgICAgICAgICAgICB2YWwgPSBtaW4oc2VsZi51c2VyX3ZhbHVlLCB2aXMpDQog
ICAgKw0KICAgICsgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgIyBPdGhl
cndpc2UsIGxvb2sgYXQgZGVmYXVsdHMgYW5kIHdlYWsgcmV2ZXJzZSBkZXBlbmRlbmNpZXMNCiAg
ICArICAgICAgICAgICAgICAgICMgKGltcGxpZXMpDQogICAgKw0KICAgICsgICAgICAgICAgICAg
ICAgZm9yIGRlZmF1bHQsIGNvbmQgaW4gc2VsZi5kZWZhdWx0czoNCiAgICArICAgICAgICAgICAg
ICAgICAgICBkZXBfdmFsID0gZXhwcl92YWx1ZShjb25kKQ0KICAgICsgICAgICAgICAgICAgICAg
ICAgIGlmIGRlcF92YWw6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IG1pbihl
eHByX3ZhbHVlKGRlZmF1bHQpLCBkZXBfdmFsKQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICBpZiB2YWw6DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV90
b19jb25mID0gVHJ1ZQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsN
CiAgICArICAgICAgICAgICAgICAgICMgV2VhayByZXZlcnNlIGRlcGVuZGVuY2llcyBhcmUgb25s
eSBjb25zaWRlcmVkIGlmIG91cg0KICAgICsgICAgICAgICAgICAgICAgIyBkaXJlY3QgZGVwZW5k
ZW5jaWVzIGFyZSBtZXQNCiAgICArICAgICAgICAgICAgICAgIGRlcF92YWwgPSBleHByX3ZhbHVl
KHNlbGYud2Vha19yZXZfZGVwKQ0KICAgICsgICAgICAgICAgICAgICAgaWYgZGVwX3ZhbCBhbmQg
ZXhwcl92YWx1ZShzZWxmLmRpcmVjdF9kZXApOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHZh
bCA9IG1heChkZXBfdmFsLCB2YWwpDQogICAgKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3Jp
dGVfdG9fY29uZiA9IFRydWUNCiAgICArDQogICAgKyAgICAgICAgICAgICMgUmV2ZXJzZSAoc2Vs
ZWN0LXJlbGF0ZWQpIGRlcGVuZGVuY2llcyB0YWtlIHByZWNlZGVuY2UNCiAgICArICAgICAgICAg
ICAgZGVwX3ZhbCA9IGV4cHJfdmFsdWUoc2VsZi5yZXZfZGVwKQ0KICAgICsgICAgICAgICAgICBp
ZiBkZXBfdmFsOg0KICAgICsgICAgICAgICAgICAgICAgaWYgZXhwcl92YWx1ZShzZWxmLmRpcmVj
dF9kZXApIDwgZGVwX3ZhbDoNCiAgICArICAgICAgICAgICAgICAgICAgICBzZWxmLl93YXJuX3Nl
bGVjdF91bnNhdGlzZmllZF9kZXBzKCkNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICB2YWwg
PSBtYXgoZGVwX3ZhbCwgdmFsKQ0KICAgICsgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdG9f
Y29uZiA9IFRydWUNCiAgICArDQogICAgKyAgICAgICAgICAgICMgbSBpcyBwcm9tb3RlZCB0byB5
IGZvciAoMSkgYm9vbCBzeW1ib2xzIGFuZCAoMikgc3ltYm9scyB3aXRoIGENCiAgICArICAgICAg
ICAgICAgIyB3ZWFrX3Jldl9kZXAgKGZyb20gaW1wbHkpIG9mIHkNCiAgICArICAgICAgICAgICAg
aWYgdmFsID09IDEgYW5kIFwNCiAgICArICAgICAgICAgICAgICAgKHNlbGYudHlwZSBpcyBCT09M
IG9yIGV4cHJfdmFsdWUoc2VsZi53ZWFrX3Jldl9kZXApID09IDIpOg0KICAgICsgICAgICAgICAg
ICAgICAgdmFsID0gMg0KICAgICsNCiAgICArICAgICAgICBlbGlmIHZpcyA9PSAyOg0KICAgICsg
ICAgICAgICAgICAjIFZpc2libGUgY2hvaWNlIHN5bWJvbCBpbiB5LW1vZGUgY2hvaWNlLiBUaGUg
Y2hvaWNlIG1vZGUgbGltaXRzDQogICAgKyAgICAgICAgICAgICMgdGhlIHZpc2liaWxpdHkgb2Yg
Y2hvaWNlIHN5bWJvbHMsIHNvIGl0J3Mgc3VmZmljaWVudCB0byBqdXN0DQogICAgKyAgICAgICAg
ICAgICMgY2hlY2sgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGNob2ljZSBzeW1ib2xzIHRoZW1zZWx2
ZXMuDQogICAgKyAgICAgICAgICAgIHZhbCA9IDIgaWYgc2VsZi5jaG9pY2Uuc2VsZWN0aW9uIGlz
IHNlbGYgZWxzZSAwDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgdmlzIGFuZCBzZWxmLnVzZXJf
dmFsdWU6DQogICAgKyAgICAgICAgICAgICMgVmlzaWJsZSBjaG9pY2Ugc3ltYm9sIGluIG0tbW9k
ZSBjaG9pY2UsIHdpdGggc2V0IG5vbi0wIHVzZXIgdmFsdWUNCiAgICArICAgICAgICAgICAgdmFs
ID0gMQ0KICAgICsNCiAgICArICAgICAgICBzZWxmLl9jYWNoZWRfdHJpX3ZhbCA9IHZhbA0KICAg
ICsgICAgICAgIHJldHVybiB2YWwNCiAgICArDQogICAgKyAgICBAcHJvcGVydHkNCiAgICArICAg
IGRlZiBhc3NpZ25hYmxlKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIFNl
ZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAg
ICBpZiBzZWxmLl9jYWNoZWRfYXNzaWduYWJsZSBpcyBOb25lOg0KICAgICsgICAgICAgICAgICBz
ZWxmLl9jYWNoZWRfYXNzaWduYWJsZSA9IHNlbGYuX2Fzc2lnbmFibGUoKQ0KICAgICsgICAgICAg
IHJldHVybiBzZWxmLl9jYWNoZWRfYXNzaWduYWJsZQ0KICAgICsNCiAgICArICAgIEBwcm9wZXJ0
eQ0KICAgICsgICAgZGVmIHZpc2liaWxpdHkoc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAg
KyAgICAgICAgU2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLg0KICAgICsgICAgICAgICIiIg0K
ICAgICsgICAgICAgIGlmIHNlbGYuX2NhY2hlZF92aXMgaXMgTm9uZToNCiAgICArICAgICAgICAg
ICAgc2VsZi5fY2FjaGVkX3ZpcyA9IF92aXNpYmlsaXR5KHNlbGYpDQogICAgKyAgICAgICAgcmV0
dXJuIHNlbGYuX2NhY2hlZF92aXMNCiAgICArDQogICAgKyAgICBAcHJvcGVydHkNCiAgICArICAg
IGRlZiBjb25maWdfc3RyaW5nKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAg
IFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICArICAgICAgICAiIiINCiAgICArICAg
ICAgICAjIF93cml0ZV90b19jb25mIGlzIGRldGVybWluZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2Fs
Y3VsYXRlZC4gVGhpcyBpcyBhDQogICAgKyAgICAgICAgIyBoaWRkZW4gZnVuY3Rpb24gY2FsbCBk
dWUgdG8gcHJvcGVydHkgbWFnaWMuDQogICAgKyAgICAgICAgdmFsID0gc2VsZi5zdHJfdmFsdWUN
CiAgICArICAgICAgICBpZiBub3Qgc2VsZi5fd3JpdGVfdG9fY29uZjoNCiAgICArICAgICAgICAg
ICAgcmV0dXJuICIiDQogICAgKw0KICAgICsgICAgICAgIGlmIHNlbGYub3JpZ190eXBlIGluIF9C
T09MX1RSSVNUQVRFOg0KICAgICsgICAgICAgICAgICByZXR1cm4gInt9e309e31cbiIgXA0KICAg
ICsgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmtjb25maWcuY29uZmlnX3ByZWZpeCwg
c2VsZi5uYW1lLCB2YWwpIFwNCiAgICArICAgICAgICAgICAgICAgICAgIGlmIHZhbCAhPSAibiIg
ZWxzZSBcDQogICAgKyAgICAgICAgICAgICAgICAgICAiIyB7fXt9IGlzIG5vdCBzZXRcbiIgXA0K
ICAgICsgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLmtjb25maWcuY29uZmlnX3ByZWZp
eCwgc2VsZi5uYW1lKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLm9yaWdfdHlwZSBpbiBf
SU5UX0hFWDoNCiAgICArICAgICAgICAgICAgcmV0dXJuICJ7fXt9PXt9XG4iIFwNCiAgICArICAg
ICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5rY29uZmlnLmNvbmZpZ19wcmVmaXgsIHNlbGYu
bmFtZSwgdmFsKQ0KICAgICsNCiAgICArICAgICAgICAjIHN5bS5vcmlnX3R5cGUgaXMgU1RSSU5H
DQogICAgKyAgICAgICAgcmV0dXJuICd7fXt9PSJ7fSJcbicgXA0KICAgICsgICAgICAgICAgICAg
ICAuZm9ybWF0KHNlbGYua2NvbmZpZy5jb25maWdfcHJlZml4LCBzZWxmLm5hbWUsIGVzY2FwZSh2
YWwpKQ0KICAgICsNCiAgICArICAgIGRlZiBzZXRfdmFsdWUoc2VsZiwgdmFsdWUpOg0KICAgICsg
ICAgICAgICIiIg0KICAgICsgICAgICAgIFNldHMgdGhlIHVzZXIgdmFsdWUgb2YgdGhlIHN5bWJv
bC4NCiAgICArDQogICAgKyAgICAgICAgRXF1YWwgaW4gZWZmZWN0IHRvIGFzc2lnbmluZyB0aGUg
dmFsdWUgdG8gdGhlIHN5bWJvbCB3aXRoaW4gYSAuY29uZmlnDQogICAgKyAgICAgICAgZmlsZS4g
Rm9yIGJvb2wgYW5kIHRyaXN0YXRlIHN5bWJvbHMsIHVzZSB0aGUgJ2Fzc2lnbmFibGUnIGF0dHJp
YnV0ZSB0bw0KICAgICsgICAgICAgIGNoZWNrIHdoaWNoIHZhbHVlcyBjYW4gY3VycmVudGx5IGJl
IGFzc2lnbmVkLiBTZXR0aW5nIHZhbHVlcyBvdXRzaWRlDQogICAgKyAgICAgICAgJ2Fzc2lnbmFi
bGUnIHdpbGwgY2F1c2UgU3ltYm9sLnVzZXJfdmFsdWUgdG8gZGlmZmVyIGZyb20NCiAgICArICAg
ICAgICBTeW1ib2wuc3RyL3RyaV92YWx1ZSAoYmUgdHJ1bmNhdGVkIGRvd24gb3IgdXApLg0KICAg
ICsNCiAgICArICAgICAgICBTZXR0aW5nIGEgY2hvaWNlIHN5bWJvbCB0byAyICh5KSBzZXRzIENo
b2ljZS51c2VyX3NlbGVjdGlvbiB0byB0aGUNCiAgICArICAgICAgICBjaG9pY2Ugc3ltYm9sIGlu
IGFkZGl0aW9uIHRvIHNldHRpbmcgU3ltYm9sLnVzZXJfdmFsdWUuDQogICAgKyAgICAgICAgQ2hv
aWNlLnVzZXJfc2VsZWN0aW9uIGlzIGNvbnNpZGVyZWQgd2hlbiB0aGUgY2hvaWNlIGlzIGluIHkg
bW9kZSAodGhlDQogICAgKyAgICAgICAgIm5vcm1hbCIgbW9kZSkuDQogICAgKw0KICAgICsgICAg
ICAgIE90aGVyIHN5bWJvbHMgdGhhdCBkZXBlbmQgKHBvc3NpYmx5IGluZGlyZWN0bHkpIG9uIHRo
aXMgc3ltYm9sIGFyZQ0KICAgICsgICAgICAgIGF1dG9tYXRpY2FsbHkgcmVjYWxjdWxhdGVkIHRv
IHJlZmxlY3QgdGhlIGFzc2lnbmVkIHZhbHVlLg0KICAgICsNCiAgICArICAgICAgICB2YWx1ZToN
CiAgICArICAgICAgICAgIFRoZSB1c2VyIHZhbHVlIHRvIGdpdmUgdG8gdGhlIHN5bWJvbC4gRm9y
IGJvb2wgYW5kIHRyaXN0YXRlIHN5bWJvbHMsDQogICAgKyAgICAgICAgICBuL20veSBjYW4gYmUg
c3BlY2lmaWVkIGVpdGhlciBhcyAwLzEvMiAodGhlIHVzdWFsIGZvcm1hdCBmb3IgdHJpc3RhdGUN
CiAgICArICAgICAgICAgIHZhbHVlcyBpbiBLY29uZmlnbGliKSBvciBhcyBvbmUgb2YgdGhlIHN0
cmluZ3MgIm4iLyJtIi8ieSIuIEZvciBvdGhlcg0KICAgICsgICAgICAgICAgc3ltYm9sIHR5cGVz
LCBwYXNzIGEgc3RyaW5nLg0KICAgICsNCiAgICArICAgICAgICAgIE5vdGUgdGhhdCB0aGUgdmFs
dWUgZm9yIGFuIGludC9oZXggc3ltYm9sIGlzIHBhc3NlZCBhcyBhIHN0cmluZywgZS5nLg0KICAg
ICsgICAgICAgICAgIjEyMyIgb3IgIjB4MDEyMyIuIFRoZSBmb3JtYXQgb2YgdGhpcyBzdHJpbmcg
aXMgcHJlc2VydmVkIGluIHRoZQ0KICAgICsgICAgICAgICAgb3V0cHV0Lg0KICAgICsNCiAgICAr
ICAgICAgICAgIFZhbHVlcyB0aGF0IGFyZSBpbnZhbGlkIGZvciB0aGUgdHlwZSAoc3VjaCBhcyAi
Zm9vIiBvciAxIChtKSBmb3IgYQ0KICAgICsgICAgICAgICAgQk9PTCBvciAiMHgxMjMiIGZvciBh
biBJTlQpIGFyZSBpZ25vcmVkIGFuZCB3b24ndCBiZSBzdG9yZWQgaW4NCiAgICArICAgICAgICAg
IFN5bWJvbC51c2VyX3ZhbHVlLiBLY29uZmlnbGliIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGJ5IGRl
ZmF1bHQgZm9yDQogICAgKyAgICAgICAgICBpbnZhbGlkIGFzc2lnbm1lbnRzLCBhbmQgc2V0X3Zh
bHVlKCkgd2lsbCByZXR1cm4gRmFsc2UuDQogICAgKw0KICAgICsgICAgICAgIFJldHVybnMgVHJ1
ZSBpZiB0aGUgdmFsdWUgaXMgdmFsaWQgZm9yIHRoZSB0eXBlIG9mIHRoZSBzeW1ib2wsIGFuZA0K
ICAgICsgICAgICAgIEZhbHNlIG90aGVyd2lzZS4gVGhpcyBvbmx5IGxvb2tzIGF0IHRoZSBmb3Jt
IG9mIHRoZSB2YWx1ZS4gRm9yIEJPT0wgYW5kDQogICAgKyAgICAgICAgVFJJU1RBVEUgc3ltYm9s
cywgY2hlY2sgdGhlIFN5bWJvbC5hc3NpZ25hYmxlIGF0dHJpYnV0ZSB0byBzZWUgd2hhdA0KICAg
ICsgICAgICAgIHZhbHVlcyBhcmUgY3VycmVudGx5IGluIHJhbmdlIGFuZCB3b3VsZCBhY3R1YWxs
eSBiZSByZWZsZWN0ZWQgaW4gdGhlDQogICAgKyAgICAgICAgdmFsdWUgb2YgdGhlIHN5bWJvbC4g
Rm9yIG90aGVyIHN5bWJvbCB0eXBlcywgY2hlY2sgd2hldGhlciB0aGUNCiAgICArICAgICAgICB2
aXNpYmlsaXR5IGlzIG5vbi1uLg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIGlmIHNl
bGYub3JpZ190eXBlIGluIF9CT09MX1RSSVNUQVRFIGFuZCB2YWx1ZSBpbiBTVFJfVE9fVFJJOg0K
ICAgICsgICAgICAgICAgICB2YWx1ZSA9IFNUUl9UT19UUklbdmFsdWVdDQogICAgKw0KICAgICsg
ICAgICAgICMgSWYgdGhlIG5ldyB1c2VyIHZhbHVlIG1hdGNoZXMgdGhlIG9sZCwgbm90aGluZyBj
aGFuZ2VzLCBhbmQgd2UgY2FuDQogICAgKyAgICAgICAgIyBhdm9pZCBpbnZhbGlkYXRpbmcgY2Fj
aGVkIHZhbHVlcy4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBUaGlzIG9wdGltaXph
dGlvbiBpcyBza2lwcGVkIGZvciBjaG9pY2Ugc3ltYm9sczogU2V0dGluZyBhIGNob2ljZQ0KICAg
ICsgICAgICAgICMgc3ltYm9sJ3MgdXNlciB2YWx1ZSB0byB5IG1pZ2h0IGNoYW5nZSB0aGUgc3Rh
dGUgb2YgdGhlIGNob2ljZSwgc28gaXQNCiAgICArICAgICAgICAjIHdvdWxkbid0IGJlIHNhZmUg
KHN5bWJvbCB1c2VyIHZhbHVlcyBhbHdheXMgbWF0Y2ggdGhlIHZhbHVlcyBzZXQgaW4gYQ0KICAg
ICsgICAgICAgICMgLmNvbmZpZyBmaWxlIG9yIHZpYSBzZXRfdmFsdWUoKSwgYW5kIGFyZSBuZXZl
ciBpbXBsaWNpdGx5IHVwZGF0ZWQpLg0KICAgICsgICAgICAgIGlmIHZhbHVlID09IHNlbGYudXNl
cl92YWx1ZSBhbmQgbm90IHNlbGYuY2hvaWNlOg0KICAgICsgICAgICAgICAgICBzZWxmLl93YXNf
c2V0ID0gVHJ1ZQ0KICAgICsgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArICAg
ICAgICAjIENoZWNrIGlmIHRoZSB2YWx1ZSBpcyB2YWxpZCBmb3Igb3VyIHR5cGUNCiAgICArICAg
ICAgICBpZiBub3QgKHNlbGYub3JpZ190eXBlIGlzIEJPT0wgICAgIGFuZCB2YWx1ZSBpbiAoMiwg
MCkgICAgIG9yDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLm9yaWdfdHlwZSBpcyBUUklTVEFU
RSBhbmQgdmFsdWUgaW4gVFJJX1RPX1NUUiBvcg0KICAgICsgICAgICAgICAgICAgICAgdmFsdWUu
X19jbGFzc19fIGlzIHN0ciBhbmQNCiAgICArICAgICAgICAgICAgICAgIChzZWxmLm9yaWdfdHlw
ZSBpcyBTVFJJTkcgICAgICAgICAgICAgICAgICAgICAgICBvcg0KICAgICsgICAgICAgICAgICAg
ICAgIHNlbGYub3JpZ190eXBlIGlzIElOVCBhbmQgX2lzX2Jhc2Vfbih2YWx1ZSwgMTApIG9yDQog
ICAgKyAgICAgICAgICAgICAgICAgc2VsZi5vcmlnX3R5cGUgaXMgSEVYIGFuZCBfaXNfYmFzZV9u
KHZhbHVlLCAxNikNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YW5kIGludCh2YWx1ZSwgMTYpID49IDApKToNCiAgICArDQogICAgKyAgICAgICAgICAgICMgRGlz
cGxheSB0cmlzdGF0ZSB2YWx1ZXMgYXMgbiwgbSwgeSBpbiB0aGUgd2FybmluZw0KICAgICsgICAg
ICAgICAgICBzZWxmLmtjb25maWcuX3dhcm4oDQogICAgKyAgICAgICAgICAgICAgICAidGhlIHZh
bHVlIHt9IGlzIGludmFsaWQgZm9yIHt9LCB3aGljaCBoYXMgdHlwZSB7fSAtLSAiDQogICAgKyAg
ICAgICAgICAgICAgICAiYXNzaWdubWVudCBpZ25vcmVkIg0KICAgICsgICAgICAgICAgICAgICAg
LmZvcm1hdChUUklfVE9fU1RSW3ZhbHVlXSBpZiB2YWx1ZSBpbiBUUklfVE9fU1RSIGVsc2UNCiAg
ICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICIne30nIi5mb3JtYXQodmFsdWUpLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgICBfbmFtZV9hbmRfbG9jKHNlbGYpLCBUWVBFX1RPX1NU
UltzZWxmLm9yaWdfdHlwZV0pKQ0KICAgICsNCiAgICArICAgICAgICAgICAgcmV0dXJuIEZhbHNl
DQogICAgKw0KICAgICsgICAgICAgIHNlbGYudXNlcl92YWx1ZSA9IHZhbHVlDQogICAgKyAgICAg
ICAgc2VsZi5fd2FzX3NldCA9IFRydWUNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5jaG9p
Y2UgYW5kIHZhbHVlID09IDI6DQogICAgKyAgICAgICAgICAgICMgU2V0dGluZyBhIGNob2ljZSBz
eW1ib2wgdG8geSBtYWtlcyBpdCB0aGUgdXNlciBzZWxlY3Rpb24gb2YgdGhlDQogICAgKyAgICAg
ICAgICAgICMgY2hvaWNlLiBMaWtlIGZvciBzeW1ib2wgdXNlciB2YWx1ZXMsIHRoZSB1c2VyIHNl
bGVjdGlvbiBpcyBub3QNCiAgICArICAgICAgICAgICAgIyBndWFyYW50ZWVkIHRvIG1hdGNoIHRo
ZSBhY3R1YWwgc2VsZWN0aW9uIG9mIHRoZSBjaG9pY2UsIGFzDQogICAgKyAgICAgICAgICAgICMg
ZGVwZW5kZW5jaWVzIGNvbWUgaW50byBwbGF5Lg0KICAgICsgICAgICAgICAgICBzZWxmLmNob2lj
ZS51c2VyX3NlbGVjdGlvbiA9IHNlbGYNCiAgICArICAgICAgICAgICAgc2VsZi5jaG9pY2UuX3dh
c19zZXQgPSBUcnVlDQogICAgKyAgICAgICAgICAgIHNlbGYuY2hvaWNlLl9yZWNfaW52YWxpZGF0
ZSgpDQogICAgKyAgICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgc2VsZi5fcmVjX2ludmFs
aWRhdGVfaWZfaGFzX3Byb21wdCgpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiBUcnVlDQog
ICAgKw0KICAgICsgICAgZGVmIHVuc2V0X3ZhbHVlKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0K
ICAgICsgICAgICAgIFJlbW92ZXMgYW55IHVzZXIgdmFsdWUgZnJvbSB0aGUgc3ltYm9sLCBhcyBp
ZiB0aGUgc3ltYm9sIGhhZCBuZXZlcg0KICAgICsgICAgICAgIGdvdHRlbiBhIHVzZXIgdmFsdWUg
dmlhIEtjb25maWcubG9hZF9jb25maWcoKSBvciBTeW1ib2wuc2V0X3ZhbHVlKCkuDQogICAgKyAg
ICAgICAgIiIiDQogICAgKyAgICAgICAgaWYgc2VsZi51c2VyX3ZhbHVlIGlzIG5vdCBOb25lOg0K
ICAgICsgICAgICAgICAgICBzZWxmLnVzZXJfdmFsdWUgPSBOb25lDQogICAgKyAgICAgICAgICAg
IHNlbGYuX3JlY19pbnZhbGlkYXRlX2lmX2hhc19wcm9tcHQoKQ0KICAgICsNCiAgICArICAgIEBw
cm9wZXJ0eQ0KICAgICsgICAgZGVmIHJlZmVyZW5jZWQoc2VsZik6DQogICAgKyAgICAgICAgIiIi
DQogICAgKyAgICAgICAgU2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLg0KICAgICsgICAgICAg
ICIiIg0KICAgICsgICAgICAgIHJldHVybiB7aXRlbSBmb3Igbm9kZSBpbiBzZWxmLm5vZGVzIGZv
ciBpdGVtIGluIG5vZGUucmVmZXJlbmNlZH0NCiAgICArDQogICAgKyAgICBAcHJvcGVydHkNCiAg
ICArICAgIGRlZiBvcmlnX2RlZmF1bHRzKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsg
ICAgICAgIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICArICAgICAgICAiIiINCiAg
ICArICAgICAgICByZXR1cm4gW2QgZm9yIG5vZGUgaW4gc2VsZi5ub2RlcyBmb3IgZCBpbiBub2Rl
Lm9yaWdfZGVmYXVsdHNdDQogICAgKw0KICAgICsgICAgQHByb3BlcnR5DQogICAgKyAgICBkZWYg
b3JpZ19zZWxlY3RzKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIFNlZSB0
aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBy
ZXR1cm4gW3MgZm9yIG5vZGUgaW4gc2VsZi5ub2RlcyBmb3IgcyBpbiBub2RlLm9yaWdfc2VsZWN0
c10NCiAgICArDQogICAgKyAgICBAcHJvcGVydHkNCiAgICArICAgIGRlZiBvcmlnX2ltcGxpZXMo
c2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgU2VlIHRoZSBjbGFzcyBkb2N1
bWVudGF0aW9uLg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBbaSBmb3Ig
bm9kZSBpbiBzZWxmLm5vZGVzIGZvciBpIGluIG5vZGUub3JpZ19pbXBsaWVzXQ0KICAgICsNCiAg
ICArICAgIEBwcm9wZXJ0eQ0KICAgICsgICAgZGVmIG9yaWdfcmFuZ2VzKHNlbGYpOg0KICAgICsg
ICAgICAgICIiIg0KICAgICsgICAgICAgIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAg
ICArICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4gW3IgZm9yIG5vZGUgaW4gc2VsZi5u
b2RlcyBmb3IgciBpbiBub2RlLm9yaWdfcmFuZ2VzXQ0KICAgICsNCiAgICArICAgIGRlZiBfX3Jl
cHJfXyhzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBSZXR1cm5zIGEgc3Ry
aW5nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHN5bWJvbCAoaW5jbHVkaW5nIGl0cyBuYW1l
LA0KICAgICsgICAgICAgIHZhbHVlLCB2aXNpYmlsaXR5LCBhbmQgbG9jYXRpb24ocykpIHdoZW4g
aXQgaXMgZXZhbHVhdGVkIG9uIGUuZy4gdGhlDQogICAgKyAgICAgICAgaW50ZXJhY3RpdmUgUHl0
aG9uIHByb21wdC4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBmaWVsZHMgPSBbInN5
bWJvbCAiICsgc2VsZi5uYW1lLCBUWVBFX1RPX1NUUltzZWxmLnR5cGVdXQ0KICAgICsgICAgICAg
IGFkZCA9IGZpZWxkcy5hcHBlbmQNCiAgICArDQogICAgKyAgICAgICAgZm9yIG5vZGUgaW4gc2Vs
Zi5ub2RlczoNCiAgICArICAgICAgICAgICAgaWYgbm9kZS5wcm9tcHQ6DQogICAgKyAgICAgICAg
ICAgICAgICBhZGQoJyJ7fSInLmZvcm1hdChub2RlLnByb21wdFswXSkpDQogICAgKw0KICAgICsg
ICAgICAgICMgT25seSBhZGQgcXVvdGVzIGZvciBub24tYm9vbC90cmlzdGF0ZSBzeW1ib2xzDQog
ICAgKyAgICAgICAgYWRkKCJ2YWx1ZSAiICsgKHNlbGYuc3RyX3ZhbHVlIGlmIHNlbGYub3JpZ190
eXBlIGluIF9CT09MX1RSSVNUQVRFDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
JyJ7fSInLmZvcm1hdChzZWxmLnN0cl92YWx1ZSkpKQ0KICAgICsNCiAgICArICAgICAgICBpZiBu
b3Qgc2VsZi5pc19jb25zdGFudDoNCiAgICArICAgICAgICAgICAgIyBUaGVzZSBhcmVuJ3QgaGVs
cGZ1bCB0byBzaG93IGZvciBjb25zdGFudCBzeW1ib2xzDQogICAgKw0KICAgICsgICAgICAgICAg
ICBpZiBzZWxmLnVzZXJfdmFsdWUgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgICAgICAj
IE9ubHkgYWRkIHF1b3RlcyBmb3Igbm9uLWJvb2wvdHJpc3RhdGUgc3ltYm9scw0KICAgICsgICAg
ICAgICAgICAgICAgYWRkKCJ1c2VyIHZhbHVlICIgKyAoVFJJX1RPX1NUUltzZWxmLnVzZXJfdmFs
dWVdDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLm9y
aWdfdHlwZSBpbiBfQk9PTF9UUklTVEFURQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSAnInt9IicuZm9ybWF0KHNlbGYudXNlcl92YWx1ZSkpKQ0KICAgICsN
CiAgICArICAgICAgICAgICAgYWRkKCJ2aXNpYmlsaXR5ICIgKyBUUklfVE9fU1RSW3NlbGYudmlz
aWJpbGl0eV0pDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBzZWxmLmNob2ljZToNCiAgICAr
ICAgICAgICAgICAgICAgIGFkZCgiY2hvaWNlIHN5bWJvbCIpDQogICAgKw0KICAgICsgICAgICAg
ICAgICBpZiBzZWxmLmlzX2FsbG5vY29uZmlnX3k6DQogICAgKyAgICAgICAgICAgICAgICBhZGQo
ImFsbG5vY29uZmlnX3kiKQ0KICAgICsNCiAgICArICAgICAgICAgICAgaWYgc2VsZiBpcyBzZWxm
Lmtjb25maWcuZGVmY29uZmlnX2xpc3Q6DQogICAgKyAgICAgICAgICAgICAgICBhZGQoImlzIHRo
ZSBkZWZjb25maWdfbGlzdCBzeW1ib2wiKQ0KICAgICsNCiAgICArICAgICAgICAgICAgaWYgc2Vs
Zi5lbnZfdmFyIGlzIG5vdCBOb25lOg0KICAgICsgICAgICAgICAgICAgICAgYWRkKCJmcm9tIGVu
dmlyb25tZW50IHZhcmlhYmxlICIgKyBzZWxmLmVudl92YXIpDQogICAgKw0KICAgICsgICAgICAg
ICAgICBpZiBzZWxmIGlzIHNlbGYua2NvbmZpZy5tb2R1bGVzOg0KICAgICsgICAgICAgICAgICAg
ICAgYWRkKCJpcyB0aGUgbW9kdWxlcyBzeW1ib2wiKQ0KICAgICsNCiAgICArICAgICAgICAgICAg
YWRkKCJkaXJlY3QgZGVwcyAiICsgVFJJX1RPX1NUUltleHByX3ZhbHVlKHNlbGYuZGlyZWN0X2Rl
cCldKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLm5vZGVzOg0KICAgICsgICAgICAgICAg
ICBmb3Igbm9kZSBpbiBzZWxmLm5vZGVzOg0KICAgICsgICAgICAgICAgICAgICAgYWRkKCJ7fTp7
fSIuZm9ybWF0KG5vZGUuZmlsZW5hbWUsIG5vZGUubGluZW5yKSkNCiAgICArICAgICAgICBlbHNl
Og0KICAgICsgICAgICAgICAgICBhZGQoImNvbnN0YW50IiBpZiBzZWxmLmlzX2NvbnN0YW50IGVs
c2UgInVuZGVmaW5lZCIpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiAiPHt9PiIuZm9ybWF0
KCIsICIuam9pbihmaWVsZHMpKQ0KICAgICsNCiAgICArICAgIGRlZiBfX3N0cl9fKHNlbGYpOg0K
ICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50
YXRpb24gb2YgdGhlIHN5bWJvbCB3aGVuIGl0IGlzIHByaW50ZWQuDQogICAgKyAgICAgICAgTWF0
Y2hlcyB0aGUgS2NvbmZpZyBmb3JtYXQsIHdpdGggYW55IHBhcmVudCBkZXBlbmRlbmNpZXMgcHJv
cGFnYXRlZCB0bw0KICAgICsgICAgICAgIHRoZSAnZGVwZW5kcyBvbicgY29uZGl0aW9uLg0KICAg
ICsNCiAgICArICAgICAgICBUaGUgc3RyaW5nIGlzIGNvbnN0cnVjdGVkIGJ5IGpvaW5pbmcgdGhl
IHN0cmluZ3MgcmV0dXJuZWQgYnkNCiAgICArICAgICAgICBNZW51Tm9kZS5fX3N0cl9fKCkgZm9y
IGVhY2ggb2YgdGhlIHN5bWJvbCdzIG1lbnUgbm9kZXMsIHNvIHN5bWJvbHMNCiAgICArICAgICAg
ICBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucyB3aWxsIHJldHVybiBhIHN0cmluZyB3aXRo
IGFsbA0KICAgICsgICAgICAgIGRlZmluaXRpb25zLg0KICAgICsNCiAgICArICAgICAgICBUaGUg
cmV0dXJuZWQgc3RyaW5nIGRvZXMgbm90IGVuZCBpbiBhIG5ld2xpbmUuIEFuIGVtcHR5IHN0cmlu
ZyBpcw0KICAgICsgICAgICAgIHJldHVybmVkIGZvciB1bmRlZmluZWQgYW5kIGNvbnN0YW50IHN5
bWJvbHMuDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYuY3VzdG9t
X3N0cihzdGFuZGFyZF9zY19leHByX3N0cikNCiAgICArDQogICAgKyAgICBkZWYgY3VzdG9tX3N0
cihzZWxmLCBzY19leHByX3N0cl9mbik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAg
V29ya3MgbGlrZSBTeW1ib2wuX19zdHJfXygpLCBidXQgYWxsb3dzIGEgY3VzdG9tIGZvcm1hdCB0
byBiZSB1c2VkIGZvcg0KICAgICsgICAgICAgIGFsbCBzeW1ib2wvY2hvaWNlIHJlZmVyZW5jZXMu
IFNlZSBleHByX3N0cigpLg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiAi
XG5cbiIuam9pbihub2RlLmN1c3RvbV9zdHIoc2NfZXhwcl9zdHJfZm4pDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciBub2RlIGluIHNlbGYubm9kZXMpDQogICAgKw0KICAgICsg
ICAgIw0KICAgICsgICAgIyBQcml2YXRlIG1ldGhvZHMNCiAgICArICAgICMNCiAgICArDQogICAg
KyAgICBkZWYgX19pbml0X18oc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAg
U3ltYm9sIGNvbnN0cnVjdG9yIC0tIG5vdCBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZGlyZWN0bHkg
YnkgS2NvbmZpZ2xpYg0KICAgICsgICAgICAgIGNsaWVudHMuDQogICAgKyAgICAgICAgIiIiDQog
ICAgKyAgICAgICAgIyBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBhbHdheXMgc2V0IG9uIHRoZSBpbnN0
YW5jZSBmcm9tIG91dHNpZGUgYW5kDQogICAgKyAgICAgICAgIyBkb24ndCBuZWVkIGRlZmF1bHRz
Og0KICAgICsgICAgICAgICMgICBrY29uZmlnDQogICAgKyAgICAgICAgIyAgIGRpcmVjdF9kZXAN
CiAgICArICAgICAgICAjICAgaXNfY29uc3RhbnQNCiAgICArICAgICAgICAjICAgbmFtZQ0KICAg
ICsgICAgICAgICMgICByZXZfZGVwDQogICAgKyAgICAgICAgIyAgIHdlYWtfcmV2X2RlcA0KICAg
ICsNCiAgICArICAgICAgICAjIC0gVU5LTk9XTiA9PSAwDQogICAgKyAgICAgICAgIyAtIF92aXNp
dGVkIGlzIHVzZWQgZHVyaW5nIHRyZWUgaXRlcmF0aW9uIGFuZCBkZXAuIGxvb3AgZGV0ZWN0aW9u
DQogICAgKyAgICAgICAgc2VsZi5vcmlnX3R5cGUgPSBzZWxmLl92aXNpdGVkID0gMA0KICAgICsN
CiAgICArICAgICAgICBzZWxmLm5vZGVzID0gW10NCiAgICArDQogICAgKyAgICAgICAgc2VsZi5k
ZWZhdWx0cyA9IFtdDQogICAgKyAgICAgICAgc2VsZi5zZWxlY3RzID0gW10NCiAgICArICAgICAg
ICBzZWxmLmltcGxpZXMgPSBbXQ0KICAgICsgICAgICAgIHNlbGYucmFuZ2VzID0gW10NCiAgICAr
DQogICAgKyAgICAgICAgc2VsZi51c2VyX3ZhbHVlID0gXA0KICAgICsgICAgICAgIHNlbGYuY2hv
aWNlID0gXA0KICAgICsgICAgICAgIHNlbGYuZW52X3ZhciA9IFwNCiAgICArICAgICAgICBzZWxm
Ll9jYWNoZWRfc3RyX3ZhbCA9IHNlbGYuX2NhY2hlZF90cmlfdmFsID0gc2VsZi5fY2FjaGVkX3Zp
cyA9IFwNCiAgICArICAgICAgICBzZWxmLl9jYWNoZWRfYXNzaWduYWJsZSA9IE5vbmUNCiAgICAr
DQogICAgKyAgICAgICAgIyBfd3JpdGVfdG9fY29uZiBpcyBjYWxjdWxhdGVkIGFsb25nIHdpdGgg
dGhlIHZhbHVlLiBJZiBUcnVlLCB0aGUNCiAgICArICAgICAgICAjIFN5bWJvbCBnZXRzIGEgLmNv
bmZpZyBlbnRyeS4NCiAgICArDQogICAgKyAgICAgICAgc2VsZi5pc19hbGxub2NvbmZpZ195ID0g
XA0KICAgICsgICAgICAgIHNlbGYuX3dhc19zZXQgPSBcDQogICAgKyAgICAgICAgc2VsZi5fd3Jp
dGVfdG9fY29uZiA9IEZhbHNlDQogICAgKw0KICAgICsgICAgICAgICMgU2VlIEtjb25maWcuX2J1
aWxkX2RlcCgpDQogICAgKyAgICAgICAgc2VsZi5fZGVwZW5kZW50cyA9IHNldCgpDQogICAgKw0K
ICAgICsgICAgZGVmIF9hc3NpZ25hYmxlKHNlbGYpOg0KICAgICsgICAgICAgICMgV29ya2VyIGZ1
bmN0aW9uIGZvciB0aGUgJ2Fzc2lnbmFibGUnIGF0dHJpYnV0ZQ0KICAgICsNCiAgICArICAgICAg
ICBpZiBzZWxmLm9yaWdfdHlwZSBub3QgaW4gX0JPT0xfVFJJU1RBVEU6DQogICAgKyAgICAgICAg
ICAgIHJldHVybiAoKQ0KICAgICsNCiAgICArICAgICAgICAjIFdhcm5pbmc6IFNlZSBTeW1ib2wu
X3JlY19pbnZhbGlkYXRlKCksIGFuZCBub3RlIHRoYXQgdGhpcyBpcyBhIGhpZGRlbg0KICAgICsg
ICAgICAgICMgZnVuY3Rpb24gY2FsbCAocHJvcGVydHkgbWFnaWMpDQogICAgKyAgICAgICAgdmlz
ID0gc2VsZi52aXNpYmlsaXR5DQogICAgKyAgICAgICAgaWYgbm90IHZpczoNCiAgICArICAgICAg
ICAgICAgcmV0dXJuICgpDQogICAgKw0KICAgICsgICAgICAgIHJldl9kZXBfdmFsID0gZXhwcl92
YWx1ZShzZWxmLnJldl9kZXApDQogICAgKw0KICAgICsgICAgICAgIGlmIHZpcyA9PSAyOg0KICAg
ICsgICAgICAgICAgICBpZiBzZWxmLmNob2ljZToNCiAgICArICAgICAgICAgICAgICAgIHJldHVy
biAoMiwpDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBub3QgcmV2X2RlcF92YWw6DQogICAg
KyAgICAgICAgICAgICAgICBpZiBzZWxmLnR5cGUgaXMgQk9PTCBvciBleHByX3ZhbHVlKHNlbGYu
d2Vha19yZXZfZGVwKSA9PSAyOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCwg
MikNCiAgICArICAgICAgICAgICAgICAgIHJldHVybiAoMCwgMSwgMikNCiAgICArDQogICAgKyAg
ICAgICAgICAgIGlmIHJldl9kZXBfdmFsID09IDI6DQogICAgKyAgICAgICAgICAgICAgICByZXR1
cm4gKDIsKQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyByZXZfZGVwX3ZhbCA9PSAxDQogICAg
Kw0KICAgICsgICAgICAgICAgICBpZiBzZWxmLnR5cGUgaXMgQk9PTCBvciBleHByX3ZhbHVlKHNl
bGYud2Vha19yZXZfZGVwKSA9PSAyOg0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuICgyLCkN
CiAgICArICAgICAgICAgICAgcmV0dXJuICgxLCAyKQ0KICAgICsNCiAgICArICAgICAgICAjIHZp
cyA9PSAxDQogICAgKw0KICAgICsgICAgICAgICMgTXVzdCBiZSBhIHRyaXN0YXRlIGhlcmUsIGJl
Y2F1c2UgYm9vbCBtIHZpc2liaWxpdHkgZ2V0cyBwcm9tb3RlZCB0byB5DQogICAgKw0KICAgICsg
ICAgICAgIGlmIG5vdCByZXZfZGVwX3ZhbDoNCiAgICArICAgICAgICAgICAgcmV0dXJuICgwLCAx
KSBpZiBleHByX3ZhbHVlKHNlbGYud2Vha19yZXZfZGVwKSAhPSAyIGVsc2UgKDAsIDIpDQogICAg
Kw0KICAgICsgICAgICAgIGlmIHJldl9kZXBfdmFsID09IDI6DQogICAgKyAgICAgICAgICAgIHJl
dHVybiAoMiwpDQogICAgKw0KICAgICsgICAgICAgICMgdmlzID09IHJldl9kZXBfdmFsID09IDEN
CiAgICArDQogICAgKyAgICAgICAgcmV0dXJuICgxLCkNCiAgICArDQogICAgKyAgICBkZWYgX2lu
dmFsaWRhdGUoc2VsZik6DQogICAgKyAgICAgICAgIyBNYXJrcyB0aGUgc3ltYm9sIGFzIG5lZWRp
bmcgdG8gYmUgcmVjYWxjdWxhdGVkDQogICAgKw0KICAgICsgICAgICAgIHNlbGYuX2NhY2hlZF9z
dHJfdmFsID0gc2VsZi5fY2FjaGVkX3RyaV92YWwgPSBzZWxmLl9jYWNoZWRfdmlzID0gXA0KICAg
ICsgICAgICAgIHNlbGYuX2NhY2hlZF9hc3NpZ25hYmxlID0gTm9uZQ0KICAgICsNCiAgICArICAg
IGRlZiBfcmVjX2ludmFsaWRhdGUoc2VsZik6DQogICAgKyAgICAgICAgIyBJbnZhbGlkYXRlcyB0
aGUgc3ltYm9sIGFuZCBhbGwgaXRlbXMgdGhhdCAocG9zc2libHkpIGRlcGVuZCBvbiBpdA0KICAg
ICsNCiAgICArICAgICAgICBpZiBzZWxmIGlzIHNlbGYua2NvbmZpZy5tb2R1bGVzOg0KICAgICsg
ICAgICAgICAgICAjIEludmFsaWRhdGluZyBNT0RVTEVTIGhhcyB3aWRlLXJhbmdpbmcgZWZmZWN0
cw0KICAgICsgICAgICAgICAgICBzZWxmLmtjb25maWcuX2ludmFsaWRhdGVfYWxsKCkNCiAgICAr
ICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICBzZWxmLl9pbnZhbGlkYXRlKCkNCiAgICAr
DQogICAgKyAgICAgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX2RlcGVuZGVudHM6DQogICAgKyAg
ICAgICAgICAgICAgICAjIF9jYWNoZWRfdmlzIGRvdWJsZXMgYXMgYSBmbGFnIHRoYXQgdGVsbHMg
dXMgd2hldGhlciAnaXRlbScNCiAgICArICAgICAgICAgICAgICAgICMgaGFzIGNhY2hlZCB2YWx1
ZXMsIGJlY2F1c2UgaXQncyBjYWxjdWxhdGVkIGFzIGEgc2lkZSBlZmZlY3QNCiAgICArICAgICAg
ICAgICAgICAgICMgb2YgY2FsY3VsYXRpbmcgYWxsIG90aGVyIChub24tY29uc3RhbnQpIGNhY2hl
ZCB2YWx1ZXMuDQogICAgKyAgICAgICAgICAgICAgICAjDQogICAgKyAgICAgICAgICAgICAgICAj
IElmIGl0ZW0uX2NhY2hlZF92aXMgaXMgTm9uZSwgaXQgbWVhbnMgdGhlcmUgY2FuJ3QgYmUgY2Fj
aGVkDQogICAgKyAgICAgICAgICAgICAgICAjIHZhbHVlcyBvbiBvdGhlciBpdGVtcyB0aGF0IGRl
cGVuZCBvbiAnaXRlbScsIGJlY2F1c2UgaWYgdGhlcmUNCiAgICArICAgICAgICAgICAgICAgICMg
d2VyZSwgc29tZSB2YWx1ZSBvbiAnaXRlbScgd291bGQgaGF2ZSBiZWVuIGNhbGN1bGF0ZWQgYW5k
DQogICAgKyAgICAgICAgICAgICAgICAjIGl0ZW0uX2NhY2hlZF92aXMgc2V0IGFzIGEgc2lkZSBl
ZmZlY3QuIEl0J3MgdGhlcmVmb3JlIHNhZmUgdG8NCiAgICArICAgICAgICAgICAgICAgICMgc3Rv
cCB0aGUgaW52YWxpZGF0aW9uIGF0IHN5bWJvbHMgd2l0aCBfY2FjaGVkX3ZpcyBOb25lLg0KICAg
ICsgICAgICAgICAgICAgICAgIw0KICAgICsgICAgICAgICAgICAgICAgIyBUaGlzIGFwcHJvYWNo
IG1hc3NpdmVseSBzcGVlZHMgdXAgc2NyaXB0cyB0aGF0IHNldCBhIGxvdCBvZg0KICAgICsgICAg
ICAgICAgICAgICAgIyB2YWx1ZXMsIHZzIHNpbXBseSBpbnZhbGlkYXRpbmcgYWxsIHBvc3NpYmx5
IGRlcGVuZGVudCBzeW1ib2xzDQogICAgKyAgICAgICAgICAgICAgICAjIChldmVuIHdoZW4geW91
IGFscmVhZHkgaGF2ZSBhIGxpc3Qgb2YgYWxsIHRoZSBkZXBlbmRlbnQNCiAgICArICAgICAgICAg
ICAgICAgICMgc3ltYm9scywgYmVjYXVzZSBzb21lIHN5bWJvbHMgZ2V0IGh1Z2UgZGVwZW5kZW5j
eSB0cmVlcykuDQogICAgKyAgICAgICAgICAgICAgICAjDQogICAgKyAgICAgICAgICAgICAgICAj
IFRoaXMgZ3JhY2VmdWxseSBoYW5kbGVzIGRlcGVuZGVuY3kgbG9vcHMgdG9vLCB3aGljaCBpcyBu
aWNlDQogICAgKyAgICAgICAgICAgICAgICAjIGZvciBjaG9pY2VzLCB3aGVyZSB0aGUgY2hvaWNl
IGRlcGVuZHMgb24gdGhlIGNob2ljZSBzeW1ib2xzDQogICAgKyAgICAgICAgICAgICAgICAjIGFu
ZCB2aWNlIHZlcnNhLg0KICAgICsgICAgICAgICAgICAgICAgaWYgaXRlbS5fY2FjaGVkX3ZpcyBp
cyBub3QgTm9uZToNCiAgICArICAgICAgICAgICAgICAgICAgICBpdGVtLl9yZWNfaW52YWxpZGF0
ZSgpDQogICAgKw0KICAgICsgICAgZGVmIF9yZWNfaW52YWxpZGF0ZV9pZl9oYXNfcHJvbXB0KHNl
bGYpOg0KICAgICsgICAgICAgICMgSW52YWxpZGF0ZXMgdGhlIHN5bWJvbCBhbmQgaXRzIGRlcGVu
ZGVudCBzeW1ib2xzLCBidXQgb25seSBpZiB0aGUNCiAgICArICAgICAgICAjIHN5bWJvbCBoYXMg
YSBwcm9tcHQuIFVzZXIgdmFsdWVzIG5ldmVyIGhhdmUgYW4gZWZmZWN0IG9uIHByb21wdGxlc3MN
CiAgICArICAgICAgICAjIHN5bWJvbHMsIHNvIHdlIHNraXAgaW52YWxpZGF0aW9uIGZvciB0aGVt
IGFzIGFuIG9wdGltaXphdGlvbi4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBUaGlz
IGFsc28gcHJldmVudHMgY29uc3RhbnQgKHF1b3RlZCkgc3ltYm9scyBmcm9tIGJlaW5nIGludmFs
aWRhdGVkDQogICAgKyAgICAgICAgIyBpZiBzZXRfdmFsdWUoKSBpcyBjYWxsZWQgb24gdGhlbSwg
d2hpY2ggd291bGQgbWFrZSB0aGVtIGxvc2UgdGhlaXINCiAgICArICAgICAgICAjIHZhbHVlIGFu
ZCBicmVhayB0aGluZ3MuDQogICAgKyAgICAgICAgIw0KICAgICsgICAgICAgICMgUHJpbnRzIGEg
d2FybmluZyBpZiB0aGUgc3ltYm9sIGhhcyBubyBwcm9tcHQuIEluIHNvbWUgY29udGV4dHMgKGUu
Zy4NCiAgICArICAgICAgICAjIHdoZW4gbG9hZGluZyBhIC5jb25maWcgZmlsZXMpIGFzc2lnbm1l
bnRzIHRvIHByb21wdGxlc3Mgc3ltYm9scyBhcmUNCiAgICArICAgICAgICAjIG5vcm1hbCBhbmQg
ZXhwZWN0ZWQsIHNvIHRoZSB3YXJuaW5nIGNhbiBiZSBkaXNhYmxlZC4NCiAgICArDQogICAgKyAg
ICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ub2RlczoNCiAgICArICAgICAgICAgICAgaWYgbm9kZS5w
cm9tcHQ6DQogICAgKyAgICAgICAgICAgICAgICBzZWxmLl9yZWNfaW52YWxpZGF0ZSgpDQogICAg
KyAgICAgICAgICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5rY29u
ZmlnLl93YXJuX2Fzc2lnbl9ub19wcm9tcHQ6DQogICAgKyAgICAgICAgICAgIHNlbGYua2NvbmZp
Zy5fd2FybihfbmFtZV9hbmRfbG9jKHNlbGYpICsgIiBoYXMgbm8gcHJvbXB0LCBtZWFuaW5nICIN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2VyIHZhbHVlcyBoYXZlIG5v
IGVmZmVjdCBvbiBpdCIpDQogICAgKw0KICAgICsgICAgZGVmIF9zdHJfZGVmYXVsdChzZWxmKToN
CiAgICArICAgICAgICAjIHdyaXRlX21pbl9jb25maWcoKSBoZWxwZXIgZnVuY3Rpb24uIFJldHVy
bnMgdGhlIHZhbHVlIHRoZSBzeW1ib2wNCiAgICArICAgICAgICAjIHdvdWxkIGdldCBmcm9tIGRl
ZmF1bHRzIGlmIGl0IGRpZG4ndCBoYXZlIGEgdXNlciB2YWx1ZS4gVXNlcyBleGFjdGx5DQogICAg
KyAgICAgICAgIyB0aGUgc2FtZSBhbGdvcml0aG0gYXMgdGhlIEMgaW1wbGVtZW50YXRpb24gKHRo
b3VnaCBhIGJpdCBjbGVhbmVkIHVwKSwNCiAgICArICAgICAgICAjIGZvciBjb21wYXRpYmlsaXR5
Lg0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLm9yaWdfdHlwZSBpbiBfQk9PTF9UUklTVEFU
RToNCiAgICArICAgICAgICAgICAgdmFsID0gMA0KICAgICsNCiAgICArICAgICAgICAgICAgIyBE
ZWZhdWx0cywgc2VsZWN0cywgYW5kIGltcGxpZXMgZG8gbm90IGFmZmVjdCBjaG9pY2Ugc3ltYm9s
cw0KICAgICsgICAgICAgICAgICBpZiBub3Qgc2VsZi5jaG9pY2U6DQogICAgKyAgICAgICAgICAg
ICAgICBmb3IgZGVmYXVsdCwgY29uZCBpbiBzZWxmLmRlZmF1bHRzOg0KICAgICsgICAgICAgICAg
ICAgICAgICAgIGNvbmRfdmFsID0gZXhwcl92YWx1ZShjb25kKQ0KICAgICsgICAgICAgICAgICAg
ICAgICAgIGlmIGNvbmRfdmFsOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBt
aW4oZXhwcl92YWx1ZShkZWZhdWx0KSwgY29uZF92YWwpDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgdmFsID0gbWF4KGV4cHJf
dmFsdWUoc2VsZi5yZXZfZGVwKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICBleHBy
X3ZhbHVlKHNlbGYud2Vha19yZXZfZGVwKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YWwpDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgIyBUcmFuc3Bvc2UgbW9kIHRvIHll
cyBpZiB0eXBlIGlzIGJvb2wgKHBvc3NpYmx5IGR1ZSB0byBtb2R1bGVzDQogICAgKyAgICAgICAg
ICAgICAgICAjIGJlaW5nIGRpc2FibGVkKQ0KICAgICsgICAgICAgICAgICAgICAgaWYgdmFsID09
IDEgYW5kIHNlbGYudHlwZSBpcyBCT09MOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHZhbCA9
IDINCiAgICArDQogICAgKyAgICAgICAgICAgIHJldHVybiBUUklfVE9fU1RSW3ZhbF0NCiAgICAr
DQogICAgKyAgICAgICAgaWYgc2VsZi5vcmlnX3R5cGU6ICAjIFNUUklORy9JTlQvSEVYDQogICAg
KyAgICAgICAgICAgIGZvciBkZWZhdWx0LCBjb25kIGluIHNlbGYuZGVmYXVsdHM6DQogICAgKyAg
ICAgICAgICAgICAgICBpZiBleHByX3ZhbHVlKGNvbmQpOg0KICAgICsgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBkZWZhdWx0LnN0cl92YWx1ZQ0KICAgICsNCiAgICArICAgICAgICByZXR1cm4g
IiINCiAgICArDQogICAgKyAgICBkZWYgX3dhcm5fc2VsZWN0X3Vuc2F0aXNmaWVkX2RlcHMoc2Vs
Zik6DQogICAgKyAgICAgICAgIyBIZWxwZXIgZm9yIHByaW50aW5nIGFuIGluZm9ybWF0aXZlIHdh
cm5pbmcgd2hlbiBhIHN5bWJvbCB3aXRoDQogICAgKyAgICAgICAgIyB1bnNhdGlzZmllZCBkaXJl
Y3QgZGVwZW5kZW5jaWVzIChkZXBlbmRlbmNpZXMgZnJvbSAnZGVwZW5kcyBvbicsIGlmcywNCiAg
ICArICAgICAgICAjIGFuZCBtZW51cykgaXMgc2VsZWN0ZWQgYnkgc29tZSBvdGhlciBzeW1ib2wu
IEFsc28gd2FybiBpZiBhIHN5bWJvbA0KICAgICsgICAgICAgICMgd2hvc2UgZGlyZWN0IGRlcGVu
ZGVuY2llcyBldmFsdWF0ZSB0byBtIGlzIHNlbGVjdGVkIHRvIHkuDQogICAgKw0KICAgICsgICAg
ICAgIG1zZyA9ICJ7fSBoYXMgZGlyZWN0IGRlcGVuZGVuY2llcyB7fSB3aXRoIHZhbHVlIHt9LCBi
dXQgaXMgIiBcDQogICAgKyAgICAgICAgICAgICAgImN1cnJlbnRseSBiZWluZyB7fS1zZWxlY3Rl
ZCBieSB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IiBcDQogICAgKyAgICAgICAgICAgICAgLmZvcm1h
dChfbmFtZV9hbmRfbG9jKHNlbGYpLCBleHByX3N0cihzZWxmLmRpcmVjdF9kZXApLA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgVFJJX1RPX1NUUltleHByX3ZhbHVlKHNlbGYuZGlyZWN0X2Rl
cCldLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgVFJJX1RPX1NUUltleHByX3ZhbHVlKHNl
bGYucmV2X2RlcCldKQ0KICAgICsNCiAgICArICAgICAgICAjIFRoZSByZXZlcnNlIGRlcGVuZGVu
Y2llcyBmcm9tIGVhY2ggc2VsZWN0IGFyZSBPUmVkIHRvZ2V0aGVyDQogICAgKyAgICAgICAgZm9y
IHNlbGVjdCBpbiBzcGxpdF9leHByKHNlbGYucmV2X2RlcCwgT1IpOg0KICAgICsgICAgICAgICAg
ICBpZiBleHByX3ZhbHVlKHNlbGVjdCkgPD0gZXhwcl92YWx1ZShzZWxmLmRpcmVjdF9kZXApOg0K
ICAgICsgICAgICAgICAgICAgICAgIyBPbmx5IGluY2x1ZGUgc2VsZWN0cyB0aGF0IGV4Y2VlZCB0
aGUgZGlyZWN0IGRlcGVuZGVuY2llcw0KICAgICsgICAgICAgICAgICAgICAgY29udGludWUNCiAg
ICArDQogICAgKyAgICAgICAgICAgICMgLSAnc2VsZWN0IEEgaWYgQicgdHVybnMgaW50byBBICYm
IEINCiAgICArICAgICAgICAgICAgIyAtICdzZWxlY3QgQScganVzdCB0dXJucyBpbnRvIEENCiAg
ICArICAgICAgICAgICAgIw0KICAgICsgICAgICAgICAgICAjIEluIGJvdGggY2FzZXMsIHdlIGNh
biBzcGxpdCBvbiBBTkQgYW5kIHBpY2sgdGhlIGZpcnN0IG9wZXJhbmQNCiAgICArICAgICAgICAg
ICAgc2VsZWN0aW5nX3N5bSA9IHNwbGl0X2V4cHIoc2VsZWN0LCBBTkQpWzBdDQogICAgKw0KICAg
ICsgICAgICAgICAgICBtc2cgKz0gIlxuIC0ge30sIHdpdGggdmFsdWUge30sIGRpcmVjdCBkZXBl
bmRlbmNpZXMge30gIiBcDQogICAgKyAgICAgICAgICAgICAgICAgICAiKHZhbHVlOiB7fSkiIFwN
CiAgICArICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoX25hbWVfYW5kX2xvYyhzZWxlY3Rpbmdf
c3ltKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW5nX3N5bS5zdHJf
dmFsdWUsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfc3RyKHNlbGVjdGlu
Z19zeW0uZGlyZWN0X2RlcCksDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSSV9U
T19TVFJbZXhwcl92YWx1ZShzZWxlY3Rpbmdfc3ltLmRpcmVjdF9kZXApXSkNCiAgICArDQogICAg
KyAgICAgICAgICAgIGlmIHNlbGVjdC5fX2NsYXNzX18gaXMgdHVwbGU6DQogICAgKyAgICAgICAg
ICAgICAgICBtc2cgKz0gIiwgYW5kIHNlbGVjdCBjb25kaXRpb24ge30gKHZhbHVlOiB7fSkiIFwN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGV4cHJfc3RyKHNlbGVjdFsyXSks
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUklfVE9fU1RSW2V4cHJfdmFs
dWUoc2VsZWN0WzJdKV0pDQogICAgKw0KICAgICsgICAgICAgIHNlbGYua2NvbmZpZy5fd2Fybiht
c2cpDQogICAgKw0KICAgICsNCiAgICArY2xhc3MgQ2hvaWNlKG9iamVjdCk6DQogICAgKyAgICAi
IiINCiAgICArICAgIFJlcHJlc2VudHMgYSBjaG9pY2Ugc3RhdGVtZW50Og0KICAgICsNCiAgICAr
ICAgICAgY2hvaWNlDQogICAgKyAgICAgICAgICAuLi4NCiAgICArICAgICAgZW5kY2hvaWNlDQog
ICAgKw0KICAgICsgICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBhdmFpbGFibGUgb24g
Q2hvaWNlIGluc3RhbmNlcy4gVGhleSBzaG91bGQgYmUNCiAgICArICAgIHRyZWF0ZWQgYXMgcmVh
ZC1vbmx5LCBhbmQgc29tZSBhcmUgaW1wbGVtZW50ZWQgdGhyb3VnaCBAcHJvcGVydHkgbWFnaWMg
KGJ1dA0KICAgICsgICAgYXJlIHN0aWxsIGVmZmljaWVudCB0byBhY2Nlc3MgZHVlIHRvIGludGVy
bmFsIGNhY2hpbmcpLg0KICAgICsNCiAgICArICAgIE5vdGU6IFByb21wdHMsIGhlbHAgdGV4dHMs
IGFuZCBsb2NhdGlvbnMgYXJlIHN0b3JlZCBpbiB0aGUgQ2hvaWNlJ3MNCiAgICArICAgIE1lbnVO
b2RlKHMpIHJhdGhlciB0aGFuIGluIHRoZSBDaG9pY2UgaXRzZWxmLiBDaGVjayB0aGUgTWVudU5v
ZGUgY2xhc3MgYW5kDQogICAgKyAgICB0aGUgQ2hvaWNlLm5vZGVzIGF0dHJpYnV0ZS4gVGhpcyBv
cmdhbml6YXRpb24gbWF0Y2hlcyB0aGUgQyB0b29scy4NCiAgICArDQogICAgKyAgICBuYW1lOg0K
ICAgICsgICAgICBUaGUgbmFtZSBvZiB0aGUgY2hvaWNlLCBlLmcuICJGT08iIGZvciAnY2hvaWNl
IEZPTycsIG9yIE5vbmUgaWYgdGhlDQogICAgKyAgICAgIENob2ljZSBoYXMgbm8gbmFtZS4NCiAg
ICArDQogICAgKyAgICB0eXBlOg0KICAgICsgICAgICBUaGUgdHlwZSBvZiB0aGUgY2hvaWNlLiBP
bmUgb2YgQk9PTCwgVFJJU1RBVEUsIFVOS05PV04uIFVOS05PV04gaXMgZm9yDQogICAgKyAgICAg
IGNob2ljZXMgZGVmaW5lZCB3aXRob3V0IGEgdHlwZSB3aGVyZSBub25lIG9mIHRoZSBjb250YWlu
ZWQgc3ltYm9scyBoYXZlIGENCiAgICArICAgICAgdHlwZSBlaXRoZXIgKG90aGVyd2lzZSB0aGUg
Y2hvaWNlIGluaGVyaXRzIHRoZSB0eXBlIG9mIHRoZSBmaXJzdCBzeW1ib2wNCiAgICArICAgICAg
ZGVmaW5lZCB3aXRoIGEgdHlwZSkuDQogICAgKw0KICAgICsgICAgICBXaGVuIHJ1bm5pbmcgd2l0
aG91dCBtb2R1bGVzIChDT05GSUdfTU9EVUxFUz1uKSwgVFJJU1RBVEUgY2hvaWNlcw0KICAgICsg
ICAgICBtYWdpY2FsbHkgY2hhbmdlIHR5cGUgdG8gQk9PTC4gVGhpcyBtYXRjaGVzIHRoZSBDIHRv
b2xzLCBhbmQgbWFrZXMgc2Vuc2UNCiAgICArICAgICAgZm9yIG1lbnVjb25maWctbGlrZSBmdW5j
dGlvbmFsaXR5Lg0KICAgICsNCiAgICArICAgIG9yaWdfdHlwZToNCiAgICArICAgICAgVGhlIHR5
cGUgYXMgZ2l2ZW4gaW4gdGhlIEtjb25maWcgZmlsZSwgd2l0aG91dCBhbnkgbWFnaWMgYXBwbGll
ZC4gVXNlZA0KICAgICsgICAgICB3aGVuIHByaW50aW5nIHRoZSBjaG9pY2UuDQogICAgKw0KICAg
ICsgICAgdHJpX3ZhbHVlOg0KICAgICsgICAgICBUaGUgdHJpc3RhdGUgdmFsdWUgKG1vZGUpIG9m
IHRoZSBjaG9pY2UuIEEgY2hvaWNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUNCiAgICArICAgICAg
bW9kZXM6DQogICAgKw0KICAgICsgICAgICAgIDAgKG4pIC0gVGhlIGNob2ljZSBpcyBkaXNhYmxl
ZCBhbmQgbm8gc3ltYm9scyBjYW4gYmUgc2VsZWN0ZWQuIEZvcg0KICAgICsgICAgICAgICAgICAg
ICAgdmlzaWJsZSBjaG9pY2VzLCB0aGlzIG1vZGUgaXMgb25seSBwb3NzaWJsZSBmb3IgY2hvaWNl
cyB3aXRoDQogICAgKyAgICAgICAgICAgICAgICB0aGUgJ29wdGlvbmFsJyBmbGFnIHNldCAoc2Vl
IGtjb25maWctbGFuZ3VhZ2UudHh0KS4NCiAgICArDQogICAgKyAgICAgICAgMSAobSkgLSBBbnkg
bnVtYmVyIG9mIGNob2ljZSBzeW1ib2xzIGNhbiBiZSBzZXQgdG8gbSwgdGhlIHJlc3Qgd2lsbA0K
ICAgICsgICAgICAgICAgICAgICAgYmUgbi4NCiAgICArDQogICAgKyAgICAgICAgMiAoeSkgLSBP
bmUgc3ltYm9sIHdpbGwgYmUgeSwgdGhlIHJlc3Qgbi4NCiAgICArDQogICAgKyAgICAgIE9ubHkg
dHJpc3RhdGUgY2hvaWNlcyBjYW4gYmUgaW4gbSBtb2RlLiBUaGUgdmlzaWJpbGl0eSBvZiB0aGUg
Y2hvaWNlIGlzDQogICAgKyAgICAgIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSBtb2RlLCBhbmQgdGhl
IG1vZGUgaW4gdHVybiBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUNCiAgICArICAgICAgdmlzaWJp
bGl0eSBvZiB0aGUgY2hvaWNlIHN5bWJvbHMuDQogICAgKw0KICAgICsgICAgICBUbyBjaGFuZ2Ug
dGhlIG1vZGUsIHVzZSBDaG9pY2Uuc2V0X3ZhbHVlKCkuDQogICAgKw0KICAgICsgICAgICBJbXBs
ZW1lbnRhdGlvbiBub3RlOg0KICAgICsgICAgICAgIFRoZSBDIHRvb2xzIGludGVybmFsbHkgcmVw
cmVzZW50IGNob2ljZXMgYXMgYSB0eXBlIG9mIHN5bWJvbCwgd2l0aA0KICAgICsgICAgICAgIHNw
ZWNpYWwtY2FzaW5nIGluIG1hbnkgY29kZSBwYXRocy4gVGhpcyBpcyB3aHkgdGhlcmUgaXMgYSBs
b3Qgb2YNCiAgICArICAgICAgICBzaW1pbGFyaXR5IHRvIFN5bWJvbC4gVGhlIHZhbHVlIChtb2Rl
KSBvZiBhIGNob2ljZSBpcyByZWFsbHkganVzdCBhDQogICAgKyAgICAgICAgbm9ybWFsIHN5bWJv
bCB2YWx1ZSwgYW5kIGFuIGltcGxpY2l0IHJldmVyc2UgZGVwZW5kZW5jeSBmb3JjZXMgaXRzDQog
ICAgKyAgICAgICAgbG93ZXIgYm91bmQgdG8gbSBmb3IgdmlzaWJsZSBub24tb3B0aW9uYWwgY2hv
aWNlcyAodGhlIHJldmVyc2UNCiAgICArICAgICAgICBkZXBlbmRlbmN5IGlzICdtICYmIDx2aXNp
YmlsaXR5PicpLg0KICAgICsNCiAgICArICAgICAgICBTeW1ib2xzIHdpdGhpbiBjaG9pY2VzIGdl
dCB0aGUgY2hvaWNlIHByb3BhZ2F0ZWQgYXMgYSBkZXBlbmRlbmN5IHRvDQogICAgKyAgICAgICAg
dGhlaXIgcHJvcGVydGllcy4gVGhpcyB0dXJucyB0aGUgbW9kZSBvZiB0aGUgY2hvaWNlIGludG8g
YW4gdXBwZXIgYm91bmQNCiAgICArICAgICAgICBvbiBlLmcuIHRoZSB2aXNpYmlsaXR5IG9mIGNo
b2ljZSBzeW1ib2xzLCBhbmQgZXhwbGFpbnMgdGhlIGdvdGNoYQ0KICAgICsgICAgICAgIHJlbGF0
ZWQgdG8gcHJpbnRpbmcgY2hvaWNlIHN5bWJvbHMgbWVudGlvbmVkIGluIHRoZSBtb2R1bGUgZG9j
c3RyaW5nLg0KICAgICsNCiAgICArICAgICAgICBLY29uZmlnbGliIHVzZXMgYSBzZXBhcmF0ZSBD
aG9pY2UgY2xhc3Mgb25seSBiZWNhdXNlIGl0IG1ha2VzIHRoZSBjb2RlDQogICAgKyAgICAgICAg
YW5kIGludGVyZmFjZSBsZXNzIGNvbmZ1c2luZyAoZXNwZWNpYWxseSBpbiBhIHVzZXItZmFjaW5n
IGludGVyZmFjZSkuDQogICAgKyAgICAgICAgQ29ycmVzcG9uZGluZyBhdHRyaWJ1dGVzIGhhdmUg
dGhlIHNhbWUgbmFtZSBpbiB0aGUgU3ltYm9sIGFuZCBDaG9pY2UNCiAgICArICAgICAgICBjbGFz
c2VzLCBmb3IgY29uc2lzdGVuY3kgYW5kIGNvbXBhdGliaWxpdHkuDQogICAgKw0KICAgICsgICAg
YXNzaWduYWJsZToNCiAgICArICAgICAgU2VlIHRoZSBzeW1ib2wgY2xhc3MgZG9jdW1lbnRhdGlv
bi4gR2l2ZXMgdGhlIGFzc2lnbmFibGUgdmFsdWVzIChtb2RlcykuDQogICAgKw0KICAgICsgICAg
dmlzaWJpbGl0eToNCiAgICArICAgICAgU2VlIHRoZSBTeW1ib2wgY2xhc3MgZG9jdW1lbnRhdGlv
bi4gQWN0cyBvbiB0aGUgdmFsdWUgKG1vZGUpLg0KICAgICsNCiAgICArICAgIHNlbGVjdGlvbjoN
CiAgICArICAgICAgVGhlIFN5bWJvbCBpbnN0YW5jZSBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVk
IHN5bWJvbC4gTm9uZSBpZiB0aGUgQ2hvaWNlDQogICAgKyAgICAgIGlzIG5vdCBpbiB5IG1vZGUg
b3IgaGFzIG5vIHNlbGVjdGVkIHN5bWJvbCAoZHVlIHRvIHVuc2F0aXNmaWVkDQogICAgKyAgICAg
IGRlcGVuZGVuY2llcyBvbiBjaG9pY2Ugc3ltYm9scykuDQogICAgKw0KICAgICsgICAgICBXQVJO
SU5HOiBEbyBub3QgYXNzaWduIGRpcmVjdGx5IHRvIHRoaXMuIEl0IHdpbGwgYnJlYWsgdGhpbmdz
LiBDYWxsDQogICAgKyAgICAgIHN5bS5zZXRfdmFsdWUoMikgb24gdGhlIGNob2ljZSBzeW1ib2wg
eW91IHdhbnQgdG8gc2VsZWN0IGluc3RlYWQuDQogICAgKw0KICAgICsgICAgdXNlcl92YWx1ZToN
CiAgICArICAgICAgVGhlIHZhbHVlIChtb2RlKSBzZWxlY3RlZCBieSB0aGUgdXNlciB0aHJvdWdo
IENob2ljZS5zZXRfdmFsdWUoKS4gRWl0aGVyDQogICAgKyAgICAgIDAsIDEsIG9yIDIsIG9yIE5v
bmUgaWYgdGhlIHVzZXIgaGFzbid0IHNlbGVjdGVkIGEgbW9kZS4gU2VlDQogICAgKyAgICAgIFN5
bWJvbC51c2VyX3ZhbHVlLg0KICAgICsNCiAgICArICAgICAgV0FSTklORzogRG8gbm90IGFzc2ln
biBkaXJlY3RseSB0byB0aGlzLiBJdCB3aWxsIGJyZWFrIHRoaW5ncy4gVXNlDQogICAgKyAgICAg
IENob2ljZS5zZXRfdmFsdWUoKSBpbnN0ZWFkLg0KICAgICsNCiAgICArICAgIHVzZXJfc2VsZWN0
aW9uOg0KICAgICsgICAgICBUaGUgc3ltYm9sIHNlbGVjdGVkIGJ5IHRoZSB1c2VyIChieSBzZXR0
aW5nIGl0IHRvIHkpLiBJZ25vcmVkIGlmIHRoZQ0KICAgICsgICAgICBjaG9pY2UgaXMgbm90IGlu
IHkgbW9kZSwgYnV0IHN0aWxsIHJlbWVtYmVyZWQgc28gdGhhdCB0aGUgY2hvaWNlICJzbmFwcw0K
ICAgICsgICAgICBiYWNrIiB0byB0aGUgdXNlciBzZWxlY3Rpb24gaWYgdGhlIG1vZGUgaXMgY2hh
bmdlZCBiYWNrIHRvIHkuIFRoaXMgbWlnaHQNCiAgICArICAgICAgZGlmZmVyIGZyb20gJ3NlbGVj
dGlvbicgZHVlIHRvIHVuc2F0aXNmaWVkIGRlcGVuZGVuY2llcy4NCiAgICArDQogICAgKyAgICAg
IFdBUk5JTkc6IERvIG5vdCBhc3NpZ24gZGlyZWN0bHkgdG8gdGhpcy4gSXQgd2lsbCBicmVhayB0
aGluZ3MuIENhbGwNCiAgICArICAgICAgc3ltLnNldF92YWx1ZSgyKSBvbiB0aGUgY2hvaWNlIHN5
bWJvbCB0byBiZSBzZWxlY3RlZCBpbnN0ZWFkLg0KICAgICsNCiAgICArICAgIHN5bXM6DQogICAg
KyAgICAgIExpc3Qgb2Ygc3ltYm9scyBjb250YWluZWQgaW4gdGhlIGNob2ljZS4NCiAgICArDQog
ICAgKyAgICAgIE9ic2N1cmUgZ290Y2hhOiBJZiBhIHN5bWJvbCBkZXBlbmRzIG9uIHRoZSBwcmV2
aW91cyBzeW1ib2wgd2l0aGluIGENCiAgICArICAgICAgY2hvaWNlIHNvIHRoYXQgYW4gaW1wbGlj
aXQgbWVudSBpcyBjcmVhdGVkLCBpdCB3b24ndCBiZSBhIGNob2ljZSBzeW1ib2wsDQogICAgKyAg
ICAgIGFuZCB3b24ndCBiZSBpbmNsdWRlZCBpbiAnc3ltcycuDQogICAgKw0KICAgICsgICAgbm9k
ZXM6DQogICAgKyAgICAgIEEgbGlzdCBvZiBNZW51Tm9kZXMgZm9yIHRoaXMgY2hvaWNlLiBJbiBw
cmFjdGljZSwgdGhlIGxpc3Qgd2lsbCBwcm9iYWJseQ0KICAgICsgICAgICBhbHdheXMgY29udGFp
biBhIHNpbmdsZSBNZW51Tm9kZSwgYnV0IGl0IGlzIHBvc3NpYmxlIHRvIGdpdmUgYSBjaG9pY2Ug
YQ0KICAgICsgICAgICBuYW1lIGFuZCBkZWZpbmUgaXQgaW4gbXVsdGlwbGUgbG9jYXRpb25zLg0K
ICAgICsNCiAgICArICAgIGRlZmF1bHRzOg0KICAgICsgICAgICBMaXN0IG9mIChzeW1ib2wsIGNv
bmQpIHR1cGxlcyBmb3IgdGhlIGNob2ljZSdzICdkZWZhdWx0cycgcHJvcGVydGllcy4gRm9yDQog
ICAgKyAgICAgIGV4YW1wbGUsICdkZWZhdWx0IEEgaWYgQiAmJiBDJyBpcyByZXByZXNlbnRlZCBh
cyAoQSwgKEFORCwgQiwgQykpLiBJZg0KICAgICsgICAgICB0aGVyZSBpcyBubyBjb25kaXRpb24s
ICdjb25kJyBpcyBzZWxmLmtjb25maWcueS4NCiAgICArDQogICAgKyAgICAgIE5vdGUgdGhhdCAn
ZGVwZW5kcyBvbicgYW5kIHBhcmVudCBkZXBlbmRlbmNpZXMgYXJlIHByb3BhZ2F0ZWQgdG8NCiAg
ICArICAgICAgJ2RlZmF1bHQnIGNvbmRpdGlvbnMuDQogICAgKw0KICAgICsgICAgb3JpZ19kZWZh
dWx0czoNCiAgICArICAgICAgU2VlIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBvbiB0aGUg
TWVudU5vZGUgY2xhc3MuDQogICAgKw0KICAgICsgICAgZGlyZWN0X2RlcDoNCiAgICArICAgICAg
U2VlIFN5bWJvbC5kaXJlY3RfZGVwLg0KICAgICsNCiAgICArICAgIHJlZmVyZW5jZWQ6DQogICAg
KyAgICAgIEEgc2V0KCkgd2l0aCBhbGwgc3ltYm9scyByZWZlcmVuY2VkIGluIHRoZSBwcm9wZXJ0
aWVzIGFuZCBwcm9wZXJ0eQ0KICAgICsgICAgICBjb25kaXRpb25zIG9mIHRoZSBjaG9pY2UuDQog
ICAgKw0KICAgICsgICAgICBBbHNvIGluY2x1ZGVzIGRlcGVuZGVuY2llcyBmcm9tIHN1cnJvdW5k
aW5nIG1lbnVzIGFuZCBpZnMsIGJlY2F1c2UgdGhvc2UNCiAgICArICAgICAgZ2V0IHByb3BhZ2F0
ZWQgdG8gdGhlIGNob2ljZSAoc2VlIHRoZSAnSW50cm8gdG8gc3ltYm9sIHZhbHVlcycgc2VjdGlv
biBpbg0KICAgICsgICAgICB0aGUgbW9kdWxlIGRvY3N0cmluZykuDQogICAgKw0KICAgICsgICAg
aXNfb3B0aW9uYWw6DQogICAgKyAgICAgIFRydWUgaWYgdGhlIGNob2ljZSBoYXMgdGhlICdvcHRp
b25hbCcgZmxhZyBzZXQgb24gaXQgYW5kIGNhbiBiZSBpbg0KICAgICsgICAgICBuIG1vZGUuDQog
ICAgKw0KICAgICsgICAga2NvbmZpZzoNCiAgICArICAgICAgVGhlIEtjb25maWcgaW5zdGFuY2Ug
dGhpcyBjaG9pY2UgaXMgZnJvbS4NCiAgICArICAgICIiIg0KICAgICsgICAgX19zbG90c19fID0g
KA0KICAgICsgICAgICAgICJfY2FjaGVkX2Fzc2lnbmFibGUiLA0KICAgICsgICAgICAgICJfY2Fj
aGVkX3NlbGVjdGlvbiIsDQogICAgKyAgICAgICAgIl9jYWNoZWRfdmlzIiwNCiAgICArICAgICAg
ICAiX2RlcGVuZGVudHMiLA0KICAgICsgICAgICAgICJfdmlzaXRlZCIsDQogICAgKyAgICAgICAg
Il93YXNfc2V0IiwNCiAgICArICAgICAgICAiZGVmYXVsdHMiLA0KICAgICsgICAgICAgICJkaXJl
Y3RfZGVwIiwNCiAgICArICAgICAgICAiaXNfY29uc3RhbnQiLA0KICAgICsgICAgICAgICJpc19v
cHRpb25hbCIsDQogICAgKyAgICAgICAgImtjb25maWciLA0KICAgICsgICAgICAgICJuYW1lIiwN
CiAgICArICAgICAgICAibm9kZXMiLA0KICAgICsgICAgICAgICJvcmlnX3R5cGUiLA0KICAgICsg
ICAgICAgICJzeW1zIiwNCiAgICArICAgICAgICAidXNlcl9zZWxlY3Rpb24iLA0KICAgICsgICAg
ICAgICJ1c2VyX3ZhbHVlIiwNCiAgICArICAgICkNCiAgICArDQogICAgKyAgICAjDQogICAgKyAg
ICAjIFB1YmxpYyBpbnRlcmZhY2UNCiAgICArICAgICMNCiAgICArDQogICAgKyAgICBAcHJvcGVy
dHkNCiAgICArICAgIGRlZiB0eXBlKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAg
ICAgIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGNob2ljZS4gU2VlIFN5bWJvbC50eXBlLg0KICAg
ICsgICAgICAgICIiIg0KICAgICsgICAgICAgIGlmIHNlbGYub3JpZ190eXBlIGlzIFRSSVNUQVRF
IGFuZCBub3Qgc2VsZi5rY29uZmlnLm1vZHVsZXMudHJpX3ZhbHVlOg0KICAgICsgICAgICAgICAg
ICByZXR1cm4gQk9PTA0KICAgICsgICAgICAgIHJldHVybiBzZWxmLm9yaWdfdHlwZQ0KICAgICsN
CiAgICArICAgIEBwcm9wZXJ0eQ0KICAgICsgICAgZGVmIHN0cl92YWx1ZShzZWxmKToNCiAgICAr
ICAgICAgICAiIiINCiAgICArICAgICAgICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRpb24uDQog
ICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIFRSSV9UT19TVFJbc2VsZi50cmlf
dmFsdWVdDQogICAgKw0KICAgICsgICAgQHByb3BlcnR5DQogICAgKyAgICBkZWYgdHJpX3ZhbHVl
KHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIFNlZSB0aGUgY2xhc3MgZG9j
dW1lbnRhdGlvbi4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICAjIFRoaXMgZW11bGF0
ZXMgYSByZXZlcnNlIGRlcGVuZGVuY3kgb2YgJ20gJiYgdmlzaWJpbGl0eScgZm9yDQogICAgKyAg
ICAgICAgIyBub24tb3B0aW9uYWwgY2hvaWNlcywgd2hpY2ggaXMgaG93IHRoZSBDIGltcGxlbWVu
dGF0aW9uIGRvZXMgaXQNCiAgICArDQogICAgKyAgICAgICAgdmFsID0gMCBpZiBzZWxmLmlzX29w
dGlvbmFsIGVsc2UgMQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLnVzZXJfdmFsdWUgaXMg
bm90IE5vbmU6DQogICAgKyAgICAgICAgICAgIHZhbCA9IG1heCh2YWwsIHNlbGYudXNlcl92YWx1
ZSkNCiAgICArDQogICAgKyAgICAgICAgIyBXYXJuaW5nOiBTZWUgU3ltYm9sLl9yZWNfaW52YWxp
ZGF0ZSgpLCBhbmQgbm90ZSB0aGF0IHRoaXMgaXMgYSBoaWRkZW4NCiAgICArICAgICAgICAjIGZ1
bmN0aW9uIGNhbGwgKHByb3BlcnR5IG1hZ2ljKQ0KICAgICsgICAgICAgIHZhbCA9IG1pbih2YWws
IHNlbGYudmlzaWJpbGl0eSkNCiAgICArDQogICAgKyAgICAgICAgIyBQcm9tb3RlIG0gdG8geSBm
b3IgYm9vbGVhbiBjaG9pY2VzDQogICAgKyAgICAgICAgcmV0dXJuIDIgaWYgdmFsID09IDEgYW5k
IHNlbGYudHlwZSBpcyBCT09MIGVsc2UgdmFsDQogICAgKw0KICAgICsgICAgQHByb3BlcnR5DQog
ICAgKyAgICBkZWYgYXNzaWduYWJsZShzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAg
ICAgICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRpb24uDQogICAgKyAgICAgICAgIiIiDQogICAg
KyAgICAgICAgaWYgc2VsZi5fY2FjaGVkX2Fzc2lnbmFibGUgaXMgTm9uZToNCiAgICArICAgICAg
ICAgICAgc2VsZi5fY2FjaGVkX2Fzc2lnbmFibGUgPSBzZWxmLl9hc3NpZ25hYmxlKCkNCiAgICAr
ICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX2Fzc2lnbmFibGUNCiAgICArDQogICAgKyAgICBA
cHJvcGVydHkNCiAgICArICAgIGRlZiB2aXNpYmlsaXR5KHNlbGYpOg0KICAgICsgICAgICAgICIi
Ig0KICAgICsgICAgICAgIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICArICAgICAg
ICAiIiINCiAgICArICAgICAgICBpZiBzZWxmLl9jYWNoZWRfdmlzIGlzIE5vbmU6DQogICAgKyAg
ICAgICAgICAgIHNlbGYuX2NhY2hlZF92aXMgPSBfdmlzaWJpbGl0eShzZWxmKQ0KICAgICsgICAg
ICAgIHJldHVybiBzZWxmLl9jYWNoZWRfdmlzDQogICAgKw0KICAgICsgICAgQHByb3BlcnR5DQog
ICAgKyAgICBkZWYgc2VsZWN0aW9uKHNlbGYpOg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAg
ICAgIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICArICAgICAgICAiIiINCiAgICAr
ICAgICAgICBpZiBzZWxmLl9jYWNoZWRfc2VsZWN0aW9uIGlzIF9OT19DQUNIRURfU0VMRUNUSU9O
Og0KICAgICsgICAgICAgICAgICBzZWxmLl9jYWNoZWRfc2VsZWN0aW9uID0gc2VsZi5fc2VsZWN0
aW9uKCkNCiAgICArICAgICAgICByZXR1cm4gc2VsZi5fY2FjaGVkX3NlbGVjdGlvbg0KICAgICsN
CiAgICArICAgIGRlZiBzZXRfdmFsdWUoc2VsZiwgdmFsdWUpOg0KICAgICsgICAgICAgICIiIg0K
ICAgICsgICAgICAgIFNldHMgdGhlIHVzZXIgdmFsdWUgKG1vZGUpIG9mIHRoZSBjaG9pY2UuIExp
a2UgZm9yIFN5bWJvbC5zZXRfdmFsdWUoKSwNCiAgICArICAgICAgICB0aGUgdmlzaWJpbGl0eSBt
aWdodCB0cnVuY2F0ZSB0aGUgdmFsdWUuIENob2ljZXMgd2l0aG91dCB0aGUgJ29wdGlvbmFsJw0K
ICAgICsgICAgICAgIGF0dHJpYnV0ZSAoaXNfb3B0aW9uYWwpIGNhbiBuZXZlciBiZSBpbiBuIG1v
ZGUsIGJ1dCAwLyJuIiBpcyBzdGlsbA0KICAgICsgICAgICAgIGFjY2VwdGVkIHNpbmNlIGl0J3Mg
bm90IGEgbWFsZm9ybWVkIHZhbHVlICh0aG91Z2ggaXQgd2lsbCBoYXZlIG5vDQogICAgKyAgICAg
ICAgZWZmZWN0KS4NCiAgICArDQogICAgKyAgICAgICAgUmV0dXJucyBUcnVlIGlmIHRoZSB2YWx1
ZSBpcyB2YWxpZCBmb3IgdGhlIHR5cGUgb2YgdGhlIGNob2ljZSwgYW5kDQogICAgKyAgICAgICAg
RmFsc2Ugb3RoZXJ3aXNlLiBUaGlzIG9ubHkgbG9va3MgYXQgdGhlIGZvcm0gb2YgdGhlIHZhbHVl
LiBDaGVjayB0aGUNCiAgICArICAgICAgICBDaG9pY2UuYXNzaWduYWJsZSBhdHRyaWJ1dGUgdG8g
c2VlIHdoYXQgdmFsdWVzIGFyZSBjdXJyZW50bHkgaW4gcmFuZ2UNCiAgICArICAgICAgICBhbmQg
d291bGQgYWN0dWFsbHkgYmUgcmVmbGVjdGVkIGluIHRoZSBtb2RlIG9mIHRoZSBjaG9pY2UuDQog
ICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgaWYgdmFsdWUgaW4gU1RSX1RPX1RSSToNCiAg
ICArICAgICAgICAgICAgdmFsdWUgPSBTVFJfVE9fVFJJW3ZhbHVlXQ0KICAgICsNCiAgICArICAg
ICAgICBpZiB2YWx1ZSA9PSBzZWxmLnVzZXJfdmFsdWU6DQogICAgKyAgICAgICAgICAgICMgV2Ug
a25vdyB0aGUgdmFsdWUgbXVzdCBiZSB2YWxpZCBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5IHNldA0K
ICAgICsgICAgICAgICAgICAjIHByZXZpb3VzbHkNCiAgICArICAgICAgICAgICAgc2VsZi5fd2Fz
X3NldCA9IFRydWUNCiAgICArICAgICAgICAgICAgcmV0dXJuIFRydWUNCiAgICArDQogICAgKyAg
ICAgICAgaWYgbm90IChzZWxmLm9yaWdfdHlwZSBpcyBCT09MICAgICBhbmQgdmFsdWUgaW4gKDIs
IDApIG9yDQogICAgKyAgICAgICAgICAgICAgICBzZWxmLm9yaWdfdHlwZSBpcyBUUklTVEFURSBh
bmQgdmFsdWUgaW4gVFJJX1RPX1NUUik6DQogICAgKw0KICAgICsgICAgICAgICAgICAjIERpc3Bs
YXkgdHJpc3RhdGUgdmFsdWVzIGFzIG4sIG0sIHkgaW4gdGhlIHdhcm5pbmcNCiAgICArICAgICAg
ICAgICAgc2VsZi5rY29uZmlnLl93YXJuKA0KICAgICsgICAgICAgICAgICAgICAgInRoZSB2YWx1
ZSB7fSBpcyBpbnZhbGlkIGZvciB7fSwgd2hpY2ggaGFzIHR5cGUge30gLS0gIg0KICAgICsgICAg
ICAgICAgICAgICAgImFzc2lnbm1lbnQgaWdub3JlZCINCiAgICArICAgICAgICAgICAgICAgIC5m
b3JtYXQoVFJJX1RPX1NUUlt2YWx1ZV0gaWYgdmFsdWUgaW4gVFJJX1RPX1NUUiBlbHNlDQogICAg
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJ3t9JyIuZm9ybWF0KHZhbHVlKSwNCiAgICAr
ICAgICAgICAgICAgICAgICAgICAgICAgX25hbWVfYW5kX2xvYyhzZWxmKSwgVFlQRV9UT19TVFJb
c2VsZi5vcmlnX3R5cGVdKSkNCiAgICArDQogICAgKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0K
ICAgICsNCiAgICArICAgICAgICBzZWxmLnVzZXJfdmFsdWUgPSB2YWx1ZQ0KICAgICsgICAgICAg
IHNlbGYuX3dhc19zZXQgPSBUcnVlDQogICAgKyAgICAgICAgc2VsZi5fcmVjX2ludmFsaWRhdGUo
KQ0KICAgICsNCiAgICArICAgICAgICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArICAgIGRlZiB1
bnNldF92YWx1ZShzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBSZXNldHMg
dGhlIHVzZXIgdmFsdWUgKG1vZGUpIGFuZCB1c2VyIHNlbGVjdGlvbiBvZiB0aGUgQ2hvaWNlLCBh
cyBpZg0KICAgICsgICAgICAgIHRoZSB1c2VyIGhhZCBuZXZlciB0b3VjaGVkIHRoZSBtb2RlIG9y
IGFueSBvZiB0aGUgY2hvaWNlIHN5bWJvbHMuDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAg
ICAgaWYgc2VsZi51c2VyX3ZhbHVlIGlzIG5vdCBOb25lIG9yIHNlbGYudXNlcl9zZWxlY3Rpb246
DQogICAgKyAgICAgICAgICAgIHNlbGYudXNlcl92YWx1ZSA9IHNlbGYudXNlcl9zZWxlY3Rpb24g
PSBOb25lDQogICAgKyAgICAgICAgICAgIHNlbGYuX3JlY19pbnZhbGlkYXRlKCkNCiAgICArDQog
ICAgKyAgICBAcHJvcGVydHkNCiAgICArICAgIGRlZiByZWZlcmVuY2VkKHNlbGYpOg0KICAgICsg
ICAgICAgICIiIg0KICAgICsgICAgICAgIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAg
ICArICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4ge2l0ZW0gZm9yIG5vZGUgaW4gc2Vs
Zi5ub2RlcyBmb3IgaXRlbSBpbiBub2RlLnJlZmVyZW5jZWR9DQogICAgKw0KICAgICsgICAgQHBy
b3BlcnR5DQogICAgKyAgICBkZWYgb3JpZ19kZWZhdWx0cyhzZWxmKToNCiAgICArICAgICAgICAi
IiINCiAgICArICAgICAgICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRpb24uDQogICAgKyAgICAg
ICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIFtkIGZvciBub2RlIGluIHNlbGYubm9kZXMgZm9y
IGQgaW4gbm9kZS5vcmlnX2RlZmF1bHRzXQ0KICAgICsNCiAgICArICAgIGRlZiBfX3JlcHJfXyhz
ZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIHdp
dGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNob2ljZSB3aGVuIGl0IGlzIGV2YWx1YXRlZA0KICAg
ICsgICAgICAgIG9uIGUuZy4gdGhlIGludGVyYWN0aXZlIFB5dGhvbiBwcm9tcHQuDQogICAgKyAg
ICAgICAgIiIiDQogICAgKyAgICAgICAgZmllbGRzID0gWyJjaG9pY2UgIiArIHNlbGYubmFtZSBp
ZiBzZWxmLm5hbWUgZWxzZSAiY2hvaWNlIiwNCiAgICArICAgICAgICAgICAgICAgICAgVFlQRV9U
T19TVFJbc2VsZi50eXBlXV0NCiAgICArICAgICAgICBhZGQgPSBmaWVsZHMuYXBwZW5kDQogICAg
Kw0KICAgICsgICAgICAgIGZvciBub2RlIGluIHNlbGYubm9kZXM6DQogICAgKyAgICAgICAgICAg
IGlmIG5vZGUucHJvbXB0Og0KICAgICsgICAgICAgICAgICAgICAgYWRkKCcie30iJy5mb3JtYXQo
bm9kZS5wcm9tcHRbMF0pKQ0KICAgICsNCiAgICArICAgICAgICBhZGQoIm1vZGUgIiArIHNlbGYu
c3RyX3ZhbHVlKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLnVzZXJfdmFsdWUgaXMgbm90
IE5vbmU6DQogICAgKyAgICAgICAgICAgIGFkZCgndXNlciBtb2RlIHt9Jy5mb3JtYXQoVFJJX1RP
X1NUUltzZWxmLnVzZXJfdmFsdWVdKSkNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5zZWxl
Y3Rpb246DQogICAgKyAgICAgICAgICAgIGFkZCgie30gc2VsZWN0ZWQiLmZvcm1hdChzZWxmLnNl
bGVjdGlvbi5uYW1lKSkNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi51c2VyX3NlbGVjdGlv
bjoNCiAgICArICAgICAgICAgICAgdXNlcl9zZWxfc3RyID0gInt9IHNlbGVjdGVkIGJ5IHVzZXIi
IFwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLnVzZXJfc2Vs
ZWN0aW9uLm5hbWUpDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBzZWxmLnNlbGVjdGlvbiBp
cyBub3Qgc2VsZi51c2VyX3NlbGVjdGlvbjoNCiAgICArICAgICAgICAgICAgICAgIHVzZXJfc2Vs
X3N0ciArPSAiIChvdmVycmlkZGVuKSINCiAgICArDQogICAgKyAgICAgICAgICAgIGFkZCh1c2Vy
X3NlbF9zdHIpDQogICAgKw0KICAgICsgICAgICAgIGFkZCgidmlzaWJpbGl0eSAiICsgVFJJX1RP
X1NUUltzZWxmLnZpc2liaWxpdHldKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLmlzX29w
dGlvbmFsOg0KICAgICsgICAgICAgICAgICBhZGQoIm9wdGlvbmFsIikNCiAgICArDQogICAgKyAg
ICAgICAgZm9yIG5vZGUgaW4gc2VsZi5ub2RlczoNCiAgICArICAgICAgICAgICAgYWRkKCJ7fTp7
fSIuZm9ybWF0KG5vZGUuZmlsZW5hbWUsIG5vZGUubGluZW5yKSkNCiAgICArDQogICAgKyAgICAg
ICAgcmV0dXJuICI8e30+Ii5mb3JtYXQoIiwgIi5qb2luKGZpZWxkcykpDQogICAgKw0KICAgICsg
ICAgZGVmIF9fc3RyX18oc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgUmV0
dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hvaWNlIHdoZW4gaXQgaXMgcHJp
bnRlZC4NCiAgICArICAgICAgICBNYXRjaGVzIHRoZSBLY29uZmlnIGZvcm1hdCAodGhvdWdoIHdp
dGhvdXQgdGhlIGNvbnRhaW5lZCBjaG9pY2UNCiAgICArICAgICAgICBzeW1ib2xzKSwgd2l0aCBh
bnkgcGFyZW50IGRlcGVuZGVuY2llcyBwcm9wYWdhdGVkIHRvIHRoZSAnZGVwZW5kcyBvbicNCiAg
ICArICAgICAgICBjb25kaXRpb24uDQogICAgKw0KICAgICsgICAgICAgIFRoZSByZXR1cm5lZCBz
dHJpbmcgZG9lcyBub3QgZW5kIGluIGEgbmV3bGluZS4NCiAgICArDQogICAgKyAgICAgICAgU2Vl
IFN5bWJvbC5fX3N0cl9fKCkgYXMgd2VsbC4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAg
ICByZXR1cm4gc2VsZi5jdXN0b21fc3RyKHN0YW5kYXJkX3NjX2V4cHJfc3RyKQ0KICAgICsNCiAg
ICArICAgIGRlZiBjdXN0b21fc3RyKHNlbGYsIHNjX2V4cHJfc3RyX2ZuKToNCiAgICArICAgICAg
ICAiIiINCiAgICArICAgICAgICBXb3JrcyBsaWtlIENob2ljZS5fX3N0cl9fKCksIGJ1dCBhbGxv
d3MgYSBjdXN0b20gZm9ybWF0IHRvIGJlIHVzZWQgZm9yDQogICAgKyAgICAgICAgYWxsIHN5bWJv
bC9jaG9pY2UgcmVmZXJlbmNlcy4gU2VlIGV4cHJfc3RyKCkuDQogICAgKyAgICAgICAgIiIiDQog
ICAgKyAgICAgICAgcmV0dXJuICJcblxuIi5qb2luKG5vZGUuY3VzdG9tX3N0cihzY19leHByX3N0
cl9mbikNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gc2VsZi5u
b2RlcykNCiAgICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFByaXZhdGUgbWV0aG9kcw0KICAg
ICsgICAgIw0KICAgICsNCiAgICArICAgIGRlZiBfX2luaXRfXyhzZWxmKToNCiAgICArICAgICAg
ICAiIiINCiAgICArICAgICAgICBDaG9pY2UgY29uc3RydWN0b3IgLS0gbm90IGludGVuZGVkIHRv
IGJlIGNhbGxlZCBkaXJlY3RseSBieSBLY29uZmlnbGliDQogICAgKyAgICAgICAgY2xpZW50cy4N
CiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICAjIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIGFs
d2F5cyBzZXQgb24gdGhlIGluc3RhbmNlIGZyb20gb3V0c2lkZSBhbmQNCiAgICArICAgICAgICAj
IGRvbid0IG5lZWQgZGVmYXVsdHM6DQogICAgKyAgICAgICAgIyAgIGRpcmVjdF9kZXANCiAgICAr
ICAgICAgICAjICAga2NvbmZpZw0KICAgICsNCiAgICArICAgICAgICAjIC0gVU5LTk9XTiA9PSAw
DQogICAgKyAgICAgICAgIyAtIF92aXNpdGVkIGlzIHVzZWQgZHVyaW5nIGRlcC4gbG9vcCBkZXRl
Y3Rpb24NCiAgICArICAgICAgICBzZWxmLm9yaWdfdHlwZSA9IHNlbGYuX3Zpc2l0ZWQgPSAwDQog
ICAgKw0KICAgICsgICAgICAgIHNlbGYubm9kZXMgPSBbXQ0KICAgICsNCiAgICArICAgICAgICBz
ZWxmLnN5bXMgPSBbXQ0KICAgICsgICAgICAgIHNlbGYuZGVmYXVsdHMgPSBbXQ0KICAgICsNCiAg
ICArICAgICAgICBzZWxmLm5hbWUgPSBcDQogICAgKyAgICAgICAgc2VsZi51c2VyX3ZhbHVlID0g
c2VsZi51c2VyX3NlbGVjdGlvbiA9IFwNCiAgICArICAgICAgICBzZWxmLl9jYWNoZWRfdmlzID0g
c2VsZi5fY2FjaGVkX2Fzc2lnbmFibGUgPSBOb25lDQogICAgKw0KICAgICsgICAgICAgIHNlbGYu
X2NhY2hlZF9zZWxlY3Rpb24gPSBfTk9fQ0FDSEVEX1NFTEVDVElPTg0KICAgICsNCiAgICArICAg
ICAgICAjIGlzX2NvbnN0YW50IGlzIGNoZWNrZWQgYnkgX21ha2VfZGVwZW5kX29uKCkuIEp1c3Qg
c2V0IGl0IHRvIGF2b2lkDQogICAgKyAgICAgICAgIyBoYXZpbmcgdG8gc3BlY2lhbC1jYXNlIGNo
b2ljZXMuDQogICAgKyAgICAgICAgc2VsZi5pc19jb25zdGFudCA9IHNlbGYuaXNfb3B0aW9uYWwg
PSBGYWxzZQ0KICAgICsNCiAgICArICAgICAgICAjIFNlZSBLY29uZmlnLl9idWlsZF9kZXAoKQ0K
ICAgICsgICAgICAgIHNlbGYuX2RlcGVuZGVudHMgPSBzZXQoKQ0KICAgICsNCiAgICArICAgIGRl
ZiBfYXNzaWduYWJsZShzZWxmKToNCiAgICArICAgICAgICAjIFdvcmtlciBmdW5jdGlvbiBmb3Ig
dGhlICdhc3NpZ25hYmxlJyBhdHRyaWJ1dGUNCiAgICArDQogICAgKyAgICAgICAgIyBXYXJuaW5n
OiBTZWUgU3ltYm9sLl9yZWNfaW52YWxpZGF0ZSgpLCBhbmQgbm90ZSB0aGF0IHRoaXMgaXMgYSBo
aWRkZW4NCiAgICArICAgICAgICAjIGZ1bmN0aW9uIGNhbGwgKHByb3BlcnR5IG1hZ2ljKQ0KICAg
ICsgICAgICAgIHZpcyA9IHNlbGYudmlzaWJpbGl0eQ0KICAgICsNCiAgICArICAgICAgICBpZiBu
b3QgdmlzOg0KICAgICsgICAgICAgICAgICByZXR1cm4gKCkNCiAgICArDQogICAgKyAgICAgICAg
aWYgdmlzID09IDI6DQogICAgKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmlzX29wdGlvbmFsOg0K
ICAgICsgICAgICAgICAgICAgICAgcmV0dXJuICgyLCkgaWYgc2VsZi50eXBlIGlzIEJPT0wgZWxz
ZSAoMSwgMikNCiAgICArICAgICAgICAgICAgcmV0dXJuICgwLCAyKSBpZiBzZWxmLnR5cGUgaXMg
Qk9PTCBlbHNlICgwLCAxLCAyKQ0KICAgICsNCiAgICArICAgICAgICAjIHZpcyA9PSAxDQogICAg
Kw0KICAgICsgICAgICAgIHJldHVybiAoMCwgMSkgaWYgc2VsZi5pc19vcHRpb25hbCBlbHNlICgx
LCkNCiAgICArDQogICAgKyAgICBkZWYgX3NlbGVjdGlvbihzZWxmKToNCiAgICArICAgICAgICAj
IFdvcmtlciBmdW5jdGlvbiBmb3IgdGhlICdzZWxlY3Rpb24nIGF0dHJpYnV0ZQ0KICAgICsNCiAg
ICArICAgICAgICAjIFdhcm5pbmc6IFNlZSBTeW1ib2wuX3JlY19pbnZhbGlkYXRlKCksIGFuZCBu
b3RlIHRoYXQgdGhpcyBpcyBhIGhpZGRlbg0KICAgICsgICAgICAgICMgZnVuY3Rpb24gY2FsbCAo
cHJvcGVydHkgbWFnaWMpDQogICAgKyAgICAgICAgaWYgc2VsZi50cmlfdmFsdWUgIT0gMjoNCiAg
ICArICAgICAgICAgICAgIyBOb3QgaW4geSBtb2RlLCBzbyBubyBzZWxlY3Rpb24NCiAgICArICAg
ICAgICAgICAgcmV0dXJuIE5vbmUNCiAgICArDQogICAgKyAgICAgICAgIyBVc2UgdGhlIHVzZXIg
c2VsZWN0aW9uIGlmIGl0J3MgdmlzaWJsZQ0KICAgICsgICAgICAgIGlmIHNlbGYudXNlcl9zZWxl
Y3Rpb24gYW5kIHNlbGYudXNlcl9zZWxlY3Rpb24udmlzaWJpbGl0eToNCiAgICArICAgICAgICAg
ICAgcmV0dXJuIHNlbGYudXNlcl9zZWxlY3Rpb24NCiAgICArDQogICAgKyAgICAgICAgIyBPdGhl
cndpc2UsIGNoZWNrIGlmIHdlIGhhdmUgYSBkZWZhdWx0DQogICAgKyAgICAgICAgcmV0dXJuIHNl
bGYuX3NlbGVjdGlvbl9mcm9tX2RlZmF1bHRzKCkNCiAgICArDQogICAgKyAgICBkZWYgX3NlbGVj
dGlvbl9mcm9tX2RlZmF1bHRzKHNlbGYpOg0KICAgICsgICAgICAgICMgQ2hlY2sgaWYgd2UgaGF2
ZSBhIGRlZmF1bHQNCiAgICArICAgICAgICBmb3Igc3ltLCBjb25kIGluIHNlbGYuZGVmYXVsdHM6
DQogICAgKyAgICAgICAgICAgICMgVGhlIGRlZmF1bHQgc3ltYm9sIG11c3QgYmUgdmlzaWJsZSB0
b28NCiAgICArICAgICAgICAgICAgaWYgZXhwcl92YWx1ZShjb25kKSBhbmQgc3ltLnZpc2liaWxp
dHk6DQogICAgKyAgICAgICAgICAgICAgICByZXR1cm4gc3ltDQogICAgKw0KICAgICsgICAgICAg
ICMgT3RoZXJ3aXNlLCBwaWNrIHRoZSBmaXJzdCB2aXNpYmxlIHN5bWJvbCwgaWYgYW55DQogICAg
KyAgICAgICAgZm9yIHN5bSBpbiBzZWxmLnN5bXM6DQogICAgKyAgICAgICAgICAgIGlmIHN5bS52
aXNpYmlsaXR5Og0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIHN5bQ0KICAgICsNCiAgICAr
ICAgICAgICAjIENvdWxkbid0IGZpbmQgYSBzZWxlY3Rpb24NCiAgICArICAgICAgICByZXR1cm4g
Tm9uZQ0KICAgICsNCiAgICArICAgIGRlZiBfaW52YWxpZGF0ZShzZWxmKToNCiAgICArICAgICAg
ICBzZWxmLl9jYWNoZWRfdmlzID0gc2VsZi5fY2FjaGVkX2Fzc2lnbmFibGUgPSBOb25lDQogICAg
KyAgICAgICAgc2VsZi5fY2FjaGVkX3NlbGVjdGlvbiA9IF9OT19DQUNIRURfU0VMRUNUSU9ODQog
ICAgKw0KICAgICsgICAgZGVmIF9yZWNfaW52YWxpZGF0ZShzZWxmKToNCiAgICArICAgICAgICAj
IFNlZSBTeW1ib2wuX3JlY19pbnZhbGlkYXRlKCkNCiAgICArDQogICAgKyAgICAgICAgc2VsZi5f
aW52YWxpZGF0ZSgpDQogICAgKw0KICAgICsgICAgICAgIGZvciBpdGVtIGluIHNlbGYuX2RlcGVu
ZGVudHM6DQogICAgKyAgICAgICAgICAgIGlmIGl0ZW0uX2NhY2hlZF92aXMgaXMgbm90IE5vbmU6
DQogICAgKyAgICAgICAgICAgICAgICBpdGVtLl9yZWNfaW52YWxpZGF0ZSgpDQogICAgKw0KICAg
ICsNCiAgICArY2xhc3MgTWVudU5vZGUob2JqZWN0KToNCiAgICArICAgICIiIg0KICAgICsgICAg
UmVwcmVzZW50cyBhIG1lbnUgbm9kZSBpbiB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBjb3JyZXNw
b25kcyB0byBhbiBlbnRyeQ0KICAgICsgICAgaW4gZS5nLiB0aGUgJ21ha2UgbWVudWNvbmZpZycg
aW50ZXJmYWNlLCB0aG91Z2ggbm9uLXZpc2libGUgY2hvaWNlcywgbWVudXMsDQogICAgKyAgICBh
bmQgY29tbWVudHMgYWxzbyBnZXQgbWVudSBub2Rlcy4gSWYgYSBzeW1ib2wgb3IgY2hvaWNlIGlz
IGRlZmluZWQgaW4NCiAgICArICAgIG11bHRpcGxlIGxvY2F0aW9ucywgaXQgZ2V0cyBvbmUgbWVu
dSBub2RlIGZvciBlYWNoIGxvY2F0aW9uLg0KICAgICsNCiAgICArICAgIFRoZSB0b3AtbGV2ZWwg
bWVudSBub2RlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbXBsaWNpdCB0b3AtbGV2ZWwgbWVudSwg
aXMNCiAgICArICAgIGF2YWlsYWJsZSBpbiBLY29uZmlnLnRvcF9ub2RlLg0KICAgICsNCiAgICAr
ICAgIFRoZSBtZW51IG5vZGVzIGZvciBhIFN5bWJvbCBvciBDaG9pY2UgY2FuIGJlIGZvdW5kIGlu
IHRoZQ0KICAgICsgICAgU3ltYm9sL0Nob2ljZS5ub2RlcyBhdHRyaWJ1dGUuIE1lbnVzIGFuZCBj
b21tZW50cyBhcmUgcmVwcmVzZW50ZWQgYXMgcGxhaW4NCiAgICArICAgIG1lbnUgbm9kZXMsIHdp
dGggdGhlaXIgdGV4dCBzdG9yZWQgaW4gdGhlIHByb21wdCBhdHRyaWJ1dGUgKHByb21wdFswXSku
DQogICAgKyAgICBUaGlzIG1pcnJvcnMgdGhlIEMgaW1wbGVtZW50YXRpb24uDQogICAgKw0KICAg
ICsgICAgVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBhdmFpbGFibGUgb24gTWVudU5vZGUg
aW5zdGFuY2VzLiBUaGV5IHNob3VsZA0KICAgICsgICAgYmUgdmlld2VkIGFzIHJlYWQtb25seS4N
CiAgICArDQogICAgKyAgICBpdGVtOg0KICAgICsgICAgICBFaXRoZXIgYSBTeW1ib2wsIGEgQ2hv
aWNlLCBvciBvbmUgb2YgdGhlIGNvbnN0YW50cyBNRU5VIGFuZCBDT01NRU5ULg0KICAgICsgICAg
ICBNZW51cyBhbmQgY29tbWVudHMgYXJlIHJlcHJlc2VudGVkIGFzIHBsYWluIG1lbnUgbm9kZXMu
IElmcyBhcmUgY29sbGFwc2VkDQogICAgKyAgICAgIChtYXRjaGluZyB0aGUgQyBpbXBsZW1lbnRh
dGlvbikgYW5kIGRvIG5vdCBhcHBlYXIgaW4gdGhlIGZpbmFsIG1lbnUgdHJlZS4NCiAgICArDQog
ICAgKyAgICBuZXh0Og0KICAgICsgICAgICBUaGUgZm9sbG93aW5nIG1lbnUgbm9kZS4gTm9uZSBp
ZiB0aGVyZSBpcyBubyBmb2xsb3dpbmcgbm9kZS4NCiAgICArDQogICAgKyAgICBsaXN0Og0KICAg
ICsgICAgICBUaGUgZmlyc3QgY2hpbGQgbWVudSBub2RlLiBOb25lIGlmIHRoZXJlIGFyZSBubyBj
aGlsZHJlbi4NCiAgICArDQogICAgKyAgICAgIENob2ljZXMgYW5kIG1lbnVzIG5hdHVyYWxseSBo
YXZlIGNoaWxkcmVuLCBidXQgU3ltYm9scyBjYW4gYWxzbyBoYXZlDQogICAgKyAgICAgIGNoaWxk
cmVuIGJlY2F1c2Ugb2YgbWVudXMgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gZGVwZW5kZW5j
aWVzIChzZWUNCiAgICArICAgICAga2NvbmZpZy1sYW5ndWFnZS50eHQpLg0KICAgICsNCiAgICAr
ICAgIHBhcmVudDoNCiAgICArICAgICAgVGhlIHBhcmVudCBtZW51IG5vZGUuIE5vbmUgaWYgdGhl
cmUgaXMgbm8gcGFyZW50Lg0KICAgICsNCiAgICArICAgIHByb21wdDoNCiAgICArICAgICAgQSAo
c3RyaW5nLCBjb25kKSB0dXBsZSB3aXRoIHRoZSBwcm9tcHQgZm9yIHRoZSBtZW51IG5vZGUgYW5k
IGl0cw0KICAgICsgICAgICBjb25kaXRpb25hbCBleHByZXNzaW9uICh3aGljaCBpcyBzZWxmLmtj
b25maWcueSBpZiB0aGVyZSBpcyBubw0KICAgICsgICAgICBjb25kaXRpb24pLiBOb25lIGlmIHRo
ZXJlIGlzIG5vIHByb21wdC4NCiAgICArDQogICAgKyAgICAgIEZvciBzeW1ib2xzIGFuZCBjaG9p
Y2VzLCB0aGUgcHJvbXB0IGlzIHN0b3JlZCBpbiB0aGUgTWVudU5vZGUgcmF0aGVyIHRoYW4NCiAg
ICArICAgICAgdGhlIFN5bWJvbCBvciBDaG9pY2UgaW5zdGFuY2UuIEZvciBtZW51cyBhbmQgY29t
bWVudHMsIHRoZSBwcm9tcHQgaG9sZHMNCiAgICArICAgICAgdGhlIHRleHQuDQogICAgKw0KICAg
ICsgICAgZGVmYXVsdHM6DQogICAgKyAgICAgIFRoZSAnZGVmYXVsdCcgcHJvcGVydGllcyBmb3Ig
dGhpcyBwYXJ0aWN1bGFyIG1lbnUgbm9kZS4gU2VlDQogICAgKyAgICAgIHN5bWJvbC5kZWZhdWx0
cy4NCiAgICArDQogICAgKyAgICAgIFdoZW4gZXZhbHVhdGluZyBkZWZhdWx0cywgeW91IHNob3Vs
ZCB1c2UgU3ltYm9sL0Nob2ljZS5kZWZhdWx0cyBpbnN0ZWFkLA0KICAgICsgICAgICBhcyBpdCBp
bmNsdWRlIHByb3BlcnRpZXMgZnJvbSBhbGwgbWVudSBub2RlcyAoYSBzeW1ib2wvY2hvaWNlIGNh
biBoYXZlDQogICAgKyAgICAgIG11bHRpcGxlIGRlZmluaXRpb24gbG9jYXRpb25zL21lbnUgbm9k
ZXMpLiBNZW51Tm9kZS5kZWZhdWx0cyBpcyBtZWFudCBmb3INCiAgICArICAgICAgZG9jdW1lbnRh
dGlvbiBnZW5lcmF0aW9uLg0KICAgICsNCiAgICArICAgIHNlbGVjdHM6DQogICAgKyAgICAgIExp
a2UgTWVudU5vZGUuZGVmYXVsdHMsIGZvciBzZWxlY3RzLg0KICAgICsNCiAgICArICAgIGltcGxp
ZXM6DQogICAgKyAgICAgIExpa2UgTWVudU5vZGUuZGVmYXVsdHMsIGZvciBpbXBsaWVzLg0KICAg
ICsNCiAgICArICAgIHJhbmdlczoNCiAgICArICAgICAgTGlrZSBNZW51Tm9kZS5kZWZhdWx0cywg
Zm9yIHJhbmdlcy4NCiAgICArDQogICAgKyAgICBvcmlnX3Byb21wdDoNCiAgICArICAgIG9yaWdf
ZGVmYXVsdHM6DQogICAgKyAgICBvcmlnX3NlbGVjdHM6DQogICAgKyAgICBvcmlnX2ltcGxpZXM6
DQogICAgKyAgICBvcmlnX3JhbmdlczoNCiAgICArICAgICAgVGhlc2Ugd29yayB0aGUgbGlrZSB0
aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGVzIHdpdGhvdXQgb3JpZ18qLCBidXQgb21pdA0KICAg
ICsgICAgICBhbnkgZGVwZW5kZW5jaWVzIHByb3BhZ2F0ZWQgZnJvbSAnZGVwZW5kcyBvbicgYW5k
IHN1cnJvdW5kaW5nICdpZidzICh0aGUNCiAgICArICAgICAgZGlyZWN0IGRlcGVuZGVuY2llcywg
c3RvcmVkIGluIE1lbnVOb2RlLmRlcCkuDQogICAgKw0KICAgICsgICAgICBPbmUgdXNlIGZvciB0
aGlzIGlzIGdlbmVyYXRpbmcgbGVzcyBjbHV0dGVyZWQgZG9jdW1lbnRhdGlvbiwgYnkgb25seQ0K
ICAgICsgICAgICBzaG93aW5nIHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzIGluIG9uZSBwbGFjZS4N
CiAgICArDQogICAgKyAgICBoZWxwOg0KICAgICsgICAgICBUaGUgaGVscCB0ZXh0IGZvciB0aGUg
bWVudSBub2RlIGZvciBTeW1ib2xzIGFuZCBDaG9pY2VzLiBOb25lIGlmIHRoZXJlIGlzDQogICAg
KyAgICAgIG5vIGhlbHAgdGV4dC4gQWx3YXlzIHN0b3JlZCBpbiB0aGUgbm9kZSByYXRoZXIgdGhh
biB0aGUgU3ltYm9sIG9yIENob2ljZS4NCiAgICArICAgICAgSXQgaXMgcG9zc2libGUgdG8gaGF2
ZSBhIHNlcGFyYXRlIGhlbHAgdGV4dCBhdCBlYWNoIGxvY2F0aW9uIGlmIGEgc3ltYm9sDQogICAg
KyAgICAgIGlzIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zLg0KICAgICsNCiAgICArICAg
ICAgVHJhaWxpbmcgd2hpdGVzcGFjZSAoaW5jbHVkaW5nIGEgZmluYWwgbmV3bGluZSkgaXMgc3Ry
aXBwZWQgZnJvbSB0aGUgaGVscA0KICAgICsgICAgICB0ZXh0LiBUaGlzIHdhcyBub3QgdGhlIGNh
c2UgYmVmb3JlIEtjb25maWdsaWIgMTAuMjEuMCwgd2hlcmUgdGhlIGZvcm1hdA0KICAgICsgICAg
ICB3YXMgdW5kb2N1bWVudGVkLg0KICAgICsNCiAgICArICAgIGRlcDoNCiAgICArICAgICAgVGhl
IGRpcmVjdCAoJ2RlcGVuZHMgb24nKSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBtZW51IG5vZGUsIG9y
DQogICAgKyAgICAgIHNlbGYua2NvbmZpZy55IGlmIHRoZXJlIGFyZSBubyBkaXJlY3QgZGVwZW5k
ZW5jaWVzLg0KICAgICsNCiAgICArICAgICAgVGhpcyBhdHRyaWJ1dGUgaW5jbHVkZXMgYW55IGRl
cGVuZGVuY2llcyBmcm9tIHN1cnJvdW5kaW5nIG1lbnVzIGFuZCBpZnMuDQogICAgKyAgICAgIFRo
b3NlIGdldCBwcm9wYWdhdGVkIHRvIHRoZSBkaXJlY3QgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIHJl
c3VsdGluZyBkaXJlY3QNCiAgICArICAgICAgZGVwZW5kZW5jaWVzIGluIHR1cm4gZ2V0IHByb3Bh
Z2F0ZWQgdG8gdGhlIGNvbmRpdGlvbnMgb2YgYWxsIHByb3BlcnRpZXMuDQogICAgKw0KICAgICsg
ICAgICBJZiBhIHN5bWJvbCBvciBjaG9pY2UgaXMgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2NhdGlv
bnMsIG9ubHkgdGhlDQogICAgKyAgICAgIHByb3BlcnRpZXMgZGVmaW5lZCBhdCBhIHBhcnRpY3Vs
YXIgbG9jYXRpb24gZ2V0IHRoZSBjb3JyZXNwb25kaW5nDQogICAgKyAgICAgIE1lbnVOb2RlLmRl
cCBkZXBlbmRlbmNpZXMgcHJvcGFnYXRlZCB0byB0aGVtLg0KICAgICsNCiAgICArICAgIHZpc2li
aWxpdHk6DQogICAgKyAgICAgIFRoZSAndmlzaWJsZSBpZicgZGVwZW5kZW5jaWVzIGZvciB0aGUg
bWVudSBub2RlICh3aGljaCBtdXN0IHJlcHJlc2VudCBhDQogICAgKyAgICAgIG1lbnUpLCBvciBz
ZWxmLmtjb25maWcueSBpZiB0aGVyZSBhcmUgbm8gJ3Zpc2libGUgaWYnIGRlcGVuZGVuY2llcy4N
CiAgICArICAgICAgJ3Zpc2libGUgaWYnIGRlcGVuZGVuY2llcyBhcmUgcmVjdXJzaXZlbHkgcHJv
cGFnYXRlZCB0byB0aGUgcHJvbXB0cyBvZg0KICAgICsgICAgICBzeW1ib2xzIGFuZCBjaG9pY2Vz
IHdpdGhpbiB0aGUgbWVudS4NCiAgICArDQogICAgKyAgICByZWZlcmVuY2VkOg0KICAgICsgICAg
ICBBIHNldCgpIHdpdGggYWxsIHN5bWJvbHMgYW5kIGNob2ljZXMgcmVmZXJlbmNlZCBpbiB0aGUg
cHJvcGVydGllcyBhbmQNCiAgICArICAgICAgcHJvcGVydHkgY29uZGl0aW9ucyBvZiB0aGUgbWVu
dSBub2RlLg0KICAgICsNCiAgICArICAgICAgQWxzbyBpbmNsdWRlcyBkZXBlbmRlbmNpZXMgaW5o
ZXJpdGVkIGZyb20gc3Vycm91bmRpbmcgbWVudXMgYW5kIGlmcy4NCiAgICArICAgICAgQ2hvaWNl
cyBhcHBlYXIgaW4gdGhlIGRlcGVuZGVuY2llcyBvZiBjaG9pY2Ugc3ltYm9scy4NCiAgICArDQog
ICAgKyAgICBpc19tZW51Y29uZmlnOg0KICAgICsgICAgICBTZXQgdG8gVHJ1ZSBpZiB0aGUgY2hp
bGRyZW4gb2YgdGhlIG1lbnUgbm9kZSBzaG91bGQgYmUgZGlzcGxheWVkIGluIGENCiAgICArICAg
ICAgc2VwYXJhdGUgbWVudS4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgdGhlIGZvbGxvd2luZyBpdGVt
czoNCiAgICArDQogICAgKyAgICAgICAgLSBNZW51cyAobm9kZS5pdGVtID09IE1FTlUpDQogICAg
Kw0KICAgICsgICAgICAgIC0gQ2hvaWNlcw0KICAgICsNCiAgICArICAgICAgICAtIFN5bWJvbHMg
ZGVmaW5lZCB3aXRoIHRoZSAnbWVudWNvbmZpZycga2V5d29yZC4gVGhlIGNoaWxkcmVuIGNvbWUg
ZnJvbQ0KICAgICsgICAgICAgICAgaW1wbGljaXRseSBjcmVhdGVkIHN1Ym1lbnVzLCBhbmQgc2hv
dWxkIGJlIGRpc3BsYXllZCBpbiBhIHNlcGFyYXRlDQogICAgKyAgICAgICAgICBtZW51IHJhdGhl
ciB0aGFuIGJlaW5nIGluZGVudGVkLg0KICAgICsNCiAgICArICAgICAgJ2lzX21lbnVjb25maWcn
IGlzIGp1c3QgYSBoaW50IG9uIGhvdyB0byBkaXNwbGF5IHRoZSBtZW51IG5vZGUuIEl0J3MNCiAg
ICArICAgICAgaWdub3JlZCBpbnRlcm5hbGx5IGJ5IEtjb25maWdsaWIsIGV4Y2VwdCB3aGVuIHBy
aW50aW5nIHN5bWJvbHMuDQogICAgKw0KICAgICsgICAgZmlsZW5hbWUvbGluZW5yOg0KICAgICsg
ICAgICBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIG1lbnUgbm9kZSBhcHBlYXJzLiBUaGUgZmlsZW5h
bWUgaXMgcmVsYXRpdmUgdG8NCiAgICArICAgICAgJHNyY3RyZWUgKG9yIHRvIHRoZSBjdXJyZW50
IGRpcmVjdG9yeSBpZiAkc3JjdHJlZSBpc24ndCBzZXQpLCBleGNlcHQNCiAgICArICAgICAgYWJz
b2x1dGUgcGF0aHMgYXJlIHVzZWQgZm9yIHBhdGhzIG91dHNpZGUgJHNyY3RyZWUuDQogICAgKw0K
ICAgICsgICAgaW5jbHVkZV9wYXRoOg0KICAgICsgICAgICBBIHR1cGxlIG9mIChmaWxlbmFtZSwg
bGluZW5yKSB0dXBsZXMsIGdpdmluZyB0aGUgbG9jYXRpb25zIG9mIHRoZQ0KICAgICsgICAgICAn
c291cmNlJyBzdGF0ZW1lbnRzIHZpYSB3aGljaCB0aGUgS2NvbmZpZyBmaWxlIGNvbnRhaW5pbmcg
dGhpcyBtZW51IG5vZGUNCiAgICArICAgICAgd2FzIGluY2x1ZGVkLiBUaGUgZmlyc3QgZWxlbWVu
dCBpcyB0aGUgbG9jYXRpb24gb2YgdGhlICdzb3VyY2UnIHN0YXRlbWVudA0KICAgICsgICAgICBp
biB0aGUgdG9wLWxldmVsIEtjb25maWcgZmlsZSBwYXNzZWQgdG8gS2NvbmZpZy5fX2luaXRfXygp
LCBldGMuDQogICAgKw0KICAgICsgICAgICBOb3RlIHRoYXQgdGhlIEtjb25maWcgZmlsZSBvZiB0
aGUgbWVudSBub2RlIGl0c2VsZiBpc24ndCBpbmNsdWRlZC4gQ2hlY2sNCiAgICArICAgICAgJ2Zp
bGVuYW1lJyBhbmQgJ2xpbmVucicgZm9yIHRoYXQuDQogICAgKw0KICAgICsgICAga2NvbmZpZzoN
CiAgICArICAgICAgVGhlIEtjb25maWcgaW5zdGFuY2UgdGhlIG1lbnUgbm9kZSBpcyBmcm9tLg0K
ICAgICsgICAgIiIiDQogICAgKyAgICBfX3Nsb3RzX18gPSAoDQogICAgKyAgICAgICAgImRlcCIs
DQogICAgKyAgICAgICAgImZpbGVuYW1lIiwNCiAgICArICAgICAgICAiaGVscCIsDQogICAgKyAg
ICAgICAgImluY2x1ZGVfcGF0aCIsDQogICAgKyAgICAgICAgImlzX21lbnVjb25maWciLA0KICAg
ICsgICAgICAgICJpdGVtIiwNCiAgICArICAgICAgICAia2NvbmZpZyIsDQogICAgKyAgICAgICAg
ImxpbmVuciIsDQogICAgKyAgICAgICAgImxpc3QiLA0KICAgICsgICAgICAgICJuZXh0IiwNCiAg
ICArICAgICAgICAicGFyZW50IiwNCiAgICArICAgICAgICAicHJvbXB0IiwNCiAgICArICAgICAg
ICAidmlzaWJpbGl0eSIsDQogICAgKw0KICAgICsgICAgICAgICMgUHJvcGVydGllcw0KICAgICsg
ICAgICAgICJkZWZhdWx0cyIsDQogICAgKyAgICAgICAgInNlbGVjdHMiLA0KICAgICsgICAgICAg
ICJpbXBsaWVzIiwNCiAgICArICAgICAgICAicmFuZ2VzIiwNCiAgICArICAgICkNCiAgICArDQog
ICAgKyAgICBkZWYgX19pbml0X18oc2VsZik6DQogICAgKyAgICAgICAgIyBQcm9wZXJ0aWVzIGRl
ZmluZWQgb24gdGhpcyBwYXJ0aWN1bGFyIG1lbnUgbm9kZS4gQSBsb2NhbCAnZGVwZW5kcyBvbicN
CiAgICArICAgICAgICAjIG9ubHkgYXBwbGllcyB0byB0aGVzZSwgaW4gY2FzZSBhIHN5bWJvbCBp
cyBkZWZpbmVkIGluIG11bHRpcGxlDQogICAgKyAgICAgICAgIyBsb2NhdGlvbnMuDQogICAgKyAg
ICAgICAgc2VsZi5kZWZhdWx0cyA9IFtdDQogICAgKyAgICAgICAgc2VsZi5zZWxlY3RzID0gW10N
CiAgICArICAgICAgICBzZWxmLmltcGxpZXMgPSBbXQ0KICAgICsgICAgICAgIHNlbGYucmFuZ2Vz
ID0gW10NCiAgICArDQogICAgKyAgICBAcHJvcGVydHkNCiAgICArICAgIGRlZiBvcmlnX3Byb21w
dChzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBTZWUgdGhlIGNsYXNzIGRv
Y3VtZW50YXRpb24uDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgaWYgbm90IHNlbGYu
cHJvbXB0Og0KICAgICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KICAgICsgICAgICAgIHJldHVy
biAoc2VsZi5wcm9tcHRbMF0sIHNlbGYuX3N0cmlwX2RlcChzZWxmLnByb21wdFsxXSkpDQogICAg
Kw0KICAgICsgICAgQHByb3BlcnR5DQogICAgKyAgICBkZWYgb3JpZ19kZWZhdWx0cyhzZWxmKToN
CiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBTZWUgdGhlIGNsYXNzIGRvY3VtZW50YXRp
b24uDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIFsoZGVmYXVsdCwgc2Vs
Zi5fc3RyaXBfZGVwKGNvbmQpKQ0KICAgICsgICAgICAgICAgICAgICAgZm9yIGRlZmF1bHQsIGNv
bmQgaW4gc2VsZi5kZWZhdWx0c10NCiAgICArDQogICAgKyAgICBAcHJvcGVydHkNCiAgICArICAg
IGRlZiBvcmlnX3NlbGVjdHMoc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAg
U2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAg
ICAgIHJldHVybiBbKHNlbGVjdCwgc2VsZi5fc3RyaXBfZGVwKGNvbmQpKQ0KICAgICsgICAgICAg
ICAgICAgICAgZm9yIHNlbGVjdCwgY29uZCBpbiBzZWxmLnNlbGVjdHNdDQogICAgKw0KICAgICsg
ICAgQHByb3BlcnR5DQogICAgKyAgICBkZWYgb3JpZ19pbXBsaWVzKHNlbGYpOg0KICAgICsgICAg
ICAgICIiIg0KICAgICsgICAgICAgIFNlZSB0aGUgY2xhc3MgZG9jdW1lbnRhdGlvbi4NCiAgICAr
ICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4gWyhpbXBseSwgc2VsZi5fc3RyaXBfZGVw
KGNvbmQpKQ0KICAgICsgICAgICAgICAgICAgICAgZm9yIGltcGx5LCBjb25kIGluIHNlbGYuaW1w
bGllc10NCiAgICArDQogICAgKyAgICBAcHJvcGVydHkNCiAgICArICAgIGRlZiBvcmlnX3Jhbmdl
cyhzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBTZWUgdGhlIGNsYXNzIGRv
Y3VtZW50YXRpb24uDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIFsobG93
LCBoaWdoLCBzZWxmLl9zdHJpcF9kZXAoY29uZCkpDQogICAgKyAgICAgICAgICAgICAgICBmb3Ig
bG93LCBoaWdoLCBjb25kIGluIHNlbGYucmFuZ2VzXQ0KICAgICsNCiAgICArICAgIEBwcm9wZXJ0
eQ0KICAgICsgICAgZGVmIHJlZmVyZW5jZWQoc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAg
KyAgICAgICAgU2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLg0KICAgICsgICAgICAgICIiIg0K
ICAgICsgICAgICAgICMgc2VsZi5kZXAgaXMgaW5jbHVkZWQgdG8gY2F0Y2ggZGVwZW5kZW5jaWVz
IGZyb20gYSBsb25lICdkZXBlbmRzIG9uJw0KICAgICsgICAgICAgICMgd2hlbiB0aGVyZSBhcmUg
bm8gcHJvcGVydGllcyB0byBwcm9wYWdhdGUgaXQgdG8NCiAgICArICAgICAgICByZXMgPSBleHBy
X2l0ZW1zKHNlbGYuZGVwKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLnByb21wdDoNCiAg
ICArICAgICAgICAgICAgcmVzIHw9IGV4cHJfaXRlbXMoc2VsZi5wcm9tcHRbMV0pDQogICAgKw0K
ICAgICsgICAgICAgIGlmIHNlbGYuaXRlbSBpcyBNRU5VOg0KICAgICsgICAgICAgICAgICByZXMg
fD0gZXhwcl9pdGVtcyhzZWxmLnZpc2liaWxpdHkpDQogICAgKw0KICAgICsgICAgICAgIGZvciB2
YWx1ZSwgY29uZCBpbiBzZWxmLmRlZmF1bHRzOg0KICAgICsgICAgICAgICAgICByZXMgfD0gZXhw
cl9pdGVtcyh2YWx1ZSkNCiAgICArICAgICAgICAgICAgcmVzIHw9IGV4cHJfaXRlbXMoY29uZCkN
CiAgICArDQogICAgKyAgICAgICAgZm9yIHZhbHVlLCBjb25kIGluIHNlbGYuc2VsZWN0czoNCiAg
ICArICAgICAgICAgICAgcmVzLmFkZCh2YWx1ZSkNCiAgICArICAgICAgICAgICAgcmVzIHw9IGV4
cHJfaXRlbXMoY29uZCkNCiAgICArDQogICAgKyAgICAgICAgZm9yIHZhbHVlLCBjb25kIGluIHNl
bGYuaW1wbGllczoNCiAgICArICAgICAgICAgICAgcmVzLmFkZCh2YWx1ZSkNCiAgICArICAgICAg
ICAgICAgcmVzIHw9IGV4cHJfaXRlbXMoY29uZCkNCiAgICArDQogICAgKyAgICAgICAgZm9yIGxv
dywgaGlnaCwgY29uZCBpbiBzZWxmLnJhbmdlczoNCiAgICArICAgICAgICAgICAgcmVzLmFkZChs
b3cpDQogICAgKyAgICAgICAgICAgIHJlcy5hZGQoaGlnaCkNCiAgICArICAgICAgICAgICAgcmVz
IHw9IGV4cHJfaXRlbXMoY29uZCkNCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuIHJlcw0KICAg
ICsNCiAgICArICAgIGRlZiBfX3JlcHJfXyhzZWxmKToNCiAgICArICAgICAgICAiIiINCiAgICAr
ICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIG1lbnUg
bm9kZSB3aGVuIGl0IGlzDQogICAgKyAgICAgICAgZXZhbHVhdGVkIG9uIGUuZy4gdGhlIGludGVy
YWN0aXZlIFB5dGhvbiBwcm9tcHQuDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgZmll
bGRzID0gW10NCiAgICArICAgICAgICBhZGQgPSBmaWVsZHMuYXBwZW5kDQogICAgKw0KICAgICsg
ICAgICAgIGlmIHNlbGYuaXRlbS5fX2NsYXNzX18gaXMgU3ltYm9sOg0KICAgICsgICAgICAgICAg
ICBhZGQoIm1lbnUgbm9kZSBmb3Igc3ltYm9sICIgKyBzZWxmLml0ZW0ubmFtZSkNCiAgICArDQog
ICAgKyAgICAgICAgZWxpZiBzZWxmLml0ZW0uX19jbGFzc19fIGlzIENob2ljZToNCiAgICArICAg
ICAgICAgICAgcyA9ICJtZW51IG5vZGUgZm9yIGNob2ljZSINCiAgICArICAgICAgICAgICAgaWYg
c2VsZi5pdGVtLm5hbWUgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgICAgICBzICs9ICIg
IiArIHNlbGYuaXRlbS5uYW1lDQogICAgKyAgICAgICAgICAgIGFkZChzKQ0KICAgICsNCiAgICAr
ICAgICAgICBlbGlmIHNlbGYuaXRlbSBpcyBNRU5VOg0KICAgICsgICAgICAgICAgICBhZGQoIm1l
bnUgbm9kZSBmb3IgbWVudSIpDQogICAgKw0KICAgICsgICAgICAgIGVsc2U6ICAjIHNlbGYuaXRl
bSBpcyBDT01NRU5UDQogICAgKyAgICAgICAgICAgIGFkZCgibWVudSBub2RlIGZvciBjb21tZW50
IikNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5wcm9tcHQ6DQogICAgKyAgICAgICAgICAg
IGFkZCgncHJvbXB0ICJ7fSIgKHZpc2liaWxpdHkge30pJy5mb3JtYXQoDQogICAgKyAgICAgICAg
ICAgICAgICBzZWxmLnByb21wdFswXSwgVFJJX1RPX1NUUltleHByX3ZhbHVlKHNlbGYucHJvbXB0
WzFdKV0pKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLml0ZW0uX19jbGFzc19fIGlzIFN5
bWJvbCBhbmQgc2VsZi5pc19tZW51Y29uZmlnOg0KICAgICsgICAgICAgICAgICBhZGQoImlzIG1l
bnVjb25maWciKQ0KICAgICsNCiAgICArICAgICAgICBhZGQoImRlcHMgIiArIFRSSV9UT19TVFJb
ZXhwcl92YWx1ZShzZWxmLmRlcCldKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLml0ZW0g
aXMgTUVOVToNCiAgICArICAgICAgICAgICAgYWRkKCIndmlzaWJsZSBpZicgZGVwcyAiICsgVFJJ
X1RPX1NUUltleHByX3ZhbHVlKHNlbGYudmlzaWJpbGl0eSldKQ0KICAgICsNCiAgICArICAgICAg
ICBpZiBzZWxmLml0ZW0uX19jbGFzc19fIGluIF9TWU1CT0xfQ0hPSUNFIGFuZCBzZWxmLmhlbHAg
aXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgIGFkZCgiaGFzIGhlbHAiKQ0KICAgICsNCiAg
ICArICAgICAgICBpZiBzZWxmLmxpc3Q6DQogICAgKyAgICAgICAgICAgIGFkZCgiaGFzIGNoaWxk
IikNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5uZXh0Og0KICAgICsgICAgICAgICAgICBh
ZGQoImhhcyBuZXh0IikNCiAgICArDQogICAgKyAgICAgICAgYWRkKCJ7fTp7fSIuZm9ybWF0KHNl
bGYuZmlsZW5hbWUsIHNlbGYubGluZW5yKSkNCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuICI8
e30+Ii5mb3JtYXQoIiwgIi5qb2luKGZpZWxkcykpDQogICAgKw0KICAgICsgICAgZGVmIF9fc3Ry
X18oc2VsZik6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgUmV0dXJucyBhIHN0cmlu
ZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVudSBub2RlLiBNYXRjaGVzIHRoZSBLY29uZmlnDQog
ICAgKyAgICAgICAgZm9ybWF0LCB3aXRoIGFueSBwYXJlbnQgZGVwZW5kZW5jaWVzIHByb3BhZ2F0
ZWQgdG8gdGhlICdkZXBlbmRzIG9uJw0KICAgICsgICAgICAgIGNvbmRpdGlvbi4NCiAgICArDQog
ICAgKyAgICAgICAgVGhlIG91dHB1dCBjb3VsZCAoYWxtb3N0KSBiZSBmZWQgYmFjayBpbnRvIGEg
S2NvbmZpZyBwYXJzZXIgdG8gcmVkZWZpbmUNCiAgICArICAgICAgICB0aGUgb2JqZWN0IGFzc29j
aWF0ZWQgd2l0aCB0aGUgbWVudSBub2RlLiBTZWUgdGhlIG1vZHVsZSBkb2N1bWVudGF0aW9uDQog
ICAgKyAgICAgICAgZm9yIGEgZ290Y2hhIHJlbGF0ZWQgdG8gY2hvaWNlIHN5bWJvbHMuDQogICAg
Kw0KICAgICsgICAgICAgIEZvciBzeW1ib2xzIGFuZCBjaG9pY2VzIHdpdGggbXVsdGlwbGUgbWVu
dSBub2RlcyAobXVsdGlwbGUgZGVmaW5pdGlvbg0KICAgICsgICAgICAgIGxvY2F0aW9ucyksIHBy
b3BlcnRpZXMgdGhhdCBhcmVuJ3QgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhciBtZW51DQog
ICAgKyAgICAgICAgbm9kZSBhcmUgc2hvd24gb24gYWxsIG1lbnUgbm9kZXMgKCdvcHRpb24gZW52
PS4uLicsICdvcHRpb25hbCcgZm9yDQogICAgKyAgICAgICAgY2hvaWNlcywgZXRjLikuDQogICAg
Kw0KICAgICsgICAgICAgIFRoZSByZXR1cm5lZCBzdHJpbmcgZG9lcyBub3QgZW5kIGluIGEgbmV3
bGluZS4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4gc2VsZi5jdXN0b21f
c3RyKHN0YW5kYXJkX3NjX2V4cHJfc3RyKQ0KICAgICsNCiAgICArICAgIGRlZiBjdXN0b21fc3Ry
KHNlbGYsIHNjX2V4cHJfc3RyX2ZuKToNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBX
b3JrcyBsaWtlIE1lbnVOb2RlLl9fc3RyX18oKSwgYnV0IGFsbG93cyBhIGN1c3RvbSBmb3JtYXQg
dG8gYmUgdXNlZA0KICAgICsgICAgICAgIGZvciBhbGwgc3ltYm9sL2Nob2ljZSByZWZlcmVuY2Vz
LiBTZWUgZXhwcl9zdHIoKS4NCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4g
c2VsZi5fbWVudV9jb21tZW50X25vZGVfc3RyKHNjX2V4cHJfc3RyX2ZuKSBcDQogICAgKyAgICAg
ICAgICAgICAgIGlmIHNlbGYuaXRlbSBpbiBfTUVOVV9DT01NRU5UIGVsc2UgXA0KICAgICsgICAg
ICAgICAgICAgICBzZWxmLl9zeW1fY2hvaWNlX25vZGVfc3RyKHNjX2V4cHJfc3RyX2ZuKQ0KICAg
ICsNCiAgICArICAgIGRlZiBfbWVudV9jb21tZW50X25vZGVfc3RyKHNlbGYsIHNjX2V4cHJfc3Ry
X2ZuKToNCiAgICArICAgICAgICBzID0gJ3t9ICJ7fSInLmZvcm1hdCgibWVudSIgaWYgc2VsZi5p
dGVtIGlzIE1FTlUgZWxzZSAiY29tbWVudCIsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5wcm9tcHRbMF0pDQogICAgKw0KICAgICsgICAgICAgIGlmIHNlbGYuZGVwIGlz
IG5vdCBzZWxmLmtjb25maWcueToNCiAgICArICAgICAgICAgICAgcyArPSAiXG5cdGRlcGVuZHMg
b24ge30iLmZvcm1hdChleHByX3N0cihzZWxmLmRlcCwgc2NfZXhwcl9zdHJfZm4pKQ0KICAgICsN
CiAgICArICAgICAgICBpZiBzZWxmLml0ZW0gaXMgTUVOVSBhbmQgc2VsZi52aXNpYmlsaXR5IGlz
IG5vdCBzZWxmLmtjb25maWcueToNCiAgICArICAgICAgICAgICAgcyArPSAiXG5cdHZpc2libGUg
aWYge30iLmZvcm1hdChleHByX3N0cihzZWxmLnZpc2liaWxpdHksDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NfZXhwcl9zdHJfZm4p
KQ0KICAgICsNCiAgICArICAgICAgICByZXR1cm4gcw0KICAgICsNCiAgICArICAgIGRlZiBfc3lt
X2Nob2ljZV9ub2RlX3N0cihzZWxmLCBzY19leHByX3N0cl9mbik6DQogICAgKyAgICAgICAgZGVm
IGluZGVudF9hZGQocyk6DQogICAgKyAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiXHQiICsgcykN
CiAgICArDQogICAgKyAgICAgICAgZGVmIGluZGVudF9hZGRfY29uZChzLCBjb25kKToNCiAgICAr
ICAgICAgICAgICAgaWYgY29uZCBpcyBub3Qgc2VsZi5rY29uZmlnLnk6DQogICAgKyAgICAgICAg
ICAgICAgICBzICs9ICIgaWYgIiArIGV4cHJfc3RyKGNvbmQsIHNjX2V4cHJfc3RyX2ZuKQ0KICAg
ICsgICAgICAgICAgICBpbmRlbnRfYWRkKHMpDQogICAgKw0KICAgICsgICAgICAgIHNjID0gc2Vs
Zi5pdGVtDQogICAgKw0KICAgICsgICAgICAgIGlmIHNjLl9fY2xhc3NfXyBpcyBTeW1ib2w6DQog
ICAgKyAgICAgICAgICAgIGxpbmVzID0gWygibWVudWNvbmZpZyAiIGlmIHNlbGYuaXNfbWVudWNv
bmZpZyBlbHNlICJjb25maWcgIikNCiAgICArICAgICAgICAgICAgICAgICAgICAgKyBzYy5uYW1l
XQ0KICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIGxpbmVzID0gWyJjaG9pY2Ug
IiArIHNjLm5hbWUgaWYgc2MubmFtZSBlbHNlICJjaG9pY2UiXQ0KICAgICsNCiAgICArICAgICAg
ICBpZiBzYy5vcmlnX3R5cGUgYW5kIG5vdCBzZWxmLnByb21wdDogICMgc2Mub3JpZ190eXBlICE9
IFVOS05PV04NCiAgICArICAgICAgICAgICAgIyBJZiB0aGVyZSdzIGEgcHJvbXB0LCB3ZSdsbCB1
c2UgdGhlICc8dHlwZT4gInByb21wdCInIHNob3J0aGFuZA0KICAgICsgICAgICAgICAgICAjIGlu
c3RlYWQNCiAgICArICAgICAgICAgICAgaW5kZW50X2FkZChUWVBFX1RPX1NUUltzYy5vcmlnX3R5
cGVdKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzZWxmLnByb21wdDoNCiAgICArICAgICAgICAg
ICAgaWYgc2Mub3JpZ190eXBlOg0KICAgICsgICAgICAgICAgICAgICAgcHJlZml4ID0gVFlQRV9U
T19TVFJbc2Mub3JpZ190eXBlXQ0KICAgICsgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAg
ICAgICAgICAgIyBTeW1ib2wgZGVmaW5lZCB3aXRob3V0IGEgdHlwZSAod2hpY2ggZ2VuZXJhdGVz
IGEgd2FybmluZykNCiAgICArICAgICAgICAgICAgICAgIHByZWZpeCA9ICJwcm9tcHQiDQogICAg
Kw0KICAgICsgICAgICAgICAgICBpbmRlbnRfYWRkX2NvbmQocHJlZml4ICsgJyAie30iJy5mb3Jt
YXQoZXNjYXBlKHNlbGYucHJvbXB0WzBdKSksDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZWxmLm9yaWdfcHJvbXB0WzFdKQ0KICAgICsNCiAgICArICAgICAgICBpZiBzYy5fX2Ns
YXNzX18gaXMgU3ltYm9sOg0KICAgICsgICAgICAgICAgICBpZiBzYy5pc19hbGxub2NvbmZpZ195
Og0KICAgICsgICAgICAgICAgICAgICAgaW5kZW50X2FkZCgib3B0aW9uIGFsbG5vY29uZmlnX3ki
KQ0KICAgICsNCiAgICArICAgICAgICAgICAgaWYgc2MgaXMgc2Mua2NvbmZpZy5kZWZjb25maWdf
bGlzdDoNCiAgICArICAgICAgICAgICAgICAgIGluZGVudF9hZGQoIm9wdGlvbiBkZWZjb25maWdf
bGlzdCIpDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBzYy5lbnZfdmFyIGlzIG5vdCBOb25l
Og0KICAgICsgICAgICAgICAgICAgICAgaW5kZW50X2FkZCgnb3B0aW9uIGVudj0ie30iJy5mb3Jt
YXQoc2MuZW52X3ZhcikpDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBzYyBpcyBzYy5rY29u
ZmlnLm1vZHVsZXM6DQogICAgKyAgICAgICAgICAgICAgICBpbmRlbnRfYWRkKCJvcHRpb24gbW9k
dWxlcyIpDQogICAgKw0KICAgICsgICAgICAgICAgICBmb3IgbG93LCBoaWdoLCBjb25kIGluIHNl
bGYub3JpZ19yYW5nZXM6DQogICAgKyAgICAgICAgICAgICAgICBpbmRlbnRfYWRkX2NvbmQoDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgInJhbmdlIHt9IHt9Ii5mb3JtYXQoc2NfZXhwcl9zdHJf
Zm4obG93KSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y19leHByX3N0cl9mbihoaWdoKSksDQogICAgKyAgICAgICAgICAgICAgICAgICAgY29uZCkNCiAg
ICArDQogICAgKyAgICAgICAgZm9yIGRlZmF1bHQsIGNvbmQgaW4gc2VsZi5vcmlnX2RlZmF1bHRz
Og0KICAgICsgICAgICAgICAgICBpbmRlbnRfYWRkX2NvbmQoImRlZmF1bHQgIiArIGV4cHJfc3Ry
KGRlZmF1bHQsIHNjX2V4cHJfc3RyX2ZuKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbmQpDQogICAgKw0KICAgICsgICAgICAgIGlmIHNjLl9fY2xhc3NfXyBpcyBDaG9pY2Ug
YW5kIHNjLmlzX29wdGlvbmFsOg0KICAgICsgICAgICAgICAgICBpbmRlbnRfYWRkKCJvcHRpb25h
bCIpDQogICAgKw0KICAgICsgICAgICAgIGlmIHNjLl9fY2xhc3NfXyBpcyBTeW1ib2w6DQogICAg
KyAgICAgICAgICAgIGZvciBzZWxlY3QsIGNvbmQgaW4gc2VsZi5vcmlnX3NlbGVjdHM6DQogICAg
KyAgICAgICAgICAgICAgICBpbmRlbnRfYWRkX2NvbmQoInNlbGVjdCAiICsgc2NfZXhwcl9zdHJf
Zm4oc2VsZWN0KSwgY29uZCkNCiAgICArDQogICAgKyAgICAgICAgICAgIGZvciBpbXBseSwgY29u
ZCBpbiBzZWxmLm9yaWdfaW1wbGllczoNCiAgICArICAgICAgICAgICAgICAgIGluZGVudF9hZGRf
Y29uZCgiaW1wbHkgIiArIHNjX2V4cHJfc3RyX2ZuKGltcGx5KSwgY29uZCkNCiAgICArDQogICAg
KyAgICAgICAgaWYgc2VsZi5kZXAgaXMgbm90IHNjLmtjb25maWcueToNCiAgICArICAgICAgICAg
ICAgaW5kZW50X2FkZCgiZGVwZW5kcyBvbiAiICsgZXhwcl9zdHIoc2VsZi5kZXAsIHNjX2V4cHJf
c3RyX2ZuKSkNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5oZWxwIGlzIG5vdCBOb25lOg0K
ICAgICsgICAgICAgICAgICBpbmRlbnRfYWRkKCJoZWxwIikNCiAgICArICAgICAgICAgICAgZm9y
IGxpbmUgaW4gc2VsZi5oZWxwLnNwbGl0bGluZXMoKToNCiAgICArICAgICAgICAgICAgICAgIGlu
ZGVudF9hZGQoIiAgIiArIGxpbmUpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiAiXG4iLmpv
aW4obGluZXMpDQogICAgKw0KICAgICsgICAgZGVmIF9zdHJpcF9kZXAoc2VsZiwgZXhwcik6DQog
ICAgKyAgICAgICAgIyBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlbW92aW5nIE1lbnVOb2RlLmRlcCBm
cm9tICdleHByJy4gVXNlcyB0d28NCiAgICArICAgICAgICAjIHBpZWNlcyBvZiBpbnRlcm5hbCBr
bm93bGVkZ2U6ICgxKSBFeHByZXNzaW9ucyBhcmUgcmV1c2VkIHJhdGhlciB0aGFuDQogICAgKyAg
ICAgICAgIyBjb3BpZWQsIGFuZCAoMikgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgYWx3YXlzIGFw
cGVhciBhdCB0aGUgZW5kLg0KICAgICsNCiAgICArICAgICAgICAjIC4uLiBpZiBkZXAgLT4gLi4u
IGlmIHkNCiAgICArICAgICAgICBpZiBzZWxmLmRlcCBpcyBleHByOg0KICAgICsgICAgICAgICAg
ICByZXR1cm4gc2VsZi5rY29uZmlnLnkNCiAgICArDQogICAgKyAgICAgICAgIyAoQU5ELCBYLCBk
ZXApIC0+IFgNCiAgICArICAgICAgICBpZiBleHByLl9fY2xhc3NfXyBpcyB0dXBsZSBhbmQgZXhw
clswXSBpcyBBTkQgYW5kIGV4cHJbMl0gaXMgc2VsZi5kZXA6DQogICAgKyAgICAgICAgICAgIHJl
dHVybiBleHByWzFdDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiBleHByDQogICAgKw0KICAg
ICsNCiAgICArY2xhc3MgVmFyaWFibGUob2JqZWN0KToNCiAgICArICAgICIiIg0KICAgICsgICAg
UmVwcmVzZW50cyBhIHByZXByb2Nlc3NvciB2YXJpYWJsZS9mdW5jdGlvbi4NCiAgICArDQogICAg
KyAgICBUaGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgYXJlIGF2YWlsYWJsZToNCiAgICArDQogICAg
KyAgICBuYW1lOg0KICAgICsgICAgICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuDQogICAgKw0K
ICAgICsgICAgdmFsdWU6DQogICAgKyAgICAgIFRoZSB1bmV4cGFuZGVkIHZhbHVlIG9mIHRoZSB2
YXJpYWJsZS4NCiAgICArDQogICAgKyAgICBleHBhbmRlZF92YWx1ZToNCiAgICArICAgICAgVGhl
IGV4cGFuZGVkIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS4gRm9yIHNpbXBsZSB2YXJpYWJsZXMgKHRo
b3NlIGRlZmluZWQNCiAgICArICAgICAgd2l0aCA6PSksIHRoaXMgd2lsbCBlcXVhbCAndmFsdWUn
LiBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSB3aWxsIHJhaXNlIGENCiAgICArICAgICAgS2NvbmZp
Z0Vycm9yIGlmIHRoZSBleHBhbnNpb24gc2VlbXMgdG8gYmUgc3R1Y2sgaW4gYSBsb29wLg0KICAg
ICsNCiAgICArICAgICAgQWNjZXNzaW5nIHRoaXMgZmllbGQgaXMgdGhlIHNhbWUgYXMgY2FsbGlu
ZyBleHBhbmRlZF92YWx1ZV93X2FyZ3MoKSB3aXRoDQogICAgKyAgICAgIG5vIGFyZ3VtZW50cy4g
SSBoYWRuJ3QgY29uc2lkZXJlZCBmdW5jdGlvbiBhcmd1bWVudHMgd2hlbiBhZGRpbmcgaXQuIEl0
DQogICAgKyAgICAgIGlzIHJldGFpbmVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB0aG91
Z2guDQogICAgKw0KICAgICsgICAgaXNfcmVjdXJzaXZlOg0KICAgICsgICAgICBUcnVlIGlmIHRo
ZSB2YXJpYWJsZSBpcyByZWN1cnNpdmUgKGRlZmluZWQgd2l0aCA9KS4NCiAgICArICAgICIiIg0K
ICAgICsgICAgX19zbG90c19fID0gKA0KICAgICsgICAgICAgICJfbl9leHBhbnNpb25zIiwNCiAg
ICArICAgICAgICAiaXNfcmVjdXJzaXZlIiwNCiAgICArICAgICAgICAia2NvbmZpZyIsDQogICAg
KyAgICAgICAgIm5hbWUiLA0KICAgICsgICAgICAgICJ2YWx1ZSIsDQogICAgKyAgICApDQogICAg
Kw0KICAgICsgICAgQHByb3BlcnR5DQogICAgKyAgICBkZWYgZXhwYW5kZWRfdmFsdWUoc2VsZik6
DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgU2VlIHRoZSBjbGFzcyBkb2N1bWVudGF0
aW9uLg0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLmV4cGFuZGVk
X3ZhbHVlX3dfYXJncygpDQogICAgKw0KICAgICsgICAgZGVmIGV4cGFuZGVkX3ZhbHVlX3dfYXJn
cyhzZWxmLCAqYXJncyk6DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgUmV0dXJucyB0
aGUgZXhwYW5kZWQgdmFsdWUgb2YgdGhlIHZhcmlhYmxlL2Z1bmN0aW9uLiBBbnkgYXJndW1lbnRz
DQogICAgKyAgICAgICAgcGFzc2VkIHdpbGwgYmUgc3Vic3RpdHV0ZWQgZm9yICQoMSksICQoMiks
IGV0Yy4NCiAgICArDQogICAgKyAgICAgICAgUmFpc2VzIGEgS2NvbmZpZ0Vycm9yIGlmIHRoZSBl
eHBhbnNpb24gc2VlbXMgdG8gYmUgc3R1Y2sgaW4gYSBsb29wLg0KICAgICsgICAgICAgICIiIg0K
ICAgICsgICAgICAgIHJldHVybiBzZWxmLmtjb25maWcuX2ZuX3ZhbCgoc2VsZi5uYW1lLCkgKyBh
cmdzKQ0KICAgICsNCiAgICArICAgIGRlZiBfX3JlcHJfXyhzZWxmKToNCiAgICArICAgICAgICBy
ZXR1cm4gIjx2YXJpYWJsZSB7fSwge30sIHZhbHVlICd7fSc+IiBcDQogICAgKyAgICAgICAgICAg
ICAgIC5mb3JtYXQoc2VsZi5uYW1lLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICJyZWN1
cnNpdmUiIGlmIHNlbGYuaXNfcmVjdXJzaXZlIGVsc2UgImltbWVkaWF0ZSIsDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSkNCiAgICArDQogICAgKw0KICAgICtjbGFzcyBL
Y29uZmlnRXJyb3IoRXhjZXB0aW9uKToNCiAgICArICAgICIiIg0KICAgICsgICAgRXhjZXB0aW9u
IHJhaXNlZCBmb3IgS2NvbmZpZy1yZWxhdGVkIGVycm9ycy4NCiAgICArDQogICAgKyAgICBLY29u
ZmlnRXJyb3IgYW5kIEtjb25maWdTeW50YXhFcnJvciBhcmUgdGhlIHNhbWUgY2xhc3MuIFRoZQ0K
ICAgICsgICAgS2NvbmZpZ1N5bnRheEVycm9yIGFsaWFzIGlzIG9ubHkgbWFpbnRhaW5lZCBmb3Ig
YmFja3dhcmRzIGNvbXBhdGliaWxpdHkuDQogICAgKyAgICAiIiINCiAgICArDQogICAgK0tjb25m
aWdTeW50YXhFcnJvciA9IEtjb25maWdFcnJvciAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eQ0K
ICAgICsNCiAgICArDQogICAgK2NsYXNzIEludGVybmFsRXJyb3IoRXhjZXB0aW9uKToNCiAgICAr
ICAgICJOZXZlciByYWlzZWQuIEtlcHQgYXJvdW5kIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0
eS4iDQogICAgKw0KICAgICsNCiAgICArIyBXb3JrYXJvdW5kOg0KICAgICsjDQogICAgKyMgSWYg
J2Vycm5vJyBhbmQgJ3N0cmVycm9yJyBhcmUgc2V0IG9uIElPRXJyb3IsIHRoZW4gX19zdHJfXygp
IGFsd2F5cyByZXR1cm5zDQogICAgKyMgIltFcnJubyA8ZXJybm8+XSA8c3RyZXJyb3I+IiwgaWdu
b3JpbmcgYW55IGN1c3RvbSBtZXNzYWdlIHBhc3NlZCB0byB0aGUNCiAgICArIyBjb25zdHJ1Y3Rv
ci4gQnkgZGVmaW5pbmcgb3VyIG93biBzdWJjbGFzcywgd2UgY2FuIHVzZSBhIGN1c3RvbSBtZXNz
YWdlIHdoaWxlDQogICAgKyMgYWxzbyBwcm92aWRpbmcgJ2Vycm5vJywgJ3N0cmVycm9yJywgYW5k
ICdmaWxlbmFtZScgdG8gc2NyaXB0cy4NCiAgICArY2xhc3MgX0tjb25maWdJT0Vycm9yKElPRXJy
b3IpOg0KICAgICsgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlvZXJyb3IsIG1zZyk6DQogICAgKyAg
ICAgICAgc2VsZi5tc2cgPSBtc2cNCiAgICArICAgICAgICBzdXBlcihfS2NvbmZpZ0lPRXJyb3Is
IHNlbGYpLl9faW5pdF9fKA0KICAgICsgICAgICAgICAgICBpb2Vycm9yLmVycm5vLCBpb2Vycm9y
LnN0cmVycm9yLCBpb2Vycm9yLmZpbGVuYW1lKQ0KICAgICsNCiAgICArICAgIGRlZiBfX3N0cl9f
KHNlbGYpOg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLm1zZw0KICAgICsNCiAgICArDQogICAg
KyMNCiAgICArIyBQdWJsaWMgZnVuY3Rpb25zDQogICAgKyMNCiAgICArDQogICAgKw0KICAgICtk
ZWYgZXhwcl92YWx1ZShleHByKToNCiAgICArICAgICIiIg0KICAgICsgICAgRXZhbHVhdGVzIHRo
ZSBleHByZXNzaW9uICdleHByJyB0byBhIHRyaXN0YXRlIHZhbHVlLiBSZXR1cm5zIDAgKG4pLCAx
IChtKSwNCiAgICArICAgIG9yIDIgKHkpLg0KICAgICsNCiAgICArICAgICdleHByJyBtdXN0IGJl
IGFuIGFscmVhZHktcGFyc2VkIGV4cHJlc3Npb24gZnJvbSBhIFN5bWJvbCwgQ2hvaWNlLCBvcg0K
ICAgICsgICAgTWVudU5vZGUgcHJvcGVydHkuIFRvIGV2YWx1YXRlIGFuIGV4cHJlc3Npb24gcmVw
cmVzZW50ZWQgYXMgYSBzdHJpbmcsIHVzZQ0KICAgICsgICAgS2NvbmZpZy5ldmFsX3N0cmluZygp
Lg0KICAgICsNCiAgICArICAgIFBhc3Npbmcgc3ViZXhwcmVzc2lvbnMgb2YgZXhwcmVzc2lvbnMg
dG8gdGhpcyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4NCiAgICArICAgICIiIg0KICAgICsg
ICAgaWYgZXhwci5fX2NsYXNzX18gaXMgbm90IHR1cGxlOg0KICAgICsgICAgICAgIHJldHVybiBl
eHByLnRyaV92YWx1ZQ0KICAgICsNCiAgICArICAgIGlmIGV4cHJbMF0gaXMgQU5EOg0KICAgICsg
ICAgICAgIHYxID0gZXhwcl92YWx1ZShleHByWzFdKQ0KICAgICsgICAgICAgICMgU2hvcnQtY2ly
Y3VpdCB0aGUgbiBjYXNlIGFzIGFuIG9wdGltaXphdGlvbiAofjUlIGZhc3Rlcg0KICAgICsgICAg
ICAgICMgYWxsbm9jb25maWcucHkgYW5kIGFsbHllc2NvbmZpZy5weSwgYXMgb2Ygd3JpdGluZykN
CiAgICArICAgICAgICByZXR1cm4gMCBpZiBub3QgdjEgZWxzZSBtaW4odjEsIGV4cHJfdmFsdWUo
ZXhwclsyXSkpDQogICAgKw0KICAgICsgICAgaWYgZXhwclswXSBpcyBPUjoNCiAgICArICAgICAg
ICB2MSA9IGV4cHJfdmFsdWUoZXhwclsxXSkNCiAgICArICAgICAgICAjIFNob3J0LWNpcmN1aXQg
dGhlIHkgY2FzZSBhcyBhbiBvcHRpbWl6YXRpb24NCiAgICArICAgICAgICByZXR1cm4gMiBpZiB2
MSA9PSAyIGVsc2UgbWF4KHYxLCBleHByX3ZhbHVlKGV4cHJbMl0pKQ0KICAgICsNCiAgICArICAg
IGlmIGV4cHJbMF0gaXMgTk9UOg0KICAgICsgICAgICAgIHJldHVybiAyIC0gZXhwcl92YWx1ZShl
eHByWzFdKQ0KICAgICsNCiAgICArICAgICMgUmVsYXRpb24NCiAgICArICAgICMNCiAgICArICAg
ICMgSW1wbGVtZW50cyA8LCA8PSwgPiwgPj0gY29tcGFyaXNvbnMgYXMgd2VsbC4gVGhlc2Ugd2Vy
ZSBhZGRlZCB0bw0KICAgICsgICAgIyBrY29uZmlnIGluIDMxODQ3YjY3IChrY29uZmlnOiBhbGxv
dyB1c2Ugb2YgcmVsYXRpb25zIG90aGVyIHRoYW4NCiAgICArICAgICMgKGluKWVxdWFsaXR5KS4N
CiAgICArDQogICAgKyAgICByZWwsIHYxLCB2MiA9IGV4cHINCiAgICArDQogICAgKyAgICAjIElm
IGJvdGggb3BlcmFuZHMgYXJlIHN0cmluZ3MuLi4NCiAgICArICAgIGlmIHYxLm9yaWdfdHlwZSBp
cyBTVFJJTkcgYW5kIHYyLm9yaWdfdHlwZSBpcyBTVFJJTkc6DQogICAgKyAgICAgICAgIyAuLi50
aGVuIGNvbXBhcmUgdGhlbSBsZXhpY29ncmFwaGljYWxseQ0KICAgICsgICAgICAgIGNvbXAgPSBf
c3RyY21wKHYxLnN0cl92YWx1ZSwgdjIuc3RyX3ZhbHVlKQ0KICAgICsgICAgZWxzZToNCiAgICAr
ICAgICAgICAjIE90aGVyd2lzZSwgdHJ5IHRvIGNvbXBhcmUgdGhlbSBhcyBudW1iZXJzDQogICAg
KyAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBjb21wID0gX3N5bV90b19udW0odjEpIC0g
X3N5bV90b19udW0odjIpDQogICAgKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6DQogICAgKyAg
ICAgICAgICAgICMgRmFsbCBiYWNrIG9uIGEgbGV4aWNvZ3JhcGhpYyBjb21wYXJpc29uIGlmIHRo
ZSBvcGVyYW5kcyBkb24ndA0KICAgICsgICAgICAgICAgICAjIHBhcnNlIGFzIG51bWJlcnMNCiAg
ICArICAgICAgICAgICAgY29tcCA9IF9zdHJjbXAodjEuc3RyX3ZhbHVlLCB2Mi5zdHJfdmFsdWUp
DQogICAgKw0KICAgICsgICAgcmV0dXJuIDIqKGNvbXAgPT0gMCBpZiByZWwgaXMgRVFVQUwgZWxz
ZQ0KICAgICsgICAgICAgICAgICAgIGNvbXAgIT0gMCBpZiByZWwgaXMgVU5FUVVBTCBlbHNlDQog
ICAgKyAgICAgICAgICAgICAgY29tcCA8ICAwIGlmIHJlbCBpcyBMRVNTIGVsc2UNCiAgICArICAg
ICAgICAgICAgICBjb21wIDw9IDAgaWYgcmVsIGlzIExFU1NfRVFVQUwgZWxzZQ0KICAgICsgICAg
ICAgICAgICAgIGNvbXAgPiAgMCBpZiByZWwgaXMgR1JFQVRFUiBlbHNlDQogICAgKyAgICAgICAg
ICAgICAgY29tcCA+PSAwKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBzdGFuZGFyZF9zY19leHBy
X3N0cihzYyk6DQogICAgKyAgICAiIiINCiAgICArICAgIFN0YW5kYXJkIHN5bWJvbC9jaG9pY2Ug
cHJpbnRpbmcgZnVuY3Rpb24uIFVzZXMgcGxhaW4gS2NvbmZpZyBzeW50YXgsIGFuZA0KICAgICsg
ICAgZGlzcGxheXMgY2hvaWNlcyBhcyA8Y2hvaWNlPiAob3IgPGNob2ljZSBOQU1FPiwgZm9yIG5h
bWVkIGNob2ljZXMpLg0KICAgICsNCiAgICArICAgIFNlZSBleHByX3N0cigpLg0KICAgICsgICAg
IiIiDQogICAgKyAgICBpZiBzYy5fX2NsYXNzX18gaXMgU3ltYm9sOg0KICAgICsgICAgICAgIGlm
IHNjLmlzX2NvbnN0YW50IGFuZCBzYy5uYW1lIG5vdCBpbiBTVFJfVE9fVFJJOg0KICAgICsgICAg
ICAgICAgICByZXR1cm4gJyJ7fSInLmZvcm1hdChlc2NhcGUoc2MubmFtZSkpDQogICAgKyAgICAg
ICAgcmV0dXJuIHNjLm5hbWUNCiAgICArDQogICAgKyAgICByZXR1cm4gIjxjaG9pY2Uge30+Ii5m
b3JtYXQoc2MubmFtZSkgaWYgc2MubmFtZSBlbHNlICI8Y2hvaWNlPiINCiAgICArDQogICAgKw0K
ICAgICtkZWYgZXhwcl9zdHIoZXhwciwgc2NfZXhwcl9zdHJfZm49c3RhbmRhcmRfc2NfZXhwcl9z
dHIpOg0KICAgICsgICAgIiIiDQogICAgKyAgICBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50
YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gJ2V4cHInLCBhcyBpbiBhIEtjb25maWcNCiAgICArICAg
IGZpbGUuDQogICAgKw0KICAgICsgICAgUGFzc2luZyBzdWJleHByZXNzaW9ucyBvZiBleHByZXNz
aW9ucyB0byB0aGlzIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLg0KICAgICsNCiAgICArICAg
IHNjX2V4cHJfc3RyX2ZuIChkZWZhdWx0OiBzdGFuZGFyZF9zY19leHByX3N0cik6DQogICAgKyAg
ICAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBldmVyeSBzeW1ib2wvY2hvaWNlIChoZW5j
ZSAic2MiKSBhcHBlYXJpbmcgaW4NCiAgICArICAgICAgdGhlIGV4cHJlc3Npb24sIHdpdGggdGhl
IHN5bWJvbC9jaG9pY2UgYXMgdGhlIGFyZ3VtZW50LiBJdCBpcyBleHBlY3RlZCB0bw0KICAgICsg
ICAgICByZXR1cm4gYSBzdHJpbmcgdG8gYmUgdXNlZCBmb3IgdGhlIHN5bWJvbC9jaG9pY2UuDQog
ICAgKw0KICAgICsgICAgICBUaGlzIGNhbiBiZSB1c2VkIGUuZy4gdG8gdHVybiBzeW1ib2xzL2No
b2ljZXMgaW50byBsaW5rcyB3aGVuIGdlbmVyYXRpbmcNCiAgICArICAgICAgZG9jdW1lbnRhdGlv
biwgb3IgZm9yIHByaW50aW5nIHRoZSB2YWx1ZSBvZiBlYWNoIHN5bWJvbC9jaG9pY2UgYWZ0ZXIg
aXQuDQogICAgKw0KICAgICsgICAgICBOb3RlIHRoYXQgcXVvdGVkIHZhbHVlcyBhcmUgcmVwcmVz
ZW50ZWQgYXMgY29uc3RhbnRzIHN5bWJvbHMNCiAgICArICAgICAgKFN5bWJvbC5pc19jb25zdGFu
dCA9PSBUcnVlKS4NCiAgICArICAgICIiIg0KICAgICsgICAgaWYgZXhwci5fX2NsYXNzX18gaXMg
bm90IHR1cGxlOg0KICAgICsgICAgICAgIHJldHVybiBzY19leHByX3N0cl9mbihleHByKQ0KICAg
ICsNCiAgICArICAgIGlmIGV4cHJbMF0gaXMgQU5EOg0KICAgICsgICAgICAgIHJldHVybiAie30g
JiYge30iLmZvcm1hdChfcGFyZW50aGVzaXplKGV4cHJbMV0sIE9SLCBzY19leHByX3N0cl9mbiks
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJlbnRoZXNpemUoZXhw
clsyXSwgT1IsIHNjX2V4cHJfc3RyX2ZuKSkNCiAgICArDQogICAgKyAgICBpZiBleHByWzBdIGlz
IE9SOg0KICAgICsgICAgICAgICMgVGhpcyB0dXJucyBBICYmIEIgfHwgQyAmJiBEIGludG8gIihB
ICYmIEIpIHx8IChDICYmIEQpIiwgd2hpY2ggaXMNCiAgICArICAgICAgICAjIHJlZHVuZGFudCwg
YnV0IG1vcmUgcmVhZGFibGUNCiAgICArICAgICAgICByZXR1cm4gInt9IHx8IHt9Ii5mb3JtYXQo
X3BhcmVudGhlc2l6ZShleHByWzFdLCBBTkQsIHNjX2V4cHJfc3RyX2ZuKSwNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhcmVudGhlc2l6ZShleHByWzJdLCBBTkQsIHNj
X2V4cHJfc3RyX2ZuKSkNCiAgICArDQogICAgKyAgICBpZiBleHByWzBdIGlzIE5PVDoNCiAgICAr
ICAgICAgICBpZiBleHByWzFdLl9fY2xhc3NfXyBpcyB0dXBsZToNCiAgICArICAgICAgICAgICAg
cmV0dXJuICIhKHt9KSIuZm9ybWF0KGV4cHJfc3RyKGV4cHJbMV0sIHNjX2V4cHJfc3RyX2ZuKSkN
CiAgICArICAgICAgICByZXR1cm4gIiEiICsgc2NfZXhwcl9zdHJfZm4oZXhwclsxXSkgICMgU3lt
Ym9sDQogICAgKw0KICAgICsgICAgIyBSZWxhdGlvbg0KICAgICsgICAgIw0KICAgICsgICAgIyBS
ZWxhdGlvbiBvcGVyYW5kcyBhcmUgYWx3YXlzIHN5bWJvbHMgKHF1b3RlZCBzdHJpbmdzIGFyZSBj
b25zdGFudA0KICAgICsgICAgIyBzeW1ib2xzKQ0KICAgICsgICAgcmV0dXJuICJ7fSB7fSB7fSIu
Zm9ybWF0KHNjX2V4cHJfc3RyX2ZuKGV4cHJbMV0pLCBSRUxfVE9fU1RSW2V4cHJbMF1dLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjX2V4cHJfc3RyX2ZuKGV4cHJbMl0pKQ0K
ICAgICsNCiAgICArDQogICAgK2RlZiBleHByX2l0ZW1zKGV4cHIpOg0KICAgICsgICAgIiIiDQog
ICAgKyAgICBSZXR1cm5zIGEgc2V0KCkgb2YgYWxsIGl0ZW1zIChzeW1ib2xzIGFuZCBjaG9pY2Vz
KSB0aGF0IGFwcGVhciBpbiB0aGUNCiAgICArICAgIGV4cHJlc3Npb24gJ2V4cHInLg0KICAgICsN
CiAgICArICAgIFBhc3Npbmcgc3ViZXhwcmVzc2lvbnMgb2YgZXhwcmVzc2lvbnMgdG8gdGhpcyBm
dW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4NCiAgICArICAgICIiIg0KICAgICsgICAgcmVzID0g
c2V0KCkNCiAgICArDQogICAgKyAgICBkZWYgcmVjKHN1YmV4cHIpOg0KICAgICsgICAgICAgIGlm
IHN1YmV4cHIuX19jbGFzc19fIGlzIHR1cGxlOg0KICAgICsgICAgICAgICAgICAjIEFORCwgT1Is
IE5PVCwgb3IgcmVsYXRpb24NCiAgICArDQogICAgKyAgICAgICAgICAgIHJlYyhzdWJleHByWzFd
KQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyBOT1RzIG9ubHkgaGF2ZSBhIHNpbmdsZSBvcGVy
YW5kDQogICAgKyAgICAgICAgICAgIGlmIHN1YmV4cHJbMF0gaXMgbm90IE5PVDoNCiAgICArICAg
ICAgICAgICAgICAgIHJlYyhzdWJleHByWzJdKQ0KICAgICsNCiAgICArICAgICAgICBlbHNlOg0K
ICAgICsgICAgICAgICAgICAjIFN5bWJvbCBvciBjaG9pY2UNCiAgICArICAgICAgICAgICAgcmVz
LmFkZChzdWJleHByKQ0KICAgICsNCiAgICArICAgIHJlYyhleHByKQ0KICAgICsgICAgcmV0dXJu
IHJlcw0KICAgICsNCiAgICArDQogICAgK2RlZiBzcGxpdF9leHByKGV4cHIsIG9wKToNCiAgICAr
ICAgICIiIg0KICAgICsgICAgUmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUgdG9wLWxldmVs
IEFORCBvciBPUiBvcGVyYW5kcyBpbiB0aGUNCiAgICArICAgIGV4cHJlc3Npb24gJ2V4cHInLCBp
biB0aGUgc2FtZSAobGVmdC10by1yaWdodCkgb3JkZXIgYXMgdGhleSBhcHBlYXIgaW4NCiAgICAr
ICAgIHRoZSBleHByZXNzaW9uLg0KICAgICsNCiAgICArICAgIFRoaXMgY2FuIGJlIGhhbmR5IGUu
Zy4gZm9yIHNwbGl0dGluZyAod2VhaykgcmV2ZXJzZSBkZXBlbmRlbmNpZXMNCiAgICArICAgIGZy
b20gJ3NlbGVjdCcgYW5kICdpbXBseScgaW50byBpbmRpdmlkdWFsIHNlbGVjdHMvaW1wbGllcy4N
CiAgICArDQogICAgKyAgICBvcDoNCiAgICArICAgICAgRWl0aGVyIEFORCB0byBnZXQgQU5EIG9w
ZXJhbmRzLCBvciBPUiB0byBnZXQgT1Igb3BlcmFuZHMuDQogICAgKw0KICAgICsgICAgICAoSGF2
aW5nIHRoaXMgYXMgYW4gb3BlcmFuZCBtaWdodCBiZSBtb3JlIGZ1dHVyZS1zYWZlIHRoYW4gaGF2
aW5nIHR3bw0KICAgICsgICAgICBoYXJkY29kZWQgZnVuY3Rpb25zLikNCiAgICArDQogICAgKw0K
ICAgICsgICAgUHNldWRvLWNvZGUgZXhhbXBsZXM6DQogICAgKw0KICAgICsgICAgICBzcGxpdF9l
eHByKCBBICAgICAgICAgICAgICAgICAgICAsIE9SICApICAtPiAgW0FdDQogICAgKyAgICAgIHNw
bGl0X2V4cHIoIEEgJiYgQiAgICAgICAgICAgICAgICwgT1IgICkgIC0+ICBbQSAmJiBCXQ0KICAg
ICsgICAgICBzcGxpdF9leHByKCBBIHx8IEIgICAgICAgICAgICAgICAsIE9SICApICAtPiAgW0Es
IEJdDQogICAgKyAgICAgIHNwbGl0X2V4cHIoIEEgfHwgQiAgICAgICAgICAgICAgICwgQU5EICkg
IC0+ICBbQSB8fCBCXQ0KICAgICsgICAgICBzcGxpdF9leHByKCBBIHx8IEIgfHwgKEMgJiYgRCkg
ICAsIE9SICApICAtPiAgW0EsIEIsIEMgJiYgRF0NCiAgICArDQogICAgKyAgICAgICMgU2Vjb25k
IHx8IGlzIG5vdCBhdCB0aGUgdG9wIGxldmVsDQogICAgKyAgICAgIHNwbGl0X2V4cHIoIEEgfHwg
KEIgJiYgKEMgfHwgRCkpICwgT1IgKSAgLT4gIFtBLCBCICYmIChDIHx8IEQpXQ0KICAgICsNCiAg
ICArICAgICAgIyBQYXJlbnRoZXNlcyBkb24ndCBtYXR0ZXIgYXMgbG9uZyBhcyB3ZSBzdGF5IGF0
IHRoZSB0b3AgbGV2ZWwgKGRvbid0DQogICAgKyAgICAgICMgZW5jb3VudGVyIGFueSBub24tJ29w
JyBub2RlcykNCiAgICArICAgICAgc3BsaXRfZXhwciggKEEgfHwgQikgfHwgQyAgICAgICAgLCBP
UiApICAtPiAgW0EsIEIsIENdDQogICAgKyAgICAgIHNwbGl0X2V4cHIoIEEgfHwgKEIgfHwgQykg
ICAgICAgICwgT1IgKSAgLT4gIFtBLCBCLCBDXQ0KICAgICsgICAgIiIiDQogICAgKyAgICByZXMg
PSBbXQ0KICAgICsNCiAgICArICAgIGRlZiByZWMoc3ViZXhwcik6DQogICAgKyAgICAgICAgaWYg
c3ViZXhwci5fX2NsYXNzX18gaXMgdHVwbGUgYW5kIHN1YmV4cHJbMF0gaXMgb3A6DQogICAgKyAg
ICAgICAgICAgIHJlYyhzdWJleHByWzFdKQ0KICAgICsgICAgICAgICAgICByZWMoc3ViZXhwclsy
XSkNCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICByZXMuYXBwZW5kKHN1YmV4
cHIpDQogICAgKw0KICAgICsgICAgcmVjKGV4cHIpDQogICAgKyAgICByZXR1cm4gcmVzDQogICAg
Kw0KICAgICsNCiAgICArZGVmIGVzY2FwZShzKToNCiAgICArICAgIHIiIiINCiAgICArICAgIEVz
Y2FwZXMgdGhlIHN0cmluZyAncycgaW4gdGhlIHNhbWUgZmFzaGlvbiBhcyBpcyBkb25lIGZvciBk
aXNwbGF5IGluDQogICAgKyAgICBLY29uZmlnIGZvcm1hdCBhbmQgd2hlbiB3cml0aW5nIHN0cmlu
Z3MgdG8gYSAuY29uZmlnIGZpbGUuICIgYW5kIFwgYXJlDQogICAgKyAgICByZXBsYWNlZCBieSBc
IiBhbmQgXFwsIHJlc3BlY3RpdmVseS4NCiAgICArICAgICIiIg0KICAgICsgICAgIyBcIG11c3Qg
YmUgZXNjYXBlZCBiZWZvcmUgIiB0byBhdm9pZCBkb3VibGUgZXNjYXBpbmcNCiAgICArICAgIHJl
dHVybiBzLnJlcGxhY2UoIlxcIiwgciJcXCIpLnJlcGxhY2UoJyInLCByJ1wiJykNCiAgICArDQog
ICAgKw0KICAgICtkZWYgdW5lc2NhcGUocyk6DQogICAgKyAgICByIiIiDQogICAgKyAgICBVbmVz
Y2FwZXMgdGhlIHN0cmluZyAncycuIFwgZm9sbG93ZWQgYnkgYW55IGNoYXJhY3RlciBpcyByZXBs
YWNlZCB3aXRoIGp1c3QNCiAgICArICAgIHRoYXQgY2hhcmFjdGVyLiBVc2VkIGludGVybmFsbHkg
d2hlbiByZWFkaW5nIC5jb25maWcgZmlsZXMuDQogICAgKyAgICAiIiINCiAgICArICAgIHJldHVy
biBfdW5lc2NhcGVfc3ViKHIiXDEiLCBzKQ0KICAgICsNCiAgICArIyB1bmVzY2FwZSgpIGhlbHBl
cg0KICAgICtfdW5lc2NhcGVfc3ViID0gcmUuY29tcGlsZShyIlxcKC4pIikuc3ViDQogICAgKw0K
ICAgICsNCiAgICArZGVmIHN0YW5kYXJkX2tjb25maWcoKToNCiAgICArICAgICIiIg0KICAgICsg
ICAgSGVscGVyIGZvciB0b29scy4gTG9hZHMgdGhlIHRvcC1sZXZlbCBLY29uZmlnIHNwZWNpZmll
ZCBhcyB0aGUgZmlyc3QNCiAgICArICAgIGNvbW1hbmQtbGluZSBhcmd1bWVudCwgb3IgIktjb25m
aWciIGlmIHRoZXJlIGFyZSBubyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLg0KICAgICsgICAgUmV0
dXJucyB0aGUgS2NvbmZpZyBpbnN0YW5jZS4NCiAgICArDQogICAgKyAgICBFeGl0cyB3aXRoIHN5
cy5leGl0KCkgKHdoaWNoIHJhaXNlcyBhIFN5c3RlbUV4aXQgZXhjZXB0aW9uKSBhbmQgcHJpbnRz
IGENCiAgICArICAgIHVzYWdlIG5vdGUgdG8gc3RkZXJyIGlmIG1vcmUgdGhhbiBvbmUgY29tbWFu
ZC1saW5lIGFyZ3VtZW50IGlzIHBhc3NlZC4NCiAgICArICAgICIiIg0KICAgICsgICAgaWYgbGVu
KHN5cy5hcmd2KSA+IDI6DQogICAgKyAgICAgICAgc3lzLmV4aXQoInVzYWdlOiB7fSBbS2NvbmZp
Z10iLmZvcm1hdChzeXMuYXJndlswXSkpDQogICAgKw0KICAgICsgICAgIyBPbmx5IHNob3cgYmFj
a3RyYWNlcyBmb3IgdW5leHBlY3RlZCBleGNlcHRpb25zDQogICAgKyAgICB0cnk6DQogICAgKyAg
ICAgICAgcmV0dXJuIEtjb25maWcoIktjb25maWciIGlmIGxlbihzeXMuYXJndikgPCAyIGVsc2Ug
c3lzLmFyZ3ZbMV0pDQogICAgKyAgICBleGNlcHQgKEVudmlyb25tZW50RXJyb3IsIEtjb25maWdF
cnJvcikgYXMgZToNCiAgICArICAgICAgICAjIFNvbWUgbG9uZyBleGNlcHRpb24gbWVzc2FnZXMg
aGF2ZSBleHRyYSBuZXdsaW5lcyBmb3IgYmV0dGVyDQogICAgKyAgICAgICAgIyBmb3JtYXR0aW5n
IHdoZW4gcmVwb3J0ZWQgYXMgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi4gU3RyaXAgdGhlbSBoZXJl
Lg0KICAgICsgICAgICAgIHN5cy5leGl0KHN0cihlKS5zdHJpcCgpKQ0KICAgICsNCiAgICArDQog
ICAgK2RlZiBzdGFuZGFyZF9jb25maWdfZmlsZW5hbWUoKToNCiAgICArICAgICIiIg0KICAgICsg
ICAgSGVscGVyIGZvciB0b29scy4gUmV0dXJucyB0aGUgdmFsdWUgb2YgS0NPTkZJR19DT05GSUcg
KHdoaWNoIHNwZWNpZmllcyB0aGUNCiAgICArICAgIC5jb25maWcgZmlsZSB0byBsb2FkL3NhdmUp
IGlmIGl0IGlzIHNldCwgYW5kICIuY29uZmlnIiBvdGhlcndpc2UuDQogICAgKw0KICAgICsgICAg
Q2FsbGluZyBsb2FkX2NvbmZpZygpIHdpdGggZmlsZW5hbWU9Tm9uZSBtaWdodCBnaXZlIHRoZSBi
ZWhhdmlvciB5b3Ugd2FudCwNCiAgICArICAgIHdpdGhvdXQgaGF2aW5nIHRvIHVzZSB0aGlzIGZ1
bmN0aW9uLg0KICAgICsgICAgIiIiDQogICAgKyAgICByZXR1cm4gb3MuZ2V0ZW52KCJLQ09ORklH
X0NPTkZJRyIsICIuY29uZmlnIikNCiAgICArDQogICAgKw0KICAgICtkZWYgbG9hZF9hbGxjb25m
aWcoa2NvbmYsIGZpbGVuYW1lKToNCiAgICArICAgICIiIg0KICAgICsgICAgSGVscGVyIGZvciBh
bGwqY29uZmlnLiBMb2FkcyAobWVyZ2VzKSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHNwZWNpZmll
ZCBieQ0KICAgICsgICAgS0NPTkZJR19BTExDT05GSUcsIGlmIGFueS4gU2VlIERvY3VtZW50YXRp
b24va2J1aWxkL2tjb25maWcudHh0IGluIHRoZQ0KICAgICsgICAgTGludXgga2VybmVsLg0KICAg
ICsNCiAgICArICAgIERpc2FibGVzIHdhcm5pbmdzIGZvciBkdXBsaWNhdGVkIGFzc2lnbm1lbnRz
IHdpdGhpbiBjb25maWd1cmF0aW9uIGZpbGVzIGZvcg0KICAgICsgICAgdGhlIGR1cmF0aW9uIG9m
IHRoZSBjYWxsIChrY29uZi53YXJuX2Fzc2lnbl9vdmVycmlkZS93YXJuX2Fzc2lnbl9yZWR1biA9
IEZhbHNlKSwNCiAgICArICAgIGFuZCByZXN0b3JlcyB0aGUgcHJldmlvdXMgd2FybmluZyBzZXR0
aW5ncyBhdCB0aGUgZW5kLiBUaGUNCiAgICArICAgIEtDT05GSUdfQUxMQ09ORklHIGNvbmZpZ3Vy
YXRpb24gZmlsZSBpcyBleHBlY3RlZCB0byBvdmVycmlkZSBzeW1ib2xzLg0KICAgICsNCiAgICAr
ICAgIEV4aXRzIHdpdGggc3lzLmV4aXQoKSAod2hpY2ggcmFpc2VzIGEgU3lzdGVtRXhpdCBleGNl
cHRpb24pIGFuZCBwcmludHMgYW4NCiAgICArICAgIGVycm9yIHRvIHN0ZGVyciBpZiBLQ09ORklH
X0FMTENPTkZJRyBpcyBzZXQgYnV0IHRoZSBjb25maWd1cmF0aW9uIGZpbGUNCiAgICArICAgIGNh
bid0IGJlIG9wZW5lZC4NCiAgICArDQogICAgKyAgICBrY29uZjoNCiAgICArICAgICAgS2NvbmZp
ZyBpbnN0YW5jZSB0byBsb2FkIHRoZSBjb25maWd1cmF0aW9uIGluLg0KICAgICsNCiAgICArICAg
IGZpbGVuYW1lOg0KICAgICsgICAgICBDb21tYW5kLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmls
ZW5hbWUgLSAiYWxseWVzLmNvbmZpZyIsDQogICAgKyAgICAgICJhbGxuby5jb25maWciLCBldGMu
DQogICAgKyAgICAiIiINCiAgICArICAgIGFsbGNvbmZpZyA9IG9zLmdldGVudigiS0NPTkZJR19B
TExDT05GSUciKQ0KICAgICsgICAgaWYgYWxsY29uZmlnIGlzIE5vbmU6DQogICAgKyAgICAgICAg
cmV0dXJuDQogICAgKw0KICAgICsgICAgZGVmIHN0ZF9tc2coZSk6DQogICAgKyAgICAgICAgIyAi
VXBjYXN0cyIgYSBfS2NvbmZpZ0lPRXJyb3IgdG8gYW4gSU9FcnJvciwgcmVtb3ZpbmcgdGhlIGN1
c3RvbQ0KICAgICsgICAgICAgICMgX19zdHJfXygpIG1lc3NhZ2UuIFRoZSBzdGFuZGFyZCBtZXNz
YWdlIGlzIGJldHRlciBoZXJlLg0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjIFRoaXMg
bWlnaHQgYWxzbyBjb252ZXJ0IGFuIE9TRXJyb3IgdG8gYW4gSU9FcnJvciBpbiBvYnNjdXJlIGNh
c2VzLA0KICAgICsgICAgICAgICMgYnV0IGl0J3MgcHJvYmFibHkgbm90IGEgYmlnIGRlYWwuIFRo
ZSBkaXN0aW5jdGlvbiBpcyBzaGFreSAoc2VlDQogICAgKyAgICAgICAgIyBQRVAtMzE1MSkuDQog
ICAgKyAgICAgICAgcmV0dXJuIElPRXJyb3IoZS5lcnJubywgZS5zdHJlcnJvciwgZS5maWxlbmFt
ZSkNCiAgICArDQogICAgKyAgICBvbGRfd2Fybl9hc3NpZ25fb3ZlcnJpZGUgPSBrY29uZi53YXJu
X2Fzc2lnbl9vdmVycmlkZQ0KICAgICsgICAgb2xkX3dhcm5fYXNzaWduX3JlZHVuID0ga2NvbmYu
d2Fybl9hc3NpZ25fcmVkdW4NCiAgICArICAgIGtjb25mLndhcm5fYXNzaWduX292ZXJyaWRlID0g
a2NvbmYud2Fybl9hc3NpZ25fcmVkdW4gPSBGYWxzZQ0KICAgICsNCiAgICArICAgIGlmIGFsbGNv
bmZpZyBpbiAoIiIsICIxIik6DQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBw
cmludChrY29uZi5sb2FkX2NvbmZpZyhmaWxlbmFtZSwgRmFsc2UpKQ0KICAgICsgICAgICAgIGV4
Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGUxOg0KICAgICsgICAgICAgICAgICB0cnk6DQogICAg
KyAgICAgICAgICAgICAgICBwcmludChrY29uZi5sb2FkX2NvbmZpZygiYWxsLmNvbmZpZyIsIEZh
bHNlKSkNCiAgICArICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZTI6DQog
ICAgKyAgICAgICAgICAgICAgICBzeXMuZXhpdCgiZXJyb3I6IEtDT05GSUdfQUxMQ09ORklHIGlz
IHNldCwgYnV0IG5laXRoZXIge30gIg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgIm5v
ciBhbGwuY29uZmlnIGNvdWxkIGJlIG9wZW5lZDoge30sIHt9Ig0KICAgICsgICAgICAgICAgICAg
ICAgICAgICAgICAgLmZvcm1hdChmaWxlbmFtZSwgc3RkX21zZyhlMSksIHN0ZF9tc2coZTIpKSkN
CiAgICArICAgIGVsc2U6DQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBwcmlu
dChrY29uZi5sb2FkX2NvbmZpZyhhbGxjb25maWcsIEZhbHNlKSkNCiAgICArICAgICAgICBleGNl
cHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOg0KICAgICsgICAgICAgICAgICBzeXMuZXhpdCgiZXJy
b3I6IEtDT05GSUdfQUxMQ09ORklHIGlzIHNldCB0byAne30nLCB3aGljaCAiDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYmUgb3BlbmVkOiB7fSINCiAgICArICAgICAgICAg
ICAgICAgICAgICAgLmZvcm1hdChhbGxjb25maWcsIHN0ZF9tc2coZSkpKQ0KICAgICsNCiAgICAr
ICAgIGtjb25mLndhcm5fYXNzaWduX292ZXJyaWRlID0gb2xkX3dhcm5fYXNzaWduX292ZXJyaWRl
DQogICAgKyAgICBrY29uZi53YXJuX2Fzc2lnbl9yZWR1biA9IG9sZF93YXJuX2Fzc2lnbl9yZWR1
bg0KICAgICsNCiAgICArDQogICAgKyMNCiAgICArIyBJbnRlcm5hbCBmdW5jdGlvbnMNCiAgICAr
Iw0KICAgICsNCiAgICArDQogICAgK2RlZiBfdmlzaWJpbGl0eShzYyk6DQogICAgKyAgICAjIFN5
bWJvbHMgYW5kIENob2ljZXMgaGF2ZSBhICJ2aXNpYmlsaXR5IiB0aGF0IGFjdHMgYXMgYW4gdXBw
ZXIgYm91bmQgb24NCiAgICArICAgICMgdGhlIHZhbHVlcyBhIHVzZXIgY2FuIHNldCBmb3IgdGhl
bSwgY29ycmVzcG9uZGluZyB0byB0aGUgdmlzaWJpbGl0eSBpbg0KICAgICsgICAgIyBlLmcuICdt
YWtlIG1lbnVjb25maWcnLiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIHZpc2liaWxpdHkg
Zm9yIHRoZQ0KICAgICsgICAgIyBTeW1ib2wgb3IgQ2hvaWNlICdzYycgLS0gdGhlIGxvZ2ljIGlz
IG5lYXJseSBpZGVudGljYWwuDQogICAgKw0KICAgICsgICAgdmlzID0gMA0KICAgICsNCiAgICAr
ICAgIGZvciBub2RlIGluIHNjLm5vZGVzOg0KICAgICsgICAgICAgIGlmIG5vZGUucHJvbXB0Og0K
ICAgICsgICAgICAgICAgICB2aXMgPSBtYXgodmlzLCBleHByX3ZhbHVlKG5vZGUucHJvbXB0WzFd
KSkNCiAgICArDQogICAgKyAgICBpZiBzYy5fX2NsYXNzX18gaXMgU3ltYm9sIGFuZCBzYy5jaG9p
Y2U6DQogICAgKyAgICAgICAgaWYgc2MuY2hvaWNlLm9yaWdfdHlwZSBpcyBUUklTVEFURSBhbmQg
XA0KICAgICsgICAgICAgICAgIHNjLm9yaWdfdHlwZSBpcyBub3QgVFJJU1RBVEUgYW5kIHNjLmNo
b2ljZS50cmlfdmFsdWUgIT0gMjoNCiAgICArICAgICAgICAgICAgIyBOb24tdHJpc3RhdGUgY2hv
aWNlIHN5bWJvbHMgYXJlIG9ubHkgdmlzaWJsZSBpbiB5IG1vZGUNCiAgICArICAgICAgICAgICAg
cmV0dXJuIDANCiAgICArDQogICAgKyAgICAgICAgaWYgc2Mub3JpZ190eXBlIGlzIFRSSVNUQVRF
IGFuZCB2aXMgPT0gMSBhbmQgc2MuY2hvaWNlLnRyaV92YWx1ZSA9PSAyOg0KICAgICsgICAgICAg
ICAgICAjIENob2ljZSBzeW1ib2xzIHdpdGggbSB2aXNpYmlsaXR5IGFyZSBub3QgdmlzaWJsZSBp
biB5IG1vZGUNCiAgICArICAgICAgICAgICAgcmV0dXJuIDANCiAgICArDQogICAgKyAgICAjIFBy
b21vdGUgbSB0byB5IGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG5vbi10cmlzdGF0ZSAocG9zc2li
bHkgZHVlIHRvDQogICAgKyAgICAjIG1vZHVsZXMgYmVpbmcgZGlzYWJsZWQpDQogICAgKyAgICBp
ZiB2aXMgPT0gMSBhbmQgc2MudHlwZSBpcyBub3QgVFJJU1RBVEU6DQogICAgKyAgICAgICAgcmV0
dXJuIDINCiAgICArDQogICAgKyAgICByZXR1cm4gdmlzDQogICAgKw0KICAgICsNCiAgICArZGVm
IF9tYWtlX2RlcGVuZF9vbihzYywgZXhwcik6DQogICAgKyAgICAjIEFkZHMgJ3NjJyAoc3ltYm9s
IG9yIGNob2ljZSkgYXMgYSAiZGVwZW5kZWUiIHRvIGFsbCBzeW1ib2xzIGluICdleHByJy4NCiAg
ICArICAgICMgQ29uc3RhbnQgc3ltYm9scyBpbiAnZXhwcicgYXJlIHNraXBwZWQgYXMgdGhleSBj
YW4gbmV2ZXIgY2hhbmdlIHZhbHVlDQogICAgKyAgICAjIGFueXdheS4NCiAgICArDQogICAgKyAg
ICBpZiBleHByLl9fY2xhc3NfXyBpcyB0dXBsZToNCiAgICArICAgICAgICAjIEFORCwgT1IsIE5P
VCwgb3IgcmVsYXRpb24NCiAgICArDQogICAgKyAgICAgICAgX21ha2VfZGVwZW5kX29uKHNjLCBl
eHByWzFdKQ0KICAgICsNCiAgICArICAgICAgICAjIE5PVHMgb25seSBoYXZlIGEgc2luZ2xlIG9w
ZXJhbmQNCiAgICArICAgICAgICBpZiBleHByWzBdIGlzIG5vdCBOT1Q6DQogICAgKyAgICAgICAg
ICAgIF9tYWtlX2RlcGVuZF9vbihzYywgZXhwclsyXSkNCiAgICArDQogICAgKyAgICBlbGlmIG5v
dCBleHByLmlzX2NvbnN0YW50Og0KICAgICsgICAgICAgICMgTm9uLWNvbnN0YW50IHN5bWJvbCwg
b3IgY2hvaWNlDQogICAgKyAgICAgICAgZXhwci5fZGVwZW5kZW50cy5hZGQoc2MpDQogICAgKw0K
ICAgICsNCiAgICArZGVmIF9wYXJlbnRoZXNpemUoZXhwciwgdHlwZV8sIHNjX2V4cHJfc3RyX2Zu
KToNCiAgICArICAgICMgZXhwcl9zdHIoKSBoZWxwZXIuIEFkZHMgcGFyZW50aGVzZXMgYXJvdW5k
IGV4cHJlc3Npb25zIG9mIHR5cGUgJ3R5cGVfJy4NCiAgICArDQogICAgKyAgICBpZiBleHByLl9f
Y2xhc3NfXyBpcyB0dXBsZSBhbmQgZXhwclswXSBpcyB0eXBlXzoNCiAgICArICAgICAgICByZXR1
cm4gIih7fSkiLmZvcm1hdChleHByX3N0cihleHByLCBzY19leHByX3N0cl9mbikpDQogICAgKyAg
ICByZXR1cm4gZXhwcl9zdHIoZXhwciwgc2NfZXhwcl9zdHJfZm4pDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9vcmRlcmVkX3VuaXF1ZShsc3QpOg0KICAgICsgICAgIyBSZXR1cm5zICdsc3QnIHdp
dGggYW55IGR1cGxpY2F0ZXMgcmVtb3ZlZCwgcHJlc2VydmluZyBvcmRlci4gVGhpcyBoYWNreQ0K
ICAgICsgICAgIyB2ZXJzaW9uIHNlZW1zIHRvIGJlIGEgY29tbW9uIGlkaW9tLiBJdCByZWxpZXMg
b24gc2hvcnQtY2lyY3VpdCBldmFsdWF0aW9uDQogICAgKyAgICAjIGFuZCBzZXQuYWRkKCkgcmV0
dXJuaW5nIE5vbmUsIHdoaWNoIGlzIGZhbHN5Lg0KICAgICsNCiAgICArICAgIHNlZW4gPSBzZXQo
KQ0KICAgICsgICAgc2Vlbl9hZGQgPSBzZWVuLmFkZA0KICAgICsgICAgcmV0dXJuIFt4IGZvciB4
IGluIGxzdCBpZiB4IG5vdCBpbiBzZWVuIGFuZCBub3Qgc2Vlbl9hZGQoeCldDQogICAgKw0KICAg
ICsNCiAgICArZGVmIF9pc19iYXNlX24ocywgbik6DQogICAgKyAgICB0cnk6DQogICAgKyAgICAg
ICAgaW50KHMsIG4pDQogICAgKyAgICAgICAgcmV0dXJuIFRydWUNCiAgICArICAgIGV4Y2VwdCBW
YWx1ZUVycm9yOg0KICAgICsgICAgICAgIHJldHVybiBGYWxzZQ0KICAgICsNCiAgICArDQogICAg
K2RlZiBfc3RyY21wKHMxLCBzMik6DQogICAgKyAgICAjIHN0cmNtcCgpLWFsaWtlIHRoYXQgcmV0
dXJucyAtMSwgMCwgb3IgMQ0KICAgICsNCiAgICArICAgIHJldHVybiAoczEgPiBzMikgLSAoczEg
PCBzMikNCiAgICArDQogICAgKw0KICAgICtkZWYgX3N5bV90b19udW0oc3ltKToNCiAgICArICAg
ICMgZXhwcl92YWx1ZSgpIGhlbHBlciBmb3IgY29udmVydGluZyBhIHN5bWJvbCB0byBhIG51bWJl
ci4gUmFpc2VzDQogICAgKyAgICAjIFZhbHVlRXJyb3IgZm9yIHN5bWJvbHMgdGhhdCBjYW4ndCBi
ZSBjb252ZXJ0ZWQuDQogICAgKw0KICAgICsgICAgIyBGb3IgQk9PTCBhbmQgVFJJU1RBVEUsIG4v
bS95IGNvdW50IGFzIDAvMS8yLiBUaGlzIG1pcnJvcnMgOTA1OWEzNDkzZWYNCiAgICArICAgICMg
KCJrY29uZmlnOiBmaXggcmVsYXRpb25hbCBvcGVyYXRvcnMgZm9yIGJvb2wgYW5kIHRyaXN0YXRl
IHN5bWJvbHMiKSBpbg0KICAgICsgICAgIyB0aGUgQyBpbXBsZW1lbnRhdGlvbi4NCiAgICArICAg
IHJldHVybiBzeW0udHJpX3ZhbHVlIGlmIHN5bS5vcmlnX3R5cGUgaW4gX0JPT0xfVFJJU1RBVEUg
ZWxzZSBcDQogICAgKyAgICAgICAgICAgaW50KHN5bS5zdHJfdmFsdWUsIF9UWVBFX1RPX0JBU0Vb
c3ltLm9yaWdfdHlwZV0pDQogICAgKw0KICAgICsNCiAgICArZGVmIF90b3VjaF9kZXBfZmlsZShw
YXRoLCBzeW1fbmFtZSk6DQogICAgKyAgICAjIElmIHN5bV9uYW1lIGlzIE1ZX1NZTV9OQU1FLCB0
b3VjaGVzIG15L3N5bS9uYW1lLmguIFNlZSB0aGUgc3luY19kZXBzKCkNCiAgICArICAgICMgZG9j
c3RyaW5nLg0KICAgICsNCiAgICArICAgIHN5bV9wYXRoID0gcGF0aCArIG9zLnNlcCArIHN5bV9u
YW1lLmxvd2VyKCkucmVwbGFjZSgiXyIsIG9zLnNlcCkgKyAiLmgiDQogICAgKyAgICBzeW1fcGF0
aF9kaXIgPSBkaXJuYW1lKHN5bV9wYXRoKQ0KICAgICsgICAgaWYgbm90IGV4aXN0cyhzeW1fcGF0
aF9kaXIpOg0KICAgICsgICAgICAgIG9zLm1ha2VkaXJzKHN5bV9wYXRoX2RpciwgMG83NTUpDQog
ICAgKw0KICAgICsgICAgIyBBIGtpbmQgb2YgdHJ1bmNhdGluZyB0b3VjaCwgbWlycm9yaW5nIHRo
ZSBDIHRvb2xzDQogICAgKyAgICBvcy5jbG9zZShvcy5vcGVuKA0KICAgICsgICAgICAgIHN5bV9w
YXRoLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQgfCBvcy5PX1RSVU5DLCAwbzY0NCkpDQogICAg
Kw0KICAgICsNCiAgICArZGVmIF9zYXZlX29sZChwYXRoKToNCiAgICArICAgICMgU2VlIHdyaXRl
X2NvbmZpZygpDQogICAgKw0KICAgICsgICAgZGVmIGNvcHkoc3JjLCBkc3QpOg0KICAgICsgICAg
ICAgICMgSW1wb3J0IGFzIG5lZWRlZCwgdG8gc2F2ZSBzb21lIHN0YXJ0dXAgdGltZQ0KICAgICsg
ICAgICAgIGltcG9ydCBzaHV0aWwNCiAgICArICAgICAgICBzaHV0aWwuY29weWZpbGUoc3JjLCBk
c3QpDQogICAgKw0KICAgICsgICAgaWYgaXNsaW5rKHBhdGgpOg0KICAgICsgICAgICAgICMgUHJl
c2VydmUgc3ltbGlua3MNCiAgICArICAgICAgICBjb3B5X2ZuID0gY29weQ0KICAgICsgICAgZWxp
ZiBoYXNhdHRyKG9zLCAicmVwbGFjZSIpOg0KICAgICsgICAgICAgICMgUHl0aG9uIDMgKDMuMysp
IG9ubHkuIEJlc3QgY2hvaWNlIHdoZW4gYXZhaWxhYmxlLCBiZWNhdXNlIGl0DQogICAgKyAgICAg
ICAgIyByZW1vdmVzIDxmaWxlbmFtZT4ub2xkIG9uIGJvdGggKm5peCBhbmQgV2luZG93cy4NCiAg
ICArICAgICAgICBjb3B5X2ZuID0gb3MucmVwbGFjZQ0KICAgICsgICAgZWxpZiBvcy5uYW1lID09
ICJwb3NpeCI6DQogICAgKyAgICAgICAgIyBSZW1vdmVzIDxmaWxlbmFtZT4ub2xkIG9uIFBPU0lY
IHN5c3RlbXMNCiAgICArICAgICAgICBjb3B5X2ZuID0gb3MucmVuYW1lDQogICAgKyAgICBlbHNl
Og0KICAgICsgICAgICAgICMgRmFsbCBiYWNrIG9uIGNvcHlpbmcNCiAgICArICAgICAgICBjb3B5
X2ZuID0gY29weQ0KICAgICsNCiAgICArICAgIHRyeToNCiAgICArICAgICAgICBjb3B5X2ZuKHBh
dGgsIHBhdGggKyAiLm9sZCIpDQogICAgKyAgICBleGNlcHQgRXhjZXB0aW9uOg0KICAgICsgICAg
ICAgICMgSWdub3JlIGVycm9ycyBmcm9tICdwYXRoJyBtaXNzaW5nIGFzIHdlbGwgYXMgb3RoZXIg
ZXJyb3JzLg0KICAgICsgICAgICAgICMgPGZpbGVuYW1lPi5vbGQgZmlsZSBpcyB1c3VhbGx5IG1v
cmUgb2YgYSBuaWNlLXRvLWhhdmUsIGFuZCBub3Qgd29ydGgNCiAgICArICAgICAgICAjIGVycm9y
aW5nIG91dCBvdmVyIGUuZy4gaWYgPGZpbGVuYW1lPi5vbGQgaGFwcGVucyB0byBiZSBhIGRpcmVj
dG9yeSBvcg0KICAgICsgICAgICAgICMgPGZpbGVuYW1lPiBpcyBzb21ldGhpbmcgbGlrZSAvZGV2
L251bGwuDQogICAgKyAgICAgICAgcGFzcw0KICAgICsNCiAgICArDQogICAgK2RlZiBfbmFtZV9h
bmRfbG9jKHNjKToNCiAgICArICAgICMgSGVscGVyIGZvciBnaXZpbmcgdGhlIHN5bWJvbC9jaG9p
Y2UgbmFtZSBhbmQgbG9jYXRpb24ocykgaW4gZS5nLiB3YXJuaW5ncw0KICAgICsNCiAgICArICAg
ICMgUmV1c2UgdGhlIGV4cHJlc3Npb24gZm9ybWF0LiBUaGF0IHdheSBjaG9pY2VzIHNob3cgdXAg
YXMNCiAgICArICAgICMgJzxjaG9pY2UgKG5hbWUsIGlmIGFueSk+Jw0KICAgICsgICAgbmFtZSA9
IHN0YW5kYXJkX3NjX2V4cHJfc3RyKHNjKQ0KICAgICsNCiAgICArICAgIGlmIG5vdCBzYy5ub2Rl
czoNCiAgICArICAgICAgICByZXR1cm4gbmFtZSArICIgKHVuZGVmaW5lZCkiDQogICAgKw0KICAg
ICsgICAgcmV0dXJuICJ7fSAoZGVmaW5lZCBhdCB7fSkiLmZvcm1hdCgNCiAgICArICAgICAgICBu
YW1lLA0KICAgICsgICAgICAgICIsICIuam9pbigie306e30iLmZvcm1hdChub2RlLmZpbGVuYW1l
LCBub2RlLmxpbmVucikNCiAgICArICAgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gc2Mubm9k
ZXMpKQ0KICAgICsNCiAgICArDQogICAgKyMgTWVudSBtYW5pcHVsYXRpb24NCiAgICArDQogICAg
Kw0KICAgICtkZWYgX2V4cHJfZGVwZW5kc19vbihleHByLCBzeW0pOg0KICAgICsgICAgIyBSZWlt
cGxlbWVudGF0aW9uIG9mIGV4cHJfZGVwZW5kc19zeW1ib2woKSBmcm9tIG1jb25mLmMuIFVzZWQg
dG8gZGV0ZXJtaW5lDQogICAgKyAgICAjIGlmIGEgc3VibWVudSBzaG91bGQgYmUgaW1wbGljaXRs
eSBjcmVhdGVkLiBUaGlzIGFsc28gaW5mbHVlbmNlcyB3aGljaA0KICAgICsgICAgIyBpdGVtcyBp
bnNpZGUgY2hvaWNlIHN0YXRlbWVudHMgYXJlIGNvbnNpZGVyZWQgY2hvaWNlIGl0ZW1zLg0KICAg
ICsNCiAgICArICAgIGlmIGV4cHIuX19jbGFzc19fIGlzIG5vdCB0dXBsZToNCiAgICArICAgICAg
ICByZXR1cm4gZXhwciBpcyBzeW0NCiAgICArDQogICAgKyAgICBpZiBleHByWzBdIGluIF9FUVVB
TF9VTkVRVUFMOg0KICAgICsgICAgICAgICMgQ2hlY2sgZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5n
Og0KICAgICsgICAgICAgICMgc3ltID0gbS95LCBtL3kgPSBzeW0sIHN5bSAhPSBuLCBuICE9IHN5
bQ0KICAgICsNCiAgICArICAgICAgICBsZWZ0LCByaWdodCA9IGV4cHJbMTpdDQogICAgKw0KICAg
ICsgICAgICAgIGlmIHJpZ2h0IGlzIHN5bToNCiAgICArICAgICAgICAgICAgbGVmdCwgcmlnaHQg
PSByaWdodCwgbGVmdA0KICAgICsgICAgICAgIGVsaWYgbGVmdCBpcyBub3Qgc3ltOg0KICAgICsg
ICAgICAgICAgICByZXR1cm4gRmFsc2UNCiAgICArDQogICAgKyAgICAgICAgcmV0dXJuIChleHBy
WzBdIGlzIEVRVUFMIGFuZCByaWdodCBpcyBzeW0ua2NvbmZpZy5tIG9yDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCBpcyBzeW0ua2NvbmZpZy55KSBvciBc
DQogICAgKyAgICAgICAgICAgICAgIChleHByWzBdIGlzIFVORVFVQUwgYW5kIHJpZ2h0IGlzIHN5
bS5rY29uZmlnLm4pDQogICAgKw0KICAgICsgICAgcmV0dXJuIGV4cHJbMF0gaXMgQU5EIGFuZCBc
DQogICAgKyAgICAgICAgICAgKF9leHByX2RlcGVuZHNfb24oZXhwclsxXSwgc3ltKSBvcg0KICAg
ICsgICAgICAgICAgICBfZXhwcl9kZXBlbmRzX29uKGV4cHJbMl0sIHN5bSkpDQogICAgKw0KICAg
ICsNCiAgICArZGVmIF9hdXRvX21lbnVfZGVwKG5vZGUxLCBub2RlMik6DQogICAgKyAgICAjIFJl
dHVybnMgVHJ1ZSBpZiBub2RlMiBoYXMgYW4gImF1dG9tYXRpYyBtZW51IGRlcGVuZGVuY3kiIG9u
IG5vZGUxLiBJZg0KICAgICsgICAgIyBub2RlMiBoYXMgYSBwcm9tcHQsIHdlIGNoZWNrIGl0cyBj
b25kaXRpb24uIE90aGVyd2lzZSwgd2UgbG9vayBkaXJlY3RseQ0KICAgICsgICAgIyBhdCBub2Rl
Mi5kZXAuDQogICAgKw0KICAgICsgICAgcmV0dXJuIF9leHByX2RlcGVuZHNfb24obm9kZTIucHJv
bXB0WzFdIGlmIG5vZGUyLnByb21wdCBlbHNlIG5vZGUyLmRlcCwNCiAgICArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUxLml0ZW0pDQogICAgKw0KICAgICsNCiAgICArZGVmIF9mbGF0
dGVuKG5vZGUpOg0KICAgICsgICAgIyAiRmxhdHRlbnMiIG1lbnUgbm9kZXMgd2l0aG91dCBwcm9t
cHRzIChlLmcuICdpZicgbm9kZXMgYW5kIG5vbi12aXNpYmxlDQogICAgKyAgICAjIHN5bWJvbHMg
d2l0aCBjaGlsZHJlbiBmcm9tIGF1dG9tYXRpYyBtZW51IGNyZWF0aW9uKSBzbyB0aGF0IHRoZWly
DQogICAgKyAgICAjIGNoaWxkcmVuIGFwcGVhciBhZnRlciB0aGVtIGluc3RlYWQuIFRoaXMgZ2l2
ZXMgYSBjbGVhbiBtZW51IHN0cnVjdHVyZQ0KICAgICsgICAgIyB3aXRoIG5vIHVuZXhwZWN0ZWQg
Imp1bXBzIiBpbiB0aGUgaW5kZW50YXRpb24uDQogICAgKyAgICAjDQogICAgKyAgICAjIERvIG5v
dCBmbGF0dGVuIHByb21wdGxlc3MgY2hvaWNlcyAod2hpY2ggY2FuIGFwcGVhciAibGVnaXRpbWF0
ZWx5IiBpZiBhDQogICAgKyAgICAjIG5hbWVkIGNob2ljZSBpcyBkZWZpbmVkIGluIG11bHRpcGxl
IGxvY2F0aW9ucyB0byBhZGQgb24gc3ltYm9scykuIEl0DQogICAgKyAgICAjIGxvb2tzIGNvbmZ1
c2luZywgYW5kIHRoZSBtZW51Y29uZmlnIGFscmVhZHkgc2hvd3MgYWxsIGNob2ljZSBzeW1ib2xz
IGlmDQogICAgKyAgICAjIHlvdSBlbnRlciB0aGUgY2hvaWNlIGF0IHNvbWUgbG9jYXRpb24gd2l0
aCBhIHByb21wdC4NCiAgICArDQogICAgKyAgICB3aGlsZSBub2RlOg0KICAgICsgICAgICAgIGlm
IG5vZGUubGlzdCBhbmQgbm90IG5vZGUucHJvbXB0IGFuZCBcDQogICAgKyAgICAgICAgICAgbm9k
ZS5pdGVtLl9fY2xhc3NfXyBpcyBub3QgQ2hvaWNlOg0KICAgICsNCiAgICArICAgICAgICAgICAg
bGFzdF9ub2RlID0gbm9kZS5saXN0DQogICAgKyAgICAgICAgICAgIHdoaWxlIDE6DQogICAgKyAg
ICAgICAgICAgICAgICBsYXN0X25vZGUucGFyZW50ID0gbm9kZS5wYXJlbnQNCiAgICArICAgICAg
ICAgICAgICAgIGlmIG5vdCBsYXN0X25vZGUubmV4dDoNCiAgICArICAgICAgICAgICAgICAgICAg
ICBicmVhaw0KICAgICsgICAgICAgICAgICAgICAgbGFzdF9ub2RlID0gbGFzdF9ub2RlLm5leHQN
CiAgICArDQogICAgKyAgICAgICAgICAgIGxhc3Rfbm9kZS5uZXh0ID0gbm9kZS5uZXh0DQogICAg
KyAgICAgICAgICAgIG5vZGUubmV4dCA9IG5vZGUubGlzdA0KICAgICsgICAgICAgICAgICBub2Rl
Lmxpc3QgPSBOb25lDQogICAgKw0KICAgICsgICAgICAgIG5vZGUgPSBub2RlLm5leHQNCiAgICAr
DQogICAgKw0KICAgICtkZWYgX3JlbW92ZV9pZnMobm9kZSk6DQogICAgKyAgICAjIFJlbW92ZXMg
J2lmJyBub2RlcyAod2hpY2ggY2FuIGJlIHJlY29nbml6ZWQgYnkgTWVudU5vZGUuaXRlbSBiZWlu
ZyBOb25lKSwNCiAgICArICAgICMgd2hpY2ggYXJlIGFzc3VtZWQgdG8gYWxyZWFkeSBoYXZlIGJl
ZW4gZmxhdHRlbmVkLiBUaGUgQyBpbXBsZW1lbnRhdGlvbg0KICAgICsgICAgIyBkb2Vzbid0IGJv
dGhlciB0byBkbyB0aGlzLCBidXQgd2UgZXhwb3NlIHRoZSBtZW51IHRyZWUgZGlyZWN0bHksIGFu
ZCBpdA0KICAgICsgICAgIyBtYWtlcyBpdCBuaWNlciB0byB3b3JrIHdpdGguDQogICAgKw0KICAg
ICsgICAgY3VyID0gbm9kZS5saXN0DQogICAgKyAgICB3aGlsZSBjdXIgYW5kIG5vdCBjdXIuaXRl
bToNCiAgICArICAgICAgICBjdXIgPSBjdXIubmV4dA0KICAgICsNCiAgICArICAgIG5vZGUubGlz
dCA9IGN1cg0KICAgICsNCiAgICArICAgIHdoaWxlIGN1cjoNCiAgICArICAgICAgICBuZXh0ID0g
Y3VyLm5leHQNCiAgICArICAgICAgICB3aGlsZSBuZXh0IGFuZCBub3QgbmV4dC5pdGVtOg0KICAg
ICsgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0DQogICAgKw0KICAgICsgICAgICAgICMgRXF1
aXZhbGVudCB0bw0KICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjICAgY3VyLm5leHQgPSBu
ZXh0DQogICAgKyAgICAgICAgIyAgIGN1ciA9IG5leHQNCiAgICArICAgICAgICAjDQogICAgKyAg
ICAgICAgIyBkdWUgdG8gdHJpY2t5IFB5dGhvbiBzZW1hbnRpY3MuIFRoZSBvcmRlciBtYXR0ZXJz
Lg0KICAgICsgICAgICAgIGN1ci5uZXh0ID0gY3VyID0gbmV4dA0KICAgICsNCiAgICArDQogICAg
K2RlZiBfZmluYWxpemVfY2hvaWNlKG5vZGUpOg0KICAgICsgICAgIyBGaW5hbGl6ZXMgYSBjaG9p
Y2UsIG1hcmtpbmcgZWFjaCBzeW1ib2wgd2hvc2UgbWVudSBub2RlIGhhcyB0aGUgY2hvaWNlIGFz
DQogICAgKyAgICAjIHRoZSBwYXJlbnQgYXMgYSBjaG9pY2Ugc3ltYm9sLCBhbmQgYXV0b21hdGlj
YWxseSBkZXRlcm1pbmluZyB0eXBlcyBpZiBub3QNCiAgICArICAgICMgc3BlY2lmaWVkLg0KICAg
ICsNCiAgICArICAgIGNob2ljZSA9IG5vZGUuaXRlbQ0KICAgICsNCiAgICArICAgIGN1ciA9IG5v
ZGUubGlzdA0KICAgICsgICAgd2hpbGUgY3VyOg0KICAgICsgICAgICAgIGlmIGN1ci5pdGVtLl9f
Y2xhc3NfXyBpcyBTeW1ib2w6DQogICAgKyAgICAgICAgICAgIGN1ci5pdGVtLmNob2ljZSA9IGNo
b2ljZQ0KICAgICsgICAgICAgICAgICBjaG9pY2Uuc3ltcy5hcHBlbmQoY3VyLml0ZW0pDQogICAg
KyAgICAgICAgY3VyID0gY3VyLm5leHQNCiAgICArDQogICAgKyAgICAjIElmIG5vIHR5cGUgaXMg
c3BlY2lmaWVkIGZvciB0aGUgY2hvaWNlLCBpdHMgdHlwZSBpcyB0aGF0IG9mDQogICAgKyAgICAj
IHRoZSBmaXJzdCBjaG9pY2UgaXRlbSB3aXRoIGEgc3BlY2lmaWVkIHR5cGUNCiAgICArICAgIGlm
IG5vdCBjaG9pY2Uub3JpZ190eXBlOg0KICAgICsgICAgICAgIGZvciBpdGVtIGluIGNob2ljZS5z
eW1zOg0KICAgICsgICAgICAgICAgICBpZiBpdGVtLm9yaWdfdHlwZToNCiAgICArICAgICAgICAg
ICAgICAgIGNob2ljZS5vcmlnX3R5cGUgPSBpdGVtLm9yaWdfdHlwZQ0KICAgICsgICAgICAgICAg
ICAgICAgYnJlYWsNCiAgICArDQogICAgKyAgICAjIEVhY2ggY2hvaWNlIGl0ZW0gb2YgVU5LTk9X
TiB0eXBlIGdldHMgdGhlIHR5cGUgb2YgdGhlIGNob2ljZQ0KICAgICsgICAgZm9yIHN5bSBpbiBj
aG9pY2Uuc3ltczoNCiAgICArICAgICAgICBpZiBub3Qgc3ltLm9yaWdfdHlwZToNCiAgICArICAg
ICAgICAgICAgc3ltLm9yaWdfdHlwZSA9IGNob2ljZS5vcmlnX3R5cGUNCiAgICArDQogICAgKw0K
ICAgICtkZWYgX2NoZWNrX2RlcF9sb29wX3N5bShzeW0sIGlnbm9yZV9jaG9pY2UpOg0KICAgICsg
ICAgIyBEZXRlY3RzIGRlcGVuZGVuY3kgbG9vcHMgdXNpbmcgZGVwdGgtZmlyc3Qgc2VhcmNoIG9u
IHRoZSBkZXBlbmRlbmN5IGdyYXBoDQogICAgKyAgICAjICh3aGljaCBpcyBjYWxjdWxhdGVkIGVh
cmxpZXIgaW4gS2NvbmZpZy5fYnVpbGRfZGVwKCkpLg0KICAgICsgICAgIw0KICAgICsgICAgIyBB
bGdvcml0aG06DQogICAgKyAgICAjDQogICAgKyAgICAjICAxLiBTeW1ib2xzL2Nob2ljZXMgc3Rh
cnQgb3V0IHdpdGggX3Zpc2l0ZWQgPSAwLCBtZWFuaW5nIHVudmlzaXRlZC4NCiAgICArICAgICMN
CiAgICArICAgICMgIDIuIFdoZW4gYSBzeW1ib2wvY2hvaWNlIGlzIGZpcnN0IHZpc2l0ZWQsIF92
aXNpdGVkIGlzIHNldCB0byAxLCBtZWFuaW5nDQogICAgKyAgICAjICAgICAidmlzaXRlZCwgcG90
ZW50aWFsbHkgcGFydCBvZiBhIGRlcGVuZGVuY3kgbG9vcCIuIFRoZSByZWN1cnNpdmUNCiAgICAr
ICAgICMgICAgIHNlYXJjaCB0aGVuIGNvbnRpbnVlcyBmcm9tIHRoZSBzeW1ib2wvY2hvaWNlLg0K
ICAgICsgICAgIw0KICAgICsgICAgIyAgMy4gSWYgd2UgcnVuIGludG8gYSBzeW1ib2wvY2hvaWNl
IFggd2l0aCBfdmlzaXRlZCBhbHJlYWR5IHNldCB0byAxLA0KICAgICsgICAgIyAgICAgdGhlcmUn
cyBhIGRlcGVuZGVuY3kgbG9vcC4gVGhlIGxvb3AgaXMgZm91bmQgb24gdGhlIGNhbGwgc3RhY2sg
YnkNCiAgICArICAgICMgICAgIHJlY29yZGluZyBzeW1ib2xzIHdoaWxlIHJldHVybmluZyAoIm9u
IHRoZSB3YXkgYmFjayIpIHVudGlsIFggaXMgc2Vlbg0KICAgICsgICAgIyAgICAgYWdhaW4uDQog
ICAgKyAgICAjDQogICAgKyAgICAjICA0LiBPbmNlIGEgc3ltYm9sL2Nob2ljZSBhbmQgYWxsIGl0
cyBkZXBlbmRlbmNpZXMgKG9yIGRlcGVuZGVudHMgaW4gdGhpcw0KICAgICsgICAgIyAgICAgY2Fz
ZSkgaGF2ZSBiZWVuIGNoZWNrZWQgcmVjdXJzaXZlbHkgd2l0aG91dCBkZXRlY3RpbmcgYW55IGxv
b3BzLCBpdHMNCiAgICArICAgICMgICAgIF92aXNpdGVkIGlzIHNldCB0byAyLCBtZWFuaW5nICJ2
aXNpdGVkLCBub3QgcGFydCBvZiBhIGRlcGVuZGVuY3kNCiAgICArICAgICMgICAgIGxvb3AiLg0K
ICAgICsgICAgIw0KICAgICsgICAgIyAgICAgVGhpcyBzYXZlcyB3b3JrIGlmIHdlIHJ1biBpbnRv
IHRoZSBzeW1ib2wvY2hvaWNlIGFnYWluIGluIGxhdGVyIGNhbGxzDQogICAgKyAgICAjICAgICB0
byBfY2hlY2tfZGVwX2xvb3Bfc3ltKCkuIFdlIGp1c3QgcmV0dXJuIGltbWVkaWF0ZWx5Lg0KICAg
ICsgICAgIw0KICAgICsgICAgIyBDaG9pY2VzIGNvbXBsaWNhdGUgdGhpbmdzLCBhcyBldmVyeSBj
aG9pY2Ugc3ltYm9sIGRlcGVuZHMgb24gZXZlcnkgb3RoZXINCiAgICArICAgICMgY2hvaWNlIHN5
bWJvbCBpbiBhIHNlbnNlLiBXaGVuIGEgY2hvaWNlIGlzICJlbnRlcmVkIiB2aWEgYSBjaG9pY2Ug
c3ltYm9sDQogICAgKyAgICAjIFgsIHdlIHZpc2l0IGFsbCBjaG9pY2Ugc3ltYm9scyBmcm9tIHRo
ZSBjaG9pY2UgZXhjZXB0IFgsIGFuZCBwcmV2ZW50DQogICAgKyAgICAjIGltbWVkaWF0ZWx5IHJl
dmlzaXRpbmcgdGhlIGNob2ljZSB3aXRoIGEgZmxhZyAoaWdub3JlX2Nob2ljZSkuDQogICAgKyAg
ICAjDQogICAgKyAgICAjIE1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlz
IChkaWZmZXJlbnQgZmxhZ3Mgb3IgdGhlDQogICAgKyAgICAjIGxpa2UuLi4pDQogICAgKw0KICAg
ICsgICAgaWYgbm90IHN5bS5fdmlzaXRlZDoNCiAgICArICAgICAgICAjIHN5bS5fdmlzaXRlZCA9
PSAwLCB1bnZpc2l0ZWQNCiAgICArDQogICAgKyAgICAgICAgc3ltLl92aXNpdGVkID0gMQ0KICAg
ICsNCiAgICArICAgICAgICBmb3IgZGVwIGluIHN5bS5fZGVwZW5kZW50czoNCiAgICArICAgICAg
ICAgICAgIyBDaG9pY2VzIHNob3cgdXAgaW4gU3ltYm9sLl9kZXBlbmRlbnRzIHdoZW4gdGhlIGNo
b2ljZSBoYXMgdGhlDQogICAgKyAgICAgICAgICAgICMgc3ltYm9sIGluIGEgJ3Byb21wdCcgb3Ig
J2RlZmF1bHQnIGNvbmRpdGlvbiAoZS5nLg0KICAgICsgICAgICAgICAgICAjICdkZWZhdWx0IC4u
LiBpZiBTWU0nKS4NCiAgICArICAgICAgICAgICAgIw0KICAgICsgICAgICAgICAgICAjIFNpbmNl
IHdlIGFyZW4ndCBlbnRlcmluZyB0aGUgY2hvaWNlIHZpYSBhIGNob2ljZSBzeW1ib2wsIGFsbA0K
ICAgICsgICAgICAgICAgICAjIGNob2ljZSBzeW1ib2xzIG5lZWQgdG8gYmUgY2hlY2tlZCwgaGVu
Y2UgdGhlIE5vbmUuDQogICAgKyAgICAgICAgICAgIGxvb3AgPSBfY2hlY2tfZGVwX2xvb3BfY2hv
aWNlKGRlcCwgTm9uZSkgXA0KICAgICsgICAgICAgICAgICAgICAgICAgaWYgZGVwLl9fY2xhc3Nf
XyBpcyBDaG9pY2UgXA0KICAgICsgICAgICAgICAgICAgICAgICAgZWxzZSBfY2hlY2tfZGVwX2xv
b3Bfc3ltKGRlcCwgRmFsc2UpDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBsb29wOg0KICAg
ICsgICAgICAgICAgICAgICAgIyBEZXBlbmRlbmN5IGxvb3AgZm91bmQNCiAgICArICAgICAgICAg
ICAgICAgIHJldHVybiBfZm91bmRfZGVwX2xvb3AobG9vcCwgc3ltKQ0KICAgICsNCiAgICArICAg
ICAgICBpZiBzeW0uY2hvaWNlIGFuZCBub3QgaWdub3JlX2Nob2ljZToNCiAgICArICAgICAgICAg
ICAgbG9vcCA9IF9jaGVja19kZXBfbG9vcF9jaG9pY2Uoc3ltLmNob2ljZSwgc3ltKQ0KICAgICsg
ICAgICAgICAgICBpZiBsb29wOg0KICAgICsgICAgICAgICAgICAgICAgIyBEZXBlbmRlbmN5IGxv
b3AgZm91bmQNCiAgICArICAgICAgICAgICAgICAgIHJldHVybiBfZm91bmRfZGVwX2xvb3AobG9v
cCwgc3ltKQ0KICAgICsNCiAgICArICAgICAgICAjIFRoZSBzeW1ib2wgaXMgbm90IHBhcnQgb2Yg
YSBkZXBlbmRlbmN5IGxvb3ANCiAgICArICAgICAgICBzeW0uX3Zpc2l0ZWQgPSAyDQogICAgKw0K
ICAgICsgICAgICAgICMgTm8gZGVwZW5kZW5jeSBsb29wIGZvdW5kDQogICAgKyAgICAgICAgcmV0
dXJuIE5vbmUNCiAgICArDQogICAgKyAgICBpZiBzeW0uX3Zpc2l0ZWQgPT0gMjoNCiAgICArICAg
ICAgICAjIFRoZSBzeW1ib2wgd2FzIGNoZWNrZWQgZWFybGllciBhbmQgaXMgYWxyZWFkeSBrbm93
biB0byBub3QgYmUgcGFydCBvZg0KICAgICsgICAgICAgICMgYSBkZXBlbmRlbmN5IGxvb3ANCiAg
ICArICAgICAgICByZXR1cm4gTm9uZQ0KICAgICsNCiAgICArICAgICMgc3ltLl92aXNpdGVkID09
IDEsIGZvdW5kIGEgZGVwZW5kZW5jeSBsb29wLiBSZXR1cm4gdGhlIHN5bWJvbCBhcyB0aGUNCiAg
ICArICAgICMgZmlyc3QgZWxlbWVudCBpbiBpdC4NCiAgICArICAgIHJldHVybiAoc3ltLCkNCiAg
ICArDQogICAgKw0KICAgICtkZWYgX2NoZWNrX2RlcF9sb29wX2Nob2ljZShjaG9pY2UsIHNraXAp
Og0KICAgICsgICAgaWYgbm90IGNob2ljZS5fdmlzaXRlZDoNCiAgICArICAgICAgICAjIGNob2lj
ZS5fdmlzaXRlZCA9PSAwLCB1bnZpc2l0ZWQNCiAgICArDQogICAgKyAgICAgICAgY2hvaWNlLl92
aXNpdGVkID0gMQ0KICAgICsNCiAgICArICAgICAgICAjIENoZWNrIGZvciBsb29wcyBpbnZvbHZp
bmcgY2hvaWNlIHN5bWJvbHMuIElmIHdlIGNhbWUgaGVyZSB2aWEgYQ0KICAgICsgICAgICAgICMg
Y2hvaWNlIHN5bWJvbCwgc2tpcCB0aGF0IG9uZSwgYXMgd2UnZCBnZXQgYSBmYWxzZSBwb3NpdGl2
ZQ0KICAgICsgICAgICAgICMgJzxzeW0gRk9PPiAtPiA8Y2hvaWNlPiAtPiA8c3ltIEZPTz4nIGxv
b3Agb3RoZXJ3aXNlLg0KICAgICsgICAgICAgIGZvciBzeW0gaW4gY2hvaWNlLnN5bXM6DQogICAg
KyAgICAgICAgICAgIGlmIHN5bSBpcyBub3Qgc2tpcDoNCiAgICArICAgICAgICAgICAgICAgICMg
UHJldmVudCB0aGUgY2hvaWNlIGZyb20gYmVpbmcgaW1tZWRpYXRlbHkgcmUtZW50ZXJlZCB2aWEg
dGhlDQogICAgKyAgICAgICAgICAgICAgICAjICJpcyBhIGNob2ljZSBzeW1ib2wiIHBhdGggYnkg
cGFzc2luZyBUcnVlDQogICAgKyAgICAgICAgICAgICAgICBsb29wID0gX2NoZWNrX2RlcF9sb29w
X3N5bShzeW0sIFRydWUpDQogICAgKyAgICAgICAgICAgICAgICBpZiBsb29wOg0KICAgICsgICAg
ICAgICAgICAgICAgICAgICMgRGVwZW5kZW5jeSBsb29wIGZvdW5kDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIF9mb3VuZF9kZXBfbG9vcChsb29wLCBjaG9pY2UpDQogICAgKw0KICAg
ICsgICAgICAgICMgVGhlIGNob2ljZSBpcyBub3QgcGFydCBvZiBhIGRlcGVuZGVuY3kgbG9vcA0K
ICAgICsgICAgICAgIGNob2ljZS5fdmlzaXRlZCA9IDINCiAgICArDQogICAgKyAgICAgICAgIyBO
byBkZXBlbmRlbmN5IGxvb3AgZm91bmQNCiAgICArICAgICAgICByZXR1cm4gTm9uZQ0KICAgICsN
CiAgICArICAgIGlmIGNob2ljZS5fdmlzaXRlZCA9PSAyOg0KICAgICsgICAgICAgICMgVGhlIGNo
b2ljZSB3YXMgY2hlY2tlZCBlYXJsaWVyIGFuZCBpcyBhbHJlYWR5IGtub3duIHRvIG5vdCBiZSBw
YXJ0IG9mDQogICAgKyAgICAgICAgIyBhIGRlcGVuZGVuY3kgbG9vcA0KICAgICsgICAgICAgIHJl
dHVybiBOb25lDQogICAgKw0KICAgICsgICAgIyBjaG9pY2UuX3Zpc2l0ZWQgPT0gMSwgZm91bmQg
YSBkZXBlbmRlbmN5IGxvb3AuIFJldHVybiB0aGUgY2hvaWNlIGFzIHRoZQ0KICAgICsgICAgIyBm
aXJzdCBlbGVtZW50IGluIGl0Lg0KICAgICsgICAgcmV0dXJuIChjaG9pY2UsKQ0KICAgICsNCiAg
ICArDQogICAgK2RlZiBfZm91bmRfZGVwX2xvb3AobG9vcCwgY3VyKToNCiAgICArICAgICMgQ2Fs
bGVkICJvbiB0aGUgd2F5IGJhY2siIHdoZW4gd2Uga25vdyB3ZSBoYXZlIGEgbG9vcA0KICAgICsN
CiAgICArICAgICMgSXMgdGhlIHN5bWJvbC9jaG9pY2UgJ2N1cicgd2hlcmUgdGhlIGxvb3Agc3Rh
cnRlZD8NCiAgICArICAgIGlmIGN1ciBpcyBub3QgbG9vcFswXToNCiAgICArICAgICAgICAjIE5v
cGUsIGl0J3MganVzdCBhIHBhcnQgb2YgdGhlIGxvb3ANCiAgICArICAgICAgICByZXR1cm4gbG9v
cCArIChjdXIsKQ0KICAgICsNCiAgICArICAgICMgWWVwLCB3ZSBoYXZlIHRoZSBlbnRpcmUgbG9v
cC4gVGhyb3cgYW4gZXhjZXB0aW9uIHRoYXQgc2hvd3MgaXQuDQogICAgKw0KICAgICsgICAgbXNn
ID0gIlxuRGVwZW5kZW5jeSBsb29wXG4iIFwNCiAgICArICAgICAgICAgICAgIj09PT09PT09PT09
PT09PVxuXG4iDQogICAgKw0KICAgICsgICAgZm9yIGl0ZW0gaW4gbG9vcDoNCiAgICArICAgICAg
ICBpZiBpdGVtIGlzIG5vdCBsb29wWzBdOg0KICAgICsgICAgICAgICAgICBtc2cgKz0gIi4uLmRl
cGVuZHMgb24gIg0KICAgICsgICAgICAgICAgICBpZiBpdGVtLl9fY2xhc3NfXyBpcyBTeW1ib2wg
YW5kIGl0ZW0uY2hvaWNlOg0KICAgICsgICAgICAgICAgICAgICAgbXNnICs9ICJ0aGUgY2hvaWNl
IHN5bWJvbCAiDQogICAgKw0KICAgICsgICAgICAgIG1zZyArPSAie30sIHdpdGggZGVmaW5pdGlv
bi4uLlxuXG57fVxuXG4iIFwNCiAgICArICAgICAgICAgICAgICAgLmZvcm1hdChfbmFtZV9hbmRf
bG9jKGl0ZW0pLCBpdGVtKQ0KICAgICsNCiAgICArICAgICAgICAjIFNtYWxsIHdhcnQ6IFNpbmNl
IHdlIHJldXNlIHRoZSBhbHJlYWR5IGNhbGN1bGF0ZWQNCiAgICArICAgICAgICAjIFN5bWJvbC9D
aG9pY2UuX2RlcGVuZGVudHMgc2V0cyBmb3IgcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0aW9u
LCB3ZQ0KICAgICsgICAgICAgICMgbG9zZSBpbmZvcm1hdGlvbiBvbiB3aGV0aGVyIGEgZGVwZW5k
ZW5jeSBjYW1lIGZyb20gYSAnc2VsZWN0Jy8naW1wbHknDQogICAgKyAgICAgICAgIyBjb25kaXRp
b24gb3IgZS5nLiBhICdkZXBlbmRzIG9uJy4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAg
IyBUaGlzIG1pZ2h0IGNhdXNlIHNlbGVjdGluZyBzeW1ib2xzIHRvICJkaXNhcHBlYXIiLiBGb3Ig
ZXhhbXBsZSwNCiAgICArICAgICAgICAjIGEgc3ltYm9sIEIgaGF2aW5nICdzZWxlY3QgQSBpZiBD
JyBnaXZlcyBhIGRpcmVjdCBkZXBlbmRlbmN5IGZyb20gQSB0bw0KICAgICsgICAgICAgICMgQywg
c2luY2UgaXQgY29ycmVzcG9uZHMgdG8gYSByZXZlcnNlIGRlcGVuZGVuY3kgb2YgQiAmJiBDLg0K
ICAgICsgICAgICAgICMNCiAgICArICAgICAgICAjIEFsd2F5cyBwcmludCByZXZlcnNlIGRlcGVu
ZGVuY2llcyBmb3Igc3ltYm9scyB0aGF0IGhhdmUgdGhlbSB0byBtYWtlDQogICAgKyAgICAgICAg
IyBzdXJlIGluZm9ybWF0aW9uIGlzbid0IGxvc3QuIEkgd29uZGVyIGlmIHRoZXJlJ3Mgc29tZSBu
ZWF0IHdheSB0bw0KICAgICsgICAgICAgICMgaW1wcm92ZSB0aGlzLg0KICAgICsNCiAgICArICAg
ICAgICBpZiBpdGVtLl9fY2xhc3NfXyBpcyBTeW1ib2w6DQogICAgKyAgICAgICAgICAgIGlmIGl0
ZW0ucmV2X2RlcCBpcyBub3QgaXRlbS5rY29uZmlnLm46DQogICAgKyAgICAgICAgICAgICAgICBt
c2cgKz0gIihzZWxlY3QtcmVsYXRlZCBkZXBlbmRlbmNpZXM6IHt9KVxuXG4iIFwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGV4cHJfc3RyKGl0ZW0ucmV2X2RlcCkpDQogICAg
Kw0KICAgICsgICAgICAgICAgICBpZiBpdGVtLndlYWtfcmV2X2RlcCBpcyBub3QgaXRlbS5rY29u
ZmlnLm46DQogICAgKyAgICAgICAgICAgICAgICBtc2cgKz0gIihpbXBseS1yZWxhdGVkIGRlcGVu
ZGVuY2llczoge30pXG5cbiIgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQo
ZXhwcl9zdHIoaXRlbS5yZXZfZGVwKSkNCiAgICArDQogICAgKyAgICBtc2cgKz0gIi4uLmRlcGVu
ZHMgYWdhaW4gb24ge30iLmZvcm1hdChfbmFtZV9hbmRfbG9jKGxvb3BbMF0pKQ0KICAgICsNCiAg
ICArICAgIHJhaXNlIEtjb25maWdFcnJvcihtc2cpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9k
ZWNvZGluZ19lcnJvcihlLCBmaWxlbmFtZSwgbWFjcm9fbGluZW5yPU5vbmUpOg0KICAgICsgICAg
IyBHaXZlcyB0aGUgZmlsZW5hbWUgYW5kIGNvbnRleHQgZm9yIFVuaWNvZGVEZWNvZGVFcnJvcidz
LCB3aGljaCBhcmUgYSBwYWluDQogICAgKyAgICAjIHRvIGRlYnVnIG90aGVyd2lzZS4gJ2UnIGlz
IHRoZSBVbmljb2RlRGVjb2RlRXJyb3Igb2JqZWN0Lg0KICAgICsgICAgIw0KICAgICsgICAgIyBJ
ZiB0aGUgZGVjb2RpbmcgZXJyb3IgaXMgZm9yIHRoZSBvdXRwdXQgb2YgYSAkKHNoZWxsLC4uLikg
Y29tbWFuZCwNCiAgICArICAgICMgbWFjcm9fbGluZW5yIGhvbGRzIHRoZSBsaW5lIG51bWJlciB3
aGVyZSBpdCB3YXMgcnVuICh0aGUgZXhhY3QgbGluZQ0KICAgICsgICAgIyBudW1iZXIgaXNuJ3Qg
YXZhaWxhYmxlIGZvciBkZWNvZGluZyBlcnJvcnMgaW4gZmlsZXMpLg0KICAgICsNCiAgICArICAg
IHJhaXNlIEtjb25maWdFcnJvcigNCiAgICArICAgICAgICAiXG4iDQogICAgKyAgICAgICAgIk1h
bGZvcm1lZCB7fSBpbiB7fVxuIg0KICAgICsgICAgICAgICJDb250ZXh0OiB7fVxuIg0KICAgICsg
ICAgICAgICJQcm9ibGVtYXRpYyBkYXRhOiB7fVxuIg0KICAgICsgICAgICAgICJSZWFzb246IHt9
Ii5mb3JtYXQoDQogICAgKyAgICAgICAgICAgIGUuZW5jb2RpbmcsDQogICAgKyAgICAgICAgICAg
ICIne30nIi5mb3JtYXQoZmlsZW5hbWUpIGlmIG1hY3JvX2xpbmVuciBpcyBOb25lIGVsc2UNCiAg
ICArICAgICAgICAgICAgICAgICJvdXRwdXQgZnJvbSBtYWNybyBhdCB7fTp7fSIuZm9ybWF0KGZp
bGVuYW1lLCBtYWNyb19saW5lbnIpLA0KICAgICsgICAgICAgICAgICBlLm9iamVjdFttYXgoZS5z
dGFydCAtIDQwLCAwKTplLmVuZCArIDQwXSwNCiAgICArICAgICAgICAgICAgZS5vYmplY3RbZS5z
dGFydDplLmVuZF0sDQogICAgKyAgICAgICAgICAgIGUucmVhc29uKSkNCiAgICArDQogICAgKw0K
ICAgICtkZWYgX3dhcm5fdmVyYm9zZV9kZXByZWNhdGVkKGZuX25hbWUpOg0KICAgICsgICAgc3lz
LnN0ZGVyci53cml0ZSgNCiAgICArICAgICAgICAiRGVwcmVjYXRpb24gd2FybmluZzogezB9KCkn
cyAndmVyYm9zZScgYXJndW1lbnQgaGFzIG5vIGVmZmVjdC4gU2luY2UgIg0KICAgICsgICAgICAg
ICJLY29uZmlnbGliIDEyLjAuMCwgdGhlIG1lc3NhZ2UgaXMgcmV0dXJuZWQgZnJvbSB7MH0oKSBp
bnN0ZWFkLCAiDQogICAgKyAgICAgICAgImFuZCBpcyBhbHdheXMgZ2VuZXJhdGVkLiBEbyBlLmcu
IHByaW50KGtjb25mLnswfSgpKSBpZiB5b3Ugd2FudCB0byAiDQogICAgKyAgICAgICAgIndhbnQg
dG8gc2hvdyBhIG1lc3NhZ2UgbGlrZSBcIkxvYWRlZCBjb25maWd1cmF0aW9uICcuY29uZmlnJ1wi
IG9uICINCiAgICArICAgICAgICAic3Rkb3V0LiBUaGUgb2xkIEFQSSByZXF1aXJlZCB1Z2x5IGhh
Y2tzIHRvIHJldXNlIG1lc3NhZ2VzIGluICINCiAgICArICAgICAgICAiY29uZmlndXJhdGlvbiBp
bnRlcmZhY2VzLlxuIi5mb3JtYXQoZm5fbmFtZSkpDQogICAgKw0KICAgICsNCiAgICArIyBQcmVk
ZWZpbmVkIHByZXByb2Nlc3NvciBmdW5jdGlvbnMNCiAgICArDQogICAgKw0KICAgICtkZWYgX2Zp
bGVuYW1lX2ZuKGtjb25mLCBfKToNCiAgICArICAgIHJldHVybiBrY29uZi5fZmlsZW5hbWUNCiAg
ICArDQogICAgKw0KICAgICtkZWYgX2xpbmVub19mbihrY29uZiwgXyk6DQogICAgKyAgICByZXR1
cm4gc3RyKGtjb25mLl9saW5lbnIpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9pbmZvX2ZuKGtj
b25mLCBfLCBtc2cpOg0KICAgICsgICAgcHJpbnQoInt9Ont9OiB7fSIuZm9ybWF0KGtjb25mLl9m
aWxlbmFtZSwga2NvbmYuX2xpbmVuciwgbXNnKSkNCiAgICArDQogICAgKyAgICByZXR1cm4gIiIN
CiAgICArDQogICAgKw0KICAgICtkZWYgX3dhcm5pbmdfaWZfZm4oa2NvbmYsIF8sIGNvbmQsIG1z
Zyk6DQogICAgKyAgICBpZiBjb25kID09ICJ5IjoNCiAgICArICAgICAgICBrY29uZi5fd2Fybiht
c2csIGtjb25mLl9maWxlbmFtZSwga2NvbmYuX2xpbmVucikNCiAgICArDQogICAgKyAgICByZXR1
cm4gIiINCiAgICArDQogICAgKw0KICAgICtkZWYgX2Vycm9yX2lmX2ZuKGtjb25mLCBfLCBjb25k
LCBtc2cpOg0KICAgICsgICAgaWYgY29uZCA9PSAieSI6DQogICAgKyAgICAgICAgcmFpc2UgS2Nv
bmZpZ0Vycm9yKCJ7fTp7fToge30iLmZvcm1hdCgNCiAgICArICAgICAgICAgICAga2NvbmYuX2Zp
bGVuYW1lLCBrY29uZi5fbGluZW5yLCBtc2cpKQ0KICAgICsNCiAgICArICAgIHJldHVybiAiIg0K
ICAgICsNCiAgICArDQogICAgK2RlZiBfc2hlbGxfZm4oa2NvbmYsIF8sIGNvbW1hbmQpOg0KICAg
ICsgICAgIyBPbmx5IGltcG9ydCBhcyBuZWVkZWQsIHRvIHNhdmUgc29tZSBzdGFydHVwIHRpbWUN
CiAgICArICAgIGltcG9ydCBzdWJwcm9jZXNzDQogICAgKw0KICAgICsgICAgc3Rkb3V0LCBzdGRl
cnIgPSBzdWJwcm9jZXNzLlBvcGVuKA0KICAgICsgICAgICAgIGNvbW1hbmQsIHNoZWxsPVRydWUs
IHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUNCiAgICArICAg
ICkuY29tbXVuaWNhdGUoKQ0KICAgICsNCiAgICArICAgIGlmIG5vdCBfSVNfUFkyOg0KICAgICsg
ICAgICAgIHRyeToNCiAgICArICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LmRlY29kZShrY29u
Zi5fZW5jb2RpbmcpDQogICAgKyAgICAgICAgICAgIHN0ZGVyciA9IHN0ZGVyci5kZWNvZGUoa2Nv
bmYuX2VuY29kaW5nKQ0KICAgICsgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3IgYXMg
ZToNCiAgICArICAgICAgICAgICAgX2RlY29kaW5nX2Vycm9yKGUsIGtjb25mLl9maWxlbmFtZSwg
a2NvbmYuX2xpbmVucikNCiAgICArDQogICAgKyAgICBpZiBzdGRlcnI6DQogICAgKyAgICAgICAg
a2NvbmYuX3dhcm4oIid7fScgd3JvdGUgdG8gc3RkZXJyOiB7fSIuZm9ybWF0KA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCAiXG4iLmpvaW4oc3RkZXJyLnNwbGl0bGluZXMo
KSkpLA0KICAgICsgICAgICAgICAgICAgICAgICAgIGtjb25mLl9maWxlbmFtZSwga2NvbmYuX2xp
bmVucikNCiAgICArDQogICAgKyAgICAjIFVuaXZlcnNhbCBuZXdsaW5lcyB3aXRoIHNwbGl0bGlu
ZXMoKSAodG8gcHJldmVudCBlLmcuIHN0cmF5IFxyJ3MgaW4NCiAgICArICAgICMgY29tbWFuZCBv
dXRwdXQgb24gV2luZG93cyksIHRyYWlsaW5nIG5ld2xpbmUgcmVtb3ZhbCwgYW5kDQogICAgKyAg
ICAjIG5ld2xpbmUtdG8tc3BhY2UgY29udmVyc2lvbi4NCiAgICArICAgICMNCiAgICArICAgICMg
T24gUHl0aG9uIDMgdmVyc2lvbnMgYmVmb3JlIDMuNiwgaXQncyBub3QgcG9zc2libGUgdG8gc3Bl
Y2lmeSB0aGUNCiAgICArICAgICMgZW5jb2Rpbmcgd2hlbiBwYXNzaW5nIHVuaXZlcnNhbF9uZXds
aW5lcz1UcnVlIHRvIFBvcGVuKCkgKHRoZSAnZW5jb2RpbmcnDQogICAgKyAgICAjIHBhcmFtZXRl
ciB3YXMgYWRkZWQgaW4gMy42KSwgc28gd2UgZG8gdGhpcyBtYW51YWwgdmVyc2lvbiBpbnN0ZWFk
Lg0KICAgICsgICAgcmV0dXJuICJcbiIuam9pbihzdGRvdXQuc3BsaXRsaW5lcygpKS5yc3RyaXAo
IlxuIikucmVwbGFjZSgiXG4iLCAiICIpDQogICAgKw0KICAgICsjDQogICAgKyMgR2xvYmFsIGNv
bnN0YW50cw0KICAgICsjDQogICAgKw0KICAgICtUUklfVE9fU1RSID0gew0KICAgICsgICAgMDog
Im4iLA0KICAgICsgICAgMTogIm0iLA0KICAgICsgICAgMjogInkiLA0KICAgICt9DQogICAgKw0K
ICAgICtTVFJfVE9fVFJJID0gew0KICAgICsgICAgIm4iOiAwLA0KICAgICsgICAgIm0iOiAxLA0K
ICAgICsgICAgInkiOiAyLA0KICAgICt9DQogICAgKw0KICAgICsjIENvbnN0YW50IHJlcHJlc2Vu
dGluZyB0aGF0IHRoZXJlJ3Mgbm8gY2FjaGVkIGNob2ljZSBzZWxlY3Rpb24uIFRoaXMgaXMNCiAg
ICArIyBkaXN0aW5jdCBmcm9tIGEgY2FjaGVkIE5vbmUgKG5vIHNlbGVjdGlvbikuIEFueSBvYmpl
Y3QgdGhhdCdzIG5vdCBOb25lIG9yIGENCiAgICArIyBTeW1ib2wgd2lsbCBkby4gV2UgdGVzdCB0
aGlzIHdpdGggJ2lzJy4NCiAgICArX05PX0NBQ0hFRF9TRUxFQ1RJT04gPSAwDQogICAgKw0KICAg
ICsjIEFyZSB3ZSBydW5uaW5nIG9uIFB5dGhvbiAyPw0KICAgICtfSVNfUFkyID0gc3lzLnZlcnNp
b25faW5mb1swXSA8IDMNCiAgICArDQogICAgK3RyeToNCiAgICArICAgIF9VTkFNRV9SRUxFQVNF
ID0gb3MudW5hbWUoKVsyXQ0KICAgICtleGNlcHQgQXR0cmlidXRlRXJyb3I6DQogICAgKyAgICAj
IE9ubHkgaW1wb3J0IGFzIG5lZWRlZCwgdG8gc2F2ZSBzb21lIHN0YXJ0dXAgdGltZQ0KICAgICsg
ICAgaW1wb3J0IHBsYXRmb3JtDQogICAgKyAgICBfVU5BTUVfUkVMRUFTRSA9IHBsYXRmb3JtLnVu
YW1lKClbMl0NCiAgICArDQogICAgKyMgVGhlIHRva2VuIGFuZCB0eXBlIGNvbnN0YW50cyBiZWxv
dyBhcmUgc2FmZSB0byB0ZXN0IHdpdGggJ2lzJywgd2hpY2ggaXMgYSBiaXQNCiAgICArIyBmYXN0
ZXIgKH4zMCUgZmFzdGVyIG9uIG15IG1hY2hpbmUsIGFuZCBhIGZldyAlIGZhc3RlciBmb3IgdG90
YWwgcGFyc2luZw0KICAgICsjIHRpbWUpLCBldmVuIHdpdGhvdXQgYXNzdW1pbmcgUHl0aG9uJ3Mg
c21hbGwgaW50ZWdlciBvcHRpbWl6YXRpb24gKHdoaWNoDQogICAgKyMgY2FjaGVzIHNtYWxsIGlu
dGVnZXIgb2JqZWN0cykuIFRoZSBjb25zdGFudHMgZW5kIHVwIHBvaW50aW5nIHRvIHVuaXF1ZQ0K
ICAgICsjIGludGVnZXIgb2JqZWN0cywgYW5kIHNpbmNlIHdlIGNvbnNpc3RlbnRseSByZWZlciB0
byB0aGVtIHZpYSB0aGUgbmFtZXMgYmVsb3csDQogICAgKyMgd2UgYWx3YXlzIGdldCB0aGUgc2Ft
ZSBvYmplY3QuDQogICAgKyMNCiAgICArIyBDbGllbnQgY29kZSBzaG91bGQgdXNlID09IHRob3Vn
aC4NCiAgICArDQogICAgKyMgVG9rZW5zLCB3aXRoIHZhbHVlcyAxLCAyLCAuLi4gLiBBdm9pZGlu
ZyAwIHNpbXBsaWZpZXMgc29tZSBjaGVja3MgYnkgbWFraW5nDQogICAgKyMgYWxsIHRva2VucyBl
eGNlcHQgZW1wdHkgc3RyaW5ncyB0cnV0aHkuDQogICAgKygNCiAgICArICAgIF9UX0FMTE5PQ09O
RklHX1ksDQogICAgKyAgICBfVF9BTkQsDQogICAgKyAgICBfVF9CT09MLA0KICAgICsgICAgX1Rf
Q0hPSUNFLA0KICAgICsgICAgX1RfQ0xPU0VfUEFSRU4sDQogICAgKyAgICBfVF9DT01NRU5ULA0K
ICAgICsgICAgX1RfQ09ORklHLA0KICAgICsgICAgX1RfREVGQVVMVCwNCiAgICArICAgIF9UX0RF
RkNPTkZJR19MSVNULA0KICAgICsgICAgX1RfREVGX0JPT0wsDQogICAgKyAgICBfVF9ERUZfSEVY
LA0KICAgICsgICAgX1RfREVGX0lOVCwNCiAgICArICAgIF9UX0RFRl9TVFJJTkcsDQogICAgKyAg
ICBfVF9ERUZfVFJJU1RBVEUsDQogICAgKyAgICBfVF9ERVBFTkRTLA0KICAgICsgICAgX1RfRU5E
Q0hPSUNFLA0KICAgICsgICAgX1RfRU5ESUYsDQogICAgKyAgICBfVF9FTkRNRU5VLA0KICAgICsg
ICAgX1RfRU5WLA0KICAgICsgICAgX1RfRVFVQUwsDQogICAgKyAgICBfVF9HUkVBVEVSLA0KICAg
ICsgICAgX1RfR1JFQVRFUl9FUVVBTCwNCiAgICArICAgIF9UX0hFTFAsDQogICAgKyAgICBfVF9I
RVgsDQogICAgKyAgICBfVF9JRiwNCiAgICArICAgIF9UX0lNUExZLA0KICAgICsgICAgX1RfSU5U
LA0KICAgICsgICAgX1RfTEVTUywNCiAgICArICAgIF9UX0xFU1NfRVFVQUwsDQogICAgKyAgICBf
VF9NQUlOTUVOVSwNCiAgICArICAgIF9UX01FTlUsDQogICAgKyAgICBfVF9NRU5VQ09ORklHLA0K
ICAgICsgICAgX1RfTU9EVUxFUywNCiAgICArICAgIF9UX05PVCwNCiAgICArICAgIF9UX09OLA0K
ICAgICsgICAgX1RfT1BFTl9QQVJFTiwNCiAgICArICAgIF9UX09QVElPTiwNCiAgICArICAgIF9U
X09QVElPTkFMLA0KICAgICsgICAgX1RfT1IsDQogICAgKyAgICBfVF9PUlNPVVJDRSwNCiAgICAr
ICAgIF9UX09TT1VSQ0UsDQogICAgKyAgICBfVF9QUk9NUFQsDQogICAgKyAgICBfVF9SQU5HRSwN
CiAgICArICAgIF9UX1JTT1VSQ0UsDQogICAgKyAgICBfVF9TRUxFQ1QsDQogICAgKyAgICBfVF9T
T1VSQ0UsDQogICAgKyAgICBfVF9TVFJJTkcsDQogICAgKyAgICBfVF9UUklTVEFURSwNCiAgICAr
ICAgIF9UX1VORVFVQUwsDQogICAgKyAgICBfVF9WSVNJQkxFLA0KICAgICspID0gcmFuZ2UoMSwg
NTEpDQogICAgKw0KICAgICsjIEtleXdvcmQgdG8gdG9rZW4gbWFwLCB3aXRoIHRoZSBnZXQoKSBt
ZXRob2QgYXNzaWduZWQgZGlyZWN0bHkgYXMgYSBzbWFsbA0KICAgICsjIG9wdGltaXphdGlvbg0K
ICAgICtfZ2V0X2tleXdvcmQgPSB7DQogICAgKyAgICAiLS0taGVscC0tLSI6ICAgICBfVF9IRUxQ
LA0KICAgICsgICAgImFsbG5vY29uZmlnX3kiOiAgX1RfQUxMTk9DT05GSUdfWSwNCiAgICArICAg
ICJib29sIjogICAgICAgICAgIF9UX0JPT0wsDQogICAgKyAgICAiYm9vbGVhbiI6ICAgICAgICBf
VF9CT09MLA0KICAgICsgICAgImNob2ljZSI6ICAgICAgICAgX1RfQ0hPSUNFLA0KICAgICsgICAg
ImNvbW1lbnQiOiAgICAgICAgX1RfQ09NTUVOVCwNCiAgICArICAgICJjb25maWciOiAgICAgICAg
IF9UX0NPTkZJRywNCiAgICArICAgICJkZWZfYm9vbCI6ICAgICAgIF9UX0RFRl9CT09MLA0KICAg
ICsgICAgImRlZl9oZXgiOiAgICAgICAgX1RfREVGX0hFWCwNCiAgICArICAgICJkZWZfaW50Ijog
ICAgICAgIF9UX0RFRl9JTlQsDQogICAgKyAgICAiZGVmX3N0cmluZyI6ICAgICBfVF9ERUZfU1RS
SU5HLA0KICAgICsgICAgImRlZl90cmlzdGF0ZSI6ICAgX1RfREVGX1RSSVNUQVRFLA0KICAgICsg
ICAgImRlZmF1bHQiOiAgICAgICAgX1RfREVGQVVMVCwNCiAgICArICAgICJkZWZjb25maWdfbGlz
dCI6IF9UX0RFRkNPTkZJR19MSVNULA0KICAgICsgICAgImRlcGVuZHMiOiAgICAgICAgX1RfREVQ
RU5EUywNCiAgICArICAgICJlbmRjaG9pY2UiOiAgICAgIF9UX0VORENIT0lDRSwNCiAgICArICAg
ICJlbmRpZiI6ICAgICAgICAgIF9UX0VORElGLA0KICAgICsgICAgImVuZG1lbnUiOiAgICAgICAg
X1RfRU5ETUVOVSwNCiAgICArICAgICJlbnYiOiAgICAgICAgICAgIF9UX0VOViwNCiAgICArICAg
ICJncnNvdXJjZSI6ICAgICAgIF9UX09SU09VUkNFLCAgIyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0
eQ0KICAgICsgICAgImdzb3VyY2UiOiAgICAgICAgX1RfT1NPVVJDRSwgICAjIEJhY2t3YXJkcyBj
b21wYXRpYmlsaXR5DQogICAgKyAgICAiaGVscCI6ICAgICAgICAgICBfVF9IRUxQLA0KICAgICsg
ICAgImhleCI6ICAgICAgICAgICAgX1RfSEVYLA0KICAgICsgICAgImlmIjogICAgICAgICAgICAg
X1RfSUYsDQogICAgKyAgICAiaW1wbHkiOiAgICAgICAgICBfVF9JTVBMWSwNCiAgICArICAgICJp
bnQiOiAgICAgICAgICAgIF9UX0lOVCwNCiAgICArICAgICJtYWlubWVudSI6ICAgICAgIF9UX01B
SU5NRU5VLA0KICAgICsgICAgIm1lbnUiOiAgICAgICAgICAgX1RfTUVOVSwNCiAgICArICAgICJt
ZW51Y29uZmlnIjogICAgIF9UX01FTlVDT05GSUcsDQogICAgKyAgICAibW9kdWxlcyI6ICAgICAg
ICBfVF9NT0RVTEVTLA0KICAgICsgICAgIm9uIjogICAgICAgICAgICAgX1RfT04sDQogICAgKyAg
ICAib3B0aW9uIjogICAgICAgICBfVF9PUFRJT04sDQogICAgKyAgICAib3B0aW9uYWwiOiAgICAg
ICBfVF9PUFRJT05BTCwNCiAgICArICAgICJvcnNvdXJjZSI6ICAgICAgIF9UX09SU09VUkNFLA0K
ICAgICsgICAgIm9zb3VyY2UiOiAgICAgICAgX1RfT1NPVVJDRSwNCiAgICArICAgICJwcm9tcHQi
OiAgICAgICAgIF9UX1BST01QVCwNCiAgICArICAgICJyYW5nZSI6ICAgICAgICAgIF9UX1JBTkdF
LA0KICAgICsgICAgInJzb3VyY2UiOiAgICAgICAgX1RfUlNPVVJDRSwNCiAgICArICAgICJzZWxl
Y3QiOiAgICAgICAgIF9UX1NFTEVDVCwNCiAgICArICAgICJzb3VyY2UiOiAgICAgICAgIF9UX1NP
VVJDRSwNCiAgICArICAgICJzdHJpbmciOiAgICAgICAgIF9UX1NUUklORywNCiAgICArICAgICJ0
cmlzdGF0ZSI6ICAgICAgIF9UX1RSSVNUQVRFLA0KICAgICsgICAgInZpc2libGUiOiAgICAgICAg
X1RfVklTSUJMRSwNCiAgICArfS5nZXQNCiAgICArDQogICAgKyMgVGhlIGNvbnN0YW50cyBiZWxv
dyBtYXRjaCB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdG9rZW5zIHRvIHJlbW92ZSB0
aGUNCiAgICArIyBuZWVkIGZvciBjb252ZXJzaW9uDQogICAgKw0KICAgICsjIE5vZGUgdHlwZXMN
CiAgICArTUVOVSAgICA9IF9UX01FTlUNCiAgICArQ09NTUVOVCA9IF9UX0NPTU1FTlQNCiAgICAr
DQogICAgKyMgRXhwcmVzc2lvbiB0eXBlcw0KICAgICtBTkQgICAgICAgICAgID0gX1RfQU5EDQog
ICAgK09SICAgICAgICAgICAgPSBfVF9PUg0KICAgICtOT1QgICAgICAgICAgID0gX1RfTk9UDQog
ICAgK0VRVUFMICAgICAgICAgPSBfVF9FUVVBTA0KICAgICtVTkVRVUFMICAgICAgID0gX1RfVU5F
UVVBTA0KICAgICtMRVNTICAgICAgICAgID0gX1RfTEVTUw0KICAgICtMRVNTX0VRVUFMICAgID0g
X1RfTEVTU19FUVVBTA0KICAgICtHUkVBVEVSICAgICAgID0gX1RfR1JFQVRFUg0KICAgICtHUkVB
VEVSX0VRVUFMID0gX1RfR1JFQVRFUl9FUVVBTA0KICAgICsNCiAgICArUkVMX1RPX1NUUiA9IHsN
CiAgICArICAgIEVRVUFMOiAgICAgICAgICI9IiwNCiAgICArICAgIFVORVFVQUw6ICAgICAgICIh
PSIsDQogICAgKyAgICBMRVNTOiAgICAgICAgICAiPCIsDQogICAgKyAgICBMRVNTX0VRVUFMOiAg
ICAiPD0iLA0KICAgICsgICAgR1JFQVRFUjogICAgICAgIj4iLA0KICAgICsgICAgR1JFQVRFUl9F
UVVBTDogIj49IiwNCiAgICArfQ0KICAgICsNCiAgICArIyBTeW1ib2wvY2hvaWNlIHR5cGVzLiBV
TktOT1dOIGlzIDAgKGZhbHN5KSB0byBzaW1wbGlmeSBzb21lIGNoZWNrcy4NCiAgICArIyBDbGll
bnQgY29kZSBzaG91bGRuJ3QgcmVseSBvbiBpdCB0aG91Z2gsIGFzIGl0IHdhcyBub24temVybyBp
bg0KICAgICsjIG9sZGVyIHZlcnNpb25zLg0KICAgICtVTktOT1dOICA9IDANCiAgICArQk9PTCAg
ICAgPSBfVF9CT09MDQogICAgK1RSSVNUQVRFID0gX1RfVFJJU1RBVEUNCiAgICArU1RSSU5HICAg
PSBfVF9TVFJJTkcNCiAgICArSU5UICAgICAgPSBfVF9JTlQNCiAgICArSEVYICAgICAgPSBfVF9I
RVgNCiAgICArDQogICAgK1RZUEVfVE9fU1RSID0gew0KICAgICsgICAgVU5LTk9XTjogICJ1bmtu
b3duIiwNCiAgICArICAgIEJPT0w6ICAgICAiYm9vbCIsDQogICAgKyAgICBUUklTVEFURTogInRy
aXN0YXRlIiwNCiAgICArICAgIFNUUklORzogICAic3RyaW5nIiwNCiAgICArICAgIElOVDogICAg
ICAiaW50IiwNCiAgICArICAgIEhFWDogICAgICAiaGV4IiwNCiAgICArfQ0KICAgICsNCiAgICAr
IyBVc2VkIGluIGNvbXBhcmlzb25zLiAwIG1lYW5zIHRoZSBiYXNlIGlzIGluZmVycmVkIGZyb20g
dGhlIGZvcm1hdCBvZiB0aGUNCiAgICArIyBzdHJpbmcuDQogICAgK19UWVBFX1RPX0JBU0UgPSB7
DQogICAgKyAgICBIRVg6ICAgICAgMTYsDQogICAgKyAgICBJTlQ6ICAgICAgMTAsDQogICAgKyAg
ICBTVFJJTkc6ICAgMCwNCiAgICArICAgIFVOS05PV046ICAwLA0KICAgICt9DQogICAgKw0KICAg
ICsjIGRlZl9ib29sIC0+IEJPT0wsIGV0Yy4NCiAgICArX0RFRl9UT0tFTl9UT19UWVBFID0gew0K
ICAgICsgICAgX1RfREVGX0JPT0w6ICAgICBCT09MLA0KICAgICsgICAgX1RfREVGX0hFWDogICAg
ICBIRVgsDQogICAgKyAgICBfVF9ERUZfSU5UOiAgICAgIElOVCwNCiAgICArICAgIF9UX0RFRl9T
VFJJTkc6ICAgU1RSSU5HLA0KICAgICsgICAgX1RfREVGX1RSSVNUQVRFOiBUUklTVEFURSwNCiAg
ICArfQ0KICAgICsNCiAgICArIyBUb2tlbnMgYWZ0ZXIgd2hpY2ggc3RyaW5ncyBhcmUgZXhwZWN0
ZWQuIFRoaXMgaXMgdXNlZCB0byB0ZWxsIHN0cmluZ3MgZnJvbQ0KICAgICsjIGNvbnN0YW50IHN5
bWJvbCByZWZlcmVuY2VzIGR1cmluZyB0b2tlbml6YXRpb24sIGJvdGggb2Ygd2hpY2ggYXJlIGVu
Y2xvc2VkIGluDQogICAgKyMgcXVvdGVzLg0KICAgICsjDQogICAgKyMgSWRlbnRpZmllci1saWtl
IGxleGVtZXMgKCJtaXNzaW5nIHF1b3RlcyIpIGFyZSBhbHNvIHRyZWF0ZWQgYXMgc3RyaW5ncyBh
ZnRlcg0KICAgICsjIHRoZXNlIHRva2Vucy4gX1RfQ0hPSUNFIGlzIGluY2x1ZGVkIHRvIGF2b2lk
IHN5bWJvbHMgYmVpbmcgcmVnaXN0ZXJlZCBmb3INCiAgICArIyBuYW1lZCBjaG9pY2VzLg0KICAg
ICtfU1RSSU5HX0xFWCA9IGZyb3plbnNldCh7DQogICAgKyAgICBfVF9CT09MLA0KICAgICsgICAg
X1RfQ0hPSUNFLA0KICAgICsgICAgX1RfQ09NTUVOVCwNCiAgICArICAgIF9UX0hFWCwNCiAgICAr
ICAgIF9UX0lOVCwNCiAgICArICAgIF9UX01BSU5NRU5VLA0KICAgICsgICAgX1RfTUVOVSwNCiAg
ICArICAgIF9UX09SU09VUkNFLA0KICAgICsgICAgX1RfT1NPVVJDRSwNCiAgICArICAgIF9UX1BS
T01QVCwNCiAgICArICAgIF9UX1JTT1VSQ0UsDQogICAgKyAgICBfVF9TT1VSQ0UsDQogICAgKyAg
ICBfVF9TVFJJTkcsDQogICAgKyAgICBfVF9UUklTVEFURSwNCiAgICArfSkNCiAgICArDQogICAg
KyMgVmFyaW91cyBzZXRzIGZvciBxdWljayBtZW1iZXJzaGlwIHRlc3RzLiBHaXZlcyBhIHNpbmds
ZSBnbG9iYWwgbG9va3VwIGFuZA0KICAgICsjIGF2b2lkcyBjcmVhdGluZyB0ZW1wb3JhcnkgZGlj
dHMvdHVwbGVzLg0KICAgICsNCiAgICArX1RZUEVfVE9LRU5TID0gZnJvemVuc2V0KHsNCiAgICAr
ICAgIF9UX0JPT0wsDQogICAgKyAgICBfVF9UUklTVEFURSwNCiAgICArICAgIF9UX0lOVCwNCiAg
ICArICAgIF9UX0hFWCwNCiAgICArICAgIF9UX1NUUklORywNCiAgICArfSkNCiAgICArDQogICAg
K19TT1VSQ0VfVE9LRU5TID0gZnJvemVuc2V0KHsNCiAgICArICAgIF9UX1NPVVJDRSwNCiAgICAr
ICAgIF9UX1JTT1VSQ0UsDQogICAgKyAgICBfVF9PU09VUkNFLA0KICAgICsgICAgX1RfT1JTT1VS
Q0UsDQogICAgK30pDQogICAgKw0KICAgICtfUkVMX1NPVVJDRV9UT0tFTlMgPSBmcm96ZW5zZXQo
ew0KICAgICsgICAgX1RfUlNPVVJDRSwNCiAgICArICAgIF9UX09SU09VUkNFLA0KICAgICt9KQ0K
ICAgICsNCiAgICArIyBPYmxpZ2F0b3J5IChub24tb3B0aW9uYWwpIHNvdXJjZXMNCiAgICArX09C
TF9TT1VSQ0VfVE9LRU5TID0gZnJvemVuc2V0KHsNCiAgICArICAgIF9UX1NPVVJDRSwNCiAgICAr
ICAgIF9UX1JTT1VSQ0UsDQogICAgK30pDQogICAgKw0KICAgICtfQk9PTF9UUklTVEFURSA9IGZy
b3plbnNldCh7DQogICAgKyAgICBCT09MLA0KICAgICsgICAgVFJJU1RBVEUsDQogICAgK30pDQog
ICAgKw0KICAgICtfQk9PTF9UUklTVEFURV9VTktOT1dOID0gZnJvemVuc2V0KHsNCiAgICArICAg
IEJPT0wsDQogICAgKyAgICBUUklTVEFURSwNCiAgICArICAgIFVOS05PV04sDQogICAgK30pDQog
ICAgKw0KICAgICtfSU5UX0hFWCA9IGZyb3plbnNldCh7DQogICAgKyAgICBJTlQsDQogICAgKyAg
ICBIRVgsDQogICAgK30pDQogICAgKw0KICAgICtfU1lNQk9MX0NIT0lDRSA9IGZyb3plbnNldCh7
DQogICAgKyAgICBTeW1ib2wsDQogICAgKyAgICBDaG9pY2UsDQogICAgK30pDQogICAgKw0KICAg
ICtfTUVOVV9DT01NRU5UID0gZnJvemVuc2V0KHsNCiAgICArICAgIE1FTlUsDQogICAgKyAgICBD
T01NRU5ULA0KICAgICt9KQ0KICAgICsNCiAgICArX0VRVUFMX1VORVFVQUwgPSBmcm96ZW5zZXQo
ew0KICAgICsgICAgRVFVQUwsDQogICAgKyAgICBVTkVRVUFMLA0KICAgICt9KQ0KICAgICsNCiAg
ICArX1JFTEFUSU9OUyA9IGZyb3plbnNldCh7DQogICAgKyAgICBFUVVBTCwNCiAgICArICAgIFVO
RVFVQUwsDQogICAgKyAgICBMRVNTLA0KICAgICsgICAgTEVTU19FUVVBTCwNCiAgICArICAgIEdS
RUFURVIsDQogICAgKyAgICBHUkVBVEVSX0VRVUFMLA0KICAgICt9KQ0KICAgICsNCiAgICArIyBI
ZWxwZXIgZnVuY3Rpb25zIGZvciBnZXR0aW5nIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMs
IHdpdGggdGhlIG5lZWRlZA0KICAgICsjIG1hdGNoaW5nIGZ1bmN0aW9uIHJldHVybmVkIGRpcmVj
dGx5IGFzIGEgc21hbGwgb3B0aW1pemF0aW9uLg0KICAgICsjDQogICAgKyMgVXNlIEFTQ0lJIHJl
Z2V4IG1hdGNoaW5nIG9uIFB5dGhvbiAzLiBJdCdzIGFscmVhZHkgdGhlIGRlZmF1bHQgb24gUHl0
aG9uIDIuDQogICAgKw0KICAgICsNCiAgICArZGVmIF9yZV9tYXRjaChyZWdleCk6DQogICAgKyAg
ICByZXR1cm4gcmUuY29tcGlsZShyZWdleCwgMCBpZiBfSVNfUFkyIGVsc2UgcmUuQVNDSUkpLm1h
dGNoDQogICAgKw0KICAgICsNCiAgICArZGVmIF9yZV9zZWFyY2gocmVnZXgpOg0KICAgICsgICAg
cmV0dXJuIHJlLmNvbXBpbGUocmVnZXgsIDAgaWYgX0lTX1BZMiBlbHNlIHJlLkFTQ0lJKS5zZWFy
Y2gNCiAgICArDQogICAgKw0KICAgICsjIFZhcmlvdXMgcmVndWxhciBleHByZXNzaW9ucyB1c2Vk
IGR1cmluZyBwYXJzaW5nDQogICAgKw0KICAgICsjIFRoZSBpbml0aWFsIHRva2VuIG9uIGEgbGlu
ZS4gQWxzbyBlYXRzIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UsIHNvDQogICAgKyMg
dGhhdCB3ZSBjYW4ganVtcCBzdHJhaWdodCB0byB0aGUgbmV4dCB0b2tlbiAob3IgdG8gdGhlIGVu
ZCBvZiB0aGUgbGluZSBpZg0KICAgICsjIHRoZXJlIGlzIG9ubHkgb25lIHRva2VuKS4NCiAgICAr
Iw0KICAgICsjIFRoaXMgcmVnZXggd2lsbCBhbHNvIGZhaWwgdG8gbWF0Y2ggZm9yIGVtcHR5IGxp
bmVzIGFuZCBjb21tZW50IGxpbmVzLg0KICAgICsjDQogICAgKyMgJyQnIGlzIGluY2x1ZGVkIHRv
IGRldGVjdCBwcmVwcm9jZXNzb3IgdmFyaWFibGUgYXNzaWdubWVudHMgd2l0aCBtYWNybw0KICAg
ICsjIGV4cGFuc2lvbnMgaW4gdGhlIGxlZnQtaGFuZCBzaWRlLg0KICAgICtfY29tbWFuZF9tYXRj
aCA9IF9yZV9tYXRjaChyIlxzKihbQS1aYS16MC05XyQtXSspXHMqIikNCiAgICArDQogICAgKyMg
QW4gaWRlbnRpZmllci9rZXl3b3JkIGFmdGVyIHRoZSBmaXJzdCB0b2tlbi4gQWxzbyBlYXRzIHRy
YWlsaW5nIHdoaXRlc3BhY2UuDQogICAgKyMgJyQnIGlzIGluY2x1ZGVkIHRvIGRldGVjdCBpZGVu
dGlmaWVycyBjb250YWluaW5nIG1hY3JvIGV4cGFuc2lvbnMuDQogICAgK19pZF9rZXl3b3JkX21h
dGNoID0gX3JlX21hdGNoKHIiKFtBLVphLXowLTlfJC8uLV0rKVxzKiIpDQogICAgKw0KICAgICsj
IEEgZnJhZ21lbnQgaW4gdGhlIGxlZnQtaGFuZCBzaWRlIG9mIGEgcHJlcHJvY2Vzc29yIHZhcmlh
YmxlIGFzc2lnbm1lbnQuIFRoZXNlDQogICAgKyMgYXJlIHRoZSBwb3J0aW9ucyBiZXR3ZWVuIG1h
Y3JvIGV4cGFuc2lvbnMgKCQoZm9vKSkuIE1hY3JvcyBhcmUgc3VwcG9ydGVkIGluDQogICAgKyMg
dGhlIExIUyAodmFyaWFibGUgbmFtZSkuDQogICAgK19hc3NpZ25tZW50X2xoc19mcmFnbWVudF9t
YXRjaCA9IF9yZV9tYXRjaCgiW0EtWmEtejAtOV8tXSoiKQ0KICAgICsNCiAgICArIyBUaGUgYXNz
aWdubWVudCBvcGVyYXRvciBhbmQgdmFsdWUgKHJpZ2h0LWhhbmQgc2lkZSkgaW4gYSBwcmVwcm9j
ZXNzb3INCiAgICArIyB2YXJpYWJsZSBhc3NpZ25tZW50DQogICAgK19hc3NpZ25tZW50X3Joc19t
YXRjaCA9IF9yZV9tYXRjaChyIlxzKig9fDo9fFwrPSlccyooLiopIikNCiAgICArDQogICAgKyMg
U3BlY2lhbCBjaGFyYWN0ZXJzL3N0cmluZ3Mgd2hpbGUgZXhwYW5kaW5nIGEgbWFjcm8gKCcpJywg
JywnLCBhbmQgJyQoJykNCiAgICArX21hY3JvX3NwZWNpYWxfc2VhcmNoID0gX3JlX3NlYXJjaChy
IlwpfCx8XCRcKCIpDQogICAgKw0KICAgICsjIFNwZWNpYWwgY2hhcmFjdGVycy9zdHJpbmdzIHdo
aWxlIGV4cGFuZGluZyBhIHN0cmluZyAocXVvdGVzLCAnXCcsIGFuZCAnJCgnKQ0KICAgICtfc3Ry
aW5nX3NwZWNpYWxfc2VhcmNoID0gX3JlX3NlYXJjaChyJyJ8XCd8XFx8XCRcKCcpDQogICAgKw0K
ICAgICsjIFNwZWNpYWwgY2hhcmFjdGVycy9zdHJpbmdzIHdoaWxlIGV4cGFuZGluZyBhIHN5bWJv
bCBuYW1lLiBBbHNvIGluY2x1ZGVzDQogICAgKyMgZW5kLW9mLWxpbmUsIGluIGNhc2UgdGhlIG1h
Y3JvIGlzIHRoZSBsYXN0IHRoaW5nIG9uIHRoZSBsaW5lLg0KICAgICtfbmFtZV9zcGVjaWFsX3Nl
YXJjaCA9IF9yZV9zZWFyY2gocidbXkEtWmEtejAtOV8kLy4tXXxcJFwofCQnKQ0KICAgICsNCiAg
ICArIyBBIHZhbGlkIHJpZ2h0LWhhbmQgc2lkZSBmb3IgYW4gYXNzaWdubWVudCB0byBhIHN0cmlu
ZyBzeW1ib2wgaW4gYSAuY29uZmlnDQogICAgKyMgZmlsZSwgaW5jbHVkaW5nIGVzY2FwZWQgY2hh
cmFjdGVycy4gRXh0cmFjdHMgdGhlIGNvbnRlbnRzLg0KICAgICtfY29uZl9zdHJpbmdfbWF0Y2gg
PSBfcmVfbWF0Y2gociciKCg/OlteXFwiXXxcXC4pKikiJykNCiAgICBkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnbGliL2xpc3RuZXdjb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvbGlz
dG5ld2NvbmZpZy5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDAwMDAw
MC4uNTlkZTE0MQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWds
aWIvbGlzdG5ld2NvbmZpZy5weQ0KICAgIEBAIC0wLDAgKzEsNDcgQEANCiAgICArIyEvdXNyL2Jp
bi9lbnYgcHl0aG9uDQogICAgKw0KICAgICsjIENvcHlyaWdodCAoYykgMjAxOC0yMDE5LCBVbGYg
TWFnbnVzc29uDQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQw0KICAgICsNCiAg
ICArIiIiDQogICAgK0xpc3QgYWxsIHVzZXItbW9kaWZpYWJsZSBzeW1ib2xzIHRoYXQgYXJlIG5v
dCBnaXZlbiBhIHZhbHVlIGluIHRoZSBjb25maWd1cmF0aW9uDQogICAgK2ZpbGUuIFVzdWFsbHks
IHRoZXNlIGFyZSBuZXcgc3ltYm9scyB0aGF0IGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgS2NvbmZp
ZyBmaWxlcy4NCiAgICArDQogICAgK1RoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZW5hbWUg
aXMgJy5jb25maWcnLiBBIGRpZmZlcmVudCBmaWxlbmFtZSBjYW4gYmUNCiAgICArcGFzc2VkIGlu
IHRoZSBLQ09ORklHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZS4NCiAgICArIiIiDQogICAg
K2ltcG9ydCBzeXMNCiAgICArDQogICAgK2Zyb20ga2NvbmZpZ2xpYiBpbXBvcnQgc3RhbmRhcmRf
a2NvbmZpZywgQk9PTCwgVFJJU1RBVEUsIElOVCwgSEVYLCBTVFJJTkcsIFwNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICBUUklfVE9fU1RSDQogICAgKw0KICAgICsNCiAgICArZGVmIG1haW4o
KToNCiAgICArICAgIGtjb25mID0gc3RhbmRhcmRfa2NvbmZpZygpDQogICAgKyAgICAjIE1ha2Ug
aXQgcG9zc2libGUgdG8gZmlsdGVyIHRoaXMgbWVzc2FnZSBvdXQNCiAgICArICAgIHN5cy5zdGRl
cnIud3JpdGUoa2NvbmYubG9hZF9jb25maWcoKSArICJcbiIpDQogICAgKw0KICAgICsgICAgZm9y
IHN5bSBpbiBrY29uZi51bmlxdWVfZGVmaW5lZF9zeW1zOg0KICAgICsgICAgICAgICMgT25seSBz
aG93IHN5bWJvbHMgdGhhdCBjYW4gYmUgdG9nZ2xlZC4gQ2hvaWNlIHN5bWJvbHMgYXJlIGEgc3Bl
Y2lhbA0KICAgICsgICAgICAgICMgY2FzZSBpbiB0aGF0IHN5bS5hc3NpZ25hYmxlIHdpbGwgYmUg
KDIsKSAobGVuZ3RoIDEpIGZvciB2aXNpYmxlDQogICAgKyAgICAgICAgIyBzeW1ib2xzIGluIGNo
b2ljZXMgaW4geSBtb2RlLCBidXQgdGhleSBjYW4gc3RpbGwgYmUgdG9nZ2xlZCBieQ0KICAgICsg
ICAgICAgICMgc2VsZWN0aW5nIHNvbWUgb3RoZXIgc3ltYm9sLg0KICAgICsgICAgICAgIGlmIHN5
bS51c2VyX3ZhbHVlIGlzIE5vbmUgYW5kIFwNCiAgICArICAgICAgICAgICAobGVuKHN5bS5hc3Np
Z25hYmxlKSA+IDEgb3INCiAgICArICAgICAgICAgICAgKHN5bS52aXNpYmlsaXR5IGFuZCAoc3lt
Lm9yaWdfdHlwZSBpbiAoSU5ULCBIRVgsIFNUUklORykgb3INCiAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ltLmNob2ljZSkpKToNCiAgICArDQogICAgKyAgICAgICAgICAg
ICMgRG9uJ3QgcmV1c2UgdGhlICdjb25maWdfc3RyaW5nJyBmb3JtYXQgZm9yIGJvb2wvdHJpc3Rh
dGUgc3ltYm9scywNCiAgICArICAgICAgICAgICAgIyB0byBzaG93IG4tdmFsdWVkIHN5bWJvbHMg
YXMgJ0NPTkZJR19GT089bicgaW5zdGVhZCBvZg0KICAgICsgICAgICAgICAgICAjICcjIENPTkZJ
R19GT08gaXMgbm90IHNldCcuIFRoaXMgbWF0Y2hlcyB0aGUgQyB0b29scy4NCiAgICArICAgICAg
ICAgICAgaWYgc3ltLm9yaWdfdHlwZSBpbiAoQk9PTCwgVFJJU1RBVEUpOg0KICAgICsgICAgICAg
ICAgICAgICAgcyA9ICJ7fXt9PXt9XG4iLmZvcm1hdChrY29uZi5jb25maWdfcHJlZml4LCBzeW0u
bmFtZSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJJX1RP
X1NUUltzeW0udHJpX3ZhbHVlXSkNCiAgICArICAgICAgICAgICAgZWxzZToNCiAgICArICAgICAg
ICAgICAgICAgIHMgPSBzeW0uY29uZmlnX3N0cmluZw0KICAgICsNCiAgICArICAgICAgICAgICAg
c3lzLnN0ZG91dC53cml0ZShzKQ0KICAgICsNCiAgICArDQogICAgK2lmIF9fbmFtZV9fID09ICJf
X21haW5fXyI6DQogICAgKyAgICBtYWluKCkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnbGliL21ha2VmaWxlLnBhdGNoIGIvc3VwcG9ydC9rY29uZmlnbGliL21ha2VmaWxlLnBhdGNo
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5hNjE3ZWJkDQog
ICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi9tYWtlZmlsZS5w
YXRjaA0KICAgIEBAIC0wLDAgKzEsNDggQEANCiAgICArRnJvbSA5M2RhZjQ2ZjMwOWIwYzhmODYx
NDllZjU4YzQ5MDYzODdkMDU0YzIyIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KICAgICtGcm9t
OiBVbGYgTWFnbnVzc29uIDx1bGZhbGl6ZXJAZ21haWwuY29tPg0KICAgICtEYXRlOiBUdWUsIDkg
SnVuIDIwMTUgMTM6MDE6MzQgKzAyMDANCiAgICArU3ViamVjdDogW1BBVENIXSBLY29uZmlnbGli
IHNjcmlwdHMva2NvbmZpZy9NYWtlZmlsZSBwYXRjaA0KICAgICsNCiAgICArLS0tDQogICAgKyBz
Y3JpcHRzL2tjb25maWcvTWFrZWZpbGUgfCAyOSArKysrKysrKysrKysrKysrKysrKysrKysrKysr
Kw0KICAgICsgMSBmaWxlIGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKykNCiAgICArDQogICAgK2Rp
ZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvTWFrZWZpbGUgYi9zY3JpcHRzL2tjb25maWcvTWFr
ZWZpbGUNCiAgICAraW5kZXggM2YzMjdlMjFmNjBlLi44YjdkZDEyOTIwMDUgMTAwNjQ0DQogICAg
Ky0tLSBhL3NjcmlwdHMva2NvbmZpZy9NYWtlZmlsZQ0KICAgICsrKysgYi9zY3JpcHRzL2tjb25m
aWcvTWFrZWZpbGUNCiAgICArQEAgLTI3LDIgKzI3LDMxIEBAIGdjb25maWc6ICQob2JqKS9nY29u
Zg0KICAgICsgDQogICAgKytQSE9OWSArPSBzY3JpcHRjb25maWcgaXNjcmlwdGNvbmZpZyBrbWVu
dWNvbmZpZyBndWljb25maWcgZHVtcHZhcnNjb25maWcNCiAgICArKw0KICAgICsrUFlUSE9OQ01E
ID89IHB5dGhvbg0KICAgICsra3B5dGhvbiA6PSBQWVRIT05QQVRIPSQoc3JjdHJlZSkvS2NvbmZp
Z2xpYjokJFBZVEhPTlBBVEggJChQWVRIT05DTUQpDQogICAgKysNCiAgICArK2lmbmVxICgkKGZp
bHRlciBzY3JpcHRjb25maWcsJChNQUtFQ01ER09BTFMpKSwpDQogICAgKytpZm5kZWYgU0NSSVBU
DQogICAgKyskKGVycm9yIFVzZSAibWFrZSBzY3JpcHRjb25maWcgU0NSSVBUPTxwYXRoIHRvIHNj
cmlwdD4gW1NDUklQVF9BUkc9PGFyZ3VtZW50Pl0iKQ0KICAgICsrZW5kaWYNCiAgICArK2VuZGlm
DQogICAgKysNCiAgICArK3NjcmlwdGNvbmZpZzoNCiAgICArKwkkKFEpJChrcHl0aG9uKSAkKFND
UklQVCkgJChLY29uZmlnKSAkKGlmICQoU0NSSVBUX0FSRyksIiQoU0NSSVBUX0FSRykiKQ0KICAg
ICsrDQogICAgKytpc2NyaXB0Y29uZmlnOg0KICAgICsrCSQoUSkkKGtweXRob24pIC1pIC1jIFwN
CiAgICArKwkgICJpbXBvcnQga2NvbmZpZ2xpYjsgXA0KICAgICsrCSAgIGtjb25mID0ga2NvbmZp
Z2xpYi5LY29uZmlnKCckKEtjb25maWcpJyk7IFwNCiAgICArKwkgICBwcmludCgnQSBLY29uZmln
IGluc3RhbmNlIFwna2NvbmZcJyBmb3IgdGhlIGFyY2hpdGVjdHVyZSAkKEFSQ0gpIGhhcyBiZWVu
IGNyZWF0ZWQuJykiDQogICAgKysNCiAgICArK2ttZW51Y29uZmlnOg0KICAgICsrCSQoUSkkKGtw
eXRob24pICQoc3JjdHJlZSkvS2NvbmZpZ2xpYi9tZW51Y29uZmlnLnB5ICQoS2NvbmZpZykNCiAg
ICArKw0KICAgICsrZ3VpY29uZmlnOg0KICAgICsrCSQoUSkkKGtweXRob24pICQoc3JjdHJlZSkv
S2NvbmZpZ2xpYi9ndWljb25maWcucHkgJChLY29uZmlnKQ0KICAgICsrDQogICAgKytkdW1wdmFy
c2NvbmZpZzoNCiAgICArKwkkKFEpJChrcHl0aG9uKSAkKHNyY3RyZWUpL0tjb25maWdsaWIvZXhh
bXBsZXMvZHVtcHZhcnMucHkgJChLY29uZmlnKQ0KICAgICsrDQogICAgKyBtZW51Y29uZmlnOiAk
KG9iaikvbWNvbmYNCiAgICArLS0gDQogICAgKzIuMjAuMQ0KICAgICsNCiAgICBkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnbGliL21lbnVjb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIv
bWVudWNvbmZpZy5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDAwMDAw
MC4uNDgxNWM3Zg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWds
aWIvbWVudWNvbmZpZy5weQ0KICAgIEBAIC0wLDAgKzEsMzI2NCBAQA0KICAgICsjIS91c3IvYmlu
L2VudiBweXRob24NCiAgICArDQogICAgKyMgQ29weXJpZ2h0IChjKSAyMDE4LTIwMTksIE5vcmRp
YyBTZW1pY29uZHVjdG9yIEFTQSBhbmQgVWxmIE1hZ251c3Nvbg0KICAgICsjIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBJU0MNCiAgICArDQogICAgKyIiIg0KICAgICtPdmVydmlldw0KICAgICs9
PT09PT09PQ0KICAgICsNCiAgICArQSBjdXJzZXMtYmFzZWQgUHl0aG9uIDIvMyBtZW51Y29uZmln
IGltcGxlbWVudGF0aW9uLiBUaGUgaW50ZXJmYWNlIHNob3VsZCBmZWVsDQogICAgK2ZhbWlsaWFy
IHRvIHBlb3BsZSB1c2VkIHRvIG1jb25mICgnbWFrZSBtZW51Y29uZmlnJykuDQogICAgKw0KICAg
ICtTdXBwb3J0cyB0aGUgc2FtZSBrZXlzIGFzIG1jb25mLCBhbmQgYWxzbyBzdXBwb3J0cyBhIHNl
dCBvZiBrZXliaW5kaW5ncw0KICAgICtpbnNwaXJlZCBieSBWaToNCiAgICArDQogICAgKyAgSi9L
ICAgICA6IERvd24vVXANCiAgICArICBMICAgICAgIDogRW50ZXIgbWVudS9Ub2dnbGUgaXRlbQ0K
ICAgICsgIEggICAgICAgOiBMZWF2ZSBtZW51DQogICAgKyAgQ3RybC1EL1U6IFBhZ2UgRG93bi9Q
YWdlIFVwDQogICAgKyAgRy9FbmQgICA6IEp1bXAgdG8gZW5kIG9mIGxpc3QNCiAgICArICBnL0hv
bWUgIDogSnVtcCB0byBiZWdpbm5pbmcgb2YgbGlzdA0KICAgICsNCiAgICArW1NwYWNlXSB0b2dn
bGVzIHZhbHVlcyBpZiBwb3NzaWJsZSwgYW5kIGVudGVycyBtZW51cyBvdGhlcndpc2UuIFtFbnRl
cl0gd29ya3MNCiAgICArdGhlIG90aGVyIHdheSBhcm91bmQuDQogICAgKw0KICAgICtUaGUgbWNv
bmYgZmVhdHVyZSB3aGVyZSBwcmVzc2luZyBhIGtleSBqdW1wcyB0byBhIG1lbnUgZW50cnkgd2l0
aCB0aGF0DQogICAgK2NoYXJhY3RlciBpbiBpdCBpbiB0aGUgY3VycmVudCBtZW51IGlzbid0IHN1
cHBvcnRlZC4gQSBqdW1wLXRvIGZlYXR1cmUgZm9yDQogICAgK2p1bXBpbmcgZGlyZWN0bHkgdG8g
YW55IHN5bWJvbCAoaW5jbHVkaW5nIGludmlzaWJsZSBzeW1ib2xzKSwgY2hvaWNlLCBtZW51IG9y
DQogICAgK2NvbW1lbnQgKGFzIGluIGEgS2NvbmZpZyAnY29tbWVudCAiRm9vIicpIGlzIGF2YWls
YWJsZSBpbnN0ZWFkLg0KICAgICsNCiAgICArQSBmZXcgZGlmZmVyZW50IG1vZGVzIGFyZSBhdmFp
bGFibGU6DQogICAgKw0KICAgICsgIEY6IFRvZ2dsZSBzaG93LWhlbHAgbW9kZSwgd2hpY2ggc2hv
d3MgdGhlIGhlbHAgdGV4dCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkDQogICAgKyAgaXRlbSBp
biB0aGUgd2luZG93IGF0IHRoZSBib3R0b20gb2YgdGhlIG1lbnUgZGlzcGxheS4gVGhpcyBpcyBo
YW5keSB3aGVuDQogICAgKyAgYnJvd3NpbmcgdGhyb3VnaCBvcHRpb25zLg0KICAgICsNCiAgICAr
ICBDOiBUb2dnbGUgc2hvdy1uYW1lIG1vZGUsIHdoaWNoIHNob3dzIHRoZSBzeW1ib2wgbmFtZSBi
ZWZvcmUgZWFjaCBzeW1ib2wgbWVudQ0KICAgICsgIGVudHJ5DQogICAgKw0KICAgICsgIEE6IFRv
Z2dsZSBzaG93LWFsbCBtb2RlLCB3aGljaCBzaG93cyBhbGwgaXRlbXMsIGluY2x1ZGluZyBjdXJy
ZW50bHkgaW52aXNpYmxlDQogICAgKyAgaXRlbXMgYW5kIGl0ZW1zIHRoYXQgbGFjayBhIHByb21w
dC4gSW52aXNpYmxlIGl0ZW1zIGFyZSBkcmF3biBpbiBhIGRpZmZlcmVudA0KICAgICsgIHN0eWxl
IHRvIG1ha2UgdGhlbSBzdGFuZCBvdXQuDQogICAgKw0KICAgICsNCiAgICArUnVubmluZw0KICAg
ICs9PT09PT09DQogICAgKw0KICAgICttZW51Y29uZmlnLnB5IGNhbiBiZSBydW4gZWl0aGVyIGFz
IGEgc3RhbmRhbG9uZSBleGVjdXRhYmxlIG9yIGJ5IGNhbGxpbmcgdGhlDQogICAgK21lbnVjb25m
aWcoKSBmdW5jdGlvbiB3aXRoIGFuIGV4aXN0aW5nIEtjb25maWcgaW5zdGFuY2UuIFRoZSBzZWNv
bmQgb3B0aW9uIGlzIGENCiAgICArYml0IGluZmxleGlibGUgaW4gdGhhdCBpdCB3aWxsIHN0aWxs
IGxvYWQgYW5kIHNhdmUgLmNvbmZpZywgZXRjLg0KICAgICsNCiAgICArV2hlbiBydW4gaW4gc3Rh
bmRhbG9uZSBtb2RlLCB0aGUgdG9wLWxldmVsIEtjb25maWcgZmlsZSB0byBsb2FkIGNhbiBiZSBw
YXNzZWQNCiAgICArYXMgYSBjb21tYW5kLWxpbmUgYXJndW1lbnQuIFdpdGggbm8gYXJndW1lbnQs
IGl0IGRlZmF1bHRzIHRvICJLY29uZmlnIi4NCiAgICArDQogICAgK1RoZSBLQ09ORklHX0NPTkZJ
RyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzcGVjaWZpZXMgdGhlIC5jb25maWcgZmlsZSB0byBsb2Fk
IChpZg0KICAgICtpdCBleGlzdHMpIGFuZCBzYXZlLiBJZiBLQ09ORklHX0NPTkZJRyBpcyB1bnNl
dCwgIi5jb25maWciIGlzIHVzZWQuDQogICAgKw0KICAgICtXaGVuIG92ZXJ3cml0aW5nIGEgY29u
ZmlndXJhdGlvbiBmaWxlLCB0aGUgb2xkIHZlcnNpb24gaXMgc2F2ZWQgdG8NCiAgICArPGZpbGVu
YW1lPi5vbGQgKGUuZy4gLmNvbmZpZy5vbGQpLg0KICAgICsNCiAgICArJHNyY3RyZWUgaXMgc3Vw
cG9ydGVkIHRocm91Z2ggS2NvbmZpZ2xpYi4NCiAgICArDQogICAgKw0KICAgICtDb2xvciBzY2hl
bWVzDQogICAgKz09PT09PT09PT09PT0NCiAgICArDQogICAgK0l0IGlzIHBvc3NpYmxlIHRvIGN1
c3RvbWl6ZSB0aGUgY29sb3Igc2NoZW1lIGJ5IHNldHRpbmcgdGhlIE1FTlVDT05GSUdfU1RZTEUN
CiAgICArZW52aXJvbm1lbnQgdmFyaWFibGUuIEZvciBleGFtcGxlLCBzZXR0aW5nIGl0IHRvICdh
cXVhdGljJyB3aWxsIGVuYWJsZSBhbg0KICAgICthbHRlcm5hdGl2ZSwgbGVzcyB5ZWxsb3csIG1v
cmUgJ21ha2UgbWVudWNvbmZpZyctbGlrZSBjb2xvciBzY2hlbWUsIGNvbnRyaWJ1dGVkDQogICAg
K2J5IE1pdGphIEhvcnZhdCAocGlua2ZsdWlkKS4NCiAgICArDQogICAgK1RoaXMgaXMgdGhlIGN1
cnJlbnQgbGlzdCBvZiBidWlsdC1pbiBzdHlsZXM6DQogICAgKyAgICAtIGRlZmF1bHQgICAgICAg
Y2xhc3NpYyBLY29uZmlnbGliIHRoZW1lIHdpdGggYSB5ZWxsb3cgYWNjZW50DQogICAgKyAgICAt
IG1vbm9jaHJvbWUgICAgY29sb3JsZXNzIHRoZW1lICh1c2VzIG9ubHkgYm9sZCBhbmQgc3RhbmRv
dXQpIGF0dHJpYnV0ZXMsDQogICAgKyAgICAgICAgICAgICAgICAgICAgdGhpcyBzdHlsZSBpcyB1
c2VkIGlmIHRoZSB0ZXJtaW5hbCBkb2Vzbid0IHN1cHBvcnQgY29sb3JzDQogICAgKyAgICAtIGFx
dWF0aWMgICAgICAgYmx1ZSB0aW50ZWQgc3R5bGUgbG9vc2VseSByZXNlbWJsaW5nIHRoZSBseGRp
YWxvZyB0aGVtZQ0KICAgICsNCiAgICArSXQgaXMgcG9zc2libGUgdG8gY3VzdG9taXplIHRoZSBj
dXJyZW50IHN0eWxlIGJ5IGNoYW5naW5nIGNvbG9ycyBvZiBVSQ0KICAgICtlbGVtZW50cyBvbiB0
aGUgc2NyZWVuLiBUaGlzIGlzIHRoZSBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgY2FuIGJlIHN0eWxp
emVkOg0KICAgICsNCiAgICArICAgIC0gcGF0aCAgICAgICAgICBUb3Agcm93IGluIHRoZSBtYWlu
IGRpc3BsYXksIHdpdGggdGhlIG1lbnUgcGF0aA0KICAgICsgICAgLSBzZXBhcmF0b3IgICAgIFNl
cGFyYXRvciBsaW5lcyBiZXR3ZWVuIHdpbmRvd3MuIEFsc28gdXNlZCBmb3IgdGhlIHRvcCBsaW5l
DQogICAgKyAgICAgICAgICAgICAgICAgICAgaW4gdGhlIHN5bWJvbCBpbmZvcm1hdGlvbiBkaXNw
bGF5Lg0KICAgICsgICAgLSBsaXN0ICAgICAgICAgIExpc3Qgb2YgaXRlbXMsIGUuZy4gdGhlIG1h
aW4gZGlzcGxheQ0KICAgICsgICAgLSBzZWxlY3Rpb24gICAgIFN0eWxlIGZvciB0aGUgc2VsZWN0
ZWQgaXRlbQ0KICAgICsgICAgLSBpbnYtbGlzdCAgICAgIExpa2UgbGlzdCwgYnV0IGZvciBpbnZp
c2libGUgaXRlbXMuIFVzZWQgaW4gc2hvdy1hbGwgbW9kZS4NCiAgICArICAgIC0gaW52LXNlbGVj
dGlvbiBMaWtlIHNlbGVjdGlvbiwgYnV0IGZvciBpbnZpc2libGUgaXRlbXMuIFVzZWQgaW4gc2hv
dy1hbGwNCiAgICArICAgICAgICAgICAgICAgICAgICBtb2RlLg0KICAgICsgICAgLSBoZWxwICAg
ICAgICAgIEhlbHAgdGV4dCB3aW5kb3dzIGF0IHRoZSBib3R0b20gb2YgdmFyaW91cyBmdWxsc2Ny
ZWVuDQogICAgKyAgICAgICAgICAgICAgICAgICAgZGlhbG9ncw0KICAgICsgICAgLSBzaG93LWhl
bHAgICAgIFdpbmRvdyBzaG93aW5nIHRoZSBoZWxwIHRleHQgaW4gc2hvdy1oZWxwIG1vZGUNCiAg
ICArICAgIC0gZnJhbWUgICAgICAgICBGcmFtZSBhcm91bmQgZGlhbG9nIGJveGVzDQogICAgKyAg
ICAtIGJvZHkgICAgICAgICAgQm9keSBvZiBkaWFsb2cgYm94ZXMNCiAgICArICAgIC0gZWRpdCAg
ICAgICAgICBFZGl0IGJveCBpbiBwb3AtdXAgZGlhbG9ncw0KICAgICsgICAgLSBqdW1wLWVkaXQg
ICAgIEVkaXQgYm94IGluIGp1bXAtdG8gZGlhbG9nDQogICAgKyAgICAtIHRleHQgICAgICAgICAg
U3ltYm9sIGluZm9ybWF0aW9uIHRleHQNCiAgICArDQogICAgK1RoZSBjb2xvciBkZWZpbml0aW9u
IGlzIGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlczoNCiAgICArDQogICAgKyAg
ICAtIGZnOkNPTE9SICAgICAgU2V0IHRoZSBmb3JlZ3JvdW5kL2JhY2tncm91bmQgY29sb3JzLiBD
T0xPUiBjYW4gYmUgb25lIG9mDQogICAgKyAgICAgICogb3IgKiAgICAgICAgdGhlIGJhc2ljIDE2
IGNvbG9ycyAoYmxhY2ssIHJlZCwgZ3JlZW4sIHllbGxvdywgYmx1ZSwNCiAgICArICAgIC0gYmc6
Q09MT1IgICAgICBtYWdlbnRhLCBjeWFuLCB3aGl0ZSBhbmQgYnJpZ2h0ZXIgdmVyc2lvbnMsIGZv
ciBleGFtcGxlLA0KICAgICsgICAgICAgICAgICAgICAgICAgIGJyaWdodHJlZCkuIE9uIHRlcm1p
bmFscyB0aGF0IHN1cHBvcnQgbW9yZSB0aGFuIDggY29sb3JzLA0KICAgICsgICAgICAgICAgICAg
ICAgICAgIHlvdSBjYW4gYWxzbyBkaXJlY3RseSBwdXQgaW4gYSBjb2xvciBudW1iZXIsIGUuZy4g
Zmc6MTIzDQogICAgKyAgICAgICAgICAgICAgICAgICAgKGhleGFkZWNpbWFsIGFuZCBvY3RhbCBj
b25zdGFudHMgYXJlIGFjY2VwdGVkIGFzIHdlbGwpLg0KICAgICsgICAgICAgICAgICAgICAgICAg
IENvbG9ycyBvdXRzaWRlIHRoZSByYW5nZSAtMS4uY3Vyc2VzLkNPTE9SUy0xICh3aGljaCBpcw0K
ICAgICsgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLWRlcGVuZGVudCkgYXJlIGlnbm9yZWQg
KHdpdGggYSB3YXJuaW5nKS4gVGhlIENPTE9SDQogICAgKyAgICAgICAgICAgICAgICAgICAgY2Fu
IGJlIGFsc28gc3BlY2lmaWVkIHVzaW5nIGEgUkdCIHZhbHVlIGluIHRoZSBIVE1MDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgbm90YXRpb24sIGZvciBleGFtcGxlICNSUkdHQkIuIElmIHRoZSB0
ZXJtaW5hbCBzdXBwb3J0cw0KICAgICsgICAgICAgICAgICAgICAgICAgIGNvbG9yIGNoYW5naW5n
LCB0aGUgY29sb3IgaXMgcmVuZGVyZWQgYWNjdXJhdGVseS4NCiAgICArICAgICAgICAgICAgICAg
ICAgICBPdGhlcndpc2UsIHRoZSB2aXN1YWxseSBuZWFyZXN0IGNvbG9yIGlzIHVzZWQuDQogICAg
Kw0KICAgICsgICAgICAgICAgICAgICAgICAgIElmIHRoZSBiYWNrZ3JvdW5kIG9yIGZvcmVncm91
bmQgY29sb3Igb2YgYW4gZWxlbWVudCBpcyBub3QNCiAgICArICAgICAgICAgICAgICAgICAgICBz
cGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIC0xLCByZXByZXNlbnRpbmcgdGhlIGRlZmF1bHQNCiAg
ICArICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbCBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQg
Y29sb3IuDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgICAgIE5vdGU6IE9uIHNvbWUgdGVy
bWluYWxzIGEgYnJpZ2h0IHZlcnNpb24gb2YgdGhlIGNvbG9yDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgaW1wbGllcyBib2xkLg0KICAgICsgICAgLSBib2xkICAgICAgICAgIFVzZSBib2xkIHRl
eHQNCiAgICArICAgIC0gdW5kZXJsaW5lICAgICBVc2UgdW5kZXJsaW5lIHRleHQNCiAgICArICAg
IC0gc3RhbmRvdXQgICAgICBTdGFuZG91dCB0ZXh0IGF0dHJpYnV0ZSAocmV2ZXJzZSBjb2xvcikN
CiAgICArDQogICAgK01vcmUgb2Z0ZW4gdGhhbiBub3QsIHNvbWUgVUkgZWxlbWVudHMgc2hhcmUg
dGhlIHNhbWUgY29sb3IgZGVmaW5pdGlvbi4gSW4gc3VjaA0KICAgICtjYXNlcyB0aGUgcmlnaHQg
dmFsdWUgbWF5IHNwZWNpZnkgYW4gVUkgZWxlbWVudCBmcm9tIHdoaWNoIHRoZSBjb2xvciBkZWZp
bml0aW9uDQogICAgK3dpbGwgYmUgY29waWVkLiBGb3IgZXhhbXBsZSwgInNlcGFyYXRvcj1oZWxw
IiB3aWxsIGFwcGx5IHRoZSBjdXJyZW50IGNvbG9yDQogICAgK2RlZmluaXRpb24gZm9yICJoZWxw
IiB0byAic2VwYXJhdG9yIi4NCiAgICArDQogICAgK0Ega2V5d29yZCB3aXRob3V0IHRoZSAnPScg
aXMgYXNzdW1lZCB0byBiZSBhIHN0eWxlIHRlbXBsYXRlLiBUaGUgdGVtcGxhdGUgbmFtZQ0KICAg
ICtpcyBsb29rZWQgdXAgaW4gdGhlIGJ1aWx0LWluIHN0eWxlcyBsaXN0IGFuZCB0aGUgc3R5bGUg
ZGVmaW5pdGlvbiBpcyBleHBhbmRlZA0KICAgICtpbi1wbGFjZS4gV2l0aCB0aGlzLCBidWlsdC1p
biBzdHlsZXMgY2FuIGJlIHVzZWQgYXMgYmFzaXMgZm9yIG5ldyBzdHlsZXMuDQogICAgKw0KICAg
ICtGb3IgZXhhbXBsZSwgdGFrZSB0aGUgYXF1YXRpYyB0aGVtZSBhbmQgZ2l2ZSBpdCBhIHJlZCBz
ZWxlY3Rpb24gYmFyOg0KICAgICsNCiAgICArTUVOVUNPTkZJR19TVFlMRT0iYXF1YXRpYyBzZWxl
Y3Rpb249Zmc6d2hpdGUsYmc6cmVkIg0KICAgICsNCiAgICArSWYgdGhlcmUncyBhbiBlcnJvciBp
biB0aGUgc3R5bGUgZGVmaW5pdGlvbiBvciBpZiBhIG1pc3Npbmcgc3R5bGUgaXMgYXNzaWduZWQN
CiAgICArdG8sIHRoZSBhc3NpZ25tZW50IHdpbGwgYmUgaWdub3JlZCwgYWxvbmcgd2l0aCBhIHdh
cm5pbmcgYmVpbmcgcHJpbnRlZCBvbg0KICAgICtzdGRlcnIuDQogICAgKw0KICAgICtUaGUgJ2Rl
ZmF1bHQnIHRoZW1lIGlzIGFsd2F5cyBpbXBsaWNpdGx5IHBhcnNlZCBmaXJzdCAob3IgdGhlICdt
b25vY2hyb21lJw0KICAgICt0aGVtZSBpZiB0aGUgdGVybWluYWwgbGFja3MgY29sb3JzKSwgc28g
dGhlIGZvbGxvd2luZyB0d28gc2V0dGluZ3MgaGF2ZSB0aGUNCiAgICArc2FtZSBlZmZlY3Q6DQog
ICAgKw0KICAgICsgICAgTUVOVUNPTkZJR19TVFlMRT0ic2VsZWN0aW9uPWZnOndoaXRlLGJnOnJl
ZCINCiAgICArICAgIE1FTlVDT05GSUdfU1RZTEU9ImRlZmF1bHQgc2VsZWN0aW9uPWZnOndoaXRl
LGJnOnJlZCINCiAgICArDQogICAgKw0KICAgICtPdGhlciBmZWF0dXJlcw0KICAgICs9PT09PT09
PT09PT09PQ0KICAgICsNCiAgICArICAtIFNlYW1sZXNzIHRlcm1pbmFsIHJlc2l6aW5nDQogICAg
Kw0KICAgICsgIC0gTm8gZGVwZW5kZW5jaWVzIG9uICpuaXgsIGFzIHRoZSAnY3Vyc2VzJyBtb2R1
bGUgaXMgaW4gdGhlIFB5dGhvbiBzdGFuZGFyZA0KICAgICsgICAgbGlicmFyeQ0KICAgICsNCiAg
ICArICAtIFVuaWNvZGUgdGV4dCBlbnRyeQ0KICAgICsNCiAgICArICAtIEltcHJvdmVkIGluZm9y
bWF0aW9uIHNjcmVlbiBjb21wYXJlZCB0byBtY29uZjoNCiAgICArDQogICAgKyAgICAgICogRXhw
cmVzc2lvbnMgYXJlIHNwbGl0IHVwIGJ5IHRoZWlyIHRvcC1sZXZlbCAmJi98fCBvcGVyYW5kcyB0
byBpbXByb3ZlDQogICAgKyAgICAgICAgcmVhZGFiaWxpdHkNCiAgICArDQogICAgKyAgICAgICog
VW5kZWZpbmVkIHN5bWJvbHMgaW4gZXhwcmVzc2lvbnMgYXJlIHBvaW50ZWQgb3V0DQogICAgKw0K
ICAgICsgICAgICAqIE1lbnVzIGFuZCBjb21tZW50cyBoYXZlIGluZm9ybWF0aW9uIGRpc3BsYXlz
DQogICAgKw0KICAgICsgICAgICAqIEtjb25maWcgZGVmaW5pdGlvbnMgYXJlIHByaW50ZWQNCiAg
ICArDQogICAgKyAgICAgICogVGhlIGluY2x1ZGUgcGF0aCBpcyBzaG93biwgbGlzdGluZyB0aGUg
bG9jYXRpb25zIG9mIHRoZSAnc291cmNlJw0KICAgICsgICAgICAgIHN0YXRlbWVudHMgdGhhdCBp
bmNsdWRlZCB0aGUgS2NvbmZpZyBmaWxlIG9mIHRoZSBzeW1ib2wgKG9yIG90aGVyDQogICAgKyAg
ICAgICAgaXRlbSkNCiAgICArDQogICAgKw0KICAgICtMaW1pdGF0aW9ucw0KICAgICs9PT09PT09
PT09PQ0KICAgICsNCiAgICArRG9lc24ndCB3b3JrIG91dCBvZiB0aGUgYm94IG9uIFdpbmRvd3Ms
IGJ1dCBjYW4gYmUgbWFkZSB0byB3b3JrIHdpdGggJ3BpcA0KICAgICtpbnN0YWxsIHdpbmRvd3Mt
Y3Vyc2VzJy4gU2VlIHRoZQ0KICAgICtodHRwczovL2dpdGh1Yi5jb20vemVwaHlycHJvamVjdC1y
dG9zL3dpbmRvd3MtY3Vyc2VzIHJlcG9zaXRvcnkuDQogICAgKw0KICAgICsncGlwIGluc3RhbGwg
a2NvbmZpZ2xpYicgb24gV2luZG93cyBhdXRvbWF0aWNhbGx5IGluc3RhbGxzIHdpbmRvd3MtY3Vy
c2VzDQogICAgK3RvIG1ha2UgdGhlIG1lbnVjb25maWcgdXNhYmxlLg0KICAgICsiIiINCiAgICAr
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbg0KICAgICsNCiAgICAraW1wb3J0
IGN1cnNlcw0KICAgICtpbXBvcnQgZXJybm8NCiAgICAraW1wb3J0IGxvY2FsZQ0KICAgICtpbXBv
cnQgb3MNCiAgICAraW1wb3J0IHJlDQogICAgK2ltcG9ydCBzeXMNCiAgICAraW1wb3J0IHRleHR3
cmFwDQogICAgKw0KICAgICtmcm9tIGtjb25maWdsaWIgaW1wb3J0IFN5bWJvbCwgQ2hvaWNlLCBN
RU5VLCBDT01NRU5ULCBNZW51Tm9kZSwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIEJP
T0wsIFRSSVNUQVRFLCBTVFJJTkcsIElOVCwgSEVYLCBcDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgQU5ELCBPUiwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfc3RyLCBl
eHByX3ZhbHVlLCBzcGxpdF9leHByLCBcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgc3Rh
bmRhcmRfc2NfZXhwcl9zdHIsIFwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICBUUklfVE9f
U1RSLCBUWVBFX1RPX1NUUiwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIHN0YW5kYXJk
X2tjb25maWcsIHN0YW5kYXJkX2NvbmZpZ19maWxlbmFtZQ0KICAgICsNCiAgICArDQogICAgKyMN
CiAgICArIyBDb25maWd1cmF0aW9uIHZhcmlhYmxlcw0KICAgICsjDQogICAgKw0KICAgICsjIElm
IFRydWUsIHRyeSB0byBjaGFuZ2UgTENfQ1RZUEUgdG8gYSBVVEYtOCBsb2NhbGUgaWYgaXQgaXMg
c2V0IHRvIHRoZSBDDQogICAgKyMgbG9jYWxlICh3aGljaCBpbXBsaWVzIEFTQ0lJKS4gVGhpcyBm
aXhlcyBjdXJzZXMgVW5pY29kZSBJL08gaXNzdWVzIG9uIHN5c3RlbXMNCiAgICArIyB3aXRoIGJh
ZCBkZWZhdWx0cy4gbmN1cnNlcyBjb25maWd1cmVzIGl0c2VsZiBmcm9tIHRoZSBsb2NhbGUgc2V0
dGluZ3MuDQogICAgKyMNCiAgICArIyBSZWxhdGVkIFBFUDogaHR0cHM6Ly93d3cucHl0aG9uLm9y
Zy9kZXYvcGVwcy9wZXAtMDUzOC8NCiAgICArX0NIQU5HRV9DX0xDX0NUWVBFX1RPX1VURjggPSBU
cnVlDQogICAgKw0KICAgICsjIEhvdyBtYW55IHN0ZXBzIGFuIGltcGxpY2l0IHN1Ym1lbnUgd2ls
bCBiZSBpbmRlbnRlZC4gSW1wbGljaXQgc3VibWVudXMgYXJlDQogICAgKyMgY3JlYXRlZCB3aGVu
IGFuIGl0ZW0gZGVwZW5kcyBvbiB0aGUgc3ltYm9sIGJlZm9yZSBpdC4gTm90ZSB0aGF0IHN5bWJv
bHMNCiAgICArIyBkZWZpbmVkIHdpdGggJ21lbnVjb25maWcnIGNyZWF0ZSBhIHNlcGFyYXRlIG1l
bnUgaW5zdGVhZCBvZiBpbmRlbnRpbmcuDQogICAgK19TVUJNRU5VX0lOREVOVCA9IDQNCiAgICAr
DQogICAgKyMgTnVtYmVyIG9mIHN0ZXBzIGZvciBQYWdlIFVwL0Rvd24gdG8ganVtcA0KICAgICtf
UEdfSlVNUCA9IDYNCiAgICArDQogICAgKyMgSGVpZ2h0IG9mIHRoZSBoZWxwIHdpbmRvdyBpbiBz
aG93LWhlbHAgbW9kZQ0KICAgICtfU0hPV19IRUxQX0hFSUdIVCA9IDgNCiAgICArDQogICAgKyMg
SG93IGZhciB0aGUgY3Vyc29yIG5lZWRzIHRvIGJlIGZyb20gdGhlIGVkZ2Ugb2YgdGhlIHdpbmRv
dyBiZWZvcmUgaXQgc3RhcnRzDQogICAgKyMgdG8gc2Nyb2xsLiBVc2VkIGZvciB0aGUgbWFpbiBt
ZW51IGRpc3BsYXksIHRoZSBpbmZvcm1hdGlvbiBkaXNwbGF5LCB0aGUNCiAgICArIyBzZWFyY2gg
ZGlzcGxheSwgYW5kIGZvciB0ZXh0IGJveGVzLg0KICAgICtfU0NST0xMX09GRlNFVCA9IDUNCiAg
ICArDQogICAgKyMgTWluaW11bSB3aWR0aCBvZiBkaWFsb2dzIHRoYXQgYXNrIGZvciB0ZXh0IGlu
cHV0DQogICAgK19JTlBVVF9ESUFMT0dfTUlOX1dJRFRIID0gMzANCiAgICArDQogICAgKyMgTnVt
YmVyIG9mIGFycm93cyBwb2ludGluZyB1cC9kb3duIHRvIGRyYXcgd2hlbiBhIHdpbmRvdyBpcyBz
Y3JvbGxlZA0KICAgICtfTl9TQ1JPTExfQVJST1dTID0gMTQNCiAgICArDQogICAgKyMgTGluZXMg
b2YgaGVscCB0ZXh0IHNob3duIGF0IHRoZSBib3R0b20gb2YgdGhlICJtYWluIiBkaXNwbGF5DQog
ICAgK19NQUlOX0hFTFBfTElORVMgPSAiIiINCiAgICArW1NwYWNlL0VudGVyXSBUb2dnbGUvZW50
ZXIgIFtFU0NdIExlYXZlIG1lbnUgICAgICAgICAgIFtTXSBTYXZlDQogICAgK1tPXSBMb2FkICAg
ICAgICAgICAgICAgICAgICBbP10gU3ltYm9sIGluZm8gICAgICAgICAgICBbL10gSnVtcCB0byBz
eW1ib2wNCiAgICArW0ZdIFRvZ2dsZSBzaG93LWhlbHAgbW9kZSAgIFtDXSBUb2dnbGUgc2hvdy1u
YW1lIG1vZGUgIFtBXSBUb2dnbGUgc2hvdy1hbGwgbW9kZQ0KICAgICtbUV0gUXVpdCAocHJvbXB0
cyBmb3Igc2F2ZSkgW0RdIFNhdmUgbWluaW1hbCBjb25maWcgKGFkdmFuY2VkKQ0KICAgICsiIiJb
MTotMV0uc3BsaXQoIlxuIikNCiAgICArDQogICAgKyMgTGluZXMgb2YgaGVscCB0ZXh0IHNob3du
IGF0IHRoZSBib3R0b20gb2YgdGhlIGluZm9ybWF0aW9uIGRpYWxvZw0KICAgICtfSU5GT19IRUxQ
X0xJTkVTID0gIiIiDQogICAgK1tFU0MvcV0gUmV0dXJuIHRvIG1lbnUgICAgICBbL10gSnVtcCB0
byBzeW1ib2wNCiAgICArIiIiWzE6LTFdLnNwbGl0KCJcbiIpDQogICAgKw0KICAgICsjIExpbmVz
IG9mIGhlbHAgdGV4dCBzaG93biBhdCB0aGUgYm90dG9tIG9mIHRoZSBzZWFyY2ggZGlhbG9nDQog
ICAgK19KVU1QX1RPX0hFTFBfTElORVMgPSAiIiINCiAgICArVHlwZSB0ZXh0IHRvIG5hcnJvdyB0
aGUgc2VhcmNoLiBSZWdleGVzIGFyZSBzdXBwb3J0ZWQgKHZpYSBQeXRob24ncyAncmUnDQogICAg
K21vZHVsZSkuIFRoZSB1cC9kb3duIGN1cnNvciBrZXlzIHN0ZXAgaW4gdGhlIGxpc3QuIFtFbnRl
cl0ganVtcHMgdG8gdGhlDQogICAgK3NlbGVjdGVkIHN5bWJvbC4gW0VTQ10gYWJvcnRzIHRoZSBz
ZWFyY2guIFR5cGUgbXVsdGlwbGUgc3BhY2Utc2VwYXJhdGVkDQogICAgK3N0cmluZ3MvcmVnZXhl
cyB0byBmaW5kIGVudHJpZXMgdGhhdCBtYXRjaCBhbGwgb2YgdGhlbS4gVHlwZSBDdHJsLUYgdG8N
CiAgICArdmlldyB0aGUgaGVscCBvZiB0aGUgc2VsZWN0ZWQgaXRlbSB3aXRob3V0IGxlYXZpbmcg
dGhlIGRpYWxvZy4NCiAgICArIiIiWzE6LTFdLnNwbGl0KCJcbiIpDQogICAgKw0KICAgICsjDQog
ICAgKyMgU3R5bGluZw0KICAgICsjDQogICAgKw0KICAgICtfU1RZTEVTID0gew0KICAgICsgICAg
ImRlZmF1bHQiOiAiIiINCiAgICArICAgIHBhdGg9Zmc6YmxhY2ssYmc6d2hpdGUsYm9sZA0KICAg
ICsgICAgc2VwYXJhdG9yPWZnOmJsYWNrLGJnOnllbGxvdyxib2xkDQogICAgKyAgICBsaXN0PWZn
OmJsYWNrLGJnOndoaXRlDQogICAgKyAgICBzZWxlY3Rpb249Zmc6d2hpdGUsYmc6Ymx1ZSxib2xk
DQogICAgKyAgICBpbnYtbGlzdD1mZzpyZWQsYmc6d2hpdGUNCiAgICArICAgIGludi1zZWxlY3Rp
b249Zmc6cmVkLGJnOmJsdWUNCiAgICArICAgIGhlbHA9cGF0aA0KICAgICsgICAgc2hvdy1oZWxw
PWxpc3QNCiAgICArICAgIGZyYW1lPWZnOmJsYWNrLGJnOnllbGxvdyxib2xkDQogICAgKyAgICBi
b2R5PWZnOndoaXRlLGJnOmJsYWNrDQogICAgKyAgICBlZGl0PWZnOndoaXRlLGJnOmJsdWUNCiAg
ICArICAgIGp1bXAtZWRpdD1lZGl0DQogICAgKyAgICB0ZXh0PWxpc3QNCiAgICArICAgICIiIiwN
CiAgICArDQogICAgKyAgICAjIFRoaXMgc3R5bGUgaXMgZm9yY2VkIG9uIHRlcm1pbmFscyB0aGF0
IGRvIG5vIHN1cHBvcnQgY29sb3JzDQogICAgKyAgICAibW9ub2Nocm9tZSI6ICIiIg0KICAgICsg
ICAgcGF0aD1ib2xkDQogICAgKyAgICBzZXBhcmF0b3I9Ym9sZCxzdGFuZG91dA0KICAgICsgICAg
bGlzdD0NCiAgICArICAgIHNlbGVjdGlvbj1ib2xkLHN0YW5kb3V0DQogICAgKyAgICBpbnYtbGlz
dD1ib2xkDQogICAgKyAgICBpbnYtc2VsZWN0aW9uPWJvbGQsc3RhbmRvdXQNCiAgICArICAgIGhl
bHA9Ym9sZA0KICAgICsgICAgc2hvdy1oZWxwPQ0KICAgICsgICAgZnJhbWU9Ym9sZCxzdGFuZG91
dA0KICAgICsgICAgYm9keT0NCiAgICArICAgIGVkaXQ9c3RhbmRvdXQNCiAgICArICAgIGp1bXAt
ZWRpdD0NCiAgICArICAgIHRleHQ9DQogICAgKyAgICAiIiIsDQogICAgKw0KICAgICsgICAgIyBC
bHVlIHRpbnRlZCBzdHlsZSBsb29zZWx5IHJlc2VtYmxpbmcgbHhkaWFsb2cNCiAgICArICAgICJh
cXVhdGljIjogIiIiDQogICAgKyAgICBwYXRoPWZnOmN5YW4sYmc6Ymx1ZSxib2xkDQogICAgKyAg
ICBzZXBhcmF0b3I9Zmc6d2hpdGUsYmc6Y3lhbixib2xkDQogICAgKyAgICBoZWxwPXBhdGgNCiAg
ICArICAgIGZyYW1lPWZnOndoaXRlLGJnOmN5YW4sYm9sZA0KICAgICsgICAgYm9keT1mZzpicmln
aHR3aGl0ZSxiZzpibHVlDQogICAgKyAgICBlZGl0PWZnOmJsYWNrLGJnOndoaXRlDQogICAgKyAg
ICAiIiINCiAgICArfQ0KICAgICsNCiAgICArIyBTdGFuZGFyZCBjb2xvcnMgZGVmaW5pdGlvbg0K
ICAgICtfU1RZTEVfU1REX0NPTE9SUyA9IHsNCiAgICArICAgICMgQmFzaWMgY29sb3JzDQogICAg
KyAgICAiYmxhY2siOiAgICAgICAgIGN1cnNlcy5DT0xPUl9CTEFDSywNCiAgICArICAgICJyZWQi
OiAgICAgICAgICAgY3Vyc2VzLkNPTE9SX1JFRCwNCiAgICArICAgICJncmVlbiI6ICAgICAgICAg
Y3Vyc2VzLkNPTE9SX0dSRUVOLA0KICAgICsgICAgInllbGxvdyI6ICAgICAgICBjdXJzZXMuQ09M
T1JfWUVMTE9XLA0KICAgICsgICAgImJsdWUiOiAgICAgICAgICBjdXJzZXMuQ09MT1JfQkxVRSwN
CiAgICArICAgICJtYWdlbnRhIjogICAgICAgY3Vyc2VzLkNPTE9SX01BR0VOVEEsDQogICAgKyAg
ICAiY3lhbiI6ICAgICAgICAgIGN1cnNlcy5DT0xPUl9DWUFOLA0KICAgICsgICAgIndoaXRlIjog
ICAgICAgICBjdXJzZXMuQ09MT1JfV0hJVEUsDQogICAgKw0KICAgICsgICAgIyBCcmlnaHQgdmVy
c2lvbnMNCiAgICArICAgICJicmlnaHRibGFjayI6ICAgY3Vyc2VzLkNPTE9SX0JMQUNLICsgOCwN
CiAgICArICAgICJicmlnaHRyZWQiOiAgICAgY3Vyc2VzLkNPTE9SX1JFRCArIDgsDQogICAgKyAg
ICAiYnJpZ2h0Z3JlZW4iOiAgIGN1cnNlcy5DT0xPUl9HUkVFTiArIDgsDQogICAgKyAgICAiYnJp
Z2h0eWVsbG93IjogIGN1cnNlcy5DT0xPUl9ZRUxMT1cgKyA4LA0KICAgICsgICAgImJyaWdodGJs
dWUiOiAgICBjdXJzZXMuQ09MT1JfQkxVRSArIDgsDQogICAgKyAgICAiYnJpZ2h0bWFnZW50YSI6
IGN1cnNlcy5DT0xPUl9NQUdFTlRBICsgOCwNCiAgICArICAgICJicmlnaHRjeWFuIjogICAgY3Vy
c2VzLkNPTE9SX0NZQU4gKyA4LA0KICAgICsgICAgImJyaWdodHdoaXRlIjogICBjdXJzZXMuQ09M
T1JfV0hJVEUgKyA4LA0KICAgICsNCiAgICArICAgICMgQWxpYXNlcw0KICAgICsgICAgInB1cnBs
ZSI6ICAgICAgICBjdXJzZXMuQ09MT1JfTUFHRU5UQSwNCiAgICArICAgICJicmlnaHRwdXJwbGUi
OiAgY3Vyc2VzLkNPTE9SX01BR0VOVEEgKyA4LA0KICAgICt9DQogICAgKw0KICAgICsNCiAgICAr
ZGVmIF9yZ2JfdG9fNmN1YmUocmdiKToNCiAgICArICAgICMgQ29udmVydHMgYW4gODg4IFJHQiBj
b2xvciB0byBhIDMtdHVwbGUgKG5pY2UgaW4gdGhhdCBpdCdzIGhhc2hhYmxlKQ0KICAgICsgICAg
IyByZXByZXNlbnRpbmcgdGhlIGNsb3Nlc3QgeHRlcm0gMjU2LWNvbG9yIDZ4Nng2IGNvbG9yIGN1
YmUgY29sb3IuDQogICAgKyAgICAjDQogICAgKyAgICAjIFRoZSB4dGVybSAyNTYtY29sb3IgZXh0
ZW5zaW9uIHVzZXMgYSBSR0IgY29sb3IgcGFsZXR0ZSB3aXRoIGNvbXBvbmVudHMgaW4NCiAgICAr
ICAgICMgdGhlIHJhbmdlIDAtNSAoYSA2eDZ4NiBjdWJlKS4gVGhlIGNhdGNoIGlzIHRoYXQgdGhl
IG1hcHBpbmcgaXMgbm9ubGluZWFyLg0KICAgICsgICAgIyBJbmRleCAwIGluIHRoZSA2eDZ4NiBj
dWJlIGlzIG1hcHBlZCB0byAwLCBpbmRleCAxIHRvIDk1LCB0aGVuIDEzNSwgMTc1LA0KICAgICsg
ICAgIyBldGMuLCBpbiBpbmNyZW1lbnRzIG9mIDQwLiBTZWUgdGhlIGxpbmtzIGJlbG93Og0KICAg
ICsgICAgIw0KICAgICsgICAgIyAgIGh0dHBzOi8vY29tbW9ucy53aWtpbWVkaWEub3JnL3dpa2kv
RmlsZTpYdGVybV8yNTZjb2xvcl9jaGFydC5zdmcNCiAgICArICAgICMgICBodHRwczovL2dpdGh1
Yi5jb20vdG11eC90bXV4L2Jsb2IvbWFzdGVyL2NvbG91ci5jDQogICAgKw0KICAgICsgICAgIyA0
OCBpcyB0aGUgbWlkZGxlIGdyb3VuZCBiZXR3ZWVuIDAgYW5kIDk1Lg0KICAgICsgICAgcmV0dXJu
IHR1cGxlKDAgaWYgeCA8IDQ4IGVsc2UgaW50KHJvdW5kKG1heCgxLCAoeCAtIDU1KS80MCkpKSBm
b3IgeCBpbiByZ2IpDQogICAgKw0KICAgICsNCiAgICArZGVmIF82Y3ViZV90b19yZ2IocjZnNmI2
KToNCiAgICArICAgICMgUmV0dXJucyB0aGUgODg4IFJHQiBjb2xvciBmb3IgYSA2NjYgeHRlcm0g
Y29sb3IgY3ViZSBpbmRleA0KICAgICsNCiAgICArICAgIHJldHVybiB0dXBsZSgwIGlmIHggPT0g
MCBlbHNlIDQwKnggKyA1NSBmb3IgeCBpbiByNmc2YjYpDQogICAgKw0KICAgICsNCiAgICArZGVm
IF9yZ2JfdG9fZ3JheShyZ2IpOg0KICAgICsgICAgIyBDb252ZXJ0cyBhbiA4ODggUkdCIGNvbG9y
IHRvIHRoZSBpbmRleCBvZiBhbiB4dGVybSAyNTYtY29sb3IgZ3JheXNjYWxlDQogICAgKyAgICAj
IGNvbG9yIHdpdGggYXBwcm94LiB0aGUgc2FtZSBwZXJjZWl2ZWQgYnJpZ2h0bmVzcw0KICAgICsN
CiAgICArICAgICMgQ2FsY3VsYXRlIHRoZSBsdW1pbmFuY2UgKGdyYXkgaW50ZW5zaXR5KSBvZiB0
aGUgY29sb3IuIFNlZQ0KICAgICsgICAgIyAgIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVl
c3Rpb25zLzU5NjIxNi9mb3JtdWxhLXRvLWRldGVybWluZS1icmlnaHRuZXNzLW9mLXJnYi1jb2xv
cg0KICAgICsgICAgIyBhbmQNCiAgICArICAgICMgICBodHRwczovL3d3dy53My5vcmcvVFIvQUVS
VC8jY29sb3ItY29udHJhc3QNCiAgICArICAgIGx1bWEgPSAwLjI5OSpyZ2JbMF0gKyAwLjU4Nypy
Z2JbMV0gKyAwLjExNCpyZ2JbMl0NCiAgICArDQogICAgKyAgICAjIENsb3Nlc3QgaW5kZXggaW4g
dGhlIGdyYXlzY2FsZSBwYWxldHRlLCB3aGljaCBzdGFydHMgYXQgUkdCIDB4MDgwODA4LA0KICAg
ICsgICAgIyB3aXRoIHN0ZXBwaW5nIDB4MEEwQTBBDQogICAgKyAgICBpbmRleCA9IGludChyb3Vu
ZCgobHVtYSAtIDgpLzEwKSkNCiAgICArDQogICAgKyAgICAjIENsYW1wIHRoZSBpbmRleCB0byAw
LTIzLCBjb3JyZXNwb25kaW5nIHRvIDIzMi0yNTUNCiAgICArICAgIHJldHVybiBtYXgoMCwgbWlu
KGluZGV4LCAyMykpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9ncmF5X3RvX3JnYihpbmRleCk6
DQogICAgKyAgICAjIENvbnZlcnQgYSBncmF5c2NhbGUgaW5kZXggdG8gaXRzIGNsb3NldCBzaW5n
bGUgUkdCIGNvbXBvbmVudA0KICAgICsNCiAgICArICAgIHJldHVybiAzKigxMCppbmRleCArIDgs
KSAgIyBSZXR1cm5zIGEgMy10dXBsZQ0KICAgICsNCiAgICArDQogICAgKyMgT2JzY3VyZSBQeXRo
b246IFdlIG5ldmVyIHBhc3MgYSB2YWx1ZSBmb3IgcmdiMmluZGV4LCBhbmQgaXQga2VlcHMgcG9p
bnRpbmcgdG8NCiAgICArIyB0aGUgc2FtZSBkaWN0LiBUaGlzIGF2b2lkcyBhIGdsb2JhbC4NCiAg
ICArZGVmIF9hbGxvY19yZ2IocmdiLCByZ2IyaW5kZXg9e30pOg0KICAgICsgICAgIyBJbml0aWFs
aXplIGEgbmV3IGVudHJ5IGluIHRoZSB4dGVybSBwYWxldHRlIHRvIHRoZSBnaXZlbiBSR0IgY29s
b3IsDQogICAgKyAgICAjIHJldHVybmluZyBpdHMgaW5kZXguIElmIHRoZSBjb2xvciBoYXMgYWxy
ZWFkeSBiZWVuIGluaXRpYWxpemVkLCB0aGUgaW5kZXgNCiAgICArICAgICMgb2YgdGhlIGV4aXN0
aW5nIGVudHJ5IGlzIHJldHVybmVkLg0KICAgICsgICAgIw0KICAgICsgICAgIyBuY3Vyc2VzIGlz
IHBhbGV0dGUtYmFzZWQsIHNvIHdlIG5lZWQgdG8gb3ZlcndyaXRlIHBhbGV0dGUgZW50cmllcyB0
byBtYWtlDQogICAgKyAgICAjIG5ldyBjb2xvcnMuDQogICAgKyAgICAjDQogICAgKyAgICAjIFRo
ZSBjb2xvcnMgZnJvbSAwIHRvIDE1IGFyZSB1c2VyLWRlZmluZWQsIGFuZCB0aGVyZSdzIG5vIHdh
eSB0byBxdWVyeQ0KICAgICsgICAgIyB0aGVpciBSR0IgdmFsdWVzLCBzbyB3ZSBiZXR0ZXIgbGVh
dmUgdGhlbSB1bnRvdWNoZWQuIEFsc28gbGVhdmUgYW55DQogICAgKyAgICAjIGh5cG90aGV0aWNh
bCBjb2xvcnMgYWJvdmUgMjU1IHVudG91Y2hlZCAodGhvdWdoIHdlJ3JlIHVubGlrZWx5IHRvDQog
ICAgKyAgICAjIGFsbG9jYXRlIHRoYXQgbWFueSBjb2xvcnMgYW55d2F5KS4NCiAgICArDQogICAg
KyAgICBpZiByZ2IgaW4gcmdiMmluZGV4Og0KICAgICsgICAgICAgIHJldHVybiByZ2IyaW5kZXhb
cmdiXQ0KICAgICsNCiAgICArICAgICMgTWFueSB0ZXJtaW5hbHMgYWxsb3cgdGhlIHVzZXIgdG8g
Y3VzdG9taXplIHRoZSBmaXJzdCAxNiBjb2xvcnMuIEF2b2lkDQogICAgKyAgICAjIGNoYW5naW5n
IHRoZWlyIHZhbHVlcy4NCiAgICArICAgIGNvbG9yX2luZGV4ID0gMTYgKyBsZW4ocmdiMmluZGV4
KQ0KICAgICsgICAgaWYgY29sb3JfaW5kZXggPj0gMjU2Og0KICAgICsgICAgICAgIF93YXJuKCJV
bmFibGUgdG8gYWxsb2NhdGUgbmV3IFJHQiBjb2xvciAiLCByZ2IsICIuIFRvbyBtYW55IGNvbG9y
cyAiDQogICAgKyAgICAgICAgICAgICAgImFsbG9jYXRlZC4iKQ0KICAgICsgICAgICAgIHJldHVy
biAwDQogICAgKw0KICAgICsgICAgIyBNYXAgZWFjaCBSR0IgY29tcG9uZW50IGZyb20gdGhlIHJh
bmdlIDAtMjU1IHRvIHRoZSByYW5nZSAwLTEwMDAsIHdoaWNoIGlzDQogICAgKyAgICAjIHdoYXQg
Y3Vyc2VzIHVzZXMNCiAgICArICAgIGN1cnNlcy5pbml0X2NvbG9yKGNvbG9yX2luZGV4LCAqKGlu
dChyb3VuZCgxMDAwKngvMjU1KSkgZm9yIHggaW4gcmdiKSkNCiAgICArICAgIHJnYjJpbmRleFty
Z2JdID0gY29sb3JfaW5kZXgNCiAgICArDQogICAgKyAgICByZXR1cm4gY29sb3JfaW5kZXgNCiAg
ICArDQogICAgKw0KICAgICtkZWYgX2NvbG9yX2Zyb21fbnVtKG51bSk6DQogICAgKyAgICAjIFJl
dHVybnMgdGhlIGluZGV4IG9mIGEgY29sb3IgdGhhdCBsb29rcyBsaWtlIGNvbG9yICdudW0nIGlu
IHRoZSB4dGVybQ0KICAgICsgICAgIyAyNTYtY29sb3IgcGFsZXR0ZSAoYnV0IHRoYXQgbWlnaHQg
bm90IGJlICdudW0nLCBpZiB3ZSdyZSByZWRlZmluaW5nDQogICAgKyAgICAjIGNvbG9ycykNCiAg
ICArDQogICAgKyAgICAjIC0gX2FsbG9jX3JnYigpIHdvbid0IHRvdWNoIHRoZSBmaXJzdCAxNiBj
b2xvcnMgb3IgYW55IChoeXBvdGhldGljYWwpDQogICAgKyAgICAjICAgY29sb3JzIGFib3ZlIDI1
NSwgc28gd2UgY2FuIGFsd2F5cyByZXR1cm4gdGhlbSBhcy1pcw0KICAgICsgICAgIw0KICAgICsg
ICAgIyAtIElmIHRoZSB0ZXJtaW5hbCBkb2Vzbid0IHN1cHBvcnQgY2hhbmdpbmcgY29sb3IgZGVm
aW5pdGlvbnMsIG9yIGlmDQogICAgKyAgICAjICAgY3Vyc2VzLkNPTE9SUyA8IDI1NiwgX2FsbG9j
X3JnYigpIHdvbid0IHRvdWNoIGFueSBjb2xvciwgYW5kIGFsbCBjb2xvcnMNCiAgICArICAgICMg
ICBjYW4gYmUgcmV0dXJuZWQgYXMtaXMNCiAgICArICAgIGlmIG51bSA8IDE2IG9yIG51bSA+IDI1
NSBvciBub3QgY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3IoKSBvciBcDQogICAgKyAgICAgICBjdXJz
ZXMuQ09MT1JTIDwgMjU2Og0KICAgICsgICAgICAgIHJldHVybiBudW0NCiAgICArDQogICAgKyAg
ICAjIF9hbGxvY19yZ2IoKSBtaWdodCByZWRlZmluZSBjb2xvcnMsIHNvIGVtdWxhdGUgdGhlIHh0
ZXJtIDI1Ni1jb2xvcg0KICAgICsgICAgIyBwYWxldHRlIGJ5IGFsbG9jYXRpbmcgbmV3IGNvbG9y
cyBpbnN0ZWFkIG9mIHJldHVybmluZyBjb2xvciBudW1iZXJzDQogICAgKyAgICAjIGRpcmVjdGx5
DQogICAgKw0KICAgICsgICAgaWYgbnVtIDwgMjMyOg0KICAgICsgICAgICAgIG51bSAtPSAxNg0K
ICAgICsgICAgICAgIHJldHVybiBfYWxsb2NfcmdiKF82Y3ViZV90b19yZ2IoKChudW0vLzM2KSU2
LCAobnVtLy82KSU2LCBudW0lNikpKQ0KICAgICsNCiAgICArICAgIHJldHVybiBfYWxsb2Nfcmdi
KF9ncmF5X3RvX3JnYihudW0gLSAyMzIpKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfY29sb3Jf
ZnJvbV9yZ2IocmdiKToNCiAgICArICAgICMgUmV0dXJucyB0aGUgaW5kZXggb2YgYSBjb2xvciBt
YXRjaGluZyB0aGUgODg4IFJHQiBjb2xvciAncmdiJy4gVGhlDQogICAgKyAgICAjIHJldHVybmVk
IGNvbG9yIG1pZ2h0IGJlIGFuIH5leGFjdCBtYXRjaCBvciBhbiBhcHByb3hpbWF0aW9uLCBkZXBl
bmRpbmcgb24NCiAgICArICAgICMgdGVybWluYWwgY2FwYWJpbGl0aWVzLg0KICAgICsNCiAgICAr
ICAgICMgQ2FsY3VsYXRlcyB0aGUgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIFJHQiBj
b2xvcnMNCiAgICArICAgIGRlZiBkaXN0KHIxLCByMik6IHJldHVybiBzdW0oKHggLSB5KSoqMiBm
b3IgeCwgeSBpbiB6aXAocjEsIHIyKSkNCiAgICArDQogICAgKyAgICBpZiBjdXJzZXMuQ09MT1JT
ID49IDI1NjoNCiAgICArICAgICAgICAjIEFzc3VtZSB3ZSdyZSBkZWFsaW5nIHdpdGggeHRlcm0n
cyAyNTYtY29sb3IgZXh0ZW5zaW9uDQogICAgKw0KICAgICsgICAgICAgIGlmIGN1cnNlcy5jYW5f
Y2hhbmdlX2NvbG9yKCk6DQogICAgKyAgICAgICAgICAgICMgQmVzdCBjYXNlIC0tIHRoZSB0ZXJt
aW5hbCBzdXBwb3J0cyBjaGFuZ2luZyBwYWxldHRlIGVudHJpZXMgdmlhDQogICAgKyAgICAgICAg
ICAgICMgY3Vyc2VzLmluaXRfY29sb3IoKS4gSW5pdGlhbGl6ZSBhbiB1bnVzZWQgcGFsZXR0ZSBl
bnRyeSBhbmQNCiAgICArICAgICAgICAgICAgIyByZXR1cm4gaXQuDQogICAgKyAgICAgICAgICAg
IHJldHVybiBfYWxsb2NfcmdiKHJnYikNCiAgICArDQogICAgKyAgICAgICAgIyBTZWNvbmQgYmVz
dCBjYXNlIC0tIHBpY2sgYmV0d2VlbiB0aGUgeHRlcm0gMjU2LWNvbG9yIGV4dGVuc2lvbiBjb2xv
cnMNCiAgICArDQogICAgKyAgICAgICAgIyBDbG9zZXN0IDYtY3ViZSAiY29sb3IiIGNvbG9yDQog
ICAgKyAgICAgICAgYzYgPSBfcmdiX3RvXzZjdWJlKHJnYikNCiAgICArICAgICAgICAjIENsb3Nl
c3QgZ3JheSBjb2xvcg0KICAgICsgICAgICAgIGdyYXkgPSBfcmdiX3RvX2dyYXkocmdiKQ0KICAg
ICsNCiAgICArICAgICAgICBpZiBkaXN0KHJnYiwgXzZjdWJlX3RvX3JnYihjNikpIDwgZGlzdChy
Z2IsIF9ncmF5X3RvX3JnYihncmF5KSk6DQogICAgKyAgICAgICAgICAgICMgVXNlIHRoZSAiY29s
b3IiIGNvbG9yIGZyb20gdGhlIDZ4Nng2IGNvbG9yIHBhbGV0dGUuIENhbGN1bGF0ZSB0aGUNCiAg
ICArICAgICAgICAgICAgIyBjb2xvciBudW1iZXIgZnJvbSB0aGUgNi1jdWJlIGluZGV4IHRyaXBs
ZXQuDQogICAgKyAgICAgICAgICAgIHJldHVybiAxNiArIDM2KmM2WzBdICsgNipjNlsxXSArIGM2
WzJdDQogICAgKw0KICAgICsgICAgICAgICMgVXNlIHRoZSBjb2xvciBmcm9tIHRoZSBncmF5IHBh
bGV0dGUNCiAgICArICAgICAgICByZXR1cm4gMjMyICsgZ3JheQ0KICAgICsNCiAgICArICAgICMg
VGVybWluYWwgbm90IGluIHh0ZXJtIDI1Ni1jb2xvciBtb2RlLiBUaGlzIGlzIHByb2JhYmx5IHRo
ZSBiZXN0IHdlIGNhbg0KICAgICsgICAgIyBkbywgb3IgaXMgaXQ/IFN1Ym1pdCBwYXRjaGVzLiA6
KQ0KICAgICsgICAgbWluX2Rpc3QgPSBmbG9hdCgnaW5mJykNCiAgICArICAgIGJlc3QgPSAtMQ0K
ICAgICsgICAgZm9yIGNvbG9yIGluIHJhbmdlKGN1cnNlcy5DT0xPUlMpOg0KICAgICsgICAgICAg
ICMgbmN1cnNlcyB1c2VzIHRoZSByYW5nZSAwLi4xMDAwLiBTY2FsZSB0aGF0IGRvd24gdG8gMC4u
MjU1Lg0KICAgICsgICAgICAgIGQgPSBkaXN0KHJnYiwgdHVwbGUoaW50KHJvdW5kKDI1NSpjLzEw
MDApKQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY3Vyc2VzLmNv
bG9yX2NvbnRlbnQoY29sb3IpKSkNCiAgICArICAgICAgICBpZiBkIDwgbWluX2Rpc3Q6DQogICAg
KyAgICAgICAgICAgIG1pbl9kaXN0ID0gZA0KICAgICsgICAgICAgICAgICBiZXN0ID0gY29sb3IN
CiAgICArDQogICAgKyAgICByZXR1cm4gYmVzdA0KICAgICsNCiAgICArDQogICAgK2RlZiBfcGFy
c2Vfc3R5bGUoc3R5bGVfc3RyLCBwYXJzaW5nX2RlZmF1bHQpOg0KICAgICsgICAgIyBQYXJzZXMg
YSBzdHJpbmcgd2l0aCAnPGVsZW1lbnQ+PTxzdHlsZT4nIGFzc2lnbm1lbnRzLiBBbnl0aGluZyBu
b3QNCiAgICArICAgICMgY29udGFpbmluZyAnPScgaXMgYXNzdW1lZCB0byBiZSBhIHJlZmVyZW5j
ZSB0byBhIGJ1aWx0LWluIHN0eWxlLCB3aGljaCBpcw0KICAgICsgICAgIyB0cmVhdGVkIGFzIGlm
IGFsbCB0aGUgYXNzaWdubWVudHMgZnJvbSB0aGUgc3R5bGUgd2VyZSBpbnNlcnRlZCBhdCB0aGF0
DQogICAgKyAgICAjIHBvaW50IGluIHRoZSBzdHJpbmcuDQogICAgKyAgICAjDQogICAgKyAgICAj
IFRoZSBwYXJzaW5nX2RlZmF1bHQgZmxhZyBpcyBzZXQgdG8gVHJ1ZSB3aGVuIHdlJ3JlIGltcGxp
Y2l0bHkgcGFyc2luZyB0aGUNCiAgICArICAgICMgJ2RlZmF1bHQnLydtb25vY2hyb21lJyBzdHls
ZSwgdG8gcHJldmVudCB3YXJuaW5ncy4NCiAgICArDQogICAgKyAgICBmb3Igc2xpbmUgaW4gc3R5
bGVfc3RyLnNwbGl0KCk6DQogICAgKyAgICAgICAgIyBXb3JkcyB3aXRob3V0IGEgIj0iIGNoYXJh
Y3RlciByZXByZXNlbnRzIGEgc3R5bGUgdGVtcGxhdGUNCiAgICArICAgICAgICBpZiAiPSIgaW4g
c2xpbmU6DQogICAgKyAgICAgICAgICAgIGtleSwgZGF0YSA9IHNsaW5lLnNwbGl0KCI9IiwgMSkN
CiAgICArDQogICAgKyAgICAgICAgICAgICMgVGhlICdkZWZhdWx0JyBzdHlsZSB0ZW1wbGF0ZSBp
cyBhc3N1bWVkIHRvIGRlZmluZSBhbGwga2V5cy4gV2UNCiAgICArICAgICAgICAgICAgIyBydW4g
X3N0eWxlX3RvX2N1cnNlcygpIGZvciBub24tZXhpc3Rpbmcga2V5cyBhcyB3ZWxsLCBzbyB0aGF0
IHdlDQogICAgKyAgICAgICAgICAgICMgcHJpbnQgd2FybmluZ3MgZm9yIGVycm9ycyB0byB0aGUg
cmlnaHQgb2YgJz0nIGZvciB0aG9zZSB0b28uDQogICAgKyAgICAgICAgICAgIGlmIGtleSBub3Qg
aW4gX3N0eWxlIGFuZCBub3QgcGFyc2luZ19kZWZhdWx0Og0KICAgICsgICAgICAgICAgICAgICAg
X3dhcm4oIklnbm9yaW5nIG5vbi1leGlzdGVudCBzdHlsZSIsIGtleSkNCiAgICArDQogICAgKyAg
ICAgICAgICAgICMgSWYgZGF0YSBpcyBhIHJlZmVyZW5jZSB0byBhbm90aGVyIGtleSwgY29weSBp
dHMgc3R5bGUNCiAgICArICAgICAgICAgICAgaWYgZGF0YSBpbiBfc3R5bGU6DQogICAgKyAgICAg
ICAgICAgICAgICBfc3R5bGVba2V5XSA9IF9zdHlsZVtkYXRhXQ0KICAgICsgICAgICAgICAgICBl
bHNlOg0KICAgICsgICAgICAgICAgICAgICAgX3N0eWxlW2tleV0gPSBfc3R5bGVfdG9fY3Vyc2Vz
KGRhdGEpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgc2xpbmUgaW4gX1NUWUxFUzoNCiAgICAr
ICAgICAgICAgICAgIyBSZWN1cnNpdmVseSBwYXJzZSBzdHlsZSB0ZW1wbGF0ZS4gSWdub3JlIHN0
eWxlcyB0aGF0IGRvbid0IGV4aXN0LA0KICAgICsgICAgICAgICAgICAjIGZvciBiYWNrd2FyZHMv
Zm9yd2FyZHMgY29tcGF0aWJpbGl0eS4NCiAgICArICAgICAgICAgICAgX3BhcnNlX3N0eWxlKF9T
VFlMRVNbc2xpbmVdLCBwYXJzaW5nX2RlZmF1bHQpDQogICAgKw0KICAgICsgICAgICAgIGVsc2U6
DQogICAgKyAgICAgICAgICAgIF93YXJuKCJJZ25vcmluZyBub24tZXhpc3RlbnQgc3R5bGUgdGVt
cGxhdGUiLCBzbGluZSkNCiAgICArDQogICAgKyMgRGljdGlvbmFyeSBtYXBwaW5nIGVsZW1lbnQg
dHlwZXMgdG8gdGhlIGN1cnNlcyBhdHRyaWJ1dGVzIHVzZWQgdG8gZGlzcGxheQ0KICAgICsjIHRo
ZW0NCiAgICArX3N0eWxlID0ge30NCiAgICArDQogICAgKw0KICAgICtkZWYgX3N0eWxlX3RvX2N1
cnNlcyhzdHlsZV9kZWYpOg0KICAgICsgICAgIyBQYXJzZXMgYSBzdHlsZSBkZWZpbml0aW9uIHN0
cmluZyAoPGVsZW1lbnQ+PTxzdHlsZT4pLCByZXR1cm5pbmcNCiAgICArICAgICMgYSAoZmdfY29s
b3IsIGJnX2NvbG9yLCBhdHRyaWJ1dGVzKSB0dXBsZS4NCiAgICArDQogICAgKyAgICBkZWYgcGFy
c2VfY29sb3IoY29sb3JfZGVmKToNCiAgICArICAgICAgICBjb2xvcl9kZWYgPSBjb2xvcl9kZWYu
c3BsaXQoIjoiLCAxKVsxXQ0KICAgICsNCiAgICArICAgICAgICBpZiBjb2xvcl9kZWYgaW4gX1NU
WUxFX1NURF9DT0xPUlM6DQogICAgKyAgICAgICAgICAgIHJldHVybiBfY29sb3JfZnJvbV9udW0o
X1NUWUxFX1NURF9DT0xPUlNbY29sb3JfZGVmXSkNCiAgICArDQogICAgKyAgICAgICAgIyBIVE1M
IGZvcm1hdCwgI1JSR0dCQg0KICAgICsgICAgICAgIGlmIHJlLm1hdGNoKCIjW0EtRmEtZjAtOV17
Nn0iLCBjb2xvcl9kZWYpOg0KICAgICsgICAgICAgICAgICByZXR1cm4gX2NvbG9yX2Zyb21fcmdi
KCgNCiAgICArICAgICAgICAgICAgICAgIGludChjb2xvcl9kZWZbMTozXSwgMTYpLA0KICAgICsg
ICAgICAgICAgICAgICAgaW50KGNvbG9yX2RlZlszOjVdLCAxNiksDQogICAgKyAgICAgICAgICAg
ICAgICBpbnQoY29sb3JfZGVmWzU6N10sIDE2KSkpDQogICAgKw0KICAgICsgICAgICAgIHRyeToN
CiAgICArICAgICAgICAgICAgY29sb3JfbnVtID0gX2NvbG9yX2Zyb21fbnVtKGludChjb2xvcl9k
ZWYsIDApKQ0KICAgICsgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICsgICAgICAgICAg
ICBfd2FybigiSWdub3JpbmcgY29sb3IgIiwgY29sb3JfZGVmLCAidGhhdCdzIG5laXRoZXIgcHJl
ZGVmaW5lZCAiDQogICAgKyAgICAgICAgICAgICAgICAgICJub3IgYSBudW1iZXIiKQ0KICAgICsN
CiAgICArICAgICAgICAgICAgcmV0dXJuIC0xDQogICAgKw0KICAgICsgICAgICAgIGlmIG5vdCAt
MSA8PSBjb2xvcl9udW0gPCBjdXJzZXMuQ09MT1JTOg0KICAgICsgICAgICAgICAgICBfd2Fybigi
SWdub3JpbmcgY29sb3Ige30sIHdoaWNoIGlzIG91dHNpZGUgdGhlIHJhbmdlICINCiAgICArICAg
ICAgICAgICAgICAgICAgIi0xLi5jdXJzZXMuQ09MT1JTLTEgKC0xLi57fSkiDQogICAgKyAgICAg
ICAgICAgICAgICAgIC5mb3JtYXQoY29sb3JfZGVmLCBjdXJzZXMuQ09MT1JTIC0gMSkpDQogICAg
Kw0KICAgICsgICAgICAgICAgICByZXR1cm4gLTENCiAgICArDQogICAgKyAgICAgICAgcmV0dXJu
IGNvbG9yX251bQ0KICAgICsNCiAgICArICAgIGZnX2NvbG9yID0gLTENCiAgICArICAgIGJnX2Nv
bG9yID0gLTENCiAgICArICAgIGF0dHJzID0gMA0KICAgICsNCiAgICArICAgIGlmIHN0eWxlX2Rl
ZjoNCiAgICArICAgICAgICBmb3IgZmllbGQgaW4gc3R5bGVfZGVmLnNwbGl0KCIsIik6DQogICAg
KyAgICAgICAgICAgIGlmIGZpZWxkLnN0YXJ0c3dpdGgoImZnOiIpOg0KICAgICsgICAgICAgICAg
ICAgICAgZmdfY29sb3IgPSBwYXJzZV9jb2xvcihmaWVsZCkNCiAgICArICAgICAgICAgICAgZWxp
ZiBmaWVsZC5zdGFydHN3aXRoKCJiZzoiKToNCiAgICArICAgICAgICAgICAgICAgIGJnX2NvbG9y
ID0gcGFyc2VfY29sb3IoZmllbGQpDQogICAgKyAgICAgICAgICAgIGVsaWYgZmllbGQgPT0gImJv
bGQiOg0KICAgICsgICAgICAgICAgICAgICAgIyBBX0JPTEQgdGVuZHMgdG8gcHJvZHVjZSBmYWlu
dCBhbmQgaGFyZC10by1yZWFkIHRleHQgb24gdGhlDQogICAgKyAgICAgICAgICAgICAgICAjIFdp
bmRvd3MgY29uc29sZSwgZXNwZWNpYWxseSB3aXRoIHRoZSBvbGQgY29sb3Igc2NoZW1lLCBiZWZv
cmUNCiAgICArICAgICAgICAgICAgICAgICMgdGhlIGludHJvZHVjdGlvbiBvZg0KICAgICsgICAg
ICAgICAgICAgICAgIyBodHRwczovL2Jsb2dzLm1zZG4ubWljcm9zb2Z0LmNvbS9jb21tYW5kbGlu
ZS8yMDE3LzA4LzAyL3VwZGF0aW5nLXRoZS13aW5kb3dzLWNvbnNvbGUtY29sb3JzLw0KICAgICsg
ICAgICAgICAgICAgICAgYXR0cnMgfD0gY3Vyc2VzLkFfTk9STUFMIGlmIF9JU19XSU5ET1dTIGVs
c2UgY3Vyc2VzLkFfQk9MRA0KICAgICsgICAgICAgICAgICBlbGlmIGZpZWxkID09ICJzdGFuZG91
dCI6DQogICAgKyAgICAgICAgICAgICAgICBhdHRycyB8PSBjdXJzZXMuQV9TVEFORE9VVA0KICAg
ICsgICAgICAgICAgICBlbGlmIGZpZWxkID09ICJ1bmRlcmxpbmUiOg0KICAgICsgICAgICAgICAg
ICAgICAgYXR0cnMgfD0gY3Vyc2VzLkFfVU5ERVJMSU5FDQogICAgKyAgICAgICAgICAgIGVsc2U6
DQogICAgKyAgICAgICAgICAgICAgICBfd2FybigiSWdub3JpbmcgdW5rbm93biBzdHlsZSBhdHRy
aWJ1dGUiLCBmaWVsZCkNCiAgICArDQogICAgKyAgICByZXR1cm4gX3N0eWxlX2F0dHIoZmdfY29s
b3IsIGJnX2NvbG9yLCBhdHRycykNCiAgICArDQogICAgKw0KICAgICtkZWYgX2luaXRfc3R5bGVz
KCk6DQogICAgKyAgICBpZiBjdXJzZXMuaGFzX2NvbG9ycygpOg0KICAgICsgICAgICAgIGN1cnNl
cy51c2VfZGVmYXVsdF9jb2xvcnMoKQ0KICAgICsNCiAgICArICAgICMgVXNlIHRoZSAnbW9ub2No
cm9tZScgc3R5bGUgdGVtcGxhdGUgYXMgdGhlIGJhc2Ugb24gdGVybWluYWxzIHdpdGhvdXQNCiAg
ICArICAgICMgY29sb3INCiAgICArICAgIF9wYXJzZV9zdHlsZSgiZGVmYXVsdCIgaWYgY3Vyc2Vz
Lmhhc19jb2xvcnMoKSBlbHNlICJtb25vY2hyb21lIiwgVHJ1ZSkNCiAgICArDQogICAgKyAgICAj
IEFkZCBhbnkgdXNlci1kZWZpbmVkIHN0eWxlIGZyb20gdGhlIGVudmlyb25tZW50DQogICAgKyAg
ICBpZiAiTUVOVUNPTkZJR19TVFlMRSIgaW4gb3MuZW52aXJvbjoNCiAgICArICAgICAgICBfcGFy
c2Vfc3R5bGUob3MuZW52aXJvblsiTUVOVUNPTkZJR19TVFlMRSJdLCBGYWxzZSkNCiAgICArDQog
ICAgKw0KICAgICsjIGNvbG9yX2F0dHJpYnMgaG9sZHMgdGhlIGNvbG9yIHBhaXJzIHdlJ3ZlIGFs
cmVhZHkgY3JlYXRlZCwgaW5kZXhlZCBieSBhDQogICAgKyMgKDxmb3JlZ3JvdW5kIGNvbG9yPiwg
PGJhY2tncm91bmQgY29sb3I+KSB0dXBsZS4NCiAgICArIw0KICAgICsjIE9ic2N1cmUgUHl0aG9u
OiBXZSBuZXZlciBwYXNzIGEgdmFsdWUgZm9yIGNvbG9yX2F0dHJpYnMsIGFuZCBpdCBrZWVwcw0K
ICAgICsjIHBvaW50aW5nIHRvIHRoZSBzYW1lIGRpY3QuIFRoaXMgYXZvaWRzIGEgZ2xvYmFsLg0K
ICAgICtkZWYgX3N0eWxlX2F0dHIoZmdfY29sb3IsIGJnX2NvbG9yLCBhdHRyaWJzLCBjb2xvcl9h
dHRyaWJzPXt9KToNCiAgICArICAgICMgUmV0dXJucyBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgc3Bl
Y2lmaWVkIGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQgY29sb3INCiAgICArICAgICMgYW5kIHRo
ZSBhdHRyaWJ1dGVzIGluICdhdHRyaWJzJy4gUmV1c2VzIGNvbG9yIHBhaXJzIGFscmVhZHkgY3Jl
YXRlZCBpZg0KICAgICsgICAgIyBwb3NzaWJsZSwgYW5kIGNyZWF0ZXMgYSBuZXcgY29sb3IgcGFp
ciBvdGhlcndpc2UuDQogICAgKyAgICAjDQogICAgKyAgICAjIFJldHVybnMgJ2F0dHJpYnMnIGlm
IGNvbG9ycyBhcmVuJ3Qgc3VwcG9ydGVkLg0KICAgICsNCiAgICArICAgIGlmIG5vdCBjdXJzZXMu
aGFzX2NvbG9ycygpOg0KICAgICsgICAgICAgIHJldHVybiBhdHRyaWJzDQogICAgKw0KICAgICsg
ICAgaWYgKGZnX2NvbG9yLCBiZ19jb2xvcikgbm90IGluIGNvbG9yX2F0dHJpYnM6DQogICAgKyAg
ICAgICAgIyBDcmVhdGUgbmV3IGNvbG9yIHBhaXIuIENvbG9yIHBhaXIgbnVtYmVyIDAgaXMgaGFy
ZGNvZGVkIGFuZCBjYW5ub3QgYmUNCiAgICArICAgICAgICAjIGNoYW5nZWQsIGhlbmNlIHRoZSAr
MXMuDQogICAgKyAgICAgICAgY3Vyc2VzLmluaXRfcGFpcihsZW4oY29sb3JfYXR0cmlicykgKyAx
LCBmZ19jb2xvciwgYmdfY29sb3IpDQogICAgKyAgICAgICAgY29sb3JfYXR0cmlic1soZmdfY29s
b3IsIGJnX2NvbG9yKV0gPSBcDQogICAgKyAgICAgICAgICAgIGN1cnNlcy5jb2xvcl9wYWlyKGxl
bihjb2xvcl9hdHRyaWJzKSArIDEpDQogICAgKw0KICAgICsgICAgcmV0dXJuIGNvbG9yX2F0dHJp
YnNbKGZnX2NvbG9yLCBiZ19jb2xvcildIHwgYXR0cmlicw0KICAgICsNCiAgICArDQogICAgKyMN
CiAgICArIyBNYWluIGFwcGxpY2F0aW9uDQogICAgKyMNCiAgICArDQogICAgKw0KICAgICtkZWYg
X21haW4oKToNCiAgICArICAgIG1lbnVjb25maWcoc3RhbmRhcmRfa2NvbmZpZygpKQ0KICAgICsN
CiAgICArDQogICAgK2RlZiBtZW51Y29uZmlnKGtjb25mKToNCiAgICArICAgICIiIg0KICAgICsg
ICAgTGF1bmNoZXMgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLCByZXR1cm5pbmcgYWZ0ZXIg
dGhlIHVzZXIgZXhpdHMuDQogICAgKw0KICAgICsgICAga2NvbmY6DQogICAgKyAgICAgIEtjb25m
aWcgaW5zdGFuY2UgdG8gYmUgY29uZmlndXJlZA0KICAgICsgICAgIiIiDQogICAgKyAgICBnbG9i
YWwgX2tjb25mDQogICAgKyAgICBnbG9iYWwgX2NvbmZfZmlsZW5hbWUNCiAgICArICAgIGdsb2Jh
bCBfY29uZl9jaGFuZ2VkDQogICAgKyAgICBnbG9iYWwgX21pbmNvbmZfZmlsZW5hbWUNCiAgICAr
ICAgIGdsb2JhbCBfc2hvd19hbGwNCiAgICArDQogICAgKyAgICBfa2NvbmYgPSBrY29uZg0KICAg
ICsNCiAgICArICAgICMgRmlsZW5hbWUgdG8gc2F2ZSBjb25maWd1cmF0aW9uIHRvDQogICAgKyAg
ICBfY29uZl9maWxlbmFtZSA9IHN0YW5kYXJkX2NvbmZpZ19maWxlbmFtZSgpDQogICAgKw0KICAg
ICsgICAgIyBMb2FkIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24gYW5kIHNldCBfY29uZl9jaGFuZ2Vk
IFRydWUgaWYgaXQgaXMgb3V0ZGF0ZWQNCiAgICArICAgIF9jb25mX2NoYW5nZWQgPSBfbG9hZF9j
b25maWcoKQ0KICAgICsNCiAgICArICAgICMgRmlsZW5hbWUgdG8gc2F2ZSBtaW5pbWFsIGNvbmZp
Z3VyYXRpb24gdG8NCiAgICArICAgIF9taW5jb25mX2ZpbGVuYW1lID0gImRlZmNvbmZpZyINCiAg
ICArDQogICAgKyAgICAjIEFueSB2aXNpYmxlIGl0ZW1zIGluIHRoZSB0b3AgbWVudT8NCiAgICAr
ICAgIF9zaG93X2FsbCA9IEZhbHNlDQogICAgKyAgICBpZiBub3QgX3Nob3duX25vZGVzKGtjb25m
LnRvcF9ub2RlKToNCiAgICArICAgICAgICAjIE5vdGhpbmcgdmlzaWJsZS4gU3RhcnQgaW4gc2hv
dy1hbGwgbW9kZSBhbmQgdHJ5IGFnYWluLg0KICAgICsgICAgICAgIF9zaG93X2FsbCA9IFRydWUN
CiAgICArICAgICAgICBpZiBub3QgX3Nob3duX25vZGVzKGtjb25mLnRvcF9ub2RlKToNCiAgICAr
ICAgICAgICAgICAgIyBHaXZlIHVwLiBUaGUgaW1wbGVtZW50YXRpb24gcmVsaWVzIG9uIGFsd2F5
cyBoYXZpbmcgYSBzZWxlY3RlZA0KICAgICsgICAgICAgICAgICAjIG5vZGUuDQogICAgKyAgICAg
ICAgICAgIHByaW50KCJFbXB0eSBjb25maWd1cmF0aW9uIC0tIG5vdGhpbmcgdG8gY29uZmlndXJl
LlxuIg0KICAgICsgICAgICAgICAgICAgICAgICAiQ2hlY2sgdGhhdCBlbnZpcm9ubWVudCB2YXJp
YWJsZXMgYXJlIHNldCBwcm9wZXJseS4iKQ0KICAgICsgICAgICAgICAgICByZXR1cm4NCiAgICAr
DQogICAgKyAgICAjIERpc2FibGUgd2FybmluZ3MuIFRoZXkgZ2V0IG1hbmdsZWQgaW4gY3Vyc2Vz
IG1vZGUsIGFuZCB3ZSBkZWFsIHdpdGgNCiAgICArICAgICMgZXJyb3JzIG91cnNlbHZlcy4NCiAg
ICArICAgIGtjb25mLndhcm4gPSBGYWxzZQ0KICAgICsNCiAgICArICAgICMgTWFrZSBjdXJzZXMg
dXNlIHRoZSBsb2NhbGUgc2V0dGluZ3Mgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudA0KICAg
ICsgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQUxMLCAiIikNCiAgICArDQogICAgKyAg
ICAjIFRyeSB0byBmaXggVW5pY29kZSBpc3N1ZXMgb24gc3lzdGVtcyB3aXRoIGJhZCBkZWZhdWx0
cw0KICAgICsgICAgaWYgX0NIQU5HRV9DX0xDX0NUWVBFX1RPX1VURjg6DQogICAgKyAgICAgICAg
X2NoYW5nZV9jX2xjX2N0eXBlX3RvX3V0ZjgoKQ0KICAgICsNCiAgICArICAgICMgR2V0IHJpZCBv
ZiB0aGUgZGVsYXkgYmV0d2VlbiBwcmVzc2luZyBFU0MgYW5kIGp1bXBpbmcgdG8gdGhlIHBhcmVu
dCBtZW51LA0KICAgICsgICAgIyB1bmxlc3MgdGhlIHVzZXIgaGFzIHNldCBFU0NERUxBWSAoc2Vl
IG5jdXJzZXMoMykpLiBUaGlzIG1ha2VzIHRoZSBVSSBtdWNoDQogICAgKyAgICAjIHNtb290aGVy
IHRvIHdvcmsgd2l0aC4NCiAgICArICAgICMNCiAgICArICAgICMgTm90ZTogVGhpcyBpcyBzdHJp
Y3RseSBwcmV0dHkgaWZmeSwgc2luY2UgZXNjYXBlIGNvZGVzIGZvciBlLmcuIGN1cnNvcg0KICAg
ICsgICAgIyBrZXlzIHN0YXJ0IHdpdGggRVNDLCBidXQgSSd2ZSBuZXZlciBzZWVuIGl0IGNhdXNl
IHByb2JsZW1zIGluIHByYWN0aWNlDQogICAgKyAgICAjIChwcm9iYWJseSBiZWNhdXNlIGl0J3Mg
dW5saWtlbHkgdGhhdCB0aGUgZXNjYXBlIGNvZGUgZm9yIGEga2V5IHdvdWxkIGdldA0KICAgICsg
ICAgIyBzcGxpdCB1cCBhY3Jvc3MgcmVhZCgpcywgYXQgbGVhc3Qgd2l0aCBhIHRlcm1pbmFsIGVt
dWxhdG9yKS4gUGxlYXNlDQogICAgKyAgICAjIHJlcG9ydCBpZiB5b3UgcnVuIGludG8gaXNzdWVz
LiBTb21lIHN1aXRhYmxlIHNtYWxsIGRlZmF1bHQgdmFsdWUgY291bGQgYmUNCiAgICArICAgICMg
dXNlZCBoZXJlIGluc3RlYWQgaW4gdGhhdCBjYXNlLiBNYXliZSBpdCdzIHNpbGx5IHRvIG5vdCBw
dXQgaW4gdGhlDQogICAgKyAgICAjIHNtYWxsZXN0IGltcGVyY2VwdGlibGUgZGVsYXkgaGVyZSBh
bHJlYWR5LCB0aG91Z2ggSSBkb24ndCBsaWtlIGd1ZXNzaW5nLg0KICAgICsgICAgIw0KICAgICsg
ICAgIyAoRnJvbSBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgbmN1cnNlcyBzb3VyY2UgY29kZSwgRVND
REVMQVkgbWlnaHQgb25seSBiZQ0KICAgICsgICAgIyByZWxldmFudCBmb3IgbW91c2UgZXZlbnRz
IHRoZXJlLCBzbyBtYXliZSBlc2NhcGVzIGFyZSBhc3N1bWVkIHRvIGFycml2ZQ0KICAgICsgICAg
IyBpbiBvbmUgcGllY2UgYWxyZWFkeS4uLikNCiAgICArICAgIG9zLmVudmlyb24uc2V0ZGVmYXVs
dCgiRVNDREVMQVkiLCAiMCIpDQogICAgKw0KICAgICsgICAgIyBFbnRlciBjdXJzZXMgbW9kZS4g
X21lbnVjb25maWcoKSByZXR1cm5zIGEgc3RyaW5nIHRvIHByaW50IG9uIGV4aXQsIGFmdGVyDQog
ICAgKyAgICAjIGN1cnNlcyBoYXMgYmVlbiBkZS1pbml0aWFsaXplZC4NCiAgICArICAgIHByaW50
KGN1cnNlcy53cmFwcGVyKF9tZW51Y29uZmlnKSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2xv
YWRfY29uZmlnKCk6DQogICAgKyAgICAjIExvYWRzIGFueSBleGlzdGluZyAuY29uZmlnIGZpbGUu
IFNlZSB0aGUgS2NvbmZpZy5sb2FkX2NvbmZpZygpIGRvY3N0cmluZy4NCiAgICArICAgICMNCiAg
ICArICAgICMgUmV0dXJucyBUcnVlIGlmIC5jb25maWcgaXMgbWlzc2luZyBvciBvdXRkYXRlZC4g
V2UgYWx3YXlzIHByb21wdCBmb3INCiAgICArICAgICMgc2F2aW5nIHRoZSBjb25maWd1cmF0aW9u
IGluIHRoYXQgY2FzZS4NCiAgICArDQogICAgKyAgICBwcmludChfa2NvbmYubG9hZF9jb25maWco
KSkNCiAgICArICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhfY29uZl9maWxlbmFtZSk6DQogICAg
KyAgICAgICAgIyBObyAuY29uZmlnDQogICAgKyAgICAgICAgcmV0dXJuIFRydWUNCiAgICArDQog
ICAgKyAgICByZXR1cm4gX25lZWRzX3NhdmUoKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfbmVl
ZHNfc2F2ZSgpOg0KICAgICsgICAgIyBSZXR1cm5zIFRydWUgaWYgYSBqdXN0LWxvYWRlZCAuY29u
ZmlnIGZpbGUgaXMgb3V0ZGF0ZWQgKHdvdWxkIGdldA0KICAgICsgICAgIyBtb2RpZmllZCB3aGVu
IHNhdmluZykNCiAgICArDQogICAgKyAgICBpZiBfa2NvbmYubWlzc2luZ19zeW1zOg0KICAgICsg
ICAgICAgICMgQXNzaWdubWVudHMgdG8gdW5kZWZpbmVkIHN5bWJvbHMgaW4gdGhlIC5jb25maWcN
CiAgICArICAgICAgICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArICAgIGZvciBzeW0gaW4gX2tj
b25mLnVuaXF1ZV9kZWZpbmVkX3N5bXM6DQogICAgKyAgICAgICAgaWYgc3ltLnVzZXJfdmFsdWUg
aXMgTm9uZToNCiAgICArICAgICAgICAgICAgaWYgc3ltLmNvbmZpZ19zdHJpbmc6DQogICAgKyAg
ICAgICAgICAgICAgICAjIFVud3JpdHRlbiBzeW1ib2wNCiAgICArICAgICAgICAgICAgICAgIHJl
dHVybiBUcnVlDQogICAgKyAgICAgICAgZWxpZiBzeW0ub3JpZ190eXBlIGluIChCT09MLCBUUklT
VEFURSk6DQogICAgKyAgICAgICAgICAgIGlmIHN5bS50cmlfdmFsdWUgIT0gc3ltLnVzZXJfdmFs
dWU6DQogICAgKyAgICAgICAgICAgICAgICAjIFdyaXR0ZW4gYm9vbC90cmlzdGF0ZSBzeW1ib2ws
IG5ldyB2YWx1ZQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUNCiAgICArICAgICAg
ICBlbGlmIHN5bS5zdHJfdmFsdWUgIT0gc3ltLnVzZXJfdmFsdWU6DQogICAgKyAgICAgICAgICAg
ICMgV3JpdHRlbiBzdHJpbmcvaW50L2hleCBzeW1ib2wsIG5ldyB2YWx1ZQ0KICAgICsgICAgICAg
ICAgICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArICAgICMgTm8gbmVlZCB0byBwcm9tcHQgZm9y
IHNhdmUNCiAgICArICAgIHJldHVybiBGYWxzZQ0KICAgICsNCiAgICArDQogICAgKyMgR2xvYmFs
IHZhcmlhYmxlcyB1c2VkIGJlbG93Og0KICAgICsjDQogICAgKyMgICBfc3Rkc2NyOg0KICAgICsj
ICAgICBzdGRzY3IgZnJvbSBjdXJzZXMNCiAgICArIw0KICAgICsjICAgX2N1cl9tZW51Og0KICAg
ICsjICAgICBNZW51IG5vZGUgb2YgdGhlIG1lbnUgKG9yIG1lbnVjb25maWcgc3ltYm9sLCBvciBj
aG9pY2UpIGN1cnJlbnRseSBiZWluZw0KICAgICsjICAgICBzaG93bg0KICAgICsjDQogICAgKyMg
ICBfc2hvd246DQogICAgKyMgICAgIExpc3Qgb2YgaXRlbXMgaW4gX2N1cl9tZW51IHRoYXQgYXJl
IHNob3duIChpZ25vcmluZyBzY3JvbGxpbmcpLiBJbg0KICAgICsjICAgICBzaG93LWFsbCBtb2Rl
LCB0aGlzIGxpc3QgY29udGFpbnMgYWxsIGl0ZW1zIGluIF9jdXJfbWVudS4gT3RoZXJ3aXNlLCBp
dA0KICAgICsjICAgICBjb250YWlucyBqdXN0IHRoZSB2aXNpYmxlIGl0ZW1zLg0KICAgICsjDQog
ICAgKyMgICBfc2VsX25vZGVfaToNCiAgICArIyAgICAgSW5kZXggaW4gX3Nob3duIG9mIHRoZSBj
dXJyZW50bHkgc2VsZWN0ZWQgbm9kZQ0KICAgICsjDQogICAgKyMgICBfbWVudV9zY3JvbGw6DQog
ICAgKyMgICAgIEluZGV4IGluIF9zaG93biBvZiB0aGUgdG9wIHJvdyBvZiB0aGUgbWFpbiBkaXNw
bGF5DQogICAgKyMNCiAgICArIyAgIF9wYXJlbnRfc2NyZWVuX3Jvd3M6DQogICAgKyMgICAgIExp
c3Qvc3RhY2sgb2YgdGhlIHJvdyBudW1iZXJzIHRoYXQgdGhlIHNlbGVjdGlvbnMgaW4gdGhlIHBh
cmVudCBtZW51cw0KICAgICsjICAgICBhcHBlYXJlZCBvbi4gVGhpcyBpcyB1c2VkIHRvIHByZXZl
bnQgdGhlIHNjcm9sbGluZyBmcm9tIGp1bXBpbmcgYXJvdW5kDQogICAgKyMgICAgIHdoZW4gZ29p
bmcgaW4gYW5kIG91dCBvZiBtZW51cy4NCiAgICArIw0KICAgICsjICAgX3Nob3dfaGVscC9fc2hv
d19uYW1lL19zaG93X2FsbDoNCiAgICArIyAgICAgSWYgVHJ1ZSwgdGhlIGNvcnJlc3BvbmRpbmcg
bW9kZSBpcyBvbi4gU2VlIHRoZSBtb2R1bGUgZG9jc3RyaW5nLg0KICAgICsjDQogICAgKyMgICBf
Y29uZl9maWxlbmFtZToNCiAgICArIyAgICAgRmlsZSB0byBzYXZlIHRoZSBjb25maWd1cmF0aW9u
IHRvDQogICAgKyMNCiAgICArIyAgIF9taW5jb25mX2ZpbGVuYW1lOg0KICAgICsjICAgICBGaWxl
IHRvIHNhdmUgbWluaW1hbCBjb25maWd1cmF0aW9ucyB0bw0KICAgICsjDQogICAgKyMgICBfY29u
Zl9jaGFuZ2VkOg0KICAgICsjICAgICBUcnVlIGlmIHRoZSBjb25maWd1cmF0aW9uIGhhcyBiZWVu
IGNoYW5nZWQuIElmIEZhbHNlLCB3ZSBkb24ndCBib3RoZXINCiAgICArIyAgICAgc2hvd2luZyB0
aGUgc2F2ZS1hbmQtcXVpdCBkaWFsb2cuDQogICAgKyMNCiAgICArIyAgICAgV2UgcmVzZXQgdGhp
cyB0byBGYWxzZSB3aGVuZXZlciB0aGUgY29uZmlndXJhdGlvbiBpcyBzYXZlZCBleHBsaWNpdGx5
DQogICAgKyMgICAgIGZyb20gdGhlIHNhdmUgZGlhbG9nLg0KICAgICsNCiAgICArDQogICAgK2Rl
ZiBfbWVudWNvbmZpZyhzdGRzY3IpOg0KICAgICsgICAgIyBMb2dpYyBmb3IgdGhlIG1haW4gZGlz
cGxheSwgd2l0aCB0aGUgbGlzdCBvZiBzeW1ib2xzLCBldGMuDQogICAgKw0KICAgICsgICAgZ2xv
YmFsIF9zdGRzY3INCiAgICArICAgIGdsb2JhbCBfY29uZl9maWxlbmFtZQ0KICAgICsgICAgZ2xv
YmFsIF9jb25mX2NoYW5nZWQNCiAgICArICAgIGdsb2JhbCBfbWluY29uZl9maWxlbmFtZQ0KICAg
ICsgICAgZ2xvYmFsIF9zaG93X2hlbHANCiAgICArICAgIGdsb2JhbCBfc2hvd19uYW1lDQogICAg
Kw0KICAgICsgICAgX3N0ZHNjciA9IHN0ZHNjcg0KICAgICsNCiAgICArICAgIF9pbml0KCkNCiAg
ICArDQogICAgKyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAgICAgIF9kcmF3X21haW4oKQ0KICAg
ICsgICAgICAgIGN1cnNlcy5kb3VwZGF0ZSgpDQogICAgKw0KICAgICsNCiAgICArICAgICAgICBj
ID0gX2dldGNoX2NvbXBhdChfbWVudV93aW4pDQogICAgKw0KICAgICsgICAgICAgIGlmIGMgPT0g
Y3Vyc2VzLktFWV9SRVNJWkU6DQogICAgKyAgICAgICAgICAgIF9yZXNpemVfbWFpbigpDQogICAg
Kw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9ET1dOLCAiaiIsICJKIik6DQog
ICAgKyAgICAgICAgICAgIF9zZWxlY3RfbmV4dF9tZW51X2VudHJ5KCkNCiAgICArDQogICAgKyAg
ICAgICAgZWxpZiBjIGluIChjdXJzZXMuS0VZX1VQLCAiayIsICJLIik6DQogICAgKyAgICAgICAg
ICAgIF9zZWxlY3RfcHJldl9tZW51X2VudHJ5KCkNCiAgICArDQogICAgKyAgICAgICAgZWxpZiBj
IGluIChjdXJzZXMuS0VZX05QQUdFLCAiXHgwNCIpOiAgIyBQYWdlIERvd24vQ3RybC1EDQogICAg
KyAgICAgICAgICAgICMgS2VlcCBpdCBzaW1wbGUuIFRoaXMgd2F5IHdlIGdldCBzYW5lIGJlaGF2
aW9yIGZvciBzbWFsbCB3aW5kb3dzLA0KICAgICsgICAgICAgICAgICAjIGV0Yy4sIGZvciBmcmVl
Lg0KICAgICsgICAgICAgICAgICBmb3IgXyBpbiByYW5nZShfUEdfSlVNUCk6DQogICAgKyAgICAg
ICAgICAgICAgICBfc2VsZWN0X25leHRfbWVudV9lbnRyeSgpDQogICAgKw0KICAgICsgICAgICAg
IGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9QUEFHRSwgIlx4MTUiKTogICMgUGFnZSBVcC9DdHJsLVUN
CiAgICArICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UoX1BHX0pVTVApOg0KICAgICsgICAgICAg
ICAgICAgICAgX3NlbGVjdF9wcmV2X21lbnVfZW50cnkoKQ0KICAgICsNCiAgICArICAgICAgICBl
bGlmIGMgaW4gKGN1cnNlcy5LRVlfRU5ELCAiRyIpOg0KICAgICsgICAgICAgICAgICBfc2VsZWN0
X2xhc3RfbWVudV9lbnRyeSgpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vyc2Vz
LktFWV9IT01FLCAiZyIpOg0KICAgICsgICAgICAgICAgICBfc2VsZWN0X2ZpcnN0X21lbnVfZW50
cnkoKQ0KICAgICsNCiAgICArICAgICAgICBlbGlmIGMgPT0gIiAiOg0KICAgICsgICAgICAgICAg
ICAjIFRvZ2dsZSB0aGUgbm9kZSBpZiBwb3NzaWJsZQ0KICAgICsgICAgICAgICAgICBzZWxfbm9k
ZSA9IF9zaG93bltfc2VsX25vZGVfaV0NCiAgICArICAgICAgICAgICAgaWYgbm90IF9jaGFuZ2Vf
bm9kZShzZWxfbm9kZSk6DQogICAgKyAgICAgICAgICAgICAgICBfZW50ZXJfbWVudShzZWxfbm9k
ZSkNCiAgICArDQogICAgKyAgICAgICAgZWxpZiBjIGluIChjdXJzZXMuS0VZX1JJR0hULCAiXG4i
LCAibCIsICJMIik6DQogICAgKyAgICAgICAgICAgICMgRW50ZXIgdGhlIG5vZGUgaWYgcG9zc2li
bGUNCiAgICArICAgICAgICAgICAgc2VsX25vZGUgPSBfc2hvd25bX3NlbF9ub2RlX2ldDQogICAg
KyAgICAgICAgICAgIGlmIG5vdCBfZW50ZXJfbWVudShzZWxfbm9kZSk6DQogICAgKyAgICAgICAg
ICAgICAgICBfY2hhbmdlX25vZGUoc2VsX25vZGUpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYg
YyBpbiAoIm4iLCAiTiIpOg0KICAgICsgICAgICAgICAgICBfc2V0X3NlbF9ub2RlX3RyaV92YWwo
MCkNCiAgICArDQogICAgKyAgICAgICAgZWxpZiBjIGluICgibSIsICJNIik6DQogICAgKyAgICAg
ICAgICAgIF9zZXRfc2VsX25vZGVfdHJpX3ZhbCgxKQ0KICAgICsNCiAgICArICAgICAgICBlbGlm
IGMgaW4gKCJ5IiwgIlkiKToNCiAgICArICAgICAgICAgICAgX3NldF9zZWxfbm9kZV90cmlfdmFs
KDIpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9MRUZULCBjdXJz
ZXMuS0VZX0JBQ0tTUEFDRSwgX0VSQVNFX0NIQVIsDQogICAgKyAgICAgICAgICAgICAgICAgICAi
XHgxQiIsICJoIiwgIkgiKTogICMgXHgxQiA9IEVTQw0KICAgICsNCiAgICArICAgICAgICAgICAg
aWYgYyA9PSAiXHgxQiIgYW5kIF9jdXJfbWVudSBpcyBfa2NvbmYudG9wX25vZGU6DQogICAgKyAg
ICAgICAgICAgICAgICByZXMgPSBfcXVpdF9kaWFsb2coKQ0KICAgICsgICAgICAgICAgICAgICAg
aWYgcmVzOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXMNCiAgICArICAgICAg
ICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgICAgIF9sZWF2ZV9tZW51KCkNCiAgICArDQog
ICAgKyAgICAgICAgZWxpZiBjIGluICgibyIsICJPIik6DQogICAgKyAgICAgICAgICAgIF9sb2Fk
X2RpYWxvZygpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoInMiLCAiUyIpOg0KICAg
ICsgICAgICAgICAgICBmaWxlbmFtZSA9IF9zYXZlX2RpYWxvZyhfa2NvbmYud3JpdGVfY29uZmln
LCBfY29uZl9maWxlbmFtZSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImNvbmZpZ3VyYXRpb24iKQ0KICAgICsgICAgICAgICAgICBpZiBmaWxlbmFtZToNCiAgICAr
ICAgICAgICAgICAgICAgIF9jb25mX2ZpbGVuYW1lID0gZmlsZW5hbWUNCiAgICArICAgICAgICAg
ICAgICAgIF9jb25mX2NoYW5nZWQgPSBGYWxzZQ0KICAgICsNCiAgICArICAgICAgICBlbGlmIGMg
aW4gKCJkIiwgIkQiKToNCiAgICArICAgICAgICAgICAgZmlsZW5hbWUgPSBfc2F2ZV9kaWFsb2co
X2tjb25mLndyaXRlX21pbl9jb25maWcsIF9taW5jb25mX2ZpbGVuYW1lLA0KICAgICsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluaW1hbCBjb25maWd1cmF0aW9uIikNCiAg
ICArICAgICAgICAgICAgaWYgZmlsZW5hbWU6DQogICAgKyAgICAgICAgICAgICAgICBfbWluY29u
Zl9maWxlbmFtZSA9IGZpbGVuYW1lDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyA9PSAiLyI6
DQogICAgKyAgICAgICAgICAgIF9qdW1wX3RvX2RpYWxvZygpDQogICAgKyAgICAgICAgICAgICMg
VGhlIHRlcm1pbmFsIG1pZ2h0IGhhdmUgYmVlbiByZXNpemVkIHdoaWxlIHRoZSBmdWxsc2NyZWVu
IGp1bXAtdG8NCiAgICArICAgICAgICAgICAgIyBkaWFsb2cgd2FzIG9wZW4NCiAgICArICAgICAg
ICAgICAgX3Jlc2l6ZV9tYWluKCkNCiAgICArDQogICAgKyAgICAgICAgZWxpZiBjID09ICI/IjoN
CiAgICArICAgICAgICAgICAgX2luZm9fZGlhbG9nKF9zaG93bltfc2VsX25vZGVfaV0sIEZhbHNl
KQ0KICAgICsgICAgICAgICAgICAjIFRoZSB0ZXJtaW5hbCBtaWdodCBoYXZlIGJlZW4gcmVzaXpl
ZCB3aGlsZSB0aGUgZnVsbHNjcmVlbiBpbmZvDQogICAgKyAgICAgICAgICAgICMgZGlhbG9nIHdh
cyBvcGVuDQogICAgKyAgICAgICAgICAgIF9yZXNpemVfbWFpbigpDQogICAgKw0KICAgICsgICAg
ICAgIGVsaWYgYyBpbiAoImYiLCAiRiIpOg0KICAgICsgICAgICAgICAgICBfc2hvd19oZWxwID0g
bm90IF9zaG93X2hlbHANCiAgICArICAgICAgICAgICAgX3NldF9zdHlsZShfaGVscF93aW4sICJz
aG93LWhlbHAiIGlmIF9zaG93X2hlbHAgZWxzZSAiaGVscCIpDQogICAgKyAgICAgICAgICAgIF9y
ZXNpemVfbWFpbigpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoImMiLCAiQyIpOg0K
ICAgICsgICAgICAgICAgICBfc2hvd19uYW1lID0gbm90IF9zaG93X25hbWUNCiAgICArDQogICAg
KyAgICAgICAgZWxpZiBjIGluICgiYSIsICJBIik6DQogICAgKyAgICAgICAgICAgIF90b2dnbGVf
c2hvd19hbGwoKQ0KICAgICsNCiAgICArICAgICAgICBlbGlmIGMgaW4gKCJxIiwgIlEiKToNCiAg
ICArICAgICAgICAgICAgcmVzID0gX3F1aXRfZGlhbG9nKCkNCiAgICArICAgICAgICAgICAgaWYg
cmVzOg0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIHJlcw0KICAgICsNCiAgICArDQogICAg
K2RlZiBfcXVpdF9kaWFsb2coKToNCiAgICArICAgIGlmIG5vdCBfY29uZl9jaGFuZ2VkOg0KICAg
ICsgICAgICAgIHJldHVybiAiTm8gY2hhbmdlcyB0byBzYXZlIChmb3IgJ3t9JykiLmZvcm1hdChf
Y29uZl9maWxlbmFtZSkNCiAgICArDQogICAgKyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAgICAg
IGMgPSBfa2V5X2RpYWxvZygNCiAgICArICAgICAgICAgICAgIlF1aXQiLA0KICAgICsgICAgICAg
ICAgICAiIFNhdmUgY29uZmlndXJhdGlvbj9cbiINCiAgICArICAgICAgICAgICAgIlxuIg0KICAg
ICsgICAgICAgICAgICAiKFkpZXMgIChOKW8gIChDKWFuY2VsIiwNCiAgICArICAgICAgICAgICAg
InluYyIpDQogICAgKw0KICAgICsgICAgICAgIGlmIGMgaXMgTm9uZSBvciBjID09ICJjIjoNCiAg
ICArICAgICAgICAgICAgcmV0dXJuIE5vbmUNCiAgICArDQogICAgKyAgICAgICAgaWYgYyA9PSAi
eSI6DQogICAgKyAgICAgICAgICAgICMgUmV0dXJucyBhIG1lc3NhZ2UgdG8gcHJpbnQNCiAgICAr
ICAgICAgICAgICAgbXNnID0gX3RyeV9zYXZlKF9rY29uZi53cml0ZV9jb25maWcsIF9jb25mX2Zp
bGVuYW1lLCAiY29uZmlndXJhdGlvbiIpDQogICAgKyAgICAgICAgICAgIGlmIG1zZzoNCiAgICAr
ICAgICAgICAgICAgICAgIHJldHVybiBtc2cNCiAgICArDQogICAgKyAgICAgICAgZWxpZiBjID09
ICJuIjoNCiAgICArICAgICAgICAgICAgcmV0dXJuICJDb25maWd1cmF0aW9uICh7fSkgd2FzIG5v
dCBzYXZlZCIuZm9ybWF0KF9jb25mX2ZpbGVuYW1lKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBf
aW5pdCgpOg0KICAgICsgICAgIyBJbml0aWFsaXplcyB0aGUgbWFpbiBkaXNwbGF5IHdpdGggdGhl
IGxpc3Qgb2Ygc3ltYm9scywgZXRjLiBBbHNvIGRvZXMNCiAgICArICAgICMgbWlzYy4gZ2xvYmFs
IGluaXRpYWxpemF0aW9uIHRoYXQgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIGluaXRpYWxpemluZw0K
ICAgICsgICAgIyBjdXJzZXMuDQogICAgKw0KICAgICsgICAgZ2xvYmFsIF9FUkFTRV9DSEFSDQog
ICAgKw0KICAgICsgICAgZ2xvYmFsIF9wYXRoX3dpbg0KICAgICsgICAgZ2xvYmFsIF90b3Bfc2Vw
X3dpbg0KICAgICsgICAgZ2xvYmFsIF9tZW51X3dpbg0KICAgICsgICAgZ2xvYmFsIF9ib3Rfc2Vw
X3dpbg0KICAgICsgICAgZ2xvYmFsIF9oZWxwX3dpbg0KICAgICsNCiAgICArICAgIGdsb2JhbCBf
cGFyZW50X3NjcmVlbl9yb3dzDQogICAgKyAgICBnbG9iYWwgX2N1cl9tZW51DQogICAgKyAgICBn
bG9iYWwgX3Nob3duDQogICAgKyAgICBnbG9iYWwgX3NlbF9ub2RlX2kNCiAgICArICAgIGdsb2Jh
bCBfbWVudV9zY3JvbGwNCiAgICArDQogICAgKyAgICBnbG9iYWwgX3Nob3dfaGVscA0KICAgICsg
ICAgZ2xvYmFsIF9zaG93X25hbWUNCiAgICArDQogICAgKyAgICAjIExvb2tpbmcgZm9yIHRoaXMg
aW4gYWRkaXRpb24gdG8gS0VZX0JBQ0tTUEFDRSAod2hpY2ggaXMgdW5yZWxpYWJsZSkgbWFrZXMN
CiAgICArICAgICMgYmFja3NwYWNlIHdvcmsgd2l0aCBURVJNPXZ0MTAwLiBUaGF0IG1ha2VzIGl0
IGxpa2VseSB0byB3b3JrIGluIHNhbmUNCiAgICArICAgICMgZW52aXJvbm1lbnRzLg0KICAgICsg
ICAgX0VSQVNFX0NIQVIgPSBjdXJzZXMuZXJhc2VjaGFyKCkNCiAgICArICAgIGlmIHN5cy52ZXJz
aW9uX2luZm9bMF0gPj0gMzoNCiAgICArICAgICAgICAjIGVyYXNlY2hhcigpIHJldHVybnMgYSBv
bmUtYnl0ZSBieXRlcyBvYmplY3Qgb24gUHl0aG9uIDMuIFRoaXMgc2V0cw0KICAgICsgICAgICAg
ICMgX0VSQVNFX0NIQVIgdG8gYSBibGFuayBzdHJpbmcgaWYgaXQgY2FuJ3QgYmUgZGVjb2RlZCwg
d2hpY2ggc2hvdWxkIGJlDQogICAgKyAgICAgICAgIyBoYXJtbGVzcy4NCiAgICArICAgICAgICBf
RVJBU0VfQ0hBUiA9IF9FUkFTRV9DSEFSLmRlY29kZSgidXRmLTgiLCAiaWdub3JlIikNCiAgICAr
DQogICAgKyAgICBfaW5pdF9zdHlsZXMoKQ0KICAgICsNCiAgICArICAgICMgSGlkZSB0aGUgY3Vy
c29yDQogICAgKyAgICBfc2FmZV9jdXJzX3NldCgwKQ0KICAgICsNCiAgICArICAgICMgSW5pdGlh
bGl6ZSB3aW5kb3dzDQogICAgKw0KICAgICsgICAgIyBUb3Agcm93LCB3aXRoIG1lbnUgcGF0aA0K
ICAgICsgICAgX3BhdGhfd2luID0gX3N0eWxlZF93aW4oInBhdGgiKQ0KICAgICsNCiAgICArICAg
ICMgU2VwYXJhdG9yIGJlbG93IG1lbnUgcGF0aCwgd2l0aCB0aXRsZSBhbmQgYXJyb3dzIHBvaW50
aW5nIHVwDQogICAgKyAgICBfdG9wX3NlcF93aW4gPSBfc3R5bGVkX3dpbigic2VwYXJhdG9yIikN
CiAgICArDQogICAgKyAgICAjIExpc3Qgb2YgbWVudSBlbnRyaWVzIHdpdGggc3ltYm9scywgZXRj
Lg0KICAgICsgICAgX21lbnVfd2luID0gX3N0eWxlZF93aW4oImxpc3QiKQ0KICAgICsgICAgX21l
bnVfd2luLmtleXBhZChUcnVlKQ0KICAgICsNCiAgICArICAgICMgUm93IGJlbG93IG1lbnUgbGlz
dCwgd2l0aCBhcnJvd3MgcG9pbnRpbmcgZG93bg0KICAgICsgICAgX2JvdF9zZXBfd2luID0gX3N0
eWxlZF93aW4oInNlcGFyYXRvciIpDQogICAgKw0KICAgICsgICAgIyBIZWxwIHdpbmRvdyB3aXRo
IGtleXMgYXQgdGhlIGJvdHRvbS4gU2hvd3MgaGVscCB0ZXh0cyBpbiBzaG93LWhlbHAgbW9kZS4N
CiAgICArICAgIF9oZWxwX3dpbiA9IF9zdHlsZWRfd2luKCJoZWxwIikNCiAgICArDQogICAgKyAg
ICAjIFRoZSByb3dzIHdlJ2QgbGlrZSB0aGUgbm9kZXMgaW4gdGhlIHBhcmVudCBtZW51cyB0byBh
cHBlYXIgb24uIFRoaXMNCiAgICArICAgICMgcHJldmVudHMgdGhlIHNjcm9sbCBmcm9tIGp1bXBp
bmcgYXJvdW5kIHdoZW4gZ29pbmcgaW4gYW5kIG91dCBvZiBtZW51cy4NCiAgICArICAgIF9wYXJl
bnRfc2NyZWVuX3Jvd3MgPSBbXQ0KICAgICsNCiAgICArICAgICMgSW5pdGlhbCBzdGF0ZQ0KICAg
ICsNCiAgICArICAgIF9jdXJfbWVudSA9IF9rY29uZi50b3Bfbm9kZQ0KICAgICsgICAgX3Nob3du
ID0gX3Nob3duX25vZGVzKF9jdXJfbWVudSkNCiAgICArICAgIF9zZWxfbm9kZV9pID0gX21lbnVf
c2Nyb2xsID0gMA0KICAgICsNCiAgICArICAgIF9zaG93X2hlbHAgPSBfc2hvd19uYW1lID0gRmFs
c2UNCiAgICArDQogICAgKyAgICAjIEdpdmUgd2luZG93cyB0aGVpciBpbml0aWFsIHNpemUNCiAg
ICArICAgIF9yZXNpemVfbWFpbigpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9yZXNpemVfbWFp
bigpOg0KICAgICsgICAgIyBSZXNpemVzIHRoZSBtYWluIGRpc3BsYXksIHdpdGggdGhlIGxpc3Qg
b2Ygc3ltYm9scywgZXRjLiwgdG8gZmlsbCB0aGUNCiAgICArICAgICMgdGVybWluYWwNCiAgICAr
DQogICAgKyAgICBnbG9iYWwgX21lbnVfc2Nyb2xsDQogICAgKw0KICAgICsgICAgc2NyZWVuX2hl
aWdodCwgc2NyZWVuX3dpZHRoID0gX3N0ZHNjci5nZXRtYXh5eCgpDQogICAgKw0KICAgICsgICAg
X3BhdGhfd2luLnJlc2l6ZSgxLCBzY3JlZW5fd2lkdGgpDQogICAgKyAgICBfdG9wX3NlcF93aW4u
cmVzaXplKDEsIHNjcmVlbl93aWR0aCkNCiAgICArICAgIF9ib3Rfc2VwX3dpbi5yZXNpemUoMSwg
c2NyZWVuX3dpZHRoKQ0KICAgICsNCiAgICArICAgIGhlbHBfd2luX2hlaWdodCA9IF9TSE9XX0hF
TFBfSEVJR0hUIGlmIF9zaG93X2hlbHAgZWxzZSBcDQogICAgKyAgICAgICAgbGVuKF9NQUlOX0hF
TFBfTElORVMpDQogICAgKw0KICAgICsgICAgbWVudV93aW5faGVpZ2h0ID0gc2NyZWVuX2hlaWdo
dCAtIGhlbHBfd2luX2hlaWdodCAtIDMNCiAgICArDQogICAgKyAgICBpZiBtZW51X3dpbl9oZWln
aHQgPj0gMToNCiAgICArICAgICAgICBfbWVudV93aW4ucmVzaXplKG1lbnVfd2luX2hlaWdodCwg
c2NyZWVuX3dpZHRoKQ0KICAgICsgICAgICAgIF9oZWxwX3dpbi5yZXNpemUoaGVscF93aW5faGVp
Z2h0LCBzY3JlZW5fd2lkdGgpDQogICAgKw0KICAgICsgICAgICAgIF90b3Bfc2VwX3dpbi5tdndp
bigxLCAwKQ0KICAgICsgICAgICAgIF9tZW51X3dpbi5tdndpbigyLCAwKQ0KICAgICsgICAgICAg
IF9ib3Rfc2VwX3dpbi5tdndpbigyICsgbWVudV93aW5faGVpZ2h0LCAwKQ0KICAgICsgICAgICAg
IF9oZWxwX3dpbi5tdndpbigyICsgbWVudV93aW5faGVpZ2h0ICsgMSwgMCkNCiAgICArICAgIGVs
c2U6DQogICAgKyAgICAgICAgIyBEZWdlbmVyYXRlIGNhc2UuIEdpdmUgdXAgb24gbmljZSByZW5k
ZXJpbmcgYW5kIGp1c3QgcHJldmVudCBlcnJvcnMuDQogICAgKw0KICAgICsgICAgICAgIG1lbnVf
d2luX2hlaWdodCA9IDENCiAgICArDQogICAgKyAgICAgICAgX21lbnVfd2luLnJlc2l6ZSgxLCBz
Y3JlZW5fd2lkdGgpDQogICAgKyAgICAgICAgX2hlbHBfd2luLnJlc2l6ZSgxLCBzY3JlZW5fd2lk
dGgpDQogICAgKw0KICAgICsgICAgICAgIGZvciB3aW4gaW4gX3RvcF9zZXBfd2luLCBfbWVudV93
aW4sIF9ib3Rfc2VwX3dpbiwgX2hlbHBfd2luOg0KICAgICsgICAgICAgICAgICB3aW4ubXZ3aW4o
MCwgMCkNCiAgICArDQogICAgKyAgICAjIEFkanVzdCB0aGUgc2Nyb2xsIHNvIHRoYXQgdGhlIHNl
bGVjdGVkIG5vZGUgaXMgc3RpbGwgd2l0aGluIHRoZSB3aW5kb3csDQogICAgKyAgICAjIGlmIG5l
ZWRlZA0KICAgICsgICAgaWYgX3NlbF9ub2RlX2kgLSBfbWVudV9zY3JvbGwgPj0gbWVudV93aW5f
aGVpZ2h0Og0KICAgICsgICAgICAgIF9tZW51X3Njcm9sbCA9IF9zZWxfbm9kZV9pIC0gbWVudV93
aW5faGVpZ2h0ICsgMQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfaGVpZ2h0KHdpbik6DQogICAg
KyAgICAjIFJldHVybnMgdGhlIGhlaWdodCBvZiAnd2luJw0KICAgICsNCiAgICArICAgIHJldHVy
biB3aW4uZ2V0bWF4eXgoKVswXQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfd2lkdGgod2luKToN
CiAgICArICAgICMgUmV0dXJucyB0aGUgd2lkdGggb2YgJ3dpbicNCiAgICArDQogICAgKyAgICBy
ZXR1cm4gd2luLmdldG1heHl4KClbMV0NCiAgICArDQogICAgKw0KICAgICtkZWYgX2VudGVyX21l
bnUobWVudSk6DQogICAgKyAgICAjIE1ha2VzICdtZW51JyB0aGUgY3VycmVudGx5IGRpc3BsYXll
ZCBtZW51LiBJbiBhZGRpdGlvbiB0byBhY3R1YWwgJ21lbnUncywNCiAgICArICAgICMgIm1lbnUi
IGhlcmUgaW5jbHVkZXMgY2hvaWNlcyBhbmQgc3ltYm9scyBkZWZpbmVkIHdpdGggdGhlICdtZW51
Y29uZmlnJw0KICAgICsgICAgIyBrZXl3b3JkLg0KICAgICsgICAgIw0KICAgICsgICAgIyBSZXR1
cm5zIEZhbHNlIGlmICdtZW51JyBjYW4ndCBiZSBlbnRlcmVkLg0KICAgICsNCiAgICArICAgIGds
b2JhbCBfY3VyX21lbnUNCiAgICArICAgIGdsb2JhbCBfc2hvd24NCiAgICArICAgIGdsb2JhbCBf
c2VsX25vZGVfaQ0KICAgICsgICAgZ2xvYmFsIF9tZW51X3Njcm9sbA0KICAgICsNCiAgICArICAg
IGlmIG5vdCBtZW51LmlzX21lbnVjb25maWc6DQogICAgKyAgICAgICAgIyBOb3QgYSBtZW51DQog
ICAgKyAgICAgICAgcmV0dXJuIEZhbHNlDQogICAgKw0KICAgICsgICAgc2hvd25fc3ViID0gX3No
b3duX25vZGVzKG1lbnUpDQogICAgKyAgICAjIE5ldmVyIGVudGVyIGVtcHR5IG1lbnVzLiBXZSBk
ZXBlbmQgb24gaGF2aW5nIGEgY3VycmVudCBub2RlLg0KICAgICsgICAgaWYgbm90IHNob3duX3N1
YjoNCiAgICArICAgICAgICByZXR1cm4gRmFsc2UNCiAgICArDQogICAgKyAgICAjIFJlbWVtYmVy
IHdoZXJlIHRoZSBjdXJyZW50IG5vZGUgYXBwZWFycyBvbiB0aGUgc2NyZWVuLCBzbyB3ZSBjYW4g
dHJ5DQogICAgKyAgICAjIHRvIGdldCBpdCB0byBhcHBlYXIgaW4gdGhlIHNhbWUgcGxhY2Ugd2hl
biB3ZSBsZWF2ZSB0aGUgbWVudQ0KICAgICsgICAgX3BhcmVudF9zY3JlZW5fcm93cy5hcHBlbmQo
X3NlbF9ub2RlX2kgLSBfbWVudV9zY3JvbGwpDQogICAgKw0KICAgICsgICAgIyBKdW1wIGludG8g
bWVudQ0KICAgICsgICAgX2N1cl9tZW51ID0gbWVudQ0KICAgICsgICAgX3Nob3duID0gc2hvd25f
c3ViDQogICAgKyAgICBfc2VsX25vZGVfaSA9IF9tZW51X3Njcm9sbCA9IDANCiAgICArDQogICAg
KyAgICBpZiBpc2luc3RhbmNlKG1lbnUuaXRlbSwgQ2hvaWNlKToNCiAgICArICAgICAgICBfc2Vs
ZWN0X3NlbGVjdGVkX2Nob2ljZV9zeW0oKQ0KICAgICsNCiAgICArICAgIHJldHVybiBUcnVlDQog
ICAgKw0KICAgICsNCiAgICArZGVmIF9zZWxlY3Rfc2VsZWN0ZWRfY2hvaWNlX3N5bSgpOg0KICAg
ICsgICAgIyBQdXRzIHRoZSBjdXJzb3Igb24gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCAoeS12YWx1
ZWQpIGNob2ljZSBzeW1ib2wsIGlmDQogICAgKyAgICAjIGFueS4gRG9lcyBub3RoaW5nIGlmIGlm
IHRoZSBjaG9pY2UgaGFzIG5vIHNlbGVjdGlvbiAoaXMgbm90IHZpc2libGUvaW4geQ0KICAgICsg
ICAgIyBtb2RlKS4NCiAgICArDQogICAgKyAgICBnbG9iYWwgX3NlbF9ub2RlX2kNCiAgICArDQog
ICAgKyAgICBjaG9pY2UgPSBfY3VyX21lbnUuaXRlbQ0KICAgICsgICAgaWYgY2hvaWNlLnNlbGVj
dGlvbjoNCiAgICArICAgICAgICAjIFNlYXJjaCB0aHJvdWdoIGFsbCBtZW51IG5vZGVzIHRvIGhh
bmRsZSBjaG9pY2Ugc3ltYm9scyBiZWluZyBkZWZpbmVkDQogICAgKyAgICAgICAgIyBpbiBtdWx0
aXBsZSBsb2NhdGlvbnMNCiAgICArICAgICAgICBmb3Igbm9kZSBpbiBjaG9pY2Uuc2VsZWN0aW9u
Lm5vZGVzOg0KICAgICsgICAgICAgICAgICBpZiBub2RlIGluIF9zaG93bjoNCiAgICArICAgICAg
ICAgICAgICAgIF9zZWxfbm9kZV9pID0gX3Nob3duLmluZGV4KG5vZGUpDQogICAgKyAgICAgICAg
ICAgICAgICBfY2VudGVyX3ZlcnRpY2FsbHkoKQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJu
DQogICAgKw0KICAgICsNCiAgICArZGVmIF9qdW1wX3RvKG5vZGUpOg0KICAgICsgICAgIyBKdW1w
cyBkaXJlY3RseSB0byB0aGUgbWVudSBub2RlICdub2RlJw0KICAgICsNCiAgICArICAgIGdsb2Jh
bCBfY3VyX21lbnUNCiAgICArICAgIGdsb2JhbCBfc2hvd24NCiAgICArICAgIGdsb2JhbCBfc2Vs
X25vZGVfaQ0KICAgICsgICAgZ2xvYmFsIF9tZW51X3Njcm9sbA0KICAgICsgICAgZ2xvYmFsIF9z
aG93X2FsbA0KICAgICsgICAgZ2xvYmFsIF9wYXJlbnRfc2NyZWVuX3Jvd3MNCiAgICArDQogICAg
KyAgICAjIENsZWFyIHJlbWVtYmVyZWQgbWVudSBsb2NhdGlvbnMuIFdlIG1pZ2h0IG5vdCBldmVu
IGhhdmUgYmVlbiBpbiB0aGUNCiAgICArICAgICMgcGFyZW50IG1lbnVzIGJlZm9yZS4NCiAgICAr
ICAgIF9wYXJlbnRfc2NyZWVuX3Jvd3MgPSBbXQ0KICAgICsNCiAgICArICAgIG9sZF9zaG93X2Fs
bCA9IF9zaG93X2FsbA0KICAgICsgICAganVtcF9pbnRvID0gKGlzaW5zdGFuY2Uobm9kZS5pdGVt
LCBDaG9pY2UpIG9yIG5vZGUuaXRlbSA9PSBNRU5VKSBhbmQgXA0KICAgICsgICAgICAgICAgICAg
ICAgbm9kZS5saXN0DQogICAgKw0KICAgICsgICAgIyBJZiB3ZSdyZSBqdW1waW5nIHRvIGEgbm9u
LWVtcHR5IGNob2ljZSBvciBtZW51LCBqdW1wIHRvIHRoZSBmaXJzdCBlbnRyeQ0KICAgICsgICAg
IyBpbiBpdCBpbnN0ZWFkIG9mIGp1bXBpbmcgdG8gaXRzIG1lbnUgbm9kZQ0KICAgICsgICAgaWYg
anVtcF9pbnRvOg0KICAgICsgICAgICAgIF9jdXJfbWVudSA9IG5vZGUNCiAgICArICAgICAgICBu
b2RlID0gbm9kZS5saXN0DQogICAgKyAgICBlbHNlOg0KICAgICsgICAgICAgIF9jdXJfbWVudSA9
IF9wYXJlbnRfbWVudShub2RlKQ0KICAgICsNCiAgICArICAgIF9zaG93biA9IF9zaG93bl9ub2Rl
cyhfY3VyX21lbnUpDQogICAgKyAgICBpZiBub2RlIG5vdCBpbiBfc2hvd246DQogICAgKyAgICAg
ICAgIyBUaGUgbm9kZSB3b3VsZG4ndCBiZSBzaG93bi4gVHVybiBvbiBzaG93LWFsbCB0byBzaG93
IGl0Lg0KICAgICsgICAgICAgIF9zaG93X2FsbCA9IFRydWUNCiAgICArICAgICAgICBfc2hvd24g
PSBfc2hvd25fbm9kZXMoX2N1cl9tZW51KQ0KICAgICsNCiAgICArICAgIF9zZWxfbm9kZV9pID0g
X3Nob3duLmluZGV4KG5vZGUpDQogICAgKw0KICAgICsgICAgaWYganVtcF9pbnRvIGFuZCBub3Qg
b2xkX3Nob3dfYWxsIGFuZCBfc2hvd19hbGw6DQogICAgKyAgICAgICAgIyBJZiB3ZSdyZSBqdW1w
aW5nIGludG8gYSBjaG9pY2Ugb3IgbWVudSBhbmQgd2VyZSBmb3JjZWQgdG8gdHVybiBvbg0KICAg
ICsgICAgICAgICMgc2hvdy1hbGwgYmVjYXVzZSB0aGUgZmlyc3QgZW50cnkgd2Fzbid0IHZpc2li
bGUsIHRyeSB0dXJuaW5nIGl0IG9mZi4NCiAgICArICAgICAgICAjIFRoYXQgd2lsbCBsYW5kIHVz
IGF0IHRoZSBmaXJzdCB2aXNpYmxlIG5vZGUgaWYgdGhlcmUgYXJlIHZpc2libGUNCiAgICArICAg
ICAgICAjIG5vZGVzLCBhbmQgaXMgYSBuby1vcCBvdGhlcndpc2UuDQogICAgKyAgICAgICAgX3Rv
Z2dsZV9zaG93X2FsbCgpDQogICAgKw0KICAgICsgICAgX2NlbnRlcl92ZXJ0aWNhbGx5KCkNCiAg
ICArDQogICAgKyAgICAjIElmIHdlJ3JlIGp1bXBpbmcgdG8gYSBub24tZW1wdHkgY2hvaWNlLCBq
dW1wIHRvIHRoZSBzZWxlY3RlZCBzeW1ib2wsIGlmDQogICAgKyAgICAjIGFueQ0KICAgICsgICAg
aWYganVtcF9pbnRvIGFuZCBpc2luc3RhbmNlKF9jdXJfbWVudS5pdGVtLCBDaG9pY2UpOg0KICAg
ICsgICAgICAgIF9zZWxlY3Rfc2VsZWN0ZWRfY2hvaWNlX3N5bSgpDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9sZWF2ZV9tZW51KCk6DQogICAgKyAgICAjIEp1bXBzIHRvIHRoZSBwYXJlbnQgbWVu
dSBvZiB0aGUgY3VycmVudCBtZW51LiBEb2VzIG5vdGhpbmcgaWYgd2UncmUgaW4NCiAgICArICAg
ICMgdGhlIHRvcCBtZW51Lg0KICAgICsNCiAgICArICAgIGdsb2JhbCBfY3VyX21lbnUNCiAgICAr
ICAgIGdsb2JhbCBfc2hvd24NCiAgICArICAgIGdsb2JhbCBfc2VsX25vZGVfaQ0KICAgICsgICAg
Z2xvYmFsIF9tZW51X3Njcm9sbA0KICAgICsNCiAgICArICAgIGlmIF9jdXJfbWVudSBpcyBfa2Nv
bmYudG9wX25vZGU6DQogICAgKyAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsgICAgIyBKdW1w
IHRvIHBhcmVudCBtZW51DQogICAgKyAgICBwYXJlbnQgPSBfcGFyZW50X21lbnUoX2N1cl9tZW51
KQ0KICAgICsgICAgX3Nob3duID0gX3Nob3duX25vZGVzKHBhcmVudCkNCiAgICArICAgIF9zZWxf
bm9kZV9pID0gX3Nob3duLmluZGV4KF9jdXJfbWVudSkNCiAgICArICAgIF9jdXJfbWVudSA9IHBh
cmVudA0KICAgICsNCiAgICArICAgICMgVHJ5IHRvIG1ha2UgdGhlIG1lbnUgZW50cnkgYXBwZWFy
IG9uIHRoZSBzYW1lIHJvdyBvbiB0aGUgc2NyZWVuIGFzIGl0IGRpZA0KICAgICsgICAgIyBiZWZv
cmUgd2UgZW50ZXJlZCB0aGUgbWVudS4NCiAgICArDQogICAgKyAgICBpZiBfcGFyZW50X3NjcmVl
bl9yb3dzOg0KICAgICsgICAgICAgICMgVGhlIHRlcm1pbmFsIG1pZ2h0IGhhdmUgc2hydW5rIHNp
bmNlIHdlIHdlcmUgbGFzdCBpbiB0aGUgcGFyZW50IG1lbnUNCiAgICArICAgICAgICBzY3JlZW5f
cm93ID0gbWluKF9wYXJlbnRfc2NyZWVuX3Jvd3MucG9wKCksIF9oZWlnaHQoX21lbnVfd2luKSAt
IDEpDQogICAgKyAgICAgICAgX21lbnVfc2Nyb2xsID0gbWF4KF9zZWxfbm9kZV9pIC0gc2NyZWVu
X3JvdywgMCkNCiAgICArICAgIGVsc2U6DQogICAgKyAgICAgICAgIyBObyBzYXZlZCBwYXJlbnQg
bWVudSBsb2NhdGlvbnMsIG1lYW5pbmcgd2UganVtcGVkIGRpcmVjdGx5IHRvIHNvbWUNCiAgICAr
ICAgICAgICAjIG5vZGUgZWFybGllcg0KICAgICsgICAgICAgIF9jZW50ZXJfdmVydGljYWxseSgp
DQogICAgKw0KICAgICsNCiAgICArZGVmIF9zZWxlY3RfbmV4dF9tZW51X2VudHJ5KCk6DQogICAg
KyAgICAjIFNlbGVjdHMgdGhlIG1lbnUgZW50cnkgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lLCBhZGp1
c3RpbmcgdGhlIHNjcm9sbCBpZg0KICAgICsgICAgIyBuZWNlc3NhcnkuIERvZXMgbm90aGluZyBp
ZiB3ZSdyZSBhbHJlYWR5IGF0IHRoZSBsYXN0IG1lbnUgZW50cnkuDQogICAgKw0KICAgICsgICAg
Z2xvYmFsIF9zZWxfbm9kZV9pDQogICAgKyAgICBnbG9iYWwgX21lbnVfc2Nyb2xsDQogICAgKw0K
ICAgICsgICAgaWYgX3NlbF9ub2RlX2kgPCBsZW4oX3Nob3duKSAtIDE6DQogICAgKyAgICAgICAg
IyBKdW1wIHRvIHRoZSBuZXh0IG5vZGUNCiAgICArICAgICAgICBfc2VsX25vZGVfaSArPSAxDQog
ICAgKw0KICAgICsgICAgICAgICMgSWYgdGhlIG5ldyBub2RlIGlzIHN1ZmZpY2llbnRseSBjbG9z
ZSB0byB0aGUgZWRnZSBvZiB0aGUgbWVudSB3aW5kb3cNCiAgICArICAgICAgICAjIChhcyBkZXRl
cm1pbmVkIGJ5IF9TQ1JPTExfT0ZGU0VUKSwgaW5jcmVhc2UgdGhlIHNjcm9sbCBieSBvbmUuIFRo
aXMNCiAgICArICAgICAgICAjIGdpdmVzIG5pY2UgYW5kIG5vbi1qdW1weSBiZWhhdmlvciBldmVu
IHdoZW4NCiAgICArICAgICAgICAjIF9TQ1JPTExfT0ZGU0VUID49IF9oZWlnaHQoX21lbnVfd2lu
KS4NCiAgICArICAgICAgICBpZiBfc2VsX25vZGVfaSA+PSBfbWVudV9zY3JvbGwgKyBfaGVpZ2h0
KF9tZW51X3dpbikgLSBfU0NST0xMX09GRlNFVCBcDQogICAgKyAgICAgICAgICAgYW5kIF9tZW51
X3Njcm9sbCA8IF9tYXhfc2Nyb2xsKF9zaG93biwgX21lbnVfd2luKToNCiAgICArDQogICAgKyAg
ICAgICAgICAgIF9tZW51X3Njcm9sbCArPSAxDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zZWxl
Y3RfcHJldl9tZW51X2VudHJ5KCk6DQogICAgKyAgICAjIFNlbGVjdHMgdGhlIG1lbnUgZW50cnkg
YmVmb3JlIHRoZSBjdXJyZW50IG9uZSwgYWRqdXN0aW5nIHRoZSBzY3JvbGwgaWYNCiAgICArICAg
ICMgbmVjZXNzYXJ5LiBEb2VzIG5vdGhpbmcgaWYgd2UncmUgYWxyZWFkeSBhdCB0aGUgZmlyc3Qg
bWVudSBlbnRyeS4NCiAgICArDQogICAgKyAgICBnbG9iYWwgX3NlbF9ub2RlX2kNCiAgICArICAg
IGdsb2JhbCBfbWVudV9zY3JvbGwNCiAgICArDQogICAgKyAgICBpZiBfc2VsX25vZGVfaSA+IDA6
DQogICAgKyAgICAgICAgIyBKdW1wIHRvIHRoZSBwcmV2aW91cyBub2RlDQogICAgKyAgICAgICAg
X3NlbF9ub2RlX2kgLT0gMQ0KICAgICsNCiAgICArICAgICAgICAjIFNlZSBfc2VsZWN0X25leHRf
bWVudV9lbnRyeSgpDQogICAgKyAgICAgICAgaWYgX3NlbF9ub2RlX2kgPCBfbWVudV9zY3JvbGwg
KyBfU0NST0xMX09GRlNFVDoNCiAgICArICAgICAgICAgICAgX21lbnVfc2Nyb2xsID0gbWF4KF9t
ZW51X3Njcm9sbCAtIDEsIDApDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zZWxlY3RfbGFzdF9t
ZW51X2VudHJ5KCk6DQogICAgKyAgICAjIFNlbGVjdHMgdGhlIGxhc3QgbWVudSBlbnRyeSBpbiB0
aGUgY3VycmVudCBtZW51DQogICAgKw0KICAgICsgICAgZ2xvYmFsIF9zZWxfbm9kZV9pDQogICAg
KyAgICBnbG9iYWwgX21lbnVfc2Nyb2xsDQogICAgKw0KICAgICsgICAgX3NlbF9ub2RlX2kgPSBs
ZW4oX3Nob3duKSAtIDENCiAgICArICAgIF9tZW51X3Njcm9sbCA9IF9tYXhfc2Nyb2xsKF9zaG93
biwgX21lbnVfd2luKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfc2VsZWN0X2ZpcnN0X21lbnVf
ZW50cnkoKToNCiAgICArICAgICMgU2VsZWN0cyB0aGUgZmlyc3QgbWVudSBlbnRyeSBpbiB0aGUg
Y3VycmVudCBtZW51DQogICAgKw0KICAgICsgICAgZ2xvYmFsIF9zZWxfbm9kZV9pDQogICAgKyAg
ICBnbG9iYWwgX21lbnVfc2Nyb2xsDQogICAgKw0KICAgICsgICAgX3NlbF9ub2RlX2kgPSBfbWVu
dV9zY3JvbGwgPSAwDQogICAgKw0KICAgICsNCiAgICArZGVmIF90b2dnbGVfc2hvd19hbGwoKToN
CiAgICArICAgICMgVG9nZ2xlcyBzaG93LWFsbCBtb2RlIG9uL29mZi4gSWYgdHVybmluZyBpdCBv
ZmYgd291bGQgZ2l2ZSBubyB2aXNpYmxlDQogICAgKyAgICAjIGl0ZW1zIGluIHRoZSBjdXJyZW50
IG1lbnUsIGl0IGlzIGxlZnQgb24uDQogICAgKw0KICAgICsgICAgZ2xvYmFsIF9zaG93X2FsbA0K
ICAgICsgICAgZ2xvYmFsIF9zaG93bg0KICAgICsgICAgZ2xvYmFsIF9zZWxfbm9kZV9pDQogICAg
KyAgICBnbG9iYWwgX21lbnVfc2Nyb2xsDQogICAgKw0KICAgICsgICAgIyBSb3cgb24gdGhlIHNj
cmVlbiB0aGUgY3Vyc29yIGlzIG9uLiBQcmVmZXJhYmx5IHdlIHdhbnQgdGhlIHNhbWUgcm93IHRv
DQogICAgKyAgICAjIHN0YXkgaGlnaGxpZ2h0ZWQuDQogICAgKyAgICBvbGRfcm93ID0gX3NlbF9u
b2RlX2kgLSBfbWVudV9zY3JvbGwNCiAgICArDQogICAgKyAgICBfc2hvd19hbGwgPSBub3QgX3No
b3dfYWxsDQogICAgKyAgICAjIExpc3Qgb2YgbmV3IG5vZGVzIHRvIGJlIHNob3duIGFmdGVyIHRv
Z2dsaW5nIF9zaG93X2FsbA0KICAgICsgICAgbmV3X3Nob3duID0gX3Nob3duX25vZGVzKF9jdXJf
bWVudSkNCiAgICArDQogICAgKyAgICAjIEZpbmQgYSBnb29kIG5vZGUgdG8gc2VsZWN0LiBUaGUg
c2VsZWN0ZWQgbm9kZSBtaWdodCBkaXNhcHBlYXIgaWYgc2hvdy1hbGwNCiAgICArICAgICMgbW9k
ZSBpcyB0dXJuZWQgb2ZmLg0KICAgICsNCiAgICArICAgICMgU2VsZWN0IHRoZSBwcmV2aW91c2x5
IHNlbGVjdGVkIG5vZGUgaXRzZWxmIGlmIGl0IGlzIHN0aWxsIHZpc2libGUuIElmDQogICAgKyAg
ICAjIHRoZXJlIGFyZSB2aXNpYmxlIG5vZGVzIGJlZm9yZSBpdCwgc2VsZWN0IHRoZSBjbG9zZXN0
IG9uZS4NCiAgICArICAgIGZvciBub2RlIGluIF9zaG93bltfc2VsX25vZGVfaTo6LTFdOg0KICAg
ICsgICAgICAgIGlmIG5vZGUgaW4gbmV3X3Nob3duOg0KICAgICsgICAgICAgICAgICBfc2VsX25v
ZGVfaSA9IG5ld19zaG93bi5pbmRleChub2RlKQ0KICAgICsgICAgICAgICAgICBicmVhaw0KICAg
ICsgICAgZWxzZToNCiAgICArICAgICAgICAjIE5vIHZpc2libGUgbm9kZXMgYmVmb3JlIHRoZSBw
cmV2aW91c2x5IHNlbGVjdGVkIG5vZGUuIFNlbGVjdCB0aGUNCiAgICArICAgICAgICAjIGNsb3Nl
c3QgdmlzaWJsZSBub2RlIGFmdGVyIGl0IGluc3RlYWQuDQogICAgKyAgICAgICAgZm9yIG5vZGUg
aW4gX3Nob3duW19zZWxfbm9kZV9pICsgMTpdOg0KICAgICsgICAgICAgICAgICBpZiBub2RlIGlu
IG5ld19zaG93bjoNCiAgICArICAgICAgICAgICAgICAgIF9zZWxfbm9kZV9pID0gbmV3X3Nob3du
LmluZGV4KG5vZGUpDQogICAgKyAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAgICAgIGVs
c2U6DQogICAgKyAgICAgICAgICAgICMgTm8gdmlzaWJsZSBub2RlcyBhdCBhbGwsIG1lYW5pbmcg
c2hvdy1hbGwgd2FzIHR1cm5lZCBvZmYgaW5zaWRlDQogICAgKyAgICAgICAgICAgICMgYW4gaW52
aXNpYmxlIG1lbnUuIERvbid0IGFsbG93IHRoYXQsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiByZWxp
ZXMNCiAgICArICAgICAgICAgICAgIyBvbiBhbHdheXMgaGF2aW5nIGEgc2VsZWN0ZWQgbm9kZS4N
CiAgICArICAgICAgICAgICAgX3Nob3dfYWxsID0gVHJ1ZQ0KICAgICsgICAgICAgICAgICByZXR1
cm4NCiAgICArDQogICAgKyAgICBfc2hvd24gPSBuZXdfc2hvd24NCiAgICArDQogICAgKyAgICAj
IFRyeSB0byBtYWtlIHRoZSBjdXJzb3Igc3RheSBvbiB0aGUgc2FtZSByb3cgaW4gdGhlIG1lbnUg
d2luZG93LiBUaGlzDQogICAgKyAgICAjIG1pZ2h0IGJlIGltcG9zc2libGUgaWYgdG9vIG1hbnkg
bm9kZXMgaGF2ZSBkaXNhcHBlYXJlZCBhYm92ZSB0aGUgbm9kZS4NCiAgICArICAgIF9tZW51X3Nj
cm9sbCA9IG1heChfc2VsX25vZGVfaSAtIG9sZF9yb3csIDApDQogICAgKw0KICAgICsNCiAgICAr
ZGVmIF9jZW50ZXJfdmVydGljYWxseSgpOg0KICAgICsgICAgIyBDZW50ZXJzIHRoZSBzZWxlY3Rl
ZCBub2RlIHZlcnRpY2FsbHksIGlmIHBvc3NpYmxlDQogICAgKw0KICAgICsgICAgZ2xvYmFsIF9t
ZW51X3Njcm9sbA0KICAgICsNCiAgICArICAgIF9tZW51X3Njcm9sbCA9IG1pbihtYXgoX3NlbF9u
b2RlX2kgLSBfaGVpZ2h0KF9tZW51X3dpbikvLzIsIDApLA0KICAgICsgICAgICAgICAgICAgICAg
ICAgICAgIF9tYXhfc2Nyb2xsKF9zaG93biwgX21lbnVfd2luKSkNCiAgICArDQogICAgKw0KICAg
ICtkZWYgX2RyYXdfbWFpbigpOg0KICAgICsgICAgIyBEcmF3cyB0aGUgIm1haW4iIGRpc3BsYXks
IHdpdGggdGhlIGxpc3Qgb2Ygc3ltYm9scywgdGhlIGhlYWRlciwgYW5kIHRoZQ0KICAgICsgICAg
IyBmb290ZXIuDQogICAgKyAgICAjDQogICAgKyAgICAjIFRoaXMgY291bGQgYmUgb3B0aW1pemVk
IHRvIG9ubHkgdXBkYXRlIHRoZSB3aW5kb3dzIHRoYXQgaGF2ZSBhY3R1YWxseQ0KICAgICsgICAg
IyBjaGFuZ2VkLCBidXQga2VlcCBpdCBzaW1wbGUgZm9yIG5vdyBhbmQgbGV0IGN1cnNlcyBzb3J0
IGl0IG91dC4NCiAgICArDQogICAgKyAgICB0ZXJtX3dpZHRoID0gX3dpZHRoKF9zdGRzY3IpDQog
ICAgKw0KICAgICsNCiAgICArICAgICMNCiAgICArICAgICMgVXBkYXRlIHRoZSBzZXBhcmF0b3Ig
cm93IGJlbG93IHRoZSBtZW51IHBhdGgNCiAgICArICAgICMNCiAgICArDQogICAgKyAgICBfdG9w
X3NlcF93aW4uZXJhc2UoKQ0KICAgICsNCiAgICArICAgICMgRHJhdyBhcnJvd3MgcG9pbnRpbmcg
dXAgaWYgdGhlIHN5bWJvbCB3aW5kb3cgaXMgc2Nyb2xsZWQgZG93bi4gRHJhdyB0aGVtDQogICAg
KyAgICAjIGJlZm9yZSBkcmF3aW5nIHRoZSB0aXRsZSwgc28gdGhlIHRpdGxlIGVuZHMgdXAgb24g
dG9wIGZvciBzbWFsbCB3aW5kb3dzLg0KICAgICsgICAgaWYgX21lbnVfc2Nyb2xsID4gMDoNCiAg
ICArICAgICAgICBfc2FmZV9obGluZShfdG9wX3NlcF93aW4sIDAsIDQsIGN1cnNlcy5BQ1NfVUFS
Uk9XLCBfTl9TQ1JPTExfQVJST1dTKQ0KICAgICsNCiAgICArICAgICMgQWRkIHRoZSAnbWFpbm1l
bnUnIHRleHQgYXMgdGhlIHRpdGxlLCBjZW50ZXJlZCBhdCB0aGUgdG9wDQogICAgKyAgICBfc2Fm
ZV9hZGRzdHIoX3RvcF9zZXBfd2luLA0KICAgICsgICAgICAgICAgICAgICAgIDAsIG1heCgodGVy
bV93aWR0aCAtIGxlbihfa2NvbmYubWFpbm1lbnVfdGV4dCkpLy8yLCAwKSwNCiAgICArICAgICAg
ICAgICAgICAgICBfa2NvbmYubWFpbm1lbnVfdGV4dCkNCiAgICArDQogICAgKyAgICBfdG9wX3Nl
cF93aW4ubm91dHJlZnJlc2goKQ0KICAgICsNCiAgICArICAgICMgTm90ZTogVGhlIG1lbnUgcGF0
aCBhdCB0aGUgdG9wIGlzIGRlbGliZXJhdGVseSB1cGRhdGVkIGxhc3QuIFNlZSBiZWxvdy4NCiAg
ICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFVwZGF0ZSB0aGUgc3ltYm9sIHdpbmRvdw0KICAg
ICsgICAgIw0KICAgICsNCiAgICArICAgIF9tZW51X3dpbi5lcmFzZSgpDQogICAgKw0KICAgICsg
ICAgIyBEcmF3IHRoZSBfc2hvd24gbm9kZXMgc3RhcnRpbmcgZnJvbSBpbmRleCBfbWVudV9zY3Jv
bGwgdXAgdG8gZWl0aGVyIGFzDQogICAgKyAgICAjIG1hbnkgYXMgZml0IGluIHRoZSB3aW5kb3cs
IG9yIHRvIHRoZSBlbmQgb2YgX3Nob3duDQogICAgKyAgICBmb3IgaSBpbiByYW5nZShfbWVudV9z
Y3JvbGwsDQogICAgKyAgICAgICAgICAgICAgICAgICBtaW4oX21lbnVfc2Nyb2xsICsgX2hlaWdo
dChfbWVudV93aW4pLCBsZW4oX3Nob3duKSkpOg0KICAgICsNCiAgICArICAgICAgICBub2RlID0g
X3Nob3duW2ldDQogICAgKw0KICAgICsgICAgICAgICMgVGhlICdub3QgX3Nob3dfYWxsJyB0ZXN0
IGF2b2lkcyBzaG93aW5nIGludmlzaWJsZSBpdGVtcyBpbiByZWQNCiAgICArICAgICAgICAjIG91
dHNpZGUgc2hvdy1hbGwgbW9kZSwgd2hpY2ggY291bGQgbG9vayBjb25mdXNpbmcvYnJva2VuLiBJ
bnZpc2libGUNCiAgICArICAgICAgICAjIHN5bWJvbHMgc2hvdyB1cCBvdXRzaWRlIHNob3ctYWxs
IG1vZGUgaWYgYW4gaW52aXNpYmxlIHN5bWJvbCBoYXMNCiAgICArICAgICAgICAjIHZpc2libGUg
Y2hpbGRyZW4gaW4gYW4gaW1wbGljaXQgKGluZGVudGVkKSBtZW51Lg0KICAgICsgICAgICAgIGlm
IF92aXNpYmxlKG5vZGUpIG9yIG5vdCBfc2hvd19hbGw6DQogICAgKyAgICAgICAgICAgIHN0eWxl
ID0gX3N0eWxlWyJzZWxlY3Rpb24iIGlmIGkgPT0gX3NlbF9ub2RlX2kgZWxzZSAibGlzdCJdDQog
ICAgKyAgICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgc3R5bGUgPSBfc3R5bGVbImludi1z
ZWxlY3Rpb24iIGlmIGkgPT0gX3NlbF9ub2RlX2kgZWxzZSAiaW52LWxpc3QiXQ0KICAgICsNCiAg
ICArICAgICAgICBfc2FmZV9hZGRzdHIoX21lbnVfd2luLCBpIC0gX21lbnVfc2Nyb2xsLCAwLCBf
bm9kZV9zdHIobm9kZSksIHN0eWxlKQ0KICAgICsNCiAgICArICAgIF9tZW51X3dpbi5ub3V0cmVm
cmVzaCgpDQogICAgKw0KICAgICsNCiAgICArICAgICMNCiAgICArICAgICMgVXBkYXRlIHRoZSBi
b3R0b20gc2VwYXJhdG9yIHdpbmRvdw0KICAgICsgICAgIw0KICAgICsNCiAgICArICAgIF9ib3Rf
c2VwX3dpbi5lcmFzZSgpDQogICAgKw0KICAgICsgICAgIyBEcmF3IGFycm93cyBwb2ludGluZyBk
b3duIGlmIHRoZSBzeW1ib2wgd2luZG93IGlzIHNjcm9sbGVkIHVwDQogICAgKyAgICBpZiBfbWVu
dV9zY3JvbGwgPCBfbWF4X3Njcm9sbChfc2hvd24sIF9tZW51X3dpbik6DQogICAgKyAgICAgICAg
X3NhZmVfaGxpbmUoX2JvdF9zZXBfd2luLCAwLCA0LCBjdXJzZXMuQUNTX0RBUlJPVywgX05fU0NS
T0xMX0FSUk9XUykNCiAgICArDQogICAgKyAgICAjIEluZGljYXRlIHdoZW4gc2hvdy1uYW1lL3No
b3ctaGVscC9zaG93LWFsbCBtb2RlIGlzIGVuYWJsZWQNCiAgICArICAgIGVuYWJsZWRfbW9kZXMg
PSBbXQ0KICAgICsgICAgaWYgX3Nob3dfaGVscDoNCiAgICArICAgICAgICBlbmFibGVkX21vZGVz
LmFwcGVuZCgic2hvdy1oZWxwICh0b2dnbGUgd2l0aCBbRl0pIikNCiAgICArICAgIGlmIF9zaG93
X25hbWU6DQogICAgKyAgICAgICAgZW5hYmxlZF9tb2Rlcy5hcHBlbmQoInNob3ctbmFtZSIpDQog
ICAgKyAgICBpZiBfc2hvd19hbGw6DQogICAgKyAgICAgICAgZW5hYmxlZF9tb2Rlcy5hcHBlbmQo
InNob3ctYWxsIikNCiAgICArICAgIGlmIGVuYWJsZWRfbW9kZXM6DQogICAgKyAgICAgICAgcyA9
ICIgYW5kICIuam9pbihlbmFibGVkX21vZGVzKSArICIgbW9kZSBlbmFibGVkIg0KICAgICsgICAg
ICAgIF9zYWZlX2FkZHN0cihfYm90X3NlcF93aW4sIDAsIG1heCh0ZXJtX3dpZHRoIC0gbGVuKHMp
IC0gMiwgMCksIHMpDQogICAgKw0KICAgICsgICAgX2JvdF9zZXBfd2luLm5vdXRyZWZyZXNoKCkN
CiAgICArDQogICAgKw0KICAgICsgICAgIw0KICAgICsgICAgIyBVcGRhdGUgdGhlIGhlbHAgd2lu
ZG93LCB3aGljaCBzaG93cyBlaXRoZXIga2V5IGJpbmRpbmdzIG9yIGhlbHAgdGV4dHMNCiAgICAr
ICAgICMNCiAgICArDQogICAgKyAgICBfaGVscF93aW4uZXJhc2UoKQ0KICAgICsNCiAgICArICAg
IGlmIF9zaG93X2hlbHA6DQogICAgKyAgICAgICAgbm9kZSA9IF9zaG93bltfc2VsX25vZGVfaV0N
CiAgICArICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUuaXRlbSwgKFN5bWJvbCwgQ2hvaWNlKSkg
YW5kIG5vZGUuaGVscDoNCiAgICArICAgICAgICAgICAgaGVscF9saW5lcyA9IHRleHR3cmFwLndy
YXAobm9kZS5oZWxwLCBfd2lkdGgoX2hlbHBfd2luKSkNCiAgICArICAgICAgICAgICAgZm9yIGkg
aW4gcmFuZ2UobWluKF9oZWlnaHQoX2hlbHBfd2luKSwgbGVuKGhlbHBfbGluZXMpKSk6DQogICAg
KyAgICAgICAgICAgICAgICBfc2FmZV9hZGRzdHIoX2hlbHBfd2luLCBpLCAwLCBoZWxwX2xpbmVz
W2ldKQ0KICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIF9zYWZlX2FkZHN0cihf
aGVscF93aW4sIDAsIDAsICIobm8gaGVscCkiKQ0KICAgICsgICAgZWxzZToNCiAgICArICAgICAg
ICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoX01BSU5fSEVMUF9MSU5FUyk6DQogICAgKyAgICAg
ICAgICAgIF9zYWZlX2FkZHN0cihfaGVscF93aW4sIGksIDAsIGxpbmUpDQogICAgKw0KICAgICsg
ICAgX2hlbHBfd2luLm5vdXRyZWZyZXNoKCkNCiAgICArDQogICAgKw0KICAgICsgICAgIw0KICAg
ICsgICAgIyBVcGRhdGUgdGhlIHRvcCByb3cgd2l0aCB0aGUgbWVudSBwYXRoLg0KICAgICsgICAg
Iw0KICAgICsgICAgIyBEb2luZyB0aGlzIGxhc3QgbGVhdmVzIHRoZSBjdXJzb3Igb24gdGhlIHRv
cCByb3csIHdoaWNoIGF2b2lkcyBzb21lIG1pbm9yDQogICAgKyAgICAjIGFubm95aW5nIGp1bXBp
bmVzcyBpbiBnbm9tZS10ZXJtaW5hbCB3aGVuIHJlZHVjaW5nIHRoZSBoZWlnaHQgb2YgdGhlDQog
ICAgKyAgICAjIHRlcm1pbmFsLiBJdCBzZWVtcyB0byBoYXBwZW4gd2hlbmV2ZXIgdGhlIHJvdyB3
aXRoIHRoZSBjdXJzb3Igb24gaXQNCiAgICArICAgICMgZGlzYXBwZWFycy4NCiAgICArICAgICMN
CiAgICArDQogICAgKyAgICBfcGF0aF93aW4uZXJhc2UoKQ0KICAgICsNCiAgICArICAgICMgRHJh
dyB0aGUgbWVudSBwYXRoICgiKFRvcCkgLT4gTWVudSAtPiBTdWJtZW51IC0+IC4uLiIpDQogICAg
Kw0KICAgICsgICAgbWVudV9wcm9tcHRzID0gW10NCiAgICArDQogICAgKyAgICBtZW51ID0gX2N1
cl9tZW51DQogICAgKyAgICB3aGlsZSBtZW51IGlzIG5vdCBfa2NvbmYudG9wX25vZGU6DQogICAg
KyAgICAgICAgIyBQcm9tcHRsZXNzIGNob2ljZXMgY2FuIGJlIGVudGVyZWQgaW4gc2hvdy1hbGwg
bW9kZS4gVXNlDQogICAgKyAgICAgICAgIyBzdGFuZGFyZF9zY19leHByX3N0cigpIGZvciB0aGVt
LCBzbyB0aGV5IHNob3cgdXAgYXMNCiAgICArICAgICAgICAjICc8Y2hvaWNlIChuYW1lIGlmIGFu
eSk+Jy4NCiAgICArICAgICAgICBtZW51X3Byb21wdHMuYXBwZW5kKG1lbnUucHJvbXB0WzBdIGlm
IG1lbnUucHJvbXB0IGVsc2UNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YW5k
YXJkX3NjX2V4cHJfc3RyKG1lbnUuaXRlbSkpDQogICAgKyAgICAgICAgbWVudSA9IG1lbnUucGFy
ZW50DQogICAgKyAgICBtZW51X3Byb21wdHMuYXBwZW5kKCIoVG9wKSIpDQogICAgKyAgICBtZW51
X3Byb21wdHMucmV2ZXJzZSgpDQogICAgKw0KICAgICsgICAgIyBIYWNrOiBXZSBjYW4ndCBwdXQg
QUNTX1JBUlJPVyBkaXJlY3RseSBpbiB0aGUgc3RyaW5nLiBUZW1wb3JhcmlseQ0KICAgICsgICAg
IyByZXByZXNlbnQgaXQgd2l0aCBOVUxMLg0KICAgICsgICAgbWVudV9wYXRoX3N0ciA9ICIgXDAg
Ii5qb2luKG1lbnVfcHJvbXB0cykNCiAgICArDQogICAgKyAgICAjIFNjcm9sbCB0aGUgbWVudSBw
YXRoIHRvIHRoZSByaWdodCBpZiBuZWVkZWQgdG8gbWFrZSB0aGUgY3VycmVudCBtZW51J3MNCiAg
ICArICAgICMgdGl0bGUgdmlzaWJsZQ0KICAgICsgICAgaWYgbGVuKG1lbnVfcGF0aF9zdHIpID4g
dGVybV93aWR0aDoNCiAgICArICAgICAgICBtZW51X3BhdGhfc3RyID0gbWVudV9wYXRoX3N0clts
ZW4obWVudV9wYXRoX3N0cikgLSB0ZXJtX3dpZHRoOl0NCiAgICArDQogICAgKyAgICAjIFByaW50
IHRoZSBwYXRoIHdpdGggdGhlIGFycm93cyByZWluc2VydGVkDQogICAgKyAgICBzcGxpdF9wYXRo
ID0gbWVudV9wYXRoX3N0ci5zcGxpdCgiXDAiKQ0KICAgICsgICAgX3NhZmVfYWRkc3RyKF9wYXRo
X3dpbiwgc3BsaXRfcGF0aFswXSkNCiAgICArICAgIGZvciBzIGluIHNwbGl0X3BhdGhbMTpdOg0K
ICAgICsgICAgICAgIF9zYWZlX2FkZGNoKF9wYXRoX3dpbiwgY3Vyc2VzLkFDU19SQVJST1cpDQog
ICAgKyAgICAgICAgX3NhZmVfYWRkc3RyKF9wYXRoX3dpbiwgcykNCiAgICArDQogICAgKyAgICBf
cGF0aF93aW4ubm91dHJlZnJlc2goKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfcGFyZW50X21l
bnUobm9kZSk6DQogICAgKyAgICAjIFJldHVybnMgdGhlIG1lbnUgbm9kZSBvZiB0aGUgbWVudSB0
aGF0IGNvbnRhaW5zICdub2RlJy4gSW4gYWRkaXRpb24gdG8NCiAgICArICAgICMgcHJvcGVyICdt
ZW51J3MsIHRoaXMgbWlnaHQgYWxzbyBiZSBhICdtZW51Y29uZmlnJyBzeW1ib2wgb3IgYSAnY2hv
aWNlJy4NCiAgICArICAgICMgIk1lbnUiIGhlcmUgbWVhbnMgYSBtZW51IGluIHRoZSBpbnRlcmZh
Y2UuDQogICAgKw0KICAgICsgICAgbWVudSA9IG5vZGUucGFyZW50DQogICAgKyAgICB3aGlsZSBu
b3QgbWVudS5pc19tZW51Y29uZmlnOg0KICAgICsgICAgICAgIG1lbnUgPSBtZW51LnBhcmVudA0K
ICAgICsgICAgcmV0dXJuIG1lbnUNCiAgICArDQogICAgKw0KICAgICtkZWYgX3Nob3duX25vZGVz
KG1lbnUpOg0KICAgICsgICAgIyBSZXR1cm5zIHRoZSBsaXN0IG9mIG1lbnUgbm9kZXMgZnJvbSAn
bWVudScgKHNlZSBfcGFyZW50X21lbnUoKSkgdGhhdA0KICAgICsgICAgIyB3b3VsZCBiZSBzaG93
biB3aGVuIGVudGVyaW5nIGl0DQogICAgKw0KICAgICsgICAgZGVmIHJlYyhub2RlKToNCiAgICAr
ICAgICAgICByZXMgPSBbXQ0KICAgICsNCiAgICArICAgICAgICB3aGlsZSBub2RlOg0KICAgICsg
ICAgICAgICAgICBpZiBfdmlzaWJsZShub2RlKSBvciBfc2hvd19hbGw6DQogICAgKyAgICAgICAg
ICAgICAgICByZXMuYXBwZW5kKG5vZGUpDQogICAgKyAgICAgICAgICAgICAgICBpZiBub2RlLmxp
c3QgYW5kIG5vdCBub2RlLmlzX21lbnVjb25maWc6DQogICAgKyAgICAgICAgICAgICAgICAgICAg
IyBOb2RlcyBmcm9tIGltcGxpY2l0IG1lbnUgY3JlYXRlZCBmcm9tIGRlcGVuZGVuY2llcy4gV2ls
bA0KICAgICsgICAgICAgICAgICAgICAgICAgICMgYmUgc2hvd24gaW5kZW50ZWQuIE5vdGUgdGhh
dCBpc19tZW51Y29uZmlnIGlzIFRydWUgZm9yDQogICAgKyAgICAgICAgICAgICAgICAgICAgIyBt
ZW51cyBhbmQgY2hvaWNlcyBhcyB3ZWxsIGFzICdtZW51Y29uZmlnJyBzeW1ib2xzLg0KICAgICsg
ICAgICAgICAgICAgICAgICAgIHJlcyArPSByZWMobm9kZS5saXN0KQ0KICAgICsNCiAgICArICAg
ICAgICAgICAgZWxpZiBub2RlLmxpc3QgYW5kIGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBTeW1ib2wp
Og0KICAgICsgICAgICAgICAgICAgICAgIyBTaG93IGludmlzaWJsZSBzeW1ib2xzIGlmIHRoZXkg
aGF2ZSB2aXNpYmxlIGNoaWxkcmVuLiBUaGlzDQogICAgKyAgICAgICAgICAgICAgICAjIGNhbiBo
YXBwZW4gZm9yIGFuIG0veS12YWx1ZWQgc3ltYm9sIHdpdGggYW4gb3B0aW9uYWwgcHJvbXB0DQog
ICAgKyAgICAgICAgICAgICAgICAjICgncHJvbXB0ICJmb28iIGlzIENPTkQnKSB0aGF0IGlzIGN1
cnJlbnRseSBkaXNhYmxlZC4gTm90ZQ0KICAgICsgICAgICAgICAgICAgICAgIyB0aGF0IGl0IGFw
cGxpZXMgdG8gYm90aCAnY29uZmlnJyBhbmQgJ21lbnVjb25maWcnIHN5bWJvbHMuDQogICAgKyAg
ICAgICAgICAgICAgICBzaG93bl9jaGlsZHJlbiA9IHJlYyhub2RlLmxpc3QpDQogICAgKyAgICAg
ICAgICAgICAgICBpZiBzaG93bl9jaGlsZHJlbjoNCiAgICArICAgICAgICAgICAgICAgICAgICBy
ZXMuYXBwZW5kKG5vZGUpDQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5vZGUuaXNf
bWVudWNvbmZpZzoNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IHNob3duX2No
aWxkcmVuDQogICAgKw0KICAgICsgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0DQogICAgKw0K
ICAgICsgICAgICAgIHJldHVybiByZXMNCiAgICArDQogICAgKyAgICBpZiBpc2luc3RhbmNlKG1l
bnUuaXRlbSwgQ2hvaWNlKToNCiAgICArICAgICAgICAjIEZvciBuYW1lZCBjaG9pY2VzIGRlZmlu
ZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zLCBlbnRlcmluZyB0aGUgY2hvaWNlDQogICAgKyAgICAg
ICAgIyBhdCBhIHBhcnRpY3VsYXIgbWVudSBub2RlIHdvdWxkIG5vcm1hbGx5IG9ubHkgc2hvdyB0
aGUgY2hvaWNlIHN5bWJvbHMNCiAgICArICAgICAgICAjIGRlZmluZWQgdGhlcmUgKGJlY2F1c2Ug
dGhhdCdzIHdoYXQgdGhlIE1lbnVOb2RlIHRyZWUgbG9va3MgbGlrZSkuDQogICAgKyAgICAgICAg
Iw0KICAgICsgICAgICAgICMgVGhhdCBtaWdodCBsb29rIGNvbmZ1c2luZywgYW5kIG1ha2VzIGV4
dGVuZGluZyBjaG9pY2VzIGJ5IGRlZmluaW5nDQogICAgKyAgICAgICAgIyB0aGVtIGluIG11bHRp
cGxlIGxvY2F0aW9ucyBsZXNzIHVzZWZ1bC4gSW5zdGVhZCwgZ2F0aGVyIGFsbCB0aGUgY2hpbGQN
CiAgICArICAgICAgICAjIG1lbnUgbm9kZXMgZm9yIGFsbCB0aGUgY2hvaWNlcyB3aGVuZXZlciBh
IGNob2ljZSBpcyBlbnRlcmVkLiBUaGF0DQogICAgKyAgICAgICAgIyBtYWtlcyBhbGwgY2hvaWNl
IHN5bWJvbHMgdmlzaWJsZSBhdCBhbGwgbG9jYXRpb25zLg0KICAgICsgICAgICAgICMNCiAgICAr
ICAgICAgICAjIENob2ljZXMgY2FuIGNvbnRhaW4gbm9uLXN5bWJvbCBpdGVtcyAocGVvcGxlIGRv
IGFsbCBzb3J0cyBvZiB3ZWlyZA0KICAgICsgICAgICAgICMgc3R1ZmYgd2l0aCB0aGVtKSwgaGVu
Y2UgdGhlIGdlbmVyYWxpdHkgaGVyZS4gV2UgcmVhbGx5IG5lZWQgdG8NCiAgICArICAgICAgICAj
IHByZXNlcnZlIHRoZSBtZW51IHRyZWUgYXQgZWFjaCBjaG9pY2UgbG9jYXRpb24uDQogICAgKyAg
ICAgICAgIw0KICAgICsgICAgICAgICMgTm90ZTogTmFtZWQgY2hvaWNlcyBhcmUgcHJldHR5IGJy
b2tlbiBpbiB0aGUgQyB0b29scywgYW5kIHRoaXMgaXMNCiAgICArICAgICAgICAjIHN1cGVyIG9i
c2N1cmUsIHNvIHlvdSBwcm9iYWJseSB3b24ndCBmaW5kIG11Y2ggdGhhdCByZWxpZXMgb24gdGhp
cy4NCiAgICArICAgICAgICAjIFRoaXMgd2hvbGUgJ2lmJyBjb3VsZCBiZSBkZWxldGVkIGlmIHlv
dSBkb24ndCBjYXJlIGFib3V0IGRlZmluaW5nDQogICAgKyAgICAgICAgIyBjaG9pY2VzIGluIG11
bHRpcGxlIGxvY2F0aW9ucyB0byBhZGQgc3ltYm9scyAod2hpY2ggd2lsbCBzdGlsbCB3b3JrLA0K
ICAgICsgICAgICAgICMganVzdCB3aXRoIHRoaW5ncyBiZWluZyBkaXNwbGF5ZWQgaW4gYSB3YXkg
dGhhdCBtaWdodCBiZSB1bmV4cGVjdGVkKS4NCiAgICArDQogICAgKyAgICAgICAgIyBEbyBzb21l
IGFkZGl0aW9uYWwgd29yayB0byBhdm9pZCBsaXN0aW5nIGNob2ljZSBzeW1ib2xzIHR3aWNlIGlm
IGFsbA0KICAgICsgICAgICAgICMgb3IgcGFydCBvZiB0aGUgY2hvaWNlIGlzIGNvcGllZCBpbiBt
dWx0aXBsZSBsb2NhdGlvbnMgKGUuZy4gYnkNCiAgICArICAgICAgICAjIGluY2x1ZGluZyBzb21l
IEtjb25maWcgZmlsZSBtdWx0aXBsZSB0aW1lcykuIFdlIGdpdmUgdGhlIHByb21wdHMgYXQNCiAg
ICArICAgICAgICAjIHRoZSBjdXJyZW50IGxvY2F0aW9uIHByZWNlZGVuY2UuDQogICAgKyAgICAg
ICAgc2Vlbl9zeW1zID0ge25vZGUuaXRlbSBmb3Igbm9kZSBpbiByZWMobWVudS5saXN0KQ0KICAg
ICsgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUuaXRlbSwgU3ltYm9sKX0N
CiAgICArICAgICAgICByZXMgPSBbXQ0KICAgICsgICAgICAgIGZvciBjaG9pY2Vfbm9kZSBpbiBt
ZW51Lml0ZW0ubm9kZXM6DQogICAgKyAgICAgICAgICAgIGZvciBub2RlIGluIHJlYyhjaG9pY2Vf
bm9kZS5saXN0KToNCiAgICArICAgICAgICAgICAgICAgICMgJ2Nob2ljZV9ub2RlIGlzIG1lbnUn
IGNoZWNrcyBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlDQogICAgKyAgICAgICAgICAgICAgICAj
IGN1cnJlbnQgbG9jYXRpb24NCiAgICArICAgICAgICAgICAgICAgIGlmIG5vZGUuaXRlbSBub3Qg
aW4gc2Vlbl9zeW1zIG9yIGNob2ljZV9ub2RlIGlzIG1lbnU6DQogICAgKyAgICAgICAgICAgICAg
ICAgICAgcmVzLmFwcGVuZChub2RlKQ0KICAgICsgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5z
dGFuY2Uobm9kZS5pdGVtLCBTeW1ib2wpOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBz
ZWVuX3N5bXMuYWRkKG5vZGUuaXRlbSkNCiAgICArICAgICAgICByZXR1cm4gcmVzDQogICAgKw0K
ICAgICsgICAgcmV0dXJuIHJlYyhtZW51Lmxpc3QpDQogICAgKw0KICAgICsNCiAgICArZGVmIF92
aXNpYmxlKG5vZGUpOg0KICAgICsgICAgIyBSZXR1cm5zIFRydWUgaWYgdGhlIG5vZGUgc2hvdWxk
IGFwcGVhciBpbiB0aGUgbWVudSAob3V0c2lkZSBzaG93LWFsbA0KICAgICsgICAgIyBtb2RlKQ0K
ICAgICsNCiAgICArICAgIHJldHVybiBub2RlLnByb21wdCBhbmQgZXhwcl92YWx1ZShub2RlLnBy
b21wdFsxXSkgYW5kIG5vdCBcDQogICAgKyAgICAgICAgKG5vZGUuaXRlbSA9PSBNRU5VIGFuZCBu
b3QgZXhwcl92YWx1ZShub2RlLnZpc2liaWxpdHkpKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBf
Y2hhbmdlX25vZGUobm9kZSk6DQogICAgKyAgICAjIENoYW5nZXMgdGhlIHZhbHVlIG9mIHRoZSBt
ZW51IG5vZGUgJ25vZGUnIGlmIGl0IGlzIGEgc3ltYm9sLiBCb29scyBhbmQNCiAgICArICAgICMg
dHJpc3RhdGVzIGFyZSB0b2dnbGVkLCB3aGlsZSBvdGhlciBzeW1ib2wgdHlwZXMgcG9wIHVwIGEg
dGV4dCBlbnRyeQ0KICAgICsgICAgIyBkaWFsb2cuDQogICAgKyAgICAjDQogICAgKyAgICAjIFJl
dHVybnMgRmFsc2UgaWYgdGhlIHZhbHVlIG9mICdub2RlJyBjYW4ndCBiZSBjaGFuZ2VkLg0KICAg
ICsNCiAgICArICAgIGlmIG5vdCBfY2hhbmdlYWJsZShub2RlKToNCiAgICArICAgICAgICByZXR1
cm4gRmFsc2UNCiAgICArDQogICAgKyAgICAjIHNjID0gc3ltYm9sL2Nob2ljZQ0KICAgICsgICAg
c2MgPSBub2RlLml0ZW0NCiAgICArDQogICAgKyAgICBpZiBzYy5vcmlnX3R5cGUgaW4gKElOVCwg
SEVYLCBTVFJJTkcpOg0KICAgICsgICAgICAgIHMgPSBzYy5zdHJfdmFsdWUNCiAgICArDQogICAg
KyAgICAgICAgd2hpbGUgVHJ1ZToNCiAgICArICAgICAgICAgICAgcyA9IF9pbnB1dF9kaWFsb2co
DQogICAgKyAgICAgICAgICAgICAgICAie30gKHt9KSIuZm9ybWF0KG5vZGUucHJvbXB0WzBdLCBU
WVBFX1RPX1NUUltzYy5vcmlnX3R5cGVdKSwNCiAgICArICAgICAgICAgICAgICAgIHMsIF9yYW5n
ZV9pbmZvKHNjKSkNCiAgICArDQogICAgKyAgICAgICAgICAgIGlmIHMgaXMgTm9uZToNCiAgICAr
ICAgICAgICAgICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBzYy5vcmln
X3R5cGUgaW4gKElOVCwgSEVYKToNCiAgICArICAgICAgICAgICAgICAgIHMgPSBzLnN0cmlwKCkN
CiAgICArDQogICAgKyAgICAgICAgICAgICAgICAjICdtYWtlIG1lbnVjb25maWcnIGRvZXMgdGhp
cyB0b28uIEhleCB2YWx1ZXMgbm90IHN0YXJ0aW5nIHdpdGgNCiAgICArICAgICAgICAgICAgICAg
ICMgJzB4JyBhcmUgYWNjZXB0ZWQgd2hlbiBsb2FkaW5nIC5jb25maWcgZmlsZXMgdGhvdWdoLg0K
ICAgICsgICAgICAgICAgICAgICAgaWYgc2Mub3JpZ190eXBlID09IEhFWCBhbmQgbm90IHMuc3Rh
cnRzd2l0aCgoIjB4IiwgIjBYIikpOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHMgPSAiMHgi
ICsgcw0KICAgICsNCiAgICArICAgICAgICAgICAgaWYgX2NoZWNrX3ZhbGlkKHNjLCBzKToNCiAg
ICArICAgICAgICAgICAgICAgIF9zZXRfdmFsKHNjLCBzKQ0KICAgICsgICAgICAgICAgICAgICAg
YnJlYWsNCiAgICArDQogICAgKyAgICBlbGlmIGxlbihzYy5hc3NpZ25hYmxlKSA9PSAxOg0KICAg
ICsgICAgICAgICMgSGFuZGxlcyBjaG9pY2Ugc3ltYm9scyBmb3IgY2hvaWNlcyBpbiB5IG1vZGUs
IHdoaWNoIGFyZSBhIHNwZWNpYWwNCiAgICArICAgICAgICAjIGNhc2U6IC5hc3NpZ25hYmxlIGNh
biBiZSAoMiwpIHdoaWxlIC50cmlfdmFsdWUgaXMgMC4NCiAgICArICAgICAgICBfc2V0X3ZhbChz
Yywgc2MuYXNzaWduYWJsZVswXSkNCiAgICArDQogICAgKyAgICBlbHNlOg0KICAgICsgICAgICAg
ICMgU2V0IHRoZSBzeW1ib2wgdG8gdGhlIHZhbHVlIGFmdGVyIHRoZSBjdXJyZW50IHZhbHVlIGlu
DQogICAgKyAgICAgICAgIyBzYy5hc3NpZ25hYmxlLCB3aXRoIHdyYXBwaW5nDQogICAgKyAgICAg
ICAgdmFsX2luZGV4ID0gc2MuYXNzaWduYWJsZS5pbmRleChzYy50cmlfdmFsdWUpDQogICAgKyAg
ICAgICAgX3NldF92YWwoc2MsIHNjLmFzc2lnbmFibGVbKHZhbF9pbmRleCArIDEpICUgbGVuKHNj
LmFzc2lnbmFibGUpXSkNCiAgICArDQogICAgKw0KICAgICsgICAgaWYgX2lzX3lfbW9kZV9jaG9p
Y2Vfc3ltKHNjKSBhbmQgbm90IG5vZGUubGlzdDoNCiAgICArICAgICAgICAjIEltbWVkaWF0ZWx5
IGp1bXAgdG8gdGhlIHBhcmVudCBtZW51IGFmdGVyIG1ha2luZyBhIGNob2ljZSBzZWxlY3Rpb24s
DQogICAgKyAgICAgICAgIyBsaWtlICdtYWtlIG1lbnVjb25maWcnIGRvZXMsIGV4Y2VwdCBpZiB0
aGUgbWVudSBub2RlIGhhcyBjaGlsZHJlbg0KICAgICsgICAgICAgICMgKHdoaWNoIGNhbiBoYXBw
ZW4gaWYgYSBzeW1ib2wgJ2RlcGVuZHMgb24nIGEgY2hvaWNlIHN5bWJvbCB0aGF0DQogICAgKyAg
ICAgICAgIyBpbW1lZGlhdGVseSBwcmVjZWRlcyBpdCkuDQogICAgKyAgICAgICAgX2xlYXZlX21l
bnUoKQ0KICAgICsNCiAgICArDQogICAgKyAgICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArDQog
ICAgK2RlZiBfY2hhbmdlYWJsZShub2RlKToNCiAgICArICAgICMgUmV0dXJucyBUcnVlIGlmIHRo
ZSB2YWx1ZSBpZiAnbm9kZScgY2FuIGJlIGNoYW5nZWQNCiAgICArDQogICAgKyAgICBzYyA9IG5v
ZGUuaXRlbQ0KICAgICsNCiAgICArICAgIGlmIG5vdCBpc2luc3RhbmNlKHNjLCAoU3ltYm9sLCBD
aG9pY2UpKToNCiAgICArICAgICAgICByZXR1cm4gRmFsc2UNCiAgICArDQogICAgKyAgICAjIFRo
aXMgd2lsbCBoaXQgZm9yIGludmlzaWJsZSBzeW1ib2xzLCB3aGljaCBhcHBlYXIgaW4gc2hvdy1h
bGwgbW9kZSBhbmQNCiAgICArICAgICMgd2hlbiBhbiBpbnZpc2libGUgc3ltYm9sIGhhcyB2aXNp
YmxlIGNoaWxkcmVuICh3aGljaCBjYW4gaGFwcGVuIGUuZy4gZm9yDQogICAgKyAgICAjIHN5bWJv
bHMgd2l0aCBvcHRpb25hbCBwcm9tcHRzKQ0KICAgICsgICAgaWYgbm90IChub2RlLnByb21wdCBh
bmQgZXhwcl92YWx1ZShub2RlLnByb21wdFsxXSkpOg0KICAgICsgICAgICAgIHJldHVybiBGYWxz
ZQ0KICAgICsNCiAgICArICAgIHJldHVybiBzYy5vcmlnX3R5cGUgaW4gKFNUUklORywgSU5ULCBI
RVgpIG9yIGxlbihzYy5hc3NpZ25hYmxlKSA+IDEgXA0KICAgICsgICAgICAgIG9yIF9pc195X21v
ZGVfY2hvaWNlX3N5bShzYykNCiAgICArDQogICAgKw0KICAgICtkZWYgX3NldF9zZWxfbm9kZV90
cmlfdmFsKHRyaV92YWwpOg0KICAgICsgICAgIyBTZXRzIHRoZSB2YWx1ZSBvZiB0aGUgY3VycmVu
dGx5IHNlbGVjdGVkIG1lbnUgZW50cnkgdG8gJ3RyaV92YWwnLCBpZiB0aGF0DQogICAgKyAgICAj
IHZhbHVlIGNhbiBiZSBhc3NpZ25lZA0KICAgICsNCiAgICArICAgIHNjID0gX3Nob3duW19zZWxf
bm9kZV9pXS5pdGVtDQogICAgKyAgICBpZiBpc2luc3RhbmNlKHNjLCAoU3ltYm9sLCBDaG9pY2Up
KSBhbmQgdHJpX3ZhbCBpbiBzYy5hc3NpZ25hYmxlOg0KICAgICsgICAgICAgIF9zZXRfdmFsKHNj
LCB0cmlfdmFsKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfc2V0X3ZhbChzYywgdmFsKToNCiAg
ICArICAgICMgV3JhcHBlciBhcm91bmQgU3ltYm9sL0Nob2ljZS5zZXRfdmFsdWUoKSBmb3IgdXBk
YXRpbmcgdGhlIG1lbnUgc3RhdGUgYW5kDQogICAgKyAgICAjIF9jb25mX2NoYW5nZWQNCiAgICAr
DQogICAgKyAgICBnbG9iYWwgX2NvbmZfY2hhbmdlZA0KICAgICsNCiAgICArICAgICMgVXNlIHRo
ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdHJpc3RhdGUgdmFsdWVzLiBUaGlzIG1ha2VzIHRo
ZSBmb3JtYXQNCiAgICArICAgICMgY29uc2lzdGVudCBmb3IgYWxsIHN5bWJvbCB0eXBlcy4NCiAg
ICArICAgIGlmIHZhbCBpbiBUUklfVE9fU1RSOg0KICAgICsgICAgICAgIHZhbCA9IFRSSV9UT19T
VFJbdmFsXQ0KICAgICsNCiAgICArICAgIGlmIHZhbCAhPSBzYy5zdHJfdmFsdWU6DQogICAgKyAg
ICAgICAgc2Muc2V0X3ZhbHVlKHZhbCkNCiAgICArICAgICAgICBfY29uZl9jaGFuZ2VkID0gVHJ1
ZQ0KICAgICsNCiAgICArICAgICAgICAjIENoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9s
IG1pZ2h0IGhhdmUgY2hhbmdlZCB3aGF0IGl0ZW1zIGluIHRoZQ0KICAgICsgICAgICAgICMgY3Vy
cmVudCBtZW51IGFyZSB2aXNpYmxlLiBSZWNhbGN1bGF0ZSB0aGUgc3RhdGUuDQogICAgKyAgICAg
ICAgX3VwZGF0ZV9tZW51KCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX3VwZGF0ZV9tZW51KCk6
DQogICAgKyAgICAjIFVwZGF0ZXMgdGhlIGN1cnJlbnQgbWVudSBhZnRlciB0aGUgdmFsdWUgb2Yg
YSBzeW1ib2wgb3IgY2hvaWNlIGhhcyBiZWVuDQogICAgKyAgICAjIGNoYW5nZWQuIENoYW5naW5n
IGEgdmFsdWUgbWlnaHQgY2hhbmdlIHdoaWNoIGl0ZW1zIGluIHRoZSBtZW51IGFyZQ0KICAgICsg
ICAgIyB2aXNpYmxlLg0KICAgICsgICAgIw0KICAgICsgICAgIyBJZiBwb3NzaWJsZSwgcHJlc2Vy
dmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY3Vyc29yIG9uIHRoZSBzY3JlZW4gd2hlbg0KICAgICsg
ICAgIyBpdGVtcyBhcmUgYWRkZWQvcmVtb3ZlZCBhYm92ZSB0aGUgc2VsZWN0ZWQgaXRlbS4NCiAg
ICArDQogICAgKyAgICBnbG9iYWwgX3Nob3duDQogICAgKyAgICBnbG9iYWwgX3NlbF9ub2RlX2kN
CiAgICArICAgIGdsb2JhbCBfbWVudV9zY3JvbGwNCiAgICArDQogICAgKyAgICAjIFJvdyBvbiB0
aGUgc2NyZWVuIHRoZSBjdXJzb3Igd2FzIG9uDQogICAgKyAgICBvbGRfcm93ID0gX3NlbF9ub2Rl
X2kgLSBfbWVudV9zY3JvbGwNCiAgICArDQogICAgKyAgICBzZWxfbm9kZSA9IF9zaG93bltfc2Vs
X25vZGVfaV0NCiAgICArDQogICAgKyAgICAjIE5ldyB2aXNpYmxlIG5vZGVzDQogICAgKyAgICBf
c2hvd24gPSBfc2hvd25fbm9kZXMoX2N1cl9tZW51KQ0KICAgICsNCiAgICArICAgICMgTmV3IGlu
ZGV4IG9mIHNlbGVjdGVkIG5vZGUNCiAgICArICAgIF9zZWxfbm9kZV9pID0gX3Nob3duLmluZGV4
KHNlbF9ub2RlKQ0KICAgICsNCiAgICArICAgICMgVHJ5IHRvIG1ha2UgdGhlIGN1cnNvciBzdGF5
IG9uIHRoZSBzYW1lIHJvdyBpbiB0aGUgbWVudSB3aW5kb3cuIFRoaXMNCiAgICArICAgICMgbWln
aHQgYmUgaW1wb3NzaWJsZSBpZiB0b28gbWFueSBub2RlcyBoYXZlIGRpc2FwcGVhcmVkIGFib3Zl
IHRoZSBub2RlLg0KICAgICsgICAgX21lbnVfc2Nyb2xsID0gbWF4KF9zZWxfbm9kZV9pIC0gb2xk
X3JvdywgMCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2lucHV0X2RpYWxvZyh0aXRsZSwgaW5p
dGlhbF90ZXh0LCBpbmZvX3RleHQ9Tm9uZSk6DQogICAgKyAgICAjIFBvcHMgdXAgYSBkaWFsb2cg
dGhhdCBwcm9tcHRzIHRoZSB1c2VyIGZvciBhIHN0cmluZw0KICAgICsgICAgIw0KICAgICsgICAg
IyB0aXRsZToNCiAgICArICAgICMgICBUaXRsZSB0byBkaXNwbGF5IGF0IHRoZSB0b3Agb2YgdGhl
IGRpYWxvZyB3aW5kb3cncyBib3JkZXINCiAgICArICAgICMNCiAgICArICAgICMgaW5pdGlhbF90
ZXh0Og0KICAgICsgICAgIyAgIEluaXRpYWwgdGV4dCB0byBwcmVmaWxsIHRoZSBpbnB1dCBmaWVs
ZCB3aXRoDQogICAgKyAgICAjDQogICAgKyAgICAjIGluZm9fdGV4dDoNCiAgICArICAgICMgICBT
dHJpbmcgdG8gc2hvdyBuZXh0IHRvIHRoZSBpbnB1dCBmaWVsZC4gSWYgTm9uZSwganVzdCB0aGUg
aW5wdXQgZmllbGQNCiAgICArICAgICMgICBpcyBzaG93bi4NCiAgICArDQogICAgKyAgICB3aW4g
PSBfc3R5bGVkX3dpbigiYm9keSIpDQogICAgKyAgICB3aW4ua2V5cGFkKFRydWUpDQogICAgKw0K
ICAgICsgICAgaW5mb19saW5lcyA9IGluZm9fdGV4dC5zcGxpdCgiXG4iKSBpZiBpbmZvX3RleHQg
ZWxzZSBbXQ0KICAgICsNCiAgICArICAgICMgR2l2ZSB0aGUgaW5wdXQgZGlhbG9nIGl0cyBpbml0
aWFsIHNpemUNCiAgICArICAgIF9yZXNpemVfaW5wdXRfZGlhbG9nKHdpbiwgdGl0bGUsIGluZm9f
bGluZXMpDQogICAgKw0KICAgICsgICAgX3NhZmVfY3Vyc19zZXQoMikNCiAgICArDQogICAgKyAg
ICAjIElucHV0IGZpZWxkIHRleHQNCiAgICArICAgIHMgPSBpbml0aWFsX3RleHQNCiAgICArDQog
ICAgKyAgICAjIEN1cnNvciBwb3NpdGlvbg0KICAgICsgICAgaSA9IGxlbihpbml0aWFsX3RleHQp
DQogICAgKw0KICAgICsgICAgZGVmIGVkaXRfd2lkdGgoKToNCiAgICArICAgICAgICByZXR1cm4g
X3dpZHRoKHdpbikgLSA0DQogICAgKw0KICAgICsgICAgIyBIb3Jpem9udGFsIHNjcm9sbCBvZmZz
ZXQNCiAgICArICAgIGhzY3JvbGwgPSBtYXgoaSAtIGVkaXRfd2lkdGgoKSArIDEsIDApDQogICAg
Kw0KICAgICsgICAgd2hpbGUgVHJ1ZToNCiAgICArICAgICAgICAjIERyYXcgdGhlICJtYWluIiBk
aXNwbGF5IHdpdGggdGhlIG1lbnUsIGV0Yy4sIHNvIHRoYXQgcmVzaXppbmcgc3RpbGwNCiAgICAr
ICAgICAgICAjIHdvcmtzIHByb3Blcmx5LiBUaGlzIGlzIGxpa2UgYSBzdGFjayBvZiB3aW5kb3dz
LCBvbmx5IGhhcmRjb2RlZCBmb3INCiAgICArICAgICAgICAjIG5vdy4NCiAgICArICAgICAgICBf
ZHJhd19tYWluKCkNCiAgICArICAgICAgICBfZHJhd19pbnB1dF9kaWFsb2cod2luLCB0aXRsZSwg
aW5mb19saW5lcywgcywgaSwgaHNjcm9sbCkNCiAgICArICAgICAgICBjdXJzZXMuZG91cGRhdGUo
KQ0KICAgICsNCiAgICArDQogICAgKyAgICAgICAgYyA9IF9nZXRjaF9jb21wYXQod2luKQ0KICAg
ICsNCiAgICArICAgICAgICBpZiBjID09IGN1cnNlcy5LRVlfUkVTSVpFOg0KICAgICsgICAgICAg
ICAgICAjIFJlc2l6ZSB0aGUgbWFpbiBkaXNwbGF5IHRvby4gVGhlIGRpYWxvZyBmbG9hdHMgYWJv
dmUgaXQuDQogICAgKyAgICAgICAgICAgIF9yZXNpemVfbWFpbigpDQogICAgKyAgICAgICAgICAg
IF9yZXNpemVfaW5wdXRfZGlhbG9nKHdpbiwgdGl0bGUsIGluZm9fbGluZXMpDQogICAgKw0KICAg
ICsgICAgICAgIGVsaWYgYyA9PSAiXG4iOg0KICAgICsgICAgICAgICAgICBfc2FmZV9jdXJzX3Nl
dCgwKQ0KICAgICsgICAgICAgICAgICByZXR1cm4gcw0KICAgICsNCiAgICArICAgICAgICBlbGlm
IGMgPT0gIlx4MUIiOiAgIyBceDFCID0gRVNDDQogICAgKyAgICAgICAgICAgIF9zYWZlX2N1cnNf
c2V0KDApDQogICAgKyAgICAgICAgICAgIHJldHVybiBOb25lDQogICAgKw0KICAgICsgICAgICAg
IGVsc2U6DQogICAgKyAgICAgICAgICAgIHMsIGksIGhzY3JvbGwgPSBfZWRpdF90ZXh0KGMsIHMs
IGksIGhzY3JvbGwsIGVkaXRfd2lkdGgoKSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX3Jlc2l6
ZV9pbnB1dF9kaWFsb2cod2luLCB0aXRsZSwgaW5mb19saW5lcyk6DQogICAgKyAgICAjIFJlc2l6
ZXMgdGhlIGlucHV0IGRpYWxvZyB0byBhIHNpemUgYXBwcm9wcmlhdGUgZm9yIHRoZSB0ZXJtaW5h
bCBzaXplDQogICAgKw0KICAgICsgICAgc2NyZWVuX2hlaWdodCwgc2NyZWVuX3dpZHRoID0gX3N0
ZHNjci5nZXRtYXh5eCgpDQogICAgKw0KICAgICsgICAgd2luX2hlaWdodCA9IDUNCiAgICArICAg
IGlmIGluZm9fbGluZXM6DQogICAgKyAgICAgICAgd2luX2hlaWdodCArPSBsZW4oaW5mb19saW5l
cykgKyAxDQogICAgKyAgICB3aW5faGVpZ2h0ID0gbWluKHdpbl9oZWlnaHQsIHNjcmVlbl9oZWln
aHQpDQogICAgKw0KICAgICsgICAgd2luX3dpZHRoID0gbWF4KF9JTlBVVF9ESUFMT0dfTUlOX1dJ
RFRILA0KICAgICsgICAgICAgICAgICAgICAgICAgIGxlbih0aXRsZSkgKyA0LA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICoobGVuKGxpbmUpICsgNCBmb3IgbGluZSBpbiBpbmZvX2xpbmVzKSkN
CiAgICArICAgIHdpbl93aWR0aCA9IG1pbih3aW5fd2lkdGgsIHNjcmVlbl93aWR0aCkNCiAgICAr
DQogICAgKyAgICB3aW4ucmVzaXplKHdpbl9oZWlnaHQsIHdpbl93aWR0aCkNCiAgICArICAgIHdp
bi5tdndpbigoc2NyZWVuX2hlaWdodCAtIHdpbl9oZWlnaHQpLy8yLA0KICAgICsgICAgICAgICAg
ICAgIChzY3JlZW5fd2lkdGggLSB3aW5fd2lkdGgpLy8yKQ0KICAgICsNCiAgICArDQogICAgK2Rl
ZiBfZHJhd19pbnB1dF9kaWFsb2cod2luLCB0aXRsZSwgaW5mb19saW5lcywgcywgaSwgaHNjcm9s
bCk6DQogICAgKyAgICBlZGl0X3dpZHRoID0gX3dpZHRoKHdpbikgLSA0DQogICAgKw0KICAgICsg
ICAgd2luLmVyYXNlKCkNCiAgICArDQogICAgKyAgICAjIE5vdGU6IFBlcmhhcHMgaGF2aW5nIGEg
c2VwYXJhdGUgd2luZG93IGZvciB0aGUgaW5wdXQgZmllbGQgd291bGQgYmUgbmljZXINCiAgICAr
ICAgIHZpc2libGVfcyA9IHNbaHNjcm9sbDpoc2Nyb2xsICsgZWRpdF93aWR0aF0NCiAgICArICAg
IF9zYWZlX2FkZHN0cih3aW4sIDIsIDIsIHZpc2libGVfcyArICIgIiooZWRpdF93aWR0aCAtIGxl
bih2aXNpYmxlX3MpKSwNCiAgICArICAgICAgICAgICAgICAgICBfc3R5bGVbImVkaXQiXSkNCiAg
ICArDQogICAgKyAgICBmb3IgbGluZW5yLCBsaW5lIGluIGVudW1lcmF0ZShpbmZvX2xpbmVzKToN
CiAgICArICAgICAgICBfc2FmZV9hZGRzdHIod2luLCA0ICsgbGluZW5yLCAyLCBsaW5lKQ0KICAg
ICsNCiAgICArICAgICMgRHJhdyB0aGUgZnJhbWUgbGFzdCBzbyB0aGF0IGl0IG92ZXJ3cml0ZXMg
dGhlIGJvZHkgdGV4dCBmb3Igc21hbGwgd2luZG93cw0KICAgICsgICAgX2RyYXdfZnJhbWUod2lu
LCB0aXRsZSkNCiAgICArDQogICAgKyAgICBfc2FmZV9tb3ZlKHdpbiwgMiwgMiArIGkgLSBoc2Ny
b2xsKQ0KICAgICsNCiAgICArICAgIHdpbi5ub3V0cmVmcmVzaCgpDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9sb2FkX2RpYWxvZygpOg0KICAgICsgICAgIyBEaWFsb2cgZm9yIGxvYWRpbmcgYSBu
ZXcgY29uZmlndXJhdGlvbg0KICAgICsNCiAgICArICAgIGdsb2JhbCBfY29uZl9jaGFuZ2VkDQog
ICAgKyAgICBnbG9iYWwgX2NvbmZfZmlsZW5hbWUNCiAgICArICAgIGdsb2JhbCBfc2hvd19hbGwN
CiAgICArDQogICAgKyAgICBpZiBfY29uZl9jaGFuZ2VkOg0KICAgICsgICAgICAgIGMgPSBfa2V5
X2RpYWxvZygNCiAgICArICAgICAgICAgICAgIkxvYWQiLA0KICAgICsgICAgICAgICAgICAiWW91
IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBMb2FkIG5ld1xuIg0KICAgICsgICAgICAgICAgICAiY29u
ZmlndXJhdGlvbiBhbnl3YXk/XG4iDQogICAgKyAgICAgICAgICAgICJcbiINCiAgICArICAgICAg
ICAgICAgIiAgICAgICAgIChPKUsgIChDKWFuY2VsIiwNCiAgICArICAgICAgICAgICAgIm9jIikN
CiAgICArDQogICAgKyAgICAgICAgaWYgYyBpcyBOb25lIG9yIGMgPT0gImMiOg0KICAgICsgICAg
ICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICBmaWxlbmFtZSA9IF9jb25mX2ZpbGVuYW1l
DQogICAgKyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAgICAgIGZpbGVuYW1lID0gX2lucHV0X2Rp
YWxvZygiRmlsZSB0byBsb2FkIiwgZmlsZW5hbWUsIF9sb2FkX3NhdmVfaW5mbygpKQ0KICAgICsg
ICAgICAgIGlmIGZpbGVuYW1lIGlzIE5vbmU6DQogICAgKyAgICAgICAgICAgIHJldHVybg0KICAg
ICsNCiAgICArICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguZXhwYW5kdXNlcihmaWxlbmFtZSkN
CiAgICArDQogICAgKyAgICAgICAgaWYgX3RyeV9sb2FkKGZpbGVuYW1lKToNCiAgICArICAgICAg
ICAgICAgX2NvbmZfZmlsZW5hbWUgPSBmaWxlbmFtZQ0KICAgICsgICAgICAgICAgICBfY29uZl9j
aGFuZ2VkID0gX25lZWRzX3NhdmUoKQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyBUdXJuIG9u
IHNob3ctYWxsIG1vZGUgaWYgdGhlIHNlbGVjdGVkIG5vZGUgaXMgbm90IHZpc2libGUgYWZ0ZXIN
CiAgICArICAgICAgICAgICAgIyBsb2FkaW5nIHRoZSBuZXcgY29uZmlndXJhdGlvbi4gX3Nob3du
IHN0aWxsIGhvbGRzIHRoZSBvbGQgc3RhdGUuDQogICAgKyAgICAgICAgICAgIGlmIF9zaG93bltf
c2VsX25vZGVfaV0gbm90IGluIF9zaG93bl9ub2RlcyhfY3VyX21lbnUpOg0KICAgICsgICAgICAg
ICAgICAgICAgX3Nob3dfYWxsID0gVHJ1ZQ0KICAgICsNCiAgICArICAgICAgICAgICAgX3VwZGF0
ZV9tZW51KCkNCiAgICArDQogICAgKyAgICAgICAgICAgICMgVGhlIG1lc3NhZ2UgZGlhbG9nIGlu
ZGlyZWN0bHkgdXBkYXRlcyB0aGUgbWVudSBkaXNwbGF5LCBzbyBfbXNnKCkNCiAgICArICAgICAg
ICAgICAgIyBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgbmV3IHN0YXRlIGhhcyBiZWVuIGluaXRp
YWxpemVkDQogICAgKyAgICAgICAgICAgIF9tc2coIlN1Y2Nlc3MiLCAiTG9hZGVkICIgKyBmaWxl
bmFtZSkNCiAgICArICAgICAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsNCiAgICArZGVmIF90
cnlfbG9hZChmaWxlbmFtZSk6DQogICAgKyAgICAjIFRyaWVzIHRvIGxvYWQgYSBjb25maWd1cmF0
aW9uIGZpbGUuIFBvcHMgdXAgYW4gZXJyb3IgYW5kIHJldHVybnMgRmFsc2Ugb24NCiAgICArICAg
ICMgZmFpbHVyZS4NCiAgICArICAgICMNCiAgICArICAgICMgZmlsZW5hbWU6DQogICAgKyAgICAj
ICAgQ29uZmlndXJhdGlvbiBmaWxlIHRvIGxvYWQNCiAgICArDQogICAgKyAgICB0cnk6DQogICAg
KyAgICAgICAgX2tjb25mLmxvYWRfY29uZmlnKGZpbGVuYW1lKQ0KICAgICsgICAgICAgIHJldHVy
biBUcnVlDQogICAgKyAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOg0KICAgICsgICAg
ICAgIF9lcnJvcigiRXJyb3IgbG9hZGluZyAne30nXG5cbnt9IChlcnJubzoge30pIg0KICAgICsg
ICAgICAgICAgICAgICAuZm9ybWF0KGZpbGVuYW1lLCBlLnN0cmVycm9yLCBlcnJuby5lcnJvcmNv
ZGVbZS5lcnJub10pKQ0KICAgICsgICAgICAgIHJldHVybiBGYWxzZQ0KICAgICsNCiAgICArDQog
ICAgK2RlZiBfc2F2ZV9kaWFsb2coc2F2ZV9mbiwgZGVmYXVsdF9maWxlbmFtZSwgZGVzY3JpcHRp
b24pOg0KICAgICsgICAgIyBEaWFsb2cgZm9yIHNhdmluZyB0aGUgY3VycmVudCBjb25maWd1cmF0
aW9uDQogICAgKyAgICAjDQogICAgKyAgICAjIHNhdmVfZm46DQogICAgKyAgICAjICAgRnVuY3Rp
b24gdG8gY2FsbCB3aXRoICdmaWxlbmFtZScgdG8gc2F2ZSB0aGUgZmlsZQ0KICAgICsgICAgIw0K
ICAgICsgICAgIyBkZWZhdWx0X2ZpbGVuYW1lOg0KICAgICsgICAgIyAgIFByZWZpbGxlZCBmaWxl
bmFtZSBpbiB0aGUgaW5wdXQgZmllbGQNCiAgICArICAgICMNCiAgICArICAgICMgZGVzY3JpcHRp
b246DQogICAgKyAgICAjICAgU3RyaW5nIGRlc2NyaWJpbmcgdGhlIHRoaW5nIGJlaW5nIHNhdmVk
DQogICAgKyAgICAjDQogICAgKyAgICAjIFJldHVybiB2YWx1ZToNCiAgICArICAgICMgICBUaGUg
cGF0aCB0byB0aGUgc2F2ZWQgZmlsZSwgb3IgTm9uZSBpZiBubyBmaWxlIHdhcyBzYXZlZA0KICAg
ICsNCiAgICArICAgIGZpbGVuYW1lID0gZGVmYXVsdF9maWxlbmFtZQ0KICAgICsgICAgd2hpbGUg
VHJ1ZToNCiAgICArICAgICAgICBmaWxlbmFtZSA9IF9pbnB1dF9kaWFsb2coIkZpbGVuYW1lIHRv
IHNhdmUge30gdG8iLmZvcm1hdChkZXNjcmlwdGlvbiksDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBfbG9hZF9zYXZlX2luZm8oKSkNCiAgICArICAgICAg
ICBpZiBmaWxlbmFtZSBpcyBOb25lOg0KICAgICsgICAgICAgICAgICByZXR1cm4gTm9uZQ0KICAg
ICsNCiAgICArICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguZXhwYW5kdXNlcihmaWxlbmFtZSkN
CiAgICArDQogICAgKyAgICAgICAgbXNnID0gX3RyeV9zYXZlKHNhdmVfZm4sIGZpbGVuYW1lLCBk
ZXNjcmlwdGlvbikNCiAgICArICAgICAgICBpZiBtc2c6DQogICAgKyAgICAgICAgICAgIF9tc2co
IlN1Y2Nlc3MiLCBtc2cpDQogICAgKyAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZQ0KICAgICsN
CiAgICArDQogICAgK2RlZiBfdHJ5X3NhdmUoc2F2ZV9mbiwgZmlsZW5hbWUsIGRlc2NyaXB0aW9u
KToNCiAgICArICAgICMgVHJpZXMgdG8gc2F2ZSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gUmV0dXJu
cyBhIG1lc3NhZ2UgdG8gcHJpbnQgb24NCiAgICArICAgICMgc3VjY2Vzcy4NCiAgICArICAgICMN
CiAgICArICAgICMgc2F2ZV9mbjoNCiAgICArICAgICMgICBGdW5jdGlvbiB0byBjYWxsIHdpdGgg
J2ZpbGVuYW1lJyB0byBzYXZlIHRoZSBmaWxlDQogICAgKyAgICAjDQogICAgKyAgICAjIGRlc2Ny
aXB0aW9uOg0KICAgICsgICAgIyAgIFN0cmluZyBkZXNjcmliaW5nIHRoZSB0aGluZyBiZWluZyBz
YXZlZA0KICAgICsgICAgIw0KICAgICsgICAgIyBSZXR1cm4gdmFsdWU6DQogICAgKyAgICAjICAg
QSBtZXNzYWdlIHRvIHByaW50IG9uIHN1Y2Nlc3MsIGFuZCBOb25lIG9uIGZhaWx1cmUNCiAgICAr
DQogICAgKyAgICB0cnk6DQogICAgKyAgICAgICAgIyBzYXZlX2ZuKCkgcmV0dXJucyBhIG1lc3Nh
Z2UgdG8gcHJpbnQNCiAgICArICAgICAgICByZXR1cm4gc2F2ZV9mbihmaWxlbmFtZSkNCiAgICAr
ICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6DQogICAgKyAgICAgICAgX2Vycm9yKCJF
cnJvciBzYXZpbmcge30gdG8gJ3t9J1xuXG57fSAoZXJybm86IHt9KSINCiAgICArICAgICAgICAg
ICAgICAgLmZvcm1hdChkZXNjcmlwdGlvbiwgZS5maWxlbmFtZSwgZS5zdHJlcnJvciwNCiAgICAr
ICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5lcnJvcmNvZGVbZS5lcnJub10pKQ0KICAgICsg
ICAgICAgIHJldHVybiBOb25lDQogICAgKw0KICAgICsNCiAgICArZGVmIF9rZXlfZGlhbG9nKHRp
dGxlLCB0ZXh0LCBrZXlzKToNCiAgICArICAgICMgUG9wcyB1cCBhIGRpYWxvZyB0aGF0IGNhbiBi
ZSBjbG9zZWQgYnkgcHJlc3NpbmcgYSBrZXkNCiAgICArICAgICMNCiAgICArICAgICMgdGl0bGU6
DQogICAgKyAgICAjICAgVGl0bGUgdG8gZGlzcGxheSBhdCB0aGUgdG9wIG9mIHRoZSBkaWFsb2cg
d2luZG93J3MgYm9yZGVyDQogICAgKyAgICAjDQogICAgKyAgICAjIHRleHQ6DQogICAgKyAgICAj
ICAgVGV4dCB0byBzaG93IGluIHRoZSBkaWFsb2cNCiAgICArICAgICMNCiAgICArICAgICMga2V5
czoNCiAgICArICAgICMgICBMaXN0IG9mIGtleXMgdGhhdCB3aWxsIGNsb3NlIHRoZSBkaWFsb2cu
IE90aGVyIGtleXMgKGJlc2lkZXMgRVNDKSBhcmUNCiAgICArICAgICMgICBpZ25vcmVkLiBUaGUg
Y2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBwcm92aWRpbmcgYSBoaW50IGFib3V0IHdoaWNoDQog
ICAgKyAgICAjICAga2V5cyBjYW4gYmUgcHJlc3NlZCBpbiAndGV4dCcuDQogICAgKyAgICAjDQog
ICAgKyAgICAjIFJldHVybiB2YWx1ZToNCiAgICArICAgICMgICBUaGUga2V5IHRoYXQgd2FzIHBy
ZXNzZWQgdG8gY2xvc2UgdGhlIGRpYWxvZy4gVXBwZXJjYXNlIGNoYXJhY3RlcnMgYXJlDQogICAg
KyAgICAjICAgY29udmVydGVkIHRvIGxvd2VyY2FzZS4gRVNDIHdpbGwgYWx3YXlzIGNsb3NlIHRo
ZSBkaWFsb2csIGFuZCByZXR1cm5zDQogICAgKyAgICAjICAgTm9uZS4NCiAgICArDQogICAgKyAg
ICB3aW4gPSBfc3R5bGVkX3dpbigiYm9keSIpDQogICAgKyAgICB3aW4ua2V5cGFkKFRydWUpDQog
ICAgKw0KICAgICsgICAgX3Jlc2l6ZV9rZXlfZGlhbG9nKHdpbiwgdGV4dCkNCiAgICArDQogICAg
KyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAgICAgICMgU2VlIF9pbnB1dF9kaWFsb2coKQ0KICAg
ICsgICAgICAgIF9kcmF3X21haW4oKQ0KICAgICsgICAgICAgIF9kcmF3X2tleV9kaWFsb2cod2lu
LCB0aXRsZSwgdGV4dCkNCiAgICArICAgICAgICBjdXJzZXMuZG91cGRhdGUoKQ0KICAgICsNCiAg
ICArDQogICAgKyAgICAgICAgYyA9IF9nZXRjaF9jb21wYXQod2luKQ0KICAgICsNCiAgICArICAg
ICAgICBpZiBjID09IGN1cnNlcy5LRVlfUkVTSVpFOg0KICAgICsgICAgICAgICAgICAjIFJlc2l6
ZSB0aGUgbWFpbiBkaXNwbGF5IHRvby4gVGhlIGRpYWxvZyBmbG9hdHMgYWJvdmUgaXQuDQogICAg
KyAgICAgICAgICAgIF9yZXNpemVfbWFpbigpDQogICAgKyAgICAgICAgICAgIF9yZXNpemVfa2V5
X2RpYWxvZyh3aW4sIHRleHQpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyA9PSAiXHgxQiI6
ICAjIFx4MUIgPSBFU0MNCiAgICArICAgICAgICAgICAgcmV0dXJuIE5vbmUNCiAgICArDQogICAg
KyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGMsIHN0cik6DQogICAgKyAgICAgICAgICAgIGMgPSBj
Lmxvd2VyKCkNCiAgICArICAgICAgICAgICAgaWYgYyBpbiBrZXlzOg0KICAgICsgICAgICAgICAg
ICAgICAgcmV0dXJuIGMNCiAgICArDQogICAgKw0KICAgICtkZWYgX3Jlc2l6ZV9rZXlfZGlhbG9n
KHdpbiwgdGV4dCk6DQogICAgKyAgICAjIFJlc2l6ZXMgdGhlIGtleSBkaWFsb2cgdG8gYSBzaXpl
IGFwcHJvcHJpYXRlIGZvciB0aGUgdGVybWluYWwgc2l6ZQ0KICAgICsNCiAgICArICAgIHNjcmVl
bl9oZWlnaHQsIHNjcmVlbl93aWR0aCA9IF9zdGRzY3IuZ2V0bWF4eXgoKQ0KICAgICsNCiAgICAr
ICAgIGxpbmVzID0gdGV4dC5zcGxpdCgiXG4iKQ0KICAgICsNCiAgICArICAgIHdpbl9oZWlnaHQg
PSBtaW4obGVuKGxpbmVzKSArIDQsIHNjcmVlbl9oZWlnaHQpDQogICAgKyAgICB3aW5fd2lkdGgg
PSBtaW4obWF4KGxlbihsaW5lKSBmb3IgbGluZSBpbiBsaW5lcykgKyA0LCBzY3JlZW5fd2lkdGgp
DQogICAgKw0KICAgICsgICAgd2luLnJlc2l6ZSh3aW5faGVpZ2h0LCB3aW5fd2lkdGgpDQogICAg
KyAgICB3aW4ubXZ3aW4oKHNjcmVlbl9oZWlnaHQgLSB3aW5faGVpZ2h0KS8vMiwNCiAgICArICAg
ICAgICAgICAgICAoc2NyZWVuX3dpZHRoIC0gd2luX3dpZHRoKS8vMikNCiAgICArDQogICAgKw0K
ICAgICtkZWYgX2RyYXdfa2V5X2RpYWxvZyh3aW4sIHRpdGxlLCB0ZXh0KToNCiAgICArICAgIHdp
bi5lcmFzZSgpDQogICAgKw0KICAgICsgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKHRleHQu
c3BsaXQoIlxuIikpOg0KICAgICsgICAgICAgIF9zYWZlX2FkZHN0cih3aW4sIDIgKyBpLCAyLCBs
aW5lKQ0KICAgICsNCiAgICArICAgICMgRHJhdyB0aGUgZnJhbWUgbGFzdCBzbyB0aGF0IGl0IG92
ZXJ3cml0ZXMgdGhlIGJvZHkgdGV4dCBmb3Igc21hbGwgd2luZG93cw0KICAgICsgICAgX2RyYXdf
ZnJhbWUod2luLCB0aXRsZSkNCiAgICArDQogICAgKyAgICB3aW4ubm91dHJlZnJlc2goKQ0KICAg
ICsNCiAgICArDQogICAgK2RlZiBfZHJhd19mcmFtZSh3aW4sIHRpdGxlKToNCiAgICArICAgICMg
RHJhdyBhIGZyYW1lIGFyb3VuZCB0aGUgaW5uZXIgZWRnZXMgb2YgJ3dpbicsIHdpdGggJ3RpdGxl
JyBhdCB0aGUgdG9wDQogICAgKw0KICAgICsgICAgd2luX2hlaWdodCwgd2luX3dpZHRoID0gd2lu
LmdldG1heHl4KCkNCiAgICArDQogICAgKyAgICB3aW4uYXR0cm9uKF9zdHlsZVsiZnJhbWUiXSkN
CiAgICArDQogICAgKyAgICAjIERyYXcgdG9wL2JvdHRvbSBlZGdlDQogICAgKyAgICBfc2FmZV9o
bGluZSh3aW4sICAgICAgICAgICAgICAwLCAwLCAiICIsIHdpbl93aWR0aCkNCiAgICArICAgIF9z
YWZlX2hsaW5lKHdpbiwgd2luX2hlaWdodCAtIDEsIDAsICIgIiwgd2luX3dpZHRoKQ0KICAgICsN
CiAgICArICAgICMgRHJhdyBsZWZ0L3JpZ2h0IGVkZ2UNCiAgICArICAgIF9zYWZlX3ZsaW5lKHdp
biwgMCwgICAgICAgICAgICAgMCwgIiAiLCB3aW5faGVpZ2h0KQ0KICAgICsgICAgX3NhZmVfdmxp
bmUod2luLCAwLCB3aW5fd2lkdGggLSAxLCAiICIsIHdpbl9oZWlnaHQpDQogICAgKw0KICAgICsg
ICAgIyBEcmF3IHRpdGxlDQogICAgKyAgICBfc2FmZV9hZGRzdHIod2luLCAwLCBtYXgoKHdpbl93
aWR0aCAtIGxlbih0aXRsZSkpLy8yLCAwKSwgdGl0bGUpDQogICAgKw0KICAgICsgICAgd2luLmF0
dHJvZmYoX3N0eWxlWyJmcmFtZSJdKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfanVtcF90b19k
aWFsb2coKToNCiAgICArICAgICMgSW1wbGVtZW50cyB0aGUganVtcC10byBkaWFsb2csIHdoZXJl
IHN5bWJvbHMgY2FuIGJlIGxvb2tlZCB1cCB2aWENCiAgICArICAgICMgaW5jcmVtZW50YWwgc2Vh
cmNoIGFuZCBqdW1wZWQgdG8uDQogICAgKyAgICAjDQogICAgKyAgICAjIFJldHVybnMgVHJ1ZSBp
ZiB0aGUgdXNlciBqdW1wZWQgdG8gYSBzeW1ib2wsIGFuZCBGYWxzZSBpZiB0aGUgZGlhbG9nIHdh
cw0KICAgICsgICAgIyBjYW5jZWxlZC4NCiAgICArDQogICAgKyAgICBzID0gIiIgICMgU2VhcmNo
IHRleHQNCiAgICArICAgIHByZXZfcyA9IE5vbmUgICMgUHJldmlvdXMgc2VhcmNoIHRleHQNCiAg
ICArICAgIHNfaSA9IDAgICMgU2VhcmNoIHRleHQgY3Vyc29yIHBvc2l0aW9uDQogICAgKyAgICBo
c2Nyb2xsID0gMCAgIyBIb3Jpem9udGFsIHNjcm9sbCBvZmZzZXQNCiAgICArDQogICAgKyAgICBz
ZWxfbm9kZV9pID0gMCAgIyBJbmRleCBvZiBzZWxlY3RlZCByb3cNCiAgICArICAgIHNjcm9sbCA9
IDAgICMgSW5kZXggaW4gJ21hdGNoZXMnIG9mIHRoZSB0b3Agcm93IG9mIHRoZSBsaXN0DQogICAg
Kw0KICAgICsgICAgIyBFZGl0IGJveCBhdCB0aGUgdG9wDQogICAgKyAgICBlZGl0X2JveCA9IF9z
dHlsZWRfd2luKCJqdW1wLWVkaXQiKQ0KICAgICsgICAgZWRpdF9ib3gua2V5cGFkKFRydWUpDQog
ICAgKw0KICAgICsgICAgIyBMaXN0IG9mIG1hdGNoZXMNCiAgICArICAgIG1hdGNoZXNfd2luID0g
X3N0eWxlZF93aW4oImxpc3QiKQ0KICAgICsNCiAgICArICAgICMgQm90dG9tIHNlcGFyYXRvciwg
d2l0aCBhcnJvd3MgcG9pbnRpbmcgZG93bg0KICAgICsgICAgYm90X3NlcF93aW4gPSBfc3R5bGVk
X3dpbigic2VwYXJhdG9yIikNCiAgICArDQogICAgKyAgICAjIEhlbHAgd2luZG93IHdpdGggaW5z
dHJ1Y3Rpb25zIGF0IHRoZSBib3R0b20NCiAgICArICAgIGhlbHBfd2luID0gX3N0eWxlZF93aW4o
ImhlbHAiKQ0KICAgICsNCiAgICArICAgICMgR2l2ZSB3aW5kb3dzIHRoZWlyIGluaXRpYWwgc2l6
ZQ0KICAgICsgICAgX3Jlc2l6ZV9qdW1wX3RvX2RpYWxvZyhlZGl0X2JveCwgbWF0Y2hlc193aW4s
IGJvdF9zZXBfd2luLCBoZWxwX3dpbiwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsX25vZGVfaSwgc2Nyb2xsKQ0KICAgICsNCiAgICArICAgIF9zYWZlX2N1cnNfc2V0KDIpDQog
ICAgKw0KICAgICsgICAgIyBMb2dpYyBkdXBsaWNhdGlvbiB3aXRoIF9zZWxlY3Rfe25leHQscHJl
dn1fbWVudV9lbnRyeSgpLCBleGNlcHQgd2UgZG8gYQ0KICAgICsgICAgIyBmdW5jdGlvbmFsIHZh
cmlhbnQgdGhhdCByZXR1cm5zIHRoZSBuZXcgKHNlbF9ub2RlX2ksIHNjcm9sbCkgdmFsdWVzIHRv
DQogICAgKyAgICAjIGF2b2lkICdub25sb2NhbCcuIFRPRE86IENhbiB0aGlzIGJlIGZhY3RvcmVk
IG91dCBpbiBzb21lIG5pY2Ugd2F5Pw0KICAgICsNCiAgICArICAgIGRlZiBzZWxlY3RfbmV4dF9t
YXRjaCgpOg0KICAgICsgICAgICAgIGlmIHNlbF9ub2RlX2kgPT0gbGVuKG1hdGNoZXMpIC0gMToN
CiAgICArICAgICAgICAgICAgcmV0dXJuIHNlbF9ub2RlX2ksIHNjcm9sbA0KICAgICsNCiAgICAr
ICAgICAgICBpZiBzZWxfbm9kZV9pICsgMSA+PSBzY3JvbGwgKyBfaGVpZ2h0KG1hdGNoZXNfd2lu
KSAtIF9TQ1JPTExfT0ZGU0VUIFwNCiAgICArICAgICAgICAgICBhbmQgc2Nyb2xsIDwgX21heF9z
Y3JvbGwobWF0Y2hlcywgbWF0Y2hlc193aW4pOg0KICAgICsNCiAgICArICAgICAgICAgICAgcmV0
dXJuIHNlbF9ub2RlX2kgKyAxLCBzY3JvbGwgKyAxDQogICAgKw0KICAgICsgICAgICAgIHJldHVy
biBzZWxfbm9kZV9pICsgMSwgc2Nyb2xsDQogICAgKw0KICAgICsgICAgZGVmIHNlbGVjdF9wcmV2
X21hdGNoKCk6DQogICAgKyAgICAgICAgaWYgc2VsX25vZGVfaSA9PSAwOg0KICAgICsgICAgICAg
ICAgICByZXR1cm4gc2VsX25vZGVfaSwgc2Nyb2xsDQogICAgKw0KICAgICsgICAgICAgIGlmIHNl
bF9ub2RlX2kgLSAxIDwgc2Nyb2xsICsgX1NDUk9MTF9PRkZTRVQ6DQogICAgKyAgICAgICAgICAg
IHJldHVybiBzZWxfbm9kZV9pIC0gMSwgbWF4KHNjcm9sbCAtIDEsIDApDQogICAgKw0KICAgICsg
ICAgICAgIHJldHVybiBzZWxfbm9kZV9pIC0gMSwgc2Nyb2xsDQogICAgKw0KICAgICsgICAgd2hp
bGUgVHJ1ZToNCiAgICArICAgICAgICBpZiBzICE9IHByZXZfczoNCiAgICArICAgICAgICAgICAg
IyBUaGUgc2VhcmNoIHRleHQgY2hhbmdlZC4gRmluZCBuZXcgbWF0Y2hpbmcgbm9kZXMuDQogICAg
Kw0KICAgICsgICAgICAgICAgICBwcmV2X3MgPSBzDQogICAgKw0KICAgICsgICAgICAgICAgICB0
cnk6DQogICAgKyAgICAgICAgICAgICAgICAjIFdlIGNvdWxkIHVzZSByZS5JR05PUkVDQVNFIGhl
cmUgaW5zdGVhZCBvZiBsb3dlcigpLCBidXQgdGhpcw0KICAgICsgICAgICAgICAgICAgICAgIyBp
cyBub3RpY2VhYmx5IGxlc3MgamVya3kgd2hpbGUgaW5wdXR0aW5nIHJlZ2V4ZXMgbGlrZQ0KICAg
ICsgICAgICAgICAgICAgICAgIyAnLipkZWJ1ZyQnICh0aG91Z2ggdGhlICcuKicgaXMgcmVkdW5k
YW50IHRoZXJlKS4gVGhvc2UNCiAgICArICAgICAgICAgICAgICAgICMgcHJvYmFibHkgaGF2ZSBi
YWQgaW50ZXJhY3Rpb25zIHdpdGggcmUuc2VhcmNoKCksIHdoaWNoDQogICAgKyAgICAgICAgICAg
ICAgICAjIG1hdGNoZXMgYW55d2hlcmUgaW4gdGhlIHN0cmluZy4NCiAgICArICAgICAgICAgICAg
ICAgICMNCiAgICArICAgICAgICAgICAgICAgICMgSXQncyBub3QgaG9ycmlibGUgZWl0aGVyIHdh
eS4gSnVzdCBhIGJpdCBzbW9vdGhlci4NCiAgICArICAgICAgICAgICAgICAgIHJlZ2V4X3NlYXJj
aGVzID0gW3JlLmNvbXBpbGUocmVnZXgpLnNlYXJjaA0KICAgICsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIHJlZ2V4IGluIHMubG93ZXIoKS5zcGxpdCgpXQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgICAgICMgTm8gZXhjZXB0aW9uIHRocm93biwgc28gdGhlIHJlZ2V4ZXMg
YXJlIG9rYXkNCiAgICArICAgICAgICAgICAgICAgIGJhZF9yZSA9IE5vbmUNCiAgICArDQogICAg
KyAgICAgICAgICAgICAgICAjIExpc3Qgb2YgbWF0Y2hpbmcgbm9kZXMNCiAgICArICAgICAgICAg
ICAgICAgIG1hdGNoZXMgPSBbXQ0KICAgICsgICAgICAgICAgICAgICAgYWRkX21hdGNoID0gbWF0
Y2hlcy5hcHBlbmQNCiAgICArDQogICAgKyAgICAgICAgICAgICAgICAjIFNlYXJjaCBzeW1ib2xz
IGFuZCBjaG9pY2VzDQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gX3Nv
cnRlZF9zY19ub2RlcygpOg0KICAgICsgICAgICAgICAgICAgICAgICAgICMgU3ltYm9sL2Nob2lj
ZQ0KICAgICsgICAgICAgICAgICAgICAgICAgIHNjID0gbm9kZS5pdGVtDQogICAgKw0KICAgICsg
ICAgICAgICAgICAgICAgICAgIGZvciBzZWFyY2ggaW4gcmVnZXhfc2VhcmNoZXM6DQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgQm90aCB0aGUgbmFtZSBhbmQgdGhlIHByb21wdCBtaWdo
dCBiZSBtaXNzaW5nLCBzaW5jZQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAjIHdlJ3Jl
IHNlYXJjaGluZyBib3RoIHN5bWJvbHMgYW5kIGNob2ljZXMNCiAgICArDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICMgRG9lcyB0aGUgcmVnZXggbWF0Y2ggZWl0aGVyIHRoZSBzeW1ib2wg
bmFtZSBvciB0aGUNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgIyBwcm9tcHQgKGlmIGFu
eSk/DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAoc2MubmFtZSBhbmQgc2Vh
cmNoKHNjLm5hbWUubG93ZXIoKSkgb3INCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLnByb21wdCBhbmQgc2VhcmNoKG5vZGUucHJvbXB0WzBdLmxvd2VyKCkpKToNCiAg
ICArDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEdpdmUgdXAgb24gdGhlIGZp
cnN0IHJlZ2V4IHRoYXQgZG9lc24ndCBtYXRjaCwgdG8NCiAgICArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgc3BlZWQgdGhpbmdzIHVwIGEgYml0IHdoZW4gbXVsdGlwbGUgcmVnZXhlcyBh
cmUNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZW50ZXJlZA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICArDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgYWRkX21hdGNoKG5vZGUp
DQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgIyBTZWFyY2ggbWVudXMgYW5kIGNvbW1lbnRz
DQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4gX3NvcnRlZF9tZW51X2Nv
bW1lbnRfbm9kZXMoKToNCiAgICArICAgICAgICAgICAgICAgICAgICBmb3Igc2VhcmNoIGluIHJl
Z2V4X3NlYXJjaGVzOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VhcmNo
KG5vZGUucHJvbXB0WzBdLmxvd2VyKCkpOg0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsNCiAgICArICAgICAgICAgICAgICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICBhZGRfbWF0Y2gobm9kZSkNCiAgICArDQogICAgKyAgICAgICAgICAgIGV4
Y2VwdCByZS5lcnJvciBhcyBlOg0KICAgICsgICAgICAgICAgICAgICAgIyBCYWQgcmVnZXguIFJl
bWVtYmVyIHRoZSBlcnJvciBtZXNzYWdlIHNvIHdlIGNhbiBzaG93IGl0Lg0KICAgICsgICAgICAg
ICAgICAgICAgYmFkX3JlID0gIkJhZCByZWd1bGFyIGV4cHJlc3Npb24iDQogICAgKyAgICAgICAg
ICAgICAgICAjIHJlLmVycm9yLm1zZyB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuNQ0KICAgICsgICAg
ICAgICAgICAgICAgaWYgaGFzYXR0cihlLCAibXNnIik6DQogICAgKyAgICAgICAgICAgICAgICAg
ICAgYmFkX3JlICs9ICI6ICIgKyBlLm1zZw0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIG1h
dGNoZXMgPSBbXQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyBSZXNldCBzY3JvbGwgYW5kIGp1
bXAgdG8gdGhlIHRvcCBvZiB0aGUgbGlzdCBvZiBtYXRjaGVzDQogICAgKyAgICAgICAgICAgIHNl
bF9ub2RlX2kgPSBzY3JvbGwgPSAwDQogICAgKw0KICAgICsgICAgICAgIF9kcmF3X2p1bXBfdG9f
ZGlhbG9nKGVkaXRfYm94LCBtYXRjaGVzX3dpbiwgYm90X3NlcF93aW4sIGhlbHBfd2luLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIHNfaSwgaHNjcm9sbCwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRfcmUsIG1hdGNoZXMsIHNlbF9ub2RlX2ksIHNj
cm9sbCkNCiAgICArICAgICAgICBjdXJzZXMuZG91cGRhdGUoKQ0KICAgICsNCiAgICArDQogICAg
KyAgICAgICAgYyA9IF9nZXRjaF9jb21wYXQoZWRpdF9ib3gpDQogICAgKw0KICAgICsgICAgICAg
IGlmIGMgPT0gIlxuIjoNCiAgICArICAgICAgICAgICAgaWYgbWF0Y2hlczoNCiAgICArICAgICAg
ICAgICAgICAgIF9qdW1wX3RvKG1hdGNoZXNbc2VsX25vZGVfaV0pDQogICAgKyAgICAgICAgICAg
ICAgICBfc2FmZV9jdXJzX3NldCgwKQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUN
CiAgICArDQogICAgKyAgICAgICAgZWxpZiBjID09ICJceDFCIjogICMgXHgxQiA9IEVTQw0KICAg
ICsgICAgICAgICAgICBfc2FmZV9jdXJzX3NldCgwKQ0KICAgICsgICAgICAgICAgICByZXR1cm4g
RmFsc2UNCiAgICArDQogICAgKyAgICAgICAgZWxpZiBjID09IGN1cnNlcy5LRVlfUkVTSVpFOg0K
ICAgICsgICAgICAgICAgICAjIFdlIGFkanVzdCB0aGUgc2Nyb2xsIHNvIHRoYXQgdGhlIHNlbGVj
dGVkIG5vZGUgc3RheXMgdmlzaWJsZSBpbg0KICAgICsgICAgICAgICAgICAjIHRoZSBsaXN0IHdo
ZW4gdGhlIHRlcm1pbmFsIGlzIHJlc2l6ZWQsIGhlbmNlIHRoZSAnc2Nyb2xsJw0KICAgICsgICAg
ICAgICAgICAjIGFzc2lnbm1lbnQNCiAgICArICAgICAgICAgICAgc2Nyb2xsID0gX3Jlc2l6ZV9q
dW1wX3RvX2RpYWxvZygNCiAgICArICAgICAgICAgICAgICAgIGVkaXRfYm94LCBtYXRjaGVzX3dp
biwgYm90X3NlcF93aW4sIGhlbHBfd2luLA0KICAgICsgICAgICAgICAgICAgICAgc2VsX25vZGVf
aSwgc2Nyb2xsKQ0KICAgICsNCiAgICArICAgICAgICBlbGlmIGMgPT0gIlx4MDYiOiAgIyBceDA2
ID0gQ3RybC1GDQogICAgKyAgICAgICAgICAgIGlmIG1hdGNoZXM6DQogICAgKyAgICAgICAgICAg
ICAgICBfc2FmZV9jdXJzX3NldCgwKQ0KICAgICsgICAgICAgICAgICAgICAgX2luZm9fZGlhbG9n
KG1hdGNoZXNbc2VsX25vZGVfaV0sIFRydWUpDQogICAgKyAgICAgICAgICAgICAgICBfc2FmZV9j
dXJzX3NldCgyKQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHNjcm9sbCA9IF9yZXNpemVf
anVtcF90b19kaWFsb2coDQogICAgKyAgICAgICAgICAgICAgICAgICAgZWRpdF9ib3gsIG1hdGNo
ZXNfd2luLCBib3Rfc2VwX3dpbiwgaGVscF93aW4sDQogICAgKyAgICAgICAgICAgICAgICAgICAg
c2VsX25vZGVfaSwgc2Nyb2xsKQ0KICAgICsNCiAgICArICAgICAgICBlbGlmIGMgPT0gY3Vyc2Vz
LktFWV9ET1dOOg0KICAgICsgICAgICAgICAgICBzZWxfbm9kZV9pLCBzY3JvbGwgPSBzZWxlY3Rf
bmV4dF9tYXRjaCgpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyA9PSBjdXJzZXMuS0VZX1VQ
Og0KICAgICsgICAgICAgICAgICBzZWxfbm9kZV9pLCBzY3JvbGwgPSBzZWxlY3RfcHJldl9tYXRj
aCgpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9OUEFHRSwgIlx4
MDQiKTogICMgUGFnZSBEb3duL0N0cmwtRA0KICAgICsgICAgICAgICAgICAjIEtlZXAgaXQgc2lt
cGxlLiBUaGlzIHdheSB3ZSBnZXQgc2FuZSBiZWhhdmlvciBmb3Igc21hbGwgd2luZG93cywNCiAg
ICArICAgICAgICAgICAgIyBldGMuLCBmb3IgZnJlZS4NCiAgICArICAgICAgICAgICAgZm9yIF8g
aW4gcmFuZ2UoX1BHX0pVTVApOg0KICAgICsgICAgICAgICAgICAgICAgc2VsX25vZGVfaSwgc2Ny
b2xsID0gc2VsZWN0X25leHRfbWF0Y2goKQ0KICAgICsNCiAgICArICAgICAgICAjIFBhZ2UgVXAg
KG5vIEN0cmwtVSwgYXMgaXQncyBhbHJlYWR5IHVzZWQgYnkgdGhlIGVkaXQgYm94KQ0KICAgICsg
ICAgICAgIGVsaWYgYyA9PSBjdXJzZXMuS0VZX1BQQUdFOg0KICAgICsgICAgICAgICAgICBmb3Ig
XyBpbiByYW5nZShfUEdfSlVNUCk6DQogICAgKyAgICAgICAgICAgICAgICBzZWxfbm9kZV9pLCBz
Y3JvbGwgPSBzZWxlY3RfcHJldl9tYXRjaCgpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyA9
PSBjdXJzZXMuS0VZX0VORDoNCiAgICArICAgICAgICAgICAgc2VsX25vZGVfaSA9IGxlbihtYXRj
aGVzKSAtIDENCiAgICArICAgICAgICAgICAgc2Nyb2xsID0gX21heF9zY3JvbGwobWF0Y2hlcywg
bWF0Y2hlc193aW4pDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyA9PSBjdXJzZXMuS0VZX0hP
TUU6DQogICAgKyAgICAgICAgICAgIHNlbF9ub2RlX2kgPSBzY3JvbGwgPSAwDQogICAgKw0KICAg
ICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIHMsIHNfaSwgaHNjcm9sbCA9IF9lZGl0
X3RleHQoYywgcywgc19pLCBoc2Nyb2xsLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF93aWR0aChlZGl0X2JveCkgLSAyKQ0KICAgICsNCiAgICArDQogICAg
KyMgT2JzY3VyZSBQeXRob246IFdlIG5ldmVyIHBhc3MgYSB2YWx1ZSBmb3IgY2FjaGVkX25vZGVz
LCBhbmQgaXQga2VlcHMgcG9pbnRpbmcNCiAgICArIyB0byB0aGUgc2FtZSBsaXN0LiBUaGlzIGF2
b2lkcyBhIGdsb2JhbC4NCiAgICArZGVmIF9zb3J0ZWRfc2Nfbm9kZXMoY2FjaGVkX25vZGVzPVtd
KToNCiAgICArICAgICMgUmV0dXJucyBhIHNvcnRlZCBsaXN0IG9mIHN5bWJvbCBhbmQgY2hvaWNl
IG5vZGVzIHRvIHNlYXJjaC4gVGhlIHN5bWJvbA0KICAgICsgICAgIyBub2RlcyBhcHBlYXIgZmly
c3QsIHNvcnRlZCBieSBuYW1lLCBhbmQgdGhlbiB0aGUgY2hvaWNlIG5vZGVzLCBzb3J0ZWQgYnkN
CiAgICArICAgICMgcHJvbXB0IGFuZCAoc2Vjb25kYXJpbHkpIG5hbWUuDQogICAgKw0KICAgICsg
ICAgaWYgbm90IGNhY2hlZF9ub2RlczoNCiAgICArICAgICAgICAjIEFkZCBzeW1ib2wgbm9kZXMN
CiAgICArICAgICAgICBmb3Igc3ltIGluIHNvcnRlZChfa2NvbmYudW5pcXVlX2RlZmluZWRfc3lt
cywNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICBrZXk9bGFtYmRhIHN5bTogc3ltLm5h
bWUpOg0KICAgICsgICAgICAgICAgICAjICs9IGlzIGluLXBsYWNlIGZvciBsaXN0cw0KICAgICsg
ICAgICAgICAgICBjYWNoZWRfbm9kZXMgKz0gc3ltLm5vZGVzDQogICAgKw0KICAgICsgICAgICAg
ICMgQWRkIGNob2ljZSBub2Rlcw0KICAgICsNCiAgICArICAgICAgICBjaG9pY2VzID0gc29ydGVk
KF9rY29uZi51bmlxdWVfY2hvaWNlcywNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgIGtl
eT1sYW1iZGEgY2hvaWNlOiBjaG9pY2UubmFtZSBvciAiIikNCiAgICArDQogICAgKyAgICAgICAg
Y2FjaGVkX25vZGVzICs9IHNvcnRlZCgNCiAgICArICAgICAgICAgICAgW25vZGUNCiAgICArICAg
ICAgICAgICAgIGZvciBjaG9pY2UgaW4gY2hvaWNlcw0KICAgICsgICAgICAgICAgICAgICAgIGZv
ciBub2RlIGluIGNob2ljZS5ub2Rlc10sDQogICAgKyAgICAgICAgICAgIGtleT1sYW1iZGEgbm9k
ZTogbm9kZS5wcm9tcHRbMF0gaWYgbm9kZS5wcm9tcHQgZWxzZSAiIikNCiAgICArDQogICAgKyAg
ICByZXR1cm4gY2FjaGVkX25vZGVzDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zb3J0ZWRfbWVu
dV9jb21tZW50X25vZGVzKGNhY2hlZF9ub2Rlcz1bXSk6DQogICAgKyAgICAjIFJldHVybnMgYSBs
aXN0IG9mIG1lbnUgYW5kIGNvbW1lbnQgbm9kZXMgdG8gc2VhcmNoLCBzb3J0ZWQgYnkgcHJvbXB0
LA0KICAgICsgICAgIyB3aXRoIHRoZSBtZW51cyBmaXJzdA0KICAgICsNCiAgICArICAgIGlmIG5v
dCBjYWNoZWRfbm9kZXM6DQogICAgKyAgICAgICAgZGVmIHByb21wdF90ZXh0KG1jKToNCiAgICAr
ICAgICAgICAgICAgcmV0dXJuIG1jLnByb21wdFswXQ0KICAgICsNCiAgICArICAgICAgICBjYWNo
ZWRfbm9kZXMgKz0gc29ydGVkKF9rY29uZi5tZW51cywga2V5PXByb21wdF90ZXh0KQ0KICAgICsg
ICAgICAgIGNhY2hlZF9ub2RlcyArPSBzb3J0ZWQoX2tjb25mLmNvbW1lbnRzLCBrZXk9cHJvbXB0
X3RleHQpDQogICAgKw0KICAgICsgICAgcmV0dXJuIGNhY2hlZF9ub2Rlcw0KICAgICsNCiAgICAr
DQogICAgK2RlZiBfcmVzaXplX2p1bXBfdG9fZGlhbG9nKGVkaXRfYm94LCBtYXRjaGVzX3dpbiwg
Ym90X3NlcF93aW4sIGhlbHBfd2luLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxfbm9kZV9pLCBzY3JvbGwpOg0KICAgICsgICAgIyBSZXNpemVzIHRoZSBqdW1wLXRvIGRpYWxv
ZyB0byBmaWxsIHRoZSB0ZXJtaW5hbC4NCiAgICArICAgICMNCiAgICArICAgICMgUmV0dXJucyB0
aGUgbmV3IHNjcm9sbCBpbmRleC4gV2UgYWRqdXN0IHRoZSBzY3JvbGwgaWYgbmVlZGVkIHNvIHRo
YXQgdGhlDQogICAgKyAgICAjIHNlbGVjdGVkIG5vZGUgc3RheXMgdmlzaWJsZS4NCiAgICArDQog
ICAgKyAgICBzY3JlZW5faGVpZ2h0LCBzY3JlZW5fd2lkdGggPSBfc3Rkc2NyLmdldG1heHl4KCkN
CiAgICArDQogICAgKyAgICBib3Rfc2VwX3dpbi5yZXNpemUoMSwgc2NyZWVuX3dpZHRoKQ0KICAg
ICsNCiAgICArICAgIGhlbHBfd2luX2hlaWdodCA9IGxlbihfSlVNUF9UT19IRUxQX0xJTkVTKQ0K
ICAgICsgICAgbWF0Y2hlc193aW5faGVpZ2h0ID0gc2NyZWVuX2hlaWdodCAtIGhlbHBfd2luX2hl
aWdodCAtIDQNCiAgICArDQogICAgKyAgICBpZiBtYXRjaGVzX3dpbl9oZWlnaHQgPj0gMToNCiAg
ICArICAgICAgICBlZGl0X2JveC5yZXNpemUoMywgc2NyZWVuX3dpZHRoKQ0KICAgICsgICAgICAg
IG1hdGNoZXNfd2luLnJlc2l6ZShtYXRjaGVzX3dpbl9oZWlnaHQsIHNjcmVlbl93aWR0aCkNCiAg
ICArICAgICAgICBoZWxwX3dpbi5yZXNpemUoaGVscF93aW5faGVpZ2h0LCBzY3JlZW5fd2lkdGgp
DQogICAgKw0KICAgICsgICAgICAgIG1hdGNoZXNfd2luLm12d2luKDMsIDApDQogICAgKyAgICAg
ICAgYm90X3NlcF93aW4ubXZ3aW4oMyArIG1hdGNoZXNfd2luX2hlaWdodCwgMCkNCiAgICArICAg
ICAgICBoZWxwX3dpbi5tdndpbigzICsgbWF0Y2hlc193aW5faGVpZ2h0ICsgMSwgMCkNCiAgICAr
ICAgIGVsc2U6DQogICAgKyAgICAgICAgIyBEZWdlbmVyYXRlIGNhc2UuIEdpdmUgdXAgb24gbmlj
ZSByZW5kZXJpbmcgYW5kIGp1c3QgcHJldmVudCBlcnJvcnMuDQogICAgKw0KICAgICsgICAgICAg
IG1hdGNoZXNfd2luX2hlaWdodCA9IDENCiAgICArDQogICAgKyAgICAgICAgZWRpdF9ib3gucmVz
aXplKHNjcmVlbl9oZWlnaHQsIHNjcmVlbl93aWR0aCkNCiAgICArICAgICAgICBtYXRjaGVzX3dp
bi5yZXNpemUoMSwgc2NyZWVuX3dpZHRoKQ0KICAgICsgICAgICAgIGhlbHBfd2luLnJlc2l6ZSgx
LCBzY3JlZW5fd2lkdGgpDQogICAgKw0KICAgICsgICAgICAgIGZvciB3aW4gaW4gbWF0Y2hlc193
aW4sIGJvdF9zZXBfd2luLCBoZWxwX3dpbjoNCiAgICArICAgICAgICAgICAgd2luLm12d2luKDAs
IDApDQogICAgKw0KICAgICsgICAgIyBBZGp1c3QgdGhlIHNjcm9sbCBzbyB0aGF0IHRoZSBzZWxl
Y3RlZCByb3cgaXMgc3RpbGwgd2l0aGluIHRoZSB3aW5kb3csIGlmDQogICAgKyAgICAjIG5lZWRl
ZA0KICAgICsgICAgaWYgc2VsX25vZGVfaSAtIHNjcm9sbCA+PSBtYXRjaGVzX3dpbl9oZWlnaHQ6
DQogICAgKyAgICAgICAgcmV0dXJuIHNlbF9ub2RlX2kgLSBtYXRjaGVzX3dpbl9oZWlnaHQgKyAx
DQogICAgKyAgICByZXR1cm4gc2Nyb2xsDQogICAgKw0KICAgICsNCiAgICArZGVmIF9kcmF3X2p1
bXBfdG9fZGlhbG9nKGVkaXRfYm94LCBtYXRjaGVzX3dpbiwgYm90X3NlcF93aW4sIGhlbHBfd2lu
LA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgcywgc19pLCBoc2Nyb2xsLA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICAgYmFkX3JlLCBtYXRjaGVzLCBzZWxfbm9kZV9pLCBzY3Jv
bGwpOg0KICAgICsNCiAgICArICAgIGVkaXRfd2lkdGggPSBfd2lkdGgoZWRpdF9ib3gpIC0gMg0K
ICAgICsNCiAgICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFVwZGF0ZSBsaXN0IG9mIG1hdGNo
ZXMNCiAgICArICAgICMNCiAgICArDQogICAgKyAgICBtYXRjaGVzX3dpbi5lcmFzZSgpDQogICAg
Kw0KICAgICsgICAgaWYgbWF0Y2hlczoNCiAgICArICAgICAgICBmb3IgaSBpbiByYW5nZShzY3Jv
bGwsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgbWluKHNjcm9sbCArIF9oZWlnaHQobWF0
Y2hlc193aW4pLCBsZW4obWF0Y2hlcykpKToNCiAgICArDQogICAgKyAgICAgICAgICAgIG5vZGUg
PSBtYXRjaGVzW2ldDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUu
aXRlbSwgKFN5bWJvbCwgQ2hvaWNlKSk6DQogICAgKyAgICAgICAgICAgICAgICBub2RlX3N0ciA9
IF9uYW1lX2FuZF92YWxfc3RyKG5vZGUuaXRlbSkNCiAgICArICAgICAgICAgICAgICAgIGlmIG5v
ZGUucHJvbXB0Og0KICAgICsgICAgICAgICAgICAgICAgICAgIG5vZGVfc3RyICs9ICcgInt9Iicu
Zm9ybWF0KG5vZGUucHJvbXB0WzBdKQ0KICAgICsgICAgICAgICAgICBlbGlmIG5vZGUuaXRlbSA9
PSBNRU5VOg0KICAgICsgICAgICAgICAgICAgICAgbm9kZV9zdHIgPSAnbWVudSAie30iJy5mb3Jt
YXQobm9kZS5wcm9tcHRbMF0pDQogICAgKyAgICAgICAgICAgIGVsc2U6ICAjIG5vZGUuaXRlbSA9
PSBDT01NRU5UDQogICAgKyAgICAgICAgICAgICAgICBub2RlX3N0ciA9ICdjb21tZW50ICJ7fSIn
LmZvcm1hdChub2RlLnByb21wdFswXSkNCiAgICArDQogICAgKyAgICAgICAgICAgIF9zYWZlX2Fk
ZHN0cihtYXRjaGVzX3dpbiwgaSAtIHNjcm9sbCwgMCwgbm9kZV9zdHIsDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgICAgICBfc3R5bGVbInNlbGVjdGlvbiIgaWYgaSA9PSBzZWxfbm9kZV9pIGVs
c2UgImxpc3QiXSkNCiAgICArDQogICAgKyAgICBlbHNlOg0KICAgICsgICAgICAgICMgYmFkX3Jl
IGhvbGRzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhlIHJlLmVycm9yIGV4Y2VwdGlvbiBvbiBl
cnJvcnMNCiAgICArICAgICAgICBfc2FmZV9hZGRzdHIobWF0Y2hlc193aW4sIDAsIDAsIGJhZF9y
ZSBvciAiTm8gbWF0Y2hlcyIpDQogICAgKw0KICAgICsgICAgbWF0Y2hlc193aW4ubm91dHJlZnJl
c2goKQ0KICAgICsNCiAgICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFVwZGF0ZSBib3R0b20g
c2VwYXJhdG9yIGxpbmUNCiAgICArICAgICMNCiAgICArDQogICAgKyAgICBib3Rfc2VwX3dpbi5l
cmFzZSgpDQogICAgKw0KICAgICsgICAgIyBEcmF3IGFycm93cyBwb2ludGluZyBkb3duIGlmIHRo
ZSBzeW1ib2wgbGlzdCBpcyBzY3JvbGxlZCB1cA0KICAgICsgICAgaWYgc2Nyb2xsIDwgX21heF9z
Y3JvbGwobWF0Y2hlcywgbWF0Y2hlc193aW4pOg0KICAgICsgICAgICAgIF9zYWZlX2hsaW5lKGJv
dF9zZXBfd2luLCAwLCA0LCBjdXJzZXMuQUNTX0RBUlJPVywgX05fU0NST0xMX0FSUk9XUykNCiAg
ICArDQogICAgKyAgICBib3Rfc2VwX3dpbi5ub3V0cmVmcmVzaCgpDQogICAgKw0KICAgICsNCiAg
ICArICAgICMNCiAgICArICAgICMgVXBkYXRlIGhlbHAgd2luZG93IGF0IGJvdHRvbQ0KICAgICsg
ICAgIw0KICAgICsNCiAgICArICAgIGhlbHBfd2luLmVyYXNlKCkNCiAgICArDQogICAgKyAgICBm
b3IgaSwgbGluZSBpbiBlbnVtZXJhdGUoX0pVTVBfVE9fSEVMUF9MSU5FUyk6DQogICAgKyAgICAg
ICAgX3NhZmVfYWRkc3RyKGhlbHBfd2luLCBpLCAwLCBsaW5lKQ0KICAgICsNCiAgICArICAgIGhl
bHBfd2luLm5vdXRyZWZyZXNoKCkNCiAgICArDQogICAgKw0KICAgICsgICAgIw0KICAgICsgICAg
IyBVcGRhdGUgZWRpdCBib3guIFdlIGRvIHRoaXMgbGFzdCBzaW5jZSBpdCBtYWtlcyBpdCBoYW5k
eSB0byBwb3NpdGlvbiB0aGUNCiAgICArICAgICMgY3Vyc29yLg0KICAgICsgICAgIw0KICAgICsN
CiAgICArICAgIGVkaXRfYm94LmVyYXNlKCkNCiAgICArDQogICAgKyAgICBfZHJhd19mcmFtZShl
ZGl0X2JveCwgIkp1bXAgdG8gc3ltYm9sL2Nob2ljZS9tZW51L2NvbW1lbnQiKQ0KICAgICsNCiAg
ICArICAgICMgRHJhdyBhcnJvd3MgcG9pbnRpbmcgdXAgaWYgdGhlIHN5bWJvbCBsaXN0IGlzIHNj
cm9sbGVkIGRvd24NCiAgICArICAgIGlmIHNjcm9sbCA+IDA6DQogICAgKyAgICAgICAgIyBUT0RP
OiBCaXQgdWdseSB0aGF0IF9zdHlsZVsiZnJhbWUiXSBpcyByZXBlYXRlZCBoZXJlDQogICAgKyAg
ICAgICAgX3NhZmVfaGxpbmUoZWRpdF9ib3gsIDIsIDQsIGN1cnNlcy5BQ1NfVUFSUk9XLCBfTl9T
Q1JPTExfQVJST1dTLA0KICAgICsgICAgICAgICAgICAgICAgICAgIF9zdHlsZVsiZnJhbWUiXSkN
CiAgICArDQogICAgKyAgICB2aXNpYmxlX3MgPSBzW2hzY3JvbGw6aHNjcm9sbCArIGVkaXRfd2lk
dGhdDQogICAgKyAgICBfc2FmZV9hZGRzdHIoZWRpdF9ib3gsIDEsIDEsIHZpc2libGVfcykNCiAg
ICArDQogICAgKyAgICBfc2FmZV9tb3ZlKGVkaXRfYm94LCAxLCAxICsgc19pIC0gaHNjcm9sbCkN
CiAgICArDQogICAgKyAgICBlZGl0X2JveC5ub3V0cmVmcmVzaCgpDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9pbmZvX2RpYWxvZyhub2RlLCBmcm9tX2p1bXBfdG9fZGlhbG9nKToNCiAgICArICAg
ICMgU2hvd3MgYSBmdWxsc2NyZWVuIHdpbmRvdyB3aXRoIGluZm9ybWF0aW9uIGFib3V0ICdub2Rl
Jy4NCiAgICArICAgICMNCiAgICArICAgICMgSWYgJ2Zyb21fanVtcF90b19kaWFsb2cnIGlzIFRy
dWUsIHRoZSBpbmZvcm1hdGlvbiBkaWFsb2cgd2FzIG9wZW5lZCBmcm9tDQogICAgKyAgICAjIHdp
dGhpbiB0aGUganVtcC10by1kaWFsb2cuIEluIHRoaXMgY2FzZSwgd2UgbWFrZSAnLycgZnJvbSB3
aXRoaW4gdGhlDQogICAgKyAgICAjIGluZm9ybWF0aW9uIGRpYWxvZyBqdXN0IHJldHVybiwgdG8g
YXZvaWQgYSBjb25mdXNpbmcgcmVjdXJzaXZlIGludm9jYXRpb24NCiAgICArICAgICMgb2YgdGhl
IGp1bXAtdG8tZGlhbG9nLg0KICAgICsNCiAgICArICAgICMgVG9wIHJvdywgd2l0aCB0aXRsZSBh
bmQgYXJyb3dzIHBvaW50IHVwDQogICAgKyAgICB0b3BfbGluZV93aW4gPSBfc3R5bGVkX3dpbigi
c2VwYXJhdG9yIikNCiAgICArDQogICAgKyAgICAjIFRleHQgZGlzcGxheQ0KICAgICsgICAgdGV4
dF93aW4gPSBfc3R5bGVkX3dpbigidGV4dCIpDQogICAgKyAgICB0ZXh0X3dpbi5rZXlwYWQoVHJ1
ZSkNCiAgICArDQogICAgKyAgICAjIEJvdHRvbSBzZXBhcmF0b3IsIHdpdGggYXJyb3dzIHBvaW50
aW5nIGRvd24NCiAgICArICAgIGJvdF9zZXBfd2luID0gX3N0eWxlZF93aW4oInNlcGFyYXRvciIp
DQogICAgKw0KICAgICsgICAgIyBIZWxwIHdpbmRvdyB3aXRoIGtleXMgYXQgdGhlIGJvdHRvbQ0K
ICAgICsgICAgaGVscF93aW4gPSBfc3R5bGVkX3dpbigiaGVscCIpDQogICAgKw0KICAgICsgICAg
IyBHaXZlIHdpbmRvd3MgdGhlaXIgaW5pdGlhbCBzaXplDQogICAgKyAgICBfcmVzaXplX2luZm9f
ZGlhbG9nKHRvcF9saW5lX3dpbiwgdGV4dF93aW4sIGJvdF9zZXBfd2luLCBoZWxwX3dpbikNCiAg
ICArDQogICAgKw0KICAgICsgICAgIyBHZXQgbGluZXMgb2YgaGVscCB0ZXh0DQogICAgKyAgICBs
aW5lcyA9IF9pbmZvX3N0cihub2RlKS5zcGxpdCgiXG4iKQ0KICAgICsNCiAgICArICAgICMgSW5k
ZXggb2YgZmlyc3Qgcm93IGluICdsaW5lcycgdG8gc2hvdw0KICAgICsgICAgc2Nyb2xsID0gMA0K
ICAgICsNCiAgICArICAgIHdoaWxlIFRydWU6DQogICAgKyAgICAgICAgX2RyYXdfaW5mb19kaWFs
b2cobm9kZSwgbGluZXMsIHNjcm9sbCwgdG9wX2xpbmVfd2luLCB0ZXh0X3dpbiwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICAgICBib3Rfc2VwX3dpbiwgaGVscF93aW4pDQogICAgKyAgICAg
ICAgY3Vyc2VzLmRvdXBkYXRlKCkNCiAgICArDQogICAgKw0KICAgICsgICAgICAgIGMgPSBfZ2V0
Y2hfY29tcGF0KHRleHRfd2luKQ0KICAgICsNCiAgICArICAgICAgICBpZiBjID09IGN1cnNlcy5L
RVlfUkVTSVpFOg0KICAgICsgICAgICAgICAgICBfcmVzaXplX2luZm9fZGlhbG9nKHRvcF9saW5l
X3dpbiwgdGV4dF93aW4sIGJvdF9zZXBfd2luLCBoZWxwX3dpbikNCiAgICArDQogICAgKyAgICAg
ICAgZWxpZiBjIGluIChjdXJzZXMuS0VZX0RPV04sICJqIiwgIkoiKToNCiAgICArICAgICAgICAg
ICAgaWYgc2Nyb2xsIDwgX21heF9zY3JvbGwobGluZXMsIHRleHRfd2luKToNCiAgICArICAgICAg
ICAgICAgICAgIHNjcm9sbCArPSAxDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vy
c2VzLktFWV9OUEFHRSwgIlx4MDQiKTogICMgUGFnZSBEb3duL0N0cmwtRA0KICAgICsgICAgICAg
ICAgICBzY3JvbGwgPSBtaW4oc2Nyb2xsICsgX1BHX0pVTVAsIF9tYXhfc2Nyb2xsKGxpbmVzLCB0
ZXh0X3dpbikpDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9QUEFH
RSwgIlx4MTUiKTogICMgUGFnZSBVcC9DdHJsLVUNCiAgICArICAgICAgICAgICAgc2Nyb2xsID0g
bWF4KHNjcm9sbCAtIF9QR19KVU1QLCAwKQ0KICAgICsNCiAgICArICAgICAgICBlbGlmIGMgaW4g
KGN1cnNlcy5LRVlfRU5ELCAiRyIpOg0KICAgICsgICAgICAgICAgICBzY3JvbGwgPSBfbWF4X3Nj
cm9sbChsaW5lcywgdGV4dF93aW4pDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vy
c2VzLktFWV9IT01FLCAiZyIpOg0KICAgICsgICAgICAgICAgICBzY3JvbGwgPSAwDQogICAgKw0K
ICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9VUCwgImsiLCAiSyIpOg0KICAgICsg
ICAgICAgICAgICBpZiBzY3JvbGwgPiAwOg0KICAgICsgICAgICAgICAgICAgICAgc2Nyb2xsIC09
IDENCiAgICArDQogICAgKyAgICAgICAgZWxpZiBjID09ICIvIjoNCiAgICArICAgICAgICAgICAg
IyBTdXBwb3J0IHN0YXJ0aW5nIGEgc2VhcmNoIGZyb20gd2l0aGluIHRoZSBpbmZvcm1hdGlvbiBk
aWFsb2cNCiAgICArDQogICAgKyAgICAgICAgICAgIGlmIGZyb21fanVtcF90b19kaWFsb2c6DQog
ICAgKyAgICAgICAgICAgICAgICAjIEF2b2lkIHJlY3Vyc2lvbg0KICAgICsgICAgICAgICAgICAg
ICAgcmV0dXJuDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBfanVtcF90b19kaWFsb2coKToN
CiAgICArICAgICAgICAgICAgICAgICMgSnVtcGVkIHRvIGEgc3ltYm9sLiBDYW5jZWwgdGhlIGlu
Zm9ybWF0aW9uIGRpYWxvZy4NCiAgICArICAgICAgICAgICAgICAgIHJldHVybg0KICAgICsNCiAg
ICArICAgICAgICAgICAgIyBTdGF5IGluIHRoZSBpbmZvcm1hdGlvbiBkaWFsb2cgaWYgdGhlIGp1
bXAtdG8gZGlhbG9nIHdhcw0KICAgICsgICAgICAgICAgICAjIGNhbmNlbGVkLiBSZXNpemUgaXQg
aW4gY2FzZSB0aGUgdGVybWluYWwgd2FzIHJlc2l6ZWQgd2hpbGUgdGhlDQogICAgKyAgICAgICAg
ICAgICMgZnVsbHNjcmVlbiBqdW1wLXRvIGRpYWxvZyB3YXMgb3Blbi4NCiAgICArICAgICAgICAg
ICAgX3Jlc2l6ZV9pbmZvX2RpYWxvZyh0b3BfbGluZV93aW4sIHRleHRfd2luLCBib3Rfc2VwX3dp
biwgaGVscF93aW4pDQogICAgKw0KICAgICsgICAgICAgIGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9M
RUZULCBjdXJzZXMuS0VZX0JBQ0tTUEFDRSwgX0VSQVNFX0NIQVIsDQogICAgKyAgICAgICAgICAg
ICAgICAgICAiXHgxQiIsICAjIFx4MUIgPSBFU0MNCiAgICArICAgICAgICAgICAgICAgICAgICJx
IiwgIlEiLCAiaCIsICJIIik6DQogICAgKw0KICAgICsgICAgICAgICAgICByZXR1cm4NCiAgICAr
DQogICAgKw0KICAgICtkZWYgX3Jlc2l6ZV9pbmZvX2RpYWxvZyh0b3BfbGluZV93aW4sIHRleHRf
d2luLCBib3Rfc2VwX3dpbiwgaGVscF93aW4pOg0KICAgICsgICAgIyBSZXNpemVzIHRoZSBpbmZv
IGRpYWxvZyB0byBmaWxsIHRoZSB0ZXJtaW5hbA0KICAgICsNCiAgICArICAgIHNjcmVlbl9oZWln
aHQsIHNjcmVlbl93aWR0aCA9IF9zdGRzY3IuZ2V0bWF4eXgoKQ0KICAgICsNCiAgICArICAgIHRv
cF9saW5lX3dpbi5yZXNpemUoMSwgc2NyZWVuX3dpZHRoKQ0KICAgICsgICAgYm90X3NlcF93aW4u
cmVzaXplKDEsIHNjcmVlbl93aWR0aCkNCiAgICArDQogICAgKyAgICBoZWxwX3dpbl9oZWlnaHQg
PSBsZW4oX0lORk9fSEVMUF9MSU5FUykNCiAgICArICAgIHRleHRfd2luX2hlaWdodCA9IHNjcmVl
bl9oZWlnaHQgLSBoZWxwX3dpbl9oZWlnaHQgLSAyDQogICAgKw0KICAgICsgICAgaWYgdGV4dF93
aW5faGVpZ2h0ID49IDE6DQogICAgKyAgICAgICAgdGV4dF93aW4ucmVzaXplKHRleHRfd2luX2hl
aWdodCwgc2NyZWVuX3dpZHRoKQ0KICAgICsgICAgICAgIGhlbHBfd2luLnJlc2l6ZShoZWxwX3dp
bl9oZWlnaHQsIHNjcmVlbl93aWR0aCkNCiAgICArDQogICAgKyAgICAgICAgdGV4dF93aW4ubXZ3
aW4oMSwgMCkNCiAgICArICAgICAgICBib3Rfc2VwX3dpbi5tdndpbigxICsgdGV4dF93aW5faGVp
Z2h0LCAwKQ0KICAgICsgICAgICAgIGhlbHBfd2luLm12d2luKDEgKyB0ZXh0X3dpbl9oZWlnaHQg
KyAxLCAwKQ0KICAgICsgICAgZWxzZToNCiAgICArICAgICAgICAjIERlZ2VuZXJhdGUgY2FzZS4g
R2l2ZSB1cCBvbiBuaWNlIHJlbmRlcmluZyBhbmQganVzdCBwcmV2ZW50IGVycm9ycy4NCiAgICAr
DQogICAgKyAgICAgICAgdGV4dF93aW4ucmVzaXplKDEsIHNjcmVlbl93aWR0aCkNCiAgICArICAg
ICAgICBoZWxwX3dpbi5yZXNpemUoMSwgc2NyZWVuX3dpZHRoKQ0KICAgICsNCiAgICArICAgICAg
ICBmb3Igd2luIGluIHRleHRfd2luLCBib3Rfc2VwX3dpbiwgaGVscF93aW46DQogICAgKyAgICAg
ICAgICAgIHdpbi5tdndpbigwLCAwKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfZHJhd19pbmZv
X2RpYWxvZyhub2RlLCBsaW5lcywgc2Nyb2xsLCB0b3BfbGluZV93aW4sIHRleHRfd2luLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgYm90X3NlcF93aW4sIGhlbHBfd2luKToNCiAgICArDQog
ICAgKyAgICB0ZXh0X3dpbl9oZWlnaHQsIHRleHRfd2luX3dpZHRoID0gdGV4dF93aW4uZ2V0bWF4
eXgoKQ0KICAgICsNCiAgICArDQogICAgKyAgICAjIE5vdGU6IFRoZSB0b3Agcm93IGlzIGRlbGli
ZXJhdGVseSB1cGRhdGVkIGxhc3QuIFNlZSBfZHJhd19tYWluKCkuDQogICAgKw0KICAgICsgICAg
Iw0KICAgICsgICAgIyBVcGRhdGUgdGV4dCBkaXNwbGF5DQogICAgKyAgICAjDQogICAgKw0KICAg
ICsgICAgdGV4dF93aW4uZXJhc2UoKQ0KICAgICsNCiAgICArICAgIGZvciBpLCBsaW5lIGluIGVu
dW1lcmF0ZShsaW5lc1tzY3JvbGw6c2Nyb2xsICsgdGV4dF93aW5faGVpZ2h0XSk6DQogICAgKyAg
ICAgICAgX3NhZmVfYWRkc3RyKHRleHRfd2luLCBpLCAwLCBsaW5lKQ0KICAgICsNCiAgICArICAg
IHRleHRfd2luLm5vdXRyZWZyZXNoKCkNCiAgICArDQogICAgKw0KICAgICsgICAgIw0KICAgICsg
ICAgIyBVcGRhdGUgYm90dG9tIHNlcGFyYXRvciBsaW5lDQogICAgKyAgICAjDQogICAgKw0KICAg
ICsgICAgYm90X3NlcF93aW4uZXJhc2UoKQ0KICAgICsNCiAgICArICAgICMgRHJhdyBhcnJvd3Mg
cG9pbnRpbmcgZG93biBpZiB0aGUgc3ltYm9sIHdpbmRvdyBpcyBzY3JvbGxlZCB1cA0KICAgICsg
ICAgaWYgc2Nyb2xsIDwgX21heF9zY3JvbGwobGluZXMsIHRleHRfd2luKToNCiAgICArICAgICAg
ICBfc2FmZV9obGluZShib3Rfc2VwX3dpbiwgMCwgNCwgY3Vyc2VzLkFDU19EQVJST1csIF9OX1ND
Uk9MTF9BUlJPV1MpDQogICAgKw0KICAgICsgICAgYm90X3NlcF93aW4ubm91dHJlZnJlc2goKQ0K
ICAgICsNCiAgICArDQogICAgKyAgICAjDQogICAgKyAgICAjIFVwZGF0ZSBoZWxwIHdpbmRvdyBh
dCBib3R0b20NCiAgICArICAgICMNCiAgICArDQogICAgKyAgICBoZWxwX3dpbi5lcmFzZSgpDQog
ICAgKw0KICAgICsgICAgZm9yIGksIGxpbmUgaW4gZW51bWVyYXRlKF9JTkZPX0hFTFBfTElORVMp
Og0KICAgICsgICAgICAgIF9zYWZlX2FkZHN0cihoZWxwX3dpbiwgaSwgMCwgbGluZSkNCiAgICAr
DQogICAgKyAgICBoZWxwX3dpbi5ub3V0cmVmcmVzaCgpDQogICAgKw0KICAgICsNCiAgICArICAg
ICMNCiAgICArICAgICMgVXBkYXRlIHRvcCByb3cNCiAgICArICAgICMNCiAgICArDQogICAgKyAg
ICB0b3BfbGluZV93aW4uZXJhc2UoKQ0KICAgICsNCiAgICArICAgICMgRHJhdyBhcnJvd3MgcG9p
bnRpbmcgdXAgaWYgdGhlIGluZm9ybWF0aW9uIHdpbmRvdyBpcyBzY3JvbGxlZCBkb3duLiBEcmF3
DQogICAgKyAgICAjIHRoZW0gYmVmb3JlIGRyYXdpbmcgdGhlIHRpdGxlLCBzbyB0aGUgdGl0bGUg
ZW5kcyB1cCBvbiB0b3AgZm9yIHNtYWxsDQogICAgKyAgICAjIHdpbmRvd3MuDQogICAgKyAgICBp
ZiBzY3JvbGwgPiAwOg0KICAgICsgICAgICAgIF9zYWZlX2hsaW5lKHRvcF9saW5lX3dpbiwgMCwg
NCwgY3Vyc2VzLkFDU19VQVJST1csIF9OX1NDUk9MTF9BUlJPV1MpDQogICAgKw0KICAgICsgICAg
dGl0bGUgPSAoIlN5bWJvbCIgaWYgaXNpbnN0YW5jZShub2RlLml0ZW0sIFN5bWJvbCkgZWxzZQ0K
ICAgICsgICAgICAgICAgICAgIkNob2ljZSIgaWYgaXNpbnN0YW5jZShub2RlLml0ZW0sIENob2lj
ZSkgZWxzZQ0KICAgICsgICAgICAgICAgICAgIk1lbnUiICAgaWYgbm9kZS5pdGVtID09IE1FTlUg
ZWxzZQ0KICAgICsgICAgICAgICAgICAgIkNvbW1lbnQiKSArICIgaW5mb3JtYXRpb24iDQogICAg
KyAgICBfc2FmZV9hZGRzdHIodG9wX2xpbmVfd2luLCAwLCBtYXgoKHRleHRfd2luX3dpZHRoIC0g
bGVuKHRpdGxlKSkvLzIsIDApLA0KICAgICsgICAgICAgICAgICAgICAgIHRpdGxlKQ0KICAgICsN
CiAgICArICAgIHRvcF9saW5lX3dpbi5ub3V0cmVmcmVzaCgpDQogICAgKw0KICAgICsNCiAgICAr
ZGVmIF9pbmZvX3N0cihub2RlKToNCiAgICArICAgICMgUmV0dXJucyBpbmZvcm1hdGlvbiBhYm91
dCB0aGUgbWVudSBub2RlICdub2RlJyBhcyBhIHN0cmluZy4NCiAgICArICAgICMNCiAgICArICAg
ICMgVGhlIGhlbHBlciBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgbmV3bGlu
ZXMuIFRoaXMgYWxsb3dzDQogICAgKyAgICAjIHRoZW0gdG8gcmV0dXJuICIiIGlmIHRoZXkgZG9u
J3Qgd2FudCB0byBhZGQgYW55IG91dHB1dC4NCiAgICArDQogICAgKyAgICBpZiBpc2luc3RhbmNl
KG5vZGUuaXRlbSwgU3ltYm9sKToNCiAgICArICAgICAgICBzeW0gPSBub2RlLml0ZW0NCiAgICAr
DQogICAgKyAgICAgICAgcmV0dXJuICgNCiAgICArICAgICAgICAgICAgX25hbWVfaW5mbyhzeW0p
ICsNCiAgICArICAgICAgICAgICAgX3Byb21wdF9pbmZvKHN5bSkgKw0KICAgICsgICAgICAgICAg
ICAiVHlwZToge31cbiIuZm9ybWF0KFRZUEVfVE9fU1RSW3N5bS50eXBlXSkgKw0KICAgICsgICAg
ICAgICAgICBfdmFsdWVfaW5mbyhzeW0pICsNCiAgICArICAgICAgICAgICAgX2hlbHBfaW5mbyhz
eW0pICsNCiAgICArICAgICAgICAgICAgX2RpcmVjdF9kZXBfaW5mbyhzeW0pICsNCiAgICArICAg
ICAgICAgICAgX2RlZmF1bHRzX2luZm8oc3ltKSArDQogICAgKyAgICAgICAgICAgIF9zZWxlY3Rf
aW1wbHlfaW5mbyhzeW0pICsNCiAgICArICAgICAgICAgICAgX2tjb25maWdfZGVmX2luZm8oc3lt
KQ0KICAgICsgICAgICAgICkNCiAgICArDQogICAgKyAgICBpZiBpc2luc3RhbmNlKG5vZGUuaXRl
bSwgQ2hvaWNlKToNCiAgICArICAgICAgICBjaG9pY2UgPSBub2RlLml0ZW0NCiAgICArDQogICAg
KyAgICAgICAgcmV0dXJuICgNCiAgICArICAgICAgICAgICAgX25hbWVfaW5mbyhjaG9pY2UpICsN
CiAgICArICAgICAgICAgICAgX3Byb21wdF9pbmZvKGNob2ljZSkgKw0KICAgICsgICAgICAgICAg
ICAiVHlwZToge31cbiIuZm9ybWF0KFRZUEVfVE9fU1RSW2Nob2ljZS50eXBlXSkgKw0KICAgICsg
ICAgICAgICAgICAnTW9kZToge31cbicuZm9ybWF0KGNob2ljZS5zdHJfdmFsdWUpICsNCiAgICAr
ICAgICAgICAgICAgX2hlbHBfaW5mbyhjaG9pY2UpICsNCiAgICArICAgICAgICAgICAgX2Nob2lj
ZV9zeW1zX2luZm8oY2hvaWNlKSArDQogICAgKyAgICAgICAgICAgIF9kaXJlY3RfZGVwX2luZm8o
Y2hvaWNlKSArDQogICAgKyAgICAgICAgICAgIF9kZWZhdWx0c19pbmZvKGNob2ljZSkgKw0KICAg
ICsgICAgICAgICAgICBfa2NvbmZpZ19kZWZfaW5mbyhjaG9pY2UpDQogICAgKyAgICAgICAgKQ0K
ICAgICsNCiAgICArICAgICMgbm9kZS5pdGVtIGluIChNRU5VLCBDT01NRU5UKQ0KICAgICsgICAg
cmV0dXJuIF9rY29uZmlnX2RlZl9pbmZvKG5vZGUpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9u
YW1lX2luZm8oc2MpOg0KICAgICsgICAgIyBSZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIG5hbWUg
b2YgdGhlIHN5bWJvbC9jaG9pY2UuIE5hbWVzIGFyZSBvcHRpb25hbA0KICAgICsgICAgIyBmb3Ig
Y2hvaWNlcy4NCiAgICArDQogICAgKyAgICByZXR1cm4gIk5hbWU6IHt9XG4iLmZvcm1hdChzYy5u
YW1lKSBpZiBzYy5uYW1lIGVsc2UgIiINCiAgICArDQogICAgKw0KICAgICtkZWYgX3Byb21wdF9p
bmZvKHNjKToNCiAgICArICAgICMgUmV0dXJucyBhIHN0cmluZyBsaXN0aW5nIHRoZSBwcm9tcHRz
IG9mICdzYycgKFN5bWJvbCBvciBDaG9pY2UpDQogICAgKw0KICAgICsgICAgcyA9ICIiDQogICAg
Kw0KICAgICsgICAgZm9yIG5vZGUgaW4gc2Mubm9kZXM6DQogICAgKyAgICAgICAgaWYgbm9kZS5w
cm9tcHQ6DQogICAgKyAgICAgICAgICAgIHMgKz0gIlByb21wdDoge31cbiIuZm9ybWF0KG5vZGUu
cHJvbXB0WzBdKQ0KICAgICsNCiAgICArICAgIHJldHVybiBzDQogICAgKw0KICAgICsNCiAgICAr
ZGVmIF92YWx1ZV9pbmZvKHN5bSk6DQogICAgKyAgICAjIFJldHVybnMgYSBzdHJpbmcgc2hvd2lu
ZyAnc3ltJ3MgdmFsdWUNCiAgICArDQogICAgKyAgICAjIE9ubHkgcHV0IHF1b3RlcyBhcm91bmQg
dGhlIHZhbHVlIGZvciBzdHJpbmcgc3ltYm9scw0KICAgICsgICAgcmV0dXJuICJWYWx1ZToge31c
biIuZm9ybWF0KA0KICAgICsgICAgICAgICcie30iJy5mb3JtYXQoc3ltLnN0cl92YWx1ZSkNCiAg
ICArICAgICAgICBpZiBzeW0ub3JpZ190eXBlID09IFNUUklORw0KICAgICsgICAgICAgIGVsc2Ug
c3ltLnN0cl92YWx1ZSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX2Nob2ljZV9zeW1zX2luZm8o
Y2hvaWNlKToNCiAgICArICAgICMgUmV0dXJucyBhIHN0cmluZyBsaXN0aW5nIHRoZSBjaG9pY2Ug
c3ltYm9scyBpbiAnY2hvaWNlJy4gQWRkcw0KICAgICsgICAgIyAiKHNlbGVjdGVkKSIgbmV4dCB0
byB0aGUgc2VsZWN0ZWQgb25lLg0KICAgICsNCiAgICArICAgIHMgPSAiQ2hvaWNlIHN5bWJvbHM6
XG4iDQogICAgKw0KICAgICsgICAgZm9yIHN5bSBpbiBjaG9pY2Uuc3ltczoNCiAgICArICAgICAg
ICBzICs9ICIgIC0gIiArIHN5bS5uYW1lDQogICAgKyAgICAgICAgaWYgc3ltIGlzIGNob2ljZS5z
ZWxlY3Rpb246DQogICAgKyAgICAgICAgICAgIHMgKz0gIiAoc2VsZWN0ZWQpIg0KICAgICsgICAg
ICAgIHMgKz0gIlxuIg0KICAgICsNCiAgICArICAgIHJldHVybiBzICsgIlxuIg0KICAgICsNCiAg
ICArDQogICAgK2RlZiBfaGVscF9pbmZvKHNjKToNCiAgICArICAgICMgUmV0dXJucyBhIHN0cmlu
ZyB3aXRoIHRoZSBoZWxwIHRleHQocykgb2YgJ3NjJyAoU3ltYm9sIG9yIENob2ljZSkuDQogICAg
KyAgICAjIFN5bWJvbHMgYW5kIGNob2ljZXMgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMg
Y2FuIGhhdmUgbXVsdGlwbGUgaGVscA0KICAgICsgICAgIyB0ZXh0cy4NCiAgICArDQogICAgKyAg
ICBzID0gIlxuIg0KICAgICsNCiAgICArICAgIGZvciBub2RlIGluIHNjLm5vZGVzOg0KICAgICsg
ICAgICAgIGlmIG5vZGUuaGVscCBpcyBub3QgTm9uZToNCiAgICArICAgICAgICAgICAgcyArPSAi
SGVscDpcblxue31cblxuIi5mb3JtYXQoX2luZGVudChub2RlLmhlbHAsIDIpKQ0KICAgICsNCiAg
ICArICAgIHJldHVybiBzDQogICAgKw0KICAgICsNCiAgICArZGVmIF9kaXJlY3RfZGVwX2luZm8o
c2MpOg0KICAgICsgICAgIyBSZXR1cm5zIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGRpcmVjdCBk
ZXBlbmRlbmNpZXMgb2YgJ3NjJyAoU3ltYm9sIG9yDQogICAgKyAgICAjIENob2ljZSkuIFRoZSBk
aXJlY3QgZGVwZW5kZW5jaWVzIGFyZSB0aGUgT1Igb2YgdGhlIGRlcGVuZGVuY2llcyBmcm9tIGVh
Y2gNCiAgICArICAgICMgZGVmaW5pdGlvbiBsb2NhdGlvbi4gVGhlIGRlcGVuZGVuY2llcyBhdCBl
YWNoIGRlZmluaXRpb24gbG9jYXRpb24gY29tZQ0KICAgICsgICAgIyBmcm9tICdkZXBlbmRzIG9u
JyBhbmQgZGVwZW5kZW5jaWVzIGluaGVyaXRlZCBmcm9tIHBhcmVudCBpdGVtcy4NCiAgICArDQog
ICAgKyAgICByZXR1cm4gIiIgaWYgc2MuZGlyZWN0X2RlcCBpcyBfa2NvbmYueSBlbHNlIFwNCiAg
ICArICAgICAgICAnRGlyZWN0IGRlcGVuZGVuY2llcyAoPXt9KTpcbnt9XG4nIFwNCiAgICArICAg
ICAgICAuZm9ybWF0KFRSSV9UT19TVFJbZXhwcl92YWx1ZShzYy5kaXJlY3RfZGVwKV0sDQogICAg
KyAgICAgICAgICAgICAgICBfc3BsaXRfZXhwcl9pbmZvKHNjLmRpcmVjdF9kZXAsIDIpKQ0KICAg
ICsNCiAgICArDQogICAgK2RlZiBfZGVmYXVsdHNfaW5mbyhzYyk6DQogICAgKyAgICAjIFJldHVy
bnMgYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgZGVmYXVsdHMgb2YgJ3NjJyAoU3ltYm9sIG9yIENo
b2ljZSkNCiAgICArDQogICAgKyAgICBpZiBub3Qgc2MuZGVmYXVsdHM6DQogICAgKyAgICAgICAg
cmV0dXJuICIiDQogICAgKw0KICAgICsgICAgcyA9ICJEZWZhdWx0Ig0KICAgICsgICAgaWYgbGVu
KHNjLmRlZmF1bHRzKSA+IDE6DQogICAgKyAgICAgICAgcyArPSAicyINCiAgICArICAgIHMgKz0g
IjpcbiINCiAgICArDQogICAgKyAgICBmb3IgdmFsLCBjb25kIGluIHNjLm9yaWdfZGVmYXVsdHM6
DQogICAgKyAgICAgICAgcyArPSAiICAtICINCiAgICArICAgICAgICBpZiBpc2luc3RhbmNlKHNj
LCBTeW1ib2wpOg0KICAgICsgICAgICAgICAgICBzICs9IF9leHByX3N0cih2YWwpDQogICAgKw0K
ICAgICsgICAgICAgICAgICAjIFNraXAgdGhlIHRyaXN0YXRlIHZhbHVlIGhpbnQgaWYgdGhlIGV4
cHJlc3Npb24gaXMganVzdCBhIHNpbmdsZQ0KICAgICsgICAgICAgICAgICAjIHN5bWJvbC4gX2V4
cHJfc3RyKCkgYWxyZWFkeSBzaG93cyBpdHMgdmFsdWUgYXMgYSBzdHJpbmcuDQogICAgKyAgICAg
ICAgICAgICMNCiAgICArICAgICAgICAgICAgIyBUaGlzIGFsc28gYXZvaWRzIHNob3dpbmcgdGhl
IHRyaXN0YXRlIHZhbHVlIGZvciBzdHJpbmcvaW50L2hleA0KICAgICsgICAgICAgICAgICAjIGRl
ZmF1bHRzLCB3aGljaCB3b3VsZG4ndCBtYWtlIGFueSBzZW5zZS4NCiAgICArICAgICAgICAgICAg
aWYgaXNpbnN0YW5jZSh2YWwsIHR1cGxlKToNCiAgICArICAgICAgICAgICAgICAgIHMgKz0gJyAg
KD17fSknLmZvcm1hdChUUklfVE9fU1RSW2V4cHJfdmFsdWUodmFsKV0pDQogICAgKyAgICAgICAg
ZWxzZToNCiAgICArICAgICAgICAgICAgIyBEb24ndCBwcmludCB0aGUgdmFsdWUgbmV4dCB0byB0
aGUgc3ltYm9sIG5hbWUgZm9yIGNob2ljZQ0KICAgICsgICAgICAgICAgICAjIGRlZmF1bHRzLCBh
cyBpdCBsb29rcyBhIGJpdCBjb25mdXNpbmcNCiAgICArICAgICAgICAgICAgcyArPSB2YWwubmFt
ZQ0KICAgICsgICAgICAgIHMgKz0gIlxuIg0KICAgICsNCiAgICArICAgICAgICBpZiBjb25kIGlz
IG5vdCBfa2NvbmYueToNCiAgICArICAgICAgICAgICAgcyArPSAiICAgIENvbmRpdGlvbiAoPXt9
KTpcbnt9IiBcDQogICAgKyAgICAgICAgICAgICAgICAgLmZvcm1hdChUUklfVE9fU1RSW2V4cHJf
dmFsdWUoY29uZCldLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgX3NwbGl0X2V4cHJf
aW5mbyhjb25kLCA0KSkNCiAgICArDQogICAgKyAgICByZXR1cm4gcyArICJcbiINCiAgICArDQog
ICAgKw0KICAgICtkZWYgX3NwbGl0X2V4cHJfaW5mbyhleHByLCBpbmRlbnQpOg0KICAgICsgICAg
IyBSZXR1cm5zIGEgc3RyaW5nIHdpdGggJ2V4cHInIHNwbGl0IGludG8gaXRzIHRvcC1sZXZlbCAm
JiBvciB8fCBvcGVyYW5kcywNCiAgICArICAgICMgd2l0aCBvbmUgb3BlcmFuZCBwZXIgbGluZSwg
dG9nZXRoZXIgd2l0aCB0aGUgb3BlcmFuZCdzIHZhbHVlLiBUaGlzIGlzDQogICAgKyAgICAjIHVz
dWFsbHkgZW5vdWdoIHRvIGdldCBzb21ldGhpbmcgcmVhZGFibGUgZm9yIGxvbmcgZXhwcmVzc2lv
bnMuIEEgZmFuY2llcg0KICAgICsgICAgIyByZWN1cnNpdmUgdGhpbmd5IHdvdWxkIGJlIHBvc3Np
YmxlIHRvby4NCiAgICArICAgICMNCiAgICArICAgICMgaW5kZW50Og0KICAgICsgICAgIyAgIE51
bWJlciBvZiBsZWFkaW5nIHNwYWNlcyB0byBhZGQgYmVmb3JlIHRoZSBzcGxpdCBleHByZXNzaW9u
Lg0KICAgICsNCiAgICArICAgIGlmIGxlbihzcGxpdF9leHByKGV4cHIsIEFORCkpID4gMToNCiAg
ICArICAgICAgICBzcGxpdF9vcCA9IEFORA0KICAgICsgICAgICAgIG9wX3N0ciA9ICImJiINCiAg
ICArICAgIGVsc2U6DQogICAgKyAgICAgICAgc3BsaXRfb3AgPSBPUg0KICAgICsgICAgICAgIG9w
X3N0ciA9ICJ8fCINCiAgICArDQogICAgKyAgICBzID0gIiINCiAgICArICAgIGZvciBpLCB0ZXJt
IGluIGVudW1lcmF0ZShzcGxpdF9leHByKGV4cHIsIHNwbGl0X29wKSk6DQogICAgKyAgICAgICAg
cyArPSAie317fSB7fSIuZm9ybWF0KGluZGVudCoiICIsDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICIgICIgaWYgaSA9PSAwIGVsc2Ugb3Bfc3RyLA0KICAgICsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfZXhwcl9zdHIodGVybSkpDQogICAgKw0KICAgICsgICAgICAg
ICMgRG9uJ3QgYm90aGVyIHNob3dpbmcgdGhlIHZhbHVlIGhpbnQgaWYgdGhlIGV4cHJlc3Npb24g
aXMganVzdCBhDQogICAgKyAgICAgICAgIyBzaW5nbGUgc3ltYm9sLiBfZXhwcl9zdHIoKSBhbHJl
YWR5IHNob3dzIGl0cyB2YWx1ZS4NCiAgICArICAgICAgICBpZiBpc2luc3RhbmNlKHRlcm0sIHR1
cGxlKToNCiAgICArICAgICAgICAgICAgcyArPSAiICAoPXt9KSIuZm9ybWF0KFRSSV9UT19TVFJb
ZXhwcl92YWx1ZSh0ZXJtKV0pDQogICAgKw0KICAgICsgICAgICAgIHMgKz0gIlxuIg0KICAgICsN
CiAgICArICAgIHJldHVybiBzDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zZWxlY3RfaW1wbHlf
aW5mbyhzeW0pOg0KICAgICsgICAgIyBSZXR1cm5zIGEgc3RyaW5nIHdpdGggaW5mb3JtYXRpb24g
YWJvdXQgd2hpY2ggc3ltYm9scyAnc2VsZWN0JyBvciAnaW1wbHknDQogICAgKyAgICAjICdzeW0n
LiBUaGUgc2VsZWN0aW5nL2ltcGx5aW5nIHN5bWJvbHMgYXJlIGdyb3VwZWQgYWNjb3JkaW5nIHRv
IHdoaWNoDQogICAgKyAgICAjIHZhbHVlIHRoZXkgc2VsZWN0L2ltcGx5ICdzeW0nIHRvIChuL20v
eSkuDQogICAgKw0KICAgICsgICAgZGVmIHNpcyhleHByLCB2YWwsIHRpdGxlKToNCiAgICArICAg
ICAgICAjIHNpcyA9IHNlbGVjdHMvaW1wbGllcw0KICAgICsgICAgICAgIHNpcyA9IFtzaSBmb3Ig
c2kgaW4gc3BsaXRfZXhwcihleHByLCBPUikgaWYgZXhwcl92YWx1ZShzaSkgPT0gdmFsXQ0KICAg
ICsgICAgICAgIGlmIG5vdCBzaXM6DQogICAgKyAgICAgICAgICAgIHJldHVybiAiIg0KICAgICsN
CiAgICArICAgICAgICByZXMgPSB0aXRsZQ0KICAgICsgICAgICAgIGZvciBzaSBpbiBzaXM6DQog
ICAgKyAgICAgICAgICAgIHJlcyArPSAiICAtIHt9XG4iLmZvcm1hdChzcGxpdF9leHByKHNpLCBB
TkQpWzBdLm5hbWUpDQogICAgKyAgICAgICAgcmV0dXJuIHJlcyArICJcbiINCiAgICArDQogICAg
KyAgICBzID0gIiINCiAgICArDQogICAgKyAgICBpZiBzeW0ucmV2X2RlcCBpcyBub3QgX2tjb25m
Lm46DQogICAgKyAgICAgICAgcyArPSBzaXMoc3ltLnJldl9kZXAsIDIsDQogICAgKyAgICAgICAg
ICAgICAgICAgIlN5bWJvbHMgY3VycmVudGx5IHktc2VsZWN0aW5nIHRoaXMgc3ltYm9sOlxuIikN
CiAgICArICAgICAgICBzICs9IHNpcyhzeW0ucmV2X2RlcCwgMSwNCiAgICArICAgICAgICAgICAg
ICAgICAiU3ltYm9scyBjdXJyZW50bHkgbS1zZWxlY3RpbmcgdGhpcyBzeW1ib2w6XG4iKQ0KICAg
ICsgICAgICAgIHMgKz0gc2lzKHN5bS5yZXZfZGVwLCAwLA0KICAgICsgICAgICAgICAgICAgICAg
ICJTeW1ib2xzIGN1cnJlbnRseSBuLXNlbGVjdGluZyB0aGlzIHN5bWJvbCAobm8gZWZmZWN0KTpc
biIpDQogICAgKw0KICAgICsgICAgaWYgc3ltLndlYWtfcmV2X2RlcCBpcyBub3QgX2tjb25mLm46
DQogICAgKyAgICAgICAgcyArPSBzaXMoc3ltLndlYWtfcmV2X2RlcCwgMiwNCiAgICArICAgICAg
ICAgICAgICAgICAiU3ltYm9scyBjdXJyZW50bHkgeS1pbXBseWluZyB0aGlzIHN5bWJvbDpcbiIp
DQogICAgKyAgICAgICAgcyArPSBzaXMoc3ltLndlYWtfcmV2X2RlcCwgMSwNCiAgICArICAgICAg
ICAgICAgICAgICAiU3ltYm9scyBjdXJyZW50bHkgbS1pbXBseWluZyB0aGlzIHN5bWJvbDpcbiIp
DQogICAgKyAgICAgICAgcyArPSBzaXMoc3ltLndlYWtfcmV2X2RlcCwgMCwNCiAgICArICAgICAg
ICAgICAgICAgICAiU3ltYm9scyBjdXJyZW50bHkgbi1pbXBseWluZyB0aGlzIHN5bWJvbCAobm8g
ZWZmZWN0KTpcbiIpDQogICAgKw0KICAgICsgICAgcmV0dXJuIHMNCiAgICArDQogICAgKw0KICAg
ICtkZWYgX2tjb25maWdfZGVmX2luZm8oaXRlbSk6DQogICAgKyAgICAjIFJldHVybnMgYSBzdHJp
bmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiAnaXRlbScgaW4gS2NvbmZpZyBzeW50YXgsDQogICAg
KyAgICAjIHRvZ2V0aGVyIHdpdGggdGhlIGRlZmluaXRpb24gbG9jYXRpb24ocykgYW5kIHRoZWly
IGluY2x1ZGUgYW5kIG1lbnUgcGF0aHMNCiAgICArDQogICAgKyAgICBub2RlcyA9IFtpdGVtXSBp
ZiBpc2luc3RhbmNlKGl0ZW0sIE1lbnVOb2RlKSBlbHNlIGl0ZW0ubm9kZXMNCiAgICArDQogICAg
KyAgICBzID0gIktjb25maWcgZGVmaW5pdGlvbnt9LCB3aXRoIHBhcmVudCBkZXBzLiBwcm9wYWdh
dGVkIHRvICdkZXBlbmRzIG9uJ1xuIiBcDQogICAgKyAgICAgICAgLmZvcm1hdCgicyIgaWYgbGVu
KG5vZGVzKSA+IDEgZWxzZSAiIikNCiAgICArICAgIHMgKz0gKGxlbihzKSAtIDEpKiI9Ig0KICAg
ICsNCiAgICArICAgIGZvciBub2RlIGluIG5vZGVzOg0KICAgICsgICAgICAgIHMgKz0gIlxuXG4i
IFwNCiAgICArICAgICAgICAgICAgICJBdCB7fTp7fVxuIiBcDQogICAgKyAgICAgICAgICAgICAi
e30iIFwNCiAgICArICAgICAgICAgICAgICJNZW51IHBhdGg6IHt9XG5cbiIgXA0KICAgICsgICAg
ICAgICAgICAgInt9IiBcDQogICAgKyAgICAgICAgICAgICAuZm9ybWF0KG5vZGUuZmlsZW5hbWUs
IG5vZGUubGluZW5yLA0KICAgICsgICAgICAgICAgICAgICAgICAgICBfaW5jbHVkZV9wYXRoX2lu
Zm8obm9kZSksDQogICAgKyAgICAgICAgICAgICAgICAgICAgIF9tZW51X3BhdGhfaW5mbyhub2Rl
KSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgX2luZGVudChub2RlLmN1c3RvbV9zdHIoX25h
bWVfYW5kX3ZhbF9zdHIpLCAyKSkNCiAgICArDQogICAgKyAgICByZXR1cm4gcw0KICAgICsNCiAg
ICArDQogICAgK2RlZiBfaW5jbHVkZV9wYXRoX2luZm8obm9kZSk6DQogICAgKyAgICBpZiBub3Qg
bm9kZS5pbmNsdWRlX3BhdGg6DQogICAgKyAgICAgICAgIyBJbiB0aGUgdG9wLWxldmVsIEtjb25m
aWcgZmlsZQ0KICAgICsgICAgICAgIHJldHVybiAiIg0KICAgICsNCiAgICArICAgIHJldHVybiAi
SW5jbHVkZWQgdmlhIHt9XG4iLmZvcm1hdCgNCiAgICArICAgICAgICAiIC0+ICIuam9pbigie306
e30iLmZvcm1hdChmaWxlbmFtZSwgbGluZW5yKQ0KICAgICsgICAgICAgICAgICAgICAgICAgIGZv
ciBmaWxlbmFtZSwgbGluZW5yIGluIG5vZGUuaW5jbHVkZV9wYXRoKSkNCiAgICArDQogICAgKw0K
ICAgICtkZWYgX21lbnVfcGF0aF9pbmZvKG5vZGUpOg0KICAgICsgICAgIyBSZXR1cm5zIGEgc3Ry
aW5nIGRlc2NyaWJpbmcgdGhlIG1lbnUgcGF0aCBsZWFkaW5nIHVwIHRvICdub2RlJw0KICAgICsN
CiAgICArICAgIHBhdGggPSAiIg0KICAgICsNCiAgICArICAgIHdoaWxlIG5vZGUucGFyZW50IGlz
IG5vdCBfa2NvbmYudG9wX25vZGU6DQogICAgKyAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50DQog
ICAgKw0KICAgICsgICAgICAgICMgUHJvbXB0bGVzcyBjaG9pY2VzIG1pZ2h0IGFwcGVhciBhbW9u
ZyB0aGUgcGFyZW50cy4gVXNlDQogICAgKyAgICAgICAgIyBzdGFuZGFyZF9zY19leHByX3N0cigp
IGZvciB0aGVtLCBzbyB0aGF0IHRoZXkgc2hvdyB1cCBhcw0KICAgICsgICAgICAgICMgJzxjaG9p
Y2UgKG5hbWUgaWYgYW55KT4nLg0KICAgICsgICAgICAgIHBhdGggPSAiIC0+ICIgKyAobm9kZS5w
cm9tcHRbMF0gaWYgbm9kZS5wcm9tcHQgZWxzZQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhbmRhcmRfc2NfZXhwcl9zdHIobm9kZS5pdGVtKSkgKyBwYXRoDQogICAgKw0KICAgICsg
ICAgcmV0dXJuICIoVG9wKSIgKyBwYXRoDQogICAgKw0KICAgICsNCiAgICArZGVmIF9pbmRlbnQo
cywgbik6DQogICAgKyAgICAjIFJldHVybnMgJ3MnIHdpdGggZWFjaCBsaW5lIGluZGVudGVkICdu
JyBzcGFjZXMuIHRleHR3cmFwLmluZGVudCgpIGlzIG5vdA0KICAgICsgICAgIyBhdmFpbGFibGUg
aW4gUHl0aG9uIDIgKGl0J3MgMy4zKykuDQogICAgKw0KICAgICsgICAgcmV0dXJuICJcbiIuam9p
bihuKiIgIiArIGxpbmUgZm9yIGxpbmUgaW4gcy5zcGxpdCgiXG4iKSkNCiAgICArDQogICAgKw0K
ICAgICtkZWYgX25hbWVfYW5kX3ZhbF9zdHIoc2MpOg0KICAgICsgICAgIyBDdXN0b20gc3ltYm9s
L2Nob2ljZSBwcmludGVyIHRoYXQgc2hvd3Mgc3ltYm9sIHZhbHVlcyBhZnRlciBzeW1ib2xzDQog
ICAgKw0KICAgICsgICAgIyBTaG93IHRoZSB2YWx1ZXMgb2Ygbm9uLWNvbnN0YW50IChub24tcXVv
dGVkKSBzeW1ib2xzIHRoYXQgZG9uJ3QgbG9vayBsaWtlDQogICAgKyAgICAjIG51bWJlcnMuIFRo
aW5ncyBsaWtlIDEyMyBhcmUgYWN0dWFsbHkgc3ltYm9sIHJlZmVyZW5jZXMsIGFuZCBvbmx5IHdv
cmsgYXMNCiAgICArICAgICMgZXhwZWN0ZWQgZHVlIHRvIHVuZGVmaW5lZCBzeW1ib2xzIGdldHRp
bmcgdGhlaXIgbmFtZSBhcyB0aGVpciB2YWx1ZS4NCiAgICArICAgICMgU2hvd2luZyB0aGUgc3lt
Ym9sIHZhbHVlIGZvciB0aG9zZSBpc24ndCBoZWxwZnVsIHRob3VnaC4NCiAgICArICAgIGlmIGlz
aW5zdGFuY2Uoc2MsIFN5bWJvbCkgYW5kIG5vdCBzYy5pc19jb25zdGFudCBhbmQgbm90IF9pc19u
dW0oc2MubmFtZSk6DQogICAgKyAgICAgICAgaWYgbm90IHNjLm5vZGVzOg0KICAgICsgICAgICAg
ICAgICAjIFVuZGVmaW5lZCBzeW1ib2wgcmVmZXJlbmNlDQogICAgKyAgICAgICAgICAgIHJldHVy
biAie30odW5kZWZpbmVkL24pIi5mb3JtYXQoc2MubmFtZSkNCiAgICArDQogICAgKyAgICAgICAg
cmV0dXJuICd7fSg9e30pJy5mb3JtYXQoc2MubmFtZSwgc2Muc3RyX3ZhbHVlKQ0KICAgICsNCiAg
ICArICAgICMgRm9yIG90aGVyIGl0ZW1zLCB1c2UgdGhlIHN0YW5kYXJkIGZvcm1hdA0KICAgICsg
ICAgcmV0dXJuIHN0YW5kYXJkX3NjX2V4cHJfc3RyKHNjKQ0KICAgICsNCiAgICArDQogICAgK2Rl
ZiBfZXhwcl9zdHIoZXhwcik6DQogICAgKyAgICAjIEN1c3RvbSBleHByZXNzaW9uIHByaW50ZXIg
dGhhdCBzaG93cyBzeW1ib2wgdmFsdWVzDQogICAgKyAgICByZXR1cm4gZXhwcl9zdHIoZXhwciwg
X25hbWVfYW5kX3ZhbF9zdHIpDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zdHlsZWRfd2luKHN0
eWxlKToNCiAgICArICAgICMgUmV0dXJucyBhIG5ldyBjdXJzZXMgd2luZG93IHdpdGggc3R5bGUg
J3N0eWxlJyBhbmQgc3BhY2UgYXMgdGhlIGZpbGwNCiAgICArICAgICMgY2hhcmFjdGVyLiBUaGUg
aW5pdGlhbCBkaW1lbnNpb25zIGFyZSAoMSwgMSksIHNvIHRoZSB3aW5kb3cgbmVlZHMgdG8gYmUN
CiAgICArICAgICMgc2l6ZWQgYW5kIHBvc2l0aW9uZWQgc2VwYXJhdGVseS4NCiAgICArDQogICAg
KyAgICB3aW4gPSBjdXJzZXMubmV3d2luKDEsIDEpDQogICAgKyAgICBfc2V0X3N0eWxlKHdpbiwg
c3R5bGUpDQogICAgKyAgICByZXR1cm4gd2luDQogICAgKw0KICAgICsNCiAgICArZGVmIF9zZXRf
c3R5bGUod2luLCBzdHlsZSk6DQogICAgKyAgICAjIENoYW5nZXMgdGhlIHN0eWxlIG9mIGFuIGV4
aXN0aW5nIHdpbmRvdw0KICAgICsNCiAgICArICAgIHdpbi5ia2dkc2V0KCIgIiwgX3N0eWxlW3N0
eWxlXSkNCiAgICArDQogICAgKw0KICAgICtkZWYgX21heF9zY3JvbGwobHN0LCB3aW4pOg0KICAg
ICsgICAgIyBBc3N1bWluZyAnbHN0JyBpcyBhIGxpc3Qgb2YgaXRlbXMgdG8gYmUgZGlzcGxheWVk
IGluICd3aW4nLA0KICAgICsgICAgIyByZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzdGVw
cyAnd2luJyBjYW4gYmUgc2Nyb2xsZWQgZG93bi4NCiAgICArICAgICMgV2Ugc3RvcCBzY3JvbGxp
bmcgd2hlbiB0aGUgYm90dG9tIGl0ZW0gaXMgdmlzaWJsZS4NCiAgICArDQogICAgKyAgICByZXR1
cm4gbWF4KDAsIGxlbihsc3QpIC0gX2hlaWdodCh3aW4pKQ0KICAgICsNCiAgICArDQogICAgK2Rl
ZiBfZWRpdF90ZXh0KGMsIHMsIGksIGhzY3JvbGwsIHdpZHRoKToNCiAgICArICAgICMgSW1wbGVt
ZW50cyB0ZXh0IGVkaXRpbmcgY29tbWFuZHMgZm9yIGVkaXQgYm94ZXMuIFRha2VzIGEgY2hhcmFj
dGVyICh3aGljaA0KICAgICsgICAgIyBjb3VsZCBhbHNvIGJlIGUuZy4gY3Vyc2VzLktFWV9MRUZU
KSBhbmQgdGhlIGVkaXQgYm94IHN0YXRlLCBhbmQgcmV0dXJucw0KICAgICsgICAgIyB0aGUgbmV3
IHN0YXRlIGFmdGVyIHRoZSBjaGFyYWN0ZXIgaGFzIGJlZW4gcHJvY2Vzc2VkLg0KICAgICsgICAg
Iw0KICAgICsgICAgIyBjOg0KICAgICsgICAgIyAgIENoYXJhY3RlciBmcm9tIHVzZXINCiAgICAr
ICAgICMNCiAgICArICAgICMgczoNCiAgICArICAgICMgICBDdXJyZW50IGNvbnRlbnRzIG9mIHN0
cmluZw0KICAgICsgICAgIw0KICAgICsgICAgIyBpOg0KICAgICsgICAgIyAgIEN1cnJlbnQgY3Vy
c29yIGluZGV4IGluIHN0cmluZw0KICAgICsgICAgIw0KICAgICsgICAgIyBoc2Nyb2xsOg0KICAg
ICsgICAgIyAgIEluZGV4IGluIHMgb2YgdGhlIGxlZnRtb3N0IGNoYXJhY3RlciBpbiB0aGUgZWRp
dCBib3gsIGZvciBob3Jpem9udGFsDQogICAgKyAgICAjICAgc2Nyb2xsaW5nDQogICAgKyAgICAj
DQogICAgKyAgICAjIHdpZHRoOg0KICAgICsgICAgIyAgIFdpZHRoIGluIGNoYXJhY3RlcnMgb2Yg
dGhlIGVkaXQgYm94DQogICAgKyAgICAjDQogICAgKyAgICAjIFJldHVybiB2YWx1ZToNCiAgICAr
ICAgICMgICBBbiAocywgaSwgaHNjcm9sbCkgdHVwbGUgZm9yIHRoZSBuZXcgc3RhdGUNCiAgICAr
DQogICAgKyAgICBpZiBjID09IGN1cnNlcy5LRVlfTEVGVDoNCiAgICArICAgICAgICBpZiBpID4g
MDoNCiAgICArICAgICAgICAgICAgaSAtPSAxDQogICAgKw0KICAgICsgICAgZWxpZiBjID09IGN1
cnNlcy5LRVlfUklHSFQ6DQogICAgKyAgICAgICAgaWYgaSA8IGxlbihzKToNCiAgICArICAgICAg
ICAgICAgaSArPSAxDQogICAgKw0KICAgICsgICAgZWxpZiBjIGluIChjdXJzZXMuS0VZX0hPTUUs
ICJceDAxIik6ICAjIFx4MDEgPSBDVFJMLUENCiAgICArICAgICAgICBpID0gMA0KICAgICsNCiAg
ICArICAgIGVsaWYgYyBpbiAoY3Vyc2VzLktFWV9FTkQsICJceDA1Iik6ICAjIFx4MDUgPSBDVFJM
LUUNCiAgICArICAgICAgICBpID0gbGVuKHMpDQogICAgKw0KICAgICsgICAgZWxpZiBjIGluIChj
dXJzZXMuS0VZX0JBQ0tTUEFDRSwgX0VSQVNFX0NIQVIpOg0KICAgICsgICAgICAgIGlmIGkgPiAw
Og0KICAgICsgICAgICAgICAgICBzID0gc1s6aS0xXSArIHNbaTpdDQogICAgKyAgICAgICAgICAg
IGkgLT0gMQ0KICAgICsNCiAgICArICAgIGVsaWYgYyA9PSBjdXJzZXMuS0VZX0RDOg0KICAgICsg
ICAgICAgIHMgPSBzWzppXSArIHNbaSsxOl0NCiAgICArDQogICAgKyAgICBlbGlmIGMgPT0gIlx4
MTciOiAgIyBceDE3ID0gQ1RSTC1XDQogICAgKyAgICAgICAgIyBUaGUgXFcgcmVtb3ZlcyBjaGFy
YWN0ZXJzIGxpa2UgJywnIG9uZSBhdCBhIHRpbWUNCiAgICArICAgICAgICBuZXdfaSA9IHJlLnNl
YXJjaChyIig/Olx3KnxcVylccyokIiwgc1s6aV0pLnN0YXJ0KCkNCiAgICArICAgICAgICBzID0g
c1s6bmV3X2ldICsgc1tpOl0NCiAgICArICAgICAgICBpID0gbmV3X2kNCiAgICArDQogICAgKyAg
ICBlbGlmIGMgPT0gIlx4MEIiOiAgIyBceDBCID0gQ1RSTC1LDQogICAgKyAgICAgICAgcyA9IHNb
OmldDQogICAgKw0KICAgICsgICAgZWxpZiBjID09ICJceDE1IjogICMgXHgxNSA9IENUUkwtVQ0K
ICAgICsgICAgICAgIHMgPSBzW2k6XQ0KICAgICsgICAgICAgIGkgPSAwDQogICAgKw0KICAgICsg
ICAgZWxpZiBpc2luc3RhbmNlKGMsIHN0cik6DQogICAgKyAgICAgICAgIyBJbnNlcnQgY2hhcmFj
dGVyDQogICAgKyAgICAgICAgcyA9IHNbOmldICsgYyArIHNbaTpdDQogICAgKyAgICAgICAgaSAr
PSAxDQogICAgKw0KICAgICsgICAgIyBBZGp1c3QgdGhlIGhvcml6b250YWwgc2Nyb2xsIHNvIHRo
YXQgdGhlIGN1cnNvciBuZXZlciB0b3VjaGVzIHRoZSBsZWZ0IG9yDQogICAgKyAgICAjIHJpZ2h0
IGVkZ2VzIG9mIHRoZSBlZGl0IGJveCwgZXhjZXB0IHdoZW4gaXQncyBhdCB0aGUgYmVnaW5uaW5n
IG9yIHRoZSBlbmQNCiAgICArICAgICMgb2YgdGhlIHN0cmluZw0KICAgICsgICAgaWYgaSA8IGhz
Y3JvbGwgKyBfU0NST0xMX09GRlNFVDoNCiAgICArICAgICAgICBoc2Nyb2xsID0gbWF4KGkgLSBf
U0NST0xMX09GRlNFVCwgMCkNCiAgICArICAgIGVsaWYgaSA+PSBoc2Nyb2xsICsgd2lkdGggLSBf
U0NST0xMX09GRlNFVDoNCiAgICArICAgICAgICBtYXhfc2Nyb2xsID0gbWF4KGxlbihzKSAtIHdp
ZHRoICsgMSwgMCkNCiAgICArICAgICAgICBoc2Nyb2xsID0gbWluKGkgLSB3aWR0aCArIF9TQ1JP
TExfT0ZGU0VUICsgMSwgbWF4X3Njcm9sbCkNCiAgICArDQogICAgKw0KICAgICsgICAgcmV0dXJu
IHMsIGksIGhzY3JvbGwNCiAgICArDQogICAgKw0KICAgICtkZWYgX2xvYWRfc2F2ZV9pbmZvKCk6
DQogICAgKyAgICAjIFJldHVybnMgYW4gaW5mb3JtYXRpb24gc3RyaW5nIGZvciBsb2FkL3NhdmUg
ZGlhbG9nIGJveGVzDQogICAgKw0KICAgICsgICAgcmV0dXJuICIoUmVsYXRpdmUgdG8ge30pXG5c
blJlZmVyIHRvIHlvdXIgaG9tZSBkaXJlY3Rvcnkgd2l0aCB+IiBcDQogICAgKyAgICAgICAgICAg
LmZvcm1hdChvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICIiKSkNCiAgICArDQogICAgKw0KICAg
ICtkZWYgX21zZyh0aXRsZSwgdGV4dCk6DQogICAgKyAgICAjIFBvcHMgdXAgYSBtZXNzYWdlIGRp
YWxvZyB0aGF0IGNhbiBiZSBkaXNtaXNzZWQgd2l0aCBTcGFjZS9FbnRlci9FU0MNCiAgICArDQog
ICAgKyAgICBfa2V5X2RpYWxvZyh0aXRsZSwgdGV4dCwgIiBcbiIpDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9lcnJvcih0ZXh0KToNCiAgICArICAgICMgUG9wcyB1cCBhbiBlcnJvciBkaWFsb2cg
dGhhdCBjYW4gYmUgZGlzbWlzc2VkIHdpdGggU3BhY2UvRW50ZXIvRVNDDQogICAgKw0KICAgICsg
ICAgX21zZygiRXJyb3IiLCB0ZXh0KQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfbm9kZV9zdHIo
bm9kZSk6DQogICAgKyAgICAjIFJldHVybnMgdGhlIGNvbXBsZXRlIG1lbnUgZW50cnkgdGV4dCBm
b3IgYSBtZW51IG5vZGUuDQogICAgKyAgICAjDQogICAgKyAgICAjIEV4YW1wbGUgcmV0dXJuIHZh
bHVlOiAiWypdIFN1cHBvcnQgZm9yIFgiDQogICAgKw0KICAgICsgICAgIyBDYWxjdWxhdGUgdGhl
IGluZGVudCB0byBwcmludCB0aGUgaXRlbSB3aXRoIGJ5IGNoZWNraW5nIGhvdyBtYW55IGxldmVs
cw0KICAgICsgICAgIyBhYm92ZSBpdCB0aGUgY2xvc2VzdCAnbWVudWNvbmZpZycgaXRlbSBpcyAo
dGhpcyBpbmNsdWRlcyBtZW51cyBhbmQNCiAgICArICAgICMgY2hvaWNlcyBhcyB3ZWxsIGFzIG1l
bnVjb25maWcgc3ltYm9scykNCiAgICArICAgIGluZGVudCA9IDANCiAgICArICAgIHBhcmVudCA9
IG5vZGUucGFyZW50DQogICAgKyAgICB3aGlsZSBub3QgcGFyZW50LmlzX21lbnVjb25maWc6DQog
ICAgKyAgICAgICAgaW5kZW50ICs9IF9TVUJNRU5VX0lOREVOVA0KICAgICsgICAgICAgIHBhcmVu
dCA9IHBhcmVudC5wYXJlbnQNCiAgICArDQogICAgKyAgICAjIFRoaXMgYXBwcm9hY2ggZ2l2ZXMg
bmljZSBhbGlnbm1lbnQgZm9yIGVtcHR5IHN0cmluZyBzeW1ib2xzICgiKCkgIEZvbyIpDQogICAg
KyAgICBzID0gIns6e319Ii5mb3JtYXQoX3ZhbHVlX3N0cihub2RlKSwgMyArIGluZGVudCkNCiAg
ICArDQogICAgKyAgICBpZiBfc2hvdWxkX3Nob3dfbmFtZShub2RlKToNCiAgICArICAgICAgICBp
ZiBpc2luc3RhbmNlKG5vZGUuaXRlbSwgU3ltYm9sKToNCiAgICArICAgICAgICAgICAgcyArPSAi
IDx7fT4iLmZvcm1hdChub2RlLml0ZW0ubmFtZSkNCiAgICArICAgICAgICBlbHNlOg0KICAgICsg
ICAgICAgICAgICAjIEZvciBjaG9pY2VzLCB1c2Ugc3RhbmRhcmRfc2NfZXhwcl9zdHIoKS4gVGhh
dCB3YXkgdGhleSBzaG93IHVwIGFzDQogICAgKyAgICAgICAgICAgICMgJzxjaG9pY2UgKG5hbWUg
aWYgYW55KT4nLg0KICAgICsgICAgICAgICAgICBzICs9ICIgIiArIHN0YW5kYXJkX3NjX2V4cHJf
c3RyKG5vZGUuaXRlbSkNCiAgICArDQogICAgKyAgICBpZiBub2RlLnByb21wdDoNCiAgICArICAg
ICAgICBpZiBub2RlLml0ZW0gPT0gQ09NTUVOVDoNCiAgICArICAgICAgICAgICAgcyArPSAiICoq
KiB7fSAqKioiLmZvcm1hdChub2RlLnByb21wdFswXSkNCiAgICArICAgICAgICBlbHNlOg0KICAg
ICsgICAgICAgICAgICBzICs9ICIgIiArIG5vZGUucHJvbXB0WzBdDQogICAgKw0KICAgICsgICAg
ICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBTeW1ib2wpOg0KICAgICsgICAgICAgICAgICBz
eW0gPSBub2RlLml0ZW0NCiAgICArDQogICAgKyAgICAgICAgICAgICMgUHJpbnQgIihORVcpIiBu
ZXh0IHRvIHN5bWJvbHMgd2l0aG91dCBhIHVzZXIgdmFsdWUgKGZyb20gZS5nLiBhDQogICAgKyAg
ICAgICAgICAgICMgLmNvbmZpZyksIGJ1dCBza2lwIGl0IGZvciBjaG9pY2Ugc3ltYm9scyBpbiBj
aG9pY2VzIGluIHkgbW9kZSwNCiAgICArICAgICAgICAgICAgIyBhbmQgZm9yIHN5bWJvbHMgb2Yg
VU5LTk9XTiB0eXBlICh3aGljaCBnZW5lcmF0ZSBhIHdhcm5pbmcgdGhvdWdoKQ0KICAgICsgICAg
ICAgICAgICBpZiBzeW0udXNlcl92YWx1ZSBpcyBOb25lIGFuZCBzeW0ub3JpZ190eXBlIGFuZCBc
DQogICAgKyAgICAgICAgICAgICAgIG5vdCAoc3ltLmNob2ljZSBhbmQgc3ltLmNob2ljZS50cmlf
dmFsdWUgPT0gMik6DQogICAgKw0KICAgICsgICAgICAgICAgICAgICAgcyArPSAiIChORVcpIg0K
ICAgICsNCiAgICArICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBDaG9pY2UpIGFuZCBub2Rl
Lml0ZW0udHJpX3ZhbHVlID09IDI6DQogICAgKyAgICAgICAgIyBQcmludCB0aGUgcHJvbXB0IG9m
IHRoZSBzZWxlY3RlZCBzeW1ib2wgYWZ0ZXIgdGhlIGNob2ljZSBmb3INCiAgICArICAgICAgICAj
IGNob2ljZXMgaW4geSBtb2RlDQogICAgKyAgICAgICAgc3ltID0gbm9kZS5pdGVtLnNlbGVjdGlv
bg0KICAgICsgICAgICAgIGlmIHN5bToNCiAgICArICAgICAgICAgICAgZm9yIHN5bV9ub2RlIGlu
IHN5bS5ub2RlczoNCiAgICArICAgICAgICAgICAgICAgICMgVXNlIHRoZSBwcm9tcHQgdXNlZCBh
dCB0aGlzIGNob2ljZSBsb2NhdGlvbiwgaW4gY2FzZSB0aGUNCiAgICArICAgICAgICAgICAgICAg
ICMgY2hvaWNlIHN5bWJvbCBpcyBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9ucw0KICAgICsg
ICAgICAgICAgICAgICAgaWYgc3ltX25vZGUucGFyZW50IGlzIG5vZGUgYW5kIHN5bV9ub2RlLnBy
b21wdDoNCiAgICArICAgICAgICAgICAgICAgICAgICBzICs9ICIgKHt9KSIuZm9ybWF0KHN5bV9u
b2RlLnByb21wdFswXSkNCiAgICArICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsgICAg
ICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICAgICAgIyBJZiB0aGUgc3ltYm9sIGlzbid0
IGRlZmluZWQgYXQgdGhpcyBjaG9pY2UgbG9jYXRpb24sIHRoZW4NCiAgICArICAgICAgICAgICAg
ICAgICMganVzdCB1c2Ugd2hhdGV2ZXIgcHJvbXB0IHdlIGNhbiBmaW5kIGZvciBpdA0KICAgICsg
ICAgICAgICAgICAgICAgZm9yIHN5bV9ub2RlIGluIHN5bS5ub2RlczoNCiAgICArICAgICAgICAg
ICAgICAgICAgICBpZiBzeW1fbm9kZS5wcm9tcHQ6DQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgIHMgKz0gIiAoe30pIi5mb3JtYXQoc3ltX25vZGUucHJvbXB0WzBdKQ0KICAgICsgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhaw0KICAgICsNCiAgICArICAgICMgUHJpbnQgIi0tLT4iIG5l
eHQgdG8gbm9kZXMgdGhhdCBoYXZlIG1lbnVzIHRoYXQgY2FuIHBvdGVudGlhbGx5IGJlDQogICAg
KyAgICAjIGVudGVyZWQuIFByaW50ICItLS0tIiBpZiB0aGUgbWVudSBpcyBlbXB0eS4gV2UgZG9u
J3QgYWxsb3cgdGhvc2UgdG8gYmUNCiAgICArICAgICMgZW50ZXJlZC4NCiAgICArICAgIGlmIG5v
ZGUuaXNfbWVudWNvbmZpZzoNCiAgICArICAgICAgICBzICs9ICIgIC0tLT4iIGlmIF9zaG93bl9u
b2Rlcyhub2RlKSBlbHNlICIgIC0tLS0iDQogICAgKw0KICAgICsgICAgcmV0dXJuIHMNCiAgICAr
DQogICAgKw0KICAgICtkZWYgX3Nob3VsZF9zaG93X25hbWUobm9kZSk6DQogICAgKyAgICAjIFJl
dHVybnMgVHJ1ZSBpZiAnbm9kZScgaXMgYSBzeW1ib2wgb3IgY2hvaWNlIHdob3NlIG5hbWUgc2hv
dWxkIHNob3duIChpZg0KICAgICsgICAgIyBhbnksIGFzIG5hbWVzIGFyZSBvcHRpb25hbCBmb3Ig
Y2hvaWNlcykNCiAgICArDQogICAgKyAgICAjIFRoZSAnbm90IG5vZGUucHJvbXB0JyBjYXNlIG9u
bHkgaGl0cyBpbiBzaG93LWFsbCBtb2RlLCBmb3IgcHJvbXB0bGVzcw0KICAgICsgICAgIyBzeW1i
b2xzIGFuZCBjaG9pY2VzDQogICAgKyAgICByZXR1cm4gbm90IG5vZGUucHJvbXB0IG9yIFwNCiAg
ICArICAgICAgICAgICAoX3Nob3dfbmFtZSBhbmQgaXNpbnN0YW5jZShub2RlLml0ZW0sIChTeW1i
b2wsIENob2ljZSkpKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfdmFsdWVfc3RyKG5vZGUpOg0K
ICAgICsgICAgIyBSZXR1cm5zIHRoZSB2YWx1ZSBwYXJ0ICgiWypdIiwgIjxNPiIsICIoZm9vKSIg
ZXRjLikgb2YgYSBtZW51IG5vZGUNCiAgICArDQogICAgKyAgICBpdGVtID0gbm9kZS5pdGVtDQog
ICAgKw0KICAgICsgICAgaWYgaXRlbSBpbiAoTUVOVSwgQ09NTUVOVCk6DQogICAgKyAgICAgICAg
cmV0dXJuICIiDQogICAgKw0KICAgICsgICAgIyBXb3VsZG4ndCBub3JtYWxseSBoYXBwZW4sIGFu
ZCBnZW5lcmF0ZXMgYSB3YXJuaW5nDQogICAgKyAgICBpZiBub3QgaXRlbS5vcmlnX3R5cGU6DQog
ICAgKyAgICAgICAgcmV0dXJuICIiDQogICAgKw0KICAgICsgICAgaWYgaXRlbS5vcmlnX3R5cGUg
aW4gKFNUUklORywgSU5ULCBIRVgpOg0KICAgICsgICAgICAgIHJldHVybiAiKHt9KSIuZm9ybWF0
KGl0ZW0uc3RyX3ZhbHVlKQ0KICAgICsNCiAgICArICAgICMgQk9PTCBvciBUUklTVEFURQ0KICAg
ICsNCiAgICArICAgIGlmIF9pc195X21vZGVfY2hvaWNlX3N5bShpdGVtKToNCiAgICArICAgICAg
ICByZXR1cm4gIihYKSIgaWYgaXRlbS5jaG9pY2Uuc2VsZWN0aW9uIGlzIGl0ZW0gZWxzZSAiKCAp
Ig0KICAgICsNCiAgICArICAgIHRyaV92YWxfc3RyID0gKCIgIiwgIk0iLCAiKiIpW2l0ZW0udHJp
X3ZhbHVlXQ0KICAgICsNCiAgICArICAgIGlmIGxlbihpdGVtLmFzc2lnbmFibGUpIDw9IDE6DQog
ICAgKyAgICAgICAgIyBQaW5uZWQgdG8gYSBzaW5nbGUgdmFsdWUNCiAgICArICAgICAgICByZXR1
cm4gIiIgaWYgaXNpbnN0YW5jZShpdGVtLCBDaG9pY2UpIGVsc2UgIi17fS0iLmZvcm1hdCh0cmlf
dmFsX3N0cikNCiAgICArDQogICAgKyAgICBpZiBpdGVtLnR5cGUgPT0gQk9PTDoNCiAgICArICAg
ICAgICByZXR1cm4gIlt7fV0iLmZvcm1hdCh0cmlfdmFsX3N0cikNCiAgICArDQogICAgKyAgICAj
IGl0ZW0udHlwZSA9PSBUUklTVEFURQ0KICAgICsgICAgaWYgaXRlbS5hc3NpZ25hYmxlID09ICgx
LCAyKToNCiAgICArICAgICAgICByZXR1cm4gInt7e319fSIuZm9ybWF0KHRyaV92YWxfc3RyKSAg
IyB7TX0veyp9DQogICAgKyAgICByZXR1cm4gIjx7fT4iLmZvcm1hdCh0cmlfdmFsX3N0cikNCiAg
ICArDQogICAgKw0KICAgICtkZWYgX2lzX3lfbW9kZV9jaG9pY2Vfc3ltKGl0ZW0pOg0KICAgICsg
ICAgIyBUaGUgY2hvaWNlIG1vZGUgaXMgYW4gdXBwZXIgYm91bmQgb24gdGhlIHZpc2liaWxpdHkg
b2YgY2hvaWNlIHN5bWJvbHMsIHNvDQogICAgKyAgICAjIHdlIGNhbiBjaGVjayB0aGUgY2hvaWNl
IHN5bWJvbHMnIG93biB2aXNpYmlsaXR5IHRvIHNlZSBpZiB0aGUgY2hvaWNlIGlzDQogICAgKyAg
ICAjIGluIHkgbW9kZQ0KICAgICsgICAgcmV0dXJuIGlzaW5zdGFuY2UoaXRlbSwgU3ltYm9sKSBh
bmQgaXRlbS5jaG9pY2UgYW5kIGl0ZW0udmlzaWJpbGl0eSA9PSAyDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9jaGVja192YWxpZChzeW0sIHMpOg0KICAgICsgICAgIyBSZXR1cm5zIFRydWUgaWYg
dGhlIHN0cmluZyAncycgaXMgYSB3ZWxsLWZvcm1lZCB2YWx1ZSBmb3IgJ3N5bScuDQogICAgKyAg
ICAjIE90aGVyd2lzZSwgZGlzcGxheXMgYW4gZXJyb3IgYW5kIHJldHVybnMgRmFsc2UuDQogICAg
Kw0KICAgICsgICAgaWYgc3ltLm9yaWdfdHlwZSBub3QgaW4gKElOVCwgSEVYKToNCiAgICArICAg
ICAgICAjIEFueXRoaW5nIGdvZXMgZm9yIG5vbi1pbnQvaGV4IHN5bWJvbHMNCiAgICArICAgICAg
ICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArICAgIGJhc2UgPSAxMCBpZiBzeW0ub3JpZ190eXBl
ID09IElOVCBlbHNlIDE2DQogICAgKyAgICB0cnk6DQogICAgKyAgICAgICAgaW50KHMsIGJhc2Up
DQogICAgKyAgICBleGNlcHQgVmFsdWVFcnJvcjoNCiAgICArICAgICAgICBfZXJyb3IoIid7fScg
aXMgYSBtYWxmb3JtZWQge30gdmFsdWUiDQogICAgKyAgICAgICAgICAgICAgIC5mb3JtYXQocywg
VFlQRV9UT19TVFJbc3ltLm9yaWdfdHlwZV0pKQ0KICAgICsgICAgICAgIHJldHVybiBGYWxzZQ0K
ICAgICsNCiAgICArICAgIGZvciBsb3dfc3ltLCBoaWdoX3N5bSwgY29uZCBpbiBzeW0ucmFuZ2Vz
Og0KICAgICsgICAgICAgIGlmIGV4cHJfdmFsdWUoY29uZCk6DQogICAgKyAgICAgICAgICAgIGxv
d19zID0gbG93X3N5bS5zdHJfdmFsdWUNCiAgICArICAgICAgICAgICAgaGlnaF9zID0gaGlnaF9z
eW0uc3RyX3ZhbHVlDQogICAgKw0KICAgICsgICAgICAgICAgICBpZiBub3QgaW50KGxvd19zLCBi
YXNlKSA8PSBpbnQocywgYmFzZSkgPD0gaW50KGhpZ2hfcywgYmFzZSk6DQogICAgKyAgICAgICAg
ICAgICAgICBfZXJyb3IoInt9IGlzIG91dHNpZGUgdGhlIHJhbmdlIHt9LXt9Ig0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgIC5mb3JtYXQocywgbG93X3MsIGhpZ2hfcykpDQogICAgKyAgICAg
ICAgICAgICAgICByZXR1cm4gRmFsc2UNCiAgICArDQogICAgKyAgICAgICAgICAgIGJyZWFrDQog
ICAgKw0KICAgICsgICAgcmV0dXJuIFRydWUNCiAgICArDQogICAgKw0KICAgICtkZWYgX3Jhbmdl
X2luZm8oc3ltKToNCiAgICArICAgICMgUmV0dXJucyBhIHN0cmluZyB3aXRoIGluZm9ybWF0aW9u
IGFib3V0IHRoZSB2YWxpZCByYW5nZSBmb3IgdGhlIHN5bWJvbA0KICAgICsgICAgIyAnc3ltJywg
b3IgTm9uZSBpZiAnc3ltJyBkb2Vzbid0IGhhdmUgYSByYW5nZQ0KICAgICsNCiAgICArICAgIGlm
IHN5bS5vcmlnX3R5cGUgaW4gKElOVCwgSEVYKToNCiAgICArICAgICAgICBmb3IgbG93LCBoaWdo
LCBjb25kIGluIHN5bS5yYW5nZXM6DQogICAgKyAgICAgICAgICAgIGlmIGV4cHJfdmFsdWUoY29u
ZCk6DQogICAgKyAgICAgICAgICAgICAgICByZXR1cm4gIlJhbmdlOiB7fS17fSIuZm9ybWF0KGxv
dy5zdHJfdmFsdWUsIGhpZ2guc3RyX3ZhbHVlKQ0KICAgICsNCiAgICArICAgIHJldHVybiBOb25l
DQogICAgKw0KICAgICsNCiAgICArZGVmIF9pc19udW0obmFtZSk6DQogICAgKyAgICAjIEhldXJp
c3RpYyB0byBzZWUgaWYgYSBzeW1ib2wgbmFtZSBsb29rcyBsaWtlIGEgbnVtYmVyLCBmb3Igbmlj
ZXIgb3V0cHV0DQogICAgKyAgICAjIHdoZW4gcHJpbnRpbmcgZXhwcmVzc2lvbnMuIFRoaW5ncyBs
aWtlIDE2IGFyZSBhY3R1YWxseSBzeW1ib2wgbmFtZXMsIG9ubHkNCiAgICArICAgICMgdGhleSBn
ZXQgdGhlaXIgbmFtZSBhcyB0aGVpciB2YWx1ZSB3aGVuIHRoZSBzeW1ib2wgaXMgdW5kZWZpbmVk
Lg0KICAgICsNCiAgICArICAgIHRyeToNCiAgICArICAgICAgICBpbnQobmFtZSkNCiAgICArICAg
IGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICsgICAgICAgIGlmIG5vdCBuYW1lLnN0YXJ0c3dpdGgo
KCIweCIsICIwWCIpKToNCiAgICArICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQogICAgKw0KICAg
ICsgICAgICAgIHRyeToNCiAgICArICAgICAgICAgICAgaW50KG5hbWUsIDE2KQ0KICAgICsgICAg
ICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICsgICAgICAgICAgICByZXR1cm4gRmFsc2UNCiAg
ICArDQogICAgKyAgICByZXR1cm4gVHJ1ZQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfZ2V0Y2hf
Y29tcGF0KHdpbik6DQogICAgKyAgICAjIFVzZXMgZ2V0X3djaCgpIGlmIGF2YWlsYWJsZSAoUHl0
aG9uIDMuMyspIGFuZCBnZXRjaCgpIG90aGVyd2lzZS4gQWxzbw0KICAgICsgICAgIyBoYW5kbGVz
IGEgUERDdXJzZXMgcmVzaXppbmcgcXVpcmsuDQogICAgKw0KICAgICsgICAgaWYgaGFzYXR0cih3
aW4sICJnZXRfd2NoIik6DQogICAgKyAgICAgICAgYyA9IHdpbi5nZXRfd2NoKCkNCiAgICArICAg
IGVsc2U6DQogICAgKyAgICAgICAgYyA9IHdpbi5nZXRjaCgpDQogICAgKyAgICAgICAgaWYgMCA8
PSBjIDw9IDI1NToNCiAgICArICAgICAgICAgICAgYyA9IGNocihjKQ0KICAgICsNCiAgICArICAg
ICMgRGVjZW50IHJlc2l6aW5nIGJlaGF2aW9yIG9uIFBEQ3Vyc2VzIHJlcXVpcmVzIGNhbGxpbmcg
cmVzaXplX3Rlcm0oMCwgMCkNCiAgICArICAgICMgYWZ0ZXIgcmVjZWl2aW5nIEtFWV9SRVNJWkUs
IHdoaWxlIG5jdXJzZXMgKHVzdWFsbHkpIGhhbmRsZXMgdGVybWluYWwNCiAgICArICAgICMgcmVz
aXppbmcgYXV0b21hdGljYWxseSBpbiBnZXQoX3cpY2goKSAoc2VlIHRoZSBlbmQgb2YgdGhlDQog
ICAgKyAgICAjIHJlc2l6ZXRlcm0oM05DVVJTRVMpIG1hbiBwYWdlKS4NCiAgICArICAgICMNCiAg
ICArICAgICMgcmVzaXplX3Rlcm0oMCwgMCkgcmVsaWFibHkgZmFpbHMgYW5kIGRvZXMgbm90aGlu
ZyBvbiBuY3Vyc2VzLCBzbyB0aGlzDQogICAgKyAgICAjIGhhY2sgZ2l2ZXMgbmN1cnNlcy9QREN1
cnNlcyBjb21wYXRpYmlsaXR5IGZvciByZXNpemluZy4gSSBkb24ndCBrbm93DQogICAgKyAgICAj
IHdoZXRoZXIgaXQgd291bGQgY2F1c2UgdHJvdWJsZSBmb3Igb3RoZXIgaW1wbGVtZW50YXRpb25z
Lg0KICAgICsgICAgaWYgYyA9PSBjdXJzZXMuS0VZX1JFU0laRToNCiAgICArICAgICAgICB0cnk6
DQogICAgKyAgICAgICAgICAgIGN1cnNlcy5yZXNpemVfdGVybSgwLCAwKQ0KICAgICsgICAgICAg
IGV4Y2VwdCBjdXJzZXMuZXJyb3I6DQogICAgKyAgICAgICAgICAgIHBhc3MNCiAgICArDQogICAg
KyAgICByZXR1cm4gYw0KICAgICsNCiAgICArDQogICAgK2RlZiBfd2FybigqYXJncyk6DQogICAg
KyAgICAjIFRlbXBvcmFyaWx5IHJldHVybnMgZnJvbSBjdXJzZXMgdG8gc2hlbGwgbW9kZSBhbmQg
cHJpbnRzIGEgd2FybmluZyB0bw0KICAgICsgICAgIyBzdGRlcnIuIFRoZSB3YXJuaW5nIHdvdWxk
IGdldCBsb3N0IGluIGN1cnNlcyBtb2RlLg0KICAgICsgICAgY3Vyc2VzLmVuZHdpbigpDQogICAg
KyAgICBwcmludCgibWVudWNvbmZpZyB3YXJuaW5nOiAiLCBlbmQ9IiIsIGZpbGU9c3lzLnN0ZGVy
cikNCiAgICArICAgIHByaW50KCphcmdzLCBmaWxlPXN5cy5zdGRlcnIpDQogICAgKyAgICBjdXJz
ZXMuZG91cGRhdGUoKQ0KICAgICsNCiAgICArDQogICAgKyMgSWdub3JlIGV4Y2VwdGlvbnMgZnJv
bSBzb21lIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IGZhaWwsIGUuZy4gZm9yIHNtYWxsDQogICAgKyMg
d2luZG93cy4gVGhleSB1c3VhbGx5IGRvIHJlYXNvbmFibGUgdGhpbmdzIGFueXdheS4NCiAgICAr
DQogICAgKw0KICAgICtkZWYgX3NhZmVfY3Vyc19zZXQodmlzaWJpbGl0eSk6DQogICAgKyAgICB0
cnk6DQogICAgKyAgICAgICAgY3Vyc2VzLmN1cnNfc2V0KHZpc2liaWxpdHkpDQogICAgKyAgICBl
eGNlcHQgY3Vyc2VzLmVycm9yOg0KICAgICsgICAgICAgIHBhc3MNCiAgICArDQogICAgKw0KICAg
ICtkZWYgX3NhZmVfYWRkc3RyKHdpbiwgKmFyZ3MpOg0KICAgICsgICAgIyBDbGlwIHRoZSBsaW5l
IHRvIGF2b2lkIHdyYXBwaW5nIHRvIHRoZSBuZXh0IGxpbmUsIHdoaWNoIGxvb2tzIGdsaXRjaHku
DQogICAgKyAgICAjIGFkZGNoc3RyKCkgd291bGQgZG8gaXQgZm9yIHVzLCBidXQgaXQncyBub3Qg
YXZhaWxhYmxlIGluIHRoZSAnY3Vyc2VzJw0KICAgICsgICAgIyBtb2R1bGUuDQogICAgKw0KICAg
ICsgICAgYXR0ciA9IE5vbmUNCiAgICArICAgIGlmIGlzaW5zdGFuY2UoYXJnc1swXSwgc3RyKToN
CiAgICArICAgICAgICB5LCB4ID0gd2luLmdldHl4KCkNCiAgICArICAgICAgICBzID0gYXJnc1sw
XQ0KICAgICsgICAgICAgIGlmIGxlbihhcmdzKSA9PSAyOg0KICAgICsgICAgICAgICAgICBhdHRy
ID0gYXJnc1sxXQ0KICAgICsgICAgZWxzZToNCiAgICArICAgICAgICB5LCB4LCBzID0gYXJnc1s6
M10NCiAgICArICAgICAgICBpZiBsZW4oYXJncykgPT0gNDoNCiAgICArICAgICAgICAgICAgYXR0
ciA9IGFyZ3NbM10NCiAgICArDQogICAgKyAgICBtYXhsZW4gPSBfd2lkdGgod2luKSAtIHgNCiAg
ICArICAgIHMgPSBzLmV4cGFuZHRhYnMoKQ0KICAgICsNCiAgICArICAgIHRyeToNCiAgICArICAg
ICAgICAjIFRoZSAnY3Vyc2VzJyBtb2R1bGUgdXNlcyB3YXR0cl9zZXQoKSBpbnRlcm5hbGx5IGlm
IHlvdSBwYXNzICdhdHRyJywNCiAgICArICAgICAgICAjIG92ZXJ3cml0aW5nIHRoZSBiYWNrZ3Jv
dW5kIHN0eWxlLCBzbyBzZXR0aW5nICdhdHRyJyB0byAwIGluIHRoZSBmaXJzdA0KICAgICsgICAg
ICAgICMgY2FzZSB3b24ndCBkbyB0aGUgcmlnaHQgdGhpbmcNCiAgICArICAgICAgICBpZiBhdHRy
IGlzIE5vbmU6DQogICAgKyAgICAgICAgICAgIHdpbi5hZGRuc3RyKHksIHgsIHMsIG1heGxlbikN
CiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICB3aW4uYWRkbnN0cih5LCB4LCBz
LCBtYXhsZW4sIGF0dHIpDQogICAgKyAgICBleGNlcHQgY3Vyc2VzLmVycm9yOg0KICAgICsgICAg
ICAgIHBhc3MNCiAgICArDQogICAgKw0KICAgICtkZWYgX3NhZmVfYWRkY2god2luLCAqYXJncyk6
DQogICAgKyAgICB0cnk6DQogICAgKyAgICAgICAgd2luLmFkZGNoKCphcmdzKQ0KICAgICsgICAg
ZXhjZXB0IGN1cnNlcy5lcnJvcjoNCiAgICArICAgICAgICBwYXNzDQogICAgKw0KICAgICsNCiAg
ICArZGVmIF9zYWZlX2hsaW5lKHdpbiwgKmFyZ3MpOg0KICAgICsgICAgdHJ5Og0KICAgICsgICAg
ICAgIHdpbi5obGluZSgqYXJncykNCiAgICArICAgIGV4Y2VwdCBjdXJzZXMuZXJyb3I6DQogICAg
KyAgICAgICAgcGFzcw0KICAgICsNCiAgICArDQogICAgK2RlZiBfc2FmZV92bGluZSh3aW4sICph
cmdzKToNCiAgICArICAgIHRyeToNCiAgICArICAgICAgICB3aW4udmxpbmUoKmFyZ3MpDQogICAg
KyAgICBleGNlcHQgY3Vyc2VzLmVycm9yOg0KICAgICsgICAgICAgIHBhc3MNCiAgICArDQogICAg
Kw0KICAgICtkZWYgX3NhZmVfbW92ZSh3aW4sICphcmdzKToNCiAgICArICAgIHRyeToNCiAgICAr
ICAgICAgICB3aW4ubW92ZSgqYXJncykNCiAgICArICAgIGV4Y2VwdCBjdXJzZXMuZXJyb3I6DQog
ICAgKyAgICAgICAgcGFzcw0KICAgICsNCiAgICArDQogICAgK2RlZiBfY2hhbmdlX2NfbGNfY3R5
cGVfdG9fdXRmOCgpOg0KICAgICsgICAgIyBTZWUgX0NIQU5HRV9DX0xDX0NUWVBFX1RPX1VURjgN
CiAgICArDQogICAgKyAgICBpZiBfSVNfV0lORE9XUzoNCiAgICArICAgICAgICAjIFdpbmRvd3Mg
cmFyZWx5IGhhcyBpc3N1ZXMgaGVyZSwgYW5kIHRoZSBQRVAgNTM4IGltcGxlbWVudGF0aW9uIGF2
b2lkcw0KICAgICsgICAgICAgICMgY2hhbmdpbmcgdGhlIGxvY2FsZSBvbiBpdC4gTm9uZSBvZiB0
aGUgVVRGLTggbG9jYWxlcyBiZWxvdyB3ZXJlDQogICAgKyAgICAgICAgIyBzdXBwb3J0ZWQgZnJv
bSBzb21lIHF1aWNrIHRlc3RpbmcgZWl0aGVyLiBQbGF5IGl0IHNhZmUuDQogICAgKyAgICAgICAg
cmV0dXJuDQogICAgKw0KICAgICsgICAgZGVmIHRyeV9zZXRfbG9jYWxlKGxvYyk6DQogICAgKyAg
ICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19D
VFlQRSwgbG9jKQ0KICAgICsgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KICAgICsgICAgICAgIGV4
Y2VwdCBsb2NhbGUuRXJyb3I6DQogICAgKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KICAgICsN
CiAgICArICAgICMgSXMgTENfQ1RZUEUgc2V0IHRvIHRoZSBDIGxvY2FsZT8NCiAgICArICAgIGlm
IGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFKSA9PSAiQyI6DQogICAgKyAgICAgICAg
IyBUaGlzIGxpc3Qgd2FzIHRha2VuIGZyb20gdGhlIFBFUCA1MzggaW1wbGVtZW50YXRpb24gaW4g
dGhlIENQeXRob24NCiAgICArICAgICAgICAjIGNvZGUsIGluIFB5dGhvbi9weWxpZmVjeWNsZS5j
DQogICAgKyAgICAgICAgZm9yIGxvYyBpbiAiQy5VVEYtOCIsICJDLnV0ZjgiLCAiVVRGLTgiOg0K
ICAgICsgICAgICAgICAgICBpZiB0cnlfc2V0X2xvY2FsZShsb2MpOg0KICAgICsgICAgICAgICAg
ICAgICAgIyBMQ19DVFlQRSBzdWNjZXNzZnVsbHkgY2hhbmdlZA0KICAgICsgICAgICAgICAgICAg
ICAgcmV0dXJuDQogICAgKw0KICAgICsNCiAgICArIyBBcmUgd2UgcnVubmluZyBvbiBXaW5kb3dz
Pw0KICAgICtfSVNfV0lORE9XUyA9IG9zLm5hbWUgPT0gIm50Ig0KICAgICsNCiAgICAraWYgX19u
YW1lX18gPT0gIl9fbWFpbl9fIjoNCiAgICArICAgIF9tYWluKCkNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnbGliL29sZGNvbmZpZy5weSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9vbGRj
b25maWcucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDAwMDAwMDAuLjA0
MmFiNDQNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL29s
ZGNvbmZpZy5weQ0KICAgIEBAIC0wLDAgKzEsMjQ2IEBADQogICAgKyMhL3Vzci9iaW4vZW52IHB5
dGhvbg0KICAgICsNCiAgICArIyBDb3B5cmlnaHQgKGMpIDIwMTgtMjAxOSwgVWxmIE1hZ251c3Nv
bg0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCiAgICArDQogICAgKyIiIg0K
ICAgICtJbXBsZW1lbnRzIG9sZGNvbmZpZyBmdW5jdGlvbmFsaXR5Lg0KICAgICsNCiAgICArICAx
LiBMb2FkcyBleGlzdGluZyAuY29uZmlnDQogICAgKyAgMi4gUHJvbXB0cyBmb3IgdGhlIHZhbHVl
IG9mIGFsbCBtb2RpZmlhYmxlIHN5bWJvbHMvY2hvaWNlcyB0aGF0DQogICAgKyAgICAgYXJlbid0
IGFscmVhZHkgc2V0IGluIHRoZSAuY29uZmlnDQogICAgKyAgMy4gV3JpdGVzIGFuIHVwZGF0ZWQg
LmNvbmZpZw0KICAgICsNCiAgICArVGhlIGRlZmF1bHQgaW5wdXQvb3V0cHV0IGZpbGVuYW1lIGlz
ICcuY29uZmlnJy4gQSBkaWZmZXJlbnQgZmlsZW5hbWUgY2FuIGJlDQogICAgK3Bhc3NlZCBpbiB0
aGUgS0NPTkZJR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUuDQogICAgKw0KICAgICtXaGVu
IG92ZXJ3cml0aW5nIGEgY29uZmlndXJhdGlvbiBmaWxlLCB0aGUgb2xkIHZlcnNpb24gaXMgc2F2
ZWQgdG8NCiAgICArPGZpbGVuYW1lPi5vbGQgKGUuZy4gLmNvbmZpZy5vbGQpLg0KICAgICsNCiAg
ICArRW50ZXJpbmcgJz8nIGRpc3BsYXlzIHRoZSBoZWxwIHRleHQgb2YgdGhlIHN5bWJvbC9jaG9p
Y2UsIGlmIGFueS4NCiAgICArDQogICAgK1VubGlrZSAnbWFrZSBvbGRjb25maWcnLCB0aGlzIHNj
cmlwdCBkb2Vzbid0IHByaW50IG1lbnUgdGl0bGVzIGFuZCBjb21tZW50cywNCiAgICArYnV0IGdp
dmVzIEtjb25maWcgZGVmaW5pdGlvbiBsb2NhdGlvbnMuIFByaW50aW5nIG1lbnVzIGFuZCBjb21t
ZW50cyB3b3VsZCBiZQ0KICAgICtwcmV0dHkgZWFzeSB0byBhZGQ6IExvb2sgYXQgdGhlIHBhcmVu
dHMgb2YgZWFjaCBpdGVtLCBhbmQgcHJpbnQgYWxsIG1lbnUNCiAgICArcHJvbXB0cyBhbmQgY29t
bWVudHMgdW5sZXNzIHRoZXkgaGF2ZSBhbHJlYWR5IGJlZW4gcHJpbnRlZCAoYXNzdW1pbmcgeW91
IHdhbnQNCiAgICArdG8gc2tpcCAiaXJyZWxldmFudCIgbWVudXMpLg0KICAgICsiIiINCiAgICAr
ZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbg0KICAgICsNCiAgICAraW1wb3J0
IHN5cw0KICAgICsNCiAgICArZnJvbSBrY29uZmlnbGliIGltcG9ydCBTeW1ib2wsIENob2ljZSwg
Qk9PTCwgVFJJU1RBVEUsIEhFWCwgc3RhbmRhcmRfa2NvbmZpZw0KICAgICsNCiAgICArDQogICAg
KyMgUHl0aG9uIDIvMyBjb21wYXRpYmlsaXR5IGhhY2sNCiAgICAraWYgc3lzLnZlcnNpb25faW5m
b1swXSA8IDM6DQogICAgKyAgICBpbnB1dCA9IHJhd19pbnB1dA0KICAgICsNCiAgICArDQogICAg
K2RlZiBfbWFpbigpOg0KICAgICsgICAgIyBFYXJsaWVyIHN5bWJvbHMgaW4gS2NvbmZpZyBmaWxl
cyBtaWdodCBkZXBlbmQgb24gbGF0ZXIgc3ltYm9scyBhbmQgYmVjb21lDQogICAgKyAgICAjIHZp
c2libGUgaWYgdGhlaXIgdmFsdWVzIGNoYW5nZS4gVGhpcyBmbGFnIGlzIHNldCB0byBUcnVlIGlm
IHRoZSB2YWx1ZSBvZg0KICAgICsgICAgIyBhbnkgc3ltYm9sIGNoYW5nZXMsIGluIHdoaWNoIGNh
c2Ugd2UgcmVydW4gdGhlIG9sZGNvbmZpZyB0byBjaGVjayBmb3IgbmV3DQogICAgKyAgICAjIHZp
c2libGUgc3ltYm9scy4NCiAgICArICAgIGdsb2JhbCBjb25mX2NoYW5nZWQNCiAgICArDQogICAg
KyAgICBrY29uZiA9IHN0YW5kYXJkX2tjb25maWcoKQ0KICAgICsgICAgcHJpbnQoa2NvbmYubG9h
ZF9jb25maWcoKSkNCiAgICArDQogICAgKyAgICB3aGlsZSBUcnVlOg0KICAgICsgICAgICAgIGNv
bmZfY2hhbmdlZCA9IEZhbHNlDQogICAgKw0KICAgICsgICAgICAgIGZvciBub2RlIGluIGtjb25m
Lm5vZGVfaXRlcigpOg0KICAgICsgICAgICAgICAgICBvbGRjb25maWcobm9kZSkNCiAgICArDQog
ICAgKyAgICAgICAgaWYgbm90IGNvbmZfY2hhbmdlZDoNCiAgICArICAgICAgICAgICAgYnJlYWsN
CiAgICArDQogICAgKyAgICBwcmludChrY29uZi53cml0ZV9jb25maWcoKSkNCiAgICArDQogICAg
Kw0KICAgICtkZWYgb2xkY29uZmlnKG5vZGUpOg0KICAgICsgICAgIiIiDQogICAgKyAgICBQcm9t
cHRzIHRoZSB1c2VyIGZvciBhIHZhbHVlIGlmIG5vZGUuaXRlbSBpcyBhIHZpc2libGUgc3ltYm9s
L2Nob2ljZSB3aXRoDQogICAgKyAgICBubyB1c2VyIHZhbHVlLg0KICAgICsgICAgIiIiDQogICAg
KyAgICAjIFNlZSBtYWluKCkNCiAgICArICAgIGdsb2JhbCBjb25mX2NoYW5nZWQNCiAgICArDQog
ICAgKyAgICAjIE9ubHkgc3ltYm9scyBhbmQgY2hvaWNlcyBjYW4gYmUgY29uZmlndXJlZA0KICAg
ICsgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZS5pdGVtLCAoU3ltYm9sLCBDaG9pY2UpKToNCiAg
ICArICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICAjIFNraXAgc3ltYm9scyBhbmQgY2hv
aWNlcyB0aGF0IGFyZW4ndCB2aXNpYmxlDQogICAgKyAgICBpZiBub3Qgbm9kZS5pdGVtLnZpc2li
aWxpdHk6DQogICAgKyAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsgICAgIyBTa2lwIHN5bWJv
bHMgYW5kIGNob2ljZXMgdGhhdCBkb24ndCBoYXZlIGEgcHJvbXB0IChhdCB0aGlzIGxvY2F0aW9u
KQ0KICAgICsgICAgaWYgbm90IG5vZGUucHJvbXB0Og0KICAgICsgICAgICAgIHJldHVybg0KICAg
ICsNCiAgICArICAgIGlmIGlzaW5zdGFuY2Uobm9kZS5pdGVtLCBTeW1ib2wpOg0KICAgICsgICAg
ICAgIHN5bSA9IG5vZGUuaXRlbQ0KICAgICsNCiAgICArICAgICAgICAjIFNraXAgc3ltYm9scyB0
aGF0IGFscmVhZHkgaGF2ZSBhIHVzZXIgdmFsdWUNCiAgICArICAgICAgICBpZiBzeW0udXNlcl92
YWx1ZSBpcyBub3QgTm9uZToNCiAgICArICAgICAgICAgICAgcmV0dXJuDQogICAgKw0KICAgICsg
ICAgICAgICMgU2tpcCBzeW1ib2xzIHRoYXQgY2FuIG9ubHkgaGF2ZSBhIHNpbmdsZSB2YWx1ZSwg
ZHVlIHRvIHNlbGVjdHMNCiAgICArICAgICAgICBpZiBsZW4oc3ltLmFzc2lnbmFibGUpID09IDE6
DQogICAgKyAgICAgICAgICAgIHJldHVybg0KICAgICsNCiAgICArICAgICAgICAjIFNraXAgc3lt
Ym9scyBpbiBjaG9pY2VzIGluIHkgbW9kZS4gV2UgYXNrIG9uY2UgZm9yIHRoZSBlbnRpcmUgY2hv
aWNlDQogICAgKyAgICAgICAgIyBpbnN0ZWFkLg0KICAgICsgICAgICAgIGlmIHN5bS5jaG9pY2Ug
YW5kIHN5bS5jaG9pY2UudHJpX3ZhbHVlID09IDI6DQogICAgKyAgICAgICAgICAgIHJldHVybg0K
ICAgICsNCiAgICArICAgICAgICAjIExvb3AgdW50aWwgdGhlIHVzZXIgZW50ZXJzIGEgdmFsaWQg
dmFsdWUgb3IgZW50ZXJzIGEgYmxhbmsgc3RyaW5nDQogICAgKyAgICAgICAgIyAoZm9yIHRoZSBk
ZWZhdWx0IHZhbHVlKQ0KICAgICsgICAgICAgIHdoaWxlIFRydWU6DQogICAgKyAgICAgICAgICAg
IHZhbCA9IGlucHV0KCJ7fSAoe30pIFt7fV0gIi5mb3JtYXQoDQogICAgKyAgICAgICAgICAgICAg
ICBub2RlLnByb21wdFswXSwgX25hbWVfYW5kX2xvY19zdHIoc3ltKSwNCiAgICArICAgICAgICAg
ICAgICAgIF9kZWZhdWx0X3ZhbHVlX3N0cihzeW0pKSkNCiAgICArDQogICAgKyAgICAgICAgICAg
IGlmIHZhbCA9PSAiPyI6DQogICAgKyAgICAgICAgICAgICAgICBfcHJpbnRfaGVscChub2RlKQ0K
ICAgICsgICAgICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgICAgICMg
U3Vic3RpdHV0ZSBhIGJsYW5rIHN0cmluZyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIHRoZSBzeW1i
b2wNCiAgICArICAgICAgICAgICAgIyB3b3VsZCBnZXQNCiAgICArICAgICAgICAgICAgaWYgbm90
IHZhbDoNCiAgICArICAgICAgICAgICAgICAgIHZhbCA9IHN5bS5zdHJfdmFsdWUNCiAgICArDQog
ICAgKyAgICAgICAgICAgICMgQXV0b21hdGljYWxseSBhZGQgYSAiMHgiIHByZWZpeCBmb3IgaGV4
IHN5bWJvbHMsIGxpa2UgdGhlDQogICAgKyAgICAgICAgICAgICMgbWVudWNvbmZpZyBpbnRlcmZh
Y2UgZG9lcy4gVGhpcyBpc24ndCBkb25lIHdoZW4gbG9hZGluZyAuY29uZmlnDQogICAgKyAgICAg
ICAgICAgICMgZmlsZXMsIGhlbmNlIHdoeSBzZXRfdmFsdWUoKSBkb2Vzbid0IGRvIGl0IGF1dG9t
YXRpY2FsbHkuDQogICAgKyAgICAgICAgICAgIGlmIHN5bS50eXBlID09IEhFWCBhbmQgbm90IHZh
bC5zdGFydHN3aXRoKCgiMHgiLCAiMFgiKSk6DQogICAgKyAgICAgICAgICAgICAgICB2YWwgPSAi
MHgiICsgdmFsDQogICAgKw0KICAgICsgICAgICAgICAgICBvbGRfc3RyX3ZhbCA9IHN5bS5zdHJf
dmFsdWUNCiAgICArDQogICAgKyAgICAgICAgICAgICMgS2NvbmZpZ2xpYiBpdHNlbGYgd2lsbCBw
cmludCBhIHdhcm5pbmcgaGVyZSBpZiB0aGUgdmFsdWUNCiAgICArICAgICAgICAgICAgIyBpcyBp
bnZhbGlkLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGJvdGhlcg0KICAgICsgICAgICAgICAgICBpZiBz
eW0uc2V0X3ZhbHVlKHZhbCk6DQogICAgKyAgICAgICAgICAgICAgICAjIFZhbGlkIHZhbHVlIGlu
cHV0LiBXZSdyZSBkb25lIHdpdGggdGhpcyBub2RlLg0KICAgICsNCiAgICArICAgICAgICAgICAg
ICAgIGlmIHN5bS5zdHJfdmFsdWUgIT0gb2xkX3N0cl92YWw6DQogICAgKyAgICAgICAgICAgICAg
ICAgICAgY29uZl9jaGFuZ2VkID0gVHJ1ZQ0KICAgICsNCiAgICArICAgICAgICAgICAgICAgIHJl
dHVybg0KICAgICsNCiAgICArICAgIGVsc2U6DQogICAgKyAgICAgICAgY2hvaWNlID0gbm9kZS5p
dGVtDQogICAgKw0KICAgICsgICAgICAgICMgU2tpcCBjaG9pY2VzIHRoYXQgYWxyZWFkeSBoYXZl
IGEgdmlzaWJsZSB1c2VyIHNlbGVjdGlvbi4uLg0KICAgICsgICAgICAgIGlmIGNob2ljZS51c2Vy
X3NlbGVjdGlvbiBhbmQgY2hvaWNlLnVzZXJfc2VsZWN0aW9uLnZpc2liaWxpdHkgPT0gMjoNCiAg
ICArICAgICAgICAgICAgIyAuLi51bmxlc3MgdGhlcmUgYXJlIG5ldyB2aXNpYmxlIHN5bWJvbHMg
aW4gdGhlIGNob2ljZS4gKFdlIGtub3cNCiAgICArICAgICAgICAgICAgIyB0aGV5IGhhdmUgeSAo
MikgdmlzaWJpbGl0eSBpbiB0aGF0IGNhc2UsIGJlY2F1c2UgbS12aXNpYmxlDQogICAgKyAgICAg
ICAgICAgICMgc3ltYm9scyBnZXQgZGVtb3RlZCB0byBuLXZpc2liaWxpdHkgaW4geS1tb2RlIGNo
b2ljZXMsIGFuZCB0aGUNCiAgICArICAgICAgICAgICAgIyB1c2VyLXNlbGVjdGVkIHN5bWJvbCBo
YWQgdmlzaWJpbGl0eSB5LikNCiAgICArICAgICAgICAgICAgZm9yIHN5bSBpbiBjaG9pY2Uuc3lt
czoNCiAgICArICAgICAgICAgICAgICAgIGlmIHN5bSBpcyBub3QgY2hvaWNlLnVzZXJfc2VsZWN0
aW9uIGFuZCBzeW0udmlzaWJpbGl0eSBhbmQgXA0KICAgICsgICAgICAgICAgICAgICAgICAgc3lt
LnVzZXJfdmFsdWUgaXMgTm9uZToNCiAgICArICAgICAgICAgICAgICAgICAgICAjIE5ldyB2aXNp
YmxlIHN5bWJvbHMgaW4gdGhlIGNob2ljZQ0KICAgICsgICAgICAgICAgICAgICAgICAgIGJyZWFr
DQogICAgKyAgICAgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgICAgICAjIE5vIG5ldyB2
aXNpYmxlIHN5bWJvbHMgaW4gdGhlIGNob2ljZQ0KICAgICsgICAgICAgICAgICAgICAgcmV0dXJu
DQogICAgKw0KICAgICsgICAgICAgICMgR2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgc2VsZWN0aW9u
cy4gVGhlIG1vZGUgb2YgdGhlIGNob2ljZSBsaW1pdHMNCiAgICArICAgICAgICAjIHRoZSB2aXNp
YmlsaXR5IG9mIHRoZSBjaG9pY2UgdmFsdWUgc3ltYm9scywgc28gdGhpcyB3aWxsIGluZGlyZWN0
bHkNCiAgICArICAgICAgICAjIHNraXAgY2hvaWNlcyBpbiBuIGFuZCBtIG1vZGUuDQogICAgKyAg
ICAgICAgb3B0aW9ucyA9IFtzeW0gZm9yIHN5bSBpbiBjaG9pY2Uuc3ltcyBpZiBzeW0udmlzaWJp
bGl0eSA9PSAyXQ0KICAgICsNCiAgICArICAgICAgICBpZiBub3Qgb3B0aW9uczoNCiAgICArICAg
ICAgICAgICAgIyBObyB5LXZpc2libGUgY2hvaWNlIHZhbHVlIHN5bWJvbHMNCiAgICArICAgICAg
ICAgICAgcmV0dXJuDQogICAgKw0KICAgICsgICAgICAgICMgTG9vcCB1bnRpbCB0aGUgdXNlciBl
bnRlcnMgYSB2YWxpZCBzZWxlY3Rpb24gb3IgYSBibGFuayBzdHJpbmcgKGZvcg0KICAgICsgICAg
ICAgICMgdGhlIGRlZmF1bHQgc2VsZWN0aW9uKQ0KICAgICsgICAgICAgIHdoaWxlIFRydWU6DQog
ICAgKyAgICAgICAgICAgIHByaW50KCJ7fSAoe30pIi5mb3JtYXQobm9kZS5wcm9tcHRbMF0sIF9u
YW1lX2FuZF9sb2Nfc3RyKGNob2ljZSkpKQ0KICAgICsNCiAgICArICAgICAgICAgICAgZm9yIGks
IHN5bSBpbiBlbnVtZXJhdGUob3B0aW9ucywgMSk6DQogICAgKyAgICAgICAgICAgICAgICBwcmlu
dCgie30ge30uIHt9ICh7fSkiLmZvcm1hdCgNCiAgICArICAgICAgICAgICAgICAgICAgICAiPiIg
aWYgc3ltIGlzIGNob2ljZS5zZWxlY3Rpb24gZWxzZSAiICIsDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgaSwNCiAgICArICAgICAgICAgICAgICAgICAgICAjIEFzc3VtZSBwZW9wbGUgZG9uJ3Qg
ZGVmaW5lIGNob2ljZSBzeW1ib2xzIHdpdGggbXVsdGlwbGUNCiAgICArICAgICAgICAgICAgICAg
ICAgICAjIHByb21wdHMuIFRoYXQgZ2VuZXJhdGVzIGEgd2FybmluZyBhbnl3YXkuDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgc3ltLm5vZGVzWzBdLnByb21wdFswXSwNCiAgICArICAgICAgICAg
ICAgICAgICAgICBzeW0ubmFtZSkpDQogICAgKw0KICAgICsgICAgICAgICAgICBzZWxfaW5kZXgg
PSBpbnB1dCgiY2hvaWNlWzEte31dOiAiLmZvcm1hdChsZW4ob3B0aW9ucykpKQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgaWYgc2VsX2luZGV4ID09ICI/IjoNCiAgICArICAgICAgICAgICAgICAg
IF9wcmludF9oZWxwKG5vZGUpDQogICAgKyAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICsN
CiAgICArICAgICAgICAgICAgIyBQaWNrIHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBpZiB0aGUgc3Ry
aW5nIGlzIGJsYW5rDQogICAgKyAgICAgICAgICAgIGlmIG5vdCBzZWxfaW5kZXg6DQogICAgKyAg
ICAgICAgICAgICAgICBjaG9pY2Uuc2VsZWN0aW9uLnNldF92YWx1ZSgyKQ0KICAgICsgICAgICAg
ICAgICAgICAgYnJlYWsNCiAgICArDQogICAgKyAgICAgICAgICAgIHRyeToNCiAgICArICAgICAg
ICAgICAgICAgIHNlbF9pbmRleCA9IGludChzZWxfaW5kZXgpDQogICAgKyAgICAgICAgICAgIGV4
Y2VwdCBWYWx1ZUVycm9yOg0KICAgICsgICAgICAgICAgICAgICAgcHJpbnQoIkJhZCBpbmRleCIs
IGZpbGU9c3lzLnN0ZGVycikNCiAgICArICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgKw0K
ICAgICsgICAgICAgICAgICBpZiBub3QgMSA8PSBzZWxfaW5kZXggPD0gbGVuKG9wdGlvbnMpOg0K
ICAgICsgICAgICAgICAgICAgICAgcHJpbnQoIkJhZCBpbmRleCIsIGZpbGU9c3lzLnN0ZGVycikN
CiAgICArICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgKw0KICAgICsgICAgICAgICAgICAj
IFZhbGlkIHNlbGVjdGlvbg0KICAgICsNCiAgICArICAgICAgICAgICAgaWYgb3B0aW9uc1tzZWxf
aW5kZXggLSAxXS50cmlfdmFsdWUgIT0gMjoNCiAgICArICAgICAgICAgICAgICAgIGNvbmZfY2hh
bmdlZCA9IFRydWUNCiAgICArDQogICAgKyAgICAgICAgICAgIG9wdGlvbnNbc2VsX2luZGV4IC0g
MV0uc2V0X3ZhbHVlKDIpDQogICAgKyAgICAgICAgICAgIGJyZWFrDQogICAgKw0KICAgICsgICAg
ICAgICMgR2l2ZSBhbGwgb2YgdGhlIG5vbi1zZWxlY3RlZCB2aXNpYmxlIGNob2ljZSBzeW1ib2xz
IHRoZSB1c2VyIHZhbHVlIG4uDQogICAgKyAgICAgICAgIyBUaGlzIG1ha2VzIGl0IHNvIHRoYXQg
dGhlIGNob2ljZSBpcyBubyBsb25nZXIgY29uc2lkZXJlZCBuZXcgb25jZSB3ZQ0KICAgICsgICAg
ICAgICMgZG8gYWRkaXRpb25hbCBwYXNzZXMsIGlmIHRoZSByZWFzb24gdGhhdCBpdCB3YXMgY29u
c2lkZXJlZCBuZXcgd2FzDQogICAgKyAgICAgICAgIyB0aGF0IGl0IGhhZCBuZXcgdmlzaWJsZSBj
aG9pY2Ugc3ltYm9scy4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBPbmx5IGdpdmlu
ZyB2aXNpYmxlIGNob2ljZSBzeW1ib2xzIHRoZSB1c2VyIHZhbHVlIG4gbWVhbnMgd2Ugd2lsbA0K
ICAgICsgICAgICAgICMgcHJvbXB0IGZvciB0aGUgY2hvaWNlIGFnYWluIGlmIGxhdGVyIHVzZXIg
c2VsZWN0aW9ucyBtYWtlIG1vcmUgbmV3DQogICAgKyAgICAgICAgIyBjaG9pY2Ugc3ltYm9scyB2
aXNpYmxlLCB3aGljaCBpcyBjb3JyZWN0Lg0KICAgICsgICAgICAgIGZvciBzeW0gaW4gY2hvaWNl
LnN5bXM6DQogICAgKyAgICAgICAgICAgIGlmIHN5bSBpcyBub3QgY2hvaWNlLnVzZXJfc2VsZWN0
aW9uIGFuZCBzeW0udmlzaWJpbGl0eToNCiAgICArICAgICAgICAgICAgICAgIHN5bS5zZXRfdmFs
dWUoMCkNCiAgICArDQogICAgKw0KICAgICtkZWYgX25hbWVfYW5kX2xvY19zdHIoc2MpOg0KICAg
ICsgICAgIyBIZWxwZXIgZm9yIHByaW50aW5nIHRoZSBuYW1lIG9mIHRoZSBzeW1ib2wvY2hvaWNl
ICdzYycgYWxvbmcgd2l0aCB0aGUNCiAgICArICAgICMgbG9jYXRpb24ocykgaW4gdGhlIEtjb25m
aWcgZmlsZXMgd2hlcmUgaXQgaXMgZGVmaW5lZC4gVW5uYW1lZCBjaG9pY2VzDQogICAgKyAgICAj
IHJldHVybiAiY2hvaWNlIiBpbnN0ZWFkIG9mIHRoZSBuYW1lLg0KICAgICsNCiAgICArICAgIHJl
dHVybiAie30sIGRlZmluZWQgYXQge30iLmZvcm1hdCgNCiAgICArICAgICAgICBzYy5uYW1lIG9y
ICJjaG9pY2UiLA0KICAgICsgICAgICAgICIsICIuam9pbigie306e30iLmZvcm1hdChub2RlLmZp
bGVuYW1lLCBub2RlLmxpbmVucikNCiAgICArICAgICAgICAgICAgICAgICAgZm9yIG5vZGUgaW4g
c2Mubm9kZXMpKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBfcHJpbnRfaGVscChub2RlKToNCiAg
ICArICAgIHByaW50KCJcbiIgKyAobm9kZS5oZWxwIG9yICJObyBoZWxwIHRleHRcbiIpKQ0KICAg
ICsNCiAgICArDQogICAgK2RlZiBfZGVmYXVsdF92YWx1ZV9zdHIoc3ltKToNCiAgICArICAgICMg
UmV0dXJucyB0aGUgIm0vTS95IiBzdHJpbmcgaW4gZS5nLg0KICAgICsgICAgIw0KICAgICsgICAg
IyAgIFRSSVNUQVRFX1NZTSBwcm9tcHQgKFRSSVNUQVRFX1NZTSwgZGVmaW5lZCBhdCBLY29uZmln
OjkpIFtuL00veV06DQogICAgKyAgICAjDQogICAgKyAgICAjIEZvciBzdHJpbmcvaW50L2hleCwg
cmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZSBhcy1pcy4NCiAgICArDQogICAgKyAgICBpZiBzeW0u
dHlwZSBpbiAoQk9PTCwgVFJJU1RBVEUpOg0KICAgICsgICAgICAgIHJldHVybiAiLyIuam9pbigo
Ik5NWSIgaWYgc3ltLnRyaV92YWx1ZSA9PSB0cmkgZWxzZSAibm15IilbdHJpXQ0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgdHJpIGluIHN5bS5hc3NpZ25hYmxlKQ0KICAgICsNCiAg
ICArICAgICMgc3RyaW5nL2ludC9oZXgNCiAgICArICAgIHJldHVybiBzeW0uc3RyX3ZhbHVlDQog
ICAgKw0KICAgICsNCiAgICAraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoNCiAgICArICAgIF9t
YWluKCkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL29sZGRlZmNvbmZpZy5w
eSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9vbGRkZWZjb25maWcucHkNCiAgICBuZXcgZmlsZSBtb2Rl
IDEwMDc1NQ0KICAgIGluZGV4IDAwMDAwMDAuLmE1OWE3ZDQNCiAgICAtLS0gL2Rldi9udWxsDQog
ICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL29sZGRlZmNvbmZpZy5weQ0KICAgIEBAIC0wLDAg
KzEsMjggQEANCiAgICArIyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQogICAgKw0KICAgICsjIENvcHly
aWdodCAoYykgMjAxOC0yMDE5LCBVbGYgTWFnbnVzc29uDQogICAgKyMgU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IElTQw0KICAgICsNCiAgICArIiIiDQogICAgK1VwZGF0ZXMgYW4gb2xkIC5jb25m
aWcgZmlsZSBvciBjcmVhdGVzIGEgbmV3IG9uZSwgYnkgZmlsbGluZyBpbiBkZWZhdWx0IHZhbHVl
cw0KICAgICtmb3IgYWxsIG5ldyBzeW1ib2xzLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHBpY2tpbmcg
dGhlIGRlZmF1bHQgc2VsZWN0aW9uIGZvciBhbGwNCiAgICArc3ltYm9scyBpbiBvbGRjb25maWcs
IG9yIGVudGVyaW5nIHRoZSBtZW51Y29uZmlnIGludGVyZmFjZSBhbmQgaW1tZWRpYXRlbHkNCiAg
ICArc2F2aW5nLg0KICAgICsNCiAgICArVGhlIGRlZmF1bHQgaW5wdXQvb3V0cHV0IGZpbGVuYW1l
IGlzICcuY29uZmlnJy4gQSBkaWZmZXJlbnQgZmlsZW5hbWUgY2FuIGJlDQogICAgK3Bhc3NlZCBp
biB0aGUgS0NPTkZJR19DT05GSUcgZW52aXJvbm1lbnQgdmFyaWFibGUuDQogICAgKw0KICAgICtX
aGVuIG92ZXJ3cml0aW5nIGEgY29uZmlndXJhdGlvbiBmaWxlLCB0aGUgb2xkIHZlcnNpb24gaXMg
c2F2ZWQgdG8NCiAgICArPGZpbGVuYW1lPi5vbGQgKGUuZy4gLmNvbmZpZy5vbGQpLg0KICAgICsi
IiINCiAgICAraW1wb3J0IGtjb25maWdsaWINCiAgICArDQogICAgKw0KICAgICtkZWYgbWFpbigp
Og0KICAgICsgICAga2NvbmYgPSBrY29uZmlnbGliLnN0YW5kYXJkX2tjb25maWcoKQ0KICAgICsg
ICAgcHJpbnQoa2NvbmYubG9hZF9jb25maWcoKSkNCiAgICArICAgIHByaW50KGtjb25mLndyaXRl
X2NvbmZpZygpKQ0KICAgICsNCiAgICArDQogICAgK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6
DQogICAgKyAgICBtYWluKCkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Nh
dmVkZWZjb25maWcucHkgYi9zdXBwb3J0L2tjb25maWdsaWIvc2F2ZWRlZmNvbmZpZy5weQ0KICAg
IG5ldyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDAwMDAwMC4uYzM4OGYxYQ0KICAgIC0t
LSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvc2F2ZWRlZmNvbmZpZy5w
eQ0KICAgIEBAIC0wLDAgKzEsNDkgQEANCiAgICArIyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQogICAg
Kw0KICAgICsjIENvcHlyaWdodCAoYykgMjAxOSwgVWxmIE1hZ251c3Nvbg0KICAgICsjIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCiAgICArDQogICAgKyIiIg0KICAgICtTYXZlcyBhIG1p
bmltYWwgY29uZmlndXJhdGlvbiBmaWxlIHRoYXQgb25seSBsaXN0cyBzeW1ib2xzIHRoYXQgZGlm
ZmVyIGluIHZhbHVlDQogICAgK2Zyb20gdGhlaXIgZGVmYXVsdHMuIExvYWRpbmcgc3VjaCBhIGNv
bmZpZ3VyYXRpb24gZmlsZSBpcyBlcXVpdmFsZW50IHRvIGxvYWRpbmcNCiAgICArdGhlICJmdWxs
IiBjb25maWd1cmF0aW9uIGZpbGUuDQogICAgKw0KICAgICtNaW5pbWFsIGNvbmZpZ3VyYXRpb24g
ZmlsZXMgYXJlIGhhbmR5IHRvIHN0YXJ0IGZyb20gd2hlbiBlZGl0aW5nIGNvbmZpZ3VyYXRpb24N
CiAgICArZmlsZXMgYnkgaGFuZC4NCiAgICArDQogICAgK1RoZSBkZWZhdWx0IGlucHV0IGNvbmZp
Z3VyYXRpb24gZmlsZSBpcyAnLmNvbmZpZycuIEEgZGlmZmVyZW50IGlucHV0IGZpbGVuYW1lDQog
ICAgK2NhbiBiZSBwYXNzZWQgaW4gdGhlIEtDT05GSUdfQ09ORklHIGVudmlyb25tZW50IHZhcmlh
YmxlLg0KICAgICsNCiAgICArTm90ZTogTWluaW1hbCBjb25maWd1cmF0aW9ucyBjYW4gYWxzbyBi
ZSBnZW5lcmF0ZWQgZnJvbSB3aXRoaW4gdGhlIG1lbnVjb25maWcNCiAgICAraW50ZXJmYWNlLg0K
ICAgICsiIiINCiAgICAraW1wb3J0IGFyZ3BhcnNlDQogICAgKw0KICAgICtpbXBvcnQga2NvbmZp
Z2xpYg0KICAgICsNCiAgICArDQogICAgK2RlZiBtYWluKCk6DQogICAgKyAgICBwYXJzZXIgPSBh
cmdwYXJzZS5Bcmd1bWVudFBhcnNlcigNCiAgICArICAgICAgICBmb3JtYXR0ZXJfY2xhc3M9YXJn
cGFyc2UuUmF3RGVzY3JpcHRpb25IZWxwRm9ybWF0dGVyLA0KICAgICsgICAgICAgIGRlc2NyaXB0
aW9uPV9fZG9jX18pDQogICAgKw0KICAgICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgNCiAgICAr
ICAgICAgICAiLS1rY29uZmlnIiwNCiAgICArICAgICAgICBkZWZhdWx0PSJLY29uZmlnIiwNCiAg
ICArICAgICAgICBoZWxwPSJCYXNlIEtjb25maWcgZmlsZSAoZGVmYXVsdDogS2NvbmZpZykiKQ0K
ICAgICsNCiAgICArICAgIHBhcnNlci5hZGRfYXJndW1lbnQoDQogICAgKyAgICAgICAgIi0tb3V0
IiwNCiAgICArICAgICAgICBtZXRhdmFyPSJNSU5JTUFMX0NPTkZJR1VSQVRJT04iLA0KICAgICsg
ICAgICAgIGRlZmF1bHQ9ImRlZmNvbmZpZyIsDQogICAgKyAgICAgICAgaGVscD0iT3V0cHV0IGZp
bGVuYW1lIGZvciBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHQ6IGRlZmNvbmZpZykiKQ0K
ICAgICsNCiAgICArICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpDQogICAgKw0KICAgICsg
ICAga2NvbmYgPSBrY29uZmlnbGliLktjb25maWcoYXJncy5rY29uZmlnKQ0KICAgICsgICAgcHJp
bnQoa2NvbmYubG9hZF9jb25maWcoKSkNCiAgICArICAgIHByaW50KGtjb25mLndyaXRlX21pbl9j
b25maWcoYXJncy5vdXQpKQ0KICAgICsNCiAgICArDQogICAgK2lmIF9fbmFtZV9fID09ICJfX21h
aW5fXyI6DQogICAgKyAgICBtYWluKCkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
bGliL3NldGNvbmZpZy5weSBiL3N1cHBvcnQva2NvbmZpZ2xpYi9zZXRjb25maWcucHkNCiAgICBu
ZXcgZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDAwMDAwMDAuLmI2ODk3NTQNCiAgICAtLS0g
L2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3NldGNvbmZpZy5weQ0KICAg
IEBAIC0wLDAgKzEsOTIgQEANCiAgICArIyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQogICAgKw0KICAg
ICsjIENvcHlyaWdodCAoYykgMjAxOSwgVWxmIE1hZ251c3Nvbg0KICAgICsjIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBJU0MNCiAgICArDQogICAgKyIiIg0KICAgICtTaW1wbGUgdXRpbGl0eSBm
b3Igc2V0dGluZyBjb25maWd1cmF0aW9uIHZhbHVlcyBmcm9tIHRoZSBjb21tYW5kIGxpbmUuDQog
ICAgKw0KICAgICtTYW1wbGUgdXNhZ2U6DQogICAgKw0KICAgICsgICQgc2V0Y29uZmlnIEZPT19T
VVBQT1JUPXkgQkFSX0JJVFM9OA0KICAgICsNCiAgICArTm90ZTogU3ltYm9sIG5hbWVzIHNob3Vs
ZCBub3QgYmUgcHJlZml4ZWQgd2l0aCAnQ09ORklHXycuDQogICAgKw0KICAgICtUaGUgZXhpdCBz
dGF0dXMgb24gZXJyb3JzIGlzIDEuDQogICAgKw0KICAgICtUaGUgZGVmYXVsdCBpbnB1dC9vdXRw
dXQgY29uZmlndXJhdGlvbiBmaWxlIGlzICcuY29uZmlnJy4gQSBkaWZmZXJlbnQgZmlsZW5hbWUN
CiAgICArY2FuIGJlIHBhc3NlZCBpbiB0aGUgS0NPTkZJR19DT05GSUcgZW52aXJvbm1lbnQgdmFy
aWFibGUuDQogICAgKw0KICAgICtXaGVuIG92ZXJ3cml0aW5nIGEgY29uZmlndXJhdGlvbiBmaWxl
LCB0aGUgb2xkIHZlcnNpb24gaXMgc2F2ZWQgdG8NCiAgICArPGZpbGVuYW1lPi5vbGQgKGUuZy4g
LmNvbmZpZy5vbGQpLg0KICAgICsiIiINCiAgICAraW1wb3J0IGFyZ3BhcnNlDQogICAgK2ltcG9y
dCBzeXMNCiAgICArDQogICAgK2ltcG9ydCBrY29uZmlnbGliDQogICAgKw0KICAgICsNCiAgICAr
ZGVmIG1haW4oKToNCiAgICArICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKA0K
ICAgICsgICAgICAgIGZvcm1hdHRlcl9jbGFzcz1hcmdwYXJzZS5SYXdEZXNjcmlwdGlvbkhlbHBG
b3JtYXR0ZXIsDQogICAgKyAgICAgICAgZGVzY3JpcHRpb249X19kb2NfXykNCiAgICArDQogICAg
KyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KA0KICAgICsgICAgICAgICItLWtjb25maWciLA0KICAg
ICsgICAgICAgIGRlZmF1bHQ9Iktjb25maWciLA0KICAgICsgICAgICAgIGhlbHA9IkJhc2UgS2Nv
bmZpZyBmaWxlIChkZWZhdWx0OiBLY29uZmlnKSIpDQogICAgKw0KICAgICsgICAgcGFyc2VyLmFk
ZF9hcmd1bWVudCgNCiAgICArICAgICAgICAiLS1uby1jaGVjay1leGlzdHMiLA0KICAgICsgICAg
ICAgIGRlc3Q9ImNoZWNrX2V4aXN0cyIsDQogICAgKyAgICAgICAgYWN0aW9uPSJzdG9yZV9mYWxz
ZSIsDQogICAgKyAgICAgICAgaGVscD0iSWdub3JlIGFzc2lnbm1lbnRzIHRvIG5vbi1leGlzdGVu
dCBzeW1ib2xzIGluc3RlYWQgb2YgZXJyb3JpbmcgIg0KICAgICsgICAgICAgICAgICAgIm91dCIp
DQogICAgKw0KICAgICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgNCiAgICArICAgICAgICAiLS1u
by1jaGVjay12YWx1ZSIsDQogICAgKyAgICAgICAgZGVzdD0iY2hlY2tfdmFsdWUiLA0KICAgICsg
ICAgICAgIGFjdGlvbj0ic3RvcmVfZmFsc2UiLA0KICAgICsgICAgICAgIGhlbHA9Iklnbm9yZSBh
c3NpZ25tZW50cyB0aGF0IGRpZG4ndCBcInRha2VcIiAod2hlcmUgdGhlIHN5bWJvbCBnb3QgYSAi
DQogICAgKyAgICAgICAgICAgICAiZGlmZmVyZW50IHZhbHVlLCBlLmcuIGR1ZSB0byB1bnNhdGlz
ZmllZCBkZXBlbmRlbmNpZXMpIGluc3RlYWQgIg0KICAgICsgICAgICAgICAgICAgIm9mIGVycm9y
aW5nIG91dCIpDQogICAgKw0KICAgICsgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgNCiAgICArICAg
ICAgICAiYXNzaWdubWVudHMiLA0KICAgICsgICAgICAgIG1ldGF2YXI9IkFTU0lHTk1FTlQiLA0K
ICAgICsgICAgICAgIG5hcmdzPSIqIiwNCiAgICArICAgICAgICBoZWxwPSJBICdOQU1FPXZhbHVl
JyBhc3NpZ25tZW50IikNCiAgICArDQogICAgKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3Mo
KQ0KICAgICsNCiAgICArICAgIGtjb25mID0ga2NvbmZpZ2xpYi5LY29uZmlnKGFyZ3Mua2NvbmZp
ZykNCiAgICArICAgIHByaW50KGtjb25mLmxvYWRfY29uZmlnKCkpDQogICAgKw0KICAgICsgICAg
Zm9yIGFyZyBpbiBhcmdzLmFzc2lnbm1lbnRzOg0KICAgICsgICAgICAgIGlmICI9IiBub3QgaW4g
YXJnOg0KICAgICsgICAgICAgICAgICBzeXMuZXhpdCgiZXJyb3I6IG5vICc9JyBpbiBhc3NpZ25t
ZW50OiAne30nIi5mb3JtYXQoYXJnKSkNCiAgICArICAgICAgICBuYW1lLCB2YWx1ZSA9IGFyZy5z
cGxpdCgiPSIsIDEpDQogICAgKw0KICAgICsgICAgICAgIGlmIG5hbWUgbm90IGluIGtjb25mLnN5
bXM6DQogICAgKyAgICAgICAgICAgIGlmIG5vdCBhcmdzLmNoZWNrX2V4aXN0czoNCiAgICArICAg
ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgKyAgICAgICAgICAgIHN5cy5leGl0KCJlcnJvcjog
bm8gc3ltYm9sICd7fScgaW4gY29uZmlndXJhdGlvbiIuZm9ybWF0KG5hbWUpKQ0KICAgICsNCiAg
ICArICAgICAgICBzeW0gPSBrY29uZi5zeW1zW25hbWVdDQogICAgKw0KICAgICsgICAgICAgIGlm
IG5vdCBzeW0uc2V0X3ZhbHVlKHZhbHVlKToNCiAgICArICAgICAgICAgICAgc3lzLmV4aXQoImVy
cm9yOiAne30nIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSB7fSBzeW1ib2wge30iDQogICAg
KyAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQodmFsdWUsIGtjb25maWdsaWIuVFlQRV9UT19T
VFJbc3ltLm9yaWdfdHlwZV0sDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSkpDQogICAgKw0KICAgICsgICAgICAgIGlmIGFyZ3MuY2hlY2tfdmFsdWUgYW5kIHN5bS5zdHJf
dmFsdWUgIT0gdmFsdWU6DQogICAgKyAgICAgICAgICAgIHN5cy5leGl0KCJlcnJvcjoge30gd2Fz
IGFzc2lnbmVkIHRoZSB2YWx1ZSAne30nLCBidXQgZ290IHRoZSAiDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICJ2YWx1ZSAne30nLiBDaGVjayB0aGUgc3ltYm9sJ3MgZGVwZW5kZW5jaWVzLCBh
bmQgbWFrZSAiDQogICAgKyAgICAgICAgICAgICAgICAgICAgICJzdXJlIHRoYXQgaXQgaGFzIGEg
cHJvbXB0LiINCiAgICArICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCB2YWx1ZSwg
c3ltLnN0cl92YWx1ZSkpDQogICAgKw0KICAgICsgICAgcHJpbnQoa2NvbmYud3JpdGVfY29uZmln
KCkpDQogICAgKw0KICAgICsNCiAgICAraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoNCiAgICAr
ICAgIG1haW4oKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvc2V0dXAuY2Zn
IGIvc3VwcG9ydC9rY29uZmlnbGliL3NldHVwLmNmZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgaW5kZXggMDAwMDAwMC4uMTg1ODQ1ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysg
Yi9zdXBwb3J0L2tjb25maWdsaWIvc2V0dXAuY2ZnDQogICAgQEAgLTAsMCArMSw3IEBADQogICAg
K1tiZGlzdF93aGVlbF0NCiAgICArIyBXZSBzdXBwb3J0IGJvdGggUHl0aG9uIDIgYW5kIFB5dGhv
biAzDQogICAgK3VuaXZlcnNhbCA9IDENCiAgICArDQogICAgK1ttZXRhZGF0YV0NCiAgICArIyBJ
bmNsdWRlIHRoZSBsaWNlbnNlIGZpbGUgaW4gd2hlZWxzDQogICAgK2xpY2Vuc2VfZmlsZSA9IExJ
Q0VOU0UudHh0DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi9zZXR1cC5weSBi
L3N1cHBvcnQva2NvbmZpZ2xpYi9zZXR1cC5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uOWEzOTQ3ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9z
dXBwb3J0L2tjb25maWdsaWIvc2V0dXAucHkNCiAgICBAQCAtMCwwICsxLDEwMCBAQA0KICAgICtp
bXBvcnQgaW8NCiAgICAraW1wb3J0IG9zDQogICAgKw0KICAgICtpbXBvcnQgc2V0dXB0b29scw0K
ICAgICsNCiAgICArDQogICAgK3NldHVwdG9vbHMuc2V0dXAoDQogICAgKyAgICBuYW1lPSJrY29u
ZmlnbGliIiwNCiAgICArICAgICMgTUFKT1IuTUlOT1IuUEFUQ0gsIHBlciBodHRwOi8vc2VtdmVy
Lm9yZw0KICAgICsgICAgdmVyc2lvbj0iMTIuMTMuMCIsDQogICAgKyAgICBkZXNjcmlwdGlvbj0i
QSBmbGV4aWJsZSBQeXRob24gS2NvbmZpZyBpbXBsZW1lbnRhdGlvbiIsDQogICAgKw0KICAgICsg
ICAgIyBNYWtlIHN1cmUgdGhhdCBSRUFETUUucnN0IGRlY29kZXMgb24gUHl0aG9uIDMgaW4gZW52
aXJvbm1lbnRzIHRoYXQgdXNlDQogICAgKyAgICAjIHRoZSBDIGxvY2FsZSAod2hpY2ggaW1wbGll
cyBBU0NJSSksIGJ5IGV4cGxpY2l0bHkgZ2l2aW5nIHRoZSBlbmNvZGluZy4NCiAgICArICAgICMN
CiAgICArICAgICMgaW8ub3BlbigpIGhhcyB0aGUgJ2VuY29kaW5nJyBwYXJhbWV0ZXIgb24gYm90
aCBQeXRob24gMiBhbmQgMy4gb3BlbigpDQogICAgKyAgICAjIGRvZXNuJ3QgaGF2ZSBpdCBvbiBQ
eXRob24gMi4gVGhpcyBsZXRzIHVzIHVzZSB0aGUgc2FtZSBjb2RlIGZvciBib3RoLg0KICAgICsg
ICAgbG9uZ19kZXNjcmlwdGlvbj1pby5vcGVuKA0KICAgICsgICAgICAgIG9zLnBhdGguam9pbihv
cy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAiUkVBRE1FLnJzdCIpLA0KICAgICsgICAgICAgIGVu
Y29kaW5nPSJ1dGYtOCINCiAgICArICAgICkucmVhZCgpLA0KICAgICsNCiAgICArICAgIHVybD0i
aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliIiwNCiAgICArICAgIGF1dGhv
cj0nVWxmICJVbGZhbGl6ZXIiIE1hZ251c3NvbicsDQogICAgKyAgICBhdXRob3JfZW1haWw9InVs
ZmFsaXplckBnbWFpbC5jb20iLA0KICAgICsgICAga2V5d29yZHM9Imtjb25maWcsIGtidWlsZCwg
bWVudWNvbmZpZywgY29uZmlndXJhdGlvbi1tYW5hZ2VtZW50IiwNCiAgICArICAgIGxpY2Vuc2U9
IklTQyIsDQogICAgKw0KICAgICsgICAgcHlfbW9kdWxlcz0oDQogICAgKyAgICAgICAgImtjb25m
aWdsaWIiLA0KICAgICsgICAgICAgICJtZW51Y29uZmlnIiwNCiAgICArICAgICAgICAiZ3VpY29u
ZmlnIiwNCiAgICArICAgICAgICAiZ2VuY29uZmlnIiwNCiAgICArICAgICAgICAib2xkY29uZmln
IiwNCiAgICArICAgICAgICAib2xkZGVmY29uZmlnIiwNCiAgICArICAgICAgICAic2F2ZWRlZmNv
bmZpZyIsDQogICAgKyAgICAgICAgImRlZmNvbmZpZyIsDQogICAgKyAgICAgICAgImFsbGRlZmNv
bmZpZyIsDQogICAgKyAgICAgICAgImFsbG5vY29uZmlnIiwNCiAgICArICAgICAgICAiYWxsbW9k
Y29uZmlnIiwNCiAgICArICAgICAgICAiYWxseWVzY29uZmlnIiwNCiAgICArICAgICAgICAibGlz
dG5ld2NvbmZpZyIsDQogICAgKyAgICAgICAgInNldGNvbmZpZyIsDQogICAgKyAgICApLA0KICAg
ICsNCiAgICArICAgIGVudHJ5X3BvaW50cz17DQogICAgKyAgICAgICAgImNvbnNvbGVfc2NyaXB0
cyI6ICgNCiAgICArICAgICAgICAgICAgIm1lbnVjb25maWcgPSBtZW51Y29uZmlnOl9tYWluIiwN
CiAgICArICAgICAgICAgICAgImd1aWNvbmZpZyA9IGd1aWNvbmZpZzpfbWFpbiIsDQogICAgKyAg
ICAgICAgICAgICJnZW5jb25maWcgPSBnZW5jb25maWc6bWFpbiIsDQogICAgKyAgICAgICAgICAg
ICJvbGRjb25maWcgPSBvbGRjb25maWc6X21haW4iLA0KICAgICsgICAgICAgICAgICAib2xkZGVm
Y29uZmlnID0gb2xkZGVmY29uZmlnOm1haW4iLA0KICAgICsgICAgICAgICAgICAic2F2ZWRlZmNv
bmZpZyA9IHNhdmVkZWZjb25maWc6bWFpbiIsDQogICAgKyAgICAgICAgICAgICJkZWZjb25maWcg
PSBkZWZjb25maWc6bWFpbiIsDQogICAgKyAgICAgICAgICAgICJhbGxkZWZjb25maWcgPSBhbGxk
ZWZjb25maWc6bWFpbiIsDQogICAgKyAgICAgICAgICAgICJhbGxub2NvbmZpZyA9IGFsbG5vY29u
ZmlnOm1haW4iLA0KICAgICsgICAgICAgICAgICAiYWxsbW9kY29uZmlnID0gYWxsbW9kY29uZmln
Om1haW4iLA0KICAgICsgICAgICAgICAgICAiYWxseWVzY29uZmlnID0gYWxseWVzY29uZmlnOm1h
aW4iLA0KICAgICsgICAgICAgICAgICAibGlzdG5ld2NvbmZpZyA9IGxpc3RuZXdjb25maWc6bWFp
biIsDQogICAgKyAgICAgICAgICAgICJzZXRjb25maWcgPSBzZXRjb25maWc6bWFpbiIsDQogICAg
KyAgICAgICAgKQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICAjIFRoZSB0ZXJtaW5hbCBt
ZW51Y29uZmlnIGltcGxlbWVudGF0aW9uIHVzZXMgdGhlIHN0YW5kYXJkIFB5dGhvbiAnY3Vyc2Vz
Jw0KICAgICsgICAgIyBtb2R1bGUuIFRoZSB3aW5kb3dzLWN1cnNlcyBwYWNrYWdlIG1ha2VzIGl0
IGF2YWlsYWJsZSBvbiBXaW5kb3dzLiBTZWUNCiAgICArICAgICMgaHR0cHM6Ly9naXRodWIuY29t
L3plcGh5cnByb2plY3QtcnRvcy93aW5kb3dzLWN1cnNlcy4NCiAgICArICAgIGluc3RhbGxfcmVx
dWlyZXM9KA0KICAgICsgICAgICAgICd3aW5kb3dzLWN1cnNlczsgc3lzX3BsYXRmb3JtID09ICJ3
aW4zMiInLA0KICAgICsgICAgKSwNCiAgICArDQogICAgKyAgICAjIE5lZWRzIHN1cHBvcnQgZm9y
IHVubnVtYmVyZWQge30gaW4gZm9ybWF0KCkgYW5kIGFyZ3BhcnNlDQogICAgKyAgICBweXRob25f
cmVxdWlyZXM9Ij49Mi43LCE9My4wLiosIT0zLjEuKiIsDQogICAgKw0KICAgICsgICAgcHJvamVj
dF91cmxzPXsNCiAgICArICAgICAgICAiR2l0SHViIHJlcG9zaXRvcnkiOiAiaHR0cHM6Ly9naXRo
dWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliIiwNCiAgICArICAgICAgICAiRXhhbXBsZXMiOiAi
aHR0cHM6Ly9naXRodWIuY29tL3VsZmFsaXplci9LY29uZmlnbGliL3RyZWUvbWFzdGVyL2V4YW1w
bGVzIiwNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgY2xhc3NpZmllcnM9Ww0KICAgICsg
ICAgICAgICJEZXZlbG9wbWVudCBTdGF0dXMgOjogNSAtIFByb2R1Y3Rpb24vU3RhYmxlIiwNCiAg
ICArICAgICAgICAiSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycyIsDQogICAgKyAgICAg
ICAgIlRvcGljIDo6IFNvZnR3YXJlIERldmVsb3BtZW50IDo6IEJ1aWxkIFRvb2xzIiwNCiAgICAr
ICAgICAgICAiVG9waWMgOjogU3lzdGVtIDo6IE9wZXJhdGluZyBTeXN0ZW0gS2VybmVscyA6OiBM
aW51eCIsDQogICAgKyAgICAgICAgIkxpY2Vuc2UgOjogT1NJIEFwcHJvdmVkIDo6IElTQyBMaWNl
bnNlIChJU0NMKSIsDQogICAgKyAgICAgICAgIk9wZXJhdGluZyBTeXN0ZW0gOjogUE9TSVgiLA0K
ICAgICsgICAgICAgICJPcGVyYXRpbmcgU3lzdGVtIDo6IE1pY3Jvc29mdCA6OiBXaW5kb3dzIiwN
CiAgICArICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIiLA0KICAg
ICsgICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43IiwNCiAgICAr
ICAgICAgICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMiLA0KICAgICsgICAg
ICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy4yIiwNCiAgICArICAgICAg
ICAiUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuMyIsDQogICAgKyAgICAgICAg
IlByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjQiLA0KICAgICsgICAgICAgICJQ
cm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy41IiwNCiAgICArICAgICAgICAiUHJv
Z3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDMuNiIsDQogICAgKyAgICAgICAgIlByb2dy
YW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzLjciLA0KICAgICsgICAgICAgICJQcm9ncmFt
bWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMy44IiwNCiAgICArICAgICAgICAiUHJvZ3JhbW1p
bmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IEltcGxlbWVudGF0aW9uIDo6IENQeXRob24iLA0KICAg
ICsgICAgICAgICJQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogSW1wbGVtZW50YXRp
b24gOjogUHlQeSIsDQogICAgKyAgICBdDQogICAgKykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0thcHBlbmQgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Fw
cGVuZA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uY2UxNDc4
Zg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2FwcGVuZA0KICAgIEBAIC0wLDAgKzEsMTIgQEANCiAgICArY29uZmlnIE1PRFVMRVMNCiAgICAr
ICAgIGRlZl9ib29sIHkNCiAgICArDQogICAgK2NvbmZpZyBCT09MDQogICAgKyAgICBib29sICJi
b29sIDEiDQogICAgKw0KICAgICtjb25maWcgU1RSSU5HDQogICAgKyAgICBzdHJpbmcgInN0cmlu
ZyINCiAgICArDQogICAgK2NvbmZpZyBJR05PUkVNRQ0KICAgICsgICAgYm9vbCAiaWdub3JlIG1l
Ig0KICAgICsgICAgZGVmYXVsdCB5DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LYXNzaWduYWJsZSBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LYXNzaWduYWJs
ZQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMjZiNDE3Nw0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Fz
c2lnbmFibGUNCiAgICBAQCAtMCwwICsxLDIzMCBAQA0KICAgICtjb25maWcgTU9EVUxFUw0KICAg
ICsJYm9vbCAibW9kdWxlcyINCiAgICArCW9wdGlvbiBtb2R1bGVzDQogICAgKw0KICAgICsNCiAg
ICArIyBUaGluZ3MgdGhhdCBzaG91bGQgbmV2ZXIgYmUgLmFzc2lnbmFibGUNCiAgICArDQogICAg
K2lmIFVOREVGSU5FRCAmJiAiY29uc3QiDQogICAgK2VuZGlmDQogICAgKw0KICAgICtjb25maWcg
Tk9fUFJPTVBUDQogICAgKwlib29sDQogICAgKw0KICAgICtjb25maWcgU1RSSU5HDQogICAgKwlz
dHJpbmcgInN0cmluZyINCiAgICArDQogICAgK2NvbmZpZyBJTlQNCiAgICArCWludCAiaW50Ig0K
ICAgICsNCiAgICArY29uZmlnIEhFWA0KICAgICsJaGV4ICJoZXgiDQogICAgKw0KICAgICsNCiAg
ICArIyBOb24tc2VsZWN0ZWQgc3ltYm9scw0KICAgICsNCiAgICArY29uZmlnIFlfVklTX0JPT0wN
CiAgICArCWJvb2wgInktdmlzIGJvb2wiDQogICAgKw0KICAgICtjb25maWcgTV9WSVNfQk9PTA0K
ICAgICsJYm9vbCAibS12aXMgYm9vbCIgaWYgbQ0KICAgICsNCiAgICArY29uZmlnIE5fVklTX0JP
T0wNCiAgICArCWJvb2wgIm4tdmlzIGJvb2wiIGlmIG4NCiAgICArDQogICAgK2NvbmZpZyBZX1ZJ
U19UUkkNCiAgICArCXRyaXN0YXRlICJ5LXZpcyB0cmkiDQogICAgKw0KICAgICtjb25maWcgTV9W
SVNfVFJJDQogICAgKwl0cmlzdGF0ZSAibS12aXMgdHJpIiBpZiBtDQogICAgKw0KICAgICtjb25m
aWcgTl9WSVNfVFJJDQogICAgKwl0cmlzdGF0ZSAibi12aXMgdHJpIiBpZiBuDQogICAgKw0KICAg
ICsNCiAgICArIyBTeW1ib2xzIHNlbGVjdGVkIHRvIHkNCiAgICArDQogICAgK2NvbmZpZyBZX1NF
TEVDVE9SDQogICAgKwlkZWZfdHJpc3RhdGUgeQ0KICAgICsNCiAgICArCXNlbGVjdCBZX1NFTF9Z
X1ZJU19CT09MDQogICAgKwlzZWxlY3QgWV9TRUxfTV9WSVNfQk9PTA0KICAgICsJc2VsZWN0IFlf
U0VMX05fVklTX0JPT0wNCiAgICArDQogICAgKwlzZWxlY3QgWV9TRUxfWV9WSVNfVFJJDQogICAg
KwlzZWxlY3QgWV9TRUxfTV9WSVNfVFJJDQogICAgKwlzZWxlY3QgWV9TRUxfTl9WSVNfVFJJDQog
ICAgKw0KICAgICtjb25maWcgWV9TRUxfWV9WSVNfQk9PTA0KICAgICsJYm9vbCAieS1zZWwgeS12
aXMgYm9vbCINCiAgICArDQogICAgK2NvbmZpZyBZX1NFTF9NX1ZJU19CT09MDQogICAgKwlib29s
ICJ5LXNlbCBtLXZpcyBib29sIiBpZiBtDQogICAgKw0KICAgICtjb25maWcgWV9TRUxfTl9WSVNf
Qk9PTA0KICAgICsJYm9vbCAieS1zZWwgbi12aXMgYm9vbCIgaWYgbg0KICAgICsNCiAgICArY29u
ZmlnIFlfU0VMX1lfVklTX1RSSQ0KICAgICsJdHJpc3RhdGUgInktc2VsIHktdmlzIHRyaSINCiAg
ICArDQogICAgK2NvbmZpZyBZX1NFTF9NX1ZJU19UUkkNCiAgICArCXRyaXN0YXRlICJ5LXNlbCBt
LXZpcyB0cmkiIGlmIG0NCiAgICArDQogICAgK2NvbmZpZyBZX1NFTF9OX1ZJU19UUkkNCiAgICAr
CXRyaXN0YXRlICJ5LXNlbCBuLXZpcyB0cmkiIGlmIG4NCiAgICArDQogICAgKw0KICAgICsjIFN5
bWJvbHMgc2VsZWN0ZWQgdG8gbQ0KICAgICsNCiAgICArY29uZmlnIE1fU0VMRUNUT1INCiAgICAr
CWRlZl90cmlzdGF0ZSBtDQogICAgKw0KICAgICsJc2VsZWN0IE1fU0VMX1lfVklTX0JPT0wNCiAg
ICArCXNlbGVjdCBNX1NFTF9NX1ZJU19CT09MDQogICAgKwlzZWxlY3QgTV9TRUxfTl9WSVNfQk9P
TA0KICAgICsNCiAgICArCXNlbGVjdCBNX1NFTF9ZX1ZJU19UUkkNCiAgICArCXNlbGVjdCBNX1NF
TF9NX1ZJU19UUkkNCiAgICArCXNlbGVjdCBNX1NFTF9OX1ZJU19UUkkNCiAgICArDQogICAgK2Nv
bmZpZyBNX1NFTF9ZX1ZJU19CT09MDQogICAgKwlib29sICJtLXNlbCB5LXZpcyBib29sIg0KICAg
ICsNCiAgICArY29uZmlnIE1fU0VMX01fVklTX0JPT0wNCiAgICArCWJvb2wgIm0tc2VsIG0tdmlz
IGJvb2wiIGlmIG0NCiAgICArDQogICAgK2NvbmZpZyBNX1NFTF9OX1ZJU19CT09MDQogICAgKwli
b29sICJtLXNlbCBuLXZpcyBib29sIiBpZiBuDQogICAgKw0KICAgICtjb25maWcgTV9TRUxfWV9W
SVNfVFJJDQogICAgKwl0cmlzdGF0ZSAibS1zZWwgeS12aXMgdHJpIg0KICAgICsNCiAgICArY29u
ZmlnIE1fU0VMX01fVklTX1RSSQ0KICAgICsJdHJpc3RhdGUgIm0tc2VsIG0tdmlzIHRyaSIgaWYg
bQ0KICAgICsNCiAgICArY29uZmlnIE1fU0VMX05fVklTX1RSSQ0KICAgICsJdHJpc3RhdGUgIm0t
c2VsIG4tdmlzIHRyaSIgaWYgbg0KICAgICsNCiAgICArDQogICAgKyMgU3ltYm9scyBpbXBsaWVk
IHRvIHkNCiAgICArDQogICAgK2NvbmZpZyBZX0lNUExJRVINCiAgICArCWRlZl90cmlzdGF0ZSB5
DQogICAgKw0KICAgICsJaW1wbHkgWV9JTVBfWV9WSVNfQk9PTA0KICAgICsJaW1wbHkgWV9JTVBf
TV9WSVNfQk9PTA0KICAgICsJaW1wbHkgWV9JTVBfTl9WSVNfQk9PTA0KICAgICsNCiAgICArCWlt
cGx5IFlfSU1QX1lfVklTX1RSSQ0KICAgICsJaW1wbHkgWV9JTVBfTV9WSVNfVFJJDQogICAgKwlp
bXBseSBZX0lNUF9OX1ZJU19UUkkNCiAgICArDQogICAgK2NvbmZpZyBZX0lNUF9ZX1ZJU19CT09M
DQogICAgKwlib29sICJ5LWltcCB5LXZpcyBib29sIg0KICAgICsNCiAgICArY29uZmlnIFlfSU1Q
X01fVklTX0JPT0wNCiAgICArCWJvb2wgInktaW1wIG0tdmlzIGJvb2wiIGlmIG0NCiAgICArDQog
ICAgK2NvbmZpZyBZX0lNUF9OX1ZJU19CT09MDQogICAgKwlib29sICJ5LWltcCBuLXZpcyBib29s
IiBpZiBuDQogICAgKw0KICAgICtjb25maWcgWV9JTVBfWV9WSVNfVFJJDQogICAgKwl0cmlzdGF0
ZSAieS1pbXAgeS12aXMgdHJpIg0KICAgICsNCiAgICArY29uZmlnIFlfSU1QX01fVklTX1RSSQ0K
ICAgICsJdHJpc3RhdGUgInktaW1wIG0tdmlzIHRyaSIgaWYgbQ0KICAgICsNCiAgICArY29uZmln
IFlfSU1QX05fVklTX1RSSQ0KICAgICsJdHJpc3RhdGUgInktaW1wIG4tdmlzIHRyaSIgaWYgbg0K
ICAgICsNCiAgICArDQogICAgKyMgU3ltYm9scyBpbXBsaWVkIHRvIG0gKG5ldmVyIGFmZmVjdHMg
YXNzaWduYWJsZSB2YWx1ZXMpDQogICAgKw0KICAgICtjb25maWcgTV9JTVBMSUVSDQogICAgKwlk
ZWZfdHJpc3RhdGUgbQ0KICAgICsNCiAgICArCWltcGx5IE1fSU1QX1lfVklTX0JPT0wNCiAgICAr
CWltcGx5IE1fSU1QX01fVklTX0JPT0wNCiAgICArCWltcGx5IE1fSU1QX05fVklTX0JPT0wNCiAg
ICArDQogICAgKwlpbXBseSBNX0lNUF9ZX1ZJU19UUkkNCiAgICArCWltcGx5IE1fSU1QX01fVklT
X1RSSQ0KICAgICsJaW1wbHkgTV9JTVBfTl9WSVNfVFJJDQogICAgKw0KICAgICtjb25maWcgTV9J
TVBfWV9WSVNfQk9PTA0KICAgICsJYm9vbCAibS1pbXAgeS12aXMgYm9vbCINCiAgICArDQogICAg
K2NvbmZpZyBNX0lNUF9NX1ZJU19CT09MDQogICAgKwlib29sICJtLWltcCBtLXZpcyBib29sIiBp
ZiBtDQogICAgKw0KICAgICtjb25maWcgTV9JTVBfTl9WSVNfQk9PTA0KICAgICsJYm9vbCAibS1p
bXAgbi12aXMgYm9vbCIgaWYgbg0KICAgICsNCiAgICArY29uZmlnIE1fSU1QX1lfVklTX1RSSQ0K
ICAgICsJdHJpc3RhdGUgIm0taW1wIHktdmlzIHRyaSINCiAgICArDQogICAgK2NvbmZpZyBNX0lN
UF9NX1ZJU19UUkkNCiAgICArCXRyaXN0YXRlICJtLWltcCBtLXZpcyB0cmkiIGlmIG0NCiAgICAr
DQogICAgK2NvbmZpZyBNX0lNUF9OX1ZJU19UUkkNCiAgICArCXRyaXN0YXRlICJtLWltcCBuLXZp
cyB0cmkiIGlmIG4NCiAgICArDQogICAgKw0KICAgICsjIFN5bWJvbHMgaW4geS1tb2RlIGNob2lj
ZQ0KICAgICsNCiAgICArY2hvaWNlIFlfQ0hPSUNFDQogICAgKwlib29sICJ5LW1vZGUgY2hvaWNl
Ig0KICAgICsNCiAgICArY29uZmlnIFlfQ0hPSUNFX0JPT0wNCiAgICArCWJvb2wgInktbW9kZSBj
aG9pY2UgYm9vbCINCiAgICArDQogICAgK2NvbmZpZyBZX0NIT0lDRV9UUklTVEFURQ0KICAgICsJ
dHJpc3RhdGUgInktbW9kZSBjaG9pY2UgdHJpc3RhdGUiDQogICAgKw0KICAgICtjb25maWcgWV9D
SE9JQ0VfTl9WSVNfVFJJU1RBVEUNCiAgICArCXRyaXN0YXRlICJ5LW1vZGUgY2hvaWNlIHRyaXN0
YXRlIGludmlzaWJsZSIgaWYgbg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICsN
CiAgICArIyBTeW1ib2xzIGluIG0veS1tb2RlIGNob2ljZQ0KICAgICsNCiAgICArY2hvaWNlIE1Z
X0NIT0lDRQ0KICAgICsJdHJpc3RhdGUgIm0veS1tb2RlIGNob2ljZSINCiAgICArDQogICAgK2Nv
bmZpZyBNWV9DSE9JQ0VfQk9PTA0KICAgICsJYm9vbCAibS95LW1vZGUgY2hvaWNlIGJvb2wiDQog
ICAgKw0KICAgICtjb25maWcgTVlfQ0hPSUNFX1RSSVNUQVRFDQogICAgKwl0cmlzdGF0ZSAibS95
LW1vZGUgY2hvaWNlIHRyaXN0YXRlIg0KICAgICsNCiAgICArY29uZmlnIE1ZX0NIT0lDRV9OX1ZJ
U19UUklTVEFURQ0KICAgICsJdHJpc3RhdGUgIm0veS1tb2RlIGNob2ljZSB0cmlzdGF0ZSBpbnZp
c2libGUiIGlmIG4NCiAgICArDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArDQogICAgKyMg
Q2hvaWNlcyB3aXRoIHNvbWUgb3RoZXIgcG9zc2libGUgbW9kZXMNCiAgICArDQogICAgK2Nob2lj
ZSBOTVlfQ0hPSUNFDQogICAgKwl0cmlzdGF0ZSAibi9tL3ktbW9kZSBjaG9pY2UiDQogICAgKwlv
cHRpb25hbA0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2Nob2ljZSBOWV9DSE9JQ0UNCiAg
ICArCWJvb2wgIm4veS1tb2RlIGNob2ljZSINCiAgICArCW9wdGlvbmFsDQogICAgK2VuZGNob2lj
ZQ0KICAgICsNCiAgICArY2hvaWNlIE5NX0NIT0lDRQ0KICAgICsJdHJpc3RhdGUgIm4vbS1tb2Rl
IGNob2ljZSIgaWYgbQ0KICAgICsJb3B0aW9uYWwNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAg
ICtjaG9pY2UgTV9DSE9JQ0UNCiAgICArCXRyaXN0YXRlICJtLW1vZGUgY2hvaWNlIiBpZiBtDQog
ICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArY2hvaWNlIE5fQ0hPSUNFDQogICAgKwl0cmlzdGF0
ZSAibi1tb2RlIGNob2ljZSIgaWYgbg0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tjaG9pY2UgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2Nob2ljZQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
MTZiMzhkNA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2Nob2ljZQ0KICAgIEBAIC0wLDAgKzEsMTk4IEBADQogICAgK2NvbmZpZyBNT0RVTEVT
DQogICAgKyAgICBib29sICJtb2R1bGVzIg0KICAgICsNCiAgICArIyBib29sL3RyaXN0YXRlIGFu
ZCBvcHRpb25hbA0KICAgICsNCiAgICArY2hvaWNlIEJPT0wNCiAgICArICAgIGJvb2wgImJvb2wi
DQogICAgK2NvbmZpZyBCXzENCiAgICArICAgIHRyaXN0YXRlICJCXzEiDQogICAgK2NvbmZpZyBC
XzINCiAgICArICAgIHRyaXN0YXRlICJCXzIiDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICAr
Y2hvaWNlIEJPT0xfT1BUDQogICAgKyAgICBib29sICJib29sIG9wdGlvbmFsIg0KICAgICsgICAg
b3B0aW9uYWwNCiAgICArY29uZmlnIEJPXzENCiAgICArICAgIHRyaXN0YXRlICJCT18xIg0KICAg
ICtjb25maWcgQk9fMg0KICAgICsgICAgdHJpc3RhdGUgIkJPXzIiDQogICAgK2VuZGNob2ljZQ0K
ICAgICsNCiAgICArY2hvaWNlIFRSSVNUQVRFDQogICAgKyAgICB0cmlzdGF0ZSAidHJpc3RhdGUi
DQogICAgK2NvbmZpZyBUXzENCiAgICArICAgIHRyaXN0YXRlICJUXzEiDQogICAgK2NvbmZpZyBU
XzINCiAgICArICAgIHRyaXN0YXRlICJUXzIiDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICAr
Y2hvaWNlIFRSSVNUQVRFX09QVA0KICAgICsgICAgdHJpc3RhdGUgInRyaXN0YXRlIG9wdGlvbmFs
Ig0KICAgICsgICAgb3B0aW9uYWwNCiAgICArY29uZmlnIFRPXzENCiAgICArICAgIHRyaXN0YXRl
ICJUT18xIg0KICAgICtjb25maWcgVE9fMg0KICAgICsgICAgdHJpc3RhdGUgIlRPXzIiDQogICAg
K2VuZGNob2ljZQ0KICAgICsNCiAgICArIyBtLXZpc2liaWxpdHkNCiAgICArDQogICAgK2Nob2lj
ZSBCT09MX00NCiAgICArICAgIGJvb2wgImJvb2wgbSIgaWYgbQ0KICAgICtjb25maWcgQk1fMQ0K
ICAgICsgICAgdHJpc3RhdGUgIkJNXzEiDQogICAgK2NvbmZpZyBCTV8yDQogICAgKyAgICB0cmlz
dGF0ZSAiQk1fMiINCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UgVFJJU1RBVEVf
TQ0KICAgICsgICAgdHJpc3RhdGUgInRyaXN0YXRlIG0iIGlmIG0NCiAgICArY29uZmlnIFRNXzEN
CiAgICArICAgIHRyaXN0YXRlICJUTV8xIg0KICAgICtjb25maWcgVE1fMg0KICAgICsgICAgdHJp
c3RhdGUgIlRNXzIiDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArIyBEZWZhdWx0cw0KICAg
ICsNCiAgICArY29uZmlnIFRSSVNUQVRFX1NZTQ0KICAgICsgICAgdHJpc3RhdGUgInRyaXN0YXRl
Ig0KICAgICsNCiAgICArY2hvaWNlIERFRkFVTFRTDQogICAgKyAgICBib29sICJkZWZhdWx0cyIN
CiAgICArICAgIGRlZmF1bHQgT1BUXzEgaWYgbg0KICAgICsgICAgZGVmYXVsdCBPUFRfMiBpZiBU
UklTVEFURV9TWU0NCiAgICArICAgIGRlZmF1bHQgT1BUXzQNCiAgICArY29uZmlnIE9QVF8xDQog
ICAgKyAgICB0cmlzdGF0ZSAiT1BUXzEiDQogICAgK2NvbmZpZyBPUFRfMg0KICAgICsgICAgdHJp
c3RhdGUgIk9QVF8yIg0KICAgICtjb25maWcgT1BUXzMNCiAgICArICAgIHRyaXN0YXRlICJPUFRf
MyINCiAgICArY29uZmlnIE9QVF80DQogICAgKyAgICB0cmlzdGF0ZSAiT1BUXzQiDQogICAgK2Vu
ZGNob2ljZQ0KICAgICsNCiAgICArY2hvaWNlIERFRkFVTFRTX05PVF9WSVNJQkxFDQogICAgKyAg
ICBib29sICJkZWZhdWx0cyBub3QgdmlzaWJsZSINCiAgICArICAgICMgU2tpcHBlZCBkdWUgdG8g
Y29uZGl0aW9uDQogICAgKyAgICBkZWZhdWx0IE9QVF82IGlmIG4NCiAgICArICAgICMgU2tpcHBl
ZCBiZWNhdXNlIE9QVF83IGlzIG5vdCB2aXNpYmxlDQogICAgKyAgICBkZWZhdWx0IE9QVF83DQog
ICAgKyAgICAjIFRoaXMgb25lIHNob3VsZCBhcHBseQ0KICAgICsgICAgZGVmYXVsdCBPUFRfOA0K
ICAgICtjb25maWcgT1BUXzUNCiAgICArICAgIHRyaXN0YXRlICJPUFRfNSINCiAgICArY29uZmln
IE9QVF82DQogICAgKyAgICB0cmlzdGF0ZSAiT1BUXzYiDQogICAgK2NvbmZpZyBPUFRfNw0KICAg
ICsgICAgdHJpc3RhdGUgIk9QVF83IiBpZiBuDQogICAgK2NvbmZpZyBPUFRfOA0KICAgICsgICAg
dHJpc3RhdGUgIk9QVF84Ig0KICAgICtjb25maWcgT1BUXzkNCiAgICArICAgIHRyaXN0YXRlICJP
UFRfOSINCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICsjIENob2ljZXMgd2l0aG91dCBhbiBl
eHBsaWNpdGx5IHNwZWNpZmllZCB0eXBlIHNob3VsZCBnZXQgdGhlIHR5cGUgb2YgdGhlIGZpcnN0
DQogICAgKyMgc3ltYm9sIHdpdGggYSB0eXBlDQogICAgKw0KICAgICtjaG9pY2UgTk9fVFlQRV9C
T09MDQogICAgKyAgICBwcm9tcHQgIm5vIHR5cGUgYm9vbCINCiAgICArY29uZmlnIE5UQl8xDQog
ICAgKyAgICBib29sICJOVEJfMSINCiAgICArY29uZmlnIE5UQl8yDQogICAgKyAgICB0cmlzdGF0
ZSAiTlRCXzIiDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArY2hvaWNlIE5PX1RZUEVfVFJJ
U1RBVEUNCiAgICArICAgIHByb21wdCAibm8gdHlwZSB0cmlzdGF0ZSINCiAgICArY29uZmlnIE5U
VF8xDQogICAgK2NvbmZpZyBOVFRfMg0KICAgICsgICAgdHJpc3RhdGUgIk5UQl8yIg0KICAgICtj
b25maWcgTlRUXzMNCiAgICArICAgIGJvb2wgIk5UVF8zIg0KICAgICtlbmRjaG9pY2UNCiAgICAr
DQogICAgKyMgQ2hvaWNlIGl0ZW1zIHdpdGhvdXQgYW4gZXhwbGljaXRseSBzcGVjaWZpZWQgdHlw
ZSBzaG91bGQgZ2V0IHRoZSB0eXBlIG9mIHRoZQ0KICAgICsjIGNob2ljZQ0KICAgICsNCiAgICAr
Y2hvaWNlIE1JU1NJTkdfTUVNQkVSX1RZUEVTXzENCiAgICArICAgIGJvb2wgIm1pc3NpbmcgbWVt
YmVyIHR5cGVzIg0KICAgICtjb25maWcgTU1UXzENCiAgICArY29uZmlnIE1NVF8yDQogICAgK2Nv
bmZpZyBNTVRfMw0KICAgICsgICAgdHJpc3RhdGUNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAg
ICtjaG9pY2UgTUlTU0lOR19NRU1CRVJfVFlQRVNfMg0KICAgICtjb25maWcgTU1UXzQNCiAgICAr
Y29uZmlnIE1NVF81DQogICAgKyAgICBib29sDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICAr
IyBDaG9pY2Ugd2hlcmUgdGhlIGRlZmF1bHQgc2VsZWN0aW9uICh0aGUgZmlyc3Qgc3ltYm9sKSBk
ZXBlbmRzIG9uIGFub3RoZXINCiAgICArIyBzeW1ib2wuIElmIHRoYXQgc3ltYm9sIGJlY29tZXMg
J24nLCB0aGUgZGVmYXVsdCBzZWxlY3Rpb24gc2hvdWxkIGNoYW5nZSB0bw0KICAgICsjIHRoZSBm
aXJzdCB2aXNpYmxlIHN5bWJvbCBpbiB0aGUgY2hvaWNlLg0KICAgICsNCiAgICArY2hvaWNlIERF
RkFVTFRfV0lUSF9ERVANCiAgICArICAgIGJvb2wgImRlZmF1bHQgd2l0aCBkZXAiDQogICAgKw0K
ICAgICtjb25maWcgQQ0KICAgICsgICAgYm9vbCAiQSINCiAgICArICAgIGRlcGVuZHMgb24gREVQ
DQogICAgKw0KICAgICtjb25maWcgQg0KICAgICsgICAgYm9vbCAiQiINCiAgICArDQogICAgK2Vu
ZGNob2ljZQ0KICAgICsNCiAgICArY29uZmlnIERFUA0KICAgICsgICAgYm9vbCAiZGVwIg0KICAg
ICsNCiAgICArIyBDaG9pY2Ugd2l0aCBzeW1ib2xzIHRoYXQgc2hvdWxkbid0IGJlIGNvbnNpZGVy
ZWQgY2hvaWNlIHN5bWJvbHMgYmVjYXVzZSB0aGV5DQogICAgKyMgZGVwZW5kIG9uIHRoZSBwcmVj
ZWRpbmcgc3ltYm9sLiBUaGlzIG1pZ2h0IGJlIGEga2NvbmZpZyBidWcsIGJ1dCBzb21lIHRoaW5n
cw0KICAgICsjIHVzZSBpdCwgc28gd2UgbmVlZCB0byBlbXVsYXRlIGl0Lg0KICAgICsNCiAgICAr
Y2hvaWNlIFdFSVJEX1NZTVMNCiAgICArICAgIGJvb2wgIndlaXJkIHN5bWJvbHMgdGhhdCBhcmVu
J3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBjaG9pY2UiDQogICAgKw0KICAgICsjIE9ubHkgV1Mx
IGlzIHBhcnQgb2YgdGhlIGNob2ljZQ0KICAgICtjb25maWcgV1MxDQogICAgKyAgICBib29sICJX
UzEiDQogICAgKw0KICAgICtjb25maWcgV1MyDQogICAgKyAgICBib29sICJXUzIiDQogICAgKyAg
ICBkZXBlbmRzIG9uIFdTMQ0KICAgICsNCiAgICArY29uZmlnIFdTMw0KICAgICsgICAgYm9vbA0K
ICAgICsgICAgZGVwZW5kcyBvbiBXUzINCiAgICArDQogICAgK2NvbmZpZyBXUzQNCiAgICArICAg
IGJvb2wNCiAgICArICAgIGRlcGVuZHMgb24gV1MxDQogICAgKw0KICAgICtjb25maWcgV1M1DQog
ICAgKyAgICBib29sICJXUzUiIGlmIFdTMQ0KICAgICsNCiAgICArIyAnaWYnIGhhcyB0aGUgc2Ft
ZSBlZmZlY3QsIHNvIG9ubHkgV1M2IGlzIHBhcnQgb2YgdGhlIGNob2ljZQ0KICAgICtjb25maWcg
V1M2DQogICAgKyAgICBib29sICJXUzYiDQogICAgKw0KICAgICtpZiBXUzYNCiAgICArDQogICAg
K2NvbmZpZyBXUzcNCiAgICArICAgIGJvb2wNCiAgICArDQogICAgK2NvbmZpZyBXUzgNCiAgICAr
ICAgIGJvb2wgIldTOCINCiAgICArDQogICAgK2VuZGlmDQogICAgKw0KICAgICsjIFNob3VsZCBh
bHNvIGJlIHBhcnQgb2YgdGhlIGNob2ljZQ0KICAgICtjb25maWcgV1M5DQogICAgKyAgICBib29s
ICJXUzkiDQogICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnQgYi9zdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2RlZmNvbmZpZ19leGlzdGVudA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
aW5kZXggMDAwMDAwMC4uMzA0Y2FlNg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19leGlzdGVudA0KICAgIEBAIC0wLDAgKzEs
OCBAQA0KICAgICsjICRGT08gaXMgImRlZmNvbmZpZ18yIg0KICAgICsNCiAgICArY29uZmlnIEEN
CiAgICArICAgIHN0cmluZw0KICAgICsgICAgb3B0aW9uIGRlZmNvbmZpZ19saXN0DQogICAgKyAg
ICBkZWZhdWx0ICJLY29uZmlnbGliL3Rlc3RzL2RlZmNvbmZpZ18xIiBpZiB5ICYmICFuICYmIG4N
CiAgICArICAgIGRlZmF1bHQgIktjb25maWdsaWIvdGVzdHMvJEZPTyINCiAgICArICAgIGRlZmF1
bHQgIktjb25maWdsaWIvdGVzdHMvZGVmY29uZmlnXzEiDQogICAgZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX2V4aXN0ZW50X2J1dF9uIGIvc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnRfYnV0X24NCiAgICBuZXcgZmlsZSBt
b2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjJmZGFhYTkNCiAgICAtLS0gL2Rldi9udWxs
DQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfZXhpc3RlbnRf
YnV0X24NCiAgICBAQCAtMCwwICsxLDEwIEBADQogICAgKyMgJEZPTyBpcyAiZGVmY29uZmlnXzIi
DQogICAgKyMgU2hvdWxkIHByb2R1Y2UgTm9uZSBkdWUgdG8gdGhlICJkZXBlbmRzIG9uIG4iDQog
ICAgKw0KICAgICtjb25maWcgQQ0KICAgICsgICAgc3RyaW5nDQogICAgKyAgICBkZXBlbmRzIG9u
IG4NCiAgICArICAgIG9wdGlvbiBkZWZjb25maWdfbGlzdA0KICAgICsgICAgZGVmYXVsdCAiS2Nv
bmZpZ2xpYi90ZXN0cy9kZWZjb25maWdfMSIgaWYgeSAmJiAhbiAmJiBuDQogICAgKyAgICBkZWZh
dWx0ICJLY29uZmlnbGliL3Rlc3RzLyRGT08iDQogICAgKyAgICBkZWZhdWx0ICJLY29uZmlnbGli
L3Rlc3RzL2RlZmNvbmZpZ18xIg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2RlZmNvbmZpZ19ub25leGlzdGVudCBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
ZGVmY29uZmlnX25vbmV4aXN0ZW50DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMDAwMDAwLi41YjcyMzBmDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX25vbmV4aXN0ZW50DQogICAgQEAgLTAsMCArMSw1
IEBADQogICAgK2NvbmZpZyBBDQogICAgKyAgICBzdHJpbmcNCiAgICArICAgIG9wdGlvbiBkZWZj
b25maWdfbGlzdA0KICAgICsgICAgZGVmYXVsdCAiS2NvbmZpZ2xpYi90ZXN0cy9ub25fZXhpc3Rl
bnRfMSINCiAgICArICAgIGRlZmF1bHQgIktjb25maWdsaWIvdGVzdHMvbm9uX2V4aXN0ZW50XzIi
DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmlnX3Ny
Y3RyZWUgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19zcmN0cmVlDQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5kMjU5MWZhDQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVmY29uZmln
X3NyY3RyZWUNCiAgICBAQCAtMCwwICsxLDUgQEANCiAgICArY29uZmlnIEENCiAgICArICAgIHN0
cmluZw0KICAgICsgICAgb3B0aW9uIGRlZmNvbmZpZ19saXN0DQogICAgKyAgICBkZWZhdWx0ICJz
dWIvZGVmY29uZmlnX2luX3N1YiIgIyBBc3N1bWUgdGhpcyBkb2Vzbid0IGV4aXN0DQogICAgKyAg
ICBkZWZhdWx0ICJLY29uZmlnbGliL3Rlc3RzL2RlZmNvbmZpZ18yIg0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGNvcHkgYi9zdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2RlcGNvcHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAw
MDAuLjZhYmU4OTgNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0tkZXBjb3B5DQogICAgQEAgLTAsMCArMSwxNzMgQEANCiAgICArIyBXZSB2ZXJp
ZnkgdGhhdCB0aGUgcHJvcGVydGllcyBiZWxvdyBlbmQgdXAgaW4gZGVmaW5pdGlvbiBvcmRlcg0K
ICAgICsNCiAgICArY29uZmlnIE1VTFRJREVGDQogICAgKyAgICBib29sDQogICAgKyAgICBkZWZh
dWx0IEENCiAgICArICAgIGRlZmF1bHQgQg0KICAgICsgICAgc2VsZWN0IEFBDQogICAgKyAgICBp
bXBseSBBQQ0KICAgICsNCiAgICAraWYgRk9PDQogICAgKw0KICAgICtjb25maWcgTVVMVElERUYN
CiAgICArICAgIGRlZmF1bHQgQw0KICAgICsgICAgZGVmYXVsdCBEDQogICAgKyAgICBzZWxlY3Qg
QkINCiAgICArICAgIGltcGx5IEJCDQogICAgKw0KICAgICtpZiBCQVINCiAgICArDQogICAgK2Nv
bmZpZyBNVUxUSURFRg0KICAgICsgICAgZGVmYXVsdCBFDQogICAgKyAgICBkZWZhdWx0IEYNCiAg
ICArICAgIHNlbGVjdCBDQw0KICAgICsgICAgaW1wbHkgQ0MNCiAgICArDQogICAgK21lbnUgIm1l
bnUiDQogICAgKw0KICAgICtjb25maWcgTVVMVElERUYNCiAgICArICAgIGRlZmF1bHQgRw0KICAg
ICsgICAgZGVmYXVsdCBIDQogICAgKyAgICBzZWxlY3QgREQNCiAgICArICAgIGltcGx5IEREDQog
ICAgKw0KICAgICtjb25maWcgTVVMVElERUYNCiAgICArICAgIGRlZmF1bHQgSQ0KICAgICsgICAg
ZGVmYXVsdCBKDQogICAgKyAgICBzZWxlY3QgRUUNCiAgICArICAgIGltcGx5IEVFDQogICAgKw0K
ICAgICtlbmRtZW51DQogICAgKw0KICAgICtjb25maWcgTVVMVElERUYNCiAgICArICAgIGRlZmF1
bHQgSw0KICAgICsgICAgZGVmYXVsdCBMDQogICAgKyAgICBzZWxlY3QgRkYNCiAgICArICAgIGlt
cGx5IEZGDQogICAgKw0KICAgICtjb25maWcgTVVMVElERUYNCiAgICArICAgIGRlZmF1bHQgTQ0K
ICAgICsgICAgZGVmYXVsdCBODQogICAgKyAgICBzZWxlY3QgR0cNCiAgICArICAgIGltcGx5IEdH
DQogICAgKw0KICAgICtlbmRpZg0KICAgICsNCiAgICArY29uZmlnIE1VTFRJREVGDQogICAgKyAg
ICBkZWZhdWx0IE8NCiAgICArICAgIGRlZmF1bHQgUA0KICAgICsgICAgc2VsZWN0IEhIDQogICAg
KyAgICBzZWxlY3QgSUkNCiAgICArICAgIGltcGx5IEhIDQogICAgKyAgICBpbXBseSBJSQ0KICAg
ICsNCiAgICArZW5kaWYNCiAgICArDQogICAgK2NvbmZpZyBNVUxUSURFRg0KICAgICsgICAgZGVm
YXVsdCBRDQogICAgKyAgICBkZWZhdWx0IFINCiAgICArICAgIHNlbGVjdCBKSg0KICAgICsgICAg
aW1wbHkgSkoNCiAgICArDQogICAgKw0KICAgICsjIFNhbWUgdGVzdCB3aXRoIGNob2ljZSBzeW1i
b2xzIGludm9sdmVkDQogICAgKw0KICAgICtjb25maWcgTVVMVElERUZfQ0hPSUNFDQogICAgKyAg
ICBib29sDQogICAgKyAgICBzZWxlY3QgQQ0KICAgICsNCiAgICArY2hvaWNlDQogICAgKyAgICBi
b29sICJjaG9pY2UiDQogICAgKw0KICAgICtjb25maWcgTVVMVElERUZfQ0hPSUNFDQogICAgKyAg
ICBib29sICJtdWx0aWRlZiBjaG9pY2UiDQogICAgKyAgICBzZWxlY3QgQg0KICAgICsNCiAgICAr
ZW5kY2hvaWNlDQogICAgKw0KICAgICtjb25maWcgTVVMVElERUZfQ0hPSUNFDQogICAgKyAgICBi
b29sDQogICAgKyAgICBzZWxlY3QgQw0KICAgICsNCiAgICArDQogICAgKyMgU2FtZSB0ZXN0IHdp
dGggcmFuZ2VzIGludm9sdmVkDQogICAgKw0KICAgICtjb25maWcgTVVMVElERUZfUkFOR0UNCiAg
ICArICAgIGludA0KICAgICsgICAgcmFuZ2UgQSBfDQogICAgKw0KICAgICttZW51ICJtZW51Ig0K
ICAgICsNCiAgICArY29uZmlnIE1VTFRJREVGX1JBTkdFDQogICAgKyAgICBpbnQNCiAgICArICAg
IHJhbmdlIEIgXw0KICAgICsNCiAgICAraWYgRk9PDQogICAgKw0KICAgICtjb25maWcgTVVMVElE
RUZfUkFOR0UNCiAgICArICAgIGludA0KICAgICsgICAgcmFuZ2UgQyBfDQogICAgKw0KICAgICtl
bmRpZg0KICAgICsNCiAgICArY29uZmlnIE1VTFRJREVGX1JBTkdFDQogICAgKyAgICBpbnQNCiAg
ICArICAgIHJhbmdlIEQgXw0KICAgICsNCiAgICArZW5kbWVudQ0KICAgICsNCiAgICArY29uZmln
IE1VTFRJREVGX1JBTkdFDQogICAgKyAgICBpbnQNCiAgICArICAgIHJhbmdlIEUgXw0KICAgICsN
CiAgICArY29uZmlnIE1VTFRJREVGX1JBTkdFDQogICAgKyAgICBpbnQNCiAgICArICAgIHJhbmdl
IEYgXw0KICAgICsNCiAgICArDQogICAgKyMgU2FtZSB0ZXN0IGZvciBhIGNob2ljZQ0KICAgICsN
CiAgICArY2hvaWNlIE1VTFRJQ0hPSUNFDQogICAgKyAgICBib29sICJjaG9pY2UiDQogICAgKyAg
ICBkZWZhdWx0IEENCiAgICArDQogICAgK2NvbmZpZyBBDQogICAgKyAgICBib29sICJBIg0KICAg
ICsNCiAgICArY29uZmlnIEINCiAgICArICAgIGJvb2wgIkIiDQogICAgKw0KICAgICtjb25maWcg
Qw0KICAgICsgICAgYm9vbCAiQyINCiAgICArDQogICAgK2NvbmZpZyBEDQogICAgKyAgICBib29s
ICJDIg0KICAgICsNCiAgICArY29uZmlnIEUNCiAgICArICAgIGJvb2wgIkMiDQogICAgKw0KICAg
ICtlbmRjaG9pY2UNCiAgICArDQogICAgK2lmIEZPTw0KICAgICsNCiAgICArY2hvaWNlIE1VTFRJ
Q0hPSUNFDQogICAgKyAgICBkZWZhdWx0IEINCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtt
ZW51ICJtZW51Ig0KICAgICsNCiAgICArY2hvaWNlIE1VTFRJQ0hPSUNFDQogICAgKyAgICBkZWZh
dWx0IEMNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtlbmRtZW51DQogICAgKw0KICAgICtj
aG9pY2UgTVVMVElDSE9JQ0UNCiAgICArICAgIGRlZmF1bHQgRA0KICAgICtlbmRjaG9pY2UNCiAg
ICArDQogICAgK2VuZGlmDQogICAgKw0KICAgICtjaG9pY2UgTVVMVElDSE9JQ0UNCiAgICArICAg
IGRlZmF1bHQgRQ0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tkZXBsb29wMCBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9v
cDANCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjk4ZDNlM2MN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tk
ZXBsb29wMA0KICAgIEBAIC0wLDAgKzEsMyBAQA0KICAgICtjb25maWcgRk9PDQogICAgKyAgICBi
b29sDQogICAgKyAgICBkZXBlbmRzIG9uIEZPTw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2RlcGxvb3AxIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBs
b29wMQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMTM0Y2Qy
OQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2RlcGxvb3AxDQogICAgQEAgLTAsMCArMSwzIEBADQogICAgK2NvbmZpZyBGT08NCiAgICArICAg
IGJvb2wNCiAgICArICAgIHNlbGVjdCBGT08NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tkZXBsb29wMTAgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxv
b3AxMA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMmU2MTZh
ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S2RlcGxvb3AxMA0KICAgIEBAIC0wLDAgKzEsNDggQEANCiAgICArY29uZmlnIEENCiAgICArICAg
IGJvb2wNCiAgICArICAgIGRlcGVuZHMgb24gQg0KICAgICsNCiAgICArY29uZmlnIEINCiAgICAr
ICAgIGJvb2wNCiAgICArICAgIGRlcGVuZHMgb24gQyA9IDcNCiAgICArDQogICAgK2NvbmZpZyBD
DQogICAgKyAgICBpbnQNCiAgICArICAgIHJhbmdlIEQgOA0KICAgICsNCiAgICArY29uZmlnIEQN
CiAgICArICAgIGludA0KICAgICsgICAgZGVmYXVsdCAzIGlmIEUNCiAgICArICAgIGRlZmF1bHQg
OA0KICAgICsNCiAgICArY29uZmlnIEUNCiAgICArICAgIGJvb2wNCiAgICArDQogICAgK2NvbmZp
ZyBGDQogICAgKyAgICBib29sDQogICAgKyAgICBzZWxlY3QgRSBpZiBHDQogICAgKw0KICAgICtj
b25maWcgRw0KICAgICsgICAgYm9vbA0KICAgICsgICAgZGVwZW5kcyBvbiBIDQogICAgKw0KICAg
ICtjaG9pY2UNCiAgICArICAgIGJvb2wgImNob2ljZSINCiAgICArDQogICAgK2NvbmZpZyBIDQog
ICAgKyAgICBib29sICJIIg0KICAgICsgICAgZGVwZW5kcyBvbiBJDQogICAgKw0KICAgICtlbmRj
aG9pY2UNCiAgICArDQogICAgK2Nob2ljZQ0KICAgICsgICAgYm9vbCAiY2hvaWNlIiBpZiBKDQog
ICAgKw0KICAgICtjb25maWcgSQ0KICAgICsgICAgYm9vbCAiSSINCiAgICArDQogICAgK2VuZGNo
b2ljZQ0KICAgICsNCiAgICArY29uZmlnIEoNCiAgICArICAgIGJvb2wNCiAgICArICAgIGRlcGVu
ZHMgb24gQQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxv
b3AyIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMg0KICAgIG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYzk5NzI0Mw0KICAgIC0tLSAvZGV2L251bGwN
CiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AyDQogICAgQEAgLTAs
MCArMSwzIEBADQogICAgK2NvbmZpZyBGT08NCiAgICArICAgIGJvb2wNCiAgICArICAgIGRlZmF1
bHQgRk9PDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9v
cDMgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AzDQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi45MGM4M2Q1DQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDMNCiAgICBAQCAtMCww
ICsxLDMgQEANCiAgICArY29uZmlnIEZPTw0KICAgICsgICAgYm9vbA0KICAgICsgICAgZGVmYXVs
dCB5IGlmIEZPTw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2Rl
cGxvb3A0IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNA0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNzg5ZDhiNw0KICAgIC0tLSAvZGV2L251
bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A0DQogICAgQEAg
LTAsMCArMSw3IEBADQogICAgK2NvbmZpZyBGT08NCiAgICArICAgIGJvb2wNCiAgICArICAgIGRl
cGVuZHMgb24gQkFSDQogICAgKw0KICAgICtjb25maWcgQkFSDQogICAgKyAgICBib29sDQogICAg
KyAgICBkZXBlbmRzIG9uIEZPTw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS2RlcGxvb3A1IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNQ0KICAg
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZjEyZmU2Yg0KICAgIC0t
LSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A1
DQogICAgQEAgLTAsMCArMSw3IEBADQogICAgK2NvbmZpZyBGT08NCiAgICArICAgIGJvb2wNCiAg
ICArICAgIHNlbGVjdCBCQVINCiAgICArDQogICAgK2NvbmZpZyBCQVINCiAgICArICAgIGJvb2wN
CiAgICArICAgIHNlbGVjdCBGT08NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tkZXBsb29wNiBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDYNCiAg
ICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmNiMWU3MDENCiAgICAt
LS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29w
Ng0KICAgIEBAIC0wLDAgKzEsNiBAQA0KICAgICtjb25maWcgRk9PDQogICAgKyAgICBib29sDQog
ICAgKw0KICAgICtjb25maWcgQkFSDQogICAgKyAgICBib29sDQogICAgKyAgICBzZWxlY3QgRk9P
IGlmIEZPTw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxv
b3A3IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wNw0KICAgIG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNjNkMmM1Nw0KICAgIC0tLSAvZGV2L251bGwN
CiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2RlcGxvb3A3DQogICAgQEAgLTAs
MCArMSwxMSBAQA0KICAgICtjaG9pY2UNCiAgICArICAgIGJvb2wgImNob2ljZSINCiAgICArDQog
ICAgK2NvbmZpZyBGT08NCiAgICArICAgIGJvb2wgImZvbyINCiAgICArICAgIGRlcGVuZHMgb24g
QkFSDQogICAgKw0KICAgICtjb25maWcgQkFSDQogICAgKyAgICBib29sICJiYXIiDQogICAgKw0K
ICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tkZXBsb29wOCBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDgNCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjg0ZWZkOGQNCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wOA0KICAg
IEBAIC0wLDAgKzEsOCBAQA0KICAgICtjaG9pY2UNCiAgICArICAgIGJvb2wgImNob2ljZSINCiAg
ICArICAgIGRlZmF1bHQgRk9PIGlmIEZPTw0KICAgICsNCiAgICArY29uZmlnIEZPTw0KICAgICsg
ICAgYm9vbCAiZm9vIg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDkgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2RlcGxvb3A5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li45MzlmN2Y0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LZGVwbG9vcDkNCiAgICBAQCAtMCwwICsxLDcgQEANCiAgICArY2hvaWNlDQogICAg
KyAgICBib29sICJjaG9pY2UiIGlmIEZPTw0KICAgICsNCiAgICArY29uZmlnIEZPTw0KICAgICsg
ICAgYm9vbCAiZm9vIg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZGlyZGVwIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tkaXJkZXANCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmNi
Yjg4YjkNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0tkaXJkZXANCiAgICBAQCAtMCwwICsxLDMwIEBADQogICAgK2NvbmZpZyBOT19ERVBfU1lN
DQogICAgKyAgICBib29sDQogICAgKw0KICAgICtjb25maWcgREVQX1NZTQ0KICAgICsgICAgYm9v
bA0KICAgICsgICAgZGVwZW5kcyBvbiBBDQogICAgKw0KICAgICtjb25maWcgREVQX1NZTQ0KICAg
ICsgICAgZGVwZW5kcyBvbiBCICYmIEMNCiAgICArDQogICAgK2NvbmZpZyBERVBfU1lNDQogICAg
KyAgICBkZXBlbmRzIG9uICFEDQogICAgKw0KICAgICsNCiAgICArY2hvaWNlIE5PX0RFUF9DSE9J
Q0UNCiAgICArICAgIGJvb2wgIm5vIGRlcC4gY2hvaWNlIg0KICAgICtlbmRjaG9pY2UNCiAgICAr
DQogICAgK2Nob2ljZSBERVBfQ0hPSUNFDQogICAgKyAgICBib29sICJkZXAuIGNob2ljZSINCiAg
ICArICAgIGRlcGVuZHMgb24gQQ0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2Nob2ljZSBE
RVBfQ0hPSUNFDQogICAgKyAgICBkZXBlbmRzIG9uIEINCiAgICArZW5kY2hvaWNlDQogICAgKw0K
ICAgICtjaG9pY2UgREVQX0NIT0lDRQ0KICAgICsgICAgZGVwZW5kcyBvbiBDDQogICAgK2VuZGNo
b2ljZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2VzY2FwZSBi
L3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXNjYXBlDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICBpbmRleCAwMDAwMDAwLi5lZTZiMmI2DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsr
KyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXNjYXBlDQogICAgQEAgLTAsMCArMSwzIEBA
DQogICAgK2NvbmZpZyBTVFJJTkcNCiAgICArICAgIHN0cmluZyAic3RyaW5nIg0KICAgICsgICAg
ZGVmYXVsdCAiXCJcXCINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tldmFsIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tldmFsDQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4xZTY0YjgzDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LZXZhbA0KICAgIEBAIC0wLDAgKzEs
MzQgQEANCiAgICArIyBFbmFibGVkL2Rpc2FibGVkIGluIHRoZSB0ZXN0DQogICAgK2NvbmZpZyBN
T0RVTEVTDQogICAgKyAgICBib29sICJtb2R1bGVzIg0KICAgICsgICAgb3B0aW9uIG1vZHVsZXMN
CiAgICArDQogICAgK2NvbmZpZyBODQogICAgKyAgICBkZWZfdHJpc3RhdGUgbg0KICAgICsNCiAg
ICArY29uZmlnIE0NCiAgICArICAgIGRlZl90cmlzdGF0ZSBtDQogICAgKw0KICAgICttZW51Y29u
ZmlnIFkNCiAgICArICAgIGRlZl90cmlzdGF0ZSB5DQogICAgKyAgICBwcm9tcHQgImZvbyINCiAg
ICArDQogICAgK2NvbmZpZyBZX1NUUklORw0KICAgICsgICAgc3RyaW5nDQogICAgKyAgICBkZWZh
dWx0ICJ5Ig0KICAgICsNCiAgICArY29uZmlnIEZPT19CQVJfU1RSSU5HDQogICAgKyAgICBzdHJp
bmcNCiAgICArICAgIGRlZmF1bHQgImZvbyBiYXIiDQogICAgKw0KICAgICtjb25maWcgSU5UXzM3
DQogICAgKyAgICBpbnQNCiAgICArICAgIGRlZmF1bHQgMzcNCiAgICArDQogICAgK2NvbmZpZyBI
RVhfMFgzNw0KICAgICsgICAgaGV4DQogICAgKyAgICBkZWZhdWx0IDB4MzcNCiAgICArDQogICAg
K2NvbmZpZyBIRVhfMzcNCiAgICArICAgIGhleA0KICAgICsgICAgZGVmYXVsdCAzNw0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2V4cHJfaXRlbXMgYi9zdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvS2V4cHJfaXRlbXMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K
ICAgIGluZGV4IDAwMDAwMDAuLmZiOTdhY2UNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIv
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tleHByX2l0ZW1zDQogICAgQEAgLTAsMCArMSwxMSBA
QA0KICAgICtjb25maWcgVEVTVA0KICAgICsgICAgYm9vbA0KICAgICsgICAgZGVmYXVsdCBBICYm
IChCIHx8ICFDICYmIEQgPSAiRSIpIHx8IEYgPiBHIHx8ICEhIUgNCiAgICArDQogICAgK2Nob2lj
ZSBDSE9JQ0UNCiAgICArICAgIGJvb2wgImNob2ljZSINCiAgICArDQogICAgK2NvbmZpZyBURVNU
X0NIT0lDRQ0KICAgICsgICAgYm9vbCAidGVzdCBjaG9pY2UiIGlmIEENCiAgICArDQogICAgK2Vu
ZGNob2ljZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2hlbHAg
Yi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2hlbHANCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLmI4MGMyZWINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0toZWxwDQogICAgQEAgLTAsMCArMSw1MCBAQA0K
ICAgICtjb25maWcgVFdPX0hFTFBfU1RSSU5HUw0KICAgICsgICAgYm9vbA0KICAgICsgICAgaGVs
cA0KICAgICsgICAgICBmaXJzdCBoZWxwIHN0cmluZw0KICAgICsNCiAgICArDQogICAgKw0KICAg
ICsNCiAgICArY29uZmlnIFRXT19IRUxQX1NUUklOR1MNCiAgICArICAgIGhlbHANCiAgICArICAg
ICAgc2Vjb25kIGhlbHAgc3RyaW5nDQogICAgKw0KICAgICtjb25maWcgTk9fQkxBTktfQUZURVJf
SEVMUA0KICAgICsgICAgYm9vbA0KICAgICsgICAgaGVscA0KICAgICsgICAgICBoZWxwIGZvcg0K
ICAgICsgICAgICBOT19CTEFOS19BRlRFUl9IRUxQDQogICAgK2Nob2ljZSBDSE9JQ0VfSEVMUA0K
ICAgICsgICAgYm9vbCAiY2hvaWNlIHdpdGggaGVscCINCiAgICArICAgIGhlbHANCiAgICArICBo
ZWxwIGZvcg0KICAgICsgIENIT0lDRV9IRUxQDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICAr
Y29uZmlnIEhFTFBfVEVSTUlOQVRFRF9CWV9DT01NRU5UDQogICAgKyAgYm9vbA0KICAgICsgIGhl
bHANCiAgICArIGENCiAgICArIGINCiAgICArIGMNCiAgICArIw0KICAgICsNCiAgICArY29uZmln
IFRSSUNLWV9IRUxQDQogICAgKyAgYm9vbA0KICAgICsgIC1oZWxwLS0tDQogICAgKw0KICAgICsN
CiAgICArICBhDQogICAgKyAgIGINCiAgICArICAgIGMNCiAgICArDQogICAgKyAgIGQNCiAgICAr
ICAgIGUNCiAgICArICAgICBmDQogICAgKw0KICAgICsNCiAgICArICBnDQogICAgKyAgIGgNCiAg
ICArICAgIGkNCiAgICArIw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS2lmcmVtb3ZhbCBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaWZyZW1vdmFsDQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5mOTQ0NzJjDQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaWZyZW1vdmFs
DQogICAgQEAgLTAsMCArMSw5OSBAQA0KICAgICsjIFRlc3Qgc29tZSB0cmlja3kgY2FzZXMgdGhh
dCBnaXZlIGNvbnNlY3V0aXZlICdpZicgbm9kZXMgZXZlbiBhZnRlcg0KICAgICsjIGZsYXR0ZW5p
bmcuIFNpbXBsZSBjYXNlcyBhcmUgZXhlcmNpc2VkIGEgdG9uIGVsc2V3aGVyZS4NCiAgICArDQog
ICAgK2lmIFgNCiAgICArZW5kaWYNCiAgICAraWYgWA0KICAgICtlbmRpZg0KICAgICsNCiAgICAr
Y29uZmlnIEENCiAgICArDQogICAgK2lmIFgNCiAgICArZW5kaWYNCiAgICAraWYgWA0KICAgICtl
bmRpZg0KICAgICsNCiAgICArY29uZmlnIEINCiAgICArDQogICAgK2lmIFgNCiAgICArZW5kaWYN
CiAgICAraWYgWA0KICAgICtlbmRpZg0KICAgICtpZiBYDQogICAgK2VuZGlmDQogICAgKw0KICAg
ICtjb25maWcgQw0KICAgICsNCiAgICAraWYgWA0KICAgICsgIGlmIFgNCiAgICArICAgIGlmIFgN
CiAgICArICAgIGVuZGlmDQogICAgKyAgICBpZiBYDQogICAgKyAgICBlbmRpZg0KICAgICsgIGVu
ZGlmDQogICAgKyAgaWYgWA0KICAgICsgICAgaWYgWA0KICAgICsgICAgZW5kaWYNCiAgICArICAg
IGlmIFgNCiAgICArICAgIGVuZGlmDQogICAgKyAgZW5kaWYNCiAgICArICBjb25maWcgRA0KICAg
ICtlbmRpZg0KICAgICtpZiBYDQogICAgK2VuZGlmDQogICAgKw0KICAgICttZW51ICJFIg0KICAg
ICsgIGlmIFgNCiAgICArICAgIGlmIFgNCiAgICArICAgIGVuZGlmDQogICAgKyAgZW5kaWYNCiAg
ICArICBpZiBYDQogICAgKyAgICBpZiBYDQogICAgKyAgICBlbmRpZg0KICAgICsgIGVuZGlmDQog
ICAgK2VuZG1lbnUNCiAgICArDQogICAgK21lbnUgIkYiDQogICAgKyAgaWYgWA0KICAgICsgIGVu
ZGlmDQogICAgKyAgaWYgWA0KICAgICsgIGVuZGlmDQogICAgKyAgaWYgWA0KICAgICsgICAgaWYg
WA0KICAgICsgICAgZW5kaWYNCiAgICArICAgIGlmIFgNCiAgICArICAgIGVuZGlmDQogICAgKyAg
ICBtZW51ICJHIg0KICAgICsgICAgZW5kbWVudQ0KICAgICsgIGVuZGlmDQogICAgK2VuZG1lbnUN
CiAgICArDQogICAgK2Nob2ljZSBIDQogICAgKyAgaWYgWA0KICAgICsgICAgaWYgWA0KICAgICsg
ICAgZW5kaWYNCiAgICArICBlbmRpZg0KICAgICsgIGlmIFgNCiAgICArICAgIGlmIFgNCiAgICAr
ICAgIGVuZGlmDQogICAgKyAgZW5kaWYNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9p
Y2UgSQ0KICAgICsgIGlmIFgNCiAgICArICBlbmRpZg0KICAgICsgIGlmIFgNCiAgICArICBlbmRp
Zg0KICAgICsgIGlmIFgNCiAgICArICAgIGlmIFgNCiAgICArICAgIGVuZGlmDQogICAgKyAgICBp
ZiBYDQogICAgKyAgICBlbmRpZg0KICAgICsgICAgY29uZmlnIEoNCiAgICArICBlbmRpZg0KICAg
ICtlbmRjaG9pY2UNCiAgICArDQogICAgK2lmIFgNCiAgICArZW5kaWYNCiAgICAraWYgWA0KICAg
ICtlbmRpZg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2ltcGx5
IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbXBseQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAw
NjQ0DQogICAgaW5kZXggMDAwMDAwMC4uM2NlMzQ2Zg0KICAgIC0tLSAvZGV2L251bGwNCiAgICAr
KysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2ltcGx5DQogICAgQEAgLTAsMCArMSwxNDUg
QEANCiAgICArY29uZmlnIE1PRFVMRVMNCiAgICArICAgIGRlZl9ib29sIHkNCiAgICArICAgIG9w
dGlvbiBtb2R1bGVzDQogICAgKw0KICAgICsjDQogICAgKyMgSW1wbGllZCBzeW1ib2xzIHdpdGgg
dW5tZXQgYW5kIG1ldCBkaXJlY3QgZGVwZW5kZW5jaWVzDQogICAgKyMNCiAgICArDQogICAgK2Nv
bmZpZyBJTVBMWV9ESVJFQ1RfREVQUw0KICAgICsgICAgZGVmX3RyaXN0YXRlIHkNCiAgICArICAg
IGltcGx5IFVOTUVUX0RJUkVDVF8xDQogICAgKyAgICBpbXBseSBVTk1FVF9ESVJFQ1RfMg0KICAg
ICsgICAgaW1wbHkgVU5NRVRfRElSRUNUXzMNCiAgICArICAgIGltcGx5IE1FVF9ESVJFQ1RfMQ0K
ICAgICsgICAgaW1wbHkgTUVUX0RJUkVDVF8yDQogICAgKyAgICBpbXBseSBNRVRfRElSRUNUXzMN
CiAgICArICAgIGltcGx5IE1FVF9ESVJFQ1RfNA0KICAgICsNCiAgICArY29uZmlnIFVOTUVUX0RJ
UkVDVF8xDQogICAgKyAgICB0cmlzdGF0ZQ0KICAgICsgICAgZGVwZW5kcyBvbiBuDQogICAgKw0K
ICAgICtpZiBuDQogICAgK2NvbmZpZyBVTk1FVF9ESVJFQ1RfMg0KICAgICsgICAgdHJpc3RhdGUN
CiAgICArZW5kaWYNCiAgICArDQogICAgK21lbnUgIm1lbnUiDQogICAgKyAgICBkZXBlbmRzIG9u
IG4NCiAgICArDQogICAgK2NvbmZpZyBVTk1FVF9ESVJFQ1RfMw0KICAgICsgICAgdHJpc3RhdGUN
CiAgICArDQogICAgK2VuZG1lbnUNCiAgICArDQogICAgK2NvbmZpZyBNRVRfRElSRUNUXzENCiAg
ICArICAgIHRyaXN0YXRlDQogICAgKw0KICAgICtjb25maWcgTUVUX0RJUkVDVF8yDQogICAgKyAg
ICBkZXBlbmRzIG9uIHkNCiAgICArICAgIHRyaXN0YXRlDQogICAgKw0KICAgICtpZiB5DQogICAg
K2NvbmZpZyBNRVRfRElSRUNUXzMNCiAgICArICAgIHRyaXN0YXRlDQogICAgK2VuZGlmDQogICAg
Kw0KICAgICttZW51ICJtZW51Ig0KICAgICsgICAgZGVwZW5kcyBvbiB5DQogICAgKw0KICAgICtj
b25maWcgTUVUX0RJUkVDVF80DQogICAgKyAgICB0cmlzdGF0ZQ0KICAgICsNCiAgICArZW5kbWVu
dQ0KICAgICsNCiAgICArIw0KICAgICsjICdpbXBseScgd2l0aCBjb25kaXRpb24NCiAgICArIw0K
ICAgICsNCiAgICArY29uZmlnIElNUExZX0NPTkQNCiAgICArICAgIGRlZl90cmlzdGF0ZSB5DQog
ICAgKyAgICB0cmlzdGF0ZQ0KICAgICsgICAgaW1wbHkgSU1QTElFRF9OX0NPTkQgaWYgbg0KICAg
ICsgICAgaW1wbHkgSU1QTElFRF9NX0NPTkQgaWYgbQ0KICAgICsgICAgaW1wbHkgSU1QTElFRF9Z
X0NPTkQgaWYgeQ0KICAgICsNCiAgICArY29uZmlnIElNUExJRURfTl9DT05EDQogICAgKyAgICB0
cmlzdGF0ZQ0KICAgICsNCiAgICArY29uZmlnIElNUExJRURfTV9DT05EDQogICAgKyAgICB0cmlz
dGF0ZQ0KICAgICsNCiAgICArY29uZmlnIElNUExJRURfWV9DT05EDQogICAgKyAgICB0cmlzdGF0
ZQ0KICAgICsNCiAgICArIw0KICAgICsjIEltcGx5aW5nIGZyb20gc3ltYm9sIHdpdGggdmFsdWUg
bg0KICAgICsjDQogICAgKw0KICAgICsjIFdpbGwgZGVmYXVsdCB0byAnbicNCiAgICArY29uZmln
IElNUExZX05fMQ0KICAgICsgICAgdHJpc3RhdGUNCiAgICArICAgIGltcGx5IElNUExJRURfRlJP
TV9OXzENCiAgICArDQogICAgKyMgVGhpcyB0ZXN0IGFsc28gZGlzYWJsZXMgdGhlIGltcGx5LCBz
byBpdCdzIGtpbmRhIHJlZHVuZGFudCwgYnV0IHdoeSBub3QNCiAgICAraWYgbg0KICAgICtjb25m
aWcgSU1QTFlfTl8yDQogICAgKyAgICB0cmlzdGF0ZQ0KICAgICsgICAgaW1wbHkgSU1QTElFRF9G
Uk9NX05fMg0KICAgICtlbmRpZg0KICAgICsNCiAgICArY29uZmlnIElNUExJRURfRlJPTV9OXzEN
CiAgICArICAgIHRyaXN0YXRlDQogICAgKw0KICAgICtjb25maWcgSU1QTElFRF9GUk9NX05fMg0K
ICAgICsgICAgdHJpc3RhdGUNCiAgICArDQogICAgKyMNCiAgICArIyBJbXBseWluZyBmcm9tIHN5
bWJvbCB3aXRoIHZhbHVlIG0NCiAgICArIw0KICAgICsNCiAgICArY29uZmlnIElNUExZX00NCiAg
ICArICAgIGRlZl90cmlzdGF0ZSBtDQogICAgKyAgICBpbXBseSBJTVBMSUVEX00NCiAgICArICAg
ICMgSW1wbHlpbmcgYSBib29sIHRvICdtJyBtYWtlcyBpdCBkZWZhdWx0IHRvICd5Jw0KICAgICsg
ICAgaW1wbHkgSU1QTElFRF9NX0JPT0wNCiAgICArDQogICAgK2NvbmZpZyBJTVBMSUVEX00NCiAg
ICArICAgIHRyaXN0YXRlDQogICAgKw0KICAgICtjb25maWcgSU1QTElFRF9NX0JPT0wNCiAgICAr
ICAgIGJvb2wNCiAgICArDQogICAgKyMNCiAgICArIyAnaW1wbHknIHdoaWNoIHNob3VsZCByYWlz
ZSBhbiAnbScgZGVmYXVsdCB0byAneScNCiAgICArIw0KICAgICsNCiAgICArY29uZmlnIElNUExZ
X01fVE9fWQ0KICAgICsgICAgdHJpc3RhdGUNCiAgICArICAgIGRlZmF1bHQgeQ0KICAgICsgICAg
aW1wbHkgSU1QTElFRF9NX1RPX1kNCiAgICArDQogICAgK2NvbmZpZyBJTVBMSUVEX01fVE9fWQ0K
ICAgICsgICAgdHJpc3RhdGUNCiAgICArICAgIGRlZmF1bHQgbQ0KICAgICsNCiAgICArIw0KICAg
ICsjIFVzZWQgZm9yIHRlc3RpbmcgdXNlciB2YWx1ZXMNCiAgICArIw0KICAgICsNCiAgICArY29u
ZmlnIERJUkVDVF9ERVANCiAgICArICAgIHRyaXN0YXRlICJkaXJlY3QgZGVwIg0KICAgICsNCiAg
ICArY29uZmlnIElNUExZDQogICAgKyAgICB0cmlzdGF0ZSAiaW1wbHkiDQogICAgKyAgICBpbXBs
eSBJTVBMSUVEX1RSSVNUQVRFDQogICAgKyAgICBpbXBseSBJTVBMSUVEX0JPT0wNCiAgICArDQog
ICAgK2NvbmZpZyBJTVBMSUVEX1RSSVNUQVRFDQogICAgKyAgICB0cmlzdGF0ZSAiaW1wbGllZCB0
cmlzdGF0ZSINCiAgICArICAgIGRlcGVuZHMgb24gRElSRUNUX0RFUA0KICAgICsNCiAgICArY29u
ZmlnIElNUExJRURfQk9PTA0KICAgICsgICAgYm9vbCAiaW1wbGllZCBib29sIg0KICAgICsgICAg
ZGVwZW5kcyBvbiBESVJFQ1RfREVQDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LaW5jbHVkZV9wYXRoIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tpbmNsdWRl
X3BhdGgNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjdhM2Jh
ZGINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tpbmNsdWRlX3BhdGgNCiAgICBAQCAtMCwwICsxLDEyIEBADQogICAgK2NvbmZpZyBUT1ANCiAg
ICArCWJvb2wNCiAgICArDQogICAgK3NvdXJjZSAiS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzEiDQog
ICAgKw0KICAgICtjb25maWcgVE9QDQogICAgKwlib29sDQogICAgKw0KICAgICtzb3VyY2UgIktp
bmNsdWRlX3BhdGhfc291cmNlZF8xIg0KICAgICsNCiAgICArY29uZmlnIFRPUA0KICAgICsJYm9v
bA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0
aF9zb3VyY2VkXzEgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2luY2x1ZGVfcGF0aF9zb3Vy
Y2VkXzENCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmY0ZGVl
OTgNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0tpbmNsdWRlX3BhdGhfc291cmNlZF8xDQogICAgQEAgLTAsMCArMSwxMiBAQA0KICAgICtjb25m
aWcgT05FX0RPV04NCiAgICArCWJvb2wNCiAgICArDQogICAgK3NvdXJjZSAiS2luY2x1ZGVfcGF0
aF9zb3VyY2VkXzIiDQogICAgKw0KICAgICtjb25maWcgT05FX0RPV04NCiAgICArCWJvb2wNCiAg
ICArDQogICAgK3NvdXJjZSAiS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzIiDQogICAgKw0KICAgICtj
b25maWcgT05FX0RPV04NCiAgICArCWJvb2wNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8yIGIvc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL0tpbmNsdWRlX3BhdGhfc291cmNlZF8yDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQN
CiAgICBpbmRleCAwMDAwMDAwLi4wNjhmMThkDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBi
L3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaW5jbHVkZV9wYXRoX3NvdXJjZWRfMg0KICAgIEBA
IC0wLDAgKzEsMTEgQEANCiAgICArY29uZmlnIFRXT19ET1dODQogICAgKwlib29sDQogICAgKw0K
ICAgICttZW51ICJtZW51Ig0KICAgICtlbmRtZW51DQogICAgKw0KICAgICtjb21tZW50ICJjb21t
ZW50Ig0KICAgICsNCiAgICArY2hvaWNlDQogICAgKwlib29sICJjaG9pY2UiDQogICAgK2VuZGNo
b2ljZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2l0ZW1saXN0
cyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaXRlbWxpc3RzDQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi44YWE3MTA3DQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LaXRlbWxpc3RzDQogICAgQEAgLTAs
MCArMSwzNiBAQA0KICAgICtjb21tZW50ICJjb21tZW50IDEiDQogICAgKw0KICAgICtjaG9pY2UN
CiAgICArICAgIGJvb2wgImNob2ljZSAxIg0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK21l
bnUgIm1lbnUgMSINCiAgICArDQogICAgK2Nob2ljZSBOQU1FRA0KICAgICsgICAgYm9vbCAiY2hv
aWNlIDIiDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArbWVudSAibWVudSAyIg0KICAgICtt
ZW51ICJtZW51IDMiDQogICAgK2NvbW1lbnQgImNvbW1lbnQgMiINCiAgICArZW5kbWVudQ0KICAg
ICsNCiAgICArY2hvaWNlDQogICAgKyAgICBib29sICJjaG9pY2UgMyINCiAgICArZW5kY2hvaWNl
DQogICAgKw0KICAgICtjaG9pY2UgTkFNRUQNCiAgICArICAgIGJvb2wNCiAgICArZW5kY2hvaWNl
DQogICAgKw0KICAgICtlbmRtZW51DQogICAgKw0KICAgICttZW51ICJtZW51IDQiDQogICAgK2Vu
ZG1lbnUNCiAgICArDQogICAgK2NvbW1lbnQgImNvbW1lbnQgMyINCiAgICArDQogICAgK2VuZG1l
bnUNCiAgICArDQogICAgK21lbnUgIm1lbnUgNSINCiAgICArZW5kbWVudQ0KICAgIGRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2xvY2F0aW9uIGIvc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0tsb2NhdGlvbg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
MDAwMDAwMC4uZjk5NzA1NQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS2xvY2F0aW9uDQogICAgQEAgLTAsMCArMSw3MiBAQA0KICAgICtpZiBV
TkRFRklORUQNCiAgICArZW5kaWYNCiAgICArDQogICAgK2NvbmZpZyBTSU5HTEVfREVGDQogICAg
KyAgICBib29sDQogICAgKw0KICAgICtjb25maWcgTVVMVElfREVGDQogICAgKyAgICBib29sDQog
ICAgKw0KICAgICsjIFRocm93IGluIHNvbWUgbGluZSBjb250aW51YXRpb25zIHRvbyB0byBtYWtl
IHN1cmUgaXQgZG9lc24ndCBtZXNzIHVwIHRoZSBsaW5lDQogICAgKyMgbnVtYmVycw0KICAgICtp
ZiB5ICYmIFwNCiAgICArICAgeQ0KICAgICtpZiB5ICYmIFwNCiAgICArICAgeSAmJiBcDQogICAg
KyAgIHkNCiAgICArDQogICAgKyMgVGhyb3cgaW4gc29tZSBoZWxwIHRleHRzIHRvbw0KICAgICsN
CiAgICArY29uZmlnIEhFTFBfMQ0KICAgICsgICAgYm9vbCAiaGVscCAxIg0KICAgICsgICAgaGVs
cA0KICAgICtjb25maWcgSEVMUF8yDQogICAgKyAgICBib29sICJoZWxwIDIiDQogICAgKyAgICBo
ZWxwDQogICAgKyAgICAgIGZvbw0KICAgICsgICAgICBiYXINCiAgICArDQogICAgKyAgICAgICAg
YmF6DQogICAgKw0KICAgICtjb25maWcgSEVMUF8zDQogICAgKyAgICBoZWxwDQogICAgKyAgICAg
IGZvbw0KICAgICsgICAgICBiYXINCiAgICArICAgIGJvb2wNCiAgICArY29uZmlnIFwNCiAgICAr
TVVMVElfREVGDQogICAgKw0KICAgICtjb25maWcgTVVMVElfREVGDQogICAgKw0KICAgICtlbmRp
Zg0KICAgICtlbmRpZg0KICAgICsNCiAgICArIyBFeHBhbmRzIHRvICJ0ZXN0cy9LbG9jYXRpb25f
c291cmNlZCINCiAgICArc291cmNlICIkVEVTVFNfRElSX0ZST01fRU5WL0tsb2NhdGlvbiRfU09V
UkNFRCINCiAgICArDQogICAgKyMgRXhwYW5kcyB0byAic3ViL0tsb2NhdGlvbl9yc291cmNlZCIN
CiAgICArcnNvdXJjZSAiJFNVQl9ESVJfRlJPTV9FTlYvS2xvY2F0aW9uJF9SU09VUkNFRCINCiAg
ICArDQogICAgKyMgRXhwYW5kcyB0byAidGVzdHMvKnViL0tsb2NhdGlvbl9nc291cmNlZFsxMl0i
LCBtYXRjaGluZw0KICAgICsjIHRlc3RzL3N1Yi9LbG9jYXRpb25fZ3NvdXJjZWR7MSwyfQ0KICAg
ICtzb3VyY2UgIiRURVNUU19ESVJfRlJPTV9FTlYvKnViL0tsb2NhdGlvbiRfR1NPVVJDRURbMTJd
Ig0KICAgICsjIFRlc3Qgb2xkIHN5bnRheCB0b28NCiAgICArZ3NvdXJjZSAiJFRFU1RTX0RJUl9G
Uk9NX0VOVi8qdWIvS2xvY2F0aW9uJF9HU09VUkNFRFsxMl0iDQogICAgKw0KICAgICsjIEV4cGFu
ZHMgdG8gInN1Yi9LbG9jYXRpb25fZ3Jzb3VyY2VkWzEyXSIsIG1hdGNoaW5nDQogICAgKyMgdGVz
dHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWR7MSwyfQ0KICAgICtyc291cmNlICIkU1VCX0RJUl9G
Uk9NX0VOVi9LbG9jYXRpb24kX0dSU09VUkNFRFsxMl0iDQogICAgKyMgVGVzdCBvbGQgc3ludGF4
IHRvbw0KICAgICtncnNvdXJjZSAiJFNVQl9ESVJfRlJPTV9FTlYvS2xvY2F0aW9uJF9HUlNPVVJD
RURbMTJdIg0KICAgICsNCiAgICArIyBOby1vcHMNCiAgICArb3NvdXJjZSAibm9uZXhpc3RlbnQi
DQogICAgK29zb3VyY2UgIm5vbmV4aXN0ZW50KiINCiAgICArZ3NvdXJjZSAibm9uZXhpc3RlbnQi
DQogICAgK2dzb3VyY2UgIm5vbmV4aXN0ZW50KiINCiAgICArb3Jzb3VyY2UgIm5vbmV4aXN0ZW50
Ig0KICAgICtvcnNvdXJjZSAibm9uZXhpc3RlbnQqIg0KICAgICtncnNvdXJjZSAibm9uZXhpc3Rl
bnQiDQogICAgK2dyc291cmNlICJub25leGlzdGVudCoiDQogICAgKw0KICAgICtjb25maWcgTVVM
VElfREVGDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbG9jYXRp
b25fc291cmNlZCBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbG9jYXRpb25fc291cmNlZA0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNmUxOWY3Ng0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS2xvY2F0
aW9uX3NvdXJjZWQNCiAgICBAQCAtMCwwICsxLDE4IEBADQogICAgKw0KICAgICsNCiAgICArY29u
ZmlnIE1VTFRJX0RFRg0KICAgICsNCiAgICArY2hvaWNlIENIT0lDRQ0KICAgICsJYm9vbCAiY2hv
aWNlIg0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2NvbmZpZyBNRU5VX0hPT0sNCiAgICAr
CWJvb2wNCiAgICArDQogICAgK21lbnUgIm1lbnUiDQogICAgK2VuZG1lbnUNCiAgICArDQogICAg
K2NvbmZpZyBDT01NRU5UX0hPT0sNCiAgICArCWJvb2wNCiAgICArDQogICAgK2NvbW1lbnQgImNv
bW1lbnQiDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWFpbm1l
bnUgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21haW5tZW51DQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi44MDcxM2MwDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWFpbm1lbnUNCiAgICBAQCAtMCww
ICsxLDUgQEANCiAgICArY29uZmlnIEZPTw0KICAgICsgICAgc3RyaW5nDQogICAgKyAgICBvcHRp
b24gZW52PSJGT08iDQogICAgKw0KICAgICttYWlubWVudSAiLS0tJEZPTy0tLSINCiAgICBkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttZW51Y29uZmlnIGIvc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL0ttZW51Y29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi45YTRjYzExDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LbWVudWNvbmZpZw0KICAgIEBAIC0wLDAgKzEsMzcgQEAN
CiAgICArIyBNZW51IG5vZGVzIHdpdGggaXNfbWVudWNvbmZpZyBGYWxzZQ0KICAgICsNCiAgICAr
Y29uZmlnIE5PVF9NRU5VQ09ORklHXzENCiAgICArCWJvb2wNCiAgICArDQogICAgK2NvbmZpZyBO
T1RfTUVOVUNPTkZJR18yDQogICAgKwlib29sICJub3QgbWVudWNvbmZpZyAyIg0KICAgICsNCiAg
ICArY29uZmlnIE1FTlVDT05GSUdfTVVMVElfREVGDQogICAgKwlib29sICJtZW51Y29uZmlnIG11
bHRpIGRlZiAxIg0KICAgICsNCiAgICArY29uZmlnIENPTU1FTlRfSE9PSw0KICAgICsJYm9vbA0K
ICAgICsNCiAgICArY29tbWVudCAibm90IG1lbnVjb25maWcgMyINCiAgICArDQogICAgKw0KICAg
ICsjIE1lbnUgbm9kZXMgd2l0aCBpc19tZW51Y29uZmlnIFRydWUNCiAgICArDQogICAgK21lbnVj
b25maWcgTUVOVUNPTkZJR18xDQogICAgKwlib29sICJtZW51Y29uZmlnIDEiDQogICAgKw0KICAg
ICttZW51Y29uZmlnIE1FTlVDT05GSUdfTVVMVElfREVGDQogICAgKwlib29sICJtZW51Y29uZmln
IG11bHRpIGRlZiAyIg0KICAgICsNCiAgICArY29uZmlnIE1FTlVfSE9PSw0KICAgICsJYm9vbA0K
ICAgICsNCiAgICArbWVudSAibWVudWNvbmZpZyAyIg0KICAgICtlbmRtZW51DQogICAgKw0KICAg
ICtjb25maWcgQ0hPSUNFX0hPT0sNCiAgICArCWJvb2wNCiAgICArDQogICAgK2Nob2ljZQ0KICAg
ICsJYm9vbCAibWVudWNvbmZpZyAzIg0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNjIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L0ttaXNjDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5kOWE3
OTlkDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0
cy9LbWlzYw0KICAgIEBAIC0wLDAgKzEsODIgQEANCiAgICArIyBGb3IgdGVzdGluZyB2YXJpb3Vz
IG1pbm9yIEFQSXMNCiAgICArDQogICAgKyMgb3B0aW9uYWwgY2hvaWNlcw0KICAgICsNCiAgICAr
Y2hvaWNlIE5PVF9PUFRJT05BTA0KICAgICsgICAgYm9vbCAibm90IG9wdGlvbmFsIg0KICAgICtj
b25maWcgQQ0KICAgICsgICAgYm9vbCAiQSINCiAgICArY29uZmlnIEINCiAgICArICAgIGJvb2wg
IkIiDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArY2hvaWNlIE9QVElPTkFMDQogICAgKyAg
ICB0cmlzdGF0ZSAib3B0aW9uYWwiDQogICAgKyAgICBvcHRpb25hbA0KICAgICtjb25maWcgQw0K
ICAgICsgICAgdHJpc3RhdGUgIkMiDQogICAgK2NvbmZpZyBEDQogICAgKyAgICB0cmlzdGF0ZSAi
RCINCiAgICArIyBRdWlya3kgc3ltYm9scyAtIG5vdCBwcm9wZXIgY2hvaWNlIHN5bWJvbA0KICAg
ICsNCiAgICArY29uZmlnIFExDQogICAgKyAgICB0cmlzdGF0ZSAiUTEiDQogICAgKyAgICBkZXBl
bmRzIG9uIEQNCiAgICArDQogICAgK2NvbmZpZyBRMg0KICAgICsgICAgdHJpc3RhdGUgIlEyIg0K
ICAgICsgICAgZGVwZW5kcyBvbiBRMQ0KICAgICsNCiAgICArY29uZmlnIFEzDQogICAgKyAgICB0
cmlzdGF0ZSAiUTMiDQogICAgKyAgICBkZXBlbmRzIG9uIEQNCiAgICArDQogICAgK2VuZGNob2lj
ZQ0KICAgICsNCiAgICArIyBVc2VyIHZhbHVlcw0KICAgICsNCiAgICArY29uZmlnIEJPT0wNCiAg
ICArICAgIGJvb2wgImJvb2wiIGlmIE5PVF9ERUZJTkVEXzENCiAgICArDQogICAgK2NvbmZpZyBU
UklTVEFURQ0KICAgICsgICAgdHJpc3RhdGUgIyBWaXNpYmlsaXR5IHNob3VsZCBub3QgYWZmZWN0
IHVzZXIgdmFsdWUNCiAgICArDQogICAgK2NvbmZpZyBTVFJJTkcNCiAgICArICAgIHN0cmluZyAi
c3RyaW5nIg0KICAgICsNCiAgICArY29uZmlnIElOVA0KICAgICsgICAgaW50ICMgVmlzaWJpbGl0
eSBzaG91bGQgbm90IGFmZmVjdCB1c2VyIHZhbHVlDQogICAgKw0KICAgICtjb25maWcgSEVYDQog
ICAgKyAgICBoZXggImhleCINCiAgICArICAgIGRlcGVuZHMgb24gTk9UX0RFRklORURfMg0KICAg
ICsNCiAgICArY29uZmlnIENPTU1FTlRfSE9PSw0KICAgICtjb21tZW50ICJjb21tZW50Ig0KICAg
ICsNCiAgICArY29uZmlnIE1FTlVfSE9PSw0KICAgICttZW51ICJtZW51Ig0KICAgICsgICAgZGVw
ZW5kcyBvbiBOT1RfREVGSU5FRF8zIHx8IE5PVF9ERUZJTkVEXzINCiAgICArICAgIGRlcGVuZHMg
b24gIU5PVF9ERUZJTkVEXzQNCiAgICArZW5kbWVudQ0KICAgICsNCiAgICArY29uZmlnIEZST01f
RU5WDQogICAgKyAgICBzdHJpbmcgImZyb20gZW52Ig0KICAgICsgICAgb3B0aW9uIGVudj0iRU5W
X1ZBUiINCiAgICArDQogICAgK2NvbmZpZyBGUk9NX0VOVl9NSVNTSU5HDQogICAgKyAgICBzdHJp
bmcgImZyb20gZW52IG1pc3NpbmciDQogICAgKyAgICBvcHRpb24gZW52PSJNSVNTSU5HX0VOVl9W
QVIiDQogICAgKyAgICBkZWZhdWx0ICJtaXNzaW5nIg0KICAgICsNCiAgICArY29uZmlnIEZST01f
RU5WX1dFSVJEDQogICAgKyAgICBzdHJpbmcNCiAgICArICAgIGRlZmF1bHQgIndlaXJkIg0KICAg
ICsgICAgb3B0aW9uIGVudj0iRU5WX1ZBUiINCiAgICArDQogICAgK2NvbmZpZyBOT1RfQUxMTk9D
T05GSUdfWQ0KICAgICsgICAgYm9vbCAibm90IGFsbG5vY29uZmlnX3kiDQogICAgKw0KICAgICtj
b25maWcgQUxMTk9DT05GSUdfWQ0KICAgICsgICAgYm9vbCAiYWxsbm9jb25maWdfeSINCiAgICAr
ICAgIG9wdGlvbiBhbGxub2NvbmZpZ195DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LbWlzc2luZ3Jzb3VyY2UgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21p
c3Npbmdyc291cmNlDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li45MjRiMGIzDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LbWlzc2luZ3Jzb3VyY2UNCiAgICBAQCAtMCwwICsxIEBADQogICAgK3Jzb3VyY2Ug
Im5vbmV4aXN0ZW50Ig0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
S21pc3Npbmdzb3VyY2UgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS21pc3Npbmdzb3VyY2UN
CiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmEzYTZjMjUNCiAg
ICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0ttaXNz
aW5nc291cmNlDQogICAgQEAgLTAsMCArMSBAQA0KICAgICtzb3VyY2UgIm5vbmV4aXN0ZW50Ig0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS29yZGVyIGIvc3VwcG9y
dC9rY29uZmlnbGliL3Rlc3RzL0tvcmRlcg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
aW5kZXggMDAwMDAwMC4uM2E4ZGZmYQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvS29yZGVyDQogICAgQEAgLTAsMCArMSwzNSBAQA0KICAgICtj
b25maWcgTw0KICAgICsJaW50ICJPIg0KICAgICsJZGVmYXVsdCAwDQogICAgKw0KICAgICtjb25m
aWcgUg0KICAgICsJaW50ICJSIg0KICAgICsJZGVmYXVsdCAxDQogICAgKw0KICAgICtjb25maWcg
RA0KICAgICsJaW50ICJEIg0KICAgICsJZGVmYXVsdCAyDQogICAgKw0KICAgICtjb25maWcgRQ0K
ICAgICsJaW50ICJFIg0KICAgICsJZGVmYXVsdCAzDQogICAgKw0KICAgICsjIERlZmluZWQgdHdp
Y2UNCiAgICArY29uZmlnIFINCiAgICArCWludCAiUiINCiAgICArDQogICAgK2NvbmZpZyBSMg0K
ICAgICsJaW50ICJSMiINCiAgICArCWRlZmF1bHQgNA0KICAgICsNCiAgICArY29uZmlnIEkNCiAg
ICArCWludCAiSSINCiAgICArCWRlZmF1bHQgNQ0KICAgICsNCiAgICArY29uZmlnIE4NCiAgICAr
CWludCAiTiINCiAgICArCWRlZmF1bHQgNg0KICAgICsNCiAgICArY29uZmlnIEcNCiAgICArCWlu
dCAiRyINCiAgICArCWRlZmF1bHQgNw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS3ByZXByb2Nlc3MgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3ByZXByb2Nl
c3MNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmUzMGIzODkN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tw
cmVwcm9jZXNzDQogICAgQEAgLTAsMCArMSwxNDcgQEANCiAgICArIyBTaW1wbGUgYXNzaWdubWVu
dHMgKHdpdGggYmFkIGZvcm1hdHRpbmcsIGFzIGFuIGFkZGl0aW9uYWwgdGVzdCkNCiAgICArDQog
ICAgK3NpbXBsZS1yZWN1cnNpdmU9Zm9vDQogICAgK3NpbXBsZS1pbW1lZGlhdGU6PWJhcg0KICAg
ICsjIFNob3VsZCBiZWNvbWUgcmVjdXJzaXZlDQogICAgK3NpbXBsZS1yZWN1cnNpdmUtMis9YmF6
DQogICAgKw0KICAgICsJIHdoaXRlc3BhY2VkCSA9CSBmb28NCiAgICArDQogICAgKw0KICAgICsj
IFNpbXBsZSArPSB0ZXN0LiArPSBzaG91bGQgcHJlc2VydmUgdGhlIGZsYXZvciBvZiB0aGUgdmFy
aWFibGUgKHNpbXBsZSB2cy4NCiAgICArIyByZWN1cnNpdmUpLg0KICAgICsNCiAgICArcHJlc2Vy
dmUtcmVjdXJzaXZlID0gZm9vDQogICAgK3ByZXNlcnZlLXJlY3Vyc2l2ZSArPSBiYXINCiAgICAr
DQogICAgK3ByZXNlcnZlLWltbWVkaWF0ZSA6PSBmb28NCiAgICArcHJlc2VydmUtaW1tZWRpYXRl
ICs9IGJhcg0KICAgICsNCiAgICArDQogICAgKyMgUmVjdXJzaXZlIHN1YnN0aXR1dGlvbg0KICAg
ICsNCiAgICArcmVjdXJzaXZlID0gJChmb28pICQoYmFyKSAkKCQoYi1jaGFyKWEkKHotY2hhcikp
DQogICAgK3JlY3Vyc2l2ZSArPSAkKGluZGlyKQ0KICAgICsNCiAgICArZm9vID0gYWJjDQogICAg
K2JhciA9IGRlZg0KICAgICtiYXogPSBnaGkNCiAgICArDQogICAgK2ItY2hhciA9IGINCiAgICAr
ei1jaGFyID0geg0KICAgICsNCiAgICAraW5kaXIgPSBqa2wgJChpbmRpci0yKQ0KICAgICtpbmRp
ci0yID0gbW5vDQogICAgKw0KICAgICsNCiAgICArIyBJbW1lZGlhdGUgc3Vic3RpdHV0aW9uDQog
ICAgKw0KICAgICtkZWYgPSBmb28NCiAgICAraW1tZWRpYXRlIDo9ICQodW5kZWYpJChkZWYpJCh1
bmRlZikkKGRlZikNCiAgICArZGVmID0gYmFyDQogICAgK3VuZGVmID0gYmFyDQogICAgKw0KICAg
ICsNCiAgICArIyBGdW5jdGlvbiBjYWxscw0KICAgICsNCiAgICArIyBDaGFpbmVkIGZ1bmN0aW9u
IGNhbGwNCiAgICArcXVvdGUgPSAiJCgxKSIgIiQoMikiDQogICAgK3Jldi1xdW90ZSA9ICQocXVv
dGUsJCgyKSwkKDEpKQ0KICAgICtzdXJyb3VuZC1yZXYtcXVvdGUgPSAkKDApICQocmV2LXF1b3Rl
LCQoMSksJCgyKSkgJCgwKQ0KICAgICtzdXJyb3VuZC1yZXYtcXVvdGUtdW51c2VkLWFyZyA9ICQo
c3Vycm91bmQtcmV2LXF1b3RlLCQoMSksJCgyKSkgJCgzKQ0KICAgICsjIE5vIHZhbHVlIGlzIHBh
c3NlZCBmb3IgJCgzKSwgc28gaXQgZXhwYW5kcyB0byBub3RoaW5nDQogICAgK2ZuLWluZGlyID0g
c3Vycm91bmQtcmV2LXF1b3RlDQogICAgK21lc3N5LWZuLXJlcyA9ICQoJChmbi1pbmRpciktdW51
c2VkLWFyZywgYSAgYiAsIGMgIGQgKQ0KICAgICsNCiAgICArIyBTcGVjaWFsIGNoYXJhY3RlcnMg
aW4gZnVuY3Rpb24gY2FsbA0KICAgICtjb21tYSA9ICwNCiAgICArcmlnaHQtcGFyZW4gPSApDQog
ICAgK2RvbGxhciA9ICQNCiAgICArbGVmdC1wYXJlbiA9ICgNCiAgICArZm4gPSAiJCgxKSINCiAg
ICArc3BlY2lhbC1jaGFycy1mbi1yZXMgPSAkKGZuLCQoY29tbWEpJChkb2xsYXIpJChsZWZ0LXBh
cmVuKWZvbyQocmlnaHQtcGFyZW4pKQ0KICAgICsNCiAgICArDQogICAgKyMgVmFyaWFibGUgZXhw
YW5zaW9ucyBpbiB2YXJpb3VzIGxvY2F0aW9ucyAodmVyaWZpZWQgYnkgY2hlY2tpbmcgaG93IHRo
ZSBzeW1ib2wNCiAgICArIyBwcmludHMpDQogICAgKw0KICAgICtxYXogPSBRQVoNCiAgICArZWNo
byA9ICQoMSkNCiAgICAraWdub3JlLWZpcnN0ID0gJCgyKQ0KICAgICsNCiAgICArY29uZmlnIFBS
SU5UX01FDQogICAgKwlzdHJpbmcgIiQoRU5WXzEpIiBpZiAoJChlY2hvLEZPTykgJiYgJChlY2hv
LEJBUikpIHx8ICEkKGVjaG8sQkFaKSB8fCAhKCgkKHFheikpKQ0KICAgICsJZGVmYXVsdCAiJChl
Y2hvLCJmb28iKSIgaWYgImZvbyAkKGVjaG8sImJhciIpIGJheiIgPSAiJCh1bmRlZmluZWQpIg0K
ICAgICsNCiAgICArIyBFeHBhbnNpb24gd2l0aGluIGEgc3ltYm9sIHRva2VuLCB3aXRoIGRlbGli
ZXJhdGUgc2xvcHBpbmVzcw0KICAgICtjb25maWcgUFJJTlRfJChpZ25vcmUtZmlyc3QsICAsTUUp
X1RPTw0KICAgICsJYm9vbCAiZm9vIg0KICAgICsJZGVmYXVsdCBGT08kKGlnbm9yZS1maXJzdCwg
ICAgLEJBUilCQVokKHFheikgaWYgJChxYXopJiYkKHFheilGT08mJngkKGlnbm9yZS1maXJzdCwg
ICx4eCkNCiAgICArDQogICAgKw0KICAgICsjIFJlY3Vyc2l2ZSBleHBhbnNpb24gKHRocm93cyBh
biBleGNlcHRpb24pDQogICAgKw0KICAgICtyZWMtMSA9IHggJChyZWMtMikgeQ0KICAgICtyZWMt
MiA9IHggJChyZWMtMykgeQ0KICAgICtyZWMtMyA9IHggJChyZWMtMSkgeQ0KICAgICsNCiAgICAr
IyBGdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gcmVmZXJlbmNlIHRoZW1zZWx2ZXMsIGJ1dCBhbiBl
eGNlcHRpb24gaXMgdGhyb3duIGlmDQogICAgKyMgdGhlIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHN0
dWNrICh0aGUgcmVjdXJzaW9uIGdldHMgdG9vIGRlZXApDQogICAgK3NhZmUtZm4tcmVjID0gJCgk
KDEpKQ0KICAgICtzYWZlLWZuLXJlYy0yID0gJChzYWZlLWZuLXJlYyxzYWZlLWZuLXJlYy0zKQ0K
ICAgICtzYWZlLWZuLXJlYy0zID0gZm9vDQogICAgK3NhZmUtZm4tcmVjLXJlcyA9ICQoc2FmZS1m
bi1yZWMsc2FmZS1mbi1yZWMtMikNCiAgICArDQogICAgK3Vuc2FmZS1mbi1yZWMgPSAkKHVuc2Fm
ZS1mbi1yZWMsJCgxKSkNCiAgICArDQogICAgKw0KICAgICsjIEV4cGFuc2lvbiBpbiB0aGUgbGVm
dC1oYW5kIHNpZGUgb2YgYXNzaWdubWVudHMNCiAgICArDQogICAgK2R1bW15LWFyZy1mbiA9IGJh
cg0KICAgICtsaHMtaW5kaXItMSA9IGxocy1pbmRpci0yDQogICAgK2xocy1pbmRpci0yID0gLWJh
eg0KICAgICtyaHMgPSB2YWx1ZQ0KICAgICsjIExIUyBleHBhbmRzIHRvIGZvby1iYXItYmF6DQog
ICAgK2Zvby0kKGR1bW15LWFyZy1mbiwgaWdub3JlZCBhcmd1bWVudCApJCgkKGxocy1pbmRpci0x
KSkgPSAkKHJocykNCiAgICArIyBFeHBhbmRzIHRvIGVtcHR5IHN0cmluZywgYWNjZXB0ZWQNCiAg
ICArICAkKHVuZGVmaW5lZCkgIA0KICAgICsNCiAgICArIyBWYXJpYWJsZSB3aXRoIGEgc3BhY2Ug
aW4gaXRzIG5hbWUNCiAgICArZW1wdHkgPQ0KICAgICtzcGFjZSA9ICQoZW1wdHkpICQoZW1wdHkp
DQogICAgK2ZvbyQoc3BhY2UpYmFyID0gdmFsdWUNCiAgICArc3BhY2UtdmFyLXJlcyA9ICQoZm9v
IGJhcikNCiAgICArDQogICAgKw0KICAgICsjIEJ1aWx0LWluIGZ1bmN0aW9ucw0KICAgICsNCiAg
ICArIyBFeHBhbmRzIHRvICJiYXogcWF6Ig0KICAgICtzaGVsbC1yZXMgPSAkKHNoZWxsLGZhbHNl
ICYmIGVjaG8gZm9vIGJhciB8fCBlY2hvIGJheiBxYXopDQogICAgKw0KICAgICsjIFdhcm5zIGFi
b3V0IG91dHB1dCBvbiBzdGRlcnIsIGV4cGFuZHMgdG8gbm90aGluZw0KICAgICtzaGVsbC1zdGRl
cnItcmVzIDo9ICQoc2hlbGwsZWNobyBtZXNzYWdlIG9uIHN0ZGVyciA+JjIpDQogICAgKw0KICAg
ICsjIEV4cGFuZHMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24NCiAgICArbG9jYXRpb24tcmVzIDo9
ICQoZmlsZW5hbWUpOiQobGluZW5vKQ0KICAgICsNCiAgICArIyBBZGRzIG9uZSB3YXJuaW5nLCBl
eHBhbmRzIHRvIG5vdGhpbmcNCiAgICArJCh3YXJuaW5nLWlmLCxubyB3YXJuaW5nKQ0KICAgICsk
KHdhcm5pbmctaWYsbixubyB3YXJuaW5nKQ0KICAgICt3YXJuaW5nLXJlcyA6PSAkKHdhcm5pbmct
aWYseSxhIHdhcm5pbmcpDQogICAgKw0KICAgICsjIERvZXMgbm90IGNhdXNlIGFuIGVycm9yLCBl
eHBhbmRzIHRvIG5vdGhpbmcNCiAgICArZXJyb3Itbi1yZXMgOj0gJChlcnJvci1pZixuLG9vcHMp
DQogICAgKw0KICAgICsjIENhdXNlcyBhbiBlcnJvciB3aGVuIGV4cGFuZGVkDQogICAgK2Vycm9y
LXktcmVzID0gJChlcnJvci1pZix5LG9vcHMpDQogICAgKw0KICAgICsNCiAgICArIyBFbnZpcm9u
bWVudCB2YXJpYWJsZXMgKGZvciB0ZXN0aW5nIEtjb25maWcuZW52X3ZhcnMpLiBFTlZfMSBpcyBh
bHJlYWR5DQogICAgKyMgcmVmZXJlbmNlZCBhYm92ZS4NCiAgICArZW52X3JlZl8xIDo9IHh4eCAk
KEVOVl8yKSB4eHgNCiAgICArZW52X3JlZl8yIDo9ICQoc2hlbGwsZWNobyAkKEVOVl8zKSkNCiAg
ICArZW52X3JlZl8zIDo9DQogICAgK2Vudl9yZWZfMyArPSAkKEVOVl80KQ0KICAgICskKHdhcm5p
bmctaWYsJChFTlZfNSksJChFTlZfVU5ERUZJTkVEKSkNCiAgICArc291cmNlICIkKEVOVl82KSIN
CiAgICArZW52X3JlZl80ID0gJChFTlZfNykgICMgTmV2ZXIgZXZhbHVhdGVkDQogICAgZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmFuZ2UgYi9zdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvS3JhbmdlDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAw
MDAwLi4zMDU3NDgzDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9LcmFuZ2UNCiAgICBAQCAtMCwwICsxLDEzMyBAQA0KICAgICsjDQogICAgKyMg
Tm8gcmFuZ2VzDQogICAgKyMNCiAgICArDQogICAgK2NvbmZpZyBIRVhfTk9fUkFOR0UNCiAgICAr
ICAgIGhleCAiaGV4IG5vIHJhbmdlIg0KICAgICsNCiAgICArY29uZmlnIElOVF9OT19SQU5HRQ0K
ICAgICsgICAgaW50ICJpbnQgbm8gcmFuZ2UiDQogICAgKw0KICAgICsjDQogICAgKyMgRGlzYWJs
ZWQgcmFuZ2VzDQogICAgKyMNCiAgICArDQogICAgK2NvbmZpZyBIRVhfQUxMX1JBTkdFU19ESVNB
QkxFRA0KICAgICsgICAgaGV4ICJoZXggYWxsIHJhbmdlcyBkaXNhYmxlZCINCiAgICArICAgIHJh
bmdlIDB4MTAgMHgyMCBpZiBuDQogICAgKyAgICByYW5nZSAweDMwIDB4NDAgaWYgbg0KICAgICsN
CiAgICArY29uZmlnIElOVF9BTExfUkFOR0VTX0RJU0FCTEVEDQogICAgKyAgICBpbnQgImludCBh
bGwgcmFuZ2VzIGRpc2FibGVkIg0KICAgICsgICAgcmFuZ2UgMTAgMjAgaWYgbg0KICAgICsgICAg
cmFuZ2UgMzAgNDAgaWYgbg0KICAgICsNCiAgICArIw0KICAgICsjIFJhbmdlcyB3aXRoIGRlZmF1
bHRzDQogICAgKyMNCiAgICArDQogICAgKyMgaGV4DQogICAgKw0KICAgICtjb25maWcgSEVYX1JB
TkdFXzEwXzIwX0xPV19ERUZBVUxUDQogICAgKyAgICBoZXggImludCByYW5nZSAxMC0yMCBsb3cg
ZGVmYXVsdCINCiAgICArICAgIHJhbmdlIDB4MTAgMHgyMA0KICAgICsgICAgZGVmYXVsdCAweDkN
CiAgICArDQogICAgK2NvbmZpZyBIRVhfUkFOR0VfMTBfMjBfSElHSF9ERUZBVUxUDQogICAgKyAg
ICBoZXggImludCByYW5nZSAxMC0yMCBoaWdoIGRlZmF1bHQiDQogICAgKyAgICByYW5nZSAweDEw
IDB4MjANCiAgICArICAgIGRlZmF1bHQgMHgyMQ0KICAgICsNCiAgICArY29uZmlnIEhFWF9SQU5H
RV8xMF8yMF9PS19ERUZBVUxUDQogICAgKyAgICBoZXggImludCByYW5nZSAxMC0yMCBvayBkZWZh
dWx0Ig0KICAgICsgICAgcmFuZ2UgMHgxMCAweDIwDQogICAgKyAgICBkZWZhdWx0IDB4MTUNCiAg
ICArDQogICAgK2NvbmZpZyBIRVhfUkFOR0VfMTBfMjBfT0tfREVGQVVMVF9BTFRFUk5BVEUNCiAg
ICArICAgIGhleCAiaW50IHJhbmdlIDEwLTIwIG9rIGRlZmF1bHQgYWx0ZXJuYXRlIg0KICAgICsg
ICAgcmFuZ2UgMHgxMCAweDIwDQogICAgKyAgICBkZWZhdWx0IDE1DQogICAgKw0KICAgICsjIGlu
dA0KICAgICsNCiAgICArY29uZmlnIElOVF9SQU5HRV8xMF8yMF9MT1dfREVGQVVMVA0KICAgICsg
ICAgaW50ICJpbnQgcmFuZ2UgMTAtMjAgbG93IGRlZmF1bHQiDQogICAgKyAgICByYW5nZSAxMCAy
MA0KICAgICsgICAgZGVmYXVsdCA5DQogICAgKw0KICAgICtjb25maWcgSU5UX1JBTkdFXzEwXzIw
X0hJR0hfREVGQVVMVA0KICAgICsgICAgaW50ICJpbnQgcmFuZ2UgMTAtMjAgaGlnaCBkZWZhdWx0
Ig0KICAgICsgICAgcmFuZ2UgMTAgMjANCiAgICArICAgIGRlZmF1bHQgMjENCiAgICArDQogICAg
K2NvbmZpZyBJTlRfUkFOR0VfMTBfMjBfT0tfREVGQVVMVA0KICAgICsgICAgaW50ICJpbnQgcmFu
Z2UgMTAtMjAgb2sgZGVmYXVsdCINCiAgICArICAgIHJhbmdlIDEwIDIwDQogICAgKyAgICBkZWZh
dWx0IDE1DQogICAgKw0KICAgICsjDQogICAgKyMgUmFuZ2VzIHdpdGggbm8gZGVmYXVsdHMgKHNo
b3VsZCBkZWZhdWx0IHRvIGxvdyBlbmQgb2YgcmFuZ2UgaWYgPiAwKQ0KICAgICsjDQogICAgKw0K
ICAgICtjb25maWcgSEVYX1JBTkdFXzEwXzIwDQogICAgKyAgICBoZXggImhleCByYW5nZSAxMC0y
MCIgICAgDQogICAgKyAgICByYW5nZSAweDEwIDB4MjANCiAgICArDQogICAgK2NvbmZpZyBIRVhf
UkFOR0VfMF8xMA0KICAgICsgICAgaGV4ICJoZXggcmFuZ2UgMC0xMCINCiAgICArICAgIHJhbmdl
IDB4MCAweDEwDQogICAgKw0KICAgICtjb25maWcgSU5UX1JBTkdFXzEwXzIwDQogICAgKyAgICBp
bnQgImludCByYW5nZSAxMC0yMCIgICAgDQogICAgKyAgICByYW5nZSAxMCAyMA0KICAgICsNCiAg
ICArY29uZmlnIElOVF9SQU5HRV8wXzEwDQogICAgKyAgICBpbnQgImludCByYW5nZSAwLTEwIg0K
ICAgICsgICAgcmFuZ2UgMCAxMA0KICAgICsNCiAgICArY29uZmlnIElOVF9SQU5HRV9ORUdfMTBf
MTANCiAgICArICAgIGludCAiaW50IHJhbmdlIC0xMC0xMCINCiAgICArICAgIHJhbmdlIC0xMCAx
MA0KICAgICsNCiAgICArIw0KICAgICsjIERlcGVuZGVudCByYW5nZXMNCiAgICArIw0KICAgICsN
CiAgICArY29uZmlnIEhFWF80MA0KICAgICsgICAgaGV4DQogICAgKyAgICBkZWZhdWx0IDQwDQog
ICAgKw0KICAgICtjb25maWcgSEVYX1JBTkdFXzEwXzQwX0RFUEVOREVOVA0KICAgICsgICAgaGV4
ICJoZXggcmFuZ2UgMTAtNDAgZGVwZW5kZW50Ig0KICAgICsgICAgcmFuZ2UgSEVYX1JBTkdFXzEw
XzIwIEhFWF80MA0KICAgICsNCiAgICArY29uZmlnIElOVF80MA0KICAgICsgICAgaW50DQogICAg
KyAgICBkZWZhdWx0IDQwDQogICAgKw0KICAgICtjb25maWcgSU5UX1JBTkdFXzEwXzQwX0RFUEVO
REVOVA0KICAgICsgICAgaW50ICJpbnQgcmFuZ2UgMTAtNDAgZGVwZW5kZW50Ig0KICAgICsgICAg
cmFuZ2UgSU5UX1JBTkdFXzEwXzIwIElOVF80MA0KICAgICsNCiAgICArIw0KICAgICsjIFJhbmdl
cyBvbiBzeW1ib2xzIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zDQogICAgKyMNCiAgICAr
DQogICAgK2lmIG4NCiAgICArY29uZmlnIElOQUNUSVZFX1JBTkdFDQogICAgKyAgICByYW5nZSAw
IDENCiAgICArZW5kaWYNCiAgICArDQogICAgK2NvbmZpZyBJTkFDVElWRV9SQU5HRQ0KICAgICsg
ICAgaW50DQogICAgKyAgICAjIERlZmF1bHQgd2lsbCBhcHBseSBhbmQgc2hvdWxkIG5vdCBnZXQg
Y2xhbXBlZCwNCiAgICArICAgICMgYmVjYXVzZSB0aGUgcmFuZ2UgZG9lcyBub3QgYXBwbHkNCiAg
ICArICAgIGRlZmF1bHQgMg0KICAgICsNCiAgICArY29uZmlnIEFDVElWRV9SQU5HRQ0KICAgICsg
ICAgcmFuZ2UgMCAxDQogICAgKw0KICAgICtjb25maWcgQUNUSVZFX1JBTkdFDQogICAgKyAgICBp
bnQNCiAgICArICAgICMgRGVmYXVsdCB3aWxsIGFwcGx5IGFuZCBzaG91bGQgYmUgY2xhbXBlZCB0
byAxDQogICAgKyAgICBkZWZhdWx0IDINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
bGliL3Rlc3RzL0tyZWN1cnNpdmUxIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNp
dmUxDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4zNWI1MjFh
DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9L
cmVjdXJzaXZlMQ0KICAgIEBAIC0wLDAgKzEgQEANCiAgICArc291cmNlICJ0ZXN0cy9LcmVjdXJz
aXZlMiINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNp
dmUyIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWN1cnNpdmUyDQogICAgbmV3IGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi45ZjlmMDBlDQogICAgLS0tIC9kZXYvbnVs
bA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVjdXJzaXZlMg0KICAgIEBA
IC0wLDAgKzEgQEANCiAgICArc291cmNlICJ0ZXN0cy9LcmVjdXJzaXZlMSINCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWZlcmVuY2VkIGIvc3VwcG9ydC9rY29u
ZmlnbGliL3Rlc3RzL0tyZWZlcmVuY2VkDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCAwMDAwMDAwLi45ZGE5NGM4DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBv
cnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVmZXJlbmNlZA0KICAgIEBAIC0wLDAgKzEsNjMgQEANCiAg
ICArY29uZmlnIE5PX1JFRlMNCiAgICArICAgIGJvb2wNCiAgICArDQogICAgK2NvbmZpZyBKVVNU
X0RFUEVORFNfT05fUkVGUw0KICAgICsgICAgYm9vbA0KICAgICsgICAgZGVwZW5kcyBvbiBBICYm
IEINCiAgICArDQogICAgK2lmIEENCiAgICArDQogICAgK21lbnUgIm1lbnUiDQogICAgKyAgICBk
ZXBlbmRzIG9uIEINCiAgICArICAgIHZpc2libGUgaWYgQw0KICAgICsgICAgdmlzaWJsZSBpZiBE
DQogICAgKw0KICAgICtjb25maWcgTE9UU19PRl9SRUZTDQogICAgKyAgICBib29sICJsb3RzIiBp
ZiBDIHx8IEQNCiAgICArICAgIGRlZmF1bHQgRSB8fCBGIGlmIEcgfHwgSA0KICAgICsgICAgZGVm
YXVsdCBJIHx8IEogaWYgSyB8fCBMDQogICAgKyAgICBzZWxlY3QgTSBpZiBOIHx8IE8NCiAgICAr
ICAgIHNlbGVjdCBQIGlmIFEgfHwgUg0KICAgICsgICAgaW1wbHkgUyBpZiBUIHx8IFUNCiAgICAr
ICAgIGltcGx5IFYgaWYgVyB8fCBYDQogICAgKyAgICBkZXBlbmRzIG9uIFkgfHwgWg0KICAgICsN
CiAgICArZW5kbWVudQ0KICAgICsNCiAgICArZW5kaWYNCiAgICArDQogICAgK2NvbmZpZyBJTlRf
UkVGUw0KICAgICsgICAgaW50ICJpbnQiDQogICAgKyAgICByYW5nZSBBIEIgaWYgQyAmJiBEDQog
ICAgKyAgICByYW5nZSBFIEYgaWYgRyAmJiBIDQogICAgKw0KICAgICtjaG9pY2UgQ0hPSUNFDQog
ICAgKyAgICBib29sICJjaG9pY2UiDQogICAgKw0KICAgICtjb25maWcgQ0hPSUNFX1JFRg0KICAg
ICsgICAgYm9vbCAiY2hvaWNlIHJlZiINCiAgICArDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAg
ICArY29tbWVudCAiY29tbWVudCINCiAgICArICAgIGRlcGVuZHMgb24gQSB8fCBCDQogICAgKw0K
ICAgICsNCiAgICArY29uZmlnIE1VTFRJX0RFRl9TWU0NCiAgICArICAgIGRlZl9ib29sIEEgJiYg
Qg0KICAgICsNCiAgICArY29uZmlnIE1VTFRJX0RFRl9TWU0NCiAgICArICAgIGRlcGVuZHMgb24g
Qw0KICAgICsNCiAgICArDQogICAgK2Nob2ljZSBNVUxUSV9ERUZfQ0hPSUNFDQogICAgKyAgICBi
b29sICJjaG9pY2UiDQogICAgKyAgICBkZXBlbmRzIG9uIEEgJiYgQg0KICAgICsNCiAgICArZW5k
Y2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UgTVVMVElfREVGX0NIT0lDRQ0KICAgICsgICAgYm9v
bCAiY2hvaWNlIg0KICAgICsgICAgZGVwZW5kcyBvbiBDDQogICAgKw0KICAgICtlbmRjaG9pY2UN
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWxhdGlvbiBiL3N1
cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LcmVsYXRpb24NCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLjk0MGVmZjgNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZWxhdGlvbg0KICAgIEBAIC0wLDAgKzEsMzYg
QEANCiAgICArY29uZmlnIEENCiAgICArICAgIGJvb2wNCiAgICArICAgIGRlcGVuZHMgb24gVU5E
RUZJTkVEDQogICAgKw0KICAgICtjaG9pY2UgQ0hPSUNFXzENCiAgICArICAgIGJvb2wgIkMiDQog
ICAgK2NvbmZpZyBCDQogICAgKyAgICBib29sICJCIg0KICAgICtjb25maWcgQw0KICAgICsgICAg
Ym9vbCAiQyIgaWYgQg0KICAgICtjb25maWcgRA0KICAgICsgICAgYm9vbCAiRCINCiAgICArZW5k
Y2hvaWNlDQogICAgKw0KICAgICttZW51ICJtMSINCiAgICArY29uZmlnIEUNCiAgICArICAgIGJv
b2wNCiAgICArbWVudSAibTIiDQogICAgK2NvbmZpZyBGDQogICAgKyAgICBib29sDQogICAgK2No
b2ljZSBDSE9JQ0VfMg0KICAgICsgICAgdHJpc3RhdGUgImZvbyINCiAgICArY29uZmlnIEcNCiAg
ICArICAgIGJvb2wgImciDQogICAgK2NvbmZpZyBIDQogICAgKyAgICBib29sICJoIg0KICAgICtl
bmRjaG9pY2UNCiAgICArZW5kbWVudQ0KICAgICtjb25maWcgSQ0KICAgICsgICAgYm9vbA0KICAg
ICtlbmRtZW51DQogICAgKw0KICAgICttZW51ICJtMyINCiAgICArZW5kbWVudQ0KICAgICttZW51
ICJtNCINCiAgICArZW5kbWVudQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIv
dGVzdHMvS3JlcHIgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3JlcHINCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmZlNmQ4ZjANCiAgICAtLS0gL2Rldi9u
dWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tyZXByDQogICAgQEAgLTAs
MCArMSw2NCBAQA0KICAgICtjb25maWcgTU9EVUxFUw0KICAgICsgICAgYm9vbA0KICAgICsgICAg
b3B0aW9uIG1vZHVsZXMNCiAgICArICAgIGRlZmF1bHQgeQ0KICAgICsNCiAgICAraWYgVU5ERUZJ
TkVEDQogICAgK2VuZGlmDQogICAgKw0KICAgICtjb25maWcgQkFTSUMNCiAgICArICAgIGJvb2wN
CiAgICArICAgIGRlZmF1bHQgeQ0KICAgICsgICAgLS0taGVscC0tLQ0KICAgICsNCiAgICArY29u
ZmlnIFZJU0lCTEUNCiAgICArICAgIGJvb2wgInZpc2libGUiDQogICAgKw0KICAgICtjb25maWcg
U1RSSU5HDQogICAgKyAgICBzdHJpbmcgInZpc2libGUiDQogICAgKw0KICAgICtjb25maWcgRElS
X0RFUF9ODQogICAgKyAgICBkZXBlbmRzIG9uIG4NCiAgICArDQogICAgK2NvbmZpZyBPUFRJT05T
DQogICAgKyAgICBvcHRpb24gYWxsbm9jb25maWdfeQ0KICAgICsgICAgb3B0aW9uIGRlZmNvbmZp
Z19saXN0DQogICAgKyAgICBvcHRpb24gZW52PSJFTlYiDQogICAgKw0KICAgICtjb25maWcgTVVM
VElfREVGDQogICAgK2NvbmZpZyBNVUxUSV9ERUYNCiAgICArDQogICAgK21lbnVjb25maWcgTUVO
VUNPTkZJRw0KICAgICsNCiAgICArY2hvaWNlIENIT0lDRQ0KICAgICsgICAgdHJpc3RhdGUgImNo
b2ljZSINCiAgICArDQogICAgK2NvbmZpZyBDSE9JQ0VfMQ0KICAgICsgICAgdHJpc3RhdGUgImNo
b2ljZSBzeW0iDQogICAgKw0KICAgICtjb25maWcgQ0hPSUNFXzINCiAgICArICAgIHRyaXN0YXRl
ICJjaG9pY2Ugc3ltIg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjb25maWcg
Q0hPSUNFX0hPT0sNCiAgICArDQogICAgK2Nob2ljZQ0KICAgICsgICAgdHJpc3RhdGUgIm9wdGlv
bmFsIGNob2ljZSIgaWYgbg0KICAgICsgICAgb3B0aW9uYWwNCiAgICArZW5kY2hvaWNlDQogICAg
Kw0KICAgICtjb25maWcgTk9fVklTSUJMRV9JRl9IT09LDQogICAgKw0KICAgICttZW51ICJubyB2
aXNpYmxlIGlmIg0KICAgICtlbmRtZW51DQogICAgKw0KICAgICtjb25maWcgVklTSUJMRV9JRl9I
T09LDQogICAgKw0KICAgICttZW51ICJ2aXNpYmxlIGlmIg0KICAgICsgICAgdmlzaWJsZSBpZiBt
DQogICAgK2VuZG1lbnUNCiAgICArDQogICAgK2NvbmZpZyBDT01NRU5UX0hPT0sNCiAgICArDQog
ICAgK2NvbW1lbnQgImNvbW1lbnQiDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9Lc3RyIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tzdHINCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmY1NWM4MzANCiAgICAtLS0gL2Rldi9u
dWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL0tzdHINCiAgICBAQCAtMCww
ICsxLDI5MyBAQA0KICAgICtpZiBVTkRFRklORUQNCiAgICArZW5kaWYNCiAgICArDQogICAgK2Nv
bmZpZyBOT19UWVBFDQogICAgKw0KICAgICtjb25maWcgQkFTSUNfTk9fUFJPTVBUDQogICAgKyAg
ICBib29sDQogICAgKyAgICBoZWxwDQogICAgKyAgICAgIGJsYWggYmxhaA0KICAgICsNCiAgICAr
ICAgICAgICBibGFoIGJsYWggYmxhaA0KICAgICsNCiAgICArICAgICAgIGJsYWgNCiAgICArDQog
ICAgK2NvbmZpZyBCQVNJQ19QUk9NUFQNCiAgICArICAgIGJvb2wgImJhc2ljIg0KICAgICsNCiAg
ICArY29uZmlnIEFEVkFOQ0VEDQogICAgKyAgICB0cmlzdGF0ZSAicHJvbXB0IiBpZiBERVANCiAg
ICArICAgIGRlZmF1bHQgREVGQVVMVF8xDQogICAgKyAgICBkZWZhdWx0IERFRkFVTFRfMiBpZiBE
RVANCiAgICArICAgIHNlbGVjdCBTRUxFQ1RFRF8xDQogICAgKyAgICBzZWxlY3QgU0VMRUNURURf
MiBpZiBERVANCiAgICArICAgIGltcGx5IElNUExJRURfMQ0KICAgICsgICAgaW1wbHkgSU1QTElF
RF8yIGlmIERFUA0KICAgICsgICAgaGVscA0KICAgICsgICAgICBmaXJzdCBoZWxwIHRleHQNCiAg
ICArDQogICAgK2NvbmZpZyBBRFZBTkNFRA0KICAgICsgICAgcHJvbXB0ICJwcm9tcHQgMiINCiAg
ICArDQogICAgK21lbnVjb25maWcgQURWQU5DRUQNCiAgICArICAgIHByb21wdCAicHJvbXB0IDMi
DQogICAgKw0KICAgICtpZiBERVAzDQogICAgKw0KICAgICttZW51ICJmb28iDQogICAgKyAgICBk
ZXBlbmRzIG9uIERFUDQNCiAgICArICAgIHZpc2libGUgaWYgVklTDQogICAgKw0KICAgICtjb25m
aWcgQURWQU5DRUQNCiAgICArICAgIGhlbHANCiAgICArICAgICAgc2Vjb25kIGhlbHAgdGV4dA0K
ICAgICsgICAgZGVwZW5kcyBvbiBBIHx8ICFCIHx8IChDICYmIEQpIHx8ICEoRSAmJiBGKSB8fCBH
ID0gSCB8fCBcDQogICAgKyAgICAgICAgICAgICAgKEkgJiYgIUogJiYgKEsgfHwgTCkgJiYgIShN
IHx8IE4pICYmIE8gPSBQKQ0KICAgICsNCiAgICArY29uZmlnIEFEVkFOQ0VEDQogICAgKyAgICAj
IFVzZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIGRpcmVjdCBkZXBlbmRlbmNpZXMgYXBwZWFyIHRvIHRo
ZSByaWdodCBvZiBWSVMNCiAgICArICAgIHByb21wdCAicHJvbXB0IDQiDQogICAgKw0KICAgICtl
bmRtZW51DQogICAgKw0KICAgICtlbmRpZg0KICAgICsNCiAgICArY29uZmlnIE9OTFlfRElSRUNU
X0RFUFMNCiAgICArICAgIGludA0KICAgICsgICAgZGVwZW5kcyBvbiBERVAxDQogICAgKyAgICBk
ZXBlbmRzIG9uIERFUDINCiAgICArDQogICAgK2NvbmZpZyBTVFJJTkcNCiAgICArICAgIGRlZl9z
dHJpbmcgImZvbyINCiAgICArICAgIGRlZmF1bHQgImJhciIgaWYgREVQDQogICAgKyAgICBkZWZh
dWx0IFNUUklORzINCiAgICArICAgIGRlZmF1bHQgU1RSSU5HMyBpZiBERVANCiAgICArDQogICAg
K2NvbmZpZyBJTlQNCiAgICArICAgIGRlZl9pbnQgNyBpZiBERVANCiAgICArICAgIHJhbmdlIDEg
Mg0KICAgICsgICAgcmFuZ2UgRk9PIEJBUg0KICAgICsgICAgcmFuZ2UgQkFaIFFBWiBpZiBERVAN
CiAgICArDQogICAgK2NvbmZpZyBIRVgNCiAgICArICAgIGRlZl9oZXggMHgxMjMNCiAgICArICAg
IHJhbmdlIDB4MTAwIDB4MjAwDQogICAgKyAgICByYW5nZSBGT08gQkFSDQogICAgKyAgICByYW5n
ZSBCQVogUUFaIGlmIERFUA0KICAgICsNCiAgICArY29uZmlnIE1PRFVMRVMNCiAgICArICAgIGJv
b2wgIk1PRFVMRVMiDQogICAgKyAgICBvcHRpb24gbW9kdWxlcw0KICAgICsNCiAgICArY29uZmln
IE9QVElPTlMNCiAgICArICAgIG9wdGlvbiBhbGxub2NvbmZpZ195DQogICAgKyAgICBvcHRpb24g
ZGVmY29uZmlnX2xpc3QNCiAgICArICAgIG9wdGlvbiBlbnY9IkVOViINCiAgICArDQogICAgK2lm
IExPQ18xDQogICAgK2NvbmZpZyBDT1JSRUNUX1BST1BfTE9DU19CT09MDQogICAgKyAgICBwcm9t
cHQgInByb21wdCAxIg0KICAgICsgICAgZGVmYXVsdCBERUZBVUxUXzENCiAgICArICAgIGRlZmF1
bHQgREVGQVVMVF8yDQogICAgKyAgICBzZWxlY3QgU0VMRUNUXzENCiAgICArICAgIHNlbGVjdCBT
RUxFQ1RfMg0KICAgICsgICAgaW1wbHkgSU1QTFlfMQ0KICAgICsgICAgaW1wbHkgSU1QTFlfMg0K
ICAgICsgICAgaGVscA0KICAgICsgICAgICBoZWxwIDENCiAgICArZW5kaWYNCiAgICArDQogICAg
K2lmIExPQ18yDQogICAgK21lbnVjb25maWcgQ09SUkVDVF9QUk9QX0xPQ1NfQk9PTA0KICAgICsg
ICAgYm9vbCAicHJvbXB0IDIiDQogICAgKyAgICBkZWZhdWx0IERFRkFVTFRfMw0KICAgICsgICAg
ZGVmYXVsdCBERUZBVUxUXzQNCiAgICArICAgIHNlbGVjdCBTRUxFQ1RfMw0KICAgICsgICAgc2Vs
ZWN0IFNFTEVDVF80DQogICAgKyAgICBpbXBseSBJTVBMWV8zDQogICAgKyAgICBpbXBseSBJTVBM
WV80DQogICAgKyAgICBoZWxwDQogICAgKyAgICAgIGhlbHAgMg0KICAgICtlbmRpZg0KICAgICsN
CiAgICAraWYgTE9DXzMNCiAgICArY29uZmlnIENPUlJFQ1RfUFJPUF9MT0NTX0JPT0wNCiAgICAr
ICAgIHByb21wdCAicHJvbXB0IDMiDQogICAgKyAgICBkZWZhdWx0IERFRkFVTFRfNQ0KICAgICsg
ICAgZGVmYXVsdCBERUZBVUxUXzYNCiAgICArICAgIHNlbGVjdCBTRUxFQ1RfNQ0KICAgICsgICAg
c2VsZWN0IFNFTEVDVF82DQogICAgKyAgICBpbXBseSBJTVBMWV81DQogICAgKyAgICBpbXBseSBJ
TVBMWV82DQogICAgKyAgICBoZWxwDQogICAgKyAgICAgIGhlbHAgMg0KICAgICtlbmRpZg0KICAg
ICsNCiAgICAraWYgTE9DXzENCiAgICArY29uZmlnIENPUlJFQ1RfUFJPUF9MT0NTX0lOVA0KICAg
ICsgICAgaW50DQogICAgKyAgICByYW5nZSAxIDINCiAgICArICAgIHJhbmdlIDMgNA0KICAgICtl
bmRpZg0KICAgICsNCiAgICAraWYgTE9DXzINCiAgICArY29uZmlnIENPUlJFQ1RfUFJPUF9MT0NT
X0lOVA0KICAgICsgICAgcmFuZ2UgNSA2DQogICAgKyAgICByYW5nZSA3IDgNCiAgICArZW5kaWYN
CiAgICArDQogICAgK2Nob2ljZSBDSE9JQ0UNCiAgICArICAgIHRyaXN0YXRlICJmb28iDQogICAg
KyAgICBkZWZhdWx0IENIT0lDRV8xDQogICAgKyAgICBkZWZhdWx0IENIT0lDRV8yIGlmIGRlcA0K
ICAgICsNCiAgICArY29uZmlnIENIT0lDRV8xDQogICAgKyAgICB0cmlzdGF0ZSAiY2hvaWNlIDEi
DQogICAgKw0KICAgICtjb25maWcgQ0hPSUNFXzINCiAgICArICAgIHRyaXN0YXRlICJjaG9pY2Ug
MiINCiAgICArDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICArY2hvaWNlDQogICAgKyAgICB0
cmlzdGF0ZSAibm8gbmFtZSINCiAgICArICAgIG9wdGlvbmFsDQogICAgK2VuZGNob2ljZQ0KICAg
ICsNCiAgICAraWYgTE9DXzENCiAgICArY2hvaWNlIENPUlJFQ1RfUFJPUF9MT0NTX0NIT0lDRQ0K
ICAgICsgICAgYm9vbA0KICAgICsgICAgZGVmYXVsdCBDSE9JQ0VfMw0KICAgICsNCiAgICArY29u
ZmlnIENIT0lDRV8zDQogICAgKyAgICBib29sICJjaG9pY2UgMyINCiAgICArDQogICAgK2NvbmZp
ZyBDSE9JQ0VfNA0KICAgICsgICAgYm9vbCAiY2hvaWNlIDMiDQogICAgKw0KICAgICtjb25maWcg
Q0hPSUNFXzUNCiAgICArICAgIGJvb2wgImNob2ljZSAzIg0KICAgICsNCiAgICArZW5kY2hvaWNl
DQogICAgK2VuZGlmDQogICAgKw0KICAgICtpZiBMT0NfMg0KICAgICtjaG9pY2UgQ09SUkVDVF9Q
Uk9QX0xPQ1NfQ0hPSUNFDQogICAgKyAgICBkZWZhdWx0IENIT0lDRV80DQogICAgK2VuZGNob2lj
ZQ0KICAgICtlbmRpZg0KICAgICsNCiAgICAraWYgTE9DXzMNCiAgICArY2hvaWNlIENPUlJFQ1Rf
UFJPUF9MT0NTX0NIT0lDRQ0KICAgICsgICAgZGVmYXVsdCBDSE9JQ0VfNQ0KICAgICtlbmRjaG9p
Y2UNCiAgICArZW5kaWYNCiAgICArDQogICAgK2NvbmZpZyBTSU1QTEVfTUVOVV9IT09LDQogICAg
K21lbnUgInNpbXBsZSBtZW51Ig0KICAgICtlbmRtZW51DQogICAgKw0KICAgICtjb25maWcgQURW
QU5DRURfTUVOVV9IT09LDQogICAgK21lbnUgImFkdmFuY2VkIG1lbnUiDQogICAgKyAgICBkZXBl
bmRzIG9uIEENCiAgICArICAgIHZpc2libGUgaWYgQg0KICAgICsgICAgdmlzaWJsZSBpZiBDIHx8
IEQNCiAgICArZW5kbWVudQ0KICAgICsNCiAgICArY29uZmlnIFNJTVBMRV9DT01NRU5UX0hPT0sN
CiAgICArY29tbWVudCAic2ltcGxlIGNvbW1lbnQiDQogICAgKw0KICAgICtjb25maWcgQURWQU5D
RURfQ09NTUVOVF9IT09LDQogICAgK2NvbW1lbnQgImFkdmFuY2VkIGNvbW1lbnQiDQogICAgKyAg
ICBkZXBlbmRzIG9uIEENCiAgICArICAgIGRlcGVuZHMgb24gQg0KICAgICsNCiAgICArIyBDb3Ju
ZXIgY2FzZXMgd2hlbiByZW1vdmluZyBkaXJlY3QgZGVwZW5kZW5jaWVzDQogICAgKw0KICAgICtj
b25maWcgREVQX1JFTV9DT1JORVJfQ0FTRVMNCiAgICArICAgIGJvb2wNCiAgICArICAgIGRlZmF1
bHQgQQ0KICAgICsgICAgZGVwZW5kcyBvbiBuDQogICAgKw0KICAgICtjb25maWcgREVQX1JFTV9D
T1JORVJfQ0FTRVMNCiAgICArICAgIGRlZmF1bHQgQiBpZiBuDQogICAgKw0KICAgICtjb25maWcg
REVQX1JFTV9DT1JORVJfQ0FTRVMNCiAgICArICAgIGRlZmF1bHQgQw0KICAgICsgICAgZGVwZW5k
cyBvbiBtDQogICAgKw0KICAgICtjb25maWcgREVQX1JFTV9DT1JORVJfQ0FTRVMNCiAgICArICAg
IGRlZmF1bHQgRCBpZiBBICYmIHkNCiAgICArICAgIGRlcGVuZHMgb24geQ0KICAgICsNCiAgICAr
Y29uZmlnIERFUF9SRU1fQ09STkVSX0NBU0VTDQogICAgKyAgICBkZWZhdWx0IEUgaWYgIUUxDQog
ICAgKyAgICBkZWZhdWx0IEYgaWYgRjEgPSBGMg0KICAgICsgICAgZGVmYXVsdCBHIGlmIEcxIHx8
IEgxDQogICAgKyAgICBkZXBlbmRzIG9uICFIDQogICAgKw0KICAgICtjb25maWcgREVQX1JFTV9D
T1JORVJfQ0FTRVMNCiAgICArICAgIGRlZmF1bHQgSA0KICAgICsgICAgZGVwZW5kcyBvbiAiZm9v
IiA9ICJiYXIiDQogICAgKw0KICAgICttZW51ICJtZW51Ig0KICAgICsgICAgdmlzaWJsZSBpZiBG
T08gfHwgQkFSDQogICAgKw0KICAgICtjb25maWcgREVQX1JFTV9DT1JORVJfQ0FTRVMNCiAgICAr
ICAgIHByb21wdCAicHJvbXB0Ig0KICAgICsgICAgZGVwZW5kcyBvbiBCQVogJiYgUUFaDQogICAg
Kw0KICAgICtlbmRtZW51DQogICAgKw0KICAgICsjIE9ubHkgcHJvbXB0LCBubyB0eXBlDQogICAg
K2NvbmZpZyBQUk9NUFRfT05MWQ0KICAgICsgICAgcHJvbXB0ICJwcm9tcHQgb25seSINCiAgICAr
DQogICAgKyMge1N5bWJvbCxDaG9pY2V9Lm9yaWdfKg0KICAgICsNCiAgICAraWYgQkFTRV9ERVAN
CiAgICArDQogICAgK2NvbmZpZyBCT09MX1NZTV9PUklHDQogICAgKyAgICBib29sDQogICAgKyAg
ICBkZWZhdWx0IEQxIGlmIERFUA0KICAgICsgICAgZGVmYXVsdCBEMg0KICAgICsgICAgc2VsZWN0
IFMxDQogICAgKyAgICBzZWxlY3QgUzIgaWYgREVQDQogICAgKyAgICBpbXBseSBJMQ0KICAgICsg
ICAgaW1wbHkgSTENCiAgICArDQogICAgK2NvbmZpZyBCT09MX1NZTV9PUklHDQogICAgKyAgICBk
ZWZhdWx0IEQzDQogICAgKyAgICBzZWxlY3QgUzMNCiAgICArICAgIGltcGx5IEkzIGlmIERFUA0K
ICAgICsNCiAgICArY29uZmlnIElOVF9TWU1fT1JJRw0KICAgICsgICAgaW50DQogICAgKyAgICBy
YW5nZSAxIDIgaWYgREVQDQogICAgKyAgICByYW5nZSAzIDQNCiAgICArDQogICAgK2NvbmZpZyBJ
TlRfU1lNX09SSUcNCiAgICArICAgIHJhbmdlIDUgNiBpZiBERVANCiAgICArDQogICAgK2Nob2lj
ZSBDSE9JQ0VfT1JJRw0KICAgICsgICAgYm9vbCAiY2hvaWNlIG9yaWciDQogICAgKyAgICBkZWZh
dWx0IEENCiAgICArICAgIGRlZmF1bHQgQiBpZiBERVANCiAgICArDQogICAgK2NvbmZpZyBBDQog
ICAgKyAgICBib29sDQogICAgKw0KICAgICtjb25maWcgQg0KICAgICsgICAgYm9vbA0KICAgICsN
CiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UgQ0hPSUNFX09SSUcNCiAgICArICAg
IGRlZmF1bHQgQyBpZiBERVANCiAgICArDQogICAgK2NvbmZpZyBDDQogICAgKyAgICBib29sDQog
ICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2VuZGlmDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdW5kZWYgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS3VuZGVmDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5m
YWU1MjFhDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90
ZXN0cy9LdW5kZWYNCiAgICBAQCAtMCwwICsxLDIzIEBADQogICAgK2NvbmZpZyBERUYNCiAgICAr
CWJvb2wNCiAgICArDQogICAgK2NvbmZpZyBCT09MDQogICAgKwlib29sICJmb28iIGlmIERFRiB8
fCAhVU5ERUZfMQ0KICAgICsJZGVmYXVsdCBVTkRFRl8yDQogICAgKw0KICAgICtjb25maWcgSU5U
DQogICAgKwlpbnQNCiAgICArCXJhbmdlIFVOREVGXzIgOA0KICAgICsJZGVmYXVsdCAxMA0KICAg
ICsJcmFuZ2UgNSAxNQ0KICAgICsNCiAgICArY29uZmlnIEhFWA0KICAgICsJaGV4DQogICAgKwly
YW5nZSAweDEyMyAwWDQ1Ng0KICAgICsJZGVmYXVsdCAweDIwMA0KICAgICsNCiAgICArbWVudSAi
bWVudSINCiAgICArCWRlcGVuZHMgb24gVU5ERUZfMQ0KICAgICsJdmlzaWJsZSBpZiBVTkRFRl8z
DQogICAgKw0KICAgICtlbmRtZW51DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xp
Yi90ZXN0cy9LdXNlcmZ1bmN0aW9ucyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9LdXNlcmZ1
bmN0aW9ucw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uODli
NDQ0Mg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVz
dHMvS3VzZXJmdW5jdGlvbnMNCiAgICBAQCAtMCwwICsxLDExIEBADQogICAgK2FkZC16ZXJvICA9
ICQoYWRkKQ0KICAgICthZGQtb25lICAgPSAkKGFkZCwxKQ0KICAgICthZGQtdGhyZWUgPSAkKGFk
ZCwxLC0xLDIsMSkNCiAgICArDQogICAgK29uZS16ZXJvID0gJChvbmUpDQogICAgK29uZS1vbmUg
ID0gJChvbmUsZm9vIGJhcikNCiAgICArb25lLXR3byAgPSAkKG9uZSxmb28gYmFyLGJheikNCiAg
ICArDQogICAgK29uZS1vci1tb3JlLXplcm8gID0gJChvbmUtb3ItbW9yZSkNCiAgICArb25lLW9y
LW1vcmUtb25lICAgPSAkKG9uZS1vci1tb3JlLGZvbykNCiAgICArb25lLW9yLW1vcmUtdGhyZWUg
PSAkKG9uZS1vci1tb3JlLGZvbyxiYXIsYmF6KQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWdsaWIvdGVzdHMvS3Zpc2liaWxpdHkgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvS3Zp
c2liaWxpdHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjkx
ZGVmMGENCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL0t2aXNpYmlsaXR5DQogICAgQEAgLTAsMCArMSwzNDIgQEANCiAgICArY29uZmlnIE1PRFVM
RVMNCiAgICArICAgIGJvb2wgIk1PRFVMRVMiDQogICAgKyAgICBvcHRpb24gbW9kdWxlcw0KICAg
ICsNCiAgICArIw0KICAgICsjIFN5bWJvbCB2aXNpYmlsaXR5DQogICAgKyMNCiAgICArDQogICAg
K2NvbmZpZyBOT19QUk9NUFQNCiAgICArICAgIGJvb2wNCiAgICArDQogICAgKyMgTm90IHJld3Jp
dHRlbiwgc28gTU9EIHdpbGwgaGF2ZSB0aGUgdmFsdWUgJ3knIHdoZW4gcnVubmluZyB3aXRob3V0
IG1vZHVsZXMNCiAgICArY29uZmlnIE1PRA0KICAgICsgICAgZGVmX3RyaXN0YXRlIG0NCiAgICAr
DQogICAgK2NvbmZpZyBCT09MX04NCiAgICArICAgIGJvb2wgImJvb2wgbiIgaWYgbg0KICAgICsN
CiAgICArY29uZmlnIEJPT0xfTQ0KICAgICsgICAgIyBSZXdyaXR0ZW4gdG8gbSAmJiBNT0RVTEVT
DQogICAgKyAgICBib29sICJib29sIG0iIGlmIG0NCiAgICArDQogICAgK2NvbmZpZyBCT09MX01P
RA0KICAgICsgICAgYm9vbCAiYm9vbCBNT0QiDQogICAgKyAgICAjIE5vdCByZXdyaXR0ZW4NCiAg
ICArICAgIGRlcGVuZHMgb24gTU9EDQogICAgKw0KICAgICtjb25maWcgQk9PTF9ZDQogICAgKyAg
ICBib29sICJib29sIHkiDQogICAgKyAgICAjIFJld3JpdHRlbiB0byBtICYmIE1PRFVMRVMNCiAg
ICArICAgIGRlcGVuZHMgb24geSB8fCBtDQogICAgKw0KICAgICtjb25maWcgVFJJU1RBVEVfTg0K
ICAgICsgICAgdHJpc3RhdGUgInRyaXN0YXRlIG4iIGlmIG4NCiAgICArDQogICAgK2NvbmZpZyBU
UklTVEFURV9NDQogICAgKyAgICAjIFJld3JpdHRlbiB0byBtICYmIE1PRFVMRVMNCiAgICArICAg
IHRyaXN0YXRlICJ0cmlzdGF0ZSBtIiBpZiBtDQogICAgKw0KICAgICtjb25maWcgVFJJU1RBVEVf
TU9EDQogICAgKyAgICB0cmlzdGF0ZSAidHJpc3RhdGUgTU9EIg0KICAgICsgICAgIyBOb3QgcmV3
cml0dGVuDQogICAgKyAgICBkZXBlbmRzIG9uIE1PRA0KICAgICsNCiAgICArY29uZmlnIFRSSVNU
QVRFX1kNCiAgICArICAgIGJvb2wgInRyaXN0YXRlIHkiDQogICAgKyAgICAjIFJld3JpdHRlbiB0
byBtICYmIE1PRFVMRVMNCiAgICArICAgIGRlcGVuZHMgb24geSB8fCBtDQogICAgKw0KICAgICsj
IFN5bWJvbHMgbmVzdGVkIGluICdpZicNCiAgICArDQogICAgK2lmIG4NCiAgICArDQogICAgK2Nv
bmZpZyBCT09MX0lGX04NCiAgICArICAgIGJvb2wgImJvb2wgaWYgbiINCiAgICArDQogICAgK2Nv
bmZpZyBUUklTVEFURV9JRl9ODQogICAgKyAgICB0cmlzdGF0ZSAidHJpc3RhdGUgaWYgbiINCiAg
ICArDQogICAgK2VuZGlmDQogICAgKw0KICAgICtpZiBtDQogICAgKw0KICAgICtjb25maWcgQk9P
TF9JRl9NDQogICAgKyAgICBib29sICJib29sIGlmIG0iDQogICAgKw0KICAgICtjb25maWcgVFJJ
U1RBVEVfSUZfTQ0KICAgICsgICAgdHJpc3RhdGUgInRyaXN0YXRlIGlmIG4iDQogICAgKw0KICAg
ICtlbmRpZg0KICAgICsNCiAgICAraWYgeQ0KICAgICsNCiAgICArY29uZmlnIEJPT0xfSUZfWQ0K
ICAgICsgICAgYm9vbCAiYm9vbCBpZiB5Ig0KICAgICsNCiAgICArY29uZmlnIFRSSVNUQVRFX0lG
X1kNCiAgICArICAgIHRyaXN0YXRlICJ0cmlzdGF0ZSBpZiB5Ig0KICAgICsNCiAgICArZW5kaWYN
CiAgICArDQogICAgKyMgU3ltYm9scyBuZXN0ZWQgaW4gJ21lbnUnDQogICAgKw0KICAgICttZW51
ICJtZW51IDEiDQogICAgKyAgICBkZXBlbmRzIG9uIG4NCiAgICArDQogICAgK2NvbmZpZyBCT09M
X01FTlVfTg0KICAgICsgICAgYm9vbCAiYm9vbCBtZW51IG4iDQogICAgKw0KICAgICtjb25maWcg
VFJJU1RBVEVfTUVOVV9ODQogICAgKyAgICB0cmlzdGF0ZSAidHJpc3RhdGUgbWVudSBuIg0KICAg
ICsNCiAgICArZW5kbWVudQ0KICAgICsNCiAgICArbWVudSAibWVudSAyIg0KICAgICsgICAgZGVw
ZW5kcyBvbiBtDQogICAgKw0KICAgICtjb25maWcgQk9PTF9NRU5VX00NCiAgICArICAgIGJvb2wg
ImJvb2wgbWVudSBtIg0KICAgICsNCiAgICArY29uZmlnIFRSSVNUQVRFX01FTlVfTQ0KICAgICsg
ICAgdHJpc3RhdGUgInRyaXN0YXRlIG1lbnUgbiINCiAgICArDQogICAgK2VuZG1lbnUNCiAgICAr
DQogICAgK21lbnUgIm1lbnUgMyINCiAgICArICAgIGRlcGVuZHMgb24geQ0KICAgICsNCiAgICAr
Y29uZmlnIEJPT0xfTUVOVV9ZDQogICAgKyAgICBib29sICJib29sIG1lbnUgeSINCiAgICArDQog
ICAgK2NvbmZpZyBUUklTVEFURV9NRU5VX1kNCiAgICArICAgIHRyaXN0YXRlICJ0cmlzdGF0ZSBt
ZW51IHkiDQogICAgKw0KICAgICtlbmRtZW51DQogICAgKw0KICAgICsjIFN5bWJvbHMgbmVzdGVk
IGluIGNob2ljZXMNCiAgICArDQogICAgK2Nob2ljZSBDMQ0KICAgICsgICAgdHJpc3RhdGUgImNo
b2ljZSBuIiBpZiBuDQogICAgKw0KICAgICtjb25maWcgQk9PTF9DSE9JQ0VfTg0KICAgICsgICAg
Ym9vbCAiYm9vbCBjaG9pY2UgbiINCiAgICArDQogICAgK2NvbmZpZyBUUklTVEFURV9DSE9JQ0Vf
Tg0KICAgICsgICAgdHJpc3RhdGUgInRyaXN0YXRlIGNob2ljZSBuIg0KICAgICsNCiAgICArZW5k
Y2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UgQzINCiAgICArICAgIHRyaXN0YXRlICJjaG9pY2Ug
bSIgaWYgbQ0KICAgICsNCiAgICArY29uZmlnIEJPT0xfQ0hPSUNFX00NCiAgICArICAgIGJvb2wg
ImJvb2wgY2hvaWNlIG0iDQogICAgKw0KICAgICtjb25maWcgVFJJU1RBVEVfQ0hPSUNFX00NCiAg
ICArICAgIHRyaXN0YXRlICJ0cmlzdGF0ZSBjaG9pY2UgbiINCiAgICArDQogICAgK2VuZGNob2lj
ZQ0KICAgICsNCiAgICArY2hvaWNlIEMzDQogICAgKyAgICB0cmlzdGF0ZSAiY2hvaWNlIHkiIGlm
IHkNCiAgICArDQogICAgK2NvbmZpZyBCT09MX0NIT0lDRV9ZDQogICAgKyAgICBib29sICJib29s
IGNob2ljZSB5Ig0KICAgICsNCiAgICArY29uZmlnIFRSSVNUQVRFX0NIT0lDRV9ZDQogICAgKyAg
ICB0cmlzdGF0ZSAidHJpc3RhdGUgY2hvaWNlIHkiDQogICAgKw0KICAgICtlbmRjaG9pY2UNCiAg
ICArDQogICAgKyMNCiAgICArIyBDaG9pY2UgdmlzaWJpbGl0eQ0KICAgICsjDQogICAgKw0KICAg
ICtjaG9pY2UgQk9PTF9DSE9JQ0VfTg0KICAgICsgICAgYm9vbCAiYm9vbCBjaG9pY2UgbiIgaWYg
bg0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2Nob2ljZSBCT09MX0NIT0lDRV9NDQogICAg
KyAgICBib29sICJib29sIGNob2ljZSBtIiBpZiBtDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAg
ICArY2hvaWNlIEJPT0xfQ0hPSUNFX1kNCiAgICArICAgIGJvb2wgImJvb2wgY2hvaWNlIHkiIGlm
IHkNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UgVFJJU1RBVEVfQ0hPSUNFX04N
CiAgICArICAgIHRyaXN0YXRlICJ0cmlzdGF0ZSBjaG9pY2UgbiIgaWYgbg0KICAgICtlbmRjaG9p
Y2UNCiAgICArDQogICAgK2Nob2ljZSBUUklTVEFURV9DSE9JQ0VfTQ0KICAgICsgICAgdHJpc3Rh
dGUgInRyaXN0YXRlIGNob2ljZSBtIiBpZiBtDQogICAgK2VuZGNob2ljZQ0KICAgICsNCiAgICAr
Y2hvaWNlIFRSSVNUQVRFX0NIT0lDRV9ZDQogICAgKyAgICB0cmlzdGF0ZSAidHJpc3RhdGUgY2hv
aWNlIHkiIGlmIHkNCiAgICArDQogICAgK2NvbmZpZyBLDQogICAgKyAgICB0cmlzdGF0ZSAiSyIN
CiAgICArDQogICAgK2NvbmZpZyBMDQogICAgKyAgICB0cmlzdGF0ZSAiTCINCiAgICArDQogICAg
K2VuZGNob2ljZQ0KICAgICsNCiAgICAraWYgbQ0KICAgICtjaG9pY2UgVFJJU1RBVEVfQ0hPSUNF
X0lGX01fQU5EX1kNCiAgICArICAgIHRyaXN0YXRlICJ0cmlzdGF0ZSBjaG9pY2UgaWYgbSBhbmQg
eSIgaWYgeQ0KICAgICsNCiAgICArY29uZmlnIE0NCiAgICArICAgIGJvb2wgIk0iDQogICAgKw0K
ICAgICtjb25maWcgTg0KICAgICsgICAgYm9vbCAiTiINCiAgICArDQogICAgK2VuZGNob2ljZQ0K
ICAgICtlbmRpZg0KICAgICsNCiAgICArbWVudSAiY2hvaWNlLWNvbnRhaW5pbmcgbWVudSINCiAg
ICArICAgIGRlcGVuZHMgb24gbiAmJiB5DQogICAgKw0KICAgICtjaG9pY2UgVFJJU1RBVEVfQ0hP
SUNFX01FTlVfTl9BTkRfWQ0KICAgICsgICAgdHJpc3RhdGUgInRyaXN0YXRlIGNob2ljZSBpZiBu
IGFuZCB5Ig0KICAgICsNCiAgICArY29uZmlnIE8NCiAgICArICAgIHRyaXN0YXRlICJPIg0KICAg
ICsNCiAgICArY29uZmlnIFANCiAgICArICAgIHRyaXN0YXRlICJQIg0KICAgICsNCiAgICArZW5k
Y2hvaWNlDQogICAgKw0KICAgICtlbmRtZW51DQogICAgKw0KICAgICsjDQogICAgKyMgTWVudSB2
aXNpYmlsaXR5DQogICAgKyMNCiAgICArDQogICAgK21lbnUgIm1lbnUgbiINCiAgICArICAgIGRl
cGVuZHMgb24gbg0KICAgICtlbmRtZW51DQogICAgKw0KICAgICttZW51ICJtZW51IG0iDQogICAg
KyAgICBkZXBlbmRzIG9uIG0NCiAgICArZW5kbWVudQ0KICAgICsNCiAgICArbWVudSAibWVudSB5
Ig0KICAgICsgICAgZGVwZW5kcyBvbiB5DQogICAgK2VuZG1lbnUNCiAgICArDQogICAgK2lmIG4N
CiAgICArbWVudSAibWVudSBpZiBuIg0KICAgICtlbmRtZW51DQogICAgK2VuZGlmDQogICAgKw0K
ICAgICtpZiBtDQogICAgK21lbnUgIm1lbnUgaWYgbSINCiAgICArZW5kbWVudQ0KICAgICtlbmRp
Zg0KICAgICsNCiAgICAraWYgeQ0KICAgICttZW51ICJtZW51IGlmIHkiDQogICAgK2VuZG1lbnUN
CiAgICArZW5kaWYNCiAgICArDQogICAgK2lmIG0NCiAgICArbWVudSAibWVudSBpZiBtIGFuZCB5
Ig0KICAgICsgICAgZGVwZW5kcyBvbiB5DQogICAgK2VuZG1lbnUNCiAgICArZW5kaWYNCiAgICAr
DQogICAgKyMNCiAgICArIyBDb21tZW50IHZpc2liaWxpdHkNCiAgICArIw0KICAgICsNCiAgICAr
Y29tbWVudCAiY29tbWVudCBuIg0KICAgICsgICAgZGVwZW5kcyBvbiBuDQogICAgK2NvbW1lbnQg
ImNvbW1lbnQgbSINCiAgICArICAgIGRlcGVuZHMgb24gbQ0KICAgICtjb21tZW50ICJjb21tZW50
IHkiDQogICAgKyAgICBkZXBlbmRzIG9uIHkNCiAgICArDQogICAgK2lmIG4NCiAgICArY29tbWVu
dCAiY29tbWVudCBpZiBuIg0KICAgICtlbmRpZg0KICAgICsNCiAgICAraWYgbQ0KICAgICtjb21t
ZW50ICJjb21tZW50IGlmIG0iDQogICAgK2VuZGlmDQogICAgKw0KICAgICtpZiB5DQogICAgK2Nv
bW1lbnQgImNvbW1lbnQgaWYgeSINCiAgICArZW5kaWYNCiAgICArDQogICAgK2lmICJ5Ig0KICAg
ICsNCiAgICArbWVudSAibWVudSB3aXRoIGNvbW1lbnQiDQogICAgKyAgICBkZXBlbmRzIG9uIG0N
CiAgICArDQogICAgK2NvbW1lbnQgImRvdWJsZS1uZXN0ZWQgbSBjb21tZW50Ig0KICAgICsgICAg
ZGVwZW5kcyBvbiB5DQogICAgKw0KICAgICtlbmRtZW51DQogICAgKw0KICAgICtlbmRpZg0KICAg
ICsNCiAgICArIyBVc2VkIHRvIHZlcmlmeSB0aGF0IHN0cmluZy9pbnQvaGV4IHN5bWJvbHMgd2l0
aCBtIHZpc2liaWxpdHkgYWNjZXB0IGEgdXNlcg0KICAgICsjIHZhbHVlDQogICAgKw0KICAgICtp
ZiBtDQogICAgKw0KICAgICtjb25maWcgU1RSSU5HX20NCiAgICArICAgIHN0cmluZyAic3RyaW5n
Ig0KICAgICsNCiAgICArY29uZmlnIElOVF9tDQogICAgKyAgICBpbnQgImludCINCiAgICArDQog
ICAgK2NvbmZpZyBIRVhfbQ0KICAgICsgICAgaGV4ICJoZXgiDQogICAgKw0KICAgICtlbmRpZg0K
ICAgICsNCiAgICArIyBNZW51ICd2aXNpYmxlIGlmJyB2aXNpYmlsaXR5DQogICAgKw0KICAgICtt
ZW51ICJuLXZpc2libGUgbWVudSINCiAgICArICAgIHZpc2libGUgaWYgbg0KICAgICsNCiAgICAr
Y29uZmlnIFZJU0lCTEVfSUZfTg0KICAgICsgICAgdHJpc3RhdGUgInZpc2libGUgaWYgbiINCiAg
ICArDQogICAgK2VuZG1lbnUNCiAgICArDQogICAgK21lbnUgIm0tdmlzaWJsZSBtZW51Ig0KICAg
ICsgICAgdmlzaWJsZSBpZiBtDQogICAgKw0KICAgICtjb25maWcgVklTSUJMRV9JRl9NDQogICAg
KyAgICB0cmlzdGF0ZSAidmlzaWJsZSBpZiBtIg0KICAgICsNCiAgICArZW5kbWVudQ0KICAgICsN
CiAgICArbWVudSAieS12aXNpYmxlIG1lbnUiDQogICAgKyAgICB2aXNpYmxlIGlmIHkNCiAgICAr
DQogICAgK2NvbmZpZyBWSVNJQkxFX0lGX1kNCiAgICArICAgIHRyaXN0YXRlICJ2aXNpYmxlIGlm
IG0iDQogICAgKw0KICAgICtlbmRtZW51DQogICAgKw0KICAgICttZW51ICJtLXZpc2libGUgbWVu
dSAyIg0KICAgICsgICAgdmlzaWJsZSBpZiB5IHx8IG4NCiAgICArICAgIHZpc2libGUgaWYgbSAm
JiB5DQogICAgKyAgICB2aXNpYmxlIGlmIHkNCiAgICArDQogICAgK2lmIHkNCiAgICArDQogICAg
K2NvbmZpZyBWSVNJQkxFX0lGX01fMg0KICAgICsgICAgdHJpc3RhdGUgInZpc2libGUgaWYgbSAy
Ig0KICAgICsNCiAgICArZW5kaWYNCiAgICArDQogICAgK2VuZG1lbnUNCiAgICBkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19pbmRlbnRlZCBiL3N1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9jb25maWdfaW5kZW50ZWQNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K
ICAgIGluZGV4IDAwMDAwMDAuLmQ1N2Q4YjQNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIv
c3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19pbmRlbnRlZA0KICAgIEBAIC0wLDAgKzEs
MyBAQA0KICAgICsjIEluZGVudGVkIGFzc2lnbm1lbnRzIHNob3VsZCBiZSBpZ25vcmVkIHRvIGJl
IGNvbXBhdGlibGUgd2l0aCB0aGUgQw0KICAgICsjIGltcGxlbWVudGF0aW9uDQogICAgKyBDT05G
SUdfSUdOT1JFTUU9bg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
Y29uZmlnX3NldF9ib29sIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19zZXRfYm9v
bA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZDJkY2NiZg0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvY29u
ZmlnX3NldF9ib29sDQogICAgQEAgLTAsMCArMSBAQA0KICAgICtDT05GSUdfQk9PTD15DQogICAg
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfc2V0X3N0cmluZyBi
L3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfc2V0X3N0cmluZw0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uM2ExMjUwYQ0KICAgIC0tLSAvZGV2L251
bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvY29uZmlnX3NldF9zdHJpbmcN
CiAgICBAQCAtMCwwICsxIEBADQogICAgK0NPTkZJR19TVFJJTkc9ImZvbyBiYXIiDQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9kZWZjb25maWdfMSBiL3N1cHBvcnQv
a2NvbmZpZ2xpYi90ZXN0cy9kZWZjb25maWdfMQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvZGVmY29uZmlnXzIgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvZGVmY29u
ZmlnXzINCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmU2OWRl
MjkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL2VtcHR5IGIvc3Vw
cG9ydC9rY29uZmlnbGliL3Rlc3RzL2VtcHR5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi5lNjlkZTI5DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Z2xpYi90ZXN0cy9rY29uZmlnZnVuY3Rpb25zLnB5IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L2tjb25maWdmdW5jdGlvbnMucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IDAwMDAwMDAuLmU3NjA0NjgNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL2tjb25maWdmdW5jdGlvbnMucHkNCiAgICBAQCAtMCwwICsxLDE0IEBA
DQogICAgK2RlZiBhZGQoa2NvbmYsIG5hbWUsICphcmdzKToNCiAgICArICAgIHJldHVybiBzdHIo
c3VtKG1hcChpbnQsIGFyZ3MpKSkNCiAgICArDQogICAgK2RlZiBvbmUoa2NvbmYsIG5hbWUsIHMp
Og0KICAgICsgICAgcmV0dXJuIG5hbWUgKyAyKnMNCiAgICArDQogICAgK2RlZiBvbmVfb3JfbW9y
ZShrY29uZiwgbmFtZSwgYXJnLCAqYXJncyk6DQogICAgKyAgICByZXR1cm4gYXJnICsgIiArICIg
KyAiLCIuam9pbihhcmdzKQ0KICAgICsNCiAgICArZnVuY3Rpb25zID0gew0KICAgICsgICAgImFk
ZCI6ICAgICAgICAgKGFkZCwgICAgICAgICAwLCBOb25lKSwNCiAgICArICAgICJvbmUiOiAgICAg
ICAgIChvbmUsICAgICAgICAgMSwgICAgMSksDQogICAgKyAgICAib25lLW9yLW1vcmUiOiAob25l
X29yX21vcmUsIDEsIE5vbmUpLA0KICAgICt9DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZ2xpYi90ZXN0cy9yZWx0ZXN0IGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3JlbHRlc3QN
CiAgICBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDAwMDAwMDAuLjNlMDllNWYNCiAg
ICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3JlbHRl
c3QNCiAgICBAQCAtMCwwICsxLDUxIEBADQogICAgKyMhL3Vzci9iaW4vZW52IGJhc2gNCiAgICAr
DQogICAgKyMgUnVucyB0aGUgdGVzdCBzdWl0ZSBhbmQgYWxsIGV4YW1wbGVzIHNjcmlwdHMgd2l0
aCBQeXRob24gMiBhbmQgUHl0aG9uIDMsDQogICAgKyMgYmFpbGluZyBpbW1lZGlhdGVseSBpZiBh
bnl0aGluZyBmYWlscy4gRm9yIHRoZSBleGFtcGxlcyB0aGF0IGFyZW4ndCB0ZXN0ZWQgaW4NCiAg
ICArIyB0aGUgdGVzdCBzdWl0ZSwgd2UganVzdCBjb25maXJtIHRoYXQgdGhleSBhdCBsZWFzdCBy
dW4uDQogICAgKyMNCiAgICArIyBTaG91bGQgYmUgcnVuIGZyb20gdGhlIGtlcm5lbCByb290IHdp
dGggICQgS2NvbmZpZ2xpYi90ZXN0cy9yZWx0ZXN0DQogICAgKw0KICAgICt0ZXN0X3NjcmlwdCgp
IHsNCiAgICArICAgIGVjaG8gLWUgIlxuPT09PT09PT09PT09PT09PT0gJDEgd2l0aCAkcHkgPT09
PT09PT09PT09PT09PT1cbiINCiAgICArICAgIGlmICgoJCMgPT0gMSkpOyB0aGVuDQogICAgKyAg
ICAgICAgbWFrZSBzY3JpcHRjb25maWcgUFlUSE9OQ01EPSRweSBTQ1JJUFQ9JDENCiAgICArICAg
IGVsc2UNCiAgICArICAgICAgICBtYWtlIHNjcmlwdGNvbmZpZyBQWVRIT05DTUQ9JHB5IFNDUklQ
VD0kMSBTQ1JJUFRfQVJHPSIkMiINCiAgICArICAgIGZpDQogICAgKw0KICAgICsgICAgaWYgKCgk
PykpOyB0aGVuDQogICAgKyAgICAgICAgZWNobyAiJDEgZmFpbGVkIHRvIHJ1biB3aXRoICRweSIN
CiAgICArICAgICAgICBleGl0IDENCiAgICArICAgIGZpDQogICAgK30NCiAgICArDQogICAgK2Zv
ciBweSBpbiBweXRob24yIHB5dGhvbjM7IGRvDQogICAgKyAgICBlY2hvIC1lICJcbj09PT09PT09
PT09PT09PT09IFRlc3Qgc3VpdGUgd2l0aCAkcHkgPT09PT09PT09PT09PT09PT1cbiINCiAgICAr
DQogICAgKyAgICBpZiAhICRweSBLY29uZmlnbGliL3Rlc3RzdWl0ZS5weTsgdGhlbg0KICAgICsg
ICAgICAgIGVjaG8gInRlc3Qgc3VpdGUgZmFpbGVkIGZvciAkcHkiDQogICAgKyAgICAgICAgZXhp
dCAxDQogICAgKyAgICBmaQ0KICAgICsNCiAgICArICAgICMgQ2hlY2sgdGhhdCB0aGUgZXhhbXBs
ZSBzY3JpcHRzIHRoYXQgYXJlbid0IHRlc3RlZCBieSB0aGUgdGVzdCBzdWl0ZSBydW4NCiAgICAr
ICAgICMgYXQgbGVhc3QNCiAgICArDQogICAgKyAgICB0ZXN0X3NjcmlwdCBLY29uZmlnbGliL2V4
YW1wbGVzL2RlZmNvbmZpZ19vbGRjb25maWcucHkNCiAgICArICAgIHRlc3Rfc2NyaXB0IEtjb25m
aWdsaWIvZXhhbXBsZXMvZXZhbF9leHByLnB5IE1PRFVMRVMNCiAgICArICAgIHRlc3Rfc2NyaXB0
IEtjb25maWdsaWIvZXhhbXBsZXMvZmluZF9zeW1ib2wucHkgWDg2DQogICAgKyAgICB0ZXN0X3Nj
cmlwdCBLY29uZmlnbGliL2V4YW1wbGVzL2hlbHBfZ3JlcC5weSBnZW5lcmFsDQogICAgKyAgICB0
ZXN0X3NjcmlwdCBLY29uZmlnbGliL2V4YW1wbGVzL3ByaW50X3N5bV9pbmZvLnB5IE1PRFVMRVMN
CiAgICArICAgIHRlc3Rfc2NyaXB0IEtjb25maWdsaWIvZXhhbXBsZXMvcHJpbnRfdHJlZS5weQ0K
ICAgICsNCiAgICArICAgICRweSBLY29uZmlnbGliL2V4YW1wbGVzL21lbnVjb25maWdfZXhhbXBs
ZS5weSBLY29uZmlnbGliL2V4YW1wbGVzL0ttZW51Y29uZmlnIDw8RU5EDQogICAgK0JPT0wNCiAg
ICArbg0KICAgICtFTkQNCiAgICArICAgIGlmICgoJD8pKTsgdGhlbg0KICAgICsgICAgICAgIGVj
aG8gIm1lbnVjb25maWdfZXhhbXBsZS5weSBmYWlsZWQgd2l0aCAkcHkiDQogICAgKyAgICAgICAg
ZXhpdCAxDQogICAgKyAgICBmaQ0KICAgICtkb25lDQogICAgKw0KICAgICtlY2hvICJldmVyeXRo
aW5nIG9rYXkiDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIv
S2NvbmZpZ19zeW1saW5rXzIgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tjb25maWdf
c3ltbGlua18yDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5h
ZWJhOTg1DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90
ZXN0cy9zdWIvS2NvbmZpZ19zeW1saW5rXzINCiAgICBAQCAtMCwwICsxIEBADQogICAgK3Jzb3Vy
Y2UgIktjb25maWdfc3ltbGlua18zIg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWds
aWIvdGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18zIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3Rz
L3N1Yi9LY29uZmlnX3N5bWxpbmtfMw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uMjBiNGUwNg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvc3ViL0tjb25maWdfc3ltbGlua18zDQogICAgQEAgLTAsMCArMSwy
IEBADQogICAgK2NvbmZpZyBGT1VORE1FDQogICAgKyAgICBib29sDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dyc291cmNlZDEgYi9zdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWQxDQogICAgbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40OWRhYzM2DQogICAgLS0tIC9kZXYv
bnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dy
c291cmNlZDENCiAgICBAQCAtMCwwICsxIEBADQogICAgK2NvbmZpZyBNVUxUSV9ERUYNCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3Vy
Y2VkMiBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xvY2F0aW9uX2dyc291cmNlZDIN
CiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjQ5ZGFjMzYNCiAg
ICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N1Yi9L
bG9jYXRpb25fZ3Jzb3VyY2VkMg0KICAgIEBAIC0wLDAgKzEgQEANCiAgICArY29uZmlnIE1VTFRJ
X0RFRg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2Nh
dGlvbl9nc291cmNlZDEgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9n
c291cmNlZDENCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjQ5
ZGFjMzYNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnbGliL3Rl
c3RzL3N1Yi9LbG9jYXRpb25fZ3NvdXJjZWQxDQogICAgQEAgLTAsMCArMSBAQA0KICAgICtjb25m
aWcgTVVMVElfREVGDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9z
dWIvS2xvY2F0aW9uX2dzb3VyY2VkMiBiL3N1cHBvcnQva2NvbmZpZ2xpYi90ZXN0cy9zdWIvS2xv
Y2F0aW9uX2dzb3VyY2VkMg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAw
MDAwMC4uNDlkYWMzNg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9nc291cmNlZDINCiAgICBAQCAtMCwwICsxIEBADQog
ICAgK2NvbmZpZyBNVUxUSV9ERUYNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGli
L3Rlc3RzL3N1Yi9LbG9jYXRpb25fcnNvdXJjZWQgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMv
c3ViL0tsb2NhdGlvbl9yc291cmNlZA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uYzZmMTg1ZA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0
L2tjb25maWdsaWIvdGVzdHMvc3ViL0tsb2NhdGlvbl9yc291cmNlZA0KICAgIEBAIC0wLDAgKzEs
MiBAQA0KICAgICsNCiAgICArY29uZmlnIE1VTFRJX0RFRg0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL2RlZmNvbmZpZ19pbl9zdWIgYi9zdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvc3ViL2RlZmNvbmZpZ19pbl9zdWINCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLmU2OWRlMjkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzL3N1Yi9zdWIvS2NvbmZpZ19zeW1saW5rXzEgYi9zdXBwb3J0L2tjb25m
aWdsaWIvdGVzdHMvc3ViL3N1Yi9LY29uZmlnX3N5bWxpbmtfMQ0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYmNlZWM4Yg0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ViL3N1Yi9LY29uZmlnX3N5bWxpbmtf
MQ0KICAgIEBAIC0wLDAgKzEsMiBAQA0KICAgICsjIFNvdXJjZXMgdGVzdHMvc3ViL0tjb25maWdf
c3ltbGlua18yLCB3aXRoIGFuIGFic29sdXRlIHBhdGgNCiAgICArc291cmNlICIkKEtDT05GSUdf
U1lNTElOS18yKSINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnbGliL3Rlc3RzL3N5
bWxpbmsgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ltbGluaw0KICAgIG5ldyBmaWxlIG1v
ZGUgMTIwMDAwDQogICAgaW5kZXggMDAwMDAwMC4uNTY1NjIzZQ0KICAgIC0tLSAvZGV2L251bGwN
CiAgICArKysgYi9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHMvc3ltbGluaw0KICAgIEBAIC0wLDAg
KzEgQEANCiAgICArc3ViL3N1Yg0KICAgIFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KICAg
IGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWdsaWIvdGVzdHN1aXRlLnB5IGIvc3VwcG9ydC9r
Y29uZmlnbGliL3Rlc3RzdWl0ZS5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uM2E2YTNhNg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0
L2tjb25maWdsaWIvdGVzdHN1aXRlLnB5DQogICAgQEAgLTAsMCArMSwzMTM2IEBADQogICAgKyMg
Q29weXJpZ2h0IChjKSAyMDExLTIwMTksIFVsZiBNYWdudXNzb24NCiAgICArIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogSVNDDQogICAgKw0KICAgICsjIFRoaXMgaXMgdGhlIEtjb25maWdsaWIg
dGVzdCBzdWl0ZS4gSXQgcnVucyBzZWxmdGVzdHMgb24gS2NvbmZpZ3MgcHJvdmlkZWQgYnkNCiAg
ICArIyB1cyBhbmQgdGVzdHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBDIEtjb25maWcgaW1wbGVt
ZW50YXRpb24gYnkgY29tcGFyaW5nIHRoZQ0KICAgICsjIG91dHB1dCBvZiBLY29uZmlnbGliIHdp
dGggdGhlIG91dHB1dCBvZiB0aGUgc2NyaXB0cy9rY29uZmlnLypjb25mIHV0aWxpdGllcw0KICAg
ICsjIGZvciBkaWZmZXJlbnQgdGFyZ2V0cyBhbmQgZGVmY29uZmlncy4gSXQgc2hvdWxkIGJlIHJ1
biBmcm9tIHRoZSB0b3AtbGV2ZWwNCiAgICArIyBrZXJuZWwgZGlyZWN0b3J5IHdpdGgNCiAgICAr
Iw0KICAgICsjICAgJCBweXRob24gS2NvbmZpZ2xpYi90ZXN0c3VpdGUucHkNCiAgICArIw0KICAg
ICsjIFNvbWUgYWRkaXRpb25hbCBvcHRpb25zIGNhbiBiZSB0dXJuZWQgb24gYnkgcGFzc2luZyB0
aGVtIGFzIGFyZ3VtZW50cy4gVGhleQ0KICAgICsjIGRlZmF1bHQgdG8gb2ZmLg0KICAgICsjDQog
ICAgKyMgIC0gb2JzZXNzaXZlOg0KICAgICsjICAgIEJ5IGRlZmF1bHQsIG9ubHkgdmFsaWQgYXJj
aC9kZWZjb25maWcgcGFpcnMgYXJlIHRlc3RlZC4gSW4gb2JzZXNzaXZlIG1vZGUsDQogICAgKyMg
ICAgZXZlcnkgYXJjaCB3aWxsIGJlIHRlc3RlZCB3aXRoIGV2ZXJ5IGRlZmNvbmZpZy4gSW5jcmVh
c2VzIHRoZSB0ZXN0aW5nIHRpbWUNCiAgICArIyAgICBieSBhbiBvcmRlciBvZiBtYWduaXR1ZGUu
IE9jY2FzaW9uYWxseSBmaW5kcyAodXN1YWxseSBvYnNjdXJlKSBidWdzLCBhbmQgSQ0KICAgICsj
ICAgIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHBhc3NlcyB3aXRoIGl0Lg0KICAgICsjDQogICAgKyMg
IC0gb2JzZXNzaXZlLW1pbi1jb25maWc6DQogICAgKyMgICAgTGlrZSBvYnNlc3NpdmUsIGZvciB0
aGUgbWluaW1hbCBjb25maWd1YXRpb24gKGRlZmNvbmZpZykgdGVzdHMuDQogICAgKyMNCiAgICAr
IyAgLSBsb2c6DQogICAgKyMgICAgTG9nIHRpbWVzdGFtcGVkIGRlZmNvbmZpZyB0ZXN0IGZhaWx1
cmVzIHRvIHRoZSBmaWxlIHRlc3RfZGVmY29uZmlnX2ZhaWxzLg0KICAgICsjICAgIEhhbmR5IGlu
IG9ic2Vzc2l2ZSBtb2RlLg0KICAgICsjDQogICAgKyMgRm9yIGV4YW1wbGUsIHRoaXMgY29tbWFu
ZHMgcnVucyB0aGUgdGVzdCBzdWl0ZSBpbiBvYnNlc3NpdmUgbW9kZSB3aXRoIGxvZ2dpbmcNCiAg
ICArIyBlbmFibGVkOg0KICAgICsjDQogICAgKyMgICAkIHB5dGhvbigzKSBLY29uZmlnbGliL3Rl
c3RzdWl0ZS5weSBvYnNlc3NpdmUgbG9nDQogICAgKyMNCiAgICArIyBweXB5IHdvcmtzIHRvbywg
YW5kIHJ1bnMgbW9zdCB0ZXN0cyBtdWNoIGZhc3RlciB0aGFuIENQeXRob24uDQogICAgKyMNCiAg
ICArIyBBbGwgdGVzdHMgc2hvdWxkIHBhc3MuIFJlcG9ydCByZWdyZXNzaW9ucyB0byB1bGZhbGl6
ZXIgYS50IEdvb2dsZSdzIGVtYWlsDQogICAgKyMgc2VydmljZS4NCiAgICArDQogICAgK2ltcG9y
dCBkaWZmbGliDQogICAgK2ltcG9ydCBlcnJubw0KICAgICtpbXBvcnQgb3MNCiAgICAraW1wb3J0
IHBsYXRmb3JtDQogICAgK2ltcG9ydCByZQ0KICAgICtpbXBvcnQgc2h1dGlsDQogICAgK2ltcG9y
dCBzdWJwcm9jZXNzDQogICAgK2ltcG9ydCBzeXMNCiAgICAraW1wb3J0IHRlbXBmaWxlDQogICAg
K2ltcG9ydCB0ZXh0d3JhcA0KICAgICsNCiAgICArZnJvbSBrY29uZmlnbGliIGltcG9ydCBLY29u
ZmlnLCBTeW1ib2wsIENob2ljZSwgQ09NTUVOVCwgTUVOVSwgTWVudU5vZGUsIFwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgICBCT09MLCBUUklTVEFURSwgSEVYLCBTVFJJTkcsIFwNCiAgICAr
ICAgICAgICAgICAgICAgICAgICAgICBUUklfVE9fU1RSLCBcDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgICAgZXNjYXBlLCB1bmVzY2FwZSwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
IGV4cHJfc3RyLCBleHByX3ZhbHVlLCBleHByX2l0ZW1zLCBzcGxpdF9leHByLCBcDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgX29yZGVyZWRfdW5pcXVlLCBcDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgT1IsIEFORCwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgIEtjb25m
aWdFcnJvcg0KICAgICsNCiAgICArDQogICAgK2RlZiBzaGVsbChjbWQpOg0KICAgICsgICAgd2l0
aCBvcGVuKG9zLmRldm51bGwsICJ3IikgYXMgZGV2bnVsbDoNCiAgICArICAgICAgICBzdWJwcm9j
ZXNzLmNhbGwoY21kLCBzaGVsbD1UcnVlLCBzdGRvdXQ9ZGV2bnVsbCwgc3RkZXJyPWRldm51bGwp
DQogICAgKw0KICAgICsNCiAgICArYWxsX3Bhc3NlZCA9IFRydWUNCiAgICArDQogICAgKw0KICAg
ICtkZWYgZmFpbChtc2c9Tm9uZSk6DQogICAgKyAgICBnbG9iYWwgYWxsX3Bhc3NlZA0KICAgICsg
ICAgYWxsX3Bhc3NlZCA9IEZhbHNlDQogICAgKyAgICBpZiBtc2cgaXMgbm90IE5vbmU6DQogICAg
KyAgICAgICAgcHJpbnQoImZhaWw6ICIgKyBtc2cpDQogICAgKw0KICAgICsNCiAgICArZGVmIHZl
cmlmeShjb25kLCBtc2cpOg0KICAgICsgICAgaWYgbm90IGNvbmQ6DQogICAgKyAgICAgICAgZmFp
bChtc2cpDQogICAgKw0KICAgICsNCiAgICArZGVmIHZlcmlmeV9lcXVhbCh4LCB5KToNCiAgICAr
ICAgIGlmIHggIT0geToNCiAgICArICAgICAgICBmYWlsKCIne30nIGRvZXMgbm90IGVxdWFsICd7
fSciLmZvcm1hdCh4LCB5KSkNCiAgICArDQogICAgKw0KICAgICsjIFByZXZlbnQgYWNjaWRlbnRh
bCBsb2FkaW5nIG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgYnkgcmVtb3ZpbmcNCiAgICArIyBLQ09O
RklHX0FMTENPTkZJRyBmcm9tIHRoZSBlbnZpcm9ubWVudA0KICAgICtvcy5lbnZpcm9uLnBvcCgi
S0NPTkZJR19BTExDT05GSUciLCBOb25lKQ0KICAgICsNCiAgICArb2JzZXNzaXZlID0gRmFsc2UN
CiAgICArb2JzZXNzaXZlX21pbl9jb25maWcgPSBGYWxzZQ0KICAgICtsb2cgPSBGYWxzZQ0KICAg
ICsNCiAgICArDQogICAgK2RlZiBydW5fdGVzdHMoKToNCiAgICArICAgIGdsb2JhbCBvYnNlc3Np
dmUsIGxvZw0KICAgICsgICAgZm9yIHMgaW4gc3lzLmFyZ3ZbMTpdOg0KICAgICsgICAgICAgIGlm
IHMgPT0gIm9ic2Vzc2l2ZSI6DQogICAgKyAgICAgICAgICAgIG9ic2Vzc2l2ZSA9IFRydWUNCiAg
ICArICAgICAgICAgICAgcHJpbnQoIk9ic2Vzc2l2ZSBtb2RlIGVuYWJsZWQiKQ0KICAgICsgICAg
ICAgIGVsaWYgcyA9PSAib2JzZXNzaXZlLW1pbi1jb25maWciOg0KICAgICsgICAgICAgICAgICBv
YnNlc3NpdmVfbWluX2NvbmZpZyA9IFRydWUNCiAgICArICAgICAgICAgICAgcHJpbnQoIk9ic2Vz
c2l2ZSBtaW5pbWFsIGNvbmZpZyBtb2RlIGVuYWJsZWQiKQ0KICAgICsgICAgICAgIGVsaWYgcyA9
PSAibG9nIjoNCiAgICArICAgICAgICAgICAgbG9nID0gVHJ1ZQ0KICAgICsgICAgICAgICAgICBw
cmludCgiTG9nIG1vZGUgZW5hYmxlZCIpDQogICAgKyAgICAgICAgZWxzZToNCiAgICArICAgICAg
ICAgICAgcHJpbnQoIlVucmVjb2duaXplZCBvcHRpb24gJ3t9JyIuZm9ybWF0KHMpKQ0KICAgICsg
ICAgICAgICAgICByZXR1cm4NCiAgICArDQogICAgKyAgICBydW5fc2VsZnRlc3RzKCkNCiAgICAr
ICAgIHJ1bl9jb21wYXRpYmlsaXR5X3Rlc3RzKCkNCiAgICArDQogICAgKw0KICAgICtkZWYgcnVu
X3NlbGZ0ZXN0cygpOg0KICAgICsgICAgIw0KICAgICsgICAgIyBDb21tb24gaGVscGVyIGZ1bmN0
aW9ucy4gVGhlc2UgYWxsIGV4cGVjdCAnYycgdG8gaG9sZCB0aGUgY3VycmVudA0KICAgICsgICAg
IyBjb25maWd1cmF0aW9uLg0KICAgICsgICAgIw0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlf
dmFsdWUoc3ltX25hbWUsIHZhbCk6DQogICAgKyAgICAgICAgIyBWZXJpZmllcyB0aGF0IGEgc3lt
Ym9sIGhhcyBhIHBhcnRpY3VsYXIgdmFsdWUuDQogICAgKw0KICAgICsgICAgICAgIGlmIGlzaW5z
dGFuY2UodmFsLCBpbnQpOg0KICAgICsgICAgICAgICAgICB2YWwgPSBUUklfVE9fU1RSW3ZhbF0N
CiAgICArDQogICAgKyAgICAgICAgc3ltID0gYy5zeW1zW3N5bV9uYW1lXQ0KICAgICsgICAgICAg
IHZlcmlmeShzeW0uc3RyX3ZhbHVlID09IHZhbCwNCiAgICArICAgICAgICAgICAgICAgJ2V4cGVj
dGVkIHt9IHRvIGhhdmUgdGhlIHZhbHVlICJ7fSIsIGhhZCB0aGUgdmFsdWUgInt9IicNCiAgICAr
ICAgICAgICAgICAgICAgLmZvcm1hdChzeW1fbmFtZSwgdmFsLCBzeW0uc3RyX3ZhbHVlKSkNCiAg
ICArDQogICAgKyAgICBkZWYgYXNzaWduX2FuZF92ZXJpZnlfdmFsdWUoc3ltX25hbWUsIHZhbCwg
bmV3X3ZhbCk6DQogICAgKyAgICAgICAgIyBBc3NpZ25zICd2YWwnIHRvIGEgc3ltYm9sIGFuZCB2
ZXJpZmllcyB0aGF0IGl0cyB2YWx1ZSBiZWNvbWVzDQogICAgKyAgICAgICAgIyAnbmV3X3ZhbCcu
IEFzc3VtZXMgKGFuZCB0ZXN0cykgdGhhdCAndmFsJyBpcyB2YWxpZCBmb3IgdGhlDQogICAgKyAg
ICAgICAgIyBzeW1ib2wgdHlwZS4NCiAgICArDQogICAgKyAgICAgICAgaWYgaXNpbnN0YW5jZShu
ZXdfdmFsLCBpbnQpOg0KICAgICsgICAgICAgICAgICBuZXdfdmFsID0gVFJJX1RPX1NUUltuZXdf
dmFsXQ0KICAgICsNCiAgICArICAgICAgICBzeW0gPSBjLnN5bXNbc3ltX25hbWVdDQogICAgKyAg
ICAgICAgb2xkX3ZhbCA9IHN5bS5zdHJfdmFsdWUNCiAgICArICAgICAgICB2ZXJpZnkoc3ltLnNl
dF92YWx1ZSh2YWwpLA0KICAgICsgICAgICAgICAgICAgICAiYXNzaWduaW5nICd7fScgdG8ge30g
dW5leHBlY3RlZGx5IGZhaWxlZCINCiAgICArICAgICAgICAgICAgICAgLmZvcm1hdCh2YWwsIHN5
bV9uYW1lKSkNCiAgICArICAgICAgICB2ZXJpZnkoc3ltLnN0cl92YWx1ZSA9PSBuZXdfdmFsLA0K
ICAgICsgICAgICAgICAgICAgICAiZXhwZWN0ZWQge30gdG8gaGF2ZSB0aGUgdmFsdWUgJ3t9JyBh
ZnRlciBiZWluZyBhc3NpZ25lZCB0aGUgIg0KICAgICsgICAgICAgICAgICAgICAidmFsdWUgJ3t9
Jy4gSW5zdGVhZCwgdGhlIHZhbHVlIGlzICd7fScuIFRoZSBvbGQgdmFsdWUgd2FzICINCiAgICAr
ICAgICAgICAgICAgICAgIid7fScuIg0KICAgICsgICAgICAgICAgICAgICAuZm9ybWF0KHN5bV9u
YW1lLCBuZXdfdmFsLCB2YWwsIHN5bS5zdHJfdmFsdWUsIG9sZF92YWwpKQ0KICAgICsNCiAgICAr
ICAgIGRlZiBhc3NpZ25fYW5kX3ZlcmlmeShzeW1fbmFtZSwgdXNlcl92YWwpOg0KICAgICsgICAg
ICAgICMgTGlrZSBhc3NpZ25fYW5kX3ZlcmlmeV92YWx1ZSgpLCB3aXRoIHRoZSBleHBlY3RlZCB2
YWx1ZSBiZWluZyB0aGUNCiAgICArICAgICAgICAjIHZhbHVlIGp1c3Qgc2V0Lg0KICAgICsNCiAg
ICArICAgICAgICBhc3NpZ25fYW5kX3ZlcmlmeV92YWx1ZShzeW1fbmFtZSwgdXNlcl92YWwsIHVz
ZXJfdmFsKQ0KICAgICsNCiAgICArICAgIGRlZiBhc3NpZ25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVl
KHN5bV9uYW1lLCB2YWwsIHVzZXJfdmFsLCB2YWxpZCk6DQogICAgKyAgICAgICAgIyBBc3NpZ25z
IGEgdXNlciB2YWx1ZSB0byB0aGUgc3ltYm9sIGFuZCB2ZXJpZmllcyB0aGUgbmV3IHVzZXIgdmFs
dWUuDQogICAgKyAgICAgICAgIyBJZiB2YWxpZCBpcyBUcnVlLCB0aGUgdXNlciB2YWx1ZSBpcyB2
YWxpZCBmb3IgdGhlIHR5cGUsIG90aGVyd2lzZQ0KICAgICsgICAgICAgICMgbm90LiBUaGlzIGlz
IHVzZWQgdG8gdGVzdCB0aGUgc2V0X3ZhbHVlKCkgcmV0dXJuIHZhbHVlLg0KICAgICsNCiAgICAr
ICAgICAgICBzeW0gPSBjLnN5bXNbc3ltX25hbWVdDQogICAgKyAgICAgICAgc3ltX29sZF91c2Vy
X3ZhbCA9IHN5bS51c2VyX3ZhbHVlDQogICAgKw0KICAgICsgICAgICAgIHZlcmlmeShzeW0uc2V0
X3ZhbHVlKHZhbCkgPT0gdmFsaWQsDQogICAgKyAgICAgICAgICAgICAgICJleHBlY3RlZCB0aGUg
dXNlciB2YWx1ZSAne30nIHRvIGJlIHt9IGZvciB7fSwgd2FzIG5vdCINCiAgICArICAgICAgICAg
ICAgICAgLmZvcm1hdCh2YWwsICJ2YWxpZCIgaWYgdmFsaWQgZWxzZSAiaW52YWxpZCIsIHN5bV9u
YW1lKSkNCiAgICArICAgICAgICB2ZXJpZnkoc3ltLnVzZXJfdmFsdWUgPT0gdXNlcl92YWwsDQog
ICAgKyAgICAgICAgICAgICAgICJ0aGUgYXNzaWduZWQgdXNlciB2YWx1ZSAne30nIHdhc24ndCBy
ZWZsZWN0ZWQgaW4gdXNlcl92YWx1ZSAiDQogICAgKyAgICAgICAgICAgICAgICJvbiB0aGUgc3lt
Ym9sIHt9LiBJbnN0ZWFkLCB0aGUgbmV3IHVzZXJfdmFsdWUgd2FzICd7fScuIFRoZSAiDQogICAg
KyAgICAgICAgICAgICAgICJvbGQgdXNlciB2YWx1ZSB3YXMgJ3t9Jy4iDQogICAgKyAgICAgICAg
ICAgICAgIC5mb3JtYXQodXNlcl92YWwsIHN5bV9uYW1lLCBzeW0udXNlcl92YWx1ZSwgc3ltX29s
ZF91c2VyX3ZhbCkpDQogICAgKw0KICAgICsgICAgIw0KICAgICsgICAgIyBTZWxmdGVzdHMNCiAg
ICArICAgICMNCiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyBzdHJpbmcgbGl0ZXJhbCBs
ZXhpbmciKQ0KICAgICsNCiAgICArICAgICMgRHVtbXkgZW1wdHkgY29uZmlndXJhdGlvbiBqdXN0
IHRvIGdldCBhIEtjb25maWcgb2JqZWN0DQogICAgKyAgICBjID0gS2NvbmZpZygiS2NvbmZpZ2xp
Yi90ZXN0cy9lbXB0eSIpDQogICAgKw0KICAgICsgICAgZGVmIHZlcmlmeV9zdHJpbmdfbGV4KHMs
IGV4cGVjdGVkKToNCiAgICArICAgICAgICAjIFZlcmlmaWVzIHRoYXQgYSBjb25zdGFudCBzeW1i
b2wgd2l0aCB0aGUgbmFtZSAncmVzJyBpcyBwcm9kdWNlZCBmcm9tDQogICAgKyAgICAgICAgIyBs
ZXhpbmcgJ3MnDQogICAgKw0KICAgICsgICAgICAgIHJlcyA9IGMuX3Rva2VuaXplKCJpZiAiICsg
cylbMV0ubmFtZQ0KICAgICsgICAgICAgIHZlcmlmeShyZXMgPT0gZXhwZWN0ZWQsDQogICAgKyAg
ICAgICAgICAgICAgICJleHBlY3RlZCA8e30+IHRvIHByb2R1Y2VkIHRoZSBjb25zdGFudCBzeW1i
b2wgPHt9PiwgIg0KICAgICsgICAgICAgICAgICAgICAncHJvZHVjZWQgPHt9PicuZm9ybWF0KHNb
MTotMV0sIGV4cGVjdGVkLCByZXMpKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9zdHJpbmdfbGV4
KHIiIiIgIiIgIiIiLCAiIikNCiAgICArICAgIHZlcmlmeV9zdHJpbmdfbGV4KHIiIiIgJycgIiIi
LCAiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfc3RyaW5nX2xleChyIiIiICJhIiAiIiIsICJh
IikNCiAgICArICAgIHZlcmlmeV9zdHJpbmdfbGV4KHIiIiIgJ2EnICIiIiwgImEiKQ0KICAgICsg
ICAgdmVyaWZ5X3N0cmluZ19sZXgociIiIiAiYWIiICIiIiwgImFiIikNCiAgICArICAgIHZlcmlm
eV9zdHJpbmdfbGV4KHIiIiIgJ2FiJyAiIiIsICJhYiIpDQogICAgKyAgICB2ZXJpZnlfc3RyaW5n
X2xleChyIiIiICJhYmMiICIiIiwgImFiYyIpDQogICAgKyAgICB2ZXJpZnlfc3RyaW5nX2xleChy
IiIiICdhYmMnICIiIiwgImFiYyIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3N0cmluZ19sZXgo
ciIiIiAiJyIgIiIiLCAiJyIpDQogICAgKyAgICB2ZXJpZnlfc3RyaW5nX2xleChyIiIiICciJyAi
IiIsICciJykNCiAgICArDQogICAgKyAgICB2ZXJpZnlfc3RyaW5nX2xleChyIiIiICJcIiIgIiIi
LCAnIicpDQogICAgKyAgICB2ZXJpZnlfc3RyaW5nX2xleChyIiIiICdcJycgIiIiLCAiJyIpDQog
ICAgKw0KICAgICsgICAgdmVyaWZ5X3N0cmluZ19sZXgociIiIiAiXCJcIiIgIiIiLCAnIiInKQ0K
ICAgICsgICAgdmVyaWZ5X3N0cmluZ19sZXgociIiIiAnXCdcJycgIiIiLCAiJyciKQ0KICAgICsN
CiAgICArICAgIHZlcmlmeV9zdHJpbmdfbGV4KHIiIiIgIlwnIiAiIiIsICInIikNCiAgICArICAg
IHZlcmlmeV9zdHJpbmdfbGV4KHIiIiIgJ1wiJyAiIiIsICciJykNCiAgICArDQogICAgKyAgICB2
ZXJpZnlfc3RyaW5nX2xleChyIiIiICJcXCIgIiIiLCAiXFwiKQ0KICAgICsgICAgdmVyaWZ5X3N0
cmluZ19sZXgociIiIiAnXFwnICIiIiwgIlxcIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfc3Ry
aW5nX2xleChyIiIiICJcYVxcJ1xiXGNcIidkIiAiIiIsICdhXFxcJ2JjIlwnZCcpDQogICAgKyAg
ICB2ZXJpZnlfc3RyaW5nX2xleChyIiIiICdcYVxcIlxiXGNcJyJkJyAiIiIsICJhXFxcImJjJ1wi
ZCIpDQogICAgKw0KICAgICsgICAgZGVmIHZlcmlmeV9zdHJpbmdfYmFkKHMpOg0KICAgICsgICAg
ICAgICMgVmVyaWZpZXMgdGhhdCB0b2tlbml6aW5nICdzJyB0aHJvd3MgYSBLY29uZmlnRXJyb3Iu
IFN0cmlwcyB0aGUgZmlyc3QNCiAgICArICAgICAgICAjIGFuZCBsYXN0IGNoYXJhY3RlcnMgZnJv
bSAncycgc28gd2UgY2FuIHVzZSByZWFkYWJsZSByYXcgc3RyaW5ncyBhcw0KICAgICsgICAgICAg
ICMgaW5wdXQuDQogICAgKw0KICAgICsgICAgICAgIHRyeToNCiAgICArICAgICAgICAgICAgYy5l
dmFsX3N0cmluZyhzKQ0KICAgICsgICAgICAgIGV4Y2VwdCBLY29uZmlnRXJyb3I6DQogICAgKyAg
ICAgICAgICAgIHBhc3MNCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICBmYWls
KCJleHBlY3RlZCB0b2tlbml6YXRpb24gb2Yge30gdG8gZmFpbCwgZGlkbid0Ii5mb3JtYXQoc1sx
Oi0xXSkpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3N0cmluZ19iYWQociIiIiAiICIiIikNCiAg
ICArICAgIHZlcmlmeV9zdHJpbmdfYmFkKHIiIiIgJyAiIiIpDQogICAgKyAgICB2ZXJpZnlfc3Ry
aW5nX2JhZChyIiIiICInICIiIikNCiAgICArICAgIHZlcmlmeV9zdHJpbmdfYmFkKHIiIiIgJyIg
IiIiKQ0KICAgICsgICAgdmVyaWZ5X3N0cmluZ19iYWQociIiIiAiXCIgIiIiKQ0KICAgICsgICAg
dmVyaWZ5X3N0cmluZ19iYWQociIiIiAnXCcgIiIiKQ0KICAgICsgICAgdmVyaWZ5X3N0cmluZ19i
YWQociIiIiAiZm9vICIiIikNCiAgICArICAgIHZlcmlmeV9zdHJpbmdfYmFkKHIiIiIgJ2ZvbyAi
IiIpDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIGVzY2FwZSgpIGFuZCB1
bmVzY2FwZSgpIikNCiAgICArDQogICAgKyAgICBkZWYgdmVyaWZ5X2VzY2FwZV91bmVzY2FwZShz
LCBzZXNjKToNCiAgICArICAgICAgICAjIFZlcmlmeSB0aGF0ICdzJyBlc2NhcGVzIHRvICdzZXNj
JyBhbmQgdGhhdCAnc2VzYycgdW5lc2NhcGVzIHRvICdzJw0KICAgICsgICAgICAgIHZlcmlmeV9l
cXVhbChlc2NhcGUocyksIHNlc2MpDQogICAgKyAgICAgICAgdmVyaWZ5X2VxdWFsKHVuZXNjYXBl
KHNlc2MpLCBzKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9lc2NhcGVfdW5lc2NhcGUocicnICAg
ICAgICAgICwgcicnICAgICAgICAgICAgICApDQogICAgKyAgICB2ZXJpZnlfZXNjYXBlX3VuZXNj
YXBlKHInZm9vJyAgICAgICAsIHInZm9vJyAgICAgICAgICAgKQ0KICAgICsgICAgdmVyaWZ5X2Vz
Y2FwZV91bmVzY2FwZShyJyInICAgICAgICAgLCByJ1wiJyAgICAgICAgICAgICkNCiAgICArICAg
IHZlcmlmeV9lc2NhcGVfdW5lc2NhcGUociciIicgICAgICAgICwgcidcIlwiJyAgICAgICAgICAp
DQogICAgKyAgICB2ZXJpZnlfZXNjYXBlX3VuZXNjYXBlKCdcXCcgICAgICAgICAsIHInXFwnICAg
ICAgICAgICAgKQ0KICAgICsgICAgdmVyaWZ5X2VzY2FwZV91bmVzY2FwZShyJ1xcJyAgICAgICAg
LCByJ1xcXFwnICAgICAgICAgICkNCiAgICArICAgIHZlcmlmeV9lc2NhcGVfdW5lc2NhcGUocidc
IicgICAgICAgICwgcidcXFwiJyAgICAgICAgICApDQogICAgKyAgICB2ZXJpZnlfZXNjYXBlX3Vu
ZXNjYXBlKHInImFiXGNkImVmIicsIHInXCJhYlxcY2RcImVmXCInKQ0KICAgICsNCiAgICArICAg
ICMgQmFja3NsYXNoZXMgYmVmb3JlIGFueSBjaGFyYWN0ZXIgc2hvdWxkIGJlIHVuZXNjYXBlZCwg
bm90IGp1c3QgYmVmb3JlICINCiAgICArICAgICMgYW5kIFwNCiAgICArICAgIHZlcmlmeV9lcXVh
bCh1bmVzY2FwZShyIlxhZm9vXGJcY1xcZFxcXGVcXFxcZiIpLCByImFmb29iY1xkXGVcXGYiKQ0K
ICAgICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyBfb3JkZXJlZF91bmlxdWUoKSIp
DQogICAgKw0KICAgICsgICAgdmVyaWZ5X2VxdWFsKF9vcmRlcmVkX3VuaXF1ZShbXSksIFtdKQ0K
ICAgICsgICAgdmVyaWZ5X2VxdWFsKF9vcmRlcmVkX3VuaXF1ZShbMV0pLCBbMV0pDQogICAgKyAg
ICB2ZXJpZnlfZXF1YWwoX29yZGVyZWRfdW5pcXVlKFsxLCAyXSksIFsxLCAyXSkNCiAgICArICAg
IHZlcmlmeV9lcXVhbChfb3JkZXJlZF91bmlxdWUoWzEsIDFdKSwgWzFdKQ0KICAgICsgICAgdmVy
aWZ5X2VxdWFsKF9vcmRlcmVkX3VuaXF1ZShbMSwgMSwgMl0pLCBbMSwgMl0pDQogICAgKyAgICB2
ZXJpZnlfZXF1YWwoX29yZGVyZWRfdW5pcXVlKFsxLCAyLCAxXSksIFsxLCAyXSkNCiAgICArICAg
IHZlcmlmeV9lcXVhbChfb3JkZXJlZF91bmlxdWUoWzEsIDIsIDJdKSwgWzEsIDJdKQ0KICAgICsg
ICAgdmVyaWZ5X2VxdWFsKF9vcmRlcmVkX3VuaXF1ZShbMSwgMiwgMywgMiwgMSwgMiwgMywgNCwg
MywgMiwgMSwgMF0pLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMSwg
MiwgMywgNCwgMF0pDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIGV4cHJl
c3Npb24gZXZhbHVhdGlvbiIpDQogICAgKw0KICAgICsgICAgYyA9IEtjb25maWcoIktjb25maWds
aWIvdGVzdHMvS2V2YWwiLCB3YXJuPUZhbHNlKQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlf
ZXZhbChleHByLCB2YWwpOg0KICAgICsgICAgICAgIHJlcyA9IGMuZXZhbF9zdHJpbmcoZXhwcikN
CiAgICArICAgICAgICB2ZXJpZnkocmVzID09IHZhbCwNCiAgICArICAgICAgICAgICAgICAgIid7
fScgZXZhbHVhdGVkIHRvIHt9LCBleHBlY3RlZCB7fSIuZm9ybWF0KGV4cHIsIHJlcywgdmFsKSkN
CiAgICArDQogICAgKyAgICAjIE5vIG1vZHVsZXMNCiAgICArICAgIHZlcmlmeV9ldmFsKCJuIiwg
MCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCJtIiwgMCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCJ5
IiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCInbiciLCAwKQ0KICAgICsgICAgdmVyaWZ5X2V2
YWwoIidtJyIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiJ3knIiwgMikNCiAgICArICAgIHZl
cmlmeV9ldmFsKCJNIiwgMikNCiAgICArDQogICAgKyAgICAjIE1vZHVsZXMNCiAgICArICAgIGMu
bW9kdWxlcy5zZXRfdmFsdWUoMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJuIiwgMCkNCiAgICAr
ICAgIHZlcmlmeV9ldmFsKCJtIiwgMSkNCiAgICArICAgIHZlcmlmeV9ldmFsKCJ5IiwgMikNCiAg
ICArICAgIHZlcmlmeV9ldmFsKCInbiciLCAwKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIidtJyIs
IDEpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiJ3knIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFs
KCJNIiwgMSkNCiAgICArICAgIHZlcmlmeV9ldmFsKCIoWSB8fCBOKSAmJiAobSAmJiB5KSIsIDEp
DQogICAgKw0KICAgICsgICAgIyBOb24tYm9vbC9ub24tdHJpc3RhdGUgc3ltYm9scyBhcmUgYWx3
YXlzIG4gaW4gYSB0cmlzdGF0ZSBzZW5zZQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIllfU1RSSU5H
IiwgMCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCJZX1NUUklORyB8fCBtIiwgMSkNCiAgICArDQog
ICAgKyAgICAjIEFzIGFyZSBhbGwgY29uc3RhbnRzIGJlc2lkZXMgeSBhbmQgbQ0KICAgICsgICAg
dmVyaWZ5X2V2YWwoJyJmb28iJywgMCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCciZm9vIiB8fCAi
YmFyIicsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgnImZvbyIgfHwgbScsIDEpDQogICAgKw0K
ICAgICsgICAgIyBUZXN0IGVxdWFsaXR5IGZvciBzeW1ib2xzDQogICAgKw0KICAgICsgICAgdmVy
aWZ5X2V2YWwoIk4gPSBOIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJOID0gbiIsIDIpDQog
ICAgKyAgICB2ZXJpZnlfZXZhbCgiTiA9ICduJyIsIDIpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgi
TiAhPSBOIiwgMCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCJOICE9IG4iLCAwKQ0KICAgICsgICAg
dmVyaWZ5X2V2YWwoIk4gIT0gJ24nIiwgMCkNCiAgICArDQogICAgKyAgICB2ZXJpZnlfZXZhbCgi
TSA9IE0iLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIk0gPSBtIiwgMikNCiAgICArICAgIHZl
cmlmeV9ldmFsKCJNID0gJ20nIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJNICE9IE0iLCAw
KQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIk0gIT0gbSIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZh
bCgiTSAhPSAnbSciLCAwKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9ldmFsKCJZID0gWSIsIDIp
DQogICAgKyAgICB2ZXJpZnlfZXZhbCgiWSA9IHkiLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwo
IlkgPSAneSciLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIlkgIT0gWSIsIDApDQogICAgKyAg
ICB2ZXJpZnlfZXZhbCgiWSAhPSB5IiwgMCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCJZICE9ICd5
JyIsIDApDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2V2YWwoIk4gIT0gTSIsIDIpDQogICAgKyAg
ICB2ZXJpZnlfZXZhbCgiTiAhPSBZIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJNICE9IFki
LCAyKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9ldmFsKCJZX1NUUklORyA9IHkiLCAyKQ0KICAg
ICsgICAgdmVyaWZ5X2V2YWwoIllfU1RSSU5HID0gJ3knIiwgMikNCiAgICArICAgIHZlcmlmeV9l
dmFsKCdGT09fQkFSX1NUUklORyA9ICJmb28gYmFyIicsIDIpDQogICAgKyAgICB2ZXJpZnlfZXZh
bCgnRk9PX0JBUl9TVFJJTkcgIT0gImZvbyBiYXIgYmF6IicsIDIpDQogICAgKyAgICB2ZXJpZnlf
ZXZhbCgnSU5UXzM3ID0gMzcnLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIklOVF8zNyA9ICcz
NyciLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoJ0hFWF8wWDM3ID0gMHgzNycsIDIpDQogICAg
KyAgICB2ZXJpZnlfZXZhbCgiSEVYXzBYMzcgPSAnMHgzNyciLCAyKQ0KICAgICsNCiAgICArICAg
ICMgVGhlc2Ugc2hvdWxkIGFsc28gaG9sZCBhZnRlciAzMTg0N2I2NyAoa2NvbmZpZzogYWxsb3cg
dXNlIG9mIHJlbGF0aW9ucw0KICAgICsgICAgIyBvdGhlciB0aGFuIChpbillcXVhbGl0eSkNCiAg
ICArICAgIHZlcmlmeV9ldmFsKCJIRVhfMFgzNyA9ICcweDAzNyciLCAyKQ0KICAgICsgICAgdmVy
aWZ5X2V2YWwoIkhFWF8wWDM3ID0gJzB4MDAzNyciLCAyKQ0KICAgICsNCiAgICArICAgICMgQ29u
c3RhbnQgc3ltYm9sIGNvbXBhcmlzb25zDQogICAgKyAgICB2ZXJpZnlfZXZhbCgnImZvbyIgIT0g
ImJhciInLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoJyJmb28iID0gImJhciInLCAwKQ0KICAg
ICsgICAgdmVyaWZ5X2V2YWwoJyJmb28iID0gImZvbyInLCAyKQ0KICAgICsNCiAgICArICAgICMg
VW5kZWZpbmVkIHN5bWJvbHMgZ2V0IHRoZWlyIG5hbWUgYXMgdGhlaXIgdmFsdWUNCiAgICArICAg
IGMud2FybiA9IEZhbHNlDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiJ25vdF9kZWZpbmVkJyA9IG5v
dF9kZWZpbmVkIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJub3RfZGVmaW5lZF8yID0gbm90
X2RlZmluZWRfMiIsIDIpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgibm90X2RlZmluZWRfMSAhPSBu
b3RfZGVmaW5lZF8yIiwgMikNCiAgICArDQogICAgKyAgICAjIFRlc3QgbGVzcyB0aGFuL2dyZWF0
ZXIgdGhhbg0KICAgICsNCiAgICArICAgICMgQmFzaWMgZXZhbHVhdGlvbg0KICAgICsgICAgdmVy
aWZ5X2V2YWwoIklOVF8zNyA8IDM4IiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCIzOCA8IElO
VF8zNyIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3IDwgJzM4JyIsIDIpDQogICAg
KyAgICB2ZXJpZnlfZXZhbCgiJzM4JyA8IElOVF8zNyIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZh
bCgiSU5UXzM3IDwgMTM4IiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCIxMzggPCBJTlRfMzci
LCAwKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIklOVF8zNyA8ICcxMzgnIiwgMikNCiAgICArICAg
IHZlcmlmeV9ldmFsKCInMTM4JyA8IElOVF8zNyIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgi
SU5UXzM3IDwgLTEzOCIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiLTEzOCA8IElOVF8zNyIs
IDIpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3IDwgJy0xMzgnIiwgMCkNCiAgICArICAg
IHZlcmlmeV9ldmFsKCInLTEzOCcgPCBJTlRfMzciLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwo
IklOVF8zNyA8IDM3IiwgMCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCIzNyA8IElOVF8zNyIsIDAp
DQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3IDwgMzYiLCAwKQ0KICAgICsgICAgdmVyaWZ5
X2V2YWwoIjM2IDwgSU5UXzM3IiwgMikNCiAgICArDQogICAgKyAgICAjIERpZmZlcmVudCBmb3Jt
YXRzIGluIGNvbXBhcmlzb24NCiAgICArICAgIHZlcmlmeV9ldmFsKCJJTlRfMzcgPCAweDI2Iiwg
MikgIyAzOA0KICAgICsgICAgdmVyaWZ5X2V2YWwoIklOVF8zNyA8IDB4MjUiLCAwKSAjIDM3DQog
ICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3IDwgMHgyNCIsIDApICMgMzYNCiAgICArICAgIHZl
cmlmeV9ldmFsKCJIRVhfMFgzNyA8IDU2IiwgMikgIyAweDM4DQogICAgKyAgICB2ZXJpZnlfZXZh
bCgiSEVYXzBYMzcgPCA1NSIsIDApICMgMHgzNw0KICAgICsgICAgdmVyaWZ5X2V2YWwoIkhFWF8w
WDM3IDwgNTQiLCAwKSAjIDB4MzYNCiAgICArDQogICAgKyAgICAjIE90aGVyIGludCBjb21wYXJp
c29ucw0KICAgICsgICAgdmVyaWZ5X2V2YWwoIklOVF8zNyA8PSAzOCIsIDIpDQogICAgKyAgICB2
ZXJpZnlfZXZhbCgiSU5UXzM3IDw9IDM3IiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJJTlRf
MzcgPD0gMzYiLCAwKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIklOVF8zNyA+ICAzOCIsIDApDQog
ICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3ID4gIDM3IiwgMCkNCiAgICArICAgIHZlcmlmeV9l
dmFsKCJJTlRfMzcgPiAgMzYiLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIklOVF8zNyA+PSAz
OCIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3ID49IDM3IiwgMikNCiAgICArICAg
IHZlcmlmeV9ldmFsKCJJTlRfMzcgPj0gMzYiLCAyKQ0KICAgICsNCiAgICArICAgICMgT3RoZXIg
aGV4IGNvbXBhcmlzb25zDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSEVYXzBYMzcgPD0gMHgzOCIs
IDIpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSEVYXzBYMzcgPD0gMHgzNyIsIDIpDQogICAgKyAg
ICB2ZXJpZnlfZXZhbCgiSEVYXzBYMzcgPD0gMHgzNiIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZh
bCgiSEVYXzBYMzcgPiAgMHgzOCIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSEVYXzBYMzcg
PiAgMHgzNyIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSEVYXzBYMzcgPiAgMHgzNiIsIDIp
DQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSEVYXzBYMzcgPj0gMHgzOCIsIDApDQogICAgKyAgICB2
ZXJpZnlfZXZhbCgiSEVYXzBYMzcgPj0gMHgzNyIsIDIpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgi
SEVYXzBYMzcgPj0gMHgzNiIsIDIpDQogICAgKw0KICAgICsgICAgIyBBIGhleCBob2xkaW5nIGEg
dmFsdWUgd2l0aG91dCBhICIweCIgcHJlZml4IHNob3VsZCBzdGlsbCBiZSB0cmVhdGVkIGFzDQog
ICAgKyAgICAjIGhleGFkZWNpbWFsDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSEVYXzM3IDwgMHgz
OCIsIDIpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSEVYXzM3IDwgMHgzNyIsIDApDQogICAgKyAg
ICB2ZXJpZnlfZXZhbCgiSEVYXzM3IDwgMHgzNiIsIDApDQogICAgKw0KICAgICsgICAgIyBTeW1i
b2wgY29tcGFyaXNvbnMNCiAgICArICAgIHZlcmlmeV9ldmFsKCJJTlRfMzcgICA8ICBIRVhfMFgz
NyIsIDIpDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3ICAgPiAgSEVYXzBYMzciLCAwKQ0K
ICAgICsgICAgdmVyaWZ5X2V2YWwoIkhFWF8wWDM3IDwgIElOVF8zNyAgIiwgMCkNCiAgICArICAg
IHZlcmlmeV9ldmFsKCJIRVhfMFgzNyA+ICBJTlRfMzcgICIsIDIpDQogICAgKyAgICB2ZXJpZnlf
ZXZhbCgiSU5UXzM3ICAgPCAgSU5UXzM3ICAiLCAwKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIklO
VF8zNyAgIDw9IElOVF8zNyAgIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJJTlRfMzcgICA+
ICBJTlRfMzcgICIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiSU5UXzM3ICAgPD0gSU5UXzM3
ICAiLCAyKQ0KICAgICsNCiAgICArICAgICMgVHJpc3RhdGUgdmFsdWUgY29tcGFyaXNvbnMNCiAg
ICArICAgIHZlcmlmeV9ldmFsKCJuIDwgbiIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgibiA8
IG0iLCAyKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIm4gPCB5IiwgMikNCiAgICArICAgIHZlcmlm
eV9ldmFsKCJuIDwgTiIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgibiA8IE0iLCAyKQ0KICAg
ICsgICAgdmVyaWZ5X2V2YWwoIm4gPCBZIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCIwID4g
biIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiMSA+IG4iLCAyKQ0KICAgICsgICAgdmVyaWZ5
X2V2YWwoIjIgPiBuIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJtIDwgbiIsIDApDQogICAg
KyAgICB2ZXJpZnlfZXZhbCgibSA8IG0iLCAwKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIm0gPCB5
IiwgMikNCiAgICArDQogICAgKyAgICAjIFN0cmluZ3MgY29tcGFyZSBsZXhpY29ncmFwaGljYWxs
eQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIidhYScgPCAnYWInIiwgMikNCiAgICArICAgIHZlcmlm
eV9ldmFsKCInYWEnID4gJ2FiJyIsIDApDQogICAgKyAgICB2ZXJpZnlfZXZhbCgiJ2FiJyA8ICdh
YSciLCAwKQ0KICAgICsgICAgdmVyaWZ5X2V2YWwoIidhYicgPiAnYWEnIiwgMikNCiAgICArDQog
ICAgKyAgICAjIENvbXBhcmlzb25zIHdoZXJlIG9uZSBvZiB0aGUgb3BlcmFuZHMgZG9lc24ndCBw
YXJzZSBhcyBhIG51bWJlciBhbHNvIGdpdmUNCiAgICArICAgICMgYSBsZXhpY29ncmFwaGljIGNv
bXBhcmlzb24NCiAgICArICAgIHZlcmlmeV9ldmFsKCJJTlRfMzcgPCAgJzM3YScgIiwgMikNCiAg
ICArICAgIHZlcmlmeV9ldmFsKCInMzdhJyAgPiAgSU5UXzM3IiwgMikNCiAgICArICAgIHZlcmlm
eV9ldmFsKCJJTlRfMzcgPD0gJzM3YScgIiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCInMzdh
JyAgPj0gSU5UXzM3IiwgMikNCiAgICArICAgIHZlcmlmeV9ldmFsKCJJTlRfMzcgPj0gJzM3YScg
IiwgMCkNCiAgICArICAgIHZlcmlmeV9ldmFsKCJJTlRfMzcgPiAgJzM3YScgIiwgMCkNCiAgICAr
ICAgIHZlcmlmeV9ldmFsKCInMzdhJyAgPCAgSU5UXzM3IiwgMCkNCiAgICArICAgIHZlcmlmeV9l
dmFsKCInMzdhJyAgPD0gSU5UXzM3IiwgMCkNCiAgICArDQogICAgKyAgICBkZWYgdmVyaWZ5X2V2
YWxfYmFkKGV4cHIpOg0KICAgICsgICAgICAgIHRyeToNCiAgICArICAgICAgICAgICAgYy5ldmFs
X3N0cmluZyhleHByKQ0KICAgICsgICAgICAgIGV4Y2VwdCBLY29uZmlnRXJyb3I6DQogICAgKyAg
ICAgICAgICAgIHBhc3MNCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICBmYWls
KCdleHBlY3RlZCBldmFsX3N0cmluZygie30iKSB0byB0aHJvdyBLY29uZmlnRXJyb3IsICcNCiAg
ICArICAgICAgICAgICAgICAgICAiZGlkbid0Ii5mb3JtYXQoZXhwcikpDQogICAgKw0KICAgICsg
ICAgIyBWZXJpZnkgdGhhdCBzb21lIGJhZCBzdHVmZiB0aHJvd3MgS2NvbmZpZ0Vycm9yJ3MNCiAg
ICArICAgIHZlcmlmeV9ldmFsX2JhZCgiIikNCiAgICArICAgIHZlcmlmeV9ldmFsX2JhZCgiJiIp
DQogICAgKyAgICB2ZXJpZnlfZXZhbF9iYWQoInwiKQ0KICAgICsgICAgdmVyaWZ5X2V2YWxfYmFk
KCIhIikNCiAgICArICAgIHZlcmlmeV9ldmFsX2JhZCgiKCIpDQogICAgKyAgICB2ZXJpZnlfZXZh
bF9iYWQoIikiKQ0KICAgICsgICAgdmVyaWZ5X2V2YWxfYmFkKCI9IikNCiAgICArICAgIHZlcmlm
eV9ldmFsX2JhZCgiKFgiKQ0KICAgICsgICAgdmVyaWZ5X2V2YWxfYmFkKCJYKSIpDQogICAgKyAg
ICB2ZXJpZnlfZXZhbF9iYWQoIlggWCIpDQogICAgKyAgICB2ZXJpZnlfZXZhbF9iYWQoIiFYIFgi
KQ0KICAgICsgICAgdmVyaWZ5X2V2YWxfYmFkKCJYICFYIikNCiAgICArICAgIHZlcmlmeV9ldmFs
X2JhZCgiKFgpIFgiKQ0KICAgICsgICAgdmVyaWZ5X2V2YWxfYmFkKCJYICYmIikNCiAgICArICAg
IHZlcmlmeV9ldmFsX2JhZCgiJiYgWCIpDQogICAgKyAgICB2ZXJpZnlfZXZhbF9iYWQoIlggJiYg
JiYgWCIpDQogICAgKyAgICB2ZXJpZnlfZXZhbF9iYWQoIlggJiYgISYmIikNCiAgICArICAgIHZl
cmlmeV9ldmFsX2JhZCgiWCB8fCIpDQogICAgKyAgICB2ZXJpZnlfZXZhbF9iYWQoInx8IFgiKQ0K
ICAgICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyBTeW1ib2wuX19zdHJfXygpL2N1
c3RvbV9zdHIoKSBhbmQgZGVmX3tpbnQsaGV4LHN0cmluZ30iKQ0KICAgICsNCiAgICArICAgIGRl
ZiB2ZXJpZnlfc3RyKGl0ZW0sIHMpOg0KICAgICsgICAgICAgIHZlcmlmeV9lcXVhbChzdHIoaXRl
bSksIHNbMTotMV0pDQogICAgKw0KICAgICsgICAgZGVmIHZlcmlmeV9jdXN0b21fc3RyKGl0ZW0s
IHMpOg0KICAgICsgICAgICAgIHZlcmlmeV9lcXVhbChpdGVtLmN1c3RvbV9zdHIobGFtYmRhIHNj
OiAiW3t9XSIuZm9ybWF0KHNjLm5hbWUpKSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgc1sx
Oi0xXSkNCiAgICArDQogICAgKyAgICBjID0gS2NvbmZpZygiS2NvbmZpZ2xpYi90ZXN0cy9Lc3Ry
Iiwgd2Fybj1GYWxzZSkNCiAgICArDQogICAgKyAgICBjLm1vZHVsZXMuc2V0X3ZhbHVlKDIpDQog
ICAgKw0KICAgICsgICAgdmVyaWZ5X3N0cihjLnN5bXNbIlVOREVGSU5FRCJdLCAiIiINCiAgICAr
IiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5zeW1zWyJCQVNJQ19OT19QUk9NUFQi
XSwgIiIiDQogICAgK2NvbmZpZyBCQVNJQ19OT19QUk9NUFQNCiAgICArCWJvb2wNCiAgICArCWhl
bHANCiAgICArCSAgYmxhaCBibGFoDQogICAgKwkgIA0KICAgICsJICAgIGJsYWggYmxhaCBibGFo
DQogICAgKwkgIA0KICAgICsJICAgYmxhaA0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVy
aWZ5X3N0cihjLnN5bXNbIkJBU0lDX1BST01QVCJdLCAiIiINCiAgICArY29uZmlnIEJBU0lDX1BS
T01QVA0KICAgICsJYm9vbCAiYmFzaWMiDQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJp
Znlfc3RyKGMuc3ltc1siQURWQU5DRUQiXSwgIiIiDQogICAgK2NvbmZpZyBBRFZBTkNFRA0KICAg
ICsJdHJpc3RhdGUgInByb21wdCIgaWYgREVQDQogICAgKwlkZWZhdWx0IERFRkFVTFRfMQ0KICAg
ICsJZGVmYXVsdCBERUZBVUxUXzIgaWYgREVQDQogICAgKwlzZWxlY3QgU0VMRUNURURfMQ0KICAg
ICsJc2VsZWN0IFNFTEVDVEVEXzIgaWYgREVQDQogICAgKwlpbXBseSBJTVBMSUVEXzENCiAgICAr
CWltcGx5IElNUExJRURfMiBpZiBERVANCiAgICArCWhlbHANCiAgICArCSAgZmlyc3QgaGVscCB0
ZXh0DQogICAgKw0KICAgICtjb25maWcgQURWQU5DRUQNCiAgICArCXRyaXN0YXRlICJwcm9tcHQg
MiINCiAgICArDQogICAgK21lbnVjb25maWcgQURWQU5DRUQNCiAgICArCXRyaXN0YXRlICJwcm9t
cHQgMyINCiAgICArDQogICAgK2NvbmZpZyBBRFZBTkNFRA0KICAgICsJdHJpc3RhdGUNCiAgICAr
CWRlcGVuZHMgb24gKEEgfHwgIUIgfHwgKEMgJiYgRCkgfHwgIShFICYmIEYpIHx8IEcgPSBIIHx8
IChJICYmICFKICYmIChLIHx8IEwpICYmICEoTSB8fCBOKSAmJiBPID0gUCkpICYmIERFUDQgJiYg
REVQMw0KICAgICsJaGVscA0KICAgICsJICBzZWNvbmQgaGVscCB0ZXh0DQogICAgKw0KICAgICtj
b25maWcgQURWQU5DRUQNCiAgICArCXRyaXN0YXRlICJwcm9tcHQgNCIgaWYgVklTDQogICAgKwlk
ZXBlbmRzIG9uIERFUDQgJiYgREVQMw0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5
X2N1c3RvbV9zdHIoYy5zeW1zWyJBRFZBTkNFRCJdLCAiIiINCiAgICArY29uZmlnIEFEVkFOQ0VE
DQogICAgKwl0cmlzdGF0ZSAicHJvbXB0IiBpZiBbREVQXQ0KICAgICsJZGVmYXVsdCBbREVGQVVM
VF8xXQ0KICAgICsJZGVmYXVsdCBbREVGQVVMVF8yXSBpZiBbREVQXQ0KICAgICsJc2VsZWN0IFtT
RUxFQ1RFRF8xXQ0KICAgICsJc2VsZWN0IFtTRUxFQ1RFRF8yXSBpZiBbREVQXQ0KICAgICsJaW1w
bHkgW0lNUExJRURfMV0NCiAgICArCWltcGx5IFtJTVBMSUVEXzJdIGlmIFtERVBdDQogICAgKwlo
ZWxwDQogICAgKwkgIGZpcnN0IGhlbHAgdGV4dA0KICAgICsNCiAgICArY29uZmlnIEFEVkFOQ0VE
DQogICAgKwl0cmlzdGF0ZSAicHJvbXB0IDIiDQogICAgKw0KICAgICttZW51Y29uZmlnIEFEVkFO
Q0VEDQogICAgKwl0cmlzdGF0ZSAicHJvbXB0IDMiDQogICAgKw0KICAgICtjb25maWcgQURWQU5D
RUQNCiAgICArCXRyaXN0YXRlDQogICAgKwlkZXBlbmRzIG9uIChbQV0gfHwgIVtCXSB8fCAoW0Nd
ICYmIFtEXSkgfHwgIShbRV0gJiYgW0ZdKSB8fCBbR10gPSBbSF0gfHwgKFtJXSAmJiAhW0pdICYm
IChbS10gfHwgW0xdKSAmJiAhKFtNXSB8fCBbTl0pICYmIFtPXSA9IFtQXSkpICYmIFtERVA0XSAm
JiBbREVQM10NCiAgICArCWhlbHANCiAgICArCSAgc2Vjb25kIGhlbHAgdGV4dA0KICAgICsNCiAg
ICArY29uZmlnIEFEVkFOQ0VEDQogICAgKwl0cmlzdGF0ZSAicHJvbXB0IDQiIGlmIFtWSVNdDQog
ICAgKwlkZXBlbmRzIG9uIFtERVA0XSAmJiBbREVQM10NCiAgICArIiIiKQ0KICAgICsNCiAgICAr
DQogICAgKyAgICB2ZXJpZnlfc3RyKGMuc3ltc1siT05MWV9ESVJFQ1RfREVQUyJdLCAiIiINCiAg
ICArY29uZmlnIE9OTFlfRElSRUNUX0RFUFMNCiAgICArCWludA0KICAgICsJZGVwZW5kcyBvbiBE
RVAxICYmIERFUDINCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5zeW1z
WyJTVFJJTkciXSwgIiIiDQogICAgK2NvbmZpZyBTVFJJTkcNCiAgICArCXN0cmluZw0KICAgICsJ
ZGVmYXVsdCAiZm9vIg0KICAgICsJZGVmYXVsdCAiYmFyIiBpZiBERVANCiAgICArCWRlZmF1bHQg
U1RSSU5HMg0KICAgICsJZGVmYXVsdCBTVFJJTkczIGlmIERFUA0KICAgICsiIiIpDQogICAgKw0K
ICAgICsgICAgdmVyaWZ5X3N0cihjLnN5bXNbIklOVCJdLCAiIiINCiAgICArY29uZmlnIElOVA0K
ICAgICsJaW50DQogICAgKwlyYW5nZSAxIDINCiAgICArCXJhbmdlIEZPTyBCQVINCiAgICArCXJh
bmdlIEJBWiBRQVogaWYgREVQDQogICAgKwlkZWZhdWx0IDcgaWYgREVQDQogICAgKyIiIikNCiAg
ICArDQogICAgKyAgICB2ZXJpZnlfc3RyKGMuc3ltc1siSEVYIl0sICIiIg0KICAgICtjb25maWcg
SEVYDQogICAgKwloZXgNCiAgICArCXJhbmdlIDB4MTAwIDB4MjAwDQogICAgKwlyYW5nZSBGT08g
QkFSDQogICAgKwlyYW5nZSBCQVogUUFaIGlmIERFUA0KICAgICsJZGVmYXVsdCAweDEyMw0KICAg
ICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3N0cihjLm1vZHVsZXMsICIiIg0KICAgICtj
b25maWcgTU9EVUxFUw0KICAgICsJYm9vbCAiTU9EVUxFUyINCiAgICArCW9wdGlvbiBtb2R1bGVz
DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfc3RyKGMuc3ltc1siT1BUSU9OUyJd
LCAiIiINCiAgICArY29uZmlnIE9QVElPTlMNCiAgICArCW9wdGlvbiBhbGxub2NvbmZpZ195DQog
ICAgKwlvcHRpb24gZGVmY29uZmlnX2xpc3QNCiAgICArCW9wdGlvbiBlbnY9IkVOViINCiAgICAr
IiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5zeW1zWyJDT1JSRUNUX1BST1BfTE9D
U19CT09MIl0sICIiIg0KICAgICtjb25maWcgQ09SUkVDVF9QUk9QX0xPQ1NfQk9PTA0KICAgICsJ
Ym9vbCAicHJvbXB0IDEiDQogICAgKwlkZWZhdWx0IERFRkFVTFRfMQ0KICAgICsJZGVmYXVsdCBE
RUZBVUxUXzINCiAgICArCXNlbGVjdCBTRUxFQ1RfMQ0KICAgICsJc2VsZWN0IFNFTEVDVF8yDQog
ICAgKwlpbXBseSBJTVBMWV8xDQogICAgKwlpbXBseSBJTVBMWV8yDQogICAgKwlkZXBlbmRzIG9u
IExPQ18xDQogICAgKwloZWxwDQogICAgKwkgIGhlbHAgMQ0KICAgICsNCiAgICArbWVudWNvbmZp
ZyBDT1JSRUNUX1BST1BfTE9DU19CT09MDQogICAgKwlib29sICJwcm9tcHQgMiINCiAgICArCWRl
ZmF1bHQgREVGQVVMVF8zDQogICAgKwlkZWZhdWx0IERFRkFVTFRfNA0KICAgICsJc2VsZWN0IFNF
TEVDVF8zDQogICAgKwlzZWxlY3QgU0VMRUNUXzQNCiAgICArCWltcGx5IElNUExZXzMNCiAgICAr
CWltcGx5IElNUExZXzQNCiAgICArCWRlcGVuZHMgb24gTE9DXzINCiAgICArCWhlbHANCiAgICAr
CSAgaGVscCAyDQogICAgKw0KICAgICtjb25maWcgQ09SUkVDVF9QUk9QX0xPQ1NfQk9PTA0KICAg
ICsJYm9vbCAicHJvbXB0IDMiDQogICAgKwlkZWZhdWx0IERFRkFVTFRfNQ0KICAgICsJZGVmYXVs
dCBERUZBVUxUXzYNCiAgICArCXNlbGVjdCBTRUxFQ1RfNQ0KICAgICsJc2VsZWN0IFNFTEVDVF82
DQogICAgKwlpbXBseSBJTVBMWV81DQogICAgKwlpbXBseSBJTVBMWV82DQogICAgKwlkZXBlbmRz
IG9uIExPQ18zDQogICAgKwloZWxwDQogICAgKwkgIGhlbHAgMg0KICAgICsiIiIpDQogICAgKw0K
ICAgICsgICAgdmVyaWZ5X3N0cihjLnN5bXNbIkNPUlJFQ1RfUFJPUF9MT0NTX0lOVCJdLCAiIiIN
CiAgICArY29uZmlnIENPUlJFQ1RfUFJPUF9MT0NTX0lOVA0KICAgICsJaW50DQogICAgKwlyYW5n
ZSAxIDINCiAgICArCXJhbmdlIDMgNA0KICAgICsJZGVwZW5kcyBvbiBMT0NfMQ0KICAgICsNCiAg
ICArY29uZmlnIENPUlJFQ1RfUFJPUF9MT0NTX0lOVA0KICAgICsJaW50DQogICAgKwlyYW5nZSA1
IDYNCiAgICArCXJhbmdlIDcgOA0KICAgICsJZGVwZW5kcyBvbiBMT0NfMg0KICAgICsiIiIpDQog
ICAgKw0KICAgICsgICAgdmVyaWZ5X3N0cihjLnN5bXNbIlBST01QVF9PTkxZIl0sICIiIg0KICAg
ICtjb25maWcgUFJPTVBUX09OTFkNCiAgICArCXByb21wdCAicHJvbXB0IG9ubHkiDQogICAgKyIi
IikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfY3VzdG9tX3N0cihjLnN5bXNbIkNPUlJFQ1RfUFJP
UF9MT0NTX0lOVCJdLCAiIiINCiAgICArY29uZmlnIENPUlJFQ1RfUFJPUF9MT0NTX0lOVA0KICAg
ICsJaW50DQogICAgKwlyYW5nZSBbMV0gWzJdDQogICAgKwlyYW5nZSBbM10gWzRdDQogICAgKwlk
ZXBlbmRzIG9uIFtMT0NfMV0NCiAgICArDQogICAgK2NvbmZpZyBDT1JSRUNUX1BST1BfTE9DU19J
TlQNCiAgICArCWludA0KICAgICsJcmFuZ2UgWzVdIFs2XQ0KICAgICsJcmFuZ2UgWzddIFs4XQ0K
ICAgICsJZGVwZW5kcyBvbiBbTE9DXzJdDQogICAgKyIiIikNCiAgICArDQogICAgKw0KICAgICsN
CiAgICArICAgIHByaW50KCJUZXN0aW5nIENob2ljZS5fX3N0cl9fKCkvY3VzdG9tX3N0cigpIikN
CiAgICArDQogICAgKyAgICB2ZXJpZnlfc3RyKGMubmFtZWRfY2hvaWNlc1siQ0hPSUNFIl0sICIi
Ig0KICAgICtjaG9pY2UgQ0hPSUNFDQogICAgKwl0cmlzdGF0ZSAiZm9vIg0KICAgICsJZGVmYXVs
dCBDSE9JQ0VfMQ0KICAgICsJZGVmYXVsdCBDSE9JQ0VfMiBpZiBkZXANCiAgICArIiIiKQ0KICAg
ICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5uYW1lZF9jaG9pY2VzWyJDSE9JQ0UiXS5ub2Rlc1sw
XS5uZXh0Lml0ZW0sICIiIg0KICAgICtjaG9pY2UNCiAgICArCXRyaXN0YXRlICJubyBuYW1lIg0K
ICAgICsJb3B0aW9uYWwNCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5u
YW1lZF9jaG9pY2VzWyJDT1JSRUNUX1BST1BfTE9DU19DSE9JQ0UiXSwgIiIiDQogICAgK2Nob2lj
ZSBDT1JSRUNUX1BST1BfTE9DU19DSE9JQ0UNCiAgICArCWJvb2wNCiAgICArCWRlZmF1bHQgQ0hP
SUNFXzMNCiAgICArCWRlcGVuZHMgb24gTE9DXzENCiAgICArDQogICAgK2Nob2ljZSBDT1JSRUNU
X1BST1BfTE9DU19DSE9JQ0UNCiAgICArCWJvb2wNCiAgICArCWRlZmF1bHQgQ0hPSUNFXzQNCiAg
ICArCWRlcGVuZHMgb24gTE9DXzINCiAgICArDQogICAgK2Nob2ljZSBDT1JSRUNUX1BST1BfTE9D
U19DSE9JQ0UNCiAgICArCWJvb2wNCiAgICArCWRlZmF1bHQgQ0hPSUNFXzUNCiAgICArCWRlcGVu
ZHMgb24gTE9DXzMNCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9jdXN0b21fc3Ry
KGMubmFtZWRfY2hvaWNlc1siQ09SUkVDVF9QUk9QX0xPQ1NfQ0hPSUNFIl0sICIiIg0KICAgICtj
aG9pY2UgQ09SUkVDVF9QUk9QX0xPQ1NfQ0hPSUNFDQogICAgKwlib29sDQogICAgKwlkZWZhdWx0
IFtDSE9JQ0VfM10NCiAgICArCWRlcGVuZHMgb24gW0xPQ18xXQ0KICAgICsNCiAgICArY2hvaWNl
IENPUlJFQ1RfUFJPUF9MT0NTX0NIT0lDRQ0KICAgICsJYm9vbA0KICAgICsJZGVmYXVsdCBbQ0hP
SUNFXzRdDQogICAgKwlkZXBlbmRzIG9uIFtMT0NfMl0NCiAgICArDQogICAgK2Nob2ljZSBDT1JS
RUNUX1BST1BfTE9DU19DSE9JQ0UNCiAgICArCWJvb2wNCiAgICArCWRlZmF1bHQgW0NIT0lDRV81
XQ0KICAgICsJZGVwZW5kcyBvbiBbTE9DXzNdDQogICAgKyIiIikNCiAgICArDQogICAgKw0KICAg
ICsgICAgcHJpbnQoIlRlc3RpbmcgTWVudU5vZGUuX19zdHJfXygpL2N1c3RvbV9zdHIoKSBmb3Ig
bWVudXMgYW5kIGNvbW1lbnRzIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfc3RyKGMuc3ltc1si
U0lNUExFX01FTlVfSE9PSyJdLm5vZGVzWzBdLm5leHQsICIiIg0KICAgICttZW51ICJzaW1wbGUg
bWVudSINCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5zeW1zWyJBRFZB
TkNFRF9NRU5VX0hPT0siXS5ub2Rlc1swXS5uZXh0LCAiIiINCiAgICArbWVudSAiYWR2YW5jZWQg
bWVudSINCiAgICArCWRlcGVuZHMgb24gQQ0KICAgICsJdmlzaWJsZSBpZiBCICYmIChDIHx8IEQp
DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfY3VzdG9tX3N0cihjLnN5bXNbIkFE
VkFOQ0VEX01FTlVfSE9PSyJdLm5vZGVzWzBdLm5leHQsICIiIg0KICAgICttZW51ICJhZHZhbmNl
ZCBtZW51Ig0KICAgICsJZGVwZW5kcyBvbiBbQV0NCiAgICArCXZpc2libGUgaWYgW0JdICYmIChb
Q10gfHwgW0RdKQ0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3N0cihjLnN5bXNb
IlNJTVBMRV9DT01NRU5UX0hPT0siXS5ub2Rlc1swXS5uZXh0LCAiIiINCiAgICArY29tbWVudCAi
c2ltcGxlIGNvbW1lbnQiDQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfc3RyKGMu
c3ltc1siQURWQU5DRURfQ09NTUVOVF9IT09LIl0ubm9kZXNbMF0ubmV4dCwgIiIiDQogICAgK2Nv
bW1lbnQgImFkdmFuY2VkIGNvbW1lbnQiDQogICAgKwlkZXBlbmRzIG9uIEEgJiYgQg0KICAgICsi
IiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2N1c3RvbV9zdHIoYy5zeW1zWyJBRFZBTkNFRF9D
T01NRU5UX0hPT0siXS5ub2Rlc1swXS5uZXh0LCAiIiINCiAgICArY29tbWVudCAiYWR2YW5jZWQg
Y29tbWVudCINCiAgICArCWRlcGVuZHMgb24gW0FdICYmIFtCXQ0KICAgICsiIiIpDQogICAgKw0K
ICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIHtNZW51Tm9kZSxTeW1ib2wsQ2hvaWNlfS5v
cmlnXyoiKQ0KICAgICsNCiAgICArICAgICMgSnVzdCB0ZXN0IHNvbWUgY29ybmVyIGNhc2VzIGhl
cmUgcmUuIE1lbnVOb2RlLm9yaWdfKi4gVGhleSBhcmUgYWxyZWFkeQ0KICAgICsgICAgIyBpbmRp
cmVjdGx5IHRlc3RlZCBhYm92ZS4gVXNlIE1lbnVOb2RlLl9fc3RyX18oKSBhcyBhIHByb3h5Lg0K
ICAgICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5zeW1zWyJERVBfUkVNX0NPUk5FUl9DQVNFUyJd
LCAiIiINCiAgICArY29uZmlnIERFUF9SRU1fQ09STkVSX0NBU0VTDQogICAgKwlib29sDQogICAg
KwlkZWZhdWx0IEENCiAgICArCWRlcGVuZHMgb24gbg0KICAgICsNCiAgICArY29uZmlnIERFUF9S
RU1fQ09STkVSX0NBU0VTDQogICAgKwlib29sDQogICAgKwlkZWZhdWx0IEIgaWYgbg0KICAgICsN
CiAgICArY29uZmlnIERFUF9SRU1fQ09STkVSX0NBU0VTDQogICAgKwlib29sDQogICAgKwlkZWZh
dWx0IEMNCiAgICArCWRlcGVuZHMgb24gbSAmJiBNT0RVTEVTDQogICAgKw0KICAgICtjb25maWcg
REVQX1JFTV9DT1JORVJfQ0FTRVMNCiAgICArCWJvb2wNCiAgICArCWRlZmF1bHQgRCBpZiBBDQog
ICAgKw0KICAgICtjb25maWcgREVQX1JFTV9DT1JORVJfQ0FTRVMNCiAgICArCWJvb2wNCiAgICAr
CWRlZmF1bHQgRSBpZiAhRTENCiAgICArCWRlZmF1bHQgRiBpZiBGMSA9IEYyDQogICAgKwlkZWZh
dWx0IEcgaWYgRzEgfHwgSDENCiAgICArCWRlcGVuZHMgb24gIUgNCiAgICArDQogICAgK2NvbmZp
ZyBERVBfUkVNX0NPUk5FUl9DQVNFUw0KICAgICsJYm9vbA0KICAgICsJZGVmYXVsdCBIDQogICAg
KwlkZXBlbmRzIG9uICJmb28iID0gImJhciINCiAgICArDQogICAgK2NvbmZpZyBERVBfUkVNX0NP
Uk5FUl9DQVNFUw0KICAgICsJYm9vbCAicHJvbXB0IiBpZiBGT08gfHwgQkFSDQogICAgKwlkZXBl
bmRzIG9uIEJBWiAmJiBRQVoNCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgICMgVGVzdCB7U3lt
Ym9sLENob2ljZX0ub3JpZ18qDQogICAgKw0KICAgICsgICAgZGVmIHZlcmlmeV9kZXBzKGVsbXMs
IGRlcF9pbmRleCwgZXhwZWN0ZWQpOg0KICAgICsgICAgICAgIHZlcmlmeV9lcXVhbCgiICIuam9p
bihleHByX3N0cihlbG1bZGVwX2luZGV4XSkgZm9yIGVsbSBpbiBlbG1zKSwNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWQpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2RlcHMoYy5z
eW1zWyJCT09MX1NZTV9PUklHIl0ub3JpZ19kZWZhdWx0cywgICAgICAgIDEsICJERVAgeSB5IikN
CiAgICArICAgIHZlcmlmeV9kZXBzKGMuc3ltc1siQk9PTF9TWU1fT1JJRyJdLm9yaWdfc2VsZWN0
cywgICAgICAgICAxLCAieSBERVAgeSIpDQogICAgKyAgICB2ZXJpZnlfZGVwcyhjLnN5bXNbIkJP
T0xfU1lNX09SSUciXS5vcmlnX2ltcGxpZXMsICAgICAgICAgMSwgInkgeSBERVAiKQ0KICAgICsg
ICAgdmVyaWZ5X2RlcHMoYy5zeW1zWyJJTlRfU1lNX09SSUciXS5vcmlnX3JhbmdlcywgICAgICAg
ICAgIDIsICJERVAgeSBERVAiKQ0KICAgICsgICAgdmVyaWZ5X2RlcHMoYy5uYW1lZF9jaG9pY2Vz
WyJDSE9JQ0VfT1JJRyJdLm9yaWdfZGVmYXVsdHMsIDEsICJ5IERFUCBERVAiKQ0KICAgICsNCiAg
ICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyBTeW1ib2wuX19yZXByX18oKSIpDQogICAgKw0K
ICAgICsgICAgZGVmIHZlcmlmeV9yZXByKGl0ZW0sIHMpOg0KICAgICsgICAgICAgIHZlcmlmeV9l
cXVhbChyZXByKGl0ZW0pICsgIlxuIiwgc1sxOl0pDQogICAgKw0KICAgICsgICAgYyA9IEtjb25m
aWcoIktjb25maWdsaWIvdGVzdHMvS3JlcHIiLCB3YXJuPUZhbHNlKQ0KICAgICsNCiAgICArICAg
IHZlcmlmeV9yZXByKGMubiwgIiIiDQogICAgKzxzeW1ib2wgbiwgdHJpc3RhdGUsIHZhbHVlIG4s
IGNvbnN0YW50Pg0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3JlcHIoYy5tLCAi
IiINCiAgICArPHN5bWJvbCBtLCB0cmlzdGF0ZSwgdmFsdWUgbSwgY29uc3RhbnQ+DQogICAgKyIi
IikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihjLnksICIiIg0KICAgICs8c3ltYm9sIHks
IHRyaXN0YXRlLCB2YWx1ZSB5LCBjb25zdGFudD4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAg
IHZlcmlmeV9yZXByKGMuc3ltc1siVU5ERUZJTkVEIl0sICIiIg0KICAgICs8c3ltYm9sIFVOREVG
SU5FRCwgdW5rbm93biwgdmFsdWUgIlVOREVGSU5FRCIsIHZpc2liaWxpdHkgbiwgZGlyZWN0IGRl
cHMgbiwgdW5kZWZpbmVkPg0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3JlcHIo
Yy5zeW1zWyJCQVNJQyJdLCAiIiINCiAgICArPHN5bWJvbCBCQVNJQywgYm9vbCwgdmFsdWUgeSwg
dmlzaWJpbGl0eSBuLCBkaXJlY3QgZGVwcyB5LCBLY29uZmlnbGliL3Rlc3RzL0tyZXByOjk+DQog
ICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihjLnN5bXNbIlZJU0lCTEUiXSwg
IiIiDQogICAgKzxzeW1ib2wgVklTSUJMRSwgYm9vbCwgInZpc2libGUiLCB2YWx1ZSBuLCB2aXNp
YmlsaXR5IHksIGRpcmVjdCBkZXBzIHksIEtjb25maWdsaWIvdGVzdHMvS3JlcHI6MTQ+DQogICAg
KyIiIikNCiAgICArDQogICAgKyAgICBjLnN5bXNbIlZJU0lCTEUiXS5zZXRfdmFsdWUoMikNCiAg
ICArICAgIGMuc3ltc1siU1RSSU5HIl0uc2V0X3ZhbHVlKCJmb28iKQ0KICAgICsNCiAgICArICAg
IHZlcmlmeV9yZXByKGMuc3ltc1siVklTSUJMRSJdLCAiIiINCiAgICArPHN5bWJvbCBWSVNJQkxF
LCBib29sLCAidmlzaWJsZSIsIHZhbHVlIHksIHVzZXIgdmFsdWUgeSwgdmlzaWJpbGl0eSB5LCBk
aXJlY3QgZGVwcyB5LCBLY29uZmlnbGliL3Rlc3RzL0tyZXByOjE0Pg0KICAgICsiIiIpDQogICAg
Kw0KICAgICsgICAgdmVyaWZ5X3JlcHIoYy5zeW1zWyJTVFJJTkciXSwgIiIiDQogICAgKzxzeW1i
b2wgU1RSSU5HLCBzdHJpbmcsICJ2aXNpYmxlIiwgdmFsdWUgImZvbyIsIHVzZXIgdmFsdWUgImZv
byIsIHZpc2liaWxpdHkgeSwgZGlyZWN0IGRlcHMgeSwgS2NvbmZpZ2xpYi90ZXN0cy9LcmVwcjox
Nz4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9yZXByKGMuc3ltc1siRElSX0RF
UF9OIl0sICIiIg0KICAgICs8c3ltYm9sIERJUl9ERVBfTiwgdW5rbm93biwgdmFsdWUgIkRJUl9E
RVBfTiIsIHZpc2liaWxpdHkgbiwgZGlyZWN0IGRlcHMgbiwgS2NvbmZpZ2xpYi90ZXN0cy9LcmVw
cjoyMD4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9yZXByKGMuc3ltc1siT1BU
SU9OUyJdLCAiIiINCiAgICArPHN5bWJvbCBPUFRJT05TLCB1bmtub3duLCB2YWx1ZSAiT1BUSU9O
UyIsIHZpc2liaWxpdHkgbiwgYWxsbm9jb25maWdfeSwgaXMgdGhlIGRlZmNvbmZpZ19saXN0IHN5
bWJvbCwgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZSBFTlYsIGRpcmVjdCBkZXBzIHksIEtjb25m
aWdsaWIvdGVzdHMvS3JlcHI6MjM+DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlf
cmVwcihjLnN5bXNbIk1VTFRJX0RFRiJdLCAiIiINCiAgICArPHN5bWJvbCBNVUxUSV9ERUYsIHVu
a25vd24sIHZhbHVlICJNVUxUSV9ERUYiLCB2aXNpYmlsaXR5IG4sIGRpcmVjdCBkZXBzIHksIEtj
b25maWdsaWIvdGVzdHMvS3JlcHI6MjgsIEtjb25maWdsaWIvdGVzdHMvS3JlcHI6Mjk+DQogICAg
KyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihjLnN5bXNbIkNIT0lDRV8xIl0sICIi
Ig0KICAgICs8c3ltYm9sIENIT0lDRV8xLCB0cmlzdGF0ZSwgImNob2ljZSBzeW0iLCB2YWx1ZSBu
LCB2aXNpYmlsaXR5IG0sIGNob2ljZSBzeW1ib2wsIGRpcmVjdCBkZXBzIG0sIEtjb25maWdsaWIv
dGVzdHMvS3JlcHI6MzY+DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihj
Lm1vZHVsZXMsICIiIg0KICAgICs8c3ltYm9sIE1PRFVMRVMsIGJvb2wsIHZhbHVlIHksIHZpc2li
aWxpdHkgbiwgaXMgdGhlIG1vZHVsZXMgc3ltYm9sLCBkaXJlY3QgZGVwcyB5LCBLY29uZmlnbGli
L3Rlc3RzL0tyZXByOjE+DQogICAgKyIiIikNCiAgICArDQogICAgKw0KICAgICsgICAgcHJpbnQo
IlRlc3RpbmcgQ2hvaWNlLl9fcmVwcl9fKCkiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9yZXBy
KGMubmFtZWRfY2hvaWNlc1siQ0hPSUNFIl0sICIiIg0KICAgICs8Y2hvaWNlIENIT0lDRSwgdHJp
c3RhdGUsICJjaG9pY2UiLCBtb2RlIG0sIHZpc2liaWxpdHkgeSwgS2NvbmZpZ2xpYi90ZXN0cy9L
cmVwcjozMz4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIGMubmFtZWRfY2hvaWNlc1siQ0hP
SUNFIl0uc2V0X3ZhbHVlKDIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3JlcHIoYy5uYW1lZF9j
aG9pY2VzWyJDSE9JQ0UiXSwgIiIiDQogICAgKzxjaG9pY2UgQ0hPSUNFLCB0cmlzdGF0ZSwgImNo
b2ljZSIsIG1vZGUgeSwgdXNlciBtb2RlIHksIENIT0lDRV8xIHNlbGVjdGVkLCB2aXNpYmlsaXR5
IHksIEtjb25maWdsaWIvdGVzdHMvS3JlcHI6MzM+DQogICAgKyIiIikNCiAgICArDQogICAgKyAg
ICBjLnN5bXNbIkNIT0lDRV8yIl0uc2V0X3ZhbHVlKDIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5
X3JlcHIoYy5uYW1lZF9jaG9pY2VzWyJDSE9JQ0UiXSwgIiIiDQogICAgKzxjaG9pY2UgQ0hPSUNF
LCB0cmlzdGF0ZSwgImNob2ljZSIsIG1vZGUgeSwgdXNlciBtb2RlIHksIENIT0lDRV8yIHNlbGVj
dGVkLCBDSE9JQ0VfMiBzZWxlY3RlZCBieSB1c2VyLCB2aXNpYmlsaXR5IHksIEtjb25maWdsaWIv
dGVzdHMvS3JlcHI6MzM+DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICBjLm5hbWVkX2Nob2lj
ZXNbIkNIT0lDRSJdLnNldF92YWx1ZSgxKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9yZXByKGMu
bmFtZWRfY2hvaWNlc1siQ0hPSUNFIl0sICIiIg0KICAgICs8Y2hvaWNlIENIT0lDRSwgdHJpc3Rh
dGUsICJjaG9pY2UiLCBtb2RlIG0sIHVzZXIgbW9kZSBtLCBDSE9JQ0VfMiBzZWxlY3RlZCBieSB1
c2VyIChvdmVycmlkZGVuKSwgdmlzaWJpbGl0eSB5LCBLY29uZmlnbGliL3Rlc3RzL0tyZXByOjMz
Pg0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3JlcHIoYy5zeW1zWyJDSE9JQ0Vf
SE9PSyJdLm5vZGVzWzBdLm5leHQuaXRlbSwgIiIiDQogICAgKzxjaG9pY2UsIHRyaXN0YXRlLCAi
b3B0aW9uYWwgY2hvaWNlIiwgbW9kZSBuLCB2aXNpYmlsaXR5IG4sIG9wdGlvbmFsLCBLY29uZmln
bGliL3Rlc3RzL0tyZXByOjQ2Pg0KICAgICsiIiIpDQogICAgKw0KICAgICsNCiAgICArICAgIHBy
aW50KCJUZXN0aW5nIE1lbnVOb2RlLl9fcmVwcl9fKCkiKQ0KICAgICsNCiAgICArICAgIHZlcmlm
eV9yZXByKGMuc3ltc1siQkFTSUMiXS5ub2Rlc1swXSwgIiIiDQogICAgKzxtZW51IG5vZGUgZm9y
IHN5bWJvbCBCQVNJQywgZGVwcyB5LCBoYXMgaGVscCwgaGFzIG5leHQsIEtjb25maWdsaWIvdGVz
dHMvS3JlcHI6OT4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9yZXByKGMuc3lt
c1siRElSX0RFUF9OIl0ubm9kZXNbMF0sICIiIg0KICAgICs8bWVudSBub2RlIGZvciBzeW1ib2wg
RElSX0RFUF9OLCBkZXBzIG4sIGhhcyBuZXh0LCBLY29uZmlnbGliL3Rlc3RzL0tyZXByOjIwPg0K
ICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3JlcHIoYy5zeW1zWyJNVUxUSV9ERUYi
XS5ub2Rlc1swXSwgIiIiDQogICAgKzxtZW51IG5vZGUgZm9yIHN5bWJvbCBNVUxUSV9ERUYsIGRl
cHMgeSwgaGFzIG5leHQsIEtjb25maWdsaWIvdGVzdHMvS3JlcHI6Mjg+DQogICAgKyIiIikNCiAg
ICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihjLnN5bXNbIk1VTFRJX0RFRiJdLm5vZGVzWzFdLCAi
IiINCiAgICArPG1lbnUgbm9kZSBmb3Igc3ltYm9sIE1VTFRJX0RFRiwgZGVwcyB5LCBoYXMgbmV4
dCwgS2NvbmZpZ2xpYi90ZXN0cy9LcmVwcjoyOT4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAg
IHZlcmlmeV9yZXByKGMuc3ltc1siTUVOVUNPTkZJRyJdLm5vZGVzWzBdLCAiIiINCiAgICArPG1l
bnUgbm9kZSBmb3Igc3ltYm9sIE1FTlVDT05GSUcsIGlzIG1lbnVjb25maWcsIGRlcHMgeSwgaGFz
IG5leHQsIEtjb25maWdsaWIvdGVzdHMvS3JlcHI6MzE+DQogICAgKyIiIikNCiAgICArDQogICAg
KyAgICB2ZXJpZnlfcmVwcihjLm5hbWVkX2Nob2ljZXNbIkNIT0lDRSJdLm5vZGVzWzBdLCAiIiIN
CiAgICArPG1lbnUgbm9kZSBmb3IgY2hvaWNlIENIT0lDRSwgcHJvbXB0ICJjaG9pY2UiICh2aXNp
YmlsaXR5IHkpLCBkZXBzIHksIGhhcyBjaGlsZCwgaGFzIG5leHQsIEtjb25maWdsaWIvdGVzdHMv
S3JlcHI6MzM+DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihjLnN5bXNb
IkNIT0lDRV9IT09LIl0ubm9kZXNbMF0ubmV4dCwgIiIiDQogICAgKzxtZW51IG5vZGUgZm9yIGNo
b2ljZSwgcHJvbXB0ICJvcHRpb25hbCBjaG9pY2UiICh2aXNpYmlsaXR5IG4pLCBkZXBzIHksIGhh
cyBuZXh0LCBLY29uZmlnbGliL3Rlc3RzL0tyZXByOjQ2Pg0KICAgICsiIiIpDQogICAgKw0KICAg
ICsgICAgdmVyaWZ5X3JlcHIoYy5zeW1zWyJOT19WSVNJQkxFX0lGX0hPT0siXS5ub2Rlc1swXS5u
ZXh0LCAiIiINCiAgICArPG1lbnUgbm9kZSBmb3IgbWVudSwgcHJvbXB0ICJubyB2aXNpYmxlIGlm
IiAodmlzaWJpbGl0eSB5KSwgZGVwcyB5LCAndmlzaWJsZSBpZicgZGVwcyB5LCBoYXMgbmV4dCwg
S2NvbmZpZ2xpYi90ZXN0cy9LcmVwcjo1Mz4NCiAgICArIiIiKQ0KICAgICsNCiAgICArICAgIHZl
cmlmeV9yZXByKGMuc3ltc1siVklTSUJMRV9JRl9IT09LIl0ubm9kZXNbMF0ubmV4dCwgIiIiDQog
ICAgKzxtZW51IG5vZGUgZm9yIG1lbnUsIHByb21wdCAidmlzaWJsZSBpZiIgKHZpc2liaWxpdHkg
eSksIGRlcHMgeSwgJ3Zpc2libGUgaWYnIGRlcHMgbSwgaGFzIG5leHQsIEtjb25maWdsaWIvdGVz
dHMvS3JlcHI6NTg+DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihjLnN5
bXNbIkNPTU1FTlRfSE9PSyJdLm5vZGVzWzBdLm5leHQsICIiIg0KICAgICs8bWVudSBub2RlIGZv
ciBjb21tZW50LCBwcm9tcHQgImNvbW1lbnQiICh2aXNpYmlsaXR5IHkpLCBkZXBzIHksIEtjb25m
aWdsaWIvdGVzdHMvS3JlcHI6NjQ+DQogICAgKyIiIikNCiAgICArDQogICAgKw0KICAgICsgICAg
cHJpbnQoIlRlc3RpbmcgS2NvbmZpZy5fX3JlcHJfXygpIikNCiAgICArDQogICAgKyAgICB2ZXJp
ZnlfcmVwcihjLCAiIiINCiAgICArPGNvbmZpZ3VyYXRpb24gd2l0aCAxNSBzeW1ib2xzLCBtYWlu
IG1lbnUgcHJvbXB0ICJNYWluIG1lbnUiLCBzcmN0cmVlIGlzIGN1cnJlbnQgZGlyZWN0b3J5LCBj
b25maWcgc3ltYm9sIHByZWZpeCAiQ09ORklHXyIsIHdhcm5pbmdzIGRpc2FibGVkLCBwcmludGlu
ZyBvZiB3YXJuaW5ncyB0byBzdGRlcnIgZW5hYmxlZCwgdW5kZWYuIHN5bWJvbCBhc3NpZ25tZW50
IHdhcm5pbmdzIGRpc2FibGVkLCBvdmVycmlkaW5nIHN5bWJvbCBhc3NpZ25tZW50IHdhcm5pbmdz
IGVuYWJsZWQsIHJlZHVuZGFudCBzeW1ib2wgYXNzaWdubWVudCB3YXJuaW5ncyBlbmFibGVkPg0K
ICAgICsiIiIpDQogICAgKw0KICAgICsgICAgb3MuZW52aXJvblsic3JjdHJlZSJdID0gIktjb25m
aWdsaWIiDQogICAgKyAgICBvcy5lbnZpcm9uWyJDT05GSUdfIl0gPSAiQ09ORklHXyB2YWx1ZSIN
CiAgICArDQogICAgKyAgICBjID0gS2NvbmZpZygidGVzdHMvS3JlcHIiLCB3YXJuPUZhbHNlKQ0K
ICAgICsgICAgYy53YXJuID0gVHJ1ZQ0KICAgICsgICAgYy53YXJuX3RvX3N0ZGVyciA9IEZhbHNl
DQogICAgKyAgICBjLndhcm5fYXNzaWduX292ZXJyaWRlID0gRmFsc2UNCiAgICArICAgIGMud2Fy
bl9hc3NpZ25fcmVkdW4gPSBGYWxzZQ0KICAgICsgICAgYy53YXJuX2Fzc2lnbl91bmRlZiA9IFRy
dWUNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVwcihjLCAiIiINCiAgICArPGNvbmZpZ3VyYXRp
b24gd2l0aCAxNSBzeW1ib2xzLCBtYWluIG1lbnUgcHJvbXB0ICJNYWluIG1lbnUiLCBzcmN0cmVl
ICJLY29uZmlnbGliIiwgY29uZmlnIHN5bWJvbCBwcmVmaXggIkNPTkZJR18gdmFsdWUiLCB3YXJu
aW5ncyBlbmFibGVkLCBwcmludGluZyBvZiB3YXJuaW5ncyB0byBzdGRlcnIgZGlzYWJsZWQsIHVu
ZGVmLiBzeW1ib2wgYXNzaWdubWVudCB3YXJuaW5ncyBlbmFibGVkLCBvdmVycmlkaW5nIHN5bWJv
bCBhc3NpZ25tZW50IHdhcm5pbmdzIGRpc2FibGVkLCByZWR1bmRhbnQgc3ltYm9sIGFzc2lnbm1l
bnQgd2FybmluZ3MgZGlzYWJsZWQ+DQogICAgKyIiIikNCiAgICArDQogICAgKyAgICBvcy5lbnZp
cm9uLnBvcCgic3JjdHJlZSIsIE5vbmUpDQogICAgKyAgICBvcy5lbnZpcm9uLnBvcCgiQ09ORklH
XyIsIE5vbmUpDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIHRyaWNreSBo
ZWxwIHN0cmluZ3MiKQ0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGliL3Rl
c3RzL0toZWxwIikNCiAgICArDQogICAgKyAgICBkZWYgdmVyaWZ5X2hlbHAobm9kZSwgcyk6DQog
ICAgKyAgICAgICAgdmVyaWZ5X2VxdWFsKG5vZGUuaGVscCwgc1sxOi0xXSkNCiAgICArDQogICAg
KyAgICB2ZXJpZnlfaGVscChjLnN5bXNbIlRXT19IRUxQX1NUUklOR1MiXS5ub2Rlc1swXSwgIiIi
DQogICAgK2ZpcnN0IGhlbHAgc3RyaW5nDQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2ZXJp
ZnlfaGVscChjLnN5bXNbIlRXT19IRUxQX1NUUklOR1MiXS5ub2Rlc1sxXSwgIiIiDQogICAgK3Nl
Y29uZCBoZWxwIHN0cmluZw0KICAgICsiIiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2hlbHAo
Yy5zeW1zWyJOT19CTEFOS19BRlRFUl9IRUxQIl0ubm9kZXNbMF0sICIiIg0KICAgICtoZWxwIGZv
cg0KICAgICtOT19CTEFOS19BRlRFUl9IRUxQDQogICAgKyIiIikNCiAgICArDQogICAgKyAgICB2
ZXJpZnlfaGVscChjLm5hbWVkX2Nob2ljZXNbIkNIT0lDRV9IRUxQIl0ubm9kZXNbMF0sICIiIg0K
ICAgICtoZWxwIGZvcg0KICAgICtDSE9JQ0VfSEVMUA0KICAgICsiIiIpDQogICAgKw0KICAgICsg
ICAgdmVyaWZ5X2hlbHAoYy5zeW1zWyJIRUxQX1RFUk1JTkFURURfQllfQ09NTUVOVCJdLm5vZGVz
WzBdLCAiIiINCiAgICArYQ0KICAgICtiDQogICAgK2MNCiAgICArIiIiKQ0KICAgICsNCiAgICAr
ICAgIHZlcmlmeV9oZWxwKGMuc3ltc1siVFJJQ0tZX0hFTFAiXS5ub2Rlc1swXSwgIiIiDQogICAg
K2ENCiAgICArIGINCiAgICArICBjDQogICAgKw0KICAgICsgZA0KICAgICsgIGUNCiAgICArICAg
Zg0KICAgICsNCiAgICArDQogICAgK2cNCiAgICArIGgNCiAgICArICBpDQogICAgKyIiIikNCiAg
ICArDQogICAgKw0KICAgICsgICAgcHJpbnQoIlRlc3RpbmcgbG9jYXRpb25zLCBzb3VyY2UvcnNv
dXJjZS9nc291cmNlL2dyc291cmNlLCBhbmQgIg0KICAgICsgICAgICAgICAgIktjb25maWcua2Nv
bmZpZ19maWxlbmFtZXMiKQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfbG9jYXRpb25zKG5v
ZGVzLCAqZXhwZWN0ZWRfbG9jcyk6DQogICAgKyAgICAgICAgdmVyaWZ5KGxlbihub2RlcykgPT0g
bGVuKGV4cGVjdGVkX2xvY3MpLA0KICAgICsgICAgICAgICAgICAgICAiV3JvbmcgbnVtYmVyIG9m
IGxvY2F0aW9ucyBmb3IgIiArIHJlcHIobm9kZXMpKQ0KICAgICsNCiAgICArICAgICAgICBmb3Ig
bm9kZSwgZXhwZWN0ZWRfbG9jIGluIHppcChub2RlcywgZXhwZWN0ZWRfbG9jcyk6DQogICAgKyAg
ICAgICAgICAgIG5vZGVfbG9jID0gInt9Ont9Ii5mb3JtYXQobm9kZS5maWxlbmFtZSwgbm9kZS5s
aW5lbnIpDQogICAgKyAgICAgICAgICAgIHZlcmlmeShub2RlX2xvYyA9PSBleHBlY3RlZF9sb2Ms
DQogICAgKyAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQge30gdG8gaGF2ZSB0aGUgbG9jYXRp
b24ge30sIGhhZCB0aGUgbG9jYXRpb24ge30iDQogICAgKyAgICAgICAgICAgICAgICAgICAuZm9y
bWF0KHJlcHIobm9kZSksIGV4cGVjdGVkX2xvYywgbm9kZV9sb2MpKQ0KICAgICsNCiAgICArICAg
ICMgRXhwYW5kZWQgaW4gdGhlICdzb3VyY2UnIHN0YXRlbWVudCBpbiBLbG9jYXRpb24NCiAgICAr
DQogICAgKyAgICBvcy5lbnZpcm9uWyJURVNUU19ESVJfRlJPTV9FTlYiXSA9ICJ0ZXN0cyINCiAg
ICArICAgIG9zLmVudmlyb25bIlNVQl9ESVJfRlJPTV9FTlYiXSA9ICJzdWIiDQogICAgKw0KICAg
ICsgICAgb3MuZW52aXJvblsiX1NPVVJDRUQiXSA9ICJfc291cmNlZCINCiAgICArICAgIG9zLmVu
dmlyb25bIl9SU09VUkNFRCJdID0gIl9yc291cmNlZCINCiAgICArICAgIG9zLmVudmlyb25bIl9H
U09VUkNFRCJdID0gIl9nc291cmNlZCINCiAgICArICAgIG9zLmVudmlyb25bIl9HUlNPVVJDRUQi
XSA9ICJfZ3Jzb3VyY2VkIg0KICAgICsNCiAgICArICAgICMgVGVzdCB0d2ljZSwgd2l0aCAkc3Jj
dHJlZSBhcyBhIHJlbGF0aXZlIGFuZCBhbiBhYnNvbHV0ZSBwYXRoLA0KICAgICsgICAgIyByZXNw
ZWN0aXZlbHkNCiAgICArICAgIGZvciBzcmN0cmVlIGluICJLY29uZmlnbGliIiwgb3MucGF0aC5h
YnNwYXRoKCJLY29uZmlnbGliIik6DQogICAgKyAgICAgICAgb3MuZW52aXJvblsic3JjdHJlZSJd
ID0gc3JjdHJlZQ0KICAgICsNCiAgICArICAgICAgICAjIEhhcyBzeW1ib2wgd2l0aCBlbXB0eSBo
ZWxwIHRleHQsIHNvIGRpc2FibGUgd2FybmluZ3MNCiAgICArICAgICAgICBjID0gS2NvbmZpZygi
dGVzdHMvS2xvY2F0aW9uIiwgd2Fybj1GYWxzZSkNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5
X2xvY2F0aW9ucyhjLnN5bXNbIlNJTkdMRV9ERUYiXS5ub2RlcywgInRlc3RzL0tsb2NhdGlvbjo0
IikNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5X2xvY2F0aW9ucyhjLnN5bXNbIk1VTFRJX0RF
RiJdLm5vZGVzLA0KICAgICsgICAgICAgICAgInRlc3RzL0tsb2NhdGlvbjo3IiwNCiAgICArICAg
ICAgICAgICJ0ZXN0cy9LbG9jYXRpb246MzciLA0KICAgICsgICAgICAgICAgInRlc3RzL0tsb2Nh
dGlvbjozOSIsDQogICAgKyAgICAgICAgICAidGVzdHMvS2xvY2F0aW9uX3NvdXJjZWQ6MyIsDQog
ICAgKyAgICAgICAgICAidGVzdHMvc3ViL0tsb2NhdGlvbl9yc291cmNlZDoyIiwNCiAgICArICAg
ICAgICAgICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMToxIiwNCiAgICArICAgICAgICAg
ICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMjoxIiwNCiAgICArICAgICAgICAgICJ0ZXN0
cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMToxIiwNCiAgICArICAgICAgICAgICJ0ZXN0cy9zdWIv
S2xvY2F0aW9uX2dzb3VyY2VkMjoxIiwNCiAgICArICAgICAgICAgICJ0ZXN0cy9zdWIvS2xvY2F0
aW9uX2dyc291cmNlZDE6MSIsDQogICAgKyAgICAgICAgICAidGVzdHMvc3ViL0tsb2NhdGlvbl9n
cnNvdXJjZWQyOjEiLA0KICAgICsgICAgICAgICAgInRlc3RzL3N1Yi9LbG9jYXRpb25fZ3Jzb3Vy
Y2VkMToxIiwNCiAgICArICAgICAgICAgICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dyc291cmNlZDI6
MSIsDQogICAgKyAgICAgICAgICAidGVzdHMvS2xvY2F0aW9uOjcyIikNCiAgICArDQogICAgKyAg
ICAgICAgdmVyaWZ5X2xvY2F0aW9ucyhjLm5hbWVkX2Nob2ljZXNbIkNIT0lDRSJdLm5vZGVzLA0K
ICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3RzL0tsb2NhdGlvbl9zb3VyY2VkOjUi
KQ0KICAgICsNCiAgICArICAgICAgICB2ZXJpZnlfbG9jYXRpb25zKFtjLnN5bXNbIk1FTlVfSE9P
SyJdLm5vZGVzWzBdLm5leHRdLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3Rz
L0tsb2NhdGlvbl9zb3VyY2VkOjEyIikNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5X2xvY2F0
aW9ucyhbYy5zeW1zWyJDT01NRU5UX0hPT0siXS5ub2Rlc1swXS5uZXh0XSwNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICJ0ZXN0cy9LbG9jYXRpb25fc291cmNlZDoxOCIpDQogICAgKw0K
ICAgICsgICAgICAgICMgVGVzdCBLY29uZmlnLmtjb25maWdfZmlsZW5hbWVzDQogICAgKw0KICAg
ICsgICAgICAgIHZlcmlmeV9lcXVhbChjLmtjb25maWdfZmlsZW5hbWVzLCBbDQogICAgKyAgICAg
ICAgICAgICJ0ZXN0cy9LbG9jYXRpb24iLA0KICAgICsgICAgICAgICAgICAidGVzdHMvS2xvY2F0
aW9uX3NvdXJjZWQiLA0KICAgICsgICAgICAgICAgICAidGVzdHMvc3ViL0tsb2NhdGlvbl9yc291
cmNlZCIsDQogICAgKyAgICAgICAgICAgICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMSIs
DQogICAgKyAgICAgICAgICAgICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMiIsDQogICAg
KyAgICAgICAgICAgICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMSIsDQogICAgKyAgICAg
ICAgICAgICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dzb3VyY2VkMiIsDQogICAgKyAgICAgICAgICAg
ICJ0ZXN0cy9zdWIvS2xvY2F0aW9uX2dyc291cmNlZDEiLA0KICAgICsgICAgICAgICAgICAidGVz
dHMvc3ViL0tsb2NhdGlvbl9ncnNvdXJjZWQyIiwNCiAgICArICAgICAgICAgICAgInRlc3RzL3N1
Yi9LbG9jYXRpb25fZ3Jzb3VyY2VkMSIsDQogICAgKyAgICAgICAgICAgICJ0ZXN0cy9zdWIvS2xv
Y2F0aW9uX2dyc291cmNlZDIiDQogICAgKyAgICAgICAgXSkNCiAgICArDQogICAgKyAgICAgICAg
IyBUZXN0IHJlY3Vyc2l2ZSAnc291cmNlJyBkZXRlY3Rpb24NCiAgICArDQogICAgKyAgICAgICAg
dHJ5Og0KICAgICsgICAgICAgICAgICBLY29uZmlnKCJ0ZXN0cy9LcmVjdXJzaXZlMSIpDQogICAg
KyAgICAgICAgZXhjZXB0IEtjb25maWdFcnJvciBhcyBlOg0KICAgICsgICAgICAgICAgICB2ZXJp
ZnlfZXF1YWwoc3RyKGUpLCAiIiINCiAgICArdGVzdHMvS3JlY3Vyc2l2ZTI6MTogcmVjdXJzaXZl
ICdzb3VyY2UnIG9mICd0ZXN0cy9LcmVjdXJzaXZlMScgZGV0ZWN0ZWQuIENoZWNrIHRoYXQgZW52
aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzZXQgY29ycmVjdGx5Lg0KICAgICtJbmNsdWRlIHBhdGg6
DQogICAgK3Rlc3RzL0tyZWN1cnNpdmUxOjENCiAgICArdGVzdHMvS3JlY3Vyc2l2ZTI6MQ0KICAg
ICsiIiJbOi0xXSkNCiAgICArICAgICAgICBleGNlcHQ6DQogICAgKyAgICAgICAgICAgIGZhaWwo
InJlY3Vyc2l2ZSAnc291cmNlJyByYWlzZWQgd3JvbmcgZXhjZXB0aW9uIikNCiAgICArICAgICAg
ICBlbHNlOg0KICAgICsgICAgICAgICAgICBmYWlsKCJyZWN1cnNpdmUgJ3NvdXJjZScgZGlkIG5v
dCByYWlzZSBleGNlcHRpb24iKQ0KICAgICsNCiAgICArICAgICAgICAjIFZlcmlmeSB0aGF0IHNv
dXJjZSBhbmQgcnNvdXJjZSB0aHJvdyBleGNlcHRpb25zIGZvciBtaXNzaW5nIGZpbGVzDQogICAg
Kw0KICAgICsgICAgICAgICMgVE9ETzogTWFrZSBhbiBleGNlcHRpb24gdGVzdCBoZWxwZXINCiAg
ICArDQogICAgKyAgICAgICAgdHJ5Og0KICAgICsgICAgICAgICAgICBLY29uZmlnKCJ0ZXN0cy9L
bWlzc2luZ3NvdXJjZSIpDQogICAgKyAgICAgICAgZXhjZXB0IEtjb25maWdFcnJvciBhcyBlOg0K
ICAgICsgICAgICAgICAgICBpZiAibm90IGZvdW5kIiBub3QgaW4gc3RyKGUpOg0KICAgICsgICAg
ICAgICAgICAgICAgZmFpbCgiJ3NvdXJjZScgd2l0aCBtaXNzaW5nIGZpbGUgcmFpc2VkIHdyb25n
IEtjb25maWdFcnJvciIpDQogICAgKyAgICAgICAgZXhjZXB0Og0KICAgICsgICAgICAgICAgICBm
YWlsKCInc291cmNlJyB3aXRoIG1pc3NpbmcgZmlsZSByYWlzZWQgd3JvbmcgZXhjZXB0aW9uIikN
CiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICBmYWlsKCInc291cmNlJyB3aXRo
IG1pc3NpbmcgZmlsZSBkaWQgbm90IHJhaXNlIGV4Y2VwdGlvbiIpDQogICAgKw0KICAgICsgICAg
ICAgIHRyeToNCiAgICArICAgICAgICAgICAgS2NvbmZpZygidGVzdHMvS21pc3Npbmdyc291cmNl
IikNCiAgICArICAgICAgICBleGNlcHQgS2NvbmZpZ0Vycm9yIGFzIGU6DQogICAgKyAgICAgICAg
ICAgIGlmICJub3QgZm91bmQiIG5vdCBpbiBzdHIoZSk6DQogICAgKyAgICAgICAgICAgICAgICBm
YWlsKCIncnNvdXJjZScgd2l0aCBtaXNzaW5nIGZpbGUgcmFpc2VkIHdyb25nIEtjb25maWdFcnJv
ciIpDQogICAgKyAgICAgICAgZXhjZXB0Og0KICAgICsgICAgICAgICAgICBmYWlsKCIncnNvdXJj
ZScgd2l0aCBtaXNzaW5nIGZpbGUgcmFpc2VkIHdyb25nIGV4Y2VwdGlvbiIpDQogICAgKyAgICAg
ICAgZWxzZToNCiAgICArICAgICAgICAgICAgZmFpbCgiJ3Jzb3VyY2UnIHdpdGggbWlzc2luZyBm
aWxlIGRpZCBub3QgcmFpc2UgZXhjZXB0aW9uIikNCiAgICArDQogICAgKyAgICAjIFRlc3QgYSB0
cmlja3kgY2FzZSBpbnZvbHZpbmcgc3ltbGlua3MuICRzcmN0cmVlIGlzIHRlc3RzL3N5bWxpbmss
IHdoaWNoDQogICAgKyAgICAjIHBvaW50cyB0byB0ZXN0cy9zdWIvc3ViLCBtZWFuaW5nIHRlc3Rz
L3N5bWxpbmsvLi4gIT0gdGVzdHMvLiBQcmV2aW91c2x5LA0KICAgICsgICAgIyB1c2luZyAncnNv
dXJjZScgZnJvbSBhIGZpbGUgc291cmNlZCB3aXRoIGFuIGFic29sdXRlIHBhdGggdHJpZ2dlcmVk
IGFuDQogICAgKyAgICAjIHVuc2FmZSByZWxwYXRoKCkgd2l0aCB0ZXN0cy9zeW1saW5rLy4uIGlu
IGl0LCBjcmFzaGluZy4NCiAgICArDQogICAgKyAgICBvcy5lbnZpcm9uWyJzcmN0cmVlIl0gPSAi
S2NvbmZpZ2xpYi90ZXN0cy9zeW1saW5rIg0KICAgICsgICAgb3MuZW52aXJvblsiS0NPTkZJR19T
WU1MSU5LXzIiXSA9IG9zLnBhdGguYWJzcGF0aCgNCiAgICArICAgICAgICAiS2NvbmZpZ2xpYi90
ZXN0cy9zdWIvS2NvbmZpZ19zeW1saW5rXzIiKQ0KICAgICsgICAgaWYgbm90IG9zLnBhdGguaXNh
YnMoDQogICAgKyAgICAgICAgS2NvbmZpZygiS2NvbmZpZ19zeW1saW5rXzEiKS5zeW1zWyJGT1VO
RE1FIl0ubm9kZXNbMF0uZmlsZW5hbWUpOg0KICAgICsNCiAgICArICAgICAgICBmYWlsKCJTeW1s
aW5rICsgcnNvdXJjZSBpc3N1ZXMiKQ0KICAgICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVz
dGluZyBLY29uZmlnLm5vZGVfaXRlcigpIikNCiAgICArDQogICAgKyAgICAjIFJldXNlIHRlc3Rz
L0tsb2NhdGlvbi4gVGhlIG5vZGVfaXRlcih1bmlxdWVfc3ltcz1UcnVlKSBjYXNlIGFscmVhZHkg
Z2V0cw0KICAgICsgICAgIyBwbGVudHkgb2YgdGVzdGluZyBmcm9tIHdyaXRlX2NvbmZpZygpIGFz
IHdlbGwuDQogICAgKw0KICAgICsgICAgb3MuZW52aXJvblsic3JjdHJlZSJdID0gIktjb25maWds
aWIiDQogICAgKyAgICBjID0gS2NvbmZpZygidGVzdHMvS2xvY2F0aW9uIiwgd2Fybj1GYWxzZSkN
CiAgICArDQogICAgKyAgICB2ZXJpZnlfZXF1YWwoDQogICAgKyAgICAgICAgW25vZGUuaXRlbS5u
YW1lIGZvciBub2RlIGluIGMubm9kZV9pdGVyKCkNCiAgICArICAgICAgICAgaWYgaXNpbnN0YW5j
ZShub2RlLml0ZW0sIFN5bWJvbCldLA0KICAgICsgICAgICAgIFsiU0lOR0xFX0RFRiIsICJNVUxU
SV9ERUYiLCAiSEVMUF8xIiwgIkhFTFBfMiIsICJIRUxQXzMiLCAiTVVMVElfREVGIiwNCiAgICAr
ICAgICAgICAgIk1VTFRJX0RFRiIsICJNVUxUSV9ERUYiLCAiTUVOVV9IT09LIiwgIkNPTU1FTlRf
SE9PSyJdICsgXA0KICAgICsgICAgICAgIDEwKlsiTVVMVElfREVGIl0pDQogICAgKw0KICAgICsg
ICAgdmVyaWZ5X2VxdWFsKA0KICAgICsgICAgICAgIFtub2RlLml0ZW0ubmFtZSBmb3Igbm9kZSBp
biBjLm5vZGVfaXRlcihUcnVlKQ0KICAgICsgICAgICAgICBpZiBpc2luc3RhbmNlKG5vZGUuaXRl
bSwgU3ltYm9sKV0sDQogICAgKyAgICAgICAgWyJTSU5HTEVfREVGIiwgIk1VTFRJX0RFRiIsICJI
RUxQXzEiLCAiSEVMUF8yIiwgIkhFTFBfMyIsICJNRU5VX0hPT0siLA0KICAgICsgICAgICAgICAi
Q09NTUVOVF9IT09LIl0pDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2VxdWFsKA0KICAgICsgICAg
ICAgIFtub2RlLnByb21wdFswXSBmb3Igbm9kZSBpbiBjLm5vZGVfaXRlcigpDQogICAgKyAgICAg
ICAgIGlmIG5vdCBpc2luc3RhbmNlKG5vZGUuaXRlbSwgU3ltYm9sKV0sDQogICAgKyAgICAgICAg
WyJjaG9pY2UiLCAibWVudSIsICJjb21tZW50Il0pDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2Vx
dWFsKA0KICAgICsgICAgICAgIFtub2RlLnByb21wdFswXSBmb3Igbm9kZSBpbiBjLm5vZGVfaXRl
cihUcnVlKQ0KICAgICsgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShub2RlLml0ZW0sIFN5bWJv
bCldLA0KICAgICsgICAgICAgIFsiY2hvaWNlIiwgIm1lbnUiLCAiY29tbWVudCJdKQ0KICAgICsN
CiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyBNZW51Tm9kZS5pbmNsdWRlX3BhdGgiKQ0K
ICAgICsNCiAgICArICAgIG9zLmVudmlyb25bInNyY3RyZWUiXSA9ICJLY29uZmlnbGliL3Rlc3Rz
Ig0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLaW5jbHVkZV9wYXRoIikNCiAgICArDQog
ICAgKyAgICBkZWYgdmVyaWZ5X25vZGVfcGF0aChub2RlLCAqZXhwZWN0ZWQpOg0KICAgICsgICAg
ICAgIGlmIG5vZGUuaW5jbHVkZV9wYXRoICE9IGV4cGVjdGVkOg0KICAgICsgICAgICAgICAgICBm
YWlsKCJXcm9uZyBpbmNsdWRlIHBhdGggZm9yIG5vZGUgeyFyfS4gR290IHt9LCBleHBlY3RlZCB7
fS4iDQogICAgKyAgICAgICAgICAgICAgICAgLmZvcm1hdChub2RlLCBub2RlLmluY2x1ZGVfcGF0
aCwgZXhwZWN0ZWQpKQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfc3ltX3BhdGgoc3ltX25h
bWUsIG5vZGVfaSwgKmV4cGVjdGVkKToNCiAgICArICAgICAgICB2ZXJpZnlfbm9kZV9wYXRoKGMu
c3ltc1tzeW1fbmFtZV0ubm9kZXNbbm9kZV9pXSwgKmV4cGVjdGVkKQ0KICAgICsNCiAgICArICAg
IHZlcmlmeV9zeW1fcGF0aCgiVE9QIiwgMCkNCiAgICArICAgIHZlcmlmeV9zeW1fcGF0aCgiVE9Q
IiwgMSkNCiAgICArICAgIHZlcmlmeV9zeW1fcGF0aCgiVE9QIiwgMikNCiAgICArDQogICAgKyAg
ICB2ZXJpZnlfc3ltX3BhdGgoIk9ORV9ET1dOIiwgMCwgKCJLaW5jbHVkZV9wYXRoIiwgNCkpDQog
ICAgKyAgICB2ZXJpZnlfc3ltX3BhdGgoIk9ORV9ET1dOIiwgMSwgKCJLaW5jbHVkZV9wYXRoIiwg
NCkpDQogICAgKyAgICB2ZXJpZnlfc3ltX3BhdGgoIk9ORV9ET1dOIiwgMiwgKCJLaW5jbHVkZV9w
YXRoIiwgNCkpDQogICAgKyAgICB2ZXJpZnlfc3ltX3BhdGgoIk9ORV9ET1dOIiwgMywgKCJLaW5j
bHVkZV9wYXRoIiwgOSkpDQogICAgKyAgICB2ZXJpZnlfc3ltX3BhdGgoIk9ORV9ET1dOIiwgNCwg
KCJLaW5jbHVkZV9wYXRoIiwgOSkpDQogICAgKyAgICB2ZXJpZnlfc3ltX3BhdGgoIk9ORV9ET1dO
IiwgNSwgKCJLaW5jbHVkZV9wYXRoIiwgOSkpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3N5bV9w
YXRoKCJUV09fRE9XTiIsIDAsDQogICAgKyAgICAgICAgICAgICAgICAgICAgKCJLaW5jbHVkZV9w
YXRoIiwgNCksICgiS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzEiLCA0KSkNCiAgICArICAgIHZlcmlm
eV9zeW1fcGF0aCgiVFdPX0RPV04iLCAxLA0KICAgICsgICAgICAgICAgICAgICAgICAgICgiS2lu
Y2x1ZGVfcGF0aCIsIDQpLCAoIktpbmNsdWRlX3BhdGhfc291cmNlZF8xIiwgOSkpDQogICAgKyAg
ICB2ZXJpZnlfc3ltX3BhdGgoIlRXT19ET1dOIiwgMiwNCiAgICArICAgICAgICAgICAgICAgICAg
ICAoIktpbmNsdWRlX3BhdGgiLCA5KSwgKCJLaW5jbHVkZV9wYXRoX3NvdXJjZWRfMSIsIDQpKQ0K
ICAgICsgICAgdmVyaWZ5X3N5bV9wYXRoKCJUV09fRE9XTiIsIDMsDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgKCJLaW5jbHVkZV9wYXRoIiwgOSksICgiS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzEi
LCA5KSkNCiAgICArDQogICAgKyAgICB2ZXJpZnlfbm9kZV9wYXRoKGMudG9wX25vZGUpDQogICAg
KyAgICB2ZXJpZnlfbm9kZV9wYXRoKGMubWVudXNbMF0sICgiS2luY2x1ZGVfcGF0aCIsIDQpLCAo
IktpbmNsdWRlX3BhdGhfc291cmNlZF8xIiwgNCkpDQogICAgKyAgICB2ZXJpZnlfbm9kZV9wYXRo
KGMuY29tbWVudHNbMF0sICgiS2luY2x1ZGVfcGF0aCIsIDQpLCAoIktpbmNsdWRlX3BhdGhfc291
cmNlZF8xIiwgNCkpDQogICAgKyAgICB2ZXJpZnlfbm9kZV9wYXRoKGMuY2hvaWNlc1swXS5ub2Rl
c1swXSwgKCJLaW5jbHVkZV9wYXRoIiwgNCksICgiS2luY2x1ZGVfcGF0aF9zb3VyY2VkXzEiLCA0
KSkNCiAgICArDQogICAgKyAgICBvcy5lbnZpcm9uLnBvcCgic3JjdHJlZSIsIE5vbmUpDQogICAg
Kw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIEtjb25maWcuY2hvaWNlcy9tZW51cy9j
b21tZW50cyIpDQogICAgKw0KICAgICsgICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMv
S2l0ZW1saXN0cyIpDQogICAgKw0KICAgICsgICAgZGVmIHZlcmlmeV9wcm9tcHRzKGl0ZW1zLCAq
ZXhwZWN0ZWRfcHJvbXB0cyk6DQogICAgKyAgICAgICAgdmVyaWZ5KGxlbihpdGVtcykgPT0gbGVu
KGV4cGVjdGVkX3Byb21wdHMpLA0KICAgICsgICAgICAgICAgICAgICAiV3JvbmcgbnVtYmVyIG9m
IHByb21wdHMgZm9yIHt9Ii5mb3JtYXQoaXRlbXMpKQ0KICAgICsNCiAgICArICAgICAgICBmb3Ig
aXRlbSwgZXhwZWN0ZWRfcHJvbXB0IGluIHppcChpdGVtcywgZXhwZWN0ZWRfcHJvbXB0cyk6DQog
ICAgKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0sIE1lbnVOb2RlKToNCiAgICAr
ICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtLm5vZGVzWzBdDQogICAgKw0KICAgICsgICAgICAg
ICAgICB2ZXJpZnkoaXRlbS5wcm9tcHRbMF0gPT0gZXhwZWN0ZWRfcHJvbXB0LA0KICAgICsgICAg
ICAgICAgICAgICAgICAgIldyb25nIHByb21wdCBmb3Ige30sIGV4cGVjdGVkICd7fSciDQogICAg
KyAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHJlcHIoaXRlbSksIGV4cGVjdGVkX3Byb21wdCkp
DQogICAgKw0KICAgICsgICAgdmVyaWZ5X3Byb21wdHMoYy5jaG9pY2VzLCAiY2hvaWNlIDEiLCAi
Y2hvaWNlIDIiLCAiY2hvaWNlIDMiLCAiY2hvaWNlIDIiKQ0KICAgICsgICAgdmVyaWZ5X3Byb21w
dHMoYy5tZW51cywgIm1lbnUgMSIsICJtZW51IDIiLCAibWVudSAzIiwgIm1lbnUgNCIsICJtZW51
IDUiKQ0KICAgICsgICAgdmVyaWZ5X3Byb21wdHMoYy5jb21tZW50cywgImNvbW1lbnQgMSIsICJj
b21tZW50IDIiLCAiY29tbWVudCAzIikNCiAgICArDQogICAgKw0KICAgICsgICAgcHJpbnQoIlRl
c3RpbmcgU3ltYm9sL0Nob2ljZS5kaXJlY3RfZGVwIikNCiAgICArDQogICAgKyAgICBjID0gS2Nv
bmZpZygiS2NvbmZpZ2xpYi90ZXN0cy9LZGlyZGVwIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlf
ZXF1YWwoZXhwcl9zdHIoYy5zeW1zWyJOT19ERVBfU1lNIl0uZGlyZWN0X2RlcCksICd5JykNCiAg
ICArICAgIHZlcmlmeV9lcXVhbChleHByX3N0cihjLnN5bXNbIkRFUF9TWU0iXS5kaXJlY3RfZGVw
KSwgIkEgfHwgKEIgJiYgQykgfHwgIUQiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9lcXVhbChl
eHByX3N0cihjLm5hbWVkX2Nob2ljZXNbIk5PX0RFUF9DSE9JQ0UiXS5kaXJlY3RfZGVwKSwgJ3kn
KQ0KICAgICsgICAgdmVyaWZ5X2VxdWFsKGV4cHJfc3RyKGMubmFtZWRfY2hvaWNlc1siREVQX0NI
T0lDRSJdLmRpcmVjdF9kZXApLA0KICAgICsgICAgICAgICAgICAgICAgICJBIHx8IEIgfHwgQyIp
DQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIGV4cHJfaXRlbXMoKSIpDQog
ICAgKw0KICAgICsgICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvS2V4cHJfaXRlbXMi
KQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfZXhwcl9pdGVtcyhleHByLCAqc3ltX25hbWVz
KToNCiAgICArICAgICAgICB2ZXJpZnlfZXF1YWwodHVwbGUoc29ydGVkKGl0ZW0ubmFtZSBmb3Ig
aXRlbSBpbiBleHByX2l0ZW1zKGV4cHIpKSksDQogICAgKyAgICAgICAgICAgICAgICAgICAgIHN5
bV9uYW1lcykNCiAgICArDQogICAgKyAgICB2ZXJpZnlfZXhwcl9pdGVtcygNCiAgICArICAgICAg
ICBjLnN5bXNbIlRFU1QiXS5kZWZhdWx0c1swXVswXSwNCiAgICArICAgICAgICAiQSIsICJCIiwg
IkMiLCAiRCIsICJFIiwgIkYiLCAiRyIsICJIIg0KICAgICsgICAgKQ0KICAgICsNCiAgICArICAg
IHZlcmlmeV9leHByX2l0ZW1zKA0KICAgICsgICAgICAgIGMuc3ltc1siVEVTVF9DSE9JQ0UiXS5u
b2Rlc1swXS5wcm9tcHRbMV0sDQogICAgKyAgICAgICAgIkEiLCAiQ0hPSUNFIg0KICAgICsgICAg
KQ0KICAgICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyBNZW51Tm9kZS9TeW1ib2wv
Q2hvaWNlLnJlZmVyZW5jZWQiKQ0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmln
bGliL3Rlc3RzL0tyZWZlcmVuY2VkIiwgd2Fybj1GYWxzZSkNCiAgICArDQogICAgKyAgICBkZWYg
dmVyaWZ5X2RlcHMoaXRlbSwgKmRlcF9uYW1lcyk6DQogICAgKyAgICAgICAgdmVyaWZ5X2VxdWFs
KHR1cGxlKHNvcnRlZChpdGVtLm5hbWUgZm9yIGl0ZW0gaW4gaXRlbS5yZWZlcmVuY2VkKSksDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgIGRlcF9uYW1lcykNCiAgICArDQogICAgKyAgICB2ZXJp
ZnlfZGVwcyhjLnRvcF9ub2RlLCAieSIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2RlcHMoYy5z
eW1zWyJOT19SRUZTIl0ubm9kZXNbMF0sICJ5IikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfZGVw
cyhjLnN5bXNbIkpVU1RfREVQRU5EU19PTl9SRUZTIl0ubm9kZXNbMF0sICJBIiwgIkIiKQ0KICAg
ICsNCiAgICArICAgIHZlcmlmeV9kZXBzKGMuc3ltc1siTE9UU19PRl9SRUZTIl0ubm9kZXNbMF0s
DQogICAgKyAgICAgICAgICAgICAgICAqKGNocihuKSBmb3IgbiBpbiByYW5nZShvcmQoIkEiKSwg
b3JkKCJaIikgKyAxKSkpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2RlcHMoYy5zeW1zWyJJTlRf
UkVGUyJdLm5vZGVzWzBdLA0KICAgICsgICAgICAgICAgICAgICAgIkEiLCAiQiIsICJDIiwgIkQi
LCAiRSIsICJGIiwgIkciLCAiSCIsICJ5IikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfZGVwcyhj
LnN5bXNbIkNIT0lDRV9SRUYiXS5ub2Rlc1swXSwgIkNIT0lDRSIpDQogICAgKw0KICAgICsgICAg
dmVyaWZ5X2RlcHMoYy5tZW51c1swXSwgIkEiLCAiQiIsICJDIiwgIkQiKQ0KICAgICsNCiAgICAr
ICAgIHZlcmlmeV9kZXBzKGMuY29tbWVudHNbMF0sICJBIiwgIkIiKQ0KICAgICsNCiAgICArICAg
IHZlcmlmeV9kZXBzKGMuc3ltc1siTVVMVElfREVGX1NZTSJdLCAiQSIsICJCIiwgIkMiLCAieSIp
DQogICAgKyAgICB2ZXJpZnlfZGVwcyhjLm5hbWVkX2Nob2ljZXNbIk1VTFRJX0RFRl9DSE9JQ0Ui
XSwgIkEiLCAiQiIsICJDIikNCiAgICArDQogICAgKw0KICAgICsgICAgcHJpbnQoIlRlc3Rpbmcg
c3BsaXRfZXhwcigpIikNCiAgICArDQogICAgKyAgICBjID0gS2NvbmZpZygiS2NvbmZpZ2xpYi90
ZXN0cy9lbXB0eSIpDQogICAgKyAgICBjLndhcm4gPSBGYWxzZQ0KICAgICsNCiAgICArICAgIGRl
ZiB2ZXJpZnlfc3BsaXQodG9fc3BsaXQsIG9wLCBvcGVyYW5kX3N0cnMpOg0KICAgICsgICAgICAg
ICMgVGhlIHNhbWUgaGFja2FnZSBhcyBpbiBLY29uZmlnLmV2YWxfc3RyaW5nKCkNCiAgICArICAg
ICAgICBjLl90b2tlbnMgPSBjLl90b2tlbml6ZSgiaWYgIiArIHRvX3NwbGl0KVsxOl0NCiAgICAr
ICAgICAgICBjLl90b2tlbnNfaSA9IDANCiAgICArDQogICAgKyAgICAgICAgb3BlcmFuZHMgPSBz
cGxpdF9leHByKGMuX3BhcnNlX2V4cHIoRmFsc2UpLCBvcCkNCiAgICArDQogICAgKyAgICAgICAg
dmVyaWZ5KGxlbihvcGVyYW5kcykgPT0gbGVuKG9wZXJhbmRfc3RycyksDQogICAgKyAgICAgICAg
ICAgICAgICJXcm9uZyBudW1iZXIgb2Ygb3BlcmFuZHMgd2hlbiB7fSB3YXMgc3BsaXQgYnkge30i
DQogICAgKyAgICAgICAgICAgICAgIC5mb3JtYXQodG9fc3BsaXQsICJPUiIgaWYgb3AgPT0gT1Ig
ZWxzZSAiQU5EIikpDQogICAgKw0KICAgICsgICAgICAgIGZvciBvcGVyYW5kLCBvcGVyYW5kX3N0
ciBpbiB6aXAob3BlcmFuZHMsIG9wZXJhbmRfc3Rycyk6DQogICAgKyAgICAgICAgICAgIHZlcmlm
eV9lcXVhbChleHByX3N0cihvcGVyYW5kKSwgb3BlcmFuZF9zdHIpDQogICAgKw0KICAgICsgICAg
dmVyaWZ5X3NwbGl0KCJBIiwgICAgICAgICAgICAgICAgICAgIE9SLCAoIkEiLCAgICAgICAgICAg
ICAgICApKQ0KICAgICsgICAgdmVyaWZ5X3NwbGl0KCIhQSIsICAgICAgICAgICAgICAgICAgIE9S
LCAoIiFBIiwgICAgICAgICAgICAgICApKQ0KICAgICsgICAgdmVyaWZ5X3NwbGl0KCJBID0gQiIs
ICAgICAgICAgICAgICAgIE9SLCAoIkEgPSBCIiwgICAgICAgICAgICApKQ0KICAgICsgICAgdmVy
aWZ5X3NwbGl0KCJBICYmIEIiLCAgICAgICAgICAgICAgIE9SLCAoIkEgJiYgQiIsICAgICAgICAg
ICApKQ0KICAgICsgICAgdmVyaWZ5X3NwbGl0KCJBIHx8IEIiLCAgICAgICAgICAgICAgIE9SLCAo
IkEiLCAiQiIgICAgICAgICAgICApKQ0KICAgICsgICAgdmVyaWZ5X3NwbGl0KCIoQSB8fCBCKSB8
fCBDIiwgICAgICAgIE9SLCAoIkEiLCAiQiIsICJDIiAgICAgICApKQ0KICAgICsgICAgdmVyaWZ5
X3NwbGl0KCJBIHx8IChCIHx8IEMpIiwgICAgICAgIE9SLCAoIkEiLCAiQiIsICJDIiAgICAgICAp
KQ0KICAgICsgICAgdmVyaWZ5X3NwbGl0KCJBIHx8ICEoQiB8fCBDKSIsICAgICAgIE9SLCAoIkEi
LCAiIShCIHx8IEMpIiAgICApKQ0KICAgICsgICAgdmVyaWZ5X3NwbGl0KCJBIHx8IChCICYmIChD
IHx8IEQpKSIsIE9SLCAoIkEiLCAiQiAmJiAoQyB8fCBEKSIpKQ0KICAgICsgICAgdmVyaWZ5X3Nw
bGl0KCIoQSAmJiAoQiB8fCBDKSkgfHwgRCIsIE9SLCAoIkEgJiYgKEIgfHwgQykiLCAiRCIpKQ0K
ICAgICsNCiAgICArICAgIHZlcmlmeV9zcGxpdCgiQSIsICAgICAgICAgICAgICAgICAgICBBTkQs
ICgiQSIsICAgICAgICAgICAgICAgICkpDQogICAgKyAgICB2ZXJpZnlfc3BsaXQoIiFBIiwgICAg
ICAgICAgICAgICAgICAgQU5ELCAoIiFBIiwgICAgICAgICAgICAgICApKQ0KICAgICsgICAgdmVy
aWZ5X3NwbGl0KCJBID0gQiIsICAgICAgICAgICAgICAgIEFORCwgKCJBID0gQiIsICAgICAgICAg
ICAgKSkNCiAgICArICAgIHZlcmlmeV9zcGxpdCgiQSB8fCBCIiwgICAgICAgICAgICAgICBBTkQs
ICgiQSB8fCBCIiwgICAgICAgICAgICkpDQogICAgKyAgICB2ZXJpZnlfc3BsaXQoIkEgJiYgQiIs
ICAgICAgICAgICAgICAgQU5ELCAoIkEiLCAiQiIgICAgICAgICAgICApKQ0KICAgICsgICAgdmVy
aWZ5X3NwbGl0KCIoQSAmJiBCKSAmJiBDIiwgICAgICAgIEFORCwgKCJBIiwgIkIiLCAiQyIgICAg
ICAgKSkNCiAgICArICAgIHZlcmlmeV9zcGxpdCgiQSAmJiAoQiAmJiBDKSIsICAgICAgICBBTkQs
ICgiQSIsICJCIiwgIkMiICAgICAgICkpDQogICAgKyAgICB2ZXJpZnlfc3BsaXQoIkEgJiYgIShC
ICYmIEMpIiwgICAgICAgQU5ELCAoIkEiLCAiIShCICYmIEMpIiAgICApKQ0KICAgICsgICAgdmVy
aWZ5X3NwbGl0KCJBICYmIChCIHx8IChDICYmIEQpKSIsIEFORCwgKCJBIiwgIkIgfHwgKEMgJiYg
RCkiKSkNCiAgICArICAgIHZlcmlmeV9zcGxpdCgiKEEgfHwgKEIgJiYgQykpICYmIEQiLCBBTkQs
ICgiQSB8fCAoQiAmJiBDKSIsICJEIikpDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJU
ZXN0aW5nIHZpc2liaWxpdHkiKQ0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmln
bGliL3Rlc3RzL0t2aXNpYmlsaXR5IikNCiAgICArDQogICAgKyAgICBkZWYgdmVyaWZ5X3Zpc2li
aWxpdHkoaXRlbSwgbm9fbW9kdWxlX3ZpcywgbW9kdWxlX3Zpcyk6DQogICAgKyAgICAgICAgYy5t
b2R1bGVzLnNldF92YWx1ZSgwKQ0KICAgICsgICAgICAgIHZlcmlmeShpdGVtLnZpc2liaWxpdHkg
PT0gbm9fbW9kdWxlX3ZpcywNCiAgICArICAgICAgICAgICAgICAgImV4cGVjdGVkIHt9IHRvIGhh
dmUgdmlzaWJpbGl0eSB7fSB3aXRob3V0IG1vZHVsZXMsIGhhZCAiDQogICAgKyAgICAgICAgICAg
ICAgICJ2aXNpYmlsaXR5IHt9Ii4NCiAgICArICAgICAgICAgICAgICAgZm9ybWF0KHJlcHIoaXRl
bSksIG5vX21vZHVsZV92aXMsIGl0ZW0udmlzaWJpbGl0eSkpDQogICAgKw0KICAgICsgICAgICAg
IGMubW9kdWxlcy5zZXRfdmFsdWUoMikNCiAgICArICAgICAgICB2ZXJpZnkoaXRlbS52aXNpYmls
aXR5ID09IG1vZHVsZV92aXMsDQogICAgKyAgICAgICAgICAgICAgICJleHBlY3RlZCB7fSB0byBo
YXZlIHZpc2liaWxpdHkge30gd2l0aCBtb2R1bGVzLCBoYWQgIg0KICAgICsgICAgICAgICAgICAg
ICAidmlzaWJpbGl0eSB7fSIuDQogICAgKyAgICAgICAgICAgICAgIGZvcm1hdChyZXByKGl0ZW0p
LCBtb2R1bGVfdmlzLCBpdGVtLnZpc2liaWxpdHkpKQ0KICAgICsNCiAgICArICAgICMgU3ltYm9s
IHZpc2liaWxpdHkNCiAgICArDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0eShjLnN5bXNbIk5P
X1BST01QVCJdLCAgICAgMCwgMCkNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1si
Qk9PTF9OIl0sICAgICAgICAwLCAwKQ0KICAgICsgICAgdmVyaWZ5X3Zpc2liaWxpdHkoYy5zeW1z
WyJCT09MX00iXSwgICAgICAgIDAsIDIpDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0eShjLnN5
bXNbIkJPT0xfTU9EIl0sICAgICAgMiwgMikNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMu
c3ltc1siQk9PTF9ZIl0sICAgICAgICAyLCAyKQ0KICAgICsgICAgdmVyaWZ5X3Zpc2liaWxpdHko
Yy5zeW1zWyJUUklTVEFURV9NIl0sICAgIDAsIDEpDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0
eShjLnN5bXNbIlRSSVNUQVRFX01PRCJdLCAgMiwgMSkNCiAgICArICAgIHZlcmlmeV92aXNpYmls
aXR5KGMuc3ltc1siVFJJU1RBVEVfWSJdLCAgICAyLCAyKQ0KICAgICsgICAgdmVyaWZ5X3Zpc2li
aWxpdHkoYy5zeW1zWyJCT09MX0lGX04iXSwgICAgIDAsIDApDQogICAgKyAgICB2ZXJpZnlfdmlz
aWJpbGl0eShjLnN5bXNbIkJPT0xfSUZfTSJdLCAgICAgMCwgMikNCiAgICArICAgIHZlcmlmeV92
aXNpYmlsaXR5KGMuc3ltc1siQk9PTF9JRl9ZIl0sICAgICAyLCAyKQ0KICAgICsgICAgdmVyaWZ5
X3Zpc2liaWxpdHkoYy5zeW1zWyJCT09MX01FTlVfTiJdLCAgIDAsIDApDQogICAgKyAgICB2ZXJp
ZnlfdmlzaWJpbGl0eShjLnN5bXNbIkJPT0xfTUVOVV9NIl0sICAgMCwgMikNCiAgICArICAgIHZl
cmlmeV92aXNpYmlsaXR5KGMuc3ltc1siQk9PTF9NRU5VX1kiXSwgICAyLCAyKQ0KICAgICsgICAg
dmVyaWZ5X3Zpc2liaWxpdHkoYy5zeW1zWyJCT09MX0NIT0lDRV9OIl0sIDAsIDApDQogICAgKw0K
ICAgICsgICAgIyBOb24tdHJpc3RhdGUgc3ltYm9scyBpbiB0cmlzdGF0ZSBjaG9pY2VzIGFyZSBv
bmx5IHZpc2libGUgaWYgdGhlIGNob2ljZQ0KICAgICsgICAgIyBpcyBpbiB5IG1vZGUNCiAgICAr
DQogICAgKyAgICAjIFRoZSBjaG9pY2UgY2FuJ3QgYmUgYnJvdWdodCB0byB5IG1vZGUgYmVjYXVz
ZSBvZiB0aGUgJ2lmIG0nDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0eShjLnN5bXNbIkJPT0xf
Q0hPSUNFX00iXSwgMCwgMCkNCiAgICArICAgIGMuc3ltc1siQk9PTF9DSE9JQ0VfTSJdLmNob2lj
ZS5zZXRfdmFsdWUoMikNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1siQk9PTF9D
SE9JQ0VfTSJdLCAwLCAwKQ0KICAgICsNCiAgICArICAgICMgVGhlIGNob2ljZSBnZXRzIHkgbW9k
ZSBvbmx5IHdoZW4gcnVubmluZyB3aXRob3V0IG1vZHVsZXMsIGJlY2F1c2UgaXQNCiAgICArICAg
ICMgZGVmYXVsdHMgdG8gbSBtb2RlDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0eShjLnN5bXNb
IkJPT0xfQ0hPSUNFX1kiXSwgMiwgMCkNCiAgICArICAgIGMuc3ltc1siQk9PTF9DSE9JQ0VfWSJd
LmNob2ljZS5zZXRfdmFsdWUoMikNCiAgICArICAgICMgV2hlbiBzZXQgdG8geSBtb2RlLCB0aGUg
Y2hvaWNlIHN5bWJvbCBiZWNvbWVzIHZpc2libGUgYm90aCB3aXRoIGFuZA0KICAgICsgICAgIyB3
aXRob3V0IG1vZHVsZXMNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1siQk9PTF9D
SE9JQ0VfWSJdLCAyLCAyKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3lt
c1siVFJJU1RBVEVfSUZfTiJdLCAgICAgMCwgMCkNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5
KGMuc3ltc1siVFJJU1RBVEVfSUZfTSJdLCAgICAgMCwgMSkNCiAgICArICAgIHZlcmlmeV92aXNp
YmlsaXR5KGMuc3ltc1siVFJJU1RBVEVfSUZfWSJdLCAgICAgMiwgMikNCiAgICArICAgIHZlcmlm
eV92aXNpYmlsaXR5KGMuc3ltc1siVFJJU1RBVEVfTUVOVV9OIl0sICAgMCwgMCkNCiAgICArICAg
IHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1siVFJJU1RBVEVfTUVOVV9NIl0sICAgMCwgMSkNCiAg
ICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1siVFJJU1RBVEVfTUVOVV9ZIl0sICAgMiwg
MikNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1siVFJJU1RBVEVfQ0hPSUNFX04i
XSwgMCwgMCkNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1siVFJJU1RBVEVfQ0hP
SUNFX00iXSwgMCwgMSkNCiAgICArICAgIHZlcmlmeV92aXNpYmlsaXR5KGMuc3ltc1siVFJJU1RB
VEVfQ0hPSUNFX1kiXSwgMiwgMikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0eShj
Lm5hbWVkX2Nob2ljZXNbIkJPT0xfQ0hPSUNFX04iXSwgICAgIDAsIDApDQogICAgKyAgICB2ZXJp
ZnlfdmlzaWJpbGl0eShjLm5hbWVkX2Nob2ljZXNbIkJPT0xfQ0hPSUNFX00iXSwgICAgIDAsIDIp
DQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0eShjLm5hbWVkX2Nob2ljZXNbIkJPT0xfQ0hPSUNF
X1kiXSwgICAgIDIsIDIpDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0eShjLm5hbWVkX2Nob2lj
ZXNbIlRSSVNUQVRFX0NIT0lDRV9OIl0sIDAsIDApDQogICAgKyAgICB2ZXJpZnlfdmlzaWJpbGl0
eShjLm5hbWVkX2Nob2ljZXNbIlRSSVNUQVRFX0NIT0lDRV9NIl0sIDAsIDEpDQogICAgKyAgICB2
ZXJpZnlfdmlzaWJpbGl0eShjLm5hbWVkX2Nob2ljZXNbIlRSSVNUQVRFX0NIT0lDRV9ZIl0sIDIs
IDIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3Zpc2liaWxpdHkoYy5uYW1lZF9jaG9pY2VzWyJU
UklTVEFURV9DSE9JQ0VfSUZfTV9BTkRfWSJdLCAgIDAsIDEpDQogICAgKyAgICB2ZXJpZnlfdmlz
aWJpbGl0eShjLm5hbWVkX2Nob2ljZXNbIlRSSVNUQVRFX0NIT0lDRV9NRU5VX05fQU5EX1kiXSwg
MCwgMCkNCiAgICArDQogICAgKyAgICAjIFZlcmlmeSB0aGF0ICd2aXNpYmxlIGlmJyB2aXNpYmls
aXR5IGdldHMgcHJvcGFnYXRlZCB0byBwcm9tcHRzDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3Zp
c2liaWxpdHkoYy5zeW1zWyJWSVNJQkxFX0lGX04iXSwgMCwgMCkNCiAgICArICAgIHZlcmlmeV92
aXNpYmlsaXR5KGMuc3ltc1siVklTSUJMRV9JRl9NIl0sIDAsIDEpDQogICAgKyAgICB2ZXJpZnlf
dmlzaWJpbGl0eShjLnN5bXNbIlZJU0lCTEVfSUZfWSJdLCAyLCAyKQ0KICAgICsgICAgdmVyaWZ5
X3Zpc2liaWxpdHkoYy5zeW1zWyJWSVNJQkxFX0lGX01fMiJdLCAwLCAxKQ0KICAgICsNCiAgICAr
ICAgICMgVmVyaWZ5IHRoYXQgc3RyaW5nL2ludC9oZXggc3ltYm9scyB3aXRoIG0gdmlzaWJpbGl0
eSBhY2NlcHQgYSB1c2VyIHZhbHVlDQogICAgKw0KICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnko
IlNUUklOR19tIiwgImZvbyBiYXIiKQ0KICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnkoIklOVF9t
IiwgIjEyMyIpDQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeSgiSEVYX20iLCAiMHgxMjMiKQ0K
ICAgICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyAuYXNzaWduYWJsZSIpDQogICAg
Kw0KICAgICsgICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvS2Fzc2lnbmFibGUiKQ0K
ICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfYXNzaWduYWJsZV9pbXAoaXRlbSwgYXNzaWduYWJs
ZV9ub19tb2R1bGVzLCBhc3NpZ25hYmxlX21vZHVsZXMpOg0KICAgICsgICAgICAgICMgVmVyaWZp
ZXMgdGhlIGFzc2lnbmFibGUgdmFsdWVzIGZvciAnaXRlbScsIHdpdGggYW5kIHdpdGhvdXQgbW9k
dWxlcy4NCiAgICArDQogICAgKyAgICAgICAgZm9yIG1vZHVsZXNfdmFsLCBhc3NpZ25hYmxlIGlu
ICgwLCBhc3NpZ25hYmxlX25vX21vZHVsZXMpLCBcDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgyLCBhc3NpZ25hYmxlX21vZHVsZXMpOg0KICAgICsNCiAgICAr
ICAgICAgICAgICAgYy5tb2R1bGVzLnNldF92YWx1ZShtb2R1bGVzX3ZhbCkNCiAgICArICAgICAg
ICAgICAgbW9kdWxlX21zZyA9ICJ3aXRob3V0IG1vZHVsZXMiIGlmIG1vZHVsZXNfdmFsID09IDAg
ZWxzZSBcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAid2l0aCBtb2R1bGVzIg0KICAg
ICsNCiAgICArICAgICAgICAgICAgdmVyaWZ5KGl0ZW0uYXNzaWduYWJsZSA9PSBhc3NpZ25hYmxl
LA0KICAgICsgICAgICAgICAgICAgICAgICAgIkluY29ycmVjdCBhc3NpZ25hYmxlIHZhbHVlcyBm
b3Ige30ge30uIFNob3VsZCBiZSB7fSwgIg0KICAgICsgICAgICAgICAgICAgICAgICAgIndhcyB7
fS4iDQogICAgKyAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGl0ZW0ubmFtZSwgbW9kdWxlX21z
ZywgYXNzaWduYWJsZSwgaXRlbS5hc3NpZ25hYmxlKSkNCiAgICArDQogICAgKyAgICAgICAgICAg
ICMgVmVyaWZ5IHRoYXQgdGhlIHZhbHVlcyBjYW4gYWN0dWFsbHkgYmUgYXNzaWduZWQgdG9vDQog
ICAgKw0KICAgICsgICAgICAgICAgICBmb3IgdmFsIGluIGl0ZW0uYXNzaWduYWJsZToNCiAgICAr
ICAgICAgICAgICAgICAgIGl0ZW0uc2V0X3ZhbHVlKHZhbCkNCiAgICArICAgICAgICAgICAgICAg
IHZlcmlmeShpdGVtLnRyaV92YWx1ZSA9PSB2YWwsDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgIlVuYWJsZSB0byBzZXQge30gdG8ge30ge30sIGV2ZW4gdGhvdWdoIGl0IHdhcyBpbiAiDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgICAgIi5hc3NpZ25hYmxlIi5mb3JtYXQoaXRlbS5uYW1l
LCB2YWwsIG1vZHVsZV9tc2cpKQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfYXNzaWduYWJs
ZShzeW1fbmFtZSwgYXNzaWduYWJsZV9ub19tb2R1bGVzLCBhc3NpZ25hYmxlX21vZHVsZXMpOg0K
ICAgICsgICAgICAgIHZlcmlmeV9hc3NpZ25hYmxlX2ltcChjLnN5bXNbc3ltX25hbWVdLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25hYmxlX25vX21vZHVsZXMsDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbmFibGVfbW9kdWxlcykNCiAg
ICArDQogICAgKyAgICBkZWYgdmVyaWZ5X2NvbnN0X3VuYXNzaWduYWJsZShzeW1fbmFtZSk6DQog
ICAgKyAgICAgICAgdmVyaWZ5X2Fzc2lnbmFibGVfaW1wKGMuY29uc3Rfc3ltc1tzeW1fbmFtZV0s
ICgpLCAoKSkNCiAgICArDQogICAgKyAgICAjIFRoaW5ncyB0aGF0IHNob3VsZG4ndCBiZSAuYXNz
aWduYWJsZQ0KICAgICsgICAgdmVyaWZ5X2NvbnN0X3VuYXNzaWduYWJsZSgibiIpDQogICAgKyAg
ICB2ZXJpZnlfY29uc3RfdW5hc3NpZ25hYmxlKCJtIikNCiAgICArICAgIHZlcmlmeV9jb25zdF91
bmFzc2lnbmFibGUoInkiKQ0KICAgICsgICAgdmVyaWZ5X2NvbnN0X3VuYXNzaWduYWJsZSgiY29u
c3QiKQ0KICAgICsgICAgdmVyaWZ5X2Fzc2lnbmFibGUoIlVOREVGSU5FRCIsICgpLCAoKSkNCiAg
ICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJOT19QUk9NUFQiLCAoKSwgKCkpDQogICAgKyAgICB2
ZXJpZnlfYXNzaWduYWJsZSgiU1RSSU5HIiwgKCksICgpKQ0KICAgICsgICAgdmVyaWZ5X2Fzc2ln
bmFibGUoIklOVCIsICgpLCAoKSkNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJIRVgiLCAo
KSwgKCkpDQogICAgKw0KICAgICsgICAgIyBOb24tc2VsZWN0ZWQgc3ltYm9scw0KICAgICsgICAg
dmVyaWZ5X2Fzc2lnbmFibGUoIllfVklTX0JPT0wiLCAoMCwgMiksICgwLCAgICAyKSkNCiAgICAr
ICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJNX1ZJU19CT09MIiwgKCAgICApLCAoMCwgICAgMikpICAj
IFZpcy4gcHJvbW90ZWQNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJOX1ZJU19CT09MIiwg
KCAgICApLCAoICAgICAgICkpDQogICAgKyAgICB2ZXJpZnlfYXNzaWduYWJsZSgiWV9WSVNfVFJJ
IiwgICgwLCAyKSwgKDAsIDEsIDIpKQ0KICAgICsgICAgdmVyaWZ5X2Fzc2lnbmFibGUoIk1fVklT
X1RSSSIsICAoICAgICksICgwLCAxICAgKSkNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJO
X1ZJU19UUkkiLCAgKCAgICApLCAoICAgICAgICkpDQogICAgKw0KICAgICsgICAgIyBTeW1ib2xz
IHNlbGVjdGVkIHRvIHkNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJZX1NFTF9ZX1ZJU19C
T09MIiwgKDIsKSwgKDIsKSkNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJZX1NFTF9NX1ZJ
U19CT09MIiwgKCAgKSwgKDIsKSkgICMgVmlzLiBwcm9tb3RlZA0KICAgICsgICAgdmVyaWZ5X2Fz
c2lnbmFibGUoIllfU0VMX05fVklTX0JPT0wiLCAoICApLCAoICApKQ0KICAgICsgICAgdmVyaWZ5
X2Fzc2lnbmFibGUoIllfU0VMX1lfVklTX1RSSSIsICAoMiwpLCAoMiwpKQ0KICAgICsgICAgdmVy
aWZ5X2Fzc2lnbmFibGUoIllfU0VMX01fVklTX1RSSSIsICAoICApLCAoMiwpKQ0KICAgICsgICAg
dmVyaWZ5X2Fzc2lnbmFibGUoIllfU0VMX05fVklTX1RSSSIsICAoICApLCAoICApKQ0KICAgICsN
CiAgICArICAgICMgU3ltYm9scyBzZWxlY3RlZCB0byBtDQogICAgKyAgICB2ZXJpZnlfYXNzaWdu
YWJsZSgiTV9TRUxfWV9WSVNfQk9PTCIsICgyLCksICggICAyLCkpICAjIFZhbHVlIHByb21vdGVk
DQogICAgKyAgICB2ZXJpZnlfYXNzaWduYWJsZSgiTV9TRUxfTV9WSVNfQk9PTCIsICggICksICgg
ICAyLCkpICAjIFZpcy4vdmFsdWUgcHJvbW90ZWQNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxl
KCJNX1NFTF9OX1ZJU19CT09MIiwgKCAgKSwgKCAgICAgKSkNCiAgICArICAgIHZlcmlmeV9hc3Np
Z25hYmxlKCJNX1NFTF9ZX1ZJU19UUkkiLCAgKDIsKSwgKDEsIDIgKSkNCiAgICArICAgIHZlcmlm
eV9hc3NpZ25hYmxlKCJNX1NFTF9NX1ZJU19UUkkiLCAgKCAgKSwgKDEsICAgKSkNCiAgICArICAg
IHZlcmlmeV9hc3NpZ25hYmxlKCJNX1NFTF9OX1ZJU19UUkkiLCAgKCAgKSwgKCAgICAgKSkNCiAg
ICArDQogICAgKyAgICAjIFN5bWJvbHMgaW1wbGllZCB0byB5DQogICAgKyAgICB2ZXJpZnlfYXNz
aWduYWJsZSgiWV9JTVBfWV9WSVNfQk9PTCIsICgwLCAyKSwgKDAsIDIpKQ0KICAgICsgICAgdmVy
aWZ5X2Fzc2lnbmFibGUoIllfSU1QX01fVklTX0JPT0wiLCAoICAgICksICgwLCAyKSkgICMgVmlz
LiBwcm9tb3RlZA0KICAgICsgICAgdmVyaWZ5X2Fzc2lnbmFibGUoIllfSU1QX05fVklTX0JPT0wi
LCAoICAgICksICggICAgKSkNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJZX0lNUF9ZX1ZJ
U19UUkkiLCAgKDAsIDIpLCAoMCwgMikpICAjIG0gcmVtb3ZlZCBieSBpbXBseQ0KICAgICsgICAg
dmVyaWZ5X2Fzc2lnbmFibGUoIllfSU1QX01fVklTX1RSSSIsICAoICAgICksICgwLCAyKSkgICMg
bSBwcm9tb3RlZCB0byB5IGJ5IGltcGx5DQogICAgKyAgICB2ZXJpZnlfYXNzaWduYWJsZSgiWV9J
TVBfTl9WSVNfVFJJIiwgICggICAgKSwgKCAgICApKQ0KICAgICsNCiAgICArICAgICMgU3ltYm9s
cyBpbXBsaWVkIHRvIG0gKG5ldmVyIGFmZmVjdHMgYXNzaWduYWJsZSB2YWx1ZXMpDQogICAgKyAg
ICB2ZXJpZnlfYXNzaWduYWJsZSgiTV9JTVBfWV9WSVNfQk9PTCIsICgwLCAyKSwgKDAsICAgIDIp
KQ0KICAgICsgICAgdmVyaWZ5X2Fzc2lnbmFibGUoIk1fSU1QX01fVklTX0JPT0wiLCAoICAgICks
ICgwLCAgICAyKSkgICMgVmlzLiBwcm9tb3RlZA0KICAgICsgICAgdmVyaWZ5X2Fzc2lnbmFibGUo
Ik1fSU1QX05fVklTX0JPT0wiLCAoICAgICksICggICAgICAgKSkNCiAgICArICAgIHZlcmlmeV9h
c3NpZ25hYmxlKCJNX0lNUF9ZX1ZJU19UUkkiLCAgKDAsIDIpLCAoMCwgMSwgMikpDQogICAgKyAg
ICB2ZXJpZnlfYXNzaWduYWJsZSgiTV9JTVBfTV9WSVNfVFJJIiwgICggICAgKSwgKDAsIDEgICAp
KQ0KICAgICsgICAgdmVyaWZ5X2Fzc2lnbmFibGUoIk1fSU1QX05fVklTX1RSSSIsICAoICAgICks
ICggICAgICAgKSkNCiAgICArDQogICAgKyAgICAjIFN5bWJvbHMgaW4geS1tb2RlIGNob2ljZQ0K
ICAgICsgICAgdmVyaWZ5X2Fzc2lnbmFibGUoIllfQ0hPSUNFX0JPT0wiLCAgICAgICAgICAgKDIs
KSwgKDIsKSkNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJZX0NIT0lDRV9UUklTVEFURSIs
ICAgICAgICgyLCksICgyLCkpDQogICAgKyAgICB2ZXJpZnlfYXNzaWduYWJsZSgiWV9DSE9JQ0Vf
Tl9WSVNfVFJJU1RBVEUiLCAoICApLCAoICApKQ0KICAgICsNCiAgICArICAgICMgU3ltYm9scyBp
biBtL3ktbW9kZSBjaG9pY2UsIHN0YXJ0aW5nIG91dCBpbiBtIG1vZGUsIG9yIHkgbW9kZSB3aGVu
DQogICAgKyAgICAjIHJ1bm5pbmcgd2l0aG91dCBtb2R1bGVzDQogICAgKyAgICB2ZXJpZnlfYXNz
aWduYWJsZSgiTVlfQ0hPSUNFX0JPT0wiLCAgICAgICAgICAgKDIsKSwgKCAgICApKQ0KICAgICsg
ICAgdmVyaWZ5X2Fzc2lnbmFibGUoIk1ZX0NIT0lDRV9UUklTVEFURSIsICAgICAgICgyLCksICgw
LCAxKSkNCiAgICArICAgIHZlcmlmeV9hc3NpZ25hYmxlKCJNWV9DSE9JQ0VfTl9WSVNfVFJJU1RB
VEUiLCAoICApLCAoICAgICkpDQogICAgKw0KICAgICsgICAgYy5uYW1lZF9jaG9pY2VzWyJNWV9D
SE9JQ0UiXS5zZXRfdmFsdWUoMikNCiAgICArDQogICAgKyAgICAjIFN5bWJvbHMgaW4gbS95LW1v
ZGUgY2hvaWNlLCBub3cgaW4geSBtb2RlDQogICAgKyAgICB2ZXJpZnlfYXNzaWduYWJsZSgiTVlf
Q0hPSUNFX0JPT0wiLCAgICAgICAgICAgKDIsKSwgKDIsKSkNCiAgICArICAgIHZlcmlmeV9hc3Np
Z25hYmxlKCJNWV9DSE9JQ0VfVFJJU1RBVEUiLCAgICAgICAoMiwpLCAoMiwpKQ0KICAgICsgICAg
dmVyaWZ5X2Fzc2lnbmFibGUoIk1ZX0NIT0lDRV9OX1ZJU19UUklTVEFURSIsICggICksICggICkp
DQogICAgKw0KICAgICsgICAgZGVmIHZlcmlmeV9jaG9pY2VfYXNzaWduYWJsZShjaG9pY2VfbmFt
ZSwgYXNzaWduYWJsZV9ub19tb2R1bGVzLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhc3NpZ25hYmxlX21vZHVsZXMpOg0KICAgICsgICAgICAgIHZlcmlmeV9hc3NpZ25h
YmxlX2ltcChjLm5hbWVkX2Nob2ljZXNbY2hvaWNlX25hbWVdLA0KICAgICsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc3NpZ25hYmxlX25vX21vZHVsZXMsDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFzc2lnbmFibGVfbW9kdWxlcykNCiAgICArDQogICAgKyAgICAj
IENob2ljZXMgd2l0aCB2YXJpb3VzIHBvc3NpYmxlIG1vZGVzDQogICAgKyAgICB2ZXJpZnlfY2hv
aWNlX2Fzc2lnbmFibGUoIllfQ0hPSUNFIiwgICAoMiwgICksICggICAgICAyLCkpDQogICAgKyAg
ICB2ZXJpZnlfY2hvaWNlX2Fzc2lnbmFibGUoIk1ZX0NIT0lDRSIsICAoMiwgICksICggICAxLCAy
ICkpDQogICAgKyAgICB2ZXJpZnlfY2hvaWNlX2Fzc2lnbmFibGUoIk5NWV9DSE9JQ0UiLCAoMCwg
MiksICgwLCAxLCAyICkpDQogICAgKyAgICB2ZXJpZnlfY2hvaWNlX2Fzc2lnbmFibGUoIk5ZX0NI
T0lDRSIsICAoMCwgMiksICgwLCAgICAyICkpDQogICAgKyAgICB2ZXJpZnlfY2hvaWNlX2Fzc2ln
bmFibGUoIk5NX0NIT0lDRSIsICAoICAgICksICgwLCAxICAgICkpDQogICAgKyAgICB2ZXJpZnlf
Y2hvaWNlX2Fzc2lnbmFibGUoIk1fQ0hPSUNFIiwgICAoICAgICksICggICAxLCAgICkpDQogICAg
KyAgICB2ZXJpZnlfY2hvaWNlX2Fzc2lnbmFibGUoIk5fQ0hPSUNFIiwgICAoICAgICksICggICAg
ICAgICkpDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIG9iamVjdCByZWxh
dGlvbnMiKQ0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL0ty
ZWxhdGlvbiIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5KGMuc3ltc1siQSJdLm5vZGVzWzBdLnBh
cmVudCBpcyBjLnRvcF9ub2RlLA0KICAgICsgICAgICAgICAgICJBJ3MgcGFyZW50IHNob3VsZCBi
ZSB0aGUgdG9wIG5vZGUiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeShjLnN5bXNbIkIiXS5ub2Rl
c1swXS5wYXJlbnQuaXRlbSBpcyBjLm5hbWVkX2Nob2ljZXNbIkNIT0lDRV8xIl0sDQogICAgKyAg
ICAgICAgICAgIkIncyBwYXJlbnQgc2hvdWxkIGJlIHRoZSBmaXJzdCBjaG9pY2UiKQ0KICAgICsN
CiAgICArICAgIHZlcmlmeShjLnN5bXNbIkMiXS5ub2Rlc1swXS5wYXJlbnQuaXRlbSBpcyBjLnN5
bXNbIkIiXSwNCiAgICArICAgICAgICAgICAiQydzIHBhcmVudCBzaG91bGQgYmUgQiAoZHVlIHRv
IGF1dG8gbWVudXMpIikNCiAgICArDQogICAgKyAgICB2ZXJpZnkoYy5zeW1zWyJFIl0ubm9kZXNb
MF0ucGFyZW50Lml0ZW0gPT0gTUVOVSwNCiAgICArICAgICAgICAgICAiRSdzIHBhcmVudCBzaG91
bGQgYmUgYSBtZW51IikNCiAgICArDQogICAgKyAgICB2ZXJpZnkoYy5zeW1zWyJFIl0ubm9kZXNb
MF0ucGFyZW50LnBhcmVudCBpcyBjLnRvcF9ub2RlLA0KICAgICsgICAgICAgICAgICJFJ3MgZ3Jh
bmRwYXJlbnQgc2hvdWxkIGJlIHRoZSB0b3Agbm9kZSIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5
KGMuc3ltc1siRyJdLm5vZGVzWzBdLnBhcmVudC5pdGVtIGlzIGMubmFtZWRfY2hvaWNlc1siQ0hP
SUNFXzIiXSwNCiAgICArICAgICAgICAgICAiRydzIHBhcmVudCBzaG91bGQgYmUgdGhlIHNlY29u
ZCBjaG9pY2UiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeShjLnN5bXNbIkciXS5ub2Rlc1swXS5w
YXJlbnQucGFyZW50Lml0ZW0gPT0gTUVOVSwNCiAgICArICAgICAgICAgICAiRydzIGdyYW5kcGFy
ZW50IHNob3VsZCBiZSBhIG1lbnUiKQ0KICAgICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVz
dGluZyBoZXgvaW50IHJhbmdlcyIpDQogICAgKw0KICAgICsgICAgYyA9IEtjb25maWcoIktjb25m
aWdsaWIvdGVzdHMvS3JhbmdlIiwgd2Fybj1GYWxzZSkNCiAgICArDQogICAgKyAgICBmb3Igc3lt
X25hbWUgaW4gIkhFWF9OT19SQU5HRSIsICJJTlRfTk9fUkFOR0UiLCAiSEVYXzQwIiwgIklOVF80
MCI6DQogICAgKyAgICAgICAgc3ltID0gYy5zeW1zW3N5bV9uYW1lXQ0KICAgICsgICAgICAgIHZl
cmlmeShub3Qgc3ltLnJhbmdlcywNCiAgICArICAgICAgICAgICAgICAgInt9IHNob3VsZCBub3Qg
aGF2ZSByYW5nZXMiLmZvcm1hdChzeW1fbmFtZSkpDQogICAgKw0KICAgICsgICAgZm9yIHN5bV9u
YW1lIGluICJIRVhfQUxMX1JBTkdFU19ESVNBQkxFRCIsICJJTlRfQUxMX1JBTkdFU19ESVNBQkxF
RCIsIFwNCiAgICArICAgICAgICAgICAgICAgICAgICAiSEVYX1JBTkdFXzEwXzIwX0xPV19ERUZB
VUxUIiwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICJJTlRfUkFOR0VfMTBfMjBfTE9XX0RF
RkFVTFQiOg0KICAgICsgICAgICAgIHN5bSA9IGMuc3ltc1tzeW1fbmFtZV0NCiAgICArICAgICAg
ICB2ZXJpZnkoc3ltLnJhbmdlcywgInt9IHNob3VsZCBoYXZlIHJhbmdlcyIuZm9ybWF0KHN5bV9u
YW1lKSkNCiAgICArDQogICAgKyAgICAjIGhleC9pbnQgc3ltYm9scyB3aXRob3V0IGRlZmF1bHRz
IHNob3VsZCBnZXQgbm8gZGVmYXVsdCB2YWx1ZQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJIRVhf
Tk9fUkFOR0UiLCAiIikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU5UX05PX1JBTkdFIiwgIiIp
DQogICAgKyAgICAjIEFuZCBuZWl0aGVyIGlmIGFsbCByYW5nZXMgYXJlIGRpc2FibGVkDQogICAg
KyAgICB2ZXJpZnlfdmFsdWUoIkhFWF9BTExfUkFOR0VTX0RJU0FCTEVEIiwgIiIpDQogICAgKyAg
ICB2ZXJpZnlfdmFsdWUoIklOVF9BTExfUkFOR0VTX0RJU0FCTEVEIiwgIiIpDQogICAgKyAgICAj
IE1ha2Ugc3VyZSB0aGV5IGFyZSBhc3NpZ25hYmxlIHRob3VnaCwgYW5kIHRlc3QgdGhhdCB0aGUg
Zm9ybSBvZiB0aGUgdXNlcg0KICAgICsgICAgIyB2YWx1ZSBpcyByZWZsZWN0ZWQgaW4gdGhlIHZh
bHVlIGZvciBoZXggc3ltYm9scw0KICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnkoIkhFWF9OT19S
QU5HRSIsICIweDEyMyIpDQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeSgiSEVYX05PX1JBTkdF
IiwgIjEyMyIpDQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeSgiSU5UX05PX1JBTkdFIiwgIjEy
MyIpDQogICAgKw0KICAgICsgICAgIyBEZWZhdWx0cyBvdXRzaWRlIG9mIHRoZSB2YWxpZCByYW5n
ZSBzaG91bGQgYmUgY2xhbXBlZA0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJIRVhfUkFOR0VfMTBf
MjBfTE9XX0RFRkFVTFQiLCAiMHgxMCIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIkhFWF9SQU5H
RV8xMF8yMF9ISUdIX0RFRkFVTFQiLCAiMHgyMCIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIklO
VF9SQU5HRV8xMF8yMF9MT1dfREVGQVVMVCIsICIxMCIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUo
IklOVF9SQU5HRV8xMF8yMF9ISUdIX0RFRkFVTFQiLCAiMjAiKQ0KICAgICsgICAgIyBEZWZhdWx0
cyBpbnNpZGUgdGhlIHZhbGlkIHJhbmdlIHNob3VsZCBiZSBwcmVzZXJ2ZWQuIEZvciBoZXggc3lt
Ym9scywNCiAgICArICAgICMgdGhleSBzaG91bGQgYWRkaXRpb25hbGx5IHVzZSB0aGUgc2FtZSBm
b3JtIGFzIGluIHRoZSBhc3NpZ25tZW50Lg0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJIRVhfUkFO
R0VfMTBfMjBfT0tfREVGQVVMVCIsICIweDE1IikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSEVY
X1JBTkdFXzEwXzIwX09LX0RFRkFVTFRfQUxURVJOQVRFIiwgIjE1IikNCiAgICArICAgIHZlcmlm
eV92YWx1ZSgiSU5UX1JBTkdFXzEwXzIwX09LX0RFRkFVTFQiLCAiMTUiKQ0KICAgICsNCiAgICAr
ICAgICMgaGV4L2ludCBzeW1ib2xzIHdpdGggbm8gZGVmYXVsdHMgYnV0IHZhbGlkIHJhbmdlcyBz
aG91bGQgZGVmYXVsdCB0byB0aGUNCiAgICArICAgICMgbG93ZXIgZW5kIG9mIHRoZSByYW5nZSBp
ZiBpdCdzID4gMA0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJIRVhfUkFOR0VfMTBfMjAiLCAiMHgx
MCIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIkhFWF9SQU5HRV8wXzEwIiwgIiIpDQogICAgKyAg
ICB2ZXJpZnlfdmFsdWUoIklOVF9SQU5HRV8xMF8yMCIsICIxMCIpDQogICAgKyAgICB2ZXJpZnlf
dmFsdWUoIklOVF9SQU5HRV8wXzEwIiwgIiIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIklOVF9S
QU5HRV9ORUdfMTBfMTAiLCAiIikNCiAgICArDQogICAgKyAgICAjIFVzZXIgdmFsdWVzIGFuZCBk
ZXBlbmRlbnQgcmFuZ2VzDQogICAgKw0KICAgICsgICAgIyBBdm9pZCB3YXJuaW5ncyBmb3IgYXNz
aWduaW5nIHZhbHVlcyBvdXRzaWRlIHRoZSBhY3RpdmUgcmFuZ2UNCiAgICArICAgIGMud2FybiA9
IEZhbHNlDQogICAgKw0KICAgICsgICAgZGVmIHZlcmlmeV9yYW5nZShzeW1fbmFtZSwgbG93LCBo
aWdoLCBkZWZhdWx0KToNCiAgICArICAgICAgICAjIFZlcmlmaWVzIHRoYXQgYWxsIHZhbHVlcyBp
biB0aGUgcmFuZ2UgJ2xvdyctJ2hpZ2gnIGNhbiBiZSBhc3NpZ25lZCwNCiAgICArICAgICAgICAj
IGFuZCB0aGF0IGFzc2lnbmluZyB2YWx1ZXMgb3V0c2lkZSB0aGUgcmFuZ2UgcmV2ZXJ0cyB0aGUg
dmFsdWUgYmFjayB0bw0KICAgICsgICAgICAgICMgJ2RlZmF1bHQnIChOb25lIGlmIGl0IHNob3Vs
ZCByZXZlcnQgYmFjayB0byAiIikuDQogICAgKw0KICAgICsgICAgICAgIGlzX2hleCA9IChjLnN5
bXNbc3ltX25hbWVdLnR5cGUgPT0gSEVYKQ0KICAgICsNCiAgICArICAgICAgICBmb3IgaSBpbiBy
YW5nZShsb3csIGhpZ2ggKyAxKToNCiAgICArICAgICAgICAgICAgYXNzaWduX2FuZF92ZXJpZnlf
dXNlcl92YWx1ZShzeW1fbmFtZSwgc3RyKGkpLCBzdHIoaSksIFRydWUpDQogICAgKyAgICAgICAg
ICAgIGlmIGlzX2hleDoNCiAgICArICAgICAgICAgICAgICAgICMgVGhlIGZvcm0gb2YgdGhlIHVz
ZXIgdmFsdWUgc2hvdWxkIGJlIHByZXNlcnZlZCBmb3IgaGV4DQogICAgKyAgICAgICAgICAgICAg
ICAjIHN5bWJvbHMNCiAgICArICAgICAgICAgICAgICAgIGFzc2lnbl9hbmRfdmVyaWZ5X3VzZXJf
dmFsdWUoc3ltX25hbWUsIGhleChpKSwgaGV4KGkpLCBUcnVlKQ0KICAgICsNCiAgICArICAgICAg
ICAjIFZlcmlmeSB0aGF0IGFzc2lnbmluZyBhIHVzZXIgdmFsdWUganVzdCBvdXRzaWRlIHRoZSBy
YW5nZSBjYXVzZXMNCiAgICArICAgICAgICAjIGRlZmF1bHRzIHRvIGJlIHVzZWQNCiAgICArDQog
ICAgKyAgICAgICAgaWYgZGVmYXVsdCBpcyBOb25lOg0KICAgICsgICAgICAgICAgICBkZWZhdWx0
X3N0ciA9ICIiDQogICAgKyAgICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgZGVmYXVsdF9z
dHIgPSBoZXgoZGVmYXVsdCkgaWYgaXNfaGV4IGVsc2Ugc3RyKGRlZmF1bHQpDQogICAgKw0KICAg
ICsgICAgICAgIGlmIGlzX2hleDoNCiAgICArICAgICAgICAgICAgdG9vX2xvd19zdHIgPSBoZXgo
bG93IC0gMSkNCiAgICArICAgICAgICAgICAgdG9vX2hpZ2hfc3RyID0gaGV4KGhpZ2ggKyAxKQ0K
ICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAgIHRvb19sb3dfc3RyID0gc3RyKGxv
dyAtIDEpDQogICAgKyAgICAgICAgICAgIHRvb19oaWdoX3N0ciA9IHN0cihoaWdoICsgMSkNCiAg
ICArDQogICAgKyAgICAgICAgYXNzaWduX2FuZF92ZXJpZnlfdmFsdWUoc3ltX25hbWUsIHRvb19s
b3dfc3RyLCBkZWZhdWx0X3N0cikNCiAgICArICAgICAgICBhc3NpZ25fYW5kX3ZlcmlmeV92YWx1
ZShzeW1fbmFtZSwgdG9vX2hpZ2hfc3RyLCBkZWZhdWx0X3N0cikNCiAgICArDQogICAgKyAgICB2
ZXJpZnlfcmFuZ2UoIkhFWF9SQU5HRV8xMF8yMF9MT1dfREVGQVVMVCIsICAweDEwLCAweDIwLCAg
MHgxMCkNCiAgICArICAgIHZlcmlmeV9yYW5nZSgiSEVYX1JBTkdFXzEwXzIwX0hJR0hfREVGQVVM
VCIsIDB4MTAsIDB4MjAsICAweDIwKQ0KICAgICsgICAgdmVyaWZ5X3JhbmdlKCJIRVhfUkFOR0Vf
MTBfMjBfT0tfREVGQVVMVCIsICAgMHgxMCwgMHgyMCwgIDB4MTUpDQogICAgKw0KICAgICsgICAg
dmVyaWZ5X3JhbmdlKCJJTlRfUkFOR0VfMTBfMjBfTE9XX0RFRkFVTFQiLCAgMTAsICAgMjAsICAg
IDEwKQ0KICAgICsgICAgdmVyaWZ5X3JhbmdlKCJJTlRfUkFOR0VfMTBfMjBfSElHSF9ERUZBVUxU
IiwgMTAsICAgMjAsICAgIDIwKQ0KICAgICsgICAgdmVyaWZ5X3JhbmdlKCJJTlRfUkFOR0VfMTBf
MjBfT0tfREVGQVVMVCIsICAgMTAsICAgMjAsICAgIDE1KQ0KICAgICsNCiAgICArICAgIHZlcmlm
eV9yYW5nZSgiSEVYX1JBTkdFXzEwXzIwIiwgICAgICAgICAgICAgIDB4MTAsIDB4MjAsICAweDEw
KQ0KICAgICsNCiAgICArICAgIHZlcmlmeV9yYW5nZSgiSU5UX1JBTkdFXzEwXzIwIiwgICAgICAg
ICAgICAgIDEwLCAgMjAsICAgICAxMCkNCiAgICArICAgIHZlcmlmeV9yYW5nZSgiSU5UX1JBTkdF
XzBfMTAiLCAgICAgICAgICAgICAgIDAsICAgMTAsICAgICBOb25lKQ0KICAgICsgICAgdmVyaWZ5
X3JhbmdlKCJJTlRfUkFOR0VfTkVHXzEwXzEwIiwgICAgICAgICAgLTEwLCAxMCwgICAgIE5vbmUp
DQogICAgKw0KICAgICsgICAgIyBEZXBlbmRlbnQgcmFuZ2VzDQogICAgKw0KICAgICsgICAgdmVy
aWZ5X3ZhbHVlKCJIRVhfNDAiLCAiNDAiKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJJTlRfNDAi
LCAiNDAiKQ0KICAgICsNCiAgICArICAgIGMuc3ltc1siSEVYX1JBTkdFXzEwXzIwIl0udW5zZXRf
dmFsdWUoKQ0KICAgICsgICAgYy5zeW1zWyJJTlRfUkFOR0VfMTBfMjAiXS51bnNldF92YWx1ZSgp
DQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIkhFWF9SQU5HRV8xMF80MF9ERVBFTkRFTlQiLCAiMHgx
MCIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIklOVF9SQU5HRV8xMF80MF9ERVBFTkRFTlQiLCAi
MTAiKQ0KICAgICsgICAgYy5zeW1zWyJIRVhfUkFOR0VfMTBfMjAiXS5zZXRfdmFsdWUoIjE1IikN
CiAgICArICAgIGMuc3ltc1siSU5UX1JBTkdFXzEwXzIwIl0uc2V0X3ZhbHVlKCIxNSIpDQogICAg
KyAgICB2ZXJpZnlfdmFsdWUoIkhFWF9SQU5HRV8xMF80MF9ERVBFTkRFTlQiLCAiMHgxNSIpDQog
ICAgKyAgICB2ZXJpZnlfdmFsdWUoIklOVF9SQU5HRV8xMF80MF9ERVBFTkRFTlQiLCAiMTUiKQ0K
ICAgICsgICAgYy51bnNldF92YWx1ZXMoKQ0KICAgICsgICAgdmVyaWZ5X3JhbmdlKCJIRVhfUkFO
R0VfMTBfNDBfREVQRU5ERU5UIiwgMHgxMCwgMHg0MCwgIDB4MTApDQogICAgKyAgICB2ZXJpZnlf
cmFuZ2UoIklOVF9SQU5HRV8xMF80MF9ERVBFTkRFTlQiLCAxMCwgICA0MCwgICAgMTApDQogICAg
Kw0KICAgICsgICAgIyBSYW5nZXMgYW5kIHN5bWJvbHMgZGVmaW5lZCBpbiBtdWx0aXBsZSBsb2Nh
dGlvbnMNCiAgICArDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIklOQUNUSVZFX1JBTkdFIiwgIjIi
KQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJBQ1RJVkVfUkFOR0UiLCAiMSIpDQogICAgKw0KICAg
ICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIGRlZmNvbmZpZ19maWxlbmFtZSIpDQogICAgKw0K
ICAgICsgICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvZW1wdHkiKQ0KICAgICsgICAg
dmVyaWZ5KGMuZGVmY29uZmlnX2ZpbGVuYW1lIGlzIE5vbmUsDQogICAgKyAgICAgICAgICAgImRl
ZmNvbmZpZ19maWxlbmFtZSBzaG91bGQgYmUgTm9uZSB3aXRoIG5vIGRlZmNvbmZpZ19saXN0IHN5
bWJvbCIpDQogICAgKw0KICAgICsgICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvS2Rl
ZmNvbmZpZ19ub25leGlzdGVudCIpDQogICAgKyAgICB2ZXJpZnkoYy5kZWZjb25maWdfZmlsZW5h
bWUgaXMgTm9uZSwNCiAgICArICAgICAgICAgICAiZGVmY29uZmlnX2ZpbGVuYW1lIHNob3VsZCBi
ZSBOb25lIHdoZW4gbm9uZSBvZiB0aGUgZmlsZXMgaW4gdGhlICINCiAgICArICAgICAgICAgICAi
ZGVmY29uZmlnX2xpc3Qgc3ltYm9sIGV4aXN0IikNCiAgICArDQogICAgKyAgICAjIFJlZmVyZW5j
ZWQgaW4gS2RlZmNvbmZpZ19leGlzdGVudChfYnV0X24pDQogICAgKyAgICBvcy5lbnZpcm9uWyJG
T08iXSA9ICJkZWZjb25maWdfMiINCiAgICArDQogICAgKyAgICBjID0gS2NvbmZpZygiS2NvbmZp
Z2xpYi90ZXN0cy9LZGVmY29uZmlnX2V4aXN0ZW50X2J1dF9uIikNCiAgICArICAgIHZlcmlmeShj
LmRlZmNvbmZpZ19maWxlbmFtZSBpcyBOb25lLA0KICAgICsgICAgICAgICAgICJkZWZjb25maWdf
ZmlsZW5hbWUgc2hvdWxkIGJlIE5vbmUgd2hlbiB0aGUgY29uZGl0aW9uIGlzIG4gZm9yIGFsbCAi
DQogICAgKyAgICAgICAgICAgInRoZSBkZWZhdWx0cyIpDQogICAgKw0KICAgICsgICAgYyA9IEtj
b25maWcoIktjb25maWdsaWIvdGVzdHMvS2RlZmNvbmZpZ19leGlzdGVudCIpDQogICAgKyAgICB2
ZXJpZnkoYy5kZWZjb25maWdfZmlsZW5hbWUgPT0gIktjb25maWdsaWIvdGVzdHMvZGVmY29uZmln
XzIiLA0KICAgICsgICAgICAgICAgICJkZWZjb25maWdfZmlsZW5hbWUgc2hvdWxkIHJldHVybiB0
aGUgZXhpc3RpbmcgZmlsZSAiDQogICAgKyAgICAgICAgICAgIktjb25maWdsaWIvdGVzdHMvZGVm
Y29uZmlnXzIiKQ0KICAgICsNCiAgICArICAgICMgU2hvdWxkIGFsc28gbG9vayByZWxhdGl2ZSB0
byAkc3JjdHJlZSBpZiB0aGUgc3BlY2lmaWVkIGRlZmNvbmZpZyBpcyBhDQogICAgKyAgICAjIHJl
bGF0aXZlIHBhdGggYW5kIGNhbid0IGJlIG9wZW5lZA0KICAgICsNCiAgICArICAgIGMgPSBLY29u
ZmlnKCJLY29uZmlnbGliL3Rlc3RzL0tkZWZjb25maWdfc3JjdHJlZSIpDQogICAgKyAgICB2ZXJp
ZnkoYy5kZWZjb25maWdfZmlsZW5hbWUgPT0gIktjb25maWdsaWIvdGVzdHMvZGVmY29uZmlnXzIi
LA0KICAgICsgICAgICAgICAgICJkZWZjb25maWdfZmlsZW5hbWUgZ2F2ZSB3cm9uZyBmaWxlIHdp
dGggJHNyY3RyZWUgdW5zZXQiKQ0KICAgICsNCiAgICArICAgIG9zLmVudmlyb25bInNyY3RyZWUi
XSA9ICJLY29uZmlnbGliL3Rlc3RzIg0KICAgICsgICAgYyA9IEtjb25maWcoIktkZWZjb25maWdf
c3JjdHJlZSIpDQogICAgKyAgICB2ZXJpZnkoYy5kZWZjb25maWdfZmlsZW5hbWUgPT0gIktjb25m
aWdsaWIvdGVzdHMvc3ViL2RlZmNvbmZpZ19pbl9zdWIiLA0KICAgICsgICAgICAgICAgICJkZWZj
b25maWdfZmlsZW5hbWUgZ2F2ZSB3cm9uZyBmaWxlIHdpdGggJHNyY3RyZWUgc2V0IikNCiAgICAr
DQogICAgKyAgICBvcy5lbnZpcm9uLnBvcCgic3JjdHJlZSIsIE5vbmUpDQogICAgKw0KICAgICsN
CiAgICArICAgIHByaW50KCJUZXN0aW5nIG1haW5tZW51X3RleHQiKQ0KICAgICsNCiAgICArICAg
IGMgPSBLY29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL2VtcHR5IikNCiAgICArICAgIHZlcmlmeShj
Lm1haW5tZW51X3RleHQgPT0gIk1haW4gbWVudSIsDQogICAgKyAgICAgICAgICAgIkFuIGVtcHR5
IEtjb25maWcgc2hvdWxkIGdldCBhIGRlZmF1bHQgbWFpbiBtZW51IHByb21wdCIpDQogICAgKw0K
ICAgICsgICAgIyBFeHBhbmRlZCBpbiB0aGUgbWFpbm1lbnUgdGV4dA0KICAgICsgICAgb3MuZW52
aXJvblsiRk9PIl0gPSAiYmFyIGJheiINCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGli
L3Rlc3RzL0ttYWlubWVudSIpDQogICAgKyAgICB2ZXJpZnkoYy5tYWlubWVudV90ZXh0ID09ICIt
LS1iYXIgYmF6LS0tIiwNCiAgICArICAgICAgICAgICAiV3JvbmcgbWFpbm1lbnUgdGV4dCIpDQog
ICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIHVzZXJfdmFsdWUiKQ0KICAgICsN
CiAgICArICAgICMgUmVmZXJlbmNlcyB1bmRlZmluZWQgZW52LiB2YXIuIERpc2FibGUgd2Fybmlu
Z3MuDQogICAgKyAgICBjID0gS2NvbmZpZygiS2NvbmZpZ2xpYi90ZXN0cy9LbWlzYyIsIHdhcm49
RmFsc2UpDQogICAgKw0KICAgICsgICAgIyBBdm9pZCB3YXJuaW5ncyBmcm9tIGFzc2lnbmluZyBp
bnZhbGlkIHVzZXIgdmFsdWVzIGFuZCBhc3NpZ25pbmcgdXNlcg0KICAgICsgICAgIyB2YWx1ZXMg
dG8gc3ltYm9scyB3aXRob3V0IHByb21wdHMNCiAgICArICAgIGMud2FybiA9IEZhbHNlDQogICAg
Kw0KICAgICsgICAgc3ltcyA9IFtjLnN5bXNbbmFtZV0gZm9yIG5hbWUgaW4NCiAgICArICAgICAg
ICAgICAgKCJCT09MIiwgIlRSSVNUQVRFIiwgIlNUUklORyIsICJJTlQiLCAiSEVYIildDQogICAg
Kw0KICAgICsgICAgZm9yIHN5bSBpbiBzeW1zOg0KICAgICsgICAgICAgIHZlcmlmeShzeW0udXNl
cl92YWx1ZSBpcyBOb25lLA0KICAgICsgICAgICAgICAgICAgICAie30gc2hvdWxkIG5vdCBoYXZl
IGEgdXNlciB2YWx1ZSB0byBiZWdpbiB3aXRoIikNCiAgICArDQogICAgKyAgICAjIEFzc2lnbiB2
YWxpZCB2YWx1ZXMgZm9yIHRoZSB0eXBlcw0KICAgICsNCiAgICArICAgIGFzc2lnbl9hbmRfdmVy
aWZ5X3VzZXJfdmFsdWUoIkJPT0wiLCAwLCAwLCBUcnVlKQ0KICAgICsgICAgYXNzaWduX2FuZF92
ZXJpZnlfdXNlcl92YWx1ZSgiQk9PTCIsIDIsIDIsIFRydWUpDQogICAgKyAgICBhc3NpZ25fYW5k
X3ZlcmlmeV91c2VyX3ZhbHVlKCJUUklTVEFURSIsIDAsIDAsIFRydWUpDQogICAgKyAgICBhc3Np
Z25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVlKCJUUklTVEFURSIsIDEsIDEsIFRydWUpDQogICAgKyAg
ICBhc3NpZ25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVlKCJUUklTVEFURSIsIDIsIDIsIFRydWUpDQog
ICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVlKCJTVFJJTkciLCAiZm9vIGJhciIs
ICJmb28gYmFyIiwgVHJ1ZSkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5X3VzZXJfdmFsdWUo
IklOVCIsICIxMjMiLCAiMTIzIiwgVHJ1ZSkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5X3Vz
ZXJfdmFsdWUoIkhFWCIsICIweDEyMyIsICIweDEyMyIsIFRydWUpDQogICAgKw0KICAgICsgICAg
IyBBc3NpZ24gaW52YWxpZCB2YWx1ZXMgZm9yIHRoZSB0eXBlcy4gVGhleSBzaG91bGQgcmV0YWlu
IHRoZWlyIG9sZCB1c2VyDQogICAgKyAgICAjIHZhbHVlLg0KICAgICsNCiAgICArICAgIGFzc2ln
bl9hbmRfdmVyaWZ5X3VzZXJfdmFsdWUoIkJPT0wiLCAxLCAyLCBGYWxzZSkNCiAgICArICAgIGFz
c2lnbl9hbmRfdmVyaWZ5X3VzZXJfdmFsdWUoIkJPT0wiLCAiZm9vIiwgMiwgRmFsc2UpDQogICAg
KyAgICBhc3NpZ25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVlKCJCT09MIiwgIjEiLCAyLCBGYWxzZSkN
CiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5X3VzZXJfdmFsdWUoIlRSSVNUQVRFIiwgImZvbyIs
IDIsIEZhbHNlKQ0KICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnlfdXNlcl92YWx1ZSgiVFJJU1RB
VEUiLCAiMSIsIDIsIEZhbHNlKQ0KICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnlfdXNlcl92YWx1
ZSgiU1RSSU5HIiwgMCwgImZvbyBiYXIiLCBGYWxzZSkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVy
aWZ5X3VzZXJfdmFsdWUoIklOVCIsICJmb28iLCAiMTIzIiwgRmFsc2UpDQogICAgKyAgICBhc3Np
Z25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVlKCJJTlQiLCAwLCAiMTIzIiwgRmFsc2UpDQogICAgKyAg
ICBhc3NpZ25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVlKCJIRVgiLCAiZm9vIiwgIjB4MTIzIiwgRmFs
c2UpDQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeV91c2VyX3ZhbHVlKCJIRVgiLCAwLCAiMHgx
MjMiLCBGYWxzZSkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5X3VzZXJfdmFsdWUoIkhFWCIs
ICItMHgxIiwgIjB4MTIzIiwgRmFsc2UpDQogICAgKw0KICAgICsgICAgZm9yIHMgaW4gc3ltczoN
CiAgICArICAgICAgICBzLnVuc2V0X3ZhbHVlKCkNCiAgICArICAgICAgICB2ZXJpZnkocy51c2Vy
X3ZhbHVlIGlzIE5vbmUsDQogICAgKyAgICAgICAgICAgICAgICJ7fSBzaG91bGQgbm90IGhhdmUg
YSB1c2VyIHZhbHVlIGFmdGVyIGJlaW5nIHJlc2V0Ii4NCiAgICArICAgICAgICAgICAgICAgZm9y
bWF0KHMubmFtZSkpDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIGlzX21l
bnVjb25maWciKQ0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGliL3Rlc3Rz
L0ttZW51Y29uZmlnIikNCiAgICArDQogICAgKyAgICBmb3Igbm90X21lbnVjb25maWcgaW4gYy5z
eW1zWyJOT1RfTUVOVUNPTkZJR18xIl0ubm9kZXNbMF0sIFwNCiAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgICBjLnN5bXNbIk5PVF9NRU5VQ09ORklHXzIiXS5ub2Rlc1swXSwgXA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICAgIGMuc3ltc1siTUVOVUNPTkZJR19NVUxUSV9ERUYiXS5u
b2Rlc1swXSwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgIGMuc3ltc1siQ09NTUVO
VF9IT09LIl0ubm9kZXNbMF0ubmV4dDoNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5KG5vdCBu
b3RfbWVudWNvbmZpZy5pc19tZW51Y29uZmlnLA0KICAgICsgICAgICAgICAgICAgICAiJ3t9JyBz
aG91bGQgaGF2ZSBpc19tZW51Y29uZmlnIEZhbHNlIi5mb3JtYXQobm90X21lbnVjb25maWcpKQ0K
ICAgICsNCiAgICArICAgIGZvciBtZW51Y29uZmlnIGluIGMudG9wX25vZGUsIFwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAgIGMuc3ltc1siTUVOVUNPTkZJR18xIl0ubm9kZXNbMF0sIFwNCiAg
ICArICAgICAgICAgICAgICAgICAgICAgIGMuc3ltc1siTUVOVUNPTkZJR19NVUxUSV9ERUYiXS5u
b2Rlc1sxXSwgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgYy5zeW1zWyJNRU5VX0hPT0si
XS5ub2Rlc1swXS5uZXh0LCBcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICBjLnN5bXNbIkNI
T0lDRV9IT09LIl0ubm9kZXNbMF0ubmV4dDoNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5KG1l
bnVjb25maWcuaXNfbWVudWNvbmZpZywNCiAgICArICAgICAgICAgICAgICAgIid7fScgc2hvdWxk
IGhhdmUgaXNfbWVudWNvbmZpZyBUcnVlIi5mb3JtYXQobWVudWNvbmZpZykpDQogICAgKw0KICAg
ICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nICdvcHRpb24gZW52JyBzZW1hbnRpY3MiKQ0KICAg
ICsNCiAgICArICAgIG9zLmVudmlyb25bIkVOVl9WQVIiXSA9ICJFTlZfVkFSIHZhbHVlIg0KICAg
ICsNCiAgICArICAgICMgUmVmZXJlbmNlcyB1bmRlZmluZWQgZW52LiB2YXIuLCBzbyBkaXNhYmxl
IHdhcm5pbmdzDQogICAgKyAgICBjID0gS2NvbmZpZygiS2NvbmZpZ2xpYi90ZXN0cy9LbWlzYyIs
IHdhcm49RmFsc2UpDQogICAgKw0KICAgICsgICAgIyBWZXJpZnkgdGhhdCAnb3B0aW9uIGVudicg
aXMgdHJlYXRlZCBsaWtlIGEgZGVmYXVsdA0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJGUk9NX0VO
ViIsICJFTlZfVkFSIHZhbHVlIikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiRlJPTV9FTlZfTUlT
U0lORyIsICJtaXNzaW5nIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIkZST01fRU5W
X1dFSVJEIiwgIndlaXJkIikNCiAgICArDQogICAgKw0KICAgICsgICAgcHJpbnQoIlRlc3Rpbmcg
ZGVmaW5lZCB2cyB1bmRlZmluZWQgc3ltYm9scyIpDQogICAgKw0KICAgICsgICAgZm9yIG5hbWUg
aW4gIkEiLCAiQiIsICJDIiwgIkQiLCAiQk9PTCIsICJUUklTVEFURSIsICJTVFJJTkciLCAiSU5U
IiwgIkhFWCI6DQogICAgKyAgICAgICAgdmVyaWZ5KGMuc3ltc1tuYW1lXS5ub2RlcywNCiAgICAr
ICAgICAgICAgICAgICAgInt9IHNob3VsZCBiZSBkZWZpbmVkIi5mb3JtYXQobmFtZSkpDQogICAg
Kw0KICAgICsgICAgZm9yIG5hbWUgaW4gIk5PVF9ERUZJTkVEXzEiLCAiTk9UX0RFRklORURfMiIs
ICJOT1RfREVGSU5FRF8zIiwgXA0KICAgICsgICAgICAgICAgICAgICAgIk5PVF9ERUZJTkVEXzQi
Og0KICAgICsgICAgICAgIHN5bSA9IGMuc3ltc1tuYW1lXQ0KICAgICsgICAgICAgIHZlcmlmeShu
b3QgYy5zeW1zW25hbWVdLm5vZGVzLA0KICAgICsgICAgICAgICAgICAgICAie30gc2hvdWxkIG5v
dCBiZSBkZWZpbmVkIi5mb3JtYXQobmFtZSkpDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50
KCJUZXN0aW5nIFN5bWJvbC5jaG9pY2UiKQ0KICAgICsNCiAgICArICAgIGZvciBuYW1lIGluICJB
IiwgIkIiLCAiQyIsICJEIjoNCiAgICArICAgICAgICB2ZXJpZnkoYy5zeW1zW25hbWVdLmNob2lj
ZSBpcyBub3QgTm9uZSwNCiAgICArICAgICAgICAgICAgICAgInt9IHNob3VsZCBiZSBhIGNob2lj
ZSBzeW1ib2wiLmZvcm1hdChuYW1lKSkNCiAgICArDQogICAgKyAgICBmb3IgbmFtZSBpbiAiUTEi
LCAiUTIiLCAiUTMiLCAiQk9PTCIsICJUUklTVEFURSIsICJTVFJJTkciLCAiSU5UIiwgIkhFWCIs
IFwNCiAgICArICAgICAgICAgICAgICAgICJGUk9NX0VOViIsICJGUk9NX0VOVl9NSVNTSU5HIiwg
Ik5PVF9ERUZJTkVEXzEiLCBcDQogICAgKyAgICAgICAgICAgICAgICAiTk9UX0RFRklORURfMiIs
ICJOT1RfREVGSU5FRF8zIiwgIk5PVF9ERUZJTkVEXzQiOg0KICAgICsgICAgICAgIHZlcmlmeShj
LnN5bXNbbmFtZV0uY2hvaWNlIGlzIE5vbmUsDQogICAgKyAgICAgICAgICAgICAgICJ7fSBzaG91
bGQgbm90IGJlIGEgY2hvaWNlIHN5bWJvbCIuZm9ybWF0KG5hbWUpKQ0KICAgICsNCiAgICArDQog
ICAgKyAgICBwcmludCgiVGVzdGluZyBpc19hbGxub2NvbmZpZ195IikNCiAgICArDQogICAgKyAg
ICB2ZXJpZnkobm90IGMuc3ltc1siTk9UX0FMTE5PQ09ORklHX1kiXS5pc19hbGxub2NvbmZpZ195
LA0KICAgICsgICAgICAgICAgICJOT1RfQUxMTk9DT05GSUdfWSBzaG91bGQgbm90IGJlIGFsbG5v
Y29uZmlnX3kiKQ0KICAgICsgICAgdmVyaWZ5KGMuc3ltc1siQUxMTk9DT05GSUdfWSJdLmlzX2Fs
bG5vY29uZmlnX3ksDQogICAgKyAgICAgICAgICAgIkFMTE5PQ09ORklHX1kgc2hvdWxkIGJlIGFs
bG5vY29uZmlnX3kiKQ0KICAgICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyAuY29u
ZmlnIHJlYWRpbmcgYW5kIHdyaXRpbmciKQ0KICAgICsNCiAgICArICAgIGNvbmZpZ190ZXN0X2Zp
bGUgPSAiS2NvbmZpZ2xpYi90ZXN0cy9jb25maWdfdGVzdCINCiAgICArDQogICAgKyAgICBkZWYg
dmVyaWZ5X2ZpbGVfY29udGVudHMoZm5hbWUsIGNvbnRlbnRzKToNCiAgICArICAgICAgICB3aXRo
IG9wZW4oZm5hbWUsICJyIikgYXMgZjoNCiAgICArICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9
IGYucmVhZCgpDQogICAgKyAgICAgICAgICAgIHZlcmlmeShmaWxlX2NvbnRlbnRzID09IGNvbnRl
bnRzLA0KICAgICsgICAgICAgICAgICAgICAgICAgInt9IGNvbnRhaW5zICd7fScuIEV4cGVjdGVk
ICd7fScuIg0KICAgICsgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmbmFtZSwgZmlsZV9jb250
ZW50cywgY29udGVudHMpKQ0KICAgICsNCiAgICArICAgICMgV3JpdGluZy9yZWFkaW5nIHN0cmlu
Z3Mgd2l0aCBjaGFyYWN0ZXJzIHRoYXQgbmVlZCB0byBiZSBlc2NhcGVkDQogICAgKw0KICAgICsg
ICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvS2VzY2FwZSIpDQogICAgKw0KICAgICsg
ICAgIyBUZXN0IHRoZSBkZWZhdWx0IHZhbHVlDQogICAgKyAgICBjLndyaXRlX2NvbmZpZyhjb25m
aWdfdGVzdF9maWxlICsgIl9mcm9tX2RlZiIsIGhlYWRlcj0iIikNCiAgICArICAgIHZlcmlmeV9m
aWxlX2NvbnRlbnRzKGNvbmZpZ190ZXN0X2ZpbGUgKyAiX2Zyb21fZGVmIiwNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgIHInJydDT05GSUdfU1RSSU5HPSJcIlxcIicnJyAiXG4iKQ0KICAg
ICsgICAgIyBXcml0ZSBvdXIgb3duIHZhbHVlDQogICAgKyAgICBjLnN5bXNbIlNUUklORyJdLnNl
dF92YWx1ZShyJycnXCJhJ1xcJycnKQ0KICAgICsgICAgYy53cml0ZV9jb25maWcoY29uZmlnX3Rl
c3RfZmlsZSArICJfZnJvbV91c2VyIiwgaGVhZGVyPSIiKQ0KICAgICsgICAgdmVyaWZ5X2ZpbGVf
Y29udGVudHMoY29uZmlnX3Rlc3RfZmlsZSArICJfZnJvbV91c2VyIiwNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAgIHInJydDT05GSUdfU1RSSU5HPSJcXFwiYSdcXFxcIicnJyAiXG4iKQ0K
ICAgICsNCiAgICArICAgICMgUmVhZCBiYWNrIHRoZSB0d28gY29uZmlncyBhbmQgdmVyaWZ5IHRo
ZSByZXNwZWN0aXZlIHZhbHVlcw0KICAgICsgICAgYy5sb2FkX2NvbmZpZyhjb25maWdfdGVzdF9m
aWxlICsgIl9mcm9tX2RlZiIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIlNUUklORyIsICciXFwn
KQ0KICAgICsgICAgYy5sb2FkX2NvbmZpZyhjb25maWdfdGVzdF9maWxlICsgIl9mcm9tX3VzZXIi
KQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJTVFJJTkciLCByJycnXCJhJ1xcJycnKQ0KICAgICsN
CiAgICArICAgICMgQXBwZW5kaW5nIHZhbHVlcyBmcm9tIGEgLmNvbmZpZw0KICAgICsNCiAgICAr
ICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL0thcHBlbmQiKQ0KICAgICsNCiAgICAr
ICAgICMgVmFsdWVzIGJlZm9yZSBhc3NpZ25pbmcNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiQk9P
TCIsICJuIikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiU1RSSU5HIiwgIiIpDQogICAgKw0KICAg
ICsgICAgIyBBc3NpZ24gQk9PTA0KICAgICsgICAgYy5sb2FkX2NvbmZpZygiS2NvbmZpZ2xpYi90
ZXN0cy9jb25maWdfc2V0X2Jvb2wiLCByZXBsYWNlPUZhbHNlKQ0KICAgICsgICAgdmVyaWZ5X3Zh
bHVlKCJCT09MIiwgInkiKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJTVFJJTkciLCAiIikNCiAg
ICArDQogICAgKyAgICAjIEFzc2lnbiBTVFJJTkcNCiAgICArICAgIGMubG9hZF9jb25maWcoIktj
b25maWdsaWIvdGVzdHMvY29uZmlnX3NldF9zdHJpbmciLCByZXBsYWNlPUZhbHNlKQ0KICAgICsg
ICAgdmVyaWZ5X3ZhbHVlKCJCT09MIiwgInkiKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJTVFJJ
TkciLCAiZm9vIGJhciIpDQogICAgKw0KICAgICsgICAgIyBSZXNldCBCT09MDQogICAgKyAgICBj
LmxvYWRfY29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL2NvbmZpZ19zZXRfc3RyaW5nIikNCiAgICAr
ICAgIHZlcmlmeV92YWx1ZSgiQk9PTCIsICJuIikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiU1RS
SU5HIiwgImZvbyBiYXIiKQ0KICAgICsNCiAgICArICAgICMgTG9hZGluZyBhIGNvbXBsZXRlbHkg
ZW1wdHkgLmNvbmZpZyBzaG91bGQgcmVzZXQgdmFsdWVzDQogICAgKyAgICBjLmxvYWRfY29uZmln
KCJLY29uZmlnbGliL3Rlc3RzL2VtcHR5IikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiU1RSSU5H
IiwgIiIpDQogICAgKw0KICAgICsgICAgIyBBbiBpbmRlbnRlZCBhc3NpZ25tZW50IGluIGEgLmNv
bmZpZyBzaG91bGQgYmUgaWdub3JlZA0KICAgICsgICAgYy5sb2FkX2NvbmZpZygiS2NvbmZpZ2xp
Yi90ZXN0cy9jb25maWdfaW5kZW50ZWQiKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJJR05PUkVN
RSIsICJ5IikNCiAgICArDQogICAgKyAgICAjIFN5bWJvbCBvcmRlciBpbiBoZWFkZXJzIGFuZCBt
aW5pbWFsIGNvbmZpZ3VyYXRpb24gZmlsZXMgc2hvdWxkIG1hdGNoDQogICAgKyAgICAjIGRlZmlu
aXRpb24gb3JkZXIsIGxpa2UgaW4gLmNvbmZpZyBmaWxlcw0KICAgICsNCiAgICArICAgIGMgPSBL
Y29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL0tvcmRlciIpDQogICAgKw0KICAgICsgICAgYy53cml0
ZV9hdXRvY29uZihjb25maWdfdGVzdF9maWxlLCBoZWFkZXI9IiIpDQogICAgKyAgICB2ZXJpZnlf
ZmlsZV9jb250ZW50cyhjb25maWdfdGVzdF9maWxlLCAiIiINCiAgICArI2RlZmluZSBDT05GSUdf
TyAwDQogICAgKyNkZWZpbmUgQ09ORklHX1IgMQ0KICAgICsjZGVmaW5lIENPTkZJR19EIDINCiAg
ICArI2RlZmluZSBDT05GSUdfRSAzDQogICAgKyNkZWZpbmUgQ09ORklHX1IyIDQNCiAgICArI2Rl
ZmluZSBDT05GSUdfSSA1DQogICAgKyNkZWZpbmUgQ09ORklHX04gNg0KICAgICsjZGVmaW5lIENP
TkZJR19HIDcNCiAgICArIiIiWzE6XSkNCiAgICArDQogICAgKyAgICAjIERpZmZlcnMgZnJvbSBk
ZWZhdWx0cw0KICAgICsgICAgYy5zeW1zWyJPIl0uc2V0X3ZhbHVlKCItMSIpDQogICAgKyAgICBj
LnN5bXNbIlIiXS5zZXRfdmFsdWUoIi0xIikNCiAgICArICAgIGMuc3ltc1siRSJdLnNldF92YWx1
ZSgiLTEiKQ0KICAgICsgICAgYy5zeW1zWyJSMiJdLnNldF92YWx1ZSgiLTEiKQ0KICAgICsgICAg
Yy5zeW1zWyJOIl0uc2V0X3ZhbHVlKCItMSIpDQogICAgKyAgICBjLnN5bXNbIkciXS5zZXRfdmFs
dWUoIi0xIikNCiAgICArICAgIGMud3JpdGVfbWluX2NvbmZpZyhjb25maWdfdGVzdF9maWxlLCBo
ZWFkZXI9IiIpDQogICAgKyAgICB2ZXJpZnlfZmlsZV9jb250ZW50cyhjb25maWdfdGVzdF9maWxl
LCAiIiINCiAgICArQ09ORklHX089LTENCiAgICArQ09ORklHX1I9LTENCiAgICArQ09ORklHX0U9
LTENCiAgICArQ09ORklHX1IyPS0xDQogICAgK0NPTkZJR19OPS0xDQogICAgK0NPTkZJR19HPS0x
DQogICAgKyIiIlsxOl0pDQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIEtj
b25maWcgZmV0Y2hpbmcgYW5kIHNlcGFyYXRpb24iKQ0KICAgICsNCiAgICArICAgIGZvciBjIGlu
IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvS21pc2MiLCB3YXJuPUZhbHNlKSwgXA0KICAgICsg
ICAgICAgICAgICAgS2NvbmZpZygiS2NvbmZpZ2xpYi90ZXN0cy9LbWlzYyIsIHdhcm49RmFsc2Up
Og0KICAgICsgICAgICAgIGZvciBpdGVtIGluIGMuc3ltc1siQk9PTCJdLCBcDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgYy5zeW1zWyJCT09MIl0ubm9kZXNbMF0sIFwNCiAgICArICAgICAgICAg
ICAgICAgICAgICBjLm5hbWVkX2Nob2ljZXNbIk9QVElPTkFMIl0sIFwNCiAgICArICAgICAgICAg
ICAgICAgICAgICBjLm5hbWVkX2Nob2ljZXNbIk9QVElPTkFMIl0ubm9kZXNbMF0sIFwNCiAgICAr
ICAgICAgICAgICAgICAgICAgICBjLnN5bXNbIk1FTlVfSE9PSyJdLm5vZGVzWzBdLm5leHQsIFwN
CiAgICArICAgICAgICAgICAgICAgICAgICBjLnN5bXNbIkNPTU1FTlRfSE9PSyJdLm5vZGVzWzBd
Lm5leHQ6DQogICAgKyAgICAgICAgICAgIHZlcmlmeShpdGVtLmtjb25maWcgaXMgYywNCiAgICAr
ICAgICAgICAgICAgICAgICAgICIua2NvbmZpZyBub3QgcHJvcGVybHkgc2V0IGZvciAiICsgcmVw
cihpdGVtKSkNCiAgICArDQogICAgKw0KICAgICsgICAgcHJpbnQoIlRlc3RpbmcgaW1wbHkgc2Vt
YW50aWNzIikNCiAgICArDQogICAgKyAgICBjID0gS2NvbmZpZygiS2NvbmZpZ2xpYi90ZXN0cy9L
aW1wbHkiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTFlfRElSRUNUX0RFUFMi
LCAieSIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIlVOTUVUX0RJUkVDVF8xIiwgIm4iKQ0KICAg
ICsgICAgdmVyaWZ5X3ZhbHVlKCJVTk1FVF9ESVJFQ1RfMiIsICJuIikNCiAgICArICAgIHZlcmlm
eV92YWx1ZSgiVU5NRVRfRElSRUNUXzMiLCAibiIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIk1F
VF9ESVJFQ1RfMSIsICJ5IikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiTUVUX0RJUkVDVF8yIiwg
InkiKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJNRVRfRElSRUNUXzMiLCAieSIpDQogICAgKyAg
ICB2ZXJpZnlfdmFsdWUoIk1FVF9ESVJFQ1RfNCIsICJ5IikNCiAgICArDQogICAgKyAgICB2ZXJp
ZnlfdmFsdWUoIklNUExZX0NPTkQiLCAieSIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIklNUExJ
RURfTl9DT05EIiwgIm4iKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJJTVBMSUVEX01fQ09ORCIs
ICJtIikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTElFRF9ZX0NPTkQiLCAieSIpDQogICAg
Kw0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJJTVBMWV9OXzEiLCAibiIpDQogICAgKyAgICB2ZXJp
ZnlfdmFsdWUoIklNUExZX05fMiIsICJuIikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTElF
RF9GUk9NX05fMSIsICJuIikNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTElFRF9GUk9NX05f
MiIsICJuIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIklNUExZX00iLCAibSIpDQog
ICAgKyAgICB2ZXJpZnlfdmFsdWUoIklNUExJRURfTSIsICJtIikNCiAgICArICAgIHZlcmlmeV92
YWx1ZSgiSU1QTElFRF9NX0JPT0wiLCAieSIpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3ZhbHVl
KCJJTVBMWV9NX1RPX1kiLCAieSIpDQogICAgKyAgICB2ZXJpZnlfdmFsdWUoIklNUExJRURfTV9U
T19ZIiwgInkiKQ0KICAgICsNCiAgICArICAgICMgVGVzdCB1c2VyIHZhbHVlIHNlbWFudGljcw0K
ICAgICsNCiAgICArICAgICMgVmVyaWZ5IHRoYXQgSU1QTElFRF9UUklTVEFURSBpcyBpbnZhbGlk
YXRlZCBpZiB0aGUgZGlyZWN0DQogICAgKyAgICAjIGRlcGVuZGVuY2llcyBjaGFuZ2UNCiAgICAr
DQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeSgiSU1QTFkiLCAyKQ0KICAgICsgICAgYXNzaWdu
X2FuZF92ZXJpZnkoIkRJUkVDVF9ERVAiLCAyKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJJTVBM
SUVEX1RSSVNUQVRFIiwgMikNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5KCJESVJFQ1RfREVQ
IiwgMCkNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTElFRF9UUklTVEFURSIsIDApDQogICAg
KyAgICAjIFNldCBiYWNrIGZvciBsYXRlciB0ZXN0cw0KICAgICsgICAgYXNzaWduX2FuZF92ZXJp
ZnkoIkRJUkVDVF9ERVAiLCAyKQ0KICAgICsNCiAgICArICAgICMgVmVyaWZ5IHRoYXQgSU1QTElF
RF9UUklTVEFURSBjYW4gYmUgc2V0IHRvIGFueXRoaW5nIHdoZW4gSU1QTFkgaGFzIHZhbHVlDQog
ICAgKyAgICAjIG4sIGFuZCB0aGF0IGl0IGdldHMgdGhlIHZhbHVlIG4gYnkgZGVmYXVsdCAoZm9y
IG5vbi1pbXBseS1yZWxhdGVkDQogICAgKyAgICAjIHJlYXNvbnMpDQogICAgKw0KICAgICsgICAg
YXNzaWduX2FuZF92ZXJpZnkoIklNUExZIiwgMCkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5
KCJJTVBMSUVEX1RSSVNUQVRFIiwgMCkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5KCJJTVBM
SUVEX1RSSVNUQVRFIiwgMSkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5KCJJTVBMSUVEX1RS
SVNUQVRFIiwgMikNCiAgICArICAgIGMuc3ltc1siSU1QTElFRF9UUklTVEFURSJdLnVuc2V0X3Zh
bHVlKCkNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTElFRF9UUklTVEFURSIsICJuIikNCiAg
ICArDQogICAgKyAgICAjIFNhbWUgYXMgYWJvdmUgZm9yIG0uIEFueXRoaW5nIHN0aWxsIGdvZXMs
IGJ1dCBtIGJ5IGRlZmF1bHQgbm93Lg0KICAgICsNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5
KCJJTVBMWSIsIDEpDQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeSgiSU1QTElFRF9UUklTVEFU
RSIsIDApDQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeSgiSU1QTElFRF9UUklTVEFURSIsIDEp
DQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeSgiSU1QTElFRF9UUklTVEFURSIsIDIpDQogICAg
KyAgICBjLnN5bXNbIklNUExJRURfVFJJU1RBVEUiXS51bnNldF92YWx1ZSgpDQogICAgKyAgICB2
ZXJpZnlfdmFsdWUoIklNUExJRURfVFJJU1RBVEUiLCAxKQ0KICAgICsNCiAgICArICAgICMgU2Ft
ZSBhcyBhYm92ZSBmb3IgeS4gT25seSBuIGFuZCB5IHNob3VsZCBiZSBhY2NlcHRlZC4gbSBnZXRz
IHByb21vdGVkIHRvDQogICAgKyAgICAjIHkuIERlZmF1bHQgc2hvdWxkIGJlIHkuDQogICAgKw0K
ICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnkoIklNUExZIiwgMikNCiAgICArICAgIGFzc2lnbl9h
bmRfdmVyaWZ5KCJJTVBMSUVEX1RSSVNUQVRFIiwgMCkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVy
aWZ5X3ZhbHVlKCJJTVBMSUVEX1RSSVNUQVRFIiwgMSwgMikNCiAgICArICAgIGFzc2lnbl9hbmRf
dmVyaWZ5KCJJTVBMSUVEX1RSSVNUQVRFIiwgMikNCiAgICArICAgIGMuc3ltc1siSU1QTElFRF9U
UklTVEFURSJdLnVuc2V0X3ZhbHVlKCkNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTElFRF9U
UklTVEFURSIsIDIpDQogICAgKw0KICAgICsgICAgIyBCZWluZyBpbXBsaWVkIHRvIGVpdGhlciBt
IG9yIHkgc2hvdWxkIGdpdmUgYSBib29sIHRoZSB2YWx1ZSB5DQogICAgKw0KICAgICsgICAgYy5z
eW1zWyJJTVBMWSJdLnVuc2V0X3ZhbHVlKCkNCiAgICArICAgIHZlcmlmeV92YWx1ZSgiSU1QTElF
RF9CT09MIiwgMCkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5KCJJTVBMWSIsIDApDQogICAg
KyAgICB2ZXJpZnlfdmFsdWUoIklNUExJRURfQk9PTCIsIDApDQogICAgKyAgICBhc3NpZ25fYW5k
X3ZlcmlmeSgiSU1QTFkiLCAxKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJJTVBMSUVEX0JPT0wi
LCAyKQ0KICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnkoIklNUExZIiwgMikNCiAgICArICAgIHZl
cmlmeV92YWx1ZSgiSU1QTElFRF9CT09MIiwgMikNCiAgICArDQogICAgKyAgICAjIEEgYm9vbCBp
bXBsaWVkIHRvIG0gb3IgeSBjYW4gdGFrZSB0aGUgdmFsdWVzIG4gYW5kIHkNCiAgICArDQogICAg
KyAgICBjLnN5bXNbIklNUExZIl0uc2V0X3ZhbHVlKDEpDQogICAgKyAgICBhc3NpZ25fYW5kX3Zl
cmlmeSgiSU1QTElFRF9CT09MIiwgMCkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5KCJJTVBM
SUVEX0JPT0wiLCAyKQ0KICAgICsNCiAgICArICAgIGMuc3ltc1siSU1QTFkiXS5zZXRfdmFsdWUo
MikNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5KCJJTVBMSUVEX0JPT0wiLCAwKQ0KICAgICsg
ICAgYXNzaWduX2FuZF92ZXJpZnkoIklNUExJRURfQk9PTCIsIDIpDQogICAgKw0KICAgICsNCiAg
ICArICAgIHByaW50KCJUZXN0aW5nIGNob2ljZSBzZW1hbnRpY3MiKQ0KICAgICsNCiAgICArICAg
ICMgV291bGQgd2FybiBmb3IgY2hvaWNlIHZhbHVlIHN5bWJvbHMgZGVmaW5lZCB3aXRob3V0IGEg
dHlwZSwgZXZlbg0KICAgICsgICAgIyB0aG91Z2ggdGhlIHR5cGUgaXMgYXV0b21hdGljYWxseSBk
ZXJpdmVkLiBUaGlzIGlzIHByb2JhYmx5IG1vcmUNCiAgICArICAgICMgaGVscGZ1bCB0aGFuIGln
bm9yaW5nIHRob3NlIGNhc2VzLCBhcyB0aGlzIGZlYXR1cmUgaXNuJ3QgdXNlZA0KICAgICsgICAg
IyBkZWxpYmVyYXRlbHkgYW55d2hlcmUgZnJvbSB3aGF0IEkndmUgc2Vlbi4NCiAgICArICAgIGMg
PSBLY29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL0tjaG9pY2UiLCB3YXJuPUZhbHNlKQ0KICAgICsN
CiAgICArICAgIGZvciBuYW1lIGluICJCT09MIiwgIkJPT0xfT1BUIiwgIkJPT0xfTSIsICJERUZB
VUxUUyI6DQogICAgKyAgICAgICAgdmVyaWZ5KGMubmFtZWRfY2hvaWNlc1tuYW1lXS5vcmlnX3R5
cGUgPT0gQk9PTCwNCiAgICArICAgICAgICAgICAgICAgImNob2ljZSB7fSBzaG91bGQgaGF2ZSB0
eXBlIGJvb2wiLmZvcm1hdChuYW1lKSkNCiAgICArDQogICAgKyAgICBmb3IgbmFtZSBpbiAiVFJJ
U1RBVEUiLCAiVFJJU1RBVEVfT1BUIiwgIlRSSVNUQVRFX00iOg0KICAgICsgICAgICAgIHZlcmlm
eShjLm5hbWVkX2Nob2ljZXNbbmFtZV0ub3JpZ190eXBlID09IFRSSVNUQVRFLA0KICAgICsgICAg
ICAgICAgICAgICAiY2hvaWNlIHt9IHNob3VsZCBoYXZlIHR5cGUgdHJpc3RhdGUiLmZvcm1hdChu
YW1lKSkNCiAgICArDQogICAgKyAgICBkZWYgc2VsZWN0X2FuZF92ZXJpZnkoc3ltKToNCiAgICAr
ICAgICAgICBjaG9pY2UgPSBzeW0ubm9kZXNbMF0ucGFyZW50Lml0ZW0NCiAgICArICAgICAgICBj
aG9pY2Uuc2V0X3ZhbHVlKDIpDQogICAgKw0KICAgICsgICAgICAgIHN5bS5zZXRfdmFsdWUoMikN
CiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5KHN5bS5jaG9pY2Uuc2VsZWN0aW9uIGlzIHN5bSwN
CiAgICArICAgICAgICAgICAgICAgc3ltLm5hbWUgKyAiIHNob3VsZCBiZSB0aGUgc2VsZWN0ZWQg
c3ltYm9sIikNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5KGNob2ljZS51c2VyX3NlbGVjdGlv
biBpcyBzeW0sDQogICAgKyAgICAgICAgICAgICAgIHN5bS5uYW1lICsgIiBzaG91bGQgYmUgdGhl
IHVzZXIgc2VsZWN0aW9uIG9mIHRoZSBjaG9pY2UiKQ0KICAgICsNCiAgICArICAgICAgICB2ZXJp
Znkoc3ltLnRyaV92YWx1ZSA9PSAyLA0KICAgICsgICAgICAgICAgICAgICBzeW0ubmFtZSArICIg
c2hvdWxkIGhhdmUgdmFsdWUgeSB3aGVuIHNlbGVjdGVkIikNCiAgICArDQogICAgKyAgICAgICAg
dmVyaWZ5KHN5bS51c2VyX3ZhbHVlID09IDIsDQogICAgKyAgICAgICAgICAgICAgIHN5bS5uYW1l
ICsgIiBzaG91bGQgaGF2ZSB1c2VyIHZhbHVlIHkgd2hlbiBzZWxlY3RlZCIpDQogICAgKw0KICAg
ICsgICAgICAgIGZvciBzaWJsaW5nIGluIGNob2ljZS5zeW1zOg0KICAgICsgICAgICAgICAgICBp
ZiBzaWJsaW5nIGlzIG5vdCBzeW06DQogICAgKyAgICAgICAgICAgICAgICB2ZXJpZnkoc2libGlu
Zy50cmlfdmFsdWUgPT0gMCwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICBzaWJsaW5nLm5h
bWUgKyAiIHNob3VsZCBiZSBuIHdoZW4gbm90IHNlbGVjdGVkIikNCiAgICArDQogICAgKyAgICBk
ZWYgc2VsZWN0X2FuZF92ZXJpZnlfYWxsKGNob2ljZV9uYW1lKToNCiAgICArICAgICAgICBjaG9p
Y2UgPSBjLm5hbWVkX2Nob2ljZXNbY2hvaWNlX25hbWVdDQogICAgKw0KICAgICsgICAgICAgICMg
U2VsZWN0IGluIGZvcndhcmQgb3JkZXINCiAgICArICAgICAgICBmb3Igc3ltIGluIGNob2ljZS5z
eW1zOg0KICAgICsgICAgICAgICAgICBzZWxlY3RfYW5kX3ZlcmlmeShzeW0pDQogICAgKw0KICAg
ICsgICAgICAgICMgU2VsZWN0IGluIHJldmVyc2Ugb3JkZXINCiAgICArICAgICAgICBmb3Igc3lt
IGluIHJldmVyc2VkKGNob2ljZS5zeW1zKToNCiAgICArICAgICAgICAgICAgc2VsZWN0X2FuZF92
ZXJpZnkoc3ltKQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfbW9kZShjaG9pY2VfbmFtZSwg
bm9fbW9kdWxlc19tb2RlLCBtb2R1bGVzX21vZGUpOg0KICAgICsgICAgICAgIGNob2ljZSA9IGMu
bmFtZWRfY2hvaWNlc1tjaG9pY2VfbmFtZV0NCiAgICArDQogICAgKyAgICAgICAgYy5tb2R1bGVz
LnNldF92YWx1ZSgwKQ0KICAgICsgICAgICAgIHZlcmlmeShjaG9pY2UudHJpX3ZhbHVlID09IG5v
X21vZHVsZXNfbW9kZSwNCiAgICArICAgICAgICAgICAgICAgJ1dyb25nIG1vZGUgZm9yIGNob2lj
ZSB7fSB3aXRoIG5vIG1vZHVsZXMuIEV4cGVjdGVkIHt9LCBnb3Qge30uJw0KICAgICsgICAgICAg
ICAgICAgICAuZm9ybWF0KGNob2ljZS5uYW1lLCBub19tb2R1bGVzX21vZGUsIGNob2ljZS50cmlf
dmFsdWUpKQ0KICAgICsNCiAgICArICAgICAgICBjLm1vZHVsZXMuc2V0X3ZhbHVlKDIpDQogICAg
KyAgICAgICAgdmVyaWZ5KGNob2ljZS50cmlfdmFsdWUgPT0gbW9kdWxlc19tb2RlLA0KICAgICsg
ICAgICAgICAgICAgICAnV3JvbmcgbW9kZSBmb3IgY2hvaWNlIHt9IHdpdGggbW9kdWxlcy4gRXhw
ZWN0ZWQge30sIGdvdCB7fS4nDQogICAgKyAgICAgICAgICAgICAgIC5mb3JtYXQoY2hvaWNlLm5h
bWUsIG1vZHVsZXNfbW9kZSwgY2hvaWNlLnRyaV92YWx1ZSkpDQogICAgKw0KICAgICsgICAgdmVy
aWZ5X21vZGUoIkJPT0wiLCAgICAgICAgIDIsIDIpDQogICAgKyAgICB2ZXJpZnlfbW9kZSgiQk9P
TF9PUFQiLCAgICAgMCwgMCkNCiAgICArICAgIHZlcmlmeV9tb2RlKCJUUklTVEFURSIsICAgICAy
LCAxKQ0KICAgICsgICAgdmVyaWZ5X21vZGUoIlRSSVNUQVRFX09QVCIsIDAsIDApDQogICAgKyAg
ICB2ZXJpZnlfbW9kZSgiQk9PTF9NIiwgICAgICAgMCwgMikNCiAgICArICAgIHZlcmlmeV9tb2Rl
KCJUUklTVEFURV9NIiwgICAwLCAxKQ0KICAgICsNCiAgICArICAgICMgVGVzdCBkZWZhdWx0cw0K
ICAgICsNCiAgICArICAgIGNob2ljZSA9IGMubmFtZWRfY2hvaWNlc1siREVGQVVMVFMiXQ0KICAg
ICsNCiAgICArICAgIGMuc3ltc1siVFJJU1RBVEVfU1lNIl0uc2V0X3ZhbHVlKDApDQogICAgKyAg
ICB2ZXJpZnkoY2hvaWNlLnNlbGVjdGlvbiBpcyBjLnN5bXNbIk9QVF80Il0sDQogICAgKyAgICAg
ICAgICAgIldyb25nIGNob2ljZSBkZWZhdWx0IHdpdGggVFJJU1RBVEVfU1lNID0gbiIpDQogICAg
Kw0KICAgICsgICAgYy5zeW1zWyJUUklTVEFURV9TWU0iXS5zZXRfdmFsdWUoMikNCiAgICArICAg
IHZlcmlmeShjaG9pY2Uuc2VsZWN0aW9uIGlzIGMuc3ltc1siT1BUXzIiXSwNCiAgICArICAgICAg
ICAgICAiV3JvbmcgY2hvaWNlIGRlZmF1bHQgd2l0aCBUUklTVEFURV9TWU0gPSB5IikNCiAgICAr
DQogICAgKyAgICBjLnN5bXNbIk9QVF8xIl0uc2V0X3ZhbHVlKDIpDQogICAgKyAgICB2ZXJpZnko
Y2hvaWNlLnNlbGVjdGlvbiBpcyBjLnN5bXNbIk9QVF8xIl0sDQogICAgKyAgICAgICAgICAgIlVz
ZXIgc2VsZWN0aW9uIHNob3VsZCBvdmVycmlkZSBkZWZhdWx0cyIpDQogICAgKw0KICAgICsgICAg
dmVyaWZ5KGMubmFtZWRfY2hvaWNlc1siREVGQVVMVFNfTk9UX1ZJU0lCTEUiXS5zZWxlY3Rpb24N
CiAgICArICAgICAgICAgICBpcyBjLnN5bXNbIk9QVF84Il0sDQogICAgKyAgICAgICAgICAgIk5v
bi12aXNpYmxlIGNob2ljZSBzeW1ib2xzIHNob3VsZCBjYXVzZSB0aGUgbmV4dCBkZWZhdWx0IHRv
IGJlICINCiAgICArICAgICAgICAgICAiY29uc2lkZXJlZCIpDQogICAgKw0KICAgICsgICAgIyBU
ZXN0IHkgbW9kZSBzZWxlY3Rpb24NCiAgICArDQogICAgKyAgICBjLm1vZHVsZXMuc2V0X3ZhbHVl
KDIpDQogICAgKw0KICAgICsgICAgc2VsZWN0X2FuZF92ZXJpZnlfYWxsKCJCT09MIikNCiAgICAr
ICAgIHNlbGVjdF9hbmRfdmVyaWZ5X2FsbCgiQk9PTF9PUFQiKQ0KICAgICsgICAgc2VsZWN0X2Fu
ZF92ZXJpZnlfYWxsKCJUUklTVEFURSIpDQogICAgKyAgICBzZWxlY3RfYW5kX3ZlcmlmeV9hbGwo
IlRSSVNUQVRFX09QVCIpDQogICAgKyAgICAjIEZvciBCT09MX00sIHRoZSBtb2RlIHNob3VsZCBo
YXZlIGJlZW4gcHJvbW90ZWQNCiAgICArICAgIHNlbGVjdF9hbmRfdmVyaWZ5X2FsbCgiQk9PTF9N
IikNCiAgICArDQogICAgKyAgICAjIFRlc3QgbSBtb2RlIHNlbGVjdGlvbg0KICAgICsNCiAgICAr
ICAgIGMubmFtZWRfY2hvaWNlc1siVFJJU1RBVEUiXS5zZXRfdmFsdWUoMSkNCiAgICArDQogICAg
KyAgICB2ZXJpZnkoYy5uYW1lZF9jaG9pY2VzWyJUUklTVEFURSJdLnRyaV92YWx1ZSA9PSAxLA0K
ICAgICsgICAgICAgICAgICJUUklTVEFURSBjaG9pY2Ugc2hvdWxkIGhhdmUgbW9kZSBtIGFmdGVy
IGV4cGxpY2l0IG1vZGUgYXNzaWdubWVudCIpDQogICAgKw0KICAgICsgICAgYXNzaWduX2FuZF92
ZXJpZnlfdmFsdWUoIlRfMSIsIDAsIDApDQogICAgKyAgICBhc3NpZ25fYW5kX3ZlcmlmeV92YWx1
ZSgiVF8yIiwgMCwgMCkNCiAgICArICAgIGFzc2lnbl9hbmRfdmVyaWZ5X3ZhbHVlKCJUXzEiLCAx
LCAxKQ0KICAgICsgICAgYXNzaWduX2FuZF92ZXJpZnlfdmFsdWUoIlRfMiIsIDEsIDEpDQogICAg
KyAgICBhc3NpZ25fYW5kX3ZlcmlmeV92YWx1ZSgiVF8xIiwgMiwgMSkNCiAgICArICAgIGFzc2ln
bl9hbmRfdmVyaWZ5X3ZhbHVlKCJUXzIiLCAyLCAxKQ0KICAgICsNCiAgICArICAgICMgU3dpdGNo
aW5nIHRvIHkgbW9kZSBzaG91bGQgY2F1c2UgVF8yIHRvIGJlY29tZSBzZWxlY3RlZA0KICAgICsg
ICAgYy5uYW1lZF9jaG9pY2VzWyJUUklTVEFURSJdLnNldF92YWx1ZSgyKQ0KICAgICsgICAgdmVy
aWZ5X3ZhbHVlKCJUXzEiLCAwKQ0KICAgICsgICAgdmVyaWZ5X3ZhbHVlKCJUXzIiLCAyKQ0KICAg
ICsNCiAgICArICAgICMgVmVyaWZ5IHRoYXQgY2hvaWNlcyB3aXRoIG5vIGV4cGxpY2l0bHkgc3Bl
Y2lmaWVkIHR5cGUgZ2V0IHRoZSB0eXBlIG9mIHRoZQ0KICAgICsgICAgIyBmaXJzdCBjb250YWlu
ZWQgc3ltYm9sIHdpdGggYSB0eXBlDQogICAgKw0KICAgICsgICAgdmVyaWZ5KGMubmFtZWRfY2hv
aWNlc1siTk9fVFlQRV9CT09MIl0ub3JpZ190eXBlID09IEJPT0wsDQogICAgKyAgICAgICAgICAg
IkV4cGVjdGVkIGZpcnN0IGNob2ljZSB3aXRob3V0IGV4cGxpY2l0IHR5cGUgdG8gaGF2ZSB0eXBl
IGJvb2wiKQ0KICAgICsNCiAgICArICAgIHZlcmlmeShjLm5hbWVkX2Nob2ljZXNbIk5PX1RZUEVf
VFJJU1RBVEUiXS5vcmlnX3R5cGUgPT0gVFJJU1RBVEUsDQogICAgKyAgICAgICAgICAgIkV4cGVj
dGVkIHNlY29uZCBjaG9pY2Ugd2l0aG91dCBleHBsaWNpdCB0eXBlIHRvIGhhdmUgdHlwZSAiDQog
ICAgKyAgICAgICAgICAgInRyaXN0YXRlIikNCiAgICArDQogICAgKyAgICAjIFZlcmlmeSB0aGF0
IHN5bWJvbHMgd2l0aG91dCBhIHR5cGUgaW4gdGhlIGNob2ljZSBnZXQgdGhlIHR5cGUgb2YgdGhl
DQogICAgKyAgICAjIGNob2ljZQ0KICAgICsNCiAgICArICAgIGZvciBuYW1lIGluICJNTVRfMSIs
ICJNTVRfMiIsICJNTVRfNCIsICJNTVRfNSI6DQogICAgKyAgICAgICAgdmVyaWZ5KGMuc3ltc1tu
YW1lXS5vcmlnX3R5cGUgPT0gQk9PTCwNCiAgICArICAgICAgICAgICAgICAgIkV4cGVjdGVkIHt9
IHRvIGdldCB0eXBlIGJvb2wiLmZvcm1hdChuYW1lKSkNCiAgICArDQogICAgKyAgICB2ZXJpZnko
Yy5zeW1zWyJNTVRfMyJdLm9yaWdfdHlwZSA9PSBUUklTVEFURSwNCiAgICArICAgICAgICAgICAi
RXhwZWN0ZWQgTU1UXzMgdG8gaGF2ZSB0eXBlIHRyaXN0YXRlIikNCiAgICArDQogICAgKyAgICAj
IFZlcmlmeSB0aGF0IHRoZSBkZWZhdWx0IHNlbGVjdGlvbiBjYW4gY2hhbmdlIGRlcGVuZGluZyBv
biB0aGUNCiAgICArICAgICMgdmlzaWJpbGl0eSBvZiB0aGUgY2hvaWNlIHN5bWJvbHMNCiAgICAr
DQogICAgKyAgICBkZWZhdWx0X3dpdGhfZGVwX2Nob2ljZSA9IGMubmFtZWRfY2hvaWNlc1siREVG
QVVMVF9XSVRIX0RFUCJdDQogICAgKw0KICAgICsgICAgdmVyaWZ5KGRlZmF1bHRfd2l0aF9kZXBf
Y2hvaWNlLnNlbGVjdGlvbiBpcyBjLnN5bXNbIkIiXSwNCiAgICArICAgICAgICAgICAiV3Jvbmcg
Y2hvaWNlIGRlZmF1bHQgd2l0aCB1bnNhdGlzZmllZCBkZXBzIG9uIGRlZmF1bHQiKQ0KICAgICsN
CiAgICArICAgIGMuc3ltc1siREVQIl0uc2V0X3ZhbHVlKCJ5IikNCiAgICArDQogICAgKyAgICB2
ZXJpZnkoZGVmYXVsdF93aXRoX2RlcF9jaG9pY2Uuc2VsZWN0aW9uIGlzIGMuc3ltc1siQSJdLA0K
ICAgICsgICAgICAgICAgICJXcm9uZyBjaG9pY2UgZGVmYXVsdCB3aXRoIHNhdGlzZmllZCBkZXBz
IG9uIGRlZmF1bHQiKQ0KICAgICsNCiAgICArICAgIGMuc3ltc1siREVQIl0uc2V0X3ZhbHVlKCJu
IikNCiAgICArDQogICAgKyAgICB2ZXJpZnkoZGVmYXVsdF93aXRoX2RlcF9jaG9pY2Uuc2VsZWN0
aW9uIGlzIGMuc3ltc1siQiJdLA0KICAgICsgICAgICAgICAgICJXcm9uZyBjaG9pY2UgZGVmYXVs
dCB3aXRoIHVuc2F0aXNmaWVkIGRlcHMgb24gZGVmYXVsdCAocm91bmQgdHdvKSIpDQogICAgKw0K
ICAgICsgICAgIyBWZXJpZnkgdGhhdCBzeW1ib2xzIGluIGNob2ljZXMgdGhhdCBkZXBlbmQgb24g
dGhlIHByZWNlZGluZyBzeW1ib2wgYXJlbid0DQogICAgKyAgICAjIGNvbnNpZGVyZWQgY2hvaWNl
IHN5bWJvbHMNCiAgICArDQogICAgKyAgICB3ZWlyZF9jaG9pY2UgPSBjLm5hbWVkX2Nob2ljZXNb
IldFSVJEX1NZTVMiXQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfaXNfbm9ybWFsX2Nob2lj
ZV9zeW1ib2wobmFtZSk6DQogICAgKyAgICAgICAgc3ltID0gYy5zeW1zW25hbWVdDQogICAgKyAg
ICAgICAgdmVyaWZ5KHN5bS5jaG9pY2UgaXMgbm90IE5vbmUgYW5kDQogICAgKyAgICAgICAgICAg
ICAgIHN5bSBpbiB3ZWlyZF9jaG9pY2Uuc3ltcyBhbmQNCiAgICArICAgICAgICAgICAgICAgc3lt
Lm5vZGVzWzBdLnBhcmVudC5pdGVtIGlzIHdlaXJkX2Nob2ljZSwNCiAgICArICAgICAgICAgICAg
ICAgInt9IHNob3VsZCBiZSBhIG5vcm1hbCBjaG9pY2Ugc3ltYm9sIi5mb3JtYXQoc3ltLm5hbWUp
KQ0KICAgICsNCiAgICArICAgIGRlZiB2ZXJpZnlfaXNfd2VpcmRfY2hvaWNlX3N5bWJvbChuYW1l
KToNCiAgICArICAgICAgICBzeW0gPSBjLnN5bXNbbmFtZV0NCiAgICArICAgICAgICB2ZXJpZnko
c3ltLmNob2ljZSBpcyBOb25lIGFuZA0KICAgICsgICAgICAgICAgICAgICBzeW0gbm90IGluIHdl
aXJkX2Nob2ljZS5zeW1zLA0KICAgICsgICAgICAgICAgICAgICAie30gc2hvdWxkIGJlIGEgd2Vp
cmQgKG5vbi0pY2hvaWNlIHN5bWJvbCINCiAgICArICAgICAgICAgICAgICAgLmZvcm1hdChzeW0u
bmFtZSkpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X2lzX25vcm1hbF9jaG9pY2Vfc3ltYm9sKCJX
UzEiKQ0KICAgICsgICAgdmVyaWZ5X2lzX3dlaXJkX2Nob2ljZV9zeW1ib2woIldTMiIpDQogICAg
KyAgICB2ZXJpZnlfaXNfd2VpcmRfY2hvaWNlX3N5bWJvbCgiV1MzIikNCiAgICArICAgIHZlcmlm
eV9pc193ZWlyZF9jaG9pY2Vfc3ltYm9sKCJXUzQiKQ0KICAgICsgICAgdmVyaWZ5X2lzX3dlaXJk
X2Nob2ljZV9zeW1ib2woIldTNSIpDQogICAgKyAgICB2ZXJpZnlfaXNfbm9ybWFsX2Nob2ljZV9z
eW1ib2woIldTNiIpDQogICAgKyAgICB2ZXJpZnlfaXNfd2VpcmRfY2hvaWNlX3N5bWJvbCgiV1M3
IikNCiAgICArICAgIHZlcmlmeV9pc193ZWlyZF9jaG9pY2Vfc3ltYm9sKCJXUzgiKQ0KICAgICsg
ICAgdmVyaWZ5X2lzX25vcm1hbF9jaG9pY2Vfc3ltYm9sKCJXUzkiKQ0KICAgICsNCiAgICArDQog
ICAgKyAgICBwcmludCgiVGVzdGluZyAnaWYnIG5vZGUgcmVtb3ZhbCIpDQogICAgKw0KICAgICsg
ICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvS2lmcmVtb3ZhbCIsIHdhcm49RmFsc2Up
DQogICAgKw0KICAgICsgICAgbm9kZXMgPSB0dXBsZShjLm5vZGVfaXRlcigpKQ0KICAgICsgICAg
dmVyaWZ5X2VxdWFsKG5vZGVzWzBdLml0ZW0ubmFtZSwgIkEiKQ0KICAgICsgICAgdmVyaWZ5X2Vx
dWFsKG5vZGVzWzFdLml0ZW0ubmFtZSwgIkIiKQ0KICAgICsgICAgdmVyaWZ5X2VxdWFsKG5vZGVz
WzJdLml0ZW0ubmFtZSwgIkMiKQ0KICAgICsgICAgdmVyaWZ5X2VxdWFsKG5vZGVzWzNdLml0ZW0u
bmFtZSwgIkQiKQ0KICAgICsgICAgdmVyaWZ5X2VxdWFsKG5vZGVzWzRdLnByb21wdFswXSwgIkUi
KQ0KICAgICsgICAgdmVyaWZ5X2VxdWFsKG5vZGVzWzVdLnByb21wdFswXSwgIkYiKQ0KICAgICsg
ICAgdmVyaWZ5X2VxdWFsKG5vZGVzWzZdLnByb21wdFswXSwgIkciKQ0KICAgICsgICAgdmVyaWZ5
X2VxdWFsKG5vZGVzWzddLml0ZW0ubmFtZSwgIkgiKQ0KICAgICsgICAgdmVyaWZ5X2VxdWFsKG5v
ZGVzWzhdLml0ZW0ubmFtZSwgIkkiKQ0KICAgICsgICAgdmVyaWZ5X2VxdWFsKG5vZGVzWzldLml0
ZW0ubmFtZSwgIkoiKQ0KICAgICsgICAgdmVyaWZ5KGxlbihub2RlcykgPT0gMTAsDQogICAgKyAg
ICAgICAgICAgIldyb25nIG51bWJlciBvZiBub2RlcyBhZnRlciAnaWYnIHJlbW92YWwiKQ0KICAg
ICsNCiAgICArDQogICAgKyAgICBwcmludCgiVGVzdGluZyBtdWx0aS5kZWYuIHByb3BlcnR5IGNv
cHlpbmciKQ0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL0tk
ZXBjb3B5Iiwgd2Fybj1GYWxzZSkNCiAgICArDQogICAgKyAgICBkZWYgdmVyaWZ5X3Byb3BzKGRl
c2MsIHByb3BzLCBwcm9wX25hbWVzKToNCiAgICArICAgICAgICBhY3R1YWwgPSBbcHJvcFswXS5u
YW1lIGZvciBwcm9wIGluIHByb3BzXQ0KICAgICsgICAgICAgIGV4cGVjdGVkID0gcHJvcF9uYW1l
cy5zcGxpdCgpDQogICAgKw0KICAgICsgICAgICAgIHZlcmlmeShhY3R1YWwgPT0gZXhwZWN0ZWQs
DQogICAgKyAgICAgICAgICAgICAgICJXcm9uZyB7fSBwcm9wZXJ0aWVzLCBleHBlY3RlZCAne30n
LCBnb3QgJ3t9JyINCiAgICArICAgICAgICAgICAgICAgLmZvcm1hdChkZXNjLCBleHBlY3RlZCwg
YWN0dWFsKSkNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcHJvcHMoImRlZmF1bHQiLCBjLnN5bXNb
Ik1VTFRJREVGIl0uZGVmYXVsdHMsDQogICAgKyAgICAgICAgICAgICAgICAgIkEgQiBDIEQgRSBG
IEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcHJvcHMo
InNlbGVjdCIsIGMuc3ltc1siTVVMVElERUYiXS5zZWxlY3RzLA0KICAgICsgICAgICAgICAgICAg
ICAgICJBQSBCQiBDQyBERCBFRSBGRiBHRyBISCBJSSBKSiIpDQogICAgKw0KICAgICsgICAgdmVy
aWZ5X3Byb3BzKCJpbXBseSIsIGMuc3ltc1siTVVMVElERUYiXS5zZWxlY3RzLA0KICAgICsgICAg
ICAgICAgICAgICAgICJBQSBCQiBDQyBERCBFRSBGRiBHRyBISCBJSSBKSiIpDQogICAgKw0KICAg
ICsgICAgdmVyaWZ5X3Byb3BzKCJzZWxlY3QiLCBjLnN5bXNbIk1VTFRJREVGX0NIT0lDRSJdLnNl
bGVjdHMsDQogICAgKyAgICAgICAgICAgICAgICAgIkEgQiBDIikNCiAgICArDQogICAgKyAgICB2
ZXJpZnlfcHJvcHMoInJhbmdlIiwgYy5zeW1zWyJNVUxUSURFRl9SQU5HRSJdLnJhbmdlcywNCiAg
ICArICAgICAgICAgICAgICAgICAiQSBCIEMgRCBFIEYiKQ0KICAgICsNCiAgICArICAgIHZlcmlm
eV9wcm9wcygiZGVmYXVsdCIsIGMuY2hvaWNlc1sxXS5kZWZhdWx0cywNCiAgICArICAgICAgICAg
ICAgICAgICAiQSBCIEMgRCBFIikNCiAgICArDQogICAgKw0KICAgICsgICAgcHJpbnQoIlRlc3Rp
bmcgZGVwZW5kZW5jeSBsb29wIGRldGVjdGlvbiIpDQogICAgKw0KICAgICsgICAgIyBUaGVzZSBh
cmUgYWxsIGV4cGVjdGVkIHRvIHJhaXNlIGRlcGVuZGVuY3kgbG9vcCBlcnJvcnMNCiAgICArICAg
IGZvciBpIGluIHJhbmdlKDExKToNCiAgICArICAgICAgICBmaWxlbmFtZSA9ICJLY29uZmlnbGli
L3Rlc3RzL0tkZXBsb29wIiArIHN0cihpKQ0KICAgICsgICAgICAgIHRyeToNCiAgICArICAgICAg
ICAgICAgS2NvbmZpZyhmaWxlbmFtZSkNCiAgICArICAgICAgICBleGNlcHQgS2NvbmZpZ0Vycm9y
IGFzIGU6DQogICAgKyAgICAgICAgICAgIGlmICJEZXBlbmRlbmN5IGxvb3AiIG5vdCBpbiBzdHIo
ZSk6DQogICAgKyAgICAgICAgICAgICAgICBmYWlsKCJkZXBlbmRlbmN5IGxvb3AgaW4ge30gcmFp
c2VkIHdyb25nIEtjb25maWdFcnJvciINCiAgICArICAgICAgICAgICAgICAgICAgICAgLmZvcm1h
dChmaWxlbmFtZSkpDQogICAgKyAgICAgICAgZXhjZXB0Og0KICAgICsgICAgICAgICAgICBmYWls
KCJkZXBlbmRlbmN5IGxvb3AgaW4ge30gcmFpc2VkIHdyb25nIGV4Y2VwdGlvbiINCiAgICArICAg
ICAgICAgICAgICAgICAuZm9ybWF0KGZpbGVuYW1lKSkNCiAgICArICAgICAgICBlbHNlOg0KICAg
ICsgICAgICAgICAgICBmYWlsKCJkZXBlbmRlbmN5IGxvb3AgaW4ge30gbm90IGRldGVjdGVkIi5m
b3JtYXQoZmlsZW5hbWUpKQ0KICAgICsNCiAgICArICAgICMgQ2hlY2sgdGhlIG1vc3QgY29tcGxp
Y2F0ZWQgbWVzc2FnZSBjb21wbGV0ZWx5DQogICAgKyAgICB0cnk6DQogICAgKyAgICAgICAgS2Nv
bmZpZygiS2NvbmZpZ2xpYi90ZXN0cy9LZGVwbG9vcDEwIikNCiAgICArICAgIGV4Y2VwdCBLY29u
ZmlnRXJyb3IgYXMgZToNCiAgICArICAgICAgICB2ZXJpZnlfZXF1YWwoc3RyKGUpLCAiIiINCiAg
ICArRGVwZW5kZW5jeSBsb29wDQogICAgKz09PT09PT09PT09PT09PQ0KICAgICsNCiAgICArQSAo
ZGVmaW5lZCBhdCBLY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMTA6MSksIHdpdGggZGVmaW5pdGlv
bi4uLg0KICAgICsNCiAgICArY29uZmlnIEENCiAgICArCWJvb2wNCiAgICArCWRlcGVuZHMgb24g
Qg0KICAgICsNCiAgICArLi4uZGVwZW5kcyBvbiBCIChkZWZpbmVkIGF0IEtjb25maWdsaWIvdGVz
dHMvS2RlcGxvb3AxMDo1KSwgd2l0aCBkZWZpbml0aW9uLi4uDQogICAgKw0KICAgICtjb25maWcg
Qg0KICAgICsJYm9vbA0KICAgICsJZGVwZW5kcyBvbiBDID0gNw0KICAgICsNCiAgICArLi4uZGVw
ZW5kcyBvbiBDIChkZWZpbmVkIGF0IEtjb25maWdsaWIvdGVzdHMvS2RlcGxvb3AxMDo5KSwgd2l0
aCBkZWZpbml0aW9uLi4uDQogICAgKw0KICAgICtjb25maWcgQw0KICAgICsJaW50DQogICAgKwly
YW5nZSBEIDgNCiAgICArDQogICAgKy4uLmRlcGVuZHMgb24gRCAoZGVmaW5lZCBhdCBLY29uZmln
bGliL3Rlc3RzL0tkZXBsb29wMTA6MTMpLCB3aXRoIGRlZmluaXRpb24uLi4NCiAgICArDQogICAg
K2NvbmZpZyBEDQogICAgKwlpbnQNCiAgICArCWRlZmF1bHQgMyBpZiBFDQogICAgKwlkZWZhdWx0
IDgNCiAgICArDQogICAgKy4uLmRlcGVuZHMgb24gRSAoZGVmaW5lZCBhdCBLY29uZmlnbGliL3Rl
c3RzL0tkZXBsb29wMTA6MTgpLCB3aXRoIGRlZmluaXRpb24uLi4NCiAgICArDQogICAgK2NvbmZp
ZyBFDQogICAgKwlib29sDQogICAgKw0KICAgICsoc2VsZWN0LXJlbGF0ZWQgZGVwZW5kZW5jaWVz
OiBGICYmIEcpDQogICAgKw0KICAgICsuLi5kZXBlbmRzIG9uIEcgKGRlZmluZWQgYXQgS2NvbmZp
Z2xpYi90ZXN0cy9LZGVwbG9vcDEwOjI1KSwgd2l0aCBkZWZpbml0aW9uLi4uDQogICAgKw0KICAg
ICtjb25maWcgRw0KICAgICsJYm9vbA0KICAgICsJZGVwZW5kcyBvbiBIDQogICAgKw0KICAgICsu
Li5kZXBlbmRzIG9uIHRoZSBjaG9pY2Ugc3ltYm9sIEggKGRlZmluZWQgYXQgS2NvbmZpZ2xpYi90
ZXN0cy9LZGVwbG9vcDEwOjMyKSwgd2l0aCBkZWZpbml0aW9uLi4uDQogICAgKw0KICAgICtjb25m
aWcgSA0KICAgICsJYm9vbCAiSCINCiAgICArCWRlcGVuZHMgb24gSSAmJiA8Y2hvaWNlPg0KICAg
ICsNCiAgICArLi4uZGVwZW5kcyBvbiB0aGUgY2hvaWNlIHN5bWJvbCBJIChkZWZpbmVkIGF0IEtj
b25maWdsaWIvdGVzdHMvS2RlcGxvb3AxMDo0MSksIHdpdGggZGVmaW5pdGlvbi4uLg0KICAgICsN
CiAgICArY29uZmlnIEkNCiAgICArCWJvb2wgIkkiDQogICAgKwlkZXBlbmRzIG9uIDxjaG9pY2U+
DQogICAgKw0KICAgICsuLi5kZXBlbmRzIG9uIDxjaG9pY2U+IChkZWZpbmVkIGF0IEtjb25maWds
aWIvdGVzdHMvS2RlcGxvb3AxMDozOCksIHdpdGggZGVmaW5pdGlvbi4uLg0KICAgICsNCiAgICAr
Y2hvaWNlDQogICAgKwlib29sICJjaG9pY2UiIGlmIEoNCiAgICArDQogICAgKy4uLmRlcGVuZHMg
b24gSiAoZGVmaW5lZCBhdCBLY29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMTA6NDYpLCB3aXRoIGRl
ZmluaXRpb24uLi4NCiAgICArDQogICAgK2NvbmZpZyBKDQogICAgKwlib29sDQogICAgKwlkZXBl
bmRzIG9uIEENCiAgICArDQogICAgKy4uLmRlcGVuZHMgYWdhaW4gb24gQSAoZGVmaW5lZCBhdCBL
Y29uZmlnbGliL3Rlc3RzL0tkZXBsb29wMTA6MSkNCiAgICArIiIiWzotMV0pDQogICAgKyAgICBl
eGNlcHQ6DQogICAgKyAgICAgICAgZmFpbCgiTG9vcCBkZXRlY3Rpb24gbWVzc2FnZSBjaGVjayBy
YWlzZWQgd3JvbmcgZXhjZXB0aW9uIikNCiAgICArICAgIGVsc2U6DQogICAgKyAgICAgICAgZmFp
bCgiTG9vcCBkZXRlY3Rpb24gbWVzc2FnZSBjaGVjayBkaWQgbm90IHJhaXNlIGV4Y2VwdGlvbiIp
DQogICAgKw0KICAgICsNCiAgICArICAgIHByaW50KCJUZXN0aW5nIHByZXByb2Nlc3NvciIpDQog
ICAgKw0KICAgICsgICAgb3MuZW52aXJvblsiRU5WXzEiXSA9ICJlbnZfMSINCiAgICArICAgIG9z
LmVudmlyb25bIkVOVl8yIl0gPSAiZW52XzIiDQogICAgKyAgICBvcy5lbnZpcm9uWyJFTlZfMyJd
ID0gImVudl8zIg0KICAgICsgICAgb3MuZW52aXJvblsiRU5WXzQiXSA9ICJlbnZfNCINCiAgICAr
ICAgIG9zLmVudmlyb25bIkVOVl81Il0gPSAibiINCiAgICArICAgIG9zLmVudmlyb25bIkVOVl82
Il0gPSAiS2NvbmZpZ2xpYi90ZXN0cy9lbXB0eSINCiAgICArICAgIG9zLmVudmlyb25bIkVOVl83
Il0gPSAiZW52XzciDQogICAgKyAgICAjIFdlIHZlcmlmeSB3YXJuaW5ncyBtYW51YWxseQ0KICAg
ICsgICAgYyA9IEtjb25maWcoIktjb25maWdsaWIvdGVzdHMvS3ByZXByb2Nlc3MiLCB3YXJuX3Rv
X3N0ZGVycj1GYWxzZSkNCiAgICArDQogICAgKyAgICBkZWYgdmVyaWZ5X3ZhcmlhYmxlKG5hbWUs
IHVuZXhwX3ZhbHVlLCBleHBfdmFsdWUsIHJlY3Vyc2l2ZSwgKmFyZ3MpOg0KICAgICsgICAgICAg
IHZhciA9IGMudmFyaWFibGVzW25hbWVdDQogICAgKw0KICAgICsgICAgICAgIHZlcmlmeSh2YXIu
dmFsdWUgPT0gdW5leHBfdmFsdWUsDQogICAgKyAgICAgICAgICAgICAgICJleHBlY3RlZCB2YXJp
YWJsZSAne30nIHRvIGhhdmUgdGhlIHVuZXhwYW5kZWQgdmFsdWUgJ3t9JywgaGFkICINCiAgICAr
ICAgICAgICAgICAgICAgInRoZSB2YWx1ZSAne30nIi5mb3JtYXQobmFtZSwgdW5leHBfdmFsdWUs
IHZhci52YWx1ZSkpDQogICAgKw0KICAgICsgICAgICAgIGlmIG5vdCBhcmdzOg0KICAgICsgICAg
ICAgICAgICB2ZXJpZnkodmFyLmV4cGFuZGVkX3ZhbHVlID09IGV4cF92YWx1ZSwNCiAgICArICAg
ICAgICAgICAgICAgICAgICJleHBlY3RlZCBleHBhbmRlZF92YWx1ZSBmb3Ige30gdG8gYmUgJ3t9
Jywgd2FzICd7fSciDQogICAgKyAgICAgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIGV4cF92
YWx1ZSwgdmFyLmV4cGFuZGVkX3ZhbHVlKSkNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5KHZh
ci5leHBhbmRlZF92YWx1ZV93X2FyZ3MoKmFyZ3MpID09IGV4cF92YWx1ZSwNCiAgICArICAgICAg
ICAgICAgICAgImV4cGVjdGVkIGV4cGFuZGVkX3ZhbHVlX3dfYXJncygpIGZvciAne30nIHRvIGJl
ICd7fScsIHdhcyAne30nIg0KICAgICsgICAgICAgICAgICAgICAuZm9ybWF0KG5hbWUsIGV4cF92
YWx1ZSwgdmFyLmV4cGFuZGVkX3ZhbHVlX3dfYXJncygqYXJncykpKQ0KICAgICsNCiAgICArICAg
ICAgICB2ZXJpZnkodmFyLmlzX3JlY3Vyc2l2ZSA9PSByZWN1cnNpdmUsDQogICAgKyAgICAgICAg
ICAgICAgICJ7fSB3YXMge30sIHNob3VsZG4ndCBiZSINCiAgICArICAgICAgICAgICAgICAgLmZv
cm1hdChuYW1lLCAicmVjdXJzaXZlIiBpZiB2YXIuaXNfcmVjdXJzaXZlIGVsc2UgInNpbXBsZSIp
KQ0KICAgICsNCiAgICArICAgIHZlcmlmeV92YXJpYWJsZSgic2ltcGxlLXJlY3Vyc2l2ZSIsICJm
b28iLCAiZm9vIiwgVHJ1ZSkNCiAgICArICAgIHZlcmlmeV92YXJpYWJsZSgic2ltcGxlLWltbWVk
aWF0ZSIsICJiYXIiLCAiYmFyIiwgRmFsc2UpDQogICAgKyAgICB2ZXJpZnlfdmFyaWFibGUoInNp
bXBsZS1yZWN1cnNpdmUtMiIsICJiYXoiLCAiYmF6IiwgVHJ1ZSkNCiAgICArDQogICAgKyAgICB2
ZXJpZnlfdmFyaWFibGUoIndoaXRlc3BhY2VkIiwgImZvbyIsICJmb28iLCBUcnVlKQ0KICAgICsN
CiAgICArICAgIHZlcmlmeV92YXJpYWJsZSgicHJlc2VydmUtcmVjdXJzaXZlIiwgImZvbyBiYXIi
LCAiZm9vIGJhciIsIFRydWUpDQogICAgKyAgICB2ZXJpZnlfdmFyaWFibGUoInByZXNlcnZlLWlt
bWVkaWF0ZSIsICJmb28gYmFyIiwgImZvbyBiYXIiLCBGYWxzZSkNCiAgICArDQogICAgKyAgICB2
ZXJpZnlfdmFyaWFibGUoInJlY3Vyc2l2ZSIsDQogICAgKyAgICAgICAgICAgICAgICAgICAgIiQo
Zm9vKSAkKGJhcikgJCgkKGItY2hhcilhJCh6LWNoYXIpKSAkKGluZGlyKSIsDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgImFiYyBkZWYgZ2hpIGprbCBtbm8iLA0KICAgICsgICAgICAgICAgICAg
ICAgICAgIFRydWUpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3ZhcmlhYmxlKCJpbW1lZGlhdGUi
LCAiZm9vZm9vIiwgImZvb2ZvbyIsIEZhbHNlKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV92YXJp
YWJsZSgibWVzc3ktZm4tcmVzIiwNCiAgICArICAgICAgICAgICAgICAgICAgICAiJCgkKGZuLWlu
ZGlyKS11bnVzZWQtYXJnLCBhICBiICwgYyAgZCApIiwNCiAgICArICAgICAgICAgICAgICAgICAg
ICAnc3Vycm91bmQtcmV2LXF1b3RlICIgYyAgZCAiICIgYSAgYiAiIHN1cnJvdW5kLXJldi1xdW90
ZSAnLA0KICAgICsgICAgICAgICAgICAgICAgICAgIFRydWUpDQogICAgKw0KICAgICsgICAgdmVy
aWZ5X3ZhcmlhYmxlKCJzcGVjaWFsLWNoYXJzLWZuLXJlcyIsDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgIiQoZm4sJChjb21tYSkkKGRvbGxhcikkKGxlZnQtcGFyZW4pZm9vJChyaWdodC1wYXJl
bikpIiwNCiAgICArICAgICAgICAgICAgICAgICAgICAnIiwkKGZvbykiJywNCiAgICArICAgICAg
ICAgICAgICAgICAgICBUcnVlKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV92YXJpYWJsZSgicXVv
dGUiLCAnIiQoMSkiICIkKDIpIicsICciIiAiIicsIFRydWUpDQogICAgKyAgICB2ZXJpZnlfdmFy
aWFibGUoInF1b3RlIiwgJyIkKDEpIiAiJCgyKSInLCAnIm9uZSIgIiInLCBUcnVlLA0KICAgICsg
ICAgICAgICAgICAgICAgICAgICJvbmUiKQ0KICAgICsgICAgdmVyaWZ5X3ZhcmlhYmxlKCJxdW90
ZSIsICciJCgxKSIgIiQoMikiJywgJyJvbmUiICJ0d28iJywgVHJ1ZSwNCiAgICArICAgICAgICAg
ICAgICAgICAgICAib25lIiwgInR3byIpDQogICAgKyAgICB2ZXJpZnlfdmFyaWFibGUoInF1b3Rl
IiwgJyIkKDEpIiAiJCgyKSInLCAnIm9uZSIgInR3byInLCBUcnVlLA0KICAgICsgICAgICAgICAg
ICAgICAgICAgICJvbmUiLCAidHdvIiwgInRocmVlIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlf
c3RyKGMuc3ltc1siUFJJTlRfTUUiXSwgciIiIg0KICAgICtjb25maWcgUFJJTlRfTUUNCiAgICAr
CXN0cmluZyAiZW52XzEiIGlmIChGT08gJiYgQkFSKSB8fCAhQkFaIHx8ICFRQVoNCiAgICArCWRl
ZmF1bHQgIlwiZm9vXCIiIGlmICJmb28gXCJiYXJcIiBiYXoiID0gIiINCiAgICArIiIiKQ0KICAg
ICsNCiAgICArICAgIHZlcmlmeV9zdHIoYy5zeW1zWyJQUklOVF9NRV9UT08iXSwgciIiIg0KICAg
ICtjb25maWcgUFJJTlRfTUVfVE9PDQogICAgKwlib29sICJmb28iDQogICAgKwlkZWZhdWx0IEZP
T0JBUkJBWlFBWiBpZiBRQVogJiYgUUFaRk9PICYmIHh4eA0KICAgICsiIiIpDQogICAgKw0KICAg
ICsgICAgZGVmIHZlcmlmeV9yZXByKG5hbWUsIHMpOg0KICAgICsgICAgICAgIHZlcmlmeV9lcXVh
bChyZXByKGMudmFyaWFibGVzW25hbWVdKSwgcykNCiAgICArDQogICAgKyAgICB2ZXJpZnlfcmVw
cigNCiAgICArICAgICAgICAic2ltcGxlLWltbWVkaWF0ZSIsDQogICAgKyAgICAgICAgIjx2YXJp
YWJsZSBzaW1wbGUtaW1tZWRpYXRlLCBpbW1lZGlhdGUsIHZhbHVlICdiYXInPiIpDQogICAgKw0K
ICAgICsgICAgdmVyaWZ5X3JlcHIoDQogICAgKyAgICAgICAgIm1lc3N5LWZuLXJlcyIsDQogICAg
KyAgICAgICAgIjx2YXJpYWJsZSBtZXNzeS1mbi1yZXMsIHJlY3Vyc2l2ZSwgdmFsdWUgJyQoJChm
bi1pbmRpciktdW51c2VkLWFyZywgYSAgYiAsIGMgIGQgKSc+IikNCiAgICArDQogICAgKyAgICBk
ZWYgdmVyaWZ5X3JlY3Vyc2l2ZShuYW1lKToNCiAgICArICAgICAgICB0cnk6DQogICAgKyAgICAg
ICAgICAgIGMudmFyaWFibGVzW25hbWVdLmV4cGFuZGVkX3ZhbHVlDQogICAgKyAgICAgICAgZXhj
ZXB0IEtjb25maWdFcnJvcjoNCiAgICArICAgICAgICAgICAgcGFzcw0KICAgICsgICAgICAgIGVs
c2U6DQogICAgKyAgICAgICAgICAgIGZhaWwoIkV4cGVjdGVkICd7fScgZXhwYW5zaW9uIHRvIGZs
YWcgcmVjdXJzaXZlIGV4cGFuc2lvbiwgZGlkbid0Ig0KICAgICsgICAgICAgICAgICAgICAgIC5m
b3JtYXQobmFtZSkpDQogICAgKw0KICAgICsgICAgdmVyaWZ5X3JlY3Vyc2l2ZSgicmVjLTEiKQ0K
ICAgICsgICAgIyBJbmRpcmVjdGx5IHZlcmlmaWVzIHRoYXQgaXQncyBub3QgcmVjdXJzaXZlDQog
ICAgKyAgICB2ZXJpZnlfdmFyaWFibGUoInNhZmUtZm4tcmVjLXJlcyIsDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgIiQoc2FmZS1mbi1yZWMsc2FmZS1mbi1yZWMtMikiLA0KICAgICsgICAgICAg
ICAgICAgICAgICAgICJmb28iLA0KICAgICsgICAgICAgICAgICAgICAgICAgIFRydWUpDQogICAg
KyAgICB2ZXJpZnlfcmVjdXJzaXZlKCJ1bnNhZmUtZm4tcmVjIikNCiAgICArDQogICAgKyAgICB2
ZXJpZnlfdmFyaWFibGUoImZvby1iYXItYmF6IiwgIiQocmhzKSIsICJ2YWx1ZSIsIFRydWUpDQog
ICAgKw0KICAgICsgICAgdmVyaWZ5X3ZhcmlhYmxlKCJzcGFjZS12YXItcmVzIiwgIiQoZm9vIGJh
cikiLCAidmFsdWUiLCBUcnVlKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV92YXJpYWJsZSgic2hl
bGwtcmVzIiwNCiAgICArICAgICAgICAgICAgICAgICAgICAiJChzaGVsbCxmYWxzZSAmJiBlY2hv
IGZvbyBiYXIgfHwgZWNobyBiYXogcWF6KSIsDQogICAgKyAgICAgICAgICAgICAgICAgICAgImJh
eiBxYXoiLA0KICAgICsgICAgICAgICAgICAgICAgICAgIFRydWUpDQogICAgKw0KICAgICsgICAg
dmVyaWZ5X3ZhcmlhYmxlKCJzaGVsbC1zdGRlcnItcmVzIiwgIiIsICIiLCBGYWxzZSkNCiAgICAr
DQogICAgKyAgICB2ZXJpZnlfdmFyaWFibGUoImxvY2F0aW9uLXJlcyIsDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgIktjb25maWdsaWIvdGVzdHMvS3ByZXByb2Nlc3M6MTI1IiwNCiAgICArICAg
ICAgICAgICAgICAgICAgICAiS2NvbmZpZ2xpYi90ZXN0cy9LcHJlcHJvY2VzczoxMjUiLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgIEZhbHNlKQ0KICAgICsNCiAgICArICAgIHZlcmlmeV92YXJp
YWJsZSgid2FybmluZy1yZXMiLCAiIiwgIiIsIEZhbHNlKQ0KICAgICsgICAgdmVyaWZ5X3Zhcmlh
YmxlKCJlcnJvci1uLXJlcyIsICIiLCAiIiwgRmFsc2UpDQogICAgKw0KICAgICsgICAgdHJ5Og0K
ICAgICsgICAgICAgIGMudmFyaWFibGVzWyJlcnJvci15LXJlcyJdLmV4cGFuZGVkX3ZhbHVlDQog
ICAgKyAgICBleGNlcHQgS2NvbmZpZ0Vycm9yOg0KICAgICsgICAgICAgIHBhc3MNCiAgICArICAg
IGVsc2U6DQogICAgKyAgICAgICAgZmFpbCgiZXhwYW5kaW5nIGVycm9yLXktcmVzIGRpZG4ndCBy
YWlzZSBhbiBleGNlcHRpb24iKQ0KICAgICsNCiAgICArICAgICMgQ2hlY2sgS2NvbmZpZy5lbnZf
dmFycw0KICAgICsgICAgdmVyaWZ5X2VxdWFsKGMuZW52X3ZhcnMsDQogICAgKyAgICAgICAgICAg
ICAgICAgc2V0KCgiRU5WXzEiLCAiRU5WXzIiLCAiRU5WXzMiLCAiRU5WXzQiLCAiRU5WXzUiLCAi
RU5WXzYiKSkpDQogICAgKw0KICAgICsgICAgIyBDaGVjayB0aGF0IHRoZSBleHBlY3RlZCB3YXJu
aW5ncyB3ZXJlIGdlbmVyYXRlZA0KICAgICsgICAgdmVyaWZ5X2VxdWFsKGMud2FybmluZ3MsIFsN
CiAgICArICAgICAgICAiS2NvbmZpZ2xpYi90ZXN0cy9LcHJlcHJvY2VzczoxMjI6IHdhcm5pbmc6
ICdlY2hvIG1lc3NhZ2Ugb24gc3RkZXJyID4mMicgd3JvdGUgdG8gc3RkZXJyOiBtZXNzYWdlIG9u
IHN0ZGVyciIsDQogICAgKyAgICAgICAgIktjb25maWdsaWIvdGVzdHMvS3ByZXByb2Nlc3M6MTMw
OiB3YXJuaW5nOiBhIHdhcm5pbmciDQogICAgKyAgICBdKQ0KICAgICsNCiAgICArDQogICAgKyAg
ICBwcmludCgiVGVzdGluZyB1c2VyLWRlZmluZWQgcHJlcHJvY2Vzc29yIGZ1bmN0aW9ucyIpDQog
ICAgKw0KICAgICsgICAgIyBNYWtlIEtjb25maWdsaWIvdGVzdHMva2NvbmZpZ2Z1bmN0aW9ucy5w
eSBpbXBvcnRhYmxlDQogICAgKyAgICBzeXMucGF0aC5pbnNlcnQoMCwgIktjb25maWdsaWIvdGVz
dHMiKQ0KICAgICsNCiAgICArICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGliL3Rlc3RzL0t1c2Vy
ZnVuY3Rpb25zIikNCiAgICArDQogICAgKyAgICB2ZXJpZnlfdmFyaWFibGUoImFkZC16ZXJvIiwg
ICIkKGFkZCkiLCAgICAgICAgICAiMCIsIFRydWUpDQogICAgKyAgICB2ZXJpZnlfdmFyaWFibGUo
ImFkZC1vbmUiLCAgICIkKGFkZCwxKSIsICAgICAgICAiMSIsIFRydWUpDQogICAgKyAgICB2ZXJp
ZnlfdmFyaWFibGUoImFkZC10aHJlZSIsICIkKGFkZCwxLC0xLDIsMSkiLCAiMyIsIFRydWUpDQog
ICAgKw0KICAgICsgICAgdmVyaWZ5X3ZhcmlhYmxlKCJvbmUtb25lIiwgIiQob25lLGZvbyBiYXIp
IiwgIm9uZWZvbyBiYXJmb28gYmFyIiwgVHJ1ZSkNCiAgICArDQogICAgKyAgICB2ZXJpZnlfdmFy
aWFibGUoIm9uZS1vci1tb3JlLW9uZSIsICIkKG9uZS1vci1tb3JlLGZvbykiLCAiZm9vICsgIiwg
VHJ1ZSkNCiAgICArICAgIHZlcmlmeV92YXJpYWJsZSgib25lLW9yLW1vcmUtdGhyZWUiLCAiJChv
bmUtb3ItbW9yZSxmb28sYmFyLGJheikiLA0KICAgICsgICAgICAgICAgICAgICAgICAgICJmb28g
KyBiYXIsYmF6IiwgVHJ1ZSkNCiAgICArDQogICAgKyAgICBkZWYgdmVyaWZ5X2JhZF9hcmdubyhu
YW1lKToNCiAgICArICAgICAgICB0cnk6DQogICAgKyAgICAgICAgICAgIGMudmFyaWFibGVzW25h
bWVdLmV4cGFuZGVkX3ZhbHVlDQogICAgKyAgICAgICAgZXhjZXB0IEtjb25maWdFcnJvcjoNCiAg
ICArICAgICAgICAgICAgcGFzcw0KICAgICsgICAgICAgIGVsc2U6DQogICAgKyAgICAgICAgICAg
IGZhaWwoIkV4cGVjdGVkICd7fScgZXhwYW5zaW9uIHRvIGZsYWcgd3JvbmcgbnVtYmVyIG9mIGFy
Z3VtZW50cywgIg0KICAgICsgICAgICAgICAgICAgICAgICJkaWRuJ3QiLmZvcm1hdChuYW1lKSkN
CiAgICArDQogICAgKyAgICB2ZXJpZnlfYmFkX2FyZ25vKCJvbmUtemVybyIpDQogICAgKyAgICB2
ZXJpZnlfYmFkX2FyZ25vKCJvbmUtdHdvIikNCiAgICArICAgIHZlcmlmeV9iYWRfYXJnbm8oIm9u
ZS1vci1tb3JlLXplcm8iKQ0KICAgICsNCiAgICArICAgIHN5cy5wYXRoLnBvcCgwKQ0KICAgICsN
CiAgICArICAgICMgVGhpcyB0ZXN0IGNhbiBmYWlsIG9uIG9sZGVyIFB5dGhvbiAzLnggdmVyc2lv
bnMsIGJlY2F1c2UgdGhleSBkb24ndA0KICAgICsgICAgIyBwcmVzZXJ2ZSBkaWN0IGluc2VydGlv
biBvcmRlciBkdXJpbmcgaXRlcmF0aW9uLiBUaGUgb3V0cHV0IGlzIHN0aWxsDQogICAgKyAgICAj
IGNvcnJlY3QsIGp1c3QgZGlmZmVyZW50Lg0KICAgICsgICAgaWYgbm90ICgzLCAwKSA8PSBzeXMu
dmVyc2lvbl9pbmZvIDw9ICgzLCA1KToNCiAgICArICAgICAgICBwcmludCgiVGVzdGluZyBLQ09O
RklHX1dBUk5fVU5ERUYiKQ0KICAgICsNCiAgICArICAgICAgICBvcy5lbnZpcm9uWyJLQ09ORklH
X1dBUk5fVU5ERUYiXSA9ICJ5Ig0KICAgICsgICAgICAgIGMgPSBLY29uZmlnKCJLY29uZmlnbGli
L3Rlc3RzL0t1bmRlZiIsIHdhcm5fdG9fc3RkZXJyPUZhbHNlKQ0KICAgICsNCiAgICArICAgICAg
ICB2ZXJpZnlfZXF1YWwoIlxuIi5qb2luKGMud2FybmluZ3MpLCAiIiINCiAgICArd2FybmluZzog
dGhlIGludCBzeW1ib2wgSU5UIChkZWZpbmVkIGF0IEtjb25maWdsaWIvdGVzdHMvS3VuZGVmOjgp
IGhhcyBhIG5vbi1pbnQgcmFuZ2UgW1VOREVGXzIgKHVuZGVmaW5lZCksIDggKHVuZGVmaW5lZCld
DQogICAgK3dhcm5pbmc6IHVuZGVmaW5lZCBzeW1ib2wgVU5ERUZfMToNCiAgICArDQogICAgKy0g
UmVmZXJlbmNlZCBhdCBLY29uZmlnbGliL3Rlc3RzL0t1bmRlZjo0Og0KICAgICsNCiAgICArY29u
ZmlnIEJPT0wNCiAgICArCWJvb2wgImZvbyIgaWYgREVGIHx8ICFVTkRFRl8xDQogICAgKwlkZWZh
dWx0IFVOREVGXzINCiAgICArDQogICAgKy0gUmVmZXJlbmNlZCBhdCBLY29uZmlnbGliL3Rlc3Rz
L0t1bmRlZjoxOToNCiAgICArDQogICAgK21lbnUgIm1lbnUiDQogICAgKwlkZXBlbmRzIG9uIFVO
REVGXzENCiAgICArCXZpc2libGUgaWYgVU5ERUZfMw0KICAgICt3YXJuaW5nOiB1bmRlZmluZWQg
c3ltYm9sIFVOREVGXzI6DQogICAgKw0KICAgICstIFJlZmVyZW5jZWQgYXQgS2NvbmZpZ2xpYi90
ZXN0cy9LdW5kZWY6NDoNCiAgICArDQogICAgK2NvbmZpZyBCT09MDQogICAgKwlib29sICJmb28i
IGlmIERFRiB8fCAhVU5ERUZfMQ0KICAgICsJZGVmYXVsdCBVTkRFRl8yDQogICAgKw0KICAgICst
IFJlZmVyZW5jZWQgYXQgS2NvbmZpZ2xpYi90ZXN0cy9LdW5kZWY6ODoNCiAgICArDQogICAgK2Nv
bmZpZyBJTlQNCiAgICArCWludA0KICAgICsJcmFuZ2UgVU5ERUZfMiA4DQogICAgKwlyYW5nZSA1
IDE1DQogICAgKwlkZWZhdWx0IDEwDQogICAgK3dhcm5pbmc6IHVuZGVmaW5lZCBzeW1ib2wgVU5E
RUZfMzoNCiAgICArDQogICAgKy0gUmVmZXJlbmNlZCBhdCBLY29uZmlnbGliL3Rlc3RzL0t1bmRl
ZjoxOToNCiAgICArDQogICAgK21lbnUgIm1lbnUiDQogICAgKwlkZXBlbmRzIG9uIFVOREVGXzEN
CiAgICArCXZpc2libGUgaWYgVU5ERUZfMw0KICAgICsiIiJbMTotMV0pDQogICAgKw0KICAgICsg
ICAgICAgIG9zLmVudmlyb24ucG9wKCJLQ09ORklHX1dBUk5fVU5ERUYiKQ0KICAgICsNCiAgICAr
DQogICAgKyAgICBwcmludCgiXG5BbGwgc2VsZnRlc3RzIHBhc3NlZFxuIiBpZiBhbGxfcGFzc2Vk
IGVsc2UNCiAgICArICAgICAgICAgICJcblNvbWUgc2VsZnRlc3RzIGZhaWxlZFxuIikNCiAgICAr
DQogICAgKw0KICAgICtkZWYgcnVuX2NvbXBhdGliaWxpdHlfdGVzdHMoKToNCiAgICArICAgICMg
UnVucyB0ZXN0cyBvbiBjb25maWd1cmF0aW9ucyBmcm9tIHRoZSBrZXJuZWwuIFRlc3RzIGNvbXBh
YmlsaXR5IHdpdGggdGhlDQogICAgKyAgICAjIEMgaW1wbGVtZW50YXRpb24gYnkgY29tcGFyaW5n
IG91dHB1dHMuDQogICAgKw0KICAgICsgICAgIyBSZWZlcmVuY2VkIGluc2lkZSB0aGUga2VybmVs
IEtjb25maWcgZmlsZXMuDQogICAgKyAgICAjDQogICAgKyAgICAjIFRoZSBzdHIoKSBtYWtlcyB0
aGUgdHlwZSBvZiB0aGUgdmFsdWUgJ3N0cicgb24gYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMs
DQogICAgKyAgICAjIHdoaWNoIGlzIG5pY2UgZm9yIHNvbWUgbGF0ZXIgZGljdGlvbmFyeSBrZXkg
c2FuaXR5IGNoZWNrcy4NCiAgICArDQogICAgKyAgICBvcy5lbnZpcm9uWyJLRVJORUxWRVJTSU9O
Il0gPSBzdHIoDQogICAgKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoIm1ha2Uga2Vy
bmVsdmVyc2lvbiIsIHNoZWxsPVRydWUpDQogICAgKyAgICAgICAgICAgIC5kZWNvZGUoInV0Zi04
IikucnN0cmlwKCkNCiAgICArICAgICkNCiAgICArDQogICAgKyAgICBvcy5lbnZpcm9uWyJDQ19W
RVJTSU9OX1RFWFQiXSA9IHN0cigNCiAgICArICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX291dHB1
dCgiZ2NjIC0tdmVyc2lvbiB8IGhlYWQgLW4xIiwgc2hlbGw9VHJ1ZSkNCiAgICArICAgICAgICAg
ICAgLmRlY29kZSgidXRmLTgiKS5yc3RyaXAoKQ0KICAgICsgICAgKQ0KICAgICsNCiAgICArICAg
IG9zLmVudmlyb25bInNyY3RyZWUiXSA9ICIuIg0KICAgICsgICAgb3MuZW52aXJvblsiQ0MiXSA9
ICJnY2MiDQogICAgKyAgICBvcy5lbnZpcm9uWyJMRCJdID0gImxkIg0KICAgICsNCiAgICArDQog
ICAgKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoInNjcmlwdHMva2NvbmZpZy9jb25mIik6DQog
ICAgKyAgICAgICAgcHJpbnQoIlxuc2NyaXB0cy9rY29uZmlnL2NvbmYgZG9lcyBub3QgZXhpc3Qg
LS0gcnVubmluZyAiDQogICAgKyAgICAgICAgICAgICAgIidtYWtlIGFsbG5vY29uZmlnJyB0byBi
dWlsZCBpdC4uLiIpDQogICAgKyAgICAgICAgc2hlbGwoIm1ha2UgYWxsbm9jb25maWciKQ0KICAg
ICsNCiAgICArDQogICAgKyAgICBwcmludCgiUnVubmluZyBjb21wYXRpYmlsaXR5IHRlc3RzLi4u
XG4iKQ0KICAgICsNCiAgICArICAgIHRlc3RfZm5zID0gKHRlc3RfZGVmY29uZmlnLA0KICAgICsg
ICAgICAgICAgICAgICAgIyBGYWlscyBmb3IgYSBmZXcgZGVmY29uZmlncyBkdWUgdG8gYSBidWcg
aW4gdGhlIEMgdG9vbHMuIFdpbGwNCiAgICArICAgICAgICAgICAgICAgICMgYmUgZW5hYmxlZCBv
bmNlIHBhdGNoZXMgZ2V0IGluLg0KICAgICsgICAgICAgICAgICAgICAgI3Rlc3RfbWluX2NvbmZp
ZywNCiAgICArICAgICAgICAgICAgICAgIHRlc3RfYWxsZGVmY29uZmlnLA0KICAgICsgICAgICAg
ICAgICAgICAgdGVzdF9hbGxub2NvbmZpZywNCiAgICArICAgICAgICAgICAgICAgIHRlc3RfYWxs
bm9jb25maWdfd2FsaywNCiAgICArICAgICAgICAgICAgICAgIHRlc3RfYWxsbW9kY29uZmlnLA0K
ICAgICsgICAgICAgICAgICAgICAgdGVzdF9hbGx5ZXNjb25maWcsDQogICAgKyAgICAgICAgICAg
ICAgICB0ZXN0X3Nhbml0eSkNCiAgICArDQogICAgKyAgICBmb3IgdGVzdF9mbiBpbiB0ZXN0X2Zu
czoNCiAgICArICAgICAgICAjIFRoZSB0ZXN0IGRlc2NyaXB0aW9uIGlzIHRha2VuIGZyb20gdGhl
IGRvY3N0cmluZyBvZiB0aGUgY29ycmVzcG9uZGluZw0KICAgICsgICAgICAgICMgZnVuY3Rpb24N
CiAgICArICAgICAgICBwcmludCh0ZXh0d3JhcC5kZWRlbnQodGVzdF9mbi5fX2RvY19fKSkNCiAg
ICArDQogICAgKyAgICAgICAgZm9yIGFyY2gsIHNyY2FyY2ggaW4gYWxsX2FyY2hfc3JjYXJjaCgp
Og0KICAgICsgICAgICAgICAgICAjIFJlZmVyZW5jZWQgaW5zaWRlIHRoZSBLY29uZmlnIGZpbGVz
DQogICAgKyAgICAgICAgICAgIG9zLmVudmlyb25bIkFSQ0giXSA9IGFyY2gNCiAgICArICAgICAg
ICAgICAgb3MuZW52aXJvblsiU1JDQVJDSCJdID0gc3JjYXJjaA0KICAgICsNCiAgICArICAgICAg
ICAgICAgcm1fY29uZmlncygpDQogICAgKw0KICAgICsgICAgICAgICAgICB0ZXN0X2ZuKGFyY2gs
IHNyY2FyY2gpDQogICAgKw0KICAgICsgICAgaWYgYWxsX3Bhc3NlZDoNCiAgICArICAgICAgICBw
cmludCgiQWxsIHNlbGZ0ZXN0cyBhbmQgY29tcGF0aWJpbGl0eSB0ZXN0cyBwYXNzZWQiKQ0KICAg
ICsgICAgZWxzZToNCiAgICArICAgICAgICBzeXMuZXhpdCgiU29tZSB0ZXN0cyBmYWlsZWQiKQ0K
ICAgICsNCiAgICArDQogICAgK2RlZiBhbGxfYXJjaF9zcmNhcmNoKCk6DQogICAgKyAgICBmb3Ig
c3JjYXJjaCBpbiBvcy5saXN0ZGlyKCJhcmNoIik6DQogICAgKyAgICAgICAgIyBhcmMgYW5kIGg4
MzAwIGFyZSBjdXJyZW50bHkgYnJva2VuIHdpdGggdGhlIEMgdG9vbHMgb24gbGludXgtbmV4dCBh
cw0KICAgICsgICAgICAgICMgd2VsbC4gUGVyaGFwcyB0aGV5IHJlcXVpcmUgY3Jvc3MtY29tcGls
ZXJzIHRvIGJlIGluc3RhbGxlZC4NCiAgICArICAgICAgICAjDQogICAgKyAgICAgICAgIyBVc2Vy
LW1vZGUgTGludXggaGFzIGFuIHVub3J0aG9kb3ggS2NvbmZpZyBzZXR1cCB0aGF0IHdvdWxkIHJl
cXVpcmUgYQ0KICAgICsgICAgICAgICMgZGlmZmVyZW50IHRlc3Rpbmcgc2V0dXAuIFNraXAgaXQg
dG9vLg0KICAgICsgICAgICAgIGlmIHNyY2FyY2ggaW4gKCJhcmMiLCAiaDgzMDAiLCAidW0iKToN
CiAgICArICAgICAgICAgICAgY29udGludWUNCiAgICArDQogICAgKyAgICAgICAgaWYgb3MucGF0
aC5leGlzdHMob3MucGF0aC5qb2luKCJhcmNoIiwgc3JjYXJjaCwgIktjb25maWciKSk6DQogICAg
KyAgICAgICAgICAgIHlpZWxkIChzcmNhcmNoLCBzcmNhcmNoKQ0KICAgICsNCiAgICArICAgICMg
U29tZSBhcmNoZXMgZGVmaW5lIGFkZGl0aW9uYWwgQVJDSCBzZXR0aW5ncyB3aXRoIEFSQ0ggIT0g
U1JDQVJDSA0KICAgICsgICAgIyAoc2VhcmNoIGZvciAiQWRkaXRpb25hbCBBUkNIIHNldHRpbmdz
IGZvciIgaW4gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZSkNCiAgICArDQogICAgKyAgICB5aWVsZCAo
ImkzODYiLCAieDg2IikNCiAgICArICAgIHlpZWxkICgieDg2XzY0IiwgIng4NiIpDQogICAgKw0K
ICAgICsgICAgeWllbGQgKCJzcGFyYzMyIiwgInNwYXJjIikNCiAgICArICAgIHlpZWxkICgic3Bh
cmM2NCIsICJzcGFyYyIpDQogICAgKw0KICAgICsgICAgeWllbGQgKCJzaDY0IiwgInNoIikNCiAg
ICArDQogICAgKw0KICAgICtkZWYgdGVzdF9hbGxub2NvbmZpZyhhcmNoLCBzcmNhcmNoKToNCiAg
ICArICAgICIiIg0KICAgICsgICAgVmVyaWZ5IHRoYXQgYWxsbm9jb25maWcucHkgZ2VuZXJhdGVz
IHRoZSBzYW1lIC5jb25maWcgYXMNCiAgICArICAgICdtYWtlIGFsbG5vY29uZmlnJywgZm9yIGVh
Y2ggYXJjaGl0ZWN0dXJlLiBSdW5zIHRoZSBzY3JpcHQgdmlhDQogICAgKyAgICAnbWFrZSBzY3Jp
cHRjb25maWcnLg0KICAgICsgICAgIiIiDQogICAgKyAgICBzaGVsbCgibWFrZSBzY3JpcHRjb25m
aWcgU0NSSVBUPUtjb25maWdsaWIvYWxsbm9jb25maWcucHkgIg0KICAgICsgICAgICAgICAgIlBZ
VEhPTkNNRD0ne30nIi5mb3JtYXQoc3lzLmV4ZWN1dGFibGUpKQ0KICAgICsgICAgc2hlbGwoIm12
IC5jb25maWcgLl9jb25maWciKQ0KICAgICsgICAgc2hlbGwoInNjcmlwdHMva2NvbmZpZy9jb25m
IC0tYWxsbm9jb25maWcgS2NvbmZpZyIpDQogICAgKw0KICAgICsgICAgY29tcGFyZV9jb25maWdz
KGFyY2gpDQogICAgKw0KICAgICsNCiAgICArZGVmIHRlc3RfYWxsbm9jb25maWdfd2FsayhhcmNo
LCBzcmNhcmNoKToNCiAgICArICAgICIiIg0KICAgICsgICAgVmVyaWZ5IHRoYXQgZXhhbXBsZXMv
YWxsbm9jb25maWdfd2Fsay5weSBnZW5lcmF0ZXMgdGhlIHNhbWUgLmNvbmZpZyBhcw0KICAgICsg
ICAgJ21ha2UgYWxsbm9jb25maWcnLCBmb3IgZWFjaCBhcmNoaXRlY3R1cmUuIFJ1bnMgdGhlIHNj
cmlwdCB2aWENCiAgICArICAgICdtYWtlIHNjcmlwdGNvbmZpZycuDQogICAgKyAgICAiIiINCiAg
ICArICAgIHNoZWxsKCJtYWtlIHNjcmlwdGNvbmZpZyBTQ1JJUFQ9S2NvbmZpZ2xpYi9leGFtcGxl
cy9hbGxub2NvbmZpZ193YWxrLnB5ICINCiAgICArICAgICAgICAgICJQWVRIT05DTUQ9J3t9JyIu
Zm9ybWF0KHN5cy5leGVjdXRhYmxlKSkNCiAgICArICAgIHNoZWxsKCJtdiAuY29uZmlnIC5fY29u
ZmlnIikNCiAgICArICAgIHNoZWxsKCJzY3JpcHRzL2tjb25maWcvY29uZiAtLWFsbG5vY29uZmln
IEtjb25maWciKQ0KICAgICsNCiAgICArICAgIGNvbXBhcmVfY29uZmlncyhhcmNoKQ0KICAgICsN
CiAgICArDQogICAgK2RlZiB0ZXN0X2FsbG1vZGNvbmZpZyhhcmNoLCBzcmNhcmNoKToNCiAgICAr
ICAgICIiIg0KICAgICsgICAgVmVyaWZ5IHRoYXQgYWxsbW9kY29uZmlnLnB5IGdlbmVyYXRlcyB0
aGUgc2FtZSAuY29uZmlnIGFzDQogICAgKyAgICAnbWFrZSBhbGxtb2Rjb25maWcnLCBmb3IgZWFj
aCBhcmNoaXRlY3R1cmUuIFJ1bnMgdGhlIHNjcmlwdCB2aWENCiAgICArICAgICdtYWtlIHNjcmlw
dGNvbmZpZycuDQogICAgKyAgICAiIiINCiAgICArICAgIHNoZWxsKCJtYWtlIHNjcmlwdGNvbmZp
ZyBTQ1JJUFQ9S2NvbmZpZ2xpYi9hbGxtb2Rjb25maWcucHkgIg0KICAgICsgICAgICAgICAgIlBZ
VEhPTkNNRD0ne30nIi5mb3JtYXQoc3lzLmV4ZWN1dGFibGUpKQ0KICAgICsgICAgc2hlbGwoIm12
IC5jb25maWcgLl9jb25maWciKQ0KICAgICsgICAgc2hlbGwoInNjcmlwdHMva2NvbmZpZy9jb25m
IC0tYWxsbW9kY29uZmlnIEtjb25maWciKQ0KICAgICsNCiAgICArICAgIGNvbXBhcmVfY29uZmln
cyhhcmNoKQ0KICAgICsNCiAgICArDQogICAgK2RlZiB0ZXN0X2FsbHllc2NvbmZpZyhhcmNoLCBz
cmNhcmNoKToNCiAgICArICAgICIiIg0KICAgICsgICAgVmVyaWZ5IHRoYXQgYWxseWVzY29uZmln
LnB5IGdlbmVyYXRlcyB0aGUgc2FtZSAuY29uZmlnIGFzDQogICAgKyAgICAnbWFrZSBhbGx5ZXNj
b25maWcnLCBmb3IgZWFjaCBhcmNoaXRlY3R1cmUuIFJ1bnMgdGhlIHNjcmlwdCB2aWENCiAgICAr
ICAgICdtYWtlIHNjcmlwdGNvbmZpZycuDQogICAgKyAgICAiIiINCiAgICArICAgIHNoZWxsKCJt
YWtlIHNjcmlwdGNvbmZpZyBTQ1JJUFQ9S2NvbmZpZ2xpYi9hbGx5ZXNjb25maWcucHkgIg0KICAg
ICsgICAgICAgICAgIlBZVEhPTkNNRD0ne30nIi5mb3JtYXQoc3lzLmV4ZWN1dGFibGUpKQ0KICAg
ICsgICAgc2hlbGwoIm12IC5jb25maWcgLl9jb25maWciKQ0KICAgICsgICAgc2hlbGwoInNjcmlw
dHMva2NvbmZpZy9jb25mIC0tYWxseWVzY29uZmlnIEtjb25maWciKQ0KICAgICsNCiAgICArICAg
IGNvbXBhcmVfY29uZmlncyhhcmNoKQ0KICAgICsNCiAgICArDQogICAgK2RlZiB0ZXN0X3Nhbml0
eShhcmNoLCBzcmNhcmNoKToNCiAgICArICAgICIiIg0KICAgICsgICAgRG8gc2FuaXR5IGNoZWNr
cyBvbiBlYWNoIGNvbmZpZ3VyYXRpb24gYW5kIGNhbGwgYWxsIHB1YmxpYyBtZXRob2RzIG9uIGFs
bA0KICAgICsgICAgc3ltYm9scywgY2hvaWNlcywgYW5kIG1lbnUgbm9kZXMgZm9yIGFsbCBhcmNo
aXRlY3R1cmVzIHRvIG1ha2Ugc3VyZSB3ZQ0KICAgICsgICAgbmV2ZXIgY3Jhc2ggb3IgaGFuZy4N
CiAgICArICAgICIiIg0KICAgICsgICAgcHJpbnQoIkZvciB7fS4uLiIuZm9ybWF0KGFyY2gpKQ0K
ICAgICsNCiAgICArICAgIGtjb25mID0gS2NvbmZpZygpDQogICAgKw0KICAgICsgICAgZm9yIHN5
bSBpbiBrY29uZi5kZWZpbmVkX3N5bXM6DQogICAgKyAgICAgICAgdmVyaWZ5KHN5bS5fdmlzaXRl
ZCA9PSAyLA0KICAgICsgICAgICAgICAgICAgICAie30gaGFzIGJyb2tlbiBkZXBlbmRlbmN5IGxv
b3AgZGV0ZWN0aW9uIChfdmlzaXRlZCA9IHt9KSINCiAgICArICAgICAgICAgICAgICAgLmZvcm1h
dChzeW0ubmFtZSwgc3ltLl92aXNpdGVkKSkNCiAgICArDQogICAgKyAgICBrY29uZi5tb2R1bGVz
DQogICAgKyAgICBrY29uZi5kZWZjb25maWdfbGlzdA0KICAgICsgICAga2NvbmYuZGVmY29uZmln
X2ZpbGVuYW1lDQogICAgKw0KICAgICsgICAgIyBMZWdhY3kgd2FybmluZyBmdW5jdGlvbnMNCiAg
ICArICAgIGtjb25mLmVuYWJsZV9yZWR1bl93YXJuaW5ncygpDQogICAgKyAgICBrY29uZi5kaXNh
YmxlX3JlZHVuX3dhcm5pbmdzKCkNCiAgICArICAgIGtjb25mLmVuYWJsZV91bmRlZl93YXJuaW5n
cygpDQogICAgKyAgICBrY29uZi5kaXNhYmxlX3VuZGVmX3dhcm5pbmdzKCkNCiAgICArICAgIGtj
b25mLmVuYWJsZV93YXJuaW5ncygpDQogICAgKyAgICBrY29uZi5kaXNhYmxlX3dhcm5pbmdzKCkN
CiAgICArICAgIGtjb25mLmVuYWJsZV9zdGRlcnJfd2FybmluZ3MoKQ0KICAgICsgICAga2NvbmYu
ZGlzYWJsZV9zdGRlcnJfd2FybmluZ3MoKQ0KICAgICsNCiAgICArICAgIGtjb25mLm1haW5tZW51
X3RleHQNCiAgICArICAgIGtjb25mLnVuc2V0X3ZhbHVlcygpDQogICAgKw0KICAgICsgICAga2Nv
bmYud3JpdGVfYXV0b2NvbmYoIi9kZXYvbnVsbCIpDQogICAgKw0KICAgICsgICAgIyBObyB0ZW1w
ZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkgaW4gUHl0aG9uIDINCiAgICArICAgIHRtcGRpciA9IHRl
bXBmaWxlLm1rZHRlbXAoKQ0KICAgICsgICAga2NvbmYuc3luY19kZXBzKG9zLnBhdGguam9pbih0
bXBkaXIsICJkZXBzIikpICAjIENyZWF0ZQ0KICAgICsgICAga2NvbmYuc3luY19kZXBzKG9zLnBh
dGguam9pbih0bXBkaXIsICJkZXBzIikpICAjIFVwZGF0ZQ0KICAgICsgICAgc2h1dGlsLnJtdHJl
ZSh0bXBkaXIpDQogICAgKw0KICAgICsgICAgIyBQeXRob24gMi8zIGNvbXBhdGlibGUNCiAgICAr
ICAgIGZvciBrZXksIHN5bSBpbiBrY29uZi5zeW1zLml0ZW1zKCk6DQogICAgKyAgICAgICAgdmVy
aWZ5KGlzaW5zdGFuY2Uoa2V5LCBzdHIpLCAid2VpcmQga2V5ICd7fScgaW4gc3ltcyBkaWN0Ii5m
b3JtYXQoa2V5KSkNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5KG5vdCBzeW0uaXNfY29uc3Rh
bnQsIHN5bS5uYW1lICsgIiBpbiAnc3ltcycgYW5kIGNvbnN0YW50IikNCiAgICArDQogICAgKyAg
ICAgICAgdmVyaWZ5KHN5bSBub3QgaW4ga2NvbmYuY29uc3Rfc3ltcywNCiAgICArICAgICAgICAg
ICAgICAgc3ltLm5hbWUgKyAiIGluIGJvdGggJ3N5bXMnIGFuZCAnY29uc3Rfc3ltcyciKQ0KICAg
ICsNCiAgICArICAgICAgICBmb3IgZGVwIGluIHN5bS5fZGVwZW5kZW50czoNCiAgICArICAgICAg
ICAgICAgdmVyaWZ5KG5vdCBkZXAuaXNfY29uc3RhbnQsDQogICAgKyAgICAgICAgICAgICAgICAg
ICAidGhlIGNvbnN0YW50IHN5bWJvbCB7fSBkZXBlbmRzIG9uIHt9Ig0KICAgICsgICAgICAgICAg
ICAgICAgICAgLmZvcm1hdChkZXAubmFtZSwgc3ltLm5hbWUpKQ0KICAgICsNCiAgICArICAgICAg
ICBzeW0uX19yZXByX18oKQ0KICAgICsgICAgICAgIHN5bS5fX3N0cl9fKCkNCiAgICArICAgICAg
ICBzeW0uYXNzaWduYWJsZQ0KICAgICsgICAgICAgIGtjb25mLmRpc2FibGVfd2FybmluZ3MoKQ0K
ICAgICsgICAgICAgIHN5bS5zZXRfdmFsdWUoMikNCiAgICArICAgICAgICBzeW0uc2V0X3ZhbHVl
KCJmb28iKQ0KICAgICsgICAgICAgIHN5bS51bnNldF92YWx1ZSgpDQogICAgKyAgICAgICAga2Nv
bmYuZW5hYmxlX3dhcm5pbmdzKCkgICMgTGVnYWN5IHdhcm5pbmcgZnVuY3Rpb24NCiAgICArICAg
ICAgICBzeW0uc3RyX3ZhbHVlDQogICAgKyAgICAgICAgc3ltLnRyaV92YWx1ZQ0KICAgICsgICAg
ICAgIHN5bS50eXBlDQogICAgKyAgICAgICAgc3ltLnVzZXJfdmFsdWUNCiAgICArICAgICAgICBz
eW0udmlzaWJpbGl0eQ0KICAgICsNCiAgICArICAgIGZvciBzeW0gaW4ga2NvbmYuZGVmaW5lZF9z
eW1zOg0KICAgICsgICAgICAgIHZlcmlmeShzeW0ubm9kZXMsIHN5bS5uYW1lICsgIiBpcyBkZWZp
bmVkIGJ1dCBsYWNrcyBtZW51IG5vZGVzIikNCiAgICArDQogICAgKyAgICAgICAgdmVyaWZ5KG5v
dCAoc3ltLm9yaWdfdHlwZSBub3QgaW4gKEJPT0wsIFRSSVNUQVRFKSBhbmQgc3ltLmNob2ljZSks
DQogICAgKyAgICAgICAgICAgICAgIHN5bS5uYW1lICsgIiBpcyBhIGNob2ljZSBzeW1ib2wgYnV0
IG5vdCBib29sL3RyaXN0YXRlIikNCiAgICArDQogICAgKyAgICBmb3Iga2V5LCBzeW0gaW4ga2Nv
bmYuY29uc3Rfc3ltcy5pdGVtcygpOg0KICAgICsgICAgICAgIHZlcmlmeShpc2luc3RhbmNlKGtl
eSwgc3RyKSwNCiAgICArICAgICAgICAgICAgICAgIndlaXJkIGtleSAne30nIGluIGNvbnN0X3N5
bXMgZGljdCIuZm9ybWF0KGtleSkpDQogICAgKw0KICAgICsgICAgICAgIHZlcmlmeShzeW0uaXNf
Y29uc3RhbnQsDQogICAgKyAgICAgICAgICAgICAgICcie30iIGlzIGluIGNvbnN0X3N5bXMgYnV0
IG5vdCBtYXJrZWQgY29uc3RhbnQnDQogICAgKyAgICAgICAgICAgICAgIC5mb3JtYXQoc3ltLm5h
bWUpKQ0KICAgICsNCiAgICArICAgICAgICB2ZXJpZnkobm90IHN5bS5ub2RlcywNCiAgICArICAg
ICAgICAgICAgICAgJyJ7fSIgaXMgY29uc3RhbnQgYnV0IGhhcyBtZW51IG5vZGVzJy5mb3JtYXQo
c3ltLm5hbWUpKQ0KICAgICsNCiAgICArICAgICAgICB2ZXJpZnkobm90IHN5bS5fZGVwZW5kZW50
cywNCiAgICArICAgICAgICAgICAgICAgJyJ7fSIgaXMgY29uc3RhbnQgYnV0IGlzIGEgZGVwZW5k
ZW5jeSBvZiBzb21lIHN5bWJvbCcNCiAgICArICAgICAgICAgICAgICAgLmZvcm1hdChzeW0ubmFt
ZSkpDQogICAgKw0KICAgICsgICAgICAgIHZlcmlmeShub3Qgc3ltLmNob2ljZSwNCiAgICArICAg
ICAgICAgICAgICAgJyJ7fSIgaXMgY29uc3RhbnQgYW5kIGEgY2hvaWNlIHN5bWJvbCcuZm9ybWF0
KHN5bS5uYW1lKSkNCiAgICArDQogICAgKyAgICAgICAgc3ltLl9fcmVwcl9fKCkNCiAgICArICAg
ICAgICBzeW0uX19zdHJfXygpDQogICAgKyAgICAgICAgc3ltLmFzc2lnbmFibGUNCiAgICArICAg
ICAgICBrY29uZi5kaXNhYmxlX3dhcm5pbmdzKCkNCiAgICArICAgICAgICBzeW0uc2V0X3ZhbHVl
KDIpDQogICAgKyAgICAgICAgc3ltLnNldF92YWx1ZSgiZm9vIikNCiAgICArICAgICAgICBzeW0u
dW5zZXRfdmFsdWUoKQ0KICAgICsgICAgICAgIGtjb25mLmVuYWJsZV93YXJuaW5ncygpICAjIExl
Z2FjeSB3YXJuaW5nIGZ1bmN0aW9uDQogICAgKyAgICAgICAgc3ltLnN0cl92YWx1ZQ0KICAgICsg
ICAgICAgIHN5bS50cmlfdmFsdWUNCiAgICArICAgICAgICBzeW0udHlwZQ0KICAgICsgICAgICAg
IHN5bS52aXNpYmlsaXR5DQogICAgKw0KICAgICsgICAgZm9yIGNob2ljZSBpbiBrY29uZi5jaG9p
Y2VzOg0KICAgICsgICAgICAgIGZvciBzeW0gaW4gY2hvaWNlLnN5bXM6DQogICAgKyAgICAgICAg
ICAgIHZlcmlmeShzeW0uY2hvaWNlIGlzIGNob2ljZSwNCiAgICArICAgICAgICAgICAgICAgICAg
ICJ7MH0gaXMgaW4gY2hvaWNlLnN5bXMgYnV0ICdzeW0uY2hvaWNlJyBpcyBub3QgdGhlIGNob2lj
ZSINCiAgICArICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc3ltLm5hbWUpKQ0KICAgICsNCiAg
ICArICAgICAgICAgICAgdmVyaWZ5KHN5bS50eXBlIGluIChCT09MLCBUUklTVEFURSksDQogICAg
KyAgICAgICAgICAgICAgICAgICAie30gaXMgYSBjaG9pY2Ugc3ltYm9sIGJ1dCBpcyBub3QgYSBi
b29sL3RyaXN0YXRlIg0KICAgICsgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzeW0ubmFtZSkp
DQogICAgKw0KICAgICsgICAgICAgIGNob2ljZS5fX3N0cl9fKCkNCiAgICArICAgICAgICBjaG9p
Y2UuX19yZXByX18oKQ0KICAgICsgICAgICAgIGNob2ljZS5zdHJfdmFsdWUNCiAgICArICAgICAg
ICBjaG9pY2UudHJpX3ZhbHVlDQogICAgKyAgICAgICAgY2hvaWNlLnVzZXJfdmFsdWUNCiAgICAr
ICAgICAgICBjaG9pY2UuYXNzaWduYWJsZQ0KICAgICsgICAgICAgIGNob2ljZS5zZWxlY3Rpb24N
CiAgICArICAgICAgICBjaG9pY2UudHlwZQ0KICAgICsgICAgICAgIGNob2ljZS52aXNpYmlsaXR5
DQogICAgKw0KICAgICsgICAgIyBNZW51IG5vZGVzDQogICAgKw0KICAgICsgICAgbm9kZSA9IGtj
b25mLnRvcF9ub2RlDQogICAgKw0KICAgICsgICAgd2hpbGUgMToNCiAgICArICAgICAgICAjIEV2
ZXJ5dGhpbmcgZWxzZSBzaG91bGQgYmUgd2VsbCBleGVyY2lzZWQgZWxzZXdoZXJlDQogICAgKyAg
ICAgICAgbm9kZS5fX3JlcHJfXygpDQogICAgKyAgICAgICAgbm9kZS5fX3N0cl9fKCkNCiAgICAr
ICAgICAgICB2ZXJpZnkoaXNpbnN0YW5jZShub2RlLml0ZW0sIChTeW1ib2wsIENob2ljZSkpIG9y
IFwNCiAgICArICAgICAgICAgICAgICAgbm9kZS5pdGVtIGluIChNRU5VLCBDT01NRU5UKSwNCiAg
ICArICAgICAgICAgICAgICAgIid7fScgYXBwZWFyZWQgYXMgYSBtZW51IGl0ZW0iLmZvcm1hdChu
b2RlLml0ZW0pKQ0KICAgICsNCiAgICArICAgICAgICBpZiBub2RlLmxpc3QgaXMgbm90IE5vbmU6
DQogICAgKyAgICAgICAgICAgIG5vZGUgPSBub2RlLmxpc3QNCiAgICArDQogICAgKyAgICAgICAg
ZWxpZiBub2RlLm5leHQgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgIG5vZGUgPSBub2Rl
Lm5leHQNCiAgICArDQogICAgKyAgICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAgd2hpbGUg
bm9kZS5wYXJlbnQgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgICAgICBub2RlID0gbm9k
ZS5wYXJlbnQNCiAgICArICAgICAgICAgICAgICAgIGlmIG5vZGUubmV4dCBpcyBub3QgTm9uZToN
CiAgICArICAgICAgICAgICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0DQogICAgKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWsNCiAgICArICAgICAgICAgICAgZWxzZToNCiAgICArICAgICAgICAg
ICAgICAgIGJyZWFrDQogICAgKw0KICAgICsNCiAgICArZGVmIHRlc3RfYWxsZGVmY29uZmlnKGFy
Y2gsIHNyY2FyY2gpOg0KICAgICsgICAgIiIiDQogICAgKyAgICBWZXJpZnkgdGhhdCBhbGxkZWZj
b25maWcucHkgZ2VuZXJhdGVzIHRoZSBzYW1lIC5jb25maWcgYXMNCiAgICArICAgICdtYWtlIGFs
bGRlZmNvbmZpZycsIGZvciBlYWNoIGFyY2hpdGVjdHVyZS4gUnVucyB0aGUgc2NyaXB0IHZpYQ0K
ICAgICsgICAgJ21ha2Ugc2NyaXB0Y29uZmlnJy4NCiAgICArICAgICIiIg0KICAgICsgICAgc2hl
bGwoIm1ha2Ugc2NyaXB0Y29uZmlnIFNDUklQVD1LY29uZmlnbGliL2FsbGRlZmNvbmZpZy5weSAi
DQogICAgKyAgICAgICAgICAiUFlUSE9OQ01EPSd7fSciLmZvcm1hdChzeXMuZXhlY3V0YWJsZSkp
DQogICAgKyAgICBzaGVsbCgibXYgLmNvbmZpZyAuX2NvbmZpZyIpDQogICAgKyAgICBzaGVsbCgi
c2NyaXB0cy9rY29uZmlnL2NvbmYgLS1hbGxkZWZjb25maWcgS2NvbmZpZyIpDQogICAgKw0KICAg
ICsgICAgY29tcGFyZV9jb25maWdzKGFyY2gpDQogICAgKw0KICAgICsNCiAgICArZGVmIHRlc3Rf
ZGVmY29uZmlnKGFyY2gsIHNyY2FyY2gpOg0KICAgICsgICAgIiIiDQogICAgKyAgICBWZXJpZnkg
dGhhdCBLY29uZmlnbGliIGdlbmVyYXRlcyB0aGUgc2FtZSAuY29uZmlnIGFzIHNjcmlwdHMva2Nv
bmZpZy9jb25mLA0KICAgICsgICAgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlL2RlZmNvbmZpZyBwYWly
LiBJbiBvYnNlc3NpdmUgbW9kZSwgdGhpcyB0ZXN0IGluY2x1ZGVzDQogICAgKyAgICBub25zZW5z
aWNhbCBncm91cGluZ3Mgb2YgYXJjaGVzIHdpdGggZGVmY29uZmlncyBmcm9tIG90aGVyIGFyY2hl
cyAoZXZlcnkNCiAgICArICAgIGFyY2gvZGVmY29uZmlnIGNvbWJpbmF0aW9uKSBhbmQgdGFrZXMg
YW4gb3JkZXIgb2YgbWFnbml0dWRlIGxvbmdlciB0aW1lIHRvDQogICAgKyAgICBydW4uDQogICAg
Kw0KICAgICsgICAgV2l0aCBsb2dnaW5nIGVuYWJsZWQsIHRoaXMgdGVzdCBhcHBlbmRzIGFueSBm
YWlsdXJlcyB0byBhIGZpbGUNCiAgICArICAgIHRlc3RfZGVmY29uZmlnX2ZhaWxzIGluIHRoZSBy
b290Lg0KICAgICsgICAgIiIiDQogICAgKyAgICBrY29uZiA9IEtjb25maWcoKQ0KICAgICsNCiAg
ICArICAgIGlmIG9ic2Vzc2l2ZToNCiAgICArICAgICAgICBkZWZjb25maWdzID0gW10NCiAgICAr
DQogICAgKyAgICAgICAgIyBDb2xsZWN0IGFsbCBkZWZjb25maWdzLiBUaGlzIGNvdWxkIGJlIGRv
bmUgb25jZSBpbnN0ZWFkLCBidXQgaXQncw0KICAgICsgICAgICAgICMgYSBzcGVlZHkgb3BlcmF0
aW9uIGNvbXBhcmF0aXZlbHkuDQogICAgKyAgICAgICAgZm9yIHNyY2FyY2hfIGluIG9zLmxpc3Rk
aXIoImFyY2giKToNCiAgICArICAgICAgICAgICAgZGVmY29uZmlncy5leHRlbmQoZGVmY29uZmln
X2ZpbGVzKHNyY2FyY2hfKSkNCiAgICArICAgIGVsc2U6DQogICAgKyAgICAgICAgZGVmY29uZmln
cyA9IGRlZmNvbmZpZ19maWxlcyhzcmNhcmNoKQ0KICAgICsNCiAgICArICAgICMgVGVzdCBhcmNo
aXRlY3R1cmUgZm9yIGVhY2ggZGVmY29uZmlnDQogICAgKw0KICAgICsgICAgZm9yIGRlZmNvbmZp
ZyBpbiBkZWZjb25maWdzOg0KICAgICsgICAgICAgIHJtX2NvbmZpZ3MoKQ0KICAgICsNCiAgICAr
ICAgICAgICBrY29uZi5sb2FkX2NvbmZpZyhkZWZjb25maWcpDQogICAgKyAgICAgICAga2NvbmYu
d3JpdGVfY29uZmlnKCIuX2NvbmZpZyIpDQogICAgKyAgICAgICAgc2hlbGwoInNjcmlwdHMva2Nv
bmZpZy9jb25mIC0tZGVmY29uZmlnPSd7fScgS2NvbmZpZyIuDQogICAgKyAgICAgICAgICAgICAg
Zm9ybWF0KGRlZmNvbmZpZykpDQogICAgKw0KICAgICsgICAgICAgIGFyY2hfZGVmY29uZmlnX3N0
ciA9ICIgIHs6MTR9d2l0aCB7OjYwfSAiLmZvcm1hdChhcmNoLCBkZWZjb25maWcpDQogICAgKw0K
ICAgICsgICAgICAgIGlmIGVxdWFsX2NvbmZpZ3MoKToNCiAgICArICAgICAgICAgICAgcHJpbnQo
YXJjaF9kZWZjb25maWdfc3RyICsgIk9LIikNCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAg
ICAgICAgICBwcmludChhcmNoX2RlZmNvbmZpZ19zdHIgKyAiRkFJTCIpDQogICAgKyAgICAgICAg
ICAgIGZhaWwoKQ0KICAgICsgICAgICAgICAgICBpZiBsb2c6DQogICAgKyAgICAgICAgICAgICAg
ICB3aXRoIG9wZW4oInRlc3RfZGVmY29uZmlnX2ZhaWxzIiwgImEiKSBhcyBmYWlsX2xvZzoNCiAg
ICArICAgICAgICAgICAgICAgICAgICBmYWlsX2xvZy53cml0ZSgie30gd2l0aCB7fSBkaWQgbm90
IG1hdGNoXG4iDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1h
dChhcmNoLCBkZWZjb25maWcpKQ0KICAgICsNCiAgICArDQogICAgK2RlZiB0ZXN0X21pbl9jb25m
aWcoYXJjaCwgc3JjYXJjaCk6DQogICAgKyAgICAiIiINCiAgICArICAgIFZlcmlmeSB0aGF0IEtj
b25maWdsaWIgZ2VuZXJhdGVzIHRoZSBzYW1lIC5jb25maWcgYXMgJ21ha2Ugc2F2ZWRlZmNvbmZp
ZycNCiAgICArICAgIGZvciBlYWNoIGFyY2hpdGVjdHVyZS9kZWZjb25maWcgcGFpci4NCiAgICAr
ICAgICIiIg0KICAgICsgICAga2NvbmYgPSBLY29uZmlnKCkNCiAgICArDQogICAgKyAgICBpZiBv
YnNlc3NpdmVfbWluX2NvbmZpZzoNCiAgICArICAgICAgICBkZWZjb25maWdzID0gW10NCiAgICAr
ICAgICAgICBmb3Igc3JjYXJjaF8gaW4gb3MubGlzdGRpcigiYXJjaCIpOg0KICAgICsgICAgICAg
ICAgICBkZWZjb25maWdzLmV4dGVuZChkZWZjb25maWdfZmlsZXMoc3JjYXJjaF8pKQ0KICAgICsg
ICAgZWxzZToNCiAgICArICAgICAgICBkZWZjb25maWdzID0gZGVmY29uZmlnX2ZpbGVzKHNyY2Fy
Y2gpDQogICAgKw0KICAgICsgICAgZm9yIGRlZmNvbmZpZyBpbiBkZWZjb25maWdzOg0KICAgICsg
ICAgICAgIHJtX2NvbmZpZ3MoKQ0KICAgICsNCiAgICArICAgICAgICBrY29uZi5sb2FkX2NvbmZp
ZyhkZWZjb25maWcpDQogICAgKyAgICAgICAga2NvbmYud3JpdGVfbWluX2NvbmZpZygiLl9jb25m
aWciKQ0KICAgICsNCiAgICArICAgICAgICBzaGVsbCgiY3Age30gLmNvbmZpZyIuZm9ybWF0KGRl
ZmNvbmZpZykpDQogICAgKw0KICAgICsgICAgICAgIHNoZWxsKCJzY3JpcHRzL2tjb25maWcvY29u
ZiAtLXNhdmVkZWZjb25maWc9LmNvbmZpZyBLY29uZmlnIikNCiAgICArDQogICAgKyAgICAgICAg
YXJjaF9kZWZjb25maWdfc3RyID0gIiAgezoxNH13aXRoIHs6NjB9ICIuZm9ybWF0KGFyY2gsIGRl
ZmNvbmZpZykNCiAgICArDQogICAgKyAgICAgICAgaWYgZXF1YWxfY29uZmlncygpOg0KICAgICsg
ICAgICAgICAgICBwcmludChhcmNoX2RlZmNvbmZpZ19zdHIgKyAiT0siKQ0KICAgICsgICAgICAg
IGVsc2U6DQogICAgKyAgICAgICAgICAgIHByaW50KGFyY2hfZGVmY29uZmlnX3N0ciArICJGQUlM
IikNCiAgICArDQogICAgKw0KICAgICsjDQogICAgKyMgSGVscGVyIGZ1bmN0aW9ucw0KICAgICsj
DQogICAgKw0KICAgICsNCiAgICArZGVmIGRlZmNvbmZpZ19maWxlcyhzcmNhcmNoKToNCiAgICAr
ICAgICMgWWllbGRzIGEgbGlzdCBvZiBkZWZjb25maWcgZmlsZSBmaWxlbmFtZXMgZm9yIGEgcGFy
dGljdWxhciBzcmNhcmNoDQogICAgKyAgICAjIHN1YmRpcmVjdG9yeSAoYXJjaC88c3JjYXJjaD4v
KQ0KICAgICsNCiAgICArICAgIHNyY2FyY2hfZGlyID0gb3MucGF0aC5qb2luKCJhcmNoIiwgc3Jj
YXJjaCkNCiAgICArDQogICAgKyAgICAjIFNvbWUgYXJjaGVzIGhhdmUgYSBkZWZjb25maWcgaW4g
dGhlIHJvb3Qgb2YgdGhlaXIgYXJjaC88YXJjaD4vIGRpcmVjdG9yeQ0KICAgICsgICAgcm9vdF9k
ZWZjb25maWcgPSBvcy5wYXRoLmpvaW4oc3JjYXJjaF9kaXIsICJkZWZjb25maWciKQ0KICAgICsg
ICAgaWYgb3MucGF0aC5leGlzdHMocm9vdF9kZWZjb25maWcpOg0KICAgICsgICAgICAgIHlpZWxk
IHJvb3RfZGVmY29uZmlnDQogICAgKw0KICAgICsgICAgIyBBc3N1bWUgYWxsIGZpbGVzIGluIHRo
ZSBhcmNoLzxhcmNoPi9jb25maWdzLyBkaXJlY3RvcnkgKGlmIGl0IGV4aXN0cykgYXJlDQogICAg
KyAgICAjIGNvbmZpZ3VyYXRpb25zDQogICAgKyAgICBkZWZjb25maWdzX2RpciA9IG9zLnBhdGgu
am9pbihzcmNhcmNoX2RpciwgImNvbmZpZ3MiKQ0KICAgICsNCiAgICArICAgIGlmIG5vdCBvcy5w
YXRoLmlzZGlyKGRlZmNvbmZpZ3NfZGlyKToNCiAgICArICAgICAgICByZXR1cm4NCiAgICArDQog
ICAgKyAgICBmb3IgZGlycGF0aCwgXywgZmlsZW5hbWVzIGluIG9zLndhbGsoZGVmY29uZmlnc19k
aXIpOg0KICAgICsgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlbmFtZXM6DQogICAgKyAgICAg
ICAgICAgIHlpZWxkIG9zLnBhdGguam9pbihkaXJwYXRoLCBmaWxlbmFtZSkNCiAgICArDQogICAg
Kw0KICAgICtkZWYgcm1fY29uZmlncygpOg0KICAgICsgICAgIyBEZWxldGUgYW55IG9sZCAiLmNv
bmZpZyIgKGdlbmVyYXRlZCBieSB0aGUgQyBpbXBsZW1lbnRhdGlvbikgYW5kDQogICAgKyAgICAj
ICIuX2NvbmZpZyIgKGdlbmVyYXRlZCBieSB1cyksIGlmIHByZXNlbnQuDQogICAgKw0KICAgICsg
ICAgZGVmIHJtX2lmX2V4aXN0cyhmKToNCiAgICArICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhm
KToNCiAgICArICAgICAgICAgICAgb3MucmVtb3ZlKGYpDQogICAgKw0KICAgICsgICAgcm1faWZf
ZXhpc3RzKCIuY29uZmlnIikNCiAgICArICAgIHJtX2lmX2V4aXN0cygiLl9jb25maWciKQ0KICAg
ICsNCiAgICArDQogICAgK2RlZiBjb21wYXJlX2NvbmZpZ3MoYXJjaCk6DQogICAgKyAgICBpZiBl
cXVhbF9jb25maWdzKCk6DQogICAgKyAgICAgICAgcHJpbnQoIns6MTR9T0siLmZvcm1hdChhcmNo
KSkNCiAgICArICAgIGVsc2U6DQogICAgKyAgICAgICAgcHJpbnQoIns6MTR9RkFJTCIuZm9ybWF0
KGFyY2gpKQ0KICAgICsgICAgICAgIGZhaWwoKQ0KICAgICsNCiAgICArDQogICAgK2RlZiBlcXVh
bF9jb25maWdzKCk6DQogICAgKyAgICB3aXRoIG9wZW4oIi5jb25maWciKSBhcyBmOg0KICAgICsg
ICAgICAgIHRoZWlyID0gZi5yZWFkbGluZXMoKQ0KICAgICsNCiAgICArICAgICMgU3RyaXAgdGhl
IGhlYWRlciBnZW5lcmF0ZWQgYnkgJ2NvbmYnDQogICAgKyAgICBpID0gMA0KICAgICsgICAgZm9y
IGxpbmUgaW4gdGhlaXI6DQogICAgKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aCgiIyIp
IG9yIFwNCiAgICArICAgICAgICAgICByZS5tYXRjaChyIiMgQ09ORklHXyhcdyspIGlzIG5vdCBz
ZXQiLCBsaW5lKToNCiAgICArICAgICAgICAgICAgYnJlYWsNCiAgICArICAgICAgICBpICs9IDEN
CiAgICArICAgIHRoZWlyID0gdGhlaXJbaTpdDQogICAgKw0KICAgICsgICAgdHJ5Og0KICAgICsg
ICAgICAgIGYgPSBvcGVuKCIuX2NvbmZpZyIpDQogICAgKyAgICBleGNlcHQgRW52aXJvbm1lbnRF
cnJvciBhcyBlOg0KICAgICsgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOg0KICAg
ICsgICAgICAgICAgICByYWlzZQ0KICAgICsgICAgICAgIHByaW50KCIuX2NvbmZpZyBub3QgZm91
bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGFwcGx5IHRoZSBNYWtlZmlsZSBwYXRjaD8iKQ0KICAgICsg
ICAgICAgIHJldHVybiBGYWxzZQ0KICAgICsgICAgZWxzZToNCiAgICArICAgICAgICB3aXRoIGY6
DQogICAgKyAgICAgICAgICAgICMgWzE6XSBzdHJpcHMgdGhlIGRlZmF1bHQgaGVhZGVyDQogICAg
KyAgICAgICAgICAgIG91ciA9IGYucmVhZGxpbmVzKClbMTpdDQogICAgKw0KICAgICsgICAgaWYg
dGhlaXIgPT0gb3VyOg0KICAgICsgICAgICAgIHJldHVybiBUcnVlDQogICAgKw0KICAgICsgICAg
IyBQcmludCBhIHVuaWZpZWQgZGlmZiB0byBoZWxwIGRlYnVnZ2luZw0KICAgICsgICAgcHJpbnQo
Ik1pc21hdGNoZWQgLmNvbmZpZydzISBVbmlmaWVkIGRpZmY6IikNCiAgICArICAgIHN5cy5zdGRv
dXQud3JpdGVsaW5lcyhkaWZmbGliLnVuaWZpZWRfZGlmZih0aGVpciwgb3VyLCBmcm9tZmlsZT0i
dGhlaXIiLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRvZmlsZT0ib3VyIikpDQogICAgKw0KICAgICsgICAgcmV0dXJuIEZhbHNlDQogICAgKw0K
ICAgICsNCiAgICAraWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoNCiAgICArICAgIHJ1bl90ZXN0
cygpDQogICAgLS0gDQogICAgMi43LjQNCiAgICANCiAgICANCiAgICANCiAgICANCg0KX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:54:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:54:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxp9-0003HD-Ir; Thu, 19 Sep 2019 14:54:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxWY-0007Sd-Bv
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:35:10 +0000
X-Inumbo-ID: ad96ee6c-daea-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ad96ee6c-daea-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 14:35:08 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8FFFFF2025;
 Thu, 19 Sep 2019 16:35:07 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id bBziAPVG_I52; Thu, 19 Sep 2019 16:35:06 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EFE29F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:35:03 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:35:01 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:35:01
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 01/23] kconfig: Import kconfig
 from Linux kernel
Thread-Index: AQHVbuLjY2PilI5NuEqX1iE1MrVH5qczEQ6A
Date: Thu, 19 Sep 2019 14:35:00 +0000
Message-ID: <01CD0ED7-5626-4292-9899-2D937DDF3D25@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-2-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-2-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <614C2411EC419C43A1A57212986CF9DF@office.hd>
MIME-Version: 1.0
X-Mailman-Approved-At: Thu, 19 Sep 2019 14:54:22 +0000
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 01/23] kconfig: Import
 kconfig from Linux kernel
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGFua3MgZm9yIHRoZXNlIHBhdGNoIHNlcmllcywgdGhpcyBwYXRjaCBs
b29rcyBvay4NCg0KLS0gRmVsaXBlDQoNClJldmlld2VkLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlw
ZS5odWljaUBuZWNsYWIuZXU+DQoNCu+7v09uIDE5LjA5LjE5LCAxNDowOCwgIk1pbmlvcy1kZXZl
bCBvbiBiZWhhbGYgb2YgU2hhcmFuIFNhbnRoYW5hbSIgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxp
c3RzLnhlbnByb2plY3Qub3JnIG9uIGJlaGFsZiBvZiBTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5l
dT4gd3JvdGU6DQoNCiAgICBJbXBvcnRpbmcgdGhlIGtjb25maWcgZnJvbSB0aGUgTGludXgga2Vy
bmVsDQogICAgS2VybmVsIFRhZzogdjUuMg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IFNoYXJh
biBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBz
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlICAgICAgICAgICAgICAgICAgICAgICB8ICAyMDgg
KysNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mLmMgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgNzAyICsrKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYyAgICAg
ICAgICAgICAgICAgICAgIHwgMTM4MCArKysrKysrKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy5u
ZXcvZXhwci5jICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTI5NyArKysrKysrKysNCiAgICAg
c3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmggICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzMx
ICsrKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLWNmZy5zaCAgICAgICAgICAgICAg
ICAgICB8ICAgMzAgKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L2djb25mLmMgICAgICAgICAg
ICAgICAgICAgICAgICB8IDE1MTYgKysrKysrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5l
dy9nY29uZi5nbGFkZSAgICAgICAgICAgICAgICAgICAgfCAgNjYxICsrKysrDQogICAgIHN1cHBv
cnQva2NvbmZpZy5uZXcvaW1hZ2VzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDMyOCArKysN
CiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuaCAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDMzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgNDcxICsrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9saXN0LmggICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMTMyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9s
a2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTU5ICsrDQogICAgIHN1cHBvcnQva2Nv
bmZpZy5uZXcvbGtjX3Byb3RvLmggICAgICAgICAgICAgICAgICAgIHwgICA2NiArDQogICAgIHN1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HICAgICAgIHwgICAgNCAr
DQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMgICAgICAgICAg
IHwgIDMxOSArKysNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9kaWFsb2cuaCAg
ICAgICAgICAgICAgfCAgMjM4ICsrDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cv
aW5wdXRib3guYyAgICAgICAgICAgIHwgIDI4OSArKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3
L2x4ZGlhbG9nL21lbnVib3guYyAgICAgICAgICAgICB8ICA0MjQgKysrDQogICAgIHN1cHBvcnQv
a2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jICAgICAgICAgICAgIHwgIDM5NSArKysNCiAg
ICAgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy91dGlsLmMgICAgICAgICAgICAgICAgfCAg
NzAwICsrKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cveWVzbm8uYyAgICAg
ICAgICAgICAgIHwgIDEwMSArDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYtY2ZnLnNo
ICAgICAgICAgICAgICAgICAgIHwgICA0NyArDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbWNv
bmYuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTAzOSArKysrKysrKw0KICAgICBzdXBwb3J0
L2tjb25maWcubmV3L21lbnUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA4NjcgKysrKysr
DQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29uZmlnLnNoICAgICAgICAgICAgICAg
IHwgIDE4OSArKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLWNmZy5zaCAgICAgICAg
ICAgICAgICAgICB8ICAgNDcgKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMgICAg
ICAgICAgICAgICAgICAgICAgICB8IDE1NTUgKysrKysrKysrKysNCiAgICAgc3VwcG9ydC9rY29u
ZmlnLm5ldy9uY29uZi5ndWkuYyAgICAgICAgICAgICAgICAgICAgfCAgNjY0ICsrKysrDQogICAg
IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaCAgICAgICAgICAgICAgICAgICAgICAgIHwgICA5
MiArDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkgICAgICAgICAgICAgICAgICAg
ICAgIHwgIDczMSArKysrKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3ByZXByb2Nlc3MuYyAg
ICAgICAgICAgICAgICAgICB8ICA1NzMgKysrKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Fj
b25mLWNmZy5zaCAgICAgICAgICAgICAgICAgICB8ICAgMzIgKw0KICAgICBzdXBwb3J0L2tjb25m
aWcubmV3L3Fjb25mLmNjICAgICAgICAgICAgICAgICAgICAgICB8IDE4OTYgKysrKysrKysrKysr
Kw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmggICAgICAgICAgICAgICAgICAgICAg
ICB8ICAzMzEgKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcu
cGwgICAgICAgICAgIHwgIDY4MiArKysrKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3N5bWJv
bC5jICAgICAgICAgICAgICAgICAgICAgICB8IDEzMzEgKysrKysrKysrDQogICAgIHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcgICAgIHwgICA1MiArDQogICAg
IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5IHwgICAx
MyArDQogICAgIC4uLi9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rk
b3V0IHwgICAxMCArDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL0tjb25m
aWcgICAgICAgICAgIHwgICA1NiArDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hv
aWNlL19faW5pdF9fLnB5ICAgICAgIHwgICA0MSArDQogICAgIC4uLi90ZXN0cy9jaG9pY2UvYWxs
ZGVmX2V4cGVjdGVkX2NvbmZpZyAgICAgICAgICAgIHwgICAgNSArDQogICAgIC4uLi90ZXN0cy9j
aG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZyAgICAgICAgICAgIHwgICAgOSArDQogICAgIC4u
Li9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnIHwgICAgNSAr
DQogICAgIC4uLi90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZyAgICAgICAgICAg
IHwgICAgOSArDQogICAgIC4uLi90ZXN0cy9jaG9pY2Uvb2xkYXNrMF9leHBlY3RlZF9zdGRvdXQg
ICAgICAgICAgIHwgICAxMCArDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
L29sZGFzazFfY29uZmlnICAgIHwgICAgMiArDQogICAgIC4uLi90ZXN0cy9jaG9pY2Uvb2xkYXNr
MV9leHBlY3RlZF9zdGRvdXQgICAgICAgICAgIHwgICAxNSArDQogICAgIC4uLi90ZXN0cy9jaG9p
Y2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnICAgICAgICAgIHwgICAyMSArDQogICAgIC4uLi90
ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weSAgICAgIHwgICAxNiArDQog
ICAgIC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcgICAgICAgICAgIHwg
ICAgMiArDQogICAgIC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9j
b25maWcgIHwgICAgMyArDQogICAgIC4uLi90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9l
eHBlY3RlZF9zdGRvdXQgIHwgICAgNCArDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y29uZnRlc3QucHkgICAgICAgICAgICAgIHwgIDI5MSArKw0KICAgICAuLi4va2NvbmZpZy5uZXcv
dGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZyAgICB8ICAgNjMgKw0KICAgICAuLi4vdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0X18ucHkgICAgICAgICAgICB8ICAgMTAgKw0KICAg
ICAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyICAgICAgICB8ICAg
MzggKw0KICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
ZyAgICB8ICAgIDIgKw0KICAgICAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5p
bmMxICAgICAgICAgICB8ICAgIDUgKw0KICAgICAuLi4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
S2NvbmZpZy5pbmMyICAgICAgICAgICB8ICAgIDQgKw0KICAgICAuLi4vdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZy5pbmMzICAgICAgICAgICB8ICAgIDIgKw0KICAgICAuLi4vdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkgICAgICAgICAgICB8ICAgMTEgKw0KICAgICAu
Li4vdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyICAgICAgICB8ICAgIDYg
Kw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9LY29uZmlnICAg
ICB8ICAgMjUgKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9f
X2luaXRfXy5weSB8ICAgMTUgKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVy
X2Nob2ljZS9kZWZjb25maWcgICB8ICAgIDEgKw0KICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMv
aW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZyB8ICAgIDQgKw0KICAgICAuLi4va2NvbmZpZy5u
ZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmlnICB8ICAgMzkgKw0KICAgICAuLi4v
dGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weSAgICAgICAgICB8ICAgMTUgKw0K
ICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcgICB8
ICAgIDMgKw0KICAgICAuLi4vdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRv
dXQgICAgICB8ICAgMTAgKw0KICAgICAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tj
b25maWcgICAgICAgICAgICB8ICAgMTYgKw0KICAgICAuLi4vdGVzdHMvbm9fd3JpdGVfaWZfZGVw
X3VubWV0L19faW5pdF9fLnB5ICAgICAgICB8ICAgMjAgKw0KICAgICAuLi4va2NvbmZpZy5uZXcv
dGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZyB8ICAgIDEgKw0KICAgICAuLi4vdGVz
dHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZyAgICB8ICAgIDUgKw0KICAg
ICAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZyAgICAgICAgICB8ICAg
MjcgKw0KICAgICAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvX19pbml0X18ucHkg
ICAgICB8ICAgIDkgKw0KICAgICAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhw
ZWN0ZWRfc3RkZXJyICB8ICAgIDUgKw0KICAgICAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGlu
X2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0ICB8ICAgIDEgKw0KICAgICAuLi4vdGVzdHMvcHJlcHJvY2Vz
cy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZyAgICB8ICAgIDUgKw0KICAgICAuLi4vcHJlcHJv
Y2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkgICAgICB8ICAgMTEgKw0KICAgICAu
Li4vcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyICB8ICAgIDEg
Kw0KICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZyAg
ICB8ICAgNDQgKw0KICAgICAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkg
ICAgICAgICAgICB8ICAgIDggKw0KICAgICAuLi4vdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvZXhw
ZWN0ZWRfc3RkZXJyICAgICAgICB8ICAgMTAgKw0KICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnICB8ICAgNTMgKw0KICAgICAuLi4vdGVzdHMvcHJl
cHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weSAgICAgICAgICB8ICAgIDggKw0KICAgICAuLi4v
dGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBlY3RlZF9zdGRlcnIgICAgICB8ICAgIDkgKw0K
ICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3B5dGVzdC5pbmkgICAgICAgICAgICAgICB8
ICAgIDcgKw0KICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tj
b25maWcgICB8ICAgMzUgKw0KICAgICAuLi4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5p
dF9fLnB5ICAgICAgICAgICB8ICAgMTcgKw0KICAgICAuLi4vdGVzdHMvcmFuZF9uZXN0ZWRfY2hv
aWNlL2V4cGVjdGVkX3N0ZG91dDAgICAgICB8ICAgIDIgKw0KICAgICAuLi4vdGVzdHMvcmFuZF9u
ZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDEgICAgICB8ICAgIDQgKw0KICAgICAuLi4vdGVz
dHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIgICAgICB8ICAgIDUgKw0KICAg
ICBzdXBwb3J0L2tjb25maWcubmV3L3V0aWwuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAx
MjkgKw0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3pjb25mLmxleC5jICAgICAgICAgICAgICAg
ICAgICB8IDI4MjAgKysrKysrKysrKysrKysrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnLm5l
dy96Y29uZi50YWIuYyAgICAgICAgICAgICAgICAgICAgfCAyNTA0ICsrKysrKysrKysrKysrKysr
DQogICAgIDk4IGZpbGVzIGNoYW5nZWQsIDI2NDMzIGluc2VydGlvbnMoKykNCiAgICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUNCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZi5jDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2NvbmZkYXRhLmMNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L2V4cHIuaA0KICAgICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9y
dC9rY29uZmlnLm5ldy9nY29uZi1jZmcuc2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvZ2NvbmYuYw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9nY29uZi5nbGFkZQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9pbWFnZXMuYw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy9pbWFnZXMuaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy9sZXhlci5sDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L2xpc3QuaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9sa2Mu
aA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8u
aA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9C
SUcuRkFULldBUk5JTkcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmgNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvaW5wdXRib3guYw0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMNCiAgICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3V0aWwuYw0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNu
by5jDQogICAgIGNyZWF0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcubmV3L21jb25mLWNm
Zy5zaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5j
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L21lbnUuYw0KICAg
ICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2gN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNo
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuZ3VpLmMNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaA0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQ0KICAgICBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoDQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmgNCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvc3ltYm9sLmMNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L0tj
b25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
YXV0b19zdWJtZW51L19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL0tjb25maWcN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
L19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29u
ZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZS9hbGxub19leHBlY3RlZF9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFz
azBfZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRv
dXQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hv
aWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5w
eQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9p
Y2VfdmFsdWVfd2l0aF9tX2RlcC9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29u
ZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dA0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQ0KICAgICBjcmVhdGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9L
Y29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVy
cg0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJf
cmVjdXJzaXZlX2luYy9LY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMQ0KICAgICBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2lu
Yy9LY29uZmlnLmluYzINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL19faW5p
dF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVycg0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZw0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2Uv
X19pbml0X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvS2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAv
Y29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L25ld19jaG9pY2Vfd2l0aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29u
ZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25v
X3dyaXRlX2lmX2RlcF91bm1ldC9fX2luaXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvY29uZmlnDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRl
X2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZw0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9z
dGRlcnINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhw
YW5zaW9uL0tjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9j
aXJjdWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vz
cy9lc2NhcGUvX19pbml0X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3RkZXJyDQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFy
aWFibGUvS2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhw
ZWN0ZWRfc3RkZXJyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL3B5dGVzdC5pbmkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcNCiAgICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5p
dF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3Rl
ZF9zdGRvdXQxDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3V0aWwuYw0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYw0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYw0KICAgIA0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtl
ZmlsZQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uM2YzMjdl
Mg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2Vm
aWxlDQogICAgQEAgLTAsMCArMSwyMDggQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMA0KICAgICsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICsjIEtlcm5lbCBjb25m
aWd1cmF0aW9uIHRhcmdldHMNCiAgICArIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZyb20gdG9w
LWxldmVsIG1ha2VmaWxlDQogICAgKw0KICAgICtQSE9OWSArPSB4Y29uZmlnIGdjb25maWcgbWVu
dWNvbmZpZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcgXA0KICAgICsJYnVp
bGRfbWVudWNvbmZpZyBidWlsZF9uY29uZmlnIGJ1aWxkX2djb25maWcgYnVpbGRfeGNvbmZpZw0K
ICAgICsNCiAgICAraWZkZWYgS0JVSUxEX0tDT05GSUcNCiAgICArS2NvbmZpZyA6PSAkKEtCVUlM
RF9LQ09ORklHKQ0KICAgICtlbHNlDQogICAgK0tjb25maWcgOj0gS2NvbmZpZw0KICAgICtlbmRp
Zg0KICAgICsNCiAgICAraWZlcSAoJChxdWlldCksc2lsZW50XykNCiAgICArc2lsZW50IDo9IC1z
DQogICAgK2VuZGlmDQogICAgKw0KICAgICsjIFdlIG5lZWQgdGhpcywgaW4gY2FzZSB0aGUgdXNl
ciBoYXMgaXQgaW4gaXRzIGVudmlyb25tZW50DQogICAgK3VuZXhwb3J0IENPTkZJR18NCiAgICAr
DQogICAgK3hjb25maWc6ICQob2JqKS9xY29uZg0KICAgICsJJDwgJChzaWxlbnQpICQoS2NvbmZp
ZykNCiAgICArDQogICAgK2djb25maWc6ICQob2JqKS9nY29uZg0KICAgICsJJDwgJChzaWxlbnQp
ICQoS2NvbmZpZykNCiAgICArDQogICAgK21lbnVjb25maWc6ICQob2JqKS9tY29uZg0KICAgICsJ
JDwgJChzaWxlbnQpICQoS2NvbmZpZykNCiAgICArDQogICAgK2NvbmZpZzogJChvYmopL2NvbmYN
CiAgICArCSQ8ICQoc2lsZW50KSAtLW9sZGFza2NvbmZpZyAkKEtjb25maWcpDQogICAgKw0KICAg
ICtuY29uZmlnOiAkKG9iaikvbmNvbmYNCiAgICArCSQ8ICQoc2lsZW50KSAkKEtjb25maWcpDQog
ICAgKw0KICAgICtidWlsZF9tZW51Y29uZmlnOiAkKG9iaikvbWNvbmYNCiAgICArDQogICAgK2J1
aWxkX25jb25maWc6ICQob2JqKS9uY29uZg0KICAgICsNCiAgICArYnVpbGRfZ2NvbmZpZzogJChv
YmopL2djb25mDQogICAgKw0KICAgICtidWlsZF94Y29uZmlnOiAkKG9iaikvcWNvbmYNCiAgICAr
DQogICAgK2xvY2FseWVzY29uZmlnIGxvY2FsbW9kY29uZmlnOiAkKG9iaikvY29uZg0KICAgICsJ
JChRKXBlcmwgJChzcmN0cmVlKS8kKHNyYykvc3RyZWFtbGluZV9jb25maWcucGwgLS0kQCAkKHNy
Y3RyZWUpICQoS2NvbmZpZykgPiAudG1wLmNvbmZpZw0KICAgICsJJChRKWlmIFsgLWYgLmNvbmZp
ZyBdOyB0aGVuIAkJCQkJXA0KICAgICsJCQljbXAgLXMgLnRtcC5jb25maWcgLmNvbmZpZyB8fAkJ
CVwNCiAgICArCQkJKG12IC1mIC5jb25maWcgLmNvbmZpZy5vbGQuMTsJCQlcDQogICAgKwkJCSBt
diAtZiAudG1wLmNvbmZpZyAuY29uZmlnOwkJCVwNCiAgICArCQkJICQ8ICQoc2lsZW50KSAtLW9s
ZGNvbmZpZyAkKEtjb25maWcpOwkJXA0KICAgICsJCQkgbXYgLWYgLmNvbmZpZy5vbGQuMSAuY29u
ZmlnLm9sZCkJCVwNCiAgICArCWVsc2UJCQkJCQkJCVwNCiAgICArCQkJbXYgLWYgLnRtcC5jb25m
aWcgLmNvbmZpZzsJCQlcDQogICAgKwkJCSQ8ICQoc2lsZW50KSAtLW9sZGNvbmZpZyAkKEtjb25m
aWcpOwkJXA0KICAgICsJZmkNCiAgICArCSQoUSlybSAtZiAudG1wLmNvbmZpZw0KICAgICsNCiAg
ICArIyBUaGVzZSB0YXJnZXRzIG1hcCAxOjEgdG8gdGhlIGNvbW1hbmRsaW5lIG9wdGlvbnMgb2Yg
J2NvbmYnDQogICAgKyMNCiAgICArIyBOb3RlOg0KICAgICsjICBzeW5jY29uZmlnIGhhcyBiZWNv
bWUgYW4gaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZGV0YWlsIGFuZCBpcyBub3cNCiAgICArIyAg
ZGVwcmVjYXRlZCBmb3IgZXh0ZXJuYWwgdXNlDQogICAgK3NpbXBsZS10YXJnZXRzIDo9IG9sZGNv
bmZpZyBhbGxub2NvbmZpZyBhbGx5ZXNjb25maWcgYWxsbW9kY29uZmlnIFwNCiAgICArCWFsbGRl
ZmNvbmZpZyByYW5kY29uZmlnIGxpc3RuZXdjb25maWcgb2xkZGVmY29uZmlnIHN5bmNjb25maWcN
CiAgICArUEhPTlkgKz0gJChzaW1wbGUtdGFyZ2V0cykNCiAgICArDQogICAgKyQoc2ltcGxlLXRh
cmdldHMpOiAkKG9iaikvY29uZg0KICAgICsJJDwgJChzaWxlbnQpIC0tJEAgJChLY29uZmlnKQ0K
ICAgICsNCiAgICArUEhPTlkgKz0gc2F2ZWRlZmNvbmZpZyBkZWZjb25maWcNCiAgICArDQogICAg
K3NhdmVkZWZjb25maWc6ICQob2JqKS9jb25mDQogICAgKwkkPCAkKHNpbGVudCkgLS0kQD1kZWZj
b25maWcgJChLY29uZmlnKQ0KICAgICsNCiAgICArZGVmY29uZmlnOiAkKG9iaikvY29uZg0KICAg
ICtpZmVxICgkKEtCVUlMRF9ERUZDT05GSUcpLCkNCiAgICArCSQ8ICQoc2lsZW50KSAtLWRlZmNv
bmZpZyAkKEtjb25maWcpDQogICAgK2Vsc2UgaWZuZXEgKCQod2lsZGNhcmQgJChzcmN0cmVlKS9h
cmNoLyQoU1JDQVJDSCkvY29uZmlncy8kKEtCVUlMRF9ERUZDT05GSUcpKSwpDQogICAgKwlAJChr
ZWNobykgIioqKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24gJyQoS0JVSUxEX0RF
RkNPTkZJRyknIg0KICAgICsJJChRKSQ8ICQoc2lsZW50KSAtLWRlZmNvbmZpZz1hcmNoLyQoU1JD
QVJDSCkvY29uZmlncy8kKEtCVUlMRF9ERUZDT05GSUcpICQoS2NvbmZpZykNCiAgICArZWxzZQ0K
ICAgICsJQCQoa2VjaG8pICIqKiogRGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGJhc2VkIG9uIHRh
cmdldCAnJChLQlVJTERfREVGQ09ORklHKSciDQogICAgKwkkKFEpJChNQUtFKSAtZiAkKHNyY3Ry
ZWUpL01ha2VmaWxlICQoS0JVSUxEX0RFRkNPTkZJRykNCiAgICArZW5kaWYNCiAgICArDQogICAg
KyVfZGVmY29uZmlnOiAkKG9iaikvY29uZg0KICAgICsJJChRKSQ8ICQoc2lsZW50KSAtLWRlZmNv
bmZpZz1hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kQCAkKEtjb25maWcpDQogICAgKw0KICAgICtj
b25maWdmaWxlcz0kKHdpbGRjYXJkICQoc3JjdHJlZSkva2VybmVsL2NvbmZpZ3MvJEAgJChzcmN0
cmVlKS9hcmNoLyQoU1JDQVJDSCkvY29uZmlncy8kQCkNCiAgICArDQogICAgKyUuY29uZmlnOiAk
KG9iaikvY29uZg0KICAgICsJJChpZiAkKGNhbGwgY29uZmlnZmlsZXMpLCwgJChlcnJvciBObyBj
b25maWd1cmF0aW9uIGV4aXN0cyBmb3IgdGhpcyB0YXJnZXQgb24gdGhpcyBhcmNoaXRlY3R1cmUp
KQ0KICAgICsJJChRKSQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMva2NvbmZpZy9t
ZXJnZV9jb25maWcuc2ggLW0gLmNvbmZpZyAkKGNvbmZpZ2ZpbGVzKQ0KICAgICsJKyQoUSl5ZXMg
IiIgfCAkKE1BS0UpIC1mICQoc3JjdHJlZSkvTWFrZWZpbGUgb2xkY29uZmlnDQogICAgKw0KICAg
ICtQSE9OWSArPSBrdm1jb25maWcNCiAgICAra3ZtY29uZmlnOiBrdm1fZ3Vlc3QuY29uZmlnDQog
ICAgKwlAOg0KICAgICsNCiAgICArUEhPTlkgKz0geGVuY29uZmlnDQogICAgK3hlbmNvbmZpZzog
eGVuLmNvbmZpZw0KICAgICsJQDoNCiAgICArDQogICAgK1BIT05ZICs9IHRpbnljb25maWcNCiAg
ICArdGlueWNvbmZpZzoNCiAgICArCSQoUSkkKE1BS0UpIC1mICQoc3JjdHJlZSkvTWFrZWZpbGUg
YWxsbm9jb25maWcgdGlueS5jb25maWcNCiAgICArDQogICAgKyMgQ0hFQ0s6IC1vIGNhY2hlX2Rp
cj08cGF0aD4gd29ya2luZz8NCiAgICArUEhPTlkgKz0gdGVzdGNvbmZpZw0KICAgICt0ZXN0Y29u
ZmlnOiAkKG9iaikvY29uZg0KICAgICsJJChQWVRIT04zKSAtQiAtbSBweXRlc3QgJChzcmN0cmVl
KS8kKHNyYykvdGVzdHMgXA0KICAgICsJLW8gY2FjaGVfZGlyPSQoYWJzcGF0aCAkKG9iaikvdGVz
dHMvLmNhY2hlKSBcDQogICAgKwkkKGlmICQoZmluZHN0cmluZyAxLCQoS0JVSUxEX1ZFUkJPU0Up
KSwtLWNhcHR1cmU9bm8pDQogICAgK2NsZWFuLWRpcnMgKz0gdGVzdHMvLmNhY2hlDQogICAgKw0K
ICAgICsjIEhlbHAgdGV4dCB1c2VkIGJ5IG1ha2UgaGVscA0KICAgICtoZWxwOg0KICAgICsJQGVj
aG8gICcgIGNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIGxpbmUt
b3JpZW50ZWQgcHJvZ3JhbScNCiAgICArCUBlY2hvICAnICBuY29uZmlnICAgICAgICAgLSBVcGRh
dGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbmN1cnNlcyBtZW51IGJhc2VkIHByb2dyYW0n
DQogICAgKwlAZWNobyAgJyAgbWVudWNvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0
aWxpc2luZyBhIG1lbnUgYmFzZWQgcHJvZ3JhbScNCiAgICArCUBlY2hvICAnICB4Y29uZmlnCSAg
LSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgUXQgYmFzZWQgZnJvbnQtZW5kJw0K
ICAgICsJQGVjaG8gICcgIGdjb25maWcJICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNp
bmcgYSBHVEsrIGJhc2VkIGZyb250LWVuZCcNCiAgICArCUBlY2hvICAnICBvbGRjb25maWcJICAt
IFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBwcm92aWRlZCAuY29uZmlnIGFzIGJh
c2UnDQogICAgKwlAZWNobyAgJyAgbG9jYWxtb2Rjb25maWcgIC0gVXBkYXRlIGN1cnJlbnQgY29u
ZmlnIGRpc2FibGluZyBtb2R1bGVzIG5vdCBsb2FkZWQnDQogICAgKwlAZWNobyAgJyAgbG9jYWx5
ZXNjb25maWcgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIGNvbnZlcnRpbmcgbG9jYWwgbW9kcyB0
byBjb3JlJw0KICAgICsJQGVjaG8gICcgIGRlZmNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIGRl
ZmF1bHQgZnJvbSBBUkNIIHN1cHBsaWVkIGRlZmNvbmZpZycNCiAgICArCUBlY2hvICAnICBzYXZl
ZGVmY29uZmlnICAgLSBTYXZlIGN1cnJlbnQgY29uZmlnIGFzIC4vZGVmY29uZmlnIChtaW5pbWFs
IGNvbmZpZyknDQogICAgKwlAZWNobyAgJyAgYWxsbm9jb25maWcJICAtIE5ldyBjb25maWcgd2hl
cmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggbm8nDQogICAgKwlAZWNobyAgJyAgYWxs
eWVzY29uZmlnCSAgLSBOZXcgY29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhY2NlcHRlZCB3
aXRoIHllcycNCiAgICArCUBlY2hvICAnICBhbGxtb2Rjb25maWcJICAtIE5ldyBjb25maWcgc2Vs
ZWN0aW5nIG1vZHVsZXMgd2hlbiBwb3NzaWJsZScNCiAgICArCUBlY2hvICAnICBhbGxkZWZjb25m
aWcgICAgLSBOZXcgY29uZmlnIHdpdGggYWxsIHN5bWJvbHMgc2V0IHRvIGRlZmF1bHQnDQogICAg
KwlAZWNobyAgJyAgcmFuZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aXRoIHJhbmRvbSBhbnN3ZXIg
dG8gYWxsIG9wdGlvbnMnDQogICAgKwlAZWNobyAgJyAgbGlzdG5ld2NvbmZpZyAgIC0gTGlzdCBu
ZXcgb3B0aW9ucycNCiAgICArCUBlY2hvICAnICBvbGRkZWZjb25maWcJICAtIFNhbWUgYXMgb2xk
Y29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xzIHRvIHRoZWlyJw0KICAgICsJQGVjaG8gICcgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgd2l0aG91dCBwcm9tcHRpbmcnDQogICAgKwlA
ZWNobyAgJyAga3ZtY29uZmlnCSAgLSBFbmFibGUgYWRkaXRpb25hbCBvcHRpb25zIGZvciBrdm0g
Z3Vlc3Qga2VybmVsIHN1cHBvcnQnDQogICAgKwlAZWNobyAgJyAgeGVuY29uZmlnICAgICAgIC0g
RW5hYmxlIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgeGVuIGRvbTAgYW5kIGd1ZXN0IGtlcm5lbCBz
dXBwb3J0Jw0KICAgICsJQGVjaG8gICcgIHRpbnljb25maWcJICAtIENvbmZpZ3VyZSB0aGUgdGlu
aWVzdCBwb3NzaWJsZSBrZXJuZWwnDQogICAgKwlAZWNobyAgJyAgdGVzdGNvbmZpZwkgIC0gUnVu
IEtjb25maWcgdW5pdCB0ZXN0cyAocmVxdWlyZXMgcHl0aG9uMyBhbmQgcHl0ZXN0KScNCiAgICAr
DQogICAgKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgKyMgb2JqZWN0IGZpbGVzIHVzZWQgYnkg
YWxsIGtjb25maWcgZmxhdm91cnMNCiAgICArY29tbW9uLW9ianMJOj0gY29uZmRhdGEubyBleHBy
Lm8gbGV4ZXIubGV4Lm8gcGFyc2VyLnRhYi5vIHByZXByb2Nlc3MubyBcDQogICAgKwkJICAgc3lt
Ym9sLm8NCiAgICArDQogICAgKyQob2JqKS9sZXhlci5sZXgubzogJChvYmopL3BhcnNlci50YWIu
aA0KICAgICtIT1NUQ0ZMQUdTX2xleGVyLmxleC5vCTo9IC1JICQoc3JjdHJlZSkvJChzcmMpDQog
ICAgK0hPU1RDRkxBR1NfcGFyc2VyLnRhYi5vCTo9IC1JICQoc3JjdHJlZSkvJChzcmMpDQogICAg
Kw0KICAgICsjIGNvbmY6IFVzZWQgZm9yIGRlZmNvbmZpZywgb2xkY29uZmlnIGFuZCByZWxhdGVk
IHRhcmdldHMNCiAgICAraG9zdHByb2dzLXkJKz0gY29uZg0KICAgICtjb25mLW9ianMJOj0gY29u
Zi5vICQoY29tbW9uLW9ianMpDQogICAgKw0KICAgICsjIG5jb25mOiBVc2VkIGZvciB0aGUgbmNv
bmZpZyB0YXJnZXQgYmFzZWQgb24gbmN1cnNlcw0KICAgICtob3N0cHJvZ3MteQkrPSBuY29uZg0K
ICAgICtuY29uZi1vYmpzCTo9IG5jb25mLm8gbmNvbmYuZ3VpLm8gJChjb21tb24tb2JqcykNCiAg
ICArDQogICAgK0hPU1RMRExJQlNfbmNvbmYJPSAkKHNoZWxsIC4gJChvYmopL25jb25mLWNmZyAm
JiBlY2hvICQkbGlicykNCiAgICArSE9TVENGTEFHU19uY29uZi5vCT0gJChzaGVsbCAuICQob2Jq
KS9uY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykNCiAgICArSE9TVENGTEFHU19uY29uZi5ndWku
bwk9ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2ZnICYmIGVjaG8gJCRjZmxhZ3MpDQogICAgKw0K
ICAgICskKG9iaikvbmNvbmYubyAkKG9iaikvbmNvbmYuZ3VpLm86ICQob2JqKS9uY29uZi1jZmcN
CiAgICArDQogICAgKyMgbWNvbmY6IFVzZWQgZm9yIHRoZSBtZW51Y29uZmlnIHRhcmdldCBiYXNl
ZCBvbiBseGRpYWxvZw0KICAgICtob3N0cHJvZ3MteQkrPSBtY29uZg0KICAgICtseGRpYWxvZwk6
PSBjaGVja2xpc3QubyBpbnB1dGJveC5vIG1lbnVib3gubyB0ZXh0Ym94Lm8gdXRpbC5vIHllc25v
Lm8NCiAgICArbWNvbmYtb2Jqcwk6PSBtY29uZi5vICQoYWRkcHJlZml4IGx4ZGlhbG9nLywgJChs
eGRpYWxvZykpICQoY29tbW9uLW9ianMpDQogICAgKw0KICAgICtIT1NUTERMSUJTX21jb25mID0g
JChzaGVsbCAuICQob2JqKS9tY29uZi1jZmcgJiYgZWNobyAkJGxpYnMpDQogICAgKyQoZm9yZWFj
aCBmLCBtY29uZi5vICQobHhkaWFsb2cpLCBcDQogICAgKyAgJChldmFsIEhPU1RDRkxBR1NfJGYg
PSAkJChzaGVsbCAuICQob2JqKS9tY29uZi1jZmcgJiYgZWNobyAkJCQkY2ZsYWdzKSkpDQogICAg
Kw0KICAgICskKG9iaikvbWNvbmYubzogJChvYmopL21jb25mLWNmZw0KICAgICskKGFkZHByZWZp
eCAkKG9iaikvbHhkaWFsb2cvLCAkKGx4ZGlhbG9nKSk6ICQob2JqKS9tY29uZi1jZmcNCiAgICAr
DQogICAgKyMgcWNvbmY6IFVzZWQgZm9yIHRoZSB4Y29uZmlnIHRhcmdldCBiYXNlZCBvbiBRdA0K
ICAgICtob3N0cHJvZ3MteQkrPSBxY29uZg0KICAgICtxY29uZi1jeHhvYmpzCTo9IHFjb25mLm8N
CiAgICArcWNvbmYtb2Jqcwk6PSBpbWFnZXMubyAkKGNvbW1vbi1vYmpzKQ0KICAgICsNCiAgICAr
SE9TVExETElCU19xY29uZgk9ICQoc2hlbGwgLiAkKG9iaikvcWNvbmYtY2ZnICYmIGVjaG8gJCRs
aWJzKQ0KICAgICtIT1NUQ1hYRkxBR1NfcWNvbmYubwk9ICQoc2hlbGwgLiAkKG9iaikvcWNvbmYt
Y2ZnICYmIGVjaG8gJCRjZmxhZ3MpDQogICAgKw0KICAgICskKG9iaikvcWNvbmYubzogJChvYmop
L3Fjb25mLWNmZyAkKG9iaikvcWNvbmYubW9jDQogICAgKw0KICAgICtxdWlldF9jbWRfbW9jID0g
TU9DICAgICAkQA0KICAgICsgICAgICBjbWRfbW9jID0gJChzaGVsbCAuICQob2JqKS9xY29uZi1j
ZmcgJiYgZWNobyAkJG1vYykgLWkgJDwgLW8gJEANCiAgICArDQogICAgKyQob2JqKS8lLm1vYzog
JChzcmMpLyUuaCAkKG9iaikvcWNvbmYtY2ZnDQogICAgKwkkKGNhbGwgY21kLG1vYykNCiAgICAr
DQogICAgKyMgZ2NvbmY6IFVzZWQgZm9yIHRoZSBnY29uZmlnIHRhcmdldCBiYXNlZCBvbiBHVEsr
DQogICAgK2hvc3Rwcm9ncy15CSs9IGdjb25mDQogICAgK2djb25mLW9ianMJOj0gZ2NvbmYubyBp
bWFnZXMubyAkKGNvbW1vbi1vYmpzKQ0KICAgICsNCiAgICArSE9TVExETElCU19nY29uZiAgICA9
ICQoc2hlbGwgLiAkKG9iaikvZ2NvbmYtY2ZnICYmIGVjaG8gJCRsaWJzKQ0KICAgICtIT1NUQ0ZM
QUdTX2djb25mLm8gID0gJChzaGVsbCAuICQob2JqKS9nY29uZi1jZmcgJiYgZWNobyAkJGNmbGFn
cykNCiAgICArDQogICAgKyQob2JqKS9nY29uZi5vOiAkKG9iaikvZ2NvbmYtY2ZnDQogICAgKw0K
ICAgICsjIGNoZWNrIGlmIG5lY2Vzc2FyeSBwYWNrYWdlcyBhcmUgYXZhaWxhYmxlLCBhbmQgY29u
ZmlndXJlIGJ1aWxkIGZsYWdzDQogICAgK2ZpbGVjaGtfY29uZl9jZmcgPSAkKENPTkZJR19TSEVM
TCkgJDwNCiAgICArDQogICAgKyQob2JqKS8lY29uZi1jZmc6ICQoc3JjKS8lY29uZi1jZmcuc2gg
Rk9SQ0UNCiAgICArCSQoY2FsbCBmaWxlY2hrLGNvbmZfY2ZnKQ0KICAgICsNCiAgICArY2xlYW4t
ZmlsZXMgKz0gKmNvbmYtY2ZnDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
Y29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mLmMNCiAgICBuZXcgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmVmMzY3OGMNCiAgICAtLS0gL2Rldi9udWxsDQogICAg
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mLmMNCiAgICBAQCAtMCwwICsxLDcwMiBAQA0K
ICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsg
KiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+
DQogICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKyNpbmNsdWRl
IDxsaW1pdHMuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyNpbmNsdWRlIDxzdGRs
aWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSA8dGltZS5oPg0K
ICAgICsjaW5jbHVkZSA8dW5pc3RkLmg+DQogICAgKyNpbmNsdWRlIDxnZXRvcHQuaD4NCiAgICAr
I2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogICAgKyNpbmNsdWRlIDxzeXMvdGltZS5oPg0KICAgICsj
aW5jbHVkZSA8ZXJybm8uaD4NCiAgICArDQogICAgKyNpbmNsdWRlICJsa2MuaCINCiAgICArDQog
ICAgK3N0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtzdGF0aWMgdm9p
ZCBjaGVja19jb25mKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICArDQogICAgK2VudW0gaW5wdXRf
bW9kZSB7DQogICAgKwlvbGRhc2tjb25maWcsDQogICAgKwlzeW5jY29uZmlnLA0KICAgICsJb2xk
Y29uZmlnLA0KICAgICsJYWxsbm9jb25maWcsDQogICAgKwlhbGx5ZXNjb25maWcsDQogICAgKwlh
bGxtb2Rjb25maWcsDQogICAgKwlhbGxkZWZjb25maWcsDQogICAgKwlyYW5kY29uZmlnLA0KICAg
ICsJZGVmY29uZmlnLA0KICAgICsJc2F2ZWRlZmNvbmZpZywNCiAgICArCWxpc3RuZXdjb25maWcs
DQogICAgKwlvbGRkZWZjb25maWcsDQogICAgK307DQogICAgK3N0YXRpYyBlbnVtIGlucHV0X21v
ZGUgaW5wdXRfbW9kZSA9IG9sZGFza2NvbmZpZzsNCiAgICArDQogICAgK3N0YXRpYyBpbnQgaW5k
ZW50ID0gMTsNCiAgICArc3RhdGljIGludCB0dHlfc3RkaW87DQogICAgK3N0YXRpYyBpbnQgc3lu
Y19rY29uZmlnOw0KICAgICtzdGF0aWMgaW50IGNvbmZfY250Ow0KICAgICtzdGF0aWMgY2hhciBs
aW5lW1BBVEhfTUFYXTsNCiAgICArc3RhdGljIHN0cnVjdCBtZW51ICpyb290RW50cnk7DQogICAg
Kw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7
DQogICAgKwlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygpOw0KICAgICsNCiAgICArCW1lbnVf
Z2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsNCiAgICArDQogICAgKwlwcmludGYoIlxuJXNcbiIs
IHN0cl9nZXQoJmhlbHApKTsNCiAgICArCXN0cl9mcmVlKCZoZWxwKTsNCiAgICArfQ0KICAgICsN
CiAgICArc3RhdGljIHZvaWQgc3RyaXAoY2hhciAqc3RyKQ0KICAgICt7DQogICAgKwljaGFyICpw
ID0gc3RyOw0KICAgICsJaW50IGw7DQogICAgKw0KICAgICsJd2hpbGUgKChpc3NwYWNlKCpwKSkp
DQogICAgKwkJcCsrOw0KICAgICsJbCA9IHN0cmxlbihwKTsNCiAgICArCWlmIChwICE9IHN0cikN
CiAgICArCQltZW1tb3ZlKHN0ciwgcCwgbCArIDEpOw0KICAgICsJaWYgKCFsKQ0KICAgICsJCXJl
dHVybjsNCiAgICArCXAgPSBzdHIgKyBsIC0gMTsNCiAgICArCXdoaWxlICgoaXNzcGFjZSgqcCkp
KQ0KICAgICsJCSpwLS0gPSAwOw0KICAgICt9DQogICAgKw0KICAgICsvKiBIZWxwZXIgZnVuY3Rp
b24gdG8gZmFjaWxpdGF0ZSBmZ2V0cygpIGJ5IEplYW4gU2FjcmVuLiAqLw0KICAgICtzdGF0aWMg
dm9pZCB4ZmdldHMoY2hhciAqc3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pDQogICAgK3sNCiAgICAr
CWlmICghZmdldHMoc3RyLCBzaXplLCBpbikpDQogICAgKwkJZnByaW50ZihzdGRlcnIsICJcbkVy
cm9yIGluIHJlYWRpbmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsNCiAgICArDQogICAgKwlpZiAoIXR0
eV9zdGRpbykNCiAgICArCQlwcmludGYoIiVzIiwgc3RyKTsNCiAgICArfQ0KICAgICsNCiAgICAr
c3RhdGljIGludCBjb25mX2Fza3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAq
ZGVmKQ0KICAgICt7DQogICAgKwllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBzeW1fZ2V0X3R5cGUo
c3ltKTsNCiAgICArDQogICAgKwlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkNCiAgICArCQlwcmlu
dGYoIihORVcpICIpOw0KICAgICsNCiAgICArCWxpbmVbMF0gPSAnXG4nOw0KICAgICsJbGluZVsx
XSA9IDA7DQogICAgKw0KICAgICsJaWYgKCFzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICAr
CQlwcmludGYoIiVzXG4iLCBkZWYpOw0KICAgICsJCWxpbmVbMF0gPSAnXG4nOw0KICAgICsJCWxp
bmVbMV0gPSAwOw0KICAgICsJCXJldHVybiAwOw0KICAgICsJfQ0KICAgICsNCiAgICArCXN3aXRj
aCAoaW5wdXRfbW9kZSkgew0KICAgICsJY2FzZSBvbGRjb25maWc6DQogICAgKwljYXNlIHN5bmNj
b25maWc6DQogICAgKwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgew0KICAgICsJCQlwcmludGYo
IiVzXG4iLCBkZWYpOw0KICAgICsJCQlyZXR1cm4gMDsNCiAgICArCQl9DQogICAgKwkJLyogZmFs
bCB0aHJvdWdoICovDQogICAgKwljYXNlIG9sZGFza2NvbmZpZzoNCiAgICArCQlmZmx1c2goc3Rk
b3V0KTsNCiAgICArCQl4ZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbik7DQogICAgKwkJ
cmV0dXJuIDE7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsN
CiAgICArCXN3aXRjaCAodHlwZSkgew0KICAgICsJY2FzZSBTX0lOVDoNCiAgICArCWNhc2UgU19I
RVg6DQogICAgKwljYXNlIFNfU1RSSU5HOg0KICAgICsJCXByaW50ZigiJXNcbiIsIGRlZik7DQog
ICAgKwkJcmV0dXJuIDE7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICAr
CXByaW50ZigiJXMiLCBsaW5lKTsNCiAgICArCXJldHVybiAxOw0KICAgICt9DQogICAgKw0KICAg
ICtzdGF0aWMgaW50IGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAg
KwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgKwljb25zdCBjaGFyICpkZWY7
DQogICAgKw0KICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQlwcmludGYoIiUqcyVzICIsIGluZGVu
dCAtIDEsICIiLCBtZW51LT5wcm9tcHQtPnRleHQpOw0KICAgICsJCXByaW50ZigiKCVzKSAiLCBz
eW0tPm5hbWUpOw0KICAgICsJCWRlZiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7DQogICAg
KwkJaWYgKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpDQogICAgKwkJCXByaW50ZigiWyVzXSAi
LCBkZWYpOw0KICAgICsJCWlmICghY29uZl9hc2t2YWx1ZShzeW0sIGRlZikpDQogICAgKwkJCXJl
dHVybiAwOw0KICAgICsJCXN3aXRjaCAobGluZVswXSkgew0KICAgICsJCWNhc2UgJ1xuJzoNCiAg
ICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAnPyc6DQogICAgKwkJCS8qIHByaW50IGhlbHAgKi8N
CiAgICArCQkJaWYgKGxpbmVbMV0gPT0gJ1xuJykgew0KICAgICsJCQkJcHJpbnRfaGVscChtZW51
KTsNCiAgICArCQkJCWRlZiA9IE5VTEw7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAg
ICsJCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICArCQlkZWZhdWx0Og0KICAgICsJCQlsaW5lW3N0
cmxlbihsaW5lKS0xXSA9IDA7DQogICAgKwkJCWRlZiA9IGxpbmU7DQogICAgKwkJfQ0KICAgICsJ
CWlmIChkZWYgJiYgc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBkZWYpKQ0KICAgICsJCQlyZXR1
cm4gMDsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGludCBjb25mX3N5bShz
dHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVu
dS0+c3ltOw0KICAgICsJdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7DQogICAgKw0KICAgICsJd2hp
bGUgKDEpIHsNCiAgICArCQlwcmludGYoIiUqcyVzICIsIGluZGVudCAtIDEsICIiLCBtZW51LT5w
cm9tcHQtPnRleHQpOw0KICAgICsJCWlmIChzeW0tPm5hbWUpDQogICAgKwkJCXByaW50ZigiKCVz
KSAiLCBzeW0tPm5hbWUpOw0KICAgICsJCXB1dGNoYXIoJ1snKTsNCiAgICArCQlvbGR2YWwgPSBz
eW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKwkJc3dpdGNoIChvbGR2YWwpIHsNCiAg
ICArCQljYXNlIG5vOg0KICAgICsJCQlwdXRjaGFyKCdOJyk7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWNhc2UgbW9kOg0KICAgICsJCQlwdXRjaGFyKCdNJyk7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWNhc2UgeWVzOg0KICAgICsJCQlwdXRjaGFyKCdZJyk7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCX0NCiAgICArCQlpZiAob2xkdmFsICE9IG5vICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFu
Z2Uoc3ltLCBubykpDQogICAgKwkJCXByaW50ZigiL24iKTsNCiAgICArCQlpZiAob2xkdmFsICE9
IG1vZCAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbW9kKSkNCiAgICArCQkJcHJp
bnRmKCIvbSIpOw0KICAgICsJCWlmIChvbGR2YWwgIT0geWVzICYmIHN5bV90cmlzdGF0ZV93aXRo
aW5fcmFuZ2Uoc3ltLCB5ZXMpKQ0KICAgICsJCQlwcmludGYoIi95Iik7DQogICAgKwkJcHJpbnRm
KCIvP10gIik7DQogICAgKwkJaWYgKCFjb25mX2Fza3ZhbHVlKHN5bSwgc3ltX2dldF9zdHJpbmdf
dmFsdWUoc3ltKSkpDQogICAgKwkJCXJldHVybiAwOw0KICAgICsJCXN0cmlwKGxpbmUpOw0KICAg
ICsNCiAgICArCQlzd2l0Y2ggKGxpbmVbMF0pIHsNCiAgICArCQljYXNlICduJzoNCiAgICArCQlj
YXNlICdOJzoNCiAgICArCQkJbmV3dmFsID0gbm87DQogICAgKwkJCWlmICghbGluZVsxXSB8fCAh
c3RyY21wKCZsaW5lWzFdLCAibyIpKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNvbnRpbnVl
Ow0KICAgICsJCWNhc2UgJ20nOg0KICAgICsJCWNhc2UgJ00nOg0KICAgICsJCQluZXd2YWwgPSBt
b2Q7DQogICAgKwkJCWlmICghbGluZVsxXSkNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQljb250
aW51ZTsNCiAgICArCQljYXNlICd5JzoNCiAgICArCQljYXNlICdZJzoNCiAgICArCQkJbmV3dmFs
ID0geWVzOw0KICAgICsJCQlpZiAoIWxpbmVbMV0gfHwgIXN0cmNtcCgmbGluZVsxXSwgImVzIikp
DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY29udGludWU7DQogICAgKwkJY2FzZSAwOg0KICAg
ICsJCQluZXd2YWwgPSBvbGR2YWw7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJz8nOg0K
ICAgICsJCQlnb3RvIGhlbHA7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJY29udGludWU7DQog
ICAgKwkJfQ0KICAgICsJCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbmV3dmFsKSkN
CiAgICArCQkJcmV0dXJuIDA7DQogICAgK2hlbHA6DQogICAgKwkJcHJpbnRfaGVscChtZW51KTsN
CiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGludCBjb25mX2Nob2ljZShzdHJ1
Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltLCAqZGVmX3N5
bTsNCiAgICArCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICArCWJvb2wgaXNfbmV3Ow0KICAgICsN
CiAgICArCXN5bSA9IG1lbnUtPnN5bTsNCiAgICArCWlzX25ldyA9ICFzeW1faGFzX3ZhbHVlKHN5
bSk7DQogICAgKwlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7DQogICAgKwkJY29uZl9zeW0o
bWVudSk7DQogICAgKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICArCQlzd2l0Y2ggKHN5bV9n
ZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgew0KICAgICsJCWNhc2Ugbm86DQogICAgKwkJCXJldHVy
biAxOw0KICAgICsJCWNhc2UgbW9kOg0KICAgICsJCQlyZXR1cm4gMDsNCiAgICArCQljYXNlIHll
czoNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJfSBlbHNlIHsNCiAgICArCQlzd2l0
Y2ggKHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgew0KICAgICsJCWNhc2Ugbm86DQogICAg
KwkJCXJldHVybiAxOw0KICAgICsJCWNhc2UgbW9kOg0KICAgICsJCQlwcmludGYoIiUqcyVzXG4i
LCBpbmRlbnQgLSAxLCAiIiwgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsNCiAgICArCQkJcmV0dXJu
IDA7DQogICAgKwkJY2FzZSB5ZXM6DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCX0N
CiAgICArDQogICAgKwl3aGlsZSAoMSkgew0KICAgICsJCWludCBjbnQsIGRlZjsNCiAgICArDQog
ICAgKwkJcHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0gMSwgIiIsIG1lbnVfZ2V0X3Byb21wdCht
ZW51KSk7DQogICAgKwkJZGVmX3N5bSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN5bSk7DQogICAg
KwkJY250ID0gZGVmID0gMDsNCiAgICArCQlsaW5lWzBdID0gMDsNCiAgICArCQlmb3IgKGNoaWxk
ID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICArCQkJaWYg
KCFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWlm
ICghY2hpbGQtPnN5bSkgew0KICAgICsJCQkJcHJpbnRmKCIlKmMgJXNcbiIsIGluZGVudCwgJyon
LCBtZW51X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQl9
DQogICAgKwkJCWNudCsrOw0KICAgICsJCQlpZiAoY2hpbGQtPnN5bSA9PSBkZWZfc3ltKSB7DQog
ICAgKwkJCQlkZWYgPSBjbnQ7DQogICAgKwkJCQlwcmludGYoIiUqYyIsIGluZGVudCwgJz4nKTsN
CiAgICArCQkJfSBlbHNlDQogICAgKwkJCQlwcmludGYoIiUqYyIsIGluZGVudCwgJyAnKTsNCiAg
ICArCQkJcHJpbnRmKCIgJWQuICVzIiwgY250LCBtZW51X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAg
ICArCQkJaWYgKGNoaWxkLT5zeW0tPm5hbWUpDQogICAgKwkJCQlwcmludGYoIiAoJXMpIiwgY2hp
bGQtPnN5bS0+bmFtZSk7DQogICAgKwkJCWlmICghc3ltX2hhc192YWx1ZShjaGlsZC0+c3ltKSkN
CiAgICArCQkJCXByaW50ZigiIChORVcpIik7DQogICAgKwkJCXByaW50ZigiXG4iKTsNCiAgICAr
CQl9DQogICAgKwkJcHJpbnRmKCIlKnNjaG9pY2UiLCBpbmRlbnQgLSAxLCAiIik7DQogICAgKwkJ
aWYgKGNudCA9PSAxKSB7DQogICAgKwkJCXByaW50ZigiWzFdOiAxXG4iKTsNCiAgICArCQkJZ290
byBjb25mX2NoaWxkczsNCiAgICArCQl9DQogICAgKwkJcHJpbnRmKCJbMS0lZD9dOiAiLCBjbnQp
Ow0KICAgICsJCXN3aXRjaCAoaW5wdXRfbW9kZSkgew0KICAgICsJCWNhc2Ugb2xkY29uZmlnOg0K
ICAgICsJCWNhc2Ugc3luY2NvbmZpZzoNCiAgICArCQkJaWYgKCFpc19uZXcpIHsNCiAgICArCQkJ
CWNudCA9IGRlZjsNCiAgICArCQkJCXByaW50ZigiJWRcbiIsIGNudCk7DQogICAgKwkJCQlicmVh
azsNCiAgICArCQkJfQ0KICAgICsJCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICArCQljYXNlIG9s
ZGFza2NvbmZpZzoNCiAgICArCQkJZmZsdXNoKHN0ZG91dCk7DQogICAgKwkJCXhmZ2V0cyhsaW5l
LCBzaXplb2YobGluZSksIHN0ZGluKTsNCiAgICArCQkJc3RyaXAobGluZSk7DQogICAgKwkJCWlm
IChsaW5lWzBdID09ICc/Jykgew0KICAgICsJCQkJcHJpbnRfaGVscChtZW51KTsNCiAgICArCQkJ
CWNvbnRpbnVlOw0KICAgICsJCQl9DQogICAgKwkJCWlmICghbGluZVswXSkNCiAgICArCQkJCWNu
dCA9IGRlZjsNCiAgICArCQkJZWxzZSBpZiAoaXNkaWdpdChsaW5lWzBdKSkNCiAgICArCQkJCWNu
dCA9IGF0b2kobGluZSk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJ
CQlicmVhazsNCiAgICArCQlkZWZhdWx0Og0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAg
Kw0KICAgICsJY29uZl9jaGlsZHM6DQogICAgKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgKwkJCWlmICghY2hpbGQtPnN5bSB8fCAh
bWVudV9pc192aXNpYmxlKGNoaWxkKSkNCiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQlpZiAo
IS0tY250KQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlmICghY2hpbGQpDQog
ICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCWlmIChsaW5lWzBdICYmIGxpbmVbc3RybGVuKGxpbmUp
IC0gMV0gPT0gJz8nKSB7DQogICAgKwkJCXByaW50X2hlbHAoY2hpbGQpOw0KICAgICsJCQljb250
aW51ZTsNCiAgICArCQl9DQogICAgKwkJc3ltX3NldF9jaG9pY2VfdmFsdWUoc3ltLCBjaGlsZC0+
c3ltKTsNCiAgICArCQlmb3IgKGNoaWxkID0gY2hpbGQtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT5uZXh0KSB7DQogICAgKwkJCWluZGVudCArPSAyOw0KICAgICsJCQljb25mKGNoaWxkKTsN
CiAgICArCQkJaW5kZW50IC09IDI7DQogICAgKwkJfQ0KICAgICsJCXJldHVybiAxOw0KICAgICsJ
fQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51
KQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7DQogICAgKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgKw0KICAgICsJaWYgKCFt
ZW51X2lzX3Zpc2libGUobWVudSkpDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAgICArCXN5bSA9
IG1lbnUtPnN5bTsNCiAgICArCXByb3AgPSBtZW51LT5wcm9tcHQ7DQogICAgKwlpZiAocHJvcCkg
ew0KICAgICsJCWNvbnN0IGNoYXIgKnByb21wdDsNCiAgICArDQogICAgKwkJc3dpdGNoIChwcm9w
LT50eXBlKSB7DQogICAgKwkJY2FzZSBQX01FTlU6DQogICAgKwkJCS8qDQogICAgKwkJCSAqIEV4
Y2VwdCBpbiBvbGRhc2tjb25maWcgbW9kZSwgd2Ugc2hvdyBvbmx5IG1lbnVzIHRoYXQNCiAgICAr
CQkJICogY29udGFpbiBuZXcgc3ltYm9scy4NCiAgICArCQkJICovDQogICAgKwkJCWlmIChpbnB1
dF9tb2RlICE9IG9sZGFza2NvbmZpZyAmJiByb290RW50cnkgIT0gbWVudSkgew0KICAgICsJCQkJ
Y2hlY2tfY29uZihtZW51KTsNCiAgICArCQkJCXJldHVybjsNCiAgICArCQkJfQ0KICAgICsJCQkv
KiBmYWxsIHRocm91Z2ggKi8NCiAgICArCQljYXNlIFBfQ09NTUVOVDoNCiAgICArCQkJcHJvbXB0
ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgICsJCQlpZiAocHJvbXB0KQ0KICAgICsJCQkJ
cHJpbnRmKCIlKmNcbiUqYyAlc1xuJSpjXG4iLA0KICAgICsJCQkJCWluZGVudCwgJyonLA0KICAg
ICsJCQkJCWluZGVudCwgJyonLCBwcm9tcHQsDQogICAgKwkJCQkJaW5kZW50LCAnKicpOw0KICAg
ICsJCWRlZmF1bHQ6DQogICAgKwkJCTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJ
aWYgKCFzeW0pDQogICAgKwkJZ290byBjb25mX2NoaWxkczsNCiAgICArDQogICAgKwlpZiAoc3lt
X2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJY29uZl9jaG9pY2UobWVudSk7DQogICAgKwkJaWYg
KHN5bS0+Y3Vyci50cmkgIT0gbW9kKQ0KICAgICsJCQlyZXR1cm47DQogICAgKwkJZ290byBjb25m
X2NoaWxkczsNCiAgICArCX0NCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAg
ICsJY2FzZSBTX0lOVDoNCiAgICArCWNhc2UgU19IRVg6DQogICAgKwljYXNlIFNfU1RSSU5HOg0K
ICAgICsJCWNvbmZfc3RyaW5nKG1lbnUpOw0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoN
CiAgICArCQljb25mX3N5bShtZW51KTsNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArDQog
ICAgK2NvbmZfY2hpbGRzOg0KICAgICsJaWYgKHN5bSkNCiAgICArCQlpbmRlbnQgKz0gMjsNCiAg
ICArCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkN
CiAgICArCQljb25mKGNoaWxkKTsNCiAgICArCWlmIChzeW0pDQogICAgKwkJaW5kZW50IC09IDI7
DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNoZWNrX2NvbmYoc3RydWN0IG1lbnUg
Km1lbnUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICArCXN0cnVjdCBt
ZW51ICpjaGlsZDsNCiAgICArDQogICAgKwlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSkNCiAg
ICArCQlyZXR1cm47DQogICAgKw0KICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsJaWYgKHN5
bSAmJiAhc3ltX2hhc192YWx1ZShzeW0pKSB7DQogICAgKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUo
c3ltKSB8fA0KICAgICsJCSAgICAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3Rh
dGVfdmFsdWUoc3ltKSA9PSB5ZXMpKSB7DQogICAgKwkJCWlmIChpbnB1dF9tb2RlID09IGxpc3Ru
ZXdjb25maWcpIHsNCiAgICArCQkJCWlmIChzeW0tPm5hbWUpIHsNCiAgICArCQkJCQljb25zdCBj
aGFyICpzdHI7DQogICAgKw0KICAgICsJCQkJCWlmIChzeW0tPnR5cGUgPT0gU19TVFJJTkcpIHsN
CiAgICArCQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsNCiAgICArCQkJCQkJ
c3RyID0gc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoc3RyKTsNCiAgICArCQkJCQkJcHJpbnRmKCIl
cyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIHN0cik7DQogICAgKwkJCQkJCWZyZWUoKHZv
aWQgKilzdHIpOw0KICAgICsJCQkJCX0gZWxzZSB7DQogICAgKwkJCQkJCXN0ciA9IHN5bV9nZXRf
c3RyaW5nX3ZhbHVlKHN5bSk7DQogICAgKwkJCQkJCXByaW50ZigiJXMlcz0lc1xuIiwgQ09ORklH
Xywgc3ltLT5uYW1lLCBzdHIpOw0KICAgICsJCQkJCX0NCiAgICArCQkJCX0NCiAgICArCQkJfSBl
bHNlIHsNCiAgICArCQkJCWlmICghY29uZl9jbnQrKykNCiAgICArCQkJCQlwcmludGYoIipcbiog
UmVzdGFydCBjb25maWcuLi5cbipcbiIpOw0KICAgICsJCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRf
cGFyZW50X21lbnUobWVudSk7DQogICAgKwkJCQljb25mKHJvb3RFbnRyeSk7DQogICAgKwkJCX0N
CiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7
IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQ0KICAgICsJCWNoZWNrX2NvbmYoY2hpbGQpOw0K
ICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdHNbXSA9IHsN
CiAgICArCXsib2xkYXNrY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGFz
a2NvbmZpZ30sDQogICAgKwl7Im9sZGNvbmZpZyIsICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBO
VUxMLCBvbGRjb25maWd9LA0KICAgICsJeyJzeW5jY29uZmlnIiwgICAgICBub19hcmd1bWVudCwg
ICAgICAgTlVMTCwgc3luY2NvbmZpZ30sDQogICAgKwl7ImRlZmNvbmZpZyIsICAgICAgIG9wdGlv
bmFsX2FyZ3VtZW50LCBOVUxMLCBkZWZjb25maWd9LA0KICAgICsJeyJzYXZlZGVmY29uZmlnIiwg
ICByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgc2F2ZWRlZmNvbmZpZ30sDQogICAgKwl7ImFsbG5v
Y29uZmlnIiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxub2NvbmZpZ30sDQogICAg
Kwl7ImFsbHllc2NvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGx5ZXNjb25m
aWd9LA0KICAgICsJeyJhbGxtb2Rjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwg
YWxsbW9kY29uZmlnfSwNCiAgICArCXsiYWxsZGVmY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAg
ICAgIE5VTEwsIGFsbGRlZmNvbmZpZ30sDQogICAgKwl7InJhbmRjb25maWciLCAgICAgIG5vX2Fy
Z3VtZW50LCAgICAgICBOVUxMLCByYW5kY29uZmlnfSwNCiAgICArCXsibGlzdG5ld2NvbmZpZyIs
ICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGxpc3RuZXdjb25maWd9LA0KICAgICsJeyJvbGRk
ZWZjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkZGVmY29uZmlnfSwNCiAg
ICArCXtOVUxMLCAwLCBOVUxMLCAwfQ0KICAgICt9Ow0KICAgICsNCiAgICArc3RhdGljIHZvaWQg
Y29uZl91c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkNCiAgICArew0KICAgICsNCiAgICArCXBy
aW50ZigiVXNhZ2U6ICVzIFstc10gW29wdGlvbl0gPGtjb25maWctZmlsZT5cbiIsIHByb2duYW1l
KTsNCiAgICArCXByaW50ZigiW29wdGlvbl0gaXMgX29uZV8gb2YgdGhlIGZvbGxvd2luZzpcbiIp
Ow0KICAgICsJcHJpbnRmKCIgIC0tbGlzdG5ld2NvbmZpZyAgICAgICAgIExpc3QgbmV3IG9wdGlv
bnNcbiIpOw0KICAgICsJcHJpbnRmKCIgIC0tb2xkYXNrY29uZmlnICAgICAgICAgIFN0YXJ0IGEg
bmV3IGNvbmZpZ3VyYXRpb24gdXNpbmcgYSBsaW5lLW9yaWVudGVkIHByb2dyYW1cbiIpOw0KICAg
ICsJcHJpbnRmKCIgIC0tb2xkY29uZmlnICAgICAgICAgICAgIFVwZGF0ZSBhIGNvbmZpZ3VyYXRp
b24gdXNpbmcgYSBwcm92aWRlZCAuY29uZmlnIGFzIGJhc2VcbiIpOw0KICAgICsJcHJpbnRmKCIg
IC0tc3luY2NvbmZpZyAgICAgICAgICAgIFNpbWlsYXIgdG8gb2xkY29uZmlnIGJ1dCBnZW5lcmF0
ZXMgY29uZmlndXJhdGlvbiBpblxuIg0KICAgICsJICAgICAgICIgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluY2x1ZGUve2dlbmVyYXRlZC8sY29uZmlnL31cbiIpOw0KICAgICsJcHJpbnRmKCIg
IC0tb2xkZGVmY29uZmlnICAgICAgICAgIFNhbWUgYXMgb2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBz
eW1ib2xzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVcbiIpOw0KICAgICsJcHJpbnRmKCIgIC0tZGVm
Y29uZmlnIDxmaWxlPiAgICAgIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGRlZmluZWQgaW4gPGZp
bGU+XG4iKTsNCiAgICArCXByaW50ZigiICAtLXNhdmVkZWZjb25maWcgPGZpbGU+ICBTYXZlIHRo
ZSBtaW5pbWFsIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byA8ZmlsZT5cbiIpOw0KICAgICsJcHJp
bnRmKCIgIC0tYWxsbm9jb25maWcgICAgICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlv
bnMgYXJlIGFuc3dlcmVkIHdpdGggbm9cbiIpOw0KICAgICsJcHJpbnRmKCIgIC0tYWxseWVzY29u
ZmlnICAgICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdp
dGggeWVzXG4iKTsNCiAgICArCXByaW50ZigiICAtLWFsbG1vZGNvbmZpZyAgICAgICAgICBOZXcg
Y29uZmlnIHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG1vZFxuIik7DQogICAg
KwlwcmludGYoIiAgLS1hbGxkZWZjb25maWcgICAgICAgICAgTmV3IGNvbmZpZyB3aXRoIGFsbCBz
eW1ib2xzIHNldCB0byBkZWZhdWx0XG4iKTsNCiAgICArCXByaW50ZigiICAtLXJhbmRjb25maWcg
ICAgICAgICAgICBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dlciB0byBhbGwgb3B0aW9uc1xu
Iik7DQogICAgK30NCiAgICArDQogICAgK2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQ0KICAg
ICt7DQogICAgKwljb25zdCBjaGFyICpwcm9nbmFtZSA9IGF2WzBdOw0KICAgICsJaW50IG9wdDsN
CiAgICArCWNvbnN0IGNoYXIgKm5hbWUsICpkZWZjb25maWdfZmlsZSA9IE5VTEwgLyogZ2NjIHVu
aW5pdCAqLzsNCiAgICArCWludCBub19jb25mX3dyaXRlID0gMDsNCiAgICArDQogICAgKwl0dHlf
c3RkaW8gPSBpc2F0dHkoMCkgJiYgaXNhdHR5KDEpOw0KICAgICsNCiAgICArCXdoaWxlICgob3B0
ID0gZ2V0b3B0X2xvbmcoYWMsIGF2LCAicyIsIGxvbmdfb3B0cywgTlVMTCkpICE9IC0xKSB7DQog
ICAgKwkJaWYgKG9wdCA9PSAncycpIHsNCiAgICArCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFj
ayhOVUxMKTsNCiAgICArCQkJY29udGludWU7DQogICAgKwkJfQ0KICAgICsJCWlucHV0X21vZGUg
PSAoZW51bSBpbnB1dF9tb2RlKW9wdDsNCiAgICArCQlzd2l0Y2ggKG9wdCkgew0KICAgICsJCWNh
c2Ugc3luY2NvbmZpZzoNCiAgICArCQkJLyoNCiAgICArCQkJICogc3luY2NvbmZpZyBpcyBpbnZv
a2VkIGR1cmluZyB0aGUgYnVpbGQgc3RhZ2UuDQogICAgKwkJCSAqIFN1cHByZXNzIGRpc3RyYWN0
aW5nICJjb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gLi4uIg0KICAgICsJCQkgKi8NCiAgICArCQkJ
Y29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsNCiAgICArCQkJc3luY19rY29uZmlnID0g
MTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBkZWZjb25maWc6DQogICAgKwkJY2FzZSBz
YXZlZGVmY29uZmlnOg0KICAgICsJCQlkZWZjb25maWdfZmlsZSA9IG9wdGFyZzsNCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJY2FzZSByYW5kY29uZmlnOg0KICAgICsJCXsNCiAgICArCQkJc3RydWN0
IHRpbWV2YWwgbm93Ow0KICAgICsJCQl1bnNpZ25lZCBpbnQgc2VlZDsNCiAgICArCQkJY2hhciAq
c2VlZF9lbnY7DQogICAgKw0KICAgICsJCQkvKg0KICAgICsJCQkgKiBVc2UgbWljcm9zZWNvbmRz
IGRlcml2ZWQgc2VlZCwNCiAgICArCQkJICogY29tcGVuc2F0ZSBmb3Igc3lzdGVtcyB3aGVyZSBp
dCBtYXkgYmUgemVybw0KICAgICsJCQkgKi8NCiAgICArCQkJZ2V0dGltZW9mZGF5KCZub3csIE5V
TEwpOw0KICAgICsJCQlzZWVkID0gKHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChu
b3cudHZfdXNlYyArIDEpKTsNCiAgICArDQogICAgKwkJCXNlZWRfZW52ID0gZ2V0ZW52KCJLQ09O
RklHX1NFRUQiKTsNCiAgICArCQkJaWYoIHNlZWRfZW52ICYmICpzZWVkX2VudiApIHsNCiAgICAr
CQkJCWNoYXIgKmVuZHA7DQogICAgKwkJCQlpbnQgdG1wID0gKGludClzdHJ0b2woc2VlZF9lbnYs
ICZlbmRwLCAwKTsNCiAgICArCQkJCWlmICgqZW5kcCA9PSAnXDAnKSB7DQogICAgKwkJCQkJc2Vl
ZCA9IHRtcDsNCiAgICArCQkJCX0NCiAgICArCQkJfQ0KICAgICsJCQlmcHJpbnRmKCBzdGRlcnIs
ICJLQ09ORklHX1NFRUQ9MHglWFxuIiwgc2VlZCApOw0KICAgICsJCQlzcmFuZChzZWVkKTsNCiAg
ICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWNhc2Ugb2xkYXNrY29uZmlnOg0KICAgICsJ
CWNhc2Ugb2xkY29uZmlnOg0KICAgICsJCWNhc2UgYWxsbm9jb25maWc6DQogICAgKwkJY2FzZSBh
bGx5ZXNjb25maWc6DQogICAgKwkJY2FzZSBhbGxtb2Rjb25maWc6DQogICAgKwkJY2FzZSBhbGxk
ZWZjb25maWc6DQogICAgKwkJY2FzZSBsaXN0bmV3Y29uZmlnOg0KICAgICsJCWNhc2Ugb2xkZGVm
Y29uZmlnOg0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlICc/JzoNCiAgICArCQkJY29uZl91
c2FnZShwcm9nbmFtZSk7DQogICAgKwkJCWV4aXQoMSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CX0NCiAgICArCX0NCiAgICArCWlmIChhYyA9PSBvcHRpbmQpIHsNCiAgICArCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xuIiwgYXZbMF0pOw0KICAgICsJCWNvbmZf
dXNhZ2UocHJvZ25hbWUpOw0KICAgICsJCWV4aXQoMSk7DQogICAgKwl9DQogICAgKwluYW1lID0g
YXZbb3B0aW5kXTsNCiAgICArCWNvbmZfcGFyc2UobmFtZSk7DQogICAgKwkvL3pjb25mZHVtcChz
dGRvdXQpOw0KICAgICsNCiAgICArCXN3aXRjaCAoaW5wdXRfbW9kZSkgew0KICAgICsJY2FzZSBk
ZWZjb25maWc6DQogICAgKwkJaWYgKCFkZWZjb25maWdfZmlsZSkNCiAgICArCQkJZGVmY29uZmln
X2ZpbGUgPSBjb25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKCk7DQogICAgKwkJaWYgKGNvbmZfcmVh
ZChkZWZjb25maWdfZmlsZSkpIHsNCiAgICArCQkJZnByaW50ZihzdGRlcnIsDQogICAgKwkJCQki
KioqXG4iDQogICAgKwkJCQkgICIqKiogQ2FuJ3QgZmluZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24g
XCIlc1wiIVxuIg0KICAgICsJCQkJICAiKioqXG4iLA0KICAgICsJCQkJZGVmY29uZmlnX2ZpbGUp
Ow0KICAgICsJCQlleGl0KDEpOw0KICAgICsJCX0NCiAgICArCQlicmVhazsNCiAgICArCWNhc2Ug
c2F2ZWRlZmNvbmZpZzoNCiAgICArCWNhc2Ugc3luY2NvbmZpZzoNCiAgICArCWNhc2Ugb2xkYXNr
Y29uZmlnOg0KICAgICsJY2FzZSBvbGRjb25maWc6DQogICAgKwljYXNlIGxpc3RuZXdjb25maWc6
DQogICAgKwljYXNlIG9sZGRlZmNvbmZpZzoNCiAgICArCQljb25mX3JlYWQoTlVMTCk7DQogICAg
KwkJYnJlYWs7DQogICAgKwljYXNlIGFsbG5vY29uZmlnOg0KICAgICsJY2FzZSBhbGx5ZXNjb25m
aWc6DQogICAgKwljYXNlIGFsbG1vZGNvbmZpZzoNCiAgICArCWNhc2UgYWxsZGVmY29uZmlnOg0K
ICAgICsJY2FzZSByYW5kY29uZmlnOg0KICAgICsJCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfQUxM
Q09ORklHIik7DQogICAgKwkJaWYgKCFuYW1lKQ0KICAgICsJCQlicmVhazsNCiAgICArCQlpZiAo
KHN0cmNtcChuYW1lLCAiIikgIT0gMCkgJiYgKHN0cmNtcChuYW1lLCAiMSIpICE9IDApKSB7DQog
ICAgKwkJCWlmIChjb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpKSB7DQogICAgKwkJ
CQlmcHJpbnRmKHN0ZGVyciwNCiAgICArCQkJCQkiKioqIENhbid0IHJlYWQgc2VlZCBjb25maWd1
cmF0aW9uIFwiJXNcIiFcbiIsDQogICAgKwkJCQkJbmFtZSk7DQogICAgKwkJCQlleGl0KDEpOw0K
ICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCQlzd2l0Y2ggKGlucHV0
X21vZGUpIHsNCiAgICArCQljYXNlIGFsbG5vY29uZmlnOgluYW1lID0gImFsbG5vLmNvbmZpZyI7
IGJyZWFrOw0KICAgICsJCWNhc2UgYWxseWVzY29uZmlnOgluYW1lID0gImFsbHllcy5jb25maWci
OyBicmVhazsNCiAgICArCQljYXNlIGFsbG1vZGNvbmZpZzoJbmFtZSA9ICJhbGxtb2QuY29uZmln
IjsgYnJlYWs7DQogICAgKwkJY2FzZSBhbGxkZWZjb25maWc6CW5hbWUgPSAiYWxsZGVmLmNvbmZp
ZyI7IGJyZWFrOw0KICAgICsJCWNhc2UgcmFuZGNvbmZpZzoJbmFtZSA9ICJhbGxyYW5kb20uY29u
ZmlnIjsgYnJlYWs7DQogICAgKwkJZGVmYXVsdDogYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlm
IChjb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpICYmDQogICAgKwkJICAgIGNvbmZf
cmVhZF9zaW1wbGUoImFsbC5jb25maWciLCBTX0RFRl9VU0VSKSkgew0KICAgICsJCQlmcHJpbnRm
KHN0ZGVyciwNCiAgICArCQkJCSIqKiogS0NPTkZJR19BTExDT05GSUcgc2V0LCBidXQgbm8gXCIl
c1wiIG9yIFwiYWxsLmNvbmZpZ1wiIGZpbGUgZm91bmRcbiIsDQogICAgKwkJCQluYW1lKTsNCiAg
ICArCQkJZXhpdCgxKTsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0K
ICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmIChzeW5jX2tjb25maWcpIHsN
CiAgICArCQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX05PU0lMRU5UVVBEQVRFIik7DQogICAgKwkJ
aWYgKG5hbWUgJiYgKm5hbWUpIHsNCiAgICArCQkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkgew0K
ICAgICsJCQkJZnByaW50ZihzdGRlcnIsDQogICAgKwkJCQkJIlxuKioqIFRoZSBjb25maWd1cmF0
aW9uIHJlcXVpcmVzIGV4cGxpY2l0IHVwZGF0ZS5cblxuIik7DQogICAgKwkJCQlyZXR1cm4gMTsN
CiAgICArCQkJfQ0KICAgICsJCQlub19jb25mX3dyaXRlID0gMTsNCiAgICArCQl9DQogICAgKwl9
DQogICAgKw0KICAgICsJc3dpdGNoIChpbnB1dF9tb2RlKSB7DQogICAgKwljYXNlIGFsbG5vY29u
ZmlnOg0KICAgICsJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfbm8pOw0KICAgICsJCWJy
ZWFrOw0KICAgICsJY2FzZSBhbGx5ZXNjb25maWc6DQogICAgKwkJY29uZl9zZXRfYWxsX25ld19z
eW1ib2xzKGRlZl95ZXMpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBhbGxtb2Rjb25maWc6
DQogICAgKwkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9tb2QpOw0KICAgICsJCWJyZWFr
Ow0KICAgICsJY2FzZSBhbGxkZWZjb25maWc6DQogICAgKwkJY29uZl9zZXRfYWxsX25ld19zeW1i
b2xzKGRlZl9kZWZhdWx0KTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgcmFuZGNvbmZpZzoN
CiAgICArCQkvKiBSZWFsbHkgbm90aGluZyB0byBkbyBpbiB0aGlzIGxvb3AgKi8NCiAgICArCQl3
aGlsZSAoY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9yYW5kb20pKSA7DQogICAgKwkJYnJl
YWs7DQogICAgKwljYXNlIGRlZmNvbmZpZzoNCiAgICArCQljb25mX3NldF9hbGxfbmV3X3N5bWJv
bHMoZGVmX2RlZmF1bHQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBzYXZlZGVmY29uZmln
Og0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBvbGRhc2tjb25maWc6DQogICAgKwkJcm9vdEVu
dHJ5ID0gJnJvb3RtZW51Ow0KICAgICsJCWNvbmYoJnJvb3RtZW51KTsNCiAgICArCQlpbnB1dF9t
b2RlID0gb2xkY29uZmlnOw0KICAgICsJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgICsJY2FzZSBv
bGRjb25maWc6DQogICAgKwljYXNlIGxpc3RuZXdjb25maWc6DQogICAgKwljYXNlIHN5bmNjb25m
aWc6DQogICAgKwkJLyogVXBkYXRlIHVudGlsIGEgbG9vcCBjYXVzZWQgbm8gbW9yZSBjaGFuZ2Vz
ICovDQogICAgKwkJZG8gew0KICAgICsJCQljb25mX2NudCA9IDA7DQogICAgKwkJCWNoZWNrX2Nv
bmYoJnJvb3RtZW51KTsNCiAgICArCQl9IHdoaWxlIChjb25mX2NudCk7DQogICAgKwkJYnJlYWs7
DQogICAgKwljYXNlIG9sZGRlZmNvbmZpZzoNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJYnJlYWs7
DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKGlucHV0X21vZGUgPT0gc2F2ZWRlZmNvbmZpZykg
ew0KICAgICsJCWlmIChjb25mX3dyaXRlX2RlZmNvbmZpZyhkZWZjb25maWdfZmlsZSkpIHsNCiAg
ICArCQkJZnByaW50ZihzdGRlcnIsICJuKioqIEVycm9yIHdoaWxlIHNhdmluZyBkZWZjb25maWcg
dG86ICVzXG5cbiIsDQogICAgKwkJCQlkZWZjb25maWdfZmlsZSk7DQogICAgKwkJCXJldHVybiAx
Ow0KICAgICsJCX0NCiAgICArCX0gZWxzZSBpZiAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmln
KSB7DQogICAgKwkJaWYgKCFub19jb25mX3dyaXRlICYmIGNvbmZfd3JpdGUoTlVMTCkpIHsNCiAg
ICArCQkJZnByaW50ZihzdGRlcnIsICJcbioqKiBFcnJvciBkdXJpbmcgd3JpdGluZyBvZiB0aGUg
Y29uZmlndXJhdGlvbi5cblxuIik7DQogICAgKwkJCWV4aXQoMSk7DQogICAgKwkJfQ0KICAgICsN
CiAgICArCQkvKg0KICAgICsJCSAqIENyZWF0ZSBhdXRvLmNvbmYgaWYgaXQgZG9lcyBub3QgZXhp
c3QuDQogICAgKwkJICogVGhpcyBwcmV2ZW50cyBHTlUgTWFrZSA0LjEgb3Igb2xkZXIgZnJvbSBl
bWl0dGluZw0KICAgICsJCSAqICJpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY6IE5vIHN1Y2ggZmls
ZSBvciBkaXJlY3RvcnkiDQogICAgKwkJICogaW4gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZQ0KICAg
ICsJCSAqDQogICAgKwkJICogc3luY2NvbmZpZyBhbHdheXMgY3JlYXRlcyBvciB1cGRhdGVzIGF1
dG8uY29uZiBiZWNhdXNlIGl0IGlzDQogICAgKwkJICogdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLg0K
ICAgICsJCSAqLw0KICAgICsJCWlmIChjb25mX3dyaXRlX2F1dG9jb25mKHN5bmNfa2NvbmZpZykg
JiYgc3luY19rY29uZmlnKSB7DQogICAgKwkJCWZwcmludGYoc3RkZXJyLA0KICAgICsJCQkJIlxu
KioqIEVycm9yIGR1cmluZyBzeW5jIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG4iKTsNCiAgICAr
CQkJcmV0dXJuIDE7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJcmV0dXJuIDA7DQogICAgK30N
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5jIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9jb25mZGF0YS5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCAwMDAwMDAwLi42MDA2MTU0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvY29uZmRhdGEuYw0KICAgIEBAIC0wLDAgKzEsMTM4MCBAQA0KICAgICsv
LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5
cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAg
KyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQogICAgKyNpbmNsdWRlIDxz
eXMvc3RhdC5oPg0KICAgICsjaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICArI2luY2x1ZGUgPGVycm5v
Lmg+DQogICAgKyNpbmNsdWRlIDxmY250bC5oPg0KICAgICsjaW5jbHVkZSA8bGltaXRzLmg+DQog
ICAgKyNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyNp
bmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVk
ZSA8dGltZS5oPg0KICAgICsjaW5jbHVkZSA8dW5pc3RkLmg+DQogICAgKw0KICAgICsjaW5jbHVk
ZSAibGtjLmgiDQogICAgKw0KICAgICsvKiByZXR1cm4gdHJ1ZSBpZiAncGF0aCcgZXhpc3RzLCBm
YWxzZSBvdGhlcndpc2UgKi8NCiAgICArc3RhdGljIGJvb2wgaXNfcHJlc2VudChjb25zdCBjaGFy
ICpwYXRoKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3RhdCBzdDsNCiAgICArDQogICAgKwlyZXR1
cm4gIXN0YXQocGF0aCwgJnN0KTsNCiAgICArfQ0KICAgICsNCiAgICArLyogcmV0dXJuIHRydWUg
aWYgJ3BhdGgnIGV4aXN0cyBhbmQgaXQgaXMgYSBkaXJlY3RvcnksIGZhbHNlIG90aGVyd2lzZSAq
Lw0KICAgICtzdGF0aWMgYm9vbCBpc19kaXIoY29uc3QgY2hhciAqcGF0aCkNCiAgICArew0KICAg
ICsJc3RydWN0IHN0YXQgc3Q7DQogICAgKw0KICAgICsJaWYgKHN0YXQocGF0aCwgJnN0KSkNCiAg
ICArCQlyZXR1cm4gMDsNCiAgICArDQogICAgKwlyZXR1cm4gU19JU0RJUihzdC5zdF9tb2RlKTsN
CiAgICArfQ0KICAgICsNCiAgICArLyogcmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHR3byBmaWxl
cyBhcmUgdGhlIHNhbWUsIGZhbHNlIG90aGVyd2lzZSAqLw0KICAgICtzdGF0aWMgYm9vbCBpc19z
YW1lKGNvbnN0IGNoYXIgKmZpbGUxLCBjb25zdCBjaGFyICpmaWxlMikNCiAgICArew0KICAgICsJ
aW50IGZkMSwgZmQyOw0KICAgICsJc3RydWN0IHN0YXQgc3QxLCBzdDI7DQogICAgKwl2b2lkICpt
YXAxLCAqbWFwMjsNCiAgICArCWJvb2wgcmV0ID0gZmFsc2U7DQogICAgKw0KICAgICsJZmQxID0g
b3BlbihmaWxlMSwgT19SRE9OTFkpOw0KICAgICsJaWYgKGZkMSA8IDApDQogICAgKwkJcmV0dXJu
IHJldDsNCiAgICArDQogICAgKwlmZDIgPSBvcGVuKGZpbGUyLCBPX1JET05MWSk7DQogICAgKwlp
ZiAoZmQyIDwgMCkNCiAgICArCQlnb3RvIGNsb3NlMTsNCiAgICArDQogICAgKwlyZXQgPSBmc3Rh
dChmZDEsICZzdDEpOw0KICAgICsJaWYgKHJldCkNCiAgICArCQlnb3RvIGNsb3NlMjsNCiAgICAr
CXJldCA9IGZzdGF0KGZkMiwgJnN0Mik7DQogICAgKwlpZiAocmV0KQ0KICAgICsJCWdvdG8gY2xv
c2UyOw0KICAgICsNCiAgICArCWlmIChzdDEuc3Rfc2l6ZSAhPSBzdDIuc3Rfc2l6ZSkNCiAgICAr
CQlnb3RvIGNsb3NlMjsNCiAgICArDQogICAgKwltYXAxID0gbW1hcChOVUxMLCBzdDEuc3Rfc2l6
ZSwgUFJPVF9SRUFELCBNQVBfUFJJVkFURSwgZmQxLCAwKTsNCiAgICArCWlmIChtYXAxID09IE1B
UF9GQUlMRUQpDQogICAgKwkJZ290byBjbG9zZTI7DQogICAgKw0KICAgICsJbWFwMiA9IG1tYXAo
TlVMTCwgc3QyLnN0X3NpemUsIFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkMiwgMCk7DQogICAg
KwlpZiAobWFwMiA9PSBNQVBfRkFJTEVEKQ0KICAgICsJCWdvdG8gY2xvc2UyOw0KICAgICsNCiAg
ICArCWlmIChiY21wKG1hcDEsIG1hcDIsIHN0MS5zdF9zaXplKSkNCiAgICArCQlnb3RvIGNsb3Nl
MjsNCiAgICArDQogICAgKwlyZXQgPSB0cnVlOw0KICAgICtjbG9zZTI6DQogICAgKwljbG9zZShm
ZDIpOw0KICAgICtjbG9zZTE6DQogICAgKwljbG9zZShmZDEpOw0KICAgICsNCiAgICArCXJldHVy
biByZXQ7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIENyZWF0ZSB0aGUgcGFyZW50
IGRpcmVjdG9yeSBvZiB0aGUgZ2l2ZW4gcGF0aC4NCiAgICArICoNCiAgICArICogRm9yIGV4YW1w
bGUsIGlmICdpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYnIGlzIGdpdmVuLCBjcmVhdGUgJ2luY2x1
ZGUvY29uZmlnJy4NCiAgICArICovDQogICAgK3N0YXRpYyBpbnQgbWFrZV9wYXJlbnRfZGlyKGNv
bnN0IGNoYXIgKnBhdGgpDQogICAgK3sNCiAgICArCWNoYXIgdG1wW1BBVEhfTUFYICsgMV07DQog
ICAgKwljaGFyICpwOw0KICAgICsNCiAgICArCXN0cm5jcHkodG1wLCBwYXRoLCBzaXplb2YodG1w
KSk7DQogICAgKwl0bXBbc2l6ZW9mKHRtcCkgLSAxXSA9IDA7DQogICAgKw0KICAgICsJLyogUmVt
b3ZlIHRoZSBiYXNlIG5hbWUuIEp1c3QgcmV0dXJuIGlmIG5vdGhpbmcgaXMgbGVmdCAqLw0KICAg
ICsJcCA9IHN0cnJjaHIodG1wLCAnLycpOw0KICAgICsJaWYgKCFwKQ0KICAgICsJCXJldHVybiAw
Ow0KICAgICsJKihwICsgMSkgPSAwOw0KICAgICsNCiAgICArCS8qIEp1c3QgaW4gY2FzZSBpdCBp
cyBhbiBhYnNvbHV0ZSBwYXRoICovDQogICAgKwlwID0gdG1wOw0KICAgICsJd2hpbGUgKCpwID09
ICcvJykNCiAgICArCQlwKys7DQogICAgKw0KICAgICsJd2hpbGUgKChwID0gc3RyY2hyKHAsICcv
JykpKSB7DQogICAgKwkJKnAgPSAwOw0KICAgICsNCiAgICArCQkvKiBza2lwIGlmIHRoZSBkaXJl
Y3RvcnkgZXhpc3RzICovDQogICAgKwkJaWYgKCFpc19kaXIodG1wKSAmJiBta2Rpcih0bXAsIDA3
NTUpKQ0KICAgICsJCQlyZXR1cm4gLTE7DQogICAgKw0KICAgICsJCSpwID0gJy8nOw0KICAgICsJ
CXdoaWxlICgqcCA9PSAnLycpDQogICAgKwkJCXArKzsNCiAgICArCX0NCiAgICArDQogICAgKwly
ZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGNoYXIgZGVwZmlsZV9wYXRoW1BB
VEhfTUFYXTsNCiAgICArc3RhdGljIHNpemVfdCBkZXBmaWxlX3ByZWZpeF9sZW47DQogICAgKw0K
ICAgICsvKiB0b3VjaCBkZXBmaWxlIGZvciBzeW1ib2wgJ25hbWUnICovDQogICAgK3N0YXRpYyBp
bnQgY29uZl90b3VjaF9kZXAoY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0KICAgICsJaW50IGZk
LCByZXQ7DQogICAgKwljb25zdCBjaGFyICpzOw0KICAgICsJY2hhciAqZCwgYzsNCiAgICArDQog
ICAgKwkvKiBjaGVjayBvdmVyZmxvdzogcHJlZml4ICsgbmFtZSArICIuaCIgKyAnXDAnIG11c3Qg
Zml0IGluIGJ1ZmZlci4gKi8NCiAgICArCWlmIChkZXBmaWxlX3ByZWZpeF9sZW4gKyBzdHJsZW4o
bmFtZSkgKyAzID4gc2l6ZW9mKGRlcGZpbGVfcGF0aCkpDQogICAgKwkJcmV0dXJuIC0xOw0KICAg
ICsNCiAgICArCWQgPSBkZXBmaWxlX3BhdGggKyBkZXBmaWxlX3ByZWZpeF9sZW47DQogICAgKwlz
ID0gbmFtZTsNCiAgICArDQogICAgKwl3aGlsZSAoKGMgPSAqcysrKSkNCiAgICArCQkqZCsrID0g
KGMgPT0gJ18nKSA/ICcvJyA6IHRvbG93ZXIoYyk7DQogICAgKwlzdHJjcHkoZCwgIi5oIik7DQog
ICAgKw0KICAgICsJLyogQXNzdW1lIGRpcmVjdG9yeSBwYXRoIGFscmVhZHkgZXhpc3RzLiAqLw0K
ICAgICsJZmQgPSBvcGVuKGRlcGZpbGVfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVO
QywgMDY0NCk7DQogICAgKwlpZiAoZmQgPT0gLTEpIHsNCiAgICArCQlpZiAoZXJybm8gIT0gRU5P
RU5UKQ0KICAgICsJCQlyZXR1cm4gLTE7DQogICAgKw0KICAgICsJCXJldCA9IG1ha2VfcGFyZW50
X2RpcihkZXBmaWxlX3BhdGgpOw0KICAgICsJCWlmIChyZXQpDQogICAgKwkJCXJldHVybiByZXQ7
DQogICAgKw0KICAgICsJCS8qIFRyeSBpdCBhZ2Fpbi4gKi8NCiAgICArCQlmZCA9IG9wZW4oZGVw
ZmlsZV9wYXRoLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjQ0KTsNCiAgICArCQlp
ZiAoZmQgPT0gLTEpDQogICAgKwkJCXJldHVybiAtMTsNCiAgICArCX0NCiAgICArCWNsb3NlKGZk
KTsNCiAgICArDQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IGNv
bmZfcHJpbnRlciB7DQogICAgKwl2b2lkICgqcHJpbnRfc3ltYm9sKShGSUxFICosIHN0cnVjdCBz
eW1ib2wgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOw0KICAgICsJdm9pZCAoKnByaW50X2NvbW1l
bnQpKEZJTEUgKiwgY29uc3QgY2hhciAqLCB2b2lkICopOw0KICAgICt9Ow0KICAgICsNCiAgICAr
c3RhdGljIHZvaWQgY29uZl93YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgICsJX19h
dHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOw0KICAgICsNCiAgICArc3RhdGlj
IHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgICsJX19hdHRyaWJ1
dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpOw0KICAgICsNCiAgICArc3RhdGljIGNvbnN0
IGNoYXIgKmNvbmZfZmlsZW5hbWU7DQogICAgK3N0YXRpYyBpbnQgY29uZl9saW5lbm8sIGNvbmZf
d2FybmluZ3M7DQogICAgKw0KICAgICtjb25zdCBjaGFyIGNvbmZfZGVmbmFtZVtdID0gImFyY2gv
JChBUkNIKS9kZWZjb25maWciOw0KICAgICsNCiAgICArc3RhdGljIHZvaWQgY29uZl93YXJuaW5n
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgICt7DQogICAgKwl2YV9saXN0IGFwOw0KICAgICsJ
dmFfc3RhcnQoYXAsIGZtdCk7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6
ICIsIGNvbmZfZmlsZW5hbWUsIGNvbmZfbGluZW5vKTsNCiAgICArCXZmcHJpbnRmKHN0ZGVyciwg
Zm10LCBhcCk7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7DQogICAgKwl2YV9lbmQoYXAp
Ow0KICAgICsJY29uZl93YXJuaW5ncysrOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9p
ZCBjb25mX2RlZmF1bHRfbWVzc2FnZV9jYWxsYmFjayhjb25zdCBjaGFyICpzKQ0KICAgICt7DQog
ICAgKwlwcmludGYoIiNcbiMgIik7DQogICAgKwlwcmludGYoIiVzIiwgcyk7DQogICAgKwlwcmlu
dGYoIlxuI1xuIik7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkICgqY29uZl9tZXNz
YWdlX2NhbGxiYWNrKShjb25zdCBjaGFyICpzKSA9DQogICAgKwljb25mX2RlZmF1bHRfbWVzc2Fn
ZV9jYWxsYmFjazsNCiAgICArdm9pZCBjb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKHZvaWQgKCpm
bikoY29uc3QgY2hhciAqcykpDQogICAgK3sNCiAgICArCWNvbmZfbWVzc2FnZV9jYWxsYmFjayA9
IGZuOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX21lc3NhZ2UoY29uc3Qg
Y2hhciAqZm10LCAuLi4pDQogICAgK3sNCiAgICArCXZhX2xpc3QgYXA7DQogICAgKwljaGFyIGJ1
Zls0MDk2XTsNCiAgICArDQogICAgKwlpZiAoIWNvbmZfbWVzc2FnZV9jYWxsYmFjaykNCiAgICAr
CQlyZXR1cm47DQogICAgKw0KICAgICsJdmFfc3RhcnQoYXAsIGZtdCk7DQogICAgKw0KICAgICsJ
dnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOw0KICAgICsJY29uZl9tZXNzYWdl
X2NhbGxiYWNrKGJ1Zik7DQogICAgKwl2YV9lbmQoYXApOw0KICAgICt9DQogICAgKw0KICAgICtj
b25zdCBjaGFyICpjb25mX2dldF9jb25maWduYW1lKHZvaWQpDQogICAgK3sNCiAgICArCWNoYXIg
Km5hbWUgPSBnZXRlbnYoIktDT05GSUdfQ09ORklHIik7DQogICAgKw0KICAgICsJcmV0dXJuIG5h
bWUgPyBuYW1lIDogIi5jb25maWciOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgY29uc3Qg
Y2hhciAqY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKHZvaWQpDQogICAgK3sNCiAgICArCWNoYXIg
Km5hbWUgPSBnZXRlbnYoIktDT05GSUdfQVVUT0NPTkZJRyIpOw0KICAgICsNCiAgICArCXJldHVy
biBuYW1lID8gbmFtZSA6ICJpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYiOw0KICAgICt9DQogICAg
Kw0KICAgICtjaGFyICpjb25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKHZvaWQpDQogICAgK3sNCiAg
ICArCXN0YXRpYyBjaGFyIGZ1bGxuYW1lW1BBVEhfTUFYKzFdOw0KICAgICsJY2hhciAqZW52LCAq
bmFtZTsNCiAgICArDQogICAgKwluYW1lID0gZXhwYW5kX3N0cmluZyhjb25mX2RlZm5hbWUpOw0K
ICAgICsJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOw0KICAgICsJaWYgKGVudikgew0KICAgICsJCXNu
cHJpbnRmKGZ1bGxuYW1lLCBzaXplb2YoZnVsbG5hbWUpLCAiJXMvJXMiLCBlbnYsIG5hbWUpOw0K
ICAgICsJCWlmIChpc19wcmVzZW50KGZ1bGxuYW1lKSkNCiAgICArCQkJcmV0dXJuIGZ1bGxuYW1l
Ow0KICAgICsJfQ0KICAgICsJcmV0dXJuIG5hbWU7DQogICAgK30NCiAgICArDQogICAgK3N0YXRp
YyBpbnQgY29uZl9zZXRfc3ltX3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBkZWYsIGludCBk
ZWZfZmxhZ3MsIGNoYXIgKnApDQogICAgK3sNCiAgICArCWNoYXIgKnAyOw0KICAgICsNCiAgICAr
CXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJaWYg
KHBbMF0gPT0gJ20nKSB7DQogICAgKwkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbW9kOw0KICAgICsJ
CQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAg
ICsJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgICsJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJaWYg
KHBbMF0gPT0gJ3knKSB7DQogICAgKwkJCXN5bS0+ZGVmW2RlZl0udHJpID0geWVzOw0KICAgICsJ
CQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAg
ICsJCWlmIChwWzBdID09ICduJykgew0KICAgICsJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOw0K
ICAgICsJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
fQ0KICAgICsJCWlmIChkZWYgIT0gU19ERUZfQVVUTykNCiAgICArCQkJY29uZl93YXJuaW5nKCJz
eW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlcyIsDQogICAgKwkJCQkgICAgIHAsIHN5bS0+
bmFtZSk7DQogICAgKwkJcmV0dXJuIDE7DQogICAgKwljYXNlIFNfU1RSSU5HOg0KICAgICsJCWlm
ICgqcCsrICE9ICciJykNCiAgICArCQkJYnJlYWs7DQogICAgKwkJZm9yIChwMiA9IHA7IChwMiA9
IHN0cnBicmsocDIsICJcIlxcIikpOyBwMisrKSB7DQogICAgKwkJCWlmICgqcDIgPT0gJyInKSB7
DQogICAgKwkJCQkqcDIgPSAwOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0NCiAgICArCQkJ
bWVtbW92ZShwMiwgcDIgKyAxLCBzdHJsZW4ocDIpKTsNCiAgICArCQl9DQogICAgKwkJaWYgKCFw
Mikgew0KICAgICsJCQlpZiAoZGVmICE9IFNfREVGX0FVVE8pDQogICAgKwkJCQljb25mX3dhcm5p
bmcoImludmFsaWQgc3RyaW5nIGZvdW5kIik7DQogICAgKwkJCXJldHVybiAxOw0KICAgICsJCX0N
CiAgICArCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICArCWNhc2UgU19JTlQ6DQogICAgKwljYXNl
IFNfSEVYOg0KICAgICsJCWlmIChzeW1fc3RyaW5nX3ZhbGlkKHN5bSwgcCkpIHsNCiAgICArCQkJ
c3ltLT5kZWZbZGVmXS52YWwgPSB4c3RyZHVwKHApOw0KICAgICsJCQlzeW0tPmZsYWdzIHw9IGRl
Zl9mbGFnczsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlpZiAoZGVmICE9IFNfREVGX0FVVE8p
DQogICAgKwkJCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVz
IiwNCiAgICArCQkJCQkgICAgIHAsIHN5bS0+bmFtZSk7DQogICAgKwkJCXJldHVybiAxOw0KICAg
ICsJCX0NCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJOw0KICAgICsJfQ0K
ICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKyNkZWZpbmUgTElORV9HUk9XVEgg
MTYNCiAgICArc3RhdGljIGludCBhZGRfYnl0ZShpbnQgYywgY2hhciAqKmxpbmVwdHIsIHNpemVf
dCBzbGVuLCBzaXplX3QgKm4pDQogICAgK3sNCiAgICArCWNoYXIgKm5saW5lOw0KICAgICsJc2l6
ZV90IG5ld19zaXplID0gc2xlbiArIDE7DQogICAgKwlpZiAobmV3X3NpemUgPiAqbikgew0KICAg
ICsJCW5ld19zaXplICs9IExJTkVfR1JPV1RIIC0gMTsNCiAgICArCQluZXdfc2l6ZSAqPSAyOw0K
ICAgICsJCW5saW5lID0geHJlYWxsb2MoKmxpbmVwdHIsIG5ld19zaXplKTsNCiAgICArCQlpZiAo
IW5saW5lKQ0KICAgICsJCQlyZXR1cm4gLTE7DQogICAgKw0KICAgICsJCSpsaW5lcHRyID0gbmxp
bmU7DQogICAgKwkJKm4gPSBuZXdfc2l6ZTsNCiAgICArCX0NCiAgICArDQogICAgKwkoKmxpbmVw
dHIpW3NsZW5dID0gYzsNCiAgICArDQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAg
ICArc3RhdGljIHNzaXplX3QgY29tcGF0X2dldGxpbmUoY2hhciAqKmxpbmVwdHIsIHNpemVfdCAq
biwgRklMRSAqc3RyZWFtKQ0KICAgICt7DQogICAgKwljaGFyICpsaW5lID0gKmxpbmVwdHI7DQog
ICAgKwlzaXplX3Qgc2xlbiA9IDA7DQogICAgKw0KICAgICsJZm9yICg7Oykgew0KICAgICsJCWlu
dCBjID0gZ2V0YyhzdHJlYW0pOw0KICAgICsNCiAgICArCQlzd2l0Y2ggKGMpIHsNCiAgICArCQlj
YXNlICdcbic6DQogICAgKwkJCWlmIChhZGRfYnl0ZShjLCAmbGluZSwgc2xlbiwgbikgPCAwKQ0K
ICAgICsJCQkJZ290byBlX291dDsNCiAgICArCQkJc2xlbisrOw0KICAgICsJCQkvKiBmYWxsIHRo
cm91Z2ggKi8NCiAgICArCQljYXNlIEVPRjoNCiAgICArCQkJaWYgKGFkZF9ieXRlKCdcMCcsICZs
aW5lLCBzbGVuLCBuKSA8IDApDQogICAgKwkJCQlnb3RvIGVfb3V0Ow0KICAgICsJCQkqbGluZXB0
ciA9IGxpbmU7DQogICAgKwkJCWlmIChzbGVuID09IDApDQogICAgKwkJCQlyZXR1cm4gLTE7DQog
ICAgKwkJCXJldHVybiBzbGVuOw0KICAgICsJCWRlZmF1bHQ6DQogICAgKwkJCWlmIChhZGRfYnl0
ZShjLCAmbGluZSwgc2xlbiwgbikgPCAwKQ0KICAgICsJCQkJZ290byBlX291dDsNCiAgICArCQkJ
c2xlbisrOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgK2Vfb3V0Og0KICAgICsJbGlu
ZVtzbGVuLTFdID0gJ1wwJzsNCiAgICArCSpsaW5lcHRyID0gbGluZTsNCiAgICArCXJldHVybiAt
MTsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGNvbmZfcmVhZF9zaW1wbGUoY29uc3QgY2hhciAq
bmFtZSwgaW50IGRlZikNCiAgICArew0KICAgICsJRklMRSAqaW4gPSBOVUxMOw0KICAgICsJY2hh
ciAgICpsaW5lID0gTlVMTDsNCiAgICArCXNpemVfdCAgbGluZV9hc2l6ZSA9IDA7DQogICAgKwlj
aGFyICpwLCAqcDI7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlpbnQgaSwgZGVm
X2ZsYWdzOw0KICAgICsNCiAgICArCWlmIChuYW1lKSB7DQogICAgKwkJaW4gPSB6Y29uZl9mb3Bl
bihuYW1lKTsNCiAgICArCX0gZWxzZSB7DQogICAgKwkJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0K
ICAgICsNCiAgICArCQluYW1lID0gY29uZl9nZXRfY29uZmlnbmFtZSgpOw0KICAgICsJCWluID0g
emNvbmZfZm9wZW4obmFtZSk7DQogICAgKwkJaWYgKGluKQ0KICAgICsJCQlnb3RvIGxvYWQ7DQog
ICAgKwkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7DQogICAgKwkJaWYgKCFzeW1fZGVmY29uZmln
X2xpc3QpDQogICAgKwkJCXJldHVybiAxOw0KICAgICsNCiAgICArCQlmb3JfYWxsX2RlZmF1bHRz
KHN5bV9kZWZjb25maWdfbGlzdCwgcHJvcCkgew0KICAgICsJCQlpZiAoZXhwcl9jYWxjX3ZhbHVl
KHByb3AtPnZpc2libGUuZXhwcikgPT0gbm8gfHwNCiAgICArCQkJICAgIHByb3AtPmV4cHItPnR5
cGUgIT0gRV9TWU1CT0wpDQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJc3ltX2NhbGNfdmFs
dWUocHJvcC0+ZXhwci0+bGVmdC5zeW0pOw0KICAgICsJCQluYW1lID0gc3ltX2dldF9zdHJpbmdf
dmFsdWUocHJvcC0+ZXhwci0+bGVmdC5zeW0pOw0KICAgICsJCQlpbiA9IHpjb25mX2ZvcGVuKG5h
bWUpOw0KICAgICsJCQlpZiAoaW4pIHsNCiAgICArCQkJCWNvbmZfbWVzc2FnZSgidXNpbmcgZGVm
YXVsdHMgZm91bmQgaW4gJXMiLA0KICAgICsJCQkJCSBuYW1lKTsNCiAgICArCQkJCWdvdG8gbG9h
ZDsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWlmICghaW4pDQogICAgKwkJ
cmV0dXJuIDE7DQogICAgKw0KICAgICtsb2FkOg0KICAgICsJY29uZl9maWxlbmFtZSA9IG5hbWU7
DQogICAgKwljb25mX2xpbmVubyA9IDA7DQogICAgKwljb25mX3dhcm5pbmdzID0gMDsNCiAgICAr
DQogICAgKwlkZWZfZmxhZ3MgPSBTWU1CT0xfREVGIDw8IGRlZjsNCiAgICArCWZvcl9hbGxfc3lt
Ym9scyhpLCBzeW0pIHsNCiAgICArCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9DSEFOR0VEOw0KICAg
ICsJCXN5bS0+ZmxhZ3MgJj0gfihkZWZfZmxhZ3N8U1lNQk9MX1ZBTElEKTsNCiAgICArCQlpZiAo
c3ltX2lzX2Nob2ljZShzeW0pKQ0KICAgICsJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsNCiAg
ICArCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJCWNhc2UgU19JTlQ6DQogICAgKwkJY2Fz
ZSBTX0hFWDoNCiAgICArCQljYXNlIFNfU1RSSU5HOg0KICAgICsJCQlpZiAoc3ltLT5kZWZbZGVm
XS52YWwpDQogICAgKwkJCQlmcmVlKHN5bS0+ZGVmW2RlZl0udmFsKTsNCiAgICArCQkJLyogZmFs
bCB0aHJvdWdoICovDQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJc3ltLT5kZWZbZGVmXS52YWwg
PSBOVUxMOw0KICAgICsJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOw0KICAgICsJCX0NCiAgICAr
CX0NCiAgICArDQogICAgKwl3aGlsZSAoY29tcGF0X2dldGxpbmUoJmxpbmUsICZsaW5lX2FzaXpl
LCBpbikgIT0gLTEpIHsNCiAgICArCQljb25mX2xpbmVubysrOw0KICAgICsJCXN5bSA9IE5VTEw7
DQogICAgKwkJaWYgKGxpbmVbMF0gPT0gJyMnKSB7DQogICAgKwkJCWlmIChtZW1jbXAobGluZSAr
IDIsIENPTkZJR18sIHN0cmxlbihDT05GSUdfKSkpDQogICAgKwkJCQljb250aW51ZTsNCiAgICAr
CQkJcCA9IHN0cmNocihsaW5lICsgMiArIHN0cmxlbihDT05GSUdfKSwgJyAnKTsNCiAgICArCQkJ
aWYgKCFwKQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCSpwKysgPSAwOw0KICAgICsJCQlp
ZiAoc3RybmNtcChwLCAiaXMgbm90IHNldCIsIDEwKSkNCiAgICArCQkJCWNvbnRpbnVlOw0KICAg
ICsJCQlpZiAoZGVmID09IFNfREVGX1VTRVIpIHsNCiAgICArCQkJCXN5bSA9IHN5bV9maW5kKGxp
bmUgKyAyICsgc3RybGVuKENPTkZJR18pKTsNCiAgICArCQkJCWlmICghc3ltKSB7DQogICAgKwkJ
CQkJc3ltX2FkZF9jaGFuZ2VfY291bnQoMSk7DQogICAgKwkJCQkJY29udGludWU7DQogICAgKwkJ
CQl9DQogICAgKwkJCX0gZWxzZSB7DQogICAgKwkJCQlzeW0gPSBzeW1fbG9va3VwKGxpbmUgKyAy
ICsgc3RybGVuKENPTkZJR18pLCAwKTsNCiAgICArCQkJCWlmIChzeW0tPnR5cGUgPT0gU19VTktO
T1dOKQ0KICAgICsJCQkJCXN5bS0+dHlwZSA9IFNfQk9PTEVBTjsNCiAgICArCQkJfQ0KICAgICsJ
CQlpZiAoc3ltLT5mbGFncyAmIGRlZl9mbGFncykgew0KICAgICsJCQkJY29uZl93YXJuaW5nKCJv
dmVycmlkZTogcmVhc3NpZ25pbmcgdG8gc3ltYm9sICVzIiwgc3ltLT5uYW1lKTsNCiAgICArCQkJ
fQ0KICAgICsJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJCQljYXNlIFNfQk9PTEVBTjoN
CiAgICArCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBu
bzsNCiAgICArCQkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAgICsJCQkJYnJlYWs7DQog
ICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQk7DQogICAgKwkJCX0NCiAgICArCQl9IGVsc2UgaWYg
KG1lbWNtcChsaW5lLCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApIHsNCiAgICArCQkJ
cCA9IHN0cmNocihsaW5lICsgc3RybGVuKENPTkZJR18pLCAnPScpOw0KICAgICsJCQlpZiAoIXAp
DQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJKnArKyA9IDA7DQogICAgKwkJCXAyID0gc3Ry
Y2hyKHAsICdcbicpOw0KICAgICsJCQlpZiAocDIpIHsNCiAgICArCQkJCSpwMi0tID0gMDsNCiAg
ICArCQkJCWlmICgqcDIgPT0gJ1xyJykNCiAgICArCQkJCQkqcDIgPSAwOw0KICAgICsJCQl9DQog
ICAgKw0KICAgICsJCQlzeW0gPSBzeW1fZmluZChsaW5lICsgc3RybGVuKENPTkZJR18pKTsNCiAg
ICArCQkJaWYgKCFzeW0pIHsNCiAgICArCQkJCWlmIChkZWYgPT0gU19ERUZfQVVUTykNCiAgICAr
CQkJCQkvKg0KICAgICsJCQkJCSAqIFJlYWRpbmcgZnJvbSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNv
bmYNCiAgICArCQkJCQkgKiBJZiBDT05GSUdfRk9PIHByZXZpb3VzbHkgZXhpc3RlZCBpbg0KICAg
ICsJCQkJCSAqIGF1dG8uY29uZiBidXQgaXQgaXMgbWlzc2luZyBub3csDQogICAgKwkJCQkJICog
aW5jbHVkZS9jb25maWcvZm9vLmggbXVzdCBiZSB0b3VjaGVkLg0KICAgICsJCQkJCSAqLw0KICAg
ICsJCQkJCWNvbmZfdG91Y2hfZGVwKGxpbmUgKyBzdHJsZW4oQ09ORklHXykpOw0KICAgICsJCQkJ
ZWxzZQ0KICAgICsJCQkJCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOw0KICAgICsJCQkJY29udGlu
dWU7DQogICAgKwkJCX0NCiAgICArDQogICAgKwkJCWlmIChzeW0tPmZsYWdzICYgZGVmX2ZsYWdz
KSB7DQogICAgKwkJCQljb25mX3dhcm5pbmcoIm92ZXJyaWRlOiByZWFzc2lnbmluZyB0byBzeW1i
b2wgJXMiLCBzeW0tPm5hbWUpOw0KICAgICsJCQl9DQogICAgKwkJCWlmIChjb25mX3NldF9zeW1f
dmFsKHN5bSwgZGVmLCBkZWZfZmxhZ3MsIHApKQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJ
fSBlbHNlIHsNCiAgICArCQkJaWYgKGxpbmVbMF0gIT0gJ1xyJyAmJiBsaW5lWzBdICE9ICdcbicp
DQogICAgKwkJCQljb25mX3dhcm5pbmcoInVuZXhwZWN0ZWQgZGF0YTogJS4qcyIsDQogICAgKwkJ
CQkJICAgICAoaW50KXN0cmNzcG4obGluZSwgIlxyXG4iKSwgbGluZSk7DQogICAgKw0KICAgICsJ
CQljb250aW51ZTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCWlmIChzeW0gJiYgc3ltX2lzX2No
b2ljZV92YWx1ZShzeW0pKSB7DQogICAgKwkJCXN0cnVjdCBzeW1ib2wgKmNzID0gcHJvcF9nZXRf
c3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKSk7DQogICAgKwkJCXN3aXRjaCAoc3ltLT5k
ZWZbZGVmXS50cmkpIHsNCiAgICArCQkJY2FzZSBubzoNCiAgICArCQkJCWJyZWFrOw0KICAgICsJ
CQljYXNlIG1vZDoNCiAgICArCQkJCWlmIChjcy0+ZGVmW2RlZl0udHJpID09IHllcykgew0KICAg
ICsJCQkJCWNvbmZfd2FybmluZygiJXMgY3JlYXRlcyBpbmNvbnNpc3RlbnQgY2hvaWNlIHN0YXRl
Iiwgc3ltLT5uYW1lKTsNCiAgICArCQkJCQljcy0+ZmxhZ3MgJj0gfmRlZl9mbGFnczsNCiAgICAr
CQkJCX0NCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQljYXNlIHllczoNCiAgICArCQkJCWlmIChj
cy0+ZGVmW2RlZl0udHJpICE9IG5vKQ0KICAgICsJCQkJCWNvbmZfd2FybmluZygib3ZlcnJpZGU6
ICVzIGNoYW5nZXMgY2hvaWNlIHN0YXRlIiwgc3ltLT5uYW1lKTsNCiAgICArCQkJCWNzLT5kZWZb
ZGVmXS52YWwgPSBzeW07DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCQljcy0+
ZGVmW2RlZl0udHJpID0gRVhQUl9PUihjcy0+ZGVmW2RlZl0udHJpLCBzeW0tPmRlZltkZWZdLnRy
aSk7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJZnJlZShsaW5lKTsNCiAgICArCWZjbG9zZShp
bik7DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGNvbmZfcmVhZChj
b25zdCBjaGFyICpuYW1lKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAg
KwlpbnQgY29uZl91bnNhdmVkID0gMDsNCiAgICArCWludCBpOw0KICAgICsNCiAgICArCXN5bV9z
ZXRfY2hhbmdlX2NvdW50KDApOw0KICAgICsNCiAgICArCWlmIChjb25mX3JlYWRfc2ltcGxlKG5h
bWUsIFNfREVGX1VTRVIpKSB7DQogICAgKwkJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOw0K
ICAgICsJCXJldHVybiAxOw0KICAgICsJfQ0KICAgICsNCiAgICArCXN5bV9jYWxjX3ZhbHVlKG1v
ZHVsZXNfc3ltKTsNCiAgICArDQogICAgKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7DQogICAg
KwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICArCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pIHx8
IChzeW0tPmZsYWdzICYgU1lNQk9MX05PX1dSSVRFKSkNCiAgICArCQkJY29udGludWU7DQogICAg
KwkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSAmJiAoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkp
IHsNCiAgICArCQkJLyogY2hlY2sgdGhhdCBjYWxjdWxhdGVkIHZhbHVlIGFncmVlcyB3aXRoIHNh
dmVkIHZhbHVlICovDQogICAgKwkJCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwkJCWNhc2Ug
U19CT09MRUFOOg0KICAgICsJCQljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJCQlpZiAoc3ltLT5k
ZWZbU19ERUZfVVNFUl0udHJpICE9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkNCiAgICAr
CQkJCQlicmVhazsNCiAgICArCQkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKQ0KICAgICsJCQkJ
CWNvbnRpbnVlOw0KICAgICsJCQkJLyogZmFsbCB0aHJvdWdoICovDQogICAgKwkJCWRlZmF1bHQ6
DQogICAgKwkJCQlpZiAoIXN0cmNtcChzeW0tPmN1cnIudmFsLCBzeW0tPmRlZltTX0RFRl9VU0VS
XS52YWwpKQ0KICAgICsJCQkJCWNvbnRpbnVlOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0N
CiAgICArCQl9IGVsc2UgaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkgJiYgIShzeW0tPmZsYWdzICYg
U1lNQk9MX1dSSVRFKSkNCiAgICArCQkJLyogbm8gcHJldmlvdXMgdmFsdWUgYW5kIG5vdCBzYXZl
ZCAqLw0KICAgICsJCQljb250aW51ZTsNCiAgICArCQljb25mX3Vuc2F2ZWQrKzsNCiAgICArCQkv
KiBtYXliZSBwcmludCB2YWx1ZSBpbiB2ZXJib3NlIG1vZGUuLi4gKi8NCiAgICArCX0NCiAgICAr
DQogICAgKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7DQogICAgKwkJaWYgKHN5bV9oYXNfdmFs
dWUoc3ltKSAmJiAhc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7DQogICAgKwkJCS8qIFJlc2V0
IHZhbHVlcyBvZiBnZW5lcmF0ZXMgdmFsdWVzLCBzbyB0aGV5J2xsIGFwcGVhcg0KICAgICsJCQkg
KiBhcyBuZXcsIGlmIHRoZXkgc2hvdWxkIGJlY29tZSB2aXNpYmxlLCBidXQgdGhhdA0KICAgICsJ
CQkgKiBkb2Vzbid0IHF1aXRlIHdvcmsgaWYgdGhlIEtjb25maWcgYW5kIHRoZSBzYXZlZA0KICAg
ICsJCQkgKiBjb25maWd1cmF0aW9uIGRpc2FncmVlLg0KICAgICsJCQkgKi8NCiAgICArCQkJaWYg
KHN5bS0+dmlzaWJsZSA9PSBubyAmJiAhY29uZl91bnNhdmVkKQ0KICAgICsJCQkJc3ltLT5mbGFn
cyAmPSB+U1lNQk9MX0RFRl9VU0VSOw0KICAgICsJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAg
ICsJCQljYXNlIFNfU1RSSU5HOg0KICAgICsJCQljYXNlIFNfSU5UOg0KICAgICsJCQljYXNlIFNf
SEVYOg0KICAgICsJCQkJLyogUmVzZXQgYSBzdHJpbmcgdmFsdWUgaWYgaXQncyBvdXQgb2YgcmFu
Z2UgKi8NCiAgICArCQkJCWlmIChzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzeW0sIHN5bS0+ZGVm
W1NfREVGX1VTRVJdLnZhbCkpDQogICAgKwkJCQkJYnJlYWs7DQogICAgKwkJCQlzeW0tPmZsYWdz
ICY9IH4oU1lNQk9MX1ZBTElEfFNZTUJPTF9ERUZfVVNFUik7DQogICAgKwkJCQljb25mX3Vuc2F2
ZWQrKzsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQlkZWZhdWx0Og0KICAgICsJCQkJYnJlYWs7
DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJc3ltX2FkZF9jaGFu
Z2VfY291bnQoY29uZl93YXJuaW5ncyB8fCBjb25mX3Vuc2F2ZWQpOw0KICAgICsNCiAgICArCXJl
dHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBLY29uZmlnIGNvbmZpZ3Vy
YXRpb24gcHJpbnRlcg0KICAgICsgKg0KICAgICsgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVu
IGdlbmVyYXRpbmcgdGhlIHJlc3VsdGluZyBjb25maWd1cmF0aW9uIGFmdGVyDQogICAgKyAqIGtj
b25maWcgaW52b2NhdGlvbiBhbmQgYGRlZmNvbmZpZycgZmlsZXMuIFVuc2V0IHN5bWJvbCBtaWdo
dCBiZSBvbWl0dGVkIGJ5DQogICAgKyAqIHBhc3NpbmcgYSBub24tTlVMTCBhcmd1bWVudCB0byB0
aGUgcHJpbnRlci4NCiAgICArICoNCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkDQogICAgK2tj
b25maWdfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNo
YXIgKnZhbHVlLCB2b2lkICphcmcpDQogICAgK3sNCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bS0+
dHlwZSkgew0KICAgICsJY2FzZSBTX0JPT0xFQU46DQogICAgKwljYXNlIFNfVFJJU1RBVEU6DQog
ICAgKwkJaWYgKCp2YWx1ZSA9PSAnbicpIHsNCiAgICArCQkJYm9vbCBza2lwX3Vuc2V0ID0gKGFy
ZyAhPSBOVUxMKTsNCiAgICArDQogICAgKwkJCWlmICghc2tpcF91bnNldCkNCiAgICArCQkJCWZw
cmludGYoZnAsICIjICVzJXMgaXMgbm90IHNldFxuIiwNCiAgICArCQkJCSAgICBDT05GSUdfLCBz
eW0tPm5hbWUpOw0KICAgICsJCQlyZXR1cm47DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAg
ICsJZGVmYXVsdDoNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArDQogICAgKwlmcHJpbnRm
KGZwLCAiJXMlcz0lc1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCB2YWx1ZSk7DQogICAgK30NCiAg
ICArDQogICAgK3N0YXRpYyB2b2lkDQogICAgK2tjb25maWdfcHJpbnRfY29tbWVudChGSUxFICpm
cCwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykNCiAgICArew0KICAgICsJY29uc3QgY2hh
ciAqcCA9IHZhbHVlOw0KICAgICsJc2l6ZV90IGw7DQogICAgKw0KICAgICsJZm9yICg7Oykgew0K
ICAgICsJCWwgPSBzdHJjc3BuKHAsICJcbiIpOw0KICAgICsJCWZwcmludGYoZnAsICIjIik7DQog
ICAgKwkJaWYgKGwpIHsNCiAgICArCQkJZnByaW50ZihmcCwgIiAiKTsNCiAgICArCQkJeGZ3cml0
ZShwLCBsLCAxLCBmcCk7DQogICAgKwkJCXAgKz0gbDsNCiAgICArCQl9DQogICAgKwkJZnByaW50
ZihmcCwgIlxuIik7DQogICAgKwkJaWYgKCpwKysgPT0gJ1wwJykNCiAgICArCQkJYnJlYWs7DQog
ICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGtj
b25maWdfcHJpbnRlcl9jYiA9DQogICAgK3sNCiAgICArCS5wcmludF9zeW1ib2wgPSBrY29uZmln
X3ByaW50X3N5bWJvbCwNCiAgICArCS5wcmludF9jb21tZW50ID0ga2NvbmZpZ19wcmludF9jb21t
ZW50LA0KICAgICt9Ow0KICAgICsNCiAgICArLyoNCiAgICArICogSGVhZGVyIHByaW50ZXINCiAg
ICArICoNCiAgICArICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBg
aW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCcgZmlsZS4NCiAgICArICovDQogICAgK3N0YXRp
YyB2b2lkDQogICAgK2hlYWRlcl9wcmludF9zeW1ib2woRklMRSAqZnAsIHN0cnVjdCBzeW1ib2wg
KnN5bSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykNCiAgICArew0KICAgICsNCiAgICAr
CXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCWNhc2Ug
U19UUklTVEFURTogew0KICAgICsJCWNvbnN0IGNoYXIgKnN1ZmZpeCA9ICIiOw0KICAgICsNCiAg
ICArCQlzd2l0Y2ggKCp2YWx1ZSkgew0KICAgICsJCWNhc2UgJ24nOg0KICAgICsJCQlicmVhazsN
CiAgICArCQljYXNlICdtJzoNCiAgICArCQkJc3VmZml4ID0gIl9NT0RVTEUiOw0KICAgICsJCQkv
KiBmYWxsIHRocm91Z2ggKi8NCiAgICArCQlkZWZhdWx0Og0KICAgICsJCQlmcHJpbnRmKGZwLCAi
I2RlZmluZSAlcyVzJXMgMVxuIiwNCiAgICArCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgc3Vm
Zml4KTsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgKwljYXNlIFNfSEVY
OiB7DQogICAgKwkJY29uc3QgY2hhciAqcHJlZml4ID0gIiI7DQogICAgKw0KICAgICsJCWlmICh2
YWx1ZVswXSAhPSAnMCcgfHwgKHZhbHVlWzFdICE9ICd4JyAmJiB2YWx1ZVsxXSAhPSAnWCcpKQ0K
ICAgICsJCQlwcmVmaXggPSAiMHgiOw0KICAgICsJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMg
JXMlc1xuIiwNCiAgICArCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCBwcmVmaXgsIHZhbHVlKTsN
CiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwljYXNl
IFNfSU5UOg0KICAgICsJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMgJXNcbiIsDQogICAgKwkJ
ICAgIENPTkZJR18sIHN5bS0+bmFtZSwgdmFsdWUpOw0KICAgICsJCWJyZWFrOw0KICAgICsJZGVm
YXVsdDoNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArDQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyB2b2lkDQogICAgK2hlYWRlcl9wcmludF9jb21tZW50KEZJTEUgKmZwLCBjb25zdCBj
aGFyICp2YWx1ZSwgdm9pZCAqYXJnKQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICpwID0gdmFs
dWU7DQogICAgKwlzaXplX3QgbDsNCiAgICArDQogICAgKwlmcHJpbnRmKGZwLCAiLypcbiIpOw0K
ICAgICsJZm9yICg7Oykgew0KICAgICsJCWwgPSBzdHJjc3BuKHAsICJcbiIpOw0KICAgICsJCWZw
cmludGYoZnAsICIgKiIpOw0KICAgICsJCWlmIChsKSB7DQogICAgKwkJCWZwcmludGYoZnAsICIg
Iik7DQogICAgKwkJCXhmd3JpdGUocCwgbCwgMSwgZnApOw0KICAgICsJCQlwICs9IGw7DQogICAg
KwkJfQ0KICAgICsJCWZwcmludGYoZnAsICJcbiIpOw0KICAgICsJCWlmICgqcCsrID09ICdcMCcp
DQogICAgKwkJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJZnByaW50ZihmcCwgIiAqL1xuIik7DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyBzdHJ1Y3QgY29uZl9wcmludGVyIGhlYWRlcl9wcmlu
dGVyX2NiID0NCiAgICArew0KICAgICsJLnByaW50X3N5bWJvbCA9IGhlYWRlcl9wcmludF9zeW1i
b2wsDQogICAgKwkucHJpbnRfY29tbWVudCA9IGhlYWRlcl9wcmludF9jb21tZW50LA0KICAgICt9
Ow0KICAgICsNCiAgICArLyoNCiAgICArICogVHJpc3RhdGUgcHJpbnRlcg0KICAgICsgKg0KICAg
ICsgKiBUaGlzIHByaW50ZXIgaXMgdXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIGBpbmNsdWRlL2Nv
bmZpZy90cmlzdGF0ZS5jb25mJyBmaWxlLg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQNCiAg
ICArdHJpc3RhdGVfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNv
bnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpDQogICAgK3sNCiAgICArDQogICAgKwlpZiAoc3lt
LT50eXBlID09IFNfVFJJU1RBVEUgJiYgKnZhbHVlICE9ICduJykNCiAgICArCQlmcHJpbnRmKGZw
LCAiJXMlcz0lY1xuIiwgQ09ORklHXywgc3ltLT5uYW1lLCAoY2hhcil0b3VwcGVyKCp2YWx1ZSkp
Ow0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgc3RydWN0IGNvbmZfcHJpbnRlciB0cmlzdGF0
ZV9wcmludGVyX2NiID0NCiAgICArew0KICAgICsJLnByaW50X3N5bWJvbCA9IHRyaXN0YXRlX3By
aW50X3N5bWJvbCwNCiAgICArCS5wcmludF9jb21tZW50ID0ga2NvbmZpZ19wcmludF9jb21tZW50
LA0KICAgICt9Ow0KICAgICsNCiAgICArc3RhdGljIHZvaWQgY29uZl93cml0ZV9zeW1ib2woRklM
RSAqZnAsIHN0cnVjdCBzeW1ib2wgKnN5bSwNCiAgICArCQkJICAgICAgc3RydWN0IGNvbmZfcHJp
bnRlciAqcHJpbnRlciwgdm9pZCAqcHJpbnRlcl9hcmcpDQogICAgK3sNCiAgICArCWNvbnN0IGNo
YXIgKnN0cjsNCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJY2FzZSBT
X1VOS05PV046DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfU1RSSU5HOg0KICAgICsJCXN0
ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7DQogICAgKwkJc3RyID0gc3ltX2VzY2FwZV9z
dHJpbmdfdmFsdWUoc3RyKTsNCiAgICArCQlwcmludGVyLT5wcmludF9zeW1ib2woZnAsIHN5bSwg
c3RyLCBwcmludGVyX2FyZyk7DQogICAgKwkJZnJlZSgodm9pZCAqKXN0cik7DQogICAgKwkJYnJl
YWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCXN0ciA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5
bSk7DQogICAgKwkJcHJpbnRlci0+cHJpbnRfc3ltYm9sKGZwLCBzeW0sIHN0ciwgcHJpbnRlcl9h
cmcpOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZA0KICAgICtjb25m
X3dyaXRlX2hlYWRpbmcoRklMRSAqZnAsIHN0cnVjdCBjb25mX3ByaW50ZXIgKnByaW50ZXIsIHZv
aWQgKnByaW50ZXJfYXJnKQ0KICAgICt7DQogICAgKwljaGFyIGJ1ZlsyNTZdOw0KICAgICsNCiAg
ICArCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksDQogICAgKwkgICAgIlxuIg0KICAgICsJICAg
ICJBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJVC5cbiINCiAgICArCSAg
ICAiJXNcbiIsDQogICAgKwkgICAgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsNCiAgICArDQogICAg
KwlwcmludGVyLT5wcmludF9jb21tZW50KGZwLCBidWYsIHByaW50ZXJfYXJnKTsNCiAgICArfQ0K
ICAgICsNCiAgICArLyoNCiAgICArICogV3JpdGUgb3V0IGEgbWluaW1hbCBjb25maWcuDQogICAg
KyAqIEFsbCB2YWx1ZXMgdGhhdCBoYXMgZGVmYXVsdCB2YWx1ZXMgYXJlIHNraXBwZWQgYXMgdGhp
cyBpcyByZWR1bmRhbnQuDQogICAgKyAqLw0KICAgICtpbnQgY29uZl93cml0ZV9kZWZjb25maWco
Y29uc3QgY2hhciAqZmlsZW5hbWUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsN
CiAgICArCXN0cnVjdCBtZW51ICptZW51Ow0KICAgICsJRklMRSAqb3V0Ow0KICAgICsNCiAgICAr
CW91dCA9IGZvcGVuKGZpbGVuYW1lLCAidyIpOw0KICAgICsJaWYgKCFvdXQpDQogICAgKwkJcmV0
dXJuIDE7DQogICAgKw0KICAgICsJc3ltX2NsZWFyX2FsbF92YWxpZCgpOw0KICAgICsNCiAgICAr
CS8qIFRyYXZlcnNlIGFsbCBtZW51cyB0byBmaW5kIGFsbCByZWxldmFudCBzeW1ib2xzICovDQog
ICAgKwltZW51ID0gcm9vdG1lbnUubGlzdDsNCiAgICArDQogICAgKwl3aGlsZSAobWVudSAhPSBO
VUxMKQ0KICAgICsJew0KICAgICsJCXN5bSA9IG1lbnUtPnN5bTsNCiAgICArCQlpZiAoc3ltID09
IE5VTEwpIHsNCiAgICArCQkJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpDQogICAgKwkJCQln
b3RvIG5leHRfbWVudTsNCiAgICArCQl9IGVsc2UgaWYgKCFzeW1faXNfY2hvaWNlKHN5bSkpIHsN
CiAgICArCQkJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICArCQkJaWYgKCEoc3ltLT5mbGFncyAm
IFNZTUJPTF9XUklURSkpDQogICAgKwkJCQlnb3RvIG5leHRfbWVudTsNCiAgICArCQkJc3ltLT5m
bGFncyAmPSB+U1lNQk9MX1dSSVRFOw0KICAgICsJCQkvKiBJZiB3ZSBjYW5ub3QgY2hhbmdlIHRo
ZSBzeW1ib2wgLSBza2lwICovDQogICAgKwkJCWlmICghc3ltX2lzX2NoYW5nYWJsZShzeW0pKQ0K
ICAgICsJCQkJZ290byBuZXh0X21lbnU7DQogICAgKwkJCS8qIElmIHN5bWJvbCBlcXVhbHMgdG8g
ZGVmYXVsdCB2YWx1ZSAtIHNraXAgKi8NCiAgICArCQkJaWYgKHN0cmNtcChzeW1fZ2V0X3N0cmlu
Z192YWx1ZShzeW0pLCBzeW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN5bSkpID09IDApDQogICAgKwkJ
CQlnb3RvIG5leHRfbWVudTsNCiAgICArDQogICAgKwkJCS8qDQogICAgKwkJCSAqIElmIHN5bWJv
bCBpcyBhIGNob2ljZSB2YWx1ZSBhbmQgZXF1YWxzIHRvIHRoZQ0KICAgICsJCQkgKiBkZWZhdWx0
IGZvciBhIGNob2ljZSAtIHNraXAuDQogICAgKwkJCSAqIEJ1dCBvbmx5IGlmIHZhbHVlIGlzIGJv
b2wgYW5kIGVxdWFsIHRvICJ5IiBhbmQNCiAgICArCQkJICogY2hvaWNlIGlzIG5vdCAib3B0aW9u
YWwiLg0KICAgICsJCQkgKiAoSWYgY2hvaWNlIGlzICJvcHRpb25hbCIgdGhlbiBhbGwgdmFsdWVz
IGNhbiBiZSAibiIpDQogICAgKwkJCSAqLw0KICAgICsJCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1
ZShzeW0pKSB7DQogICAgKwkJCQlzdHJ1Y3Qgc3ltYm9sICpjczsNCiAgICArCQkJCXN0cnVjdCBz
eW1ib2wgKmRzOw0KICAgICsNCiAgICArCQkJCWNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRf
Y2hvaWNlX3Byb3Aoc3ltKSk7DQogICAgKwkJCQlkcyA9IHN5bV9jaG9pY2VfZGVmYXVsdChjcyk7
DQogICAgKwkJCQlpZiAoIXN5bV9pc19vcHRpb25hbChjcykgJiYgc3ltID09IGRzKSB7DQogICAg
KwkJCQkJaWYgKChzeW0tPnR5cGUgPT0gU19CT09MRUFOKSAmJg0KICAgICsJCQkJCSAgICBzeW1f
Z2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQ0KICAgICsJCQkJCQlnb3RvIG5leHRfbWVu
dTsNCiAgICArCQkJCX0NCiAgICArCQkJfQ0KICAgICsJCQljb25mX3dyaXRlX3N5bWJvbChvdXQs
IHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7DQogICAgKwkJfQ0KICAgICtuZXh0X21l
bnU6DQogICAgKwkJaWYgKG1lbnUtPmxpc3QgIT0gTlVMTCkgew0KICAgICsJCQltZW51ID0gbWVu
dS0+bGlzdDsNCiAgICArCQl9DQogICAgKwkJZWxzZSBpZiAobWVudS0+bmV4dCAhPSBOVUxMKSB7
DQogICAgKwkJCW1lbnUgPSBtZW51LT5uZXh0Ow0KICAgICsJCX0gZWxzZSB7DQogICAgKwkJCXdo
aWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsNCiAgICArCQkJCWlmIChtZW51LT5uZXh0ICE9
IE5VTEwpIHsNCiAgICArCQkJCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICArCQkJCQlicmVhazsN
CiAgICArCQkJCX0NCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWZjbG9zZShv
dXQpOw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK2ludCBjb25mX3dyaXRl
KGNvbnN0IGNoYXIgKm5hbWUpDQogICAgK3sNCiAgICArCUZJTEUgKm91dDsNCiAgICArCXN0cnVj
dCBzeW1ib2wgKnN5bTsNCiAgICArCXN0cnVjdCBtZW51ICptZW51Ow0KICAgICsJY29uc3QgY2hh
ciAqc3RyOw0KICAgICsJY2hhciB0bXBuYW1lW1BBVEhfTUFYICsgMV0sIG9sZG5hbWVbUEFUSF9N
QVggKyAxXTsNCiAgICArCWNoYXIgKmVudjsNCiAgICArCWJvb2wgbmVlZF9uZXdsaW5lID0gZmFs
c2U7DQogICAgKw0KICAgICsJaWYgKCFuYW1lKQ0KICAgICsJCW5hbWUgPSBjb25mX2dldF9jb25m
aWduYW1lKCk7DQogICAgKw0KICAgICsJaWYgKCEqbmFtZSkgew0KICAgICsJCWZwcmludGYoc3Rk
ZXJyLCAiY29uZmlnIG5hbWUgaXMgZW1wdHlcbiIpOw0KICAgICsJCXJldHVybiAtMTsNCiAgICAr
CX0NCiAgICArDQogICAgKwlpZiAoaXNfZGlyKG5hbWUpKSB7DQogICAgKwkJZnByaW50ZihzdGRl
cnIsICIlczogSXMgYSBkaXJlY3RvcnlcbiIsIG5hbWUpOw0KICAgICsJCXJldHVybiAtMTsNCiAg
ICArCX0NCiAgICArDQogICAgKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQ0KICAgICsJCXJl
dHVybiAtMTsNCiAgICArDQogICAgKwllbnYgPSBnZXRlbnYoIktDT05GSUdfT1ZFUldSSVRFQ09O
RklHIik7DQogICAgKwlpZiAoZW52ICYmICplbnYpIHsNCiAgICArCQkqdG1wbmFtZSA9IDA7DQog
ICAgKwkJb3V0ID0gZm9wZW4obmFtZSwgInciKTsNCiAgICArCX0gZWxzZSB7DQogICAgKwkJc25w
cmludGYodG1wbmFtZSwgc2l6ZW9mKHRtcG5hbWUpLCAiJXMuJWQudG1wIiwNCiAgICArCQkJIG5h
bWUsIChpbnQpZ2V0cGlkKCkpOw0KICAgICsJCW91dCA9IGZvcGVuKHRtcG5hbWUsICJ3Iik7DQog
ICAgKwl9DQogICAgKwlpZiAoIW91dCkNCiAgICArCQlyZXR1cm4gMTsNCiAgICArDQogICAgKwlj
b25mX3dyaXRlX2hlYWRpbmcob3V0LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsNCiAgICAr
DQogICAgKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkNCiAgICArCQlzeW1fY2xlYXJfYWxsX3Zh
bGlkKCk7DQogICAgKw0KICAgICsJbWVudSA9IHJvb3RtZW51Lmxpc3Q7DQogICAgKwl3aGlsZSAo
bWVudSkgew0KICAgICsJCXN5bSA9IG1lbnUtPnN5bTsNCiAgICArCQlpZiAoIXN5bSkgew0KICAg
ICsJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSkNCiAgICArCQkJCWdvdG8gbmV4dDsNCiAg
ICArCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgICsJCQlmcHJpbnRmKG91dCwg
IlxuIg0KICAgICsJCQkJICAgICAiI1xuIg0KICAgICsJCQkJICAgICAiIyAlc1xuIg0KICAgICsJ
CQkJICAgICAiI1xuIiwgc3RyKTsNCiAgICArCQkJbmVlZF9uZXdsaW5lID0gZmFsc2U7DQogICAg
KwkJfSBlbHNlIGlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFKSkgew0KICAgICsJCQlz
eW1fY2FsY192YWx1ZShzeW0pOw0KICAgICsJCQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dS
SVRFKSkNCiAgICArCQkJCWdvdG8gbmV4dDsNCiAgICArCQkJaWYgKG5lZWRfbmV3bGluZSkgew0K
ICAgICsJCQkJZnByaW50ZihvdXQsICJcbiIpOw0KICAgICsJCQkJbmVlZF9uZXdsaW5lID0gZmFs
c2U7DQogICAgKwkJCX0NCiAgICArCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRFOw0KICAg
ICsJCQljb25mX3dyaXRlX3N5bWJvbChvdXQsIHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVM
TCk7DQogICAgKwkJfQ0KICAgICsNCiAgICArbmV4dDoNCiAgICArCQlpZiAobWVudS0+bGlzdCkg
ew0KICAgICsJCQltZW51ID0gbWVudS0+bGlzdDsNCiAgICArCQkJY29udGludWU7DQogICAgKwkJ
fQ0KICAgICsJCWlmIChtZW51LT5uZXh0KQ0KICAgICsJCQltZW51ID0gbWVudS0+bmV4dDsNCiAg
ICArCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsNCiAgICArCQkJaWYgKCFt
ZW51LT5zeW0gJiYgbWVudV9pc192aXNpYmxlKG1lbnUpICYmDQogICAgKwkJCSAgICBtZW51ICE9
ICZyb290bWVudSkgew0KICAgICsJCQkJc3RyID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAg
ICsJCQkJZnByaW50ZihvdXQsICIjIGVuZCBvZiAlc1xuIiwgc3RyKTsNCiAgICArCQkJCW5lZWRf
bmV3bGluZSA9IHRydWU7DQogICAgKwkJCX0NCiAgICArCQkJaWYgKG1lbnUtPm5leHQpIHsNCiAg
ICArCQkJCW1lbnUgPSBtZW51LT5uZXh0Ow0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0NCiAg
ICArCQl9DQogICAgKwl9DQogICAgKwlmY2xvc2Uob3V0KTsNCiAgICArDQogICAgKwlpZiAoKnRt
cG5hbWUpIHsNCiAgICArCQlpZiAoaXNfc2FtZShuYW1lLCB0bXBuYW1lKSkgew0KICAgICsJCQlj
b25mX21lc3NhZ2UoIk5vIGNoYW5nZSB0byAlcyIsIG5hbWUpOw0KICAgICsJCQl1bmxpbmsodG1w
bmFtZSk7DQogICAgKwkJCXN5bV9zZXRfY2hhbmdlX2NvdW50KDApOw0KICAgICsJCQlyZXR1cm4g
MDsNCiAgICArCQl9DQogICAgKw0KICAgICsJCXNucHJpbnRmKG9sZG5hbWUsIHNpemVvZihvbGRu
YW1lKSwgIiVzLm9sZCIsIG5hbWUpOw0KICAgICsJCXJlbmFtZShuYW1lLCBvbGRuYW1lKTsNCiAg
ICArCQlpZiAocmVuYW1lKHRtcG5hbWUsIG5hbWUpKQ0KICAgICsJCQlyZXR1cm4gMTsNCiAgICAr
CX0NCiAgICArDQogICAgKwljb25mX21lc3NhZ2UoImNvbmZpZ3VyYXRpb24gd3JpdHRlbiB0byAl
cyIsIG5hbWUpOw0KICAgICsNCiAgICArCXN5bV9zZXRfY2hhbmdlX2NvdW50KDApOw0KICAgICsN
CiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICsvKiB3cml0ZSBhIGRlcGVuZGVu
Y3kgZmlsZSBhcyB1c2VkIGJ5IGtidWlsZCB0byB0cmFjayBkZXBlbmRlbmNpZXMgKi8NCiAgICAr
c3RhdGljIGludCBjb25mX3dyaXRlX2RlcChjb25zdCBjaGFyICpuYW1lKQ0KICAgICt7DQogICAg
KwlzdHJ1Y3QgZmlsZSAqZmlsZTsNCiAgICArCUZJTEUgKm91dDsNCiAgICArDQogICAgKwlvdXQg
PSBmb3BlbigiLi5jb25maWcudG1wIiwgInciKTsNCiAgICArCWlmICghb3V0KQ0KICAgICsJCXJl
dHVybiAxOw0KICAgICsJZnByaW50ZihvdXQsICJkZXBzX2NvbmZpZyA6PSBcXFxuIik7DQogICAg
Kwlmb3IgKGZpbGUgPSBmaWxlX2xpc3Q7IGZpbGU7IGZpbGUgPSBmaWxlLT5uZXh0KSB7DQogICAg
KwkJaWYgKGZpbGUtPm5leHQpDQogICAgKwkJCWZwcmludGYob3V0LCAiXHQlcyBcXFxuIiwgZmls
ZS0+bmFtZSk7DQogICAgKwkJZWxzZQ0KICAgICsJCQlmcHJpbnRmKG91dCwgIlx0JXNcbiIsIGZp
bGUtPm5hbWUpOw0KICAgICsJfQ0KICAgICsJZnByaW50ZihvdXQsICJcbiVzOiBcXFxuIg0KICAg
ICsJCSAgICAgIlx0JChkZXBzX2NvbmZpZylcblxuIiwgY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1l
KCkpOw0KICAgICsNCiAgICArCWVudl93cml0ZV9kZXAob3V0LCBjb25mX2dldF9hdXRvY29uZmln
X25hbWUoKSk7DQogICAgKw0KICAgICsJZnByaW50ZihvdXQsICJcbiQoZGVwc19jb25maWcpOiA7
XG4iKTsNCiAgICArCWZjbG9zZShvdXQpOw0KICAgICsNCiAgICArCWlmIChtYWtlX3BhcmVudF9k
aXIobmFtZSkpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKwlyZW5hbWUoIi4uY29uZmlnLnRtcCIs
IG5hbWUpOw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbnQg
Y29uZl90b3VjaF9kZXBzKHZvaWQpDQogICAgK3sNCiAgICArCWNvbnN0IGNoYXIgKm5hbWU7DQog
ICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlpbnQgcmVzLCBpOw0KICAgICsNCiAgICAr
CXN0cmNweShkZXBmaWxlX3BhdGgsICJpbmNsdWRlL2NvbmZpZy8iKTsNCiAgICArCWRlcGZpbGVf
cHJlZml4X2xlbiA9IHN0cmxlbihkZXBmaWxlX3BhdGgpOw0KICAgICsNCiAgICArCW5hbWUgPSBj
b25mX2dldF9hdXRvY29uZmlnX25hbWUoKTsNCiAgICArCWNvbmZfcmVhZF9zaW1wbGUobmFtZSwg
U19ERUZfQVVUTyk7DQogICAgKwlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7DQogICAgKw0K
ICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgICsJCXN5bV9jYWxjX3ZhbHVlKHN5
bSk7DQogICAgKwkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9MX05PX1dSSVRFKSB8fCAhc3ltLT5u
YW1lKQ0KICAgICsJCQljb250aW51ZTsNCiAgICArCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9X
UklURSkgew0KICAgICsJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykgew0KICAg
ICsJCQkJLyoNCiAgICArCQkJCSAqIHN5bWJvbCBoYXMgb2xkIGFuZCBuZXcgdmFsdWUsDQogICAg
KwkJCQkgKiBzbyBjb21wYXJlIHRoZW0uLi4NCiAgICArCQkJCSAqLw0KICAgICsJCQkJc3dpdGNo
IChzeW0tPnR5cGUpIHsNCiAgICArCQkJCWNhc2UgU19CT09MRUFOOg0KICAgICsJCQkJY2FzZSBT
X1RSSVNUQVRFOg0KICAgICsJCQkJCWlmIChzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0N
CiAgICArCQkJCQkgICAgc3ltLT5kZWZbU19ERUZfQVVUT10udHJpKQ0KICAgICsJCQkJCQljb250
aW51ZTsNCiAgICArCQkJCQlicmVhazsNCiAgICArCQkJCWNhc2UgU19TVFJJTkc6DQogICAgKwkJ
CQljYXNlIFNfSEVYOg0KICAgICsJCQkJY2FzZSBTX0lOVDoNCiAgICArCQkJCQlpZiAoIXN0cmNt
cChzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pLA0KICAgICsJCQkJCQkgICAgc3ltLT5kZWZbU19E
RUZfQVVUT10udmFsKSkNCiAgICArCQkJCQkJY29udGludWU7DQogICAgKwkJCQkJYnJlYWs7DQog
ICAgKwkJCQlkZWZhdWx0Og0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQkJfQ0KICAgICsJCQl9
IGVsc2Ugew0KICAgICsJCQkJLyoNCiAgICArCQkJCSAqIElmIHRoZXJlIGlzIG5vIG9sZCB2YWx1
ZSwgb25seSAnbm8nICh1bnNldCkNCiAgICArCQkJCSAqIGlzIGFsbG93ZWQgYXMgbmV3IHZhbHVl
Lg0KICAgICsJCQkJICovDQogICAgKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJCQkJ
Y2FzZSBTX0JPT0xFQU46DQogICAgKwkJCQljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJCQkJaWYg
KHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSBubykNCiAgICArCQkJCQkJY29udGludWU7
DQogICAgKwkJCQkJYnJlYWs7DQogICAgKwkJCQlkZWZhdWx0Og0KICAgICsJCQkJCWJyZWFrOw0K
ICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAgKwkJfSBlbHNlIGlmICghKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfREVGX0FVVE8pKQ0KICAgICsJCQkvKiBUaGVyZSBpcyBuZWl0aGVyIGFuIG9sZCBub3Ig
YSBuZXcgdmFsdWUuICovDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCS8qIGVsc2UNCiAgICAr
CQkgKglUaGVyZSBpcyBhbiBvbGQgdmFsdWUsIGJ1dCBubyBuZXcgdmFsdWUgKCdubycgKHVuc2V0
KQ0KICAgICsJCSAqCWlzbid0IHNhdmVkIGluIGF1dG8uY29uZiwgc28gdGhlIG9sZCB2YWx1ZSBp
cyBhbHdheXMNCiAgICArCQkgKglkaWZmZXJlbnQgZnJvbSAnbm8nKS4NCiAgICArCQkgKi8NCiAg
ICArDQogICAgKwkJcmVzID0gY29uZl90b3VjaF9kZXAoc3ltLT5uYW1lKTsNCiAgICArCQlpZiAo
cmVzKQ0KICAgICsJCQlyZXR1cm4gcmVzOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiAw
Ow0KICAgICt9DQogICAgKw0KICAgICtpbnQgY29uZl93cml0ZV9hdXRvY29uZihpbnQgb3Zlcndy
aXRlKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwljb25zdCBjaGFy
ICpuYW1lOw0KICAgICsJY29uc3QgY2hhciAqYXV0b2NvbmZfbmFtZSA9IGNvbmZfZ2V0X2F1dG9j
b25maWdfbmFtZSgpOw0KICAgICsJRklMRSAqb3V0LCAqdHJpc3RhdGUsICpvdXRfaDsNCiAgICAr
CWludCBpOw0KICAgICsNCiAgICArCWlmICghb3ZlcndyaXRlICYmIGlzX3ByZXNlbnQoYXV0b2Nv
bmZfbmFtZSkpDQogICAgKwkJcmV0dXJuIDA7DQogICAgKw0KICAgICsJc3ltX2NsZWFyX2FsbF92
YWxpZCgpOw0KICAgICsNCiAgICArCWNvbmZfd3JpdGVfZGVwKCJpbmNsdWRlL2NvbmZpZy9hdXRv
LmNvbmYuY21kIik7DQogICAgKw0KICAgICsJaWYgKGNvbmZfdG91Y2hfZGVwcygpKQ0KICAgICsJ
CXJldHVybiAxOw0KICAgICsNCiAgICArCW91dCA9IGZvcGVuKCIudG1wY29uZmlnIiwgInciKTsN
CiAgICArCWlmICghb3V0KQ0KICAgICsJCXJldHVybiAxOw0KICAgICsNCiAgICArCXRyaXN0YXRl
ID0gZm9wZW4oIi50bXBjb25maWdfdHJpc3RhdGUiLCAidyIpOw0KICAgICsJaWYgKCF0cmlzdGF0
ZSkgew0KICAgICsJCWZjbG9zZShvdXQpOw0KICAgICsJCXJldHVybiAxOw0KICAgICsJfQ0KICAg
ICsNCiAgICArCW91dF9oID0gZm9wZW4oIi50bXBjb25maWcuaCIsICJ3Iik7DQogICAgKwlpZiAo
IW91dF9oKSB7DQogICAgKwkJZmNsb3NlKG91dCk7DQogICAgKwkJZmNsb3NlKHRyaXN0YXRlKTsN
CiAgICArCQlyZXR1cm4gMTsNCiAgICArCX0NCiAgICArDQogICAgKwljb25mX3dyaXRlX2hlYWRp
bmcob3V0LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsNCiAgICArDQogICAgKwljb25mX3dy
aXRlX2hlYWRpbmcodHJpc3RhdGUsICZ0cmlzdGF0ZV9wcmludGVyX2NiLCBOVUxMKTsNCiAgICAr
DQogICAgKwljb25mX3dyaXRlX2hlYWRpbmcob3V0X2gsICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVM
TCk7DQogICAgKw0KICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgICsJCXN5bV9j
YWxjX3ZhbHVlKHN5bSk7DQogICAgKwkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklURSkg
fHwgIXN5bS0+bmFtZSkNCiAgICArCQkJY29udGludWU7DQogICAgKw0KICAgICsJCS8qIHdyaXRl
IHN5bWJvbCB0byBhdXRvLmNvbmYsIHRyaXN0YXRlIGFuZCBoZWFkZXIgZmlsZXMgKi8NCiAgICAr
CQljb25mX3dyaXRlX3N5bWJvbChvdXQsIHN5bSwgJmtjb25maWdfcHJpbnRlcl9jYiwgKHZvaWQg
KikxKTsNCiAgICArDQogICAgKwkJY29uZl93cml0ZV9zeW1ib2wodHJpc3RhdGUsIHN5bSwgJnRy
aXN0YXRlX3ByaW50ZXJfY2IsICh2b2lkICopMSk7DQogICAgKw0KICAgICsJCWNvbmZfd3JpdGVf
c3ltYm9sKG91dF9oLCBzeW0sICZoZWFkZXJfcHJpbnRlcl9jYiwgTlVMTCk7DQogICAgKwl9DQog
ICAgKwlmY2xvc2Uob3V0KTsNCiAgICArCWZjbG9zZSh0cmlzdGF0ZSk7DQogICAgKwlmY2xvc2Uo
b3V0X2gpOw0KICAgICsNCiAgICArCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfQVVUT0hFQURFUiIp
Ow0KICAgICsJaWYgKCFuYW1lKQ0KICAgICsJCW5hbWUgPSAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0
b2NvbmYuaCI7DQogICAgKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQ0KICAgICsJCXJldHVy
biAxOw0KICAgICsJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZy5oIiwgbmFtZSkpDQogICAgKwkJcmV0
dXJuIDE7DQogICAgKw0KICAgICsJbmFtZSA9IGdldGVudigiS0NPTkZJR19UUklTVEFURSIpOw0K
ICAgICsJaWYgKCFuYW1lKQ0KICAgICsJCW5hbWUgPSAiaW5jbHVkZS9jb25maWcvdHJpc3RhdGUu
Y29uZiI7DQogICAgKwlpZiAobWFrZV9wYXJlbnRfZGlyKG5hbWUpKQ0KICAgICsJCXJldHVybiAx
Ow0KICAgICsJaWYgKHJlbmFtZSgiLnRtcGNvbmZpZ190cmlzdGF0ZSIsIG5hbWUpKQ0KICAgICsJ
CXJldHVybiAxOw0KICAgICsNCiAgICArCWlmIChtYWtlX3BhcmVudF9kaXIoYXV0b2NvbmZfbmFt
ZSkpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKwkvKg0KICAgICsJICogVGhpcyBtdXN0IGJlIHRo
ZSBsYXN0IHN0ZXAsIGtidWlsZCBoYXMgYSBkZXBlbmRlbmN5IG9uIGF1dG8uY29uZg0KICAgICsJ
ICogYW5kIHRoaXMgbWFya3MgdGhlIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiBvZiB0aGUgcHJldmlv
dXMgc3RlcHMuDQogICAgKwkgKi8NCiAgICArCWlmIChyZW5hbWUoIi50bXBjb25maWciLCBhdXRv
Y29uZl9uYW1lKSkNCiAgICArCQlyZXR1cm4gMTsNCiAgICArDQogICAgKwlyZXR1cm4gMDsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RhdGljIGludCBzeW1fY2hhbmdlX2NvdW50Ow0KICAgICtzdGF0
aWMgdm9pZCAoKmNvbmZfY2hhbmdlZF9jYWxsYmFjaykodm9pZCk7DQogICAgKw0KICAgICt2b2lk
IHN5bV9zZXRfY2hhbmdlX2NvdW50KGludCBjb3VudCkNCiAgICArew0KICAgICsJaW50IF9zeW1f
Y2hhbmdlX2NvdW50ID0gc3ltX2NoYW5nZV9jb3VudDsNCiAgICArCXN5bV9jaGFuZ2VfY291bnQg
PSBjb3VudDsNCiAgICArCWlmIChjb25mX2NoYW5nZWRfY2FsbGJhY2sgJiYNCiAgICArCSAgICAo
Ym9vbClfc3ltX2NoYW5nZV9jb3VudCAhPSAoYm9vbCljb3VudCkNCiAgICArCQljb25mX2NoYW5n
ZWRfY2FsbGJhY2soKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBzeW1fYWRkX2NoYW5nZV9j
b3VudChpbnQgY291bnQpDQogICAgK3sNCiAgICArCXN5bV9zZXRfY2hhbmdlX2NvdW50KGNvdW50
ICsgc3ltX2NoYW5nZV9jb3VudCk7DQogICAgK30NCiAgICArDQogICAgK2Jvb2wgY29uZl9nZXRf
Y2hhbmdlZCh2b2lkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gc3ltX2NoYW5nZV9jb3VudDsNCiAg
ICArfQ0KICAgICsNCiAgICArdm9pZCBjb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKCpm
bikodm9pZCkpDQogICAgK3sNCiAgICArCWNvbmZfY2hhbmdlZF9jYWxsYmFjayA9IGZuOw0KICAg
ICt9DQogICAgKw0KICAgICtzdGF0aWMgYm9vbCByYW5kb21pemVfY2hvaWNlX3ZhbHVlcyhzdHJ1
Y3Qgc3ltYm9sICpjc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQog
ICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgZXhwciAqZTsNCiAgICArCWlu
dCBjbnQsIGRlZjsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogSWYgY2hvaWNlIGlzIG1vZCB0
aGVuIHdlIG1heSBoYXZlIG1vcmUgaXRlbXMgc2VsZWN0ZWQNCiAgICArCSAqIGFuZCBpZiBubyB0
aGVuIG5vLW9uZS4NCiAgICArCSAqIEluIGJvdGggY2FzZXMgc3RvcC4NCiAgICArCSAqLw0KICAg
ICsJaWYgKGNzeW0tPmN1cnIudHJpICE9IHllcykNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAg
Kw0KICAgICsJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3N5bSk7DQogICAgKw0KICAgICsJ
LyogY291bnQgZW50cmllcyBpbiBjaG9pY2UgYmxvY2sgKi8NCiAgICArCWNudCA9IDA7DQogICAg
KwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkNCiAgICArCQljbnQr
KzsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogZmluZCBhIHJhbmRvbSB2YWx1ZSBhbmQgc2V0
IGl0IHRvIHllcywNCiAgICArCSAqIHNldCB0aGUgcmVzdCB0byBubyBzbyB3ZSBoYXZlIG9ubHkg
b25lIHNldA0KICAgICsJICovDQogICAgKwlkZWYgPSAocmFuZCgpICUgY250KTsNCiAgICArDQog
ICAgKwljbnQgPSAwOw0KICAgICsJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBl
LCBzeW0pIHsNCiAgICArCQlpZiAoZGVmID09IGNudCsrKSB7DQogICAgKwkJCXN5bS0+ZGVmW1Nf
REVGX1VTRVJdLnRyaSA9IHllczsNCiAgICArCQkJY3N5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9
IHN5bTsNCiAgICArCQl9DQogICAgKwkJZWxzZSB7DQogICAgKwkJCXN5bS0+ZGVmW1NfREVGX1VT
RVJdLnRyaSA9IG5vOw0KICAgICsJCX0NCiAgICArCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZf
VVNFUjsNCiAgICArCQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2FsY3VsYXRlZCAqLw0K
ICAgICsJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsNCiAgICArCX0NCiAgICArCWNzeW0t
PmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsNCiAgICArCS8qIGNsZWFyIFZBTElEIHRvIGdldCB2
YWx1ZSBjYWxjdWxhdGVkICovDQogICAgKwljc3ltLT5mbGFncyAmPSB+KFNZTUJPTF9WQUxJRCk7
DQogICAgKw0KICAgICsJcmV0dXJuIHRydWU7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgc2V0
X2FsbF9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pDQogICAgK3sNCiAgICArCXN0
cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICArCXN0
cnVjdCBleHByICplOw0KICAgICsNCiAgICArCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNz
eW0pOw0KICAgICsNCiAgICArCS8qDQogICAgKwkgKiBTZXQgYWxsIG5vbi1hc3NpbmdlZCBjaG9p
Y2UgdmFsdWVzIHRvIG5vDQogICAgKwkgKi8NCiAgICArCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0o
cHJvcC0+ZXhwciwgZSwgc3ltKSB7DQogICAgKwkJaWYgKCFzeW1faGFzX3ZhbHVlKHN5bSkpDQog
ICAgKwkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOw0KICAgICsJfQ0KICAgICsJY3N5
bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgICsJLyogY2xlYXIgVkFMSUQgdG8gZ2V0
IHZhbHVlIGNhbGN1bGF0ZWQgKi8NCiAgICArCWNzeW0tPmZsYWdzICY9IH4oU1lNQk9MX1ZBTElE
IHwgU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMpOw0KICAgICt9DQogICAgKw0KICAgICti
b29sIGNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSkNCiAg
ICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltLCAqY3N5bTsNCiAgICArCWludCBpLCBjbnQs
IHBieSwgcHR5LCBwdG07CS8qIHBieTogcHJvYmFiaWxpdHkgb2YgYm9vbCAgICAgPSB5DQogICAg
KwkJCQkJICogcHR5OiBwcm9iYWJpbGl0eSBvZiB0cmlzdGF0ZSA9IHkNCiAgICArCQkJCQkgKiBw
dG06IHByb2JhYmlsaXR5IG9mIHRyaXN0YXRlID0gbQ0KICAgICsJCQkJCSAqLw0KICAgICsNCiAg
ICArCXBieSA9IDUwOyBwdHkgPSBwdG0gPSAzMzsgLyogY2FuJ3QgZ28gYXMgdGhlIGRlZmF1bHQg
aW4gc3dpdGNoLWNhc2UNCiAgICArCQkJCSAgICogYmVsb3csIG90aGVyd2lzZSBnY2Mgd2hpbmVz
IGFib3V0DQogICAgKwkJCQkgICAqIC1XbWF5YmUtdW5pbml0aWFsaXplZCAqLw0KICAgICsJaWYg
KG1vZGUgPT0gZGVmX3JhbmRvbSkgew0KICAgICsJCWludCBuLCBwWzNdOw0KICAgICsJCWNoYXIg
KmVudiA9IGdldGVudigiS0NPTkZJR19QUk9CQUJJTElUWSIpOw0KICAgICsJCW4gPSAwOw0KICAg
ICsJCXdoaWxlKCBlbnYgJiYgKmVudiApIHsNCiAgICArCQkJY2hhciAqZW5kcDsNCiAgICArCQkJ
aW50IHRtcCA9IHN0cnRvbCggZW52LCAmZW5kcCwgMTAgKTsNCiAgICArCQkJaWYoIHRtcCA+PSAw
ICYmIHRtcCA8PSAxMDAgKSB7DQogICAgKwkJCQlwW24rK10gPSB0bXA7DQogICAgKwkJCX0gZWxz
ZSB7DQogICAgKwkJCQllcnJubyA9IEVSQU5HRTsNCiAgICArCQkJCXBlcnJvciggIktDT05GSUdf
UFJPQkFCSUxJVFkiICk7DQogICAgKwkJCQlleGl0KCAxICk7DQogICAgKwkJCX0NCiAgICArCQkJ
ZW52ID0gKCplbmRwID09ICc6JykgPyBlbmRwKzEgOiBlbmRwOw0KICAgICsJCQlpZiggbiA+PTMg
KSB7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCQlzd2l0Y2go
IG4gKSB7DQogICAgKwkJY2FzZSAxOg0KICAgICsJCQlwYnkgPSBwWzBdOyBwdG0gPSBwYnkvMjsg
cHR5ID0gcGJ5LXB0bTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAyOg0KICAgICsJCQlw
dHkgPSBwWzBdOyBwdG0gPSBwWzFdOyBwYnkgPSBwdHkgKyBwdG07DQogICAgKwkJCWJyZWFrOw0K
ICAgICsJCWNhc2UgMzoNCiAgICArCQkJcGJ5ID0gcFswXTsgcHR5ID0gcFsxXTsgcHRtID0gcFsy
XTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlpZiggcHR5K3B0bSA+
IDEwMCApIHsNCiAgICArCQkJZXJybm8gPSBFUkFOR0U7DQogICAgKwkJCXBlcnJvciggIktDT05G
SUdfUFJPQkFCSUxJVFkiICk7DQogICAgKwkJCWV4aXQoIDEgKTsNCiAgICArCQl9DQogICAgKwl9
DQogICAgKwlib29sIGhhc19jaGFuZ2VkID0gZmFsc2U7DQogICAgKw0KICAgICsJZm9yX2FsbF9z
eW1ib2xzKGksIHN5bSkgew0KICAgICsJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwgKHN5bS0+
ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpKQ0KICAgICsJCQljb250aW51ZTsNCiAgICArCQlzd2l0Y2gg
KHN5bV9nZXRfdHlwZShzeW0pKSB7DQogICAgKwkJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJY2Fz
ZSBTX1RSSVNUQVRFOg0KICAgICsJCQloYXNfY2hhbmdlZCA9IHRydWU7DQogICAgKwkJCXN3aXRj
aCAobW9kZSkgew0KICAgICsJCQljYXNlIGRlZl95ZXM6DQogICAgKwkJCQlzeW0tPmRlZltTX0RF
Rl9VU0VSXS50cmkgPSB5ZXM7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSBkZWZfbW9k
Og0KICAgICsJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbW9kOw0KICAgICsJCQkJYnJl
YWs7DQogICAgKwkJCWNhc2UgZGVmX25vOg0KICAgICsJCQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1C
T0xfQUxMTk9DT05GSUdfWSkNCiAgICArCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5
ZXM7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0g
bm87DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSBkZWZfcmFuZG9tOg0KICAgICsJCQkJ
c3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87DQogICAgKwkJCQljbnQgPSByYW5kKCkgJSAx
MDA7DQogICAgKwkJCQlpZiAoc3ltLT50eXBlID09IFNfVFJJU1RBVEUpIHsNCiAgICArCQkJCQlp
ZiAoY250IDwgcHR5KQ0KICAgICsJCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7
DQogICAgKwkJCQkJZWxzZSBpZiAoY250IDwgKHB0eStwdG0pKQ0KICAgICsJCQkJCQlzeW0tPmRl
ZltTX0RFRl9VU0VSXS50cmkgPSBtb2Q7DQogICAgKwkJCQl9IGVsc2UgaWYgKGNudCA8IHBieSkN
CiAgICArCQkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB5ZXM7DQogICAgKwkJCQlicmVh
azsNCiAgICArCQkJZGVmYXVsdDoNCiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQl9DQogICAg
KwkJCWlmICghKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBtb2RlID09IGRlZl9yYW5kb20pKQ0KICAg
ICsJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWRlZmF1bHQ6DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArDQogICAgKwl9DQog
ICAgKw0KICAgICsJc3ltX2NsZWFyX2FsbF92YWxpZCgpOw0KICAgICsNCiAgICArCS8qDQogICAg
KwkgKiBXZSBoYXZlIGRpZmZlcmVudCB0eXBlIG9mIGNob2ljZSBibG9ja3MuDQogICAgKwkgKiBJ
ZiBjdXJyLnRyaSBlcXVhbHMgdG8gbW9kIHRoZW4gd2UgY2FuIHNlbGVjdCBzZXZlcmFsDQogICAg
KwkgKiBjaG9pY2Ugc3ltYm9scyBpbiBvbmUgYmxvY2suDQogICAgKwkgKiBJbiB0aGlzIGNhc2Ug
d2UgZG8gbm90aGluZy4NCiAgICArCSAqIElmIGN1cnIudHJpIGVxdWFscyB5ZXMgdGhlbiBvbmx5
IG9uZSBzeW1ib2wgY2FuIGJlDQogICAgKwkgKiBzZWxlY3RlZCBpbiBhIGNob2ljZSBibG9jayBh
bmQgd2Ugc2V0IGl0IHRvIHllcywNCiAgICArCSAqIGFuZCB0aGUgcmVzdCB0byBuby4NCiAgICAr
CSAqLw0KICAgICsJaWYgKG1vZGUgIT0gZGVmX3JhbmRvbSkgew0KICAgICsJCWZvcl9hbGxfc3lt
Ym9scyhpLCBjc3ltKSB7DQogICAgKwkJCWlmICgoc3ltX2lzX2Nob2ljZShjc3ltKSAmJiAhc3lt
X2hhc192YWx1ZShjc3ltKSkgfHwNCiAgICArCQkJICAgIHN5bV9pc19jaG9pY2VfdmFsdWUoY3N5
bSkpDQogICAgKwkJCQljc3ltLT5mbGFncyB8PSBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVF
UzsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIGNz
eW0pIHsNCiAgICArCQlpZiAoc3ltX2hhc192YWx1ZShjc3ltKSB8fCAhc3ltX2lzX2Nob2ljZShj
c3ltKSkNCiAgICArCQkJY29udGludWU7DQogICAgKw0KICAgICsJCXN5bV9jYWxjX3ZhbHVlKGNz
eW0pOw0KICAgICsJCWlmIChtb2RlID09IGRlZl9yYW5kb20pDQogICAgKwkJCWhhc19jaGFuZ2Vk
ID0gcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoY3N5bSk7DQogICAgKwkJZWxzZSB7DQogICAgKwkJ
CXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhjc3ltKTsNCiAgICArCQkJaGFzX2NoYW5nZWQgPSB0cnVl
Ow0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gaGFzX2NoYW5nZWQ7DQog
ICAgK30NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmMgYi9zdXBw
b3J0L2tjb25maWcubmV3L2V4cHIuYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uNzdmZmZmMw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L2V4cHIuYw0KICAgIEBAIC0wLDAgKzEsMTI5NyBAQA0KICAgICsvLyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQg
KEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqLw0K
ICAgICsNCiAgICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKyNpbmNsdWRlIDxlcnJuby5oPg0K
ICAgICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsj
aW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKw0KICAgICsjaW5jbHVkZSAibGtjLmgiDQogICAgKw0K
ICAgICsjZGVmaW5lIERFQlVHX0VYUFIJMA0KICAgICsNCiAgICArc3RhdGljIGludCBleHByX2Vx
KHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsNCiAgICArc3RhdGljIHN0cnVjdCBl
eHByICpleHByX2VsaW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSk7DQogICAgKw0KICAgICtzdHJ1
Y3QgZXhwciAqZXhwcl9hbGxvY19zeW1ib2woc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQog
ICAgKwlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7DQogICAgKwllLT50
eXBlID0gRV9TWU1CT0w7DQogICAgKwllLT5sZWZ0LnN5bSA9IHN5bTsNCiAgICArCXJldHVybiBl
Ow0KICAgICt9DQogICAgKw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vbmUoZW51bSBl
eHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmNlKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZXhw
ciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7DQogICAgKwllLT50eXBlID0gdHlwZTsNCiAg
ICArCWUtPmxlZnQuZXhwciA9IGNlOw0KICAgICsJcmV0dXJuIGU7DQogICAgK30NCiAgICArDQog
ICAgK3N0cnVjdCBleHByICpleHByX2FsbG9jX3R3byhlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1
Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikNCiAgICArew0KICAgICsJc3RydWN0IGV4cHIg
KmUgPSB4Y2FsbG9jKDEsIHNpemVvZigqZSkpOw0KICAgICsJZS0+dHlwZSA9IHR5cGU7DQogICAg
KwllLT5sZWZ0LmV4cHIgPSBlMTsNCiAgICArCWUtPnJpZ2h0LmV4cHIgPSBlMjsNCiAgICArCXJl
dHVybiBlOw0KICAgICt9DQogICAgKw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19jb21w
KGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnMxLCBzdHJ1Y3Qgc3ltYm9sICpz
MikNCiAgICArew0KICAgICsJc3RydWN0IGV4cHIgKmUgPSB4Y2FsbG9jKDEsIHNpemVvZigqZSkp
Ow0KICAgICsJZS0+dHlwZSA9IHR5cGU7DQogICAgKwllLT5sZWZ0LnN5bSA9IHMxOw0KICAgICsJ
ZS0+cmlnaHQuc3ltID0gczI7DQogICAgKwlyZXR1cm4gZTsNCiAgICArfQ0KICAgICsNCiAgICAr
c3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfYW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIg
KmUyKQ0KICAgICt7DQogICAgKwlpZiAoIWUxKQ0KICAgICsJCXJldHVybiBlMjsNCiAgICArCXJl
dHVybiBlMiA/IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpIDogZTE7DQogICAgK30NCiAg
ICArDQogICAgK3N0cnVjdCBleHByICpleHByX2FsbG9jX29yKHN0cnVjdCBleHByICplMSwgc3Ry
dWN0IGV4cHIgKmUyKQ0KICAgICt7DQogICAgKwlpZiAoIWUxKQ0KICAgICsJCXJldHVybiBlMjsN
CiAgICArCXJldHVybiBlMiA/IGV4cHJfYWxsb2NfdHdvKEVfT1IsIGUxLCBlMikgOiBlMTsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RydWN0IGV4cHIgKmV4cHJfY29weShjb25zdCBzdHJ1Y3QgZXhw
ciAqb3JnKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZXhwciAqZTsNCiAgICArDQogICAgKwlpZiAo
IW9yZykNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArDQogICAgKwllID0geG1hbGxvYyhzaXpl
b2YoKm9yZykpOw0KICAgICsJbWVtY3B5KGUsIG9yZywgc2l6ZW9mKCpvcmcpKTsNCiAgICArCXN3
aXRjaCAob3JnLT50eXBlKSB7DQogICAgKwljYXNlIEVfU1lNQk9MOg0KICAgICsJCWUtPmxlZnQg
PSBvcmctPmxlZnQ7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIEVfTk9UOg0KICAgICsJCWUt
PmxlZnQuZXhwciA9IGV4cHJfY29weShvcmctPmxlZnQuZXhwcik7DQogICAgKwkJYnJlYWs7DQog
ICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwljYXNlIEVfR0VROg0KICAgICsJY2FzZSBFX0dUSDoN
CiAgICArCWNhc2UgRV9MRVE6DQogICAgKwljYXNlIEVfTFRIOg0KICAgICsJY2FzZSBFX1VORVFV
QUw6DQogICAgKwkJZS0+bGVmdC5zeW0gPSBvcmctPmxlZnQuc3ltOw0KICAgICsJCWUtPnJpZ2h0
LnN5bSA9IG9yZy0+cmlnaHQuc3ltOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX0FORDoN
CiAgICArCWNhc2UgRV9PUjoNCiAgICArCWNhc2UgRV9MSVNUOg0KICAgICsJCWUtPmxlZnQuZXhw
ciA9IGV4cHJfY29weShvcmctPmxlZnQuZXhwcik7DQogICAgKwkJZS0+cmlnaHQuZXhwciA9IGV4
cHJfY29weShvcmctPnJpZ2h0LmV4cHIpOw0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoN
CiAgICArCQlmcHJpbnRmKHN0ZGVyciwgImNhbid0IGNvcHkgdHlwZSAlZFxuIiwgZS0+dHlwZSk7
DQogICAgKwkJZnJlZShlKTsNCiAgICArCQllID0gTlVMTDsNCiAgICArCQlicmVhazsNCiAgICAr
CX0NCiAgICArDQogICAgKwlyZXR1cm4gZTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBleHBy
X2ZyZWUoc3RydWN0IGV4cHIgKmUpDQogICAgK3sNCiAgICArCWlmICghZSkNCiAgICArCQlyZXR1
cm47DQogICAgKw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7DQogICAgKwljYXNlIEVfU1lNQk9M
Og0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX05PVDoNCiAgICArCQlleHByX2ZyZWUoZS0+
bGVmdC5leHByKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9FUVVBTDoNCiAgICArCWNh
c2UgRV9HRVE6DQogICAgKwljYXNlIEVfR1RIOg0KICAgICsJY2FzZSBFX0xFUToNCiAgICArCWNh
c2UgRV9MVEg6DQogICAgKwljYXNlIEVfVU5FUVVBTDoNCiAgICArCQlicmVhazsNCiAgICArCWNh
c2UgRV9PUjoNCiAgICArCWNhc2UgRV9BTkQ6DQogICAgKwkJZXhwcl9mcmVlKGUtPmxlZnQuZXhw
cik7DQogICAgKwkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCWJyZWFrOw0KICAg
ICsJZGVmYXVsdDoNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgImhvdyB0byBmcmVlIHR5cGUgJWQ/
XG4iLCBlLT50eXBlKTsNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArCWZyZWUoZSk7DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbnQgdHJhbnNfY291bnQ7DQogICAgKw0KICAgICsj
ZGVmaW5lIGUxICgqZXAxKQ0KICAgICsjZGVmaW5lIGUyICgqZXAyKQ0KICAgICsNCiAgICArLyoN
CiAgICArICogZXhwcl9lbGltaW5hdGVfZXEoKSBoZWxwZXIuDQogICAgKyAqDQogICAgKyAqIFdh
bGtzIHRoZSB0d28gZXhwcmVzc2lvbiB0cmVlcyBnaXZlbiBpbiAnZXAxJyBhbmQgJ2VwMicuIEFu
eSBub2RlIHRoYXQgZG9lcw0KICAgICsgKiBub3QgaGF2ZSB0eXBlICd0eXBlJyAoRV9PUi9FX0FO
RCkgaXMgY29uc2lkZXJlZCBhIGxlYWYsIGFuZCBpcyBjb21wYXJlZA0KICAgICsgKiBhZ2FpbnN0
IGFsbCBvdGhlciBsZWF2ZXMuIFR3byBlcXVhbCBsZWF2ZXMgYXJlIGJvdGggcmVwbGFjZWQgd2l0
aCBlaXRoZXIgJ3knDQogICAgKyAqIG9yICduJyBhcyBhcHByb3ByaWF0ZSBmb3IgJ3R5cGUnLCB0
byBiZSBlbGltaW5hdGVkIGxhdGVyLg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgX19leHBy
X2VsaW1pbmF0ZV9lcShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqKmVwMSwgc3Ry
dWN0IGV4cHIgKiplcDIpDQogICAgK3sNCiAgICArCS8qIFJlY3Vyc2UgZG93biB0byBsZWF2ZXMg
Ki8NCiAgICArDQogICAgKwlpZiAoZTEtPnR5cGUgPT0gdHlwZSkgew0KICAgICsJCV9fZXhwcl9l
bGltaW5hdGVfZXEodHlwZSwgJmUxLT5sZWZ0LmV4cHIsICZlMik7DQogICAgKwkJX19leHByX2Vs
aW1pbmF0ZV9lcSh0eXBlLCAmZTEtPnJpZ2h0LmV4cHIsICZlMik7DQogICAgKwkJcmV0dXJuOw0K
ICAgICsJfQ0KICAgICsJaWYgKGUyLT50eXBlID09IHR5cGUpIHsNCiAgICArCQlfX2V4cHJfZWxp
bWluYXRlX2VxKHR5cGUsICZlMSwgJmUyLT5sZWZ0LmV4cHIpOw0KICAgICsJCV9fZXhwcl9lbGlt
aW5hdGVfZXEodHlwZSwgJmUxLCAmZTItPnJpZ2h0LmV4cHIpOw0KICAgICsJCXJldHVybjsNCiAg
ICArCX0NCiAgICArDQogICAgKwkvKiBlMSBhbmQgZTIgYXJlIGxlYXZlcy4gQ29tcGFyZSB0aGVt
LiAqLw0KICAgICsNCiAgICArCWlmIChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9
PSBFX1NZTUJPTCAmJg0KICAgICsJICAgIGUxLT5sZWZ0LnN5bSA9PSBlMi0+bGVmdC5zeW0gJiYN
CiAgICArCSAgICAoZTEtPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzIHx8IGUxLT5sZWZ0LnN5bSA9
PSAmc3ltYm9sX25vKSkNCiAgICArCQlyZXR1cm47DQogICAgKwlpZiAoIWV4cHJfZXEoZTEsIGUy
KSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJLyogZTEgYW5kIGUyIGFyZSBlcXVhbCBs
ZWF2ZXMuIFByZXBhcmUgdGhlbSBmb3IgZWxpbWluYXRpb24uICovDQogICAgKw0KICAgICsJdHJh
bnNfY291bnQrKzsNCiAgICArCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7DQogICAgKwlz
d2l0Y2ggKHR5cGUpIHsNCiAgICArCWNhc2UgRV9PUjoNCiAgICArCQllMSA9IGV4cHJfYWxsb2Nf
c3ltYm9sKCZzeW1ib2xfbm8pOw0KICAgICsJCWUyID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJv
bF9ubyk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIEVfQU5EOg0KICAgICsJCWUxID0gZXhw
cl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOw0KICAgICsJCWUyID0gZXhwcl9hbGxvY19zeW1i
b2woJnN5bWJvbF95ZXMpOw0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAgICArCQk7
DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFJld3JpdGVzIHRoZSBl
eHByZXNzaW9ucyAnZXAxJyBhbmQgJ2VwMicgdG8gcmVtb3ZlIG9wZXJhbmRzIGNvbW1vbiB0byBi
b3RoLg0KICAgICsgKiBFeGFtcGxlIHJlZHVjdGlvbnM6DQogICAgKyAqDQogICAgKyAqCWVwMTog
QSAmJiBCICAgICAgICAgICAtPiAgZXAxOiB5DQogICAgKyAqCWVwMjogQSAmJiBCICYmIEMgICAg
ICAtPiAgZXAyOiBDDQogICAgKyAqDQogICAgKyAqCWVwMTogQSB8fCBCICAgICAgICAgICAtPiAg
ZXAxOiBuDQogICAgKyAqCWVwMjogQSB8fCBCIHx8IEMgICAgICAtPiAgZXAyOiBDDQogICAgKyAq
DQogICAgKyAqCWVwMTogQSAmJiAoQiAmJiBGT08pICAtPiAgZXAxOiBGT08NCiAgICArICoJZXAy
OiAoQkFSICYmIEIpICYmIEEgIC0+ICBlcDI6IEJBUg0KICAgICsgKg0KICAgICsgKgllcDE6IEEg
JiYgKEIgfHwgQykgICAgLT4gIGVwMTogeQ0KICAgICsgKgllcDI6IChDIHx8IEIpICYmIEEgICAg
LT4gIGVwMjogeQ0KICAgICsgKg0KICAgICsgKiBDb21wYXJpc29ucyBhcmUgZG9uZSBiZXR3ZWVu
IGFsbCBvcGVyYW5kcyBhdCB0aGUgc2FtZSAibGV2ZWwiIG9mICYmIG9yIHx8Lg0KICAgICsgKiBG
b3IgZXhhbXBsZSwgaW4gdGhlIGV4cHJlc3Npb24gJ2UxICYmIChlMiB8fCBlMykgJiYgKGU0IHx8
IGU1KScsIHRoZQ0KICAgICsgKiBmb2xsb3dpbmcgb3BlcmFuZHMgd2lsbCBiZSBjb21wYXJlZDoN
CiAgICArICoNCiAgICArICoJLSAnZTEnLCAnZTIgfHwgZTMnLCBhbmQgJ2U0IHx8IGU1JywgYWdh
aW5zdCBlYWNoIG90aGVyDQogICAgKyAqCS0gZTIgYWdhaW5zdCBlMw0KICAgICsgKgktIGU0IGFn
YWluc3QgZTUNCiAgICArICoNCiAgICArICogUGFyZW50aGVzZXMgYXJlIGlycmVsZXZhbnQgd2l0
aGluIGEgc2luZ2xlIGxldmVsLiAnZTEgJiYgKGUyICYmIGUzKScgYW5kDQogICAgKyAqICcoZTEg
JiYgZTIpICYmIGUzJyBhcmUgYm90aCBhIHNpbmdsZSBsZXZlbC4NCiAgICArICoNCiAgICArICog
U2VlIF9fZXhwcl9lbGltaW5hdGVfZXEoKSBhcyB3ZWxsLg0KICAgICsgKi8NCiAgICArdm9pZCBl
eHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhwciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpDQog
ICAgK3sNCiAgICArCWlmICghZTEgfHwgIWUyKQ0KICAgICsJCXJldHVybjsNCiAgICArCXN3aXRj
aCAoZTEtPnR5cGUpIHsNCiAgICArCWNhc2UgRV9PUjoNCiAgICArCWNhc2UgRV9BTkQ6DQogICAg
KwkJX19leHByX2VsaW1pbmF0ZV9lcShlMS0+dHlwZSwgZXAxLCBlcDIpOw0KICAgICsJZGVmYXVs
dDoNCiAgICArCQk7DQogICAgKwl9DQogICAgKwlpZiAoZTEtPnR5cGUgIT0gZTItPnR5cGUpIHN3
aXRjaCAoZTItPnR5cGUpIHsNCiAgICArCWNhc2UgRV9PUjoNCiAgICArCWNhc2UgRV9BTkQ6DQog
ICAgKwkJX19leHByX2VsaW1pbmF0ZV9lcShlMi0+dHlwZSwgZXAxLCBlcDIpOw0KICAgICsJZGVm
YXVsdDoNCiAgICArCQk7DQogICAgKwl9DQogICAgKwllMSA9IGV4cHJfZWxpbWluYXRlX3luKGUx
KTsNCiAgICArCWUyID0gZXhwcl9lbGltaW5hdGVfeW4oZTIpOw0KICAgICt9DQogICAgKw0KICAg
ICsjdW5kZWYgZTENCiAgICArI3VuZGVmIGUyDQogICAgKw0KICAgICsvKg0KICAgICsgKiBSZXR1
cm5zIHRydWUgaWYgJ2UxJyBhbmQgJ2UyJyBhcmUgZXF1YWwsIGFmdGVyIG1pbm9yIHNpbXBsaWZp
Y2F0aW9uLiBUd28NCiAgICArICogJiYvfHwgZXhwcmVzc2lvbnMgYXJlIGNvbnNpZGVyZWQgZXF1
YWwgaWYgZXZlcnkgb3BlcmFuZCBpbiBvbmUgZXhwcmVzc2lvbg0KICAgICsgKiBlcXVhbHMgc29t
ZSBvcGVyYW5kIGluIHRoZSBvdGhlciAob3BlcmFuZHMgZG8gbm90IG5lZWQgdG8gYXBwZWFyIGlu
IHRoZSBzYW1lDQogICAgKyAqIG9yZGVyKSwgcmVjdXJzaXZlbHkuDQogICAgKyAqLw0KICAgICtz
dGF0aWMgaW50IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpDQogICAg
K3sNCiAgICArCWludCByZXMsIG9sZF9jb3VudDsNCiAgICArDQogICAgKwlpZiAoZTEtPnR5cGUg
IT0gZTItPnR5cGUpDQogICAgKwkJcmV0dXJuIDA7DQogICAgKwlzd2l0Y2ggKGUxLT50eXBlKSB7
DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwljYXNlIEVfR0VROg0KICAgICsJY2FzZSBFX0dU
SDoNCiAgICArCWNhc2UgRV9MRVE6DQogICAgKwljYXNlIEVfTFRIOg0KICAgICsJY2FzZSBFX1VO
RVFVQUw6DQogICAgKwkJcmV0dXJuIGUxLT5sZWZ0LnN5bSA9PSBlMi0+bGVmdC5zeW0gJiYgZTEt
PnJpZ2h0LnN5bSA9PSBlMi0+cmlnaHQuc3ltOw0KICAgICsJY2FzZSBFX1NZTUJPTDoNCiAgICAr
CQlyZXR1cm4gZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bTsNCiAgICArCWNhc2UgRV9OT1Q6
DQogICAgKwkJcmV0dXJuIGV4cHJfZXEoZTEtPmxlZnQuZXhwciwgZTItPmxlZnQuZXhwcik7DQog
ICAgKwljYXNlIEVfQU5EOg0KICAgICsJY2FzZSBFX09SOg0KICAgICsJCWUxID0gZXhwcl9jb3B5
KGUxKTsNCiAgICArCQllMiA9IGV4cHJfY29weShlMik7DQogICAgKwkJb2xkX2NvdW50ID0gdHJh
bnNfY291bnQ7DQogICAgKwkJZXhwcl9lbGltaW5hdGVfZXEoJmUxLCAmZTIpOw0KICAgICsJCXJl
cyA9IChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJg0KICAg
ICsJCSAgICAgICBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltKTsNCiAgICArCQlleHByX2Zy
ZWUoZTEpOw0KICAgICsJCWV4cHJfZnJlZShlMik7DQogICAgKwkJdHJhbnNfY291bnQgPSBvbGRf
Y291bnQ7DQogICAgKwkJcmV0dXJuIHJlczsNCiAgICArCWNhc2UgRV9MSVNUOg0KICAgICsJY2Fz
ZSBFX1JBTkdFOg0KICAgICsJY2FzZSBFX05PTkU6DQogICAgKwkJLyogcGFuaWMgKi87DQogICAg
Kwl9DQogICAgKw0KICAgICsJaWYgKERFQlVHX0VYUFIpIHsNCiAgICArCQlleHByX2ZwcmludChl
MSwgc3Rkb3V0KTsNCiAgICArCQlwcmludGYoIiA9ICIpOw0KICAgICsJCWV4cHJfZnByaW50KGUy
LCBzdGRvdXQpOw0KICAgICsJCXByaW50ZigiID9cbiIpOw0KICAgICsJfQ0KICAgICsNCiAgICAr
CXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBSZWN1cnNpdmVseSBw
ZXJmb3JtcyB0aGUgZm9sbG93aW5nIHNpbXBsaWZpY2F0aW9ucyBpbi1wbGFjZSAoYXMgd2VsbCBh
cyB0aGUNCiAgICArICogY29ycmVzcG9uZGluZyBzaW1wbGlmaWNhdGlvbnMgd2l0aCBzd2FwcGVk
IG9wZXJhbmRzKToNCiAgICArICoNCiAgICArICoJZXhwciAmJiBuICAtPiAgbg0KICAgICsgKgll
eHByICYmIHkgIC0+ICBleHByDQogICAgKyAqCWV4cHIgfHwgbiAgLT4gIGV4cHINCiAgICArICoJ
ZXhwciB8fCB5ICAtPiAgeQ0KICAgICsgKg0KICAgICsgKiBSZXR1cm5zIHRoZSBvcHRpbWl6ZWQg
ZXhwcmVzc2lvbi4NCiAgICArICovDQogICAgK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9lbGlt
aW5hdGVfeW4oc3RydWN0IGV4cHIgKmUpDQogICAgK3sNCiAgICArCXN0cnVjdCBleHByICp0bXA7
DQogICAgKw0KICAgICsJaWYgKGUpIHN3aXRjaCAoZS0+dHlwZSkgew0KICAgICsJY2FzZSBFX0FO
RDoNCiAgICArCQllLT5sZWZ0LmV4cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5sZWZ0LmV4cHIp
Ow0KICAgICsJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2VsaW1pbmF0ZV95bihlLT5yaWdodC5leHBy
KTsNCiAgICArCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MKSB7DQogICAgKwkJ
CWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsNCiAgICArCQkJCWV4
cHJfZnJlZShlLT5sZWZ0LmV4cHIpOw0KICAgICsJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIp
Ow0KICAgICsJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0KICAgICsJCQkJZS0+bGVmdC5zeW0gPSAm
c3ltYm9sX25vOw0KICAgICsJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgKwkJCQlyZXR1
cm4gZTsNCiAgICArCQkJfSBlbHNlIGlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1i
b2xfeWVzKSB7DQogICAgKwkJCQlmcmVlKGUtPmxlZnQuZXhwcik7DQogICAgKwkJCQl0bXAgPSBl
LT5yaWdodC5leHByOw0KICAgICsJCQkJKmUgPSAqKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCQkJ
ZnJlZSh0bXApOw0KICAgICsJCQkJcmV0dXJuIGU7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAg
KwkJaWYgKGUtPnJpZ2h0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsNCiAgICArCQkJaWYgKGUt
PnJpZ2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pIHsNCiAgICArCQkJCWV4cHJfZnJl
ZShlLT5sZWZ0LmV4cHIpOw0KICAgICsJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOw0KICAg
ICsJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0KICAgICsJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9s
X25vOw0KICAgICsJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgKwkJCQlyZXR1cm4gZTsN
CiAgICArCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3ll
cykgew0KICAgICsJCQkJZnJlZShlLT5yaWdodC5leHByKTsNCiAgICArCQkJCXRtcCA9IGUtPmxl
ZnQuZXhwcjsNCiAgICArCQkJCSplID0gKihlLT5sZWZ0LmV4cHIpOw0KICAgICsJCQkJZnJlZSh0
bXApOw0KICAgICsJCQkJcmV0dXJuIGU7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwkJYnJl
YWs7DQogICAgKwljYXNlIEVfT1I6DQogICAgKwkJZS0+bGVmdC5leHByID0gZXhwcl9lbGltaW5h
dGVfeW4oZS0+bGVmdC5leHByKTsNCiAgICArCQllLT5yaWdodC5leHByID0gZXhwcl9lbGltaW5h
dGVfeW4oZS0+cmlnaHQuZXhwcik7DQogICAgKwkJaWYgKGUtPmxlZnQuZXhwci0+dHlwZSA9PSBF
X1NZTUJPTCkgew0KICAgICsJCQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9s
X25vKSB7DQogICAgKwkJCQlmcmVlKGUtPmxlZnQuZXhwcik7DQogICAgKwkJCQl0bXAgPSBlLT5y
aWdodC5leHByOw0KICAgICsJCQkJKmUgPSAqKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCQkJZnJl
ZSh0bXApOw0KICAgICsJCQkJcmV0dXJuIGU7DQogICAgKwkJCX0gZWxzZSBpZiAoZS0+bGVmdC5l
eHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgew0KICAgICsJCQkJZXhwcl9mcmVlKGUtPmxl
ZnQuZXhwcik7DQogICAgKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQogICAgKwkJCQll
LT50eXBlID0gRV9TWU1CT0w7DQogICAgKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOw0K
ICAgICsJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgKwkJCQlyZXR1cm4gZTsNCiAgICAr
CQkJfQ0KICAgICsJCX0NCiAgICArCQlpZiAoZS0+cmlnaHQuZXhwci0+dHlwZSA9PSBFX1NZTUJP
TCkgew0KICAgICsJCQlpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykg
ew0KICAgICsJCQkJZnJlZShlLT5yaWdodC5leHByKTsNCiAgICArCQkJCXRtcCA9IGUtPmxlZnQu
ZXhwcjsNCiAgICArCQkJCSplID0gKihlLT5sZWZ0LmV4cHIpOw0KICAgICsJCQkJZnJlZSh0bXAp
Ow0KICAgICsJCQkJcmV0dXJuIGU7DQogICAgKwkJCX0gZWxzZSBpZiAoZS0+cmlnaHQuZXhwci0+
bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAgICArCQkJCWV4cHJfZnJlZShlLT5sZWZ0LmV4
cHIpOw0KICAgICsJCQkJZXhwcl9mcmVlKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCQkJZS0+dHlw
ZSA9IEVfU1lNQk9MOw0KICAgICsJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsNCiAgICAr
CQkJCWUtPnJpZ2h0LmV4cHIgPSBOVUxMOw0KICAgICsJCQkJcmV0dXJuIGU7DQogICAgKwkJCX0N
CiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICAr
CX0NCiAgICArCXJldHVybiBlOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBib29s
IEZPTyE9biA9PiBGT08NCiAgICArICovDQogICAgK3N0cnVjdCBleHByICpleHByX3RyYW5zX2Jv
b2woc3RydWN0IGV4cHIgKmUpDQogICAgK3sNCiAgICArCWlmICghZSkNCiAgICArCQlyZXR1cm4g
TlVMTDsNCiAgICArCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgICsJY2FzZSBFX0FORDoNCiAgICAr
CWNhc2UgRV9PUjoNCiAgICArCWNhc2UgRV9OT1Q6DQogICAgKwkJZS0+bGVmdC5leHByID0gZXhw
cl90cmFuc19ib29sKGUtPmxlZnQuZXhwcik7DQogICAgKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJf
dHJhbnNfYm9vbChlLT5yaWdodC5leHByKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9V
TkVRVUFMOg0KICAgICsJCS8vIEZPTyE9biAtPiBGT08NCiAgICArCQlpZiAoZS0+bGVmdC5zeW0t
PnR5cGUgPT0gU19UUklTVEFURSkgew0KICAgICsJCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1i
b2xfbm8pIHsNCiAgICArCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICArCQkJCWUtPnJpZ2h0
LnN5bSA9IE5VTEw7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwlk
ZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArCXJldHVybiBlOw0KICAgICt9DQogICAg
Kw0KICAgICsvKg0KICAgICsgKiBlMSB8fCBlMiAtPiA/DQogICAgKyAqLw0KICAgICtzdGF0aWMg
c3RydWN0IGV4cHIgKmV4cHJfam9pbl9vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICpl
MikNCiAgICArew0KICAgICsJc3RydWN0IGV4cHIgKnRtcDsNCiAgICArCXN0cnVjdCBzeW1ib2wg
KnN5bTEsICpzeW0yOw0KICAgICsNCiAgICArCWlmIChleHByX2VxKGUxLCBlMikpDQogICAgKwkJ
cmV0dXJuIGV4cHJfY29weShlMSk7DQogICAgKwlpZiAoZTEtPnR5cGUgIT0gRV9FUVVBTCAmJiBl
MS0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUg
IT0gRV9OT1QpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwlpZiAoZTItPnR5cGUgIT0gRV9F
UVVBTCAmJiBlMi0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTItPnR5cGUgIT0gRV9TWU1CT0wgJiYg
ZTItPnR5cGUgIT0gRV9OT1QpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwlpZiAoZTEtPnR5
cGUgPT0gRV9OT1QpIHsNCiAgICArCQl0bXAgPSBlMS0+bGVmdC5leHByOw0KICAgICsJCWlmICh0
bXAtPnR5cGUgIT0gRV9FUVVBTCAmJiB0bXAtPnR5cGUgIT0gRV9VTkVRVUFMICYmIHRtcC0+dHlw
ZSAhPSBFX1NZTUJPTCkNCiAgICArCQkJcmV0dXJuIE5VTEw7DQogICAgKwkJc3ltMSA9IHRtcC0+
bGVmdC5zeW07DQogICAgKwl9IGVsc2UNCiAgICArCQlzeW0xID0gZTEtPmxlZnQuc3ltOw0KICAg
ICsJaWYgKGUyLT50eXBlID09IEVfTk9UKSB7DQogICAgKwkJaWYgKGUyLT5sZWZ0LmV4cHItPnR5
cGUgIT0gRV9TWU1CT0wpDQogICAgKwkJCXJldHVybiBOVUxMOw0KICAgICsJCXN5bTIgPSBlMi0+
bGVmdC5leHByLT5sZWZ0LnN5bTsNCiAgICArCX0gZWxzZQ0KICAgICsJCXN5bTIgPSBlMi0+bGVm
dC5zeW07DQogICAgKwlpZiAoc3ltMSAhPSBzeW0yKQ0KICAgICsJCXJldHVybiBOVUxMOw0KICAg
ICsJaWYgKHN5bTEtPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bTEtPnR5cGUgIT0gU19UUklTVEFU
RSkNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArCWlmIChzeW0xLT50eXBlID09IFNfVFJJU1RB
VEUpIHsNCiAgICArCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VR
VUFMICYmDQogICAgKwkJICAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyAmJiBlMi0+
cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fA0KICAgICsJCSAgICAgKGUxLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKSB7DQogICAg
KwkJCS8vIChhPSd5JykgfHwgKGE9J20nKSAtPiAoYSE9J24nKQ0KICAgICsJCQlyZXR1cm4gZXhw
cl9hbGxvY19jb21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF9ubyk7DQogICAgKwkJfQ0KICAg
ICsJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYNCiAg
ICArCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUyLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF9ubykgfHwNCiAgICArCQkgICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xf
bm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKSB7DQogICAgKwkJCS8vIChhPSd5
JykgfHwgKGE9J24nKSAtPiAoYSE9J20nKQ0KICAgICsJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21w
KEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF9tb2QpOw0KICAgICsJCX0NCiAgICArCQlpZiAoZTEt
PnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmDQogICAgKwkJICAgICgo
ZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xf
bm8pIHx8DQogICAgKwkJICAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5y
aWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkgew0KICAgICsJCQkvLyAoYT0nbScpIHx8IChhPSdu
JykgLT4gKGEhPSd5JykNCiAgICArCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUws
IHN5bTEsICZzeW1ib2xfeWVzKTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKwlpZiAoc3ltMS0+
dHlwZSA9PSBTX0JPT0xFQU4gJiYgc3ltMSA9PSBzeW0yKSB7DQogICAgKwkJaWYgKChlMS0+dHlw
ZSA9PSBFX05PVCAmJiBlMS0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBl
ID09IEVfU1lNQk9MKSB8fA0KICAgICsJCSAgICAoZTItPnR5cGUgPT0gRV9OT1QgJiYgZTItPmxl
ZnQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX1NZTUJPTCkpDQogICAg
KwkJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7DQogICAgKwl9DQogICAg
Kw0KICAgICsJaWYgKERFQlVHX0VYUFIpIHsNCiAgICArCQlwcmludGYoIm9wdGltaXplICgiKTsN
CiAgICArCQlleHByX2ZwcmludChlMSwgc3Rkb3V0KTsNCiAgICArCQlwcmludGYoIikgfHwgKCIp
Ow0KICAgICsJCWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOw0KICAgICsJCXByaW50ZigiKT9cbiIp
Ow0KICAgICsJfQ0KICAgICsJcmV0dXJuIE5VTEw7DQogICAgK30NCiAgICArDQogICAgK3N0YXRp
YyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX2FuZChzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHBy
ICplMikNCiAgICArew0KICAgICsJc3RydWN0IGV4cHIgKnRtcDsNCiAgICArCXN0cnVjdCBzeW1i
b2wgKnN5bTEsICpzeW0yOw0KICAgICsNCiAgICArCWlmIChleHByX2VxKGUxLCBlMikpDQogICAg
KwkJcmV0dXJuIGV4cHJfY29weShlMSk7DQogICAgKwlpZiAoZTEtPnR5cGUgIT0gRV9FUVVBTCAm
JiBlMS0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTEtPnR5cGUgIT0gRV9TWU1CT0wgJiYgZTEtPnR5
cGUgIT0gRV9OT1QpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwlpZiAoZTItPnR5cGUgIT0g
RV9FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1VORVFVQUwgJiYgZTItPnR5cGUgIT0gRV9TWU1CT0wg
JiYgZTItPnR5cGUgIT0gRV9OT1QpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwlpZiAoZTEt
PnR5cGUgPT0gRV9OT1QpIHsNCiAgICArCQl0bXAgPSBlMS0+bGVmdC5leHByOw0KICAgICsJCWlm
ICh0bXAtPnR5cGUgIT0gRV9FUVVBTCAmJiB0bXAtPnR5cGUgIT0gRV9VTkVRVUFMICYmIHRtcC0+
dHlwZSAhPSBFX1NZTUJPTCkNCiAgICArCQkJcmV0dXJuIE5VTEw7DQogICAgKwkJc3ltMSA9IHRt
cC0+bGVmdC5zeW07DQogICAgKwl9IGVsc2UNCiAgICArCQlzeW0xID0gZTEtPmxlZnQuc3ltOw0K
ICAgICsJaWYgKGUyLT50eXBlID09IEVfTk9UKSB7DQogICAgKwkJaWYgKGUyLT5sZWZ0LmV4cHIt
PnR5cGUgIT0gRV9TWU1CT0wpDQogICAgKwkJCXJldHVybiBOVUxMOw0KICAgICsJCXN5bTIgPSBl
Mi0+bGVmdC5leHByLT5sZWZ0LnN5bTsNCiAgICArCX0gZWxzZQ0KICAgICsJCXN5bTIgPSBlMi0+
bGVmdC5zeW07DQogICAgKwlpZiAoc3ltMSAhPSBzeW0yKQ0KICAgICsJCXJldHVybiBOVUxMOw0K
ICAgICsJaWYgKHN5bTEtPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bTEtPnR5cGUgIT0gU19UUklT
VEFURSkNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArDQogICAgKwlpZiAoKGUxLT50eXBlID09
IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX3llcykgfHwNCiAgICArCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUg
PT0gRV9FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkNCiAgICArCQkvLyAo
YSkgJiYgKGE9J3knKSAtPiAoYT0neScpDQogICAgKwkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChF
X0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7DQogICAgKw0KICAgICsJaWYgKChlMS0+dHlwZSA9
PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAm
c3ltYm9sX25vKSB8fA0KICAgICsJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlw
ZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSkNCiAgICArCQkv
LyAoYSkgJiYgKGEhPSduJykgLT4gKGEpDQogICAgKwkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9s
KHN5bTEpOw0KICAgICsNCiAgICArCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5
cGUgPT0gRV9VTkVRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8DQogICAg
KwkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBl
MS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSkNCiAgICArCQkvLyAoYSkgJiYgKGEhPSdtJykg
LT4gKGE9J3knKQ0KICAgICsJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwg
JnN5bWJvbF95ZXMpOw0KICAgICsNCiAgICArCWlmIChzeW0xLT50eXBlID09IFNfVFJJU1RBVEUp
IHsNCiAgICArCQlpZiAoZTEtPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFV
QUwpIHsNCiAgICArCQkJLy8gKGE9J2InKSAmJiAoYSE9J2MnKSAtPiAnYic9J2MnID8gJ24nIDog
YT0nYicNCiAgICArCQkJc3ltMiA9IGUxLT5yaWdodC5zeW07DQogICAgKwkJCWlmICgoZTItPnJp
Z2h0LnN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpICYmIChzeW0yLT5mbGFncyAmIFNZTUJPTF9D
T05TVCkpDQogICAgKwkJCQlyZXR1cm4gc3ltMiAhPSBlMi0+cmlnaHQuc3ltID8gZXhwcl9hbGxv
Y19jb21wKEVfRVFVQUwsIHN5bTEsIHN5bTIpDQogICAgKwkJCQkJCQkgICAgIDogZXhwcl9hbGxv
Y19zeW1ib2woJnN5bWJvbF9ubyk7DQogICAgKwkJfQ0KICAgICsJCWlmIChlMS0+dHlwZSA9PSBF
X1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCkgew0KICAgICsJCQkvLyAoYT0nYicpICYm
IChhIT0nYycpIC0+ICdiJz0nYycgPyAnbicgOiBhPSdiJw0KICAgICsJCQlzeW0yID0gZTItPnJp
Z2h0LnN5bTsNCiAgICArCQkJaWYgKChlMS0+cmlnaHQuc3ltLT5mbGFncyAmIFNZTUJPTF9DT05T
VCkgJiYgKHN5bTItPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkNCiAgICArCQkJCXJldHVybiBzeW0y
ICE9IGUxLT5yaWdodC5zeW0gPyBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgc3ltMikN
CiAgICArCQkJCQkJCSAgICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsNCiAgICAr
CQl9DQogICAgKwkJaWYgKGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX1VO
RVFVQUwgJiYNCiAgICArCQkJICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUy
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgfHwNCiAgICArCQkJICAgIChlMS0+cmlnaHQuc3lt
ID09ICZzeW1ib2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKQ0KICAgICsJ
CQkvLyAoYSE9J3knKSAmJiAoYSE9J24nKSAtPiAoYT0nbScpDQogICAgKwkJCXJldHVybiBleHBy
X2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF9tb2QpOw0KICAgICsNCiAgICArCQlp
ZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJg0KICAg
ICsJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9
PSAmc3ltYm9sX21vZCkgfHwNCiAgICArCQkJICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xf
bW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKSkNCiAgICArCQkJLy8gKGEhPSd5
JykgJiYgKGEhPSdtJykgLT4gKGE9J24nKQ0KICAgICsJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21w
KEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfbm8pOw0KICAgICsNCiAgICArCQlpZiAoZTEtPnR5cGUg
PT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJg0KICAgICsJCQkgICAoKGUx
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25v
KSB8fA0KICAgICsJCQkgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmln
aHQuc3ltID09ICZzeW1ib2xfbW9kKSkpDQogICAgKwkJCS8vIChhIT0nbScpICYmIChhIT0nbicp
IC0+IChhPSdtJykNCiAgICArCQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0x
LCAmc3ltYm9sX3llcyk7DQogICAgKw0KICAgICsJCWlmICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wg
JiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8
fA0KICAgICsJCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9FUVVB
TCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fA0KICAgICsJCSAgICAoZTEtPnR5
cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT5yaWdodC5zeW0g
PT0gJnN5bWJvbF95ZXMpIHx8DQogICAgKwkJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBl
MS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpDQog
ICAgKwkJCXJldHVybiBOVUxMOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmIChERUJVR19FWFBS
KSB7DQogICAgKwkJcHJpbnRmKCJvcHRpbWl6ZSAoIik7DQogICAgKwkJZXhwcl9mcHJpbnQoZTEs
IHN0ZG91dCk7DQogICAgKwkJcHJpbnRmKCIpICYmICgiKTsNCiAgICArCQlleHByX2ZwcmludChl
Miwgc3Rkb3V0KTsNCiAgICArCQlwcmludGYoIik/XG4iKTsNCiAgICArCX0NCiAgICArCXJldHVy
biBOVUxMOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBleHByX2VsaW1pbmF0ZV9k
dXBzKCkgaGVscGVyLg0KICAgICsgKg0KICAgICsgKiBXYWxrcyB0aGUgdHdvIGV4cHJlc3Npb24g
dHJlZXMgZ2l2ZW4gaW4gJ2VwMScgYW5kICdlcDInLiBBbnkgbm9kZSB0aGF0IGRvZXMNCiAgICAr
ICogbm90IGhhdmUgdHlwZSAndHlwZScgKEVfT1IvRV9BTkQpIGlzIGNvbnNpZGVyZWQgYSBsZWFm
LCBhbmQgaXMgY29tcGFyZWQNCiAgICArICogYWdhaW5zdCBhbGwgb3RoZXIgbGVhdmVzIHRvIGxv
b2sgZm9yIHNpbXBsaWZpY2F0aW9ucy4NCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIGV4cHJf
ZWxpbWluYXRlX2R1cHMxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBz
dHJ1Y3QgZXhwciAqKmVwMikNCiAgICArew0KICAgICsjZGVmaW5lIGUxICgqZXAxKQ0KICAgICsj
ZGVmaW5lIGUyICgqZXAyKQ0KICAgICsJc3RydWN0IGV4cHIgKnRtcDsNCiAgICArDQogICAgKwkv
KiBSZWN1cnNlIGRvd24gdG8gbGVhdmVzICovDQogICAgKw0KICAgICsJaWYgKGUxLT50eXBlID09
IHR5cGUpIHsNCiAgICArCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEtPmxlZnQuZXhw
ciwgJmUyKTsNCiAgICArCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEtPnJpZ2h0LmV4
cHIsICZlMik7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsJaWYgKGUyLT50eXBlID09
IHR5cGUpIHsNCiAgICArCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEsICZlMi0+bGVm
dC5leHByKTsNCiAgICArCQlleHByX2VsaW1pbmF0ZV9kdXBzMSh0eXBlLCAmZTEsICZlMi0+cmln
aHQuZXhwcik7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsNCiAgICArCS8qIGUxIGFu
ZCBlMiBhcmUgbGVhdmVzLiBDb21wYXJlIGFuZCBwcm9jZXNzIHRoZW0uICovDQogICAgKw0KICAg
ICsJaWYgKGUxID09IGUyKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwlzd2l0Y2ggKGUx
LT50eXBlKSB7DQogICAgKwljYXNlIEVfT1I6IGNhc2UgRV9BTkQ6DQogICAgKwkJZXhwcl9lbGlt
aW5hdGVfZHVwczEoZTEtPnR5cGUsICZlMSwgJmUxKTsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJ
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXN3aXRjaCAodHlwZSkgew0KICAgICsJY2FzZSBFX09S
Og0KICAgICsJCXRtcCA9IGV4cHJfam9pbl9vcihlMSwgZTIpOw0KICAgICsJCWlmICh0bXApIHsN
CiAgICArCQkJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUyKTsNCiAgICArCQkJZTEgPSBleHBy
X2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsNCiAgICArCQkJZTIgPSB0bXA7DQogICAgKwkJCXRy
YW5zX2NvdW50Kys7DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX0FORDoN
CiAgICArCQl0bXAgPSBleHByX2pvaW5fYW5kKGUxLCBlMik7DQogICAgKwkJaWYgKHRtcCkgew0K
ICAgICsJCQlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUoZTIpOw0KICAgICsJCQllMSA9IGV4cHJf
YWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsNCiAgICArCQkJZTIgPSB0bXA7DQogICAgKwkJCXRy
YW5zX2NvdW50Kys7DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAg
ICArCQk7DQogICAgKwl9DQogICAgKyN1bmRlZiBlMQ0KICAgICsjdW5kZWYgZTINCiAgICArfQ0K
ICAgICsNCiAgICArLyoNCiAgICArICogUmV3cml0ZXMgJ2UnIGluLXBsYWNlIHRvIHJlbW92ZSAo
ImpvaW4iKSBkdXBsaWNhdGUgYW5kIG90aGVyIHJlZHVuZGFudA0KICAgICsgKiBvcGVyYW5kcy4N
CiAgICArICoNCiAgICArICogRXhhbXBsZSBzaW1wbGlmaWNhdGlvbnM6DQogICAgKyAqDQogICAg
KyAqCUEgfHwgQiB8fCBBICAgIC0+ICBBIHx8IEINCiAgICArICoJQSAmJiBCICYmIEE9eSAgLT4g
IEE9eSAmJiBCDQogICAgKyAqDQogICAgKyAqIFJldHVybnMgdGhlIGRlZHVwbGljYXRlZCBleHBy
ZXNzaW9uLg0KICAgICsgKi8NCiAgICArc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX2R1cHMo
c3RydWN0IGV4cHIgKmUpDQogICAgK3sNCiAgICArCWludCBvbGRjb3VudDsNCiAgICArCWlmICgh
ZSkNCiAgICArCQlyZXR1cm4gZTsNCiAgICArDQogICAgKwlvbGRjb3VudCA9IHRyYW5zX2NvdW50
Ow0KICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQl0cmFuc19jb3VudCA9IDA7DQogICAgKwkJc3dp
dGNoIChlLT50eXBlKSB7DQogICAgKwkJY2FzZSBFX09SOiBjYXNlIEVfQU5EOg0KICAgICsJCQll
eHByX2VsaW1pbmF0ZV9kdXBzMShlLT50eXBlLCAmZSwgJmUpOw0KICAgICsJCWRlZmF1bHQ6DQog
ICAgKwkJCTsNCiAgICArCQl9DQogICAgKwkJaWYgKCF0cmFuc19jb3VudCkNCiAgICArCQkJLyog
Tm8gc2ltcGxpZmljYXRpb25zIGRvbmUgaW4gdGhpcyBwYXNzLiBXZSdyZSBkb25lICovDQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWUgPSBleHByX2VsaW1pbmF0ZV95bihlKTsNCiAgICArCX0NCiAg
ICArCXRyYW5zX2NvdW50ID0gb2xkY291bnQ7DQogICAgKwlyZXR1cm4gZTsNCiAgICArfQ0KICAg
ICsNCiAgICArLyoNCiAgICArICogUGVyZm9ybXMgdmFyaW91cyBzaW1wbGlmaWNhdGlvbnMgaW52
b2x2aW5nIGxvZ2ljYWwgb3BlcmF0b3JzIGFuZA0KICAgICsgKiBjb21wYXJpc29ucy4NCiAgICAr
ICoNCiAgICArICogQWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgbmV3IGV4cHJlc3Npb24uDQogICAg
KyAqLw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc2Zvcm0oc3RydWN0IGV4cHIgKmUpDQog
ICAgK3sNCiAgICArCXN0cnVjdCBleHByICp0bXA7DQogICAgKw0KICAgICsJaWYgKCFlKQ0KICAg
ICsJCXJldHVybiBOVUxMOw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7DQogICAgKwljYXNlIEVf
RVFVQUw6DQogICAgKwljYXNlIEVfR0VROg0KICAgICsJY2FzZSBFX0dUSDoNCiAgICArCWNhc2Ug
RV9MRVE6DQogICAgKwljYXNlIEVfTFRIOg0KICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwlj
YXNlIEVfU1lNQk9MOg0KICAgICsJY2FzZSBFX0xJU1Q6DQogICAgKwkJYnJlYWs7DQogICAgKwlk
ZWZhdWx0Og0KICAgICsJCWUtPmxlZnQuZXhwciA9IGV4cHJfdHJhbnNmb3JtKGUtPmxlZnQuZXhw
cik7DQogICAgKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfdHJhbnNmb3JtKGUtPnJpZ2h0LmV4cHIp
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgICsJY2FzZSBF
X0VRVUFMOg0KICAgICsJCWlmIChlLT5sZWZ0LnN5bS0+dHlwZSAhPSBTX0JPT0xFQU4pDQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAg
ICsJCQllLT50eXBlID0gRV9OT1Q7DQogICAgKwkJCWUtPmxlZnQuZXhwciA9IGV4cHJfYWxsb2Nf
c3ltYm9sKGUtPmxlZnQuc3ltKTsNCiAgICArCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9t
b2QpIHsNCiAgICArCQkJcHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8g
dGVzdCBmb3JjZWQgdG8gJ24nXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAgKwkJCWUtPnR5
cGUgPSBFX1NZTUJPTDsNCiAgICArCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX25vOw0KICAgICsJ
CQllLT5yaWdodC5zeW0gPSBOVUxMOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJ
aWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgew0KICAgICsJCQllLT50eXBlID0gRV9T
WU1CT0w7DQogICAgKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCX0NCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9VTkVRVUFMOg0KICAgICsJCWlmIChl
LT5sZWZ0LnN5bS0+dHlwZSAhPSBTX0JPT0xFQU4pDQogICAgKwkJCWJyZWFrOw0KICAgICsJCWlm
IChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAgICsJCQllLT50eXBlID0gRV9TWU1C
T0w7DQogICAgKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CX0NCiAgICArCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB7DQogICAgKwkJCXBy
aW50ZigiYm9vbGVhbiBzeW1ib2wgJXMgdGVzdGVkIGZvciAnbSc/IHRlc3QgZm9yY2VkIHRvICd5
J1xuIiwgZS0+bGVmdC5zeW0tPm5hbWUpOw0KICAgICsJCQllLT50eXBlID0gRV9TWU1CT0w7DQog
ICAgKwkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7DQogICAgKwkJCWUtPnJpZ2h0LnN5bSA9
IE5VTEw7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCQlpZiAoZS0+cmlnaHQuc3lt
ID09ICZzeW1ib2xfeWVzKSB7DQogICAgKwkJCWUtPnR5cGUgPSBFX05PVDsNCiAgICArCQkJZS0+
bGVmdC5leHByID0gZXhwcl9hbGxvY19zeW1ib2woZS0+bGVmdC5zeW0pOw0KICAgICsJCQllLT5y
aWdodC5zeW0gPSBOVUxMOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7
DQogICAgKwljYXNlIEVfTk9UOg0KICAgICsJCXN3aXRjaCAoZS0+bGVmdC5leHByLT50eXBlKSB7
DQogICAgKwkJY2FzZSBFX05PVDoNCiAgICArCQkJLy8gISFhIC0+IGENCiAgICArCQkJdG1wID0g
ZS0+bGVmdC5leHByLT5sZWZ0LmV4cHI7DQogICAgKwkJCWZyZWUoZS0+bGVmdC5leHByKTsNCiAg
ICArCQkJZnJlZShlKTsNCiAgICArCQkJZSA9IHRtcDsNCiAgICArCQkJZSA9IGV4cHJfdHJhbnNm
b3JtKGUpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEVfRVFVQUw6DQogICAgKwkJY2Fz
ZSBFX1VORVFVQUw6DQogICAgKwkJCS8vICFhPSd4JyAtPiBhIT0neCcNCiAgICArCQkJdG1wID0g
ZS0+bGVmdC5leHByOw0KICAgICsJCQlmcmVlKGUpOw0KICAgICsJCQllID0gdG1wOw0KICAgICsJ
CQllLT50eXBlID0gZS0+dHlwZSA9PSBFX0VRVUFMID8gRV9VTkVRVUFMIDogRV9FUVVBTDsNCiAg
ICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBFX0xFUToNCiAgICArCQljYXNlIEVfR0VROg0KICAg
ICsJCQkvLyAhYTw9J3gnIC0+IGE+J3gnDQogICAgKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsNCiAg
ICArCQkJZnJlZShlKTsNCiAgICArCQkJZSA9IHRtcDsNCiAgICArCQkJZS0+dHlwZSA9IGUtPnR5
cGUgPT0gRV9MRVEgPyBFX0dUSCA6IEVfTFRIOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNl
IEVfTFRIOg0KICAgICsJCWNhc2UgRV9HVEg6DQogICAgKwkJCS8vICFhPCd4JyAtPiBhPj0neCcN
CiAgICArCQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgICsJCQlmcmVlKGUpOw0KICAgICsJCQll
ID0gdG1wOw0KICAgICsJCQllLT50eXBlID0gZS0+dHlwZSA9PSBFX0xUSCA/IEVfR0VRIDogRV9M
RVE7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgRV9PUjoNCiAgICArCQkJLy8gIShhIHx8
IGIpIC0+ICFhICYmICFiDQogICAgKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsNCiAgICArCQkJZS0+
dHlwZSA9IEVfQU5EOw0KICAgICsJCQllLT5yaWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9O
T1QsIHRtcC0+cmlnaHQuZXhwcik7DQogICAgKwkJCXRtcC0+dHlwZSA9IEVfTk9UOw0KICAgICsJ
CQl0bXAtPnJpZ2h0LmV4cHIgPSBOVUxMOw0KICAgICsJCQllID0gZXhwcl90cmFuc2Zvcm0oZSk7
DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgRV9BTkQ6DQogICAgKwkJCS8vICEoYSAmJiBi
KSAtPiAhYSB8fCAhYg0KICAgICsJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7DQogICAgKwkJCWUtPnR5
cGUgPSBFX09SOw0KICAgICsJCQllLT5yaWdodC5leHByID0gZXhwcl9hbGxvY19vbmUoRV9OT1Qs
IHRtcC0+cmlnaHQuZXhwcik7DQogICAgKwkJCXRtcC0+dHlwZSA9IEVfTk9UOw0KICAgICsJCQl0
bXAtPnJpZ2h0LmV4cHIgPSBOVUxMOw0KICAgICsJCQllID0gZXhwcl90cmFuc2Zvcm0oZSk7DQog
ICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgRV9TWU1CT0w6DQogICAgKwkJCWlmIChlLT5sZWZ0
LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7DQogICAgKwkJCQkvLyAhJ3knIC0+ICdu
Jw0KICAgICsJCQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgICsJCQkJZnJlZShlKTsNCiAgICAr
CQkJCWUgPSB0bXA7DQogICAgKwkJCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgKwkJCQllLT5s
ZWZ0LnN5bSA9ICZzeW1ib2xfbm87DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJ
CQlpZiAoZS0+bGVmdC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX21vZCkgew0KICAgICsJCQkJ
Ly8gISdtJyAtPiAnbScNCiAgICArCQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsNCiAgICArCQkJCWZy
ZWUoZSk7DQogICAgKwkJCQllID0gdG1wOw0KICAgICsJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0K
ICAgICsJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX21vZDsNCiAgICArCQkJCWJyZWFrOw0KICAg
ICsJCQl9DQogICAgKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbm8p
IHsNCiAgICArCQkJCS8vICEnbicgLT4gJ3knDQogICAgKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7
DQogICAgKwkJCQlmcmVlKGUpOw0KICAgICsJCQkJZSA9IHRtcDsNCiAgICArCQkJCWUtPnR5cGUg
PSBFX1NZTUJPTDsNCiAgICArCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7DQogICAgKwkJ
CQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQlkZWZhdWx0Og0KICAg
ICsJCQk7DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAgICArCQk7
DQogICAgKwl9DQogICAgKwlyZXR1cm4gZTsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGV4cHJf
Y29udGFpbnNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAg
ICArew0KICAgICsJaWYgKCFkZXApDQogICAgKwkJcmV0dXJuIDA7DQogICAgKw0KICAgICsJc3dp
dGNoIChkZXAtPnR5cGUpIHsNCiAgICArCWNhc2UgRV9BTkQ6DQogICAgKwljYXNlIEVfT1I6DQog
ICAgKwkJcmV0dXJuIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+bGVmdC5leHByLCBzeW0pIHx8
DQogICAgKwkJICAgICAgIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+cmlnaHQuZXhwciwgc3lt
KTsNCiAgICArCWNhc2UgRV9TWU1CT0w6DQogICAgKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0gPT0g
c3ltOw0KICAgICsJY2FzZSBFX0VRVUFMOg0KICAgICsJY2FzZSBFX0dFUToNCiAgICArCWNhc2Ug
RV9HVEg6DQogICAgKwljYXNlIEVfTEVROg0KICAgICsJY2FzZSBFX0xUSDoNCiAgICArCWNhc2Ug
RV9VTkVRVUFMOg0KICAgICsJCXJldHVybiBkZXAtPmxlZnQuc3ltID09IHN5bSB8fA0KICAgICsJ
CSAgICAgICBkZXAtPnJpZ2h0LnN5bSA9PSBzeW07DQogICAgKwljYXNlIEVfTk9UOg0KICAgICsJ
CXJldHVybiBleHByX2NvbnRhaW5zX3N5bWJvbChkZXAtPmxlZnQuZXhwciwgc3ltKTsNCiAgICAr
CWRlZmF1bHQ6DQogICAgKwkJOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAg
ICArDQogICAgK2Jvb2wgZXhwcl9kZXBlbmRzX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1
Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCWlmICghZGVwKQ0KICAgICsJCXJldHVybiBm
YWxzZTsNCiAgICArDQogICAgKwlzd2l0Y2ggKGRlcC0+dHlwZSkgew0KICAgICsJY2FzZSBFX0FO
RDoNCiAgICArCQlyZXR1cm4gZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAtPmxlZnQuZXhwciwgc3lt
KSB8fA0KICAgICsJCSAgICAgICBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+cmlnaHQuZXhwciwg
c3ltKTsNCiAgICArCWNhc2UgRV9TWU1CT0w6DQogICAgKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0g
PT0gc3ltOw0KICAgICsJY2FzZSBFX0VRVUFMOg0KICAgICsJCWlmIChkZXAtPmxlZnQuc3ltID09
IHN5bSkgew0KICAgICsJCQlpZiAoZGVwLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgfHwgZGVw
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgKwkJCQlyZXR1cm4gdHJ1ZTsNCiAgICAr
CQl9DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIEVfVU5FUVVBTDoNCiAgICArCQlpZiAoZGVw
LT5sZWZ0LnN5bSA9PSBzeW0pIHsNCiAgICArCQkJaWYgKGRlcC0+cmlnaHQuc3ltID09ICZzeW1i
b2xfbm8pDQogICAgKwkJCQlyZXR1cm4gdHJ1ZTsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQog
ICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArIAlyZXR1cm4gZmFsc2U7DQog
ICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIEluc2VydHMgZXhwbGljaXQgY29tcGFyaXNv
bnMgb2YgdHlwZSAndHlwZScgdG8gc3ltYm9sICdzeW0nIGludG8gdGhlDQogICAgKyAqIGV4cHJl
c3Npb24gJ2UnLg0KICAgICsgKg0KICAgICsgKiBFeGFtcGxlcyB0cmFuc2Zvcm1hdGlvbnMgZm9y
IHR5cGUgPT0gRV9VTkVRVUFMLCBzeW0gPT0gJnN5bWJvbF9ubzoNCiAgICArICoNCiAgICArICoJ
QSAgICAgICAgICAgICAgLT4gIEEhPW4NCiAgICArICoJIUEgICAgICAgICAgICAgLT4gIEE9bg0K
ICAgICsgKglBICYmIEIgICAgICAgICAtPiAgIShBPW4gfHwgQj1uKQ0KICAgICsgKglBIHx8IEIg
ICAgICAgICAtPiAgIShBPW4gJiYgQj1uKQ0KICAgICsgKglBICYmIChCIHx8IEMpICAtPiAgIShB
PW4gfHwgKEI9biAmJiBDPW4pKQ0KICAgICsgKg0KICAgICsgKiBBbGxvY2F0ZXMgYW5kIHJldHVy
bnMgYSBuZXcgZXhwcmVzc2lvbi4NCiAgICArICovDQogICAgK3N0cnVjdCBleHByICpleHByX3Ry
YW5zX2NvbXBhcmUoc3RydWN0IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBz
eW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0IGV4cHIgKmUxLCAqZTI7DQogICAgKw0K
ICAgICsJaWYgKCFlKSB7DQogICAgKwkJZSA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7DQogICAg
KwkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQ0KICAgICsJCQllID0gZXhwcl9hbGxvY19vbmUoRV9O
T1QsIGUpOw0KICAgICsJCXJldHVybiBlOw0KICAgICsJfQ0KICAgICsJc3dpdGNoIChlLT50eXBl
KSB7DQogICAgKwljYXNlIEVfQU5EOg0KICAgICsJCWUxID0gZXhwcl90cmFuc19jb21wYXJlKGUt
PmxlZnQuZXhwciwgRV9FUVVBTCwgc3ltKTsNCiAgICArCQllMiA9IGV4cHJfdHJhbnNfY29tcGFy
ZShlLT5yaWdodC5leHByLCBFX0VRVUFMLCBzeW0pOw0KICAgICsJCWlmIChzeW0gPT0gJnN5bWJv
bF95ZXMpDQogICAgKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX0FORCwgZTEsIGUyKTsNCiAgICAr
CQlpZiAoc3ltID09ICZzeW1ib2xfbm8pDQogICAgKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX09S
LCBlMSwgZTIpOw0KICAgICsJCWlmICh0eXBlID09IEVfVU5FUVVBTCkNCiAgICArCQkJZSA9IGV4
cHJfYWxsb2Nfb25lKEVfTk9ULCBlKTsNCiAgICArCQlyZXR1cm4gZTsNCiAgICArCWNhc2UgRV9P
UjoNCiAgICArCQllMSA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIEVfRVFVQUws
IHN5bSk7DQogICAgKwkJZTIgPSBleHByX3RyYW5zX2NvbXBhcmUoZS0+cmlnaHQuZXhwciwgRV9F
UVVBTCwgc3ltKTsNCiAgICArCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQ0KICAgICsJCQllID0g
ZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKTsNCiAgICArCQlpZiAoc3ltID09ICZzeW1ib2xf
bm8pDQogICAgKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX0FORCwgZTEsIGUyKTsNCiAgICArCQlp
ZiAodHlwZSA9PSBFX1VORVFVQUwpDQogICAgKwkJCWUgPSBleHByX2FsbG9jX29uZShFX05PVCwg
ZSk7DQogICAgKwkJcmV0dXJuIGU7DQogICAgKwljYXNlIEVfTk9UOg0KICAgICsJCXJldHVybiBl
eHByX3RyYW5zX2NvbXBhcmUoZS0+bGVmdC5leHByLCB0eXBlID09IEVfRVFVQUwgPyBFX1VORVFV
QUwgOiBFX0VRVUFMLCBzeW0pOw0KICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwljYXNlIEVf
TFRIOg0KICAgICsJY2FzZSBFX0xFUToNCiAgICArCWNhc2UgRV9HVEg6DQogICAgKwljYXNlIEVf
R0VROg0KICAgICsJY2FzZSBFX0VRVUFMOg0KICAgICsJCWlmICh0eXBlID09IEVfRVFVQUwpIHsN
CiAgICArCQkJaWYgKHN5bSA9PSAmc3ltYm9sX3llcykNCiAgICArCQkJCXJldHVybiBleHByX2Nv
cHkoZSk7DQogICAgKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgKwkJCQlyZXR1cm4g
ZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7DQogICAgKwkJCWlmIChzeW0gPT0gJnN5bWJv
bF9ubykNCiAgICArCQkJCXJldHVybiBleHByX2FsbG9jX29uZShFX05PVCwgZXhwcl9jb3B5KGUp
KTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQ0KICAg
ICsJCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2NvcHkoZSkpOw0KICAgICsJ
CQlpZiAoc3ltID09ICZzeW1ib2xfbW9kKQ0KICAgICsJCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3lt
Ym9sKCZzeW1ib2xfeWVzKTsNCiAgICArCQkJaWYgKHN5bSA9PSAmc3ltYm9sX25vKQ0KICAgICsJ
CQkJcmV0dXJuIGV4cHJfY29weShlKTsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwlj
YXNlIEVfU1lNQk9MOg0KICAgICsJCXJldHVybiBleHByX2FsbG9jX2NvbXAodHlwZSwgZS0+bGVm
dC5zeW0sIHN5bSk7DQogICAgKwljYXNlIEVfTElTVDoNCiAgICArCWNhc2UgRV9SQU5HRToNCiAg
ICArCWNhc2UgRV9OT05FOg0KICAgICsJCS8qIHBhbmljICovOw0KICAgICsJfQ0KICAgICsJcmV0
dXJuIE5VTEw7DQogICAgK30NCiAgICArDQogICAgK2VudW0gc3RyaW5nX3ZhbHVlX2tpbmQgew0K
ICAgICsJa19zdHJpbmcsDQogICAgKwlrX3NpZ25lZCwNCiAgICArCWtfdW5zaWduZWQsDQogICAg
K307DQogICAgKw0KICAgICt1bmlvbiBzdHJpbmdfdmFsdWUgew0KICAgICsJdW5zaWduZWQgbG9u
ZyBsb25nIHU7DQogICAgKwlzaWduZWQgbG9uZyBsb25nIHM7DQogICAgK307DQogICAgKw0KICAg
ICtzdGF0aWMgZW51bSBzdHJpbmdfdmFsdWVfa2luZCBleHByX3BhcnNlX3N0cmluZyhjb25zdCBj
aGFyICpzdHIsDQogICAgKwkJCQkJCWVudW0gc3ltYm9sX3R5cGUgdHlwZSwNCiAgICArCQkJCQkJ
dW5pb24gc3RyaW5nX3ZhbHVlICp2YWwpDQogICAgK3sNCiAgICArCWNoYXIgKnRhaWw7DQogICAg
KwllbnVtIHN0cmluZ192YWx1ZV9raW5kIGtpbmQ7DQogICAgKw0KICAgICsJZXJybm8gPSAwOw0K
ICAgICsJc3dpdGNoICh0eXBlKSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCWNhc2Ug
U19UUklTVEFURToNCiAgICArCQl2YWwtPnMgPSAhc3RyY21wKHN0ciwgIm4iKSA/IDAgOg0KICAg
ICsJCQkgIXN0cmNtcChzdHIsICJtIikgPyAxIDoNCiAgICArCQkJICFzdHJjbXAoc3RyLCAieSIp
ID8gMiA6IC0xOw0KICAgICsJCXJldHVybiBrX3NpZ25lZDsNCiAgICArCWNhc2UgU19JTlQ6DQog
ICAgKwkJdmFsLT5zID0gc3RydG9sbChzdHIsICZ0YWlsLCAxMCk7DQogICAgKwkJa2luZCA9IGtf
c2lnbmVkOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX0hFWDoNCiAgICArCQl2YWwtPnUg
PSBzdHJ0b3VsbChzdHIsICZ0YWlsLCAxNik7DQogICAgKwkJa2luZCA9IGtfdW5zaWduZWQ7DQog
ICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCXZhbC0+cyA9IHN0cnRvbGwoc3Ry
LCAmdGFpbCwgMCk7DQogICAgKwkJa2luZCA9IGtfc2lnbmVkOw0KICAgICsJCWJyZWFrOw0KICAg
ICsJfQ0KICAgICsJcmV0dXJuICFlcnJubyAmJiAhKnRhaWwgJiYgdGFpbCA+IHN0ciAmJiBpc3hk
aWdpdCh0YWlsWy0xXSkNCiAgICArCSAgICAgICA/IGtpbmQgOiBrX3N0cmluZzsNCiAgICArfQ0K
ICAgICsNCiAgICArdHJpc3RhdGUgZXhwcl9jYWxjX3ZhbHVlKHN0cnVjdCBleHByICplKQ0KICAg
ICt7DQogICAgKwl0cmlzdGF0ZSB2YWwxLCB2YWwyOw0KICAgICsJY29uc3QgY2hhciAqc3RyMSwg
KnN0cjI7DQogICAgKwllbnVtIHN0cmluZ192YWx1ZV9raW5kIGsxID0ga19zdHJpbmcsIGsyID0g
a19zdHJpbmc7DQogICAgKwl1bmlvbiBzdHJpbmdfdmFsdWUgbHZhbCA9IHt9LCBydmFsID0ge307
DQogICAgKwlpbnQgcmVzOw0KICAgICsNCiAgICArCWlmICghZSkNCiAgICArCQlyZXR1cm4geWVz
Ow0KICAgICsNCiAgICArCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgICsJY2FzZSBFX1NZTUJPTDoN
CiAgICArCQlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5bSk7DQogICAgKwkJcmV0dXJuIGUtPmxl
ZnQuc3ltLT5jdXJyLnRyaTsNCiAgICArCWNhc2UgRV9BTkQ6DQogICAgKwkJdmFsMSA9IGV4cHJf
Y2FsY192YWx1ZShlLT5sZWZ0LmV4cHIpOw0KICAgICsJCXZhbDIgPSBleHByX2NhbGNfdmFsdWUo
ZS0+cmlnaHQuZXhwcik7DQogICAgKwkJcmV0dXJuIEVYUFJfQU5EKHZhbDEsIHZhbDIpOw0KICAg
ICsJY2FzZSBFX09SOg0KICAgICsJCXZhbDEgPSBleHByX2NhbGNfdmFsdWUoZS0+bGVmdC5leHBy
KTsNCiAgICArCQl2YWwyID0gZXhwcl9jYWxjX3ZhbHVlKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJ
CXJldHVybiBFWFBSX09SKHZhbDEsIHZhbDIpOw0KICAgICsJY2FzZSBFX05PVDoNCiAgICArCQl2
YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7DQogICAgKwkJcmV0dXJuIEVYUFJf
Tk9UKHZhbDEpOw0KICAgICsJY2FzZSBFX0VRVUFMOg0KICAgICsJY2FzZSBFX0dFUToNCiAgICAr
CWNhc2UgRV9HVEg6DQogICAgKwljYXNlIEVfTEVROg0KICAgICsJY2FzZSBFX0xUSDoNCiAgICAr
CWNhc2UgRV9VTkVRVUFMOg0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAgICArCQlw
cmludGYoImV4cHJfY2FsY192YWx1ZTogJWQ/XG4iLCBlLT50eXBlKTsNCiAgICArCQlyZXR1cm4g
bm87DQogICAgKwl9DQogICAgKw0KICAgICsJc3ltX2NhbGNfdmFsdWUoZS0+bGVmdC5zeW0pOw0K
ICAgICsJc3ltX2NhbGNfdmFsdWUoZS0+cmlnaHQuc3ltKTsNCiAgICArCXN0cjEgPSBzeW1fZ2V0
X3N0cmluZ192YWx1ZShlLT5sZWZ0LnN5bSk7DQogICAgKwlzdHIyID0gc3ltX2dldF9zdHJpbmdf
dmFsdWUoZS0+cmlnaHQuc3ltKTsNCiAgICArDQogICAgKwlpZiAoZS0+bGVmdC5zeW0tPnR5cGUg
IT0gU19TVFJJTkcgfHwgZS0+cmlnaHQuc3ltLT50eXBlICE9IFNfU1RSSU5HKSB7DQogICAgKwkJ
azEgPSBleHByX3BhcnNlX3N0cmluZyhzdHIxLCBlLT5sZWZ0LnN5bS0+dHlwZSwgJmx2YWwpOw0K
ICAgICsJCWsyID0gZXhwcl9wYXJzZV9zdHJpbmcoc3RyMiwgZS0+cmlnaHQuc3ltLT50eXBlLCAm
cnZhbCk7DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKGsxID09IGtfc3RyaW5nIHx8IGsyID09
IGtfc3RyaW5nKQ0KICAgICsJCXJlcyA9IHN0cmNtcChzdHIxLCBzdHIyKTsNCiAgICArCWVsc2Ug
aWYgKGsxID09IGtfdW5zaWduZWQgfHwgazIgPT0ga191bnNpZ25lZCkNCiAgICArCQlyZXMgPSAo
bHZhbC51ID4gcnZhbC51KSAtIChsdmFsLnUgPCBydmFsLnUpOw0KICAgICsJZWxzZSAvKiBpZiAo
azEgPT0ga19zaWduZWQgJiYgazIgPT0ga19zaWduZWQpICovDQogICAgKwkJcmVzID0gKGx2YWwu
cyA+IHJ2YWwucykgLSAobHZhbC5zIDwgcnZhbC5zKTsNCiAgICArDQogICAgKwlzd2l0Y2goZS0+
dHlwZSkgew0KICAgICsJY2FzZSBFX0VRVUFMOg0KICAgICsJCXJldHVybiByZXMgPyBubyA6IHll
czsNCiAgICArCWNhc2UgRV9HRVE6DQogICAgKwkJcmV0dXJuIHJlcyA+PSAwID8geWVzIDogbm87
DQogICAgKwljYXNlIEVfR1RIOg0KICAgICsJCXJldHVybiByZXMgPiAwID8geWVzIDogbm87DQog
ICAgKwljYXNlIEVfTEVROg0KICAgICsJCXJldHVybiByZXMgPD0gMCA/IHllcyA6IG5vOw0KICAg
ICsJY2FzZSBFX0xUSDoNCiAgICArCQlyZXR1cm4gcmVzIDwgMCA/IHllcyA6IG5vOw0KICAgICsJ
Y2FzZSBFX1VORVFVQUw6DQogICAgKwkJcmV0dXJuIHJlcyA/IHllcyA6IG5vOw0KICAgICsJZGVm
YXVsdDoNCiAgICArCQlwcmludGYoImV4cHJfY2FsY192YWx1ZTogcmVsYXRpb24gJWQ/XG4iLCBl
LT50eXBlKTsNCiAgICArCQlyZXR1cm4gbm87DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyBpbnQgZXhwcl9jb21wYXJlX3R5cGUoZW51bSBleHByX3R5cGUgdDEsIGVudW0gZXhw
cl90eXBlIHQyKQ0KICAgICt7DQogICAgKwlpZiAodDEgPT0gdDIpDQogICAgKwkJcmV0dXJuIDA7
DQogICAgKwlzd2l0Y2ggKHQxKSB7DQogICAgKwljYXNlIEVfTEVROg0KICAgICsJY2FzZSBFX0xU
SDoNCiAgICArCWNhc2UgRV9HRVE6DQogICAgKwljYXNlIEVfR1RIOg0KICAgICsJCWlmICh0MiA9
PSBFX0VRVUFMIHx8IHQyID09IEVfVU5FUVVBTCkNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwlj
YXNlIEVfRVFVQUw6DQogICAgKwljYXNlIEVfVU5FUVVBTDoNCiAgICArCQlpZiAodDIgPT0gRV9O
T1QpDQogICAgKwkJCXJldHVybiAxOw0KICAgICsJY2FzZSBFX05PVDoNCiAgICArCQlpZiAodDIg
PT0gRV9BTkQpDQogICAgKwkJCXJldHVybiAxOw0KICAgICsJY2FzZSBFX0FORDoNCiAgICArCQlp
ZiAodDIgPT0gRV9PUikNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwljYXNlIEVfT1I6DQogICAg
KwkJaWYgKHQyID09IEVfTElTVCkNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwljYXNlIEVfTElT
VDoNCiAgICArCQlpZiAodDIgPT0gMCkNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwlkZWZhdWx0
Og0KICAgICsJCXJldHVybiAtMTsNCiAgICArCX0NCiAgICArCXByaW50ZigiWyVkZ3QlZD9dIiwg
dDEsIHQyKTsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIGV4cHJf
cHJpbnQoc3RydWN0IGV4cHIgKmUsDQogICAgKwkJdm9pZCAoKmZuKSh2b2lkICosIHN0cnVjdCBz
eW1ib2wgKiwgY29uc3QgY2hhciAqKSwNCiAgICArCQl2b2lkICpkYXRhLCBpbnQgcHJldnRva2Vu
KQ0KICAgICt7DQogICAgKwlpZiAoIWUpIHsNCiAgICArCQlmbihkYXRhLCBOVUxMLCAieSIpOw0K
ICAgICsJCXJldHVybjsNCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoZXhwcl9jb21wYXJlX3R5
cGUocHJldnRva2VuLCBlLT50eXBlKSA+IDApDQogICAgKwkJZm4oZGF0YSwgTlVMTCwgIigiKTsN
CiAgICArCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgICsJY2FzZSBFX1NZTUJPTDoNCiAgICArCQlp
ZiAoZS0+bGVmdC5zeW0tPm5hbWUpDQogICAgKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5s
ZWZ0LnN5bS0+bmFtZSk7DQogICAgKwkJZWxzZQ0KICAgICsJCQlmbihkYXRhLCBOVUxMLCAiPGNo
b2ljZT4iKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9OT1Q6DQogICAgKwkJZm4oZGF0
YSwgTlVMTCwgIiEiKTsNCiAgICArCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEs
IEVfTk9UKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9FUVVBTDoNCiAgICArCQlpZiAo
ZS0+bGVmdC5zeW0tPm5hbWUpDQogICAgKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0
LnN5bS0+bmFtZSk7DQogICAgKwkJZWxzZQ0KICAgICsJCQlmbihkYXRhLCBOVUxMLCAiPGNob2lj
ZT4iKTsNCiAgICArCQlmbihkYXRhLCBOVUxMLCAiPSIpOw0KICAgICsJCWZuKGRhdGEsIGUtPnJp
Z2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2Ug
RV9MRVE6DQogICAgKwljYXNlIEVfTFRIOg0KICAgICsJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkN
CiAgICArCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsNCiAgICAr
CQllbHNlDQogICAgKwkJCWZuKGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOw0KICAgICsJCWZuKGRh
dGEsIE5VTEwsIGUtPnR5cGUgPT0gRV9MRVEgPyAiPD0iIDogIjwiKTsNCiAgICArCQlmbihkYXRh
LCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAgKwkJYnJlYWs7DQogICAg
KwljYXNlIEVfR0VROg0KICAgICsJY2FzZSBFX0dUSDoNCiAgICArCQlpZiAoZS0+bGVmdC5zeW0t
Pm5hbWUpDQogICAgKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7
DQogICAgKwkJZWxzZQ0KICAgICsJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsNCiAgICAr
CQlmbihkYXRhLCBOVUxMLCBlLT50eXBlID09IEVfR0VRID8gIj49IiA6ICI+Iik7DQogICAgKwkJ
Zm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOw0KICAgICsJCWJyZWFr
Ow0KICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwkJaWYgKGUtPmxlZnQuc3ltLT5uYW1lKQ0K
ICAgICsJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOw0KICAgICsJ
CWVsc2UNCiAgICArCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7DQogICAgKwkJZm4oZGF0
YSwgTlVMTCwgIiE9Iik7DQogICAgKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5z
eW0tPm5hbWUpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX09SOg0KICAgICsJCWV4cHJf
cHJpbnQoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgRV9PUik7DQogICAgKwkJZm4oZGF0YSwgTlVM
TCwgIiB8fCAiKTsNCiAgICArCQlleHByX3ByaW50KGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBF
X09SKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9BTkQ6DQogICAgKwkJZXhwcl9wcmlu
dChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX0FORCk7DQogICAgKwkJZm4oZGF0YSwgTlVMTCwg
IiAmJiAiKTsNCiAgICArCQlleHByX3ByaW50KGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBFX0FO
RCk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIEVfTElTVDoNCiAgICArCQlmbihkYXRhLCBl
LT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAgKwkJaWYgKGUtPmxlZnQuZXhw
cikgew0KICAgICsJCQlmbihkYXRhLCBOVUxMLCAiIF4gIik7DQogICAgKwkJCWV4cHJfcHJpbnQo
ZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgRV9MSVNUKTsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7
DQogICAgKwljYXNlIEVfUkFOR0U6DQogICAgKwkJZm4oZGF0YSwgTlVMTCwgIlsiKTsNCiAgICAr
CQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOw0KICAgICsJCWZuKGRh
dGEsIE5VTEwsICIgIik7DQogICAgKwkJZm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5z
eW0tPm5hbWUpOw0KICAgICsJCWZuKGRhdGEsIE5VTEwsICJdIik7DQogICAgKwkJYnJlYWs7DQog
ICAgKwlkZWZhdWx0Og0KICAgICsJICB7DQogICAgKwkJY2hhciBidWZbMzJdOw0KICAgICsJCXNw
cmludGYoYnVmLCAiPHVua25vd24gdHlwZSAlZD4iLCBlLT50eXBlKTsNCiAgICArCQlmbihkYXRh
LCBOVUxMLCBidWYpOw0KICAgICsJCWJyZWFrOw0KICAgICsJICB9DQogICAgKwl9DQogICAgKwlp
ZiAoZXhwcl9jb21wYXJlX3R5cGUocHJldnRva2VuLCBlLT50eXBlKSA+IDApDQogICAgKwkJZm4o
ZGF0YSwgTlVMTCwgIikiKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgZXhwcl9w
cmludF9maWxlX2hlbHBlcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNo
YXIgKnN0cikNCiAgICArew0KICAgICsJeGZ3cml0ZShzdHIsIHN0cmxlbihzdHIpLCAxLCBkYXRh
KTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBleHByX2ZwcmludChzdHJ1Y3QgZXhwciAqZSwg
RklMRSAqb3V0KQ0KICAgICt7DQogICAgKwlleHByX3ByaW50KGUsIGV4cHJfcHJpbnRfZmlsZV9o
ZWxwZXIsIG91dCwgRV9OT05FKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgZXhw
cl9wcmludF9nc3RyX2hlbHBlcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0
IGNoYXIgKnN0cikNCiAgICArew0KICAgICsJc3RydWN0IGdzdHIgKmdzID0gKHN0cnVjdCBnc3Ry
KilkYXRhOw0KICAgICsJY29uc3QgY2hhciAqc3ltX3N0ciA9IE5VTEw7DQogICAgKw0KICAgICsJ
aWYgKHN5bSkNCiAgICArCQlzeW1fc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsNCiAg
ICArDQogICAgKwlpZiAoZ3MtPm1heF93aWR0aCkgew0KICAgICsJCXVuc2lnbmVkIGV4dHJhX2xl
bmd0aCA9IHN0cmxlbihzdHIpOw0KICAgICsJCWNvbnN0IGNoYXIgKmxhc3RfY3IgPSBzdHJyY2hy
KGdzLT5zLCAnXG4nKTsNCiAgICArCQl1bnNpZ25lZCBsYXN0X2xpbmVfbGVuZ3RoOw0KICAgICsN
CiAgICArCQlpZiAoc3ltX3N0cikNCiAgICArCQkJZXh0cmFfbGVuZ3RoICs9IDQgKyBzdHJsZW4o
c3ltX3N0cik7DQogICAgKw0KICAgICsJCWlmICghbGFzdF9jcikNCiAgICArCQkJbGFzdF9jciA9
IGdzLT5zOw0KICAgICsNCiAgICArCQlsYXN0X2xpbmVfbGVuZ3RoID0gc3RybGVuKGdzLT5zKSAt
IChsYXN0X2NyIC0gZ3MtPnMpOw0KICAgICsNCiAgICArCQlpZiAoKGxhc3RfbGluZV9sZW5ndGgg
KyBleHRyYV9sZW5ndGgpID4gZ3MtPm1heF93aWR0aCkNCiAgICArCQkJc3RyX2FwcGVuZChncywg
IlxcXG4iKTsNCiAgICArCX0NCiAgICArDQogICAgKwlzdHJfYXBwZW5kKGdzLCBzdHIpOw0KICAg
ICsJaWYgKHN5bSAmJiBzeW0tPnR5cGUgIT0gU19VTktOT1dOKQ0KICAgICsJCXN0cl9wcmludGYo
Z3MsICIgWz0lc10iLCBzeW1fc3RyKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBleHByX2dz
dHJfcHJpbnQoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBnc3RyICpncykNCiAgICArew0KICAgICsJ
ZXhwcl9wcmludChlLCBleHByX3ByaW50X2dzdHJfaGVscGVyLCBncywgRV9OT05FKTsNCiAgICAr
fQ0KICAgICsNCiAgICArLyoNCiAgICArICogVHJhbnNmb3JtIHRoZSB0b3AgbGV2ZWwgInx8IiB0
b2tlbnMgaW50byBuZXdsaW5lcyBhbmQgcHJlcGVuZCBlYWNoDQogICAgKyAqIGxpbmUgd2l0aCBh
IG1pbnVzLiBUaGlzIG1ha2VzIGV4cHJlc3Npb25zIG11Y2ggZWFzaWVyIHRvIHJlYWQuDQogICAg
KyAqIFN1aXRhYmxlIGZvciByZXZlcnNlIGRlcGVuZGVuY3kgZXhwcmVzc2lvbnMuDQogICAgKyAq
Lw0KICAgICtzdGF0aWMgdm9pZCBleHByX3ByaW50X3JldmRlcChzdHJ1Y3QgZXhwciAqZSwNCiAg
ICArCQkJICAgICAgdm9pZCAoKmZuKSh2b2lkICosIHN0cnVjdCBzeW1ib2wgKiwgY29uc3QgY2hh
ciAqKSwNCiAgICArCQkJICAgICAgdm9pZCAqZGF0YSwgdHJpc3RhdGUgcHJfdHlwZSwgY29uc3Qg
Y2hhciAqKnRpdGxlKQ0KICAgICt7DQogICAgKwlpZiAoZS0+dHlwZSA9PSBFX09SKSB7DQogICAg
KwkJZXhwcl9wcmludF9yZXZkZXAoZS0+bGVmdC5leHByLCBmbiwgZGF0YSwgcHJfdHlwZSwgdGl0
bGUpOw0KICAgICsJCWV4cHJfcHJpbnRfcmV2ZGVwKGUtPnJpZ2h0LmV4cHIsIGZuLCBkYXRhLCBw
cl90eXBlLCB0aXRsZSk7DQogICAgKwl9IGVsc2UgaWYgKGV4cHJfY2FsY192YWx1ZShlKSA9PSBw
cl90eXBlKSB7DQogICAgKwkJaWYgKCp0aXRsZSkgew0KICAgICsJCQlmbihkYXRhLCBOVUxMLCAq
dGl0bGUpOw0KICAgICsJCQkqdGl0bGUgPSBOVUxMOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJ
Zm4oZGF0YSwgTlVMTCwgIiAgLSAiKTsNCiAgICArCQlleHByX3ByaW50KGUsIGZuLCBkYXRhLCBF
X05PTkUpOw0KICAgICsJCWZuKGRhdGEsIE5VTEwsICJcbiIpOw0KICAgICsJfQ0KICAgICt9DQog
ICAgKw0KICAgICt2b2lkIGV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3RydWN0IGV4cHIgKmUsIHN0
cnVjdCBnc3RyICpncywNCiAgICArCQkJICAgIHRyaXN0YXRlIHByX3R5cGUsIGNvbnN0IGNoYXIg
KnRpdGxlKQ0KICAgICt7DQogICAgKwlleHByX3ByaW50X3JldmRlcChlLCBleHByX3ByaW50X2dz
dHJfaGVscGVyLCBncywgcHJfdHlwZSwgJnRpdGxlKTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2V4cHIuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5o
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi44ZGRlNjViDQog
ICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oDQog
ICAgQEAgLTAsMCArMSwzMzEgQEANCiAgICArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjAgKi8NCiAgICArLyoNCiAgICArICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBl
bCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgICsgKi8NCiAgICArDQogICAgKyNpZm5kZWYg
RVhQUl9IDQogICAgKyNkZWZpbmUgRVhQUl9IDQogICAgKw0KICAgICsjaWZkZWYgX19jcGx1c3Bs
dXMNCiAgICArZXh0ZXJuICJDIiB7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2luY2x1ZGUg
PGFzc2VydC5oPg0KICAgICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgImxpc3Qu
aCINCiAgICArI2lmbmRlZiBfX2NwbHVzcGx1cw0KICAgICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0K
ICAgICsjZW5kaWYNCiAgICArDQogICAgK3N0cnVjdCBmaWxlIHsNCiAgICArCXN0cnVjdCBmaWxl
ICpuZXh0Ow0KICAgICsJc3RydWN0IGZpbGUgKnBhcmVudDsNCiAgICArCWNvbnN0IGNoYXIgKm5h
bWU7DQogICAgKwlpbnQgbGluZW5vOw0KICAgICt9Ow0KICAgICsNCiAgICArdHlwZWRlZiBlbnVt
IHRyaXN0YXRlIHsNCiAgICArCW5vLCBtb2QsIHllcw0KICAgICt9IHRyaXN0YXRlOw0KICAgICsN
CiAgICArZW51bSBleHByX3R5cGUgew0KICAgICsJRV9OT05FLCBFX09SLCBFX0FORCwgRV9OT1Qs
DQogICAgKwlFX0VRVUFMLCBFX1VORVFVQUwsIEVfTFRILCBFX0xFUSwgRV9HVEgsIEVfR0VRLA0K
ICAgICsJRV9MSVNULCBFX1NZTUJPTCwgRV9SQU5HRQ0KICAgICt9Ow0KICAgICsNCiAgICArdW5p
b24gZXhwcl9kYXRhIHsNCiAgICArCXN0cnVjdCBleHByICpleHByOw0KICAgICsJc3RydWN0IHN5
bWJvbCAqc3ltOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IGV4cHIgew0KICAgICsJZW51
bSBleHByX3R5cGUgdHlwZTsNCiAgICArCXVuaW9uIGV4cHJfZGF0YSBsZWZ0LCByaWdodDsNCiAg
ICArfTsNCiAgICArDQogICAgKyNkZWZpbmUgRVhQUl9PUihkZXAxLCBkZXAyKQkoKChkZXAxKT4o
ZGVwMikpPyhkZXAxKTooZGVwMikpDQogICAgKyNkZWZpbmUgRVhQUl9BTkQoZGVwMSwgZGVwMikJ
KCgoZGVwMSk8KGRlcDIpKT8oZGVwMSk6KGRlcDIpKQ0KICAgICsjZGVmaW5lIEVYUFJfTk9UKGRl
cCkJCSgyLShkZXApKQ0KICAgICsNCiAgICArI2RlZmluZSBleHByX2xpc3RfZm9yX2VhY2hfc3lt
KGwsIGUsIHMpIFwNCiAgICArCWZvciAoZSA9IChsKTsgZSAmJiAocyA9IGUtPnJpZ2h0LnN5bSk7
IGUgPSBlLT5sZWZ0LmV4cHIpDQogICAgKw0KICAgICtzdHJ1Y3QgZXhwcl92YWx1ZSB7DQogICAg
KwlzdHJ1Y3QgZXhwciAqZXhwcjsNCiAgICArCXRyaXN0YXRlIHRyaTsNCiAgICArfTsNCiAgICAr
DQogICAgK3N0cnVjdCBzeW1ib2xfdmFsdWUgew0KICAgICsJdm9pZCAqdmFsOw0KICAgICsJdHJp
c3RhdGUgdHJpOw0KICAgICt9Ow0KICAgICsNCiAgICArZW51bSBzeW1ib2xfdHlwZSB7DQogICAg
KwlTX1VOS05PV04sIFNfQk9PTEVBTiwgU19UUklTVEFURSwgU19JTlQsIFNfSEVYLCBTX1NUUklO
Rw0KICAgICt9Ow0KICAgICsNCiAgICArLyogZW51bSB2YWx1ZXMgYXJlIHVzZWQgYXMgaW5kZXgg
dG8gc3ltYm9sLmRlZltdICovDQogICAgK2VudW0gew0KICAgICsJU19ERUZfVVNFUiwJCS8qIG1h
aW4gdXNlciB2YWx1ZSAqLw0KICAgICsJU19ERUZfQVVUTywJCS8qIHZhbHVlcyByZWFkIGZyb20g
YXV0by5jb25mICovDQogICAgKwlTX0RFRl9ERUYzLAkJLyogUmVzZXJ2ZWQgZm9yIFVJIHVzYWdl
ICovDQogICAgKwlTX0RFRl9ERUY0LAkJLyogUmVzZXJ2ZWQgZm9yIFVJIHVzYWdlICovDQogICAg
KwlTX0RFRl9DT1VOVA0KICAgICt9Ow0KICAgICsNCiAgICArLyoNCiAgICArICogUmVwcmVzZW50
cyBhIGNvbmZpZ3VyYXRpb24gc3ltYm9sLg0KICAgICsgKg0KICAgICsgKiBDaG9pY2VzIGFyZSBy
ZXByZXNlbnRlZCBhcyBhIHNwZWNpYWwga2luZCBvZiBzeW1ib2wgYW5kIGhhdmUgdGhlDQogICAg
KyAqIFNZTUJPTF9DSE9JQ0UgYml0IHNldCBpbiAnZmxhZ3MnLg0KICAgICsgKi8NCiAgICArc3Ry
dWN0IHN5bWJvbCB7DQogICAgKwkvKiBUaGUgbmV4dCBzeW1ib2wgaW4gdGhlIHNhbWUgYnVja2V0
IGluIHRoZSBzeW1ib2wgaGFzaCB0YWJsZSAqLw0KICAgICsJc3RydWN0IHN5bWJvbCAqbmV4dDsN
CiAgICArDQogICAgKwkvKiBUaGUgbmFtZSBvZiB0aGUgc3ltYm9sLCBlLmcuICJGT08iIGZvciAn
Y29uZmlnIEZPTycgKi8NCiAgICArCWNoYXIgKm5hbWU7DQogICAgKw0KICAgICsJLyogU19CT09M
RUFOLCBTX1RSSVNUQVRFLCAuLi4gKi8NCiAgICArCWVudW0gc3ltYm9sX3R5cGUgdHlwZTsNCiAg
ICArDQogICAgKwkvKg0KICAgICsJICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgb2YgdGhlIHN5bWJv
bC4gVGhlIFNZTUJPTF9WQUxJRCBiaXQgaXMgc2V0IGluDQogICAgKwkgKiAnZmxhZ3MnIHdoZW4g
dGhpcyBpcyB1cCB0byBkYXRlLiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBtaWdodCBkaWZmZXINCiAg
ICArCSAqIGZyb20gdGhlIHVzZXIgdmFsdWUgc2V0IGluIGUuZy4gYSAuY29uZmlnIGZpbGUsIGR1
ZSB0byB2aXNpYmlsaXR5Lg0KICAgICsJICovDQogICAgKwlzdHJ1Y3Qgc3ltYm9sX3ZhbHVlIGN1
cnI7DQogICAgKw0KICAgICsJLyoNCiAgICArCSAqIFZhbHVlcyBmb3IgdGhlIHN5bWJvbCBwcm92
aWRlZCBmcm9tIG91dHNpZGUuIGRlZltTX0RFRl9VU0VSXSBob2xkcw0KICAgICsJICogdGhlIC5j
b25maWcgdmFsdWUuDQogICAgKwkgKi8NCiAgICArCXN0cnVjdCBzeW1ib2xfdmFsdWUgZGVmW1Nf
REVGX0NPVU5UXTsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogQW4gdXBwZXIgYm91bmQgb24g
dGhlIHRyaXN0YXRlIHZhbHVlIHRoZSB1c2VyIGNhbiBzZXQgZm9yIHRoZSBzeW1ib2wNCiAgICAr
CSAqIGlmIGl0IGlzIGEgYm9vbGVhbiBvciB0cmlzdGF0ZS4gQ2FsY3VsYXRlZCBmcm9tIHByb21w
dCBkZXBlbmRlbmNpZXMsDQogICAgKwkgKiB3aGljaCBhbHNvIGluaGVyaXQgZGVwZW5kZW5jaWVz
IGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9pY2VzLCBhbmQNCiAgICArCSAqIGlmcy4gSWYgJ24n
LCB0aGUgdXNlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuDQogICAgKwkgKg0KICAgICsJICogU3lt
Ym9scyBsYWNraW5nIHByb21wdHMgYWx3YXlzIGhhdmUgdmlzaWJpbGl0eSAnbicuDQogICAgKwkg
Ki8NCiAgICArCXRyaXN0YXRlIHZpc2libGU7DQogICAgKw0KICAgICsJLyogU1lNQk9MXyogZmxh
Z3MgKi8NCiAgICArCWludCBmbGFnczsNCiAgICArDQogICAgKwkvKiBMaXN0IG9mIHByb3BlcnRp
ZXMuIFNlZSBwcm9wX3R5cGUuICovDQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAg
Kw0KICAgICsJLyogRGVwZW5kZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9pY2VzLCBh
bmQgaWZzICovDQogICAgKwlzdHJ1Y3QgZXhwcl92YWx1ZSBkaXJfZGVwOw0KICAgICsNCiAgICAr
CS8qIFJldmVyc2UgZGVwZW5kZW5jaWVzIHRocm91Z2ggYmVpbmcgc2VsZWN0ZWQgYnkgb3RoZXIg
c3ltYm9scyAqLw0KICAgICsJc3RydWN0IGV4cHJfdmFsdWUgcmV2X2RlcDsNCiAgICArDQogICAg
KwkvKg0KICAgICsJICogIldlYWsiIHJldmVyc2UgZGVwZW5kZW5jaWVzIHRocm91Z2ggYmVpbmcg
aW1wbGllZCBieSBvdGhlciBzeW1ib2xzDQogICAgKwkgKi8NCiAgICArCXN0cnVjdCBleHByX3Zh
bHVlIGltcGxpZWQ7DQogICAgK307DQogICAgKw0KICAgICsjZGVmaW5lIGZvcl9hbGxfc3ltYm9s
cyhpLCBzeW0pIGZvciAoaSA9IDA7IGkgPCBTWU1CT0xfSEFTSFNJWkU7IGkrKykgZm9yIChzeW0g
PSBzeW1ib2xfaGFzaFtpXTsgc3ltOyBzeW0gPSBzeW0tPm5leHQpDQogICAgKw0KICAgICsjZGVm
aW5lIFNZTUJPTF9DT05TVCAgICAgIDB4MDAwMSAgLyogc3ltYm9sIGlzIGNvbnN0ICovDQogICAg
KyNkZWZpbmUgU1lNQk9MX0NIRUNLICAgICAgMHgwMDA4ICAvKiB1c2VkIGR1cmluZyBkZXBlbmRl
bmN5IGNoZWNraW5nICovDQogICAgKyNkZWZpbmUgU1lNQk9MX0NIT0lDRSAgICAgMHgwMDEwICAv
KiBzdGFydCBvZiBhIGNob2ljZSBibG9jayAobnVsbCBuYW1lKSAqLw0KICAgICsjZGVmaW5lIFNZ
TUJPTF9DSE9JQ0VWQUwgIDB4MDAyMCAgLyogdXNlZCBhcyBhIHZhbHVlIGluIGEgY2hvaWNlIGJs
b2NrICovDQogICAgKyNkZWZpbmUgU1lNQk9MX1ZBTElEICAgICAgMHgwMDgwICAvKiBzZXQgd2hl
biBzeW1ib2wuY3VyciBpcyBjYWxjdWxhdGVkICovDQogICAgKyNkZWZpbmUgU1lNQk9MX09QVElP
TkFMICAgMHgwMTAwICAvKiBjaG9pY2UgaXMgb3B0aW9uYWwgLSB2YWx1ZXMgY2FuIGJlICduJyAq
Lw0KICAgICsjZGVmaW5lIFNZTUJPTF9XUklURSAgICAgIDB4MDIwMCAgLyogd3JpdGUgc3ltYm9s
IHRvIGZpbGUgKEtDT05GSUdfQ09ORklHKSAqLw0KICAgICsjZGVmaW5lIFNZTUJPTF9DSEFOR0VE
ICAgIDB4MDQwMCAgLyogPyAqLw0KICAgICsjZGVmaW5lIFNZTUJPTF9OT19XUklURSAgIDB4MTAw
MCAgLyogU3ltYm9sIGZvciBpbnRlcm5hbCB1c2Ugb25seTsgaXQgd2lsbCBub3QgYmUgd3JpdHRl
biAqLw0KICAgICsjZGVmaW5lIFNZTUJPTF9DSEVDS0VEICAgIDB4MjAwMCAgLyogdXNlZCBkdXJp
bmcgZGVwZW5kZW5jeSBjaGVja2luZyAqLw0KICAgICsjZGVmaW5lIFNZTUJPTF9XQVJORUQgICAg
IDB4ODAwMCAgLyogd2FybmluZyBoYXMgYmVlbiBpc3N1ZWQgKi8NCiAgICArDQogICAgKy8qIFNl
dCB3aGVuIHN5bWJvbC5kZWZbXSBpcyB1c2VkICovDQogICAgKyNkZWZpbmUgU1lNQk9MX0RFRiAg
ICAgICAgMHgxMDAwMCAgLyogRmlyc3QgYml0IG9mIFNZTUJPTF9ERUYgKi8NCiAgICArI2RlZmlu
ZSBTWU1CT0xfREVGX1VTRVIgICAweDEwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGX1VTRVJdIGlz
IHZhbGlkICovDQogICAgKyNkZWZpbmUgU1lNQk9MX0RFRl9BVVRPICAgMHgyMDAwMCAgLyogc3lt
Ym9sLmRlZltTX0RFRl9BVVRPXSBpcyB2YWxpZCAqLw0KICAgICsjZGVmaW5lIFNZTUJPTF9ERUYz
ICAgICAgIDB4NDAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfM10gaXMgdmFsaWQgKi8NCiAgICAr
I2RlZmluZSBTWU1CT0xfREVGNCAgICAgICAweDgwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGXzRd
IGlzIHZhbGlkICovDQogICAgKw0KICAgICsvKiBjaG9pY2UgdmFsdWVzIG5lZWQgdG8gYmUgc2V0
IGJlZm9yZSBjYWxjdWxhdGluZyB0aGlzIHN5bWJvbCB2YWx1ZSAqLw0KICAgICsjZGVmaW5lIFNZ
TUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTICAweDEwMDAwMA0KICAgICsNCiAgICArLyogU2V0
IHN5bWJvbCB0byB5IGlmIGFsbG5vY29uZmlnOyB1c2VkIGZvciBzeW1ib2xzIHRoYXQgaGlkZSBv
dGhlcnMgKi8NCiAgICArI2RlZmluZSBTWU1CT0xfQUxMTk9DT05GSUdfWSAweDIwMDAwMA0KICAg
ICsNCiAgICArI2RlZmluZSBTWU1CT0xfTUFYTEVOR1RICTI1Ng0KICAgICsjZGVmaW5lIFNZTUJP
TF9IQVNIU0laRQkJOTk3Mw0KICAgICsNCiAgICArLyogQSBwcm9wZXJ0eSByZXByZXNlbnQgdGhl
IGNvbmZpZyBvcHRpb25zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQNCiAgICArICogd2l0aCBhIGNv
bmZpZyAic3ltYm9sIi4NCiAgICArICogU2FtcGxlOg0KICAgICsgKiBjb25maWcgRk9PDQogICAg
KyAqICAgICAgICAgZGVmYXVsdCB5DQogICAgKyAqICAgICAgICAgcHJvbXB0ICJmb28gcHJvbXB0
Ig0KICAgICsgKiAgICAgICAgIHNlbGVjdCBCQVINCiAgICArICogY29uZmlnIEJBWg0KICAgICsg
KiAgICAgICAgIGludCAiQkFaIFZhbHVlIg0KICAgICsgKiAgICAgICAgIHJhbmdlIDEuLjI1NQ0K
ICAgICsgKg0KICAgICsgKiBQbGVhc2UsIGFsc28gY2hlY2sgcGFyc2VyLnk6cHJpbnRfc3ltYm9s
KCkgd2hlbiBtb2RpZnlpbmcgdGhlDQogICAgKyAqIGxpc3Qgb2YgcHJvcGVydHkgdHlwZXMhDQog
ICAgKyAqLw0KICAgICtlbnVtIHByb3BfdHlwZSB7DQogICAgKwlQX1VOS05PV04sDQogICAgKwlQ
X1BST01QVCwgICAvKiBwcm9tcHQgImZvbyBwcm9tcHQiIG9yICJCQVogVmFsdWUiICovDQogICAg
KwlQX0NPTU1FTlQsICAvKiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1lbnQgKi8NCiAgICAr
CVBfTUVOVSwgICAgIC8qIHByb21wdCBhc3NvY2lhdGVkIHdpdGggYSBtZW51IG9yIG1lbnVjb25m
aWcgc3ltYm9sICovDQogICAgKwlQX0RFRkFVTFQsICAvKiBkZWZhdWx0IHkgKi8NCiAgICArCVBf
Q0hPSUNFLCAgIC8qIGNob2ljZSB2YWx1ZSAqLw0KICAgICsJUF9TRUxFQ1QsICAgLyogc2VsZWN0
IEJBUiAqLw0KICAgICsJUF9JTVBMWSwgICAgLyogaW1wbHkgQkFSICovDQogICAgKwlQX1JBTkdF
LCAgICAvKiByYW5nZSA3Li4xMDAgKGZvciBhIHN5bWJvbCkgKi8NCiAgICArCVBfU1lNQk9MLCAg
IC8qIHdoZXJlIGEgc3ltYm9sIGlzIGRlZmluZWQgKi8NCiAgICArfTsNCiAgICArDQogICAgK3N0
cnVjdCBwcm9wZXJ0eSB7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKm5leHQ7ICAgICAvKiBuZXh0
IHByb3BlcnR5IC0gbnVsbCBpZiBsYXN0ICovDQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07ICAg
ICAgICAvKiB0aGUgc3ltYm9sIGZvciB3aGljaCB0aGUgcHJvcGVydHkgaXMgYXNzb2NpYXRlZCAq
Lw0KICAgICsJZW51bSBwcm9wX3R5cGUgdHlwZTsgICAgICAgLyogdHlwZSBvZiBwcm9wZXJ0eSAq
Lw0KICAgICsJY29uc3QgY2hhciAqdGV4dDsgICAgICAgICAgLyogdGhlIHByb21wdCB2YWx1ZSAt
IFBfUFJPTVBULCBQX01FTlUsIFBfQ09NTUVOVCAqLw0KICAgICsJc3RydWN0IGV4cHJfdmFsdWUg
dmlzaWJsZTsNCiAgICArCXN0cnVjdCBleHByICpleHByOyAgICAgICAgIC8qIHRoZSBvcHRpb25h
bCBjb25kaXRpb25hbCBwYXJ0IG9mIHRoZSBwcm9wZXJ0eSAqLw0KICAgICsJc3RydWN0IG1lbnUg
Km1lbnU7ICAgICAgICAgLyogdGhlIG1lbnUgdGhlIHByb3BlcnR5IGFyZSBhc3NvY2lhdGVkIHdp
dGgNCiAgICArCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbGlkIGZvcjogUF9TRUxF
Q1QsIFBfUkFOR0UsIFBfQ0hPSUNFLA0KICAgICsJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICogUF9QUk9NUFQsIFBfREVGQVVMVCwgUF9NRU5VLCBQX0NPTU1FTlQgKi8NCiAgICArCXN0cnVj
dCBmaWxlICpmaWxlOyAgICAgICAgIC8qIHdoYXQgZmlsZSB3YXMgdGhpcyBwcm9wZXJ0eSBkZWZp
bmVkICovDQogICAgKwlpbnQgbGluZW5vOyAgICAgICAgICAgICAgICAvKiB3aGF0IGxpbmVubyB3
YXMgdGhpcyBwcm9wZXJ0eSBkZWZpbmVkICovDQogICAgK307DQogICAgKw0KICAgICsjZGVmaW5l
IGZvcl9hbGxfcHJvcGVydGllcyhzeW0sIHN0LCB0b2spIFwNCiAgICArCWZvciAoc3QgPSBzeW0t
PnByb3A7IHN0OyBzdCA9IHN0LT5uZXh0KSBcDQogICAgKwkJaWYgKHN0LT50eXBlID09ICh0b2sp
KQ0KICAgICsjZGVmaW5lIGZvcl9hbGxfZGVmYXVsdHMoc3ltLCBzdCkgZm9yX2FsbF9wcm9wZXJ0
aWVzKHN5bSwgc3QsIFBfREVGQVVMVCkNCiAgICArI2RlZmluZSBmb3JfYWxsX2Nob2ljZXMoc3lt
LCBzdCkgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIFBfQ0hPSUNFKQ0KICAgICsjZGVmaW5l
IGZvcl9hbGxfcHJvbXB0cyhzeW0sIHN0KSBcDQogICAgKwlmb3IgKHN0ID0gc3ltLT5wcm9wOyBz
dDsgc3QgPSBzdC0+bmV4dCkgXA0KICAgICsJCWlmIChzdC0+dGV4dCkNCiAgICArDQogICAgKy8q
DQogICAgKyAqIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBtZW51IHRyZWUsIGFzIHNlZW4gaW4g
ZS5nLiBtZW51Y29uZmlnICh0aG91Z2ggdXNlZA0KICAgICsgKiBmb3IgYWxsIGZyb250IGVuZHMp
LiBFYWNoIHN5bWJvbCwgbWVudSwgZXRjLiBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZpbGVzDQog
ICAgKyAqIGdldHMgYSBub2RlLiBBIHN5bWJvbCBkZWZpbmVkIGluIG11bHRpcGxlIGxvY2F0aW9u
cyBnZXRzIG9uZSBub2RlIGF0IGVhY2gNCiAgICArICogbG9jYXRpb24uDQogICAgKyAqLw0KICAg
ICtzdHJ1Y3QgbWVudSB7DQogICAgKwkvKiBUaGUgbmV4dCBtZW51IG5vZGUgYXQgdGhlIHNhbWUg
bGV2ZWwgKi8NCiAgICArCXN0cnVjdCBtZW51ICpuZXh0Ow0KICAgICsNCiAgICArCS8qIFRoZSBw
YXJlbnQgbWVudSBub2RlLCBjb3JyZXNwb25kaW5nIHRvIGUuZy4gYSBtZW51IG9yIGNob2ljZSAq
Lw0KICAgICsJc3RydWN0IG1lbnUgKnBhcmVudDsNCiAgICArDQogICAgKwkvKiBUaGUgZmlyc3Qg
Y2hpbGQgbWVudSBub2RlLCBmb3IgZS5nLiBtZW51cyBhbmQgY2hvaWNlcyAqLw0KICAgICsJc3Ry
dWN0IG1lbnUgKmxpc3Q7DQogICAgKw0KICAgICsJLyoNCiAgICArCSAqIFRoZSBzeW1ib2wgYXNz
b2NpYXRlZCB3aXRoIHRoZSBtZW51IG5vZGUuIENob2ljZXMgYXJlIGltcGxlbWVudGVkIGFzDQog
ICAgKwkgKiBhIHNwZWNpYWwga2luZCBvZiBzeW1ib2wuIE5VTEwgZm9yIG1lbnVzLCBjb21tZW50
cywgYW5kIGlmcy4NCiAgICArCSAqLw0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsN
CiAgICArCS8qDQogICAgKwkgKiBUaGUgcHJvbXB0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZS4g
VGhpcyBob2xkcyB0aGUgcHJvbXB0IGZvciBhDQogICAgKwkgKiBzeW1ib2wgYXMgd2VsbCBhcyB0
aGUgdGV4dCBmb3IgYSBtZW51IG9yIGNvbW1lbnQsIGFsb25nIHdpdGggdGhlDQogICAgKwkgKiB0
eXBlIChQX1BST01QVCwgUF9NRU5VLCBldGMuKQ0KICAgICsJICovDQogICAgKwlzdHJ1Y3QgcHJv
cGVydHkgKnByb21wdDsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogJ3Zpc2libGUgaWYnIGRl
cGVuZGVuY2llcy4gSWYgbW9yZSB0aGFuIG9uZSBpcyBnaXZlbiwgdGhleSB3aWxsIGJlDQogICAg
KwkgKiBBTkRlZCB0b2dldGhlci4NCiAgICArCSAqLw0KICAgICsJc3RydWN0IGV4cHIgKnZpc2li
aWxpdHk7DQogICAgKw0KICAgICsJLyoNCiAgICArCSAqIE9yZGluYXJ5IGRlcGVuZGVuY2llcyBm
cm9tIGUuZy4gJ2RlcGVuZHMgb24nIGFuZCAnaWYnLCBBTkRlZA0KICAgICsJICogdG9nZXRoZXIN
CiAgICArCSAqLw0KICAgICsJc3RydWN0IGV4cHIgKmRlcDsNCiAgICArDQogICAgKwkvKiBNRU5V
XyogZmxhZ3MgKi8NCiAgICArCXVuc2lnbmVkIGludCBmbGFnczsNCiAgICArDQogICAgKwkvKiBB
bnkgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZSAqLw0KICAgICsJY2hhciAqaGVs
cDsNCiAgICArDQogICAgKwkvKiBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIG1lbnUgbm9kZSBhcHBl
YXJzIGluIHRoZSBLY29uZmlnIGZpbGVzICovDQogICAgKwlzdHJ1Y3QgZmlsZSAqZmlsZTsNCiAg
ICArCWludCBsaW5lbm87DQogICAgKw0KICAgICsJLyogRm9yIHVzZSBieSBmcm9udCBlbmRzIHRo
YXQgbmVlZCB0byBzdG9yZSBhdXhpbGlhcnkgZGF0YSAqLw0KICAgICsJdm9pZCAqZGF0YTsNCiAg
ICArfTsNCiAgICArDQogICAgKy8qDQogICAgKyAqIFNldCBvbiBhIG1lbnUgbm9kZSB3aGVuIHRo
ZSBjb3JyZXNwb25kaW5nIHN5bWJvbCBjaGFuZ2VzIHN0YXRlIGluIHNvbWUgd2F5Lg0KICAgICsg
KiBDYW4gYmUgY2hlY2tlZCBieSBmcm9udCBlbmRzLg0KICAgICsgKi8NCiAgICArI2RlZmluZSBN
RU5VX0NIQU5HRUQJCTB4MDAwMQ0KICAgICsNCiAgICArI2RlZmluZSBNRU5VX1JPT1QJCTB4MDAw
Mg0KICAgICsNCiAgICArc3RydWN0IGp1bXBfa2V5IHsNCiAgICArCXN0cnVjdCBsaXN0X2hlYWQg
ZW50cmllczsNCiAgICArCXNpemVfdCBvZmZzZXQ7DQogICAgKwlzdHJ1Y3QgbWVudSAqdGFyZ2V0
Ow0KICAgICsJaW50IGluZGV4Ow0KICAgICt9Ow0KICAgICsNCiAgICArI2RlZmluZSBKVU1QX05C
CQkJOQ0KICAgICsNCiAgICArZXh0ZXJuIHN0cnVjdCBmaWxlICpmaWxlX2xpc3Q7DQogICAgK2V4
dGVybiBzdHJ1Y3QgZmlsZSAqY3VycmVudF9maWxlOw0KICAgICtzdHJ1Y3QgZmlsZSAqbG9va3Vw
X2ZpbGUoY29uc3QgY2hhciAqbmFtZSk7DQogICAgKw0KICAgICtleHRlcm4gc3RydWN0IHN5bWJv
bCBzeW1ib2xfeWVzLCBzeW1ib2xfbm8sIHN5bWJvbF9tb2Q7DQogICAgK2V4dGVybiBzdHJ1Y3Qg
c3ltYm9sICptb2R1bGVzX3N5bTsNCiAgICArZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKnN5bV9kZWZj
b25maWdfbGlzdDsNCiAgICArZXh0ZXJuIGludCBjZGVidWc7DQogICAgK3N0cnVjdCBleHByICpl
eHByX2FsbG9jX3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgICtzdHJ1Y3QgZXhwciAq
ZXhwcl9hbGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmNlKTsNCiAg
ICArc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVj
dCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsNCiAgICArc3RydWN0IGV4cHIgKmV4cHJfYWxs
b2NfY29tcChlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzMSwgc3RydWN0IHN5
bWJvbCAqczIpOw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4cHIg
KmUxLCBzdHJ1Y3QgZXhwciAqZTIpOw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19vcihz
dHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7DQogICAgK3N0cnVjdCBleHByICpleHBy
X2NvcHkoY29uc3Qgc3RydWN0IGV4cHIgKm9yZyk7DQogICAgK3ZvaWQgZXhwcl9mcmVlKHN0cnVj
dCBleHByICplKTsNCiAgICArdm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhwciAqKmVw
MSwgc3RydWN0IGV4cHIgKiplcDIpOw0KICAgICt0cmlzdGF0ZSBleHByX2NhbGNfdmFsdWUoc3Ry
dWN0IGV4cHIgKmUpOw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19ib29sKHN0cnVjdCBl
eHByICplKTsNCiAgICArc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX2R1cHMoc3RydWN0IGV4
cHIgKmUpOw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl90cmFuc2Zvcm0oc3RydWN0IGV4cHIgKmUp
Ow0KICAgICtpbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0
IHN5bWJvbCAqc3ltKTsNCiAgICArYm9vbCBleHByX2RlcGVuZHNfc3ltYm9sKHN0cnVjdCBleHBy
ICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgK3N0cnVjdCBleHByICpleHByX3RyYW5z
X2NvbXBhcmUoc3RydWN0IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1i
b2wgKnN5bSk7DQogICAgKw0KICAgICt2b2lkIGV4cHJfZnByaW50KHN0cnVjdCBleHByICplLCBG
SUxFICpvdXQpOw0KICAgICtzdHJ1Y3QgZ3N0cjsgLyogZm9yd2FyZCAqLw0KICAgICt2b2lkIGV4
cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKTsNCiAgICArdm9p
ZCBleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAqZ3Ms
DQogICAgKwkJCSAgICB0cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBjaGFyICp0aXRsZSk7DQogICAg
Kw0KICAgICtzdGF0aWMgaW5saW5lIGludCBleHByX2lzX3llcyhzdHJ1Y3QgZXhwciAqZSkNCiAg
ICArew0KICAgICsJcmV0dXJuICFlIHx8IChlLT50eXBlID09IEVfU1lNQk9MICYmIGUtPmxlZnQu
c3ltID09ICZzeW1ib2xfeWVzKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGlubGluZSBp
bnQgZXhwcl9pc19ubyhzdHJ1Y3QgZXhwciAqZSkNCiAgICArew0KICAgICsJcmV0dXJuIGUgJiYg
KGUtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubyk7DQogICAg
K30NCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KICAgICt9DQogICAgKyNlbmRpZg0K
ICAgICsNCiAgICArI2VuZGlmIC8qIEVYUFJfSCAqLw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcubmV3L2djb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2Zn
LnNoDQogICAgbmV3IGZpbGUgbW9kZSAxMDA3NTUNCiAgICBpbmRleCAwMDAwMDAwLi40ODBlY2Q4
DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYt
Y2ZnLnNoDQogICAgQEAgLTAsMCArMSwzMCBAQA0KICAgICsjIS9iaW4vc2gNCiAgICArIyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArUEtHPSJndGsrLTIuMCBn
bW9kdWxlLTIuMCBsaWJnbGFkZS0yLjAiDQogICAgKw0KICAgICtpZiBbIC16ICIkKGNvbW1hbmQg
LXYgcGtnLWNvbmZpZykiIF07IHRoZW4NCiAgICArCWVjaG8gPiYyICIqIg0KICAgICsJZWNobyA+
JjIgIiogJ21ha2UgZ2NvbmZpZycgcmVxdWlyZXMgJ3BrZy1jb25maWcnLiBQbGVhc2UgaW5zdGFs
bCBpdC4iDQogICAgKwllY2hvID4mMiAiKiINCiAgICArCWV4aXQgMQ0KICAgICtmaQ0KICAgICsN
CiAgICAraWYgISBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0c7IHRoZW4NCiAgICArCWVjaG8gPiYy
ICIqIg0KICAgICsJZWNobyA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIEdUSysgaW5zdGFsbGF0
aW9uLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQiDQogICAgKwllY2hvID4mMiAiKiB0aGUgR1RLKyAy
LjAgZGV2ZWxvcG1lbnQgcGFja2FnZSBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkLiINCiAgICArCWVj
aG8gPiYyICIqIFlvdSBuZWVkICRQS0ciDQogICAgKwllY2hvID4mMiAiKiINCiAgICArCWV4aXQg
MQ0KICAgICtmaQ0KICAgICsNCiAgICAraWYgISBwa2ctY29uZmlnIC0tYXRsZWFzdC12ZXJzaW9u
PTIuMC4wIGd0aystMi4wOyB0aGVuDQogICAgKwllY2hvID4mMiAiKiINCiAgICArCWVjaG8gPiYy
ICIqIEdUSysgaXMgcHJlc2VudCBidXQgdmVyc2lvbiA+PSAyLjAuMCBpcyByZXF1aXJlZC4iDQog
ICAgKwllY2hvID4mMiAiKiINCiAgICArCWV4aXQgMQ0KICAgICtmaQ0KICAgICsNCiAgICArZWNo
byBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBLRylcIg0KICAgICtlY2hvIGxpYnM9
XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9nY29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jDQogICAgbmV3
IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5lMzZiMzQyDQogICAgLS0tIC9k
ZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuYw0KICAgIEBAIC0w
LDAgKzEsMTUxNiBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K
ICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBSb21haW4gTGlldmluIDxy
b21zQHRpbHAuaW5mbz4NCiAgICArICovDQogICAgKw0KICAgICsjaWZkZWYgSEFWRV9DT05GSUdf
SA0KICAgICsjICBpbmNsdWRlIDxjb25maWcuaD4NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsj
aW5jbHVkZSA8c3RkbGliLmg+DQogICAgKyNpbmNsdWRlICJsa2MuaCINCiAgICArI2luY2x1ZGUg
ImltYWdlcy5oIg0KICAgICsNCiAgICArI2luY2x1ZGUgPGdsYWRlL2dsYWRlLmg+DQogICAgKyNp
bmNsdWRlIDxndGsvZ3RrLmg+DQogICAgKyNpbmNsdWRlIDxnbGliLmg+DQogICAgKyNpbmNsdWRl
IDxnZGsvZ2Rra2V5c3ltcy5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAg
KyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICsjaW5j
bHVkZSA8dGltZS5oPg0KICAgICsNCiAgICArLy8jZGVmaW5lIERFQlVHDQogICAgKw0KICAgICtl
bnVtIHsNCiAgICArCVNJTkdMRV9WSUVXLCBTUExJVF9WSUVXLCBGVUxMX1ZJRVcNCiAgICArfTsN
CiAgICArDQogICAgK2VudW0gew0KICAgICsJT1BUX05PUk1BTCwgT1BUX0FMTCwgT1BUX1BST01Q
VA0KICAgICt9Ow0KICAgICsNCiAgICArc3RhdGljIGdpbnQgdmlld19tb2RlID0gRlVMTF9WSUVX
Ow0KICAgICtzdGF0aWMgZ2Jvb2xlYW4gc2hvd19uYW1lID0gVFJVRTsNCiAgICArc3RhdGljIGdi
b29sZWFuIHNob3dfcmFuZ2UgPSBUUlVFOw0KICAgICtzdGF0aWMgZ2Jvb2xlYW4gc2hvd192YWx1
ZSA9IFRSVUU7DQogICAgK3N0YXRpYyBnYm9vbGVhbiByZXNpemVhYmxlID0gRkFMU0U7DQogICAg
K3N0YXRpYyBpbnQgb3B0X21vZGUgPSBPUFRfTk9STUFMOw0KICAgICsNCiAgICArR3RrV2lkZ2V0
ICptYWluX3duZCA9IE5VTEw7DQogICAgK0d0a1dpZGdldCAqdHJlZTFfdyA9IE5VTEw7CS8vIGxl
ZnQgIGZyYW1lDQogICAgK0d0a1dpZGdldCAqdHJlZTJfdyA9IE5VTEw7CS8vIHJpZ2h0IGZyYW1l
DQogICAgK0d0a1dpZGdldCAqdGV4dF93ID0gTlVMTDsNCiAgICArR3RrV2lkZ2V0ICpocGFuZWQg
PSBOVUxMOw0KICAgICtHdGtXaWRnZXQgKnZwYW5lZCA9IE5VTEw7DQogICAgK0d0a1dpZGdldCAq
YmFja19idG4gPSBOVUxMOw0KICAgICtHdGtXaWRnZXQgKnNhdmVfYnRuID0gTlVMTDsNCiAgICAr
R3RrV2lkZ2V0ICpzYXZlX21lbnVfaXRlbSA9IE5VTEw7DQogICAgKw0KICAgICtHdGtUZXh0VGFn
ICp0YWcxLCAqdGFnMjsNCiAgICArR2RrQ29sb3IgY29sb3I7DQogICAgKw0KICAgICtHdGtUcmVl
U3RvcmUgKnRyZWUxLCAqdHJlZTIsICp0cmVlOw0KICAgICtHdGtUcmVlTW9kZWwgKm1vZGVsMSwg
Km1vZGVsMjsNCiAgICArc3RhdGljIEd0a1RyZWVJdGVyICpwYXJlbnRzWzI1Nl07DQogICAgK3N0
YXRpYyBnaW50IGluZGVudDsNCiAgICArDQogICAgK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVu
dDsgLy8gY3VycmVudCBub2RlIGZvciBTSU5HTEUgdmlldw0KICAgICtzdGF0aWMgc3RydWN0IG1l
bnUgKmJyb3dzZWQ7IC8vIGJyb3dzZWQgbm9kZSBmb3IgU1BMSVQgdmlldw0KICAgICsNCiAgICAr
ZW51bSB7DQogICAgKwlDT0xfT1BUSU9OLCBDT0xfTkFNRSwgQ09MX05PLCBDT0xfTU9ELCBDT0xf
WUVTLCBDT0xfVkFMVUUsDQogICAgKwlDT0xfTUVOVSwgQ09MX0NPTE9SLCBDT0xfRURJVCwgQ09M
X1BJWEJVRiwNCiAgICArCUNPTF9QSVhWSVMsIENPTF9CVE5WSVMsIENPTF9CVE5BQ1QsIENPTF9C
VE5JTkMsIENPTF9CVE5SQUQsDQogICAgKwlDT0xfTlVNQkVSDQogICAgK307DQogICAgKw0KICAg
ICtzdGF0aWMgdm9pZCBkaXNwbGF5X2xpc3Qodm9pZCk7DQogICAgK3N0YXRpYyB2b2lkIGRpc3Bs
YXlfdHJlZShzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJl
ZV9wYXJ0KHZvaWQpOw0KICAgICtzdGF0aWMgdm9pZCB1cGRhdGVfdHJlZShzdHJ1Y3QgbWVudSAq
c3JjLCBHdGtUcmVlSXRlciAqIGRzdCk7DQogICAgK3N0YXRpYyB2b2lkIHNldF9ub2RlKEd0a1Ry
ZWVJdGVyICogbm9kZSwgc3RydWN0IG1lbnUgKm1lbnUsIGdjaGFyICoqIHJvdyk7DQogICAgK3N0
YXRpYyBnY2hhciAqKmZpbGxfcm93KHN0cnVjdCBtZW51ICptZW51KTsNCiAgICArc3RhdGljIHZv
aWQgY29uZl9jaGFuZ2VkKHZvaWQpOw0KICAgICsNCiAgICArLyogSGVscGluZy9EZWJ1Z2dpbmcg
RnVuY3Rpb25zICovDQogICAgKyNpZmRlZiBERUJVRw0KICAgICtzdGF0aWMgY29uc3QgY2hhciAq
ZGJnX3N5bV9mbGFncyhpbnQgdmFsKQ0KICAgICt7DQogICAgKwlzdGF0aWMgY2hhciBidWZbMjU2
XTsNCiAgICArDQogICAgKwliemVybyhidWYsIDI1Nik7DQogICAgKw0KICAgICsJaWYgKHZhbCAm
IFNZTUJPTF9DT05TVCkNCiAgICArCQlzdHJjYXQoYnVmLCAiY29uc3QvIik7DQogICAgKwlpZiAo
dmFsICYgU1lNQk9MX0NIRUNLKQ0KICAgICsJCXN0cmNhdChidWYsICJjaGVjay8iKTsNCiAgICAr
CWlmICh2YWwgJiBTWU1CT0xfQ0hPSUNFKQ0KICAgICsJCXN0cmNhdChidWYsICJjaG9pY2UvIik7
DQogICAgKwlpZiAodmFsICYgU1lNQk9MX0NIT0lDRVZBTCkNCiAgICArCQlzdHJjYXQoYnVmLCAi
Y2hvaWNldmFsLyIpOw0KICAgICsJaWYgKHZhbCAmIFNZTUJPTF9WQUxJRCkNCiAgICArCQlzdHJj
YXQoYnVmLCAidmFsaWQvIik7DQogICAgKwlpZiAodmFsICYgU1lNQk9MX09QVElPTkFMKQ0KICAg
ICsJCXN0cmNhdChidWYsICJvcHRpb25hbC8iKTsNCiAgICArCWlmICh2YWwgJiBTWU1CT0xfV1JJ
VEUpDQogICAgKwkJc3RyY2F0KGJ1ZiwgIndyaXRlLyIpOw0KICAgICsJaWYgKHZhbCAmIFNZTUJP
TF9DSEFOR0VEKQ0KICAgICsJCXN0cmNhdChidWYsICJjaGFuZ2VkLyIpOw0KICAgICsJaWYgKHZh
bCAmIFNZTUJPTF9OT19XUklURSkNCiAgICArCQlzdHJjYXQoYnVmLCAibm9fd3JpdGUvIik7DQog
ICAgKw0KICAgICsJYnVmW3N0cmxlbihidWYpIC0gMV0gPSAnXDAnOw0KICAgICsNCiAgICArCXJl
dHVybiBidWY7DQogICAgK30NCiAgICArI2VuZGlmDQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBy
ZXBsYWNlX2J1dHRvbl9pY29uKEdsYWRlWE1MICp4bWwsIEdka0RyYXdhYmxlICp3aW5kb3csDQog
ICAgKwkJCQlHdGtTdHlsZSAqc3R5bGUsIGdjaGFyICpidG5fbmFtZSwgZ2NoYXIgKip4cG0pDQog
ICAgK3sNCiAgICArCUdka1BpeG1hcCAqcGl4bWFwOw0KICAgICsJR2RrQml0bWFwICptYXNrOw0K
ICAgICsJR3RrVG9vbEJ1dHRvbiAqYnV0dG9uOw0KICAgICsJR3RrV2lkZ2V0ICppbWFnZTsNCiAg
ICArDQogICAgKwlwaXhtYXAgPSBnZGtfcGl4bWFwX2NyZWF0ZV9mcm9tX3hwbV9kKHdpbmRvdywg
Jm1hc2ssDQogICAgKwkJCQkJICAgICAgJnN0eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFMXSwNCiAg
ICArCQkJCQkgICAgICB4cG0pOw0KICAgICsNCiAgICArCWJ1dHRvbiA9IEdUS19UT09MX0JVVFRP
TihnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsIGJ0bl9uYW1lKSk7DQogICAgKwlpbWFnZSA9IGd0
a19pbWFnZV9uZXdfZnJvbV9waXhtYXAocGl4bWFwLCBtYXNrKTsNCiAgICArCWd0a193aWRnZXRf
c2hvdyhpbWFnZSk7DQogICAgKwlndGtfdG9vbF9idXR0b25fc2V0X2ljb25fd2lkZ2V0KGJ1dHRv
biwgaW1hZ2UpOw0KICAgICt9DQogICAgKw0KICAgICsvKiBNYWluIFdpbmRvdyBJbml0aWFsaXph
dGlvbiAqLw0KICAgICtzdGF0aWMgdm9pZCBpbml0X21haW5fd2luZG93KGNvbnN0IGdjaGFyICpn
bGFkZV9maWxlKQ0KICAgICt7DQogICAgKwlHbGFkZVhNTCAqeG1sOw0KICAgICsJR3RrV2lkZ2V0
ICp3aWRnZXQ7DQogICAgKwlHdGtUZXh0QnVmZmVyICp0eHRidWY7DQogICAgKwlHdGtTdHlsZSAq
c3R5bGU7DQogICAgKw0KICAgICsJeG1sID0gZ2xhZGVfeG1sX25ldyhnbGFkZV9maWxlLCAid2lu
ZG93MSIsIE5VTEwpOw0KICAgICsJaWYgKCF4bWwpDQogICAgKwkJZ19lcnJvcigiR1VJIGxvYWRp
bmcgZmFpbGVkICFcbiIpOw0KICAgICsJZ2xhZGVfeG1sX3NpZ25hbF9hdXRvY29ubmVjdCh4bWwp
Ow0KICAgICsNCiAgICArCW1haW5fd25kID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAid2lu
ZG93MSIpOw0KICAgICsJaHBhbmVkID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiaHBhbmVk
MSIpOw0KICAgICsJdnBhbmVkID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAidnBhbmVkMSIp
Ow0KICAgICsJdHJlZTFfdyA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRyZWV2aWV3MSIp
Ow0KICAgICsJdHJlZTJfdyA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRyZWV2aWV3MiIp
Ow0KICAgICsJdGV4dF93ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAidGV4dHZpZXczIik7
DQogICAgKw0KICAgICsJYmFja19idG4gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJidXR0
b24xIik7DQogICAgKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsN
CiAgICArDQogICAgKwl3aWRnZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzaG93X25h
bWUxIik7DQogICAgKwlndGtfY2hlY2tfbWVudV9pdGVtX3NldF9hY3RpdmUoKEd0a0NoZWNrTWVu
dUl0ZW0gKikgd2lkZ2V0LA0KICAgICsJCQkJICAgICAgIHNob3dfbmFtZSk7DQogICAgKw0KICAg
ICsJd2lkZ2V0ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAic2hvd19yYW5nZTEiKTsNCiAg
ICArCWd0a19jaGVja19tZW51X2l0ZW1fc2V0X2FjdGl2ZSgoR3RrQ2hlY2tNZW51SXRlbSAqKSB3
aWRnZXQsDQogICAgKwkJCQkgICAgICAgc2hvd19yYW5nZSk7DQogICAgKw0KICAgICsJd2lkZ2V0
ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAic2hvd19kYXRhMSIpOw0KICAgICsJZ3RrX2No
ZWNrX21lbnVfaXRlbV9zZXRfYWN0aXZlKChHdGtDaGVja01lbnVJdGVtICopIHdpZGdldCwNCiAg
ICArCQkJCSAgICAgICBzaG93X3ZhbHVlKTsNCiAgICArDQogICAgKwlzYXZlX2J0biA9IGdsYWRl
X3htbF9nZXRfd2lkZ2V0KHhtbCwgImJ1dHRvbjMiKTsNCiAgICArCXNhdmVfbWVudV9pdGVtID0g
Z2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAic2F2ZTEiKTsNCiAgICArCWNvbmZfc2V0X2NoYW5n
ZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsNCiAgICArDQogICAgKwlzdHlsZSA9IGd0a193aWRn
ZXRfZ2V0X3N0eWxlKG1haW5fd25kKTsNCiAgICArCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lk
Z2V0KHhtbCwgInRvb2xiYXIxIik7DQogICAgKw0KICAgICsJcmVwbGFjZV9idXR0b25faWNvbih4
bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLA0KICAgICsJCQkgICAgImJ1dHRvbjQiLCAoZ2No
YXIgKiopIHhwbV9zaW5nbGVfdmlldyk7DQogICAgKwlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwg
bWFpbl93bmQtPndpbmRvdywgc3R5bGUsDQogICAgKwkJCSAgICAiYnV0dG9uNSIsIChnY2hhciAq
KikgeHBtX3NwbGl0X3ZpZXcpOw0KICAgICsJcmVwbGFjZV9idXR0b25faWNvbih4bWwsIG1haW5f
d25kLT53aW5kb3csIHN0eWxlLA0KICAgICsJCQkgICAgImJ1dHRvbjYiLCAoZ2NoYXIgKiopIHhw
bV90cmVlX3ZpZXcpOw0KICAgICsNCiAgICArCXR4dGJ1ZiA9IGd0a190ZXh0X3ZpZXdfZ2V0X2J1
ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykpOw0KICAgICsJdGFnMSA9IGd0a190ZXh0X2J1ZmZl
cl9jcmVhdGVfdGFnKHR4dGJ1ZiwgIm15dGFnMSIsDQogICAgKwkJCQkJICAiZm9yZWdyb3VuZCIs
ICJyZWQiLA0KICAgICsJCQkJCSAgIndlaWdodCIsIFBBTkdPX1dFSUdIVF9CT0xELA0KICAgICsJ
CQkJCSAgTlVMTCk7DQogICAgKwl0YWcyID0gZ3RrX3RleHRfYnVmZmVyX2NyZWF0ZV90YWcodHh0
YnVmLCAibXl0YWcyIiwNCiAgICArCQkJCQkgIC8qInN0eWxlIiwgUEFOR09fU1RZTEVfT0JMSVFV
RSwgKi8NCiAgICArCQkJCQkgIE5VTEwpOw0KICAgICsNCiAgICArCWd0a193aW5kb3dfc2V0X3Rp
dGxlKEdUS19XSU5ET1cobWFpbl93bmQpLCByb290bWVudS5wcm9tcHQtPnRleHQpOw0KICAgICsN
CiAgICArCWd0a193aWRnZXRfc2hvdyhtYWluX3duZCk7DQogICAgK30NCiAgICArDQogICAgK3N0
YXRpYyB2b2lkIGluaXRfdHJlZV9tb2RlbCh2b2lkKQ0KICAgICt7DQogICAgKwlnaW50IGk7DQog
ICAgKw0KICAgICsJdHJlZSA9IHRyZWUyID0gZ3RrX3RyZWVfc3RvcmVfbmV3KENPTF9OVU1CRVIs
DQogICAgKwkJCQkJICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLA0KICAgICsJCQkJCSAg
R19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywNCiAgICArCQkJCQkgIEdfVFlQRV9TVFJJTkcs
IEdfVFlQRV9TVFJJTkcsDQogICAgKwkJCQkJICBHX1RZUEVfUE9JTlRFUiwgR0RLX1RZUEVfQ09M
T1IsDQogICAgKwkJCQkJICBHX1RZUEVfQk9PTEVBTiwgR0RLX1RZUEVfUElYQlVGLA0KICAgICsJ
CQkJCSAgR19UWVBFX0JPT0xFQU4sIEdfVFlQRV9CT09MRUFOLA0KICAgICsJCQkJCSAgR19UWVBF
X0JPT0xFQU4sIEdfVFlQRV9CT09MRUFOLA0KICAgICsJCQkJCSAgR19UWVBFX0JPT0xFQU4pOw0K
ICAgICsJbW9kZWwyID0gR1RLX1RSRUVfTU9ERUwodHJlZTIpOw0KICAgICsNCiAgICArCWZvciAo
cGFyZW50c1swXSA9IE5VTEwsIGkgPSAxOyBpIDwgMjU2OyBpKyspDQogICAgKwkJcGFyZW50c1tp
XSA9IChHdGtUcmVlSXRlciAqKSBnX21hbGxvYyhzaXplb2YoR3RrVHJlZUl0ZXIpKTsNCiAgICAr
DQogICAgKwl0cmVlMSA9IGd0a190cmVlX3N0b3JlX25ldyhDT0xfTlVNQkVSLA0KICAgICsJCQkJ
ICAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywNCiAgICArCQkJCSAgIEdfVFlQRV9TVFJJ
TkcsIEdfVFlQRV9TVFJJTkcsDQogICAgKwkJCQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RS
SU5HLA0KICAgICsJCQkJICAgR19UWVBFX1BPSU5URVIsIEdES19UWVBFX0NPTE9SLA0KICAgICsJ
CQkJICAgR19UWVBFX0JPT0xFQU4sIEdES19UWVBFX1BJWEJVRiwNCiAgICArCQkJCSAgIEdfVFlQ
RV9CT09MRUFOLCBHX1RZUEVfQk9PTEVBTiwNCiAgICArCQkJCSAgIEdfVFlQRV9CT09MRUFOLCBH
X1RZUEVfQk9PTEVBTiwNCiAgICArCQkJCSAgIEdfVFlQRV9CT09MRUFOKTsNCiAgICArCW1vZGVs
MSA9IEdUS19UUkVFX01PREVMKHRyZWUxKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZv
aWQgaW5pdF9sZWZ0X3RyZWUodm9pZCkNCiAgICArew0KICAgICsJR3RrVHJlZVZpZXcgKnZpZXcg
PSBHVEtfVFJFRV9WSUVXKHRyZWUxX3cpOw0KICAgICsJR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJl
cjsNCiAgICArCUd0a1RyZWVTZWxlY3Rpb24gKnNlbDsNCiAgICArCUd0a1RyZWVWaWV3Q29sdW1u
ICpjb2x1bW47DQogICAgKw0KICAgICsJZ3RrX3RyZWVfdmlld19zZXRfbW9kZWwodmlldywgbW9k
ZWwxKTsNCiAgICArCWd0a190cmVlX3ZpZXdfc2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVF
KTsNCiAgICArCWd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQodmlldywgVFJVRSk7DQogICAg
Kw0KICAgICsJY29sdW1uID0gZ3RrX3RyZWVfdmlld19jb2x1bW5fbmV3KCk7DQogICAgKwlndGtf
dHJlZV92aWV3X2FwcGVuZF9jb2x1bW4odmlldywgY29sdW1uKTsNCiAgICArCWd0a190cmVlX3Zp
ZXdfY29sdW1uX3NldF90aXRsZShjb2x1bW4sICJPcHRpb25zIik7DQogICAgKw0KICAgICsJcmVu
ZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVfbmV3KCk7DQogICAgKwlndGtfdHJlZV92
aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAg
KwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9h
dHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJICAgIHJl
bmRlcmVyLA0KICAgICsJCQkJCSAgICAiYWN0aXZlIiwgQ09MX0JUTkFDVCwNCiAgICArCQkJCQkg
ICAgImluY29uc2lzdGVudCIsIENPTF9CVE5JTkMsDQogICAgKwkJCQkJICAgICJ2aXNpYmxlIiwg
Q09MX0JUTlZJUywNCiAgICArCQkJCQkgICAgInJhZGlvIiwgQ09MX0JUTlJBRCwgTlVMTCk7DQog
ICAgKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgKwlndGtf
dHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiks
DQogICAgKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1u
X3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJ
ICAgIHJlbmRlcmVyLA0KICAgICsJCQkJCSAgICAidGV4dCIsIENPTF9PUFRJT04sDQogICAgKwkJ
CQkJICAgICJmb3JlZ3JvdW5kLWdkayIsDQogICAgKwkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7
DQogICAgKw0KICAgICsJc2VsID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHZpZXcpOw0K
ICAgICsJZ3RrX3RyZWVfc2VsZWN0aW9uX3NldF9tb2RlKHNlbCwgR1RLX1NFTEVDVElPTl9TSU5H
TEUpOw0KICAgICsJZ3RrX3dpZGdldF9yZWFsaXplKHRyZWUxX3cpOw0KICAgICt9DQogICAgKw0K
ICAgICtzdGF0aWMgdm9pZCByZW5kZXJlcl9lZGl0ZWQoR3RrQ2VsbFJlbmRlcmVyVGV4dCAqIGNl
bGwsDQogICAgKwkJCSAgICBjb25zdCBnY2hhciAqIHBhdGhfc3RyaW5nLA0KICAgICsJCQkgICAg
Y29uc3QgZ2NoYXIgKiBuZXdfdGV4dCwgZ3BvaW50ZXIgdXNlcl9kYXRhKTsNCiAgICArDQogICAg
K3N0YXRpYyB2b2lkIGluaXRfcmlnaHRfdHJlZSh2b2lkKQ0KICAgICt7DQogICAgKwlHdGtUcmVl
VmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVcodHJlZTJfdyk7DQogICAgKwlHdGtDZWxsUmVuZGVy
ZXIgKnJlbmRlcmVyOw0KICAgICsJR3RrVHJlZVNlbGVjdGlvbiAqc2VsOw0KICAgICsJR3RrVHJl
ZVZpZXdDb2x1bW4gKmNvbHVtbjsNCiAgICArCWdpbnQgaTsNCiAgICArDQogICAgKwlndGtfdHJl
ZV92aWV3X3NldF9tb2RlbCh2aWV3LCBtb2RlbDIpOw0KICAgICsJZ3RrX3RyZWVfdmlld19zZXRf
aGVhZGVyc192aXNpYmxlKHZpZXcsIFRSVUUpOw0KICAgICsJZ3RrX3RyZWVfdmlld19zZXRfcnVs
ZXNfaGludCh2aWV3LCBUUlVFKTsNCiAgICArDQogICAgKwljb2x1bW4gPSBndGtfdHJlZV92aWV3
X2NvbHVtbl9uZXcoKTsNCiAgICArCWd0a190cmVlX3ZpZXdfYXBwZW5kX2NvbHVtbih2aWV3LCBj
b2x1bW4pOw0KICAgICsJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3RpdGxlKGNvbHVtbiwgIk9w
dGlvbnMiKTsNCiAgICArDQogICAgKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3BpeGJ1
Zl9uZXcoKTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVf
VklFV19DT0xVTU4oY29sdW1uKSwNCiAgICArCQkJCQlyZW5kZXJlciwgRkFMU0UpOw0KICAgICsJ
Z3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0dHJpYnV0ZXMoR1RLX1RSRUVfVklFV19DT0xVTU4o
Y29sdW1uKSwNCiAgICArCQkJCQkgICAgcmVuZGVyZXIsDQogICAgKwkJCQkJICAgICJwaXhidWYi
LCBDT0xfUElYQlVGLA0KICAgICsJCQkJCSAgICAidmlzaWJsZSIsIENPTF9QSVhWSVMsIE5VTEwp
Ow0KICAgICsJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90b2dnbGVfbmV3KCk7DQogICAg
KwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNv
bHVtbiksDQogICAgKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsNCiAgICArCWd0a190cmVlX3ZpZXdf
Y29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAg
KwkJCQkJICAgIHJlbmRlcmVyLA0KICAgICsJCQkJCSAgICAiYWN0aXZlIiwgQ09MX0JUTkFDVCwN
CiAgICArCQkJCQkgICAgImluY29uc2lzdGVudCIsIENPTF9CVE5JTkMsDQogICAgKwkJCQkJICAg
ICJ2aXNpYmxlIiwgQ09MX0JUTlZJUywNCiAgICArCQkJCQkgICAgInJhZGlvIiwgQ09MX0JUTlJB
RCwgTlVMTCk7DQogICAgKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7
DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09M
VU1OKGNvbHVtbiksDQogICAgKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsNCiAgICArCWd0a190cmVl
X3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiks
DQogICAgKwkJCQkJICAgIHJlbmRlcmVyLA0KICAgICsJCQkJCSAgICAidGV4dCIsIENPTF9PUFRJ
T04sDQogICAgKwkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsDQogICAgKwkJCQkJICAgIENPTF9D
T0xPUiwgTlVMTCk7DQogICAgKw0KICAgICsJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90
ZXh0X25ldygpOw0KICAgICsJZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmli
dXRlcyh2aWV3LCAtMSwNCiAgICArCQkJCQkJICAgICJOYW1lIiwgcmVuZGVyZXIsDQogICAgKwkJ
CQkJCSAgICAidGV4dCIsIENPTF9OQU1FLA0KICAgICsJCQkJCQkgICAgImZvcmVncm91bmQtZ2Rr
IiwNCiAgICArCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgKwlyZW5kZXJlciA9IGd0
a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgKwlndGtfdHJlZV92aWV3X2luc2VydF9j
b2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLA0KICAgICsJCQkJCQkgICAgIk4iLCByZW5k
ZXJlciwNCiAgICArCQkJCQkJICAgICJ0ZXh0IiwgQ09MX05PLA0KICAgICsJCQkJCQkgICAgImZv
cmVncm91bmQtZ2RrIiwNCiAgICArCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgKwly
ZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgKwlndGtfdHJlZV92
aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLA0KICAgICsJCQkJCQkg
ICAgIk0iLCByZW5kZXJlciwNCiAgICArCQkJCQkJICAgICJ0ZXh0IiwgQ09MX01PRCwNCiAgICAr
CQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsDQogICAgKwkJCQkJCSAgICBDT0xfQ09MT1IsIE5V
TEwpOw0KICAgICsJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOw0KICAg
ICsJZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwN
CiAgICArCQkJCQkJICAgICJZIiwgcmVuZGVyZXIsDQogICAgKwkJCQkJCSAgICAidGV4dCIsIENP
TF9ZRVMsDQogICAgKwkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLA0KICAgICsJCQkJCQkgICAg
Q09MX0NPTE9SLCBOVUxMKTsNCiAgICArCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4
dF9uZXcoKTsNCiAgICArCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0
ZXModmlldywgLTEsDQogICAgKwkJCQkJCSAgICAiVmFsdWUiLCByZW5kZXJlciwNCiAgICArCQkJ
CQkJICAgICJ0ZXh0IiwgQ09MX1ZBTFVFLA0KICAgICsJCQkJCQkgICAgImVkaXRhYmxlIiwNCiAg
ICArCQkJCQkJICAgIENPTF9FRElULA0KICAgICsJCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwN
CiAgICArCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgKwlnX3NpZ25hbF9jb25uZWN0
KEdfT0JKRUNUKHJlbmRlcmVyKSwgImVkaXRlZCIsDQogICAgKwkJCSBHX0NBTExCQUNLKHJlbmRl
cmVyX2VkaXRlZCksIE5VTEwpOw0KICAgICsNCiAgICArCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdf
Z2V0X2NvbHVtbih2aWV3LCBDT0xfTkFNRSk7DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVtbl9z
ZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfbmFtZSk7DQogICAgKwljb2x1bW4gPSBndGtfdHJlZV92
aWV3X2dldF9jb2x1bW4odmlldywgQ09MX05PKTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1u
X3NldF92aXNpYmxlKGNvbHVtbiwgc2hvd19yYW5nZSk7DQogICAgKwljb2x1bW4gPSBndGtfdHJl
ZV92aWV3X2dldF9jb2x1bW4odmlldywgQ09MX01PRCk7DQogICAgKwlndGtfdHJlZV92aWV3X2Nv
bHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfcmFuZ2UpOw0KICAgICsJY29sdW1uID0gZ3Rr
X3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9ZRVMpOw0KICAgICsJZ3RrX3RyZWVfdmll
d19jb2x1bW5fc2V0X3Zpc2libGUoY29sdW1uLCBzaG93X3JhbmdlKTsNCiAgICArCWNvbHVtbiA9
IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xfVkFMVUUpOw0KICAgICsJZ3RrX3Ry
ZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sdW1uLCBzaG93X3ZhbHVlKTsNCiAgICArDQog
ICAgKwlpZiAocmVzaXplYWJsZSkgew0KICAgICsJCWZvciAoaSA9IDA7IGkgPCBDT0xfVkFMVUU7
IGkrKykgew0KICAgICsJCQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywg
aSk7DQogICAgKwkJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9yZXNpemFibGUoY29sdW1uLCBU
UlVFKTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJc2VsID0gZ3RrX3RyZWVfdmll
d19nZXRfc2VsZWN0aW9uKHZpZXcpOw0KICAgICsJZ3RrX3RyZWVfc2VsZWN0aW9uX3NldF9tb2Rl
KHNlbCwgR1RLX1NFTEVDVElPTl9TSU5HTEUpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICAr
LyogVXRpbGl0eSBGdW5jdGlvbnMgKi8NCiAgICArDQogICAgKw0KICAgICtzdGF0aWMgdm9pZCB0
ZXh0X2luc2VydF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlHdGtUZXh0
QnVmZmVyICpidWZmZXI7DQogICAgKwlHdGtUZXh0SXRlciBzdGFydCwgZW5kOw0KICAgICsJY29u
c3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgICsJc3RydWN0IGdz
dHIgaGVscCA9IHN0cl9uZXcoKTsNCiAgICArDQogICAgKwltZW51X2dldF9leHRfaGVscChtZW51
LCAmaGVscCk7DQogICAgKw0KICAgICsJYnVmZmVyID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVy
KEdUS19URVhUX1ZJRVcodGV4dF93KSk7DQogICAgKwlndGtfdGV4dF9idWZmZXJfZ2V0X2JvdW5k
cyhidWZmZXIsICZzdGFydCwgJmVuZCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJfZGVsZXRlKGJ1
ZmZlciwgJnN0YXJ0LCAmZW5kKTsNCiAgICArCWd0a190ZXh0X3ZpZXdfc2V0X2xlZnRfbWFyZ2lu
KEdUS19URVhUX1ZJRVcodGV4dF93KSwgMTUpOw0KICAgICsNCiAgICArCWd0a190ZXh0X2J1ZmZl
cl9nZXRfZW5kX2l0ZXIoYnVmZmVyLCAmZW5kKTsNCiAgICArCWd0a190ZXh0X2J1ZmZlcl9pbnNl
cnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwgcHJvbXB0LCAtMSwgdGFnMSwNCiAgICArCQkJCQkg
TlVMTCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X2F0X2N1cnNvcihidWZmZXIsICJc
blxuIiwgMik7DQogICAgKwlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVu
ZCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQs
IHN0cl9nZXQoJmhlbHApLCAtMSwgdGFnMiwNCiAgICArCQkJCQkgTlVMTCk7DQogICAgKwlzdHJf
ZnJlZSgmaGVscCk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICtzdGF0aWMgdm9pZCB0ZXh0
X2luc2VydF9tc2coY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpDQogICAg
K3sNCiAgICArCUd0a1RleHRCdWZmZXIgKmJ1ZmZlcjsNCiAgICArCUd0a1RleHRJdGVyIHN0YXJ0
LCBlbmQ7DQogICAgKwljb25zdCBjaGFyICptc2cgPSBtZXNzYWdlOw0KICAgICsNCiAgICArCWJ1
ZmZlciA9IGd0a190ZXh0X3ZpZXdfZ2V0X2J1ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykpOw0K
ICAgICsJZ3RrX3RleHRfYnVmZmVyX2dldF9ib3VuZHMoYnVmZmVyLCAmc3RhcnQsICZlbmQpOw0K
ICAgICsJZ3RrX3RleHRfYnVmZmVyX2RlbGV0ZShidWZmZXIsICZzdGFydCwgJmVuZCk7DQogICAg
KwlndGtfdGV4dF92aWV3X3NldF9sZWZ0X21hcmdpbihHVEtfVEVYVF9WSUVXKHRleHRfdyksIDE1
KTsNCiAgICArDQogICAgKwlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVu
ZCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQs
IHRpdGxlLCAtMSwgdGFnMSwNCiAgICArCQkJCQkgTlVMTCk7DQogICAgKwlndGtfdGV4dF9idWZm
ZXJfaW5zZXJ0X2F0X2N1cnNvcihidWZmZXIsICJcblxuIiwgMik7DQogICAgKwlndGtfdGV4dF9i
dWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJf
aW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQsIG1zZywgLTEsIHRhZzIsDQogICAgKwkJCQkJ
IE5VTEwpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyogTWFpbiBXaW5kb3dzIENhbGxi
YWNrcyAqLw0KICAgICsNCiAgICArdm9pZCBvbl9zYXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICog
bWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSk7DQogICAgK2dib29sZWFuIG9uX3dpbmRvdzFf
ZGVsZXRlX2V2ZW50KEd0a1dpZGdldCAqIHdpZGdldCwgR2RrRXZlbnQgKiBldmVudCwNCiAgICAr
CQkJCSBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCUd0a1dpZGdldCAqZGlhbG9n
LCAqbGFiZWw7DQogICAgKwlnaW50IHJlc3VsdDsNCiAgICArDQogICAgKwlpZiAoIWNvbmZfZ2V0
X2NoYW5nZWQoKSkNCiAgICArCQlyZXR1cm4gRkFMU0U7DQogICAgKw0KICAgICsJZGlhbG9nID0g
Z3RrX2RpYWxvZ19uZXdfd2l0aF9idXR0b25zKCJXYXJuaW5nICEiLA0KICAgICsJCQkJCSAgICAg
R1RLX1dJTkRPVyhtYWluX3duZCksDQogICAgKwkJCQkJICAgICAoR3RrRGlhbG9nRmxhZ3MpDQog
ICAgKwkJCQkJICAgICAoR1RLX0RJQUxPR19NT0RBTCB8DQogICAgKwkJCQkJICAgICAgR1RLX0RJ
QUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKSwNCiAgICArCQkJCQkgICAgIEdUS19TVE9DS19PSywN
CiAgICArCQkJCQkgICAgIEdUS19SRVNQT05TRV9ZRVMsDQogICAgKwkJCQkJICAgICBHVEtfU1RP
Q0tfTk8sDQogICAgKwkJCQkJICAgICBHVEtfUkVTUE9OU0VfTk8sDQogICAgKwkJCQkJICAgICBH
VEtfU1RPQ0tfQ0FOQ0VMLA0KICAgICsJCQkJCSAgICAgR1RLX1JFU1BPTlNFX0NBTkNFTCwgTlVM
TCk7DQogICAgKwlndGtfZGlhbG9nX3NldF9kZWZhdWx0X3Jlc3BvbnNlKEdUS19ESUFMT0coZGlh
bG9nKSwNCiAgICArCQkJCQlHVEtfUkVTUE9OU0VfQ0FOQ0VMKTsNCiAgICArDQogICAgKwlsYWJl
bCA9IGd0a19sYWJlbF9uZXcoIlxuU2F2ZSBjb25maWd1cmF0aW9uID9cbiIpOw0KICAgICsJZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihHVEtfRElBTE9HKGRpYWxvZyktPnZib3gpLCBs
YWJlbCk7DQogICAgKwlndGtfd2lkZ2V0X3Nob3cobGFiZWwpOw0KICAgICsNCiAgICArCXJlc3Vs
dCA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7DQogICAgKwlzd2l0Y2ggKHJl
c3VsdCkgew0KICAgICsJY2FzZSBHVEtfUkVTUE9OU0VfWUVTOg0KICAgICsJCW9uX3NhdmVfYWN0
aXZhdGUoTlVMTCwgTlVMTCk7DQogICAgKwkJcmV0dXJuIEZBTFNFOw0KICAgICsJY2FzZSBHVEtf
UkVTUE9OU0VfTk86DQogICAgKwkJcmV0dXJuIEZBTFNFOw0KICAgICsJY2FzZSBHVEtfUkVTUE9O
U0VfQ0FOQ0VMOg0KICAgICsJY2FzZSBHVEtfUkVTUE9OU0VfREVMRVRFX0VWRU5UOg0KICAgICsJ
ZGVmYXVsdDoNCiAgICArCQlndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsNCiAgICArCQlyZXR1
cm4gVFJVRTsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gRkFMU0U7DQogICAgK30NCiAg
ICArDQogICAgKw0KICAgICt2b2lkIG9uX3dpbmRvdzFfZGVzdHJveShHdGtPYmplY3QgKiBvYmpl
Y3QsIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJZ3RrX21haW5fcXVpdCgpOw0K
ICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZA0KICAgICtvbl93aW5kb3cxX3NpemVfcmVx
dWVzdChHdGtXaWRnZXQgKiB3aWRnZXQsDQogICAgKwkJCUd0a1JlcXVpc2l0aW9uICogcmVxdWlz
aXRpb24sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJc3RhdGljIGdpbnQgb2xk
X2g7DQogICAgKwlnaW50IHcsIGg7DQogICAgKw0KICAgICsJaWYgKHdpZGdldC0+d2luZG93ID09
IE5VTEwpDQogICAgKwkJZ3RrX3dpbmRvd19nZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cobWFp
bl93bmQpLCAmdywgJmgpOw0KICAgICsJZWxzZQ0KICAgICsJCWdka193aW5kb3dfZ2V0X3NpemUo
d2lkZ2V0LT53aW5kb3csICZ3LCAmaCk7DQogICAgKw0KICAgICsJaWYgKGggPT0gb2xkX2gpDQog
ICAgKwkJcmV0dXJuOw0KICAgICsJb2xkX2ggPSBoOw0KICAgICsNCiAgICArCWd0a19wYW5lZF9z
ZXRfcG9zaXRpb24oR1RLX1BBTkVEKHZwYW5lZCksIDIgKiBoIC8gMyk7DQogICAgK30NCiAgICAr
DQogICAgKw0KICAgICsvKiBNZW51ICYgVG9vbGJhciBDYWxsYmFja3MgKi8NCiAgICArDQogICAg
Kw0KICAgICtzdGF0aWMgdm9pZA0KICAgICtsb2FkX2ZpbGVuYW1lKEd0a0ZpbGVTZWxlY3Rpb24g
KiBmaWxlX3NlbGVjdG9yLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCWNvbnN0
IGdjaGFyICpmbjsNCiAgICArDQogICAgKwlmbiA9IGd0a19maWxlX3NlbGVjdGlvbl9nZXRfZmls
ZW5hbWUoR1RLX0ZJTEVfU0VMRUNUSU9ODQogICAgKwkJCQkJICAgICAodXNlcl9kYXRhKSk7DQog
ICAgKw0KICAgICsJaWYgKGNvbmZfcmVhZChmbikpDQogICAgKwkJdGV4dF9pbnNlcnRfbXNnKCJF
cnJvciIsICJVbmFibGUgdG8gbG9hZCBjb25maWd1cmF0aW9uICEiKTsNCiAgICArCWVsc2UNCiAg
ICArCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBv
bl9sb2FkMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2Rh
dGEpDQogICAgK3sNCiAgICArCUd0a1dpZGdldCAqZnM7DQogICAgKw0KICAgICsJZnMgPSBndGtf
ZmlsZV9zZWxlY3Rpb25fbmV3KCJMb2FkIGZpbGUuLi4iKTsNCiAgICArCWdfc2lnbmFsX2Nvbm5l
Y3QoR1RLX09CSkVDVChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLA0KICAgICsJ
CQkgImNsaWNrZWQiLA0KICAgICsJCQkgR19DQUxMQkFDSyhsb2FkX2ZpbGVuYW1lKSwgKGdwb2lu
dGVyKSBmcyk7DQogICAgKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVA0KICAg
ICsJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLA0KICAgICsJCQkJICJj
bGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLA0KICAgICsJCQkJIChncG9p
bnRlcikgZnMpOw0KICAgICsJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QNCiAg
ICArCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+Y2FuY2VsX2J1dHRvbiksDQogICAgKwkJ
CQkgImNsaWNrZWQiLCBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksDQogICAgKwkJCQkg
KGdwb2ludGVyKSBmcyk7DQogICAgKwlndGtfd2lkZ2V0X3Nob3coZnMpOw0KICAgICt9DQogICAg
Kw0KICAgICsNCiAgICArdm9pZCBvbl9zYXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0
ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJaWYgKGNvbmZfd3JpdGUoTlVM
TCkpDQogICAgKwkJdGV4dF9pbnNlcnRfbXNnKCJFcnJvciIsICJVbmFibGUgdG8gc2F2ZSBjb25m
aWd1cmF0aW9uICEiKTsNCiAgICArCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7DQogICAgK30NCiAg
ICArDQogICAgKw0KICAgICtzdGF0aWMgdm9pZA0KICAgICtzdG9yZV9maWxlbmFtZShHdGtGaWxl
U2VsZWN0aW9uICogZmlsZV9zZWxlY3RvciwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQog
ICAgKwljb25zdCBnY2hhciAqZm47DQogICAgKw0KICAgICsJZm4gPSBndGtfZmlsZV9zZWxlY3Rp
b25fZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX1NFTEVDVElPTg0KICAgICsJCQkJCSAgICAgKHVzZXJf
ZGF0YSkpOw0KICAgICsNCiAgICArCWlmIChjb25mX3dyaXRlKGZuKSkNCiAgICArCQl0ZXh0X2lu
c2VydF9tc2coIkVycm9yIiwgIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24gISIpOw0KICAg
ICsNCiAgICArCWd0a193aWRnZXRfZGVzdHJveShHVEtfV0lER0VUKHVzZXJfZGF0YSkpOw0KICAg
ICt9DQogICAgKw0KICAgICt2b2lkIG9uX3NhdmVfYXMxX2FjdGl2YXRlKEd0a01lbnVJdGVtICog
bWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJR3RrV2lkZ2V0ICpm
czsNCiAgICArDQogICAgKwlmcyA9IGd0a19maWxlX3NlbGVjdGlvbl9uZXcoIlNhdmUgZmlsZSBh
cy4uLiIpOw0KICAgICsJZ19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVD
VElPTihmcyktPm9rX2J1dHRvbiksDQogICAgKwkJCSAiY2xpY2tlZCIsDQogICAgKwkJCSBHX0NB
TExCQUNLKHN0b3JlX2ZpbGVuYW1lKSwgKGdwb2ludGVyKSBmcyk7DQogICAgKwlnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVA0KICAgICsJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04o
ZnMpLT5va19idXR0b24pLA0KICAgICsJCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lk
Z2V0X2Rlc3Ryb3kpLA0KICAgICsJCQkJIChncG9pbnRlcikgZnMpOw0KICAgICsJZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QNCiAgICArCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9O
KGZzKS0+Y2FuY2VsX2J1dHRvbiksDQogICAgKwkJCQkgImNsaWNrZWQiLCBHX0NBTExCQUNLKGd0
a193aWRnZXRfZGVzdHJveSksDQogICAgKwkJCQkgKGdwb2ludGVyKSBmcyk7DQogICAgKwlndGtf
d2lkZ2V0X3Nob3coZnMpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9xdWl0
MV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQog
ICAgK3sNCiAgICArCWlmICghb25fd2luZG93MV9kZWxldGVfZXZlbnQoTlVMTCwgTlVMTCwgTlVM
TCkpDQogICAgKwkJZ3RrX3dpZGdldF9kZXN0cm95KEdUS19XSURHRVQobWFpbl93bmQpKTsNCiAg
ICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25fc2hvd19uYW1lMV9hY3RpdmF0ZShHdGtN
ZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCUd0
a1RyZWVWaWV3Q29sdW1uICpjb2w7DQogICAgKw0KICAgICsJc2hvd19uYW1lID0gR1RLX0NIRUNL
X01FTlVfSVRFTShtZW51aXRlbSktPmFjdGl2ZTsNCiAgICArCWNvbCA9IGd0a190cmVlX3ZpZXdf
Z2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBDT0xfTkFNRSk7DQogICAgKwlpZiAo
Y29sKQ0KICAgICsJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19u
YW1lKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25fc2hvd19yYW5nZTFfYWN0
aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7
DQogICAgKwlHdGtUcmVlVmlld0NvbHVtbiAqY29sOw0KICAgICsNCiAgICArCXNob3dfcmFuZ2Ug
PSBHVEtfQ0hFQ0tfTUVOVV9JVEVNKG1lbnVpdGVtKS0+YWN0aXZlOw0KICAgICsJY29sID0gZ3Rr
X3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9OTyk7DQog
ICAgKwlpZiAoY29sKQ0KICAgICsJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNv
bCwgc2hvd19yYW5nZSk7DQogICAgKwljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RL
X1RSRUVfVklFVyh0cmVlMl93KSwgQ09MX01PRCk7DQogICAgKwlpZiAoY29sKQ0KICAgICsJCWd0
a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7DQogICAgKwlj
b2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09M
X1lFUyk7DQogICAgKwlpZiAoY29sKQ0KICAgICsJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92
aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7DQogICAgKw0KICAgICt9DQogICAgKw0KICAgICsNCiAg
ICArdm9pZCBvbl9zaG93X2RhdGExX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdw
b2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbDsN
CiAgICArDQogICAgKwlzaG93X3ZhbHVlID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSkt
PmFjdGl2ZTsNCiAgICArCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9W
SUVXKHRyZWUyX3cpLCBDT0xfVkFMVUUpOw0KICAgICsJaWYgKGNvbCkNCiAgICArCQlndGtfdHJl
ZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3dfdmFsdWUpOw0KICAgICt9DQogICAg
Kw0KICAgICsNCiAgICArdm9pZA0KICAgICtvbl9zZXRfb3B0aW9uX21vZGUxX2FjdGl2YXRlKEd0
a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlv
cHRfbW9kZSA9IE9QVF9OT1JNQUw7DQogICAgKwlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7
DQogICAgKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJl
ZSB0byBzcGVlZC11cCAqLw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZA0KICAgICtv
bl9zZXRfb3B0aW9uX21vZGUyX2FjdGl2YXRlKEd0a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlvcHRfbW9kZSA9IE9QVF9BTEw7DQogICAgKwln
dGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7DQogICAgKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51
KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0byBzcGVlZC11cCAqLw0KICAgICt9DQogICAg
Kw0KICAgICsNCiAgICArdm9pZA0KICAgICtvbl9zZXRfb3B0aW9uX21vZGUzX2FjdGl2YXRlKEd0
a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlv
cHRfbW9kZSA9IE9QVF9QUk9NUFQ7DQogICAgKwlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7
DQogICAgKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJl
ZSB0byBzcGVlZC11cCAqLw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9pbnRy
b2R1Y3Rpb24xX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJf
ZGF0YSkNCiAgICArew0KICAgICsJR3RrV2lkZ2V0ICpkaWFsb2c7DQogICAgKwljb25zdCBnY2hh
ciAqaW50cm9fdGV4dCA9DQogICAgKwkgICAgIldlbGNvbWUgdG8gZ2tjLCB0aGUgR1RLKyBncmFw
aGljYWwgY29uZmlndXJhdGlvbiB0b29sXG4iDQogICAgKwkgICAgIkZvciBlYWNoIG9wdGlvbiwg
YSBibGFuayBib3ggaW5kaWNhdGVzIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLCBhXG4iDQogICAg
KwkgICAgImNoZWNrIGluZGljYXRlcyBpdCBpcyBlbmFibGVkLCBhbmQgYSBkb3QgaW5kaWNhdGVz
IHRoYXQgaXQgaXMgdG9cbiINCiAgICArCSAgICAiYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUuICBD
bGlja2luZyBvbiB0aGUgYm94IHdpbGwgY3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc3RhdGVzLlxu
Ig0KICAgICsJICAgICJcbiINCiAgICArCSAgICAiSWYgeW91IGRvIG5vdCBzZWUgYW4gb3B0aW9u
IChlLmcuLCBhIGRldmljZSBkcml2ZXIpIHRoYXQgeW91XG4iDQogICAgKwkgICAgImJlbGlldmUg
c2hvdWxkIGJlIHByZXNlbnQsIHRyeSB0dXJuaW5nIG9uIFNob3cgQWxsIE9wdGlvbnNcbiINCiAg
ICArCSAgICAidW5kZXIgdGhlIE9wdGlvbnMgbWVudS5cbiINCiAgICArCSAgICAiQWx0aG91Z2gg
dGhlcmUgaXMgbm8gY3Jvc3MgcmVmZXJlbmNlIHlldCB0byBoZWxwIHlvdSBmaWd1cmUgb3V0XG4i
DQogICAgKwkgICAgIndoYXQgb3RoZXIgb3B0aW9ucyBtdXN0IGJlIGVuYWJsZWQgdG8gc3VwcG9y
dCB0aGUgb3B0aW9uIHlvdVxuIg0KICAgICsJICAgICJhcmUgaW50ZXJlc3RlZCBpbiwgeW91IGNh
biBzdGlsbCB2aWV3IHRoZSBoZWxwIG9mIGEgZ3JheWVkLW91dFxuIg0KICAgICsJICAgICJvcHRp
b24uXG4iDQogICAgKwkgICAgIlxuIg0KICAgICsJICAgICJUb2dnbGluZyBTaG93IERlYnVnIElu
Zm8gdW5kZXIgdGhlIE9wdGlvbnMgbWVudSB3aWxsIHNob3cgXG4iDQogICAgKwkgICAgInRoZSBk
ZXBlbmRlbmNpZXMsIHdoaWNoIHlvdSBjYW4gdGhlbiBtYXRjaCBieSBleGFtaW5pbmcgb3RoZXIg
b3B0aW9ucy4iOw0KICAgICsNCiAgICArCWRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXco
R1RLX1dJTkRPVyhtYWluX3duZCksDQogICAgKwkJCQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhf
UEFSRU5ULA0KICAgICsJCQkJCUdUS19NRVNTQUdFX0lORk8sDQogICAgKwkJCQkJR1RLX0JVVFRP
TlNfQ0xPU0UsICIlcyIsIGludHJvX3RleHQpOw0KICAgICsJZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKEdUS19PQkpFQ1QoZGlhbG9nKSwgInJlc3BvbnNlIiwNCiAgICArCQkJCSBHX0NBTExCQUNL
KGd0a193aWRnZXRfZGVzdHJveSksDQogICAgKwkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsNCiAg
ICArCWd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTsNCiAgICArfQ0KICAgICsNCiAgICArDQog
ICAgK3ZvaWQgb25fYWJvdXQxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2lu
dGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJR3RrV2lkZ2V0ICpkaWFsb2c7DQogICAgKwlj
b25zdCBnY2hhciAqYWJvdXRfdGV4dCA9DQogICAgKwkgICAgImdrYyBpcyBjb3B5cmlnaHQgKGMp
IDIwMDIgUm9tYWluIExpZXZpbiA8cm9tc0BscGcudGljYWxjLm9yZz4uXG4iDQogICAgKwkgICAg
ICAiQmFzZWQgb24gdGhlIHNvdXJjZSBjb2RlIGZyb20gUm9tYW4gWmlwcGVsLlxuIjsNCiAgICAr
DQogICAgKwlkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93
bmQpLA0KICAgICsJCQkJCUdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwNCiAgICArCQkJ
CQlHVEtfTUVTU0FHRV9JTkZPLA0KICAgICsJCQkJCUdUS19CVVRUT05TX0NMT1NFLCAiJXMiLCBh
Ym91dF90ZXh0KTsNCiAgICArCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUKGRp
YWxvZyksICJyZXNwb25zZSIsDQogICAgKwkJCQkgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ry
b3kpLA0KICAgICsJCQkJIEdUS19PQkpFQ1QoZGlhbG9nKSk7DQogICAgKwlndGtfd2lkZ2V0X3No
b3dfYWxsKGRpYWxvZyk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICt2b2lkIG9uX2xpY2Vu
c2UxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkN
CiAgICArew0KICAgICsJR3RrV2lkZ2V0ICpkaWFsb2c7DQogICAgKwljb25zdCBnY2hhciAqbGlj
ZW5zZV90ZXh0ID0NCiAgICArCSAgICAiZ2tjIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIEdQTCB2Mi5cbiINCiAgICArCSAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiwg
cGxlYXNlIHNlZSB0aGUgc291cmNlIGNvZGUgb3JcbiINCiAgICArCSAgICAgICJ2aXNpdCBodHRw
Oi8vd3d3LmZzZi5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbFxuIjsNCiAgICArDQogICAgKwlk
aWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93bmQpLA0KICAg
ICsJCQkJCUdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwNCiAgICArCQkJCQlHVEtfTUVT
U0FHRV9JTkZPLA0KICAgICsJCQkJCUdUS19CVVRUT05TX0NMT1NFLCAiJXMiLCBsaWNlbnNlX3Rl
eHQpOw0KICAgICsJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QoZGlhbG9nKSwg
InJlc3BvbnNlIiwNCiAgICArCQkJCSBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksDQog
ICAgKwkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsNCiAgICArCWd0a193aWRnZXRfc2hvd19hbGwo
ZGlhbG9nKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25fYmFja19jbGlja2Vk
KEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwll
bnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICArDQogICAgKwljdXJyZW50ID0gY3VycmVudC0+cGFy
ZW50Ow0KICAgICsJcHR5cGUgPSBjdXJyZW50LT5wcm9tcHQgPyBjdXJyZW50LT5wcm9tcHQtPnR5
cGUgOiBQX1VOS05PV047DQogICAgKwlpZiAocHR5cGUgIT0gUF9NRU5VKQ0KICAgICsJCWN1cnJl
bnQgPSBjdXJyZW50LT5wYXJlbnQ7DQogICAgKwlkaXNwbGF5X3RyZWVfcGFydCgpOw0KICAgICsN
CiAgICArCWlmIChjdXJyZW50ID09ICZyb290bWVudSkNCiAgICArCQlndGtfd2lkZ2V0X3NldF9z
ZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3Zv
aWQgb25fbG9hZF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRh
KQ0KICAgICt7DQogICAgKwlvbl9sb2FkMV9hY3RpdmF0ZShOVUxMLCB1c2VyX2RhdGEpOw0KICAg
ICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9zaW5nbGVfY2xpY2tlZChHdGtCdXR0b24g
KiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJdmlld19tb2RlID0g
U0lOR0xFX1ZJRVc7DQogICAgKwlndGtfd2lkZ2V0X2hpZGUodHJlZTFfdyk7DQogICAgKwljdXJy
ZW50ID0gJnJvb3RtZW51Ow0KICAgICsJZGlzcGxheV90cmVlX3BhcnQoKTsNCiAgICArfQ0KICAg
ICsNCiAgICArDQogICAgK3ZvaWQgb25fc3BsaXRfY2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24s
IGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJZ2ludCB3LCBoOw0KICAgICsJdmll
d19tb2RlID0gU1BMSVRfVklFVzsNCiAgICArCWd0a193aWRnZXRfc2hvdyh0cmVlMV93KTsNCiAg
ICArCWd0a193aW5kb3dfZ2V0X2RlZmF1bHRfc2l6ZShHVEtfV0lORE9XKG1haW5fd25kKSwgJncs
ICZoKTsNCiAgICArCWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKGhwYW5lZCksIHcg
LyAyKTsNCiAgICArCWlmICh0cmVlMikNCiAgICArCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVl
Mik7DQogICAgKwlkaXNwbGF5X2xpc3QoKTsNCiAgICArDQogICAgKwkvKiBEaXNhYmxlIGJhY2sg
YnRuLCBsaWtlIGluIGZ1bGwgbW9kZS4gKi8NCiAgICArCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2
ZShiYWNrX2J0biwgRkFMU0UpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9m
dWxsX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAg
K3sNCiAgICArCXZpZXdfbW9kZSA9IEZVTExfVklFVzsNCiAgICArCWd0a193aWRnZXRfaGlkZSh0
cmVlMV93KTsNCiAgICArCWlmICh0cmVlMikNCiAgICArCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0
cmVlMik7DQogICAgKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsNCiAgICArCWd0a193aWRnZXRf
c2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAg
ICArdm9pZCBvbl9jb2xsYXBzZV9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIg
dXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlndGtfdHJlZV92aWV3X2NvbGxhcHNlX2FsbChHVEtf
VFJFRV9WSUVXKHRyZWUyX3cpKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25f
ZXhwYW5kX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQog
ICAgK3sNCiAgICArCWd0a190cmVlX3ZpZXdfZXhwYW5kX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUy
X3cpKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgKy8qIENUcmVlIENhbGxiYWNrcyAqLw0K
ICAgICsNCiAgICArLyogQ2hhbmdlIGhleC9pbnQvc3RyaW5nIHZhbHVlIGluIHRoZSBjZWxsICov
DQogICAgK3N0YXRpYyB2b2lkIHJlbmRlcmVyX2VkaXRlZChHdGtDZWxsUmVuZGVyZXJUZXh0ICog
Y2VsbCwNCiAgICArCQkJICAgIGNvbnN0IGdjaGFyICogcGF0aF9zdHJpbmcsDQogICAgKwkJCSAg
ICBjb25zdCBnY2hhciAqIG5ld190ZXh0LCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAg
ICArCUd0a1RyZWVQYXRoICpwYXRoID0gZ3RrX3RyZWVfcGF0aF9uZXdfZnJvbV9zdHJpbmcocGF0
aF9zdHJpbmcpOw0KICAgICsJR3RrVHJlZUl0ZXIgaXRlcjsNCiAgICArCWNvbnN0IGNoYXIgKm9s
ZF9kZWYsICpuZXdfZGVmOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAgKwlzdHJ1Y3Qg
c3ltYm9sICpzeW07DQogICAgKw0KICAgICsJaWYgKCFndGtfdHJlZV9tb2RlbF9nZXRfaXRlciht
b2RlbDIsICZpdGVyLCBwYXRoKSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJZ3RrX3Ry
ZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOw0KICAgICsJ
c3ltID0gbWVudS0+c3ltOw0KICAgICsNCiAgICArCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIs
ICZpdGVyLCBDT0xfVkFMVUUsICZvbGRfZGVmLCAtMSk7DQogICAgKwluZXdfZGVmID0gbmV3X3Rl
eHQ7DQogICAgKw0KICAgICsJc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBuZXdfZGVmKTsNCiAg
ICArDQogICAgKwl1cGRhdGVfdHJlZSgmcm9vdG1lbnUsIE5VTEwpOw0KICAgICsNCiAgICArCWd0
a190cmVlX3BhdGhfZnJlZShwYXRoKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogQ2hhbmdlIHRo
ZSB2YWx1ZSBvZiBhIHN5bWJvbCBhbmQgdXBkYXRlIHRoZSB0cmVlICovDQogICAgK3N0YXRpYyB2
b2lkIGNoYW5nZV9zeW1fdmFsdWUoc3RydWN0IG1lbnUgKm1lbnUsIGdpbnQgY29sKQ0KICAgICt7
DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgKwl0cmlzdGF0ZSBu
ZXd2YWw7DQogICAgKw0KICAgICsJaWYgKCFzeW0pDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAg
ICArCWlmIChjb2wgPT0gQ09MX05PKQ0KICAgICsJCW5ld3ZhbCA9IG5vOw0KICAgICsJZWxzZSBp
ZiAoY29sID09IENPTF9NT0QpDQogICAgKwkJbmV3dmFsID0gbW9kOw0KICAgICsJZWxzZSBpZiAo
Y29sID09IENPTF9ZRVMpDQogICAgKwkJbmV3dmFsID0geWVzOw0KICAgICsJZWxzZQ0KICAgICsJ
CXJldHVybjsNCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bV9nZXRfdHlwZShzeW0pKSB7DQogICAg
KwljYXNlIFNfQk9PTEVBTjoNCiAgICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQlpZiAoIXN5
bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBuZXd2YWwpKQ0KICAgICsJCQluZXd2YWwgPSB5
ZXM7DQogICAgKwkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5ld3ZhbCk7DQogICAgKwkJ
aWYgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpDQogICAgKwkJCXVwZGF0ZV90cmVlKCZyb290bWVu
dSwgTlVMTCk7DQogICAgKwkJZWxzZSBpZiAodmlld19tb2RlID09IFNQTElUX1ZJRVcpIHsNCiAg
ICArCQkJdXBkYXRlX3RyZWUoYnJvd3NlZCwgTlVMTCk7DQogICAgKwkJCWRpc3BsYXlfbGlzdCgp
Ow0KICAgICsJCX0NCiAgICArCQllbHNlIGlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcpDQog
ICAgKwkJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7CS8vZml4bWU6IGtlZXAgZXhwL2NvbGwNCiAgICAr
CQlicmVhazsNCiAgICArCWNhc2UgU19JTlQ6DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJY2Fz
ZSBTX1NUUklORzoNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAg
K30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHRvZ2dsZV9zeW1fdmFsdWUoc3RydWN0IG1lbnUg
Km1lbnUpDQogICAgK3sNCiAgICArCWlmICghbWVudS0+c3ltKQ0KICAgICsJCXJldHVybjsNCiAg
ICArDQogICAgKwlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKG1lbnUtPnN5bSk7DQogICAgKwlp
ZiAodmlld19tb2RlID09IEZVTExfVklFVykNCiAgICArCQl1cGRhdGVfdHJlZSgmcm9vdG1lbnUs
IE5VTEwpOw0KICAgICsJZWxzZSBpZiAodmlld19tb2RlID09IFNQTElUX1ZJRVcpIHsNCiAgICAr
CQl1cGRhdGVfdHJlZShicm93c2VkLCBOVUxMKTsNCiAgICArCQlkaXNwbGF5X2xpc3QoKTsNCiAg
ICArCX0NCiAgICArCWVsc2UgaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykNCiAgICArCQlk
aXNwbGF5X3RyZWVfcGFydCgpOwkvL2ZpeG1lOiBrZWVwIGV4cC9jb2xsDQogICAgK30NCiAgICAr
DQogICAgK3N0YXRpYyBnaW50IGNvbHVtbjJpbmRleChHdGtUcmVlVmlld0NvbHVtbiAqIGNvbHVt
bikNCiAgICArew0KICAgICsJZ2ludCBpOw0KICAgICsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBD
T0xfTlVNQkVSOyBpKyspIHsNCiAgICArCQlHdGtUcmVlVmlld0NvbHVtbiAqY29sOw0KICAgICsN
CiAgICArCQljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVl
Ml93KSwgaSk7DQogICAgKwkJaWYgKGNvbCA9PSBjb2x1bW4pDQogICAgKwkJCXJldHVybiBpOw0K
ICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiAtMTsNCiAgICArfQ0KICAgICsNCiAgICArDQog
ICAgKy8qIFVzZXIgY2xpY2s6IHVwZGF0ZSBjaG9pY2UgKGZ1bGwpIG9yIGdvZXMgZG93biAoc2lu
Z2xlKSAqLw0KICAgICtnYm9vbGVhbg0KICAgICtvbl90cmVldmlldzJfYnV0dG9uX3ByZXNzX2V2
ZW50KEd0a1dpZGdldCAqIHdpZGdldCwNCiAgICArCQkJCUdka0V2ZW50QnV0dG9uICogZXZlbnQs
IGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJR3RrVHJlZVZpZXcgKnZpZXcgPSBH
VEtfVFJFRV9WSUVXKHdpZGdldCk7DQogICAgKwlHdGtUcmVlUGF0aCAqcGF0aDsNCiAgICArCUd0
a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47DQogICAgKwlHdGtUcmVlSXRlciBpdGVyOw0KICAgICsJ
c3RydWN0IG1lbnUgKm1lbnU7DQogICAgKwlnaW50IGNvbDsNCiAgICArDQogICAgKyNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigyLDEsNCkgLy8gYnVnIGluIGN0cmVlIHdpdGggZWFybGllciB2ZXJzaW9u
IG9mIEdUSw0KICAgICsJZ2ludCB0eCA9IChnaW50KSBldmVudC0+eDsNCiAgICArCWdpbnQgdHkg
PSAoZ2ludCkgZXZlbnQtPnk7DQogICAgKwlnaW50IGN4LCBjeTsNCiAgICArDQogICAgKwlndGtf
dHJlZV92aWV3X2dldF9wYXRoX2F0X3Bvcyh2aWV3LCB0eCwgdHksICZwYXRoLCAmY29sdW1uLCAm
Y3gsDQogICAgKwkJCQkgICAgICAmY3kpOw0KICAgICsjZWxzZQ0KICAgICsJZ3RrX3RyZWVfdmll
d19nZXRfY3Vyc29yKHZpZXcsICZwYXRoLCAmY29sdW1uKTsNCiAgICArI2VuZGlmDQogICAgKwlp
ZiAocGF0aCA9PSBOVUxMKQ0KICAgICsJCXJldHVybiBGQUxTRTsNCiAgICArDQogICAgKwlpZiAo
IWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsMiwgJml0ZXIsIHBhdGgpKQ0KICAgICsJCXJl
dHVybiBGQUxTRTsNCiAgICArCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xf
TUVOVSwgJm1lbnUsIC0xKTsNCiAgICArDQogICAgKwljb2wgPSBjb2x1bW4yaW5kZXgoY29sdW1u
KTsNCiAgICArCWlmIChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykgew0KICAgICsJ
CWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAgICsJCXB0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVu
dS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOw0KICAgICsNCiAgICArCQlpZiAocHR5cGUgPT0g
UF9NRU5VICYmIHZpZXdfbW9kZSAhPSBGVUxMX1ZJRVcgJiYgY29sID09IENPTF9PUFRJT04pIHsN
CiAgICArCQkJLy8gZ29lcyBkb3duIGludG8gbWVudQ0KICAgICsJCQljdXJyZW50ID0gbWVudTsN
CiAgICArCQkJZGlzcGxheV90cmVlX3BhcnQoKTsNCiAgICArCQkJZ3RrX3dpZGdldF9zZXRfc2Vu
c2l0aXZlKGJhY2tfYnRuLCBUUlVFKTsNCiAgICArCQl9IGVsc2UgaWYgKGNvbCA9PSBDT0xfT1BU
SU9OKSB7DQogICAgKwkJCXRvZ2dsZV9zeW1fdmFsdWUobWVudSk7DQogICAgKwkJCWd0a190cmVl
X3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBUUlVFKTsNCiAgICArCQl9DQogICAgKwl9IGVs
c2Ugew0KICAgICsJCWlmIChjb2wgPT0gQ09MX1ZBTFVFKSB7DQogICAgKwkJCXRvZ2dsZV9zeW1f
dmFsdWUobWVudSk7DQogICAgKwkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRo
LCBUUlVFKTsNCiAgICArCQl9IGVsc2UgaWYgKGNvbCA9PSBDT0xfTk8gfHwgY29sID09IENPTF9N
T0QNCiAgICArCQkJICAgfHwgY29sID09IENPTF9ZRVMpIHsNCiAgICArCQkJY2hhbmdlX3N5bV92
YWx1ZShtZW51LCBjb2wpOw0KICAgICsJCQlndGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywg
cGF0aCwgVFJVRSk7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiBGQUxT
RTsNCiAgICArfQ0KICAgICsNCiAgICArLyogS2V5IHByZXNzZWQ6IHVwZGF0ZSBjaG9pY2UgKi8N
CiAgICArZ2Jvb2xlYW4NCiAgICArb25fdHJlZXZpZXcyX2tleV9wcmVzc19ldmVudChHdGtXaWRn
ZXQgKiB3aWRnZXQsDQogICAgKwkJCSAgICAgR2RrRXZlbnRLZXkgKiBldmVudCwgZ3BvaW50ZXIg
dXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlHdGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVFX1ZJ
RVcod2lkZ2V0KTsNCiAgICArCUd0a1RyZWVQYXRoICpwYXRoOw0KICAgICsJR3RrVHJlZVZpZXdD
b2x1bW4gKmNvbHVtbjsNCiAgICArCUd0a1RyZWVJdGVyIGl0ZXI7DQogICAgKwlzdHJ1Y3QgbWVu
dSAqbWVudTsNCiAgICArCWdpbnQgY29sOw0KICAgICsNCiAgICArCWd0a190cmVlX3ZpZXdfZ2V0
X2N1cnNvcih2aWV3LCAmcGF0aCwgJmNvbHVtbik7DQogICAgKwlpZiAocGF0aCA9PSBOVUxMKQ0K
ICAgICsJCXJldHVybiBGQUxTRTsNCiAgICArDQogICAgKwlpZiAoZXZlbnQtPmtleXZhbCA9PSBH
REtfc3BhY2UpIHsNCiAgICArCQlpZiAoZ3RrX3RyZWVfdmlld19yb3dfZXhwYW5kZWQodmlldywg
cGF0aCkpDQogICAgKwkJCWd0a190cmVlX3ZpZXdfY29sbGFwc2Vfcm93KHZpZXcsIHBhdGgpOw0K
ICAgICsJCWVsc2UNCiAgICArCQkJZ3RrX3RyZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgs
IEZBTFNFKTsNCiAgICArCQlyZXR1cm4gVFJVRTsNCiAgICArCX0NCiAgICArCWlmIChldmVudC0+
a2V5dmFsID09IEdES19LUF9FbnRlcikgew0KICAgICsJfQ0KICAgICsJaWYgKHdpZGdldCA9PSB0
cmVlMV93KQ0KICAgICsJCXJldHVybiBGQUxTRTsNCiAgICArDQogICAgKwlndGtfdHJlZV9tb2Rl
bF9nZXRfaXRlcihtb2RlbDIsICZpdGVyLCBwYXRoKTsNCiAgICArCWd0a190cmVlX21vZGVsX2dl
dChtb2RlbDIsICZpdGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsNCiAgICArDQogICAgKwlpZiAo
IXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgIm4iKSkNCiAgICArCQljb2wgPSBDT0xfTk87DQog
ICAgKwllbHNlIGlmICghc3RyY2FzZWNtcChldmVudC0+c3RyaW5nLCAibSIpKQ0KICAgICsJCWNv
bCA9IENPTF9NT0Q7DQogICAgKwllbHNlIGlmICghc3RyY2FzZWNtcChldmVudC0+c3RyaW5nLCAi
eSIpKQ0KICAgICsJCWNvbCA9IENPTF9ZRVM7DQogICAgKwllbHNlDQogICAgKwkJY29sID0gLTE7
DQogICAgKwljaGFuZ2Vfc3ltX3ZhbHVlKG1lbnUsIGNvbCk7DQogICAgKw0KICAgICsJcmV0dXJu
IEZBTFNFOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyogUm93IHNlbGVjdGlvbiBjaGFu
Z2VkOiB1cGRhdGUgaGVscCAqLw0KICAgICt2b2lkDQogICAgK29uX3RyZWV2aWV3Ml9jdXJzb3Jf
Y2hhbmdlZChHdGtUcmVlVmlldyAqIHRyZWV2aWV3LCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAg
K3sNCiAgICArCUd0a1RyZWVTZWxlY3Rpb24gKnNlbGVjdGlvbjsNCiAgICArCUd0a1RyZWVJdGVy
IGl0ZXI7DQogICAgKwlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICArDQogICAgKwlzZWxlY3Rpb24g
PSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rpb24odHJlZXZpZXcpOw0KICAgICsJaWYgKGd0a190
cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQoc2VsZWN0aW9uLCAmbW9kZWwyLCAmaXRlcikpIHsN
CiAgICArCQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51
LCAtMSk7DQogICAgKwkJdGV4dF9pbnNlcnRfaGVscChtZW51KTsNCiAgICArCX0NCiAgICArfQ0K
ICAgICsNCiAgICArDQogICAgKy8qIFVzZXIgY2xpY2s6IGRpc3BsYXkgc3ViLXRyZWUgaW4gdGhl
IHJpZ2h0IGZyYW1lLiAqLw0KICAgICtnYm9vbGVhbg0KICAgICtvbl90cmVldmlldzFfYnV0dG9u
X3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdpZGdldCwNCiAgICArCQkJCUdka0V2ZW50QnV0dG9u
ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJR3RrVHJlZVZpZXcg
KnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7DQogICAgKwlHdGtUcmVlUGF0aCAqcGF0aDsN
CiAgICArCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47DQogICAgKwlHdGtUcmVlSXRlciBpdGVy
Ow0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAgKw0KICAgICsJZ2ludCB0eCA9IChnaW50
KSBldmVudC0+eDsNCiAgICArCWdpbnQgdHkgPSAoZ2ludCkgZXZlbnQtPnk7DQogICAgKwlnaW50
IGN4LCBjeTsNCiAgICArDQogICAgKwlndGtfdHJlZV92aWV3X2dldF9wYXRoX2F0X3Bvcyh2aWV3
LCB0eCwgdHksICZwYXRoLCAmY29sdW1uLCAmY3gsDQogICAgKwkJCQkgICAgICAmY3kpOw0KICAg
ICsJaWYgKHBhdGggPT0gTlVMTCkNCiAgICArCQlyZXR1cm4gRkFMU0U7DQogICAgKw0KICAgICsJ
Z3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwxLCAmaXRlciwgcGF0aCk7DQogICAgKwlndGtf
dHJlZV9tb2RlbF9nZXQobW9kZWwxLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7DQogICAg
Kw0KICAgICsJaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9OX1BSRVNTKSB7DQogICAgKwkJ
dG9nZ2xlX3N5bV92YWx1ZShtZW51KTsNCiAgICArCQljdXJyZW50ID0gbWVudTsNCiAgICArCQlk
aXNwbGF5X3RyZWVfcGFydCgpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQlicm93c2VkID0gbWVu
dTsNCiAgICArCQlkaXNwbGF5X3RyZWVfcGFydCgpOw0KICAgICsJfQ0KICAgICsNCiAgICArCWd0
a193aWRnZXRfcmVhbGl6ZSh0cmVlMl93KTsNCiAgICArCWd0a190cmVlX3ZpZXdfc2V0X2N1cnNv
cih2aWV3LCBwYXRoLCBOVUxMLCBGQUxTRSk7DQogICAgKwlndGtfd2lkZ2V0X2dyYWJfZm9jdXMo
dHJlZTJfdyk7DQogICAgKw0KICAgICsJcmV0dXJuIEZBTFNFOw0KICAgICt9DQogICAgKw0KICAg
ICsNCiAgICArLyogRmlsbCBhIHJvdyBvZiBzdHJpbmdzICovDQogICAgK3N0YXRpYyBnY2hhciAq
KmZpbGxfcm93KHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlzdGF0aWMgZ2NoYXIg
KnJvd1tDT0xfTlVNQkVSXTsNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsN
CiAgICArCWNvbnN0IGNoYXIgKmRlZjsNCiAgICArCWludCBzdHlwZTsNCiAgICArCXRyaXN0YXRl
IHZhbDsNCiAgICArCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAgICsJaW50IGk7DQogICAgKw0K
ICAgICsJZm9yIChpID0gQ09MX09QVElPTjsgaSA8PSBDT0xfQ09MT1I7IGkrKykNCiAgICArCQln
X2ZyZWUocm93W2ldKTsNCiAgICArCWJ6ZXJvKHJvdywgc2l6ZW9mKHJvdykpOw0KICAgICsNCiAg
ICArCXJvd1tDT0xfT1BUSU9OXSA9DQogICAgKwkgICAgZ19zdHJkdXBfcHJpbnRmKCIlcyAlcyIs
IG1lbnVfZ2V0X3Byb21wdChtZW51KSwNCiAgICArCQkJICAgIHN5bSAmJiAhc3ltX2hhc192YWx1
ZShzeW0pID8gIihORVcpIiA6ICIiKTsNCiAgICArDQogICAgKwlpZiAob3B0X21vZGUgPT0gT1BU
X0FMTCAmJiAhbWVudV9pc192aXNpYmxlKG1lbnUpKQ0KICAgICsJCXJvd1tDT0xfQ09MT1JdID0g
Z19zdHJkdXAoIkRhcmtHcmF5Iik7DQogICAgKwllbHNlIGlmIChvcHRfbW9kZSA9PSBPUFRfUFJP
TVBUICYmDQogICAgKwkJCW1lbnVfaGFzX3Byb21wdChtZW51KSAmJiAhbWVudV9pc192aXNpYmxl
KG1lbnUpKQ0KICAgICsJCXJvd1tDT0xfQ09MT1JdID0gZ19zdHJkdXAoIkRhcmtHcmF5Iik7DQog
ICAgKwllbHNlDQogICAgKwkJcm93W0NPTF9DT0xPUl0gPSBnX3N0cmR1cCgiQmxhY2siKTsNCiAg
ICArDQogICAgKwlwdHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBf
VU5LTk9XTjsNCiAgICArCXN3aXRjaCAocHR5cGUpIHsNCiAgICArCWNhc2UgUF9NRU5VOg0KICAg
ICsJCXJvd1tDT0xfUElYQlVGXSA9IChnY2hhciAqKSB4cG1fbWVudTsNCiAgICArCQlpZiAodmll
d19tb2RlID09IFNJTkdMRV9WSUVXKQ0KICAgICsJCQlyb3dbQ09MX1BJWFZJU10gPSBHSU5UX1RP
X1BPSU5URVIoVFJVRSk7DQogICAgKwkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVS
KEZBTFNFKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgUF9DT01NRU5UOg0KICAgICsJCXJv
d1tDT0xfUElYQlVGXSA9IChnY2hhciAqKSB4cG1fdm9pZDsNCiAgICArCQlyb3dbQ09MX1BJWFZJ
U10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOw0KICAgICsJCXJvd1tDT0xfQlROVklTXSA9IEdJ
TlRfVE9fUE9JTlRFUihGQUxTRSk7DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAg
ICsJCXJvd1tDT0xfUElYQlVGXSA9IChnY2hhciAqKSB4cG1fdm9pZDsNCiAgICArCQlyb3dbQ09M
X1BJWFZJU10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOw0KICAgICsJCXJvd1tDT0xfQlROVklT
XSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICAr
DQogICAgKwlpZiAoIXN5bSkNCiAgICArCQlyZXR1cm4gcm93Ow0KICAgICsJcm93W0NPTF9OQU1F
XSA9IGdfc3RyZHVwKHN5bS0+bmFtZSk7DQogICAgKw0KICAgICsJc3ltX2NhbGNfdmFsdWUoc3lt
KTsNCiAgICArCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEFOR0VEOw0KICAgICsNCiAgICArCWlm
IChzeW1faXNfY2hvaWNlKHN5bSkpIHsJLy8gcGFyc2UgY2hpbGRzIGZvciBnZXR0aW5nIGZpbmFs
IHZhbHVlDQogICAgKwkJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsJCXN0cnVjdCBzeW1ib2wg
KmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOw0KICAgICsJCXN0cnVjdCBtZW51
ICpkZWZfbWVudSA9IE5VTEw7DQogICAgKw0KICAgICsJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRf
VE9fUE9JTlRFUihGQUxTRSk7DQogICAgKw0KICAgICsJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCQlpZiAobWVudV9pc192aXNp
YmxlKGNoaWxkKQ0KICAgICsJCQkgICAgJiYgY2hpbGQtPnN5bSA9PSBkZWZfc3ltKQ0KICAgICsJ
CQkJZGVmX21lbnUgPSBjaGlsZDsNCiAgICArCQl9DQogICAgKw0KICAgICsJCWlmIChkZWZfbWVu
dSkNCiAgICArCQkJcm93W0NPTF9WQUxVRV0gPQ0KICAgICsJCQkgICAgZ19zdHJkdXAobWVudV9n
ZXRfcHJvbXB0KGRlZl9tZW51KSk7DQogICAgKwl9DQogICAgKwlpZiAoc3ltLT5mbGFncyAmIFNZ
TUJPTF9DSE9JQ0VWQUwpDQogICAgKwkJcm93W0NPTF9CVE5SQURdID0gR0lOVF9UT19QT0lOVEVS
KFRSVUUpOw0KICAgICsNCiAgICArCXN0eXBlID0gc3ltX2dldF90eXBlKHN5bSk7DQogICAgKwlz
d2l0Y2ggKHN0eXBlKSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCQlpZiAoR1BPSU5U
RVJfVE9fSU5UKHJvd1tDT0xfUElYVklTXSkgPT0gRkFMU0UpDQogICAgKwkJCXJvd1tDT0xfQlRO
VklTXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsNCiAgICArCQlpZiAoc3ltX2lzX2Nob2ljZShz
eW0pKQ0KICAgICsJCQlicmVhazsNCiAgICArCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICArCWNh
c2UgU19UUklTVEFURToNCiAgICArCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7
DQogICAgKwkJc3dpdGNoICh2YWwpIHsNCiAgICArCQljYXNlIG5vOg0KICAgICsJCQlyb3dbQ09M
X05PXSA9IGdfc3RyZHVwKCJOIik7DQogICAgKwkJCXJvd1tDT0xfVkFMVUVdID0gZ19zdHJkdXAo
Ik4iKTsNCiAgICArCQkJcm93W0NPTF9CVE5BQ1RdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsN
CiAgICArCQkJcm93W0NPTF9CVE5JTkNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJY2FzZSBtb2Q6DQogICAgKwkJCXJvd1tDT0xfTU9EXSA9IGdfc3Ry
ZHVwKCJNIik7DQogICAgKwkJCXJvd1tDT0xfVkFMVUVdID0gZ19zdHJkdXAoIk0iKTsNCiAgICAr
CQkJcm93W0NPTF9CVE5JTkNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOw0KICAgICsJCQlicmVh
azsNCiAgICArCQljYXNlIHllczoNCiAgICArCQkJcm93W0NPTF9ZRVNdID0gZ19zdHJkdXAoIlki
KTsNCiAgICArCQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cCgiWSIpOw0KICAgICsJCQlyb3db
Q09MX0JUTkFDVF0gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7DQogICAgKwkJCXJvd1tDT0xfQlRO
SU5DXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0N
CiAgICArDQogICAgKwkJaWYgKHZhbCAhPSBubyAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3Jhbmdl
KHN5bSwgbm8pKQ0KICAgICsJCQlyb3dbQ09MX05PXSA9IGdfc3RyZHVwKCJfIik7DQogICAgKwkJ
aWYgKHZhbCAhPSBtb2QgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1vZCkpDQog
ICAgKwkJCXJvd1tDT0xfTU9EXSA9IGdfc3RyZHVwKCJfIik7DQogICAgKwkJaWYgKHZhbCAhPSB5
ZXMgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHllcykpDQogICAgKwkJCXJvd1tD
T0xfWUVTXSA9IGdfc3RyZHVwKCJfIik7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSU5U
Og0KICAgICsJY2FzZSBTX0hFWDoNCiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJZGVmID0g
c3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsNCiAgICArCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3Ry
ZHVwKGRlZik7DQogICAgKwkJcm93W0NPTF9FRElUXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsN
CiAgICArCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOw0KICAgICsJ
CWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiByb3c7DQogICAgK30NCiAgICAr
DQogICAgKw0KICAgICsvKiBTZXQgdGhlIG5vZGUgY29udGVudCB3aXRoIGEgcm93IG9mIHN0cmlu
Z3MgKi8NCiAgICArc3RhdGljIHZvaWQgc2V0X25vZGUoR3RrVHJlZUl0ZXIgKiBub2RlLCBzdHJ1
Y3QgbWVudSAqbWVudSwgZ2NoYXIgKiogcm93KQ0KICAgICt7DQogICAgKwlHZGtDb2xvciBjb2xv
cjsNCiAgICArCWdib29sZWFuIHN1Y2Nlc3M7DQogICAgKwlHZGtQaXhidWYgKnBpeDsNCiAgICAr
DQogICAgKwlwaXggPSBnZGtfcGl4YnVmX25ld19mcm9tX3hwbV9kYXRhKChjb25zdCBjaGFyICoq
KQ0KICAgICsJCQkJCSAgIHJvd1tDT0xfUElYQlVGXSk7DQogICAgKw0KICAgICsJZ2RrX2NvbG9y
X3BhcnNlKHJvd1tDT0xfQ09MT1JdLCAmY29sb3IpOw0KICAgICsJZ2RrX2NvbG9ybWFwX2FsbG9j
X2NvbG9ycyhnZGtfY29sb3JtYXBfZ2V0X3N5c3RlbSgpLCAmY29sb3IsIDEsDQogICAgKwkJCQkg
IEZBTFNFLCBGQUxTRSwgJnN1Y2Nlc3MpOw0KICAgICsNCiAgICArCWd0a190cmVlX3N0b3JlX3Nl
dCh0cmVlLCBub2RlLA0KICAgICsJCQkgICBDT0xfT1BUSU9OLCByb3dbQ09MX09QVElPTl0sDQog
ICAgKwkJCSAgIENPTF9OQU1FLCByb3dbQ09MX05BTUVdLA0KICAgICsJCQkgICBDT0xfTk8sIHJv
d1tDT0xfTk9dLA0KICAgICsJCQkgICBDT0xfTU9ELCByb3dbQ09MX01PRF0sDQogICAgKwkJCSAg
IENPTF9ZRVMsIHJvd1tDT0xfWUVTXSwNCiAgICArCQkJICAgQ09MX1ZBTFVFLCByb3dbQ09MX1ZB
TFVFXSwNCiAgICArCQkJICAgQ09MX01FTlUsIChncG9pbnRlcikgbWVudSwNCiAgICArCQkJICAg
Q09MX0NPTE9SLCAmY29sb3IsDQogICAgKwkJCSAgIENPTF9FRElULCBHUE9JTlRFUl9UT19JTlQo
cm93W0NPTF9FRElUXSksDQogICAgKwkJCSAgIENPTF9QSVhCVUYsIHBpeCwNCiAgICArCQkJICAg
Q09MX1BJWFZJUywgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfUElYVklTXSksDQogICAgKwkJCSAg
IENPTF9CVE5WSVMsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTlZJU10pLA0KICAgICsJCQkg
ICBDT0xfQlROQUNULCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9CVE5BQ1RdKSwNCiAgICArCQkJ
ICAgQ09MX0JUTklOQywgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfQlROSU5DXSksDQogICAgKwkJ
CSAgIENPTF9CVE5SQUQsIEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX0JUTlJBRF0pLA0KICAgICsJ
CQkgICAtMSk7DQogICAgKw0KICAgICsJZ19vYmplY3RfdW5yZWYocGl4KTsNCiAgICArfQ0KICAg
ICsNCiAgICArDQogICAgKy8qIEFkZCBhIG5vZGUgdG8gdGhlIHRyZWUgKi8NCiAgICArc3RhdGlj
IHZvaWQgcGxhY2Vfbm9kZShzdHJ1Y3QgbWVudSAqbWVudSwgY2hhciAqKnJvdykNCiAgICArew0K
ICAgICsJR3RrVHJlZUl0ZXIgKnBhcmVudCA9IHBhcmVudHNbaW5kZW50IC0gMV07DQogICAgKwlH
dGtUcmVlSXRlciAqbm9kZSA9IHBhcmVudHNbaW5kZW50XTsNCiAgICArDQogICAgKwlndGtfdHJl
ZV9zdG9yZV9hcHBlbmQodHJlZSwgbm9kZSwgcGFyZW50KTsNCiAgICArCXNldF9ub2RlKG5vZGUs
IG1lbnUsIHJvdyk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICsvKiBGaW5kIGEgbm9kZSBp
biB0aGUgR1RLKyB0cmVlICovDQogICAgK3N0YXRpYyBHdGtUcmVlSXRlciBmb3VuZDsNCiAgICAr
DQogICAgKy8qDQogICAgKyAqIEZpbmQgYSBtZW51IGluIHRoZSBHdGtUcmVlIHN0YXJ0aW5nIGF0
IHBhcmVudC4NCiAgICArICovDQogICAgK3N0YXRpYyBHdGtUcmVlSXRlciAqZ3RrdHJlZV9pdGVy
X2ZpbmRfbm9kZShHdGtUcmVlSXRlciAqcGFyZW50LA0KICAgICsJCQkJCSAgIHN0cnVjdCBtZW51
ICp0b2ZpbmQpDQogICAgK3sNCiAgICArCUd0a1RyZWVJdGVyIGl0ZXI7DQogICAgKwlHdGtUcmVl
SXRlciAqY2hpbGQgPSAmaXRlcjsNCiAgICArCWdib29sZWFuIHZhbGlkOw0KICAgICsJR3RrVHJl
ZUl0ZXIgKnJldDsNCiAgICArDQogICAgKwl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfY2hp
bGRyZW4obW9kZWwyLCBjaGlsZCwgcGFyZW50KTsNCiAgICArCXdoaWxlICh2YWxpZCkgew0KICAg
ICsJCXN0cnVjdCBtZW51ICptZW51Ow0KICAgICsNCiAgICArCQlndGtfdHJlZV9tb2RlbF9nZXQo
bW9kZWwyLCBjaGlsZCwgNiwgJm1lbnUsIC0xKTsNCiAgICArDQogICAgKwkJaWYgKG1lbnUgPT0g
dG9maW5kKSB7DQogICAgKwkJCW1lbWNweSgmZm91bmQsIGNoaWxkLCBzaXplb2YoR3RrVHJlZUl0
ZXIpKTsNCiAgICArCQkJcmV0dXJuICZmb3VuZDsNCiAgICArCQl9DQogICAgKw0KICAgICsJCXJl
dCA9IGd0a3RyZWVfaXRlcl9maW5kX25vZGUoY2hpbGQsIHRvZmluZCk7DQogICAgKwkJaWYgKHJl
dCkNCiAgICArCQkJcmV0dXJuIHJldDsNCiAgICArDQogICAgKwkJdmFsaWQgPSBndGtfdHJlZV9t
b2RlbF9pdGVyX25leHQobW9kZWwyLCBjaGlsZCk7DQogICAgKwl9DQogICAgKw0KICAgICsJcmV0
dXJuIE5VTEw7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICsvKg0KICAgICsgKiBVcGRhdGUg
dGhlIHRyZWUgYnkgYWRkaW5nL3JlbW92aW5nIGVudHJpZXMNCiAgICArICogRG9lcyBub3QgY2hh
bmdlIG90aGVyIG5vZGVzDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCB1cGRhdGVfdHJlZShz
dHJ1Y3QgbWVudSAqc3JjLCBHdGtUcmVlSXRlciAqIGRzdCkNCiAgICArew0KICAgICsJc3RydWN0
IG1lbnUgKmNoaWxkMTsNCiAgICArCUd0a1RyZWVJdGVyIGl0ZXIsIHRtcDsNCiAgICArCUd0a1Ry
ZWVJdGVyICpjaGlsZDIgPSAmaXRlcjsNCiAgICArCWdib29sZWFuIHZhbGlkOw0KICAgICsJR3Rr
VHJlZUl0ZXIgKnNpYmxpbmc7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1
Y3QgbWVudSAqbWVudTEsICptZW51MjsNCiAgICArDQogICAgKwlpZiAoc3JjID09ICZyb290bWVu
dSkNCiAgICArCQlpbmRlbnQgPSAxOw0KICAgICsNCiAgICArCXZhbGlkID0gZ3RrX3RyZWVfbW9k
ZWxfaXRlcl9jaGlsZHJlbihtb2RlbDIsIGNoaWxkMiwgZHN0KTsNCiAgICArCWZvciAoY2hpbGQx
ID0gc3JjLT5saXN0OyBjaGlsZDE7IGNoaWxkMSA9IGNoaWxkMS0+bmV4dCkgew0KICAgICsNCiAg
ICArCQlzeW0gPSBjaGlsZDEtPnN5bTsNCiAgICArDQogICAgKwkgICAgICByZXBhcnNlOg0KICAg
ICsJCW1lbnUxID0gY2hpbGQxOw0KICAgICsJCWlmICh2YWxpZCkNCiAgICArCQkJZ3RrX3RyZWVf
bW9kZWxfZ2V0KG1vZGVsMiwgY2hpbGQyLCBDT0xfTUVOVSwNCiAgICArCQkJCQkgICAmbWVudTIs
IC0xKTsNCiAgICArCQllbHNlDQogICAgKwkJCW1lbnUyID0gTlVMTDsJLy8gZm9yY2UgYWRkaW5n
IG9mIGEgZmlyc3QgY2hpbGQNCiAgICArDQogICAgKyNpZmRlZiBERUJVRw0KICAgICsJCXByaW50
ZigiJSpjJXMgfCAlc1xuIiwgaW5kZW50LCAnICcsDQogICAgKwkJICAgICAgIG1lbnUxID8gbWVu
dV9nZXRfcHJvbXB0KG1lbnUxKSA6ICJuaWwiLA0KICAgICsJCSAgICAgICBtZW51MiA/IG1lbnVf
Z2V0X3Byb21wdChtZW51MikgOiAibmlsIik7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArCQlp
ZiAoKG9wdF9tb2RlID09IE9QVF9OT1JNQUwgJiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZDEpKSB8
fA0KICAgICsJCSAgICAob3B0X21vZGUgPT0gT1BUX1BST01QVCAmJiAhbWVudV9oYXNfcHJvbXB0
KGNoaWxkMSkpIHx8DQogICAgKwkJICAgIChvcHRfbW9kZSA9PSBPUFRfQUxMICAgICYmICFtZW51
X2dldF9wcm9tcHQoY2hpbGQxKSkpIHsNCiAgICArDQogICAgKwkJCS8qIHJlbW92ZSBub2RlICov
DQogICAgKwkJCWlmIChndGt0cmVlX2l0ZXJfZmluZF9ub2RlKGRzdCwgbWVudTEpICE9IE5VTEwp
IHsNCiAgICArCQkJCW1lbWNweSgmdG1wLCBjaGlsZDIsIHNpemVvZihHdGtUcmVlSXRlcikpOw0K
ICAgICsJCQkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQobW9kZWwyLA0KICAgICsJ
CQkJCQkJCSBjaGlsZDIpOw0KICAgICsJCQkJZ3RrX3RyZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAm
dG1wKTsNCiAgICArCQkJCWlmICghdmFsaWQpDQogICAgKwkJCQkJcmV0dXJuOwkJLyogbmV4dCBw
YXJlbnQgKi8NCiAgICArCQkJCWVsc2UNCiAgICArCQkJCQlnb3RvIHJlcGFyc2U7CS8qIG5leHQg
Y2hpbGQgKi8NCiAgICArCQkJfSBlbHNlDQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQl9DQog
ICAgKw0KICAgICsJCWlmIChtZW51MSAhPSBtZW51Mikgew0KICAgICsJCQlpZiAoZ3RrdHJlZV9p
dGVyX2ZpbmRfbm9kZShkc3QsIG1lbnUxKSA9PSBOVUxMKSB7CS8vIGFkZCBub2RlDQogICAgKwkJ
CQlpZiAoIXZhbGlkICYmICFtZW51MikNCiAgICArCQkJCQlzaWJsaW5nID0gTlVMTDsNCiAgICAr
CQkJCWVsc2UNCiAgICArCQkJCQlzaWJsaW5nID0gY2hpbGQyOw0KICAgICsJCQkJZ3RrX3RyZWVf
c3RvcmVfaW5zZXJ0X2JlZm9yZSh0cmVlMiwNCiAgICArCQkJCQkJCSAgICAgY2hpbGQyLA0KICAg
ICsJCQkJCQkJICAgICBkc3QsIHNpYmxpbmcpOw0KICAgICsJCQkJc2V0X25vZGUoY2hpbGQyLCBt
ZW51MSwgZmlsbF9yb3cobWVudTEpKTsNCiAgICArCQkJCWlmIChtZW51MiA9PSBOVUxMKQ0KICAg
ICsJCQkJCXZhbGlkID0gVFJVRTsNCiAgICArCQkJfSBlbHNlIHsJLy8gcmVtb3ZlIG5vZGUNCiAg
ICArCQkJCW1lbWNweSgmdG1wLCBjaGlsZDIsIHNpemVvZihHdGtUcmVlSXRlcikpOw0KICAgICsJ
CQkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQobW9kZWwyLA0KICAgICsJCQkJCQkJ
CSBjaGlsZDIpOw0KICAgICsJCQkJZ3RrX3RyZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAmdG1wKTsN
CiAgICArCQkJCWlmICghdmFsaWQpDQogICAgKwkJCQkJcmV0dXJuOwkvLyBuZXh0IHBhcmVudA0K
ICAgICsJCQkJZWxzZQ0KICAgICsJCQkJCWdvdG8gcmVwYXJzZTsJLy8gbmV4dCBjaGlsZA0KICAg
ICsJCQl9DQogICAgKwkJfSBlbHNlIGlmIChzeW0gJiYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hB
TkdFRCkpIHsNCiAgICArCQkJc2V0X25vZGUoY2hpbGQyLCBtZW51MSwgZmlsbF9yb3cobWVudTEp
KTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCWluZGVudCsrOw0KICAgICsJCXVwZGF0ZV90cmVl
KGNoaWxkMSwgY2hpbGQyKTsNCiAgICArCQlpbmRlbnQtLTsNCiAgICArDQogICAgKwkJdmFsaWQg
PSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQobW9kZWwyLCBjaGlsZDIpOw0KICAgICsJfQ0KICAg
ICt9DQogICAgKw0KICAgICsNCiAgICArLyogRGlzcGxheSB0aGUgd2hvbGUgdHJlZSAoc2luZ2xl
L3NwbGl0L2Z1bGwgdmlldykgKi8NCiAgICArc3RhdGljIHZvaWQgZGlzcGxheV90cmVlKHN0cnVj
dCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlz
dHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgKwll
bnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICArDQogICAgKwlpZiAobWVudSA9PSAmcm9vdG1lbnUp
IHsNCiAgICArCQlpbmRlbnQgPSAxOw0KICAgICsJCWN1cnJlbnQgPSAmcm9vdG1lbnU7DQogICAg
Kwl9DQogICAgKw0KICAgICsJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0KSB7DQogICAgKwkJcHJvcCA9IGNoaWxkLT5wcm9tcHQ7DQogICAgKwkJc3lt
ID0gY2hpbGQtPnN5bTsNCiAgICArCQlwdHlwZSA9IHByb3AgPyBwcm9wLT50eXBlIDogUF9VTktO
T1dOOw0KICAgICsNCiAgICArCQlpZiAoc3ltKQ0KICAgICsJCQlzeW0tPmZsYWdzICY9IH5TWU1C
T0xfQ0hBTkdFRDsNCiAgICArDQogICAgKwkJaWYgKCh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykN
CiAgICArCQkgICAgJiYgIShjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpICYmICh0cmVlID09IHRy
ZWUxKSkNCiAgICArCQkJY29udGludWU7DQogICAgKw0KICAgICsJCWlmICgodmlld19tb2RlID09
IFNQTElUX1ZJRVcpICYmIChjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpDQogICAgKwkJICAgICYm
ICh0cmVlID09IHRyZWUyKSkNCiAgICArCQkJY29udGludWU7DQogICAgKw0KICAgICsJCWlmICgo
b3B0X21vZGUgPT0gT1BUX05PUk1BTCAmJiBtZW51X2lzX3Zpc2libGUoY2hpbGQpKSB8fA0KICAg
ICsJCSAgICAob3B0X21vZGUgPT0gT1BUX1BST01QVCAmJiBtZW51X2hhc19wcm9tcHQoY2hpbGQp
KSB8fA0KICAgICsJCSAgICAob3B0X21vZGUgPT0gT1BUX0FMTCAgICAmJiBtZW51X2dldF9wcm9t
cHQoY2hpbGQpKSkNCiAgICArCQkJcGxhY2Vfbm9kZShjaGlsZCwgZmlsbF9yb3coY2hpbGQpKTsN
CiAgICArI2lmZGVmIERFQlVHDQogICAgKwkJcHJpbnRmKCIlKmMlczogIiwgaW5kZW50LCAnICcs
IG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOw0KICAgICsJCXByaW50ZigiJXMiLCBjaGlsZC0+Zmxh
Z3MgJiBNRU5VX1JPT1QgPyAicm9vdG1lbnUgfCAiIDogIiIpOw0KICAgICsJCXByaW50ZigiJXMi
LCBwcm9wX2dldF90eXBlX25hbWUocHR5cGUpKTsNCiAgICArCQlwcmludGYoIiB8ICIpOw0KICAg
ICsJCWlmIChzeW0pIHsNCiAgICArCQkJcHJpbnRmKCIlcyIsIHN5bV90eXBlX25hbWUoc3ltLT50
eXBlKSk7DQogICAgKwkJCXByaW50ZigiIHwgIik7DQogICAgKwkJCXByaW50ZigiJXMiLCBkYmdf
c3ltX2ZsYWdzKHN5bS0+ZmxhZ3MpKTsNCiAgICArCQkJcHJpbnRmKCJcbiIpOw0KICAgICsJCX0g
ZWxzZQ0KICAgICsJCQlwcmludGYoIlxuIik7DQogICAgKyNlbmRpZg0KICAgICsJCWlmICgodmll
d19tb2RlICE9IEZVTExfVklFVykgJiYgKHB0eXBlID09IFBfTUVOVSkNCiAgICArCQkgICAgJiYg
KHRyZWUgPT0gdHJlZTIpKQ0KICAgICsJCQljb250aW51ZTsNCiAgICArLyoNCiAgICArCQlpZiAo
KChtZW51ICE9ICZyb290bWVudSkgJiYgIShtZW51LT5mbGFncyAmIE1FTlVfUk9PVCkpDQogICAg
KwkJICAgIHx8ICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQ0KICAgICsJCSAgICB8fCAodmlld19t
b2RlID09IFNQTElUX1ZJRVcpKSovDQogICAgKw0KICAgICsJCS8qIENoYW5nZSBwYW5lZCBwb3Np
dGlvbiBpZiB0aGUgdmlldyBpcyBub3QgaW4gJ3NwbGl0IG1vZGUnICovDQogICAgKwkJaWYgKHZp
ZXdfbW9kZSA9PSBTSU5HTEVfVklFVyB8fCB2aWV3X21vZGUgPT0gRlVMTF9WSUVXKSB7DQogICAg
KwkJCWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKGhwYW5lZCksIDApOw0KICAgICsJ
CX0NCiAgICArDQogICAgKwkJaWYgKCgodmlld19tb2RlID09IFNJTkdMRV9WSUVXKSAmJiAobWVu
dS0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQ0KICAgICsJCSAgICB8fCAodmlld19tb2RlID09IEZVTExf
VklFVykNCiAgICArCQkgICAgfHwgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSkgew0KICAgICsJ
CQlpbmRlbnQrKzsNCiAgICArCQkJZGlzcGxheV90cmVlKGNoaWxkKTsNCiAgICArCQkJaW5kZW50
LS07DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKiBEaXNwbGF5IGEg
cGFydCBvZiB0aGUgdHJlZSBzdGFydGluZyBhdCBjdXJyZW50IG5vZGUgKHNpbmdsZS9zcGxpdCB2
aWV3KSAqLw0KICAgICtzdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lkKQ0KICAgICt7
DQogICAgKwlpZiAodHJlZTIpDQogICAgKwkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0K
ICAgICsJaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykNCiAgICArCQlkaXNwbGF5X3RyZWUo
Y3VycmVudCk7DQogICAgKwllbHNlIGlmICh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykNCiAgICAr
CQlkaXNwbGF5X3RyZWUoYnJvd3NlZCk7DQogICAgKwlndGtfdHJlZV92aWV3X2V4cGFuZF9hbGwo
R1RLX1RSRUVfVklFVyh0cmVlMl93KSk7DQogICAgK30NCiAgICArDQogICAgKy8qIERpc3BsYXkg
dGhlIGxpc3QgaW4gdGhlIGxlZnQgZnJhbWUgKHNwbGl0IHZpZXcpICovDQogICAgK3N0YXRpYyB2
b2lkIGRpc3BsYXlfbGlzdCh2b2lkKQ0KICAgICt7DQogICAgKwlpZiAodHJlZTEpDQogICAgKwkJ
Z3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTEpOw0KICAgICsNCiAgICArCXRyZWUgPSB0cmVlMTsN
CiAgICArCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOw0KICAgICsJZ3RrX3RyZWVfdmlld19leHBh
bmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTFfdykpOw0KICAgICsJdHJlZSA9IHRyZWUyOw0KICAg
ICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAq
bWVudSkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsJc3RhdGljIGlu
dCBtZW51X2NudCA9IDA7DQogICAgKw0KICAgICsJbWVudS0+ZmxhZ3MgfD0gTUVOVV9ST09UOw0K
ICAgICsJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0
KSB7DQogICAgKwkJaWYgKGNoaWxkLT5wcm9tcHQgJiYgY2hpbGQtPnByb21wdC0+dHlwZSA9PSBQ
X01FTlUpIHsNCiAgICArCQkJbWVudV9jbnQrKzsNCiAgICArCQkJZml4dXBfcm9vdG1lbnUoY2hp
bGQpOw0KICAgICsJCQltZW51X2NudC0tOw0KICAgICsJCX0gZWxzZSBpZiAoIW1lbnVfY250KQ0K
ICAgICsJCQlmaXh1cF9yb290bWVudShjaGlsZCk7DQogICAgKwl9DQogICAgK30NCiAgICArDQog
ICAgKw0KICAgICsvKiBNYWluICovDQogICAgK2ludCBtYWluKGludCBhYywgY2hhciAqYXZbXSkN
CiAgICArew0KICAgICsJY29uc3QgY2hhciAqbmFtZTsNCiAgICArCWNoYXIgKmVudjsNCiAgICAr
CWdjaGFyICpnbGFkZV9maWxlOw0KICAgICsNCiAgICArCS8qIEdUSyBzdHVmZnMgKi8NCiAgICAr
CWd0a19zZXRfbG9jYWxlKCk7DQogICAgKwlndGtfaW5pdCgmYWMsICZhdik7DQogICAgKwlnbGFk
ZV9pbml0KCk7DQogICAgKw0KICAgICsJLy9hZGRfcGl4bWFwX2RpcmVjdG9yeSAoUEFDS0FHRV9E
QVRBX0RJUiAiLyIgUEFDS0FHRSAiL3BpeG1hcHMiKTsNCiAgICArCS8vYWRkX3BpeG1hcF9kaXJl
Y3RvcnkgKFBBQ0tBR0VfU09VUkNFX0RJUiAiL3BpeG1hcHMiKTsNCiAgICArDQogICAgKwkvKiBE
ZXRlcm1pbmUgR1VJIHBhdGggKi8NCiAgICArCWVudiA9IGdldGVudihTUkNUUkVFKTsNCiAgICAr
CWlmIChlbnYpDQogICAgKwkJZ2xhZGVfZmlsZSA9IGdfc3RyY29uY2F0KGVudiwgIi9zY3JpcHRz
L2tjb25maWcvZ2NvbmYuZ2xhZGUiLCBOVUxMKTsNCiAgICArCWVsc2UgaWYgKGF2WzBdWzBdID09
ICcvJykNCiAgICArCQlnbGFkZV9maWxlID0gZ19zdHJjb25jYXQoYXZbMF0sICIuZ2xhZGUiLCBO
VUxMKTsNCiAgICArCWVsc2UNCiAgICArCQlnbGFkZV9maWxlID0gZ19zdHJjb25jYXQoZ19nZXRf
Y3VycmVudF9kaXIoKSwgIi8iLCBhdlswXSwgIi5nbGFkZSIsIE5VTEwpOw0KICAgICsNCiAgICAr
CS8qIENvbmYgc3R1ZmZzICovDQogICAgKwlpZiAoYWMgPiAxICYmIGF2WzFdWzBdID09ICctJykg
ew0KICAgICsJCXN3aXRjaCAoYXZbMV1bMV0pIHsNCiAgICArCQljYXNlICdhJzoNCiAgICArCQkJ
Ly9zaG93QWxsID0gMTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAncyc6DQogICAgKwkJ
CWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CWNhc2UgJ2gnOg0KICAgICsJCWNhc2UgJz8nOg0KICAgICsJCQlwcmludGYoIiVzIFstc10gPGNv
bmZpZz5cbiIsIGF2WzBdKTsNCiAgICArCQkJZXhpdCgwKTsNCiAgICArCQl9DQogICAgKwkJbmFt
ZSA9IGF2WzJdOw0KICAgICsJfSBlbHNlDQogICAgKwkJbmFtZSA9IGF2WzFdOw0KICAgICsNCiAg
ICArCWNvbmZfcGFyc2UobmFtZSk7DQogICAgKwlmaXh1cF9yb290bWVudSgmcm9vdG1lbnUpOw0K
ICAgICsJY29uZl9yZWFkKE5VTEwpOw0KICAgICsNCiAgICArCS8qIExvYWQgdGhlIGludGVyZmFj
ZSBhbmQgY29ubmVjdCBzaWduYWxzICovDQogICAgKwlpbml0X21haW5fd2luZG93KGdsYWRlX2Zp
bGUpOw0KICAgICsJaW5pdF90cmVlX21vZGVsKCk7DQogICAgKwlpbml0X2xlZnRfdHJlZSgpOw0K
ICAgICsJaW5pdF9yaWdodF90cmVlKCk7DQogICAgKw0KICAgICsJc3dpdGNoICh2aWV3X21vZGUp
IHsNCiAgICArCWNhc2UgU0lOR0xFX1ZJRVc6DQogICAgKwkJZGlzcGxheV90cmVlX3BhcnQoKTsN
CiAgICArCQlicmVhazsNCiAgICArCWNhc2UgU1BMSVRfVklFVzoNCiAgICArCQlkaXNwbGF5X2xp
c3QoKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRlVMTF9WSUVXOg0KICAgICsJCWRpc3Bs
YXlfdHJlZSgmcm9vdG1lbnUpOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICAr
CWd0a19tYWluKCk7DQogICAgKw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKQ0KICAgICt7DQogICAgKwlib29sIGNoYW5n
ZWQgPSBjb25mX2dldF9jaGFuZ2VkKCk7DQogICAgKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUo
c2F2ZV9idG4sIGNoYW5nZWQpOw0KICAgICsJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHNhdmVf
bWVudV9pdGVtLCBjaGFuZ2VkKTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L2djb25mLmdsYWRlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQ0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYWE0ODNjYg0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRl
DQogICAgQEAgLTAsMCArMSw2NjEgQEANCiAgICArPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFs
b25lPSJubyI/PiA8IS0tKi0gbW9kZTogeG1sIC0qLS0+DQogICAgKw0KICAgICs8Z2xhZGUtaW50
ZXJmYWNlPg0KICAgICsNCiAgICArPHdpZGdldCBjbGFzcz0iR3RrV2luZG93IiBpZD0id2luZG93
MSI+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAg
ICsgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0ayBLZXJuZWwg
Q29uZmlndXJhdG9yPC9wcm9wZXJ0eT4NCiAgICArICA8cHJvcGVydHkgbmFtZT0idHlwZSI+R1RL
X1dJTkRPV19UT1BMRVZFTDwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9IndpbmRv
d19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfTk9ORTwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5
IG5hbWU9Im1vZGFsIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9ImRl
ZmF1bHRfd2lkdGgiPjY0MDwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9ImRlZmF1
bHRfaGVpZ2h0Ij40ODA8L3Byb3BlcnR5Pg0KICAgICsgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemFi
bGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsgIDxwcm9wZXJ0eSBuYW1lPSJkZXN0cm95X3dpdGhf
cGFyZW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9ImRlY29yYXRl
ZCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9InNraXBfdGFza2Jhcl9o
aW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9InNraXBfcGFnZXJf
aGludCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlX2hpbnQi
PkdES19XSU5ET1dfVFlQRV9ISU5UX05PUk1BTDwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5
IG5hbWU9ImdyYXZpdHkiPkdES19HUkFWSVRZX05PUlRIX1dFU1Q8L3Byb3BlcnR5Pg0KICAgICsg
IDxzaWduYWwgbmFtZT0iZGVzdHJveSIgaGFuZGxlcj0ib25fd2luZG93MV9kZXN0cm95IiBvYmpl
Y3Q9IndpbmRvdzEiLz4NCiAgICArICA8c2lnbmFsIG5hbWU9InNpemVfcmVxdWVzdCIgaGFuZGxl
cj0ib25fd2luZG93MV9zaXplX3JlcXVlc3QiIG9iamVjdD0idnBhbmVkMSIgbGFzdF9tb2RpZmlj
YXRpb25fdGltZT0iRnJpLCAxMSBKYW4gMjAwMiAxNjoxNzoxMSBHTVQiLz4NCiAgICArICA8c2ln
bmFsIG5hbWU9ImRlbGV0ZV9ldmVudCIgaGFuZGxlcj0ib25fd2luZG93MV9kZWxldGVfZXZlbnQi
IG9iamVjdD0id2luZG93MSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAwOSBNYXIgMjAw
MyAxOTo0Mjo0NiBHTVQiLz4NCiAgICArDQogICAgKyAgPGNoaWxkPg0KICAgICsgICAgPHdpZGdl
dCBjbGFzcz0iR3RrVkJveCIgaWQ9InZib3gxIj4NCiAgICArICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsgICAgICA8cHJvcGVydHkgbmFtZT0iaG9t
b2dlbmVvdXMiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArICAgICAgPHByb3BlcnR5IG5hbWU9InNw
YWNpbmciPjA8L3Byb3BlcnR5Pg0KICAgICsNCiAgICArICAgICAgPGNoaWxkPg0KICAgICsJPHdp
ZGdldCBjbGFzcz0iR3RrTWVudUJhciIgaWQ9Im1lbnViYXIxIj4NCiAgICArCSAgPHByb3BlcnR5
IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsNCiAgICArCSAgPGNoaWxkPg0K
ICAgICsJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a01lbnVJdGVtIiBpZD0iZmlsZTEiPg0KICAgICsJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICAg
ICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0ZpbGU8L3Byb3Bl
cnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4NCiAgICArCQk8d2lkZ2V0IGNsYXNz
PSJHdGtNZW51IiBpZD0iZmlsZTFfbWVudSI+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAg
ICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ibG9hZDEiPg0KICAg
ICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAr
CQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxvYWQg
YSBjb25maWcgZmlsZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imxh
YmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0xvYWQ8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAg
ICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9sb2FkMV9hY3RpdmF0ZSIvPg0K
ICAgICsJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IkwiIG1vZGlmaWVycz0iR0RLX0NPTlRST0xf
TUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPg0KICAgICsNCiAgICArCQkgICAgICA8Y2hpbGQgaW50
ZXJuYWwtY2hpbGQ9ImltYWdlIj4NCiAgICArCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlk
PSJpbWFnZTM5Ij4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJv
cGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstb3BlbjwvcHJvcGVy
dHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+DQog
ICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICArCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0i
eXBhZCI+MDwvcHJvcGVydHk+DQogICAgKwkJCTwvd2lkZ2V0Pg0KICAgICsJCSAgICAgIDwvY2hp
bGQ+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArDQogICAg
KwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0i
IGlkPSJzYXZlMSI+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xh
dGFibGU9InllcyI+U2F2ZSB0aGUgY29uZmlnIGluIC5jb25maWc8L3Byb3BlcnR5Pg0KICAgICsJ
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9TYXZlPC9w
cm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxl
cj0ib25fc2F2ZV9hY3RpdmF0ZSIvPg0KICAgICsJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IlMi
IG1vZGlmaWVycz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPg0KICAgICsN
CiAgICArCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4NCiAgICArCQkJPHdp
ZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQwIj4NCiAgICArCQkJICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9
InN0b2NrIj5ndGstc2F2ZTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9Imlj
b25fc2l6ZSI+MTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+
MC41PC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3By
b3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4NCiAg
ICArCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAgKwkJCTwvd2lk
Z2V0Pg0KICAgICsJCSAgICAgIDwvY2hpbGQ+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJ
CSAgPC9jaGlsZD4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQg
Y2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJzYXZlX2FzMSI+DQogICAgKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZSB0aGUgY29uZmlnIGlu
IGEgZmlsZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0
cmFuc2xhdGFibGU9InllcyI+U2F2ZSBfYXM8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8
c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zYXZlX2FzMV9hY3RpdmF0ZSIvPg0K
ICAgICsNCiAgICArCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4NCiAgICAr
CQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQxIj4NCiAgICArCQkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5
IG5hbWU9InN0b2NrIj5ndGstc2F2ZS1hczwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5
IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9
InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWdu
Ij4wLjU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9w
ZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAg
KwkJCTwvd2lkZ2V0Pg0KICAgICsJCSAgICAgIDwvY2hpbGQ+DQogICAgKwkJICAgIDwvd2lkZ2V0
Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAg
IDx3aWRnZXQgY2xhc3M9Ikd0a1NlcGFyYXRvck1lbnVJdGVtIiBpZD0ic2VwYXJhdG9yMSI+DQog
ICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAg
ICsJCSAgICA8L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJCSAgPGNo
aWxkPg0KICAgICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0icXVp
dDEiPg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVz
Ij5fUXVpdDwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRl
cmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZh
dGUiIGhhbmRsZXI9Im9uX3F1aXQxX2FjdGl2YXRlIi8+DQogICAgKwkJICAgICAgPGFjY2VsZXJh
dG9yIGtleT0iUSIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRl
Ii8+DQogICAgKw0KICAgICsJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPg0K
ICAgICsJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDIiPg0KICAgICsJCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJv
cGVydHkgbmFtZT0ic3RvY2siPmd0ay1xdWl0PC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVy
dHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFt
ZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxp
Z24iPjAuNTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3By
b3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4NCiAg
ICArCQkJPC93aWRnZXQ+DQogICAgKwkJICAgICAgPC9jaGlsZD4NCiAgICArCQkgICAgPC93aWRn
ZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJICAgICAgPC9j
aGlsZD4NCiAgICArCSAgICA8L3dpZGdldD4NCiAgICArCSAgPC9jaGlsZD4NCiAgICArDQogICAg
KwkgIDxjaGlsZD4NCiAgICArCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9Im9w
dGlvbnMxIj4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5
ZXMiPl9PcHRpb25zPC9wcm9wZXJ0eT4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vf
dW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArDQogICAgKwkgICAgICA8Y2hpbGQ+DQog
ICAgKwkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9Im9wdGlvbnMxX21lbnUiPg0KICAgICsN
CiAgICArCQkgIDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51
SXRlbSIgaWQ9InNob3dfbmFtZTEiPg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgbmFtZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfbmFtZTwvcHJv
cGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPkZhbHNlPC9w
cm9wZXJ0eT4NCiAgICArCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJv
bl9zaG93X25hbWUxX2FjdGl2YXRlIi8+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAg
PC9jaGlsZD4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xh
c3M9Ikd0a0NoZWNrTWVudUl0ZW0iIGlkPSJzaG93X3JhbmdlMSI+DQogICAgKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyByYW5nZSAoWS9NL04p
PC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0
YWJsZT0ieWVzIj5TaG93IF9yYW5nZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJhY3RpdmUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8c2lnbmFs
IG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zaG93X3JhbmdlMV9hY3RpdmF0ZSIvPg0KICAg
ICsJCSAgICA8L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJCSAgPGNo
aWxkPg0KICAgICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDaGVja01lbnVJdGVtIiBpZD0ic2hv
d19kYXRhMSI+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFi
bGU9InllcyI+U2hvdyB2YWx1ZSBvZiB0aGUgb3B0aW9uPC9wcm9wZXJ0eT4NCiAgICArCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IF9kYXRhPC9w
cm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8
L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9
Im9uX3Nob3dfZGF0YTFfYWN0aXZhdGUiLz4NCiAgICArCQkgICAgPC93aWRnZXQ+DQogICAgKwkJ
ICA8L2NoaWxkPg0KICAgICsNCiAgICArCQkgIDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBj
bGFzcz0iR3RrU2VwYXJhdG9yTWVudUl0ZW0iIGlkPSJzZXBhcmF0b3IyIj4NCiAgICArCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgIDwv
d2lkZ2V0Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAg
KwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1JhZGlvTWVudUl0ZW0iIGlkPSJzZXRfb3B0aW9uX21v
ZGUxIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0i
eWVzIj5TaG93IG5vcm1hbCBvcHRpb25zPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IG5vcm1hbCBvcHRpb25zPC9w
cm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+VHJ1ZTwv
cHJvcGVydHk+DQogICAgKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0i
b25fc2V0X29wdGlvbl9tb2RlMV9hY3RpdmF0ZSIvPg0KICAgICsJCSAgICA8L3dpZGdldD4NCiAg
ICArCQkgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAgICsJCSAgICA8d2lk
Z2V0IGNsYXNzPSJHdGtSYWRpb01lbnVJdGVtIiBpZD0ic2V0X29wdGlvbl9tb2RlMiI+DQogICAg
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJ
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBh
bGwgb3B0aW9uczwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVs
IiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBhbGwgX29wdGlvbnM8L3Byb3BlcnR5Pg0KICAgICsJ
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+DQogICAg
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imdyb3VwIj5zZXRfb3B0aW9uX21vZGUxPC9wcm9wZXJ0
eT4NCiAgICArCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zZXRf
b3B0aW9uX21vZGUyX2FjdGl2YXRlIi8+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAg
PC9jaGlsZD4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xh
c3M9Ikd0a1JhZGlvTWVudUl0ZW0iIGlkPSJzZXRfb3B0aW9uX21vZGUzIj4NCiAgICArCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBvcHRp
b25zIHdpdGggcHJvbXB0czwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBhbGwgcHJvbXB0IG9wdGlvbnM8L3Byb3Bl
cnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9w
cm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJv
cGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imdyb3VwIj5zZXRfb3B0aW9uX21v
ZGUxPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5k
bGVyPSJvbl9zZXRfb3B0aW9uX21vZGUzX2FjdGl2YXRlIi8+DQogICAgKwkJICAgIDwvd2lkZ2V0
Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArDQogICAgKwkJPC93aWRnZXQ+DQogICAgKwkgICAg
ICA8L2NoaWxkPg0KICAgICsJICAgIDwvd2lkZ2V0Pg0KICAgICsJICA8L2NoaWxkPg0KICAgICsN
CiAgICArCSAgPGNoaWxkPg0KICAgICsJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a01lbnVJdGVtIiBp
ZD0iaGVscDEiPg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9
InllcyI+X0hlbHA8L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91
bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4NCiAg
ICArCQk8d2lkZ2V0IGNsYXNzPSJHdGtNZW51IiBpZD0iaGVscDFfbWVudSI+DQogICAgKw0KICAg
ICsJCSAgPGNoaWxkPg0KICAgICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVt
IiBpZD0iaW50cm9kdWN0aW9uMSI+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIg
dHJhbnNsYXRhYmxlPSJ5ZXMiPl9JbnRyb2R1Y3Rpb248L3Byb3BlcnR5Pg0KICAgICsJCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkg
ICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9pbnRyb2R1Y3Rpb24xX2Fj
dGl2YXRlIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDE1IE5vdiAyMDAyIDIwOjI2OjMw
IEdNVCIvPg0KICAgICsJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IkkiIG1vZGlmaWVycz0iR0RL
X0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPg0KICAgICsNCiAgICArCQkgICAgICA8
Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4NCiAgICArCQkJPHdpZGdldCBjbGFzcz0iR3Rr
SW1hZ2UiIGlkPSJpbWFnZTQzIj4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstZGlh
bG9nLXF1ZXN0aW9uPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9z
aXplIj4xPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8
L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVy
dHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJ
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICArCQkJPC93aWRnZXQ+
DQogICAgKwkJICAgICAgPC9jaGlsZD4NCiAgICArCQkgICAgPC93aWRnZXQ+DQogICAgKwkJICA8
L2NoaWxkPg0KICAgICsNCiAgICArCQkgIDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBjbGFz
cz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9ImFib3V0MSI+DQogICAgKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9BYm91dDwvcHJvcGVydHk+DQogICAgKwkJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAg
ICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2Fib3V0MV9hY3Rp
dmF0ZSIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBH
TVQiLz4NCiAgICArCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJBIiBtb2RpZmllcnM9IkdES19D
T05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4NCiAgICArDQogICAgKwkJICAgICAgPGNo
aWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+DQogICAgKwkJCTx3aWRnZXQgY2xhc3M9Ikd0a0lt
YWdlIiBpZD0iaW1hZ2U0NCI+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXByb3Bl
cnRpZXM8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8
L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVy
dHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAg
ICArCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+DQogICAgKwkJCSAgPHBy
b3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJCQk8L3dpZGdldD4NCiAgICAr
CQkgICAgICA8L2NoaWxkPg0KICAgICsJCSAgICA8L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+
DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAgICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJ
bWFnZU1lbnVJdGVtIiBpZD0ibGljZW5zZTEiPg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
bGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fTGljZW5zZTwvcHJvcGVydHk+DQogICAgKwkJICAg
ICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJ
CSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX2xpY2Vuc2UxX2FjdGl2
YXRlIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDE1IE5vdiAyMDAyIDIwOjI2OjMwIEdN
VCIvPg0KICAgICsNCiAgICArCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4N
CiAgICArCQkJPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQ1Ij4NCiAgICArCQkJ
ICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHBy
b3BlcnR5IG5hbWU9InN0b2NrIj5ndGstanVzdGlmeS1maWxsPC9wcm9wZXJ0eT4NCiAgICArCQkJ
ICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJv
cGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9Inhw
YWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9w
ZXJ0eT4NCiAgICArCQkJPC93aWRnZXQ+DQogICAgKwkJICAgICAgPC9jaGlsZD4NCiAgICArCQkg
ICAgPC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJ
ICAgICAgPC9jaGlsZD4NCiAgICArCSAgICA8L3dpZGdldD4NCiAgICArCSAgPC9jaGlsZD4NCiAg
ICArCTwvd2lkZ2V0Pg0KICAgICsJPHBhY2tpbmc+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJw
YWRkaW5nIj4wPC9wcm9wZXJ0eT4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFs
c2U8L3Byb3BlcnR5Pg0KICAgICsJICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8L3Byb3Bl
cnR5Pg0KICAgICsJPC9wYWNraW5nPg0KICAgICsgICAgICA8L2NoaWxkPg0KICAgICsNCiAgICAr
ICAgICAgPGNoaWxkPg0KICAgICsJPHdpZGdldCBjbGFzcz0iR3RrSGFuZGxlQm94IiBpZD0iaGFu
ZGxlYm94MSI+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBlIj5HVEtfU0hBRE9XX09VVDwv
cHJvcGVydHk+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJoYW5kbGVfcG9zaXRpb24iPkdUS19Q
T1NfTEVGVDwvcHJvcGVydHk+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJzbmFwX2VkZ2UiPkdU
S19QT1NfVE9QPC9wcm9wZXJ0eT4NCiAgICArDQogICAgKwkgIDxjaGlsZD4NCiAgICArCSAgICA8
d2lkZ2V0IGNsYXNzPSJHdGtUb29sYmFyIiBpZD0idG9vbGJhcjEiPg0KICAgICsJICAgICAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3Bl
cnR5IG5hbWU9Im9yaWVudGF0aW9uIj5HVEtfT1JJRU5UQVRJT05fSE9SSVpPTlRBTDwvcHJvcGVy
dHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbGJhcl9zdHlsZSI+R1RLX1RPT0xC
QVJfQk9USDwvcHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcHMi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9InNob3dfYXJyb3ci
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4NCiAgICArCQk8d2lk
Z2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uMSI+DQogICAgKwkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFt
ZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkdvZXMgdXAgb2Ygb25lIGxldmVsIChzaW5n
bGUgdmlldyk8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFu
c2xhdGFibGU9InllcyI+QmFjazwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0i
dXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0i
c3RvY2tfaWQiPmd0ay11bmRvPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5
IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHNpZ25hbCBu
YW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9iYWNrX2NsaWNrZWQiLz4NCiAgICArCQk8L3dpZGdl
dD4NCiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZh
bHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAg
ICArDQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEl0
ZW0iIGlkPSJ0b29saXRlbTEiPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRh
bCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0
aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0
YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAgICsJCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjEiPg0KICAgICsJ
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkg
ICAgPC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJ
CTxwYWNraW5nPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3Bl
cnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxzZTwvcHJvcGVy
dHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAgICArDQogICAg
KwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9
ImJ1dHRvbjIiPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVz
Ij5Mb2FkIGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9
ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+TG9hZDwvcHJvcGVydHk+DQogICAgKwkJICA8cHJv
cGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJv
cGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1vcGVuPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAg
PHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJ
CSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJ
CSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9sb2FkX2NsaWNrZWQiLz4NCiAg
ICArCQk8L3dpZGdldD4NCiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1l
PSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21v
Z2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAg
PC9jaGlsZD4NCiAgICArDQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFz
cz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjMiPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0
aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZlIGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5Pg0KICAg
ICsJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2F2ZTwvcHJv
cGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJv
cGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1zYXZlPC9wcm9w
ZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFs
c2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJv
bl9zYXZlX2FjdGl2YXRlIi8+DQogICAgKwkJPC93aWRnZXQ+DQogICAgKwkJPHBhY2tpbmc+DQog
ICAgKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJ
ICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCTwv
cGFja2luZz4NCiAgICArCSAgICAgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJICAgICAgPGNoaWxk
Pg0KICAgICsJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0ZW0yIj4NCiAg
ICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5Pg0KICAg
ICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5Pg0K
ICAgICsNCiAgICArCQkgIDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlNl
cGFyYXRvciIgaWQ9InZzZXBhcmF0b3IyIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAg
PC9jaGlsZD4NCiAgICArCQk8L3dpZGdldD4NCiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxw
cm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0
eSBuYW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCTwvcGFja2luZz4N
CiAgICArCSAgICAgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJICAgICAgPGNoaWxkPg0KICAgICsJ
CTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b240Ij4NCiAgICArCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2luZ2xlIHZpZXc8L3Byb3BlcnR5
Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2lu
Z2xlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5U
cnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW1p
c3NpbmctaW1hZ2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVf
aG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0i
aXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICA8c2lnbmFsIG5hbWU9ImNs
aWNrZWQiIGhhbmRsZXI9Im9uX3NpbmdsZV9jbGlja2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1l
PSJTdW4sIDEyIEphbiAyMDAzIDE0OjI4OjM5IEdNVCIvPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAg
ICsJCTxwYWNraW5nPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3By
b3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICArCQk8L3BhY2tpbmc+DQogICAgKwkgICAgICA8L2NoaWxkPg0KICAgICsNCiAg
ICArCSAgICAgIDxjaGlsZD4NCiAgICArCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBp
ZD0iYnV0dG9uNSI+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJv
cGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5
ZXMiPlNwbGl0IHZpZXc8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVs
IiB0cmFuc2xhdGFibGU9InllcyI+U3BsaXQ8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5
IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5
IG5hbWU9InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVydHk+DQogICAgKwkJICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAr
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAg
ICArCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fc3BsaXRfY2xpY2tlZCIg
bGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODo0NSBHTVQiLz4N
CiAgICArCQk8L3dpZGdldD4NCiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBu
YW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJo
b21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAg
ICAgPC9jaGlsZD4NCiAgICArDQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBj
bGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjYiPg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InRv
b2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5GdWxsIHZpZXc8L3Byb3BlcnR5Pg0KICAgICsJCSAg
PHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+RnVsbDwvcHJvcGVydHk+
DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1taXNzaW5nLWltYWdlPC9w
cm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+
RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVy
PSJvbl9mdWxsX2NsaWNrZWQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIw
MDMgMTQ6Mjg6NTAgR01UIi8+DQogICAgKwkJPC93aWRnZXQ+DQogICAgKwkJPHBhY2tpbmc+DQog
ICAgKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJ
ICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCTwv
cGFja2luZz4NCiAgICArCSAgICAgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJICAgICAgPGNoaWxk
Pg0KICAgICsJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0ZW0zIj4NCiAg
ICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5Pg0KICAg
ICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5Pg0K
ICAgICsNCiAgICArCQkgIDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlNl
cGFyYXRvciIgaWQ9InZzZXBhcmF0b3IzIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAg
PC9jaGlsZD4NCiAgICArCQk8L3dpZGdldD4NCiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxw
cm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0
eSBuYW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCTwvcGFja2luZz4N
CiAgICArCSAgICAgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJICAgICAgPGNoaWxkPg0KICAgICsJ
CTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b243Ij4NCiAgICArCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+Q29sbGFwc2UgdGhlIHdob2xlIHRy
ZWUgaW4gdGhlIHJpZ2h0IGZyYW1lPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1l
PSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkNvbGxhcHNlPC9wcm9wZXJ0eT4NCiAgICArCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkg
IDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLXJlbW92ZTwvcHJvcGVydHk+DQogICAgKwkJ
ICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4N
CiAgICArCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fY29sbGFwc2VfY2xp
Y2tlZCIvPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxwYWNraW5nPg0KICAgICsJCSAgPHBy
b3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5
IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQk8L3BhY2tpbmc+DQog
ICAgKwkgICAgICA8L2NoaWxkPg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4NCiAgICArCQk8
d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uOCI+DQogICAgKwkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkg
bmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkV4cGFuZCB0aGUgd2hvbGUgdHJlZSBp
biB0aGUgcmlnaHQgZnJhbWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9Imxh
YmVsIiB0cmFuc2xhdGFibGU9InllcyI+RXhwYW5kPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLWFkZDwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkg
IDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkg
IDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fZXhwYW5kX2NsaWNrZWQiLz4NCiAg
ICArCQk8L3dpZGdldD4NCiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1l
PSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21v
Z2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAg
PC9jaGlsZD4NCiAgICArCSAgICA8L3dpZGdldD4NCiAgICArCSAgPC9jaGlsZD4NCiAgICArCTwv
d2lkZ2V0Pg0KICAgICsJPHBhY2tpbmc+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJwYWRkaW5n
Ij4wPC9wcm9wZXJ0eT4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3By
b3BlcnR5Pg0KICAgICsJICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+RmFsc2U8L3Byb3BlcnR5Pg0K
ICAgICsJPC9wYWNraW5nPg0KICAgICsgICAgICA8L2NoaWxkPg0KICAgICsNCiAgICArICAgICAg
PGNoaWxkPg0KICAgICsJPHdpZGdldCBjbGFzcz0iR3RrSFBhbmVkIiBpZD0iaHBhbmVkMSI+DQog
ICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJ3aWR0aF9yZXF1ZXN0Ij4xPC9wcm9wZXJ0eT4NCiAgICAr
CSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICA8cHJv
cGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCSAgPHByb3BlcnR5
IG5hbWU9InBvc2l0aW9uIj4wPC9wcm9wZXJ0eT4NCiAgICArDQogICAgKwkgIDxjaGlsZD4NCiAg
ICArCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2lu
ZG93MSI+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19Q
T0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5Pg0KICAgICsJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBlIj5HVEtfU0hBRE9XX0lOPC9wcm9wZXJ0
eT4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxhY2VtZW50Ij5HVEtfQ09S
TkVSX1RPUF9MRUZUPC9wcm9wZXJ0eT4NCiAgICArDQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAg
KwkJPHdpZGdldCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzEiPg0KICAgICsJCSAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3Bl
cnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkg
bmFtZT0iaGVhZGVyc192aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0
eSBuYW1lPSJydWxlc19oaW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkg
bmFtZT0icmVvcmRlcmFibGUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBu
YW1lPSJlbmFibGVfc2VhcmNoIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICA8c2lnbmFsIG5h
bWU9ImN1cnNvcl9jaGFuZ2VkIiBoYW5kbGVyPSJvbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQi
IGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTg6MjIgR01UIi8+
DQogICAgKwkJICA8c2lnbmFsIG5hbWU9ImJ1dHRvbl9wcmVzc19ldmVudCIgaGFuZGxlcj0ib25f
dHJlZXZpZXcxX2J1dHRvbl9wcmVzc19ldmVudCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3Vu
LCAxMiBKYW4gMjAwMyAxNjowMzo1MiBHTVQiLz4NCiAgICArCQkgIDxzaWduYWwgbmFtZT0ia2V5
X3ByZXNzX2V2ZW50IiBoYW5kbGVyPSJvbl90cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50IiBsYXN0
X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE2OjExOjQ0IEdNVCIvPg0KICAg
ICsJCTwvd2lkZ2V0Pg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAgICArCSAgICA8L3dpZGdldD4N
CiAgICArCSAgICA8cGFja2luZz4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+RmFs
c2U8L3Byb3BlcnR5Pg0KICAgICsJICAgIDwvcGFja2luZz4NCiAgICArCSAgPC9jaGlsZD4NCiAg
ICArDQogICAgKwkgIDxjaGlsZD4NCiAgICArCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWUGFuZWQi
IGlkPSJ2cGFuZWQxIj4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9InBvc2l0aW9uIj4wPC9wcm9w
ZXJ0eT4NCiAgICArDQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0i
R3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzIiPg0KICAgICsJCSAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+DQog
ICAgKwkJICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVU
T01BVElDPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJzaGFkb3dfdHlwZSI+
R1RLX1NIQURPV19JTjwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0id2luZG93
X3BsYWNlbWVudCI+R1RLX0NPUk5FUl9UT1BfTEVGVDwvcHJvcGVydHk+DQogICAgKw0KICAgICsJ
CSAgPGNoaWxkPg0KICAgICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtUcmVlVmlldyIgaWQ9InRy
ZWV2aWV3MiI+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoYXNfZm9jdXMiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoZWFkZXJzX3Zpc2libGUiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJydWxlc19oaW50Ij5G
YWxzZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InJlb3JkZXJhYmxl
Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImVuYWJsZV9z
ZWFyY2giPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8c2lnbmFsIG5hbWU9ImN1cnNv
cl9jaGFuZ2VkIiBoYW5kbGVyPSJvbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQiIGxhc3RfbW9k
aWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTc6NTUgR01UIi8+DQogICAgKwkJ
ICAgICAgPHNpZ25hbCBuYW1lPSJidXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2
aWV3Ml9idXR0b25fcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIg
SmFuIDIwMDMgMTU6NTc6NTggR01UIi8+DQogICAgKwkJICAgICAgPHNpZ25hbCBuYW1lPSJrZXlf
cHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9rZXlfcHJlc3NfZXZlbnQiIGxhc3Rf
bW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTU6NTg6MDEgR01UIi8+DQogICAg
KwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArCQk8L3dpZGdldD4NCiAg
ICArCQk8cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+RmFsc2U8L3Byb3BlcnR5
Pg0KICAgICsJCTwvcGFja2luZz4NCiAgICArCSAgICAgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJ
ICAgICAgPGNoaWxkPg0KICAgICsJCTx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBp
ZD0ic2Nyb2xsZWR3aW5kb3czIj4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGlj
eSI+R1RLX1BPTElDWV9ORVZFUjwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0i
dnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVUT01BVElDPC9wcm9wZXJ0eT4NCiAgICAr
CQkgIDxwcm9wZXJ0eSBuYW1lPSJzaGFkb3dfdHlwZSI+R1RLX1NIQURPV19JTjwvcHJvcGVydHk+
DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0id2luZG93X3BsYWNlbWVudCI+R1RLX0NPUk5FUl9U
T1BfTEVGVDwvcHJvcGVydHk+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAgICsJCSAgICA8
d2lkZ2V0IGNsYXNzPSJHdGtUZXh0VmlldyIgaWQ9InRleHR2aWV3MyI+DQogICAgKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJlZGl0YWJsZSI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJvdmVyd3JpdGUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8
cHJvcGVydHkgbmFtZT0iYWNjZXB0c190YWIiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJqdXN0aWZpY2F0aW9uIj5HVEtfSlVTVElGWV9MRUZUPC9wcm9wZXJ0
eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0id3JhcF9tb2RlIj5HVEtfV1JBUF9XT1JE
PC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY3Vyc29yX3Zpc2libGUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwaXhlbHNfYWJv
dmVfbGluZXMiPjA8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJwaXhl
bHNfYmVsb3dfbGluZXMiPjA8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJwaXhlbHNfaW5zaWRlX3dyYXAiPjA8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJsZWZ0X21hcmdpbiI+MDwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9InJpZ2h0X21hcmdpbiI+MDwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImluZGVudCI+MDwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
InRleHQiIHRyYW5zbGF0YWJsZT0ieWVzIj5Tb3JyeSwgbm8gaGVscCBhdmFpbGFibGUgZm9yIHRo
aXMgb3B0aW9uIHlldC48L3Byb3BlcnR5Pg0KICAgICsJCSAgICA8L3dpZGdldD4NCiAgICArCQkg
IDwvY2hpbGQ+DQogICAgKwkJPC93aWRnZXQ+DQogICAgKwkJPHBhY2tpbmc+DQogICAgKwkJICA8
cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0
eSBuYW1lPSJyZXNpemUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCTwvcGFja2luZz4NCiAgICAr
CSAgICAgIDwvY2hpbGQ+DQogICAgKwkgICAgPC93aWRnZXQ+DQogICAgKwkgICAgPHBhY2tpbmc+
DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJ
ICAgIDwvcGFja2luZz4NCiAgICArCSAgPC9jaGlsZD4NCiAgICArCTwvd2lkZ2V0Pg0KICAgICsJ
PHBhY2tpbmc+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJwYWRkaW5nIj4wPC9wcm9wZXJ0eT4N
CiAgICArCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkg
IDxwcm9wZXJ0eSBuYW1lPSJmaWxsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCTwvcGFja2luZz4N
CiAgICArICAgICAgPC9jaGlsZD4NCiAgICArICAgIDwvd2lkZ2V0Pg0KICAgICsgIDwvY2hpbGQ+
DQogICAgKzwvd2lkZ2V0Pg0KICAgICsNCiAgICArPC9nbGFkZS1pbnRlcmZhY2U+DQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2VzLmMgYi9zdXBwb3J0L2tjb25maWcu
bmV3L2ltYWdlcy5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li5iNGZhMGU0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvaW1hZ2VzLmMNCiAgICBAQCAtMCwwICsxLDMyOCBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDIg
Um9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqLw0KICAgICsNCiAg
ICArI2luY2x1ZGUgImltYWdlcy5oIg0KICAgICsNCiAgICArY29uc3QgY2hhciAqeHBtX2xvYWRb
XSA9IHsNCiAgICArIjIyIDIyIDUgMSIsDQogICAgKyIuIGMgTm9uZSIsDQogICAgKyIjIGMgIzAw
MDAwMCIsDQogICAgKyJjIGMgIzgzODEwMCIsDQogICAgKyJhIGMgI2ZmZmYwMCIsDQogICAgKyJi
IGMgI2ZmZmZmZiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAg
KyIuLi4uLi4uLi4uLi4jIyMjLi4uLiMuIiwNCiAgICArIi4uLi4uLi4uLi4uIy4uLi4jIy4jIy4i
LA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uIyMjLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4u
LiMjIyMuIiwNCiAgICArIi4jIyMjLi4uLi4uLi4uLi4jIyMjIy4iLA0KICAgICsiI2FiYWIjIyMj
IyMjIyMjLi4uLi4uLiIsDQogICAgKyIjYmFiYWJhYmFiYWJhYiMuLi4uLi4uIiwNCiAgICArIiNh
YmFiYWJhYmFiYWJhIy4uLi4uLi4iLA0KICAgICsiI2JhYmFiYWJhYmFiYWIjLi4uLi4uLiIsDQog
ICAgKyIjYWJhYmFiIyMjIyMjIyMjIyMjIyMjIiwNCiAgICArIiNiYWJhYiMjY2NjY2NjY2NjY2Nj
IyMiLA0KICAgICsiI2FiYWIjI2NjY2NjY2NjY2NjYyMjLiIsDQogICAgKyIjYmFiIyNjY2NjY2Nj
Y2NjY2MjIy4uIiwNCiAgICArIiNhYiMjY2NjY2NjY2NjY2NjIyMuLi4iLA0KICAgICsiI2IjI2Nj
Y2NjY2NjY2NjYyMjLi4uLiIsDQogICAgKyIjIyNjY2NjY2NjY2NjY2MjIy4uLi4uIiwNCiAgICAr
IiMjY2NjY2NjY2NjY2NjIyMuLi4uLi4iLA0KICAgICsiIyMjIyMjIyMjIyMjIyMjLi4uLi4uLiIs
DQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07DQogICAgKw0KICAgICtjb25zdCBjaGFy
ICp4cG1fc2F2ZVtdID0gew0KICAgICsiMjIgMjIgNSAxIiwNCiAgICArIi4gYyBOb25lIiwNCiAg
ICArIiMgYyAjMDAwMDAwIiwNCiAgICArImEgYyAjODM4MTAwIiwNCiAgICArImIgYyAjYzVjMmM1
IiwNCiAgICArImMgYyAjY2RiNmQ1IiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0K
ICAgICsiLiMjIyMjIyMjIyMjIyMjIyMjIyMjLiIsDQogICAgKyIuI2FhI2JiYmJiYmJiYmJiYiNi
YiMuIiwNCiAgICArIi4jYWEjYmJiYmJiYmJiYmJiI2JiIy4iLA0KICAgICsiLiNhYSNiYmJiYmJi
YmJjYmIjIyMjLiIsDQogICAgKyIuI2FhI2JiYmNjYmJiYmJiYiNhYSMuIiwNCiAgICArIi4jYWEj
YmJiY2NiYmJiYmJiI2FhIy4iLA0KICAgICsiLiNhYSNiYmJiYmJiYmJiYmIjYWEjLiIsDQogICAg
KyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwNCiAgICArIi4jYWEjYmJiYmJiYmJiYmJiI2FhIy4i
LA0KICAgICsiLiNhYSNiYmJiYmJiYmJiYmIjYWEjLiIsDQogICAgKyIuI2FhYSMjIyMjIyMjIyMj
I2FhYSMuIiwNCiAgICArIi4jYWFhYWFhYWFhYWFhYWFhYWFhIy4iLA0KICAgICsiLiNhYWFhYWFh
YWFhYWFhYWFhYWEjLiIsDQogICAgKyIuI2FhYSMjIyMjIyMjIyMjIyNhYSMuIiwNCiAgICArIi4j
YWFhIyMjIyMjIyMjYmJiI2FhIy4iLA0KICAgICsiLiNhYWEjIyMjIyMjIyNiYmIjYWEjLiIsDQog
ICAgKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwNCiAgICArIi4jYWFhIyMjIyMjIyMjYmJiI2Fh
Iy4iLA0KICAgICsiLiNhYWEjIyMjIyMjIyNiYmIjYWEjLiIsDQogICAgKyIuLiMjIyMjIyMjIyMj
IyMjIyMjIy4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ifTsNCiAgICArDQogICAg
K2NvbnN0IGNoYXIgKnhwbV9iYWNrW10gPSB7DQogICAgKyIyMiAyMiAzIDEiLA0KICAgICsiLiBj
IE5vbmUiLA0KICAgICsiIyBjICMwMDAwODMiLA0KICAgICsiYSBjICM4MzgxODMiLA0KICAgICsi
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwN
CiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4u
IyMjIyMjYS4uLi4iLA0KICAgICsiLi4jLi4uLi4uIyMjIyMjIyMjIy4uLiIsDQogICAgKyIuLiMj
Li4uIyMjIy4uLi4uLiMjYS4uIiwNCiAgICArIi4uIyMjLiMjIy4uLi4uLi4uLiMjLi4iLA0KICAg
ICsiLi4jIyMjIyMuLi4uLi4uLi4uIyMuLiIsDQogICAgKyIuLiMjIyMjLi4uLi4uLi4uLi4jIy4u
IiwNCiAgICArIi4uIyMjIyMjLi4uLi4uLi4uLiMjLi4iLA0KICAgICsiLi4jIyMjIyMjLi4uLi4u
Li4uIyMuLiIsDQogICAgKyIuLiMjIyMjIyMjLi4uLi4uLiMjYS4uIiwNCiAgICArIi4uLi4uLi4u
Li4uLi4uLmEjIyMuLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uIyMjLi4uLiIsDQogICAgKyIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0K
ICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLiJ9Ow0KICAgICsNCiAgICArY29uc3QgY2hhciAqeHBtX3RyZWVfdmlld1tdID0g
ew0KICAgICsiMjIgMjIgMiAxIiwNCiAgICArIi4gYyBOb25lIiwNCiAgICArIiMgYyAjMDAwMDAw
IiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMu
Li4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIu
Li4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0K
ICAgICsiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uLi4uLi4u
Li4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4u
Li4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4u
LiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIyMjIyMjIyMuLi4uLi4uLiIsDQogICAg
KyIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4i
LA0KICAgICsiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uLi4u
Li4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIyMj
IyMjIyMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4ifTsNCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnhwbV9zaW5n
bGVfdmlld1tdID0gew0KICAgICsiMjIgMjIgMiAxIiwNCiAgICArIi4gYyBOb25lIiwNCiAgICAr
IiMgYyAjMDAwMDAwIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAg
ICArIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsDQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4jLi4u
Li4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4u
Li4uIy4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgICsi
Li4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwN
CiAgICArIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4u
Li4uLiIsDQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4j
Li4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4u
Li4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAg
ICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ifTsNCiAgICArDQogICAgK2NvbnN0IGNo
YXIgKnhwbV9zcGxpdF92aWV3W10gPSB7DQogICAgKyIyMiAyMiAyIDEiLA0KICAgICsiLiBjIE5v
bmUiLA0KICAgICsiIyBjICMwMDAwMDAiLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIs
DQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4jLi4u
Li4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsiLi4u
Li4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAg
ICArIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4uLi4u
LiIsDQogICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4j
Li4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsi
Li4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwN
CiAgICArIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4u
Li4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAgICsNCiAg
ICArY29uc3QgY2hhciAqeHBtX3N5bWJvbF9ub1tdID0gew0KICAgICsiMTIgMTIgMiAxIiwNCiAg
ICArIiAgYyB3aGl0ZSIsDQogICAgKyIuIGMgYmxhY2siLA0KICAgICsiICAgICAgICAgICAgIiwN
CiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4gICAg
ICAgIC4gIiwNCiAgICArIiAuICAgICAgICAuICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAg
ICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuICAgICAgICAuICIsDQogICAgKyIgLiAgICAgICAg
LiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIg
ICAgICAgICAgICAifTsNCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbW9kW10g
PSB7DQogICAgKyIxMiAxMiAyIDEiLA0KICAgICsiICBjIHdoaXRlIiwNCiAgICArIi4gYyBibGFj
ayIsDQogICAgKyIgICAgICAgICAgICAiLA0KICAgICsiIC4uLi4uLi4uLi4gIiwNCiAgICArIiAu
ICAgICAgICAuICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4gICAuLiAgIC4gIiwN
CiAgICArIiAuICAuLi4uICAuICIsDQogICAgKyIgLiAgLi4uLiAgLiAiLA0KICAgICsiIC4gICAu
LiAgIC4gIiwNCiAgICArIiAuICAgICAgICAuICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAg
ICsiIC4uLi4uLi4uLi4gIiwNCiAgICArIiAgICAgICAgICAgICJ9Ow0KICAgICsNCiAgICArY29u
c3QgY2hhciAqeHBtX3N5bWJvbF95ZXNbXSA9IHsNCiAgICArIjEyIDEyIDIgMSIsDQogICAgKyIg
IGMgd2hpdGUiLA0KICAgICsiLiBjIGJsYWNrIiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAg
KyIgLi4uLi4uLi4uLiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuICAgICAgICAu
ICIsDQogICAgKyIgLiAgICAgIC4gLiAiLA0KICAgICsiIC4gICAgIC4uIC4gIiwNCiAgICArIiAu
IC4gIC4uICAuICIsDQogICAgKyIgLiAuLi4uICAgLiAiLA0KICAgICsiIC4gIC4uICAgIC4gIiwN
CiAgICArIiAuICAgICAgICAuICIsDQogICAgKyIgLi4uLi4uLi4uLiAiLA0KICAgICsiICAgICAg
ICAgICAgIn07DQogICAgKw0KICAgICtjb25zdCBjaGFyICp4cG1fY2hvaWNlX25vW10gPSB7DQog
ICAgKyIxMiAxMiAyIDEiLA0KICAgICsiICBjIHdoaXRlIiwNCiAgICArIi4gYyBibGFjayIsDQog
ICAgKyIgICAgICAgICAgICAiLA0KICAgICsiICAgIC4uLi4gICAgIiwNCiAgICArIiAgLi4gICAg
Li4gICIsDQogICAgKyIgIC4gICAgICAuICAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICAr
IiAuICAgICAgICAuICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4gICAgICAgIC4g
IiwNCiAgICArIiAgLiAgICAgIC4gICIsDQogICAgKyIgIC4uICAgIC4uICAiLA0KICAgICsiICAg
IC4uLi4gICAgIiwNCiAgICArIiAgICAgICAgICAgICJ9Ow0KICAgICsNCiAgICArY29uc3QgY2hh
ciAqeHBtX2Nob2ljZV95ZXNbXSA9IHsNCiAgICArIjEyIDEyIDIgMSIsDQogICAgKyIgIGMgd2hp
dGUiLA0KICAgICsiLiBjIGJsYWNrIiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAgKyIgICAg
Li4uLiAgICAiLA0KICAgICsiICAuLiAgICAuLiAgIiwNCiAgICArIiAgLiAgICAgIC4gICIsDQog
ICAgKyIgLiAgIC4uICAgLiAiLA0KICAgICsiIC4gIC4uLi4gIC4gIiwNCiAgICArIiAuICAuLi4u
ICAuICIsDQogICAgKyIgLiAgIC4uICAgLiAiLA0KICAgICsiICAuICAgICAgLiAgIiwNCiAgICAr
IiAgLi4gICAgLi4gICIsDQogICAgKyIgICAgLi4uLiAgICAiLA0KICAgICsiICAgICAgICAgICAg
In07DQogICAgKw0KICAgICtjb25zdCBjaGFyICp4cG1fbWVudVtdID0gew0KICAgICsiMTIgMTIg
MiAxIiwNCiAgICArIiAgYyB3aGl0ZSIsDQogICAgKyIuIGMgYmxhY2siLA0KICAgICsiICAgICAg
ICAgICAgIiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAg
ICsiIC4gLi4gICAgIC4gIiwNCiAgICArIiAuIC4uLi4gICAuICIsDQogICAgKyIgLiAuLi4uLi4g
LiAiLA0KICAgICsiIC4gLi4uLi4uIC4gIiwNCiAgICArIiAuIC4uLi4gICAuICIsDQogICAgKyIg
LiAuLiAgICAgLiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuLi4uLi4uLi4uICIs
DQogICAgKyIgICAgICAgICAgICAifTsNCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnhwbV9tZW51
X2ludltdID0gew0KICAgICsiMTIgMTIgMiAxIiwNCiAgICArIiAgYyB3aGl0ZSIsDQogICAgKyIu
IGMgYmxhY2siLA0KICAgICsiICAgICAgICAgICAgIiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQog
ICAgKyIgLi4uLi4uLi4uLiAiLA0KICAgICsiIC4uICAuLi4uLi4gIiwNCiAgICArIiAuLiAgICAu
Li4uICIsDQogICAgKyIgLi4gICAgICAuLiAiLA0KICAgICsiIC4uICAgICAgLi4gIiwNCiAgICAr
IiAuLiAgICAuLi4uICIsDQogICAgKyIgLi4gIC4uLi4uLiAiLA0KICAgICsiIC4uLi4uLi4uLi4g
IiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIgICAgICAgICAgICAifTsNCiAgICArDQog
ICAgK2NvbnN0IGNoYXIgKnhwbV9tZW51YmFja1tdID0gew0KICAgICsiMTIgMTIgMiAxIiwNCiAg
ICArIiAgYyB3aGl0ZSIsDQogICAgKyIuIGMgYmxhY2siLA0KICAgICsiICAgICAgICAgICAgIiwN
CiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4gICAg
IC4uIC4gIiwNCiAgICArIiAuICAgLi4uLiAuICIsDQogICAgKyIgLiAuLi4uLi4gLiAiLA0KICAg
ICsiIC4gLi4uLi4uIC4gIiwNCiAgICArIiAuICAgLi4uLiAuICIsDQogICAgKyIgLiAgICAgLi4g
LiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIg
ICAgICAgICAgICAifTsNCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnhwbV92b2lkW10gPSB7DQog
ICAgKyIxMiAxMiAyIDEiLA0KICAgICsiICBjIHdoaXRlIiwNCiAgICArIi4gYyBibGFjayIsDQog
ICAgKyIgICAgICAgICAgICAiLA0KICAgICsiICAgICAgICAgICAgIiwNCiAgICArIiAgICAgICAg
ICAgICIsDQogICAgKyIgICAgICAgICAgICAiLA0KICAgICsiICAgICAgICAgICAgIiwNCiAgICAr
IiAgICAgICAgICAgICIsDQogICAgKyIgICAgICAgICAgICAiLA0KICAgICsiICAgICAgICAgICAg
IiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAgKyIgICAgICAgICAgICAiLA0KICAgICsiICAg
ICAgICAgICAgIiwNCiAgICArIiAgICAgICAgICAgICJ9Ow0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L2ltYWdlcy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuaA0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZDhmZjYxNA0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5oDQog
ICAgQEAgLTAsMCArMSwzMyBAQA0KICAgICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMCAqLw0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVs
IDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqLw0KICAgICsNCiAgICArI2lmbmRlZiBJ
TUFHRVNfSA0KICAgICsjZGVmaW5lIElNQUdFU19IDQogICAgKw0KICAgICsjaWZkZWYgX19jcGx1
c3BsdXMNCiAgICArZXh0ZXJuICJDIiB7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArZXh0ZXJu
IGNvbnN0IGNoYXIgKnhwbV9sb2FkW107DQogICAgK2V4dGVybiBjb25zdCBjaGFyICp4cG1fc2F2
ZVtdOw0KICAgICtleHRlcm4gY29uc3QgY2hhciAqeHBtX2JhY2tbXTsNCiAgICArZXh0ZXJuIGNv
bnN0IGNoYXIgKnhwbV90cmVlX3ZpZXdbXTsNCiAgICArZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9z
aW5nbGVfdmlld1tdOw0KICAgICtleHRlcm4gY29uc3QgY2hhciAqeHBtX3NwbGl0X3ZpZXdbXTsN
CiAgICArZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1ib2xfbm9bXTsNCiAgICArZXh0ZXJuIGNv
bnN0IGNoYXIgKnhwbV9zeW1ib2xfbW9kW107DQogICAgK2V4dGVybiBjb25zdCBjaGFyICp4cG1f
c3ltYm9sX3llc1tdOw0KICAgICtleHRlcm4gY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdOw0K
ICAgICtleHRlcm4gY29uc3QgY2hhciAqeHBtX2Nob2ljZV95ZXNbXTsNCiAgICArZXh0ZXJuIGNv
bnN0IGNoYXIgKnhwbV9tZW51W107DQogICAgK2V4dGVybiBjb25zdCBjaGFyICp4cG1fbWVudV9p
bnZbXTsNCiAgICArZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9tZW51YmFja1tdOw0KICAgICtleHRl
cm4gY29uc3QgY2hhciAqeHBtX3ZvaWRbXTsNCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1
cw0KICAgICt9DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2VuZGlmIC8qIElNQUdFU19IICov
DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubCBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvbGV4ZXIubA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
MDAwMDAwMC4uNjM1NGM5MA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tj
b25maWcubmV3L2xleGVyLmwNCiAgICBAQCAtMCwwICsxLDQ3MSBAQA0KICAgICsvKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQg
KEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqLw0K
ICAgICslb3B0aW9uIG5vc3RkaW5pdCBub3l5d3JhcCBuZXZlci1pbnRlcmFjdGl2ZSBmdWxsIGVj
cw0KICAgICslb3B0aW9uIDhiaXQgbm9kZWZhdWx0IHl5bGluZW5vDQogICAgKyV4IEFTU0lHTl9W
QUwgSEVMUCBTVFJJTkcNCiAgICArJXsNCiAgICArDQogICAgKyNpbmNsdWRlIDxhc3NlcnQuaD4N
CiAgICArI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAr
I2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKyNpbmNs
dWRlIDx1bmlzdGQuaD4NCiAgICArDQogICAgKyNpbmNsdWRlICJsa2MuaCINCiAgICArI2luY2x1
ZGUgInBhcnNlci50YWIuaCINCiAgICArDQogICAgKyNkZWZpbmUgWVlfREVDTAkJc3RhdGljIGlu
dCB5eWxleDEodm9pZCkNCiAgICArDQogICAgKyNkZWZpbmUgU1RBUlRfU1RSU0laRQkxNg0KICAg
ICsNCiAgICArc3RhdGljIHN0cnVjdCB7DQogICAgKwlzdHJ1Y3QgZmlsZSAqZmlsZTsNCiAgICAr
CWludCBsaW5lbm87DQogICAgK30gY3VycmVudF9wb3M7DQogICAgKw0KICAgICtzdGF0aWMgaW50
IHByZXZfcHJldl90b2tlbiA9IFRfRU9MOw0KICAgICtzdGF0aWMgaW50IHByZXZfdG9rZW4gPSBU
X0VPTDsNCiAgICArc3RhdGljIGNoYXIgKnRleHQ7DQogICAgK3N0YXRpYyBpbnQgdGV4dF9zaXpl
LCB0ZXh0X2FzaXplOw0KICAgICsNCiAgICArc3RydWN0IGJ1ZmZlciB7DQogICAgKwlzdHJ1Y3Qg
YnVmZmVyICpwYXJlbnQ7DQogICAgKwlZWV9CVUZGRVJfU1RBVEUgc3RhdGU7DQogICAgK307DQog
ICAgKw0KICAgICtzdHJ1Y3QgYnVmZmVyICpjdXJyZW50X2J1ZjsNCiAgICArDQogICAgK3N0YXRp
YyBpbnQgbGFzdF90cywgZmlyc3RfdHM7DQogICAgKw0KICAgICtzdGF0aWMgY2hhciAqZXhwYW5k
X3Rva2VuKGNvbnN0IGNoYXIgKmluLCBzaXplX3Qgbik7DQogICAgK3N0YXRpYyB2b2lkIGFwcGVu
ZF9leHBhbmRlZF9zdHJpbmcoY29uc3QgY2hhciAqaW4pOw0KICAgICtzdGF0aWMgdm9pZCB6Y29u
Zl9lbmRoZWxwKHZvaWQpOw0KICAgICtzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpOw0K
ICAgICsNCiAgICArc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2b2lkKQ0KICAgICt7DQogICAgKwl0
ZXh0ID0geG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsNCiAgICArCXRleHRfYXNpemUgPSBTVEFSVF9T
VFJTSVpFOw0KICAgICsJdGV4dF9zaXplID0gMDsNCiAgICArCSp0ZXh0ID0gMDsNCiAgICArfQ0K
ICAgICsNCiAgICArc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGlu
dCBzaXplKQ0KICAgICt7DQogICAgKwlpbnQgbmV3X3NpemUgPSB0ZXh0X3NpemUgKyBzaXplICsg
MTsNCiAgICArCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsNCiAgICArCQluZXdfc2l6ZSAr
PSBTVEFSVF9TVFJTSVpFIC0gMTsNCiAgICArCQluZXdfc2l6ZSAmPSAtU1RBUlRfU1RSU0laRTsN
CiAgICArCQl0ZXh0ID0geHJlYWxsb2ModGV4dCwgbmV3X3NpemUpOw0KICAgICsJCXRleHRfYXNp
emUgPSBuZXdfc2l6ZTsNCiAgICArCX0NCiAgICArCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBz
dHIsIHNpemUpOw0KICAgICsJdGV4dF9zaXplICs9IHNpemU7DQogICAgKwl0ZXh0W3RleHRfc2l6
ZV0gPSAwOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29u
c3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkNCiAgICArew0KICAgICsJdGV4dCA9IHhtYWxsb2Moc2l6
ZSArIDEpOw0KICAgICsJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7DQogICAgKwl0ZXh0W3NpemVd
ID0gMDsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgd2Fybl9pZ25vcmVkX2NoYXJh
Y3RlcihjaGFyIGNocikNCiAgICArew0KICAgICsJZnByaW50ZihzdGRlcnIsDQogICAgKwkgICAg
ICAgICIlczolZDp3YXJuaW5nOiBpZ25vcmluZyB1bnN1cHBvcnRlZCBjaGFyYWN0ZXIgJyVjJ1xu
IiwNCiAgICArCSAgICAgICAgY3VycmVudF9maWxlLT5uYW1lLCB5eWxpbmVubywgY2hyKTsNCiAg
ICArfQ0KICAgICslfQ0KICAgICsNCiAgICArbglbQS1aYS16MC05Xy1dDQogICAgKw0KICAgICsl
JQ0KICAgICsJaW50IHN0ciA9IDA7DQogICAgKwlpbnQgdHMsIGk7DQogICAgKw0KICAgICsjLioJ
CQkvKiBpZ25vcmUgY29tbWVudCAqLw0KICAgICtbIFx0XSoJCQkvKiB3aGl0ZXNwYWNlcyAqLw0K
ICAgICtcXFxuCQkJLyogZXNjYXBlZCBuZXcgbGluZSAqLw0KICAgICtcbgkJCXJldHVybiBUX0VP
TDsNCiAgICArImFsbG5vY29uZmlnX3kiCQlyZXR1cm4gVF9BTExOT0NPTkZJR19ZOw0KICAgICsi
Ym9vbCIJCQlyZXR1cm4gVF9CT09MOw0KICAgICsiY2hvaWNlIgkJcmV0dXJuIFRfQ0hPSUNFOw0K
ICAgICsiY29tbWVudCIJCXJldHVybiBUX0NPTU1FTlQ7DQogICAgKyJjb25maWciCQlyZXR1cm4g
VF9DT05GSUc7DQogICAgKyJkZWZfYm9vbCIJCXJldHVybiBUX0RFRl9CT09MOw0KICAgICsiZGVm
X3RyaXN0YXRlIgkJcmV0dXJuIFRfREVGX1RSSVNUQVRFOw0KICAgICsiZGVmYXVsdCIJCXJldHVy
biBUX0RFRkFVTFQ7DQogICAgKyJkZWZjb25maWdfbGlzdCIJcmV0dXJuIFRfREVGQ09ORklHX0xJ
U1Q7DQogICAgKyJkZXBlbmRzIgkJcmV0dXJuIFRfREVQRU5EUzsNCiAgICArImVuZGNob2ljZSIJ
CXJldHVybiBUX0VORENIT0lDRTsNCiAgICArImVuZGlmIgkJCXJldHVybiBUX0VORElGOw0KICAg
ICsiZW5kbWVudSIJCXJldHVybiBUX0VORE1FTlU7DQogICAgKyJoZWxwInwiLS0taGVscC0tLSIJ
cmV0dXJuIFRfSEVMUDsNCiAgICArImhleCIJCQlyZXR1cm4gVF9IRVg7DQogICAgKyJpZiIJCQly
ZXR1cm4gVF9JRjsNCiAgICArImltcGx5IgkJCXJldHVybiBUX0lNUExZOw0KICAgICsiaW50IgkJ
CXJldHVybiBUX0lOVDsNCiAgICArIm1haW5tZW51IgkJcmV0dXJuIFRfTUFJTk1FTlU7DQogICAg
KyJtZW51IgkJCXJldHVybiBUX01FTlU7DQogICAgKyJtZW51Y29uZmlnIgkJcmV0dXJuIFRfTUVO
VUNPTkZJRzsNCiAgICArIm1vZHVsZXMiCQlyZXR1cm4gVF9NT0RVTEVTOw0KICAgICsib24iCQkJ
cmV0dXJuIFRfT047DQogICAgKyJvcHRpb24iCQlyZXR1cm4gVF9PUFRJT047DQogICAgKyJvcHRp
b25hbCIJCXJldHVybiBUX09QVElPTkFMOw0KICAgICsicHJvbXB0IgkJcmV0dXJuIFRfUFJPTVBU
Ow0KICAgICsicmFuZ2UiCQkJcmV0dXJuIFRfUkFOR0U7DQogICAgKyJzZWxlY3QiCQlyZXR1cm4g
VF9TRUxFQ1Q7DQogICAgKyJzb3VyY2UiCQlyZXR1cm4gVF9TT1VSQ0U7DQogICAgKyJzdHJpbmci
CQlyZXR1cm4gVF9TVFJJTkc7DQogICAgKyJ0cmlzdGF0ZSIJCXJldHVybiBUX1RSSVNUQVRFOw0K
ICAgICsidmlzaWJsZSIJCXJldHVybiBUX1ZJU0lCTEU7DQogICAgKyJ8fCIJCQlyZXR1cm4gVF9P
UjsNCiAgICArIiYmIgkJCXJldHVybiBUX0FORDsNCiAgICArIj0iCQkJcmV0dXJuIFRfRVFVQUw7
DQogICAgKyIhPSIJCQlyZXR1cm4gVF9VTkVRVUFMOw0KICAgICsiPCIJCQlyZXR1cm4gVF9MRVNT
Ow0KICAgICsiPD0iCQkJcmV0dXJuIFRfTEVTU19FUVVBTDsNCiAgICArIj4iCQkJcmV0dXJuIFRf
R1JFQVRFUjsNCiAgICArIj49IgkJCXJldHVybiBUX0dSRUFURVJfRVFVQUw7DQogICAgKyIhIgkJ
CXJldHVybiBUX05PVDsNCiAgICArIigiCQkJcmV0dXJuIFRfT1BFTl9QQVJFTjsNCiAgICArIiki
CQkJcmV0dXJuIFRfQ0xPU0VfUEFSRU47DQogICAgKyI6PSIJCQlyZXR1cm4gVF9DT0xPTl9FUVVB
TDsNCiAgICArIis9IgkJCXJldHVybiBUX1BMVVNfRVFVQUw7DQogICAgK1wifFwnCQkJew0KICAg
ICsJCQkJc3RyID0geXl0ZXh0WzBdOw0KICAgICsJCQkJbmV3X3N0cmluZygpOw0KICAgICsJCQkJ
QkVHSU4oU1RSSU5HKTsNCiAgICArCQkJfQ0KICAgICt7bn0rCQkJew0KICAgICsJCQkJYWxsb2Nf
c3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsNCiAgICArCQkJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0K
ICAgICsJCQkJcmV0dXJuIFRfV09SRDsNCiAgICArCQkJfQ0KICAgICsoe259fCQpKwkJew0KICAg
ICsJCQkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgJyQnICovDQogICAgKwkJ
CQl5eWx2YWwuc3RyaW5nID0gZXhwYW5kX3Rva2VuKHl5dGV4dCwgeXlsZW5nKTsNCiAgICArCQkJ
CWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpDQogICAgKwkJCQkJcmV0dXJuIFRfV09SRDsNCiAg
ICArCQkJCWZyZWUoeXlsdmFsLnN0cmluZyk7DQogICAgKwkJCX0NCiAgICArLgkJCXdhcm5faWdu
b3JlZF9jaGFyYWN0ZXIoKnl5dGV4dCk7DQogICAgKw0KICAgICs8QVNTSUdOX1ZBTD57DQogICAg
KwlbXls6Ymxhbms6XVxuXSsuKgl7DQogICAgKwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5n
KTsNCiAgICArCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICArCQlyZXR1cm4gVF9BU1NJR05f
VkFMOw0KICAgICsJfQ0KICAgICsJXG4JeyBCRUdJTihJTklUSUFMKTsgcmV0dXJuIFRfRU9MOyB9
DQogICAgKwkuDQogICAgK30NCiAgICArDQogICAgKzxTVFJJTkc+ew0KICAgICsJIiQiLioJYXBw
ZW5kX2V4cGFuZGVkX3N0cmluZyh5eXRleHQpOw0KICAgICsJW14kJyJcXFxuXSsJew0KICAgICsJ
CWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0KICAgICsJfQ0KICAgICsJXFwuPwl7DQog
ICAgKwkJYXBwZW5kX3N0cmluZyh5eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsNCiAgICArCX0NCiAg
ICArCVwnfFwiCXsNCiAgICArCQlpZiAoc3RyID09IHl5dGV4dFswXSkgew0KICAgICsJCQlCRUdJ
TihJTklUSUFMKTsNCiAgICArCQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgKwkJCXJldHVy
biBUX1dPUkRfUVVPVEU7DQogICAgKwkJfSBlbHNlDQogICAgKwkJCWFwcGVuZF9zdHJpbmcoeXl0
ZXh0LCAxKTsNCiAgICArCX0NCiAgICArCVxuCXsNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwNCiAg
ICArCQkJIiVzOiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5ncyBub3Qgc3VwcG9ydGVkXG4i
LA0KICAgICsJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArCQl1bnB1
dCgnXG4nKTsNCiAgICArCQlCRUdJTihJTklUSUFMKTsNCiAgICArCQl5eWx2YWwuc3RyaW5nID0g
dGV4dDsNCiAgICArCQlyZXR1cm4gVF9XT1JEX1FVT1RFOw0KICAgICsJfQ0KICAgICsJPDxFT0Y+
Pgl7DQogICAgKwkJQkVHSU4oSU5JVElBTCk7DQogICAgKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7
DQogICAgKwkJcmV0dXJuIFRfV09SRF9RVU9URTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAg
ICArPEhFTFA+ew0KICAgICsJWyBcdF0rCXsNCiAgICArCQl0cyA9IDA7DQogICAgKwkJZm9yIChp
ID0gMDsgaSA8IHl5bGVuZzsgaSsrKSB7DQogICAgKwkJCWlmICh5eXRleHRbaV0gPT0gJ1x0JykN
CiAgICArCQkJCXRzID0gKHRzICYgfjcpICsgODsNCiAgICArCQkJZWxzZQ0KICAgICsJCQkJdHMr
KzsNCiAgICArCQl9DQogICAgKwkJbGFzdF90cyA9IHRzOw0KICAgICsJCWlmIChmaXJzdF90cykg
ew0KICAgICsJCQlpZiAodHMgPCBmaXJzdF90cykgew0KICAgICsJCQkJemNvbmZfZW5kaGVscCgp
Ow0KICAgICsJCQkJcmV0dXJuIFRfSEVMUFRFWFQ7DQogICAgKwkJCX0NCiAgICArCQkJdHMgLT0g
Zmlyc3RfdHM7DQogICAgKwkJCXdoaWxlICh0cyA+IDgpIHsNCiAgICArCQkJCWFwcGVuZF9zdHJp
bmcoIiAgICAgICAgIiwgOCk7DQogICAgKwkJCQl0cyAtPSA4Ow0KICAgICsJCQl9DQogICAgKwkJ
CWFwcGVuZF9zdHJpbmcoIiAgICAgICAgIiwgdHMpOw0KICAgICsJCX0NCiAgICArCX0NCiAgICAr
CVsgXHRdKlxuL1teIFx0XG5dIHsNCiAgICArCQl6Y29uZl9lbmRoZWxwKCk7DQogICAgKwkJcmV0
dXJuIFRfSEVMUFRFWFQ7DQogICAgKwl9DQogICAgKwlbIFx0XSpcbgl7DQogICAgKwkJYXBwZW5k
X3N0cmluZygiXG4iLCAxKTsNCiAgICArCX0NCiAgICArCVteIFx0XG5dLiogew0KICAgICsJCXdo
aWxlICh5eWxlbmcpIHsNCiAgICArCQkJaWYgKCh5eXRleHRbeXlsZW5nLTFdICE9ICcgJykgJiYg
KHl5dGV4dFt5eWxlbmctMV0gIT0gJ1x0JykpDQogICAgKwkJCQlicmVhazsNCiAgICArCQkJeXls
ZW5nLS07DQogICAgKwkJfQ0KICAgICsJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0K
ICAgICsJCWlmICghZmlyc3RfdHMpDQogICAgKwkJCWZpcnN0X3RzID0gbGFzdF90czsNCiAgICAr
CX0NCiAgICArCTw8RU9GPj4Jew0KICAgICsJCXpjb25mX2VuZGhlbHAoKTsNCiAgICArCQlyZXR1
cm4gVF9IRUxQVEVYVDsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArPDxFT0Y+Pgl7DQog
ICAgKwlCRUdJTihJTklUSUFMKTsNCiAgICArDQogICAgKwlpZiAocHJldl90b2tlbiAhPSBUX0VP
TCAmJiBwcmV2X3Rva2VuICE9IFRfSEVMUFRFWFQpDQogICAgKwkJZnByaW50ZihzdGRlcnIsICIl
czolZDp3YXJuaW5nOiBubyBuZXcgbGluZSBhdCBlbmQgb2YgZmlsZVxuIiwNCiAgICArCQkJY3Vy
cmVudF9maWxlLT5uYW1lLCB5eWxpbmVubyk7DQogICAgKw0KICAgICsJaWYgKGN1cnJlbnRfZmls
ZSkgew0KICAgICsJCXpjb25mX2VuZGZpbGUoKTsNCiAgICArCQlyZXR1cm4gVF9FT0w7DQogICAg
Kwl9DQogICAgKwlmY2xvc2UoeXlpbik7DQogICAgKwl5eXRlcm1pbmF0ZSgpOw0KICAgICt9DQog
ICAgKw0KICAgICslJQ0KICAgICsNCiAgICArLyogc2Vjb25kIHN0YWdlIGxleGVyICovDQogICAg
K2ludCB5eWxleCh2b2lkKQ0KICAgICt7DQogICAgKwlpbnQgdG9rZW47DQogICAgKw0KICAgICty
ZXBlYXQ6DQogICAgKwl0b2tlbiA9IHl5bGV4MSgpOw0KICAgICsNCiAgICArCWlmIChwcmV2X3Rv
a2VuID09IFRfRU9MIHx8IHByZXZfdG9rZW4gPT0gVF9IRUxQVEVYVCkgew0KICAgICsJCWlmICh0
b2tlbiA9PSBUX0VPTCkgew0KICAgICsJCQkvKiBEbyBub3QgcGFzcyB1bm5lZWRlZCBUX0VPTCB0
byB0aGUgcGFyc2VyLiAqLw0KICAgICsJCQlnb3RvIHJlcGVhdDsNCiAgICArCQl9IGVsc2Ugew0K
ICAgICsJCQkvKg0KICAgICsJCQkgKiBGb3IgdGhlIHBhcnNlciwgdXBkYXRlIGZpbGUvbGluZW5v
IGF0IHRoZSBmaXJzdCB0b2tlbg0KICAgICsJCQkgKiBvZiBlYWNoIHN0YXRlbWVudC4gR2VuZXJh
bGx5LCBcbiBpcyBhIHN0YXRlbWVudA0KICAgICsJCQkgKiB0ZXJtaW5hdG9yIGluIEtjb25maWcs
IGJ1dCBpdCBpcyBub3QgYWx3YXlzIHRydWUNCiAgICArCQkJICogYmVjYXVzZSBcbiBjb3VsZCBi
ZSBlc2NhcGVkIGJ5IGEgYmFja3NsYXNoLg0KICAgICsJCQkgKi8NCiAgICArCQkJY3VycmVudF9w
b3MuZmlsZSA9IGN1cnJlbnRfZmlsZTsNCiAgICArCQkJY3VycmVudF9wb3MubGluZW5vID0geXls
aW5lbm87DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCWlmIChwcmV2X3ByZXZfdG9r
ZW4gPT0gVF9FT0wgJiYgcHJldl90b2tlbiA9PSBUX1dPUkQgJiYNCiAgICArCSAgICAodG9rZW4g
PT0gVF9FUVVBTCB8fCB0b2tlbiA9PSBUX0NPTE9OX0VRVUFMIHx8IHRva2VuID09IFRfUExVU19F
UVVBTCkpDQogICAgKwkJQkVHSU4oQVNTSUdOX1ZBTCk7DQogICAgKw0KICAgICsJcHJldl9wcmV2
X3Rva2VuID0gcHJldl90b2tlbjsNCiAgICArCXByZXZfdG9rZW4gPSB0b2tlbjsNCiAgICArDQog
ICAgKwlyZXR1cm4gdG9rZW47DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBjaGFyICpleHBh
bmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNpemVfdCBuKQ0KICAgICt7DQogICAgKwljaGFyICpv
dXQ7DQogICAgKwlpbnQgYzsNCiAgICArCWNoYXIgYzI7DQogICAgKwljb25zdCBjaGFyICpyZXN0
LCAqZW5kOw0KICAgICsNCiAgICArCW5ld19zdHJpbmcoKTsNCiAgICArCWFwcGVuZF9zdHJpbmco
aW4sIG4pOw0KICAgICsNCiAgICArCS8qIGdldCB0aGUgd2hvbGUgbGluZSBiZWNhdXNlIHdlIGRv
IG5vdCBrbm93IHRoZSBlbmQgb2YgdG9rZW4uICovDQogICAgKwl3aGlsZSAoKGMgPSBpbnB1dCgp
KSAhPSBFT0YpIHsNCiAgICArCQlpZiAoYyA9PSAnXG4nKSB7DQogICAgKwkJCXVucHV0KGMpOw0K
ICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJYzIgPSBjOw0KICAgICsJCWFwcGVuZF9z
dHJpbmcoJmMyLCAxKTsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXN0ID0gdGV4dDsNCiAgICAr
CW91dCA9IGV4cGFuZF9vbmVfdG9rZW4oJnJlc3QpOw0KICAgICsNCiAgICArCS8qIHB1c2ggYmFj
ayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5wdXQgc3RyZWFtICovDQogICAgKwllbmQgPSBy
ZXN0ICsgc3RybGVuKHJlc3QpOw0KICAgICsJd2hpbGUgKGVuZCA+IHJlc3QpDQogICAgKwkJdW5w
dXQoKi0tZW5kKTsNCiAgICArDQogICAgKwlmcmVlKHRleHQpOw0KICAgICsNCiAgICArCXJldHVy
biBvdXQ7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGFwcGVuZF9leHBhbmRlZF9z
dHJpbmcoY29uc3QgY2hhciAqc3RyKQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICplbmQ7DQog
ICAgKwljaGFyICpyZXM7DQogICAgKw0KICAgICsJc3RyKys7DQogICAgKw0KICAgICsJcmVzID0g
ZXhwYW5kX2RvbGxhcigmc3RyKTsNCiAgICArDQogICAgKwkvKiBwdXNoIGJhY2sgdW51c2VkIGNo
YXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLw0KICAgICsJZW5kID0gc3RyICsgc3RybGVu
KHN0cik7DQogICAgKwl3aGlsZSAoZW5kID4gc3RyKQ0KICAgICsJCXVucHV0KCotLWVuZCk7DQog
ICAgKw0KICAgICsJYXBwZW5kX3N0cmluZyhyZXMsIHN0cmxlbihyZXMpKTsNCiAgICArDQogICAg
KwlmcmVlKHJlcyk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZv
aWQpDQogICAgK3sNCiAgICArCW5ld19zdHJpbmcoKTsNCiAgICArCWxhc3RfdHMgPSBmaXJzdF90
cyA9IDA7DQogICAgKwlCRUdJTihIRUxQKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZv
aWQgemNvbmZfZW5kaGVscCh2b2lkKQ0KICAgICt7DQogICAgKwl5eWx2YWwuc3RyaW5nID0gdGV4
dDsNCiAgICArCUJFR0lOKElOSVRJQUwpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyoN
CiAgICArICogVHJ5IHRvIG9wZW4gc3BlY2lmaWVkIGZpbGUgd2l0aCBmb2xsb3dpbmcgbmFtZXM6
DQogICAgKyAqIC4vbmFtZQ0KICAgICsgKiAkKHNyY3RyZWUpL25hbWUNCiAgICArICogVGhlIGxh
dHRlciBpcyB1c2VkIHdoZW4gc3JjdHJlZSBpcyBzZXBhcmF0ZSBmcm9tIG9ianRyZWUNCiAgICAr
ICogd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbC4NCiAgICArICogUmV0dXJuIE5VTEwgaWYgZmls
ZSBpcyBub3QgZm91bmQuDQogICAgKyAqLw0KICAgICtGSUxFICp6Y29uZl9mb3Blbihjb25zdCBj
aGFyICpuYW1lKQ0KICAgICt7DQogICAgKwljaGFyICplbnYsIGZ1bGxuYW1lW1BBVEhfTUFYKzFd
Ow0KICAgICsJRklMRSAqZjsNCiAgICArDQogICAgKwlmID0gZm9wZW4obmFtZSwgInIiKTsNCiAg
ICArCWlmICghZiAmJiBuYW1lICE9IE5VTEwgJiYgbmFtZVswXSAhPSAnLycpIHsNCiAgICArCQll
bnYgPSBnZXRlbnYoU1JDVFJFRSk7DQogICAgKwkJaWYgKGVudikgew0KICAgICsJCQlzbnByaW50
ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwNCiAgICArCQkJCSAiJXMvJXMiLCBlbnYsIG5h
bWUpOw0KICAgICsJCQlmID0gZm9wZW4oZnVsbG5hbWUsICJyIik7DQogICAgKwkJfQ0KICAgICsJ
fQ0KICAgICsJcmV0dXJuIGY7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgemNvbmZfaW5pdHNj
YW4oY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0KICAgICsJeXlpbiA9IHpjb25mX2ZvcGVuKG5h
bWUpOw0KICAgICsJaWYgKCF5eWluKSB7DQogICAgKwkJZnByaW50ZihzdGRlcnIsICJjYW4ndCBm
aW5kIGZpbGUgJXNcbiIsIG5hbWUpOw0KICAgICsJCWV4aXQoMSk7DQogICAgKwl9DQogICAgKw0K
ICAgICsJY3VycmVudF9idWYgPSB4bWFsbG9jKHNpemVvZigqY3VycmVudF9idWYpKTsNCiAgICAr
CW1lbXNldChjdXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOw0KICAgICsNCiAg
ICArCWN1cnJlbnRfZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOw0KICAgICsJeXlsaW5lbm8gPSAx
Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5h
bWUpDQogICAgK3sNCiAgICArCXN0cnVjdCBmaWxlICppdGVyOw0KICAgICsJc3RydWN0IGZpbGUg
KmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsNCiAgICArCXN0cnVjdCBidWZmZXIgKmJ1ZiA9IHht
YWxsb2Moc2l6ZW9mKCpidWYpKTsNCiAgICArCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7
DQogICAgKw0KICAgICsJY3VycmVudF9idWYtPnN0YXRlID0gWVlfQ1VSUkVOVF9CVUZGRVI7DQog
ICAgKwl5eWluID0gemNvbmZfZm9wZW4oZmlsZS0+bmFtZSk7DQogICAgKwlpZiAoIXl5aW4pIHsN
CiAgICArCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjYW4ndCBvcGVuIGZpbGUgXCIlc1wiXG4i
LA0KICAgICsJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBmaWxlLT5uYW1lKTsN
CiAgICArCQlleGl0KDEpOw0KICAgICsJfQ0KICAgICsJeXlfc3dpdGNoX3RvX2J1ZmZlcih5eV9j
cmVhdGVfYnVmZmVyKHl5aW4sIFlZX0JVRl9TSVpFKSk7DQogICAgKwlidWYtPnBhcmVudCA9IGN1
cnJlbnRfYnVmOw0KICAgICsJY3VycmVudF9idWYgPSBidWY7DQogICAgKw0KICAgICsJY3VycmVu
dF9maWxlLT5saW5lbm8gPSB5eWxpbmVubzsNCiAgICArCWZpbGUtPnBhcmVudCA9IGN1cnJlbnRf
ZmlsZTsNCiAgICArDQogICAgKwlmb3IgKGl0ZXIgPSBjdXJyZW50X2ZpbGU7IGl0ZXI7IGl0ZXIg
PSBpdGVyLT5wYXJlbnQpIHsNCiAgICArCQlpZiAoIXN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5u
YW1lKSkgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwNCiAgICArCQkJCSJSZWN1cnNpdmUgaW5j
bHVzaW9uIGRldGVjdGVkLlxuIg0KICAgICsJCQkJIkluY2x1c2lvbiBwYXRoOlxuIg0KICAgICsJ
CQkJIiAgY3VycmVudCBmaWxlIDogJXNcbiIsIGZpbGUtPm5hbWUpOw0KICAgICsJCQlpdGVyID0g
ZmlsZTsNCiAgICArCQkJZG8gew0KICAgICsJCQkJaXRlciA9IGl0ZXItPnBhcmVudDsNCiAgICAr
CQkJCWZwcmludGYoc3RkZXJyLCAiICBpbmNsdWRlZCBmcm9tOiAlczolZFxuIiwNCiAgICArCQkJ
CQlpdGVyLT5uYW1lLCBpdGVyLT5saW5lbm8gLSAxKTsNCiAgICArCQkJfSB3aGlsZSAoc3RyY21w
KGl0ZXItPm5hbWUsIGZpbGUtPm5hbWUpKTsNCiAgICArCQkJZXhpdCgxKTsNCiAgICArCQl9DQog
ICAgKwl9DQogICAgKw0KICAgICsJeXlsaW5lbm8gPSAxOw0KICAgICsJY3VycmVudF9maWxlID0g
ZmlsZTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lk
KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7DQogICAgKw0KICAgICsJY3Vy
cmVudF9maWxlID0gY3VycmVudF9maWxlLT5wYXJlbnQ7DQogICAgKwlpZiAoY3VycmVudF9maWxl
KQ0KICAgICsJCXl5bGluZW5vID0gY3VycmVudF9maWxlLT5saW5lbm87DQogICAgKw0KICAgICsJ
cGFyZW50ID0gY3VycmVudF9idWYtPnBhcmVudDsNCiAgICArCWlmIChwYXJlbnQpIHsNCiAgICAr
CQlmY2xvc2UoeXlpbik7DQogICAgKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZF
Uik7DQogICAgKwkJeXlfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQtPnN0YXRlKTsNCiAgICArCX0N
CiAgICArCWZyZWUoY3VycmVudF9idWYpOw0KICAgICsJY3VycmVudF9idWYgPSBwYXJlbnQ7DQog
ICAgK30NCiAgICArDQogICAgK2ludCB6Y29uZl9saW5lbm8odm9pZCkNCiAgICArew0KICAgICsJ
cmV0dXJuIGN1cnJlbnRfcG9zLmxpbmVubzsNCiAgICArfQ0KICAgICsNCiAgICArY29uc3QgY2hh
ciAqemNvbmZfY3VybmFtZSh2b2lkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gY3VycmVudF9wb3Mu
ZmlsZSA/IGN1cnJlbnRfcG9zLmZpbGUtPm5hbWUgOiAiPG5vbmU+IjsNCiAgICArfQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaCBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbGlzdC5oDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40
NWNiMjM3DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bGlzdC5oDQogICAgQEAgLTAsMCArMSwxMzIgQEANCiAgICArLyogU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjAgKi8NCiAgICArI2lmbmRlZiBMSVNUX0gNCiAgICArI2RlZmluZSBMSVNU
X0gNCiAgICArDQogICAgKy8qDQogICAgKyAqIENvcGllZCBmcm9tIGluY2x1ZGUvbGludXgvLi4u
DQogICAgKyAqLw0KICAgICsNCiAgICArI3VuZGVmIG9mZnNldG9mDQogICAgKyNkZWZpbmUgb2Zm
c2V0b2YoVFlQRSwgTUVNQkVSKSAoKHNpemVfdCkgJigoVFlQRSAqKTApLT5NRU1CRVIpDQogICAg
Kw0KICAgICsvKioNCiAgICArICogY29udGFpbmVyX29mIC0gY2FzdCBhIG1lbWJlciBvZiBhIHN0
cnVjdHVyZSBvdXQgdG8gdGhlIGNvbnRhaW5pbmcgc3RydWN0dXJlDQogICAgKyAqIEBwdHI6ICAg
ICAgICB0aGUgcG9pbnRlciB0byB0aGUgbWVtYmVyLg0KICAgICsgKiBAdHlwZTogICAgICAgdGhl
IHR5cGUgb2YgdGhlIGNvbnRhaW5lciBzdHJ1Y3QgdGhpcyBpcyBlbWJlZGRlZCBpbi4NCiAgICAr
ICogQG1lbWJlcjogICAgIHRoZSBuYW1lIG9mIHRoZSBtZW1iZXIgd2l0aGluIHRoZSBzdHJ1Y3Qu
DQogICAgKyAqDQogICAgKyAqLw0KICAgICsjZGVmaW5lIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUs
IG1lbWJlcikgKHsgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsJY29uc3QgdHlwZW9mKCAo
KHR5cGUgKikwKS0+bWVtYmVyICkgKl9fbXB0ciA9IChwdHIpOyAgICBcDQogICAgKwkodHlwZSAq
KSggKGNoYXIgKilfX21wdHIgLSBvZmZzZXRvZih0eXBlLG1lbWJlcikgKTt9KQ0KICAgICsNCiAg
ICArDQogICAgK3N0cnVjdCBsaXN0X2hlYWQgew0KICAgICsJc3RydWN0IGxpc3RfaGVhZCAqbmV4
dCwgKnByZXY7DQogICAgK307DQogICAgKw0KICAgICsNCiAgICArI2RlZmluZSBMSVNUX0hFQURf
SU5JVChuYW1lKSB7ICYobmFtZSksICYobmFtZSkgfQ0KICAgICsNCiAgICArI2RlZmluZSBMSVNU
X0hFQUQobmFtZSkgXA0KICAgICsJc3RydWN0IGxpc3RfaGVhZCBuYW1lID0gTElTVF9IRUFEX0lO
SVQobmFtZSkNCiAgICArDQogICAgKy8qKg0KICAgICsgKiBsaXN0X2VudHJ5IC0gZ2V0IHRoZSBz
dHJ1Y3QgZm9yIHRoaXMgZW50cnkNCiAgICArICogQHB0cjoJdGhlICZzdHJ1Y3QgbGlzdF9oZWFk
IHBvaW50ZXIuDQogICAgKyAqIEB0eXBlOgl0aGUgdHlwZSBvZiB0aGUgc3RydWN0IHRoaXMgaXMg
ZW1iZWRkZWQgaW4uDQogICAgKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X2hlYWQg
d2l0aGluIHRoZSBzdHJ1Y3QuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIGxpc3RfZW50cnkocHRy
LCB0eXBlLCBtZW1iZXIpIFwNCiAgICArCWNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikN
CiAgICArDQogICAgKy8qKg0KICAgICsgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5CS0JaXRlcmF0ZSBv
dmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZQ0KICAgICsgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBh
cyBhIGxvb3AgY3Vyc29yLg0KICAgICsgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4N
CiAgICArICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3RfaGVhZCB3aXRoaW4gdGhlIHN0
cnVjdC4NCiAgICArICovDQogICAgKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhl
YWQsIG1lbWJlcikJCQkJXA0KICAgICsJZm9yIChwb3MgPSBsaXN0X2VudHJ5KChoZWFkKS0+bmV4
dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOwlcDQogICAgKwkgICAgICZwb3MtPm1lbWJlciAhPSAo
aGVhZCk7IAlcDQogICAgKwkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwg
dHlwZW9mKCpwb3MpLCBtZW1iZXIpKQ0KICAgICsNCiAgICArLyoqDQogICAgKyAqIGxpc3RfZm9y
X2VhY2hfZW50cnlfc2FmZSAtIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUgc2FmZSBh
Z2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQ0KICAgICsgKiBAcG9zOgl0aGUgdHlwZSAqIHRv
IHVzZSBhcyBhIGxvb3AgY3Vyc29yLg0KICAgICsgKiBAbjoJCWFub3RoZXIgdHlwZSAqIHRvIHVz
ZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQ0KICAgICsgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIg
bGlzdC4NCiAgICArICogQG1lbWJlcjoJdGhlIG5hbWUgb2YgdGhlIGxpc3RfaGVhZCB3aXRoaW4g
dGhlIHN0cnVjdC4NCiAgICArICovDQogICAgKyNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9z
YWZlKHBvcywgbiwgaGVhZCwgbWVtYmVyKQkJCVwNCiAgICArCWZvciAocG9zID0gbGlzdF9lbnRy
eSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSwJXA0KICAgICsJCW4gPSBsaXN0
X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXA0KICAgICsJ
ICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwkJCQkJXA0KICAgICsJICAgICBwb3MgPSBuLCBu
ID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkNCiAgICAr
DQogICAgKy8qKg0KICAgICsgKiBsaXN0X2VtcHR5IC0gdGVzdHMgd2hldGhlciBhIGxpc3QgaXMg
ZW1wdHkNCiAgICArICogQGhlYWQ6IHRoZSBsaXN0IHRvIHRlc3QuDQogICAgKyAqLw0KICAgICtz
dGF0aWMgaW5saW5lIGludCBsaXN0X2VtcHR5KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQp
DQogICAgK3sNCiAgICArCXJldHVybiBoZWFkLT5uZXh0ID09IGhlYWQ7DQogICAgK30NCiAgICAr
DQogICAgKy8qDQogICAgKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBj
b25zZWN1dGl2ZSBlbnRyaWVzLg0KICAgICsgKg0KICAgICsgKiBUaGlzIGlzIG9ubHkgZm9yIGlu
dGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cNCiAgICArICogdGhlIHByZXYv
bmV4dCBlbnRyaWVzIGFscmVhZHkhDQogICAgKyAqLw0KICAgICtzdGF0aWMgaW5saW5lIHZvaWQg
X19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpfbmV3LA0KICAgICsJCQkgICAgICBzdHJ1Y3Qg
bGlzdF9oZWFkICpwcmV2LA0KICAgICsJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQ0K
ICAgICt7DQogICAgKwluZXh0LT5wcmV2ID0gX25ldzsNCiAgICArCV9uZXctPm5leHQgPSBuZXh0
Ow0KICAgICsJX25ldy0+cHJldiA9IHByZXY7DQogICAgKwlwcmV2LT5uZXh0ID0gX25ldzsNCiAg
ICArfQ0KICAgICsNCiAgICArLyoqDQogICAgKyAqIGxpc3RfYWRkX3RhaWwgLSBhZGQgYSBuZXcg
ZW50cnkNCiAgICArICogQG5ldzogbmV3IGVudHJ5IHRvIGJlIGFkZGVkDQogICAgKyAqIEBoZWFk
OiBsaXN0IGhlYWQgdG8gYWRkIGl0IGJlZm9yZQ0KICAgICsgKg0KICAgICsgKiBJbnNlcnQgYSBu
ZXcgZW50cnkgYmVmb3JlIHRoZSBzcGVjaWZpZWQgaGVhZC4NCiAgICArICogVGhpcyBpcyB1c2Vm
dWwgZm9yIGltcGxlbWVudGluZyBxdWV1ZXMuDQogICAgKyAqLw0KICAgICtzdGF0aWMgaW5saW5l
IHZvaWQgbGlzdF9hZGRfdGFpbChzdHJ1Y3QgbGlzdF9oZWFkICpfbmV3LCBzdHJ1Y3QgbGlzdF9o
ZWFkICpoZWFkKQ0KICAgICt7DQogICAgKwlfX2xpc3RfYWRkKF9uZXcsIGhlYWQtPnByZXYsIGhl
YWQpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBEZWxldGUgYSBsaXN0IGVudHJ5
IGJ5IG1ha2luZyB0aGUgcHJldi9uZXh0IGVudHJpZXMNCiAgICArICogcG9pbnQgdG8gZWFjaCBv
dGhlci4NCiAgICArICoNCiAgICArICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1h
bmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93DQogICAgKyAqIHRoZSBwcmV2L25leHQgZW50cmllcyBh
bHJlYWR5IQ0KICAgICsgKi8NCiAgICArc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9kZWwoc3Ry
dWN0IGxpc3RfaGVhZCAqcHJldiwgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkNCiAgICArew0KICAg
ICsJbmV4dC0+cHJldiA9IHByZXY7DQogICAgKwlwcmV2LT5uZXh0ID0gbmV4dDsNCiAgICArfQ0K
ICAgICsNCiAgICArI2RlZmluZSBMSVNUX1BPSVNPTjEgICgodm9pZCAqKSAweDAwMTAwMTAwKQ0K
ICAgICsjZGVmaW5lIExJU1RfUE9JU09OMiAgKCh2b2lkICopIDB4MDAyMDAyMDApDQogICAgKy8q
Kg0KICAgICsgKiBsaXN0X2RlbCAtIGRlbGV0ZXMgZW50cnkgZnJvbSBsaXN0Lg0KICAgICsgKiBA
ZW50cnk6IHRoZSBlbGVtZW50IHRvIGRlbGV0ZSBmcm9tIHRoZSBsaXN0Lg0KICAgICsgKiBOb3Rl
OiBsaXN0X2VtcHR5KCkgb24gZW50cnkgZG9lcyBub3QgcmV0dXJuIHRydWUgYWZ0ZXIgdGhpcywg
dGhlIGVudHJ5IGlzDQogICAgKyAqIGluIGFuIHVuZGVmaW5lZCBzdGF0ZS4NCiAgICArICovDQog
ICAgK3N0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkN
CiAgICArew0KICAgICsJX19saXN0X2RlbChlbnRyeS0+cHJldiwgZW50cnktPm5leHQpOw0KICAg
ICsJZW50cnktPm5leHQgPSAoc3RydWN0IGxpc3RfaGVhZCopTElTVF9QT0lTT04xOw0KICAgICsJ
ZW50cnktPnByZXYgPSAoc3RydWN0IGxpc3RfaGVhZCopTElTVF9QT0lTT04yOw0KICAgICt9DQog
ICAgKyNlbmRpZg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
aW5kZXggMDAwMDAwMC4uY2JjNzY1OA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBw
b3J0L2tjb25maWcubmV3L2xrYy5oDQogICAgQEAgLTAsMCArMSwxNTkgQEANCiAgICArLyogU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCiAgICArLyoNCiAgICArICogQ29weXJp
Z2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgICsg
Ki8NCiAgICArDQogICAgKyNpZm5kZWYgTEtDX0gNCiAgICArI2RlZmluZSBMS0NfSA0KICAgICsN
CiAgICArI2luY2x1ZGUgImV4cHIuaCINCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0K
ICAgICtleHRlcm4gIkMiIHsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaW5jbHVkZSAibGtj
X3Byb3RvLmgiDQogICAgKw0KICAgICsjZGVmaW5lIFNSQ1RSRUUgInNyY3RyZWUiDQogICAgKw0K
ICAgICsjaWZuZGVmIFBBQ0tBR0UNCiAgICArI2RlZmluZSBQQUNLQUdFICJsaW51eCINCiAgICAr
I2VuZGlmDQogICAgKw0KICAgICsjaWZuZGVmIENPTkZJR18NCiAgICArI2RlZmluZSBDT05GSUdf
ICJDT05GSUdfIg0KICAgICsjZW5kaWYNCiAgICArc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpD
T05GSUdfcHJlZml4KHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiBnZXRlbnYoICJDT05GSUdf
IiApID86IENPTkZJR187DQogICAgK30NCiAgICArI3VuZGVmIENPTkZJR18NCiAgICArI2RlZmlu
ZSBDT05GSUdfIENPTkZJR19wcmVmaXgoKQ0KICAgICsNCiAgICArZW51bSBjb25mX2RlZl9tb2Rl
IHsNCiAgICArCWRlZl9kZWZhdWx0LA0KICAgICsJZGVmX3llcywNCiAgICArCWRlZl9tb2QsDQog
ICAgKwlkZWZfbm8sDQogICAgKwlkZWZfcmFuZG9tDQogICAgK307DQogICAgKw0KICAgICtleHRl
cm4gaW50IHl5bGluZW5vOw0KICAgICt2b2lkIHpjb25mZHVtcChGSUxFICpvdXQpOw0KICAgICt2
b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKTsNCiAgICArRklMRSAqemNvbmZfZm9wZW4oY29uc3Qg
Y2hhciAqbmFtZSk7DQogICAgK3ZvaWQgemNvbmZfaW5pdHNjYW4oY29uc3QgY2hhciAqbmFtZSk7
DQogICAgK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSk7DQogICAgK2ludCB6
Y29uZl9saW5lbm8odm9pZCk7DQogICAgK2NvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCk7
DQogICAgKw0KICAgICsvKiBjb25mZGF0YS5jICovDQogICAgK2NvbnN0IGNoYXIgKmNvbmZfZ2V0
X2NvbmZpZ25hbWUodm9pZCk7DQogICAgK2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRfY29uZm5hbWUo
dm9pZCk7DQogICAgK3ZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50KTsNCiAgICAr
dm9pZCBzeW1fYWRkX2NoYW5nZV9jb3VudChpbnQgY291bnQpOw0KICAgICtib29sIGNvbmZfc2V0
X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSk7DQogICAgK3ZvaWQgc2V0
X2FsbF9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pOw0KICAgICsNCiAgICArLyog
Y29uZmRhdGEuYyBhbmQgZXhwci5jICovDQogICAgK3N0YXRpYyBpbmxpbmUgdm9pZCB4ZndyaXRl
KGNvbnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IGNvdW50LCBGSUxFICpvdXQpDQog
ICAgK3sNCiAgICArCWFzc2VydChsZW4gIT0gMCk7DQogICAgKw0KICAgICsJaWYgKGZ3cml0ZShz
dHIsIGxlbiwgY291bnQsIG91dCkgIT0gY291bnQpDQogICAgKwkJZnByaW50ZihzdGRlcnIsICJF
cnJvciBpbiB3cml0aW5nIG9yIGVuZCBvZiBmaWxlLlxuIik7DQogICAgK30NCiAgICArDQogICAg
Ky8qIG1lbnUuYyAqLw0KICAgICt2b2lkIF9tZW51X2luaXQodm9pZCk7DQogICAgK3ZvaWQgbWVu
dV93YXJuKHN0cnVjdCBtZW51ICptZW51LCBjb25zdCBjaGFyICpmbXQsIC4uLik7DQogICAgK3N0
cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOw0KICAgICt2b2lkIG1lbnVfZW5kX21lbnUo
dm9pZCk7DQogICAgK3ZvaWQgbWVudV9hZGRfZW50cnkoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAg
ICArdm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCk7DQogICAgK3ZvaWQgbWVudV9h
ZGRfdmlzaWJpbGl0eShzdHJ1Y3QgZXhwciAqZGVwKTsNCiAgICArc3RydWN0IHByb3BlcnR5ICpt
ZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1Y3Qg
ZXhwciAqZGVwKTsNCiAgICArdm9pZCBtZW51X2FkZF9leHByKGVudW0gcHJvcF90eXBlIHR5cGUs
IHN0cnVjdCBleHByICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKTsNCiAgICArdm9pZCBtZW51X2Fk
ZF9zeW1ib2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qg
ZXhwciAqZGVwKTsNCiAgICArdm9pZCBtZW51X2FkZF9vcHRpb25fbW9kdWxlcyh2b2lkKTsNCiAg
ICArdm9pZCBtZW51X2FkZF9vcHRpb25fZGVmY29uZmlnX2xpc3Qodm9pZCk7DQogICAgK3ZvaWQg
bWVudV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3kodm9pZCk7DQogICAgK3ZvaWQgbWVudV9maW5h
bGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KTsNCiAgICArdm9pZCBtZW51X3NldF90eXBlKGludCB0
eXBlKTsNCiAgICArDQogICAgKy8qIHV0aWwuYyAqLw0KICAgICtzdHJ1Y3QgZmlsZSAqZmlsZV9s
b29rdXAoY29uc3QgY2hhciAqbmFtZSk7DQogICAgK3ZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUp
Ow0KICAgICt2b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90IHNpemUpOw0KICAgICt2
b2lkICp4cmVhbGxvYyh2b2lkICpwLCBzaXplX3Qgc2l6ZSk7DQogICAgK2NoYXIgKnhzdHJkdXAo
Y29uc3QgY2hhciAqcyk7DQogICAgK2NoYXIgKnhzdHJuZHVwKGNvbnN0IGNoYXIgKnMsIHNpemVf
dCBuKTsNCiAgICArDQogICAgKy8qIGxleGVyLmwgKi8NCiAgICAraW50IHl5bGV4KHZvaWQpOw0K
ICAgICsNCiAgICArc3RydWN0IGdzdHIgew0KICAgICsJc2l6ZV90IGxlbjsNCiAgICArCWNoYXIg
ICpzOw0KICAgICsJLyoNCiAgICArCSogd2hlbiBtYXhfd2lkdGggaXMgbm90IHplcm8gbG9uZyBs
aW5lcyBpbiBzdHJpbmcgcyAoaWYgYW55KSBnZXQNCiAgICArCSogd3JhcHBlZCBub3QgdG8gZXhj
ZWVkIHRoZSBtYXhfd2lkdGggdmFsdWUNCiAgICArCSovDQogICAgKwlpbnQgbWF4X3dpZHRoOw0K
ICAgICt9Ow0KICAgICtzdHJ1Y3QgZ3N0ciBzdHJfbmV3KHZvaWQpOw0KICAgICt2b2lkIHN0cl9m
cmVlKHN0cnVjdCBnc3RyICpncyk7DQogICAgK3ZvaWQgc3RyX2FwcGVuZChzdHJ1Y3QgZ3N0ciAq
Z3MsIGNvbnN0IGNoYXIgKnMpOw0KICAgICt2b2lkIHN0cl9wcmludGYoc3RydWN0IGdzdHIgKmdz
LCBjb25zdCBjaGFyICpmbXQsIC4uLik7DQogICAgK2NvbnN0IGNoYXIgKnN0cl9nZXQoc3RydWN0
IGdzdHIgKmdzKTsNCiAgICArDQogICAgKy8qIHN5bWJvbC5jICovDQogICAgK3ZvaWQgc3ltX2Ns
ZWFyX2FsbF92YWxpZCh2b2lkKTsNCiAgICArc3RydWN0IHN5bWJvbCAqc3ltX2Nob2ljZV9kZWZh
dWx0KHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgK3N0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9y
YW5nZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgK2NvbnN0IGNoYXIgKnN5bV9nZXRf
c3RyaW5nX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICArc3RydWN0IHN5bWJvbCAq
c3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICArc3RydWN0IHByb3BlcnR5
ICpwcm9wX2FsbG9jKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSk7DQog
ICAgK3N0cnVjdCBzeW1ib2wgKnByb3BfZ2V0X3N5bWJvbChzdHJ1Y3QgcHJvcGVydHkgKnByb3Ap
Ow0KICAgICsNCiAgICArc3RhdGljIGlubGluZSB0cmlzdGF0ZSBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJcmV0dXJuIHN5bS0+Y3Vyci50
cmk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICtzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW1i
b2wgKnN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAg
ICsJcmV0dXJuIChzdHJ1Y3Qgc3ltYm9sICopc3ltLT5jdXJyLnZhbDsNCiAgICArfQ0KICAgICsN
CiAgICArc3RhdGljIGlubGluZSBib29sIHN5bV9zZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1i
b2wgKmNoLCBzdHJ1Y3Qgc3ltYm9sICpjaHZhbCkNCiAgICArew0KICAgICsJcmV0dXJuIHN5bV9z
ZXRfdHJpc3RhdGVfdmFsdWUoY2h2YWwsIHllcyk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRp
YyBpbmxpbmUgYm9vbCBzeW1faXNfY2hvaWNlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0K
ICAgICsJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFID8gdHJ1ZSA6IGZhbHNlOw0K
ICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2lzX2Nob2ljZV92YWx1
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCXJldHVybiBzeW0tPmZsYWdzICYg
U1lNQk9MX0NIT0lDRVZBTCA/IHRydWUgOiBmYWxzZTsNCiAgICArfQ0KICAgICsNCiAgICArc3Rh
dGljIGlubGluZSBib29sIHN5bV9pc19vcHRpb25hbChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAg
K3sNCiAgICArCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX09QVElPTkFMID8gdHJ1ZSA6IGZh
bHNlOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW5saW5lIGJvb2wgc3ltX2hhc192YWx1
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCXJldHVybiBzeW0tPmZsYWdzICYg
U1lNQk9MX0RFRl9VU0VSID8gdHJ1ZSA6IGZhbHNlOw0KICAgICt9DQogICAgKw0KICAgICsjaWZk
ZWYgX19jcGx1c3BsdXMNCiAgICArfQ0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNlbmRpZiAv
KiBMS0NfSCAqLw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xrY19wcm90
by5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaA0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uODZjMjY3NQ0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2xrY19wcm90by5oDQogICAgQEAgLTAsMCArMSw2
NiBAQA0KICAgICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KICAgICsj
aW5jbHVkZSA8c3RkYXJnLmg+DQogICAgKw0KICAgICsvKiBjb25mZGF0YS5jICovDQogICAgK3Zv
aWQgY29uZl9wYXJzZShjb25zdCBjaGFyICpuYW1lKTsNCiAgICAraW50IGNvbmZfcmVhZChjb25z
dCBjaGFyICpuYW1lKTsNCiAgICAraW50IGNvbmZfcmVhZF9zaW1wbGUoY29uc3QgY2hhciAqbmFt
ZSwgaW50KTsNCiAgICAraW50IGNvbmZfd3JpdGVfZGVmY29uZmlnKGNvbnN0IGNoYXIgKm5hbWUp
Ow0KICAgICtpbnQgY29uZl93cml0ZShjb25zdCBjaGFyICpuYW1lKTsNCiAgICAraW50IGNvbmZf
d3JpdGVfYXV0b2NvbmYoaW50IG92ZXJ3cml0ZSk7DQogICAgK2Jvb2wgY29uZl9nZXRfY2hhbmdl
ZCh2b2lkKTsNCiAgICArdm9pZCBjb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKHZvaWQgKCpmbiko
dm9pZCkpOw0KICAgICt2b2lkIGNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2sodm9pZCAoKmZuKShj
b25zdCBjaGFyICpzKSk7DQogICAgKw0KICAgICsvKiBtZW51LmMgKi8NCiAgICArZXh0ZXJuIHN0
cnVjdCBtZW51IHJvb3RtZW51Ow0KICAgICsNCiAgICArYm9vbCBtZW51X2lzX2VtcHR5KHN0cnVj
dCBtZW51ICptZW51KTsNCiAgICArYm9vbCBtZW51X2lzX3Zpc2libGUoc3RydWN0IG1lbnUgKm1l
bnUpOw0KICAgICtib29sIG1lbnVfaGFzX3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAg
K2NvbnN0IGNoYXIgKiBtZW51X2dldF9wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtz
dHJ1Y3QgbWVudSAqIG1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAg
K3N0cnVjdCBtZW51ICogbWVudV9nZXRfcGFyZW50X21lbnUoc3RydWN0IG1lbnUgKm1lbnUpOw0K
ICAgICtib29sIG1lbnVfaGFzX2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtjb25zdCBj
aGFyICogbWVudV9nZXRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK3N0cnVjdCBnc3Ry
IGdldF9yZWxhdGlvbnNfc3RyKHN0cnVjdCBzeW1ib2wgKipzeW1fYXJyLCBzdHJ1Y3QgbGlzdF9o
ZWFkICpoZWFkKTsNCiAgICArdm9pZCBtZW51X2dldF9leHRfaGVscChzdHJ1Y3QgbWVudSAqbWVu
dSwgc3RydWN0IGdzdHIgKmhlbHApOw0KICAgICsNCiAgICArLyogc3ltYm9sLmMgKi8NCiAgICAr
ZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKiBzeW1ib2xfaGFzaFtTWU1CT0xfSEFTSFNJWkVdOw0KICAg
ICsNCiAgICArc3RydWN0IHN5bWJvbCAqIHN5bV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgaW50
IGZsYWdzKTsNCiAgICArc3RydWN0IHN5bWJvbCAqIHN5bV9maW5kKGNvbnN0IGNoYXIgKm5hbWUp
Ow0KICAgICtjb25zdCBjaGFyICogc3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoY29uc3QgY2hhciAq
aW4pOw0KICAgICtzdHJ1Y3Qgc3ltYm9sICoqIHN5bV9yZV9zZWFyY2goY29uc3QgY2hhciAqcGF0
dGVybik7DQogICAgK2NvbnN0IGNoYXIgKiBzeW1fdHlwZV9uYW1lKGVudW0gc3ltYm9sX3R5cGUg
dHlwZSk7DQogICAgK3ZvaWQgc3ltX2NhbGNfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAg
ICArZW51bSBzeW1ib2xfdHlwZSBzeW1fZ2V0X3R5cGUoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAg
ICArYm9vbCBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlz
dGF0ZSB0cmkpOw0KICAgICtib29sIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJv
bCAqc3ltLHRyaXN0YXRlIHRyaSk7DQogICAgK3RyaXN0YXRlIHN5bV90b2dnbGVfdHJpc3RhdGVf
dmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICArYm9vbCBzeW1fc3RyaW5nX3ZhbGlkKHN0
cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqbmV3dmFsKTsNCiAgICArYm9vbCBzeW1fc3Ry
aW5nX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cik7DQog
ICAgK2Jvb2wgc3ltX3NldF9zdHJpbmdfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBj
aGFyICpuZXd2YWwpOw0KICAgICtib29sIHN5bV9pc19jaGFuZ2FibGUoc3RydWN0IHN5bWJvbCAq
c3ltKTsNCiAgICArc3RydWN0IHByb3BlcnR5ICogc3ltX2dldF9jaG9pY2VfcHJvcChzdHJ1Y3Qg
c3ltYm9sICpzeW0pOw0KICAgICtjb25zdCBjaGFyICogc3ltX2dldF9zdHJpbmdfdmFsdWUoc3Ry
dWN0IHN5bWJvbCAqc3ltKTsNCiAgICArDQogICAgK2NvbnN0IGNoYXIgKiBwcm9wX2dldF90eXBl
X25hbWUoZW51bSBwcm9wX3R5cGUgdHlwZSk7DQogICAgKw0KICAgICsvKiBwcmVwcm9jZXNzLmMg
Ki8NCiAgICArZW51bSB2YXJpYWJsZV9mbGF2b3Igew0KICAgICsJVkFSX1NJTVBMRSwNCiAgICAr
CVZBUl9SRUNVUlNJVkUsDQogICAgKwlWQVJfQVBQRU5ELA0KICAgICt9Ow0KICAgICt2b2lkIGVu
dl93cml0ZV9kZXAoRklMRSAqZiwgY29uc3QgY2hhciAqYXV0b19jb25mX25hbWUpOw0KICAgICt2
b2lkIHZhcmlhYmxlX2FkZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSwNCiAg
ICArCQkgIGVudW0gdmFyaWFibGVfZmxhdm9yIGZsYXZvcik7DQogICAgK3ZvaWQgdmFyaWFibGVf
YWxsX2RlbCh2b2lkKTsNCiAgICArY2hhciAqZXhwYW5kX3N0cmluZyhjb25zdCBjaGFyICppbik7
DQogICAgK2NoYXIgKmV4cGFuZF9kb2xsYXIoY29uc3QgY2hhciAqKnN0cik7DQogICAgK2NoYXIg
KmV4cGFuZF9vbmVfdG9rZW4oY29uc3QgY2hhciAqKnN0cik7DQogICAgKw0KICAgICsvKiBleHBy
LmMgKi8NCiAgICArdm9pZCBleHByX3ByaW50KHN0cnVjdCBleHByICplLCB2b2lkICgqZm4pKHZv
aWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLCB2b2lkICpkYXRhLCBpbnQgcHJl
dnRva2VuKTsNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9C
SUcuRkFULldBUk5JTkcgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FS
TklORw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uN2NiNWE3
ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL0JJRy5GQVQuV0FSTklORw0KICAgIEBAIC0wLDAgKzEsNCBAQA0KICAgICtUaGlzIGlzIE5P
VCB0aGUgb2ZmaWNpYWwgdmVyc2lvbiBvZiBkaWFsb2cuICBUaGlzIHZlcnNpb24gaGFzIGJlZW4N
CiAgICArc2lnbmlmaWNhbnRseSBtb2RpZmllZCBmcm9tIHRoZSBvcmlnaW5hbC4gIEl0IGlzIGZv
ciB1c2UgYnkgdGhlIExpbnV4DQogICAgK2tlcm5lbCBjb25maWd1cmF0aW9uIHNjcmlwdC4gIFBs
ZWFzZSBkbyBub3QgYm90aGVyIFNhdmlvIExhbSB3aXRoDQogICAgK3F1ZXN0aW9ucyBhYm91dCB0
aGlzIHByb2dyYW0uDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFs
b2cvY2hlY2tsaXN0LmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2NoZWNrbGlzdC5j
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5mZDE2MWNmDQog
ICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cv
Y2hlY2tsaXN0LmMNCiAgICBAQCAtMCwwICsxLDMxOSBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMCsNCiAgICArLyoNCiAgICArICogIGNoZWNrbGlzdC5jIC0tIGlt
cGxlbWVudHMgdGhlIGNoZWNrbGlzdCBib3gNCiAgICArICoNCiAgICArICogIE9SSUdJTkFMIEFV
VEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykNCiAgICArICogICAgIFN0dWFydCBI
ZXJiZXJ0IC0gUy5IZXJiZXJ0QHNoZWZmaWVsZC5hYy51azogcmFkaW9saXN0IGV4dGVuc2lvbg0K
ICAgICsgKiAgICAgQWxlc3NhbmRybyBSdWJpbmkgLSBydWJpbmlAaXB2dmlzLnVuaXB2Lml0OiBt
ZXJnZWQgdGhlIHR3bw0KICAgICsgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcg
Qlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQ0KICAgICsgKi8NCiAgICArDQog
ICAgKyNpbmNsdWRlICJkaWFsb2cuaCINCiAgICArDQogICAgK3N0YXRpYyBpbnQgbGlzdF93aWR0
aCwgY2hlY2tfeCwgaXRlbV94Ow0KICAgICsNCiAgICArLyoNCiAgICArICogUHJpbnQgbGlzdCBp
dGVtDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9pdGVtKFdJTkRPVyAqIHdpbiwg
aW50IGNob2ljZSwgaW50IHNlbGVjdGVkKQ0KICAgICt7DQogICAgKwlpbnQgaTsNCiAgICArCWNo
YXIgKmxpc3RfaXRlbSA9IG1hbGxvYyhsaXN0X3dpZHRoICsgMSk7DQogICAgKw0KICAgICsJc3Ry
bmNweShsaXN0X2l0ZW0sIGl0ZW1fc3RyKCksIGxpc3Rfd2lkdGggLSBpdGVtX3gpOw0KICAgICsJ
bGlzdF9pdGVtW2xpc3Rfd2lkdGggLSBpdGVtX3hdID0gJ1wwJzsNCiAgICArDQogICAgKwkvKiBD
bGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICovDQogICAgKwl3YXR0cnNldCh3aW4sIGRsZy5t
ZW51Ym94LmF0cik7DQogICAgKwl3bW92ZSh3aW4sIGNob2ljZSwgMCk7DQogICAgKwlmb3IgKGkg
PSAwOyBpIDwgbGlzdF93aWR0aDsgaSsrKQ0KICAgICsJCXdhZGRjaCh3aW4sICcgJyk7DQogICAg
Kw0KICAgICsJd21vdmUod2luLCBjaG9pY2UsIGNoZWNrX3gpOw0KICAgICsJd2F0dHJzZXQod2lu
LCBzZWxlY3RlZCA/IGRsZy5jaGVja19zZWxlY3RlZC5hdHINCiAgICArCQkgOiBkbGcuY2hlY2su
YXRyKTsNCiAgICArCWlmICghaXRlbV9pc190YWcoJzonKSkNCiAgICArCQl3cHJpbnR3KHdpbiwg
IiglYykiLCBpdGVtX2lzX3RhZygnWCcpID8gJ1gnIDogJyAnKTsNCiAgICArDQogICAgKwl3YXR0
cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLnRhZ19zZWxlY3RlZC5hdHIgOiBkbGcudGFnLmF0cik7
DQogICAgKwltdndhZGRjaCh3aW4sIGNob2ljZSwgaXRlbV94LCBsaXN0X2l0ZW1bMF0pOw0KICAg
ICsJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5pdGVtX3NlbGVjdGVkLmF0ciA6IGRsZy5p
dGVtLmF0cik7DQogICAgKwl3YWRkc3RyKHdpbiwgbGlzdF9pdGVtICsgMSk7DQogICAgKwlpZiAo
c2VsZWN0ZWQpIHsNCiAgICArCQl3bW92ZSh3aW4sIGNob2ljZSwgY2hlY2tfeCArIDEpOw0KICAg
ICsJCXdyZWZyZXNoKHdpbik7DQogICAgKwl9DQogICAgKwlmcmVlKGxpc3RfaXRlbSk7DQogICAg
K30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFByaW50IHRoZSBzY3JvbGwgaW5kaWNhdG9ycy4N
CiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIHByaW50X2Fycm93cyhXSU5ET1cgKiB3aW4sIGlu
dCBjaG9pY2UsIGludCBpdGVtX25vLCBpbnQgc2Nyb2xsLA0KICAgICsJICAgICBpbnQgeSwgaW50
IHgsIGludCBoZWlnaHQpDQogICAgK3sNCiAgICArCXdtb3ZlKHdpbiwgeSwgeCk7DQogICAgKw0K
ICAgICsJaWYgKHNjcm9sbCA+IDApIHsNCiAgICArCQl3YXR0cnNldCh3aW4sIGRsZy51YXJyb3cu
YXRyKTsNCiAgICArCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsNCiAgICArCQl3YWRkc3RyKHdp
biwgIigtKSIpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51
Ym94LmF0cik7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCQl3YWRkY2go
d2luLCBBQ1NfSExJTkUpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAgKwkJ
d2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCX0NCiAgICArDQogICAgKwl5ID0geSArIGhl
aWdodCArIDE7DQogICAgKwl3bW92ZSh3aW4sIHksIHgpOw0KICAgICsNCiAgICArCWlmICgoaGVp
Z2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGNob2ljZSA8IGl0ZW1fbm8gLSAxKSkgew0KICAg
ICsJCXdhdHRyc2V0KHdpbiwgZGxnLmRhcnJvdy5hdHIpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFD
U19EQVJST1cpOw0KICAgICsJCXdhZGRzdHIod2luLCAiKCspIik7DQogICAgKwl9IGVsc2Ugew0K
ICAgICsJCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3hfYm9yZGVyLmF0cik7DQogICAgKwkJd2Fk
ZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAg
ICsJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5F
KTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogIERpc3BsYXkgdGhl
IHRlcm1pbmF0aW9uIGJ1dHRvbnMNCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIHByaW50X2J1
dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3Rl
ZCkNCiAgICArew0KICAgICsJaW50IHggPSB3aWR0aCAvIDIgLSAxMTsNCiAgICArCWludCB5ID0g
aGVpZ2h0IC0gMjsNCiAgICArDQogICAgKwlwcmludF9idXR0b24oZGlhbG9nLCAiU2VsZWN0Iiwg
eSwgeCwgc2VsZWN0ZWQgPT0gMCk7DQogICAgKwlwcmludF9idXR0b24oZGlhbG9nLCAiIEhlbHAg
IiwgeSwgeCArIDE0LCBzZWxlY3RlZCA9PSAxKTsNCiAgICArDQogICAgKwl3bW92ZShkaWFsb2cs
IHksIHggKyAxICsgMTQgKiBzZWxlY3RlZCk7DQogICAgKwl3cmVmcmVzaChkaWFsb2cpOw0KICAg
ICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBEaXNwbGF5IGEgZGlhbG9nIGJveCB3aXRoIGEg
bGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHR1cm5lZCBvbiBvciBvZmYNCiAgICArICogaW4g
dGhlIHN0eWxlIG9mIHJhZGlvbGlzdCAob25seSBvbmUgb3B0aW9uIHR1cm5lZCBvbiBhdCBhIHRp
bWUpLg0KICAgICsgKi8NCiAgICAraW50IGRpYWxvZ19jaGVja2xpc3QoY29uc3QgY2hhciAqdGl0
bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwNCiAgICArCQkgICAgIGludCB3aWR0
aCwgaW50IGxpc3RfaGVpZ2h0KQ0KICAgICt7DQogICAgKwlpbnQgaSwgeCwgeSwgYm94X3gsIGJv
eF95Ow0KICAgICsJaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAsIGNob2ljZSA9IDAsIHNjcm9sbCA9
IDAsIG1heF9jaG9pY2U7DQogICAgKwlXSU5ET1cgKmRpYWxvZywgKmxpc3Q7DQogICAgKw0KICAg
ICsJLyogd2hpY2ggaXRlbSB0byBoaWdobGlnaHQgKi8NCiAgICArCWl0ZW1fZm9yZWFjaCgpIHsN
CiAgICArCQlpZiAoaXRlbV9pc190YWcoJ1gnKSkNCiAgICArCQkJY2hvaWNlID0gaXRlbV9uKCk7
DQogICAgKwkJaWYgKGl0ZW1faXNfc2VsZWN0ZWQoKSkgew0KICAgICsJCQljaG9pY2UgPSBpdGVt
X24oKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArZG9f
cmVzaXplOg0KICAgICsJaWYgKGdldG1heHkoc3Rkc2NyKSA8IChoZWlnaHQgKyBDSEVDS0xJU1Rf
SEVJR1RIX01JTikpDQogICAgKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7DQogICAgKwlp
ZiAoZ2V0bWF4eChzdGRzY3IpIDwgKHdpZHRoICsgQ0hFQ0tMSVNUX1dJRFRIX01JTikpDQogICAg
KwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7DQogICAgKw0KICAgICsJbWF4X2Nob2ljZSA9
IE1JTihsaXN0X2hlaWdodCwgaXRlbV9jb3VudCgpKTsNCiAgICArDQogICAgKwkvKiBjZW50ZXIg
ZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICArCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lk
dGgpIC8gMjsNCiAgICArCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7DQogICAg
Kw0KICAgICsJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsNCiAgICAr
DQogICAgKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7DQogICAgKwlrZXlw
YWQoZGlhbG9nLCBUUlVFKTsNCiAgICArDQogICAgKwlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhl
aWdodCwgd2lkdGgsDQogICAgKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7DQog
ICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsNCiAgICArCW12d2FkZGNoKGRp
YWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0KICAgICsJZm9yIChpID0gMDsgaSA8IHdp
ZHRoIC0gMjsgaSsrKQ0KICAgICsJCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7DQogICAgKwl3
YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICArCXdhZGRjaChkaWFsb2csIEFD
U19SVEVFKTsNCiAgICArDQogICAgKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7
DQogICAgKw0KICAgICsJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQogICAgKwlw
cmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsNCiAgICArDQog
ICAgKwlsaXN0X3dpZHRoID0gd2lkdGggLSA2Ow0KICAgICsJYm94X3kgPSBoZWlnaHQgLSBsaXN0
X2hlaWdodCAtIDU7DQogICAgKwlib3hfeCA9ICh3aWR0aCAtIGxpc3Rfd2lkdGgpIC8gMiAtIDE7
DQogICAgKw0KICAgICsJLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBsaXN0ICovDQogICAg
KwlsaXN0ID0gc3Vid2luKGRpYWxvZywgbGlzdF9oZWlnaHQsIGxpc3Rfd2lkdGgsIHkgKyBib3hf
eSArIDEsDQogICAgKwkJICAgICAgeCArIGJveF94ICsgMSk7DQogICAgKw0KICAgICsJa2V5cGFk
KGxpc3QsIFRSVUUpOw0KICAgICsNCiAgICArCS8qIGRyYXcgYSBib3ggYXJvdW5kIHRoZSBsaXN0
IGl0ZW1zICovDQogICAgKwlkcmF3X2JveChkaWFsb2csIGJveF95LCBib3hfeCwgbGlzdF9oZWln
aHQgKyAyLCBsaXN0X3dpZHRoICsgMiwNCiAgICArCQkgZGxnLm1lbnVib3hfYm9yZGVyLmF0ciwg
ZGxnLm1lbnVib3guYXRyKTsNCiAgICArDQogICAgKwkvKiBGaW5kIGxlbmd0aCBvZiBsb25nZXN0
IGl0ZW0gaW4gb3JkZXIgdG8gY2VudGVyIGNoZWNrbGlzdCAqLw0KICAgICsJY2hlY2tfeCA9IDA7
DQogICAgKwlpdGVtX2ZvcmVhY2goKQ0KICAgICsJCWNoZWNrX3ggPSBNQVgoY2hlY2tfeCwgc3Ry
bGVuKGl0ZW1fc3RyKCkpICsgNCk7DQogICAgKwljaGVja194ID0gTUlOKGNoZWNrX3gsIGxpc3Rf
d2lkdGgpOw0KICAgICsNCiAgICArCWNoZWNrX3ggPSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8g
MjsNCiAgICArCWl0ZW1feCA9IGNoZWNrX3ggKyA0Ow0KICAgICsNCiAgICArCWlmIChjaG9pY2Ug
Pj0gbGlzdF9oZWlnaHQpIHsNCiAgICArCQlzY3JvbGwgPSBjaG9pY2UgLSBsaXN0X2hlaWdodCAr
IDE7DQogICAgKwkJY2hvaWNlIC09IHNjcm9sbDsNCiAgICArCX0NCiAgICArDQogICAgKwkvKiBQ
cmludCB0aGUgbGlzdCAqLw0KICAgICsJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykg
ew0KICAgICsJCWl0ZW1fc2V0KHNjcm9sbCArIGkpOw0KICAgICsJCXByaW50X2l0ZW0obGlzdCwg
aSwgaSA9PSBjaG9pY2UpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXByaW50X2Fycm93cyhkaWFs
b2csIGNob2ljZSwgaXRlbV9jb3VudCgpLCBzY3JvbGwsDQogICAgKwkJICAgICBib3hfeSwgYm94
X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQpOw0KICAgICsNCiAgICArCXByaW50X2J1dHRv
bnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICArDQogICAgKwl3bm91dHJlZnJlc2go
ZGlhbG9nKTsNCiAgICArCXdub3V0cmVmcmVzaChsaXN0KTsNCiAgICArCWRvdXBkYXRlKCk7DQog
ICAgKw0KICAgICsJd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7DQogICAgKwkJa2V5ID0gd2dldGNo
KGRpYWxvZyk7DQogICAgKw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKysp
IHsNCiAgICArCQkJaXRlbV9zZXQoaSArIHNjcm9sbCk7DQogICAgKwkJCWlmICh0b3VwcGVyKGtl
eSkgPT0gdG91cHBlcihpdGVtX3N0cigpWzBdKSkNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCX0N
CiAgICArDQogICAgKwkJaWYgKGkgPCBtYXhfY2hvaWNlIHx8IGtleSA9PSBLRVlfVVAgfHwga2V5
ID09IEtFWV9ET1dOIHx8DQogICAgKwkJICAgIGtleSA9PSAnKycgfHwga2V5ID09ICctJykgew0K
ICAgICsJCQlpZiAoa2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gJy0nKSB7DQogICAgKwkJCQlpZiAo
IWNob2ljZSkgew0KICAgICsJCQkJCWlmICghc2Nyb2xsKQ0KICAgICsJCQkJCQljb250aW51ZTsN
CiAgICArCQkJCQkvKiBTY3JvbGwgbGlzdCBkb3duICovDQogICAgKwkJCQkJaWYgKGxpc3RfaGVp
Z2h0ID4gMSkgew0KICAgICsJCQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBmaXJzdCBpdGVt
ICovDQogICAgKwkJCQkJCWl0ZW1fc2V0KHNjcm9sbCk7DQogICAgKwkJCQkJCXByaW50X2l0ZW0o
bGlzdCwgMCwgRkFMU0UpOw0KICAgICsJCQkJCQlzY3JvbGxvayhsaXN0LCBUUlVFKTsNCiAgICAr
CQkJCQkJd3NjcmwobGlzdCwgLTEpOw0KICAgICsJCQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7
DQogICAgKwkJCQkJfQ0KICAgICsJCQkJCXNjcm9sbC0tOw0KICAgICsJCQkJCWl0ZW1fc2V0KHNj
cm9sbCk7DQogICAgKwkJCQkJcHJpbnRfaXRlbShsaXN0LCAwLCBUUlVFKTsNCiAgICArCQkJCQlw
cmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwNCiAgICArCQkJCQkJICAg
ICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7DQogICAg
Kw0KICAgICsJCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOw0KICAgICsJCQkJCXdyZWZyZXNoKGxp
c3QpOw0KICAgICsNCiAgICArCQkJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkg
cHJlc3MgKi8NCiAgICArCQkJCX0gZWxzZQ0KICAgICsJCQkJCWkgPSBjaG9pY2UgLSAxOw0KICAg
ICsJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBrZXkgPT0gJysnKSB7DQogICAgKwkJ
CQlpZiAoY2hvaWNlID09IG1heF9jaG9pY2UgLSAxKSB7DQogICAgKwkJCQkJaWYgKHNjcm9sbCAr
IGNob2ljZSA+PSBpdGVtX2NvdW50KCkgLSAxKQ0KICAgICsJCQkJCQljb250aW51ZTsNCiAgICAr
CQkJCQkvKiBTY3JvbGwgbGlzdCB1cCAqLw0KICAgICsJCQkJCWlmIChsaXN0X2hlaWdodCA+IDEp
IHsNCiAgICArCQkJCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgbGFzdCBpdGVtIGJlZm9yZSBz
Y3JvbGxpbmcgdXAgKi8NCiAgICArCQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2ljZSAt
IDEpOw0KICAgICsJCQkJCQlwcmludF9pdGVtKGxpc3QsDQogICAgKwkJCQkJCQkgICAgbWF4X2No
b2ljZSAtIDEsDQogICAgKwkJCQkJCQkgICAgRkFMU0UpOw0KICAgICsJCQkJCQlzY3JvbGxvayhs
aXN0LCBUUlVFKTsNCiAgICArCQkJCQkJd3NjcmwobGlzdCwgMSk7DQogICAgKwkJCQkJCXNjcm9s
bG9rKGxpc3QsIEZBTFNFKTsNCiAgICArCQkJCQl9DQogICAgKwkJCQkJc2Nyb2xsKys7DQogICAg
KwkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpOw0KICAgICsJCQkJCXByaW50
X2l0ZW0obGlzdCwgbWF4X2Nob2ljZSAtIDEsIFRSVUUpOw0KICAgICsNCiAgICArCQkJCQlwcmlu
dF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1fY291bnQoKSwNCiAgICArCQkJCQkJICAgICBz
Y3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7DQogICAgKw0K
ICAgICsJCQkJCXdub3V0cmVmcmVzaChkaWFsb2cpOw0KICAgICsJCQkJCXdyZWZyZXNoKGxpc3Qp
Ow0KICAgICsNCiAgICArCQkJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJl
c3MgKi8NCiAgICArCQkJCX0gZWxzZQ0KICAgICsJCQkJCWkgPSBjaG9pY2UgKyAxOw0KICAgICsJ
CQl9DQogICAgKwkJCWlmIChpICE9IGNob2ljZSkgew0KICAgICsJCQkJLyogRGUtaGlnaGxpZ2h0
IGN1cnJlbnQgaXRlbSAqLw0KICAgICsJCQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsNCiAg
ICArCQkJCXByaW50X2l0ZW0obGlzdCwgY2hvaWNlLCBGQUxTRSk7DQogICAgKwkJCQkvKiBIaWdo
bGlnaHQgbmV3IGl0ZW0gKi8NCiAgICArCQkJCWNob2ljZSA9IGk7DQogICAgKwkJCQlpdGVtX3Nl
dChzY3JvbGwgKyBjaG9pY2UpOw0KICAgICsJCQkJcHJpbnRfaXRlbShsaXN0LCBjaG9pY2UsIFRS
VUUpOw0KICAgICsJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7DQogICAgKwkJCQl3cmVmcmVzaChs
aXN0KTsNCiAgICArCQkJfQ0KICAgICsJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBr
ZXkgcHJlc3MgKi8NCiAgICArCQl9DQogICAgKwkJc3dpdGNoIChrZXkpIHsNCiAgICArCQljYXNl
ICdIJzoNCiAgICArCQljYXNlICdoJzoNCiAgICArCQljYXNlICc/JzoNCiAgICArCQkJYnV0dG9u
ID0gMTsNCiAgICArCQkJLyogZmFsbC10aHJvdWdoICovDQogICAgKwkJY2FzZSAnUyc6DQogICAg
KwkJY2FzZSAncyc6DQogICAgKwkJY2FzZSAnICc6DQogICAgKwkJY2FzZSAnXG4nOg0KICAgICsJ
CQlpdGVtX2ZvcmVhY2goKQ0KICAgICsJCQkJaXRlbV9zZXRfc2VsZWN0ZWQoMCk7DQogICAgKwkJ
CWl0ZW1fc2V0KHNjcm9sbCArIGNob2ljZSk7DQogICAgKwkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEp
Ow0KICAgICsJCQlkZWx3aW4obGlzdCk7DQogICAgKwkJCWRlbHdpbihkaWFsb2cpOw0KICAgICsJ
CQlyZXR1cm4gYnV0dG9uOw0KICAgICsJCWNhc2UgVEFCOg0KICAgICsJCWNhc2UgS0VZX0xFRlQ6
DQogICAgKwkJY2FzZSBLRVlfUklHSFQ6DQogICAgKwkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9M
RUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKQ0KICAgICsJCQkgICAgPyAxIDogKGJ1dHRv
biA+IDEgPyAwIDogYnV0dG9uKTsNCiAgICArDQogICAgKwkJCXByaW50X2J1dHRvbnMoZGlhbG9n
LCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOw0KICAgICsJCQl3cmVmcmVzaChkaWFsb2cpOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlICdYJzoNCiAgICArCQljYXNlICd4JzoNCiAgICArCQkJ
a2V5ID0gS0VZX0VTQzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfRVNDOg0KICAg
ICsJCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNh
c2UgS0VZX1JFU0laRToNCiAgICArCQkJZGVsd2luKGxpc3QpOw0KICAgICsJCQlkZWx3aW4oZGlh
bG9nKTsNCiAgICArCQkJb25fa2V5X3Jlc2l6ZSgpOw0KICAgICsJCQlnb3RvIGRvX3Jlc2l6ZTsN
CiAgICArCQl9DQogICAgKw0KICAgICsJCS8qIE5vdywgdXBkYXRlIGV2ZXJ5dGhpbmcuLi4gKi8N
CiAgICArCQlkb3VwZGF0ZSgpOw0KICAgICsJfQ0KICAgICsJZGVsd2luKGxpc3QpOw0KICAgICsJ
ZGVsd2luKGRpYWxvZyk7DQogICAgKwlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8NCiAg
ICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2RpYWxv
Zy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9kaWFsb2cuaA0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNjhiNTY1ZQ0KICAgIC0tLSAvZGV2L251
bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2RpYWxvZy5oDQogICAg
QEAgLTAsMCArMSwyMzggQEANCiAgICArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjArICovDQogICAgKy8qDQogICAgKyAqICBkaWFsb2cuaCAtLSBjb21tb24gZGVjbGFyYXRpb25z
IGZvciBhbGwgZGlhbG9nIG1vZHVsZXMNCiAgICArICoNCiAgICArICogIEFVVEhPUjogU2F2aW8g
TGFtIChsYW04MzZAY3MuY3Voay5oaykNCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8
c3lzL3R5cGVzLmg+DQogICAgKyNpbmNsdWRlIDxmY250bC5oPg0KICAgICsjaW5jbHVkZSA8dW5p
c3RkLmg+DQogICAgKyNpbmNsdWRlIDxjdHlwZS5oPg0KICAgICsjaW5jbHVkZSA8c3RkbGliLmg+
DQogICAgKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGJvb2wuaD4NCiAg
ICArDQogICAgKyNpZmRlZiBfX3N1bl9fDQogICAgKyNkZWZpbmUgQ1VSU19NQUNST1MNCiAgICAr
I2VuZGlmDQogICAgKyNpbmNsdWRlIDxuY3Vyc2VzLmg+DQogICAgKw0KICAgICsvKg0KICAgICsg
KiBDb2xvcnMgaW4gbmN1cnNlcyAxLjkuOWUgZG8gbm90IHdvcmsgcHJvcGVybHkgc2luY2UgZm9y
ZWdyb3VuZCBhbmQNCiAgICArICogYmFja2dyb3VuZCBjb2xvcnMgYXJlIE9SJ2QgcmF0aGVyIHRo
YW4gc2VwYXJhdGVseSBtYXNrZWQuICBUaGlzIHZlcnNpb24NCiAgICArICogb2YgZGlhbG9nIHdh
cyBoYWNrZWQgdG8gd29yayB3aXRoIG5jdXJzZXMgMS45LjllLCBtYWtpbmcgaXQgaW5jb21wYXRp
YmxlDQogICAgKyAqIHdpdGggc3RhbmRhcmQgY3Vyc2VzLiAgVGhlIHNpbXBsZXN0IGZpeCAodG8g
bWFrZSB0aGlzIHdvcmsgd2l0aCBzdGFuZGFyZA0KICAgICsgKiBjdXJzZXMpIHVzZXMgdGhlIHdi
a2dkc2V0KCkgZnVuY3Rpb24sIG5vdCB1c2VkIGluIHRoZSBvcmlnaW5hbCBoYWNrLg0KICAgICsg
KiBUdXJuIGl0IG9mZiBpZiB3ZSdyZSBidWlsZGluZyB3aXRoIDEuOS45ZSwgc2luY2UgaXQganVz
dCBjb25mdXNlcyB0aGluZ3MuDQogICAgKyAqLw0KICAgICsjaWYgZGVmaW5lZChOQ1VSU0VTX1ZF
UlNJT04pICYmIGRlZmluZWQoX05FRURfV1JBUCkgJiYgIWRlZmluZWQoR0NDX1BSSU5URkxJS0Up
DQogICAgKyNkZWZpbmUgT0xEX05DVVJTRVMgMQ0KICAgICsjdW5kZWYgIHdia2dkc2V0DQogICAg
KyNkZWZpbmUgd2JrZ2RzZXQodyxwKQkJLypub3RoaW5nICovDQogICAgKyNlbHNlDQogICAgKyNk
ZWZpbmUgT0xEX05DVVJTRVMgMA0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNkZWZpbmUgVFIo
cGFyYW1zKSBfdHJhY2VmIHBhcmFtcw0KICAgICsNCiAgICArI2RlZmluZSBLRVlfRVNDIDI3DQog
ICAgKyNkZWZpbmUgVEFCIDkNCiAgICArI2RlZmluZSBNQVhfTEVOIDIwNDgNCiAgICArI2RlZmlu
ZSBCVUZfU0laRSAoMTAqMTAyNCkNCiAgICArI2RlZmluZSBNSU4oeCx5KSAoeCA8IHkgPyB4IDog
eSkNCiAgICArI2RlZmluZSBNQVgoeCx5KSAoeCA+IHkgPyB4IDogeSkNCiAgICArDQogICAgKyNp
Zm5kZWYgQUNTX1VMQ09STkVSDQogICAgKyNkZWZpbmUgQUNTX1VMQ09STkVSICcrJw0KICAgICsj
ZW5kaWYNCiAgICArI2lmbmRlZiBBQ1NfTExDT1JORVINCiAgICArI2RlZmluZSBBQ1NfTExDT1JO
RVIgJysnDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIEFDU19VUkNPUk5FUg0KICAgICsjZGVm
aW5lIEFDU19VUkNPUk5FUiAnKycNCiAgICArI2VuZGlmDQogICAgKyNpZm5kZWYgQUNTX0xSQ09S
TkVSDQogICAgKyNkZWZpbmUgQUNTX0xSQ09STkVSICcrJw0KICAgICsjZW5kaWYNCiAgICArI2lm
bmRlZiBBQ1NfSExJTkUNCiAgICArI2RlZmluZSBBQ1NfSExJTkUgJy0nDQogICAgKyNlbmRpZg0K
ICAgICsjaWZuZGVmIEFDU19WTElORQ0KICAgICsjZGVmaW5lIEFDU19WTElORSAnfCcNCiAgICAr
I2VuZGlmDQogICAgKyNpZm5kZWYgQUNTX0xURUUNCiAgICArI2RlZmluZSBBQ1NfTFRFRSAnKycN
CiAgICArI2VuZGlmDQogICAgKyNpZm5kZWYgQUNTX1JURUUNCiAgICArI2RlZmluZSBBQ1NfUlRF
RSAnKycNCiAgICArI2VuZGlmDQogICAgKyNpZm5kZWYgQUNTX1VBUlJPVw0KICAgICsjZGVmaW5l
IEFDU19VQVJST1cgJ14nDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIEFDU19EQVJST1cNCiAg
ICArI2RlZmluZSBBQ1NfREFSUk9XICd2Jw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIGVy
cm9yIHJldHVybiBjb2RlcyAqLw0KICAgICsjZGVmaW5lIEVSUkRJU1BMQVlUT09TTUFMTCAoS0VZ
X01BWCArIDEpDQogICAgKw0KICAgICsvKg0KICAgICsgKiAgIENvbG9yIGRlZmluaXRpb25zDQog
ICAgKyAqLw0KICAgICtzdHJ1Y3QgZGlhbG9nX2NvbG9yIHsNCiAgICArCWNodHlwZSBhdHI7CS8q
IENvbG9yIGF0dHJpYnV0ZSAqLw0KICAgICsJaW50IGZnOwkJLyogZm9yZWdyb3VuZCAqLw0KICAg
ICsJaW50IGJnOwkJLyogYmFja2dyb3VuZCAqLw0KICAgICsJaW50IGhsOwkJLyogaGlnaGxpZ2h0
IHRoaXMgaXRlbSAqLw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IHN1YnRpdGxlX2xpc3Qg
ew0KICAgICsJc3RydWN0IHN1YnRpdGxlX2xpc3QgKm5leHQ7DQogICAgKwljb25zdCBjaGFyICp0
ZXh0Ow0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IGRpYWxvZ19pbmZvIHsNCiAgICArCWNv
bnN0IGNoYXIgKmJhY2t0aXRsZTsNCiAgICArCXN0cnVjdCBzdWJ0aXRsZV9saXN0ICpzdWJ0aXRs
ZXM7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNjcmVlbjsNCiAgICArCXN0cnVjdCBkaWFs
b2dfY29sb3Igc2hhZG93Ow0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBkaWFsb2c7DQogICAg
KwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRpdGxlOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBi
b3JkZXI7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9hY3RpdmU7DQogICAgKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9pbmFjdGl2ZTsNCiAgICArCXN0cnVjdCBkaWFsb2df
Y29sb3IgYnV0dG9uX2tleV9hY3RpdmU7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRv
bl9rZXlfaW5hY3RpdmU7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9sYWJlbF9h
Y3RpdmU7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9sYWJlbF9pbmFjdGl2ZTsN
CiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgaW5wdXRib3g7DQogICAgKwlzdHJ1Y3QgZGlhbG9n
X2NvbG9yIGlucHV0Ym94X2JvcmRlcjsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3Igc2VhcmNo
Ym94Ow0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBzZWFyY2hib3hfdGl0bGU7DQogICAgKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveF9ib3JkZXI7DQogICAgKwlzdHJ1Y3QgZGlhbG9n
X2NvbG9yIHBvc2l0aW9uX2luZGljYXRvcjsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgbWVu
dWJveDsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgbWVudWJveF9ib3JkZXI7DQogICAgKwlz
dHJ1Y3QgZGlhbG9nX2NvbG9yIGl0ZW07DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGl0ZW1f
c2VsZWN0ZWQ7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZzsNCiAgICArCXN0cnVjdCBk
aWFsb2dfY29sb3IgdGFnX3NlbGVjdGVkOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciB0YWdf
a2V5Ow0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciB0YWdfa2V5X3NlbGVjdGVkOw0KICAgICsJ
c3RydWN0IGRpYWxvZ19jb2xvciBjaGVjazsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgY2hl
Y2tfc2VsZWN0ZWQ7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHVhcnJvdzsNCiAgICArCXN0
cnVjdCBkaWFsb2dfY29sb3IgZGFycm93Ow0KICAgICt9Ow0KICAgICsNCiAgICArLyoNCiAgICAr
ICogR2xvYmFsIHZhcmlhYmxlcw0KICAgICsgKi8NCiAgICArZXh0ZXJuIHN0cnVjdCBkaWFsb2df
aW5mbyBkbGc7DQogICAgK2V4dGVybiBjaGFyIGRpYWxvZ19pbnB1dF9yZXN1bHRbXTsNCiAgICAr
ZXh0ZXJuIGludCBzYXZlZF94LCBzYXZlZF95OwkJLyogTmVlZGVkIGluIHNpZ25hbCBoYW5kbGVy
IGluIG1jb25mLmMgKi8NCiAgICArDQogICAgKy8qDQogICAgKyAqIEZ1bmN0aW9uIHByb3RvdHlw
ZXMNCiAgICArICovDQogICAgKw0KICAgICsvKiBpdGVtIGxpc3QgYXMgdXNlZCBieSBjaGVja2xp
c3QgYW5kIG1lbnVib3ggKi8NCiAgICArdm9pZCBpdGVtX3Jlc2V0KHZvaWQpOw0KICAgICt2b2lk
IGl0ZW1fbWFrZShjb25zdCBjaGFyICpmbXQsIC4uLik7DQogICAgK3ZvaWQgaXRlbV9hZGRfc3Ry
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCiAgICArdm9pZCBpdGVtX3NldF90YWcoY2hhciB0YWcp
Ow0KICAgICt2b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcCk7DQogICAgK3ZvaWQgaXRlbV9zZXRf
c2VsZWN0ZWQoaW50IHZhbCk7DQogICAgK2ludCBpdGVtX2FjdGl2YXRlX3NlbGVjdGVkKHZvaWQp
Ow0KICAgICt2b2lkICppdGVtX2RhdGEodm9pZCk7DQogICAgK2NoYXIgaXRlbV90YWcodm9pZCk7
DQogICAgKw0KICAgICsvKiBpdGVtIGxpc3QgbWFuaXB1bGF0aW9uIGZvciBseGRpYWxvZyB1c2Ug
Ki8NCiAgICArI2RlZmluZSBNQVhJVEVNU1RSIDIwMA0KICAgICtzdHJ1Y3QgZGlhbG9nX2l0ZW0g
ew0KICAgICsJY2hhciBzdHJbTUFYSVRFTVNUUl07CS8qIHByb21wdCBkaXNwbGF5ZWQgKi8NCiAg
ICArCWNoYXIgdGFnOw0KICAgICsJdm9pZCAqZGF0YTsJLyogcG9pbnRlciB0byBtZW51IGl0ZW0g
LSB1c2VkIGJ5IG1lbnVib3grY2hlY2tsaXN0ICovDQogICAgKwlpbnQgc2VsZWN0ZWQ7CS8qIFNl
dCB0byAxIGJ5IGRpYWxvZ18qKCkgZnVuY3Rpb24gaWYgc2VsZWN0ZWQuICovDQogICAgK307DQog
ICAgKw0KICAgICsvKiBsaXN0IG9mIGxpYWxvZ19pdGVtcyAqLw0KICAgICtzdHJ1Y3QgZGlhbG9n
X2xpc3Qgew0KICAgICsJc3RydWN0IGRpYWxvZ19pdGVtIG5vZGU7DQogICAgKwlzdHJ1Y3QgZGlh
bG9nX2xpc3QgKm5leHQ7DQogICAgK307DQogICAgKw0KICAgICtleHRlcm4gc3RydWN0IGRpYWxv
Z19saXN0ICppdGVtX2N1cjsNCiAgICArZXh0ZXJuIHN0cnVjdCBkaWFsb2dfbGlzdCBpdGVtX25p
bDsNCiAgICArZXh0ZXJuIHN0cnVjdCBkaWFsb2dfbGlzdCAqaXRlbV9oZWFkOw0KICAgICsNCiAg
ICAraW50IGl0ZW1fY291bnQodm9pZCk7DQogICAgK3ZvaWQgaXRlbV9zZXQoaW50IG4pOw0KICAg
ICtpbnQgaXRlbV9uKHZvaWQpOw0KICAgICtjb25zdCBjaGFyICppdGVtX3N0cih2b2lkKTsNCiAg
ICAraW50IGl0ZW1faXNfc2VsZWN0ZWQodm9pZCk7DQogICAgK2ludCBpdGVtX2lzX3RhZyhjaGFy
IHRhZyk7DQogICAgKyNkZWZpbmUgaXRlbV9mb3JlYWNoKCkgXA0KICAgICsJZm9yIChpdGVtX2N1
ciA9IGl0ZW1faGVhZCA/IGl0ZW1faGVhZDogaXRlbV9jdXI7IFwNCiAgICArCSAgICAgaXRlbV9j
dXIgJiYgKGl0ZW1fY3VyICE9ICZpdGVtX25pbCk7IGl0ZW1fY3VyID0gaXRlbV9jdXItPm5leHQp
DQogICAgKw0KICAgICsvKiBnZW5lcmljIGtleSBoYW5kbGVycyAqLw0KICAgICtpbnQgb25fa2V5
X2VzYyhXSU5ET1cgKndpbik7DQogICAgK2ludCBvbl9rZXlfcmVzaXplKHZvaWQpOw0KICAgICsN
CiAgICArLyogbWluaW11bSAocmUpc2l6ZSB2YWx1ZXMgKi8NCiAgICArI2RlZmluZSBDSEVDS0xJ
U1RfSEVJR1RIX01JTiA2CS8qIEZvciBkaWFsb2dfY2hlY2tsaXN0KCkgKi8NCiAgICArI2RlZmlu
ZSBDSEVDS0xJU1RfV0lEVEhfTUlOIDYNCiAgICArI2RlZmluZSBJTlBVVEJPWF9IRUlHVEhfTUlO
IDIJLyogRm9yIGRpYWxvZ19pbnB1dGJveCgpICovDQogICAgKyNkZWZpbmUgSU5QVVRCT1hfV0lE
VEhfTUlOIDINCiAgICArI2RlZmluZSBNRU5VQk9YX0hFSUdUSF9NSU4gMTUJLyogRm9yIGRpYWxv
Z19tZW51KCkgKi8NCiAgICArI2RlZmluZSBNRU5VQk9YX1dJRFRIX01JTiA2NQ0KICAgICsjZGVm
aW5lIFRFWFRCT1hfSEVJR1RIX01JTiA4CS8qIEZvciBkaWFsb2dfdGV4dGJveCgpICovDQogICAg
KyNkZWZpbmUgVEVYVEJPWF9XSURUSF9NSU4gOA0KICAgICsjZGVmaW5lIFlFU05PX0hFSUdUSF9N
SU4gNAkvKiBGb3IgZGlhbG9nX3llc25vKCkgKi8NCiAgICArI2RlZmluZSBZRVNOT19XSURUSF9N
SU4gNA0KICAgICsjZGVmaW5lIFdJTkRPV19IRUlHVEhfTUlOIDE5CS8qIEZvciBpbml0X2RpYWxv
ZygpICovDQogICAgKyNkZWZpbmUgV0lORE9XX1dJRFRIX01JTiA4MA0KICAgICsNCiAgICAraW50
IGluaXRfZGlhbG9nKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSk7DQogICAgK3ZvaWQgc2V0X2RpYWxv
Z19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKTsNCiAgICArdm9pZCBzZXRfZGlhbG9n
X3N1YnRpdGxlcyhzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0bGVzKTsNCiAgICArdm9pZCBl
bmRfZGlhbG9nKGludCB4LCBpbnQgeSk7DQogICAgK3ZvaWQgYXR0cl9jbGVhcihXSU5ET1cgKiB3
aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpOw0KICAgICt2b2lkIGRpYWxv
Z19jbGVhcih2b2lkKTsNCiAgICArdm9pZCBwcmludF9hdXRvd3JhcChXSU5ET1cgKiB3aW4sIGNv
bnN0IGNoYXIgKnByb21wdCwgaW50IHdpZHRoLCBpbnQgeSwgaW50IHgpOw0KICAgICt2b2lkIHBy
aW50X2J1dHRvbihXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgs
IGludCBzZWxlY3RlZCk7DQogICAgK3ZvaWQgcHJpbnRfdGl0bGUoV0lORE9XICpkaWFsb2csIGNv
bnN0IGNoYXIgKnRpdGxlLCBpbnQgd2lkdGgpOw0KICAgICt2b2lkIGRyYXdfYm94KFdJTkRPVyAq
IHdpbiwgaW50IHksIGludCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGNodHlwZSBib3gsDQog
ICAgKwkgICAgICBjaHR5cGUgYm9yZGVyKTsNCiAgICArdm9pZCBkcmF3X3NoYWRvdyhXSU5ET1cg
KiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsNCiAgICArDQogICAg
K2ludCBmaXJzdF9hbHBoYShjb25zdCBjaGFyICpzdHJpbmcsIGNvbnN0IGNoYXIgKmV4ZW1wdCk7
DQogICAgK2ludCBkaWFsb2dfeWVzbm8oY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnBy
b21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoKTsNCiAgICAraW50IGRpYWxvZ19tc2dib3goY29u
c3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdodCwNCiAgICArCQkg
IGludCB3aWR0aCwgaW50IHBhdXNlKTsNCiAgICArDQogICAgKw0KICAgICt0eXBlZGVmIHZvaWQg
KCp1cGRhdGVfdGV4dF9mbikoY2hhciAqYnVmLCBzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQsIHZv
aWQNCiAgICArCQkJICAgICAgICpfZGF0YSk7DQogICAgK2ludCBkaWFsb2dfdGV4dGJveChjb25z
dCBjaGFyICp0aXRsZSwgY2hhciAqdGJ1ZiwgaW50IGluaXRpYWxfaGVpZ2h0LA0KICAgICsJCSAg
IGludCBpbml0aWFsX3dpZHRoLCBpbnQgKmtleXMsIGludCAqX3ZzY3JvbGwsIGludCAqX2hzY3Jv
bGwsDQogICAgKwkJICAgdXBkYXRlX3RleHRfZm4gdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpOw0K
ICAgICtpbnQgZGlhbG9nX21lbnUoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21w
dCwNCiAgICArCQljb25zdCB2b2lkICpzZWxlY3RlZCwgaW50ICpzX3Njcm9sbCk7DQogICAgK2lu
dCBkaWFsb2dfY2hlY2tsaXN0KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQs
IGludCBoZWlnaHQsDQogICAgKwkJICAgICBpbnQgd2lkdGgsIGludCBsaXN0X2hlaWdodCk7DQog
ICAgK2ludCBkaWFsb2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnBy
b21wdCwgaW50IGhlaWdodCwNCiAgICArCQkgICAgaW50IHdpZHRoLCBjb25zdCBjaGFyICppbml0
KTsNCiAgICArDQogICAgKy8qDQogICAgKyAqIFRoaXMgaXMgdGhlIGJhc2UgZm9yIGZpY3RpdGlv
dXMga2V5cywgd2hpY2ggYWN0aXZhdGUNCiAgICArICogdGhlIGJ1dHRvbnMuDQogICAgKyAqDQog
ICAgKyAqIE1vdXNlLWdlbmVyYXRlZCBrZXlzIGFyZSB0aGUgZm9sbG93aW5nOg0KICAgICsgKiAg
IC0tIHRoZSBmaXJzdCAzMiBhcmUgdXNlZCBhcyBudW1iZXJzLCBpbiBhZGRpdGlvbiB0byAnMCct
JzknDQogICAgKyAqICAgLS0gdGhlIGxvd2VyY2FzZSBhcmUgdXNlZCB0byBzaWduYWwgbW91c2Ut
ZW50ZXIgZXZlbnRzIChNX0VWRU5UICsgJ28nKQ0KICAgICsgKiAgIC0tIHVwcGVyY2FzZSBjaGFy
cyBhcmUgdXNlZCB0byBpbnZva2UgdGhlIGJ1dHRvbiAoTV9FVkVOVCArICdPJykNCiAgICArICov
DQogICAgKyNkZWZpbmUgTV9FVkVOVCAoS0VZX01BWCsxKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2lucHV0Ym94LmMgYi9zdXBwb3J0L2tjb25maWcubmV3
L2x4ZGlhbG9nL2lucHV0Ym94LmMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IDAwMDAwMDAuLjFkY2ZiMjgNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jDQogICAgQEAgLTAsMCArMSwyODkgQEANCiAg
ICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQogICAgKy8qDQogICAgKyAq
ICBpbnB1dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIGlucHV0IGJveA0KICAgICsgKg0KICAgICsg
KiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQ0KICAgICsg
KiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAo
cm9hZGNhcEBjZncuY29tKQ0KICAgICsgKi8NCiAgICArDQogICAgKyNpbmNsdWRlICJkaWFsb2cu
aCINCiAgICArDQogICAgK2NoYXIgZGlhbG9nX2lucHV0X3Jlc3VsdFtNQVhfTEVOICsgMV07DQog
ICAgKw0KICAgICsvKg0KICAgICsgKiAgUHJpbnQgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMNCiAg
ICArICovDQogICAgK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBp
bnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkNCiAgICArew0KICAgICsJaW50IHgg
PSB3aWR0aCAvIDIgLSAxMTsNCiAgICArCWludCB5ID0gaGVpZ2h0IC0gMjsNCiAgICArDQogICAg
KwlwcmludF9idXR0b24oZGlhbG9nLCAiICBPayAgIiwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7DQog
ICAgKwlwcmludF9idXR0b24oZGlhbG9nLCAiIEhlbHAgIiwgeSwgeCArIDE0LCBzZWxlY3RlZCA9
PSAxKTsNCiAgICArDQogICAgKwl3bW92ZShkaWFsb2csIHksIHggKyAxICsgMTQgKiBzZWxlY3Rl
ZCk7DQogICAgKwl3cmVmcmVzaChkaWFsb2cpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAg
ICsgKiBEaXNwbGF5IGEgZGlhbG9nIGJveCBmb3IgaW5wdXRpbmcgYSBzdHJpbmcNCiAgICArICov
DQogICAgK2ludCBkaWFsb2dfaW5wdXRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIg
KnByb21wdCwgaW50IGhlaWdodCwgaW50IHdpZHRoLA0KICAgICsJCSAgICBjb25zdCBjaGFyICpp
bml0KQ0KICAgICt7DQogICAgKwlpbnQgaSwgeCwgeSwgYm94X3ksIGJveF94LCBib3hfd2lkdGg7
DQogICAgKwlpbnQgaW5wdXRfeCA9IDAsIGtleSA9IDAsIGJ1dHRvbiA9IC0xOw0KICAgICsJaW50
IHNob3dfeCwgbGVuLCBwb3M7DQogICAgKwljaGFyICppbnN0ciA9IGRpYWxvZ19pbnB1dF9yZXN1
bHQ7DQogICAgKwlXSU5ET1cgKmRpYWxvZzsNCiAgICArDQogICAgKwlpZiAoIWluaXQpDQogICAg
KwkJaW5zdHJbMF0gPSAnXDAnOw0KICAgICsJZWxzZQ0KICAgICsJCXN0cmNweShpbnN0ciwgaW5p
dCk7DQogICAgKw0KICAgICtkb19yZXNpemU6DQogICAgKwlpZiAoZ2V0bWF4eShzdGRzY3IpIDw9
IChoZWlnaHQgLSBJTlBVVEJPWF9IRUlHVEhfTUlOKSkNCiAgICArCQlyZXR1cm4gLUVSUkRJU1BM
QVlUT09TTUFMTDsNCiAgICArCWlmIChnZXRtYXh4KHN0ZHNjcikgPD0gKHdpZHRoIC0gSU5QVVRC
T1hfV0lEVEhfTUlOKSkNCiAgICArCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICAr
DQogICAgKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICArCXggPSAoZ2V0
bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsNCiAgICArCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0g
aGVpZ2h0KSAvIDI7DQogICAgKw0KICAgICsJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWln
aHQsIHdpZHRoKTsNCiAgICArDQogICAgKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwg
eSwgeCk7DQogICAgKwlrZXlwYWQoZGlhbG9nLCBUUlVFKTsNCiAgICArDQogICAgKwlkcmF3X2Jv
eChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsDQogICAgKwkJIGRsZy5kaWFsb2cuYXRyLCBk
bGcuYm9yZGVyLmF0cik7DQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsN
CiAgICArCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0KICAgICsJ
Zm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQ0KICAgICsJCXdhZGRjaChkaWFsb2csIEFD
U19ITElORSk7DQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAr
CXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsNCiAgICArDQogICAgKwlwcmludF90aXRsZShkaWFs
b2csIHRpdGxlLCB3aWR0aCk7DQogICAgKw0KICAgICsJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlh
bG9nLmF0cik7DQogICAgKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAy
LCAxLCAzKTsNCiAgICArDQogICAgKwkvKiBEcmF3IHRoZSBpbnB1dCBmaWVsZCBib3ggKi8NCiAg
ICArCWJveF93aWR0aCA9IHdpZHRoIC0gNjsNCiAgICArCWdldHl4KGRpYWxvZywgeSwgeCk7DQog
ICAgKwlib3hfeSA9IHkgKyAyOw0KICAgICsJYm94X3ggPSAod2lkdGggLSBib3hfd2lkdGgpIC8g
MjsNCiAgICArCWRyYXdfYm94KGRpYWxvZywgeSArIDEsIGJveF94IC0gMSwgMywgYm94X3dpZHRo
ICsgMiwNCiAgICArCQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsNCiAgICArDQog
ICAgKwlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgKw0KICAg
ICsJLyogU2V0IHVwIHRoZSBpbml0aWFsIHZhbHVlICovDQogICAgKwl3bW92ZShkaWFsb2csIGJv
eF95LCBib3hfeCk7DQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJveC5hdHIpOw0K
ICAgICsNCiAgICArCWxlbiA9IHN0cmxlbihpbnN0cik7DQogICAgKwlwb3MgPSBsZW47DQogICAg
Kw0KICAgICsJaWYgKGxlbiA+PSBib3hfd2lkdGgpIHsNCiAgICArCQlzaG93X3ggPSBsZW4gLSBi
b3hfd2lkdGggKyAxOw0KICAgICsJCWlucHV0X3ggPSBib3hfd2lkdGggLSAxOw0KICAgICsJCWZv
ciAoaSA9IDA7IGkgPCBib3hfd2lkdGggLSAxOyBpKyspDQogICAgKwkJCXdhZGRjaChkaWFsb2cs
IGluc3RyW3Nob3dfeCArIGldKTsNCiAgICArCX0gZWxzZSB7DQogICAgKwkJc2hvd194ID0gMDsN
CiAgICArCQlpbnB1dF94ID0gbGVuOw0KICAgICsJCXdhZGRzdHIoZGlhbG9nLCBpbnN0cik7DQog
ICAgKwl9DQogICAgKw0KICAgICsJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3ggKyBpbnB1dF94
KTsNCiAgICArDQogICAgKwl3cmVmcmVzaChkaWFsb2cpOw0KICAgICsNCiAgICArCXdoaWxlIChr
ZXkgIT0gS0VZX0VTQykgew0KICAgICsJCWtleSA9IHdnZXRjaChkaWFsb2cpOw0KICAgICsNCiAg
ICArCQlpZiAoYnV0dG9uID09IC0xKSB7CS8qIElucHV0IGJveCBzZWxlY3RlZCAqLw0KICAgICsJ
CQlzd2l0Y2ggKGtleSkgew0KICAgICsJCQljYXNlIFRBQjoNCiAgICArCQkJY2FzZSBLRVlfVVA6
DQogICAgKwkJCWNhc2UgS0VZX0RPV046DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSBL
RVlfQkFDS1NQQUNFOg0KICAgICsJCQljYXNlIDg6ICAgLyogXkggKi8NCiAgICArCQkJY2FzZSAx
Mjc6IC8qIF4/ICovDQogICAgKwkJCQlpZiAocG9zKSB7DQogICAgKwkJCQkJd2F0dHJzZXQoZGlh
bG9nLCBkbGcuaW5wdXRib3guYXRyKTsNCiAgICArCQkJCQlpZiAoaW5wdXRfeCA9PSAwKSB7DQog
ICAgKwkJCQkJCXNob3dfeC0tOw0KICAgICsJCQkJCX0gZWxzZQ0KICAgICsJCQkJCQlpbnB1dF94
LS07DQogICAgKw0KICAgICsJCQkJCWlmIChwb3MgPCBsZW4pIHsNCiAgICArCQkJCQkJZm9yIChp
ID0gcG9zIC0gMTsgaSA8IGxlbjsgaSsrKSB7DQogICAgKwkJCQkJCQlpbnN0cltpXSA9IGluc3Ry
W2krMV07DQogICAgKwkJCQkJCX0NCiAgICArCQkJCQl9DQogICAgKw0KICAgICsJCQkJCXBvcy0t
Ow0KICAgICsJCQkJCWxlbi0tOw0KICAgICsJCQkJCWluc3RyW2xlbl0gPSAnXDAnOw0KICAgICsJ
CQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsNCiAgICArCQkJCQlmb3IgKGkgPSAwOyBp
IDwgYm94X3dpZHRoOyBpKyspIHsNCiAgICArCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkg
ew0KICAgICsJCQkJCQkJd2FkZGNoKGRpYWxvZywgJyAnKTsNCiAgICArCQkJCQkJCWJyZWFrOw0K
ICAgICsJCQkJCQl9DQogICAgKwkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3dfeCArIGld
KTsNCiAgICArCQkJCQl9DQogICAgKwkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCAr
IGJveF94KTsNCiAgICArCQkJCQl3cmVmcmVzaChkaWFsb2cpOw0KICAgICsJCQkJfQ0KICAgICsJ
CQkJY29udGludWU7DQogICAgKwkJCWNhc2UgS0VZX0xFRlQ6DQogICAgKwkJCQlpZiAocG9zID4g
MCkgew0KICAgICsJCQkJCWlmIChpbnB1dF94ID4gMCkgew0KICAgICsJCQkJCQl3bW92ZShkaWFs
b2csIGJveF95LCAtLWlucHV0X3ggKyBib3hfeCk7DQogICAgKwkJCQkJfSBlbHNlIGlmIChpbnB1
dF94ID09IDApIHsNCiAgICArCQkJCQkJc2hvd194LS07DQogICAgKwkJCQkJCXdtb3ZlKGRpYWxv
ZywgYm94X3ksIGJveF94KTsNCiAgICArCQkJCQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0aDsg
aSsrKSB7DQogICAgKwkJCQkJCQlpZiAoIWluc3RyW3Nob3dfeCArIGldKSB7DQogICAgKwkJCQkJ
CQkJd2FkZGNoKGRpYWxvZywgJyAnKTsNCiAgICArCQkJCQkJCQlicmVhazsNCiAgICArCQkJCQkJ
CX0NCiAgICArCQkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3dfeCArIGldKTsNCiAgICAr
CQkJCQkJfQ0KICAgICsJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCk7DQogICAgKwkJ
CQkJfQ0KICAgICsJCQkJCXBvcy0tOw0KICAgICsJCQkJfQ0KICAgICsJCQkJY29udGludWU7DQog
ICAgKwkJCWNhc2UgS0VZX1JJR0hUOg0KICAgICsJCQkJaWYgKHBvcyA8IGxlbikgew0KICAgICsJ
CQkJCWlmIChpbnB1dF94IDwgYm94X3dpZHRoIC0gMSkgew0KICAgICsJCQkJCQl3bW92ZShkaWFs
b2csIGJveF95LCArK2lucHV0X3ggKyBib3hfeCk7DQogICAgKwkJCQkJfSBlbHNlIGlmIChpbnB1
dF94ID09IGJveF93aWR0aCAtIDEpIHsNCiAgICArCQkJCQkJc2hvd194Kys7DQogICAgKwkJCQkJ
CXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsNCiAgICArCQkJCQkJZm9yIChpID0gMDsgaSA8
IGJveF93aWR0aDsgaSsrKSB7DQogICAgKwkJCQkJCQlpZiAoIWluc3RyW3Nob3dfeCArIGldKSB7
DQogICAgKwkJCQkJCQkJd2FkZGNoKGRpYWxvZywgJyAnKTsNCiAgICArCQkJCQkJCQlicmVhazsN
CiAgICArCQkJCQkJCX0NCiAgICArCQkJCQkJCXdhZGRjaChkaWFsb2csIGluc3RyW3Nob3dfeCAr
IGldKTsNCiAgICArCQkJCQkJfQ0KICAgICsJCQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBpbnB1
dF94ICsgYm94X3gpOw0KICAgICsJCQkJCX0NCiAgICArCQkJCQlwb3MrKzsNCiAgICArCQkJCX0N
CiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQlkZWZhdWx0Og0KICAgICsJCQkJaWYgKGtleSA8
IDB4MTAwICYmIGlzcHJpbnQoa2V5KSkgew0KICAgICsJCQkJCWlmIChsZW4gPCBNQVhfTEVOKSB7
DQogICAgKwkJCQkJCXdhdHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7DQogICAgKwkJ
CQkJCWlmIChwb3MgPCBsZW4pIHsNCiAgICArCQkJCQkJCWZvciAoaSA9IGxlbjsgaSA+IHBvczsg
aS0tKQ0KICAgICsJCQkJCQkJCWluc3RyW2ldID0gaW5zdHJbaS0xXTsNCiAgICArCQkJCQkJCWlu
c3RyW3Bvc10gPSBrZXk7DQogICAgKwkJCQkJCX0gZWxzZSB7DQogICAgKwkJCQkJCQlpbnN0clts
ZW5dID0ga2V5Ow0KICAgICsJCQkJCQl9DQogICAgKwkJCQkJCXBvcysrOw0KICAgICsJCQkJCQls
ZW4rKzsNCiAgICArCQkJCQkJaW5zdHJbbGVuXSA9ICdcMCc7DQogICAgKw0KICAgICsJCQkJCQlp
ZiAoaW5wdXRfeCA9PSBib3hfd2lkdGggLSAxKSB7DQogICAgKwkJCQkJCQlzaG93X3grKzsNCiAg
ICArCQkJCQkJfSBlbHNlIHsNCiAgICArCQkJCQkJCWlucHV0X3grKzsNCiAgICArCQkJCQkJfQ0K
ICAgICsNCiAgICArCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOw0KICAgICsJCQkJ
CQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsNCiAgICArCQkJCQkJCWlmICghaW5z
dHJbc2hvd194ICsgaV0pIHsNCiAgICArCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcpOw0KICAg
ICsJCQkJCQkJCWJyZWFrOw0KICAgICsJCQkJCQkJfQ0KICAgICsJCQkJCQkJd2FkZGNoKGRpYWxv
ZywgaW5zdHJbc2hvd194ICsgaV0pOw0KICAgICsJCQkJCQl9DQogICAgKwkJCQkJCXdtb3ZlKGRp
YWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7DQogICAgKwkJCQkJCXdyZWZyZXNoKGRpYWxv
Zyk7DQogICAgKwkJCQkJfSBlbHNlDQogICAgKwkJCQkJCWZsYXNoKCk7CS8qIEFsYXJtIHVzZXIg
YWJvdXQgb3ZlcmZsb3cgKi8NCiAgICArCQkJCQljb250aW51ZTsNCiAgICArCQkJCX0NCiAgICAr
CQkJfQ0KICAgICsJCX0NCiAgICArCQlzd2l0Y2ggKGtleSkgew0KICAgICsJCWNhc2UgJ08nOg0K
ICAgICsJCWNhc2UgJ28nOg0KICAgICsJCQlkZWx3aW4oZGlhbG9nKTsNCiAgICArCQkJcmV0dXJu
IDA7DQogICAgKwkJY2FzZSAnSCc6DQogICAgKwkJY2FzZSAnaCc6DQogICAgKwkJCWRlbHdpbihk
aWFsb2cpOw0KICAgICsJCQlyZXR1cm4gMTsNCiAgICArCQljYXNlIEtFWV9VUDoNCiAgICArCQlj
YXNlIEtFWV9MRUZUOg0KICAgICsJCQlzd2l0Y2ggKGJ1dHRvbikgew0KICAgICsJCQljYXNlIC0x
Og0KICAgICsJCQkJYnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJIZWxwIiBidXR0b24gaXMgc2Vs
ZWN0ZWQgKi8NCiAgICArCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAx
KTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQljYXNlIDA6DQogICAgKwkJCQlidXR0b24gPSAt
MTsJLyogSW5kaWNhdGVzIGlucHV0IGJveCBpcyBzZWxlY3RlZCAqLw0KICAgICsJCQkJcHJpbnRf
YnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOw0KICAgICsJCQkJd21vdmUoZGlhbG9n
LCBib3hfeSwgYm94X3ggKyBpbnB1dF94KTsNCiAgICArCQkJCXdyZWZyZXNoKGRpYWxvZyk7DQog
ICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSAxOg0KICAgICsJCQkJYnV0dG9uID0gMDsJLyog
SW5kaWNhdGVzICJPSyIgYnV0dG9uIGlzIHNlbGVjdGVkICovDQogICAgKwkJCQlwcmludF9idXR0
b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJ
fQ0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFRBQjoNCiAgICArCQljYXNlIEtFWV9ET1dO
Og0KICAgICsJCWNhc2UgS0VZX1JJR0hUOg0KICAgICsJCQlzd2l0Y2ggKGJ1dHRvbikgew0KICAg
ICsJCQljYXNlIC0xOg0KICAgICsJCQkJYnV0dG9uID0gMDsJLyogSW5kaWNhdGVzICJPSyIgYnV0
dG9uIGlzIHNlbGVjdGVkICovDQogICAgKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0
LCB3aWR0aCwgMCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSAwOg0KICAgICsJCQkJ
YnV0dG9uID0gMTsJLyogSW5kaWNhdGVzICJIZWxwIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8NCiAg
ICArCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAxKTsNCiAgICArCQkJ
CWJyZWFrOw0KICAgICsJCQljYXNlIDE6DQogICAgKwkJCQlidXR0b24gPSAtMTsJLyogSW5kaWNh
dGVzIGlucHV0IGJveCBpcyBzZWxlY3RlZCAqLw0KICAgICsJCQkJcHJpbnRfYnV0dG9ucyhkaWFs
b2csIGhlaWdodCwgd2lkdGgsIDApOw0KICAgICsJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94
X3ggKyBpbnB1dF94KTsNCiAgICArCQkJCXdyZWZyZXNoKGRpYWxvZyk7DQogICAgKwkJCQlicmVh
azsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlICcgJzoNCiAgICArCQlj
YXNlICdcbic6DQogICAgKwkJCWRlbHdpbihkaWFsb2cpOw0KICAgICsJCQlyZXR1cm4gKGJ1dHRv
biA9PSAtMSA/IDAgOiBidXR0b24pOw0KICAgICsJCWNhc2UgJ1gnOg0KICAgICsJCWNhc2UgJ3gn
Og0KICAgICsJCQlrZXkgPSBLRVlfRVNDOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtF
WV9FU0M6DQogICAgKwkJCWtleSA9IG9uX2tleV9lc2MoZGlhbG9nKTsNCiAgICArCQkJYnJlYWs7
DQogICAgKwkJY2FzZSBLRVlfUkVTSVpFOg0KICAgICsJCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAr
CQkJb25fa2V5X3Jlc2l6ZSgpOw0KICAgICsJCQlnb3RvIGRvX3Jlc2l6ZTsNCiAgICArCQl9DQog
ICAgKwl9DQogICAgKw0KICAgICsJZGVsd2luKGRpYWxvZyk7DQogICAgKwlyZXR1cm4gS0VZX0VT
QzsJCS8qIEVTQyBwcmVzc2VkICovDQogICAgK30NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlh
bG9nL21lbnVib3guYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MC4uNThjMmY4YQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L2x4ZGlhbG9nL21lbnVib3guYw0KICAgIEBAIC0wLDAgKzEsNDI0IEBADQogICAgKy8vIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KICAgICsvKg0KICAgICsgKiAgbWVudWJv
eC5jIC0tIGltcGxlbWVudHMgdGhlIG1lbnUgYm94DQogICAgKyAqDQogICAgKyAqICBPUklHSU5B
TCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQogICAgKyAqICBNT0RJRklF
RCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2Fwd0Bj
ZncuY29tKQ0KICAgICsgKi8NCiAgICArDQogICAgKy8qDQogICAgKyAqICBDaGFuZ2VzIGJ5IENs
aWZmb3JkIFdvbGYgKGdvZEBjbGlmZm9yZC5hdCkNCiAgICArICoNCiAgICArICogIFsgMTk5OC0w
Ni0xMyBdDQogICAgKyAqDQogICAgKyAqICAgICopICBBIGJ1Z2ZpeCBmb3IgdGhlIFBhZ2UtRG93
biBwcm9ibGVtDQogICAgKyAqDQogICAgKyAqICAgICopICBGb3JtZXJseSB3aGVuIEkgdXNlZCBQ
YWdlIERvd24gYW5kIFBhZ2UgVXAsIHRoZSBjdXJzb3Igd291bGQgYmUgc2V0DQogICAgKyAqICAg
ICAgICB0byB0aGUgZmlyc3QgcG9zaXRpb24gaW4gdGhlIG1lbnUgYm94LiAgTm93IGx4ZGlhbG9n
IGlzIGEgYml0DQogICAgKyAqICAgICAgICBzbWFydGVyIGFuZCB3b3JrcyBtb3JlIGxpa2Ugb3Ro
ZXIgbWVudSBzeXN0ZW1zIChqdXN0IGhhdmUgYSBsb29rIGF0DQogICAgKyAqICAgICAgICBpdCku
DQogICAgKyAqDQogICAgKyAqICAgICopICBGb3JtZXJseSBpZiBJIHNlbGVjdGVkIHNvbWV0aGlu
ZyBteSBzY3JvbGxpbmcgd291bGQgYmUgYnJva2VuIGJlY2F1c2UNCiAgICArICogICAgICAgIGx4
ZGlhbG9nIGlzIHJlLWludm9rZWQgYnkgdGhlIE1lbnVjb25maWcgc2hlbGwgc2NyaXB0LCBjYW4n
dA0KICAgICsgKiAgICAgICAgcmVtZW1iZXIgdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9uLCBh
bmQganVzdCBzZXRzIGl0IHNvIHRoYXQgdGhlDQogICAgKyAqICAgICAgICBjdXJzb3IgaXMgYXQg
dGhlIGJvdHRvbSBvZiB0aGUgYm94LiAgTm93IGl0IHdyaXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUN
CiAgICArICogICAgICAgIGx4ZGlhbG9nLnNjcmx0bXAgd2hpY2ggY29udGFpbnMgdGhpcyBpbmZv
cm1hdGlvbi4gVGhlIGZpbGUgaXMNCiAgICArICogICAgICAgIGRlbGV0ZWQgYnkgbHhkaWFsb2cg
aWYgdGhlIHVzZXIgbGVhdmVzIGEgc3VibWVudSBvciBlbnRlcnMgYSBuZXcNCiAgICArICogICAg
ICAgIG9uZSwgYnV0IGl0IHdvdWxkIGJlIG5pY2UgaWYgTWVudWNvbmZpZyBjb3VsZCBtYWtlIGFu
b3RoZXIgInJtIC1mIg0KICAgICsgKiAgICAgICAganVzdCB0byBiZSBzdXJlLiAgSnVzdCB0cnkg
aXQgb3V0IC0geW91IHdpbGwgcmVjb2duaXNlIGEgZGlmZmVyZW5jZSENCiAgICArICoNCiAgICAr
ICogIFsgMTk5OC0wNi0xNCBdDQogICAgKyAqDQogICAgKyAqICAgICopICBOb3cgbHhkaWFsb2cg
aXMgY3Jhc2gtc2FmZSBhZ2FpbnN0IGJyb2tlbiAibHhkaWFsb2cuc2NybHRtcCIgZmlsZXMNCiAg
ICArICogICAgICAgIGFuZCBtZW51cyBjaGFuZ2UgdGhlaXIgc2l6ZSBvbiB0aGUgZmx5Lg0KICAg
ICsgKg0KICAgICsgKiAgICAqKSAgSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBsYXN0IHNjcm9sbGlu
ZyBwb3NpdGlvbiBpcyBub3Qgc2F2ZWQgYnkNCiAgICArICogICAgICAgIGx4ZGlhbG9nLCBpdCBz
ZXRzIHRoZSBzY3JvbGxpbmcgc28gdGhhdCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBpbiB0aGUNCiAg
ICArICogICAgICAgIG1pZGRsZSBvZiB0aGUgbWVudSBib3gsIG5vdCBhdCB0aGUgYm90dG9tLg0K
ICAgICsgKg0KICAgICsgKiAwMiBKYW51YXJ5IDE5OTksIE1pY2hhZWwgRWxpemFiZXRoIENoYXN0
YWluIChtZWNAc2hvdXQubmV0KQ0KICAgICsgKiBSZXNldCAnc2Nyb2xsJyB0byAwIGlmIHRoZSB2
YWx1ZSBmcm9tIGx4ZGlhbG9nLnNjcmx0bXAgaXMgYm9ndXMuDQogICAgKyAqIFRoaXMgZml4ZXMg
YSBidWcgaW4gTWVudWNvbmZpZyB3aGVyZSB1c2luZyAnICcgdG8gZGVzY2VuZCBpbnRvIG1lbnVz
DQogICAgKyAqIHdvdWxkIGxlYXZlIG1pcy1zeW5jaHJvbml6ZWQgbHhkaWFsb2cuc2NybHRtcCBm
aWxlcyBseWluZyBhcm91bmQsDQogICAgKyAqIGZzY2FuZiB3b3VsZCByZWFkIGluICdzY3JvbGwn
LCBhbmQgZXZlbnR1YWxseSB0aGF0IHZhbHVlIHdvdWxkIGdldCB1c2VkLg0KICAgICsgKi8NCiAg
ICArDQogICAgKyNpbmNsdWRlICJkaWFsb2cuaCINCiAgICArDQogICAgK3N0YXRpYyBpbnQgbWVu
dV93aWR0aCwgaXRlbV94Ow0KICAgICsNCiAgICArLyoNCiAgICArICogUHJpbnQgbWVudSBpdGVt
DQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBkb19wcmludF9pdGVtKFdJTkRPVyAqIHdpbiwg
Y29uc3QgY2hhciAqaXRlbSwgaW50IGxpbmVfeSwNCiAgICArCQkJICBpbnQgc2VsZWN0ZWQsIGlu
dCBob3RrZXkpDQogICAgK3sNCiAgICArCWludCBqOw0KICAgICsJY2hhciAqbWVudV9pdGVtID0g
bWFsbG9jKG1lbnVfd2lkdGggKyAxKTsNCiAgICArDQogICAgKwlzdHJuY3B5KG1lbnVfaXRlbSwg
aXRlbSwgbWVudV93aWR0aCAtIGl0ZW1feCk7DQogICAgKwltZW51X2l0ZW1bbWVudV93aWR0aCAt
IGl0ZW1feF0gPSAnXDAnOw0KICAgICsJaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5Tm5N
bUhoIik7DQogICAgKw0KICAgICsJLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIGxhc3QgaXRlbSAqLw0K
ICAgICsJd2F0dHJzZXQod2luLCBkbGcubWVudWJveC5hdHIpOw0KICAgICsJd21vdmUod2luLCBs
aW5lX3ksIDApOw0KICAgICsjaWYgT0xEX05DVVJTRVMNCiAgICArCXsNCiAgICArCQlpbnQgaTsN
CiAgICArCQlmb3IgKGkgPSAwOyBpIDwgbWVudV93aWR0aDsgaSsrKQ0KICAgICsJCQl3YWRkY2go
d2luLCAnICcpOw0KICAgICsJfQ0KICAgICsjZWxzZQ0KICAgICsJd2NscnRvZW9sKHdpbik7DQog
ICAgKyNlbmRpZg0KICAgICsJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5pdGVtX3NlbGVj
dGVkLmF0ciA6IGRsZy5pdGVtLmF0cik7DQogICAgKwltdndhZGRzdHIod2luLCBsaW5lX3ksIGl0
ZW1feCwgbWVudV9pdGVtKTsNCiAgICArCWlmIChob3RrZXkpIHsNCiAgICArCQl3YXR0cnNldCh3
aW4sIHNlbGVjdGVkID8gZGxnLnRhZ19rZXlfc2VsZWN0ZWQuYXRyDQogICAgKwkJCSA6IGRsZy50
YWdfa2V5LmF0cik7DQogICAgKwkJbXZ3YWRkY2god2luLCBsaW5lX3ksIGl0ZW1feCArIGosIG1l
bnVfaXRlbVtqXSk7DQogICAgKwl9DQogICAgKwlpZiAoc2VsZWN0ZWQpIHsNCiAgICArCQl3bW92
ZSh3aW4sIGxpbmVfeSwgaXRlbV94ICsgMSk7DQogICAgKwl9DQogICAgKwlmcmVlKG1lbnVfaXRl
bSk7DQogICAgKwl3cmVmcmVzaCh3aW4pOw0KICAgICt9DQogICAgKw0KICAgICsjZGVmaW5lIHBy
aW50X2l0ZW0oaW5kZXgsIGNob2ljZSwgc2VsZWN0ZWQpCQkJCVwNCiAgICArZG8gewkJCQkJCQkJ
CVwNCiAgICArCWl0ZW1fc2V0KGluZGV4KTsJCQkJCQlcDQogICAgKwlkb19wcmludF9pdGVtKG1l
bnUsIGl0ZW1fc3RyKCksIGNob2ljZSwgc2VsZWN0ZWQsICFpdGVtX2lzX3RhZygnOicpKTsgXA0K
ICAgICt9IHdoaWxlICgwKQ0KICAgICsNCiAgICArLyoNCiAgICArICogUHJpbnQgdGhlIHNjcm9s
bCBpbmRpY2F0b3JzLg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgcHJpbnRfYXJyb3dzKFdJ
TkRPVyAqIHdpbiwgaW50IGl0ZW1fbm8sIGludCBzY3JvbGwsIGludCB5LCBpbnQgeCwNCiAgICAr
CQkJIGludCBoZWlnaHQpDQogICAgK3sNCiAgICArCWludCBjdXJfeSwgY3VyX3g7DQogICAgKw0K
ICAgICsJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOw0KICAgICsNCiAgICArCXdtb3ZlKHdpbiwg
eSwgeCk7DQogICAgKw0KICAgICsJaWYgKHNjcm9sbCA+IDApIHsNCiAgICArCQl3YXR0cnNldCh3
aW4sIGRsZy51YXJyb3cuYXRyKTsNCiAgICArCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsNCiAg
ICArCQl3YWRkc3RyKHdpbiwgIigtKSIpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQl3YXR0cnNl
dCh3aW4sIGRsZy5tZW51Ym94LmF0cik7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsN
CiAgICArCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19I
TElORSk7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCX0NCiAgICArDQog
ICAgKwl5ID0geSArIGhlaWdodCArIDE7DQogICAgKwl3bW92ZSh3aW4sIHksIHgpOw0KICAgICsJ
d3JlZnJlc2god2luKTsNCiAgICArDQogICAgKwlpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYmIChz
Y3JvbGwgKyBoZWlnaHQgPCBpdGVtX25vKSkgew0KICAgICsJCXdhdHRyc2V0KHdpbiwgZGxnLmRh
cnJvdy5hdHIpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19EQVJST1cpOw0KICAgICsJCXdhZGRz
dHIod2luLCAiKCspIik7DQogICAgKwl9IGVsc2Ugew0KICAgICsJCXdhdHRyc2V0KHdpbiwgZGxn
Lm1lbnVib3hfYm9yZGVyLmF0cik7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAg
ICArCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19ITElO
RSk7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCX0NCiAgICArDQogICAg
Kwl3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7DQogICAgKwl3cmVmcmVzaCh3aW4pOw0KICAgICt9
DQogICAgKw0KICAgICsvKg0KICAgICsgKiBEaXNwbGF5IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25z
Lg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiB3aW4s
IGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQ0KICAgICt7DQogICAgKwlpbnQg
eCA9IHdpZHRoIC8gMiAtIDI4Ow0KICAgICsJaW50IHkgPSBoZWlnaHQgLSAyOw0KICAgICsNCiAg
ICArCXByaW50X2J1dHRvbih3aW4sICJTZWxlY3QiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsNCiAg
ICArCXByaW50X2J1dHRvbih3aW4sICIgRXhpdCAiLCB5LCB4ICsgMTIsIHNlbGVjdGVkID09IDEp
Ow0KICAgICsJcHJpbnRfYnV0dG9uKHdpbiwgIiBIZWxwICIsIHksIHggKyAyNCwgc2VsZWN0ZWQg
PT0gMik7DQogICAgKwlwcmludF9idXR0b24od2luLCAiIFNhdmUgIiwgeSwgeCArIDM2LCBzZWxl
Y3RlZCA9PSAzKTsNCiAgICArCXByaW50X2J1dHRvbih3aW4sICIgTG9hZCAiLCB5LCB4ICsgNDgs
IHNlbGVjdGVkID09IDQpOw0KICAgICsNCiAgICArCXdtb3ZlKHdpbiwgeSwgeCArIDEgKyAxMiAq
IHNlbGVjdGVkKTsNCiAgICArCXdyZWZyZXNoKHdpbik7DQogICAgK30NCiAgICArDQogICAgKy8q
IHNjcm9sbCB1cCBuIGxpbmVzIChuIG1heSBiZSBuZWdhdGl2ZSkgKi8NCiAgICArc3RhdGljIHZv
aWQgZG9fc2Nyb2xsKFdJTkRPVyAqd2luLCBpbnQgKnNjcm9sbCwgaW50IG4pDQogICAgK3sNCiAg
ICArCS8qIFNjcm9sbCBtZW51IHVwICovDQogICAgKwlzY3JvbGxvayh3aW4sIFRSVUUpOw0KICAg
ICsJd3Njcmwod2luLCBuKTsNCiAgICArCXNjcm9sbG9rKHdpbiwgRkFMU0UpOw0KICAgICsJKnNj
cm9sbCA9ICpzY3JvbGwgKyBuOw0KICAgICsJd3JlZnJlc2god2luKTsNCiAgICArfQ0KICAgICsN
CiAgICArLyoNCiAgICArICogRGlzcGxheSBhIG1lbnUgZm9yIGNob29zaW5nIGFtb25nIGEgbnVt
YmVyIG9mIG9wdGlvbnMNCiAgICArICovDQogICAgK2ludCBkaWFsb2dfbWVudShjb25zdCBjaGFy
ICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LA0KICAgICsJCWNvbnN0IHZvaWQgKnNlbGVjdGVk
LCBpbnQgKnNfc2Nyb2xsKQ0KICAgICt7DQogICAgKwlpbnQgaSwgaiwgeCwgeSwgYm94X3gsIGJv
eF95Ow0KICAgICsJaW50IGhlaWdodCwgd2lkdGgsIG1lbnVfaGVpZ2h0Ow0KICAgICsJaW50IGtl
eSA9IDAsIGJ1dHRvbiA9IDAsIHNjcm9sbCA9IDAsIGNob2ljZSA9IDA7DQogICAgKwlpbnQgZmly
c3RfaXRlbSA9ICAwLCBtYXhfY2hvaWNlOw0KICAgICsJV0lORE9XICpkaWFsb2csICptZW51Ow0K
ICAgICsNCiAgICArZG9fcmVzaXplOg0KICAgICsJaGVpZ2h0ID0gZ2V0bWF4eShzdGRzY3IpOw0K
ICAgICsJd2lkdGggPSBnZXRtYXh4KHN0ZHNjcik7DQogICAgKwlpZiAoaGVpZ2h0IDwgTUVOVUJP
WF9IRUlHVEhfTUlOIHx8IHdpZHRoIDwgTUVOVUJPWF9XSURUSF9NSU4pDQogICAgKwkJcmV0dXJu
IC1FUlJESVNQTEFZVE9PU01BTEw7DQogICAgKw0KICAgICsJaGVpZ2h0IC09IDQ7DQogICAgKwl3
aWR0aCAgLT0gNTsNCiAgICArCW1lbnVfaGVpZ2h0ID0gaGVpZ2h0IC0gMTA7DQogICAgKw0KICAg
ICsJbWF4X2Nob2ljZSA9IE1JTihtZW51X2hlaWdodCwgaXRlbV9jb3VudCgpKTsNCiAgICArDQog
ICAgKwkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICArCXggPSAoZ2V0bWF4
eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsNCiAgICArCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVp
Z2h0KSAvIDI7DQogICAgKw0KICAgICsJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQs
IHdpZHRoKTsNCiAgICArDQogICAgKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwg
eCk7DQogICAgKwlrZXlwYWQoZGlhbG9nLCBUUlVFKTsNCiAgICArDQogICAgKwlkcmF3X2JveChk
aWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsDQogICAgKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcu
Ym9yZGVyLmF0cik7DQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsNCiAg
ICArCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0KICAgICsJZm9y
IChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQ0KICAgICsJCXdhZGRjaChkaWFsb2csIEFDU19I
TElORSk7DQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICArCXdi
a2dkc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIgJiBBX0NPTE9SKTsNCiAgICArCXdhZGRjaChk
aWFsb2csIEFDU19SVEVFKTsNCiAgICArDQogICAgKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxl
LCB3aWR0aCk7DQogICAgKw0KICAgICsJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7
DQogICAgKwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsN
CiAgICArDQogICAgKwltZW51X3dpZHRoID0gd2lkdGggLSA2Ow0KICAgICsJYm94X3kgPSBoZWln
aHQgLSBtZW51X2hlaWdodCAtIDU7DQogICAgKwlib3hfeCA9ICh3aWR0aCAtIG1lbnVfd2lkdGgp
IC8gMiAtIDE7DQogICAgKw0KICAgICsJLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBtZW51
ICovDQogICAgKwltZW51ID0gc3Vid2luKGRpYWxvZywgbWVudV9oZWlnaHQsIG1lbnVfd2lkdGgs
DQogICAgKwkJICAgICAgeSArIGJveF95ICsgMSwgeCArIGJveF94ICsgMSk7DQogICAgKwlrZXlw
YWQobWVudSwgVFJVRSk7DQogICAgKw0KICAgICsJLyogZHJhdyBhIGJveCBhcm91bmQgdGhlIG1l
bnUgaXRlbXMgKi8NCiAgICArCWRyYXdfYm94KGRpYWxvZywgYm94X3ksIGJveF94LCBtZW51X2hl
aWdodCArIDIsIG1lbnVfd2lkdGggKyAyLA0KICAgICsJCSBkbGcubWVudWJveF9ib3JkZXIuYXRy
LCBkbGcubWVudWJveC5hdHIpOw0KICAgICsNCiAgICArCWlmIChtZW51X3dpZHRoID49IDgwKQ0K
ICAgICsJCWl0ZW1feCA9IChtZW51X3dpZHRoIC0gNzApIC8gMjsNCiAgICArCWVsc2UNCiAgICAr
CQlpdGVtX3ggPSA0Ow0KICAgICsNCiAgICArCS8qIFNldCBjaG9pY2UgdG8gZGVmYXVsdCBpdGVt
ICovDQogICAgKwlpdGVtX2ZvcmVhY2goKQ0KICAgICsJCWlmIChzZWxlY3RlZCAmJiAoc2VsZWN0
ZWQgPT0gaXRlbV9kYXRhKCkpKQ0KICAgICsJCQljaG9pY2UgPSBpdGVtX24oKTsNCiAgICArCS8q
IGdldCB0aGUgc2F2ZWQgc2Nyb2xsIGluZm8gKi8NCiAgICArCXNjcm9sbCA9ICpzX3Njcm9sbDsN
CiAgICArCWlmICgoc2Nyb2xsIDw9IGNob2ljZSkgJiYgKHNjcm9sbCArIG1heF9jaG9pY2UgPiBj
aG9pY2UpICYmDQogICAgKwkgICAoc2Nyb2xsID49IDApICYmIChzY3JvbGwgKyBtYXhfY2hvaWNl
IDw9IGl0ZW1fY291bnQoKSkpIHsNCiAgICArCQlmaXJzdF9pdGVtID0gc2Nyb2xsOw0KICAgICsJ
CWNob2ljZSA9IGNob2ljZSAtIHNjcm9sbDsNCiAgICArCX0gZWxzZSB7DQogICAgKwkJc2Nyb2xs
ID0gMDsNCiAgICArCX0NCiAgICArCWlmICgoY2hvaWNlID49IG1heF9jaG9pY2UpKSB7DQogICAg
KwkJaWYgKGNob2ljZSA+PSBpdGVtX2NvdW50KCkgLSBtYXhfY2hvaWNlIC8gMikNCiAgICArCQkJ
c2Nyb2xsID0gZmlyc3RfaXRlbSA9IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2U7DQogICAgKwkJ
ZWxzZQ0KICAgICsJCQlzY3JvbGwgPSBmaXJzdF9pdGVtID0gY2hvaWNlIC0gbWF4X2Nob2ljZSAv
IDI7DQogICAgKwkJY2hvaWNlID0gY2hvaWNlIC0gc2Nyb2xsOw0KICAgICsJfQ0KICAgICsNCiAg
ICArCS8qIFByaW50IHRoZSBtZW51ICovDQogICAgKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2lj
ZTsgaSsrKSB7DQogICAgKwkJcHJpbnRfaXRlbShmaXJzdF9pdGVtICsgaSwgaSwgaSA9PSBjaG9p
Y2UpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXdub3V0cmVmcmVzaChtZW51KTsNCiAgICArDQog
ICAgKwlwcmludF9hcnJvd3MoZGlhbG9nLCBpdGVtX2NvdW50KCksIHNjcm9sbCwNCiAgICArCQkg
ICAgIGJveF95LCBib3hfeCArIGl0ZW1feCArIDEsIG1lbnVfaGVpZ2h0KTsNCiAgICArDQogICAg
KwlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgKwl3bW92ZSht
ZW51LCBjaG9pY2UsIGl0ZW1feCArIDEpOw0KICAgICsJd3JlZnJlc2gobWVudSk7DQogICAgKw0K
ICAgICsJd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7DQogICAgKwkJa2V5ID0gd2dldGNoKG1lbnUp
Ow0KICAgICsNCiAgICArCQlpZiAoa2V5IDwgMjU2ICYmIGlzYWxwaGEoa2V5KSkNCiAgICArCQkJ
a2V5ID0gdG9sb3dlcihrZXkpOw0KICAgICsNCiAgICArCQlpZiAoc3RyY2hyKCJ5bm1oIiwga2V5
KSkNCiAgICArCQkJaSA9IG1heF9jaG9pY2U7DQogICAgKwkJZWxzZSB7DQogICAgKwkJCWZvciAo
aSA9IGNob2ljZSArIDE7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsNCiAgICArCQkJCWl0ZW1fc2V0
KHNjcm9sbCArIGkpOw0KICAgICsJCQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1fc3RyKCksICJZeU5u
TW1IaCIpOw0KICAgICsJCQkJaWYgKGtleSA9PSB0b2xvd2VyKGl0ZW1fc3RyKClbal0pKQ0KICAg
ICsJCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWlmIChpID09IG1heF9jaG9pY2UpDQog
ICAgKwkJCQlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7DQogICAgKwkJCQkJaXRl
bV9zZXQoc2Nyb2xsICsgaSk7DQogICAgKwkJCQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1fc3RyKCks
ICJZeU5uTW1IaCIpOw0KICAgICsJCQkJCWlmIChrZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pd
KSkNCiAgICArCQkJCQkJYnJlYWs7DQogICAgKwkJCQl9DQogICAgKwkJfQ0KICAgICsNCiAgICAr
CQlpZiAoaXRlbV9jb3VudCgpICE9IDAgJiYNCiAgICArCQkgICAgKGkgPCBtYXhfY2hvaWNlIHx8
DQogICAgKwkJICAgICBrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSBLRVlfRE9XTiB8fA0KICAgICsJ
CSAgICAga2V5ID09ICctJyB8fCBrZXkgPT0gJysnIHx8DQogICAgKwkJICAgICBrZXkgPT0gS0VZ
X1BQQUdFIHx8IGtleSA9PSBLRVlfTlBBR0UpKSB7DQogICAgKwkJCS8qIFJlbW92ZSBoaWdobGln
dCBvZiBjdXJyZW50IGl0ZW0gKi8NCiAgICArCQkJcHJpbnRfaXRlbShzY3JvbGwgKyBjaG9pY2Us
IGNob2ljZSwgRkFMU0UpOw0KICAgICsNCiAgICArCQkJaWYgKGtleSA9PSBLRVlfVVAgfHwga2V5
ID09ICctJykgew0KICAgICsJCQkJaWYgKGNob2ljZSA8IDIgJiYgc2Nyb2xsKSB7DQogICAgKwkJ
CQkJLyogU2Nyb2xsIG1lbnUgZG93biAqLw0KICAgICsJCQkJCWRvX3Njcm9sbChtZW51LCAmc2Ny
b2xsLCAtMSk7DQogICAgKw0KICAgICsJCQkJCXByaW50X2l0ZW0oc2Nyb2xsLCAwLCBGQUxTRSk7
DQogICAgKwkJCQl9IGVsc2UNCiAgICArCQkJCQljaG9pY2UgPSBNQVgoY2hvaWNlIC0gMSwgMCk7
DQogICAgKw0KICAgICsJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBrZXkgPT0gJysn
KSB7DQogICAgKwkJCQlwcmludF9pdGVtKHNjcm9sbCtjaG9pY2UsIGNob2ljZSwgRkFMU0UpOw0K
ICAgICsNCiAgICArCQkJCWlmICgoY2hvaWNlID4gbWF4X2Nob2ljZSAtIDMpICYmDQogICAgKwkJ
CQkgICAgKHNjcm9sbCArIG1heF9jaG9pY2UgPCBpdGVtX2NvdW50KCkpKSB7DQogICAgKwkJCQkJ
LyogU2Nyb2xsIG1lbnUgdXAgKi8NCiAgICArCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwg
MSk7DQogICAgKw0KICAgICsJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UgLSAxLA0K
ICAgICsJCQkJCQkgICBtYXhfY2hvaWNlIC0gMSwgRkFMU0UpOw0KICAgICsJCQkJfSBlbHNlDQog
ICAgKwkJCQkJY2hvaWNlID0gTUlOKGNob2ljZSArIDEsIG1heF9jaG9pY2UgLSAxKTsNCiAgICAr
DQogICAgKwkJCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9QUEFHRSkgew0KICAgICsJCQkJc2Nyb2xs
b2sobWVudSwgVFJVRSk7DQogICAgKwkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBp
KyspIHsNCiAgICArCQkJCQlpZiAoc2Nyb2xsID4gMCkgew0KICAgICsJCQkJCQlkb19zY3JvbGwo
bWVudSwgJnNjcm9sbCwgLTEpOw0KICAgICsJCQkJCQlwcmludF9pdGVtKHNjcm9sbCwgMCwgRkFM
U0UpOw0KICAgICsJCQkJCX0gZWxzZSB7DQogICAgKwkJCQkJCWlmIChjaG9pY2UgPiAwKQ0KICAg
ICsJCQkJCQkJY2hvaWNlLS07DQogICAgKwkJCQkJfQ0KICAgICsJCQkJfQ0KICAgICsNCiAgICAr
CQkJfSBlbHNlIGlmIChrZXkgPT0gS0VZX05QQUdFKSB7DQogICAgKwkJCQlmb3IgKGkgPSAwOyAo
aSA8IG1heF9jaG9pY2UpOyBpKyspIHsNCiAgICArCQkJCQlpZiAoc2Nyb2xsICsgbWF4X2Nob2lj
ZSA8IGl0ZW1fY291bnQoKSkgew0KICAgICsJCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwg
MSk7DQogICAgKwkJCQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UtMSwNCiAgICArCQkJ
CQkJCSAgIG1heF9jaG9pY2UgLSAxLCBGQUxTRSk7DQogICAgKwkJCQkJfSBlbHNlIHsNCiAgICAr
CQkJCQkJaWYgKGNob2ljZSArIDEgPCBtYXhfY2hvaWNlKQ0KICAgICsJCQkJCQkJY2hvaWNlKys7
DQogICAgKwkJCQkJfQ0KICAgICsJCQkJfQ0KICAgICsJCQl9IGVsc2UNCiAgICArCQkJCWNob2lj
ZSA9IGk7DQogICAgKw0KICAgICsJCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNl
LCBUUlVFKTsNCiAgICArDQogICAgKwkJCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fY291bnQo
KSwgc2Nyb2xsLA0KICAgICsJCQkJICAgICBib3hfeSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51
X2hlaWdodCk7DQogICAgKw0KICAgICsJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsNCiAgICArCQkJ
d3JlZnJlc2gobWVudSk7DQogICAgKw0KICAgICsJCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5v
dGhlciBrZXkgcHJlc3MgKi8NCiAgICArCQl9DQogICAgKw0KICAgICsJCXN3aXRjaCAoa2V5KSB7
DQogICAgKwkJY2FzZSBLRVlfTEVGVDoNCiAgICArCQljYXNlIFRBQjoNCiAgICArCQljYXNlIEtF
WV9SSUdIVDoNCiAgICArCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAtLWJ1dHRvbiA6
ICsrYnV0dG9uKSA8IDApDQogICAgKwkJCSAgICA/IDQgOiAoYnV0dG9uID4gNCA/IDAgOiBidXR0
b24pOw0KICAgICsNCiAgICArCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgs
IGJ1dHRvbik7DQogICAgKwkJCXdyZWZyZXNoKG1lbnUpOw0KICAgICsJCQlicmVhazsNCiAgICAr
CQljYXNlICcgJzoNCiAgICArCQljYXNlICdzJzoNCiAgICArCQljYXNlICd5JzoNCiAgICArCQlj
YXNlICduJzoNCiAgICArCQljYXNlICdtJzoNCiAgICArCQljYXNlICcvJzoNCiAgICArCQljYXNl
ICdoJzoNCiAgICArCQljYXNlICc/JzoNCiAgICArCQljYXNlICd6JzoNCiAgICArCQljYXNlICdc
bic6DQogICAgKwkJCS8qIHNhdmUgc2Nyb2xsIGluZm8gKi8NCiAgICArCQkJKnNfc2Nyb2xsID0g
c2Nyb2xsOw0KICAgICsJCQlkZWx3aW4obWVudSk7DQogICAgKwkJCWRlbHdpbihkaWFsb2cpOw0K
ICAgICsJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOw0KICAgICsJCQlpdGVtX3NldF9zZWxl
Y3RlZCgxKTsNCiAgICArCQkJc3dpdGNoIChrZXkpIHsNCiAgICArCQkJY2FzZSAnaCc6DQogICAg
KwkJCWNhc2UgJz8nOg0KICAgICsJCQkJcmV0dXJuIDI7DQogICAgKwkJCWNhc2UgJ3MnOg0KICAg
ICsJCQljYXNlICd5JzoNCiAgICArCQkJCXJldHVybiA1Ow0KICAgICsJCQljYXNlICduJzoNCiAg
ICArCQkJCXJldHVybiA2Ow0KICAgICsJCQljYXNlICdtJzoNCiAgICArCQkJCXJldHVybiA3Ow0K
ICAgICsJCQljYXNlICcgJzoNCiAgICArCQkJCXJldHVybiA4Ow0KICAgICsJCQljYXNlICcvJzoN
CiAgICArCQkJCXJldHVybiA5Ow0KICAgICsJCQljYXNlICd6JzoNCiAgICArCQkJCXJldHVybiAx
MDsNCiAgICArCQkJY2FzZSAnXG4nOg0KICAgICsJCQkJcmV0dXJuIGJ1dHRvbjsNCiAgICArCQkJ
fQ0KICAgICsJCQlyZXR1cm4gMDsNCiAgICArCQljYXNlICdlJzoNCiAgICArCQljYXNlICd4JzoN
CiAgICArCQkJa2V5ID0gS0VZX0VTQzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlf
RVNDOg0KICAgICsJCQlrZXkgPSBvbl9rZXlfZXNjKG1lbnUpOw0KICAgICsJCQlicmVhazsNCiAg
ICArCQljYXNlIEtFWV9SRVNJWkU6DQogICAgKwkJCW9uX2tleV9yZXNpemUoKTsNCiAgICArCQkJ
ZGVsd2luKG1lbnUpOw0KICAgICsJCQlkZWx3aW4oZGlhbG9nKTsNCiAgICArCQkJZ290byBkb19y
ZXNpemU7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJZGVsd2luKG1lbnUpOw0KICAgICsJZGVs
d2luKGRpYWxvZyk7DQogICAgKwlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8NCiAgICAr
fQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3gu
YyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jDQogICAgbmV3IGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40ZTMzOWIxDQogICAgLS0tIC9kZXYvbnVs
bA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jDQogICAg
QEAgLTAsMCArMSwzOTUgQEANCiAgICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjArDQogICAgKy8qDQogICAgKyAqICB0ZXh0Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgdGV4dCBi
b3gNCiAgICArICoNCiAgICArICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZA
Y3MuY3Voay5oaykNCiAgICArICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZ
OiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBAY2Z3LmNvbSkNCiAgICArICovDQogICAgKw0KICAg
ICsjaW5jbHVkZSAiZGlhbG9nLmgiDQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBiYWNrX2xpbmVz
KGludCBuKTsNCiAgICArc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5ET1cgKndpbiwgaW50IGhl
aWdodCwgaW50IHdpZHRoLCB1cGRhdGVfdGV4dF9mbg0KICAgICsJCSAgICAgICB1cGRhdGVfdGV4
dCwgdm9pZCAqZGF0YSk7DQogICAgK3N0YXRpYyB2b2lkIHByaW50X2xpbmUoV0lORE9XICp3aW4s
IGludCByb3csIGludCB3aWR0aCk7DQogICAgK3N0YXRpYyBjaGFyICpnZXRfbGluZSh2b2lkKTsN
CiAgICArc3RhdGljIHZvaWQgcHJpbnRfcG9zaXRpb24oV0lORE9XICogd2luKTsNCiAgICArDQog
ICAgK3N0YXRpYyBpbnQgaHNjcm9sbDsNCiAgICArc3RhdGljIGludCBiZWdpbl9yZWFjaGVkLCBl
bmRfcmVhY2hlZCwgcGFnZV9sZW5ndGg7DQogICAgK3N0YXRpYyBjaGFyICpidWY7DQogICAgK3N0
YXRpYyBjaGFyICpwYWdlOw0KICAgICsNCiAgICArLyoNCiAgICArICogcmVmcmVzaCB3aW5kb3cg
Y29udGVudA0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgcmVmcmVzaF90ZXh0X2JveChXSU5E
T1cgKmRpYWxvZywgV0lORE9XICpib3gsIGludCBib3hoLCBpbnQgYm94dywNCiAgICArCQkJICAg
ICBpbnQgY3VyX3ksIGludCBjdXJfeCwgdXBkYXRlX3RleHRfZm4gdXBkYXRlX3RleHQsDQogICAg
KwkJCSAgICAgdm9pZCAqZGF0YSkNCiAgICArew0KICAgICsJcHJpbnRfcGFnZShib3gsIGJveGgs
IGJveHcsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICArCXByaW50X3Bvc2l0aW9uKGRpYWxvZyk7
DQogICAgKwl3bW92ZShkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFJlc3RvcmUgY3Vyc29yIHBv
c2l0aW9uICovDQogICAgKwl3cmVmcmVzaChkaWFsb2cpOw0KICAgICt9DQogICAgKw0KICAgICsN
CiAgICArLyoNCiAgICArICogRGlzcGxheSB0ZXh0IGZyb20gYSBmaWxlIGluIGEgZGlhbG9nIGJv
eC4NCiAgICArICoNCiAgICArICoga2V5cyBpcyBhIG51bGwtdGVybWluYXRlZCBhcnJheQ0KICAg
ICsgKiB1cGRhdGVfdGV4dCgpIG1heSBub3QgYWRkIG9yIHJlbW92ZSBhbnkgJ1xuJyBvciAnXDAn
IGluIHRidWYNCiAgICArICovDQogICAgK2ludCBkaWFsb2dfdGV4dGJveChjb25zdCBjaGFyICp0
aXRsZSwgY2hhciAqdGJ1ZiwgaW50IGluaXRpYWxfaGVpZ2h0LA0KICAgICsJCSAgIGludCBpbml0
aWFsX3dpZHRoLCBpbnQgKmtleXMsIGludCAqX3ZzY3JvbGwsIGludCAqX2hzY3JvbGwsDQogICAg
KwkJICAgdXBkYXRlX3RleHRfZm4gdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpDQogICAgK3sNCiAg
ICArCWludCBpLCB4LCB5LCBjdXJfeCwgY3VyX3ksIGtleSA9IDA7DQogICAgKwlpbnQgaGVpZ2h0
LCB3aWR0aCwgYm94aCwgYm94dzsNCiAgICArCVdJTkRPVyAqZGlhbG9nLCAqYm94Ow0KICAgICsJ
Ym9vbCBkb25lID0gZmFsc2U7DQogICAgKw0KICAgICsJYmVnaW5fcmVhY2hlZCA9IDE7DQogICAg
KwllbmRfcmVhY2hlZCA9IDA7DQogICAgKwlwYWdlX2xlbmd0aCA9IDA7DQogICAgKwloc2Nyb2xs
ID0gMDsNCiAgICArCWJ1ZiA9IHRidWY7DQogICAgKwlwYWdlID0gYnVmOwkvKiBwYWdlIGlzIHBv
aW50ZXIgdG8gc3RhcnQgb2YgcGFnZSB0byBiZSBkaXNwbGF5ZWQgKi8NCiAgICArDQogICAgKwlp
ZiAoX3ZzY3JvbGwgJiYgKl92c2Nyb2xsKSB7DQogICAgKwkJYmVnaW5fcmVhY2hlZCA9IDA7DQog
ICAgKw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCAqX3ZzY3JvbGw7IGkrKykNCiAgICArCQkJZ2V0
X2xpbmUoKTsNCiAgICArCX0NCiAgICArCWlmIChfaHNjcm9sbCkNCiAgICArCQloc2Nyb2xsID0g
Kl9oc2Nyb2xsOw0KICAgICsNCiAgICArZG9fcmVzaXplOg0KICAgICsJZ2V0bWF4eXgoc3Rkc2Ny
LCBoZWlnaHQsIHdpZHRoKTsNCiAgICArCWlmIChoZWlnaHQgPCBURVhUQk9YX0hFSUdUSF9NSU4g
fHwgd2lkdGggPCBURVhUQk9YX1dJRFRIX01JTikNCiAgICArCQlyZXR1cm4gLUVSUkRJU1BMQVlU
T09TTUFMTDsNCiAgICArCWlmIChpbml0aWFsX2hlaWdodCAhPSAwKQ0KICAgICsJCWhlaWdodCA9
IGluaXRpYWxfaGVpZ2h0Ow0KICAgICsJZWxzZQ0KICAgICsJCWlmIChoZWlnaHQgPiA0KQ0KICAg
ICsJCQloZWlnaHQgLT0gNDsNCiAgICArCQllbHNlDQogICAgKwkJCWhlaWdodCA9IDA7DQogICAg
KwlpZiAoaW5pdGlhbF93aWR0aCAhPSAwKQ0KICAgICsJCXdpZHRoID0gaW5pdGlhbF93aWR0aDsN
CiAgICArCWVsc2UNCiAgICArCQlpZiAod2lkdGggPiA1KQ0KICAgICsJCQl3aWR0aCAtPSA1Ow0K
ICAgICsJCWVsc2UNCiAgICArCQkJd2lkdGggPSAwOw0KICAgICsNCiAgICArCS8qIGNlbnRlciBk
aWFsb2cgYm94IG9uIHNjcmVlbiAqLw0KICAgICsJeCA9IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0
aCkgLyAyOw0KICAgICsJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsNCiAgICAr
DQogICAgKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOw0KICAgICsN
CiAgICArCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsNCiAgICArCWtleXBh
ZChkaWFsb2csIFRSVUUpOw0KICAgICsNCiAgICArCS8qIENyZWF0ZSB3aW5kb3cgZm9yIGJveCBy
ZWdpb24sIHVzZWQgZm9yIHNjcm9sbGluZyB0ZXh0ICovDQogICAgKwlib3hoID0gaGVpZ2h0IC0g
NDsNCiAgICArCWJveHcgPSB3aWR0aCAtIDI7DQogICAgKwlib3ggPSBzdWJ3aW4oZGlhbG9nLCBi
b3hoLCBib3h3LCB5ICsgMSwgeCArIDEpOw0KICAgICsJd2F0dHJzZXQoYm94LCBkbGcuZGlhbG9n
LmF0cik7DQogICAgKwl3YmtnZHNldChib3gsIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7DQog
ICAgKw0KICAgICsJa2V5cGFkKGJveCwgVFJVRSk7DQogICAgKw0KICAgICsJLyogcmVnaXN0ZXIg
dGhlIG5ldyB3aW5kb3csIGFsb25nIHdpdGggaXRzIGJvcmRlcnMgKi8NCiAgICArCWRyYXdfYm94
KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwNCiAgICArCQkgZGxnLmRpYWxvZy5hdHIsIGRs
Zy5ib3JkZXIuYXRyKTsNCiAgICArDQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIu
YXRyKTsNCiAgICArCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0K
ICAgICsJZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQ0KICAgICsJCXdhZGRjaChkaWFs
b2csIEFDU19ITElORSk7DQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsN
CiAgICArCXdia2dkc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIgJiBBX0NPTE9SKTsNCiAgICAr
CXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsNCiAgICArDQogICAgKwlwcmludF90aXRsZShkaWFs
b2csIHRpdGxlLCB3aWR0aCk7DQogICAgKw0KICAgICsJcHJpbnRfYnV0dG9uKGRpYWxvZywgIiBF
eGl0ICIsIGhlaWdodCAtIDIsIHdpZHRoIC8gMiAtIDQsIFRSVUUpOw0KICAgICsJd25vdXRyZWZy
ZXNoKGRpYWxvZyk7DQogICAgKwlnZXR5eChkaWFsb2csIGN1cl95LCBjdXJfeCk7CS8qIFNhdmUg
Y3Vyc29yIHBvc2l0aW9uICovDQogICAgKw0KICAgICsJLyogUHJpbnQgZmlyc3QgcGFnZSBvZiB0
ZXh0ICovDQogICAgKwlhdHRyX2NsZWFyKGJveCwgYm94aCwgYm94dywgZGxnLmRpYWxvZy5hdHIp
Ow0KICAgICsJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ks
IGN1cl94LCB1cGRhdGVfdGV4dCwNCiAgICArCQkJIGRhdGEpOw0KICAgICsNCiAgICArCXdoaWxl
ICghZG9uZSkgew0KICAgICsJCWtleSA9IHdnZXRjaChkaWFsb2cpOw0KICAgICsJCXN3aXRjaCAo
a2V5KSB7DQogICAgKwkJY2FzZSAnRSc6CS8qIEV4aXQgKi8NCiAgICArCQljYXNlICdlJzoNCiAg
ICArCQljYXNlICdYJzoNCiAgICArCQljYXNlICd4JzoNCiAgICArCQljYXNlICdxJzoNCiAgICAr
CQljYXNlICdcbic6DQogICAgKwkJCWRvbmUgPSB0cnVlOw0KICAgICsJCQlicmVhazsNCiAgICAr
CQljYXNlICdnJzoJLyogRmlyc3QgcGFnZSAqLw0KICAgICsJCWNhc2UgS0VZX0hPTUU6DQogICAg
KwkJCWlmICghYmVnaW5fcmVhY2hlZCkgew0KICAgICsJCQkJYmVnaW5fcmVhY2hlZCA9IDE7DQog
ICAgKwkJCQlwYWdlID0gYnVmOw0KICAgICsJCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJv
eCwgYm94aCwgYm94dywNCiAgICArCQkJCQkJIGN1cl95LCBjdXJfeCwgdXBkYXRlX3RleHQsDQog
ICAgKwkJCQkJCSBkYXRhKTsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNl
ICdHJzoJLyogTGFzdCBwYWdlICovDQogICAgKwkJY2FzZSBLRVlfRU5EOg0KICAgICsNCiAgICAr
CQkJZW5kX3JlYWNoZWQgPSAxOw0KICAgICsJCQkvKiBwb2ludCB0byBsYXN0IGNoYXIgaW4gYnVm
ICovDQogICAgKwkJCXBhZ2UgPSBidWYgKyBzdHJsZW4oYnVmKTsNCiAgICArCQkJYmFja19saW5l
cyhib3hoKTsNCiAgICArCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94
dywgY3VyX3ksDQogICAgKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7DQogICAgKwkJ
CWJyZWFrOw0KICAgICsJCWNhc2UgJ0snOgkvKiBQcmV2aW91cyBsaW5lICovDQogICAgKwkJY2Fz
ZSAnayc6DQogICAgKwkJY2FzZSBLRVlfVVA6DQogICAgKwkJCWlmIChiZWdpbl9yZWFjaGVkKQ0K
ICAgICsJCQkJYnJlYWs7DQogICAgKw0KICAgICsJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoICsg
MSk7DQogICAgKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1
cl95LA0KICAgICsJCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgICsJCQlicmVh
azsNCiAgICArCQljYXNlICdCJzoJLyogUHJldmlvdXMgcGFnZSAqLw0KICAgICsJCWNhc2UgJ2In
Og0KICAgICsJCWNhc2UgJ3UnOg0KICAgICsJCWNhc2UgS0VZX1BQQUdFOg0KICAgICsJCQlpZiAo
YmVnaW5fcmVhY2hlZCkNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQliYWNrX2xpbmVzKHBhZ2Vf
bGVuZ3RoICsgYm94aCk7DQogICAgKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJv
eGgsIGJveHcsIGN1cl95LA0KICAgICsJCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0K
ICAgICsJCQlicmVhazsNCiAgICArCQljYXNlICdKJzoJLyogTmV4dCBsaW5lICovDQogICAgKwkJ
Y2FzZSAnaic6DQogICAgKwkJY2FzZSBLRVlfRE9XTjoNCiAgICArCQkJaWYgKGVuZF9yZWFjaGVk
KQ0KICAgICsJCQkJYnJlYWs7DQogICAgKw0KICAgICsJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3Ro
IC0gMSk7DQogICAgKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcs
IGN1cl95LA0KICAgICsJCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgICsJCQli
cmVhazsNCiAgICArCQljYXNlIEtFWV9OUEFHRToJLyogTmV4dCBwYWdlICovDQogICAgKwkJY2Fz
ZSAnICc6DQogICAgKwkJY2FzZSAnZCc6DQogICAgKwkJCWlmIChlbmRfcmVhY2hlZCkNCiAgICAr
CQkJCWJyZWFrOw0KICAgICsNCiAgICArCQkJYmVnaW5fcmVhY2hlZCA9IDA7DQogICAgKwkJCXJl
ZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LA0KICAgICsJCQkJ
CSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNl
ICcwJzoJLyogQmVnaW5uaW5nIG9mIGxpbmUgKi8NCiAgICArCQljYXNlICdIJzoJLyogU2Nyb2xs
IGxlZnQgKi8NCiAgICArCQljYXNlICdoJzoNCiAgICArCQljYXNlIEtFWV9MRUZUOg0KICAgICsJ
CQlpZiAoaHNjcm9sbCA8PSAwKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKw0KICAgICsJCQlpZiAo
a2V5ID09ICcwJykNCiAgICArCQkJCWhzY3JvbGwgPSAwOw0KICAgICsJCQllbHNlDQogICAgKwkJ
CQloc2Nyb2xsLS07DQogICAgKwkJCS8qIFJlcHJpbnQgY3VycmVudCBwYWdlIHRvIHNjcm9sbCBo
b3Jpem9udGFsbHkgKi8NCiAgICArCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCk7DQogICAgKwkJ
CXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LA0KICAgICsJ
CQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgICsJCQlicmVhazsNCiAgICArCQlj
YXNlICdMJzoJLyogU2Nyb2xsIHJpZ2h0ICovDQogICAgKwkJY2FzZSAnbCc6DQogICAgKwkJY2Fz
ZSBLRVlfUklHSFQ6DQogICAgKwkJCWlmIChoc2Nyb2xsID49IE1BWF9MRU4pDQogICAgKwkJCQli
cmVhazsNCiAgICArCQkJaHNjcm9sbCsrOw0KICAgICsJCQkvKiBSZXByaW50IGN1cnJlbnQgcGFn
ZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICovDQogICAgKwkJCWJhY2tfbGluZXMocGFnZV9sZW5n
dGgpOw0KICAgICsJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBj
dXJfeSwNCiAgICArCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICArCQkJYnJl
YWs7DQogICAgKwkJY2FzZSBLRVlfRVNDOg0KICAgICsJCQlpZiAob25fa2V5X2VzYyhkaWFsb2cp
ID09IEtFWV9FU0MpDQogICAgKwkJCQlkb25lID0gdHJ1ZTsNCiAgICArCQkJYnJlYWs7DQogICAg
KwkJY2FzZSBLRVlfUkVTSVpFOg0KICAgICsJCQliYWNrX2xpbmVzKGhlaWdodCk7DQogICAgKwkJ
CWRlbHdpbihib3gpOw0KICAgICsJCQlkZWx3aW4oZGlhbG9nKTsNCiAgICArCQkJb25fa2V5X3Jl
c2l6ZSgpOw0KICAgICsJCQlnb3RvIGRvX3Jlc2l6ZTsNCiAgICArCQlkZWZhdWx0Og0KICAgICsJ
CQlmb3IgKGkgPSAwOyBrZXlzW2ldOyBpKyspIHsNCiAgICArCQkJCWlmIChrZXkgPT0ga2V5c1tp
XSkgew0KICAgICsJCQkJCWRvbmUgPSB0cnVlOw0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQkJ
fQ0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJZGVsd2luKGJveCk7DQogICAg
KwlkZWx3aW4oZGlhbG9nKTsNCiAgICArCWlmIChfdnNjcm9sbCkgew0KICAgICsJCWNvbnN0IGNo
YXIgKnM7DQogICAgKw0KICAgICsJCXMgPSBidWY7DQogICAgKwkJKl92c2Nyb2xsID0gMDsNCiAg
ICArCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsNCiAgICArCQl3aGlsZSAocyA8IHBhZ2UgJiYg
KHMgPSBzdHJjaHIocywgJ1xuJykpKSB7DQogICAgKwkJCSgqX3ZzY3JvbGwpKys7DQogICAgKwkJ
CXMrKzsNCiAgICArCQl9DQogICAgKwl9DQogICAgKwlpZiAoX2hzY3JvbGwpDQogICAgKwkJKl9o
c2Nyb2xsID0gaHNjcm9sbDsNCiAgICArCXJldHVybiBrZXk7DQogICAgK30NCiAgICArDQogICAg
Ky8qDQogICAgKyAqIEdvIGJhY2sgJ24nIGxpbmVzIGluIHRleHQuIENhbGxlZCBieSBkaWFsb2df
dGV4dGJveCgpLg0KICAgICsgKiAncGFnZScgd2lsbCBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRo
ZSBkZXNpcmVkIGxpbmUgaW4gJ2J1ZicuDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBiYWNr
X2xpbmVzKGludCBuKQ0KICAgICt7DQogICAgKwlpbnQgaTsNCiAgICArDQogICAgKwliZWdpbl9y
ZWFjaGVkID0gMDsNCiAgICArCS8qIEdvIGJhY2sgJ24nIGxpbmVzICovDQogICAgKwlmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7DQogICAgKwkJaWYgKCpwYWdlID09ICdcMCcpIHsNCiAgICArCQkJ
aWYgKGVuZF9yZWFjaGVkKSB7DQogICAgKwkJCQllbmRfcmVhY2hlZCA9IDA7DQogICAgKwkJCQlj
b250aW51ZTsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCQlpZiAocGFnZSA9PSBidWYpIHsN
CiAgICArCQkJYmVnaW5fcmVhY2hlZCA9IDE7DQogICAgKwkJCXJldHVybjsNCiAgICArCQl9DQog
ICAgKwkJcGFnZS0tOw0KICAgICsJCWRvIHsNCiAgICArCQkJaWYgKHBhZ2UgPT0gYnVmKSB7DQog
ICAgKwkJCQliZWdpbl9yZWFjaGVkID0gMTsNCiAgICArCQkJCXJldHVybjsNCiAgICArCQkJfQ0K
ICAgICsJCQlwYWdlLS07DQogICAgKwkJfSB3aGlsZSAoKnBhZ2UgIT0gJ1xuJyk7DQogICAgKwkJ
cGFnZSsrOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBQcmludCBh
IG5ldyBwYWdlIG9mIHRleHQuDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9wYWdl
KFdJTkRPVyAqd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIHVwZGF0ZV90ZXh0X2ZuDQogICAg
KwkJICAgICAgIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKQ0KICAgICt7DQogICAgKwlpbnQgaSwg
cGFzc2VkX2VuZCA9IDA7DQogICAgKw0KICAgICsJaWYgKHVwZGF0ZV90ZXh0KSB7DQogICAgKwkJ
Y2hhciAqZW5kOw0KICAgICsNCiAgICArCQlmb3IgKGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspDQog
ICAgKwkJCWdldF9saW5lKCk7DQogICAgKwkJZW5kID0gcGFnZTsNCiAgICArCQliYWNrX2xpbmVz
KGhlaWdodCk7DQogICAgKwkJdXBkYXRlX3RleHQoYnVmLCBwYWdlIC0gYnVmLCBlbmQgLSBidWYs
IGRhdGEpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXBhZ2VfbGVuZ3RoID0gMDsNCiAgICArCWZv
ciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgew0KICAgICsJCXByaW50X2xpbmUod2luLCBpLCB3
aWR0aCk7DQogICAgKwkJaWYgKCFwYXNzZWRfZW5kKQ0KICAgICsJCQlwYWdlX2xlbmd0aCsrOw0K
ICAgICsJCWlmIChlbmRfcmVhY2hlZCAmJiAhcGFzc2VkX2VuZCkNCiAgICArCQkJcGFzc2VkX2Vu
ZCA9IDE7DQogICAgKwl9DQogICAgKwl3bm91dHJlZnJlc2god2luKTsNCiAgICArfQ0KICAgICsN
CiAgICArLyoNCiAgICArICogUHJpbnQgYSBuZXcgbGluZSBvZiB0ZXh0Lg0KICAgICsgKi8NCiAg
ICArc3RhdGljIHZvaWQgcHJpbnRfbGluZShXSU5ET1cgKiB3aW4sIGludCByb3csIGludCB3aWR0
aCkNCiAgICArew0KICAgICsJY2hhciAqbGluZTsNCiAgICArDQogICAgKwlsaW5lID0gZ2V0X2xp
bmUoKTsNCiAgICArCWxpbmUgKz0gTUlOKHN0cmxlbihsaW5lKSwgaHNjcm9sbCk7CS8qIFNjcm9s
bCBob3Jpem9udGFsbHkgKi8NCiAgICArCXdtb3ZlKHdpbiwgcm93LCAwKTsJLyogbW92ZSBjdXJz
b3IgdG8gY29ycmVjdCBsaW5lICovDQogICAgKwl3YWRkY2god2luLCAnICcpOw0KICAgICsJd2Fk
ZG5zdHIod2luLCBsaW5lLCBNSU4oc3RybGVuKGxpbmUpLCB3aWR0aCAtIDIpKTsNCiAgICArDQog
ICAgKwkvKiBDbGVhciAncmVzaWR1ZScgb2YgcHJldmlvdXMgbGluZSAqLw0KICAgICsjaWYgT0xE
X05DVVJTRVMNCiAgICArCXsNCiAgICArCQlpbnQgeCA9IGdldGN1cngod2luKTsNCiAgICArCQlp
bnQgaTsNCiAgICArCQlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSB4OyBpKyspDQogICAgKwkJCXdh
ZGRjaCh3aW4sICcgJyk7DQogICAgKwl9DQogICAgKyNlbHNlDQogICAgKwl3Y2xydG9lb2wod2lu
KTsNCiAgICArI2VuZGlmDQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFJldHVybiBj
dXJyZW50IGxpbmUgb2YgdGV4dC4gQ2FsbGVkIGJ5IGRpYWxvZ190ZXh0Ym94KCkgYW5kIHByaW50
X2xpbmUoKS4NCiAgICArICogJ3BhZ2UnIHNob3VsZCBwb2ludCB0byBzdGFydCBvZiBjdXJyZW50
IGxpbmUgYmVmb3JlIGNhbGxpbmcsIGFuZCB3aWxsIGJlDQogICAgKyAqIHVwZGF0ZWQgdG8gcG9p
bnQgdG8gc3RhcnQgb2YgbmV4dCBsaW5lLg0KICAgICsgKi8NCiAgICArc3RhdGljIGNoYXIgKmdl
dF9saW5lKHZvaWQpDQogICAgK3sNCiAgICArCWludCBpID0gMDsNCiAgICArCXN0YXRpYyBjaGFy
IGxpbmVbTUFYX0xFTiArIDFdOw0KICAgICsNCiAgICArCWVuZF9yZWFjaGVkID0gMDsNCiAgICAr
CXdoaWxlICgqcGFnZSAhPSAnXG4nKSB7DQogICAgKwkJaWYgKCpwYWdlID09ICdcMCcpIHsNCiAg
ICArCQkJZW5kX3JlYWNoZWQgPSAxOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9IGVsc2UgaWYg
KGkgPCBNQVhfTEVOKQ0KICAgICsJCQlsaW5lW2krK10gPSAqKHBhZ2UrKyk7DQogICAgKwkJZWxz
ZSB7DQogICAgKwkJCS8qIFRydW5jYXRlIGxpbmVzIGxvbmdlciB0aGFuIE1BWF9MRU4gY2hhcmFj
dGVycyAqLw0KICAgICsJCQlpZiAoaSA9PSBNQVhfTEVOKQ0KICAgICsJCQkJbGluZVtpKytdID0g
J1wwJzsNCiAgICArCQkJcGFnZSsrOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWlmIChpIDw9
IE1BWF9MRU4pDQogICAgKwkJbGluZVtpXSA9ICdcMCc7DQogICAgKwlpZiAoIWVuZF9yZWFjaGVk
KQ0KICAgICsJCXBhZ2UrKzsJCS8qIG1vdmUgcGFzdCAnXG4nICovDQogICAgKw0KICAgICsJcmV0
dXJuIGxpbmU7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFByaW50IGN1cnJlbnQg
cG9zaXRpb24NCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIHByaW50X3Bvc2l0aW9uKFdJTkRP
VyAqIHdpbikNCiAgICArew0KICAgICsJaW50IHBlcmNlbnQ7DQogICAgKw0KICAgICsJd2F0dHJz
ZXQod2luLCBkbGcucG9zaXRpb25faW5kaWNhdG9yLmF0cik7DQogICAgKwl3YmtnZHNldCh3aW4s
IGRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyICYgQV9DT0xPUik7DQogICAgKwlwZXJjZW50ID0g
KHBhZ2UgLSBidWYpICogMTAwIC8gc3RybGVuKGJ1Zik7DQogICAgKwl3bW92ZSh3aW4sIGdldG1h
eHkod2luKSAtIDMsIGdldG1heHgod2luKSAtIDkpOw0KICAgICsJd3ByaW50dyh3aW4sICIoJTNk
JSUpIiwgcGVyY2VudCk7DQogICAgK30NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9seGRpYWxvZy91dGlsLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3V0aWwu
Yw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMWI0OTBkNA0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9n
L3V0aWwuYw0KICAgIEBAIC0wLDAgKzEsNzAwIEBADQogICAgKy8vIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wKw0KICAgICsvKg0KICAgICsgKiAgdXRpbC5jDQogICAgKyAqDQogICAg
KyAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQogICAg
KyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2Fw
IChyb2FkY2FwQGNmdy5jb20pDQogICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPHN0ZGFy
Zy5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgImRpYWxvZy5oIg0KICAgICsNCiAgICArLyogTmVl
ZGVkIGluIHNpZ25hbCBoYW5kbGVyIGluIG1jb25mLmMgKi8NCiAgICAraW50IHNhdmVkX3gsIHNh
dmVkX3k7DQogICAgKw0KICAgICtzdHJ1Y3QgZGlhbG9nX2luZm8gZGxnOw0KICAgICsNCiAgICAr
c3RhdGljIHZvaWQgc2V0X21vbm9fdGhlbWUodm9pZCkNCiAgICArew0KICAgICsJZGxnLnNjcmVl
bi5hdHIgPSBBX05PUk1BTDsNCiAgICArCWRsZy5zaGFkb3cuYXRyID0gQV9OT1JNQUw7DQogICAg
KwlkbGcuZGlhbG9nLmF0ciA9IEFfTk9STUFMOw0KICAgICsJZGxnLnRpdGxlLmF0ciA9IEFfQk9M
RDsNCiAgICArCWRsZy5ib3JkZXIuYXRyID0gQV9OT1JNQUw7DQogICAgKwlkbGcuYnV0dG9uX2Fj
dGl2ZS5hdHIgPSBBX1JFVkVSU0U7DQogICAgKwlkbGcuYnV0dG9uX2luYWN0aXZlLmF0ciA9IEFf
RElNOw0KICAgICsJZGxnLmJ1dHRvbl9rZXlfYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsNCiAgICAr
CWRsZy5idXR0b25fa2V5X2luYWN0aXZlLmF0ciA9IEFfQk9MRDsNCiAgICArCWRsZy5idXR0b25f
bGFiZWxfYWN0aXZlLmF0ciA9IEFfUkVWRVJTRTsNCiAgICArCWRsZy5idXR0b25fbGFiZWxfaW5h
Y3RpdmUuYXRyID0gQV9OT1JNQUw7DQogICAgKwlkbGcuaW5wdXRib3guYXRyID0gQV9OT1JNQUw7
DQogICAgKwlkbGcuaW5wdXRib3hfYm9yZGVyLmF0ciA9IEFfTk9STUFMOw0KICAgICsJZGxnLnNl
YXJjaGJveC5hdHIgPSBBX05PUk1BTDsNCiAgICArCWRsZy5zZWFyY2hib3hfdGl0bGUuYXRyID0g
QV9CT0xEOw0KICAgICsJZGxnLnNlYXJjaGJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7DQogICAg
KwlkbGcucG9zaXRpb25faW5kaWNhdG9yLmF0ciA9IEFfQk9MRDsNCiAgICArCWRsZy5tZW51Ym94
LmF0ciA9IEFfTk9STUFMOw0KICAgICsJZGxnLm1lbnVib3hfYm9yZGVyLmF0ciA9IEFfTk9STUFM
Ow0KICAgICsJZGxnLml0ZW0uYXRyID0gQV9OT1JNQUw7DQogICAgKwlkbGcuaXRlbV9zZWxlY3Rl
ZC5hdHIgPSBBX1JFVkVSU0U7DQogICAgKwlkbGcudGFnLmF0ciA9IEFfQk9MRDsNCiAgICArCWRs
Zy50YWdfc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOw0KICAgICsJZGxnLnRhZ19rZXkuYXRyID0g
QV9CT0xEOw0KICAgICsJZGxnLnRhZ19rZXlfc2VsZWN0ZWQuYXRyID0gQV9SRVZFUlNFOw0KICAg
ICsJZGxnLmNoZWNrLmF0ciA9IEFfQk9MRDsNCiAgICArCWRsZy5jaGVja19zZWxlY3RlZC5hdHIg
PSBBX1JFVkVSU0U7DQogICAgKwlkbGcudWFycm93LmF0ciA9IEFfQk9MRDsNCiAgICArCWRsZy5k
YXJyb3cuYXRyID0gQV9CT0xEOw0KICAgICt9DQogICAgKw0KICAgICsjZGVmaW5lIERMR19DT0xP
UihkaWFsb2csIGYsIGIsIGgpIFwNCiAgICArZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcDQogICAgKwlkbGcuZGlhbG9nLmZnID0gKGYpOyAgICAgICBcDQogICAgKwlkbGcuZGlh
bG9nLmJnID0gKGIpOyAgICAgICBcDQogICAgKwlkbGcuZGlhbG9nLmhsID0gKGgpOyAgICAgICBc
DQogICAgK30gd2hpbGUgKDApDQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBzZXRfY2xhc3NpY190
aGVtZSh2b2lkKQ0KICAgICt7DQogICAgKwlETEdfQ09MT1Ioc2NyZWVuLCAgICAgICAgICAgICAg
ICBDT0xPUl9DWUFOLCAgIENPTE9SX0JMVUUsICAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1Ioc2hh
ZG93LCAgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCAgdHJ1ZSk7DQog
ICAgKwlETEdfQ09MT1IoZGlhbG9nLCAgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9S
X1dISVRFLCAgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKHRpdGxlLCAgICAgICAgICAgICAgICAg
Q09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOw0KICAgICsJRExHX0NPTE9SKGJvcmRl
ciwgICAgICAgICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9XSElURSwgIHRydWUpOw0KICAg
ICsJRExHX0NPTE9SKGJ1dHRvbl9hY3RpdmUsICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9C
TFVFLCAgIHRydWUpOw0KICAgICsJRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwgICAgICAgQ09M
T1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsNCiAgICArCURMR19DT0xPUihidXR0b25f
a2V5X2FjdGl2ZSwgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICAr
CURMR19DT0xPUihidXR0b25fa2V5X2luYWN0aXZlLCAgIENPTE9SX1JFRCwgICAgQ09MT1JfV0hJ
VEUsICBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBDT0xP
Ul9ZRUxMT1csIENPTE9SX0JMVUUsICAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IoYnV0dG9uX2xh
YmVsX2luYWN0aXZlLCBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgKwlE
TEdfQ09MT1IoaW5wdXRib3gsICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRF
LCAgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGlucHV0Ym94X2JvcmRlciwgICAgICAgQ09MT1Jf
QkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsNCiAgICArCURMR19DT0xPUihzZWFyY2hib3gs
ICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7DQogICAgKwlE
TEdfQ09MT1Ioc2VhcmNoYm94X3RpdGxlLCAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRF
LCAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1Ioc2VhcmNoYm94X2JvcmRlciwgICAgICBDT0xPUl9X
SElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IocG9zaXRpb25faW5k
aWNhdG9yLCAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgKwlETEdf
Q09MT1IobWVudWJveCwgICAgICAgICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAg
ZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKG1lbnVib3hfYm9yZGVyLCAgICAgICAgQ09MT1JfV0hJ
VEUsICBDT0xPUl9XSElURSwgIHRydWUpOw0KICAgICsJRExHX0NPTE9SKGl0ZW0sICAgICAgICAg
ICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsNCiAgICArCURMR19D
T0xPUihpdGVtX3NlbGVjdGVkLCAgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0
cnVlKTsNCiAgICArCURMR19DT0xPUih0YWcsICAgICAgICAgICAgICAgICAgIENPTE9SX1lFTExP
VywgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICArCURMR19DT0xPUih0YWdfc2VsZWN0ZWQsICAg
ICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICArCURMR19DT0xP
Uih0YWdfa2V5LCAgICAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVl
KTsNCiAgICArCURMR19DT0xPUih0YWdfa2V5X3NlbGVjdGVkLCAgICAgIENPTE9SX1lFTExPVywg
Q09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICArCURMR19DT0xPUihjaGVjaywgICAgICAgICAgICAg
ICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7DQogICAgKwlETEdfQ09MT1Io
Y2hlY2tfc2VsZWN0ZWQsICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1ZSk7
DQogICAgKwlETEdfQ09MT1IodWFycm93LCAgICAgICAgICAgICAgICBDT0xPUl9HUkVFTiwgIENP
TE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IoZGFycm93LCAgICAgICAgICAgICAg
ICBDT0xPUl9HUkVFTiwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyB2b2lkIHNldF9ibGFja2JnX3RoZW1lKHZvaWQpDQogICAgK3sNCiAgICArCURMR19D
T0xPUihzY3JlZW4sIENPTE9SX1JFRCwgICBDT0xPUl9CTEFDSywgdHJ1ZSk7DQogICAgKwlETEdf
Q09MT1Ioc2hhZG93LCBDT0xPUl9CTEFDSywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICArCURM
R19DT0xPUihkaWFsb2csIENPTE9SX1dISVRFLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICsJ
RExHX0NPTE9SKHRpdGxlLCAgQ09MT1JfUkVELCAgIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAg
KwlETEdfQ09MT1IoYm9yZGVyLCBDT0xPUl9CTEFDSywgQ09MT1JfQkxBQ0ssIHRydWUpOw0KICAg
ICsNCiAgICArCURMR19DT0xPUihidXR0b25fYWN0aXZlLCAgICAgICAgIENPTE9SX1lFTExPVywg
Q09MT1JfUkVELCAgIGZhbHNlKTsNCiAgICArCURMR19DT0xPUihidXR0b25faW5hY3RpdmUsICAg
ICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICArCURMR19DT0xPUihi
dXR0b25fa2V5X2FjdGl2ZSwgICAgIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRydWUpOw0K
ICAgICsJRExHX0NPTE9SKGJ1dHRvbl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xP
Ul9CTEFDSywgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGJ1dHRvbl9sYWJlbF9hY3RpdmUsICAg
Q09MT1JfV0hJVEUsICBDT0xPUl9SRUQsICAgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGJ1dHRv
bl9sYWJlbF9pbmFjdGl2ZSwgQ09MT1JfQkxBQ0ssICBDT0xPUl9CTEFDSywgdHJ1ZSk7DQogICAg
Kw0KICAgICsJRExHX0NPTE9SKGlucHV0Ym94LCAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1Jf
QkxBQ0ssIGZhbHNlKTsNCiAgICArCURMR19DT0xPUihpbnB1dGJveF9ib3JkZXIsICBDT0xPUl9Z
RUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgKw0KICAgICsJRExHX0NPTE9SKHNlYXJj
aGJveCwgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICArCURM
R19DT0xPUihzZWFyY2hib3hfdGl0bGUsICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCB0cnVl
KTsNCiAgICArCURMR19DT0xPUihzZWFyY2hib3hfYm9yZGVyLCBDT0xPUl9CTEFDSywgIENPTE9S
X0JMQUNLLCB0cnVlKTsNCiAgICArDQogICAgKwlETEdfQ09MT1IocG9zaXRpb25faW5kaWNhdG9y
LCBDT0xPUl9SRUQsIENPTE9SX0JMQUNLLCAgZmFsc2UpOw0KICAgICsNCiAgICArCURMR19DT0xP
UihtZW51Ym94LCAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxzZSk7DQog
ICAgKwlETEdfQ09MT1IobWVudWJveF9ib3JkZXIsICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9CTEFD
SywgdHJ1ZSk7DQogICAgKw0KICAgICsJRExHX0NPTE9SKGl0ZW0sICAgICAgICAgICAgIENPTE9S
X1dISVRFLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGl0ZW1fc2VsZWN0
ZWQsICAgIENPTE9SX1dISVRFLCBDT0xPUl9SRUQsICAgZmFsc2UpOw0KICAgICsNCiAgICArCURM
R19DT0xPUih0YWcsICAgICAgICAgICAgICBDT0xPUl9SRUQsICAgIENPTE9SX0JMQUNLLCBmYWxz
ZSk7DQogICAgKwlETEdfQ09MT1IodGFnX3NlbGVjdGVkLCAgICAgQ09MT1JfWUVMTE9XLCBDT0xP
Ul9SRUQsICAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IodGFnX2tleSwgICAgICAgICAgQ09MT1Jf
UkVELCAgICBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKHRhZ19rZXlfc2Vs
ZWN0ZWQsIENPTE9SX1lFTExPVywgQ09MT1JfUkVELCAgIHRydWUpOw0KICAgICsNCiAgICArCURM
R19DT0xPUihjaGVjaywgICAgICAgICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX0JMQUNLLCBmYWxz
ZSk7DQogICAgKwlETEdfQ09MT1IoY2hlY2tfc2VsZWN0ZWQsICAgQ09MT1JfWUVMTE9XLCBDT0xP
Ul9SRUQsICAgdHJ1ZSk7DQogICAgKw0KICAgICsJRExHX0NPTE9SKHVhcnJvdywgQ09MT1JfUkVE
LCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGRhcnJvdywgQ09MT1JfUkVE
LCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBz
ZXRfYmx1ZXRpdGxlX3RoZW1lKHZvaWQpDQogICAgK3sNCiAgICArCXNldF9jbGFzc2ljX3RoZW1l
KCk7DQogICAgKwlETEdfQ09MT1IodGl0bGUsICAgICAgICAgICAgICAgQ09MT1JfQkxVRSwgICBD
T0xPUl9XSElURSwgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IoYnV0dG9uX2tleV9hY3RpdmUsICAg
Q09MT1JfWUVMTE9XLCBDT0xPUl9CTFVFLCAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IoYnV0dG9u
X2xhYmVsX2FjdGl2ZSwgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgdHJ1ZSk7DQogICAgKwlE
TEdfQ09MT1Ioc2VhcmNoYm94X3RpdGxlLCAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwg
dHJ1ZSk7DQogICAgKwlETEdfQ09MT1IocG9zaXRpb25faW5kaWNhdG9yLCAgQ09MT1JfQkxVRSwg
ICBDT0xPUl9XSElURSwgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IodGFnLCAgICAgICAgICAgICAg
ICAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IodGFn
X2tleSwgICAgICAgICAgICAgQ09MT1JfQkxVRSwgICBDT0xPUl9XSElURSwgdHJ1ZSk7DQogICAg
Kw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBTZWxlY3QgY29sb3IgdGhlbWUNCiAg
ICArICovDQogICAgK3N0YXRpYyBpbnQgc2V0X3RoZW1lKGNvbnN0IGNoYXIgKnRoZW1lKQ0KICAg
ICt7DQogICAgKwlpbnQgdXNlX2NvbG9yID0gMTsNCiAgICArCWlmICghdGhlbWUpDQogICAgKwkJ
c2V0X2JsdWV0aXRsZV90aGVtZSgpOw0KICAgICsJZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAiY2xh
c3NpYyIpID09IDApDQogICAgKwkJc2V0X2NsYXNzaWNfdGhlbWUoKTsNCiAgICArCWVsc2UgaWYg
KHN0cmNtcCh0aGVtZSwgImJsdWV0aXRsZSIpID09IDApDQogICAgKwkJc2V0X2JsdWV0aXRsZV90
aGVtZSgpOw0KICAgICsJZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAiYmxhY2tiZyIpID09IDApDQog
ICAgKwkJc2V0X2JsYWNrYmdfdGhlbWUoKTsNCiAgICArCWVsc2UgaWYgKHN0cmNtcCh0aGVtZSwg
Im1vbm8iKSA9PSAwKQ0KICAgICsJCXVzZV9jb2xvciA9IDA7DQogICAgKw0KICAgICsJcmV0dXJu
IHVzZV9jb2xvcjsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgaW5pdF9vbmVfY29s
b3Ioc3RydWN0IGRpYWxvZ19jb2xvciAqY29sb3IpDQogICAgK3sNCiAgICArCXN0YXRpYyBpbnQg
cGFpciA9IDA7DQogICAgKw0KICAgICsJcGFpcisrOw0KICAgICsJaW5pdF9wYWlyKHBhaXIsIGNv
bG9yLT5mZywgY29sb3ItPmJnKTsNCiAgICArCWlmIChjb2xvci0+aGwpDQogICAgKwkJY29sb3It
PmF0ciA9IEFfQk9MRCB8IENPTE9SX1BBSVIocGFpcik7DQogICAgKwllbHNlDQogICAgKwkJY29s
b3ItPmF0ciA9IENPTE9SX1BBSVIocGFpcik7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2
b2lkIGluaXRfZGlhbG9nX2NvbG9ycyh2b2lkKQ0KICAgICt7DQogICAgKwlpbml0X29uZV9jb2xv
cigmZGxnLnNjcmVlbik7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLnNoYWRvdyk7DQogICAg
Kwlpbml0X29uZV9jb2xvcigmZGxnLmRpYWxvZyk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxn
LnRpdGxlKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuYm9yZGVyKTsNCiAgICArCWluaXRf
b25lX2NvbG9yKCZkbGcuYnV0dG9uX2FjdGl2ZSk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxn
LmJ1dHRvbl9pbmFjdGl2ZSk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9rZXlf
YWN0aXZlKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2tleV9pbmFjdGl2ZSk7
DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9sYWJlbF9hY3RpdmUpOw0KICAgICsJ
aW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fbGFiZWxfaW5hY3RpdmUpOw0KICAgICsJaW5pdF9v
bmVfY29sb3IoJmRsZy5pbnB1dGJveCk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLmlucHV0
Ym94X2JvcmRlcik7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLnNlYXJjaGJveCk7DQogICAg
Kwlpbml0X29uZV9jb2xvcigmZGxnLnNlYXJjaGJveF90aXRsZSk7DQogICAgKwlpbml0X29uZV9j
b2xvcigmZGxnLnNlYXJjaGJveF9ib3JkZXIpOw0KICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy5w
b3NpdGlvbl9pbmRpY2F0b3IpOw0KICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy5tZW51Ym94KTsN
CiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcubWVudWJveF9ib3JkZXIpOw0KICAgICsJaW5pdF9v
bmVfY29sb3IoJmRsZy5pdGVtKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuaXRlbV9zZWxl
Y3RlZCk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZyk7DQogICAgKwlpbml0X29uZV9j
b2xvcigmZGxnLnRhZ19zZWxlY3RlZCk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZ19r
ZXkpOw0KICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy50YWdfa2V5X3NlbGVjdGVkKTsNCiAgICAr
CWluaXRfb25lX2NvbG9yKCZkbGcuY2hlY2spOw0KICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy5j
aGVja19zZWxlY3RlZCk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLnVhcnJvdyk7DQogICAg
Kwlpbml0X29uZV9jb2xvcigmZGxnLmRhcnJvdyk7DQogICAgK30NCiAgICArDQogICAgKy8qDQog
ICAgKyAqIFNldHVwIGZvciBjb2xvciBkaXNwbGF5DQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9p
ZCBjb2xvcl9zZXR1cChjb25zdCBjaGFyICp0aGVtZSkNCiAgICArew0KICAgICsJaW50IHVzZV9j
b2xvcjsNCiAgICArDQogICAgKwl1c2VfY29sb3IgPSBzZXRfdGhlbWUodGhlbWUpOw0KICAgICsJ
aWYgKHVzZV9jb2xvciAmJiBoYXNfY29sb3JzKCkpIHsNCiAgICArCQlzdGFydF9jb2xvcigpOw0K
ICAgICsJCWluaXRfZGlhbG9nX2NvbG9ycygpOw0KICAgICsJfSBlbHNlDQogICAgKwkJc2V0X21v
bm9fdGhlbWUoKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogU2V0IHdpbmRvdyB0
byBhdHRyaWJ1dGUgJ2F0dHInDQogICAgKyAqLw0KICAgICt2b2lkIGF0dHJfY2xlYXIoV0lORE9X
ICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGNodHlwZSBhdHRyKQ0KICAgICt7DQogICAg
KwlpbnQgaSwgajsNCiAgICArDQogICAgKwl3YXR0cnNldCh3aW4sIGF0dHIpOw0KICAgICsJZm9y
IChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7DQogICAgKwkJd21vdmUod2luLCBpLCAwKTsNCiAg
ICArCQlmb3IgKGogPSAwOyBqIDwgd2lkdGg7IGorKykNCiAgICArCQkJd2FkZGNoKHdpbiwgJyAn
KTsNCiAgICArCX0NCiAgICArCXRvdWNod2luKHdpbik7DQogICAgK30NCiAgICArDQogICAgK3Zv
aWQgZGlhbG9nX2NsZWFyKHZvaWQpDQogICAgK3sNCiAgICArCWludCBsaW5lcywgY29sdW1uczsN
CiAgICArDQogICAgKwlsaW5lcyA9IGdldG1heHkoc3Rkc2NyKTsNCiAgICArCWNvbHVtbnMgPSBn
ZXRtYXh4KHN0ZHNjcik7DQogICAgKw0KICAgICsJYXR0cl9jbGVhcihzdGRzY3IsIGxpbmVzLCBj
b2x1bW5zLCBkbGcuc2NyZWVuLmF0cik7DQogICAgKwkvKiBEaXNwbGF5IGJhY2tncm91bmQgdGl0
bGUgaWYgaXQgZXhpc3RzIC4uLiAtIFNMSCAqLw0KICAgICsJaWYgKGRsZy5iYWNrdGl0bGUgIT0g
TlVMTCkgew0KICAgICsJCWludCBpLCBsZW4gPSAwLCBza2lwID0gMDsNCiAgICArCQlzdHJ1Y3Qg
c3VidGl0bGVfbGlzdCAqcG9zOw0KICAgICsNCiAgICArCQl3YXR0cnNldChzdGRzY3IsIGRsZy5z
Y3JlZW4uYXRyKTsNCiAgICArCQltdndhZGRzdHIoc3Rkc2NyLCAwLCAxLCAoY2hhciAqKWRsZy5i
YWNrdGl0bGUpOw0KICAgICsNCiAgICArCQlmb3IgKHBvcyA9IGRsZy5zdWJ0aXRsZXM7IHBvcyAh
PSBOVUxMOyBwb3MgPSBwb3MtPm5leHQpIHsNCiAgICArCQkJLyogMyBpcyBmb3IgdGhlIGFycm93
IGFuZCBzcGFjZXMgKi8NCiAgICArCQkJbGVuICs9IHN0cmxlbihwb3MtPnRleHQpICsgMzsNCiAg
ICArCQl9DQogICAgKw0KICAgICsJCXdtb3ZlKHN0ZHNjciwgMSwgMSk7DQogICAgKwkJaWYgKGxl
biA+IGNvbHVtbnMgLSAyKSB7DQogICAgKwkJCWNvbnN0IGNoYXIgKmVsbGlwc2lzID0gIlsuLi5d
ICI7DQogICAgKwkJCXdhZGRzdHIoc3Rkc2NyLCBlbGxpcHNpcyk7DQogICAgKwkJCXNraXAgPSBs
ZW4gLSAoY29sdW1ucyAtIDIgLSBzdHJsZW4oZWxsaXBzaXMpKTsNCiAgICArCQl9DQogICAgKw0K
ICAgICsJCWZvciAocG9zID0gZGxnLnN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHBvcy0+
bmV4dCkgew0KICAgICsJCQlpZiAoc2tpcCA9PSAwKQ0KICAgICsJCQkJd2FkZGNoKHN0ZHNjciwg
QUNTX1JBUlJPVyk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCXNraXAtLTsNCiAgICArDQogICAg
KwkJCWlmIChza2lwID09IDApDQogICAgKwkJCQl3YWRkY2goc3Rkc2NyLCAnICcpOw0KICAgICsJ
CQllbHNlDQogICAgKwkJCQlza2lwLS07DQogICAgKw0KICAgICsJCQlpZiAoc2tpcCA8IHN0cmxl
bihwb3MtPnRleHQpKSB7DQogICAgKwkJCQl3YWRkc3RyKHN0ZHNjciwgcG9zLT50ZXh0ICsgc2tp
cCk7DQogICAgKwkJCQlza2lwID0gMDsNCiAgICArCQkJfSBlbHNlDQogICAgKwkJCQlza2lwIC09
IHN0cmxlbihwb3MtPnRleHQpOw0KICAgICsNCiAgICArCQkJaWYgKHNraXAgPT0gMCkNCiAgICAr
CQkJCXdhZGRjaChzdGRzY3IsICcgJyk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCXNraXAtLTsN
CiAgICArCQl9DQogICAgKw0KICAgICsJCWZvciAoaSA9IGxlbiArIDE7IGkgPCBjb2x1bW5zIC0g
MTsgaSsrKQ0KICAgICsJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfSExJTkUpOw0KICAgICsJfQ0KICAg
ICsJd25vdXRyZWZyZXNoKHN0ZHNjcik7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAq
IERvIHNvbWUgaW5pdGlhbGl6YXRpb24gZm9yIGRpYWxvZw0KICAgICsgKi8NCiAgICAraW50IGlu
aXRfZGlhbG9nKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSkNCiAgICArew0KICAgICsJaW50IGhlaWdo
dCwgd2lkdGg7DQogICAgKw0KICAgICsJaW5pdHNjcigpOwkJLyogSW5pdCBjdXJzZXMgKi8NCiAg
ICArDQogICAgKwkvKiBHZXQgY3VycmVudCBjdXJzb3IgcG9zaXRpb24gZm9yIHNpZ25hbCBoYW5k
bGVyIGluIG1jb25mLmMgKi8NCiAgICArCWdldHl4KHN0ZHNjciwgc2F2ZWRfeSwgc2F2ZWRfeCk7
DQogICAgKw0KICAgICsJZ2V0bWF4eXgoc3Rkc2NyLCBoZWlnaHQsIHdpZHRoKTsNCiAgICArCWlm
IChoZWlnaHQgPCBXSU5ET1dfSEVJR1RIX01JTiB8fCB3aWR0aCA8IFdJTkRPV19XSURUSF9NSU4p
IHsNCiAgICArCQllbmR3aW4oKTsNCiAgICArCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsN
CiAgICArCX0NCiAgICArDQogICAgKwlkbGcuYmFja3RpdGxlID0gYmFja3RpdGxlOw0KICAgICsJ
Y29sb3Jfc2V0dXAoZ2V0ZW52KCJNRU5VQ09ORklHX0NPTE9SIikpOw0KICAgICsNCiAgICArCWtl
eXBhZChzdGRzY3IsIFRSVUUpOw0KICAgICsJY2JyZWFrKCk7DQogICAgKwlub2VjaG8oKTsNCiAg
ICArCWRpYWxvZ19jbGVhcigpOw0KICAgICsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAg
Kw0KICAgICt2b2lkIHNldF9kaWFsb2dfYmFja3RpdGxlKGNvbnN0IGNoYXIgKmJhY2t0aXRsZSkN
CiAgICArew0KICAgICsJZGxnLmJhY2t0aXRsZSA9IGJhY2t0aXRsZTsNCiAgICArfQ0KICAgICsN
CiAgICArdm9pZCBzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3Vi
dGl0bGVzKQ0KICAgICt7DQogICAgKwlkbGcuc3VidGl0bGVzID0gc3VidGl0bGVzOw0KICAgICt9
DQogICAgKw0KICAgICsvKg0KICAgICsgKiBFbmQgdXNpbmcgZGlhbG9nIGZ1bmN0aW9ucy4NCiAg
ICArICovDQogICAgK3ZvaWQgZW5kX2RpYWxvZyhpbnQgeCwgaW50IHkpDQogICAgK3sNCiAgICAr
CS8qIG1vdmUgY3Vyc29yIGJhY2sgdG8gb3JpZ2luYWwgcG9zaXRpb24gKi8NCiAgICArCW1vdmUo
eSwgeCk7DQogICAgKwlyZWZyZXNoKCk7DQogICAgKwllbmR3aW4oKTsNCiAgICArfQ0KICAgICsN
CiAgICArLyogUHJpbnQgdGhlIHRpdGxlIG9mIHRoZSBkaWFsb2cuIENlbnRlciB0aGUgdGl0bGUg
YW5kIHRydW5jYXRlDQogICAgKyAqIHRpbGUgaWYgd2lkZXIgdGhhbiBkaWFsb2cgKC0gMiBjaGFy
cykuDQogICAgKyAqKi8NCiAgICArdm9pZCBwcmludF90aXRsZShXSU5ET1cgKmRpYWxvZywgY29u
c3QgY2hhciAqdGl0bGUsIGludCB3aWR0aCkNCiAgICArew0KICAgICsJaWYgKHRpdGxlKSB7DQog
ICAgKwkJaW50IHRsZW4gPSBNSU4od2lkdGggLSAyLCBzdHJsZW4odGl0bGUpKTsNCiAgICArCQl3
YXR0cnNldChkaWFsb2csIGRsZy50aXRsZS5hdHIpOw0KICAgICsJCW12d2FkZGNoKGRpYWxvZywg
MCwgKHdpZHRoIC0gdGxlbikgLyAyIC0gMSwgJyAnKTsNCiAgICArCQltdndhZGRuc3RyKGRpYWxv
ZywgMCwgKHdpZHRoIC0gdGxlbikvMiwgdGl0bGUsIHRsZW4pOw0KICAgICsJCXdhZGRjaChkaWFs
b2csICcgJyk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFByaW50
IGEgc3RyaW5nIG9mIHRleHQgaW4gYSB3aW5kb3csIGF1dG9tYXRpY2FsbHkgd3JhcCBhcm91bmQg
dG8gdGhlDQogICAgKyAqIG5leHQgbGluZSBpZiB0aGUgc3RyaW5nIGlzIHRvbyBsb25nIHRvIGZp
dCBvbiBvbmUgbGluZS4gTmV3bGluZQ0KICAgICsgKiBjaGFyYWN0ZXJzICdcbicgYXJlIHByb3Bw
ZXJseSBwcm9jZXNzZWQuICBXZSBzdGFydCBvbiBhIG5ldyBsaW5lDQogICAgKyAqIGlmIHRoZXJl
IGlzIG5vIHJvb20gZm9yIGF0IGxlYXN0IDQgbm9uYmxhbmtzIGZvbGxvd2luZyBhIGRvdWJsZS1z
cGFjZS4NCiAgICArICovDQogICAgK3ZvaWQgcHJpbnRfYXV0b3dyYXAoV0lORE9XICogd2luLCBj
b25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0aCwgaW50IHksIGludCB4KQ0KICAgICt7DQogICAg
KwlpbnQgbmV3bCwgY3VyX3gsIGN1cl95Ow0KICAgICsJaW50IHByb21wdF9sZW4sIHJvb20sIHds
ZW47DQogICAgKwljaGFyIHRlbXBzdHJbTUFYX0xFTiArIDFdLCAqd29yZCwgKnNwLCAqc3AyLCAq
bmV3bGluZV9zZXBhcmF0b3IgPSAwOw0KICAgICsNCiAgICArCXN0cmNweSh0ZW1wc3RyLCBwcm9t
cHQpOw0KICAgICsNCiAgICArCXByb21wdF9sZW4gPSBzdHJsZW4odGVtcHN0cik7DQogICAgKw0K
ICAgICsJaWYgKHByb21wdF9sZW4gPD0gd2lkdGggLSB4ICogMikgewkvKiBJZiBwcm9tcHQgaXMg
c2hvcnQgKi8NCiAgICArCQl3bW92ZSh3aW4sIHksICh3aWR0aCAtIHByb21wdF9sZW4pIC8gMik7
DQogICAgKwkJd2FkZHN0cih3aW4sIHRlbXBzdHIpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQlj
dXJfeCA9IHg7DQogICAgKwkJY3VyX3kgPSB5Ow0KICAgICsJCW5ld2wgPSAxOw0KICAgICsJCXdv
cmQgPSB0ZW1wc3RyOw0KICAgICsJCXdoaWxlICh3b3JkICYmICp3b3JkKSB7DQogICAgKwkJCXNw
ID0gc3RycGJyayh3b3JkLCAiXG4gIik7DQogICAgKwkJCWlmIChzcCAmJiAqc3AgPT0gJ1xuJykN
CiAgICArCQkJCW5ld2xpbmVfc2VwYXJhdG9yID0gc3A7DQogICAgKw0KICAgICsJCQlpZiAoc3Ap
DQogICAgKwkJCQkqc3ArKyA9IDA7DQogICAgKw0KICAgICsJCQkvKiBXcmFwIHRvIG5leHQgbGlu
ZSBpZiBlaXRoZXIgdGhlIHdvcmQgZG9lcyBub3QgZml0LA0KICAgICsJCQkgICBvciBpdCBpcyB0
aGUgZmlyc3Qgd29yZCBvZiBhIG5ldyBzZW50ZW5jZSwgYW5kIGl0IGlzDQogICAgKwkJCSAgIHNo
b3J0LCBhbmQgdGhlIG5leHQgd29yZCBkb2VzIG5vdCBmaXQuICovDQogICAgKwkJCXJvb20gPSB3
aWR0aCAtIGN1cl94Ow0KICAgICsJCQl3bGVuID0gc3RybGVuKHdvcmQpOw0KICAgICsJCQlpZiAo
d2xlbiA+IHJvb20gfHwNCiAgICArCQkJICAgIChuZXdsICYmIHdsZW4gPCA0ICYmIHNwDQogICAg
KwkJCSAgICAgJiYgd2xlbiArIDEgKyBzdHJsZW4oc3ApID4gcm9vbQ0KICAgICsJCQkgICAgICYm
ICghKHNwMiA9IHN0cnBicmsoc3AsICJcbiAiKSkNCiAgICArCQkJCSB8fCB3bGVuICsgMSArIChz
cDIgLSBzcCkgPiByb29tKSkpIHsNCiAgICArCQkJCWN1cl95Kys7DQogICAgKwkJCQljdXJfeCA9
IHg7DQogICAgKwkJCX0NCiAgICArCQkJd21vdmUod2luLCBjdXJfeSwgY3VyX3gpOw0KICAgICsJ
CQl3YWRkc3RyKHdpbiwgd29yZCk7DQogICAgKwkJCWdldHl4KHdpbiwgY3VyX3ksIGN1cl94KTsN
CiAgICArDQogICAgKwkJCS8qIE1vdmUgdG8gdGhlIG5leHQgbGluZSBpZiB0aGUgd29yZCBzZXBh
cmF0b3Igd2FzIGEgbmV3bGluZSAqLw0KICAgICsJCQlpZiAobmV3bGluZV9zZXBhcmF0b3IpIHsN
CiAgICArCQkJCWN1cl95Kys7DQogICAgKwkJCQljdXJfeCA9IHg7DQogICAgKwkJCQluZXdsaW5l
X3NlcGFyYXRvciA9IDA7DQogICAgKwkJCX0gZWxzZQ0KICAgICsJCQkJY3VyX3grKzsNCiAgICAr
DQogICAgKwkJCWlmIChzcCAmJiAqc3AgPT0gJyAnKSB7DQogICAgKwkJCQljdXJfeCsrOwkvKiBk
b3VibGUgc3BhY2UgKi8NCiAgICArCQkJCXdoaWxlICgqKytzcCA9PSAnICcpIDsNCiAgICArCQkJ
CW5ld2wgPSAxOw0KICAgICsJCQl9IGVsc2UNCiAgICArCQkJCW5ld2wgPSAwOw0KICAgICsJCQl3
b3JkID0gc3A7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAg
ICsgKiBQcmludCBhIGJ1dHRvbg0KICAgICsgKi8NCiAgICArdm9pZCBwcmludF9idXR0b24oV0lO
RE9XICogd2luLCBjb25zdCBjaGFyICpsYWJlbCwgaW50IHksIGludCB4LCBpbnQgc2VsZWN0ZWQp
DQogICAgK3sNCiAgICArCWludCBpLCB0ZW1wOw0KICAgICsNCiAgICArCXdtb3ZlKHdpbiwgeSwg
eCk7DQogICAgKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9hY3RpdmUuYXRy
DQogICAgKwkJIDogZGxnLmJ1dHRvbl9pbmFjdGl2ZS5hdHIpOw0KICAgICsJd2FkZHN0cih3aW4s
ICI8Iik7DQogICAgKwl0ZW1wID0gc3Ryc3BuKGxhYmVsLCAiICIpOw0KICAgICsJbGFiZWwgKz0g
dGVtcDsNCiAgICArCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2xhYmVsX2Fj
dGl2ZS5hdHINCiAgICArCQkgOiBkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlLmF0cik7DQogICAg
Kwlmb3IgKGkgPSAwOyBpIDwgdGVtcDsgaSsrKQ0KICAgICsJCXdhZGRjaCh3aW4sICcgJyk7DQog
ICAgKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9rZXlfYWN0aXZlLmF0cg0K
ICAgICsJCSA6IGRsZy5idXR0b25fa2V5X2luYWN0aXZlLmF0cik7DQogICAgKwl3YWRkY2god2lu
LCBsYWJlbFswXSk7DQogICAgKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLmJ1dHRvbl9s
YWJlbF9hY3RpdmUuYXRyDQogICAgKwkJIDogZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIp
Ow0KICAgICsJd2FkZHN0cih3aW4sIChjaGFyICopbGFiZWwgKyAxKTsNCiAgICArCXdhdHRyc2V0
KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2FjdGl2ZS5hdHINCiAgICArCQkgOiBkbGcuYnV0
dG9uX2luYWN0aXZlLmF0cik7DQogICAgKwl3YWRkc3RyKHdpbiwgIj4iKTsNCiAgICArCXdtb3Zl
KHdpbiwgeSwgeCArIHRlbXAgKyAxKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICog
RHJhdyBhIHJlY3Rhbmd1bGFyIGJveCB3aXRoIGxpbmUgZHJhd2luZyBjaGFyYWN0ZXJzDQogICAg
KyAqLw0KICAgICt2b2lkDQogICAgK2RyYXdfYm94KFdJTkRPVyAqIHdpbiwgaW50IHksIGludCB4
LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsDQogICAgKwkgY2h0eXBlIGJveCwgY2h0eXBlIGJvcmRl
cikNCiAgICArew0KICAgICsJaW50IGksIGo7DQogICAgKw0KICAgICsJd2F0dHJzZXQod2luLCAw
KTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgew0KICAgICsJCXdtb3ZlKHdp
biwgeSArIGksIHgpOw0KICAgICsJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQ0KICAgICsJ
CQlpZiAoIWkgJiYgIWopDQogICAgKwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfVUxDT1JO
RVIpOw0KICAgICsJCQllbHNlIGlmIChpID09IGhlaWdodCAtIDEgJiYgIWopDQogICAgKwkJCQl3
YWRkY2god2luLCBib3JkZXIgfCBBQ1NfTExDT1JORVIpOw0KICAgICsJCQllbHNlIGlmICghaSAm
JiBqID09IHdpZHRoIC0gMSkNCiAgICArCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19VUkNPUk5F
Uik7DQogICAgKwkJCWVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSAmJiBqID09IHdpZHRoIC0gMSkN
CiAgICArCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19MUkNPUk5FUik7DQogICAgKwkJCWVsc2Ug
aWYgKCFpKQ0KICAgICsJCQkJd2FkZGNoKHdpbiwgYm9yZGVyIHwgQUNTX0hMSU5FKTsNCiAgICAr
CQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxKQ0KICAgICsJCQkJd2FkZGNoKHdpbiwgYm94IHwg
QUNTX0hMSU5FKTsNCiAgICArCQkJZWxzZSBpZiAoIWopDQogICAgKwkJCQl3YWRkY2god2luLCBi
b3JkZXIgfCBBQ1NfVkxJTkUpOw0KICAgICsJCQllbHNlIGlmIChqID09IHdpZHRoIC0gMSkNCiAg
ICArCQkJCXdhZGRjaCh3aW4sIGJveCB8IEFDU19WTElORSk7DQogICAgKwkJCWVsc2UNCiAgICAr
CQkJCXdhZGRjaCh3aW4sIGJveCB8ICcgJyk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAg
Ky8qDQogICAgKyAqIERyYXcgc2hhZG93cyBhbG9uZyB0aGUgcmlnaHQgYW5kIGJvdHRvbSBlZGdl
IHRvIGdpdmUgYSBtb3JlIDNEIGxvb2sNCiAgICArICogdG8gdGhlIGJveGVzDQogICAgKyAqLw0K
ICAgICt2b2lkIGRyYXdfc2hhZG93KFdJTkRPVyAqIHdpbiwgaW50IHksIGludCB4LCBpbnQgaGVp
Z2h0LCBpbnQgd2lkdGgpDQogICAgK3sNCiAgICArCWludCBpOw0KICAgICsNCiAgICArCWlmICho
YXNfY29sb3JzKCkpIHsJLyogV2hldGhlciB0ZXJtaW5hbCBzdXBwb3J0cyBjb2xvcj8gKi8NCiAg
ICArCQl3YXR0cnNldCh3aW4sIGRsZy5zaGFkb3cuYXRyKTsNCiAgICArCQl3bW92ZSh3aW4sIHkg
KyBoZWlnaHQsIHggKyAyKTsNCiAgICArCQlmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykNCiAg
ICArCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQpOw0KICAgICsJCWZvciAo
aSA9IHkgKyAxOyBpIDwgeSArIGhlaWdodCArIDE7IGkrKykgew0KICAgICsJCQl3bW92ZSh3aW4s
IGksIHggKyB3aWR0aCk7DQogICAgKwkJCXdhZGRjaCh3aW4sIHdpbmNoKHdpbikgJiBBX0NIQVJU
RVhUKTsNCiAgICArCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQpOw0KICAg
ICsJCX0NCiAgICArCQl3bm91dHJlZnJlc2god2luKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsN
CiAgICArLyoNCiAgICArICogIFJldHVybiB0aGUgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGFscGhh
YmV0aWMgY2hhcmFjdGVyIGluIGEgc3RyaW5nLg0KICAgICsgKi8NCiAgICAraW50IGZpcnN0X2Fs
cGhhKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZXhlbXB0KQ0KICAgICt7DQogICAg
KwlpbnQgaSwgaW5fcGFyZW4gPSAwLCBjOw0KICAgICsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBz
dHJsZW4oc3RyaW5nKTsgaSsrKSB7DQogICAgKwkJYyA9IHRvbG93ZXIoc3RyaW5nW2ldKTsNCiAg
ICArDQogICAgKwkJaWYgKHN0cmNocigiPFsoIiwgYykpDQogICAgKwkJCSsraW5fcGFyZW47DQog
ICAgKwkJaWYgKHN0cmNocigiPl0pIiwgYykgJiYgaW5fcGFyZW4gPiAwKQ0KICAgICsJCQktLWlu
X3BhcmVuOw0KICAgICsNCiAgICArCQlpZiAoKCFpbl9wYXJlbikgJiYgaXNhbHBoYShjKSAmJiBz
dHJjaHIoZXhlbXB0LCBjKSA9PSAwKQ0KICAgICsJCQlyZXR1cm4gaTsNCiAgICArCX0NCiAgICAr
DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogbmN1cnNl
cyB1c2VzIEVTQyB0byBkZXRlY3QgZXNjYXBlZCBjaGFyIHNlcXVlbmNlcy4gVGhpcyByZXN1dGwg
aW4NCiAgICArICogYSBzbWFsbCB0aW1lb3V0IGJlZm9yZSBFU0MgaXMgYWN0dWFsbHkgZGVsaXZl
cmVkIHRvIHRoZSBhcHBsaWNhdGlvbi4NCiAgICArICogbHhkaWFsb2cgc3VnZ2VzdCA8RVNDPiA8
RVNDPiB3aGljaCBpcyBjb3JyZWN0bHkgdHJhbnNsYXRlZCB0byB0d28NCiAgICArICogdGltZXMg
ZXNjLiBCdXQgdGhlbiB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIGVzYyB0byBhdm9pZCBz
dGVwcGluZw0KICAgICsgKiBvdXQgb25lIG1lbnUgdG9vIG11Y2guIEZpbHRlciBhd2F5IGFsbCBl
c2NhcGVkIGtleSBzZXF1ZW5jZXMgc2luY2UNCiAgICArICoga2V5cGFkKEZBTFNFKSB0dXJuIG9m
ZiBuY3Vyc2VzIHN1cHBvcnQgZm9yIGVzY2FwZSBzZXF1ZW5jZXMgLSBhbmQgdGhhdHMNCiAgICAr
ICogbmVlZGVkIHRvIG1ha2Ugbm90aW1lb3V0KCkgZG8gYXMgZXhwZWN0ZWQuDQogICAgKyAqLw0K
ICAgICtpbnQgb25fa2V5X2VzYyhXSU5ET1cgKndpbikNCiAgICArew0KICAgICsJaW50IGtleTsN
CiAgICArCWludCBrZXkyOw0KICAgICsJaW50IGtleTM7DQogICAgKw0KICAgICsJbm9kZWxheSh3
aW4sIFRSVUUpOw0KICAgICsJa2V5cGFkKHdpbiwgRkFMU0UpOw0KICAgICsJa2V5ID0gd2dldGNo
KHdpbik7DQogICAgKwlrZXkyID0gd2dldGNoKHdpbik7DQogICAgKwlkbyB7DQogICAgKwkJa2V5
MyA9IHdnZXRjaCh3aW4pOw0KICAgICsJfSB3aGlsZSAoa2V5MyAhPSBFUlIpOw0KICAgICsJbm9k
ZWxheSh3aW4sIEZBTFNFKTsNCiAgICArCWtleXBhZCh3aW4sIFRSVUUpOw0KICAgICsJaWYgKGtl
eSA9PSBLRVlfRVNDICYmIGtleTIgPT0gRVJSKQ0KICAgICsJCXJldHVybiBLRVlfRVNDOw0KICAg
ICsJZWxzZSBpZiAoa2V5ICE9IEVSUiAmJiBrZXkgIT0gS0VZX0VTQyAmJiBrZXkyID09IEVSUikN
CiAgICArCQl1bmdldGNoKGtleSk7DQogICAgKw0KICAgICsJcmV0dXJuIC0xOw0KICAgICt9DQog
ICAgKw0KICAgICsvKiByZWRyYXcgc2NyZWVuIGluIG5ldyBzaXplICovDQogICAgK2ludCBvbl9r
ZXlfcmVzaXplKHZvaWQpDQogICAgK3sNCiAgICArCWRpYWxvZ19jbGVhcigpOw0KICAgICsJcmV0
dXJuIEtFWV9SRVNJWkU7DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBkaWFsb2dfbGlzdCAq
aXRlbV9jdXI7DQogICAgK3N0cnVjdCBkaWFsb2dfbGlzdCBpdGVtX25pbDsNCiAgICArc3RydWN0
IGRpYWxvZ19saXN0ICppdGVtX2hlYWQ7DQogICAgKw0KICAgICt2b2lkIGl0ZW1fcmVzZXQodm9p
ZCkNCiAgICArew0KICAgICsJc3RydWN0IGRpYWxvZ19saXN0ICpwLCAqbmV4dDsNCiAgICArDQog
ICAgKwlmb3IgKHAgPSBpdGVtX2hlYWQ7IHA7IHAgPSBuZXh0KSB7DQogICAgKwkJbmV4dCA9IHAt
Pm5leHQ7DQogICAgKwkJZnJlZShwKTsNCiAgICArCX0NCiAgICArCWl0ZW1faGVhZCA9IE5VTEw7
DQogICAgKwlpdGVtX2N1ciA9ICZpdGVtX25pbDsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBp
dGVtX21ha2UoY29uc3QgY2hhciAqZm10LCAuLi4pDQogICAgK3sNCiAgICArCXZhX2xpc3QgYXA7
DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnAgPSBtYWxsb2Moc2l6ZW9mKCpwKSk7DQogICAg
Kw0KICAgICsJaWYgKGl0ZW1faGVhZCkNCiAgICArCQlpdGVtX2N1ci0+bmV4dCA9IHA7DQogICAg
KwllbHNlDQogICAgKwkJaXRlbV9oZWFkID0gcDsNCiAgICArCWl0ZW1fY3VyID0gcDsNCiAgICAr
CW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsNCiAgICArDQogICAgKwl2YV9zdGFydChhcCwgZm10
KTsNCiAgICArCXZzbnByaW50ZihpdGVtX2N1ci0+bm9kZS5zdHIsIHNpemVvZihpdGVtX2N1ci0+
bm9kZS5zdHIpLCBmbXQsIGFwKTsNCiAgICArCXZhX2VuZChhcCk7DQogICAgK30NCiAgICArDQog
ICAgK3ZvaWQgaXRlbV9hZGRfc3RyKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgICt7DQogICAg
Kwl2YV9saXN0IGFwOw0KICAgICsJc2l6ZV90IGF2YWlsOw0KICAgICsNCiAgICArCWF2YWlsID0g
c2l6ZW9mKGl0ZW1fY3VyLT5ub2RlLnN0cikgLSBzdHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKTsN
CiAgICArDQogICAgKwl2YV9zdGFydChhcCwgZm10KTsNCiAgICArCXZzbnByaW50ZihpdGVtX2N1
ci0+bm9kZS5zdHIgKyBzdHJsZW4oaXRlbV9jdXItPm5vZGUuc3RyKSwNCiAgICArCQkgIGF2YWls
LCBmbXQsIGFwKTsNCiAgICArCWl0ZW1fY3VyLT5ub2RlLnN0cltzaXplb2YoaXRlbV9jdXItPm5v
ZGUuc3RyKSAtIDFdID0gJ1wwJzsNCiAgICArCXZhX2VuZChhcCk7DQogICAgK30NCiAgICArDQog
ICAgK3ZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKQ0KICAgICt7DQogICAgKwlpdGVtX2N1ci0+
bm9kZS50YWcgPSB0YWc7DQogICAgK30NCiAgICArdm9pZCBpdGVtX3NldF9kYXRhKHZvaWQgKnB0
cikNCiAgICArew0KICAgICsJaXRlbV9jdXItPm5vZGUuZGF0YSA9IHB0cjsNCiAgICArfQ0KICAg
ICsNCiAgICArdm9pZCBpdGVtX3NldF9zZWxlY3RlZChpbnQgdmFsKQ0KICAgICt7DQogICAgKwlp
dGVtX2N1ci0+bm9kZS5zZWxlY3RlZCA9IHZhbDsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGl0
ZW1fYWN0aXZhdGVfc2VsZWN0ZWQodm9pZCkNCiAgICArew0KICAgICsJaXRlbV9mb3JlYWNoKCkN
CiAgICArCQlpZiAoaXRlbV9pc19zZWxlY3RlZCgpKQ0KICAgICsJCQlyZXR1cm4gMTsNCiAgICAr
CXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkICppdGVtX2RhdGEodm9pZCkNCiAg
ICArew0KICAgICsJcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLmRhdGE7DQogICAgK30NCiAgICArDQog
ICAgK2NoYXIgaXRlbV90YWcodm9pZCkNCiAgICArew0KICAgICsJcmV0dXJuIGl0ZW1fY3VyLT5u
b2RlLnRhZzsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGl0ZW1fY291bnQodm9pZCkNCiAgICAr
ew0KICAgICsJaW50IG4gPSAwOw0KICAgICsJc3RydWN0IGRpYWxvZ19saXN0ICpwOw0KICAgICsN
CiAgICArCWZvciAocCA9IGl0ZW1faGVhZDsgcDsgcCA9IHAtPm5leHQpDQogICAgKwkJbisrOw0K
ICAgICsJcmV0dXJuIG47DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgaXRlbV9zZXQoaW50IG4p
DQogICAgK3sNCiAgICArCWludCBpID0gMDsNCiAgICArCWl0ZW1fZm9yZWFjaCgpDQogICAgKwkJ
aWYgKGkrKyA9PSBuKQ0KICAgICsJCQlyZXR1cm47DQogICAgK30NCiAgICArDQogICAgK2ludCBp
dGVtX24odm9pZCkNCiAgICArew0KICAgICsJaW50IG4gPSAwOw0KICAgICsJc3RydWN0IGRpYWxv
Z19saXN0ICpwOw0KICAgICsNCiAgICArCWZvciAocCA9IGl0ZW1faGVhZDsgcDsgcCA9IHAtPm5l
eHQpIHsNCiAgICArCQlpZiAocCA9PSBpdGVtX2N1cikNCiAgICArCQkJcmV0dXJuIG47DQogICAg
KwkJbisrOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK2Nv
bnN0IGNoYXIgKml0ZW1fc3RyKHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiBpdGVtX2N1ci0+
bm9kZS5zdHI7DQogICAgK30NCiAgICArDQogICAgK2ludCBpdGVtX2lzX3NlbGVjdGVkKHZvaWQp
DQogICAgK3sNCiAgICArCXJldHVybiAoaXRlbV9jdXItPm5vZGUuc2VsZWN0ZWQgIT0gMCk7DQog
ICAgK30NCiAgICArDQogICAgK2ludCBpdGVtX2lzX3RhZyhjaGFyIHRhZykNCiAgICArew0KICAg
ICsJcmV0dXJuIChpdGVtX2N1ci0+bm9kZS50YWcgPT0gdGFnKTsNCiAgICArfQ0KICAgIGRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3llc25vLmMgYi9zdXBwb3J0L2tj
b25maWcubmV3L2x4ZGlhbG9nL3llc25vLmMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAg
IGluZGV4IDAwMDAwMDAuLmJjYWFjOWINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNuby5jDQogICAgQEAgLTAsMCArMSwxMDEgQEAN
CiAgICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQogICAgKy8qDQogICAg
KyAqICB5ZXNuby5jIC0tIGltcGxlbWVudHMgdGhlIHllcy9ubyBib3gNCiAgICArICoNCiAgICAr
ICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykNCiAgICAr
ICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAg
KHJvYWRjYXBAY2Z3LmNvbSkNCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSAiZGlhbG9n
LmgiDQogICAgKw0KICAgICsvKg0KICAgICsgKiBEaXNwbGF5IHRlcm1pbmF0aW9uIGJ1dHRvbnMN
CiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9n
LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkNCiAgICArew0KICAgICsJaW50
IHggPSB3aWR0aCAvIDIgLSAxMDsNCiAgICArCWludCB5ID0gaGVpZ2h0IC0gMjsNCiAgICArDQog
ICAgKwlwcmludF9idXR0b24oZGlhbG9nLCAiIFllcyAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsN
CiAgICArCXByaW50X2J1dHRvbihkaWFsb2csICIgIE5vICAiLCB5LCB4ICsgMTMsIHNlbGVjdGVk
ID09IDEpOw0KICAgICsNCiAgICArCXdtb3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxMyAqIHNlbGVj
dGVkKTsNCiAgICArCXdyZWZyZXNoKGRpYWxvZyk7DQogICAgK30NCiAgICArDQogICAgKy8qDQog
ICAgKyAqIERpc3BsYXkgYSBkaWFsb2cgYm94IHdpdGggdHdvIGJ1dHRvbnMgLSBZZXMgYW5kIE5v
DQogICAgKyAqLw0KICAgICtpbnQgZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25z
dCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCkNCiAgICArew0KICAgICsJaW50
IGksIHgsIHksIGtleSA9IDAsIGJ1dHRvbiA9IDA7DQogICAgKwlXSU5ET1cgKmRpYWxvZzsNCiAg
ICArDQogICAgK2RvX3Jlc2l6ZToNCiAgICArCWlmIChnZXRtYXh5KHN0ZHNjcikgPCAoaGVpZ2h0
ICsgWUVTTk9fSEVJR1RIX01JTikpDQogICAgKwkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7
DQogICAgKwlpZiAoZ2V0bWF4eChzdGRzY3IpIDwgKHdpZHRoICsgWUVTTk9fV0lEVEhfTUlOKSkN
CiAgICArCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICArDQogICAgKwkvKiBjZW50
ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICArCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0g
d2lkdGgpIC8gMjsNCiAgICArCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7DQog
ICAgKw0KICAgICsJZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsNCiAg
ICArDQogICAgKwlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7DQogICAgKwlr
ZXlwYWQoZGlhbG9nLCBUUlVFKTsNCiAgICArDQogICAgKwlkcmF3X2JveChkaWFsb2csIDAsIDAs
IGhlaWdodCwgd2lkdGgsDQogICAgKwkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7
DQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsNCiAgICArCW12d2FkZGNo
KGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0KICAgICsJZm9yIChpID0gMDsgaSA8
IHdpZHRoIC0gMjsgaSsrKQ0KICAgICsJCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7DQogICAg
Kwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICArCXdhZGRjaChkaWFsb2cs
IEFDU19SVEVFKTsNCiAgICArDQogICAgKwlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0
aCk7DQogICAgKw0KICAgICsJd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQogICAg
KwlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsNCiAgICAr
DQogICAgKwlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgKw0K
ICAgICsJd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7DQogICAgKwkJa2V5ID0gd2dldGNoKGRpYWxv
Zyk7DQogICAgKwkJc3dpdGNoIChrZXkpIHsNCiAgICArCQljYXNlICdZJzoNCiAgICArCQljYXNl
ICd5JzoNCiAgICArCQkJZGVsd2luKGRpYWxvZyk7DQogICAgKwkJCXJldHVybiAwOw0KICAgICsJ
CWNhc2UgJ04nOg0KICAgICsJCWNhc2UgJ24nOg0KICAgICsJCQlkZWx3aW4oZGlhbG9nKTsNCiAg
ICArCQkJcmV0dXJuIDE7DQogICAgKw0KICAgICsJCWNhc2UgVEFCOg0KICAgICsJCWNhc2UgS0VZ
X0xFRlQ6DQogICAgKwkJY2FzZSBLRVlfUklHSFQ6DQogICAgKwkJCWJ1dHRvbiA9ICgoa2V5ID09
IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKSA/IDEgOiAoYnV0dG9uID4gMSA/
IDAgOiBidXR0b24pOw0KICAgICsNCiAgICArCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdo
dCwgd2lkdGgsIGJ1dHRvbik7DQogICAgKwkJCXdyZWZyZXNoKGRpYWxvZyk7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgJyAnOg0KICAgICsJCWNhc2UgJ1xuJzoNCiAgICArCQkJZGVsd2lu
KGRpYWxvZyk7DQogICAgKwkJCXJldHVybiBidXR0b247DQogICAgKwkJY2FzZSBLRVlfRVNDOg0K
ICAgICsJCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CWNhc2UgS0VZX1JFU0laRToNCiAgICArCQkJZGVsd2luKGRpYWxvZyk7DQogICAgKwkJCW9uX2tl
eV9yZXNpemUoKTsNCiAgICArCQkJZ290byBkb19yZXNpemU7DQogICAgKwkJfQ0KICAgICsJfQ0K
ICAgICsNCiAgICArCWRlbHdpbihkaWFsb2cpOw0KICAgICsJcmV0dXJuIGtleTsJCS8qIEVTQyBw
cmVzc2VkICovDQogICAgK30NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9t
Y29uZi1jZmcuc2ggYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaA0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDAwMDAwMC4uYzgxMjg3Mg0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaA0KICAgIEBA
IC0wLDAgKzEsNDcgQEANCiAgICArIyEvYmluL3NoDQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjANCiAgICArDQogICAgK1BLRz0ibmN1cnNlc3ciDQogICAgK1BLRzI9Im5j
dXJzZXMiDQogICAgKw0KICAgICtpZiBbIC1uICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07
IHRoZW4NCiAgICArCWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzsgdGhlbg0KICAgICsJCWVj
aG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cpXCINCiAgICArCQllY2hvIGxp
YnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCINCiAgICArCQlleGl0IDANCiAgICArCWZp
DQogICAgKw0KICAgICsJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHMjsgdGhlbg0KICAgICsJ
CWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiDQogICAgKwkJZWNo
byBsaWJzPVwiJChwa2ctY29uZmlnIC0tbGlicyAkUEtHMilcIg0KICAgICsJCWV4aXQgMA0KICAg
ICsJZmkNCiAgICArZmkNCiAgICArDQogICAgKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4g
Y2FzZSBwa2ctY29uZmlnIGlzIG5vdCBpbnN0YWxsZWQuDQogICAgKyMgKEV2ZW4gaWYgaXQgaXMg
aW5zdGFsbGVkLCBzb21lIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyBvcGVuU1VTRSBjYW5ub3QNCiAg
ICArIyBmaW5kIG5jdXJzZXMgYnkgcGtnLWNvbmZpZy4pDQogICAgK2lmIFsgLWYgL3Vzci9pbmNs
dWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuDQogICAgKwllY2hvIGNmbGFncz1cIi1EX0dO
VV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3dcIg0KICAgICsJZWNobyBsaWJzPVwiLWxu
Y3Vyc2Vzd1wiDQogICAgKwlleGl0IDANCiAgICArZmkNCiAgICArDQogICAgK2lmIFsgLWYgL3Vz
ci9pbmNsdWRlL25jdXJzZXMvbmN1cnNlcy5oIF07IHRoZW4NCiAgICArCWVjaG8gY2ZsYWdzPVwi
LURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzXCINCiAgICArCWVjaG8gbGlicz1c
Ii1sbmN1cnNlc1wiDQogICAgKwlleGl0IDANCiAgICArZmkNCiAgICArDQogICAgK2lmIFsgLWYg
L3Vzci9pbmNsdWRlL25jdXJzZXMuaCBdOyB0aGVuDQogICAgKwllY2hvIGNmbGFncz1cIi1EX0dO
VV9TT1VSQ0VcIg0KICAgICsJZWNobyBsaWJzPVwiLWxuY3Vyc2VzXCINCiAgICArCWV4aXQgMA0K
ICAgICtmaQ0KICAgICsNCiAgICArZWNobyA+JjIgIioiDQogICAgK2VjaG8gPiYyICIqIFVuYWJs
ZSB0byBmaW5kIHRoZSBuY3Vyc2VzIHBhY2thZ2UuIg0KICAgICtlY2hvID4mMiAiKiBJbnN0YWxs
IG5jdXJzZXMgKG5jdXJzZXMtZGV2ZWwgb3IgbGlibmN1cnNlcy1kZXYiDQogICAgK2VjaG8gPiYy
ICIqIGRlcGVuZGluZyBvbiB5b3VyIGRpc3RyaWJ1dGlvbikuIg0KICAgICtlY2hvID4mMiAiKiIN
CiAgICArZXhpdCAxDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYu
YyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgaW5kZXggMDAwMDAwMC4uNjk0MDkxZg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMNCiAgICBAQCAtMCwwICsxLDEwMzkgQEANCiAg
ICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArLyoNCiAgICArICog
Q29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0K
ICAgICsgKg0KICAgICsgKiBJbnRyb2R1Y2VkIHNpbmdsZSBtZW51IG1vZGUgKHNob3cgYWxsIHN1
Yi1tZW51cyBpbiBvbmUgbGFyZ2UgdHJlZSkuDQogICAgKyAqIDIwMDItMTEtMDYgUGV0ciBCYXVk
aXMgPHBhc2t5QHVjdy5jej4NCiAgICArICoNCiAgICArICogaTE4biwgMjAwNSwgQXJuYWxkbyBD
YXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+DQogICAgKyAqLw0KICAgICsN
CiAgICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKyNpbmNsdWRlIDxlcnJuby5oPg0KICAgICsj
aW5jbHVkZSA8ZmNudGwuaD4NCiAgICArI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgICsjaW5jbHVk
ZSA8c3RkYXJnLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0
cmluZy5oPg0KICAgICsjaW5jbHVkZSA8c2lnbmFsLmg+DQogICAgKyNpbmNsdWRlIDx1bmlzdGQu
aD4NCiAgICArDQogICAgKyNpbmNsdWRlICJsa2MuaCINCiAgICArI2luY2x1ZGUgImx4ZGlhbG9n
L2RpYWxvZy5oIg0KICAgICsNCiAgICArc3RhdGljIGNvbnN0IGNoYXIgbWNvbmZfcmVhZG1lW10g
PQ0KICAgICsiT3ZlcnZpZXdcbiINCiAgICArIi0tLS0tLS0tXG4iDQogICAgKyJUaGlzIGludGVy
ZmFjZSBsZXRzIHlvdSBzZWxlY3QgZmVhdHVyZXMgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBidWls
ZC5cbiINCiAgICArIkZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVk
LCBvciBpZ25vcmVkLiBQYXJhbWV0ZXJzXG4iDQogICAgKyJtdXN0IGJlIGVudGVyZWQgaW4gYXMg
ZGVjaW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzIG9yIHRleHQuXG4iDQogICAgKyJcbiINCiAg
ICArIk1lbnUgaXRlbXMgYmVnaW5uaW5nIHdpdGggZm9sbG93aW5nIGJyYWNlcyByZXByZXNlbnQg
ZmVhdHVyZXMgdGhhdFxuIg0KICAgICsiICBbIF0gY2FuIGJlIGJ1aWx0IGluIG9yIHJlbW92ZWRc
biINCiAgICArIiAgPCA+IGNhbiBiZSBidWlsdCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3ZlZFxu
Ig0KICAgICsiICB7IH0gY2FuIGJlIGJ1aWx0IGluIG9yIG1vZHVsYXJpemVkIChzZWxlY3RlZCBi
eSBvdGhlciBmZWF0dXJlKVxuIg0KICAgICsiICAtIC0gYXJlIHNlbGVjdGVkIGJ5IG90aGVyIGZl
YXR1cmUsXG4iDQogICAgKyJ3aGlsZSAqLCBNIG9yIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNlcyBt
ZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXNcbiINCiAgICArImEgbW9kdWxlIG9yIHRvIGV4Y2x1
ZGUgdGhlIGZlYXR1cmUgcmVzcGVjdGl2ZWx5LlxuIg0KICAgICsiXG4iDQogICAgKyJUbyBjaGFu
Z2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQgd2l0aCB0aGUgY3Vyc29yXG4i
DQogICAgKyJrZXlzIGFuZCBwcmVzcyA8WT4gdG8gYnVpbGQgaXQgaW4sIDxNPiB0byBtYWtlIGl0
IGEgbW9kdWxlIG9yXG4iDQogICAgKyI8Tj4gdG8gcmVtb3ZlIGl0LiAgWW91IG1heSBhbHNvIHBy
ZXNzIHRoZSA8U3BhY2UgQmFyPiB0byBjeWNsZVxuIg0KICAgICsidGhyb3VnaCB0aGUgYXZhaWxh
YmxlIG9wdGlvbnMgKGkuZS4gWS0+Ti0+TS0+WSkuXG4iDQogICAgKyJcbiINCiAgICArIlNvbWUg
YWRkaXRpb25hbCBrZXlib2FyZCBoaW50czpcbiINCiAgICArIlxuIg0KICAgICsiTWVudXNcbiIN
CiAgICArIi0tLS0tLS0tLS1cbiINCiAgICArIm8gIFVzZSB0aGUgVXAvRG93biBhcnJvdyBrZXlz
IChjdXJzb3Iga2V5cykgdG8gaGlnaGxpZ2h0IHRoZSBpdGVtIHlvdVxuIg0KICAgICsiICAgd2lz
aCB0byBjaGFuZ2Ugb3IgdGhlIHN1Ym1lbnUgeW91IHdpc2ggdG8gc2VsZWN0IGFuZCBwcmVzcyA8
RW50ZXI+LlxuIg0KICAgICsiICAgU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgXCItLS0+XCIs
IGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iDQogICAgKyJcbiINCiAgICArIiAgIFNob3J0Y3V0
OiBQcmVzcyB0aGUgb3B0aW9uJ3MgaGlnaGxpZ2h0ZWQgbGV0dGVyIChob3RrZXkpLlxuIg0KICAg
ICsiICAgICAgICAgICAgIFByZXNzaW5nIGEgaG90a2V5IG1vcmUgdGhhbiBvbmNlIHdpbGwgc2Vx
dWVuY2VcbiINCiAgICArIiAgICAgICAgICAgICB0aHJvdWdoIGFsbCB2aXNpYmxlIGl0ZW1zIHdo
aWNoIHVzZSB0aGF0IGhvdGtleS5cbiINCiAgICArIlxuIg0KICAgICsiICAgWW91IG1heSBhbHNv
IHVzZSB0aGUgPFBBR0UgVVA+IGFuZCA8UEFHRSBET1dOPiBrZXlzIHRvIHNjcm9sbFxuIg0KICAg
ICsiICAgdW5zZWVuIG9wdGlvbnMgaW50byB2aWV3LlxuIg0KICAgICsiXG4iDQogICAgKyJvICBU
byBleGl0IGEgbWVudSB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCB0aGUgPEV4aXQ+
IGJ1dHRvblxuIg0KICAgICsiICAgYW5kIHByZXNzIDxFTlRFUj4uXG4iDQogICAgKyJcbiINCiAg
ICArIiAgIFNob3J0Y3V0OiBQcmVzcyA8RVNDPjxFU0M+IG9yIDxFPiBvciA8WD4gaWYgdGhlcmUg
aXMgbm8gaG90a2V5XG4iDQogICAgKyIgICAgICAgICAgICAgdXNpbmcgdGhvc2UgbGV0dGVycy4g
IFlvdSBtYXkgcHJlc3MgYSBzaW5nbGUgPEVTQz4sIGJ1dFxuIg0KICAgICsiICAgICAgICAgICAg
IHRoZXJlIGlzIGEgZGVsYXllZCByZXNwb25zZSB3aGljaCB5b3UgbWF5IGZpbmQgYW5ub3lpbmcu
XG4iDQogICAgKyJcbiINCiAgICArIiAgIEFsc28sIHRoZSA8VEFCPiBhbmQgY3Vyc29yIGtleXMg
d2lsbCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+LFxuIg0KICAgICsiICAgPEV4aXQ+LCA8SGVscD4s
IDxTYXZlPiwgYW5kIDxMb2FkPi5cbiINCiAgICArIlxuIg0KICAgICsibyAgVG8gZ2V0IGhlbHAg
d2l0aCBhbiBpdGVtLCB1c2UgdGhlIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCA8SGVscD5cbiIN
CiAgICArIiAgIGFuZCBwcmVzcyA8RU5URVI+LlxuIg0KICAgICsiXG4iDQogICAgKyIgICBTaG9y
dGN1dDogUHJlc3MgPEg+IG9yIDw/Pi5cbiINCiAgICArIlxuIg0KICAgICsibyAgVG8gdG9nZ2xl
IHRoZSBkaXNwbGF5IG9mIGhpZGRlbiBvcHRpb25zLCBwcmVzcyA8Wj4uXG4iDQogICAgKyJcbiIN
CiAgICArIlxuIg0KICAgICsiUmFkaW9saXN0cyAgKENob2ljZSBsaXN0cylcbiINCiAgICArIi0t
LS0tLS0tLS0tXG4iDQogICAgKyJvICBVc2UgdGhlIGN1cnNvciBrZXlzIHRvIHNlbGVjdCB0aGUg
b3B0aW9uIHlvdSB3aXNoIHRvIHNldCBhbmQgcHJlc3NcbiINCiAgICArIiAgIDxTPiBvciB0aGUg
PFNQQUNFIEJBUj4uXG4iDQogICAgKyJcbiINCiAgICArIiAgIFNob3J0Y3V0OiBQcmVzcyB0aGUg
Zmlyc3QgbGV0dGVyIG9mIHRoZSBvcHRpb24geW91IHdpc2ggdG8gc2V0IHRoZW5cbiINCiAgICAr
IiAgICAgICAgICAgICBwcmVzcyA8Uz4gb3IgPFNQQUNFIEJBUj4uXG4iDQogICAgKyJcbiINCiAg
ICArIm8gIFRvIHNlZSBhdmFpbGFibGUgaGVscCBmb3IgdGhlIGl0ZW0sIHVzZSB0aGUgY3Vyc29y
IGtleXMgdG8gaGlnaGxpZ2h0XG4iDQogICAgKyIgICA8SGVscD4gYW5kIFByZXNzIDxFTlRFUj4u
XG4iDQogICAgKyJcbiINCiAgICArIiAgIFNob3J0Y3V0OiBQcmVzcyA8SD4gb3IgPD8+LlxuIg0K
ICAgICsiXG4iDQogICAgKyIgICBBbHNvLCB0aGUgPFRBQj4gYW5kIGN1cnNvciBrZXlzIHdpbGwg
Y3ljbGUgYmV0d2VlbiA8U2VsZWN0PiBhbmRcbiINCiAgICArIiAgIDxIZWxwPlxuIg0KICAgICsi
XG4iDQogICAgKyJcbiINCiAgICArIkRhdGEgRW50cnlcbiINCiAgICArIi0tLS0tLS0tLS0tXG4i
DQogICAgKyJvICBFbnRlciB0aGUgcmVxdWVzdGVkIGluZm9ybWF0aW9uIGFuZCBwcmVzcyA8RU5U
RVI+XG4iDQogICAgKyIgICBJZiB5b3UgYXJlIGVudGVyaW5nIGhleGFkZWNpbWFsIHZhbHVlcywg
aXQgaXMgbm90IG5lY2Vzc2FyeSB0b1xuIg0KICAgICsiICAgYWRkIHRoZSAnMHgnIHByZWZpeCB0
byB0aGUgZW50cnkuXG4iDQogICAgKyJcbiINCiAgICArIm8gIEZvciBoZWxwLCB1c2UgdGhlIDxU
QUI+IG9yIGN1cnNvciBrZXlzIHRvIGhpZ2hsaWdodCB0aGUgaGVscCBvcHRpb25cbiINCiAgICAr
IiAgIGFuZCBwcmVzcyA8RU5URVI+LiAgWW91IGNhbiB0cnkgPFRBQj48SD4gYXMgd2VsbC5cbiIN
CiAgICArIlxuIg0KICAgICsiXG4iDQogICAgKyJUZXh0IEJveCAgICAoSGVscCBXaW5kb3cpXG4i
DQogICAgKyItLS0tLS0tLVxuIg0KICAgICsibyAgVXNlIHRoZSBjdXJzb3Iga2V5cyB0byBzY3Jv
bGwgdXAvZG93bi9sZWZ0L3JpZ2h0LiAgVGhlIFZJIGVkaXRvclxuIg0KICAgICsiICAga2V5cyBo
LGosayxsIGZ1bmN0aW9uIGhlcmUgYXMgZG8gPHU+LCA8ZD4sIDxTUEFDRSBCQVI+IGFuZCA8Qj4g
Zm9yXG4iDQogICAgKyIgICB0aG9zZSB3aG8gYXJlIGZhbWlsaWFyIHdpdGggbGVzcyBhbmQgbHlu
eC5cbiINCiAgICArIlxuIg0KICAgICsibyAgUHJlc3MgPEU+LCA8WD4sIDxxPiwgPEVudGVyPiBv
ciA8RXNjPjxFc2M+IHRvIGV4aXQuXG4iDQogICAgKyJcbiINCiAgICArIlxuIg0KICAgICsiQWx0
ZXJuYXRlIENvbmZpZ3VyYXRpb24gRmlsZXNcbiINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tXG4iDQogICAgKyJNZW51Y29uZmlnIHN1cHBvcnRzIHRoZSB1c2Ugb2YgYWx0ZXJu
YXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yXG4iDQogICAgKyJ0aG9zZSB3aG8sIGZvciB2YXJp
b3VzIHJlYXNvbnMsIGZpbmQgaXQgbmVjZXNzYXJ5IHRvIHN3aXRjaFxuIg0KICAgICsiYmV0d2Vl
biBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iDQogICAgKyJcbiINCiAgICArIlRoZSA8U2F2
ZT4gYnV0dG9uIHdpbGwgbGV0IHlvdSBzYXZlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gdG9c
biINCiAgICArImEgZmlsZSBvZiB5b3VyIGNob29zaW5nLiAgVXNlIHRoZSA8TG9hZD4gYnV0dG9u
IHRvIGxvYWQgYSBwcmV2aW91c2x5XG4iDQogICAgKyJzYXZlZCBhbHRlcm5hdGUgY29uZmlndXJh
dGlvbi5cbiINCiAgICArIlxuIg0KICAgICsiRXZlbiBpZiB5b3UgZG9uJ3QgdXNlIGFsdGVybmF0
ZSBjb25maWd1cmF0aW9uIGZpbGVzLCBidXQgeW91IGZpbmRcbiINCiAgICArImR1cmluZyBhIE1l
bnVjb25maWcgc2Vzc2lvbiB0aGF0IHlvdSBoYXZlIGNvbXBsZXRlbHkgbWVzc2VkIHVwIHlvdXJc
biINCiAgICArInNldHRpbmdzLCB5b3UgbWF5IHVzZSB0aGUgPExvYWQ+IGJ1dHRvbiB0byByZXN0
b3JlIHlvdXIgcHJldmlvdXNseVxuIg0KICAgICsic2F2ZWQgc2V0dGluZ3MgZnJvbSBcIi5jb25m
aWdcIiB3aXRob3V0IHJlc3RhcnRpbmcgTWVudWNvbmZpZy5cbiINCiAgICArIlxuIg0KICAgICsi
T3RoZXIgaW5mb3JtYXRpb25cbiINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgKyJJ
ZiB5b3UgdXNlIE1lbnVjb25maWcgaW4gYW4gWFRFUk0gd2luZG93LCBtYWtlIHN1cmUgeW91IGhh
dmUgeW91clxuIg0KICAgICsiJFRFUk0gdmFyaWFibGUgc2V0IHRvIHBvaW50IHRvIGFuIHh0ZXJt
IGRlZmluaXRpb24gd2hpY2ggc3VwcG9ydHNcbiINCiAgICArImNvbG9yLiAgT3RoZXJ3aXNlLCBN
ZW51Y29uZmlnIHdpbGwgbG9vayByYXRoZXIgYmFkLiAgTWVudWNvbmZpZyB3aWxsXG4iDQogICAg
KyJub3QgZGlzcGxheSBjb3JyZWN0bHkgaW4gYW4gUlhWVCB3aW5kb3cgYmVjYXVzZSByeHZ0IGRp
c3BsYXlzIG9ubHkgb25lXG4iDQogICAgKyJpbnRlbnNpdHkgb2YgY29sb3IsIGJyaWdodC5cbiIN
CiAgICArIlxuIg0KICAgICsiTWVudWNvbmZpZyB3aWxsIGRpc3BsYXkgbGFyZ2VyIG1lbnVzIG9u
IHNjcmVlbnMgb3IgeHRlcm1zIHdoaWNoIGFyZVxuIg0KICAgICsic2V0IHRvIGRpc3BsYXkgbW9y
ZSB0aGFuIHRoZSBzdGFuZGFyZCAyNSByb3cgYnkgODAgY29sdW1uIGdlb21ldHJ5LlxuIg0KICAg
ICsiSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yaywgdGhlIFwic3R0eSBzaXplXCIgY29tbWFuZCBt
dXN0IGJlIGFibGUgdG9cbiINCiAgICArImRpc3BsYXkgdGhlIHNjcmVlbidzIGN1cnJlbnQgcm93
IGFuZCBjb2x1bW4gZ2VvbWV0cnkuICBJIFNUUk9OR0xZXG4iDQogICAgKyJSRUNPTU1FTkQgdGhh
dCB5b3UgbWFrZSBzdXJlIHlvdSBkbyBOT1QgaGF2ZSB0aGUgc2hlbGwgdmFyaWFibGVzXG4iDQog
ICAgKyJMSU5FUyBhbmQgQ09MVU1OUyBleHBvcnRlZCBpbnRvIHlvdXIgZW52aXJvbm1lbnQuICBT
b21lIGRpc3RyaWJ1dGlvbnNcbiINCiAgICArImV4cG9ydCB0aG9zZSB2YXJpYWJsZXMgdmlhIC9l
dGMvcHJvZmlsZS4gIFNvbWUgbmN1cnNlcyBwcm9ncmFtcyBjYW5cbiINCiAgICArImJlY29tZSBj
b25mdXNlZCB3aGVuIHRob3NlIHZhcmlhYmxlcyAoTElORVMgJiBDT0xVTU5TKSBkb24ndCByZWZs
ZWN0XG4iDQogICAgKyJ0aGUgdHJ1ZSBzY3JlZW4gc2l6ZS5cbiINCiAgICArIlxuIg0KICAgICsi
T3B0aW9uYWwgcGVyc29uYWxpdHkgYXZhaWxhYmxlXG4iDQogICAgKyItLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiINCiAgICArIklmIHlvdSBwcmVmZXIgdG8gaGF2ZSBhbGwgb2YgdGhl
IG9wdGlvbnMgbGlzdGVkIGluIGEgc2luZ2xlIG1lbnUsXG4iDQogICAgKyJyYXRoZXIgdGhhbiB0
aGUgZGVmYXVsdCBtdWx0aW1lbnUgaGllcmFyY2h5LCBydW4gdGhlIG1lbnVjb25maWcgd2l0aFxu
Ig0KICAgICsiTUVOVUNPTkZJR19NT0RFIGVudmlyb25tZW50IHZhcmlhYmxlIHNldCB0byBzaW5n
bGVfbWVudS4gRXhhbXBsZTpcbiINCiAgICArIlxuIg0KICAgICsibWFrZSBNRU5VQ09ORklHX01P
REU9c2luZ2xlX21lbnUgbWVudWNvbmZpZ1xuIg0KICAgICsiXG4iDQogICAgKyI8RW50ZXI+IHdp
bGwgdGhlbiB1bnJvbGwgdGhlIGFwcHJvcHJpYXRlIGNhdGVnb3J5LCBvciBlbmZvbGQgaXQgaWYg
aXRcbiINCiAgICArImlzIGFscmVhZHkgdW5yb2xsZWQuXG4iDQogICAgKyJcbiINCiAgICArIk5v
dGUgdGhhdCB0aGlzIG1vZGUgY2FuIGV2ZW50dWFsbHkgYmUgYSBsaXR0bGUgbW9yZSBDUFUgZXhw
ZW5zaXZlXG4iDQogICAgKyIoZXNwZWNpYWxseSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiB1bnJv
bGxlZCBjYXRlZ29yaWVzKSB0aGFuIHRoZVxuIg0KICAgICsiZGVmYXVsdCBtb2RlLlxuIg0KICAg
ICsiXG4iDQogICAgKyJEaWZmZXJlbnQgY29sb3IgdGhlbWVzIGF2YWlsYWJsZVxuIg0KICAgICsi
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArIkl0IGlzIHBvc3NpYmxl
IHRvIHNlbGVjdCBkaWZmZXJlbnQgY29sb3IgdGhlbWVzIHVzaW5nIHRoZSB2YXJpYWJsZVxuIg0K
ICAgICsiTUVOVUNPTkZJR19DT0xPUi4gVG8gc2VsZWN0IGEgdGhlbWUgdXNlOlxuIg0KICAgICsi
XG4iDQogICAgKyJtYWtlIE1FTlVDT05GSUdfQ09MT1I9PHRoZW1lPiBtZW51Y29uZmlnXG4iDQog
ICAgKyJcbiINCiAgICArIkF2YWlsYWJsZSB0aGVtZXMgYXJlXG4iDQogICAgKyIgbW9ubyAgICAg
ICA9PiBzZWxlY3RzIGNvbG9ycyBzdWl0YWJsZSBmb3IgbW9ub2Nocm9tZSBkaXNwbGF5c1xuIg0K
ICAgICsiIGJsYWNrYmcgICAgPT4gc2VsZWN0cyBhIGNvbG9yIHNjaGVtZSB3aXRoIGJsYWNrIGJh
Y2tncm91bmRcbiINCiAgICArIiBjbGFzc2ljICAgID0+IHRoZW1lIHdpdGggYmx1ZSBiYWNrZ3Jv
dW5kLiBUaGUgY2xhc3NpYyBsb29rXG4iDQogICAgKyIgYmx1ZXRpdGxlICA9PiBhbiBMQ0QgZnJp
ZW5kbHkgdmVyc2lvbiBvZiBjbGFzc2ljLiAoZGVmYXVsdClcbiINCiAgICArIlxuIiwNCiAgICAr
bWVudV9pbnN0cnVjdGlvbnNbXSA9DQogICAgKwkiQXJyb3cga2V5cyBuYXZpZ2F0ZSB0aGUgbWVu
dS4gICINCiAgICArCSI8RW50ZXI+IHNlbGVjdHMgc3VibWVudXMgLS0tPiAob3IgZW1wdHkgc3Vi
bWVudXMgLS0tLSkuICAiDQogICAgKwkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5cy4g
ICINCiAgICArCSJQcmVzc2luZyA8WT4gaW5jbHVkZXMsIDxOPiBleGNsdWRlcywgPE0+IG1vZHVs
YXJpemVzIGZlYXR1cmVzLiAgIg0KICAgICsJIlByZXNzIDxFc2M+PEVzYz4gdG8gZXhpdCwgPD8+
IGZvciBIZWxwLCA8Lz4gZm9yIFNlYXJjaC4gICINCiAgICArCSJMZWdlbmQ6IFsqXSBidWlsdC1p
biAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFibGUiLA0KICAgICty
YWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQ0KICAgICsJIlVzZSB0aGUgYXJyb3cga2V5cyB0byBu
YXZpZ2F0ZSB0aGlzIHdpbmRvdyBvciAiDQogICAgKwkicHJlc3MgdGhlIGhvdGtleSBvZiB0aGUg
aXRlbSB5b3Ugd2lzaCB0byBzZWxlY3QgIg0KICAgICsJImZvbGxvd2VkIGJ5IHRoZSA8U1BBQ0Ug
QkFSPi4gIg0KICAgICsJIlByZXNzIDw/PiBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91
dCB0aGlzIG9wdGlvbi4iLA0KICAgICtpbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50W10gPQ0KICAg
ICsJIlBsZWFzZSBlbnRlciBhIGRlY2ltYWwgdmFsdWUuICINCiAgICArCSJGcmFjdGlvbnMgd2ls
bCBub3QgYmUgYWNjZXB0ZWQuICAiDQogICAgKwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBm
cm9tIHRoZSBpbnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4iLA0KICAgICtpbnB1
dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQ0KICAgICsJIlBsZWFzZSBlbnRlciBhIGhleGFkZWNp
bWFsIHZhbHVlLiAiDQogICAgKwkiVXNlIHRoZSA8VEFCPiBrZXkgdG8gbW92ZSBmcm9tIHRoZSBp
bnB1dCBmaWVsZCB0byB0aGUgYnV0dG9ucyBiZWxvdyBpdC4iLA0KICAgICtpbnB1dGJveF9pbnN0
cnVjdGlvbnNfc3RyaW5nW10gPQ0KICAgICsJIlBsZWFzZSBlbnRlciBhIHN0cmluZyB2YWx1ZS4g
Ig0KICAgICsJIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1vdmUgZnJvbSB0aGUgaW5wdXQgZmllbGQg
dG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiwNCiAgICArc2V0bW9kX3RleHRbXSA9DQogICAgKwki
VGhpcyBmZWF0dXJlIGRlcGVuZHMgb24gYW5vdGhlciB3aGljaCBoYXMgYmVlbiBjb25maWd1cmVk
IGFzIGEgbW9kdWxlLlxuIg0KICAgICsJIkFzIGEgcmVzdWx0LCB0aGlzIGZlYXR1cmUgd2lsbCBi
ZSBidWlsdCBhcyBhIG1vZHVsZS4iLA0KICAgICtsb2FkX2NvbmZpZ190ZXh0W10gPQ0KICAgICsJ
IkVudGVyIHRoZSBuYW1lIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgeW91IHdpc2ggdG8gbG9h
ZC4gICINCiAgICArCSJBY2NlcHQgdGhlIG5hbWUgc2hvd24gdG8gcmVzdG9yZSB0aGUgY29uZmln
dXJhdGlvbiB5b3UgIg0KICAgICsJImxhc3QgcmV0cmlldmVkLiAgTGVhdmUgYmxhbmsgdG8gYWJv
cnQuIiwNCiAgICArbG9hZF9jb25maWdfaGVscFtdID0NCiAgICArCSJcbiINCiAgICArCSJGb3Ig
dmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxu
Ig0KICAgICsJImNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxu
Ig0KICAgICsJIlxuIg0KICAgICsJIklmIHlvdSBoYXZlIHNhdmVkIGEgcHJldmlvdXMgY29uZmln
dXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhhbiB0aGVcbiINCiAgICArCSJkZWZhdWx0IG9uZSwg
ZW50ZXJpbmcgaXRzIG5hbWUgaGVyZSB3aWxsIGFsbG93IHlvdSB0byBtb2RpZnkgdGhhdFxuIg0K
ICAgICsJImNvbmZpZ3VyYXRpb24uXG4iDQogICAgKwkiXG4iDQogICAgKwkiSWYgeW91IGFyZSB1
bmNlcnRhaW4sIHRoZW4geW91IGhhdmUgcHJvYmFibHkgbmV2ZXIgdXNlZCBhbHRlcm5hdGVcbiIN
CiAgICArCSJjb25maWd1cmF0aW9uIGZpbGVzLiBZb3Ugc2hvdWxkIHRoZXJlZm9yZSBsZWF2ZSB0
aGlzIGJsYW5rIHRvIGFib3J0LlxuIiwNCiAgICArc2F2ZV9jb25maWdfdGV4dFtdID0NCiAgICAr
CSJFbnRlciBhIGZpbGVuYW1lIHRvIHdoaWNoIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUg
c2F2ZWQgIg0KICAgICsJImFzIGFuIGFsdGVybmF0ZS4gIExlYXZlIGJsYW5rIHRvIGFib3J0LiIs
DQogICAgK3NhdmVfY29uZmlnX2hlbHBbXSA9DQogICAgKwkiXG4iDQogICAgKwkiRm9yIHZhcmlv
dXMgcmVhc29ucywgb25lIG1heSB3aXNoIHRvIGtlZXAgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb25z
XG4iDQogICAgKwkiYXZhaWxhYmxlIG9uIGEgc2luZ2xlIG1hY2hpbmUuXG4iDQogICAgKwkiXG4i
DQogICAgKwkiRW50ZXJpbmcgYSBmaWxlIG5hbWUgaGVyZSB3aWxsIGFsbG93IHlvdSB0byBsYXRl
ciByZXRyaWV2ZSwgbW9kaWZ5XG4iDQogICAgKwkiYW5kIHVzZSB0aGUgY3VycmVudCBjb25maWd1
cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0ZXZlclxuIg0KICAgICsJImNvbmZpZ3VyYXRp
b24gb3B0aW9ucyB5b3UgaGF2ZSBzZWxlY3RlZCBhdCB0aGF0IHRpbWUuXG4iDQogICAgKwkiXG4i
DQogICAgKwkiSWYgeW91IGFyZSB1bmNlcnRhaW4gd2hhdCBhbGwgdGhpcyBtZWFucyB0aGVuIHlv
dSBzaG91bGQgcHJvYmFibHlcbiINCiAgICArCSJsZWF2ZSB0aGlzIGJsYW5rLlxuIiwNCiAgICAr
c2VhcmNoX2hlbHBbXSA9DQogICAgKwkiXG4iDQogICAgKwkiU2VhcmNoIGZvciBzeW1ib2xzIGFu
ZCBkaXNwbGF5IHRoZWlyIHJlbGF0aW9ucy5cbiINCiAgICArCSJSZWd1bGFyIGV4cHJlc3Npb25z
IGFyZSBhbGxvd2VkLlxuIg0KICAgICsJIkV4YW1wbGU6IHNlYXJjaCBmb3IgXCJeRk9PXCJcbiIN
CiAgICArCSJSZXN1bHQ6XG4iDQogICAgKwkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArCSJTeW1ib2w6IEZP
TyBbPW1dXG4iDQogICAgKwkiVHlwZSAgOiB0cmlzdGF0ZVxuIg0KICAgICsJIlByb21wdDogRm9v
IGJ1cyBpcyB1c2VkIHRvIGRyaXZlIHRoZSBiYXIgSFdcbiINCiAgICArCSIgIExvY2F0aW9uOlxu
Ig0KICAgICsJIiAgICAtPiBCdXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSlcbiIN
CiAgICArCSIgICAgICAtPiBQQ0kgc3VwcG9ydCAoUENJIFs9eV0pXG4iDQogICAgKwkiKDEpICAg
ICAtPiBQQ0kgYWNjZXNzIG1vZGUgKDxjaG9pY2U+IFs9eV0pXG4iDQogICAgKwkiICBEZWZpbmVk
IGF0IGRyaXZlcnMvcGNpL0tjb25maWc6NDdcbiINCiAgICArCSIgIERlcGVuZHMgb246IFg4Nl9M
T0NBTF9BUElDICYmIFg4Nl9JT19BUElDIHx8IElBNjRcbiINCiAgICArCSIgIFNlbGVjdHM6IExJ
QkNSQzMyXG4iDQogICAgKwkiICBTZWxlY3RlZCBieTogQkFSIFs9bl1cbiINCiAgICArCSItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIg0KICAgICsJIm8gVGhlIGxpbmUgJ1R5cGU6JyBzaG93cyB0aGUgdHlwZSBvZiB0aGUg
Y29uZmlndXJhdGlvbiBvcHRpb24gZm9yXG4iDQogICAgKwkiICB0aGlzIHN5bWJvbCAoYm9vbCwg
dHJpc3RhdGUsIHN0cmluZywgLi4uKVxuIg0KICAgICsJIm8gVGhlIGxpbmUgJ1Byb21wdDonIHNo
b3dzIHRoZSB0ZXh0IHVzZWQgaW4gdGhlIG1lbnUgc3RydWN0dXJlIGZvclxuIg0KICAgICsJIiAg
dGhpcyBzeW1ib2xcbiINCiAgICArCSJvIFRoZSAnRGVmaW5lZCBhdCcgbGluZSB0ZWxscyBhdCB3
aGF0IGZpbGUgLyBsaW5lIG51bWJlciB0aGUgc3ltYm9sXG4iDQogICAgKwkiICBpcyBkZWZpbmVk
XG4iDQogICAgKwkibyBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyBu
ZWVkIHRvIGJlIGRlZmluZWQgZm9yXG4iDQogICAgKwkiICB0aGlzIHN5bWJvbCB0byBiZSB2aXNp
YmxlIGluIHRoZSBtZW51IChzZWxlY3RhYmxlKVxuIg0KICAgICsJIm8gVGhlICdMb2NhdGlvbjon
IGxpbmVzIHRlbGxzIHdoZXJlIGluIHRoZSBtZW51IHN0cnVjdHVyZSB0aGlzIHN5bWJvbFxuIg0K
ICAgICsJIiAgaXMgbG9jYXRlZFxuIg0KICAgICsJIiAgICBBIGxvY2F0aW9uIGZvbGxvd2VkIGJ5
IGEgWz15XSBpbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIGFcbiINCiAgICArCSIgICAgc2VsZWN0YWJs
ZSBtZW51IGl0ZW0gLSBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgZGlzcGxheWVkIGluc2lkZVxu
Ig0KICAgICsJIiAgICBicmFja2V0cy5cbiINCiAgICArCSIgICAgUHJlc3MgdGhlIGtleSBpbiB0
aGUgKCMpIHByZWZpeCB0byBqdW1wIGRpcmVjdGx5IHRvIHRoYXRcbiINCiAgICArCSIgICAgbG9j
YXRpb24uIFlvdSB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBjdXJyZW50IHNlYXJjaCByZXN1bHRz
XG4iDQogICAgKwkiICAgIGFmdGVyIGV4aXRpbmcgdGhpcyBuZXcgbWVudS5cbiINCiAgICArCSJv
IFRoZSAnU2VsZWN0czonIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2xzIHdpbGwgYmUgYXV0b21hdGlj
YWxseVxuIg0KICAgICsJIiAgc2VsZWN0ZWQgaWYgdGhpcyBzeW1ib2wgaXMgc2VsZWN0ZWQgKHkg
b3IgbSlcbiINCiAgICArCSJvIFRoZSAnU2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1i
b2wgaGFzIHNlbGVjdGVkIHRoaXMgc3ltYm9sXG4iDQogICAgKwkiXG4iDQogICAgKwkiT25seSBy
ZWxldmFudCBsaW5lcyBhcmUgc2hvd24uXG4iDQogICAgKwkiXG5cbiINCiAgICArCSJTZWFyY2gg
ZXhhbXBsZXM6XG4iDQogICAgKwkiRXhhbXBsZXM6IFVTQgk9PiBmaW5kIGFsbCBzeW1ib2xzIGNv
bnRhaW5pbmcgVVNCXG4iDQogICAgKwkiICAgICAgICAgIF5VU0IgPT4gZmluZCBhbGwgc3ltYm9s
cyBzdGFydGluZyB3aXRoIFVTQlxuIg0KICAgICsJIiAgICAgICAgICBVU0IkID0+IGZpbmQgYWxs
IHN5bWJvbHMgZW5kaW5nIHdpdGggVVNCXG4iDQogICAgKwkiXG4iOw0KICAgICsNCiAgICArc3Rh
dGljIGludCBpbmRlbnQ7DQogICAgK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51Ow0K
ICAgICtzdGF0aWMgaW50IGNoaWxkX2NvdW50Ow0KICAgICtzdGF0aWMgaW50IHNpbmdsZV9tZW51
X21vZGU7DQogICAgK3N0YXRpYyBpbnQgc2hvd19hbGxfb3B0aW9uczsNCiAgICArc3RhdGljIGlu
dCBzYXZlX2FuZF9leGl0Ow0KICAgICtzdGF0aWMgaW50IHNpbGVudDsNCiAgICArDQogICAgK3N0
YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBtZW51ICphY3RpdmVfbWVu
dSk7DQogICAgK3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KTsNCiAg
ICArc3RhdGljIHZvaWQgY29uZl9zdHJpbmcoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtzdGF0
aWMgdm9pZCBjb25mX2xvYWQodm9pZCk7DQogICAgK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lk
KTsNCiAgICArc3RhdGljIGludCBzaG93X3RleHRib3hfZXh0KGNvbnN0IGNoYXIgKnRpdGxlLCBj
aGFyICp0ZXh0LCBpbnQgciwgaW50IGMsDQogICAgKwkJCSAgICBpbnQgKmtleXMsIGludCAqdnNj
cm9sbCwgaW50ICpoc2Nyb2xsLA0KICAgICsJCQkgICAgdXBkYXRlX3RleHRfZm4gdXBkYXRlX3Rl
eHQsIHZvaWQgKmRhdGEpOw0KICAgICtzdGF0aWMgdm9pZCBzaG93X3RleHRib3goY29uc3QgY2hh
ciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCByLCBpbnQgYyk7DQogICAgK3N0YXRpYyB2
b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQpOw0K
ICAgICtzdGF0aWMgdm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICsNCiAg
ICArc3RhdGljIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07DQogICAgK3N0YXRpYyB2b2lkIHNl
dF9jb25maWdfZmlsZW5hbWUoY29uc3QgY2hhciAqY29uZmlnX2ZpbGVuYW1lKQ0KICAgICt7DQog
ICAgKwlzdGF0aWMgY2hhciBtZW51X2JhY2t0aXRsZVtQQVRIX01BWCsxMjhdOw0KICAgICsJaW50
IHNpemU7DQogICAgKw0KICAgICsJc2l6ZSA9IHNucHJpbnRmKG1lbnVfYmFja3RpdGxlLCBzaXpl
b2YobWVudV9iYWNrdGl0bGUpLA0KICAgICsJCQkiJXMgLSAlcyIsIGNvbmZpZ19maWxlbmFtZSwg
cm9vdG1lbnUucHJvbXB0LT50ZXh0KTsNCiAgICArCWlmIChzaXplID49IHNpemVvZihtZW51X2Jh
Y2t0aXRsZSkpDQogICAgKwkJbWVudV9iYWNrdGl0bGVbc2l6ZW9mKG1lbnVfYmFja3RpdGxlKS0x
XSA9ICdcMCc7DQogICAgKwlzZXRfZGlhbG9nX2JhY2t0aXRsZShtZW51X2JhY2t0aXRsZSk7DQog
ICAgKw0KICAgICsJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAi
JXMiLCBjb25maWdfZmlsZW5hbWUpOw0KICAgICsJaWYgKHNpemUgPj0gc2l6ZW9mKGZpbGVuYW1l
KSkNCiAgICArCQlmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gJ1wwJzsNCiAgICArfQ0K
ICAgICsNCiAgICArc3RydWN0IHN1YnRpdGxlX3BhcnQgew0KICAgICsJc3RydWN0IGxpc3RfaGVh
ZCBlbnRyaWVzOw0KICAgICsJY29uc3QgY2hhciAqdGV4dDsNCiAgICArfTsNCiAgICArc3RhdGlj
IExJU1RfSEVBRCh0cmFpbCk7DQogICAgKw0KICAgICtzdGF0aWMgc3RydWN0IHN1YnRpdGxlX2xp
c3QgKnN1YnRpdGxlczsNCiAgICArc3RhdGljIHZvaWQgc2V0X3N1YnRpdGxlKHZvaWQpDQogICAg
K3sNCiAgICArCXN0cnVjdCBzdWJ0aXRsZV9wYXJ0ICpzcDsNCiAgICArCXN0cnVjdCBzdWJ0aXRs
ZV9saXN0ICpwb3MsICp0bXA7DQogICAgKw0KICAgICsJZm9yIChwb3MgPSBzdWJ0aXRsZXM7IHBv
cyAhPSBOVUxMOyBwb3MgPSB0bXApIHsNCiAgICArCQl0bXAgPSBwb3MtPm5leHQ7DQogICAgKwkJ
ZnJlZShwb3MpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXN1YnRpdGxlcyA9IE5VTEw7DQogICAg
KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNwLCAmdHJhaWwsIGVudHJpZXMpIHsNCiAgICArCQlpZiAo
c3AtPnRleHQpIHsNCiAgICArCQkJaWYgKHBvcykgew0KICAgICsJCQkJcG9zLT5uZXh0ID0geGNh
bGxvYygxLCBzaXplb2YoKnBvcykpOw0KICAgICsJCQkJcG9zID0gcG9zLT5uZXh0Ow0KICAgICsJ
CQl9IGVsc2Ugew0KICAgICsJCQkJc3VidGl0bGVzID0gcG9zID0geGNhbGxvYygxLCBzaXplb2Yo
KnBvcykpOw0KICAgICsJCQl9DQogICAgKwkJCXBvcy0+dGV4dCA9IHNwLT50ZXh0Ow0KICAgICsJ
CX0NCiAgICArCX0NCiAgICArDQogICAgKwlzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdWJ0aXRsZXMp
Ow0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCByZXNldF9zdWJ0aXRsZSh2b2lkKQ0K
ICAgICt7DQogICAgKwlzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqcG9zLCAqdG1wOw0KICAgICsNCiAg
ICArCWZvciAocG9zID0gc3VidGl0bGVzOyBwb3MgIT0gTlVMTDsgcG9zID0gdG1wKSB7DQogICAg
KwkJdG1wID0gcG9zLT5uZXh0Ow0KICAgICsJCWZyZWUocG9zKTsNCiAgICArCX0NCiAgICArCXN1
YnRpdGxlcyA9IE5VTEw7DQogICAgKwlzZXRfZGlhbG9nX3N1YnRpdGxlcyhzdWJ0aXRsZXMpOw0K
ICAgICt9DQogICAgKw0KICAgICtzdHJ1Y3Qgc2VhcmNoX2RhdGEgew0KICAgICsJc3RydWN0IGxp
c3RfaGVhZCAqaGVhZDsNCiAgICArCXN0cnVjdCBtZW51ICoqdGFyZ2V0czsNCiAgICArCWludCAq
a2V5czsNCiAgICArfTsNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHVwZGF0ZV90ZXh0KGNoYXIg
KmJ1Ziwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kLCB2b2lkICpfZGF0YSkNCiAgICArew0KICAg
ICsJc3RydWN0IHNlYXJjaF9kYXRhICpkYXRhID0gX2RhdGE7DQogICAgKwlzdHJ1Y3QganVtcF9r
ZXkgKnBvczsNCiAgICArCWludCBrID0gMDsNCiAgICArDQogICAgKwlsaXN0X2Zvcl9lYWNoX2Vu
dHJ5KHBvcywgZGF0YS0+aGVhZCwgZW50cmllcykgew0KICAgICsJCWlmIChwb3MtPm9mZnNldCA+
PSBzdGFydCAmJiBwb3MtPm9mZnNldCA8IGVuZCkgew0KICAgICsJCQljaGFyIGhlYWRlcls0XTsN
CiAgICArDQogICAgKwkJCWlmIChrIDwgSlVNUF9OQikgew0KICAgICsJCQkJaW50IGtleSA9ICcw
JyArIChwb3MtPmluZGV4ICUgSlVNUF9OQikgKyAxOw0KICAgICsNCiAgICArCQkJCXNwcmludGYo
aGVhZGVyLCAiKCVjKSIsIGtleSk7DQogICAgKwkJCQlkYXRhLT5rZXlzW2tdID0ga2V5Ow0KICAg
ICsJCQkJZGF0YS0+dGFyZ2V0c1trXSA9IHBvcy0+dGFyZ2V0Ow0KICAgICsJCQkJaysrOw0KICAg
ICsJCQl9IGVsc2Ugew0KICAgICsJCQkJc3ByaW50ZihoZWFkZXIsICIgICAiKTsNCiAgICArCQkJ
fQ0KICAgICsNCiAgICArCQkJbWVtY3B5KGJ1ZiArIHBvcy0+b2Zmc2V0LCBoZWFkZXIsIHNpemVv
ZihoZWFkZXIpIC0gMSk7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJZGF0YS0+a2V5c1trXSA9
IDA7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpDQog
ICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKipzeW1fYXJyOw0KICAgICsJc3RydWN0IGdzdHIg
cmVzOw0KICAgICsJc3RydWN0IGdzdHIgdGl0bGU7DQogICAgKwljaGFyICpkaWFsb2dfaW5wdXQ7
DQogICAgKwlpbnQgZHJlcywgdnNjcm9sbCA9IDAsIGhzY3JvbGwgPSAwOw0KICAgICsJYm9vbCBh
Z2FpbjsNCiAgICArCXN0cnVjdCBnc3RyIHN0dGV4dDsNCiAgICArCXN0cnVjdCBzdWJ0aXRsZV9w
YXJ0IHN0cGFydDsNCiAgICArDQogICAgKwl0aXRsZSA9IHN0cl9uZXcoKTsNCiAgICArCXN0cl9w
cmludGYoICZ0aXRsZSwgIkVudGVyIChzdWIpc3RyaW5nIG9yIHJlZ2V4cCB0byBzZWFyY2ggZm9y
ICINCiAgICArCQkJICAgICAgIih3aXRoIG9yIHdpdGhvdXQgXCIlc1wiKSIsIENPTkZJR18pOw0K
ICAgICsNCiAgICArYWdhaW46DQogICAgKwlkaWFsb2dfY2xlYXIoKTsNCiAgICArCWRyZXMgPSBk
aWFsb2dfaW5wdXRib3goIlNlYXJjaCBDb25maWd1cmF0aW9uIFBhcmFtZXRlciIsDQogICAgKwkJ
CSAgICAgIHN0cl9nZXQoJnRpdGxlKSwNCiAgICArCQkJICAgICAgMTAsIDc1LCAiIik7DQogICAg
Kwlzd2l0Y2ggKGRyZXMpIHsNCiAgICArCWNhc2UgMDoNCiAgICArCQlicmVhazsNCiAgICArCWNh
c2UgMToNCiAgICArCQlzaG93X2hlbHB0ZXh0KCJTZWFyY2ggQ29uZmlndXJhdGlvbiIsIHNlYXJj
aF9oZWxwKTsNCiAgICArCQlnb3RvIGFnYWluOw0KICAgICsJZGVmYXVsdDoNCiAgICArCQlzdHJf
ZnJlZSgmdGl0bGUpOw0KICAgICsJCXJldHVybjsNCiAgICArCX0NCiAgICArDQogICAgKwkvKiBz
dHJpcCB0aGUgcHJlZml4IGlmIG5lY2Vzc2FyeSAqLw0KICAgICsJZGlhbG9nX2lucHV0ID0gZGlh
bG9nX2lucHV0X3Jlc3VsdDsNCiAgICArCWlmIChzdHJuY2FzZWNtcChkaWFsb2dfaW5wdXRfcmVz
dWx0LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpID09IDApDQogICAgKwkJZGlhbG9nX2lucHV0
ICs9IHN0cmxlbihDT05GSUdfKTsNCiAgICArDQogICAgKwlzdHRleHQgPSBzdHJfbmV3KCk7DQog
ICAgKwlzdHJfcHJpbnRmKCZzdHRleHQsICJTZWFyY2ggKCVzKSIsIGRpYWxvZ19pbnB1dF9yZXN1
bHQpOw0KICAgICsJc3RwYXJ0LnRleHQgPSBzdHJfZ2V0KCZzdHRleHQpOw0KICAgICsJbGlzdF9h
ZGRfdGFpbCgmc3RwYXJ0LmVudHJpZXMsICZ0cmFpbCk7DQogICAgKw0KICAgICsJc3ltX2FyciA9
IHN5bV9yZV9zZWFyY2goZGlhbG9nX2lucHV0KTsNCiAgICArCWRvIHsNCiAgICArCQlMSVNUX0hF
QUQoaGVhZCk7DQogICAgKwkJc3RydWN0IG1lbnUgKnRhcmdldHNbSlVNUF9OQl07DQogICAgKwkJ
aW50IGtleXNbSlVNUF9OQiArIDFdLCBpOw0KICAgICsJCXN0cnVjdCBzZWFyY2hfZGF0YSBkYXRh
ID0gew0KICAgICsJCQkuaGVhZCA9ICZoZWFkLA0KICAgICsJCQkudGFyZ2V0cyA9IHRhcmdldHMs
DQogICAgKwkJCS5rZXlzID0ga2V5cywNCiAgICArCQl9Ow0KICAgICsJCXN0cnVjdCBqdW1wX2tl
eSAqcG9zLCAqdG1wOw0KICAgICsNCiAgICArCQlyZXMgPSBnZXRfcmVsYXRpb25zX3N0cihzeW1f
YXJyLCAmaGVhZCk7DQogICAgKwkJc2V0X3N1YnRpdGxlKCk7DQogICAgKwkJZHJlcyA9IHNob3df
dGV4dGJveF9leHQoIlNlYXJjaCBSZXN1bHRzIiwgKGNoYXIgKikNCiAgICArCQkJCQlzdHJfZ2V0
KCZyZXMpLCAwLCAwLCBrZXlzLCAmdnNjcm9sbCwNCiAgICArCQkJCQkmaHNjcm9sbCwgJnVwZGF0
ZV90ZXh0LCAodm9pZCAqKQ0KICAgICsJCQkJCSZkYXRhKTsNCiAgICArCQlhZ2FpbiA9IGZhbHNl
Ow0KICAgICsJCWZvciAoaSA9IDA7IGkgPCBKVU1QX05CICYmIGtleXNbaV07IGkrKykNCiAgICAr
CQkJaWYgKGRyZXMgPT0ga2V5c1tpXSkgew0KICAgICsJCQkJY29uZih0YXJnZXRzW2ldLT5wYXJl
bnQsIHRhcmdldHNbaV0pOw0KICAgICsJCQkJYWdhaW4gPSB0cnVlOw0KICAgICsJCQl9DQogICAg
KwkJc3RyX2ZyZWUoJnJlcyk7DQogICAgKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywg
dG1wLCAmaGVhZCwgZW50cmllcykNCiAgICArCQkJZnJlZShwb3MpOw0KICAgICsJfSB3aGlsZSAo
YWdhaW4pOw0KICAgICsJZnJlZShzeW1fYXJyKTsNCiAgICArCXN0cl9mcmVlKCZ0aXRsZSk7DQog
ICAgKwlsaXN0X2RlbCh0cmFpbC5wcmV2KTsNCiAgICArCXN0cl9mcmVlKCZzdHRleHQpOw0KICAg
ICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBidWlsZF9jb25mKHN0cnVjdCBtZW51ICptZW51
KQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVy
dHkgKnByb3A7DQogICAgKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgKwlpbnQgdHlwZSwgdG1w
LCBkb2ludCA9IDI7DQogICAgKwl0cmlzdGF0ZSB2YWw7DQogICAgKwljaGFyIGNoOw0KICAgICsJ
Ym9vbCB2aXNpYmxlOw0KICAgICsNCiAgICArCS8qDQogICAgKwkgKiBub3RlOiBtZW51X2lzX3Zp
c2libGUoKSBoYXMgc2lkZSBlZmZlY3QgdGhhdCBpdCB3aWxsDQogICAgKwkgKiByZWNhbGMgdGhl
IHZhbHVlIG9mIHRoZSBzeW1ib2wuDQogICAgKwkgKi8NCiAgICArCXZpc2libGUgPSBtZW51X2lz
X3Zpc2libGUobWVudSk7DQogICAgKwlpZiAoc2hvd19hbGxfb3B0aW9ucyAmJiAhbWVudV9oYXNf
cHJvbXB0KG1lbnUpKQ0KICAgICsJCXJldHVybjsNCiAgICArCWVsc2UgaWYgKCFzaG93X2FsbF9v
cHRpb25zICYmICF2aXNpYmxlKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwlzeW0gPSBt
ZW51LT5zeW07DQogICAgKwlwcm9wID0gbWVudS0+cHJvbXB0Ow0KICAgICsJaWYgKCFzeW0pIHsN
CiAgICArCQlpZiAocHJvcCAmJiBtZW51ICE9IGN1cnJlbnRfbWVudSkgew0KICAgICsJCQljb25z
dCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgKwkJCXN3aXRjaCAo
cHJvcC0+dHlwZSkgew0KICAgICsJCQljYXNlIFBfTUVOVToNCiAgICArCQkJCWNoaWxkX2NvdW50
Kys7DQogICAgKwkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkgew0KICAgICsJCQkJCWl0ZW1fbWFr
ZSgiJXMlKmMlcyIsDQogICAgKwkJCQkJCSAgbWVudS0+ZGF0YSA/ICItLT4iIDogIisrPiIsDQog
ICAgKwkJCQkJCSAgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQpOw0KICAgICsJCQkJfSBlbHNlDQog
ICAgKwkJCQkJaXRlbV9tYWtlKCIgICAlKmMlcyAgJXMiLA0KICAgICsJCQkJCQkgIGluZGVudCAr
IDEsICcgJywgcHJvbXB0LA0KICAgICsJCQkJCQkgIG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0t
LSIgOiAiLS0tPiIpOw0KICAgICsJCQkJaXRlbV9zZXRfdGFnKCdtJyk7DQogICAgKwkJCQlpdGVt
X3NldF9kYXRhKG1lbnUpOw0KICAgICsJCQkJaWYgKHNpbmdsZV9tZW51X21vZGUgJiYgbWVudS0+
ZGF0YSkNCiAgICArCQkJCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgICsJCQkJcmV0dXJuOw0KICAg
ICsJCQljYXNlIFBfQ09NTUVOVDoNCiAgICArCQkJCWlmIChwcm9tcHQpIHsNCiAgICArCQkJCQlj
aGlsZF9jb3VudCsrOw0KICAgICsJCQkJCWl0ZW1fbWFrZSgiICAgJSpjKioqICVzICoqKiIsIGlu
ZGVudCArIDEsICcgJywgcHJvbXB0KTsNCiAgICArCQkJCQlpdGVtX3NldF90YWcoJzonKTsNCiAg
ICArCQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOw0KICAgICsJCQkJfQ0KICAgICsJCQkJYnJlYWs7
DQogICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQlpZiAocHJvbXB0KSB7DQogICAgKwkJCQkJY2hp
bGRfY291bnQrKzsNCiAgICArCQkJCQlpdGVtX21ha2UoIi0tLSUqYyVzIiwgaW5kZW50ICsgMSwg
JyAnLCBwcm9tcHQpOw0KICAgICsJCQkJCWl0ZW1fc2V0X3RhZygnOicpOw0KICAgICsJCQkJCWl0
ZW1fc2V0X2RhdGEobWVudSk7DQogICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICArCQl9IGVsc2UN
CiAgICArCQkJZG9pbnQgPSAwOw0KICAgICsJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgKwl9DQog
ICAgKw0KICAgICsJdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgICsJaWYgKHN5bV9pc19j
aG9pY2Uoc3ltKSkgew0KICAgICsJCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2No
b2ljZV92YWx1ZShzeW0pOw0KICAgICsJCXN0cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7DQog
ICAgKw0KICAgICsJCWNoaWxkX2NvdW50Kys7DQogICAgKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxp
c3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgKwkJCWlmIChtZW51X2lzX3Zp
c2libGUoY2hpbGQpICYmIGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkNCiAgICArCQkJCWRlZl9tZW51
ID0gY2hpbGQ7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRl
X3ZhbHVlKHN5bSk7DQogICAgKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgICsJ
CQlzd2l0Y2ggKHR5cGUpIHsNCiAgICArCQkJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJCQlpdGVt
X21ha2UoIlslY10iLCB2YWwgPT0gbm8gPyAnICcgOiAnKicpOw0KICAgICsJCQkJYnJlYWs7DQog
ICAgKwkJCWNhc2UgU19UUklTVEFURToNCiAgICArCQkJCXN3aXRjaCAodmFsKSB7DQogICAgKwkJ
CQljYXNlIHllczogY2ggPSAnKic7IGJyZWFrOw0KICAgICsJCQkJY2FzZSBtb2Q6IGNoID0gJ00n
OyBicmVhazsNCiAgICArCQkJCWRlZmF1bHQ6ICBjaCA9ICcgJzsgYnJlYWs7DQogICAgKwkJCQl9
DQogICAgKwkJCQlpdGVtX21ha2UoIjwlYz4iLCBjaCk7DQogICAgKwkJCQlicmVhazsNCiAgICAr
CQkJfQ0KICAgICsJCQlpdGVtX3NldF90YWcoJ3QnKTsNCiAgICArCQkJaXRlbV9zZXRfZGF0YSht
ZW51KTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlpdGVtX21ha2UoIiAgICIpOw0KICAgICsJ
CQlpdGVtX3NldF90YWcoZGVmX21lbnUgPyAndCcgOiAnOicpOw0KICAgICsJCQlpdGVtX3NldF9k
YXRhKG1lbnUpOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJaXRlbV9hZGRfc3RyKCIlKmMlcyIs
IGluZGVudCArIDEsICcgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsNCiAgICArCQlpZiAodmFs
ID09IHllcykgew0KICAgICsJCQlpZiAoZGVmX21lbnUpIHsNCiAgICArCQkJCWl0ZW1fYWRkX3N0
cigiICglcykiLCBtZW51X2dldF9wcm9tcHQoZGVmX21lbnUpKTsNCiAgICArCQkJCWl0ZW1fYWRk
X3N0cigiICAtLS0+Iik7DQogICAgKwkJCQlpZiAoZGVmX21lbnUtPmxpc3QpIHsNCiAgICArCQkJ
CQlpbmRlbnQgKz0gMjsNCiAgICArCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsNCiAgICArCQkJ
CQlpbmRlbnQgLT0gMjsNCiAgICArCQkJCX0NCiAgICArCQkJfQ0KICAgICsJCQlyZXR1cm47DQog
ICAgKwkJfQ0KICAgICsJfSBlbHNlIHsNCiAgICArCQlpZiAobWVudSA9PSBjdXJyZW50X21lbnUp
IHsNCiAgICArCQkJaXRlbV9tYWtlKCItLS0lKmMlcyIsIGluZGVudCArIDEsICcgJywgbWVudV9n
ZXRfcHJvbXB0KG1lbnUpKTsNCiAgICArCQkJaXRlbV9zZXRfdGFnKCc6Jyk7DQogICAgKwkJCWl0
ZW1fc2V0X2RhdGEobWVudSk7DQogICAgKwkJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgKwkJfQ0K
ICAgICsJCWNoaWxkX2NvdW50Kys7DQogICAgKwkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1
ZShzeW0pOw0KICAgICsJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHll
cykgew0KICAgICsJCQlpdGVtX21ha2UoIiAgICIpOw0KICAgICsJCQlpdGVtX3NldF90YWcoJzon
KTsNCiAgICArCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJ
CQlzd2l0Y2ggKHR5cGUpIHsNCiAgICArCQkJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJCQlpZiAo
c3ltX2lzX2NoYW5nYWJsZShzeW0pKQ0KICAgICsJCQkJCWl0ZW1fbWFrZSgiWyVjXSIsIHZhbCA9
PSBubyA/ICcgJyA6ICcqJyk7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJaXRlbV9tYWtlKCIt
JWMtIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsNCiAgICArCQkJCWl0ZW1fc2V0X3RhZygndCcp
Ow0KICAgICsJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJ
CQljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJCQlzd2l0Y2ggKHZhbCkgew0KICAgICsJCQkJY2Fz
ZSB5ZXM6IGNoID0gJyonOyBicmVhazsNCiAgICArCQkJCWNhc2UgbW9kOiBjaCA9ICdNJzsgYnJl
YWs7DQogICAgKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOw0KICAgICsJCQkJfQ0KICAg
ICsJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgICsJCQkJCWlmIChzeW0tPnJl
dl9kZXAudHJpID09IG1vZCkNCiAgICArCQkJCQkJaXRlbV9tYWtlKCJ7JWN9IiwgY2gpOw0KICAg
ICsJCQkJCWVsc2UNCiAgICArCQkJCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOw0KICAgICsJCQkJ
fSBlbHNlDQogICAgKwkJCQkJaXRlbV9tYWtlKCItJWMtIiwgY2gpOw0KICAgICsJCQkJaXRlbV9z
ZXRfdGFnKCd0Jyk7DQogICAgKwkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOw0KICAgICsJCQkJYnJl
YWs7DQogICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQl0bXAgPSAyICsgc3RybGVuKHN5bV9nZXRf
c3RyaW5nX3ZhbHVlKHN5bSkpOyAvKiAoKSA9IDIgKi8NCiAgICArCQkJCWl0ZW1fbWFrZSgiKCVz
KSIsIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOw0KICAgICsJCQkJdG1wID0gaW5kZW50IC0g
dG1wICsgNDsNCiAgICArCQkJCWlmICh0bXAgPCAwKQ0KICAgICsJCQkJCXRtcCA9IDA7DQogICAg
KwkJCQlpdGVtX2FkZF9zdHIoIiUqYyVzJXMiLCB0bXAsICcgJywgbWVudV9nZXRfcHJvbXB0KG1l
bnUpLA0KICAgICsJCQkJCSAgICAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5n
YWJsZShzeW0pKSA/DQogICAgKwkJCQkJICAgICAiIiA6ICIgKE5FVykiKTsNCiAgICArCQkJCWl0
ZW1fc2V0X3RhZygncycpOw0KICAgICsJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICArCQkJ
CWdvdG8gY29uZl9jaGlsZHM7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwkJaXRlbV9hZGRf
c3RyKCIlKmMlcyVzIiwgaW5kZW50ICsgMSwgJyAnLCBtZW51X2dldF9wcm9tcHQobWVudSksDQog
ICAgKwkJCSAgKHN5bV9oYXNfdmFsdWUoc3ltKSB8fCAhc3ltX2lzX2NoYW5nYWJsZShzeW0pKSA/
DQogICAgKwkJCSAgIiIgOiAiIChORVcpIik7DQogICAgKwkJaWYgKG1lbnUtPnByb21wdC0+dHlw
ZSA9PSBQX01FTlUpIHsNCiAgICArCQkJaXRlbV9hZGRfc3RyKCIgICVzIiwgbWVudV9pc19lbXB0
eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7DQogICAgKwkJCXJldHVybjsNCiAgICArCQl9DQog
ICAgKwl9DQogICAgKw0KICAgICtjb25mX2NoaWxkczoNCiAgICArCWluZGVudCArPSBkb2ludDsN
CiAgICArCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dCkNCiAgICArCQlidWlsZF9jb25mKGNoaWxkKTsNCiAgICArCWluZGVudCAtPSBkb2ludDsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSwgc3Ry
dWN0IG1lbnUgKmFjdGl2ZV9tZW51KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgbWVudSAqc3VibWVu
dTsNCiAgICArCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsNCiAg
ICArCXN0cnVjdCBzdWJ0aXRsZV9wYXJ0IHN0cGFydDsNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5
bTsNCiAgICArCWludCByZXM7DQogICAgKwlpbnQgc19zY3JvbGwgPSAwOw0KICAgICsNCiAgICAr
CWlmIChtZW51ICE9ICZyb290bWVudSkNCiAgICArCQlzdHBhcnQudGV4dCA9IG1lbnVfZ2V0X3By
b21wdChtZW51KTsNCiAgICArCWVsc2UNCiAgICArCQlzdHBhcnQudGV4dCA9IE5VTEw7DQogICAg
KwlsaXN0X2FkZF90YWlsKCZzdHBhcnQuZW50cmllcywgJnRyYWlsKTsNCiAgICArDQogICAgKwl3
aGlsZSAoMSkgew0KICAgICsJCWl0ZW1fcmVzZXQoKTsNCiAgICArCQljdXJyZW50X21lbnUgPSBt
ZW51Ow0KICAgICsJCWJ1aWxkX2NvbmYobWVudSk7DQogICAgKwkJaWYgKCFjaGlsZF9jb3VudCkN
CiAgICArCQkJYnJlYWs7DQogICAgKwkJc2V0X3N1YnRpdGxlKCk7DQogICAgKwkJZGlhbG9nX2Ns
ZWFyKCk7DQogICAgKwkJcmVzID0gZGlhbG9nX21lbnUocHJvbXB0ID8gcHJvbXB0IDogIk1haW4g
TWVudSIsDQogICAgKwkJCQkgIG1lbnVfaW5zdHJ1Y3Rpb25zLA0KICAgICsJCQkJICBhY3RpdmVf
bWVudSwgJnNfc2Nyb2xsKTsNCiAgICArCQlpZiAocmVzID09IDEgfHwgcmVzID09IEtFWV9FU0Mg
fHwgcmVzID09IC1FUlJESVNQTEFZVE9PU01BTEwpDQogICAgKwkJCWJyZWFrOw0KICAgICsJCWlm
IChpdGVtX2NvdW50KCkgIT0gMCkgew0KICAgICsJCQlpZiAoIWl0ZW1fYWN0aXZhdGVfc2VsZWN0
ZWQoKSkNCiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQlpZiAoIWl0ZW1fdGFnKCkpDQogICAg
KwkJCQljb250aW51ZTsNCiAgICArCQl9DQogICAgKwkJc3VibWVudSA9IGl0ZW1fZGF0YSgpOw0K
ICAgICsJCWFjdGl2ZV9tZW51ID0gaXRlbV9kYXRhKCk7DQogICAgKwkJaWYgKHN1Ym1lbnUpDQog
ICAgKwkJCXN5bSA9IHN1Ym1lbnUtPnN5bTsNCiAgICArCQllbHNlDQogICAgKwkJCXN5bSA9IE5V
TEw7DQogICAgKw0KICAgICsJCXN3aXRjaCAocmVzKSB7DQogICAgKwkJY2FzZSAwOg0KICAgICsJ
CQlzd2l0Y2ggKGl0ZW1fdGFnKCkpIHsNCiAgICArCQkJY2FzZSAnbSc6DQogICAgKwkJCQlpZiAo
c2luZ2xlX21lbnVfbW9kZSkNCiAgICArCQkJCQlzdWJtZW51LT5kYXRhID0gKHZvaWQgKikgKGxv
bmcpICFzdWJtZW51LT5kYXRhOw0KICAgICsJCQkJZWxzZQ0KICAgICsJCQkJCWNvbmYoc3VibWVu
dSwgTlVMTCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSAndCc6DQogICAgKwkJCQlp
ZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5
ZXMpDQogICAgKwkJCQkJY29uZl9jaG9pY2Uoc3VibWVudSk7DQogICAgKwkJCQllbHNlIGlmIChz
dWJtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQ0KICAgICsJCQkJCWNvbmYoc3VibWVudSwg
TlVMTCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSAncyc6DQogICAgKwkJCQljb25m
X3N0cmluZyhzdWJtZW51KTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgMjoNCiAgICArCQkJaWYgKHN5bSkNCiAgICArCQkJCXNob3dfaGVs
cChzdWJtZW51KTsNCiAgICArCQkJZWxzZSB7DQogICAgKwkJCQlyZXNldF9zdWJ0aXRsZSgpOw0K
ICAgICsJCQkJc2hvd19oZWxwdGV4dCgiUkVBRE1FIiwgbWNvbmZfcmVhZG1lKTsNCiAgICArCQkJ
fQ0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDM6DQogICAgKwkJCXJlc2V0X3N1YnRpdGxl
KCk7DQogICAgKwkJCWNvbmZfc2F2ZSgpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDQ6
DQogICAgKwkJCXJlc2V0X3N1YnRpdGxlKCk7DQogICAgKwkJCWNvbmZfbG9hZCgpOw0KICAgICsJ
CQlicmVhazsNCiAgICArCQljYXNlIDU6DQogICAgKwkJCWlmIChpdGVtX2lzX3RhZygndCcpKSB7
DQogICAgKwkJCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIHllcykpDQogICAgKwkJ
CQkJYnJlYWs7DQogICAgKwkJCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCkp
DQogICAgKwkJCQkJc2hvd190ZXh0Ym94KE5VTEwsIHNldG1vZF90ZXh0LCA2LCA3NCk7DQogICAg
KwkJCX0NCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSA2Og0KICAgICsJCQlpZiAoaXRlbV9p
c190YWcoJ3QnKSkNCiAgICArCQkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBubyk7DQog
ICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgNzoNCiAgICArCQkJaWYgKGl0ZW1faXNfdGFnKCd0
JykpDQogICAgKwkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsNCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJY2FzZSA4Og0KICAgICsJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkNCiAg
ICArCQkJCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArCQkJZWxzZSBpZiAo
aXRlbV9pc190YWcoJ20nKSkNCiAgICArCQkJCWNvbmYoc3VibWVudSwgTlVMTCk7DQogICAgKwkJ
CWJyZWFrOw0KICAgICsJCWNhc2UgOToNCiAgICArCQkJc2VhcmNoX2NvbmYoKTsNCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJY2FzZSAxMDoNCiAgICArCQkJc2hvd19hbGxfb3B0aW9ucyA9ICFzaG93
X2FsbF9vcHRpb25zOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0K
ICAgICsJbGlzdF9kZWwodHJhaWwucHJldik7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBp
bnQgc2hvd190ZXh0Ym94X2V4dChjb25zdCBjaGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIs
IGludCBjLCBpbnQNCiAgICArCQkJICAgICprZXlzLCBpbnQgKnZzY3JvbGwsIGludCAqaHNjcm9s
bCwgdXBkYXRlX3RleHRfZm4NCiAgICArCQkJICAgIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKQ0K
ICAgICt7DQogICAgKwlkaWFsb2dfY2xlYXIoKTsNCiAgICArCXJldHVybiBkaWFsb2dfdGV4dGJv
eCh0aXRsZSwgdGV4dCwgciwgYywga2V5cywgdnNjcm9sbCwgaHNjcm9sbCwNCiAgICArCQkJICAg
ICAgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBz
aG93X3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQsIGludCByLCBp
bnQgYykNCiAgICArew0KICAgICsJc2hvd190ZXh0Ym94X2V4dCh0aXRsZSwgKGNoYXIgKikgdGV4
dCwgciwgYywgKGludCBbXSkgezB9LCBOVUxMLCBOVUxMLA0KICAgICsJCQkgTlVMTCwgTlVMTCk7
DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHNob3dfaGVscHRleHQoY29uc3QgY2hh
ciAqdGl0bGUsIGNvbnN0IGNoYXIgKnRleHQpDQogICAgK3sNCiAgICArCXNob3dfdGV4dGJveCh0
aXRsZSwgdGV4dCwgMCwgMCk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZf
bWVzc2FnZV9jYWxsYmFjayhjb25zdCBjaGFyICpzKQ0KICAgICt7DQogICAgKwlpZiAoc2F2ZV9h
bmRfZXhpdCkgew0KICAgICsJCWlmICghc2lsZW50KQ0KICAgICsJCQlwcmludGYoIiVzIiwgcyk7
DQogICAgKwl9IGVsc2Ugew0KICAgICsJCXNob3dfdGV4dGJveChOVUxMLCBzLCA2LCA2MCk7DQog
ICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHNob3dfaGVscChzdHJ1Y3Qg
bWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IGdzdHIgaGVscCA9IHN0cl9uZXcoKTsN
CiAgICArDQogICAgKwloZWxwLm1heF93aWR0aCA9IGdldG1heHgoc3Rkc2NyKSAtIDEwOw0KICAg
ICsJbWVudV9nZXRfZXh0X2hlbHAobWVudSwgJmhlbHApOw0KICAgICsNCiAgICArCXNob3dfaGVs
cHRleHQobWVudV9nZXRfcHJvbXB0KG1lbnUpLCBzdHJfZ2V0KCZoZWxwKSk7DQogICAgKwlzdHJf
ZnJlZSgmaGVscCk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNl
KHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICpwcm9tcHQgPSBt
ZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgKwlz
dHJ1Y3Qgc3ltYm9sICphY3RpdmU7DQogICAgKw0KICAgICsJYWN0aXZlID0gc3ltX2dldF9jaG9p
Y2VfdmFsdWUobWVudS0+c3ltKTsNCiAgICArCXdoaWxlICgxKSB7DQogICAgKwkJaW50IHJlczsN
CiAgICArCQlpbnQgc2VsZWN0ZWQ7DQogICAgKwkJaXRlbV9yZXNldCgpOw0KICAgICsNCiAgICAr
CQljdXJyZW50X21lbnUgPSBtZW51Ow0KICAgICsJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCQlpZiAoIW1lbnVfaXNfdmlzaWJs
ZShjaGlsZCkpDQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJaWYgKGNoaWxkLT5zeW0pDQog
ICAgKwkJCQlpdGVtX21ha2UoIiVzIiwgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7DQogICAgKwkJ
CWVsc2Ugew0KICAgICsJCQkJaXRlbV9tYWtlKCIqKiogJXMgKioqIiwgbWVudV9nZXRfcHJvbXB0
KGNoaWxkKSk7DQogICAgKwkJCQlpdGVtX3NldF90YWcoJzonKTsNCiAgICArCQkJfQ0KICAgICsJ
CQlpdGVtX3NldF9kYXRhKGNoaWxkKTsNCiAgICArCQkJaWYgKGNoaWxkLT5zeW0gPT0gYWN0aXZl
KQ0KICAgICsJCQkJaXRlbV9zZXRfc2VsZWN0ZWQoMSk7DQogICAgKwkJCWlmIChjaGlsZC0+c3lt
ID09IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSkpDQogICAgKwkJCQlpdGVtX3NldF90
YWcoJ1gnKTsNCiAgICArCQl9DQogICAgKwkJZGlhbG9nX2NsZWFyKCk7DQogICAgKwkJcmVzID0g
ZGlhbG9nX2NoZWNrbGlzdChwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwNCiAgICArCQkJ
CQlyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zLA0KICAgICsJCQkJCU1FTlVCT1hfSEVJR1RIX01JTiwN
CiAgICArCQkJCQlNRU5VQk9YX1dJRFRIX01JTiwNCiAgICArCQkJCQlDSEVDS0xJU1RfSEVJR1RI
X01JTik7DQogICAgKwkJc2VsZWN0ZWQgPSBpdGVtX2FjdGl2YXRlX3NlbGVjdGVkKCk7DQogICAg
KwkJc3dpdGNoIChyZXMpIHsNCiAgICArCQljYXNlIDA6DQogICAgKwkJCWlmIChzZWxlY3RlZCkg
ew0KICAgICsJCQkJY2hpbGQgPSBpdGVtX2RhdGEoKTsNCiAgICArCQkJCWlmICghY2hpbGQtPnN5
bSkNCiAgICArCQkJCQlicmVhazsNCiAgICArDQogICAgKwkJCQlzeW1fc2V0X3RyaXN0YXRlX3Zh
bHVlKGNoaWxkLT5zeW0sIHllcyk7DQogICAgKwkJCX0NCiAgICArCQkJcmV0dXJuOw0KICAgICsJ
CWNhc2UgMToNCiAgICArCQkJaWYgKHNlbGVjdGVkKSB7DQogICAgKwkJCQljaGlsZCA9IGl0ZW1f
ZGF0YSgpOw0KICAgICsJCQkJc2hvd19oZWxwKGNoaWxkKTsNCiAgICArCQkJCWFjdGl2ZSA9IGNo
aWxkLT5zeW07DQogICAgKwkJCX0gZWxzZQ0KICAgICsJCQkJc2hvd19oZWxwKG1lbnUpOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9FU0M6DQogICAgKwkJCXJldHVybjsNCiAgICAr
CQljYXNlIC1FUlJESVNQTEFZVE9PU01BTEw6DQogICAgKwkJCXJldHVybjsNCiAgICArCQl9DQog
ICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVj
dCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dl
dF9wcm9tcHQobWVudSk7DQogICAgKw0KICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQlpbnQgcmVz
Ow0KICAgICsJCWNvbnN0IGNoYXIgKmhlYWRpbmc7DQogICAgKw0KICAgICsJCXN3aXRjaCAoc3lt
X2dldF90eXBlKG1lbnUtPnN5bSkpIHsNCiAgICArCQljYXNlIFNfSU5UOg0KICAgICsJCQloZWFk
aW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2ludDsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
Y2FzZSBTX0hFWDoNCiAgICArCQkJaGVhZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19oZXg7
DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgU19TVFJJTkc6DQogICAgKwkJCWhlYWRpbmcg
PSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfc3RyaW5nOw0KICAgICsJCQlicmVhazsNCiAgICArCQlk
ZWZhdWx0Og0KICAgICsJCQloZWFkaW5nID0gIkludGVybmFsIG1jb25mIGVycm9yISI7DQogICAg
KwkJfQ0KICAgICsJCWRpYWxvZ19jbGVhcigpOw0KICAgICsJCXJlcyA9IGRpYWxvZ19pbnB1dGJv
eChwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwNCiAgICArCQkJCSAgICAgIGhlYWRpbmcs
IDEwLCA3NSwNCiAgICArCQkJCSAgICAgIHN5bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSkp
Ow0KICAgICsJCXN3aXRjaCAocmVzKSB7DQogICAgKwkJY2FzZSAwOg0KICAgICsJCQlpZiAoc3lt
X3NldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltLCBkaWFsb2dfaW5wdXRfcmVzdWx0KSkNCiAgICAr
CQkJCXJldHVybjsNCiAgICArCQkJc2hvd190ZXh0Ym94KE5VTEwsICJZb3UgaGF2ZSBtYWRlIGFu
IGludmFsaWQgZW50cnkuIiwgNSwgNDMpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDE6
DQogICAgKwkJCXNob3dfaGVscChtZW51KTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBL
RVlfRVNDOg0KICAgICsJCQlyZXR1cm47DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAg
Kw0KICAgICtzdGF0aWMgdm9pZCBjb25mX2xvYWQodm9pZCkNCiAgICArew0KICAgICsNCiAgICAr
CXdoaWxlICgxKSB7DQogICAgKwkJaW50IHJlczsNCiAgICArCQlkaWFsb2dfY2xlYXIoKTsNCiAg
ICArCQlyZXMgPSBkaWFsb2dfaW5wdXRib3goTlVMTCwgbG9hZF9jb25maWdfdGV4dCwNCiAgICAr
CQkJCSAgICAgIDExLCA1NSwgZmlsZW5hbWUpOw0KICAgICsJCXN3aXRjaChyZXMpIHsNCiAgICAr
CQljYXNlIDA6DQogICAgKwkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkNCiAgICArCQkJ
CXJldHVybjsNCiAgICArCQkJaWYgKCFjb25mX3JlYWQoZGlhbG9nX2lucHV0X3Jlc3VsdCkpIHsN
CiAgICArCQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7DQogICAg
KwkJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsNCiAgICArCQkJCXJldHVybjsNCiAgICArCQkJ
fQ0KICAgICsJCQlzaG93X3RleHRib3goTlVMTCwgIkZpbGUgZG9lcyBub3QgZXhpc3QhIiwgNSwg
MzgpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDE6DQogICAgKwkJCXNob3dfaGVscHRl
eHQoIkxvYWQgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iLCBsb2FkX2NvbmZpZ19oZWxwKTsNCiAg
ICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfRVNDOg0KICAgICsJCQlyZXR1cm47DQogICAg
KwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX3NhdmUo
dm9pZCkNCiAgICArew0KICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQlpbnQgcmVzOw0KICAgICsJ
CWRpYWxvZ19jbGVhcigpOw0KICAgICsJCXJlcyA9IGRpYWxvZ19pbnB1dGJveChOVUxMLCBzYXZl
X2NvbmZpZ190ZXh0LA0KICAgICsJCQkJICAgICAgMTEsIDU1LCBmaWxlbmFtZSk7DQogICAgKwkJ
c3dpdGNoKHJlcykgew0KICAgICsJCWNhc2UgMDoNCiAgICArCQkJaWYgKCFkaWFsb2dfaW5wdXRf
cmVzdWx0WzBdKQ0KICAgICsJCQkJcmV0dXJuOw0KICAgICsJCQlpZiAoIWNvbmZfd3JpdGUoZGlh
bG9nX2lucHV0X3Jlc3VsdCkpIHsNCiAgICArCQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9n
X2lucHV0X3Jlc3VsdCk7DQogICAgKwkJCQlyZXR1cm47DQogICAgKwkJCX0NCiAgICArCQkJc2hv
d190ZXh0Ym94KE5VTEwsICJDYW4ndCBjcmVhdGUgZmlsZSEiLCA1LCA2MCk7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgMToNCiAgICArCQkJc2hvd19oZWxwdGV4dCgiU2F2ZSBBbHRlcm5h
dGUgQ29uZmlndXJhdGlvbiIsIHNhdmVfY29uZmlnX2hlbHApOw0KICAgICsJCQlicmVhazsNCiAg
ICArCQljYXNlIEtFWV9FU0M6DQogICAgKwkJCXJldHVybjsNCiAgICArCQl9DQogICAgKwl9DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbnQgaGFuZGxlX2V4aXQodm9pZCkNCiAgICArew0K
ICAgICsJaW50IHJlczsNCiAgICArDQogICAgKwlzYXZlX2FuZF9leGl0ID0gMTsNCiAgICArCXJl
c2V0X3N1YnRpdGxlKCk7DQogICAgKwlkaWFsb2dfY2xlYXIoKTsNCiAgICArCWlmIChjb25mX2dl
dF9jaGFuZ2VkKCkpDQogICAgKwkJcmVzID0gZGlhbG9nX3llc25vKE5VTEwsDQogICAgKwkJCQkg
ICAiRG8geW91IHdpc2ggdG8gc2F2ZSB5b3VyIG5ldyBjb25maWd1cmF0aW9uP1xuIg0KICAgICsJ
CQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUga2VybmVsIGNvbmZpZ3VyYXRp
b24uKSIsDQogICAgKwkJCQkgICA2LCA2MCk7DQogICAgKwllbHNlDQogICAgKwkJcmVzID0gLTE7
DQogICAgKw0KICAgICsJZW5kX2RpYWxvZyhzYXZlZF94LCBzYXZlZF95KTsNCiAgICArDQogICAg
Kwlzd2l0Y2ggKHJlcykgew0KICAgICsJY2FzZSAwOg0KICAgICsJCWlmIChjb25mX3dyaXRlKGZp
bGVuYW1lKSkgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIlxuXG4iDQogICAgKwkJCQkJICAi
RXJyb3Igd2hpbGUgd3JpdGluZyBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiINCiAgICArCQkJCQkg
ICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iDQogICAgKwkJCQkJ
ICAiXG5cbiIpOw0KICAgICsJCQlyZXR1cm4gMTsNCiAgICArCQl9DQogICAgKwkJY29uZl93cml0
ZV9hdXRvY29uZigwKTsNCiAgICArCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICArCWNhc2UgLTE6
DQogICAgKwkJaWYgKCFzaWxlbnQpDQogICAgKwkJCXByaW50ZigiXG5cbiINCiAgICArCQkJCSAi
KioqIEVuZCBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiINCiAgICArCQkJCSAiKioqIEV4ZWN1dGUg
J21ha2UnIHRvIHN0YXJ0IHRoZSBidWlsZCBvciB0cnkgJ21ha2UgaGVscCcuIg0KICAgICsJCQkJ
ICJcblxuIik7DQogICAgKwkJcmVzID0gMDsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6
DQogICAgKwkJaWYgKCFzaWxlbnQpDQogICAgKwkJCWZwcmludGYoc3RkZXJyLCAiXG5cbiINCiAg
ICArCQkJCQkgICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iDQog
ICAgKwkJCQkJICAiXG5cbiIpOw0KICAgICsJCWlmIChyZXMgIT0gS0VZX0VTQykNCiAgICArCQkJ
cmVzID0gMDsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gcmVzOw0KICAgICt9DQogICAg
Kw0KICAgICtzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnbm8pDQogICAgK3sNCiAgICAr
CWV4aXQoaGFuZGxlX2V4aXQoKSk7DQogICAgK30NCiAgICArDQogICAgK2ludCBtYWluKGludCBh
YywgY2hhciAqKmF2KQ0KICAgICt7DQogICAgKwljaGFyICptb2RlOw0KICAgICsJaW50IHJlczsN
CiAgICArDQogICAgKwlzaWduYWwoU0lHSU5ULCBzaWdfaGFuZGxlcik7DQogICAgKw0KICAgICsJ
aWYgKGFjID4gMSAmJiBzdHJjbXAoYXZbMV0sICItcyIpID09IDApIHsNCiAgICArCQlzaWxlbnQg
PSAxOw0KICAgICsJCS8qIFNpbGVuY2UgY29uZl9yZWFkKCkgdW50aWwgdGhlIHJlYWwgY2FsbGJh
Y2sgaXMgc2V0IHVwICovDQogICAgKwkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsN
CiAgICArCQlhdisrOw0KICAgICsJfQ0KICAgICsJY29uZl9wYXJzZShhdlsxXSk7DQogICAgKwlj
b25mX3JlYWQoTlVMTCk7DQogICAgKw0KICAgICsJbW9kZSA9IGdldGVudigiTUVOVUNPTkZJR19N
T0RFIik7DQogICAgKwlpZiAobW9kZSkgew0KICAgICsJCWlmICghc3RyY2FzZWNtcChtb2RlLCAi
c2luZ2xlX21lbnUiKSkNCiAgICArCQkJc2luZ2xlX21lbnVfbW9kZSA9IDE7DQogICAgKwl9DQog
ICAgKw0KICAgICsJaWYgKGluaXRfZGlhbG9nKE5VTEwpKSB7DQogICAgKwkJZnByaW50ZihzdGRl
cnIsICJZb3VyIGRpc3BsYXkgaXMgdG9vIHNtYWxsIHRvIHJ1biBNZW51Y29uZmlnIVxuIik7DQog
ICAgKwkJZnByaW50ZihzdGRlcnIsICJJdCBtdXN0IGJlIGF0IGxlYXN0IDE5IGxpbmVzIGJ5IDgw
IGNvbHVtbnMuXG4iKTsNCiAgICArCQlyZXR1cm4gMTsNCiAgICArCX0NCiAgICArDQogICAgKwlz
ZXRfY29uZmlnX2ZpbGVuYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSk7DQogICAgKwljb25mX3Nl
dF9tZXNzYWdlX2NhbGxiYWNrKGNvbmZfbWVzc2FnZV9jYWxsYmFjayk7DQogICAgKwlkbyB7DQog
ICAgKwkJY29uZigmcm9vdG1lbnUsIE5VTEwpOw0KICAgICsJCXJlcyA9IGhhbmRsZV9leGl0KCk7
DQogICAgKwl9IHdoaWxlIChyZXMgPT0gS0VZX0VTQyk7DQogICAgKw0KICAgICsJcmV0dXJuIHJl
czsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L21lbnUuYyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvbWVudS5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi5kOWQxNjQ2DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvbWVudS5jDQogICAgQEAgLTAsMCArMSw4NjcgQEANCiAgICArLy8g
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArLyoNCiAgICArICogQ29weXJp
Z2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgICsg
Ki8NCiAgICArDQogICAgKyNpbmNsdWRlIDxjdHlwZS5oPg0KICAgICsjaW5jbHVkZSA8c3RkYXJn
Lmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmluZy5oPg0K
ICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsNCiAgICArc3RhdGljIGNvbnN0IGNo
YXIgbm9oZWxwX3RleHRbXSA9ICJUaGVyZSBpcyBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBv
cHRpb24uIjsNCiAgICArDQogICAgK3N0cnVjdCBtZW51IHJvb3RtZW51Ow0KICAgICtzdGF0aWMg
c3RydWN0IG1lbnUgKipsYXN0X2VudHJ5X3B0cjsNCiAgICArDQogICAgK3N0cnVjdCBmaWxlICpm
aWxlX2xpc3Q7DQogICAgK3N0cnVjdCBmaWxlICpjdXJyZW50X2ZpbGU7DQogICAgKw0KICAgICt2
b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVudSwgY29uc3QgY2hhciAqZm10LCAuLi4pDQog
ICAgK3sNCiAgICArCXZhX2xpc3QgYXA7DQogICAgKwl2YV9zdGFydChhcCwgZm10KTsNCiAgICAr
CWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgbWVudS0+ZmlsZS0+bmFtZSwgbWVu
dS0+bGluZW5vKTsNCiAgICArCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7DQogICAgKwlmcHJp
bnRmKHN0ZGVyciwgIlxuIik7DQogICAgKwl2YV9lbmQoYXApOw0KICAgICt9DQogICAgKw0KICAg
ICtzdGF0aWMgdm9pZCBwcm9wX3dhcm4oc3RydWN0IHByb3BlcnR5ICpwcm9wLCBjb25zdCBjaGFy
ICpmbXQsIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBhcDsNCiAgICArCXZhX3N0YXJ0KGFw
LCBmbXQpOw0KICAgICsJZnByaW50ZihzdGRlcnIsICIlczolZDp3YXJuaW5nOiAiLCBwcm9wLT5m
aWxlLT5uYW1lLCBwcm9wLT5saW5lbm8pOw0KICAgICsJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFw
KTsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiXG4iKTsNCiAgICArCXZhX2VuZChhcCk7DQogICAg
K30NCiAgICArDQogICAgK3ZvaWQgX21lbnVfaW5pdCh2b2lkKQ0KICAgICt7DQogICAgKwljdXJy
ZW50X2VudHJ5ID0gY3VycmVudF9tZW51ID0gJnJvb3RtZW51Ow0KICAgICsJbGFzdF9lbnRyeV9w
dHIgPSAmcm9vdG1lbnUubGlzdDsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBtZW51X2FkZF9l
bnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBtZW51ICptZW51
Ow0KICAgICsNCiAgICArCW1lbnUgPSB4bWFsbG9jKHNpemVvZigqbWVudSkpOw0KICAgICsJbWVt
c2V0KG1lbnUsIDAsIHNpemVvZigqbWVudSkpOw0KICAgICsJbWVudS0+c3ltID0gc3ltOw0KICAg
ICsJbWVudS0+cGFyZW50ID0gY3VycmVudF9tZW51Ow0KICAgICsJbWVudS0+ZmlsZSA9IGN1cnJl
bnRfZmlsZTsNCiAgICArCW1lbnUtPmxpbmVubyA9IHpjb25mX2xpbmVubygpOw0KICAgICsNCiAg
ICArCSpsYXN0X2VudHJ5X3B0ciA9IG1lbnU7DQogICAgKwlsYXN0X2VudHJ5X3B0ciA9ICZtZW51
LT5uZXh0Ow0KICAgICsJY3VycmVudF9lbnRyeSA9IG1lbnU7DQogICAgKwlpZiAoc3ltKQ0KICAg
ICsJCW1lbnVfYWRkX3N5bWJvbChQX1NZTUJPTCwgc3ltLCBOVUxMKTsNCiAgICArfQ0KICAgICsN
CiAgICArc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9pZCkNCiAgICArew0KICAgICsJbGFz
dF9lbnRyeV9wdHIgPSAmY3VycmVudF9lbnRyeS0+bGlzdDsNCiAgICArCXJldHVybiBjdXJyZW50
X21lbnUgPSBjdXJyZW50X2VudHJ5Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfZW5k
X21lbnUodm9pZCkNCiAgICArew0KICAgICsJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9tZW51
LT5uZXh0Ow0KICAgICsJY3VycmVudF9tZW51ID0gY3VycmVudF9tZW51LT5wYXJlbnQ7DQogICAg
K30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFJld3JpdGVzICdtJyB0byAnbScgJiYgTU9EVUxF
Uywgc28gdGhhdCBpdCBldmFsdWF0ZXMgdG8gJ24nIHdoZW4gcnVubmluZw0KICAgICsgKiB3aXRo
b3V0IG1vZHVsZXMNCiAgICArICovDQogICAgK3N0YXRpYyBzdHJ1Y3QgZXhwciAqcmV3cml0ZV9t
KHN0cnVjdCBleHByICplKQ0KICAgICt7DQogICAgKwlpZiAoIWUpDQogICAgKwkJcmV0dXJuIGU7
DQogICAgKw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7DQogICAgKwljYXNlIEVfTk9UOg0KICAg
ICsJCWUtPmxlZnQuZXhwciA9IHJld3JpdGVfbShlLT5sZWZ0LmV4cHIpOw0KICAgICsJCWJyZWFr
Ow0KICAgICsJY2FzZSBFX09SOg0KICAgICsJY2FzZSBFX0FORDoNCiAgICArCQllLT5sZWZ0LmV4
cHIgPSByZXdyaXRlX20oZS0+bGVmdC5leHByKTsNCiAgICArCQllLT5yaWdodC5leHByID0gcmV3
cml0ZV9tKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX1NZTUJP
TDoNCiAgICArCQkvKiBjaGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8NCiAgICArCQlp
ZiAoZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgKwkJCXJldHVybiBleHByX2FsbG9j
X2FuZChlLCBleHByX2FsbG9jX3N5bWJvbChtb2R1bGVzX3N5bSkpOw0KICAgICsJCWJyZWFrOw0K
ICAgICsJZGVmYXVsdDoNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArCXJldHVybiBlOw0K
ICAgICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVwKQ0K
ICAgICt7DQogICAgKwljdXJyZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJyZW50
X2VudHJ5LT5kZXAsIGRlcCk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgbWVudV9zZXRfdHlw
ZShpbnQgdHlwZSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltID0gY3VycmVudF9l
bnRyeS0+c3ltOw0KICAgICsNCiAgICArCWlmIChzeW0tPnR5cGUgPT0gdHlwZSkNCiAgICArCQly
ZXR1cm47DQogICAgKwlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgew0KICAgICsJCXN5bS0+
dHlwZSA9IHR5cGU7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsJbWVudV93YXJuKGN1
cnJlbnRfZW50cnksDQogICAgKwkJImlnbm9yaW5nIHR5cGUgcmVkZWZpbml0aW9uIG9mICclcycg
ZnJvbSAnJXMnIHRvICclcyciLA0KICAgICsJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hv
aWNlPiIsDQogICAgKwkJc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpLCBzeW1fdHlwZV9uYW1lKHR5
cGUpKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqbWVudV9h
ZGRfcHJvcChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHByICpl
eHByLCBzdHJ1Y3QgZXhwciAqZGVwKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnBy
b3AgPSBwcm9wX2FsbG9jKHR5cGUsIGN1cnJlbnRfZW50cnktPnN5bSk7DQogICAgKw0KICAgICsJ
cHJvcC0+bWVudSA9IGN1cnJlbnRfZW50cnk7DQogICAgKwlwcm9wLT5leHByID0gZXhwcjsNCiAg
ICArCXByb3AtPnZpc2libGUuZXhwciA9IGRlcDsNCiAgICArDQogICAgKwlpZiAocHJvbXB0KSB7
DQogICAgKwkJaWYgKGlzc3BhY2UoKnByb21wdCkpIHsNCiAgICArCQkJcHJvcF93YXJuKHByb3As
ICJsZWFkaW5nIHdoaXRlc3BhY2UgaWdub3JlZCIpOw0KICAgICsJCQl3aGlsZSAoaXNzcGFjZSgq
cHJvbXB0KSkNCiAgICArCQkJCXByb21wdCsrOw0KICAgICsJCX0NCiAgICArCQlpZiAoY3VycmVu
dF9lbnRyeS0+cHJvbXB0ICYmIGN1cnJlbnRfZW50cnkgIT0gJnJvb3RtZW51KQ0KICAgICsJCQlw
cm9wX3dhcm4ocHJvcCwgInByb21wdCByZWRlZmluZWQiKTsNCiAgICArDQogICAgKwkJLyogQXBw
bHkgYWxsIHVwcGVyIG1lbnVzJyB2aXNpYmlsaXRpZXMgdG8gYWN0dWFsIHByb21wdHMuICovDQog
ICAgKwkJaWYodHlwZSA9PSBQX1BST01QVCkgew0KICAgICsJCQlzdHJ1Y3QgbWVudSAqbWVudSA9
IGN1cnJlbnRfZW50cnk7DQogICAgKw0KICAgICsJCQl3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJl
bnQpICE9IE5VTEwpIHsNCiAgICArCQkJCXN0cnVjdCBleHByICpkdXBfZXhwcjsNCiAgICArDQog
ICAgKwkJCQlpZiAoIW1lbnUtPnZpc2liaWxpdHkpDQogICAgKwkJCQkJY29udGludWU7DQogICAg
KwkJCQkvKg0KICAgICsJCQkJICogRG8gbm90IGFkZCBhIHJlZmVyZW5jZSB0byB0aGUNCiAgICAr
CQkJCSAqIG1lbnUncyB2aXNpYmlsaXR5IGV4cHJlc3Npb24gYnV0DQogICAgKwkJCQkgKiB1c2Ug
YSBjb3B5IG9mIGl0LiAgT3RoZXJ3aXNlIHRoZQ0KICAgICsJCQkJICogZXhwcmVzc2lvbiByZWR1
Y3Rpb24gZnVuY3Rpb25zDQogICAgKwkJCQkgKiB3aWxsIG1vZGlmeSBleHByZXNzaW9ucyB0aGF0
IGhhdmUNCiAgICArCQkJCSAqIG11bHRpcGxlIHJlZmVyZW5jZXMgd2hpY2ggY2FuDQogICAgKwkJ
CQkgKiBjYXVzZSB1bndhbnRlZCBzaWRlIGVmZmVjdHMuDQogICAgKwkJCQkgKi8NCiAgICArCQkJ
CWR1cF9leHByID0gZXhwcl9jb3B5KG1lbnUtPnZpc2liaWxpdHkpOw0KICAgICsNCiAgICArCQkJ
CXByb3AtPnZpc2libGUuZXhwcg0KICAgICsJCQkJCT0gZXhwcl9hbGxvY19hbmQocHJvcC0+dmlz
aWJsZS5leHByLA0KICAgICsJCQkJCQkJIGR1cF9leHByKTsNCiAgICArCQkJfQ0KICAgICsJCX0N
CiAgICArDQogICAgKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0ID0gcHJvcDsNCiAgICArCX0NCiAg
ICArCXByb3AtPnRleHQgPSBwcm9tcHQ7DQogICAgKw0KICAgICsJcmV0dXJuIHByb3A7DQogICAg
K30NCiAgICArDQogICAgK3N0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRfcHJvbXB0KGVudW0gcHJv
cF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmRlcCkNCiAgICArew0KICAg
ICsJcmV0dXJuIG1lbnVfYWRkX3Byb3AodHlwZSwgcHJvbXB0LCBOVUxMLCBkZXApOw0KICAgICt9
DQogICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX3Zpc2liaWxpdHkoc3RydWN0IGV4cHIgKmV4cHIp
DQogICAgK3sNCiAgICArCWN1cnJlbnRfZW50cnktPnZpc2liaWxpdHkgPSBleHByX2FsbG9jX2Fu
ZChjdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5LA0KICAgICsJICAgIGV4cHIpOw0KICAgICt9DQog
ICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX2V4cHIoZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKmV4cHIsIHN0cnVjdCBleHByICpkZXApDQogICAgK3sNCiAgICArCW1lbnVfYWRkX3By
b3AodHlwZSwgTlVMTCwgZXhwciwgZGVwKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBtZW51
X2FkZF9zeW1ib2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1
Y3QgZXhwciAqZGVwKQ0KICAgICt7DQogICAgKwltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEwsIGV4
cHJfYWxsb2Nfc3ltYm9sKHN5bSksIGRlcCk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgbWVu
dV9hZGRfb3B0aW9uX21vZHVsZXModm9pZCkNCiAgICArew0KICAgICsJaWYgKG1vZHVsZXNfc3lt
KQ0KICAgICsJCXpjb25mX2Vycm9yKCJzeW1ib2wgJyVzJyByZWRlZmluZXMgb3B0aW9uICdtb2R1
bGVzJyBhbHJlYWR5IGRlZmluZWQgYnkgc3ltYm9sICclcyciLA0KICAgICsJCQkgICAgY3VycmVu
dF9lbnRyeS0+c3ltLT5uYW1lLCBtb2R1bGVzX3N5bS0+bmFtZSk7DQogICAgKwltb2R1bGVzX3N5
bSA9IGN1cnJlbnRfZW50cnktPnN5bTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBtZW51X2Fk
ZF9vcHRpb25fZGVmY29uZmlnX2xpc3Qodm9pZCkNCiAgICArew0KICAgICsJaWYgKCFzeW1fZGVm
Y29uZmlnX2xpc3QpDQogICAgKwkJc3ltX2RlZmNvbmZpZ19saXN0ID0gY3VycmVudF9lbnRyeS0+
c3ltOw0KICAgICsJZWxzZSBpZiAoc3ltX2RlZmNvbmZpZ19saXN0ICE9IGN1cnJlbnRfZW50cnkt
PnN5bSkNCiAgICArCQl6Y29uZl9lcnJvcigidHJ5aW5nIHRvIHJlZGVmaW5lIGRlZmNvbmZpZyBz
eW1ib2wiKTsNCiAgICArCXN5bV9kZWZjb25maWdfbGlzdC0+ZmxhZ3MgfD0gU1lNQk9MX05PX1dS
SVRFOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX29wdGlvbl9hbGxub2NvbmZp
Z195KHZvaWQpDQogICAgK3sNCiAgICArCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0gU1lN
Qk9MX0FMTE5PQ09ORklHX1k7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbnQgbWVudV92
YWxpZGF0ZV9udW1iZXIoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgc3ltYm9sICpzeW0yKQ0K
ICAgICt7DQogICAgKwlyZXR1cm4gc3ltMi0+dHlwZSA9PSBTX0lOVCB8fCBzeW0yLT50eXBlID09
IFNfSEVYIHx8DQogICAgKwkgICAgICAgKHN5bTItPnR5cGUgPT0gU19VTktOT1dOICYmIHN5bV9z
dHJpbmdfdmFsaWQoc3ltLCBzeW0yLT5uYW1lKSk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRp
YyB2b2lkIHN5bV9jaGVja19wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJ
c3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltMjsNCiAgICAr
CWNoYXIgKnVzZTsNCiAgICArDQogICAgKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHBy
b3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJc3dpdGNoIChwcm9wLT50eXBlKSB7DQogICAgKwkJ
Y2FzZSBQX0RFRkFVTFQ6DQogICAgKwkJCWlmICgoc3ltLT50eXBlID09IFNfU1RSSU5HIHx8IHN5
bS0+dHlwZSA9PSBTX0lOVCB8fCBzeW0tPnR5cGUgPT0gU19IRVgpICYmDQogICAgKwkJCSAgICBw
cm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgICsJCQkJcHJvcF93YXJuKHByb3AsDQog
ICAgKwkJCQkgICAgImRlZmF1bHQgZm9yIGNvbmZpZyBzeW1ib2wgJyVzJyINCiAgICArCQkJCSAg
ICAiIG11c3QgYmUgYSBzaW5nbGUgc3ltYm9sIiwgc3ltLT5uYW1lKTsNCiAgICArCQkJaWYgKHBy
b3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpDQogICAgKwkJCQlicmVhazsNCiAgICArCQkJc3lt
MiA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsNCiAgICArCQkJaWYgKHN5bS0+dHlwZSA9PSBTX0hF
WCB8fCBzeW0tPnR5cGUgPT0gU19JTlQpIHsNCiAgICArCQkJCWlmICghbWVudV92YWxpZGF0ZV9u
dW1iZXIoc3ltLCBzeW0yKSkNCiAgICArCQkJCQlwcm9wX3dhcm4ocHJvcCwNCiAgICArCQkJCQkg
ICAgIiclcyc6IG51bWJlciBpcyBpbnZhbGlkIiwNCiAgICArCQkJCQkgICAgc3ltLT5uYW1lKTsN
CiAgICArCQkJfQ0KICAgICsJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJCQlz
dHJ1Y3QgcHJvcGVydHkgKmNob2ljZV9wcm9wID0NCiAgICArCQkJCQlzeW1fZ2V0X2Nob2ljZV9w
cm9wKHN5bTIpOw0KICAgICsNCiAgICArCQkJCWlmICghY2hvaWNlX3Byb3AgfHwNCiAgICArCQkJ
CSAgICBwcm9wX2dldF9zeW1ib2woY2hvaWNlX3Byb3ApICE9IHN5bSkNCiAgICArCQkJCQlwcm9w
X3dhcm4ocHJvcCwNCiAgICArCQkJCQkJICAiY2hvaWNlIGRlZmF1bHQgc3ltYm9sICclcycgaXMg
bm90IGNvbnRhaW5lZCBpbiB0aGUgY2hvaWNlIiwNCiAgICArCQkJCQkJICBzeW0yLT5uYW1lKTsN
CiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfU0VMRUNUOg0KICAgICsJ
CWNhc2UgUF9JTVBMWToNCiAgICArCQkJdXNlID0gcHJvcC0+dHlwZSA9PSBQX1NFTEVDVCA/ICJz
ZWxlY3QiIDogImltcGx5IjsNCiAgICArCQkJc3ltMiA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsN
CiAgICArCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltLT50eXBlICE9IFNfVFJJ
U1RBVEUpDQogICAgKwkJCQlwcm9wX3dhcm4ocHJvcCwNCiAgICArCQkJCSAgICAiY29uZmlnIHN5
bWJvbCAnJXMnIHVzZXMgJXMsIGJ1dCBpcyAiDQogICAgKwkJCQkgICAgIm5vdCBib29sIG9yIHRy
aXN0YXRlIiwgc3ltLT5uYW1lLCB1c2UpOw0KICAgICsJCQllbHNlIGlmIChzeW0yLT50eXBlICE9
IFNfVU5LTk9XTiAmJg0KICAgICsJCQkJIHN5bTItPnR5cGUgIT0gU19CT09MRUFOICYmDQogICAg
KwkJCQkgc3ltMi0+dHlwZSAhPSBTX1RSSVNUQVRFKQ0KICAgICsJCQkJcHJvcF93YXJuKHByb3As
DQogICAgKwkJCQkgICAgIiclcycgaGFzIHdyb25nIHR5cGUuICclcycgb25seSAiDQogICAgKwkJ
CQkgICAgImFjY2VwdCBhcmd1bWVudHMgb2YgYm9vbCBhbmQgIg0KICAgICsJCQkJICAgICJ0cmlz
dGF0ZSB0eXBlIiwgc3ltMi0+bmFtZSwgdXNlKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2Fz
ZSBQX1JBTkdFOg0KICAgICsJCQlpZiAoc3ltLT50eXBlICE9IFNfSU5UICYmIHN5bS0+dHlwZSAh
PSBTX0hFWCkNCiAgICArCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgb25seSBhbGxvd2Vk
ICINCiAgICArCQkJCQkJImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsNCiAgICArCQkJaWYgKCFt
ZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPmxlZnQuc3ltKSB8fA0KICAgICsJ
CQkgICAgIW1lbnVfdmFsaWRhdGVfbnVtYmVyKHN5bSwgcHJvcC0+ZXhwci0+cmlnaHQuc3ltKSkN
CiAgICArCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgaW52YWxpZCIpOw0KICAgICsJCQli
cmVhazsNCiAgICArCQlkZWZhdWx0Og0KICAgICsJCQk7DQogICAgKwkJfQ0KICAgICsJfQ0KICAg
ICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfZmluYWxpemUoc3RydWN0IG1lbnUgKnBhcmVudCkN
CiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKm1lbnUsICpsYXN0X21lbnU7DQogICAgKwlzdHJ1
Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlzdHJ1
Y3QgZXhwciAqcGFyZW50ZGVwLCAqYmFzZWRlcCwgKmRlcCwgKmRlcDIsICoqZXA7DQogICAgKw0K
ICAgICsJc3ltID0gcGFyZW50LT5zeW07DQogICAgKwlpZiAocGFyZW50LT5saXN0KSB7DQogICAg
KwkJLyoNCiAgICArCQkgKiBUaGlzIG1lbnUgbm9kZSBoYXMgY2hpbGRyZW4uIFdlIChyZWN1cnNp
dmVseSkgcHJvY2VzcyB0aGVtDQogICAgKwkJICogYW5kIHByb3BhZ2F0ZSBwYXJlbnQgZGVwZW5k
ZW5jaWVzIGJlZm9yZSBtb3Zpbmcgb24uDQogICAgKwkJICovDQogICAgKw0KICAgICsJCWlmIChz
eW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJCWlmIChzeW0tPnR5cGUgPT0gU19V
TktOT1dOKSB7DQogICAgKwkJCQkvKiBmaW5kIHRoZSBmaXJzdCBjaG9pY2UgdmFsdWUgdG8gZmlu
ZCBvdXQgY2hvaWNlIHR5cGUgKi8NCiAgICArCQkJCWN1cnJlbnRfZW50cnkgPSBwYXJlbnQ7DQog
ICAgKwkJCQlmb3IgKG1lbnUgPSBwYXJlbnQtPmxpc3Q7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0
KSB7DQogICAgKwkJCQkJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5zeW0tPnR5cGUgIT0gU19VTktO
T1dOKSB7DQogICAgKwkJCQkJCW1lbnVfc2V0X3R5cGUobWVudS0+c3ltLT50eXBlKTsNCiAgICAr
CQkJCQkJYnJlYWs7DQogICAgKwkJCQkJfQ0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAgKwkJ
CS8qIHNldCB0aGUgdHlwZSBvZiB0aGUgcmVtYWluaW5nIGNob2ljZSB2YWx1ZXMgKi8NCiAgICAr
CQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgew0K
ICAgICsJCQkJY3VycmVudF9lbnRyeSA9IG1lbnU7DQogICAgKwkJCQlpZiAobWVudS0+c3ltICYm
IG1lbnUtPnN5bS0+dHlwZSA9PSBTX1VOS05PV04pDQogICAgKwkJCQkJbWVudV9zZXRfdHlwZShz
eW0tPnR5cGUpOw0KICAgICsJCQl9DQogICAgKw0KICAgICsJCQkvKg0KICAgICsJCQkgKiBVc2Ug
dGhlIGNob2ljZSBpdHNlbGYgYXMgdGhlIHBhcmVudCBkZXBlbmRlbmN5IG9mDQogICAgKwkJCSAq
IHRoZSBjb250YWluZWQgaXRlbXMuIFRoaXMgdHVybnMgdGhlIG1vZGUgb2YgdGhlDQogICAgKwkJ
CSAqIGNob2ljZSBpbnRvIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB2aXNpYmlsaXR5IG9mIHRoZQ0K
ICAgICsJCQkgKiBjaG9pY2UgdmFsdWUgc3ltYm9scy4NCiAgICArCQkJICovDQogICAgKwkJCXBh
cmVudGRlcCA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7DQogICAgKwkJfSBlbHNlIGlmIChwYXJl
bnQtPnByb21wdCkNCiAgICArCQkJLyogTWVudSBub2RlIGZvciAnbWVudScgKi8NCiAgICArCQkJ
cGFyZW50ZGVwID0gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwcjsNCiAgICArCQllbHNlDQog
ICAgKwkJCS8qIE1lbnUgbm9kZSBmb3IgJ2lmJyAqLw0KICAgICsJCQlwYXJlbnRkZXAgPSBwYXJl
bnQtPmRlcDsNCiAgICArDQogICAgKwkJLyogRm9yIGVhY2ggY2hpbGQgbWVudSBub2RlLi4uICov
DQogICAgKwkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4
dCkgew0KICAgICsJCQkvKg0KICAgICsJCQkgKiBQcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVuY2ll
cyB0byB0aGUgY2hpbGQgbWVudQ0KICAgICsJCQkgKiBub2RlLCBhbHNvIHJld3JpdGluZyBhbmQg
c2ltcGxpZnlpbmcgZXhwcmVzc2lvbnMNCiAgICArCQkJICovDQogICAgKwkJCWJhc2VkZXAgPSBy
ZXdyaXRlX20obWVudS0+ZGVwKTsNCiAgICArCQkJYmFzZWRlcCA9IGV4cHJfdHJhbnNmb3JtKGJh
c2VkZXApOw0KICAgICsJCQliYXNlZGVwID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KHBhcmVu
dGRlcCksIGJhc2VkZXApOw0KICAgICsJCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhi
YXNlZGVwKTsNCiAgICArCQkJbWVudS0+ZGVwID0gYmFzZWRlcDsNCiAgICArDQogICAgKwkJCWlm
IChtZW51LT5zeW0pDQogICAgKwkJCQkvKg0KICAgICsJCQkJICogTm90ZTogRm9yIHN5bWJvbHMs
IGFsbCBwcm9tcHRzIGFyZSBpbmNsdWRlZA0KICAgICsJCQkJICogdG9vIGluIHRoZSBzeW1ib2wn
cyBvd24gcHJvcGVydHkgbGlzdA0KICAgICsJCQkJICovDQogICAgKwkJCQlwcm9wID0gbWVudS0+
c3ltLT5wcm9wOw0KICAgICsJCQllbHNlDQogICAgKwkJCQkvKg0KICAgICsJCQkJICogRm9yIG5v
bi1zeW1ib2wgbWVudSBub2Rlcywgd2UganVzdCBuZWVkIHRvDQogICAgKwkJCQkgKiBoYW5kbGUg
dGhlIHByb21wdA0KICAgICsJCQkJICovDQogICAgKwkJCQlwcm9wID0gbWVudS0+cHJvbXB0Ow0K
ICAgICsNCiAgICArCQkJLyogRm9yIGVhY2ggcHJvcGVydHkuLi4gKi8NCiAgICArCQkJZm9yICg7
IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJCQlpZiAocHJvcC0+bWVudSAhPSBt
ZW51KQ0KICAgICsJCQkJCS8qDQogICAgKwkJCQkJICogVHdvIHBvc3NpYmlsaXRpZXM6DQogICAg
KwkJCQkJICoNCiAgICArCQkJCQkgKiAxLiBUaGUgcHJvcGVydHkgbGFja3MgZGVwZW5kZW5jaWVz
DQogICAgKwkJCQkJICogICAgYW5kIHNvIGlzbid0IGxvY2F0aW9uLXNwZWNpZmljLA0KICAgICsJ
CQkJCSAqICAgIGUuZy4gYW4gJ29wdGlvbicNCiAgICArCQkJCQkgKg0KICAgICsJCQkJCSAqIDIu
IFRoZSBwcm9wZXJ0eSBiZWxvbmdzIHRvIGEgc3ltYm9sDQogICAgKwkJCQkJICogICAgZGVmaW5l
ZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgYW5kDQogICAgKwkJCQkJICogICAgaXMgZnJvbSBzb21l
IG90aGVyIGxvY2F0aW9uLiBJdA0KICAgICsJCQkJCSAqICAgIHdpbGwgYmUgaGFuZGxlZCB0aGVy
ZSBpbiB0aGF0DQogICAgKwkJCQkJICogICAgY2FzZS4NCiAgICArCQkJCQkgKg0KICAgICsJCQkJ
CSAqIFNraXAgdGhlIHByb3BlcnR5Lg0KICAgICsJCQkJCSAqLw0KICAgICsJCQkJCWNvbnRpbnVl
Ow0KICAgICsNCiAgICArCQkJCS8qDQogICAgKwkJCQkgKiBQcm9wYWdhdGUgcGFyZW50IGRlcGVu
ZGVuY2llcyB0byB0aGUNCiAgICArCQkJCSAqIHByb3BlcnR5J3MgY29uZGl0aW9uLCByZXdyaXRp
bmcgYW5kDQogICAgKwkJCQkgKiBzaW1wbGlmeWluZyBleHByZXNzaW9ucyBhdCB0aGUgc2FtZSB0
aW1lDQogICAgKwkJCQkgKi8NCiAgICArCQkJCWRlcCA9IHJld3JpdGVfbShwcm9wLT52aXNpYmxl
LmV4cHIpOw0KICAgICsJCQkJZGVwID0gZXhwcl90cmFuc2Zvcm0oZGVwKTsNCiAgICArCQkJCWRl
cCA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShiYXNlZGVwKSwgZGVwKTsNCiAgICArCQkJCWRl
cCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZGVwKTsNCiAgICArCQkJCWlmIChtZW51LT5zeW0gJiYg
bWVudS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpDQogICAgKwkJCQkJZGVwID0gZXhwcl90cmFu
c19ib29sKGRlcCk7DQogICAgKwkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7DQogICAgKw0K
ICAgICsJCQkJLyoNCiAgICArCQkJCSAqIEhhbmRsZSBzZWxlY3RzIGFuZCBpbXBsaWVzLCB3aGlj
aCBtb2RpZnkgdGhlDQogICAgKwkJCQkgKiBkZXBlbmRlbmNpZXMgb2YgdGhlIHNlbGVjdGVkL2lt
cGxpZWQgc3ltYm9sDQogICAgKwkJCQkgKi8NCiAgICArCQkJCWlmIChwcm9wLT50eXBlID09IFBf
U0VMRUNUKSB7DQogICAgKwkJCQkJc3RydWN0IHN5bWJvbCAqZXMgPSBwcm9wX2dldF9zeW1ib2wo
cHJvcCk7DQogICAgKwkJCQkJZXMtPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3IoZXMtPnJl
dl9kZXAuZXhwciwNCiAgICArCQkJCQkJCWV4cHJfYWxsb2NfYW5kKGV4cHJfYWxsb2Nfc3ltYm9s
KG1lbnUtPnN5bSksIGV4cHJfY29weShkZXApKSk7DQogICAgKwkJCQl9IGVsc2UgaWYgKHByb3At
PnR5cGUgPT0gUF9JTVBMWSkgew0KICAgICsJCQkJCXN0cnVjdCBzeW1ib2wgKmVzID0gcHJvcF9n
ZXRfc3ltYm9sKHByb3ApOw0KICAgICsJCQkJCWVzLT5pbXBsaWVkLmV4cHIgPSBleHByX2FsbG9j
X29yKGVzLT5pbXBsaWVkLmV4cHIsDQogICAgKwkJCQkJCQlleHByX2FsbG9jX2FuZChleHByX2Fs
bG9jX3N5bWJvbChtZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOw0KICAgICsJCQkJfQ0KICAg
ICsJCQl9DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlpZiAoc3ltICYmIHN5bV9pc19jaG9pY2Uo
c3ltKSkNCiAgICArCQkJZXhwcl9mcmVlKHBhcmVudGRlcCk7DQogICAgKw0KICAgICsJCS8qDQog
ICAgKwkJICogUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlbiBpbiB0aGUgc2FtZSBmYXNoaW9u
IGJlZm9yZQ0KICAgICsJCSAqIG1vdmluZyBvbg0KICAgICsJCSAqLw0KICAgICsJCWZvciAobWVu
dSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpDQogICAgKwkJCW1lbnVf
ZmluYWxpemUobWVudSk7DQogICAgKwl9IGVsc2UgaWYgKHN5bSkgew0KICAgICsJCS8qDQogICAg
KwkJICogQXV0b21hdGljIHN1Ym1lbnUgY3JlYXRpb24uIElmIHN5bSBpcyBhIHN5bWJvbCBhbmQg
QSwgQiwgQywNCiAgICArCQkgKiAuLi4gYXJlIGNvbnNlY3V0aXZlIGl0ZW1zIChzeW1ib2xzLCBt
ZW51cywgaWZzLCBldGMuKSB0aGF0DQogICAgKwkJICogYWxsIGRlcGVuZCBvbiBzeW0sIHRoZW4g
dGhlIGZvbGxvd2luZyBtZW51IHN0cnVjdHVyZSBpcw0KICAgICsJCSAqIGNyZWF0ZWQ6DQogICAg
KwkJICoNCiAgICArCQkgKglzeW0NCiAgICArCQkgKgkgKy1BDQogICAgKwkJICoJICstQg0KICAg
ICsJCSAqCSArLUMNCiAgICArCQkgKgkgLi4uDQogICAgKwkJICoNCiAgICArCQkgKiBUaGlzIGFs
c28gd29ya3MgcmVjdXJzaXZlbHksIGdpdmluZyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZQ0KICAg
ICsJCSAqIGlmIEEgaXMgYSBzeW1ib2wgYW5kIEIgZGVwZW5kcyBvbiBBOg0KICAgICsJCSAqDQog
ICAgKwkJICoJc3ltDQogICAgKwkJICoJICstQQ0KICAgICsJCSAqCSB8ICstQg0KICAgICsJCSAq
CSArLUMNCiAgICArCQkgKgkgLi4uDQogICAgKwkJICovDQogICAgKw0KICAgICsJCWJhc2VkZXAg
PSBwYXJlbnQtPnByb21wdCA/IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIgOiBOVUxMOw0K
ICAgICsJCWJhc2VkZXAgPSBleHByX3RyYW5zX2NvbXBhcmUoYmFzZWRlcCwgRV9VTkVRVUFMLCAm
c3ltYm9sX25vKTsNCiAgICArCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhleHByX3Ry
YW5zZm9ybShiYXNlZGVwKSk7DQogICAgKw0KICAgICsJCS8qIEV4YW1pbmUgY29uc2VjdXRpdmUg
ZWxlbWVudHMgYWZ0ZXIgc3ltICovDQogICAgKwkJbGFzdF9tZW51ID0gTlVMTDsNCiAgICArCQlm
b3IgKG1lbnUgPSBwYXJlbnQtPm5leHQ7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7DQogICAg
KwkJCWRlcCA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dmlzaWJsZS5leHByIDogbWVu
dS0+ZGVwOw0KICAgICsJCQlpZiAoIWV4cHJfY29udGFpbnNfc3ltYm9sKGRlcCwgc3ltKSkNCiAg
ICArCQkJCS8qIE5vIGRlcGVuZGVuY3ksIHF1aXQgKi8NCiAgICArCQkJCWJyZWFrOw0KICAgICsJ
CQlpZiAoZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAsIHN5bSkpDQogICAgKwkJCQkvKiBBYnNvbHV0
ZSBkZXBlbmRlbmN5LCBwdXQgaW4gc3VibWVudSAqLw0KICAgICsJCQkJZ290byBuZXh0Ow0KICAg
ICsNCiAgICArCQkJLyoNCiAgICArCQkJICogQWxzbyBjb25zaWRlciBpdCBhIGRlcGVuZGVuY3kg
b24gc3ltIGlmIG91cg0KICAgICsJCQkgKiBkZXBlbmRlbmNpZXMgY29udGFpbiBzeW0gYW5kIGFy
ZSBhICJzdXBlcnNldCIgb2YNCiAgICArCQkJICogc3ltJ3MgZGVwZW5kZW5jaWVzLCBlLmcuICco
c3ltIHx8IFEpICYmIFInIHdoZW4gc3ltDQogICAgKwkJCSAqIGRlcGVuZHMgb24gUi4NCiAgICAr
CQkJICoNCiAgICArCQkJICogTm90ZSB0aGF0ICdSJyBtaWdodCBiZSBmcm9tIGFuIGVuY2xvc2lu
ZyBtZW51IG9yIGlmLA0KICAgICsJCQkgKiBtYWtpbmcgdGhpcyBhIG1vcmUgY29tbW9uIGNhc2Ug
dGhhbiBpdCBtaWdodCBzZWVtLg0KICAgICsJCQkgKi8NCiAgICArCQkJZGVwID0gZXhwcl90cmFu
c19jb21wYXJlKGRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsNCiAgICArCQkJZGVwID0gZXhw
cl9lbGltaW5hdGVfZHVwcyhleHByX3RyYW5zZm9ybShkZXApKTsNCiAgICArCQkJZGVwMiA9IGV4
cHJfY29weShiYXNlZGVwKTsNCiAgICArCQkJZXhwcl9lbGltaW5hdGVfZXEoJmRlcCwgJmRlcDIp
Ow0KICAgICsJCQlleHByX2ZyZWUoZGVwKTsNCiAgICArCQkJaWYgKCFleHByX2lzX3llcyhkZXAy
KSkgew0KICAgICsJCQkJLyogTm90IHN1cGVyc2V0LCBxdWl0ICovDQogICAgKwkJCQlleHByX2Zy
ZWUoZGVwMik7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCQkvKiBTdXBlcnNl
dCwgcHV0IGluIHN1Ym1lbnUgKi8NCiAgICArCQkJZXhwcl9mcmVlKGRlcDIpOw0KICAgICsJCW5l
eHQ6DQogICAgKwkJCW1lbnVfZmluYWxpemUobWVudSk7DQogICAgKwkJCW1lbnUtPnBhcmVudCA9
IHBhcmVudDsNCiAgICArCQkJbGFzdF9tZW51ID0gbWVudTsNCiAgICArCQl9DQogICAgKwkJZXhw
cl9mcmVlKGJhc2VkZXApOw0KICAgICsJCWlmIChsYXN0X21lbnUpIHsNCiAgICArCQkJcGFyZW50
LT5saXN0ID0gcGFyZW50LT5uZXh0Ow0KICAgICsJCQlwYXJlbnQtPm5leHQgPSBsYXN0X21lbnUt
Pm5leHQ7DQogICAgKwkJCWxhc3RfbWVudS0+bmV4dCA9IE5VTEw7DQogICAgKwkJfQ0KICAgICsN
CiAgICArCQlzeW0tPmRpcl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5kaXJfZGVwLmV4
cHIsIHBhcmVudC0+ZGVwKTsNCiAgICArCX0NCiAgICArCWZvciAobWVudSA9IHBhcmVudC0+bGlz
dDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsNCiAgICArCQlpZiAoc3ltICYmIHN5bV9pc19j
aG9pY2Uoc3ltKSAmJg0KICAgICsJCSAgICBtZW51LT5zeW0gJiYgIXN5bV9pc19jaG9pY2VfdmFs
dWUobWVudS0+c3ltKSkgew0KICAgICsJCQljdXJyZW50X2VudHJ5ID0gbWVudTsNCiAgICArCQkJ
bWVudS0+c3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hPSUNFVkFMOw0KICAgICsJCQlpZiAoIW1lbnUt
PnByb21wdCkNCiAgICArCQkJCW1lbnVfd2FybihtZW51LCAiY2hvaWNlIHZhbHVlIG11c3QgaGF2
ZSBhIHByb21wdCIpOw0KICAgICsJCQlmb3IgKHByb3AgPSBtZW51LT5zeW0tPnByb3A7IHByb3A7
IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJCQlpZiAocHJvcC0+dHlwZSA9PSBQX0RFRkFV
TFQpDQogICAgKwkJCQkJcHJvcF93YXJuKHByb3AsICJkZWZhdWx0cyBmb3IgY2hvaWNlICINCiAg
ICArCQkJCQkJICAidmFsdWVzIG5vdCBzdXBwb3J0ZWQiKTsNCiAgICArCQkJCWlmIChwcm9wLT5t
ZW51ID09IG1lbnUpDQogICAgKwkJCQkJY29udGludWU7DQogICAgKwkJCQlpZiAocHJvcC0+dHlw
ZSA9PSBQX1BST01QVCAmJg0KICAgICsJCQkJICAgIHByb3AtPm1lbnUtPnBhcmVudC0+c3ltICE9
IHN5bSkNCiAgICArCQkJCQlwcm9wX3dhcm4ocHJvcCwgImNob2ljZSB2YWx1ZSB1c2VkIG91dHNp
ZGUgaXRzIGNob2ljZSBncm91cCIpOw0KICAgICsJCQl9DQogICAgKwkJCS8qIE5vbi10cmlzdGF0
ZSBjaG9pY2UgdmFsdWVzIG9mIHRyaXN0YXRlIGNob2ljZXMgbXVzdA0KICAgICsJCQkgKiBkZXBl
bmQgb24gdGhlIGNob2ljZSBiZWluZyBzZXQgdG8gWS4gVGhlIGNob2ljZQ0KICAgICsJCQkgKiB2
YWx1ZXMnIGRlcGVuZGVuY2llcyB3ZXJlIHByb3BhZ2F0ZWQgdG8gdGhlaXINCiAgICArCQkJICog
cHJvcGVydGllcyBhYm92ZSwgc28gdGhlIGNoYW5nZSBoZXJlIG11c3QgYmUgcmUtDQogICAgKwkJ
CSAqIHByb3BhZ2F0ZWQuDQogICAgKwkJCSAqLw0KICAgICsJCQlpZiAoc3ltLT50eXBlID09IFNf
VFJJU1RBVEUgJiYgbWVudS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpIHsNCiAgICArCQkJCWJh
c2VkZXAgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltLCAmc3ltYm9sX3llcyk7DQogICAg
KwkJCQltZW51LT5kZXAgPSBleHByX2FsbG9jX2FuZChiYXNlZGVwLCBtZW51LT5kZXApOw0KICAg
ICsJCQkJZm9yIChwcm9wID0gbWVudS0+c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4
dCkgew0KICAgICsJCQkJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpDQogICAgKwkJCQkJCWNvbnRp
bnVlOw0KICAgICsJCQkJCXByb3AtPnZpc2libGUuZXhwciA9IGV4cHJfYWxsb2NfYW5kKGV4cHJf
Y29weShiYXNlZGVwKSwNCiAgICArCQkJCQkJCQkJICAgIHByb3AtPnZpc2libGUuZXhwcik7DQog
ICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICArCQkJbWVudV9hZGRfc3ltYm9sKFBfQ0hPSUNFLCBz
eW0sIE5VTEwpOw0KICAgICsJCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOw0KICAg
ICsJCQlmb3IgKGVwID0gJnByb3AtPmV4cHI7ICplcDsgZXAgPSAmKCplcCktPmxlZnQuZXhwcikN
CiAgICArCQkJCTsNCiAgICArCQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxMKTsN
CiAgICArCQkJKCplcCktPnJpZ2h0LnN5bSA9IG1lbnUtPnN5bTsNCiAgICArCQl9DQogICAgKw0K
ICAgICsJCS8qDQogICAgKwkJICogVGhpcyBjb2RlIHNlcnZlcyB0d28gcHVycG9zZXM6DQogICAg
KwkJICoNCiAgICArCQkgKiAoMSkgRmxhdHRlbmluZyAnaWYnIGJsb2Nrcywgd2hpY2ggZG8gbm90
IHNwZWNpZnkgYSBzdWJtZW51DQogICAgKwkJICogICAgIGFuZCBvbmx5IGFkZCBkZXBlbmRlbmNp
ZXMuDQogICAgKwkJICoNCiAgICArCQkgKiAgICAgKEF1dG9tYXRpYyBzdWJtZW51IGNyZWF0aW9u
IG1pZ2h0IHN0aWxsIGNyZWF0ZSBhIHN1Ym1lbnUNCiAgICArCQkgKiAgICAgZnJvbSBhbiAnaWYn
IGJlZm9yZSB0aGlzIGNvZGUgcnVucy4pDQogICAgKwkJICoNCiAgICArCQkgKiAoMikgIlVuZG9p
bmciIGFueSBhdXRvbWF0aWMgc3VibWVudXMgY3JlYXRlZCBlYXJsaWVyIGJlbG93DQogICAgKwkJ
ICogICAgIHByb21wdGxlc3Mgc3ltYm9scy4NCiAgICArCQkgKg0KICAgICsJCSAqIEJlZm9yZToN
CiAgICArCQkgKg0KICAgICsJCSAqCUENCiAgICArCQkgKglpZiAuLi4gKG9yIHByb21wdGxlc3Mg
c3ltYm9sKQ0KICAgICsJCSAqCSArLUINCiAgICArCQkgKgkgKy1DDQogICAgKwkJICoJRA0KICAg
ICsJCSAqDQogICAgKwkJICogQWZ0ZXI6DQogICAgKwkJICoNCiAgICArCQkgKglBDQogICAgKwkJ
ICoJaWYgLi4uIChvciBwcm9tcHRsZXNzIHN5bWJvbCkNCiAgICArCQkgKglCDQogICAgKwkJICoJ
Qw0KICAgICsJCSAqCUQNCiAgICArCQkgKi8NCiAgICArCQlpZiAobWVudS0+bGlzdCAmJiAoIW1l
bnUtPnByb21wdCB8fCAhbWVudS0+cHJvbXB0LT50ZXh0KSkgew0KICAgICsJCQlmb3IgKGxhc3Rf
bWVudSA9IG1lbnUtPmxpc3Q7IDsgbGFzdF9tZW51ID0gbGFzdF9tZW51LT5uZXh0KSB7DQogICAg
KwkJCQlsYXN0X21lbnUtPnBhcmVudCA9IHBhcmVudDsNCiAgICArCQkJCWlmICghbGFzdF9tZW51
LT5uZXh0KQ0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWxhc3RfbWVudS0+
bmV4dCA9IG1lbnUtPm5leHQ7DQogICAgKwkJCW1lbnUtPm5leHQgPSBtZW51LT5saXN0Ow0KICAg
ICsJCQltZW51LT5saXN0ID0gTlVMTDsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJ
aWYgKHN5bSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV0FSTkVEKSkgew0KICAgICsJCWlmIChz
eW0tPnR5cGUgPT0gU19VTktOT1dOKQ0KICAgICsJCQltZW51X3dhcm4ocGFyZW50LCAiY29uZmln
IHN5bWJvbCBkZWZpbmVkIHdpdGhvdXQgdHlwZSIpOw0KICAgICsNCiAgICArCQlpZiAoc3ltX2lz
X2Nob2ljZShzeW0pICYmICFwYXJlbnQtPnByb21wdCkNCiAgICArCQkJbWVudV93YXJuKHBhcmVu
dCwgImNob2ljZSBtdXN0IGhhdmUgYSBwcm9tcHQiKTsNCiAgICArDQogICAgKwkJLyogQ2hlY2sg
cHJvcGVydGllcyBjb25uZWN0ZWQgdG8gdGhpcyBzeW1ib2wgKi8NCiAgICArCQlzeW1fY2hlY2tf
cHJvcChzeW0pOw0KICAgICsJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dBUk5FRDsNCiAgICArCX0N
CiAgICArDQogICAgKwkvKg0KICAgICsJICogRm9yIG5vbi1vcHRpb25hbCBjaG9pY2VzLCBhZGQg
YSByZXZlcnNlIGRlcGVuZGVuY3kgKGNvcnJlc3BvbmRpbmcgdG8NCiAgICArCSAqIGEgc2VsZWN0
KSBvZiAnPHZpc2liaWxpdHk+ICYmIG0nLiBUaGlzIHByZXZlbnRzIHRoZSB1c2VyIGZyb20NCiAg
ICArCSAqIHNldHRpbmcgdGhlIGNob2ljZSBtb2RlIHRvICduJyB3aGVuIHRoZSBjaG9pY2UgaXMg
dmlzaWJsZS4NCiAgICArCSAqDQogICAgKwkgKiBUaGlzIHdvdWxkIGFsc28gd29yayBmb3Igbm9u
LWNob2ljZSBzeW1ib2xzLCBidXQgb25seSBub24tb3B0aW9uYWwNCiAgICArCSAqIGNob2ljZXMg
Y2xlYXIgU1lNQk9MX09QVElPTkFMIGFzIG9mIHdyaXRpbmcuIENob2ljZXMgYXJlIGltcGxlbWVu
dGVkDQogICAgKwkgKiBhcyBhIHR5cGUgb2Ygc3ltYm9sLg0KICAgICsJICovDQogICAgKwlpZiAo
c3ltICYmICFzeW1faXNfb3B0aW9uYWwoc3ltKSAmJiBwYXJlbnQtPnByb21wdCkgew0KICAgICsJ
CXN5bS0+cmV2X2RlcC5leHByID0gZXhwcl9hbGxvY19vcihzeW0tPnJldl9kZXAuZXhwciwNCiAg
ICArCQkJCWV4cHJfYWxsb2NfYW5kKHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIsDQogICAg
KwkJCQkJZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9tb2QpKSk7DQogICAgKwl9DQogICAgK30N
CiAgICArDQogICAgK2Jvb2wgbWVudV9oYXNfcHJvbXB0KHN0cnVjdCBtZW51ICptZW51KQ0KICAg
ICt7DQogICAgKwlpZiAoIW1lbnUtPnByb21wdCkNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAg
KwlyZXR1cm4gdHJ1ZTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogRGV0ZXJtaW5l
IGlmIGEgbWVudSBpcyBlbXB0eS4NCiAgICArICogQSBtZW51IGlzIGNvbnNpZGVyZWQgZW1wdHkg
aWYgaXQgY29udGFpbnMgbm8gb3Igb25seQ0KICAgICsgKiBpbnZpc2libGUgZW50cmllcy4NCiAg
ICArICovDQogICAgK2Jvb2wgbWVudV9pc19lbXB0eShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAr
ew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsNCiAgICArCWZvciAoY2hpbGQgPSBt
ZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCWlmIChtZW51
X2lzX3Zpc2libGUoY2hpbGQpKQ0KICAgICsJCQlyZXR1cm4oZmFsc2UpOw0KICAgICsJfQ0KICAg
ICsJcmV0dXJuKHRydWUpOw0KICAgICt9DQogICAgKw0KICAgICtib29sIG1lbnVfaXNfdmlzaWJs
ZShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0K
ICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJdHJpc3RhdGUgdmlzaWJsZTsNCiAgICAr
DQogICAgKwlpZiAoIW1lbnUtPnByb21wdCkNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKw0K
ICAgICsJaWYgKG1lbnUtPnZpc2liaWxpdHkpIHsNCiAgICArCQlpZiAoZXhwcl9jYWxjX3ZhbHVl
KG1lbnUtPnZpc2liaWxpdHkpID09IG5vKQ0KICAgICsJCQlyZXR1cm4gZmFsc2U7DQogICAgKwl9
DQogICAgKw0KICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsJaWYgKHN5bSkgew0KICAgICsJ
CXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgKwkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+dmlz
aWJsZS50cmk7DQogICAgKwl9IGVsc2UNCiAgICArCQl2aXNpYmxlID0gbWVudS0+cHJvbXB0LT52
aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwcik7
DQogICAgKw0KICAgICsJaWYgKHZpc2libGUgIT0gbm8pDQogICAgKwkJcmV0dXJuIHRydWU7DQog
ICAgKw0KICAgICsJaWYgKCFzeW0gfHwgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShtZW51LT5zeW0p
ID09IG5vKQ0KICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArDQogICAgKwlmb3IgKGNoaWxkID0g
bWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICArCQlpZiAobWVu
dV9pc192aXNpYmxlKGNoaWxkKSkgew0KICAgICsJCQlpZiAoc3ltKQ0KICAgICsJCQkJc3ltLT5m
bGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQogICAgKwkJCXJldHVybiB0cnVlOw0KICAgICsJCX0N
CiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gZmFsc2U7DQogICAgK30NCiAgICArDQogICAg
K2NvbnN0IGNoYXIgKm1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0K
ICAgICsJaWYgKG1lbnUtPnByb21wdCkNCiAgICArCQlyZXR1cm4gbWVudS0+cHJvbXB0LT50ZXh0
Ow0KICAgICsJZWxzZSBpZiAobWVudS0+c3ltKQ0KICAgICsJCXJldHVybiBtZW51LT5zeW0tPm5h
bWU7DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IG1lbnUg
Km1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJcmV0
dXJuICZyb290bWVudTsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IG1lbnUgKm1lbnVfZ2V0
X3BhcmVudF9tZW51KHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwllbnVtIHByb3Bf
dHlwZSB0eXBlOw0KICAgICsNCiAgICArCWZvciAoOyBtZW51ICE9ICZyb290bWVudTsgbWVudSA9
IG1lbnUtPnBhcmVudCkgew0KICAgICsJCXR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9t
cHQtPnR5cGUgOiAwOw0KICAgICsJCWlmICh0eXBlID09IFBfTUVOVSkNCiAgICArCQkJYnJlYWs7
DQogICAgKwl9DQogICAgKwlyZXR1cm4gbWVudTsNCiAgICArfQ0KICAgICsNCiAgICArYm9vbCBt
ZW51X2hhc19oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlyZXR1cm4gbWVu
dS0+aGVscCAhPSBOVUxMOw0KICAgICt9DQogICAgKw0KICAgICtjb25zdCBjaGFyICptZW51X2dl
dF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlpZiAobWVudS0+aGVscCkN
CiAgICArCQlyZXR1cm4gbWVudS0+aGVscDsNCiAgICArCWVsc2UNCiAgICArCQlyZXR1cm4gIiI7
DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGdldF9wcm9tcHRfc3RyKHN0cnVjdCBn
c3RyICpyLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3AsDQogICAgKwkJCSAgIHN0cnVjdCBsaXN0X2hl
YWQgKmhlYWQpDQogICAgK3sNCiAgICArCWludCBpLCBqOw0KICAgICsJc3RydWN0IG1lbnUgKnN1
Ym1lbnVbOF0sICptZW51LCAqbG9jYXRpb24gPSBOVUxMOw0KICAgICsJc3RydWN0IGp1bXBfa2V5
ICpqdW1wID0gTlVMTDsNCiAgICArDQogICAgKwlzdHJfcHJpbnRmKHIsICJQcm9tcHQ6ICVzXG4i
LCBwcm9wLT50ZXh0KTsNCiAgICArCW1lbnUgPSBwcm9wLT5tZW51LT5wYXJlbnQ7DQogICAgKwlm
b3IgKGkgPSAwOyBtZW51ICE9ICZyb290bWVudSAmJiBpIDwgODsgbWVudSA9IG1lbnUtPnBhcmVu
dCkgew0KICAgICsJCWJvb2wgYWNjZXNzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShtZW51KTsNCiAg
ICArDQogICAgKwkJc3VibWVudVtpKytdID0gbWVudTsNCiAgICArCQlpZiAobG9jYXRpb24gPT0g
TlVMTCAmJiBhY2Nlc3NpYmxlKQ0KICAgICsJCQlsb2NhdGlvbiA9IG1lbnU7DQogICAgKwl9DQog
ICAgKwlpZiAoaGVhZCAmJiBsb2NhdGlvbikgew0KICAgICsJCWp1bXAgPSB4bWFsbG9jKHNpemVv
ZihzdHJ1Y3QganVtcF9rZXkpKTsNCiAgICArDQogICAgKwkJaWYgKG1lbnVfaXNfdmlzaWJsZShw
cm9wLT5tZW51KSkgew0KICAgICsJCQkvKg0KICAgICsJCQkgKiBUaGVyZSBpcyBub3QgZW5vdWdo
IHJvb20gdG8gcHV0IHRoZSBoaW50IGF0IHRoZQ0KICAgICsJCQkgKiBiZWdpbm5pbmcgb2YgdGhl
ICJQcm9tcHQiIGxpbmUuIFB1dCB0aGUgaGludCBvbiB0aGUNCiAgICArCQkJICogbGFzdCAiTG9j
YXRpb24iIGxpbmUgZXZlbiB3aGVuIGl0IHdvdWxkIGJlbG9uZyBvbg0KICAgICsJCQkgKiB0aGUg
Zm9ybWVyLg0KICAgICsJCQkgKi8NCiAgICArCQkJanVtcC0+dGFyZ2V0ID0gcHJvcC0+bWVudTsN
CiAgICArCQl9IGVsc2UNCiAgICArCQkJanVtcC0+dGFyZ2V0ID0gbG9jYXRpb247DQogICAgKw0K
ICAgICsJCWlmIChsaXN0X2VtcHR5KGhlYWQpKQ0KICAgICsJCQlqdW1wLT5pbmRleCA9IDA7DQog
ICAgKwkJZWxzZQ0KICAgICsJCQlqdW1wLT5pbmRleCA9IGxpc3RfZW50cnkoaGVhZC0+cHJldiwg
c3RydWN0IGp1bXBfa2V5LA0KICAgICsJCQkJCQkgZW50cmllcyktPmluZGV4ICsgMTsNCiAgICAr
DQogICAgKwkJbGlzdF9hZGRfdGFpbCgmanVtcC0+ZW50cmllcywgaGVhZCk7DQogICAgKwl9DQog
ICAgKw0KICAgICsJaWYgKGkgPiAwKSB7DQogICAgKwkJc3RyX3ByaW50ZihyLCAiICBMb2NhdGlv
bjpcbiIpOw0KICAgICsJCWZvciAoaiA9IDQ7IC0taSA+PSAwOyBqICs9IDIpIHsNCiAgICArCQkJ
bWVudSA9IHN1Ym1lbnVbaV07DQogICAgKwkJCWlmIChqdW1wICYmIG1lbnUgPT0gbG9jYXRpb24p
DQogICAgKwkJCQlqdW1wLT5vZmZzZXQgPSBzdHJsZW4oci0+cyk7DQogICAgKwkJCXN0cl9wcmlu
dGYociwgIiUqYy0+ICVzIiwgaiwgJyAnLA0KICAgICsJCQkJICAgbWVudV9nZXRfcHJvbXB0KG1l
bnUpKTsNCiAgICArCQkJaWYgKG1lbnUtPnN5bSkgew0KICAgICsJCQkJc3RyX3ByaW50ZihyLCAi
ICglcyBbPSVzXSkiLCBtZW51LT5zeW0tPm5hbWUgPw0KICAgICsJCQkJCW1lbnUtPnN5bS0+bmFt
ZSA6ICI8Y2hvaWNlPiIsDQogICAgKwkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+c3lt
KSk7DQogICAgKwkJCX0NCiAgICArCQkJc3RyX2FwcGVuZChyLCAiXG4iKTsNCiAgICArCQl9DQog
ICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIGdldCBwcm9wZXJ0eSBvZiB0
eXBlIFBfU1lNQk9MDQogICAgKyAqLw0KICAgICtzdGF0aWMgc3RydWN0IHByb3BlcnR5ICpnZXRf
c3ltYm9sX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJv
cGVydHkgKnByb3AgPSBOVUxMOw0KICAgICsNCiAgICArCWZvcl9hbGxfcHJvcGVydGllcyhzeW0s
IHByb3AsIFBfU1lNQk9MKQ0KICAgICsJCWJyZWFrOw0KICAgICsJcmV0dXJuIHByb3A7DQogICAg
K30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGdldF9zeW1ib2xfcHJvcHNfc3RyKHN0cnVjdCBn
c3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sDQogICAgKwkJCQkgZW51bSBwcm9wX3R5cGUgdG9r
LCBjb25zdCBjaGFyICpwcmVmaXgpDQogICAgK3sNCiAgICArCWJvb2wgaGl0ID0gZmFsc2U7DQog
ICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKw0KICAgICsJZm9yX2FsbF9wcm9wZXJ0
aWVzKHN5bSwgcHJvcCwgdG9rKSB7DQogICAgKwkJaWYgKCFoaXQpIHsNCiAgICArCQkJc3RyX2Fw
cGVuZChyLCBwcmVmaXgpOw0KICAgICsJCQloaXQgPSB0cnVlOw0KICAgICsJCX0gZWxzZQ0KICAg
ICsJCQlzdHJfcHJpbnRmKHIsICIgJiYgIik7DQogICAgKwkJZXhwcl9nc3RyX3ByaW50KHByb3At
PmV4cHIsIHIpOw0KICAgICsJfQ0KICAgICsJaWYgKGhpdCkNCiAgICArCQlzdHJfYXBwZW5kKHIs
ICJcbiIpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBoZWFkIGlzIG9wdGlvbmFs
IGFuZCBtYXkgYmUgTlVMTA0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgZ2V0X3N5bWJvbF9z
dHIoc3RydWN0IGdzdHIgKnIsIHN0cnVjdCBzeW1ib2wgKnN5bSwNCiAgICArCQkgICAgc3RydWN0
IGxpc3RfaGVhZCAqaGVhZCkNCiAgICArew0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0K
ICAgICsNCiAgICArCWlmIChzeW0gJiYgc3ltLT5uYW1lKSB7DQogICAgKwkJc3RyX3ByaW50Zihy
LCAiU3ltYm9sOiAlcyBbPSVzXVxuIiwgc3ltLT5uYW1lLA0KICAgICsJCQkgICBzeW1fZ2V0X3N0
cmluZ192YWx1ZShzeW0pKTsNCiAgICArCQlzdHJfcHJpbnRmKHIsICJUeXBlICA6ICVzXG4iLCBz
eW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOw0KICAgICsJCWlmIChzeW0tPnR5cGUgPT0gU19JTlQg
fHwgc3ltLT50eXBlID09IFNfSEVYKSB7DQogICAgKwkJCXByb3AgPSBzeW1fZ2V0X3JhbmdlX3By
b3Aoc3ltKTsNCiAgICArCQkJaWYgKHByb3ApIHsNCiAgICArCQkJCXN0cl9wcmludGYociwgIlJh
bmdlIDogIik7DQogICAgKwkJCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7DQogICAg
KwkJCQlzdHJfYXBwZW5kKHIsICJcbiIpOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJfQ0K
ICAgICsJZm9yX2FsbF9wcm9tcHRzKHN5bSwgcHJvcCkNCiAgICArCQlnZXRfcHJvbXB0X3N0cihy
LCBwcm9wLCBoZWFkKTsNCiAgICArDQogICAgKwlwcm9wID0gZ2V0X3N5bWJvbF9wcm9wKHN5bSk7
DQogICAgKwlpZiAocHJvcCkgew0KICAgICsJCXN0cl9wcmludGYociwgIiAgRGVmaW5lZCBhdCAl
czolZFxuIiwgcHJvcC0+bWVudS0+ZmlsZS0+bmFtZSwNCiAgICArCQkJcHJvcC0+bWVudS0+bGlu
ZW5vKTsNCiAgICArCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAg
ICArCQkJc3RyX2FwcGVuZChyLCAiICBEZXBlbmRzIG9uOiAiKTsNCiAgICArCQkJZXhwcl9nc3Ry
X3ByaW50KHByb3AtPnZpc2libGUuZXhwciwgcik7DQogICAgKwkJCXN0cl9hcHBlbmQociwgIlxu
Iik7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCWdldF9zeW1ib2xfcHJvcHNfc3Ry
KHIsIHN5bSwgUF9TRUxFQ1QsICIgIFNlbGVjdHM6ICIpOw0KICAgICsJaWYgKHN5bS0+cmV2X2Rl
cC5leHByKSB7DQogICAgKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhw
ciwgciwgeWVzLCAiICBTZWxlY3RlZCBieSBbeV06XG4iKTsNCiAgICArCQlleHByX2dzdHJfcHJp
bnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCBtb2QsICIgIFNlbGVjdGVkIGJ5IFttXTpc
biIpOw0KICAgICsJCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5yZXZfZGVwLmV4cHIsIHIs
IG5vLCAiICBTZWxlY3RlZCBieSBbbl06XG4iKTsNCiAgICArCX0NCiAgICArDQogICAgKwlnZXRf
c3ltYm9sX3Byb3BzX3N0cihyLCBzeW0sIFBfSU1QTFksICIgIEltcGxpZXM6ICIpOw0KICAgICsJ
aWYgKHN5bS0+aW1wbGllZC5leHByKSB7DQogICAgKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChz
eW0tPmltcGxpZWQuZXhwciwgciwgeWVzLCAiICBJbXBsaWVkIGJ5IFt5XTpcbiIpOw0KICAgICsJ
CWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5pbXBsaWVkLmV4cHIsIHIsIG1vZCwgIiAgSW1w
bGllZCBieSBbbV06XG4iKTsNCiAgICArCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+aW1w
bGllZC5leHByLCByLCBubywgIiAgSW1wbGllZCBieSBbbl06XG4iKTsNCiAgICArCX0NCiAgICAr
DQogICAgKwlzdHJfYXBwZW5kKHIsICJcblxuIik7DQogICAgK30NCiAgICArDQogICAgK3N0cnVj
dCBnc3RyIGdldF9yZWxhdGlvbnNfc3RyKHN0cnVjdCBzeW1ib2wgKipzeW1fYXJyLCBzdHJ1Y3Qg
bGlzdF9oZWFkICpoZWFkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAg
KwlzdHJ1Y3QgZ3N0ciByZXMgPSBzdHJfbmV3KCk7DQogICAgKwlpbnQgaTsNCiAgICArDQogICAg
Kwlmb3IgKGkgPSAwOyBzeW1fYXJyICYmIChzeW0gPSBzeW1fYXJyW2ldKTsgaSsrKQ0KICAgICsJ
CWdldF9zeW1ib2xfc3RyKCZyZXMsIHN5bSwgaGVhZCk7DQogICAgKwlpZiAoIWkpDQogICAgKwkJ
c3RyX2FwcGVuZCgmcmVzLCAiTm8gbWF0Y2hlcyBmb3VuZC5cbiIpOw0KICAgICsJcmV0dXJuIHJl
czsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgbWVudV9nZXRfZXh0X2hlbHAoc3Ry
dWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBnc3RyICpoZWxwKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qg
c3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgKwljb25zdCBjaGFyICpoZWxwX3RleHQgPSBu
b2hlbHBfdGV4dDsNCiAgICArDQogICAgKwlpZiAobWVudV9oYXNfaGVscChtZW51KSkgew0KICAg
ICsJCWlmIChzeW0tPm5hbWUpDQogICAgKwkJCXN0cl9wcmludGYoaGVscCwgIiVzJXM6XG5cbiIs
IENPTkZJR18sIHN5bS0+bmFtZSk7DQogICAgKwkJaGVscF90ZXh0ID0gbWVudV9nZXRfaGVscCht
ZW51KTsNCiAgICArCX0NCiAgICArCXN0cl9wcmludGYoaGVscCwgIiVzXG4iLCBoZWxwX3RleHQp
Ow0KICAgICsJaWYgKHN5bSkNCiAgICArCQlnZXRfc3ltYm9sX3N0cihoZWxwLCBzeW0sIE5VTEwp
Ow0KICAgICt9DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29u
ZmlnLnNoIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2gNCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDAwMDAwMDAuLmQ5MjRjNTENCiAgICAtLS0gL2Rldi9u
dWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2gNCiAgICBA
QCAtMCwwICsxLDE4OSBAQA0KICAgICsjIS9iaW4vc2gNCiAgICArIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMA0KICAgICsjDQogICAgKyMgIG1lcmdlX2NvbmZpZy5zaCAtIFRha2Vz
IGEgbGlzdCBvZiBjb25maWcgZnJhZ21lbnQgdmFsdWVzLCBhbmQgbWVyZ2VzDQogICAgKyMgIHRo
ZW0gb25lIGJ5IG9uZS4gUHJvdmlkZXMgd2FybmluZ3Mgb24gb3ZlcnJpZGRlbiB2YWx1ZXMsIGFu
ZCBzcGVjaWZpZWQNCiAgICArIyAgdmFsdWVzIHRoYXQgZGlkIG5vdCBtYWtlIGl0IHRvIHRoZSBy
ZXN1bHRpbmcgLmNvbmZpZyBmaWxlIChkdWUgdG8gbWlzc2VkDQogICAgKyMgIGRlcGVuZGVuY2ll
cyBvciBjb25maWcgc3ltYm9sIHJlbW92YWwpLg0KICAgICsjDQogICAgKyMgIFBvcnRpb25zIHJl
dXNlZCBmcm9tIGtjb25mX2NoZWNrIGFuZCBnZW5lcmF0ZV9jZmc6DQogICAgKyMgIGh0dHA6Ly9n
aXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3lvY3RvLWtlcm5lbC10b29scy90cmVl
L3Rvb2xzL2tjb25mX2NoZWNrDQogICAgKyMgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9j
Z2l0L2NnaXQuY2dpL3lvY3RvLWtlcm5lbC10b29scy90cmVlL3Rvb2xzL2dlbmVyYXRlX2NmZw0K
ICAgICsjDQogICAgKyMgIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFdpbmQgUml2ZXIgU3lzdGVt
cywgSW5jLg0KICAgICsjICBDb3B5cmlnaHQgMjAxMSBMaW5hcm8NCiAgICArDQogICAgK2NsZWFu
X3VwKCkgew0KICAgICsJcm0gLWYgJFRNUF9GSUxFDQogICAgKwlybSAtZiAkTUVSR0VfRklMRQ0K
ICAgICsJZXhpdA0KICAgICt9DQogICAgK3RyYXAgY2xlYW5fdXAgSFVQIElOVCBURVJNDQogICAg
Kw0KICAgICt1c2FnZSgpIHsNCiAgICArCWVjaG8gIlVzYWdlOiAkMCBbT1BUSU9OU10gW0NPTkZJ
RyBbLi4uXV0iDQogICAgKwllY2hvICIgIC1oICAgIGRpc3BsYXkgdGhpcyBoZWxwIHRleHQiDQog
ICAgKwllY2hvICIgIC1tICAgIG9ubHkgbWVyZ2UgdGhlIGZyYWdtZW50cywgZG8gbm90IGV4ZWN1
dGUgdGhlIG1ha2UgY29tbWFuZCINCiAgICArCWVjaG8gIiAgLW4gICAgdXNlIGFsbG5vY29uZmln
IGluc3RlYWQgb2YgYWxsZGVmY29uZmlnIg0KICAgICsJZWNobyAiICAtciAgICBsaXN0IHJlZHVu
ZGFudCBlbnRyaWVzIHdoZW4gbWVyZ2luZyBmcmFnbWVudHMiDQogICAgKwllY2hvICIgIC15ICAg
IG1ha2UgYnVpbHRpbiBoYXZlIHByZWNlZGVuY2Ugb3ZlciBtb2R1bGVzIg0KICAgICsJZWNobyAi
ICAtTyAgICBkaXIgdG8gcHV0IGdlbmVyYXRlZCBvdXRwdXQgZmlsZXMuICBDb25zaWRlciBzZXR0
aW5nIFwkS0NPTkZJR19DT05GSUcgaW5zdGVhZC4iDQogICAgKwllY2hvDQogICAgKwllY2hvICJV
c2VkIHByZWZpeDogJyRDT05GSUdfUFJFRklYJy4gWW91IGNhbiByZWRlZmluZSBpdCB3aXRoIFwk
Q09ORklHXyBlbnZpcm9ubWVudCB2YXJpYWJsZS4iDQogICAgK30NCiAgICArDQogICAgK1JVTk1B
S0U9dHJ1ZQ0KICAgICtBTExUQVJHRVQ9YWxsZGVmY29uZmlnDQogICAgK1dBUk5SRURVTj1mYWxz
ZQ0KICAgICtCVUlMVElOPWZhbHNlDQogICAgK09VVFBVVD0uDQogICAgK0NPTkZJR19QUkVGSVg9
JHtDT05GSUdfLUNPTkZJR199DQogICAgKw0KICAgICt3aGlsZSB0cnVlOyBkbw0KICAgICsJY2Fz
ZSAkMSBpbg0KICAgICsJIi1uIikNCiAgICArCQlBTExUQVJHRVQ9YWxsbm9jb25maWcNCiAgICAr
CQlzaGlmdA0KICAgICsJCWNvbnRpbnVlDQogICAgKwkJOzsNCiAgICArCSItbSIpDQogICAgKwkJ
UlVOTUFLRT1mYWxzZQ0KICAgICsJCXNoaWZ0DQogICAgKwkJY29udGludWUNCiAgICArCQk7Ow0K
ICAgICsJIi1oIikNCiAgICArCQl1c2FnZQ0KICAgICsJCWV4aXQNCiAgICArCQk7Ow0KICAgICsJ
Ii1yIikNCiAgICArCQlXQVJOUkVEVU49dHJ1ZQ0KICAgICsJCXNoaWZ0DQogICAgKwkJY29udGlu
dWUNCiAgICArCQk7Ow0KICAgICsJIi15IikNCiAgICArCQlCVUlMVElOPXRydWUNCiAgICArCQlz
aGlmdA0KICAgICsJCWNvbnRpbnVlDQogICAgKwkJOzsNCiAgICArCSItTyIpDQogICAgKwkJaWYg
WyAtZCAkMiBdO3RoZW4NCiAgICArCQkJT1VUUFVUPSQoZWNobyAkMiB8IHNlZCAncy9cLyokLy8n
KQ0KICAgICsJCWVsc2UNCiAgICArCQkJZWNobyAib3V0cHV0IGRpcmVjdG9yeSAkMiBkb2VzIG5v
dCBleGlzdCIgMT4mMg0KICAgICsJCQlleGl0IDENCiAgICArCQlmaQ0KICAgICsJCXNoaWZ0IDIN
CiAgICArCQljb250aW51ZQ0KICAgICsJCTs7DQogICAgKwkqKQ0KICAgICsJCWJyZWFrDQogICAg
KwkJOzsNCiAgICArCWVzYWMNCiAgICArZG9uZQ0KICAgICsNCiAgICAraWYgWyAiJCMiIC1sdCAx
IF0gOyB0aGVuDQogICAgKwl1c2FnZQ0KICAgICsJZXhpdA0KICAgICtmaQ0KICAgICsNCiAgICAr
aWYgWyAteiAiJEtDT05GSUdfQ09ORklHIiBdOyB0aGVuDQogICAgKwlpZiBbICIkT1VUUFVUIiAh
PSAuIF07IHRoZW4NCiAgICArCQlLQ09ORklHX0NPTkZJRz0kKHJlYWRsaW5rIC1tIC0tICIkT1VU
UFVULy5jb25maWciKQ0KICAgICsJZWxzZQ0KICAgICsJCUtDT05GSUdfQ09ORklHPS5jb25maWcN
CiAgICArCWZpDQogICAgK2ZpDQogICAgKw0KICAgICtJTklURklMRT0kMQ0KICAgICtzaGlmdDsN
CiAgICArDQogICAgK2lmIFsgISAtciAiJElOSVRGSUxFIiBdOyB0aGVuDQogICAgKwllY2hvICJU
aGUgYmFzZSBmaWxlICckSU5JVEZJTEUnIGRvZXMgbm90IGV4aXN0LiAgRXhpdC4iID4mMg0KICAg
ICsJZXhpdCAxDQogICAgK2ZpDQogICAgKw0KICAgICtNRVJHRV9MSVNUPSQqDQogICAgK1NFRF9D
T05GSUdfRVhQMT0icy9eXCgke0NPTkZJR19QUkVGSVh9W2EtekEtWjAtOV9dKlwpPS4qL1wxL3Ai
DQogICAgK1NFRF9DT05GSUdfRVhQMj0icy9eIyBcKCR7Q09ORklHX1BSRUZJWH1bYS16QS1aMC05
X10qXCkgaXMgbm90IHNldCQvXDEvcCINCiAgICArDQogICAgK1RNUF9GSUxFPSQobWt0ZW1wIC4v
LnRtcC5jb25maWcuWFhYWFhYWFhYWCkNCiAgICArTUVSR0VfRklMRT0kKG1rdGVtcCAuLy5tZXJn
ZV90bXAuY29uZmlnLlhYWFhYWFhYWFgpDQogICAgKw0KICAgICtlY2hvICJVc2luZyAkSU5JVEZJ
TEUgYXMgYmFzZSINCiAgICArY2F0ICRJTklURklMRSA+ICRUTVBfRklMRQ0KICAgICsNCiAgICAr
IyBNZXJnZSBmaWxlcywgcHJpbnRpbmcgd2FybmluZ3Mgb24gb3ZlcnJpZGRlbiB2YWx1ZXMNCiAg
ICArZm9yIE9SSUdfTUVSR0VfRklMRSBpbiAkTUVSR0VfTElTVCA7IGRvDQogICAgKwllY2hvICJN
ZXJnaW5nICRPUklHX01FUkdFX0ZJTEUiDQogICAgKwlpZiBbICEgLXIgIiRPUklHX01FUkdFX0ZJ
TEUiIF07IHRoZW4NCiAgICArCQllY2hvICJUaGUgbWVyZ2UgZmlsZSAnJE9SSUdfTUVSR0VfRklM
RScgZG9lcyBub3QgZXhpc3QuICBFeGl0LiIgPiYyDQogICAgKwkJZXhpdCAxDQogICAgKwlmaQ0K
ICAgICsJY2F0ICRPUklHX01FUkdFX0ZJTEUgPiAkTUVSR0VfRklMRQ0KICAgICsJQ0ZHX0xJU1Q9
JChzZWQgLW4gLWUgIiRTRURfQ09ORklHX0VYUDEiIC1lICIkU0VEX0NPTkZJR19FWFAyIiAkTUVS
R0VfRklMRSkNCiAgICArDQogICAgKwlmb3IgQ0ZHIGluICRDRkdfTElTVCA7IGRvDQogICAgKwkJ
Z3JlcCAtcSAtdyAkQ0ZHICRUTVBfRklMRSB8fCBjb250aW51ZQ0KICAgICsJCVBSRVZfVkFMPSQo
Z3JlcCAtdyAkQ0ZHICRUTVBfRklMRSkNCiAgICArCQlORVdfVkFMPSQoZ3JlcCAtdyAkQ0ZHICRN
RVJHRV9GSUxFKQ0KICAgICsJCUJVSUxUSU5fRkxBRz1mYWxzZQ0KICAgICsJCWlmIFsgIiRCVUlM
VElOIiA9ICJ0cnVlIiBdICYmIFsgIiR7TkVXX1ZBTCNDT05GSUdfKj19IiA9ICJtIiBdICYmIFsg
IiR7UFJFVl9WQUwjQ09ORklHXyo9fSIgPSAieSIgXTsgdGhlbg0KICAgICsJCQllY2hvIFByZXZp
b3VzICB2YWx1ZTogJFBSRVZfVkFMDQogICAgKwkJCWVjaG8gTmV3IHZhbHVlOiAgICAgICAkTkVX
X1ZBTA0KICAgICsJCQllY2hvIC15IHBhc3NlZCwgd2lsbCBub3QgZGVtb3RlIHkgdG8gbQ0KICAg
ICsJCQllY2hvDQogICAgKwkJCUJVSUxUSU5fRkxBRz10cnVlDQogICAgKwkJZWxpZiBbICJ4JFBS
RVZfVkFMIiAhPSAieCRORVdfVkFMIiBdIDsgdGhlbg0KICAgICsJCQllY2hvIFZhbHVlIG9mICRD
RkcgaXMgcmVkZWZpbmVkIGJ5IGZyYWdtZW50ICRPUklHX01FUkdFX0ZJTEU6DQogICAgKwkJCWVj
aG8gUHJldmlvdXMgIHZhbHVlOiAkUFJFVl9WQUwNCiAgICArCQkJZWNobyBOZXcgdmFsdWU6ICAg
ICAgICRORVdfVkFMDQogICAgKwkJCWVjaG8NCiAgICArCQllbGlmIFsgIiRXQVJOUkVEVU4iID0g
InRydWUiIF07IHRoZW4NCiAgICArCQkJZWNobyBWYWx1ZSBvZiAkQ0ZHIGlzIHJlZHVuZGFudCBi
eSBmcmFnbWVudCAkT1JJR19NRVJHRV9GSUxFOg0KICAgICsJCWZpDQogICAgKwkJaWYgWyAiJEJV
SUxUSU5fRkxBRyIgPSAiZmFsc2UiIF07IHRoZW4NCiAgICArCQkJc2VkIC1pICIvJENGR1sgPV0v
ZCIgJFRNUF9GSUxFDQogICAgKwkJZWxzZQ0KICAgICsJCQlzZWQgLWkgIi8kQ0ZHWyA9XS9kIiAk
TUVSR0VfRklMRQ0KICAgICsJCWZpDQogICAgKwlkb25lDQogICAgKwljYXQgJE1FUkdFX0ZJTEUg
Pj4gJFRNUF9GSUxFDQogICAgK2RvbmUNCiAgICArDQogICAgK2lmIFsgIiRSVU5NQUtFIiA9ICJm
YWxzZSIgXTsgdGhlbg0KICAgICsJY3AgLVQgLS0gIiRUTVBfRklMRSIgIiRLQ09ORklHX0NPTkZJ
RyINCiAgICArCWVjaG8gIiMiDQogICAgKwllY2hvICIjIG1lcmdlZCBjb25maWd1cmF0aW9uIHdy
aXR0ZW4gdG8gJEtDT05GSUdfQ09ORklHIChuZWVkcyBtYWtlKSINCiAgICArCWVjaG8gIiMiDQog
ICAgKwljbGVhbl91cA0KICAgICsJZXhpdA0KICAgICtmaQ0KICAgICsNCiAgICArIyBJZiB3ZSBo
YXZlIGFuIG91dHB1dCBkaXIsIHNldHVwIHRoZSBPPSBhcmd1bWVudCwgb3RoZXJ3aXNlIGxlYXZl
DQogICAgKyMgaXQgYmxhbmssIHNpbmNlIE89LiB3aWxsIGNyZWF0ZSBhbiB1bm5lY2Vzc2FyeSAu
L3NvdXJjZSBzb2Z0bGluaw0KICAgICtPVVRQVVRfQVJHPSIiDQogICAgK2lmIFsgIiRPVVRQVVQi
ICE9ICIuIiBdIDsgdGhlbg0KICAgICsJT1VUUFVUX0FSRz0iTz0kT1VUUFVUIg0KICAgICtmaQ0K
ICAgICsNCiAgICArDQogICAgKyMgVXNlIHRoZSBtZXJnZWQgZmlsZSBhcyB0aGUgc3RhcnRpbmcg
cG9pbnQgZm9yOg0KICAgICsjIGFsbGRlZmNvbmZpZzogRmlsbHMgaW4gYW55IG1pc3Npbmcgc3lt
Ym9scyB3aXRoIEtjb25maWcgZGVmYXVsdA0KICAgICsjIGFsbG5vY29uZmlnOiBGaWxscyBpbiBh
bnkgbWlzc2luZyBzeW1ib2xzIHdpdGggIyBDT05GSUdfKiBpcyBub3Qgc2V0DQogICAgK21ha2Ug
S0NPTkZJR19BTExDT05GSUc9JFRNUF9GSUxFICRPVVRQVVRfQVJHICRBTExUQVJHRVQNCiAgICAr
DQogICAgKw0KICAgICsjIENoZWNrIGFsbCBzcGVjaWZpZWQgY29uZmlnIHZhbHVlcyB0b29rICht
aWdodCBoYXZlIG1pc3NlZC1kZXBlbmRlbmN5IGlzc3VlcykNCiAgICArZm9yIENGRyBpbiAkKHNl
ZCAtbiAtZSAiJFNFRF9DT05GSUdfRVhQMSIgLWUgIiRTRURfQ09ORklHX0VYUDIiICRUTVBfRklM
RSk7IGRvDQogICAgKw0KICAgICsJUkVRVUVTVEVEX1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICRU
TVBfRklMRSkNCiAgICArCUFDVFVBTF9WQUw9JChncmVwIC13IC1lICIkQ0ZHIiAiJEtDT05GSUdf
Q09ORklHIikNCiAgICArCWlmIFsgIngkUkVRVUVTVEVEX1ZBTCIgIT0gIngkQUNUVUFMX1ZBTCIg
XSA7IHRoZW4NCiAgICArCQllY2hvICJWYWx1ZSByZXF1ZXN0ZWQgZm9yICRDRkcgbm90IGluIGZp
bmFsIC5jb25maWciDQogICAgKwkJZWNobyAiUmVxdWVzdGVkIHZhbHVlOiAgJFJFUVVFU1RFRF9W
QUwiDQogICAgKwkJZWNobyAiQWN0dWFsIHZhbHVlOiAgICAgJEFDVFVBTF9WQUwiDQogICAgKwkJ
ZWNobyAiIg0KICAgICsJZmkNCiAgICArZG9uZQ0KICAgICsNCiAgICArY2xlYW5fdXANCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi1jZmcuc2ggYi9zdXBwb3J0L2tj
b25maWcubmV3L25jb25mLWNmZy5zaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5k
ZXggMDAwMDAwMC4uMDAxNTU5ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L25jb25mLWNmZy5zaA0KICAgIEBAIC0wLDAgKzEsNDcgQEANCiAgICArIyEv
YmluL3NoDQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArDQog
ICAgK1BLRz0ibmN1cnNlc3cgbWVudXcgcGFuZWx3Ig0KICAgICtQS0cyPSJuY3Vyc2VzIG1lbnUg
cGFuZWwiDQogICAgKw0KICAgICtpZiBbIC1uICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07
IHRoZW4NCiAgICArCWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzsgdGhlbg0KICAgICsJCWVj
aG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cpXCINCiAgICArCQllY2hvIGxp
YnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCINCiAgICArCQlleGl0IDANCiAgICArCWZp
DQogICAgKw0KICAgICsJaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHMjsgdGhlbg0KICAgICsJ
CWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiDQogICAgKwkJZWNo
byBsaWJzPVwiJChwa2ctY29uZmlnIC0tbGlicyAkUEtHMilcIg0KICAgICsJCWV4aXQgMA0KICAg
ICsJZmkNCiAgICArZmkNCiAgICArDQogICAgKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4g
Y2FzZSBwa2ctY29uZmlnIGlzIG5vdCBpbnN0YWxsZWQuDQogICAgKyMgKEV2ZW4gaWYgaXQgaXMg
aW5zdGFsbGVkLCBzb21lIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyBvcGVuU1VTRSBjYW5ub3QNCiAg
ICArIyBmaW5kIG5jdXJzZXMgYnkgcGtnLWNvbmZpZy4pDQogICAgK2lmIFsgLWYgL3Vzci9pbmNs
dWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuDQogICAgKwllY2hvIGNmbGFncz1cIi1EX0dO
VV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3dcIg0KICAgICsJZWNobyBsaWJzPVwiLWxu
Y3Vyc2VzdyAtbG1lbnV3IC1scGFuZWx3XCINCiAgICArCWV4aXQgMA0KICAgICtmaQ0KICAgICsN
CiAgICAraWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy9uY3Vyc2VzLmggXTsgdGhlbg0KICAg
ICsJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXNcIg0K
ICAgICsJZWNobyBsaWJzPVwiLWxuY3Vyc2VzIC1sbWVudSAtbHBhbmVsXCINCiAgICArCWV4aXQg
MA0KICAgICtmaQ0KICAgICsNCiAgICAraWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy5oIF07
IHRoZW4NCiAgICArCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRVwiDQogICAgKwllY2hvIGxp
YnM9XCItbG5jdXJzZXMgLWxtZW51IC1scGFuZWxcIg0KICAgICsJZXhpdCAwDQogICAgK2ZpDQog
ICAgKw0KICAgICtlY2hvID4mMiAiKiINCiAgICArZWNobyA+JjIgIiogVW5hYmxlIHRvIGZpbmQg
dGhlIG5jdXJzZXMgcGFja2FnZS4iDQogICAgK2VjaG8gPiYyICIqIEluc3RhbGwgbmN1cnNlcyAo
bmN1cnNlcy1kZXZlbCBvciBsaWJuY3Vyc2VzLWRldiINCiAgICArZWNobyA+JjIgIiogZGVwZW5k
aW5nIG9uIHlvdXIgZGlzdHJpYnV0aW9uKS4iDQogICAgK2VjaG8gPiYyICIqIg0KICAgICtleGl0
IDENCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9uY29uZi5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMDAwMDAwLi5jYmFmZTNiDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvbmNvbmYuYw0KICAgIEBAIC0wLDAgKzEsMTU1NSBAQA0KICAgICsvLyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQg
KEMpIDIwMDggTmlyIFR6YWNoYXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT4NCiAgICArICoNCiAg
ICArICogRGVyaXZlZCBmcm9tIG1lbnVjb25maWcuDQogICAgKyAqLw0KICAgICsjaWZuZGVmIF9H
TlVfU09VUkNFDQogICAgKyNkZWZpbmUgX0dOVV9TT1VSQ0UNCiAgICArI2VuZGlmDQogICAgKyNp
bmNsdWRlIDxzdHJpbmcuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsNCiAgICAr
I2luY2x1ZGUgImxrYy5oIg0KICAgICsjaW5jbHVkZSAibmNvbmYuaCINCiAgICArI2luY2x1ZGUg
PGN0eXBlLmg+DQogICAgKw0KICAgICtzdGF0aWMgY29uc3QgY2hhciBuY29uZl9nbG9iYWxfaGVs
cFtdID0NCiAgICArIkhlbHAgd2luZG93c1xuIg0KICAgICsiLS0tLS0tLS0tLS0tXG4iDQogICAg
KyJvICBHbG9iYWwgaGVscDogIFVubGVzcyBpbiBhIGRhdGEgZW50cnkgd2luZG93LCBwcmVzc2lu
ZyA8RjE+IHdpbGwgZ2l2ZSBcbiINCiAgICArIiAgIHlvdSB0aGUgZ2xvYmFsIGhlbHAgd2luZG93
LCB3aGljaCB5b3UgYXJlIGp1c3QgcmVhZGluZy5cbiINCiAgICArIlxuIg0KICAgICsibyAgQSBz
aG9ydCB2ZXJzaW9uIG9mIHRoZSBnbG9iYWwgaGVscCBpcyBhdmFpbGFibGUgYnkgcHJlc3Npbmcg
PEYzPi5cbiINCiAgICArIlxuIg0KICAgICsibyAgTG9jYWwgaGVscDogIFRvIGdldCBoZWxwIHJl
bGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBlbnRyeSwgdXNlIGFueVxuIg0KICAgICsiICAgb2Yg
PD8+IDxoPiwgb3IgaWYgaW4gYSBkYXRhIGVudHJ5IHdpbmRvdyB0aGVuIHByZXNzIDxGMT4uXG4i
DQogICAgKyJcbiINCiAgICArIlxuIg0KICAgICsiTWVudSBlbnRyaWVzXG4iDQogICAgKyItLS0t
LS0tLS0tLS1cbiINCiAgICArIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJl
cyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIg0KICAgICsiYnVpbGQuICBLZXJuZWwg
ZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIHJlbW92ZWQu
XG4iDQogICAgKyJQYXJhbWV0ZXJzIG11c3QgYmUgZW50ZXJlZCBhcyB0ZXh0IG9yIGRlY2ltYWwg
b3IgaGV4YWRlY2ltYWwgbnVtYmVycy5cbiINCiAgICArIlxuIg0KICAgICsiTWVudSBlbnRyaWVz
IGJlZ2lubmluZyB3aXRoIGZvbGxvd2luZyBicmFjZXMgcmVwcmVzZW50IGZlYXR1cmVzIHRoYXRc
biINCiAgICArIiAgWyBdICBjYW4gYmUgYnVpbHQgaW4gb3IgcmVtb3ZlZFxuIg0KICAgICsiICA8
ID4gIGNhbiBiZSBidWlsdCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3ZlZFxuIg0KICAgICsiICB7
IH0gIGNhbiBiZSBidWlsdCBpbiBvciBtb2R1bGFyaXplZCwgYXJlIHNlbGVjdGVkIGJ5IGFub3Ro
ZXIgZmVhdHVyZVxuIg0KICAgICsiICAtIC0gIGFyZSBzZWxlY3RlZCBieSBhbm90aGVyIGZlYXR1
cmVcbiINCiAgICArIiAgWFhYICBjYW5ub3QgYmUgc2VsZWN0ZWQuICBTeW1ib2wgSW5mbyA8RjI+
IHRlbGxzIHlvdSB3aHkuXG4iDQogICAgKyIqLCBNIG9yIHdoaXRlc3BhY2UgaW5zaWRlIGJyYWNl
cyBtZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXMgYSBtb2R1bGVcbiINCiAgICArIm9yIHRvIGV4
Y2x1ZGUgdGhlIGZlYXR1cmUgcmVzcGVjdGl2ZWx5LlxuIg0KICAgICsiXG4iDQogICAgKyJUbyBj
aGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQgd2l0aCB0aGUgbW92ZW1l
bnQga2V5c1xuIg0KICAgICsibGlzdGVkIGJlbG93IGFuZCBwcmVzcyA8eT4gdG8gYnVpbGQgaXQg
aW4sIDxtPiB0byBtYWtlIGl0IGEgbW9kdWxlIG9yXG4iDQogICAgKyI8bj4gdG8gcmVtb3ZlIGl0
LiAgWW91IG1heSBwcmVzcyB0aGUgPFNwYWNlPiBrZXkgdG8gY3ljbGUgdGhyb3VnaCB0aGVcbiIN
CiAgICArImF2YWlsYWJsZSBvcHRpb25zLlxuIg0KICAgICsiXG4iDQogICAgKyJBIHRyYWlsaW5n
IFwiLS0tPlwiIGRlc2lnbmF0ZXMgYSBzdWJtZW51LCBhIHRyYWlsaW5nIFwiLS0tLVwiIGFuXG4i
DQogICAgKyJlbXB0eSBzdWJtZW51LlxuIg0KICAgICsiXG4iDQogICAgKyJNZW51IG5hdmlnYXRp
b24ga2V5c1xuIg0KICAgICsiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgICsiTGluZXdpc2UgdXAgICAg
ICAgICAgICAgICAgIDxVcD5cbiINCiAgICArIkxpbmV3aXNlIGRvd24gICAgICAgICAgICAgICA8
RG93bj5cbiINCiAgICArIlBhZ2V3aXNlIHVwICAgICAgICAgICAgICAgICA8UGFnZSBVcD5cbiIN
CiAgICArIlBhZ2V3aXNlIGRvd24gICAgICAgICAgICAgICA8UGFnZSBEb3duPlxuIg0KICAgICsi
Rmlyc3QgZW50cnkgICAgICAgICAgICAgICAgIDxIb21lPlxuIg0KICAgICsiTGFzdCBlbnRyeSAg
ICAgICAgICAgICAgICAgIDxFbmQ+XG4iDQogICAgKyJFbnRlciBhIHN1Ym1lbnUgICAgICAgICAg
ICAgPFJpZ2h0PiAgPEVudGVyPlxuIg0KICAgICsiR28gYmFjayB0byBwYXJlbnQgbWVudSAgICAg
IDxMZWZ0PiAgIDxFc2M+ICA8RjU+XG4iDQogICAgKyJDbG9zZSBhIGhlbHAgd2luZG93ICAgICAg
ICAgPEVudGVyPiAgPEVzYz4gIDxGNT5cbiINCiAgICArIkNsb3NlIGVudHJ5IHdpbmRvdywgYXBw
bHkgICA8RW50ZXI+XG4iDQogICAgKyJDbG9zZSBlbnRyeSB3aW5kb3csIGZvcmdldCAgPEVzYz4g
IDxGNT5cbiINCiAgICArIlN0YXJ0IGluY3JlbWVudGFsLCBjYXNlLWluc2Vuc2l0aXZlIHNlYXJj
aCBmb3IgU1RSSU5HIGluIG1lbnUgZW50cmllcyxcbiINCiAgICArIiAgICBubyByZWdleCBzdXBw
b3J0LCBTVFJJTkcgaXMgZGlzcGxheWVkIGluIHVwcGVyIGxlZnQgY29ybmVyXG4iDQogICAgKyIg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+U1RSSU5HXG4iDQogICAgKyIgICAgUmVtb3Zl
IGxhc3QgY2hhcmFjdGVyICAgPEJhY2tzcGFjZT5cbiINCiAgICArIiAgICBKdW1wIHRvIG5leHQg
aGl0ICAgICAgICA8RG93bj5cbiINCiAgICArIiAgICBKdW1wIHRvIHByZXZpb3VzIGhpdCAgICA8
VXA+XG4iDQogICAgKyJFeGl0IG1lbnUgc2VhcmNoIG1vZGUgICAgICAgPC8+ICA8RXNjPlxuIg0K
ICAgICsiU2VhcmNoIGZvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3aXRoIG9yIHdpdGhvdXQg
bGVhZGluZyBDT05GSUdfXG4iDQogICAgKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEY4
PlJlZ0V4cHI8RW50ZXI+XG4iDQogICAgKyJWZXJib3NlIHNlYXJjaCBoZWxwICAgICAgICAgPEY4
PjxGMT5cbiINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArIlxuIg0KICAgICsiVW5sZXNz
IGluIGEgZGF0YSBlbnRyeSB3aW5kb3csIGtleSA8MT4gbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiA8
RjE+LFxuIg0KICAgICsiPDI+IGluc3RlYWQgb2YgPEYyPiwgZXRjLlxuIg0KICAgICsiXG4iDQog
ICAgKyJcbiINCiAgICArIlJhZGlvbGlzdCAoQ2hvaWNlIGxpc3QpXG4iDQogICAgKyItLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgICsiVXNlIHRoZSBtb3ZlbWVudCBrZXlzIGxpc3RlZCBh
Ym92ZSB0byBzZWxlY3QgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXRcbiINCiAgICArImFuZCBw
cmVzcyA8U3BhY2U+LlxuIg0KICAgICsiXG4iDQogICAgKyJcbiINCiAgICArIkRhdGEgZW50cnlc
biINCiAgICArIi0tLS0tLS0tLS1cbiINCiAgICArIkVudGVyIHRoZSByZXF1ZXN0ZWQgaW5mb3Jt
YXRpb24gYW5kIHByZXNzIDxFbnRlcj4uICBIZXhhZGVjaW1hbCB2YWx1ZXNcbiINCiAgICArIm1h
eSBiZSBlbnRlcmVkIHdpdGhvdXQgdGhlIFwiMHhcIiBwcmVmaXguXG4iDQogICAgKyJcbiINCiAg
ICArIlxuIg0KICAgICsiVGV4dCBCb3ggKEhlbHAgV2luZG93KVxuIg0KICAgICsiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLVxuIg0KICAgICsiVXNlIG1vdmVtZW50IGtleXMgYXMgbGlzdGVkIGluIHRh
YmxlIGFib3ZlLlxuIg0KICAgICsiXG4iDQogICAgKyJQcmVzcyBhbnkgb2YgPEVudGVyPiA8RXNj
PiA8cT4gPEY1PiA8Rjk+IHRvIGV4aXQuXG4iDQogICAgKyJcbiINCiAgICArIlxuIg0KICAgICsi
QWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXNcbiINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tXG4iDQogICAgKyJuY29uZmlnIHN1cHBvcnRzIHN3aXRjaGluZyBiZXR3ZWVu
IGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cbiINCiAgICArIlByZXNzIDxGNj4gdG8gc2F2ZSB5
b3VyIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFByZXNzIDxGNz4gYW5kIGVudGVyXG4iDQogICAg
KyJhIGZpbGUgbmFtZSB0byBsb2FkIGEgcHJldmlvdXNseSBzYXZlZCBjb25maWd1cmF0aW9uLlxu
Ig0KICAgICsiXG4iDQogICAgKyJcbiINCiAgICArIlRlcm1pbmFsIGNvbmZpZ3VyYXRpb25cbiIN
CiAgICArIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArIklmIHlvdSB1c2UgbmNvbmZp
ZyBpbiBhIHh0ZXJtIHdpbmRvdywgbWFrZSBzdXJlIHlvdXIgVEVSTSBlbnZpcm9ubWVudFxuIg0K
ICAgICsidmFyaWFibGUgc3BlY2lmaWVzIGEgdGVybWluYWwgY29uZmlndXJhdGlvbiB3aGljaCBz
dXBwb3J0cyBhdCBsZWFzdFxuIg0KICAgICsiMTYgY29sb3JzLiAgT3RoZXJ3aXNlIG5jb25maWcg
d2lsbCBsb29rIHJhdGhlciBiYWQuXG4iDQogICAgKyJcbiINCiAgICArIklmIHRoZSBcInN0dHkg
c2l6ZVwiIGNvbW1hbmQgcmVwb3J0cyB0aGUgY3VycmVudCB0ZXJtaW5hbHNpemUgY29ycmVjdGx5
LFxuIg0KICAgICsibmNvbmZpZyB3aWxsIGFkYXB0IHRvIHNpemVzIGxhcmdlciB0aGFuIHRoZSB0
cmFkaXRpb25hbCA4MHgyNSBcInN0YW5kYXJkXCJcbiINCiAgICArImFuZCBkaXNwbGF5IGxvbmdl
ciBtZW51cyBwcm9wZXJseS5cbiINCiAgICArIlxuIg0KICAgICsiXG4iDQogICAgKyJTaW5nbGUg
bWVudSBtb2RlXG4iDQogICAgKyItLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgKyJJZiB5b3UgcHJl
ZmVyIHRvIGhhdmUgYWxsIG9mIHRoZSBtZW51IGVudHJpZXMgbGlzdGVkIGluIGEgc2luZ2xlIG1l
bnUsXG4iDQogICAgKyJyYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBtdWx0aW1lbnUgaGllcmFyY2h5
LCBydW4gbmNvbmZpZyB3aXRoXG4iDQogICAgKyJOQ09ORklHX01PREUgZW52aXJvbm1lbnQgdmFy
aWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiAgRXhhbXBsZTpcbiINCiAgICArIlxuIg0KICAgICsi
bWFrZSBOQ09ORklHX01PREU9c2luZ2xlX21lbnUgbmNvbmZpZ1xuIg0KICAgICsiXG4iDQogICAg
KyI8RW50ZXI+IHdpbGwgdGhlbiB1bmZvbGQgdGhlIGFwcHJvcHJpYXRlIGNhdGVnb3J5LCBvciBm
b2xkIGl0IGlmIGl0XG4iDQogICAgKyJpcyBhbHJlYWR5IHVuZm9sZGVkLiAgRm9sZGVkIG1lbnUg
ZW50cmllcyB3aWxsIGJlIGRlc2lnbmF0ZWQgYnkgYVxuIg0KICAgICsibGVhZGluZyBcIisrPlwi
IGFuZCB1bmZvbGRlZCBlbnRyaWVzIGJ5IGEgbGVhZGluZyBcIi0tPlwiLlxuIg0KICAgICsiXG4i
DQogICAgKyJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5IGJlIGEgbGl0dGxlIG1v
cmUgQ1BVIGV4cGVuc2l2ZSB0aGFuXG4iDQogICAgKyJ0aGUgZGVmYXVsdCBtb2RlLCBlc3BlY2lh
bGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVuZm9sZGVkIHN1Ym1lbnVzLlxuIg0KICAgICsi
XG4iLA0KICAgICttZW51X25vX2ZfaW5zdHJ1Y3Rpb25zW10gPQ0KICAgICsiTGVnZW5kOiAgWypd
IGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJsZS5c
biINCiAgICArIlN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IGEgdHJhaWxpbmcgXCItLS0+XCIs
IGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iDQogICAgKyJcbiINCiAgICArIlVzZSB0aGUgZm9s
bG93aW5nIGtleXMgdG8gbmF2aWdhdGUgdGhlIG1lbnVzOlxuIg0KICAgICsiTW92ZSB1cCBvciBk
b3duIHdpdGggPFVwPiBhbmQgPERvd24+LlxuIg0KICAgICsiRW50ZXIgYSBzdWJtZW51IHdpdGgg
PEVudGVyPiBvciA8UmlnaHQ+LlxuIg0KICAgICsiRXhpdCBhIHN1Ym1lbnUgdG8gaXRzIHBhcmVu
dCBtZW51IHdpdGggPEVzYz4gb3IgPExlZnQ+LlxuIg0KICAgICsiUHJlc3NpbmcgPHk+IGluY2x1
ZGVzLCA8bj4gZXhjbHVkZXMsIDxtPiBtb2R1bGFyaXplcyBmZWF0dXJlcy5cbiINCiAgICArIlBy
ZXNzaW5nIDxTcGFjZT4gY3ljbGVzIHRocm91Z2ggdGhlIGF2YWlsYWJsZSBvcHRpb25zLlxuIg0K
ICAgICsiVG8gc2VhcmNoIGZvciBtZW51IGVudHJpZXMgcHJlc3MgPC8+LlxuIg0KICAgICsiPEVz
Yz4gYWx3YXlzIGxlYXZlcyB0aGUgY3VycmVudCB3aW5kb3cuXG4iDQogICAgKyJcbiINCiAgICAr
IllvdSBkbyBub3QgaGF2ZSBmdW5jdGlvbiBrZXlzIHN1cHBvcnQuXG4iDQogICAgKyJQcmVzcyA8
MT4gaW5zdGVhZCBvZiA8RjE+LCA8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4iDQogICAgKyJG
b3IgdmVyYm9zZSBnbG9iYWwgaGVscCB1c2Uga2V5IDwxPi5cbiINCiAgICArIkZvciBoZWxwIHJl
bGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIiwNCiAg
ICArbWVudV9pbnN0cnVjdGlvbnNbXSA9DQogICAgKyJMZWdlbmQ6ICBbKl0gYnVpbHQtaW4gIFsg
XSBleGNsdWRlZCAgPE0+IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxlLlxuIg0KICAgICsiU3Vi
bWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgYSB0cmFpbGluZyBcIi0tLT5cIiwgZW1wdHkgb25lcyBi
eSBcIi0tLS1cIi5cbiINCiAgICArIlxuIg0KICAgICsiVXNlIHRoZSBmb2xsb3dpbmcga2V5cyB0
byBuYXZpZ2F0ZSB0aGUgbWVudXM6XG4iDQogICAgKyJNb3ZlIHVwIG9yIGRvd24gd2l0aCA8VXA+
IG9yIDxEb3duPi5cbiINCiAgICArIkVudGVyIGEgc3VibWVudSB3aXRoIDxFbnRlcj4gb3IgPFJp
Z2h0Pi5cbiINCiAgICArIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJlbnQgbWVudSB3aXRoIDxF
c2M+IG9yIDxMZWZ0Pi5cbiINCiAgICArIlByZXNzaW5nIDx5PiBpbmNsdWRlcywgPG4+IGV4Y2x1
ZGVzLCA8bT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuXG4iDQogICAgKyJQcmVzc2luZyA8U3BhY2U+
IGN5Y2xlcyB0aHJvdWdoIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiINCiAgICArIlRvIHNlYXJj
aCBmb3IgbWVudSBlbnRyaWVzIHByZXNzIDwvPi5cbiINCiAgICArIjxFc2M+IGFsd2F5cyBsZWF2
ZXMgdGhlIGN1cnJlbnQgd2luZG93LlxuIg0KICAgICsiXG4iDQogICAgKyJQcmVzc2luZyA8MT4g
bWF5IGJlIHVzZWQgaW5zdGVhZCBvZiA8RjE+LCA8Mj4gaW5zdGVhZCBvZiA8RjI+LCBldGMuXG4i
DQogICAgKyJGb3IgdmVyYm9zZSBnbG9iYWwgaGVscCBwcmVzcyA8RjE+LlxuIg0KICAgICsiRm9y
IGhlbHAgcmVsYXRlZCB0byB0aGUgY3VycmVudCBtZW51IGVudHJ5IHByZXNzIDw/PiBvciA8aD4u
XG4iLA0KICAgICtyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQ0KICAgICsiUHJlc3MgPFVwPiwg
PERvd24+LCA8SG9tZT4gb3IgPEVuZD4gdG8gbmF2aWdhdGUgYSByYWRpb2xpc3QsIHNlbGVjdFxu
Ig0KICAgICsid2l0aCA8U3BhY2U+LlxuIg0KICAgICsiRm9yIGhlbHAgcmVsYXRlZCB0byB0aGUg
Y3VycmVudCBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIg0KICAgICsiRm9yIGdsb2JhbCBoZWxw
IHByZXNzIDxGMT4uXG4iLA0KICAgICtpbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50W10gPQ0KICAg
ICsiUGxlYXNlIGVudGVyIGEgZGVjaW1hbCB2YWx1ZS5cbiINCiAgICArIkZyYWN0aW9ucyB3aWxs
IG5vdCBiZSBhY2NlcHRlZC5cbiINCiAgICArIlByZXNzIDxFbnRlcj4gdG8gYXBwbHksIDxFc2M+
IHRvIGNhbmNlbC4iLA0KICAgICtpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4W10gPQ0KICAgICsi
UGxlYXNlIGVudGVyIGEgaGV4YWRlY2ltYWwgdmFsdWUuXG4iDQogICAgKyJQcmVzcyA8RW50ZXI+
IHRvIGFwcGx5LCA8RXNjPiB0byBjYW5jZWwuIiwNCiAgICAraW5wdXRib3hfaW5zdHJ1Y3Rpb25z
X3N0cmluZ1tdID0NCiAgICArIlBsZWFzZSBlbnRlciBhIHN0cmluZyB2YWx1ZS5cbiINCiAgICAr
IlByZXNzIDxFbnRlcj4gdG8gYXBwbHksIDxFc2M+IHRvIGNhbmNlbC4iLA0KICAgICtzZXRtb2Rf
dGV4dFtdID0NCiAgICArIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIgZmVhdHVyZSB3
aGljaCBoYXMgYmVlbiBjb25maWd1cmVkIGFzIGFcbiINCiAgICArIm1vZHVsZS4gIEFzIGEgcmVz
dWx0LCB0aGUgY3VycmVudCBmZWF0dXJlIHdpbGwgYmUgYnVpbHQgYXMgYSBtb2R1bGUgdG9vLiIs
DQogICAgK2xvYWRfY29uZmlnX3RleHRbXSA9DQogICAgKyJFbnRlciB0aGUgbmFtZSBvZiB0aGUg
Y29uZmlndXJhdGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuXG4iDQogICAgKyJBY2NlcHQgdGhl
IG5hbWUgc2hvd24gdG8gcmVzdG9yZSB0aGUgY29uZmlndXJhdGlvbiB5b3UgbGFzdFxuIg0KICAg
ICsicmV0cmlldmVkLiAgTGVhdmUgZW1wdHkgdG8gYWJvcnQuIiwNCiAgICArbG9hZF9jb25maWdf
aGVscFtdID0NCiAgICArIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVw
IHNldmVyYWwgZGlmZmVyZW50XG4iDQogICAgKyJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24g
YSBzaW5nbGUgbWFjaGluZS5cbiINCiAgICArIlxuIg0KICAgICsiSWYgeW91IGhhdmUgc2F2ZWQg
YSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGluIGEgZmlsZSBvdGhlciB0aGFuIHRoZVxuIg0KICAg
ICsiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8g
bG9hZCBhbmQgbW9kaWZ5XG4iDQogICAgKyJ0aGF0IGNvbmZpZ3VyYXRpb24uXG4iDQogICAgKyJc
biINCiAgICArIkxlYXZlIGVtcHR5IHRvIGFib3J0LlxuIiwNCiAgICArc2F2ZV9jb25maWdfdGV4
dFtdID0NCiAgICArIkVudGVyIGEgZmlsZW5hbWUgdG8gd2hpY2ggdGhpcyBjb25maWd1cmF0aW9u
IHNob3VsZCBiZSBzYXZlZFxuIg0KICAgICsiYXMgYW4gYWx0ZXJuYXRlLiAgTGVhdmUgZW1wdHkg
dG8gYWJvcnQuIiwNCiAgICArc2F2ZV9jb25maWdfaGVscFtdID0NCiAgICArIkZvciB2YXJpb3Vz
IHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVwIHNldmVyYWwgZGlmZmVyZW50XG4iDQogICAg
KyJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiINCiAgICAr
IlxuIg0KICAgICsiRW50ZXJpbmcgYSBmaWxlIG5hbWUgaGVyZSB3aWxsIGFsbG93IHlvdSB0byBs
YXRlciByZXRyaWV2ZSwgbW9kaWZ5XG4iDQogICAgKyJhbmQgdXNlIHRoZSBjdXJyZW50IGNvbmZp
Z3VyYXRpb24gYXMgYW4gYWx0ZXJuYXRlIHRvIHdoYXRldmVyXG4iDQogICAgKyJjb25maWd1cmF0
aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxuIg0KICAgICsiXG4i
DQogICAgKyJMZWF2ZSBlbXB0eSB0byBhYm9ydC5cbiIsDQogICAgK3NlYXJjaF9oZWxwW10gPQ0K
ICAgICsiU2VhcmNoIGZvciBzeW1ib2xzIChjb25maWd1cmF0aW9uIHZhcmlhYmxlIG5hbWVzIENP
TkZJR18qKSBhbmQgZGlzcGxheVxuIg0KICAgICsidGhlaXIgcmVsYXRpb25zLiAgUmVndWxhciBl
eHByZXNzaW9ucyBhcmUgc3VwcG9ydGVkLlxuIg0KICAgICsiRXhhbXBsZTogIFNlYXJjaCBmb3Ig
XCJeRk9PXCIuXG4iDQogICAgKyJSZXN1bHQ6XG4iDQogICAgKyItLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgICsi
U3ltYm9sOiBGT08gWyA9IG1dXG4iDQogICAgKyJQcm9tcHQ6IEZvbyBidXMgaXMgdXNlZCB0byBk
cml2ZSB0aGUgYmFyIEhXXG4iDQogICAgKyJEZWZpbmVkIGF0IGRyaXZlcnMvcGNpL0tjb25maWc6
NDdcbiINCiAgICArIkRlcGVuZHMgb246IFg4Nl9MT0NBTF9BUElDICYmIFg4Nl9JT19BUElDIHx8
IElBNjRcbiINCiAgICArIkxvY2F0aW9uOlxuIg0KICAgICsiICAtPiBCdXMgb3B0aW9ucyAoUENJ
LCBQQ01DSUEsIEVJU0EsIElTQSlcbiINCiAgICArIiAgICAtPiBQQ0kgc3VwcG9ydCAoUENJIFsg
PSB5XSlcbiINCiAgICArIiAgICAgIC0+IFBDSSBhY2Nlc3MgbW9kZSAoPGNob2ljZT4gWyA9IHld
KVxuIg0KICAgICsiU2VsZWN0czogTElCQ1JDMzJcbiINCiAgICArIlNlbGVjdGVkIGJ5OiBCQVJc
biINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgKyJvICBUaGUgbGluZSAnUHJvbXB0Oicgc2hvd3Mg
dGhlIHRleHQgZGlzcGxheWVkIGZvciB0aGlzIHN5bWJvbCBpblxuIg0KICAgICsiICAgdGhlIG1l
bnUgaGllcmFyY2h5LlxuIg0KICAgICsibyAgVGhlICdEZWZpbmVkIGF0JyBsaW5lIHRlbGxzIGF0
IHdoYXQgZmlsZSAvIGxpbmUgbnVtYmVyIHRoZSBzeW1ib2wgaXNcbiINCiAgICArIiAgIGRlZmlu
ZWQuXG4iDQogICAgKyJvICBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIGxpc3RzIHN5bWJvbHMgdGhh
dCBuZWVkIHRvIGJlIGRlZmluZWQgZm9yXG4iDQogICAgKyIgICB0aGlzIHN5bWJvbCB0byBiZSB2
aXNpYmxlIGFuZCBzZWxlY3RhYmxlIGluIHRoZSBtZW51LlxuIg0KICAgICsibyAgVGhlICdMb2Nh
dGlvbjonIGxpbmVzIHRlbGwsIHdoZXJlIGluIHRoZSBtZW51IHN0cnVjdHVyZSB0aGlzIHN5bWJv
bFxuIg0KICAgICsiICAgaXMgbG9jYXRlZC4gIEEgbG9jYXRpb24gZm9sbG93ZWQgYnkgYSBbID0g
eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpc1xuIg0KICAgICsiICAgYSBzZWxlY3RhYmxlIG1lbnUg
aXRlbSwgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGRpc3BsYXllZCBpbnNpZGVcbiINCiAgICAr
IiAgIGJyYWNrZXRzLlxuIg0KICAgICsibyAgVGhlICdTZWxlY3RzOicgbGluZSB0ZWxscywgd2hh
dCBzeW1ib2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkXG4iDQogICAgKyIgICBpZiB0
aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKS5cbiINCiAgICArIm8gIFRoZSAnU2VsZWN0
ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVkIHRoaXMgc3ltYm9sLlxu
Ig0KICAgICsiXG4iDQogICAgKyJPbmx5IHJlbGV2YW50IGxpbmVzIGFyZSBzaG93bi5cbiINCiAg
ICArIlxuXG4iDQogICAgKyJTZWFyY2ggZXhhbXBsZXM6XG4iDQogICAgKyJVU0IgID0+IGZpbmQg
YWxsIHN5bWJvbHMgY29udGFpbmluZyBVU0JcbiINCiAgICArIl5VU0IgPT4gZmluZCBhbGwgc3lt
Ym9scyBzdGFydGluZyB3aXRoIFVTQlxuIg0KICAgICsiVVNCJCA9PiBmaW5kIGFsbCBzeW1ib2xz
IGVuZGluZyB3aXRoIFVTQlxuIg0KICAgICsiXG4iOw0KICAgICsNCiAgICArc3RydWN0IG1pdGVt
IHsNCiAgICArCWNoYXIgc3RyWzI1Nl07DQogICAgKwljaGFyIHRhZzsNCiAgICArCXZvaWQgKnVz
cnB0cjsNCiAgICArCWludCBpc192aXNpYmxlOw0KICAgICt9Ow0KICAgICsNCiAgICArI2RlZmlu
ZSBNQVhfTUVOVV9JVEVNUyA0MDk2DQogICAgK3N0YXRpYyBpbnQgc2hvd19hbGxfaXRlbXM7DQog
ICAgK3N0YXRpYyBpbnQgaW5kZW50Ow0KICAgICtzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRf
bWVudTsNCiAgICArc3RhdGljIGludCBjaGlsZF9jb3VudDsNCiAgICArc3RhdGljIGludCBzaW5n
bGVfbWVudV9tb2RlOw0KICAgICsvKiB0aGUgd2luZG93IGluIHdoaWNoIGFsbCBpbmZvcm1hdGlv
biBhcHBlYXJzICovDQogICAgK3N0YXRpYyBXSU5ET1cgKm1haW5fd2luZG93Ow0KICAgICsvKiB0
aGUgbGFyZ2VzdCBzaXplIG9mIHRoZSBtZW51IHdpbmRvdyAqLw0KICAgICtzdGF0aWMgaW50IG13
aW5fbWF4X2xpbmVzOw0KICAgICtzdGF0aWMgaW50IG13aW5fbWF4X2NvbHM7DQogICAgKy8qIHRo
ZSB3aW5kb3cgaW4gd2hpY2ggd2Ugc2hvdyBvcHRpb24gYnV0dG9ucyAqLw0KICAgICtzdGF0aWMg
TUVOVSAqY3Vyc2VzX21lbnU7DQogICAgK3N0YXRpYyBJVEVNICpjdXJzZXNfbWVudV9pdGVtc1tN
QVhfTUVOVV9JVEVNU107DQogICAgK3N0YXRpYyBzdHJ1Y3QgbWl0ZW0ga19tZW51X2l0ZW1zW01B
WF9NRU5VX0lURU1TXTsNCiAgICArc3RhdGljIGludCBpdGVtc19udW07DQogICAgK3N0YXRpYyBp
bnQgZ2xvYmFsX2V4aXQ7DQogICAgKy8qIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgYnV0dG9uICov
DQogICAgK3N0YXRpYyBjb25zdCBjaGFyICpjdXJyZW50X2luc3RydWN0aW9ucyA9IG1lbnVfaW5z
dHJ1Y3Rpb25zOw0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKmRpYWxvZ19pbnB1dF9yZXN1bHQ7
DQogICAgK3N0YXRpYyBpbnQgZGlhbG9nX2lucHV0X3Jlc3VsdF9sZW47DQogICAgKw0KICAgICtz
dGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICArc3RhdGljIHZvaWQgY29u
Zl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtzdGF0aWMgdm9pZCBjb25mX3N0cmlu
ZyhzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK3N0YXRpYyB2b2lkIGNvbmZfbG9hZCh2b2lkKTsN
CiAgICArc3RhdGljIHZvaWQgY29uZl9zYXZlKHZvaWQpOw0KICAgICtzdGF0aWMgdm9pZCBzaG93
X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtzdGF0aWMgaW50IGRvX2V4aXQodm9pZCk7
DQogICAgK3N0YXRpYyB2b2lkIHNldHVwX3dpbmRvd3Modm9pZCk7DQogICAgK3N0YXRpYyB2b2lk
IHNlYXJjaF9jb25mKHZvaWQpOw0KICAgICsNCiAgICArdHlwZWRlZiB2b2lkICgqZnVuY3Rpb25f
a2V5X2hhbmRsZXJfdCkoaW50ICprZXksIHN0cnVjdCBtZW51ICptZW51KTsNCiAgICArc3RhdGlj
IHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAg
ICArc3RhdGljIHZvaWQgaGFuZGxlX2YyKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9p
dGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2YzKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAq
Y3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y0KGludCAqa2V5LCBzdHJ1
Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y1KGludCAq
a2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxl
X2Y2KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZv
aWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICAr
c3RhdGljIHZvaWQgaGFuZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVt
KTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y5KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3Vy
cmVudF9pdGVtKTsNCiAgICArDQogICAgK3N0cnVjdCBmdW5jdGlvbl9rZXlzIHsNCiAgICArCWNv
bnN0IGNoYXIgKmtleV9zdHI7DQogICAgKwljb25zdCBjaGFyICpmdW5jOw0KICAgICsJZnVuY3Rp
b25fa2V5IGtleTsNCiAgICArCWZ1bmN0aW9uX2tleV9oYW5kbGVyX3QgaGFuZGxlcjsNCiAgICAr
fTsNCiAgICArDQogICAgK3N0YXRpYyBjb25zdCBpbnQgZnVuY3Rpb25fa2V5c19udW0gPSA5Ow0K
ICAgICtzdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2tleXMgZnVuY3Rpb25fa2V5c1tdID0gew0KICAg
ICsJew0KICAgICsJCS5rZXlfc3RyID0gIkYxIiwNCiAgICArCQkuZnVuYyA9ICJIZWxwIiwNCiAg
ICArCQkua2V5ID0gRl9IRUxQLA0KICAgICsJCS5oYW5kbGVyID0gaGFuZGxlX2YxLA0KICAgICsJ
fSwNCiAgICArCXsNCiAgICArCQkua2V5X3N0ciA9ICJGMiIsDQogICAgKwkJLmZ1bmMgPSAiU3lt
SW5mbyIsDQogICAgKwkJLmtleSA9IEZfU1lNQk9MLA0KICAgICsJCS5oYW5kbGVyID0gaGFuZGxl
X2YyLA0KICAgICsJfSwNCiAgICArCXsNCiAgICArCQkua2V5X3N0ciA9ICJGMyIsDQogICAgKwkJ
LmZ1bmMgPSAiSGVscCAyIiwNCiAgICArCQkua2V5ID0gRl9JTlNUUywNCiAgICArCQkuaGFuZGxl
ciA9IGhhbmRsZV9mMywNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkJLmtleV9zdHIgPSAiRjQi
LA0KICAgICsJCS5mdW5jID0gIlNob3dBbGwiLA0KICAgICsJCS5rZXkgPSBGX0NPTkYsDQogICAg
KwkJLmhhbmRsZXIgPSBoYW5kbGVfZjQsDQogICAgKwl9LA0KICAgICsJew0KICAgICsJCS5rZXlf
c3RyID0gIkY1IiwNCiAgICArCQkuZnVuYyA9ICJCYWNrIiwNCiAgICArCQkua2V5ID0gRl9CQUNL
LA0KICAgICsJCS5oYW5kbGVyID0gaGFuZGxlX2Y1LA0KICAgICsJfSwNCiAgICArCXsNCiAgICAr
CQkua2V5X3N0ciA9ICJGNiIsDQogICAgKwkJLmZ1bmMgPSAiU2F2ZSIsDQogICAgKwkJLmtleSA9
IEZfU0FWRSwNCiAgICArCQkuaGFuZGxlciA9IGhhbmRsZV9mNiwNCiAgICArCX0sDQogICAgKwl7
DQogICAgKwkJLmtleV9zdHIgPSAiRjciLA0KICAgICsJCS5mdW5jID0gIkxvYWQiLA0KICAgICsJ
CS5rZXkgPSBGX0xPQUQsDQogICAgKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjcsDQogICAgKwl9LA0K
ICAgICsJew0KICAgICsJCS5rZXlfc3RyID0gIkY4IiwNCiAgICArCQkuZnVuYyA9ICJTeW1TZWFy
Y2giLA0KICAgICsJCS5rZXkgPSBGX1NFQVJDSCwNCiAgICArCQkuaGFuZGxlciA9IGhhbmRsZV9m
OCwNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkJLmtleV9zdHIgPSAiRjkiLA0KICAgICsJCS5m
dW5jID0gIkV4aXQiLA0KICAgICsJCS5rZXkgPSBGX0VYSVQsDQogICAgKwkJLmhhbmRsZXIgPSBo
YW5kbGVfZjksDQogICAgKwl9LA0KICAgICt9Ow0KICAgICsNCiAgICArc3RhdGljIHZvaWQgcHJp
bnRfZnVuY3Rpb25fbGluZSh2b2lkKQ0KICAgICt7DQogICAgKwlpbnQgaTsNCiAgICArCWludCBv
ZmZzZXQgPSAxOw0KICAgICsJY29uc3QgaW50IHNraXAgPSAxOw0KICAgICsJaW50IGxpbmVzID0g
Z2V0bWF4eShzdGRzY3IpOw0KICAgICsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBmdW5jdGlvbl9r
ZXlzX251bTsgaSsrKSB7DQogICAgKwkJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRy
aWJ1dGVzW0ZVTkNUSU9OX0hJR0hMSUdIVF0pOw0KICAgICsJCW12d3ByaW50dyhtYWluX3dpbmRv
dywgbGluZXMtMywgb2Zmc2V0LA0KICAgICsJCQkJIiVzIiwNCiAgICArCQkJCWZ1bmN0aW9uX2tl
eXNbaV0ua2V5X3N0cik7DQogICAgKwkJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRy
aWJ1dGVzW0ZVTkNUSU9OX1RFWFRdKTsNCiAgICArCQlvZmZzZXQgKz0gc3RybGVuKGZ1bmN0aW9u
X2tleXNbaV0ua2V5X3N0cik7DQogICAgKwkJbXZ3cHJpbnR3KG1haW5fd2luZG93LCBsaW5lcy0z
LA0KICAgICsJCQkJb2Zmc2V0LCAiJXMiLA0KICAgICsJCQkJZnVuY3Rpb25fa2V5c1tpXS5mdW5j
KTsNCiAgICArCQlvZmZzZXQgKz0gc3RybGVuKGZ1bmN0aW9uX2tleXNbaV0uZnVuYykgKyBza2lw
Ow0KICAgICsJfQ0KICAgICsJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVz
W05PUk1BTF0pOw0KICAgICt9DQogICAgKw0KICAgICsvKiBoZWxwICovDQogICAgK3N0YXRpYyB2
b2lkIGhhbmRsZV9mMShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkNCiAgICAr
ew0KICAgICsJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LA0KICAgICsJCQkiR2xvYmFsIGhl
bHAiLCBuY29uZl9nbG9iYWxfaGVscCk7DQogICAgKwlyZXR1cm47DQogICAgK30NCiAgICArDQog
ICAgKy8qIHN5bWJvbGUgaGVscCAqLw0KICAgICtzdGF0aWMgdm9pZCBoYW5kbGVfZjIoaW50ICpr
ZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgK3sNCiAgICArCXNob3dfaGVscChj
dXJyZW50X2l0ZW0pOw0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsvKiBpbnN0
cnVjdGlvbnMgKi8NCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2YzKGludCAqa2V5LCBzdHJ1Y3Qg
bWVudSAqY3VycmVudF9pdGVtKQ0KICAgICt7DQogICAgKwlzaG93X3Njcm9sbF93aW4obWFpbl93
aW5kb3csDQogICAgKwkJCSJTaG9ydCBoZWxwIiwNCiAgICArCQkJY3VycmVudF9pbnN0cnVjdGlv
bnMpOw0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsvKiBjb25maWcgKi8NCiAg
ICArc3RhdGljIHZvaWQgaGFuZGxlX2Y0KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9p
dGVtKQ0KICAgICt7DQogICAgKwlpbnQgcmVzID0gYnRuX2RpYWxvZyhtYWluX3dpbmRvdywNCiAg
ICArCQkJIlNob3cgYWxsIHN5bWJvbHM/IiwNCiAgICArCQkJMiwNCiAgICArCQkJIiAgIDxTaG93
IEFsbD4gICAiLA0KICAgICsJCQkiPERvbid0IHNob3cgYWxsPiIpOw0KICAgICsJaWYgKHJlcyA9
PSAwKQ0KICAgICsJCXNob3dfYWxsX2l0ZW1zID0gMTsNCiAgICArCWVsc2UgaWYgKHJlcyA9PSAx
KQ0KICAgICsJCXNob3dfYWxsX2l0ZW1zID0gMDsNCiAgICArDQogICAgKwlyZXR1cm47DQogICAg
K30NCiAgICArDQogICAgKy8qIGJhY2sgKi8NCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y1KGlu
dCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0KICAgICt7DQogICAgKwkqa2V5ID0g
S0VZX0xFRlQ7DQogICAgKwlyZXR1cm47DQogICAgK30NCiAgICArDQogICAgKy8qIHNhdmUgKi8N
CiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y2KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9pdGVtKQ0KICAgICt7DQogICAgKwljb25mX3NhdmUoKTsNCiAgICArCXJldHVybjsNCiAgICAr
fQ0KICAgICsNCiAgICArLyogbG9hZCAqLw0KICAgICtzdGF0aWMgdm9pZCBoYW5kbGVfZjcoaW50
ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgK3sNCiAgICArCWNvbmZfbG9h
ZCgpOw0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsvKiBzZWFyY2ggKi8NCiAg
ICArc3RhdGljIHZvaWQgaGFuZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9p
dGVtKQ0KICAgICt7DQogICAgKwlzZWFyY2hfY29uZigpOw0KICAgICsJcmV0dXJuOw0KICAgICt9
DQogICAgKw0KICAgICsvKiBleGl0ICovDQogICAgK3N0YXRpYyB2b2lkIGhhbmRsZV9mOShpbnQg
KmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkNCiAgICArew0KICAgICsJZG9fZXhpdCgp
Ow0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsvKiByZXR1cm4gIT0gMCB0byBp
bmRpY2F0ZSB0aGUga2V5IHdhcyBoYW5kbGVzICovDQogICAgK3N0YXRpYyBpbnQgcHJvY2Vzc19z
cGVjaWFsX2tleXMoaW50ICprZXksIHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlp
bnQgaTsNCiAgICArDQogICAgKwlpZiAoKmtleSA9PSBLRVlfUkVTSVpFKSB7DQogICAgKwkJc2V0
dXBfd2luZG93cygpOw0KICAgICsJCXJldHVybiAxOw0KICAgICsJfQ0KICAgICsNCiAgICArCWZv
ciAoaSA9IDA7IGkgPCBmdW5jdGlvbl9rZXlzX251bTsgaSsrKSB7DQogICAgKwkJaWYgKCprZXkg
PT0gS0VZX0YoZnVuY3Rpb25fa2V5c1tpXS5rZXkpIHx8DQogICAgKwkJICAgICprZXkgPT0gJzAn
ICsgZnVuY3Rpb25fa2V5c1tpXS5rZXkpew0KICAgICsJCQlmdW5jdGlvbl9rZXlzW2ldLmhhbmRs
ZXIoa2V5LCBtZW51KTsNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwkJfQ0KICAgICsJfQ0KICAg
ICsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjbGVh
bl9pdGVtcyh2b2lkKQ0KICAgICt7DQogICAgKwlpbnQgaTsNCiAgICArCWZvciAoaSA9IDA7IGN1
cnNlc19tZW51X2l0ZW1zW2ldOyBpKyspDQogICAgKwkJZnJlZV9pdGVtKGN1cnNlc19tZW51X2l0
ZW1zW2ldKTsNCiAgICArCWJ6ZXJvKGN1cnNlc19tZW51X2l0ZW1zLCBzaXplb2YoY3Vyc2VzX21l
bnVfaXRlbXMpKTsNCiAgICArCWJ6ZXJvKGtfbWVudV9pdGVtcywgc2l6ZW9mKGtfbWVudV9pdGVt
cykpOw0KICAgICsJaXRlbXNfbnVtID0gMDsNCiAgICArfQ0KICAgICsNCiAgICArdHlwZWRlZiBl
bnVtIHtNQVRDSF9USU5LRVJfUEFUVEVSTl9VUCwgTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTiwN
CiAgICArCUZJTkRfTkVYVF9NQVRDSF9ET1dOLCBGSU5EX05FWFRfTUFUQ0hfVVB9IG1hdGNoX2Y7
DQogICAgKw0KICAgICsvKiByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIGl0ZW0sIG9y
IC0xIGlmIG5vIHN1Y2ggaXRlbSBleGlzdHMgKi8NCiAgICArc3RhdGljIGludCBnZXRfbWV4dF9t
YXRjaChjb25zdCBjaGFyICptYXRjaF9zdHIsIG1hdGNoX2YgZmxhZykNCiAgICArew0KICAgICsJ
aW50IG1hdGNoX3N0YXJ0ID0gaXRlbV9pbmRleChjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpKTsN
CiAgICArCWludCBpbmRleDsNCiAgICArDQogICAgKwlpZiAoZmxhZyA9PSBGSU5EX05FWFRfTUFU
Q0hfRE9XTikNCiAgICArCQkrK21hdGNoX3N0YXJ0Ow0KICAgICsJZWxzZSBpZiAoZmxhZyA9PSBG
SU5EX05FWFRfTUFUQ0hfVVApDQogICAgKwkJLS1tYXRjaF9zdGFydDsNCiAgICArDQogICAgKwlp
bmRleCA9IG1hdGNoX3N0YXJ0Ow0KICAgICsJaW5kZXggPSAoaW5kZXggKyBpdGVtc19udW0pICUg
aXRlbXNfbnVtOw0KICAgICsJd2hpbGUgKHRydWUpIHsNCiAgICArCQljaGFyICpzdHIgPSBrX21l
bnVfaXRlbXNbaW5kZXhdLnN0cjsNCiAgICArCQlpZiAoc3RyY2FzZXN0cihzdHIsIG1hdGNoX3N0
cikgIT0gTlVMTCkNCiAgICArCQkJcmV0dXJuIGluZGV4Ow0KICAgICsJCWlmIChmbGFnID09IEZJ
TkRfTkVYVF9NQVRDSF9VUCB8fA0KICAgICsJCSAgICBmbGFnID09IE1BVENIX1RJTktFUl9QQVRU
RVJOX1VQKQ0KICAgICsJCQktLWluZGV4Ow0KICAgICsJCWVsc2UNCiAgICArCQkJKytpbmRleDsN
CiAgICArCQlpbmRleCA9IChpbmRleCArIGl0ZW1zX251bSkgJSBpdGVtc19udW07DQogICAgKwkJ
aWYgKGluZGV4ID09IG1hdGNoX3N0YXJ0KQ0KICAgICsJCQlyZXR1cm4gLTE7DQogICAgKwl9DQog
ICAgK30NCiAgICArDQogICAgKy8qIE1ha2UgYSBuZXcgaXRlbS4gKi8NCiAgICArc3RhdGljIHZv
aWQgaXRlbV9tYWtlKHN0cnVjdCBtZW51ICptZW51LCBjaGFyIHRhZywgY29uc3QgY2hhciAqZm10
LCAuLi4pDQogICAgK3sNCiAgICArCXZhX2xpc3QgYXA7DQogICAgKw0KICAgICsJaWYgKGl0ZW1z
X251bSA+IE1BWF9NRU5VX0lURU1TLTEpDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAgICArCWJ6
ZXJvKCZrX21lbnVfaXRlbXNbaXRlbXNfbnVtXSwgc2l6ZW9mKGtfbWVudV9pdGVtc1swXSkpOw0K
ICAgICsJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0udGFnID0gdGFnOw0KICAgICsJa19tZW51X2l0
ZW1zW2l0ZW1zX251bV0udXNycHRyID0gbWVudTsNCiAgICArCWlmIChtZW51ICE9IE5VTEwpDQog
ICAgKwkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uaXNfdmlzaWJsZSA9DQogICAgKwkJCW1lbnVf
aXNfdmlzaWJsZShtZW51KTsNCiAgICArCWVsc2UNCiAgICArCQlrX21lbnVfaXRlbXNbaXRlbXNf
bnVtXS5pc192aXNpYmxlID0gMTsNCiAgICArDQogICAgKwl2YV9zdGFydChhcCwgZm10KTsNCiAg
ICArCXZzbnByaW50ZihrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIsDQogICAgKwkJICBzaXpl
b2Yoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyKSwNCiAgICArCQkgIGZtdCwgYXApOw0KICAg
ICsJdmFfZW5kKGFwKTsNCiAgICArDQogICAgKwlpZiAoIWtfbWVudV9pdGVtc1tpdGVtc19udW1d
LmlzX3Zpc2libGUpDQogICAgKwkJbWVtY3B5KGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciwg
IlhYWCIsIDMpOw0KICAgICsNCiAgICArCWN1cnNlc19tZW51X2l0ZW1zW2l0ZW1zX251bV0gPSBu
ZXdfaXRlbSgNCiAgICArCQkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyLA0KICAgICsJCQlr
X21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIpOw0KICAgICsJc2V0X2l0ZW1fdXNlcnB0cihjdXJz
ZXNfbWVudV9pdGVtc1tpdGVtc19udW1dLA0KICAgICsJCQkma19tZW51X2l0ZW1zW2l0ZW1zX251
bV0pOw0KICAgICsJLyoNCiAgICArCWlmICgha19tZW51X2l0ZW1zW2l0ZW1zX251bV0uaXNfdmlz
aWJsZSkNCiAgICArCQlpdGVtX29wdHNfb2ZmKGN1cnNlc19tZW51X2l0ZW1zW2l0ZW1zX251bV0s
IE9fU0VMRUNUQUJMRSk7DQogICAgKwkqLw0KICAgICsNCiAgICArCWl0ZW1zX251bSsrOw0KICAg
ICsJY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSA9IE5VTEw7DQogICAgK30NCiAgICArDQog
ICAgKy8qIHZlcnkgaGFja2lzaC4gYWRkcyBhIHN0cmluZyB0byB0aGUgbGFzdCBpdGVtIGFkZGVk
ICovDQogICAgK3N0YXRpYyB2b2lkIGl0ZW1fYWRkX3N0cihjb25zdCBjaGFyICpmbXQsIC4uLikN
CiAgICArew0KICAgICsJdmFfbGlzdCBhcDsNCiAgICArCWludCBpbmRleCA9IGl0ZW1zX251bS0x
Ow0KICAgICsJY2hhciBuZXdfc3RyWzI1Nl07DQogICAgKwljaGFyIHRtcF9zdHJbMjU2XTsNCiAg
ICArDQogICAgKwlpZiAoaW5kZXggPCAwKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwl2
YV9zdGFydChhcCwgZm10KTsNCiAgICArCXZzbnByaW50ZihuZXdfc3RyLCBzaXplb2YobmV3X3N0
ciksIGZtdCwgYXApOw0KICAgICsJdmFfZW5kKGFwKTsNCiAgICArCXNucHJpbnRmKHRtcF9zdHIs
IHNpemVvZih0bXBfc3RyKSwgIiVzJXMiLA0KICAgICsJCQlrX21lbnVfaXRlbXNbaW5kZXhdLnN0
ciwgbmV3X3N0cik7DQogICAgKwlzdHJuY3B5KGtfbWVudV9pdGVtc1tpbmRleF0uc3RyLA0KICAg
ICsJCXRtcF9zdHIsDQogICAgKwkJc2l6ZW9mKGtfbWVudV9pdGVtc1tpbmRleF0uc3RyKSk7DQog
ICAgKw0KICAgICsJZnJlZV9pdGVtKGN1cnNlc19tZW51X2l0ZW1zW2luZGV4XSk7DQogICAgKwlj
dXJzZXNfbWVudV9pdGVtc1tpbmRleF0gPSBuZXdfaXRlbSgNCiAgICArCQkJa19tZW51X2l0ZW1z
W2luZGV4XS5zdHIsDQogICAgKwkJCWtfbWVudV9pdGVtc1tpbmRleF0uc3RyKTsNCiAgICArCXNl
dF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21lbnVfaXRlbXNbaW5kZXhdLA0KICAgICsJCQkma19tZW51
X2l0ZW1zW2luZGV4XSk7DQogICAgK30NCiAgICArDQogICAgKy8qIGdldCB0aGUgdGFnIG9mIHRo
ZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSAqLw0KICAgICtzdGF0aWMgY2hhciBpdGVtX3RhZyh2
b2lkKQ0KICAgICt7DQogICAgKwlJVEVNICpjdXI7DQogICAgKwlzdHJ1Y3QgbWl0ZW0gKm1jdXI7
DQogICAgKw0KICAgICsJY3VyID0gY3VycmVudF9pdGVtKGN1cnNlc19tZW51KTsNCiAgICArCWlm
IChjdXIgPT0gTlVMTCkNCiAgICArCQlyZXR1cm4gMDsNCiAgICArCW1jdXIgPSAoc3RydWN0IG1p
dGVtICopIGl0ZW1fdXNlcnB0cihjdXIpOw0KICAgICsJcmV0dXJuIG1jdXItPnRhZzsNCiAgICAr
fQ0KICAgICsNCiAgICArc3RhdGljIGludCBjdXJzZXNfaXRlbV9pbmRleCh2b2lkKQ0KICAgICt7
DQogICAgKwlyZXR1cm4gIGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKGN1cnNlc19tZW51KSk7DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkICppdGVtX2RhdGEodm9pZCkNCiAgICArew0K
ICAgICsJSVRFTSAqY3VyOw0KICAgICsJc3RydWN0IG1pdGVtICptY3VyOw0KICAgICsNCiAgICAr
CWN1ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7DQogICAgKwlpZiAoIWN1cikNCiAgICAr
CQlyZXR1cm4gTlVMTDsNCiAgICArCW1jdXIgPSAoc3RydWN0IG1pdGVtICopIGl0ZW1fdXNlcnB0
cihjdXIpOw0KICAgICsJcmV0dXJuIG1jdXItPnVzcnB0cjsNCiAgICArDQogICAgK30NCiAgICAr
DQogICAgK3N0YXRpYyBpbnQgaXRlbV9pc190YWcoY2hhciB0YWcpDQogICAgK3sNCiAgICArCXJl
dHVybiBpdGVtX3RhZygpID09IHRhZzsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGNoYXIg
ZmlsZW5hbWVbUEFUSF9NQVgrMV07DQogICAgK3N0YXRpYyBjaGFyIG1lbnVfYmFja3RpdGxlW1BB
VEhfTUFYKzEyOF07DQogICAgK3N0YXRpYyBjb25zdCBjaGFyICpzZXRfY29uZmlnX2ZpbGVuYW1l
KGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkNCiAgICArew0KICAgICsJaW50IHNpemU7DQog
ICAgKw0KICAgICsJc2l6ZSA9IHNucHJpbnRmKG1lbnVfYmFja3RpdGxlLCBzaXplb2YobWVudV9i
YWNrdGl0bGUpLA0KICAgICsJCQkiJXMgLSAlcyIsIGNvbmZpZ19maWxlbmFtZSwgcm9vdG1lbnUu
cHJvbXB0LT50ZXh0KTsNCiAgICArCWlmIChzaXplID49IHNpemVvZihtZW51X2JhY2t0aXRsZSkp
DQogICAgKwkJbWVudV9iYWNrdGl0bGVbc2l6ZW9mKG1lbnVfYmFja3RpdGxlKS0xXSA9ICdcMCc7
DQogICAgKw0KICAgICsJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUp
LCAiJXMiLCBjb25maWdfZmlsZW5hbWUpOw0KICAgICsJaWYgKHNpemUgPj0gc2l6ZW9mKGZpbGVu
YW1lKSkNCiAgICArCQlmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gJ1wwJzsNCiAgICAr
CXJldHVybiBtZW51X2JhY2t0aXRsZTsNCiAgICArfQ0KICAgICsNCiAgICArLyogcmV0dXJuID0g
MCBtZWFucyB3ZSBhcmUgc3VjY2Vzc2Z1bC4NCiAgICArICogLTEgbWVhbnMgZ28gb24gZG9pbmcg
d2hhdCB5b3Ugd2VyZSBkb2luZw0KICAgICsgKi8NCiAgICArc3RhdGljIGludCBkb19leGl0KHZv
aWQpDQogICAgK3sNCiAgICArCWludCByZXM7DQogICAgKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQo
KSkgew0KICAgICsJCWdsb2JhbF9leGl0ID0gMTsNCiAgICArCQlyZXR1cm4gMDsNCiAgICArCX0N
CiAgICArCXJlcyA9IGJ0bl9kaWFsb2cobWFpbl93aW5kb3csDQogICAgKwkJCSJEbyB5b3Ugd2lz
aCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRpb24/XG4iDQogICAgKwkJCQkiPEVTQz4gdG8g
Y2FuY2VsIGFuZCByZXN1bWUgbmNvbmZpZy4iLA0KICAgICsJCQkyLA0KICAgICsJCQkiICAgPHNh
dmU+ICAgIiwNCiAgICArCQkJIjxkb24ndCBzYXZlPiIpOw0KICAgICsJaWYgKHJlcyA9PSBLRVlf
RVhJVCkgew0KICAgICsJCWdsb2JhbF9leGl0ID0gMDsNCiAgICArCQlyZXR1cm4gLTE7DQogICAg
Kwl9DQogICAgKw0KICAgICsJLyogaWYgd2UgZ290IGhlcmUsIHRoZSB1c2VyIHJlYWxseSB3YW50
cyB0byBleGl0ICovDQogICAgKwlzd2l0Y2ggKHJlcykgew0KICAgICsJY2FzZSAwOg0KICAgICsJ
CXJlcyA9IGNvbmZfd3JpdGUoZmlsZW5hbWUpOw0KICAgICsJCWlmIChyZXMpDQogICAgKwkJCWJ0
bl9kaWFsb2coDQogICAgKwkJCQltYWluX3dpbmRvdywNCiAgICArCQkJCSJFcnJvciBkdXJpbmcg
d3JpdGluZyBvZiBjb25maWd1cmF0aW9uLlxuIg0KICAgICsJCQkJICAiWW91ciBjb25maWd1cmF0
aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIiwNCiAgICArCQkJCSAgMSwNCiAgICArCQkJCSAg
IjxPSz4iKTsNCiAgICArCQljb25mX3dyaXRlX2F1dG9jb25mKDApOw0KICAgICsJCWJyZWFrOw0K
ICAgICsJZGVmYXVsdDoNCiAgICArCQlidG5fZGlhbG9nKA0KICAgICsJCQltYWluX3dpbmRvdywN
CiAgICArCQkJIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIsDQog
ICAgKwkJCTEsDQogICAgKwkJCSI8T0s+Iik7DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAg
KwlnbG9iYWxfZXhpdCA9IDE7DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICAr
DQogICAgK3N0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpDQogICAgK3sNCiAgICArCXN0cnVj
dCBzeW1ib2wgKipzeW1fYXJyOw0KICAgICsJc3RydWN0IGdzdHIgcmVzOw0KICAgICsJc3RydWN0
IGdzdHIgdGl0bGU7DQogICAgKwljaGFyICpkaWFsb2dfaW5wdXQ7DQogICAgKwlpbnQgZHJlczsN
CiAgICArDQogICAgKwl0aXRsZSA9IHN0cl9uZXcoKTsNCiAgICArCXN0cl9wcmludGYoICZ0aXRs
ZSwgIkVudGVyIChzdWIpc3RyaW5nIG9yIHJlZ2V4cCB0byBzZWFyY2ggZm9yICINCiAgICArCQkJ
ICAgICAgIih3aXRoIG9yIHdpdGhvdXQgXCIlc1wiKSIsIENPTkZJR18pOw0KICAgICsNCiAgICAr
YWdhaW46DQogICAgKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LA0KICAgICsJ
CQkiU2VhcmNoIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVyIiwNCiAgICArCQkJc3RyX2dldCgmdGl0
bGUpLA0KICAgICsJCQkiIiwgJmRpYWxvZ19pbnB1dF9yZXN1bHQsICZkaWFsb2dfaW5wdXRfcmVz
dWx0X2xlbik7DQogICAgKwlzd2l0Y2ggKGRyZXMpIHsNCiAgICArCWNhc2UgMDoNCiAgICArCQli
cmVhazsNCiAgICArCWNhc2UgMToNCiAgICArCQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3cs
DQogICAgKwkJCQkiU2VhcmNoIENvbmZpZ3VyYXRpb24iLCBzZWFyY2hfaGVscCk7DQogICAgKwkJ
Z290byBhZ2FpbjsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJc3RyX2ZyZWUoJnRpdGxlKTsNCiAg
ICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKw0KICAgICsJLyogc3RyaXAgdGhlIHByZWZpeCBp
ZiBuZWNlc3NhcnkgKi8NCiAgICArCWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7
DQogICAgKwlpZiAoc3RybmNhc2VjbXAoZGlhbG9nX2lucHV0X3Jlc3VsdCwgQ09ORklHXywgc3Ry
bGVuKENPTkZJR18pKSA9PSAwKQ0KICAgICsJCWRpYWxvZ19pbnB1dCArPSBzdHJsZW4oQ09ORklH
Xyk7DQogICAgKw0KICAgICsJc3ltX2FyciA9IHN5bV9yZV9zZWFyY2goZGlhbG9nX2lucHV0KTsN
CiAgICArCXJlcyA9IGdldF9yZWxhdGlvbnNfc3RyKHN5bV9hcnIsIE5VTEwpOw0KICAgICsJZnJl
ZShzeW1fYXJyKTsNCiAgICArCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywNCiAgICArCQkJ
IlNlYXJjaCBSZXN1bHRzIiwgc3RyX2dldCgmcmVzKSk7DQogICAgKwlzdHJfZnJlZSgmcmVzKTsN
CiAgICArCXN0cl9mcmVlKCZ0aXRsZSk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICtzdGF0
aWMgdm9pZCBidWlsZF9jb25mKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlzdHJ1
Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlzdHJ1
Y3QgbWVudSAqY2hpbGQ7DQogICAgKwlpbnQgdHlwZSwgdG1wLCBkb2ludCA9IDI7DQogICAgKwl0
cmlzdGF0ZSB2YWw7DQogICAgKwljaGFyIGNoOw0KICAgICsNCiAgICArCWlmICghbWVudSB8fCAo
IXNob3dfYWxsX2l0ZW1zICYmICFtZW51X2lzX3Zpc2libGUobWVudSkpKQ0KICAgICsJCXJldHVy
bjsNCiAgICArDQogICAgKwlzeW0gPSBtZW51LT5zeW07DQogICAgKwlwcm9wID0gbWVudS0+cHJv
bXB0Ow0KICAgICsJaWYgKCFzeW0pIHsNCiAgICArCQlpZiAocHJvcCAmJiBtZW51ICE9IGN1cnJl
bnRfbWVudSkgew0KICAgICsJCQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQo
bWVudSk7DQogICAgKwkJCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAgICsJCQlwdHlwZSA9IG1l
bnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCQkJc3dp
dGNoIChwdHlwZSkgew0KICAgICsJCQljYXNlIFBfTUVOVToNCiAgICArCQkJCWNoaWxkX2NvdW50
Kys7DQogICAgKwkJCQlwcm9tcHQgPSBwcm9tcHQ7DQogICAgKwkJCQlpZiAoc2luZ2xlX21lbnVf
bW9kZSkgew0KICAgICsJCQkJCWl0ZW1fbWFrZShtZW51LCAnbScsDQogICAgKwkJCQkJCSIlcyUq
YyVzIiwNCiAgICArCQkJCQkJbWVudS0+ZGF0YSA/ICItLT4iIDogIisrPiIsDQogICAgKwkJCQkJ
CWluZGVudCArIDEsICcgJywgcHJvbXB0KTsNCiAgICArCQkJCX0gZWxzZQ0KICAgICsJCQkJCWl0
ZW1fbWFrZShtZW51LCAnbScsDQogICAgKwkJCQkJCSAgIiAgICUqYyVzICAlcyIsDQogICAgKwkJ
CQkJCSAgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQsDQogICAgKwkJCQkJCSAgbWVudV9pc19lbXB0
eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7DQogICAgKw0KICAgICsJCQkJaWYgKHNpbmdsZV9t
ZW51X21vZGUgJiYgbWVudS0+ZGF0YSkNCiAgICArCQkJCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAg
ICsJCQkJcmV0dXJuOw0KICAgICsJCQljYXNlIFBfQ09NTUVOVDoNCiAgICArCQkJCWlmIChwcm9t
cHQpIHsNCiAgICArCQkJCQljaGlsZF9jb3VudCsrOw0KICAgICsJCQkJCWl0ZW1fbWFrZShtZW51
LCAnOicsDQogICAgKwkJCQkJCSIgICAlKmMqKiogJXMgKioqIiwNCiAgICArCQkJCQkJaW5kZW50
ICsgMSwgJyAnLA0KICAgICsJCQkJCQlwcm9tcHQpOw0KICAgICsJCQkJfQ0KICAgICsJCQkJYnJl
YWs7DQogICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQlpZiAocHJvbXB0KSB7DQogICAgKwkJCQkJ
Y2hpbGRfY291bnQrKzsNCiAgICArCQkJCQlpdGVtX21ha2UobWVudSwgJzonLCAiLS0tJSpjJXMi
LA0KICAgICsJCQkJCQlpbmRlbnQgKyAxLCAnICcsDQogICAgKwkJCQkJCXByb21wdCk7DQogICAg
KwkJCQl9DQogICAgKwkJCX0NCiAgICArCQl9IGVsc2UNCiAgICArCQkJZG9pbnQgPSAwOw0KICAg
ICsJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgKwl9DQogICAgKw0KICAgICsJdHlwZSA9IHN5bV9n
ZXRfdHlwZShzeW0pOw0KICAgICsJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgICsJCXN0
cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShzeW0pOw0KICAgICsJ
CXN0cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7DQogICAgKw0KICAgICsJCWNoaWxkX2NvdW50
Kys7DQogICAgKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0KSB7DQogICAgKwkJCWlmIChtZW51X2lzX3Zpc2libGUoY2hpbGQpICYmIGNoaWxkLT5z
eW0gPT0gZGVmX3N5bSkNCiAgICArCQkJCWRlZl9tZW51ID0gY2hpbGQ7DQogICAgKwkJfQ0KICAg
ICsNCiAgICArCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKwkJaWYg
KHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgICsJCQlzd2l0Y2ggKHR5cGUpIHsNCiAgICAr
CQkJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAiWyVjXSIs
DQogICAgKwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7DQogICAgKwkJCQlicmVhazsNCiAg
ICArCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCQkJc3dpdGNoICh2YWwpIHsNCiAgICArCQkJ
CWNhc2UgeWVzOg0KICAgICsJCQkJCWNoID0gJyonOw0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJ
CQkJY2FzZSBtb2Q6DQogICAgKwkJCQkJY2ggPSAnTSc7DQogICAgKwkJCQkJYnJlYWs7DQogICAg
KwkJCQlkZWZhdWx0Og0KICAgICsJCQkJCWNoID0gJyAnOw0KICAgICsJCQkJCWJyZWFrOw0KICAg
ICsJCQkJfQ0KICAgICsJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIjwlYz4iLCBjaCk7DQogICAg
KwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCX0gZWxzZSB7DQogICAgKwkJCWl0ZW1fbWFr
ZShtZW51LCBkZWZfbWVudSA/ICd0JyA6ICc6JywgIiAgICIpOw0KICAgICsJCX0NCiAgICArDQog
ICAgKwkJaXRlbV9hZGRfc3RyKCIlKmMlcyIsIGluZGVudCArIDEsDQogICAgKwkJCQknICcsIG1l
bnVfZ2V0X3Byb21wdChtZW51KSk7DQogICAgKwkJaWYgKHZhbCA9PSB5ZXMpIHsNCiAgICArCQkJ
aWYgKGRlZl9tZW51KSB7DQogICAgKwkJCQlpdGVtX2FkZF9zdHIoIiAoJXMpIiwNCiAgICArCQkJ
CQltZW51X2dldF9wcm9tcHQoZGVmX21lbnUpKTsNCiAgICArCQkJCWl0ZW1fYWRkX3N0cigiICAt
LS0+Iik7DQogICAgKwkJCQlpZiAoZGVmX21lbnUtPmxpc3QpIHsNCiAgICArCQkJCQlpbmRlbnQg
Kz0gMjsNCiAgICArCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsNCiAgICArCQkJCQlpbmRlbnQg
LT0gMjsNCiAgICArCQkJCX0NCiAgICArCQkJfQ0KICAgICsJCQlyZXR1cm47DQogICAgKwkJfQ0K
ICAgICsJfSBlbHNlIHsNCiAgICArCQlpZiAobWVudSA9PSBjdXJyZW50X21lbnUpIHsNCiAgICAr
CQkJaXRlbV9tYWtlKG1lbnUsICc6JywNCiAgICArCQkJCSItLS0lKmMlcyIsIGluZGVudCArIDEs
DQogICAgKwkJCQknICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQogICAgKwkJCWdvdG8gY29u
Zl9jaGlsZHM7DQogICAgKwkJfQ0KICAgICsJCWNoaWxkX2NvdW50Kys7DQogICAgKwkJdmFsID0g
c3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgICsJCWlmIChzeW1faXNfY2hvaWNlX3Zh
bHVlKHN5bSkgJiYgdmFsID09IHllcykgew0KICAgICsJCQlpdGVtX21ha2UobWVudSwgJzonLCAi
ICAgIik7DQogICAgKwkJfSBlbHNlIHsNCiAgICArCQkJc3dpdGNoICh0eXBlKSB7DQogICAgKwkJ
CWNhc2UgU19CT09MRUFOOg0KICAgICsJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkNCiAg
ICArCQkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAiWyVjXSIsDQogICAgKwkJCQkJCXZhbCA9PSBu
byA/ICcgJyA6ICcqJyk7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJaXRlbV9tYWtlKG1lbnUs
ICd0JywgIi0lYy0iLA0KICAgICsJCQkJCQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOw0KICAgICsJ
CQkJYnJlYWs7DQogICAgKwkJCWNhc2UgU19UUklTVEFURToNCiAgICArCQkJCXN3aXRjaCAodmFs
KSB7DQogICAgKwkJCQljYXNlIHllczoNCiAgICArCQkJCQljaCA9ICcqJzsNCiAgICArCQkJCQli
cmVhazsNCiAgICArCQkJCWNhc2UgbW9kOg0KICAgICsJCQkJCWNoID0gJ00nOw0KICAgICsJCQkJ
CWJyZWFrOw0KICAgICsJCQkJZGVmYXVsdDoNCiAgICArCQkJCQljaCA9ICcgJzsNCiAgICArCQkJ
CQlicmVhazsNCiAgICArCQkJCX0NCiAgICArCQkJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkp
IHsNCiAgICArCQkJCQlpZiAoc3ltLT5yZXZfZGVwLnRyaSA9PSBtb2QpDQogICAgKwkJCQkJCWl0
ZW1fbWFrZShtZW51LA0KICAgICsJCQkJCQkJJ3QnLCAieyVjfSIsIGNoKTsNCiAgICArCQkJCQll
bHNlDQogICAgKwkJCQkJCWl0ZW1fbWFrZShtZW51LA0KICAgICsJCQkJCQkJJ3QnLCAiPCVjPiIs
IGNoKTsNCiAgICArCQkJCX0gZWxzZQ0KICAgICsJCQkJCWl0ZW1fbWFrZShtZW51LCAndCcsICIt
JWMtIiwgY2gpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQl0
bXAgPSAyICsgc3RybGVuKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOw0KICAgICsJCQkJaXRl
bV9tYWtlKG1lbnUsICdzJywgIiAgICAoJXMpIiwNCiAgICArCQkJCQkJc3ltX2dldF9zdHJpbmdf
dmFsdWUoc3ltKSk7DQogICAgKwkJCQl0bXAgPSBpbmRlbnQgLSB0bXAgKyA0Ow0KICAgICsJCQkJ
aWYgKHRtcCA8IDApDQogICAgKwkJCQkJdG1wID0gMDsNCiAgICArCQkJCWl0ZW1fYWRkX3N0cigi
JSpjJXMlcyIsIHRtcCwgJyAnLA0KICAgICsJCQkJCQltZW51X2dldF9wcm9tcHQobWVudSksDQog
ICAgKwkJCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwNCiAgICArCQkJCQkJICFzeW1faXNfY2hh
bmdhYmxlKHN5bSkpID8gIiIgOg0KICAgICsJCQkJCQkiIChORVcpIik7DQogICAgKwkJCQlnb3Rv
IGNvbmZfY2hpbGRzOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJCWl0ZW1fYWRkX3N0cigi
JSpjJXMlcyIsIGluZGVudCArIDEsICcgJywNCiAgICArCQkJCW1lbnVfZ2V0X3Byb21wdChtZW51
KSwNCiAgICArCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3lt
KSkgPw0KICAgICsJCQkJIiIgOiAiIChORVcpIik7DQogICAgKwkJaWYgKG1lbnUtPnByb21wdCAm
JiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7DQogICAgKwkJCWl0ZW1fYWRkX3N0cigi
ICAlcyIsIG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0tLSIgOiAiLS0tPiIpOw0KICAgICsJCQly
ZXR1cm47DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArY29uZl9jaGlsZHM6DQogICAg
KwlpbmRlbnQgKz0gZG9pbnQ7DQogICAgKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHQpDQogICAgKwkJYnVpbGRfY29uZihjaGlsZCk7DQogICAgKwlp
bmRlbnQgLT0gZG9pbnQ7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHJlc2V0X21l
bnUodm9pZCkNCiAgICArew0KICAgICsJdW5wb3N0X21lbnUoY3Vyc2VzX21lbnUpOw0KICAgICsJ
Y2xlYW5faXRlbXMoKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogYWRqdXN0IHRoZSBtZW51IHRv
IHNob3cgdGhpcyBpdGVtLg0KICAgICsgKiBwcmVmZXIgbm90IHRvIHNjcm9sbCB0aGUgbWVudSBp
ZiBwb3NzaWJsZSovDQogICAgK3N0YXRpYyB2b2lkIGNlbnRlcl9pdGVtKGludCBzZWxlY3RlZF9p
bmRleCwgaW50ICpsYXN0X3RvcF9yb3cpDQogICAgK3sNCiAgICArCWludCB0b3Byb3c7DQogICAg
Kw0KICAgICsJc2V0X3RvcF9yb3coY3Vyc2VzX21lbnUsICpsYXN0X3RvcF9yb3cpOw0KICAgICsJ
dG9wcm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7DQogICAgKwlpZiAoc2VsZWN0ZWRfaW5kZXgg
PCB0b3Byb3cgfHwNCiAgICArCSAgICBzZWxlY3RlZF9pbmRleCA+PSB0b3Byb3crbXdpbl9tYXhf
bGluZXMpIHsNCiAgICArCQl0b3Byb3cgPSBtYXgoc2VsZWN0ZWRfaW5kZXgtbXdpbl9tYXhfbGlu
ZXMvMiwgMCk7DQogICAgKwkJaWYgKHRvcHJvdyA+PSBpdGVtX2NvdW50KGN1cnNlc19tZW51KS1t
d2luX21heF9saW5lcykNCiAgICArCQkJdG9wcm93ID0gaXRlbV9jb3VudChjdXJzZXNfbWVudSkt
bXdpbl9tYXhfbGluZXM7DQogICAgKwkJc2V0X3RvcF9yb3coY3Vyc2VzX21lbnUsIHRvcHJvdyk7
DQogICAgKwl9DQogICAgKwlzZXRfY3VycmVudF9pdGVtKGN1cnNlc19tZW51LA0KICAgICsJCQlj
dXJzZXNfbWVudV9pdGVtc1tzZWxlY3RlZF9pbmRleF0pOw0KICAgICsJKmxhc3RfdG9wX3JvdyA9
IHRvcHJvdzsNCiAgICArCXBvc3RfbWVudShjdXJzZXNfbWVudSk7DQogICAgKwlyZWZyZXNoX2Fs
bF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICArfQ0KICAgICsNCiAgICArLyogdGhpcyBmdW5j
dGlvbiBhc3N1bWVzIHJlc2V0X21lbnUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSAqLw0KICAgICtz
dGF0aWMgdm9pZCBzaG93X21lbnUoY29uc3QgY2hhciAqcHJvbXB0LCBjb25zdCBjaGFyICppbnN0
cnVjdGlvbnMsDQogICAgKwkJaW50IHNlbGVjdGVkX2luZGV4LCBpbnQgKmxhc3RfdG9wX3JvdykN
CiAgICArew0KICAgICsJaW50IG1heHgsIG1heHk7DQogICAgKwlXSU5ET1cgKm1lbnVfd2luZG93
Ow0KICAgICsNCiAgICArCWN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gaW5zdHJ1Y3Rpb25zOw0KICAg
ICsNCiAgICArCWNsZWFyKCk7DQogICAgKwkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0
dHJpYnV0ZXNbTk9STUFMXSk7DQogICAgKwlwcmludF9pbl9taWRkbGUoc3Rkc2NyLCAxLCAwLCBn
ZXRtYXh4KHN0ZHNjciksDQogICAgKwkJCW1lbnVfYmFja3RpdGxlLA0KICAgICsJCQlhdHRyaWJ1
dGVzW01BSU5fSEVBRElOR10pOw0KICAgICsNCiAgICArCSh2b2lkKSB3YXR0cnNldChtYWluX3dp
bmRvdywgYXR0cmlidXRlc1tNQUlOX01FTlVfQk9YXSk7DQogICAgKwlib3gobWFpbl93aW5kb3cs
IDAsIDApOw0KICAgICsJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93LCBhdHRyaWJ1dGVzW01B
SU5fTUVOVV9IRUFESU5HXSk7DQogICAgKwltdndwcmludHcobWFpbl93aW5kb3csIDAsIDMsICIg
JXMgIiwgcHJvbXB0KTsNCiAgICArCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmli
dXRlc1tOT1JNQUxdKTsNCiAgICArDQogICAgKwlzZXRfbWVudV9pdGVtcyhjdXJzZXNfbWVudSwg
Y3Vyc2VzX21lbnVfaXRlbXMpOw0KICAgICsNCiAgICArCS8qIHBvc2l0aW9uIHRoZSBtZW51IGF0
IHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiAqLw0KICAgICsJc2NhbGVfbWVudShjdXJzZXNfbWVu
dSwgJm1heHksICZtYXh4KTsNCiAgICArCW1heHggPSBtaW4obWF4eCwgbXdpbl9tYXhfY29scy0y
KTsNCiAgICArCW1heHkgPSBtd2luX21heF9saW5lczsNCiAgICArCW1lbnVfd2luZG93ID0gZGVy
d2luKG1haW5fd2luZG93LA0KICAgICsJCQltYXh5LA0KICAgICsJCQltYXh4LA0KICAgICsJCQky
LA0KICAgICsJCQkobXdpbl9tYXhfY29scy1tYXh4KS8yKTsNCiAgICArCWtleXBhZChtZW51X3dp
bmRvdywgVFJVRSk7DQogICAgKwlzZXRfbWVudV93aW4oY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93
KTsNCiAgICArCXNldF9tZW51X3N1YihjdXJzZXNfbWVudSwgbWVudV93aW5kb3cpOw0KICAgICsN
CiAgICArCS8qIG11c3QgcmVhc3NlcnQgdGhpcyBhZnRlciBjaGFuZ2luZyBpdGVtcywgb3RoZXJ3
aXNlIHJldHVybnMgdG8gYQ0KICAgICsJICogZGVmYXVsdCBvZiAxNg0KICAgICsJICovDQogICAg
KwlzZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEpOw0KICAgICsJY2VudGVyX2l0
ZW0oc2VsZWN0ZWRfaW5kZXgsIGxhc3RfdG9wX3Jvdyk7DQogICAgKwlzZXRfbWVudV9mb3JtYXQo
Y3Vyc2VzX21lbnUsIG1heHksIDEpOw0KICAgICsNCiAgICArCXByaW50X2Z1bmN0aW9uX2xpbmUo
KTsNCiAgICArDQogICAgKwkvKiBQb3N0IHRoZSBtZW51ICovDQogICAgKwlwb3N0X21lbnUoY3Vy
c2VzX21lbnUpOw0KICAgICsJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7DQogICAg
K30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGFkal9tYXRjaF9kaXIobWF0Y2hfZiAqbWF0Y2hf
ZGlyZWN0aW9uKQ0KICAgICt7DQogICAgKwlpZiAoKm1hdGNoX2RpcmVjdGlvbiA9PSBGSU5EX05F
WFRfTUFUQ0hfRE9XTikNCiAgICArCQkqbWF0Y2hfZGlyZWN0aW9uID0NCiAgICArCQkJTUFUQ0hf
VElOS0VSX1BBVFRFUk5fRE9XTjsNCiAgICArCWVsc2UgaWYgKCptYXRjaF9kaXJlY3Rpb24gPT0g
RklORF9ORVhUX01BVENIX1VQKQ0KICAgICsJCSptYXRjaF9kaXJlY3Rpb24gPQ0KICAgICsJCQlN
QVRDSF9USU5LRVJfUEFUVEVSTl9VUDsNCiAgICArCS8qIGVsc2UsIGRvIG5vIGNoYW5nZS4uICov
DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBtYXRjaF9zdGF0ZQ0KICAgICt7DQogICAgKwlp
bnQgaW5fc2VhcmNoOw0KICAgICsJbWF0Y2hfZiBtYXRjaF9kaXJlY3Rpb247DQogICAgKwljaGFy
IHBhdHRlcm5bMjU2XTsNCiAgICArfTsNCiAgICArDQogICAgKy8qIFJldHVybiAwIG1lYW5zIEkg
aGF2ZSBoYW5kbGVkIHRoZSBrZXkuIEluIHN1Y2ggYSBjYXNlLCBhbnMgc2hvdWxkIGhvbGQgdGhl
DQogICAgKyAqIGl0ZW0gdG8gY2VudGVyLCBvciAtMSBvdGhlcndpc2UuDQogICAgKyAqIEVsc2Ug
cmV0dXJuIC0xIC4NCiAgICArICovDQogICAgK3N0YXRpYyBpbnQgZG9fbWF0Y2goaW50IGtleSwg
c3RydWN0IG1hdGNoX3N0YXRlICpzdGF0ZSwgaW50ICphbnMpDQogICAgK3sNCiAgICArCWNoYXIg
YyA9IChjaGFyKSBrZXk7DQogICAgKwlpbnQgdGVybWluYXRlX3NlYXJjaCA9IDA7DQogICAgKwkq
YW5zID0gLTE7DQogICAgKwlpZiAoa2V5ID09ICcvJyB8fCAoc3RhdGUtPmluX3NlYXJjaCAmJiBr
ZXkgPT0gMjcpKSB7DQogICAgKwkJbW92ZSgwLCAwKTsNCiAgICArCQlyZWZyZXNoKCk7DQogICAg
KwkJY2xydG9lb2woKTsNCiAgICArCQlzdGF0ZS0+aW5fc2VhcmNoID0gMS1zdGF0ZS0+aW5fc2Vh
cmNoOw0KICAgICsJCWJ6ZXJvKHN0YXRlLT5wYXR0ZXJuLCBzaXplb2Yoc3RhdGUtPnBhdHRlcm4p
KTsNCiAgICArCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BBVFRFUk5f
RE9XTjsNCiAgICArCQlyZXR1cm4gMDsNCiAgICArCX0gZWxzZSBpZiAoIXN0YXRlLT5pbl9zZWFy
Y2gpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKw0KICAgICsJaWYgKGlzYWxudW0oYykgfHwgaXNn
cmFwaChjKSB8fCBjID09ICcgJykgew0KICAgICsJCXN0YXRlLT5wYXR0ZXJuW3N0cmxlbihzdGF0
ZS0+cGF0dGVybildID0gYzsNCiAgICArCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBh
dHRlcm4pXSA9ICdcMCc7DQogICAgKwkJYWRqX21hdGNoX2Rpcigmc3RhdGUtPm1hdGNoX2RpcmVj
dGlvbik7DQogICAgKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLA0KICAg
ICsJCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgKwl9IGVsc2UgaWYgKGtleSA9PSBL
RVlfRE9XTikgew0KICAgICsJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRfTUFU
Q0hfRE9XTjsNCiAgICArCQkqYW5zID0gZ2V0X21leHRfbWF0Y2goc3RhdGUtPnBhdHRlcm4sDQog
ICAgKwkJCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsNCiAgICArCX0gZWxzZSBpZiAoa2V5ID09
IEtFWV9VUCkgew0KICAgICsJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24gPSBGSU5EX05FWFRfTUFU
Q0hfVVA7DQogICAgKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJuLA0KICAg
ICsJCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgKwl9IGVsc2UgaWYgKGtleSA9PSBL
RVlfQkFDS1NQQUNFIHx8IGtleSA9PSA4IHx8IGtleSA9PSAxMjcpIHsNCiAgICArCQlzdGF0ZS0+
cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4pLTFdID0gJ1wwJzsNCiAgICArCQlhZGpfbWF0
Y2hfZGlyKCZzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsNCiAgICArCX0gZWxzZQ0KICAgICsJCXRl
cm1pbmF0ZV9zZWFyY2ggPSAxOw0KICAgICsNCiAgICArCWlmICh0ZXJtaW5hdGVfc2VhcmNoKSB7
DQogICAgKwkJc3RhdGUtPmluX3NlYXJjaCA9IDA7DQogICAgKwkJYnplcm8oc3RhdGUtPnBhdHRl
cm4sIHNpemVvZihzdGF0ZS0+cGF0dGVybikpOw0KICAgICsJCW1vdmUoMCwgMCk7DQogICAgKwkJ
cmVmcmVzaCgpOw0KICAgICsJCWNscnRvZW9sKCk7DQogICAgKwkJcmV0dXJuIC0xOw0KICAgICsJ
fQ0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmYo
c3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCXN0cnVjdCBtZW51ICpzdWJtZW51ID0g
TlVMTDsNCiAgICArCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsN
CiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICArCWludCByZXM7DQogICAgKwlpbnQgY3Vy
cmVudF9pbmRleCA9IDA7DQogICAgKwlpbnQgbGFzdF90b3Bfcm93ID0gMDsNCiAgICArCXN0cnVj
dCBtYXRjaF9zdGF0ZSBtYXRjaF9zdGF0ZSA9IHsNCiAgICArCQkuaW5fc2VhcmNoID0gMCwNCiAg
ICArCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTiwNCiAgICAr
CQkucGF0dGVybiA9ICIiLA0KICAgICsJfTsNCiAgICArDQogICAgKwl3aGlsZSAoIWdsb2JhbF9l
eGl0KSB7DQogICAgKwkJcmVzZXRfbWVudSgpOw0KICAgICsJCWN1cnJlbnRfbWVudSA9IG1lbnU7
DQogICAgKwkJYnVpbGRfY29uZihtZW51KTsNCiAgICArCQlpZiAoIWNoaWxkX2NvdW50KQ0KICAg
ICsJCQlicmVhazsNCiAgICArDQogICAgKwkJc2hvd19tZW51KHByb21wdCA/IHByb21wdCA6ICJN
YWluIE1lbnUiLA0KICAgICsJCQkJbWVudV9pbnN0cnVjdGlvbnMsDQogICAgKwkJCQljdXJyZW50
X2luZGV4LCAmbGFzdF90b3Bfcm93KTsNCiAgICArCQlrZXlwYWQoKG1lbnVfd2luKGN1cnNlc19t
ZW51KSksIFRSVUUpOw0KICAgICsJCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsNCiAgICArCQkJaWYg
KG1hdGNoX3N0YXRlLmluX3NlYXJjaCkgew0KICAgICsJCQkJbXZwcmludHcoMCwgMCwNCiAgICAr
CQkJCQkic2VhcmNoaW5nOiAlcyIsIG1hdGNoX3N0YXRlLnBhdHRlcm4pOw0KICAgICsJCQkJY2xy
dG9lb2woKTsNCiAgICArCQkJfQ0KICAgICsJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2lu
ZG93KTsNCiAgICArCQkJcmVzID0gd2dldGNoKG1lbnVfd2luKGN1cnNlc19tZW51KSk7DQogICAg
KwkJCWlmICghcmVzKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWlmIChkb19tYXRjaChyZXMs
ICZtYXRjaF9zdGF0ZSwgJmN1cnJlbnRfaW5kZXgpID09IDApIHsNCiAgICArCQkJCWlmIChjdXJy
ZW50X2luZGV4ICE9IC0xKQ0KICAgICsJCQkJCWNlbnRlcl9pdGVtKGN1cnJlbnRfaW5kZXgsDQog
ICAgKwkJCQkJCSAgICAmbGFzdF90b3Bfcm93KTsNCiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJ
CQl9DQogICAgKwkJCWlmIChwcm9jZXNzX3NwZWNpYWxfa2V5cygmcmVzLA0KICAgICsJCQkJCQko
c3RydWN0IG1lbnUgKikgaXRlbV9kYXRhKCkpKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCXN3
aXRjaCAocmVzKSB7DQogICAgKwkJCWNhc2UgS0VZX0RPV046DQogICAgKwkJCQltZW51X2RyaXZl
cihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJ
Y2FzZSBLRVlfVVA6DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX1VQX0lU
RU0pOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX05QQUdFOg0KICAgICsJCQkJ
bWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfRFBBR0UpOw0KICAgICsJCQkJYnJlYWs7
DQogICAgKwkJCWNhc2UgS0VZX1BQQUdFOg0KICAgICsJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21l
bnUsIFJFUV9TQ1JfVVBBR0UpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX0hP
TUU6DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0ZJUlNUX0lURU0pOw0K
ICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX0VORDoNCiAgICArCQkJCW1lbnVfZHJp
dmVyKGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJ
CQljYXNlICdoJzoNCiAgICArCQkJY2FzZSAnPyc6DQogICAgKwkJCQlzaG93X2hlbHAoKHN0cnVj
dCBtZW51ICopIGl0ZW1fZGF0YSgpKTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAg
KwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8DQogICAgKwkJCQlyZXMgPT0gMzIgfHwg
cmVzID09ICduJyB8fCByZXMgPT0gJ3knIHx8DQogICAgKwkJCQlyZXMgPT0gS0VZX0xFRlQgfHwg
cmVzID09IEtFWV9SSUdIVCB8fA0KICAgICsJCQkJcmVzID09ICdtJykNCiAgICArCQkJCWJyZWFr
Ow0KICAgICsJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICArCQl9DQog
ICAgKw0KICAgICsJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOw0KICAgICsJCS8q
IGlmIEVTQyBvciBsZWZ0Ki8NCiAgICArCQlpZiAocmVzID09IDI3IHx8IChtZW51ICE9ICZyb290
bWVudSAmJiByZXMgPT0gS0VZX0xFRlQpKQ0KICAgICsJCQlicmVhazsNCiAgICArDQogICAgKwkJ
LyogcmVtZW1iZXIgbG9jYXRpb24gaW4gdGhlIG1lbnUgKi8NCiAgICArCQlsYXN0X3RvcF9yb3cg
PSB0b3Bfcm93KGN1cnNlc19tZW51KTsNCiAgICArCQljdXJyZW50X2luZGV4ID0gY3Vyc2VzX2l0
ZW1faW5kZXgoKTsNCiAgICArDQogICAgKwkJaWYgKCFpdGVtX3RhZygpKQ0KICAgICsJCQljb250
aW51ZTsNCiAgICArDQogICAgKwkJc3VibWVudSA9IChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEo
KTsNCiAgICArCQlpZiAoIXN1Ym1lbnUgfHwgIW1lbnVfaXNfdmlzaWJsZShzdWJtZW51KSkNCiAg
ICArCQkJY29udGludWU7DQogICAgKwkJc3ltID0gc3VibWVudS0+c3ltOw0KICAgICsNCiAgICAr
CQlzd2l0Y2ggKHJlcykgew0KICAgICsJCWNhc2UgJyAnOg0KICAgICsJCQlpZiAoaXRlbV9pc190
YWcoJ3QnKSkNCiAgICArCQkJCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICAr
CQkJZWxzZSBpZiAoaXRlbV9pc190YWcoJ20nKSkNCiAgICArCQkJCWNvbmYoc3VibWVudSk7DQog
ICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX1JJR0hUOg0KICAgICsJCWNhc2UgMTA6IC8q
IEVOVEVSIFdBUyBQUkVTU0VEICovDQogICAgKwkJCXN3aXRjaCAoaXRlbV90YWcoKSkgew0KICAg
ICsJCQljYXNlICdtJzoNCiAgICArCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlKQ0KICAgICsJCQkJ
CXN1Ym1lbnUtPmRhdGEgPQ0KICAgICsJCQkJCQkodm9pZCAqKSAobG9uZykgIXN1Ym1lbnUtPmRh
dGE7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJY29uZihzdWJtZW51KTsNCiAgICArCQkJCWJy
ZWFrOw0KICAgICsJCQljYXNlICd0JzoNCiAgICArCQkJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkg
JiYNCiAgICArCQkJCSAgICBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQ0KICAg
ICsJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOw0KICAgICsJCQkJZWxzZSBpZiAoc3VibWVudS0+
cHJvbXB0ICYmDQogICAgKwkJCQkJIHN1Ym1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpDQog
ICAgKwkJCQkJY29uZihzdWJtZW51KTsNCiAgICArCQkJCWVsc2UgaWYgKHJlcyA9PSAxMCkNCiAg
ICArCQkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKwkJCQlicmVhazsN
CiAgICArCQkJY2FzZSAncyc6DQogICAgKwkJCQljb25mX3N0cmluZyhzdWJtZW51KTsNCiAgICAr
CQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJ3knOg0K
ICAgICsJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkgew0KICAgICsJCQkJaWYgKHN5bV9zZXRfdHJp
c3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQ0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQkJaWYgKHN5
bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpKQ0KICAgICsJCQkJCWJ0bl9kaWFsb2cobWFp
bl93aW5kb3csIHNldG1vZF90ZXh0LCAwKTsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAg
ICArCQljYXNlICduJzoNCiAgICArCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpDQogICAgKwkJCQlz
eW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbm8pOw0KICAgICsJCQlicmVhazsNCiAgICArCQlj
YXNlICdtJzoNCiAgICArCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpDQogICAgKwkJCQlzeW1fc2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAg
ICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX21lc3NhZ2VfY2FsbGJh
Y2soY29uc3QgY2hhciAqcykNCiAgICArew0KICAgICsJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywg
cywgMSwgIjxPSz4iKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgc2hvd19oZWxw
KHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZ3N0ciBoZWxwOw0KICAg
ICsNCiAgICArCWlmICghbWVudSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJaGVscCA9
IHN0cl9uZXcoKTsNCiAgICArCW1lbnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsNCiAgICAr
CXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywgbWVudV9nZXRfcHJvbXB0KG1lbnUpLCBzdHJf
Z2V0KCZoZWxwKSk7DQogICAgKwlzdHJfZnJlZSgmaGVscCk7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAg
Kwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgKwlzdHJ1
Y3QgbWVudSAqY2hpbGQgPSBOVUxMOw0KICAgICsJc3RydWN0IHN5bWJvbCAqYWN0aXZlOw0KICAg
ICsJaW50IHNlbGVjdGVkX2luZGV4ID0gMDsNCiAgICArCWludCBsYXN0X3RvcF9yb3cgPSAwOw0K
ICAgICsJaW50IHJlcywgaSA9IDA7DQogICAgKwlzdHJ1Y3QgbWF0Y2hfc3RhdGUgbWF0Y2hfc3Rh
dGUgPSB7DQogICAgKwkJLmluX3NlYXJjaCA9IDAsDQogICAgKwkJLm1hdGNoX2RpcmVjdGlvbiA9
IE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sDQogICAgKwkJLnBhdHRlcm4gPSAiIiwNCiAgICAr
CX07DQogICAgKw0KICAgICsJYWN0aXZlID0gc3ltX2dldF9jaG9pY2VfdmFsdWUobWVudS0+c3lt
KTsNCiAgICArCS8qIHRoaXMgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJvbSB0aGUgY29uZigpIGZ1
bmN0aW9uLiAqLw0KICAgICsJd2hpbGUgKCFnbG9iYWxfZXhpdCkgew0KICAgICsJCXJlc2V0X21l
bnUoKTsNCiAgICArDQogICAgKwkJZm9yIChpID0gMCwgY2hpbGQgPSBtZW51LT5saXN0OyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCQlpZiAoIXNob3dfYWxsX2l0ZW1zICYm
ICFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQ0KICAgICsJCQkJY29udGludWU7DQogICAgKw0KICAg
ICsJCQlpZiAoY2hpbGQtPnN5bSA9PSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pKQ0K
ICAgICsJCQkJaXRlbV9tYWtlKGNoaWxkLCAnOicsICI8WD4gJXMiLA0KICAgICsJCQkJCQltZW51
X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAgICArCQkJZWxzZSBpZiAoY2hpbGQtPnN5bSkNCiAgICAr
CQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiICAgICVzIiwNCiAgICArCQkJCQkJbWVudV9nZXRf
cHJvbXB0KGNoaWxkKSk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCWl0ZW1fbWFrZShjaGlsZCwg
JzonLCAiKioqICVzICoqKiIsDQogICAgKwkJCQkJCW1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOw0K
ICAgICsNCiAgICArCQkJaWYgKGNoaWxkLT5zeW0gPT0gYWN0aXZlKXsNCiAgICArCQkJCWxhc3Rf
dG9wX3JvdyA9IHRvcF9yb3coY3Vyc2VzX21lbnUpOw0KICAgICsJCQkJc2VsZWN0ZWRfaW5kZXgg
PSBpOw0KICAgICsJCQl9DQogICAgKwkJCWkrKzsNCiAgICArCQl9DQogICAgKwkJc2hvd19tZW51
KHByb21wdCA/IHByb21wdCA6ICJDaG9pY2UgTWVudSIsDQogICAgKwkJCQlyYWRpb2xpc3RfaW5z
dHJ1Y3Rpb25zLA0KICAgICsJCQkJc2VsZWN0ZWRfaW5kZXgsDQogICAgKwkJCQkmbGFzdF90b3Bf
cm93KTsNCiAgICArCQl3aGlsZSAoIWdsb2JhbF9leGl0KSB7DQogICAgKwkJCWlmIChtYXRjaF9z
dGF0ZS5pbl9zZWFyY2gpIHsNCiAgICArCQkJCW12cHJpbnR3KDAsIDAsICJzZWFyY2hpbmc6ICVz
IiwNCiAgICArCQkJCQkgbWF0Y2hfc3RhdGUucGF0dGVybik7DQogICAgKwkJCQljbHJ0b2VvbCgp
Ow0KICAgICsJCQl9DQogICAgKwkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOw0K
ICAgICsJCQlyZXMgPSB3Z2V0Y2gobWVudV93aW4oY3Vyc2VzX21lbnUpKTsNCiAgICArCQkJaWYg
KCFyZXMpDQogICAgKwkJCQlicmVhazsNCiAgICArCQkJaWYgKGRvX21hdGNoKHJlcywgJm1hdGNo
X3N0YXRlLCAmc2VsZWN0ZWRfaW5kZXgpID09IDApIHsNCiAgICArCQkJCWlmIChzZWxlY3RlZF9p
bmRleCAhPSAtMSkNCiAgICArCQkJCQljZW50ZXJfaXRlbShzZWxlY3RlZF9pbmRleCwNCiAgICAr
CQkJCQkJICAgICZsYXN0X3RvcF9yb3cpOw0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCX0N
CiAgICArCQkJaWYgKHByb2Nlc3Nfc3BlY2lhbF9rZXlzKA0KICAgICsJCQkJCQkmcmVzLA0KICAg
ICsJCQkJCQkoc3RydWN0IG1lbnUgKikgaXRlbV9kYXRhKCkpKQ0KICAgICsJCQkJYnJlYWs7DQog
ICAgKwkJCXN3aXRjaCAocmVzKSB7DQogICAgKwkJCWNhc2UgS0VZX0RPV046DQogICAgKwkJCQlt
ZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7DQogICAgKwkJCQlicmVhazsN
CiAgICArCQkJY2FzZSBLRVlfVVA6DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwg
UkVRX1VQX0lURU0pOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX05QQUdFOg0K
ICAgICsJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfRFBBR0UpOw0KICAgICsJ
CQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX1BQQUdFOg0KICAgICsJCQkJbWVudV9kcml2ZXIo
Y3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNh
c2UgS0VZX0hPTUU6DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0ZJUlNU
X0lURU0pOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX0VORDoNCiAgICArCQkJ
CW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsNCiAgICArCQkJCWJyZWFr
Ow0KICAgICsJCQljYXNlICdoJzoNCiAgICArCQkJY2FzZSAnPyc6DQogICAgKwkJCQlzaG93X2hl
bHAoKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJ
CQl9DQogICAgKwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8IHJlcyA9PSAnICcgfHwN
CiAgICArCQkJCQlyZXMgPT0gS0VZX0xFRlQpew0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0N
CiAgICArCQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgKwkJfQ0KICAg
ICsJCS8qIGlmIEVTQyBvciBsZWZ0ICovDQogICAgKwkJaWYgKHJlcyA9PSAyNyB8fCByZXMgPT0g
S0VZX0xFRlQpDQogICAgKwkJCWJyZWFrOw0KICAgICsNCiAgICArCQljaGlsZCA9IGl0ZW1fZGF0
YSgpOw0KICAgICsJCWlmICghY2hpbGQgfHwgIW1lbnVfaXNfdmlzaWJsZShjaGlsZCkgfHwgIWNo
aWxkLT5zeW0pDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCXN3aXRjaCAocmVzKSB7DQogICAg
KwkJY2FzZSAnICc6DQogICAgKwkJY2FzZSAgMTA6DQogICAgKwkJY2FzZSBLRVlfUklHSFQ6DQog
ICAgKwkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwgeWVzKTsNCiAgICArCQkJ
cmV0dXJuOw0KICAgICsJCWNhc2UgJ2gnOg0KICAgICsJCWNhc2UgJz8nOg0KICAgICsJCQlzaG93
X2hlbHAoY2hpbGQpOw0KICAgICsJCQlhY3RpdmUgPSBjaGlsZC0+c3ltOw0KICAgICsJCQlicmVh
azsNCiAgICArCQljYXNlIEtFWV9FWElUOg0KICAgICsJCQlyZXR1cm47DQogICAgKwkJfQ0KICAg
ICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3Qg
bWVudSAqbWVudSkNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRf
cHJvbXB0KG1lbnUpOw0KICAgICsNCiAgICArCXdoaWxlICgxKSB7DQogICAgKwkJaW50IHJlczsN
CiAgICArCQljb25zdCBjaGFyICpoZWFkaW5nOw0KICAgICsNCiAgICArCQlzd2l0Y2ggKHN5bV9n
ZXRfdHlwZShtZW51LT5zeW0pKSB7DQogICAgKwkJY2FzZSBTX0lOVDoNCiAgICArCQkJaGVhZGlu
ZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNh
c2UgU19IRVg6DQogICAgKwkJCWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4Ow0K
ICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFNfU1RSSU5HOg0KICAgICsJCQloZWFkaW5nID0g
aW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJZGVm
YXVsdDoNCiAgICArCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBuY29uZiBlcnJvciEiOw0KICAgICsJ
CX0NCiAgICArCQlyZXMgPSBkaWFsb2dfaW5wdXRib3gobWFpbl93aW5kb3csDQogICAgKwkJCQlw
cm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwNCiAgICArCQkJCWhlYWRpbmcsDQogICAgKwkJ
CQlzeW1fZ2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0pLA0KICAgICsJCQkJJmRpYWxvZ19pbnB1
dF9yZXN1bHQsDQogICAgKwkJCQkmZGlhbG9nX2lucHV0X3Jlc3VsdF9sZW4pOw0KICAgICsJCXN3
aXRjaCAocmVzKSB7DQogICAgKwkJY2FzZSAwOg0KICAgICsJCQlpZiAoc3ltX3NldF9zdHJpbmdf
dmFsdWUobWVudS0+c3ltLA0KICAgICsJCQkJCQlkaWFsb2dfaW5wdXRfcmVzdWx0KSkNCiAgICAr
CQkJCXJldHVybjsNCiAgICArCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRvdywNCiAgICArCQkJCSJZ
b3UgaGF2ZSBtYWRlIGFuIGludmFsaWQgZW50cnkuIiwgMCk7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWNhc2UgMToNCiAgICArCQkJc2hvd19oZWxwKG1lbnUpOw0KICAgICsJCQlicmVhazsNCiAg
ICArCQljYXNlIEtFWV9FWElUOg0KICAgICsJCQlyZXR1cm47DQogICAgKwkJfQ0KICAgICsJfQ0K
ICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX2xvYWQodm9pZCkNCiAgICArew0K
ICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQlpbnQgcmVzOw0KICAgICsJCXJlcyA9IGRpYWxvZ19p
bnB1dGJveChtYWluX3dpbmRvdywNCiAgICArCQkJCU5VTEwsIGxvYWRfY29uZmlnX3RleHQsDQog
ICAgKwkJCQlmaWxlbmFtZSwNCiAgICArCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0LA0KICAgICsJ
CQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsNCiAgICArCQlzd2l0Y2ggKHJlcykgew0KICAg
ICsJCWNhc2UgMDoNCiAgICArCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQ0KICAgICsJ
CQkJcmV0dXJuOw0KICAgICsJCQlpZiAoIWNvbmZfcmVhZChkaWFsb2dfaW5wdXRfcmVzdWx0KSkg
ew0KICAgICsJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5wdXRfcmVzdWx0KTsNCiAg
ICArCQkJCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOw0KICAgICsJCQkJcmV0dXJuOw0KICAgICsJ
CQl9DQogICAgKwkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csICJGaWxlIGRvZXMgbm90IGV4aXN0
ISIsIDApOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDE6DQogICAgKwkJCXNob3dfc2Ny
b2xsX3dpbihtYWluX3dpbmRvdywNCiAgICArCQkJCQkiTG9hZCBBbHRlcm5hdGUgQ29uZmlndXJh
dGlvbiIsDQogICAgKwkJCQkJbG9hZF9jb25maWdfaGVscCk7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWNhc2UgS0VZX0VYSVQ6DQogICAgKwkJCXJldHVybjsNCiAgICArCQl9DQogICAgKwl9DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKQ0KICAgICt7DQog
ICAgKwl3aGlsZSAoMSkgew0KICAgICsJCWludCByZXM7DQogICAgKwkJcmVzID0gZGlhbG9nX2lu
cHV0Ym94KG1haW5fd2luZG93LA0KICAgICsJCQkJTlVMTCwgc2F2ZV9jb25maWdfdGV4dCwNCiAg
ICArCQkJCWZpbGVuYW1lLA0KICAgICsJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHQsDQogICAgKwkJ
CQkmZGlhbG9nX2lucHV0X3Jlc3VsdF9sZW4pOw0KICAgICsJCXN3aXRjaCAocmVzKSB7DQogICAg
KwkJY2FzZSAwOg0KICAgICsJCQlpZiAoIWRpYWxvZ19pbnB1dF9yZXN1bHRbMF0pDQogICAgKwkJ
CQlyZXR1cm47DQogICAgKwkJCXJlcyA9IGNvbmZfd3JpdGUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7
DQogICAgKwkJCWlmICghcmVzKSB7DQogICAgKwkJCQlzZXRfY29uZmlnX2ZpbGVuYW1lKGRpYWxv
Z19pbnB1dF9yZXN1bHQpOw0KICAgICsJCQkJcmV0dXJuOw0KICAgICsJCQl9DQogICAgKwkJCWJ0
bl9kaWFsb2cobWFpbl93aW5kb3csICJDYW4ndCBjcmVhdGUgZmlsZSEiLA0KICAgICsJCQkJMSwg
IjxPSz4iKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAxOg0KICAgICsJCQlzaG93X3Nj
cm9sbF93aW4obWFpbl93aW5kb3csDQogICAgKwkJCQkiU2F2ZSBBbHRlcm5hdGUgQ29uZmlndXJh
dGlvbiIsDQogICAgKwkJCQlzYXZlX2NvbmZpZ19oZWxwKTsNCiAgICArCQkJYnJlYWs7DQogICAg
KwkJY2FzZSBLRVlfRVhJVDoNCiAgICArCQkJcmV0dXJuOw0KICAgICsJCX0NCiAgICArCX0NCiAg
ICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgc2V0dXBfd2luZG93cyh2b2lkKQ0KICAgICt7
DQogICAgKwlpbnQgbGluZXMsIGNvbHVtbnM7DQogICAgKw0KICAgICsJZ2V0bWF4eXgoc3Rkc2Ny
LCBsaW5lcywgY29sdW1ucyk7DQogICAgKw0KICAgICsJaWYgKG1haW5fd2luZG93ICE9IE5VTEwp
DQogICAgKwkJZGVsd2luKG1haW5fd2luZG93KTsNCiAgICArDQogICAgKwkvKiBzZXQgdXAgdGhl
IG1lbnUgYW5kIG1lbnUgd2luZG93ICovDQogICAgKwltYWluX3dpbmRvdyA9IG5ld3dpbihsaW5l
cy0yLCBjb2x1bW5zLTIsIDIsIDEpOw0KICAgICsJa2V5cGFkKG1haW5fd2luZG93LCBUUlVFKTsN
CiAgICArCW13aW5fbWF4X2xpbmVzID0gbGluZXMtNzsNCiAgICArCW13aW5fbWF4X2NvbHMgPSBj
b2x1bW5zLTY7DQogICAgKw0KICAgICsJLyogcGFuZWxzIG9yZGVyIGlzIGZyb20gYm90dG9tIHRv
IHRvcCAqLw0KICAgICsJbmV3X3BhbmVsKG1haW5fd2luZG93KTsNCiAgICArfQ0KICAgICsNCiAg
ICAraW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpDQogICAgK3sNCiAgICArCWludCBsaW5lcywg
Y29sdW1uczsNCiAgICArCWNoYXIgKm1vZGU7DQogICAgKw0KICAgICsJaWYgKGFjID4gMSAmJiBz
dHJjbXAoYXZbMV0sICItcyIpID09IDApIHsNCiAgICArCQkvKiBTaWxlbmNlIGNvbmZfcmVhZCgp
IHVudGlsIHRoZSByZWFsIGNhbGxiYWNrIGlzIHNldCB1cCAqLw0KICAgICsJCWNvbmZfc2V0X21l
c3NhZ2VfY2FsbGJhY2soTlVMTCk7DQogICAgKwkJYXYrKzsNCiAgICArCX0NCiAgICArCWNvbmZf
cGFyc2UoYXZbMV0pOw0KICAgICsJY29uZl9yZWFkKE5VTEwpOw0KICAgICsNCiAgICArCW1vZGUg
PSBnZXRlbnYoIk5DT05GSUdfTU9ERSIpOw0KICAgICsJaWYgKG1vZGUpIHsNCiAgICArCQlpZiAo
IXN0cmNhc2VjbXAobW9kZSwgInNpbmdsZV9tZW51IikpDQogICAgKwkJCXNpbmdsZV9tZW51X21v
ZGUgPSAxOw0KICAgICsJfQ0KICAgICsNCiAgICArCS8qIEluaXRpYWxpemUgY3Vyc2VzICovDQog
ICAgKwlpbml0c2NyKCk7DQogICAgKwkvKiBzZXQgY29sb3IgdGhlbWUgKi8NCiAgICArCXNldF9j
b2xvcnMoKTsNCiAgICArDQogICAgKwljYnJlYWsoKTsNCiAgICArCW5vZWNobygpOw0KICAgICsJ
a2V5cGFkKHN0ZHNjciwgVFJVRSk7DQogICAgKwljdXJzX3NldCgwKTsNCiAgICArDQogICAgKwln
ZXRtYXh5eChzdGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsNCiAgICArCWlmIChjb2x1bW5zIDwgNzUg
fHwgbGluZXMgPCAyMCkgew0KICAgICsJCWVuZHdpbigpOw0KICAgICsJCXByaW50ZigiWW91ciB0
ZXJtaW5hbCBzaG91bGQgaGF2ZSBhdCAiDQogICAgKwkJCSJsZWFzdCAyMCBsaW5lcyBhbmQgNzUg
Y29sdW1uc1xuIik7DQogICAgKwkJcmV0dXJuIDE7DQogICAgKwl9DQogICAgKw0KICAgICsJbm90
aW1lb3V0KHN0ZHNjciwgRkFMU0UpOw0KICAgICsjaWYgTkNVUlNFU19SRUVOVFJBTlQNCiAgICAr
CXNldF9lc2NkZWxheSgxKTsNCiAgICArI2Vsc2UNCiAgICArCUVTQ0RFTEFZID0gMTsNCiAgICAr
I2VuZGlmDQogICAgKw0KICAgICsJLyogc2V0IGJ0bnMgbWVudSAqLw0KICAgICsJY3Vyc2VzX21l
bnUgPSBuZXdfbWVudShjdXJzZXNfbWVudV9pdGVtcyk7DQogICAgKwltZW51X29wdHNfb2ZmKGN1
cnNlc19tZW51LCBPX1NIT1dERVNDKTsNCiAgICArCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwg
T19TSE9XTUFUQ0gpOw0KICAgICsJbWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX09ORVZBTFVF
KTsNCiAgICArCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19OT05DWUNMSUMpOw0KICAgICsJ
bWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX0lHTk9SRUNBU0UpOw0KICAgICsJc2V0X21lbnVf
bWFyayhjdXJzZXNfbWVudSwgIiAiKTsNCiAgICArCXNldF9tZW51X2ZvcmUoY3Vyc2VzX21lbnUs
IGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0ZPUkVdKTsNCiAgICArCXNldF9tZW51X2JhY2soY3Vyc2Vz
X21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0JBQ0tdKTsNCiAgICArCXNldF9tZW51X2dyZXko
Y3Vyc2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0dSRVldKTsNCiAgICArDQogICAgKwlz
ZXRfY29uZmlnX2ZpbGVuYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSk7DQogICAgKwlzZXR1cF93
aW5kb3dzKCk7DQogICAgKw0KICAgICsJLyogY2hlY2sgZm9yIEtFWV9GVU5DKDEpICovDQogICAg
KwlpZiAoaGFzX2tleShLRVlfRigxKSkgPT0gRkFMU0UpIHsNCiAgICArCQlzaG93X3Njcm9sbF93
aW4obWFpbl93aW5kb3csDQogICAgKwkJCQkiSW5zdHJ1Y3Rpb25zIiwNCiAgICArCQkJCW1lbnVf
bm9fZl9pbnN0cnVjdGlvbnMpOw0KICAgICsJfQ0KICAgICsNCiAgICArCWNvbmZfc2V0X21lc3Nh
Z2VfY2FsbGJhY2soY29uZl9tZXNzYWdlX2NhbGxiYWNrKTsNCiAgICArCS8qIGRvIHRoZSB3b3Jr
ICovDQogICAgKwl3aGlsZSAoIWdsb2JhbF9leGl0KSB7DQogICAgKwkJY29uZigmcm9vdG1lbnUp
Ow0KICAgICsJCWlmICghZ2xvYmFsX2V4aXQgJiYgZG9fZXhpdCgpID09IDApDQogICAgKwkJCWJy
ZWFrOw0KICAgICsJfQ0KICAgICsJLyogb2ssIHdlIGFyZSBkb25lICovDQogICAgKwl1bnBvc3Rf
bWVudShjdXJzZXNfbWVudSk7DQogICAgKwlmcmVlX21lbnUoY3Vyc2VzX21lbnUpOw0KICAgICsJ
ZGVsd2luKG1haW5fd2luZG93KTsNCiAgICArCWNsZWFyKCk7DQogICAgKwlyZWZyZXNoKCk7DQog
ICAgKwllbmR3aW4oKTsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuZ3VpLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L25j
b25mLmd1aS5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi43
N2Y1MjVhDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bmNvbmYuZ3VpLmMNCiAgICBAQCAtMCwwICsxLDY2NCBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
TmlyIFR6YWNoYXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT4NCiAgICArICoNCiAgICArICogRGVy
aXZlZCBmcm9tIG1lbnVjb25maWcuDQogICAgKyAqLw0KICAgICsjaW5jbHVkZSAibmNvbmYuaCIN
CiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsNCiAgICArLyogYSBsaXN0IG9mIGFsbCB0aGUg
ZGlmZmVyZW50IHdpZGdldHMgd2UgdXNlICovDQogICAgK2F0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVz
W0FUVFJfTUFYKzFdID0gezB9Ow0KICAgICsNCiAgICArLyogYXZhaWxhYmxlIGNvbG9yczoNCiAg
ICArICAgQ09MT1JfQkxBQ0sgICAwDQogICAgKyAgIENPTE9SX1JFRCAgICAgMQ0KICAgICsgICBD
T0xPUl9HUkVFTiAgIDINCiAgICArICAgQ09MT1JfWUVMTE9XICAzDQogICAgKyAgIENPTE9SX0JM
VUUgICAgNA0KICAgICsgICBDT0xPUl9NQUdFTlRBIDUNCiAgICArICAgQ09MT1JfQ1lBTiAgICA2
DQogICAgKyAgIENPTE9SX1dISVRFICAgNw0KICAgICsgICAqLw0KICAgICtzdGF0aWMgdm9pZCBz
ZXRfbm9ybWFsX2NvbG9ycyh2b2lkKQ0KICAgICt7DQogICAgKwlpbml0X3BhaXIoTk9STUFMLCAt
MSwgLTEpOw0KICAgICsJaW5pdF9wYWlyKE1BSU5fSEVBRElORywgQ09MT1JfTUFHRU5UQSwgLTEp
Ow0KICAgICsNCiAgICArCS8qIEZPUkUgaXMgZm9yIHRoZSBzZWxlY3RlZCBpdGVtICovDQogICAg
Kwlpbml0X3BhaXIoTUFJTl9NRU5VX0ZPUkUsIC0xLCAtMSk7DQogICAgKwkvKiBCQUNLIGZvciBh
bGwgdGhlIHJlc3QgKi8NCiAgICArCWluaXRfcGFpcihNQUlOX01FTlVfQkFDSywgLTEsIC0xKTsN
CiAgICArCWluaXRfcGFpcihNQUlOX01FTlVfR1JFWSwgLTEsIC0xKTsNCiAgICArCWluaXRfcGFp
cihNQUlOX01FTlVfSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsNCiAgICArCWluaXRfcGFpcihN
QUlOX01FTlVfQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsNCiAgICArDQogICAgKwlpbml0X3BhaXIo
U0NST0xMV0lOX1RFWFQsIC0xLCAtMSk7DQogICAgKwlpbml0X3BhaXIoU0NST0xMV0lOX0hFQURJ
TkcsIENPTE9SX0dSRUVOLCAtMSk7DQogICAgKwlpbml0X3BhaXIoU0NST0xMV0lOX0JPWCwgQ09M
T1JfWUVMTE9XLCAtMSk7DQogICAgKw0KICAgICsJaW5pdF9wYWlyKERJQUxPR19URVhULCAtMSwg
LTEpOw0KICAgICsJaW5pdF9wYWlyKERJQUxPR19CT1gsIENPTE9SX1lFTExPVywgLTEpOw0KICAg
ICsJaW5pdF9wYWlyKERJQUxPR19NRU5VX0JBQ0ssIENPTE9SX1lFTExPVywgLTEpOw0KICAgICsJ
aW5pdF9wYWlyKERJQUxPR19NRU5VX0ZPUkUsIENPTE9SX1JFRCwgLTEpOw0KICAgICsNCiAgICAr
CWluaXRfcGFpcihJTlBVVF9CT1gsIENPTE9SX1lFTExPVywgLTEpOw0KICAgICsJaW5pdF9wYWly
KElOUFVUX0hFQURJTkcsIENPTE9SX0dSRUVOLCAtMSk7DQogICAgKwlpbml0X3BhaXIoSU5QVVRf
VEVYVCwgLTEsIC0xKTsNCiAgICArCWluaXRfcGFpcihJTlBVVF9GSUVMRCwgLTEsIC0xKTsNCiAg
ICArDQogICAgKwlpbml0X3BhaXIoRlVOQ1RJT05fSElHSExJR0hULCAtMSwgLTEpOw0KICAgICsJ
aW5pdF9wYWlyKEZVTkNUSU9OX1RFWFQsIENPTE9SX1lFTExPVywgLTEpOw0KICAgICt9DQogICAg
Kw0KICAgICsvKiBhdmFpbGFibGUgYXR0cmlidXRlczoNCiAgICArICAgQV9OT1JNQUwgICAgICAg
IE5vcm1hbCBkaXNwbGF5IChubyBoaWdobGlnaHQpDQogICAgKyAgIEFfU1RBTkRPVVQgICAgICBC
ZXN0IGhpZ2hsaWdodGluZyBtb2RlIG9mIHRoZSB0ZXJtaW5hbC4NCiAgICArICAgQV9VTkRFUkxJ
TkUgICAgIFVuZGVybGluaW5nDQogICAgKyAgIEFfUkVWRVJTRSAgICAgICBSZXZlcnNlIHZpZGVv
DQogICAgKyAgIEFfQkxJTksgICAgICAgICBCbGlua2luZw0KICAgICsgICBBX0RJTSAgICAgICAg
ICAgSGFsZiBicmlnaHQNCiAgICArICAgQV9CT0xEICAgICAgICAgIEV4dHJhIGJyaWdodCBvciBi
b2xkDQogICAgKyAgIEFfUFJPVEVDVCAgICAgICBQcm90ZWN0ZWQgbW9kZQ0KICAgICsgICBBX0lO
VklTICAgICAgICAgSW52aXNpYmxlIG9yIGJsYW5rIG1vZGUNCiAgICArICAgQV9BTFRDSEFSU0VU
ICAgIEFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0DQogICAgKyAgIEFfQ0hBUlRFWFQgICAgICBCaXQt
bWFzayB0byBleHRyYWN0IGEgY2hhcmFjdGVyDQogICAgKyAgIENPTE9SX1BBSVIobikgICBDb2xv
ci1wYWlyIG51bWJlciBuDQogICAgKyAgICovDQogICAgK3N0YXRpYyB2b2lkIG5vcm1hbF9jb2xv
cl90aGVtZSh2b2lkKQ0KICAgICt7DQogICAgKwkvKiBhdXRvbWF0aWNhbGx5IGFkZCBjb2xvci4u
LiAqLw0KICAgICsjZGVmaW5lIG1rYXR0cihuYW1lLCBhdHRyKSBkbyB7IFwNCiAgICArYXR0cmli
dXRlc1tuYW1lXSA9IGF0dHIgfCBDT0xPUl9QQUlSKG5hbWUpOyB9IHdoaWxlICgwKQ0KICAgICsJ
bWthdHRyKE5PUk1BTCwgTk9STUFMKTsNCiAgICArCW1rYXR0cihNQUlOX0hFQURJTkcsIEFfQk9M
RCB8IEFfVU5ERVJMSU5FKTsNCiAgICArDQogICAgKwlta2F0dHIoTUFJTl9NRU5VX0ZPUkUsIEFf
UkVWRVJTRSk7DQogICAgKwlta2F0dHIoTUFJTl9NRU5VX0JBQ0ssIEFfTk9STUFMKTsNCiAgICAr
CW1rYXR0cihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOw0KICAgICsJbWthdHRyKE1BSU5fTUVO
VV9IRUFESU5HLCBBX0JPTEQpOw0KICAgICsJbWthdHRyKE1BSU5fTUVOVV9CT1gsIEFfTk9STUFM
KTsNCiAgICArDQogICAgKwlta2F0dHIoU0NST0xMV0lOX1RFWFQsIEFfTk9STUFMKTsNCiAgICAr
CW1rYXR0cihTQ1JPTExXSU5fSEVBRElORywgQV9CT0xEKTsNCiAgICArCW1rYXR0cihTQ1JPTExX
SU5fQk9YLCBBX0JPTEQpOw0KICAgICsNCiAgICArCW1rYXR0cihESUFMT0dfVEVYVCwgQV9CT0xE
KTsNCiAgICArCW1rYXR0cihESUFMT0dfQk9YLCBBX0JPTEQpOw0KICAgICsJbWthdHRyKERJQUxP
R19NRU5VX0ZPUkUsIEFfU1RBTkRPVVQpOw0KICAgICsJbWthdHRyKERJQUxPR19NRU5VX0JBQ0ss
IEFfTk9STUFMKTsNCiAgICArDQogICAgKwlta2F0dHIoSU5QVVRfQk9YLCBBX05PUk1BTCk7DQog
ICAgKwlta2F0dHIoSU5QVVRfSEVBRElORywgQV9CT0xEKTsNCiAgICArCW1rYXR0cihJTlBVVF9U
RVhULCBBX05PUk1BTCk7DQogICAgKwlta2F0dHIoSU5QVVRfRklFTEQsIEFfVU5ERVJMSU5FKTsN
CiAgICArDQogICAgKwlta2F0dHIoRlVOQ1RJT05fSElHSExJR0hULCBBX0JPTEQpOw0KICAgICsJ
bWthdHRyKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7DQogICAgK30NCiAgICArDQogICAgK3N0
YXRpYyB2b2lkIG5vX2NvbG9yc190aGVtZSh2b2lkKQ0KICAgICt7DQogICAgKwkvKiBhdXRvbWF0
aWNhbGx5IGFkZCBoaWdobGlnaHQsIG5vIGNvbG9yICovDQogICAgKyNkZWZpbmUgbWthdHRybihu
YW1lLCBhdHRyKSB7IGF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyOyB9DQogICAgKw0KICAgICsJbWth
dHRybihOT1JNQUwsIE5PUk1BTCk7DQogICAgKwlta2F0dHJuKE1BSU5fSEVBRElORywgQV9CT0xE
IHwgQV9VTkRFUkxJTkUpOw0KICAgICsNCiAgICArCW1rYXR0cm4oTUFJTl9NRU5VX0ZPUkUsIEFf
U1RBTkRPVVQpOw0KICAgICsJbWthdHRybihNQUlOX01FTlVfQkFDSywgQV9OT1JNQUwpOw0KICAg
ICsJbWthdHRybihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOw0KICAgICsJbWthdHRybihNQUlO
X01FTlVfSEVBRElORywgQV9CT0xEKTsNCiAgICArCW1rYXR0cm4oTUFJTl9NRU5VX0JPWCwgQV9O
T1JNQUwpOw0KICAgICsNCiAgICArCW1rYXR0cm4oU0NST0xMV0lOX1RFWFQsIEFfTk9STUFMKTsN
CiAgICArCW1rYXR0cm4oU0NST0xMV0lOX0hFQURJTkcsIEFfQk9MRCk7DQogICAgKwlta2F0dHJu
KFNDUk9MTFdJTl9CT1gsIEFfQk9MRCk7DQogICAgKw0KICAgICsJbWthdHRybihESUFMT0dfVEVY
VCwgQV9OT1JNQUwpOw0KICAgICsJbWthdHRybihESUFMT0dfQk9YLCBBX0JPTEQpOw0KICAgICsJ
bWthdHRybihESUFMT0dfTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsNCiAgICArCW1rYXR0cm4oRElB
TE9HX01FTlVfQkFDSywgQV9OT1JNQUwpOw0KICAgICsNCiAgICArCW1rYXR0cm4oSU5QVVRfQk9Y
LCBBX0JPTEQpOw0KICAgICsJbWthdHRybihJTlBVVF9IRUFESU5HLCBBX0JPTEQpOw0KICAgICsJ
bWthdHRybihJTlBVVF9URVhULCBBX05PUk1BTCk7DQogICAgKwlta2F0dHJuKElOUFVUX0ZJRUxE
LCBBX1VOREVSTElORSk7DQogICAgKw0KICAgICsJbWthdHRybihGVU5DVElPTl9ISUdITElHSFQs
IEFfQk9MRCk7DQogICAgKwlta2F0dHJuKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7DQogICAg
K30NCiAgICArDQogICAgK3ZvaWQgc2V0X2NvbG9ycyh2b2lkKQ0KICAgICt7DQogICAgKwlzdGFy
dF9jb2xvcigpOw0KICAgICsJdXNlX2RlZmF1bHRfY29sb3JzKCk7DQogICAgKwlzZXRfbm9ybWFs
X2NvbG9ycygpOw0KICAgICsJaWYgKGhhc19jb2xvcnMoKSkgew0KICAgICsJCW5vcm1hbF9jb2xv
cl90aGVtZSgpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQkvKiBnaXZlIGRlZmF1bHRzICovDQog
ICAgKwkJbm9fY29sb3JzX3RoZW1lKCk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKw0K
ICAgICsvKiB0aGlzIGNoYW5nZXMgdGhlIHdpbmRvd3MgYXR0cmlidXRlcyAhISEgKi8NCiAgICAr
dm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sDQogICAgKwkJaW50IHN0YXJ0eSwNCiAg
ICArCQlpbnQgc3RhcnR4LA0KICAgICsJCWludCB3aWR0aCwNCiAgICArCQljb25zdCBjaGFyICpz
dHJpbmcsDQogICAgKwkJY2h0eXBlIGNvbG9yKQ0KICAgICt7ICAgICAgaW50IGxlbmd0aCwgeCwg
eTsNCiAgICArCWZsb2F0IHRlbXA7DQogICAgKw0KICAgICsNCiAgICArCWlmICh3aW4gPT0gTlVM
TCkNCiAgICArCQl3aW4gPSBzdGRzY3I7DQogICAgKwlnZXR5eCh3aW4sIHksIHgpOw0KICAgICsJ
aWYgKHN0YXJ0eCAhPSAwKQ0KICAgICsJCXggPSBzdGFydHg7DQogICAgKwlpZiAoc3RhcnR5ICE9
IDApDQogICAgKwkJeSA9IHN0YXJ0eTsNCiAgICArCWlmICh3aWR0aCA9PSAwKQ0KICAgICsJCXdp
ZHRoID0gODA7DQogICAgKw0KICAgICsJbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7DQogICAgKwl0
ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKSAvIDI7DQogICAgKwl4ID0gc3RhcnR4ICsgKGludCl0ZW1w
Ow0KICAgICsJKHZvaWQpIHdhdHRyc2V0KHdpbiwgY29sb3IpOw0KICAgICsJbXZ3cHJpbnR3KHdp
biwgeSwgeCwgIiVzIiwgc3RyaW5nKTsNCiAgICArCXJlZnJlc2goKTsNCiAgICArfQ0KICAgICsN
CiAgICAraW50IGdldF9saW5lX25vKGNvbnN0IGNoYXIgKnRleHQpDQogICAgK3sNCiAgICArCWlu
dCBpOw0KICAgICsJaW50IHRvdGFsID0gMTsNCiAgICArDQogICAgKwlpZiAoIXRleHQpDQogICAg
KwkJcmV0dXJuIDA7DQogICAgKw0KICAgICsJZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAnOyBp
KyspDQogICAgKwkJaWYgKHRleHRbaV0gPT0gJ1xuJykNCiAgICArCQkJdG90YWwrKzsNCiAgICAr
CXJldHVybiB0b3RhbDsNCiAgICArfQ0KICAgICsNCiAgICArY29uc3QgY2hhciAqZ2V0X2xpbmUo
Y29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVfbm8pDQogICAgK3sNCiAgICArCWludCBpOw0KICAg
ICsJaW50IGxpbmVzID0gMDsNCiAgICArDQogICAgKwlpZiAoIXRleHQpDQogICAgKwkJcmV0dXJu
IE5VTEw7DQogICAgKw0KICAgICsJZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAnICYmIGxpbmVz
IDwgbGluZV9ubzsgaSsrKQ0KICAgICsJCWlmICh0ZXh0W2ldID09ICdcbicpDQogICAgKwkJCWxp
bmVzKys7DQogICAgKwlyZXR1cm4gdGV4dCtpOw0KICAgICt9DQogICAgKw0KICAgICtpbnQgZ2V0
X2xpbmVfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmUpDQogICAgK3sNCiAgICArCWludCByZXMgPSAw
Ow0KICAgICsJd2hpbGUgKCpsaW5lICE9ICdcMCcgJiYgKmxpbmUgIT0gJ1xuJykgew0KICAgICsJ
CWxpbmUrKzsNCiAgICArCQlyZXMrKzsNCiAgICArCX0NCiAgICArCXJldHVybiByZXM7DQogICAg
K30NCiAgICArDQogICAgKy8qIHByaW50IGFsbCBsaW5lcyB0byB0aGUgd2luZG93LiAqLw0KICAg
ICt2b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KQ0KICAgICt7
DQogICAgKwlpbnQgeCwgeTsNCiAgICArCWludCB0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRl
eHQpOw0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJZ2V0bWF4eXgod2luLCB5LCB4KTsNCiAg
ICArCS8qIGRvIG5vdCBnbyBvdmVyIGVuZCBvZiBsaW5lICovDQogICAgKwl0b3RhbF9saW5lcyA9
IG1pbih0b3RhbF9saW5lcywgeSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbGluZXM7
IGkrKykgew0KICAgICsJCWNoYXIgdG1wW3grMTBdOw0KICAgICsJCWNvbnN0IGNoYXIgKmxpbmUg
PSBnZXRfbGluZSh0ZXh0LCBpKTsNCiAgICArCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3RoKGxp
bmUpOw0KICAgICsJCXN0cm5jcHkodG1wLCBsaW5lLCBtaW4obGVuLCB4KSk7DQogICAgKwkJdG1w
W2xlbl0gPSAnXDAnOw0KICAgICsJCW12d3ByaW50dyh3aW4sIGksIDAsICIlcyIsIHRtcCk7DQog
ICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qIGdldCB0aGUgbWVzc2FnZSwgYW5kIGJ1dHRv
bnMuDQogICAgKyAqIGVhY2ggYnV0dG9uIG11c3QgYmUgYSBjaGFyKg0KICAgICsgKiByZXR1cm4g
dGhlIHNlbGVjdGVkIGJ1dHRvbg0KICAgICsgKg0KICAgICsgKiB0aGlzIGRpYWxvZyBpcyB1c2Vk
IGZvciAyIGRpZmZlcmVudCB0aGluZ3M6DQogICAgKyAqIDEpIHNob3cgYSB0ZXh0IGJveCwgbm8g
YnV0dG9ucy4NCiAgICArICogMikgc2hvdyBhIGRpYWxvZywgd2l0aCBob3Jpem9udGFsIGJ1dHRv
bnMNCiAgICArICovDQogICAgK2ludCBidG5fZGlhbG9nKFdJTkRPVyAqbWFpbl93aW5kb3csIGNv
bnN0IGNoYXIgKm1zZywgaW50IGJ0bl9udW0sIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBh
cDsNCiAgICArCWNoYXIgKmJ0bjsNCiAgICArCWludCBidG5zX3dpZHRoID0gMDsNCiAgICArCWlu
dCBtc2dfbGluZXMgPSAwOw0KICAgICsJaW50IG1zZ193aWR0aCA9IDA7DQogICAgKwlpbnQgdG90
YWxfd2lkdGg7DQogICAgKwlpbnQgd2luX3Jvd3MgPSAwOw0KICAgICsJV0lORE9XICp3aW47DQog
ICAgKwlXSU5ET1cgKm1zZ193aW47DQogICAgKwlXSU5ET1cgKm1lbnVfd2luOw0KICAgICsJTUVO
VSAqbWVudTsNCiAgICArCUlURU0gKmJ0bnNbYnRuX251bSsxXTsNCiAgICArCWludCBpLCB4LCB5
Ow0KICAgICsJaW50IHJlcyA9IC0xOw0KICAgICsNCiAgICArDQogICAgKwl2YV9zdGFydChhcCwg
YnRuX251bSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgYnRuX251bTsgaSsrKSB7DQogICAgKwkJ
YnRuID0gdmFfYXJnKGFwLCBjaGFyICopOw0KICAgICsJCWJ0bnNbaV0gPSBuZXdfaXRlbShidG4s
ICIiKTsNCiAgICArCQlidG5zX3dpZHRoICs9IHN0cmxlbihidG4pKzE7DQogICAgKwl9DQogICAg
Kwl2YV9lbmQoYXApOw0KICAgICsJYnRuc1tidG5fbnVtXSA9IE5VTEw7DQogICAgKw0KICAgICsJ
LyogZmluZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLw0KICAgICsJbXNnX2xpbmVzID0gZ2V0
X2xpbmVfbm8obXNnKTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBtc2dfbGluZXM7IGkrKykgew0K
ICAgICsJCWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGluZShtc2csIGkpOw0KICAgICsJCWludCBs
ZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7DQogICAgKwkJaWYgKG1zZ193aWR0aCA8IGxlbikN
CiAgICArCQkJbXNnX3dpZHRoID0gbGVuOw0KICAgICsJfQ0KICAgICsNCiAgICArCXRvdGFsX3dp
ZHRoID0gbWF4KG1zZ193aWR0aCwgYnRuc193aWR0aCk7DQogICAgKwkvKiBwbGFjZSBkaWFsb2cg
aW4gbWlkZGxlIG9mIHNjcmVlbiAqLw0KICAgICsJeSA9IChnZXRtYXh5KHN0ZHNjciktKG1zZ19s
aW5lcys0KSkvMjsNCiAgICArCXggPSAoZ2V0bWF4eChzdGRzY3IpLSh0b3RhbF93aWR0aCs0KSkv
MjsNCiAgICArDQogICAgKw0KICAgICsJLyogY3JlYXRlIHRoZSB3aW5kb3dzICovDQogICAgKwlp
ZiAoYnRuX251bSA+IDApDQogICAgKwkJd2luX3Jvd3MgPSBtc2dfbGluZXMrNDsNCiAgICArCWVs
c2UNCiAgICArCQl3aW5fcm93cyA9IG1zZ19saW5lcysyOw0KICAgICsNCiAgICArCXdpbiA9IG5l
d3dpbih3aW5fcm93cywgdG90YWxfd2lkdGgrNCwgeSwgeCk7DQogICAgKwlrZXlwYWQod2luLCBU
UlVFKTsNCiAgICArCW1lbnVfd2luID0gZGVyd2luKHdpbiwgMSwgYnRuc193aWR0aCwgd2luX3Jv
d3MtMiwNCiAgICArCQkJMSsodG90YWxfd2lkdGgrMi1idG5zX3dpZHRoKS8yKTsNCiAgICArCW1l
bnUgPSBuZXdfbWVudShidG5zKTsNCiAgICArCW1zZ193aW4gPSBkZXJ3aW4od2luLCB3aW5fcm93
cy0yLCBtc2dfd2lkdGgsIDEsDQogICAgKwkJCTErKHRvdGFsX3dpZHRoKzItbXNnX3dpZHRoKS8y
KTsNCiAgICArDQogICAgKwlzZXRfbWVudV9mb3JlKG1lbnUsIGF0dHJpYnV0ZXNbRElBTE9HX01F
TlVfRk9SRV0pOw0KICAgICsJc2V0X21lbnVfYmFjayhtZW51LCBhdHRyaWJ1dGVzW0RJQUxPR19N
RU5VX0JBQ0tdKTsNCiAgICArDQogICAgKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1dGVz
W0RJQUxPR19CT1hdKTsNCiAgICArCWJveCh3aW4sIDAsIDApOw0KICAgICsNCiAgICArCS8qIHBy
aW50IG1lc3NhZ2UgKi8NCiAgICArCSh2b2lkKSB3YXR0cnNldChtc2dfd2luLCBhdHRyaWJ1dGVz
W0RJQUxPR19URVhUXSk7DQogICAgKwlmaWxsX3dpbmRvdyhtc2dfd2luLCBtc2cpOw0KICAgICsN
CiAgICArCXNldF9tZW51X3dpbihtZW51LCB3aW4pOw0KICAgICsJc2V0X21lbnVfc3ViKG1lbnUs
IG1lbnVfd2luKTsNCiAgICArCXNldF9tZW51X2Zvcm1hdChtZW51LCAxLCBidG5fbnVtKTsNCiAg
ICArCW1lbnVfb3B0c19vZmYobWVudSwgT19TSE9XREVTQyk7DQogICAgKwltZW51X29wdHNfb2Zm
KG1lbnUsIE9fU0hPV01BVENIKTsNCiAgICArCW1lbnVfb3B0c19vbihtZW51LCBPX09ORVZBTFVF
KTsNCiAgICArCW1lbnVfb3B0c19vbihtZW51LCBPX05PTkNZQ0xJQyk7DQogICAgKwlzZXRfbWVu
dV9tYXJrKG1lbnUsICIiKTsNCiAgICArCXBvc3RfbWVudShtZW51KTsNCiAgICArDQogICAgKw0K
ICAgICsJdG91Y2h3aW4od2luKTsNCiAgICArCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5k
b3cpOw0KICAgICsJd2hpbGUgKChyZXMgPSB3Z2V0Y2god2luKSkpIHsNCiAgICArCQlzd2l0Y2gg
KHJlcykgew0KICAgICsJCWNhc2UgS0VZX0xFRlQ6DQogICAgKwkJCW1lbnVfZHJpdmVyKG1lbnUs
IFJFUV9MRUZUX0lURU0pOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9SSUdIVDoN
CiAgICArCQkJbWVudV9kcml2ZXIobWVudSwgUkVRX1JJR0hUX0lURU0pOw0KICAgICsJCQlicmVh
azsNCiAgICArCQljYXNlIDEwOiAvKiBFTlRFUiAqLw0KICAgICsJCWNhc2UgMjc6IC8qIEVTQ0FQ
RSAqLw0KICAgICsJCWNhc2UgJyAnOg0KICAgICsJCWNhc2UgS0VZX0YoRl9CQUNLKToNCiAgICAr
CQljYXNlIEtFWV9GKEZfRVhJVCk6DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCQl0
b3VjaHdpbih3aW4pOw0KICAgICsJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOw0K
ICAgICsNCiAgICArCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAnICcpIHsNCiAgICArCQkJcmVz
ID0gaXRlbV9pbmRleChjdXJyZW50X2l0ZW0obWVudSkpOw0KICAgICsJCQlicmVhazsNCiAgICAr
CQl9IGVsc2UgaWYgKHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0YoRl9CQUNLKSB8fA0KICAgICsJ
CQkJcmVzID09IEtFWV9GKEZfRVhJVCkpIHsNCiAgICArCQkJcmVzID0gS0VZX0VYSVQ7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwl1bnBvc3RfbWVudSht
ZW51KTsNCiAgICArCWZyZWVfbWVudShtZW51KTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBidG5f
bnVtOyBpKyspDQogICAgKwkJZnJlZV9pdGVtKGJ0bnNbaV0pOw0KICAgICsNCiAgICArCWRlbHdp
bih3aW4pOw0KICAgICsJcmV0dXJuIHJlczsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGRpYWxv
Z19pbnB1dGJveChXSU5ET1cgKm1haW5fd2luZG93LA0KICAgICsJCWNvbnN0IGNoYXIgKnRpdGxl
LCBjb25zdCBjaGFyICpwcm9tcHQsDQogICAgKwkJY29uc3QgY2hhciAqaW5pdCwgY2hhciAqKnJl
c3VsdHAsIGludCAqcmVzdWx0X2xlbikNCiAgICArew0KICAgICsJaW50IHByb21wdF9saW5lcyA9
IDA7DQogICAgKwlpbnQgcHJvbXB0X3dpZHRoID0gMDsNCiAgICArCVdJTkRPVyAqd2luOw0KICAg
ICsJV0lORE9XICpwcm9tcHRfd2luOw0KICAgICsJV0lORE9XICpmb3JtX3dpbjsNCiAgICArCVBB
TkVMICpwYW5lbDsNCiAgICArCWludCBpLCB4LCB5LCBsaW5lcywgY29sdW1ucywgd2luX2xpbmVz
LCB3aW5fY29sczsNCiAgICArCWludCByZXMgPSAtMTsNCiAgICArCWludCBjdXJzb3JfcG9zaXRp
b24gPSBzdHJsZW4oaW5pdCk7DQogICAgKwlpbnQgY3Vyc29yX2Zvcm1fd2luOw0KICAgICsJY2hh
ciAqcmVzdWx0ID0gKnJlc3VsdHA7DQogICAgKw0KICAgICsJZ2V0bWF4eXgoc3Rkc2NyLCBsaW5l
cywgY29sdW1ucyk7DQogICAgKw0KICAgICsJaWYgKHN0cmxlbihpbml0KSsxID4gKnJlc3VsdF9s
ZW4pIHsNCiAgICArCQkqcmVzdWx0X2xlbiA9IHN0cmxlbihpbml0KSsxOw0KICAgICsJCSpyZXN1
bHRwID0gcmVzdWx0ID0geHJlYWxsb2MocmVzdWx0LCAqcmVzdWx0X2xlbik7DQogICAgKwl9DQog
ICAgKw0KICAgICsJLyogZmluZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLw0KICAgICsJcHJv
bXB0X2xpbmVzID0gZ2V0X2xpbmVfbm8ocHJvbXB0KTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBw
cm9tcHRfbGluZXM7IGkrKykgew0KICAgICsJCWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGluZShw
cm9tcHQsIGkpOw0KICAgICsJCWludCBsZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7DQogICAg
KwkJcHJvbXB0X3dpZHRoID0gbWF4KHByb21wdF93aWR0aCwgbGVuKTsNCiAgICArCX0NCiAgICAr
DQogICAgKwlpZiAodGl0bGUpDQogICAgKwkJcHJvbXB0X3dpZHRoID0gbWF4KHByb21wdF93aWR0
aCwgc3RybGVuKHRpdGxlKSk7DQogICAgKw0KICAgICsJd2luX2xpbmVzID0gbWluKHByb21wdF9s
aW5lcys2LCBsaW5lcy0yKTsNCiAgICArCXdpbl9jb2xzID0gbWluKHByb21wdF93aWR0aCs3LCBj
b2x1bW5zLTIpOw0KICAgICsJcHJvbXB0X2xpbmVzID0gbWF4KHdpbl9saW5lcy02LCAwKTsNCiAg
ICArCXByb21wdF93aWR0aCA9IG1heCh3aW5fY29scy03LCAwKTsNCiAgICArDQogICAgKwkvKiBw
bGFjZSBkaWFsb2cgaW4gbWlkZGxlIG9mIHNjcmVlbiAqLw0KICAgICsJeSA9IChsaW5lcy13aW5f
bGluZXMpLzI7DQogICAgKwl4ID0gKGNvbHVtbnMtd2luX2NvbHMpLzI7DQogICAgKw0KICAgICsJ
c3RybmNweShyZXN1bHQsIGluaXQsICpyZXN1bHRfbGVuKTsNCiAgICArDQogICAgKwkvKiBjcmVh
dGUgdGhlIHdpbmRvd3MgKi8NCiAgICArCXdpbiA9IG5ld3dpbih3aW5fbGluZXMsIHdpbl9jb2xz
LCB5LCB4KTsNCiAgICArCXByb21wdF93aW4gPSBkZXJ3aW4od2luLCBwcm9tcHRfbGluZXMrMSwg
cHJvbXB0X3dpZHRoLCAyLCAyKTsNCiAgICArCWZvcm1fd2luID0gZGVyd2luKHdpbiwgMSwgcHJv
bXB0X3dpZHRoLCBwcm9tcHRfbGluZXMrMywgMik7DQogICAgKwlrZXlwYWQoZm9ybV93aW4sIFRS
VUUpOw0KICAgICsNCiAgICArCSh2b2lkKSB3YXR0cnNldChmb3JtX3dpbiwgYXR0cmlidXRlc1tJ
TlBVVF9GSUVMRF0pOw0KICAgICsNCiAgICArCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJpYnV0
ZXNbSU5QVVRfQk9YXSk7DQogICAgKwlib3god2luLCAwLCAwKTsNCiAgICArCSh2b2lkKSB3YXR0
cnNldCh3aW4sIGF0dHJpYnV0ZXNbSU5QVVRfSEVBRElOR10pOw0KICAgICsJaWYgKHRpdGxlKQ0K
ICAgICsJCW12d3ByaW50dyh3aW4sIDAsIDMsICIlcyIsIHRpdGxlKTsNCiAgICArDQogICAgKwkv
KiBwcmludCBtZXNzYWdlICovDQogICAgKwkodm9pZCkgd2F0dHJzZXQocHJvbXB0X3dpbiwgYXR0
cmlidXRlc1tJTlBVVF9URVhUXSk7DQogICAgKwlmaWxsX3dpbmRvdyhwcm9tcHRfd2luLCBwcm9t
cHQpOw0KICAgICsNCiAgICArCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiUqcyIsIHByb21w
dF93aWR0aCwgIiAiKTsNCiAgICArCWN1cnNvcl9mb3JtX3dpbiA9IG1pbihjdXJzb3JfcG9zaXRp
b24sIHByb21wdF93aWR0aC0xKTsNCiAgICArCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiVz
IiwNCiAgICArCQkgIHJlc3VsdCArIGN1cnNvcl9wb3NpdGlvbi1jdXJzb3JfZm9ybV93aW4pOw0K
ICAgICsNCiAgICArCS8qIGNyZWF0ZSBwYW5lbHMgKi8NCiAgICArCXBhbmVsID0gbmV3X3BhbmVs
KHdpbik7DQogICAgKw0KICAgICsJLyogc2hvdyB0aGUgY3Vyc29yICovDQogICAgKwljdXJzX3Nl
dCgxKTsNCiAgICArDQogICAgKwl0b3VjaHdpbih3aW4pOw0KICAgICsJcmVmcmVzaF9hbGxfd2lu
ZG93cyhtYWluX3dpbmRvdyk7DQogICAgKwl3aGlsZSAoKHJlcyA9IHdnZXRjaChmb3JtX3dpbikp
KSB7DQogICAgKwkJaW50IGxlbiA9IHN0cmxlbihyZXN1bHQpOw0KICAgICsJCXN3aXRjaCAocmVz
KSB7DQogICAgKwkJY2FzZSAxMDogLyogRU5URVIgKi8NCiAgICArCQljYXNlIDI3OiAvKiBFU0NB
UEUgKi8NCiAgICArCQljYXNlIEtFWV9GKEZfSEVMUCk6DQogICAgKwkJY2FzZSBLRVlfRihGX0VY
SVQpOg0KICAgICsJCWNhc2UgS0VZX0YoRl9CQUNLKToNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
Y2FzZSA4OiAgIC8qIF5IICovDQogICAgKwkJY2FzZSAxMjc6IC8qIF4/ICovDQogICAgKwkJY2Fz
ZSBLRVlfQkFDS1NQQUNFOg0KICAgICsJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID4gMCkgew0KICAg
ICsJCQkJbWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbi0xXSwNCiAgICArCQkJCQkJJnJl
c3VsdFtjdXJzb3JfcG9zaXRpb25dLA0KICAgICsJCQkJCQlsZW4tY3Vyc29yX3Bvc2l0aW9uKzEp
Ow0KICAgICsJCQkJY3Vyc29yX3Bvc2l0aW9uLS07DQogICAgKwkJCQljdXJzb3JfZm9ybV93aW4t
LTsNCiAgICArCQkJCWxlbi0tOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNh
c2UgS0VZX0RDOg0KICAgICsJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID49IDAgJiYgY3Vyc29yX3Bv
c2l0aW9uIDwgbGVuKSB7DQogICAgKwkJCQltZW1tb3ZlKCZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9u
XSwNCiAgICArCQkJCQkJJnJlc3VsdFtjdXJzb3JfcG9zaXRpb24rMV0sDQogICAgKwkJCQkJCWxl
bi1jdXJzb3JfcG9zaXRpb24rMSk7DQogICAgKwkJCQlsZW4tLTsNCiAgICArCQkJfQ0KICAgICsJ
CQlicmVhazsNCiAgICArCQljYXNlIEtFWV9VUDoNCiAgICArCQljYXNlIEtFWV9SSUdIVDoNCiAg
ICArCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA8IGxlbikgew0KICAgICsJCQkJY3Vyc29yX3Bvc2l0
aW9uKys7DQogICAgKwkJCQljdXJzb3JfZm9ybV93aW4rKzsNCiAgICArCQkJfQ0KICAgICsJCQli
cmVhazsNCiAgICArCQljYXNlIEtFWV9ET1dOOg0KICAgICsJCWNhc2UgS0VZX0xFRlQ6DQogICAg
KwkJCWlmIChjdXJzb3JfcG9zaXRpb24gPiAwKSB7DQogICAgKwkJCQljdXJzb3JfcG9zaXRpb24t
LTsNCiAgICArCQkJCWN1cnNvcl9mb3JtX3dpbi0tOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFr
Ow0KICAgICsJCWNhc2UgS0VZX0hPTUU6DQogICAgKwkJCWN1cnNvcl9wb3NpdGlvbiA9IDA7DQog
ICAgKwkJCWN1cnNvcl9mb3JtX3dpbiA9IDA7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2Ug
S0VZX0VORDoNCiAgICArCQkJY3Vyc29yX3Bvc2l0aW9uID0gbGVuOw0KICAgICsJCQljdXJzb3Jf
Zm9ybV93aW4gPSBtaW4oY3Vyc29yX3Bvc2l0aW9uLCBwcm9tcHRfd2lkdGgtMSk7DQogICAgKwkJ
CWJyZWFrOw0KICAgICsJCWRlZmF1bHQ6DQogICAgKwkJCWlmICgoaXNncmFwaChyZXMpIHx8IGlz
c3BhY2UocmVzKSkpIHsNCiAgICArCQkJCS8qIG9uZSBmb3IgbmV3IGNoYXIsIG9uZSBmb3IgJ1ww
JyAqLw0KICAgICsJCQkJaWYgKGxlbisyID4gKnJlc3VsdF9sZW4pIHsNCiAgICArCQkJCQkqcmVz
dWx0X2xlbiA9IGxlbisyOw0KICAgICsJCQkJCSpyZXN1bHRwID0gcmVzdWx0ID0gcmVhbGxvYyhy
ZXN1bHQsDQogICAgKwkJCQkJCQkJKnJlc3VsdF9sZW4pOw0KICAgICsJCQkJfQ0KICAgICsJCQkJ
LyogaW5zZXJ0IHRoZSBjaGFyIGF0IHRoZSBwcm9wZXIgcG9zaXRpb24gKi8NCiAgICArCQkJCW1l
bW1vdmUoJnJlc3VsdFtjdXJzb3JfcG9zaXRpb24rMV0sDQogICAgKwkJCQkJCSZyZXN1bHRbY3Vy
c29yX3Bvc2l0aW9uXSwNCiAgICArCQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlvbisxKTsNCiAgICAr
CQkJCXJlc3VsdFtjdXJzb3JfcG9zaXRpb25dID0gcmVzOw0KICAgICsJCQkJY3Vyc29yX3Bvc2l0
aW9uKys7DQogICAgKwkJCQljdXJzb3JfZm9ybV93aW4rKzsNCiAgICArCQkJCWxlbisrOw0KICAg
ICsJCQl9IGVsc2Ugew0KICAgICsJCQkJbXZwcmludHcoMCwgMCwgInVua25vd24ga2V5OiAlZFxu
IiwgcmVzKTsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJaWYg
KGN1cnNvcl9mb3JtX3dpbiA8IDApDQogICAgKwkJCWN1cnNvcl9mb3JtX3dpbiA9IDA7DQogICAg
KwkJZWxzZSBpZiAoY3Vyc29yX2Zvcm1fd2luID4gcHJvbXB0X3dpZHRoLTEpDQogICAgKwkJCWN1
cnNvcl9mb3JtX3dpbiA9IHByb21wdF93aWR0aC0xOw0KICAgICsNCiAgICArCQl3bW92ZShmb3Jt
X3dpbiwgMCwgMCk7DQogICAgKwkJd2NscnRvZW9sKGZvcm1fd2luKTsNCiAgICArCQltdndwcmlu
dHcoZm9ybV93aW4sIDAsIDAsICIlKnMiLCBwcm9tcHRfd2lkdGgsICIgIik7DQogICAgKwkJbXZ3
cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAiJXMiLA0KICAgICsJCQlyZXN1bHQgKyBjdXJzb3JfcG9z
aXRpb24tY3Vyc29yX2Zvcm1fd2luKTsNCiAgICArCQl3bW92ZShmb3JtX3dpbiwgMCwgY3Vyc29y
X2Zvcm1fd2luKTsNCiAgICArCQl0b3VjaHdpbih3aW4pOw0KICAgICsJCXJlZnJlc2hfYWxsX3dp
bmRvd3MobWFpbl93aW5kb3cpOw0KICAgICsNCiAgICArCQlpZiAocmVzID09IDEwKSB7DQogICAg
KwkJCXJlcyA9IDA7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0gZWxzZSBpZiAocmVzID09IDI3
IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8DQogICAgKwkJCQlyZXMgPT0gS0VZX0YoRl9FWElU
KSkgew0KICAgICsJCQlyZXMgPSBLRVlfRVhJVDsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfSBl
bHNlIGlmIChyZXMgPT0gS0VZX0YoRl9IRUxQKSkgew0KICAgICsJCQlyZXMgPSAxOw0KICAgICsJ
CQlicmVhazsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJLyogaGlkZSB0aGUgY3Vy
c29yICovDQogICAgKwljdXJzX3NldCgwKTsNCiAgICArCWRlbF9wYW5lbChwYW5lbCk7DQogICAg
KwlkZWx3aW4ocHJvbXB0X3dpbik7DQogICAgKwlkZWx3aW4oZm9ybV93aW4pOw0KICAgICsJZGVs
d2luKHdpbik7DQogICAgKwlyZXR1cm4gcmVzOw0KICAgICt9DQogICAgKw0KICAgICsvKiByZWZy
ZXNoIGFsbCB3aW5kb3dzIGluIHRoZSBjb3JyZWN0IG9yZGVyICovDQogICAgK3ZvaWQgcmVmcmVz
aF9hbGxfd2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93KQ0KICAgICt7DQogICAgKwl1cGRhdGVf
cGFuZWxzKCk7DQogICAgKwl0b3VjaHdpbihtYWluX3dpbmRvdyk7DQogICAgKwlyZWZyZXNoKCk7
DQogICAgK30NCiAgICArDQogICAgKy8qIGxheW1hbidzIHNjcm9sbGFibGUgd2luZG93Li4uICov
DQogICAgK3ZvaWQgc2hvd19zY3JvbGxfd2luKFdJTkRPVyAqbWFpbl93aW5kb3csDQogICAgKwkJ
Y29uc3QgY2hhciAqdGl0bGUsDQogICAgKwkJY29uc3QgY2hhciAqdGV4dCkNCiAgICArew0KICAg
ICsJaW50IHJlczsNCiAgICArCWludCB0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRleHQpOw0K
ICAgICsJaW50IHgsIHksIGxpbmVzLCBjb2x1bW5zOw0KICAgICsJaW50IHN0YXJ0X3ggPSAwLCBz
dGFydF95ID0gMDsNCiAgICArCWludCB0ZXh0X2xpbmVzID0gMCwgdGV4dF9jb2xzID0gMDsNCiAg
ICArCWludCB0b3RhbF9jb2xzID0gMDsNCiAgICArCWludCB3aW5fY29scyA9IDA7DQogICAgKwlp
bnQgd2luX2xpbmVzID0gMDsNCiAgICArCWludCBpID0gMDsNCiAgICArCVdJTkRPVyAqd2luOw0K
ICAgICsJV0lORE9XICpwYWQ7DQogICAgKwlQQU5FTCAqcGFuZWw7DQogICAgKw0KICAgICsJZ2V0
bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7DQogICAgKw0KICAgICsJLyogZmluZCB0aGUg
d2lkZXN0IGxpbmUgb2YgbXNnOiAqLw0KICAgICsJdG90YWxfbGluZXMgPSBnZXRfbGluZV9ubyh0
ZXh0KTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9saW5lczsgaSsrKSB7DQogICAgKwkJ
Y29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKHRleHQsIGkpOw0KICAgICsJCWludCBsZW4gPSBn
ZXRfbGluZV9sZW5ndGgobGluZSk7DQogICAgKwkJdG90YWxfY29scyA9IG1heCh0b3RhbF9jb2xz
LCBsZW4rMik7DQogICAgKwl9DQogICAgKw0KICAgICsJLyogY3JlYXRlIHRoZSBwYWQgKi8NCiAg
ICArCXBhZCA9IG5ld3BhZCh0b3RhbF9saW5lcysxMCwgdG90YWxfY29scysxMCk7DQogICAgKwko
dm9pZCkgd2F0dHJzZXQocGFkLCBhdHRyaWJ1dGVzW1NDUk9MTFdJTl9URVhUXSk7DQogICAgKwlm
aWxsX3dpbmRvdyhwYWQsIHRleHQpOw0KICAgICsNCiAgICArCXdpbl9saW5lcyA9IG1pbih0b3Rh
bF9saW5lcys0LCBsaW5lcy0yKTsNCiAgICArCXdpbl9jb2xzID0gbWluKHRvdGFsX2NvbHMrMiwg
Y29sdW1ucy0yKTsNCiAgICArCXRleHRfbGluZXMgPSBtYXgod2luX2xpbmVzLTQsIDApOw0KICAg
ICsJdGV4dF9jb2xzID0gbWF4KHdpbl9jb2xzLTIsIDApOw0KICAgICsNCiAgICArCS8qIHBsYWNl
IHdpbmRvdyBpbiBtaWRkbGUgb2Ygc2NyZWVuICovDQogICAgKwl5ID0gKGxpbmVzLXdpbl9saW5l
cykvMjsNCiAgICArCXggPSAoY29sdW1ucy13aW5fY29scykvMjsNCiAgICArDQogICAgKwl3aW4g
PSBuZXd3aW4od2luX2xpbmVzLCB3aW5fY29scywgeSwgeCk7DQogICAgKwlrZXlwYWQod2luLCBU
UlVFKTsNCiAgICArCS8qIHNob3cgdGhlIGhlbHAgaW4gdGhlIGhlbHAgd2luZG93LCBhbmQgc2hv
dyB0aGUgaGVscCBwYW5lbCAqLw0KICAgICsJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRl
c1tTQ1JPTExXSU5fQk9YXSk7DQogICAgKwlib3god2luLCAwLCAwKTsNCiAgICArCSh2b2lkKSB3
YXR0cnNldCh3aW4sIGF0dHJpYnV0ZXNbU0NST0xMV0lOX0hFQURJTkddKTsNCiAgICArCW12d3By
aW50dyh3aW4sIDAsIDMsICIgJXMgIiwgdGl0bGUpOw0KICAgICsJcGFuZWwgPSBuZXdfcGFuZWwo
d2luKTsNCiAgICArDQogICAgKwkvKiBoYW5kbGUgc2Nyb2xsaW5nICovDQogICAgKwlkbyB7DQog
ICAgKw0KICAgICsJCWNvcHl3aW4ocGFkLCB3aW4sIHN0YXJ0X3ksIHN0YXJ0X3gsIDIsIDIsIHRl
eHRfbGluZXMsDQogICAgKwkJCQl0ZXh0X2NvbHMsIDApOw0KICAgICsJCXByaW50X2luX21pZGRs
ZSh3aW4sDQogICAgKwkJCQl0ZXh0X2xpbmVzKzIsDQogICAgKwkJCQkwLA0KICAgICsJCQkJdGV4
dF9jb2xzLA0KICAgICsJCQkJIjxPSz4iLA0KICAgICsJCQkJYXR0cmlidXRlc1tESUFMT0dfTUVO
VV9GT1JFXSk7DQogICAgKwkJd3JlZnJlc2god2luKTsNCiAgICArDQogICAgKwkJcmVzID0gd2dl
dGNoKHdpbik7DQogICAgKwkJc3dpdGNoIChyZXMpIHsNCiAgICArCQljYXNlIEtFWV9OUEFHRToN
CiAgICArCQljYXNlICcgJzoNCiAgICArCQljYXNlICdkJzoNCiAgICArCQkJc3RhcnRfeSArPSB0
ZXh0X2xpbmVzLTI7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX1BQQUdFOg0KICAg
ICsJCWNhc2UgJ3UnOg0KICAgICsJCQlzdGFydF95IC09IHRleHRfbGluZXMrMjsNCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJY2FzZSBLRVlfSE9NRToNCiAgICArCQkJc3RhcnRfeSA9IDA7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX0VORDoNCiAgICArCQkJc3RhcnRfeSA9IHRvdGFs
X2xpbmVzLXRleHRfbGluZXM7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX0RPV046
DQogICAgKwkJY2FzZSAnaic6DQogICAgKwkJCXN0YXJ0X3krKzsNCiAgICArCQkJYnJlYWs7DQog
ICAgKwkJY2FzZSBLRVlfVVA6DQogICAgKwkJY2FzZSAnayc6DQogICAgKwkJCXN0YXJ0X3ktLTsN
CiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfTEVGVDoNCiAgICArCQljYXNlICdoJzoN
CiAgICArCQkJc3RhcnRfeC0tOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9SSUdI
VDoNCiAgICArCQljYXNlICdsJzoNCiAgICArCQkJc3RhcnRfeCsrOw0KICAgICsJCQlicmVhazsN
CiAgICArCQl9DQogICAgKwkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0gMjcgfHwgcmVzID09ICdx
JyB8fA0KICAgICsJCQlyZXMgPT0gS0VZX0YoRl9IRUxQKSB8fCByZXMgPT0gS0VZX0YoRl9CQUNL
KSB8fA0KICAgICsJCQlyZXMgPT0gS0VZX0YoRl9FWElUKSkNCiAgICArCQkJYnJlYWs7DQogICAg
KwkJaWYgKHN0YXJ0X3kgPCAwKQ0KICAgICsJCQlzdGFydF95ID0gMDsNCiAgICArCQlpZiAoc3Rh
cnRfeSA+PSB0b3RhbF9saW5lcy10ZXh0X2xpbmVzKQ0KICAgICsJCQlzdGFydF95ID0gdG90YWxf
bGluZXMtdGV4dF9saW5lczsNCiAgICArCQlpZiAoc3RhcnRfeCA8IDApDQogICAgKwkJCXN0YXJ0
X3ggPSAwOw0KICAgICsJCWlmIChzdGFydF94ID49IHRvdGFsX2NvbHMtdGV4dF9jb2xzKQ0KICAg
ICsJCQlzdGFydF94ID0gdG90YWxfY29scy10ZXh0X2NvbHM7DQogICAgKwl9IHdoaWxlIChyZXMp
Ow0KICAgICsNCiAgICArCWRlbF9wYW5lbChwYW5lbCk7DQogICAgKwlkZWx3aW4od2luKTsNCiAg
ICArCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOw0KICAgICt9DQogICAgZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bmNvbmYuaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZmE1
MjQ1ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L25j
b25mLmgNCiAgICBAQCAtMCwwICsxLDkyIEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wICovDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIg
VHphY2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPg0KICAgICsgKg0KICAgICsgKiBEZXJpdmVk
IGZyb20gbWVudWNvbmZpZy4NCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8Y3R5cGUu
aD4NCiAgICArI2luY2x1ZGUgPGVycm5vLmg+DQogICAgKyNpbmNsdWRlIDxmY250bC5oPg0KICAg
ICsjaW5jbHVkZSA8bGltaXRzLmg+DQogICAgKyNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICArI2lu
Y2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKyNpbmNsdWRl
IDx1bmlzdGQuaD4NCiAgICArI2luY2x1ZGUgPG5jdXJzZXMuaD4NCiAgICArI2luY2x1ZGUgPG1l
bnUuaD4NCiAgICArI2luY2x1ZGUgPHBhbmVsLmg+DQogICAgKyNpbmNsdWRlIDxmb3JtLmg+DQog
ICAgKw0KICAgICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgPHRpbWUuaD4NCiAg
ICArI2luY2x1ZGUgPHN5cy90aW1lLmg+DQogICAgKw0KICAgICsjZGVmaW5lIG1heChhLCBiKSAo
e1wNCiAgICArCQl0eXBlb2YoYSkgX2EgPSBhO1wNCiAgICArCQl0eXBlb2YoYikgX2IgPSBiO1wN
CiAgICArCQlfYSA+IF9iID8gX2EgOiBfYjsgfSkNCiAgICArDQogICAgKyNkZWZpbmUgbWluKGEs
IGIpICh7XA0KICAgICsJCXR5cGVvZihhKSBfYSA9IGE7XA0KICAgICsJCXR5cGVvZihiKSBfYiA9
IGI7XA0KICAgICsJCV9hIDwgX2IgPyBfYSA6IF9iOyB9KQ0KICAgICsNCiAgICArdHlwZWRlZiBl
bnVtIHsNCiAgICArCU5PUk1BTCA9IDEsDQogICAgKwlNQUlOX0hFQURJTkcsDQogICAgKwlNQUlO
X01FTlVfQk9YLA0KICAgICsJTUFJTl9NRU5VX0ZPUkUsDQogICAgKwlNQUlOX01FTlVfQkFDSywN
CiAgICArCU1BSU5fTUVOVV9HUkVZLA0KICAgICsJTUFJTl9NRU5VX0hFQURJTkcsDQogICAgKwlT
Q1JPTExXSU5fVEVYVCwNCiAgICArCVNDUk9MTFdJTl9IRUFESU5HLA0KICAgICsJU0NST0xMV0lO
X0JPWCwNCiAgICArCURJQUxPR19URVhULA0KICAgICsJRElBTE9HX01FTlVfRk9SRSwNCiAgICAr
CURJQUxPR19NRU5VX0JBQ0ssDQogICAgKwlESUFMT0dfQk9YLA0KICAgICsJSU5QVVRfQk9YLA0K
ICAgICsJSU5QVVRfSEVBRElORywNCiAgICArCUlOUFVUX1RFWFQsDQogICAgKwlJTlBVVF9GSUVM
RCwNCiAgICArCUZVTkNUSU9OX1RFWFQsDQogICAgKwlGVU5DVElPTl9ISUdITElHSFQsDQogICAg
KwlBVFRSX01BWA0KICAgICt9IGF0dHJpYnV0ZXNfdDsNCiAgICArZXh0ZXJuIGF0dHJpYnV0ZXNf
dCBhdHRyaWJ1dGVzW107DQogICAgKw0KICAgICt0eXBlZGVmIGVudW0gew0KICAgICsJRl9IRUxQ
ID0gMSwNCiAgICArCUZfU1lNQk9MID0gMiwNCiAgICArCUZfSU5TVFMgPSAzLA0KICAgICsJRl9D
T05GID0gNCwNCiAgICArCUZfQkFDSyA9IDUsDQogICAgKwlGX1NBVkUgPSA2LA0KICAgICsJRl9M
T0FEID0gNywNCiAgICArCUZfU0VBUkNIID0gOCwNCiAgICArCUZfRVhJVCA9IDksDQogICAgK30g
ZnVuY3Rpb25fa2V5Ow0KICAgICsNCiAgICArdm9pZCBzZXRfY29sb3JzKHZvaWQpOw0KICAgICsN
CiAgICArLyogdGhpcyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICovDQogICAg
K3ZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLA0KICAgICsJCWludCBzdGFydHksDQog
ICAgKwkJaW50IHN0YXJ0eCwNCiAgICArCQlpbnQgd2lkdGgsDQogICAgKwkJY29uc3QgY2hhciAq
c3RyaW5nLA0KICAgICsJCWNodHlwZSBjb2xvcik7DQogICAgK2ludCBnZXRfbGluZV9sZW5ndGgo
Y29uc3QgY2hhciAqbGluZSk7DQogICAgK2ludCBnZXRfbGluZV9ubyhjb25zdCBjaGFyICp0ZXh0
KTsNCiAgICArY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVf
bm8pOw0KICAgICt2b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0
KTsNCiAgICAraW50IGJ0bl9kaWFsb2coV0lORE9XICptYWluX3dpbmRvdywgY29uc3QgY2hhciAq
bXNnLCBpbnQgYnRuX251bSwgLi4uKTsNCiAgICAraW50IGRpYWxvZ19pbnB1dGJveChXSU5ET1cg
Km1haW5fd2luZG93LA0KICAgICsJCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9t
cHQsDQogICAgKwkJY29uc3QgY2hhciAqaW5pdCwgY2hhciAqKnJlc3VsdHAsIGludCAqcmVzdWx0
X2xlbik7DQogICAgK3ZvaWQgcmVmcmVzaF9hbGxfd2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93
KTsNCiAgICArdm9pZCBzaG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywNCiAgICAr
CQljb25zdCBjaGFyICp0aXRsZSwNCiAgICArCQljb25zdCBjaGFyICp0ZXh0KTsNCiAgICBkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueSBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcGFyc2VyLnkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAu
LjYwOTM2YzcNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9wYXJzZXIueQ0KICAgIEBAIC0wLDAgKzEsNzMxIEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wICovDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAw
MiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQogICAgKyV7
DQogICAgKw0KICAgICsjaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGFyZy5o
Pg0KICAgICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAg
ICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKyNpbmNsdWRlIDxzdGRib29sLmg+DQogICAgKw0K
ICAgICsjaW5jbHVkZSAibGtjLmgiDQogICAgKw0KICAgICsjZGVmaW5lIHByaW50ZChtYXNrLCBm
bXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50ZihmbXQpDQogICAgKw0KICAgICsjZGVm
aW5lIFBSSU5URAkJMHgwMDAxDQogICAgKyNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyDQogICAg
Kw0KICAgICtpbnQgY2RlYnVnID0gUFJJTlREOw0KICAgICsNCiAgICArc3RhdGljIHZvaWQgeXll
cnJvcihjb25zdCBjaGFyICplcnIpOw0KICAgICtzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0
IGNoYXIgKmVyciwgLi4uKTsNCiAgICArc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hh
ciAqZXJyLCAuLi4pOw0KICAgICtzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBjaGFy
ICp0b2tlbm5hbWUsDQogICAgKwkJCSAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3Rva2VubmFtZSk7
DQogICAgKw0KICAgICtzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xfaGFzaFtTWU1CT0xfSEFTSFNJWkVd
Ow0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50
X2VudHJ5Ow0KICAgICsNCiAgICArJX0NCiAgICArDQogICAgKyV1bmlvbg0KICAgICt7DQogICAg
KwljaGFyICpzdHJpbmc7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7DQogICAgKwlzdHJ1
Y3QgZXhwciAqZXhwcjsNCiAgICArCXN0cnVjdCBtZW51ICptZW51Ow0KICAgICsJZW51bSBzeW1i
b2xfdHlwZSB0eXBlOw0KICAgICsJZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOw0KICAgICt9
DQogICAgKw0KICAgICsldG9rZW4gPHN0cmluZz4gVF9IRUxQVEVYVA0KICAgICsldG9rZW4gPHN0
cmluZz4gVF9XT1JEDQogICAgKyV0b2tlbiA8c3RyaW5nPiBUX1dPUkRfUVVPVEUNCiAgICArJXRv
a2VuIFRfQUxMTk9DT05GSUdfWQ0KICAgICsldG9rZW4gVF9CT09MDQogICAgKyV0b2tlbiBUX0NI
T0lDRQ0KICAgICsldG9rZW4gVF9DTE9TRV9QQVJFTg0KICAgICsldG9rZW4gVF9DT0xPTl9FUVVB
TA0KICAgICsldG9rZW4gVF9DT01NRU5UDQogICAgKyV0b2tlbiBUX0NPTkZJRw0KICAgICsldG9r
ZW4gVF9ERUZBVUxUDQogICAgKyV0b2tlbiBUX0RFRkNPTkZJR19MSVNUDQogICAgKyV0b2tlbiBU
X0RFRl9CT09MDQogICAgKyV0b2tlbiBUX0RFRl9UUklTVEFURQ0KICAgICsldG9rZW4gVF9ERVBF
TkRTDQogICAgKyV0b2tlbiBUX0VORENIT0lDRQ0KICAgICsldG9rZW4gVF9FTkRJRg0KICAgICsl
dG9rZW4gVF9FTkRNRU5VDQogICAgKyV0b2tlbiBUX0hFTFANCiAgICArJXRva2VuIFRfSEVYDQog
ICAgKyV0b2tlbiBUX0lGDQogICAgKyV0b2tlbiBUX0lNUExZDQogICAgKyV0b2tlbiBUX0lOVA0K
ICAgICsldG9rZW4gVF9NQUlOTUVOVQ0KICAgICsldG9rZW4gVF9NRU5VDQogICAgKyV0b2tlbiBU
X01FTlVDT05GSUcNCiAgICArJXRva2VuIFRfTU9EVUxFUw0KICAgICsldG9rZW4gVF9PTg0KICAg
ICsldG9rZW4gVF9PUEVOX1BBUkVODQogICAgKyV0b2tlbiBUX09QVElPTg0KICAgICsldG9rZW4g
VF9PUFRJT05BTA0KICAgICsldG9rZW4gVF9QTFVTX0VRVUFMDQogICAgKyV0b2tlbiBUX1BST01Q
VA0KICAgICsldG9rZW4gVF9SQU5HRQ0KICAgICsldG9rZW4gVF9TRUxFQ1QNCiAgICArJXRva2Vu
IFRfU09VUkNFDQogICAgKyV0b2tlbiBUX1NUUklORw0KICAgICsldG9rZW4gVF9UUklTVEFURQ0K
ICAgICsldG9rZW4gVF9WSVNJQkxFDQogICAgKyV0b2tlbiBUX0VPTA0KICAgICsldG9rZW4gPHN0
cmluZz4gVF9BU1NJR05fVkFMDQogICAgKw0KICAgICslbGVmdCBUX09SDQogICAgKyVsZWZ0IFRf
QU5EDQogICAgKyVsZWZ0IFRfRVFVQUwgVF9VTkVRVUFMDQogICAgKyVsZWZ0IFRfTEVTUyBUX0xF
U1NfRVFVQUwgVF9HUkVBVEVSIFRfR1JFQVRFUl9FUVVBTA0KICAgICslbm9uYXNzb2MgVF9OT1QN
CiAgICArDQogICAgKyV0eXBlIDxzdHJpbmc+IHByb21wdA0KICAgICsldHlwZSA8c3ltYm9sPiBu
b25jb25zdF9zeW1ib2wNCiAgICArJXR5cGUgPHN5bWJvbD4gc3ltYm9sDQogICAgKyV0eXBlIDx0
eXBlPiB0eXBlIGxvZ2ljX3R5cGUgZGVmYXVsdA0KICAgICsldHlwZSA8ZXhwcj4gZXhwcg0KICAg
ICsldHlwZSA8ZXhwcj4gaWZfZXhwcg0KICAgICsldHlwZSA8c3RyaW5nPiBlbmQNCiAgICArJXR5
cGUgPG1lbnU+IGlmX2VudHJ5IG1lbnVfZW50cnkgY2hvaWNlX2VudHJ5DQogICAgKyV0eXBlIDxz
dHJpbmc+IHdvcmRfb3B0IGFzc2lnbl92YWwNCiAgICArJXR5cGUgPGZsYXZvcj4gYXNzaWduX29w
DQogICAgKw0KICAgICslZGVzdHJ1Y3RvciB7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVk
OiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsDQogICAgKwkJJCQtPmZp
bGUtPm5hbWUsICQkLT5saW5lbm8pOw0KICAgICsJaWYgKGN1cnJlbnRfbWVudSA9PSAkJCkNCiAg
ICArCQltZW51X2VuZF9tZW51KCk7DQogICAgK30gaWZfZW50cnkgbWVudV9lbnRyeSBjaG9pY2Vf
ZW50cnkNCiAgICArDQogICAgKyUlDQogICAgK2lucHV0OiBtYWlubWVudV9zdG10IHN0bXRfbGlz
dCB8IHN0bXRfbGlzdDsNCiAgICArDQogICAgKy8qIG1haW5tZW51IGVudHJ5ICovDQogICAgKw0K
ICAgICttYWlubWVudV9zdG10OiBUX01BSU5NRU5VIHByb21wdCBUX0VPTA0KICAgICt7DQogICAg
KwltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAkMiwgTlVMTCk7DQogICAgK307DQogICAgKw0KICAg
ICtzdG10X2xpc3Q6DQogICAgKwkgIC8qIGVtcHR5ICovDQogICAgKwl8IHN0bXRfbGlzdCBjb21t
b25fc3RtdA0KICAgICsJfCBzdG10X2xpc3QgY2hvaWNlX3N0bXQNCiAgICArCXwgc3RtdF9saXN0
IG1lbnVfc3RtdA0KICAgICsJfCBzdG10X2xpc3QgVF9XT1JEIGVycm9yIFRfRU9MCXsgemNvbmZf
ZXJyb3IoInVua25vd24gc3RhdGVtZW50IFwiJXNcIiIsICQyKTsgfQ0KICAgICsJfCBzdG10X2xp
c3QgZXJyb3IgVF9FT0wJCXsgemNvbmZfZXJyb3IoImludmFsaWQgc3RhdGVtZW50Iik7IH0NCiAg
ICArOw0KICAgICsNCiAgICArY29tbW9uX3N0bXQ6DQogICAgKwkgIGlmX3N0bXQNCiAgICArCXwg
Y29tbWVudF9zdG10DQogICAgKwl8IGNvbmZpZ19zdG10DQogICAgKwl8IG1lbnVjb25maWdfc3Rt
dA0KICAgICsJfCBzb3VyY2Vfc3RtdA0KICAgICsJfCBhc3NpZ25tZW50X3N0bXQNCiAgICArOw0K
ICAgICsNCiAgICArLyogY29uZmlnL21lbnVjb25maWcgZW50cnkgKi8NCiAgICArDQogICAgK2Nv
bmZpZ19lbnRyeV9zdGFydDogVF9DT05GSUcgbm9uY29uc3Rfc3ltYm9sIFRfRU9MDQogICAgK3sN
CiAgICArCSQyLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7DQogICAgKwltZW51X2FkZF9lbnRy
eSgkMik7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQyLT5uYW1lKTsNCiAgICArfTsNCiAgICAr
DQogICAgK2NvbmZpZ19zdG10OiBjb25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0
DQogICAgK3sNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK307DQogICAgKw0KICAgICtt
ZW51Y29uZmlnX2VudHJ5X3N0YXJ0OiBUX01FTlVDT05GSUcgbm9uY29uc3Rfc3ltYm9sIFRfRU9M
DQogICAgK3sNCiAgICArCSQyLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7DQogICAgKwltZW51
X2FkZF9lbnRyeSgkMik7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29u
ZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7DQog
ICAgK307DQogICAgKw0KICAgICttZW51Y29uZmlnX3N0bXQ6IG1lbnVjb25maWdfZW50cnlfc3Rh
cnQgY29uZmlnX29wdGlvbl9saXN0DQogICAgK3sNCiAgICArCWlmIChjdXJyZW50X2VudHJ5LT5w
cm9tcHQpDQogICAgKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0LT50eXBlID0gUF9NRU5VOw0KICAg
ICsJZWxzZQ0KICAgICsJCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25maWcgc3RhdGVtZW50
IHdpdGhvdXQgcHJvbXB0Iik7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRj
b25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9Ow0KICAg
ICsNCiAgICArY29uZmlnX29wdGlvbl9saXN0Og0KICAgICsJICAvKiBlbXB0eSAqLw0KICAgICsJ
fCBjb25maWdfb3B0aW9uX2xpc3QgY29uZmlnX29wdGlvbg0KICAgICsJfCBjb25maWdfb3B0aW9u
X2xpc3QgZGVwZW5kcw0KICAgICsJfCBjb25maWdfb3B0aW9uX2xpc3QgaGVscA0KICAgICs7DQog
ICAgKw0KICAgICtjb25maWdfb3B0aW9uOiB0eXBlIHByb21wdF9zdG10X29wdCBUX0VPTA0KICAg
ICt7DQogICAgKwltZW51X3NldF90eXBlKCQxKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwg
IiVzOiVkOnR5cGUoJXUpXG4iLA0KICAgICsJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCksDQogICAgKwkJJDEpOw0KICAgICt9Ow0KICAgICsNCiAgICArY29uZmlnX29wdGlvbjogVF9Q
Uk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wNCiAgICArew0KICAgICsJbWVudV9hZGRfcHJvbXB0
KFBfUFJPTVBULCAkMiwgJDMpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJv
bXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfTsNCiAgICAr
DQogICAgK2NvbmZpZ19vcHRpb246IGRlZmF1bHQgZXhwciBpZl9leHByIFRfRU9MDQogICAgK3sN
CiAgICArCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCAkMiwgJDMpOw0KICAgICsJaWYgKCQxICE9
IFNfVU5LTk9XTikNCiAgICArCQltZW51X3NldF90eXBlKCQxKTsNCiAgICArCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOmRlZmF1bHQoJXUpXG4iLA0KICAgICsJCXpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCksDQogICAgKwkJJDEpOw0KICAgICt9Ow0KICAgICsNCiAgICArY29uZmln
X29wdGlvbjogVF9TRUxFQ1Qgbm9uY29uc3Rfc3ltYm9sIGlmX2V4cHIgVF9FT0wNCiAgICArew0K
ICAgICsJbWVudV9hZGRfc3ltYm9sKFBfU0VMRUNULCAkMiwgJDMpOw0KICAgICsJcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6c2VsZWN0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICArfTsNCiAgICArDQogICAgK2NvbmZpZ19vcHRpb246IFRfSU1QTFkgbm9uY29u
c3Rfc3ltYm9sIGlmX2V4cHIgVF9FT0wNCiAgICArew0KICAgICsJbWVudV9hZGRfc3ltYm9sKFBf
SU1QTFksICQyLCAkMyk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppbXBseVxu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK307DQogICAgKw0KICAg
ICtjb25maWdfb3B0aW9uOiBUX1JBTkdFIHN5bWJvbCBzeW1ib2wgaWZfZXhwciBUX0VPTA0KICAg
ICt7DQogICAgKwltZW51X2FkZF9leHByKFBfUkFOR0UsIGV4cHJfYWxsb2NfY29tcChFX1JBTkdF
LCQyLCAkMyksICQ0KTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfTsNCiAgICArDQogICAg
K2NvbmZpZ19vcHRpb246IFRfT1BUSU9OIFRfTU9EVUxFUyBUX0VPTA0KICAgICt7DQogICAgKwlt
ZW51X2FkZF9vcHRpb25fbW9kdWxlcygpOw0KICAgICt9Ow0KICAgICsNCiAgICArY29uZmlnX29w
dGlvbjogVF9PUFRJT04gVF9ERUZDT05GSUdfTElTVCBUX0VPTA0KICAgICt7DQogICAgKwltZW51
X2FkZF9vcHRpb25fZGVmY29uZmlnX2xpc3QoKTsNCiAgICArfTsNCiAgICArDQogICAgK2NvbmZp
Z19vcHRpb246IFRfT1BUSU9OIFRfQUxMTk9DT05GSUdfWSBUX0VPTA0KICAgICt7DQogICAgKwlt
ZW51X2FkZF9vcHRpb25fYWxsbm9jb25maWdfeSgpOw0KICAgICt9Ow0KICAgICsNCiAgICArLyog
Y2hvaWNlIGVudHJ5ICovDQogICAgKw0KICAgICtjaG9pY2U6IFRfQ0hPSUNFIHdvcmRfb3B0IFRf
RU9MDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIFNZ
TUJPTF9DSE9JQ0UpOw0KICAgICsJc3ltLT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7DQogICAg
KwltZW51X2FkZF9lbnRyeShzeW0pOw0KICAgICsJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVM
TCwgTlVMTCk7DQogICAgKwlmcmVlKCQyKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOmNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK307
DQogICAgKw0KICAgICtjaG9pY2VfZW50cnk6IGNob2ljZSBjaG9pY2Vfb3B0aW9uX2xpc3QNCiAg
ICArew0KICAgICsJJCQgPSBtZW51X2FkZF9tZW51KCk7DQogICAgK307DQogICAgKw0KICAgICtj
aG9pY2VfZW5kOiBlbmQNCiAgICArew0KICAgICsJaWYgKHpjb25mX2VuZHRva2VuKCQxLCAiY2hv
aWNlIikpIHsNCiAgICArCQltZW51X2VuZF9tZW51KCk7DQogICAgKwkJcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6ZW5kY2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsNCiAgICArCX0NCiAgICArfTsNCiAgICArDQogICAgK2Nob2ljZV9zdG10OiBjaG9pY2VfZW50
cnkgY2hvaWNlX2Jsb2NrIGNob2ljZV9lbmQNCiAgICArOw0KICAgICsNCiAgICArY2hvaWNlX29w
dGlvbl9saXN0Og0KICAgICsJICAvKiBlbXB0eSAqLw0KICAgICsJfCBjaG9pY2Vfb3B0aW9uX2xp
c3QgY2hvaWNlX29wdGlvbg0KICAgICsJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgZGVwZW5kcw0KICAg
ICsJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgaGVscA0KICAgICs7DQogICAgKw0KICAgICtjaG9pY2Vf
b3B0aW9uOiBUX1BST01QVCBwcm9tcHQgaWZfZXhwciBUX0VPTA0KICAgICt7DQogICAgKwltZW51
X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQyLCAkMyk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpwcm9tcHRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAg
ICt9Ow0KICAgICsNCiAgICArY2hvaWNlX29wdGlvbjogbG9naWNfdHlwZSBwcm9tcHRfc3RtdF9v
cHQgVF9FT0wNCiAgICArew0KICAgICsJbWVudV9zZXRfdHlwZSgkMSk7DQogICAgKwlwcmludGQo
REVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwNCiAgICArCSAgICAgICB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpLCAkMSk7DQogICAgK307DQogICAgKw0KICAgICtjaG9pY2Vf
b3B0aW9uOiBUX09QVElPTkFMIFRfRU9MDQogICAgK3sNCiAgICArCWN1cnJlbnRfZW50cnktPnN5
bS0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAi
JXM6JWQ6b3B0aW9uYWxcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAg
ICt9Ow0KICAgICsNCiAgICArY2hvaWNlX29wdGlvbjogVF9ERUZBVUxUIG5vbmNvbnN0X3N5bWJv
bCBpZl9leHByIFRfRU9MDQogICAgK3sNCiAgICArCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQs
ICQyLCAkMyk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLA0K
ICAgICsJICAgICAgIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9Ow0K
ICAgICsNCiAgICArdHlwZToNCiAgICArCSAgbG9naWNfdHlwZQ0KICAgICsJfCBUX0lOVAkJCXsg
JCQgPSBTX0lOVDsgfQ0KICAgICsJfCBUX0hFWAkJCXsgJCQgPSBTX0hFWDsgfQ0KICAgICsJfCBU
X1NUUklORwkJeyAkJCA9IFNfU1RSSU5HOyB9DQogICAgKw0KICAgICtsb2dpY190eXBlOg0KICAg
ICsJICBUX0JPT0wJCXsgJCQgPSBTX0JPT0xFQU47IH0NCiAgICArCXwgVF9UUklTVEFURQkJeyAk
JCA9IFNfVFJJU1RBVEU7IH0NCiAgICArDQogICAgK2RlZmF1bHQ6DQogICAgKwkgIFRfREVGQVVM
VAkJeyAkJCA9IFNfVU5LTk9XTjsgfQ0KICAgICsJfCBUX0RFRl9CT09MCQl7ICQkID0gU19CT09M
RUFOOyB9DQogICAgKwl8IFRfREVGX1RSSVNUQVRFCXsgJCQgPSBTX1RSSVNUQVRFOyB9DQogICAg
Kw0KICAgICtjaG9pY2VfYmxvY2s6DQogICAgKwkgIC8qIGVtcHR5ICovDQogICAgKwl8IGNob2lj
ZV9ibG9jayBjb21tb25fc3RtdA0KICAgICs7DQogICAgKw0KICAgICsvKiBpZiBlbnRyeSAqLw0K
ICAgICsNCiAgICAraWZfZW50cnk6IFRfSUYgZXhwciBUX0VPTA0KICAgICt7DQogICAgKwlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSk7DQogICAgKwltZW51X2FkZF9lbnRyeShOVUxMKTsNCiAgICArCW1lbnVfYWRkX2RlcCgk
Mik7DQogICAgKwkkJCA9IG1lbnVfYWRkX21lbnUoKTsNCiAgICArfTsNCiAgICArDQogICAgK2lm
X2VuZDogZW5kDQogICAgK3sNCiAgICArCWlmICh6Y29uZl9lbmR0b2tlbigkMSwgImlmIikpIHsN
CiAgICArCQltZW51X2VuZF9tZW51KCk7DQogICAgKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6ZW5kaWZcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICsJfQ0K
ICAgICt9Ow0KICAgICsNCiAgICAraWZfc3RtdDogaWZfZW50cnkgc3RtdF9saXN0IGlmX2VuZA0K
ICAgICs7DQogICAgKw0KICAgICsvKiBtZW51IGVudHJ5ICovDQogICAgKw0KICAgICttZW51OiBU
X01FTlUgcHJvbXB0IFRfRU9MDQogICAgK3sNCiAgICArCW1lbnVfYWRkX2VudHJ5KE5VTEwpOw0K
ICAgICsJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5VTEwpOw0KICAgICsJcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6bWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7DQogICAgK307DQogICAgKw0KICAgICttZW51X2VudHJ5OiBtZW51IG1lbnVfb3B0aW9uX2xp
c3QNCiAgICArew0KICAgICsJJCQgPSBtZW51X2FkZF9tZW51KCk7DQogICAgK307DQogICAgKw0K
ICAgICttZW51X2VuZDogZW5kDQogICAgK3sNCiAgICArCWlmICh6Y29uZl9lbmR0b2tlbigkMSwg
Im1lbnUiKSkgew0KICAgICsJCW1lbnVfZW5kX21lbnUoKTsNCiAgICArCQlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDplbmRtZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsNCiAgICArCX0NCiAgICArfTsNCiAgICArDQogICAgK21lbnVfc3RtdDogbWVudV9lbnRyeSBz
dG10X2xpc3QgbWVudV9lbmQNCiAgICArOw0KICAgICsNCiAgICArbWVudV9vcHRpb25fbGlzdDoN
CiAgICArCSAgLyogZW1wdHkgKi8NCiAgICArCXwgbWVudV9vcHRpb25fbGlzdCB2aXNpYmxlDQog
ICAgKwl8IG1lbnVfb3B0aW9uX2xpc3QgZGVwZW5kcw0KICAgICs7DQogICAgKw0KICAgICtzb3Vy
Y2Vfc3RtdDogVF9TT1VSQ0UgcHJvbXB0IFRfRU9MDQogICAgK3sNCiAgICArCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSwgJDIpOw0KICAgICsJemNvbmZfbmV4dGZpbGUoJDIpOw0KICAgICsJZnJlZSgkMik7DQog
ICAgK307DQogICAgKw0KICAgICsvKiBjb21tZW50IGVudHJ5ICovDQogICAgKw0KICAgICtjb21t
ZW50OiBUX0NPTU1FTlQgcHJvbXB0IFRfRU9MDQogICAgK3sNCiAgICArCW1lbnVfYWRkX2VudHJ5
KE5VTEwpOw0KICAgICsJbWVudV9hZGRfcHJvbXB0KFBfQ09NTUVOVCwgJDIsIE5VTEwpOw0KICAg
ICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29tbWVudFxuIiwgemNvbmZfY3VybmFtZSgp
LCB6Y29uZl9saW5lbm8oKSk7DQogICAgK307DQogICAgKw0KICAgICtjb21tZW50X3N0bXQ6IGNv
bW1lbnQgY29tbWVudF9vcHRpb25fbGlzdA0KICAgICs7DQogICAgKw0KICAgICtjb21tZW50X29w
dGlvbl9saXN0Og0KICAgICsJICAvKiBlbXB0eSAqLw0KICAgICsJfCBjb21tZW50X29wdGlvbl9s
aXN0IGRlcGVuZHMNCiAgICArOw0KICAgICsNCiAgICArLyogaGVscCBvcHRpb24gKi8NCiAgICAr
DQogICAgK2hlbHBfc3RhcnQ6IFRfSEVMUCBUX0VPTA0KICAgICt7DQogICAgKwlwcmludGQoREVC
VUdfUEFSU0UsICIlczolZDpoZWxwXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsNCiAgICArCXpjb25mX3N0YXJ0aGVscCgpOw0KICAgICt9Ow0KICAgICsNCiAgICAraGVscDog
aGVscF9zdGFydCBUX0hFTFBURVhUDQogICAgK3sNCiAgICArCWlmIChjdXJyZW50X2VudHJ5LT5o
ZWxwKSB7DQogICAgKwkJZnJlZShjdXJyZW50X2VudHJ5LT5oZWxwKTsNCiAgICArCQl6Y29uZnBy
aW50KCJ3YXJuaW5nOiAnJXMnIGRlZmluZWQgd2l0aCBtb3JlIHRoYW4gb25lIGhlbHAgdGV4dCAt
LSBvbmx5IHRoZSBsYXN0IG9uZSB3aWxsIGJlIHVzZWQiLA0KICAgICsJCQkgICBjdXJyZW50X2Vu
dHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7DQogICAgKwl9DQogICAgKw0KICAgICsJLyog
SXMgdGhlIGhlbHAgdGV4dCBlbXB0eSBvciBhbGwgd2hpdGVzcGFjZT8gKi8NCiAgICArCWlmICgk
MltzdHJzcG4oJDIsICIgXGZcblxyXHRcdiIpXSA9PSAnXDAnKQ0KICAgICsJCXpjb25mcHJpbnQo
Indhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIGJsYW5rIGhlbHAgdGV4dCIsDQogICAgKwkJCSAg
IGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsNCiAgICArDQogICAgKwlj
dXJyZW50X2VudHJ5LT5oZWxwID0gJDI7DQogICAgK307DQogICAgKw0KICAgICsvKiBkZXBlbmRz
IG9wdGlvbiAqLw0KICAgICsNCiAgICArZGVwZW5kczogVF9ERVBFTkRTIFRfT04gZXhwciBUX0VP
TA0KICAgICt7DQogICAgKwltZW51X2FkZF9kZXAoJDMpOw0KICAgICsJcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6ZGVwZW5kcyBvblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7DQogICAgK307DQogICAgKw0KICAgICsvKiB2aXNpYmlsaXR5IG9wdGlvbiAqLw0KICAgICt2
aXNpYmxlOiBUX1ZJU0lCTEUgaWZfZXhwciBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF92
aXNpYmlsaXR5KCQyKTsNCiAgICArfTsNCiAgICArDQogICAgKy8qIHByb21wdCBzdGF0ZW1lbnQg
Ki8NCiAgICArDQogICAgK3Byb21wdF9zdG10X29wdDoNCiAgICArCSAgLyogZW1wdHkgKi8NCiAg
ICArCXwgcHJvbXB0IGlmX2V4cHINCiAgICArew0KICAgICsJbWVudV9hZGRfcHJvbXB0KFBfUFJP
TVBULCAkMSwgJDIpOw0KICAgICt9Ow0KICAgICsNCiAgICArcHJvbXB0OgkgIFRfV09SRA0KICAg
ICsJfCBUX1dPUkRfUVVPVEUNCiAgICArOw0KICAgICsNCiAgICArZW5kOgkgIFRfRU5ETUVOVSBU
X0VPTAl7ICQkID0gIm1lbnUiOyB9DQogICAgKwl8IFRfRU5EQ0hPSUNFIFRfRU9MCXsgJCQgPSAi
Y2hvaWNlIjsgfQ0KICAgICsJfCBUX0VORElGIFRfRU9MCQl7ICQkID0gImlmIjsgfQ0KICAgICs7
DQogICAgKw0KICAgICtpZl9leHByOiAgLyogZW1wdHkgKi8JCQl7ICQkID0gTlVMTDsgfQ0KICAg
ICsJfCBUX0lGIGV4cHIJCQl7ICQkID0gJDI7IH0NCiAgICArOw0KICAgICsNCiAgICArZXhwcjoJ
ICBzeW1ib2wJCQkJeyAkJCA9IGV4cHJfYWxsb2Nfc3ltYm9sKCQxKTsgfQ0KICAgICsJfCBzeW1i
b2wgVF9MRVNTIHN5bWJvbAkJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9MVEgsICQxLCAkMyk7
IH0NCiAgICArCXwgc3ltYm9sIFRfTEVTU19FUVVBTCBzeW1ib2wJCXsgJCQgPSBleHByX2FsbG9j
X2NvbXAoRV9MRVEsICQxLCAkMyk7IH0NCiAgICArCXwgc3ltYm9sIFRfR1JFQVRFUiBzeW1ib2wJ
CXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9HVEgsICQxLCAkMyk7IH0NCiAgICArCXwgc3ltYm9s
IFRfR1JFQVRFUl9FUVVBTCBzeW1ib2wJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9HRVEsICQx
LCAkMyk7IH0NCiAgICArCXwgc3ltYm9sIFRfRVFVQUwgc3ltYm9sCQkJeyAkJCA9IGV4cHJfYWxs
b2NfY29tcChFX0VRVUFMLCAkMSwgJDMpOyB9DQogICAgKwl8IHN5bWJvbCBUX1VORVFVQUwgc3lt
Ym9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVBTCwgJDEsICQzKTsgfQ0KICAgICsJ
fCBUX09QRU5fUEFSRU4gZXhwciBUX0NMT1NFX1BBUkVOCXsgJCQgPSAkMjsgfQ0KICAgICsJfCBU
X05PVCBleHByCQkJCXsgJCQgPSBleHByX2FsbG9jX29uZShFX05PVCwgJDIpOyB9DQogICAgKwl8
IGV4cHIgVF9PUiBleHByCQkJeyAkJCA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsICQxLCAkMyk7IH0N
CiAgICArCXwgZXhwciBUX0FORCBleHByCQkJeyAkJCA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCAk
MSwgJDMpOyB9DQogICAgKzsNCiAgICArDQogICAgKy8qIEZvciBzeW1ib2wgZGVmaW5pdGlvbnMs
IHNlbGVjdHMsIGV0Yy4sIHdoZXJlIHF1b3RlcyBhcmUgbm90IGFjY2VwdGVkICovDQogICAgK25v
bmNvbnN0X3N5bWJvbDogVF9XT1JEIHsgJCQgPSBzeW1fbG9va3VwKCQxLCAwKTsgZnJlZSgkMSk7
IH07DQogICAgKw0KICAgICtzeW1ib2w6CSAgbm9uY29uc3Rfc3ltYm9sDQogICAgKwl8IFRfV09S
RF9RVU9URQl7ICQkID0gc3ltX2xvb2t1cCgkMSwgU1lNQk9MX0NPTlNUKTsgZnJlZSgkMSk7IH0N
CiAgICArOw0KICAgICsNCiAgICArd29yZF9vcHQ6IC8qIGVtcHR5ICovCQkJeyAkJCA9IE5VTEw7
IH0NCiAgICArCXwgVF9XT1JEDQogICAgKw0KICAgICsvKiBhc3NpZ25tZW50IHN0YXRlbWVudCAq
Lw0KICAgICsNCiAgICArYXNzaWdubWVudF9zdG10OiAgVF9XT1JEIGFzc2lnbl9vcCBhc3NpZ25f
dmFsIFRfRU9MCXsgdmFyaWFibGVfYWRkKCQxLCAkMywgJDIpOyBmcmVlKCQxKTsgZnJlZSgkMyk7
IH0NCiAgICArDQogICAgK2Fzc2lnbl9vcDoNCiAgICArCSAgVF9FUVVBTAl7ICQkID0gVkFSX1JF
Q1VSU0lWRTsgfQ0KICAgICsJfCBUX0NPTE9OX0VRVUFMCXsgJCQgPSBWQVJfU0lNUExFOyB9DQog
ICAgKwl8IFRfUExVU19FUVVBTAl7ICQkID0gVkFSX0FQUEVORDsgfQ0KICAgICs7DQogICAgKw0K
ICAgICthc3NpZ25fdmFsOg0KICAgICsJLyogZW1wdHkgKi8JCXsgJCQgPSB4c3RyZHVwKCIiKTsg
fTsNCiAgICArCXwgVF9BU1NJR05fVkFMDQogICAgKzsNCiAgICArDQogICAgKyUlDQogICAgKw0K
ICAgICt2b2lkIGNvbmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0KICAgICsJc3Ry
dWN0IHN5bWJvbCAqc3ltOw0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJemNvbmZfaW5pdHNj
YW4obmFtZSk7DQogICAgKw0KICAgICsJX21lbnVfaW5pdCgpOw0KICAgICsNCiAgICArCWlmIChn
ZXRlbnYoIlpDT05GX0RFQlVHIikpDQogICAgKwkJeXlkZWJ1ZyA9IDE7DQogICAgKwl5eXBhcnNl
KCk7DQogICAgKw0KICAgICsJLyogVmFyaWFibGVzIGFyZSBleHBhbmRlZCBpbiB0aGUgcGFyc2Ug
cGhhc2UuIFdlIGNhbiBmcmVlIHRoZW0gaGVyZS4gKi8NCiAgICArCXZhcmlhYmxlX2FsbF9kZWwo
KTsNCiAgICArDQogICAgKwlpZiAoeXluZXJycykNCiAgICArCQlleGl0KDEpOw0KICAgICsJaWYg
KCFtb2R1bGVzX3N5bSkNCiAgICArCQltb2R1bGVzX3N5bSA9IHN5bV9maW5kKCAibiIgKTsNCiAg
ICArDQogICAgKwlpZiAoIW1lbnVfaGFzX3Byb21wdCgmcm9vdG1lbnUpKSB7DQogICAgKwkJY3Vy
cmVudF9lbnRyeSA9ICZyb290bWVudTsNCiAgICArCQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAi
TWFpbiBtZW51IiwgTlVMTCk7DQogICAgKwl9DQogICAgKw0KICAgICsJbWVudV9maW5hbGl6ZSgm
cm9vdG1lbnUpOw0KICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgICsJCWlmIChz
eW1fY2hlY2tfZGVwcyhzeW0pKQ0KICAgICsJCQl5eW5lcnJzKys7DQogICAgKwl9DQogICAgKwlp
ZiAoeXluZXJycykNCiAgICArCQlleGl0KDEpOw0KICAgICsJc3ltX3NldF9jaGFuZ2VfY291bnQo
MSk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKGNvbnN0
IGNoYXIgKnRva2VubmFtZSwNCiAgICArCQkJICAgY29uc3QgY2hhciAqZXhwZWN0ZWRfdG9rZW5u
YW1lKQ0KICAgICt7DQogICAgKwlpZiAoc3RyY21wKHRva2VubmFtZSwgZXhwZWN0ZWRfdG9rZW5u
YW1lKSkgew0KICAgICsJCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkICclcycgd2l0aGluICVzIGJs
b2NrIiwNCiAgICArCQkJICAgIHRva2VubmFtZSwgZXhwZWN0ZWRfdG9rZW5uYW1lKTsNCiAgICAr
CQl5eW5lcnJzKys7DQogICAgKwkJcmV0dXJuIGZhbHNlOw0KICAgICsJfQ0KICAgICsJaWYgKGN1
cnJlbnRfbWVudS0+ZmlsZSAhPSBjdXJyZW50X2ZpbGUpIHsNCiAgICArCQl6Y29uZl9lcnJvcigi
JyVzJyBpbiBkaWZmZXJlbnQgZmlsZSB0aGFuICclcyciLA0KICAgICsJCQkgICAgdG9rZW5uYW1l
LCBleHBlY3RlZF90b2tlbm5hbWUpOw0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxv
Y2F0aW9uIG9mIHRoZSAnJXMnXG4iLA0KICAgICsJCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUs
IGN1cnJlbnRfbWVudS0+bGluZW5vLA0KICAgICsJCQlleHBlY3RlZF90b2tlbm5hbWUpOw0KICAg
ICsJCXl5bmVycnMrKzsNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKwl9DQogICAgKwlyZXR1
cm4gdHJ1ZTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgemNvbmZwcmludChjb25z
dCBjaGFyICplcnIsIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBhcDsNCiAgICArDQogICAg
KwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICArCXZhX3N0YXJ0KGFwLCBlcnIpOw0KICAgICsJdmZwcmludGYoc3RkZXJyLCBl
cnIsIGFwKTsNCiAgICArCXZhX2VuZChhcCk7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7
DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIg
KmVyciwgLi4uKQ0KICAgICt7DQogICAgKwl2YV9saXN0IGFwOw0KICAgICsNCiAgICArCXl5bmVy
cnMrKzsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOw0KICAgICsJdmFfc3RhcnQoYXAsIGVycik7DQogICAgKwl2ZnByaW50
ZihzdGRlcnIsIGVyciwgYXApOw0KICAgICsJdmFfZW5kKGFwKTsNCiAgICArCWZwcmludGYoc3Rk
ZXJyLCAiXG4iKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgeXllcnJvcihjb25z
dCBjaGFyICplcnIpDQogICAgK3sNCiAgICArCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0
IGNoYXIgKnN0cikNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqcDsNCiAgICArCWludCBsZW47
DQogICAgKw0KICAgICsJcHV0YygnIicsIG91dCk7DQogICAgKwl3aGlsZSAoKHAgPSBzdHJjaHIo
c3RyLCAnIicpKSkgew0KICAgICsJCWxlbiA9IHAgLSBzdHI7DQogICAgKwkJaWYgKGxlbikNCiAg
ICArCQkJZnByaW50ZihvdXQsICIlLipzIiwgbGVuLCBzdHIpOw0KICAgICsJCWZwdXRzKCJcXFwi
Iiwgb3V0KTsNCiAgICArCQlzdHIgPSBwICsgMTsNCiAgICArCX0NCiAgICArCWZwdXRzKHN0ciwg
b3V0KTsNCiAgICArCXB1dGMoJyInLCBvdXQpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMg
dm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0K
ICAgICsJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOw0KICAgICsJc3RydWN0IHByb3Bl
cnR5ICpwcm9wOw0KICAgICsNCiAgICArCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpDQogICAgKwkJ
ZnByaW50ZihvdXQsICJcbmNob2ljZVxuIik7DQogICAgKwllbHNlDQogICAgKwkJZnByaW50Zihv
dXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsNCiAgICArCXN3aXRjaCAoc3ltLT50eXBl
KSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCQlmcHV0cygiICBib29sXG4iLCBvdXQp
Ow0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCWZwdXRzKCIg
IHRyaXN0YXRlXG4iLCBvdXQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX1NUUklORzoN
CiAgICArCQlmcHV0cygiICBzdHJpbmdcbiIsIG91dCk7DQogICAgKwkJYnJlYWs7DQogICAgKwlj
YXNlIFNfSU5UOg0KICAgICsJCWZwdXRzKCIgIGludGVnZXJcbiIsIG91dCk7DQogICAgKwkJYnJl
YWs7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCWZwdXRzKCIgIGhleFxuIiwgb3V0KTsNCiAg
ICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJZnB1dHMoIiAgPz8/XG4iLCBvdXQp
Ow0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBw
cm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgICsJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUp
DQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCXN3aXRjaCAocHJvcC0+dHlwZSkgew0KICAgICsJ
CWNhc2UgUF9QUk9NUFQ6DQogICAgKwkJCWZwdXRzKCIgIHByb21wdCAiLCBvdXQpOw0KICAgICsJ
CQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAgKwkJCWlmICghZXhw
cl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgICsJCQkJZnB1dHMoIiBpZiAiLCBv
dXQpOw0KICAgICsJCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOw0KICAg
ICsJCQl9DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CWNhc2UgUF9ERUZBVUxUOg0KICAgICsJCQlmcHV0cyggIiAgZGVmYXVsdCAiLCBvdXQpOw0KICAg
ICsJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOw0KICAgICsJCQlpZiAoIWV4cHJfaXNf
eWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAgICArCQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsN
CiAgICArCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsNCiAgICArCQkJ
fQ0KICAgICsJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNl
IFBfQ0hPSUNFOg0KICAgICsJCQlmcHV0cygiICAjY2hvaWNlIHZhbHVlXG4iLCBvdXQpOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfU0VMRUNUOg0KICAgICsJCQlmcHV0cyggIiAgc2Vs
ZWN0ICIsIG91dCk7DQogICAgKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAg
KwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgUF9JTVBM
WToNCiAgICArCQkJZnB1dHMoICIgIGltcGx5ICIsIG91dCk7DQogICAgKwkJCWV4cHJfZnByaW50
KHByb3AtPmV4cHIsIG91dCk7DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgUF9SQU5HRToNCiAgICArCQkJZnB1dHMoICIgIHJhbmdlICIsIG91
dCk7DQogICAgKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAgKwkJCWZwdXRj
KCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgUF9NRU5VOg0KICAgICsJ
CQlmcHV0cyggIiAgbWVudSAiLCBvdXQpOw0KICAgICsJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91
dCwgcHJvcC0+dGV4dCk7DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFr
Ow0KICAgICsJCWNhc2UgUF9TWU1CT0w6DQogICAgKwkJCWZwdXRzKCAiICBzeW1ib2wgIiwgb3V0
KTsNCiAgICArCQkJZnByaW50ZihvdXQsICIlc1xuIiwgcHJvcC0+c3ltLT5uYW1lKTsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJZnByaW50ZihvdXQsICIgIHVua25v
d24gcHJvcCAlZCFcbiIsIHByb3AtPnR5cGUpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQog
ICAgKwl9DQogICAgKwlpZiAobWVudS0+aGVscCkgew0KICAgICsJCWludCBsZW4gPSBzdHJsZW4o
bWVudS0+aGVscCk7DQogICAgKwkJd2hpbGUgKG1lbnUtPmhlbHBbLS1sZW5dID09ICdcbicpDQog
ICAgKwkJCW1lbnUtPmhlbHBbbGVuXSA9IDA7DQogICAgKwkJZnByaW50ZihvdXQsICIgIGhlbHBc
biVzXG4iLCBtZW51LT5oZWxwKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB6
Y29uZmR1bXAoRklMRSAqb3V0KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7
DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgbWVudSAqbWVudTsNCiAg
ICArDQogICAgKwltZW51ID0gcm9vdG1lbnUubGlzdDsNCiAgICArCXdoaWxlIChtZW51KSB7DQog
ICAgKwkJaWYgKChzeW0gPSBtZW51LT5zeW0pKQ0KICAgICsJCQlwcmludF9zeW1ib2wob3V0LCBt
ZW51KTsNCiAgICArCQllbHNlIGlmICgocHJvcCA9IG1lbnUtPnByb21wdCkpIHsNCiAgICArCQkJ
c3dpdGNoIChwcm9wLT50eXBlKSB7DQogICAgKwkJCWNhc2UgUF9DT01NRU5UOg0KICAgICsJCQkJ
ZnB1dHMoIlxuY29tbWVudCAiLCBvdXQpOw0KICAgICsJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhv
dXQsIHByb3AtPnRleHQpOw0KICAgICsJCQkJZnB1dHMoIlxuIiwgb3V0KTsNCiAgICArCQkJCWJy
ZWFrOw0KICAgICsJCQljYXNlIFBfTUVOVToNCiAgICArCQkJCWZwdXRzKCJcbm1lbnUgIiwgb3V0
KTsNCiAgICArCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAgICAr
CQkJCWZwdXRzKCJcbiIsIG91dCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJZGVmYXVsdDoN
CiAgICArCQkJCTsNCiAgICArCQkJfQ0KICAgICsJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZp
c2libGUuZXhwcikpIHsNCiAgICArCQkJCWZwdXRzKCIgIGRlcGVuZHMgIiwgb3V0KTsNCiAgICAr
CQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsNCiAgICArCQkJCWZwdXRj
KCdcbicsIG91dCk7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKw0KICAgICsJCWlmIChtZW51
LT5saXN0KQ0KICAgICsJCQltZW51ID0gbWVudS0+bGlzdDsNCiAgICArCQllbHNlIGlmIChtZW51
LT5uZXh0KQ0KICAgICsJCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICArCQllbHNlIHdoaWxlICgo
bWVudSA9IG1lbnUtPnBhcmVudCkpIHsNCiAgICArCQkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51
LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQ0KICAgICsJCQkJZnB1dHMoIlxuZW5kbWVudVxuIiwg
b3V0KTsNCiAgICArCQkJaWYgKG1lbnUtPm5leHQpIHsNCiAgICArCQkJCW1lbnUgPSBtZW51LT5u
ZXh0Ow0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAg
K30NCiAgICArDQogICAgKyNpbmNsdWRlICJ1dGlsLmMiDQogICAgKyNpbmNsdWRlICJtZW51LmMi
DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcHJlcHJvY2Vzcy5jIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K
ICAgIGluZGV4IDAwMDAwMDAuLjU5MmRmYmYNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMNCiAgICBAQCAtMCwwICsxLDU3MyBAQA0K
ICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvLw0KICAgICsv
LyBDb3B5cmlnaHQgKEMpIDIwMTggTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29j
aW9uZXh0LmNvbT4NCiAgICArDQogICAgKyNpbmNsdWRlIDxjdHlwZS5oPg0KICAgICsjaW5jbHVk
ZSA8c3RkYXJnLmg+DQogICAgKyNpbmNsdWRlIDxzdGRib29sLmg+DQogICAgKyNpbmNsdWRlIDxz
dGRpby5oPg0KICAgICsjaW5jbHVkZSA8c3RkbGliLmg+DQogICAgKyNpbmNsdWRlIDxzdHJpbmcu
aD4NCiAgICArDQogICAgKyNpbmNsdWRlICJsaXN0LmgiDQogICAgKyNpbmNsdWRlICJsa2MuaCIN
CiAgICArDQogICAgKyNkZWZpbmUgQVJSQVlfU0laRShhcnIpCQkoc2l6ZW9mKGFycikgLyBzaXpl
b2YoKGFycilbMF0pKQ0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKmV4cGFuZF9zdHJpbmdfd2l0
aF9hcmdzKGNvbnN0IGNoYXIgKmluLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsNCiAgICArDQog
ICAgK3N0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgcHBlcnJvcihjb25zdCBj
aGFyICpmb3JtYXQsIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBhcDsNCiAgICArDQogICAg
KwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCBjdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5v
KTsNCiAgICArCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOw0KICAgICsJdmZwcmludGYoc3RkZXJyLCBm
b3JtYXQsIGFwKTsNCiAgICArCXZhX2VuZChhcCk7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIlxu
Iik7DQogICAgKw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICAr
ICogRW52aXJvbm1lbnQgdmFyaWFibGVzDQogICAgKyAqLw0KICAgICtzdGF0aWMgTElTVF9IRUFE
KGVudl9saXN0KTsNCiAgICArDQogICAgK3N0cnVjdCBlbnYgew0KICAgICsJY2hhciAqbmFtZTsN
CiAgICArCWNoYXIgKnZhbHVlOw0KICAgICsJc3RydWN0IGxpc3RfaGVhZCBub2RlOw0KICAgICt9
Ow0KICAgICsNCiAgICArc3RhdGljIHZvaWQgZW52X2FkZChjb25zdCBjaGFyICpuYW1lLCBjb25z
dCBjaGFyICp2YWx1ZSkNCiAgICArew0KICAgICsJc3RydWN0IGVudiAqZTsNCiAgICArDQogICAg
KwllID0geG1hbGxvYyhzaXplb2YoKmUpKTsNCiAgICArCWUtPm5hbWUgPSB4c3RyZHVwKG5hbWUp
Ow0KICAgICsJZS0+dmFsdWUgPSB4c3RyZHVwKHZhbHVlKTsNCiAgICArDQogICAgKwlsaXN0X2Fk
ZF90YWlsKCZlLT5ub2RlLCAmZW52X2xpc3QpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMg
dm9pZCBlbnZfZGVsKHN0cnVjdCBlbnYgKmUpDQogICAgK3sNCiAgICArCWxpc3RfZGVsKCZlLT5u
b2RlKTsNCiAgICArCWZyZWUoZS0+bmFtZSk7DQogICAgKwlmcmVlKGUtPnZhbHVlKTsNCiAgICAr
CWZyZWUoZSk7DQogICAgK30NCiAgICArDQogICAgKy8qIFRoZSByZXR1cm5lZCBwb2ludGVyIG11
c3QgYmUgZnJlZWQgd2hlbiBkb25lICovDQogICAgK3N0YXRpYyBjaGFyICplbnZfZXhwYW5kKGNv
bnN0IGNoYXIgKm5hbWUpDQogICAgK3sNCiAgICArCXN0cnVjdCBlbnYgKmU7DQogICAgKwljb25z
dCBjaGFyICp2YWx1ZTsNCiAgICArDQogICAgKwlpZiAoISpuYW1lKQ0KICAgICsJCXJldHVybiBO
VUxMOw0KICAgICsNCiAgICArCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmVudl9saXN0LCBub2Rl
KSB7DQogICAgKwkJaWYgKCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpDQogICAgKwkJCXJldHVybiB4
c3RyZHVwKGUtPnZhbHVlKTsNCiAgICArCX0NCiAgICArDQogICAgKwl2YWx1ZSA9IGdldGVudihu
YW1lKTsNCiAgICArCWlmICghdmFsdWUpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKw0KICAg
ICsJLyoNCiAgICArCSAqIFdlIG5lZWQgdG8gcmVtZW1iZXIgYWxsIHJlZmVyZW5jZWQgZW52aXJv
bm1lbnQgdmFyaWFibGVzLg0KICAgICsJICogVGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IHRvIGlu
Y2x1ZGUvY29uZmlnL2F1dG8uY29uZi5jbWQNCiAgICArCSAqLw0KICAgICsJZW52X2FkZChuYW1l
LCB2YWx1ZSk7DQogICAgKw0KICAgICsJcmV0dXJuIHhzdHJkdXAodmFsdWUpOw0KICAgICt9DQog
ICAgKw0KICAgICt2b2lkIGVudl93cml0ZV9kZXAoRklMRSAqZiwgY29uc3QgY2hhciAqYXV0b2Nv
bmZpZ19uYW1lKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZW52ICplLCAqdG1wOw0KICAgICsNCiAg
ICArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlLCB0bXAsICZlbnZfbGlzdCwgbm9kZSkgew0K
ICAgICsJCWZwcmludGYoZiwgImlmbmVxIFwiJCglcylcIiBcIiVzXCJcbiIsIGUtPm5hbWUsIGUt
PnZhbHVlKTsNCiAgICArCQlmcHJpbnRmKGYsICIlczogRk9SQ0VcbiIsIGF1dG9jb25maWdfbmFt
ZSk7DQogICAgKwkJZnByaW50ZihmLCAiZW5kaWZcbiIpOw0KICAgICsJCWVudl9kZWwoZSk7DQog
ICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIEJ1aWx0LWluIGZ1bmN0aW9u
cw0KICAgICsgKi8NCiAgICArc3RydWN0IGZ1bmN0aW9uIHsNCiAgICArCWNvbnN0IGNoYXIgKm5h
bWU7DQogICAgKwl1bnNpZ25lZCBpbnQgbWluX2FyZ3M7DQogICAgKwl1bnNpZ25lZCBpbnQgbWF4
X2FyZ3M7DQogICAgKwljaGFyICooKmZ1bmMpKGludCBhcmdjLCBjaGFyICphcmd2W10pOw0KICAg
ICt9Ow0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKmRvX2Vycm9yX2lmKGludCBhcmdjLCBjaGFy
ICphcmd2W10pDQogICAgK3sNCiAgICArCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ5IikpDQogICAg
KwkJcHBlcnJvcigiJXMiLCBhcmd2WzFdKTsNCiAgICArDQogICAgKwlyZXR1cm4gTlVMTDsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKmRvX2ZpbGVuYW1lKGludCBhcmdjLCBjaGFy
ICphcmd2W10pDQogICAgK3sNCiAgICArCXJldHVybiB4c3RyZHVwKGN1cnJlbnRfZmlsZS0+bmFt
ZSk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBjaGFyICpkb19pbmZvKGludCBhcmdjLCBj
aGFyICphcmd2W10pDQogICAgK3sNCiAgICArCXByaW50ZigiJXNcbiIsIGFyZ3ZbMF0pOw0KICAg
ICsNCiAgICArCXJldHVybiB4c3RyZHVwKCIiKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGlj
IGNoYXIgKmRvX2xpbmVubyhpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwlj
aGFyIGJ1ZlsxNl07DQogICAgKw0KICAgICsJc3ByaW50ZihidWYsICIlZCIsIHl5bGluZW5vKTsN
CiAgICArDQogICAgKwlyZXR1cm4geHN0cmR1cChidWYpOw0KICAgICt9DQogICAgKw0KICAgICtz
dGF0aWMgY2hhciAqZG9fc2hlbGwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICArew0KICAg
ICsJRklMRSAqcDsNCiAgICArCWNoYXIgYnVmWzI1Nl07DQogICAgKwljaGFyICpjbWQ7DQogICAg
KwlzaXplX3QgbnJlYWQ7DQogICAgKwlpbnQgaTsNCiAgICArDQogICAgKwljbWQgPSBhcmd2WzBd
Ow0KICAgICsNCiAgICArCXAgPSBwb3BlbihjbWQsICJyIik7DQogICAgKwlpZiAoIXApIHsNCiAg
ICArCQlwZXJyb3IoY21kKTsNCiAgICArCQlleGl0KDEpOw0KICAgICsJfQ0KICAgICsNCiAgICAr
CW5yZWFkID0gZnJlYWQoYnVmLCAxLCBzaXplb2YoYnVmKSwgcCk7DQogICAgKwlpZiAobnJlYWQg
PT0gc2l6ZW9mKGJ1ZikpDQogICAgKwkJbnJlYWQtLTsNCiAgICArDQogICAgKwkvKiByZW1vdmUg
dHJhaWxpbmcgbmV3IGxpbmVzICovDQogICAgKwl3aGlsZSAobnJlYWQgPiAwICYmIGJ1ZltucmVh
ZCAtIDFdID09ICdcbicpDQogICAgKwkJbnJlYWQtLTsNCiAgICArDQogICAgKwlidWZbbnJlYWRd
ID0gMDsNCiAgICArDQogICAgKwkvKiByZXBsYWNlIGEgbmV3IGxpbmUgd2l0aCBhIHNwYWNlICov
DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgbnJlYWQ7IGkrKykgew0KICAgICsJCWlmIChidWZbaV0g
PT0gJ1xuJykNCiAgICArCQkJYnVmW2ldID0gJyAnOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlm
IChwY2xvc2UocCkgPT0gLTEpIHsNCiAgICArCQlwZXJyb3IoY21kKTsNCiAgICArCQlleGl0KDEp
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiB4c3RyZHVwKGJ1Zik7DQogICAgK30NCiAg
ICArDQogICAgK3N0YXRpYyBjaGFyICpkb193YXJuaW5nX2lmKGludCBhcmdjLCBjaGFyICphcmd2
W10pDQogICAgK3sNCiAgICArCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ5IikpDQogICAgKwkJZnBy
aW50ZihzdGRlcnIsICIlczolZDogJXNcbiIsDQogICAgKwkJCWN1cnJlbnRfZmlsZS0+bmFtZSwg
eXlsaW5lbm8sIGFyZ3ZbMV0pOw0KICAgICsNCiAgICArCXJldHVybiB4c3RyZHVwKCIiKTsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RhdGljIGNvbnN0IHN0cnVjdCBmdW5jdGlvbiBmdW5jdGlvbl90
YWJsZVtdID0gew0KICAgICsJLyogTmFtZQkJTUlOCU1BWAlGdW5jdGlvbiAqLw0KICAgICsJeyAi
ZXJyb3ItaWYiLAkyLAkyLAlkb19lcnJvcl9pZiB9LA0KICAgICsJeyAiZmlsZW5hbWUiLAkwLAkw
LAlkb19maWxlbmFtZSB9LA0KICAgICsJeyAiaW5mbyIsCTEsCTEsCWRvX2luZm8gfSwNCiAgICAr
CXsgImxpbmVubyIsCTAsCTAsCWRvX2xpbmVubyB9LA0KICAgICsJeyAic2hlbGwiLAkxLAkxLAlk
b19zaGVsbCB9LA0KICAgICsJeyAid2FybmluZy1pZiIsCTIsCTIsCWRvX3dhcm5pbmdfaWYgfSwN
CiAgICArfTsNCiAgICArDQogICAgKyNkZWZpbmUgRlVOQ1RJT05fTUFYX0FSR1MJCTE2DQogICAg
Kw0KICAgICtzdGF0aWMgY2hhciAqZnVuY3Rpb25fZXhwYW5kKGNvbnN0IGNoYXIgKm5hbWUsIGlu
dCBhcmdjLCBjaGFyICphcmd2W10pDQogICAgK3sNCiAgICArCWNvbnN0IHN0cnVjdCBmdW5jdGlv
biAqZjsNCiAgICArCWludCBpOw0KICAgICsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9T
SVpFKGZ1bmN0aW9uX3RhYmxlKTsgaSsrKSB7DQogICAgKwkJZiA9ICZmdW5jdGlvbl90YWJsZVtp
XTsNCiAgICArCQlpZiAoc3RyY21wKGYtPm5hbWUsIG5hbWUpKQ0KICAgICsJCQljb250aW51ZTsN
CiAgICArDQogICAgKwkJaWYgKGFyZ2MgPCBmLT5taW5fYXJncykNCiAgICArCQkJcHBlcnJvcigi
dG9vIGZldyBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIHRvICclcyciLA0KICAgICsJCQkJbmFt
ZSk7DQogICAgKw0KICAgICsJCWlmIChhcmdjID4gZi0+bWF4X2FyZ3MpDQogICAgKwkJCXBwZXJy
b3IoInRvbyBtYW55IGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gJyVzJyIsDQogICAgKwkJ
CQluYW1lKTsNCiAgICArDQogICAgKwkJcmV0dXJuIGYtPmZ1bmMoYXJnYywgYXJndik7DQogICAg
Kwl9DQogICAgKw0KICAgICsJcmV0dXJuIE5VTEw7DQogICAgK30NCiAgICArDQogICAgKy8qDQog
ICAgKyAqIFZhcmlhYmxlcyAoYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMpDQogICAgKyAqLw0K
ICAgICtzdGF0aWMgTElTVF9IRUFEKHZhcmlhYmxlX2xpc3QpOw0KICAgICsNCiAgICArc3RydWN0
IHZhcmlhYmxlIHsNCiAgICArCWNoYXIgKm5hbWU7DQogICAgKwljaGFyICp2YWx1ZTsNCiAgICAr
CWVudW0gdmFyaWFibGVfZmxhdm9yIGZsYXZvcjsNCiAgICArCWludCBleHBfY291bnQ7DQogICAg
KwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7DQogICAgK307DQogICAgKw0KICAgICtzdGF0aWMgc3Ry
dWN0IHZhcmlhYmxlICp2YXJpYWJsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0K
ICAgICsJc3RydWN0IHZhcmlhYmxlICp2Ow0KICAgICsNCiAgICArCWxpc3RfZm9yX2VhY2hfZW50
cnkodiwgJnZhcmlhYmxlX2xpc3QsIG5vZGUpIHsNCiAgICArCQlpZiAoIXN0cmNtcChuYW1lLCB2
LT5uYW1lKSkNCiAgICArCQkJcmV0dXJuIHY7DQogICAgKwl9DQogICAgKw0KICAgICsJcmV0dXJu
IE5VTEw7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBjaGFyICp2YXJpYWJsZV9leHBhbmQo
Y29uc3QgY2hhciAqbmFtZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICArew0KICAgICsJ
c3RydWN0IHZhcmlhYmxlICp2Ow0KICAgICsJY2hhciAqcmVzOw0KICAgICsNCiAgICArCXYgPSB2
YXJpYWJsZV9sb29rdXAobmFtZSk7DQogICAgKwlpZiAoIXYpDQogICAgKwkJcmV0dXJuIE5VTEw7
DQogICAgKw0KICAgICsJaWYgKGFyZ2MgPT0gMCAmJiB2LT5leHBfY291bnQpDQogICAgKwkJcHBl
cnJvcigiUmVjdXJzaXZlIHZhcmlhYmxlICclcycgcmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFs
bHkpIiwNCiAgICArCQkJbmFtZSk7DQogICAgKw0KICAgICsJaWYgKHYtPmV4cF9jb3VudCA+IDEw
MDApDQogICAgKwkJcHBlcnJvcigiVG9vIGRlZXAgcmVjdXJzaXZlIGV4cGFuc2lvbiIpOw0KICAg
ICsNCiAgICArCXYtPmV4cF9jb3VudCsrOw0KICAgICsNCiAgICArCWlmICh2LT5mbGF2b3IgPT0g
VkFSX1JFQ1VSU0lWRSkNCiAgICArCQlyZXMgPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyh2LT52
YWx1ZSwgYXJnYywgYXJndik7DQogICAgKwllbHNlDQogICAgKwkJcmVzID0geHN0cmR1cCh2LT52
YWx1ZSk7DQogICAgKw0KICAgICsJdi0+ZXhwX2NvdW50LS07DQogICAgKw0KICAgICsJcmV0dXJu
IHJlczsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB2YXJpYWJsZV9hZGQoY29uc3QgY2hhciAq
bmFtZSwgY29uc3QgY2hhciAqdmFsdWUsDQogICAgKwkJICBlbnVtIHZhcmlhYmxlX2ZsYXZvciBm
bGF2b3IpDQogICAgK3sNCiAgICArCXN0cnVjdCB2YXJpYWJsZSAqdjsNCiAgICArCWNoYXIgKm5l
d192YWx1ZTsNCiAgICArCWJvb2wgYXBwZW5kID0gZmFsc2U7DQogICAgKw0KICAgICsJdiA9IHZh
cmlhYmxlX2xvb2t1cChuYW1lKTsNCiAgICArCWlmICh2KSB7DQogICAgKwkJLyogRm9yIGRlZmlu
ZWQgdmFyaWFibGVzLCArPSBpbmhlcml0cyB0aGUgZXhpc3RpbmcgZmxhdm9yICovDQogICAgKwkJ
aWYgKGZsYXZvciA9PSBWQVJfQVBQRU5EKSB7DQogICAgKwkJCWZsYXZvciA9IHYtPmZsYXZvcjsN
CiAgICArCQkJYXBwZW5kID0gdHJ1ZTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlmcmVlKHYt
PnZhbHVlKTsNCiAgICArCQl9DQogICAgKwl9IGVsc2Ugew0KICAgICsJCS8qIEZvciB1bmRlZmlu
ZWQgdmFyaWFibGVzLCArPSBhc3N1bWVzIHRoZSByZWN1cnNpdmUgZmxhdm9yICovDQogICAgKwkJ
aWYgKGZsYXZvciA9PSBWQVJfQVBQRU5EKQ0KICAgICsJCQlmbGF2b3IgPSBWQVJfUkVDVVJTSVZF
Ow0KICAgICsNCiAgICArCQl2ID0geG1hbGxvYyhzaXplb2YoKnYpKTsNCiAgICArCQl2LT5uYW1l
ID0geHN0cmR1cChuYW1lKTsNCiAgICArCQl2LT5leHBfY291bnQgPSAwOw0KICAgICsJCWxpc3Rf
YWRkX3RhaWwoJnYtPm5vZGUsICZ2YXJpYWJsZV9saXN0KTsNCiAgICArCX0NCiAgICArDQogICAg
Kwl2LT5mbGF2b3IgPSBmbGF2b3I7DQogICAgKw0KICAgICsJaWYgKGZsYXZvciA9PSBWQVJfU0lN
UExFKQ0KICAgICsJCW5ld192YWx1ZSA9IGV4cGFuZF9zdHJpbmcodmFsdWUpOw0KICAgICsJZWxz
ZQ0KICAgICsJCW5ld192YWx1ZSA9IHhzdHJkdXAodmFsdWUpOw0KICAgICsNCiAgICArCWlmIChh
cHBlbmQpIHsNCiAgICArCQl2LT52YWx1ZSA9IHhyZWFsbG9jKHYtPnZhbHVlLA0KICAgICsJCQkJ
ICAgIHN0cmxlbih2LT52YWx1ZSkgKyBzdHJsZW4obmV3X3ZhbHVlKSArIDIpOw0KICAgICsJCXN0
cmNhdCh2LT52YWx1ZSwgIiAiKTsNCiAgICArCQlzdHJjYXQodi0+dmFsdWUsIG5ld192YWx1ZSk7
DQogICAgKwkJZnJlZShuZXdfdmFsdWUpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQl2LT52YWx1
ZSA9IG5ld192YWx1ZTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQg
dmFyaWFibGVfZGVsKHN0cnVjdCB2YXJpYWJsZSAqdikNCiAgICArew0KICAgICsJbGlzdF9kZWwo
JnYtPm5vZGUpOw0KICAgICsJZnJlZSh2LT5uYW1lKTsNCiAgICArCWZyZWUodi0+dmFsdWUpOw0K
ICAgICsJZnJlZSh2KTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB2YXJpYWJsZV9hbGxfZGVs
KHZvaWQpDQogICAgK3sNCiAgICArCXN0cnVjdCB2YXJpYWJsZSAqdiwgKnRtcDsNCiAgICArDQog
ICAgKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodiwgdG1wLCAmdmFyaWFibGVfbGlzdCwgbm9k
ZSkNCiAgICArCQl2YXJpYWJsZV9kZWwodik7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAg
KyAqIEV2YWx1YXRlIGEgY2xhdXNlIHdpdGggYXJndW1lbnRzLiAgYXJnYy9hcmd2IGFyZSBhcmd1
bWVudHMgZnJvbSB0aGUgdXBwZXINCiAgICArICogZnVuY3Rpb24gY2FsbC4NCiAgICArICoNCiAg
ICArICogUmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBkb25lDQogICAgKyAqLw0K
ICAgICtzdGF0aWMgY2hhciAqZXZhbF9jbGF1c2UoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVu
LCBpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwljaGFyICp0bXAsICpuYW1l
LCAqcmVzLCAqZW5kcHRyLCAqcHJldiwgKnA7DQogICAgKwlpbnQgbmV3X2FyZ2MgPSAwOw0KICAg
ICsJY2hhciAqbmV3X2FyZ3ZbRlVOQ1RJT05fTUFYX0FSR1NdOw0KICAgICsJaW50IG5lc3QgPSAw
Ow0KICAgICsJaW50IGk7DQogICAgKwl1bnNpZ25lZCBsb25nIG47DQogICAgKw0KICAgICsJdG1w
ID0geHN0cm5kdXAoc3RyLCBsZW4pOw0KICAgICsNCiAgICArCS8qDQogICAgKwkgKiBJZiB2YXJp
YWJsZSBuYW1lIGlzICcxJywgJzInLCBldGMuICBJdCBpcyBnZW5lcmFsbHkgYW4gYXJndW1lbnQN
CiAgICArCSAqIGZyb20gYSB1c2VyLWZ1bmN0aW9uIGNhbGwgKGkuZS4gbG9jYWwtc2NvcGUgdmFy
aWFibGUpLiAgSWYgbm90DQogICAgKwkgKiBhdmFpbGFibGUsIHRoZW4gbG9vay11cCBnbG9iYWwt
c2NvcGUgdmFyaWFibGVzLg0KICAgICsJICovDQogICAgKwluID0gc3RydG91bCh0bXAsICZlbmRw
dHIsIDEwKTsNCiAgICArCWlmICghKmVuZHB0ciAmJiBuID4gMCAmJiBuIDw9IGFyZ2MpIHsNCiAg
ICArCQlyZXMgPSB4c3RyZHVwKGFyZ3ZbbiAtIDFdKTsNCiAgICArCQlnb3RvIGZyZWVfdG1wOw0K
ICAgICsJfQ0KICAgICsNCiAgICArCXByZXYgPSBwID0gdG1wOw0KICAgICsNCiAgICArCS8qDQog
ICAgKwkgKiBTcGxpdCBpbnRvIHRva2Vucw0KICAgICsJICogVGhlIGZ1bmN0aW9uIG5hbWUgYW5k
IGFyZ3VtZW50cyBhcmUgc2VwYXJhdGVkIGJ5IGEgY29tbWEuDQogICAgKwkgKiBGb3IgZXhhbXBs
ZSwgaWYgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgbGlrZSB0aGlzOg0KICAgICsJICogICAkKGZvbywk
KHgpLCQoeSkpDQogICAgKwkgKg0KICAgICsJICogVGhlIGlucHV0IHN0cmluZyBmb3IgdGhpcyBo
ZWxwZXIgc2hvdWxkIGJlOg0KICAgICsJICogICBmb28sJCh4KSwkKHkpDQogICAgKwkgKg0KICAg
ICsJICogYW5kIHNwbGl0IGludG86DQogICAgKwkgKiAgIG5ld19hcmd2WzBdID0gJ2ZvbycNCiAg
ICArCSAqICAgbmV3X2FyZ3ZbMV0gPSAnJCh4KScNCiAgICArCSAqICAgbmV3X2FyZ3ZbMl0gPSAn
JCh5KScNCiAgICArCSAqLw0KICAgICsJd2hpbGUgKCpwKSB7DQogICAgKwkJaWYgKG5lc3QgPT0g
MCAmJiAqcCA9PSAnLCcpIHsNCiAgICArCQkJKnAgPSAwOw0KICAgICsJCQlpZiAobmV3X2FyZ2Mg
Pj0gRlVOQ1RJT05fTUFYX0FSR1MpDQogICAgKwkJCQlwcGVycm9yKCJ0b28gbWFueSBmdW5jdGlv
biBhcmd1bWVudHMiKTsNCiAgICArCQkJbmV3X2FyZ3ZbbmV3X2FyZ2MrK10gPSBwcmV2Ow0KICAg
ICsJCQlwcmV2ID0gcCArIDE7DQogICAgKwkJfSBlbHNlIGlmICgqcCA9PSAnKCcpIHsNCiAgICAr
CQkJbmVzdCsrOw0KICAgICsJCX0gZWxzZSBpZiAoKnAgPT0gJyknKSB7DQogICAgKwkJCW5lc3Qt
LTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCXArKzsNCiAgICArCX0NCiAgICArCW5ld19hcmd2
W25ld19hcmdjKytdID0gcHJldjsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogU2hpZnQgYXJn
dW1lbnRzDQogICAgKwkgKiBuZXdfYXJndlswXSByZXByZXNlbnRzIGEgZnVuY3Rpb24gbmFtZSBv
ciBhIHZhcmlhYmxlIG5hbWUuICBQdXQgaXQNCiAgICArCSAqIGludG8gJ25hbWUnLCB0aGVuIHNo
aWZ0IHRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMuICBUaGlzIHNpbXBsaWZpZXMNCiAgICArCSAq
ICdjb25zdCcgaGFuZGxpbmcuDQogICAgKwkgKi8NCiAgICArCW5hbWUgPSBleHBhbmRfc3RyaW5n
X3dpdGhfYXJncyhuZXdfYXJndlswXSwgYXJnYywgYXJndik7DQogICAgKwluZXdfYXJnYy0tOw0K
ICAgICsJZm9yIChpID0gMDsgaSA8IG5ld19hcmdjOyBpKyspDQogICAgKwkJbmV3X2FyZ3ZbaV0g
PSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdfYXJndltpICsgMV0sDQogICAgKwkJCQkJCSAg
ICAgIGFyZ2MsIGFyZ3YpOw0KICAgICsNCiAgICArCS8qIFNlYXJjaCBmb3IgdmFyaWFibGVzICov
DQogICAgKwlyZXMgPSB2YXJpYWJsZV9leHBhbmQobmFtZSwgbmV3X2FyZ2MsIG5ld19hcmd2KTsN
CiAgICArCWlmIChyZXMpDQogICAgKwkJZ290byBmcmVlOw0KICAgICsNCiAgICArCS8qIExvb2sg
Zm9yIGJ1aWx0LWluIGZ1bmN0aW9ucyAqLw0KICAgICsJcmVzID0gZnVuY3Rpb25fZXhwYW5kKG5h
bWUsIG5ld19hcmdjLCBuZXdfYXJndik7DQogICAgKwlpZiAocmVzKQ0KICAgICsJCWdvdG8gZnJl
ZTsNCiAgICArDQogICAgKwkvKiBMYXN0LCB0cnkgZW52aXJvbm1lbnQgdmFyaWFibGUgKi8NCiAg
ICArCWlmIChuZXdfYXJnYyA9PSAwKSB7DQogICAgKwkJcmVzID0gZW52X2V4cGFuZChuYW1lKTsN
CiAgICArCQlpZiAocmVzKQ0KICAgICsJCQlnb3RvIGZyZWU7DQogICAgKwl9DQogICAgKw0KICAg
ICsJcmVzID0geHN0cmR1cCgiIik7DQogICAgK2ZyZWU6DQogICAgKwlmb3IgKGkgPSAwOyBpIDwg
bmV3X2FyZ2M7IGkrKykNCiAgICArCQlmcmVlKG5ld19hcmd2W2ldKTsNCiAgICArCWZyZWUobmFt
ZSk7DQogICAgK2ZyZWVfdG1wOg0KICAgICsJZnJlZSh0bXApOw0KICAgICsNCiAgICArCXJldHVy
biByZXM7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIEV4cGFuZCBhIHN0cmluZyB0
aGF0IGZvbGxvd3MgJyQnDQogICAgKyAqDQogICAgKyAqIEZvciBleGFtcGxlLCBpZiB0aGUgaW5w
dXQgc3RyaW5nIGlzDQogICAgKyAqICAgICAoJChGT08pJCgkKEJBUikpKSQoQkFaKQ0KICAgICsg
KiB0aGlzIGhlbHBlciBldmFsdWF0ZXMNCiAgICArICogICAgICQoJChGT08pJCgkKEJBUikpKQ0K
ICAgICsgKiBhbmQgcmV0dXJucyBhIG5ldyBzdHJpbmcgY29udGFpbmluZyB0aGUgZXhwYW5zaW9u
IChub3RlIHRoYXQgdGhlIHN0cmluZyBpcw0KICAgICsgKiByZWN1cnNpdmVseSBleHBhbmRlZCks
IGFsc28gYWR2YW5jaW5nICdzdHInIHRvIHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3Rlcg0KICAg
ICsgKiBhZnRlciB0aGUgY29ycmVzcG9uZGluZyBjbG9zaW5nIHBhcmVudGhlc2lzLCBpbiB0aGlz
IGNhc2UsICpzdHIgd2lsbCBiZQ0KICAgICsgKiAgICAgJChCQVIpDQogICAgKyAqLw0KICAgICtz
dGF0aWMgY2hhciAqZXhwYW5kX2RvbGxhcl93aXRoX2FyZ3MoY29uc3QgY2hhciAqKnN0ciwgaW50
IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqcCA9ICpzdHI7
DQogICAgKwljb25zdCBjaGFyICpxOw0KICAgICsJaW50IG5lc3QgPSAwOw0KICAgICsNCiAgICAr
CS8qDQogICAgKwkgKiBJbiBLY29uZmlnLCB2YXJpYWJsZS9mdW5jdGlvbiByZWZlcmVuY2VzIGFs
d2F5cyBzdGFydCB3aXRoICIkKCIuDQogICAgKwkgKiBOZWl0aGVyIHNpbmdsZS1sZXR0ZXIgdmFy
aWFibGVzIGFzIGluICRBIG5vciBjdXJseSBicmFjZXMgYXMgaW4gJHtDQ30NCiAgICArCSAqIGFy
ZSBzdXBwb3J0ZWQuICAnJCcgbm90IGZvbGxvd2VkIGJ5ICcoJyBsb3NlcyBpdHMgc3BlY2lhbCBt
ZWFuaW5nLg0KICAgICsJICovDQogICAgKwlpZiAoKnAgIT0gJygnKSB7DQogICAgKwkJKnN0ciA9
IHA7DQogICAgKwkJcmV0dXJuIHhzdHJkdXAoIiQiKTsNCiAgICArCX0NCiAgICArDQogICAgKwlw
Kys7DQogICAgKwlxID0gcDsNCiAgICArCXdoaWxlICgqcSkgew0KICAgICsJCWlmICgqcSA9PSAn
KCcpIHsNCiAgICArCQkJbmVzdCsrOw0KICAgICsJCX0gZWxzZSBpZiAoKnEgPT0gJyknKSB7DQog
ICAgKwkJCWlmIChuZXN0LS0gPT0gMCkNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCX0NCiAgICAr
CQlxKys7DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKCEqcSkNCiAgICArCQlwcGVycm9yKCJ1
bnRlcm1pbmF0ZWQgcmVmZXJlbmNlIHRvICclcyc6IG1pc3NpbmcgJyknIiwgcCk7DQogICAgKw0K
ICAgICsJLyogQWR2YW5jZSAnc3RyJyB0byBhZnRlciB0aGUgZXhwYW5kZWQgaW5pdGlhbCBwb3J0
aW9uIG9mIHRoZSBzdHJpbmcgKi8NCiAgICArCSpzdHIgPSBxICsgMTsNCiAgICArDQogICAgKwly
ZXR1cm4gZXZhbF9jbGF1c2UocCwgcSAtIHAsIGFyZ2MsIGFyZ3YpOw0KICAgICt9DQogICAgKw0K
ICAgICtjaGFyICpleHBhbmRfZG9sbGFyKGNvbnN0IGNoYXIgKipzdHIpDQogICAgK3sNCiAgICAr
CXJldHVybiBleHBhbmRfZG9sbGFyX3dpdGhfYXJncyhzdHIsIDAsIE5VTEwpOw0KICAgICt9DQog
ICAgKw0KICAgICtzdGF0aWMgY2hhciAqX19leHBhbmRfc3RyaW5nKGNvbnN0IGNoYXIgKipzdHIs
IGJvb2wgKCppc19lbmQpKGNoYXIgYyksDQogICAgKwkJCSAgICAgaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqaW4sICpwOw0KICAgICsJY2hhciAqZXhw
YW5zaW9uLCAqb3V0Ow0KICAgICsJc2l6ZV90IGluX2xlbiwgb3V0X2xlbjsNCiAgICArDQogICAg
KwlvdXQgPSB4bWFsbG9jKDEpOw0KICAgICsJKm91dCA9IDA7DQogICAgKwlvdXRfbGVuID0gMTsN
CiAgICArDQogICAgKwlwID0gaW4gPSAqc3RyOw0KICAgICsNCiAgICArCXdoaWxlICgxKSB7DQog
ICAgKwkJaWYgKCpwID09ICckJykgew0KICAgICsJCQlpbl9sZW4gPSBwIC0gaW47DQogICAgKwkJ
CXArKzsNCiAgICArCQkJZXhwYW5zaW9uID0gZXhwYW5kX2RvbGxhcl93aXRoX2FyZ3MoJnAsIGFy
Z2MsIGFyZ3YpOw0KICAgICsJCQlvdXRfbGVuICs9IGluX2xlbiArIHN0cmxlbihleHBhbnNpb24p
Ow0KICAgICsJCQlvdXQgPSB4cmVhbGxvYyhvdXQsIG91dF9sZW4pOw0KICAgICsJCQlzdHJuY2F0
KG91dCwgaW4sIGluX2xlbik7DQogICAgKwkJCXN0cmNhdChvdXQsIGV4cGFuc2lvbik7DQogICAg
KwkJCWZyZWUoZXhwYW5zaW9uKTsNCiAgICArCQkJaW4gPSBwOw0KICAgICsJCQljb250aW51ZTsN
CiAgICArCQl9DQogICAgKw0KICAgICsJCWlmIChpc19lbmQoKnApKQ0KICAgICsJCQlicmVhazsN
CiAgICArDQogICAgKwkJcCsrOw0KICAgICsJfQ0KICAgICsNCiAgICArCWluX2xlbiA9IHAgLSBp
bjsNCiAgICArCW91dF9sZW4gKz0gaW5fbGVuOw0KICAgICsJb3V0ID0geHJlYWxsb2Mob3V0LCBv
dXRfbGVuKTsNCiAgICArCXN0cm5jYXQob3V0LCBpbiwgaW5fbGVuKTsNCiAgICArDQogICAgKwkv
KiBBZHZhbmNlICdzdHInIHRvIHRoZSBlbmQgY2hhcmFjdGVyICovDQogICAgKwkqc3RyID0gcDsN
CiAgICArDQogICAgKwlyZXR1cm4gb3V0Ow0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgYm9v
bCBpc19lbmRfb2Zfc3RyKGNoYXIgYykNCiAgICArew0KICAgICsJcmV0dXJuICFjOw0KICAgICt9
DQogICAgKw0KICAgICsvKg0KICAgICsgKiBFeHBhbmQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMg
aW4gdGhlIGdpdmVuIHN0cmluZy4gIFVuZGVmaW5lZCB2YXJpYWJsZXMNCiAgICArICogZXhwYW5k
IHRvIGFuIGVtcHR5IHN0cmluZy4NCiAgICArICogVGhlIHJldHVybmVkIHN0cmluZyBtdXN0IGJl
IGZyZWVkIHdoZW4gZG9uZS4NCiAgICArICovDQogICAgK3N0YXRpYyBjaGFyICpleHBhbmRfc3Ry
aW5nX3dpdGhfYXJncyhjb25zdCBjaGFyICppbiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAg
ICArew0KICAgICsJcmV0dXJuIF9fZXhwYW5kX3N0cmluZygmaW4sIGlzX2VuZF9vZl9zdHIsIGFy
Z2MsIGFyZ3YpOw0KICAgICt9DQogICAgKw0KICAgICtjaGFyICpleHBhbmRfc3RyaW5nKGNvbnN0
IGNoYXIgKmluKQ0KICAgICt7DQogICAgKwlyZXR1cm4gZXhwYW5kX3N0cmluZ193aXRoX2FyZ3Mo
aW4sIDAsIE5VTEwpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgYm9vbCBpc19lbmRfb2Zf
dG9rZW4oY2hhciBjKQ0KICAgICt7DQogICAgKwlyZXR1cm4gIShpc2FsbnVtKGMpIHx8IGMgPT0g
J18nIHx8IGMgPT0gJy0nKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogRXhwYW5k
IHZhcmlhYmxlcyBpbiBhIHRva2VuLiAgVGhlIHBhcnNpbmcgc3RvcHMgd2hlbiBhIHRva2VuIHNl
cGFyYXRlcg0KICAgICsgKiAoaW4gbW9zdCBjYXNlcywgaXQgaXMgYSB3aGl0ZXNwYWNlKSBpcyBl
bmNvdW50ZXJlZC4gICdzdHInIGlzIHVwZGF0ZWQgdG8NCiAgICArICogcG9pbnQgdG8gdGhlIG5l
eHQgY2hhcmFjdGVyLg0KICAgICsgKg0KICAgICsgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3Qg
YmUgZnJlZWQgd2hlbiBkb25lLg0KICAgICsgKi8NCiAgICArY2hhciAqZXhwYW5kX29uZV90b2tl
bihjb25zdCBjaGFyICoqc3RyKQ0KICAgICt7DQogICAgKwlyZXR1cm4gX19leHBhbmRfc3RyaW5n
KHN0ciwgaXNfZW5kX29mX3Rva2VuLCAwLCBOVUxMKTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
cWNvbmYtY2ZnLnNoDQogICAgbmV3IGZpbGUgbW9kZSAxMDA3NTUNCiAgICBpbmRleCAwMDAwMDAw
Li4wMmNjYzBhDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcWNvbmYtY2ZnLnNoDQogICAgQEAgLTAsMCArMSwzMiBAQA0KICAgICsjIS9iaW4vc2gNCiAg
ICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArUEtHPSJR
dDVDb3JlIFF0NUd1aSBRdDVXaWRnZXRzIg0KICAgICtQS0cyPSJRdENvcmUgUXRHdWkiDQogICAg
Kw0KICAgICtpZiBbIC16ICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4NCiAgICAr
CWVjaG8gPiYyICIqIg0KICAgICsJZWNobyA+JjIgIiogJ21ha2UgeGNvbmZpZycgcmVxdWlyZXMg
J3BrZy1jb25maWcnLiBQbGVhc2UgaW5zdGFsbCBpdC4iDQogICAgKwllY2hvID4mMiAiKiINCiAg
ICArCWV4aXQgMQ0KICAgICtmaQ0KICAgICsNCiAgICAraWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAk
UEtHOyB0aGVuDQogICAgKwllY2hvIGNmbGFncz1cIi1zdGQ9YysrMTEgLWZQSUMgJChwa2ctY29u
ZmlnIC0tY2ZsYWdzIFF0NUNvcmUgUXQ1R3VpIFF0NVdpZGdldHMpXCINCiAgICArCWVjaG8gbGli
cz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRylcIg0KICAgICsJZWNobyBtb2M9XCIkKHBrZy1j
b25maWcgLS12YXJpYWJsZT1ob3N0X2JpbnMgUXQ1Q29yZSkvbW9jXCINCiAgICArCWV4aXQgMA0K
ICAgICtmaQ0KICAgICsNCiAgICAraWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHMjsgdGhlbg0K
ICAgICsJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBLRzIpXCINCiAgICAr
CWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCINCiAgICArCWVjaG8gbW9j
PVwiJChwa2ctY29uZmlnIC0tdmFyaWFibGU9bW9jX2xvY2F0aW9uIFF0Q29yZSlcIg0KICAgICsJ
ZXhpdCAwDQogICAgK2ZpDQogICAgKw0KICAgICtlY2hvID4mMiAiKiINCiAgICArZWNobyA+JjIg
IiogQ291bGQgbm90IGZpbmQgUXQgdmlhIHBrZy1jb25maWcuIg0KICAgICtlY2hvID4mMiAiKiBQ
bGVhc2UgaW5zdGFsbCBlaXRoZXIgUXQgNC44IG9yIDUueC4gYW5kIG1ha2Ugc3VyZSBpdCdzIGlu
IFBLR19DT05GSUdfUEFUSCINCiAgICArZWNobyA+JjIgIioiDQogICAgK2V4aXQgMQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9xY29uZi5jYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MC4uY2U3ZmM4Nw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLmNjDQogICAgQEAgLTAsMCArMSwxODk2IEBADQogICAgKy8vIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAw
MiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICogQ29weXJpZ2h0
IChDKSAyMDE1IEJvcmlzIEJhcmJ1bG92c2tpIDxiYmFyYnVsb3Zza2lAZ21haWwuY29tPg0KICAg
ICsgKi8NCiAgICArDQogICAgKyNpbmNsdWRlIDxxZ2xvYmFsLmg+DQogICAgKw0KICAgICsjaW5j
bHVkZSA8UU1haW5XaW5kb3c+DQogICAgKyNpbmNsdWRlIDxRTGlzdD4NCiAgICArI2luY2x1ZGUg
PHF0ZXh0YnJvd3Nlci5oPg0KICAgICsjaW5jbHVkZSA8UUFjdGlvbj4NCiAgICArI2luY2x1ZGUg
PFFGaWxlRGlhbG9nPg0KICAgICsjaW5jbHVkZSA8UU1lbnU+DQogICAgKw0KICAgICsjaW5jbHVk
ZSA8cWFwcGxpY2F0aW9uLmg+DQogICAgKyNpbmNsdWRlIDxxZGVza3RvcHdpZGdldC5oPg0KICAg
ICsjaW5jbHVkZSA8cXRvb2xiYXIuaD4NCiAgICArI2luY2x1ZGUgPHFsYXlvdXQuaD4NCiAgICAr
I2luY2x1ZGUgPHFzcGxpdHRlci5oPg0KICAgICsjaW5jbHVkZSA8cWxpbmVlZGl0Lmg+DQogICAg
KyNpbmNsdWRlIDxxbGFiZWwuaD4NCiAgICArI2luY2x1ZGUgPHFwdXNoYnV0dG9uLmg+DQogICAg
KyNpbmNsdWRlIDxxbWVudWJhci5oPg0KICAgICsjaW5jbHVkZSA8cW1lc3NhZ2Vib3guaD4NCiAg
ICArI2luY2x1ZGUgPHFyZWdleHAuaD4NCiAgICArI2luY2x1ZGUgPHFldmVudC5oPg0KICAgICsN
CiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0K
ICAgICsjaW5jbHVkZSAicWNvbmYuaCINCiAgICArDQogICAgKyNpbmNsdWRlICJxY29uZi5tb2Mi
DQogICAgKyNpbmNsdWRlICJpbWFnZXMuaCINCiAgICArDQogICAgKw0KICAgICtzdGF0aWMgUUFw
cGxpY2F0aW9uICpjb25maWdBcHA7DQogICAgK3N0YXRpYyBDb25maWdTZXR0aW5ncyAqY29uZmln
U2V0dGluZ3M7DQogICAgKw0KICAgICtRQWN0aW9uICpDb25maWdNYWluV2luZG93OjpzYXZlQWN0
aW9uOw0KICAgICsNCiAgICArc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0IGNo
YXIqIHN0cikNCiAgICArew0KICAgICsJcmV0dXJuIFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3Ry
KTsNCiAgICArfQ0KICAgICsNCiAgICArQ29uZmlnU2V0dGluZ3M6OkNvbmZpZ1NldHRpbmdzKCkN
CiAgICArCTogUVNldHRpbmdzKCJrZXJuZWwub3JnIiwgInFjb25mIikNCiAgICArew0KICAgICt9
DQogICAgKw0KICAgICsvKioNCiAgICArICogUmVhZHMgYSBsaXN0IG9mIGludGVnZXIgdmFsdWVz
IGZyb20gdGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzLg0KICAgICsgKi8NCiAgICArUUxpc3Q8aW50
PiBDb25maWdTZXR0aW5nczo6cmVhZFNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2sp
DQogICAgK3sNCiAgICArCVFMaXN0PGludD4gcmVzdWx0Ow0KICAgICsNCiAgICArCWlmIChjb250
YWlucyhrZXkpKQ0KICAgICsJew0KICAgICsJCVFTdHJpbmdMaXN0IGVudHJ5TGlzdCA9IHZhbHVl
KGtleSkudG9TdHJpbmdMaXN0KCk7DQogICAgKwkJUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0Ow0K
ICAgICsNCiAgICArCQlmb3IgKGl0ID0gZW50cnlMaXN0LmJlZ2luKCk7IGl0ICE9IGVudHJ5TGlz
dC5lbmQoKTsgKytpdCkNCiAgICArCQkJcmVzdWx0LnB1c2hfYmFjaygoKml0KS50b0ludCgpKTsN
CiAgICArDQogICAgKwkJKm9rID0gdHJ1ZTsNCiAgICArCX0NCiAgICArCWVsc2UNCiAgICArCQkq
b2sgPSBmYWxzZTsNCiAgICArDQogICAgKwlyZXR1cm4gcmVzdWx0Ow0KICAgICt9DQogICAgKw0K
ICAgICsvKioNCiAgICArICogV3JpdGVzIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVlcyB0byB0aGUg
YXBwbGljYXRpb24gc2V0dGluZ3MuDQogICAgKyAqLw0KICAgICtib29sIENvbmZpZ1NldHRpbmdz
Ojp3cml0ZVNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgY29uc3QgUUxpc3Q8aW50PiYgdmFsdWUp
DQogICAgK3sNCiAgICArCVFTdHJpbmdMaXN0IHN0cmluZ0xpc3Q7DQogICAgKwlRTGlzdDxpbnQ+
OjpDb25zdEl0ZXJhdG9yIGl0Ow0KICAgICsNCiAgICArCWZvciAoaXQgPSB2YWx1ZS5iZWdpbigp
OyBpdCAhPSB2YWx1ZS5lbmQoKTsgKytpdCkNCiAgICArCQlzdHJpbmdMaXN0LnB1c2hfYmFjayhR
U3RyaW5nOjpudW1iZXIoKml0KSk7DQogICAgKwlzZXRWYWx1ZShrZXksIHN0cmluZ0xpc3QpOw0K
ICAgICsNCiAgICArCXJldHVybiB0cnVlOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyoN
CiAgICArICogc2V0IHRoZSBuZXcgZGF0YQ0KICAgICsgKiBUT0RPIGNoZWNrIHRoZSB2YWx1ZQ0K
ICAgICsgKi8NCiAgICArdm9pZCBDb25maWdJdGVtOjpva1JlbmFtZShpbnQgY29sKQ0KICAgICt7
DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIHVwZGF0ZSB0aGUgZGlzcGxheWVkIG9m
IGEgbWVudSBlbnRyeQ0KICAgICsgKi8NCiAgICArdm9pZCBDb25maWdJdGVtOjp1cGRhdGVNZW51
KHZvaWQpDQogICAgK3sNCiAgICArCUNvbmZpZ0xpc3QqIGxpc3Q7DQogICAgKwlzdHJ1Y3Qgc3lt
Ym9sKiBzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlRU3RyaW5nIHBy
b21wdDsNCiAgICArCWludCB0eXBlOw0KICAgICsJdHJpc3RhdGUgZXhwcjsNCiAgICArDQogICAg
KwlsaXN0ID0gbGlzdFZpZXcoKTsNCiAgICArCWlmIChnb1BhcmVudCkgew0KICAgICsJCXNldFBp
eG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPm1lbnVCYWNrUGl4KTsNCiAgICArCQlwcm9tcHQgPSAi
Li4iOw0KICAgICsJCWdvdG8gc2V0X3Byb21wdDsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW0g
PSBtZW51LT5zeW07DQogICAgKwlwcm9wID0gbWVudS0+cHJvbXB0Ow0KICAgICsJcHJvbXB0ID0g
cWdldHRleHQobWVudV9nZXRfcHJvbXB0KG1lbnUpKTsNCiAgICArDQogICAgKwlpZiAocHJvcCkg
c3dpdGNoIChwcm9wLT50eXBlKSB7DQogICAgKwljYXNlIFBfTUVOVToNCiAgICArCQlpZiAobGlz
dC0+bW9kZSA9PSBzaW5nbGVNb2RlIHx8IGxpc3QtPm1vZGUgPT0gc3ltYm9sTW9kZSkgew0KICAg
ICsJCQkvKiBhIG1lbnVjb25maWcgZW50cnkgaXMgZGlzcGxheWVkIGRpZmZlcmVudGx5DQogICAg
KwkJCSAqIGRlcGVuZGluZyB3aGV0aGVyIGl0J3MgYXQgdGhlIHZpZXcgcm9vdCBvciBhIGNoaWxk
Lg0KICAgICsJCQkgKi8NCiAgICArCQkJaWYgKHN5bSAmJiBsaXN0LT5yb290RW50cnkgPT0gbWVu
dSkNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0
LT5tZW51UGl4KTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlpZiAoc3ltKQ0KICAgICsJCQkJ
YnJlYWs7DQogICAgKwkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIFFJY29uKCkpOw0KICAgICsJ
CX0NCiAgICArCQlnb3RvIHNldF9wcm9tcHQ7DQogICAgKwljYXNlIFBfQ09NTUVOVDoNCiAgICAr
CQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsNCiAgICArCQlnb3RvIHNldF9wcm9t
cHQ7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArCWlmICghc3ltKQ0K
ICAgICsJCWdvdG8gc2V0X3Byb21wdDsNCiAgICArDQogICAgKwlzZXRUZXh0KG5hbWVDb2xJZHgs
IFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3ltLT5uYW1lKSk7DQogICAgKw0KICAgICsJdHlwZSA9
IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgICsJc3dpdGNoICh0eXBlKSB7DQogICAgKwljYXNlIFNf
Qk9PTEVBTjoNCiAgICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQljaGFyIGNoOw0KICAgICsN
CiAgICArCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiBsaXN0LT5vcHRNb2RlID09IG5v
cm1hbE9wdCkgew0KICAgICsJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsNCiAg
ICArCQkJc2V0VGV4dChub0NvbElkeCwgUVN0cmluZzo6bnVsbCk7DQogICAgKwkJCXNldFRleHQo
bW9kQ29sSWR4LCBRU3RyaW5nOjpudWxsKTsNCiAgICArCQkJc2V0VGV4dCh5ZXNDb2xJZHgsIFFT
dHJpbmc6Om51bGwpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJZXhwciA9IHN5
bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArCQlzd2l0Y2ggKGV4cHIpIHsNCiAgICAr
CQljYXNlIHllczoNCiAgICArCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB0eXBl
ID09IFNfQk9PTEVBTikNCiAgICArCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPmNo
b2ljZVllc1BpeCk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJ
ZHgsIGxpc3QtPnN5bWJvbFllc1BpeCk7DQogICAgKwkJCXNldFRleHQoeWVzQ29sSWR4LCAiWSIp
Ow0KICAgICsJCQljaCA9ICdZJzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBtb2Q6DQog
ICAgKwkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbE1vZFBpeCk7DQogICAg
KwkJCXNldFRleHQobW9kQ29sSWR4LCAiTSIpOw0KICAgICsJCQljaCA9ICdNJzsNCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUo
c3ltKSAmJiB0eXBlID09IFNfQk9PTEVBTikNCiAgICArCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJ
ZHgsIGxpc3QtPmNob2ljZU5vUGl4KTsNCiAgICArCQkJZWxzZQ0KICAgICsJCQkJc2V0UGl4bWFw
KHByb21wdENvbElkeCwgbGlzdC0+c3ltYm9sTm9QaXgpOw0KICAgICsJCQlzZXRUZXh0KG5vQ29s
SWR4LCAiTiIpOw0KICAgICsJCQljaCA9ICdOJzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0K
ICAgICsJCWlmIChleHByICE9IG5vKQ0KICAgICsJCQlzZXRUZXh0KG5vQ29sSWR4LCBzeW1fdHJp
c3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbm8pID8gIl8iIDogMCk7DQogICAgKwkJaWYgKGV4cHIg
IT0gbW9kKQ0KICAgICsJCQlzZXRUZXh0KG1vZENvbElkeCwgc3ltX3RyaXN0YXRlX3dpdGhpbl9y
YW5nZShzeW0sIG1vZCkgPyAiXyIgOiAwKTsNCiAgICArCQlpZiAoZXhwciAhPSB5ZXMpDQogICAg
KwkJCXNldFRleHQoeWVzQ29sSWR4LCBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVz
KSA/ICJfIiA6IDApOw0KICAgICsNCiAgICArCQlzZXRUZXh0KGRhdGFDb2xJZHgsIFFDaGFyKGNo
KSk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJY2FzZSBTX0hFWDoN
CiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJY29uc3QgY2hhciogZGF0YTsNCiAgICArDQog
ICAgKwkJZGF0YSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7DQogICAgKw0KICAgICsJCXNl
dFRleHQoZGF0YUNvbElkeCwgZGF0YSk7DQogICAgKwkJaWYgKHR5cGUgPT0gU19TVFJJTkcpDQog
ICAgKwkJCXByb21wdCA9IFFTdHJpbmcoIiUxOiAlMiIpLmFyZyhwcm9tcHQpLmFyZyhkYXRhKTsN
CiAgICArCQllbHNlDQogICAgKwkJCXByb21wdCA9IFFTdHJpbmcoIiglMikgJTEiKS5hcmcocHJv
bXB0KS5hcmcoZGF0YSk7DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgKwlpZiAoIXN5bV9o
YXNfdmFsdWUoc3ltKSAmJiB2aXNpYmxlKQ0KICAgICsJCXByb21wdCArPSAiIChORVcpIjsNCiAg
ICArc2V0X3Byb21wdDoNCiAgICArCXNldFRleHQocHJvbXB0Q29sSWR4LCBwcm9tcHQpOw0KICAg
ICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0l0ZW06OnRlc3RVcGRhdGVNZW51KGJvb2wgdikN
CiAgICArew0KICAgICsJQ29uZmlnSXRlbSogaTsNCiAgICArDQogICAgKwl2aXNpYmxlID0gdjsN
CiAgICArCWlmICghbWVudSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJc3ltX2NhbGNf
dmFsdWUobWVudS0+c3ltKTsNCiAgICArCWlmIChtZW51LT5mbGFncyAmIE1FTlVfQ0hBTkdFRCkg
ew0KICAgICsJCS8qIHRoZSBtZW51IGVudHJ5IGNoYW5nZWQsIHNvIHVwZGF0ZSBhbGwgbGlzdCBp
dGVtcyAqLw0KICAgICsJCW1lbnUtPmZsYWdzICY9IH5NRU5VX0NIQU5HRUQ7DQogICAgKwkJZm9y
IChpID0gKENvbmZpZ0l0ZW0qKW1lbnUtPmRhdGE7IGk7IGkgPSBpLT5uZXh0SXRlbSkNCiAgICAr
CQkJaS0+dXBkYXRlTWVudSgpOw0KICAgICsJfSBlbHNlIGlmIChsaXN0VmlldygpLT51cGRhdGVB
bGwpDQogICAgKwkJdXBkYXRlTWVudSgpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyoN
CiAgICArICogY29uc3RydWN0IGEgbWVudSBlbnRyeQ0KICAgICsgKi8NCiAgICArdm9pZCBDb25m
aWdJdGVtOjppbml0KHZvaWQpDQogICAgK3sNCiAgICArCWlmIChtZW51KSB7DQogICAgKwkJQ29u
ZmlnTGlzdCogbGlzdCA9IGxpc3RWaWV3KCk7DQogICAgKwkJbmV4dEl0ZW0gPSAoQ29uZmlnSXRl
bSopbWVudS0+ZGF0YTsNCiAgICArCQltZW51LT5kYXRhID0gdGhpczsNCiAgICArDQogICAgKwkJ
aWYgKGxpc3QtPm1vZGUgIT0gZnVsbE1vZGUpDQogICAgKwkJCXNldEV4cGFuZGVkKHRydWUpOw0K
ICAgICsJCXN5bV9jYWxjX3ZhbHVlKG1lbnUtPnN5bSk7DQogICAgKwl9DQogICAgKwl1cGRhdGVN
ZW51KCk7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIGRlc3RydWN0IGEgbWVudSBl
bnRyeQ0KICAgICsgKi8NCiAgICArQ29uZmlnSXRlbTo6fkNvbmZpZ0l0ZW0odm9pZCkNCiAgICAr
ew0KICAgICsJaWYgKG1lbnUpIHsNCiAgICArCQlDb25maWdJdGVtKiogaXAgPSAoQ29uZmlnSXRl
bSoqKSZtZW51LT5kYXRhOw0KICAgICsJCWZvciAoOyAqaXA7IGlwID0gJigqaXApLT5uZXh0SXRl
bSkgew0KICAgICsJCQlpZiAoKmlwID09IHRoaXMpIHsNCiAgICArCQkJCSppcCA9IG5leHRJdGVt
Ow0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAgK30N
CiAgICArDQogICAgK0NvbmZpZ0xpbmVFZGl0OjpDb25maWdMaW5lRWRpdChDb25maWdWaWV3KiBw
YXJlbnQpDQogICAgKwk6IFBhcmVudChwYXJlbnQpDQogICAgK3sNCiAgICArCWNvbm5lY3QodGhp
cywgU0lHTkFMKGVkaXRpbmdGaW5pc2hlZCgpKSwgU0xPVChoaWRlKCkpKTsNCiAgICArfQ0KICAg
ICsNCiAgICArdm9pZCBDb25maWdMaW5lRWRpdDo6c2hvdyhDb25maWdJdGVtKiBpKQ0KICAgICt7
DQogICAgKwlpdGVtID0gaTsNCiAgICArCWlmIChzeW1fZ2V0X3N0cmluZ192YWx1ZShpdGVtLT5t
ZW51LT5zeW0pKQ0KICAgICsJCXNldFRleHQoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzeW1fZ2V0
X3N0cmluZ192YWx1ZShpdGVtLT5tZW51LT5zeW0pKSk7DQogICAgKwllbHNlDQogICAgKwkJc2V0
VGV4dChRU3RyaW5nOjpudWxsKTsNCiAgICArCVBhcmVudDo6c2hvdygpOw0KICAgICsJc2V0Rm9j
dXMoKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaW5lRWRpdDo6a2V5UHJlc3NF
dmVudChRS2V5RXZlbnQqIGUpDQogICAgK3sNCiAgICArCXN3aXRjaCAoZS0+a2V5KCkpIHsNCiAg
ICArCWNhc2UgUXQ6OktleV9Fc2NhcGU6DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFF0OjpL
ZXlfUmV0dXJuOg0KICAgICsJY2FzZSBRdDo6S2V5X0VudGVyOg0KICAgICsJCXN5bV9zZXRfc3Ry
aW5nX3ZhbHVlKGl0ZW0tPm1lbnUtPnN5bSwgdGV4dCgpLnRvTGF0aW4xKCkpOw0KICAgICsJCXBh
cmVudCgpLT51cGRhdGVMaXN0KGl0ZW0pOw0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoN
CiAgICArCQlQYXJlbnQ6OmtleVByZXNzRXZlbnQoZSk7DQogICAgKwkJcmV0dXJuOw0KICAgICsJ
fQ0KICAgICsJZS0+YWNjZXB0KCk7DQogICAgKwlwYXJlbnQoKS0+bGlzdC0+c2V0Rm9jdXMoKTsN
CiAgICArCWhpZGUoKTsNCiAgICArfQ0KICAgICsNCiAgICArQ29uZmlnTGlzdDo6Q29uZmlnTGlz
dChDb25maWdWaWV3KiBwLCBjb25zdCBjaGFyICpuYW1lKQ0KICAgICsJOiBQYXJlbnQocCksDQog
ICAgKwkgIHVwZGF0ZUFsbChmYWxzZSksDQogICAgKwkgIHN5bWJvbFllc1BpeCh4cG1fc3ltYm9s
X3llcyksIHN5bWJvbE1vZFBpeCh4cG1fc3ltYm9sX21vZCksIHN5bWJvbE5vUGl4KHhwbV9zeW1i
b2xfbm8pLA0KICAgICsJICBjaG9pY2VZZXNQaXgoeHBtX2Nob2ljZV95ZXMpLCBjaG9pY2VOb1Bp
eCh4cG1fY2hvaWNlX25vKSwNCiAgICArCSAgbWVudVBpeCh4cG1fbWVudSksIG1lbnVJbnZQaXgo
eHBtX21lbnVfaW52KSwgbWVudUJhY2tQaXgoeHBtX21lbnViYWNrKSwgdm9pZFBpeCh4cG1fdm9p
ZCksDQogICAgKwkgIHNob3dOYW1lKGZhbHNlKSwgc2hvd1JhbmdlKGZhbHNlKSwgc2hvd0RhdGEo
ZmFsc2UpLCBtb2RlKHNpbmdsZU1vZGUpLCBvcHRNb2RlKG5vcm1hbE9wdCksDQogICAgKwkgIHJv
b3RFbnRyeSgwKSwgaGVhZGVyUG9wdXAoMCkNCiAgICArew0KICAgICsJaW50IGk7DQogICAgKw0K
ICAgICsJc2V0T2JqZWN0TmFtZShuYW1lKTsNCiAgICArCXNldFNvcnRpbmdFbmFibGVkKGZhbHNl
KTsNCiAgICArCXNldFJvb3RJc0RlY29yYXRlZCh0cnVlKTsNCiAgICArDQogICAgKwlzZXRWZXJ0
aWNhbFNjcm9sbE1vZGUoU2Nyb2xsUGVyUGl4ZWwpOw0KICAgICsJc2V0SG9yaXpvbnRhbFNjcm9s
bE1vZGUoU2Nyb2xsUGVyUGl4ZWwpOw0KICAgICsNCiAgICArCXNldEhlYWRlckxhYmVscyhRU3Ry
aW5nTGlzdCgpIDw8ICJPcHRpb24iIDw8ICJOYW1lIiA8PCAiTiIgPDwgIk0iIDw8ICJZIiA8PCAi
VmFsdWUiKTsNCiAgICArDQogICAgKwljb25uZWN0KHRoaXMsIFNJR05BTChpdGVtU2VsZWN0aW9u
Q2hhbmdlZCh2b2lkKSksDQogICAgKwkJU0xPVCh1cGRhdGVTZWxlY3Rpb24odm9pZCkpKTsNCiAg
ICArDQogICAgKwlpZiAobmFtZSkgew0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3Vw
KG5hbWUpOw0KICAgICsJCXNob3dOYW1lID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd05h
bWUiLCBmYWxzZSkudG9Cb29sKCk7DQogICAgKwkJc2hvd1JhbmdlID0gY29uZmlnU2V0dGluZ3Mt
PnZhbHVlKCIvc2hvd1JhbmdlIiwgZmFsc2UpLnRvQm9vbCgpOw0KICAgICsJCXNob3dEYXRhID0g
Y29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RhdGEiLCBmYWxzZSkudG9Cb29sKCk7DQogICAg
KwkJb3B0TW9kZSA9IChlbnVtIG9wdGlvbk1vZGUpY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvb3B0
aW9uTW9kZSIsIDApLnRvSW50KCk7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7
DQogICAgKwkJY29ubmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChz
YXZlU2V0dGluZ3MoKSkpOw0KICAgICsJfQ0KICAgICsNCiAgICArCWFkZENvbHVtbihwcm9tcHRD
b2xJZHgpOw0KICAgICsNCiAgICArCXJlaW5pdCgpOw0KICAgICt9DQogICAgKw0KICAgICtib29s
IENvbmZpZ0xpc3Q6Om1lbnVTa2lwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlp
ZiAob3B0TW9kZSA9PSBub3JtYWxPcHQgJiYgbWVudV9pc192aXNpYmxlKG1lbnUpKQ0KICAgICsJ
CXJldHVybiBmYWxzZTsNCiAgICArCWlmIChvcHRNb2RlID09IHByb21wdE9wdCAmJiBtZW51X2hh
c19wcm9tcHQobWVudSkpDQogICAgKwkJcmV0dXJuIGZhbHNlOw0KICAgICsJaWYgKG9wdE1vZGUg
PT0gYWxsT3B0KQ0KICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArCXJldHVybiB0cnVlOw0KICAg
ICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OnJlaW5pdCh2b2lkKQ0KICAgICt7DQog
ICAgKwlyZW1vdmVDb2x1bW4oZGF0YUNvbElkeCk7DQogICAgKwlyZW1vdmVDb2x1bW4oeWVzQ29s
SWR4KTsNCiAgICArCXJlbW92ZUNvbHVtbihtb2RDb2xJZHgpOw0KICAgICsJcmVtb3ZlQ29sdW1u
KG5vQ29sSWR4KTsNCiAgICArCXJlbW92ZUNvbHVtbihuYW1lQ29sSWR4KTsNCiAgICArDQogICAg
KwlpZiAoc2hvd05hbWUpDQogICAgKwkJYWRkQ29sdW1uKG5hbWVDb2xJZHgpOw0KICAgICsJaWYg
KHNob3dSYW5nZSkgew0KICAgICsJCWFkZENvbHVtbihub0NvbElkeCk7DQogICAgKwkJYWRkQ29s
dW1uKG1vZENvbElkeCk7DQogICAgKwkJYWRkQ29sdW1uKHllc0NvbElkeCk7DQogICAgKwl9DQog
ICAgKwlpZiAoc2hvd0RhdGEpDQogICAgKwkJYWRkQ29sdW1uKGRhdGFDb2xJZHgpOw0KICAgICsN
CiAgICArCXVwZGF0ZUxpc3RBbGwoKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdM
aXN0OjpzYXZlU2V0dGluZ3Modm9pZCkNCiAgICArew0KICAgICsJaWYgKCFvYmplY3ROYW1lKCku
aXNFbXB0eSgpKSB7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAob2JqZWN0TmFt
ZSgpKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93TmFtZSIsIHNob3dO
YW1lKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93UmFuZ2UiLCBzaG93
UmFuZ2UpOw0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dEYXRhIiwgc2hv
d0RhdGEpOw0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL29wdGlvbk1vZGUiLCAo
aW50KW9wdE1vZGUpOw0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgICsJ
fQ0KICAgICt9DQogICAgKw0KICAgICtDb25maWdJdGVtKiBDb25maWdMaXN0OjpmaW5kQ29uZmln
SXRlbShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJQ29uZmlnSXRlbSogaXRlbSA9
IChDb25maWdJdGVtKiltZW51LT5kYXRhOw0KICAgICsNCiAgICArCWZvciAoOyBpdGVtOyBpdGVt
ID0gaXRlbS0+bmV4dEl0ZW0pIHsNCiAgICArCQlpZiAodGhpcyA9PSBpdGVtLT5saXN0Vmlldygp
KQ0KICAgICsJCQlicmVhazsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gaXRlbTsNCiAg
ICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaXN0Ojp1cGRhdGVTZWxlY3Rpb24odm9pZCkN
CiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAgKwllbnVtIHByb3BfdHlwZSB0
eXBlOw0KICAgICsNCiAgICArCWlmIChzZWxlY3RlZEl0ZW1zKCkuY291bnQoKSA9PSAwKQ0KICAg
ICsJCXJldHVybjsNCiAgICArDQogICAgKwlDb25maWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0q
KXNlbGVjdGVkSXRlbXMoKS5maXJzdCgpOw0KICAgICsJaWYgKCFpdGVtKQ0KICAgICsJCXJldHVy
bjsNCiAgICArDQogICAgKwltZW51ID0gaXRlbS0+bWVudTsNCiAgICArCWVtaXQgbWVudUNoYW5n
ZWQobWVudSk7DQogICAgKwlpZiAoIW1lbnUpDQogICAgKwkJcmV0dXJuOw0KICAgICsJdHlwZSA9
IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCWlm
IChtb2RlID09IG1lbnVNb2RlICYmIHR5cGUgPT0gUF9NRU5VKQ0KICAgICsJCWVtaXQgbWVudVNl
bGVjdGVkKG1lbnUpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0
ZUxpc3QoQ29uZmlnSXRlbSogaXRlbSkNCiAgICArew0KICAgICsJQ29uZmlnSXRlbSogbGFzdCA9
IDA7DQogICAgKw0KICAgICsJaWYgKCFyb290RW50cnkpIHsNCiAgICArCQlpZiAobW9kZSAhPSBs
aXN0TW9kZSkNCiAgICArCQkJZ290byB1cGRhdGU7DQogICAgKwkJUVRyZWVXaWRnZXRJdGVtSXRl
cmF0b3IgaXQodGhpcyk7DQogICAgKwkJQ29uZmlnSXRlbSogaXRlbTsNCiAgICArDQogICAgKwkJ
d2hpbGUgKCppdCkgew0KICAgICsJCQlpdGVtID0gKENvbmZpZ0l0ZW0qKSgqaXQpOw0KICAgICsJ
CQlpZiAoIWl0ZW0tPm1lbnUpDQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJaXRlbS0+dGVz
dFVwZGF0ZU1lbnUobWVudV9pc192aXNpYmxlKGl0ZW0tPm1lbnUpKTsNCiAgICArDQogICAgKwkJ
CSsraXQ7DQogICAgKwkJfQ0KICAgICsJCXJldHVybjsNCiAgICArCX0NCiAgICArDQogICAgKwlp
ZiAocm9vdEVudHJ5ICE9ICZyb290bWVudSAmJiAobW9kZSA9PSBzaW5nbGVNb2RlIHx8DQogICAg
KwkgICAgKG1vZGUgPT0gc3ltYm9sTW9kZSAmJiByb290RW50cnktPnBhcmVudCAhPSAmcm9vdG1l
bnUpKSkgew0KICAgICsJCWl0ZW0gPSAoQ29uZmlnSXRlbSAqKXRvcExldmVsSXRlbSgwKTsNCiAg
ICArCQlpZiAoIWl0ZW0pDQogICAgKwkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbSh0aGlzLCAwLCB0
cnVlKTsNCiAgICArCQlsYXN0ID0gaXRlbTsNCiAgICArCX0NCiAgICArCWlmICgobW9kZSA9PSBz
aW5nbGVNb2RlIHx8IChtb2RlID09IHN5bWJvbE1vZGUgJiYgIShyb290RW50cnktPmZsYWdzICYg
TUVOVV9ST09UKSkpICYmDQogICAgKwkgICAgcm9vdEVudHJ5LT5zeW0gJiYgcm9vdEVudHJ5LT5w
cm9tcHQpIHsNCiAgICArCQlpdGVtID0gbGFzdCA/IGxhc3QtPm5leHRTaWJsaW5nKCkgOiBmaXJz
dENoaWxkKCk7DQogICAgKwkJaWYgKCFpdGVtKQ0KICAgICsJCQlpdGVtID0gbmV3IENvbmZpZ0l0
ZW0odGhpcywgbGFzdCwgcm9vdEVudHJ5LCB0cnVlKTsNCiAgICArCQllbHNlDQogICAgKwkJCWl0
ZW0tPnRlc3RVcGRhdGVNZW51KHRydWUpOw0KICAgICsNCiAgICArCQl1cGRhdGVNZW51TGlzdChp
dGVtLCByb290RW50cnkpOw0KICAgICsJCXVwZGF0ZSgpOw0KICAgICsJCXJlc2l6ZUNvbHVtblRv
Q29udGVudHMoMCk7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICt1cGRhdGU6DQogICAg
Kwl1cGRhdGVNZW51TGlzdCh0aGlzLCByb290RW50cnkpOw0KICAgICsJdXBkYXRlKCk7DQogICAg
KwlyZXNpemVDb2x1bW5Ub0NvbnRlbnRzKDApOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENv
bmZpZ0xpc3Q6OnNldFZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0sIHRyaXN0YXRlIHZhbCkNCiAgICAr
ew0KICAgICsJc3RydWN0IHN5bWJvbCogc3ltOw0KICAgICsJaW50IHR5cGU7DQogICAgKwl0cmlz
dGF0ZSBvbGR2YWw7DQogICAgKw0KICAgICsJc3ltID0gaXRlbS0+bWVudSA/IGl0ZW0tPm1lbnUt
PnN5bSA6IDA7DQogICAgKwlpZiAoIXN5bSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJ
dHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgICsJc3dpdGNoICh0eXBlKSB7DQogICAgKwlj
YXNlIFNfQk9PTEVBTjoNCiAgICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQlvbGR2YWwgPSBz
eW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKw0KICAgICsJCWlmICghc3ltX3NldF90
cmlzdGF0ZV92YWx1ZShzeW0sIHZhbCkpDQogICAgKwkJCXJldHVybjsNCiAgICArCQlpZiAob2xk
dmFsID09IG5vICYmIGl0ZW0tPm1lbnUtPmxpc3QpDQogICAgKwkJCWl0ZW0tPnNldEV4cGFuZGVk
KHRydWUpOw0KICAgICsJCXBhcmVudCgpLT51cGRhdGVMaXN0KGl0ZW0pOw0KICAgICsJCWJyZWFr
Ow0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OmNoYW5nZVZh
bHVlKENvbmZpZ0l0ZW0qIGl0ZW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wqIHN5bTsN
CiAgICArCXN0cnVjdCBtZW51KiBtZW51Ow0KICAgICsJaW50IHR5cGUsIG9sZGV4cHIsIG5ld2V4
cHI7DQogICAgKw0KICAgICsJbWVudSA9IGl0ZW0tPm1lbnU7DQogICAgKwlpZiAoIW1lbnUpDQog
ICAgKwkJcmV0dXJuOw0KICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsJaWYgKCFzeW0pIHsN
CiAgICArCQlpZiAoaXRlbS0+bWVudS0+bGlzdCkNCiAgICArCQkJaXRlbS0+c2V0RXhwYW5kZWQo
IWl0ZW0tPmlzRXhwYW5kZWQoKSk7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsNCiAg
ICArCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsNCiAgICArCXN3aXRjaCAodHlwZSkgew0KICAg
ICsJY2FzZSBTX0JPT0xFQU46DQogICAgKwljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJb2xkZXhw
ciA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArCQluZXdleHByID0gc3ltX3Rv
Z2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgICsJCWlmIChpdGVtLT5tZW51LT5saXN0KSB7
DQogICAgKwkJCWlmIChvbGRleHByID09IG5ld2V4cHIpDQogICAgKwkJCQlpdGVtLT5zZXRFeHBh
bmRlZCghaXRlbS0+aXNFeHBhbmRlZCgpKTsNCiAgICArCQkJZWxzZSBpZiAob2xkZXhwciA9PSBu
bykNCiAgICArCQkJCWl0ZW0tPnNldEV4cGFuZGVkKHRydWUpOw0KICAgICsJCX0NCiAgICArCQlp
ZiAob2xkZXhwciAhPSBuZXdleHByKQ0KICAgICsJCQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVt
KTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgU19JTlQ6DQogICAgKwljYXNlIFNfSEVYOg0K
ICAgICsJY2FzZSBTX1NUUklORzoNCiAgICArCQlwYXJlbnQoKS0+bGluZUVkaXQtPnNob3coaXRl
bSk7DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29u
ZmlnTGlzdDo6c2V0Um9vdE1lbnUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCWVu
dW0gcHJvcF90eXBlIHR5cGU7DQogICAgKw0KICAgICsJaWYgKHJvb3RFbnRyeSA9PSBtZW51KQ0K
ICAgICsJCXJldHVybjsNCiAgICArCXR5cGUgPSBtZW51ICYmIG1lbnUtPnByb21wdCA/IG1lbnUt
PnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCWlmICh0eXBlICE9IFBfTUVOVSkNCiAg
ICArCQlyZXR1cm47DQogICAgKwl1cGRhdGVNZW51TGlzdCh0aGlzLCAwKTsNCiAgICArCXJvb3RF
bnRyeSA9IG1lbnU7DQogICAgKwl1cGRhdGVMaXN0QWxsKCk7DQogICAgKwlpZiAoY3VycmVudEl0
ZW0oKSkgew0KICAgICsJCWN1cnJlbnRJdGVtKCktPnNldFNlbGVjdGVkKGhhc0ZvY3VzKCkpOw0K
ICAgICsJCXNjcm9sbFRvSXRlbShjdXJyZW50SXRlbSgpKTsNCiAgICArCX0NCiAgICArfQ0KICAg
ICsNCiAgICArdm9pZCBDb25maWdMaXN0OjpzZXRQYXJlbnRNZW51KHZvaWQpDQogICAgK3sNCiAg
ICArCUNvbmZpZ0l0ZW0qIGl0ZW07DQogICAgKwlzdHJ1Y3QgbWVudSAqb2xkcm9vdDsNCiAgICAr
DQogICAgKwlvbGRyb290ID0gcm9vdEVudHJ5Ow0KICAgICsJaWYgKHJvb3RFbnRyeSA9PSAmcm9v
dG1lbnUpDQogICAgKwkJcmV0dXJuOw0KICAgICsJc2V0Um9vdE1lbnUobWVudV9nZXRfcGFyZW50
X21lbnUocm9vdEVudHJ5LT5wYXJlbnQpKTsNCiAgICArDQogICAgKwlRVHJlZVdpZGdldEl0ZW1J
dGVyYXRvciBpdCh0aGlzKTsNCiAgICArCXdoaWxlICgqaXQpIHsNCiAgICArCQlpdGVtID0gKENv
bmZpZ0l0ZW0gKikoKml0KTsNCiAgICArCQlpZiAoaXRlbS0+bWVudSA9PSBvbGRyb290KSB7DQog
ICAgKwkJCXNldEN1cnJlbnRJdGVtKGl0ZW0pOw0KICAgICsJCQlzY3JvbGxUb0l0ZW0oaXRlbSk7
DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJKytpdDsNCiAgICArCX0N
CiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4g
b2YgYSBtZW51IGVudHJ5DQogICAgKyAqICAgcmVtb3Zlcy9hZGRzIHRoZSBlbnRyaWVzIGZyb20g
dGhlIHBhcmVudCB3aWRnZXQgYXMgbmVjZXNzYXJ5DQogICAgKyAqDQogICAgKyAqIHBhcmVudDog
ZWl0aGVyIHRoZSBtZW51IGxpc3Qgd2lkZ2V0IG9yIGEgbWVudSBlbnRyeSB3aWRnZXQNCiAgICAr
ICogbWVudTogZW50cnkgdG8gYmUgdXBkYXRlZA0KICAgICsgKi8NCiAgICArdm9pZCBDb25maWdM
aXN0Ojp1cGRhdGVNZW51TGlzdChDb25maWdJdGVtICpwYXJlbnQsIHN0cnVjdCBtZW51KiBtZW51
KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgbWVudSogY2hpbGQ7DQogICAgKwlDb25maWdJdGVtKiBp
dGVtOw0KICAgICsJQ29uZmlnSXRlbSogbGFzdDsNCiAgICArCWJvb2wgdmlzaWJsZTsNCiAgICAr
CWVudW0gcHJvcF90eXBlIHR5cGU7DQogICAgKw0KICAgICsJaWYgKCFtZW51KSB7DQogICAgKwkJ
d2hpbGUgKHBhcmVudC0+Y2hpbGRDb3VudCgpID4gMCkNCiAgICArCQl7DQogICAgKwkJCWRlbGV0
ZSBwYXJlbnQtPnRha2VDaGlsZCgwKTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCXJldHVybjsN
CiAgICArCX0NCiAgICArDQogICAgKwlsYXN0ID0gcGFyZW50LT5maXJzdENoaWxkKCk7DQogICAg
KwlpZiAobGFzdCAmJiAhbGFzdC0+Z29QYXJlbnQpDQogICAgKwkJbGFzdCA9IDA7DQogICAgKwlm
b3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAg
ICArCQlpdGVtID0gbGFzdCA/IGxhc3QtPm5leHRTaWJsaW5nKCkgOiBwYXJlbnQtPmZpcnN0Q2hp
bGQoKTsNCiAgICArCQl0eXBlID0gY2hpbGQtPnByb21wdCA/IGNoaWxkLT5wcm9tcHQtPnR5cGUg
OiBQX1VOS05PV047DQogICAgKw0KICAgICsJCXN3aXRjaCAobW9kZSkgew0KICAgICsJCWNhc2Ug
bWVudU1vZGU6DQogICAgKwkJCWlmICghKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkpDQogICAg
KwkJCQlnb3RvIGhpZGU7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2Ugc3ltYm9sTW9kZToN
CiAgICArCQkJaWYgKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkNCiAgICArCQkJCWdvdG8gaGlk
ZTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJYnJlYWs7DQogICAg
KwkJfQ0KICAgICsNCiAgICArCQl2aXNpYmxlID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsNCiAg
ICArCQlpZiAoIW1lbnVTa2lwKGNoaWxkKSkgew0KICAgICsJCQlpZiAoIWNoaWxkLT5zeW0gJiYg
IWNoaWxkLT5saXN0ICYmICFjaGlsZC0+cHJvbXB0KQ0KICAgICsJCQkJY29udGludWU7DQogICAg
KwkJCWlmICghaXRlbSB8fCBpdGVtLT5tZW51ICE9IGNoaWxkKQ0KICAgICsJCQkJaXRlbSA9IG5l
dyBDb25maWdJdGVtKHBhcmVudCwgbGFzdCwgY2hpbGQsIHZpc2libGUpOw0KICAgICsJCQllbHNl
DQogICAgKwkJCQlpdGVtLT50ZXN0VXBkYXRlTWVudSh2aXNpYmxlKTsNCiAgICArDQogICAgKwkJ
CWlmIChtb2RlID09IGZ1bGxNb2RlIHx8IG1vZGUgPT0gbWVudU1vZGUgfHwgdHlwZSAhPSBQX01F
TlUpDQogICAgKwkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCBjaGlsZCk7DQogICAgKwkJCWVsc2UN
CiAgICArCQkJCXVwZGF0ZU1lbnVMaXN0KGl0ZW0sIDApOw0KICAgICsJCQlsYXN0ID0gaXRlbTsN
CiAgICArCQkJY29udGludWU7DQogICAgKwkJfQ0KICAgICsJaGlkZToNCiAgICArCQlpZiAoaXRl
bSAmJiBpdGVtLT5tZW51ID09IGNoaWxkKSB7DQogICAgKwkJCWxhc3QgPSBwYXJlbnQtPmZpcnN0
Q2hpbGQoKTsNCiAgICArCQkJaWYgKGxhc3QgPT0gaXRlbSkNCiAgICArCQkJCWxhc3QgPSAwOw0K
ICAgICsJCQllbHNlIHdoaWxlIChsYXN0LT5uZXh0U2libGluZygpICE9IGl0ZW0pDQogICAgKwkJ
CQlsYXN0ID0gbGFzdC0+bmV4dFNpYmxpbmcoKTsNCiAgICArCQkJZGVsZXRlIGl0ZW07DQogICAg
KwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0
ZU1lbnVMaXN0KENvbmZpZ0xpc3QgKnBhcmVudCwgc3RydWN0IG1lbnUqIG1lbnUpDQogICAgK3sN
CiAgICArCXN0cnVjdCBtZW51KiBjaGlsZDsNCiAgICArCUNvbmZpZ0l0ZW0qIGl0ZW07DQogICAg
KwlDb25maWdJdGVtKiBsYXN0Ow0KICAgICsJYm9vbCB2aXNpYmxlOw0KICAgICsJZW51bSBwcm9w
X3R5cGUgdHlwZTsNCiAgICArDQogICAgKwlpZiAoIW1lbnUpIHsNCiAgICArCQl3aGlsZSAocGFy
ZW50LT50b3BMZXZlbEl0ZW1Db3VudCgpID4gMCkNCiAgICArCQl7DQogICAgKwkJCWRlbGV0ZSBw
YXJlbnQtPnRha2VUb3BMZXZlbEl0ZW0oMCk7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlyZXR1
cm47DQogICAgKwl9DQogICAgKw0KICAgICsJbGFzdCA9IChDb25maWdJdGVtKilwYXJlbnQtPnRv
cExldmVsSXRlbSgwKTsNCiAgICArCWlmIChsYXN0ICYmICFsYXN0LT5nb1BhcmVudCkNCiAgICAr
CQlsYXN0ID0gMDsNCiAgICArCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dCkgew0KICAgICsJCWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmco
KSA6IChDb25maWdJdGVtKilwYXJlbnQtPnRvcExldmVsSXRlbSgwKTsNCiAgICArCQl0eXBlID0g
Y2hpbGQtPnByb21wdCA/IGNoaWxkLT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgKw0K
ICAgICsJCXN3aXRjaCAobW9kZSkgew0KICAgICsJCWNhc2UgbWVudU1vZGU6DQogICAgKwkJCWlm
ICghKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkpDQogICAgKwkJCQlnb3RvIGhpZGU7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWNhc2Ugc3ltYm9sTW9kZToNCiAgICArCQkJaWYgKGNoaWxkLT5m
bGFncyAmIE1FTlVfUk9PVCkNCiAgICArCQkJCWdvdG8gaGlkZTsNCiAgICArCQkJYnJlYWs7DQog
ICAgKwkJZGVmYXVsdDoNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQl2
aXNpYmxlID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsNCiAgICArCQlpZiAoIW1lbnVTa2lwKGNo
aWxkKSkgew0KICAgICsJCQlpZiAoIWNoaWxkLT5zeW0gJiYgIWNoaWxkLT5saXN0ICYmICFjaGls
ZC0+cHJvbXB0KQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWlmICghaXRlbSB8fCBpdGVt
LT5tZW51ICE9IGNoaWxkKQ0KICAgICsJCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHBhcmVudCwg
bGFzdCwgY2hpbGQsIHZpc2libGUpOw0KICAgICsJCQllbHNlDQogICAgKwkJCQlpdGVtLT50ZXN0
VXBkYXRlTWVudSh2aXNpYmxlKTsNCiAgICArDQogICAgKwkJCWlmIChtb2RlID09IGZ1bGxNb2Rl
IHx8IG1vZGUgPT0gbWVudU1vZGUgfHwgdHlwZSAhPSBQX01FTlUpDQogICAgKwkJCQl1cGRhdGVN
ZW51TGlzdChpdGVtLCBjaGlsZCk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCXVwZGF0ZU1lbnVM
aXN0KGl0ZW0sIDApOw0KICAgICsJCQlsYXN0ID0gaXRlbTsNCiAgICArCQkJY29udGludWU7DQog
ICAgKwkJfQ0KICAgICsJaGlkZToNCiAgICArCQlpZiAoaXRlbSAmJiBpdGVtLT5tZW51ID09IGNo
aWxkKSB7DQogICAgKwkJCWxhc3QgPSAoQ29uZmlnSXRlbSopcGFyZW50LT50b3BMZXZlbEl0ZW0o
MCk7DQogICAgKwkJCWlmIChsYXN0ID09IGl0ZW0pDQogICAgKwkJCQlsYXN0ID0gMDsNCiAgICAr
CQkJZWxzZSB3aGlsZSAobGFzdC0+bmV4dFNpYmxpbmcoKSAhPSBpdGVtKQ0KICAgICsJCQkJbGFz
dCA9IGxhc3QtPm5leHRTaWJsaW5nKCk7DQogICAgKwkJCWRlbGV0ZSBpdGVtOw0KICAgICsJCX0N
CiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaXN0OjprZXlQcmVzc0V2
ZW50KFFLZXlFdmVudCogZXYpDQogICAgK3sNCiAgICArCVFUcmVlV2lkZ2V0SXRlbSogaSA9IGN1
cnJlbnRJdGVtKCk7DQogICAgKwlDb25maWdJdGVtKiBpdGVtOw0KICAgICsJc3RydWN0IG1lbnUg
Km1lbnU7DQogICAgKwllbnVtIHByb3BfdHlwZSB0eXBlOw0KICAgICsNCiAgICArCWlmIChldi0+
a2V5KCkgPT0gUXQ6OktleV9Fc2NhcGUgJiYgbW9kZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IGxp
c3RNb2RlKSB7DQogICAgKwkJZW1pdCBwYXJlbnRTZWxlY3RlZCgpOw0KICAgICsJCWV2LT5hY2Nl
cHQoKTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKCFpKSB7DQog
ICAgKwkJUGFyZW50OjprZXlQcmVzc0V2ZW50KGV2KTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9
DQogICAgKwlpdGVtID0gKENvbmZpZ0l0ZW0qKWk7DQogICAgKw0KICAgICsJc3dpdGNoIChldi0+
a2V5KCkpIHsNCiAgICArCWNhc2UgUXQ6OktleV9SZXR1cm46DQogICAgKwljYXNlIFF0OjpLZXlf
RW50ZXI6DQogICAgKwkJaWYgKGl0ZW0tPmdvUGFyZW50KSB7DQogICAgKwkJCWVtaXQgcGFyZW50
U2VsZWN0ZWQoKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCW1lbnUgPSBpdGVt
LT5tZW51Ow0KICAgICsJCWlmICghbWVudSkNCiAgICArCQkJYnJlYWs7DQogICAgKwkJdHlwZSA9
IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCQlp
ZiAodHlwZSA9PSBQX01FTlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYNCiAgICArCQkgICAgbW9k
ZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IG1lbnVNb2RlKSB7DQogICAgKwkJCWVtaXQgbWVudVNl
bGVjdGVkKG1lbnUpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwljYXNlIFF0OjpL
ZXlfU3BhY2U6DQogICAgKwkJY2hhbmdlVmFsdWUoaXRlbSk7DQogICAgKwkJYnJlYWs7DQogICAg
KwljYXNlIFF0OjpLZXlfTjoNCiAgICArCQlzZXRWYWx1ZShpdGVtLCBubyk7DQogICAgKwkJYnJl
YWs7DQogICAgKwljYXNlIFF0OjpLZXlfTToNCiAgICArCQlzZXRWYWx1ZShpdGVtLCBtb2QpOw0K
ICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBRdDo6S2V5X1k6DQogICAgKwkJc2V0VmFsdWUoaXRl
bSwgeWVzKTsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJUGFyZW50Ojpr
ZXlQcmVzc0V2ZW50KGV2KTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKwlldi0+YWNj
ZXB0KCk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VQcmVzc0V2
ZW50KFFNb3VzZUV2ZW50KiBlKQ0KICAgICt7DQogICAgKwkvL1FQb2ludCBwKGNvbnRlbnRzVG9W
aWV3cG9ydChlLT5wb3MoKSkpOw0KICAgICsJLy9wcmludGYoImNvbnRlbnRzTW91c2VQcmVzc0V2
ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsNCiAgICArCVBhcmVudDo6bW91c2VQcmVzc0V2
ZW50KGUpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlUmVsZWFz
ZUV2ZW50KFFNb3VzZUV2ZW50KiBlKQ0KICAgICt7DQogICAgKwlRUG9pbnQgcCA9IGUtPnBvcygp
Ow0KICAgICsJQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7DQogICAg
KwlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICArCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAgICsJ
UUljb24gaWNvbjsNCiAgICArCWludCBpZHgsIHg7DQogICAgKw0KICAgICsJaWYgKCFpdGVtKQ0K
ICAgICsJCWdvdG8gc2tpcDsNCiAgICArDQogICAgKwltZW51ID0gaXRlbS0+bWVudTsNCiAgICAr
CXggPSBoZWFkZXIoKS0+b2Zmc2V0KCkgKyBwLngoKTsNCiAgICArCWlkeCA9IGhlYWRlcigpLT5s
b2dpY2FsSW5kZXhBdCh4KTsNCiAgICArCXN3aXRjaCAoaWR4KSB7DQogICAgKwljYXNlIHByb21w
dENvbElkeDoNCiAgICArCQlpY29uID0gaXRlbS0+cGl4bWFwKHByb21wdENvbElkeCk7DQogICAg
KwkJaWYgKCFpY29uLmlzTnVsbCgpKSB7DQogICAgKwkJCWludCBvZmYgPSBoZWFkZXIoKS0+c2Vj
dGlvblBvc2l0aW9uKDApICsgdmlzdWFsUmVjdChpbmRleEF0KHApKS54KCkgKyA0OyAvLyA0IGlz
IEhhcmRjb2RlZCBpbWFnZSBvZmZzZXQuIFRoZXJlIG1pZ2h0IGJlIGEgd2F5IHRvIGRvIGl0IHBy
b3Blcmx5Lg0KICAgICsJCQlpZiAoeCA+PSBvZmYgJiYgeCA8IG9mZiArIGljb24uYXZhaWxhYmxl
U2l6ZXMoKS5maXJzdCgpLndpZHRoKCkpIHsNCiAgICArCQkJCWlmIChpdGVtLT5nb1BhcmVudCkg
ew0KICAgICsJCQkJCWVtaXQgcGFyZW50U2VsZWN0ZWQoKTsNCiAgICArCQkJCQlicmVhazsNCiAg
ICArCQkJCX0gZWxzZSBpZiAoIW1lbnUpDQogICAgKwkJCQkJYnJlYWs7DQogICAgKwkJCQlwdHlw
ZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICAr
CQkJCWlmIChwdHlwZSA9PSBQX01FTlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYNCiAgICArCQkJ
CSAgICBtb2RlICE9IGZ1bGxNb2RlICYmIG1vZGUgIT0gbWVudU1vZGUpDQogICAgKwkJCQkJZW1p
dCBtZW51U2VsZWN0ZWQobWVudSk7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJY2hhbmdlVmFs
dWUoaXRlbSk7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNl
IG5vQ29sSWR4Og0KICAgICsJCXNldFZhbHVlKGl0ZW0sIG5vKTsNCiAgICArCQlicmVhazsNCiAg
ICArCWNhc2UgbW9kQ29sSWR4Og0KICAgICsJCXNldFZhbHVlKGl0ZW0sIG1vZCk7DQogICAgKwkJ
YnJlYWs7DQogICAgKwljYXNlIHllc0NvbElkeDoNCiAgICArCQlzZXRWYWx1ZShpdGVtLCB5ZXMp
Ow0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBkYXRhQ29sSWR4Og0KICAgICsJCWNoYW5nZVZh
bHVlKGl0ZW0pOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArc2tpcDoNCiAg
ICArCS8vcHJpbnRmKCJjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50OiAlZCwlZFxuIiwgcC54KCks
IHAueSgpKTsNCiAgICArCVBhcmVudDo6bW91c2VSZWxlYXNlRXZlbnQoZSk7DQogICAgK30NCiAg
ICArDQogICAgK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGUp
DQogICAgK3sNCiAgICArCS8vUVBvaW50IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBvcygpKSk7
DQogICAgKwkvL3ByaW50ZigiY29udGVudHNNb3VzZU1vdmVFdmVudDogJWQsJWRcbiIsIHAueCgp
LCBwLnkoKSk7DQogICAgKwlQYXJlbnQ6Om1vdXNlTW92ZUV2ZW50KGUpOw0KICAgICt9DQogICAg
Kw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVu
dCogZSkNCiAgICArew0KICAgICsJUVBvaW50IHAgPSBlLT5wb3MoKTsgLy8gVE9ETzogQ2hlY2sg
aWYgdGhpcyB3b3Jrcyh3YXMgY29udGVudHNUb1ZpZXdwb3J0KS4NCiAgICArCUNvbmZpZ0l0ZW0q
IGl0ZW0gPSAoQ29uZmlnSXRlbSopaXRlbUF0KHApOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7
DQogICAgKwllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICArDQogICAgKwlpZiAoIWl0ZW0pDQog
ICAgKwkJZ290byBza2lwOw0KICAgICsJaWYgKGl0ZW0tPmdvUGFyZW50KSB7DQogICAgKwkJZW1p
dCBwYXJlbnRTZWxlY3RlZCgpOw0KICAgICsJCWdvdG8gc2tpcDsNCiAgICArCX0NCiAgICArCW1l
bnUgPSBpdGVtLT5tZW51Ow0KICAgICsJaWYgKCFtZW51KQ0KICAgICsJCWdvdG8gc2tpcDsNCiAg
ICArCXB0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dO
Ow0KICAgICsJaWYgKHB0eXBlID09IFBfTUVOVSAmJiAobW9kZSA9PSBzaW5nbGVNb2RlIHx8IG1v
ZGUgPT0gc3ltYm9sTW9kZSkpDQogICAgKwkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7DQogICAg
KwllbHNlIGlmIChtZW51LT5zeW0pDQogICAgKwkJY2hhbmdlVmFsdWUoaXRlbSk7DQogICAgKw0K
ICAgICtza2lwOg0KICAgICsJLy9wcmludGYoImNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50
OiAlZCwlZFxuIiwgcC54KCksIHAueSgpKTsNCiAgICArCVBhcmVudDo6bW91c2VEb3VibGVDbGlj
a0V2ZW50KGUpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OmZvY3VzSW5F
dmVudChRRm9jdXNFdmVudCAqZSkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKm1lbnUgPSBO
VUxMOw0KICAgICsNCiAgICArCVBhcmVudDo6Zm9jdXNJbkV2ZW50KGUpOw0KICAgICsNCiAgICAr
CUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSAqKWN1cnJlbnRJdGVtKCk7DQogICAgKwlp
ZiAoaXRlbSkgew0KICAgICsJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOw0KICAgICsJCW1lbnUg
PSBpdGVtLT5tZW51Ow0KICAgICsJfQ0KICAgICsJZW1pdCBnb3RGb2N1cyhtZW51KTsNCiAgICAr
fQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaXN0Ojpjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0
TWVudUV2ZW50ICplKQ0KICAgICt7DQogICAgKwlpZiAoZS0+eSgpIDw9IGhlYWRlcigpLT5nZW9t
ZXRyeSgpLmJvdHRvbSgpKSB7DQogICAgKwkJaWYgKCFoZWFkZXJQb3B1cCkgew0KICAgICsJCQlR
QWN0aW9uICphY3Rpb247DQogICAgKw0KICAgICsJCQloZWFkZXJQb3B1cCA9IG5ldyBRTWVudSh0
aGlzKTsNCiAgICArCQkJYWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgTmFtZSIsIHRoaXMpOw0K
ICAgICsJCQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJCQkgIGNvbm5lY3Qo
YWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksDQogICAgKwkJCQkgIHBhcmVudCgpLCBTTE9U
KHNldFNob3dOYW1lKGJvb2wpKSk7DQogICAgKwkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFM
KHNob3dOYW1lQ2hhbmdlZChib29sKSksDQogICAgKwkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihi
b29sKSkpOw0KICAgICsJCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93TmFtZSk7DQogICAgKwkJ
CSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOw0KICAgICsJCQlhY3Rpb24gPSBuZXcg
UUFjdGlvbigiU2hvdyBSYW5nZSIsIHRoaXMpOw0KICAgICsJCQkgIGFjdGlvbi0+c2V0Q2hlY2th
YmxlKHRydWUpOw0KICAgICsJCQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29s
KSksDQogICAgKwkJCQkgIHBhcmVudCgpLCBTTE9UKHNldFNob3dSYW5nZShib29sKSkpOw0KICAg
ICsJCQkgIGNvbm5lY3QocGFyZW50KCksIFNJR05BTChzaG93UmFuZ2VDaGFuZ2VkKGJvb2wpKSwN
CiAgICArCQkJCSAgYWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7DQogICAgKwkJCSAgYWN0aW9u
LT5zZXRDaGVja2VkKHNob3dSYW5nZSk7DQogICAgKwkJCSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlv
bihhY3Rpb24pOw0KICAgICsJCQlhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBEYXRhIiwgdGhp
cyk7DQogICAgKwkJCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7DQogICAgKwkJCSAgY29u
bmVjdChhY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwNCiAgICArCQkJCSAgcGFyZW50KCks
IFNMT1Qoc2V0U2hvd0RhdGEoYm9vbCkpKTsNCiAgICArCQkJICBjb25uZWN0KHBhcmVudCgpLCBT
SUdOQUwoc2hvd0RhdGFDaGFuZ2VkKGJvb2wpKSwNCiAgICArCQkJCSAgYWN0aW9uLCBTTE9UKHNl
dE9uKGJvb2wpKSk7DQogICAgKwkJCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dEYXRhKTsNCiAg
ICArCQkJICBoZWFkZXJQb3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7DQogICAgKwkJfQ0KICAgICsJ
CWhlYWRlclBvcHVwLT5leGVjKGUtPmdsb2JhbFBvcygpKTsNCiAgICArCQllLT5hY2NlcHQoKTsN
CiAgICArCX0gZWxzZQ0KICAgICsJCWUtPmlnbm9yZSgpOw0KICAgICt9DQogICAgKw0KICAgICtD
b25maWdWaWV3KkNvbmZpZ1ZpZXc6OnZpZXdMaXN0Ow0KICAgICtRQWN0aW9uICpDb25maWdWaWV3
OjpzaG93Tm9ybWFsQWN0aW9uOw0KICAgICtRQWN0aW9uICpDb25maWdWaWV3OjpzaG93QWxsQWN0
aW9uOw0KICAgICtRQWN0aW9uICpDb25maWdWaWV3OjpzaG93UHJvbXB0QWN0aW9uOw0KICAgICsN
CiAgICArQ29uZmlnVmlldzo6Q29uZmlnVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIg
Km5hbWUpDQogICAgKwk6IFBhcmVudChwYXJlbnQpDQogICAgK3sNCiAgICArCXNldE9iamVjdE5h
bWUobmFtZSk7DQogICAgKwlRVkJveExheW91dCAqdmVydGljYWxMYXlvdXQgPSBuZXcgUVZCb3hM
YXlvdXQodGhpcyk7DQogICAgKwl2ZXJ0aWNhbExheW91dC0+c2V0Q29udGVudHNNYXJnaW5zKDAs
IDAsIDAsIDApOw0KICAgICsNCiAgICArCWxpc3QgPSBuZXcgQ29uZmlnTGlzdCh0aGlzKTsNCiAg
ICArCXZlcnRpY2FsTGF5b3V0LT5hZGRXaWRnZXQobGlzdCk7DQogICAgKwlsaW5lRWRpdCA9IG5l
dyBDb25maWdMaW5lRWRpdCh0aGlzKTsNCiAgICArCWxpbmVFZGl0LT5oaWRlKCk7DQogICAgKwl2
ZXJ0aWNhbExheW91dC0+YWRkV2lkZ2V0KGxpbmVFZGl0KTsNCiAgICArDQogICAgKwl0aGlzLT5u
ZXh0VmlldyA9IHZpZXdMaXN0Ow0KICAgICsJdmlld0xpc3QgPSB0aGlzOw0KICAgICt9DQogICAg
Kw0KICAgICtDb25maWdWaWV3Ojp+Q29uZmlnVmlldyh2b2lkKQ0KICAgICt7DQogICAgKwlDb25m
aWdWaWV3KiogdnA7DQogICAgKw0KICAgICsJZm9yICh2cCA9ICZ2aWV3TGlzdDsgKnZwOyB2cCA9
ICYoKnZwKS0+bmV4dFZpZXcpIHsNCiAgICArCQlpZiAoKnZwID09IHRoaXMpIHsNCiAgICArCQkJ
KnZwID0gbmV4dFZpZXc7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCX0NCiAgICAr
fQ0KICAgICsNCiAgICArdm9pZCBDb25maWdWaWV3OjpzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKmFj
dCkNCiAgICArew0KICAgICsJaWYgKGFjdCA9PSBzaG93Tm9ybWFsQWN0aW9uKQ0KICAgICsJCWxp
c3QtPm9wdE1vZGUgPSBub3JtYWxPcHQ7DQogICAgKwllbHNlIGlmIChhY3QgPT0gc2hvd0FsbEFj
dGlvbikNCiAgICArCQlsaXN0LT5vcHRNb2RlID0gYWxsT3B0Ow0KICAgICsJZWxzZQ0KICAgICsJ
CWxpc3QtPm9wdE1vZGUgPSBwcm9tcHRPcHQ7DQogICAgKw0KICAgICsJbGlzdC0+dXBkYXRlTGlz
dEFsbCgpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dOYW1l
KGJvb2wgYikNCiAgICArew0KICAgICsJaWYgKGxpc3QtPnNob3dOYW1lICE9IGIpIHsNCiAgICAr
CQlsaXN0LT5zaG93TmFtZSA9IGI7DQogICAgKwkJbGlzdC0+cmVpbml0KCk7DQogICAgKwkJZW1p
dCBzaG93TmFtZUNoYW5nZWQoYik7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQg
Q29uZmlnVmlldzo6c2V0U2hvd1JhbmdlKGJvb2wgYikNCiAgICArew0KICAgICsJaWYgKGxpc3Qt
PnNob3dSYW5nZSAhPSBiKSB7DQogICAgKwkJbGlzdC0+c2hvd1JhbmdlID0gYjsNCiAgICArCQls
aXN0LT5yZWluaXQoKTsNCiAgICArCQllbWl0IHNob3dSYW5nZUNoYW5nZWQoYik7DQogICAgKwl9
DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnVmlldzo6c2V0U2hvd0RhdGEoYm9vbCBi
KQ0KICAgICt7DQogICAgKwlpZiAobGlzdC0+c2hvd0RhdGEgIT0gYikgew0KICAgICsJCWxpc3Qt
PnNob3dEYXRhID0gYjsNCiAgICArCQlsaXN0LT5yZWluaXQoKTsNCiAgICArCQllbWl0IHNob3dE
YXRhQ2hhbmdlZChiKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdM
aXN0OjpzZXRBbGxPcGVuKGJvb2wgb3BlbikNCiAgICArew0KICAgICsJUVRyZWVXaWRnZXRJdGVt
SXRlcmF0b3IgaXQodGhpcyk7DQogICAgKw0KICAgICsJd2hpbGUgKCppdCkgew0KICAgICsJCSgq
aXQpLT5zZXRFeHBhbmRlZChvcGVuKTsNCiAgICArDQogICAgKwkJKytpdDsNCiAgICArCX0NCiAg
ICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0KENvbmZpZ0l0ZW0q
IGl0ZW0pDQogICAgK3sNCiAgICArCUNvbmZpZ1ZpZXcqIHY7DQogICAgKw0KICAgICsJZm9yICh2
ID0gdmlld0xpc3Q7IHY7IHYgPSB2LT5uZXh0VmlldykNCiAgICArCQl2LT5saXN0LT51cGRhdGVM
aXN0KGl0ZW0pOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ1ZpZXc6OnVwZGF0ZUxp
c3RBbGwodm9pZCkNCiAgICArew0KICAgICsJQ29uZmlnVmlldyogdjsNCiAgICArDQogICAgKwlm
b3IgKHYgPSB2aWV3TGlzdDsgdjsgdiA9IHYtPm5leHRWaWV3KQ0KICAgICsJCXYtPmxpc3QtPnVw
ZGF0ZUxpc3RBbGwoKTsNCiAgICArfQ0KICAgICsNCiAgICArQ29uZmlnSW5mb1ZpZXc6OkNvbmZp
Z0luZm9WaWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkNCiAgICArCTogUGFy
ZW50KHBhcmVudCksIHN5bSgwKSwgX21lbnUoMCkNCiAgICArew0KICAgICsJc2V0T2JqZWN0TmFt
ZShuYW1lKTsNCiAgICArDQogICAgKw0KICAgICsJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0eSgp
KSB7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAob2JqZWN0TmFtZSgpKTsNCiAg
ICArCQlzZXRTaG93RGVidWcoY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RlYnVnIiwgZmFs
c2UpLnRvQm9vbCgpKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsNCiAgICAr
CQljb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCBTTE9UKHNhdmVTZXR0
aW5ncygpKSk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnSW5mb1Zp
ZXc6OnNhdmVTZXR0aW5ncyh2b2lkKQ0KICAgICt7DQogICAgKwlpZiAoIW9iamVjdE5hbWUoKS5p
c0VtcHR5KCkpIHsNCiAgICArCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1l
KCkpOw0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dEZWJ1ZyIsIHNob3dE
ZWJ1ZygpKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsNCiAgICArCX0NCiAg
ICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdJbmZvVmlldzo6c2V0U2hvd0RlYnVnKGJvb2wg
YikNCiAgICArew0KICAgICsJaWYgKF9zaG93RGVidWcgIT0gYikgew0KICAgICsJCV9zaG93RGVi
dWcgPSBiOw0KICAgICsJCWlmIChfbWVudSkNCiAgICArCQkJbWVudUluZm8oKTsNCiAgICArCQll
bHNlIGlmIChzeW0pDQogICAgKwkJCXN5bWJvbEluZm8oKTsNCiAgICArCQllbWl0IHNob3dEZWJ1
Z0NoYW5nZWQoYik7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnSW5m
b1ZpZXc6OnNldEluZm8oc3RydWN0IG1lbnUgKm0pDQogICAgK3sNCiAgICArCWlmIChfbWVudSA9
PSBtKQ0KICAgICsJCXJldHVybjsNCiAgICArCV9tZW51ID0gbTsNCiAgICArCXN5bSA9IE5VTEw7
DQogICAgKwlpZiAoIV9tZW51KQ0KICAgICsJCWNsZWFyKCk7DQogICAgKwllbHNlDQogICAgKwkJ
bWVudUluZm8oKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdJbmZvVmlldzo6c3lt
Ym9sSW5mbyh2b2lkKQ0KICAgICt7DQogICAgKwlRU3RyaW5nIHN0cjsNCiAgICArDQogICAgKwlz
dHIgKz0gIjxiaWc+U3ltYm9sOiA8Yj4iOw0KICAgICsJc3RyICs9IHByaW50X2ZpbHRlcihzeW0t
Pm5hbWUpOw0KICAgICsJc3RyICs9ICI8L2I+PC9iaWc+PGJyPjxicj52YWx1ZTogIjsNCiAgICAr
CXN0ciArPSBwcmludF9maWx0ZXIoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7DQogICAgKwlz
dHIgKz0gIjxicj52aXNpYmlsaXR5OiAiOw0KICAgICsJc3RyICs9IHN5bS0+dmlzaWJsZSA9PSB5
ZXMgPyAieSIgOiBzeW0tPnZpc2libGUgPT0gbW9kID8gIm0iIDogIm4iOw0KICAgICsJc3RyICs9
ICI8YnI+IjsNCiAgICArCXN0ciArPSBkZWJ1Z19pbmZvKHN5bSk7DQogICAgKw0KICAgICsJc2V0
VGV4dChzdHIpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0luZm9WaWV3OjptZW51
SW5mbyh2b2lkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07DQogICAgKwlRU3Ry
aW5nIGhlYWQsIGRlYnVnLCBoZWxwOw0KICAgICsNCiAgICArCXN5bSA9IF9tZW51LT5zeW07DQog
ICAgKwlpZiAoc3ltKSB7DQogICAgKwkJaWYgKF9tZW51LT5wcm9tcHQpIHsNCiAgICArCQkJaGVh
ZCArPSAiPGJpZz48Yj4iOw0KICAgICsJCQloZWFkICs9IHByaW50X2ZpbHRlcihfbWVudS0+cHJv
bXB0LT50ZXh0KTsNCiAgICArCQkJaGVhZCArPSAiPC9iPjwvYmlnPiI7DQogICAgKwkJCWlmIChz
eW0tPm5hbWUpIHsNCiAgICArCQkJCWhlYWQgKz0gIiAoIjsNCiAgICArCQkJCWlmIChzaG93RGVi
dWcoKSkNCiAgICArCQkJCQloZWFkICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVw
XCI+Iiwgc3ltKTsNCiAgICArCQkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFtZSk7DQog
ICAgKwkJCQlpZiAoc2hvd0RlYnVnKCkpDQogICAgKwkJCQkJaGVhZCArPSAiPC9hPiI7DQogICAg
KwkJCQloZWFkICs9ICIpIjsNCiAgICArCQkJfQ0KICAgICsJCX0gZWxzZSBpZiAoc3ltLT5uYW1l
KSB7DQogICAgKwkJCWhlYWQgKz0gIjxiaWc+PGI+IjsNCiAgICArCQkJaWYgKHNob3dEZWJ1Zygp
KQ0KICAgICsJCQkJaGVhZCArPSBRU3RyaW5nKCkuc3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIs
IHN5bSk7DQogICAgKwkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFtZSk7DQogICAgKwkJ
CWlmIChzaG93RGVidWcoKSkNCiAgICArCQkJCWhlYWQgKz0gIjwvYT4iOw0KICAgICsJCQloZWFk
ICs9ICI8L2I+PC9iaWc+IjsNCiAgICArCQl9DQogICAgKwkJaGVhZCArPSAiPGJyPjxicj4iOw0K
ICAgICsNCiAgICArCQlpZiAoc2hvd0RlYnVnKCkpDQogICAgKwkJCWRlYnVnID0gZGVidWdfaW5m
byhzeW0pOw0KICAgICsNCiAgICArCQlzdHJ1Y3QgZ3N0ciBoZWxwX2dzdHIgPSBzdHJfbmV3KCk7
DQogICAgKwkJbWVudV9nZXRfZXh0X2hlbHAoX21lbnUsICZoZWxwX2dzdHIpOw0KICAgICsJCWhl
bHAgPSBwcmludF9maWx0ZXIoc3RyX2dldCgmaGVscF9nc3RyKSk7DQogICAgKwkJc3RyX2ZyZWUo
JmhlbHBfZ3N0cik7DQogICAgKwl9IGVsc2UgaWYgKF9tZW51LT5wcm9tcHQpIHsNCiAgICArCQlo
ZWFkICs9ICI8YmlnPjxiPiI7DQogICAgKwkJaGVhZCArPSBwcmludF9maWx0ZXIoX21lbnUtPnBy
b21wdC0+dGV4dCk7DQogICAgKwkJaGVhZCArPSAiPC9iPjwvYmlnPjxicj48YnI+IjsNCiAgICAr
CQlpZiAoc2hvd0RlYnVnKCkpIHsNCiAgICArCQkJaWYgKF9tZW51LT5wcm9tcHQtPnZpc2libGUu
ZXhwcikgew0KICAgICsJCQkJZGVidWcgKz0gIiZuYnNwOyZuYnNwO2RlcDogIjsNCiAgICArCQkJ
CWV4cHJfcHJpbnQoX21lbnUtPnByb21wdC0+dmlzaWJsZS5leHByLCBleHByX3ByaW50X2hlbHAs
ICZkZWJ1ZywgRV9OT05FKTsNCiAgICArCQkJCWRlYnVnICs9ICI8YnI+PGJyPiI7DQogICAgKwkJ
CX0NCiAgICArCQl9DQogICAgKwl9DQogICAgKwlpZiAoc2hvd0RlYnVnKCkpDQogICAgKwkJZGVi
dWcgKz0gUVN0cmluZygpLnNwcmludGYoImRlZmluZWQgYXQgJXM6JWQ8YnI+PGJyPiIsIF9tZW51
LT5maWxlLT5uYW1lLCBfbWVudS0+bGluZW5vKTsNCiAgICArDQogICAgKwlzZXRUZXh0KGhlYWQg
KyBkZWJ1ZyArIGhlbHApOw0KICAgICt9DQogICAgKw0KICAgICtRU3RyaW5nIENvbmZpZ0luZm9W
aWV3OjpkZWJ1Z19pbmZvKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJUVN0cmlu
ZyBkZWJ1ZzsNCiAgICArDQogICAgKwlkZWJ1ZyArPSAidHlwZTogIjsNCiAgICArCWRlYnVnICs9
IHByaW50X2ZpbHRlcihzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOw0KICAgICsJaWYgKHN5bV9p
c19jaG9pY2Uoc3ltKSkNCiAgICArCQlkZWJ1ZyArPSAiIChjaG9pY2UpIjsNCiAgICArCWRlYnVn
ICs9ICI8YnI+IjsNCiAgICArCWlmIChzeW0tPnJldl9kZXAuZXhwcikgew0KICAgICsJCWRlYnVn
ICs9ICJyZXZlcnNlIGRlcDogIjsNCiAgICArCQlleHByX3ByaW50KHN5bS0+cmV2X2RlcC5leHBy
LCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsNCiAgICArCQlkZWJ1ZyArPSAiPGJy
PiI7DQogICAgKwl9DQogICAgKwlmb3IgKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IHN5bS0+cHJv
cDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsNCiAgICArCQlzd2l0Y2ggKHByb3AtPnR5cGUp
IHsNCiAgICArCQljYXNlIFBfUFJPTVBUOg0KICAgICsJCWNhc2UgUF9NRU5VOg0KICAgICsJCQlk
ZWJ1ZyArPSBRU3RyaW5nKCkuc3ByaW50ZigicHJvbXB0OiA8YSBocmVmPVwibSVwXCI+IiwgcHJv
cC0+bWVudSk7DQogICAgKwkJCWRlYnVnICs9IHByaW50X2ZpbHRlcihwcm9wLT50ZXh0KTsNCiAg
ICArCQkJZGVidWcgKz0gIjwvYT48YnI+IjsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBQ
X0RFRkFVTFQ6DQogICAgKwkJY2FzZSBQX1NFTEVDVDoNCiAgICArCQljYXNlIFBfUkFOR0U6DQog
ICAgKwkJCWRlYnVnICs9IHByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKTsNCiAgICArCQkJ
ZGVidWcgKz0gIjogIjsNCiAgICArCQkJZXhwcl9wcmludChwcm9wLT5leHByLCBleHByX3ByaW50
X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsNCiAgICArCQkJZGVidWcgKz0gIjxicj4iOw0KICAgICsJ
CQlicmVhazsNCiAgICArCQljYXNlIFBfQ0hPSUNFOg0KICAgICsJCQlpZiAoc3ltX2lzX2Nob2lj
ZShzeW0pKSB7DQogICAgKwkJCQlkZWJ1ZyArPSAiY2hvaWNlOiAiOw0KICAgICsJCQkJZXhwcl9w
cmludChwcm9wLT5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsNCiAgICAr
CQkJCWRlYnVnICs9ICI8YnI+IjsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQlk
ZWZhdWx0Og0KICAgICsJCQlkZWJ1ZyArPSAidW5rbm93biBwcm9wZXJ0eTogIjsNCiAgICArCQkJ
ZGVidWcgKz0gcHJvcF9nZXRfdHlwZV9uYW1lKHByb3AtPnR5cGUpOw0KICAgICsJCQlkZWJ1ZyAr
PSAiPGJyPiI7DQogICAgKwkJfQ0KICAgICsJCWlmIChwcm9wLT52aXNpYmxlLmV4cHIpIHsNCiAg
ICArCQkJZGVidWcgKz0gIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2RlcDogIjsNCiAgICArCQkJ
ZXhwcl9wcmludChwcm9wLT52aXNpYmxlLmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVnLCBF
X05PTkUpOw0KICAgICsJCQlkZWJ1ZyArPSAiPGJyPiI7DQogICAgKwkJfQ0KICAgICsJfQ0KICAg
ICsJZGVidWcgKz0gIjxicj4iOw0KICAgICsNCiAgICArCXJldHVybiBkZWJ1ZzsNCiAgICArfQ0K
ICAgICsNCiAgICArUVN0cmluZyBDb25maWdJbmZvVmlldzo6cHJpbnRfZmlsdGVyKGNvbnN0IFFT
dHJpbmcgJnN0cikNCiAgICArew0KICAgICsJUVJlZ0V4cCByZSgiWzw+JlwiXFxuXSIpOw0KICAg
ICsJUVN0cmluZyByZXMgPSBzdHI7DQogICAgKwlmb3IgKGludCBpID0gMDsgKGkgPSByZXMuaW5k
ZXhPZihyZSwgaSkpID49IDA7KSB7DQogICAgKwkJc3dpdGNoIChyZXNbaV0udG9MYXRpbjEoKSkg
ew0KICAgICsJCWNhc2UgJzwnOg0KICAgICsJCQlyZXMucmVwbGFjZShpLCAxLCAiJmx0OyIpOw0K
ICAgICsJCQlpICs9IDQ7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJz4nOg0KICAgICsJ
CQlyZXMucmVwbGFjZShpLCAxLCAiJmd0OyIpOw0KICAgICsJCQlpICs9IDQ7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgJyYnOg0KICAgICsJCQlyZXMucmVwbGFjZShpLCAxLCAiJmFtcDsi
KTsNCiAgICArCQkJaSArPSA1Ow0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlICciJzoNCiAg
ICArCQkJcmVzLnJlcGxhY2UoaSwgMSwgIiZxdW90OyIpOw0KICAgICsJCQlpICs9IDY7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJ1xuJzoNCiAgICArCQkJcmVzLnJlcGxhY2UoaSwgMSwg
Ijxicj4iKTsNCiAgICArCQkJaSArPSA0Ow0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAg
Kwl9DQogICAgKwlyZXR1cm4gcmVzOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0lu
Zm9WaWV3OjpleHByX3ByaW50X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBj
b25zdCBjaGFyICpzdHIpDQogICAgK3sNCiAgICArCVFTdHJpbmcqIHRleHQgPSByZWludGVycHJl
dF9jYXN0PFFTdHJpbmcqPihkYXRhKTsNCiAgICArCVFTdHJpbmcgc3RyMiA9IHByaW50X2ZpbHRl
cihzdHIpOw0KICAgICsNCiAgICArCWlmIChzeW0gJiYgc3ltLT5uYW1lICYmICEoc3ltLT5mbGFn
cyAmIFNZTUJPTF9DT05TVCkpIHsNCiAgICArCQkqdGV4dCArPSBRU3RyaW5nKCkuc3ByaW50Zigi
PGEgaHJlZj1cInMlcFwiPiIsIHN5bSk7DQogICAgKwkJKnRleHQgKz0gc3RyMjsNCiAgICArCQkq
dGV4dCArPSAiPC9hPiI7DQogICAgKwl9IGVsc2UNCiAgICArCQkqdGV4dCArPSBzdHIyOw0KICAg
ICt9DQogICAgKw0KICAgICtRTWVudSogQ29uZmlnSW5mb1ZpZXc6OmNyZWF0ZVN0YW5kYXJkQ29u
dGV4dE1lbnUoY29uc3QgUVBvaW50ICYgcG9zKQ0KICAgICt7DQogICAgKwlRTWVudSogcG9wdXAg
PSBQYXJlbnQ6OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUocG9zKTsNCiAgICArCVFBY3Rpb24q
IGFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IERlYnVnIEluZm8iLCBwb3B1cCk7DQogICAgKwkg
IGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJICBjb25uZWN0KGFjdGlvbiwgU0lH
TkFMKHRvZ2dsZWQoYm9vbCkpLCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOw0KICAgICsJICBj
b25uZWN0KHRoaXMsIFNJR05BTChzaG93RGVidWdDaGFuZ2VkKGJvb2wpKSwgYWN0aW9uLCBTTE9U
KHNldE9uKGJvb2wpKSk7DQogICAgKwkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93RGVidWcoKSk7
DQogICAgKwlwb3B1cC0+YWRkU2VwYXJhdG9yKCk7DQogICAgKwlwb3B1cC0+YWRkQWN0aW9uKGFj
dGlvbik7DQogICAgKwlyZXR1cm4gcG9wdXA7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29u
ZmlnSW5mb1ZpZXc6OmNvbnRleHRNZW51RXZlbnQoUUNvbnRleHRNZW51RXZlbnQgKmUpDQogICAg
K3sNCiAgICArCVBhcmVudDo6Y29udGV4dE1lbnVFdmVudChlKTsNCiAgICArfQ0KICAgICsNCiAg
ICArQ29uZmlnU2VhcmNoV2luZG93OjpDb25maWdTZWFyY2hXaW5kb3coQ29uZmlnTWFpbldpbmRv
dyogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lKQ0KICAgICsJOiBQYXJlbnQocGFyZW50KSwgcmVz
dWx0KE5VTEwpDQogICAgK3sNCiAgICArCXNldE9iamVjdE5hbWUobmFtZSk7DQogICAgKwlzZXRX
aW5kb3dUaXRsZSgiU2VhcmNoIENvbmZpZyIpOw0KICAgICsNCiAgICArCVFWQm94TGF5b3V0KiBs
YXlvdXQxID0gbmV3IFFWQm94TGF5b3V0KHRoaXMpOw0KICAgICsJbGF5b3V0MS0+c2V0Q29udGVu
dHNNYXJnaW5zKDExLCAxMSwgMTEsIDExKTsNCiAgICArCWxheW91dDEtPnNldFNwYWNpbmcoNik7
DQogICAgKwlRSEJveExheW91dCogbGF5b3V0MiA9IG5ldyBRSEJveExheW91dCgwKTsNCiAgICAr
CWxheW91dDItPnNldENvbnRlbnRzTWFyZ2lucygwLCAwLCAwLCAwKTsNCiAgICArCWxheW91dDIt
PnNldFNwYWNpbmcoNik7DQogICAgKwlsYXlvdXQyLT5hZGRXaWRnZXQobmV3IFFMYWJlbCgiRmlu
ZDoiLCB0aGlzKSk7DQogICAgKwllZGl0RmllbGQgPSBuZXcgUUxpbmVFZGl0KHRoaXMpOw0KICAg
ICsJY29ubmVjdChlZGl0RmllbGQsIFNJR05BTChyZXR1cm5QcmVzc2VkKCkpLCBTTE9UKHNlYXJj
aCgpKSk7DQogICAgKwlsYXlvdXQyLT5hZGRXaWRnZXQoZWRpdEZpZWxkKTsNCiAgICArCXNlYXJj
aEJ1dHRvbiA9IG5ldyBRUHVzaEJ1dHRvbigiU2VhcmNoIiwgdGhpcyk7DQogICAgKwlzZWFyY2hC
dXR0b24tPnNldEF1dG9EZWZhdWx0KGZhbHNlKTsNCiAgICArCWNvbm5lY3Qoc2VhcmNoQnV0dG9u
LCBTSUdOQUwoY2xpY2tlZCgpKSwgU0xPVChzZWFyY2goKSkpOw0KICAgICsJbGF5b3V0Mi0+YWRk
V2lkZ2V0KHNlYXJjaEJ1dHRvbik7DQogICAgKwlsYXlvdXQxLT5hZGRMYXlvdXQobGF5b3V0Mik7
DQogICAgKw0KICAgICsJc3BsaXQgPSBuZXcgUVNwbGl0dGVyKHRoaXMpOw0KICAgICsJc3BsaXQt
PnNldE9yaWVudGF0aW9uKFF0OjpWZXJ0aWNhbCk7DQogICAgKwlsaXN0ID0gbmV3IENvbmZpZ1Zp
ZXcoc3BsaXQsIG5hbWUpOw0KICAgICsJbGlzdC0+bGlzdC0+bW9kZSA9IGxpc3RNb2RlOw0KICAg
ICsJaW5mbyA9IG5ldyBDb25maWdJbmZvVmlldyhzcGxpdCwgbmFtZSk7DQogICAgKwljb25uZWN0
KGxpc3QtPmxpc3QsIFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJ
aW5mbywgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgKwljb25uZWN0KGxpc3Qt
Pmxpc3QsIFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJcGFyZW50
LCBTTE9UKHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICopKSk7DQogICAgKw0KICAgICsJbGF5b3V0
MS0+YWRkV2lkZ2V0KHNwbGl0KTsNCiAgICArDQogICAgKwlpZiAobmFtZSkgew0KICAgICsJCVFW
YXJpYW50IHgsIHk7DQogICAgKwkJaW50IHdpZHRoLCBoZWlnaHQ7DQogICAgKwkJYm9vbCBvazsN
CiAgICArDQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAobmFtZSk7DQogICAgKwkJ
d2lkdGggPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgd2lkdGgiLCBwYXJlbnQtPndp
ZHRoKCkgLyAyKS50b0ludCgpOw0KICAgICsJCWhlaWdodCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1
ZSgiL3dpbmRvdyBoZWlnaHQiLCBwYXJlbnQtPmhlaWdodCgpIC8gMikudG9JbnQoKTsNCiAgICAr
CQlyZXNpemUod2lkdGgsIGhlaWdodCk7DQogICAgKwkJeCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1
ZSgiL3dpbmRvdyB4Iik7DQogICAgKwkJeSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRv
dyB5Iik7DQogICAgKwkJaWYgKCh4LmlzVmFsaWQoKSkmJih5LmlzVmFsaWQoKSkpDQogICAgKwkJ
CW1vdmUoeC50b0ludCgpLCB5LnRvSW50KCkpOw0KICAgICsJCVFMaXN0PGludD4gc2l6ZXMgPSBj
b25maWdTZXR0aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQiLCAmb2spOw0KICAgICsJCWlmIChvaykN
CiAgICArCQkJc3BsaXQtPnNldFNpemVzKHNpemVzKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+
ZW5kR3JvdXAoKTsNCiAgICArCQljb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0
KCkpLCBTTE9UKHNhdmVTZXR0aW5ncygpKSk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAg
K3ZvaWQgQ29uZmlnU2VhcmNoV2luZG93OjpzYXZlU2V0dGluZ3Modm9pZCkNCiAgICArew0KICAg
ICsJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7DQogICAgKwkJY29uZmlnU2V0dGluZ3Mt
PmJlZ2luR3JvdXAob2JqZWN0TmFtZSgpKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+c2V0VmFs
dWUoIi93aW5kb3cgeCIsIHBvcygpLngoKSk7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPnNldFZh
bHVlKCIvd2luZG93IHkiLCBwb3MoKS55KCkpOw0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRW
YWx1ZSgiL3dpbmRvdyB3aWR0aCIsIHNpemUoKS53aWR0aCgpKTsNCiAgICArCQljb25maWdTZXR0
aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cgaGVpZ2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsNCiAgICAr
CQljb25maWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0Iiwgc3BsaXQtPnNpemVzKCkpOw0K
ICAgICsJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgICsJfQ0KICAgICt9DQogICAg
Kw0KICAgICt2b2lkIENvbmZpZ1NlYXJjaFdpbmRvdzo6c2VhcmNoKHZvaWQpDQogICAgK3sNCiAg
ICArCXN0cnVjdCBzeW1ib2wgKipwOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAg
ICsJQ29uZmlnSXRlbSAqbGFzdEl0ZW0gPSBOVUxMOw0KICAgICsNCiAgICArCWZyZWUocmVzdWx0
KTsNCiAgICArCWxpc3QtPmxpc3QtPmNsZWFyKCk7DQogICAgKwlpbmZvLT5jbGVhcigpOw0KICAg
ICsNCiAgICArCXJlc3VsdCA9IHN5bV9yZV9zZWFyY2goZWRpdEZpZWxkLT50ZXh0KCkudG9MYXRp
bjEoKSk7DQogICAgKwlpZiAoIXJlc3VsdCkNCiAgICArCQlyZXR1cm47DQogICAgKwlmb3IgKHAg
PSByZXN1bHQ7ICpwOyBwKyspIHsNCiAgICArCQlmb3JfYWxsX3Byb21wdHMoKCpwKSwgcHJvcCkN
CiAgICArCQkJbGFzdEl0ZW0gPSBuZXcgQ29uZmlnSXRlbShsaXN0LT5saXN0LCBsYXN0SXRlbSwg
cHJvcC0+bWVudSwNCiAgICArCQkJCQkJICBtZW51X2lzX3Zpc2libGUocHJvcC0+bWVudSkpOw0K
ICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBDb25zdHJ1Y3QgdGhlIGNv
bXBsZXRlIGNvbmZpZyB3aWRnZXQNCiAgICArICovDQogICAgK0NvbmZpZ01haW5XaW5kb3c6OkNv
bmZpZ01haW5XaW5kb3codm9pZCkNCiAgICArCTogc2VhcmNoV2luZG93KDApDQogICAgK3sNCiAg
ICArCVFNZW51QmFyKiBtZW51Ow0KICAgICsJYm9vbCBvayA9IHRydWU7DQogICAgKwlRVmFyaWFu
dCB4LCB5Ow0KICAgICsJaW50IHdpZHRoLCBoZWlnaHQ7DQogICAgKwljaGFyIHRpdGxlWzI1Nl07
DQogICAgKw0KICAgICsJUURlc2t0b3BXaWRnZXQgKmQgPSBjb25maWdBcHAtPmRlc2t0b3AoKTsN
CiAgICArCXNucHJpbnRmKHRpdGxlLCBzaXplb2YodGl0bGUpLCAiJXMlcyIsDQogICAgKwkJcm9v
dG1lbnUucHJvbXB0LT50ZXh0LA0KICAgICsJCSIiDQogICAgKwkJKTsNCiAgICArCXNldFdpbmRv
d1RpdGxlKHRpdGxlKTsNCiAgICArDQogICAgKwl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1
ZSgiL3dpbmRvdyB3aWR0aCIsIGQtPndpZHRoKCkgLSA2NCkudG9JbnQoKTsNCiAgICArCWhlaWdo
dCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBkLT5oZWlnaHQoKSAt
IDY0KS50b0ludCgpOw0KICAgICsJcmVzaXplKHdpZHRoLCBoZWlnaHQpOw0KICAgICsJeCA9IGNv
bmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB4Iik7DQogICAgKwl5ID0gY29uZmlnU2V0dGlu
Z3MtPnZhbHVlKCIvd2luZG93IHkiKTsNCiAgICArCWlmICgoeC5pc1ZhbGlkKCkpJiYoeS5pc1Zh
bGlkKCkpKQ0KICAgICsJCW1vdmUoeC50b0ludCgpLCB5LnRvSW50KCkpOw0KICAgICsNCiAgICAr
CXNwbGl0MSA9IG5ldyBRU3BsaXR0ZXIodGhpcyk7DQogICAgKwlzcGxpdDEtPnNldE9yaWVudGF0
aW9uKFF0OjpIb3Jpem9udGFsKTsNCiAgICArCXNldENlbnRyYWxXaWRnZXQoc3BsaXQxKTsNCiAg
ICArDQogICAgKwltZW51VmlldyA9IG5ldyBDb25maWdWaWV3KHNwbGl0MSwgIm1lbnUiKTsNCiAg
ICArCW1lbnVMaXN0ID0gbWVudVZpZXctPmxpc3Q7DQogICAgKw0KICAgICsJc3BsaXQyID0gbmV3
IFFTcGxpdHRlcihzcGxpdDEpOw0KICAgICsJc3BsaXQyLT5zZXRPcmllbnRhdGlvbihRdDo6VmVy
dGljYWwpOw0KICAgICsNCiAgICArCS8vIGNyZWF0ZSBjb25maWcgdHJlZQ0KICAgICsJY29uZmln
VmlldyA9IG5ldyBDb25maWdWaWV3KHNwbGl0MiwgImNvbmZpZyIpOw0KICAgICsJY29uZmlnTGlz
dCA9IGNvbmZpZ1ZpZXctPmxpc3Q7DQogICAgKw0KICAgICsJaGVscFRleHQgPSBuZXcgQ29uZmln
SW5mb1ZpZXcoc3BsaXQyLCAiaGVscCIpOw0KICAgICsNCiAgICArCXNldFRhYk9yZGVyKGNvbmZp
Z0xpc3QsIGhlbHBUZXh0KTsNCiAgICArCWNvbmZpZ0xpc3QtPnNldEZvY3VzKCk7DQogICAgKw0K
ICAgICsJbWVudSA9IG1lbnVCYXIoKTsNCiAgICArCXRvb2xCYXIgPSBuZXcgUVRvb2xCYXIoIlRv
b2xzIiwgdGhpcyk7DQogICAgKwlhZGRUb29sQmFyKHRvb2xCYXIpOw0KICAgICsNCiAgICArCWJh
Y2tBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9iYWNrKSwgIkJhY2siLCB0aGlzKTsN
CiAgICArCSAgY29ubmVjdChiYWNrQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xP
VChnb0JhY2soKSkpOw0KICAgICsJICBiYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsNCiAg
ICArCVFBY3Rpb24gKnF1aXRBY3Rpb24gPSBuZXcgUUFjdGlvbigiJlF1aXQiLCB0aGlzKTsNCiAg
ICArCXF1aXRBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6OktleV9RKTsNCiAgICAr
CSAgY29ubmVjdChxdWl0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChjbG9z
ZSgpKSk7DQogICAgKwlRQWN0aW9uICpsb2FkQWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4
cG1fbG9hZCksICImTG9hZCIsIHRoaXMpOw0KICAgICsJbG9hZEFjdGlvbi0+c2V0U2hvcnRjdXQo
UXQ6OkNUUkwgKyBRdDo6S2V5X0wpOw0KICAgICsJICBjb25uZWN0KGxvYWRBY3Rpb24sIFNJR05B
TCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKGxvYWRDb25maWcoKSkpOw0KICAgICsJc2F2ZUFjdGlv
biA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NhdmUpLCAiJlNhdmUiLCB0aGlzKTsNCiAgICAr
CXNhdmVBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6OktleV9TKTsNCiAgICArCSAg
Y29ubmVjdChzYXZlQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzYXZlQ29u
ZmlnKCkpKTsNCiAgICArCWNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsN
CiAgICArCS8vIFNldCBzYXZlQWN0aW9uJ3MgaW5pdGlhbCBzdGF0ZQ0KICAgICsJY29uZl9jaGFu
Z2VkKCk7DQogICAgKwljb25maWduYW1lID0geHN0cmR1cChjb25mX2dldF9jb25maWduYW1lKCkp
Ow0KICAgICsNCiAgICArCVFBY3Rpb24gKnNhdmVBc0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJTYXZl
ICZBcy4uLiIsIHRoaXMpOw0KICAgICsJICBjb25uZWN0KHNhdmVBc0FjdGlvbiwgU0lHTkFMKHRy
aWdnZXJlZChib29sKSksIFNMT1Qoc2F2ZUNvbmZpZ0FzKCkpKTsNCiAgICArCVFBY3Rpb24gKnNl
YXJjaEFjdGlvbiA9IG5ldyBRQWN0aW9uKCImRmluZCIsIHRoaXMpOw0KICAgICsJc2VhcmNoQWN0
aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfRik7DQogICAgKwkgIGNvbm5lY3Qo
c2VhcmNoQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzZWFyY2hDb25maWco
KSkpOw0KICAgICsJc2luZ2xlVmlld0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3Np
bmdsZV92aWV3KSwgIlNpbmdsZSBWaWV3IiwgdGhpcyk7DQogICAgKwlzaW5nbGVWaWV3QWN0aW9u
LT5zZXRDaGVja2FibGUodHJ1ZSk7DQogICAgKwkgIGNvbm5lY3Qoc2luZ2xlVmlld0FjdGlvbiwg
U0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd1NpbmdsZVZpZXcoKSkpOw0KICAgICsJ
c3BsaXRWaWV3QWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fc3BsaXRfdmlldyksICJT
cGxpdCBWaWV3IiwgdGhpcyk7DQogICAgKwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrYWJsZSh0
cnVlKTsNCiAgICArCSAgY29ubmVjdChzcGxpdFZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQo
Ym9vbCkpLCBTTE9UKHNob3dTcGxpdFZpZXcoKSkpOw0KICAgICsJZnVsbFZpZXdBY3Rpb24gPSBu
ZXcgUUFjdGlvbihRUGl4bWFwKHhwbV90cmVlX3ZpZXcpLCAiRnVsbCBWaWV3IiwgdGhpcyk7DQog
ICAgKwlmdWxsVmlld0FjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJICBjb25uZWN0
KGZ1bGxWaWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93RnVsbFZp
ZXcoKSkpOw0KICAgICsNCiAgICArCVFBY3Rpb24gKnNob3dOYW1lQWN0aW9uID0gbmV3IFFBY3Rp
b24oIlNob3cgTmFtZSIsIHRoaXMpOw0KICAgICsJICBzaG93TmFtZUFjdGlvbi0+c2V0Q2hlY2th
YmxlKHRydWUpOw0KICAgICsJICBjb25uZWN0KHNob3dOYW1lQWN0aW9uLCBTSUdOQUwodG9nZ2xl
ZChib29sKSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd05hbWUoYm9vbCkpKTsNCiAgICArCSAg
c2hvd05hbWVBY3Rpb24tPnNldENoZWNrZWQoY29uZmlnVmlldy0+c2hvd05hbWUoKSk7DQogICAg
KwlRQWN0aW9uICpzaG93UmFuZ2VBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBSYW5nZSIsIHRo
aXMpOw0KICAgICsJICBzaG93UmFuZ2VBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAgICAr
CSAgY29ubmVjdChzaG93UmFuZ2VBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmln
VmlldywgU0xPVChzZXRTaG93UmFuZ2UoYm9vbCkpKTsNCiAgICArCVFBY3Rpb24gKnNob3dEYXRh
QWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgRGF0YSIsIHRoaXMpOw0KICAgICsJICBzaG93RGF0
YUFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJICBjb25uZWN0KHNob3dEYXRhQWN0
aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd0RhdGEo
Ym9vbCkpKTsNCiAgICArDQogICAgKwlRQWN0aW9uR3JvdXAgKm9wdEdyb3VwID0gbmV3IFFBY3Rp
b25Hcm91cCh0aGlzKTsNCiAgICArCW9wdEdyb3VwLT5zZXRFeGNsdXNpdmUodHJ1ZSk7DQogICAg
Kwljb25uZWN0KG9wdEdyb3VwLCBTSUdOQUwodHJpZ2dlcmVkKFFBY3Rpb24qKSksIGNvbmZpZ1Zp
ZXcsDQogICAgKwkJU0xPVChzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKikpKTsNCiAgICArCWNvbm5l
Y3Qob3B0R3JvdXAsIFNJR05BTCh0cmlnZ2VyZWQoUUFjdGlvbiAqKSksIG1lbnVWaWV3LA0KICAg
ICsJCVNMT1Qoc2V0T3B0aW9uTW9kZShRQWN0aW9uICopKSk7DQogICAgKw0KICAgICsJY29uZmln
Vmlldy0+c2hvd05vcm1hbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IE5vcm1hbCBPcHRpb25z
Iiwgb3B0R3JvdXApOw0KICAgICsJY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbiA9IG5ldyBRQWN0
aW9uKCJTaG93IEFsbCBPcHRpb25zIiwgb3B0R3JvdXApOw0KICAgICsJY29uZmlnVmlldy0+c2hv
d1Byb21wdEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IFByb21wdCBPcHRpb25zIiwgb3B0R3Jv
dXApOw0KICAgICsJY29uZmlnVmlldy0+c2hvd05vcm1hbEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRy
dWUpOw0KICAgICsJY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUp
Ow0KICAgICsJY29uZmlnVmlldy0+c2hvd1Byb21wdEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUp
Ow0KICAgICsNCiAgICArCVFBY3Rpb24gKnNob3dEZWJ1Z0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJT
aG93IERlYnVnIEluZm8iLCB0aGlzKTsNCiAgICArCSAgc2hvd0RlYnVnQWN0aW9uLT5zZXRDaGVj
a2FibGUodHJ1ZSk7DQogICAgKwkgIGNvbm5lY3Qoc2hvd0RlYnVnQWN0aW9uLCBTSUdOQUwodG9n
Z2xlZChib29sKSksIGhlbHBUZXh0LCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOw0KICAgICsJ
ICBzaG93RGVidWdBY3Rpb24tPnNldENoZWNrZWQoaGVscFRleHQtPnNob3dEZWJ1ZygpKTsNCiAg
ICArDQogICAgKwlRQWN0aW9uICpzaG93SW50cm9BY3Rpb24gPSBuZXcgUUFjdGlvbigiSW50cm9k
dWN0aW9uIiwgdGhpcyk7DQogICAgKwkgIGNvbm5lY3Qoc2hvd0ludHJvQWN0aW9uLCBTSUdOQUwo
dHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93SW50cm8oKSkpOw0KICAgICsJUUFjdGlvbiAqc2hv
d0Fib3V0QWN0aW9uID0gbmV3IFFBY3Rpb24oIkFib3V0IiwgdGhpcyk7DQogICAgKwkgIGNvbm5l
Y3Qoc2hvd0Fib3V0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93QWJv
dXQoKSkpOw0KICAgICsNCiAgICArCS8vIGluaXQgdG9vbCBiYXINCiAgICArCXRvb2xCYXItPmFk
ZEFjdGlvbihiYWNrQWN0aW9uKTsNCiAgICArCXRvb2xCYXItPmFkZFNlcGFyYXRvcigpOw0KICAg
ICsJdG9vbEJhci0+YWRkQWN0aW9uKGxvYWRBY3Rpb24pOw0KICAgICsJdG9vbEJhci0+YWRkQWN0
aW9uKHNhdmVBY3Rpb24pOw0KICAgICsJdG9vbEJhci0+YWRkU2VwYXJhdG9yKCk7DQogICAgKwl0
b29sQmFyLT5hZGRBY3Rpb24oc2luZ2xlVmlld0FjdGlvbik7DQogICAgKwl0b29sQmFyLT5hZGRB
Y3Rpb24oc3BsaXRWaWV3QWN0aW9uKTsNCiAgICArCXRvb2xCYXItPmFkZEFjdGlvbihmdWxsVmll
d0FjdGlvbik7DQogICAgKw0KICAgICsJLy8gY3JlYXRlIGNvbmZpZyBtZW51DQogICAgKwlRTWVu
dSogY29uZmlnID0gbWVudS0+YWRkTWVudSgiJkZpbGUiKTsNCiAgICArCWNvbmZpZy0+YWRkQWN0
aW9uKGxvYWRBY3Rpb24pOw0KICAgICsJY29uZmlnLT5hZGRBY3Rpb24oc2F2ZUFjdGlvbik7DQog
ICAgKwljb25maWctPmFkZEFjdGlvbihzYXZlQXNBY3Rpb24pOw0KICAgICsJY29uZmlnLT5hZGRT
ZXBhcmF0b3IoKTsNCiAgICArCWNvbmZpZy0+YWRkQWN0aW9uKHF1aXRBY3Rpb24pOw0KICAgICsN
CiAgICArCS8vIGNyZWF0ZSBlZGl0IG1lbnUNCiAgICArCVFNZW51KiBlZGl0TWVudSA9IG1lbnUt
PmFkZE1lbnUoIiZFZGl0Iik7DQogICAgKwllZGl0TWVudS0+YWRkQWN0aW9uKHNlYXJjaEFjdGlv
bik7DQogICAgKw0KICAgICsJLy8gY3JlYXRlIG9wdGlvbnMgbWVudQ0KICAgICsJUU1lbnUqIG9w
dGlvbk1lbnUgPSBtZW51LT5hZGRNZW51KCImT3B0aW9uIik7DQogICAgKwlvcHRpb25NZW51LT5h
ZGRBY3Rpb24oc2hvd05hbWVBY3Rpb24pOw0KICAgICsJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNo
b3dSYW5nZUFjdGlvbik7DQogICAgKwlvcHRpb25NZW51LT5hZGRBY3Rpb24oc2hvd0RhdGFBY3Rp
b24pOw0KICAgICsJb3B0aW9uTWVudS0+YWRkU2VwYXJhdG9yKCk7DQogICAgKwlvcHRpb25NZW51
LT5hZGRBY3Rpb25zKG9wdEdyb3VwLT5hY3Rpb25zKCkpOw0KICAgICsJb3B0aW9uTWVudS0+YWRk
U2VwYXJhdG9yKCk7DQogICAgKwlvcHRpb25NZW51LT5hZGRBY3Rpb24oc2hvd0RlYnVnQWN0aW9u
KTsNCiAgICArDQogICAgKwkvLyBjcmVhdGUgaGVscCBtZW51DQogICAgKwltZW51LT5hZGRTZXBh
cmF0b3IoKTsNCiAgICArCVFNZW51KiBoZWxwTWVudSA9IG1lbnUtPmFkZE1lbnUoIiZIZWxwIik7
DQogICAgKwloZWxwTWVudS0+YWRkQWN0aW9uKHNob3dJbnRyb0FjdGlvbik7DQogICAgKwloZWxw
TWVudS0+YWRkQWN0aW9uKHNob3dBYm91dEFjdGlvbik7DQogICAgKw0KICAgICsJY29ubmVjdChj
b25maWdMaXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0KICAgICsJCWhl
bHBUZXh0LCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsNCiAgICArCWNvbm5lY3QoY29u
ZmlnTGlzdCwgU0lHTkFMKG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJU0xP
VChjaGFuZ2VNZW51KHN0cnVjdCBtZW51ICopKSk7DQogICAgKwljb25uZWN0KGNvbmZpZ0xpc3Qs
IFNJR05BTChwYXJlbnRTZWxlY3RlZCgpKSwNCiAgICArCQlTTE9UKGdvQmFjaygpKSk7DQogICAg
Kwljb25uZWN0KG1lbnVMaXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0K
ICAgICsJCWhlbHBUZXh0LCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsNCiAgICArCWNv
bm5lY3QobWVudUxpc3QsIFNJR05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLA0KICAg
ICsJCVNMT1QoY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOw0KICAgICsNCiAgICArCWNvbm5l
Y3QoY29uZmlnTGlzdCwgU0lHTkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwNCiAgICArCQlo
ZWxwVGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgKwljb25uZWN0KG1l
bnVMaXN0LCBTSUdOQUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLA0KICAgICsJCWhlbHBUZXh0
LCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsNCiAgICArCWNvbm5lY3QobWVudUxpc3Qs
IFNJR05BTChnb3RGb2N1cyhzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJU0xPVChsaXN0Rm9jdXND
aGFuZ2VkKHZvaWQpKSk7DQogICAgKwljb25uZWN0KGhlbHBUZXh0LCBTSUdOQUwobWVudVNlbGVj
dGVkKHN0cnVjdCBtZW51ICopKSwNCiAgICArCQlTTE9UKHNldE1lbnVMaW5rKHN0cnVjdCBtZW51
ICopKSk7DQogICAgKw0KICAgICsJUVN0cmluZyBsaXN0TW9kZSA9IGNvbmZpZ1NldHRpbmdzLT52
YWx1ZSgiL2xpc3RNb2RlIiwgInN5bWJvbCIpLnRvU3RyaW5nKCk7DQogICAgKwlpZiAobGlzdE1v
ZGUgPT0gInNpbmdsZSIpDQogICAgKwkJc2hvd1NpbmdsZVZpZXcoKTsNCiAgICArCWVsc2UgaWYg
KGxpc3RNb2RlID09ICJmdWxsIikNCiAgICArCQlzaG93RnVsbFZpZXcoKTsNCiAgICArCWVsc2Ug
LyppZiAobGlzdE1vZGUgPT0gInNwbGl0IikqLw0KICAgICsJCXNob3dTcGxpdFZpZXcoKTsNCiAg
ICArDQogICAgKwkvLyBVSSBzZXR1cCBkb25lLCByZXN0b3JlIHNwbGl0dGVyIHBvc2l0aW9ucw0K
ICAgICsJUUxpc3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxp
dDEiLCAmb2spOw0KICAgICsJaWYgKG9rKQ0KICAgICsJCXNwbGl0MS0+c2V0U2l6ZXMoc2l6ZXMp
Ow0KICAgICsNCiAgICArCXNpemVzID0gY29uZmlnU2V0dGluZ3MtPnJlYWRTaXplcygiL3NwbGl0
MiIsICZvayk7DQogICAgKwlpZiAob2spDQogICAgKwkJc3BsaXQyLT5zZXRTaXplcyhzaXplcyk7
DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6bG9hZENvbmZpZyh2
b2lkKQ0KICAgICt7DQogICAgKwlRU3RyaW5nIHN0cjsNCiAgICArCVFCeXRlQXJyYXkgYmE7DQog
ICAgKwljb25zdCBjaGFyICpuYW1lOw0KICAgICsNCiAgICArCXN0ciA9IFFGaWxlRGlhbG9nOjpn
ZXRPcGVuRmlsZU5hbWUodGhpcywgIiIsIGNvbmZpZ25hbWUpOw0KICAgICsJaWYgKHN0ci5pc051
bGwoKSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJYmEgPSBzdHIudG9Mb2NhbDhCaXQo
KTsNCiAgICArCW5hbWUgPSBiYS5kYXRhKCk7DQogICAgKw0KICAgICsJaWYgKGNvbmZfcmVhZChu
YW1lKSkNCiAgICArCQlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwgIlVu
YWJsZSB0byBsb2FkIGNvbmZpZ3VyYXRpb24hIik7DQogICAgKw0KICAgICsJZnJlZShjb25maWdu
YW1lKTsNCiAgICArCWNvbmZpZ25hbWUgPSB4c3RyZHVwKG5hbWUpOw0KICAgICsNCiAgICArCUNv
bmZpZ1ZpZXc6OnVwZGF0ZUxpc3RBbGwoKTsNCiAgICArfQ0KICAgICsNCiAgICArYm9vbCBDb25m
aWdNYWluV2luZG93OjpzYXZlQ29uZmlnKHZvaWQpDQogICAgK3sNCiAgICArCWlmIChjb25mX3dy
aXRlKGNvbmZpZ25hbWUpKSB7DQogICAgKwkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMs
ICJxY29uZiIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uISIpOw0KICAgICsJCXJldHVy
biBmYWxzZTsNCiAgICArCX0NCiAgICArCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7DQogICAgKw0K
ICAgICsJcmV0dXJuIHRydWU7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldp
bmRvdzo6c2F2ZUNvbmZpZ0FzKHZvaWQpDQogICAgK3sNCiAgICArCVFTdHJpbmcgc3RyOw0KICAg
ICsJUUJ5dGVBcnJheSBiYTsNCiAgICArCWNvbnN0IGNoYXIgKm5hbWU7DQogICAgKw0KICAgICsJ
c3RyID0gUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSh0aGlzLCAiIiwgY29uZmlnbmFtZSk7
DQogICAgKwlpZiAoc3RyLmlzTnVsbCgpKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwli
YSA9IHN0ci50b0xvY2FsOEJpdCgpOw0KICAgICsJbmFtZSA9IGJhLmRhdGEoKTsNCiAgICArDQog
ICAgKwlpZiAoY29uZl93cml0ZShuYW1lKSkgew0KICAgICsJCVFNZXNzYWdlQm94OjppbmZvcm1h
dGlvbih0aGlzLCAicWNvbmYiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiEiKTsNCiAg
ICArCX0NCiAgICArCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7DQogICAgKw0KICAgICsJZnJlZShj
b25maWduYW1lKTsNCiAgICArCWNvbmZpZ25hbWUgPSB4c3RyZHVwKG5hbWUpOw0KICAgICt9DQog
ICAgKw0KICAgICt2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNlYXJjaENvbmZpZyh2b2lkKQ0KICAg
ICt7DQogICAgKwlpZiAoIXNlYXJjaFdpbmRvdykNCiAgICArCQlzZWFyY2hXaW5kb3cgPSBuZXcg
Q29uZmlnU2VhcmNoV2luZG93KHRoaXMsICJzZWFyY2giKTsNCiAgICArCXNlYXJjaFdpbmRvdy0+
c2hvdygpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ01haW5XaW5kb3c6OmNoYW5n
ZU1lbnUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCWNvbmZpZ0xpc3QtPnNldFJv
b3RNZW51KG1lbnUpOw0KICAgICsJaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeS0+cGFyZW50ID09
ICZyb290bWVudSkNCiAgICArCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsNCiAgICAr
CWVsc2UNCiAgICArCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOw0KICAgICt9DQogICAg
Kw0KICAgICt2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICpt
ZW51KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgbWVudSAqcGFyZW50Ow0KICAgICsJQ29uZmlnTGlz
dCogbGlzdCA9IE5VTEw7DQogICAgKwlDb25maWdJdGVtKiBpdGVtOw0KICAgICsNCiAgICArCWlm
IChjb25maWdMaXN0LT5tZW51U2tpcChtZW51KSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAg
ICsJc3dpdGNoIChjb25maWdMaXN0LT5tb2RlKSB7DQogICAgKwljYXNlIHNpbmdsZU1vZGU6DQog
ICAgKwkJbGlzdCA9IGNvbmZpZ0xpc3Q7DQogICAgKwkJcGFyZW50ID0gbWVudV9nZXRfcGFyZW50
X21lbnUobWVudSk7DQogICAgKwkJaWYgKCFwYXJlbnQpDQogICAgKwkJCXJldHVybjsNCiAgICAr
CQlsaXN0LT5zZXRSb290TWVudShwYXJlbnQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBz
eW1ib2xNb2RlOg0KICAgICsJCWlmIChtZW51LT5mbGFncyAmIE1FTlVfUk9PVCkgew0KICAgICsJ
CQljb25maWdMaXN0LT5zZXRSb290TWVudShtZW51KTsNCiAgICArCQkJY29uZmlnTGlzdC0+Y2xl
YXJTZWxlY3Rpb24oKTsNCiAgICArCQkJbGlzdCA9IG1lbnVMaXN0Ow0KICAgICsJCX0gZWxzZSB7
DQogICAgKwkJCWxpc3QgPSBjb25maWdMaXN0Ow0KICAgICsJCQlwYXJlbnQgPSBtZW51X2dldF9w
YXJlbnRfbWVudShtZW51LT5wYXJlbnQpOw0KICAgICsJCQlpZiAoIXBhcmVudCkNCiAgICArCQkJ
CXJldHVybjsNCiAgICArCQkJaXRlbSA9IG1lbnVMaXN0LT5maW5kQ29uZmlnSXRlbShwYXJlbnQp
Ow0KICAgICsJCQlpZiAoaXRlbSkgew0KICAgICsJCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7
DQogICAgKwkJCQltZW51TGlzdC0+c2Nyb2xsVG9JdGVtKGl0ZW0pOw0KICAgICsJCQl9DQogICAg
KwkJCWxpc3QtPnNldFJvb3RNZW51KHBhcmVudCk7DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0K
ICAgICsJY2FzZSBmdWxsTW9kZToNCiAgICArCQlsaXN0ID0gY29uZmlnTGlzdDsNCiAgICArCQli
cmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgKw0KICAg
ICsJaWYgKGxpc3QpIHsNCiAgICArCQlpdGVtID0gbGlzdC0+ZmluZENvbmZpZ0l0ZW0obWVudSk7
DQogICAgKwkJaWYgKGl0ZW0pIHsNCiAgICArCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7DQog
ICAgKwkJCWxpc3QtPnNjcm9sbFRvSXRlbShpdGVtKTsNCiAgICArCQkJbGlzdC0+c2V0Rm9jdXMo
KTsNCiAgICArCQl9DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFp
bldpbmRvdzo6bGlzdEZvY3VzQ2hhbmdlZCh2b2lkKQ0KICAgICt7DQogICAgKwlpZiAobWVudUxp
c3QtPm1vZGUgPT0gbWVudU1vZGUpDQogICAgKwkJY29uZmlnTGlzdC0+Y2xlYXJTZWxlY3Rpb24o
KTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdNYWluV2luZG93Ojpnb0JhY2sodm9p
ZCkNCiAgICArew0KICAgICsJQ29uZmlnSXRlbSogaXRlbSwgKm9sZFNlbGVjdGlvbjsNCiAgICAr
DQogICAgKwljb25maWdMaXN0LT5zZXRQYXJlbnRNZW51KCk7DQogICAgKwlpZiAoY29uZmlnTGlz
dC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkNCiAgICArCQliYWNrQWN0aW9uLT5zZXRFbmFibGVk
KGZhbHNlKTsNCiAgICArDQogICAgKwlpZiAobWVudUxpc3QtPnNlbGVjdGVkSXRlbXMoKS5jb3Vu
dCgpID09IDApDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAgICArCWl0ZW0gPSAoQ29uZmlnSXRl
bSopbWVudUxpc3QtPnNlbGVjdGVkSXRlbXMoKS5maXJzdCgpOw0KICAgICsJb2xkU2VsZWN0aW9u
ID0gaXRlbTsNCiAgICArCXdoaWxlIChpdGVtKSB7DQogICAgKwkJaWYgKGl0ZW0tPm1lbnUgPT0g
Y29uZmlnTGlzdC0+cm9vdEVudHJ5KSB7DQogICAgKwkJCW9sZFNlbGVjdGlvbi0+c2V0U2VsZWN0
ZWQoZmFsc2UpOw0KICAgICsJCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsNCiAgICArCQkJYnJl
YWs7DQogICAgKwkJfQ0KICAgICsJCWl0ZW0gPSAoQ29uZmlnSXRlbSopaXRlbS0+cGFyZW50KCk7
DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hv
d1NpbmdsZVZpZXcodm9pZCkNCiAgICArew0KICAgICsJc2luZ2xlVmlld0FjdGlvbi0+c2V0RW5h
YmxlZChmYWxzZSk7DQogICAgKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRDaGVja2VkKHRydWUpOw0K
ICAgICsJc3BsaXRWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOw0KICAgICsJc3BsaXRWaWV3
QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArCWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFi
bGVkKHRydWUpOw0KICAgICsJZnVsbFZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOw0KICAg
ICsNCiAgICArCW1lbnVWaWV3LT5oaWRlKCk7DQogICAgKwltZW51TGlzdC0+c2V0Um9vdE1lbnUo
MCk7DQogICAgKwljb25maWdMaXN0LT5tb2RlID0gc2luZ2xlTW9kZTsNCiAgICArCWlmIChjb25m
aWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQ0KICAgICsJCWNvbmZpZ0xpc3QtPnVwZGF0
ZUxpc3RBbGwoKTsNCiAgICArCWVsc2UNCiAgICArCQljb25maWdMaXN0LT5zZXRSb290TWVudSgm
cm9vdG1lbnUpOw0KICAgICsJY29uZmlnTGlzdC0+c2V0Rm9jdXMoKTsNCiAgICArfQ0KICAgICsN
CiAgICArdm9pZCBDb25maWdNYWluV2luZG93OjpzaG93U3BsaXRWaWV3KHZvaWQpDQogICAgK3sN
CiAgICArCXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7DQogICAgKwlzaW5nbGVW
aWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArCXNwbGl0Vmlld0FjdGlvbi0+c2V0
RW5hYmxlZChmYWxzZSk7DQogICAgKwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrZWQodHJ1ZSk7
DQogICAgKwlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsNCiAgICArCWZ1bGxWaWV3
QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArDQogICAgKwljb25maWdMaXN0LT5tb2Rl
ID0gc3ltYm9sTW9kZTsNCiAgICArCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3Rt
ZW51KQ0KICAgICsJCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwoKTsNCiAgICArCWVsc2UNCiAg
ICArCQljb25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOw0KICAgICsJY29uZmlnTGlz
dC0+c2V0QWxsT3Blbih0cnVlKTsNCiAgICArCWNvbmZpZ0FwcC0+cHJvY2Vzc0V2ZW50cygpOw0K
ICAgICsJbWVudUxpc3QtPm1vZGUgPSBtZW51TW9kZTsNCiAgICArCW1lbnVMaXN0LT5zZXRSb290
TWVudSgmcm9vdG1lbnUpOw0KICAgICsJbWVudUxpc3QtPnNldEFsbE9wZW4odHJ1ZSk7DQogICAg
KwltZW51Vmlldy0+c2hvdygpOw0KICAgICsJbWVudUxpc3QtPnNldEZvY3VzKCk7DQogICAgK30N
CiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Z1bGxWaWV3KHZvaWQpDQog
ICAgK3sNCiAgICArCXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7DQogICAgKwlz
aW5nbGVWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArCXNwbGl0Vmlld0FjdGlv
bi0+c2V0RW5hYmxlZCh0cnVlKTsNCiAgICArCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZChm
YWxzZSk7DQogICAgKwlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7DQogICAgKwlm
dWxsVmlld0FjdGlvbi0+c2V0Q2hlY2tlZCh0cnVlKTsNCiAgICArDQogICAgKwltZW51Vmlldy0+
aGlkZSgpOw0KICAgICsJbWVudUxpc3QtPnNldFJvb3RNZW51KDApOw0KICAgICsJY29uZmlnTGlz
dC0+bW9kZSA9IGZ1bGxNb2RlOw0KICAgICsJaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeSA9PSAm
cm9vdG1lbnUpDQogICAgKwkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOw0KICAgICsJZWxz
ZQ0KICAgICsJCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7DQogICAgKwljb25m
aWdMaXN0LT5zZXRGb2N1cygpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBhc2sg
Zm9yIHNhdmluZyBjb25maWd1cmF0aW9uIGJlZm9yZSBxdWl0dGluZw0KICAgICsgKiBUT0RPIGFz
ayBvbmx5IHdoZW4gc29tZXRoaW5nIGNoYW5nZWQNCiAgICArICovDQogICAgK3ZvaWQgQ29uZmln
TWFpbldpbmRvdzo6Y2xvc2VFdmVudChRQ2xvc2VFdmVudCogZSkNCiAgICArew0KICAgICsJaWYg
KCFjb25mX2dldF9jaGFuZ2VkKCkpIHsNCiAgICArCQllLT5hY2NlcHQoKTsNCiAgICArCQlyZXR1
cm47DQogICAgKwl9DQogICAgKwlRTWVzc2FnZUJveCBtYigicWNvbmYiLCAiU2F2ZSBjb25maWd1
cmF0aW9uPyIsIFFNZXNzYWdlQm94OjpXYXJuaW5nLA0KICAgICsJCQlRTWVzc2FnZUJveDo6WWVz
IHwgUU1lc3NhZ2VCb3g6OkRlZmF1bHQsIFFNZXNzYWdlQm94OjpObywgUU1lc3NhZ2VCb3g6OkNh
bmNlbCB8IFFNZXNzYWdlQm94OjpFc2NhcGUpOw0KICAgICsJbWIuc2V0QnV0dG9uVGV4dChRTWVz
c2FnZUJveDo6WWVzLCAiJlNhdmUgQ2hhbmdlcyIpOw0KICAgICsJbWIuc2V0QnV0dG9uVGV4dChR
TWVzc2FnZUJveDo6Tm8sICImRGlzY2FyZCBDaGFuZ2VzIik7DQogICAgKwltYi5zZXRCdXR0b25U
ZXh0KFFNZXNzYWdlQm94OjpDYW5jZWwsICJDYW5jZWwgRXhpdCIpOw0KICAgICsJc3dpdGNoICht
Yi5leGVjKCkpIHsNCiAgICArCWNhc2UgUU1lc3NhZ2VCb3g6OlllczoNCiAgICArCQlpZiAoc2F2
ZUNvbmZpZygpKQ0KICAgICsJCQllLT5hY2NlcHQoKTsNCiAgICArCQllbHNlDQogICAgKwkJCWUt
Pmlnbm9yZSgpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBRTWVzc2FnZUJveDo6Tm86DQog
ICAgKwkJZS0+YWNjZXB0KCk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFFNZXNzYWdlQm94
OjpDYW5jZWw6DQogICAgKwkJZS0+aWdub3JlKCk7DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQog
ICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0ludHJvKHZvaWQp
DQogICAgK3sNCiAgICArCXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9ICJXZWxjb21lIHRvIHRo
ZSBxY29uZiBncmFwaGljYWwgY29uZmlndXJhdGlvbiB0b29sLlxuXG4iDQogICAgKwkJIkZvciBl
YWNoIG9wdGlvbiwgYSBibGFuayBib3ggaW5kaWNhdGVzIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVk
LCBhIGNoZWNrXG4iDQogICAgKwkJImluZGljYXRlcyBpdCBpcyBlbmFibGVkLCBhbmQgYSBkb3Qg
aW5kaWNhdGVzIHRoYXQgaXQgaXMgdG8gYmUgY29tcGlsZWRcbiINCiAgICArCQkiYXMgYSBtb2R1
bGUuICBDbGlja2luZyBvbiB0aGUgYm94IHdpbGwgY3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc3Rh
dGVzLlxuXG4iDQogICAgKwkJIklmIHlvdSBkbyBub3Qgc2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBk
ZXZpY2UgZHJpdmVyKSB0aGF0IHlvdSBiZWxpZXZlXG4iDQogICAgKwkJInNob3VsZCBiZSBwcmVz
ZW50LCB0cnkgdHVybmluZyBvbiBTaG93IEFsbCBPcHRpb25zIHVuZGVyIHRoZSBPcHRpb25zIG1l
bnUuXG4iDQogICAgKwkJIkFsdGhvdWdoIHRoZXJlIGlzIG5vIGNyb3NzIHJlZmVyZW5jZSB5ZXQg
dG8gaGVscCB5b3UgZmlndXJlIG91dCB3aGF0IG90aGVyXG4iDQogICAgKwkJIm9wdGlvbnMgbXVz
dCBiZSBlbmFibGVkIHRvIHN1cHBvcnQgdGhlIG9wdGlvbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4s
IHlvdSBjYW5cbiINCiAgICArCQkic3RpbGwgdmlldyB0aGUgaGVscCBvZiBhIGdyYXllZC1vdXQg
b3B0aW9uLlxuXG4iDQogICAgKwkJIlRvZ2dsaW5nIFNob3cgRGVidWcgSW5mbyB1bmRlciB0aGUg
T3B0aW9ucyBtZW51IHdpbGwgc2hvdyB0aGUgZGVwZW5kZW5jaWVzLFxuIg0KICAgICsJCSJ3aGlj
aCB5b3UgY2FuIHRoZW4gbWF0Y2ggYnkgZXhhbWluaW5nIG90aGVyIG9wdGlvbnMuXG5cbiI7DQog
ICAgKw0KICAgICsJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7
DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Fib3V0KHZv
aWQpDQogICAgK3sNCiAgICArCXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9ICJxY29uZiBpcyBD
b3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Llxu
Ig0KICAgICsJCSJDb3B5cmlnaHQgKEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zza2kgPGJiYXJidWxv
dnNraUBnbWFpbC5jb20+LlxuXG4iDQogICAgKwkJIkJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJl
cXVlc3QgY2FuIGFsc28gYmUgZW50ZXJlZCBhdCBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9c
biI7DQogICAgKw0KICAgICsJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIs
IHN0cik7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZVNl
dHRpbmdzKHZvaWQpDQogICAgK3sNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dp
bmRvdyB4IiwgcG9zKCkueCgpKTsNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dp
bmRvdyB5IiwgcG9zKCkueSgpKTsNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dp
bmRvdyB3aWR0aCIsIHNpemUoKS53aWR0aCgpKTsNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRW
YWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBzaXplKCkuaGVpZ2h0KCkpOw0KICAgICsNCiAgICArCVFT
dHJpbmcgZW50cnk7DQogICAgKwlzd2l0Y2goY29uZmlnTGlzdC0+bW9kZSkgew0KICAgICsJY2Fz
ZSBzaW5nbGVNb2RlIDoNCiAgICArCQllbnRyeSA9ICJzaW5nbGUiOw0KICAgICsJCWJyZWFrOw0K
ICAgICsNCiAgICArCWNhc2Ugc3ltYm9sTW9kZSA6DQogICAgKwkJZW50cnkgPSAic3BsaXQiOw0K
ICAgICsJCWJyZWFrOw0KICAgICsNCiAgICArCWNhc2UgZnVsbE1vZGUgOg0KICAgICsJCWVudHJ5
ID0gImZ1bGwiOw0KICAgICsJCWJyZWFrOw0KICAgICsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJ
YnJlYWs7DQogICAgKwl9DQogICAgKwljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9saXN0TW9k
ZSIsIGVudHJ5KTsNCiAgICArDQogICAgKwljb25maWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3Nw
bGl0MSIsIHNwbGl0MS0+c2l6ZXMoKSk7DQogICAgKwljb25maWdTZXR0aW5ncy0+d3JpdGVTaXpl
cygiL3NwbGl0MiIsIHNwbGl0Mi0+c2l6ZXMoKSk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQg
Q29uZmlnTWFpbldpbmRvdzo6Y29uZl9jaGFuZ2VkKHZvaWQpDQogICAgK3sNCiAgICArCWlmIChz
YXZlQWN0aW9uKQ0KICAgICsJCXNhdmVBY3Rpb24tPnNldEVuYWJsZWQoY29uZl9nZXRfY2hhbmdl
ZCgpKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVu
dSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsJc3RhdGlj
IGludCBtZW51X2NudCA9IDA7DQogICAgKw0KICAgICsJbWVudS0+ZmxhZ3MgfD0gTUVOVV9ST09U
Ow0KICAgICsJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0KSB7DQogICAgKwkJaWYgKGNoaWxkLT5wcm9tcHQgJiYgY2hpbGQtPnByb21wdC0+dHlwZSA9
PSBQX01FTlUpIHsNCiAgICArCQkJbWVudV9jbnQrKzsNCiAgICArCQkJZml4dXBfcm9vdG1lbnUo
Y2hpbGQpOw0KICAgICsJCQltZW51X2NudC0tOw0KICAgICsJCX0gZWxzZSBpZiAoIW1lbnVfY250
KQ0KICAgICsJCQlmaXh1cF9yb290bWVudShjaGlsZCk7DQogICAgKwl9DQogICAgK30NCiAgICAr
DQogICAgK3N0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsNCiAgICArDQogICAgK3N0YXRpYyB2
b2lkIHVzYWdlKHZvaWQpDQogICAgK3sNCiAgICArCXByaW50ZigiJXMgWy1zXSA8Y29uZmlnPlxu
IiwgcHJvZ25hbWUpOw0KICAgICsJZXhpdCgwKTsNCiAgICArfQ0KICAgICsNCiAgICAraW50IG1h
aW4oaW50IGFjLCBjaGFyKiogYXYpDQogICAgK3sNCiAgICArCUNvbmZpZ01haW5XaW5kb3cqIHY7
DQogICAgKwljb25zdCBjaGFyICpuYW1lOw0KICAgICsNCiAgICArCXByb2duYW1lID0gYXZbMF07
DQogICAgKwljb25maWdBcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFjLCBhdik7DQogICAgKwlpZiAo
YWMgPiAxICYmIGF2WzFdWzBdID09ICctJykgew0KICAgICsJCXN3aXRjaCAoYXZbMV1bMV0pIHsN
CiAgICArCQljYXNlICdzJzoNCiAgICArCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxM
KTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAnaCc6DQogICAgKwkJY2FzZSAnPyc6DQog
ICAgKwkJCXVzYWdlKCk7DQogICAgKwkJfQ0KICAgICsJCW5hbWUgPSBhdlsyXTsNCiAgICArCX0g
ZWxzZQ0KICAgICsJCW5hbWUgPSBhdlsxXTsNCiAgICArCWlmICghbmFtZSkNCiAgICArCQl1c2Fn
ZSgpOw0KICAgICsNCiAgICArCWNvbmZfcGFyc2UobmFtZSk7DQogICAgKwlmaXh1cF9yb290bWVu
dSgmcm9vdG1lbnUpOw0KICAgICsJY29uZl9yZWFkKE5VTEwpOw0KICAgICsJLy96Y29uZmR1bXAo
c3Rkb3V0KTsNCiAgICArDQogICAgKwljb25maWdTZXR0aW5ncyA9IG5ldyBDb25maWdTZXR0aW5n
cygpOw0KICAgICsJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAoIi9rY29uZmlnL3Fjb25mIik7
DQogICAgKwl2ID0gbmV3IENvbmZpZ01haW5XaW5kb3coKTsNCiAgICArDQogICAgKwkvL3pjb25m
ZHVtcChzdGRvdXQpOw0KICAgICsJY29uZmlnQXBwLT5jb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFM
KGxhc3RXaW5kb3dDbG9zZWQoKSksIFNMT1QocXVpdCgpKSk7DQogICAgKwljb25maWdBcHAtPmNv
bm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIHYsIFNMT1Qoc2F2ZVNldHRp
bmdzKCkpKTsNCiAgICArCXYtPnNob3coKTsNCiAgICArCWNvbmZpZ0FwcC0+ZXhlYygpOw0KICAg
ICsNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgICsJZGVsZXRlIGNvbmZp
Z1NldHRpbmdzOw0KICAgICsJZGVsZXRlIHY7DQogICAgKwlkZWxldGUgY29uZmlnQXBwOw0KICAg
ICsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvcWNvbmYuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuaA0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNDViZmU5Yg0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmgNCiAgICBAQCAtMCww
ICsxLDMzMSBAQA0KICAgICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0K
ICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxA
bGludXgtbTY4ay5vcmc+DQogICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPFFUZXh0QnJv
d3Nlcj4NCiAgICArI2luY2x1ZGUgPFFUcmVlV2lkZ2V0Pg0KICAgICsjaW5jbHVkZSA8UU1haW5X
aW5kb3c+DQogICAgKyNpbmNsdWRlIDxRSGVhZGVyVmlldz4NCiAgICArI2luY2x1ZGUgPHFzZXR0
aW5ncy5oPg0KICAgICsjaW5jbHVkZSA8UVB1c2hCdXR0b24+DQogICAgKyNpbmNsdWRlIDxRU2V0
dGluZ3M+DQogICAgKyNpbmNsdWRlIDxRTGluZUVkaXQ+DQogICAgKyNpbmNsdWRlIDxRU3BsaXR0
ZXI+DQogICAgKyNpbmNsdWRlIDxRQ2hlY2tCb3g+DQogICAgKyNpbmNsdWRlIDxRRGlhbG9nPg0K
ICAgICsjaW5jbHVkZSAiZXhwci5oIg0KICAgICsNCiAgICArY2xhc3MgQ29uZmlnVmlldzsNCiAg
ICArY2xhc3MgQ29uZmlnTGlzdDsNCiAgICArY2xhc3MgQ29uZmlnSXRlbTsNCiAgICArY2xhc3Mg
Q29uZmlnTGluZUVkaXQ7DQogICAgK2NsYXNzIENvbmZpZ01haW5XaW5kb3c7DQogICAgKw0KICAg
ICtjbGFzcyBDb25maWdTZXR0aW5ncyA6IHB1YmxpYyBRU2V0dGluZ3Mgew0KICAgICtwdWJsaWM6
DQogICAgKwlDb25maWdTZXR0aW5ncygpOw0KICAgICsJUUxpc3Q8aW50PiByZWFkU2l6ZXMoY29u
c3QgUVN0cmluZyYga2V5LCBib29sICpvayk7DQogICAgKwlib29sIHdyaXRlU2l6ZXMoY29uc3Qg
UVN0cmluZyYga2V5LCBjb25zdCBRTGlzdDxpbnQ+JiB2YWx1ZSk7DQogICAgK307DQogICAgKw0K
ICAgICtlbnVtIGNvbElkeCB7DQogICAgKwlwcm9tcHRDb2xJZHgsIG5hbWVDb2xJZHgsIG5vQ29s
SWR4LCBtb2RDb2xJZHgsIHllc0NvbElkeCwgZGF0YUNvbElkeCwgY29sTnINCiAgICArfTsNCiAg
ICArZW51bSBsaXN0TW9kZSB7DQogICAgKwlzaW5nbGVNb2RlLCBtZW51TW9kZSwgc3ltYm9sTW9k
ZSwgZnVsbE1vZGUsIGxpc3RNb2RlDQogICAgK307DQogICAgK2VudW0gb3B0aW9uTW9kZSB7DQog
ICAgKwlub3JtYWxPcHQgPSAwLCBhbGxPcHQsIHByb21wdE9wdA0KICAgICt9Ow0KICAgICsNCiAg
ICArY2xhc3MgQ29uZmlnTGlzdCA6IHB1YmxpYyBRVHJlZVdpZGdldCB7DQogICAgKwlRX09CSkVD
VA0KICAgICsJdHlwZWRlZiBjbGFzcyBRVHJlZVdpZGdldCBQYXJlbnQ7DQogICAgK3B1YmxpYzoN
CiAgICArCUNvbmZpZ0xpc3QoQ29uZmlnVmlldyogcCwgY29uc3QgY2hhciAqbmFtZSA9IDApOw0K
ICAgICsJdm9pZCByZWluaXQodm9pZCk7DQogICAgKwlDb25maWdWaWV3KiBwYXJlbnQodm9pZCkg
Y29uc3QNCiAgICArCXsNCiAgICArCQlyZXR1cm4gKENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50
KCk7DQogICAgKwl9DQogICAgKwlDb25maWdJdGVtKiBmaW5kQ29uZmlnSXRlbShzdHJ1Y3QgbWVu
dSAqKTsNCiAgICArDQogICAgK3Byb3RlY3RlZDoNCiAgICArCXZvaWQga2V5UHJlc3NFdmVudChR
S2V5RXZlbnQgKmUpOw0KICAgICsJdm9pZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQgKmUp
Ow0KICAgICsJdm9pZCBtb3VzZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCAqZSk7DQogICAgKwl2
b2lkIG1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50ICplKTsNCiAgICArCXZvaWQgbW91c2VEb3Vi
bGVDbGlja0V2ZW50KFFNb3VzZUV2ZW50ICplKTsNCiAgICArCXZvaWQgZm9jdXNJbkV2ZW50KFFG
b2N1c0V2ZW50ICplKTsNCiAgICArCXZvaWQgY29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVF
dmVudCAqZSk7DQogICAgKw0KICAgICtwdWJsaWMgc2xvdHM6DQogICAgKwl2b2lkIHNldFJvb3RN
ZW51KHN0cnVjdCBtZW51ICptZW51KTsNCiAgICArDQogICAgKwl2b2lkIHVwZGF0ZUxpc3QoQ29u
ZmlnSXRlbSAqaXRlbSk7DQogICAgKwl2b2lkIHNldFZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0sIHRy
aXN0YXRlIHZhbCk7DQogICAgKwl2b2lkIGNoYW5nZVZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0pOw0K
ICAgICsJdm9pZCB1cGRhdGVTZWxlY3Rpb24odm9pZCk7DQogICAgKwl2b2lkIHNhdmVTZXR0aW5n
cyh2b2lkKTsNCiAgICArc2lnbmFsczoNCiAgICArCXZvaWQgbWVudUNoYW5nZWQoc3RydWN0IG1l
bnUgKm1lbnUpOw0KICAgICsJdm9pZCBtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKm1lbnUpOw0K
ICAgICsJdm9pZCBwYXJlbnRTZWxlY3RlZCh2b2lkKTsNCiAgICArCXZvaWQgZ290Rm9jdXMoc3Ry
dWN0IG1lbnUgKik7DQogICAgKw0KICAgICtwdWJsaWM6DQogICAgKwl2b2lkIHVwZGF0ZUxpc3RB
bGwodm9pZCkNCiAgICArCXsNCiAgICArCQl1cGRhdGVBbGwgPSB0cnVlOw0KICAgICsJCXVwZGF0
ZUxpc3QoTlVMTCk7DQogICAgKwkJdXBkYXRlQWxsID0gZmFsc2U7DQogICAgKwl9DQogICAgKwlD
b25maWdMaXN0KiBsaXN0VmlldygpDQogICAgKwl7DQogICAgKwkJcmV0dXJuIHRoaXM7DQogICAg
Kwl9DQogICAgKwlDb25maWdJdGVtKiBmaXJzdENoaWxkKCkgY29uc3QNCiAgICArCXsNCiAgICAr
CQlyZXR1cm4gKENvbmZpZ0l0ZW0gKiljaGlsZHJlbigpLmZpcnN0KCk7DQogICAgKwl9DQogICAg
Kwl2b2lkIGFkZENvbHVtbihjb2xJZHggaWR4KQ0KICAgICsJew0KICAgICsJCXNob3dDb2x1bW4o
aWR4KTsNCiAgICArCX0NCiAgICArCXZvaWQgcmVtb3ZlQ29sdW1uKGNvbElkeCBpZHgpDQogICAg
Kwl7DQogICAgKwkJaGlkZUNvbHVtbihpZHgpOw0KICAgICsJfQ0KICAgICsJdm9pZCBzZXRBbGxP
cGVuKGJvb2wgb3Blbik7DQogICAgKwl2b2lkIHNldFBhcmVudE1lbnUodm9pZCk7DQogICAgKw0K
ICAgICsJYm9vbCBtZW51U2tpcChzdHJ1Y3QgbWVudSAqKTsNCiAgICArDQogICAgKwl2b2lkIHVw
ZGF0ZU1lbnVMaXN0KENvbmZpZ0l0ZW0gKnBhcmVudCwgc3RydWN0IG1lbnUqKTsNCiAgICArCXZv
aWQgdXBkYXRlTWVudUxpc3QoQ29uZmlnTGlzdCAqcGFyZW50LCBzdHJ1Y3QgbWVudSopOw0KICAg
ICsNCiAgICArCWJvb2wgdXBkYXRlQWxsOw0KICAgICsNCiAgICArCVFQaXhtYXAgc3ltYm9sWWVz
UGl4LCBzeW1ib2xNb2RQaXgsIHN5bWJvbE5vUGl4Ow0KICAgICsJUVBpeG1hcCBjaG9pY2VZZXNQ
aXgsIGNob2ljZU5vUGl4Ow0KICAgICsJUVBpeG1hcCBtZW51UGl4LCBtZW51SW52UGl4LCBtZW51
QmFja1BpeCwgdm9pZFBpeDsNCiAgICArDQogICAgKwlib29sIHNob3dOYW1lLCBzaG93UmFuZ2Us
IHNob3dEYXRhOw0KICAgICsJZW51bSBsaXN0TW9kZSBtb2RlOw0KICAgICsJZW51bSBvcHRpb25N
b2RlIG9wdE1vZGU7DQogICAgKwlzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5Ow0KICAgICsJUVBhbGV0
dGUgZGlzYWJsZWRDb2xvckdyb3VwOw0KICAgICsJUVBhbGV0dGUgaW5hY3RpdmVkQ29sb3JHcm91
cDsNCiAgICArCVFNZW51KiBoZWFkZXJQb3B1cDsNCiAgICArfTsNCiAgICArDQogICAgK2NsYXNz
IENvbmZpZ0l0ZW0gOiBwdWJsaWMgUVRyZWVXaWRnZXRJdGVtIHsNCiAgICArCXR5cGVkZWYgY2xh
c3MgUVRyZWVXaWRnZXRJdGVtIFBhcmVudDsNCiAgICArcHVibGljOg0KICAgICsJQ29uZmlnSXRl
bShDb25maWdMaXN0ICpwYXJlbnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBzdHJ1Y3QgbWVudSAqbSwg
Ym9vbCB2KQ0KICAgICsJOiBQYXJlbnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51
KG0pLCB2aXNpYmxlKHYpLCBnb1BhcmVudChmYWxzZSkNCiAgICArCXsNCiAgICArCQlpbml0KCk7
DQogICAgKwl9DQogICAgKwlDb25maWdJdGVtKENvbmZpZ0l0ZW0gKnBhcmVudCwgQ29uZmlnSXRl
bSAqYWZ0ZXIsIHN0cnVjdCBtZW51ICptLCBib29sIHYpDQogICAgKwk6IFBhcmVudChwYXJlbnQs
IGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUobSksIHZpc2libGUodiksIGdvUGFyZW50KGZhbHNl
KQ0KICAgICsJew0KICAgICsJCWluaXQoKTsNCiAgICArCX0NCiAgICArCUNvbmZpZ0l0ZW0oQ29u
ZmlnTGlzdCAqcGFyZW50LCBDb25maWdJdGVtICphZnRlciwgYm9vbCB2KQ0KICAgICsJOiBQYXJl
bnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KDApLCB2aXNpYmxlKHYpLCBnb1Bh
cmVudCh0cnVlKQ0KICAgICsJew0KICAgICsJCWluaXQoKTsNCiAgICArCX0NCiAgICArCX5Db25m
aWdJdGVtKHZvaWQpOw0KICAgICsJdm9pZCBpbml0KHZvaWQpOw0KICAgICsJdm9pZCBva1JlbmFt
ZShpbnQgY29sKTsNCiAgICArCXZvaWQgdXBkYXRlTWVudSh2b2lkKTsNCiAgICArCXZvaWQgdGVz
dFVwZGF0ZU1lbnUoYm9vbCB2KTsNCiAgICArCUNvbmZpZ0xpc3QqIGxpc3RWaWV3KCkgY29uc3QN
CiAgICArCXsNCiAgICArCQlyZXR1cm4gKENvbmZpZ0xpc3QqKVBhcmVudDo6dHJlZVdpZGdldCgp
Ow0KICAgICsJfQ0KICAgICsJQ29uZmlnSXRlbSogZmlyc3RDaGlsZCgpIGNvbnN0DQogICAgKwl7
DQogICAgKwkJcmV0dXJuIChDb25maWdJdGVtICopUGFyZW50OjpjaGlsZCgwKTsNCiAgICArCX0N
CiAgICArCUNvbmZpZ0l0ZW0qIG5leHRTaWJsaW5nKCkNCiAgICArCXsNCiAgICArCQlDb25maWdJ
dGVtICpyZXQgPSBOVUxMOw0KICAgICsJCUNvbmZpZ0l0ZW0gKl9wYXJlbnQgPSAoQ29uZmlnSXRl
bSAqKXBhcmVudCgpOw0KICAgICsNCiAgICArCQlpZihfcGFyZW50KSB7DQogICAgKwkJCXJldCA9
IChDb25maWdJdGVtICopX3BhcmVudC0+Y2hpbGQoX3BhcmVudC0+aW5kZXhPZkNoaWxkKHRoaXMp
KzEpOw0KICAgICsJCX0gZWxzZSB7DQogICAgKwkJCVFUcmVlV2lkZ2V0ICpfdHJlZVdpZGdldCA9
IHRyZWVXaWRnZXQoKTsNCiAgICArCQkJcmV0ID0gKENvbmZpZ0l0ZW0gKilfdHJlZVdpZGdldC0+
dG9wTGV2ZWxJdGVtKF90cmVlV2lkZ2V0LT5pbmRleE9mVG9wTGV2ZWxJdGVtKHRoaXMpKzEpOw0K
ICAgICsJCX0NCiAgICArDQogICAgKwkJcmV0dXJuIHJldDsNCiAgICArCX0NCiAgICArCXZvaWQg
c2V0VGV4dChjb2xJZHggaWR4LCBjb25zdCBRU3RyaW5nJiB0ZXh0KQ0KICAgICsJew0KICAgICsJ
CVBhcmVudDo6c2V0VGV4dChpZHgsIHRleHQpOw0KICAgICsJfQ0KICAgICsJUVN0cmluZyB0ZXh0
KGNvbElkeCBpZHgpIGNvbnN0DQogICAgKwl7DQogICAgKwkJcmV0dXJuIFBhcmVudDo6dGV4dChp
ZHgpOw0KICAgICsJfQ0KICAgICsJdm9pZCBzZXRQaXhtYXAoY29sSWR4IGlkeCwgY29uc3QgUUlj
b24gJmljb24pDQogICAgKwl7DQogICAgKwkJUGFyZW50OjpzZXRJY29uKGlkeCwgaWNvbik7DQog
ICAgKwl9DQogICAgKwljb25zdCBRSWNvbiBwaXhtYXAoY29sSWR4IGlkeCkgY29uc3QNCiAgICAr
CXsNCiAgICArCQlyZXR1cm4gaWNvbihpZHgpOw0KICAgICsJfQ0KICAgICsJLy8gVE9ETzogSW1w
bGVtZW50IHBhaW50Q2VsbA0KICAgICsNCiAgICArCUNvbmZpZ0l0ZW0qIG5leHRJdGVtOw0KICAg
ICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAgKwlib29sIHZpc2libGU7DQogICAgKwlib29sIGdv
UGFyZW50Ow0KICAgICt9Ow0KICAgICsNCiAgICArY2xhc3MgQ29uZmlnTGluZUVkaXQgOiBwdWJs
aWMgUUxpbmVFZGl0IHsNCiAgICArCVFfT0JKRUNUDQogICAgKwl0eXBlZGVmIGNsYXNzIFFMaW5l
RWRpdCBQYXJlbnQ7DQogICAgK3B1YmxpYzoNCiAgICArCUNvbmZpZ0xpbmVFZGl0KENvbmZpZ1Zp
ZXcqIHBhcmVudCk7DQogICAgKwlDb25maWdWaWV3KiBwYXJlbnQodm9pZCkgY29uc3QNCiAgICAr
CXsNCiAgICArCQlyZXR1cm4gKENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50KCk7DQogICAgKwl9
DQogICAgKwl2b2lkIHNob3coQ29uZmlnSXRlbSAqaSk7DQogICAgKwl2b2lkIGtleVByZXNzRXZl
bnQoUUtleUV2ZW50ICplKTsNCiAgICArDQogICAgK3B1YmxpYzoNCiAgICArCUNvbmZpZ0l0ZW0g
Kml0ZW07DQogICAgK307DQogICAgKw0KICAgICtjbGFzcyBDb25maWdWaWV3IDogcHVibGljIFFX
aWRnZXQgew0KICAgICsJUV9PQkpFQ1QNCiAgICArCXR5cGVkZWYgY2xhc3MgUVdpZGdldCBQYXJl
bnQ7DQogICAgK3B1YmxpYzoNCiAgICArCUNvbmZpZ1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25z
dCBjaGFyICpuYW1lID0gMCk7DQogICAgKwl+Q29uZmlnVmlldyh2b2lkKTsNCiAgICArCXN0YXRp
YyB2b2lkIHVwZGF0ZUxpc3QoQ29uZmlnSXRlbSogaXRlbSk7DQogICAgKwlzdGF0aWMgdm9pZCB1
cGRhdGVMaXN0QWxsKHZvaWQpOw0KICAgICsNCiAgICArCWJvb2wgc2hvd05hbWUodm9pZCkgY29u
c3QgeyByZXR1cm4gbGlzdC0+c2hvd05hbWU7IH0NCiAgICArCWJvb2wgc2hvd1JhbmdlKHZvaWQp
IGNvbnN0IHsgcmV0dXJuIGxpc3QtPnNob3dSYW5nZTsgfQ0KICAgICsJYm9vbCBzaG93RGF0YSh2
b2lkKSBjb25zdCB7IHJldHVybiBsaXN0LT5zaG93RGF0YTsgfQ0KICAgICtwdWJsaWMgc2xvdHM6
DQogICAgKwl2b2lkIHNldFNob3dOYW1lKGJvb2wpOw0KICAgICsJdm9pZCBzZXRTaG93UmFuZ2Uo
Ym9vbCk7DQogICAgKwl2b2lkIHNldFNob3dEYXRhKGJvb2wpOw0KICAgICsJdm9pZCBzZXRPcHRp
b25Nb2RlKFFBY3Rpb24gKik7DQogICAgK3NpZ25hbHM6DQogICAgKwl2b2lkIHNob3dOYW1lQ2hh
bmdlZChib29sKTsNCiAgICArCXZvaWQgc2hvd1JhbmdlQ2hhbmdlZChib29sKTsNCiAgICArCXZv
aWQgc2hvd0RhdGFDaGFuZ2VkKGJvb2wpOw0KICAgICtwdWJsaWM6DQogICAgKwlDb25maWdMaXN0
KiBsaXN0Ow0KICAgICsJQ29uZmlnTGluZUVkaXQqIGxpbmVFZGl0Ow0KICAgICsNCiAgICArCXN0
YXRpYyBDb25maWdWaWV3KiB2aWV3TGlzdDsNCiAgICArCUNvbmZpZ1ZpZXcqIG5leHRWaWV3Ow0K
ICAgICsNCiAgICArCXN0YXRpYyBRQWN0aW9uICpzaG93Tm9ybWFsQWN0aW9uOw0KICAgICsJc3Rh
dGljIFFBY3Rpb24gKnNob3dBbGxBY3Rpb247DQogICAgKwlzdGF0aWMgUUFjdGlvbiAqc2hvd1By
b21wdEFjdGlvbjsNCiAgICArfTsNCiAgICArDQogICAgK2NsYXNzIENvbmZpZ0luZm9WaWV3IDog
cHVibGljIFFUZXh0QnJvd3NlciB7DQogICAgKwlRX09CSkVDVA0KICAgICsJdHlwZWRlZiBjbGFz
cyBRVGV4dEJyb3dzZXIgUGFyZW50Ow0KICAgICtwdWJsaWM6DQogICAgKwlDb25maWdJbmZvVmll
dyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsNCiAgICArCWJvb2wgc2hv
d0RlYnVnKHZvaWQpIGNvbnN0IHsgcmV0dXJuIF9zaG93RGVidWc7IH0NCiAgICArDQogICAgK3B1
YmxpYyBzbG90czoNCiAgICArCXZvaWQgc2V0SW5mbyhzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAg
Kwl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsNCiAgICArCXZvaWQgc2V0U2hvd0RlYnVnKGJvb2wp
Ow0KICAgICsNCiAgICArc2lnbmFsczoNCiAgICArCXZvaWQgc2hvd0RlYnVnQ2hhbmdlZChib29s
KTsNCiAgICArCXZvaWQgbWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopOw0KICAgICsNCiAgICAr
cHJvdGVjdGVkOg0KICAgICsJdm9pZCBzeW1ib2xJbmZvKHZvaWQpOw0KICAgICsJdm9pZCBtZW51
SW5mbyh2b2lkKTsNCiAgICArCVFTdHJpbmcgZGVidWdfaW5mbyhzdHJ1Y3Qgc3ltYm9sICpzeW0p
Ow0KICAgICsJc3RhdGljIFFTdHJpbmcgcHJpbnRfZmlsdGVyKGNvbnN0IFFTdHJpbmcgJnN0cik7
DQogICAgKwlzdGF0aWMgdm9pZCBleHByX3ByaW50X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5
bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpOw0KICAgICsJUU1lbnUgKmNyZWF0ZVN0YW5kYXJk
Q29udGV4dE1lbnUoY29uc3QgUVBvaW50ICYgcG9zKTsNCiAgICArCXZvaWQgY29udGV4dE1lbnVF
dmVudChRQ29udGV4dE1lbnVFdmVudCAqZSk7DQogICAgKw0KICAgICsJc3RydWN0IHN5bWJvbCAq
c3ltOw0KICAgICsJc3RydWN0IG1lbnUgKl9tZW51Ow0KICAgICsJYm9vbCBfc2hvd0RlYnVnOw0K
ICAgICt9Ow0KICAgICsNCiAgICArY2xhc3MgQ29uZmlnU2VhcmNoV2luZG93IDogcHVibGljIFFE
aWFsb2cgew0KICAgICsJUV9PQkpFQ1QNCiAgICArCXR5cGVkZWYgY2xhc3MgUURpYWxvZyBQYXJl
bnQ7DQogICAgK3B1YmxpYzoNCiAgICArCUNvbmZpZ1NlYXJjaFdpbmRvdyhDb25maWdNYWluV2lu
ZG93KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsNCiAgICArDQogICAgK3B1YmxpYyBz
bG90czoNCiAgICArCXZvaWQgc2F2ZVNldHRpbmdzKHZvaWQpOw0KICAgICsJdm9pZCBzZWFyY2go
dm9pZCk7DQogICAgKw0KICAgICtwcm90ZWN0ZWQ6DQogICAgKwlRTGluZUVkaXQqIGVkaXRGaWVs
ZDsNCiAgICArCVFQdXNoQnV0dG9uKiBzZWFyY2hCdXR0b247DQogICAgKwlRU3BsaXR0ZXIqIHNw
bGl0Ow0KICAgICsJQ29uZmlnVmlldyogbGlzdDsNCiAgICArCUNvbmZpZ0luZm9WaWV3KiBpbmZv
Ow0KICAgICsNCiAgICArCXN0cnVjdCBzeW1ib2wgKipyZXN1bHQ7DQogICAgK307DQogICAgKw0K
ICAgICtjbGFzcyBDb25maWdNYWluV2luZG93IDogcHVibGljIFFNYWluV2luZG93IHsNCiAgICAr
CVFfT0JKRUNUDQogICAgKw0KICAgICsJY2hhciAqY29uZmlnbmFtZTsNCiAgICArCXN0YXRpYyBR
QWN0aW9uICpzYXZlQWN0aW9uOw0KICAgICsJc3RhdGljIHZvaWQgY29uZl9jaGFuZ2VkKHZvaWQp
Ow0KICAgICtwdWJsaWM6DQogICAgKwlDb25maWdNYWluV2luZG93KHZvaWQpOw0KICAgICtwdWJs
aWMgc2xvdHM6DQogICAgKwl2b2lkIGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKik7DQogICAgKwl2
b2lkIHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICopOw0KICAgICsJdm9pZCBsaXN0Rm9jdXNDaGFu
Z2VkKHZvaWQpOw0KICAgICsJdm9pZCBnb0JhY2sodm9pZCk7DQogICAgKwl2b2lkIGxvYWRDb25m
aWcodm9pZCk7DQogICAgKwlib29sIHNhdmVDb25maWcodm9pZCk7DQogICAgKwl2b2lkIHNhdmVD
b25maWdBcyh2b2lkKTsNCiAgICArCXZvaWQgc2VhcmNoQ29uZmlnKHZvaWQpOw0KICAgICsJdm9p
ZCBzaG93U2luZ2xlVmlldyh2b2lkKTsNCiAgICArCXZvaWQgc2hvd1NwbGl0Vmlldyh2b2lkKTsN
CiAgICArCXZvaWQgc2hvd0Z1bGxWaWV3KHZvaWQpOw0KICAgICsJdm9pZCBzaG93SW50cm8odm9p
ZCk7DQogICAgKwl2b2lkIHNob3dBYm91dCh2b2lkKTsNCiAgICArCXZvaWQgc2F2ZVNldHRpbmdz
KHZvaWQpOw0KICAgICsNCiAgICArcHJvdGVjdGVkOg0KICAgICsJdm9pZCBjbG9zZUV2ZW50KFFD
bG9zZUV2ZW50ICplKTsNCiAgICArDQogICAgKwlDb25maWdTZWFyY2hXaW5kb3cgKnNlYXJjaFdp
bmRvdzsNCiAgICArCUNvbmZpZ1ZpZXcgKm1lbnVWaWV3Ow0KICAgICsJQ29uZmlnTGlzdCAqbWVu
dUxpc3Q7DQogICAgKwlDb25maWdWaWV3ICpjb25maWdWaWV3Ow0KICAgICsJQ29uZmlnTGlzdCAq
Y29uZmlnTGlzdDsNCiAgICArCUNvbmZpZ0luZm9WaWV3ICpoZWxwVGV4dDsNCiAgICArCVFUb29s
QmFyICp0b29sQmFyOw0KICAgICsJUUFjdGlvbiAqYmFja0FjdGlvbjsNCiAgICArCVFBY3Rpb24g
KnNpbmdsZVZpZXdBY3Rpb247DQogICAgKwlRQWN0aW9uICpzcGxpdFZpZXdBY3Rpb247DQogICAg
KwlRQWN0aW9uICpmdWxsVmlld0FjdGlvbjsNCiAgICArCVFTcGxpdHRlciAqc3BsaXQxOw0KICAg
ICsJUVNwbGl0dGVyICpzcGxpdDI7DQogICAgK307DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwgYi9zdXBwb3J0L2tjb25maWcubmV3L3N0
cmVhbWxpbmVfY29uZmlnLnBsDQogICAgbmV3IGZpbGUgbW9kZSAxMDA3NTUNCiAgICBpbmRleCAw
MDAwMDAwLi4wOGQ3NmQ3DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwNCiAgICBAQCAtMCwwICsxLDY4MiBAQA0KICAg
ICsjIS91c3IvYmluL2VudiBwZXJsDQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjANCiAgICArIw0KICAgICsjIENvcHlyaWdodCAyMDA1LTIwMDkgLSBTdGV2ZW4gUm9zdGVk
dA0KICAgICsjDQogICAgKyMgIEl0J3Mgc2ltcGxlIGVub3VnaCB0byBmaWd1cmUgb3V0IGhvdyB0
aGlzIHdvcmtzLg0KICAgICsjICBJZiBub3QsIHRoZW4geW91IGNhbiBhc2sgbWUgYXQgc3RyaXBj
b25maWdAZ29vZG1pcy5vcmcNCiAgICArIw0KICAgICsjIFdoYXQgaXQgZG9lcz8NCiAgICArIw0K
ICAgICsjICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIGEgTGludXgga2VybmVsIGZyb20gYSBkaXN0
cmlidXRpb24NCiAgICArIyAgIHRoYXQgdHVybnMgb24gd2F5IHRvbyBtYW55IG1vZHVsZXMgdGhh
biB5b3UgbmVlZCwgYW5kDQogICAgKyMgICB5b3Ugb25seSB3YW50IHRoZSBtb2R1bGVzIHlvdSB1
c2UsIHRoZW4gdGhpcyBwcm9ncmFtDQogICAgKyMgICBpcyBwZXJmZWN0IGZvciB5b3UuDQogICAg
KyMNCiAgICArIyAgIEl0IGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byB0dXJuIG9mZiBhbGwgdGhl
IG1vZHVsZXMgdGhhdCBhcmUNCiAgICArIyAgIG5vdCBsb2FkZWQgb24geW91ciBzeXN0ZW0uDQog
ICAgKyMNCiAgICArIyBIb3d0bzoNCiAgICArIw0KICAgICsjICAxLiBCb290IHVwIHRoZSBrZXJu
ZWwgdGhhdCB5b3Ugd2FudCB0byBzdHJlYW0gbGluZSB0aGUgY29uZmlnIG9uLg0KICAgICsjICAy
LiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc291cmNlIG9m
IHRoZQ0KICAgICsjICAgICAgIGtlcm5lbCB0aGF0IHlvdSBqdXN0IGJvb3RlZC4NCiAgICArIyAg
My4gQ29weSB0aGUgY29uZmlndXJhdG9uIGZpbGUgdG8gdGhpcyBkaXJlY3RvcnkgYXMgLmNvbmZp
Zw0KICAgICsjICA0LiBIYXZlIGFsbCB5b3VyIGRldmljZXMgdGhhdCB5b3UgbmVlZCBtb2R1bGVz
IGZvciBjb25uZWN0ZWQgYW5kDQogICAgKyMgICAgICBvcGVyYXRpb25hbCAobWFrZSBzdXJlIHRo
YXQgdGhlaXIgY29ycmVzcG9uZGluZyBtb2R1bGVzIGFyZSBsb2FkZWQpDQogICAgKyMgIDUuIFJ1
biB0aGlzIHNjcmlwdCByZWRpcmVjdGluZyB0aGUgb3V0cHV0IHRvIHNvbWUgb3RoZXIgZmlsZQ0K
ICAgICsjICAgICAgIGxpa2UgY29uZmlnX3N0cmlwLg0KICAgICsjICA2LiBCYWNrIHVwIHlvdXIg
b2xkIGNvbmZpZyAoaWYgeW91IHdhbnQgdG9vKS4NCiAgICArIyAgNy4gY29weSB0aGUgY29uZmln
X3N0cmlwIGZpbGUgdG8gLmNvbmZpZw0KICAgICsjICA4LiBSdW4gIm1ha2Ugb2xkY29uZmlnIg0K
ICAgICsjDQogICAgKyMgIE5vdyB5b3VyIGtlcm5lbCBpcyByZWFkeSB0byBiZSBidWlsdCB3aXRo
IG9ubHkgdGhlIG1vZHVsZXMgdGhhdA0KICAgICsjICBhcmUgbG9hZGVkLg0KICAgICsjDQogICAg
KyMgSGVyZSdzIHdoYXQgSSBkaWQgd2l0aCBteSBEZWJpYW4gZGlzdHJpYnV0aW9uLg0KICAgICsj
DQogICAgKyMgICAgY2QgL3Vzci9zcmMvbGludXgtMi42LjEwDQogICAgKyMgICAgY3AgL2Jvb3Qv
Y29uZmlnLTIuNi4xMC0xLTY4Ni1zbXAgLmNvbmZpZw0KICAgICsjICAgIH4vYmluL3N0cmVhbWxp
bmVfY29uZmlnID4gY29uZmlnX3N0cmlwDQogICAgKyMgICAgbXYgLmNvbmZpZyBjb25maWdfc2F2
DQogICAgKyMgICAgbXYgY29uZmlnX3N0cmlwIC5jb25maWcNCiAgICArIyAgICBtYWtlIG9sZGNv
bmZpZw0KICAgICsjDQogICAgK3VzZSB3YXJuaW5nczsNCiAgICArdXNlIHN0cmljdDsNCiAgICAr
dXNlIEdldG9wdDo6TG9uZzsNCiAgICArDQogICAgKyMgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJp
YWJsZSBMT0NBTE1PRENPTkZJR19ERUJVRyB0byBnZXQNCiAgICArIyBkZWJ1ZyBvdXRwdXQuDQog
ICAgK215ICRkZWJ1Z3ByaW50ID0gMDsNCiAgICArJGRlYnVncHJpbnQgPSAxIGlmIChkZWZpbmVk
KCRFTlZ7TE9DQUxNT0RDT05GSUdfREVCVUd9KSk7DQogICAgKw0KICAgICtzdWIgZHByaW50IHsN
CiAgICArICAgIHJldHVybiBpZiAoISRkZWJ1Z3ByaW50KTsNCiAgICArICAgIHByaW50IFNUREVS
UiBAXzsNCiAgICArfQ0KICAgICsNCiAgICArbXkgJGNvbmZpZyA9ICIuY29uZmlnIjsNCiAgICAr
DQogICAgK215ICR1bmFtZSA9IGB1bmFtZSAtcmA7DQogICAgK2Nob21wICR1bmFtZTsNCiAgICAr
DQogICAgK215IEBzZWFyY2hjb25maWdzID0gKA0KICAgICsJew0KICAgICsJICAgICJmaWxlIiA9
PiAiLmNvbmZpZyIsDQogICAgKwkgICAgImV4ZWMiID0+ICJjYXQiLA0KICAgICsJfSwNCiAgICAr
CXsNCiAgICArCSAgICAiZmlsZSIgPT4gIi9wcm9jL2NvbmZpZy5neiIsDQogICAgKwkgICAgImV4
ZWMiID0+ICJ6Y2F0IiwNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkgICAgImZpbGUiID0+ICIv
Ym9vdC9jb25maWctJHVuYW1lIiwNCiAgICArCSAgICAiZXhlYyIgPT4gImNhdCIsDQogICAgKwl9
LA0KICAgICsJew0KICAgICsJICAgICJmaWxlIiA9PiAiL2Jvb3Qvdm1saW51ei0kdW5hbWUiLA0K
ICAgICsJICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICArCSAg
ICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsDQogICAgKwl9LA0KICAgICsJ
ew0KICAgICsJICAgICJmaWxlIiA9PiAidm1saW51eCIsDQogICAgKwkgICAgImV4ZWMiID0+ICJz
Y3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgICsJICAgICJ0ZXN0IiA9PiAic2NyaXB0cy9l
eHRyYWN0LWlrY29uZmlnIiwNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkgICAgImZpbGUiID0+
ICIvbGliL21vZHVsZXMvJHVuYW1lL2tlcm5lbC9rZXJuZWwvY29uZmlncy5rbyIsDQogICAgKwkg
ICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgICsJICAgICJ0ZXN0
IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICArCX0sDQogICAgKwl7DQogICAg
KwkgICAgImZpbGUiID0+ICJrZXJuZWwvY29uZmlncy5rbyIsDQogICAgKwkgICAgImV4ZWMiID0+
ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgICsJICAgICJ0ZXN0IiA9PiAic2NyaXB0
cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkgICAgImZpbGUi
ID0+ICJrZXJuZWwvY29uZmlncy5vIiwNCiAgICArCSAgICAiZXhlYyIgPT4gInNjcmlwdHMvZXh0
cmFjdC1pa2NvbmZpZyIsDQogICAgKwkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtj
b25maWciLA0KICAgICsJfSwNCiAgICArKTsNCiAgICArDQogICAgK3N1YiByZWFkX2NvbmZpZyB7
DQogICAgKyAgICBmb3JlYWNoIG15ICRjb25mIChAc2VhcmNoY29uZmlncykgew0KICAgICsJbXkg
JGZpbGUgPSAkY29uZi0+eyJmaWxlIn07DQogICAgKw0KICAgICsJbmV4dCBpZiAoICEgLWYgIiRm
aWxlIik7DQogICAgKw0KICAgICsJaWYgKGRlZmluZWQoJGNvbmYtPnsidGVzdCJ9KSkgew0KICAg
ICsJICAgIGAkY29uZi0+eyJ0ZXN0In0gJGNvbmYtPnsiZmlsZSJ9IDI+L2Rldi9udWxsYDsNCiAg
ICArCSAgICBuZXh0IGlmICgkPyk7DQogICAgKwl9DQogICAgKw0KICAgICsJbXkgJGV4ZWMgPSAk
Y29uZi0+eyJleGVjIn07DQogICAgKw0KICAgICsJcHJpbnQgU1RERVJSICJ1c2luZyBjb25maWc6
ICckZmlsZSdcbiI7DQogICAgKw0KICAgICsJb3BlbihteSAkaW5maWxlLCAnLXwnLCAiJGV4ZWMg
JGZpbGUiKSB8fCBkaWUgIkZhaWxlZCB0byBydW4gJGV4ZWMgJGZpbGUiOw0KICAgICsJbXkgQHgg
PSA8JGluZmlsZT47DQogICAgKwljbG9zZSAkaW5maWxlOw0KICAgICsJcmV0dXJuIEB4Ow0KICAg
ICsgICAgfQ0KICAgICsgICAgZGllICJObyBjb25maWcgZmlsZSBmb3VuZCI7DQogICAgK30NCiAg
ICArDQogICAgK215IEBjb25maWdfZmlsZSA9IHJlYWRfY29uZmlnOw0KICAgICsNCiAgICArIyBQ
YXJzZSBvcHRpb25zDQogICAgK215ICRsb2NhbG1vZGNvbmZpZyA9IDA7DQogICAgK215ICRsb2Nh
bHllc2NvbmZpZyA9IDA7DQogICAgKw0KICAgICtHZXRPcHRpb25zKCJsb2NhbG1vZGNvbmZpZyIg
PT4gXCRsb2NhbG1vZGNvbmZpZywNCiAgICArCSAgICJsb2NhbHllc2NvbmZpZyIgPT4gXCRsb2Nh
bHllc2NvbmZpZyk7DQogICAgKw0KICAgICsjIEdldCB0aGUgYnVpbGQgc291cmNlIGFuZCB0b3Ag
bGV2ZWwgS2NvbmZpZyBmaWxlIChwYXNzZWQgaW4pDQogICAgK215ICRrc291cmNlID0gKCRBUkdW
WzBdID8gJEFSR1ZbMF0gOiAnLicpOw0KICAgICtteSAka2NvbmZpZyA9ICRBUkdWWzFdOw0KICAg
ICtteSAkbHNtb2RfZmlsZSA9ICRFTlZ7J0xTTU9EJ307DQogICAgKw0KICAgICtteSBAbWFrZWZp
bGVzID0gYGZpbmQgJGtzb3VyY2UgLW5hbWUgTWFrZWZpbGUgLW9yIC1uYW1lIEtidWlsZCAyPi9k
ZXYvbnVsbGA7DQogICAgK2Nob21wIEBtYWtlZmlsZXM7DQogICAgKw0KICAgICtteSAlZGVwZW5k
czsNCiAgICArbXkgJXNlbGVjdHM7DQogICAgK215ICVwcm9tcHRzOw0KICAgICtteSAlb2JqZWN0
czsNCiAgICArbXkgJHZhcjsNCiAgICArbXkgJGlmbGV2ZWwgPSAwOw0KICAgICtteSBAaWZkZXBz
Ow0KICAgICsNCiAgICArIyBwcmV2ZW50IHJlY3Vyc2lvbg0KICAgICtteSAlcmVhZF9rY29uZmln
czsNCiAgICArDQogICAgK3N1YiByZWFkX2tjb25maWcgew0KICAgICsgICAgbXkgKCRrY29uZmln
KSA9IEBfOw0KICAgICsNCiAgICArICAgIG15ICRzdGF0ZSA9ICJOT05FIjsNCiAgICArICAgIG15
ICRjb25maWc7DQogICAgKw0KICAgICsgICAgbXkgJGNvbnQgPSAwOw0KICAgICsgICAgbXkgJGxp
bmU7DQogICAgKw0KICAgICsgICAgbXkgJHNvdXJjZSA9ICIka3NvdXJjZS8ka2NvbmZpZyI7DQog
ICAgKyAgICBteSAkbGFzdF9zb3VyY2UgPSAiIjsNCiAgICArDQogICAgKyAgICAjIENoZWNrIGZv
ciBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQNCiAgICArICAgIHdoaWxlICgkc291cmNl
ID1+IC9cJFwoKFx3KylcKS8gJiYgJGxhc3Rfc291cmNlIG5lICRzb3VyY2UpIHsNCiAgICArCW15
ICRlbnYgPSAkMTsNCiAgICArCSRsYXN0X3NvdXJjZSA9ICRzb3VyY2U7DQogICAgKwkkc291cmNl
ID1+IHMvXCRcKCRlbnZcKS8kRU5WeyRlbnZ9LzsNCiAgICArICAgIH0NCiAgICArDQogICAgKyAg
ICBvcGVuKG15ICRraW5maWxlLCAnPCcsICRzb3VyY2UpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAka2Nv
bmZpZyI7DQogICAgKyAgICB3aGlsZSAoPCRraW5maWxlPikgew0KICAgICsJY2hvbXA7DQogICAg
Kw0KICAgICsJIyBNYWtlIHN1cmUgdGhhdCBsaW5lcyBlbmRpbmcgd2l0aCBcIGNvbnRpbnVlDQog
ICAgKwlpZiAoJGNvbnQpIHsNCiAgICArCSAgICAkXyA9ICRsaW5lIC4gIiAiIC4gJF87DQogICAg
Kwl9DQogICAgKw0KICAgICsJaWYgKHMvXFwkLy8pIHsNCiAgICArCSAgICAkY29udCA9IDE7DQog
ICAgKwkgICAgJGxpbmUgPSAkXzsNCiAgICArCSAgICBuZXh0Ow0KICAgICsJfQ0KICAgICsNCiAg
ICArCSRjb250ID0gMDsNCiAgICArDQogICAgKwkjIGNvbGxlY3QgYW55IEtjb25maWcgc291cmNl
cw0KICAgICsJaWYgKC9ec291cmNlXHMrIj8oW14iXSspLykgew0KICAgICsJICAgIG15ICRrY29u
ZmlnID0gJDE7DQogICAgKwkgICAgIyBwcmV2ZW50IHJlYWRpbmcgdHdpY2UuDQogICAgKwkgICAg
aWYgKCFkZWZpbmVkKCRyZWFkX2tjb25maWdzeyRrY29uZmlnfSkpIHsNCiAgICArCQkkcmVhZF9r
Y29uZmlnc3ska2NvbmZpZ30gPSAxOw0KICAgICsJCXJlYWRfa2NvbmZpZygka2NvbmZpZyk7DQog
ICAgKwkgICAgfQ0KICAgICsJICAgIG5leHQ7DQogICAgKwl9DQogICAgKw0KICAgICsJIyBjb25m
aWdzIGZvdW5kDQogICAgKwlpZiAoL15ccyoobWVudSk/Y29uZmlnXHMrKFxTKylccyokLykgew0K
ICAgICsJICAgICRzdGF0ZSA9ICJORVciOw0KICAgICsJICAgICRjb25maWcgPSAkMjsNCiAgICAr
DQogICAgKwkgICAgIyBBZGQgZGVwZW5kcyBmb3IgJ2lmJyBuZXN0aW5nDQogICAgKwkgICAgZm9y
IChteSAkaSA9IDA7ICRpIDwgJGlmbGV2ZWw7ICRpKyspIHsNCiAgICArCQlpZiAoJGkpIHsNCiAg
ICArCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJGlmZGVwc1skaV07DQogICAgKwkJ
fSBlbHNlIHsNCiAgICArCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkaWZkZXBzWyRpXTsNCiAg
ICArCQl9DQogICAgKwkJJHN0YXRlID0gIkRFUCI7DQogICAgKwkgICAgfQ0KICAgICsNCiAgICAr
CSMgY29sbGVjdCB0aGUgZGVwZW5kcyBmb3IgdGhlIGNvbmZpZw0KICAgICsJfSBlbHNpZiAoJHN0
YXRlIGVxICJORVciICYmIC9eXHMqZGVwZW5kc1xzK29uXHMrKC4qKSQvKSB7DQogICAgKwkgICAg
JHN0YXRlID0gIkRFUCI7DQogICAgKwkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkMTsNCiAgICAr
CX0gZWxzaWYgKCRzdGF0ZSBlcSAiREVQIiAmJiAvXlxzKmRlcGVuZHNccytvblxzKyguKikkLykg
ew0KICAgICsJICAgICRkZXBlbmRzeyRjb25maWd9IC49ICIgIiAuICQxOw0KICAgICsJfSBlbHNp
ZiAoJHN0YXRlIGVxICJERVAiICYmIC9eXHMqZGVmKF8oYm9vbHx0cmlzdGF0ZSl8YXVsdClccyso
XFMuKikkLykgew0KICAgICsJICAgIG15ICRkZXAgPSAkMzsNCiAgICArCSAgICBpZiAoJGRlcCAh
fiAvXlxzKih5fG18bilccyokLykgew0KICAgICsJCSRkZXAgPX4gcy8uKlxzaWZccysvLzsNCiAg
ICArCQkkZGVwZW5kc3skY29uZmlnfSAuPSAiICIgLiAkZGVwOw0KICAgICsJCWRwcmludCAiQWRk
ZWQgZGVmYXVsdCBkZXBlbmRzICRkZXAgdG8gJGNvbmZpZ1xuIjsNCiAgICArCSAgICB9DQogICAg
Kw0KICAgICsJIyBHZXQgdGhlIGNvbmZpZ3MgdGhhdCBzZWxlY3QgdGhpcyBjb25maWcNCiAgICAr
CX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYgL15ccypzZWxlY3RccysoXFMrKS8pIHsNCiAg
ICArCSAgICBteSAkY29uZiA9ICQxOw0KICAgICsJICAgIGlmIChkZWZpbmVkKCRzZWxlY3RzeyRj
b25mfSkpIHsNCiAgICArCQkkc2VsZWN0c3skY29uZn0gLj0gIiAiIC4gJGNvbmZpZzsNCiAgICAr
CSAgICB9IGVsc2Ugew0KICAgICsJCSRzZWxlY3RzeyRjb25mfSA9ICRjb25maWc7DQogICAgKwkg
ICAgfQ0KICAgICsNCiAgICArCSMgY29uZmlncyB3aXRob3V0IHByb21wdHMgbXVzdCBiZSBzZWxl
Y3RlZA0KICAgICsJfSBlbHNpZiAoJHN0YXRlIG5lICJOT05FIiAmJiAvXlxzKih0cmlzdGF0ZVxz
K1xTfHByb21wdFxiKS8pIHsNCiAgICArCSAgICAjIG5vdGUgaWYgdGhlIGNvbmZpZyBoYXMgYSBw
cm9tcHQNCiAgICArCSAgICAkcHJvbXB0c3skY29uZmlnfSA9IDE7DQogICAgKw0KICAgICsJIyBD
aGVjayBmb3IgaWYgc3RhdGVtZW50cw0KICAgICsJfSBlbHNpZiAoL15pZlxzKyguKlxTKVxzKiQv
KSB7DQogICAgKwkgICAgbXkgJGRlcHMgPSAkMTsNCiAgICArCSAgICAjIHJlbW92ZSBiZWdpbm5p
bmcgYW5kIGVuZGluZyBub24gdGV4dA0KICAgICsJICAgICRkZXBzID1+IHMvXlteYS16QS1aMC05
X10qLy87DQogICAgKwkgICAgJGRlcHMgPX4gcy9bXmEtekEtWjAtOV9dKiQvLzsNCiAgICArDQog
ICAgKwkgICAgbXkgQGRlcHMgPSBzcGxpdCAvW15hLXpBLVowLTlfXSsvLCAkZGVwczsNCiAgICAr
DQogICAgKwkgICAgJGlmZGVwc1skaWZsZXZlbCsrXSA9IGpvaW4gJzonLCBAZGVwczsNCiAgICAr
DQogICAgKwl9IGVsc2lmICgvXmVuZGlmLykgew0KICAgICsNCiAgICArCSAgICAkaWZsZXZlbC0t
IGlmICgkaWZsZXZlbCk7DQogICAgKw0KICAgICsJIyBzdG9wIG9uICJoZWxwIiBhbmQga2V5d29y
ZHMgdGhhdCBlbmQgYSBtZW51IGVudHJ5DQogICAgKwl9IGVsc2lmICgvXlxzKigtLS0pP2hlbHAo
LS0tKT9ccyokLyB8fCAvXihjb21tZW50fGNob2ljZXxtZW51KVxiLykgew0KICAgICsJICAgICRz
dGF0ZSA9ICJOT05FIjsNCiAgICArCX0NCiAgICArICAgIH0NCiAgICArICAgIGNsb3NlKCRraW5m
aWxlKTsNCiAgICArfQ0KICAgICsNCiAgICAraWYgKCRrY29uZmlnKSB7DQogICAgKyAgICByZWFk
X2tjb25maWcoJGtjb25maWcpOw0KICAgICt9DQogICAgKw0KICAgICsjIE1ha2VmaWxlcyBjYW4g
dXNlIHZhcmlhYmxlcyB0byBkZWZpbmUgdGhlaXIgZGVwZW5kZW5jaWVzDQogICAgK3N1YiBjb252
ZXJ0X3ZhcnMgew0KICAgICsgICAgbXkgKCRsaW5lLCAldmFycykgPSBAXzsNCiAgICArDQogICAg
KyAgICBteSAkcHJvY2VzcyA9ICIiOw0KICAgICsNCiAgICArICAgIHdoaWxlICgkbGluZSA9fiBz
L14oLio/KShcJFwoKC4qPylcKSkvLykgew0KICAgICsJbXkgJHN0YXJ0ID0gJDE7DQogICAgKwlt
eSAkdmFyaWFibGUgPSAkMjsNCiAgICArCW15ICR2YXIgPSAkMzsNCiAgICArDQogICAgKwlpZiAo
ZGVmaW5lZCgkdmFyc3skdmFyfSkpIHsNCiAgICArCSAgICAkcHJvY2VzcyAuPSAkc3RhcnQgLiAk
dmFyc3skdmFyfTsNCiAgICArCX0gZWxzZSB7DQogICAgKwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0
IC4gJHZhcmlhYmxlOw0KICAgICsJfQ0KICAgICsgICAgfQ0KICAgICsNCiAgICArICAgICRwcm9j
ZXNzIC49ICRsaW5lOw0KICAgICsNCiAgICArICAgIHJldHVybiAkcHJvY2VzczsNCiAgICArfQ0K
ICAgICsNCiAgICArIyBSZWFkIGFsbCBNYWtlZmlsZXMgdG8gbWFwIHRoZSBjb25maWdzIHRvIHRo
ZSBvYmplY3RzDQogICAgK2ZvcmVhY2ggbXkgJG1ha2VmaWxlIChAbWFrZWZpbGVzKSB7DQogICAg
Kw0KICAgICsgICAgbXkgJGxpbmUgPSAiIjsNCiAgICArICAgIG15ICVtYWtlX3ZhcnM7DQogICAg
Kw0KICAgICsgICAgb3BlbihteSAkaW5maWxlLCAnPCcsICRtYWtlZmlsZSkgfHwgZGllICJDYW4n
dCBvcGVuICRtYWtlZmlsZSI7DQogICAgKyAgICB3aGlsZSAoPCRpbmZpbGU+KSB7DQogICAgKwkj
IGlmIHRoaXMgbGluZSBlbmRzIHdpdGggYSBiYWNrc2xhc2gsIGNvbnRpbnVlDQogICAgKwljaG9t
cDsNCiAgICArCWlmICgvXiguKilcXCQvKSB7DQogICAgKwkgICAgJGxpbmUgLj0gJDE7DQogICAg
KwkgICAgbmV4dDsNCiAgICArCX0NCiAgICArDQogICAgKwkkbGluZSAuPSAkXzsNCiAgICArCSRf
ID0gJGxpbmU7DQogICAgKwkkbGluZSA9ICIiOw0KICAgICsNCiAgICArCW15ICRvYmpzOw0KICAg
ICsNCiAgICArCSMgQ29udmVydCB2YXJpYWJsZXMgaW4gYSBsaW5lIChjb3VsZCBkZWZpbmUgY29u
ZmlncykNCiAgICArCSRfID0gY29udmVydF92YXJzKCRfLCAlbWFrZV92YXJzKTsNCiAgICArDQog
ICAgKwkjIGNvbGxlY3Qgb2JqZWN0cyBhZnRlciBvYmotJChDT05GSUdfRk9PX0JBUikNCiAgICAr
CWlmICgvb2JqLVwkXCgoQ09ORklHX1teXCldKilcKVxzKlsrOl0/PVxzKiguKikvKSB7DQogICAg
KwkgICAgJHZhciA9ICQxOw0KICAgICsJICAgICRvYmpzID0gJDI7DQogICAgKw0KICAgICsJIyBj
aGVjayBpZiB2YXJpYWJsZXMgYXJlIHNldA0KICAgICsJfSBlbHNpZiAoL15ccyooXFMrKVxzKls6
XT89XHMqKC4qXFMpLykgew0KICAgICsJICAgICRtYWtlX3ZhcnN7JDF9ID0gJDI7DQogICAgKwl9
DQogICAgKwlpZiAoZGVmaW5lZCgkb2JqcykpIHsNCiAgICArCSAgICBmb3JlYWNoIG15ICRvYmog
KHNwbGl0IC9ccysvLCRvYmpzKSB7DQogICAgKwkJJG9iaiA9fiBzLy0vXy9nOw0KICAgICsJCWlm
ICgkb2JqID1+IC8oLiopXC5vJC8pIHsNCiAgICArCQkgICAgIyBPYmplY3RzIG1heSBiZSBlbmFi
bGVkIGJ5IG1vcmUgdGhhbiBvbmUgY29uZmlnLg0KICAgICsJCSAgICAjIFN0b3JlIGNvbmZpZ3Mg
aW4gYW4gYXJyYXkuDQogICAgKwkJICAgIG15IEBhcnI7DQogICAgKw0KICAgICsJCSAgICBpZiAo
ZGVmaW5lZCgkb2JqZWN0c3skMX0pKSB7DQogICAgKwkJCUBhcnIgPSBAeyRvYmplY3RzeyQxfX07
DQogICAgKwkJICAgIH0NCiAgICArDQogICAgKwkJICAgICRhcnJbJCNhcnIrMV0gPSAkdmFyOw0K
ICAgICsNCiAgICArCQkgICAgIyBUaGUgb2JqZWN0cyBoYXZlIGEgaGFzaCBtYXBwaW5nIHRvIGEg
cmVmZXJlbmNlDQogICAgKwkJICAgICMgb2YgYW4gYXJyYXkgb2YgY29uZmlncy4NCiAgICArCQkg
ICAgJG9iamVjdHN7JDF9ID0gXEBhcnI7DQogICAgKwkJfQ0KICAgICsJICAgIH0NCiAgICArCX0N
CiAgICArICAgIH0NCiAgICArICAgIGNsb3NlKCRpbmZpbGUpOw0KICAgICt9DQogICAgKw0KICAg
ICtteSAlbW9kdWxlczsNCiAgICArbXkgJGxpbmZpbGU7DQogICAgKw0KICAgICtpZiAoZGVmaW5l
ZCgkbHNtb2RfZmlsZSkpIHsNCiAgICArICAgIGlmICggISAtZiAkbHNtb2RfZmlsZSkgew0KICAg
ICsJaWYgKCAtZiAkRU5WeydvYmp0cmVlJ30uIi8iLiRsc21vZF9maWxlKSB7DQogICAgKwkgICAg
JGxzbW9kX2ZpbGUgPSAkRU5WeydvYmp0cmVlJ30uIi8iLiRsc21vZF9maWxlOw0KICAgICsJfSBl
bHNlIHsNCiAgICArCQlkaWUgIiRsc21vZF9maWxlIG5vdCBmb3VuZCI7DQogICAgKwl9DQogICAg
KyAgICB9DQogICAgKw0KICAgICsgICAgbXkgJG90eXBlID0gKCAteCAkbHNtb2RfZmlsZSkgPyAn
LXwnIDogJzwnOw0KICAgICsgICAgb3BlbigkbGluZmlsZSwgJG90eXBlLCAkbHNtb2RfZmlsZSk7
DQogICAgKw0KICAgICt9IGVsc2Ugew0KICAgICsNCiAgICArICAgICMgc2VlIHdoYXQgbW9kdWxl
cyBhcmUgbG9hZGVkIG9uIHRoaXMgc3lzdGVtDQogICAgKyAgICBteSAkbHNtb2Q7DQogICAgKw0K
ICAgICsgICAgZm9yZWFjaCBteSAkZGlyICggKCIvc2JpbiIsICIvYmluIiwgIi91c3Ivc2JpbiIs
ICIvdXNyL2JpbiIpICkgew0KICAgICsJaWYgKCAteCAiJGRpci9sc21vZCIgKSB7DQogICAgKwkg
ICAgJGxzbW9kID0gIiRkaXIvbHNtb2QiOw0KICAgICsJICAgIGxhc3Q7DQogICAgKwl9DQogICAg
K30NCiAgICArICAgIGlmICghZGVmaW5lZCgkbHNtb2QpKSB7DQogICAgKwkjIHRyeSBqdXN0IHRo
ZSBwYXRoDQogICAgKwkkbHNtb2QgPSAibHNtb2QiOw0KICAgICsgICAgfQ0KICAgICsNCiAgICAr
ICAgIG9wZW4oJGxpbmZpbGUsICctfCcsICRsc21vZCkgfHwgZGllICJDYW4gbm90IGNhbGwgbHNt
b2Qgd2l0aCAkbHNtb2QiOw0KICAgICt9DQogICAgKw0KICAgICt3aGlsZSAoPCRsaW5maWxlPikg
ew0KICAgICsJbmV4dCBpZiAoL15Nb2R1bGUvKTsgICMgU2tpcCB0aGUgZmlyc3QgbGluZS4NCiAg
ICArCWlmICgvXihcUyspLykgew0KICAgICsJCSRtb2R1bGVzeyQxfSA9IDE7DQogICAgKwl9DQog
ICAgK30NCiAgICArY2xvc2UgKCRsaW5maWxlKTsNCiAgICArDQogICAgKyMgYWRkIHRvIHRoZSBj
b25maWdzIGhhc2ggYWxsIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkIHRvIGVuYWJsZQ0KICAgICsj
IGEgbG9hZGVkIG1vZHVsZS4gVGhpcyBpcyBhIGRpcmVjdCBvYmotJHtDT05GSUdfRk9PfSArPSBi
YXIubw0KICAgICsjIHdoZXJlIHdlIGtub3cgd2UgbmVlZCBiYXIubyBzbyB3ZSBhZGQgRk9PIHRv
IHRoZSBsaXN0Lg0KICAgICtteSAlY29uZmlnczsNCiAgICArZm9yZWFjaCBteSAkbW9kdWxlIChr
ZXlzKCVtb2R1bGVzKSkgew0KICAgICsgICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JG1vZHVsZX0p
KSB7DQogICAgKwlteSBAYXJyID0gQHskb2JqZWN0c3skbW9kdWxlfX07DQogICAgKwlmb3JlYWNo
IG15ICRjb25mIChAYXJyKSB7DQogICAgKwkgICAgJGNvbmZpZ3N7JGNvbmZ9ID0gJG1vZHVsZTsN
CiAgICArCSAgICBkcHJpbnQgIiRjb25mIGFkZGVkIGJ5IGRpcmVjdCAoJG1vZHVsZSlcbiI7DQog
ICAgKwkgICAgaWYgKCRkZWJ1Z3ByaW50KSB7DQogICAgKwkJbXkgJGM9JGNvbmY7DQogICAgKwkJ
JGMgPX4gcy9eQ09ORklHXy8vOw0KICAgICsJCWlmIChkZWZpbmVkKCRkZXBlbmRzeyRjfSkpIHsN
CiAgICArCQkgICAgZHByaW50ICIgZGVwcyA9ICRkZXBlbmRzeyRjfVxuIjsNCiAgICArCQl9IGVs
c2Ugew0KICAgICsJCSAgICBkcHJpbnQgIiBubyBkZXBzXG4iOw0KICAgICsJCX0NCiAgICArCSAg
ICB9DQogICAgKwl9DQogICAgKyAgICB9IGVsc2Ugew0KICAgICsJIyBNb3N0IGxpa2VseSwgc29t
ZW9uZSBoYXMgYSBjdXN0b20gKGJpbmFyeT8pIG1vZHVsZSBsb2FkZWQuDQogICAgKwlwcmludCBT
VERFUlIgIiRtb2R1bGUgY29uZmlnIG5vdCBmb3VuZCEhXG4iOw0KICAgICsgICAgfQ0KICAgICt9
DQogICAgKw0KICAgICsjIFJlYWQgdGhlIGN1cnJlbnQgY29uZmlnLCBhbmQgc2VlIHdoYXQgaXMg
ZW5hYmxlZC4gV2Ugd2FudCB0bw0KICAgICsjIGlnbm9yZSBjb25maWdzIHRoYXQgd2Ugd291bGQg
bm90IGVuYWJsZSBhbnl3YXkuDQogICAgKw0KICAgICtteSAlb3JpZ19jb25maWdzOw0KICAgICtt
eSAkdmFsaWQgPSAiQS1aYS16XzAtOSI7DQogICAgKw0KICAgICtmb3JlYWNoIG15ICRsaW5lIChA
Y29uZmlnX2ZpbGUpIHsNCiAgICArICAgICRfID0gJGxpbmU7DQogICAgKw0KICAgICsgICAgaWYg
KC8oQ09ORklHX1skdmFsaWRdKik9KG18eSkvKSB7DQogICAgKwkkb3JpZ19jb25maWdzeyQxfSA9
ICQyOw0KICAgICsgICAgfQ0KICAgICt9DQogICAgKw0KICAgICtteSAkcmVwZWF0ID0gMTsNCiAg
ICArDQogICAgK215ICRkZXBjb25maWc7DQogICAgKw0KICAgICsjDQogICAgKyMgTm90ZSwgd2Ug
ZG8gbm90IGNhcmUgYWJvdXQgb3BlcmFuZHMgKGxpa2U6ICYmLCB8fCwgISkgd2Ugd2FudCB0byBh
ZGQgYW55DQogICAgKyMgY29uZmlnIHRoYXQgaXMgaW4gdGhlIGRlcGVuZCBsaXN0IG9mIGFub3Ro
ZXIgY29uZmlnLiBUaGlzIHNjcmlwdCBkb2VzDQogICAgKyMgbm90IGVuYWJsZSBjb25maWdzIHRo
YXQgYXJlIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElmIHdlIGNvbWUgYWNyb3NzIGENCiAgICArIyBj
b25maWcgQSB0aGF0IGRlcGVuZHMgb24gIUIsIHdlIGNhbiBzdGlsbCBhZGQgQiB0byB0aGUgbGlz
dCBvZiBkZXBlbmRzDQogICAgKyMgdG8ga2VlcCBvbi4gSWYgQSB3YXMgb24gaW4gdGhlIG9yaWdp
bmFsIGNvbmZpZywgQiB3b3VsZCBub3QgaGF2ZSBiZWVuDQogICAgKyMgYW5kIEIgd291bGQgbm90
IGJlIHR1cm5lZCBvbiBieSB0aGlzIHNjcmlwdC4NCiAgICArIw0KICAgICtzdWIgcGFyc2VfY29u
ZmlnX2RlcGVuZHMNCiAgICArew0KICAgICsgICAgbXkgKCRwKSA9IEBfOw0KICAgICsNCiAgICAr
ICAgIHdoaWxlICgkcCA9fiAvWyR2YWxpZF0vKSB7DQogICAgKw0KICAgICsJaWYgKCRwID1+IC9e
W14kdmFsaWRdKihbJHZhbGlkXSspLykgew0KICAgICsJICAgIG15ICRjb25mID0gIkNPTkZJR18i
IC4gJDE7DQogICAgKw0KICAgICsJICAgICRwID1+IHMvXlteJHZhbGlkXSpbJHZhbGlkXSsvLzsN
CiAgICArDQogICAgKwkgICAgIyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyBpZiB0aGUgZGVwZW5k
IGNvbmZpZyBpcyBhIG1vZHVsZQ0KICAgICsJICAgIGlmICghZGVmaW5lZCgkb3JpZ19jb25maWdz
eyRjb25mfSkgfHwgJG9yaWdfY29uZmlnc3skY29uZn0gZXEgInkiKSB7DQogICAgKwkJbmV4dDsN
CiAgICArCSAgICB9DQogICAgKw0KICAgICsJICAgIGlmICghZGVmaW5lZCgkY29uZmlnc3skY29u
Zn0pKSB7DQogICAgKwkJIyBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGhhcyBp
dHMNCiAgICArCQkjIGRlcGVuZGVuY2llcyBtZXQuDQogICAgKwkJJHJlcGVhdCA9IDE7ICMgZG8g
YWdhaW4NCiAgICArCQlkcHJpbnQgIiRjb25mIHNlbGVjdGVkIGJ5IGRlcGVuZCAkZGVwY29uZmln
XG4iOw0KICAgICsJCSRjb25maWdzeyRjb25mfSA9IDE7DQogICAgKwkgICAgfQ0KICAgICsJfSBl
bHNlIHsNCiAgICArCSAgICBkaWUgInRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiI7DQogICAgKwl9
DQogICAgKyAgICB9DQogICAgK30NCiAgICArDQogICAgKyMgU2VsZWN0IGlzIHRyZWF0ZWQgYSBi
aXQgZGlmZmVyZW50bHkgdGhhbiBkZXBlbmRzLiBXZSBjYWxsIHRoaXMNCiAgICArIyB3aGVuIGEg
Y29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIHJlcXVpcmVzIGFub3RoZXIgY29uZmlnIHRvIGJlDQog
ICAgKyMgc2VsZWN0ZWQuIFdlIHVzZSB0byBqdXN0IHNlbGVjdCBhbGwgY29uZmlncyB0aGF0IHNl
bGVjdGVkIHRoaXMNCiAgICArIyBjb25maWcsIGJ1dCBmb3VuZCB0aGF0IHRoYXQgY2FuIGJhbGxv
b24gaW50byBlbmFibGluZyBodW5kcmVkcw0KICAgICsjIG9mIGNvbmZpZ3MgdGhhdCB3ZSBkbyBu
b3QgY2FyZSBhYm91dC4NCiAgICArIw0KICAgICsjIFRoZSBpZGVhIGlzIHdlIGxvb2sgYXQgYWxs
IHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IGl0LiBJZiBvbmUNCiAgICArIyBpcyBhbHJlYWR5IGlu
IG91ciBsaXN0IG9mIGNvbmZpZ3MgdG8gZW5hYmxlLCB0aGVuIHRoZXJlJ3Mgbm90aGluZw0KICAg
ICsjIGVsc2UgdG8gZG8uIElmIHRoZXJlIGlzbid0LCB3ZSBwaWNrIHRoZSBmaXJzdCBjb25maWcg
dGhhdCB3YXMNCiAgICArIyBlbmFibGVkIGluIHRoZSBvcmlnbmFsIGNvbmZpZyBhbmQgdXNlIHRo
YXQuDQogICAgK3N1YiBwYXJzZV9jb25maWdfc2VsZWN0cw0KICAgICt7DQogICAgKyAgICBteSAo
JGNvbmZpZywgJHApID0gQF87DQogICAgKw0KICAgICsgICAgbXkgJG5leHRfY29uZmlnOw0KICAg
ICsNCiAgICArICAgIHdoaWxlICgkcCA9fiAvWyR2YWxpZF0vKSB7DQogICAgKw0KICAgICsJaWYg
KCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykgew0KICAgICsJICAgIG15ICRjb25mID0g
IkNPTkZJR18iIC4gJDE7DQogICAgKw0KICAgICsJICAgICRwID1+IHMvXlteJHZhbGlkXSpbJHZh
bGlkXSsvLzsNCiAgICArDQogICAgKwkgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGlzIGNvbmZpZyBl
eGlzdHMgaW4gdGhlIGN1cnJlbnQgLmNvbmZpZyBmaWxlDQogICAgKwkgICAgaWYgKCFkZWZpbmVk
KCRvcmlnX2NvbmZpZ3N7JGNvbmZ9KSkgew0KICAgICsJCWRwcmludCAiJGNvbmYgbm90IHNldCBm
b3IgJGNvbmZpZyBzZWxlY3RcbiI7DQogICAgKwkJbmV4dDsNCiAgICArCSAgICB9DQogICAgKw0K
ICAgICsJICAgICMgQ2hlY2sgaWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtb2R1bGUgc2VsZWN0
cyB0aGlzIGNvbmZpZw0KICAgICsJICAgIGlmIChkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7JGNvbmZ9
KSAmJiAkb3JpZ19jb25maWdzeyRjb25mfSBuZSAibSIpIHsNCiAgICArCQlkcHJpbnQgIiRjb25m
IChub24gbW9kdWxlKSBzZWxlY3RzIGNvbmZpZywgd2UgYXJlIGdvb2RcbiI7DQogICAgKwkJIyB3
ZSBhcmUgZ29vZCB3aXRoIHRoaXMNCiAgICArCQlyZXR1cm47DQogICAgKwkgICAgfQ0KICAgICsJ
ICAgIGlmIChkZWZpbmVkKCRjb25maWdzeyRjb25mfSkpIHsNCiAgICArCQlkcHJpbnQgIiRjb25m
IHNlbGVjdHMgJGNvbmZpZyBzbyB3ZSBhcmUgZ29vZFxuIjsNCiAgICArCQkjIEEgc2V0IGNvbmZp
ZyBzZWxlY3RzIHRoaXMgY29uZmlnLCB3ZSBhcmUgZ29vZA0KICAgICsJCXJldHVybjsNCiAgICAr
CSAgICB9DQogICAgKwkgICAgIyBTZXQgdGhpcyBjb25maWcgdG8gYmUgc2VsZWN0ZWQNCiAgICAr
CSAgICBpZiAoIWRlZmluZWQoJG5leHRfY29uZmlnKSkgew0KICAgICsJCSRuZXh0X2NvbmZpZyA9
ICRjb25mOw0KICAgICsJICAgIH0NCiAgICArCX0gZWxzZSB7DQogICAgKwkgICAgZGllICJ0aGlz
IHNob3VsZCBuZXZlciBoYXBwZW4iOw0KICAgICsJfQ0KICAgICsgICAgfQ0KICAgICsNCiAgICAr
ICAgICMgSWYgbm8gcG9zc2libGUgY29uZmlnIHNlbGVjdGVkIHRoaXMsIHRoZW4gc29tZXRoaW5n
IGhhcHBlbmVkLg0KICAgICsgICAgaWYgKCFkZWZpbmVkKCRuZXh0X2NvbmZpZykpIHsNCiAgICAr
CXByaW50IFNUREVSUiAiV0FSTklORzogJGNvbmZpZyBpcyByZXF1aXJlZCwgYnV0IG5vdGhpbmcg
aW4gdGhlXG4iOw0KICAgICsJcHJpbnQgU1RERVJSICIgIGN1cnJlbnQgY29uZmlnIHNlbGVjdHMg
aXQuXG4iOw0KICAgICsJcmV0dXJuOw0KICAgICsgICAgfQ0KICAgICsNCiAgICArICAgICMgSWYg
d2UgYXJlIGhlcmUsIHRoZW4gd2UgZm91bmQgbm8gY29uZmlnIHRoYXQgaXMgc2V0IGFuZA0KICAg
ICsgICAgIyBzZWxlY3RzIHRoaXMgY29uZmlnLiBSZXBlYXQuDQogICAgKyAgICAkcmVwZWF0ID0g
MTsNCiAgICArICAgICMgTWFrZSB0aGlzIGNvbmZpZyBuZWVkIHRvIGJlIHNlbGVjdGVkDQogICAg
KyAgICAkY29uZmlnc3skbmV4dF9jb25maWd9ID0gMTsNCiAgICArICAgIGRwcmludCAiJG5leHRf
Y29uZmlnIHNlbGVjdGVkIGJ5IHNlbGVjdCAkY29uZmlnXG4iOw0KICAgICt9DQogICAgKw0KICAg
ICtteSAlcHJvY2Vzc19zZWxlY3RzOw0KICAgICsNCiAgICArIyBsb29wIHRocm91Z2ggYWxsIGNv
bmZpZ3MsIHNlbGVjdCB0aGVpciBkZXBlbmRlbmNpZXMuDQogICAgK3N1YiBsb29wX2RlcGVuZCB7
DQogICAgKyAgICAkcmVwZWF0ID0gMTsNCiAgICArDQogICAgKyAgICB3aGlsZSAoJHJlcGVhdCkg
ew0KICAgICsJJHJlcGVhdCA9IDA7DQogICAgKw0KICAgICsgICAgICBmb3Jsb29wOg0KICAgICsJ
Zm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVjb25maWdzKSB7DQogICAgKw0KICAgICsJICAgICMg
SWYgdGhpcyBjb25maWcgaXMgbm90IGEgbW9kdWxlLCB3ZSBkbyBub3QgbmVlZCB0byBwcm9jZXNz
IGl0DQogICAgKwkgICAgaWYgKGRlZmluZWQoJG9yaWdfY29uZmlnc3skY29uZmlnfSkgJiYgJG9y
aWdfY29uZmlnc3skY29uZmlnfSBuZSAibSIpIHsNCiAgICArCQluZXh0IGZvcmxvb3A7DQogICAg
KwkgICAgfQ0KICAgICsNCiAgICArCSAgICAkY29uZmlnID1+IHMvXkNPTkZJR18vLzsNCiAgICAr
CSAgICAkZGVwY29uZmlnID0gJGNvbmZpZzsNCiAgICArDQogICAgKwkgICAgaWYgKGRlZmluZWQo
JGRlcGVuZHN7JGNvbmZpZ30pKSB7DQogICAgKwkJIyBUaGlzIGNvbmZpZyBoYXMgZGVwZW5kZW5j
aWVzLiBNYWtlIHN1cmUgdGhleSBhcmUgYWxzbyBpbmNsdWRlZA0KICAgICsJCXBhcnNlX2NvbmZp
Z19kZXBlbmRzICRkZXBlbmRzeyRjb25maWd9Ow0KICAgICsJICAgIH0NCiAgICArDQogICAgKwkg
ICAgIyBJZiB0aGUgY29uZmlnIGhhcyBubyBwcm9tcHQsIHRoZW4gd2UgbmVlZCB0byBjaGVjayBp
ZiBhIGNvbmZpZw0KICAgICsJICAgICMgdGhhdCBpcyBlbmFibGVkIHNlbGVjdGVkIGl0LiBPciBp
ZiB3ZSBuZWVkIHRvIGVuYWJsZSBvbmUuDQogICAgKwkgICAgaWYgKCFkZWZpbmVkKCRwcm9tcHRz
eyRjb25maWd9KSAmJiBkZWZpbmVkKCRzZWxlY3RzeyRjb25maWd9KSkgew0KICAgICsJCSRwcm9j
ZXNzX3NlbGVjdHN7JGNvbmZpZ30gPSAxOw0KICAgICsJICAgIH0NCiAgICArCX0NCiAgICArICAg
IH0NCiAgICArfQ0KICAgICsNCiAgICArc3ViIGxvb3Bfc2VsZWN0IHsNCiAgICArDQogICAgKyAg
ICBmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJXByb2Nlc3Nfc2VsZWN0cykgew0KICAgICsJJGNv
bmZpZyA9fiBzL15DT05GSUdfLy87DQogICAgKw0KICAgICsJZHByaW50ICJQcm9jZXNzIHNlbGVj
dCAkY29uZmlnXG4iOw0KICAgICsNCiAgICArCSMgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIG11
c3QgYmUgc2VsZWN0ZWQuDQogICAgKwlwYXJzZV9jb25maWdfc2VsZWN0cyAkY29uZmlnLCAkc2Vs
ZWN0c3skY29uZmlnfTsNCiAgICArICAgIH0NCiAgICArfQ0KICAgICsNCiAgICArd2hpbGUgKCRy
ZXBlYXQpIHsNCiAgICArICAgICMgR2V0IHRoZSBmaXJzdCBzZXQgb2YgY29uZmlncyBhbmQgdGhl
aXIgZGVwZW5kZW5jaWVzLg0KICAgICsgICAgbG9vcF9kZXBlbmQ7DQogICAgKw0KICAgICsgICAg
JHJlcGVhdCA9IDA7DQogICAgKw0KICAgICsgICAgIyBOb3cgd2UgbmVlZCB0byBzZWUgaWYgd2Ug
aGF2ZSB0byBjaGVjayBzZWxlY3RzOw0KICAgICsgICAgbG9vcF9zZWxlY3Q7DQogICAgK30NCiAg
ICArDQogICAgK215ICVzZXRjb25maWdzOw0KICAgICsNCiAgICArIyBGaW5hbGx5LCByZWFkIHRo
ZSAuY29uZmlnIGZpbGUgYW5kIHR1cm4gb2ZmIGFueSBtb2R1bGUgZW5hYmxlZCB0aGF0DQogICAg
KyMgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb24gdG8ga2VlcCBlbmFibGVkLg0KICAgICtmb3Jl
YWNoIG15ICRsaW5lIChAY29uZmlnX2ZpbGUpIHsNCiAgICArICAgICRfID0gJGxpbmU7DQogICAg
Kw0KICAgICsgICAgaWYgKC9DT05GSUdfSUtDT05GSUcvKSB7DQogICAgKwlpZiAoLyMgQ09ORklH
X0lLQ09ORklHIGlzIG5vdCBzZXQvKSB7DQogICAgKwkgICAgIyBlbmFibGUgSUtDT05GSUcgYXQg
bGVhc3QgYXMgYSBtb2R1bGUNCiAgICArCSAgICBwcmludCAiQ09ORklHX0lLQ09ORklHPW1cbiI7
DQogICAgKwkgICAgIyBkb24ndCBhc2sgYWJvdXQgUFJPQw0KICAgICsJICAgIHByaW50ICIjIENP
TkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXRcbiI7DQogICAgKwl9IGVsc2Ugew0KICAgICsJ
ICAgIHByaW50Ow0KICAgICsJfQ0KICAgICsJbmV4dDsNCiAgICArICAgIH0NCiAgICArDQogICAg
KyAgICBpZiAoL0NPTkZJR19NT0RVTEVfU0lHX0tFWT0iKC4rKSIvKSB7DQogICAgKyAgICAgICAg
bXkgJG9yaWdfY2VydCA9ICQxOw0KICAgICsgICAgICAgIG15ICRkZWZhdWx0X2NlcnQgPSAiY2Vy
dHMvc2lnbmluZ19rZXkucGVtIjsNCiAgICArDQogICAgKyAgICAgICAgIyBDaGVjayB0aGF0IHRo
ZSBsb2dpYyBpbiB0aGlzIHNjcmlwdCBzdGlsbCBtYXRjaGVzIHRoZSBvbmUgaW4gS2NvbmZpZw0K
ICAgICsgICAgICAgIGlmICghZGVmaW5lZCgkZGVwZW5kc3siTU9EVUxFX1NJR19LRVkifSkgfHwN
CiAgICArICAgICAgICAgICAgJGRlcGVuZHN7Ik1PRFVMRV9TSUdfS0VZIn0gIX4gLyJcUSRkZWZh
dWx0X2NlcnRcRSIvKSB7DQogICAgKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiV0FSTklORzog
TU9EVUxFX1NJR19LRVkgYXNzZXJ0aW9uIGZhaWx1cmUsICIsDQogICAgKyAgICAgICAgICAgICAg
ICAidXBkYXRlIG5lZWRlZCB0byAiLCBfX0ZJTEVfXywgIiBsaW5lICIsIF9fTElORV9fLCAiXG4i
Ow0KICAgICsgICAgICAgICAgICBwcmludDsNCiAgICArICAgICAgICB9IGVsc2lmICgkb3JpZ19j
ZXJ0IG5lICRkZWZhdWx0X2NlcnQgJiYgISAtZiAkb3JpZ19jZXJ0KSB7DQogICAgKyAgICAgICAg
ICAgIHByaW50IFNUREVSUiAiTW9kdWxlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZW5hYmxlZCBi
dXQgIiwNCiAgICArICAgICAgICAgICAgICAgICJtb2R1bGUgc2lnbmluZyBrZXkgXCIkb3JpZ19j
ZXJ0XCIgbm90IGZvdW5kLiBSZXNldHRpbmcgIiwNCiAgICArICAgICAgICAgICAgICAgICJzaWdu
aW5nIGtleSB0byBkZWZhdWx0IHZhbHVlLlxuIjsNCiAgICArICAgICAgICAgICAgcHJpbnQgIkNP
TkZJR19NT0RVTEVfU0lHX0tFWT1cIiRkZWZhdWx0X2NlcnRcIlxuIjsNCiAgICArICAgICAgICB9
IGVsc2Ugew0KICAgICsgICAgICAgICAgICBwcmludDsNCiAgICArICAgICAgICB9DQogICAgKyAg
ICAgICAgbmV4dDsNCiAgICArICAgIH0NCiAgICArDQogICAgKyAgICBpZiAoL0NPTkZJR19TWVNU
RU1fVFJVU1RFRF9LRVlTPSIoLispIi8pIHsNCiAgICArICAgICAgICBteSAkb3JpZ19rZXlzID0g
JDE7DQogICAgKw0KICAgICsgICAgICAgIGlmICghIC1mICRvcmlnX2tleXMpIHsNCiAgICArICAg
ICAgICAgICAgcHJpbnQgU1RERVJSICJTeXN0ZW0ga2V5cmluZyBlbmFibGVkIGJ1dCBrZXlzIFwi
JG9yaWdfa2V5c1wiICIsDQogICAgKyAgICAgICAgICAgICAgICAibm90IGZvdW5kLiBSZXNldHRp
bmcga2V5cyB0byBkZWZhdWx0IHZhbHVlLlxuIjsNCiAgICArICAgICAgICAgICAgcHJpbnQgIkNP
TkZJR19TWVNURU1fVFJVU1RFRF9LRVlTPVwiXCJcbiI7DQogICAgKyAgICAgICAgfSBlbHNlIHsN
CiAgICArICAgICAgICAgICAgcHJpbnQ7DQogICAgKyAgICAgICAgfQ0KICAgICsgICAgICAgIG5l
eHQ7DQogICAgKyAgICB9DQogICAgKw0KICAgICsgICAgaWYgKC9eKENPTkZJRy4qKT0obXx5KS8p
IHsNCiAgICArCWlmIChkZWZpbmVkKCRjb25maWdzeyQxfSkpIHsNCiAgICArCSAgICBpZiAoJGxv
Y2FseWVzY29uZmlnKSB7DQogICAgKwkgICAgICAgICRzZXRjb25maWdzeyQxfSA9ICd5JzsNCiAg
ICArCQlwcmludCAiJDE9eVxuIjsNCiAgICArCQluZXh0Ow0KICAgICsJICAgIH0gZWxzZSB7DQog
ICAgKwkgICAgICAgICRzZXRjb25maWdzeyQxfSA9ICQyOw0KICAgICsJICAgIH0NCiAgICArCX0g
ZWxzaWYgKCQyIGVxICJtIikgew0KICAgICsJICAgIHByaW50ICIjICQxIGlzIG5vdCBzZXRcbiI7
DQogICAgKwkgICAgbmV4dDsNCiAgICArCX0NCiAgICArICAgIH0NCiAgICArICAgIHByaW50Ow0K
ICAgICt9DQogICAgKw0KICAgICsjIEludGVncml0eSBjaGVjaywgbWFrZSBzdXJlIGFsbCBtb2R1
bGVzIHRoYXQgd2Ugd2FudCBlbmFibGVkIGRvDQogICAgKyMgaW5kZWVkIGhhdmUgdGhlaXIgY29u
ZmlncyBzZXQuDQogICAgK2xvb3A6DQogICAgK2ZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cyglbW9k
dWxlcykpIHsNCiAgICArICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyRtb2R1bGV9KSkgew0KICAg
ICsJbXkgQGFyciA9IEB7JG9iamVjdHN7JG1vZHVsZX19Ow0KICAgICsJZm9yZWFjaCBteSAkY29u
ZiAoQGFycikgew0KICAgICsJICAgIGlmIChkZWZpbmVkKCRzZXRjb25maWdzeyRjb25mfSkpIHsN
CiAgICArCQluZXh0IGxvb3A7DQogICAgKwkgICAgfQ0KICAgICsJfQ0KICAgICsJcHJpbnQgU1RE
RVJSICJtb2R1bGUgJG1vZHVsZSBkaWQgbm90IGhhdmUgY29uZmlncyI7DQogICAgKwlmb3JlYWNo
IG15ICRjb25mIChAYXJyKSB7DQogICAgKwkgICAgcHJpbnQgU1RERVJSICIgIiAsICRjb25mOw0K
ICAgICsJfQ0KICAgICsJcHJpbnQgU1RERVJSICJcbiI7DQogICAgKyAgICB9DQogICAgK30NCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9zeW1ib2wuYyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvc3ltYm9sLmMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAw
MDAwMDAuLjFmOTI2NmQNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9zeW1ib2wuYw0KICAgIEBAIC0wLDAgKzEsMTMzMSBAQA0KICAgICsvLyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMp
IDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqLw0KICAg
ICsNCiAgICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAg
ICArI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSA8cmVnZXguaD4NCiAgICArI2lu
Y2x1ZGUgPHN5cy91dHNuYW1lLmg+DQogICAgKw0KICAgICsjaW5jbHVkZSAibGtjLmgiDQogICAg
Kw0KICAgICtzdHJ1Y3Qgc3ltYm9sIHN5bWJvbF95ZXMgPSB7DQogICAgKwkubmFtZSA9ICJ5IiwN
CiAgICArCS5jdXJyID0geyAieSIsIHllcyB9LA0KICAgICsJLmZsYWdzID0gU1lNQk9MX0NPTlNU
fFNZTUJPTF9WQUxJRCwNCiAgICArfSwgc3ltYm9sX21vZCA9IHsNCiAgICArCS5uYW1lID0gIm0i
LA0KICAgICsJLmN1cnIgPSB7ICJtIiwgbW9kIH0sDQogICAgKwkuZmxhZ3MgPSBTWU1CT0xfQ09O
U1R8U1lNQk9MX1ZBTElELA0KICAgICt9LCBzeW1ib2xfbm8gPSB7DQogICAgKwkubmFtZSA9ICJu
IiwNCiAgICArCS5jdXJyID0geyAibiIsIG5vIH0sDQogICAgKwkuZmxhZ3MgPSBTWU1CT0xfQ09O
U1R8U1lNQk9MX1ZBTElELA0KICAgICt9LCBzeW1ib2xfZW1wdHkgPSB7DQogICAgKwkubmFtZSA9
ICIiLA0KICAgICsJLmN1cnIgPSB7ICIiLCBubyB9LA0KICAgICsJLmZsYWdzID0gU1lNQk9MX1ZB
TElELA0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IHN5bWJvbCAqc3ltX2RlZmNvbmZpZ19s
aXN0Ow0KICAgICtzdHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsNCiAgICArdHJpc3RhdGUgbW9k
dWxlc192YWw7DQogICAgKw0KICAgICtlbnVtIHN5bWJvbF90eXBlIHN5bV9nZXRfdHlwZShzdHJ1
Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCWVudW0gc3ltYm9sX3R5cGUgdHlwZSA9IHN5
bS0+dHlwZTsNCiAgICArDQogICAgKwlpZiAodHlwZSA9PSBTX1RSSVNUQVRFKSB7DQogICAgKwkJ
aWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBzeW0tPnZpc2libGUgPT0geWVzKQ0KICAg
ICsJCQl0eXBlID0gU19CT09MRUFOOw0KICAgICsJCWVsc2UgaWYgKG1vZHVsZXNfdmFsID09IG5v
KQ0KICAgICsJCQl0eXBlID0gU19CT09MRUFOOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIHR5cGU7
DQogICAgK30NCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnN5bV90eXBlX25hbWUoZW51bSBzeW1i
b2xfdHlwZSB0eXBlKQ0KICAgICt7DQogICAgKwlzd2l0Y2ggKHR5cGUpIHsNCiAgICArCWNhc2Ug
U19CT09MRUFOOg0KICAgICsJCXJldHVybiAiYm9vbCI7DQogICAgKwljYXNlIFNfVFJJU1RBVEU6
DQogICAgKwkJcmV0dXJuICJ0cmlzdGF0ZSI7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJCXJl
dHVybiAiaW50ZWdlciI7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCXJldHVybiAiaGV4IjsN
CiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJcmV0dXJuICJzdHJpbmciOw0KICAgICsJY2Fz
ZSBTX1VOS05PV046DQogICAgKwkJcmV0dXJuICJ1bmtub3duIjsNCiAgICArCX0NCiAgICArCXJl
dHVybiAiPz8/IjsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0
X2Nob2ljZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0IHBy
b3BlcnR5ICpwcm9wOw0KICAgICsNCiAgICArCWZvcl9hbGxfY2hvaWNlcyhzeW0sIHByb3ApDQog
ICAgKwkJcmV0dXJuIHByb3A7DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAg
ICArc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3RydWN0IHN5
bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKw0K
ICAgICsJZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHByb3ApIHsNCiAgICArCQlwcm9wLT52aXNpYmxl
LnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgICsJCWlmIChw
cm9wLT52aXNpYmxlLnRyaSAhPSBubykNCiAgICArCQkJcmV0dXJuIHByb3A7DQogICAgKwl9DQog
ICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHByb3BlcnR5ICpz
eW1fZ2V0X3JhbmdlX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKw0KICAgICsJZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwg
cHJvcCwgUF9SQU5HRSkgew0KICAgICsJCXByb3AtPnZpc2libGUudHJpID0gZXhwcl9jYWxjX3Zh
bHVlKHByb3AtPnZpc2libGUuZXhwcik7DQogICAgKwkJaWYgKHByb3AtPnZpc2libGUudHJpICE9
IG5vKQ0KICAgICsJCQlyZXR1cm4gcHJvcDsNCiAgICArCX0NCiAgICArCXJldHVybiBOVUxMOw0K
ICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgbG9uZyBsb25nIHN5bV9nZXRfcmFuZ2VfdmFsKHN0
cnVjdCBzeW1ib2wgKnN5bSwgaW50IGJhc2UpDQogICAgK3sNCiAgICArCXN5bV9jYWxjX3ZhbHVl
KHN5bSk7DQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJY2FzZSBTX0lOVDoNCiAg
ICArCQliYXNlID0gMTA7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJ
CWJhc2UgPSAxNjsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJYnJlYWs7
DQogICAgKwl9DQogICAgKwlyZXR1cm4gc3RydG9sbChzeW0tPmN1cnIudmFsLCBOVUxMLCBiYXNl
KTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgc3ltX3ZhbGlkYXRlX3JhbmdlKHN0
cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0K
ICAgICsJaW50IGJhc2U7DQogICAgKwlsb25nIGxvbmcgdmFsLCB2YWwyOw0KICAgICsJY2hhciBz
dHJbNjRdOw0KICAgICsNCiAgICArCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwljYXNlIFNf
SU5UOg0KICAgICsJCWJhc2UgPSAxMDsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgU19IRVg6
DQogICAgKwkJYmFzZSA9IDE2Ow0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAgICAr
CQlyZXR1cm47DQogICAgKwl9DQogICAgKwlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7
DQogICAgKwlpZiAoIXByb3ApDQogICAgKwkJcmV0dXJuOw0KICAgICsJdmFsID0gc3RydG9sbChz
eW0tPmN1cnIudmFsLCBOVUxMLCBiYXNlKTsNCiAgICArCXZhbDIgPSBzeW1fZ2V0X3JhbmdlX3Zh
bChwcm9wLT5leHByLT5sZWZ0LnN5bSwgYmFzZSk7DQogICAgKwlpZiAodmFsID49IHZhbDIpIHsN
CiAgICArCQl2YWwyID0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3ltLCBi
YXNlKTsNCiAgICArCQlpZiAodmFsIDw9IHZhbDIpDQogICAgKwkJCXJldHVybjsNCiAgICArCX0N
CiAgICArCWlmIChzeW0tPnR5cGUgPT0gU19JTlQpDQogICAgKwkJc3ByaW50ZihzdHIsICIlbGxk
IiwgdmFsMik7DQogICAgKwllbHNlDQogICAgKwkJc3ByaW50ZihzdHIsICIweCVsbHgiLCB2YWwy
KTsNCiAgICArCXN5bS0+Y3Vyci52YWwgPSB4c3RyZHVwKHN0cik7DQogICAgK30NCiAgICArDQog
ICAgK3N0YXRpYyB2b2lkIHN5bV9zZXRfY2hhbmdlZChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAg
K3sNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArDQogICAgKwlzeW0tPmZsYWdz
IHw9IFNZTUJPTF9DSEFOR0VEOw0KICAgICsJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBw
cm9wID0gcHJvcC0+bmV4dCkgew0KICAgICsJCWlmIChwcm9wLT5tZW51KQ0KICAgICsJCQlwcm9w
LT5tZW51LT5mbGFncyB8PSBNRU5VX0NIQU5HRUQ7DQogICAgKwl9DQogICAgK30NCiAgICArDQog
ICAgK3N0YXRpYyB2b2lkIHN5bV9zZXRfYWxsX2NoYW5nZWQodm9pZCkNCiAgICArew0KICAgICsJ
c3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJZm9yX2FsbF9z
eW1ib2xzKGksIHN5bSkNCiAgICArCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RhdGljIHZvaWQgc3ltX2NhbGNfdmlzaWJpbGl0eShzdHJ1Y3Qgc3ltYm9sICpz
eW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBz
eW1ib2wgKmNob2ljZV9zeW0gPSBOVUxMOw0KICAgICsJdHJpc3RhdGUgdHJpOw0KICAgICsNCiAg
ICArCS8qIGFueSBwcm9tcHQgdmlzaWJsZT8gKi8NCiAgICArCXRyaSA9IG5vOw0KICAgICsNCiAg
ICArCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpDQogICAgKwkJY2hvaWNlX3N5bSA9IHBy
b3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOw0KICAgICsNCiAgICArCWZv
cl9hbGxfcHJvbXB0cyhzeW0sIHByb3ApIHsNCiAgICArCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4
cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgICsJCS8qDQogICAgKwkJICog
VHJpc3RhdGUgY2hvaWNlX3ZhbHVlcyB3aXRoIHZpc2liaWxpdHkgJ21vZCcgYXJlDQogICAgKwkJ
ICogbm90IHZpc2libGUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgY2hvaWNlJ3MgdmFsdWUgaXMNCiAg
ICArCQkgKiAneWVzJy4NCiAgICArCQkgKi8NCiAgICArCQlpZiAoY2hvaWNlX3N5bSAmJiBzeW0t
PnR5cGUgPT0gU19UUklTVEFURSAmJg0KICAgICsJCSAgICBwcm9wLT52aXNpYmxlLnRyaSA9PSBt
b2QgJiYgY2hvaWNlX3N5bS0+Y3Vyci50cmkgPT0geWVzKQ0KICAgICsJCQlwcm9wLT52aXNpYmxl
LnRyaSA9IG5vOw0KICAgICsNCiAgICArCQl0cmkgPSBFWFBSX09SKHRyaSwgcHJvcC0+dmlzaWJs
ZS50cmkpOw0KICAgICsJfQ0KICAgICsJaWYgKHRyaSA9PSBtb2QgJiYgKHN5bS0+dHlwZSAhPSBT
X1RSSVNUQVRFIHx8IG1vZHVsZXNfdmFsID09IG5vKSkNCiAgICArCQl0cmkgPSB5ZXM7DQogICAg
KwlpZiAoc3ltLT52aXNpYmxlICE9IHRyaSkgew0KICAgICsJCXN5bS0+dmlzaWJsZSA9IHRyaTsN
CiAgICArCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICArCX0NCiAgICArCWlmIChzeW1faXNf
Y2hvaWNlX3ZhbHVlKHN5bSkpDQogICAgKwkJcmV0dXJuOw0KICAgICsJLyogZGVmYXVsdGluZyB0
byAieWVzIiBpZiBubyBleHBsaWNpdCAiZGVwZW5kcyBvbiIgYXJlIGdpdmVuICovDQogICAgKwl0
cmkgPSB5ZXM7DQogICAgKwlpZiAoc3ltLT5kaXJfZGVwLmV4cHIpDQogICAgKwkJdHJpID0gZXhw
cl9jYWxjX3ZhbHVlKHN5bS0+ZGlyX2RlcC5leHByKTsNCiAgICArCWlmICh0cmkgPT0gbW9kICYm
IHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikNCiAgICArCQl0cmkgPSB5ZXM7DQogICAg
KwlpZiAoc3ltLT5kaXJfZGVwLnRyaSAhPSB0cmkpIHsNCiAgICArCQlzeW0tPmRpcl9kZXAudHJp
ID0gdHJpOw0KICAgICsJCXN5bV9zZXRfY2hhbmdlZChzeW0pOw0KICAgICsJfQ0KICAgICsJdHJp
ID0gbm87DQogICAgKwlpZiAoc3ltLT5yZXZfZGVwLmV4cHIpDQogICAgKwkJdHJpID0gZXhwcl9j
YWxjX3ZhbHVlKHN5bS0+cmV2X2RlcC5leHByKTsNCiAgICArCWlmICh0cmkgPT0gbW9kICYmIHN5
bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikNCiAgICArCQl0cmkgPSB5ZXM7DQogICAgKwlp
ZiAoc3ltLT5yZXZfZGVwLnRyaSAhPSB0cmkpIHsNCiAgICArCQlzeW0tPnJldl9kZXAudHJpID0g
dHJpOw0KICAgICsJCXN5bV9zZXRfY2hhbmdlZChzeW0pOw0KICAgICsJfQ0KICAgICsJdHJpID0g
bm87DQogICAgKwlpZiAoc3ltLT5pbXBsaWVkLmV4cHIgJiYgc3ltLT5kaXJfZGVwLnRyaSAhPSBu
bykNCiAgICArCQl0cmkgPSBleHByX2NhbGNfdmFsdWUoc3ltLT5pbXBsaWVkLmV4cHIpOw0KICAg
ICsJaWYgKHRyaSA9PSBtb2QgJiYgc3ltX2dldF90eXBlKHN5bSkgPT0gU19CT09MRUFOKQ0KICAg
ICsJCXRyaSA9IHllczsNCiAgICArCWlmIChzeW0tPmltcGxpZWQudHJpICE9IHRyaSkgew0KICAg
ICsJCXN5bS0+aW1wbGllZC50cmkgPSB0cmk7DQogICAgKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7
DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIEZpbmQgdGhlIGRlZmF1
bHQgc3ltYm9sIGZvciBhIGNob2ljZS4NCiAgICArICogRmlyc3QgdHJ5IHRoZSBkZWZhdWx0IHZh
bHVlcyBmb3IgdGhlIGNob2ljZSBzeW1ib2wNCiAgICArICogTmV4dCBsb2NhdGUgdGhlIGZpcnN0
IHZpc2libGUgY2hvaWNlIHZhbHVlDQogICAgKyAqIFJldHVybiBOVUxMIGlmIG5vbmUgd2FzIGZv
dW5kDQogICAgKyAqLw0KICAgICtzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3Ry
dWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltOw0K
ICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IGV4cHIgKmU7DQogICAg
Kw0KICAgICsJLyogYW55IG9mIHRoZSBkZWZhdWx0cyB2aXNpYmxlPyAqLw0KICAgICsJZm9yX2Fs
bF9kZWZhdWx0cyhzeW0sIHByb3ApIHsNCiAgICArCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJf
Y2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgICsJCWlmIChwcm9wLT52aXNpYmxl
LnRyaSA9PSBubykNCiAgICArCQkJY29udGludWU7DQogICAgKwkJZGVmX3N5bSA9IHByb3BfZ2V0
X3N5bWJvbChwcm9wKTsNCiAgICArCQlpZiAoZGVmX3N5bS0+dmlzaWJsZSAhPSBubykNCiAgICAr
CQkJcmV0dXJuIGRlZl9zeW07DQogICAgKwl9DQogICAgKw0KICAgICsJLyoganVzdCBnZXQgdGhl
IGZpcnN0IHZpc2libGUgdmFsdWUgKi8NCiAgICArCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9w
KHN5bSk7DQogICAgKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIGRlZl9z
eW0pDQogICAgKwkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8pDQogICAgKwkJCXJldHVybiBk
ZWZfc3ltOw0KICAgICsNCiAgICArCS8qIGZhaWxlZCB0byBsb2NhdGUgYW55IGRlZmF1bHRzICov
DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBz
eW1ib2wgKnN5bV9jYWxjX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICAr
CXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQog
ICAgKwlzdHJ1Y3QgZXhwciAqZTsNCiAgICArCWludCBmbGFnczsNCiAgICArDQogICAgKwkvKiBm
aXJzdCBjYWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxpdGllcyAqLw0KICAgICsJ
ZmxhZ3MgPSBzeW0tPmZsYWdzOw0KICAgICsJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3lt
KTsNCiAgICArCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgZGVmX3N5bSkg
ew0KICAgICsJCXN5bV9jYWxjX3Zpc2liaWxpdHkoZGVmX3N5bSk7DQogICAgKwkJaWYgKGRlZl9z
eW0tPnZpc2libGUgIT0gbm8pDQogICAgKwkJCWZsYWdzICY9IGRlZl9zeW0tPmZsYWdzOw0KICAg
ICsJfQ0KICAgICsNCiAgICArCXN5bS0+ZmxhZ3MgJj0gZmxhZ3MgfCB+U1lNQk9MX0RFRl9VU0VS
Ow0KICAgICsNCiAgICArCS8qIGlzIHRoZSB1c2VyIGNob2ljZSB2aXNpYmxlPyAqLw0KICAgICsJ
ZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsNCiAgICArCWlmIChkZWZfc3ltICYm
IGRlZl9zeW0tPnZpc2libGUgIT0gbm8pDQogICAgKwkJcmV0dXJuIGRlZl9zeW07DQogICAgKw0K
ICAgICsJZGVmX3N5bSA9IHN5bV9jaG9pY2VfZGVmYXVsdChzeW0pOw0KICAgICsNCiAgICArCWlm
IChkZWZfc3ltID09IE5VTEwpDQogICAgKwkJLyogbm8gY2hvaWNlPyByZXNldCB0cmlzdGF0ZSB2
YWx1ZSAqLw0KICAgICsJCXN5bS0+Y3Vyci50cmkgPSBubzsNCiAgICArDQogICAgKwlyZXR1cm4g
ZGVmX3N5bTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgc3ltX3dhcm5fdW5tZXRf
ZGVwKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0IGdzdHIgZ3MgPSBz
dHJfbmV3KCk7DQogICAgKw0KICAgICsJc3RyX3ByaW50ZigmZ3MsDQogICAgKwkJICAgIlxuV0FS
TklORzogdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyBkZXRlY3RlZCBmb3IgJXNcbiIsDQogICAg
KwkJICAgc3ltLT5uYW1lKTsNCiAgICArCXN0cl9wcmludGYoJmdzLA0KICAgICsJCSAgICIgIERl
cGVuZHMgb24gWyVjXTogIiwNCiAgICArCQkgICBzeW0tPmRpcl9kZXAudHJpID09IG1vZCA/ICdt
JyA6ICduJyk7DQogICAgKwlleHByX2dzdHJfcHJpbnQoc3ltLT5kaXJfZGVwLmV4cHIsICZncyk7
DQogICAgKwlzdHJfcHJpbnRmKCZncywgIlxuIik7DQogICAgKw0KICAgICsJZXhwcl9nc3RyX3By
aW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwgJmdzLCB5ZXMsDQogICAgKwkJCSAgICAgICAi
ICBTZWxlY3RlZCBieSBbeV06XG4iKTsNCiAgICArCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3lt
LT5yZXZfZGVwLmV4cHIsICZncywgbW9kLA0KICAgICsJCQkgICAgICAgIiAgU2VsZWN0ZWQgYnkg
W21dOlxuIik7DQogICAgKw0KICAgICsJZnB1dHMoc3RyX2dldCgmZ3MpLCBzdGRlcnIpOw0KICAg
ICt9DQogICAgKw0KICAgICt2b2lkIHN5bV9jYWxjX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkN
CiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbF92YWx1ZSBuZXd2YWwsIG9sZHZhbDsNCiAgICAr
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBleHByICplOw0KICAgICsNCiAg
ICArCWlmICghc3ltKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwlpZiAoc3ltLT5mbGFn
cyAmIFNZTUJPTF9WQUxJRCkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJaWYgKHN5bV9p
c19jaG9pY2VfdmFsdWUoc3ltKSAmJg0KICAgICsJICAgIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfTkVF
RF9TRVRfQ0hPSUNFX1ZBTFVFUykgew0KICAgICsJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9ORUVE
X1NFVF9DSE9JQ0VfVkFMVUVTOw0KICAgICsJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5
bSk7DQogICAgKwkJc3ltX2NhbGNfdmFsdWUocHJvcF9nZXRfc3ltYm9sKHByb3ApKTsNCiAgICAr
CX0NCiAgICArDQogICAgKwlzeW0tPmZsYWdzIHw9IFNZTUJPTF9WQUxJRDsNCiAgICArDQogICAg
KwlvbGR2YWwgPSBzeW0tPmN1cnI7DQogICAgKw0KICAgICsJc3dpdGNoIChzeW0tPnR5cGUpIHsN
CiAgICArCWNhc2UgU19JTlQ6DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJY2FzZSBTX1NUUklO
RzoNCiAgICArCQluZXd2YWwgPSBzeW1ib2xfZW1wdHkuY3VycjsNCiAgICArCQlicmVhazsNCiAg
ICArCWNhc2UgU19CT09MRUFOOg0KICAgICsJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCW5ld3Zh
bCA9IHN5bWJvbF9uby5jdXJyOw0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAgICAr
CQlzeW0tPmN1cnIudmFsID0gc3ltLT5uYW1lOw0KICAgICsJCXN5bS0+Y3Vyci50cmkgPSBubzsN
CiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKwlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJ
VEU7DQogICAgKw0KICAgICsJc3ltX2NhbGNfdmlzaWJpbGl0eShzeW0pOw0KICAgICsNCiAgICAr
CWlmIChzeW0tPnZpc2libGUgIT0gbm8pDQogICAgKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJ
VEU7DQogICAgKw0KICAgICsJLyogc2V0IGRlZmF1bHQgaWYgcmVjdXJzaXZlbHkgY2FsbGVkICov
DQogICAgKwlzeW0tPmN1cnIgPSBuZXd2YWw7DQogICAgKw0KICAgICsJc3dpdGNoIChzeW1fZ2V0
X3R5cGUoc3ltKSkgew0KICAgICsJY2FzZSBTX0JPT0xFQU46DQogICAgKwljYXNlIFNfVFJJU1RB
VEU6DQogICAgKwkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBzeW0tPnZpc2libGUg
PT0geWVzKSB7DQogICAgKwkJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7DQogICAg
KwkJCW5ld3ZhbC50cmkgPSAocHJvcF9nZXRfc3ltYm9sKHByb3ApLT5jdXJyLnZhbCA9PSBzeW0p
ID8geWVzIDogbm87DQogICAgKwkJfSBlbHNlIHsNCiAgICArCQkJaWYgKHN5bS0+dmlzaWJsZSAh
PSBubykgew0KICAgICsJCQkJLyogaWYgdGhlIHN5bWJvbCBpcyB2aXNpYmxlIHVzZSB0aGUgdXNl
ciB2YWx1ZQ0KICAgICsJCQkJICogaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdHJ5IHRoZSBkZWZh
dWx0IHZhbHVlDQogICAgKwkJCQkgKi8NCiAgICArCQkJCWlmIChzeW1faGFzX3ZhbHVlKHN5bSkp
IHsNCiAgICArCQkJCQluZXd2YWwudHJpID0gRVhQUl9BTkQoc3ltLT5kZWZbU19ERUZfVVNFUl0u
dHJpLA0KICAgICsJCQkJCQkJICAgICAgc3ltLT52aXNpYmxlKTsNCiAgICArCQkJCQlnb3RvIGNh
bGNfbmV3dmFsOw0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAgKwkJCWlmIChzeW0tPnJldl9k
ZXAudHJpICE9IG5vKQ0KICAgICsJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7DQogICAg
KwkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJCQlwcm9wID0gc3ltX2dldF9k
ZWZhdWx0X3Byb3Aoc3ltKTsNCiAgICArCQkJCWlmIChwcm9wKSB7DQogICAgKwkJCQkJbmV3dmFs
LnRyaSA9IEVYUFJfQU5EKGV4cHJfY2FsY192YWx1ZShwcm9wLT5leHByKSwNCiAgICArCQkJCQkJ
CSAgICAgIHByb3AtPnZpc2libGUudHJpKTsNCiAgICArCQkJCQlpZiAobmV3dmFsLnRyaSAhPSBu
bykNCiAgICArCQkJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7DQogICAgKwkJCQl9DQog
ICAgKwkJCQlpZiAoc3ltLT5pbXBsaWVkLnRyaSAhPSBubykgew0KICAgICsJCQkJCXN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX1dSSVRFOw0KICAgICsJCQkJCW5ld3ZhbC50cmkgPSBFWFBSX09SKG5ld3Zh
bC50cmksIHN5bS0+aW1wbGllZC50cmkpOw0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAgKwkJ
Y2FsY19uZXd2YWw6DQogICAgKwkJCWlmIChzeW0tPmRpcl9kZXAudHJpIDwgc3ltLT5yZXZfZGVw
LnRyaSkNCiAgICArCQkJCXN5bV93YXJuX3VubWV0X2RlcChzeW0pOw0KICAgICsJCQluZXd2YWwu
dHJpID0gRVhQUl9PUihuZXd2YWwudHJpLCBzeW0tPnJldl9kZXAudHJpKTsNCiAgICArCQl9DQog
ICAgKwkJaWYgKG5ld3ZhbC50cmkgPT0gbW9kICYmDQogICAgKwkJICAgIChzeW1fZ2V0X3R5cGUo
c3ltKSA9PSBTX0JPT0xFQU4gfHwgc3ltLT5pbXBsaWVkLnRyaSA9PSB5ZXMpKQ0KICAgICsJCQlu
ZXd2YWwudHJpID0geWVzOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX1NUUklORzoNCiAg
ICArCWNhc2UgU19IRVg6DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJCWlmIChzeW0tPnZpc2li
bGUgIT0gbm8gJiYgc3ltX2hhc192YWx1ZShzeW0pKSB7DQogICAgKwkJCW5ld3ZhbC52YWwgPSBz
eW0tPmRlZltTX0RFRl9VU0VSXS52YWw7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICAr
CQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsNCiAgICArCQlpZiAocHJvcCkgew0K
ICAgICsJCQlzdHJ1Y3Qgc3ltYm9sICpkcyA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsNCiAgICAr
CQkJaWYgKGRzKSB7DQogICAgKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsNCiAgICAr
CQkJCXN5bV9jYWxjX3ZhbHVlKGRzKTsNCiAgICArCQkJCW5ld3ZhbC52YWwgPSBkcy0+Y3Vyci52
YWw7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0K
ICAgICsJCTsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW0tPmN1cnIgPSBuZXd2YWw7DQogICAg
KwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIG5ld3ZhbC50cmkgPT0geWVzKQ0KICAgICsJCXN5
bS0+Y3Vyci52YWwgPSBzeW1fY2FsY19jaG9pY2Uoc3ltKTsNCiAgICArCXN5bV92YWxpZGF0ZV9y
YW5nZShzeW0pOw0KICAgICsNCiAgICArCWlmIChtZW1jbXAoJm9sZHZhbCwgJnN5bS0+Y3Vyciwg
c2l6ZW9mKG9sZHZhbCkpKSB7DQogICAgKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAgKwkJ
aWYgKG1vZHVsZXNfc3ltID09IHN5bSkgew0KICAgICsJCQlzeW1fc2V0X2FsbF9jaGFuZ2VkKCk7
DQogICAgKwkJCW1vZHVsZXNfdmFsID0gbW9kdWxlc19zeW0tPmN1cnIudHJpOw0KICAgICsJCX0N
CiAgICArCX0NCiAgICArDQogICAgKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJ
c3RydWN0IHN5bWJvbCAqY2hvaWNlX3N5bTsNCiAgICArDQogICAgKwkJcHJvcCA9IHN5bV9nZXRf
Y2hvaWNlX3Byb3Aoc3ltKTsNCiAgICArCQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4
cHIsIGUsIGNob2ljZV9zeW0pIHsNCiAgICArCQkJaWYgKChzeW0tPmZsYWdzICYgU1lNQk9MX1dS
SVRFKSAmJg0KICAgICsJCQkgICAgY2hvaWNlX3N5bS0+dmlzaWJsZSAhPSBubykNCiAgICArCQkJ
CWNob2ljZV9zeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsNCiAgICArCQkJaWYgKHN5bS0+Zmxh
Z3MgJiBTWU1CT0xfQ0hBTkdFRCkNCiAgICArCQkJCXN5bV9zZXRfY2hhbmdlZChjaG9pY2Vfc3lt
KTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1C
T0xfTk9fV1JJVEUpDQogICAgKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1dSSVRFOw0KICAgICsN
CiAgICArCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMpDQog
ICAgKwkJc2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN5bSk7DQogICAgK30NCiAgICArDQogICAgK3Zv
aWQgc3ltX2NsZWFyX2FsbF92YWxpZCh2b2lkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9s
ICpzeW07DQogICAgKwlpbnQgaTsNCiAgICArDQogICAgKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3lt
KQ0KICAgICsJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsNCiAgICArCXN5bV9hZGRfY2hh
bmdlX2NvdW50KDEpOw0KICAgICsJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOw0KICAgICt9
DQogICAgKw0KICAgICtib29sIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3RydWN0IHN5bWJv
bCAqc3ltLCB0cmlzdGF0ZSB2YWwpDQogICAgK3sNCiAgICArCWludCB0eXBlID0gc3ltX2dldF90
eXBlKHN5bSk7DQogICAgKw0KICAgICsJaWYgKHN5bS0+dmlzaWJsZSA9PSBubykNCiAgICArCQly
ZXR1cm4gZmFsc2U7DQogICAgKw0KICAgICsJaWYgKHR5cGUgIT0gU19CT09MRUFOICYmIHR5cGUg
IT0gU19UUklTVEFURSkNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKw0KICAgICsJaWYgKHR5
cGUgPT0gU19CT09MRUFOICYmIHZhbCA9PSBtb2QpDQogICAgKwkJcmV0dXJuIGZhbHNlOw0KICAg
ICsJaWYgKHN5bS0+dmlzaWJsZSA8PSBzeW0tPnJldl9kZXAudHJpKQ0KICAgICsJCXJldHVybiBm
YWxzZTsNCiAgICArCWlmIChzeW0tPmltcGxpZWQudHJpID09IHllcyAmJiB2YWwgPT0gbW9kKQ0K
ICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkg
JiYgc3ltLT52aXNpYmxlID09IHllcykNCiAgICArCQlyZXR1cm4gdmFsID09IHllczsNCiAgICAr
CXJldHVybiB2YWwgPj0gc3ltLT5yZXZfZGVwLnRyaSAmJiB2YWwgPD0gc3ltLT52aXNpYmxlOw0K
ICAgICt9DQogICAgKw0KICAgICtib29sIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5
bWJvbCAqc3ltLCB0cmlzdGF0ZSB2YWwpDQogICAgK3sNCiAgICArCXRyaXN0YXRlIG9sZHZhbCA9
IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArDQogICAgKwlpZiAob2xkdmFsICE9
IHZhbCAmJiAhc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHZhbCkpDQogICAgKwkJcmV0
dXJuIGZhbHNlOw0KICAgICsNCiAgICArCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfREVGX1VT
RVIpKSB7DQogICAgKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQogICAgKwkJc3lt
X3NldF9jaGFuZ2VkKHN5bSk7DQogICAgKwl9DQogICAgKwkvKg0KICAgICsJICogc2V0dGluZyBh
IGNob2ljZSB2YWx1ZSBhbHNvIHJlc2V0cyB0aGUgbmV3IGZsYWcgb2YgdGhlIGNob2ljZQ0KICAg
ICsJICogc3ltYm9sIGFuZCBhbGwgb3RoZXIgY2hvaWNlIHZhbHVlcy4NCiAgICArCSAqLw0KICAg
ICsJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB2YWwgPT0geWVzKSB7DQogICAgKwkJ
c3RydWN0IHN5bWJvbCAqY3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChz
eW0pKTsNCiAgICArCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwkJc3RydWN0IGV4cHIg
KmU7DQogICAgKw0KICAgICsJCWNzLT5kZWZbU19ERUZfVVNFUl0udmFsID0gc3ltOw0KICAgICsJ
CWNzLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQogICAgKwkJcHJvcCA9IHN5bV9nZXRfY2hv
aWNlX3Byb3AoY3MpOw0KICAgICsJCWZvciAoZSA9IHByb3AtPmV4cHI7IGU7IGUgPSBlLT5sZWZ0
LmV4cHIpIHsNCiAgICArCQkJaWYgKGUtPnJpZ2h0LnN5bS0+dmlzaWJsZSAhPSBubykNCiAgICAr
CQkJCWUtPnJpZ2h0LnN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgICsJCX0NCiAg
ICArCX0NCiAgICArDQogICAgKwlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSB2YWw7DQogICAg
KwlpZiAob2xkdmFsICE9IHZhbCkNCiAgICArCQlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7DQogICAg
Kw0KICAgICsJcmV0dXJuIHRydWU7DQogICAgK30NCiAgICArDQogICAgK3RyaXN0YXRlIHN5bV90
b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwl0
cmlzdGF0ZSBvbGR2YWwsIG5ld3ZhbDsNCiAgICArDQogICAgKwlvbGR2YWwgPSBuZXd2YWwgPSBz
eW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKwlkbyB7DQogICAgKwkJc3dpdGNoIChu
ZXd2YWwpIHsNCiAgICArCQljYXNlIG5vOg0KICAgICsJCQluZXd2YWwgPSBtb2Q7DQogICAgKwkJ
CWJyZWFrOw0KICAgICsJCWNhc2UgbW9kOg0KICAgICsJCQluZXd2YWwgPSB5ZXM7DQogICAgKwkJ
CWJyZWFrOw0KICAgICsJCWNhc2UgeWVzOg0KICAgICsJCQluZXd2YWwgPSBubzsNCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwg
bmV3dmFsKSkNCiAgICArCQkJYnJlYWs7DQogICAgKwl9IHdoaWxlIChvbGR2YWwgIT0gbmV3dmFs
KTsNCiAgICArCXJldHVybiBuZXd2YWw7DQogICAgK30NCiAgICArDQogICAgK2Jvb2wgc3ltX3N0
cmluZ192YWxpZChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikNCiAgICArew0K
ICAgICsJc2lnbmVkIGNoYXIgY2g7DQogICAgKw0KICAgICsJc3dpdGNoIChzeW0tPnR5cGUpIHsN
CiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJcmV0dXJuIHRydWU7DQogICAgKwljYXNlIFNf
SU5UOg0KICAgICsJCWNoID0gKnN0cisrOw0KICAgICsJCWlmIChjaCA9PSAnLScpDQogICAgKwkJ
CWNoID0gKnN0cisrOw0KICAgICsJCWlmICghaXNkaWdpdChjaCkpDQogICAgKwkJCXJldHVybiBm
YWxzZTsNCiAgICArCQlpZiAoY2ggPT0gJzAnICYmICpzdHIgIT0gMCkNCiAgICArCQkJcmV0dXJu
IGZhbHNlOw0KICAgICsJCXdoaWxlICgoY2ggPSAqc3RyKyspKSB7DQogICAgKwkJCWlmICghaXNk
aWdpdChjaCkpDQogICAgKwkJCQlyZXR1cm4gZmFsc2U7DQogICAgKwkJfQ0KICAgICsJCXJldHVy
biB0cnVlOw0KICAgICsJY2FzZSBTX0hFWDoNCiAgICArCQlpZiAoc3RyWzBdID09ICcwJyAmJiAo
c3RyWzFdID09ICd4JyB8fCBzdHJbMV0gPT0gJ1gnKSkNCiAgICArCQkJc3RyICs9IDI7DQogICAg
KwkJY2ggPSAqc3RyKys7DQogICAgKwkJZG8gew0KICAgICsJCQlpZiAoIWlzeGRpZ2l0KGNoKSkN
CiAgICArCQkJCXJldHVybiBmYWxzZTsNCiAgICArCQl9IHdoaWxlICgoY2ggPSAqc3RyKyspKTsN
CiAgICArCQlyZXR1cm4gdHJ1ZTsNCiAgICArCWNhc2UgU19CT09MRUFOOg0KICAgICsJY2FzZSBT
X1RSSVNUQVRFOg0KICAgICsJCXN3aXRjaCAoc3RyWzBdKSB7DQogICAgKwkJY2FzZSAneSc6IGNh
c2UgJ1knOg0KICAgICsJCWNhc2UgJ20nOiBjYXNlICdNJzoNCiAgICArCQljYXNlICduJzogY2Fz
ZSAnTic6DQogICAgKwkJCXJldHVybiB0cnVlOw0KICAgICsJCX0NCiAgICArCQlyZXR1cm4gZmFs
c2U7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArCX0NCiAgICAr
fQ0KICAgICsNCiAgICArYm9vbCBzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzdHJ1Y3Qgc3ltYm9s
ICpzeW0sIGNvbnN0IGNoYXIgKnN0cikNCiAgICArew0KICAgICsJc3RydWN0IHByb3BlcnR5ICpw
cm9wOw0KICAgICsJbG9uZyBsb25nIHZhbDsNCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bS0+dHlw
ZSkgew0KICAgICsJY2FzZSBTX1NUUklORzoNCiAgICArCQlyZXR1cm4gc3ltX3N0cmluZ192YWxp
ZChzeW0sIHN0cik7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJCWlmICghc3ltX3N0cmluZ192
YWxpZChzeW0sIHN0cikpDQogICAgKwkJCXJldHVybiBmYWxzZTsNCiAgICArCQlwcm9wID0gc3lt
X2dldF9yYW5nZV9wcm9wKHN5bSk7DQogICAgKwkJaWYgKCFwcm9wKQ0KICAgICsJCQlyZXR1cm4g
dHJ1ZTsNCiAgICArCQl2YWwgPSBzdHJ0b2xsKHN0ciwgTlVMTCwgMTApOw0KICAgICsJCXJldHVy
biB2YWwgPj0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIDEwKSAmJg0K
ICAgICsJCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQu
c3ltLCAxMCk7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCWlmICghc3ltX3N0cmluZ192YWxp
ZChzeW0sIHN0cikpDQogICAgKwkJCXJldHVybiBmYWxzZTsNCiAgICArCQlwcm9wID0gc3ltX2dl
dF9yYW5nZV9wcm9wKHN5bSk7DQogICAgKwkJaWYgKCFwcm9wKQ0KICAgICsJCQlyZXR1cm4gdHJ1
ZTsNCiAgICArCQl2YWwgPSBzdHJ0b2xsKHN0ciwgTlVMTCwgMTYpOw0KICAgICsJCXJldHVybiB2
YWwgPj0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIDE2KSAmJg0KICAg
ICsJCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+cmlnaHQuc3lt
LCAxNik7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCWNhc2UgU19UUklTVEFURToNCiAg
ICArCQlzd2l0Y2ggKHN0clswXSkgew0KICAgICsJCWNhc2UgJ3knOiBjYXNlICdZJzoNCiAgICAr
CQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5ZXMpOw0KICAgICsJCWNh
c2UgJ20nOiBjYXNlICdNJzoNCiAgICArCQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFu
Z2Uoc3ltLCBtb2QpOw0KICAgICsJCWNhc2UgJ24nOiBjYXNlICdOJzoNCiAgICArCQkJcmV0dXJu
IHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubyk7DQogICAgKwkJfQ0KICAgICsJCXJl
dHVybiBmYWxzZTsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJcmV0dXJuIGZhbHNlOw0KICAgICsJ
fQ0KICAgICt9DQogICAgKw0KICAgICtib29sIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBz
eW1ib2wgKnN5bSwgY29uc3QgY2hhciAqbmV3dmFsKQ0KICAgICt7DQogICAgKwljb25zdCBjaGFy
ICpvbGR2YWw7DQogICAgKwljaGFyICp2YWw7DQogICAgKwlpbnQgc2l6ZTsNCiAgICArDQogICAg
Kwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJY2FzZSBTX0JPT0xFQU46DQogICAgKwljYXNl
IFNfVFJJU1RBVEU6DQogICAgKwkJc3dpdGNoIChuZXd2YWxbMF0pIHsNCiAgICArCQljYXNlICd5
JzogY2FzZSAnWSc6DQogICAgKwkJCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwg
eWVzKTsNCiAgICArCQljYXNlICdtJzogY2FzZSAnTSc6DQogICAgKwkJCXJldHVybiBzeW1fc2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsNCiAgICArCQljYXNlICduJzogY2FzZSAnTic6DQog
ICAgKwkJCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbm8pOw0KICAgICsJCX0N
CiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0N
CiAgICArDQogICAgKwlpZiAoIXN5bV9zdHJpbmdfd2l0aGluX3JhbmdlKHN5bSwgbmV3dmFsKSkN
CiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKw0KICAgICsJaWYgKCEoc3ltLT5mbGFncyAmIFNZ
TUJPTF9ERUZfVVNFUikpIHsNCiAgICArCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsN
CiAgICArCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICArCX0NCiAgICArDQogICAgKwlvbGR2
YWwgPSBzeW0tPmRlZltTX0RFRl9VU0VSXS52YWw7DQogICAgKwlzaXplID0gc3RybGVuKG5ld3Zh
bCkgKyAxOw0KICAgICsJaWYgKHN5bS0+dHlwZSA9PSBTX0hFWCAmJiAobmV3dmFsWzBdICE9ICcw
JyB8fCAobmV3dmFsWzFdICE9ICd4JyAmJiBuZXd2YWxbMV0gIT0gJ1gnKSkpIHsNCiAgICArCQlz
aXplICs9IDI7DQogICAgKwkJc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gdmFsID0geG1hbGxv
YyhzaXplKTsNCiAgICArCQkqdmFsKysgPSAnMCc7DQogICAgKwkJKnZhbCsrID0gJ3gnOw0KICAg
ICsJfSBlbHNlIGlmICghb2xkdmFsIHx8IHN0cmNtcChvbGR2YWwsIG5ld3ZhbCkpDQogICAgKwkJ
c3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gdmFsID0geG1hbGxvYyhzaXplKTsNCiAgICArCWVs
c2UNCiAgICArCQlyZXR1cm4gdHJ1ZTsNCiAgICArDQogICAgKwlzdHJjcHkodmFsLCBuZXd2YWwp
Ow0KICAgICsJZnJlZSgodm9pZCAqKW9sZHZhbCk7DQogICAgKwlzeW1fY2xlYXJfYWxsX3ZhbGlk
KCk7DQogICAgKw0KICAgICsJcmV0dXJuIHRydWU7DQogICAgK30NCiAgICArDQogICAgKy8qDQog
ICAgKyAqIEZpbmQgdGhlIGRlZmF1bHQgdmFsdWUgYXNzb2NpYXRlZCB0byBhIHN5bWJvbC4NCiAg
ICArICogRm9yIHRyaXN0YXRlIHN5bWJvbCBoYW5kbGUgdGhlIG1vZHVsZXM9biBjYXNlDQogICAg
KyAqIGluIHdoaWNoIGNhc2UgIm0iIGJlY29tZXMgInkiLg0KICAgICsgKiBJZiB0aGUgc3ltYm9s
IGRvZXMgbm90IGhhdmUgYW55IGRlZmF1bHQgdGhlbiBmYWxsYmFjaw0KICAgICsgKiB0byB0aGUg
Zml4ZWQgZGVmYXVsdCB2YWx1ZXMuDQogICAgKyAqLw0KICAgICtjb25zdCBjaGFyICpzeW1fZ2V0
X3N0cmluZ19kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0
IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IHN5bWJvbCAqZHM7DQogICAgKwljb25zdCBj
aGFyICpzdHI7DQogICAgKwl0cmlzdGF0ZSB2YWw7DQogICAgKw0KICAgICsJc3ltX2NhbGNfdmlz
aWJpbGl0eShzeW0pOw0KICAgICsJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOw0KICAgICsJ
dmFsID0gc3ltYm9sX25vLmN1cnIudHJpOw0KICAgICsJc3RyID0gc3ltYm9sX2VtcHR5LmN1cnIu
dmFsOw0KICAgICsNCiAgICArCS8qIElmIHN5bWJvbCBoYXMgYSBkZWZhdWx0IHZhbHVlIGxvb2sg
aXQgdXAgKi8NCiAgICArCXByb3AgPSBzeW1fZ2V0X2RlZmF1bHRfcHJvcChzeW0pOw0KICAgICsJ
aWYgKHByb3AgIT0gTlVMTCkgew0KICAgICsJCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwkJ
Y2FzZSBTX0JPT0xFQU46DQogICAgKwkJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCQkvKiBUaGUg
dmlzaWJpbGl0eSBtYXkgbGltaXQgdGhlIHZhbHVlIGZyb20geWVzID0+IG1vZCAqLw0KICAgICsJ
CQl2YWwgPSBFWFBSX0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwciksIHByb3AtPnZpc2li
bGUudHJpKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJLyoNCiAg
ICArCQkJICogVGhlIGZvbGxvd2luZyBmYWlscyB0byBoYW5kbGUgdGhlIHNpdHVhdGlvbg0KICAg
ICsJCQkgKiB3aGVyZSBhIGRlZmF1bHQgdmFsdWUgaXMgZnVydGhlciBsaW1pdGVkIGJ5DQogICAg
KwkJCSAqIHRoZSB2YWxpZCByYW5nZS4NCiAgICArCQkJICovDQogICAgKwkJCWRzID0gcHJvcF9n
ZXRfc3ltYm9sKHByb3ApOw0KICAgICsJCQlpZiAoZHMgIT0gTlVMTCkgew0KICAgICsJCQkJc3lt
X2NhbGNfdmFsdWUoZHMpOw0KICAgICsJCQkJc3RyID0gKGNvbnN0IGNoYXIgKilkcy0+Y3Vyci52
YWw7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJLyogSGFuZGxl
IHNlbGVjdCBzdGF0ZW1lbnRzICovDQogICAgKwl2YWwgPSBFWFBSX09SKHZhbCwgc3ltLT5yZXZf
ZGVwLnRyaSk7DQogICAgKw0KICAgICsJLyogdHJhbnNwb3NlIG1vZCB0byB5ZXMgaWYgbW9kdWxl
cyBhcmUgbm90IGVuYWJsZWQgKi8NCiAgICArCWlmICh2YWwgPT0gbW9kKQ0KICAgICsJCWlmICgh
c3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIG1vZHVsZXNfc3ltLT5jdXJyLnRyaSA9PSBubykN
CiAgICArCQkJdmFsID0geWVzOw0KICAgICsNCiAgICArCS8qIHRyYW5zcG9zZSBtb2QgdG8geWVz
IGlmIHR5cGUgaXMgYm9vbCAqLw0KICAgICsJaWYgKHN5bS0+dHlwZSA9PSBTX0JPT0xFQU4gJiYg
dmFsID09IG1vZCkNCiAgICArCQl2YWwgPSB5ZXM7DQogICAgKw0KICAgICsJLyogYWRqdXN0IHRo
ZSBkZWZhdWx0IHZhbHVlIGlmIHRoaXMgc3ltYm9sIGlzIGltcGxpZWQgYnkgYW5vdGhlciAqLw0K
ICAgICsJaWYgKHZhbCA8IHN5bS0+aW1wbGllZC50cmkpDQogICAgKwkJdmFsID0gc3ltLT5pbXBs
aWVkLnRyaTsNCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJY2FzZSBT
X0JPT0xFQU46DQogICAgKwljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJc3dpdGNoICh2YWwpIHsN
CiAgICArCQljYXNlIG5vOiByZXR1cm4gIm4iOw0KICAgICsJCWNhc2UgbW9kOiByZXR1cm4gIm0i
Ow0KICAgICsJCWNhc2UgeWVzOiByZXR1cm4gInkiOw0KICAgICsJCX0NCiAgICArCWNhc2UgU19J
TlQ6DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCXJldHVybiBzdHI7DQogICAgKwljYXNlIFNf
U1RSSU5HOg0KICAgICsJCXJldHVybiBzdHI7DQogICAgKwljYXNlIFNfVU5LTk9XTjoNCiAgICAr
CQlicmVhazsNCiAgICArCX0NCiAgICArCXJldHVybiAiIjsNCiAgICArfQ0KICAgICsNCiAgICAr
Y29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAg
ICt7DQogICAgKwl0cmlzdGF0ZSB2YWw7DQogICAgKw0KICAgICsJc3dpdGNoIChzeW0tPnR5cGUp
IHsNCiAgICArCWNhc2UgU19CT09MRUFOOg0KICAgICsJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJ
CXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArCQlzd2l0Y2ggKHZhbCkg
ew0KICAgICsJCWNhc2Ugbm86DQogICAgKwkJCXJldHVybiAibiI7DQogICAgKwkJY2FzZSBtb2Q6
DQogICAgKwkJCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsNCiAgICArCQkJcmV0dXJuICht
b2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pID8gIm4iIDogIm0iOw0KICAgICsJCWNhc2UgeWVz
Og0KICAgICsJCQlyZXR1cm4gInkiOw0KICAgICsJCX0NCiAgICArCQlicmVhazsNCiAgICArCWRl
ZmF1bHQ6DQogICAgKwkJOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIChjb25zdCBjaGFyICopc3lt
LT5jdXJyLnZhbDsNCiAgICArfQ0KICAgICsNCiAgICArYm9vbCBzeW1faXNfY2hhbmdhYmxlKHN0
cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJcmV0dXJuIHN5bS0+dmlzaWJsZSA+IHN5
bS0+cmV2X2RlcC50cmk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB1bnNpZ25lZCBzdHJo
YXNoKGNvbnN0IGNoYXIgKnMpDQogICAgK3sNCiAgICArCS8qIGZudjMyIGhhc2ggKi8NCiAgICAr
CXVuc2lnbmVkIGhhc2ggPSAyMTY2MTM2MjYxVTsNCiAgICArCWZvciAoOyAqczsgcysrKQ0KICAg
ICsJCWhhc2ggPSAoaGFzaCBeICpzKSAqIDB4MDEwMDAxOTM7DQogICAgKwlyZXR1cm4gaGFzaDsN
CiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHN5bWJvbCAqc3ltX2xvb2t1cChjb25zdCBjaGFy
ICpuYW1lLCBpbnQgZmxhZ3MpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bWJvbDsN
CiAgICArCWNoYXIgKm5ld19uYW1lOw0KICAgICsJaW50IGhhc2g7DQogICAgKw0KICAgICsJaWYg
KG5hbWUpIHsNCiAgICArCQlpZiAobmFtZVswXSAmJiAhbmFtZVsxXSkgew0KICAgICsJCQlzd2l0
Y2ggKG5hbWVbMF0pIHsNCiAgICArCQkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3llczsNCiAg
ICArCQkJY2FzZSAnbSc6IHJldHVybiAmc3ltYm9sX21vZDsNCiAgICArCQkJY2FzZSAnbic6IHJl
dHVybiAmc3ltYm9sX25vOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJCWhhc2ggPSBzdHJo
YXNoKG5hbWUpICUgU1lNQk9MX0hBU0hTSVpFOw0KICAgICsNCiAgICArCQlmb3IgKHN5bWJvbCA9
IHN5bWJvbF9oYXNoW2hhc2hdOyBzeW1ib2w7IHN5bWJvbCA9IHN5bWJvbC0+bmV4dCkgew0KICAg
ICsJCQlpZiAoc3ltYm9sLT5uYW1lICYmDQogICAgKwkJCSAgICAhc3RyY21wKHN5bWJvbC0+bmFt
ZSwgbmFtZSkgJiYNCiAgICArCQkJICAgIChmbGFncyA/IHN5bWJvbC0+ZmxhZ3MgJiBmbGFncw0K
ICAgICsJCQkJICAgOiAhKHN5bWJvbC0+ZmxhZ3MgJiAoU1lNQk9MX0NPTlNUfFNZTUJPTF9DSE9J
Q0UpKSkpDQogICAgKwkJCQlyZXR1cm4gc3ltYm9sOw0KICAgICsJCX0NCiAgICArCQluZXdfbmFt
ZSA9IHhzdHJkdXAobmFtZSk7DQogICAgKwl9IGVsc2Ugew0KICAgICsJCW5ld19uYW1lID0gTlVM
TDsNCiAgICArCQloYXNoID0gMDsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW1ib2wgPSB4bWFs
bG9jKHNpemVvZigqc3ltYm9sKSk7DQogICAgKwltZW1zZXQoc3ltYm9sLCAwLCBzaXplb2YoKnN5
bWJvbCkpOw0KICAgICsJc3ltYm9sLT5uYW1lID0gbmV3X25hbWU7DQogICAgKwlzeW1ib2wtPnR5
cGUgPSBTX1VOS05PV047DQogICAgKwlzeW1ib2wtPmZsYWdzIHw9IGZsYWdzOw0KICAgICsNCiAg
ICArCXN5bWJvbC0+bmV4dCA9IHN5bWJvbF9oYXNoW2hhc2hdOw0KICAgICsJc3ltYm9sX2hhc2hb
aGFzaF0gPSBzeW1ib2w7DQogICAgKw0KICAgICsJcmV0dXJuIHN5bWJvbDsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RydWN0IHN5bWJvbCAqc3ltX2ZpbmQoY29uc3QgY2hhciAqbmFtZSkNCiAgICAr
ew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltYm9sID0gTlVMTDsNCiAgICArCWludCBoYXNoID0g
MDsNCiAgICArDQogICAgKwlpZiAoIW5hbWUpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKw0K
ICAgICsJaWYgKG5hbWVbMF0gJiYgIW5hbWVbMV0pIHsNCiAgICArCQlzd2l0Y2ggKG5hbWVbMF0p
IHsNCiAgICArCQljYXNlICd5JzogcmV0dXJuICZzeW1ib2xfeWVzOw0KICAgICsJCWNhc2UgJ20n
OiByZXR1cm4gJnN5bWJvbF9tb2Q7DQogICAgKwkJY2FzZSAnbic6IHJldHVybiAmc3ltYm9sX25v
Ow0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9M
X0hBU0hTSVpFOw0KICAgICsNCiAgICArCWZvciAoc3ltYm9sID0gc3ltYm9sX2hhc2hbaGFzaF07
IHN5bWJvbDsgc3ltYm9sID0gc3ltYm9sLT5uZXh0KSB7DQogICAgKwkJaWYgKHN5bWJvbC0+bmFt
ZSAmJg0KICAgICsJCSAgICAhc3RyY21wKHN5bWJvbC0+bmFtZSwgbmFtZSkgJiYNCiAgICArCQkg
ICAgIShzeW1ib2wtPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkNCiAgICArCQkJCWJyZWFrOw0KICAg
ICsJfQ0KICAgICsNCiAgICArCXJldHVybiBzeW1ib2w7DQogICAgK30NCiAgICArDQogICAgK2Nv
bnN0IGNoYXIgKnN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKGNvbnN0IGNoYXIgKmluKQ0KICAgICt7
DQogICAgKwljb25zdCBjaGFyICpwOw0KICAgICsJc2l6ZV90IHJlc2xlbjsNCiAgICArCWNoYXIg
KnJlczsNCiAgICArCXNpemVfdCBsOw0KICAgICsNCiAgICArCXJlc2xlbiA9IHN0cmxlbihpbikg
KyBzdHJsZW4oIlwiXCIiKSArIDE7DQogICAgKw0KICAgICsJcCA9IGluOw0KICAgICsJZm9yICg7
Oykgew0KICAgICsJCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7DQogICAgKwkJcCArPSBsOw0KICAg
ICsNCiAgICArCQlpZiAocFswXSA9PSAnXDAnKQ0KICAgICsJCQlicmVhazsNCiAgICArDQogICAg
KwkJcmVzbGVuKys7DQogICAgKwkJcCsrOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJlcyA9IHht
YWxsb2MocmVzbGVuKTsNCiAgICArCXJlc1swXSA9ICdcMCc7DQogICAgKw0KICAgICsJc3RyY2F0
KHJlcywgIlwiIik7DQogICAgKw0KICAgICsJcCA9IGluOw0KICAgICsJZm9yICg7Oykgew0KICAg
ICsJCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7DQogICAgKwkJc3RybmNhdChyZXMsIHAsIGwpOw0K
ICAgICsJCXAgKz0gbDsNCiAgICArDQogICAgKwkJaWYgKHBbMF0gPT0gJ1wwJykNCiAgICArCQkJ
YnJlYWs7DQogICAgKw0KICAgICsJCXN0cmNhdChyZXMsICJcXCIpOw0KICAgICsJCXN0cm5jYXQo
cmVzLCBwKyssIDEpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXN0cmNhdChyZXMsICJcIiIpOw0K
ICAgICsJcmV0dXJuIHJlczsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHN5bV9tYXRjaCB7
DQogICAgKwlzdHJ1Y3Qgc3ltYm9sCSpzeW07DQogICAgKwlvZmZfdAkJc28sIGVvOw0KICAgICt9
Ow0KICAgICsNCiAgICArLyogQ29tcGFyZSBtYXRjaGVkIHN5bWJvbHMgYXMgdGh1czoNCiAgICAr
ICogLSBmaXJzdCwgc3ltYm9scyB0aGF0IG1hdGNoIGV4YWN0bHkNCiAgICArICogLSB0aGVuLCBh
bHBoYWJldGljYWwgc29ydA0KICAgICsgKi8NCiAgICArc3RhdGljIGludCBzeW1fcmVsX2NvbXAo
Y29uc3Qgdm9pZCAqc3ltMSwgY29uc3Qgdm9pZCAqc3ltMikNCiAgICArew0KICAgICsJY29uc3Qg
c3RydWN0IHN5bV9tYXRjaCAqczEgPSBzeW0xOw0KICAgICsJY29uc3Qgc3RydWN0IHN5bV9tYXRj
aCAqczIgPSBzeW0yOw0KICAgICsJaW50IGV4YWN0MSwgZXhhY3QyOw0KICAgICsNCiAgICArCS8q
IEV4YWN0IG1hdGNoOg0KICAgICsJICogLSBpZiBtYXRjaGVkIGxlbmd0aCBvbiBzeW1ib2wgczEg
aXMgdGhlIGxlbmd0aCBvZiB0aGF0IHN5bWJvbCwNCiAgICArCSAqICAgdGhlbiB0aGlzIHN5bWJv
bCBzaG91bGQgY29tZSBmaXJzdDsNCiAgICArCSAqIC0gaWYgbWF0Y2hlZCBsZW5ndGggb24gc3lt
Ym9sIHMyIGlzIHRoZSBsZW5ndGggb2YgdGhhdCBzeW1ib2wsDQogICAgKwkgKiAgIHRoZW4gdGhp
cyBzeW1ib2wgc2hvdWxkIGNvbWUgZmlyc3QuDQogICAgKwkgKiBOb3RlOiBzaW5jZSB0aGUgc2Vh
cmNoIGNhbiBiZSBhIHJlZ2V4cCwgYm90aCBzeW1ib2xzIG1heSBtYXRjaA0KICAgICsJICogZXhh
Y3RseTsgaWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgY2FuJ3QgZGVjaWRlIHdoaWNoIGNvbWVzIGZp
cnN0LA0KICAgICsJICogYW5kIHdlIGZhbGxiYWNrIHRvIHNvcnRpbmcgYWxwaGFiZXRpY2FsbHku
DQogICAgKwkgKi8NCiAgICArCWV4YWN0MSA9IChzMS0+ZW8gLSBzMS0+c28pID09IHN0cmxlbihz
MS0+c3ltLT5uYW1lKTsNCiAgICArCWV4YWN0MiA9IChzMi0+ZW8gLSBzMi0+c28pID09IHN0cmxl
bihzMi0+c3ltLT5uYW1lKTsNCiAgICArCWlmIChleGFjdDEgJiYgIWV4YWN0MikNCiAgICArCQly
ZXR1cm4gLTE7DQogICAgKwlpZiAoIWV4YWN0MSAmJiBleGFjdDIpDQogICAgKwkJcmV0dXJuIDE7
DQogICAgKw0KICAgICsJLyogQXMgYSBmYWxsYmFjaywgc29ydCBzeW1ib2xzIGFscGhhYmV0aWNh
bGx5ICovDQogICAgKwlyZXR1cm4gc3RyY21wKHMxLT5zeW0tPm5hbWUsIHMyLT5zeW0tPm5hbWUp
Ow0KICAgICt9DQogICAgKw0KICAgICtzdHJ1Y3Qgc3ltYm9sICoqc3ltX3JlX3NlYXJjaChjb25z
dCBjaGFyICpwYXR0ZXJuKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICoqc3lt
X2FyciA9IE5VTEw7DQogICAgKwlzdHJ1Y3Qgc3ltX21hdGNoICpzeW1fbWF0Y2hfYXJyID0gTlVM
TDsNCiAgICArCWludCBpLCBjbnQsIHNpemU7DQogICAgKwlyZWdleF90IHJlOw0KICAgICsJcmVn
bWF0Y2hfdCBtYXRjaFsxXTsNCiAgICArDQogICAgKwljbnQgPSBzaXplID0gMDsNCiAgICArCS8q
IFNraXAgaWYgZW1wdHkgKi8NCiAgICArCWlmIChzdHJsZW4ocGF0dGVybikgPT0gMCkNCiAgICAr
CQlyZXR1cm4gTlVMTDsNCiAgICArCWlmIChyZWdjb21wKCZyZSwgcGF0dGVybiwgUkVHX0VYVEVO
REVEfFJFR19JQ0FTRSkpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKw0KICAgICsJZm9yX2Fs
bF9zeW1ib2xzKGksIHN5bSkgew0KICAgICsJCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NPTlNU
IHx8ICFzeW0tPm5hbWUpDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCWlmIChyZWdleGVjKCZy
ZSwgc3ltLT5uYW1lLCAxLCBtYXRjaCwgMCkpDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCWlm
IChjbnQgPj0gc2l6ZSkgew0KICAgICsJCQl2b2lkICp0bXA7DQogICAgKwkJCXNpemUgKz0gMTY7
DQogICAgKwkJCXRtcCA9IHJlYWxsb2Moc3ltX21hdGNoX2Fyciwgc2l6ZSAqIHNpemVvZihzdHJ1
Y3Qgc3ltX21hdGNoKSk7DQogICAgKwkJCWlmICghdG1wKQ0KICAgICsJCQkJZ290byBzeW1fcmVf
c2VhcmNoX2ZyZWU7DQogICAgKwkJCXN5bV9tYXRjaF9hcnIgPSB0bXA7DQogICAgKwkJfQ0KICAg
ICsJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgKwkJLyogQXMgcmVnZXhlYyByZXR1cm5lZCAw
LCB3ZSBrbm93IHdlIGhhdmUgYSBtYXRjaCwgc28NCiAgICArCQkgKiB3ZSBjYW4gdXNlIG1hdGNo
WzBdLnJtX1tzZV1vIHdpdGhvdXQgZnVydGhlciBjaGVja3MNCiAgICArCQkgKi8NCiAgICArCQlz
eW1fbWF0Y2hfYXJyW2NudF0uc28gPSBtYXRjaFswXS5ybV9zbzsNCiAgICArCQlzeW1fbWF0Y2hf
YXJyW2NudF0uZW8gPSBtYXRjaFswXS5ybV9lbzsNCiAgICArCQlzeW1fbWF0Y2hfYXJyW2NudCsr
XS5zeW0gPSBzeW07DQogICAgKwl9DQogICAgKwlpZiAoc3ltX21hdGNoX2Fycikgew0KICAgICsJ
CXFzb3J0KHN5bV9tYXRjaF9hcnIsIGNudCwgc2l6ZW9mKHN0cnVjdCBzeW1fbWF0Y2gpLCBzeW1f
cmVsX2NvbXApOw0KICAgICsJCXN5bV9hcnIgPSBtYWxsb2MoKGNudCsxKSAqIHNpemVvZihzdHJ1
Y3Qgc3ltYm9sICopKTsNCiAgICArCQlpZiAoIXN5bV9hcnIpDQogICAgKwkJCWdvdG8gc3ltX3Jl
X3NlYXJjaF9mcmVlOw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykNCiAgICArCQkJ
c3ltX2FycltpXSA9IHN5bV9tYXRjaF9hcnJbaV0uc3ltOw0KICAgICsJCXN5bV9hcnJbY250XSA9
IE5VTEw7DQogICAgKwl9DQogICAgK3N5bV9yZV9zZWFyY2hfZnJlZToNCiAgICArCS8qIHN5bV9t
YXRjaF9hcnIgY2FuIGJlIE5VTEwgaWYgbm8gbWF0Y2gsIGJ1dCBmcmVlKE5VTEwpIGlzIE9LICov
DQogICAgKwlmcmVlKHN5bV9tYXRjaF9hcnIpOw0KICAgICsJcmVnZnJlZSgmcmUpOw0KICAgICsN
CiAgICArCXJldHVybiBzeW1fYXJyOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBX
aGVuIHdlIGNoZWNrIGZvciByZWN1cnNpdmUgZGVwZW5kZW5jaWVzIHdlIHVzZSBhIHN0YWNrIHRv
IHNhdmUNCiAgICArICogY3VycmVudCBzdGF0ZSBzbyB3ZSBjYW4gcHJpbnQgb3V0IHJlbGV2YW50
IGluZm8gdG8gdXNlci4NCiAgICArICogVGhlIGVudHJpZXMgYXJlIGxvY2F0ZWQgb24gdGhlIGNh
bGwgc3RhY2sgc28gbm8gbmVlZCB0byBmcmVlIG1lbW9yeS4NCiAgICArICogTm90ZSBpbnNlcnQo
KSByZW1vdmUoKSBtdXN0IGFsd2F5cyBtYXRjaCB0byBwcm9wZXJseSBjbGVhciB0aGUgc3RhY2su
DQogICAgKyAqLw0KICAgICtzdGF0aWMgc3RydWN0IGRlcF9zdGFjayB7DQogICAgKwlzdHJ1Y3Qg
ZGVwX3N0YWNrICpwcmV2LCAqbmV4dDsNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAr
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBleHByICoqZXhwcjsNCiAgICAr
fSAqY2hlY2tfdG9wOw0KICAgICsNCiAgICArc3RhdGljIHZvaWQgZGVwX3N0YWNrX2luc2VydChz
dHJ1Y3QgZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAg
KwltZW1zZXQoc3RhY2ssIDAsIHNpemVvZigqc3RhY2spKTsNCiAgICArCWlmIChjaGVja190b3Ap
DQogICAgKwkJY2hlY2tfdG9wLT5uZXh0ID0gc3RhY2s7DQogICAgKwlzdGFjay0+cHJldiA9IGNo
ZWNrX3RvcDsNCiAgICArCXN0YWNrLT5zeW0gPSBzeW07DQogICAgKwljaGVja190b3AgPSBzdGFj
azsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgZGVwX3N0YWNrX3JlbW92ZSh2b2lk
KQ0KICAgICt7DQogICAgKwljaGVja190b3AgPSBjaGVja190b3AtPnByZXY7DQogICAgKwlpZiAo
Y2hlY2tfdG9wKQ0KICAgICsJCWNoZWNrX3RvcC0+bmV4dCA9IE5VTEw7DQogICAgK30NCiAgICAr
DQogICAgKy8qDQogICAgKyAqIENhbGxlZCB3aGVuIHdlIGhhdmUgZGV0ZWN0ZWQgYSByZWN1cnNp
dmUgZGVwZW5kZW5jeS4NCiAgICArICogY2hlY2tfdG9wIHBvaW50IHRvIHRoZSB0b3Agb2YgdGhl
IHN0YWN0IHNvIHdlIHVzZQ0KICAgICsgKiB0aGUgLT5wcmV2IHBvaW50ZXIgdG8gbG9jYXRlIHRo
ZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgc3ltX2No
ZWNrX3ByaW50X3JlY3Vyc2l2ZShzdHJ1Y3Qgc3ltYm9sICpsYXN0X3N5bSkNCiAgICArew0KICAg
ICsJc3RydWN0IGRlcF9zdGFjayAqc3RhY2s7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpu
ZXh0X3N5bTsNCiAgICArCXN0cnVjdCBtZW51ICptZW51ID0gTlVMTDsNCiAgICArCXN0cnVjdCBw
cm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBkZXBfc3RhY2sgY3Zfc3RhY2s7DQogICAgKw0K
ICAgICsJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUobGFzdF9zeW0pKSB7DQogICAgKwkJZGVwX3N0
YWNrX2luc2VydCgmY3Zfc3RhY2ssIGxhc3Rfc3ltKTsNCiAgICArCQlsYXN0X3N5bSA9IHByb3Bf
Z2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKGxhc3Rfc3ltKSk7DQogICAgKwl9DQogICAg
Kw0KICAgICsJZm9yIChzdGFjayA9IGNoZWNrX3RvcDsgc3RhY2sgIT0gTlVMTDsgc3RhY2sgPSBz
dGFjay0+cHJldikNCiAgICArCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkNCiAgICArCQkJ
YnJlYWs7DQogICAgKwlpZiAoIXN0YWNrKSB7DQogICAgKwkJZnByaW50ZihzdGRlcnIsICJ1bmV4
cGVjdGVkIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVycm9yXG4iKTsNCiAgICArCQlyZXR1cm47DQog
ICAgKwl9DQogICAgKw0KICAgICsJZm9yICg7IHN0YWNrOyBzdGFjayA9IHN0YWNrLT5uZXh0KSB7
DQogICAgKwkJc3ltID0gc3RhY2stPnN5bTsNCiAgICArCQluZXh0X3N5bSA9IHN0YWNrLT5uZXh0
ID8gc3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOw0KICAgICsJCXByb3AgPSBzdGFjay0+cHJv
cDsNCiAgICArCQlpZiAocHJvcCA9PSBOVUxMKQ0KICAgICsJCQlwcm9wID0gc3RhY2stPnN5bS0+
cHJvcDsNCiAgICArDQogICAgKwkJLyogZm9yIGNob2ljZSB2YWx1ZXMgZmluZCB0aGUgbWVudSBl
bnRyeSAodXNlZCBiZWxvdykgKi8NCiAgICArCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pIHx8IHN5
bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgew0KICAgICsJCQlmb3IgKHByb3AgPSBzeW0tPnByb3A7
IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJCQltZW51ID0gcHJvcC0+bWVudTsN
CiAgICArCQkJCWlmIChwcm9wLT5tZW51KQ0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQl9DQog
ICAgKwkJfQ0KICAgICsJCWlmIChzdGFjay0+c3ltID09IGxhc3Rfc3ltKQ0KICAgICsJCQlmcHJp
bnRmKHN0ZGVyciwgIiVzOiVkOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCFc
biIsDQogICAgKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8pOw0KICAgICsNCiAg
ICArCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJCWZwcmludGYoc3RkZXJyLCAi
JXM6JWQ6XHRjaG9pY2UgJXMgY29udGFpbnMgc3ltYm9sICVzXG4iLA0KICAgICsJCQkJbWVudS0+
ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5vLA0KICAgICsJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1l
IDogIjxjaG9pY2U+IiwNCiAgICArCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUg
OiAiPGNob2ljZT4iKTsNCiAgICArCQl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3lt
KSkgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGlzIHBhcnQg
b2YgY2hvaWNlICVzXG4iLA0KICAgICsJCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5v
LA0KICAgICsJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwNCiAgICArCQkJ
CW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsNCiAgICArCQl9
IGVsc2UgaWYgKHN0YWNrLT5leHByID09ICZzeW0tPmRpcl9kZXAuZXhwcikgew0KICAgICsJCQlm
cHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGRlcGVuZHMgb24gJXNcbiIsDQogICAg
KwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sDQogICAgKwkJCQlzeW0tPm5hbWUg
PyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLA0KICAgICsJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0
X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOw0KICAgICsJCX0gZWxzZSBpZiAoc3RhY2stPmV4cHIg
PT0gJnN5bS0+cmV2X2RlcC5leHByKSB7DQogICAgKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6
XHRzeW1ib2wgJXMgaXMgc2VsZWN0ZWQgYnkgJXNcbiIsDQogICAgKwkJCQlwcm9wLT5maWxlLT5u
YW1lLCBwcm9wLT5saW5lbm8sDQogICAgKwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNo
b2ljZT4iLA0KICAgICsJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hv
aWNlPiIpOw0KICAgICsJCX0gZWxzZSBpZiAoc3RhY2stPmV4cHIgPT0gJnN5bS0+aW1wbGllZC5l
eHByKSB7DQogICAgKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgaW1w
bGllZCBieSAlc1xuIiwNCiAgICArCQkJCXByb3AtPmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywN
CiAgICArCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsDQogICAgKwkJCQlu
ZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7DQogICAgKwkJfSBl
bHNlIGlmIChzdGFjay0+ZXhwcikgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0
c3ltYm9sICVzICVzIHZhbHVlIGNvbnRhaW5zICVzXG4iLA0KICAgICsJCQkJcHJvcC0+ZmlsZS0+
bmFtZSwgcHJvcC0+bGluZW5vLA0KICAgICsJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxj
aG9pY2U+IiwNCiAgICArCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKSwNCiAgICAr
CQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsNCiAgICAr
CQl9IGVsc2Ugew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzICVz
IGlzIHZpc2libGUgZGVwZW5kaW5nIG9uICVzXG4iLA0KICAgICsJCQkJcHJvcC0+ZmlsZS0+bmFt
ZSwgcHJvcC0+bGluZW5vLA0KICAgICsJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9p
Y2U+IiwNCiAgICArCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKSwNCiAgICArCQkJ
CW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsNCiAgICArCQl9
DQogICAgKwl9DQogICAgKw0KICAgICsJZnByaW50ZihzdGRlcnIsDQogICAgKwkJIkZvciBhIHJl
c29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50
eHRcbiINCiAgICArCQkic3Vic2VjdGlvbiBcIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kg
bGltaXRhdGlvbnNcIlxuIg0KICAgICsJCSJcbiIpOw0KICAgICsNCiAgICArCWlmIChjaGVja190
b3AgPT0gJmN2X3N0YWNrKQ0KICAgICsJCWRlcF9zdGFja19yZW1vdmUoKTsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19leHByX2RlcHMoc3RydWN0
IGV4cHIgKmUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICArDQogICAg
KwlpZiAoIWUpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwlzd2l0Y2ggKGUtPnR5cGUpIHsN
CiAgICArCWNhc2UgRV9PUjoNCiAgICArCWNhc2UgRV9BTkQ6DQogICAgKwkJc3ltID0gc3ltX2No
ZWNrX2V4cHJfZGVwcyhlLT5sZWZ0LmV4cHIpOw0KICAgICsJCWlmIChzeW0pDQogICAgKwkJCXJl
dHVybiBzeW07DQogICAgKwkJcmV0dXJuIHN5bV9jaGVja19leHByX2RlcHMoZS0+cmlnaHQuZXhw
cik7DQogICAgKwljYXNlIEVfTk9UOg0KICAgICsJCXJldHVybiBzeW1fY2hlY2tfZXhwcl9kZXBz
KGUtPmxlZnQuZXhwcik7DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwljYXNlIEVfR0VROg0K
ICAgICsJY2FzZSBFX0dUSDoNCiAgICArCWNhc2UgRV9MRVE6DQogICAgKwljYXNlIEVfTFRIOg0K
ICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwkJc3ltID0gc3ltX2NoZWNrX2RlcHMoZS0+bGVm
dC5zeW0pOw0KICAgICsJCWlmIChzeW0pDQogICAgKwkJCXJldHVybiBzeW07DQogICAgKwkJcmV0
dXJuIHN5bV9jaGVja19kZXBzKGUtPnJpZ2h0LnN5bSk7DQogICAgKwljYXNlIEVfU1lNQk9MOg0K
ICAgICsJCXJldHVybiBzeW1fY2hlY2tfZGVwcyhlLT5sZWZ0LnN5bSk7DQogICAgKwlkZWZhdWx0
Og0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJZnByaW50ZihzdGRlcnIsICJPb3BzISBI
b3cgdG8gY2hlY2sgJWQ/XG4iLCBlLT50eXBlKTsNCiAgICArCXJldHVybiBOVUxMOw0KICAgICt9
DQogICAgKw0KICAgICsvKiByZXR1cm4gTlVMTCB3aGVuIGRlcGVuZGVuY2llcyBhcmUgT0sgKi8N
CiAgICArc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19zeW1fZGVwcyhzdHJ1Y3Qgc3lt
Ym9sICpzeW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTI7DQogICAgKwlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOw0KICAgICsN
CiAgICArCWRlcF9zdGFja19pbnNlcnQoJnN0YWNrLCBzeW0pOw0KICAgICsNCiAgICArCXN0YWNr
LmV4cHIgPSAmc3ltLT5kaXJfZGVwLmV4cHI7DQogICAgKwlzeW0yID0gc3ltX2NoZWNrX2V4cHJf
ZGVwcyhzeW0tPmRpcl9kZXAuZXhwcik7DQogICAgKwlpZiAoc3ltMikNCiAgICArCQlnb3RvIG91
dDsNCiAgICArDQogICAgKwlzdGFjay5leHByID0gJnN5bS0+cmV2X2RlcC5leHByOw0KICAgICsJ
c3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5yZXZfZGVwLmV4cHIpOw0KICAgICsJaWYg
KHN5bTIpDQogICAgKwkJZ290byBvdXQ7DQogICAgKw0KICAgICsJc3RhY2suZXhwciA9ICZzeW0t
PmltcGxpZWQuZXhwcjsNCiAgICArCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+aW1w
bGllZC5leHByKTsNCiAgICArCWlmIChzeW0yKQ0KICAgICsJCWdvdG8gb3V0Ow0KICAgICsNCiAg
ICArCXN0YWNrLmV4cHIgPSBOVUxMOw0KICAgICsNCiAgICArCWZvciAocHJvcCA9IHN5bS0+cHJv
cDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsNCiAgICArCQlpZiAocHJvcC0+dHlwZSA9PSBQ
X0NIT0lDRSB8fCBwcm9wLT50eXBlID09IFBfU0VMRUNUIHx8DQogICAgKwkJICAgIHByb3AtPnR5
cGUgPT0gUF9JTVBMWSkNCiAgICArCQkJY29udGludWU7DQogICAgKwkJc3RhY2sucHJvcCA9IHBy
b3A7DQogICAgKwkJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMocHJvcC0+dmlzaWJsZS5leHBy
KTsNCiAgICArCQlpZiAoc3ltMikNCiAgICArCQkJYnJlYWs7DQogICAgKwkJaWYgKHByb3AtPnR5
cGUgIT0gUF9ERUZBVUxUIHx8IHN5bV9pc19jaG9pY2Uoc3ltKSkNCiAgICArCQkJY29udGludWU7
DQogICAgKwkJc3RhY2suZXhwciA9ICZwcm9wLT5leHByOw0KICAgICsJCXN5bTIgPSBzeW1fY2hl
Y2tfZXhwcl9kZXBzKHByb3AtPmV4cHIpOw0KICAgICsJCWlmIChzeW0yKQ0KICAgICsJCQlicmVh
azsNCiAgICArCQlzdGFjay5leHByID0gTlVMTDsNCiAgICArCX0NCiAgICArDQogICAgK291dDoN
CiAgICArCWRlcF9zdGFja19yZW1vdmUoKTsNCiAgICArDQogICAgKwlyZXR1cm4gc3ltMjsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19jaG9pY2Vf
ZGVwcyhzdHJ1Y3Qgc3ltYm9sICpjaG9pY2UpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wg
KnN5bSwgKnN5bTI7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlzdHJ1Y3Qg
ZXhwciAqZTsNCiAgICArCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7DQogICAgKw0KICAgICsJZGVw
X3N0YWNrX2luc2VydCgmc3RhY2ssIGNob2ljZSk7DQogICAgKw0KICAgICsJcHJvcCA9IHN5bV9n
ZXRfY2hvaWNlX3Byb3AoY2hvaWNlKTsNCiAgICArCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJv
cC0+ZXhwciwgZSwgc3ltKQ0KICAgICsJCXN5bS0+ZmxhZ3MgfD0gKFNZTUJPTF9DSEVDSyB8IFNZ
TUJPTF9DSEVDS0VEKTsNCiAgICArDQogICAgKwljaG9pY2UtPmZsYWdzIHw9IChTWU1CT0xfQ0hF
Q0sgfCBTWU1CT0xfQ0hFQ0tFRCk7DQogICAgKwlzeW0yID0gc3ltX2NoZWNrX3N5bV9kZXBzKGNo
b2ljZSk7DQogICAgKwljaG9pY2UtPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7DQogICAgKwlpZiAo
c3ltMikNCiAgICArCQlnb3RvIG91dDsNCiAgICArDQogICAgKwlleHByX2xpc3RfZm9yX2VhY2hf
c3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgew0KICAgICsJCXN5bTIgPSBzeW1fY2hlY2tfc3ltX2Rl
cHMoc3ltKTsNCiAgICArCQlpZiAoc3ltMikNCiAgICArCQkJYnJlYWs7DQogICAgKwl9DQogICAg
K291dDoNCiAgICArCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQ0K
ICAgICsJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsNCiAgICArDQogICAgKwlpZiAoc3lt
MiAmJiBzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bTIpICYmDQogICAgKwkgICAgcHJvcF9nZXRfc3lt
Ym9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltMikpID09IGNob2ljZSkNCiAgICArCQlzeW0yID0g
Y2hvaWNlOw0KICAgICsNCiAgICArCWRlcF9zdGFja19yZW1vdmUoKTsNCiAgICArDQogICAgKwly
ZXR1cm4gc3ltMjsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHN5bWJvbCAqc3ltX2NoZWNr
X2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpz
eW0yOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsNCiAgICArCWlmIChzeW0t
PmZsYWdzICYgU1lNQk9MX0NIRUNLKSB7DQogICAgKwkJc3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2
ZShzeW0pOw0KICAgICsJCXJldHVybiBzeW07DQogICAgKwl9DQogICAgKwlpZiAoc3ltLT5mbGFn
cyAmIFNZTUJPTF9DSEVDS0VEKQ0KICAgICsJCXJldHVybiBOVUxMOw0KICAgICsNCiAgICArCWlm
IChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsNCiAgICArCQlzdHJ1Y3QgZGVwX3N0YWNrIHN0
YWNrOw0KICAgICsNCiAgICArCQkvKiBmb3IgY2hvaWNlIGdyb3VwcyBzdGFydCB0aGUgY2hlY2sg
d2l0aCBtYWluIGNob2ljZSBzeW1ib2wgKi8NCiAgICArCQlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFj
aywgc3ltKTsNCiAgICArCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOw0KICAgICsJ
CXN5bTIgPSBzeW1fY2hlY2tfZGVwcyhwcm9wX2dldF9zeW1ib2wocHJvcCkpOw0KICAgICsJCWRl
cF9zdGFja19yZW1vdmUoKTsNCiAgICArCX0gZWxzZSBpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7
DQogICAgKwkJc3ltMiA9IHN5bV9jaGVja19jaG9pY2VfZGVwcyhzeW0pOw0KICAgICsJfSBlbHNl
IHsNCiAgICArCQlzeW0tPmZsYWdzIHw9IChTWU1CT0xfQ0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7
DQogICAgKwkJc3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhzeW0pOw0KICAgICsJCXN5bS0+Zmxh
Z3MgJj0gflNZTUJPTF9DSEVDSzsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gc3ltMjsN
CiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHByb3BlcnR5ICpwcm9wX2FsbG9jKGVudW0gcHJv
cF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0IHBy
b3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICoqcHJvcHA7DQogICAgKw0KICAg
ICsJcHJvcCA9IHhtYWxsb2Moc2l6ZW9mKCpwcm9wKSk7DQogICAgKwltZW1zZXQocHJvcCwgMCwg
c2l6ZW9mKCpwcm9wKSk7DQogICAgKwlwcm9wLT50eXBlID0gdHlwZTsNCiAgICArCXByb3AtPnN5
bSA9IHN5bTsNCiAgICArCXByb3AtPmZpbGUgPSBjdXJyZW50X2ZpbGU7DQogICAgKwlwcm9wLT5s
aW5lbm8gPSB6Y29uZl9saW5lbm8oKTsNCiAgICArDQogICAgKwkvKiBhcHBlbmQgcHJvcGVydHkg
dG8gdGhlIHByb3AgbGlzdCBvZiBzeW1ib2wgKi8NCiAgICArCWlmIChzeW0pIHsNCiAgICArCQlm
b3IgKHByb3BwID0gJnN5bS0+cHJvcDsgKnByb3BwOyBwcm9wcCA9ICYoKnByb3BwKS0+bmV4dCkN
CiAgICArCQkJOw0KICAgICsJCSpwcm9wcCA9IHByb3A7DQogICAgKwl9DQogICAgKw0KICAgICsJ
cmV0dXJuIHByb3A7DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBzeW1ib2wgKnByb3BfZ2V0
X3N5bWJvbChzdHJ1Y3QgcHJvcGVydHkgKnByb3ApDQogICAgK3sNCiAgICArCWlmIChwcm9wLT5l
eHByICYmIChwcm9wLT5leHByLT50eXBlID09IEVfU1lNQk9MIHx8DQogICAgKwkJCSAgIHByb3At
PmV4cHItPnR5cGUgPT0gRV9MSVNUKSkNCiAgICArCQlyZXR1cm4gcHJvcC0+ZXhwci0+bGVmdC5z
eW07DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICArY29uc3QgY2hhciAq
cHJvcF9nZXRfdHlwZV9uYW1lKGVudW0gcHJvcF90eXBlIHR5cGUpDQogICAgK3sNCiAgICArCXN3
aXRjaCAodHlwZSkgew0KICAgICsJY2FzZSBQX1BST01QVDoNCiAgICArCQlyZXR1cm4gInByb21w
dCI7DQogICAgKwljYXNlIFBfQ09NTUVOVDoNCiAgICArCQlyZXR1cm4gImNvbW1lbnQiOw0KICAg
ICsJY2FzZSBQX01FTlU6DQogICAgKwkJcmV0dXJuICJtZW51IjsNCiAgICArCWNhc2UgUF9ERUZB
VUxUOg0KICAgICsJCXJldHVybiAiZGVmYXVsdCI7DQogICAgKwljYXNlIFBfQ0hPSUNFOg0KICAg
ICsJCXJldHVybiAiY2hvaWNlIjsNCiAgICArCWNhc2UgUF9TRUxFQ1Q6DQogICAgKwkJcmV0dXJu
ICJzZWxlY3QiOw0KICAgICsJY2FzZSBQX0lNUExZOg0KICAgICsJCXJldHVybiAiaW1wbHkiOw0K
ICAgICsJY2FzZSBQX1JBTkdFOg0KICAgICsJCXJldHVybiAicmFuZ2UiOw0KICAgICsJY2FzZSBQ
X1NZTUJPTDoNCiAgICArCQlyZXR1cm4gInN5bWJvbCI7DQogICAgKwljYXNlIFBfVU5LTk9XTjoN
CiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArCXJldHVybiAidW5rbm93biI7DQogICAgK30N
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUv
S2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcN
CiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmIyMDc2MWUNCiAg
ICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRv
X3N1Ym1lbnUvS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNTIgQEANCiAgICArIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArY29uZmlnIEENCiAgICArCWJvb2wg
IkEiDQogICAgKwlkZWZhdWx0IHkNCiAgICArDQogICAgK2NvbmZpZyBBMA0KICAgICsJYm9vbCAi
QTAiDQogICAgKwlkZXBlbmRzIG9uIEENCiAgICArCWRlZmF1bHQgeQ0KICAgICsJaGVscA0KICAg
ICsJICBUaGlzIGRlcGVuZHMgb24gQSwgc28gc2hvdWxkIGJlIGEgc3VibWVudSBvZiBBLg0KICAg
ICsNCiAgICArY29uZmlnIEEwXzANCiAgICArCWJvb2wgIkExXzAiDQogICAgKwlkZXBlbmRzIG9u
IEEwDQogICAgKwloZWxwDQogICAgKwkgIFN1Ym1lbnVzIGFyZSBjcmVhdGVkIHJlY3Vyc2l2ZWx5
Lg0KICAgICsJICBUaGlzIHNob3VsZCBiZSBhIHN1Ym1lbnUgb2YgQTAuDQogICAgKw0KICAgICtj
b25maWcgQTENCiAgICArCWJvb2wgIkExIg0KICAgICsJZGVwZW5kcyBvbiBBDQogICAgKwlkZWZh
dWx0IHkNCiAgICArCWhlbHANCiAgICArCSAgVGhpcyBzaG91bGQgbGluZSB1cCB3aXRoIEEwLg0K
ICAgICsNCiAgICArY2hvaWNlDQogICAgKwlwcm9tcHQgImNob2ljZSINCiAgICArCWRlcGVuZHMg
b24gQTENCiAgICArCWhlbHANCiAgICArCSAgQ2hvaWNlIHNob3VsZCBiZWNvbWUgYSBzdWJtZW51
IGFzIHdlbGwuDQogICAgKw0KICAgICtjb25maWcgQTFfMA0KICAgICsJYm9vbCAiQTFfMCINCiAg
ICArDQogICAgK2NvbmZpZyBBMV8xDQogICAgKwlib29sICJBMV8xIg0KICAgICsNCiAgICArZW5k
Y2hvaWNlDQogICAgKw0KICAgICtjb25maWcgQg0KICAgICsJYm9vbCAiQiINCiAgICArCWhlbHAN
CiAgICArCSAgVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBBLg0KICAgICsNCiAgICArY29uZmlnIEMN
CiAgICArCWJvb2wgIkMiDQogICAgKwlkZXBlbmRzIG9uIEENCiAgICArCWhlbHANCiAgICArCSAg
VGhpcyBkZXBlbmRzIG9uIEEsIGJ1dCBub3QgYSBjb25zZWN1dGl2ZSBpdGVtLCBzbyBjYW4vc2hv
dWxkIG5vdA0KICAgICsJICBiZSBhIHN1Ym1lbnUuDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2Rl
IDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjI1YWJkOTINCiAgICAtLS0gL2Rldi9udWxsDQog
ICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18u
cHkNCiAgICBAQCAtMCwwICsxLDEzIEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEdQTC0yLjANCiAgICArIiIiDQogICAgK0NyZWF0ZSBzdWJtZW51IGZvciBzeW1ib2xzIHRoYXQg
ZGVwZW5kIG9uIHRoZSBwcmVjZWRpbmcgb25lLg0KICAgICsNCiAgICArSWYgYSBzeW1ib2xzIGhh
cyBkZXBlbmRlbmN5IG9uIHRoZSBwcmVjZWRpbmcgc3ltYm9sLCB0aGUgbWVudSBlbnRyeQ0KICAg
ICtzaG91bGQgYmVjb21lIHRoZSBzdWJtZW51IG9mIHRoZSBwcmVjZWRpbmcgb25lLCBhbmQgZGlz
cGxheWVkIHdpdGgNCiAgICArZGVlcGVyIGluZGVudGF0aW9uLg0KICAgICsiIiINCiAgICArDQog
ICAgKw0KICAgICtkZWYgdGVzdChjb25mKToNCiAgICArICAgIGFzc2VydCBjb25mLm9sZGFza2Nv
bmZpZygpID09IDANCiAgICArICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnZXhwZWN0
ZWRfc3Rkb3V0JykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9h
dXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9h
dXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi5iZjUyMzZmDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dA0KICAg
IEBAIC0wLDAgKzEsMTAgQEANCiAgICArQSAoQSkgW1kvbi8/XSAoTkVXKSANCiAgICArICBBMCAo
QTApIFtZL24vP10gKE5FVykgDQogICAgKyAgICBBMV8wIChBMF8wKSBbTi95Lz9dIChORVcpIA0K
ICAgICsgIEExIChBMSkgW1kvbi8/XSAoTkVXKSANCiAgICArICAgIGNob2ljZQ0KICAgICsgICAg
PiAxLiBBMV8wIChBMV8wKSAoTkVXKQ0KICAgICsgICAgICAyLiBBMV8xIChBMV8xKSAoTkVXKQ0K
ICAgICsgICAgY2hvaWNlWzEtMj9dOiANCiAgICArQiAoQikgW04veS8/XSAoTkVXKSANCiAgICAr
QyAoQykgW04veS8/XSAoTkVXKSANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNl
L0tjb25maWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmE0
MTIyMDUNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9jaG9pY2UvS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNTYgQEANCiAgICArIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArY29uZmlnIE1PRFVMRVMNCiAg
ICArCWJvb2wgIkVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCINCiAgICArCW9wdGlvbiBt
b2R1bGVzDQogICAgKwlkZWZhdWx0IHkNCiAgICArDQogICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0
ICJib29sZWFuIGNob2ljZSINCiAgICArCWRlZmF1bHQgQk9PTF9DSE9JQ0UxDQogICAgKw0KICAg
ICtjb25maWcgQk9PTF9DSE9JQ0UwDQogICAgKwlib29sICJjaG9pY2UgMCINCiAgICArDQogICAg
K2NvbmZpZyBCT09MX0NIT0lDRTENCiAgICArCWJvb2wgImNob2ljZSAxIg0KICAgICsNCiAgICAr
ZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UNCiAgICArCXByb21wdCAib3B0aW9uYWwgYm9v
bGVhbiBjaG9pY2UiDQogICAgKwlvcHRpb25hbA0KICAgICsJZGVmYXVsdCBPUFRfQk9PTF9DSE9J
Q0UxDQogICAgKw0KICAgICtjb25maWcgT1BUX0JPT0xfQ0hPSUNFMA0KICAgICsJYm9vbCAiY2hv
aWNlIDAiDQogICAgKw0KICAgICtjb25maWcgT1BUX0JPT0xfQ0hPSUNFMQ0KICAgICsJYm9vbCAi
Y2hvaWNlIDEiDQogICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2Nob2ljZQ0KICAg
ICsJcHJvbXB0ICJ0cmlzdGF0ZSBjaG9pY2UiDQogICAgKwlkZWZhdWx0IFRSSV9DSE9JQ0UxDQog
ICAgKw0KICAgICtjb25maWcgVFJJX0NIT0lDRTANCiAgICArCXRyaXN0YXRlICJjaG9pY2UgMCIN
CiAgICArDQogICAgK2NvbmZpZyBUUklfQ0hPSUNFMQ0KICAgICsJdHJpc3RhdGUgImNob2ljZSAx
Ig0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UNCiAgICArCXByb21w
dCAib3B0aW9uYWwgdHJpc3RhdGUgY2hvaWNlIg0KICAgICsJb3B0aW9uYWwNCiAgICArCWRlZmF1
bHQgT1BUX1RSSV9DSE9JQ0UxDQogICAgKw0KICAgICtjb25maWcgT1BUX1RSSV9DSE9JQ0UwDQog
ICAgKwl0cmlzdGF0ZSAiY2hvaWNlIDAiDQogICAgKw0KICAgICtjb25maWcgT1BUX1RSSV9DSE9J
Q0UxDQogICAgKwl0cmlzdGF0ZSAiY2hvaWNlIDEiDQogICAgKw0KICAgICtlbmRjaG9pY2UNCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvX19pbml0X18u
cHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weQ0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNDMxOGZjZQ0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9fX2lu
aXRfXy5weQ0KICAgIEBAIC0wLDAgKzEsNDEgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMA0KICAgICsiIiINCiAgICArQmFzaWMgY2hvaWNlIHRlc3RzLg0KICAgICsN
CiAgICArVGhlIGhhbmRsaW5nIG9mICdjaG9pY2UnIGlzIGEgYml0IGNvbXBsaWNhdGVkIHBhcnQg
aW4gS2NvbmZpZy4NCiAgICArDQogICAgK1RoZSBiZWhhdmlvciBvZiAneScgY2hvaWNlIGlzIGlu
dHVpdGl2ZS4gIElmIGNob2ljZSB2YWx1ZXMgYXJlIHRyaXN0YXRlLA0KICAgICt0aGUgY2hvaWNl
IGNhbiBiZSAnbScgd2hlcmUgZWFjaCB2YWx1ZSBjYW4gYmUgZW5hYmxlZCBpbmRlcGVuZGVudGx5
Lg0KICAgICtBbHNvLCBpZiBhIGNob2ljZSBpcyBtYXJrZWQgYXMgJ29wdGlvbmFsJywgdGhlIHdo
b2xlIGNob2ljZSBjYW4gYmUNCiAgICAraW52aXNpYmxlLg0KICAgICsiIiINCiAgICArDQogICAg
Kw0KICAgICtkZWYgdGVzdF9vbGRhc2swKGNvbmYpOg0KICAgICsgICAgYXNzZXJ0IGNvbmYub2xk
YXNrY29uZmlnKCkgPT0gMA0KICAgICsgICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdv
bGRhc2swX2V4cGVjdGVkX3N0ZG91dCcpDQogICAgKw0KICAgICsNCiAgICArZGVmIHRlc3Rfb2xk
YXNrMShjb25mKToNCiAgICArICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygnb2xkYXNrMV9j
b25maWcnKSA9PSAwDQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ29sZGFz
azFfZXhwZWN0ZWRfc3Rkb3V0JykNCiAgICArDQogICAgKw0KICAgICtkZWYgdGVzdF9hbGx5ZXMo
Y29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5hbGx5ZXNjb25maWcoKSA9PSAwDQogICAgKyAg
ICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbHllc19leHBlY3RlZF9jb25maWcnKQ0K
ICAgICsNCiAgICArDQogICAgK2RlZiB0ZXN0X2FsbG1vZChjb25mKToNCiAgICArICAgIGFzc2Vy
dCBjb25mLmFsbG1vZGNvbmZpZygpID09IDANCiAgICArICAgIGFzc2VydCBjb25mLmNvbmZpZ19j
b250YWlucygnYWxsbW9kX2V4cGVjdGVkX2NvbmZpZycpDQogICAgKw0KICAgICsNCiAgICArZGVm
IHRlc3RfYWxsbm8oY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5hbGxub2NvbmZpZygpID09
IDANCiAgICArICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnYWxsbm9fZXhwZWN0ZWRf
Y29uZmlnJykNCiAgICArDQogICAgKw0KICAgICtkZWYgdGVzdF9hbGxkZWYoY29uZik6DQogICAg
KyAgICBhc3NlcnQgY29uZi5hbGxkZWZjb25maWcoKSA9PSAwDQogICAgKyAgICBhc3NlcnQgY29u
Zi5jb25maWdfY29udGFpbnMoJ2FsbGRlZl9leHBlY3RlZF9jb25maWcnKQ0KICAgIGRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29u
ZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2Nv
bmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uN2E3NTRi
Zg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnDQogICAgQEAgLTAsMCArMSw1IEBADQogICAg
K0NPTkZJR19NT0RVTEVTPXkNCiAgICArIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQN
CiAgICArQ09ORklHX0JPT0xfQ0hPSUNFMT15DQogICAgKyMgQ09ORklHX1RSSV9DSE9JQ0UwIGlz
IG5vdCBzZXQNCiAgICArIyBDT05GSUdfVFJJX0NIT0lDRTEgaXMgbm90IHNldA0KICAgIGRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRf
Y29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVk
X2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZjFm
NWRjZA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnDQogICAgQEAgLTAsMCArMSw5IEBADQog
ICAgK0NPTkZJR19NT0RVTEVTPXkNCiAgICArIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5vdCBz
ZXQNCiAgICArQ09ORklHX0JPT0xfQ0hPSUNFMT15DQogICAgKyMgQ09ORklHX09QVF9CT09MX0NI
T0lDRTAgaXMgbm90IHNldA0KICAgICtDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMT15DQogICAgK0NP
TkZJR19UUklfQ0hPSUNFMD1tDQogICAgK0NPTkZJR19UUklfQ0hPSUNFMT1tDQogICAgK0NPTkZJ
R19PUFRfVFJJX0NIT0lDRTA9bQ0KICAgICtDT05GSUdfT1BUX1RSSV9DSE9JQ0UxPW0NCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0
ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0
ZWRfY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5i
ODhlZTdhDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNSBAQA0K
ICAgICsjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQNCiAgICArIyBDT05GSUdfQk9PTF9DSE9J
Q0UwIGlzIG5vdCBzZXQNCiAgICArQ09ORklHX0JPT0xfQ0hPSUNFMT15DQogICAgKyMgQ09ORklH
X1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQNCiAgICArQ09ORklHX1RSSV9DSE9JQ0UxPXkNCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVj
dGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbHllc19leHBl
Y3RlZF9jb25maWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAu
LmU1YTA2MmENCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsOSBA
QA0KICAgICtDT05GSUdfTU9EVUxFUz15DQogICAgKyMgQ09ORklHX0JPT0xfQ0hPSUNFMCBpcyBu
b3Qgc2V0DQogICAgK0NPTkZJR19CT09MX0NIT0lDRTE9eQ0KICAgICsjIENPTkZJR19PUFRfQk9P
TF9DSE9JQ0UwIGlzIG5vdCBzZXQNCiAgICArQ09ORklHX09QVF9CT09MX0NIT0lDRTE9eQ0KICAg
ICsjIENPTkZJR19UUklfQ0hPSUNFMCBpcyBub3Qgc2V0DQogICAgK0NPTkZJR19UUklfQ0hPSUNF
MT15DQogICAgKyMgQ09ORklHX09QVF9UUklfQ0hPSUNFMCBpcyBub3Qgc2V0DQogICAgK0NPTkZJ
R19PUFRfVFJJX0NIT0lDRTE9eQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0DQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5iMjUxYmJhDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0
ZWRfc3Rkb3V0DQogICAgQEAgLTAsMCArMSwxMCBAQA0KICAgICtFbmFibGUgbG9hZGFibGUgbW9k
dWxlIHN1cHBvcnQgKE1PRFVMRVMpIFtZL24vP10gKE5FVykgDQogICAgK2Jvb2xlYW4gY2hvaWNl
DQogICAgKyAgMS4gY2hvaWNlIDAgKEJPT0xfQ0hPSUNFMCkgKE5FVykNCiAgICArPiAyLiBjaG9p
Y2UgMSAoQk9PTF9DSE9JQ0UxKSAoTkVXKQ0KICAgICtjaG9pY2VbMS0yP106IA0KICAgICtvcHRp
b25hbCBib29sZWFuIGNob2ljZSBbTi95Lz9dIChORVcpIA0KICAgICt0cmlzdGF0ZSBjaG9pY2Ug
W00veS8/XSAoTkVXKSANCiAgICArICBjaG9pY2UgMCAoVFJJX0NIT0lDRTApIFtOL20vP10gKE5F
VykgDQogICAgKyAgY2hvaWNlIDEgKFRSSV9DSE9JQ0UxKSBbTi9tLz9dIChORVcpIA0KICAgICtv
cHRpb25hbCB0cmlzdGF0ZSBjaG9pY2UgW04vbS95Lz9dIChORVcpIA0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnDQogICAgbmV3IGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5iNjdiZmUzDQogICAgLS0tIC9kZXYvbnVs
bA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29u
ZmlnDQogICAgQEAgLTAsMCArMSwyIEBADQogICAgKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNl
dA0KICAgICtDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMD15DQogICAgZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0IGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQNCiAg
ICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmMyMTI1ZTkNCiAgICAt
LS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
b2xkYXNrMV9leHBlY3RlZF9zdGRvdXQNCiAgICBAQCAtMCwwICsxLDE1IEBADQogICAgK0VuYWJs
ZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9ydCAoTU9EVUxFUykgW04veS8/XSANCiAgICArYm9vbGVh
biBjaG9pY2UNCiAgICArICAxLiBjaG9pY2UgMCAoQk9PTF9DSE9JQ0UwKSAoTkVXKQ0KICAgICs+
IDIuIGNob2ljZSAxIChCT09MX0NIT0lDRTEpIChORVcpDQogICAgK2Nob2ljZVsxLTI/XTogDQog
ICAgK29wdGlvbmFsIGJvb2xlYW4gY2hvaWNlIFtZL24vP10gKE5FVykgDQogICAgK29wdGlvbmFs
IGJvb2xlYW4gY2hvaWNlDQogICAgKz4gMS4gY2hvaWNlIDAgKE9QVF9CT09MX0NIT0lDRTApDQog
ICAgKyAgMi4gY2hvaWNlIDEgKE9QVF9CT09MX0NIT0lDRTEpIChORVcpDQogICAgK2Nob2ljZVsx
LTI/XTogDQogICAgK3RyaXN0YXRlIGNob2ljZQ0KICAgICsgIDEuIGNob2ljZSAwIChUUklfQ0hP
SUNFMCkgKE5FVykNCiAgICArPiAyLiBjaG9pY2UgMSAoVFJJX0NIT0lDRTEpIChORVcpDQogICAg
K2Nob2ljZVsxLTI/XTogDQogICAgK29wdGlvbmFsIHRyaXN0YXRlIGNob2ljZSBbTi95Lz9dIA0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93
aXRoX21fZGVwL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1
ZV93aXRoX21fZGVwL0tjb25maWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IDAwMDAwMDAuLjcxMDZjMjYNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnDQogICAgQEAg
LTAsMCArMSwyMSBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQog
ICAgKw0KICAgICtjb25maWcgTU9EVUxFUw0KICAgICsJZGVmX2Jvb2wgeQ0KICAgICsJb3B0aW9u
IG1vZHVsZXMNCiAgICArDQogICAgK2NvbmZpZyBERVANCiAgICArCXRyaXN0YXRlDQogICAgKwlk
ZWZhdWx0IG0NCiAgICArDQogICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0ICJUcmlzdGF0ZSBDaG9p
Y2UiDQogICAgKw0KICAgICtjb25maWcgQ0hPSUNFMA0KICAgICsJdHJpc3RhdGUgIkNob2ljZSAw
Ig0KICAgICsNCiAgICArY29uZmlnIENIT0lDRTENCiAgICArCXRyaXN0YXRlICJDaG9pY2UgMSIN
CiAgICArCWRlcGVuZHMgb24gREVQDQogICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9f
X2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhf
bV9kZXAvX19pbml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAw
MDAwMDAuLjA3NWI0ZTANCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weQ0KICAgIEBA
IC0wLDAgKzEsMTYgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K
ICAgICsiIiINCiAgICArSGlkZSB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIHdpdGggbW9kIGRlcGVu
ZGVuY3kgaW4geSBjaG9pY2UuDQogICAgKw0KICAgICtJZiB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVz
IGRlcGVuZCBvbiBzeW1ib2xzIHNldCB0byAnbScsIHRoZXkgc2hvdWxkIGJlDQogICAgK2hpZGRl
biB3aGVuIHRoZSBjaG9pY2UgY29udGFpbmluZyB0aGVtIGlzIGNoYW5nZWQgZnJvbSAnbScgdG8g
J3knDQogICAgKyhpLmUuIGV4Y2x1c2l2ZSBjaG9pY2UpLg0KICAgICsNCiAgICArUmVsYXRlZCBM
aW51eCBjb21taXQ6IGZhNjRlNWY2YTM1ZWZkNWU3N2Q2MzkxMjVkOTczMDc3Y2E1MDYwNzQNCiAg
ICArIiIiDQogICAgKw0KICAgICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3Nl
cnQgY29uZi5vbGRhc2tjb25maWcoJ2NvbmZpZycsICd5JykgPT0gMA0KICAgICsgICAgYXNzZXJ0
IGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3RlZF9jb25maWcnKQ0KICAgICsgICAgYXNzZXJ0
IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQnKQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2NvbmZp
ZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29u
ZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4zYTEyNmI3
DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnDQogICAgQEAgLTAsMCArMSwyIEBADQogICAg
K0NPTkZJR19DSE9JQ0UwPW0NCiAgICArQ09ORklHX0NIT0lDRTE9bQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVj
dGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhf
bV9kZXAvZXhwZWN0ZWRfY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMDAwMDAwLi40ZDA3YjQ0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmln
DQogICAgQEAgLTAsMCArMSwzIEBADQogICAgK0NPTkZJR19NT0RVTEVTPXkNCiAgICArQ09ORklH
X0RFUD1tDQogICAgK0NPTkZJR19DSE9JQ0UwPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVj
dGVkX3N0ZG91dA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
MmI1MGFiNg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dA0KICAgIEBAIC0w
LDAgKzEsNCBAQA0KICAgICtUcmlzdGF0ZSBDaG9pY2UgW00veS8/XSB5DQogICAgK1RyaXN0YXRl
IENob2ljZQ0KICAgICs+IDEuIENob2ljZSAwIChDSE9JQ0UwKQ0KICAgICtjaG9pY2VbMV06IDEN
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weSBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkNCiAgICBuZXcgZmlsZSBtb2Rl
IDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjAzNDVlZjYNCiAgICAtLS0gL2Rldi9udWxsDQog
ICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQ0KICAgIEBAIC0w
LDAgKzEsMjkxIEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAg
ICArIw0KICAgICsjIENvcHlyaWdodCAoQykgMjAxOCBNYXNhaGlybyBZYW1hZGEgPHlhbWFkYS5t
YXNhaGlyb0Bzb2Npb25leHQuY29tPg0KICAgICsjDQogICAgKw0KICAgICsiIiINCiAgICArS2Nv
bmZpZyB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLg0KICAgICsNCiAgICArVGhpcyBwcm92aWRlcyBm
aXh0dXJlIGZ1bmN0aW9ucyBjb21tb25seSB1c2VkIGZyb20gdGVzdCBmaWxlcy4NCiAgICArIiIi
DQogICAgKw0KICAgICtpbXBvcnQgb3MNCiAgICAraW1wb3J0IHB5dGVzdA0KICAgICtpbXBvcnQg
c2h1dGlsDQogICAgK2ltcG9ydCBzdWJwcm9jZXNzDQogICAgK2ltcG9ydCB0ZW1wZmlsZQ0KICAg
ICsNCiAgICArQ09ORl9QQVRIID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbignc2NyaXB0
cycsICdrY29uZmlnJywgJ2NvbmYnKSkNCiAgICArDQogICAgKw0KICAgICtjbGFzcyBDb25mOg0K
ICAgICsgICAgIiIiS2NvbmZpZyBydW5uZXIgYW5kIHJlc3VsdCBjaGVja2VyLg0KICAgICsNCiAg
ICArICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgbWV0aG9kcyB0byBydW4gdGV4dC1iYXNlZCBpbnRl
cmZhY2Ugb2YgS2NvbmZpZw0KICAgICsgICAgKHNjcmlwdHMva2NvbmZpZy9jb25mKSBhbmQgcmV0
cmlldmUgdGhlIHJlc3VsdGVkIGNvbmZpZ3VyYXRpb24sDQogICAgKyAgICBzdGRvdXQsIGFuZCBz
dGRlcnIuICBJdCBhbHNvIHByb3ZpZGVzIG1ldGhvZHMgdG8gY29tcGFyZSB0aG9zZQ0KICAgICsg
ICAgcmVzdWx0cyB3aXRoIGV4cGVjdGF0aW9ucy4NCiAgICArICAgICIiIg0KICAgICsNCiAgICAr
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0KToNCiAgICArICAgICAgICAiIiJDcmVhdGUg
YSBuZXcgQ29uZiBpbnN0YW5jZS4NCiAgICArDQogICAgKyAgICAgICAgcmVxdWVzdDogb2JqZWN0
IHRvIGludHJvc3BlY3QgdGhlIHJlcXVlc3RpbmcgdGVzdCBtb2R1bGUNCiAgICArICAgICAgICAi
IiINCiAgICArICAgICAgICAjIHRoZSBkaXJlY3Rvcnkgb2YgdGhlIHRlc3QgYmVpbmcgcnVuDQog
ICAgKyAgICAgICAgc2VsZi5fdGVzdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc3RyKHJlcXVlc3Qu
ZnNwYXRoKSkNCiAgICArDQogICAgKyAgICAjIHJ1bm5lcnMNCiAgICArICAgIGRlZiBfcnVuX2Nv
bmYoc2VsZiwgbW9kZSwgZG90X2NvbmZpZz1Ob25lLCBvdXRfZmlsZT0nLmNvbmZpZycsDQogICAg
KyAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPUZhbHNlLCBpbl9rZXlzPU5vbmUsIGV4dHJh
X2Vudj17fSk6DQogICAgKyAgICAgICAgIiIiUnVuIHRleHQtYmFzZWQgS2NvbmZpZyBleGVjdXRh
YmxlIGFuZCBzYXZlIHRoZSByZXN1bHQuDQogICAgKw0KICAgICsgICAgICAgIG1vZGU6IGlucHV0
IG1vZGUgb3B0aW9uICgtLW9sZGFza2NvbmZpZywgLS1kZWZjb25maWc9PGZpbGU+IGV0Yy4pDQog
ICAgKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJh
dGlvbiBiYXNlDQogICAgKyAgICAgICAgb3V0X2ZpbGU6IGZpbGUgbmFtZSB0byBjb250YWluIHRo
ZSBvdXRwdXQgY29uZmlnIGRhdGENCiAgICArICAgICAgICBpbnRlcmFjdGl2ZTogZmxhZyB0byBz
cGVjaWZ5IHRoZSBpbnRlcmFjdGl2ZSBtb2RlDQogICAgKyAgICAgICAgaW5fa2V5czoga2V5IGlu
cHV0cyBmb3IgaW50ZXJhY3RpdmUgbW9kZXMNCiAgICArICAgICAgICBleHRyYV9lbnY6IGFkZGl0
aW9uYWwgZW52aXJvbm1lbnRzDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMg
b2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAg
IGNvbW1hbmQgPSBbQ09ORl9QQVRILCBtb2RlLCAnS2NvbmZpZyddDQogICAgKw0KICAgICsgICAg
ICAgICMgT3ZlcnJpZGUgJ3NyY3RyZWUnIGVudmlyb25tZW50IHRvIG1ha2UgdGhlIHRlc3QgYXMg
dGhlIHRvcCBkaXJlY3RvcnkNCiAgICArICAgICAgICBleHRyYV9lbnZbJ3NyY3RyZWUnXSA9IHNl
bGYuX3Rlc3RfZGlyDQogICAgKw0KICAgICsgICAgICAgICMgUnVuIEtjb25maWcgaW4gYSB0ZW1w
b3JhcnkgZGlyZWN0b3J5Lg0KICAgICsgICAgICAgICMgVGhpcyBkaXJlY3RvcnkgaXMgYXV0b21h
dGljYWxseSByZW1vdmVkIHdoZW4gZG9uZS4NCiAgICArICAgICAgICB3aXRoIHRlbXBmaWxlLlRl
bXBvcmFyeURpcmVjdG9yeSgpIGFzIHRlbXBfZGlyOg0KICAgICsNCiAgICArICAgICAgICAgICAg
IyBpZiAuY29uZmlnIGlzIGdpdmVuLCBjb3B5IGl0IHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeQ0K
ICAgICsgICAgICAgICAgICBpZiBkb3RfY29uZmlnOg0KICAgICsgICAgICAgICAgICAgICAgc2h1
dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgZG90X2NvbmZpZyksDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRlbXBfZGly
LCAnLmNvbmZpZycpKQ0KICAgICsNCiAgICArICAgICAgICAgICAgcHMgPSBzdWJwcm9jZXNzLlBv
cGVuKGNvbW1hbmQsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRp
bj1zdWJwcm9jZXNzLlBJUEUsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwNCiAgICArICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGN3ZD10ZW1wX2RpciwNCiAgICArICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVudj1kaWN0KG9zLmVudmlyb24sICoqZXh0cmFfZW52KSkNCiAgICArDQog
ICAgKyAgICAgICAgICAgICMgSWYgaW5wdXQga2V5IHNlcXVlbmNlIGlzIGdpdmVuLCBmZWVkIGl0
IHRvIHN0ZGluLg0KICAgICsgICAgICAgICAgICBpZiBpbl9rZXlzOg0KICAgICsgICAgICAgICAg
ICAgICAgcHMuc3RkaW4ud3JpdGUoaW5fa2V5cy5lbmNvZGUoJ3V0Zi04JykpDQogICAgKw0KICAg
ICsgICAgICAgICAgICB3aGlsZSBwcy5wb2xsKCkgaXMgTm9uZToNCiAgICArICAgICAgICAgICAg
ICAgICMgRm9yIGludGVyYWN0aXZlIG1vZGVzIHN1Y2ggYXMgb2xkYXNrY29uZmlnLCBvbGRjb25m
aWcsDQogICAgKyAgICAgICAgICAgICAgICAjIHNlbmQgJ0VudGVyJyBrZXkgdW50aWwgdGhlIHBy
b2dyYW0gZmluaXNoZXMuDQogICAgKyAgICAgICAgICAgICAgICBpZiBpbnRlcmFjdGl2ZToNCiAg
ICArICAgICAgICAgICAgICAgICAgICBwcy5zdGRpbi53cml0ZShiJ1xuJykNCiAgICArDQogICAg
KyAgICAgICAgICAgIHNlbGYucmV0Y29kZSA9IHBzLnJldHVybmNvZGUNCiAgICArICAgICAgICAg
ICAgc2VsZi5zdGRvdXQgPSBwcy5zdGRvdXQucmVhZCgpLmRlY29kZSgpDQogICAgKyAgICAgICAg
ICAgIHNlbGYuc3RkZXJyID0gcHMuc3RkZXJyLnJlYWQoKS5kZWNvZGUoKQ0KICAgICsNCiAgICAr
ICAgICAgICAgICAgIyBSZXRyaWV2ZSB0aGUgcmVzdWx0ZWQgY29uZmlnIGRhdGEgb25seSB3aGVu
IC5jb25maWcgaXMgc3VwcG9zZWQNCiAgICArICAgICAgICAgICAgIyB0byBleGlzdC4gIElmIHRo
ZSBjb21tYW5kIGZhaWxzLCB0aGUgLmNvbmZpZyBkb2VzIG5vdCBleGlzdC4NCiAgICArICAgICAg
ICAgICAgIyAnbGlzdG5ld2NvbmZpZycgZG9lcyBub3QgcHJvZHVjZSAuY29uZmlnIGluIHRoZSBm
aXJzdCBwbGFjZS4NCiAgICArICAgICAgICAgICAgaWYgc2VsZi5yZXRjb2RlID09IDAgYW5kIG91
dF9maWxlOg0KICAgICsgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1w
X2Rpciwgb3V0X2ZpbGUpKSBhcyBmOg0KICAgICsgICAgICAgICAgICAgICAgICAgIHNlbGYuY29u
ZmlnID0gZi5yZWFkKCkNCiAgICArICAgICAgICAgICAgZWxzZToNCiAgICArICAgICAgICAgICAg
ICAgIHNlbGYuY29uZmlnID0gTm9uZQ0KICAgICsNCiAgICArICAgICAgICAjIExvZ2dpbmc6DQog
ICAgKyAgICAgICAgIyBQeXRlc3QgY2FwdHVyZXMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBi
eSBkZWZhdWx0LiAgSW4gZmFpbHVyZQ0KICAgICsgICAgICAgICMgb2YgdGVzdHMsIHRoZSBjYXB0
dXJlZCBsb2cgd2lsbCBiZSBkaXNwbGF5ZWQuICBUaGlzIHdpbGwgYmUgdXNlZnVsIHRvDQogICAg
KyAgICAgICAgIyBmaWd1cmUgb3V0IHdoYXQgaGFzIGhhcHBlbmVkLg0KICAgICsNCiAgICArICAg
ICAgICBwcmludCgiW2NvbW1hbmRdXG57fVxuIi5mb3JtYXQoJyAnLmpvaW4oY29tbWFuZCkpKQ0K
ICAgICsNCiAgICArICAgICAgICBwcmludCgiW3JldGNvZGVdXG57fVxuIi5mb3JtYXQoc2VsZi5y
ZXRjb2RlKSkNCiAgICArDQogICAgKyAgICAgICAgcHJpbnQoIltzdGRvdXRdIikNCiAgICArICAg
ICAgICBwcmludChzZWxmLnN0ZG91dCkNCiAgICArDQogICAgKyAgICAgICAgcHJpbnQoIltzdGRl
cnJdIikNCiAgICArICAgICAgICBwcmludChzZWxmLnN0ZGVycikNCiAgICArDQogICAgKyAgICAg
ICAgaWYgc2VsZi5jb25maWcgaXMgbm90IE5vbmU6DQogICAgKyAgICAgICAgICAgIHByaW50KCJb
b3V0cHV0IGZvciAne30nXSIuZm9ybWF0KG91dF9maWxlKSkNCiAgICArICAgICAgICAgICAgcHJp
bnQoc2VsZi5jb25maWcpDQogICAgKw0KICAgICsgICAgICAgIHJldHVybiBzZWxmLnJldGNvZGUN
CiAgICArDQogICAgKyAgICBkZWYgb2xkYXNrY29uZmlnKHNlbGYsIGRvdF9jb25maWc9Tm9uZSwg
aW5fa2V5cz1Ob25lKToNCiAgICArICAgICAgICAiIiJSdW4gb2xkYXNrY29uZmlnLg0KICAgICsN
CiAgICArICAgICAgICBkb3RfY29uZmlnOiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1
cmF0aW9uIGJhc2UgKG9wdGlvbmFsKQ0KICAgICsgICAgICAgIGluX2tleToga2V5IGlucHV0cyAo
b3B0aW9uYWwpDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtj
b25maWcgZXhlY3V0YWJsZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBz
ZWxmLl9ydW5fY29uZignLS1vbGRhc2tjb25maWcnLCBkb3RfY29uZmlnPWRvdF9jb25maWcsDQog
ICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPVRydWUsIGluX2tl
eXM9aW5fa2V5cykNCiAgICArDQogICAgKyAgICBkZWYgb2xkY29uZmlnKHNlbGYsIGRvdF9jb25m
aWc9Tm9uZSwgaW5fa2V5cz1Ob25lKToNCiAgICArICAgICAgICAiIiJSdW4gb2xkY29uZmlnLg0K
ICAgICsNCiAgICArICAgICAgICBkb3RfY29uZmlnOiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBj
b25maWd1cmF0aW9uIGJhc2UgKG9wdGlvbmFsKQ0KICAgICsgICAgICAgIGluX2tleToga2V5IGlu
cHV0cyAob3B0aW9uYWwpDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2Yg
dGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fY29uZignLS1vbGRjb25maWcnLCBkb3RfY29uZmlnPWRvdF9jb25maWcs
DQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlPVRydWUsIGlu
X2tleXM9aW5fa2V5cykNCiAgICArDQogICAgKyAgICBkZWYgb2xkZGVmY29uZmlnKHNlbGYsIGRv
dF9jb25maWc9Tm9uZSk6DQogICAgKyAgICAgICAgIiIiUnVuIG9sZGRlZmNvbmZpZy4NCiAgICAr
DQogICAgKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmln
dXJhdGlvbiBiYXNlIChvcHRpb25hbCkNCiAgICArICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0
YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlDQogICAgKyAgICAgICAgIiIiDQogICAgKyAg
ICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLW9sZGRlZmNvbmZpZycsIGRvdF9jb25maWc9
ZG90X2NvbmZpZykNCiAgICArDQogICAgKyAgICBkZWYgZGVmY29uZmlnKHNlbGYsIGRlZmNvbmZp
Zyk6DQogICAgKyAgICAgICAgIiIiUnVuIGRlZmNvbmZpZy4NCiAgICArDQogICAgKyAgICAgICAg
ZGVmY29uZmlnOiBkZWZjb25maWcgZmlsZSBmb3IgaW5wdXQNCiAgICArICAgICAgICByZXR1cm5j
b2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlDQogICAgKyAgICAgICAg
IiIiDQogICAgKyAgICAgICAgZGVmY29uZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVz
dF9kaXIsIGRlZmNvbmZpZykNCiAgICArICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0t
ZGVmY29uZmlnPXt9Jy5mb3JtYXQoZGVmY29uZmlnX3BhdGgpKQ0KICAgICsNCiAgICArICAgIGRl
ZiBfYWxsY29uZmlnKHNlbGYsIG1vZGUsIGFsbF9jb25maWcpOg0KICAgICsgICAgICAgIGlmIGFs
bF9jb25maWc6DQogICAgKyAgICAgICAgICAgIGFsbF9jb25maWdfcGF0aCA9IG9zLnBhdGguam9p
bihzZWxmLl90ZXN0X2RpciwgYWxsX2NvbmZpZykNCiAgICArICAgICAgICAgICAgZXh0cmFfZW52
ID0geydLQ09ORklHX0FMTENPTkZJRyc6IGFsbF9jb25maWdfcGF0aH0NCiAgICArICAgICAgICBl
bHNlOg0KICAgICsgICAgICAgICAgICBleHRyYV9lbnYgPSB7fQ0KICAgICsNCiAgICArICAgICAg
ICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0te31jb25maWcnLmZvcm1hdChtb2RlKSwgZXh0cmFf
ZW52PWV4dHJhX2VudikNCiAgICArDQogICAgKyAgICBkZWYgYWxseWVzY29uZmlnKHNlbGYsIGFs
bF9jb25maWc9Tm9uZSk6DQogICAgKyAgICAgICAgIiIiUnVuIGFsbHllc2NvbmZpZy4NCiAgICAr
DQogICAgKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9yIEtDT05G
SUdfQUxMQ09ORklHIChvcHRpb25hbCkNCiAgICArICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0
YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlDQogICAgKyAgICAgICAgIiIiDQogICAgKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxseWVzJywgYWxsX2NvbmZpZykNCiAgICAr
DQogICAgKyAgICBkZWYgYWxsbW9kY29uZmlnKHNlbGYsIGFsbF9jb25maWc9Tm9uZSk6DQogICAg
KyAgICAgICAgIiIiUnVuIGFsbG1vZGNvbmZpZy4NCiAgICArDQogICAgKyAgICAgICAgYWxsX2Nv
bmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9yIEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25h
bCkNCiAgICArICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBl
eGVjdXRhYmxlDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYuX2Fs
bGNvbmZpZygnYWxsbW9kJywgYWxsX2NvbmZpZykNCiAgICArDQogICAgKyAgICBkZWYgYWxsbm9j
b25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToNCiAgICArICAgICAgICAiIiJSdW4gYWxsbm9j
b25maWcuDQogICAgKw0KICAgICsgICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNvbmZpZyBm
aWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpDQogICAgKyAgICAgICAgcmV0dXJu
Y29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgICsgICAgICAg
ICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG5vJywgYWxsX2Nv
bmZpZykNCiAgICArDQogICAgKyAgICBkZWYgYWxsZGVmY29uZmlnKHNlbGYsIGFsbF9jb25maWc9
Tm9uZSk6DQogICAgKyAgICAgICAgIiIiUnVuIGFsbGRlZmNvbmZpZy4NCiAgICArDQogICAgKyAg
ICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9yIEtDT05GSUdfQUxMQ09O
RklHIChvcHRpb25hbCkNCiAgICArICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0
aGUgS2NvbmZpZyBleGVjdXRhYmxlDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0
dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxsZGVmJywgYWxsX2NvbmZpZykNCiAgICArDQogICAgKyAg
ICBkZWYgcmFuZGNvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOg0KICAgICsgICAgICAgICIi
IlJ1biByYW5kY29uZmlnLg0KICAgICsNCiAgICArICAgICAgICBhbGxfY29uZmlnOiBmcmFnbWVu
dCBjb25maWcgZmlsZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFsKQ0KICAgICsgICAg
ICAgIHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUNCiAg
ICArICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdyYW5k
JywgYWxsX2NvbmZpZykNCiAgICArDQogICAgKyAgICBkZWYgc2F2ZWRlZmNvbmZpZyhzZWxmLCBk
b3RfY29uZmlnKToNCiAgICArICAgICAgICAiIiJSdW4gc2F2ZWRlZmNvbmZpZy4NCiAgICArDQog
ICAgKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBmaWxlIGZvciBpbnB1dA0KICAgICsgICAg
ICAgIHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUNCiAg
ICArICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tc2F2
ZWRlZmNvbmZpZycsIG91dF9maWxlPSdkZWZjb25maWcnKQ0KICAgICsNCiAgICArICAgIGRlZiBs
aXN0bmV3Y29uZmlnKHNlbGYsIGRvdF9jb25maWc9Tm9uZSk6DQogICAgKyAgICAgICAgIiIiUnVu
IGxpc3RuZXdjb25maWcuDQogICAgKw0KICAgICsgICAgICAgIGRvdF9jb25maWc6IC5jb25maWcg
ZmlsZSB0byB1c2UgZm9yIGNvbmZpZ3VyYXRpb24gYmFzZSAob3B0aW9uYWwpDQogICAgKyAgICAg
ICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAg
ICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1saXN0
bmV3Y29uZmlnJywgZG90X2NvbmZpZz1kb3RfY29uZmlnLA0KICAgICsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRfZmlsZT1Ob25lKQ0KICAgICsNCiAgICArICAgICMgY2hlY2tlcnMN
CiAgICArICAgIGRlZiBfcmVhZF9hbmRfY29tcGFyZShzZWxmLCBjb21wYXJlLCBleHBlY3RlZCk6
DQogICAgKyAgICAgICAgIiIiQ29tcGFyZSB0aGUgcmVzdWx0IHdpdGggZXhwZWN0YXRpb24uDQog
ICAgKw0KICAgICsgICAgICAgIGNvbXBhcmU6IGZ1bmN0aW9uIHRvIGNvbXBhcmUgdGhlIHJlc3Vs
dCB3aXRoIGV4cGVjdGF0aW9uDQogICAgKyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250
YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHdp
dGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGV4cGVjdGVkKSkgYXMgZjoNCiAg
ICArICAgICAgICAgICAgZXhwZWN0ZWRfZGF0YSA9IGYucmVhZCgpDQogICAgKyAgICAgICAgcmV0
dXJuIGNvbXBhcmUoc2VsZiwgZXhwZWN0ZWRfZGF0YSkNCiAgICArDQogICAgKyAgICBkZWYgX2Nv
bnRhaW5zKHNlbGYsIGF0dHIsIGV4cGVjdGVkKToNCiAgICArICAgICAgICByZXR1cm4gc2VsZi5f
cmVhZF9hbmRfY29tcGFyZSgNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFtYmRhIHMsIGU6IGdldGF0dHIocywgYXR0cikuZmluZChlKSA+PSAwLA0KICAgICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCkNCiAgICArDQogICAgKyAg
ICBkZWYgX21hdGNoZXMoc2VsZiwgYXR0ciwgZXhwZWN0ZWQpOg0KICAgICsgICAgICAgIHJldHVy
biBzZWxmLl9yZWFkX2FuZF9jb21wYXJlKGxhbWJkYSBzLCBlOiBnZXRhdHRyKHMsIGF0dHIpID09
IGUsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQp
DQogICAgKw0KICAgICsgICAgZGVmIGNvbmZpZ19jb250YWlucyhzZWxmLCBleHBlY3RlZCk6DQog
ICAgKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgY29uZmlndXJhdGlvbiBjb250YWlucyBl
eHBlY3RlZCBkYXRhLg0KICAgICsNCiAgICArICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNv
bnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBp
ZiByZXN1bHQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQ0KICAg
ICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9jb250YWlucygnY29uZmln
JywgZXhwZWN0ZWQpDQogICAgKw0KICAgICsgICAgZGVmIGNvbmZpZ19tYXRjaGVzKHNlbGYsIGV4
cGVjdGVkKToNCiAgICArICAgICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBjb25maWd1cmF0aW9u
IGV4YWN0bHkgbWF0Y2hlcyBleHBlY3RlZCBkYXRhLg0KICAgICsNCiAgICArICAgICAgICBleHBl
Y3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhDQogICAgKyAgICAgICAg
cmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFs
c2Ugb3RoZXJ3aXNlDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYu
X21hdGNoZXMoJ2NvbmZpZycsIGV4cGVjdGVkKQ0KICAgICsNCiAgICArICAgIGRlZiBzdGRvdXRf
Y29udGFpbnMoc2VsZiwgZXhwZWN0ZWQpOg0KICAgICsgICAgICAgICIiIkNoZWNrIGlmIHJlc3Vs
dGVkIHN0ZG91dCBjb250YWlucyBleHBlY3RlZCBkYXRhLg0KICAgICsNCiAgICArICAgICAgICBl
eHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhDQogICAgKyAgICAg
ICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEs
IEZhbHNlIG90aGVyd2lzZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBz
ZWxmLl9jb250YWlucygnc3Rkb3V0JywgZXhwZWN0ZWQpDQogICAgKw0KICAgICsgICAgZGVmIHN0
ZG91dF9tYXRjaGVzKHNlbGYsIGV4cGVjdGVkKToNCiAgICArICAgICAgICAiIiJDaGVjayBpZiBy
ZXN1bHRlZCBzdGRvdXQgZXhhY3RseSBtYXRjaGVzIGV4cGVjdGVkIGRhdGEuDQogICAgKw0KICAg
ICsgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEN
CiAgICArICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBtYXRjaGVzIHRoZSBleHBl
Y3RlZCBkYXRhLCBGYWxzZSBvdGhlcndpc2UNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAg
ICByZXR1cm4gc2VsZi5fbWF0Y2hlcygnc3Rkb3V0JywgZXhwZWN0ZWQpDQogICAgKw0KICAgICsg
ICAgZGVmIHN0ZGVycl9jb250YWlucyhzZWxmLCBleHBlY3RlZCk6DQogICAgKyAgICAgICAgIiIi
Q2hlY2sgaWYgcmVzdWx0ZWQgc3RkZXJyIGNvbnRhaW5zIGV4cGVjdGVkIGRhdGEuDQogICAgKw0K
ICAgICsgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRh
dGENCiAgICArICAgICAgICByZXR1cm5jb2RlOiBUcnVlIGlmIHJlc3VsdCBjb250YWlucyB0aGUg
ZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlDQogICAgKyAgICAgICAgIiIiDQogICAgKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zKCdzdGRlcnInLCBleHBlY3RlZCkNCiAgICArDQog
ICAgKyAgICBkZWYgc3RkZXJyX21hdGNoZXMoc2VsZiwgZXhwZWN0ZWQpOg0KICAgICsgICAgICAg
ICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0
YS4NCiAgICArDQogICAgKyAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUg
ZXhwZWN0ZWQgZGF0YQ0KICAgICsgICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IG1h
dGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQ0KICAgICsgICAgICAgICIi
Ig0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9tYXRjaGVzKCdzdGRlcnInLCBleHBlY3RlZCkN
CiAgICArDQogICAgKw0KICAgICtAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9Im1vZHVsZSIpDQogICAg
K2RlZiBjb25mKHJlcXVlc3QpOg0KICAgICsgICAgIiIiQ3JlYXRlIGEgQ29uZiBpbnN0YW5jZSBh
bmQgcHJvdmlkZSBpdCB0byB0ZXN0IGZ1bmN0aW9ucy4iIiINCiAgICArICAgIHJldHVybiBDb25m
KHJlcXVlc3QpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJy
X3JlY3Vyc2l2ZV9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9kZXAvS2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
MDAwMDAwMC4uZWJkYjNmZg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcNCiAgICBAQCAtMCwwICsx
LDYzIEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArDQog
ICAgKyMgZGVwZW5kcyBvbiBpdHNlbGYNCiAgICArDQogICAgK2NvbmZpZyBBDQogICAgKwlib29s
ICJBIg0KICAgICsJZGVwZW5kcyBvbiBBDQogICAgKw0KICAgICsjIHNlbGVjdCBpdHNlbGYNCiAg
ICArDQogICAgK2NvbmZpZyBCDQogICAgKwlib29sDQogICAgKwlzZWxlY3QgQg0KICAgICsNCiAg
ICArIyBkZXBlbmRzIG9uIGVhY2ggb3RoZXINCiAgICArDQogICAgK2NvbmZpZyBDMQ0KICAgICsJ
Ym9vbCAiQzEiDQogICAgKwlkZXBlbmRzIG9uIEMyDQogICAgKw0KICAgICtjb25maWcgQzINCiAg
ICArCWJvb2wgIkMyIg0KICAgICsJZGVwZW5kcyBvbiBDMQ0KICAgICsNCiAgICArIyBkZXBlbmRz
IG9uIGFuZCBzZWxlY3QNCiAgICArDQogICAgK2NvbmZpZyBEMQ0KICAgICsJYm9vbCAiRDEiDQog
ICAgKwlkZXBlbmRzIG9uIEQyDQogICAgKwlzZWxlY3QgRDINCiAgICArDQogICAgK2NvbmZpZyBE
Mg0KICAgICsJYm9vbA0KICAgICsNCiAgICArIyBkZXBlbmRzIG9uIGFuZCBpbXBseQ0KICAgICsN
CiAgICArY29uZmlnIEUxDQogICAgKwlib29sICJFMSINCiAgICArCWRlcGVuZHMgb24gRTINCiAg
ICArCWltcGx5IEUyDQogICAgKw0KICAgICtjb25maWcgRTINCiAgICArCWJvb2wgIkUyIg0KICAg
ICsNCiAgICArIyBwcm9wZXJ0eQ0KICAgICsNCiAgICArY29uZmlnIEYxDQogICAgKwlib29sICJG
MSINCiAgICArCWRlZmF1bHQgRjINCiAgICArDQogICAgK2NvbmZpZyBGMg0KICAgICsJYm9vbCAi
RjIiDQogICAgKwlkZXBlbmRzIG9uIEYxDQogICAgKw0KICAgICsjIG1lbnUNCiAgICArDQogICAg
K21lbnUgIm1lbnUgZGVwZW5kaW5nIG9uIGl0cyBjb250ZW50Ig0KICAgICsJZGVwZW5kcyBvbiBH
DQogICAgKw0KICAgICtjb25maWcgRw0KICAgICsJYm9vbCAiRyINCiAgICArDQogICAgK2VuZG1l
bnUNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJz
aXZlX2RlcC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9kZXAvX19pbml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IDAwMDAwMDAuLjVmMzgyMWINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weQ0KICAgIEBAIC0w
LDAgKzEsMTAgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAg
ICsiIiINCiAgICArRGV0ZWN0IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVycm9yLg0KICAgICsNCiAg
ICArUmVjdXJzaXZlIGRlcGVuZGVuY3kgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuDQog
ICAgKyIiIg0KICAgICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQgY29u
Zi5vbGRhc2tjb25maWcoKSA9PSAxDQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFp
bnMoJ2V4cGVjdGVkX3N0ZGVycicpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnINCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjg0Njc5YjENCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZl
X2RlcC9leHBlY3RlZF9zdGRlcnINCiAgICBAQCAtMCwwICsxLDM4IEBADQogICAgK0tjb25maWc6
MTE6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQ0KICAgICtLY29uZmlnOjEx
OglzeW1ib2wgQiBpcyBzZWxlY3RlZCBieSBCDQogICAgK0ZvciBhIHJlc29sdXRpb24gcmVmZXIg
dG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICArc3Vic2Vj
dGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAgICArDQog
ICAgK0tjb25maWc6NTplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhDQogICAg
K0tjb25maWc6NToJc3ltYm9sIEEgZGVwZW5kcyBvbiBBDQogICAgK0ZvciBhIHJlc29sdXRpb24g
cmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICAr
c3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAg
ICArDQogICAgK0tjb25maWc6MTc6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVk
IQ0KICAgICtLY29uZmlnOjE3OglzeW1ib2wgQzEgZGVwZW5kcyBvbiBDMg0KICAgICtLY29uZmln
OjIxOglzeW1ib2wgQzIgZGVwZW5kcyBvbiBDMQ0KICAgICtGb3IgYSByZXNvbHV0aW9uIHJlZmVy
IHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgK3N1YnNl
Y3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgKw0K
ICAgICtLY29uZmlnOjMyOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCENCiAg
ICArS2NvbmZpZzozMjoJc3ltYm9sIEQyIGlzIHNlbGVjdGVkIGJ5IEQxDQogICAgK0tjb25maWc6
Mjc6CXN5bWJvbCBEMSBkZXBlbmRzIG9uIEQyDQogICAgK0ZvciBhIHJlc29sdXRpb24gcmVmZXIg
dG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICArc3Vic2Vj
dGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAgICArDQog
ICAgK0tjb25maWc6Mzc6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQ0KICAg
ICtLY29uZmlnOjM3OglzeW1ib2wgRTEgZGVwZW5kcyBvbiBFMg0KICAgICtLY29uZmlnOjQyOglz
eW1ib2wgRTIgaXMgaW1wbGllZCBieSBFMQ0KICAgICtGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRv
IERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgK3N1YnNlY3Rp
b24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgKw0KICAg
ICtLY29uZmlnOjYwOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCENCiAgICAr
S2NvbmZpZzo2MDoJc3ltYm9sIEcgZGVwZW5kcyBvbiBHDQogICAgK0ZvciBhIHJlc29sdXRpb24g
cmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICAr
c3Vic2VjdGlvbiAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAg
ICArDQogICAgK0tjb25maWc6NTE6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVk
IQ0KICAgICtLY29uZmlnOjUxOglzeW1ib2wgRjIgZGVwZW5kcyBvbiBGMQ0KICAgICtLY29uZmln
OjQ5OglzeW1ib2wgRjEgZGVmYXVsdCB2YWx1ZSBjb250YWlucyBGMg0KICAgICtGb3IgYSByZXNv
bHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0
DQogICAgK3N1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlv
bnMiDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vy
c2l2ZV9pbmMvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2
ZV9pbmMvS2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MC4uYzZmNGFkZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcNCiAgICBAQCAtMCwwICsxLDIgQEAN
CiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQogICAgK3NvdXJj
ZSAiS2NvbmZpZy5pbmMxIg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMSBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxDQogICAgbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4wMWNiZjBkDQogICAgLS0tIC9kZXYvbnVsbA0KICAg
ICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZp
Zy5pbmMxDQogICAgQEAgLTAsMCArMSw1IEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAtb25seQ0KICAgICsNCiAgICArDQogICAgKw0KICAgICtzb3VyY2UgIktjb25m
aWcuaW5jMiINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJf
cmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uODIzNTEwNw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMg0K
ICAgIEBAIC0wLDAgKzEsNCBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wLW9ubHkNCiAgICArDQogICAgKw0KICAgICtzb3VyY2UgIktjb25maWcuaW5jMyINCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9L
Y29uZmlnLmluYzMgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5j
L0tjb25maWcuaW5jMw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MC4uYzZmNGFkZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMw0KICAgIEBAIC0wLDAgKzEs
MiBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCiAgICAr
c291cmNlICJLY29uZmlnLmluYzEiDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4yN2FhMTg5DQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19p
bml0X18ucHkNCiAgICBAQCAtMCwwICsxLDExIEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjANCiAgICArIiIiDQogICAgK0RldGVjdCByZWN1cnNpdmUgaW5jbHVzaW9u
IGVycm9yLg0KICAgICsNCiAgICArSWYgcmVjdXJzaXZlIGluY2x1c2lvbiBpcyBkZXRlY3RlZCwg
aXQgc2hvdWxkIGZhaWwgd2l0aCBlcnJvciBtZXNzYWdlcy4NCiAgICArIiIiDQogICAgKw0KICAg
ICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25m
aWcoKSAhPSAwDQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFpbnMoJ2V4cGVjdGVk
X3N0ZGVycicpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJy
X3JlY3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnINCiAgICBuZXcgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmIwNzBhMzENCiAgICAtLS0gL2Rldi9udWxsDQogICAg
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3Rl
ZF9zdGRlcnINCiAgICBAQCAtMCwwICsxLDYgQEANCiAgICArUmVjdXJzaXZlIGluY2x1c2lvbiBk
ZXRlY3RlZC4NCiAgICArSW5jbHVzaW9uIHBhdGg6DQogICAgKyAgY3VycmVudCBmaWxlIDogS2Nv
bmZpZy5pbmMxDQogICAgKyAgaW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMzOjINCiAgICArICBp
bmNsdWRlZCBmcm9tOiBLY29uZmlnLmluYzI6NA0KICAgICsgIGluY2x1ZGVkIGZyb206IEtjb25m
aWcuaW5jMTo1DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50
ZXJfY2hvaWNlL0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2lj
ZS9LY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi41
Njk4YTQwDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcNCiAgICBAQCAtMCwwICsxLDI1IEBADQogICAgKyMg
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArDQogICAgK2NvbmZpZyBNT0RV
TEVTDQogICAgKwlkZWZfYm9vbCB5DQogICAgKwlvcHRpb24gbW9kdWxlcw0KICAgICsNCiAgICAr
Y2hvaWNlDQogICAgKwlwcm9tcHQgIkNob2ljZSINCiAgICArDQogICAgK2NvbmZpZyBDSE9JQ0Vf
VkFMMA0KICAgICsJdHJpc3RhdGUgIkNob2ljZSAwIg0KICAgICsNCiAgICArY29uZmlnIENIT0lW
RV9WQUwxDQogICAgKwl0cmlzdGF0ZSAiQ2hvaWNlIDEiDQogICAgKw0KICAgICtlbmRjaG9pY2UN
CiAgICArDQogICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0ICJBbm90aGVyIGNob2ljZSINCiAgICAr
CWRlcGVuZHMgb24gQ0hPSUNFX1ZBTDANCiAgICArDQogICAgK2NvbmZpZyBEVU1NWQ0KICAgICsJ
Ym9vbCAiZHVtbXkiDQogICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18ucHkgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weQ0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZmZlYTZiMQ0KICAgIC0tLSAvZGV2L251
bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2lu
aXRfXy5weQ0KICAgIEBAIC0wLDAgKzEsMTUgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMA0KICAgICsiIiINCiAgICArRG8gbm90IGFmZmVjdCB1c2VyLWFzc2lnbmVk
IGNob2ljZSB2YWx1ZSBieSBhbm90aGVyIGNob2ljZS4NCiAgICArDQogICAgK0hhbmRsaW5nIG9m
IHN0YXRlIGZsYWdzIGZvciBjaG9pY2VzIGlzIGNvbXBsZWNhdGVkLiAgSW4gb2xkIGRheXMsDQog
ICAgK3RoZSBkZWZjb25maWcgcmVzdWx0IG9mIGEgY2hvaWNlIGNvdWxkIGJlIGFmZmVjdGVkIGJ5
IGFub3RoZXIgY2hvaWNlDQogICAgK2lmIHRob3NlIGNob2ljZXMgaW50ZXJhY3QgYnkgJ2RlcGVu
ZHMgb24nLCAnc2VsZWN0JywgZXRjLg0KICAgICsNCiAgICArUmVsYXRlZCBMaW51eCBjb21taXQ6
IGZiZTk4YmI5ZWQzZGFlMjNlMzIwYzZiMTEzZTM1ZjEyOTUzOGQxNGENCiAgICArIiIiDQogICAg
Kw0KICAgICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5kZWZj
b25maWcoJ2RlZmNvbmZpZycpID09IDANCiAgICArICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250
YWlucygnZXhwZWN0ZWRfY29uZmlnJykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi4xNjJjNDE0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZw0KICAgIEBAIC0w
LDAgKzEgQEANCiAgICArQ09ORklHX0NIT0lDRV9WQUwwPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnDQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi41ZGNlZWZiDQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hv
aWNlL2V4cGVjdGVkX2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNCBAQA0KICAgICtDT05GSUdfTU9E
VUxFUz15DQogICAgK0NPTkZJR19DSE9JQ0VfVkFMMD15DQogICAgKyMgQ09ORklHX0NIT0lWRV9W
QUwxIGlzIG5vdCBzZXQNCiAgICArQ09ORklHX0RVTU1ZPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcgYi9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZpZw0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMTI3NzMxYw0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vf
d2l0aF9kZXAvS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsMzkgQEANCiAgICArIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArY29uZmlnIEENCiAgICArCWJvb2wg
IkEiDQogICAgKwloZWxwDQogICAgKwkgIFRoaXMgaXMgYSBuZXcgc3ltYm9sLg0KICAgICsNCiAg
ICArY2hvaWNlDQogICAgKwlwcm9tcHQgIkNob2ljZSA/Ig0KICAgICsJZGVwZW5kcyBvbiBBDQog
ICAgKwloZWxwDQogICAgKwkgICJkZXBlbmRzIG9uIEEiIGhhcyBiZWVuIG5ld2x5IGFkZGVkLg0K
ICAgICsNCiAgICArY29uZmlnIENIT0lDRV9CDQogICAgKwlib29sICJDaG9pY2UgQiINCiAgICAr
DQogICAgK2NvbmZpZyBDSE9JQ0VfQw0KICAgICsJYm9vbCAiQ2hvaWNlIEMiDQogICAgKwloZWxw
DQogICAgKwkgIFRoaXMgaXMgYSBuZXcgc3ltYm9sLCBzbyBzaG91bGQgYmUgYXNrZWQuDQogICAg
Kw0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0ICJDaG9p
Y2UyID8iDQogICAgKw0KICAgICtjb25maWcgQ0hPSUNFX0QNCiAgICArCWJvb2wgIkNob2ljZSBE
Ig0KICAgICsNCiAgICArY29uZmlnIENIT0lDRV9FDQogICAgKwlib29sICJDaG9pY2UgRSINCiAg
ICArDQogICAgK2NvbmZpZyBDSE9JQ0VfRg0KICAgICsJYm9vbCAiQ2hvaWNlIEYiDQogICAgKwlk
ZXBlbmRzIG9uIEENCiAgICArCWhlbHANCiAgICArCSAgVGhpcyBpcyBhIG5ldyBzeW1ib2wsIHNv
IHNob3VsZCBiZSBhc2tlZC4NCiAgICArDQogICAgK2VuZGNob2ljZQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0X18u
cHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0
X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmZlOWQz
MjINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5DQogICAgQEAgLTAsMCArMSwxNSBAQA0K
ICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKyIiIg0KICAgICtB
c2sgbmV3IGNob2ljZSB2YWx1ZXMgd2hlbiB0aGV5IGJlY29tZSB2aXNpYmxlLg0KICAgICsNCiAg
ICArSWYgbmV3IGNob2ljZSB2YWx1ZXMgYXJlIGFkZGVkIHdpdGggbmV3IGRlcGVuZGVuY3ksIGFu
ZCB0aGV5IGJlY29tZQ0KICAgICt2aXNpYmxlIGR1cmluZyB1c2VyIGNvbmZpZ3VyYXRpb24sIG9s
ZGNvbmZpZyBzaG91bGQgcmVjb2duaXplIHRoZW0NCiAgICArYXMgKE5FVyksIGFuZCBhc2sgdGhl
IHVzZXIgZm9yIGNob2ljZS4NCiAgICArDQogICAgK1JlbGF0ZWQgTGludXggY29tbWl0OiA1ZDA5
NTk4ZDQ4OGYwODFlM2JlMjNmODg1ZWQ2NWNiYmUyZDA3M2I1DQogICAgKyIiIg0KICAgICsNCiAg
ICArDQogICAgK2RlZiB0ZXN0KGNvbmYpOg0KICAgICsgICAgYXNzZXJ0IGNvbmYub2xkY29uZmln
KCdjb25maWcnLCAneScpID09IDANCiAgICArICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlu
cygnZXhwZWN0ZWRfc3Rkb3V0JykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25maWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLjQ3ZWY5NWQNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2NvbmZpZw0K
ICAgIEBAIC0wLDAgKzEsMyBAQA0KICAgICtDT05GSUdfQ0hPSUNFX0I9eQ0KICAgICsjIENPTkZJ
R19DSE9JQ0VfRCBpcyBub3Qgc2V0DQogICAgK0NPTkZJR19DSE9JQ0VfRT15DQogICAgZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBl
Y3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9k
ZXAvZXhwZWN0ZWRfc3Rkb3V0DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAw
MDAwMDAwLi43NGRjMGJjDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQNCiAgICBA
QCAtMCwwICsxLDEwIEBADQogICAgK0EgKEEpIFtOL3kvP10gKE5FVykgeQ0KICAgICsgIENob2lj
ZSA/DQogICAgKyAgPiAxLiBDaG9pY2UgQiAoQ0hPSUNFX0IpDQogICAgKyAgICAyLiBDaG9pY2Ug
QyAoQ0hPSUNFX0MpIChORVcpDQogICAgKyAgY2hvaWNlWzEtMj9dOiANCiAgICArQ2hvaWNlMiA/
DQogICAgKyAgMS4gQ2hvaWNlIEQgKENIT0lDRV9EKQ0KICAgICs+IDIuIENob2ljZSBFIChDSE9J
Q0VfRSkNCiAgICArICAzLiBDaG9pY2UgRiAoQ0hPSUNFX0YpIChORVcpDQogICAgK2Nob2ljZVsx
LTM/XTogDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3Jp
dGVfaWZfZGVwX3VubWV0L0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dy
aXRlX2lmX2RlcF91bm1ldC9LY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCAwMDAwMDAwLi40NzY3YWFiDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcNCiAgICBA
QCAtMCwwICsxLDE2IEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN
CiAgICArDQogICAgK2NvbmZpZyBBDQogICAgKwlib29sICJBIg0KICAgICsNCiAgICArY2hvaWNl
DQogICAgKwlwcm9tcHQgIkNob2ljZSA/Ig0KICAgICsJZGVwZW5kcyBvbiBBDQogICAgKw0KICAg
ICtjb25maWcgQ0hPSUNFX0INCiAgICArCWJvb2wgIkNob2ljZSBCIg0KICAgICsNCiAgICArY29u
ZmlnIENIT0lDRV9DDQogICAgKwlib29sICJDaG9pY2UgQyINCiAgICArDQogICAgK2VuZGNob2lj
ZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3Jp
dGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi5mZmQ0NjlkDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5
DQogICAgQEAgLTAsMCArMSwyMCBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH
UEwtMi4wDQogICAgKyIiIg0KICAgICtEbyBub3Qgd3JpdGUgY2hvaWNlIHZhbHVlcyB0byAuY29u
ZmlnIGlmIHRoZSBkZXBlbmRlbmN5IGlzIHVubWV0Lg0KICAgICsNCiAgICArIiMgQ09ORklHXy4u
LiBpcyBub3Qgc2V0IiBzaG91bGQgbm90IGJlIHdyaXR0ZW4gaW50byB0aGUgLmNvbmZpZyBmaWxl
DQogICAgK2ZvciBzeW1ib2xzIHdpdGggdW5tZXQgZGVwZW5kZW5jeS4NCiAgICArDQogICAgK1Ro
aXMgd2FzIG5vdCB3b3JraW5nIGNvcnJlY3RseSBmb3IgY2hvaWNlIHZhbHVlcyBiZWNhdXNlIGNo
b2ljZSBuZWVkcw0KICAgICthIGJpdCBkaWZmZXJlbnQgc3ltYm9sIGNvbXB1dGF0aW9uLg0KICAg
ICsNCiAgICArVGhpcyBjaGVja3MgdGhhdCBubyB1bm5lZWRlZCAiIyBDT0ZJR18uLi4gaXMgbm90
IHNldCIgaXMgY29udGFpbmVkIGluDQogICAgK3RoZSAuY29uZmlnIGZpbGUuDQogICAgKw0KICAg
ICtSZWxhdGVkIExpbnV4IGNvbW1pdDogY2I2N2FiMmNkMmI4YWJkOTY1MDI5MmM5ODZjNzk5MDFl
MzA3M2E1OQ0KICAgICsiIiINCiAgICArDQogICAgKw0KICAgICtkZWYgdGVzdChjb25mKToNCiAg
ICArICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygnY29uZmlnJywgJ24nKSA9PSAwDQogICAg
KyAgICBhc3NlcnQgY29uZi5jb25maWdfbWF0Y2hlcygnZXhwZWN0ZWRfY29uZmlnJykNCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5t
ZXQvY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5t
ZXQvY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5h
YmQyODBlDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZw0KICAgIEBAIC0wLDAgKzEgQEANCiAg
ICArQ09ORklHX0E9eQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcNCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjQ3MzIyODgNCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9k
ZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnDQogICAgQEAgLTAsMCArMSw1IEBADQogICAgKyMNCiAg
ICArIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJVC4NCiAgICArIyBN
YWluIG1lbnUNCiAgICArIw0KICAgICsjIENPTkZJR19BIGlzIG5vdCBzZXQNCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9L
Y29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVu
Yy9LY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5i
YWEzMjg4DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsMjcg
QEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICAr
IyAnaW5mbycgcHJpbnRzIHRoZSBhcmd1bWVudCB0byBzdGRvdXQuDQogICAgKyQoaW5mbyxoZWxs
byB3b3JsZCAwKQ0KICAgICsNCiAgICArIyAnd2FybmluZy1pZicsIGlmIHRoZSBmaXJzdCBhcmd1
bWVudCBpcyB5LCBzZW5kcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHN0ZGVyciwNCiAgICArIyBh
bmQgdGhlIG1lc3NhZ2UgaXMgcHJlZml4ZWQgd2l0aCB0aGUgY3VycmVudCBmaWxlIG5hbWUgYW5k
IGxpbmUgbnVtYmVyLg0KICAgICskKHdhcm5pbmctaWYseSxoZWxsbyB3b3JsZCAxKQ0KICAgICsN
CiAgICArIyAnZXJyb3ItaWYnIGlzIHNpbWlsYXIsIGJ1dCBpdCB0ZXJtaW5hdGVzIHRoZSBwYXJz
aW5nIGltbWVkaWF0ZWx5Lg0KICAgICsjIFRoZSBmb2xsb3dpbmcgaXMganVzdCBuby1vcCBzaW5j
ZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgbm90IHkuDQogICAgKyQoZXJyb3ItaWYsbix0aGlzIHNo
b3VsZCBub3QgYmUgcHJpbnRlZCkNCiAgICArDQogICAgKyMgU2hvcnRoYW5kDQogICAgK3dhcm5p
bmcgPSAkKHdhcm5pbmctaWYseSwkKDEpKQ0KICAgICsNCiAgICArIyAnc2hlbGwnIGV4ZWN1dGVz
IGEgY29tbWFuZCwgYW5kIHJldHVybnMgaXRzIHN0ZG91dC4NCiAgICArJCh3YXJuaW5nLCQoc2hl
bGwsZWNobyBoZWxsbyB3b3JsZCAzKSkNCiAgICArDQogICAgKyMgRXZlcnkgbmV3bGluZSBpbiB0
aGUgb3V0cHV0IGlzIHJlcGxhY2VkIHdpdGggYSBzcGFjZSwNCiAgICArIyBidXQgYW55IHRyYWls
aW5nIG5ld2xpbmVzIGFyZSBkZWxldGVkLg0KICAgICskKHdhcm5pbmcsJChzaGVsbCxwcmludGYg
J2hlbGxvXG53b3JsZFxuXG40XG5cblxuJykpDQogICAgKw0KICAgICsjICdmaWxlbmFtZScgaXMg
ZXhwYW5kZWQgdG8gdGhlIGN1cnJlbnRseSBwYXJzZWQgZmlsZSBuYW1lLA0KICAgICsjICdsaW5l
bm8nIHRvIHRoZSBsaW5lIG51bWJlci4NCiAgICArJCh3YXJuaW5nLGZpbGVuYW1lPSQoZmlsZW5h
bWUpKQ0KICAgICskKHdhcm5pbmcsbGluZW5vPSQobGluZW5vKSkNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRf
Xy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMv
X19pbml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAu
LjJlNTNiYTANCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weQ0KICAgIEBAIC0wLDAg
KzEsOSBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKyIi
Ig0KICAgICtCdWlsdC1pbiBmdW5jdGlvbiB0ZXN0cy4NCiAgICArIiIiDQogICAgKw0KICAgICtk
ZWYgdGVzdChjb25mKToNCiAgICArICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDAN
CiAgICArICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0JykN
CiAgICArICAgIGFzc2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQ0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVp
bHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyDQogICAgbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4zM2VhOWNhDQogICAgLS0tIC9kZXYvbnVsbA0KICAg
ICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMv
ZXhwZWN0ZWRfc3RkZXJyDQogICAgQEAgLTAsMCArMSw1IEBADQogICAgK0tjb25maWc6ODogaGVs
bG8gd29ybGQgMQ0KICAgICtLY29uZmlnOjE4OiBoZWxsbyB3b3JsZCAzDQogICAgK0tjb25maWc6
MjI6IGhlbGxvIHdvcmxkICA0DQogICAgK0tjb25maWc6MjY6IGZpbGVuYW1lPUtjb25maWcNCiAg
ICArS2NvbmZpZzoyNzogbGluZW5vPTI3DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0IGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9z
dGRvdXQNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjgyZGUz
YTcNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQNCiAgICBAQCAtMCwwICsx
IEBADQogICAgK2hlbGxvIHdvcmxkIDANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmln
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi42ODM4OTk3DQog
ICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNSBAQA0K
ICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKw0KICAgICtYID0g
JChZKQ0KICAgICtZID0gJChYKQ0KICAgICskKGluZm8gJChYKSkNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9f
X2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxh
cl9leHBhbnNpb24vX19pbml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGlu
ZGV4IDAwMDAwMDAuLjQxOWJkYTMNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRf
Xy5weQ0KICAgIEBAIC0wLDAgKzEsMTEgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMA0KICAgICsiIiINCiAgICArRGV0ZWN0IGNpcmN1bGFyIHZhcmlhYmxlIGV4cGFu
c2lvbi4NCiAgICArDQogICAgK0lmIGEgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUgcmVm
ZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpLA0KICAgICtpdCBzaG91bGQgZmFpbCB3aXRoIGFu
IGVycm9yIG1lc3NhZ2UuDQogICAgKyIiIg0KICAgICsNCiAgICArZGVmIHRlc3QoY29uZik6DQog
ICAgKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSAhPSAwDQogICAgKyAgICBhc3NlcnQg
Y29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRfc3RkZXJyJykNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9l
eHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2ly
Y3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVycg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgaW5kZXggMDAwMDAwMC4uY2RlNjhmYQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9u
L2V4cGVjdGVkX3N0ZGVycg0KICAgIEBAIC0wLDAgKzEgQEANCiAgICArS2NvbmZpZzo1OiBSZWN1
cnNpdmUgdmFyaWFibGUgJ1gnIHJlZmVyZW5jZXMgaXRzZWxmIChldmVudHVhbGx5KQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tj
b25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25m
aWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjRlM2Y0NDQN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9w
cmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnDQogICAgQEAgLTAsMCArMSw0NCBAQA0KICAgICsjIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKw0KICAgICsjIFNob3J0aGFuZA0K
ICAgICt3YXJuaW5nID0gJCh3YXJuaW5nLWlmLHksJCgxKSkNCiAgICArDQogICAgKyMgWW91IGNh
biBub3QgcGFzcyBjb21tYXMgZGlyZWN0bHkgdG8gYSBmdW5jdGlvbiBzaW5jZSB0aGV5IGFyZSB0
cmVhdGVkIGFzDQogICAgKyMgZGVsaW1pdGVycy4gWW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0
cmljayB0byBkbyBzby4NCiAgICArY29tbWEgICA6PSAsDQogICAgKyQod2FybmluZyxoZWxsbyQo
Y29tbWEpIHdvcmxkKQ0KICAgICsNCiAgICArIyBMaWtlIE1ha2UsIHNpbmdsZSBxdW90ZXMsIGRv
dWJsZSBxdW90ZXMsIHNwYWNlcyBhcmUgdHJlYXRlZCB2ZXJiYXRpbS4NCiAgICArIyBUaGUgZm9s
bG93aW5nIHByaW50cyB0aGUgdGV4dCBhcy1pcy4NCiAgICArJCh3YXJuaW5nLCAgJyAiICciICAg
JyAnJycgIiciKQ0KICAgICsNCiAgICArIyBVbmxpa2UgTWFrZSwgJyQnIGhhcyBzcGVjaWFsIG1l
YW5pbmcgb25seSB3aGVuIGl0IGlzIGZvbGxvd2VkIGJ5ICcoJy4NCiAgICArIyBObyBuZWVkIHRv
IGVzY2FwZSAnJCcgaXRzZWxmLg0KICAgICskKHdhcm5pbmcsJCkNCiAgICArJCh3YXJuaW5nLCQk
KQ0KICAgICskIDo9IDENCiAgICArJCh3YXJuaW5nLCQoJCkpDQogICAgKw0KICAgICsjIFlvdSBu
ZWVkIGEgdHJpY2sgdG8gZXNjYXBlICckJyBmb2xsb3dlZCBieSAnKCcNCiAgICArIyBUaGUgZm9s
bG93aW5nIHNob3VsZCBwcmludCAiJChYKSIuIEl0IHNob3VsZCBub3QgYmUgZXhwYW5kZWQgZnVy
dGhlci4NCiAgICArZG9sbGFyIDo9ICQNCiAgICArJCh3YXJuaW5nLCQoZG9sbGFyKShYKSkNCiAg
ICArDQogICAgKyMgWW91IG5lZWQgYSB0cmljayB0byB0cmVhdCB1bmJhbGFuY2VkIHBhcmVudGhl
c2VzLg0KICAgICsjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByaW50ICIoIi4NCiAgICArbGVmdF9w
YXJlbiA6PSAoDQogICAgKyQod2FybmluZywkKGxlZnRfcGFyZW4pKQ0KICAgICsNCiAgICArIyBB
IHNpbXBsZSBleHBhbmRlZCBzaG91bGQgbm90IGJlIGV4cGFuZGVkIG11bHRpcGxlIHRpbWVzLg0K
ICAgICsjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByaW50ICIkKFgpIi4gSXQgc2hvdWxkIG5vdCBi
ZSBleHBhbmRlZCBmdXJ0aGVyLg0KICAgICtZIDo9ICQoZG9sbGFyKShYKQ0KICAgICskKHdhcm5p
bmcsJChZKSkNCiAgICArDQogICAgKyMgVGhlIGZvbGxvd2luZyBzaG91bGQgcHJpbnQgIiQoWCki
IGFzIHdlbGwuDQogICAgK1kgPSAkKGRvbGxhcikoWCkNCiAgICArJCh3YXJuaW5nLCQoWSkpDQog
ICAgKw0KICAgICsjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByaW50ICIkKCIuDQogICAgKyMgSXQg
c2hvdWxkIG5vdCBiZSBlbWl0ICJ1bnRlcm1pbmF0ZWQgcmVmZXJlbmNlIiBlcnJvci4NCiAgICAr
dW50ZXJtaW5hdGVkIDo9ICQoZG9sbGFyKSgNCiAgICArJCh3YXJuaW5nLCQodW50ZXJtaW5hdGVk
KSkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNz
L2VzY2FwZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vz
cy9lc2NhcGUvX19pbml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IDAwMDAwMDAuLjdlZThlNzQNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQ0KICAgIEBAIC0w
LDAgKzEsOCBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAg
KyIiIg0KICAgICtFc2NhcGUgc2VxdWVuY2UgdGVzdHMuDQogICAgKyIiIg0KICAgICsNCiAgICAr
ZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSA9PSAw
DQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRfc3RkZXJyJykN
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2Vz
Y2FwZS9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nl
c3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
aW5kZXggMDAwMDAwMC4uMWMwMDk1Nw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycg0K
ICAgIEBAIC0wLDAgKzEsMTAgQEANCiAgICArS2NvbmZpZzo5OiBoZWxsbywgd29ybGQNCiAgICAr
S2NvbmZpZzoxMzogICAnICIgJyIgICAnICcnJyAiJyINCiAgICArS2NvbmZpZzoxNzogJA0KICAg
ICtLY29uZmlnOjE4OiAkJA0KICAgICtLY29uZmlnOjIwOiAxDQogICAgK0tjb25maWc6MjU6ICQo
WCkNCiAgICArS2NvbmZpZzozMDogKA0KICAgICtLY29uZmlnOjM1OiAkKFgpDQogICAgK0tjb25m
aWc6Mzk6ICQoWCkNCiAgICArS2NvbmZpZzo0NDogJCgNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcgYi9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZw0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uOWNlMmY5NQ0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFy
aWFibGUvS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNTMgQEANCiAgICArIyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArIyBTaG9ydGhhbmQNCiAgICArd2Fybmlu
ZyA9ICQod2FybmluZy1pZix5LCQoMSkpDQogICAgKw0KICAgICsjIFNpbXBseSBleHBhbmRlZCB2
YXJpYWJsZS4NCiAgICArWCA6PSAxDQogICAgK1NJTVBMRSA6PSAkKFgpDQogICAgK1ggOj0gMg0K
ICAgICskKHdhcm5pbmcsU0lNUExFID0gJChTSU1QTEUpKQ0KICAgICsNCiAgICArIyBSZWN1cnNp
dmVseSBleHBhbmRlZCB2YXJpYWJsZS4NCiAgICArWCA6PSAxDQogICAgK1JFQ1VSU0lWRSA9ICQo
WCkNCiAgICArWCA6PSAyDQogICAgKyQod2FybmluZyxSRUNVUlNJVkUgPSAkKFJFQ1VSU0lWRSkp
DQogICAgKw0KICAgICsjIEFwcGVuZCBzb21ldGhpbmcgdG8gYSBzaW1wbHkgZXhwYW5kZWQgdmFy
aWFibGUuDQogICAgK1kgOj0gMw0KICAgICtTSU1QTEUgKz0gJChZKQ0KICAgICtZIDo9IDQNCiAg
ICArJCh3YXJuaW5nLFNJTVBMRSA9ICQoU0lNUExFKSkNCiAgICArDQogICAgKyMgQXBwZW5kIHNv
bWV0aGluZyB0byBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlLg0KICAgICtZIDo9IDMN
CiAgICArUkVDVVJTSVZFICs9ICQoWSkNCiAgICArWSA6PSA0DQogICAgKyQod2FybmluZyxSRUNV
UlNJVkUgPSAkKFJFQ1VSU0lWRSkpDQogICAgKw0KICAgICsjIFVzZSArPSBvcGVyYXRvciB0byBh
biB1bmRlZmluZWQgdmFyaWFibGUuDQogICAgKyMgVGhpcyB3b3JrcyBhcyBhIHJlY3Vyc2l2ZWx5
IGV4cGFuZGVkIHZhcmlhYmxlLg0KICAgICtZIDo9IDMNCiAgICArVU5ERUZJTkVEX1ZBUklBQkxF
ICs9ICQoWSkNCiAgICArWSA6PSA0DQogICAgKyQod2FybmluZyxVTkRFRklORURfVkFSSUFCTEUg
PSAkKFVOREVGSU5FRF9WQVJJQUJMRSkpDQogICAgKw0KICAgICsjIFlvdSBjYW4gdXNlIHZhcmlh
YmxlIHJlZmVyZW5jZXMgZm9yIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgc3RhdGVt
ZW50Lg0KICAgICtYIDo9IEENCiAgICArWSA6PSBCDQogICAgKyQoWCkkKFkpIDo9IDUNCiAgICAr
JCh3YXJuaW5nLEFCID0gJChBQikpDQogICAgKw0KICAgICsjIFVzZXItZGVmaW5lZCBmdW5jdGlv
bi4NCiAgICArZ3JlZXRpbmcgPSAkKDEpLCBteSBuYW1lIGlzICQoMikuDQogICAgKyQod2Fybmlu
ZywkKGdyZWV0aW5nLEhlbGxvLEpvaG4pKQ0KICAgICsNCiAgICArIyBUaGUgbnVtYmVyIG9mIGFy
Z3VtZW50cyBpcyBub3QgY2hlY2tlZCBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4NCiAgICAr
IyBJZiBzb21lIGFyZ3VtZW50cyBhcmUgb3B0aW9uYWwsIGl0IGlzIHVzZWZ1bCB0byBwYXNzIGZl
d2VyIHBhcmFtZXRlcnMuDQogICAgKyMgJCgyKSB3aWxsIGJlIGJsYW5rIGluIHRoaXMgY2FzZS4N
CiAgICArJCh3YXJuaW5nLCQoZ3JlZXRpbmcsSGVsbG8pKQ0KICAgICsNCiAgICArIyBVbnJlZmVy
ZW5jZWQgcGFyYW1ldGVycyBhcmUganVzdCBpZ25vcmVkLg0KICAgICskKHdhcm5pbmcsJChncmVl
dGluZyxIZWxsbyxKb2huLGlnbm9yZWQsaWdub3JlZCkpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weSBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weQ0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZTg4YjE3MA0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkNCiAgICBAQCAtMCwwICsxLDggQEANCiAgICArIyBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsiIiINCiAgICArVmFyaWFibGUg
YW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbiB0ZXN0cy4NCiAgICArIiIiDQogICAgKw0KICAgICtk
ZWYgdGVzdChjb25mKToNCiAgICArICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDAN
CiAgICArICAgIGFzc2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQ0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFy
aWFibGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uYTQ4NDFjMw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3Rk
ZXJyDQogICAgQEAgLTAsMCArMSw5IEBADQogICAgK0tjb25maWc6MTA6IFNJTVBMRSA9IDENCiAg
ICArS2NvbmZpZzoxNjogUkVDVVJTSVZFID0gMg0KICAgICtLY29uZmlnOjIyOiBTSU1QTEUgPSAx
IDMNCiAgICArS2NvbmZpZzoyODogUkVDVVJTSVZFID0gMiA0DQogICAgK0tjb25maWc6MzU6IFVO
REVGSU5FRF9WQVJJQUJMRSA9IDQNCiAgICArS2NvbmZpZzo0MTogQUIgPSA1DQogICAgK0tjb25m
aWc6NDU6IEhlbGxvLCBteSBuYW1lIGlzIEpvaG4uDQogICAgK0tjb25maWc6NTA6IEhlbGxvLCBt
eSBuYW1lIGlzIC4NCiAgICArS2NvbmZpZzo1MzogSGVsbG8sIG15IG5hbWUgaXMgSm9obi4NCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICBpbmRleCAwMDAwMDAwLi44NWQ3Y2U4DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHl0ZXN0LmluaQ0KICAgIEBAIC0wLDAgKzEs
NyBAQA0KICAgICtbcHl0ZXN0XQ0KICAgICthZGRvcHRzID0gLS12ZXJib3NlDQogICAgKw0KICAg
ICsjIFB5dGVzdCByZXF1aXJlcyB0aGF0IHRlc3QgZmlsZXMgaGF2ZSB1bmlxdWUgbmFtZXMsIGJl
Y2F1c2UgcHl0ZXN0IGltcG9ydHMNCiAgICArIyB0aGVtIGFzIHRvcC1sZXZlbCBtb2R1bGVzLiAg
SXQgaXMgc2lsbHkgdG8gcHJlZml4IG9yIHN1ZmZpeCBhIHRlc3QgZmlsZSB3aXRoDQogICAgKyMg
dGhlIGRpcmVjdG9yeSBuYW1lIHRoYXQgY29udGFpbnMgaXQuICBVc2UgX19pbml0X18ucHkgZm9y
IGFsbCB0ZXN0IGZpbGVzLg0KICAgICtweXRob25fZmlsZXMgPSBfX2luaXRfXy5weQ0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9L
Y29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2Nv
bmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uODM1MGRl
Nw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnDQogICAgQEAgLTAsMCArMSwzNSBAQA0KICAgICsj
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKw0KICAgICtjaG9pY2UNCiAg
ICArCXByb21wdCAiY2hvaWNlIg0KICAgICsNCiAgICArY29uZmlnIEENCiAgICArCWJvb2wgIkEi
DQogICAgKw0KICAgICtjb25maWcgQg0KICAgICsJYm9vbCAiQiINCiAgICArDQogICAgK2lmIEIN
CiAgICArY2hvaWNlDQogICAgKwlwcm9tcHQgInN1YiBjaG9pY2UiDQogICAgKw0KICAgICtjb25m
aWcgQw0KICAgICsJYm9vbCAiQyINCiAgICArDQogICAgK2NvbmZpZyBEDQogICAgKwlib29sICJE
Ig0KICAgICsNCiAgICAraWYgRA0KICAgICtjaG9pY2UNCiAgICArCXByb21wdCAic3Vic3ViIGNo
b2ljZSINCiAgICArDQogICAgK2NvbmZpZyBFDQogICAgKwlib29sICJFIg0KICAgICsNCiAgICAr
ZW5kY2hvaWNlDQogICAgK2VuZGlmICMgRA0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgK2Vu
ZGlmICMgQg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5IGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkNCiAgICBu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjllNGIyZGINCiAgICAtLS0g
L2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3Rl
ZF9jaG9pY2UvX19pbml0X18ucHkNCiAgICBAQCAtMCwwICsxLDE3IEBADQogICAgKyMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArIiIiDQogICAgK1NldCByYW5kb20gdmFs
dWVzIHJlY3Vyc2l2ZWx5IGluIG5lc3RlZCBjaG9pY2VzLg0KICAgICsNCiAgICArS2NvbmZpZyBj
YW4gY3JlYXRlIGEgY2hvaWNlLWluLWNob2ljZSBzdHJ1Y3R1cmUgYnkgdXNpbmcgJ2lmJyBzdGF0
ZW1lbnQuDQogICAgK3JhbmRjb25maWcgc2hvdWxkIGNvcnJlY3RseSBzZXQgcmFuZG9tIGNob2lj
ZSB2YWx1ZXMuDQogICAgKw0KICAgICtSZWxhdGVkIExpbnV4IGNvbW1pdDogM2I5YTE5ZTA4OTYw
ZTVjZGFkNTI1Mzk5ODYzNzY1M2U1OTJhM2MyOQ0KICAgICsiIiINCiAgICArDQogICAgKw0KICAg
ICtkZWYgdGVzdChjb25mKToNCiAgICArICAgIGZvciBpIGluIHJhbmdlKDIwKToNCiAgICArICAg
ICAgICBhc3NlcnQgY29uZi5yYW5kY29uZmlnKCkgPT0gMA0KICAgICsgICAgICAgIGFzc2VydCAo
Y29uZi5jb25maWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dDAnKSBvcg0KICAgICsgICAgICAg
ICAgICAgICAgY29uZi5jb25maWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dDEnKSBvcg0KICAg
ICsgICAgICAgICAgICAgICAgY29uZi5jb25maWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dDIn
KSkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3Rl
ZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFu
ZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDANCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLjA1NDUwZjMNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRf
c3Rkb3V0MA0KICAgIEBAIC0wLDAgKzEsMiBAQA0KICAgICtDT05GSUdfQT15DQogICAgKyMgQ09O
RklHX0IgaXMgbm90IHNldA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MQ0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMzdhYjI5NQ0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2No
b2ljZS9leHBlY3RlZF9zdGRvdXQxDQogICAgQEAgLTAsMCArMSw0IEBADQogICAgKyMgQ09ORklH
X0EgaXMgbm90IHNldA0KICAgICtDT05GSUdfQj15DQogICAgK0NPTkZJR19DPXkNCiAgICArIyBD
T05GSUdfRCBpcyBub3Qgc2V0DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDIgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyDQogICAgbmV3
IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi44NDlmZjQ3DQogICAgLS0tIC9k
ZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRf
Y2hvaWNlL2V4cGVjdGVkX3N0ZG91dDINCiAgICBAQCAtMCwwICsxLDUgQEANCiAgICArIyBDT05G
SUdfQSBpcyBub3Qgc2V0DQogICAgK0NPTkZJR19CPXkNCiAgICArIyBDT05GSUdfQyBpcyBub3Qg
c2V0DQogICAgK0NPTkZJR19EPXkNCiAgICArQ09ORklHX0U9eQ0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L3V0aWwuYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jDQog
ICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4yOTU4NTM5DQogICAg
LS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jDQogICAg
QEAgLTAsMCArMSwxMjkgQEANCiAgICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjANCiAgICArLyoNCiAgICArICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgUm9tYW4gWmlwcGVs
IDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA1
IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4NCiAgICArICovDQogICAgKw0KICAgICsj
aW5jbHVkZSA8c3RkYXJnLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1
ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSAibGtjLmgiDQogICAgKw0KICAgICsvKiBmaWxl
IGFscmVhZHkgcHJlc2VudCBpbiBsaXN0PyBJZiBub3QgYWRkIGl0ICovDQogICAgK3N0cnVjdCBm
aWxlICpmaWxlX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qg
ZmlsZSAqZmlsZTsNCiAgICArDQogICAgKwlmb3IgKGZpbGUgPSBmaWxlX2xpc3Q7IGZpbGU7IGZp
bGUgPSBmaWxlLT5uZXh0KSB7DQogICAgKwkJaWYgKCFzdHJjbXAobmFtZSwgZmlsZS0+bmFtZSkp
IHsNCiAgICArCQkJcmV0dXJuIGZpbGU7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICAr
CWZpbGUgPSB4bWFsbG9jKHNpemVvZigqZmlsZSkpOw0KICAgICsJbWVtc2V0KGZpbGUsIDAsIHNp
emVvZigqZmlsZSkpOw0KICAgICsJZmlsZS0+bmFtZSA9IHhzdHJkdXAobmFtZSk7DQogICAgKwlm
aWxlLT5uZXh0ID0gZmlsZV9saXN0Ow0KICAgICsJZmlsZV9saXN0ID0gZmlsZTsNCiAgICArCXJl
dHVybiBmaWxlOw0KICAgICt9DQogICAgKw0KICAgICsvKiBBbGxvY2F0ZSBpbml0aWFsIGdyb3dh
YmxlIHN0cmluZyAqLw0KICAgICtzdHJ1Y3QgZ3N0ciBzdHJfbmV3KHZvaWQpDQogICAgK3sNCiAg
ICArCXN0cnVjdCBnc3RyIGdzOw0KICAgICsJZ3MucyA9IHhtYWxsb2Moc2l6ZW9mKGNoYXIpICog
NjQpOw0KICAgICsJZ3MubGVuID0gNjQ7DQogICAgKwlncy5tYXhfd2lkdGggPSAwOw0KICAgICsJ
c3RyY3B5KGdzLnMsICJcMCIpOw0KICAgICsJcmV0dXJuIGdzOw0KICAgICt9DQogICAgKw0KICAg
ICsvKiBGcmVlIHN0b3JhZ2UgZm9yIGdyb3dhYmxlIHN0cmluZyAqLw0KICAgICt2b2lkIHN0cl9m
cmVlKHN0cnVjdCBnc3RyICpncykNCiAgICArew0KICAgICsJaWYgKGdzLT5zKQ0KICAgICsJCWZy
ZWUoZ3MtPnMpOw0KICAgICsJZ3MtPnMgPSBOVUxMOw0KICAgICsJZ3MtPmxlbiA9IDA7DQogICAg
K30NCiAgICArDQogICAgKy8qIEFwcGVuZCB0byBncm93YWJsZSBzdHJpbmcgKi8NCiAgICArdm9p
ZCBzdHJfYXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqcykNCiAgICArew0KICAg
ICsJc2l6ZV90IGw7DQogICAgKwlpZiAocykgew0KICAgICsJCWwgPSBzdHJsZW4oZ3MtPnMpICsg
c3RybGVuKHMpICsgMTsNCiAgICArCQlpZiAobCA+IGdzLT5sZW4pIHsNCiAgICArCQkJZ3MtPnMg
PSB4cmVhbGxvYyhncy0+cywgbCk7DQogICAgKwkJCWdzLT5sZW4gPSBsOw0KICAgICsJCX0NCiAg
ICArCQlzdHJjYXQoZ3MtPnMsIHMpOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKiBB
cHBlbmQgcHJpbnRmIGZvcm1hdHRlZCBzdHJpbmcgdG8gZ3Jvd2FibGUgc3RyaW5nICovDQogICAg
K3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0K
ICAgICt7DQogICAgKwl2YV9saXN0IGFwOw0KICAgICsJY2hhciBzWzEwMDAwXTsgLyogYmlnIGVu
b3VnaC4uLiAqLw0KICAgICsJdmFfc3RhcnQoYXAsIGZtdCk7DQogICAgKwl2c25wcmludGYocywg
c2l6ZW9mKHMpLCBmbXQsIGFwKTsNCiAgICArCXN0cl9hcHBlbmQoZ3MsIHMpOw0KICAgICsJdmFf
ZW5kKGFwKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogUmV0cmlldmUgdmFsdWUgb2YgZ3Jvd2Fi
bGUgc3RyaW5nICovDQogICAgK2NvbnN0IGNoYXIgKnN0cl9nZXQoc3RydWN0IGdzdHIgKmdzKQ0K
ICAgICt7DQogICAgKwlyZXR1cm4gZ3MtPnM7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgKnht
YWxsb2Moc2l6ZV90IHNpemUpDQogICAgK3sNCiAgICArCXZvaWQgKnAgPSBtYWxsb2Moc2l6ZSk7
DQogICAgKwlpZiAocCkNCiAgICArCQlyZXR1cm4gcDsNCiAgICArCWZwcmludGYoc3RkZXJyLCAi
T3V0IG9mIG1lbW9yeS5cbiIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgICsNCiAgICAr
dm9pZCAqeGNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQ0KICAgICt7DQogICAgKwl2
b2lkICpwID0gY2FsbG9jKG5tZW1iLCBzaXplKTsNCiAgICArCWlmIChwKQ0KICAgICsJCXJldHVy
biBwOw0KICAgICsJZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7DQogICAgKwll
eGl0KDEpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkICp4cmVhbGxvYyh2b2lkICpwLCBzaXpl
X3Qgc2l6ZSkNCiAgICArew0KICAgICsJcCA9IHJlYWxsb2MocCwgc2l6ZSk7DQogICAgKwlpZiAo
cCkNCiAgICArCQlyZXR1cm4gcDsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9y
eS5cbiIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgICsNCiAgICArY2hhciAqeHN0cmR1
cChjb25zdCBjaGFyICpzKQ0KICAgICt7DQogICAgKwljaGFyICpwOw0KICAgICsNCiAgICArCXAg
PSBzdHJkdXAocyk7DQogICAgKwlpZiAocCkNCiAgICArCQlyZXR1cm4gcDsNCiAgICArCWZwcmlu
dGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0K
ICAgICsNCiAgICArY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pDQogICAg
K3sNCiAgICArCWNoYXIgKnA7DQogICAgKw0KICAgICsJcCA9IHN0cm5kdXAocywgbik7DQogICAg
KwlpZiAocCkNCiAgICArCQlyZXR1cm4gcDsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiT3V0IG9m
IG1lbW9yeS5cbiIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L3pjb25mLmxleC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy96Y29u
Zi5sZXguYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYjI1
ODc3Ng0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3pj
b25mLmxleC5jDQogICAgQEAgLTAsMCArMSwyODIwIEBADQogICAgKw0KICAgICsjZGVmaW5lICBZ
WV9JTlRfQUxJR05FRCBzaG9ydCBpbnQNCiAgICArDQogICAgKy8qIEEgbGV4aWNhbCBzY2FubmVy
IGdlbmVyYXRlZCBieSBmbGV4ICovDQogICAgKw0KICAgICsjZGVmaW5lIEZMRVhfU0NBTk5FUg0K
ICAgICsjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyDQogICAgKyNkZWZpbmUgWVlfRkxF
WF9NSU5PUl9WRVJTSU9OIDYNCiAgICArI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04g
MQ0KICAgICsjaWYgWVlfRkxFWF9TVUJNSU5PUl9WRVJTSU9OID4gMA0KICAgICsjZGVmaW5lIEZM
RVhfQkVUQQ0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGgg
IHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8NCiAgICAr
DQogICAgKy8qIGJlZ2luIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8NCiAgICArI2luY2x1ZGUgPHN0
ZGlvLmg+DQogICAgKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICArI2luY2x1ZGUgPGVycm5vLmg+
DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArDQogICAgKy8qIGVuZCBzdGFuZGFyZCBD
IGhlYWRlcnMuICovDQogICAgKw0KICAgICsvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9u
cyAqLw0KICAgICsNCiAgICArI2lmbmRlZiBGTEVYSU5UX0gNCiAgICArI2RlZmluZSBGTEVYSU5U
X0gNCiAgICArDQogICAgKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5
IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovDQogICAgKw0KICAgICsjaWYgZGVmaW5lZCAoX19T
VERDX1ZFUlNJT05fXykgJiYgX19TVERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMDQogICAgKw0KICAg
ICsvKiBDOTkgc2F5cyB0byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVk
aW5nIHN0ZGludC5oLA0KICAgICsgKiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1h
Y3JvcyBmb3IgaW50IHR5cGVzLiANCiAgICArICovDQogICAgKyNpZm5kZWYgX19TVERDX0xJTUlU
X01BQ1JPUw0KICAgICsjZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQ0KICAgICsjZW5kaWYN
CiAgICArDQogICAgKyNpbmNsdWRlIDxpbnR0eXBlcy5oPg0KICAgICt0eXBlZGVmIGludDhfdCBm
bGV4X2ludDhfdDsNCiAgICArdHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsNCiAgICArdHlw
ZWRlZiBpbnQxNl90IGZsZXhfaW50MTZfdDsNCiAgICArdHlwZWRlZiB1aW50MTZfdCBmbGV4X3Vp
bnQxNl90Ow0KICAgICt0eXBlZGVmIGludDMyX3QgZmxleF9pbnQzMl90Ow0KICAgICt0eXBlZGVm
IHVpbnQzMl90IGZsZXhfdWludDMyX3Q7DQogICAgKyNlbHNlDQogICAgK3R5cGVkZWYgc2lnbmVk
IGNoYXIgZmxleF9pbnQ4X3Q7DQogICAgK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsN
CiAgICArdHlwZWRlZiBpbnQgZmxleF9pbnQzMl90Ow0KICAgICt0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgZmxleF91aW50OF90OyANCiAgICArdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91
aW50MTZfdDsNCiAgICArdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsNCiAgICAr
DQogICAgKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8NCiAgICArI2lmbmRlZiBJTlQ4
X01JTg0KICAgICsjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpDQogICAgKyNl
bmRpZg0KICAgICsjaWZuZGVmIElOVDE2X01JTg0KICAgICsjZGVmaW5lIElOVDE2X01JTiAgICAg
ICAgICAgICAgKC0zMjc2Ny0xKQ0KICAgICsjZW5kaWYNCiAgICArI2lmbmRlZiBJTlQzMl9NSU4N
CiAgICArI2RlZmluZSBJTlQzMl9NSU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQ0KICAg
ICsjZW5kaWYNCiAgICArI2lmbmRlZiBJTlQ4X01BWA0KICAgICsjZGVmaW5lIElOVDhfTUFYICAg
ICAgICAgICAgICAgKDEyNykNCiAgICArI2VuZGlmDQogICAgKyNpZm5kZWYgSU5UMTZfTUFYDQog
ICAgKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpDQogICAgKyNlbmRpZg0K
ICAgICsjaWZuZGVmIElOVDMyX01BWA0KICAgICsjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAg
ICAgKDIxNDc0ODM2NDcpDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIFVJTlQ4X01BWA0KICAg
ICsjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAgICAgKDI1NVUpDQogICAgKyNlbmRpZg0KICAg
ICsjaWZuZGVmIFVJTlQxNl9NQVgNCiAgICArI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAg
ICg2NTUzNVUpDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIFVJTlQzMl9NQVgNCiAgICArI2Rl
ZmluZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkNCiAgICArI2VuZGlmDQog
ICAgKw0KICAgICsjZW5kaWYgLyogISBDOTkgKi8NCiAgICArDQogICAgKyNlbmRpZiAvKiAhIEZM
RVhJTlRfSCAqLw0KICAgICsNCiAgICArLyogVE9ETzogdGhpcyBpcyBhbHdheXMgZGVmaW5lZCwg
c28gaW5saW5lIGl0ICovDQogICAgKyNkZWZpbmUgeXljb25zdCBjb25zdA0KICAgICsNCiAgICAr
I2lmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fID49IDMNCiAgICArI2RlZmluZSB5eW5v
cmV0dXJuIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpDQogICAgKyNlbHNlDQogICAgKyNk
ZWZpbmUgeXlub3JldHVybg0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIFJldHVybmVkIHVw
b24gZW5kLW9mLWZpbGUuICovDQogICAgKyNkZWZpbmUgWVlfTlVMTCAwDQogICAgKw0KICAgICsv
KiBQcm9tb3RlcyBhIHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBh
biB1bnNpZ25lZA0KICAgICsgKiBpbnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJ
ZiB0aGUgc2lnbmVkIGNoYXIgaXMgbmVnYXRpdmUsDQogICAgKyAqIHdlIHdhbnQgdG8gaW5zdGVh
ZCB0cmVhdCBpdCBhcyBhbiA4LWJpdCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUNCiAgICArICog
ZG91YmxlIGNhc3QuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5z
aWduZWQgaW50KSAodW5zaWduZWQgY2hhcikgYykNCiAgICArDQogICAgKy8qIEVudGVyIGEgc3Rh
cnQgY29uZGl0aW9uLiAgVGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRl
ciwNCiAgICArICogYnV0IHdlIGRvIGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2Vk
IG9uIHVzIGJ5IHRoZSAoKS1sZXNzDQogICAgKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uDQogICAg
KyAqLw0KICAgICsjZGVmaW5lIEJFR0lOICh5eV9zdGFydCkgPSAxICsgMiAqDQogICAgKw0KICAg
ICsvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQg
Y2FuIGJlIGxhdGVyIGhhbmRlZA0KICAgICsgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0
YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleA0KICAgICsgKiBjb21wYXRpYmlsaXR5
Lg0KICAgICsgKi8NCiAgICArI2RlZmluZSBZWV9TVEFSVCAoKCh5eV9zdGFydCkgLSAxKSAvIDIp
DQogICAgKyNkZWZpbmUgWVlTVEFURSBZWV9TVEFSVA0KICAgICsNCiAgICArLyogQWN0aW9uIG51
bWJlciBmb3IgRU9GIHJ1bGUgb2YgYSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8NCiAgICArI2RlZmlu
ZSBZWV9TVEFURV9FT0Yoc3RhdGUpIChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQ0KICAg
ICsNCiAgICArLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5l
dyBmaWxlIi4gKi8NCiAgICArI2RlZmluZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoeXlpbiAgKQ0K
ICAgICsNCiAgICArI2RlZmluZSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgMA0KICAgICsNCiAgICAr
LyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8NCiAgICArI2lmbmRlZiBZWV9CVUZf
U0laRQ0KICAgICsjaWZkZWYgX19pYTY0X18NCiAgICArLyogT24gSUEtNjQsIHRoZSBidWZmZXIg
c2l6ZSBpcyAxNmssIG5vdCA4ay4NCiAgICArICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIq
WVlfUkVBRF9CVUZfU0laRSBpbiB0aGUgZ2VuZXJhbCBjYXNlLg0KICAgICsgKiBEaXR0byBmb3Ig
dGhlIF9faWE2NF9fIGNhc2UgYWNjb3JkaW5nbHkuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIFlZ
X0JVRl9TSVpFIDMyNzY4DQogICAgKyNlbHNlDQogICAgKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYz
ODQNCiAgICArI2VuZGlmIC8qIF9faWE2NF9fICovDQogICAgKyNlbmRpZg0KICAgICsNCiAgICAr
LyogVGhlIHN0YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBw
ZXIgY2hhcmFjdGVyIGluIHRoZSBtYWluIGJ1ZmZlci4NCiAgICArICovDQogICAgKyNkZWZpbmUg
WVlfU1RBVEVfQlVGX1NJWkUgICAoKFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVf
dHlwZSkpDQogICAgKw0KICAgICsjaWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFDQog
ICAgKyNkZWZpbmUgWVlfVFlQRURFRl9ZWV9CVUZGRVJfU1RBVEUNCiAgICArdHlwZWRlZiBzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7DQogICAgKyNlbmRpZg0KICAgICsN
CiAgICArI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVA0KICAgICsjZGVmaW5lIFlZX1RZUEVE
RUZfWVlfU0laRV9UDQogICAgK3R5cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsNCiAgICArI2VuZGlm
DQogICAgKw0KICAgICtleHRlcm4gaW50IHl5bGVuZzsNCiAgICArDQogICAgK2V4dGVybiBGSUxF
ICp5eWluLCAqeXlvdXQ7DQogICAgKw0KICAgICsjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NB
TiAwDQogICAgKyNkZWZpbmUgRU9CX0FDVF9FTkRfT0ZfRklMRSAxDQogICAgKyNkZWZpbmUgRU9C
X0FDVF9MQVNUX01BVENIIDINCiAgICArDQogICAgKyAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2Fs
bHkgb21pdCB0aGUgdGVzdCBmb3IgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVx
dWlyZXMNCiAgICArICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlf
YWN0LiBTaW5jZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhaw0KICAgICsgICAg
ICogICAgICAgZXhpc3Rpbmcgc2Nhbm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lE
RSB5eWxleC4NCiAgICArICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1h
a2UgeXlfYWN0IGEgZ2xvYmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcNCiAgICArICAgICAqICAg
ICAgIGEgNSUgcGVyZm9ybWFuY2UgaGl0IGluIGEgbm9uLXl5bGluZW5vIHNjYW5uZXIsIGJlY2F1
c2UgeXlfYWN0IGlzDQogICAgKyAgICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJl
Z2lzdGVyIHZhcmlhYmxlLS0gc28gaXQgaXMgbm90IHdvcnRoIGl0Lg0KICAgICsgICAgICovDQog
ICAgKyAgICAjZGVmaW5lICBZWV9MRVNTX0xJTkVOTyhuKSBcDQogICAgKyAgICAgICAgICAgIGRv
IHsgXA0KICAgICsgICAgICAgICAgICAgICAgaW50IHl5bDtcDQogICAgKyAgICAgICAgICAgICAg
ICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXlsIClcDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCB5eXRleHRbeXlsXSA9PSAnXG4nIClcDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgICAgIC0teXlsaW5lbm87XA0KICAgICsgICAgICAgICAgICB9d2hpbGUoMCkNCiAgICAr
ICAgICNkZWZpbmUgWVlfTElORU5PX1JFV0lORF9UTyhkc3QpIFwNCiAgICArICAgICAgICAgICAg
ZG8ge1wNCiAgICArICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnA7XA0KICAgICsgICAgICAg
ICAgICAgICAgZm9yICggcCA9IHl5X2NwLTE7IHAgPj0gKGRzdCk7IC0tcClcDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCAqcCA9PSAnXG4nIClcDQogICAgKyAgICAgICAgICAgICAgICAg
ICAgICAgIC0teXlsaW5lbm87XA0KICAgICsgICAgICAgICAgICB9d2hpbGUoMCkNCiAgICArICAg
IA0KICAgICsvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVy
cyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovDQogICAgKyNkZWZpbmUgeXlsZXNzKG4pIFwN
CiAgICArCWRvIFwNCiAgICArCQl7IFwNCiAgICArCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGlu
ZyB1cCB5eXRleHQuICovIFwNCiAgICArICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChu
KTsgXA0KICAgICsgICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wNCiAg
ICArCQkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgXA0KICAgICsJCVlZX1JFU1RPUkVfWVlfTU9S
RV9PRkZTRVQgXA0KICAgICsJCSh5eV9jX2J1Zl9wKSA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3Nf
bWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwNCiAgICArCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAv
KiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwNCiAgICArCQl9IFwNCiAgICArCXdoaWxlICggMCAp
DQogICAgKw0KICAgICsjZGVmaW5lIHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAg
KQ0KICAgICsNCiAgICArI2lmbmRlZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFDQogICAgKyNk
ZWZpbmUgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQ0KICAgICtzdHJ1Y3QgeXlfYnVmZmVyX3N0
YXRlDQogICAgKwl7DQogICAgKwlGSUxFICp5eV9pbnB1dF9maWxlOw0KICAgICsNCiAgICArCWNo
YXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLw0KICAgICsJY2hhciAqeXlfYnVmX3Bv
czsJCS8qIGN1cnJlbnQgcG9zaXRpb24gaW4gaW5wdXQgYnVmZmVyICovDQogICAgKw0KICAgICsJ
LyogU2l6ZSBvZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3Ig
RU9CDQogICAgKwkgKiBjaGFyYWN0ZXJzLg0KICAgICsJICovDQogICAgKwlpbnQgeXlfYnVmX3Np
emU7DQogICAgKw0KICAgICsJLyogTnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2No
X2J1Ziwgbm90IGluY2x1ZGluZyBFT0INCiAgICArCSAqIGNoYXJhY3RlcnMuDQogICAgKwkgKi8N
CiAgICArCWludCB5eV9uX2NoYXJzOw0KICAgICsNCiAgICArCS8qIFdoZXRoZXIgd2UgIm93biIg
dGhlIGJ1ZmZlciAtIGkuZS4sIHdlIGtub3cgd2UgY3JlYXRlZCBpdCwNCiAgICArCSAqIGFuZCBj
YW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvDQogICAg
KwkgKiBkZWxldGUgaXQuDQogICAgKwkgKi8NCiAgICArCWludCB5eV9pc19vdXJfYnVmZmVyOw0K
ICAgICsNCiAgICArCS8qIFdoZXRoZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNv
dXJjZTsgaWYgc28sIGFuZA0KICAgICsJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0
LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMoKQ0KICAgICsJICogaW5zdGVhZCBvZiBmcmVhZCgp
LCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1dCBhZnRlcg0KICAgICsJICogZWFj
aCBuZXdsaW5lLg0KICAgICsJICovDQogICAgKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7DQogICAg
Kw0KICAgICsJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5p
bmcgb2YgYSBsaW5lLg0KICAgICsJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBv
biB0aGUgbmV4dCBtYXRjaCwgb3RoZXJ3aXNlDQogICAgKwkgKiBub3QuDQogICAgKwkgKi8NCiAg
ICArCWludCB5eV9hdF9ib2w7DQogICAgKw0KICAgICsgICAgaW50IHl5X2JzX2xpbmVubzsgLyoq
PCBUaGUgbGluZSBjb3VudC4gKi8NCiAgICArICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhl
IGNvbHVtbiBjb3VudC4gKi8NCiAgICArDQogICAgKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxs
IHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUNCiAgICArCSAqIGVuZCBvZiBpdC4N
CiAgICArCSAqLw0KICAgICsJaW50IHl5X2ZpbGxfYnVmZmVyOw0KICAgICsNCiAgICArCWludCB5
eV9idWZmZXJfc3RhdHVzOw0KICAgICsNCiAgICArI2RlZmluZSBZWV9CVUZGRVJfTkVXIDANCiAg
ICArI2RlZmluZSBZWV9CVUZGRVJfTk9STUFMIDENCiAgICArCS8qIFdoZW4gYW4gRU9GJ3MgYmVl
biBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzDQogICAgKwkgKiB0
aGVuIHdlIG1hcmsgdGhlIGJ1ZmZlciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhh
dCB3ZQ0KICAgICsJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJj
ZSBhbnkgbW9yZS4gIFdlIG1pZ2h0DQogICAgKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9r
ZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YNCiAgICArCSAqIHBvc3NpYmxlIGJhY2tp
bmctdXAuDQogICAgKwkgKg0KICAgICsJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwg
d2UgY2hhbmdlIHRoZSBzdGF0dXMgdG8gIm5ldyINCiAgICArCSAqICh2aWEgeXlyZXN0YXJ0KCkp
LCBzbyB0aGF0IHRoZSB1c2VyIGNhbiBjb250aW51ZSBzY2FubmluZyBieQ0KICAgICsJICoganVz
dCBwb2ludGluZyB5eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuDQogICAgKwkgKi8NCiAgICArI2Rl
ZmluZSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgMg0KICAgICsNCiAgICArCX07DQogICAgKyNlbmRp
ZiAvKiAhWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURSAqLw0KICAgICsNCiAgICArLyogU3RhY2sg
b2YgaW5wdXQgYnVmZmVycy4gKi8NCiAgICArc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tf
dG9wID0gMDsgLyoqPCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovDQogICAgK3N0YXRpYyBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX21heCA9IDA7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovDQog
ICAgK3N0YXRpYyBZWV9CVUZGRVJfU1RBVEUgKiB5eV9idWZmZXJfc3RhY2sgPSBOVUxMOyAvKio8
IFN0YWNrIGFzIGFuIGFycmF5LiAqLw0KICAgICsNCiAgICArLyogV2UgcHJvdmlkZSBtYWNyb3Mg
Zm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4gdGhlDQogICAgKyAqIGZ1dHVy
ZSB3ZSB3YW50IHRvIHB1dCB0aGUgYnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbA0KICAg
ICsgKiAic2Nhbm5lciBzdGF0ZSIuDQogICAgKyAqDQogICAgKyAqIFJldHVybnMgdGhlIHRvcCBv
ZiB0aGUgc3RhY2ssIG9yIE5VTEwuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIFlZX0NVUlJFTlRf
QlVGRkVSICggKHl5X2J1ZmZlcl9zdGFjaykgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAg
ICAgID8gKHl5X2J1ZmZlcl9zdGFjaylbKHl5X2J1ZmZlcl9zdGFja190b3ApXSBcDQogICAgKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgOiBOVUxMKQ0KICAgICsNCiAgICArLyogU2FtZSBhcyBw
cmV2aW91cyBtYWNybywgYnV0IHVzZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0
YWNrIGlzIG5vdA0KICAgICsgKiBOVUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBp
bnRlcm5hbCB1c2Ugb25seS4NCiAgICArICovDQogICAgKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFICh5eV9idWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0NCiAgICAr
DQogICAgKy8qIHl5X2hvbGRfY2hhciBob2xkcyB0aGUgY2hhcmFjdGVyIGxvc3Qgd2hlbiB5eXRl
eHQgaXMgZm9ybWVkLiAqLw0KICAgICtzdGF0aWMgY2hhciB5eV9ob2xkX2NoYXI7DQogICAgK3N0
YXRpYyBpbnQgeXlfbl9jaGFyczsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5
eV9jaF9idWYgKi8NCiAgICAraW50IHl5bGVuZzsNCiAgICArDQogICAgKy8qIFBvaW50cyB0byBj
dXJyZW50IGNoYXJhY3RlciBpbiBidWZmZXIuICovDQogICAgK3N0YXRpYyBjaGFyICp5eV9jX2J1
Zl9wID0gTlVMTDsNCiAgICArc3RhdGljIGludCB5eV9pbml0ID0gMDsJCS8qIHdoZXRoZXIgd2Ug
bmVlZCB0byBpbml0aWFsaXplICovDQogICAgK3N0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBz
dGFydCBzdGF0ZSBudW1iZXIgKi8NCiAgICArDQogICAgKy8qIEZsYWcgd2hpY2ggaXMgdXNlZCB0
byBhbGxvdyB5eXdyYXAoKSdzIHRvIGRvIGJ1ZmZlciBzd2l0Y2hlcw0KICAgICsgKiBpbnN0ZWFk
IG9mIHNldHRpbmcgdXAgYSBmcmVzaCB5eWluLiAgQSBiaXQgb2YgYSBoYWNrIC4uLg0KICAgICsg
Ki8NCiAgICArc3RhdGljIGludCB5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7DQogICAgKw0K
ICAgICt2b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmlsZSAgKTsNCiAgICArdm9pZCB5eV9z
d2l0Y2hfdG9fYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsNCiAgICArWVlf
QlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7DQog
ICAgK3ZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7DQogICAgK3Zv
aWQgeXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAgKTsNCiAgICArdm9pZCB5eXB1
c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsNCiAgICArdm9p
ZCB5eXBvcF9idWZmZXJfc3RhdGUgKHZvaWQgKTsNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHl5
ZW5zdXJlX2J1ZmZlcl9zdGFjayAodm9pZCApOw0KICAgICtzdGF0aWMgdm9pZCB5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSAodm9pZCApOw0KICAgICtzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoWVlf
QlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAgKTsNCiAgICArDQogICAgKyNkZWZpbmUgWVlfRkxV
U0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApDQogICAgKw0KICAg
ICtZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNp
emUgICk7DQogICAgK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFy
ICp5eV9zdHIgICk7DQogICAgK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICh5eWNvbnN0
IGNoYXIgKmJ5dGVzLGludCBsZW4gICk7DQogICAgKw0KICAgICt2b2lkICp5eWFsbG9jICh5eV9z
aXplX3QgICk7DQogICAgK3ZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAgKTsNCiAg
ICArdm9pZCB5eWZyZWUgKHZvaWQgKiAgKTsNCiAgICArDQogICAgKyNkZWZpbmUgeXlfbmV3X2J1
ZmZlciB5eV9jcmVhdGVfYnVmZmVyDQogICAgKw0KICAgICsjZGVmaW5lIHl5X3NldF9pbnRlcmFj
dGl2ZShpc19pbnRlcmFjdGl2ZSkgXA0KICAgICsJeyBcDQogICAgKwlpZiAoICEgWVlfQ1VSUkVO
VF9CVUZGRVIgKXsgXA0KICAgICsgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXA0K
ICAgICsJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwNCiAgICArICAgICAgICAgICAg
eXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7IFwNCiAgICArCX0gXA0KICAgICsJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0
aXZlOyBcDQogICAgKwl9DQogICAgKw0KICAgICsjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBc
DQogICAgKwl7IFwNCiAgICArCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wNCiAgICArICAg
ICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7IFwNCiAgICArCQlZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUgPSAgICBcDQogICAgKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZ
WV9CVUZfU0laRSApOyBcDQogICAgKwl9IFwNCiAgICArCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfYXRfYm9sID0gYXRfYm9sOyBcDQogICAgKwl9DQogICAgKw0KICAgICsjZGVmaW5lIFlZ
X0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkNCiAgICArDQog
ICAgKy8qIEJlZ2luIHVzZXIgc2VjdDMgKi8NCiAgICArDQogICAgKyNkZWZpbmUgeXl3cmFwKCkg
KC8qQ09OU1RDT05EKi8xKQ0KICAgICsjZGVmaW5lIFlZX1NLSVBfWVlXUkFQDQogICAgKw0KICAg
ICt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgWVlfQ0hBUjsNCiAgICArDQogICAgK0ZJTEUgKnl5aW4g
PSBOVUxMLCAqeXlvdXQgPSBOVUxMOw0KICAgICsNCiAgICArdHlwZWRlZiBpbnQgeXlfc3RhdGVf
dHlwZTsNCiAgICArDQogICAgK2V4dGVybiBpbnQgeXlsaW5lbm87DQogICAgKw0KICAgICtpbnQg
eXlsaW5lbm8gPSAxOw0KICAgICsNCiAgICArZXh0ZXJuIGNoYXIgKnl5dGV4dDsNCiAgICArI2lm
ZGVmIHl5dGV4dF9wdHINCiAgICArI3VuZGVmIHl5dGV4dF9wdHINCiAgICArI2VuZGlmDQogICAg
KyNkZWZpbmUgeXl0ZXh0X3B0ciB5eXRleHQNCiAgICArDQogICAgK3N0YXRpYyB5eWNvbnN0IGZs
ZXhfaW50MTZfdCB5eV9ueHRbXVsyMV0gPQ0KICAgICsgICAgew0KICAgICsgICAgew0KICAgICsg
ICAgICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsDQogICAgKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAg
MCwgICAgMCwgICAgMCwgICAgMCwNCiAgICArICAgICAgICAwDQogICAgKyAgICB9LA0KICAgICsN
CiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE0LCAgIDE0
LCAgIDE3LCAgIDE0LCAgIDE0LCAgIDE0LA0KICAgICsgICAgICAgMTQsICAgMTQsICAgMTQsICAg
MTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsDQogICAgKyAgICAgICAxNA0K
ICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICAxNCwgICAx
NSwgICAxNiwgICAxNCwgICAxNCwgICAxNywgICAxNCwgICAxNCwgICAxNCwNCiAgICArICAgICAg
IDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0
LA0KICAgICsgICAgICAgMTQNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsg
ICAgICAgMTMsICAgMTgsICAgMTksICAgMjAsICAgMTgsICAgMTgsICAgMTgsICAgMjEsICAgMTgs
ICAgMTgsDQogICAgKw0KICAgICsgICAgICAgMTgsICAgMTgsICAgMjIsICAgMjMsICAgMTgsICAg
MjQsICAgMTgsICAgMjUsICAgMTgsICAgMTgsDQogICAgKyAgICAgICAxOA0KICAgICsgICAgfSwN
CiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICAxOCwgICAxOSwgICAyMCwgICAx
OCwgICAxOCwgICAxOCwgICAyMSwgICAxOCwgICAxOCwNCiAgICArICAgICAgIDE4LCAgIDE4LCAg
IDIyLCAgIDIzLCAgIDE4LCAgIDI0LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDE4LA0KICAgICsgICAg
ICAgMTgNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAg
MjYsICAgMjcsICAgMjgsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsDQogICAg
KyAgICAgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAy
NiwgICAyNiwNCiAgICArICAgICAgIDI2DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsN
CiAgICArICAgICAgIDEzLCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2
LCAgIDI2LCAgIDI2LA0KICAgICsgICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsDQogICAgKw0KICAgICsgICAgICAgMjYNCiAgICAr
ICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgMjksICAgMjksICAg
MzAsICAgMjksICAgMzEsICAgMjksICAgMzIsICAgMjksICAgMzEsDQogICAgKyAgICAgICAyOSwg
ICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAzMywNCiAg
ICArICAgICAgIDI5DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAg
IDEzLCAgIDI5LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMxLCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMx
LA0KICAgICsgICAgICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAg
MjksICAgMjksICAgMzMsDQogICAgKyAgICAgICAyOQ0KICAgICsgICAgfSwNCiAgICArDQogICAg
KyAgICB7DQogICAgKyAgICAgICAxMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAz
OSwgICA0MCwgICA0MSwgICAzOCwNCiAgICArICAgICAgIDQyLCAgIDQzLCAgIDM0LCAgIDQ0LCAg
IDQ0LCAgIDM0LCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LA0KICAgICsgICAgICAgNDkNCiAgICAr
DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDM0LCAg
IDM1LCAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDM4LA0KICAgICsgICAg
ICAgNDIsICAgNDMsICAgMzQsICAgNDQsICAgNDQsICAgMzQsICAgNDUsICAgNDYsICAgNDcsICAg
NDgsDQogICAgKyAgICAgICA0OQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAg
KyAgICAgICAxMywgICA1MCwgICA1MSwgICA1MiwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1
MCwgICA1MCwNCiAgICArICAgICAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAg
IDUwLCAgIDUwLCAgIDUwLCAgIDUwLA0KICAgICsgICAgICAgNTANCiAgICArICAgIH0sDQogICAg
Kw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNTAsICAgNTEsICAgNTIsICAgNTAsICAg
NTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsDQogICAgKyAgICAgICA1MCwgICA1MCwgICA1MCwg
ICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwNCiAgICArICAgICAgIDUw
DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgLTEzLCAgLTEzLCAg
LTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLA0KICAgICsNCiAg
ICArICAgICAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAg
LTEzLCAgLTEzLA0KICAgICsgICAgICAtMTMNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAg
ew0KICAgICsgICAgICAgMTMsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAt
MTQsICAtMTQsICAtMTQsDQogICAgKyAgICAgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwg
IC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwNCiAgICArICAgICAgLTE0DQogICAgKyAgICB9
LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTE1LCAgIDUzLCAgIDU0LCAg
LTE1LCAgLTE1LCAgIDU1LCAgLTE1LCAgLTE1LCAgLTE1LA0KICAgICsgICAgICAtMTUsICAtMTUs
ICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsDQogICAgKyAg
ICAgIC0xNQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywg
IC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwNCiAg
ICArICAgICAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAg
LTE2LCAgLTE2LA0KICAgICsNCiAgICArICAgICAgLTE2DQogICAgKyAgICB9LA0KICAgICsNCiAg
ICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAg
IDU2LCAgIDU2LCAgIDU2LCAgIDU2LA0KICAgICsgICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYs
ICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsDQogICAgKyAgICAgICA1Ng0KICAg
ICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC0xOCwgIC0xOCwg
IC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwNCiAgICArICAgICAgLTE4
LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LA0K
ICAgICsgICAgICAtMTgNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAg
ICAgMTMsICAtMTksICAgNTgsICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAt
MTksDQogICAgKyAgICAgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwg
IC0xOSwgIC0xOSwgIC0xOSwNCiAgICArICAgICAgLTE5DQogICAgKw0KICAgICsgICAgfSwNCiAg
ICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwg
IC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwNCiAgICArICAgICAgLTIwLCAgLTIwLCAgLTIw
LCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLA0KICAgICsgICAgICAt
MjANCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtMjEs
ICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAgNTksICAtMjEsICAtMjEsDQogICAgKyAg
ICAgIC0yMSwgIC0yMSwgIC0yMSwgICA1OSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwg
IC0yMSwNCiAgICArICAgICAgLTIxDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAg
ICArICAgICAgIDEzLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAg
LTIyLCAgLTIyLA0KICAgICsgICAgICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIs
ICAtMjIsICAgNjAsICAtMjIsICAtMjIsDQogICAgKyAgICAgIC0yMg0KICAgICsgICAgfSwNCiAg
ICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywg
IC0yMywgIC0yMywgICA1OSwgIC0yMywgIC0yMywNCiAgICArDQogICAgKyAgICAgIC0yMywgIC0y
MywgIC0yMywgICA2MSwgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywNCiAgICAr
ICAgICAgLTIzDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEz
LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LA0K
ICAgICsgICAgICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAgNjIs
ICAtMjQsICAtMjQsDQogICAgKyAgICAgIC0yNA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAg
ICB7DQogICAgKyAgICAgICAxMywgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwg
IC0yNSwgIC0yNSwgIC0yNSwNCiAgICArICAgICAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1
LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LA0KICAgICsgICAgICAtMjUNCiAgICArICAg
IH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNjMsICAgNjMsICAtMjYs
ICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsDQogICAgKyAgICAgICA2MywgICA2
MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywNCiAgICAr
DQogICAgKyAgICAgICA2Mw0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAg
ICAgICAxMywgIC0yNywgICA2NCwgICA2NSwgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywg
IC0yNywNCiAgICArICAgICAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3
LCAgLTI3LCAgLTI3LCAgLTI3LA0KICAgICsgICAgICAtMjcNCiAgICArICAgIH0sDQogICAgKw0K
ICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNjYsICAtMjgsICAtMjgsICAgNjYsICAgNjYs
ICAgNjYsICAgNjYsICAgNjYsICAgNjYsDQogICAgKyAgICAgICA2NiwgICA2NiwgICA2NiwgICA2
NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwNCiAgICArICAgICAgIDY2DQog
ICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDY3LCAgIDY3
LCAgIDY4LCAgIDY3LCAgLTI5LCAgIDY3LCAgLTI5LCAgIDY3LCAgLTI5LA0KICAgICsgICAgICAg
NjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAtMjks
DQogICAgKyAgICAgICA2Nw0KICAgICsNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0K
ICAgICsgICAgICAgMTMsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAs
ICAtMzAsICAtMzAsDQogICAgKyAgICAgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0z
MCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwNCiAgICArICAgICAgLTMwDQogICAgKyAgICB9LA0K
ICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMx
LCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLA0KICAgICsgICAgICAtMzEsICAtMzEsICAt
MzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsDQogICAgKyAgICAg
IC0zMQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA2
OSwgICA2OSwgIC0zMiwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwNCiAgICAr
ICAgICAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5
LCAgIDY5LA0KICAgICsgICAgICAgNjkNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0K
ICAgICsgICAgICAgMTMsICAgNzAsICAgNzAsICAgNzEsICAgNzAsICAgNzAsICAgNzAsICAgNzAs
ICAgNzAsICAgNzAsDQogICAgKw0KICAgICsgICAgICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAg
NzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsDQogICAgKyAgICAgICA3MA0KICAgICsg
ICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC0zNCwgIC0zNCwgIC0z
NCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwNCiAgICArICAgICAgLTM0LCAg
LTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LA0KICAg
ICsgICAgICAtMzQNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAg
MTMsICAtMzUsICAgNzIsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUs
DQogICAgKyAgICAgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0z
NSwgIC0zNSwgIC0zNSwNCiAgICArICAgICAgLTM1DQogICAgKyAgICB9LA0KICAgICsNCiAgICAr
ICAgIHsNCiAgICArICAgICAgIDEzLCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2
LCAgLTM2LCAgLTM2LCAgLTM2LA0KICAgICsgICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAt
MzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsDQogICAgKw0KICAgICsgICAgICAtMzYN
CiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtMzcsICAt
MzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsDQogICAgKyAgICAg
IC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgIC0zNywgICA3MywgIC0zNywgIC0z
NywNCiAgICArICAgICAgLTM3DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICAr
ICAgICAgIDEzLCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4
LCAgLTM4LA0KICAgICsgICAgICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAt
MzgsICAtMzgsICAtMzgsICAtMzgsDQogICAgKyAgICAgIC0zOA0KICAgICsgICAgfSwNCiAgICAr
DQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA3NCwgICA3NCwgIC0zOSwgICA3NCwgICA3
NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwNCiAgICArICAgICAgIDc0LCAgIDc0LCAgIDc0LCAg
IDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LA0KICAgICsgICAgICAgNzQN
CiAgICArDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAg
LTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgIDc1LCAgLTQwLCAgLTQwLA0KICAg
ICsgICAgICAtNDAsICAtNDAsICAtNDAsICAgNzUsICAgNzUsICAtNDAsICAtNDAsICAtNDAsICAt
NDAsICAtNDAsDQogICAgKyAgICAgIC00MA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7
DQogICAgKyAgICAgICAxMywgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00
MSwgICA3NiwgIC00MSwNCiAgICArICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAg
LTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLA0KICAgICsgICAgICAtNDENCiAgICArICAgIH0s
DQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtNDIsICAtNDIsICAtNDIsICAt
NDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsDQogICAgKyAgICAgIC00MiwgIC00Miwg
IC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwNCiAgICArICAg
ICAgLTQyDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAg
LTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLA0KICAg
ICsNCiAgICArICAgICAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAg
LTQzLCAgLTQzLCAgLTQzLA0KICAgICsgICAgICAtNDMNCiAgICArICAgIH0sDQogICAgKw0KICAg
ICsgICAgew0KICAgICsgICAgICAgMTMsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAt
NDQsICAgNzUsICAtNDQsICAtNDQsDQogICAgKyAgICAgIC00NCwgIC00NCwgIC00NCwgICA3Nywg
ICA3NywgIC00NCwgIC00NCwgIC00NCwgIC00NCwgIC00NCwNCiAgICArICAgICAgLTQ0DQogICAg
KyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTQ1LCAgLTQ1LCAg
LTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LA0KICAgICsgICAgICAtNDUs
ICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAgNzgsICAtNDUsICAtNDUsDQog
ICAgKyAgICAgIC00NQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAg
ICAxMywgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00
NiwNCiAgICArICAgICAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAg
LTQ2LCAgLTQ2LCAgLTQ2LA0KICAgICsNCiAgICArICAgICAgLTQ2DQogICAgKyAgICB9LA0KICAg
ICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAg
LTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LA0KICAgICsgICAgICAtNDcsICAtNDcsICAtNDcs
ICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAgNzksICAtNDcsICAtNDcsDQogICAgKyAgICAgIC00
Nw0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC00OCwg
IC00OCwgICA4MCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwNCiAgICArICAg
ICAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAg
LTQ4LA0KICAgICsgICAgICAtNDgNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAg
ICsgICAgICAgMTMsICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAt
NDksICAtNDksDQogICAgKyAgICAgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwg
IC00OSwgIC00OSwgIC00OSwgIC00OSwNCiAgICArICAgICAgIDgxDQogICAgKw0KICAgICsgICAg
fSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA4MiwgICA4MywgIC01MCwg
ICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwNCiAgICArICAgICAgIDgyLCAgIDgy
LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLA0KICAgICsg
ICAgICAgODINCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMs
ICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsDQog
ICAgKyAgICAgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwg
IC01MSwgIC01MSwNCiAgICArICAgICAgLTUxDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAg
IHsNCiAgICArICAgICAgIDEzLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAg
LTUyLCAgLTUyLCAgLTUyLA0KICAgICsgICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIs
ICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsDQogICAgKyAgICAgIC01Mg0KICAgICsgICAg
fSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC01MywgICA1MywgICA1NCwg
IC01MywgIC01MywgICA1NSwgIC01MywgIC01MywgIC01MywNCiAgICArDQogICAgKyAgICAgIC01
MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywN
CiAgICArICAgICAgLTUzDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAg
ICAgIDEzLCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAg
LTU0LA0KICAgICsgICAgICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQs
ICAtNTQsICAtNTQsICAtNTQsDQogICAgKyAgICAgIC01NA0KICAgICsgICAgfSwNCiAgICArDQog
ICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA1NiwgICA1NiwgICA1NywgICA1NiwgICA1Niwg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwNCiAgICArICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2
LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LA0KICAgICsgICAgICAgNTYNCiAg
ICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNTYsICAgNTYs
ICAgNTcsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsDQogICAgKyAgICAgICA1
NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwN
CiAgICArDQogICAgKyAgICAgICA1Ng0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQog
ICAgKyAgICAgICAxMywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01Nywg
IC01NywgIC01NywNCiAgICArICAgICAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3
LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LA0KICAgICsgICAgICAtNTcNCiAgICArICAgIH0sDQog
ICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtNTgsICAgNTgsICAtNTgsICAtNTgs
ICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsDQogICAgKyAgICAgIC01OCwgIC01OCwgIC01
OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwNCiAgICArICAgICAg
LTU4DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTU5
LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAgIDU5LCAgLTU5LCAgLTU5LA0KICAgICsg
ICAgICAtNTksICAtNTksICAtNTksICAgNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTks
ICAtNTksDQogICAgKyAgICAgIC01OQ0KICAgICsNCiAgICArICAgIH0sDQogICAgKw0KICAgICsg
ICAgew0KICAgICsgICAgICAgMTMsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAs
ICAtNjAsICAtNjAsICAtNjAsDQogICAgKyAgICAgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02
MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwNCiAgICArICAgICAgLTYwDQogICAgKyAg
ICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTYxLCAgLTYxLCAgLTYx
LCAgLTYxLCAgLTYxLCAgLTYxLCAgIDU5LCAgLTYxLCAgLTYxLA0KICAgICsgICAgICAtNjEsICAt
NjEsICAtNjEsICAgNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsDQogICAg
KyAgICAgIC02MQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAx
MywgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwN
CiAgICArICAgICAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYy
LCAgLTYyLCAgLTYyLA0KICAgICsgICAgICAtNjINCiAgICArICAgIH0sDQogICAgKw0KICAgICsg
ICAgew0KICAgICsgICAgICAgMTMsICAgNjMsICAgNjMsICAtNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsDQogICAgKw0KICAgICsgICAgICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsDQogICAgKyAgICAgICA2Mw0K
ICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC02NCwgICA2
NCwgICA2NSwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwNCiAgICArICAgICAg
LTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0
LA0KICAgICsgICAgICAtNjQNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsg
ICAgICAgMTMsICAgNjYsICAtNjUsICAtNjUsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYs
ICAgNjYsDQogICAgKyAgICAgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2
NiwgICA2NiwgICA2NiwgICA2NiwNCiAgICArICAgICAgIDY2DQogICAgKyAgICB9LA0KICAgICsN
CiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2
LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LA0KICAgICsgICAgICAtNjYsICAtNjYsICAtNjYsICAt
NjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsDQogICAgKw0KICAgICsgICAg
ICAtNjYNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAg
NjcsICAgNjcsICAgNjgsICAgNjcsICAtNjcsICAgNjcsICAtNjcsICAgNjcsICAtNjcsDQogICAg
KyAgICAgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2
NywgIC02NywNCiAgICArICAgICAgIDY3DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsN
CiAgICArICAgICAgIDEzLCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4
LCAgLTY4LCAgLTY4LA0KICAgICsgICAgICAtNjgsICAtNjgsICAtNjgsICAtNjgsICAtNjgsICAt
NjgsICAtNjgsICAtNjgsICAtNjgsICAtNjgsDQogICAgKyAgICAgIC02OA0KICAgICsgICAgfSwN
CiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA2OSwgICA2OSwgIC02OSwgICA2
OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwNCiAgICArICAgICAgIDY5LCAgIDY5LCAg
IDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LA0KICAgICsgICAg
ICAgNjkNCiAgICArDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAg
IDEzLCAgLTcwLCAgLTcwLCAgIDcxLCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcw
LA0KICAgICsgICAgICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAt
NzAsICAtNzAsICAtNzAsDQogICAgKyAgICAgIC03MA0KICAgICsgICAgfSwNCiAgICArDQogICAg
KyAgICB7DQogICAgKyAgICAgICAxMywgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03
MSwgIC03MSwgIC03MSwgIC03MSwNCiAgICArICAgICAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAg
LTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLA0KICAgICsgICAgICAtNzENCiAgICAr
ICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtNzIsICAgNzIsICAt
NzIsICAtNzIsICAtNzIsICAtNzIsICAtNzIsICAtNzIsICAtNzIsDQogICAgKyAgICAgIC03Miwg
IC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwNCiAg
ICArICAgICAgLTcyDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAg
IDEzLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTcz
LA0KICAgICsNCiAgICArICAgICAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAg
LTczLCAgLTczLCAgLTczLCAgLTczLA0KICAgICsgICAgICAtNzMNCiAgICArICAgIH0sDQogICAg
Kw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNzQsICAgNzQsICAtNzQsICAgNzQsICAg
NzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsDQogICAgKyAgICAgICA3NCwgICA3NCwgICA3NCwg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwNCiAgICArICAgICAgIDc0
DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTc1LCAg
LTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgLTc1LCAgLTc1LA0KICAgICsgICAg
ICAtNzUsICAtNzUsICAtNzUsICAgNzUsICAgNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAt
NzUsDQogICAgKyAgICAgIC03NQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAg
KyAgICAgICAxMywgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03
NiwgIC03NiwNCiAgICArICAgICAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAg
LTc2LCAgLTc2LCAgLTc2LCAgLTc2LA0KICAgICsNCiAgICArICAgICAgLTc2DQogICAgKyAgICB9
LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTc3LCAgLTc3LCAgLTc3LCAg
LTc3LCAgLTc3LCAgLTc3LCAgIDc1LCAgLTc3LCAgLTc3LA0KICAgICsgICAgICAtNzcsICAtNzcs
ICAtNzcsICAgNzcsICAgNzcsICAtNzcsICAtNzcsICAtNzcsICAtNzcsICAtNzcsDQogICAgKyAg
ICAgIC03Nw0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywg
IC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwNCiAg
ICArICAgICAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAg
LTc4LCAgLTc4LA0KICAgICsgICAgICAtNzgNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAg
ew0KICAgICsgICAgICAgMTMsICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAt
NzksICAtNzksICAtNzksDQogICAgKyAgICAgIC03OSwgIC03OSwgIC03OSwgIC03OSwgIC03OSwg
IC03OSwgIC03OSwgIC03OSwgIC03OSwgIC03OSwNCiAgICArICAgICAgLTc5DQogICAgKw0KICAg
ICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC04MCwgIC04MCwg
IC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwNCiAgICArICAgICAgLTgw
LCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLA0K
ICAgICsgICAgICAtODANCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAg
ICAgMTMsICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsICAt
ODEsDQogICAgKyAgICAgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwg
IC04MSwgIC04MSwgIC04MSwNCiAgICArICAgICAgLTgxDQogICAgKyAgICB9LA0KICAgICsNCiAg
ICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDgyLCAgIDgzLCAgLTgyLCAgIDgyLCAgIDgyLCAg
IDgyLCAgIDgyLCAgIDgyLCAgIDgyLA0KICAgICsgICAgICAgODIsICAgODIsICAgODIsICAgODIs
ICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsDQogICAgKyAgICAgICA4Mg0KICAg
ICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA4MywgICA4Mywg
IC04MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywNCiAgICArDQogICAgKyAg
ICAgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4Mywg
ICA4MywNCiAgICArICAgICAgIDgzDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIH0gOw0K
ICAgICsNCiAgICArc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2
b2lkICk7DQogICAgK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0
YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgKTsNCiAgICArc3RhdGljIGludCB5eV9nZXRfbmV4dF9i
dWZmZXIgKHZvaWQgKTsNCiAgICArc3RhdGljIHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJv
ciAoeXljb25zdCBjaGFyKiBtc2cgICk7DQogICAgKw0KICAgICsvKiBEb25lIGFmdGVyIHRoZSBj
dXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQ0KICAgICsgKiBj
b3JyZXNwb25kaW5nIGFjdGlvbiAtIHNldHMgdXAgeXl0ZXh0Lg0KICAgICsgKi8NCiAgICArI2Rl
ZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwNCiAgICArCSh5eXRleHRfcHRyKSA9IHl5X2JwOyBc
DQogICAgKwl5eWxlbmcgPSAoaW50KSAoeXlfY3AgLSB5eV9icCk7IFwNCiAgICArCSh5eV9ob2xk
X2NoYXIpID0gKnl5X2NwOyBcDQogICAgKwkqeXlfY3AgPSAnXDAnOyBcDQogICAgKwkoeXlfY19i
dWZfcCkgPSB5eV9jcDsNCiAgICArDQogICAgKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDQ3DQogICAg
KyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUiA0OA0KICAgICsvKiBUaGlzIHN0cnVjdCBpcyBub3Qg
dXNlZCBpbiB0aGlzIHNjYW5uZXIsDQogICAgKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNz
YXJ5LiAqLw0KICAgICtzdHJ1Y3QgeXlfdHJhbnNfaW5mbw0KICAgICsJew0KICAgICsJZmxleF9p
bnQzMl90IHl5X3ZlcmlmeTsNCiAgICArCWZsZXhfaW50MzJfdCB5eV9ueHQ7DQogICAgKwl9Ow0K
ICAgICtzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9DQogICAgKyAg
ICB7ICAgMCwNCiAgICArICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLA0KICAgICsgICAgICAgIDAsICAgIDAsICAgNDgsICAgIDUs
ICAgIDQsICAgIDIsICAgIDMsICAgMTIsICAgMTEsICAgMTMsDQogICAgKyAgICAgICAgNywgICAx
MiwgICAgNiwgICAxMiwgICAgOCwgICA0NiwgICA0MywgICA0NSwgICAzOCwgICA0MiwNCiAgICAr
ICAgICAgIDQxLCAgIDM2LCAgIDQwLCAgIDM1LCAgIDM0LCAgIDI5LCAgIDIxLCAgIDI4LCAgIDMy
LCAgIDMxLA0KICAgICsgICAgICAgMzUsICAgMTksICAgMjAsICAgMzAsICAgMjYsICAgMjIsICAg
MjcsICAgMzUsICAgMzUsICAgMTQsDQogICAgKyAgICAgICAxNiwgICAxNSwgICAgNCwgICAgMiwg
ICAgMywgICAgMywgICAgMSwgICAxMSwgICAgNywgICAxMCwNCiAgICArICAgICAgICA2LCAgICA5
LCAgIDQ2LCAgIDQzLCAgIDQ1LCAgIDQ0LCAgIDM4LCAgIDM3LCAgIDM2LCAgIDQwLA0KICAgICsg
ICAgICAgMzksICAgMzQsICAgMjMsICAgMzIsICAgMzEsICAgMTcsICAgMzAsICAgMjQsICAgMjUs
ICAgMzMsDQogICAgKyAgICAgICAxOCwgICAxNCwgICAxNA0KICAgICsgICAgfSA7DQogICAgKw0K
ICAgICtzdGF0aWMgeXljb25zdCBZWV9DSEFSIHl5X2VjWzI1Nl0gPQ0KICAgICsgICAgeyAgIDAs
DQogICAgKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMiwgICAgMywNCiAgICArICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgICsgICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgKyAgICAgICAg
MSwgICAgMiwgICAgNCwgICAgNSwgICAgNiwgICAgNywgICAgMSwgICAgOCwgICAgOSwgICAxMCwN
CiAgICArICAgICAgIDExLCAgICAxLCAgIDEyLCAgICAxLCAgIDEzLCAgIDE0LCAgIDE0LCAgIDEz
LCAgIDEzLCAgIDEzLA0KICAgICsgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAg
MTMsICAgMTMsICAgMTUsICAgIDEsICAgMTYsDQogICAgKyAgICAgICAxNywgICAxOCwgICAgMSwg
ICAgMSwgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywNCiAgICArICAgICAgIDEz
LCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLA0K
ICAgICsgICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsDQogICAgKyAgICAgICAgMSwgICAxOSwgICAgMSwgICAgMSwgICAxMywgICAg
MSwgICAxMywgICAxMywgICAxMywgICAxMywNCiAgICArDQogICAgKyAgICAgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywNCiAgICArICAg
ICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAg
IDEzLA0KICAgICsgICAgICAgMTMsICAgMTMsICAgIDEsICAgMjAsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsDQogICAgKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICArICAgICAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgICsgICAg
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsDQogICAgKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwNCiAgICArICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgICsgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwNCiAgICArDQogICAgKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICArICAgICAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgICsgICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAg
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwNCiAgICArICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgICsgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDENCiAgICArICAgIH0gOw0KICAgICsNCiAgICArLyogVGFibGUgb2YgYm9vbGVhbnMsIHRy
dWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovDQogICAgK3N0YXRpYyB5eWNvbnN0IGZsZXhf
aW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbNDhdID0NCiAgICArICAgIHsgICAwLA0KICAg
ICsxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAw
LCANCiAgICArICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAs
IDAsIDAsIDEsIDAsIDEsIA0KICAgICsgICAgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgICAgIH07
DQogICAgKw0KICAgICtleHRlcm4gaW50IHl5X2ZsZXhfZGVidWc7DQogICAgK2ludCB5eV9mbGV4
X2RlYnVnID0gMDsNCiAgICArDQogICAgKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5p
dGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoDQogICAgKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGlj
aCBmbGV4IG1pc3NlZC4NCiAgICArICovDQogICAgKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2Vk
X2J1dF9ub3RfZGV0ZWN0ZWQNCiAgICArI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRf
bm90X2RldGVjdGVkDQogICAgKyNkZWZpbmUgWVlfTU9SRV9BREogMA0KICAgICsjZGVmaW5lIFlZ
X1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQNCiAgICArY2hhciAqeXl0ZXh0Ow0KICAgICsNCiAgICAr
LyoNCiAgICArICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4
LW02OGsub3JnPg0KICAgICsgKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
UEwgdjIuMC4NCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8YXNzZXJ0Lmg+DQogICAg
KyNpbmNsdWRlIDxsaW1pdHMuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyNpbmNs
dWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSA8
dW5pc3RkLmg+DQogICAgKw0KICAgICsjaW5jbHVkZSAibGtjLmgiDQogICAgKw0KICAgICsjZGVm
aW5lIFNUQVJUX1NUUlNJWkUJMTYNCiAgICArDQogICAgK3N0YXRpYyBzdHJ1Y3Qgew0KICAgICsJ
c3RydWN0IGZpbGUgKmZpbGU7DQogICAgKwlpbnQgbGluZW5vOw0KICAgICt9IGN1cnJlbnRfcG9z
Ow0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKnRleHQ7DQogICAgK3N0YXRpYyBpbnQgdGV4dF9z
aXplLCB0ZXh0X2FzaXplOw0KICAgICsNCiAgICArc3RydWN0IGJ1ZmZlciB7DQogICAgKwlzdHJ1
Y3QgYnVmZmVyICpwYXJlbnQ7DQogICAgKwlZWV9CVUZGRVJfU1RBVEUgc3RhdGU7DQogICAgK307
DQogICAgKw0KICAgICtzdHJ1Y3QgYnVmZmVyICpjdXJyZW50X2J1ZjsNCiAgICArDQogICAgK3N0
YXRpYyBpbnQgbGFzdF90cywgZmlyc3RfdHM7DQogICAgKw0KICAgICtzdGF0aWMgY2hhciAqZXhw
YW5kX3Rva2VuKGNvbnN0IGNoYXIgKmluLCBzaXplX3Qgbik7DQogICAgK3N0YXRpYyB2b2lkIGFw
cGVuZF9leHBhbmRlZF9zdHJpbmcoY29uc3QgY2hhciAqaW4pOw0KICAgICtzdGF0aWMgdm9pZCB6
Y29uZl9lbmRoZWxwKHZvaWQpOw0KICAgICtzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQp
Ow0KICAgICsNCiAgICArc3RhdGljIHZvaWQgbmV3X3N0cmluZyh2b2lkKQ0KICAgICt7DQogICAg
Kwl0ZXh0ID0geG1hbGxvYyhTVEFSVF9TVFJTSVpFKTsNCiAgICArCXRleHRfYXNpemUgPSBTVEFS
VF9TVFJTSVpFOw0KICAgICsJdGV4dF9zaXplID0gMDsNCiAgICArCSp0ZXh0ID0gMDsNCiAgICAr
fQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIs
IGludCBzaXplKQ0KICAgICt7DQogICAgKwlpbnQgbmV3X3NpemUgPSB0ZXh0X3NpemUgKyBzaXpl
ICsgMTsNCiAgICArCWlmIChuZXdfc2l6ZSA+IHRleHRfYXNpemUpIHsNCiAgICArCQluZXdfc2l6
ZSArPSBTVEFSVF9TVFJTSVpFIC0gMTsNCiAgICArCQluZXdfc2l6ZSAmPSAtU1RBUlRfU1RSU0la
RTsNCiAgICArCQl0ZXh0ID0geHJlYWxsb2ModGV4dCwgbmV3X3NpemUpOw0KICAgICsJCXRleHRf
YXNpemUgPSBuZXdfc2l6ZTsNCiAgICArCX0NCiAgICArCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXpl
LCBzdHIsIHNpemUpOw0KICAgICsJdGV4dF9zaXplICs9IHNpemU7DQogICAgKwl0ZXh0W3RleHRf
c2l6ZV0gPSAwOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBhbGxvY19zdHJpbmco
Y29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkNCiAgICArew0KICAgICsJdGV4dCA9IHhtYWxsb2Mo
c2l6ZSArIDEpOw0KICAgICsJbWVtY3B5KHRleHQsIHN0ciwgc2l6ZSk7DQogICAgKwl0ZXh0W3Np
emVdID0gMDsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgd2Fybl9pZ25vcmVkX2No
YXJhY3RlcihjaGFyIGNocikNCiAgICArew0KICAgICsJZnByaW50ZihzdGRlcnIsDQogICAgKwkg
ICAgICAgICIlczolZDp3YXJuaW5nOiBpZ25vcmluZyB1bnN1cHBvcnRlZCBjaGFyYWN0ZXIgJyVj
J1xuIiwNCiAgICArCSAgICAgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgY2hy
KTsNCiAgICArfQ0KICAgICsNCiAgICArI2RlZmluZSBJTklUSUFMIDANCiAgICArI2RlZmluZSBD
T01NQU5EIDENCiAgICArI2RlZmluZSBIRUxQIDINCiAgICArI2RlZmluZSBTVFJJTkcgMw0KICAg
ICsjZGVmaW5lIFBBUkFNIDQNCiAgICArI2RlZmluZSBBU1NJR05fVkFMIDUNCiAgICArDQogICAg
KyNpZm5kZWYgWVlfTk9fVU5JU1REX0gNCiAgICArLyogU3BlY2lhbCBjYXNlIGZvciAidW5pc3Rk
LmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBpdCB3YXkNCiAgICArICogZG93
biBoZXJlIGJlY2F1c2Ugd2Ugd2FudCB0aGUgdXNlcidzIHNlY3Rpb24gMSB0byBoYXZlIGJlZW4g
c2Nhbm5lZCBmaXJzdC4NCiAgICArICogVGhlIHVzZXIgaGFzIGEgY2hhbmNlIHRvIG92ZXJyaWRl
IGl0IHdpdGggYW4gb3B0aW9uLg0KICAgICsgKi8NCiAgICArI2luY2x1ZGUgPHVuaXN0ZC5oPg0K
ICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZm5kZWYgWVlfRVhUUkFfVFlQRQ0KICAgICsjZGVm
aW5lIFlZX0VYVFJBX1RZUEUgdm9pZCAqDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArc3RhdGlj
IGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQgKTsNCiAgICArDQogICAgKy8qIEFjY2Vzc29yIG1l
dGhvZHMgdG8gZ2xvYmFscy4NCiAgICArICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24t
cmVlbnRyYW50IHNjYW5uZXJzIGZvciBjb252ZW5pZW5jZS4gKi8NCiAgICArDQogICAgK2ludCB5
eWxleF9kZXN0cm95ICh2b2lkICk7DQogICAgKw0KICAgICtpbnQgeXlnZXRfZGVidWcgKHZvaWQg
KTsNCiAgICArDQogICAgK3ZvaWQgeXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOw0KICAg
ICsNCiAgICArWVlfRVhUUkFfVFlQRSB5eWdldF9leHRyYSAodm9pZCApOw0KICAgICsNCiAgICAr
dm9pZCB5eXNldF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgICk7DQogICAgKw0K
ICAgICtGSUxFICp5eWdldF9pbiAodm9pZCApOw0KICAgICsNCiAgICArdm9pZCB5eXNldF9pbiAg
KEZJTEUgKiBfaW5fc3RyICApOw0KICAgICsNCiAgICArRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7
DQogICAgKw0KICAgICt2b2lkIHl5c2V0X291dCAgKEZJTEUgKiBfb3V0X3N0ciAgKTsNCiAgICAr
DQogICAgKwkJCWludCB5eWdldF9sZW5nICh2b2lkICk7DQogICAgKw0KICAgICtjaGFyICp5eWdl
dF90ZXh0ICh2b2lkICk7DQogICAgKw0KICAgICtpbnQgeXlnZXRfbGluZW5vICh2b2lkICk7DQog
ICAgKw0KICAgICt2b2lkIHl5c2V0X2xpbmVubyAoaW50IF9saW5lX251bWJlciAgKTsNCiAgICAr
DQogICAgKy8qIE1hY3JvcyBhZnRlciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBi
eSB1c2VyIGRlZmluaXRpb25zIGluDQogICAgKyAqIHNlY3Rpb24gMS4NCiAgICArICovDQogICAg
Kw0KICAgICsjaWZuZGVmIFlZX1NLSVBfWVlXUkFQDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0K
ICAgICtleHRlcm4gIkMiIGludCB5eXdyYXAgKHZvaWQgKTsNCiAgICArI2Vsc2UNCiAgICArZXh0
ZXJuIGludCB5eXdyYXAgKHZvaWQgKTsNCiAgICArI2VuZGlmDQogICAgKyNlbmRpZg0KICAgICsN
CiAgICArI2lmbmRlZiBZWV9OT19VTlBVVA0KICAgICsgICAgDQogICAgKyAgICBzdGF0aWMgdm9p
ZCB5eXVucHV0IChpbnQgYyxjaGFyICpidWZfcHRyICApOw0KICAgICsgICAgDQogICAgKyNlbmRp
Zg0KICAgICsNCiAgICArI2lmbmRlZiB5eXRleHRfcHRyDQogICAgK3N0YXRpYyB2b2lkIHl5X2Zs
ZXhfc3RybmNweSAoY2hhciAqLHl5Y29uc3QgY2hhciAqLGludCApOw0KICAgICsjZW5kaWYNCiAg
ICArDQogICAgKyNpZmRlZiBZWV9ORUVEX1NUUkxFTg0KICAgICtzdGF0aWMgaW50IHl5X2ZsZXhf
c3RybGVuICh5eWNvbnN0IGNoYXIgKiApOw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZm5k
ZWYgWVlfTk9fSU5QVVQNCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KICAgICtzdGF0
aWMgaW50IHl5aW5wdXQgKHZvaWQgKTsNCiAgICArI2Vsc2UNCiAgICArc3RhdGljIGludCBpbnB1
dCAodm9pZCApOw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNlbmRpZg0KICAgICsNCiAgICAr
LyogQW1vdW50IG9mIHN0dWZmIHRvIHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLw0KICAgICsj
aWZuZGVmIFlZX1JFQURfQlVGX1NJWkUNCiAgICArI2lmZGVmIF9faWE2NF9fDQogICAgKy8qIE9u
IElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsgKi8NCiAgICArI2RlZmluZSBZ
WV9SRUFEX0JVRl9TSVpFIDE2Mzg0DQogICAgKyNlbHNlDQogICAgKyNkZWZpbmUgWVlfUkVBRF9C
VUZfU0laRSA4MTkyDQogICAgKyNlbmRpZiAvKiBfX2lhNjRfXyAqLw0KICAgICsjZW5kaWYNCiAg
ICArDQogICAgKy8qIENvcHkgd2hhdGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBz
dGFuZGFyZCBvdXRwdXQuICovDQogICAgKyNpZm5kZWYgRUNITw0KICAgICsvKiBUaGlzIHVzZWQg
dG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwn
cywNCiAgICArICogd2Ugbm93IHVzZSBmd3JpdGUoKS4NCiAgICArICovDQogICAgKyNkZWZpbmUg
RUNITyBkbyB7IGlmIChmd3JpdGUoIHl5dGV4dCwgKHNpemVfdCkgeXlsZW5nLCAxLCB5eW91dCAp
KSB7fSB9IHdoaWxlICgwKQ0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIEdldHMgaW5wdXQg
YW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3Ig
WVlfTlVMTCwNCiAgICArICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuDQogICAgKyAqLw0KICAg
ICsjaWZuZGVmIFlZX0lOUFVUDQogICAgKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhf
c2l6ZSkgXA0KICAgICsJZXJybm89MDsgXA0KICAgICsJd2hpbGUgKCAocmVzdWx0ID0gKGludCkg
cmVhZCggZmlsZW5vKHl5aW4pLCBidWYsIG1heF9zaXplICkpIDwgMCApIFwNCiAgICArCXsgXA0K
ICAgICsJCWlmKCBlcnJubyAhPSBFSU5UUikgXA0KICAgICsJCXsgXA0KICAgICsJCQlZWV9GQVRB
TF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBmYWlsZWQiICk7IFwNCiAgICArCQkJYnJl
YWs7IFwNCiAgICArCQl9IFwNCiAgICArCQllcnJubz0wOyBcDQogICAgKwkJY2xlYXJlcnIoeXlp
bik7IFwNCiAgICArCX1cDQogICAgK1wNCiAgICArDQogICAgKyNlbmRpZg0KICAgICsNCiAgICAr
LyogTm8gc2VtaS1jb2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUg
Inl5dGVybWluYXRlKCk7IiAtDQogICAgKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFm
dGVyIHRoZSAicmV0dXJuIiBiZWNhdXNlIHRoYXQgd2lsbCBjYXVzZQ0KICAgICsgKiBzb21lIGNv
bXBpbGVycyB0byBjb21wbGFpbiBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLg0KICAgICsg
Ki8NCiAgICArI2lmbmRlZiB5eXRlcm1pbmF0ZQ0KICAgICsjZGVmaW5lIHl5dGVybWluYXRlKCkg
cmV0dXJuIFlZX05VTEwNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiBOdW1iZXIgb2YgZW50
cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovDQogICAgKyNpZm5k
ZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUg0KICAgICsjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1Ig
MjUNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8N
CiAgICArI2lmbmRlZiBZWV9GQVRBTF9FUlJPUg0KICAgICsjZGVmaW5lIFlZX0ZBVEFMX0VSUk9S
KG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyApDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyog
ZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8NCiAg
ICArDQogICAgKy8qIERlZmF1bHQgZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBh
IGRlZmluZSBzbyB0aGUgdXNlciBjYW4NCiAgICArICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLg0K
ICAgICsgKi8NCiAgICArI2lmbmRlZiBZWV9ERUNMDQogICAgKyNkZWZpbmUgWVlfREVDTF9JU19P
VVJTIDENCiAgICArDQogICAgK2V4dGVybiBpbnQgeXlsZXggKHZvaWQpOw0KICAgICsNCiAgICAr
I2RlZmluZSBZWV9ERUNMIGludCB5eWxleCAodm9pZCkNCiAgICArI2VuZGlmIC8qICFZWV9ERUNM
ICovDQogICAgKw0KICAgICsvKiBDb2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFj
aCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZw0KICAgICsgKiBoYXZlIGJlZW4gc2V0IHVw
Lg0KICAgICsgKi8NCiAgICArI2lmbmRlZiBZWV9VU0VSX0FDVElPTg0KICAgICsjZGVmaW5lIFlZ
X1VTRVJfQUNUSU9ODQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogQ29kZSBleGVjdXRlZCBh
dCB0aGUgZW5kIG9mIGVhY2ggcnVsZS4gKi8NCiAgICArI2lmbmRlZiBZWV9CUkVBSw0KICAgICsj
ZGVmaW5lIFlZX0JSRUFLIC8qTElOVEVEKi9icmVhazsNCiAgICArI2VuZGlmDQogICAgKw0KICAg
ICsjZGVmaW5lIFlZX1JVTEVfU0VUVVAgXA0KICAgICsJWVlfVVNFUl9BQ1RJT04NCiAgICArDQog
ICAgKy8qKiBUaGUgbWFpbiBzY2FubmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3Jr
Lg0KICAgICsgKi8NCiAgICArWVlfREVDTA0KICAgICt7DQogICAgKwl5eV9zdGF0ZV90eXBlIHl5
X2N1cnJlbnRfc3RhdGU7DQogICAgKwljaGFyICp5eV9jcCwgKnl5X2JwOw0KICAgICsJaW50IHl5
X2FjdDsNCiAgICArICAgIA0KICAgICsJaWYgKCAhKHl5X2luaXQpICkNCiAgICArCQl7DQogICAg
KwkJKHl5X2luaXQpID0gMTsNCiAgICArDQogICAgKyNpZmRlZiBZWV9VU0VSX0lOSVQNCiAgICAr
CQlZWV9VU0VSX0lOSVQ7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArCQlpZiAoICEgKHl5X3N0
YXJ0KSApDQogICAgKwkJCSh5eV9zdGFydCkgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLw0K
ICAgICsNCiAgICArCQlpZiAoICEgeXlpbiApDQogICAgKwkJCXl5aW4gPSBzdGRpbjsNCiAgICAr
DQogICAgKwkJaWYgKCAhIHl5b3V0ICkNCiAgICArCQkJeXlvdXQgPSBzdGRvdXQ7DQogICAgKw0K
ICAgICsJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsNCiAgICArCQkJeXllbnN1cmVfYnVm
ZmVyX3N0YWNrICgpOw0KICAgICsJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQ0KICAgICsJ
CQkJeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICk7DQogICAgKwkJfQ0KICAgICsN
CiAgICArCQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsNCiAgICArCQl9DQogICAgKw0KICAgICsJ
ew0KICAgICsNCiAgICArCWludCBzdHIgPSAwOw0KICAgICsJaW50IHRzLCBpOw0KICAgICsNCiAg
ICArCXdoaWxlICggLypDT05TVENPTkQqLzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUg
aXMgcmVhY2hlZCAqLw0KICAgICsJCXsNCiAgICArCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsNCiAg
ICArDQogICAgKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovDQogICAgKwkJKnl5X2NwID0gKHl5
X2hvbGRfY2hhcik7DQogICAgKw0KICAgICsJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRp
b24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZg0KICAgICsJCSAqIHRoZSBjdXJyZW50IHJ1
bi4NCiAgICArCQkgKi8NCiAgICArCQl5eV9icCA9IHl5X2NwOw0KICAgICsNCiAgICArCQl5eV9j
dXJyZW50X3N0YXRlID0gKHl5X3N0YXJ0KTsNCiAgICAreXlfbWF0Y2g6DQogICAgKwkJd2hpbGUg
KCAoeXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9jdXJyZW50X3N0YXRlXVsgeXlfZWNbWVlf
U0NfVE9fVUkoKnl5X2NwKV0gIF0pID4gMCApDQogICAgKwkJCSsreXlfY3A7DQogICAgKw0KICAg
ICsJCXl5X2N1cnJlbnRfc3RhdGUgPSAteXlfY3VycmVudF9zdGF0ZTsNCiAgICArDQogICAgK3l5
X2ZpbmRfYWN0aW9uOg0KICAgICsJCXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRl
XTsNCiAgICArDQogICAgKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsNCiAgICArDQogICAgKwkJaWYg
KCB5eV9hY3QgIT0gWVlfRU5EX09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlf
YWN0XSApDQogICAgKwkJCXsNCiAgICArCQkJaW50IHl5bDsNCiAgICArCQkJZm9yICggeXlsID0g
MDsgeXlsIDwgeXlsZW5nOyArK3l5bCApDQogICAgKwkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdc
bicgKQ0KICAgICsJCQkJCQ0KICAgICsgICAgeXlsaW5lbm8rKzsNCiAgICArOw0KICAgICsJCQl9
DQogICAgKw0KICAgICtkb19hY3Rpb246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFj
Y2VzcyBFT0YgYWN0aW9ucy4gKi8NCiAgICArDQogICAgKwkJc3dpdGNoICggeXlfYWN0ICkNCiAg
ICArCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8NCiAgICArY2FzZSAxOg0KICAg
ICsvKiBydWxlIDEgY2FuIG1hdGNoIGVvbCAqLw0KICAgICtjYXNlIDI6DQogICAgKy8qIHJ1bGUg
MiBjYW4gbWF0Y2ggZW9sICovDQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJcmV0
dXJuIFRfRU9MOw0KICAgICt9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDM6DQogICAgK1lZ
X1JVTEVfU0VUVVANCiAgICArDQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDQ6DQogICAgK1lZ
X1JVTEVfU0VUVVANCiAgICArew0KICAgICsJQkVHSU4oQ09NTUFORCk7DQogICAgK30NCiAgICAr
CVlZX0JSRUFLDQogICAgK2Nhc2UgNToNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7DQogICAg
Kwl1bnB1dCh5eXRleHRbMF0pOw0KICAgICsJQkVHSU4oQ09NTUFORCk7DQogICAgK30NCiAgICAr
CVlZX0JSRUFLDQogICAgKw0KICAgICtjYXNlIDY6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICAr
ew0KICAgICsJCWNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoeXl0
ZXh0LCB5eWxlbmcpOw0KICAgICsJCWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7DQog
ICAgKwkJY3VycmVudF9wb3MubGluZW5vID0geXlsaW5lbm87DQogICAgKwkJaWYgKGlkICYmIGlk
LT5mbGFncyAmIFRGX0NPTU1BTkQpIHsNCiAgICArCQkJQkVHSU4oUEFSQU0pOw0KICAgICsJCQl5
eWx2YWwuaWQgPSBpZDsNCiAgICArCQkJcmV0dXJuIGlkLT50b2tlbjsNCiAgICArCQl9DQogICAg
KwkJYWxsb2Nfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsNCiAgICArCQl5eWx2YWwuc3RyaW5nID0g
dGV4dDsNCiAgICArCQlyZXR1cm4gVF9WQVJJQUJMRTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFL
DQogICAgK2Nhc2UgNzoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7DQogICAgKwkJLyogdGhp
cyB0b2tlbiBpbmNsdWRlcyBhdCBsZWFzdCBvbmUgJyQnICovDQogICAgKwkJeXlsdmFsLnN0cmlu
ZyA9IGV4cGFuZF90b2tlbih5eXRleHQsIHl5bGVuZyk7DQogICAgKwkJaWYgKHN0cmxlbih5eWx2
YWwuc3RyaW5nKSkNCiAgICArCQkJcmV0dXJuIFRfVkFSSUFCTEU7DQogICAgKwkJZnJlZSh5eWx2
YWwuc3RyaW5nKTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgODoNCiAgICAr
WVlfUlVMRV9TRVRVUA0KICAgICt7IEJFR0lOKEFTU0lHTl9WQUwpOyB5eWx2YWwuZmxhdm9yID0g
VkFSX1JFQ1VSU0lWRTsgcmV0dXJuIFRfQVNTSUdOOyB9DQogICAgKwlZWV9CUkVBSw0KICAgICtj
YXNlIDk6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICAreyBCRUdJTihBU1NJR05fVkFMKTsgeXls
dmFsLmZsYXZvciA9IFZBUl9TSU1QTEU7IHJldHVybiBUX0FTU0lHTjsgfQ0KICAgICsJWVlfQlJF
QUsNCiAgICArY2FzZSAxMDoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7IEJFR0lOKEFTU0lH
Tl9WQUwpOyB5eWx2YWwuZmxhdm9yID0gVkFSX0FQUEVORDsgcmV0dXJuIFRfQVNTSUdOOyB9DQog
ICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDExOg0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgKw0K
ICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAxMjoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt3
YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOw0KICAgICsJWVlfQlJFQUsNCiAgICArY2Fz
ZSAxMzoNCiAgICArLyogcnVsZSAxMyBjYW4gbWF0Y2ggZW9sICovDQogICAgK1lZX1JVTEVfU0VU
VVANCiAgICArew0KICAgICsJCUJFR0lOKElOSVRJQUwpOw0KICAgICsJCXJldHVybiBUX0VPTDsN
CiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgKw0KICAgICtjYXNlIDE0Og0KICAgICtZWV9S
VUxFX1NFVFVQDQogICAgK3sNCiAgICArCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0K
ICAgICsJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAgICsJCXJldHVybiBUX0FTU0lHTl9WQUw7
DQogICAgKwl9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDE1Og0KICAgICsvKiBydWxlIDE1
IGNhbiBtYXRjaCBlb2wgKi8NCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7IEJFR0lOKElOSVRJ
QUwpOyByZXR1cm4gVF9FT0w7IH0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMTY6DQogICAg
K1lZX1JVTEVfU0VUVVANCiAgICArDQogICAgKwlZWV9CUkVBSw0KICAgICsNCiAgICArY2FzZSAx
NzoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICtyZXR1cm4gVF9BTkQ7DQogICAgKwlZWV9CUkVB
Sw0KICAgICtjYXNlIDE4Og0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3JldHVybiBUX09SOw0K
ICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAxOToNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICty
ZXR1cm4gVF9PUEVOX1BBUkVOOw0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAyMDoNCiAgICAr
WVlfUlVMRV9TRVRVUA0KICAgICtyZXR1cm4gVF9DTE9TRV9QQVJFTjsNCiAgICArCVlZX0JSRUFL
DQogICAgK2Nhc2UgMjE6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArcmV0dXJuIFRfTk9UOw0K
ICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAyMjoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICty
ZXR1cm4gVF9FUVVBTDsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjM6DQogICAgK1lZX1JV
TEVfU0VUVVANCiAgICArcmV0dXJuIFRfVU5FUVVBTDsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nh
c2UgMjQ6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArcmV0dXJuIFRfTEVTU19FUVVBTDsNCiAg
ICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjU6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArcmV0
dXJuIFRfR1JFQVRFUl9FUVVBTDsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjY6DQogICAg
K1lZX1JVTEVfU0VUVVANCiAgICArcmV0dXJuIFRfTEVTUzsNCiAgICArCVlZX0JSRUFLDQogICAg
K2Nhc2UgMjc6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArcmV0dXJuIFRfR1JFQVRFUjsNCiAg
ICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjg6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0K
ICAgICsJCXN0ciA9IHl5dGV4dFswXTsNCiAgICArCQluZXdfc3RyaW5nKCk7DQogICAgKwkJQkVH
SU4oU1RSSU5HKTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjk6DQogICAg
Ky8qIHJ1bGUgMjkgY2FuIG1hdGNoIGVvbCAqLw0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK0JF
R0lOKElOSVRJQUwpOyByZXR1cm4gVF9FT0w7DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDMw
Og0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3sNCiAgICArCQljb25zdCBzdHJ1Y3Qga2NvbmZf
aWQgKmlkID0ga2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5nKTsNCiAgICArCQlpZiAoaWQg
JiYgaWQtPmZsYWdzICYgVEZfUEFSQU0pIHsNCiAgICArCQkJeXlsdmFsLmlkID0gaWQ7DQogICAg
KwkJCXJldHVybiBpZC0+dG9rZW47DQogICAgKwkJfQ0KICAgICsJCWFsbG9jX3N0cmluZyh5eXRl
eHQsIHl5bGVuZyk7DQogICAgKwkJeXlsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgKwkJcmV0dXJu
IFRfV09SRDsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMzE6DQogICAgK1lZ
X1JVTEVfU0VUVVANCiAgICArew0KICAgICsJCS8qIHRoaXMgdG9rZW4gaW5jbHVkZXMgYXQgbGVh
c3Qgb25lICckJyAqLw0KICAgICsJCXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0
LCB5eWxlbmcpOw0KICAgICsJCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpDQogICAgKwkJCXJl
dHVybiBUX1dPUkQ7DQogICAgKwkJZnJlZSh5eWx2YWwuc3RyaW5nKTsNCiAgICArCX0NCiAgICAr
CVlZX0JSRUFLDQogICAgK2Nhc2UgMzI6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArLyogY29t
bWVudCAqLw0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAzMzoNCiAgICArLyogcnVsZSAzMyBj
YW4gbWF0Y2ggZW9sICovDQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArOw0KICAgICsJWVlfQlJF
QUsNCiAgICArY2FzZSAzNDoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICsNCiAgICArCVlZX0JS
RUFLDQogICAgK2Nhc2UgMzU6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArd2Fybl9pZ25vcmVk
X2NoYXJhY3RlcigqeXl0ZXh0KTsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgWVlfU1RBVEVf
RU9GKFBBUkFNKToNCiAgICArew0KICAgICsJCUJFR0lOKElOSVRJQUwpOw0KICAgICsJfQ0KICAg
ICsJWVlfQlJFQUsNCiAgICArDQogICAgK2Nhc2UgMzY6DQogICAgK1lZX1JVTEVfU0VUVVANCiAg
ICArYXBwZW5kX2V4cGFuZGVkX3N0cmluZyh5eXRleHQpOw0KICAgICsJWVlfQlJFQUsNCiAgICAr
Y2FzZSAzNzoNCiAgICArLyogcnVsZSAzNyBjYW4gbWF0Y2ggZW9sICovDQogICAgKyp5eV9jcCA9
ICh5eV9ob2xkX2NoYXIpOyAvKiB1bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8N
CiAgICArWVlfTElORU5PX1JFV0lORF9UTyh5eV9jcCAtIDEpOw0KICAgICsoeXlfY19idWZfcCkg
PSB5eV9jcCAtPSAxOw0KICAgICtZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0
IGFnYWluICovDQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJCWFwcGVuZF9zdHJp
bmcoeXl0ZXh0LCB5eWxlbmcpOw0KICAgICsJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAgICsJ
CXJldHVybiBUX1dPUkRfUVVPVEU7DQogICAgKwl9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNl
IDM4Og0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3sNCiAgICArCQlhcHBlbmRfc3RyaW5nKHl5
dGV4dCwgeXlsZW5nKTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMzk6DQog
ICAgKy8qIHJ1bGUgMzkgY2FuIG1hdGNoIGVvbCAqLw0KICAgICsqeXlfY3AgPSAoeXlfaG9sZF9j
aGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovDQogICAgK1lZX0xJ
TkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsNCiAgICArKHl5X2NfYnVmX3ApID0geXlfY3AgLT0g
MTsNCiAgICArWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLw0K
ICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3sNCiAgICArCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCAr
IDEsIHl5bGVuZyAtIDEpOw0KICAgICsJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAgICsJCXJl
dHVybiBUX1dPUkRfUVVPVEU7DQogICAgKwl9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDQw
Og0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3sNCiAgICArCQlhcHBlbmRfc3RyaW5nKHl5dGV4
dCArIDEsIHl5bGVuZyAtIDEpOw0KICAgICsJfQ0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSA0
MToNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7DQogICAgKwkJaWYgKHN0ciA9PSB5eXRleHRb
MF0pIHsNCiAgICArCQkJQkVHSU4oUEFSQU0pOw0KICAgICsJCQl5eWx2YWwuc3RyaW5nID0gdGV4
dDsNCiAgICArCQkJcmV0dXJuIFRfV09SRF9RVU9URTsNCiAgICArCQl9IGVsc2UNCiAgICArCQkJ
YXBwZW5kX3N0cmluZyh5eXRleHQsIDEpOw0KICAgICsJfQ0KICAgICsJWVlfQlJFQUsNCiAgICAr
Y2FzZSA0MjoNCiAgICArLyogcnVsZSA0MiBjYW4gbWF0Y2ggZW9sICovDQogICAgK1lZX1JVTEVf
U0VUVVANCiAgICArew0KICAgICsJCWZwcmludGYoc3RkZXJyLA0KICAgICsJCQkiJXM6JWQ6d2Fy
bmluZzogbXVsdGktbGluZSBzdHJpbmdzIG5vdCBzdXBwb3J0ZWRcbiIsDQogICAgKwkJCXpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICsJCUJFR0lOKElOSVRJQUwpOw0KICAg
ICsJCXJldHVybiBUX0VPTDsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgWVlf
U1RBVEVfRU9GKFNUUklORyk6DQogICAgK3sNCiAgICArCQlCRUdJTihJTklUSUFMKTsNCiAgICAr
CX0NCiAgICArCVlZX0JSRUFLDQogICAgKw0KICAgICtjYXNlIDQzOg0KICAgICtZWV9SVUxFX1NF
VFVQDQogICAgK3sNCiAgICArCQl0cyA9IDA7DQogICAgKwkJZm9yIChpID0gMDsgaSA8IHl5bGVu
ZzsgaSsrKSB7DQogICAgKwkJCWlmICh5eXRleHRbaV0gPT0gJ1x0JykNCiAgICArCQkJCXRzID0g
KHRzICYgfjcpICsgODsNCiAgICArCQkJZWxzZQ0KICAgICsJCQkJdHMrKzsNCiAgICArCQl9DQog
ICAgKwkJbGFzdF90cyA9IHRzOw0KICAgICsJCWlmIChmaXJzdF90cykgew0KICAgICsJCQlpZiAo
dHMgPCBmaXJzdF90cykgew0KICAgICsJCQkJemNvbmZfZW5kaGVscCgpOw0KICAgICsJCQkJcmV0
dXJuIFRfSEVMUFRFWFQ7DQogICAgKwkJCX0NCiAgICArCQkJdHMgLT0gZmlyc3RfdHM7DQogICAg
KwkJCXdoaWxlICh0cyA+IDgpIHsNCiAgICArCQkJCWFwcGVuZF9zdHJpbmcoIiAgICAgICAgIiwg
OCk7DQogICAgKwkJCQl0cyAtPSA4Ow0KICAgICsJCQl9DQogICAgKwkJCWFwcGVuZF9zdHJpbmco
IiAgICAgICAgIiwgdHMpOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAg
K2Nhc2UgNDQ6DQogICAgKy8qIHJ1bGUgNDQgY2FuIG1hdGNoIGVvbCAqLw0KICAgICsqeXlfY3Ag
PSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICov
DQogICAgK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsNCiAgICArKHl5X2NfYnVmX3Ap
ID0geXlfY3AgLT0gMTsNCiAgICArWVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4
dCBhZ2FpbiAqLw0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3sNCiAgICArCQl6Y29uZl9lbmRo
ZWxwKCk7DQogICAgKwkJcmV0dXJuIFRfSEVMUFRFWFQ7DQogICAgKwl9DQogICAgKwlZWV9CUkVB
Sw0KICAgICtjYXNlIDQ1Og0KICAgICsvKiBydWxlIDQ1IGNhbiBtYXRjaCBlb2wgKi8NCiAgICAr
WVlfUlVMRV9TRVRVUA0KICAgICt7DQogICAgKwkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsNCiAg
ICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgNDY6DQogICAgK1lZX1JVTEVfU0VUVVAN
CiAgICArew0KICAgICsJCXdoaWxlICh5eWxlbmcpIHsNCiAgICArCQkJaWYgKCh5eXRleHRbeXls
ZW5nLTFdICE9ICcgJykgJiYgKHl5dGV4dFt5eWxlbmctMV0gIT0gJ1x0JykpDQogICAgKwkJCQli
cmVhazsNCiAgICArCQkJeXlsZW5nLS07DQogICAgKwkJfQ0KICAgICsJCWFwcGVuZF9zdHJpbmco
eXl0ZXh0LCB5eWxlbmcpOw0KICAgICsJCWlmICghZmlyc3RfdHMpDQogICAgKwkJCWZpcnN0X3Rz
ID0gbGFzdF90czsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgWVlfU1RBVEVf
RU9GKEhFTFApOg0KICAgICt7DQogICAgKwkJemNvbmZfZW5kaGVscCgpOw0KICAgICsJCXJldHVy
biBUX0hFTFBURVhUOw0KICAgICsJfQ0KICAgICsJWVlfQlJFQUsNCiAgICArDQogICAgK2Nhc2Ug
WVlfU1RBVEVfRU9GKElOSVRJQUwpOg0KICAgICtjYXNlIFlZX1NUQVRFX0VPRihDT01NQU5EKToN
CiAgICArY2FzZSBZWV9TVEFURV9FT0YoQVNTSUdOX1ZBTCk6DQogICAgK3sNCiAgICArCWlmIChj
dXJyZW50X2ZpbGUpIHsNCiAgICArCQl6Y29uZl9lbmRmaWxlKCk7DQogICAgKwkJcmV0dXJuIFRf
RU9MOw0KICAgICsJfQ0KICAgICsJZmNsb3NlKHl5aW4pOw0KICAgICsJeXl0ZXJtaW5hdGUoKTsN
CiAgICArfQ0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSA0NzoNCiAgICArWVlfUlVMRV9TRVRV
UA0KICAgICtZWV9GQVRBTF9FUlJPUiggImZsZXggc2Nhbm5lciBqYW1tZWQiICk7DQogICAgKwlZ
WV9CUkVBSw0KICAgICsNCiAgICArCWNhc2UgWVlfRU5EX09GX0JVRkZFUjoNCiAgICArCQl7DQog
ICAgKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hh
ci4gKi8NCiAgICArCQlpbnQgeXlfYW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9j
cCAtICh5eXRleHRfcHRyKSkgLSAxOw0KICAgICsNCiAgICArCQkvKiBVbmRvIHRoZSBlZmZlY3Rz
IG9mIFlZX0RPX0JFRk9SRV9BQ1RJT04uICovDQogICAgKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hh
cik7DQogICAgKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVA0KICAgICsNCiAgICArCQlpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJf
TkVXICkNCiAgICArCQkJew0KICAgICsJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9y
IGlucHV0IHNvdXJjZS4gIEl0J3MNCiAgICArCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBl
bmVkIGJlY2F1c2UgdGhlIHVzZXINCiAgICArCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBu
ZXcgc291cmNlIGFuZCBjYWxsZWQNCiAgICArCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdl
IGhhdmUgdG8gYXNzdXJlDQogICAgKwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVO
VF9CVUZGRVIgYW5kIG91cg0KICAgICsJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQg
cGxhY2UgdG8gZG8gc28sIGJlY2F1c2UNCiAgICArCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0
aW9uIChvdGhlciB0aGFuIHBvc3NpYmx5IGENCiAgICArCQkJICogYmFjay11cCkgdGhhdCB3aWxs
IG1hdGNoIGZvciB0aGUgbmV3IGlucHV0IHNvdXJjZS4NCiAgICArCQkJICovDQogICAgKwkJCSh5
eV9uX2NoYXJzKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsNCiAgICAr
CQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsNCiAgICAr
CQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVS
X05PUk1BTDsNCiAgICArCQkJfQ0KICAgICsNCiAgICArCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0
ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uDQogICAgKwkJICogb2YgdGhl
IGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwNCiAgICArCQkg
KiBhbHJlYWR5IGhhdmUgYmVlbiBpbmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyDQog
ICAgKwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhl
DQogICAgKwkJICogZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhl
IHRlc3QNCiAgICArCQkgKiBpbiBpbnB1dCgpLg0KICAgICsJCSAqLw0KICAgICsJCWlmICggKHl5
X2NfYnVmX3ApIDw9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9j
aGFycyldICkNCiAgICArCQkJeyAvKiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovDQogICAgKwkJ
CXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0ZTsNCiAgICArDQogICAgKwkJCSh5eV9jX2J1Zl9w
KSA9ICh5eXRleHRfcHRyKSArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7DQogICAgKw0KICAg
ICsJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsNCiAgICAr
DQogICAgKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTA0K
ICAgICsJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQ0KICAgICsJCQkgKiB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUoKSBnbyBhaGVhZCBhbmQgZG8gaXQNCiAgICArCQkJICogZm9yIHVz
IGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsDQogICAgKwkJCSAqIHdpdGggdGhl
IHBvc3NpYmlsaXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndA0KICAgICsJCQkgKiB3YW50IHRv
IGJ1aWxkIGphbW1pbmcgaW50byBpdCBiZWNhdXNlIHRoZW4gaXQNCiAgICArCQkJICogd2lsbCBy
dW4gbW9yZSBzbG93bHkpLg0KICAgICsJCQkgKi8NCiAgICArDQogICAgKwkJCXl5X25leHRfc3Rh
dGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJyZW50X3N0YXRlICk7DQogICAgKw0KICAgICsJ
CQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOw0KICAgICsNCiAgICArCQkJaWYg
KCB5eV9uZXh0X3N0YXRlICkNCiAgICArCQkJCXsNCiAgICArCQkJCS8qIENvbnN1bWUgdGhlIE5V
TC4gKi8NCiAgICArCQkJCXl5X2NwID0gKysoeXlfY19idWZfcCk7DQogICAgKwkJCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsNCiAgICArCQkJCWdvdG8geXlfbWF0Y2g7DQogICAg
KwkJCQl9DQogICAgKw0KICAgICsJCQllbHNlDQogICAgKwkJCQl7DQogICAgKwkJCQl5eV9jcCA9
ICh5eV9jX2J1Zl9wKTsNCiAgICArCQkJCWdvdG8geXlfZmluZF9hY3Rpb247DQogICAgKwkJCQl9
DQogICAgKwkJCX0NCiAgICArDQogICAgKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZm
ZXIoICApICkNCiAgICArCQkJew0KICAgICsJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6DQog
ICAgKwkJCQl7DQogICAgKwkJCQkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDA7DQog
ICAgKw0KICAgICsJCQkJaWYgKCB5eXdyYXAoICkgKQ0KICAgICsJCQkJCXsNCiAgICArCQkJCQkv
KiBOb3RlOiBiZWNhdXNlIHdlJ3ZlIHRha2VuIGNhcmUgaW4NCiAgICArCQkJCQkgKiB5eV9nZXRf
bmV4dF9idWZmZXIoKSB0byBoYXZlIHNldCB1cA0KICAgICsJCQkJCSAqIHl5dGV4dCwgd2UgY2Fu
IG5vdyBzZXQgdXANCiAgICArCQkJCQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3Rh
bA0KICAgICsJCQkJCSAqIGhvc2VyIChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bw0KICAgICsJ
CQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQ0KICAgICsJCQkJCSAq
IFlZX05VTEwsIGl0J2xsIHN0aWxsIHdvcmsgLSBhbm90aGVyDQogICAgKwkJCQkJICogWVlfTlVM
TCB3aWxsIGdldCByZXR1cm5lZC4NCiAgICArCQkJCQkgKi8NCiAgICArCQkJCQkoeXlfY19idWZf
cCkgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsNCiAgICArDQogICAgKwkJCQkJeXlfYWN0
ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsNCiAgICArCQkJCQlnb3RvIGRvX2FjdGlvbjsNCiAg
ICArCQkJCQl9DQogICAgKw0KICAgICsJCQkJZWxzZQ0KICAgICsJCQkJCXsNCiAgICArCQkJCQlp
ZiAoICEgKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgKQ0KICAgICsJCQkJCQlZWV9ORVdf
RklMRTsNCiAgICArCQkJCQl9DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJCX0NCiAgICArDQog
ICAgKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOg0KICAgICsJCQkJKHl5X2NfYnVmX3Ap
ID0NCiAgICArCQkJCQkoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Ow0K
ICAgICsNCiAgICArCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUo
ICApOw0KICAgICsNCiAgICArCQkJCXl5X2NwID0gKHl5X2NfYnVmX3ApOw0KICAgICsJCQkJeXlf
YnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsNCiAgICArCQkJCWdvdG8geXlfbWF0Y2g7
DQogICAgKw0KICAgICsJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoNCiAgICArCQkJCSh5eV9j
X2J1Zl9wKSA9DQogICAgKwkJCQkmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZb
KHl5X25fY2hhcnMpXTsNCiAgICArDQogICAgKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0
X3ByZXZpb3VzX3N0YXRlKCAgKTsNCiAgICArDQogICAgKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9w
KTsNCiAgICArCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7DQogICAgKwkJ
CQlnb3RvIHl5X2ZpbmRfYWN0aW9uOw0KICAgICsJCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwkJ
fQ0KICAgICsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJWVlfRkFUQUxfRVJST1IoDQogICAgKwkJ
CSJmYXRhbCBmbGV4IHNjYW5uZXIgaW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsN
CiAgICArCX0gLyogZW5kIG9mIGFjdGlvbiBzd2l0Y2ggKi8NCiAgICArCQl9IC8qIGVuZCBvZiBz
Y2FubmluZyBvbmUgdG9rZW4gKi8NCiAgICArCX0gLyogZW5kIG9mIHVzZXIncyBkZWNsYXJhdGlv
bnMgKi8NCiAgICArfSAvKiBlbmQgb2YgeXlsZXggKi8NCiAgICArDQogICAgKy8qIHl5X2dldF9u
ZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3IGJ1ZmZlcg0KICAgICsgKg0KICAgICsg
KiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9uOg0KICAgICsgKglFT0JfQUNU
X0xBU1RfTUFUQ0ggLQ0KICAgICsgKglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBz
Y2FubmluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24NCiAgICArICoJRU9CX0FDVF9FTkRfT0ZfRklM
RSAtIGVuZCBvZiBmaWxlDQogICAgKyAqLw0KICAgICtzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1
ZmZlciAodm9pZCkNCiAgICArew0KICAgICsgICAgCWNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsNCiAgICArCWNoYXIgKnNvdXJjZSA9ICh5eXRleHRfcHRy
KTsNCiAgICArCWludCBudW1iZXJfdG9fbW92ZSwgaTsNCiAgICArCWludCByZXRfdmFsOw0KICAg
ICsNCiAgICArCWlmICggKHl5X2NfYnVmX3ApID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdICkNCiAgICArCQlZWV9GQVRBTF9FUlJPUigNCiAg
ICArCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1p
c3NlZCIgKTsNCiAgICArDQogICAgKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
ZmlsbF9idWZmZXIgPT0gMCApDQogICAgKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVm
ZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4gKi8NCiAgICArCQlpZiAoICh5eV9jX2J1Zl9wKSAtICh5
eXRleHRfcHRyKSAtIFlZX01PUkVfQURKID09IDEgKQ0KICAgICsJCQl7DQogICAgKwkJCS8qIFdl
IG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUgRU9CLCBzbw0KICAgICsJCQkgKiB0cmVh
dCB0aGlzIGFzIGEgZmluYWwgRU9GLg0KICAgICsJCQkgKi8NCiAgICArCQkJcmV0dXJuIEVPQl9B
Q1RfRU5EX09GX0ZJTEU7DQogICAgKwkJCX0NCiAgICArDQogICAgKwkJZWxzZQ0KICAgICsJCQl7
DQogICAgKwkJCS8qIFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0
DQogICAgKwkJCSAqIHByb2Nlc3MgaXQuDQogICAgKwkJCSAqLw0KICAgICsJCQlyZXR1cm4gRU9C
X0FDVF9MQVNUX01BVENIOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsNCiAgICArCS8qIFRy
eSB0byByZWFkIG1vcmUgZGF0YS4gKi8NCiAgICArDQogICAgKwkvKiBGaXJzdCBtb3ZlIGxhc3Qg
Y2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLw0KICAgICsJbnVtYmVyX3RvX21vdmUgPSAoaW50
KSAoKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpIC0gMSk7DQogICAgKw0KICAgICsJZm9yICgg
aSA9IDA7IGkgPCBudW1iZXJfdG9fbW92ZTsgKytpICkNCiAgICArCQkqKGRlc3QrKykgPSAqKHNv
dXJjZSsrKTsNCiAgICArDQogICAgKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfRU9GX1BFTkRJTkcgKQ0KICAgICsJCS8qIGRvbid0
IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsDQogICAg
KwkJICoganVzdCBmb3JjZSBhbiBFT0YNCiAgICArCQkgKi8NCiAgICArCQlZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycykgPSAwOw0KICAgICsNCiAgICAr
CWVsc2UNCiAgICArCQl7DQogICAgKwkJCWludCBudW1fdG9fcmVhZCA9DQogICAgKwkJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7DQog
ICAgKw0KICAgICsJCXdoaWxlICggbnVtX3RvX3JlYWQgPD0gMCApDQogICAgKwkJCXsgLyogTm90
IGVub3VnaCByb29tIGluIHRoZSBidWZmZXIgLSBncm93IGl0LiAqLw0KICAgICsNCiAgICArCQkJ
LyoganVzdCBhIHNob3J0ZXIgbmFtZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovDQogICAgKwkJ
CVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOw0KICAgICsNCiAg
ICArCQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0NCiAgICArCQkJCShpbnQpICgoeXlfY19idWZf
cCkgLSBiLT55eV9jaF9idWYpOw0KICAgICsNCiAgICArCQkJaWYgKCBiLT55eV9pc19vdXJfYnVm
ZmVyICkNCiAgICArCQkJCXsNCiAgICArCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXpl
ICogMjsNCiAgICArDQogICAgKwkJCQlpZiAoIG5ld19zaXplIDw9IDAgKQ0KICAgICsJCQkJCWIt
Pnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsNCiAgICArCQkJCWVsc2UNCiAgICAr
CQkJCQliLT55eV9idWZfc2l6ZSAqPSAyOw0KICAgICsNCiAgICArCQkJCWItPnl5X2NoX2J1ZiA9
IChjaGFyICopDQogICAgKwkJCQkJLyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4g
Ki8NCiAgICArCQkJCQl5eXJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9z
aXplICsgMiAgKTsNCiAgICArCQkJCX0NCiAgICArCQkJZWxzZQ0KICAgICsJCQkJLyogQ2FuJ3Qg
Z3JvdyBpdCwgd2UgZG9uJ3Qgb3duIGl0LiAqLw0KICAgICsJCQkJYi0+eXlfY2hfYnVmID0gTlVM
TDsNCiAgICArDQogICAgKwkJCWlmICggISBiLT55eV9jaF9idWYgKQ0KICAgICsJCQkJWVlfRkFU
QUxfRVJST1IoDQogICAgKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBv
dmVyZmxvdyIgKTsNCiAgICArDQogICAgKwkJCSh5eV9jX2J1Zl9wKSA9ICZiLT55eV9jaF9idWZb
eXlfY19idWZfcF9vZmZzZXRdOw0KICAgICsNCiAgICArCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0NCiAgICArCQkJCQkJbnVtYmVyX3RvX21v
dmUgLSAxOw0KICAgICsNCiAgICArCQkJfQ0KICAgICsNCiAgICArCQlpZiAoIG51bV90b19yZWFk
ID4gWVlfUkVBRF9CVUZfU0laRSApDQogICAgKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZf
U0laRTsNCiAgICArDQogICAgKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEuICovDQogICAgKwkJWVlf
SU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21v
dmVdKSwNCiAgICArCQkJKHl5X25fY2hhcnMpLCBudW1fdG9fcmVhZCApOw0KICAgICsNCiAgICAr
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7DQog
ICAgKwkJfQ0KICAgICsNCiAgICArCWlmICggKHl5X25fY2hhcnMpID09IDAgKQ0KICAgICsJCXsN
CiAgICArCQlpZiAoIG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkNCiAgICArCQkJew0K
ICAgICsJCQlyZXRfdmFsID0gRU9CX0FDVF9FTkRfT0ZfRklMRTsNCiAgICArCQkJeXlyZXN0YXJ0
KHl5aW4gICk7DQogICAgKwkJCX0NCiAgICArDQogICAgKwkJZWxzZQ0KICAgICsJCQl7DQogICAg
KwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7DQogICAgKwkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9DQogICAgKwkJCQlZWV9CVUZGRVJfRU9GX1BF
TkRJTkc7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKw0KICAgICsJZWxzZQ0KICAgICsJCXJl
dF92YWwgPSBFT0JfQUNUX0NPTlRJTlVFX1NDQU47DQogICAgKw0KICAgICsJaWYgKCgoeXlfbl9j
aGFycykgKyBudW1iZXJfdG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
Zl9zaXplKSB7DQogICAgKwkJLyogRXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51
bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8NCiAgICArCQlpbnQgbmV3X3NpemUgPSAoeXlfbl9jaGFy
cykgKyBudW1iZXJfdG9fbW92ZSArICgoeXlfbl9jaGFycykgPj4gMSk7DQogICAgKwkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQg
KikgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgICk7DQogICAg
KwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkNCiAgICArCQkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVm
ZmVyKCkiICk7DQogICAgKwl9DQogICAgKw0KICAgICsJKHl5X25fY2hhcnMpICs9IG51bWJlcl90
b19tb3ZlOw0KICAgICsJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25f
Y2hhcnMpXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsNCiAgICArCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKSArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9D
SEFSOw0KICAgICsNCiAgICArCSh5eXRleHRfcHRyKSA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2NoX2J1ZlswXTsNCiAgICArDQogICAgKwlyZXR1cm4gcmV0X3ZhbDsNCiAgICArfQ0K
ICAgICsNCiAgICArLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0
IGJlZm9yZSB0aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8NCiAgICArDQogICAgKyAgICBzdGF0
aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHZvaWQpDQogICAgK3sNCiAg
ICArCXl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsNCiAgICArCWNoYXIgKnl5X2NwOw0K
ICAgICsgICAgDQogICAgKwl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0YXJ0KTsNCiAgICArDQog
ICAgKwlmb3IgKCB5eV9jcCA9ICh5eXRleHRfcHRyKSArIFlZX01PUkVfQURKOyB5eV9jcCA8ICh5
eV9jX2J1Zl9wKTsgKyt5eV9jcCApDQogICAgKwkJew0KICAgICsJCXl5X2N1cnJlbnRfc3RhdGUg
PSB5eV9ueHRbeXlfY3VycmVudF9zdGF0ZV1bKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5
eV9jcCldIDogMSldOw0KICAgICsJCX0NCiAgICArDQogICAgKwlyZXR1cm4geXlfY3VycmVudF9z
dGF0ZTsNCiAgICArfQ0KICAgICsNCiAgICArLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBt
YWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3Rlcg0KICAgICsgKg0KICAgICsgKiBz
eW5vcHNpcw0KICAgICsgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9z
dGF0ZSApOw0KICAgICsgKi8NCiAgICArICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9O
VUxfdHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgKQ0KICAgICt7DQogICAg
KwlpbnQgeXlfaXNfamFtOw0KICAgICsgICAgDQogICAgKwl5eV9jdXJyZW50X3N0YXRlID0geXlf
bnh0W3l5X2N1cnJlbnRfc3RhdGVdWzFdOw0KICAgICsJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRf
c3RhdGUgPD0gMCk7DQogICAgKw0KICAgICsJCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3Vy
cmVudF9zdGF0ZTsNCiAgICArfQ0KICAgICsNCiAgICArI2lmbmRlZiBZWV9OT19VTlBVVA0KICAg
ICsNCiAgICArICAgIHN0YXRpYyB2b2lkIHl5dW5wdXQgKGludCBjLCBjaGFyICogeXlfYnAgKQ0K
ICAgICt7DQogICAgKwljaGFyICp5eV9jcDsNCiAgICArICAgIA0KICAgICsgICAgeXlfY3AgPSAo
eXlfY19idWZfcCk7DQogICAgKw0KICAgICsJLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAg
eXl0ZXh0ICovDQogICAgKwkqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsNCiAgICArDQogICAgKwlp
ZiAoIHl5X2NwIDwgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKyAyICkNCiAg
ICArCQl7IC8qIG5lZWQgdG8gc2hpZnQgdGhpbmdzIHVwIHRvIG1ha2Ugcm9vbSAqLw0KICAgICsJ
CS8qICsyIGZvciBFT0IgY2hhcnMuICovDQogICAgKwkJaW50IG51bWJlcl90b19tb3ZlID0gKHl5
X25fY2hhcnMpICsgMjsNCiAgICArCQljaGFyICpkZXN0ID0gJllZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmWw0KICAgICsJCQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
YnVmX3NpemUgKyAyXTsNCiAgICArCQljaGFyICpzb3VyY2UgPQ0KICAgICsJCQkJJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251bWJlcl90b19tb3ZlXTsNCiAgICArDQogICAg
KwkJd2hpbGUgKCBzb3VyY2UgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiAp
DQogICAgKwkJCSotLWRlc3QgPSAqLS1zb3VyY2U7DQogICAgKw0KICAgICsJCXl5X2NwICs9IChp
bnQpIChkZXN0IC0gc291cmNlKTsNCiAgICArCQl5eV9icCArPSAoaW50KSAoZGVzdCAtIHNvdXJj
ZSk7DQogICAgKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0NCiAgICAr
CQkJKHl5X25fY2hhcnMpID0gKGludCkgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZf
c2l6ZTsNCiAgICArDQogICAgKwkJaWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmICsgMiApDQogICAgKwkJCVlZX0ZBVEFMX0VSUk9SKCAiZmxleCBzY2FubmVy
IHB1c2gtYmFjayBvdmVyZmxvdyIgKTsNCiAgICArCQl9DQogICAgKw0KICAgICsJKi0teXlfY3Ag
PSAoY2hhcikgYzsNCiAgICArDQogICAgKyAgICBpZiAoIGMgPT0gJ1xuJyApew0KICAgICsgICAg
ICAgIC0teXlsaW5lbm87DQogICAgKyAgICB9DQogICAgKw0KICAgICsJKHl5dGV4dF9wdHIpID0g
eXlfYnA7DQogICAgKwkoeXlfaG9sZF9jaGFyKSA9ICp5eV9jcDsNCiAgICArCSh5eV9jX2J1Zl9w
KSA9IHl5X2NwOw0KICAgICt9DQogICAgKw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZm5k
ZWYgWVlfTk9fSU5QVVQNCiAgICArI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgKyAgICBzdGF0aWMg
aW50IHl5aW5wdXQgKHZvaWQpDQogICAgKyNlbHNlDQogICAgKyAgICBzdGF0aWMgaW50IGlucHV0
ICAodm9pZCkNCiAgICArI2VuZGlmDQogICAgKw0KICAgICt7DQogICAgKwlpbnQgYzsNCiAgICAr
ICAgIA0KICAgICsJKih5eV9jX2J1Zl9wKSA9ICh5eV9ob2xkX2NoYXIpOw0KICAgICsNCiAgICAr
CWlmICggKih5eV9jX2J1Zl9wKSA9PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQ0KICAgICsJCXsN
CiAgICArCQkvKiB5eV9jX2J1Zl9wIG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50
IHRvIHJldHVybi4NCiAgICArCQkgKiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNo
YXJhY3RlcnMsIHRoZW4gaXQncyBhDQogICAgKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4g
d2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4NCiAgICArCQkgKi8NCiAgICArCQlpZiAo
ICh5eV9jX2J1Zl9wKSA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlf
bl9jaGFycyldICkNCiAgICArCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLw0KICAgICsJ
CQkqKHl5X2NfYnVmX3ApID0gJ1wwJzsNCiAgICArDQogICAgKwkJZWxzZQ0KICAgICsJCQl7IC8q
IG5lZWQgbW9yZSBpbnB1dCAqLw0KICAgICsJCQlpbnQgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0g
KHl5dGV4dF9wdHIpOw0KICAgICsJCQkrKyh5eV9jX2J1Zl9wKTsNCiAgICArDQogICAgKwkJCXN3
aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZlciggICkgKQ0KICAgICsJCQkJew0KICAgICsJCQkJY2Fz
ZSBFT0JfQUNUX0xBU1RfTUFUQ0g6DQogICAgKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2Ug
eXlfZ19uX2IoKQ0KICAgICsJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhDQog
ICAgKwkJCQkJICogdG9rZW4gYW5kIGZsYWdzIHRoYXQgd2UgbmVlZCB0bw0KICAgICsJCQkJCSAq
IHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlDQogICAgKwkJCQkJICogcHJvY2VlZGluZy4g
IEJ1dCBmb3IgaW5wdXQoKSwNCiAgICArCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNv
bnNpZGVyLg0KICAgICsJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSA0K
ICAgICsJCQkJCSAqIHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuDQogICAgKwkJCQkJICovDQogICAg
Kw0KICAgICsJCQkJCS8qIFJlc2V0IGJ1ZmZlciBzdGF0dXMuICovDQogICAgKwkJCQkJeXlyZXN0
YXJ0KHl5aW4gKTsNCiAgICArDQogICAgKwkJCQkJLypGQUxMVEhST1VHSCovDQogICAgKw0KICAg
ICsJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOg0KICAgICsJCQkJCXsNCiAgICArCQkJCQlp
ZiAoIHl5d3JhcCggKSApDQogICAgKwkJCQkJCXJldHVybiAwOw0KICAgICsNCiAgICArCQkJCQlp
ZiAoICEgKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgKQ0KICAgICsJCQkJCQlZWV9ORVdf
RklMRTsNCiAgICArI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgKwkJCQkJcmV0dXJuIHl5aW5wdXQo
KTsNCiAgICArI2Vsc2UNCiAgICArCQkJCQlyZXR1cm4gaW5wdXQoKTsNCiAgICArI2VuZGlmDQog
ICAgKwkJCQkJfQ0KICAgICsNCiAgICArCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOg0K
ICAgICsJCQkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsNCiAgICArCQkJ
CQlicmVhazsNCiAgICArCQkJCX0NCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArDQogICAgKwlj
ID0gKih1bnNpZ25lZCBjaGFyICopICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3IgOC1iaXQgY2hh
cidzICovDQogICAgKwkqKHl5X2NfYnVmX3ApID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICov
DQogICAgKwkoeXlfaG9sZF9jaGFyKSA9ICorKyh5eV9jX2J1Zl9wKTsNCiAgICArDQogICAgKwlp
ZiAoIGMgPT0gJ1xuJyApDQogICAgKwkJDQogICAgKyAgICB5eWxpbmVubysrOw0KICAgICs7DQog
ICAgKw0KICAgICsJcmV0dXJuIGM7DQogICAgK30NCiAgICArI2VuZGlmCS8qIGlmbmRlZiBZWV9O
T19JTlBVVCAqLw0KICAgICsNCiAgICArLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZl
cmVudCBpbnB1dCBzdHJlYW0uDQogICAgKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUg
c3RyZWFtLg0KICAgICsgKiANCiAgICArICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBy
ZXNldCB0aGUgc3RhcnQgY29uZGl0aW9uIHRvIEBjIElOSVRJQUwgLg0KICAgICsgKi8NCiAgICAr
ICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgKQ0KICAgICt7DQogICAgKyAg
ICANCiAgICArCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApew0KICAgICsgICAgICAgIHl5ZW5z
dXJlX2J1ZmZlcl9zdGFjayAoKTsNCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQ0K
ICAgICsgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsNCiAg
ICArCX0NCiAgICArDQogICAgKwl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1
dF9maWxlICk7DQogICAgKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsNCiAgICArfQ0KICAgICsN
CiAgICArLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuDQogICAgKyAqIEBw
YXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLg0KICAgICsgKiANCiAgICArICov
DQogICAgKyAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5l
d19idWZmZXIgKQ0KICAgICt7DQogICAgKyAgICANCiAgICArCS8qIFRPRE8uIFdlIHNob3VsZCBi
ZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24gYm9keQ0KICAgICsJICogd2l0
aA0KICAgICsJICoJCXl5cG9wX2J1ZmZlcl9zdGF0ZSgpOw0KICAgICsJICoJCXl5cHVzaF9idWZm
ZXJfc3RhdGUobmV3X2J1ZmZlcik7DQogICAgKyAgICAgKi8NCiAgICArCXl5ZW5zdXJlX2J1ZmZl
cl9zdGFjayAoKTsNCiAgICArCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciAp
DQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAgICArCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQ0K
ICAgICsJCXsNCiAgICArCQkvKiBGbHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIu
ICovDQogICAgKwkJKih5eV9jX2J1Zl9wKSA9ICh5eV9ob2xkX2NoYXIpOw0KICAgICsJCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsNCiAgICArCQlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7DQogICAg
KwkJfQ0KICAgICsNCiAgICArCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7
DQogICAgKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsNCiAgICArDQogICAgKwkvKiBXZSBkb24n
dCBhY3R1YWxseSBrbm93IHdoZXRoZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZw0KICAgICsJ
ICogRU9GICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFn
DQogICAgKwkgKiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBp
dCdzIHNhZmUNCiAgICArCSAqIHRvIGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0Lg0KICAgICsJ
ICovDQogICAgKwkoeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7DQogICAgK30NCiAg
ICArDQogICAgK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVyX3N0YXRlICAodm9pZCkNCiAgICAr
ew0KICAgICsgICAgCSh5eV9uX2NoYXJzKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
bl9jaGFyczsNCiAgICArCSh5eXRleHRfcHRyKSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsNCiAgICArCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZF
Ul9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7DQogICAgKwkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19i
dWZfcCk7DQogICAgK30NCiAgICArDQogICAgKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBh
biBpbnB1dCBidWZmZXIgc3RhdGUuDQogICAgKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3Ry
ZWFtLg0KICAgICsgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5
dGVzLiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuDQogICAgKyAqIA0KICAgICsg
KiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlLg0KICAgICsgKi8NCiAgICArICAg
IFlZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6
ZSApDQogICAgK3sNCiAgICArCVlZX0JVRkZFUl9TVEFURSBiOw0KICAgICsgICAgDQogICAgKwli
ID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUgKSAgKTsNCiAgICArCWlmICggISBiICkNCiAgICArCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9jcmVhdGVfYnVmZmVyKCkiICk7DQogICAgKw0KICAgICsJ
Yi0+eXlfYnVmX3NpemUgPSAoeXlfc2l6ZV90KXNpemU7DQogICAgKw0KICAgICsJLyogeXlfY2hf
YnVmIGhhcyB0byBiZSAyIGNoYXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVj
YXVzZQ0KICAgICsJICogd2UgbmVlZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3Rl
cnMuDQogICAgKwkgKi8NCiAgICArCWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+
eXlfYnVmX3NpemUgKyAyICApOw0KICAgICsJaWYgKCAhIGItPnl5X2NoX2J1ZiApDQogICAgKwkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZl
cigpIiApOw0KICAgICsNCiAgICArCWItPnl5X2lzX291cl9idWZmZXIgPSAxOw0KICAgICsNCiAg
ICArCXl5X2luaXRfYnVmZmVyKGIsZmlsZSApOw0KICAgICsNCiAgICArCXJldHVybiBiOw0KICAg
ICt9DQogICAgKw0KICAgICsvKiogRGVzdHJveSB0aGUgYnVmZmVyLg0KICAgICsgKiBAcGFyYW0g
YiBhIGJ1ZmZlciBjcmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZlcigpDQogICAgKyAqIA0KICAg
ICsgKi8NCiAgICArICAgIHZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBi
ICkNCiAgICArew0KICAgICsgICAgDQogICAgKwlpZiAoICEgYiApDQogICAgKwkJcmV0dXJuOw0K
ICAgICsNCiAgICArCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlm
IHdlIHNob3VsZCBwb3AgaGVyZS4gKi8NCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSAoWVlfQlVGRkVSX1NUQVRFKSAwOw0KICAgICsNCiAgICArCWlmICggYi0+eXlfaXNfb3VyX2J1
ZmZlciApDQogICAgKwkJeXlmcmVlKCh2b2lkICopIGItPnl5X2NoX2J1ZiAgKTsNCiAgICArDQog
ICAgKwl5eWZyZWUoKHZvaWQgKikgYiAgKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogSW5pdGlh
bGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4NCiAgICArICogVGhpcyBmdW5jdGlvbiBp
cyBzb21ldGltZXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwNCiAg
ICArICogc3VjaCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQoKSBvciBhdCBFT0YuDQogICAgKyAqLw0K
ICAgICsgICAgc3RhdGljIHZvaWQgeXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIs
IEZJTEUgKiBmaWxlICkNCiAgICArDQogICAgK3sNCiAgICArCWludCBvZXJybm8gPSBlcnJubzsN
CiAgICArICAgIA0KICAgICsJeXlfZmx1c2hfYnVmZmVyKGIgKTsNCiAgICArDQogICAgKwliLT55
eV9pbnB1dF9maWxlID0gZmlsZTsNCiAgICArCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsNCiAgICAr
DQogICAgKyAgICAvKiBJZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1
ZmZlciB3YXMgX3Byb2JhYmx5Xw0KICAgICsgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkg
b3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9idWZmZXIuDQogICAgKyAgICAgKiBJbiB0aGF0IGNhc2Us
IHdlIGRvbid0IHdhbnQgdG8gcmVzZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uDQogICAgKyAgICAg
Ki8NCiAgICArICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVSKXsNCiAgICArICAgICAgICBi
LT55eV9ic19saW5lbm8gPSAxOw0KICAgICsgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7DQog
ICAgKyAgICB9DQogICAgKw0KICAgICsgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsN
CiAgICArICAgIA0KICAgICsJZXJybm8gPSBvZXJybm87DQogICAgK30NCiAgICArDQogICAgKy8q
KiBEaXNjYXJkIGFsbCBidWZmZXJlZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9J
TlBVVCB3aWxsIGJlIGNhbGxlZC4NCiAgICArICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0
byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJFTlRfQlVGRkVSLg0KICAgICsgKiANCiAg
ICArICovDQogICAgKyAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBi
ICkNCiAgICArew0KICAgICsgICAgCWlmICggISBiICkNCiAgICArCQlyZXR1cm47DQogICAgKw0K
ICAgICsJYi0+eXlfbl9jaGFycyA9IDA7DQogICAgKw0KICAgICsJLyogV2UgYWx3YXlzIG5lZWQg
dHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMNCiAgICArCSAq
IGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1
c2VzDQogICAgKwkgKiBhIGphbSBpbiB0aGF0IHN0YXRlLg0KICAgICsJICovDQogICAgKwliLT55
eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7DQogICAgKwliLT55eV9jaF9idWZb
MV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7DQogICAgKw0KICAgICsJYi0+eXlfYnVmX3BvcyA9
ICZiLT55eV9jaF9idWZbMF07DQogICAgKw0KICAgICsJYi0+eXlfYXRfYm9sID0gMTsNCiAgICAr
CWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOw0KICAgICsNCiAgICArCWlmICgg
YiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApDQogICAgKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7
DQogICAgK30NCiAgICArDQogICAgKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBz
dGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzDQogICAgKyAqICB0aGUgY3VycmVudCBzdGF0ZS4g
VGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIHRoZSBzdGFjaw0KICAgICsgKiAgaWYgbmVjZXNz
YXJ5Lg0KICAgICsgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4NCiAgICArICog
IA0KICAgICsgKi8NCiAgICArdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RB
VEUgbmV3X2J1ZmZlciApDQogICAgK3sNCiAgICArICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxM
KQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soKTsN
CiAgICArDQogICAgKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19i
dWZmZXIuICovDQogICAgKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSICkNCiAgICArCQl7DQogICAg
KwkJLyogRmx1c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLw0KICAgICsJCSoo
eXlfY19idWZfcCkgPSAoeXlfaG9sZF9jaGFyKTsNCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2J1Zl9wb3MgPSAoeXlfY19idWZfcCk7DQogICAgKwkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMpOw0KICAgICsJCX0NCiAgICArDQog
ICAgKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4g
Ki8NCiAgICArCWlmIChZWV9DVVJSRU5UX0JVRkZFUikNCiAgICArCQkoeXlfYnVmZmVyX3N0YWNr
X3RvcCkrKzsNCiAgICArCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7DQog
ICAgKw0KICAgICsJLyogY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8NCiAgICAr
CXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOw0KICAgICsJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZikgPSAxOw0KICAgICt9DQogICAgKw0KICAgICsvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0
aGUgdG9wIG9mIHRoZSBzdGFjaywgaWYgcHJlc2VudC4NCiAgICArICogIFRoZSBuZXh0IGVsZW1l
bnQgYmVjb21lcyB0aGUgbmV3IHRvcC4NCiAgICArICogIA0KICAgICsgKi8NCiAgICArdm9pZCB5
eXBvcF9idWZmZXJfc3RhdGUgKHZvaWQpDQogICAgK3sNCiAgICArICAgIAlpZiAoIVlZX0NVUlJF
TlRfQlVGRkVSKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwl5eV9kZWxldGVfYnVmZmVy
KFlZX0NVUlJFTlRfQlVGRkVSICk7DQogICAgKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBO
VUxMOw0KICAgICsJaWYgKCh5eV9idWZmZXJfc3RhY2tfdG9wKSA+IDApDQogICAgKwkJLS0oeXlf
YnVmZmVyX3N0YWNrX3RvcCk7DQogICAgKw0KICAgICsJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7
DQogICAgKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7DQogICAgKwkJKHl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZikgPSAxOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKiBBbGxv
Y2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90IGV4aXN0Lg0KICAgICsgKiAgR3VhcmFudGVl
cyBzcGFjZSBmb3IgYXQgbGVhc3Qgb25lIHB1c2guDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9p
ZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHZvaWQpDQogICAgK3sNCiAgICArCWludCBudW1fdG9f
YWxsb2M7DQogICAgKyAgICANCiAgICArCWlmICghKHl5X2J1ZmZlcl9zdGFjaykpIHsNCiAgICAr
DQogICAgKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5j
ZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMNCiAgICArCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVk
IGEgc3RhY2suIFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbg0KICAgICsJCSAqIGlt
bWVkaWF0ZSByZWFsbG9jIG9uIHRoZSBuZXh0IGNhbGwuDQogICAgKyAgICAgICAgICovDQogICAg
KyAgICAgIG51bV90b19hbGxvYyA9IDE7IC8qIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2Fz
IHNldCB0byAxIGFueXdheXMuLi4gKi8NCiAgICArCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlhbGxvYw0KICAgICsJCQkJCQkJCShudW1fdG9fYWxsb2Mg
KiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopDQogICAgKwkJCQkJCQkJKTsNCiAgICAr
CQlpZiAoICEgKHl5X2J1ZmZlcl9zdGFjaykgKQ0KICAgICsJCQlZWV9GQVRBTF9FUlJPUiggIm91
dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsNCiAgICAr
DQogICAgKwkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spLCAwLCBudW1fdG9fYWxsb2MgKiBzaXpl
b2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsNCiAgICArDQogICAgKwkJKHl5X2J1ZmZlcl9z
dGFja19tYXgpID0gbnVtX3RvX2FsbG9jOw0KICAgICsJCSh5eV9idWZmZXJfc3RhY2tfdG9wKSA9
IDA7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmICgoeXlfYnVmZmVy
X3N0YWNrX3RvcCkgPj0gKCh5eV9idWZmZXJfc3RhY2tfbWF4KSkgLSAxKXsNCiAgICArDQogICAg
KwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2gu
ICovDQogICAgKwkJeXlfc2l6ZV90IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6
ZSAqLzsNCiAgICArDQogICAgKwkJbnVtX3RvX2FsbG9jID0gKHl5X2J1ZmZlcl9zdGFja19tYXgp
ICsgZ3Jvd19zaXplOw0KICAgICsJCSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZm
ZXJfc3RhdGUqKil5eXJlYWxsb2MNCiAgICArCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksDQog
ICAgKwkJCQkJCQkJbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUq
KQ0KICAgICsJCQkJCQkJCSk7DQogICAgKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkNCiAg
ICArCQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVf
YnVmZmVyX3N0YWNrKCkiICk7DQogICAgKw0KICAgICsJCS8qIHplcm8gb25seSB0aGUgbmV3IHNs
b3RzLiovDQogICAgKwkJbWVtc2V0KCh5eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFj
a19tYXgpLCAwLCBncm93X3NpemUgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsN
CiAgICArCQkoeXlfYnVmZmVyX3N0YWNrX21heCkgPSBudW1fdG9fYWxsb2M7DQogICAgKwl9DQog
ICAgK30NCiAgICArDQogICAgKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNj
YW4gZGlyZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuDQogICAg
KyAqIEBwYXJhbSBiYXNlIHRoZSBjaGFyYWN0ZXIgYnVmZmVyDQogICAgKyAqIEBwYXJhbSBzaXpl
IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyDQogICAgKyAqIA0KICAg
ICsgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4NCiAg
ICArICovDQogICAgK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNl
LCB5eV9zaXplX3QgIHNpemUgKQ0KICAgICt7DQogICAgKwlZWV9CVUZGRVJfU1RBVEUgYjsNCiAg
ICArICAgIA0KICAgICsJaWYgKCBzaXplIDwgMiB8fA0KICAgICsJICAgICBiYXNlW3NpemUtMl0g
IT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8DQogICAgKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQ0KICAgICsJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJv
b20gZm9yIHRoZSBFT0Incy4gKi8NCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArDQogICAgKwli
ID0gKFlZX0JVRkZFUl9TVEFURSkgeXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3Rh
dGUgKSAgKTsNCiAgICArCWlmICggISBiICkNCiAgICArCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2FuX2J1ZmZlcigpIiApOw0KICAgICsNCiAgICArCWIt
Pnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAq
Lw0KICAgICsJYi0+eXlfYnVmX3BvcyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7DQogICAgKwliLT55
eV9pc19vdXJfYnVmZmVyID0gMDsNCiAgICArCWItPnl5X2lucHV0X2ZpbGUgPSBOVUxMOw0KICAg
ICsJYi0+eXlfbl9jaGFycyA9IGItPnl5X2J1Zl9zaXplOw0KICAgICsJYi0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSAwOw0KICAgICsJYi0+eXlfYXRfYm9sID0gMTsNCiAgICArCWItPnl5X2ZpbGxfYnVm
ZmVyID0gMDsNCiAgICArCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOw0KICAg
ICsNCiAgICArCXl5X3N3aXRjaF90b19idWZmZXIoYiAgKTsNCiAgICArDQogICAgKwlyZXR1cm4g
YjsNCiAgICArfQ0KICAgICsNCiAgICArLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUg
dG8gc2NhbiBhIHN0cmluZy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwNCiAgICArICog
c2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuDQogICAgKyAqIEBwYXJhbSB5eXN0ciBhIE5V
TC10ZXJtaW5hdGVkIHN0cmluZyB0byBzY2FuDQogICAgKyAqIA0KICAgICsgKiBAcmV0dXJuIHRo
ZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4NCiAgICArICogQG5vdGUgSWYg
eW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4g
dXNlDQogICAgKyAqICAgICAgIHl5X3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLg0KICAgICsgKi8NCiAg
ICArWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAp
DQogICAgK3sNCiAgICArICAgIA0KICAgICsJcmV0dXJuIHl5X3NjYW5fYnl0ZXMoeXlzdHIsKGlu
dCkgc3RybGVuKHl5c3RyKSApOw0KICAgICt9DQogICAgKw0KICAgICsvKiogU2V0dXAgdGhlIGlu
cHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0
byB5eWxleCgpIHdpbGwNCiAgICArICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4N
CiAgICArICogQHBhcmFtIHl5Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4NCiAgICArICog
QHBhcmFtIF95eWJ5dGVzX2xlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9p
bnRlZCB0byBieSBAYSBieXRlcy4NCiAgICArICogDQogICAgKyAqIEByZXR1cm4gdGhlIG5ld2x5
IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0Lg0KICAgICsgKi8NCiAgICArWVlfQlVGRkVS
X1NUQVRFIHl5X3NjYW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5
dGVzX2xlbiApDQogICAgK3sNCiAgICArCVlZX0JVRkZFUl9TVEFURSBiOw0KICAgICsJY2hhciAq
YnVmOw0KICAgICsJeXlfc2l6ZV90IG47DQogICAgKwlpbnQgaTsNCiAgICArICAgIA0KICAgICsJ
LyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxp
bmcgRU9CJ3MuICovDQogICAgKwluID0gKHl5X3NpemVfdCkgKF95eWJ5dGVzX2xlbiArIDIpOw0K
ICAgICsJYnVmID0gKGNoYXIgKikgeXlhbGxvYyhuICApOw0KICAgICsJaWYgKCAhIGJ1ZiApDQog
ICAgKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9i
eXRlcygpIiApOw0KICAgICsNCiAgICArCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyAr
K2kgKQ0KICAgICsJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07DQogICAgKw0KICAgICsJYnVmW195eWJ5
dGVzX2xlbl0gPSBidWZbX3l5Ynl0ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOw0K
ICAgICsNCiAgICArCWIgPSB5eV9zY2FuX2J1ZmZlcihidWYsbiApOw0KICAgICsJaWYgKCAhIGIg
KQ0KICAgICsJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCki
ICk7DQogICAgKw0KICAgICsJLyogSXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwg
YW5kIHdlIHNob3VsZCB0aHJvdyBpdA0KICAgICsJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuDQog
ICAgKwkgKi8NCiAgICArCWItPnl5X2lzX291cl9idWZmZXIgPSAxOw0KICAgICsNCiAgICArCXJl
dHVybiBiOw0KICAgICt9DQogICAgKw0KICAgICsjaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQ0KICAg
ICsjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArc3Rh
dGljIHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgKQ0K
ICAgICt7DQogICAgKwkJCSh2b2lkKSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7DQog
ICAgKwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogUmVk
ZWZpbmUgeXlsZXNzKCkgc28gaXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovDQogICAgKw0K
ICAgICsjdW5kZWYgeXlsZXNzDQogICAgKyNkZWZpbmUgeXlsZXNzKG4pIFwNCiAgICArCWRvIFwN
CiAgICArCQl7IFwNCiAgICArCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQu
ICovIFwNCiAgICArICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXA0KICAgICsg
ICAgICAgIFlZX0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wNCiAgICArCQl5eXRleHRb
eXlsZW5nXSA9ICh5eV9ob2xkX2NoYXIpOyBcDQogICAgKwkJKHl5X2NfYnVmX3ApID0geXl0ZXh0
ICsgeXlsZXNzX21hY3JvX2FyZzsgXA0KICAgICsJCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1
Zl9wKTsgXA0KICAgICsJCSooeXlfY19idWZfcCkgPSAnXDAnOyBcDQogICAgKwkJeXlsZW5nID0g
eXlsZXNzX21hY3JvX2FyZzsgXA0KICAgICsJCX0gXA0KICAgICsJd2hpbGUgKCAwICkNCiAgICAr
DQogICAgKy8qIEFjY2Vzc29yICBtZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0
IG1lbWJlcnMuICovDQogICAgKw0KICAgICsvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVy
Lg0KICAgICsgKiANCiAgICArICovDQogICAgK2ludCB5eWdldF9saW5lbm8gICh2b2lkKQ0KICAg
ICt7DQogICAgKyAgICANCiAgICArICAgIHJldHVybiB5eWxpbmVubzsNCiAgICArfQ0KICAgICsN
CiAgICArLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLg0KICAgICsgKiANCiAgICArICovDQogICAg
K0ZJTEUgKnl5Z2V0X2luICAodm9pZCkNCiAgICArew0KICAgICsgICAgICAgIHJldHVybiB5eWlu
Ow0KICAgICt9DQogICAgKw0KICAgICsvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLg0KICAgICsg
KiANCiAgICArICovDQogICAgK0ZJTEUgKnl5Z2V0X291dCAgKHZvaWQpDQogICAgK3sNCiAgICAr
ICAgICAgICByZXR1cm4geXlvdXQ7DQogICAgK30NCiAgICArDQogICAgKy8qKiBHZXQgdGhlIGxl
bmd0aCBvZiB0aGUgY3VycmVudCB0b2tlbi4NCiAgICArICogDQogICAgKyAqLw0KICAgICtpbnQg
eXlnZXRfbGVuZyAgKHZvaWQpDQogICAgK3sNCiAgICArICAgICAgICByZXR1cm4geXlsZW5nOw0K
ICAgICt9DQogICAgKw0KICAgICsvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLg0KICAgICsgKiAN
CiAgICArICovDQogICAgKw0KICAgICtjaGFyICp5eWdldF90ZXh0ICAodm9pZCkNCiAgICArew0K
ICAgICsgICAgICAgIHJldHVybiB5eXRleHQ7DQogICAgK30NCiAgICArDQogICAgKy8qKiBTZXQg
dGhlIGN1cnJlbnQgbGluZSBudW1iZXIuDQogICAgKyAqIEBwYXJhbSBfbGluZV9udW1iZXIgbGlu
ZSBudW1iZXINCiAgICArICogDQogICAgKyAqLw0KICAgICt2b2lkIHl5c2V0X2xpbmVubyAoaW50
ICBfbGluZV9udW1iZXIgKQ0KICAgICt7DQogICAgKyAgICANCiAgICArICAgIHl5bGluZW5vID0g
X2xpbmVfbnVtYmVyOw0KICAgICt9DQogICAgKw0KICAgICsvKiogU2V0IHRoZSBpbnB1dCBzdHJl
YW0uIFRoaXMgZG9lcyBub3QgZGlzY2FyZCB0aGUgY3VycmVudA0KICAgICsgKiBpbnB1dCBidWZm
ZXIuDQogICAgKyAqIEBwYXJhbSBfaW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLg0KICAgICsgKiAN
CiAgICArICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyDQogICAgKyAqLw0KICAgICt2b2lkIHl5
c2V0X2luIChGSUxFICogIF9pbl9zdHIgKQ0KICAgICt7DQogICAgKyAgICAgICAgeXlpbiA9IF9p
bl9zdHIgOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIHl5c2V0X291dCAoRklMRSAqICBfb3V0
X3N0ciApDQogICAgK3sNCiAgICArICAgICAgICB5eW91dCA9IF9vdXRfc3RyIDsNCiAgICArfQ0K
ICAgICsNCiAgICAraW50IHl5Z2V0X2RlYnVnICAodm9pZCkNCiAgICArew0KICAgICsgICAgICAg
IHJldHVybiB5eV9mbGV4X2RlYnVnOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIHl5c2V0X2Rl
YnVnIChpbnQgIF9iZGVidWcgKQ0KICAgICt7DQogICAgKyAgICAgICAgeXlfZmxleF9kZWJ1ZyA9
IF9iZGVidWcgOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFs
cyAodm9pZCkNCiAgICArew0KICAgICsgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBz
YW1lIGFzIGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLg0KICAgICsgICAgICogVGhpcyBm
dW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRl
IGhlcmUuDQogICAgKyAgICAgKi8NCiAgICArDQogICAgKyAgICAvKiBXZSBkbyBub3QgdG91Y2gg
eXlsaW5lbm8gdW5sZXNzIHRoZSBvcHRpb24gaXMgZW5hYmxlZC4gKi8NCiAgICArICAgIHl5bGlu
ZW5vID0gIDE7DQogICAgKyAgICANCiAgICArICAgICh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsN
CiAgICArICAgICh5eV9idWZmZXJfc3RhY2tfdG9wKSA9IDA7DQogICAgKyAgICAoeXlfYnVmZmVy
X3N0YWNrX21heCkgPSAwOw0KICAgICsgICAgKHl5X2NfYnVmX3ApID0gTlVMTDsNCiAgICArICAg
ICh5eV9pbml0KSA9IDA7DQogICAgKyAgICAoeXlfc3RhcnQpID0gMDsNCiAgICArDQogICAgKy8q
IERlZmluZWQgaW4gbWFpbi5jICovDQogICAgKyNpZmRlZiBZWV9TVERJTklUDQogICAgKyAgICB5
eWluID0gc3RkaW47DQogICAgKyAgICB5eW91dCA9IHN0ZG91dDsNCiAgICArI2Vsc2UNCiAgICAr
ICAgIHl5aW4gPSBOVUxMOw0KICAgICsgICAgeXlvdXQgPSBOVUxMOw0KICAgICsjZW5kaWYNCiAg
ICArDQogICAgKyAgICAvKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9y
LCBzaW5jZSB3ZSBhcmUgY2FsbGVkIGJ5DQogICAgKyAgICAgKiB5eWxleF9pbml0KCkNCiAgICAr
ICAgICAqLw0KICAgICsgICAgcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKy8qIHl5bGV4
X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJz
LiAqLw0KICAgICtpbnQgeXlsZXhfZGVzdHJveSAgKHZvaWQpDQogICAgK3sNCiAgICArICAgIA0K
ICAgICsgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50
LiAqLw0KICAgICsJd2hpbGUoWVlfQ1VSUkVOVF9CVUZGRVIpew0KICAgICsJCXl5X2RlbGV0ZV9i
dWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIgICk7DQogICAgKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0gTlVMTDsNCiAgICArCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsNCiAgICArCX0NCiAgICAr
DQogICAgKwkvKiBEZXN0cm95IHRoZSBzdGFjayBpdHNlbGYuICovDQogICAgKwl5eWZyZWUoKHl5
X2J1ZmZlcl9zdGFjaykgKTsNCiAgICArCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsNCiAgICAr
DQogICAgKyAgICAvKiBSZXNldCB0aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBu
b24tcmVlbnRyYW50IHNjYW5uZXIgc28gdGhlIG5leHQgdGltZQ0KICAgICsgICAgICogeXlsZXgo
KSBpcyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovDQogICAgKyAgICB5eV9p
bml0X2dsb2JhbHMoICk7DQogICAgKw0KICAgICsgICAgcmV0dXJuIDA7DQogICAgK30NCiAgICAr
DQogICAgKy8qDQogICAgKyAqIEludGVybmFsIHV0aWxpdHkgcm91dGluZXMuDQogICAgKyAqLw0K
ICAgICsNCiAgICArI2lmbmRlZiB5eXRleHRfcHRyDQogICAgK3N0YXRpYyB2b2lkIHl5X2ZsZXhf
c3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiApDQogICAgK3sNCiAg
ICArCQkNCiAgICArCWludCBpOw0KICAgICsJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQ0KICAg
ICsJCXMxW2ldID0gczJbaV07DQogICAgK30NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWZk
ZWYgWVlfTkVFRF9TVFJMRU4NCiAgICArc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25z
dCBjaGFyICogcyApDQogICAgK3sNCiAgICArCWludCBuOw0KICAgICsJZm9yICggbiA9IDA7IHNb
bl07ICsrbiApDQogICAgKwkJOw0KICAgICsNCiAgICArCXJldHVybiBuOw0KICAgICt9DQogICAg
KyNlbmRpZg0KICAgICsNCiAgICArdm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXplICkNCiAg
ICArew0KICAgICsJCQlyZXR1cm4gbWFsbG9jKHNpemUpOw0KICAgICt9DQogICAgKw0KICAgICt2
b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9zaXplX3QgIHNpemUgKQ0KICAgICt7DQog
ICAgKwkJDQogICAgKwkvKiBUaGUgY2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFj
Y29tbW9kYXRlcyBib3RoDQogICAgKwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciog
Z2VuZXJpYyBwb2ludGVycywgYW5kIHRob3NlDQogICAgKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5l
cmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyDQogICAgKwkgKiBiZWNhdXNl
IGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tDQogICAg
KwkgKiBhbnkgcG9pbnRlciB0eXBlIHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNv
bnZlcnNpb25zDQogICAgKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4NCiAgICAr
CSAqLw0KICAgICsJcmV0dXJuIHJlYWxsb2MocHRyLCBzaXplKTsNCiAgICArfQ0KICAgICsNCiAg
ICArdm9pZCB5eWZyZWUgKHZvaWQgKiBwdHIgKQ0KICAgICt7DQogICAgKwkJCWZyZWUoIChjaGFy
ICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8NCiAgICAr
fQ0KICAgICsNCiAgICArI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyINCiAgICArDQog
ICAgK3N0YXRpYyBjaGFyICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNpemVfdCBuKQ0K
ICAgICt7DQogICAgKwljaGFyICpvdXQ7DQogICAgKwlpbnQgYzsNCiAgICArCWNoYXIgYzI7DQog
ICAgKwljb25zdCBjaGFyICpyZXN0LCAqZW5kOw0KICAgICsNCiAgICArCW5ld19zdHJpbmcoKTsN
CiAgICArCWFwcGVuZF9zdHJpbmcoaW4sIG4pOw0KICAgICsNCiAgICArCS8qIGdldCB0aGUgd2hv
bGUgbGluZSBiZWNhdXNlIHdlIGRvIG5vdCBrbm93IHRoZSBlbmQgb2YgdG9rZW4uICovDQogICAg
Kwl3aGlsZSAoKGMgPSBpbnB1dCgpKSAhPSBFT0YpIHsNCiAgICArCQlpZiAoYyA9PSAnXG4nKSB7
DQogICAgKwkJCXVucHV0KGMpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJYzIg
PSBjOw0KICAgICsJCWFwcGVuZF9zdHJpbmcoJmMyLCAxKTsNCiAgICArCX0NCiAgICArDQogICAg
KwlyZXN0ID0gdGV4dDsNCiAgICArCW91dCA9IGV4cGFuZF9vbmVfdG9rZW4oJnJlc3QpOw0KICAg
ICsNCiAgICArCS8qIHB1c2ggYmFjayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5wdXQgc3Ry
ZWFtICovDQogICAgKwllbmQgPSByZXN0ICsgc3RybGVuKHJlc3QpOw0KICAgICsJd2hpbGUgKGVu
ZCA+IHJlc3QpDQogICAgKwkJdW5wdXQoKi0tZW5kKTsNCiAgICArDQogICAgKwlmcmVlKHRleHQp
Ow0KICAgICsNCiAgICArCXJldHVybiBvdXQ7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2
b2lkIGFwcGVuZF9leHBhbmRlZF9zdHJpbmcoY29uc3QgY2hhciAqc3RyKQ0KICAgICt7DQogICAg
Kwljb25zdCBjaGFyICplbmQ7DQogICAgKwljaGFyICpyZXM7DQogICAgKw0KICAgICsJc3RyKys7
DQogICAgKw0KICAgICsJcmVzID0gZXhwYW5kX2RvbGxhcigmc3RyKTsNCiAgICArDQogICAgKwkv
KiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLw0KICAg
ICsJZW5kID0gc3RyICsgc3RybGVuKHN0cik7DQogICAgKwl3aGlsZSAoZW5kID4gc3RyKQ0KICAg
ICsJCXVucHV0KCotLWVuZCk7DQogICAgKw0KICAgICsJYXBwZW5kX3N0cmluZyhyZXMsIHN0cmxl
bihyZXMpKTsNCiAgICArDQogICAgKwlmcmVlKHJlcyk7DQogICAgK30NCiAgICArDQogICAgK3Zv
aWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpDQogICAgK3sNCiAgICArCW5ld19zdHJpbmcoKTsNCiAg
ICArCWxhc3RfdHMgPSBmaXJzdF90cyA9IDA7DQogICAgKwlCRUdJTihIRUxQKTsNCiAgICArfQ0K
ICAgICsNCiAgICArc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKQ0KICAgICt7DQogICAg
Kwl5eWx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICArCUJFR0lOKElOSVRJQUwpOw0KICAgICt9DQog
ICAgKw0KICAgICsvKg0KICAgICsgKiBUcnkgdG8gb3BlbiBzcGVjaWZpZWQgZmlsZSB3aXRoIGZv
bGxvd2luZyBuYW1lczoNCiAgICArICogLi9uYW1lDQogICAgKyAqICQoc3JjdHJlZSkvbmFtZQ0K
ICAgICsgKiBUaGUgbGF0dGVyIGlzIHVzZWQgd2hlbiBzcmN0cmVlIGlzIHNlcGFyYXRlIGZyb20g
b2JqdHJlZQ0KICAgICsgKiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLg0KICAgICsgKiBSZXR1
cm4gTlVMTCBpZiBmaWxlIGlzIG5vdCBmb3VuZC4NCiAgICArICovDQogICAgK0ZJTEUgKnpjb25m
X2ZvcGVuKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgK3sNCiAgICArCWNoYXIgKmVudiwgZnVsbG5h
bWVbUEFUSF9NQVgrMV07DQogICAgKwlGSUxFICpmOw0KICAgICsNCiAgICArCWYgPSBmb3Blbihu
YW1lLCAiciIpOw0KICAgICsJaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcv
Jykgew0KICAgICsJCWVudiA9IGdldGVudihTUkNUUkVFKTsNCiAgICArCQlpZiAoZW52KSB7DQog
ICAgKwkJCXNwcmludGYoZnVsbG5hbWUsICIlcy8lcyIsIGVudiwgbmFtZSk7DQogICAgKwkJCWYg
PSBmb3BlbihmdWxsbmFtZSwgInIiKTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKwlyZXR1cm4g
ZjsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpu
YW1lKQ0KICAgICt7DQogICAgKwl5eWluID0gemNvbmZfZm9wZW4obmFtZSk7DQogICAgKwlpZiAo
IXl5aW4pIHsNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgImNhbid0IGZpbmQgZmlsZSAlc1xuIiwg
bmFtZSk7DQogICAgKwkJZXhpdCgxKTsNCiAgICArCX0NCiAgICArDQogICAgKwljdXJyZW50X2J1
ZiA9IHhtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1ZikpOw0KICAgICsJbWVtc2V0KGN1cnJlbnRf
YnVmLCAwLCBzaXplb2YoKmN1cnJlbnRfYnVmKSk7DQogICAgKw0KICAgICsJY3VycmVudF9maWxl
ID0gZmlsZV9sb29rdXAobmFtZSk7DQogICAgKwl5eWxpbmVubyA9IDE7DQogICAgK30NCiAgICAr
DQogICAgK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0KICAg
ICsJc3RydWN0IGZpbGUgKml0ZXI7DQogICAgKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZpbGVfbG9v
a3VwKG5hbWUpOw0KICAgICsJc3RydWN0IGJ1ZmZlciAqYnVmID0geG1hbGxvYyhzaXplb2YoKmJ1
ZikpOw0KICAgICsJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKCpidWYpKTsNCiAgICArDQogICAgKwlj
dXJyZW50X2J1Zi0+c3RhdGUgPSBZWV9DVVJSRU5UX0JVRkZFUjsNCiAgICArCXl5aW4gPSB6Y29u
Zl9mb3BlbihmaWxlLT5uYW1lKTsNCiAgICArCWlmICgheXlpbikgew0KICAgICsJCWZwcmludGYo
c3RkZXJyLCAiJXM6JWQ6IGNhbid0IG9wZW4gZmlsZSBcIiVzXCJcbiIsDQogICAgKwkJCXpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksIGZpbGUtPm5hbWUpOw0KICAgICsJCWV4aXQoMSk7
DQogICAgKwl9DQogICAgKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlp
bixZWV9CVUZfU0laRSkpOw0KICAgICsJYnVmLT5wYXJlbnQgPSBjdXJyZW50X2J1ZjsNCiAgICAr
CWN1cnJlbnRfYnVmID0gYnVmOw0KICAgICsNCiAgICArCWN1cnJlbnRfZmlsZS0+bGluZW5vID0g
eXlsaW5lbm87DQogICAgKwlmaWxlLT5wYXJlbnQgPSBjdXJyZW50X2ZpbGU7DQogICAgKw0KICAg
ICsJZm9yIChpdGVyID0gY3VycmVudF9maWxlOyBpdGVyOyBpdGVyID0gaXRlci0+cGFyZW50KSB7
DQogICAgKwkJaWYgKCFzdHJjbXAoaXRlci0+bmFtZSwgZmlsZS0+bmFtZSkpIHsNCiAgICArCQkJ
ZnByaW50ZihzdGRlcnIsDQogICAgKwkJCQkiUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC5c
biINCiAgICArCQkJCSJJbmNsdXNpb24gcGF0aDpcbiINCiAgICArCQkJCSIgIGN1cnJlbnQgZmls
ZSA6ICVzXG4iLCBmaWxlLT5uYW1lKTsNCiAgICArCQkJaXRlciA9IGZpbGU7DQogICAgKwkJCWRv
IHsNCiAgICArCQkJCWl0ZXIgPSBpdGVyLT5wYXJlbnQ7DQogICAgKwkJCQlmcHJpbnRmKHN0ZGVy
ciwgIiAgaW5jbHVkZWQgZnJvbTogJXM6JWRcbiIsDQogICAgKwkJCQkJaXRlci0+bmFtZSwgaXRl
ci0+bGluZW5vIC0gMSk7DQogICAgKwkJCX0gd2hpbGUgKHN0cmNtcChpdGVyLT5uYW1lLCBmaWxl
LT5uYW1lKSk7DQogICAgKwkJCWV4aXQoMSk7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAg
ICArCXl5bGluZW5vID0gMTsNCiAgICArCWN1cnJlbnRfZmlsZSA9IGZpbGU7DQogICAgK30NCiAg
ICArDQogICAgK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkNCiAgICArew0KICAgICsJ
c3RydWN0IGJ1ZmZlciAqcGFyZW50Ow0KICAgICsNCiAgICArCWN1cnJlbnRfZmlsZSA9IGN1cnJl
bnRfZmlsZS0+cGFyZW50Ow0KICAgICsJaWYgKGN1cnJlbnRfZmlsZSkNCiAgICArCQl5eWxpbmVu
byA9IGN1cnJlbnRfZmlsZS0+bGluZW5vOw0KICAgICsNCiAgICArCXBhcmVudCA9IGN1cnJlbnRf
YnVmLT5wYXJlbnQ7DQogICAgKwlpZiAocGFyZW50KSB7DQogICAgKwkJZmNsb3NlKHl5aW4pOw0K
ICAgICsJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOw0KICAgICsJCXl5X3N3
aXRjaF90b19idWZmZXIocGFyZW50LT5zdGF0ZSk7DQogICAgKwl9DQogICAgKwlmcmVlKGN1cnJl
bnRfYnVmKTsNCiAgICArCWN1cnJlbnRfYnVmID0gcGFyZW50Ow0KICAgICt9DQogICAgKw0KICAg
ICtpbnQgemNvbmZfbGluZW5vKHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiBjdXJyZW50X3Bv
cy5saW5lbm87DQogICAgK30NCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUo
dm9pZCkNCiAgICArew0KICAgICsJcmV0dXJuIGN1cnJlbnRfcG9zLmZpbGUgPyBjdXJyZW50X3Bv
cy5maWxlLT5uYW1lIDogIjxub25lPiI7DQogICAgK30NCiAgICArDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L3pj
b25mLnRhYi5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5k
MWNmYmNiDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
emNvbmYudGFiLmMNCiAgICBAQCAtMCwwICsxLDI1MDQgQEANCiAgICArLyogQSBCaXNvbiBwYXJz
ZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMC40LiAgKi8NCiAgICArDQogICAgKy8qIEJpc29uIGlt
cGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDDQogICAgKw0KICAgICsgICBD
b3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAwMC0yMDE1IEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLg0KICAgICsNCiAgICArICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh
cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiAgICArICAgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkNCiAgICArICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNp
b24gMyBvZiB0aGUgTGljZW5zZSwgb3INCiAgICArICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4NCiAgICArDQogICAgKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICAgICsgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KICAgICsg
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlDQogICAgKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuDQogICAgKw0KICAgICsgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICAgICsgICBhbG9uZyB3aXRoIHRoaXMgcHJv
Z3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovDQog
ICAgKw0KICAgICsvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMNCiAgICArICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29u
IHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsNCiAgICArICAgdW5kZXIg
dGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMgdGhhdCB3b3JrIGlzbid0IGl0c2VsZiBh
DQogICAgKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZp
ZWQgdmVyc2lvbiB0aGVyZW9mDQogICAgKyAgIGFzIGEgcGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJu
YXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3RyaWJ1dGUNCiAgICArICAgdGhlIHBhcnNl
ciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSByZW1vdmUgdGhpcw0K
ICAgICsgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24g
YW5kIHRoZSByZXN1bHRpbmcNCiAgICArICAgQmlzb24gb3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vu
c2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMNCiAgICArICAgTGljZW5zZSB3aXRob3V0
IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uDQogICAgKw0KICAgICsgICBUaGlzIHNwZWNpYWwgZXhj
ZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluDQogICAg
KyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8NCiAgICArDQogICAgKy8qIEMgTEFMUigxKSBw
YXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQ0KICAgICsgICBz
aW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVkICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8N
CiAgICArDQogICAgKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdp
dGggeXkgb3IgWVksIHRvIGF2b2lkDQogICAgKyAgIGluZnJpbmdpbmcgb24gdXNlciBuYW1lIHNw
YWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZvciBsb2NhbA0KICAgICsgICB2YXJpYWJs
ZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLg0K
ICAgICsgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhpbiBpbmNs
dWRlIGZpbGVzIHRvDQogICAgKyAgIGRlZmluZSBuZWNlc3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0
aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9ODQogICAgKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVs
b3cuICAqLw0KICAgICsNCiAgICArLyogSWRlbnRpZnkgQmlzb24gb3V0cHV0LiAgKi8NCiAgICAr
I2RlZmluZSBZWUJJU09OIDENCiAgICArDQogICAgKy8qIEJpc29uIHZlcnNpb24uICAqLw0KICAg
ICsjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4wLjQiDQogICAgKw0KICAgICsvKiBTa2VsZXRv
biBuYW1lLiAgKi8NCiAgICArI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyINCiAgICAr
DQogICAgKy8qIFB1cmUgcGFyc2Vycy4gICovDQogICAgKyNkZWZpbmUgWVlQVVJFIDANCiAgICAr
DQogICAgKy8qIFB1c2ggcGFyc2Vycy4gICovDQogICAgKyNkZWZpbmUgWVlQVVNIIDANCiAgICAr
DQogICAgKy8qIFB1bGwgcGFyc2Vycy4gICovDQogICAgKyNkZWZpbmUgWVlQVUxMIDENCiAgICAr
DQogICAgKw0KICAgICsNCiAgICArDQogICAgKy8qIENvcHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNl
ciBkZWNsYXJhdGlvbnMuICAqLw0KICAgICsNCiAgICArDQogICAgKy8qDQogICAgKyAqIENvcHly
aWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAr
ICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAgKyAq
Lw0KICAgICsNCiAgICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKyNpbmNsdWRlIDxzdGRhcmcu
aD4NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAg
ICArI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0KICAgICsN
CiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsNCiAgICArI2RlZmluZSBwcmludGQobWFzaywg
Zm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQ0KICAgICsNCiAgICArI2Rl
ZmluZSBQUklOVEQJCTB4MDAwMQ0KICAgICsjZGVmaW5lIERFQlVHX1BBUlNFCTB4MDAwMg0KICAg
ICsNCiAgICAraW50IGNkZWJ1ZyA9IFBSSU5URDsNCiAgICArDQogICAgK2ludCB5eWxleCh2b2lk
KTsNCiAgICArc3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICplcnIpOw0KICAgICtzdGF0
aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsNCiAgICArc3RhdGljIHZv
aWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOw0KICAgICtzdGF0aWMgYm9vbCB6
Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwg
aW50IGVuZHRva2VuKTsNCiAgICArDQogICAgK3N0cnVjdCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZ
TUJPTF9IQVNIU0laRV07DQogICAgKw0KICAgICtzdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRf
bWVudSwgKmN1cnJlbnRfZW50cnk7DQogICAgKw0KICAgICsNCiAgICArDQogICAgKw0KICAgICsj
IGlmbmRlZiBZWV9OVUxMUFRSDQogICAgKyMgIGlmIGRlZmluZWQgX19jcGx1c3BsdXMgJiYgMjAx
MTAzTCA8PSBfX2NwbHVzcGx1cw0KICAgICsjICAgZGVmaW5lIFlZX05VTExQVFIgbnVsbHB0cg0K
ICAgICsjICBlbHNlDQogICAgKyMgICBkZWZpbmUgWVlfTlVMTFBUUiAwDQogICAgKyMgIGVuZGlm
DQogICAgKyMgZW5kaWYNCiAgICArDQogICAgKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVz
c2FnZXMuICAqLw0KICAgICsjaWZkZWYgWVlFUlJPUl9WRVJCT1NFDQogICAgKyMgdW5kZWYgWVlF
UlJPUl9WRVJCT1NFDQogICAgKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxDQogICAgKyNlbHNl
DQogICAgKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAwDQogICAgKyNlbmRpZg0KICAgICsNCiAg
ICArDQogICAgKy8qIERlYnVnIHRyYWNlcy4gICovDQogICAgKyNpZm5kZWYgWVlERUJVRw0KICAg
ICsjIGRlZmluZSBZWURFQlVHIDENCiAgICArI2VuZGlmDQogICAgKyNpZiBZWURFQlVHDQogICAg
K2V4dGVybiBpbnQgeXlkZWJ1ZzsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiBUb2tlbiB0
eXBlLiAgKi8NCiAgICArI2lmbmRlZiBZWVRPS0VOVFlQRQ0KICAgICsjIGRlZmluZSBZWVRPS0VO
VFlQRQ0KICAgICsgIGVudW0geXl0b2tlbnR5cGUNCiAgICArICB7DQogICAgKyAgICBUX01BSU5N
RU5VID0gMjU4LA0KICAgICsgICAgVF9NRU5VID0gMjU5LA0KICAgICsgICAgVF9FTkRNRU5VID0g
MjYwLA0KICAgICsgICAgVF9TT1VSQ0UgPSAyNjEsDQogICAgKyAgICBUX0NIT0lDRSA9IDI2MiwN
CiAgICArICAgIFRfRU5EQ0hPSUNFID0gMjYzLA0KICAgICsgICAgVF9DT01NRU5UID0gMjY0LA0K
ICAgICsgICAgVF9DT05GSUcgPSAyNjUsDQogICAgKyAgICBUX01FTlVDT05GSUcgPSAyNjYsDQog
ICAgKyAgICBUX0hFTFAgPSAyNjcsDQogICAgKyAgICBUX0hFTFBURVhUID0gMjY4LA0KICAgICsg
ICAgVF9JRiA9IDI2OSwNCiAgICArICAgIFRfRU5ESUYgPSAyNzAsDQogICAgKyAgICBUX0RFUEVO
RFMgPSAyNzEsDQogICAgKyAgICBUX09QVElPTkFMID0gMjcyLA0KICAgICsgICAgVF9QUk9NUFQg
PSAyNzMsDQogICAgKyAgICBUX1RZUEUgPSAyNzQsDQogICAgKyAgICBUX0RFRkFVTFQgPSAyNzUs
DQogICAgKyAgICBUX1NFTEVDVCA9IDI3NiwNCiAgICArICAgIFRfSU1QTFkgPSAyNzcsDQogICAg
KyAgICBUX1JBTkdFID0gMjc4LA0KICAgICsgICAgVF9WSVNJQkxFID0gMjc5LA0KICAgICsgICAg
VF9PUFRJT04gPSAyODAsDQogICAgKyAgICBUX09OID0gMjgxLA0KICAgICsgICAgVF9XT1JEID0g
MjgyLA0KICAgICsgICAgVF9XT1JEX1FVT1RFID0gMjgzLA0KICAgICsgICAgVF9VTkVRVUFMID0g
Mjg0LA0KICAgICsgICAgVF9MRVNTID0gMjg1LA0KICAgICsgICAgVF9MRVNTX0VRVUFMID0gMjg2
LA0KICAgICsgICAgVF9HUkVBVEVSID0gMjg3LA0KICAgICsgICAgVF9HUkVBVEVSX0VRVUFMID0g
Mjg4LA0KICAgICsgICAgVF9DTE9TRV9QQVJFTiA9IDI4OSwNCiAgICArICAgIFRfT1BFTl9QQVJF
TiA9IDI5MCwNCiAgICArICAgIFRfRU9MID0gMjkxLA0KICAgICsgICAgVF9WQVJJQUJMRSA9IDI5
MiwNCiAgICArICAgIFRfQVNTSUdOID0gMjkzLA0KICAgICsgICAgVF9BU1NJR05fVkFMID0gMjk0
LA0KICAgICsgICAgVF9PUiA9IDI5NSwNCiAgICArICAgIFRfQU5EID0gMjk2LA0KICAgICsgICAg
VF9FUVVBTCA9IDI5NywNCiAgICArICAgIFRfTk9UID0gMjk4DQogICAgKyAgfTsNCiAgICArI2Vu
ZGlmDQogICAgKw0KICAgICsvKiBWYWx1ZSB0eXBlLiAgKi8NCiAgICArI2lmICEgZGVmaW5lZCBZ
WVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RFQ0xBUkVEDQogICAgKw0KICAgICt1bmlv
biBZWVNUWVBFDQogICAgK3sNCiAgICArDQogICAgKw0KICAgICsJY2hhciAqc3RyaW5nOw0KICAg
ICsJc3RydWN0IGZpbGUgKmZpbGU7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7DQogICAg
KwlzdHJ1Y3QgZXhwciAqZXhwcjsNCiAgICArCXN0cnVjdCBtZW51ICptZW51Ow0KICAgICsJY29u
c3Qgc3RydWN0IGtjb25mX2lkICppZDsNCiAgICArCWVudW0gdmFyaWFibGVfZmxhdm9yIGZsYXZv
cjsNCiAgICArDQogICAgKw0KICAgICt9Ow0KICAgICsNCiAgICArdHlwZWRlZiB1bmlvbiBZWVNU
WVBFIFlZU1RZUEU7DQogICAgKyMgZGVmaW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxDQogICAgKyMg
ZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQ0KICAgICsjZW5kaWYNCiAgICArDQogICAgKw0K
ICAgICtleHRlcm4gWVlTVFlQRSB5eWx2YWw7DQogICAgKw0KICAgICtpbnQgeXlwYXJzZSAodm9p
ZCk7DQogICAgKw0KICAgICsNCiAgICArDQogICAgKy8qIENvcHkgdGhlIHNlY29uZCBwYXJ0IG9m
IHVzZXIgZGVjbGFyYXRpb25zLiAgKi8NCiAgICArDQogICAgKw0KICAgICsvKiBJbmNsdWRlIGtj
b25mX2lkLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0b2tlbiBjb25zdGFudHMuICovDQogICAg
KyNpbmNsdWRlICJrY29uZl9pZC5jIg0KICAgICsNCiAgICArDQogICAgKw0KICAgICsjaWZkZWYg
c2hvcnQNCiAgICArIyB1bmRlZiBzaG9ydA0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRl
ZiBZWVRZUEVfVUlOVDgNCiAgICArdHlwZWRlZiBZWVRZUEVfVUlOVDggeXl0eXBlX3VpbnQ4Ow0K
ICAgICsjZWxzZQ0KICAgICt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4Ow0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBZWVRZUEVfSU5UOA0KICAgICt0eXBlZGVmIFlZ
VFlQRV9JTlQ4IHl5dHlwZV9pbnQ4Ow0KICAgICsjZWxzZQ0KICAgICt0eXBlZGVmIHNpZ25lZCBj
aGFyIHl5dHlwZV9pbnQ4Ow0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBZWVRZUEVf
VUlOVDE2DQogICAgK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2Ow0KICAgICsj
ZWxzZQ0KICAgICt0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2Ow0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBZWVRZUEVfSU5UMTYNCiAgICArdHlwZWRlZiBZ
WVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2Ow0KICAgICsjZWxzZQ0KICAgICt0eXBlZGVmIHNob3J0
IGludCB5eXR5cGVfaW50MTY7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmbmRlZiBZWVNJ
WkVfVA0KICAgICsjIGlmZGVmIF9fU0laRV9UWVBFX18NCiAgICArIyAgZGVmaW5lIFlZU0laRV9U
IF9fU0laRV9UWVBFX18NCiAgICArIyBlbGlmIGRlZmluZWQgc2l6ZV90DQogICAgKyMgIGRlZmlu
ZSBZWVNJWkVfVCBzaXplX3QNCiAgICArIyBlbGlmICEgZGVmaW5lZCBZWVNJWkVfVA0KICAgICsj
ICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0K
ICAgICsjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90DQogICAgKyMgZWxzZQ0KICAgICsjICBkZWZp
bmUgWVlTSVpFX1QgdW5zaWduZWQgaW50DQogICAgKyMgZW5kaWYNCiAgICArI2VuZGlmDQogICAg
Kw0KICAgICsjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgoWVlTSVpFX1QpIC0xKQ0KICAgICsNCiAg
ICArI2lmbmRlZiBZWV8NCiAgICArIyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJM
RV9OTFMNCiAgICArIyAgaWYgRU5BQkxFX05MUw0KICAgICsjICAgaW5jbHVkZSA8bGliaW50bC5o
PiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovDQogICAgKyMgICBkZWZpbmUgWVlf
KE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUiLCBNc2dpZCkNCiAgICArIyAgZW5kaWYN
CiAgICArIyBlbmRpZg0KICAgICsjIGlmbmRlZiBZWV8NCiAgICArIyAgZGVmaW5lIFlZXyhNc2dp
ZCkgTXNnaWQNCiAgICArIyBlbmRpZg0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZm5kZWYg
WVlfQVRUUklCVVRFDQogICAgKyMgaWYgKGRlZmluZWQgX19HTlVDX18gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgICAgJiYgKDIgPCBfX0dO
VUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA5NiA8PSBfX0dOVUNfTUlOT1JfXykpKSAgXA0KICAg
ICsgICAgIHx8IGRlZmluZWQgX19TVU5QUk9fQyAmJiAweDUxMTAgPD0gX19TVU5QUk9fQw0KICAg
ICsjICBkZWZpbmUgWVlfQVRUUklCVVRFKFNwZWMpIF9fYXR0cmlidXRlX18oU3BlYykNCiAgICAr
IyBlbHNlDQogICAgKyMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3BlYykgLyogZW1wdHkgKi8NCiAg
ICArIyBlbmRpZg0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZm5kZWYgWVlfQVRUUklCVVRF
X1BVUkUNCiAgICArIyBkZWZpbmUgWVlfQVRUUklCVVRFX1BVUkUgICBZWV9BVFRSSUJVVEUgKChf
X3B1cmVfXykpDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmbmRlZiBZWV9BVFRSSUJVVEVf
VU5VU0VEDQogICAgKyMgZGVmaW5lIFlZX0FUVFJJQlVURV9VTlVTRUQgWVlfQVRUUklCVVRFICgo
X191bnVzZWRfXykpDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmICFkZWZpbmVkIF9Ob3Jl
dHVybiBcDQogICAgKyAgICAgJiYgKCFkZWZpbmVkIF9fU1REQ19WRVJTSU9OX18gfHwgX19TVERD
X1ZFUlNJT05fXyA8IDIwMTExMikNCiAgICArIyBpZiBkZWZpbmVkIF9NU0NfVkVSICYmIDEyMDAg
PD0gX01TQ19WRVINCiAgICArIyAgZGVmaW5lIF9Ob3JldHVybiBfX2RlY2xzcGVjIChub3JldHVy
bikNCiAgICArIyBlbHNlDQogICAgKyMgIGRlZmluZSBfTm9yZXR1cm4gWVlfQVRUUklCVVRFICgo
X19ub3JldHVybl9fKSkNCiAgICArIyBlbmRpZg0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8q
IFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5ncyBieSAidXNpbmciIEUuICAqLw0KICAg
ICsjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBfX0dOVUNfXw0KICAgICsjIGRlZmluZSBZ
WVVTRShFKSAoKHZvaWQpIChFKSkNCiAgICArI2Vsc2UNCiAgICArIyBkZWZpbmUgWVlVU0UoRSkg
LyogZW1wdHkgKi8NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWYgZGVmaW5lZCBfX0dOVUNf
XyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dOVUNfTUlOT1JfXw0KICAgICsvKiBTdXBw
cmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFs
aXplZC4gICovDQogICAgKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JF
R0lOIFwNCiAgICArICAgIF9QcmFnbWEgKCJHQ0MgZGlhZ25vc3RpYyBwdXNoIikgXA0KICAgICsg
ICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIp
XA0KICAgICsgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV21heWJlLXVu
aW5pdGlhbGl6ZWRcIiIpDQogICAgKyMgZGVmaW5lIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJ
WkVEX0VORCBcDQogICAgKyAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgcG9wIikNCiAgICAr
I2Vsc2UNCiAgICArIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgVmFsdWUNCiAgICAr
I2VuZGlmDQogICAgKyNpZm5kZWYgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4N
CiAgICArIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4NCiAgICAr
IyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EDQogICAgKyNlbmRpZg0K
ICAgICsjaWZuZGVmIFlZX0lOSVRJQUxfVkFMVUUNCiAgICArIyBkZWZpbmUgWVlfSU5JVElBTF9W
QUxVRShWYWx1ZSkgLyogTm90aGluZy4gKi8NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsNCiAg
ICArI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRQ0KICAgICsNCiAg
ICArLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVj
ZXNzYXJ5IHN5bWJvbHMuICAqLw0KICAgICsNCiAgICArIyBpZmRlZiBZWVNUQUNLX1VTRV9BTExP
Q0ENCiAgICArIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBDQogICAgKyMgICBpZmRlZiBfX0dOVUNf
Xw0KICAgICsjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2ENCiAgICAr
IyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1INCiAgICArIyAgICBpbmNsdWRl
IDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgICsjICAg
ZWxpZiBkZWZpbmVkIF9BSVgNCiAgICArIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9j
YQ0KICAgICsjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVSDQogICAgKyMgICAgaW5jbHVkZSA8bWFs
bG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8NCiAgICArIyAgICBkZWZp
bmUgYWxsb2NhIF9hbGxvY2ENCiAgICArIyAgIGVsc2UNCiAgICArIyAgICBkZWZpbmUgWVlTVEFD
S19BTExPQyBhbGxvY2ENCiAgICArIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9IICYmICEgZGVm
aW5lZCBFWElUX1NVQ0NFU1MNCiAgICArIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJ
TkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8NCiAgICArICAgICAgLyogVXNlIEVYSVRfU1VDQ0VT
UyBhcyBhIHdpdG5lc3MgZm9yIHN0ZGxpYi5oLiAgKi8NCiAgICArIyAgICAgaWZuZGVmIEVYSVRf
U1VDQ0VTUw0KICAgICsjICAgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwDQogICAgKyMgICAgIGVu
ZGlmDQogICAgKyMgICAgZW5kaWYNCiAgICArIyAgIGVuZGlmDQogICAgKyMgIGVuZGlmDQogICAg
KyMgZW5kaWYNCiAgICArDQogICAgKyMgaWZkZWYgWVlTVEFDS19BTExPQw0KICAgICsgICAvKiBQ
YWNpZnkgR0NDJ3MgJ2VtcHR5IGlmLWJvZHknIHdhcm5pbmcuICAqLw0KICAgICsjICBkZWZpbmUg
WVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3aGlsZSAoMCkNCiAgICArIyAg
aWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQ0KICAgICsgICAgLyogVGhlIE9TIG1pZ2h0IGd1
YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLA0K
ICAgICsgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBiZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVz
LiAgU28gd2UgY2Fubm90IHNhZmVseQ0KICAgICsgICAgICAgaW52b2tlIGFsbG9jYSAoTikgaWYg
TiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBzbWFsbGVyIG51bWJlcg0KICAgICsgICAg
ICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sg
c2xvdHMuICAqLw0KICAgICsjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8q
IHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLw0KICAgICsjICBlbmRpZg0KICAgICsjIGVsc2UNCiAg
ICArIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MNCiAgICArIyAgZGVmaW5lIFlZU1RB
Q0tfRlJFRSBZWUZSRUUNCiAgICArIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQ0KICAg
ICsjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQ0KICAgICsj
ICBlbmRpZg0KICAgICsjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJ
VF9TVUNDRVNTIFwNCiAgICArICAgICAgICYmICEgKChkZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmlu
ZWQgbWFsbG9jKSBcDQogICAgKyAgICAgICAgICAgICAmJiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVm
aW5lZCBmcmVlKSkpDQogICAgKyMgICBpbmNsdWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9O
IFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgICsjICAgaWZuZGVmIEVYSVRfU1VDQ0VTUw0KICAgICsj
ICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMA0KICAgICsjICAgZW5kaWYNCiAgICArIyAgZW5kaWYN
CiAgICArIyAgaWZuZGVmIFlZTUFMTE9DDQogICAgKyMgICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9j
DQogICAgKyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MN
CiAgICArdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8NCiAgICArIyAgIGVuZGlmDQogICAgKyMgIGVuZGlmDQogICAgKyMgIGlmbmRlZiBZ
WUZSRUUNCiAgICArIyAgIGRlZmluZSBZWUZSRUUgZnJlZQ0KICAgICsjICAgaWYgISBkZWZpbmVk
IGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUw0KICAgICt2b2lkIGZyZWUgKHZvaWQgKik7
IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8NCiAgICArIyAgIGVuZGlmDQogICAg
KyMgIGVuZGlmDQogICAgKyMgZW5kaWYNCiAgICArI2VuZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJm
bG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLw0KICAgICsNCiAgICArDQogICAgKyNpZiAoISBkZWZp
bmVkIHl5b3ZlcmZsb3cgXA0KICAgICsgICAgICYmICghIGRlZmluZWQgX19jcGx1c3BsdXMgXA0K
ICAgICsgICAgICAgICB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9J
U19UUklWSUFMKSkpDQogICAgKw0KICAgICsvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGln
bmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8NCiAgICArdW5pb24geXlhbGxvYw0KICAgICt7
DQogICAgKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7DQogICAgKyAgWVlTVFlQRSB5eXZzX2Fs
bG9jOw0KICAgICt9Ow0KICAgICsNCiAgICArLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2Fw
IGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8NCiAgICArIyBkZWZp
bmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpDQogICAg
Kw0KICAgICsvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBh
bGwgc3RhY2tzLCBlYWNoIHdpdGgNCiAgICArICAgTiBlbGVtZW50cy4gICovDQogICAgKyMgZGVm
aW5lIFlZU1RBQ0tfQllURVMoTikgXA0KICAgICsgICAgICgoTikgKiAoc2l6ZW9mICh5eXR5cGVf
aW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXA0KICAgICsgICAgICArIFlZU1RBQ0tfR0FQX01B
WElNVU0pDQogICAgKw0KICAgICsjIGRlZmluZSBZWUNPUFlfTkVFREVEIDENCiAgICArDQogICAg
Ky8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBsb2NhdGlvbiB0byB0aGUgbmV3IG9uZS4g
IFRoZQ0KICAgICsgICBsb2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZl
IHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YNCiAgICArICAgZWxlbWVudHMgaW4gdGhlIHN0YWNr
LCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUNCiAgICArICAgc3RhY2su
ICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxpZ25lZCBsb2NhdGlvbiBmb3IgdGhlIG5l
eHQNCiAgICArICAgc3RhY2suICAqLw0KICAgICsjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0
YWNrX2FsbG9jLCBTdGFjaykgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICBk
byAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwNCiAgICArICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgICAgIFlZU0laRV9U
IHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
DQogICAgKyAgICAgICAgWVlDT1BZICgmeXlwdHItPlN0YWNrX2FsbG9jLCBTdGFjaywgeXlzaXpl
KTsgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgICAgICBTdGFjayA9ICZ5eXB0ci0+U3Rh
Y2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAg
ICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNpemVvZiAoKlN0YWNrKSArIFlZU1RBQ0tf
R0FQX01BWElNVU07IFwNCiAgICArICAgICAgICB5eXB0ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9m
ICgqeXlwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcDQogICAgKyAgICB3aGlsZSAoMCkNCiAgICArDQogICAgKyNlbmRpZg0KICAgICsNCiAgICAr
I2lmIGRlZmluZWQgWVlDT1BZX05FRURFRCAmJiBZWUNPUFlfTkVFREVEDQogICAgKy8qIENvcHkg
Q09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0byBEU1QuICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlv
biBkbw0KICAgICsgICBub3Qgb3ZlcmxhcC4gICovDQogICAgKyMgaWZuZGVmIFlZQ09QWQ0KICAg
ICsjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXw0KICAgICsjICAgZGVmaW5l
IFlZQ09QWShEc3QsIFNyYywgQ291bnQpIFwNCiAgICArICAgICAgX19idWlsdGluX21lbWNweSAo
RHN0LCBTcmMsIChDb3VudCkgKiBzaXplb2YgKCooU3JjKSkpDQogICAgKyMgIGVsc2UNCiAgICAr
IyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50KSAgICAgICAgICAgICAgXA0KICAgICsg
ICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAg
ICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAg
ICAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAg
ICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykgICBcDQogICAgKyAgICAg
ICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAgICAgICAgICAgIFwNCiAgICArICAgICAg
ICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgICB3
aGlsZSAoMCkNCiAgICArIyAgZW5kaWYNCiAgICArIyBlbmRpZg0KICAgICsjZW5kaWYgLyogIVlZ
Q09QWV9ORUVERUQgKi8NCiAgICArDQogICAgKy8qIFlZRklOQUwgLS0gU3RhdGUgbnVtYmVyIG9m
IHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovDQogICAgKyNkZWZpbmUgWVlGSU5BTCAgMTENCiAg
ICArLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlUQUJMRS4gICovDQogICAgKyNkZWZpbmUg
WVlMQVNUICAgMzMyDQogICAgKw0KICAgICsvKiBZWU5UT0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1p
bmFscy4gICovDQogICAgKyNkZWZpbmUgWVlOVE9LRU5TICA0NA0KICAgICsvKiBZWU5OVFMgLS0g
TnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovDQogICAgKyNkZWZpbmUgWVlOTlRTICA1Mw0KICAg
ICsvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLw0KICAgICsjZGVmaW5lIFlZTlJV
TEVTICAxMjkNCiAgICArLyogWVlOU1RBVEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLw0KICAg
ICsjZGVmaW5lIFlZTlNUQVRFUyAgMjExDQogICAgKw0KICAgICsvKiBZWVRSQU5TTEFURVtZWVhd
IC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0byBZWVggYXMgcmV0dXJuZWQNCiAgICAr
ICAgYnkgeXlsZXgsIHdpdGggb3V0LW9mLWJvdW5kcyBjaGVja2luZy4gICovDQogICAgKyNkZWZp
bmUgWVlVTkRFRlRPSyAgMg0KICAgICsjZGVmaW5lIFlZTUFYVVRPSyAgIDI5OA0KICAgICsNCiAg
ICArI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXA0KICAgICsgICgodW5zaWduZWQgaW50KSAoWVlYKSA8PSBZWU1B
WFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRFRlRPSykNCiAgICArDQogICAgKy8qIFlZ
VFJBTlNMQVRFW1RPS0VOLU5VTV0gLS0gU3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIFRP
S0VOLU5VTQ0KICAgICsgICBhcyByZXR1cm5lZCBieSB5eWxleCwgd2l0aG91dCBvdXQtb2YtYm91
bmRzIGNoZWNraW5nLiAgKi8NCiAgICArc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXRyYW5z
bGF0ZVtdID0NCiAgICArew0KICAgICsgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwN
CiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAg
ICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
DQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAg
ICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAg
ICAyLCAgICAgMywgICAgIDQsDQogICAgKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LA0KICAgICsgICAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwNCiAgICArICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwg
ICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsDQogICAgKyAgICAgIDM1LCAgICAzNiwgICAgMzcs
ICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMNCiAgICArfTsNCiAgICAr
DQogICAgKyNpZiBZWURFQlVHDQogICAgKyAgLyogWVlSTElORVtZWU5dIC0tIFNvdXJjZSBsaW5l
IHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovDQogICAgK3N0YXRpYyBjb25z
dCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9DQogICAgK3sNCiAgICArICAgICAgIDAsICAgMTE0
LCAgIDExNCwgICAxMTQsICAgMTE2LCAgIDExNiwgICAxMjAsICAgMTI1LCAgIDEyNywgICAxMjgs
DQogICAgKyAgICAgMTI5LCAgIDEzMCwgICAxMzEsICAgMTMyLCAgIDEzNiwgICAxNDAsICAgMTQw
LCAgIDE0MCwgICAxNDAsICAgMTQwLA0KICAgICsgICAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0
MCwgICAxNDQsICAgMTQ1LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OSwNCiAgICArICAgICAx
NTAsICAgMTU0LCAgIDE1NSwgICAxNjEsICAgMTY4LCAgIDE3MywgICAxODAsICAgMTg5LCAgIDE5
MSwgICAxOTIsDQogICAgKyAgICAgMTkzLCAgIDE5NCwgICAxOTUsICAgMTk2LCAgIDE5OSwgICAy
MDcsICAgMjEzLCAgIDIyMywgICAyMjksICAgMjM1LA0KICAgICsgICAgIDI0MSwgICAyNDQsICAg
MjQ2LCAgIDI1OSwgICAyNjAsICAgMjY1LCAgIDI3NSwgICAyODAsICAgMjg4LCAgIDI5MSwNCiAg
ICArICAgICAyOTMsICAgMjk0LCAgIDI5NSwgICAyOTYsICAgMjk3LCAgIDMwMCwgICAzMDYsICAg
MzE3LCAgIDMyMywgICAzMzMsDQogICAgKyAgICAgMzM1LCAgIDM0MCwgICAzNDgsICAgMzU2LCAg
IDM1OSwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjgsICAgMzc1LA0KICAgICsgICAgIDM4MCwg
ICAzODgsICAgMzkxLCAgIDM5MywgICAzOTQsICAgMzk1LCAgIDM5OCwgICA0MDcsICAgNDE0LCAg
IDQxOSwNCiAgICArICAgICA0MjUsICAgNDQzLCAgIDQ0NSwgICA0NDYsICAgNDQ3LCAgIDQ1MCwg
ICA0NTgsICAgNDYwLCAgIDQ2MSwgICA0NjQsDQogICAgKyAgICAgNDcxLCAgIDQ3MywgICA0Nzgs
ICAgNDc5LCAgIDQ4MiwgICA0ODMsICAgNDg0LCAgIDQ4OCwgICA0ODksICAgNDkyLA0KICAgICsg
ICAgIDQ5MywgICA0OTYsICAgNDk3LCAgIDQ5OCwgICA0OTksICAgNTAwLCAgIDUwMSwgICA1MDIs
ICAgNTAzLCAgIDUwNCwNCiAgICArICAgICA1MDUsICAgNTA2LCAgIDUxMCwgICA1MTIsICAgNTEz
LCAgIDUxNiwgICA1MTcsICAgNTIxLCAgIDUyNCwgICA1MjUNCiAgICArfTsNCiAgICArI2VuZGlm
DQogICAgKw0KICAgICsjaWYgWVlERUJVRyB8fCBZWUVSUk9SX1ZFUkJPU0UgfHwgMA0KICAgICsv
KiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9M
LU5VTS4NCiAgICArICAgRmlyc3QsIHRoZSB0ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZ
TlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8NCiAgICArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0
IHl5dG5hbWVbXSA9DQogICAgK3sNCiAgICArICAiJGVuZCIsICJlcnJvciIsICIkdW5kZWZpbmVk
IiwgIlRfTUFJTk1FTlUiLCAiVF9NRU5VIiwgIlRfRU5ETUVOVSIsDQogICAgKyAgIlRfU09VUkNF
IiwgIlRfQ0hPSUNFIiwgIlRfRU5EQ0hPSUNFIiwgIlRfQ09NTUVOVCIsICJUX0NPTkZJRyIsDQog
ICAgKyAgIlRfTUVOVUNPTkZJRyIsICJUX0hFTFAiLCAiVF9IRUxQVEVYVCIsICJUX0lGIiwgIlRf
RU5ESUYiLCAiVF9ERVBFTkRTIiwNCiAgICArICAiVF9PUFRJT05BTCIsICJUX1BST01QVCIsICJU
X1RZUEUiLCAiVF9ERUZBVUxUIiwgIlRfU0VMRUNUIiwgIlRfSU1QTFkiLA0KICAgICsgICJUX1JB
TkdFIiwgIlRfVklTSUJMRSIsICJUX09QVElPTiIsICJUX09OIiwgIlRfV09SRCIsICJUX1dPUkRf
UVVPVEUiLA0KICAgICsgICJUX1VORVFVQUwiLCAiVF9MRVNTIiwgIlRfTEVTU19FUVVBTCIsICJU
X0dSRUFURVIiLCAiVF9HUkVBVEVSX0VRVUFMIiwNCiAgICArICAiVF9DTE9TRV9QQVJFTiIsICJU
X09QRU5fUEFSRU4iLCAiVF9FT0wiLCAiVF9WQVJJQUJMRSIsICJUX0FTU0lHTiIsDQogICAgKyAg
IlRfQVNTSUdOX1ZBTCIsICJUX09SIiwgIlRfQU5EIiwgIlRfRVFVQUwiLCAiVF9OT1QiLCAiJGFj
Y2VwdCIsICJpbnB1dCIsDQogICAgKyAgInN0YXJ0IiwgIm1haW5tZW51X3N0bXQiLCAic3RtdF9s
aXN0IiwgIm9wdGlvbl9uYW1lIiwgImNvbW1vbl9zdG10IiwNCiAgICArICAib3B0aW9uX2Vycm9y
IiwgImNvbmZpZ19lbnRyeV9zdGFydCIsICJjb25maWdfc3RtdCIsDQogICAgKyAgIm1lbnVjb25m
aWdfZW50cnlfc3RhcnQiLCAibWVudWNvbmZpZ19zdG10IiwgImNvbmZpZ19vcHRpb25fbGlzdCIs
DQogICAgKyAgImNvbmZpZ19vcHRpb24iLCAic3ltYm9sX29wdGlvbiIsICJzeW1ib2xfb3B0aW9u
X2xpc3QiLA0KICAgICsgICJzeW1ib2xfb3B0aW9uX2FyZyIsICJjaG9pY2UiLCAiY2hvaWNlX2Vu
dHJ5IiwgImNob2ljZV9lbmQiLA0KICAgICsgICJjaG9pY2Vfc3RtdCIsICJjaG9pY2Vfb3B0aW9u
X2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9pY2VfYmxvY2siLA0KICAgICsgICJpZl9lbnRy
eSIsICJpZl9lbmQiLCAiaWZfc3RtdCIsICJpZl9ibG9jayIsICJtZW51IiwgIm1lbnVfZW50cnki
LA0KICAgICsgICJtZW51X2VuZCIsICJtZW51X3N0bXQiLCAibWVudV9ibG9jayIsICJzb3VyY2Vf
c3RtdCIsICJjb21tZW50IiwNCiAgICArICAiY29tbWVudF9zdG10IiwgImhlbHBfc3RhcnQiLCAi
aGVscCIsICJkZXBlbmRzX2xpc3QiLCAiZGVwZW5kcyIsDQogICAgKyAgInZpc2liaWxpdHlfbGlz
dCIsICJ2aXNpYmxlIiwgInByb21wdF9zdG10X29wdCIsICJwcm9tcHQiLCAiZW5kIiwgIm5sIiwN
CiAgICArICAiaWZfZXhwciIsICJleHByIiwgIm5vbmNvbnN0X3N5bWJvbCIsICJzeW1ib2wiLCAi
d29yZF9vcHQiLA0KICAgICsgICJhc3NpZ25tZW50X3N0bXQiLCAiYXNzaWduX3ZhbCIsIFlZX05V
TExQVFINCiAgICArfTsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjIGlmZGVmIFlZUFJJTlQN
CiAgICArLyogWVlUT0tOVU1bTlVNXSAtLSAoRXh0ZXJuYWwpIHRva2VuIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvIHRoZQ0KICAgICsgICAoaW50ZXJuYWwpIHN5bWJvbCBudW1iZXIgTlVNICh3aGlj
aCBtdXN0IGJlIHRoYXQgb2YgYSB0b2tlbikuICAqLw0KICAgICtzdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQxNiB5eXRva251bVtdID0NCiAgICArew0KICAgICsgICAgICAgMCwgICAyNTYsICAgMjU3
LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIsICAgMjYzLCAgIDI2NCwNCiAgICAr
ICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAgMjY5LCAgIDI3MCwgICAyNzEsICAgMjcy
LCAgIDI3MywgICAyNzQsDQogICAgKyAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3
OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LA0KICAgICsgICAgIDI4NSwgICAy
ODYsICAgMjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTIsICAgMjkzLCAgIDI5
NCwNCiAgICArICAgICAyOTUsICAgMjk2LCAgIDI5NywgICAyOTgNCiAgICArfTsNCiAgICArIyBl
bmRpZg0KICAgICsNCiAgICArI2RlZmluZSBZWVBBQ1RfTklORiAtOTINCiAgICArDQogICAgKyNk
ZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlzdGF0ZSkgXA0KICAgICsgICghISgoWXlz
dGF0ZSkgPT0gKC05MikpKQ0KICAgICsNCiAgICArI2RlZmluZSBZWVRBQkxFX05JTkYgLTg5DQog
ICAgKw0KICAgICsjZGVmaW5lIHl5dGFibGVfdmFsdWVfaXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkg
XA0KICAgICsgIDANCiAgICArDQogICAgKyAgLyogWVlQQUNUW1NUQVRFLU5VTV0gLS0gSW5kZXgg
aW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nDQogICAgKyAgICAgU1RBVEUtTlVN
LiAgKi8NCiAgICArc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBhY3RbXSA9DQogICAgK3sN
CiAgICArICAgICAgMjEsICAgIDM4LCAgIC05MiwgICAgIDQsICAgLTkyLCAgIC05MiwgICAxNTcs
ICAgIDIzLCAgIC05MiwgICAtOTIsDQogICAgKyAgICAgLTE5LCAgIC05MiwgICAxOTEsICAgLTE2
LCAgICAzOCwgICAtMTMsICAgIDM4LCAgICAgNiwgICAgMjQsICAgIDM4LA0KICAgICsgICAgICA0
OCwgICAgNDgsICAgIDM0LCAgICA0MywgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTky
LCAgIC05MiwNCiAgICArICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAgOTYsICAgLTkyLCAgICA0
NCwgICAxMTEsICAgLTkyLCAgIC05MiwgICAtOTIsDQogICAgKyAgICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLA0KICAg
ICsgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgICA4MywNCiAgICArICAgICAtOTIsICAgIDg5LCAgIC05MiwgICAxMTYsICAg
LTkyLCAgIDEzMywgICAtOTIsICAgMTM0LCAgIDE0NiwgICAtOTIsDQogICAgKyAgICAgIDM0LCAg
ICAzNCwgICAxMTMsICAgLTkyLCAgICA3MywgICAtOTIsICAgMTUwLCAgICA2MiwgICAxNTEsICAg
IDMxLA0KICAgICsgICAgIDEyMywgICAyNTgsICAgMjkzLCAgIDI4MiwgICAgLTIsICAgMjgyLCAg
IDIyNSwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICArICAgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAgMzAsICAgLTkyLCAgIC05MiwgICAgMzQsICAgIDM0LCAgICA2NSwgICAgNjUsDQogICAgKyAg
ICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LCAgIC05MiwgICAtOTIsICAgMTUyLCAgIC05Miwg
ICAxNTMsICAgMTU0LA0KICAgICsgICAgIDExMCwgICAgMzgsICAgIDM4LCAgICAzNCwgICAgNDgs
ICAgIDQ4LCAgICA2NSwgICAtOTIsICAgMjAyLCAgIC05MiwNCiAgICArICAgICAtOTIsICAgLTky
LCAgIC05MiwgICAyMDMsICAgLTkyLCAgIC05MiwgICAxODEsICAgIDM4LCAgICAzOCwgICAgNDgs
DQogICAgKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTky
LCAgIC05MiwgICAtOTIsICAgLTkyLA0KICAgICsgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIDIw
NSwgICAtOTIsICAgIDgwLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICArICAgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAxNzksICAgLTkyLCAgIC05
MiwgICAtOTIsDQogICAgKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgICAzNCwgICAyMDUsICAgMTg1LA0KICAgICsgICAgIDIwNSwgICAtMTEsICAg
MjA1LCAgIDIwNSwgICAgNjUsICAgIDM2LCAgIDE4NiwgICAtOTIsICAgLTkyLCAgIDIwNSwNCiAg
ICArICAgICAxODcsICAgMjA1LCAgICAzNCwgICAtOTIsICAgMTE1LCAgIDE4OCwgICAtOTIsICAg
LTkyLCAgIDIwMSwgICAyMTQsDQogICAgKyAgICAgMjE1LCAgIDIwNSwgICAxOTYsICAgLTkyLCAg
IC05MiwgICAyMTcsICAgLTkyLCAgIDIxOCwgICAgODEsICAgLTkyLA0KICAgICsgICAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAyMTksICAgIDM4LCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwNCiAgICArICAgICAtOTINCiAgICArfTsNCiAgICArDQogICAgKyAgLyogWVlERUZBQ1Rb
U1RBVEUtTlVNXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBudW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVN
Lg0KICAgICsgICAgIFBlcmZvcm1lZCB3aGVuIFlZVEFCTEUgZG9lcyBub3Qgc3BlY2lmeSBzb21l
dGhpbmcgZWxzZSB0byBkby4gIFplcm8NCiAgICArICAgICBtZWFucyB0aGUgZGVmYXVsdCBpcyBh
biBlcnJvci4gICovDQogICAgK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9
DQogICAgK3sNCiAgICArICAgICAgIDcsICAgICAwLCAgIDEwNywgICAgIDAsICAgICAzLCAgICAg
NywgICAgIDAsICAgICA3LCAgIDEwMiwgICAxMDMsDQogICAgKyAgICAgICAwLCAgICAgMSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEyNSwgICAgIDAsICAgICAwLA0KICAg
ICsgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTUsICAgIDIwLCAgICAxNiwgICAg
MTcsICAgIDIyLCAgICAxOCwNCiAgICArICAgICAgMTksICAgIDIxLCAgICAyMywgICAgIDAsICAg
IDI0LCAgICAgMCwgICAgIDAsICAgICA4LCAgICAzNywgICAgMjcsDQogICAgKyAgICAgIDM3LCAg
ICAyOCwgICAgNTksICAgIDY5LCAgICAgOSwgICAgNzQsICAgIDI1LCAgICA5NiwgICAgODIsICAg
IDEwLA0KICAgICsgICAgICAyOSwgICAgOTEsICAgIDI2LCAgICAxMSwgICAgMzAsICAgMTA4LCAg
ICAgMiwgICAgIDYsICAgIDE0LCAgICAgMCwNCiAgICArICAgICAxMDQsICAgICAwLCAgIDEyNiwg
ICAgIDAsICAgMTA1LCAgICAgMCwgICAxMjIsICAgICAwLCAgICAgMCwgICAxMjQsDQogICAgKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIzLCAgIDExMSwgICAxMDYsICAgICAwLCAgIDEyOCwg
ICAgIDAsICAgICAwLA0KICAgICsgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTEs
ICAgICAwLCAgICAgMCwgICAgNzgsICAgIDg2LCAgICA1NSwNCiAgICArICAgICAgODcsICAgIDMz
LCAgICAzNSwgICAgIDAsICAgMTE5LCAgICA3MSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
DQogICAgKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMiwgICAxMjksICAgICAw
LCAgICAxMywgICAgIDAsICAgICAwLA0KICAgICsgICAgICAgMCwgICAgIDAsICAgMTAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNTEsICAgICAwLCAgICA0MywNCiAgICArICAgICAg
NDIsICAgIDM4LCAgICAzOSwgICAgIDAsICAgIDQxLCAgICA0MCwgICAgIDAsICAgICAwLCAgIDEw
MCwgICAgIDAsDQogICAgKyAgICAgIDYzLCAgICA2NCwgICAgNjAsICAgIDYyLCAgICA2MSwgICAg
NzAsICAgIDU4LCAgICA1NywgICAgNzUsICAgIDc3LA0KICAgICsgICAgICA3MywgICAgNzYsICAg
IDcyLCAgIDEwOSwgICAgOTgsICAgICAwLCAgICA5NywgICAgODMsICAgIDg1LCAgICA4MSwNCiAg
ICArICAgICAgODQsICAgIDgwLCAgICA5MywgICAgOTQsICAgIDkyLCAgIDExOCwgICAxMjAsICAg
MTIxLCAgIDExNywgICAxMTIsDQogICAgKyAgICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAg
IDEyNywgICAgMzIsICAgIDg5LCAgICAgMCwgICAxMDksICAgICAwLA0KICAgICsgICAgIDEwOSwg
ICAxMDksICAgMTA5LCAgIDEwOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTAsICAgIDY3LCAg
IDEwOSwNCiAgICArICAgICAgIDAsICAgMTA5LCAgICAgMCwgICAgOTksICAgICAwLCAgICAgMCwg
ICAgNDQsICAgMTAxLCAgICAgMCwgICAgIDAsDQogICAgKyAgICAgICAwLCAgIDEwOSwgICAgNTMs
ICAgIDUwLCAgICAzMSwgICAgIDAsICAgIDY2LCAgICAgMCwgICAxMTAsICAgIDk1LA0KICAgICsg
ICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgIDAsICAgICAwLCAgICA1MiwgICAgNjUs
ICAgIDY4LCAgICA0OSwNCiAgICArICAgICAgNTQNCiAgICArfTsNCiAgICArDQogICAgKyAgLyog
WVlQR09UT1tOVEVSTS1OVU1dLiAgKi8NCiAgICArc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5
eXBnb3RvW10gPQ0KICAgICt7DQogICAgKyAgICAgLTkyLCAgIC05MiwgICAyNDksICAgLTkyLCAg
IDI1MiwgICAtOTIsICAgIC05LCAgIC02NywgICAtOTIsICAgLTkyLA0KICAgICsgICAgIC05Miwg
ICAtOTIsICAgMjIwLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwNCiAgICArICAgICAgMzUsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsDQogICAgKyAgICAgLTkyLCAgIDEwMCwgICAtOTIs
ICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDE3NywgICAxOTUsICAgLTY1LA0KICAgICsg
ICAgIC05MiwgICAtOTIsICAgMTM3LCAgICAtMSwgICAgMjYsICAgLTkyLCAgIDE0MSwgICAtNjks
ICAgLTE1LCAgIC05MSwNCiAgICArICAgICAtOTIsICAgLTkyLCAgIC05Mg0KICAgICt9Ow0KICAg
ICsNCiAgICArICAvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovDQogICAgK3N0YXRpYyBjb25z
dCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10gPQ0KICAgICt7DQogICAgKyAgICAgIC0xLCAgICAg
MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMzYsICAgIDM3LCAgIDEyMCwgICAgMzgsICAgIDM5
LA0KICAgICsgICAgICA0MCwgICAgNDEsICAgIDc5LCAgIDEyMSwgICAxMjIsICAgMTc1LCAgIDIw
NiwgICAgNDIsICAgIDQzLCAgIDEzNiwNCiAgICArICAgICAgNDQsICAgIDgxLCAgIDEzMiwgICAg
ODIsICAgIDQ1LCAgIDE0MCwgICAgNDYsICAgIDgzLCAgICA0NywgICAgNDgsDQogICAgKyAgICAg
MTQ5LCAgICA0OSwgICAgODUsICAgIDUwLCAgICA1MSwgICAgNTIsICAgMTIzLCAgIDEyNCwgICAg
ODYsICAgMTI1LA0KICAgICsgICAgICA4NCwgICAxNDYsICAgMTY5LCAgIDE3MCwgICAgNTMsICAg
ICA3LCAgIDE4MywgICAgNzIsICAgIDczLCAgICA3NCwNCiAgICArICAgICAgNjMsICAgIDU0LCAg
IDEwNg0KICAgICt9Ow0KICAgICsNCiAgICArICAvKiBZWVRBQkxFW1lZUEFDVFtTVEFURS1OVU1d
XSAtLSBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmDQogICAgKyAgICAgcG9zaXRp
dmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdob3Nl
DQogICAgKyAgICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS4gIElmIFlZVEFCTEVfTklORiwgc3lu
dGF4IGVycm9yLiAgKi8NCiAgICArc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10g
PQ0KICAgICt7DQogICAgKyAgICAgIDEwLCAgICA5MywgICAgOTQsICAgMTgyLCAgICAxMSwgICAg
NjcsICAgIDY4LCAgIDE1OCwgICAxNTksICAgMTYwLA0KICAgICsgICAgIDE2MSwgICAxNjIsICAg
MTYzLCAgICA1OSwgICAxMzEsICAgIDYxLCAgIDEzNCwgICAgNTcsICAgIDY1LCAgIDE1MywNCiAg
ICArICAgICAgNTgsICAgMTU0LCAgIDE0MywgICAgNjAsICAgICAxLCAgIDE3NCwgICAgIDEsICAg
MTU2LCAgIDE1NywgICAgOTYsDQogICAgKyAgICAgIDk3LCAgIC0zNCwgICAxMDgsICAgIDYyLCAg
IDE0NCwgICAtMzQsICAgLTM0LCAgIC0zNCwgICAtMzQsICAgLTM0LA0KICAgICsgICAgIC0zNCwg
ICAtMzQsICAgLTM0LCAgIDEwOSwgICAxNzEsICAgLTM0LCAgIC0zNCwgICAxMTAsICAgLTM0LCAg
IDExMSwNCiAgICArICAgICAxMTIsICAgMTEzLCAgIDExNCwgICAxMTUsICAgMTE2LCAgIC0zNCwg
ICAxMTcsICAgICAyLCAgIDExOCwgICAgNTUsDQogICAgKyAgICAgIDY0LCAgICA2NiwgICAgNjks
ICAgMTkyLCAgIDE1NSwgICAgIDgsICAgICA5LCAgIDExOSwgICAtMzQsICAgIDcwLA0KICAgICsg
ICAgICA5NiwgICAgOTcsICAgMTkzLCAgIDEzNSwgICAxMzgsICAgIDY2LCAgIDE0NywgICAgNzEs
ICAgMTUzLCAgICA3NSwNCiAgICArICAgICAxNTQsICAgMTA4LCAgICA3NywgICAxOTEsICAgLTc5
LCAgIC03OSwgICAtNzksICAgLTc5LCAgIC03OSwgICAtNzksDQogICAgKyAgICAgLTc5LCAgIC03
OSwgICAgNjYsICAgIDY5LCAgIC03OSwgICAtNzksICAgMTEwLCAgICA3NiwgICAxODQsICAgMTcy
LA0KICAgICsgICAgIDE3MywgICAxMDUsICAgIDk4LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEw
MiwgICAxMTgsICAgMTM3LCAgIDE0MiwNCiAgICArICAgICAxNjgsICAgMTUxLCAgICA3OCwgICAx
OTgsICAgMTgxLCAgIDEwMywgICAxNTIsICAgLTc5LCAgIDEzOSwgICAgODcsDQogICAgKyAgICAg
MTQ4LCAgICA5NiwgICAgOTcsICAgLTM2LCAgIDEwOCwgICAgODgsICAgMTc5LCAgIC0zNiwgICAt
MzYsICAgLTM2LA0KICAgICsgICAgIC0zNiwgICAtMzYsICAgLTM2LCAgIC0zNiwgICAtMzYsICAg
MTA5LCAgIDE2NywgICAtMzYsICAgLTM2LCAgIDExMCwNCiAgICArICAgICAtMzYsICAgMTExLCAg
IDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYsICAgLTM2LCAgIDExNywgICAgOTUsDQog
ICAgKyAgICAgMTE4LCAgIDE5OSwgICAgODksICAgIDk2LCAgICA5NywgICAgOTYsICAgIDk3LCAg
ICAtNSwgICAgMTMsICAgMTE5LA0KICAgICsgICAgIC0zNiwgICAgMTQsICAgIDE1LCAgICAxNiwg
ICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICA5MCwNCiAgICArICAgICAgOTEs
ICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsDQogICAgKyAgICAgIDMxLCAgICAzMiwgICAgOTIsICAgMTQxLCAgICAzMywgICAxNTAs
ICAgMTA0LCAgIDEwNywgICAxNjQsICAgMTY1LA0KICAgICsgICAgIDE2NiwgICAgLTQsICAgIDEz
LCAgICAzNCwgICAgMzUsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwNCiAgICAr
ICAgICAgMTksICAgIDIwLCAgICAyMSwgICAxNzYsICAgMjEwLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAyNSwgICAgMjYsDQogICAgKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgMTc3LCAgIDE3OCwgICAgMzMsICAgMTgyLA0KICAgICsgICAgICA5NywgICAx
ODYsICAgMTk0LCAgIDE5NiwgICAyMDAsICAgLTg4LCAgIDEwOCwgICAgMzQsICAgIDM1LCAgIC04
OCwNCiAgICArICAgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAt
ODgsICAgMjAxLCAgIDIwNSwgICAtODgsDQogICAgKyAgICAgLTg4LCAgIDExMCwgICAtODgsICAg
LTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LA0KICAgICsgICAg
IDIwMiwgICAyMDMsICAgMTE4LCAgIDIwNywgICAyMDgsICAgMjA5LCAgICA1NiwgICAgMTIsICAg
MTMzLCAgIDEwOCwNCiAgICArICAgICAgODAsICAgMTUyLCAgIC04OCwgICAtNTYsICAgLTU2LCAg
IDE4MCwgICAtNTYsICAgLTU2LCAgIC01NiwgICAtNTYsDQogICAgKyAgICAgMTA5LCAgICAgMCwg
ICAtNTYsICAgLTU2LCAgIDExMCwgICAxMjYsICAgMTI3LCAgIDEyOCwgICAxMjksICAgMTQ1LA0K
ICAgICsgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTE4LCAgICAxNCwg
ICAgMTUsICAgIDE2LCAgICAxNywNCiAgICArICAgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgMTMwLCAgIC01NiwgICAgMjIsICAgIDIzLCAgICAxNSwgICAgMTYsDQogICAgKyAgICAgICAw
LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgIDAsICAgICAwLCAgICAyMiwgICAgMjMs
ICAgMTg1LA0KICAgICsgICAgICAgMCwgICAxODcsICAgMTg4LCAgIDE4OSwgICAxOTAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAzNSwNCiAgICArICAgICAxOTUsICAgICAwLCAgIDE5
NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzQsDQogICAg
KyAgICAgIDM1LCAgICAgMCwgICAyMDQNCiAgICArfTsNCiAgICArDQogICAgK3N0YXRpYyBjb25z
dCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0NCiAgICArew0KICAgICsgICAgICAgMSwgICAgNzAs
ICAgIDcxLCAgICAxNCwgICAgIDAsICAgIDIwLCAgICAyMSwgICAgOTgsICAgIDk5LCAgIDEwMCwN
CiAgICArICAgICAxMDEsICAgMTAyLCAgIDEwMywgICAgMTQsICAgIDgxLCAgICAxNiwgICAgODEs
ICAgIDM2LCAgICAxOSwgICAgODYsDQogICAgKyAgICAgIDM2LCAgICA4NiwgICAgMjQsICAgIDM2
LCAgICAgMywgICAxMTYsICAgICAzLCAgICA5NiwgICAgOTcsICAgIDQwLA0KICAgICsgICAgICA0
MSwgICAgIDAsICAgICAxLCAgICAyNywgICAgMzYsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwNCiAgICArICAgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgMTEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsDQogICAgKyAgICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAzNiwgICAgMjcsICAgIDM2LA0KICAg
ICsgICAgICAzNiwgICAgMjcsICAgIDI4LCAgICAyNywgICAgMzQsICAgIDI3LCAgICAyOCwgICAg
MzYsICAgIDM3LCAgICAzNSwNCiAgICArICAgICAgNDAsICAgIDQxLCAgICAzNiwgICAgODIsICAg
IDgzLCAgICAyNywgICAgODUsICAgIDQzLCAgIDE0NSwgICAgMzYsDQogICAgKyAgICAgMTQ1LCAg
ICAgMSwgICAgMzgsICAgMTc0LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAg
ICA5LA0KICAgICsgICAgICAxMCwgICAgMTEsICAgIDI3LCAgICAyOCwgICAgMTQsICAgIDE1LCAg
ICAxNiwgICAgIDEsICAgMTY3LCAgIDExNCwNCiAgICArICAgICAxMTUsICAgIDM5LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDI3LCAgICA4MiwgICAgODMsDQogICAgKyAg
ICAgMTExLCAgICA4NSwgICAgIDEsICAgMTgyLCAgIDEyOSwgICAgNDIsICAgIDM2LCAgICAzNywg
ICAgODMsICAgIDM2LA0KICAgICsgICAgICA4NSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAgIDEs
ICAgIDM2LCAgIDEyNywgICAgIDQsICAgICA1LCAgICAgNiwNCiAgICArICAgICAgIDcsICAgICA4
LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMjYsICAgIDE0LCAgICAxNSwgICAgMTYs
DQogICAgKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDM2LA0KICAgICsgICAgICAyNywgICAgMzYsICAgIDM2LCAgICA0
MCwgICAgNDEsICAgIDQwLCAgICA0MSwgICAgIDAsICAgICAxLCAgICAzNiwNCiAgICArICAgICAg
MzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMzYsDQogICAgKyAgICAgIDM2LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLA0KICAgICsgICAgICAyMywgICAgMjQsICAg
IDM2LCAgICA4MywgICAgMjcsICAgIDg1LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwNCiAg
ICArICAgICAgMzYsICAgICAwLCAgICAgMSwgICAgMzYsICAgIDM3LCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywgICAgIDgsDQogICAgKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgICAxLCAg
IDIwNSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LA0KICAgICsgICAgICAxOSwg
ICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAxMywgICAgMzYsICAgIDI3LCAg
ICAxNCwNCiAgICArICAgICAgNDEsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAgMCwg
ICAgIDEsICAgIDM2LCAgICAzNywgICAgIDQsDQogICAgKyAgICAgICA1LCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzNiwgICAgNDIsICAgIDE0LA0KICAgICsg
ICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
ICAgIDIzLCAgICAyNCwNCiAgICArICAgICAgMzYsICAgIDM2LCAgICAyNywgICAgMzYsICAgIDM2
LCAgICAzNiwgICAgIDcsICAgICA1LCAgICA4MSwgICAgIDEsDQogICAgKyAgICAgIDQwLCAgICAz
NiwgICAgMzcsICAgICA1LCAgICAgNiwgICAxMjgsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDEx
LA0KICAgICsgICAgICAxMiwgICAgLTEsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAx
OCwgICAgMTksICAgIDIwLCAgICA4NCwNCiAgICArICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAyNywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsDQogICAgKyAgICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzNiwgICAgMzcsICAgIDE0LCAgICAxNSwgICAg
IDUsICAgICA2LA0KICAgICsgICAgICAtMSwgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAg
IC0xLCAgICAtMSwgICAgMTQsICAgIDE1LCAgIDE2OCwNCiAgICArICAgICAgLTEsICAgMTcwLCAg
IDE3MSwgICAxNzIsICAgMTczLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsDQog
ICAgKyAgICAgMTc5LCAgICAtMSwgICAxODEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDM2LA0KICAgICsgICAgICAzNywgICAgLTEsICAgMTkxDQogICAgK307
DQogICAgKw0KICAgICsgIC8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVt
YmVyIG9mIHRoZSkgYWNjZXNzaW5nDQogICAgKyAgICAgc3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5V
TS4gICovDQogICAgK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQ0KICAgICt7
DQogICAgKyAgICAgICAwLCAgICAgMywgICAgMzYsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4
LCAgICA4OSwgICAgMjcsICAgIDI4LA0KICAgICsgICAgICA4NywgICAgIDAsICAgIDQ4LCAgICAg
MSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwNCiAgICArICAgICAg
MTAsICAgIDExLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsDQogICAgKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI3LCAgICAzNiwgICAg
MzcsICAgIDQ5LCAgICA1MCwgICAgNTIsICAgIDUzLA0KICAgICsgICAgICA1NCwgICAgNTUsICAg
IDYxLCAgICA2MiwgICAgNjQsICAgIDY4LCAgICA3MCwgICAgNzIsICAgIDczLCAgICA3NSwNCiAg
ICArICAgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODgsICAgIDk1LCAgICAzNiwgICAgNDYsICAg
IDM2LCAgICAzNiwgICAgODcsDQogICAgKyAgICAgIDM2LCAgICA4NywgICAgMjcsICAgIDk0LCAg
ICAzNiwgICAgODcsICAgIDI3LCAgICA5MiwgICAgOTIsICAgIDI4LA0KICAgICsgICAgICAzNSwg
ICAgNDMsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDM2LCAgICAgMSwgICAgMzgsICAgICAxLCAg
ICA1NiwNCiAgICArICAgICAgNTYsICAgIDY1LCAgICA2NywgICAgNzEsICAgIDg0LCAgICA3Niwg
ICAgODIsICAgIDM2LCAgICAzNiwgICAgMzYsDQogICAgKyAgICAgIDM2LCAgICAzNiwgICAgMzYs
ICAgIDkxLCAgICA5MSwgICAgMzYsICAgIDQwLCAgICA0MSwgICAgMjksICAgIDMwLA0KICAgICsg
ICAgICAzMSwgICAgMzIsICAgIDMzLCAgICA0MiwgICAgMzYsICAgIDM5LCAgICA5NiwgICAgMzYs
ICAgICAxLCAgICAxMiwNCiAgICArICAgICAgMTYsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI1LCAgICAyNywgICAgMzYsDQogICAgKyAgICAgIDUxLCAgICA1
NywgICAgNTgsICAgIDgwLCAgICA4MSwgICAgODMsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LA0KICAgICsgICAgICAzNiwgICAgNTEsICAgIDY2LCAgICA4MSwgICAgODMsICAgIDUwLCAgICA2
MywgICAgODgsICAgIDUwLCAgICA2NCwNCiAgICArICAgICAgNjksICAgIDc1LCAgICA4OCwgICAg
MjQsICAgIDM2LCAgICA4MiwgICAgODUsICAgIDUwLCAgICA2NCwgICAgNzQsDQogICAgKyAgICAg
IDc1LCAgICA4OCwgICAgMzYsICAgIDUxLCAgICA4MywgICAgMzQsICAgIDkxLCAgICA5MSwgICAg
OTMsICAgIDkzLA0KICAgICsgICAgICA5MywgICAgOTMsICAgIDkzLCAgICA5MywgICAgMzYsICAg
IDM2LCAgICAzNiwgICAgMjYsICAgIDg3LCAgICA4NiwNCiAgICArICAgICAgODcsICAgIDkxLCAg
ICA5MiwgICAgOTIsICAgIDkzLCAgICA1OSwgICAgIDEsICAgIDEzLCAgICAzNiwgICAgODcsDQog
ICAgKyAgICAgIDg2LCAgICA5MiwgICAgMTQsICAgIDkwLCAgICA5MSwgICAgOTAsICAgIDM2LCAg
ICA5MCwgICAgOTAsICAgIDkwLA0KICAgICsgICAgICA5MCwgICAgOTMsICAgIDI3LCAgICAzNiwg
ICAgMzYsICAgIDkwLCAgICAzNiwgICAgOTAsICAgIDkxLCAgICAzNiwNCiAgICArICAgICAgMzYs
ICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDkwLCAgICA0MiwgICAgNjAsICAgIDM2LCAgICAzNiwg
ICAgMzYsDQogICAgKyAgICAgIDg3DQogICAgK307DQogICAgKw0KICAgICsgIC8qIFlZUjFbWVlO
XSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0IHJ1bGUgWVlOIGRlcml2ZXMuICAqLw0K
ICAgICtzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjFbXSA9DQogICAgK3sNCiAgICArICAg
ICAgIDAsICAgIDQ0LCAgICA0NSwgICAgNDUsICAgIDQ2LCAgICA0NiwgICAgNDcsICAgIDQ4LCAg
ICA0OCwgICAgNDgsDQogICAgKyAgICAgIDQ4LCAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OCwg
ICAgNDksICAgIDQ5LCAgICA0OSwgICAgNDksICAgIDQ5LA0KICAgICsgICAgICA0OSwgICAgNDks
ICAgIDQ5LCAgICA0OSwgICAgNTAsICAgIDUwLCAgICA1MCwgICAgNTAsICAgIDUwLCAgICA1MCwN
CiAgICArICAgICAgNTAsICAgIDUxLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1NCwgICAgNTUs
ICAgIDU2LCAgICA1NiwgICAgNTYsDQogICAgKyAgICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU2
LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LA0KICAgICsgICAgICA1
OCwgICAgNTksICAgIDU5LCAgICA2MCwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0
LCAgICA2NSwNCiAgICArICAgICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LCAgICA2
NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjcsDQogICAgKyAgICAgIDY3LCAgICA2OCwgICAg
NjksICAgIDcwLCAgICA3MSwgICAgNzEsICAgIDcxLCAgICA3MSwgICAgNzIsICAgIDczLA0KICAg
ICsgICAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3NiwgICAgNzYsICAgIDc2LCAgICA3NywgICAg
NzgsICAgIDc5LCAgICA4MCwNCiAgICArICAgICAgODEsICAgIDgyLCAgICA4MiwgICAgODIsICAg
IDgyLCAgICA4MywgICAgODQsICAgIDg0LCAgICA4NCwgICAgODUsDQogICAgKyAgICAgIDg2LCAg
ICA4NiwgICAgODcsICAgIDg3LCAgICA4OCwgICAgODgsICAgIDg4LCAgICA4OSwgICAgODksICAg
IDkwLA0KICAgICsgICAgICA5MCwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLCAg
ICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwNCiAgICArICAgICAgOTEsICAgIDkxLCAgICA5Miwg
ICAgOTMsICAgIDkzLCAgICA5NCwgICAgOTQsICAgIDk1LCAgICA5NiwgICAgOTYNCiAgICArfTsN
CiAgICArDQogICAgKyAgLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBy
aWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLw0KICAgICtzdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5cjJbXSA9DQogICAgK3sNCiAgICArICAgICAgIDAsICAgICAyLCAgICAgMiwgICAg
IDEsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAg
ICAyLCAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMywgICAgIDEsICAgICAxLCAgICAgMSwgICAg
IDEsICAgICAxLA0KICAgICsgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwNCiAgICArICAgICAgIDEsICAgICAzLCAg
ICAgMiwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsDQog
ICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDQsICAgICA0LCAg
ICAgNCwgICAgIDQsICAgICA1LA0KICAgICsgICAgICAgMywgICAgIDAsICAgICAzLCAgICAgMCwg
ICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMCwNCiAgICArICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDMsICAgICAyLCAgICAgNCwg
ICAgIDAsDQogICAgKyAgICAgICAyLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMCwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLA0KICAgICsgICAgICAgMSwgICAgIDMsICAgICAw
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsICAgICAyLCAgICAgMiwNCiAgICAr
ICAgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDAsICAgICAy
LCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAwLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAwLA0KICAgICsgICAgICAgMiwgICAg
IDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAg
MiwNCiAgICArICAgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMCwgICAg
IDEsICAgICA0LCAgICAgMCwgICAgIDENCiAgICArfTsNCiAgICArDQogICAgKw0KICAgICsjZGVm
aW5lIHl5ZXJyb2sgICAgICAgICAoeXllcnJzdGF0dXMgPSAwKQ0KICAgICsjZGVmaW5lIHl5Y2xl
YXJpbiAgICAgICAoeXljaGFyID0gWVlFTVBUWSkNCiAgICArI2RlZmluZSBZWUVNUFRZICAgICAg
ICAgKC0yKQ0KICAgICsjZGVmaW5lIFlZRU9GICAgICAgICAgICAwDQogICAgKw0KICAgICsjZGVm
aW5lIFlZQUNDRVBUICAgICAgICBnb3RvIHl5YWNjZXB0bGFiDQogICAgKyNkZWZpbmUgWVlBQk9S
VCAgICAgICAgIGdvdG8geXlhYm9ydGxhYg0KICAgICsjZGVmaW5lIFlZRVJST1IgICAgICAgICBn
b3RvIHl5ZXJyb3JsYWINCiAgICArDQogICAgKw0KICAgICsjZGVmaW5lIFlZUkVDT1ZFUklORygp
ICAoISF5eWVycnN0YXR1cykNCiAgICArDQogICAgKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZh
bHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgK2RvICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQog
ICAgKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcDQogICAgKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIHl5Y2hhciA9IChUb2tlbik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIHl5
bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
DQogICAgKyAgICAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcDQogICAgKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIGdvdG8geXliYWNrdXA7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcDQogICAgKyAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcDQogICAgKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIHl5ZXJyb3IgKFlZ
Xygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIpKTsgXA0KICAgICsgICAgICBZWUVSUk9S
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAg
ICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXA0KICAgICt3aGlsZSAoMCkNCiAgICArDQogICAgKy8qIEVycm9yIHRva2VuIG51
bWJlciAqLw0KICAgICsjZGVmaW5lIFlZVEVSUk9SICAgICAgICAxDQogICAgKyNkZWZpbmUgWVlF
UlJDT0RFICAgICAgIDI1Ng0KICAgICsNCiAgICArDQogICAgKw0KICAgICsvKiBFbmFibGUgZGVi
dWdnaW5nIGlmIHJlcXVlc3RlZC4gICovDQogICAgKyNpZiBZWURFQlVHDQogICAgKw0KICAgICsj
IGlmbmRlZiBZWUZQUklOVEYNCiAgICArIyAgaW5jbHVkZSA8c3RkaW8uaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgICsjICBkZWZpbmUgWVlGUFJJTlRGIGZwcmludGYN
CiAgICArIyBlbmRpZg0KICAgICsNCiAgICArIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpICAgICAg
ICAgICAgICAgICAgICAgICAgXA0KICAgICtkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcDQogICAgKyAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwNCiAgICArICAgIFlZRlBSSU5URiBBcmdzOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXA0KICAgICt9IHdoaWxlICgwKQ0KICAgICsNCiAgICArLyogVGhpcyBt
YWNybyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gKi8NCiAgICArI2lm
bmRlZiBZWV9MT0NBVElPTl9QUklOVA0KICAgICsjIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChG
aWxlLCBMb2MpICgodm9pZCkgMCkNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsNCiAgICArIyBk
ZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1ZSwgTG9jYXRpb24pICAgICAg
ICAgICAgICAgICAgICBcDQogICAgK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgIGlmICh5eWRl
YnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwNCiAgICArICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XA0KICAgICsgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgICAgICAgICAgICAgICAgVHlwZSwg
VmFsdWUpOyBcDQogICAgKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwNCiAgICArfSB3aGlsZSAoMCkNCiAgICArDQogICAgKw0KICAgICsvKi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAgK3wgUHJpbnQgdGhpcyBzeW1ib2wncyB2
YWx1ZSBvbiBZWU9VVFBVVC4gIHwNCiAgICArYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLw0KICAgICsNCiAgICArc3RhdGljIHZvaWQNCiAgICAreXlfc3ltYm9sX3Zh
bHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNv
bnN0IHl5dmFsdWVwKQ0KICAgICt7DQogICAgKyAgRklMRSAqeXlvID0geXlvdXRwdXQ7DQogICAg
KyAgWVlVU0UgKHl5byk7DQogICAgKyAgaWYgKCF5eXZhbHVlcCkNCiAgICArICAgIHJldHVybjsN
CiAgICArIyBpZmRlZiBZWVBSSU5UDQogICAgKyAgaWYgKHl5dHlwZSA8IFlZTlRPS0VOUykNCiAg
ICArICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5eXR5cGVdLCAqeXl2YWx1ZXApOw0K
ICAgICsjIGVuZGlmDQogICAgKyAgWVlVU0UgKHl5dHlwZSk7DQogICAgK30NCiAgICArDQogICAg
Kw0KICAgICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IFByaW50
IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLw0KICAgICsNCiAgICArc3RhdGljIHZvaWQNCiAgICAreXlfc3ltYm9sX3By
aW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5
dmFsdWVwKQ0KICAgICt7DQogICAgKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIiVzICVzICgiLA0K
ICAgICsgICAgICAgICAgICAgeXl0eXBlIDwgWVlOVE9LRU5TID8gInRva2VuIiA6ICJudGVybSIs
IHl5dG5hbWVbeXl0eXBlXSk7DQogICAgKw0KICAgICsgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAo
eXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApOw0KICAgICsgIFlZRlBSSU5URiAoeXlvdXRwdXQs
ICIpIik7DQogICAgK30NCiAgICArDQogICAgKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IHl5X3N0YWNr
X3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAgdG8gaXRz
IHwNCiAgICArfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8DQogICAgK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgICsNCiAgICArc3Rh
dGljIHZvaWQNCiAgICAreXlfc3RhY2tfcHJpbnQgKHl5dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5
dHlwZV9pbnQxNiAqeXl0b3ApDQogICAgK3sNCiAgICArICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0
YWNrIG5vdyIpOw0KICAgICsgIGZvciAoOyB5eWJvdHRvbSA8PSB5eXRvcDsgeXlib3R0b20rKykN
CiAgICArICAgIHsNCiAgICArICAgICAgaW50IHl5Ym90ID0gKnl5Ym90dG9tOw0KICAgICsgICAg
ICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90KTsNCiAgICArICAgIH0NCiAgICArICBZ
WUZQUklOVEYgKHN0ZGVyciwgIlxuIik7DQogICAgK30NCiAgICArDQogICAgKyMgZGVmaW5lIFlZ
X1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQog
ICAgK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcDQogICAgKyAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICB5eV9zdGFja19wcmludCAoKEJv
dHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgK30gd2hpbGUg
KDApDQogICAgKw0KICAgICsNCiAgICArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uDQogICAgK3wgUmVwb3J0IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2lu
ZyB0byBiZSByZWR1Y2VkLiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICArDQogICAgK3N0YXRpYyB2b2lkDQogICAgK3l5X3Jl
ZHVjZV9wcmludCAoeXl0eXBlX2ludDE2ICp5eXNzcCwgWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1
bGUpDQogICAgK3sNCiAgICArICB1bnNpZ25lZCBsb25nIGludCB5eWxubyA9IHl5cmxpbmVbeXly
dWxlXTsNCiAgICArICBpbnQgeXlucmhzID0geXlyMlt5eXJ1bGVdOw0KICAgICsgIGludCB5eWk7
DQogICAgKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1Y2luZyBzdGFjayBieSBydWxlICVkIChs
aW5lICVsdSk6XG4iLA0KICAgICsgICAgICAgICAgICAgeXlydWxlIC0gMSwgeXlsbm8pOw0KICAg
ICsgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQuICAqLw0KICAgICsgIGZvciAoeXlpID0g
MDsgeXlpIDwgeXlucmhzOyB5eWkrKykNCiAgICArICAgIHsNCiAgICArICAgICAgWVlGUFJJTlRG
IChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsNCiAgICArICAgICAgeXlfc3ltYm9sX3By
aW50IChzdGRlcnIsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgeXlzdG9zW3l5c3NwW3l5
aSArIDEgLSB5eW5yaHNdXSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAmKHl5dnNwWyh5
eWkgKyAxKSAtICh5eW5yaHMpXSkNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICk7DQogICAgKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsN
CiAgICArICAgIH0NCiAgICArfQ0KICAgICsNCiAgICArIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5U
KFJ1bGUpICAgICAgICAgIFwNCiAgICArZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwNCiAgICArICBpZiAoeXlkZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgIFwN
CiAgICArICAgIHl5X3JlZHVjZV9wcmludCAoeXlzc3AsIHl5dnNwLCBSdWxlKTsgXA0KICAgICt9
IHdoaWxlICgwKQ0KICAgICsNCiAgICArLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFj
ZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0DQogICAgKyAgIG11bHRpcGxlIHBh
cnNlcnMgY2FuIGNvZXhpc3QuICAqLw0KICAgICtpbnQgeXlkZWJ1ZzsNCiAgICArI2Vsc2UgLyog
IVlZREVCVUcgKi8NCiAgICArIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpDQogICAgKyMgZGVmaW5l
IFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQ0KICAgICsjIGRl
ZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkNCiAgICArIyBkZWZpbmUgWVlfUkVEVUNF
X1BSSU5UKFJ1bGUpDQogICAgKyNlbmRpZiAvKiAhWVlERUJVRyAqLw0KICAgICsNCiAgICArDQog
ICAgKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tz
LiAgKi8NCiAgICArI2lmbmRlZiBZWUlOSVRERVBUSA0KICAgICsjIGRlZmluZSBZWUlOSVRERVBU
SCAyMDANCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiBZWU1BWERFUFRIIC0tIG1heGltdW0g
c2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZlY3RpdmUgb25seQ0KICAgICsgICBpZiB0
aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhvZCBpcyB1c2VkKS4NCiAgICArDQogICAg
KyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxhcmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5k
ZWZpbmVkIGlmDQogICAgKyAgIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSA8IFlZU1RBQ0tfQllURVMg
KFlZTUFYREVQVEgpDQogICAgKyAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBp
bnRlZ2VyIGFyaXRobWV0aWMuICAqLw0KICAgICsNCiAgICArI2lmbmRlZiBZWU1BWERFUFRIDQog
ICAgKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDANCiAgICArI2VuZGlmDQogICAgKw0KICAgICsN
CiAgICArI2lmIFlZRVJST1JfVkVSQk9TRQ0KICAgICsNCiAgICArIyBpZm5kZWYgeXlzdHJsZW4N
CiAgICArIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0gNCiAgICAr
IyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4NCiAgICArIyAgZWxzZQ0KICAgICsvKiBSZXR1cm4g
dGhlIGxlbmd0aCBvZiBZWVNUUi4gICovDQogICAgK3N0YXRpYyBZWVNJWkVfVA0KICAgICt5eXN0
cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpDQogICAgK3sNCiAgICArICBZWVNJWkVfVCB5eWxlbjsN
CiAgICArICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXlsZW5dOyB5eWxlbisrKQ0KICAgICsgICAg
Y29udGludWU7DQogICAgKyAgcmV0dXJuIHl5bGVuOw0KICAgICt9DQogICAgKyMgIGVuZGlmDQog
ICAgKyMgZW5kaWYNCiAgICArDQogICAgKyMgaWZuZGVmIHl5c3RwY3B5DQogICAgKyMgIGlmIGRl
ZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklOR19IICYmIGRlZmluZWQgX0dOVV9TT1VS
Q0UNCiAgICArIyAgIGRlZmluZSB5eXN0cGNweSBzdHBjcHkNCiAgICArIyAgZWxzZQ0KICAgICsv
KiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJt
aW5hdGluZyAnXDAnIGluDQogICAgKyAgIFlZREVTVC4gICovDQogICAgK3N0YXRpYyBjaGFyICoN
CiAgICAreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpDQogICAgK3sN
CiAgICArICBjaGFyICp5eWQgPSB5eWRlc3Q7DQogICAgKyAgY29uc3QgY2hhciAqeXlzID0geXlz
cmM7DQogICAgKw0KICAgICsgIHdoaWxlICgoKnl5ZCsrID0gKnl5cysrKSAhPSAnXDAnKQ0KICAg
ICsgICAgY29udGludWU7DQogICAgKw0KICAgICsgIHJldHVybiB5eWQgLSAxOw0KICAgICt9DQog
ICAgKyMgIGVuZGlmDQogICAgKyMgZW5kaWYNCiAgICArDQogICAgKyMgaWZuZGVmIHl5dG5hbWVy
cg0KICAgICsvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJp
cHBpbmcgYXdheSB1bm5lY2Vzc2FyeQ0KICAgICsgICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBz
byB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3IuICBUaGUNCiAgICArICAgaGV1cmlzdGlj
IGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcN
CiAgICArICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwgYSBjb21tYSwgb3IgYmFja3NsYXNoIChv
dGhlciB0aGFuDQogICAgKyAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4g
ZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMNCiAgICArICAgbnVsbCwgZG8gbm90IGNvcHk7IGlu
c3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhlIHJlc3VsdA0KICAgICsgICB3b3Vs
ZCBoYXZlIGJlZW4uICAqLw0KICAgICtzdGF0aWMgWVlTSVpFX1QNCiAgICAreXl0bmFtZXJyIChj
aGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpDQogICAgK3sNCiAgICArICBpZiAoKnl5c3Ry
ID09ICciJykNCiAgICArICAgIHsNCiAgICArICAgICAgWVlTSVpFX1QgeXluID0gMDsNCiAgICAr
ICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7DQogICAgKw0KICAgICsgICAgICBmb3IgKDs7
KQ0KICAgICsgICAgICAgIHN3aXRjaCAoKisreXlwKQ0KICAgICsgICAgICAgICAgew0KICAgICsg
ICAgICAgICAgY2FzZSAnXCcnOg0KICAgICsgICAgICAgICAgY2FzZSAnLCc6DQogICAgKyAgICAg
ICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsNCiAgICArDQogICAgKyAgICAgICAgICBj
YXNlICdcXCc6DQogICAgKyAgICAgICAgICAgIGlmICgqKyt5eXAgIT0gJ1xcJykNCiAgICArICAg
ICAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7DQogICAgKyAgICAgICAgICAgIC8q
IEZhbGwgdGhyb3VnaC4gICovDQogICAgKyAgICAgICAgICBkZWZhdWx0Og0KICAgICsgICAgICAg
ICAgICBpZiAoeXlyZXMpDQogICAgKyAgICAgICAgICAgICAgeXlyZXNbeXluXSA9ICp5eXA7DQog
ICAgKyAgICAgICAgICAgIHl5bisrOw0KICAgICsgICAgICAgICAgICBicmVhazsNCiAgICArDQog
ICAgKyAgICAgICAgICBjYXNlICciJzoNCiAgICArICAgICAgICAgICAgaWYgKHl5cmVzKQ0KICAg
ICsgICAgICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAnOw0KICAgICsgICAgICAgICAgICByZXR1
cm4geXluOw0KICAgICsgICAgICAgICAgfQ0KICAgICsgICAgZG9fbm90X3N0cmlwX3F1b3Rlczog
Ow0KICAgICsgICAgfQ0KICAgICsNCiAgICArICBpZiAoISB5eXJlcykNCiAgICArICAgIHJldHVy
biB5eXN0cmxlbiAoeXlzdHIpOw0KICAgICsNCiAgICArICByZXR1cm4geXlzdHBjcHkgKHl5cmVz
LCB5eXN0cikgLSB5eXJlczsNCiAgICArfQ0KICAgICsjIGVuZGlmDQogICAgKw0KICAgICsvKiBD
b3B5IGludG8gKllZTVNHLCB3aGljaCBpcyBvZiBzaXplICpZWU1TR19BTExPQywgYW4gZXJyb3Ig
bWVzc2FnZQ0KICAgICsgICBhYm91dCB0aGUgdW5leHBlY3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0
aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzDQogICAgKyAgIFlZU1NQLg0KICAgICsNCiAgICAr
ICAgUmV0dXJuIDAgaWYgKllZTVNHIHdhcyBzdWNjZXNzZnVsbHkgd3JpdHRlbi4gIFJldHVybiAx
IGlmICpZWU1TRyBpcw0KICAgICsgICBub3QgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3Nh
Z2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0DQogICAgKyAgICpZWU1TR19BTExPQyB0byB0aGUg
cmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJuIDIgaWYgdGhlDQogICAgKyAgIHJlcXVp
cmVkIG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2UgdG8gc3RvcmUuICAqLw0KICAgICtzdGF0
aWMgaW50DQogICAgK3l5c3ludGF4X2Vycm9yIChZWVNJWkVfVCAqeXltc2dfYWxsb2MsIGNoYXIg
Kip5eW1zZywNCiAgICArICAgICAgICAgICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5
eXRva2VuKQ0KICAgICt7DQogICAgKyAgWVlTSVpFX1QgeXlzaXplMCA9IHl5dG5hbWVyciAoWVlf
TlVMTFBUUiwgeXl0bmFtZVt5eXRva2VuXSk7DQogICAgKyAgWVlTSVpFX1QgeXlzaXplID0geXlz
aXplMDsNCiAgICArICBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsN
CiAgICArICAvKiBJbnRlcm5hdGlvbmFsaXplZCBmb3JtYXQgc3RyaW5nLiAqLw0KICAgICsgIGNv
bnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTFBUUjsNCiAgICArICAvKiBBcmd1bWVudHMgb2Yg
eXlmb3JtYXQuICovDQogICAgKyAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FS
R1NfTUFYSU1VTV07DQogICAgKyAgLyogTnVtYmVyIG9mIHJlcG9ydGVkIHRva2VucyAob25lIGZv
ciB0aGUgInVuZXhwZWN0ZWQiLCBvbmUgcGVyDQogICAgKyAgICAgImV4cGVjdGVkIikuICovDQog
ICAgKyAgaW50IHl5Y291bnQgPSAwOw0KICAgICsNCiAgICArICAvKiBUaGVyZSBhcmUgbWFueSBw
b3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6DQogICAgKyAgICAgLSBJZiB0aGlzIHN0YXRl
IGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24sIHRoZW4NCiAgICAr
ICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9uIHdhcyBpbnZva2VkIGlzIGlmIHRoZSBk
ZWZhdWx0IGFjdGlvbg0KICAgICsgICAgICAgaXMgYW4gZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBj
YXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQNCiAgICArICAgICAgIHRva2VucyBiZWNhdXNl
IHRoZXJlIGFyZSBub25lLg0KICAgICsgICAgIC0gVGhlIG9ubHkgd2F5IHRoZXJlIGNhbiBiZSBu
byBsb29rYWhlYWQgcHJlc2VudCAoaW4geXljaGFyKSBpcyBpZg0KICAgICsgICAgICAgdGhpcyBz
dGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGh1cywN
CiAgICArICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5jZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZm
aWNpZW50IHRvIGRldGVybWluZQ0KICAgICsgICAgICAgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVj
dGVkIG9yIGV4cGVjdGVkIHRva2VuIHRvIHJlcG9ydC4gIEluIHRoYXQNCiAgICArICAgICAgIGNh
c2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLg0KICAgICsgICAgIC0gRG9u
J3QgYXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFkIGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRl
IGlzIGENCiAgICArICAgICAgIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9u
LiAgVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGENCiAgICArICAgICAgIHByZXZpb3VzIGluY29uc2lz
dGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgbm9uLWRlZmF1bHQNCiAgICArICAg
ICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rpb24gdGhhdCBtYW5pcHVsYXRlZCB5eWNo
YXIuDQogICAgKyAgICAgLSBPZiBjb3Vyc2UsIHRoZSBleHBlY3RlZCB0b2tlbiBsaXN0IGRlcGVu
ZHMgb24gc3RhdGVzIHRvIGhhdmUNCiAgICArICAgICAgIGNvcnJlY3QgbG9va2FoZWFkIGluZm9y
bWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFyc2VyIG5vdA0KICAgICsgICAgICAgdG8g
cGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZldGNoaW5nIGEgbG9va2FoZWFkIGZyb20g
dGhlDQogICAgKyAgICAgICBzY2FubmVyIGFuZCBiZWZvcmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVy
cm9yLiAgVGh1cywgc3RhdGUgbWVyZ2luZw0KICAgICsgICAgICAgKGZyb20gTEFMUiBvciBJRUxS
KSBhbmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4cGVjdGVkDQogICAgKyAgICAg
ICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2Fs
IExSIHdpdGgNCiAgICArICAgICAgIG9uZSBleGNlcHRpb246IGl0IHdpbGwgc3RpbGwgY29udGFp
biBhbnkgdG9rZW4gdGhhdCB3aWxsIG5vdCBiZQ0KICAgICsgICAgICAgYWNjZXB0ZWQgZHVlIHRv
IGFuIGVycm9yIGFjdGlvbiBpbiBhIGxhdGVyIHN0YXRlLg0KICAgICsgICovDQogICAgKyAgaWYg
KHl5dG9rZW4gIT0gWVlFTVBUWSkNCiAgICArICAgIHsNCiAgICArICAgICAgaW50IHl5biA9IHl5
cGFjdFsqeXlzc3BdOw0KICAgICsgICAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXRv
a2VuXTsNCiAgICArICAgICAgaWYgKCF5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkNCiAg
ICArICAgICAgICB7DQogICAgKyAgICAgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdh
dGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluDQogICAgKyAgICAgICAgICAgICBZWUNI
RUNLLiAgSW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZpcnN0IC1ZWU4gYWN0aW9ucyBmb3INCiAg
ICArICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVzZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlv
bnMuICAqLw0KICAgICsgICAgICAgICAgaW50IHl5eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAw
Ow0KICAgICsgICAgICAgICAgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBh
bmQgeXl0bmFtZS4gICovDQogICAgKyAgICAgICAgICBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAt
IHl5biArIDE7DQogICAgKyAgICAgICAgICBpbnQgeXl4ZW5kID0geXljaGVja2xpbSA8IFlZTlRP
S0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7DQogICAgKyAgICAgICAgICBpbnQgeXl4Ow0K
ICAgICsNCiAgICArICAgICAgICAgIGZvciAoeXl4ID0geXl4YmVnaW47IHl5eCA8IHl5eGVuZDsg
Kyt5eXgpDQogICAgKyAgICAgICAgICAgIGlmICh5eWNoZWNrW3l5eCArIHl5bl0gPT0geXl4ICYm
IHl5eCAhPSBZWVRFUlJPUg0KICAgICsgICAgICAgICAgICAgICAgJiYgIXl5dGFibGVfdmFsdWVf
aXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpDQogICAgKyAgICAgICAgICAgICAgew0KICAg
ICsgICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFY
SU1VTSkNCiAgICArICAgICAgICAgICAgICAgICAgew0KICAgICsgICAgICAgICAgICAgICAgICAg
IHl5Y291bnQgPSAxOw0KICAgICsgICAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7
DQogICAgKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgKyAgICAgICAgICAgICAgICAg
IH0NCiAgICArICAgICAgICAgICAgICAgIHl5YXJnW3l5Y291bnQrK10gPSB5eXRuYW1lW3l5eF07
DQogICAgKyAgICAgICAgICAgICAgICB7DQogICAgKyAgICAgICAgICAgICAgICAgIFlZU0laRV9U
IHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZX05VTExQVFIsIHl5dG5hbWVbeXl4XSk7
DQogICAgKyAgICAgICAgICAgICAgICAgIGlmICghICh5eXNpemUgPD0geXlzaXplMQ0KICAgICsg
ICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElN
VU0pKQ0KICAgICsgICAgICAgICAgICAgICAgICAgIHJldHVybiAyOw0KICAgICsgICAgICAgICAg
ICAgICAgICB5eXNpemUgPSB5eXNpemUxOw0KICAgICsgICAgICAgICAgICAgICAgfQ0KICAgICsg
ICAgICAgICAgICAgIH0NCiAgICArICAgICAgICB9DQogICAgKyAgICB9DQogICAgKw0KICAgICsg
IHN3aXRjaCAoeXljb3VudCkNCiAgICArICAgIHsNCiAgICArIyBkZWZpbmUgWVlDQVNFXyhOLCBT
KSAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIGNhc2UgTjogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgICAgIHl5Zm9ybWF0ID0gUzsgICAgICAgICAg
ICAgICAgICAgICAgIFwNCiAgICArICAgICAgYnJlYWsNCiAgICArICAgICAgWVlDQVNFXygwLCBZ
WV8oInN5bnRheCBlcnJvciIpKTsNCiAgICArICAgICAgWVlDQVNFXygxLCBZWV8oInN5bnRheCBl
cnJvciwgdW5leHBlY3RlZCAlcyIpKTsNCiAgICArICAgICAgWVlDQVNFXygyLCBZWV8oInN5bnRh
eCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIikpOw0KICAgICsgICAgICBZWUNB
U0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3Ig
JXMiKSk7DQogICAgKyAgICAgIFlZQ0FTRV8oNCwgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpKTsNCiAgICArICAgICAgWVlDQVNFXyg1
LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9y
ICVzIG9yICVzIikpOw0KICAgICsjIHVuZGVmIFlZQ0FTRV8NCiAgICArICAgIH0NCiAgICArDQog
ICAgKyAgew0KICAgICsgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5
eWZvcm1hdCk7DQogICAgKyAgICBpZiAoISAoeXlzaXplIDw9IHl5c2l6ZTEgJiYgeXlzaXplMSA8
PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQ0KICAgICsgICAgICByZXR1cm4gMjsNCiAgICArICAg
IHl5c2l6ZSA9IHl5c2l6ZTE7DQogICAgKyAgfQ0KICAgICsNCiAgICArICBpZiAoKnl5bXNnX2Fs
bG9jIDwgeXlzaXplKQ0KICAgICsgICAgew0KICAgICsgICAgICAqeXltc2dfYWxsb2MgPSAyICog
eXlzaXplOw0KICAgICsgICAgICBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxvYw0KICAgICsg
ICAgICAgICAgICAgJiYgKnl5bXNnX2FsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpDQog
ICAgKyAgICAgICAgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJTVVNOw0KICAgICsg
ICAgICByZXR1cm4gMTsNCiAgICArICAgIH0NCiAgICArDQogICAgKyAgLyogQXZvaWQgc3ByaW50
ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLg0KICAgICsgICAg
IERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uDQog
ICAgKyAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJz
LiAgKi8NCiAgICArICB7DQogICAgKyAgICBjaGFyICp5eXAgPSAqeXltc2c7DQogICAgKyAgICBp
bnQgeXlpID0gMDsNCiAgICArICAgIHdoaWxlICgoKnl5cCA9ICp5eWZvcm1hdCkgIT0gJ1wwJykN
CiAgICArICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5Zm9ybWF0WzFdID09ICdzJyAmJiB5eWkg
PCB5eWNvdW50KQ0KICAgICsgICAgICAgIHsNCiAgICArICAgICAgICAgIHl5cCArPSB5eXRuYW1l
cnIgKHl5cCwgeXlhcmdbeXlpKytdKTsNCiAgICArICAgICAgICAgIHl5Zm9ybWF0ICs9IDI7DQog
ICAgKyAgICAgICAgfQ0KICAgICsgICAgICBlbHNlDQogICAgKyAgICAgICAgew0KICAgICsgICAg
ICAgICAgeXlwKys7DQogICAgKyAgICAgICAgICB5eWZvcm1hdCsrOw0KICAgICsgICAgICAgIH0N
CiAgICArICB9DQogICAgKyAgcmV0dXJuIDA7DQogICAgK30NCiAgICArI2VuZGlmIC8qIFlZRVJS
T1JfVkVSQk9TRSAqLw0KICAgICsNCiAgICArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICArfCBSZWxlYXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRl
ZCB0byB0aGlzIHN5bWJvbC4gIHwNCiAgICArYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICArDQogICAgK3N0YXRpYyB2b2lkDQogICAgK3l5ZGVz
dHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkN
CiAgICArew0KICAgICsgIFlZVVNFICh5eXZhbHVlcCk7DQogICAgKyAgaWYgKCF5eW1zZykNCiAg
ICArICAgIHl5bXNnID0gIkRlbGV0aW5nIjsNCiAgICArICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNn
LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7DQogICAgKw0KICAgICsgIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lODQogICAgKyAgc3dpdGNoICh5eXR5cGUpDQogICAg
KyAgICB7DQogICAgKyAgICAgICAgICBjYXNlIDYyOiAvKiBjaG9pY2VfZW50cnkgICovDQogICAg
Kw0KICAgICsgICAgICB7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVu
ZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsDQogICAgKwkJKCgqeXl2YWx1ZXApLm1lbnUp
LT5maWxlLT5uYW1lLCAoKCp5eXZhbHVlcCkubWVudSktPmxpbmVubyk7DQogICAgKwlpZiAoY3Vy
cmVudF9tZW51ID09ICgoKnl5dmFsdWVwKS5tZW51KSkNCiAgICArCQltZW51X2VuZF9tZW51KCk7
DQogICAgK30NCiAgICArDQogICAgKyAgICAgICAgYnJlYWs7DQogICAgKw0KICAgICsgICAgY2Fz
ZSA2ODogLyogaWZfZW50cnkgICovDQogICAgKw0KICAgICsgICAgICB7DQogICAgKwlmcHJpbnRm
KHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIs
DQogICAgKwkJKCgqeXl2YWx1ZXApLm1lbnUpLT5maWxlLT5uYW1lLCAoKCp5eXZhbHVlcCkubWVu
dSktPmxpbmVubyk7DQogICAgKwlpZiAoY3VycmVudF9tZW51ID09ICgoKnl5dmFsdWVwKS5tZW51
KSkNCiAgICArCQltZW51X2VuZF9tZW51KCk7DQogICAgK30NCiAgICArDQogICAgKyAgICAgICAg
YnJlYWs7DQogICAgKw0KICAgICsgICAgY2FzZSA3MzogLyogbWVudV9lbnRyeSAgKi8NCiAgICAr
DQogICAgKyAgICAgIHsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5k
IHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwNCiAgICArCQkoKCp5eXZhbHVlcCkubWVudSkt
PmZpbGUtPm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+bGluZW5vKTsNCiAgICArCWlmIChjdXJy
ZW50X21lbnUgPT0gKCgqeXl2YWx1ZXApLm1lbnUpKQ0KICAgICsJCW1lbnVfZW5kX21lbnUoKTsN
CiAgICArfQ0KICAgICsNCiAgICArICAgICAgICBicmVhazsNCiAgICArDQogICAgKw0KICAgICsg
ICAgICBkZWZhdWx0Og0KICAgICsgICAgICAgIGJyZWFrOw0KICAgICsgICAgfQ0KICAgICsgIFlZ
X0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORA0KICAgICt9DQogICAgKw0KICAgICsNCiAg
ICArDQogICAgKw0KICAgICsvKiBUaGUgbG9va2FoZWFkIHN5bWJvbC4gICovDQogICAgK2ludCB5
eWNoYXI7DQogICAgKw0KICAgICsvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVh
ZCBzeW1ib2wuICAqLw0KICAgICtZWVNUWVBFIHl5bHZhbDsNCiAgICArLyogTnVtYmVyIG9mIHN5
bnRheCBlcnJvcnMgc28gZmFyLiAgKi8NCiAgICAraW50IHl5bmVycnM7DQogICAgKw0KICAgICsN
CiAgICArLyotLS0tLS0tLS0tLg0KICAgICt8IHl5cGFyc2UuICB8DQogICAgK2AtLS0tLS0tLS0t
Ki8NCiAgICArDQogICAgK2ludA0KICAgICt5eXBhcnNlICh2b2lkKQ0KICAgICt7DQogICAgKyAg
ICBpbnQgeXlzdGF0ZTsNCiAgICArICAgIC8qIE51bWJlciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVm
b3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLw0KICAgICsgICAgaW50IHl5ZXJyc3RhdHVz
Ow0KICAgICsNCiAgICArICAgIC8qIFRoZSBzdGFja3MgYW5kIHRoZWlyIHRvb2xzOg0KICAgICsg
ICAgICAgJ3l5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4NCiAgICArICAgICAgICd5eXZzJzogcmVs
YXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuDQogICAgKw0KICAgICsgICAgICAgUmVmZXIgdG8gdGhl
IHN0YWNrcyB0aHJvdWdoIHNlcGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93DQog
ICAgKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxzZXdoZXJlLiAgKi8NCiAgICArDQogICAg
KyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLw0KICAgICsgICAgeXl0eXBlX2ludDE2IHl5c3Nh
W1lZSU5JVERFUFRIXTsNCiAgICArICAgIHl5dHlwZV9pbnQxNiAqeXlzczsNCiAgICArICAgIHl5
dHlwZV9pbnQxNiAqeXlzc3A7DQogICAgKw0KICAgICsgICAgLyogVGhlIHNlbWFudGljIHZhbHVl
IHN0YWNrLiAgKi8NCiAgICArICAgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOw0KICAgICsg
ICAgWVlTVFlQRSAqeXl2czsNCiAgICArICAgIFlZU1RZUEUgKnl5dnNwOw0KICAgICsNCiAgICAr
ICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOw0KICAgICsNCiAgICArICBpbnQgeXluOw0KICAgICsg
IGludCB5eXJlc3VsdDsNCiAgICArICAvKiBMb29rYWhlYWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwg
KHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovDQogICAgKyAgaW50IHl5dG9rZW4gPSAwOw0K
ICAgICsgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byByZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5k
IGxvY2F0aW9uIGZyb20gdGhlDQogICAgKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8NCiAgICAr
ICBZWVNUWVBFIHl5dmFsOw0KICAgICsNCiAgICArI2lmIFlZRVJST1JfVkVSQk9TRQ0KICAgICsg
IC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2NhdGVkIHNpemUuICAq
Lw0KICAgICsgIGNoYXIgeXltc2didWZbMTI4XTsNCiAgICArICBjaGFyICp5eW1zZyA9IHl5bXNn
YnVmOw0KICAgICsgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOw0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKyNkZWZpbmUgWVlQT1BTVEFDSyhOKSAgICh5eXZzcCAtPSAo
TiksIHl5c3NwIC09IChOKSkNCiAgICArDQogICAgKyAgLyogVGhlIG51bWJlciBvZiBzeW1ib2xz
IG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4NCiAgICArICAgICBLZWVwIHRvIHplcm8g
d2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4gICovDQogICAgKyAgaW50IHl5bGVuID0g
MDsNCiAgICArDQogICAgKyAgeXlzc3AgPSB5eXNzID0geXlzc2E7DQogICAgKyAgeXl2c3AgPSB5
eXZzID0geXl2c2E7DQogICAgKyAgeXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsNCiAgICArDQog
ICAgKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRpbmcgcGFyc2VcbiIpKTsNCiAgICArDQog
ICAgKyAgeXlzdGF0ZSA9IDA7DQogICAgKyAgeXllcnJzdGF0dXMgPSAwOw0KICAgICsgIHl5bmVy
cnMgPSAwOw0KICAgICsgIHl5Y2hhciA9IFlZRU1QVFk7IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUg
cmVhZC4gICovDQogICAgKyAgZ290byB5eXNldHN0YXRlOw0KICAgICsNCiAgICArLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQog
ICAgK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5
eXN0YXRlLiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICArIHl5bmV3c3RhdGU6DQogICAgKyAgLyogSW4g
YWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFj
a3MNCiAgICArICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUg
aGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8NCiAgICArICB5eXNzcCsrOw0KICAgICsNCiAgICAr
IHl5c2V0c3RhdGU6DQogICAgKyAgKnl5c3NwID0geXlzdGF0ZTsNCiAgICArDQogICAgKyAgaWYg
KHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApDQogICAgKyAgICB7DQogICAgKyAgICAg
IC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywgaW4gZWxl
bWVudHMuICAqLw0KICAgICsgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAx
Ow0KICAgICsNCiAgICArI2lmZGVmIHl5b3ZlcmZsb3cNCiAgICArICAgICAgew0KICAgICsgICAg
ICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBj
b3BpZXMgb2YNCiAgICArICAgICAgICAgICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9y
Y2UgdGhlIHJlYWwgb25lcyBpbnRvDQogICAgKyAgICAgICAgICAgbWVtb3J5LiAgKi8NCiAgICAr
ICAgICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7DQogICAgKyAgICAgICAgeXl0eXBlX2ludDE2
ICp5eXNzMSA9IHl5c3M7DQogICAgKw0KICAgICsgICAgICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRl
ciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXplIG9mIHRoZQ0KICAgICsgICAgICAgICAg
IGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEN
CiAgICArICAgICAgICAgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0aGUgdHdvIGV4dHJhIGFy
Z3MsIGJ1dCB0aGF0IG1pZ2h0DQogICAgKyAgICAgICAgICAgYmUgdW5kZWZpbmVkIGlmIHl5b3Zl
cmZsb3cgaXMgYSBtYWNyby4gICovDQogICAgKyAgICAgICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1v
cnkgZXhoYXVzdGVkIiksDQogICAgKyAgICAgICAgICAgICAgICAgICAgJnl5c3MxLCB5eXNpemUg
KiBzaXplb2YgKCp5eXNzcCksDQogICAgKyAgICAgICAgICAgICAgICAgICAgJnl5dnMxLCB5eXNp
emUgKiBzaXplb2YgKCp5eXZzcCksDQogICAgKyAgICAgICAgICAgICAgICAgICAgJnl5c3RhY2tz
aXplKTsNCiAgICArDQogICAgKyAgICAgICAgeXlzcyA9IHl5c3MxOw0KICAgICsgICAgICAgIHl5
dnMgPSB5eXZzMTsNCiAgICArICAgICAgfQ0KICAgICsjZWxzZSAvKiBubyB5eW92ZXJmbG93ICov
DQogICAgKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUNCiAgICArICAgICAgZ290byB5eWV4aGF1
c3RlZGxhYjsNCiAgICArIyBlbHNlDQogICAgKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3Vy
IG93biB3YXkuICAqLw0KICAgICsgICAgICBpZiAoWVlNQVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkN
CiAgICArICAgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOw0KICAgICsgICAgICB5eXN0YWNrc2l6
ZSAqPSAyOw0KICAgICsgICAgICBpZiAoWVlNQVhERVBUSCA8IHl5c3RhY2tzaXplKQ0KICAgICsg
ICAgICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsNCiAgICArDQogICAgKyAgICAgIHsNCiAg
ICArICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsNCiAgICArICAgICAgICB1bmlv
biB5eWFsbG9jICp5eXB0ciA9DQogICAgKyAgICAgICAgICAodW5pb24geXlhbGxvYyAqKSBZWVNU
QUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOw0KICAgICsgICAgICAgIGlm
ICghIHl5cHRyKQ0KICAgICsgICAgICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsNCiAgICArICAg
ICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9jLCB5eXNzKTsNCiAgICArICAgICAgICBZ
WVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZzKTsNCiAgICArIyAgdW5kZWYgWVlTVEFD
S19SRUxPQ0FURQ0KICAgICsgICAgICAgIGlmICh5eXNzMSAhPSB5eXNzYSkNCiAgICArICAgICAg
ICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOw0KICAgICsgICAgICB9DQogICAgKyMgZW5kaWYNCiAg
ICArI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8NCiAgICArDQogICAgKyAgICAgIHl5c3NwID0g
eXlzcyArIHl5c2l6ZSAtIDE7DQogICAgKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7
DQogICAgKw0KICAgICsgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3Jl
YXNlZCB0byAlbHVcbiIsDQogICAgKyAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGlu
dCkgeXlzdGFja3NpemUpKTsNCiAgICArDQogICAgKyAgICAgIGlmICh5eXNzICsgeXlzdGFja3Np
emUgLSAxIDw9IHl5c3NwKQ0KICAgICsgICAgICAgIFlZQUJPUlQ7DQogICAgKyAgICB9DQogICAg
Kw0KICAgICsgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVudGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0
YXRlKSk7DQogICAgKw0KICAgICsgIGlmICh5eXN0YXRlID09IFlZRklOQUwpDQogICAgKyAgICBZ
WUFDQ0VQVDsNCiAgICArDQogICAgKyAgZ290byB5eWJhY2t1cDsNCiAgICArDQogICAgKy8qLS0t
LS0tLS0tLS0uDQogICAgK3wgeXliYWNrdXAuICB8DQogICAgK2AtLS0tLS0tLS0tLSovDQogICAg
K3l5YmFja3VwOg0KICAgICsNCiAgICArICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdp
dmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhDQogICAgKyAgICAgbG9va2FoZWFkIHRva2Vu
IGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5IGhhdmUgb25lLiAgKi8NCiAgICArDQog
ICAgKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNl
IHRvIGxvb2thaGVhZCB0b2tlbi4gICovDQogICAgKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOw0K
ICAgICsgIGlmICh5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdCAoeXluKSkNCiAgICArICAgIGdvdG8g
eXlkZWZhdWx0Ow0KICAgICsNCiAgICArICAvKiBOb3Qga25vd24gPT4gZ2V0IGEgbG9va2FoZWFk
IHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLw0KICAgICsNCiAgICArICAvKiBZ
WUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Ygb3IgYSB2YWxpZCBsb29rYWhlYWQgc3lt
Ym9sLiAgKi8NCiAgICArICBpZiAoeXljaGFyID09IFlZRU1QVFkpDQogICAgKyAgICB7DQogICAg
KyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOw0KICAgICsg
ICAgICB5eWNoYXIgPSB5eWxleCAoKTsNCiAgICArICAgIH0NCiAgICArDQogICAgKyAgaWYgKHl5
Y2hhciA8PSBZWUVPRikNCiAgICArICAgIHsNCiAgICArICAgICAgeXljaGFyID0geXl0b2tlbiA9
IFlZRU9GOw0KICAgICsgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cgYXQgZW5kIG9mIGlu
cHV0LlxuIikpOw0KICAgICsgICAgfQ0KICAgICsgIGVsc2UNCiAgICArICAgIHsNCiAgICArICAg
ICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOw0KICAgICsgICAgICBZWV9TWU1CT0xf
UFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7DQogICAg
KyAgICB9DQogICAgKw0KICAgICsgIC8qIElmIHRoZSBwcm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0
b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bw0KICAgICsgICAgIGRldGVjdCBhbiBlcnJv
ciwgdGFrZSB0aGF0IGFjdGlvbi4gICovDQogICAgKyAgeXluICs9IHl5dG9rZW47DQogICAgKyAg
aWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQ0K
ICAgICsgICAgZ290byB5eWRlZmF1bHQ7DQogICAgKyAgeXluID0geXl0YWJsZVt5eW5dOw0KICAg
ICsgIGlmICh5eW4gPD0gMCkNCiAgICArICAgIHsNCiAgICArICAgICAgaWYgKHl5dGFibGVfdmFs
dWVfaXNfZXJyb3IgKHl5bikpDQogICAgKyAgICAgICAgZ290byB5eWVycmxhYjsNCiAgICArICAg
ICAgeXluID0gLXl5bjsNCiAgICArICAgICAgZ290byB5eXJlZHVjZTsNCiAgICArICAgIH0NCiAg
ICArDQogICAgKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRo
cmVlLCB0dXJuIG9mZiBlcnJvcg0KICAgICsgICAgIHN0YXR1cy4gICovDQogICAgKyAgaWYgKHl5
ZXJyc3RhdHVzKQ0KICAgICsgICAgeXllcnJzdGF0dXMtLTsNCiAgICArDQogICAgKyAgLyogU2hp
ZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovDQogICAgKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hp
ZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsNCiAgICArDQogICAgKyAgLyogRGlz
Y2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovDQogICAgKyAgeXljaGFyID0gWVlFTVBUWTsNCiAg
ICArDQogICAgKyAgeXlzdGF0ZSA9IHl5bjsNCiAgICArICBZWV9JR05PUkVfTUFZQkVfVU5JTklU
SUFMSVpFRF9CRUdJTg0KICAgICsgICorK3l5dnNwID0geXlsdmFsOw0KICAgICsgIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORA0KICAgICsNCiAgICArICBnb3RvIHl5bmV3c3RhdGU7
DQogICAgKw0KICAgICsNCiAgICArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICArfCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRl
ZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0ZS4gIHwNCiAgICArYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAr
eXlkZWZhdWx0Og0KICAgICsgIHl5biA9IHl5ZGVmYWN0W3l5c3RhdGVdOw0KICAgICsgIGlmICh5
eW4gPT0gMCkNCiAgICArICAgIGdvdG8geXllcnJsYWI7DQogICAgKyAgZ290byB5eXJlZHVjZTsN
CiAgICArDQogICAgKw0KICAgICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAg
ICt8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLw0KICAgICt5eXJlZHVjZToNCiAgICArICAvKiB5eW4gaXMgdGhlIG51
bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLw0KICAgICsgIHl5bGVuID0geXlyMlt5
eW5dOw0KICAgICsNCiAgICArICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhl
IGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoNCiAgICArICAgICAnJCQgPSAkMScuDQogICAg
Kw0KICAgICsgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8g
Z2FyYmFnZS4NCiAgICArICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlz
b24NCiAgICArICAgICB1c2VycyBzaG91bGQgbm90IHJlbHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0
byBZWVZBTA0KICAgICsgICAgIHVuY29uZGl0aW9uYWxseSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0
IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQ0KICAgICsgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlW
QUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICovDQogICAgKyAgeXl2YWwgPSB5eXZzcFsx
LXl5bGVuXTsNCiAgICArDQogICAgKw0KICAgICsgIFlZX1JFRFVDRV9QUklOVCAoeXluKTsNCiAg
ICArICBzd2l0Y2ggKHl5bikNCiAgICArICAgIHsNCiAgICArICAgICAgICBjYXNlIDY6DQogICAg
Kw0KICAgICsgICAgew0KICAgICsJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgKHl5dnNwWy0xXS5z
dHJpbmcpLCBOVUxMKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAg
ICArICBjYXNlIDExOg0KICAgICsNCiAgICArICAgIHsgemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQg
ZW5kIHN0YXRlbWVudCIpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsg
IGNhc2UgMTI6DQogICAgKw0KICAgICsgICAgeyB6Y29uZl9lcnJvcigidW5rbm93biBzdGF0ZW1l
bnQgXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFr
Ow0KICAgICsNCiAgICArICBjYXNlIDEzOg0KICAgICsNCiAgICArICAgIHsNCiAgICArCXpjb25m
X2Vycm9yKCJ1bmV4cGVjdGVkIG9wdGlvbiBcIiVzXCIiLCAoeXl2c3BbLTJdLmlkKS0+bmFtZSk7
DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxNDoN
CiAgICArDQogICAgKyAgICB7IHpjb25mX2Vycm9yKCJpbnZhbGlkIHN0YXRlbWVudCIpOyB9DQog
ICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMzE6DQogICAgKw0KICAg
ICsgICAgeyB6Y29uZl9lcnJvcigidW5rbm93biBvcHRpb24gXCIlc1wiIiwgKHl5dnNwWy0yXS5z
dHJpbmcpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDMy
Og0KICAgICsNCiAgICArICAgIHsgemNvbmZfZXJyb3IoImludmFsaWQgb3B0aW9uIik7IH0NCiAg
ICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAzMzoNCiAgICArDQogICAg
KyAgICB7DQogICAgKwkoeXl2c3BbLTFdLnN5bWJvbCktPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05B
TDsNCiAgICArCW1lbnVfYWRkX2VudHJ5KCh5eXZzcFstMV0uc3ltYm9sKSk7DQogICAgKwlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNv
bmZfbGluZW5vKCksICh5eXZzcFstMV0uc3ltYm9sKS0+bmFtZSk7DQogICAgK30NCiAgICArDQog
ICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAzNDoNCiAgICArDQogICAgKyAgICB7
DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7
DQogICAgKw0KICAgICsgIGNhc2UgMzU6DQogICAgKw0KICAgICsgICAgew0KICAgICsJKHl5dnNw
Wy0xXS5zeW1ib2wpLT5mbGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7DQogICAgKwltZW51X2FkZF9l
bnRyeSgoeXl2c3BbLTFdLnN5bWJvbCkpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6bWVudWNvbmZpZyAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5
dnNwWy0xXS5zeW1ib2wpLT5uYW1lKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0K
ICAgICsNCiAgICArICBjYXNlIDM2Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCWlmIChjdXJy
ZW50X2VudHJ5LT5wcm9tcHQpDQogICAgKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0LT50eXBlID0g
UF9NRU5VOw0KICAgICsJZWxzZQ0KICAgICsJCXpjb25mcHJpbnQoIndhcm5pbmc6IG1lbnVjb25m
aWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0K
ICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgNDQ6DQog
ICAgKw0KICAgICsgICAgew0KICAgICsJbWVudV9zZXRfdHlwZSgoeXl2c3BbLTJdLmlkKS0+c3R5
cGUpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsDQogICAg
KwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwNCiAgICArCQkoeXl2c3BbLTJdLmlk
KS0+c3R5cGUpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsg
IGNhc2UgNDU6DQogICAgKw0KICAgICsgICAgew0KICAgICsJbWVudV9hZGRfcHJvbXB0KFBfUFJP
TVBULCAoeXl2c3BbLTJdLnN0cmluZyksICh5eXZzcFstMV0uZXhwcikpOw0KICAgICsJcHJpbnRk
KERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBj
YXNlIDQ2Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxU
LCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCWlmICgoeXl2c3Bb
LTNdLmlkKS0+c3R5cGUgIT0gU19VTktOT1dOKQ0KICAgICsJCW1lbnVfc2V0X3R5cGUoKHl5dnNw
Wy0zXS5pZCktPnN0eXBlKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1
bHQoJXUpXG4iLA0KICAgICsJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksDQogICAg
KwkJKHl5dnNwWy0zXS5pZCktPnN0eXBlKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFr
Ow0KICAgICsNCiAgICArICBjYXNlIDQ3Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCW1lbnVf
YWRkX3N5bWJvbChQX1NFTEVDVCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbLTFdLmV4cHIp
KTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3Vy
bmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsN
CiAgICArDQogICAgKyAgY2FzZSA0ODoNCiAgICArDQogICAgKyAgICB7DQogICAgKwltZW51X2Fk
ZF9zeW1ib2woUF9JTVBMWSwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbLTFdLmV4cHIpKTsN
CiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmltcGx5XG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAg
ICsNCiAgICArICBjYXNlIDQ5Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCW1lbnVfYWRkX2V4
cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFOR0UsKHl5dnNwWy0zXS5zeW1ib2wpLCAo
eXl2c3BbLTJdLnN5bWJvbCkpLCAoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCXByaW50ZChERUJV
R19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDUy
Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCWNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBr
Y29uZl9pZF9sb29rdXAoKHl5dnNwWy0xXS5zdHJpbmcpLCBzdHJsZW4oKHl5dnNwWy0xXS5zdHJp
bmcpKSk7DQogICAgKwlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfT1BUSU9OKSB7DQogICAgKwkJ
bWVudV9hZGRfb3B0aW9uKGlkLT50b2tlbiwgKHl5dnNwWzBdLnN0cmluZykpOw0KICAgICsJCWZy
ZWUoKHl5dnNwWzBdLnN0cmluZykpOw0KICAgICsJfQ0KICAgICsJZWxzZQ0KICAgICsJCXpjb25m
cHJpbnQoIndhcm5pbmc6IGlnbm9yaW5nIHVua25vd24gb3B0aW9uICVzIiwgKHl5dnNwWy0xXS5z
dHJpbmcpKTsNCiAgICArCWZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsNCiAgICArfQ0KICAgICsN
CiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDUzOg0KICAgICsNCiAgICArICAg
IHsgKHl5dmFsLnN0cmluZykgPSBOVUxMOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAg
Kw0KICAgICsgIGNhc2UgNTQ6DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwuc3RyaW5nKSA9ICh5
eXZzcFswXS5zdHJpbmcpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsg
IGNhc2UgNTU6DQogICAgKw0KICAgICsgICAgew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltID0g
c3ltX2xvb2t1cCgoeXl2c3BbLTFdLnN0cmluZyksIFNZTUJPTF9DSE9JQ0UpOw0KICAgICsJc3lt
LT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7DQogICAgKwltZW51X2FkZF9lbnRyeShzeW0pOw0K
ICAgICsJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7DQogICAgKwlmcmVlKCh5
eXZzcFstMV0uc3RyaW5nKSk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjaG9p
Y2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9DQogICAgKw0K
ICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgNTY6DQogICAgKw0KICAgICsgICAg
ew0KICAgICsJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOw0KICAgICt9DQogICAgKw0K
ICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgNTc6DQogICAgKw0KICAgICsgICAg
ew0KICAgICsJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRfQ0hPSUNFLCBUX0VO
RENIT0lDRSkpIHsNCiAgICArCQltZW51X2VuZF9tZW51KCk7DQogICAgKwkJcHJpbnRkKERFQlVH
X1BBUlNFLCAiJXM6JWQ6ZW5kY2hvaWNlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAg
ICArICBjYXNlIDY1Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCW1lbnVfYWRkX3Byb21wdChQ
X1BST01QVCwgKHl5dnNwWy0yXS5zdHJpbmcpLCAoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCXBy
aW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29u
Zl9saW5lbm8oKSk7DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAg
KyAgY2FzZSA2NjoNCiAgICArDQogICAgKyAgICB7DQogICAgKwlpZiAoKHl5dnNwWy0yXS5pZCkt
PnN0eXBlID09IFNfQk9PTEVBTiB8fCAoeXl2c3BbLTJdLmlkKS0+c3R5cGUgPT0gU19UUklTVEFU
RSkgew0KICAgICsJCW1lbnVfc2V0X3R5cGUoKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsNCiAgICAr
CQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwNCiAgICArCQkJemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwNCiAgICArCQkJKHl5dnNwWy0yXS5pZCktPnN0eXBl
KTsNCiAgICArCX0gZWxzZQ0KICAgICsJCVlZRVJST1I7DQogICAgK30NCiAgICArDQogICAgKyAg
ICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA2NzoNCiAgICArDQogICAgKyAgICB7DQogICAg
KwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsNCiAgICArCXBy
aW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm9wdGlvbmFsXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpj
b25mX2xpbmVubygpKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAg
ICArICBjYXNlIDY4Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCWlmICgoeXl2c3BbLTNdLmlk
KS0+c3R5cGUgPT0gU19VTktOT1dOKSB7DQogICAgKwkJbWVudV9hZGRfc3ltYm9sKFBfREVGQVVM
VCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCQlwcmludGQo
REVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLA0KICAgICsJCQl6Y29uZl9jdXJuYW1lKCks
IHpjb25mX2xpbmVubygpKTsNCiAgICArCX0gZWxzZQ0KICAgICsJCVlZRVJST1I7DQogICAgK30N
CiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA3MToNCiAgICArDQog
ICAgKyAgICB7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppZlxuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgKwltZW51X2FkZF9lbnRyeShOVUxMKTsN
CiAgICArCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCSh5eXZhbC5tZW51
KSA9IG1lbnVfYWRkX21lbnUoKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAg
ICsNCiAgICArICBjYXNlIDcyOg0KICAgICsNCiAgICArICAgIHsNCiAgICArCWlmICh6Y29uZl9l
bmR0b2tlbigoeXl2c3BbMF0uaWQpLCBUX0lGLCBUX0VORElGKSkgew0KICAgICsJCW1lbnVfZW5k
X21lbnUoKTsNCiAgICArCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRpZlxuIiwgemNv
bmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgKwl9DQogICAgK30NCiAgICArDQog
ICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA3ODoNCiAgICArDQogICAgKyAgICB7
DQogICAgKwltZW51X2FkZF9lbnRyeShOVUxMKTsNCiAgICArCW1lbnVfYWRkX3Byb21wdChQX01F
TlUsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVMTCk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAr
fQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDc5Og0KICAgICsN
CiAgICArICAgIHsNCiAgICArCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsNCiAgICAr
fQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDgwOg0KICAgICsN
CiAgICArICAgIHsNCiAgICArCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2c3BbMF0uaWQpLCBUX01F
TlUsIFRfRU5ETUVOVSkpIHsNCiAgICArCQltZW51X2VuZF9tZW51KCk7DQogICAgKwkJcHJpbnRk
KERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9s
aW5lbm8oKSk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICAr
DQogICAgKyAgY2FzZSA4NjoNCiAgICArDQogICAgKyAgICB7DQogICAgKwlwcmludGQoREVCVUdf
UEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCksICh5eXZzcFstMV0uc3RyaW5nKSk7DQogICAgKwl6Y29uZl9uZXh0ZmlsZSgoeXl2c3BbLTFd
LnN0cmluZykpOw0KICAgICsJZnJlZSgoeXl2c3BbLTFdLnN0cmluZykpOw0KICAgICt9DQogICAg
Kw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgODc6DQogICAgKw0KICAgICsg
ICAgew0KICAgICsJbWVudV9hZGRfZW50cnkoTlVMTCk7DQogICAgKwltZW51X2FkZF9wcm9tcHQo
UF9DT01NRU5ULCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwpOw0KICAgICsJcHJpbnRkKERFQlVH
X1BBUlNFLCAiJXM6JWQ6Y29tbWVudFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA4
OToNCiAgICArDQogICAgKyAgICB7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpo
ZWxwXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArCXpjb25mX3N0
YXJ0aGVscCgpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsg
IGNhc2UgOTA6DQogICAgKw0KICAgICsgICAgew0KICAgICsJaWYgKGN1cnJlbnRfZW50cnktPmhl
bHApIHsNCiAgICArCQlmcmVlKGN1cnJlbnRfZW50cnktPmhlbHApOw0KICAgICsJCXpjb25mcHJp
bnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIG1vcmUgdGhhbiBvbmUgaGVscCB0ZXh0IC0t
IG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCIsDQogICAgKwkJCSAgIGN1cnJlbnRfZW50
cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsNCiAgICArCX0NCiAgICArDQogICAgKwkvKiBJ
cyB0aGUgaGVscCB0ZXh0IGVtcHR5IG9yIGFsbCB3aGl0ZXNwYWNlPyAqLw0KICAgICsJaWYgKCh5
eXZzcFswXS5zdHJpbmcpW3N0cnNwbigoeXl2c3BbMF0uc3RyaW5nKSwgIiBcZlxuXHJcdFx2Iild
ID09ICdcMCcpDQogICAgKwkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVkIHdpdGgg
YmxhbmsgaGVscCB0ZXh0IiwNCiAgICArCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86
ICI8Y2hvaWNlPiIpOw0KICAgICsNCiAgICArCWN1cnJlbnRfZW50cnktPmhlbHAgPSAoeXl2c3Bb
MF0uc3RyaW5nKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICAr
ICBjYXNlIDk1Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCW1lbnVfYWRkX2RlcCgoeXl2c3Bb
LTFdLmV4cHIpKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlcGVuZHMgb25c
biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9DQogICAgKw0KICAg
ICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgOTk6DQogICAgKw0KICAgICsgICAgew0K
ICAgICsJbWVudV9hZGRfdmlzaWJpbGl0eSgoeXl2c3BbMF0uZXhwcikpOw0KICAgICt9DQogICAg
Kw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTAxOg0KICAgICsNCiAgICAr
ICAgIHsNCiAgICArCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWy0xXS5zdHJpbmcp
LCAoeXl2c3BbMF0uZXhwcikpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAg
Kw0KICAgICsgIGNhc2UgMTA0Og0KICAgICsNCiAgICArICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZz
cFstMV0uaWQpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2Ug
MTA1Og0KICAgICsNCiAgICArICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0uaWQpOyB9DQog
ICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTA2Og0KICAgICsNCiAg
ICArICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0uaWQpOyB9DQogICAgKw0KICAgICsgICAg
YnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTA5Og0KICAgICsNCiAgICArICAgIHsgKHl5dmFs
LmV4cHIpID0gTlVMTDsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBj
YXNlIDExMDoNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9ICh5eXZzcFswXS5leHBy
KTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDExMToNCiAg
ICArDQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCh5eXZzcFsw
XS5zeW1ib2wpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNl
IDExMjoNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChF
X0xUSCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0NCiAgICArDQog
ICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxMTM6DQogICAgKw0KICAgICsgICAg
eyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9MRVEsICh5eXZzcFstMl0uc3ltYm9s
KSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0K
ICAgICsgIGNhc2UgMTE0Og0KICAgICsNCiAgICArICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9h
bGxvY19jb21wKEVfR1RILCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsg
fQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDExNToNCiAgICAr
DQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0dFUSwgKHl5dnNw
Wy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0NCiAgICArDQogICAgKyAgICBicmVh
azsNCiAgICArDQogICAgKyAgY2FzZSAxMTY6DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwuZXhw
cikgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3Bb
MF0uc3ltYm9sKSk7IH0NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2Fz
ZSAxMTc6DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAo
RV9VTkVRVUFMLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQ0KICAg
ICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDExODoNCiAgICArDQogICAg
KyAgICB7ICh5eXZhbC5leHByKSA9ICh5eXZzcFstMV0uZXhwcik7IH0NCiAgICArDQogICAgKyAg
ICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxMTk6DQogICAgKw0KICAgICsgICAgeyAoeXl2
YWwuZXhwcikgPSBleHByX2FsbG9jX29uZShFX05PVCwgKHl5dnNwWzBdLmV4cHIpKTsgfQ0KICAg
ICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDEyMDoNCiAgICArDQogICAg
KyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfdHdvKEVfT1IsICh5eXZzcFstMl0uZXhw
ciksICh5eXZzcFswXS5leHByKSk7IH0NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQog
ICAgKyAgY2FzZSAxMjE6DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2Fs
bG9jX3R3byhFX0FORCwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWzBdLmV4cHIpKTsgfQ0KICAg
ICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDEyMjoNCiAgICArDQogICAg
KyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1cCgoeXl2c3BbMF0uc3RyaW5nKSwgMCk7
IGZyZWUoKHl5dnNwWzBdLnN0cmluZykpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAg
Kw0KICAgICsgIGNhc2UgMTI0Og0KICAgICsNCiAgICArICAgIHsgKHl5dmFsLnN5bWJvbCkgPSBz
eW1fbG9va3VwKCh5eXZzcFswXS5zdHJpbmcpLCBTWU1CT0xfQ09OU1QpOyBmcmVlKCh5eXZzcFsw
XS5zdHJpbmcpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNl
IDEyNToNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5zdHJpbmcpID0gTlVMTDsgfQ0KICAgICsN
CiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDEyNzoNCiAgICArDQogICAgKyAg
ICB7IHZhcmlhYmxlX2FkZCgoeXl2c3BbLTNdLnN0cmluZyksICh5eXZzcFstMV0uc3RyaW5nKSwg
KHl5dnNwWy0yXS5mbGF2b3IpKTsgZnJlZSgoeXl2c3BbLTNdLnN0cmluZykpOyBmcmVlKCh5eXZz
cFstMV0uc3RyaW5nKSk7IH0NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAg
Y2FzZSAxMjg6DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwuc3RyaW5nKSA9IHhzdHJkdXAoIiIp
OyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsNCiAgICArDQogICAgKyAg
ICAgIGRlZmF1bHQ6IGJyZWFrOw0KICAgICsgICAgfQ0KICAgICsgIC8qIFVzZXIgc2VtYW50aWMg
YWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBhbmQgdGhhdCByZXF1aXJlcw0KICAgICsg
ICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGggdGhlIG5ldyB0cmFuc2xhdGlvbi4gIFdl
IHRha2UgdGhlDQogICAgKyAgICAgYXBwcm9hY2ggb2YgdHJhbnNsYXRpbmcgaW1tZWRpYXRlbHkg
YmVmb3JlIGV2ZXJ5IHVzZSBvZiB5eXRva2VuLg0KICAgICsgICAgIE9uZSBhbHRlcm5hdGl2ZSBp
cyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNlbWFudGljIGFjdGlvbiwNCiAgICArICAg
ICBidXQgdGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYgdGhlIHNlbWFudGljIGFj
dGlvbiBpbnZva2VzDQogICAgKyAgICAgWVlBQk9SVCwgWVlBQ0NFUFQsIG9yIFlZRVJST1IgaW1t
ZWRpYXRlbHkgYWZ0ZXIgYWx0ZXJpbmcgeXljaGFyIG9yDQogICAgKyAgICAgaWYgaXQgaW52b2tl
cyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJPUlQgb3IgWVlBQ0NFUFQsIGFuDQogICAg
KyAgICAgaW5jb3JyZWN0IGRlc3RydWN0b3IgbWlnaHQgdGhlbiBiZSBpbnZva2VkIGltbWVkaWF0
ZWx5LiAgSW4gdGhlDQogICAgKyAgICAgY2FzZSBvZiBZWUVSUk9SIG9yIFlZQkFDS1VQLCBzdWJz
ZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQNCiAgICArICAgICB0byBhbiBpbmNvcnJl
Y3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3ludGF4IGVycm9yIG1lc3NhZ2UNCiAgICAr
ICAgICBiZWZvcmUgdGhlIGxvb2thaGVhZCBpcyB0cmFuc2xhdGVkLiAgKi8NCiAgICArICBZWV9T
WU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7DQogICAg
Kw0KICAgICsgIFlZUE9QU1RBQ0sgKHl5bGVuKTsNCiAgICArICB5eWxlbiA9IDA7DQogICAgKyAg
WVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsNCiAgICArDQogICAgKyAgKisreXl2c3AgPSB5
eXZhbDsNCiAgICArDQogICAgKyAgLyogTm93ICdzaGlmdCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVk
dWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUNCiAgICArICAgICB0aGF0IGdvZXMgdG8sIGJh
c2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0byBhbmQgdGhlIHJ1bGUNCiAgICArICAg
ICBudW1iZXIgcmVkdWNlZCBieS4gICovDQogICAgKw0KICAgICsgIHl5biA9IHl5cjFbeXluXTsN
CiAgICArDQogICAgKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNz
cDsNCiAgICArICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hl
Y2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQ0KICAgICsgICAgeXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0
ZV07DQogICAgKyAgZWxzZQ0KICAgICsgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5U
T0tFTlNdOw0KICAgICsNCiAgICArICBnb3RvIHl5bmV3c3RhdGU7DQogICAgKw0KICAgICsNCiAg
ICArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICArfCB5eWVy
cmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvci4gIHwNCiAgICArYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAreXllcnJsYWI6DQogICAgKyAgLyogTWFr
ZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50
cyBhdA0KICAgICsgICAgIHVzZXIgc2VtYW50aWMgYWN0aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVj
ZXNzYXJ5LiAgKi8NCiAgICArICB5eXRva2VuID0geXljaGFyID09IFlZRU1QVFkgPyBZWUVNUFRZ
IDogWVlUUkFOU0xBVEUgKHl5Y2hhcik7DQogICAgKw0KICAgICsgIC8qIElmIG5vdCBhbHJlYWR5
IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLw0KICAgICsg
IGlmICgheXllcnJzdGF0dXMpDQogICAgKyAgICB7DQogICAgKyAgICAgICsreXluZXJyczsNCiAg
ICArI2lmICEgWVlFUlJPUl9WRVJCT1NFDQogICAgKyAgICAgIHl5ZXJyb3IgKFlZXygic3ludGF4
IGVycm9yIikpOw0KICAgICsjZWxzZQ0KICAgICsjIGRlZmluZSBZWVNZTlRBWF9FUlJPUiB5eXN5
bnRheF9lcnJvciAoJnl5bXNnX2FsbG9jLCAmeXltc2csIFwNCiAgICArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5eXRva2VuKQ0KICAgICsgICAgICB7DQog
ICAgKyAgICAgICAgY2hhciBjb25zdCAqeXltc2dwID0gWVlfKCJzeW50YXggZXJyb3IiKTsNCiAg
ICArICAgICAgICBpbnQgeXlzeW50YXhfZXJyb3Jfc3RhdHVzOw0KICAgICsgICAgICAgIHl5c3lu
dGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9SOw0KICAgICsgICAgICAgIGlmICh5eXN5
bnRheF9lcnJvcl9zdGF0dXMgPT0gMCkNCiAgICArICAgICAgICAgIHl5bXNncCA9IHl5bXNnOw0K
ICAgICsgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAxKQ0KICAgICsg
ICAgICAgICAgew0KICAgICsgICAgICAgICAgICBpZiAoeXltc2cgIT0geXltc2didWYpDQogICAg
KyAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7DQogICAgKyAgICAgICAgICAgIHl5
bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXltc2dfYWxsb2MpOw0KICAgICsgICAgICAg
ICAgICBpZiAoIXl5bXNnKQ0KICAgICsgICAgICAgICAgICAgIHsNCiAgICArICAgICAgICAgICAg
ICAgIHl5bXNnID0geXltc2didWY7DQogICAgKyAgICAgICAgICAgICAgICB5eW1zZ19hbGxvYyA9
IHNpemVvZiB5eW1zZ2J1ZjsNCiAgICArICAgICAgICAgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0
YXR1cyA9IDI7DQogICAgKyAgICAgICAgICAgICAgfQ0KICAgICsgICAgICAgICAgICBlbHNlDQog
ICAgKyAgICAgICAgICAgICAgew0KICAgICsgICAgICAgICAgICAgICAgeXlzeW50YXhfZXJyb3Jf
c3RhdHVzID0gWVlTWU5UQVhfRVJST1I7DQogICAgKyAgICAgICAgICAgICAgICB5eW1zZ3AgPSB5
eW1zZzsNCiAgICArICAgICAgICAgICAgICB9DQogICAgKyAgICAgICAgICB9DQogICAgKyAgICAg
ICAgeXllcnJvciAoeXltc2dwKTsNCiAgICArICAgICAgICBpZiAoeXlzeW50YXhfZXJyb3Jfc3Rh
dHVzID09IDIpDQogICAgKyAgICAgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOw0KICAgICsgICAg
ICB9DQogICAgKyMgdW5kZWYgWVlTWU5UQVhfRVJST1INCiAgICArI2VuZGlmDQogICAgKyAgICB9
DQogICAgKw0KICAgICsNCiAgICArDQogICAgKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpDQogICAg
KyAgICB7DQogICAgKyAgICAgIC8qIElmIGp1c3QgdHJpZWQgYW5kIGZhaWxlZCB0byByZXVzZSBs
b29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4NCiAgICArICAgICAgICAgZXJyb3IsIGRpc2NhcmQgaXQu
ICAqLw0KICAgICsNCiAgICArICAgICAgaWYgKHl5Y2hhciA8PSBZWUVPRikNCiAgICArICAgICAg
ICB7DQogICAgKyAgICAgICAgICAvKiBSZXR1cm4gZmFpbHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQu
ICAqLw0KICAgICsgICAgICAgICAgaWYgKHl5Y2hhciA9PSBZWUVPRikNCiAgICArICAgICAgICAg
ICAgWVlBQk9SVDsNCiAgICArICAgICAgICB9DQogICAgKyAgICAgIGVsc2UNCiAgICArICAgICAg
ICB7DQogICAgKyAgICAgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCk7DQogICAgKyAgICAgICAg
ICB5eWNoYXIgPSBZWUVNUFRZOw0KICAgICsgICAgICAgIH0NCiAgICArICAgIH0NCiAgICArDQog
ICAgKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hp
ZnRpbmcgdGhlIGVycm9yDQogICAgKyAgICAgdG9rZW4uICAqLw0KICAgICsgIGdvdG8geXllcnJs
YWIxOw0KICAgICsNCiAgICArDQogICAgKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IHl5ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2Vk
IGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwNCiAgICArYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgK3l5ZXJyb3JsYWI6DQogICAgKw0K
ICAgICsgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5l
dmVyIGludm9rZXMNCiAgICArICAgICBZWUVSUk9SIGFuZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0
aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyDQogICAgKyAgICAgY29kZS4gICovDQogICAg
KyAgaWYgKC8qQ09OU1RDT05EKi8gMCkNCiAgICArICAgICBnb3RvIHl5ZXJyb3JsYWI7DQogICAg
Kw0KICAgICsgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdob3Nl
IGFjdGlvbiB0cmlnZ2VyZWQNCiAgICArICAgICB0aGlzIFlZRVJST1IuICAqLw0KICAgICsgIFlZ
UE9QU1RBQ0sgKHl5bGVuKTsNCiAgICArICB5eWxlbiA9IDA7DQogICAgKyAgWVlfU1RBQ0tfUFJJ
TlQgKHl5c3MsIHl5c3NwKTsNCiAgICArICB5eXN0YXRlID0gKnl5c3NwOw0KICAgICsgIGdvdG8g
eXllcnJsYWIxOw0KICAgICsNCiAgICArDQogICAgKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICArfCB5eWVycmxhYjEg
LS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVycm9yIGFuZCBZWUVSUk9SLiAgfA0KICAg
ICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSovDQogICAgK3l5ZXJybGFiMToNCiAgICArICB5eWVycnN0YXR1cyA9IDM7ICAgICAg
LyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAgKi8NCiAgICArDQog
ICAgKyAgZm9yICg7OykNCiAgICArICAgIHsNCiAgICArICAgICAgeXluID0geXlwYWN0W3l5c3Rh
dGVdOw0KICAgICsgICAgICBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQ0KICAg
ICsgICAgICAgIHsNCiAgICArICAgICAgICAgIHl5biArPSBZWVRFUlJPUjsNCiAgICArICAgICAg
ICAgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRF
UlJPUikNCiAgICArICAgICAgICAgICAgew0KICAgICsgICAgICAgICAgICAgIHl5biA9IHl5dGFi
bGVbeXluXTsNCiAgICArICAgICAgICAgICAgICBpZiAoMCA8IHl5bikNCiAgICArICAgICAgICAg
ICAgICAgIGJyZWFrOw0KICAgICsgICAgICAgICAgICB9DQogICAgKyAgICAgICAgfQ0KICAgICsN
CiAgICArICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhh
bmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLw0KICAgICsgICAgICBpZiAoeXlzc3AgPT0geXlzcykN
CiAgICArICAgICAgICBZWUFCT1JUOw0KICAgICsNCiAgICArDQogICAgKyAgICAgIHl5ZGVzdHJ1
Y3QgKCJFcnJvcjogcG9wcGluZyIsDQogICAgKyAgICAgICAgICAgICAgICAgIHl5c3Rvc1t5eXN0
YXRlXSwgeXl2c3ApOw0KICAgICsgICAgICBZWVBPUFNUQUNLICgxKTsNCiAgICArICAgICAgeXlz
dGF0ZSA9ICp5eXNzcDsNCiAgICArICAgICAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsN
CiAgICArICAgIH0NCiAgICArDQogICAgKyAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURf
QkVHSU4NCiAgICArICAqKyt5eXZzcCA9IHl5bHZhbDsNCiAgICArICBZWV9JR05PUkVfTUFZQkVf
VU5JTklUSUFMSVpFRF9FTkQNCiAgICArDQogICAgKw0KICAgICsgIC8qIFNoaWZ0IHRoZSBlcnJv
ciB0b2tlbi4gICovDQogICAgKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3Nb
eXluXSwgeXl2c3AsIHl5bHNwKTsNCiAgICArDQogICAgKyAgeXlzdGF0ZSA9IHl5bjsNCiAgICAr
ICBnb3RvIHl5bmV3c3RhdGU7DQogICAgKw0KICAgICsNCiAgICArLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNv
bWVzIGhlcmUuICB8DQogICAgK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ki8NCiAgICAreXlhY2NlcHRsYWI6DQogICAgKyAgeXlyZXN1bHQgPSAwOw0KICAgICsgIGdvdG8g
eXlyZXR1cm47DQogICAgKw0KICAgICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLg0KICAgICt8IHl5YWJvcnRsYWIgLS0gWVlBQk9SVCBjb21lcyBoZXJlLiAgfA0KICAgICtg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgICt5eWFib3J0bGFiOg0K
ICAgICsgIHl5cmVzdWx0ID0gMTsNCiAgICArICBnb3RvIHl5cmV0dXJuOw0KICAgICsNCiAgICAr
I2lmICFkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFDQogICAgKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICArfCB5eWV4
aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfA0KICAgICtgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgK3l5
ZXhoYXVzdGVkbGFiOg0KICAgICsgIHl5ZXJyb3IgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsN
CiAgICArICB5eXJlc3VsdCA9IDI7DQogICAgKyAgLyogRmFsbCB0aHJvdWdoLiAgKi8NCiAgICAr
I2VuZGlmDQogICAgKw0KICAgICt5eXJldHVybjoNCiAgICArICBpZiAoeXljaGFyICE9IFlZRU1Q
VFkpDQogICAgKyAgICB7DQogICAgKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBs
b29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVudHMgYXQNCiAgICArICAgICAgICAgdXNl
ciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLw0KICAgICsg
ICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7DQogICAgKyAgICAgIHl5ZGVzdHJ1
Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVhZCIsDQogICAgKyAgICAgICAgICAgICAg
ICAgIHl5dG9rZW4sICZ5eWx2YWwpOw0KICAgICsgICAgfQ0KICAgICsgIC8qIERvIG5vdCByZWNs
YWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQNCiAgICAr
ICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAqLw0KICAgICsgIFlZUE9QU1RBQ0sgKHl5
bGVuKTsNCiAgICArICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOw0KICAgICsgIHdoaWxl
ICh5eXNzcCAhPSB5eXNzKQ0KICAgICsgICAgew0KICAgICsgICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogcG9wcGluZyIsDQogICAgKyAgICAgICAgICAgICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5
eXZzcCk7DQogICAgKyAgICAgIFlZUE9QU1RBQ0sgKDEpOw0KICAgICsgICAgfQ0KICAgICsjaWZu
ZGVmIHl5b3ZlcmZsb3cNCiAgICArICBpZiAoeXlzcyAhPSB5eXNzYSkNCiAgICArICAgIFlZU1RB
Q0tfRlJFRSAoeXlzcyk7DQogICAgKyNlbmRpZg0KICAgICsjaWYgWVlFUlJPUl9WRVJCT1NFDQog
ICAgKyAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQ0KICAgICsgICAgWVlTVEFDS19GUkVFICh5eW1z
Zyk7DQogICAgKyNlbmRpZg0KICAgICsgIHJldHVybiB5eXJlc3VsdDsNCiAgICArfQ0KICAgICsN
CiAgICArDQogICAgKw0KICAgICt2b2lkIGNvbmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSkNCiAg
ICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJaW50IGk7DQogICAgKw0KICAg
ICsJemNvbmZfaW5pdHNjYW4obmFtZSk7DQogICAgKw0KICAgICsJX21lbnVfaW5pdCgpOw0KICAg
ICsNCiAgICArCWlmIChnZXRlbnYoIlpDT05GX0RFQlVHIikpDQogICAgKwkJeXlkZWJ1ZyA9IDE7
DQogICAgKwl5eXBhcnNlKCk7DQogICAgKw0KICAgICsJLyogVmFyaWFibGVzIGFyZSBleHBhbmRl
ZCBpbiB0aGUgcGFyc2UgcGhhc2UuIFdlIGNhbiBmcmVlIHRoZW0gaGVyZS4gKi8NCiAgICArCXZh
cmlhYmxlX2FsbF9kZWwoKTsNCiAgICArDQogICAgKwlpZiAoeXluZXJycykNCiAgICArCQlleGl0
KDEpOw0KICAgICsJaWYgKCFtb2R1bGVzX3N5bSkNCiAgICArCQltb2R1bGVzX3N5bSA9IHN5bV9m
aW5kKCAibiIgKTsNCiAgICArDQogICAgKwlpZiAoIW1lbnVfaGFzX3Byb21wdCgmcm9vdG1lbnUp
KSB7DQogICAgKwkJY3VycmVudF9lbnRyeSA9ICZyb290bWVudTsNCiAgICArCQltZW51X2FkZF9w
cm9tcHQoUF9NRU5VLCAiTWFpbiBtZW51IiwgTlVMTCk7DQogICAgKwl9DQogICAgKw0KICAgICsJ
bWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOw0KICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkg
ew0KICAgICsJCWlmIChzeW1fY2hlY2tfZGVwcyhzeW0pKQ0KICAgICsJCQl5eW5lcnJzKys7DQog
ICAgKwl9DQogICAgKwlpZiAoeXluZXJycykNCiAgICArCQlleGl0KDEpOw0KICAgICsJc3ltX3Nl
dF9jaGFuZ2VfY291bnQoMSk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBjb25zdCBjaGFy
ICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQ0KICAgICt7DQogICAgKwlzd2l0Y2ggKHRva2Vu
KSB7DQogICAgKwljYXNlIFRfTUVOVToJCXJldHVybiAibWVudSI7DQogICAgKwljYXNlIFRfRU5E
TUVOVToJCXJldHVybiAiZW5kbWVudSI7DQogICAgKwljYXNlIFRfQ0hPSUNFOgkJcmV0dXJuICJj
aG9pY2UiOw0KICAgICsJY2FzZSBUX0VORENIT0lDRToJcmV0dXJuICJlbmRjaG9pY2UiOw0KICAg
ICsJY2FzZSBUX0lGOgkJcmV0dXJuICJpZiI7DQogICAgKwljYXNlIFRfRU5ESUY6CQlyZXR1cm4g
ImVuZGlmIjsNCiAgICArCWNhc2UgVF9ERVBFTkRTOgkJcmV0dXJuICJkZXBlbmRzIjsNCiAgICAr
CWNhc2UgVF9WSVNJQkxFOgkJcmV0dXJuICJ2aXNpYmxlIjsNCiAgICArCX0NCiAgICArCXJldHVy
biAiPHRva2VuPiI7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBib29sIHpjb25mX2VuZHRv
a2VuKGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9r
ZW4pDQogICAgK3sNCiAgICArCWlmIChpZC0+dG9rZW4gIT0gZW5kdG9rZW4pIHsNCiAgICArCQl6
Y29uZl9lcnJvcigidW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9jayIsDQogICAgKwkJCWlk
LT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOw0KICAgICsJCXl5bmVycnMrKzsN
CiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKwl9DQogICAgKwlpZiAoY3VycmVudF9tZW51LT5m
aWxlICE9IGN1cnJlbnRfZmlsZSkgew0KICAgICsJCXpjb25mX2Vycm9yKCInJXMnIGluIGRpZmZl
cmVudCBmaWxlIHRoYW4gJyVzJyIsDQogICAgKwkJCWlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUo
c3RhcnR0b2tlbikpOw0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9m
IHRoZSAnJXMnXG4iLA0KICAgICsJCQljdXJyZW50X21lbnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRf
bWVudS0+bGluZW5vLA0KICAgICsJCQl6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOw0KICAg
ICsJCXl5bmVycnMrKzsNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKwl9DQogICAgKwlyZXR1
cm4gdHJ1ZTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgemNvbmZwcmludChjb25z
dCBjaGFyICplcnIsIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBhcDsNCiAgICArDQogICAg
KwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICArCXZhX3N0YXJ0KGFwLCBlcnIpOw0KICAgICsJdmZwcmludGYoc3RkZXJyLCBl
cnIsIGFwKTsNCiAgICArCXZhX2VuZChhcCk7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7
DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHpjb25mX2Vycm9yKGNvbnN0IGNoYXIg
KmVyciwgLi4uKQ0KICAgICt7DQogICAgKwl2YV9saXN0IGFwOw0KICAgICsNCiAgICArCXl5bmVy
cnMrKzsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOw0KICAgICsJdmFfc3RhcnQoYXAsIGVycik7DQogICAgKwl2ZnByaW50
ZihzdGRlcnIsIGVyciwgYXApOw0KICAgICsJdmFfZW5kKGFwKTsNCiAgICArCWZwcmludGYoc3Rk
ZXJyLCAiXG4iKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgeXllcnJvcihjb25z
dCBjaGFyICplcnIpDQogICAgK3sNCiAgICArCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpICsgMSwgZXJyKTsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVkX3N0cmluZyhGSUxFICpvdXQsIGNvbnN0
IGNoYXIgKnN0cikNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqcDsNCiAgICArCWludCBsZW47
DQogICAgKw0KICAgICsJcHV0YygnIicsIG91dCk7DQogICAgKwl3aGlsZSAoKHAgPSBzdHJjaHIo
c3RyLCAnIicpKSkgew0KICAgICsJCWxlbiA9IHAgLSBzdHI7DQogICAgKwkJaWYgKGxlbikNCiAg
ICArCQkJZnByaW50ZihvdXQsICIlLipzIiwgbGVuLCBzdHIpOw0KICAgICsJCWZwdXRzKCJcXFwi
Iiwgb3V0KTsNCiAgICArCQlzdHIgPSBwICsgMTsNCiAgICArCX0NCiAgICArCWZwdXRzKHN0ciwg
b3V0KTsNCiAgICArCXB1dGMoJyInLCBvdXQpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMg
dm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0K
ICAgICsJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOw0KICAgICsJc3RydWN0IHByb3Bl
cnR5ICpwcm9wOw0KICAgICsNCiAgICArCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpDQogICAgKwkJ
ZnByaW50ZihvdXQsICJcbmNob2ljZVxuIik7DQogICAgKwllbHNlDQogICAgKwkJZnByaW50Zihv
dXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsNCiAgICArCXN3aXRjaCAoc3ltLT50eXBl
KSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCQlmcHV0cygiICBib29sXG4iLCBvdXQp
Ow0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCWZwdXRzKCIg
IHRyaXN0YXRlXG4iLCBvdXQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX1NUUklORzoN
CiAgICArCQlmcHV0cygiICBzdHJpbmdcbiIsIG91dCk7DQogICAgKwkJYnJlYWs7DQogICAgKwlj
YXNlIFNfSU5UOg0KICAgICsJCWZwdXRzKCIgIGludGVnZXJcbiIsIG91dCk7DQogICAgKwkJYnJl
YWs7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCWZwdXRzKCIgIGhleFxuIiwgb3V0KTsNCiAg
ICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJZnB1dHMoIiAgPz8/XG4iLCBvdXQp
Ow0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJZm9yIChwcm9wID0gc3ltLT5wcm9wOyBw
cm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgICsJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUp
DQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCXN3aXRjaCAocHJvcC0+dHlwZSkgew0KICAgICsJ
CWNhc2UgUF9QUk9NUFQ6DQogICAgKwkJCWZwdXRzKCIgIHByb21wdCAiLCBvdXQpOw0KICAgICsJ
CQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAgKwkJCWlmICghZXhw
cl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgICsJCQkJZnB1dHMoIiBpZiAiLCBv
dXQpOw0KICAgICsJCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQpOw0KICAg
ICsJCQl9DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CWNhc2UgUF9ERUZBVUxUOg0KICAgICsJCQlmcHV0cyggIiAgZGVmYXVsdCAiLCBvdXQpOw0KICAg
ICsJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOw0KICAgICsJCQlpZiAoIWV4cHJfaXNf
eWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAgICArCQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsN
CiAgICArCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsNCiAgICArCQkJ
fQ0KICAgICsJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNl
IFBfQ0hPSUNFOg0KICAgICsJCQlmcHV0cygiICAjY2hvaWNlIHZhbHVlXG4iLCBvdXQpOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfU0VMRUNUOg0KICAgICsJCQlmcHV0cyggIiAgc2Vs
ZWN0ICIsIG91dCk7DQogICAgKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAg
KwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgUF9JTVBM
WToNCiAgICArCQkJZnB1dHMoICIgIGltcGx5ICIsIG91dCk7DQogICAgKwkJCWV4cHJfZnByaW50
KHByb3AtPmV4cHIsIG91dCk7DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgUF9SQU5HRToNCiAgICArCQkJZnB1dHMoICIgIHJhbmdlICIsIG91
dCk7DQogICAgKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAgKwkJCWZwdXRj
KCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgUF9NRU5VOg0KICAgICsJ
CQlmcHV0cyggIiAgbWVudSAiLCBvdXQpOw0KICAgICsJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91
dCwgcHJvcC0+dGV4dCk7DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFr
Ow0KICAgICsJCWNhc2UgUF9TWU1CT0w6DQogICAgKwkJCWZwdXRzKCAiICBzeW1ib2wgIiwgb3V0
KTsNCiAgICArCQkJZnByaW50ZihvdXQsICIlc1xuIiwgcHJvcC0+c3ltLT5uYW1lKTsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJZnByaW50ZihvdXQsICIgIHVua25v
d24gcHJvcCAlZCFcbiIsIHByb3AtPnR5cGUpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQog
ICAgKwl9DQogICAgKwlpZiAobWVudS0+aGVscCkgew0KICAgICsJCWludCBsZW4gPSBzdHJsZW4o
bWVudS0+aGVscCk7DQogICAgKwkJd2hpbGUgKG1lbnUtPmhlbHBbLS1sZW5dID09ICdcbicpDQog
ICAgKwkJCW1lbnUtPmhlbHBbbGVuXSA9IDA7DQogICAgKwkJZnByaW50ZihvdXQsICIgIGhlbHBc
biVzXG4iLCBtZW51LT5oZWxwKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB6
Y29uZmR1bXAoRklMRSAqb3V0KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7
DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgbWVudSAqbWVudTsNCiAg
ICArDQogICAgKwltZW51ID0gcm9vdG1lbnUubGlzdDsNCiAgICArCXdoaWxlIChtZW51KSB7DQog
ICAgKwkJaWYgKChzeW0gPSBtZW51LT5zeW0pKQ0KICAgICsJCQlwcmludF9zeW1ib2wob3V0LCBt
ZW51KTsNCiAgICArCQllbHNlIGlmICgocHJvcCA9IG1lbnUtPnByb21wdCkpIHsNCiAgICArCQkJ
c3dpdGNoIChwcm9wLT50eXBlKSB7DQogICAgKwkJCWNhc2UgUF9DT01NRU5UOg0KICAgICsJCQkJ
ZnB1dHMoIlxuY29tbWVudCAiLCBvdXQpOw0KICAgICsJCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhv
dXQsIHByb3AtPnRleHQpOw0KICAgICsJCQkJZnB1dHMoIlxuIiwgb3V0KTsNCiAgICArCQkJCWJy
ZWFrOw0KICAgICsJCQljYXNlIFBfTUVOVToNCiAgICArCQkJCWZwdXRzKCJcbm1lbnUgIiwgb3V0
KTsNCiAgICArCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAgICAr
CQkJCWZwdXRzKCJcbiIsIG91dCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJZGVmYXVsdDoN
CiAgICArCQkJCTsNCiAgICArCQkJfQ0KICAgICsJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZp
c2libGUuZXhwcikpIHsNCiAgICArCQkJCWZwdXRzKCIgIGRlcGVuZHMgIiwgb3V0KTsNCiAgICAr
CQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsNCiAgICArCQkJCWZwdXRj
KCdcbicsIG91dCk7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKw0KICAgICsJCWlmIChtZW51
LT5saXN0KQ0KICAgICsJCQltZW51ID0gbWVudS0+bGlzdDsNCiAgICArCQllbHNlIGlmIChtZW51
LT5uZXh0KQ0KICAgICsJCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICArCQllbHNlIHdoaWxlICgo
bWVudSA9IG1lbnUtPnBhcmVudCkpIHsNCiAgICArCQkJaWYgKG1lbnUtPnByb21wdCAmJiBtZW51
LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQ0KICAgICsJCQkJZnB1dHMoIlxuZW5kbWVudVxuIiwg
b3V0KTsNCiAgICArCQkJaWYgKG1lbnUtPm5leHQpIHsNCiAgICArCQkJCW1lbnUgPSBtZW51LT5u
ZXh0Ow0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAg
K30NCiAgICArDQogICAgKyNpbmNsdWRlICJ6Y29uZi5sZXguYyINCiAgICArI2luY2x1ZGUgInV0
aWwuYyINCiAgICArI2luY2x1ZGUgImNvbmZkYXRhLmMiDQogICAgKyNpbmNsdWRlICJleHByLmMi
DQogICAgKyNpbmNsdWRlICJzeW1ib2wuYyINCiAgICArI2luY2x1ZGUgIm1lbnUuYyINCiAgICAr
I2luY2x1ZGUgInByZXByb2Nlc3MuYyINCiAgICAtLSANCiAgICAyLjcuNA0KICAgIA0KICAgIA0K
ICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAg
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 14:54:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 14:54:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAxpA-0003He-Jc; Thu, 19 Sep 2019 14:54:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=lh1o=XO=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iAxfr-0001E3-Iz
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 14:44:47 +0000
X-Inumbo-ID: 04d9e8ea-daec-11e9-9661-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 04d9e8ea-daec-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 14:44:44 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4BD6BF2025;
 Thu, 19 Sep 2019 16:44:43 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id LxbGktvT6-0O; Thu, 19 Sep 2019 16:44:40 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 2F5A8F2001
 for <minios-devel@lists.xenproject.org>; Thu, 19 Sep 2019 16:44:38 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 19 Sep
 2019 16:44:34 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Thu, 19 Sep 2019 16:44:34
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 23/23] kconfig: Replace the
 kconfig with the update
Thread-Index: AQHVbuLnF3r8NP3bcU+g407sNBmXsqczE7eA
Date: Thu, 19 Sep 2019 14:44:32 +0000
Message-ID: <6E38E681-A6DC-47CB-B4F2-D991DBCBC5B2@neclab.eu>
References: <20190919091607.23327-1-sharan.santhanam@neclab.eu>
 <20190919091607.23327-24-sharan.santhanam@neclab.eu>
In-Reply-To: <20190919091607.23327-24-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <04317771A8519743BA3152007805CA1A@office.hd>
MIME-Version: 1.0
X-Mailman-Approved-At: Thu, 19 Sep 2019 14:54:22 +0000
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 23/23] kconfig: Replace the
 kconfig with the update
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIG9rLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3
ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCu+7vw0KDQpPbiAx
OS4wOS4xOSwgMTQ6MDgsICJNaW5pb3MtZGV2ZWwgb24gYmVoYWxmIG9mIFNoYXJhbiBTYW50aGFu
YW0iIDxtaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBvbiBiZWhhbGYg
b2YgU2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAgUmV2ZXJ0IGtjb25m
aWcubmV3IGJhY2sgdG8ga2NvbmZpZy4NCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBTaGFyYW4g
U2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAgICAgTWFr
ZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICst
DQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAg
IHwgIDIwOCAtLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyICAgICAgICAg
ICAgICAgICAgICB8ICAxNDEgLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1
bGVzICAgICAgICAgICAgICAgICB8ICAgODQgLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L1JF
QURNRS51bmlrcmFmdCAgICAgICAgICAgICAgICB8ICAgMjEgLQ0KICAgICBzdXBwb3J0L2tjb25m
aWcubmV3L2NvbmYuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICA3MDIgLS0tLS0NCiAgICAg
c3VwcG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5jICAgICAgICAgICAgICAgICAgICAgfCAxMzgw
IC0tLS0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmMgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAxMjk3IC0tLS0tLS0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L2V4
cHIuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzMzEgLS0tDQogICAgIHN1cHBvcnQva2Nv
bmZpZy5uZXcvZml4ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDM4MCAtLS0NCiAgICAg
c3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICAgfCAgIDMw
IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jICAgICAgICAgICAgICAgICAgICAg
ICAgfCAxNTE2IC0tLS0tLS0tLS0tDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xh
ZGUgICAgICAgICAgICAgICAgICAgIHwgIDY2MSAtLS0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcu
bmV3L2ltYWdlcy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAzMjggLS0tDQogICAgIHN1cHBv
cnQva2NvbmZpZy5uZXcvaW1hZ2VzLmggICAgICAgICAgICAgICAgICAgICAgIHwgICAzMyAtDQog
ICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubCAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDQ5OCAtLS0tDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5oICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDEzMiAtDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmggICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIDE2MCAtLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L2xr
Y19wcm90by5oICAgICAgICAgICAgICAgICAgICB8ICAgNjYgLQ0KICAgICBzdXBwb3J0L2tjb25m
aWcubmV3L2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORyAgICAgICB8ICAgIDQgLQ0KICAgICBzdXBw
b3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2NoZWNrbGlzdC5jICAgICAgICAgICB8ICAzMTkgLS0t
DQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvZGlhbG9nLmggICAgICAgICAgICAg
IHwgIDIzOCAtLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2lucHV0Ym94LmMg
ICAgICAgICAgICB8ICAyODkgLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9t
ZW51Ym94LmMgICAgICAgICAgICAgfCAgNDI0IC0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3
L2x4ZGlhbG9nL3RleHRib3guYyAgICAgICAgICAgICB8ICAzOTUgLS0tDQogICAgIHN1cHBvcnQv
a2NvbmZpZy5uZXcvbHhkaWFsb2cvdXRpbC5jICAgICAgICAgICAgICAgIHwgIDcwMCAtLS0tLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3llc25vLmMgICAgICAgICAgICAgICB8
ICAxMDEgLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaCAgICAgICAgICAg
ICAgICAgICB8ICAgNDcgLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMgICAgICAg
ICAgICAgICAgICAgICAgICB8IDEwMzkgLS0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5l
dy9tZW51LmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgODY3IC0tLS0tLQ0KICAgICBzdXBw
b3J0L2tjb25maWcubmV3L21lcmdlX2NvbmZpZy5zaCAgICAgICAgICAgICAgICB8ICAxODkgLS0N
CiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICAg
fCAgIDQ3IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jICAgICAgICAgICAgICAg
ICAgICAgICAgfCAxNTU1IC0tLS0tLS0tLS0tDQogICAgIHN1cHBvcnQva2NvbmZpZy5uZXcvbmNv
bmYuZ3VpLmMgICAgICAgICAgICAgICAgICAgIHwgIDY2NCAtLS0tLQ0KICAgICBzdXBwb3J0L2tj
b25maWcubmV3L25jb25mLmggICAgICAgICAgICAgICAgICAgICAgICB8ICAgOTIgLQ0KICAgICBz
dXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55ICAgICAgICAgICAgICAgICAgICAgICB8ICA3MzEg
LS0tLS0NCiAgICAgLi4uL3BhdGNoZXMvMDEta2NvbmZpZy1rZXJuZWwtdG8tdW5pa3JhZnQucGF0
Y2ggICAgfCAgIDc2IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9y
dC1tYWtlZmlsZS5iciAgfCAgIDU5IC0NCiAgICAgLi4uL3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtl
ZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwgfCAgMTAyIC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5l
dy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUgfCAgIDI2IC0NCiAgICAgLi4uL3BhdGNo
ZXMvMDUtYWRkLXVuaWtyYWZ0LWZpeGRlcC1oZWFkZXIgICAgICAgICAgfCAgIDEyIC0NCiAgICAg
Li4uL2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxpY2l0LXJ1bGVzICAgfCAgIDEz
IC0NCiAgICAgLi4uL2tjb25maWcubmV3L3BhdGNoZXMvMDctaW1wb3J0LWhvc3QtdG9vbHMtcnVs
ZXMgfCAgMTQyIC0NCiAgICAgLi4uL2tjb25maWcubmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1j
b25maWctZmxhZyAgfCAgIDE5IC0NCiAgICAgLi4uL2tjb25maWcubmV3L3BhdGNoZXMvMDktc3Vw
cG9ydC1nbG9iLWluLWtjb25maWcgfCAgIDcwIC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9w
cmVwcm9jZXNzLmMgICAgICAgICAgICAgICAgICAgfCAgNTczIC0tLS0NCiAgICAgc3VwcG9ydC9r
Y29uZmlnLm5ldy9xY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICAgfCAgIDMyIC0NCiAgICAg
c3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYyAgICAgICAgICAgICAgICAgICAgICAgfCAxODk2
IC0tLS0tLS0tLS0tLS0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5oICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMzMxIC0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3N0cmVh
bWxpbmVfY29uZmlnLnBsICAgICAgICAgICB8ICA2ODIgLS0tLS0NCiAgICAgc3VwcG9ydC9rY29u
ZmlnLm5ldy9zeW1ib2wuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMzMxIC0tLS0tLS0tLQ0K
ICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9LY29uZmlnICAgICB8
ICAgNTIgLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2lu
aXRfXy5weSB8ICAgMTMgLQ0KICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51
L2V4cGVjdGVkX3N0ZG91dCB8ICAgMTAgLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9LY29uZmlnICAgICAgICAgICB8ICAgNTYgLQ0KICAgICBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSAgICAgICB8ICAgNDEgLQ0KICAgICAuLi4vdGVz
dHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcgICAgICAgICAgICB8ICAgIDUgLQ0KICAg
ICAuLi4vdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25maWcgICAgICAgICAgICB8ICAg
IDkgLQ0KICAgICAuLi4va2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2Nv
bmZpZyB8ICAgIDUgLQ0KICAgICAuLi4vdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25m
aWcgICAgICAgICAgICB8ICAgIDkgLQ0KICAgICAuLi4vdGVzdHMvY2hvaWNlL29sZGFzazBfZXhw
ZWN0ZWRfc3Rkb3V0ICAgICAgICAgICB8ICAgMTAgLQ0KICAgICBzdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZyAgICB8ICAgIDIgLQ0KICAgICAuLi4vdGVzdHMv
Y2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0ICAgICAgICAgICB8ICAgMTUgLQ0KICAgICAu
Li4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZyAgICAgICAgICB8ICAgMjEg
LQ0KICAgICAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvX19pbml0X18ucHkgICAg
ICB8ICAgMTYgLQ0KICAgICAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmln
ICAgICAgICAgICB8ICAgIDIgLQ0KICAgICAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9k
ZXAvZXhwZWN0ZWRfY29uZmlnICB8ICAgIDMgLQ0KICAgICAuLi4vdGVzdHMvY2hvaWNlX3ZhbHVl
X3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0ICB8ICAgIDQgLQ0KICAgICBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2NvbmZ0ZXN0LnB5ICAgICAgICAgICAgICB8ICAyOTEgLS0NCiAgICAgLi4u
L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcgICAgfCAgIDYzIC0N
CiAgICAgLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5ICAgICAgICAgICAg
fCAgIDEwIC0NCiAgICAgLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVy
ciAgICAgICAgfCAgIDM4IC0NCiAgICAgLi4uL2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNp
dmVfaW5jL0tjb25maWcgICAgfCAgICAyIC0NCiAgICAgLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL0tjb25maWcuaW5jMSAgICAgICAgICAgfCAgICA1IC0NCiAgICAgLi4uL3Rlc3RzL2Vycl9y
ZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMiAgICAgICAgICAgfCAgICA0IC0NCiAgICAgLi4uL3Rl
c3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMyAgICAgICAgICAgfCAgICAyIC0NCiAg
ICAgLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5ICAgICAgICAgICAgfCAg
IDExIC0NCiAgICAgLi4uL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL2V4cGVjdGVkX3N0ZGVyciAg
ICAgICAgfCAgICA2IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9p
Y2UvS2NvbmZpZyAgICAgfCAgIDI1IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9p
bnRlcl9jaG9pY2UvX19pbml0X18ucHkgfCAgIDE1IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnICAgfCAgICAxIC0NCiAgICAgLi4uL2tjb25m
aWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcgfCAgICA0IC0NCiAgICAg
Li4uL2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZpZyAgfCAgIDM5
IC0NCiAgICAgLi4uL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkgICAgICAg
ICAgfCAgIDE1IC0NCiAgICAgLi4uL2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9k
ZXAvY29uZmlnICAgfCAgICAzIC0NCiAgICAgLi4uL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAv
ZXhwZWN0ZWRfc3Rkb3V0ICAgICAgfCAgIDEwIC0NCiAgICAgLi4uL3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9LY29uZmlnICAgICAgICAgICAgfCAgIDE2IC0NCiAgICAgLi4uL3Rlc3RzL25v
X3dyaXRlX2lmX2RlcF91bm1ldC9fX2luaXRfXy5weSAgICAgICAgfCAgIDIwIC0NCiAgICAgLi4u
L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcgfCAgICAxIC0N
CiAgICAgLi4uL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcgICAg
fCAgICA1IC0NCiAgICAgLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tjb25maWcg
ICAgICAgICAgfCAgIDI3IC0NCiAgICAgLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5j
L19faW5pdF9fLnB5ICAgICAgfCAgICA5IC0NCiAgICAgLi4uL3Rlc3RzL3ByZXByb2Nlc3MvYnVp
bHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVyciAgfCAgICA1IC0NCiAgICAgLi4uL3Rlc3RzL3ByZXBy
b2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91dCAgfCAgICAxIC0NCiAgICAgLi4uL3Rl
c3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcgICAgfCAgICA1IC0NCiAg
ICAgLi4uL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL19faW5pdF9fLnB5ICAgICAgfCAg
IDExIC0NCiAgICAgLi4uL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0
ZGVyciAgfCAgICAxIC0NCiAgICAgLi4uL2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNj
YXBlL0tjb25maWcgICAgfCAgIDQ0IC0NCiAgICAgLi4uL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBl
L19faW5pdF9fLnB5ICAgICAgICAgICAgfCAgICA4IC0NCiAgICAgLi4uL3Rlc3RzL3ByZXByb2Nl
c3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVyciAgICAgICAgfCAgIDEwIC0NCiAgICAgLi4uL2tjb25m
aWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZyAgfCAgIDUzIC0NCiAgICAg
Li4uL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkgICAgICAgICAgfCAgICA4
IC0NCiAgICAgLi4uL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyICAg
ICAgfCAgICA5IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9weXRlc3QuaW5pICAg
ICAgICAgICAgICAgfCAgICA3IC0NCiAgICAgLi4uL2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVz
dGVkX2Nob2ljZS9LY29uZmlnICAgfCAgIDM1IC0NCiAgICAgLi4uL3Rlc3RzL3JhbmRfbmVzdGVk
X2Nob2ljZS9fX2luaXRfXy5weSAgICAgICAgICAgfCAgIDE3IC0NCiAgICAgLi4uL3Rlc3RzL3Jh
bmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwICAgICAgfCAgICAyIC0NCiAgICAgLi4u
L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxICAgICAgfCAgICA0IC0N
CiAgICAgLi4uL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyICAgICAg
fCAgICA1IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgMTI5IC0NCiAgICAgc3VwcG9ydC9rY29uZmlnLm5ldy96Y29uZi5sZXguYyAg
ICAgICAgICAgICAgICAgICAgfCAyODIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgIHN1cHBv
cnQva2NvbmZpZy5uZXcvemNvbmYudGFiLmMgICAgICAgICAgICAgICAgICAgIHwgMjUwNCAtLS0t
LS0tLS0tLS0tLS0tLQ0KICAgICBzdXBwb3J0L2tjb25maWcvTWFrZWZpbGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAyMDggKysNCiAgICAgc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLmJy
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTQxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL01h
a2VmaWxlLnJ1bGVzICAgICAgICAgICAgICAgICAgICAgfCAgIDg0ICsNCiAgICAgc3VwcG9ydC9r
Y29uZmlnL1JFQURNRS51bmlrcmFmdCAgICAgICAgICAgICAgICAgICAgfCAgIDIxICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnL2NvbmYuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzAy
ICsrKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy9jb25mZGF0YS5jICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgMTM4MCArKysrKysrKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy9leHByLmMgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTI5NyArKysrKysrKysNCiAgICAgc3VwcG9ydC9r
Y29uZmlnL2V4cHIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzMxICsrKw0KICAg
ICBzdXBwb3J0L2tjb25maWcvZml4ZGVwLmMgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAz
ODAgKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy9nY29uZi1jZmcuc2ggICAgICAgICAgICAgICAg
ICAgICAgIHwgICAzMCArDQogICAgIHN1cHBvcnQva2NvbmZpZy9nY29uZi5jICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgMTUxNiArKysrKysrKysrKw0KICAgICBzdXBwb3J0L2tjb25maWcv
Z2NvbmYuZ2xhZGUgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NjEgKysrKysNCiAgICAgc3Vw
cG9ydC9rY29uZmlnL2ltYWdlcy5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMzI4ICsr
Kw0KICAgICBzdXBwb3J0L2tjb25maWcvaW1hZ2VzLmggICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgMzMgKw0KICAgICBzdXBwb3J0L2tjb25maWcvbGV4ZXIubCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICA0OTggKysrKw0KICAgICBzdXBwb3J0L2tjb25maWcvbGlzdC5oICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAxMzIgKw0KICAgICBzdXBwb3J0L2tjb25maWcvbGtj
LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNjAgKysNCiAgICAgc3VwcG9ydC9r
Y29uZmlnL2xrY19wcm90by5oICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDY2ICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORyAgICAgICAgICAgfCAgICA0
ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jICAgICAgICAgICAg
ICAgfCAgMzE5ICsrKw0KICAgICBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmggICAg
ICAgICAgICAgICAgICB8ICAyMzggKysNCiAgICAgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2lu
cHV0Ym94LmMgICAgICAgICAgICAgICAgfCAgMjg5ICsrDQogICAgIHN1cHBvcnQva2NvbmZpZy9s
eGRpYWxvZy9tZW51Ym94LmMgICAgICAgICAgICAgICAgIHwgIDQyNCArKysNCiAgICAgc3VwcG9y
dC9rY29uZmlnL2x4ZGlhbG9nL3RleHRib3guYyAgICAgICAgICAgICAgICAgfCAgMzk1ICsrKw0K
ICAgICBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jICAgICAgICAgICAgICAgICAgICB8
ICA3MDAgKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3llc25vLmMgICAgICAg
ICAgICAgICAgICAgfCAgMTAxICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL21jb25mLWNmZy5zaCAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDQ3ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL21jb25m
LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxMDM5ICsrKysrKysrDQogICAgIHN1cHBv
cnQva2NvbmZpZy9tZW51LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDg2NyArKysr
KysNCiAgICAgc3VwcG9ydC9rY29uZmlnL21lcmdlX2NvbmZpZy5zaCAgICAgICAgICAgICAgICAg
ICAgfCAgMTg5ICsrDQogICAgIHN1cHBvcnQva2NvbmZpZy9uY29uZi1jZmcuc2ggICAgICAgICAg
ICAgICAgICAgICAgIHwgICA0NyArDQogICAgIHN1cHBvcnQva2NvbmZpZy9uY29uZi5jICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgMTU1NSArKysrKysrKysrKw0KICAgICBzdXBwb3J0L2tj
b25maWcvbmNvbmYuZ3VpLmMgICAgICAgICAgICAgICAgICAgICAgICB8ICA2NjQgKysrKysNCiAg
ICAgc3VwcG9ydC9rY29uZmlnL25jb25mLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDkyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL3BhcnNlci55ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgNzMxICsrKysrDQogICAgIC4uLi9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRv
LXVuaWtyYWZ0LnBhdGNoICAgIHwgICA3NiArDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVz
LzAyLWltcG9ydC1tYWtlZmlsZS5iciAgICAgIHwgICA1OSArDQogICAgIC4uLi9wYXRjaGVzLzAz
LWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsIHwgIDEwMiArDQogICAgIHN1cHBv
cnQva2NvbmZpZy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUgICAgIHwgICAyNiArDQog
ICAgIC4uLi9rY29uZmlnL3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZpeGRlcC1oZWFkZXIgIHwg
ICAxMiArDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBsaWNpdC1y
dWxlcyAgIHwgICAxMyArDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA3LWltcG9ydC1o
b3N0LXRvb2xzLXJ1bGVzIHwgIDE0MiArDQogICAgIHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA4
LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcgIHwgICAxOSArDQogICAgIHN1cHBvcnQva2NvbmZpZy9w
YXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmlnIHwgICA3MCArDQogICAgIHN1cHBvcnQv
a2NvbmZpZy9wcmVwcm9jZXNzLmMgICAgICAgICAgICAgICAgICAgICAgIHwgIDU3MyArKysrDQog
ICAgIHN1cHBvcnQva2NvbmZpZy9xY29uZi1jZmcuc2ggICAgICAgICAgICAgICAgICAgICAgIHwg
ICAzMiArDQogICAgIHN1cHBvcnQva2NvbmZpZy9xY29uZi5jYyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgMTg5NiArKysrKysrKysrKysrDQogICAgIHN1cHBvcnQva2NvbmZpZy9xY29uZi5o
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMzMSArKysNCiAgICAgc3VwcG9ydC9rY29u
ZmlnL3N0cmVhbWxpbmVfY29uZmlnLnBsICAgICAgICAgICAgICAgfCAgNjgyICsrKysrDQogICAg
IHN1cHBvcnQva2NvbmZpZy9zeW1ib2wuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTMz
MSArKysrKysrKysNCiAgICAgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9LY29u
ZmlnICAgICAgICAgfCAgIDUyICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3Vi
bWVudS9fX2luaXRfXy5weSAgICAgfCAgIDEzICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQgfCAgIDEwICsNCiAgICAgc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2Nob2ljZS9LY29uZmlnICAgICAgICAgICAgICAgfCAgIDU2ICsNCiAgICAgc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSAgICAgICAgICAgfCAgIDQxICsN
CiAgICAgLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3RlZF9jb25maWcgICAg
fCAgICA1ICsNCiAgICAgLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9j
b25maWcgICAgfCAgICA5ICsNCiAgICAgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxu
b19leHBlY3RlZF9jb25maWcgfCAgICA1ICsNCiAgICAgLi4uL2tjb25maWcvdGVzdHMvY2hvaWNl
L2FsbHllc19leHBlY3RlZF9jb25maWcgICAgfCAgICA5ICsNCiAgICAgLi4uL2tjb25maWcvdGVz
dHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0ICAgfCAgIDEwICsNCiAgICAgc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZyAgICAgICAgfCAgICAyICsNCiAg
ICAgLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0ICAgfCAg
IDE1ICsNCiAgICAgLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2Nv
bmZpZyAgfCAgIDIxICsNCiAgICAgLi4uL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19f
aW5pdF9fLnB5ICAgICAgfCAgIDE2ICsNCiAgICAgLi4uL2tjb25maWcvdGVzdHMvY2hvaWNlX3Zh
bHVlX3dpdGhfbV9kZXAvY29uZmlnICAgfCAgICAyICsNCiAgICAgLi4uL3Rlc3RzL2Nob2ljZV92
YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZyAgfCAgICAzICsNCiAgICAgLi4uL3Rlc3Rz
L2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dCAgfCAgICA0ICsNCiAgICAg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2NvbmZ0ZXN0LnB5ICAgICAgICAgICAgICAgICAgfCAgMjkx
ICsrDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmln
ICAgIHwgICA2MyArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL19f
aW5pdF9fLnB5ICAgIHwgICAxMCArDQogICAgIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9l
eHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAzOCArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnICAgIHwgICAgMiArDQogICAgIC4uLi9rY29uZmln
L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMSAgIHwgICAgNSArDQogICAgIC4u
Li9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMiAgIHwgICAgNCAr
DQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMyAg
IHwgICAgMiArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL19faW5p
dF9fLnB5ICAgIHwgICAxMSArDQogICAgIC4uLi90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBl
Y3RlZF9zdGRlcnIgICAgICAgIHwgICAgNiArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9p
bnRlcl9jaG9pY2UvS2NvbmZpZyAgICAgICAgIHwgICAyNSArDQogICAgIHN1cHBvcnQva2NvbmZp
Zy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18ucHkgICAgIHwgICAxNSArDQogICAgIHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnICAgICAgIHwgICAgMSArDQog
ICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnIHwg
ICAgNCArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL0tj
b25maWcgIHwgICAzOSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9k
ZXAvX19pbml0X18ucHkgIHwgICAxNSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdf
Y2hvaWNlX3dpdGhfZGVwL2NvbmZpZyAgIHwgICAgMyArDQogICAgIC4uLi90ZXN0cy9uZXdfY2hv
aWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0ZG91dCAgICAgIHwgICAxMCArDQogICAgIC4uLi9rY29u
ZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnICAgIHwgICAxNiArDQogICAg
IC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18ucHkgICAgICAgIHwgICAy
MCArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvY29u
ZmlnIHwgICAgMSArDQogICAgIC4uLi90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0
ZWRfY29uZmlnICAgIHwgICAgNSArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3Mv
YnVpbHRpbl9mdW5jL0tjb25maWcgIHwgICAyNyArDQogICAgIC4uLi90ZXN0cy9wcmVwcm9jZXNz
L2J1aWx0aW5fZnVuYy9fX2luaXRfXy5weSAgICAgIHwgICAgOSArDQogICAgIC4uLi90ZXN0cy9w
cmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnIgIHwgICAgNSArDQogICAgIC4u
Li90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQgIHwgICAgMSAr
DQogICAgIC4uLi90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnICAg
IHwgICAgNSArDQogICAgIC4uLi9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRf
Xy5weSAgICAgIHwgICAxMSArDQogICAgIC4uLi9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lv
bi9leHBlY3RlZF9zdGRlcnIgIHwgICAgMSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9w
cmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnICAgIHwgICA0NCArDQogICAgIC4uLi9rY29uZmlnL3Rl
c3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5ICAgIHwgICAgOCArDQogICAgIC4uLi90
ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnIgICAgICAgIHwgICAxMCArDQog
ICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcgIHwg
ICA1MyArDQogICAgIC4uLi9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0
X18ucHkgIHwgICAgOCArDQogICAgIC4uLi90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVj
dGVkX3N0ZGVyciAgICAgIHwgICAgOSArDQogICAgIHN1cHBvcnQva2NvbmZpZy90ZXN0cy9weXRl
c3QuaW5pICAgICAgICAgICAgICAgICAgIHwgICAgNyArDQogICAgIHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZyAgIHwgICAzNSArDQogICAgIC4uLi9rY29u
ZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weSAgIHwgICAxNyArDQogICAg
IC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MCAgICAgIHwgICAg
MiArDQogICAgIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MSAg
ICAgIHwgICAgNCArDQogICAgIC4uLi90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRf
c3Rkb3V0MiAgICAgIHwgICAgNSArDQogICAgIHN1cHBvcnQva2NvbmZpZy91dGlsLmMgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgIDEyOSArDQogICAgIHN1cHBvcnQva2NvbmZpZy96Y29u
Zi5sZXguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMjgyMCArKysrKysrKysrKysrKysrKysr
Kw0KICAgICBzdXBwb3J0L2tjb25maWcvemNvbmYudGFiLmMgICAgICAgICAgICAgICAgICAgICAg
ICB8IDI1MDQgKysrKysrKysrKysrKysrKysNCiAgICAgMjIzIGZpbGVzIGNoYW5nZWQsIDI3NjA5
IGluc2VydGlvbnMoKyksIDI3NjA5IGRlbGV0aW9ucygtKQ0KICAgICBkZWxldGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQ0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcw0KICAgICBkZWxldGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQNCiAgICAgZGVsZXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvY29uZi5jDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L2NvbmZkYXRhLmMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L2V4cHIuaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy9maXhkZXAuYw0KICAgICBkZWxldGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29u
ZmlnLm5ldy9nY29uZi1jZmcuc2gNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvZ2NvbmYuYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy9nY29uZi5nbGFkZQ0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy9pbWFnZXMuYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy9pbWFnZXMuaA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9s
ZXhlci5sDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2xpc3Qu
aA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaA0KICAg
ICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaA0KICAg
ICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9CSUcuRkFU
LldBUk5JTkcNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhk
aWFsb2cvY2hlY2tsaXN0LmMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZp
Zy5uZXcvbHhkaWFsb2cvZGlhbG9nLmgNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvbHhkaWFsb2cvaW5wdXRib3guYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9tZW51Ym94LmMNCiAgICAgZGVsZXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jDQogICAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3V0aWwuYw0KICAgICBk
ZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy95ZXNuby5jDQog
ICAgIGRlbGV0ZSBtb2RlIDEwMDc1NSBzdXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaA0K
ICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jDQogICAg
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L21lbnUuYw0KICAgICBkZWxl
dGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnLm5ldy9tZXJnZV9jb25maWcuc2gNCiAgICAg
ZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoDQogICAg
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMNCiAgICAgZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuZ3VpLmMNCiAgICAgZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaA0KICAgICBkZWxldGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQ0KICAgICBkZWxldGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRv
LXVuaWtyYWZ0LnBhdGNoDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L3BhdGNoZXMvMDItaW1wb3J0LW1ha2VmaWxlLmJyDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXIt
ZnJvbS1rZXJuZWwNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
cGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVuaWtyYWZ0LWZpeGRlcC1oZWFkZXIN
CiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNi1y
ZW1vdmUtaW1wbGljaXQtcnVsZXMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy5uZXcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcw0KICAgICBkZWxldGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29u
ZmlnLWZsYWcNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvcGF0
Y2hlcy8wOS1zdXBwb3J0LWdsb2ItaW4ta2NvbmZpZw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNzU1
IHN1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmgNCiAgICAgZGVsZXRlIG1vZGUgMTAwNzU1IHN1cHBv
cnQva2NvbmZpZy5uZXcvc3RyZWFtbGluZV9jb25maWcucGwNCiAgICAgZGVsZXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvc3ltYm9sLmMNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcNCiAgICAgZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L19f
aW5pdF9fLnB5DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL2F1dG9fc3VibWVudS9leHBlY3RlZF9zdGRvdXQNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL0tjb25maWcNCiAgICAgZGVsZXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL19faW5pdF9fLnB5DQog
ICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9h
bGxkZWZfZXhwZWN0ZWRfY29uZmlnDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnDQogICAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxub19leHBl
Y3RlZF9jb25maWcNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcNCiAgICAgZGVsZXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rk
b3V0DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2No
b2ljZS9vbGRhc2sxX2NvbmZpZw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQNCiAgICAgZGVsZXRl
IG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhf
bV9kZXAvS2NvbmZpZw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9fX2luaXRfXy5weQ0KICAgICBkZWxldGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9t
X2RlcC9jb25maWcNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnDQogICAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRo
X21fZGVwL2V4cGVjdGVkX3N0ZG91dA0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQ0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnDQogICAgIGRl
bGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVf
ZGVwL19faW5pdF9fLnB5DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL2V4cGVjdGVkX3N0ZGVycg0KICAgICBkZWxldGUg
bW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9L
Y29uZmlnDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMQ0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzIN
CiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL19faW5pdF9fLnB5DQogICAgIGRl
bGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVf
aW5jL2V4cGVjdGVkX3N0ZGVycg0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZw0KICAgICBkZWxldGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18ucHkNCiAg
ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hv
aWNlL2RlZmNvbmZpZw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnDQogICAgIGRlbGV0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZp
Zw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdf
Y2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnDQogICAgIGRl
bGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0
aF9kZXAvZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmlnDQogICAgIGRlbGV0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91
bm1ldC9fX2luaXRfXy5weQ0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvY29uZmlnDQogICAgIGRlbGV0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9l
eHBlY3RlZF9jb25maWcNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZw0KICAgICBkZWxldGUgbW9k
ZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVu
Yy9fX2luaXRfXy5weQ0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRlcnINCiAgICAgZGVs
ZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWls
dGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcN
CiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJv
Y2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkNCiAgICAgZGVsZXRlIG1vZGUgMTAw
NjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNp
b24vZXhwZWN0ZWRfc3RkZXJyDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcNCiAgICAgZGVsZXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0
X18ucHkNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3RkZXJyDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZw0K
ICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5DQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyDQog
ICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3B5dGVzdC5p
bmkNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFu
ZF9uZXN0ZWRfY2hvaWNlL0tjb25maWcNCiAgICAgZGVsZXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5DQogICAgIGRl
bGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2No
b2ljZS9leHBlY3RlZF9zdGRvdXQwDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxDQogICAg
IGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVk
X2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyDQogICAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcubmV3L3V0aWwuYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy96Y29uZi5sZXguYw0KICAgICBkZWxldGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnLm5ldy96Y29uZi50YWIuYw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29u
ZmlnL01ha2VmaWxlDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvTWFr
ZWZpbGUuYnINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9NYWtlZmls
ZS5ydWxlcw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL1JFQURNRS51
bmlrcmFmdA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2NvbmYuYw0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2NvbmZkYXRhLmMNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9leHByLmMNCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9leHByLmgNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IHN1cHBvcnQva2NvbmZpZy9maXhkZXAuYw0KICAgICBjcmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9y
dC9rY29uZmlnL2djb25mLWNmZy5zaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL2djb25mLmMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9n
Y29uZi5nbGFkZQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL2ltYWdl
cy5jDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvaW1hZ2VzLmgNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9sZXhlci5sDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbGlzdC5oDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcvbGtjLmgNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy9sa2NfcHJvdG8uaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL2x4ZGlhbG9nL0JJRy5GQVQuV0FSTklORw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmgNCiAgICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9pbnB1dGJveC5jDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdGV4dGJveC5jDQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jDQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvbHhkaWFsb2cveWVzbm8uYw0KICAgICBj
cmVhdGUgbW9kZSAxMDA3NTUgc3VwcG9ydC9rY29uZmlnL21jb25mLWNmZy5zaA0KICAgICBjcmVh
dGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL21jb25mLmMNCiAgICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9tZW51LmMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1
cHBvcnQva2NvbmZpZy9tZXJnZV9jb25maWcuc2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1
cHBvcnQva2NvbmZpZy9uY29uZi1jZmcuc2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy9uY29uZi5jDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvbmNvbmYuZ3VpLmMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9u
Y29uZi5oDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGFyc2VyLnkN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAxLWtjb25m
aWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBw
b3J0L2tjb25maWcvcGF0Y2hlcy8wMi1pbXBvcnQtbWFrZWZpbGUuYnINCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVs
cGVyLWZyb20ta2VybmVsDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcv
cGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhlYWRlcg0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDYtcmVtb3ZlLWlt
cGxpY2l0LXJ1bGVzDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvcGF0
Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZw0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDktc3VwcG9ydC1nbG9i
LWluLWtjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9wcmVw
cm9jZXNzLmMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9xY29uZi1j
Zmcuc2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy9xY29uZi5jYw0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Fjb25mLmgNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNzU1IHN1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbA0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3N5bWJvbC5jDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L0tjb25maWcN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1l
bnUvX19pbml0X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL0tjb25maWcNCiAgICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvX19pbml0X18ucHkNCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxsZGVmX2V4cGVj
dGVkX2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2Nob2ljZS9hbGxtb2RfZXhwZWN0ZWRfY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZw0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhw
ZWN0ZWRfY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0
ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
Y2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3Zh
bHVlX3dpdGhfbV9kZXAvY29uZmlnDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dp
dGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvdGVzdHMvY29uZnRlc3QucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBv
cnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvX19pbml0
X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJf
cmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnINCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1
cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2Nv
bmZpZy5pbmMxDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMzDQogICAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9p
bmMvX19pbml0X18ucHkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnINCiAgICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZw0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9fX2lu
aXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2lu
dGVyX2Nob2ljZS9kZWZjb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvZXhwZWN0ZWRfY29uZmlnDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9LY29uZmln
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2lj
ZV93aXRoX2RlcC9fX2luaXRfXy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3Rl
ZF9zdGRvdXQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9u
b193cml0ZV9pZl9kZXBfdW5tZXQvS2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9fX2luaXRfXy5weQ0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2Rl
cF91bm1ldC9jb25maWcNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90
ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMv
S2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3By
ZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRf
c3RkZXJyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0DQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24v
S2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3By
ZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNp
b24vZXhwZWN0ZWRfc3RkZXJyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25m
aWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZw0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5DQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9l
c2NhcGUvZXhwZWN0ZWRfc3RkZXJyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tj
b25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnDQogICAgIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRf
Xy5weQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvZXhwZWN0ZWRfc3RkZXJyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBz
dXBwb3J0L2tjb25maWcvdGVzdHMvcHl0ZXN0LmluaQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnDQogICAgIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNl
L19faW5pdF9fLnB5DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0L2tjb25maWcvdGVz
dHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDANCiAgICAgY3JlYXRlIG1vZGUg
MTAwNjQ0IHN1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRf
c3Rkb3V0MQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3Jh
bmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBzdXBwb3J0L2tjb25maWcvdXRpbC5jDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBzdXBwb3J0
L2tjb25maWcvemNvbmYubGV4LmMNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHN1cHBvcnQva2Nv
bmZpZy96Y29uZi50YWIuYw0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2Vm
aWxlDQogICAgaW5kZXggNjVhZTMxYi4uODM0MTMxMCAxMDA2NDQNCiAgICAtLS0gYS9NYWtlZmls
ZQ0KICAgICsrKyBiL01ha2VmaWxlDQogICAgQEAgLTEzOSwxMiArMTM5LDEyIEBAIEVMSUJfRElS
IDo9ICQocmVhbHBhdGggJChwYXRzdWJzdCAlLywlLCQocGF0c3Vic3QgJS4sJSwkKEVMSUJfRElS
KSkpKQ0KICAgICBDT05GSUdfVUtfUExBVCAgICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkvcGxh
dC8NCiAgICAgQ09ORklHX0RJUiAgICAgICAgICAgIDo9ICQoQ09ORklHX1VLX0FQUCkNCiAgICAg
Q09ORklHX0NPTkZJR19JTiAgICAgIDo9ICQoQ09ORklHX1VLX0JBU0UpL0NvbmZpZy51aw0KICAg
IC1DT05GSUcgICAgICAgICAgICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkvc3VwcG9ydC9rY29u
ZmlnLm5ldw0KICAgICtDT05GSUcgICAgICAgICAgICAgICAgOj0gJChDT05GSUdfVUtfQkFTRSkv
c3VwcG9ydC9rY29uZmlnDQogICAgIENPTkZJR0xJQgkgICAgICA6PSAkKENPTkZJR19VS19CQVNF
KS9zdXBwb3J0L2tjb25maWdsaWINCiAgICAgVUtfQ09ORklHICAgICAgICAgICAgIDo9ICQoQ09O
RklHX0RJUikvLmNvbmZpZw0KICAgICBVS19DT05GSUdfT1VUICAgICAgICAgOj0gJChCVUlMRF9E
SVIpL2NvbmZpZw0KICAgICBVS19HRU5FUkFURURfSU5DTFVERVMgOj0gJChCVUlMRF9ESVIpL2lu
Y2x1ZGUNCiAgICAtS0NPTkZJR19ESVIgICAgICAgICAgIDo9ICQoQlVJTERfRElSKS9rY29uZmln
Lm5ldw0KICAgICtLQ09ORklHX0RJUiAgICAgICAgICAgOj0gJChCVUlMRF9ESVIpL2tjb25maWcN
CiAgICAgVUtfRklYREVQICAgICAgICAgICAgIDo9ICQoS0NPTkZJR19ESVIpL2ZpeGRlcA0KICAg
ICBLQ09ORklHX0FVVE9DT05GSUcgICAgOj0gJChLQ09ORklHX0RJUikvYXV0by5jb25mDQogICAg
IEtDT05GSUdfVFJJU1RBVEUgICAgICA6PSAkKEtDT05GSUdfRElSKS90cmlzdGF0ZS5jb25maWcN
CiAgICBAQCAtNTE5LDcgKzUxOSw3IEBAIENYWEZMQUdTCSs9IC1EQ0NfVkVSU0lPTj0kKENDX1ZF
UlNJT04pDQogICAgIEdPQ0ZMQUdTCSs9IC1EQ0NfVkVSU0lPTj0kKENDX1ZFUlNJT04pDQogICAg
IA0KICAgICAjIGVuc3VyZSAkKEJVSUxEX0RJUikva2NvbmZpZywgJChCVUlMRF9ESVIpL2luY2x1
ZGUgYW5kICQoQlVJTERfRElSKS9pbmNsdWRlL3VrIGV4aXN0cw0KICAgIC0kKGNhbGwgbWtfc3Vi
X2J1aWxkX2RpcixrY29uZmlnLm5ldykNCiAgICArJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsa2Nv
bmZpZykNCiAgICAgJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsaW5jbHVkZSkNCiAgICAgJChjYWxs
IG1rX3N1Yl9idWlsZF9kaXIsaW5jbHVkZS91aykNCiAgICAgDQogICAgZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxl
DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggN2I1MzJjNS4uMDAwMDAw
MA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUNCiAgICArKysgL2Rldi9u
dWxsDQogICAgQEAgLTEsMjA4ICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogR1BMLTIuMA0KICAgIC0jID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIC0jIFVuaWtyYWZ0IGNv
bmZpZ3VyYXRpb24gdGFyZ2V0cw0KICAgIC0jIFRoZXNlIHRhcmdldHMgYXJlIHVzZWQgZnJvbSB0
b3AtbGV2ZWwgbWFrZWZpbGUNCiAgICAtDQogICAgLVBIT05ZICs9IHhjb25maWcgZ2NvbmZpZyBt
ZW51Y29uZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZyBcDQogICAgLQli
dWlsZF9tZW51Y29uZmlnIGJ1aWxkX25jb25maWcgYnVpbGRfZ2NvbmZpZyBidWlsZF94Y29uZmln
DQogICAgLQ0KICAgIC1pZmRlZiBLQlVJTERfS0NPTkZJRw0KICAgIC1LY29uZmlnIDo9ICQoS0JV
SUxEX0tDT05GSUcpDQogICAgLWVsc2UNCiAgICAtS2NvbmZpZyA6PSBLY29uZmlnDQogICAgLWVu
ZGlmDQogICAgLQ0KICAgIC1pZmVxICgkKHF1aWV0KSxzaWxlbnRfKQ0KICAgIC1zaWxlbnQgOj0g
LXMNCiAgICAtZW5kaWYNCiAgICAtDQogICAgLSMgV2UgbmVlZCB0aGlzLCBpbiBjYXNlIHRoZSB1
c2VyIGhhcyBpdCBpbiBpdHMgZW52aXJvbm1lbnQNCiAgICAtdW5leHBvcnQgQ09ORklHXw0KICAg
IC0NCiAgICAteGNvbmZpZzogJChvYmopL3Fjb25mDQogICAgLQkkPCAkKHNpbGVudCkgJChLY29u
ZmlnKQ0KICAgIC0NCiAgICAtZ2NvbmZpZzogJChvYmopL2djb25mDQogICAgLQkkPCAkKHNpbGVu
dCkgJChLY29uZmlnKQ0KICAgIC0NCiAgICAtbWVudWNvbmZpZzogJChvYmopL21jb25mDQogICAg
LQkkPCAkKHNpbGVudCkgJChLY29uZmlnKQ0KICAgIC0NCiAgICAtY29uZmlnOiAkKG9iaikvY29u
Zg0KICAgIC0JJDwgJChzaWxlbnQpIC0tb2xkYXNrY29uZmlnICQoS2NvbmZpZykNCiAgICAtDQog
ICAgLW5jb25maWc6ICQob2JqKS9uY29uZg0KICAgIC0JJDwgJChzaWxlbnQpICQoS2NvbmZpZykN
CiAgICAtDQogICAgLWJ1aWxkX21lbnVjb25maWc6ICQob2JqKS9tY29uZg0KICAgIC0NCiAgICAt
YnVpbGRfbmNvbmZpZzogJChvYmopL25jb25mDQogICAgLQ0KICAgIC1idWlsZF9nY29uZmlnOiAk
KG9iaikvZ2NvbmYNCiAgICAtDQogICAgLWJ1aWxkX3hjb25maWc6ICQob2JqKS9xY29uZg0KICAg
IC0NCiAgICAtbG9jYWx5ZXNjb25maWcgbG9jYWxtb2Rjb25maWc6ICQob2JqKS9jb25mDQogICAg
LQkkKFEpcGVybCAkKHNyY3RyZWUpLyQoc3JjKS9zdHJlYW1saW5lX2NvbmZpZy5wbCAtLSRAICQo
c3JjdHJlZSkgJChLY29uZmlnKSA+IC50bXAuY29uZmlnDQogICAgLQkkKFEpaWYgWyAtZiAuY29u
ZmlnIF07IHRoZW4gCQkJCQlcDQogICAgLQkJCWNtcCAtcyAudG1wLmNvbmZpZyAuY29uZmlnIHx8
CQkJXA0KICAgIC0JCQkobXYgLWYgLmNvbmZpZyAuY29uZmlnLm9sZC4xOwkJCVwNCiAgICAtCQkJ
IG12IC1mIC50bXAuY29uZmlnIC5jb25maWc7CQkJXA0KICAgIC0JCQkgJDwgJChzaWxlbnQpIC0t
b2xkY29uZmlnICQoS2NvbmZpZyk7CQlcDQogICAgLQkJCSBtdiAtZiAuY29uZmlnLm9sZC4xIC5j
b25maWcub2xkKQkJXA0KICAgIC0JZWxzZQkJCQkJCQkJXA0KICAgIC0JCQltdiAtZiAudG1wLmNv
bmZpZyAuY29uZmlnOwkJCVwNCiAgICAtCQkJJDwgJChzaWxlbnQpIC0tb2xkY29uZmlnICQoS2Nv
bmZpZyk7CQlcDQogICAgLQlmaQ0KICAgIC0JJChRKXJtIC1mIC50bXAuY29uZmlnDQogICAgLQ0K
ICAgIC0jIFRoZXNlIHRhcmdldHMgbWFwIDE6MSB0byB0aGUgY29tbWFuZGxpbmUgb3B0aW9ucyBv
ZiAnY29uZicNCiAgICAtIw0KICAgIC0jIE5vdGU6DQogICAgLSMgIHN5bmNjb25maWcgaGFzIGJl
Y29tZSBhbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIGlzIG5vdw0KICAgIC0j
ICBkZXByZWNhdGVkIGZvciBleHRlcm5hbCB1c2UNCiAgICAtc2ltcGxlLXRhcmdldHMgOj0gb2xk
Y29uZmlnIGFsbG5vY29uZmlnIGFsbHllc2NvbmZpZyBhbGxtb2Rjb25maWcgXA0KICAgIC0JYWxs
ZGVmY29uZmlnIHJhbmRjb25maWcgbGlzdG5ld2NvbmZpZyBvbGRkZWZjb25maWcgc3luY2NvbmZp
Zw0KICAgIC1QSE9OWSArPSAkKHNpbXBsZS10YXJnZXRzKQ0KICAgIC0NCiAgICAtJChzaW1wbGUt
dGFyZ2V0cyk6ICQob2JqKS9jb25mDQogICAgLQkkPCAkKHNpbGVudCkgLS0kQCAkKEtjb25maWcp
DQogICAgLQ0KICAgIC1QSE9OWSArPSBzYXZlZGVmY29uZmlnIGRlZmNvbmZpZw0KICAgIC0NCiAg
ICAtc2F2ZWRlZmNvbmZpZzogJChvYmopL2NvbmYNCiAgICAtCSQ8ICQoc2lsZW50KSAtLSRAPWRl
ZmNvbmZpZyAkKEtjb25maWcpDQogICAgLQ0KICAgIC1kZWZjb25maWc6ICQob2JqKS9jb25mDQog
ICAgLWlmZXEgKCQoS0JVSUxEX0RFRkNPTkZJRyksKQ0KICAgIC0JJDwgJChzaWxlbnQpIC0tZGVm
Y29uZmlnICQoS2NvbmZpZykNCiAgICAtZWxzZSBpZm5lcSAoJCh3aWxkY2FyZCAkKHNyY3RyZWUp
L2FyY2gvJChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykpLCkNCiAgICAtCUAk
KGtlY2hvKSAiKioqIERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiAnJChLQlVJTERf
REVGQ09ORklHKSciDQogICAgLQkkKFEpJDwgJChzaWxlbnQpIC0tZGVmY29uZmlnPWFyY2gvJChT
UkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChLY29uZmlnKQ0KICAgIC1lbHNl
DQogICAgLQlAJChrZWNobykgIioqKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24g
dGFyZ2V0ICckKEtCVUlMRF9ERUZDT05GSUcpJyINCiAgICAtCSQoUSkkKE1BS0UpIC1mICQoc3Jj
dHJlZSkvTWFrZWZpbGUgJChLQlVJTERfREVGQ09ORklHKQ0KICAgIC1lbmRpZg0KICAgIC0NCiAg
ICAtJV9kZWZjb25maWc6ICQob2JqKS9jb25mDQogICAgLQkkKFEpJDwgJChzaWxlbnQpIC0tZGVm
Y29uZmlnPWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyRAICQoS2NvbmZpZykNCiAgICAtDQogICAg
LWNvbmZpZ2ZpbGVzPSQod2lsZGNhcmQgJChzcmN0cmVlKS9rZXJuZWwvY29uZmlncy8kQCAkKHNy
Y3RyZWUpL2FyY2gvJChTUkNBUkNIKS9jb25maWdzLyRAKQ0KICAgIC0NCiAgICAtJS5jb25maWc6
ICQob2JqKS9jb25mDQogICAgLQkkKGlmICQoY2FsbCBjb25maWdmaWxlcyksLCAkKGVycm9yIE5v
IGNvbmZpZ3VyYXRpb24gZXhpc3RzIGZvciB0aGlzIHRhcmdldCBvbiB0aGlzIGFyY2hpdGVjdHVy
ZSkpDQogICAgLQkkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9rY29uZmln
L21lcmdlX2NvbmZpZy5zaCAtbSAuY29uZmlnICQoY29uZmlnZmlsZXMpDQogICAgLQkrJChRKXll
cyAiIiB8ICQoTUFLRSkgLWYgJChzcmN0cmVlKS9NYWtlZmlsZSBvbGRjb25maWcNCiAgICAtDQog
ICAgLVBIT05ZICs9IGt2bWNvbmZpZw0KICAgIC1rdm1jb25maWc6IGt2bV9ndWVzdC5jb25maWcN
CiAgICAtCUA6DQogICAgLQ0KICAgIC1QSE9OWSArPSB4ZW5jb25maWcNCiAgICAteGVuY29uZmln
OiB4ZW4uY29uZmlnDQogICAgLQlAOg0KICAgIC0NCiAgICAtUEhPTlkgKz0gdGlueWNvbmZpZw0K
ICAgIC10aW55Y29uZmlnOg0KICAgIC0JJChRKSQoTUFLRSkgLWYgJChzcmN0cmVlKS9NYWtlZmls
ZSBhbGxub2NvbmZpZyB0aW55LmNvbmZpZw0KICAgIC0NCiAgICAtIyBDSEVDSzogLW8gY2FjaGVf
ZGlyPTxwYXRoPiB3b3JraW5nPw0KICAgIC1QSE9OWSArPSB0ZXN0Y29uZmlnDQogICAgLXRlc3Rj
b25maWc6ICQob2JqKS9jb25mDQogICAgLQkkKFBZVEhPTjMpIC1CIC1tIHB5dGVzdCAkKHNyY3Ry
ZWUpLyQoc3JjKS90ZXN0cyBcDQogICAgLQktbyBjYWNoZV9kaXI9JChhYnNwYXRoICQob2JqKS90
ZXN0cy8uY2FjaGUpIFwNCiAgICAtCSQoaWYgJChmaW5kc3RyaW5nIDEsJChLQlVJTERfVkVSQk9T
RSkpLC0tY2FwdHVyZT1ubykNCiAgICAtY2xlYW4tZGlycyArPSB0ZXN0cy8uY2FjaGUNCiAgICAt
DQogICAgLSMgSGVscCB0ZXh0IHVzZWQgYnkgbWFrZSBoZWxwDQogICAgLWhlbHA6DQogICAgLQlA
ZWNobyAgJyAgY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbGlu
ZS1vcmllbnRlZCBwcm9ncmFtJw0KICAgIC0JQGVjaG8gICcgIG5jb25maWcgICAgICAgICAtIFVw
ZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBuY3Vyc2VzIG1lbnUgYmFzZWQgcHJvZ3Jh
bScNCiAgICAtCUBlY2hvICAnICBtZW51Y29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcg
dXRpbGlzaW5nIGEgbWVudSBiYXNlZCBwcm9ncmFtJw0KICAgIC0JQGVjaG8gICcgIHhjb25maWcJ
ICAtIFVwZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBRdCBiYXNlZCBmcm9udC1lbmQn
DQogICAgLQlAZWNobyAgJyAgZ2NvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxp
c2luZyBhIEdUSysgYmFzZWQgZnJvbnQtZW5kJw0KICAgIC0JQGVjaG8gICcgIG9sZGNvbmZpZwkg
IC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMg
YmFzZScNCiAgICAtCUBlY2hvICAnICBsb2NhbG1vZGNvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBj
b25maWcgZGlzYWJsaW5nIG1vZHVsZXMgbm90IGxvYWRlZCcNCiAgICAtCUBlY2hvICAnICBsb2Nh
bHllc2NvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgY29udmVydGluZyBsb2NhbCBtb2Rz
IHRvIGNvcmUnDQogICAgLQlAZWNobyAgJyAgZGVmY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGgg
ZGVmYXVsdCBmcm9tIEFSQ0ggc3VwcGxpZWQgZGVmY29uZmlnJw0KICAgIC0JQGVjaG8gICcgIHNh
dmVkZWZjb25maWcgICAtIFNhdmUgY3VycmVudCBjb25maWcgYXMgLi9kZWZjb25maWcgKG1pbmlt
YWwgY29uZmlnKScNCiAgICAtCUBlY2hvICAnICBhbGxub2NvbmZpZwkgIC0gTmV3IGNvbmZpZyB3
aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCBubycNCiAgICAtCUBlY2hvICAnICBh
bGx5ZXNjb25maWcJICAtIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFjY2VwdGVk
IHdpdGggeWVzJw0KICAgIC0JQGVjaG8gICcgIGFsbG1vZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyBz
ZWxlY3RpbmcgbW9kdWxlcyB3aGVuIHBvc3NpYmxlJw0KICAgIC0JQGVjaG8gICcgIGFsbGRlZmNv
bmZpZyAgICAtIE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdCcNCiAg
ICAtCUBlY2hvICAnICByYW5kY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dl
ciB0byBhbGwgb3B0aW9ucycNCiAgICAtCUBlY2hvICAnICBsaXN0bmV3Y29uZmlnICAgLSBMaXN0
IG5ldyBvcHRpb25zJw0KICAgIC0JQGVjaG8gICcgIG9sZGRlZmNvbmZpZwkgIC0gU2FtZSBhcyBv
bGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8gdGhlaXInDQogICAgLQlAZWNobyAgJyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSB3aXRob3V0IHByb21wdGluZycNCiAgICAt
CUBlY2hvICAnICBrdm1jb25maWcJICAtIEVuYWJsZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGt2
bSBndWVzdCBrZXJuZWwgc3VwcG9ydCcNCiAgICAtCUBlY2hvICAnICB4ZW5jb25maWcgICAgICAg
LSBFbmFibGUgYWRkaXRpb25hbCBvcHRpb25zIGZvciB4ZW4gZG9tMCBhbmQgZ3Vlc3Qga2VybmVs
IHN1cHBvcnQnDQogICAgLQlAZWNobyAgJyAgdGlueWNvbmZpZwkgIC0gQ29uZmlndXJlIHRoZSB0
aW5pZXN0IHBvc3NpYmxlIGtlcm5lbCcNCiAgICAtCUBlY2hvICAnICB0ZXN0Y29uZmlnCSAgLSBS
dW4gS2NvbmZpZyB1bml0IHRlc3RzIChyZXF1aXJlcyBweXRob24zIGFuZCBweXRlc3QpJw0KICAg
IC0NCiAgICAtIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICAtIyBvYmplY3QgZmlsZXMgdXNlZCBi
eSBhbGwga2NvbmZpZyBmbGF2b3Vycw0KICAgIC1jb21tb24tb2Jqcwk6PSBjb25mZGF0YS5vIGV4
cHIubyBsZXhlci5sZXgubyBwYXJzZXIudGFiLm8gcHJlcHJvY2Vzcy5vIFwNCiAgICAtCQkgICBz
eW1ib2wubw0KICAgIC0NCiAgICAtJChvYmopL2xleGVyLmxleC5vOiAkKG9iaikvcGFyc2VyLnRh
Yi5oDQogICAgLUhPU1RDRkxBR1NfbGV4ZXIubGV4Lm8JOj0gLUkgJChzcmN0cmVlKS8kKHNyYykN
CiAgICAtSE9TVENGTEFHU19wYXJzZXIudGFiLm8JOj0gLUkgJChzcmN0cmVlKS8kKHNyYykNCiAg
ICAtDQogICAgLSMgY29uZjogVXNlZCBmb3IgZGVmY29uZmlnLCBvbGRjb25maWcgYW5kIHJlbGF0
ZWQgdGFyZ2V0cw0KICAgIC1ob3N0cHJvZ3MteQkrPSBjb25mDQogICAgLWNvbmYtb2Jqcwk6PSBj
b25mLm8gJChjb21tb24tb2JqcykNCiAgICAtDQogICAgLSMgbmNvbmY6IFVzZWQgZm9yIHRoZSBu
Y29uZmlnIHRhcmdldCBiYXNlZCBvbiBuY3Vyc2VzDQogICAgLWhvc3Rwcm9ncy15CSs9IG5jb25m
DQogICAgLW5jb25mLW9ianMJOj0gbmNvbmYubyBuY29uZi5ndWkubyAkKGNvbW1vbi1vYmpzKQ0K
ICAgIC0NCiAgICAtSE9TVExETElCU19uY29uZgk9ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2Zn
ICYmIGVjaG8gJCRsaWJzKQ0KICAgIC1IT1NUQ0ZMQUdTX25jb25mLm8JPSAkKHNoZWxsIC4gJChv
YmopL25jb25mLWNmZyAmJiBlY2hvICQkY2ZsYWdzKQ0KICAgIC1IT1NUQ0ZMQUdTX25jb25mLmd1
aS5vCT0gJChzaGVsbCAuICQob2JqKS9uY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykNCiAgICAt
DQogICAgLSQob2JqKS9uY29uZi5vICQob2JqKS9uY29uZi5ndWkubzogJChvYmopL25jb25mLWNm
Zw0KICAgIC0NCiAgICAtIyBtY29uZjogVXNlZCBmb3IgdGhlIG1lbnVjb25maWcgdGFyZ2V0IGJh
c2VkIG9uIGx4ZGlhbG9nDQogICAgLWhvc3Rwcm9ncy15CSs9IG1jb25mDQogICAgLWx4ZGlhbG9n
CTo9IGNoZWNrbGlzdC5vIGlucHV0Ym94Lm8gbWVudWJveC5vIHRleHRib3gubyB1dGlsLm8geWVz
bm8ubw0KICAgIC1tY29uZi1vYmpzCTo9IG1jb25mLm8gJChhZGRwcmVmaXggbHhkaWFsb2cvLCAk
KGx4ZGlhbG9nKSkgJChjb21tb24tb2JqcykNCiAgICAtDQogICAgLUhPU1RMRExJQlNfbWNvbmYg
PSAkKHNoZWxsIC4gJChvYmopL21jb25mLWNmZyAmJiBlY2hvICQkbGlicykNCiAgICAtJChmb3Jl
YWNoIGYsIG1jb25mLm8gJChseGRpYWxvZyksIFwNCiAgICAtICAkKGV2YWwgSE9TVENGTEFHU18k
ZiA9ICQkKHNoZWxsIC4gJChvYmopL21jb25mLWNmZyAmJiBlY2hvICQkJCRjZmxhZ3MpKSkNCiAg
ICAtDQogICAgLSQob2JqKS9tY29uZi5vOiAkKG9iaikvbWNvbmYtY2ZnDQogICAgLSQoYWRkcHJl
Zml4ICQob2JqKS9seGRpYWxvZy8sICQobHhkaWFsb2cpKTogJChvYmopL21jb25mLWNmZw0KICAg
IC0NCiAgICAtIyBxY29uZjogVXNlZCBmb3IgdGhlIHhjb25maWcgdGFyZ2V0IGJhc2VkIG9uIFF0
DQogICAgLWhvc3Rwcm9ncy15CSs9IHFjb25mDQogICAgLXFjb25mLWN4eG9ianMJOj0gcWNvbmYu
bw0KICAgIC1xY29uZi1vYmpzCTo9IGltYWdlcy5vICQoY29tbW9uLW9ianMpDQogICAgLQ0KICAg
IC1IT1NUTERMSUJTX3Fjb25mCT0gJChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcgJiYgZWNobyAk
JGxpYnMpDQogICAgLUhPU1RDWFhGTEFHU19xY29uZi5vCT0gJChzaGVsbCAuICQob2JqKS9xY29u
Zi1jZmcgJiYgZWNobyAkJGNmbGFncykNCiAgICAtDQogICAgLSQob2JqKS9xY29uZi5vOiAkKG9i
aikvcWNvbmYtY2ZnICQob2JqKS9xY29uZi5tb2MNCiAgICAtDQogICAgLXF1aWV0X2NtZF9tb2Mg
PSBNT0MgICAgICRADQogICAgLSAgICAgIGNtZF9tb2MgPSAkKHNoZWxsIC4gJChvYmopL3Fjb25m
LWNmZyAmJiBlY2hvICQkbW9jKSAtaSAkPCAtbyAkQA0KICAgIC0NCiAgICAtJChvYmopLyUubW9j
OiAkKHNyYykvJS5oICQob2JqKS9xY29uZi1jZmcNCiAgICAtCSQoY2FsbCBjbWQsbW9jKQ0KICAg
IC0NCiAgICAtIyBnY29uZjogVXNlZCBmb3IgdGhlIGdjb25maWcgdGFyZ2V0IGJhc2VkIG9uIEdU
SysNCiAgICAtaG9zdHByb2dzLXkJKz0gZ2NvbmYNCiAgICAtZ2NvbmYtb2Jqcwk6PSBnY29uZi5v
IGltYWdlcy5vICQoY29tbW9uLW9ianMpDQogICAgLQ0KICAgIC1IT1NUTERMSUJTX2djb25mICAg
ID0gJChzaGVsbCAuICQob2JqKS9nY29uZi1jZmcgJiYgZWNobyAkJGxpYnMpDQogICAgLUhPU1RD
RkxBR1NfZ2NvbmYubyAgPSAkKHNoZWxsIC4gJChvYmopL2djb25mLWNmZyAmJiBlY2hvICQkY2Zs
YWdzKQ0KICAgIC0NCiAgICAtJChvYmopL2djb25mLm86ICQob2JqKS9nY29uZi1jZmcNCiAgICAt
DQogICAgLSMgY2hlY2sgaWYgbmVjZXNzYXJ5IHBhY2thZ2VzIGFyZSBhdmFpbGFibGUsIGFuZCBj
b25maWd1cmUgYnVpbGQgZmxhZ3MNCiAgICAtZmlsZWNoa19jb25mX2NmZyA9ICQoQ09ORklHX1NI
RUxMKSAkPA0KICAgIC0NCiAgICAtJChvYmopLyVjb25mLWNmZzogJChzcmMpLyVjb25mLWNmZy5z
aCBGT1JDRQ0KICAgIC0JJChjYWxsIGZpbGVjaGssY29uZl9jZmcpDQogICAgLQ0KICAgIC1jbGVh
bi1maWxlcyArPSAqY29uZi1jZmcNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBlZDlhNWNmLi4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICsrKyAvZGV2L251bGwNCiAg
ICBAQCAtMSwxNDEgKzAsMCBAQA0KICAgIC1zcmMgOj0gLg0KICAgIC10b3Bfc3JjZGlyPS4uLy4u
Lw0KICAgIC10b3BfYnVpbGRkaXI9Li4vLi4vDQogICAgLXNyY3RyZWUgOj0gLg0KICAgIC1vYmog
Pz0gLg0KICAgIC0NCiAgICAtLlNVRkZJWEVTIDoNCiAgICAtDQogICAgLWluY2x1ZGUgTWFrZWZp
bGUucnVsZXMNCiAgICAtaW5jbHVkZSBNYWtlZmlsZQ0KICAgIC0jSE9TVENGTEFHUys9LURpbmxp
bmU9IiIgLWluY2x1ZGUgZm9vLmgNCiAgICAtLWluY2x1ZGUgJChvYmopLy5kZXBlbmQNCiAgICAt
DQogICAgLV9faG9zdHByb2dzIDo9ICQoc29ydCAkKGhvc3Rwcm9ncy15KSAkKGhvc3Rwcm9ncy1t
KSkNCiAgICAtaG9zdC1jc2hsaWIgOj0gJChzb3J0ICQoaG9zdGxpYnMteSkgJChob3N0bGlicy1t
KSkNCiAgICAtaG9zdC1jeHhzaGxpYiA6PSAkKHNvcnQgJChob3N0Y3h4bGlicy15KSAkKGhvc3Rj
eHhsaWJzLW0pKQ0KICAgIC0NCiAgICAtIyBDIGNvZGUNCiAgICAtIyBFeGVjdXRhYmxlcyBjb21w
aWxlZCBmcm9tIGEgc2luZ2xlIC5jIGZpbGUNCiAgICAtaG9zdC1jc2luZ2xlOj0gJChmb3JlYWNo
IG0sJChfX2hvc3Rwcm9ncyksIFwNCiAgICAtICAgICAgICAgICAgICQoaWYgJCgkKG0pLW9ianMp
JCgkKG0pLWN4eG9ianMpLCwkKG0pKSkNCiAgICAtaG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0s
JChfX2hvc3Rwcm9ncyksXA0KICAgIC0JCSAgICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMp
LCwkKGlmICQoJChtKS1vYmpzKSwkKG0pKSkpDQogICAgLSMgT2JqZWN0ICgubykgZmlsZXMgY29t
cGlsZWQgZnJvbSAuYyBmaWxlcw0KICAgIC1ob3N0LWNvYmpzICA6PSAkKHNvcnQgJChmb3JlYWNo
IG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkNCiAgICAtDQogICAgLSMgQysrIGNvZGUN
CiAgICAtIyBDKysgZXhlY3V0YWJsZXMgY29tcGlsZWQgZnJvbSBhdCBsZWFzdCBvbmUgLmNjIGZp
bGUNCiAgICAtIyBhbmQgemVybyBvciBtb3JlIC5jIGZpbGVzDQogICAgLSBob3N0LWN4eG11bHRp
ICAgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJChpZiAkKCQobSktY3h4b2JqcyksJCht
KSkpDQogICAgLSMgQysrIE9iamVjdCAoLm8pIGZpbGVzIGNvbXBpbGVkIGZyb20gLmNjIGZpbGVz
DQogICAgLWhvc3QtY3h4b2JqcyAgICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWN4eG11
bHRpKSwkKCQobSktY3h4b2JqcykpKQ0KICAgIC0jT2JqZWN0ICgubykgZmlsZXMgdXNlZCBieSB0
aGUgc2hhcmVkIGxpYmFyaWVzDQogICAgLWhvc3QtY3Nob2JqcyAgICA6PSAkKHNvcnQgJChmb3Jl
YWNoIG0sJChob3N0LWNzaGxpYiksJCgkKG06LnNvPS1vYmpzKSkpKQ0KICAgIC1ob3N0LWN4eHNo
b2JqcyAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQoaG9zdC1jeHhzaGxpYiksJCgkKG06LnNvPS1v
YmpzKSkpKQ0KICAgIC0NCiAgICAtDQogICAgLWhvc3QtY3NpbmdsZSA6PSAkKGFkZHByZWZpeCAk
KG9iaikvLCQoaG9zdC1jc2luZ2xlKSkNCiAgICAtaG9zdC1jbXVsdGkgIDo9ICQoYWRkcHJlZml4
ICQob2JqKS8sJChob3N0LWNtdWx0aSkpDQogICAgLWhvc3QtY3h4bXVsdGkgIDo9ICQoYWRkcHJl
Zml4ICQob2JqKS8sJChob3N0LWN4eG11bHRpKSkNCiAgICAtaG9zdC1jb2JqcyA6PSAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQoaG9zdC1jb2JqcykpDQogICAgLWhvc3QtY3h4b2JqcyA6PSAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQoaG9zdC1jeHhvYmpzKSkNCiAgICAtZml4ZGVwLW9ianMgOj0gJChvYmop
L2ZpeGRlcC5vDQogICAgLQ0KICAgIC1IT1NUX0VYVFJBQ0ZMQUdTICs9IC1JJChzcmMpIC1JJChv
YmopIC1EQ09ORklHXz1cIlwiDQogICAgLQ0KICAgIC1faG9zdGNfZmxhZ3MgPSAkKEhPU1RDRkxB
R1MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTXyQoYmFzZXRhcmdldCkubykNCiAg
ICAtX2hvc3RjeHhfZmxhZ3MgPSAkKEhPU1RDWFhGTEFHUykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAk
KEhPU1RDWFhGTEFHU18kKGJhc2V0YXJnZXQpLm8pDQogICAgLQ0KICAgIC1ob3N0Y19mbGFncyAg
ICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y19mbGFncykNCiAgICAtaG9zdGN4eF9mbGFn
cyAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChfaG9zdGN4eF9mbGFncykNCiAgICAtDQogICAgLSQo
b2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpDQogICAgLQkkKEhPU1RDQykgJChIT1NUX0VYVFJB
Q0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgJDwgLW8gJEANCiAgICAt
DQogICAgLSQoZml4ZGVwLW9ianMpOiAkKHNyYykvZml4ZGVwLmMNCiAgICAtCSQoSE9TVENDKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAk
PCAtbyAkQA0KICAgIC0NCiAgICAtIyMjIyMNCiAgICAtIyBDb21waWxlIHByb2dyYW1zIG9uIHRo
ZSBob3N0DQogICAgLQ0KICAgIC0jIENyZWF0ZSBleGVjdXRhYmxlIGZyb20gYSBzaW5nbGUgLmMg
ZmlsZQ0KICAgIC0jIGhvc3QtY3NpbmdsZSAtPiBFeGVjdXRhYmxlDQogICAgLXF1aWV0X2NtZF9o
b3N0LWNzaW5nbGUgCT0gSE9TVENDICAkQA0KICAgIC0gICAgICBjbWRfaG9zdC1jc2luZ2xlCT0g
JChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9TVExERkxBR1MpIC1vICRAICQ8IFwNCiAgICAt
CQkkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18kKEBGKSkNCiAgICAtJChob3N0LWNzaW5nbGUp
OiAkKG9iaikvJTogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAgLQkkKGNhbGwg
aWZfY2hhbmdlZF9kZXAsaG9zdC1jc2luZ2xlKQ0KICAgIC0NCiAgICAtIyBMaW5rIGFuIGV4ZWN1
dGFibGUgYmFzZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYWxsIHBsYWluIGMNCiAgICAtIyBob3N0
LWNtdWx0aSAtPiBleGVjdXRhYmxlDQogICAgLXF1aWV0X2NtZF9ob3N0LWNtdWx0aQk9IEhPU1RM
RCAgJEANCiAgICAtICAgICAgY21kX2hvc3QtY211bHRpCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxh
Z3MpIC1vICRAIFwNCiAgICAtCQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2Jqcykp
IFwNCiAgICAtCQkJICAkKEhPU1RfTERGTEFHUykgJChIT1NUTERMSUJTXyQoQEYpKQ0KICAgIC0k
KGhvc3QtY211bHRpKTogJChvYmopL2ZpeGRlcCBGT1JDRQ0KICAgIC0JJChjYWxsIGlmX2NoYW5n
ZWQsaG9zdC1jbXVsdGkpDQogICAgLSQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWNtdWx0aSks
ICwgLW9ianMpDQogICAgLQ0KICAgIC0NCiAgICAtIyBDcmVhdGUgLm8gZmlsZSBmcm9tIGEgc2lu
Z2xlIC5jIGZpbGUNCiAgICAtIyBob3N0LWNvYmpzIC0+IC5vDQogICAgLXF1aWV0X2NtZF9ob3N0
LWNvYmpzCT0gSE9TVENDICAkQA0KICAgIC0gICAgICBjbWRfaG9zdC1jb2Jqcwk9ICQoSE9TVEND
KSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RDRkxBR1NfJChARikpXA0KICAgIC0JCQkgIC1jIC1vICRA
ICQ8DQogICAgLSQoZmlsdGVyLW91dCAlLnRhYi5vLCAkKGZpbHRlci1vdXQgJS5sZXgubywkKGhv
c3QtY29ianMpKSk6ICQob2JqKS8lLm86XA0KICAgIC0JCSQoc3JjKS8lLmMgJChvYmopL2ZpeGRl
cCBGT1JDRQ0KICAgIC0JJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY29ianMpDQogICAgLQ0K
ICAgIC0kKGZpbHRlciAlLmxleC5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikvJS5sZXgubzogICQo
b2JqKS8lLmxleC5jICQob2JqKS9maXhkZXAgRk9SQ0UNCiAgICAtCSQoY2FsbCBpZl9jaGFuZ2Vk
X2RlcCxob3N0LWNvYmpzKQ0KICAgIC0NCiAgICAtJChmaWx0ZXIgJS50YWIubywkKGhvc3QtY29i
anMpKTogJChvYmopLyUudGFiLm86ICAkKG9iaikvJS50YWIuYyAkKG9iaikvZml4ZGVwIEZPUkNF
DQogICAgLQkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykNCiAgICAtDQogICAgLSMg
TGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmlsZXMsIGEgbWl4dHVyZSBv
ZiAuYyBhbmQgLmNjDQogICAgLSMgaG9zdC1jeHhtdWx0aSAtPiBleGVjdXRhYmxlDQogICAgLXF1
aWV0X2NtZF9ob3N0LWN4eG11bHRpCT0gSE9TVExEICAkQA0KICAgIC0gICAgICBjbWRfaG9zdC1j
eHhtdWx0aQk9ICQoSE9TVENYWCkgJChIT1NUTERGTEFHUykgLW8gJEBcDQogICAgLQkJCSAgJChm
b3JlYWNoIG8sb2JqcyBjeHhvYmpzLFwNCiAgICAtCQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQo
JChARiktJChvKSkpKSBcDQogICAgLQkJCSAgJChIT1NUTERMSUJTKSAkKEhPU1RMRExJQlNfJChA
RikpDQogICAgLSQoaG9zdC1jeHhtdWx0aSk6IEZPUkNFDQogICAgLQkkKGNhbGwgaWZfY2hhbmdl
ZCxob3N0LWN4eG11bHRpKQ0KICAgIC0kKGNhbGwgbXVsdGlfZGVwZW5kLCQoaG9zdC1jeHhtdWx0
aSksICwgLW9ianMgLWN4eG9ianMpDQogICAgLQ0KICAgIC0NCiAgICAtIyBDcmVhdGUgLm8gZmls
ZSBmcm9tIGEgc2luZ2xlIC5jYyAoQysrKSBmaWxlDQogICAgLXF1aWV0X2NtZF9ob3N0LWN4eG9i
anMJPSBIT1NUQ1hYICRADQogICAgLSAgICAgIGNtZF9ob3N0LWN4eG9ianMJPSAkKEhPU1RDWFgp
ICQoaG9zdGN4eF9mbGFncykgJChIT1NUQ1hYRkxBR1NfJChARikpIFwNCiAgICAtCQkJICAtYyAt
byAkQCAkPA0KICAgIC0kKGhvc3QtY3h4b2Jqcyk6ICQob2JqKS8lLm86ICQoc3JjKS8lLmNjIEZP
UkNFDQogICAgLQkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jeHhvYmpzKQ0KICAgIC0NCiAg
ICAtIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxl
DQogICAgLSMgaG9zdC1jc2hvYmpzIC0+IC5vDQogICAgLXF1aWV0X2NtZF9ob3N0LWNzaG9ianMJ
PSBIT1NUQ0MgIC1mUElDICRADQogICAgLSAgICAgIGNtZF9ob3N0LWNzaG9ianMJPSAkKEhPU1RD
QykgJChob3N0Y19mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwNCiAgICAtJChob3N0LWNzaG9ianMp
OiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNFDQogICAgLQkkKGNhbGwgaWZfY2hhbmdlZF9k
ZXAsaG9zdC1jc2hvYmpzKQ0KICAgIC0NCiAgICAtIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBw
b3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxlDQogICAgLSMgTm90ZSB0aGF0IHBsdWdpbiBjYXBh
YmxlIGdjYyB2ZXJzaW9ucyBjYW4gYmUgZWl0aGVyIEMgb3IgQysrIGJhc2VkDQogICAgLSMgdGhl
cmVmb3JlIHBsdWdpbiBzb3VyY2UgZmlsZXMgaGF2ZSB0byBiZSBjb21waWxhYmxlIGluIGJvdGgg
QyBhbmQgQysrIG1vZGUuDQogICAgLSMgVGhpcyBpcyB3aHkgYSBDKysgY29tcGlsZXIgaXMgaW52
b2tlZCBvbiBhIC5jIGZpbGUuDQogICAgLSMgaG9zdC1jeHhzaG9ianMgLT4gLm8NCiAgICAtcXVp
ZXRfY21kX2hvc3QtY3h4c2hvYmpzCT0gSE9TVENYWCAtZlBJQyAkQA0KICAgIC0gICAgICBjbWRf
aG9zdC1jeHhzaG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4eF9mbGFncykgLWZQSUMgLWMgLW8g
JEAgJDwNCiAgICAtJChob3N0LWN4eHNob2Jqcyk6ICQob2JqKS8lLm86ICQoc3JjKS8lLmMgJChv
YmopL2ZpeGRlcCBGT1JDRQ0KICAgIC0JQGVjaG8gdGVzdC0tJEANCiAgICAtCSQoY2FsbCBpZl9j
aGFuZ2VkX2RlcCxob3N0LWN4eHNob2JqcykNCiAgICAtDQogICAgLWNsZWFuOg0KICAgIC0JJChR
KXJtIC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpDQogICAgLWRpc3RjbGVh
bjogY2xlYW4NCiAgICAtCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQobHhkaWFsb2cp
ICQoY29uZi1vYmpzKSAkKG1jb25mLW9ianMpICQoa3hnZXR0ZXh0LW9ianMpIFwNCiAgICAtCQkk
KGhvc3Rwcm9ncy15KSAkKHFjb25mLWN4eG9ianMpICQocWNvbmYtb2JqcykgJChnY29uZi1vYmpz
KSBcDQogICAgLQkJbWNvbmYgLmRlcGVuZCkNCiAgICAtDQogICAgLUZPUkNFOg0KICAgIC0uUEhP
Tlk6IEZPUkNFIGNsZWFuIGRpc3RjbGVhbg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L01ha2VmaWxlLnJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxl
cw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDc4YTljODEuLjAwMDAw
MDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLnJ1bGVzDQogICAgKysr
IC9kZXYvbnVsbA0KICAgIEBAIC0xLDg0ICswLDAgQEANCiAgICAta2VjaG8gOj0gZWNobw0KICAg
IC1jb21tYSA6PSAsDQogICAgLQ0KICAgIC0NCiAgICAtZG90LXRhcmdldCA9ICQoZGlyICRAKS4k
KG5vdGRpciAkQCkNCiAgICAtDQogICAgLWFueS1wcmVyZXEgPSAkKGZpbHRlci1vdXQgJChQSE9O
WSksJD8pICQoZmlsdGVyLW91dCAkKFBIT05ZKSAkKHdpbGRjYXJkICReKSwkXikNCiAgICAtDQog
ICAgLWFyZy1jaGVjayA9ICQoaWYgJChzdHJpcCAkKGNtZF8kQCkpLCwxKQ0KICAgIC0NCiAgICAt
bWFrZS1jbWQgPSAkKGNhbGwgZXNjc3EsJChzdWJzdCAkKHBvdW5kKSwkJChwb3VuZCksJChzdWJz
dCAkJCwkJCQkLCQoY21kXyQoMSkpKSkpDQogICAgLQ0KICAgIC0jIHByaW50aW5nIGNvbW1hbmRz
DQogICAgLWNtZCA9IEBzZXQgLWU7ICQoZWNoby1jbWQpICQoY21kXyQoMSkpDQogICAgLQ0KICAg
IC1kZXBmaWxlID0gJChzdWJzdCAkKGNvbW1hKSxfLCQoZG90LXRhcmdldCkuZCkNCiAgICAtZGVw
ZmxhZ3MgPSAtV3AkKGNvbW1hKS1NRCQoY29tbWEpJChjYWxsIGRvdC10YXJnZXQpDQogICAgLQ0K
ICAgIC1jbWRfYW5kX2ZpeGRlcCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXA0KICAgIC0JJChjbWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLQkkKG9iaikvZml4ZGVwICQoZGVwZmls
ZSkgJEAgJyQobWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kO1wNCiAgICAtCXJtIC1mICQo
ZGVwZmlsZSkNCiAgICAtDQogICAgLWlmX2NoYW5nZWRfZGVwID0gJChpZiAkKHN0cmlwICQoYW55
LXByZXJlcSkgJChhcmctY2hlY2spKSwkKGNtZF9hbmRfZml4ZGVwKSxAOikNCiAgICAtDQogICAg
LWRlZmluZSBtdWx0aV9kZXBlbmQNCiAgICAtJChmb3JlYWNoIG0sICQobm90ZGlyICQxKSwgXA0K
ICAgIC0gICAgJChldmFsICQob2JqKS8kbTogXA0KICAgIC0gICAgJChhZGRwcmVmaXggJChvYmop
LywgJChmb3JlYWNoIHMsICQzLCAkKCQobTolJChzdHJpcCAkMik9JSQocykpKSkpKSkNCiAgICAt
ZW5kZWYNCiAgICAtDQogICAgLSMjIw0KICAgIC0jIGZpbGVjaGsgaXMgdXNlZCB0byBjaGVjayBp
ZiB0aGUgY29udGVudCBvZiBhIGdlbmVyYXRlZCBmaWxlIGlzIHVwZGF0ZWQuDQogICAgLSMgU2Ft
cGxlIHVzYWdlOg0KICAgIC0jDQogICAgLSMgZmlsZWNoa19zYW1wbGUgPSBlY2hvICQoS0VSTkVM
UkVMRUFTRSkNCiAgICAtIyB2ZXJzaW9uLmg6IEZPUkNFDQogICAgLSMgICAkKGNhbGwgZmlsZWNo
ayxzYW1wbGUpDQogICAgLSMNCiAgICAtIyBUaGUgcnVsZSBkZWZpbmVkIHNoYWxsIHdyaXRlIHRv
IHN0ZG91dCB0aGUgY29udGVudCBvZiB0aGUgbmV3IGZpbGUuDQogICAgLSMgVGhlIGV4aXN0aW5n
IGZpbGUgd2lsbCBiZSBjb21wYXJlZCB3aXRoIHRoZSBuZXcgb25lLg0KICAgIC0jIC0gSWYgbm8g
ZmlsZSBleGlzdCBpdCBpcyBjcmVhdGVkDQogICAgLSMgLSBJZiB0aGUgY29udGVudCBkaWZmZXIg
dGhlIG5ldyBmaWxlIGlzIHVzZWQNCiAgICAtIyAtIElmIHRoZXkgYXJlIGVxdWFsIG5vIGNoYW5n
ZSwgYW5kIG5vIHRpbWVzdGFtcCB1cGRhdGUNCiAgICAtIyAtIHN0ZGluIGlzIHBpcGVkIGluIGZy
b20gdGhlIGZpcnN0IHByZXJlcXVpc2l0ZSAoJDwpIHNvIG9uZSBoYXMNCiAgICAtIyAgIHRvIHNw
ZWNpZnkgYSB2YWxpZCBmaWxlIGFzIGZpcnN0IHByZXJlcXVpc2l0ZSAob2Z0ZW4gdGhlIGtidWls
ZCBmaWxlKQ0KICAgIC1kZWZpbmUgZmlsZWNoaw0KICAgIC0JJChRKXNldCAtZTsgICAgICAgICAg
ICAgXA0KICAgIC0JbWtkaXIgLXAgJChkaXIgJEApOyAgICAgICAgIFwNCiAgICAtCXsgJChmaWxl
Y2hrXyQoMSkpOyB9ID4gJEAudG1wOyAgICAgIFwNCiAgICAtCWlmIFsgLXIgJEAgXSAmJiBjbXAg
LXMgJEAgJEAudG1wOyB0aGVuICBcDQogICAgLQkgICAgcm0gLWYgJEAudG1wOyAgICAgICAgICAg
XA0KICAgIC0JZWxzZSAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0JICAgICQoa2VjaG8pICcg
IFVQRCAgICAgJEAnOyAgICBcDQogICAgLQkgICAgbXYgLWYgJEAudG1wICRAOyAgICAgICAgXA0K
ICAgIC0JZmkNCiAgICAtZW5kZWYNCiAgICAtDQogICAgLSMgRXhlY3V0ZSBjb21tYW5kIGlmIGNv
bW1hbmQgaGFzIGNoYW5nZWQgb3IgcHJlcmVxdWlzaXRlKHMpIGFyZSB1cGRhdGVkLg0KICAgIC1p
Zl9jaGFuZ2VkID0gJChpZiAkKHN0cmlwICQoYW55LXByZXJlcSkgJChhcmctY2hlY2spKSwJCVwN
CiAgICAtCSQoY21kKTtcDQogICAgLQlwcmludGYgJyVzXG4nICdjbWRfJEAgOj0gJChtYWtlLWNt
ZCknID4gJChkb3QtdGFyZ2V0KS5jbWQsIEA6KQ0KICAgIC0NCiAgICAtIyBMRVgNCiAgICAtIyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0NCiAgICAtcXVpZXRfY21kX2ZsZXggPSBMRVggJEANCiAgICAtY21k
X2ZsZXggPSAkKExFWCkgLW8kQCAtTCAkPA0KICAgIC0NCiAgICAtJChvYmopLyUubGV4LmM6ICQo
c3JjKS8lLmwgRk9SQ0UNCiAgICAtCSQoY2FsbCBpZl9jaGFuZ2VkLGZsZXgpDQogICAgLQ0KICAg
IC0jIFlBQ0MNCiAgICAtIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAtcXVpZXRfY21kX2Jpc29u
ID0gWUFDQyAgICAkQA0KICAgIC1jbWRfYmlzb24gPSAkKFlBQ0MpIC1vJEAgLXQgLWwgJDwNCiAg
ICAtDQogICAgLSQob2JqKS8lLnRhYi5jOiAkKHNyYykvJS55IEZPUkNFDQogICAgLQkkKGNhbGwg
aWZfY2hhbmdlZCxiaXNvbikNCiAgICAtDQogICAgLXF1aWV0X2NtZF9iaXNvbl9oID0gWUFDQyAg
ICAkQA0KICAgIC1jbWRfYmlzb25faCA9ICQoWUFDQykgLW8vZGV2L251bGwgLS1kZWZpbmVzPSRA
IC10IC1sICQ8DQogICAgLQ0KICAgIC0kKG9iaikvJS50YWIuaDogJChzcmMpLyUueSBGT1JDRQ0K
ICAgIC0JJChjYWxsIGlmX2NoYW5nZWQsYmlzb25faCkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9SRUFETUUudW5pa3JhZnQgYi9zdXBwb3J0L2tjb25maWcubmV3L1JFQURN
RS51bmlrcmFmdA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGRlMzdm
OWYuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L1JFQURNRS51bmlrcmFm
dA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwyMSArMCwwIEBADQogICAgLVRoaXMgaXMg
YSBjb3B5IG9mIHRoZSBrY29uZmlnIGNvZGUgaW4gdGhlIGtlcm5lbCAoY3VycmVudGx5IHY1LjIp
IHR3ZWFrZWQNCiAgICAtdG8gc3VpdCBVbmlrcmFmdC4NCiAgICAtDQogICAgLVRvIHVwZGF0ZSAo
ZnJvbSBsaW51eCk6DQogICAgLQljcCAtciAvdXNyL3NyYy9saW51eC9zY3JpcHRzL2tjb25maWcg
c3VwcG9ydC9rY29uZmlnLm5ldw0KICAgIC0JY2Qgc3VwcG9ydC9rY29uZmlnLm5ldw0KICAgIC0J
Y3AgLWEgLi4va2NvbmZpZy9wYXRjaGVzIC4uL2tjb25maWcvUkVBRE1FLnVuaWtyYWZ0IC4uL2tj
b25maWcvLmdpdGlnbm9yZSAuDQogICAgLQlxdWlsdCBwdXNoIC1hDQogICAgLQkjIEZpeCBhbnkg
Y29uZmxpY3QNCiAgICAtCWNkIC4uDQogICAgLQlybSAtcmYga2NvbmZpZw0KICAgIC0JbXYga2Nv
bmZpZy5uZXcga2NvbmZpZw0KICAgIC0NCiAgICAtVGhlbiB2ZXJpZnkgdGhlIHRvcGxldmVsIHRh
cmdldHMgd29yazoNCiAgICAtCWNvbmZpZw0KICAgIC0JZGVmY29uZmlnDQogICAgLQltZW51Y29u
ZmlnDQogICAgLQl4Y29uZmlnDQogICAgLQlnY29uZmlnDQogICAgLQlvbGRjb25maWcNCiAgICAt
CXFjb25maWcNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mLmMgYi9z
dXBwb3J0L2tjb25maWcubmV3L2NvbmYuYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0K
ICAgIGluZGV4IGVmMzY3OGMuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3
L2NvbmYuYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw3MDIgKzAsMCBAQA0KICAgIC0v
LyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0vKg0KICAgIC0gKiBDb3B5
cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAg
LSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgLSNpbmNsdWRlIDxsaW1p
dHMuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgLSNpbmNsdWRlIDxzdGRsaWIuaD4N
CiAgICAtI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSA8dGltZS5oPg0KICAgIC0j
aW5jbHVkZSA8dW5pc3RkLmg+DQogICAgLSNpbmNsdWRlIDxnZXRvcHQuaD4NCiAgICAtI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+DQogICAgLSNpbmNsdWRlIDxzeXMvdGltZS5oPg0KICAgIC0jaW5jbHVk
ZSA8ZXJybm8uaD4NCiAgICAtDQogICAgLSNpbmNsdWRlICJsa2MuaCINCiAgICAtDQogICAgLXN0
YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC1zdGF0aWMgdm9pZCBjaGVj
a19jb25mKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtDQogICAgLWVudW0gaW5wdXRfbW9kZSB7
DQogICAgLQlvbGRhc2tjb25maWcsDQogICAgLQlzeW5jY29uZmlnLA0KICAgIC0Jb2xkY29uZmln
LA0KICAgIC0JYWxsbm9jb25maWcsDQogICAgLQlhbGx5ZXNjb25maWcsDQogICAgLQlhbGxtb2Rj
b25maWcsDQogICAgLQlhbGxkZWZjb25maWcsDQogICAgLQlyYW5kY29uZmlnLA0KICAgIC0JZGVm
Y29uZmlnLA0KICAgIC0Jc2F2ZWRlZmNvbmZpZywNCiAgICAtCWxpc3RuZXdjb25maWcsDQogICAg
LQlvbGRkZWZjb25maWcsDQogICAgLX07DQogICAgLXN0YXRpYyBlbnVtIGlucHV0X21vZGUgaW5w
dXRfbW9kZSA9IG9sZGFza2NvbmZpZzsNCiAgICAtDQogICAgLXN0YXRpYyBpbnQgaW5kZW50ID0g
MTsNCiAgICAtc3RhdGljIGludCB0dHlfc3RkaW87DQogICAgLXN0YXRpYyBpbnQgc3luY19rY29u
ZmlnOw0KICAgIC1zdGF0aWMgaW50IGNvbmZfY250Ow0KICAgIC1zdGF0aWMgY2hhciBsaW5lW1BB
VEhfTUFYXTsNCiAgICAtc3RhdGljIHN0cnVjdCBtZW51ICpyb290RW50cnk7DQogICAgLQ0KICAg
IC1zdGF0aWMgdm9pZCBwcmludF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAg
LQlzdHJ1Y3QgZ3N0ciBoZWxwID0gc3RyX25ldygpOw0KICAgIC0NCiAgICAtCW1lbnVfZ2V0X2V4
dF9oZWxwKG1lbnUsICZoZWxwKTsNCiAgICAtDQogICAgLQlwcmludGYoIlxuJXNcbiIsIHN0cl9n
ZXQoJmhlbHApKTsNCiAgICAtCXN0cl9mcmVlKCZoZWxwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
c3RhdGljIHZvaWQgc3RyaXAoY2hhciAqc3RyKQ0KICAgIC17DQogICAgLQljaGFyICpwID0gc3Ry
Ow0KICAgIC0JaW50IGw7DQogICAgLQ0KICAgIC0Jd2hpbGUgKChpc3NwYWNlKCpwKSkpDQogICAg
LQkJcCsrOw0KICAgIC0JbCA9IHN0cmxlbihwKTsNCiAgICAtCWlmIChwICE9IHN0cikNCiAgICAt
CQltZW1tb3ZlKHN0ciwgcCwgbCArIDEpOw0KICAgIC0JaWYgKCFsKQ0KICAgIC0JCXJldHVybjsN
CiAgICAtCXAgPSBzdHIgKyBsIC0gMTsNCiAgICAtCXdoaWxlICgoaXNzcGFjZSgqcCkpKQ0KICAg
IC0JCSpwLS0gPSAwOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBIZWxwZXIgZnVuY3Rpb24gdG8g
ZmFjaWxpdGF0ZSBmZ2V0cygpIGJ5IEplYW4gU2FjcmVuLiAqLw0KICAgIC1zdGF0aWMgdm9pZCB4
ZmdldHMoY2hhciAqc3RyLCBpbnQgc2l6ZSwgRklMRSAqaW4pDQogICAgLXsNCiAgICAtCWlmICgh
ZmdldHMoc3RyLCBzaXplLCBpbikpDQogICAgLQkJZnByaW50ZihzdGRlcnIsICJcbkVycm9yIGlu
IHJlYWRpbmcgb3IgZW5kIG9mIGZpbGUuXG4iKTsNCiAgICAtDQogICAgLQlpZiAoIXR0eV9zdGRp
bykNCiAgICAtCQlwcmludGYoIiVzIiwgc3RyKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGlj
IGludCBjb25mX2Fza3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqZGVmKQ0K
ICAgIC17DQogICAgLQllbnVtIHN5bWJvbF90eXBlIHR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsN
CiAgICAtDQogICAgLQlpZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkNCiAgICAtCQlwcmludGYoIihO
RVcpICIpOw0KICAgIC0NCiAgICAtCWxpbmVbMF0gPSAnXG4nOw0KICAgIC0JbGluZVsxXSA9IDA7
DQogICAgLQ0KICAgIC0JaWYgKCFzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICAtCQlwcmlu
dGYoIiVzXG4iLCBkZWYpOw0KICAgIC0JCWxpbmVbMF0gPSAnXG4nOw0KICAgIC0JCWxpbmVbMV0g
PSAwOw0KICAgIC0JCXJldHVybiAwOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXN3aXRjaCAoaW5w
dXRfbW9kZSkgew0KICAgIC0JY2FzZSBvbGRjb25maWc6DQogICAgLQljYXNlIHN5bmNjb25maWc6
DQogICAgLQkJaWYgKHN5bV9oYXNfdmFsdWUoc3ltKSkgew0KICAgIC0JCQlwcmludGYoIiVzXG4i
LCBkZWYpOw0KICAgIC0JCQlyZXR1cm4gMDsNCiAgICAtCQl9DQogICAgLQkJLyogZmFsbCB0aHJv
dWdoICovDQogICAgLQljYXNlIG9sZGFza2NvbmZpZzoNCiAgICAtCQlmZmx1c2goc3Rkb3V0KTsN
CiAgICAtCQl4ZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBzdGRpbik7DQogICAgLQkJcmV0dXJu
IDE7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0NCiAgICAt
CXN3aXRjaCAodHlwZSkgew0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCWNhc2UgU19IRVg6DQog
ICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCXByaW50ZigiJXNcbiIsIGRlZik7DQogICAgLQkJ
cmV0dXJuIDE7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAgICAtCXByaW50
ZigiJXMiLCBsaW5lKTsNCiAgICAtCXJldHVybiAxOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0
aWMgaW50IGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQlzdHJ1
Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgLQljb25zdCBjaGFyICpkZWY7DQogICAg
LQ0KICAgIC0Jd2hpbGUgKDEpIHsNCiAgICAtCQlwcmludGYoIiUqcyVzICIsIGluZGVudCAtIDEs
ICIiLCBtZW51LT5wcm9tcHQtPnRleHQpOw0KICAgIC0JCXByaW50ZigiKCVzKSAiLCBzeW0tPm5h
bWUpOw0KICAgIC0JCWRlZiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7DQogICAgLQkJaWYg
KHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpDQogICAgLQkJCXByaW50ZigiWyVzXSAiLCBkZWYp
Ow0KICAgIC0JCWlmICghY29uZl9hc2t2YWx1ZShzeW0sIGRlZikpDQogICAgLQkJCXJldHVybiAw
Ow0KICAgIC0JCXN3aXRjaCAobGluZVswXSkgew0KICAgIC0JCWNhc2UgJ1xuJzoNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJY2FzZSAnPyc6DQogICAgLQkJCS8qIHByaW50IGhlbHAgKi8NCiAgICAt
CQkJaWYgKGxpbmVbMV0gPT0gJ1xuJykgew0KICAgIC0JCQkJcHJpbnRfaGVscChtZW51KTsNCiAg
ICAtCQkJCWRlZiA9IE5VTEw7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCQkv
KiBmYWxsIHRocm91Z2ggKi8NCiAgICAtCQlkZWZhdWx0Og0KICAgIC0JCQlsaW5lW3N0cmxlbihs
aW5lKS0xXSA9IDA7DQogICAgLQkJCWRlZiA9IGxpbmU7DQogICAgLQkJfQ0KICAgIC0JCWlmIChk
ZWYgJiYgc3ltX3NldF9zdHJpbmdfdmFsdWUoc3ltLCBkZWYpKQ0KICAgIC0JCQlyZXR1cm4gMDsN
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGludCBjb25mX3N5bShzdHJ1Y3Qg
bWVudSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+c3lt
Ow0KICAgIC0JdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7DQogICAgLQ0KICAgIC0Jd2hpbGUgKDEp
IHsNCiAgICAtCQlwcmludGYoIiUqcyVzICIsIGluZGVudCAtIDEsICIiLCBtZW51LT5wcm9tcHQt
PnRleHQpOw0KICAgIC0JCWlmIChzeW0tPm5hbWUpDQogICAgLQkJCXByaW50ZigiKCVzKSAiLCBz
eW0tPm5hbWUpOw0KICAgIC0JCXB1dGNoYXIoJ1snKTsNCiAgICAtCQlvbGR2YWwgPSBzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQkJc3dpdGNoIChvbGR2YWwpIHsNCiAgICAtCQlj
YXNlIG5vOg0KICAgIC0JCQlwdXRjaGFyKCdOJyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgbW9kOg0KICAgIC0JCQlwdXRjaGFyKCdNJyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgeWVzOg0KICAgIC0JCQlwdXRjaGFyKCdZJyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0N
CiAgICAtCQlpZiAob2xkdmFsICE9IG5vICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3lt
LCBubykpDQogICAgLQkJCXByaW50ZigiL24iKTsNCiAgICAtCQlpZiAob2xkdmFsICE9IG1vZCAm
JiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbW9kKSkNCiAgICAtCQkJcHJpbnRmKCIv
bSIpOw0KICAgIC0JCWlmIChvbGR2YWwgIT0geWVzICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFu
Z2Uoc3ltLCB5ZXMpKQ0KICAgIC0JCQlwcmludGYoIi95Iik7DQogICAgLQkJcHJpbnRmKCIvP10g
Iik7DQogICAgLQkJaWYgKCFjb25mX2Fza3ZhbHVlKHN5bSwgc3ltX2dldF9zdHJpbmdfdmFsdWUo
c3ltKSkpDQogICAgLQkJCXJldHVybiAwOw0KICAgIC0JCXN0cmlwKGxpbmUpOw0KICAgIC0NCiAg
ICAtCQlzd2l0Y2ggKGxpbmVbMF0pIHsNCiAgICAtCQljYXNlICduJzoNCiAgICAtCQljYXNlICdO
JzoNCiAgICAtCQkJbmV3dmFsID0gbm87DQogICAgLQkJCWlmICghbGluZVsxXSB8fCAhc3RyY21w
KCZsaW5lWzFdLCAibyIpKQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNvbnRpbnVlOw0KICAg
IC0JCWNhc2UgJ20nOg0KICAgIC0JCWNhc2UgJ00nOg0KICAgIC0JCQluZXd2YWwgPSBtb2Q7DQog
ICAgLQkJCWlmICghbGluZVsxXSkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljb250aW51ZTsN
CiAgICAtCQljYXNlICd5JzoNCiAgICAtCQljYXNlICdZJzoNCiAgICAtCQkJbmV3dmFsID0geWVz
Ow0KICAgIC0JCQlpZiAoIWxpbmVbMV0gfHwgIXN0cmNtcCgmbGluZVsxXSwgImVzIikpDQogICAg
LQkJCQlicmVhazsNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJY2FzZSAwOg0KICAgIC0JCQlu
ZXd2YWwgPSBvbGR2YWw7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgJz8nOg0KICAgIC0J
CQlnb3RvIGhlbHA7DQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJ
fQ0KICAgIC0JCWlmIChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbmV3dmFsKSkNCiAgICAt
CQkJcmV0dXJuIDA7DQogICAgLWhlbHA6DQogICAgLQkJcHJpbnRfaGVscChtZW51KTsNCiAgICAt
CX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGludCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVu
dSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltLCAqZGVmX3N5bTsNCiAg
ICAtCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtCWJvb2wgaXNfbmV3Ow0KICAgIC0NCiAgICAt
CXN5bSA9IG1lbnUtPnN5bTsNCiAgICAtCWlzX25ldyA9ICFzeW1faGFzX3ZhbHVlKHN5bSk7DQog
ICAgLQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pKSB7DQogICAgLQkJY29uZl9zeW0obWVudSk7
DQogICAgLQkJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICAtCQlzd2l0Y2ggKHN5bV9nZXRfdHJp
c3RhdGVfdmFsdWUoc3ltKSkgew0KICAgIC0JCWNhc2Ugbm86DQogICAgLQkJCXJldHVybiAxOw0K
ICAgIC0JCWNhc2UgbW9kOg0KICAgIC0JCQlyZXR1cm4gMDsNCiAgICAtCQljYXNlIHllczoNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JfSBlbHNlIHsNCiAgICAtCQlzd2l0Y2ggKHN5
bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSkgew0KICAgIC0JCWNhc2Ugbm86DQogICAgLQkJCXJl
dHVybiAxOw0KICAgIC0JCWNhc2UgbW9kOg0KICAgIC0JCQlwcmludGYoIiUqcyVzXG4iLCBpbmRl
bnQgLSAxLCAiIiwgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsNCiAgICAtCQkJcmV0dXJuIDA7DQog
ICAgLQkJY2FzZSB5ZXM6DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAt
DQogICAgLQl3aGlsZSAoMSkgew0KICAgIC0JCWludCBjbnQsIGRlZjsNCiAgICAtDQogICAgLQkJ
cHJpbnRmKCIlKnMlc1xuIiwgaW5kZW50IC0gMSwgIiIsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7
DQogICAgLQkJZGVmX3N5bSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN5bSk7DQogICAgLQkJY250
ID0gZGVmID0gMDsNCiAgICAtCQlsaW5lWzBdID0gMDsNCiAgICAtCQlmb3IgKGNoaWxkID0gbWVu
dS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICAtCQkJaWYgKCFtZW51
X2lzX3Zpc2libGUoY2hpbGQpKQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCWlmICghY2hp
bGQtPnN5bSkgew0KICAgIC0JCQkJcHJpbnRmKCIlKmMgJXNcbiIsIGluZGVudCwgJyonLCBtZW51
X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQl9DQogICAg
LQkJCWNudCsrOw0KICAgIC0JCQlpZiAoY2hpbGQtPnN5bSA9PSBkZWZfc3ltKSB7DQogICAgLQkJ
CQlkZWYgPSBjbnQ7DQogICAgLQkJCQlwcmludGYoIiUqYyIsIGluZGVudCwgJz4nKTsNCiAgICAt
CQkJfSBlbHNlDQogICAgLQkJCQlwcmludGYoIiUqYyIsIGluZGVudCwgJyAnKTsNCiAgICAtCQkJ
cHJpbnRmKCIgJWQuICVzIiwgY250LCBtZW51X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAgICAtCQkJ
aWYgKGNoaWxkLT5zeW0tPm5hbWUpDQogICAgLQkJCQlwcmludGYoIiAoJXMpIiwgY2hpbGQtPnN5
bS0+bmFtZSk7DQogICAgLQkJCWlmICghc3ltX2hhc192YWx1ZShjaGlsZC0+c3ltKSkNCiAgICAt
CQkJCXByaW50ZigiIChORVcpIik7DQogICAgLQkJCXByaW50ZigiXG4iKTsNCiAgICAtCQl9DQog
ICAgLQkJcHJpbnRmKCIlKnNjaG9pY2UiLCBpbmRlbnQgLSAxLCAiIik7DQogICAgLQkJaWYgKGNu
dCA9PSAxKSB7DQogICAgLQkJCXByaW50ZigiWzFdOiAxXG4iKTsNCiAgICAtCQkJZ290byBjb25m
X2NoaWxkczsNCiAgICAtCQl9DQogICAgLQkJcHJpbnRmKCJbMS0lZD9dOiAiLCBjbnQpOw0KICAg
IC0JCXN3aXRjaCAoaW5wdXRfbW9kZSkgew0KICAgIC0JCWNhc2Ugb2xkY29uZmlnOg0KICAgIC0J
CWNhc2Ugc3luY2NvbmZpZzoNCiAgICAtCQkJaWYgKCFpc19uZXcpIHsNCiAgICAtCQkJCWNudCA9
IGRlZjsNCiAgICAtCQkJCXByaW50ZigiJWRcbiIsIGNudCk7DQogICAgLQkJCQlicmVhazsNCiAg
ICAtCQkJfQ0KICAgIC0JCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICAtCQljYXNlIG9sZGFza2Nv
bmZpZzoNCiAgICAtCQkJZmZsdXNoKHN0ZG91dCk7DQogICAgLQkJCXhmZ2V0cyhsaW5lLCBzaXpl
b2YobGluZSksIHN0ZGluKTsNCiAgICAtCQkJc3RyaXAobGluZSk7DQogICAgLQkJCWlmIChsaW5l
WzBdID09ICc/Jykgew0KICAgIC0JCQkJcHJpbnRfaGVscChtZW51KTsNCiAgICAtCQkJCWNvbnRp
bnVlOw0KICAgIC0JCQl9DQogICAgLQkJCWlmICghbGluZVswXSkNCiAgICAtCQkJCWNudCA9IGRl
ZjsNCiAgICAtCQkJZWxzZSBpZiAoaXNkaWdpdChsaW5lWzBdKSkNCiAgICAtCQkJCWNudCA9IGF0
b2kobGluZSk7DQogICAgLQkJCWVsc2UNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlicmVh
azsNCiAgICAtCQlkZWZhdWx0Og0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQ0KICAg
IC0JY29uZl9jaGlsZHM6DQogICAgLQkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgLQkJCWlmICghY2hpbGQtPnN5bSB8fCAhbWVudV9p
c192aXNpYmxlKGNoaWxkKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlpZiAoIS0tY250
KQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWlmICghY2hpbGQpDQogICAgLQkJ
CWNvbnRpbnVlOw0KICAgIC0JCWlmIChsaW5lWzBdICYmIGxpbmVbc3RybGVuKGxpbmUpIC0gMV0g
PT0gJz8nKSB7DQogICAgLQkJCXByaW50X2hlbHAoY2hpbGQpOw0KICAgIC0JCQljb250aW51ZTsN
CiAgICAtCQl9DQogICAgLQkJc3ltX3NldF9jaG9pY2VfdmFsdWUoc3ltLCBjaGlsZC0+c3ltKTsN
CiAgICAtCQlmb3IgKGNoaWxkID0gY2hpbGQtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0KSB7DQogICAgLQkJCWluZGVudCArPSAyOw0KICAgIC0JCQljb25mKGNoaWxkKTsNCiAgICAt
CQkJaW5kZW50IC09IDI7DQogICAgLQkJfQ0KICAgIC0JCXJldHVybiAxOw0KICAgIC0JfQ0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KQ0KICAg
IC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnBy
b3A7DQogICAgLQlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgLQ0KICAgIC0JaWYgKCFtZW51X2lz
X3Zpc2libGUobWVudSkpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCXN5bSA9IG1lbnUt
PnN5bTsNCiAgICAtCXByb3AgPSBtZW51LT5wcm9tcHQ7DQogICAgLQlpZiAocHJvcCkgew0KICAg
IC0JCWNvbnN0IGNoYXIgKnByb21wdDsNCiAgICAtDQogICAgLQkJc3dpdGNoIChwcm9wLT50eXBl
KSB7DQogICAgLQkJY2FzZSBQX01FTlU6DQogICAgLQkJCS8qDQogICAgLQkJCSAqIEV4Y2VwdCBp
biBvbGRhc2tjb25maWcgbW9kZSwgd2Ugc2hvdyBvbmx5IG1lbnVzIHRoYXQNCiAgICAtCQkJICog
Y29udGFpbiBuZXcgc3ltYm9scy4NCiAgICAtCQkJICovDQogICAgLQkJCWlmIChpbnB1dF9tb2Rl
ICE9IG9sZGFza2NvbmZpZyAmJiByb290RW50cnkgIT0gbWVudSkgew0KICAgIC0JCQkJY2hlY2tf
Y29uZihtZW51KTsNCiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJfQ0KICAgIC0JCQkvKiBmYWxs
IHRocm91Z2ggKi8NCiAgICAtCQljYXNlIFBfQ09NTUVOVDoNCiAgICAtCQkJcHJvbXB0ID0gbWVu
dV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgIC0JCQlpZiAocHJvbXB0KQ0KICAgIC0JCQkJcHJpbnRm
KCIlKmNcbiUqYyAlc1xuJSpjXG4iLA0KICAgIC0JCQkJCWluZGVudCwgJyonLA0KICAgIC0JCQkJ
CWluZGVudCwgJyonLCBwcm9tcHQsDQogICAgLQkJCQkJaW5kZW50LCAnKicpOw0KICAgIC0JCWRl
ZmF1bHQ6DQogICAgLQkJCTsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKCFz
eW0pDQogICAgLQkJZ290byBjb25mX2NoaWxkczsNCiAgICAtDQogICAgLQlpZiAoc3ltX2lzX2No
b2ljZShzeW0pKSB7DQogICAgLQkJY29uZl9jaG9pY2UobWVudSk7DQogICAgLQkJaWYgKHN5bS0+
Y3Vyci50cmkgIT0gbW9kKQ0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJZ290byBjb25mX2NoaWxk
czsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0JY2Fz
ZSBTX0lOVDoNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0J
CWNvbmZfc3RyaW5nKG1lbnUpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAt
CQljb25mX3N5bShtZW51KTsNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLWNv
bmZfY2hpbGRzOg0KICAgIC0JaWYgKHN5bSkNCiAgICAtCQlpbmRlbnQgKz0gMjsNCiAgICAtCWZv
ciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkNCiAgICAt
CQljb25mKGNoaWxkKTsNCiAgICAtCWlmIChzeW0pDQogICAgLQkJaW5kZW50IC09IDI7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGNoZWNrX2NvbmYoc3RydWN0IG1lbnUgKm1lbnUp
DQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCXN0cnVjdCBtZW51ICpj
aGlsZDsNCiAgICAtDQogICAgLQlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51KSkNCiAgICAtCQly
ZXR1cm47DQogICAgLQ0KICAgIC0Jc3ltID0gbWVudS0+c3ltOw0KICAgIC0JaWYgKHN5bSAmJiAh
c3ltX2hhc192YWx1ZShzeW0pKSB7DQogICAgLQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSB8
fA0KICAgIC0JCSAgICAoc3ltX2lzX2Nob2ljZShzeW0pICYmIHN5bV9nZXRfdHJpc3RhdGVfdmFs
dWUoc3ltKSA9PSB5ZXMpKSB7DQogICAgLQkJCWlmIChpbnB1dF9tb2RlID09IGxpc3RuZXdjb25m
aWcpIHsNCiAgICAtCQkJCWlmIChzeW0tPm5hbWUpIHsNCiAgICAtCQkJCQljb25zdCBjaGFyICpz
dHI7DQogICAgLQ0KICAgIC0JCQkJCWlmIChzeW0tPnR5cGUgPT0gU19TVFJJTkcpIHsNCiAgICAt
CQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsNCiAgICAtCQkJCQkJc3RyID0g
c3ltX2VzY2FwZV9zdHJpbmdfdmFsdWUoc3RyKTsNCiAgICAtCQkJCQkJcHJpbnRmKCIlcyVzPSVz
XG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIHN0cik7DQogICAgLQkJCQkJCWZyZWUoKHZvaWQgKilz
dHIpOw0KICAgIC0JCQkJCX0gZWxzZSB7DQogICAgLQkJCQkJCXN0ciA9IHN5bV9nZXRfc3RyaW5n
X3ZhbHVlKHN5bSk7DQogICAgLQkJCQkJCXByaW50ZigiJXMlcz0lc1xuIiwgQ09ORklHXywgc3lt
LT5uYW1lLCBzdHIpOw0KICAgIC0JCQkJCX0NCiAgICAtCQkJCX0NCiAgICAtCQkJfSBlbHNlIHsN
CiAgICAtCQkJCWlmICghY29uZl9jbnQrKykNCiAgICAtCQkJCQlwcmludGYoIipcbiogUmVzdGFy
dCBjb25maWcuLi5cbipcbiIpOw0KICAgIC0JCQkJcm9vdEVudHJ5ID0gbWVudV9nZXRfcGFyZW50
X21lbnUobWVudSk7DQogICAgLQkJCQljb25mKHJvb3RFbnRyeSk7DQogICAgLQkJCX0NCiAgICAt
CQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0KQ0KICAgIC0JCWNoZWNrX2NvbmYoY2hpbGQpOw0KICAgIC19
DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IG9wdGlvbiBsb25nX29wdHNbXSA9IHsNCiAgICAt
CXsib2xkYXNrY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGFza2NvbmZp
Z30sDQogICAgLQl7Im9sZGNvbmZpZyIsICAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBv
bGRjb25maWd9LA0KICAgIC0JeyJzeW5jY29uZmlnIiwgICAgICBub19hcmd1bWVudCwgICAgICAg
TlVMTCwgc3luY2NvbmZpZ30sDQogICAgLQl7ImRlZmNvbmZpZyIsICAgICAgIG9wdGlvbmFsX2Fy
Z3VtZW50LCBOVUxMLCBkZWZjb25maWd9LA0KICAgIC0JeyJzYXZlZGVmY29uZmlnIiwgICByZXF1
aXJlZF9hcmd1bWVudCwgTlVMTCwgc2F2ZWRlZmNvbmZpZ30sDQogICAgLQl7ImFsbG5vY29uZmln
IiwgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxub2NvbmZpZ30sDQogICAgLQl7ImFs
bHllc2NvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGx5ZXNjb25maWd9LA0K
ICAgIC0JeyJhbGxtb2Rjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxsbW9k
Y29uZmlnfSwNCiAgICAtCXsiYWxsZGVmY29uZmlnIiwgICAgbm9fYXJndW1lbnQsICAgICAgIE5V
TEwsIGFsbGRlZmNvbmZpZ30sDQogICAgLQl7InJhbmRjb25maWciLCAgICAgIG5vX2FyZ3VtZW50
LCAgICAgICBOVUxMLCByYW5kY29uZmlnfSwNCiAgICAtCXsibGlzdG5ld2NvbmZpZyIsICAgbm9f
YXJndW1lbnQsICAgICAgIE5VTEwsIGxpc3RuZXdjb25maWd9LA0KICAgIC0JeyJvbGRkZWZjb25m
aWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkZGVmY29uZmlnfSwNCiAgICAtCXtO
VUxMLCAwLCBOVUxMLCAwfQ0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl91
c2FnZShjb25zdCBjaGFyICpwcm9nbmFtZSkNCiAgICAtew0KICAgIC0NCiAgICAtCXByaW50Zigi
VXNhZ2U6ICVzIFstc10gW29wdGlvbl0gPGtjb25maWctZmlsZT5cbiIsIHByb2duYW1lKTsNCiAg
ICAtCXByaW50ZigiW29wdGlvbl0gaXMgX29uZV8gb2YgdGhlIGZvbGxvd2luZzpcbiIpOw0KICAg
IC0JcHJpbnRmKCIgIC0tbGlzdG5ld2NvbmZpZyAgICAgICAgIExpc3QgbmV3IG9wdGlvbnNcbiIp
Ow0KICAgIC0JcHJpbnRmKCIgIC0tb2xkYXNrY29uZmlnICAgICAgICAgIFN0YXJ0IGEgbmV3IGNv
bmZpZ3VyYXRpb24gdXNpbmcgYSBsaW5lLW9yaWVudGVkIHByb2dyYW1cbiIpOw0KICAgIC0JcHJp
bnRmKCIgIC0tb2xkY29uZmlnICAgICAgICAgICAgIFVwZGF0ZSBhIGNvbmZpZ3VyYXRpb24gdXNp
bmcgYSBwcm92aWRlZCAuY29uZmlnIGFzIGJhc2VcbiIpOw0KICAgIC0JcHJpbnRmKCIgIC0tc3lu
Y2NvbmZpZyAgICAgICAgICAgIFNpbWlsYXIgdG8gb2xkY29uZmlnIGJ1dCBnZW5lcmF0ZXMgY29u
ZmlndXJhdGlvbiBpblxuIg0KICAgIC0JICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAg
IGluY2x1ZGUve2dlbmVyYXRlZC8sY29uZmlnL31cbiIpOw0KICAgIC0JcHJpbnRmKCIgIC0tb2xk
ZGVmY29uZmlnICAgICAgICAgIFNhbWUgYXMgb2xkY29uZmlnIGJ1dCBzZXRzIG5ldyBzeW1ib2xz
IHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVcbiIpOw0KICAgIC0JcHJpbnRmKCIgIC0tZGVmY29uZmln
IDxmaWxlPiAgICAgIE5ldyBjb25maWcgd2l0aCBkZWZhdWx0IGRlZmluZWQgaW4gPGZpbGU+XG4i
KTsNCiAgICAtCXByaW50ZigiICAtLXNhdmVkZWZjb25maWcgPGZpbGU+ICBTYXZlIHRoZSBtaW5p
bWFsIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0byA8ZmlsZT5cbiIpOw0KICAgIC0JcHJpbnRmKCIg
IC0tYWxsbm9jb25maWcgICAgICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJl
IGFuc3dlcmVkIHdpdGggbm9cbiIpOw0KICAgIC0JcHJpbnRmKCIgIC0tYWxseWVzY29uZmlnICAg
ICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggeWVz
XG4iKTsNCiAgICAtCXByaW50ZigiICAtLWFsbG1vZGNvbmZpZyAgICAgICAgICBOZXcgY29uZmln
IHdoZXJlIGFsbCBvcHRpb25zIGFyZSBhbnN3ZXJlZCB3aXRoIG1vZFxuIik7DQogICAgLQlwcmlu
dGYoIiAgLS1hbGxkZWZjb25maWcgICAgICAgICAgTmV3IGNvbmZpZyB3aXRoIGFsbCBzeW1ib2xz
IHNldCB0byBkZWZhdWx0XG4iKTsNCiAgICAtCXByaW50ZigiICAtLXJhbmRjb25maWcgICAgICAg
ICAgICBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dlciB0byBhbGwgb3B0aW9uc1xuIik7DQog
ICAgLX0NCiAgICAtDQogICAgLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQ0KICAgIC17DQog
ICAgLQljb25zdCBjaGFyICpwcm9nbmFtZSA9IGF2WzBdOw0KICAgIC0JaW50IG9wdDsNCiAgICAt
CWNvbnN0IGNoYXIgKm5hbWUsICpkZWZjb25maWdfZmlsZSA9IE5VTEwgLyogZ2NjIHVuaW5pdCAq
LzsNCiAgICAtCWludCBub19jb25mX3dyaXRlID0gMDsNCiAgICAtDQogICAgLQl0dHlfc3RkaW8g
PSBpc2F0dHkoMCkgJiYgaXNhdHR5KDEpOw0KICAgIC0NCiAgICAtCXdoaWxlICgob3B0ID0gZ2V0
b3B0X2xvbmcoYWMsIGF2LCAicyIsIGxvbmdfb3B0cywgTlVMTCkpICE9IC0xKSB7DQogICAgLQkJ
aWYgKG9wdCA9PSAncycpIHsNCiAgICAtCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxM
KTsNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJfQ0KICAgIC0JCWlucHV0X21vZGUgPSAoZW51
bSBpbnB1dF9tb2RlKW9wdDsNCiAgICAtCQlzd2l0Y2ggKG9wdCkgew0KICAgIC0JCWNhc2Ugc3lu
Y2NvbmZpZzoNCiAgICAtCQkJLyoNCiAgICAtCQkJICogc3luY2NvbmZpZyBpcyBpbnZva2VkIGR1
cmluZyB0aGUgYnVpbGQgc3RhZ2UuDQogICAgLQkJCSAqIFN1cHByZXNzIGRpc3RyYWN0aW5nICJj
b25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gLi4uIg0KICAgIC0JCQkgKi8NCiAgICAtCQkJY29uZl9z
ZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsNCiAgICAtCQkJc3luY19rY29uZmlnID0gMTsNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBkZWZjb25maWc6DQogICAgLQkJY2FzZSBzYXZlZGVm
Y29uZmlnOg0KICAgIC0JCQlkZWZjb25maWdfZmlsZSA9IG9wdGFyZzsNCiAgICAtCQkJYnJlYWs7
DQogICAgLQkJY2FzZSByYW5kY29uZmlnOg0KICAgIC0JCXsNCiAgICAtCQkJc3RydWN0IHRpbWV2
YWwgbm93Ow0KICAgIC0JCQl1bnNpZ25lZCBpbnQgc2VlZDsNCiAgICAtCQkJY2hhciAqc2VlZF9l
bnY7DQogICAgLQ0KICAgIC0JCQkvKg0KICAgIC0JCQkgKiBVc2UgbWljcm9zZWNvbmRzIGRlcml2
ZWQgc2VlZCwNCiAgICAtCQkJICogY29tcGVuc2F0ZSBmb3Igc3lzdGVtcyB3aGVyZSBpdCBtYXkg
YmUgemVybw0KICAgIC0JCQkgKi8NCiAgICAtCQkJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOw0K
ICAgIC0JCQlzZWVkID0gKHVuc2lnbmVkIGludCkoKG5vdy50dl9zZWMgKyAxKSAqIChub3cudHZf
dXNlYyArIDEpKTsNCiAgICAtDQogICAgLQkJCXNlZWRfZW52ID0gZ2V0ZW52KCJLQ09ORklHX1NF
RUQiKTsNCiAgICAtCQkJaWYoIHNlZWRfZW52ICYmICpzZWVkX2VudiApIHsNCiAgICAtCQkJCWNo
YXIgKmVuZHA7DQogICAgLQkJCQlpbnQgdG1wID0gKGludClzdHJ0b2woc2VlZF9lbnYsICZlbmRw
LCAwKTsNCiAgICAtCQkJCWlmICgqZW5kcCA9PSAnXDAnKSB7DQogICAgLQkJCQkJc2VlZCA9IHRt
cDsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCQlmcHJpbnRmKCBzdGRlcnIsICJLQ09O
RklHX1NFRUQ9MHglWFxuIiwgc2VlZCApOw0KICAgIC0JCQlzcmFuZChzZWVkKTsNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWNhc2Ugb2xkYXNrY29uZmlnOg0KICAgIC0JCWNhc2Ug
b2xkY29uZmlnOg0KICAgIC0JCWNhc2UgYWxsbm9jb25maWc6DQogICAgLQkJY2FzZSBhbGx5ZXNj
b25maWc6DQogICAgLQkJY2FzZSBhbGxtb2Rjb25maWc6DQogICAgLQkJY2FzZSBhbGxkZWZjb25m
aWc6DQogICAgLQkJY2FzZSBsaXN0bmV3Y29uZmlnOg0KICAgIC0JCWNhc2Ugb2xkZGVmY29uZmln
Og0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICc/JzoNCiAgICAtCQkJY29uZl91c2FnZShw
cm9nbmFtZSk7DQogICAgLQkJCWV4aXQoMSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAg
ICAtCX0NCiAgICAtCWlmIChhYyA9PSBvcHRpbmQpIHsNCiAgICAtCQlmcHJpbnRmKHN0ZGVyciwg
IiVzOiBLY29uZmlnIGZpbGUgbWlzc2luZ1xuIiwgYXZbMF0pOw0KICAgIC0JCWNvbmZfdXNhZ2Uo
cHJvZ25hbWUpOw0KICAgIC0JCWV4aXQoMSk7DQogICAgLQl9DQogICAgLQluYW1lID0gYXZbb3B0
aW5kXTsNCiAgICAtCWNvbmZfcGFyc2UobmFtZSk7DQogICAgLQkvL3pjb25mZHVtcChzdGRvdXQp
Ow0KICAgIC0NCiAgICAtCXN3aXRjaCAoaW5wdXRfbW9kZSkgew0KICAgIC0JY2FzZSBkZWZjb25m
aWc6DQogICAgLQkJaWYgKCFkZWZjb25maWdfZmlsZSkNCiAgICAtCQkJZGVmY29uZmlnX2ZpbGUg
PSBjb25mX2dldF9kZWZhdWx0X2NvbmZuYW1lKCk7DQogICAgLQkJaWYgKGNvbmZfcmVhZChkZWZj
b25maWdfZmlsZSkpIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsDQogICAgLQkJCQkiKioqXG4i
DQogICAgLQkJCQkgICIqKiogQ2FuJ3QgZmluZCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gXCIlc1wi
IVxuIg0KICAgIC0JCQkJICAiKioqXG4iLA0KICAgIC0JCQkJZGVmY29uZmlnX2ZpbGUpOw0KICAg
IC0JCQlleGl0KDEpOw0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2Ugc2F2ZWRl
ZmNvbmZpZzoNCiAgICAtCWNhc2Ugc3luY2NvbmZpZzoNCiAgICAtCWNhc2Ugb2xkYXNrY29uZmln
Og0KICAgIC0JY2FzZSBvbGRjb25maWc6DQogICAgLQljYXNlIGxpc3RuZXdjb25maWc6DQogICAg
LQljYXNlIG9sZGRlZmNvbmZpZzoNCiAgICAtCQljb25mX3JlYWQoTlVMTCk7DQogICAgLQkJYnJl
YWs7DQogICAgLQljYXNlIGFsbG5vY29uZmlnOg0KICAgIC0JY2FzZSBhbGx5ZXNjb25maWc6DQog
ICAgLQljYXNlIGFsbG1vZGNvbmZpZzoNCiAgICAtCWNhc2UgYWxsZGVmY29uZmlnOg0KICAgIC0J
Y2FzZSByYW5kY29uZmlnOg0KICAgIC0JCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfQUxMQ09ORklH
Iik7DQogICAgLQkJaWYgKCFuYW1lKQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQlpZiAoKHN0cmNt
cChuYW1lLCAiIikgIT0gMCkgJiYgKHN0cmNtcChuYW1lLCAiMSIpICE9IDApKSB7DQogICAgLQkJ
CWlmIChjb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpKSB7DQogICAgLQkJCQlmcHJp
bnRmKHN0ZGVyciwNCiAgICAtCQkJCQkiKioqIENhbid0IHJlYWQgc2VlZCBjb25maWd1cmF0aW9u
IFwiJXNcIiFcbiIsDQogICAgLQkJCQkJbmFtZSk7DQogICAgLQkJCQlleGl0KDEpOw0KICAgIC0J
CQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlzd2l0Y2ggKGlucHV0X21vZGUp
IHsNCiAgICAtCQljYXNlIGFsbG5vY29uZmlnOgluYW1lID0gImFsbG5vLmNvbmZpZyI7IGJyZWFr
Ow0KICAgIC0JCWNhc2UgYWxseWVzY29uZmlnOgluYW1lID0gImFsbHllcy5jb25maWciOyBicmVh
azsNCiAgICAtCQljYXNlIGFsbG1vZGNvbmZpZzoJbmFtZSA9ICJhbGxtb2QuY29uZmlnIjsgYnJl
YWs7DQogICAgLQkJY2FzZSBhbGxkZWZjb25maWc6CW5hbWUgPSAiYWxsZGVmLmNvbmZpZyI7IGJy
ZWFrOw0KICAgIC0JCWNhc2UgcmFuZGNvbmZpZzoJbmFtZSA9ICJhbGxyYW5kb20uY29uZmlnIjsg
YnJlYWs7DQogICAgLQkJZGVmYXVsdDogYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWlmIChjb25m
X3JlYWRfc2ltcGxlKG5hbWUsIFNfREVGX1VTRVIpICYmDQogICAgLQkJICAgIGNvbmZfcmVhZF9z
aW1wbGUoImFsbC5jb25maWciLCBTX0RFRl9VU0VSKSkgew0KICAgIC0JCQlmcHJpbnRmKHN0ZGVy
ciwNCiAgICAtCQkJCSIqKiogS0NPTkZJR19BTExDT05GSUcgc2V0LCBidXQgbm8gXCIlc1wiIG9y
IFwiYWxsLmNvbmZpZ1wiIGZpbGUgZm91bmRcbiIsDQogICAgLQkJCQluYW1lKTsNCiAgICAtCQkJ
ZXhpdCgxKTsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0J
CWJyZWFrOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmIChzeW5jX2tjb25maWcpIHsNCiAgICAt
CQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX05PU0lMRU5UVVBEQVRFIik7DQogICAgLQkJaWYgKG5h
bWUgJiYgKm5hbWUpIHsNCiAgICAtCQkJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkgew0KICAgIC0J
CQkJZnByaW50ZihzdGRlcnIsDQogICAgLQkJCQkJIlxuKioqIFRoZSBjb25maWd1cmF0aW9uIHJl
cXVpcmVzIGV4cGxpY2l0IHVwZGF0ZS5cblxuIik7DQogICAgLQkJCQlyZXR1cm4gMTsNCiAgICAt
CQkJfQ0KICAgIC0JCQlub19jb25mX3dyaXRlID0gMTsNCiAgICAtCQl9DQogICAgLQl9DQogICAg
LQ0KICAgIC0Jc3dpdGNoIChpbnB1dF9tb2RlKSB7DQogICAgLQljYXNlIGFsbG5vY29uZmlnOg0K
ICAgIC0JCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfbm8pOw0KICAgIC0JCWJyZWFrOw0K
ICAgIC0JY2FzZSBhbGx5ZXNjb25maWc6DQogICAgLQkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xz
KGRlZl95ZXMpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBhbGxtb2Rjb25maWc6DQogICAg
LQkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9tb2QpOw0KICAgIC0JCWJyZWFrOw0KICAg
IC0JY2FzZSBhbGxkZWZjb25maWc6DQogICAgLQkJY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRl
Zl9kZWZhdWx0KTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgcmFuZGNvbmZpZzoNCiAgICAt
CQkvKiBSZWFsbHkgbm90aGluZyB0byBkbyBpbiB0aGlzIGxvb3AgKi8NCiAgICAtCQl3aGlsZSAo
Y29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGRlZl9yYW5kb20pKSA7DQogICAgLQkJYnJlYWs7DQog
ICAgLQljYXNlIGRlZmNvbmZpZzoNCiAgICAtCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVm
X2RlZmF1bHQpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBzYXZlZGVmY29uZmlnOg0KICAg
IC0JCWJyZWFrOw0KICAgIC0JY2FzZSBvbGRhc2tjb25maWc6DQogICAgLQkJcm9vdEVudHJ5ID0g
JnJvb3RtZW51Ow0KICAgIC0JCWNvbmYoJnJvb3RtZW51KTsNCiAgICAtCQlpbnB1dF9tb2RlID0g
b2xkY29uZmlnOw0KICAgIC0JCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgIC0JY2FzZSBvbGRjb25m
aWc6DQogICAgLQljYXNlIGxpc3RuZXdjb25maWc6DQogICAgLQljYXNlIHN5bmNjb25maWc6DQog
ICAgLQkJLyogVXBkYXRlIHVudGlsIGEgbG9vcCBjYXVzZWQgbm8gbW9yZSBjaGFuZ2VzICovDQog
ICAgLQkJZG8gew0KICAgIC0JCQljb25mX2NudCA9IDA7DQogICAgLQkJCWNoZWNrX2NvbmYoJnJv
b3RtZW51KTsNCiAgICAtCQl9IHdoaWxlIChjb25mX2NudCk7DQogICAgLQkJYnJlYWs7DQogICAg
LQljYXNlIG9sZGRlZmNvbmZpZzoNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJYnJlYWs7DQogICAg
LQl9DQogICAgLQ0KICAgIC0JaWYgKGlucHV0X21vZGUgPT0gc2F2ZWRlZmNvbmZpZykgew0KICAg
IC0JCWlmIChjb25mX3dyaXRlX2RlZmNvbmZpZyhkZWZjb25maWdfZmlsZSkpIHsNCiAgICAtCQkJ
ZnByaW50ZihzdGRlcnIsICJuKioqIEVycm9yIHdoaWxlIHNhdmluZyBkZWZjb25maWcgdG86ICVz
XG5cbiIsDQogICAgLQkJCQlkZWZjb25maWdfZmlsZSk7DQogICAgLQkJCXJldHVybiAxOw0KICAg
IC0JCX0NCiAgICAtCX0gZWxzZSBpZiAoaW5wdXRfbW9kZSAhPSBsaXN0bmV3Y29uZmlnKSB7DQog
ICAgLQkJaWYgKCFub19jb25mX3dyaXRlICYmIGNvbmZfd3JpdGUoTlVMTCkpIHsNCiAgICAtCQkJ
ZnByaW50ZihzdGRlcnIsICJcbioqKiBFcnJvciBkdXJpbmcgd3JpdGluZyBvZiB0aGUgY29uZmln
dXJhdGlvbi5cblxuIik7DQogICAgLQkJCWV4aXQoMSk7DQogICAgLQkJfQ0KICAgIC0NCiAgICAt
CQkvKg0KICAgIC0JCSAqIENyZWF0ZSBhdXRvLmNvbmYgaWYgaXQgZG9lcyBub3QgZXhpc3QuDQog
ICAgLQkJICogVGhpcyBwcmV2ZW50cyBHTlUgTWFrZSA0LjEgb3Igb2xkZXIgZnJvbSBlbWl0dGlu
Zw0KICAgIC0JCSAqICJpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY6IE5vIHN1Y2ggZmlsZSBvciBk
aXJlY3RvcnkiDQogICAgLQkJICogaW4gdGhlIHRvcC1sZXZlbCBNYWtlZmlsZQ0KICAgIC0JCSAq
DQogICAgLQkJICogc3luY2NvbmZpZyBhbHdheXMgY3JlYXRlcyBvciB1cGRhdGVzIGF1dG8uY29u
ZiBiZWNhdXNlIGl0IGlzDQogICAgLQkJICogdXNlZCBkdXJpbmcgdGhlIGJ1aWxkLg0KICAgIC0J
CSAqLw0KICAgIC0JCWlmIChjb25mX3dyaXRlX2F1dG9jb25mKHN5bmNfa2NvbmZpZykgJiYgc3lu
Y19rY29uZmlnKSB7DQogICAgLQkJCWZwcmludGYoc3RkZXJyLA0KICAgIC0JCQkJIlxuKioqIEVy
cm9yIGR1cmluZyBzeW5jIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG4iKTsNCiAgICAtCQkJcmV0
dXJuIDE7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9jb25mZGF0YS5jIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9jb25mZGF0YS5jDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggNjAwNjE1NC4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvY29uZmRh
dGEuYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxMzgwICswLDAgQEANCiAgICAtLy8g
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtLyoNCiAgICAtICogQ29weXJp
Z2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0g
Ki8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KICAgIC0jaW5jbHVkZSA8c3lz
L3N0YXQuaD4NCiAgICAtI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgLSNpbmNsdWRlIDxlcnJuby5o
Pg0KICAgIC0jaW5jbHVkZSA8ZmNudGwuaD4NCiAgICAtI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAg
IC0jaW5jbHVkZSA8c3RkYXJnLmg+DQogICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0jaW5j
bHVkZSA8c3RkbGliLmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAtI2luY2x1ZGUg
PHRpbWUuaD4NCiAgICAtI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUg
ImxrYy5oIg0KICAgIC0NCiAgICAtLyogcmV0dXJuIHRydWUgaWYgJ3BhdGgnIGV4aXN0cywgZmFs
c2Ugb3RoZXJ3aXNlICovDQogICAgLXN0YXRpYyBib29sIGlzX3ByZXNlbnQoY29uc3QgY2hhciAq
cGF0aCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN0YXQgc3Q7DQogICAgLQ0KICAgIC0JcmV0dXJu
ICFzdGF0KHBhdGgsICZzdCk7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHJldHVybiB0cnVlIGlm
ICdwYXRoJyBleGlzdHMgYW5kIGl0IGlzIGEgZGlyZWN0b3J5LCBmYWxzZSBvdGhlcndpc2UgKi8N
CiAgICAtc3RhdGljIGJvb2wgaXNfZGlyKGNvbnN0IGNoYXIgKnBhdGgpDQogICAgLXsNCiAgICAt
CXN0cnVjdCBzdGF0IHN0Ow0KICAgIC0NCiAgICAtCWlmIChzdGF0KHBhdGgsICZzdCkpDQogICAg
LQkJcmV0dXJuIDA7DQogICAgLQ0KICAgIC0JcmV0dXJuIFNfSVNESVIoc3Quc3RfbW9kZSk7DQog
ICAgLX0NCiAgICAtDQogICAgLS8qIHJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiB0d28gZmlsZXMg
YXJlIHRoZSBzYW1lLCBmYWxzZSBvdGhlcndpc2UgKi8NCiAgICAtc3RhdGljIGJvb2wgaXNfc2Ft
ZShjb25zdCBjaGFyICpmaWxlMSwgY29uc3QgY2hhciAqZmlsZTIpDQogICAgLXsNCiAgICAtCWlu
dCBmZDEsIGZkMjsNCiAgICAtCXN0cnVjdCBzdGF0IHN0MSwgc3QyOw0KICAgIC0Jdm9pZCAqbWFw
MSwgKm1hcDI7DQogICAgLQlib29sIHJldCA9IGZhbHNlOw0KICAgIC0NCiAgICAtCWZkMSA9IG9w
ZW4oZmlsZTEsIE9fUkRPTkxZKTsNCiAgICAtCWlmIChmZDEgPCAwKQ0KICAgIC0JCXJldHVybiBy
ZXQ7DQogICAgLQ0KICAgIC0JZmQyID0gb3BlbihmaWxlMiwgT19SRE9OTFkpOw0KICAgIC0JaWYg
KGZkMiA8IDApDQogICAgLQkJZ290byBjbG9zZTE7DQogICAgLQ0KICAgIC0JcmV0ID0gZnN0YXQo
ZmQxLCAmc3QxKTsNCiAgICAtCWlmIChyZXQpDQogICAgLQkJZ290byBjbG9zZTI7DQogICAgLQly
ZXQgPSBmc3RhdChmZDIsICZzdDIpOw0KICAgIC0JaWYgKHJldCkNCiAgICAtCQlnb3RvIGNsb3Nl
MjsNCiAgICAtDQogICAgLQlpZiAoc3QxLnN0X3NpemUgIT0gc3QyLnN0X3NpemUpDQogICAgLQkJ
Z290byBjbG9zZTI7DQogICAgLQ0KICAgIC0JbWFwMSA9IG1tYXAoTlVMTCwgc3QxLnN0X3NpemUs
IFBST1RfUkVBRCwgTUFQX1BSSVZBVEUsIGZkMSwgMCk7DQogICAgLQlpZiAobWFwMSA9PSBNQVBf
RkFJTEVEKQ0KICAgIC0JCWdvdG8gY2xvc2UyOw0KICAgIC0NCiAgICAtCW1hcDIgPSBtbWFwKE5V
TEwsIHN0Mi5zdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZDIsIDApOw0KICAgIC0J
aWYgKG1hcDIgPT0gTUFQX0ZBSUxFRCkNCiAgICAtCQlnb3RvIGNsb3NlMjsNCiAgICAtDQogICAg
LQlpZiAoYmNtcChtYXAxLCBtYXAyLCBzdDEuc3Rfc2l6ZSkpDQogICAgLQkJZ290byBjbG9zZTI7
DQogICAgLQ0KICAgIC0JcmV0ID0gdHJ1ZTsNCiAgICAtY2xvc2UyOg0KICAgIC0JY2xvc2UoZmQy
KTsNCiAgICAtY2xvc2UxOg0KICAgIC0JY2xvc2UoZmQxKTsNCiAgICAtDQogICAgLQlyZXR1cm4g
cmV0Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBDcmVhdGUgdGhlIHBhcmVudCBk
aXJlY3Rvcnkgb2YgdGhlIGdpdmVuIHBhdGguDQogICAgLSAqDQogICAgLSAqIEZvciBleGFtcGxl
LCBpZiAnaW5jbHVkZS9jb25maWcvYXV0by5jb25mJyBpcyBnaXZlbiwgY3JlYXRlICdpbmNsdWRl
L2NvbmZpZycuDQogICAgLSAqLw0KICAgIC1zdGF0aWMgaW50IG1ha2VfcGFyZW50X2Rpcihjb25z
dCBjaGFyICpwYXRoKQ0KICAgIC17DQogICAgLQljaGFyIHRtcFtQQVRIX01BWCArIDFdOw0KICAg
IC0JY2hhciAqcDsNCiAgICAtDQogICAgLQlzdHJuY3B5KHRtcCwgcGF0aCwgc2l6ZW9mKHRtcCkp
Ow0KICAgIC0JdG1wW3NpemVvZih0bXApIC0gMV0gPSAwOw0KICAgIC0NCiAgICAtCS8qIFJlbW92
ZSB0aGUgYmFzZSBuYW1lLiBKdXN0IHJldHVybiBpZiBub3RoaW5nIGlzIGxlZnQgKi8NCiAgICAt
CXAgPSBzdHJyY2hyKHRtcCwgJy8nKTsNCiAgICAtCWlmICghcCkNCiAgICAtCQlyZXR1cm4gMDsN
CiAgICAtCSoocCArIDEpID0gMDsNCiAgICAtDQogICAgLQkvKiBKdXN0IGluIGNhc2UgaXQgaXMg
YW4gYWJzb2x1dGUgcGF0aCAqLw0KICAgIC0JcCA9IHRtcDsNCiAgICAtCXdoaWxlICgqcCA9PSAn
LycpDQogICAgLQkJcCsrOw0KICAgIC0NCiAgICAtCXdoaWxlICgocCA9IHN0cmNocihwLCAnLycp
KSkgew0KICAgIC0JCSpwID0gMDsNCiAgICAtDQogICAgLQkJLyogc2tpcCBpZiB0aGUgZGlyZWN0
b3J5IGV4aXN0cyAqLw0KICAgIC0JCWlmICghaXNfZGlyKHRtcCkgJiYgbWtkaXIodG1wLCAwNzU1
KSkNCiAgICAtCQkJcmV0dXJuIC0xOw0KICAgIC0NCiAgICAtCQkqcCA9ICcvJzsNCiAgICAtCQl3
aGlsZSAoKnAgPT0gJy8nKQ0KICAgIC0JCQlwKys7DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0
dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBjaGFyIGRlcGZpbGVfcGF0aFtQQVRI
X01BWF07DQogICAgLXN0YXRpYyBzaXplX3QgZGVwZmlsZV9wcmVmaXhfbGVuOw0KICAgIC0NCiAg
ICAtLyogdG91Y2ggZGVwZmlsZSBmb3Igc3ltYm9sICduYW1lJyAqLw0KICAgIC1zdGF0aWMgaW50
IGNvbmZfdG91Y2hfZGVwKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgLXsNCiAgICAtCWludCBmZCwg
cmV0Ow0KICAgIC0JY29uc3QgY2hhciAqczsNCiAgICAtCWNoYXIgKmQsIGM7DQogICAgLQ0KICAg
IC0JLyogY2hlY2sgb3ZlcmZsb3c6IHByZWZpeCArIG5hbWUgKyAiLmgiICsgJ1wwJyBtdXN0IGZp
dCBpbiBidWZmZXIuICovDQogICAgLQlpZiAoZGVwZmlsZV9wcmVmaXhfbGVuICsgc3RybGVuKG5h
bWUpICsgMyA+IHNpemVvZihkZXBmaWxlX3BhdGgpKQ0KICAgIC0JCXJldHVybiAtMTsNCiAgICAt
DQogICAgLQlkID0gZGVwZmlsZV9wYXRoICsgZGVwZmlsZV9wcmVmaXhfbGVuOw0KICAgIC0JcyA9
IG5hbWU7DQogICAgLQ0KICAgIC0Jd2hpbGUgKChjID0gKnMrKykpDQogICAgLQkJKmQrKyA9IChj
ID09ICdfJykgPyAnLycgOiB0b2xvd2VyKGMpOw0KICAgIC0Jc3RyY3B5KGQsICIuaCIpOw0KICAg
IC0NCiAgICAtCS8qIEFzc3VtZSBkaXJlY3RvcnkgcGF0aCBhbHJlYWR5IGV4aXN0cy4gKi8NCiAg
ICAtCWZkID0gb3BlbihkZXBmaWxlX3BhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8IE9fVFJVTkMs
IDA2NDQpOw0KICAgIC0JaWYgKGZkID09IC0xKSB7DQogICAgLQkJaWYgKGVycm5vICE9IEVOT0VO
VCkNCiAgICAtCQkJcmV0dXJuIC0xOw0KICAgIC0NCiAgICAtCQlyZXQgPSBtYWtlX3BhcmVudF9k
aXIoZGVwZmlsZV9wYXRoKTsNCiAgICAtCQlpZiAocmV0KQ0KICAgIC0JCQlyZXR1cm4gcmV0Ow0K
ICAgIC0NCiAgICAtCQkvKiBUcnkgaXQgYWdhaW4uICovDQogICAgLQkJZmQgPSBvcGVuKGRlcGZp
bGVfcGF0aCwgT19XUk9OTFkgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0NCk7DQogICAgLQkJaWYg
KGZkID09IC0xKQ0KICAgIC0JCQlyZXR1cm4gLTE7DQogICAgLQl9DQogICAgLQljbG9zZShmZCk7
DQogICAgLQ0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBjb25m
X3ByaW50ZXIgew0KICAgIC0Jdm9pZCAoKnByaW50X3N5bWJvbCkoRklMRSAqLCBzdHJ1Y3Qgc3lt
Ym9sICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsNCiAgICAtCXZvaWQgKCpwcmludF9jb21tZW50
KShGSUxFICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsNCiAgICAtfTsNCiAgICAtDQogICAgLXN0
YXRpYyB2b2lkIGNvbmZfd2FybmluZyhjb25zdCBjaGFyICpmbXQsIC4uLikNCiAgICAtCV9fYXR0
cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsNCiAgICAtDQogICAgLXN0YXRpYyB2
b2lkIGNvbmZfbWVzc2FnZShjb25zdCBjaGFyICpmbXQsIC4uLikNCiAgICAtCV9fYXR0cmlidXRl
X18gKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKTsNCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCBj
aGFyICpjb25mX2ZpbGVuYW1lOw0KICAgIC1zdGF0aWMgaW50IGNvbmZfbGluZW5vLCBjb25mX3dh
cm5pbmdzOw0KICAgIC0NCiAgICAtY29uc3QgY2hhciBjb25mX2RlZm5hbWVbXSA9ICJhcmNoLyQo
QVJDSCkvZGVmY29uZmlnIjsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGNvbmZfd2FybmluZyhj
b25zdCBjaGFyICpmbXQsIC4uLikNCiAgICAtew0KICAgIC0JdmFfbGlzdCBhcDsNCiAgICAtCXZh
X3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICIlczolZDp3YXJuaW5nOiAi
LCBjb25mX2ZpbGVuYW1lLCBjb25mX2xpbmVubyk7DQogICAgLQl2ZnByaW50ZihzdGRlcnIsIGZt
dCwgYXApOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICJcbiIpOw0KICAgIC0JdmFfZW5kKGFwKTsN
CiAgICAtCWNvbmZfd2FybmluZ3MrKzsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQg
Y29uZl9kZWZhdWx0X21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykNCiAgICAtew0KICAg
IC0JcHJpbnRmKCIjXG4jICIpOw0KICAgIC0JcHJpbnRmKCIlcyIsIHMpOw0KICAgIC0JcHJpbnRm
KCJcbiNcbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCAoKmNvbmZfbWVzc2Fn
ZV9jYWxsYmFjaykoY29uc3QgY2hhciAqcykgPQ0KICAgIC0JY29uZl9kZWZhdWx0X21lc3NhZ2Vf
Y2FsbGJhY2s7DQogICAgLXZvaWQgY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayh2b2lkICgqZm4p
KGNvbnN0IGNoYXIgKnMpKQ0KICAgIC17DQogICAgLQljb25mX21lc3NhZ2VfY2FsbGJhY2sgPSBm
bjsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlKGNvbnN0IGNo
YXIgKmZtdCwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0JY2hhciBidWZb
NDA5Nl07DQogICAgLQ0KICAgIC0JaWYgKCFjb25mX21lc3NhZ2VfY2FsbGJhY2spDQogICAgLQkJ
cmV0dXJuOw0KICAgIC0NCiAgICAtCXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0NCiAgICAtCXZz
bnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFwKTsNCiAgICAtCWNvbmZfbWVzc2FnZV9j
YWxsYmFjayhidWYpOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtY29u
c3QgY2hhciAqY29uZl9nZXRfY29uZmlnbmFtZSh2b2lkKQ0KICAgIC17DQogICAgLQljaGFyICpu
YW1lID0gZ2V0ZW52KCJLQ09ORklHX0NPTkZJRyIpOw0KICAgIC0NCiAgICAtCXJldHVybiBuYW1l
ID8gbmFtZSA6ICIuY29uZmlnIjsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGNvbnN0IGNo
YXIgKmNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSh2b2lkKQ0KICAgIC17DQogICAgLQljaGFyICpu
YW1lID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9DT05GSUciKTsNCiAgICAtDQogICAgLQlyZXR1cm4g
bmFtZSA/IG5hbWUgOiAiaW5jbHVkZS9jb25maWcvYXV0by5jb25mIjsNCiAgICAtfQ0KICAgIC0N
CiAgICAtY2hhciAqY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSh2b2lkKQ0KICAgIC17DQogICAg
LQlzdGF0aWMgY2hhciBmdWxsbmFtZVtQQVRIX01BWCsxXTsNCiAgICAtCWNoYXIgKmVudiwgKm5h
bWU7DQogICAgLQ0KICAgIC0JbmFtZSA9IGV4cGFuZF9zdHJpbmcoY29uZl9kZWZuYW1lKTsNCiAg
ICAtCWVudiA9IGdldGVudihTUkNUUkVFKTsNCiAgICAtCWlmIChlbnYpIHsNCiAgICAtCQlzbnBy
aW50ZihmdWxsbmFtZSwgc2l6ZW9mKGZ1bGxuYW1lKSwgIiVzLyVzIiwgZW52LCBuYW1lKTsNCiAg
ICAtCQlpZiAoaXNfcHJlc2VudChmdWxsbmFtZSkpDQogICAgLQkJCXJldHVybiBmdWxsbmFtZTsN
CiAgICAtCX0NCiAgICAtCXJldHVybiBuYW1lOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
aW50IGNvbmZfc2V0X3N5bV92YWwoc3RydWN0IHN5bWJvbCAqc3ltLCBpbnQgZGVmLCBpbnQgZGVm
X2ZsYWdzLCBjaGFyICpwKQ0KICAgIC17DQogICAgLQljaGFyICpwMjsNCiAgICAtDQogICAgLQlz
d2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCWlmIChw
WzBdID09ICdtJykgew0KICAgIC0JCQlzeW0tPmRlZltkZWZdLnRyaSA9IG1vZDsNCiAgICAtCQkJ
c3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAt
CQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCWlmIChw
WzBdID09ICd5Jykgew0KICAgIC0JCQlzeW0tPmRlZltkZWZdLnRyaSA9IHllczsNCiAgICAtCQkJ
c3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAt
CQlpZiAocFswXSA9PSAnbicpIHsNCiAgICAtCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsNCiAg
ICAtCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0N
CiAgICAtCQlpZiAoZGVmICE9IFNfREVGX0FVVE8pDQogICAgLQkJCWNvbmZfd2FybmluZygic3lt
Ym9sIHZhbHVlICclcycgaW52YWxpZCBmb3IgJXMiLA0KICAgIC0JCQkJICAgICBwLCBzeW0tPm5h
bWUpOw0KICAgIC0JCXJldHVybiAxOw0KICAgIC0JY2FzZSBTX1NUUklORzoNCiAgICAtCQlpZiAo
KnArKyAhPSAnIicpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWZvciAocDIgPSBwOyAocDIgPSBz
dHJwYnJrKHAyLCAiXCJcXCIpKTsgcDIrKykgew0KICAgIC0JCQlpZiAoKnAyID09ICciJykgew0K
ICAgIC0JCQkJKnAyID0gMDsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCW1l
bW1vdmUocDIsIHAyICsgMSwgc3RybGVuKHAyKSk7DQogICAgLQkJfQ0KICAgIC0JCWlmICghcDIp
IHsNCiAgICAtCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQ0KICAgIC0JCQkJY29uZl93YXJuaW5n
KCJpbnZhbGlkIHN0cmluZyBmb3VuZCIpOw0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCQl9DQog
ICAgLQkJLyogZmFsbCB0aHJvdWdoICovDQogICAgLQljYXNlIFNfSU5UOg0KICAgIC0JY2FzZSBT
X0hFWDoNCiAgICAtCQlpZiAoc3ltX3N0cmluZ192YWxpZChzeW0sIHApKSB7DQogICAgLQkJCXN5
bS0+ZGVmW2RlZl0udmFsID0geHN0cmR1cChwKTsNCiAgICAtCQkJc3ltLT5mbGFncyB8PSBkZWZf
ZmxhZ3M7DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJaWYgKGRlZiAhPSBTX0RFRl9BVVRPKQ0K
ICAgIC0JCQkJY29uZl93YXJuaW5nKCJzeW1ib2wgdmFsdWUgJyVzJyBpbnZhbGlkIGZvciAlcyIs
DQogICAgLQkJCQkJICAgICBwLCBzeW0tPm5hbWUpOw0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAt
CQl9DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAg
ICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC0jZGVmaW5lIExJTkVfR1JPV1RIIDE2
DQogICAgLXN0YXRpYyBpbnQgYWRkX2J5dGUoaW50IGMsIGNoYXIgKipsaW5lcHRyLCBzaXplX3Qg
c2xlbiwgc2l6ZV90ICpuKQ0KICAgIC17DQogICAgLQljaGFyICpubGluZTsNCiAgICAtCXNpemVf
dCBuZXdfc2l6ZSA9IHNsZW4gKyAxOw0KICAgIC0JaWYgKG5ld19zaXplID4gKm4pIHsNCiAgICAt
CQluZXdfc2l6ZSArPSBMSU5FX0dST1dUSCAtIDE7DQogICAgLQkJbmV3X3NpemUgKj0gMjsNCiAg
ICAtCQlubGluZSA9IHhyZWFsbG9jKCpsaW5lcHRyLCBuZXdfc2l6ZSk7DQogICAgLQkJaWYgKCFu
bGluZSkNCiAgICAtCQkJcmV0dXJuIC0xOw0KICAgIC0NCiAgICAtCQkqbGluZXB0ciA9IG5saW5l
Ow0KICAgIC0JCSpuID0gbmV3X3NpemU7DQogICAgLQl9DQogICAgLQ0KICAgIC0JKCpsaW5lcHRy
KVtzbGVuXSA9IGM7DQogICAgLQ0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAg
LXN0YXRpYyBzc2l6ZV90IGNvbXBhdF9nZXRsaW5lKGNoYXIgKipsaW5lcHRyLCBzaXplX3QgKm4s
IEZJTEUgKnN0cmVhbSkNCiAgICAtew0KICAgIC0JY2hhciAqbGluZSA9ICpsaW5lcHRyOw0KICAg
IC0Jc2l6ZV90IHNsZW4gPSAwOw0KICAgIC0NCiAgICAtCWZvciAoOzspIHsNCiAgICAtCQlpbnQg
YyA9IGdldGMoc3RyZWFtKTsNCiAgICAtDQogICAgLQkJc3dpdGNoIChjKSB7DQogICAgLQkJY2Fz
ZSAnXG4nOg0KICAgIC0JCQlpZiAoYWRkX2J5dGUoYywgJmxpbmUsIHNsZW4sIG4pIDwgMCkNCiAg
ICAtCQkJCWdvdG8gZV9vdXQ7DQogICAgLQkJCXNsZW4rKzsNCiAgICAtCQkJLyogZmFsbCB0aHJv
dWdoICovDQogICAgLQkJY2FzZSBFT0Y6DQogICAgLQkJCWlmIChhZGRfYnl0ZSgnXDAnLCAmbGlu
ZSwgc2xlbiwgbikgPCAwKQ0KICAgIC0JCQkJZ290byBlX291dDsNCiAgICAtCQkJKmxpbmVwdHIg
PSBsaW5lOw0KICAgIC0JCQlpZiAoc2xlbiA9PSAwKQ0KICAgIC0JCQkJcmV0dXJuIC0xOw0KICAg
IC0JCQlyZXR1cm4gc2xlbjsNCiAgICAtCQlkZWZhdWx0Og0KICAgIC0JCQlpZiAoYWRkX2J5dGUo
YywgJmxpbmUsIHNsZW4sIG4pIDwgMCkNCiAgICAtCQkJCWdvdG8gZV9vdXQ7DQogICAgLQkJCXNs
ZW4rKzsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC1lX291dDoNCiAgICAtCWxpbmVb
c2xlbi0xXSA9ICdcMCc7DQogICAgLQkqbGluZXB0ciA9IGxpbmU7DQogICAgLQlyZXR1cm4gLTE7
DQogICAgLX0NCiAgICAtDQogICAgLWludCBjb25mX3JlYWRfc2ltcGxlKGNvbnN0IGNoYXIgKm5h
bWUsIGludCBkZWYpDQogICAgLXsNCiAgICAtCUZJTEUgKmluID0gTlVMTDsNCiAgICAtCWNoYXIg
ICAqbGluZSA9IE5VTEw7DQogICAgLQlzaXplX3QgIGxpbmVfYXNpemUgPSAwOw0KICAgIC0JY2hh
ciAqcCwgKnAyOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0JaW50IGksIGRlZl9m
bGFnczsNCiAgICAtDQogICAgLQlpZiAobmFtZSkgew0KICAgIC0JCWluID0gemNvbmZfZm9wZW4o
bmFtZSk7DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAg
ICAtDQogICAgLQkJbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsNCiAgICAtCQlpbiA9IHpj
b25mX2ZvcGVuKG5hbWUpOw0KICAgIC0JCWlmIChpbikNCiAgICAtCQkJZ290byBsb2FkOw0KICAg
IC0JCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOw0KICAgIC0JCWlmICghc3ltX2RlZmNvbmZpZ19s
aXN0KQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtDQogICAgLQkJZm9yX2FsbF9kZWZhdWx0cyhz
eW1fZGVmY29uZmlnX2xpc3QsIHByb3ApIHsNCiAgICAtCQkJaWYgKGV4cHJfY2FsY192YWx1ZShw
cm9wLT52aXNpYmxlLmV4cHIpID09IG5vIHx8DQogICAgLQkJCSAgICBwcm9wLT5leHByLT50eXBl
ICE9IEVfU1lNQk9MKQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCXN5bV9jYWxjX3ZhbHVl
KHByb3AtPmV4cHItPmxlZnQuc3ltKTsNCiAgICAtCQkJbmFtZSA9IHN5bV9nZXRfc3RyaW5nX3Zh
bHVlKHByb3AtPmV4cHItPmxlZnQuc3ltKTsNCiAgICAtCQkJaW4gPSB6Y29uZl9mb3BlbihuYW1l
KTsNCiAgICAtCQkJaWYgKGluKSB7DQogICAgLQkJCQljb25mX21lc3NhZ2UoInVzaW5nIGRlZmF1
bHRzIGZvdW5kIGluICVzIiwNCiAgICAtCQkJCQkgbmFtZSk7DQogICAgLQkJCQlnb3RvIGxvYWQ7
DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlpZiAoIWluKQ0KICAgIC0JCXJl
dHVybiAxOw0KICAgIC0NCiAgICAtbG9hZDoNCiAgICAtCWNvbmZfZmlsZW5hbWUgPSBuYW1lOw0K
ICAgIC0JY29uZl9saW5lbm8gPSAwOw0KICAgIC0JY29uZl93YXJuaW5ncyA9IDA7DQogICAgLQ0K
ICAgIC0JZGVmX2ZsYWdzID0gU1lNQk9MX0RFRiA8PCBkZWY7DQogICAgLQlmb3JfYWxsX3N5bWJv
bHMoaSwgc3ltKSB7DQogICAgLQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hBTkdFRDsNCiAgICAt
CQlzeW0tPmZsYWdzICY9IH4oZGVmX2ZsYWdzfFNZTUJPTF9WQUxJRCk7DQogICAgLQkJaWYgKHN5
bV9pc19jaG9pY2Uoc3ltKSkNCiAgICAtCQkJc3ltLT5mbGFncyB8PSBkZWZfZmxhZ3M7DQogICAg
LQkJc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCQljYXNlIFNfSU5UOg0KICAgIC0JCWNhc2Ug
U19IRVg6DQogICAgLQkJY2FzZSBTX1NUUklORzoNCiAgICAtCQkJaWYgKHN5bS0+ZGVmW2RlZl0u
dmFsKQ0KICAgIC0JCQkJZnJlZShzeW0tPmRlZltkZWZdLnZhbCk7DQogICAgLQkJCS8qIGZhbGwg
dGhyb3VnaCAqLw0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCXN5bS0+ZGVmW2RlZl0udmFsID0g
TlVMTDsNCiAgICAtCQkJc3ltLT5kZWZbZGVmXS50cmkgPSBubzsNCiAgICAtCQl9DQogICAgLQl9
DQogICAgLQ0KICAgIC0Jd2hpbGUgKGNvbXBhdF9nZXRsaW5lKCZsaW5lLCAmbGluZV9hc2l6ZSwg
aW4pICE9IC0xKSB7DQogICAgLQkJY29uZl9saW5lbm8rKzsNCiAgICAtCQlzeW0gPSBOVUxMOw0K
ICAgIC0JCWlmIChsaW5lWzBdID09ICcjJykgew0KICAgIC0JCQlpZiAobWVtY21wKGxpbmUgKyAy
LCBDT05GSUdfLCBzdHJsZW4oQ09ORklHXykpKQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJ
CXAgPSBzdHJjaHIobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksICcgJyk7DQogICAgLQkJCWlm
ICghcCkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkqcCsrID0gMDsNCiAgICAtCQkJaWYg
KHN0cm5jbXAocCwgImlzIG5vdCBzZXQiLCAxMCkpDQogICAgLQkJCQljb250aW51ZTsNCiAgICAt
CQkJaWYgKGRlZiA9PSBTX0RFRl9VU0VSKSB7DQogICAgLQkJCQlzeW0gPSBzeW1fZmluZChsaW5l
ICsgMiArIHN0cmxlbihDT05GSUdfKSk7DQogICAgLQkJCQlpZiAoIXN5bSkgew0KICAgIC0JCQkJ
CXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOw0KICAgIC0JCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJ
fQ0KICAgIC0JCQl9IGVsc2Ugew0KICAgIC0JCQkJc3ltID0gc3ltX2xvb2t1cChsaW5lICsgMiAr
IHN0cmxlbihDT05GSUdfKSwgMCk7DQogICAgLQkJCQlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9X
TikNCiAgICAtCQkJCQlzeW0tPnR5cGUgPSBTX0JPT0xFQU47DQogICAgLQkJCX0NCiAgICAtCQkJ
aWYgKHN5bS0+ZmxhZ3MgJiBkZWZfZmxhZ3MpIHsNCiAgICAtCQkJCWNvbmZfd2FybmluZygib3Zl
cnJpZGU6IHJlYXNzaWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7DQogICAgLQkJCX0N
CiAgICAtCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCQkJY2FzZSBTX0JPT0xFQU46DQog
ICAgLQkJCWNhc2UgU19UUklTVEFURToNCiAgICAtCQkJCXN5bS0+ZGVmW2RlZl0udHJpID0gbm87
DQogICAgLQkJCQlzeW0tPmZsYWdzIHw9IGRlZl9mbGFnczsNCiAgICAtCQkJCWJyZWFrOw0KICAg
IC0JCQlkZWZhdWx0Og0KICAgIC0JCQkJOw0KICAgIC0JCQl9DQogICAgLQkJfSBlbHNlIGlmICht
ZW1jbXAobGluZSwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSA9PSAwKSB7DQogICAgLQkJCXAg
PSBzdHJjaHIobGluZSArIHN0cmxlbihDT05GSUdfKSwgJz0nKTsNCiAgICAtCQkJaWYgKCFwKQ0K
ICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCSpwKysgPSAwOw0KICAgIC0JCQlwMiA9IHN0cmNo
cihwLCAnXG4nKTsNCiAgICAtCQkJaWYgKHAyKSB7DQogICAgLQkJCQkqcDItLSA9IDA7DQogICAg
LQkJCQlpZiAoKnAyID09ICdccicpDQogICAgLQkJCQkJKnAyID0gMDsNCiAgICAtCQkJfQ0KICAg
IC0NCiAgICAtCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIHN0cmxlbihDT05GSUdfKSk7DQogICAg
LQkJCWlmICghc3ltKSB7DQogICAgLQkJCQlpZiAoZGVmID09IFNfREVGX0FVVE8pDQogICAgLQkJ
CQkJLyoNCiAgICAtCQkJCQkgKiBSZWFkaW5nIGZyb20gaW5jbHVkZS9jb25maWcvYXV0by5jb25m
DQogICAgLQkJCQkJICogSWYgQ09ORklHX0ZPTyBwcmV2aW91c2x5IGV4aXN0ZWQgaW4NCiAgICAt
CQkJCQkgKiBhdXRvLmNvbmYgYnV0IGl0IGlzIG1pc3Npbmcgbm93LA0KICAgIC0JCQkJCSAqIGlu
Y2x1ZGUvY29uZmlnL2Zvby5oIG11c3QgYmUgdG91Y2hlZC4NCiAgICAtCQkJCQkgKi8NCiAgICAt
CQkJCQljb25mX3RvdWNoX2RlcChsaW5lICsgc3RybGVuKENPTkZJR18pKTsNCiAgICAtCQkJCWVs
c2UNCiAgICAtCQkJCQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsNCiAgICAtCQkJCWNvbnRpbnVl
Ow0KICAgIC0JCQl9DQogICAgLQ0KICAgIC0JCQlpZiAoc3ltLT5mbGFncyAmIGRlZl9mbGFncykg
ew0KICAgIC0JCQkJY29uZl93YXJuaW5nKCJvdmVycmlkZTogcmVhc3NpZ25pbmcgdG8gc3ltYm9s
ICVzIiwgc3ltLT5uYW1lKTsNCiAgICAtCQkJfQ0KICAgIC0JCQlpZiAoY29uZl9zZXRfc3ltX3Zh
bChzeW0sIGRlZiwgZGVmX2ZsYWdzLCBwKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCX0g
ZWxzZSB7DQogICAgLQkJCWlmIChsaW5lWzBdICE9ICdccicgJiYgbGluZVswXSAhPSAnXG4nKQ0K
ICAgIC0JCQkJY29uZl93YXJuaW5nKCJ1bmV4cGVjdGVkIGRhdGE6ICUuKnMiLA0KICAgIC0JCQkJ
CSAgICAgKGludClzdHJjc3BuKGxpbmUsICJcclxuIiksIGxpbmUpOw0KICAgIC0NCiAgICAtCQkJ
Y29udGludWU7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpZiAoc3ltICYmIHN5bV9pc19jaG9p
Y2VfdmFsdWUoc3ltKSkgew0KICAgIC0JCQlzdHJ1Y3Qgc3ltYm9sICpjcyA9IHByb3BfZ2V0X3N5
bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOw0KICAgIC0JCQlzd2l0Y2ggKHN5bS0+ZGVm
W2RlZl0udHJpKSB7DQogICAgLQkJCWNhc2Ugbm86DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJ
Y2FzZSBtb2Q6DQogICAgLQkJCQlpZiAoY3MtPmRlZltkZWZdLnRyaSA9PSB5ZXMpIHsNCiAgICAt
CQkJCQljb25mX3dhcm5pbmcoIiVzIGNyZWF0ZXMgaW5jb25zaXN0ZW50IGNob2ljZSBzdGF0ZSIs
IHN5bS0+bmFtZSk7DQogICAgLQkJCQkJY3MtPmZsYWdzICY9IH5kZWZfZmxhZ3M7DQogICAgLQkJ
CQl9DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2FzZSB5ZXM6DQogICAgLQkJCQlpZiAoY3Mt
PmRlZltkZWZdLnRyaSAhPSBubykNCiAgICAtCQkJCQljb25mX3dhcm5pbmcoIm92ZXJyaWRlOiAl
cyBjaGFuZ2VzIGNob2ljZSBzdGF0ZSIsIHN5bS0+bmFtZSk7DQogICAgLQkJCQljcy0+ZGVmW2Rl
Zl0udmFsID0gc3ltOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQkJY3MtPmRl
ZltkZWZdLnRyaSA9IEVYUFJfT1IoY3MtPmRlZltkZWZdLnRyaSwgc3ltLT5kZWZbZGVmXS50cmkp
Ow0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWZyZWUobGluZSk7DQogICAgLQlmY2xvc2UoaW4p
Ow0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLWludCBjb25mX3JlYWQoY29u
c3QgY2hhciAqbmFtZSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0J
aW50IGNvbmZfdW5zYXZlZCA9IDA7DQogICAgLQlpbnQgaTsNCiAgICAtDQogICAgLQlzeW1fc2V0
X2NoYW5nZV9jb3VudCgwKTsNCiAgICAtDQogICAgLQlpZiAoY29uZl9yZWFkX3NpbXBsZShuYW1l
LCBTX0RFRl9VU0VSKSkgew0KICAgIC0JCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsNCiAg
ICAtCQlyZXR1cm4gMTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzeW1fY2FsY192YWx1ZShtb2R1
bGVzX3N5bSk7DQogICAgLQ0KICAgIC0JZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgIC0J
CXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSB8fCAo
c3ltLT5mbGFncyAmIFNZTUJPTF9OT19XUklURSkpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0J
CWlmIChzeW1faGFzX3ZhbHVlKHN5bSkgJiYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKSB7
DQogICAgLQkJCS8qIGNoZWNrIHRoYXQgY2FsY3VsYXRlZCB2YWx1ZSBhZ3JlZXMgd2l0aCBzYXZl
ZCB2YWx1ZSAqLw0KICAgIC0JCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0JCQljYXNlIFNf
Qk9PTEVBTjoNCiAgICAtCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCQkJaWYgKHN5bS0+ZGVm
W1NfREVGX1VTRVJdLnRyaSAhPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkpDQogICAgLQkJ
CQkJYnJlYWs7DQogICAgLQkJCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkNCiAgICAtCQkJCQlj
b250aW51ZTsNCiAgICAtCQkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgIC0JCQlkZWZhdWx0Og0K
ICAgIC0JCQkJaWYgKCFzdHJjbXAoc3ltLT5jdXJyLnZhbCwgc3ltLT5kZWZbU19ERUZfVVNFUl0u
dmFsKSkNCiAgICAtCQkJCQljb250aW51ZTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQog
ICAgLQkJfSBlbHNlIGlmICghc3ltX2hhc192YWx1ZShzeW0pICYmICEoc3ltLT5mbGFncyAmIFNZ
TUJPTF9XUklURSkpDQogICAgLQkJCS8qIG5vIHByZXZpb3VzIHZhbHVlIGFuZCBub3Qgc2F2ZWQg
Ki8NCiAgICAtCQkJY29udGludWU7DQogICAgLQkJY29uZl91bnNhdmVkKys7DQogICAgLQkJLyog
bWF5YmUgcHJpbnQgdmFsdWUgaW4gdmVyYm9zZSBtb2RlLi4uICovDQogICAgLQl9DQogICAgLQ0K
ICAgIC0JZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgIC0JCWlmIChzeW1faGFzX3ZhbHVl
KHN5bSkgJiYgIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgew0KICAgIC0JCQkvKiBSZXNldCB2
YWx1ZXMgb2YgZ2VuZXJhdGVzIHZhbHVlcywgc28gdGhleSdsbCBhcHBlYXINCiAgICAtCQkJICog
YXMgbmV3LCBpZiB0aGV5IHNob3VsZCBiZWNvbWUgdmlzaWJsZSwgYnV0IHRoYXQNCiAgICAtCQkJ
ICogZG9lc24ndCBxdWl0ZSB3b3JrIGlmIHRoZSBLY29uZmlnIGFuZCB0aGUgc2F2ZWQNCiAgICAt
CQkJICogY29uZmlndXJhdGlvbiBkaXNhZ3JlZS4NCiAgICAtCQkJICovDQogICAgLQkJCWlmIChz
eW0tPnZpc2libGUgPT0gbm8gJiYgIWNvbmZfdW5zYXZlZCkNCiAgICAtCQkJCXN5bS0+ZmxhZ3Mg
Jj0gflNZTUJPTF9ERUZfVVNFUjsNCiAgICAtCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAt
CQkJY2FzZSBTX1NUUklORzoNCiAgICAtCQkJY2FzZSBTX0lOVDoNCiAgICAtCQkJY2FzZSBTX0hF
WDoNCiAgICAtCQkJCS8qIFJlc2V0IGEgc3RyaW5nIHZhbHVlIGlmIGl0J3Mgb3V0IG9mIHJhbmdl
ICovDQogICAgLQkJCQlpZiAoc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3ltLCBzeW0tPmRlZltT
X0RFRl9VU0VSXS52YWwpKQ0KICAgIC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJc3ltLT5mbGFncyAm
PSB+KFNZTUJPTF9WQUxJRHxTWU1CT0xfREVGX1VTRVIpOw0KICAgIC0JCQkJY29uZl91bnNhdmVk
Kys7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJZGVmYXVsdDoNCiAgICAtCQkJCWJyZWFrOw0K
ICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXN5bV9hZGRfY2hhbmdl
X2NvdW50KGNvbmZfd2FybmluZ3MgfHwgY29uZl91bnNhdmVkKTsNCiAgICAtDQogICAgLQlyZXR1
cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogS2NvbmZpZyBjb25maWd1cmF0
aW9uIHByaW50ZXINCiAgICAtICoNCiAgICAtICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBn
ZW5lcmF0aW5nIHRoZSByZXN1bHRpbmcgY29uZmlndXJhdGlvbiBhZnRlcg0KICAgIC0gKiBrY29u
ZmlnIGludm9jYXRpb24gYW5kIGBkZWZjb25maWcnIGZpbGVzLiBVbnNldCBzeW1ib2wgbWlnaHQg
YmUgb21pdHRlZCBieQ0KICAgIC0gKiBwYXNzaW5nIGEgbm9uLU5VTEwgYXJndW1lbnQgdG8gdGhl
IHByaW50ZXIuDQogICAgLSAqDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZA0KICAgIC1rY29u
ZmlnX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFy
ICp2YWx1ZSwgdm9pZCAqYXJnKQ0KICAgIC17DQogICAgLQ0KICAgIC0Jc3dpdGNoIChzeW0tPnR5
cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAg
IC0JCWlmICgqdmFsdWUgPT0gJ24nKSB7DQogICAgLQkJCWJvb2wgc2tpcF91bnNldCA9IChhcmcg
IT0gTlVMTCk7DQogICAgLQ0KICAgIC0JCQlpZiAoIXNraXBfdW5zZXQpDQogICAgLQkJCQlmcHJp
bnRmKGZwLCAiIyAlcyVzIGlzIG5vdCBzZXRcbiIsDQogICAgLQkJCQkgICAgQ09ORklHXywgc3lt
LT5uYW1lKTsNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAt
CWRlZmF1bHQ6DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQ0KICAgIC0JZnByaW50Zihm
cCwgIiVzJXM9JXNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSwgdmFsdWUpOw0KICAgIC19DQogICAg
LQ0KICAgIC1zdGF0aWMgdm9pZA0KICAgIC1rY29uZmlnX3ByaW50X2NvbW1lbnQoRklMRSAqZnAs
IGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpDQogICAgLXsNCiAgICAtCWNvbnN0IGNoYXIg
KnAgPSB2YWx1ZTsNCiAgICAtCXNpemVfdCBsOw0KICAgIC0NCiAgICAtCWZvciAoOzspIHsNCiAg
ICAtCQlsID0gc3RyY3NwbihwLCAiXG4iKTsNCiAgICAtCQlmcHJpbnRmKGZwLCAiIyIpOw0KICAg
IC0JCWlmIChsKSB7DQogICAgLQkJCWZwcmludGYoZnAsICIgIik7DQogICAgLQkJCXhmd3JpdGUo
cCwgbCwgMSwgZnApOw0KICAgIC0JCQlwICs9IGw7DQogICAgLQkJfQ0KICAgIC0JCWZwcmludGYo
ZnAsICJcbiIpOw0KICAgIC0JCWlmICgqcCsrID09ICdcMCcpDQogICAgLQkJCWJyZWFrOw0KICAg
IC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IGNvbmZfcHJpbnRlciBrY29u
ZmlnX3ByaW50ZXJfY2IgPQ0KICAgIC17DQogICAgLQkucHJpbnRfc3ltYm9sID0ga2NvbmZpZ19w
cmludF9zeW1ib2wsDQogICAgLQkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJpbnRfY29tbWVu
dCwNCiAgICAtfTsNCiAgICAtDQogICAgLS8qDQogICAgLSAqIEhlYWRlciBwcmludGVyDQogICAg
LSAqDQogICAgLSAqIFRoaXMgcHJpbnRlciBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgYGlu
Y2x1ZGUvZ2VuZXJhdGVkL2F1dG9jb25mLmgnIGZpbGUuDQogICAgLSAqLw0KICAgIC1zdGF0aWMg
dm9pZA0KICAgIC1oZWFkZXJfcHJpbnRfc3ltYm9sKEZJTEUgKmZwLCBzdHJ1Y3Qgc3ltYm9sICpz
eW0sIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpDQogICAgLXsNCiAgICAtDQogICAgLQlz
d2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0JY2FzZSBTX0JPT0xFQU46DQogICAgLQljYXNlIFNf
VFJJU1RBVEU6IHsNCiAgICAtCQljb25zdCBjaGFyICpzdWZmaXggPSAiIjsNCiAgICAtDQogICAg
LQkJc3dpdGNoICgqdmFsdWUpIHsNCiAgICAtCQljYXNlICduJzoNCiAgICAtCQkJYnJlYWs7DQog
ICAgLQkJY2FzZSAnbSc6DQogICAgLQkJCXN1ZmZpeCA9ICJfTU9EVUxFIjsNCiAgICAtCQkJLyog
ZmFsbCB0aHJvdWdoICovDQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJZnByaW50ZihmcCwgIiNk
ZWZpbmUgJXMlcyVzIDFcbiIsDQogICAgLQkJCSAgICBDT05GSUdfLCBzeW0tPm5hbWUsIHN1ZmZp
eCk7DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JY2FzZSBTX0hFWDog
ew0KICAgIC0JCWNvbnN0IGNoYXIgKnByZWZpeCA9ICIiOw0KICAgIC0NCiAgICAtCQlpZiAodmFs
dWVbMF0gIT0gJzAnIHx8ICh2YWx1ZVsxXSAhPSAneCcgJiYgdmFsdWVbMV0gIT0gJ1gnKSkNCiAg
ICAtCQkJcHJlZml4ID0gIjB4IjsNCiAgICAtCQlmcHJpbnRmKGZwLCAiI2RlZmluZSAlcyVzICVz
JXNcbiIsDQogICAgLQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSwgcHJlZml4LCB2YWx1ZSk7DQog
ICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JY2FzZSBT
X0lOVDoNCiAgICAtCQlmcHJpbnRmKGZwLCAiI2RlZmluZSAlcyVzICVzXG4iLA0KICAgIC0JCSAg
ICBDT05GSUdfLCBzeW0tPm5hbWUsIHZhbHVlKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1
bHQ6DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQ0KICAgIC19DQogICAgLQ0KICAgIC1z
dGF0aWMgdm9pZA0KICAgIC1oZWFkZXJfcHJpbnRfY29tbWVudChGSUxFICpmcCwgY29uc3QgY2hh
ciAqdmFsdWUsIHZvaWQgKmFyZykNCiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqcCA9IHZhbHVl
Ow0KICAgIC0Jc2l6ZV90IGw7DQogICAgLQ0KICAgIC0JZnByaW50ZihmcCwgIi8qXG4iKTsNCiAg
ICAtCWZvciAoOzspIHsNCiAgICAtCQlsID0gc3RyY3NwbihwLCAiXG4iKTsNCiAgICAtCQlmcHJp
bnRmKGZwLCAiICoiKTsNCiAgICAtCQlpZiAobCkgew0KICAgIC0JCQlmcHJpbnRmKGZwLCAiICIp
Ow0KICAgIC0JCQl4ZndyaXRlKHAsIGwsIDEsIGZwKTsNCiAgICAtCQkJcCArPSBsOw0KICAgIC0J
CX0NCiAgICAtCQlmcHJpbnRmKGZwLCAiXG4iKTsNCiAgICAtCQlpZiAoKnArKyA9PSAnXDAnKQ0K
ICAgIC0JCQlicmVhazsNCiAgICAtCX0NCiAgICAtCWZwcmludGYoZnAsICIgKi9cbiIpOw0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IGNvbmZfcHJpbnRlciBoZWFkZXJfcHJpbnRl
cl9jYiA9DQogICAgLXsNCiAgICAtCS5wcmludF9zeW1ib2wgPSBoZWFkZXJfcHJpbnRfc3ltYm9s
LA0KICAgIC0JLnByaW50X2NvbW1lbnQgPSBoZWFkZXJfcHJpbnRfY29tbWVudCwNCiAgICAtfTsN
CiAgICAtDQogICAgLS8qDQogICAgLSAqIFRyaXN0YXRlIHByaW50ZXINCiAgICAtICoNCiAgICAt
ICogVGhpcyBwcmludGVyIGlzIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBgaW5jbHVkZS9jb25m
aWcvdHJpc3RhdGUuY29uZicgZmlsZS4NCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkDQogICAg
LXRyaXN0YXRlX3ByaW50X3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25z
dCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJnKQ0KICAgIC17DQogICAgLQ0KICAgIC0JaWYgKHN5bS0+
dHlwZSA9PSBTX1RSSVNUQVRFICYmICp2YWx1ZSAhPSAnbicpDQogICAgLQkJZnByaW50ZihmcCwg
IiVzJXM9JWNcbiIsIENPTkZJR18sIHN5bS0+bmFtZSwgKGNoYXIpdG91cHBlcigqdmFsdWUpKTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHN0cnVjdCBjb25mX3ByaW50ZXIgdHJpc3RhdGVf
cHJpbnRlcl9jYiA9DQogICAgLXsNCiAgICAtCS5wcmludF9zeW1ib2wgPSB0cmlzdGF0ZV9wcmlu
dF9zeW1ib2wsDQogICAgLQkucHJpbnRfY29tbWVudCA9IGtjb25maWdfcHJpbnRfY29tbWVudCwN
CiAgICAtfTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGNvbmZfd3JpdGVfc3ltYm9sKEZJTEUg
KmZwLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sDQogICAgLQkJCSAgICAgIHN0cnVjdCBjb25mX3ByaW50
ZXIgKnByaW50ZXIsIHZvaWQgKnByaW50ZXJfYXJnKQ0KICAgIC17DQogICAgLQljb25zdCBjaGFy
ICpzdHI7DQogICAgLQ0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19V
TktOT1dOOg0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBTX1NUUklORzoNCiAgICAtCQlzdHIg
PSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0KICAgIC0JCXN0ciA9IHN5bV9lc2NhcGVfc3Ry
aW5nX3ZhbHVlKHN0cik7DQogICAgLQkJcHJpbnRlci0+cHJpbnRfc3ltYm9sKGZwLCBzeW0sIHN0
ciwgcHJpbnRlcl9hcmcpOw0KICAgIC0JCWZyZWUoKHZvaWQgKilzdHIpOw0KICAgIC0JCWJyZWFr
Ow0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlzdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0p
Ow0KICAgIC0JCXByaW50ZXItPnByaW50X3N5bWJvbChmcCwgc3ltLCBzdHIsIHByaW50ZXJfYXJn
KTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQNCiAgICAtY29uZl93
cml0ZV9oZWFkaW5nKEZJTEUgKmZwLCBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lk
ICpwcmludGVyX2FyZykNCiAgICAtew0KICAgIC0JY2hhciBidWZbMjU2XTsNCiAgICAtDQogICAg
LQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLA0KICAgIC0JICAgICJcbiINCiAgICAtCSAgICAi
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZTsgRE8gTk9UIEVESVQuXG4iDQogICAgLQkgICAg
IiVzXG4iLA0KICAgIC0JICAgIHJvb3RtZW51LnByb21wdC0+dGV4dCk7DQogICAgLQ0KICAgIC0J
cHJpbnRlci0+cHJpbnRfY29tbWVudChmcCwgYnVmLCBwcmludGVyX2FyZyk7DQogICAgLX0NCiAg
ICAtDQogICAgLS8qDQogICAgLSAqIFdyaXRlIG91dCBhIG1pbmltYWwgY29uZmlnLg0KICAgIC0g
KiBBbGwgdmFsdWVzIHRoYXQgaGFzIGRlZmF1bHQgdmFsdWVzIGFyZSBza2lwcGVkIGFzIHRoaXMg
aXMgcmVkdW5kYW50Lg0KICAgIC0gKi8NCiAgICAtaW50IGNvbmZfd3JpdGVfZGVmY29uZmlnKGNv
bnN0IGNoYXIgKmZpbGVuYW1lKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQog
ICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtCUZJTEUgKm91dDsNCiAgICAtDQogICAgLQlv
dXQgPSBmb3BlbihmaWxlbmFtZSwgInciKTsNCiAgICAtCWlmICghb3V0KQ0KICAgIC0JCXJldHVy
biAxOw0KICAgIC0NCiAgICAtCXN5bV9jbGVhcl9hbGxfdmFsaWQoKTsNCiAgICAtDQogICAgLQkv
KiBUcmF2ZXJzZSBhbGwgbWVudXMgdG8gZmluZCBhbGwgcmVsZXZhbnQgc3ltYm9scyAqLw0KICAg
IC0JbWVudSA9IHJvb3RtZW51Lmxpc3Q7DQogICAgLQ0KICAgIC0Jd2hpbGUgKG1lbnUgIT0gTlVM
TCkNCiAgICAtCXsNCiAgICAtCQlzeW0gPSBtZW51LT5zeW07DQogICAgLQkJaWYgKHN5bSA9PSBO
VUxMKSB7DQogICAgLQkJCWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQ0KICAgIC0JCQkJZ290
byBuZXh0X21lbnU7DQogICAgLQkJfSBlbHNlIGlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7DQog
ICAgLQkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgLQkJCWlmICghKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfV1JJVEUpKQ0KICAgIC0JCQkJZ290byBuZXh0X21lbnU7DQogICAgLQkJCXN5bS0+Zmxh
Z3MgJj0gflNZTUJPTF9XUklURTsNCiAgICAtCQkJLyogSWYgd2UgY2Fubm90IGNoYW5nZSB0aGUg
c3ltYm9sIC0gc2tpcCAqLw0KICAgIC0JCQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkNCiAg
ICAtCQkJCWdvdG8gbmV4dF9tZW51Ow0KICAgIC0JCQkvKiBJZiBzeW1ib2wgZXF1YWxzIHRvIGRl
ZmF1bHQgdmFsdWUgLSBza2lwICovDQogICAgLQkJCWlmIChzdHJjbXAoc3ltX2dldF9zdHJpbmdf
dmFsdWUoc3ltKSwgc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzeW0pKSA9PSAwKQ0KICAgIC0JCQkJ
Z290byBuZXh0X21lbnU7DQogICAgLQ0KICAgIC0JCQkvKg0KICAgIC0JCQkgKiBJZiBzeW1ib2wg
aXMgYSBjaG9pY2UgdmFsdWUgYW5kIGVxdWFscyB0byB0aGUNCiAgICAtCQkJICogZGVmYXVsdCBm
b3IgYSBjaG9pY2UgLSBza2lwLg0KICAgIC0JCQkgKiBCdXQgb25seSBpZiB2YWx1ZSBpcyBib29s
IGFuZCBlcXVhbCB0byAieSIgYW5kDQogICAgLQkJCSAqIGNob2ljZSBpcyBub3QgIm9wdGlvbmFs
Ii4NCiAgICAtCQkJICogKElmIGNob2ljZSBpcyAib3B0aW9uYWwiIHRoZW4gYWxsIHZhbHVlcyBj
YW4gYmUgIm4iKQ0KICAgIC0JCQkgKi8NCiAgICAtCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUo
c3ltKSkgew0KICAgIC0JCQkJc3RydWN0IHN5bWJvbCAqY3M7DQogICAgLQkJCQlzdHJ1Y3Qgc3lt
Ym9sICpkczsNCiAgICAtDQogICAgLQkJCQljcyA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2No
b2ljZV9wcm9wKHN5bSkpOw0KICAgIC0JCQkJZHMgPSBzeW1fY2hvaWNlX2RlZmF1bHQoY3MpOw0K
ICAgIC0JCQkJaWYgKCFzeW1faXNfb3B0aW9uYWwoY3MpICYmIHN5bSA9PSBkcykgew0KICAgIC0J
CQkJCWlmICgoc3ltLT50eXBlID09IFNfQk9PTEVBTikgJiYNCiAgICAtCQkJCQkgICAgc3ltX2dl
dF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHllcykNCiAgICAtCQkJCQkJZ290byBuZXh0X21lbnU7
DQogICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtCQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBz
eW0sICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwpOw0KICAgIC0JCX0NCiAgICAtbmV4dF9tZW51
Og0KICAgIC0JCWlmIChtZW51LT5saXN0ICE9IE5VTEwpIHsNCiAgICAtCQkJbWVudSA9IG1lbnUt
Pmxpc3Q7DQogICAgLQkJfQ0KICAgIC0JCWVsc2UgaWYgKG1lbnUtPm5leHQgIT0gTlVMTCkgew0K
ICAgIC0JCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQl3aGls
ZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7DQogICAgLQkJCQlpZiAobWVudS0+bmV4dCAhPSBO
VUxMKSB7DQogICAgLQkJCQkJbWVudSA9IG1lbnUtPm5leHQ7DQogICAgLQkJCQkJYnJlYWs7DQog
ICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlmY2xvc2Uob3V0
KTsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgY29uZl93cml0ZShj
b25zdCBjaGFyICpuYW1lKQ0KICAgIC17DQogICAgLQlGSUxFICpvdXQ7DQogICAgLQlzdHJ1Y3Qg
c3ltYm9sICpzeW07DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtCWNvbnN0IGNoYXIg
KnN0cjsNCiAgICAtCWNoYXIgdG1wbmFtZVtQQVRIX01BWCArIDFdLCBvbGRuYW1lW1BBVEhfTUFY
ICsgMV07DQogICAgLQljaGFyICplbnY7DQogICAgLQlib29sIG5lZWRfbmV3bGluZSA9IGZhbHNl
Ow0KICAgIC0NCiAgICAtCWlmICghbmFtZSkNCiAgICAtCQluYW1lID0gY29uZl9nZXRfY29uZmln
bmFtZSgpOw0KICAgIC0NCiAgICAtCWlmICghKm5hbWUpIHsNCiAgICAtCQlmcHJpbnRmKHN0ZGVy
ciwgImNvbmZpZyBuYW1lIGlzIGVtcHR5XG4iKTsNCiAgICAtCQlyZXR1cm4gLTE7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JaWYgKGlzX2RpcihuYW1lKSkgew0KICAgIC0JCWZwcmludGYoc3RkZXJy
LCAiJXM6IElzIGEgZGlyZWN0b3J5XG4iLCBuYW1lKTsNCiAgICAtCQlyZXR1cm4gLTE7DQogICAg
LQl9DQogICAgLQ0KICAgIC0JaWYgKG1ha2VfcGFyZW50X2RpcihuYW1lKSkNCiAgICAtCQlyZXR1
cm4gLTE7DQogICAgLQ0KICAgIC0JZW52ID0gZ2V0ZW52KCJLQ09ORklHX09WRVJXUklURUNPTkZJ
RyIpOw0KICAgIC0JaWYgKGVudiAmJiAqZW52KSB7DQogICAgLQkJKnRtcG5hbWUgPSAwOw0KICAg
IC0JCW91dCA9IGZvcGVuKG5hbWUsICJ3Iik7DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCXNucHJp
bnRmKHRtcG5hbWUsIHNpemVvZih0bXBuYW1lKSwgIiVzLiVkLnRtcCIsDQogICAgLQkJCSBuYW1l
LCAoaW50KWdldHBpZCgpKTsNCiAgICAtCQlvdXQgPSBmb3Blbih0bXBuYW1lLCAidyIpOw0KICAg
IC0JfQ0KICAgIC0JaWYgKCFvdXQpDQogICAgLQkJcmV0dXJuIDE7DQogICAgLQ0KICAgIC0JY29u
Zl93cml0ZV9oZWFkaW5nKG91dCwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7DQogICAgLQ0K
ICAgIC0JaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpDQogICAgLQkJc3ltX2NsZWFyX2FsbF92YWxp
ZCgpOw0KICAgIC0NCiAgICAtCW1lbnUgPSByb290bWVudS5saXN0Ow0KICAgIC0Jd2hpbGUgKG1l
bnUpIHsNCiAgICAtCQlzeW0gPSBtZW51LT5zeW07DQogICAgLQkJaWYgKCFzeW0pIHsNCiAgICAt
CQkJaWYgKCFtZW51X2lzX3Zpc2libGUobWVudSkpDQogICAgLQkJCQlnb3RvIG5leHQ7DQogICAg
LQkJCXN0ciA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsNCiAgICAtCQkJZnByaW50ZihvdXQsICJc
biINCiAgICAtCQkJCSAgICAgIiNcbiINCiAgICAtCQkJCSAgICAgIiMgJXNcbiINCiAgICAtCQkJ
CSAgICAgIiNcbiIsIHN0cik7DQogICAgLQkJCW5lZWRfbmV3bGluZSA9IGZhbHNlOw0KICAgIC0J
CX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRSkpIHsNCiAgICAtCQkJc3lt
X2NhbGNfdmFsdWUoc3ltKTsNCiAgICAtCQkJaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9XUklU
RSkpDQogICAgLQkJCQlnb3RvIG5leHQ7DQogICAgLQkJCWlmIChuZWVkX25ld2xpbmUpIHsNCiAg
ICAtCQkJCWZwcmludGYob3V0LCAiXG4iKTsNCiAgICAtCQkJCW5lZWRfbmV3bGluZSA9IGZhbHNl
Ow0KICAgIC0JCQl9DQogICAgLQkJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsNCiAgICAt
CQkJY29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29uZmlnX3ByaW50ZXJfY2IsIE5VTEwp
Ow0KICAgIC0JCX0NCiAgICAtDQogICAgLW5leHQ6DQogICAgLQkJaWYgKG1lbnUtPmxpc3QpIHsN
CiAgICAtCQkJbWVudSA9IG1lbnUtPmxpc3Q7DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCX0N
CiAgICAtCQlpZiAobWVudS0+bmV4dCkNCiAgICAtCQkJbWVudSA9IG1lbnUtPm5leHQ7DQogICAg
LQkJZWxzZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQpKSB7DQogICAgLQkJCWlmICghbWVu
dS0+c3ltICYmIG1lbnVfaXNfdmlzaWJsZShtZW51KSAmJg0KICAgIC0JCQkgICAgbWVudSAhPSAm
cm9vdG1lbnUpIHsNCiAgICAtCQkJCXN0ciA9IG1lbnVfZ2V0X3Byb21wdChtZW51KTsNCiAgICAt
CQkJCWZwcmludGYob3V0LCAiIyBlbmQgb2YgJXNcbiIsIHN0cik7DQogICAgLQkJCQluZWVkX25l
d2xpbmUgPSB0cnVlOw0KICAgIC0JCQl9DQogICAgLQkJCWlmIChtZW51LT5uZXh0KSB7DQogICAg
LQkJCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAg
LQkJfQ0KICAgIC0JfQ0KICAgIC0JZmNsb3NlKG91dCk7DQogICAgLQ0KICAgIC0JaWYgKCp0bXBu
YW1lKSB7DQogICAgLQkJaWYgKGlzX3NhbWUobmFtZSwgdG1wbmFtZSkpIHsNCiAgICAtCQkJY29u
Zl9tZXNzYWdlKCJObyBjaGFuZ2UgdG8gJXMiLCBuYW1lKTsNCiAgICAtCQkJdW5saW5rKHRtcG5h
bWUpOw0KICAgIC0JCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsNCiAgICAtCQkJcmV0dXJuIDA7
DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlzbnByaW50ZihvbGRuYW1lLCBzaXplb2Yob2xkbmFt
ZSksICIlcy5vbGQiLCBuYW1lKTsNCiAgICAtCQlyZW5hbWUobmFtZSwgb2xkbmFtZSk7DQogICAg
LQkJaWYgKHJlbmFtZSh0bXBuYW1lLCBuYW1lKSkNCiAgICAtCQkJcmV0dXJuIDE7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JY29uZl9tZXNzYWdlKCJjb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8gJXMi
LCBuYW1lKTsNCiAgICAtDQogICAgLQlzeW1fc2V0X2NoYW5nZV9jb3VudCgwKTsNCiAgICAtDQog
ICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogd3JpdGUgYSBkZXBlbmRlbmN5
IGZpbGUgYXMgdXNlZCBieSBrYnVpbGQgdG8gdHJhY2sgZGVwZW5kZW5jaWVzICovDQogICAgLXN0
YXRpYyBpbnQgY29uZl93cml0ZV9kZXAoY29uc3QgY2hhciAqbmFtZSkNCiAgICAtew0KICAgIC0J
c3RydWN0IGZpbGUgKmZpbGU7DQogICAgLQlGSUxFICpvdXQ7DQogICAgLQ0KICAgIC0Jb3V0ID0g
Zm9wZW4oIi4uY29uZmlnLnRtcCIsICJ3Iik7DQogICAgLQlpZiAoIW91dCkNCiAgICAtCQlyZXR1
cm4gMTsNCiAgICAtCWZwcmludGYob3V0LCAiZGVwc19jb25maWcgOj0gXFxcbiIpOw0KICAgIC0J
Zm9yIChmaWxlID0gZmlsZV9saXN0OyBmaWxlOyBmaWxlID0gZmlsZS0+bmV4dCkgew0KICAgIC0J
CWlmIChmaWxlLT5uZXh0KQ0KICAgIC0JCQlmcHJpbnRmKG91dCwgIlx0JXMgXFxcbiIsIGZpbGUt
Pm5hbWUpOw0KICAgIC0JCWVsc2UNCiAgICAtCQkJZnByaW50ZihvdXQsICJcdCVzXG4iLCBmaWxl
LT5uYW1lKTsNCiAgICAtCX0NCiAgICAtCWZwcmludGYob3V0LCAiXG4lczogXFxcbiINCiAgICAt
CQkgICAgICJcdCQoZGVwc19jb25maWcpXG5cbiIsIGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgp
KTsNCiAgICAtDQogICAgLQllbnZfd3JpdGVfZGVwKG91dCwgY29uZl9nZXRfYXV0b2NvbmZpZ19u
YW1lKCkpOw0KICAgIC0NCiAgICAtCWZwcmludGYob3V0LCAiXG4kKGRlcHNfY29uZmlnKTogO1xu
Iik7DQogICAgLQlmY2xvc2Uob3V0KTsNCiAgICAtDQogICAgLQlpZiAobWFrZV9wYXJlbnRfZGly
KG5hbWUpKQ0KICAgIC0JCXJldHVybiAxOw0KICAgIC0JcmVuYW1lKCIuLmNvbmZpZy50bXAiLCBu
YW1lKTsNCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGNv
bmZfdG91Y2hfZGVwcyh2b2lkKQ0KICAgIC17DQogICAgLQljb25zdCBjaGFyICpuYW1lOw0KICAg
IC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0JaW50IHJlcywgaTsNCiAgICAtDQogICAgLQlz
dHJjcHkoZGVwZmlsZV9wYXRoLCAiaW5jbHVkZS9jb25maWcvIik7DQogICAgLQlkZXBmaWxlX3By
ZWZpeF9sZW4gPSBzdHJsZW4oZGVwZmlsZV9wYXRoKTsNCiAgICAtDQogICAgLQluYW1lID0gY29u
Zl9nZXRfYXV0b2NvbmZpZ19uYW1lKCk7DQogICAgLQljb25mX3JlYWRfc2ltcGxlKG5hbWUsIFNf
REVGX0FVVE8pOw0KICAgIC0Jc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOw0KICAgIC0NCiAg
ICAtCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsNCiAgICAtCQlzeW1fY2FsY192YWx1ZShzeW0p
Ow0KICAgIC0JCWlmICgoc3ltLT5mbGFncyAmIFNZTUJPTF9OT19XUklURSkgfHwgIXN5bS0+bmFt
ZSkNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJ
VEUpIHsNCiAgICAtCQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfREVGX0FVVE8pIHsNCiAgICAt
CQkJCS8qDQogICAgLQkJCQkgKiBzeW1ib2wgaGFzIG9sZCBhbmQgbmV3IHZhbHVlLA0KICAgIC0J
CQkJICogc28gY29tcGFyZSB0aGVtLi4uDQogICAgLQkJCQkgKi8NCiAgICAtCQkJCXN3aXRjaCAo
c3ltLT50eXBlKSB7DQogICAgLQkJCQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCQkJCWNhc2UgU19U
UklTVEFURToNCiAgICAtCQkJCQlpZiAoc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09DQog
ICAgLQkJCQkJICAgIHN5bS0+ZGVmW1NfREVGX0FVVE9dLnRyaSkNCiAgICAtCQkJCQkJY29udGlu
dWU7DQogICAgLQkJCQkJYnJlYWs7DQogICAgLQkJCQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCQkJ
Y2FzZSBTX0hFWDoNCiAgICAtCQkJCWNhc2UgU19JTlQ6DQogICAgLQkJCQkJaWYgKCFzdHJjbXAo
c3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSwNCiAgICAtCQkJCQkJICAgIHN5bS0+ZGVmW1NfREVG
X0FVVE9dLnZhbCkpDQogICAgLQkJCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJCWJyZWFrOw0KICAg
IC0JCQkJZGVmYXVsdDoNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJCX0NCiAgICAtCQkJfSBl
bHNlIHsNCiAgICAtCQkJCS8qDQogICAgLQkJCQkgKiBJZiB0aGVyZSBpcyBubyBvbGQgdmFsdWUs
IG9ubHkgJ25vJyAodW5zZXQpDQogICAgLQkJCQkgKiBpcyBhbGxvd2VkIGFzIG5ldyB2YWx1ZS4N
CiAgICAtCQkJCSAqLw0KICAgIC0JCQkJc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCQkJCWNh
c2UgU19CT09MRUFOOg0KICAgIC0JCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCQkJCWlmIChz
eW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0gbm8pDQogICAgLQkJCQkJCWNvbnRpbnVlOw0K
ICAgIC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJZGVmYXVsdDoNCiAgICAtCQkJCQlicmVhazsNCiAg
ICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCX0gZWxzZSBpZiAoIShzeW0tPmZsYWdzICYgU1lN
Qk9MX0RFRl9BVVRPKSkNCiAgICAtCQkJLyogVGhlcmUgaXMgbmVpdGhlciBhbiBvbGQgbm9yIGEg
bmV3IHZhbHVlLiAqLw0KICAgIC0JCQljb250aW51ZTsNCiAgICAtCQkvKiBlbHNlDQogICAgLQkJ
ICoJVGhlcmUgaXMgYW4gb2xkIHZhbHVlLCBidXQgbm8gbmV3IHZhbHVlICgnbm8nICh1bnNldCkN
CiAgICAtCQkgKglpc24ndCBzYXZlZCBpbiBhdXRvLmNvbmYsIHNvIHRoZSBvbGQgdmFsdWUgaXMg
YWx3YXlzDQogICAgLQkJICoJZGlmZmVyZW50IGZyb20gJ25vJykuDQogICAgLQkJICovDQogICAg
LQ0KICAgIC0JCXJlcyA9IGNvbmZfdG91Y2hfZGVwKHN5bS0+bmFtZSk7DQogICAgLQkJaWYgKHJl
cykNCiAgICAtCQkJcmV0dXJuIHJlczsNCiAgICAtCX0NCiAgICAtDQogICAgLQlyZXR1cm4gMDsN
CiAgICAtfQ0KICAgIC0NCiAgICAtaW50IGNvbmZfd3JpdGVfYXV0b2NvbmYoaW50IG92ZXJ3cml0
ZSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0JY29uc3QgY2hhciAq
bmFtZTsNCiAgICAtCWNvbnN0IGNoYXIgKmF1dG9jb25mX25hbWUgPSBjb25mX2dldF9hdXRvY29u
ZmlnX25hbWUoKTsNCiAgICAtCUZJTEUgKm91dCwgKnRyaXN0YXRlLCAqb3V0X2g7DQogICAgLQlp
bnQgaTsNCiAgICAtDQogICAgLQlpZiAoIW92ZXJ3cml0ZSAmJiBpc19wcmVzZW50KGF1dG9jb25m
X25hbWUpKQ0KICAgIC0JCXJldHVybiAwOw0KICAgIC0NCiAgICAtCXN5bV9jbGVhcl9hbGxfdmFs
aWQoKTsNCiAgICAtDQogICAgLQljb25mX3dyaXRlX2RlcCgiaW5jbHVkZS9jb25maWcvYXV0by5j
b25mLmNtZCIpOw0KICAgIC0NCiAgICAtCWlmIChjb25mX3RvdWNoX2RlcHMoKSkNCiAgICAtCQly
ZXR1cm4gMTsNCiAgICAtDQogICAgLQlvdXQgPSBmb3BlbigiLnRtcGNvbmZpZyIsICJ3Iik7DQog
ICAgLQlpZiAoIW91dCkNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtDQogICAgLQl0cmlzdGF0ZSA9
IGZvcGVuKCIudG1wY29uZmlnX3RyaXN0YXRlIiwgInciKTsNCiAgICAtCWlmICghdHJpc3RhdGUp
IHsNCiAgICAtCQlmY2xvc2Uob3V0KTsNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtCX0NCiAgICAt
DQogICAgLQlvdXRfaCA9IGZvcGVuKCIudG1wY29uZmlnLmgiLCAidyIpOw0KICAgIC0JaWYgKCFv
dXRfaCkgew0KICAgIC0JCWZjbG9zZShvdXQpOw0KICAgIC0JCWZjbG9zZSh0cmlzdGF0ZSk7DQog
ICAgLQkJcmV0dXJuIDE7DQogICAgLQl9DQogICAgLQ0KICAgIC0JY29uZl93cml0ZV9oZWFkaW5n
KG91dCwgJmtjb25maWdfcHJpbnRlcl9jYiwgTlVMTCk7DQogICAgLQ0KICAgIC0JY29uZl93cml0
ZV9oZWFkaW5nKHRyaXN0YXRlLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwgTlVMTCk7DQogICAgLQ0K
ICAgIC0JY29uZl93cml0ZV9oZWFkaW5nKG91dF9oLCAmaGVhZGVyX3ByaW50ZXJfY2IsIE5VTEwp
Ow0KICAgIC0NCiAgICAtCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsNCiAgICAtCQlzeW1fY2Fs
Y192YWx1ZShzeW0pOw0KICAgIC0JCWlmICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpIHx8
ICFzeW0tPm5hbWUpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0NCiAgICAtCQkvKiB3cml0ZSBz
eW1ib2wgdG8gYXV0by5jb25mLCB0cmlzdGF0ZSBhbmQgaGVhZGVyIGZpbGVzICovDQogICAgLQkJ
Y29uZl93cml0ZV9zeW1ib2wob3V0LCBzeW0sICZrY29uZmlnX3ByaW50ZXJfY2IsICh2b2lkICop
MSk7DQogICAgLQ0KICAgIC0JCWNvbmZfd3JpdGVfc3ltYm9sKHRyaXN0YXRlLCBzeW0sICZ0cmlz
dGF0ZV9wcmludGVyX2NiLCAodm9pZCAqKTEpOw0KICAgIC0NCiAgICAtCQljb25mX3dyaXRlX3N5
bWJvbChvdXRfaCwgc3ltLCAmaGVhZGVyX3ByaW50ZXJfY2IsIE5VTEwpOw0KICAgIC0JfQ0KICAg
IC0JZmNsb3NlKG91dCk7DQogICAgLQlmY2xvc2UodHJpc3RhdGUpOw0KICAgIC0JZmNsb3NlKG91
dF9oKTsNCiAgICAtDQogICAgLQluYW1lID0gZ2V0ZW52KCJLQ09ORklHX0FVVE9IRUFERVIiKTsN
CiAgICAtCWlmICghbmFtZSkNCiAgICAtCQluYW1lID0gImluY2x1ZGUvZ2VuZXJhdGVkL2F1dG9j
b25mLmgiOw0KICAgIC0JaWYgKG1ha2VfcGFyZW50X2RpcihuYW1lKSkNCiAgICAtCQlyZXR1cm4g
MTsNCiAgICAtCWlmIChyZW5hbWUoIi50bXBjb25maWcuaCIsIG5hbWUpKQ0KICAgIC0JCXJldHVy
biAxOw0KICAgIC0NCiAgICAtCW5hbWUgPSBnZXRlbnYoIktDT05GSUdfVFJJU1RBVEUiKTsNCiAg
ICAtCWlmICghbmFtZSkNCiAgICAtCQluYW1lID0gImluY2x1ZGUvY29uZmlnL3RyaXN0YXRlLmNv
bmYiOw0KICAgIC0JaWYgKG1ha2VfcGFyZW50X2RpcihuYW1lKSkNCiAgICAtCQlyZXR1cm4gMTsN
CiAgICAtCWlmIChyZW5hbWUoIi50bXBjb25maWdfdHJpc3RhdGUiLCBuYW1lKSkNCiAgICAtCQly
ZXR1cm4gMTsNCiAgICAtDQogICAgLQlpZiAobWFrZV9wYXJlbnRfZGlyKGF1dG9jb25mX25hbWUp
KQ0KICAgIC0JCXJldHVybiAxOw0KICAgIC0JLyoNCiAgICAtCSAqIFRoaXMgbXVzdCBiZSB0aGUg
bGFzdCBzdGVwLCBrYnVpbGQgaGFzIGEgZGVwZW5kZW5jeSBvbiBhdXRvLmNvbmYNCiAgICAtCSAq
IGFuZCB0aGlzIG1hcmtzIHRoZSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb2YgdGhlIHByZXZpb3Vz
IHN0ZXBzLg0KICAgIC0JICovDQogICAgLQlpZiAocmVuYW1lKCIudG1wY29uZmlnIiwgYXV0b2Nv
bmZfbmFtZSkpDQogICAgLQkJcmV0dXJuIDE7DQogICAgLQ0KICAgIC0JcmV0dXJuIDA7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyBpbnQgc3ltX2NoYW5nZV9jb3VudDsNCiAgICAtc3RhdGlj
IHZvaWQgKCpjb25mX2NoYW5nZWRfY2FsbGJhY2spKHZvaWQpOw0KICAgIC0NCiAgICAtdm9pZCBz
eW1fc2V0X2NoYW5nZV9jb3VudChpbnQgY291bnQpDQogICAgLXsNCiAgICAtCWludCBfc3ltX2No
YW5nZV9jb3VudCA9IHN5bV9jaGFuZ2VfY291bnQ7DQogICAgLQlzeW1fY2hhbmdlX2NvdW50ID0g
Y291bnQ7DQogICAgLQlpZiAoY29uZl9jaGFuZ2VkX2NhbGxiYWNrICYmDQogICAgLQkgICAgKGJv
b2wpX3N5bV9jaGFuZ2VfY291bnQgIT0gKGJvb2wpY291bnQpDQogICAgLQkJY29uZl9jaGFuZ2Vk
X2NhbGxiYWNrKCk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgc3ltX2FkZF9jaGFuZ2VfY291
bnQoaW50IGNvdW50KQ0KICAgIC17DQogICAgLQlzeW1fc2V0X2NoYW5nZV9jb3VudChjb3VudCAr
IHN5bV9jaGFuZ2VfY291bnQpOw0KICAgIC19DQogICAgLQ0KICAgIC1ib29sIGNvbmZfZ2V0X2No
YW5nZWQodm9pZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIHN5bV9jaGFuZ2VfY291bnQ7DQogICAg
LX0NCiAgICAtDQogICAgLXZvaWQgY29uZl9zZXRfY2hhbmdlZF9jYWxsYmFjayh2b2lkICgqZm4p
KHZvaWQpKQ0KICAgIC17DQogICAgLQljb25mX2NoYW5nZWRfY2FsbGJhY2sgPSBmbjsNCiAgICAt
fQ0KICAgIC0NCiAgICAtc3RhdGljIGJvb2wgcmFuZG9taXplX2Nob2ljZV92YWx1ZXMoc3RydWN0
IHN5bWJvbCAqY3N5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAg
IC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IGV4cHIgKmU7DQogICAgLQlpbnQg
Y250LCBkZWY7DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAqIElmIGNob2ljZSBpcyBtb2QgdGhl
biB3ZSBtYXkgaGF2ZSBtb3JlIGl0ZW1zIHNlbGVjdGVkDQogICAgLQkgKiBhbmQgaWYgbm8gdGhl
biBuby1vbmUuDQogICAgLQkgKiBJbiBib3RoIGNhc2VzIHN0b3AuDQogICAgLQkgKi8NCiAgICAt
CWlmIChjc3ltLT5jdXJyLnRyaSAhPSB5ZXMpDQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0N
CiAgICAtCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNzeW0pOw0KICAgIC0NCiAgICAtCS8q
IGNvdW50IGVudHJpZXMgaW4gY2hvaWNlIGJsb2NrICovDQogICAgLQljbnQgPSAwOw0KICAgIC0J
ZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pDQogICAgLQkJY250Kys7
DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAqIGZpbmQgYSByYW5kb20gdmFsdWUgYW5kIHNldCBp
dCB0byB5ZXMsDQogICAgLQkgKiBzZXQgdGhlIHJlc3QgdG8gbm8gc28gd2UgaGF2ZSBvbmx5IG9u
ZSBzZXQNCiAgICAtCSAqLw0KICAgIC0JZGVmID0gKHJhbmQoKSAlIGNudCk7DQogICAgLQ0KICAg
IC0JY250ID0gMDsNCiAgICAtCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwg
c3ltKSB7DQogICAgLQkJaWYgKGRlZiA9PSBjbnQrKykgew0KICAgIC0JCQlzeW0tPmRlZltTX0RF
Rl9VU0VSXS50cmkgPSB5ZXM7DQogICAgLQkJCWNzeW0tPmRlZltTX0RFRl9VU0VSXS52YWwgPSBz
eW07DQogICAgLQkJfQ0KICAgIC0JCWVsc2Ugew0KICAgIC0JCQlzeW0tPmRlZltTX0RFRl9VU0VS
XS50cmkgPSBubzsNCiAgICAtCQl9DQogICAgLQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VT
RVI7DQogICAgLQkJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8NCiAg
ICAtCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfVkFMSUQ7DQogICAgLQl9DQogICAgLQljc3ltLT5m
bGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQogICAgLQkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFs
dWUgY2FsY3VsYXRlZCAqLw0KICAgIC0JY3N5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUQpOw0K
ICAgIC0NCiAgICAtCXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHNldF9h
bGxfY2hvaWNlX3ZhbHVlcyhzdHJ1Y3Qgc3ltYm9sICpjc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1
Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlzdHJ1
Y3QgZXhwciAqZTsNCiAgICAtDQogICAgLQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChjc3lt
KTsNCiAgICAtDQogICAgLQkvKg0KICAgIC0JICogU2V0IGFsbCBub24tYXNzaW5nZWQgY2hvaWNl
IHZhbHVlcyB0byBubw0KICAgIC0JICovDQogICAgLQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHBy
b3AtPmV4cHIsIGUsIHN5bSkgew0KICAgIC0JCWlmICghc3ltX2hhc192YWx1ZShzeW0pKQ0KICAg
IC0JCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsNCiAgICAtCX0NCiAgICAtCWNzeW0t
PmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsNCiAgICAtCS8qIGNsZWFyIFZBTElEIHRvIGdldCB2
YWx1ZSBjYWxjdWxhdGVkICovDQogICAgLQljc3ltLT5mbGFncyAmPSB+KFNZTUJPTF9WQUxJRCB8
IFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtYm9v
bCBjb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZW51bSBjb25mX2RlZl9tb2RlIG1vZGUpDQogICAg
LXsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bSwgKmNzeW07DQogICAgLQlpbnQgaSwgY250LCBw
YnksIHB0eSwgcHRtOwkvKiBwYnk6IHByb2JhYmlsaXR5IG9mIGJvb2wgICAgID0geQ0KICAgIC0J
CQkJCSAqIHB0eTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSB5DQogICAgLQkJCQkJICogcHRt
OiBwcm9iYWJpbGl0eSBvZiB0cmlzdGF0ZSA9IG0NCiAgICAtCQkJCQkgKi8NCiAgICAtDQogICAg
LQlwYnkgPSA1MDsgcHR5ID0gcHRtID0gMzM7IC8qIGNhbid0IGdvIGFzIHRoZSBkZWZhdWx0IGlu
IHN3aXRjaC1jYXNlDQogICAgLQkJCQkgICAqIGJlbG93LCBvdGhlcndpc2UgZ2NjIHdoaW5lcyBh
Ym91dA0KICAgIC0JCQkJICAgKiAtV21heWJlLXVuaW5pdGlhbGl6ZWQgKi8NCiAgICAtCWlmICht
b2RlID09IGRlZl9yYW5kb20pIHsNCiAgICAtCQlpbnQgbiwgcFszXTsNCiAgICAtCQljaGFyICpl
bnYgPSBnZXRlbnYoIktDT05GSUdfUFJPQkFCSUxJVFkiKTsNCiAgICAtCQluID0gMDsNCiAgICAt
CQl3aGlsZSggZW52ICYmICplbnYgKSB7DQogICAgLQkJCWNoYXIgKmVuZHA7DQogICAgLQkJCWlu
dCB0bXAgPSBzdHJ0b2woIGVudiwgJmVuZHAsIDEwICk7DQogICAgLQkJCWlmKCB0bXAgPj0gMCAm
JiB0bXAgPD0gMTAwICkgew0KICAgIC0JCQkJcFtuKytdID0gdG1wOw0KICAgIC0JCQl9IGVsc2Ug
ew0KICAgIC0JCQkJZXJybm8gPSBFUkFOR0U7DQogICAgLQkJCQlwZXJyb3IoICJLQ09ORklHX1BS
T0JBQklMSVRZIiApOw0KICAgIC0JCQkJZXhpdCggMSApOw0KICAgIC0JCQl9DQogICAgLQkJCWVu
diA9ICgqZW5kcCA9PSAnOicpID8gZW5kcCsxIDogZW5kcDsNCiAgICAtCQkJaWYoIG4gPj0zICkg
ew0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQl9DQogICAgLQkJc3dpdGNoKCBu
ICkgew0KICAgIC0JCWNhc2UgMToNCiAgICAtCQkJcGJ5ID0gcFswXTsgcHRtID0gcGJ5LzI7IHB0
eSA9IHBieS1wdG07DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgMjoNCiAgICAtCQkJcHR5
ID0gcFswXTsgcHRtID0gcFsxXTsgcGJ5ID0gcHR5ICsgcHRtOw0KICAgIC0JCQlicmVhazsNCiAg
ICAtCQljYXNlIDM6DQogICAgLQkJCXBieSA9IHBbMF07IHB0eSA9IHBbMV07IHB0bSA9IHBbMl07
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJaWYoIHB0eStwdG0gPiAx
MDAgKSB7DQogICAgLQkJCWVycm5vID0gRVJBTkdFOw0KICAgIC0JCQlwZXJyb3IoICJLQ09ORklH
X1BST0JBQklMSVRZIiApOw0KICAgIC0JCQlleGl0KCAxICk7DQogICAgLQkJfQ0KICAgIC0JfQ0K
ICAgIC0JYm9vbCBoYXNfY2hhbmdlZCA9IGZhbHNlOw0KICAgIC0NCiAgICAtCWZvcl9hbGxfc3lt
Ym9scyhpLCBzeW0pIHsNCiAgICAtCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pIHx8IChzeW0tPmZs
YWdzICYgU1lNQk9MX1ZBTElEKSkNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJc3dpdGNoIChz
eW1fZ2V0X3R5cGUoc3ltKSkgew0KICAgIC0JCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCWNhc2Ug
U19UUklTVEFURToNCiAgICAtCQkJaGFzX2NoYW5nZWQgPSB0cnVlOw0KICAgIC0JCQlzd2l0Y2gg
KG1vZGUpIHsNCiAgICAtCQkJY2FzZSBkZWZfeWVzOg0KICAgIC0JCQkJc3ltLT5kZWZbU19ERUZf
VVNFUl0udHJpID0geWVzOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgZGVmX21vZDoN
CiAgICAtCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG1vZDsNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0JCQljYXNlIGRlZl9ubzoNCiAgICAtCQkJCWlmIChzeW0tPmZsYWdzICYgU1lNQk9M
X0FMTE5PQ09ORklHX1kpDQogICAgLQkJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVz
Ow0KICAgIC0JCQkJZWxzZQ0KICAgIC0JCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5v
Ow0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgZGVmX3JhbmRvbToNCiAgICAtCQkJCXN5
bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG5vOw0KICAgIC0JCQkJY250ID0gcmFuZCgpICUgMTAw
Ow0KICAgIC0JCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7DQogICAgLQkJCQkJaWYg
KGNudCA8IHB0eSkNCiAgICAtCQkJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOw0K
ICAgIC0JCQkJCWVsc2UgaWYgKGNudCA8IChwdHkrcHRtKSkNCiAgICAtCQkJCQkJc3ltLT5kZWZb
U19ERUZfVVNFUl0udHJpID0gbW9kOw0KICAgIC0JCQkJfSBlbHNlIGlmIChjbnQgPCBwYnkpDQog
ICAgLQkJCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOw0KICAgIC0JCQkJYnJlYWs7
DQogICAgLQkJCWRlZmF1bHQ6DQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJfQ0KICAgIC0J
CQlpZiAoIShzeW1faXNfY2hvaWNlKHN5bSkgJiYgbW9kZSA9PSBkZWZfcmFuZG9tKSkNCiAgICAt
CQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgIC0JCQlicmVhazsNCiAgICAt
CQlkZWZhdWx0Og0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JfQ0KICAg
IC0NCiAgICAtCXN5bV9jbGVhcl9hbGxfdmFsaWQoKTsNCiAgICAtDQogICAgLQkvKg0KICAgIC0J
ICogV2UgaGF2ZSBkaWZmZXJlbnQgdHlwZSBvZiBjaG9pY2UgYmxvY2tzLg0KICAgIC0JICogSWYg
Y3Vyci50cmkgZXF1YWxzIHRvIG1vZCB0aGVuIHdlIGNhbiBzZWxlY3Qgc2V2ZXJhbA0KICAgIC0J
ICogY2hvaWNlIHN5bWJvbHMgaW4gb25lIGJsb2NrLg0KICAgIC0JICogSW4gdGhpcyBjYXNlIHdl
IGRvIG5vdGhpbmcuDQogICAgLQkgKiBJZiBjdXJyLnRyaSBlcXVhbHMgeWVzIHRoZW4gb25seSBv
bmUgc3ltYm9sIGNhbiBiZQ0KICAgIC0JICogc2VsZWN0ZWQgaW4gYSBjaG9pY2UgYmxvY2sgYW5k
IHdlIHNldCBpdCB0byB5ZXMsDQogICAgLQkgKiBhbmQgdGhlIHJlc3QgdG8gbm8uDQogICAgLQkg
Ki8NCiAgICAtCWlmIChtb2RlICE9IGRlZl9yYW5kb20pIHsNCiAgICAtCQlmb3JfYWxsX3N5bWJv
bHMoaSwgY3N5bSkgew0KICAgIC0JCQlpZiAoKHN5bV9pc19jaG9pY2UoY3N5bSkgJiYgIXN5bV9o
YXNfdmFsdWUoY3N5bSkpIHx8DQogICAgLQkJCSAgICBzeW1faXNfY2hvaWNlX3ZhbHVlKGNzeW0p
KQ0KICAgIC0JCQkJY3N5bS0+ZmxhZ3MgfD0gU1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVM7
DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWZvcl9hbGxfc3ltYm9scyhpLCBjc3lt
KSB7DQogICAgLQkJaWYgKHN5bV9oYXNfdmFsdWUoY3N5bSkgfHwgIXN5bV9pc19jaG9pY2UoY3N5
bSkpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0NCiAgICAtCQlzeW1fY2FsY192YWx1ZShjc3lt
KTsNCiAgICAtCQlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKQ0KICAgIC0JCQloYXNfY2hhbmdlZCA9
IHJhbmRvbWl6ZV9jaG9pY2VfdmFsdWVzKGNzeW0pOw0KICAgIC0JCWVsc2Ugew0KICAgIC0JCQlz
ZXRfYWxsX2Nob2ljZV92YWx1ZXMoY3N5bSk7DQogICAgLQkJCWhhc19jaGFuZ2VkID0gdHJ1ZTsN
CiAgICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIGhhc19jaGFuZ2VkOw0KICAg
IC19DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5jIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9leHByLmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCA3N2ZmZmYzLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9leHBy
LmMNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTI5NyArMCwwIEBADQogICAgLS8vIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLS8qDQogICAgLSAqIENvcHlyaWdo
dCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAtICov
DQogICAgLQ0KICAgIC0jaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAtI2luY2x1ZGUgPGVycm5vLmg+
DQogICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAg
LSNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAtDQogICAgLSNpbmNsdWRlICJsa2MuaCINCiAgICAt
DQogICAgLSNkZWZpbmUgREVCVUdfRVhQUgkwDQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGV4cHJf
ZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOw0KICAgIC1zdGF0aWMgc3RydWN0
IGV4cHIgKmV4cHJfZWxpbWluYXRlX3luKHN0cnVjdCBleHByICplKTsNCiAgICAtDQogICAgLXN0
cnVjdCBleHByICpleHByX2FsbG9jX3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsN
CiAgICAtCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsNCiAgICAtCWUt
PnR5cGUgPSBFX1NZTUJPTDsNCiAgICAtCWUtPmxlZnQuc3ltID0gc3ltOw0KICAgIC0JcmV0dXJu
IGU7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBleHByICpleHByX2FsbG9jX29uZShlbnVt
IGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpDQogICAgLXsNCiAgICAtCXN0cnVjdCBl
eHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsNCiAgICAtCWUtPnR5cGUgPSB0eXBlOw0K
ICAgIC0JZS0+bGVmdC5leHByID0gY2U7DQogICAgLQlyZXR1cm4gZTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0
cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZXhw
ciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7DQogICAgLQllLT50eXBlID0gdHlwZTsNCiAg
ICAtCWUtPmxlZnQuZXhwciA9IGUxOw0KICAgIC0JZS0+cmlnaHQuZXhwciA9IGUyOw0KICAgIC0J
cmV0dXJuIGU7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBleHByICpleHByX2FsbG9jX2Nv
bXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0cnVjdCBzeW1ib2wg
KnMyKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpl
KSk7DQogICAgLQllLT50eXBlID0gdHlwZTsNCiAgICAtCWUtPmxlZnQuc3ltID0gczE7DQogICAg
LQllLT5yaWdodC5zeW0gPSBzMjsNCiAgICAtCXJldHVybiBlOw0KICAgIC19DQogICAgLQ0KICAg
IC1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhw
ciAqZTIpDQogICAgLXsNCiAgICAtCWlmICghZTEpDQogICAgLQkJcmV0dXJuIGUyOw0KICAgIC0J
cmV0dXJuIGUyID8gZXhwcl9hbGxvY190d28oRV9BTkQsIGUxLCBlMikgOiBlMTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfb3Ioc3RydWN0IGV4cHIgKmUxLCBz
dHJ1Y3QgZXhwciAqZTIpDQogICAgLXsNCiAgICAtCWlmICghZTEpDQogICAgLQkJcmV0dXJuIGUy
Ow0KICAgIC0JcmV0dXJuIGUyID8gZXhwcl9hbGxvY190d28oRV9PUiwgZTEsIGUyKSA6IGUxOw0K
ICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNvbnN0IHN0cnVjdCBl
eHByICpvcmcpDQogICAgLXsNCiAgICAtCXN0cnVjdCBleHByICplOw0KICAgIC0NCiAgICAtCWlm
ICghb3JnKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0NCiAgICAtCWUgPSB4bWFsbG9jKHNp
emVvZigqb3JnKSk7DQogICAgLQltZW1jcHkoZSwgb3JnLCBzaXplb2YoKm9yZykpOw0KICAgIC0J
c3dpdGNoIChvcmctPnR5cGUpIHsNCiAgICAtCWNhc2UgRV9TWU1CT0w6DQogICAgLQkJZS0+bGVm
dCA9IG9yZy0+bGVmdDsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgRV9OT1Q6DQogICAgLQkJ
ZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsNCiAgICAtCQlicmVhazsN
CiAgICAtCWNhc2UgRV9FUVVBTDoNCiAgICAtCWNhc2UgRV9HRVE6DQogICAgLQljYXNlIEVfR1RI
Og0KICAgIC0JY2FzZSBFX0xFUToNCiAgICAtCWNhc2UgRV9MVEg6DQogICAgLQljYXNlIEVfVU5F
UVVBTDoNCiAgICAtCQllLT5sZWZ0LnN5bSA9IG9yZy0+bGVmdC5zeW07DQogICAgLQkJZS0+cmln
aHQuc3ltID0gb3JnLT5yaWdodC5zeW07DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfQU5E
Og0KICAgIC0JY2FzZSBFX09SOg0KICAgIC0JY2FzZSBFX0xJU1Q6DQogICAgLQkJZS0+bGVmdC5l
eHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsNCiAgICAtCQllLT5yaWdodC5leHByID0g
ZXhwcl9jb3B5KG9yZy0+cmlnaHQuZXhwcik7DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0
Og0KICAgIC0JCWZwcmludGYoc3RkZXJyLCAiY2FuJ3QgY29weSB0eXBlICVkXG4iLCBlLT50eXBl
KTsNCiAgICAtCQlmcmVlKGUpOw0KICAgIC0JCWUgPSBOVUxMOw0KICAgIC0JCWJyZWFrOw0KICAg
IC0JfQ0KICAgIC0NCiAgICAtCXJldHVybiBlOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIGV4
cHJfZnJlZShzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0JaWYgKCFlKQ0KICAgIC0JCXJl
dHVybjsNCiAgICAtDQogICAgLQlzd2l0Y2ggKGUtPnR5cGUpIHsNCiAgICAtCWNhc2UgRV9TWU1C
T0w6DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0JCWV4cHJfZnJlZShl
LT5sZWZ0LmV4cHIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAgIC0J
Y2FzZSBFX0dFUToNCiAgICAtCWNhc2UgRV9HVEg6DQogICAgLQljYXNlIEVfTEVROg0KICAgIC0J
Y2FzZSBFX0xUSDoNCiAgICAtCWNhc2UgRV9VTkVRVUFMOg0KICAgIC0JCWJyZWFrOw0KICAgIC0J
Y2FzZSBFX09SOg0KICAgIC0JY2FzZSBFX0FORDoNCiAgICAtCQlleHByX2ZyZWUoZS0+bGVmdC5l
eHByKTsNCiAgICAtCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQogICAgLQkJYnJlYWs7DQog
ICAgLQlkZWZhdWx0Og0KICAgIC0JCWZwcmludGYoc3RkZXJyLCAiaG93IHRvIGZyZWUgdHlwZSAl
ZD9cbiIsIGUtPnR5cGUpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JZnJlZShlKTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGludCB0cmFuc19jb3VudDsNCiAgICAtDQogICAg
LSNkZWZpbmUgZTEgKCplcDEpDQogICAgLSNkZWZpbmUgZTIgKCplcDIpDQogICAgLQ0KICAgIC0v
Kg0KICAgIC0gKiBleHByX2VsaW1pbmF0ZV9lcSgpIGhlbHBlci4NCiAgICAtICoNCiAgICAtICog
V2Fsa3MgdGhlIHR3byBleHByZXNzaW9uIHRyZWVzIGdpdmVuIGluICdlcDEnIGFuZCAnZXAyJy4g
QW55IG5vZGUgdGhhdCBkb2VzDQogICAgLSAqIG5vdCBoYXZlIHR5cGUgJ3R5cGUnIChFX09SL0Vf
QU5EKSBpcyBjb25zaWRlcmVkIGEgbGVhZiwgYW5kIGlzIGNvbXBhcmVkDQogICAgLSAqIGFnYWlu
c3QgYWxsIG90aGVyIGxlYXZlcy4gVHdvIGVxdWFsIGxlYXZlcyBhcmUgYm90aCByZXBsYWNlZCB3
aXRoIGVpdGhlciAneScNCiAgICAtICogb3IgJ24nIGFzIGFwcHJvcHJpYXRlIGZvciAndHlwZScs
IHRvIGJlIGVsaW1pbmF0ZWQgbGF0ZXIuDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9pZCBfX2V4
cHJfZWxpbWluYXRlX2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBleHByICoqZXAxLCBz
dHJ1Y3QgZXhwciAqKmVwMikNCiAgICAtew0KICAgIC0JLyogUmVjdXJzZSBkb3duIHRvIGxlYXZl
cyAqLw0KICAgIC0NCiAgICAtCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7DQogICAgLQkJX19leHBy
X2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUyKTsNCiAgICAtCQlfX2V4cHJf
ZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsNCiAgICAtCQlyZXR1cm47
DQogICAgLQl9DQogICAgLQlpZiAoZTItPnR5cGUgPT0gdHlwZSkgew0KICAgIC0JCV9fZXhwcl9l
bGltaW5hdGVfZXEodHlwZSwgJmUxLCAmZTItPmxlZnQuZXhwcik7DQogICAgLQkJX19leHByX2Vs
aW1pbmF0ZV9lcSh0eXBlLCAmZTEsICZlMi0+cmlnaHQuZXhwcik7DQogICAgLQkJcmV0dXJuOw0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCS8qIGUxIGFuZCBlMiBhcmUgbGVhdmVzLiBDb21wYXJlIHRo
ZW0uICovDQogICAgLQ0KICAgIC0JaWYgKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBl
ID09IEVfU1lNQk9MICYmDQogICAgLQkgICAgZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSAm
Jg0KICAgIC0JICAgIChlMS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMgfHwgZTEtPmxlZnQuc3lt
ID09ICZzeW1ib2xfbm8pKQ0KICAgIC0JCXJldHVybjsNCiAgICAtCWlmICghZXhwcl9lcShlMSwg
ZTIpKQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQkvKiBlMSBhbmQgZTIgYXJlIGVxdWFs
IGxlYXZlcy4gUHJlcGFyZSB0aGVtIGZvciBlbGltaW5hdGlvbi4gKi8NCiAgICAtDQogICAgLQl0
cmFuc19jb3VudCsrOw0KICAgIC0JZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVlKGUyKTsNCiAgICAt
CXN3aXRjaCAodHlwZSkgew0KICAgIC0JY2FzZSBFX09SOg0KICAgIC0JCWUxID0gZXhwcl9hbGxv
Y19zeW1ib2woJnN5bWJvbF9ubyk7DQogICAgLQkJZTIgPSBleHByX2FsbG9jX3N5bWJvbCgmc3lt
Ym9sX25vKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgRV9BTkQ6DQogICAgLQkJZTEgPSBl
eHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7DQogICAgLQkJZTIgPSBleHByX2FsbG9jX3N5
bWJvbCgmc3ltYm9sX3llcyk7DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0J
CTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogUmV3cml0ZXMgdGhl
IGV4cHJlc3Npb25zICdlcDEnIGFuZCAnZXAyJyB0byByZW1vdmUgb3BlcmFuZHMgY29tbW9uIHRv
IGJvdGguDQogICAgLSAqIEV4YW1wbGUgcmVkdWN0aW9uczoNCiAgICAtICoNCiAgICAtICoJZXAx
OiBBICYmIEIgICAgICAgICAgIC0+ICBlcDE6IHkNCiAgICAtICoJZXAyOiBBICYmIEIgJiYgQyAg
ICAgIC0+ICBlcDI6IEMNCiAgICAtICoNCiAgICAtICoJZXAxOiBBIHx8IEIgICAgICAgICAgIC0+
ICBlcDE6IG4NCiAgICAtICoJZXAyOiBBIHx8IEIgfHwgQyAgICAgIC0+ICBlcDI6IEMNCiAgICAt
ICoNCiAgICAtICoJZXAxOiBBICYmIChCICYmIEZPTykgIC0+ICBlcDE6IEZPTw0KICAgIC0gKgll
cDI6IChCQVIgJiYgQikgJiYgQSAgLT4gIGVwMjogQkFSDQogICAgLSAqDQogICAgLSAqCWVwMTog
QSAmJiAoQiB8fCBDKSAgICAtPiAgZXAxOiB5DQogICAgLSAqCWVwMjogKEMgfHwgQikgJiYgQSAg
ICAtPiAgZXAyOiB5DQogICAgLSAqDQogICAgLSAqIENvbXBhcmlzb25zIGFyZSBkb25lIGJldHdl
ZW4gYWxsIG9wZXJhbmRzIGF0IHRoZSBzYW1lICJsZXZlbCIgb2YgJiYgb3IgfHwuDQogICAgLSAq
IEZvciBleGFtcGxlLCBpbiB0aGUgZXhwcmVzc2lvbiAnZTEgJiYgKGUyIHx8IGUzKSAmJiAoZTQg
fHwgZTUpJywgdGhlDQogICAgLSAqIGZvbGxvd2luZyBvcGVyYW5kcyB3aWxsIGJlIGNvbXBhcmVk
Og0KICAgIC0gKg0KICAgIC0gKgktICdlMScsICdlMiB8fCBlMycsIGFuZCAnZTQgfHwgZTUnLCBh
Z2FpbnN0IGVhY2ggb3RoZXINCiAgICAtICoJLSBlMiBhZ2FpbnN0IGUzDQogICAgLSAqCS0gZTQg
YWdhaW5zdCBlNQ0KICAgIC0gKg0KICAgIC0gKiBQYXJlbnRoZXNlcyBhcmUgaXJyZWxldmFudCB3
aXRoaW4gYSBzaW5nbGUgbGV2ZWwuICdlMSAmJiAoZTIgJiYgZTMpJyBhbmQNCiAgICAtICogJyhl
MSAmJiBlMikgJiYgZTMnIGFyZSBib3RoIGEgc2luZ2xlIGxldmVsLg0KICAgIC0gKg0KICAgIC0g
KiBTZWUgX19leHByX2VsaW1pbmF0ZV9lcSgpIGFzIHdlbGwuDQogICAgLSAqLw0KICAgIC12b2lk
IGV4cHJfZWxpbWluYXRlX2VxKHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikN
CiAgICAtew0KICAgIC0JaWYgKCFlMSB8fCAhZTIpDQogICAgLQkJcmV0dXJuOw0KICAgIC0Jc3dp
dGNoIChlMS0+dHlwZSkgew0KICAgIC0JY2FzZSBFX09SOg0KICAgIC0JY2FzZSBFX0FORDoNCiAg
ICAtCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUxLT50eXBlLCBlcDEsIGVwMik7DQogICAgLQlkZWZh
dWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAgICAtCWlmIChlMS0+dHlwZSAhPSBlMi0+dHlwZSkg
c3dpdGNoIChlMi0+dHlwZSkgew0KICAgIC0JY2FzZSBFX09SOg0KICAgIC0JY2FzZSBFX0FORDoN
CiAgICAtCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUyLT50eXBlLCBlcDEsIGVwMik7DQogICAgLQlk
ZWZhdWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAgICAtCWUxID0gZXhwcl9lbGltaW5hdGVfeW4o
ZTEpOw0KICAgIC0JZTIgPSBleHByX2VsaW1pbmF0ZV95bihlMik7DQogICAgLX0NCiAgICAtDQog
ICAgLSN1bmRlZiBlMQ0KICAgIC0jdW5kZWYgZTINCiAgICAtDQogICAgLS8qDQogICAgLSAqIFJl
dHVybnMgdHJ1ZSBpZiAnZTEnIGFuZCAnZTInIGFyZSBlcXVhbCwgYWZ0ZXIgbWlub3Igc2ltcGxp
ZmljYXRpb24uIFR3bw0KICAgIC0gKiAmJi98fCBleHByZXNzaW9ucyBhcmUgY29uc2lkZXJlZCBl
cXVhbCBpZiBldmVyeSBvcGVyYW5kIGluIG9uZSBleHByZXNzaW9uDQogICAgLSAqIGVxdWFscyBz
b21lIG9wZXJhbmQgaW4gdGhlIG90aGVyIChvcGVyYW5kcyBkbyBub3QgbmVlZCB0byBhcHBlYXIg
aW4gdGhlIHNhbWUNCiAgICAtICogb3JkZXIpLCByZWN1cnNpdmVseS4NCiAgICAtICovDQogICAg
LXN0YXRpYyBpbnQgZXhwcl9lcShzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMikNCiAg
ICAtew0KICAgIC0JaW50IHJlcywgb2xkX2NvdW50Ow0KICAgIC0NCiAgICAtCWlmIChlMS0+dHlw
ZSAhPSBlMi0+dHlwZSkNCiAgICAtCQlyZXR1cm4gMDsNCiAgICAtCXN3aXRjaCAoZTEtPnR5cGUp
IHsNCiAgICAtCWNhc2UgRV9FUVVBTDoNCiAgICAtCWNhc2UgRV9HRVE6DQogICAgLQljYXNlIEVf
R1RIOg0KICAgIC0JY2FzZSBFX0xFUToNCiAgICAtCWNhc2UgRV9MVEg6DQogICAgLQljYXNlIEVf
VU5FUVVBTDoNCiAgICAtCQlyZXR1cm4gZTEtPmxlZnQuc3ltID09IGUyLT5sZWZ0LnN5bSAmJiBl
MS0+cmlnaHQuc3ltID09IGUyLT5yaWdodC5zeW07DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAg
IC0JCXJldHVybiBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltOw0KICAgIC0JY2FzZSBFX05P
VDoNCiAgICAtCQlyZXR1cm4gZXhwcl9lcShlMS0+bGVmdC5leHByLCBlMi0+bGVmdC5leHByKTsN
CiAgICAtCWNhc2UgRV9BTkQ6DQogICAgLQljYXNlIEVfT1I6DQogICAgLQkJZTEgPSBleHByX2Nv
cHkoZTEpOw0KICAgIC0JCWUyID0gZXhwcl9jb3B5KGUyKTsNCiAgICAtCQlvbGRfY291bnQgPSB0
cmFuc19jb3VudDsNCiAgICAtCQlleHByX2VsaW1pbmF0ZV9lcSgmZTEsICZlMik7DQogICAgLQkJ
cmVzID0gKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfU1lNQk9MICYmDQog
ICAgLQkJICAgICAgIGUxLT5sZWZ0LnN5bSA9PSBlMi0+bGVmdC5zeW0pOw0KICAgIC0JCWV4cHJf
ZnJlZShlMSk7DQogICAgLQkJZXhwcl9mcmVlKGUyKTsNCiAgICAtCQl0cmFuc19jb3VudCA9IG9s
ZF9jb3VudDsNCiAgICAtCQlyZXR1cm4gcmVzOw0KICAgIC0JY2FzZSBFX0xJU1Q6DQogICAgLQlj
YXNlIEVfUkFOR0U6DQogICAgLQljYXNlIEVfTk9ORToNCiAgICAtCQkvKiBwYW5pYyAqLzsNCiAg
ICAtCX0NCiAgICAtDQogICAgLQlpZiAoREVCVUdfRVhQUikgew0KICAgIC0JCWV4cHJfZnByaW50
KGUxLCBzdGRvdXQpOw0KICAgIC0JCXByaW50ZigiID0gIik7DQogICAgLQkJZXhwcl9mcHJpbnQo
ZTIsIHN0ZG91dCk7DQogICAgLQkJcHJpbnRmKCIgP1xuIik7DQogICAgLQl9DQogICAgLQ0KICAg
IC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIFJlY3Vyc2l2ZWx5
IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc2ltcGxpZmljYXRpb25zIGluLXBsYWNlIChhcyB3ZWxs
IGFzIHRoZQ0KICAgIC0gKiBjb3JyZXNwb25kaW5nIHNpbXBsaWZpY2F0aW9ucyB3aXRoIHN3YXBw
ZWQgb3BlcmFuZHMpOg0KICAgIC0gKg0KICAgIC0gKglleHByICYmIG4gIC0+ICBuDQogICAgLSAq
CWV4cHIgJiYgeSAgLT4gIGV4cHINCiAgICAtICoJZXhwciB8fCBuICAtPiAgZXhwcg0KICAgIC0g
KglleHByIHx8IHkgIC0+ICB5DQogICAgLSAqDQogICAgLSAqIFJldHVybnMgdGhlIG9wdGltaXpl
ZCBleHByZXNzaW9uLg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHN0cnVjdCBleHByICpleHByX2Vs
aW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0Jc3RydWN0IGV4cHIgKnRt
cDsNCiAgICAtDQogICAgLQlpZiAoZSkgc3dpdGNoIChlLT50eXBlKSB7DQogICAgLQljYXNlIEVf
QU5EOg0KICAgIC0JCWUtPmxlZnQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUtPmxlZnQuZXhw
cik7DQogICAgLQkJZS0+cmlnaHQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3luKGUtPnJpZ2h0LmV4
cHIpOw0KICAgIC0JCWlmIChlLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wpIHsNCiAgICAt
CQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAgIC0JCQkJ
ZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7DQogICAgLQkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhw
cik7DQogICAgLQkJCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCQllLT5sZWZ0LnN5bSA9
ICZzeW1ib2xfbm87DQogICAgLQkJCQllLT5yaWdodC5leHByID0gTlVMTDsNCiAgICAtCQkJCXJl
dHVybiBlOw0KICAgIC0JCQl9IGVsc2UgaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5
bWJvbF95ZXMpIHsNCiAgICAtCQkJCWZyZWUoZS0+bGVmdC5leHByKTsNCiAgICAtCQkJCXRtcCA9
IGUtPnJpZ2h0LmV4cHI7DQogICAgLQkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7DQogICAgLQkJ
CQlmcmVlKHRtcCk7DQogICAgLQkJCQlyZXR1cm4gZTsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAg
ICAtCQlpZiAoZS0+cmlnaHQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCkgew0KICAgIC0JCQlpZiAo
ZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAgIC0JCQkJZXhwcl9m
cmVlKGUtPmxlZnQuZXhwcik7DQogICAgLQkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQog
ICAgLQkJCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1i
b2xfbm87DQogICAgLQkJCQllLT5yaWdodC5leHByID0gTlVMTDsNCiAgICAtCQkJCXJldHVybiBl
Ow0KICAgIC0JCQl9IGVsc2UgaWYgKGUtPnJpZ2h0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xf
eWVzKSB7DQogICAgLQkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOw0KICAgIC0JCQkJdG1wID0gZS0+
bGVmdC5leHByOw0KICAgIC0JCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7DQogICAgLQkJCQlmcmVl
KHRtcCk7DQogICAgLQkJCQlyZXR1cm4gZTsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCQli
cmVhazsNCiAgICAtCWNhc2UgRV9PUjoNCiAgICAtCQllLT5sZWZ0LmV4cHIgPSBleHByX2VsaW1p
bmF0ZV95bihlLT5sZWZ0LmV4cHIpOw0KICAgIC0JCWUtPnJpZ2h0LmV4cHIgPSBleHByX2VsaW1p
bmF0ZV95bihlLT5yaWdodC5leHByKTsNCiAgICAtCQlpZiAoZS0+bGVmdC5leHByLT50eXBlID09
IEVfU1lNQk9MKSB7DQogICAgLQkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1i
b2xfbm8pIHsNCiAgICAtCQkJCWZyZWUoZS0+bGVmdC5leHByKTsNCiAgICAtCQkJCXRtcCA9IGUt
PnJpZ2h0LmV4cHI7DQogICAgLQkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7DQogICAgLQkJCQlm
cmVlKHRtcCk7DQogICAgLQkJCQlyZXR1cm4gZTsNCiAgICAtCQkJfSBlbHNlIGlmIChlLT5sZWZ0
LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7DQogICAgLQkJCQlleHByX2ZyZWUoZS0+
bGVmdC5leHByKTsNCiAgICAtCQkJCWV4cHJfZnJlZShlLT5yaWdodC5leHByKTsNCiAgICAtCQkJ
CWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICAtCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF95ZXM7
DQogICAgLQkJCQllLT5yaWdodC5leHByID0gTlVMTDsNCiAgICAtCQkJCXJldHVybiBlOw0KICAg
IC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWlmIChlLT5yaWdodC5leHByLT50eXBlID09IEVfU1lN
Qk9MKSB7DQogICAgLQkJCWlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25v
KSB7DQogICAgLQkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOw0KICAgIC0JCQkJdG1wID0gZS0+bGVm
dC5leHByOw0KICAgIC0JCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7DQogICAgLQkJCQlmcmVlKHRt
cCk7DQogICAgLQkJCQlyZXR1cm4gZTsNCiAgICAtCQkJfSBlbHNlIGlmIChlLT5yaWdodC5leHBy
LT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgew0KICAgIC0JCQkJZXhwcl9mcmVlKGUtPmxlZnQu
ZXhwcik7DQogICAgLQkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQogICAgLQkJCQllLT50
eXBlID0gRV9TWU1CT0w7DQogICAgLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfeWVzOw0KICAg
IC0JCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgLQkJCQlyZXR1cm4gZTsNCiAgICAtCQkJ
fQ0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAg
IC0JfQ0KICAgIC0JcmV0dXJuIGU7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIGJv
b2wgRk9PIT1uID0+IEZPTw0KICAgIC0gKi8NCiAgICAtc3RydWN0IGV4cHIgKmV4cHJfdHJhbnNf
Ym9vbChzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0JaWYgKCFlKQ0KICAgIC0JCXJldHVy
biBOVUxMOw0KICAgIC0Jc3dpdGNoIChlLT50eXBlKSB7DQogICAgLQljYXNlIEVfQU5EOg0KICAg
IC0JY2FzZSBFX09SOg0KICAgIC0JY2FzZSBFX05PVDoNCiAgICAtCQllLT5sZWZ0LmV4cHIgPSBl
eHByX3RyYW5zX2Jvb2woZS0+bGVmdC5leHByKTsNCiAgICAtCQllLT5yaWdodC5leHByID0gZXhw
cl90cmFuc19ib29sKGUtPnJpZ2h0LmV4cHIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBF
X1VORVFVQUw6DQogICAgLQkJLy8gRk9PIT1uIC0+IEZPTw0KICAgIC0JCWlmIChlLT5sZWZ0LnN5
bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7DQogICAgLQkJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5
bWJvbF9ubykgew0KICAgIC0JCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0KICAgIC0JCQkJZS0+cmln
aHQuc3ltID0gTlVMTDsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAt
CWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIGU7DQogICAgLX0NCiAg
ICAtDQogICAgLS8qDQogICAgLSAqIGUxIHx8IGUyIC0+ID8NCiAgICAtICovDQogICAgLXN0YXRp
YyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX29yKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIg
KmUyKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZXhwciAqdG1wOw0KICAgIC0Jc3RydWN0IHN5bWJv
bCAqc3ltMSwgKnN5bTI7DQogICAgLQ0KICAgIC0JaWYgKGV4cHJfZXEoZTEsIGUyKSkNCiAgICAt
CQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsNCiAgICAtCWlmIChlMS0+dHlwZSAhPSBFX0VRVUFMICYm
IGUxLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMS0+dHlw
ZSAhPSBFX05PVCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtCWlmIChlMi0+dHlwZSAhPSBF
X0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJPTCAm
JiBlMi0+dHlwZSAhPSBFX05PVCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtCWlmIChlMS0+
dHlwZSA9PSBFX05PVCkgew0KICAgIC0JCXRtcCA9IGUxLT5sZWZ0LmV4cHI7DQogICAgLQkJaWYg
KHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1VORVFVQUwgJiYgdG1wLT50
eXBlICE9IEVfU1lNQk9MKQ0KICAgIC0JCQlyZXR1cm4gTlVMTDsNCiAgICAtCQlzeW0xID0gdG1w
LT5sZWZ0LnN5bTsNCiAgICAtCX0gZWxzZQ0KICAgIC0JCXN5bTEgPSBlMS0+bGVmdC5zeW07DQog
ICAgLQlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsNCiAgICAtCQlpZiAoZTItPmxlZnQuZXhwci0+
dHlwZSAhPSBFX1NZTUJPTCkNCiAgICAtCQkJcmV0dXJuIE5VTEw7DQogICAgLQkJc3ltMiA9IGUy
LT5sZWZ0LmV4cHItPmxlZnQuc3ltOw0KICAgIC0JfSBlbHNlDQogICAgLQkJc3ltMiA9IGUyLT5s
ZWZ0LnN5bTsNCiAgICAtCWlmIChzeW0xICE9IHN5bTIpDQogICAgLQkJcmV0dXJuIE5VTEw7DQog
ICAgLQlpZiAoc3ltMS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RSSVNU
QVRFKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0JaWYgKHN5bTEtPnR5cGUgPT0gU19UUklT
VEFURSkgew0KICAgIC0JCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVf
RVFVQUwgJiYNCiAgICAtCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzICYmIGUy
LT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8DQogICAgLQkJICAgICAoZTEtPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpIHsNCiAg
ICAtCQkJLy8gKGE9J3knKSB8fCAoYT0nbScpIC0+IChhIT0nbicpDQogICAgLQkJCXJldHVybiBl
eHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX25vKTsNCiAgICAtCQl9DQog
ICAgLQkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJg0K
ICAgIC0JCSAgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX25vKSB8fA0KICAgIC0JCSAgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJv
bF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpIHsNCiAgICAtCQkJLy8gKGE9
J3knKSB8fCAoYT0nbicpIC0+IChhIT0nbScpDQogICAgLQkJCXJldHVybiBleHByX2FsbG9jX2Nv
bXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7DQogICAgLQkJfQ0KICAgIC0JCWlmIChl
MS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYNCiAgICAtCQkgICAg
KChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJv
bF9ubykgfHwNCiAgICAtCQkgICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8gJiYgZTIt
PnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkpKSB7DQogICAgLQkJCS8vIChhPSdtJykgfHwgKGE9
J24nKSAtPiAoYSE9J3knKQ0KICAgIC0JCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfVU5FUVVB
TCwgc3ltMSwgJnN5bWJvbF95ZXMpOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWlmIChzeW0x
LT50eXBlID09IFNfQk9PTEVBTiAmJiBzeW0xID09IHN5bTIpIHsNCiAgICAtCQlpZiAoKGUxLT50
eXBlID09IEVfTk9UICYmIGUxLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5
cGUgPT0gRV9TWU1CT0wpIHx8DQogICAgLQkJICAgIChlMi0+dHlwZSA9PSBFX05PVCAmJiBlMi0+
bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfU1lNQk9MKSkNCiAg
ICAtCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsNCiAgICAtCX0NCiAg
ICAtDQogICAgLQlpZiAoREVCVUdfRVhQUikgew0KICAgIC0JCXByaW50Zigib3B0aW1pemUgKCIp
Ow0KICAgIC0JCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOw0KICAgIC0JCXByaW50ZigiKSB8fCAo
Iik7DQogICAgLQkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7DQogICAgLQkJcHJpbnRmKCIpP1xu
Iik7DQogICAgLQl9DQogICAgLQlyZXR1cm4gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3Rh
dGljIHN0cnVjdCBleHByICpleHByX2pvaW5fYW5kKHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4
cHIgKmUyKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZXhwciAqdG1wOw0KICAgIC0Jc3RydWN0IHN5
bWJvbCAqc3ltMSwgKnN5bTI7DQogICAgLQ0KICAgIC0JaWYgKGV4cHJfZXEoZTEsIGUyKSkNCiAg
ICAtCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsNCiAgICAtCWlmIChlMS0+dHlwZSAhPSBFX0VRVUFM
ICYmIGUxLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZTUJPTCAmJiBlMS0+
dHlwZSAhPSBFX05PVCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtCWlmIChlMi0+dHlwZSAh
PSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSAhPSBFX1NZTUJP
TCAmJiBlMi0+dHlwZSAhPSBFX05PVCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtCWlmIChl
MS0+dHlwZSA9PSBFX05PVCkgew0KICAgIC0JCXRtcCA9IGUxLT5sZWZ0LmV4cHI7DQogICAgLQkJ
aWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1VORVFVQUwgJiYgdG1w
LT50eXBlICE9IEVfU1lNQk9MKQ0KICAgIC0JCQlyZXR1cm4gTlVMTDsNCiAgICAtCQlzeW0xID0g
dG1wLT5sZWZ0LnN5bTsNCiAgICAtCX0gZWxzZQ0KICAgIC0JCXN5bTEgPSBlMS0+bGVmdC5zeW07
DQogICAgLQlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsNCiAgICAtCQlpZiAoZTItPmxlZnQuZXhw
ci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICAtCQkJcmV0dXJuIE5VTEw7DQogICAgLQkJc3ltMiA9
IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOw0KICAgIC0JfSBlbHNlDQogICAgLQkJc3ltMiA9IGUy
LT5sZWZ0LnN5bTsNCiAgICAtCWlmIChzeW0xICE9IHN5bTIpDQogICAgLQkJcmV0dXJuIE5VTEw7
DQogICAgLQlpZiAoc3ltMS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+dHlwZSAhPSBTX1RS
SVNUQVRFKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0NCiAgICAtCWlmICgoZTEtPnR5cGUg
PT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09ICZz
eW1ib2xfeWVzKSB8fA0KICAgIC0JICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlw
ZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpKQ0KICAgIC0JCS8v
IChhKSAmJiAoYT0neScpIC0+IChhPSd5JykNCiAgICAtCQlyZXR1cm4gZXhwcl9hbGxvY19jb21w
KEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsNCiAgICAtDQogICAgLQlpZiAoKGUxLT50eXBl
ID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+cmlnaHQuc3ltID09
ICZzeW1ib2xfbm8pIHx8DQogICAgLQkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50
eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pKQ0KICAgIC0J
CS8vIChhKSAmJiAoYSE9J24nKSAtPiAoYSkNCiAgICAtCQlyZXR1cm4gZXhwcl9hbGxvY19zeW1i
b2woc3ltMSk7DQogICAgLQ0KICAgIC0JaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+
dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkgfHwNCiAg
ICAtCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYm
IGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKQ0KICAgIC0JCS8vIChhKSAmJiAoYSE9J20n
KSAtPiAoYT0neScpDQogICAgLQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0x
LCAmc3ltYm9sX3llcyk7DQogICAgLQ0KICAgIC0JaWYgKHN5bTEtPnR5cGUgPT0gU19UUklTVEFU
RSkgew0KICAgIC0JCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfVU5F
UVVBTCkgew0KICAgIC0JCQkvLyAoYT0nYicpICYmIChhIT0nYycpIC0+ICdiJz0nYycgPyAnbicg
OiBhPSdiJw0KICAgIC0JCQlzeW0yID0gZTEtPnJpZ2h0LnN5bTsNCiAgICAtCQkJaWYgKChlMi0+
cmlnaHQuc3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCkgJiYgKHN5bTItPmZsYWdzICYgU1lNQk9M
X0NPTlNUKSkNCiAgICAtCQkJCXJldHVybiBzeW0yICE9IGUyLT5yaWdodC5zeW0gPyBleHByX2Fs
bG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgc3ltMikNCiAgICAtCQkJCQkJCSAgICAgOiBleHByX2Fs
bG9jX3N5bWJvbCgmc3ltYm9sX25vKTsNCiAgICAtCQl9DQogICAgLQkJaWYgKGUxLT50eXBlID09
IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMKSB7DQogICAgLQkJCS8vIChhPSdiJykg
JiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICduJyA6IGE9J2InDQogICAgLQkJCXN5bTIgPSBlMi0+
cmlnaHQuc3ltOw0KICAgIC0JCQlpZiAoKGUxLT5yaWdodC5zeW0tPmZsYWdzICYgU1lNQk9MX0NP
TlNUKSAmJiAoc3ltMi0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpKQ0KICAgIC0JCQkJcmV0dXJuIHN5
bTIgIT0gZTEtPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCBzeW0y
KQ0KICAgIC0JCQkJCQkJICAgICA6IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOw0KICAg
IC0JCX0NCiAgICAtCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUyLT50eXBlID09IEVf
VU5FUVVBTCAmJg0KICAgIC0JCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYg
ZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fA0KICAgIC0JCQkgICAgKGUxLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpDQogICAg
LQkJCS8vIChhIT0neScpICYmIChhIT0nbicpIC0+IChhPSdtJykNCiAgICAtCQkJcmV0dXJuIGV4
cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7DQogICAgLQ0KICAgIC0J
CWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmDQog
ICAgLQkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyAmJiBlMi0+cmlnaHQuc3lt
ID09ICZzeW1ib2xfbW9kKSB8fA0KICAgIC0JCQkgICAgKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJv
bF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKQ0KICAgIC0JCQkvLyAoYSE9
J3knKSAmJiAoYSE9J20nKSAtPiAoYT0nbicpDQogICAgLQkJCXJldHVybiBleHByX2FsbG9jX2Nv
bXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF9ubyk7DQogICAgLQ0KICAgIC0JCWlmIChlMS0+dHlw
ZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmDQogICAgLQkJCSAgICgo
ZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xf
bm8pIHx8DQogICAgLQkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vICYmIGUyLT5y
aWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkNCiAgICAtCQkJLy8gKGEhPSdtJykgJiYgKGEhPSdu
JykgLT4gKGE9J20nKQ0KICAgIC0JCQlyZXR1cm4gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5
bTEsICZzeW1ib2xfeWVzKTsNCiAgICAtDQogICAgLQkJaWYgKChlMS0+dHlwZSA9PSBFX1NZTUJP
TCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2Qp
IHx8DQogICAgLQkJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+dHlwZSA9PSBFX0VR
VUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8DQogICAgLQkJICAgIChlMS0+
dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX3llcykgfHwNCiAgICAtCQkgICAgKGUyLT50eXBlID09IEVfU1lNQk9MICYm
IGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkN
CiAgICAtCQkJcmV0dXJuIE5VTEw7DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKERFQlVHX0VY
UFIpIHsNCiAgICAtCQlwcmludGYoIm9wdGltaXplICgiKTsNCiAgICAtCQlleHByX2ZwcmludChl
MSwgc3Rkb3V0KTsNCiAgICAtCQlwcmludGYoIikgJiYgKCIpOw0KICAgIC0JCWV4cHJfZnByaW50
KGUyLCBzdGRvdXQpOw0KICAgIC0JCXByaW50ZigiKT9cbiIpOw0KICAgIC0JfQ0KICAgIC0JcmV0
dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIGV4cHJfZWxpbWluYXRl
X2R1cHMoKSBoZWxwZXIuDQogICAgLSAqDQogICAgLSAqIFdhbGtzIHRoZSB0d28gZXhwcmVzc2lv
biB0cmVlcyBnaXZlbiBpbiAnZXAxJyBhbmQgJ2VwMicuIEFueSBub2RlIHRoYXQgZG9lcw0KICAg
IC0gKiBub3QgaGF2ZSB0eXBlICd0eXBlJyAoRV9PUi9FX0FORCkgaXMgY29uc2lkZXJlZCBhIGxl
YWYsIGFuZCBpcyBjb21wYXJlZA0KICAgIC0gKiBhZ2FpbnN0IGFsbCBvdGhlciBsZWF2ZXMgdG8g
bG9vayBmb3Igc2ltcGxpZmljYXRpb25zLg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgZXhw
cl9lbGltaW5hdGVfZHVwczEoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKiplcDEs
IHN0cnVjdCBleHByICoqZXAyKQ0KICAgIC17DQogICAgLSNkZWZpbmUgZTEgKCplcDEpDQogICAg
LSNkZWZpbmUgZTIgKCplcDIpDQogICAgLQlzdHJ1Y3QgZXhwciAqdG1wOw0KICAgIC0NCiAgICAt
CS8qIFJlY3Vyc2UgZG93biB0byBsZWF2ZXMgKi8NCiAgICAtDQogICAgLQlpZiAoZTEtPnR5cGUg
PT0gdHlwZSkgew0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMS0+bGVmdC5l
eHByLCAmZTIpOw0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMS0+cmlnaHQu
ZXhwciwgJmUyKTsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQlpZiAoZTItPnR5cGUg
PT0gdHlwZSkgew0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMSwgJmUyLT5s
ZWZ0LmV4cHIpOw0KICAgIC0JCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUsICZlMSwgJmUyLT5y
aWdodC5leHByKTsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JLyogZTEg
YW5kIGUyIGFyZSBsZWF2ZXMuIENvbXBhcmUgYW5kIHByb2Nlc3MgdGhlbS4gKi8NCiAgICAtDQog
ICAgLQlpZiAoZTEgPT0gZTIpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCXN3aXRjaCAo
ZTEtPnR5cGUpIHsNCiAgICAtCWNhc2UgRV9PUjogY2FzZSBFX0FORDoNCiAgICAtCQlleHByX2Vs
aW1pbmF0ZV9kdXBzMShlMS0+dHlwZSwgJmUxLCAmZTEpOw0KICAgIC0JZGVmYXVsdDoNCiAgICAt
CQk7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3dpdGNoICh0eXBlKSB7DQogICAgLQljYXNlIEVf
T1I6DQogICAgLQkJdG1wID0gZXhwcl9qb2luX29yKGUxLCBlMik7DQogICAgLQkJaWYgKHRtcCkg
ew0KICAgIC0JCQlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUoZTIpOw0KICAgIC0JCQllMSA9IGV4
cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOw0KICAgIC0JCQllMiA9IHRtcDsNCiAgICAtCQkJ
dHJhbnNfY291bnQrKzsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfQU5E
Og0KICAgIC0JCXRtcCA9IGV4cHJfam9pbl9hbmQoZTEsIGUyKTsNCiAgICAtCQlpZiAodG1wKSB7
DQogICAgLQkJCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7DQogICAgLQkJCWUxID0gZXhw
cl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOw0KICAgIC0JCQllMiA9IHRtcDsNCiAgICAtCQkJ
dHJhbnNfY291bnQrKzsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0K
ICAgIC0JCTsNCiAgICAtCX0NCiAgICAtI3VuZGVmIGUxDQogICAgLSN1bmRlZiBlMg0KICAgIC19
DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBSZXdyaXRlcyAnZScgaW4tcGxhY2UgdG8gcmVtb3Zl
ICgiam9pbiIpIGR1cGxpY2F0ZSBhbmQgb3RoZXIgcmVkdW5kYW50DQogICAgLSAqIG9wZXJhbmRz
Lg0KICAgIC0gKg0KICAgIC0gKiBFeGFtcGxlIHNpbXBsaWZpY2F0aW9uczoNCiAgICAtICoNCiAg
ICAtICoJQSB8fCBCIHx8IEEgICAgLT4gIEEgfHwgQg0KICAgIC0gKglBICYmIEIgJiYgQT15ICAt
PiAgQT15ICYmIEINCiAgICAtICoNCiAgICAtICogUmV0dXJucyB0aGUgZGVkdXBsaWNhdGVkIGV4
cHJlc3Npb24uDQogICAgLSAqLw0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfZHVw
cyhzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0JaW50IG9sZGNvdW50Ow0KICAgIC0JaWYg
KCFlKQ0KICAgIC0JCXJldHVybiBlOw0KICAgIC0NCiAgICAtCW9sZGNvdW50ID0gdHJhbnNfY291
bnQ7DQogICAgLQl3aGlsZSAoMSkgew0KICAgIC0JCXRyYW5zX2NvdW50ID0gMDsNCiAgICAtCQlz
d2l0Y2ggKGUtPnR5cGUpIHsNCiAgICAtCQljYXNlIEVfT1I6IGNhc2UgRV9BTkQ6DQogICAgLQkJ
CWV4cHJfZWxpbWluYXRlX2R1cHMxKGUtPnR5cGUsICZlLCAmZSk7DQogICAgLQkJZGVmYXVsdDoN
CiAgICAtCQkJOw0KICAgIC0JCX0NCiAgICAtCQlpZiAoIXRyYW5zX2NvdW50KQ0KICAgIC0JCQkv
KiBObyBzaW1wbGlmaWNhdGlvbnMgZG9uZSBpbiB0aGlzIHBhc3MuIFdlJ3JlIGRvbmUgKi8NCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJZSA9IGV4cHJfZWxpbWluYXRlX3luKGUpOw0KICAgIC0JfQ0K
ICAgIC0JdHJhbnNfY291bnQgPSBvbGRjb3VudDsNCiAgICAtCXJldHVybiBlOw0KICAgIC19DQog
ICAgLQ0KICAgIC0vKg0KICAgIC0gKiBQZXJmb3JtcyB2YXJpb3VzIHNpbXBsaWZpY2F0aW9ucyBp
bnZvbHZpbmcgbG9naWNhbCBvcGVyYXRvcnMgYW5kDQogICAgLSAqIGNvbXBhcmlzb25zLg0KICAg
IC0gKg0KICAgIC0gKiBBbGxvY2F0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXhwcmVzc2lvbi4NCiAg
ICAtICovDQogICAgLXN0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAqZSkN
CiAgICAtew0KICAgIC0Jc3RydWN0IGV4cHIgKnRtcDsNCiAgICAtDQogICAgLQlpZiAoIWUpDQog
ICAgLQkJcmV0dXJuIE5VTEw7DQogICAgLQlzd2l0Y2ggKGUtPnR5cGUpIHsNCiAgICAtCWNhc2Ug
RV9FUVVBTDoNCiAgICAtCWNhc2UgRV9HRVE6DQogICAgLQljYXNlIEVfR1RIOg0KICAgIC0JY2Fz
ZSBFX0xFUToNCiAgICAtCWNhc2UgRV9MVEg6DQogICAgLQljYXNlIEVfVU5FUVVBTDoNCiAgICAt
CWNhc2UgRV9TWU1CT0w6DQogICAgLQljYXNlIEVfTElTVDoNCiAgICAtCQlicmVhazsNCiAgICAt
CWRlZmF1bHQ6DQogICAgLQkJZS0+bGVmdC5leHByID0gZXhwcl90cmFuc2Zvcm0oZS0+bGVmdC5l
eHByKTsNCiAgICAtCQllLT5yaWdodC5leHByID0gZXhwcl90cmFuc2Zvcm0oZS0+cmlnaHQuZXhw
cik7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3dpdGNoIChlLT50eXBlKSB7DQogICAgLQljYXNl
IEVfRVFVQUw6DQogICAgLQkJaWYgKGUtPmxlZnQuc3ltLT50eXBlICE9IFNfQk9PTEVBTikNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB7DQog
ICAgLQkJCWUtPnR5cGUgPSBFX05PVDsNCiAgICAtCQkJZS0+bGVmdC5leHByID0gZXhwcl9hbGxv
Y19zeW1ib2woZS0+bGVmdC5zeW0pOw0KICAgIC0JCQllLT5yaWdodC5zeW0gPSBOVUxMOw0KICAg
IC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X21vZCkgew0KICAgIC0JCQlwcmludGYoImJvb2xlYW4gc3ltYm9sICVzIHRlc3RlZCBmb3IgJ20n
PyB0ZXN0IGZvcmNlZCB0byAnbidcbiIsIGUtPmxlZnQuc3ltLT5uYW1lKTsNCiAgICAtCQkJZS0+
dHlwZSA9IEVfU1lNQk9MOw0KICAgIC0JCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87DQogICAg
LQkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAt
CQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7DQogICAgLQkJCWUtPnR5cGUgPSBF
X1NZTUJPTDsNCiAgICAtCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICAtCQkJYnJlYWs7DQog
ICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX1VORVFVQUw6DQogICAgLQkJaWYg
KGUtPmxlZnQuc3ltLT50eXBlICE9IFNfQk9PTEVBTikNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
aWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB7DQogICAgLQkJCWUtPnR5cGUgPSBFX1NZ
TUJPTDsNCiAgICAtCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICAtCQkJYnJlYWs7DQogICAg
LQkJfQ0KICAgIC0JCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHsNCiAgICAtCQkJ
cHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVzdCBmb3JjZWQgdG8g
J3knXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAgLQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsN
CiAgICAtCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsNCiAgICAtCQkJZS0+cmlnaHQuc3lt
ID0gTlVMTDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWlmIChlLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAgICAtCQkJZS0+dHlwZSA9IEVfTk9UOw0KICAgIC0JCQll
LT5sZWZ0LmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5bSk7DQogICAgLQkJCWUt
PnJpZ2h0LnN5bSA9IE5VTEw7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlicmVh
azsNCiAgICAtCWNhc2UgRV9OT1Q6DQogICAgLQkJc3dpdGNoIChlLT5sZWZ0LmV4cHItPnR5cGUp
IHsNCiAgICAtCQljYXNlIEVfTk9UOg0KICAgIC0JCQkvLyAhIWEgLT4gYQ0KICAgIC0JCQl0bXAg
PSBlLT5sZWZ0LmV4cHItPmxlZnQuZXhwcjsNCiAgICAtCQkJZnJlZShlLT5sZWZ0LmV4cHIpOw0K
ICAgIC0JCQlmcmVlKGUpOw0KICAgIC0JCQllID0gdG1wOw0KICAgIC0JCQllID0gZXhwcl90cmFu
c2Zvcm0oZSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgRV9FUVVBTDoNCiAgICAtCQlj
YXNlIEVfVU5FUVVBTDoNCiAgICAtCQkJLy8gIWE9J3gnIC0+IGEhPSd4Jw0KICAgIC0JCQl0bXAg
PSBlLT5sZWZ0LmV4cHI7DQogICAgLQkJCWZyZWUoZSk7DQogICAgLQkJCWUgPSB0bXA7DQogICAg
LQkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfRVFVQUwgPyBFX1VORVFVQUwgOiBFX0VRVUFMOw0K
ICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEVfTEVROg0KICAgIC0JCWNhc2UgRV9HRVE6DQog
ICAgLQkJCS8vICFhPD0neCcgLT4gYT4neCcNCiAgICAtCQkJdG1wID0gZS0+bGVmdC5leHByOw0K
ICAgIC0JCQlmcmVlKGUpOw0KICAgIC0JCQllID0gdG1wOw0KICAgIC0JCQllLT50eXBlID0gZS0+
dHlwZSA9PSBFX0xFUSA/IEVfR1RIIDogRV9MVEg7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgRV9MVEg6DQogICAgLQkJY2FzZSBFX0dUSDoNCiAgICAtCQkJLy8gIWE8J3gnIC0+IGE+PSd4
Jw0KICAgIC0JCQl0bXAgPSBlLT5sZWZ0LmV4cHI7DQogICAgLQkJCWZyZWUoZSk7DQogICAgLQkJ
CWUgPSB0bXA7DQogICAgLQkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfTFRIID8gRV9HRVEgOiBF
X0xFUTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBFX09SOg0KICAgIC0JCQkvLyAhKGEg
fHwgYikgLT4gIWEgJiYgIWINCiAgICAtCQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgIC0JCQll
LT50eXBlID0gRV9BTkQ7DQogICAgLQkJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2FsbG9jX29uZShF
X05PVCwgdG1wLT5yaWdodC5leHByKTsNCiAgICAtCQkJdG1wLT50eXBlID0gRV9OT1Q7DQogICAg
LQkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgLQkJCWUgPSBleHByX3RyYW5zZm9ybShl
KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBFX0FORDoNCiAgICAtCQkJLy8gIShhICYm
IGIpIC0+ICFhIHx8ICFiDQogICAgLQkJCXRtcCA9IGUtPmxlZnQuZXhwcjsNCiAgICAtCQkJZS0+
dHlwZSA9IEVfT1I7DQogICAgLQkJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2FsbG9jX29uZShFX05P
VCwgdG1wLT5yaWdodC5leHByKTsNCiAgICAtCQkJdG1wLT50eXBlID0gRV9OT1Q7DQogICAgLQkJ
CXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgLQkJCWUgPSBleHByX3RyYW5zZm9ybShlKTsN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBFX1NZTUJPTDoNCiAgICAtCQkJaWYgKGUtPmxl
ZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAgICAtCQkJCS8vICEneScgLT4g
J24nDQogICAgLQkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7DQogICAgLQkJCQlmcmVlKGUpOw0KICAg
IC0JCQkJZSA9IHRtcDsNCiAgICAtCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICAtCQkJCWUt
PmxlZnQuc3ltID0gJnN5bWJvbF9ubzsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAg
LQkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbW9kKSB7DQogICAgLQkJ
CQkvLyAhJ20nIC0+ICdtJw0KICAgIC0JCQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgIC0JCQkJ
ZnJlZShlKTsNCiAgICAtCQkJCWUgPSB0bXA7DQogICAgLQkJCQllLT50eXBlID0gRV9TWU1CT0w7
DQogICAgLQkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbW9kOw0KICAgIC0JCQkJYnJlYWs7DQog
ICAgLQkJCX0NCiAgICAtCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9u
bykgew0KICAgIC0JCQkJLy8gISduJyAtPiAneScNCiAgICAtCQkJCXRtcCA9IGUtPmxlZnQuZXhw
cjsNCiAgICAtCQkJCWZyZWUoZSk7DQogICAgLQkJCQllID0gdG1wOw0KICAgIC0JCQkJZS0+dHlw
ZSA9IEVfU1lNQk9MOw0KICAgIC0JCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsNCiAgICAt
CQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6DQog
ICAgLQkJCTsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0J
CTsNCiAgICAtCX0NCiAgICAtCXJldHVybiBlOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgZXhw
cl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKQ0K
ICAgIC17DQogICAgLQlpZiAoIWRlcCkNCiAgICAtCQlyZXR1cm4gMDsNCiAgICAtDQogICAgLQlz
d2l0Y2ggKGRlcC0+dHlwZSkgew0KICAgIC0JY2FzZSBFX0FORDoNCiAgICAtCWNhc2UgRV9PUjoN
CiAgICAtCQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5sZWZ0LmV4cHIsIHN5bSkg
fHwNCiAgICAtCQkgICAgICAgZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5yaWdodC5leHByLCBz
eW0pOw0KICAgIC0JY2FzZSBFX1NZTUJPTDoNCiAgICAtCQlyZXR1cm4gZGVwLT5sZWZ0LnN5bSA9
PSBzeW07DQogICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQljYXNlIEVfR0VROg0KICAgIC0JY2Fz
ZSBFX0dUSDoNCiAgICAtCWNhc2UgRV9MRVE6DQogICAgLQljYXNlIEVfTFRIOg0KICAgIC0JY2Fz
ZSBFX1VORVFVQUw6DQogICAgLQkJcmV0dXJuIGRlcC0+bGVmdC5zeW0gPT0gc3ltIHx8DQogICAg
LQkJICAgICAgIGRlcC0+cmlnaHQuc3ltID09IHN5bTsNCiAgICAtCWNhc2UgRV9OT1Q6DQogICAg
LQkJcmV0dXJuIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+bGVmdC5leHByLCBzeW0pOw0KICAg
IC0JZGVmYXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtYm9vbCBleHByX2RlcGVuZHNfc3ltYm9sKHN0cnVjdCBleHByICpkZXAsIHN0
cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0JaWYgKCFkZXApDQogICAgLQkJcmV0dXJu
IGZhbHNlOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoZGVwLT50eXBlKSB7DQogICAgLQljYXNlIEVf
QU5EOg0KICAgIC0JCXJldHVybiBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+bGVmdC5leHByLCBz
eW0pIHx8DQogICAgLQkJICAgICAgIGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLT5yaWdodC5leHBy
LCBzeW0pOw0KICAgIC0JY2FzZSBFX1NZTUJPTDoNCiAgICAtCQlyZXR1cm4gZGVwLT5sZWZ0LnN5
bSA9PSBzeW07DQogICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQkJaWYgKGRlcC0+bGVmdC5zeW0g
PT0gc3ltKSB7DQogICAgLQkJCWlmIChkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyB8fCBk
ZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkNCiAgICAtCQkJCXJldHVybiB0cnVlOw0KICAg
IC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgRV9VTkVRVUFMOg0KICAgIC0JCWlmIChk
ZXAtPmxlZnQuc3ltID09IHN5bSkgew0KICAgIC0JCQlpZiAoZGVwLT5yaWdodC5zeW0gPT0gJnN5
bWJvbF9ubykNCiAgICAtCQkJCXJldHVybiB0cnVlOw0KICAgIC0JCX0NCiAgICAtCQlicmVhazsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkJOw0KICAgIC0JfQ0KICAgIC0gCXJldHVybiBmYWxzZTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogSW5zZXJ0cyBleHBsaWNpdCBjb21wYXJp
c29ucyBvZiB0eXBlICd0eXBlJyB0byBzeW1ib2wgJ3N5bScgaW50byB0aGUNCiAgICAtICogZXhw
cmVzc2lvbiAnZScuDQogICAgLSAqDQogICAgLSAqIEV4YW1wbGVzIHRyYW5zZm9ybWF0aW9ucyBm
b3IgdHlwZSA9PSBFX1VORVFVQUwsIHN5bSA9PSAmc3ltYm9sX25vOg0KICAgIC0gKg0KICAgIC0g
KglBICAgICAgICAgICAgICAtPiAgQSE9bg0KICAgIC0gKgkhQSAgICAgICAgICAgICAtPiAgQT1u
DQogICAgLSAqCUEgJiYgQiAgICAgICAgIC0+ICAhKEE9biB8fCBCPW4pDQogICAgLSAqCUEgfHwg
QiAgICAgICAgIC0+ICAhKEE9biAmJiBCPW4pDQogICAgLSAqCUEgJiYgKEIgfHwgQykgIC0+ICAh
KEE9biB8fCAoQj1uICYmIEM9bikpDQogICAgLSAqDQogICAgLSAqIEFsbG9jYXRlcyBhbmQgcmV0
dXJucyBhIG5ldyBleHByZXNzaW9uLg0KICAgIC0gKi8NCiAgICAtc3RydWN0IGV4cHIgKmV4cHJf
dHJhbnNfY29tcGFyZShzdHJ1Y3QgZXhwciAqZSwgZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZXhwciAqZTEsICplMjsNCiAgICAt
DQogICAgLQlpZiAoIWUpIHsNCiAgICAtCQllID0gZXhwcl9hbGxvY19zeW1ib2woc3ltKTsNCiAg
ICAtCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpDQogICAgLQkJCWUgPSBleHByX2FsbG9jX29uZShF
X05PVCwgZSk7DQogICAgLQkJcmV0dXJuIGU7DQogICAgLQl9DQogICAgLQlzd2l0Y2ggKGUtPnR5
cGUpIHsNCiAgICAtCWNhc2UgRV9BTkQ6DQogICAgLQkJZTEgPSBleHByX3RyYW5zX2NvbXBhcmUo
ZS0+bGVmdC5leHByLCBFX0VRVUFMLCBzeW0pOw0KICAgIC0JCWUyID0gZXhwcl90cmFuc19jb21w
YXJlKGUtPnJpZ2h0LmV4cHIsIEVfRVFVQUwsIHN5bSk7DQogICAgLQkJaWYgKHN5bSA9PSAmc3lt
Ym9sX3llcykNCiAgICAtCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpOw0KICAg
IC0JCWlmIChzeW0gPT0gJnN5bWJvbF9ubykNCiAgICAtCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVf
T1IsIGUxLCBlMik7DQogICAgLQkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQ0KICAgIC0JCQllID0g
ZXhwcl9hbGxvY19vbmUoRV9OT1QsIGUpOw0KICAgIC0JCXJldHVybiBlOw0KICAgIC0JY2FzZSBF
X09SOg0KICAgIC0JCWUxID0gZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQuZXhwciwgRV9FUVVB
TCwgc3ltKTsNCiAgICAtCQllMiA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5yaWdodC5leHByLCBF
X0VRVUFMLCBzeW0pOw0KICAgIC0JCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpDQogICAgLQkJCWUg
PSBleHByX2FsbG9jX3R3byhFX09SLCBlMSwgZTIpOw0KICAgIC0JCWlmIChzeW0gPT0gJnN5bWJv
bF9ubykNCiAgICAtCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwgZTIpOw0KICAgIC0J
CWlmICh0eXBlID09IEVfVU5FUVVBTCkNCiAgICAtCQkJZSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9U
LCBlKTsNCiAgICAtCQlyZXR1cm4gZTsNCiAgICAtCWNhc2UgRV9OT1Q6DQogICAgLQkJcmV0dXJu
IGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIHR5cGUgPT0gRV9FUVVBTCA/IEVfVU5F
UVVBTCA6IEVfRVFVQUwsIHN5bSk7DQogICAgLQljYXNlIEVfVU5FUVVBTDoNCiAgICAtCWNhc2Ug
RV9MVEg6DQogICAgLQljYXNlIEVfTEVROg0KICAgIC0JY2FzZSBFX0dUSDoNCiAgICAtCWNhc2Ug
RV9HRVE6DQogICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQkJaWYgKHR5cGUgPT0gRV9FUVVBTCkg
ew0KICAgIC0JCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQ0KICAgIC0JCQkJcmV0dXJuIGV4cHJf
Y29weShlKTsNCiAgICAtCQkJaWYgKHN5bSA9PSAmc3ltYm9sX21vZCkNCiAgICAtCQkJCXJldHVy
biBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsNCiAgICAtCQkJaWYgKHN5bSA9PSAmc3lt
Ym9sX25vKQ0KICAgIC0JCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVfTk9ULCBleHByX2NvcHko
ZSkpOw0KICAgIC0JCX0gZWxzZSB7DQogICAgLQkJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMpDQog
ICAgLQkJCQlyZXR1cm4gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29weShlKSk7DQogICAg
LQkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgLQkJCQlyZXR1cm4gZXhwcl9hbGxvY19z
eW1ib2woJnN5bWJvbF95ZXMpOw0KICAgIC0JCQlpZiAoc3ltID09ICZzeW1ib2xfbm8pDQogICAg
LQkJCQlyZXR1cm4gZXhwcl9jb3B5KGUpOw0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAt
CWNhc2UgRV9TWU1CT0w6DQogICAgLQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcCh0eXBlLCBlLT5s
ZWZ0LnN5bSwgc3ltKTsNCiAgICAtCWNhc2UgRV9MSVNUOg0KICAgIC0JY2FzZSBFX1JBTkdFOg0K
ICAgIC0JY2FzZSBFX05PTkU6DQogICAgLQkJLyogcGFuaWMgKi87DQogICAgLQl9DQogICAgLQly
ZXR1cm4gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtZW51bSBzdHJpbmdfdmFsdWVfa2luZCB7
DQogICAgLQlrX3N0cmluZywNCiAgICAtCWtfc2lnbmVkLA0KICAgIC0Ja191bnNpZ25lZCwNCiAg
ICAtfTsNCiAgICAtDQogICAgLXVuaW9uIHN0cmluZ192YWx1ZSB7DQogICAgLQl1bnNpZ25lZCBs
b25nIGxvbmcgdTsNCiAgICAtCXNpZ25lZCBsb25nIGxvbmcgczsNCiAgICAtfTsNCiAgICAtDQog
ICAgLXN0YXRpYyBlbnVtIHN0cmluZ192YWx1ZV9raW5kIGV4cHJfcGFyc2Vfc3RyaW5nKGNvbnN0
IGNoYXIgKnN0ciwNCiAgICAtCQkJCQkJZW51bSBzeW1ib2xfdHlwZSB0eXBlLA0KICAgIC0JCQkJ
CQl1bmlvbiBzdHJpbmdfdmFsdWUgKnZhbCkNCiAgICAtew0KICAgIC0JY2hhciAqdGFpbDsNCiAg
ICAtCWVudW0gc3RyaW5nX3ZhbHVlX2tpbmQga2luZDsNCiAgICAtDQogICAgLQllcnJubyA9IDA7
DQogICAgLQlzd2l0Y2ggKHR5cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0JY2Fz
ZSBTX1RSSVNUQVRFOg0KICAgIC0JCXZhbC0+cyA9ICFzdHJjbXAoc3RyLCAibiIpID8gMCA6DQog
ICAgLQkJCSAhc3RyY21wKHN0ciwgIm0iKSA/IDEgOg0KICAgIC0JCQkgIXN0cmNtcChzdHIsICJ5
IikgPyAyIDogLTE7DQogICAgLQkJcmV0dXJuIGtfc2lnbmVkOw0KICAgIC0JY2FzZSBTX0lOVDoN
CiAgICAtCQl2YWwtPnMgPSBzdHJ0b2xsKHN0ciwgJnRhaWwsIDEwKTsNCiAgICAtCQlraW5kID0g
a19zaWduZWQ7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNfSEVYOg0KICAgIC0JCXZhbC0+
dSA9IHN0cnRvdWxsKHN0ciwgJnRhaWwsIDE2KTsNCiAgICAtCQlraW5kID0ga191bnNpZ25lZDsN
CiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJdmFsLT5zID0gc3RydG9sbChz
dHIsICZ0YWlsLCAwKTsNCiAgICAtCQlraW5kID0ga19zaWduZWQ7DQogICAgLQkJYnJlYWs7DQog
ICAgLQl9DQogICAgLQlyZXR1cm4gIWVycm5vICYmICEqdGFpbCAmJiB0YWlsID4gc3RyICYmIGlz
eGRpZ2l0KHRhaWxbLTFdKQ0KICAgIC0JICAgICAgID8ga2luZCA6IGtfc3RyaW5nOw0KICAgIC19
DQogICAgLQ0KICAgIC10cmlzdGF0ZSBleHByX2NhbGNfdmFsdWUoc3RydWN0IGV4cHIgKmUpDQog
ICAgLXsNCiAgICAtCXRyaXN0YXRlIHZhbDEsIHZhbDI7DQogICAgLQljb25zdCBjaGFyICpzdHIx
LCAqc3RyMjsNCiAgICAtCWVudW0gc3RyaW5nX3ZhbHVlX2tpbmQgazEgPSBrX3N0cmluZywgazIg
PSBrX3N0cmluZzsNCiAgICAtCXVuaW9uIHN0cmluZ192YWx1ZSBsdmFsID0ge30sIHJ2YWwgPSB7
fTsNCiAgICAtCWludCByZXM7DQogICAgLQ0KICAgIC0JaWYgKCFlKQ0KICAgIC0JCXJldHVybiB5
ZXM7DQogICAgLQ0KICAgIC0Jc3dpdGNoIChlLT50eXBlKSB7DQogICAgLQljYXNlIEVfU1lNQk9M
Og0KICAgIC0JCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsNCiAgICAtCQlyZXR1cm4gZS0+
bGVmdC5zeW0tPmN1cnIudHJpOw0KICAgIC0JY2FzZSBFX0FORDoNCiAgICAtCQl2YWwxID0gZXhw
cl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7DQogICAgLQkJdmFsMiA9IGV4cHJfY2FsY192YWx1
ZShlLT5yaWdodC5leHByKTsNCiAgICAtCQlyZXR1cm4gRVhQUl9BTkQodmFsMSwgdmFsMik7DQog
ICAgLQljYXNlIEVfT1I6DQogICAgLQkJdmFsMSA9IGV4cHJfY2FsY192YWx1ZShlLT5sZWZ0LmV4
cHIpOw0KICAgIC0JCXZhbDIgPSBleHByX2NhbGNfdmFsdWUoZS0+cmlnaHQuZXhwcik7DQogICAg
LQkJcmV0dXJuIEVYUFJfT1IodmFsMSwgdmFsMik7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0J
CXZhbDEgPSBleHByX2NhbGNfdmFsdWUoZS0+bGVmdC5leHByKTsNCiAgICAtCQlyZXR1cm4gRVhQ
Ul9OT1QodmFsMSk7DQogICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQljYXNlIEVfR0VROg0KICAg
IC0JY2FzZSBFX0dUSDoNCiAgICAtCWNhc2UgRV9MRVE6DQogICAgLQljYXNlIEVfTFRIOg0KICAg
IC0JY2FzZSBFX1VORVFVQUw6DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0J
CXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiAlZD9cbiIsIGUtPnR5cGUpOw0KICAgIC0JCXJldHVy
biBubzsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzeW1fY2FsY192YWx1ZShlLT5sZWZ0LnN5bSk7
DQogICAgLQlzeW1fY2FsY192YWx1ZShlLT5yaWdodC5zeW0pOw0KICAgIC0Jc3RyMSA9IHN5bV9n
ZXRfc3RyaW5nX3ZhbHVlKGUtPmxlZnQuc3ltKTsNCiAgICAtCXN0cjIgPSBzeW1fZ2V0X3N0cmlu
Z192YWx1ZShlLT5yaWdodC5zeW0pOw0KICAgIC0NCiAgICAtCWlmIChlLT5sZWZ0LnN5bS0+dHlw
ZSAhPSBTX1NUUklORyB8fCBlLT5yaWdodC5zeW0tPnR5cGUgIT0gU19TVFJJTkcpIHsNCiAgICAt
CQlrMSA9IGV4cHJfcGFyc2Vfc3RyaW5nKHN0cjEsIGUtPmxlZnQuc3ltLT50eXBlLCAmbHZhbCk7
DQogICAgLQkJazIgPSBleHByX3BhcnNlX3N0cmluZyhzdHIyLCBlLT5yaWdodC5zeW0tPnR5cGUs
ICZydmFsKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlpZiAoazEgPT0ga19zdHJpbmcgfHwgazIg
PT0ga19zdHJpbmcpDQogICAgLQkJcmVzID0gc3RyY21wKHN0cjEsIHN0cjIpOw0KICAgIC0JZWxz
ZSBpZiAoazEgPT0ga191bnNpZ25lZCB8fCBrMiA9PSBrX3Vuc2lnbmVkKQ0KICAgIC0JCXJlcyA9
IChsdmFsLnUgPiBydmFsLnUpIC0gKGx2YWwudSA8IHJ2YWwudSk7DQogICAgLQllbHNlIC8qIGlm
IChrMSA9PSBrX3NpZ25lZCAmJiBrMiA9PSBrX3NpZ25lZCkgKi8NCiAgICAtCQlyZXMgPSAobHZh
bC5zID4gcnZhbC5zKSAtIChsdmFsLnMgPCBydmFsLnMpOw0KICAgIC0NCiAgICAtCXN3aXRjaChl
LT50eXBlKSB7DQogICAgLQljYXNlIEVfRVFVQUw6DQogICAgLQkJcmV0dXJuIHJlcyA/IG5vIDog
eWVzOw0KICAgIC0JY2FzZSBFX0dFUToNCiAgICAtCQlyZXR1cm4gcmVzID49IDAgPyB5ZXMgOiBu
bzsNCiAgICAtCWNhc2UgRV9HVEg6DQogICAgLQkJcmV0dXJuIHJlcyA+IDAgPyB5ZXMgOiBubzsN
CiAgICAtCWNhc2UgRV9MRVE6DQogICAgLQkJcmV0dXJuIHJlcyA8PSAwID8geWVzIDogbm87DQog
ICAgLQljYXNlIEVfTFRIOg0KICAgIC0JCXJldHVybiByZXMgPCAwID8geWVzIDogbm87DQogICAg
LQljYXNlIEVfVU5FUVVBTDoNCiAgICAtCQlyZXR1cm4gcmVzID8geWVzIDogbm87DQogICAgLQlk
ZWZhdWx0Og0KICAgIC0JCXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiByZWxhdGlvbiAlZD9cbiIs
IGUtPnR5cGUpOw0KICAgIC0JCXJldHVybiBubzsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RhdGljIGludCBleHByX2NvbXBhcmVfdHlwZShlbnVtIGV4cHJfdHlwZSB0MSwgZW51bSBl
eHByX3R5cGUgdDIpDQogICAgLXsNCiAgICAtCWlmICh0MSA9PSB0MikNCiAgICAtCQlyZXR1cm4g
MDsNCiAgICAtCXN3aXRjaCAodDEpIHsNCiAgICAtCWNhc2UgRV9MRVE6DQogICAgLQljYXNlIEVf
TFRIOg0KICAgIC0JY2FzZSBFX0dFUToNCiAgICAtCWNhc2UgRV9HVEg6DQogICAgLQkJaWYgKHQy
ID09IEVfRVFVQUwgfHwgdDIgPT0gRV9VTkVRVUFMKQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAt
CWNhc2UgRV9FUVVBTDoNCiAgICAtCWNhc2UgRV9VTkVRVUFMOg0KICAgIC0JCWlmICh0MiA9PSBF
X05PVCkNCiAgICAtCQkJcmV0dXJuIDE7DQogICAgLQljYXNlIEVfTk9UOg0KICAgIC0JCWlmICh0
MiA9PSBFX0FORCkNCiAgICAtCQkJcmV0dXJuIDE7DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0J
CWlmICh0MiA9PSBFX09SKQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCWNhc2UgRV9PUjoNCiAg
ICAtCQlpZiAodDIgPT0gRV9MSVNUKQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCWNhc2UgRV9M
SVNUOg0KICAgIC0JCWlmICh0MiA9PSAwKQ0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCWRlZmF1
bHQ6DQogICAgLQkJcmV0dXJuIC0xOw0KICAgIC0JfQ0KICAgIC0JcHJpbnRmKCJbJWRndCVkP10i
LCB0MSwgdDIpOw0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgZXhw
cl9wcmludChzdHJ1Y3QgZXhwciAqZSwNCiAgICAtCQl2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0
IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLA0KICAgIC0JCXZvaWQgKmRhdGEsIGludCBwcmV2dG9r
ZW4pDQogICAgLXsNCiAgICAtCWlmICghZSkgew0KICAgIC0JCWZuKGRhdGEsIE5VTEwsICJ5Iik7
DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmIChleHByX2NvbXBhcmVf
dHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkNCiAgICAtCQlmbihkYXRhLCBOVUxMLCAiKCIp
Ow0KICAgIC0Jc3dpdGNoIChlLT50eXBlKSB7DQogICAgLQljYXNlIEVfU1lNQk9MOg0KICAgIC0J
CWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkNCiAgICAtCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUt
PmxlZnQuc3ltLT5uYW1lKTsNCiAgICAtCQllbHNlDQogICAgLQkJCWZuKGRhdGEsIE5VTEwsICI8
Y2hvaWNlPiIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX05PVDoNCiAgICAtCQlmbihk
YXRhLCBOVUxMLCAiISIpOw0KICAgIC0JCWV4cHJfcHJpbnQoZS0+bGVmdC5leHByLCBmbiwgZGF0
YSwgRV9OT1QpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAgIC0JCWlm
IChlLT5sZWZ0LnN5bS0+bmFtZSkNCiAgICAtCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxl
ZnQuc3ltLT5uYW1lKTsNCiAgICAtCQllbHNlDQogICAgLQkJCWZuKGRhdGEsIE5VTEwsICI8Y2hv
aWNlPiIpOw0KICAgIC0JCWZuKGRhdGEsIE5VTEwsICI9Iik7DQogICAgLQkJZm4oZGF0YSwgZS0+
cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2Fz
ZSBFX0xFUToNCiAgICAtCWNhc2UgRV9MVEg6DQogICAgLQkJaWYgKGUtPmxlZnQuc3ltLT5uYW1l
KQ0KICAgIC0JCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0tPm5hbWUpOw0KICAg
IC0JCWVsc2UNCiAgICAtCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7DQogICAgLQkJZm4o
ZGF0YSwgTlVMTCwgZS0+dHlwZSA9PSBFX0xFUSA/ICI8PSIgOiAiPCIpOw0KICAgIC0JCWZuKGRh
dGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsNCiAgICAtCQlicmVhazsNCiAg
ICAtCWNhc2UgRV9HRVE6DQogICAgLQljYXNlIEVfR1RIOg0KICAgIC0JCWlmIChlLT5sZWZ0LnN5
bS0+bmFtZSkNCiAgICAtCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1l
KTsNCiAgICAtCQllbHNlDQogICAgLQkJCWZuKGRhdGEsIE5VTEwsICI8Y2hvaWNlPiIpOw0KICAg
IC0JCWZuKGRhdGEsIE5VTEwsIGUtPnR5cGUgPT0gRV9HRVEgPyAiPj0iIDogIj4iKTsNCiAgICAt
CQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAgLQkJYnJl
YWs7DQogICAgLQljYXNlIEVfVU5FUVVBTDoNCiAgICAtCQlpZiAoZS0+bGVmdC5zeW0tPm5hbWUp
DQogICAgLQkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAg
LQkJZWxzZQ0KICAgIC0JCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsNCiAgICAtCQlmbihk
YXRhLCBOVUxMLCAiIT0iKTsNCiAgICAtCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0
LnN5bS0+bmFtZSk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIEVfT1I6DQogICAgLQkJZXhw
cl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsNCiAgICAtCQlmbihkYXRhLCBO
VUxMLCAiIHx8ICIpOw0KICAgIC0JCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEs
IEVfT1IpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBFX0FORDoNCiAgICAtCQlleHByX3By
aW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIEVfQU5EKTsNCiAgICAtCQlmbihkYXRhLCBOVUxM
LCAiICYmICIpOw0KICAgIC0JCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEsIEVf
QU5EKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgRV9MSVNUOg0KICAgIC0JCWZuKGRhdGEs
IGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsNCiAgICAtCQlpZiAoZS0+bGVmdC5l
eHByKSB7DQogICAgLQkJCWZuKGRhdGEsIE5VTEwsICIgXiAiKTsNCiAgICAtCQkJZXhwcl9wcmlu
dChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX0xJU1QpOw0KICAgIC0JCX0NCiAgICAtCQlicmVh
azsNCiAgICAtCWNhc2UgRV9SQU5HRToNCiAgICAtCQlmbihkYXRhLCBOVUxMLCAiWyIpOw0KICAg
IC0JCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAgLQkJZm4o
ZGF0YSwgTlVMTCwgIiAiKTsNCiAgICAtCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0
LnN5bS0+bmFtZSk7DQogICAgLQkJZm4oZGF0YSwgTlVMTCwgIl0iKTsNCiAgICAtCQlicmVhazsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkgIHsNCiAgICAtCQljaGFyIGJ1ZlszMl07DQogICAgLQkJ
c3ByaW50ZihidWYsICI8dW5rbm93biB0eXBlICVkPiIsIGUtPnR5cGUpOw0KICAgIC0JCWZuKGRh
dGEsIE5VTEwsIGJ1Zik7DQogICAgLQkJYnJlYWs7DQogICAgLQkgIH0NCiAgICAtCX0NCiAgICAt
CWlmIChleHByX2NvbXBhcmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkNCiAgICAtCQlm
bihkYXRhLCBOVUxMLCAiKSIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBleHBy
X3ByaW50X2ZpbGVfaGVscGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3Qg
Y2hhciAqc3RyKQ0KICAgIC17DQogICAgLQl4ZndyaXRlKHN0ciwgc3RybGVuKHN0ciksIDEsIGRh
dGEpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIGV4cHJfZnByaW50KHN0cnVjdCBleHByICpl
LCBGSUxFICpvdXQpDQogICAgLXsNCiAgICAtCWV4cHJfcHJpbnQoZSwgZXhwcl9wcmludF9maWxl
X2hlbHBlciwgb3V0LCBFX05PTkUpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBl
eHByX3ByaW50X2dzdHJfaGVscGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29u
c3QgY2hhciAqc3RyKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZ3N0ciAqZ3MgPSAoc3RydWN0IGdz
dHIqKWRhdGE7DQogICAgLQljb25zdCBjaGFyICpzeW1fc3RyID0gTlVMTDsNCiAgICAtDQogICAg
LQlpZiAoc3ltKQ0KICAgIC0JCXN5bV9zdHIgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0K
ICAgIC0NCiAgICAtCWlmIChncy0+bWF4X3dpZHRoKSB7DQogICAgLQkJdW5zaWduZWQgZXh0cmFf
bGVuZ3RoID0gc3RybGVuKHN0cik7DQogICAgLQkJY29uc3QgY2hhciAqbGFzdF9jciA9IHN0cnJj
aHIoZ3MtPnMsICdcbicpOw0KICAgIC0JCXVuc2lnbmVkIGxhc3RfbGluZV9sZW5ndGg7DQogICAg
LQ0KICAgIC0JCWlmIChzeW1fc3RyKQ0KICAgIC0JCQlleHRyYV9sZW5ndGggKz0gNCArIHN0cmxl
bihzeW1fc3RyKTsNCiAgICAtDQogICAgLQkJaWYgKCFsYXN0X2NyKQ0KICAgIC0JCQlsYXN0X2Ny
ID0gZ3MtPnM7DQogICAgLQ0KICAgIC0JCWxhc3RfbGluZV9sZW5ndGggPSBzdHJsZW4oZ3MtPnMp
IC0gKGxhc3RfY3IgLSBncy0+cyk7DQogICAgLQ0KICAgIC0JCWlmICgobGFzdF9saW5lX2xlbmd0
aCArIGV4dHJhX2xlbmd0aCkgPiBncy0+bWF4X3dpZHRoKQ0KICAgIC0JCQlzdHJfYXBwZW5kKGdz
LCAiXFxcbiIpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXN0cl9hcHBlbmQoZ3MsIHN0cik7DQog
ICAgLQlpZiAoc3ltICYmIHN5bS0+dHlwZSAhPSBTX1VOS05PV04pDQogICAgLQkJc3RyX3ByaW50
ZihncywgIiBbPSVzXSIsIHN5bV9zdHIpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIGV4cHJf
Z3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKQ0KICAgIC17DQogICAg
LQlleHByX3ByaW50KGUsIGV4cHJfcHJpbnRfZ3N0cl9oZWxwZXIsIGdzLCBFX05PTkUpOw0KICAg
IC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBUcmFuc2Zvcm0gdGhlIHRvcCBsZXZlbCAifHwi
IHRva2VucyBpbnRvIG5ld2xpbmVzIGFuZCBwcmVwZW5kIGVhY2gNCiAgICAtICogbGluZSB3aXRo
IGEgbWludXMuIFRoaXMgbWFrZXMgZXhwcmVzc2lvbnMgbXVjaCBlYXNpZXIgdG8gcmVhZC4NCiAg
ICAtICogU3VpdGFibGUgZm9yIHJldmVyc2UgZGVwZW5kZW5jeSBleHByZXNzaW9ucy4NCiAgICAt
ICovDQogICAgLXN0YXRpYyB2b2lkIGV4cHJfcHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLA0K
ICAgIC0JCQkgICAgICB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBj
aGFyICopLA0KICAgIC0JCQkgICAgICB2b2lkICpkYXRhLCB0cmlzdGF0ZSBwcl90eXBlLCBjb25z
dCBjaGFyICoqdGl0bGUpDQogICAgLXsNCiAgICAtCWlmIChlLT50eXBlID09IEVfT1IpIHsNCiAg
ICAtCQlleHByX3ByaW50X3JldmRlcChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBwcl90eXBlLCB0
aXRsZSk7DQogICAgLQkJZXhwcl9wcmludF9yZXZkZXAoZS0+cmlnaHQuZXhwciwgZm4sIGRhdGEs
IHByX3R5cGUsIHRpdGxlKTsNCiAgICAtCX0gZWxzZSBpZiAoZXhwcl9jYWxjX3ZhbHVlKGUpID09
IHByX3R5cGUpIHsNCiAgICAtCQlpZiAoKnRpdGxlKSB7DQogICAgLQkJCWZuKGRhdGEsIE5VTEws
ICp0aXRsZSk7DQogICAgLQkJCSp0aXRsZSA9IE5VTEw7DQogICAgLQkJfQ0KICAgIC0NCiAgICAt
CQlmbihkYXRhLCBOVUxMLCAiICAtICIpOw0KICAgIC0JCWV4cHJfcHJpbnQoZSwgZm4sIGRhdGEs
IEVfTk9ORSk7DQogICAgLQkJZm4oZGF0YSwgTlVMTCwgIlxuIik7DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLXZvaWQgZXhwcl9nc3RyX3ByaW50X3JldmRlcChzdHJ1Y3QgZXhwciAqZSwg
c3RydWN0IGdzdHIgKmdzLA0KICAgIC0JCQkgICAgdHJpc3RhdGUgcHJfdHlwZSwgY29uc3QgY2hh
ciAqdGl0bGUpDQogICAgLXsNCiAgICAtCWV4cHJfcHJpbnRfcmV2ZGVwKGUsIGV4cHJfcHJpbnRf
Z3N0cl9oZWxwZXIsIGdzLCBwcl90eXBlLCAmdGl0bGUpOw0KICAgIC19DQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZXhwci5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9leHBy
LmgNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA4ZGRlNjViLi4wMDAw
MDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9leHByLmgNCiAgICArKysgL2Rldi9u
dWxsDQogICAgQEAgLTEsMzMxICswLDAgQEANCiAgICAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAgKi8NCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu
IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0gKi8NCiAgICAtDQogICAgLSNp
Zm5kZWYgRVhQUl9IDQogICAgLSNkZWZpbmUgRVhQUl9IDQogICAgLQ0KICAgIC0jaWZkZWYgX19j
cGx1c3BsdXMNCiAgICAtZXh0ZXJuICJDIiB7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2lu
Y2x1ZGUgPGFzc2VydC5oPg0KICAgIC0jaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAtI2luY2x1ZGUg
Imxpc3QuaCINCiAgICAtI2lmbmRlZiBfX2NwbHVzcGx1cw0KICAgIC0jaW5jbHVkZSA8c3RkYm9v
bC5oPg0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLXN0cnVjdCBmaWxlIHsNCiAgICAtCXN0cnVj
dCBmaWxlICpuZXh0Ow0KICAgIC0Jc3RydWN0IGZpbGUgKnBhcmVudDsNCiAgICAtCWNvbnN0IGNo
YXIgKm5hbWU7DQogICAgLQlpbnQgbGluZW5vOw0KICAgIC19Ow0KICAgIC0NCiAgICAtdHlwZWRl
ZiBlbnVtIHRyaXN0YXRlIHsNCiAgICAtCW5vLCBtb2QsIHllcw0KICAgIC19IHRyaXN0YXRlOw0K
ICAgIC0NCiAgICAtZW51bSBleHByX3R5cGUgew0KICAgIC0JRV9OT05FLCBFX09SLCBFX0FORCwg
RV9OT1QsDQogICAgLQlFX0VRVUFMLCBFX1VORVFVQUwsIEVfTFRILCBFX0xFUSwgRV9HVEgsIEVf
R0VRLA0KICAgIC0JRV9MSVNULCBFX1NZTUJPTCwgRV9SQU5HRQ0KICAgIC19Ow0KICAgIC0NCiAg
ICAtdW5pb24gZXhwcl9kYXRhIHsNCiAgICAtCXN0cnVjdCBleHByICpleHByOw0KICAgIC0Jc3Ry
dWN0IHN5bWJvbCAqc3ltOw0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RydWN0IGV4cHIgew0KICAg
IC0JZW51bSBleHByX3R5cGUgdHlwZTsNCiAgICAtCXVuaW9uIGV4cHJfZGF0YSBsZWZ0LCByaWdo
dDsNCiAgICAtfTsNCiAgICAtDQogICAgLSNkZWZpbmUgRVhQUl9PUihkZXAxLCBkZXAyKQkoKChk
ZXAxKT4oZGVwMikpPyhkZXAxKTooZGVwMikpDQogICAgLSNkZWZpbmUgRVhQUl9BTkQoZGVwMSwg
ZGVwMikJKCgoZGVwMSk8KGRlcDIpKT8oZGVwMSk6KGRlcDIpKQ0KICAgIC0jZGVmaW5lIEVYUFJf
Tk9UKGRlcCkJCSgyLShkZXApKQ0KICAgIC0NCiAgICAtI2RlZmluZSBleHByX2xpc3RfZm9yX2Vh
Y2hfc3ltKGwsIGUsIHMpIFwNCiAgICAtCWZvciAoZSA9IChsKTsgZSAmJiAocyA9IGUtPnJpZ2h0
LnN5bSk7IGUgPSBlLT5sZWZ0LmV4cHIpDQogICAgLQ0KICAgIC1zdHJ1Y3QgZXhwcl92YWx1ZSB7
DQogICAgLQlzdHJ1Y3QgZXhwciAqZXhwcjsNCiAgICAtCXRyaXN0YXRlIHRyaTsNCiAgICAtfTsN
CiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2xfdmFsdWUgew0KICAgIC0Jdm9pZCAqdmFsOw0KICAg
IC0JdHJpc3RhdGUgdHJpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtZW51bSBzeW1ib2xfdHlwZSB7
DQogICAgLQlTX1VOS05PV04sIFNfQk9PTEVBTiwgU19UUklTVEFURSwgU19JTlQsIFNfSEVYLCBT
X1NUUklORw0KICAgIC19Ow0KICAgIC0NCiAgICAtLyogZW51bSB2YWx1ZXMgYXJlIHVzZWQgYXMg
aW5kZXggdG8gc3ltYm9sLmRlZltdICovDQogICAgLWVudW0gew0KICAgIC0JU19ERUZfVVNFUiwJ
CS8qIG1haW4gdXNlciB2YWx1ZSAqLw0KICAgIC0JU19ERUZfQVVUTywJCS8qIHZhbHVlcyByZWFk
IGZyb20gYXV0by5jb25mICovDQogICAgLQlTX0RFRl9ERUYzLAkJLyogUmVzZXJ2ZWQgZm9yIFVJ
IHVzYWdlICovDQogICAgLQlTX0RFRl9ERUY0LAkJLyogUmVzZXJ2ZWQgZm9yIFVJIHVzYWdlICov
DQogICAgLQlTX0RFRl9DT1VOVA0KICAgIC19Ow0KICAgIC0NCiAgICAtLyoNCiAgICAtICogUmVw
cmVzZW50cyBhIGNvbmZpZ3VyYXRpb24gc3ltYm9sLg0KICAgIC0gKg0KICAgIC0gKiBDaG9pY2Vz
IGFyZSByZXByZXNlbnRlZCBhcyBhIHNwZWNpYWwga2luZCBvZiBzeW1ib2wgYW5kIGhhdmUgdGhl
DQogICAgLSAqIFNZTUJPTF9DSE9JQ0UgYml0IHNldCBpbiAnZmxhZ3MnLg0KICAgIC0gKi8NCiAg
ICAtc3RydWN0IHN5bWJvbCB7DQogICAgLQkvKiBUaGUgbmV4dCBzeW1ib2wgaW4gdGhlIHNhbWUg
YnVja2V0IGluIHRoZSBzeW1ib2wgaGFzaCB0YWJsZSAqLw0KICAgIC0Jc3RydWN0IHN5bWJvbCAq
bmV4dDsNCiAgICAtDQogICAgLQkvKiBUaGUgbmFtZSBvZiB0aGUgc3ltYm9sLCBlLmcuICJGT08i
IGZvciAnY29uZmlnIEZPTycgKi8NCiAgICAtCWNoYXIgKm5hbWU7DQogICAgLQ0KICAgIC0JLyog
U19CT09MRUFOLCBTX1RSSVNUQVRFLCAuLi4gKi8NCiAgICAtCWVudW0gc3ltYm9sX3R5cGUgdHlw
ZTsNCiAgICAtDQogICAgLQkvKg0KICAgIC0JICogVGhlIGNhbGN1bGF0ZWQgdmFsdWUgb2YgdGhl
IHN5bWJvbC4gVGhlIFNZTUJPTF9WQUxJRCBiaXQgaXMgc2V0IGluDQogICAgLQkgKiAnZmxhZ3Mn
IHdoZW4gdGhpcyBpcyB1cCB0byBkYXRlLiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBtaWdodCBkaWZm
ZXINCiAgICAtCSAqIGZyb20gdGhlIHVzZXIgdmFsdWUgc2V0IGluIGUuZy4gYSAuY29uZmlnIGZp
bGUsIGR1ZSB0byB2aXNpYmlsaXR5Lg0KICAgIC0JICovDQogICAgLQlzdHJ1Y3Qgc3ltYm9sX3Zh
bHVlIGN1cnI7DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAqIFZhbHVlcyBmb3IgdGhlIHN5bWJv
bCBwcm92aWRlZCBmcm9tIG91dHNpZGUuIGRlZltTX0RFRl9VU0VSXSBob2xkcw0KICAgIC0JICog
dGhlIC5jb25maWcgdmFsdWUuDQogICAgLQkgKi8NCiAgICAtCXN0cnVjdCBzeW1ib2xfdmFsdWUg
ZGVmW1NfREVGX0NPVU5UXTsNCiAgICAtDQogICAgLQkvKg0KICAgIC0JICogQW4gdXBwZXIgYm91
bmQgb24gdGhlIHRyaXN0YXRlIHZhbHVlIHRoZSB1c2VyIGNhbiBzZXQgZm9yIHRoZSBzeW1ib2wN
CiAgICAtCSAqIGlmIGl0IGlzIGEgYm9vbGVhbiBvciB0cmlzdGF0ZS4gQ2FsY3VsYXRlZCBmcm9t
IHByb21wdCBkZXBlbmRlbmNpZXMsDQogICAgLQkgKiB3aGljaCBhbHNvIGluaGVyaXQgZGVwZW5k
ZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9pY2VzLCBhbmQNCiAgICAtCSAqIGlmcy4g
SWYgJ24nLCB0aGUgdXNlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuDQogICAgLQkgKg0KICAgIC0J
ICogU3ltYm9scyBsYWNraW5nIHByb21wdHMgYWx3YXlzIGhhdmUgdmlzaWJpbGl0eSAnbicuDQog
ICAgLQkgKi8NCiAgICAtCXRyaXN0YXRlIHZpc2libGU7DQogICAgLQ0KICAgIC0JLyogU1lNQk9M
XyogZmxhZ3MgKi8NCiAgICAtCWludCBmbGFnczsNCiAgICAtDQogICAgLQkvKiBMaXN0IG9mIHBy
b3BlcnRpZXMuIFNlZSBwcm9wX3R5cGUuICovDQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7
DQogICAgLQ0KICAgIC0JLyogRGVwZW5kZW5jaWVzIGZyb20gZW5jbG9zaW5nIG1lbnVzLCBjaG9p
Y2VzLCBhbmQgaWZzICovDQogICAgLQlzdHJ1Y3QgZXhwcl92YWx1ZSBkaXJfZGVwOw0KICAgIC0N
CiAgICAtCS8qIFJldmVyc2UgZGVwZW5kZW5jaWVzIHRocm91Z2ggYmVpbmcgc2VsZWN0ZWQgYnkg
b3RoZXIgc3ltYm9scyAqLw0KICAgIC0Jc3RydWN0IGV4cHJfdmFsdWUgcmV2X2RlcDsNCiAgICAt
DQogICAgLQkvKg0KICAgIC0JICogIldlYWsiIHJldmVyc2UgZGVwZW5kZW5jaWVzIHRocm91Z2gg
YmVpbmcgaW1wbGllZCBieSBvdGhlciBzeW1ib2xzDQogICAgLQkgKi8NCiAgICAtCXN0cnVjdCBl
eHByX3ZhbHVlIGltcGxpZWQ7DQogICAgLX07DQogICAgLQ0KICAgIC0jZGVmaW5lIGZvcl9hbGxf
c3ltYm9scyhpLCBzeW0pIGZvciAoaSA9IDA7IGkgPCBTWU1CT0xfSEFTSFNJWkU7IGkrKykgZm9y
IChzeW0gPSBzeW1ib2xfaGFzaFtpXTsgc3ltOyBzeW0gPSBzeW0tPm5leHQpDQogICAgLQ0KICAg
IC0jZGVmaW5lIFNZTUJPTF9DT05TVCAgICAgIDB4MDAwMSAgLyogc3ltYm9sIGlzIGNvbnN0ICov
DQogICAgLSNkZWZpbmUgU1lNQk9MX0NIRUNLICAgICAgMHgwMDA4ICAvKiB1c2VkIGR1cmluZyBk
ZXBlbmRlbmN5IGNoZWNraW5nICovDQogICAgLSNkZWZpbmUgU1lNQk9MX0NIT0lDRSAgICAgMHgw
MDEwICAvKiBzdGFydCBvZiBhIGNob2ljZSBibG9jayAobnVsbCBuYW1lKSAqLw0KICAgIC0jZGVm
aW5lIFNZTUJPTF9DSE9JQ0VWQUwgIDB4MDAyMCAgLyogdXNlZCBhcyBhIHZhbHVlIGluIGEgY2hv
aWNlIGJsb2NrICovDQogICAgLSNkZWZpbmUgU1lNQk9MX1ZBTElEICAgICAgMHgwMDgwICAvKiBz
ZXQgd2hlbiBzeW1ib2wuY3VyciBpcyBjYWxjdWxhdGVkICovDQogICAgLSNkZWZpbmUgU1lNQk9M
X09QVElPTkFMICAgMHgwMTAwICAvKiBjaG9pY2UgaXMgb3B0aW9uYWwgLSB2YWx1ZXMgY2FuIGJl
ICduJyAqLw0KICAgIC0jZGVmaW5lIFNZTUJPTF9XUklURSAgICAgIDB4MDIwMCAgLyogd3JpdGUg
c3ltYm9sIHRvIGZpbGUgKEtDT05GSUdfQ09ORklHKSAqLw0KICAgIC0jZGVmaW5lIFNZTUJPTF9D
SEFOR0VEICAgIDB4MDQwMCAgLyogPyAqLw0KICAgIC0jZGVmaW5lIFNZTUJPTF9OT19XUklURSAg
IDB4MTAwMCAgLyogU3ltYm9sIGZvciBpbnRlcm5hbCB1c2Ugb25seTsgaXQgd2lsbCBub3QgYmUg
d3JpdHRlbiAqLw0KICAgIC0jZGVmaW5lIFNZTUJPTF9DSEVDS0VEICAgIDB4MjAwMCAgLyogdXNl
ZCBkdXJpbmcgZGVwZW5kZW5jeSBjaGVja2luZyAqLw0KICAgIC0jZGVmaW5lIFNZTUJPTF9XQVJO
RUQgICAgIDB4ODAwMCAgLyogd2FybmluZyBoYXMgYmVlbiBpc3N1ZWQgKi8NCiAgICAtDQogICAg
LS8qIFNldCB3aGVuIHN5bWJvbC5kZWZbXSBpcyB1c2VkICovDQogICAgLSNkZWZpbmUgU1lNQk9M
X0RFRiAgICAgICAgMHgxMDAwMCAgLyogRmlyc3QgYml0IG9mIFNZTUJPTF9ERUYgKi8NCiAgICAt
I2RlZmluZSBTWU1CT0xfREVGX1VTRVIgICAweDEwMDAwICAvKiBzeW1ib2wuZGVmW1NfREVGX1VT
RVJdIGlzIHZhbGlkICovDQogICAgLSNkZWZpbmUgU1lNQk9MX0RFRl9BVVRPICAgMHgyMDAwMCAg
Lyogc3ltYm9sLmRlZltTX0RFRl9BVVRPXSBpcyB2YWxpZCAqLw0KICAgIC0jZGVmaW5lIFNZTUJP
TF9ERUYzICAgICAgIDB4NDAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfM10gaXMgdmFsaWQgKi8N
CiAgICAtI2RlZmluZSBTWU1CT0xfREVGNCAgICAgICAweDgwMDAwICAvKiBzeW1ib2wuZGVmW1Nf
REVGXzRdIGlzIHZhbGlkICovDQogICAgLQ0KICAgIC0vKiBjaG9pY2UgdmFsdWVzIG5lZWQgdG8g
YmUgc2V0IGJlZm9yZSBjYWxjdWxhdGluZyB0aGlzIHN5bWJvbCB2YWx1ZSAqLw0KICAgIC0jZGVm
aW5lIFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTICAweDEwMDAwMA0KICAgIC0NCiAgICAt
LyogU2V0IHN5bWJvbCB0byB5IGlmIGFsbG5vY29uZmlnOyB1c2VkIGZvciBzeW1ib2xzIHRoYXQg
aGlkZSBvdGhlcnMgKi8NCiAgICAtI2RlZmluZSBTWU1CT0xfQUxMTk9DT05GSUdfWSAweDIwMDAw
MA0KICAgIC0NCiAgICAtI2RlZmluZSBTWU1CT0xfTUFYTEVOR1RICTI1Ng0KICAgIC0jZGVmaW5l
IFNZTUJPTF9IQVNIU0laRQkJOTk3Mw0KICAgIC0NCiAgICAtLyogQSBwcm9wZXJ0eSByZXByZXNl
bnQgdGhlIGNvbmZpZyBvcHRpb25zIHRoYXQgY2FuIGJlIGFzc29jaWF0ZWQNCiAgICAtICogd2l0
aCBhIGNvbmZpZyAic3ltYm9sIi4NCiAgICAtICogU2FtcGxlOg0KICAgIC0gKiBjb25maWcgRk9P
DQogICAgLSAqICAgICAgICAgZGVmYXVsdCB5DQogICAgLSAqICAgICAgICAgcHJvbXB0ICJmb28g
cHJvbXB0Ig0KICAgIC0gKiAgICAgICAgIHNlbGVjdCBCQVINCiAgICAtICogY29uZmlnIEJBWg0K
ICAgIC0gKiAgICAgICAgIGludCAiQkFaIFZhbHVlIg0KICAgIC0gKiAgICAgICAgIHJhbmdlIDEu
LjI1NQ0KICAgIC0gKg0KICAgIC0gKiBQbGVhc2UsIGFsc28gY2hlY2sgcGFyc2VyLnk6cHJpbnRf
c3ltYm9sKCkgd2hlbiBtb2RpZnlpbmcgdGhlDQogICAgLSAqIGxpc3Qgb2YgcHJvcGVydHkgdHlw
ZXMhDQogICAgLSAqLw0KICAgIC1lbnVtIHByb3BfdHlwZSB7DQogICAgLQlQX1VOS05PV04sDQog
ICAgLQlQX1BST01QVCwgICAvKiBwcm9tcHQgImZvbyBwcm9tcHQiIG9yICJCQVogVmFsdWUiICov
DQogICAgLQlQX0NPTU1FTlQsICAvKiB0ZXh0IGFzc29jaWF0ZWQgd2l0aCBhIGNvbW1lbnQgKi8N
CiAgICAtCVBfTUVOVSwgICAgIC8qIHByb21wdCBhc3NvY2lhdGVkIHdpdGggYSBtZW51IG9yIG1l
bnVjb25maWcgc3ltYm9sICovDQogICAgLQlQX0RFRkFVTFQsICAvKiBkZWZhdWx0IHkgKi8NCiAg
ICAtCVBfQ0hPSUNFLCAgIC8qIGNob2ljZSB2YWx1ZSAqLw0KICAgIC0JUF9TRUxFQ1QsICAgLyog
c2VsZWN0IEJBUiAqLw0KICAgIC0JUF9JTVBMWSwgICAgLyogaW1wbHkgQkFSICovDQogICAgLQlQ
X1JBTkdFLCAgICAvKiByYW5nZSA3Li4xMDAgKGZvciBhIHN5bWJvbCkgKi8NCiAgICAtCVBfU1lN
Qk9MLCAgIC8qIHdoZXJlIGEgc3ltYm9sIGlzIGRlZmluZWQgKi8NCiAgICAtfTsNCiAgICAtDQog
ICAgLXN0cnVjdCBwcm9wZXJ0eSB7DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKm5leHQ7ICAgICAv
KiBuZXh0IHByb3BlcnR5IC0gbnVsbCBpZiBsYXN0ICovDQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpz
eW07ICAgICAgICAvKiB0aGUgc3ltYm9sIGZvciB3aGljaCB0aGUgcHJvcGVydHkgaXMgYXNzb2Np
YXRlZCAqLw0KICAgIC0JZW51bSBwcm9wX3R5cGUgdHlwZTsgICAgICAgLyogdHlwZSBvZiBwcm9w
ZXJ0eSAqLw0KICAgIC0JY29uc3QgY2hhciAqdGV4dDsgICAgICAgICAgLyogdGhlIHByb21wdCB2
YWx1ZSAtIFBfUFJPTVBULCBQX01FTlUsIFBfQ09NTUVOVCAqLw0KICAgIC0Jc3RydWN0IGV4cHJf
dmFsdWUgdmlzaWJsZTsNCiAgICAtCXN0cnVjdCBleHByICpleHByOyAgICAgICAgIC8qIHRoZSBv
cHRpb25hbCBjb25kaXRpb25hbCBwYXJ0IG9mIHRoZSBwcm9wZXJ0eSAqLw0KICAgIC0Jc3RydWN0
IG1lbnUgKm1lbnU7ICAgICAgICAgLyogdGhlIG1lbnUgdGhlIHByb3BlcnR5IGFyZSBhc3NvY2lh
dGVkIHdpdGgNCiAgICAtCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbGlkIGZvcjog
UF9TRUxFQ1QsIFBfUkFOR0UsIFBfQ0hPSUNFLA0KICAgIC0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogUF9QUk9NUFQsIFBfREVGQVVMVCwgUF9NRU5VLCBQX0NPTU1FTlQgKi8NCiAgICAt
CXN0cnVjdCBmaWxlICpmaWxlOyAgICAgICAgIC8qIHdoYXQgZmlsZSB3YXMgdGhpcyBwcm9wZXJ0
eSBkZWZpbmVkICovDQogICAgLQlpbnQgbGluZW5vOyAgICAgICAgICAgICAgICAvKiB3aGF0IGxp
bmVubyB3YXMgdGhpcyBwcm9wZXJ0eSBkZWZpbmVkICovDQogICAgLX07DQogICAgLQ0KICAgIC0j
ZGVmaW5lIGZvcl9hbGxfcHJvcGVydGllcyhzeW0sIHN0LCB0b2spIFwNCiAgICAtCWZvciAoc3Qg
PSBzeW0tPnByb3A7IHN0OyBzdCA9IHN0LT5uZXh0KSBcDQogICAgLQkJaWYgKHN0LT50eXBlID09
ICh0b2spKQ0KICAgIC0jZGVmaW5lIGZvcl9hbGxfZGVmYXVsdHMoc3ltLCBzdCkgZm9yX2FsbF9w
cm9wZXJ0aWVzKHN5bSwgc3QsIFBfREVGQVVMVCkNCiAgICAtI2RlZmluZSBmb3JfYWxsX2Nob2lj
ZXMoc3ltLCBzdCkgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIFBfQ0hPSUNFKQ0KICAgIC0j
ZGVmaW5lIGZvcl9hbGxfcHJvbXB0cyhzeW0sIHN0KSBcDQogICAgLQlmb3IgKHN0ID0gc3ltLT5w
cm9wOyBzdDsgc3QgPSBzdC0+bmV4dCkgXA0KICAgIC0JCWlmIChzdC0+dGV4dCkNCiAgICAtDQog
ICAgLS8qDQogICAgLSAqIFJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBtZW51IHRyZWUsIGFzIHNl
ZW4gaW4gZS5nLiBtZW51Y29uZmlnICh0aG91Z2ggdXNlZA0KICAgIC0gKiBmb3IgYWxsIGZyb250
IGVuZHMpLiBFYWNoIHN5bWJvbCwgbWVudSwgZXRjLiBkZWZpbmVkIGluIHRoZSBLY29uZmlnIGZp
bGVzDQogICAgLSAqIGdldHMgYSBub2RlLiBBIHN5bWJvbCBkZWZpbmVkIGluIG11bHRpcGxlIGxv
Y2F0aW9ucyBnZXRzIG9uZSBub2RlIGF0IGVhY2gNCiAgICAtICogbG9jYXRpb24uDQogICAgLSAq
Lw0KICAgIC1zdHJ1Y3QgbWVudSB7DQogICAgLQkvKiBUaGUgbmV4dCBtZW51IG5vZGUgYXQgdGhl
IHNhbWUgbGV2ZWwgKi8NCiAgICAtCXN0cnVjdCBtZW51ICpuZXh0Ow0KICAgIC0NCiAgICAtCS8q
IFRoZSBwYXJlbnQgbWVudSBub2RlLCBjb3JyZXNwb25kaW5nIHRvIGUuZy4gYSBtZW51IG9yIGNo
b2ljZSAqLw0KICAgIC0Jc3RydWN0IG1lbnUgKnBhcmVudDsNCiAgICAtDQogICAgLQkvKiBUaGUg
Zmlyc3QgY2hpbGQgbWVudSBub2RlLCBmb3IgZS5nLiBtZW51cyBhbmQgY2hvaWNlcyAqLw0KICAg
IC0Jc3RydWN0IG1lbnUgKmxpc3Q7DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAqIFRoZSBzeW1i
b2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW51IG5vZGUuIENob2ljZXMgYXJlIGltcGxlbWVudGVk
IGFzDQogICAgLQkgKiBhIHNwZWNpYWwga2luZCBvZiBzeW1ib2wuIE5VTEwgZm9yIG1lbnVzLCBj
b21tZW50cywgYW5kIGlmcy4NCiAgICAtCSAqLw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0K
ICAgIC0NCiAgICAtCS8qDQogICAgLQkgKiBUaGUgcHJvbXB0IGFzc29jaWF0ZWQgd2l0aCB0aGUg
bm9kZS4gVGhpcyBob2xkcyB0aGUgcHJvbXB0IGZvciBhDQogICAgLQkgKiBzeW1ib2wgYXMgd2Vs
bCBhcyB0aGUgdGV4dCBmb3IgYSBtZW51IG9yIGNvbW1lbnQsIGFsb25nIHdpdGggdGhlDQogICAg
LQkgKiB0eXBlIChQX1BST01QVCwgUF9NRU5VLCBldGMuKQ0KICAgIC0JICovDQogICAgLQlzdHJ1
Y3QgcHJvcGVydHkgKnByb21wdDsNCiAgICAtDQogICAgLQkvKg0KICAgIC0JICogJ3Zpc2libGUg
aWYnIGRlcGVuZGVuY2llcy4gSWYgbW9yZSB0aGFuIG9uZSBpcyBnaXZlbiwgdGhleSB3aWxsIGJl
DQogICAgLQkgKiBBTkRlZCB0b2dldGhlci4NCiAgICAtCSAqLw0KICAgIC0Jc3RydWN0IGV4cHIg
KnZpc2liaWxpdHk7DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAqIE9yZGluYXJ5IGRlcGVuZGVu
Y2llcyBmcm9tIGUuZy4gJ2RlcGVuZHMgb24nIGFuZCAnaWYnLCBBTkRlZA0KICAgIC0JICogdG9n
ZXRoZXINCiAgICAtCSAqLw0KICAgIC0Jc3RydWN0IGV4cHIgKmRlcDsNCiAgICAtDQogICAgLQkv
KiBNRU5VXyogZmxhZ3MgKi8NCiAgICAtCXVuc2lnbmVkIGludCBmbGFnczsNCiAgICAtDQogICAg
LQkvKiBBbnkgaGVscCB0ZXh0IGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZSAqLw0KICAgIC0JY2hh
ciAqaGVscDsNCiAgICAtDQogICAgLQkvKiBUaGUgbG9jYXRpb24gd2hlcmUgdGhlIG1lbnUgbm9k
ZSBhcHBlYXJzIGluIHRoZSBLY29uZmlnIGZpbGVzICovDQogICAgLQlzdHJ1Y3QgZmlsZSAqZmls
ZTsNCiAgICAtCWludCBsaW5lbm87DQogICAgLQ0KICAgIC0JLyogRm9yIHVzZSBieSBmcm9udCBl
bmRzIHRoYXQgbmVlZCB0byBzdG9yZSBhdXhpbGlhcnkgZGF0YSAqLw0KICAgIC0Jdm9pZCAqZGF0
YTsNCiAgICAtfTsNCiAgICAtDQogICAgLS8qDQogICAgLSAqIFNldCBvbiBhIG1lbnUgbm9kZSB3
aGVuIHRoZSBjb3JyZXNwb25kaW5nIHN5bWJvbCBjaGFuZ2VzIHN0YXRlIGluIHNvbWUgd2F5Lg0K
ICAgIC0gKiBDYW4gYmUgY2hlY2tlZCBieSBmcm9udCBlbmRzLg0KICAgIC0gKi8NCiAgICAtI2Rl
ZmluZSBNRU5VX0NIQU5HRUQJCTB4MDAwMQ0KICAgIC0NCiAgICAtI2RlZmluZSBNRU5VX1JPT1QJ
CTB4MDAwMg0KICAgIC0NCiAgICAtc3RydWN0IGp1bXBfa2V5IHsNCiAgICAtCXN0cnVjdCBsaXN0
X2hlYWQgZW50cmllczsNCiAgICAtCXNpemVfdCBvZmZzZXQ7DQogICAgLQlzdHJ1Y3QgbWVudSAq
dGFyZ2V0Ow0KICAgIC0JaW50IGluZGV4Ow0KICAgIC19Ow0KICAgIC0NCiAgICAtI2RlZmluZSBK
VU1QX05CCQkJOQ0KICAgIC0NCiAgICAtZXh0ZXJuIHN0cnVjdCBmaWxlICpmaWxlX2xpc3Q7DQog
ICAgLWV4dGVybiBzdHJ1Y3QgZmlsZSAqY3VycmVudF9maWxlOw0KICAgIC1zdHJ1Y3QgZmlsZSAq
bG9va3VwX2ZpbGUoY29uc3QgY2hhciAqbmFtZSk7DQogICAgLQ0KICAgIC1leHRlcm4gc3RydWN0
IHN5bWJvbCBzeW1ib2xfeWVzLCBzeW1ib2xfbm8sIHN5bWJvbF9tb2Q7DQogICAgLWV4dGVybiBz
dHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsNCiAgICAtZXh0ZXJuIHN0cnVjdCBzeW1ib2wgKnN5
bV9kZWZjb25maWdfbGlzdDsNCiAgICAtZXh0ZXJuIGludCBjZGVidWc7DQogICAgLXN0cnVjdCBl
eHByICpleHByX2FsbG9jX3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgIC1zdHJ1Y3Qg
ZXhwciAqZXhwcl9hbGxvY19vbmUoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmNl
KTsNCiAgICAtc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90eXBlIHR5cGUs
IHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsNCiAgICAtc3RydWN0IGV4cHIgKmV4
cHJfYWxsb2NfY29tcChlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzMSwgc3Ry
dWN0IHN5bWJvbCAqczIpOw0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0
IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOw0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl9hbGxv
Y19vcihzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBleHByICplMik7DQogICAgLXN0cnVjdCBleHBy
ICpleHByX2NvcHkoY29uc3Qgc3RydWN0IGV4cHIgKm9yZyk7DQogICAgLXZvaWQgZXhwcl9mcmVl
KHN0cnVjdCBleHByICplKTsNCiAgICAtdm9pZCBleHByX2VsaW1pbmF0ZV9lcShzdHJ1Y3QgZXhw
ciAqKmVwMSwgc3RydWN0IGV4cHIgKiplcDIpOw0KICAgIC10cmlzdGF0ZSBleHByX2NhbGNfdmFs
dWUoc3RydWN0IGV4cHIgKmUpOw0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl90cmFuc19ib29sKHN0
cnVjdCBleHByICplKTsNCiAgICAtc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX2R1cHMoc3Ry
dWN0IGV4cHIgKmUpOw0KICAgIC1zdHJ1Y3QgZXhwciAqZXhwcl90cmFuc2Zvcm0oc3RydWN0IGV4
cHIgKmUpOw0KICAgIC1pbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwg
c3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAtYm9vbCBleHByX2RlcGVuZHNfc3ltYm9sKHN0cnVj
dCBleHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLXN0cnVjdCBleHByICpleHBy
X3RyYW5zX2NvbXBhcmUoc3RydWN0IGV4cHIgKmUsIGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVj
dCBzeW1ib2wgKnN5bSk7DQogICAgLQ0KICAgIC12b2lkIGV4cHJfZnByaW50KHN0cnVjdCBleHBy
ICplLCBGSUxFICpvdXQpOw0KICAgIC1zdHJ1Y3QgZ3N0cjsgLyogZm9yd2FyZCAqLw0KICAgIC12
b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKTsNCiAg
ICAtdm9pZCBleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0
ciAqZ3MsDQogICAgLQkJCSAgICB0cmlzdGF0ZSBwcl90eXBlLCBjb25zdCBjaGFyICp0aXRsZSk7
DQogICAgLQ0KICAgIC1zdGF0aWMgaW5saW5lIGludCBleHByX2lzX3llcyhzdHJ1Y3QgZXhwciAq
ZSkNCiAgICAtew0KICAgIC0JcmV0dXJuICFlIHx8IChlLT50eXBlID09IEVfU1lNQk9MICYmIGUt
PmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGlu
bGluZSBpbnQgZXhwcl9pc19ubyhzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0JcmV0dXJu
IGUgJiYgKGUtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubyk7
DQogICAgLX0NCiAgICAtDQogICAgLSNpZmRlZiBfX2NwbHVzcGx1cw0KICAgIC19DQogICAgLSNl
bmRpZg0KICAgIC0NCiAgICAtI2VuZGlmIC8qIEVYUFJfSCAqLw0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAu
Yw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDk3YWZiNzAuLjAwMDAw
MDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jDQogICAgKysrIC9kZXYv
bnVsbA0KICAgIEBAIC0xLDM4MCArMCwwIEBADQogICAgLS8qDQogICAgLSAqICJPcHRpbWl6ZSIg
YSBsaXN0IG9mIGRlcGVuZGVuY2llcyBhcyBzcGl0IG91dCBieSBnY2MgLU1EDQogICAgLSAqIGZv
ciB0aGUga2VybmVsIGJ1aWxkDQogICAgLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgIC0gKg0K
ICAgIC0gKiBBdXRob3IgICAgICAgS2FpIEdlcm1hc2NoZXdza2kNCiAgICAtICogQ29weXJpZ2h0
ICAgIDIwMDIgYnkgS2FpIEdlcm1hc2NoZXdza2kgIDxrYWkuZ2VybWFzY2hld3NraUBnbXguZGU+
DQogICAgLSAqDQogICAgLSAqIFRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1
dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMNCiAgICAtICogb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4NCiAgICAtICoN
CiAgICAtICoNCiAgICAtICogSW50cm9kdWN0aW9uOg0KICAgIC0gKg0KICAgIC0gKiBnY2MgcHJv
ZHVjZXMgYSB2ZXJ5IG5pY2UgYW5kIGNvcnJlY3QgbGlzdCBvZiBkZXBlbmRlbmNpZXMgd2hpY2gN
CiAgICAtICogdGVsbHMgbWFrZSB3aGVuIHRvIHJlbWFrZSBhIGZpbGUuDQogICAgLSAqDQogICAg
LSAqIFRvIHVzZSB0aGlzIGxpc3QgYXMtaXMgaG93ZXZlciBoYXMgdGhlIGRyYXdiYWNrIHRoYXQg
dmlydHVhbGx5DQogICAgLSAqIGV2ZXJ5IGZpbGUgaW4gdGhlIGtlcm5lbCBpbmNsdWRlcyBhdXRv
Y29uZi5oLg0KICAgIC0gKg0KICAgIC0gKiBJZiB0aGUgdXNlciByZS1ydW5zIG1ha2UgKmNvbmZp
ZywgYXV0b2NvbmYuaCB3aWxsIGJlDQogICAgLSAqIHJlZ2VuZXJhdGVkLiAgbWFrZSBub3RpY2Vz
IHRoYXQgYW5kIHdpbGwgcmVidWlsZCBldmVyeSBmaWxlIHdoaWNoDQogICAgLSAqIGluY2x1ZGVz
IGF1dG9jb25mLmgsIGkuZS4gYmFzaWNhbGx5IGFsbCBmaWxlcy4gVGhpcyBpcyBleHRyZW1lbHkN
CiAgICAtICogYW5ub3lpbmcgaWYgdGhlIHVzZXIganVzdCBjaGFuZ2VkIENPTkZJR19ISVNfRFJJ
VkVSIGZyb20gbiB0byBtLg0KICAgIC0gKg0KICAgIC0gKiBTbyB3ZSBwbGF5IHRoZSBzYW1lIHRy
aWNrIHRoYXQgIm1rZGVwIiBwbGF5ZWQgYmVmb3JlLiBXZSByZXBsYWNlDQogICAgLSAqIHRoZSBk
ZXBlbmRlbmN5IG9uIGF1dG9jb25mLmggYnkgYSBkZXBlbmRlbmN5IG9uIGV2ZXJ5IGNvbmZpZw0K
ICAgIC0gKiBvcHRpb24gd2hpY2ggaXMgbWVudGlvbmVkIGluIGFueSBvZiB0aGUgbGlzdGVkIHBy
ZXJlcXVpc2l0ZXMuDQogICAgLSAqDQogICAgLSAqIGtjb25maWcgcG9wdWxhdGVzIGEgdHJlZSBp
biBpbmNsdWRlL2NvbmZpZy8gd2l0aCBhbiBlbXB0eSBmaWxlDQogICAgLSAqIGZvciBlYWNoIGNv
bmZpZyBzeW1ib2wgYW5kIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gaXMgdXBkYXRlZA0KICAgIC0g
KiB0aGUgZmlsZXMgcmVwcmVzZW50aW5nIGNoYW5nZWQgY29uZmlnIG9wdGlvbnMgYXJlIHRvdWNo
ZWQNCiAgICAtICogd2hpY2ggdGhlbiBsZXQgbWFrZSBwaWNrIHVwIHRoZSBjaGFuZ2VzIGFuZCB0
aGUgZmlsZXMgdGhhdCB1c2UNCiAgICAtICogdGhlIGNvbmZpZyBzeW1ib2xzIGFyZSByZWJ1aWx0
Lg0KICAgIC0gKg0KICAgIC0gKiBTbyBpZiB0aGUgdXNlciBjaGFuZ2VzIGhpcyBDT05GSUdfSElT
X0RSSVZFUiBvcHRpb24sIG9ubHkgdGhlIG9iamVjdHMNCiAgICAtICogd2hpY2ggZGVwZW5kIG9u
ICJpbmNsdWRlL2NvbmZpZy9oaXMvZHJpdmVyLmgiIHdpbGwgYmUgcmVidWlsdCwNCiAgICAtICog
c28gbW9zdCBsaWtlbHkgb25seSBoaXMgZHJpdmVyIDstKQ0KICAgIC0gKg0KICAgIC0gKiBUaGUg
aWRlYSBhYm92ZSBkYXRlcywgYnkgdGhlIHdheSwgYmFjayB0byBNaWNoYWVsIEUgQ2hhc3RhaW4s
IEFGQUlLLg0KICAgIC0gKg0KICAgIC0gKiBTbyB0byBnZXQgZGVwZW5kZW5jaWVzIHJpZ2h0LCB0
aGVyZSBhcmUgdHdvIGlzc3VlczoNCiAgICAtICogbyBpZiBhbnkgb2YgdGhlIGZpbGVzIHRoZSBj
b21waWxlciByZWFkIGNoYW5nZWQsIHdlIG5lZWQgdG8gcmVidWlsZA0KICAgIC0gKiBvIGlmIHRo
ZSBjb21tYW5kIGxpbmUgZ2l2ZW4gdG8gdGhlIGNvbXBpbGUgdGhlIGZpbGUgY2hhbmdlZCwgd2UN
CiAgICAtICogICBiZXR0ZXIgcmVidWlsZCBhcyB3ZWxsLg0KICAgIC0gKg0KICAgIC0gKiBUaGUg
Zm9ybWVyIGlzIGhhbmRsZWQgYnkgdXNpbmcgdGhlIC1NRCBvdXRwdXQsIHRoZSBsYXRlciBieSBz
YXZpbmcNCiAgICAtICogdGhlIGNvbW1hbmQgbGluZSB1c2VkIHRvIGNvbXBpbGUgdGhlIG9sZCBv
YmplY3QgYW5kIGNvbXBhcmluZyBpdA0KICAgIC0gKiB0byB0aGUgb25lIHdlIHdvdWxkIG5vdyB1
c2UuDQogICAgLSAqDQogICAgLSAqIEFnYWluLCBhbHNvIHRoaXMgaWRlYSBpcyBwcmV0dHkgb2xk
IGFuZCBoYXMgYmVlbiBkaXNjdXNzZWQgb24NCiAgICAtICoga2J1aWxkLWRldmVsIGEgbG9uZyB0
aW1lIGFnby4gSSBkb24ndCBoYXZlIGEgc2Vuc2libHkgd29ya2luZw0KICAgIC0gKiBpbnRlcm5l
dCBjb25uZWN0aW9uIHJpZ2h0IG5vdywgc28gSSByYXRoZXIgZG9uJ3QgbWVudGlvbiBuYW1lcw0K
ICAgIC0gKiB3aXRob3V0IGRvdWJsZSBjaGVja2luZy4NCiAgICAtICoNCiAgICAtICogVGhpcyBj
b2RlIGhlcmUgaGFzIGJlZW4gYmFzZWQgcGFydGlhbGx5IGJhc2VkIG9uIG1rZGVwLmMsIHdoaWNo
DQogICAgLSAqIHNheXMgdGhlIGZvbGxvd2luZyBhYm91dCBpdHMgaGlzdG9yeToNCiAgICAtICoN
CiAgICAtICogICBDb3B5cmlnaHQgYWJhbmRvbmVkLCBNaWNoYWVsIENoYXN0YWluLCA8bWFpbHRv
Om1lY0BzaG91dC5uZXQ+Lg0KICAgIC0gKiAgIFRoaXMgaXMgYSBDIHZlcnNpb24gb2Ygc3luY2Rl
cC5wbCBieSBXZXJuZXIgQWxtZXNiZXJnZXIuDQogICAgLSAqDQogICAgLSAqDQogICAgLSAqIEl0
IGlzIGludm9rZWQgYXMNCiAgICAtICoNCiAgICAtICogICBmaXhkZXAgPGRlcGZpbGU+IDx0YXJn
ZXQ+IDxjbWRsaW5lPg0KICAgIC0gKg0KICAgIC0gKiBhbmQgd2lsbCByZWFkIHRoZSBkZXBlbmRl
bmN5IGZpbGUgPGRlcGZpbGU+DQogICAgLSAqDQogICAgLSAqIFRoZSB0cmFuc2Zvcm1lZCBkZXBl
bmRlbmN5IHNuaXBwZWQgaXMgd3JpdHRlbiB0byBzdGRvdXQuDQogICAgLSAqDQogICAgLSAqIEl0
IGZpcnN0IGdlbmVyYXRlcyBhIGxpbmUNCiAgICAtICoNCiAgICAtICogICBjbWRfPHRhcmdldD4g
PSA8Y21kbGluZT4NCiAgICAtICoNCiAgICAtICogYW5kIHRoZW4gYmFzaWNhbGx5IGNvcGllcyB0
aGUgLjx0YXJnZXQ+LmQgZmlsZSB0byBzdGRvdXQsIGluIHRoZQ0KICAgIC0gKiBwcm9jZXNzIGZp
bHRlcmluZyBvdXQgdGhlIGRlcGVuZGVuY3kgb24gYXV0b2NvbmYuaCBhbmQgYWRkaW5nDQogICAg
LSAqIGRlcGVuZGVuY2llcyBvbiBpbmNsdWRlL2NvbmZpZy9teS9vcHRpb24uaCBmb3IgZXZlcnkN
CiAgICAtICogQ09ORklHX01ZX09QVElPTiBlbmNvdW50ZXJlZCBpbiBhbnkgb2YgdGhlIHByZXJl
cXVpc2l0ZXMuDQogICAgLSAqDQogICAgLSAqIEl0IHdpbGwgYWxzbyBmaWx0ZXIgb3V0IGFsbCB0
aGUgZGVwZW5kZW5jaWVzIG9uICoudmVyLiBXZSBuZWVkDQogICAgLSAqIHRvIG1ha2Ugc3VyZSB0
aGF0IHRoZSBnZW5lcmF0ZWQgdmVyc2lvbiBjaGVja3N1bSBhcmUgZ2xvYmFsbHkgdXANCiAgICAt
ICogdG8gZGF0ZSBiZWZvcmUgZXZlbiBzdGFydGluZyB0aGUgcmVjdXJzaXZlIGJ1aWxkLCBzbyBp
dCdzIHRvbyBsYXRlDQogICAgLSAqIGF0IHRoaXMgcG9pbnQgYW55d2F5Lg0KICAgIC0gKg0KICAg
IC0gKiBXZSBkb24ndCBldmVuIHRyeSB0byByZWFsbHkgcGFyc2UgdGhlIGhlYWRlciBmaWxlcywg
YnV0DQogICAgLSAqIG1lcmVseSBncmVwLCBpLmUuIGlmIENPTkZJR19GT08gaXMgbWVudGlvbmVk
IGluIGEgY29tbWVudCwgaXQgd2lsbA0KICAgIC0gKiBiZSBwaWNrZWQgdXAgYXMgd2VsbC4gSXQn
cyBub3QgYSBwcm9ibGVtIHdpdGggcmVzcGVjdCB0bw0KICAgIC0gKiBjb3JyZWN0bmVzcywgc2lu
Y2UgdGhhdCBjYW4gb25seSBnaXZlIHRvbyBtYW55IGRlcGVuZGVuY2llcywgdGh1cw0KICAgIC0g
KiB3ZSBjYW5ub3QgbWlzcyBhIHJlYnVpbGQuIFNpbmNlIHBlb3BsZSB0ZW5kIHRvIG5vdCBtZW50
aW9uIHRvdGFsbHkNCiAgICAtICogdW5yZWxhdGVkIENPTkZJR18gb3B0aW9ucyBhbGwgb3ZlciB0
aGUgcGxhY2UsIGl0J3Mgbm90IGFuDQogICAgLSAqIGVmZmljaWVuY3kgcHJvYmxlbSBlaXRoZXIu
DQogICAgLSAqDQogICAgLSAqIChOb3RlOiBpdCdkIGJlIGVhc3kgdG8gcG9ydCBvdmVyIHRoZSBj
b21wbGV0ZSBta2RlcCBzdGF0ZSBtYWNoaW5lLA0KICAgIC0gKiAgYnV0IEkgZG9uJ3QgdGhpbmsg
dGhlIGFkZGVkIGNvbXBsZXhpdHkgaXMgd29ydGggaXQpDQogICAgLSAqLw0KICAgIC0NCiAgICAt
I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICAgIC0jaW5jbHVkZSA8c3lzL3N0YXQuaD4NCiAgICAt
I2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgIC0jaW5jbHVkZSA8ZmNudGwuaD4NCiAgICAtI2luY2x1
ZGUgPHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAgLSNpbmNsdWRlIDxz
dGRpby5oPg0KICAgIC0jaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAtDQogICAgLXN0YXRpYyB2b2lk
IHVzYWdlKHZvaWQpDQogICAgLXsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiVXNhZ2U6IGZpeGRl
cCA8ZGVwZmlsZT4gPHRhcmdldD4gPGNtZGxpbmU+XG4iKTsNCiAgICAtCWV4aXQoMSk7DQogICAg
LX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIFByaW50IG91dCBhIGRlcGVuZGVuY3kgcGF0aCBm
cm9tIGEgc3ltYm9sIG5hbWUNCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkIHByaW50X2RlcChj
b25zdCBjaGFyICptLCBpbnQgc2xlbiwgY29uc3QgY2hhciAqZGlyKQ0KICAgIC17DQogICAgLQlp
bnQgYywgcHJldl9jID0gJy8nLCBpOw0KICAgIC0NCiAgICAtCXByaW50ZigiICAgICQod2lsZGNh
cmQgJXMvIiwgZGlyKTsNCiAgICAtCWZvciAoaSA9IDA7IGkgPCBzbGVuOyBpKyspIHsNCiAgICAt
CQljID0gbVtpXTsNCiAgICAtCQlpZiAoYyA9PSAnXycpDQogICAgLQkJCWMgPSAnLyc7DQogICAg
LQkJZWxzZQ0KICAgIC0JCQljID0gdG9sb3dlcihjKTsNCiAgICAtCQlpZiAoYyAhPSAnLycgfHwg
cHJldl9jICE9ICcvJykNCiAgICAtCQkJcHV0Y2hhcihjKTsNCiAgICAtCQlwcmV2X2MgPSBjOw0K
ICAgIC0JfQ0KICAgIC0JcHJpbnRmKCIuaCkgXFxcbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1z
dHJ1Y3QgaXRlbSB7DQogICAgLQlzdHJ1Y3QgaXRlbQkqbmV4dDsNCiAgICAtCXVuc2lnbmVkIGlu
dAlsZW47DQogICAgLQl1bnNpZ25lZCBpbnQJaGFzaDsNCiAgICAtCWNoYXIJCW5hbWVbMF07DQog
ICAgLX07DQogICAgLQ0KICAgIC0jZGVmaW5lIEhBU0hTWiAyNTYNCiAgICAtc3RhdGljIHN0cnVj
dCBpdGVtICpoYXNodGFiW0hBU0hTWl07DQogICAgLQ0KICAgIC1zdGF0aWMgdW5zaWduZWQgaW50
IHN0cmhhc2goY29uc3QgY2hhciAqc3RyLCB1bnNpZ25lZCBpbnQgc3opDQogICAgLXsNCiAgICAt
CS8qIGZudjMyIGhhc2ggKi8NCiAgICAtCXVuc2lnbmVkIGludCBpLCBoYXNoID0gMjE2NjEzNjI2
MVU7DQogICAgLQ0KICAgIC0JZm9yIChpID0gMDsgaSA8IHN6OyBpKyspDQogICAgLQkJaGFzaCA9
IChoYXNoIF4gc3RyW2ldKSAqIDB4MDEwMDAxOTM7DQogICAgLQlyZXR1cm4gaGFzaDsNCiAgICAt
fQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogTG9va3VwIGEgdmFsdWUgaW4gdGhlIGNvbmZpZ3Vy
YXRpb24gc3RyaW5nLg0KICAgIC0gKi8NCiAgICAtc3RhdGljIGludCBpc19kZWZpbmVkX2NvbmZp
Zyhjb25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgaGFzaCkNCiAgICAtew0K
ICAgIC0Jc3RydWN0IGl0ZW0gKmF1eDsNCiAgICAtDQogICAgLQlmb3IgKGF1eCA9IGhhc2h0YWJb
aGFzaCAlIEhBU0hTWl07IGF1eDsgYXV4ID0gYXV4LT5uZXh0KSB7DQogICAgLQkJaWYgKGF1eC0+
aGFzaCA9PSBoYXNoICYmIGF1eC0+bGVuID09IGxlbiAmJg0KICAgIC0JCSAgICBtZW1jbXAoYXV4
LT5uYW1lLCBuYW1lLCBsZW4pID09IDApDQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JfQ0KICAg
IC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIEFkZCBhIG5ldyB2
YWx1ZSB0byB0aGUgY29uZmlndXJhdGlvbiBzdHJpbmcuDQogICAgLSAqLw0KICAgIC1zdGF0aWMg
dm9pZCBkZWZpbmVfY29uZmlnKGNvbnN0IGNoYXIgKm5hbWUsIGludCBsZW4sIHVuc2lnbmVkIGlu
dCBoYXNoKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgaXRlbSAqYXV4ID0gbWFsbG9jKHNpemVvZigq
YXV4KSArIGxlbik7DQogICAgLQ0KICAgIC0JaWYgKCFhdXgpIHsNCiAgICAtCQlwZXJyb3IoImZp
eGRlcDptYWxsb2MiKTsNCiAgICAtCQlleGl0KDEpOw0KICAgIC0JfQ0KICAgIC0JbWVtY3B5KGF1
eC0+bmFtZSwgbmFtZSwgbGVuKTsNCiAgICAtCWF1eC0+bGVuID0gbGVuOw0KICAgIC0JYXV4LT5o
YXNoID0gaGFzaDsNCiAgICAtCWF1eC0+bmV4dCA9IGhhc2h0YWJbaGFzaCAlIEhBU0hTWl07DQog
ICAgLQloYXNodGFiW2hhc2ggJSBIQVNIU1pdID0gYXV4Ow0KICAgIC19DQogICAgLQ0KICAgIC0v
Kg0KICAgIC0gKiBSZWNvcmQgdGhlIHVzZSBvZiBhIENPTkZJR18qIHdvcmQuDQogICAgLSAqLw0K
ICAgIC1zdGF0aWMgdm9pZCB1c2VfY29uZmlnKGNvbnN0IGNoYXIgKm0sIGludCBzbGVuKQ0KICAg
IC17DQogICAgLQl1bnNpZ25lZCBpbnQgaGFzaCA9IHN0cmhhc2gobSwgc2xlbik7DQogICAgLQ0K
ICAgIC0JaWYgKGlzX2RlZmluZWRfY29uZmlnKG0sIHNsZW4sIGhhc2gpKQ0KICAgIC0JICAgIHJl
dHVybjsNCiAgICAtDQogICAgLQlkZWZpbmVfY29uZmlnKG0sIHNsZW4sIGhhc2gpOw0KICAgIC0J
cHJpbnRfZGVwKG0sIHNsZW4sICJpbmNsdWRlL2NvbmZpZyIpOw0KICAgIC19DQogICAgLQ0KICAg
IC0vKiB0ZXN0IGlmIHMgZW5kcyBpbiBzdWIgKi8NCiAgICAtc3RhdGljIGludCBzdHJfZW5kc193
aXRoKGNvbnN0IGNoYXIgKnMsIGludCBzbGVuLCBjb25zdCBjaGFyICpzdWIpDQogICAgLXsNCiAg
ICAtCWludCBzdWJsZW4gPSBzdHJsZW4oc3ViKTsNCiAgICAtDQogICAgLQlpZiAoc3VibGVuID4g
c2xlbikNCiAgICAtCQlyZXR1cm4gMDsNCiAgICAtDQogICAgLQlyZXR1cm4gIW1lbWNtcChzICsg
c2xlbiAtIHN1Ymxlbiwgc3ViLCBzdWJsZW4pOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZCBwYXJzZV9jb25maWdfZmlsZShjb25zdCBjaGFyICpwKQ0KICAgIC17DQogICAgLQljb25z
dCBjaGFyICpxLCAqcjsNCiAgICAtCWNvbnN0IGNoYXIgKnN0YXJ0ID0gcDsNCiAgICAtDQogICAg
LQl3aGlsZSAoKHAgPSBzdHJzdHIocCwgIkNPTkZJR18iKSkpIHsNCiAgICAtCQlpZiAocCA+IHN0
YXJ0ICYmIChpc2FsbnVtKHBbLTFdKSB8fCBwWy0xXSA9PSAnXycpKSB7DQogICAgLQkJCXAgKz0g
NzsNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJfQ0KICAgIC0JCXAgKz0gNzsNCiAgICAtCQlx
ID0gcDsNCiAgICAtCQl3aGlsZSAoKnEgJiYgKGlzYWxudW0oKnEpIHx8ICpxID09ICdfJykpDQog
ICAgLQkJCXErKzsNCiAgICAtCQlpZiAoc3RyX2VuZHNfd2l0aChwLCBxIC0gcCwgIl9NT0RVTEUi
KSkNCiAgICAtCQkJciA9IHEgLSA3Ow0KICAgIC0JCWVsc2UNCiAgICAtCQkJciA9IHE7DQogICAg
LQkJaWYgKHIgPiBwKQ0KICAgIC0JCQl1c2VfY29uZmlnKHAsIHIgLSBwKTsNCiAgICAtCQlwID0g
cTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgKnJlYWRfZmlsZShj
b25zdCBjaGFyICpmaWxlbmFtZSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN0YXQgc3Q7DQogICAg
LQlpbnQgZmQ7DQogICAgLQljaGFyICpidWY7DQogICAgLQ0KICAgIC0JZmQgPSBvcGVuKGZpbGVu
YW1lLCBPX1JET05MWSk7DQogICAgLQlpZiAoZmQgPCAwKSB7DQogICAgLQkJZnByaW50ZihzdGRl
cnIsICJmaXhkZXA6IGVycm9yIG9wZW5pbmcgZmlsZTogIik7DQogICAgLQkJcGVycm9yKGZpbGVu
YW1lKTsNCiAgICAtCQlleGl0KDIpOw0KICAgIC0JfQ0KICAgIC0JaWYgKGZzdGF0KGZkLCAmc3Qp
IDwgMCkgew0KICAgIC0JCWZwcmludGYoc3RkZXJyLCAiZml4ZGVwOiBlcnJvciBmc3RhdCdpbmcg
ZmlsZTogIik7DQogICAgLQkJcGVycm9yKGZpbGVuYW1lKTsNCiAgICAtCQlleGl0KDIpOw0KICAg
IC0JfQ0KICAgIC0JYnVmID0gbWFsbG9jKHN0LnN0X3NpemUgKyAxKTsNCiAgICAtCWlmICghYnVm
KSB7DQogICAgLQkJcGVycm9yKCJmaXhkZXA6IG1hbGxvYyIpOw0KICAgIC0JCWV4aXQoMik7DQog
ICAgLQl9DQogICAgLQlpZiAocmVhZChmZCwgYnVmLCBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXpl
KSB7DQogICAgLQkJcGVycm9yKCJmaXhkZXA6IHJlYWQiKTsNCiAgICAtCQlleGl0KDIpOw0KICAg
IC0JfQ0KICAgIC0JYnVmW3N0LnN0X3NpemVdID0gJ1wwJzsNCiAgICAtCWNsb3NlKGZkKTsNCiAg
ICAtDQogICAgLQlyZXR1cm4gYnVmOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBJZ25vcmUgY2Vy
dGFpbiBkZXBlbmRlbmNpZXMgKi8NCiAgICAtc3RhdGljIGludCBpc19pZ25vcmVkX2ZpbGUoY29u
c3QgY2hhciAqcywgaW50IGxlbikNCiAgICAtew0KICAgIC0JcmV0dXJuIHN0cl9lbmRzX3dpdGgo
cywgbGVuLCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2NvbmYuaCIpIHx8DQogICAgLQkgICAgICAg
c3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5bXMuaCIpIHx8
DQogICAgLQkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICJidWlsZC9pbmNsdWRlL3VrL19j
b25maWcuaCIpIHx8DQogICAgLQkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICIudmVyIik7
DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIEltcG9ydGFudDogVGhlIGJlbG93IGdl
bmVyYXRlZCBzb3VyY2VfZm9vLm8gYW5kIGRlcHNfZm9vLm8gdmFyaWFibGUNCiAgICAtICogYXNz
aWdubWVudHMgYXJlIHBhcnNlZCBub3Qgb25seSBieSBtYWtlLCBidXQgYWxzbyBieSB0aGUgcmF0
aGVyIHNpbXBsZQ0KICAgIC0gKiBwYXJzZXIgaW4gc2NyaXB0cy9tb2Qvc3VtdmVyc2lvbi5jLg0K
ICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgcGFyc2VfZGVwX2ZpbGUoY2hhciAqbSwgY29uc3Qg
Y2hhciAqdGFyZ2V0KQ0KICAgIC17DQogICAgLQljaGFyICpwOw0KICAgIC0JaW50IGlzX2xhc3Qs
IGlzX3RhcmdldDsNCiAgICAtCWludCBzYXdfYW55X3RhcmdldCA9IDA7DQogICAgLQlpbnQgaXNf
Zmlyc3RfZGVwID0gMDsNCiAgICAtCXZvaWQgKmJ1ZjsNCiAgICAtDQogICAgLQl3aGlsZSAoMSkg
ew0KICAgIC0JCS8qIFNraXAgYW55ICJ3aGl0ZSBzcGFjZSIgKi8NCiAgICAtCQl3aGlsZSAoKm0g
PT0gJyAnIHx8ICptID09ICdcXCcgfHwgKm0gPT0gJ1xuJykNCiAgICAtCQkJbSsrOw0KICAgIC0N
CiAgICAtCQlpZiAoISptKQ0KICAgIC0JCQlicmVhazsNCiAgICAtDQogICAgLQkJLyogRmluZCBu
ZXh0ICJ3aGl0ZSBzcGFjZSIgKi8NCiAgICAtCQlwID0gbTsNCiAgICAtCQl3aGlsZSAoKnAgJiYg
KnAgIT0gJyAnICYmICpwICE9ICdcXCcgJiYgKnAgIT0gJ1xuJykNCiAgICAtCQkJcCsrOw0KICAg
IC0JCWlzX2xhc3QgPSAoKnAgPT0gJ1wwJyk7DQogICAgLQkJLyogSXMgdGhlIHRva2VuIHdlIGZv
dW5kIGEgdGFyZ2V0IG5hbWU/ICovDQogICAgLQkJaXNfdGFyZ2V0ID0gKCoocC0xKSA9PSAnOicp
Ow0KICAgIC0JCS8qIERvbid0IHdyaXRlIGFueSB0YXJnZXQgbmFtZXMgaW50byB0aGUgZGVwZW5k
ZW5jeSBmaWxlICovDQogICAgLQkJaWYgKGlzX3RhcmdldCkgew0KICAgIC0JCQkvKiBUaGUgL25l
eHQvIGZpbGUgaXMgdGhlIGZpcnN0IGRlcGVuZGVuY3kgKi8NCiAgICAtCQkJaXNfZmlyc3RfZGVw
ID0gMTsNCiAgICAtCQl9IGVsc2UgaWYgKCFpc19pZ25vcmVkX2ZpbGUobSwgcCAtIG0pKSB7DQog
ICAgLQkJCSpwID0gJ1wwJzsNCiAgICAtDQogICAgLQkJCS8qDQogICAgLQkJCSAqIERvIG5vdCBs
aXN0IHRoZSBzb3VyY2UgZmlsZSBhcyBkZXBlbmRlbmN5LCBzbyB0aGF0DQogICAgLQkJCSAqIGti
dWlsZCBpcyBub3QgY29uZnVzZWQgaWYgYSAuYyBmaWxlIGlzIHJld3JpdHRlbg0KICAgIC0JCQkg
KiBpbnRvIC5TIG9yIHZpY2UgdmVyc2EuIFN0b3JpbmcgaXQgaW4gc291cmNlXyogaXMNCiAgICAt
CQkJICogbmVlZGVkIGZvciBtb2Rwb3N0IHRvIGNvbXB1dGUgc3JjdmVyc2lvbnMuDQogICAgLQkJ
CSAqLw0KICAgIC0JCQlpZiAoaXNfZmlyc3RfZGVwKSB7DQogICAgLQkJCQkvKg0KICAgIC0JCQkJ
ICogSWYgcHJvY2Vzc2luZyB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtdWx0aXBsZQ0KICAgIC0JCQkJ
ICogZGVwZW5kZW5jeSBmaWxlcywgb25seSBwcm9jZXNzIHRoZSBmaXJzdA0KICAgIC0JCQkJICog
dGFyZ2V0IG5hbWUsIHdoaWNoIHdpbGwgYmUgdGhlIG9yaWdpbmFsDQogICAgLQkJCQkgKiBzb3Vy
Y2UgbmFtZSwgYW5kIGlnbm9yZSBhbnkgb3RoZXIgdGFyZ2V0DQogICAgLQkJCQkgKiBuYW1lcywg
d2hpY2ggd2lsbCBiZSBpbnRlcm1lZGlhdGUgdGVtcG9yYXJ5DQogICAgLQkJCQkgKiBmaWxlcy4N
CiAgICAtCQkJCSAqLw0KICAgIC0JCQkJaWYgKCFzYXdfYW55X3RhcmdldCkgew0KICAgIC0JCQkJ
CXNhd19hbnlfdGFyZ2V0ID0gMTsNCiAgICAtCQkJCQlwcmludGYoInNvdXJjZV8lcyA6PSAlc1xu
XG4iLA0KICAgIC0JCQkJCSAgICAgICB0YXJnZXQsIG0pOw0KICAgIC0JCQkJCXByaW50ZigiZGVw
c18lcyA6PSBcXFxuIiwgdGFyZ2V0KTsNCiAgICAtCQkJCX0NCiAgICAtCQkJCWlzX2ZpcnN0X2Rl
cCA9IDA7DQogICAgLQkJCX0gZWxzZSB7DQogICAgLQkJCQlwcmludGYoIiAgJXMgXFxcbiIsIG0p
Ow0KICAgIC0JCQl9DQogICAgLQ0KICAgIC0JCQlidWYgPSByZWFkX2ZpbGUobSk7DQogICAgLQkJ
CXBhcnNlX2NvbmZpZ19maWxlKGJ1Zik7DQogICAgLQkJCWZyZWUoYnVmKTsNCiAgICAtCQl9DQog
ICAgLQ0KICAgIC0JCWlmIChpc19sYXN0KQ0KICAgIC0JCQlicmVhazsNCiAgICAtDQogICAgLQkJ
LyoNCiAgICAtCQkgKiBTdGFydCBzZWFyY2hpbmcgZm9yIG5leHQgdG9rZW4gaW1tZWRpYXRlbHkg
YWZ0ZXIgdGhlIGZpcnN0DQogICAgLQkJICogIndoaXRlc3BhY2UiIGNoYXJhY3RlciB0aGF0IGZv
bGxvd3MgdGhpcyB0b2tlbi4NCiAgICAtCQkgKi8NCiAgICAtCQltID0gcCArIDE7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JaWYgKCFzYXdfYW55X3RhcmdldCkgew0KICAgIC0JCWZwcmludGYoc3Rk
ZXJyLCAiZml4ZGVwOiBwYXJzZSBlcnJvcjsgbm8gdGFyZ2V0cyBmb3VuZFxuIik7DQogICAgLQkJ
ZXhpdCgxKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlwcmludGYoIlxuJXM6ICQoZGVwc18lcylc
blxuIiwgdGFyZ2V0LCB0YXJnZXQpOw0KICAgIC0JcHJpbnRmKCIkKGRlcHNfJXMpOlxuIiwgdGFy
Z2V0KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb
XSkNCiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqZGVwZmlsZSwgKnRhcmdldCwgKmNtZGxpbmU7
DQogICAgLQl2b2lkICpidWY7DQogICAgLQ0KICAgIC0JaWYgKGFyZ2MgIT0gNCkNCiAgICAtCQl1
c2FnZSgpOw0KICAgIC0NCiAgICAtCWRlcGZpbGUgPSBhcmd2WzFdOw0KICAgIC0JdGFyZ2V0ID0g
YXJndlsyXTsNCiAgICAtCWNtZGxpbmUgPSBhcmd2WzNdOw0KICAgIC0NCiAgICAtCXByaW50Zigi
Y21kXyVzIDo9ICVzXG5cbiIsIHRhcmdldCwgY21kbGluZSk7DQogICAgLQ0KICAgIC0JYnVmID0g
cmVhZF9maWxlKGRlcGZpbGUpOw0KICAgIC0JcGFyc2VfZGVwX2ZpbGUoYnVmLCB0YXJnZXQpOw0K
ICAgIC0JZnJlZShidWYpOw0KICAgIC0NCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYtY2ZnLnNoIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9nY29uZi1jZmcuc2gNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUNCiAgICBp
bmRleCA0ODBlY2Q4Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29u
Zi1jZmcuc2gNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMzAgKzAsMCBAQA0KICAgIC0j
IS9iaW4vc2gNCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0N
CiAgICAtUEtHPSJndGsrLTIuMCBnbW9kdWxlLTIuMCBsaWJnbGFkZS0yLjAiDQogICAgLQ0KICAg
IC1pZiBbIC16ICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4NCiAgICAtCWVjaG8g
PiYyICIqIg0KICAgIC0JZWNobyA+JjIgIiogJ21ha2UgZ2NvbmZpZycgcmVxdWlyZXMgJ3BrZy1j
b25maWcnLiBQbGVhc2UgaW5zdGFsbCBpdC4iDQogICAgLQllY2hvID4mMiAiKiINCiAgICAtCWV4
aXQgMQ0KICAgIC1maQ0KICAgIC0NCiAgICAtaWYgISBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0c7
IHRoZW4NCiAgICAtCWVjaG8gPiYyICIqIg0KICAgIC0JZWNobyA+JjIgIiogVW5hYmxlIHRvIGZp
bmQgdGhlIEdUSysgaW5zdGFsbGF0aW9uLiBQbGVhc2UgbWFrZSBzdXJlIHRoYXQiDQogICAgLQll
Y2hvID4mMiAiKiB0aGUgR1RLKyAyLjAgZGV2ZWxvcG1lbnQgcGFja2FnZSBpcyBjb3JyZWN0bHkg
aW5zdGFsbGVkLiINCiAgICAtCWVjaG8gPiYyICIqIFlvdSBuZWVkICRQS0ciDQogICAgLQllY2hv
ID4mMiAiKiINCiAgICAtCWV4aXQgMQ0KICAgIC1maQ0KICAgIC0NCiAgICAtaWYgISBwa2ctY29u
ZmlnIC0tYXRsZWFzdC12ZXJzaW9uPTIuMC4wIGd0aystMi4wOyB0aGVuDQogICAgLQllY2hvID4m
MiAiKiINCiAgICAtCWVjaG8gPiYyICIqIEdUSysgaXMgcHJlc2VudCBidXQgdmVyc2lvbiA+PSAy
LjAuMCBpcyByZXF1aXJlZC4iDQogICAgLQllY2hvID4mMiAiKiINCiAgICAtCWV4aXQgMQ0KICAg
IC1maQ0KICAgIC0NCiAgICAtZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcgLS1jZmxhZ3MgJFBL
RylcIg0KICAgIC1lY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCINCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5jIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9nY29uZi5jDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggZTM2
YjM0Mi4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuYw0KICAg
ICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxNTE2ICswLDAgQEANCiAgICAtLy8gU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAy
MDAyLTIwMDMgUm9tYWluIExpZXZpbiA8cm9tc0B0aWxwLmluZm8+DQogICAgLSAqLw0KICAgIC0N
CiAgICAtI2lmZGVmIEhBVkVfQ09ORklHX0gNCiAgICAtIyAgaW5jbHVkZSA8Y29uZmlnLmg+DQog
ICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVk
ZSAibGtjLmgiDQogICAgLSNpbmNsdWRlICJpbWFnZXMuaCINCiAgICAtDQogICAgLSNpbmNsdWRl
IDxnbGFkZS9nbGFkZS5oPg0KICAgIC0jaW5jbHVkZSA8Z3RrL2d0ay5oPg0KICAgIC0jaW5jbHVk
ZSA8Z2xpYi5oPg0KICAgIC0jaW5jbHVkZSA8Z2RrL2dka2tleXN5bXMuaD4NCiAgICAtDQogICAg
LSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNpbmNs
dWRlIDx1bmlzdGQuaD4NCiAgICAtI2luY2x1ZGUgPHRpbWUuaD4NCiAgICAtDQogICAgLS8vI2Rl
ZmluZSBERUJVRw0KICAgIC0NCiAgICAtZW51bSB7DQogICAgLQlTSU5HTEVfVklFVywgU1BMSVRf
VklFVywgRlVMTF9WSUVXDQogICAgLX07DQogICAgLQ0KICAgIC1lbnVtIHsNCiAgICAtCU9QVF9O
T1JNQUwsIE9QVF9BTEwsIE9QVF9QUk9NUFQNCiAgICAtfTsNCiAgICAtDQogICAgLXN0YXRpYyBn
aW50IHZpZXdfbW9kZSA9IEZVTExfVklFVzsNCiAgICAtc3RhdGljIGdib29sZWFuIHNob3dfbmFt
ZSA9IFRSVUU7DQogICAgLXN0YXRpYyBnYm9vbGVhbiBzaG93X3JhbmdlID0gVFJVRTsNCiAgICAt
c3RhdGljIGdib29sZWFuIHNob3dfdmFsdWUgPSBUUlVFOw0KICAgIC1zdGF0aWMgZ2Jvb2xlYW4g
cmVzaXplYWJsZSA9IEZBTFNFOw0KICAgIC1zdGF0aWMgaW50IG9wdF9tb2RlID0gT1BUX05PUk1B
TDsNCiAgICAtDQogICAgLUd0a1dpZGdldCAqbWFpbl93bmQgPSBOVUxMOw0KICAgIC1HdGtXaWRn
ZXQgKnRyZWUxX3cgPSBOVUxMOwkvLyBsZWZ0ICBmcmFtZQ0KICAgIC1HdGtXaWRnZXQgKnRyZWUy
X3cgPSBOVUxMOwkvLyByaWdodCBmcmFtZQ0KICAgIC1HdGtXaWRnZXQgKnRleHRfdyA9IE5VTEw7
DQogICAgLUd0a1dpZGdldCAqaHBhbmVkID0gTlVMTDsNCiAgICAtR3RrV2lkZ2V0ICp2cGFuZWQg
PSBOVUxMOw0KICAgIC1HdGtXaWRnZXQgKmJhY2tfYnRuID0gTlVMTDsNCiAgICAtR3RrV2lkZ2V0
ICpzYXZlX2J0biA9IE5VTEw7DQogICAgLUd0a1dpZGdldCAqc2F2ZV9tZW51X2l0ZW0gPSBOVUxM
Ow0KICAgIC0NCiAgICAtR3RrVGV4dFRhZyAqdGFnMSwgKnRhZzI7DQogICAgLUdka0NvbG9yIGNv
bG9yOw0KICAgIC0NCiAgICAtR3RrVHJlZVN0b3JlICp0cmVlMSwgKnRyZWUyLCAqdHJlZTsNCiAg
ICAtR3RrVHJlZU1vZGVsICptb2RlbDEsICptb2RlbDI7DQogICAgLXN0YXRpYyBHdGtUcmVlSXRl
ciAqcGFyZW50c1syNTZdOw0KICAgIC1zdGF0aWMgZ2ludCBpbmRlbnQ7DQogICAgLQ0KICAgIC1z
dGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnQ7IC8vIGN1cnJlbnQgbm9kZSBmb3IgU0lOR0xFIHZp
ZXcNCiAgICAtc3RhdGljIHN0cnVjdCBtZW51ICpicm93c2VkOyAvLyBicm93c2VkIG5vZGUgZm9y
IFNQTElUIHZpZXcNCiAgICAtDQogICAgLWVudW0gew0KICAgIC0JQ09MX09QVElPTiwgQ09MX05B
TUUsIENPTF9OTywgQ09MX01PRCwgQ09MX1lFUywgQ09MX1ZBTFVFLA0KICAgIC0JQ09MX01FTlUs
IENPTF9DT0xPUiwgQ09MX0VESVQsIENPTF9QSVhCVUYsDQogICAgLQlDT0xfUElYVklTLCBDT0xf
QlROVklTLCBDT0xfQlROQUNULCBDT0xfQlROSU5DLCBDT0xfQlROUkFELA0KICAgIC0JQ09MX05V
TUJFUg0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgZGlzcGxheV9saXN0KHZvaWQp
Ow0KICAgIC1zdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWUoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAg
IC1zdGF0aWMgdm9pZCBkaXNwbGF5X3RyZWVfcGFydCh2b2lkKTsNCiAgICAtc3RhdGljIHZvaWQg
dXBkYXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJlZUl0ZXIgKiBkc3QpOw0KICAgIC1z
dGF0aWMgdm9pZCBzZXRfbm9kZShHdGtUcmVlSXRlciAqIG5vZGUsIHN0cnVjdCBtZW51ICptZW51
LCBnY2hhciAqKiByb3cpOw0KICAgIC1zdGF0aWMgZ2NoYXIgKipmaWxsX3JvdyhzdHJ1Y3QgbWVu
dSAqbWVudSk7DQogICAgLXN0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2b2lkKTsNCiAgICAtDQog
ICAgLS8qIEhlbHBpbmcvRGVidWdnaW5nIEZ1bmN0aW9ucyAqLw0KICAgIC0jaWZkZWYgREVCVUcN
CiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKmRiZ19zeW1fZmxhZ3MoaW50IHZhbCkNCiAgICAtew0K
ICAgIC0Jc3RhdGljIGNoYXIgYnVmWzI1Nl07DQogICAgLQ0KICAgIC0JYnplcm8oYnVmLCAyNTYp
Ow0KICAgIC0NCiAgICAtCWlmICh2YWwgJiBTWU1CT0xfQ09OU1QpDQogICAgLQkJc3RyY2F0KGJ1
ZiwgImNvbnN0LyIpOw0KICAgIC0JaWYgKHZhbCAmIFNZTUJPTF9DSEVDSykNCiAgICAtCQlzdHJj
YXQoYnVmLCAiY2hlY2svIik7DQogICAgLQlpZiAodmFsICYgU1lNQk9MX0NIT0lDRSkNCiAgICAt
CQlzdHJjYXQoYnVmLCAiY2hvaWNlLyIpOw0KICAgIC0JaWYgKHZhbCAmIFNZTUJPTF9DSE9JQ0VW
QUwpDQogICAgLQkJc3RyY2F0KGJ1ZiwgImNob2ljZXZhbC8iKTsNCiAgICAtCWlmICh2YWwgJiBT
WU1CT0xfVkFMSUQpDQogICAgLQkJc3RyY2F0KGJ1ZiwgInZhbGlkLyIpOw0KICAgIC0JaWYgKHZh
bCAmIFNZTUJPTF9PUFRJT05BTCkNCiAgICAtCQlzdHJjYXQoYnVmLCAib3B0aW9uYWwvIik7DQog
ICAgLQlpZiAodmFsICYgU1lNQk9MX1dSSVRFKQ0KICAgIC0JCXN0cmNhdChidWYsICJ3cml0ZS8i
KTsNCiAgICAtCWlmICh2YWwgJiBTWU1CT0xfQ0hBTkdFRCkNCiAgICAtCQlzdHJjYXQoYnVmLCAi
Y2hhbmdlZC8iKTsNCiAgICAtCWlmICh2YWwgJiBTWU1CT0xfTk9fV1JJVEUpDQogICAgLQkJc3Ry
Y2F0KGJ1ZiwgIm5vX3dyaXRlLyIpOw0KICAgIC0NCiAgICAtCWJ1ZltzdHJsZW4oYnVmKSAtIDFd
ID0gJ1wwJzsNCiAgICAtDQogICAgLQlyZXR1cm4gYnVmOw0KICAgIC19DQogICAgLSNlbmRpZg0K
ICAgIC0NCiAgICAtc3RhdGljIHZvaWQgcmVwbGFjZV9idXR0b25faWNvbihHbGFkZVhNTCAqeG1s
LCBHZGtEcmF3YWJsZSAqd2luZG93LA0KICAgIC0JCQkJR3RrU3R5bGUgKnN0eWxlLCBnY2hhciAq
YnRuX25hbWUsIGdjaGFyICoqeHBtKQ0KICAgIC17DQogICAgLQlHZGtQaXhtYXAgKnBpeG1hcDsN
CiAgICAtCUdka0JpdG1hcCAqbWFzazsNCiAgICAtCUd0a1Rvb2xCdXR0b24gKmJ1dHRvbjsNCiAg
ICAtCUd0a1dpZGdldCAqaW1hZ2U7DQogICAgLQ0KICAgIC0JcGl4bWFwID0gZ2RrX3BpeG1hcF9j
cmVhdGVfZnJvbV94cG1fZCh3aW5kb3csICZtYXNrLA0KICAgIC0JCQkJCSAgICAgICZzdHlsZS0+
YmdbR1RLX1NUQVRFX05PUk1BTF0sDQogICAgLQkJCQkJICAgICAgeHBtKTsNCiAgICAtDQogICAg
LQlidXR0b24gPSBHVEtfVE9PTF9CVVRUT04oZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCBidG5f
bmFtZSkpOw0KICAgIC0JaW1hZ2UgPSBndGtfaW1hZ2VfbmV3X2Zyb21fcGl4bWFwKHBpeG1hcCwg
bWFzayk7DQogICAgLQlndGtfd2lkZ2V0X3Nob3coaW1hZ2UpOw0KICAgIC0JZ3RrX3Rvb2xfYnV0
dG9uX3NldF9pY29uX3dpZGdldChidXR0b24sIGltYWdlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
LyogTWFpbiBXaW5kb3cgSW5pdGlhbGl6YXRpb24gKi8NCiAgICAtc3RhdGljIHZvaWQgaW5pdF9t
YWluX3dpbmRvdyhjb25zdCBnY2hhciAqZ2xhZGVfZmlsZSkNCiAgICAtew0KICAgIC0JR2xhZGVY
TUwgKnhtbDsNCiAgICAtCUd0a1dpZGdldCAqd2lkZ2V0Ow0KICAgIC0JR3RrVGV4dEJ1ZmZlciAq
dHh0YnVmOw0KICAgIC0JR3RrU3R5bGUgKnN0eWxlOw0KICAgIC0NCiAgICAtCXhtbCA9IGdsYWRl
X3htbF9uZXcoZ2xhZGVfZmlsZSwgIndpbmRvdzEiLCBOVUxMKTsNCiAgICAtCWlmICgheG1sKQ0K
ICAgIC0JCWdfZXJyb3IoIkdVSSBsb2FkaW5nIGZhaWxlZCAhXG4iKTsNCiAgICAtCWdsYWRlX3ht
bF9zaWduYWxfYXV0b2Nvbm5lY3QoeG1sKTsNCiAgICAtDQogICAgLQltYWluX3duZCA9IGdsYWRl
X3htbF9nZXRfd2lkZ2V0KHhtbCwgIndpbmRvdzEiKTsNCiAgICAtCWhwYW5lZCA9IGdsYWRlX3ht
bF9nZXRfd2lkZ2V0KHhtbCwgImhwYW5lZDEiKTsNCiAgICAtCXZwYW5lZCA9IGdsYWRlX3htbF9n
ZXRfd2lkZ2V0KHhtbCwgInZwYW5lZDEiKTsNCiAgICAtCXRyZWUxX3cgPSBnbGFkZV94bWxfZ2V0
X3dpZGdldCh4bWwsICJ0cmVldmlldzEiKTsNCiAgICAtCXRyZWUyX3cgPSBnbGFkZV94bWxfZ2V0
X3dpZGdldCh4bWwsICJ0cmVldmlldzIiKTsNCiAgICAtCXRleHRfdyA9IGdsYWRlX3htbF9nZXRf
d2lkZ2V0KHhtbCwgInRleHR2aWV3MyIpOw0KICAgIC0NCiAgICAtCWJhY2tfYnRuID0gZ2xhZGVf
eG1sX2dldF93aWRnZXQoeG1sLCAiYnV0dG9uMSIpOw0KICAgIC0JZ3RrX3dpZGdldF9zZXRfc2Vu
c2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7DQogICAgLQ0KICAgIC0Jd2lkZ2V0ID0gZ2xhZGVfeG1s
X2dldF93aWRnZXQoeG1sLCAic2hvd19uYW1lMSIpOw0KICAgIC0JZ3RrX2NoZWNrX21lbnVfaXRl
bV9zZXRfYWN0aXZlKChHdGtDaGVja01lbnVJdGVtICopIHdpZGdldCwNCiAgICAtCQkJCSAgICAg
ICBzaG93X25hbWUpOw0KICAgIC0NCiAgICAtCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0
KHhtbCwgInNob3dfcmFuZ2UxIik7DQogICAgLQlndGtfY2hlY2tfbWVudV9pdGVtX3NldF9hY3Rp
dmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lkZ2V0LA0KICAgIC0JCQkJICAgICAgIHNob3dfcmFu
Z2UpOw0KICAgIC0NCiAgICAtCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInNo
b3dfZGF0YTEiKTsNCiAgICAtCWd0a19jaGVja19tZW51X2l0ZW1fc2V0X2FjdGl2ZSgoR3RrQ2hl
Y2tNZW51SXRlbSAqKSB3aWRnZXQsDQogICAgLQkJCQkgICAgICAgc2hvd192YWx1ZSk7DQogICAg
LQ0KICAgIC0Jc2F2ZV9idG4gPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJidXR0b24zIik7
DQogICAgLQlzYXZlX21lbnVfaXRlbSA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInNhdmUx
Iik7DQogICAgLQljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZfY2hhbmdlZCk7DQogICAg
LQ0KICAgIC0Jc3R5bGUgPSBndGtfd2lkZ2V0X2dldF9zdHlsZShtYWluX3duZCk7DQogICAgLQl3
aWRnZXQgPSBnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJ0b29sYmFyMSIpOw0KICAgIC0NCiAg
ICAtCXJlcGxhY2VfYnV0dG9uX2ljb24oeG1sLCBtYWluX3duZC0+d2luZG93LCBzdHlsZSwNCiAg
ICAtCQkJICAgICJidXR0b240IiwgKGdjaGFyICoqKSB4cG1fc2luZ2xlX3ZpZXcpOw0KICAgIC0J
cmVwbGFjZV9idXR0b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLA0KICAgIC0J
CQkgICAgImJ1dHRvbjUiLCAoZ2NoYXIgKiopIHhwbV9zcGxpdF92aWV3KTsNCiAgICAtCXJlcGxh
Y2VfYnV0dG9uX2ljb24oeG1sLCBtYWluX3duZC0+d2luZG93LCBzdHlsZSwNCiAgICAtCQkJICAg
ICJidXR0b242IiwgKGdjaGFyICoqKSB4cG1fdHJlZV92aWV3KTsNCiAgICAtDQogICAgLQl0eHRi
dWYgPSBndGtfdGV4dF92aWV3X2dldF9idWZmZXIoR1RLX1RFWFRfVklFVyh0ZXh0X3cpKTsNCiAg
ICAtCXRhZzEgPSBndGtfdGV4dF9idWZmZXJfY3JlYXRlX3RhZyh0eHRidWYsICJteXRhZzEiLA0K
ICAgIC0JCQkJCSAgImZvcmVncm91bmQiLCAicmVkIiwNCiAgICAtCQkJCQkgICJ3ZWlnaHQiLCBQ
QU5HT19XRUlHSFRfQk9MRCwNCiAgICAtCQkJCQkgIE5VTEwpOw0KICAgIC0JdGFnMiA9IGd0a190
ZXh0X2J1ZmZlcl9jcmVhdGVfdGFnKHR4dGJ1ZiwgIm15dGFnMiIsDQogICAgLQkJCQkJICAvKiJz
dHlsZSIsIFBBTkdPX1NUWUxFX09CTElRVUUsICovDQogICAgLQkJCQkJICBOVUxMKTsNCiAgICAt
DQogICAgLQlndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKG1haW5fd25kKSwgcm9vdG1l
bnUucHJvbXB0LT50ZXh0KTsNCiAgICAtDQogICAgLQlndGtfd2lkZ2V0X3Nob3cobWFpbl93bmQp
Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBpbml0X3RyZWVfbW9kZWwodm9pZCkN
CiAgICAtew0KICAgIC0JZ2ludCBpOw0KICAgIC0NCiAgICAtCXRyZWUgPSB0cmVlMiA9IGd0a190
cmVlX3N0b3JlX25ldyhDT0xfTlVNQkVSLA0KICAgIC0JCQkJCSAgR19UWVBFX1NUUklORywgR19U
WVBFX1NUUklORywNCiAgICAtCQkJCQkgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsDQog
ICAgLQkJCQkJICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLA0KICAgIC0JCQkJCSAgR19U
WVBFX1BPSU5URVIsIEdES19UWVBFX0NPTE9SLA0KICAgIC0JCQkJCSAgR19UWVBFX0JPT0xFQU4s
IEdES19UWVBFX1BJWEJVRiwNCiAgICAtCQkJCQkgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfQk9P
TEVBTiwNCiAgICAtCQkJCQkgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfQk9PTEVBTiwNCiAgICAt
CQkJCQkgIEdfVFlQRV9CT09MRUFOKTsNCiAgICAtCW1vZGVsMiA9IEdUS19UUkVFX01PREVMKHRy
ZWUyKTsNCiAgICAtDQogICAgLQlmb3IgKHBhcmVudHNbMF0gPSBOVUxMLCBpID0gMTsgaSA8IDI1
NjsgaSsrKQ0KICAgIC0JCXBhcmVudHNbaV0gPSAoR3RrVHJlZUl0ZXIgKikgZ19tYWxsb2Moc2l6
ZW9mKEd0a1RyZWVJdGVyKSk7DQogICAgLQ0KICAgIC0JdHJlZTEgPSBndGtfdHJlZV9zdG9yZV9u
ZXcoQ09MX05VTUJFUiwNCiAgICAtCQkJCSAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcs
DQogICAgLQkJCQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLA0KICAgIC0JCQkJICAg
R19UWVBFX1NUUklORywgR19UWVBFX1NUUklORywNCiAgICAtCQkJCSAgIEdfVFlQRV9QT0lOVEVS
LCBHREtfVFlQRV9DT0xPUiwNCiAgICAtCQkJCSAgIEdfVFlQRV9CT09MRUFOLCBHREtfVFlQRV9Q
SVhCVUYsDQogICAgLQkJCQkgICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sDQogICAg
LQkJCQkgICBHX1RZUEVfQk9PTEVBTiwgR19UWVBFX0JPT0xFQU4sDQogICAgLQkJCQkgICBHX1RZ
UEVfQk9PTEVBTik7DQogICAgLQltb2RlbDEgPSBHVEtfVFJFRV9NT0RFTCh0cmVlMSk7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGluaXRfbGVmdF90cmVlKHZvaWQpDQogICAgLXsN
CiAgICAtCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh0cmVlMV93KTsNCiAgICAt
CUd0a0NlbGxSZW5kZXJlciAqcmVuZGVyZXI7DQogICAgLQlHdGtUcmVlU2VsZWN0aW9uICpzZWw7
DQogICAgLQlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOw0KICAgIC0NCiAgICAtCWd0a190cmVl
X3ZpZXdfc2V0X21vZGVsKHZpZXcsIG1vZGVsMSk7DQogICAgLQlndGtfdHJlZV92aWV3X3NldF9o
ZWFkZXJzX3Zpc2libGUodmlldywgVFJVRSk7DQogICAgLQlndGtfdHJlZV92aWV3X3NldF9ydWxl
c19oaW50KHZpZXcsIFRSVUUpOw0KICAgIC0NCiAgICAtCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdf
Y29sdW1uX25ldygpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19hcHBlbmRfY29sdW1uKHZpZXcsIGNv
bHVtbik7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdGl0bGUoY29sdW1uLCAiT3B0
aW9ucyIpOw0KICAgIC0NCiAgICAtCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdG9nZ2xl
X25ldygpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChHVEtfVFJFRV9W
SUVXX0NPTFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCXJlbmRlcmVyLCBGQUxTRSk7DQogICAgLQln
dGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NPTFVNTihj
b2x1bW4pLA0KICAgIC0JCQkJCSAgICByZW5kZXJlciwNCiAgICAtCQkJCQkgICAgImFjdGl2ZSIs
IENPTF9CVE5BQ1QsDQogICAgLQkJCQkJICAgICJpbmNvbnNpc3RlbnQiLCBDT0xfQlROSU5DLA0K
ICAgIC0JCQkJCSAgICAidmlzaWJsZSIsIENPTF9CVE5WSVMsDQogICAgLQkJCQkJICAgICJyYWRp
byIsIENPTF9CVE5SQUQsIE5VTEwpOw0KICAgIC0JcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJl
cl90ZXh0X25ldygpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFydChHVEtf
VFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCXJlbmRlcmVyLCBGQUxTRSk7DQog
ICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJFRV9WSUVXX0NP
TFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCSAgICByZW5kZXJlciwNCiAgICAtCQkJCQkgICAgInRl
eHQiLCBDT0xfT1BUSU9OLA0KICAgIC0JCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLA0KICAgIC0J
CQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOw0KICAgIC0NCiAgICAtCXNlbCA9IGd0a190cmVlX3Zp
ZXdfZ2V0X3NlbGVjdGlvbih2aWV3KTsNCiAgICAtCWd0a190cmVlX3NlbGVjdGlvbl9zZXRfbW9k
ZShzZWwsIEdUS19TRUxFQ1RJT05fU0lOR0xFKTsNCiAgICAtCWd0a193aWRnZXRfcmVhbGl6ZSh0
cmVlMV93KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgcmVuZGVyZXJfZWRpdGVk
KEd0a0NlbGxSZW5kZXJlclRleHQgKiBjZWxsLA0KICAgIC0JCQkgICAgY29uc3QgZ2NoYXIgKiBw
YXRoX3N0cmluZywNCiAgICAtCQkJICAgIGNvbnN0IGdjaGFyICogbmV3X3RleHQsIGdwb2ludGVy
IHVzZXJfZGF0YSk7DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBpbml0X3JpZ2h0X3RyZWUodm9p
ZCkNCiAgICAtew0KICAgIC0JR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHRyZWUy
X3cpOw0KICAgIC0JR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsNCiAgICAtCUd0a1RyZWVTZWxl
Y3Rpb24gKnNlbDsNCiAgICAtCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47DQogICAgLQlnaW50
IGk7DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVfdmlld19zZXRfbW9kZWwodmlldywgbW9kZWwyKTsN
CiAgICAtCWd0a190cmVlX3ZpZXdfc2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVFKTsNCiAg
ICAtCWd0a190cmVlX3ZpZXdfc2V0X3J1bGVzX2hpbnQodmlldywgVFJVRSk7DQogICAgLQ0KICAg
IC0JY29sdW1uID0gZ3RrX3RyZWVfdmlld19jb2x1bW5fbmV3KCk7DQogICAgLQlndGtfdHJlZV92
aWV3X2FwcGVuZF9jb2x1bW4odmlldywgY29sdW1uKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29s
dW1uX3NldF90aXRsZShjb2x1bW4sICJPcHRpb25zIik7DQogICAgLQ0KICAgIC0JcmVuZGVyZXIg
PSBndGtfY2VsbF9yZW5kZXJlcl9waXhidWZfbmV3KCk7DQogICAgLQlndGtfdHJlZV92aWV3X2Nv
bHVtbl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgLQkJCQkJ
cmVuZGVyZXIsIEZBTFNFKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1
dGVzKEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgLQkJCQkJICAgIHJlbmRlcmVy
LA0KICAgIC0JCQkJCSAgICAicGl4YnVmIiwgQ09MX1BJWEJVRiwNCiAgICAtCQkJCQkgICAgInZp
c2libGUiLCBDT0xfUElYVklTLCBOVUxMKTsNCiAgICAtCXJlbmRlcmVyID0gZ3RrX2NlbGxfcmVu
ZGVyZXJfdG9nZ2xlX25ldygpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFja19zdGFy
dChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCXJlbmRlcmVyLCBGQUxT
RSk7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtfVFJFRV9W
SUVXX0NPTFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCSAgICByZW5kZXJlciwNCiAgICAtCQkJCQkg
ICAgImFjdGl2ZSIsIENPTF9CVE5BQ1QsDQogICAgLQkJCQkJICAgICJpbmNvbnNpc3RlbnQiLCBD
T0xfQlROSU5DLA0KICAgIC0JCQkJCSAgICAidmlzaWJsZSIsIENPTF9CVE5WSVMsDQogICAgLQkJ
CQkJICAgICJyYWRpbyIsIENPTF9CVE5SQUQsIE5VTEwpOw0KICAgIC0JcmVuZGVyZXIgPSBndGtf
Y2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fcGFj
a19zdGFydChHVEtfVFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCXJlbmRlcmVy
LCBGQUxTRSk7DQogICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfYXR0cmlidXRlcyhHVEtf
VFJFRV9WSUVXX0NPTFVNTihjb2x1bW4pLA0KICAgIC0JCQkJCSAgICByZW5kZXJlciwNCiAgICAt
CQkJCQkgICAgInRleHQiLCBDT0xfT1BUSU9OLA0KICAgIC0JCQkJCSAgICAiZm9yZWdyb3VuZC1n
ZGsiLA0KICAgIC0JCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOw0KICAgIC0NCiAgICAtCXJlbmRl
cmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsNCiAgICAtCWd0a190cmVlX3ZpZXdf
aW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsDQogICAgLQkJCQkJCSAgICAi
TmFtZSIsIHJlbmRlcmVyLA0KICAgIC0JCQkJCQkgICAgInRleHQiLCBDT0xfTkFNRSwNCiAgICAt
CQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsDQogICAgLQkJCQkJCSAgICBDT0xfQ09MT1IsIE5V
TEwpOw0KICAgIC0JcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOw0KICAg
IC0JZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwN
CiAgICAtCQkJCQkJICAgICJOIiwgcmVuZGVyZXIsDQogICAgLQkJCQkJCSAgICAidGV4dCIsIENP
TF9OTywNCiAgICAtCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsDQogICAgLQkJCQkJCSAgICBD
T0xfQ09MT1IsIE5VTEwpOw0KICAgIC0JcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0
X25ldygpOw0KICAgIC0JZ3RrX3RyZWVfdmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRl
cyh2aWV3LCAtMSwNCiAgICAtCQkJCQkJICAgICJNIiwgcmVuZGVyZXIsDQogICAgLQkJCQkJCSAg
ICAidGV4dCIsIENPTF9NT0QsDQogICAgLQkJCQkJCSAgICAiZm9yZWdyb3VuZC1nZGsiLA0KICAg
IC0JCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsNCiAgICAtCXJlbmRlcmVyID0gZ3RrX2NlbGxf
cmVuZGVyZXJfdGV4dF9uZXcoKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfaW5zZXJ0X2NvbHVtbl93
aXRoX2F0dHJpYnV0ZXModmlldywgLTEsDQogICAgLQkJCQkJCSAgICAiWSIsIHJlbmRlcmVyLA0K
ICAgIC0JCQkJCQkgICAgInRleHQiLCBDT0xfWUVTLA0KICAgIC0JCQkJCQkgICAgImZvcmVncm91
bmQtZ2RrIiwNCiAgICAtCQkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgLQlyZW5kZXJl
ciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgLQlndGtfdHJlZV92aWV3X2lu
c2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcsIC0xLA0KICAgIC0JCQkJCQkgICAgIlZh
bHVlIiwgcmVuZGVyZXIsDQogICAgLQkJCQkJCSAgICAidGV4dCIsIENPTF9WQUxVRSwNCiAgICAt
CQkJCQkJICAgICJlZGl0YWJsZSIsDQogICAgLQkJCQkJCSAgICBDT0xfRURJVCwNCiAgICAtCQkJ
CQkJICAgICJmb3JlZ3JvdW5kLWdkayIsDQogICAgLQkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwp
Ow0KICAgIC0JZ19zaWduYWxfY29ubmVjdChHX09CSkVDVChyZW5kZXJlciksICJlZGl0ZWQiLA0K
ICAgIC0JCQkgR19DQUxMQkFDSyhyZW5kZXJlcl9lZGl0ZWQpLCBOVUxMKTsNCiAgICAtDQogICAg
LQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywgQ09MX05BTUUpOw0KICAg
IC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sdW1uLCBzaG93X25hbWUpOw0K
ICAgIC0JY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9OTyk7DQog
ICAgLQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfcmFuZ2Up
Ow0KICAgIC0JY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIENPTF9NT0Qp
Ow0KICAgIC0JZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sdW1uLCBzaG93X3Jh
bmdlKTsNCiAgICAtCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xf
WUVTKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwgc2hv
d19yYW5nZSk7DQogICAgLQljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywg
Q09MX1ZBTFVFKTsNCiAgICAtCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVt
biwgc2hvd192YWx1ZSk7DQogICAgLQ0KICAgIC0JaWYgKHJlc2l6ZWFibGUpIHsNCiAgICAtCQlm
b3IgKGkgPSAwOyBpIDwgQ09MX1ZBTFVFOyBpKyspIHsNCiAgICAtCQkJY29sdW1uID0gZ3RrX3Ry
ZWVfdmlld19nZXRfY29sdW1uKHZpZXcsIGkpOw0KICAgIC0JCQlndGtfdHJlZV92aWV3X2NvbHVt
bl9zZXRfcmVzaXphYmxlKGNvbHVtbiwgVFJVRSk7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0N
CiAgICAtCXNlbCA9IGd0a190cmVlX3ZpZXdfZ2V0X3NlbGVjdGlvbih2aWV3KTsNCiAgICAtCWd0
a190cmVlX3NlbGVjdGlvbl9zZXRfbW9kZShzZWwsIEdUS19TRUxFQ1RJT05fU0lOR0xFKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qIFV0aWxpdHkgRnVuY3Rpb25zICovDQogICAgLQ0K
ICAgIC0NCiAgICAtc3RhdGljIHZvaWQgdGV4dF9pbnNlcnRfaGVscChzdHJ1Y3QgbWVudSAqbWVu
dSkNCiAgICAtew0KICAgIC0JR3RrVGV4dEJ1ZmZlciAqYnVmZmVyOw0KICAgIC0JR3RrVGV4dEl0
ZXIgc3RhcnQsIGVuZDsNCiAgICAtCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0X3Byb21w
dChtZW51KTsNCiAgICAtCXN0cnVjdCBnc3RyIGhlbHAgPSBzdHJfbmV3KCk7DQogICAgLQ0KICAg
IC0JbWVudV9nZXRfZXh0X2hlbHAobWVudSwgJmhlbHApOw0KICAgIC0NCiAgICAtCWJ1ZmZlciA9
IGd0a190ZXh0X3ZpZXdfZ2V0X2J1ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykpOw0KICAgIC0J
Z3RrX3RleHRfYnVmZmVyX2dldF9ib3VuZHMoYnVmZmVyLCAmc3RhcnQsICZlbmQpOw0KICAgIC0J
Z3RrX3RleHRfYnVmZmVyX2RlbGV0ZShidWZmZXIsICZzdGFydCwgJmVuZCk7DQogICAgLQlndGtf
dGV4dF92aWV3X3NldF9sZWZ0X21hcmdpbihHVEtfVEVYVF9WSUVXKHRleHRfdyksIDE1KTsNCiAg
ICAtDQogICAgLQlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7DQog
ICAgLQlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQsIHByb21w
dCwgLTEsIHRhZzEsDQogICAgLQkJCQkJIE5VTEwpOw0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2lu
c2VydF9hdF9jdXJzb3IoYnVmZmVyLCAiXG5cbiIsIDIpOw0KICAgIC0JZ3RrX3RleHRfYnVmZmVy
X2dldF9lbmRfaXRlcihidWZmZXIsICZlbmQpOw0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2luc2Vy
dF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCBzdHJfZ2V0KCZoZWxwKSwgLTEsIHRhZzIsDQogICAg
LQkJCQkJIE5VTEwpOw0KICAgIC0Jc3RyX2ZyZWUoJmhlbHApOw0KICAgIC19DQogICAgLQ0KICAg
IC0NCiAgICAtc3RhdGljIHZvaWQgdGV4dF9pbnNlcnRfbXNnKGNvbnN0IGNoYXIgKnRpdGxlLCBj
b25zdCBjaGFyICptZXNzYWdlKQ0KICAgIC17DQogICAgLQlHdGtUZXh0QnVmZmVyICpidWZmZXI7
DQogICAgLQlHdGtUZXh0SXRlciBzdGFydCwgZW5kOw0KICAgIC0JY29uc3QgY2hhciAqbXNnID0g
bWVzc2FnZTsNCiAgICAtDQogICAgLQlidWZmZXIgPSBndGtfdGV4dF92aWV3X2dldF9idWZmZXIo
R1RLX1RFWFRfVklFVyh0ZXh0X3cpKTsNCiAgICAtCWd0a190ZXh0X2J1ZmZlcl9nZXRfYm91bmRz
KGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsNCiAgICAtCWd0a190ZXh0X2J1ZmZlcl9kZWxldGUoYnVm
ZmVyLCAmc3RhcnQsICZlbmQpOw0KICAgIC0JZ3RrX3RleHRfdmlld19zZXRfbGVmdF9tYXJnaW4o
R1RLX1RFWFRfVklFVyh0ZXh0X3cpLCAxNSk7DQogICAgLQ0KICAgIC0JZ3RrX3RleHRfYnVmZmVy
X2dldF9lbmRfaXRlcihidWZmZXIsICZlbmQpOw0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2luc2Vy
dF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCB0aXRsZSwgLTEsIHRhZzEsDQogICAgLQkJCQkJIE5V
TEwpOw0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2luc2VydF9hdF9jdXJzb3IoYnVmZmVyLCAiXG5c
biIsIDIpOw0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2dldF9lbmRfaXRlcihidWZmZXIsICZlbmQp
Ow0KICAgIC0JZ3RrX3RleHRfYnVmZmVyX2luc2VydF93aXRoX3RhZ3MoYnVmZmVyLCAmZW5kLCBt
c2csIC0xLCB0YWcyLA0KICAgIC0JCQkJCSBOVUxMKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQog
ICAgLS8qIE1haW4gV2luZG93cyBDYWxsYmFja3MgKi8NCiAgICAtDQogICAgLXZvaWQgb25fc2F2
ZV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpOw0K
ICAgIC1nYm9vbGVhbiBvbl93aW5kb3cxX2RlbGV0ZV9ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQs
IEdka0V2ZW50ICogZXZlbnQsDQogICAgLQkJCQkgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17
DQogICAgLQlHdGtXaWRnZXQgKmRpYWxvZywgKmxhYmVsOw0KICAgIC0JZ2ludCByZXN1bHQ7DQog
ICAgLQ0KICAgIC0JaWYgKCFjb25mX2dldF9jaGFuZ2VkKCkpDQogICAgLQkJcmV0dXJuIEZBTFNF
Ow0KICAgIC0NCiAgICAtCWRpYWxvZyA9IGd0a19kaWFsb2dfbmV3X3dpdGhfYnV0dG9ucygiV2Fy
bmluZyAhIiwNCiAgICAtCQkJCQkgICAgIEdUS19XSU5ET1cobWFpbl93bmQpLA0KICAgIC0JCQkJ
CSAgICAgKEd0a0RpYWxvZ0ZsYWdzKQ0KICAgIC0JCQkJCSAgICAgKEdUS19ESUFMT0dfTU9EQUwg
fA0KICAgIC0JCQkJCSAgICAgIEdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCksDQogICAg
LQkJCQkJICAgICBHVEtfU1RPQ0tfT0ssDQogICAgLQkJCQkJICAgICBHVEtfUkVTUE9OU0VfWUVT
LA0KICAgIC0JCQkJCSAgICAgR1RLX1NUT0NLX05PLA0KICAgIC0JCQkJCSAgICAgR1RLX1JFU1BP
TlNFX05PLA0KICAgIC0JCQkJCSAgICAgR1RLX1NUT0NLX0NBTkNFTCwNCiAgICAtCQkJCQkgICAg
IEdUS19SRVNQT05TRV9DQU5DRUwsIE5VTEwpOw0KICAgIC0JZ3RrX2RpYWxvZ19zZXRfZGVmYXVs
dF9yZXNwb25zZShHVEtfRElBTE9HKGRpYWxvZyksDQogICAgLQkJCQkJR1RLX1JFU1BPTlNFX0NB
TkNFTCk7DQogICAgLQ0KICAgIC0JbGFiZWwgPSBndGtfbGFiZWxfbmV3KCJcblNhdmUgY29uZmln
dXJhdGlvbiA/XG4iKTsNCiAgICAtCWd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIoR1RL
X0RJQUxPRyhkaWFsb2cpLT52Ym94KSwgbGFiZWwpOw0KICAgIC0JZ3RrX3dpZGdldF9zaG93KGxh
YmVsKTsNCiAgICAtDQogICAgLQlyZXN1bHQgPSBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRp
YWxvZykpOw0KICAgIC0Jc3dpdGNoIChyZXN1bHQpIHsNCiAgICAtCWNhc2UgR1RLX1JFU1BPTlNF
X1lFUzoNCiAgICAtCQlvbl9zYXZlX2FjdGl2YXRlKE5VTEwsIE5VTEwpOw0KICAgIC0JCXJldHVy
biBGQUxTRTsNCiAgICAtCWNhc2UgR1RLX1JFU1BPTlNFX05POg0KICAgIC0JCXJldHVybiBGQUxT
RTsNCiAgICAtCWNhc2UgR1RLX1JFU1BPTlNFX0NBTkNFTDoNCiAgICAtCWNhc2UgR1RLX1JFU1BP
TlNFX0RFTEVURV9FVkVOVDoNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJZ3RrX3dpZGdldF9kZXN0
cm95KGRpYWxvZyk7DQogICAgLQkJcmV0dXJuIFRSVUU7DQogICAgLQl9DQogICAgLQ0KICAgIC0J
cmV0dXJuIEZBTFNFOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtdm9pZCBvbl93aW5kb3cx
X2Rlc3Ryb3koR3RrT2JqZWN0ICogb2JqZWN0LCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsN
CiAgICAtCWd0a19tYWluX3F1aXQoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQN
CiAgICAtb25fd2luZG93MV9zaXplX3JlcXVlc3QoR3RrV2lkZ2V0ICogd2lkZ2V0LA0KICAgIC0J
CQlHdGtSZXF1aXNpdGlvbiAqIHJlcXVpc2l0aW9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAg
LXsNCiAgICAtCXN0YXRpYyBnaW50IG9sZF9oOw0KICAgIC0JZ2ludCB3LCBoOw0KICAgIC0NCiAg
ICAtCWlmICh3aWRnZXQtPndpbmRvdyA9PSBOVUxMKQ0KICAgIC0JCWd0a193aW5kb3dfZ2V0X2Rl
ZmF1bHRfc2l6ZShHVEtfV0lORE9XKG1haW5fd25kKSwgJncsICZoKTsNCiAgICAtCWVsc2UNCiAg
ICAtCQlnZGtfd2luZG93X2dldF9zaXplKHdpZGdldC0+d2luZG93LCAmdywgJmgpOw0KICAgIC0N
CiAgICAtCWlmIChoID09IG9sZF9oKQ0KICAgIC0JCXJldHVybjsNCiAgICAtCW9sZF9oID0gaDsN
CiAgICAtDQogICAgLQlndGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19QQU5FRCh2cGFuZWQpLCAy
ICogaCAvIDMpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogTWVudSAmIFRvb2xiYXIg
Q2FsbGJhY2tzICovDQogICAgLQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQNCiAgICAtbG9hZF9m
aWxlbmFtZShHdGtGaWxlU2VsZWN0aW9uICogZmlsZV9zZWxlY3RvciwgZ3BvaW50ZXIgdXNlcl9k
YXRhKQ0KICAgIC17DQogICAgLQljb25zdCBnY2hhciAqZm47DQogICAgLQ0KICAgIC0JZm4gPSBn
dGtfZmlsZV9zZWxlY3Rpb25fZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX1NFTEVDVElPTg0KICAgIC0J
CQkJCSAgICAgKHVzZXJfZGF0YSkpOw0KICAgIC0NCiAgICAtCWlmIChjb25mX3JlYWQoZm4pKQ0K
ICAgIC0JCXRleHRfaW5zZXJ0X21zZygiRXJyb3IiLCAiVW5hYmxlIHRvIGxvYWQgY29uZmlndXJh
dGlvbiAhIik7DQogICAgLQllbHNlDQogICAgLQkJZGlzcGxheV90cmVlKCZyb290bWVudSk7DQog
ICAgLX0NCiAgICAtDQogICAgLXZvaWQgb25fbG9hZDFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBt
ZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlHdGtXaWRnZXQgKmZz
Ow0KICAgIC0NCiAgICAtCWZzID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX25ldygiTG9hZCBmaWxlLi4u
Iik7DQogICAgLQlnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1QoR1RLX0ZJTEVfU0VMRUNUSU9O
KGZzKS0+b2tfYnV0dG9uKSwNCiAgICAtCQkJICJjbGlja2VkIiwNCiAgICAtCQkJIEdfQ0FMTEJB
Q0sobG9hZF9maWxlbmFtZSksIChncG9pbnRlcikgZnMpOw0KICAgIC0JZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKEdUS19PQkpFQ1QNCiAgICAtCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+
b2tfYnV0dG9uKSwNCiAgICAtCQkJCSAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9k
ZXN0cm95KSwNCiAgICAtCQkJCSAoZ3BvaW50ZXIpIGZzKTsNCiAgICAtCWdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChHVEtfT0JKRUNUDQogICAgLQkJCQkgKEdUS19GSUxFX1NFTEVDVElPTihmcykt
PmNhbmNlbF9idXR0b24pLA0KICAgIC0JCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lk
Z2V0X2Rlc3Ryb3kpLA0KICAgIC0JCQkJIChncG9pbnRlcikgZnMpOw0KICAgIC0JZ3RrX3dpZGdl
dF9zaG93KGZzKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25fc2F2ZV9hY3Rp
dmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsN
CiAgICAtCWlmIChjb25mX3dyaXRlKE5VTEwpKQ0KICAgIC0JCXRleHRfaW5zZXJ0X21zZygiRXJy
b3IiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiAhIik7DQogICAgLQljb25mX3dyaXRl
X2F1dG9jb25mKDApOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQNCiAg
ICAtc3RvcmVfZmlsZW5hbWUoR3RrRmlsZVNlbGVjdGlvbiAqIGZpbGVfc2VsZWN0b3IsIGdwb2lu
dGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JY29uc3QgZ2NoYXIgKmZuOw0KICAgIC0NCiAg
ICAtCWZuID0gZ3RrX2ZpbGVfc2VsZWN0aW9uX2dldF9maWxlbmFtZShHVEtfRklMRV9TRUxFQ1RJ
T04NCiAgICAtCQkJCQkgICAgICh1c2VyX2RhdGEpKTsNCiAgICAtDQogICAgLQlpZiAoY29uZl93
cml0ZShmbikpDQogICAgLQkJdGV4dF9pbnNlcnRfbXNnKCJFcnJvciIsICJVbmFibGUgdG8gc2F2
ZSBjb25maWd1cmF0aW9uICEiKTsNCiAgICAtDQogICAgLQlndGtfd2lkZ2V0X2Rlc3Ryb3koR1RL
X1dJREdFVCh1c2VyX2RhdGEpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBvbl9zYXZlX2Fz
MV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQog
ICAgLXsNCiAgICAtCUd0a1dpZGdldCAqZnM7DQogICAgLQ0KICAgIC0JZnMgPSBndGtfZmlsZV9z
ZWxlY3Rpb25fbmV3KCJTYXZlIGZpbGUgYXMuLi4iKTsNCiAgICAtCWdfc2lnbmFsX2Nvbm5lY3Qo
R1RLX09CSkVDVChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLA0KICAgIC0JCQkg
ImNsaWNrZWQiLA0KICAgIC0JCQkgR19DQUxMQkFDSyhzdG9yZV9maWxlbmFtZSksIChncG9pbnRl
cikgZnMpOw0KICAgIC0JZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QNCiAgICAt
CQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+b2tfYnV0dG9uKSwNCiAgICAtCQkJCSAiY2xp
Y2tlZCIsIEdfQ0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwNCiAgICAtCQkJCSAoZ3BvaW50
ZXIpIGZzKTsNCiAgICAtCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUDQogICAg
LQkJCQkgKEdUS19GSUxFX1NFTEVDVElPTihmcyktPmNhbmNlbF9idXR0b24pLA0KICAgIC0JCQkJ
ICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLA0KICAgIC0JCQkJIChn
cG9pbnRlcikgZnMpOw0KICAgIC0JZ3RrX3dpZGdldF9zaG93KGZzKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtDQogICAgLXZvaWQgb25fcXVpdDFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRl
bSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlpZiAoIW9uX3dpbmRvdzFfZGVs
ZXRlX2V2ZW50KE5VTEwsIE5VTEwsIE5VTEwpKQ0KICAgIC0JCWd0a193aWRnZXRfZGVzdHJveShH
VEtfV0lER0VUKG1haW5fd25kKSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIG9u
X3Nob3dfbmFtZTFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRlbSwgZ3BvaW50ZXIgdXNl
cl9kYXRhKQ0KICAgIC17DQogICAgLQlHdGtUcmVlVmlld0NvbHVtbiAqY29sOw0KICAgIC0NCiAg
ICAtCXNob3dfbmFtZSA9IEdUS19DSEVDS19NRU5VX0lURU0obWVudWl0ZW0pLT5hY3RpdmU7DQog
ICAgLQljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93
KSwgQ09MX05BTUUpOw0KICAgIC0JaWYgKGNvbCkNCiAgICAtCQlndGtfdHJlZV92aWV3X2NvbHVt
bl9zZXRfdmlzaWJsZShjb2wsIHNob3dfbmFtZSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAg
IC12b2lkIG9uX3Nob3dfcmFuZ2UxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdw
b2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JR3RrVHJlZVZpZXdDb2x1bW4gKmNvbDsN
CiAgICAtDQogICAgLQlzaG93X3JhbmdlID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSkt
PmFjdGl2ZTsNCiAgICAtCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9W
SUVXKHRyZWUyX3cpLCBDT0xfTk8pOw0KICAgIC0JaWYgKGNvbCkNCiAgICAtCQlndGtfdHJlZV92
aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3dfcmFuZ2UpOw0KICAgIC0JY29sID0gZ3Rr
X3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9NT0QpOw0K
ICAgIC0JaWYgKGNvbCkNCiAgICAtCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShj
b2wsIHNob3dfcmFuZ2UpOw0KICAgIC0JY29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdU
S19UUkVFX1ZJRVcodHJlZTJfdyksIENPTF9ZRVMpOw0KICAgIC0JaWYgKGNvbCkNCiAgICAtCQln
dGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2wsIHNob3dfcmFuZ2UpOw0KICAgIC0N
CiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25fc2hvd19kYXRhMV9hY3RpdmF0ZShH
dGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAgICAt
CUd0a1RyZWVWaWV3Q29sdW1uICpjb2w7DQogICAgLQ0KICAgIC0Jc2hvd192YWx1ZSA9IEdUS19D
SEVDS19NRU5VX0lURU0obWVudWl0ZW0pLT5hY3RpdmU7DQogICAgLQljb2wgPSBndGtfdHJlZV92
aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09MX1ZBTFVFKTsNCiAgICAt
CWlmIChjb2wpDQogICAgLQkJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sLCBz
aG93X3ZhbHVlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQNCiAgICAtb25fc2V0
X29wdGlvbl9tb2RlMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVz
ZXJfZGF0YSkNCiAgICAtew0KICAgIC0Jb3B0X21vZGUgPSBPUFRfTk9STUFMOw0KICAgIC0JZ3Rr
X3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAgIC0JZGlzcGxheV90cmVlKCZyb290bWVudSk7
CS8qIGluc3RlYWQgb2YgdXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAgKi8NCiAgICAtfQ0KICAgIC0N
CiAgICAtDQogICAgLXZvaWQNCiAgICAtb25fc2V0X29wdGlvbl9tb2RlMl9hY3RpdmF0ZShHdGtN
ZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0Jb3B0
X21vZGUgPSBPUFRfQUxMOw0KICAgIC0JZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAg
IC0JZGlzcGxheV90cmVlKCZyb290bWVudSk7CS8qIGluc3RlYWQgb2YgdXBkYXRlX3RyZWUgdG8g
c3BlZWQtdXAgKi8NCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQNCiAgICAtb25fc2V0
X29wdGlvbl9tb2RlM19hY3RpdmF0ZShHdGtNZW51SXRlbSAqbWVudWl0ZW0sIGdwb2ludGVyIHVz
ZXJfZGF0YSkNCiAgICAtew0KICAgIC0Jb3B0X21vZGUgPSBPUFRfUFJPTVBUOw0KICAgIC0JZ3Rr
X3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAgIC0JZGlzcGxheV90cmVlKCZyb290bWVudSk7
CS8qIGluc3RlYWQgb2YgdXBkYXRlX3RyZWUgdG8gc3BlZWQtdXAgKi8NCiAgICAtfQ0KICAgIC0N
CiAgICAtDQogICAgLXZvaWQgb25faW50cm9kdWN0aW9uMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAq
IG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAgICAtCUd0a1dpZGdldCAq
ZGlhbG9nOw0KICAgIC0JY29uc3QgZ2NoYXIgKmludHJvX3RleHQgPQ0KICAgIC0JICAgICJXZWxj
b21lIHRvIGdrYywgdGhlIEdUSysgZ3JhcGhpY2FsIGNvbmZpZ3VyYXRpb24gdG9vbFxuIg0KICAg
IC0JICAgICJGb3IgZWFjaCBvcHRpb24sIGEgYmxhbmsgYm94IGluZGljYXRlcyB0aGUgZmVhdHVy
ZSBpcyBkaXNhYmxlZCwgYVxuIg0KICAgIC0JICAgICJjaGVjayBpbmRpY2F0ZXMgaXQgaXMgZW5h
YmxlZCwgYW5kIGEgZG90IGluZGljYXRlcyB0aGF0IGl0IGlzIHRvXG4iDQogICAgLQkgICAgImJl
IGNvbXBpbGVkIGFzIGEgbW9kdWxlLiAgQ2xpY2tpbmcgb24gdGhlIGJveCB3aWxsIGN5Y2xlIHRo
cm91Z2ggdGhlIHRocmVlIHN0YXRlcy5cbiINCiAgICAtCSAgICAiXG4iDQogICAgLQkgICAgIklm
IHlvdSBkbyBub3Qgc2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBkZXZpY2UgZHJpdmVyKSB0aGF0IHlv
dVxuIg0KICAgIC0JICAgICJiZWxpZXZlIHNob3VsZCBiZSBwcmVzZW50LCB0cnkgdHVybmluZyBv
biBTaG93IEFsbCBPcHRpb25zXG4iDQogICAgLQkgICAgInVuZGVyIHRoZSBPcHRpb25zIG1lbnUu
XG4iDQogICAgLQkgICAgIkFsdGhvdWdoIHRoZXJlIGlzIG5vIGNyb3NzIHJlZmVyZW5jZSB5ZXQg
dG8gaGVscCB5b3UgZmlndXJlIG91dFxuIg0KICAgIC0JICAgICJ3aGF0IG90aGVyIG9wdGlvbnMg
bXVzdCBiZSBlbmFibGVkIHRvIHN1cHBvcnQgdGhlIG9wdGlvbiB5b3VcbiINCiAgICAtCSAgICAi
YXJlIGludGVyZXN0ZWQgaW4sIHlvdSBjYW4gc3RpbGwgdmlldyB0aGUgaGVscCBvZiBhIGdyYXll
ZC1vdXRcbiINCiAgICAtCSAgICAib3B0aW9uLlxuIg0KICAgIC0JICAgICJcbiINCiAgICAtCSAg
ICAiVG9nZ2xpbmcgU2hvdyBEZWJ1ZyBJbmZvIHVuZGVyIHRoZSBPcHRpb25zIG1lbnUgd2lsbCBz
aG93IFxuIg0KICAgIC0JICAgICJ0aGUgZGVwZW5kZW5jaWVzLCB3aGljaCB5b3UgY2FuIHRoZW4g
bWF0Y2ggYnkgZXhhbWluaW5nIG90aGVyIG9wdGlvbnMuIjsNCiAgICAtDQogICAgLQlkaWFsb2cg
PSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93bmQpLA0KICAgIC0JCQkJ
CUdUS19ESUFMT0dfREVTVFJPWV9XSVRIX1BBUkVOVCwNCiAgICAtCQkJCQlHVEtfTUVTU0FHRV9J
TkZPLA0KICAgIC0JCQkJCUdUS19CVVRUT05TX0NMT1NFLCAiJXMiLCBpbnRyb190ZXh0KTsNCiAg
ICAtCWdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25z
ZSIsDQogICAgLQkJCQkgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLA0KICAgIC0JCQkJ
IEdUS19PQkpFQ1QoZGlhbG9nKSk7DQogICAgLQlndGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxvZyk7
DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIG9uX2Fib3V0MV9hY3RpdmF0ZShHdGtN
ZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAgICAtCUd0
a1dpZGdldCAqZGlhbG9nOw0KICAgIC0JY29uc3QgZ2NoYXIgKmFib3V0X3RleHQgPQ0KICAgIC0J
ICAgICJna2MgaXMgY29weXJpZ2h0IChjKSAyMDAyIFJvbWFpbiBMaWV2aW4gPHJvbXNAbHBnLnRp
Y2FsYy5vcmc+LlxuIg0KICAgIC0JICAgICAgIkJhc2VkIG9uIHRoZSBzb3VyY2UgY29kZSBmcm9t
IFJvbWFuIFppcHBlbC5cbiI7DQogICAgLQ0KICAgIC0JZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlh
bG9nX25ldyhHVEtfV0lORE9XKG1haW5fd25kKSwNCiAgICAtCQkJCQlHVEtfRElBTE9HX0RFU1RS
T1lfV0lUSF9QQVJFTlQsDQogICAgLQkJCQkJR1RLX01FU1NBR0VfSU5GTywNCiAgICAtCQkJCQlH
VEtfQlVUVE9OU19DTE9TRSwgIiVzIiwgYWJvdXRfdGV4dCk7DQogICAgLQlnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQoR1RLX09CSkVDVChkaWFsb2cpLCAicmVzcG9uc2UiLA0KICAgIC0JCQkJIEdf
Q0FMTEJBQ0soZ3RrX3dpZGdldF9kZXN0cm95KSwNCiAgICAtCQkJCSBHVEtfT0JKRUNUKGRpYWxv
ZykpOw0KICAgIC0JZ3RrX3dpZGdldF9zaG93X2FsbChkaWFsb2cpOw0KICAgIC19DQogICAgLQ0K
ICAgIC0NCiAgICAtdm9pZCBvbl9saWNlbnNlMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVp
dGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAgICAtCUd0a1dpZGdldCAqZGlhbG9n
Ow0KICAgIC0JY29uc3QgZ2NoYXIgKmxpY2Vuc2VfdGV4dCA9DQogICAgLQkgICAgImdrYyBpcyBy
ZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuXG4iDQogICAgLQkgICAg
ICAiRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIHNvdXJjZSBjb2RlIG9yXG4i
DQogICAgLQkgICAgICAidmlzaXQgaHR0cDovL3d3dy5mc2Yub3JnL2xpY2Vuc2VzL2xpY2Vuc2Vz
Lmh0bWxcbiI7DQogICAgLQ0KICAgIC0JZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldyhH
VEtfV0lORE9XKG1haW5fd25kKSwNCiAgICAtCQkJCQlHVEtfRElBTE9HX0RFU1RST1lfV0lUSF9Q
QVJFTlQsDQogICAgLQkJCQkJR1RLX01FU1NBR0VfSU5GTywNCiAgICAtCQkJCQlHVEtfQlVUVE9O
U19DTE9TRSwgIiVzIiwgbGljZW5zZV90ZXh0KTsNCiAgICAtCWdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChHVEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25zZSIsDQogICAgLQkJCQkgR19DQUxMQkFD
SyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLA0KICAgIC0JCQkJIEdUS19PQkpFQ1QoZGlhbG9nKSk7DQog
ICAgLQlndGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxvZyk7DQogICAgLX0NCiAgICAtDQogICAgLQ0K
ICAgIC12b2lkIG9uX2JhY2tfY2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVz
ZXJfZGF0YSkNCiAgICAtew0KICAgIC0JZW51bSBwcm9wX3R5cGUgcHR5cGU7DQogICAgLQ0KICAg
IC0JY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudDsNCiAgICAtCXB0eXBlID0gY3VycmVudC0+cHJv
bXB0ID8gY3VycmVudC0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOw0KICAgIC0JaWYgKHB0eXBl
ICE9IFBfTUVOVSkNCiAgICAtCQljdXJyZW50ID0gY3VycmVudC0+cGFyZW50Ow0KICAgIC0JZGlz
cGxheV90cmVlX3BhcnQoKTsNCiAgICAtDQogICAgLQlpZiAoY3VycmVudCA9PSAmcm9vdG1lbnUp
DQogICAgLQkJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBGQUxTRSk7DQogICAg
LX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIG9uX2xvYWRfY2xpY2tlZChHdGtCdXR0b24gKiBi
dXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0Jb25fbG9hZDFfYWN0aXZh
dGUoTlVMTCwgdXNlcl9kYXRhKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25f
c2luZ2xlX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQog
ICAgLXsNCiAgICAtCXZpZXdfbW9kZSA9IFNJTkdMRV9WSUVXOw0KICAgIC0JZ3RrX3dpZGdldF9o
aWRlKHRyZWUxX3cpOw0KICAgIC0JY3VycmVudCA9ICZyb290bWVudTsNCiAgICAtCWRpc3BsYXlf
dHJlZV9wYXJ0KCk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIG9uX3NwbGl0X2Ns
aWNrZWQoR3RrQnV0dG9uICogYnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAg
ICAtCWdpbnQgdywgaDsNCiAgICAtCXZpZXdfbW9kZSA9IFNQTElUX1ZJRVc7DQogICAgLQlndGtf
d2lkZ2V0X3Nob3codHJlZTFfdyk7DQogICAgLQlndGtfd2luZG93X2dldF9kZWZhdWx0X3NpemUo
R1RLX1dJTkRPVyhtYWluX3duZCksICZ3LCAmaCk7DQogICAgLQlndGtfcGFuZWRfc2V0X3Bvc2l0
aW9uKEdUS19QQU5FRChocGFuZWQpLCB3IC8gMik7DQogICAgLQlpZiAodHJlZTIpDQogICAgLQkJ
Z3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAgIC0JZGlzcGxheV9saXN0KCk7DQogICAg
LQ0KICAgIC0JLyogRGlzYWJsZSBiYWNrIGJ0biwgbGlrZSBpbiBmdWxsIG1vZGUuICovDQogICAg
LQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsNCiAgICAtfQ0KICAg
IC0NCiAgICAtDQogICAgLXZvaWQgb25fZnVsbF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwg
Z3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQl2aWV3X21vZGUgPSBGVUxMX1ZJRVc7
DQogICAgLQlndGtfd2lkZ2V0X2hpZGUodHJlZTFfdyk7DQogICAgLQlpZiAodHJlZTIpDQogICAg
LQkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAgIC0JZGlzcGxheV90cmVlKCZyb290
bWVudSk7DQogICAgLQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgb25fY29sbGFwc2VfY2xpY2tlZChHdGtC
dXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JZ3RrX3Ry
ZWVfdmlld19jb2xsYXBzZV9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMl93KSk7DQogICAgLX0NCiAg
ICAtDQogICAgLQ0KICAgIC12b2lkIG9uX2V4cGFuZF9jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRv
biwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlndGtfdHJlZV92aWV3X2V4cGFu
ZF9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMl93KSk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAg
IC0vKiBDVHJlZSBDYWxsYmFja3MgKi8NCiAgICAtDQogICAgLS8qIENoYW5nZSBoZXgvaW50L3N0
cmluZyB2YWx1ZSBpbiB0aGUgY2VsbCAqLw0KICAgIC1zdGF0aWMgdm9pZCByZW5kZXJlcl9lZGl0
ZWQoR3RrQ2VsbFJlbmRlcmVyVGV4dCAqIGNlbGwsDQogICAgLQkJCSAgICBjb25zdCBnY2hhciAq
IHBhdGhfc3RyaW5nLA0KICAgIC0JCQkgICAgY29uc3QgZ2NoYXIgKiBuZXdfdGV4dCwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlHdGtUcmVlUGF0aCAqcGF0aCA9IGd0a190cmVl
X3BhdGhfbmV3X2Zyb21fc3RyaW5nKHBhdGhfc3RyaW5nKTsNCiAgICAtCUd0a1RyZWVJdGVyIGl0
ZXI7DQogICAgLQljb25zdCBjaGFyICpvbGRfZGVmLCAqbmV3X2RlZjsNCiAgICAtCXN0cnVjdCBt
ZW51ICptZW51Ow0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0NCiAgICAtCWlmICgh
Z3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAmaXRlciwgcGF0aCkpDQogICAgLQkJcmV0
dXJuOw0KICAgIC0NCiAgICAtCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xf
TUVOVSwgJm1lbnUsIC0xKTsNCiAgICAtCXN5bSA9IG1lbnUtPnN5bTsNCiAgICAtDQogICAgLQln
dGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX1ZBTFVFLCAmb2xkX2RlZiwgLTEp
Ow0KICAgIC0JbmV3X2RlZiA9IG5ld190ZXh0Ow0KICAgIC0NCiAgICAtCXN5bV9zZXRfc3RyaW5n
X3ZhbHVlKHN5bSwgbmV3X2RlZik7DQogICAgLQ0KICAgIC0JdXBkYXRlX3RyZWUoJnJvb3RtZW51
LCBOVUxMKTsNCiAgICAtDQogICAgLQlndGtfdHJlZV9wYXRoX2ZyZWUocGF0aCk7DQogICAgLX0N
CiAgICAtDQogICAgLS8qIENoYW5nZSB0aGUgdmFsdWUgb2YgYSBzeW1ib2wgYW5kIHVwZGF0ZSB0
aGUgdHJlZSAqLw0KICAgIC1zdGF0aWMgdm9pZCBjaGFuZ2Vfc3ltX3ZhbHVlKHN0cnVjdCBtZW51
ICptZW51LCBnaW50IGNvbCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltID0gbWVu
dS0+c3ltOw0KICAgIC0JdHJpc3RhdGUgbmV3dmFsOw0KICAgIC0NCiAgICAtCWlmICghc3ltKQ0K
ICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlpZiAoY29sID09IENPTF9OTykNCiAgICAtCQlu
ZXd2YWwgPSBubzsNCiAgICAtCWVsc2UgaWYgKGNvbCA9PSBDT0xfTU9EKQ0KICAgIC0JCW5ld3Zh
bCA9IG1vZDsNCiAgICAtCWVsc2UgaWYgKGNvbCA9PSBDT0xfWUVTKQ0KICAgIC0JCW5ld3ZhbCA9
IHllczsNCiAgICAtCWVsc2UNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0Jc3dpdGNoIChz
eW1fZ2V0X3R5cGUoc3ltKSkgew0KICAgIC0JY2FzZSBTX0JPT0xFQU46DQogICAgLQljYXNlIFNf
VFJJU1RBVEU6DQogICAgLQkJaWYgKCFzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbmV3
dmFsKSkNCiAgICAtCQkJbmV3dmFsID0geWVzOw0KICAgIC0JCXN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCBuZXd2YWwpOw0KICAgIC0JCWlmICh2aWV3X21vZGUgPT0gRlVMTF9WSUVXKQ0KICAg
IC0JCQl1cGRhdGVfdHJlZSgmcm9vdG1lbnUsIE5VTEwpOw0KICAgIC0JCWVsc2UgaWYgKHZpZXdf
bW9kZSA9PSBTUExJVF9WSUVXKSB7DQogICAgLQkJCXVwZGF0ZV90cmVlKGJyb3dzZWQsIE5VTEwp
Ow0KICAgIC0JCQlkaXNwbGF5X2xpc3QoKTsNCiAgICAtCQl9DQogICAgLQkJZWxzZSBpZiAodmll
d19tb2RlID09IFNJTkdMRV9WSUVXKQ0KICAgIC0JCQlkaXNwbGF5X3RyZWVfcGFydCgpOwkvL2Zp
eG1lOiBrZWVwIGV4cC9jb2xsDQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNfSU5UOg0KICAg
IC0JY2FzZSBTX0hFWDoNCiAgICAtCWNhc2UgU19TVFJJTkc6DQogICAgLQlkZWZhdWx0Og0KICAg
IC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB0b2dn
bGVfc3ltX3ZhbHVlKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQlpZiAoIW1lbnUt
PnN5bSkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0Jc3ltX3RvZ2dsZV90cmlzdGF0ZV92
YWx1ZShtZW51LT5zeW0pOw0KICAgIC0JaWYgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpDQogICAg
LQkJdXBkYXRlX3RyZWUoJnJvb3RtZW51LCBOVUxMKTsNCiAgICAtCWVsc2UgaWYgKHZpZXdfbW9k
ZSA9PSBTUExJVF9WSUVXKSB7DQogICAgLQkJdXBkYXRlX3RyZWUoYnJvd3NlZCwgTlVMTCk7DQog
ICAgLQkJZGlzcGxheV9saXN0KCk7DQogICAgLQl9DQogICAgLQllbHNlIGlmICh2aWV3X21vZGUg
PT0gU0lOR0xFX1ZJRVcpDQogICAgLQkJZGlzcGxheV90cmVlX3BhcnQoKTsJLy9maXhtZToga2Vl
cCBleHAvY29sbA0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgZ2ludCBjb2x1bW4yaW5kZXgo
R3RrVHJlZVZpZXdDb2x1bW4gKiBjb2x1bW4pDQogICAgLXsNCiAgICAtCWdpbnQgaTsNCiAgICAt
DQogICAgLQlmb3IgKGkgPSAwOyBpIDwgQ09MX05VTUJFUjsgaSsrKSB7DQogICAgLQkJR3RrVHJl
ZVZpZXdDb2x1bW4gKmNvbDsNCiAgICAtDQogICAgLQkJY29sID0gZ3RrX3RyZWVfdmlld19nZXRf
Y29sdW1uKEdUS19UUkVFX1ZJRVcodHJlZTJfdyksIGkpOw0KICAgIC0JCWlmIChjb2wgPT0gY29s
dW1uKQ0KICAgIC0JCQlyZXR1cm4gaTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlyZXR1cm4gLTE7
DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC0vKiBVc2VyIGNsaWNrOiB1cGRhdGUgY2hvaWNl
IChmdWxsKSBvciBnb2VzIGRvd24gKHNpbmdsZSkgKi8NCiAgICAtZ2Jvb2xlYW4NCiAgICAtb25f
dHJlZXZpZXcyX2J1dHRvbl9wcmVzc19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsDQogICAgLQkJ
CQlHZGtFdmVudEJ1dHRvbiAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgLXsNCiAg
ICAtCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh3aWRnZXQpOw0KICAgIC0JR3Rr
VHJlZVBhdGggKnBhdGg7DQogICAgLQlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1uOw0KICAgIC0J
R3RrVHJlZUl0ZXIgaXRlcjsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51Ow0KICAgIC0JZ2ludCBj
b2w7DQogICAgLQ0KICAgIC0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMiwxLDQpIC8vIGJ1ZyBpbiBj
dHJlZSB3aXRoIGVhcmxpZXIgdmVyc2lvbiBvZiBHVEsNCiAgICAtCWdpbnQgdHggPSAoZ2ludCkg
ZXZlbnQtPng7DQogICAgLQlnaW50IHR5ID0gKGdpbnQpIGV2ZW50LT55Ow0KICAgIC0JZ2ludCBj
eCwgY3k7DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVfdmlld19nZXRfcGF0aF9hdF9wb3Modmlldywg
dHgsIHR5LCAmcGF0aCwgJmNvbHVtbiwgJmN4LA0KICAgIC0JCQkJICAgICAgJmN5KTsNCiAgICAt
I2Vsc2UNCiAgICAtCWd0a190cmVlX3ZpZXdfZ2V0X2N1cnNvcih2aWV3LCAmcGF0aCwgJmNvbHVt
bik7DQogICAgLSNlbmRpZg0KICAgIC0JaWYgKHBhdGggPT0gTlVMTCkNCiAgICAtCQlyZXR1cm4g
RkFMU0U7DQogICAgLQ0KICAgIC0JaWYgKCFndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbDIs
ICZpdGVyLCBwYXRoKSkNCiAgICAtCQlyZXR1cm4gRkFMU0U7DQogICAgLQlndGtfdHJlZV9tb2Rl
bF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7DQogICAgLQ0KICAgIC0J
Y29sID0gY29sdW1uMmluZGV4KGNvbHVtbik7DQogICAgLQlpZiAoZXZlbnQtPnR5cGUgPT0gR0RL
XzJCVVRUT05fUFJFU1MpIHsNCiAgICAtCQllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICAtCQlw
dHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAg
ICAtDQogICAgLQkJaWYgKHB0eXBlID09IFBfTUVOVSAmJiB2aWV3X21vZGUgIT0gRlVMTF9WSUVX
ICYmIGNvbCA9PSBDT0xfT1BUSU9OKSB7DQogICAgLQkJCS8vIGdvZXMgZG93biBpbnRvIG1lbnUN
CiAgICAtCQkJY3VycmVudCA9IG1lbnU7DQogICAgLQkJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7DQog
ICAgLQkJCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgVFJVRSk7DQogICAgLQkJ
fSBlbHNlIGlmIChjb2wgPT0gQ09MX09QVElPTikgew0KICAgIC0JCQl0b2dnbGVfc3ltX3ZhbHVl
KG1lbnUpOw0KICAgIC0JCQlndGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywgcGF0aCwgVFJV
RSk7DQogICAgLQkJfQ0KICAgIC0JfSBlbHNlIHsNCiAgICAtCQlpZiAoY29sID09IENPTF9WQUxV
RSkgew0KICAgIC0JCQl0b2dnbGVfc3ltX3ZhbHVlKG1lbnUpOw0KICAgIC0JCQlndGtfdHJlZV92
aWV3X2V4cGFuZF9yb3codmlldywgcGF0aCwgVFJVRSk7DQogICAgLQkJfSBlbHNlIGlmIChjb2wg
PT0gQ09MX05PIHx8IGNvbCA9PSBDT0xfTU9EDQogICAgLQkJCSAgIHx8IGNvbCA9PSBDT0xfWUVT
KSB7DQogICAgLQkJCWNoYW5nZV9zeW1fdmFsdWUobWVudSwgY29sKTsNCiAgICAtCQkJZ3RrX3Ry
ZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgsIFRSVUUpOw0KICAgIC0JCX0NCiAgICAtCX0N
CiAgICAtDQogICAgLQlyZXR1cm4gRkFMU0U7DQogICAgLX0NCiAgICAtDQogICAgLS8qIEtleSBw
cmVzc2VkOiB1cGRhdGUgY2hvaWNlICovDQogICAgLWdib29sZWFuDQogICAgLW9uX3RyZWV2aWV3
Ml9rZXlfcHJlc3NfZXZlbnQoR3RrV2lkZ2V0ICogd2lkZ2V0LA0KICAgIC0JCQkgICAgIEdka0V2
ZW50S2V5ICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAtew0KICAgIC0JR3RrVHJl
ZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7DQogICAgLQlHdGtUcmVlUGF0aCAq
cGF0aDsNCiAgICAtCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47DQogICAgLQlHdGtUcmVlSXRl
ciBpdGVyOw0KICAgIC0Jc3RydWN0IG1lbnUgKm1lbnU7DQogICAgLQlnaW50IGNvbDsNCiAgICAt
DQogICAgLQlndGtfdHJlZV92aWV3X2dldF9jdXJzb3IodmlldywgJnBhdGgsICZjb2x1bW4pOw0K
ICAgIC0JaWYgKHBhdGggPT0gTlVMTCkNCiAgICAtCQlyZXR1cm4gRkFMU0U7DQogICAgLQ0KICAg
IC0JaWYgKGV2ZW50LT5rZXl2YWwgPT0gR0RLX3NwYWNlKSB7DQogICAgLQkJaWYgKGd0a190cmVl
X3ZpZXdfcm93X2V4cGFuZGVkKHZpZXcsIHBhdGgpKQ0KICAgIC0JCQlndGtfdHJlZV92aWV3X2Nv
bGxhcHNlX3Jvdyh2aWV3LCBwYXRoKTsNCiAgICAtCQllbHNlDQogICAgLQkJCWd0a190cmVlX3Zp
ZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBGQUxTRSk7DQogICAgLQkJcmV0dXJuIFRSVUU7DQog
ICAgLQl9DQogICAgLQlpZiAoZXZlbnQtPmtleXZhbCA9PSBHREtfS1BfRW50ZXIpIHsNCiAgICAt
CX0NCiAgICAtCWlmICh3aWRnZXQgPT0gdHJlZTFfdykNCiAgICAtCQlyZXR1cm4gRkFMU0U7DQog
ICAgLQ0KICAgIC0JZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9kZWwyLCAmaXRlciwgcGF0aCk7
DQogICAgLQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51
LCAtMSk7DQogICAgLQ0KICAgIC0JaWYgKCFzdHJjYXNlY21wKGV2ZW50LT5zdHJpbmcsICJuIikp
DQogICAgLQkJY29sID0gQ09MX05POw0KICAgIC0JZWxzZSBpZiAoIXN0cmNhc2VjbXAoZXZlbnQt
PnN0cmluZywgIm0iKSkNCiAgICAtCQljb2wgPSBDT0xfTU9EOw0KICAgIC0JZWxzZSBpZiAoIXN0
cmNhc2VjbXAoZXZlbnQtPnN0cmluZywgInkiKSkNCiAgICAtCQljb2wgPSBDT0xfWUVTOw0KICAg
IC0JZWxzZQ0KICAgIC0JCWNvbCA9IC0xOw0KICAgIC0JY2hhbmdlX3N5bV92YWx1ZShtZW51LCBj
b2wpOw0KICAgIC0NCiAgICAtCXJldHVybiBGQUxTRTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQog
ICAgLS8qIFJvdyBzZWxlY3Rpb24gY2hhbmdlZDogdXBkYXRlIGhlbHAgKi8NCiAgICAtdm9pZA0K
ICAgIC1vbl90cmVldmlldzJfY3Vyc29yX2NoYW5nZWQoR3RrVHJlZVZpZXcgKiB0cmVldmlldywg
Z3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgIC17DQogICAgLQlHdGtUcmVlU2VsZWN0aW9uICpzZWxl
Y3Rpb247DQogICAgLQlHdGtUcmVlSXRlciBpdGVyOw0KICAgIC0Jc3RydWN0IG1lbnUgKm1lbnU7
DQogICAgLQ0KICAgIC0Jc2VsZWN0aW9uID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHRy
ZWV2aWV3KTsNCiAgICAtCWlmIChndGtfdHJlZV9zZWxlY3Rpb25fZ2V0X3NlbGVjdGVkKHNlbGVj
dGlvbiwgJm1vZGVsMiwgJml0ZXIpKSB7DQogICAgLQkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVs
MiwgJml0ZXIsIENPTF9NRU5VLCAmbWVudSwgLTEpOw0KICAgIC0JCXRleHRfaW5zZXJ0X2hlbHAo
bWVudSk7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC0vKiBVc2VyIGNsaWNr
OiBkaXNwbGF5IHN1Yi10cmVlIGluIHRoZSByaWdodCBmcmFtZS4gKi8NCiAgICAtZ2Jvb2xlYW4N
CiAgICAtb25fdHJlZXZpZXcxX2J1dHRvbl9wcmVzc19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQs
DQogICAgLQkJCQlHZGtFdmVudEJ1dHRvbiAqIGV2ZW50LCBncG9pbnRlciB1c2VyX2RhdGEpDQog
ICAgLXsNCiAgICAtCUd0a1RyZWVWaWV3ICp2aWV3ID0gR1RLX1RSRUVfVklFVyh3aWRnZXQpOw0K
ICAgIC0JR3RrVHJlZVBhdGggKnBhdGg7DQogICAgLQlHdGtUcmVlVmlld0NvbHVtbiAqY29sdW1u
Ow0KICAgIC0JR3RrVHJlZUl0ZXIgaXRlcjsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51Ow0KICAg
IC0NCiAgICAtCWdpbnQgdHggPSAoZ2ludCkgZXZlbnQtPng7DQogICAgLQlnaW50IHR5ID0gKGdp
bnQpIGV2ZW50LT55Ow0KICAgIC0JZ2ludCBjeCwgY3k7DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVf
dmlld19nZXRfcGF0aF9hdF9wb3ModmlldywgdHgsIHR5LCAmcGF0aCwgJmNvbHVtbiwgJmN4LA0K
ICAgIC0JCQkJICAgICAgJmN5KTsNCiAgICAtCWlmIChwYXRoID09IE5VTEwpDQogICAgLQkJcmV0
dXJuIEZBTFNFOw0KICAgIC0NCiAgICAtCWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1vZGVsMSwg
Jml0ZXIsIHBhdGgpOw0KICAgIC0JZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMSwgJml0ZXIsIENP
TF9NRU5VLCAmbWVudSwgLTEpOw0KICAgIC0NCiAgICAtCWlmIChldmVudC0+dHlwZSA9PSBHREtf
MkJVVFRPTl9QUkVTUykgew0KICAgIC0JCXRvZ2dsZV9zeW1fdmFsdWUobWVudSk7DQogICAgLQkJ
Y3VycmVudCA9IG1lbnU7DQogICAgLQkJZGlzcGxheV90cmVlX3BhcnQoKTsNCiAgICAtCX0gZWxz
ZSB7DQogICAgLQkJYnJvd3NlZCA9IG1lbnU7DQogICAgLQkJZGlzcGxheV90cmVlX3BhcnQoKTsN
CiAgICAtCX0NCiAgICAtDQogICAgLQlndGtfd2lkZ2V0X3JlYWxpemUodHJlZTJfdyk7DQogICAg
LQlndGtfdHJlZV92aWV3X3NldF9jdXJzb3IodmlldywgcGF0aCwgTlVMTCwgRkFMU0UpOw0KICAg
IC0JZ3RrX3dpZGdldF9ncmFiX2ZvY3VzKHRyZWUyX3cpOw0KICAgIC0NCiAgICAtCXJldHVybiBG
QUxTRTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qIEZpbGwgYSByb3cgb2Ygc3RyaW5n
cyAqLw0KICAgIC1zdGF0aWMgZ2NoYXIgKipmaWxsX3JvdyhzdHJ1Y3QgbWVudSAqbWVudSkNCiAg
ICAtew0KICAgIC0Jc3RhdGljIGdjaGFyICpyb3dbQ09MX05VTUJFUl07DQogICAgLQlzdHJ1Y3Qg
c3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgLQljb25zdCBjaGFyICpkZWY7DQogICAgLQlp
bnQgc3R5cGU7DQogICAgLQl0cmlzdGF0ZSB2YWw7DQogICAgLQllbnVtIHByb3BfdHlwZSBwdHlw
ZTsNCiAgICAtCWludCBpOw0KICAgIC0NCiAgICAtCWZvciAoaSA9IENPTF9PUFRJT047IGkgPD0g
Q09MX0NPTE9SOyBpKyspDQogICAgLQkJZ19mcmVlKHJvd1tpXSk7DQogICAgLQliemVybyhyb3cs
IHNpemVvZihyb3cpKTsNCiAgICAtDQogICAgLQlyb3dbQ09MX09QVElPTl0gPQ0KICAgIC0JICAg
IGdfc3RyZHVwX3ByaW50ZigiJXMgJXMiLCBtZW51X2dldF9wcm9tcHQobWVudSksDQogICAgLQkJ
CSAgICBzeW0gJiYgIXN5bV9oYXNfdmFsdWUoc3ltKSA/ICIoTkVXKSIgOiAiIik7DQogICAgLQ0K
ICAgIC0JaWYgKG9wdF9tb2RlID09IE9QVF9BTEwgJiYgIW1lbnVfaXNfdmlzaWJsZShtZW51KSkN
CiAgICAtCQlyb3dbQ09MX0NPTE9SXSA9IGdfc3RyZHVwKCJEYXJrR3JheSIpOw0KICAgIC0JZWxz
ZSBpZiAob3B0X21vZGUgPT0gT1BUX1BST01QVCAmJg0KICAgIC0JCQltZW51X2hhc19wcm9tcHQo
bWVudSkgJiYgIW1lbnVfaXNfdmlzaWJsZShtZW51KSkNCiAgICAtCQlyb3dbQ09MX0NPTE9SXSA9
IGdfc3RyZHVwKCJEYXJrR3JheSIpOw0KICAgIC0JZWxzZQ0KICAgIC0JCXJvd1tDT0xfQ09MT1Jd
ID0gZ19zdHJkdXAoIkJsYWNrIik7DQogICAgLQ0KICAgIC0JcHR5cGUgPSBtZW51LT5wcm9tcHQg
PyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQlzd2l0Y2ggKHB0eXBlKSB7
DQogICAgLQljYXNlIFBfTUVOVToNCiAgICAtCQlyb3dbQ09MX1BJWEJVRl0gPSAoZ2NoYXIgKikg
eHBtX21lbnU7DQogICAgLQkJaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVykNCiAgICAtCQkJ
cm93W0NPTF9QSVhWSVNdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOw0KICAgIC0JCXJvd1tDT0xf
QlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7DQogICAgLQkJYnJlYWs7DQogICAgLQlj
YXNlIFBfQ09NTUVOVDoNCiAgICAtCQlyb3dbQ09MX1BJWEJVRl0gPSAoZ2NoYXIgKikgeHBtX3Zv
aWQ7DQogICAgLQkJcm93W0NPTF9QSVhWSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAg
ICAtCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOw0KICAgIC0JCWJy
ZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlyb3dbQ09MX1BJWEJVRl0gPSAoZ2NoYXIgKikg
eHBtX3ZvaWQ7DQogICAgLQkJcm93W0NPTF9QSVhWSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNF
KTsNCiAgICAtCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7DQogICAg
LQkJYnJlYWs7DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKCFzeW0pDQogICAgLQkJcmV0dXJu
IHJvdzsNCiAgICAtCXJvd1tDT0xfTkFNRV0gPSBnX3N0cmR1cChzeW0tPm5hbWUpOw0KICAgIC0N
CiAgICAtCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgLQlzeW0tPmZsYWdzICY9IH5TWU1CT0xf
Q0hBTkdFRDsNCiAgICAtDQogICAgLQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7CS8vIHBhcnNl
IGNoaWxkcyBmb3IgZ2V0dGluZyBmaW5hbCB2YWx1ZQ0KICAgIC0JCXN0cnVjdCBtZW51ICpjaGls
ZDsNCiAgICAtCQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUo
c3ltKTsNCiAgICAtCQlzdHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOw0KICAgIC0NCiAgICAt
CQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOw0KICAgIC0NCiAgICAt
CQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsN
CiAgICAtCQkJaWYgKG1lbnVfaXNfdmlzaWJsZShjaGlsZCkNCiAgICAtCQkJICAgICYmIGNoaWxk
LT5zeW0gPT0gZGVmX3N5bSkNCiAgICAtCQkJCWRlZl9tZW51ID0gY2hpbGQ7DQogICAgLQkJfQ0K
ICAgIC0NCiAgICAtCQlpZiAoZGVmX21lbnUpDQogICAgLQkJCXJvd1tDT0xfVkFMVUVdID0NCiAg
ICAtCQkJICAgIGdfc3RyZHVwKG1lbnVfZ2V0X3Byb21wdChkZWZfbWVudSkpOw0KICAgIC0JfQ0K
ICAgIC0JaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFVkFMKQ0KICAgIC0JCXJvd1tDT0xf
QlROUkFEXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsNCiAgICAtDQogICAgLQlzdHlwZSA9IHN5
bV9nZXRfdHlwZShzeW0pOw0KICAgIC0Jc3dpdGNoIChzdHlwZSkgew0KICAgIC0JY2FzZSBTX0JP
T0xFQU46DQogICAgLQkJaWYgKEdQT0lOVEVSX1RPX0lOVChyb3dbQ09MX1BJWFZJU10pID09IEZB
TFNFKQ0KICAgIC0JCQlyb3dbQ09MX0JUTlZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7DQog
ICAgLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJLyog
ZmFsbCB0aHJvdWdoICovDQogICAgLQljYXNlIFNfVFJJU1RBVEU6DQogICAgLQkJdmFsID0gc3lt
X2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0JCXN3aXRjaCAodmFsKSB7DQogICAgLQkJ
Y2FzZSBubzoNCiAgICAtCQkJcm93W0NPTF9OT10gPSBnX3N0cmR1cCgiTiIpOw0KICAgIC0JCQly
b3dbQ09MX1ZBTFVFXSA9IGdfc3RyZHVwKCJOIik7DQogICAgLQkJCXJvd1tDT0xfQlROQUNUXSA9
IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7DQogICAgLQkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRf
VE9fUE9JTlRFUihGQUxTRSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgbW9kOg0KICAg
IC0JCQlyb3dbQ09MX01PRF0gPSBnX3N0cmR1cCgiTSIpOw0KICAgIC0JCQlyb3dbQ09MX1ZBTFVF
XSA9IGdfc3RyZHVwKCJNIik7DQogICAgLQkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9fUE9J
TlRFUihUUlVFKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSB5ZXM6DQogICAgLQkJCXJv
d1tDT0xfWUVTXSA9IGdfc3RyZHVwKCJZIik7DQogICAgLQkJCXJvd1tDT0xfVkFMVUVdID0gZ19z
dHJkdXAoIlkiKTsNCiAgICAtCQkJcm93W0NPTF9CVE5BQ1RdID0gR0lOVF9UT19QT0lOVEVSKFRS
VUUpOw0KICAgIC0JCQlyb3dbQ09MX0JUTklOQ10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0UpOw0K
ICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCWlmICh2YWwgIT0gbm8gJiYg
c3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKSkNCiAgICAtCQkJcm93W0NPTF9OT10g
PSBnX3N0cmR1cCgiXyIpOw0KICAgIC0JCWlmICh2YWwgIT0gbW9kICYmIHN5bV90cmlzdGF0ZV93
aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpKQ0KICAgIC0JCQlyb3dbQ09MX01PRF0gPSBnX3N0cmR1cCgi
XyIpOw0KICAgIC0JCWlmICh2YWwgIT0geWVzICYmIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uo
c3ltLCB5ZXMpKQ0KICAgIC0JCQlyb3dbQ09MX1lFU10gPSBnX3N0cmR1cCgiXyIpOw0KICAgIC0J
CWJyZWFrOw0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQljYXNl
IFNfU1RSSU5HOg0KICAgIC0JCWRlZiA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7DQogICAg
LQkJcm93W0NPTF9WQUxVRV0gPSBnX3N0cmR1cChkZWYpOw0KICAgIC0JCXJvd1tDT0xfRURJVF0g
PSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7DQogICAgLQkJcm93W0NPTF9CVE5WSVNdID0gR0lOVF9U
T19QT0lOVEVSKEZBTFNFKTsNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLQly
ZXR1cm4gcm93Ow0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogU2V0IHRoZSBub2RlIGNv
bnRlbnQgd2l0aCBhIHJvdyBvZiBzdHJpbmdzICovDQogICAgLXN0YXRpYyB2b2lkIHNldF9ub2Rl
KEd0a1RyZWVJdGVyICogbm9kZSwgc3RydWN0IG1lbnUgKm1lbnUsIGdjaGFyICoqIHJvdykNCiAg
ICAtew0KICAgIC0JR2RrQ29sb3IgY29sb3I7DQogICAgLQlnYm9vbGVhbiBzdWNjZXNzOw0KICAg
IC0JR2RrUGl4YnVmICpwaXg7DQogICAgLQ0KICAgIC0JcGl4ID0gZ2RrX3BpeGJ1Zl9uZXdfZnJv
bV94cG1fZGF0YSgoY29uc3QgY2hhciAqKikNCiAgICAtCQkJCQkgICByb3dbQ09MX1BJWEJVRl0p
Ow0KICAgIC0NCiAgICAtCWdka19jb2xvcl9wYXJzZShyb3dbQ09MX0NPTE9SXSwgJmNvbG9yKTsN
CiAgICAtCWdka19jb2xvcm1hcF9hbGxvY19jb2xvcnMoZ2RrX2NvbG9ybWFwX2dldF9zeXN0ZW0o
KSwgJmNvbG9yLCAxLA0KICAgIC0JCQkJICBGQUxTRSwgRkFMU0UsICZzdWNjZXNzKTsNCiAgICAt
DQogICAgLQlndGtfdHJlZV9zdG9yZV9zZXQodHJlZSwgbm9kZSwNCiAgICAtCQkJICAgQ09MX09Q
VElPTiwgcm93W0NPTF9PUFRJT05dLA0KICAgIC0JCQkgICBDT0xfTkFNRSwgcm93W0NPTF9OQU1F
XSwNCiAgICAtCQkJICAgQ09MX05PLCByb3dbQ09MX05PXSwNCiAgICAtCQkJICAgQ09MX01PRCwg
cm93W0NPTF9NT0RdLA0KICAgIC0JCQkgICBDT0xfWUVTLCByb3dbQ09MX1lFU10sDQogICAgLQkJ
CSAgIENPTF9WQUxVRSwgcm93W0NPTF9WQUxVRV0sDQogICAgLQkJCSAgIENPTF9NRU5VLCAoZ3Bv
aW50ZXIpIG1lbnUsDQogICAgLQkJCSAgIENPTF9DT0xPUiwgJmNvbG9yLA0KICAgIC0JCQkgICBD
T0xfRURJVCwgR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfRURJVF0pLA0KICAgIC0JCQkgICBDT0xf
UElYQlVGLCBwaXgsDQogICAgLQkJCSAgIENPTF9QSVhWSVMsIEdQT0lOVEVSX1RPX0lOVChyb3db
Q09MX1BJWFZJU10pLA0KICAgIC0JCQkgICBDT0xfQlROVklTLCBHUE9JTlRFUl9UT19JTlQocm93
W0NPTF9CVE5WSVNdKSwNCiAgICAtCQkJICAgQ09MX0JUTkFDVCwgR1BPSU5URVJfVE9fSU5UKHJv
d1tDT0xfQlROQUNUXSksDQogICAgLQkJCSAgIENPTF9CVE5JTkMsIEdQT0lOVEVSX1RPX0lOVChy
b3dbQ09MX0JUTklOQ10pLA0KICAgIC0JCQkgICBDT0xfQlROUkFELCBHUE9JTlRFUl9UT19JTlQo
cm93W0NPTF9CVE5SQURdKSwNCiAgICAtCQkJICAgLTEpOw0KICAgIC0NCiAgICAtCWdfb2JqZWN0
X3VucmVmKHBpeCk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC0vKiBBZGQgYSBub2RlIHRv
IHRoZSB0cmVlICovDQogICAgLXN0YXRpYyB2b2lkIHBsYWNlX25vZGUoc3RydWN0IG1lbnUgKm1l
bnUsIGNoYXIgKipyb3cpDQogICAgLXsNCiAgICAtCUd0a1RyZWVJdGVyICpwYXJlbnQgPSBwYXJl
bnRzW2luZGVudCAtIDFdOw0KICAgIC0JR3RrVHJlZUl0ZXIgKm5vZGUgPSBwYXJlbnRzW2luZGVu
dF07DQogICAgLQ0KICAgIC0JZ3RrX3RyZWVfc3RvcmVfYXBwZW5kKHRyZWUsIG5vZGUsIHBhcmVu
dCk7DQogICAgLQlzZXRfbm9kZShub2RlLCBtZW51LCByb3cpOw0KICAgIC19DQogICAgLQ0KICAg
IC0NCiAgICAtLyogRmluZCBhIG5vZGUgaW4gdGhlIEdUSysgdHJlZSAqLw0KICAgIC1zdGF0aWMg
R3RrVHJlZUl0ZXIgZm91bmQ7DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBGaW5kIGEgbWVudSBp
biB0aGUgR3RrVHJlZSBzdGFydGluZyBhdCBwYXJlbnQuDQogICAgLSAqLw0KICAgIC1zdGF0aWMg
R3RrVHJlZUl0ZXIgKmd0a3RyZWVfaXRlcl9maW5kX25vZGUoR3RrVHJlZUl0ZXIgKnBhcmVudCwN
CiAgICAtCQkJCQkgICBzdHJ1Y3QgbWVudSAqdG9maW5kKQ0KICAgIC17DQogICAgLQlHdGtUcmVl
SXRlciBpdGVyOw0KICAgIC0JR3RrVHJlZUl0ZXIgKmNoaWxkID0gJml0ZXI7DQogICAgLQlnYm9v
bGVhbiB2YWxpZDsNCiAgICAtCUd0a1RyZWVJdGVyICpyZXQ7DQogICAgLQ0KICAgIC0JdmFsaWQg
PSBndGtfdHJlZV9tb2RlbF9pdGVyX2NoaWxkcmVuKG1vZGVsMiwgY2hpbGQsIHBhcmVudCk7DQog
ICAgLQl3aGlsZSAodmFsaWQpIHsNCiAgICAtCQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtDQog
ICAgLQkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgY2hpbGQsIDYsICZtZW51LCAtMSk7DQog
ICAgLQ0KICAgIC0JCWlmIChtZW51ID09IHRvZmluZCkgew0KICAgIC0JCQltZW1jcHkoJmZvdW5k
LCBjaGlsZCwgc2l6ZW9mKEd0a1RyZWVJdGVyKSk7DQogICAgLQkJCXJldHVybiAmZm91bmQ7DQog
ICAgLQkJfQ0KICAgIC0NCiAgICAtCQlyZXQgPSBndGt0cmVlX2l0ZXJfZmluZF9ub2RlKGNoaWxk
LCB0b2ZpbmQpOw0KICAgIC0JCWlmIChyZXQpDQogICAgLQkJCXJldHVybiByZXQ7DQogICAgLQ0K
ICAgIC0JCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVsMiwgY2hpbGQpOw0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCXJldHVybiBOVUxMOw0KICAgIC19DQogICAgLQ0KICAgIC0N
CiAgICAtLyoNCiAgICAtICogVXBkYXRlIHRoZSB0cmVlIGJ5IGFkZGluZy9yZW1vdmluZyBlbnRy
aWVzDQogICAgLSAqIERvZXMgbm90IGNoYW5nZSBvdGhlciBub2Rlcw0KICAgIC0gKi8NCiAgICAt
c3RhdGljIHZvaWQgdXBkYXRlX3RyZWUoc3RydWN0IG1lbnUgKnNyYywgR3RrVHJlZUl0ZXIgKiBk
c3QpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51ICpjaGlsZDE7DQogICAgLQlHdGtUcmVlSXRl
ciBpdGVyLCB0bXA7DQogICAgLQlHdGtUcmVlSXRlciAqY2hpbGQyID0gJml0ZXI7DQogICAgLQln
Ym9vbGVhbiB2YWxpZDsNCiAgICAtCUd0a1RyZWVJdGVyICpzaWJsaW5nOw0KICAgIC0Jc3RydWN0
IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IG1lbnUgKm1lbnUxLCAqbWVudTI7DQogICAgLQ0K
ICAgIC0JaWYgKHNyYyA9PSAmcm9vdG1lbnUpDQogICAgLQkJaW5kZW50ID0gMTsNCiAgICAtDQog
ICAgLQl2YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfY2hpbGRyZW4obW9kZWwyLCBjaGlsZDIs
IGRzdCk7DQogICAgLQlmb3IgKGNoaWxkMSA9IHNyYy0+bGlzdDsgY2hpbGQxOyBjaGlsZDEgPSBj
aGlsZDEtPm5leHQpIHsNCiAgICAtDQogICAgLQkJc3ltID0gY2hpbGQxLT5zeW07DQogICAgLQ0K
ICAgIC0JICAgICAgcmVwYXJzZToNCiAgICAtCQltZW51MSA9IGNoaWxkMTsNCiAgICAtCQlpZiAo
dmFsaWQpDQogICAgLQkJCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsIGNoaWxkMiwgQ09MX01F
TlUsDQogICAgLQkJCQkJICAgJm1lbnUyLCAtMSk7DQogICAgLQkJZWxzZQ0KICAgIC0JCQltZW51
MiA9IE5VTEw7CS8vIGZvcmNlIGFkZGluZyBvZiBhIGZpcnN0IGNoaWxkDQogICAgLQ0KICAgIC0j
aWZkZWYgREVCVUcNCiAgICAtCQlwcmludGYoIiUqYyVzIHwgJXNcbiIsIGluZGVudCwgJyAnLA0K
ICAgIC0JCSAgICAgICBtZW51MSA/IG1lbnVfZ2V0X3Byb21wdChtZW51MSkgOiAibmlsIiwNCiAg
ICAtCQkgICAgICAgbWVudTIgPyBtZW51X2dldF9wcm9tcHQobWVudTIpIDogIm5pbCIpOw0KICAg
IC0jZW5kaWYNCiAgICAtDQogICAgLQkJaWYgKChvcHRfbW9kZSA9PSBPUFRfTk9STUFMICYmICFt
ZW51X2lzX3Zpc2libGUoY2hpbGQxKSkgfHwNCiAgICAtCQkgICAgKG9wdF9tb2RlID09IE9QVF9Q
Uk9NUFQgJiYgIW1lbnVfaGFzX3Byb21wdChjaGlsZDEpKSB8fA0KICAgIC0JCSAgICAob3B0X21v
ZGUgPT0gT1BUX0FMTCAgICAmJiAhbWVudV9nZXRfcHJvbXB0KGNoaWxkMSkpKSB7DQogICAgLQ0K
ICAgIC0JCQkvKiByZW1vdmUgbm9kZSAqLw0KICAgIC0JCQlpZiAoZ3RrdHJlZV9pdGVyX2ZpbmRf
bm9kZShkc3QsIG1lbnUxKSAhPSBOVUxMKSB7DQogICAgLQkJCQltZW1jcHkoJnRtcCwgY2hpbGQy
LCBzaXplb2YoR3RrVHJlZUl0ZXIpKTsNCiAgICAtCQkJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxf
aXRlcl9uZXh0KG1vZGVsMiwNCiAgICAtCQkJCQkJCQkgY2hpbGQyKTsNCiAgICAtCQkJCWd0a190
cmVlX3N0b3JlX3JlbW92ZSh0cmVlMiwgJnRtcCk7DQogICAgLQkJCQlpZiAoIXZhbGlkKQ0KICAg
IC0JCQkJCXJldHVybjsJCS8qIG5leHQgcGFyZW50ICovDQogICAgLQkJCQllbHNlDQogICAgLQkJ
CQkJZ290byByZXBhcnNlOwkvKiBuZXh0IGNoaWxkICovDQogICAgLQkJCX0gZWxzZQ0KICAgIC0J
CQkJY29udGludWU7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpZiAobWVudTEgIT0gbWVudTIp
IHsNCiAgICAtCQkJaWYgKGd0a3RyZWVfaXRlcl9maW5kX25vZGUoZHN0LCBtZW51MSkgPT0gTlVM
TCkgewkvLyBhZGQgbm9kZQ0KICAgIC0JCQkJaWYgKCF2YWxpZCAmJiAhbWVudTIpDQogICAgLQkJ
CQkJc2libGluZyA9IE5VTEw7DQogICAgLQkJCQllbHNlDQogICAgLQkJCQkJc2libGluZyA9IGNo
aWxkMjsNCiAgICAtCQkJCWd0a190cmVlX3N0b3JlX2luc2VydF9iZWZvcmUodHJlZTIsDQogICAg
LQkJCQkJCQkgICAgIGNoaWxkMiwNCiAgICAtCQkJCQkJCSAgICAgZHN0LCBzaWJsaW5nKTsNCiAg
ICAtCQkJCXNldF9ub2RlKGNoaWxkMiwgbWVudTEsIGZpbGxfcm93KG1lbnUxKSk7DQogICAgLQkJ
CQlpZiAobWVudTIgPT0gTlVMTCkNCiAgICAtCQkJCQl2YWxpZCA9IFRSVUU7DQogICAgLQkJCX0g
ZWxzZSB7CS8vIHJlbW92ZSBub2RlDQogICAgLQkJCQltZW1jcHkoJnRtcCwgY2hpbGQyLCBzaXpl
b2YoR3RrVHJlZUl0ZXIpKTsNCiAgICAtCQkJCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9u
ZXh0KG1vZGVsMiwNCiAgICAtCQkJCQkJCQkgY2hpbGQyKTsNCiAgICAtCQkJCWd0a190cmVlX3N0
b3JlX3JlbW92ZSh0cmVlMiwgJnRtcCk7DQogICAgLQkJCQlpZiAoIXZhbGlkKQ0KICAgIC0JCQkJ
CXJldHVybjsJLy8gbmV4dCBwYXJlbnQNCiAgICAtCQkJCWVsc2UNCiAgICAtCQkJCQlnb3RvIHJl
cGFyc2U7CS8vIG5leHQgY2hpbGQNCiAgICAtCQkJfQ0KICAgIC0JCX0gZWxzZSBpZiAoc3ltICYm
IChzeW0tPmZsYWdzICYgU1lNQk9MX0NIQU5HRUQpKSB7DQogICAgLQkJCXNldF9ub2RlKGNoaWxk
MiwgbWVudTEsIGZpbGxfcm93KG1lbnUxKSk7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpbmRl
bnQrKzsNCiAgICAtCQl1cGRhdGVfdHJlZShjaGlsZDEsIGNoaWxkMik7DQogICAgLQkJaW5kZW50
LS07DQogICAgLQ0KICAgIC0JCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9uZXh0KG1vZGVs
MiwgY2hpbGQyKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qIERpc3Bs
YXkgdGhlIHdob2xlIHRyZWUgKHNpbmdsZS9zcGxpdC9mdWxsIHZpZXcpICovDQogICAgLXN0YXRp
YyB2b2lkIGRpc3BsYXlfdHJlZShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3Ry
dWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3Ry
dWN0IG1lbnUgKmNoaWxkOw0KICAgIC0JZW51bSBwcm9wX3R5cGUgcHR5cGU7DQogICAgLQ0KICAg
IC0JaWYgKG1lbnUgPT0gJnJvb3RtZW51KSB7DQogICAgLQkJaW5kZW50ID0gMTsNCiAgICAtCQlj
dXJyZW50ID0gJnJvb3RtZW51Ow0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWZvciAoY2hpbGQgPSBt
ZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgIC0JCXByb3AgPSBj
aGlsZC0+cHJvbXB0Ow0KICAgIC0JCXN5bSA9IGNoaWxkLT5zeW07DQogICAgLQkJcHR5cGUgPSBw
cm9wID8gcHJvcC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICAtDQogICAgLQkJaWYgKHN5bSkNCiAg
ICAtCQkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX0NIQU5HRUQ7DQogICAgLQ0KICAgIC0JCWlmICgo
dmlld19tb2RlID09IFNQTElUX1ZJRVcpDQogICAgLQkJICAgICYmICEoY2hpbGQtPmZsYWdzICYg
TUVOVV9ST09UKSAmJiAodHJlZSA9PSB0cmVlMSkpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0N
CiAgICAtCQlpZiAoKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSAmJiAoY2hpbGQtPmZsYWdzICYg
TUVOVV9ST09UKQ0KICAgIC0JCSAgICAmJiAodHJlZSA9PSB0cmVlMikpDQogICAgLQkJCWNvbnRp
bnVlOw0KICAgIC0NCiAgICAtCQlpZiAoKG9wdF9tb2RlID09IE9QVF9OT1JNQUwgJiYgbWVudV9p
c192aXNpYmxlKGNoaWxkKSkgfHwNCiAgICAtCQkgICAgKG9wdF9tb2RlID09IE9QVF9QUk9NUFQg
JiYgbWVudV9oYXNfcHJvbXB0KGNoaWxkKSkgfHwNCiAgICAtCQkgICAgKG9wdF9tb2RlID09IE9Q
VF9BTEwgICAgJiYgbWVudV9nZXRfcHJvbXB0KGNoaWxkKSkpDQogICAgLQkJCXBsYWNlX25vZGUo
Y2hpbGQsIGZpbGxfcm93KGNoaWxkKSk7DQogICAgLSNpZmRlZiBERUJVRw0KICAgIC0JCXByaW50
ZigiJSpjJXM6ICIsIGluZGVudCwgJyAnLCBtZW51X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAgICAt
CQlwcmludGYoIiVzIiwgY2hpbGQtPmZsYWdzICYgTUVOVV9ST09UID8gInJvb3RtZW51IHwgIiA6
ICIiKTsNCiAgICAtCQlwcmludGYoIiVzIiwgcHJvcF9nZXRfdHlwZV9uYW1lKHB0eXBlKSk7DQog
ICAgLQkJcHJpbnRmKCIgfCAiKTsNCiAgICAtCQlpZiAoc3ltKSB7DQogICAgLQkJCXByaW50Zigi
JXMiLCBzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOw0KICAgIC0JCQlwcmludGYoIiB8ICIpOw0K
ICAgIC0JCQlwcmludGYoIiVzIiwgZGJnX3N5bV9mbGFncyhzeW0tPmZsYWdzKSk7DQogICAgLQkJ
CXByaW50ZigiXG4iKTsNCiAgICAtCQl9IGVsc2UNCiAgICAtCQkJcHJpbnRmKCJcbiIpOw0KICAg
IC0jZW5kaWYNCiAgICAtCQlpZiAoKHZpZXdfbW9kZSAhPSBGVUxMX1ZJRVcpICYmIChwdHlwZSA9
PSBQX01FTlUpDQogICAgLQkJICAgICYmICh0cmVlID09IHRyZWUyKSkNCiAgICAtCQkJY29udGlu
dWU7DQogICAgLS8qDQogICAgLQkJaWYgKCgobWVudSAhPSAmcm9vdG1lbnUpICYmICEobWVudS0+
ZmxhZ3MgJiBNRU5VX1JPT1QpKQ0KICAgIC0JCSAgICB8fCAodmlld19tb2RlID09IEZVTExfVklF
VykNCiAgICAtCQkgICAgfHwgKHZpZXdfbW9kZSA9PSBTUExJVF9WSUVXKSkqLw0KICAgIC0NCiAg
ICAtCQkvKiBDaGFuZ2UgcGFuZWQgcG9zaXRpb24gaWYgdGhlIHZpZXcgaXMgbm90IGluICdzcGxp
dCBtb2RlJyAqLw0KICAgIC0JCWlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcgfHwgdmlld19t
b2RlID09IEZVTExfVklFVykgew0KICAgIC0JCQlndGtfcGFuZWRfc2V0X3Bvc2l0aW9uKEdUS19Q
QU5FRChocGFuZWQpLCAwKTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCWlmICgoKHZpZXdfbW9k
ZSA9PSBTSU5HTEVfVklFVykgJiYgKG1lbnUtPmZsYWdzICYgTUVOVV9ST09UKSkNCiAgICAtCQkg
ICAgfHwgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcpDQogICAgLQkJICAgIHx8ICh2aWV3X21vZGUg
PT0gU1BMSVRfVklFVykpIHsNCiAgICAtCQkJaW5kZW50Kys7DQogICAgLQkJCWRpc3BsYXlfdHJl
ZShjaGlsZCk7DQogICAgLQkJCWluZGVudC0tOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0K
ICAgIC0NCiAgICAtLyogRGlzcGxheSBhIHBhcnQgb2YgdGhlIHRyZWUgc3RhcnRpbmcgYXQgY3Vy
cmVudCBub2RlIChzaW5nbGUvc3BsaXQgdmlldykgKi8NCiAgICAtc3RhdGljIHZvaWQgZGlzcGxh
eV90cmVlX3BhcnQodm9pZCkNCiAgICAtew0KICAgIC0JaWYgKHRyZWUyKQ0KICAgIC0JCWd0a190
cmVlX3N0b3JlX2NsZWFyKHRyZWUyKTsNCiAgICAtCWlmICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJ
RVcpDQogICAgLQkJZGlzcGxheV90cmVlKGN1cnJlbnQpOw0KICAgIC0JZWxzZSBpZiAodmlld19t
b2RlID09IFNQTElUX1ZJRVcpDQogICAgLQkJZGlzcGxheV90cmVlKGJyb3dzZWQpOw0KICAgIC0J
Z3RrX3RyZWVfdmlld19leHBhbmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTJfdykpOw0KICAgIC19
DQogICAgLQ0KICAgIC0vKiBEaXNwbGF5IHRoZSBsaXN0IGluIHRoZSBsZWZ0IGZyYW1lIChzcGxp
dCB2aWV3KSAqLw0KICAgIC1zdGF0aWMgdm9pZCBkaXNwbGF5X2xpc3Qodm9pZCkNCiAgICAtew0K
ICAgIC0JaWYgKHRyZWUxKQ0KICAgIC0JCWd0a190cmVlX3N0b3JlX2NsZWFyKHRyZWUxKTsNCiAg
ICAtDQogICAgLQl0cmVlID0gdHJlZTE7DQogICAgLQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsN
CiAgICAtCWd0a190cmVlX3ZpZXdfZXhwYW5kX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUxX3cpKTsN
CiAgICAtCXRyZWUgPSB0cmVlMjsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgZml4
dXBfcm9vdG1lbnUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51
ICpjaGlsZDsNCiAgICAtCXN0YXRpYyBpbnQgbWVudV9jbnQgPSAwOw0KICAgIC0NCiAgICAtCW1l
bnUtPmZsYWdzIHw9IE1FTlVfUk9PVDsNCiAgICAtCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgIC0JCWlmIChjaGlsZC0+cHJvbXB0ICYm
IGNoaWxkLT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7DQogICAgLQkJCW1lbnVfY250Kys7DQog
ICAgLQkJCWZpeHVwX3Jvb3RtZW51KGNoaWxkKTsNCiAgICAtCQkJbWVudV9jbnQtLTsNCiAgICAt
CQl9IGVsc2UgaWYgKCFtZW51X2NudCkNCiAgICAtCQkJZml4dXBfcm9vdG1lbnUoY2hpbGQpOw0K
ICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtLyogTWFpbiAqLw0KICAgIC1pbnQg
bWFpbihpbnQgYWMsIGNoYXIgKmF2W10pDQogICAgLXsNCiAgICAtCWNvbnN0IGNoYXIgKm5hbWU7
DQogICAgLQljaGFyICplbnY7DQogICAgLQlnY2hhciAqZ2xhZGVfZmlsZTsNCiAgICAtDQogICAg
LQkvKiBHVEsgc3R1ZmZzICovDQogICAgLQlndGtfc2V0X2xvY2FsZSgpOw0KICAgIC0JZ3RrX2lu
aXQoJmFjLCAmYXYpOw0KICAgIC0JZ2xhZGVfaW5pdCgpOw0KICAgIC0NCiAgICAtCS8vYWRkX3Bp
eG1hcF9kaXJlY3RvcnkgKFBBQ0tBR0VfREFUQV9ESVIgIi8iIFBBQ0tBR0UgIi9waXhtYXBzIik7
DQogICAgLQkvL2FkZF9waXhtYXBfZGlyZWN0b3J5IChQQUNLQUdFX1NPVVJDRV9ESVIgIi9waXht
YXBzIik7DQogICAgLQ0KICAgIC0JLyogRGV0ZXJtaW5lIEdVSSBwYXRoICovDQogICAgLQllbnYg
PSBnZXRlbnYoU1JDVFJFRSk7DQogICAgLQlpZiAoZW52KQ0KICAgIC0JCWdsYWRlX2ZpbGUgPSBn
X3N0cmNvbmNhdChlbnYsICIvc2NyaXB0cy9rY29uZmlnL2djb25mLmdsYWRlIiwgTlVMTCk7DQog
ICAgLQllbHNlIGlmIChhdlswXVswXSA9PSAnLycpDQogICAgLQkJZ2xhZGVfZmlsZSA9IGdfc3Ry
Y29uY2F0KGF2WzBdLCAiLmdsYWRlIiwgTlVMTCk7DQogICAgLQllbHNlDQogICAgLQkJZ2xhZGVf
ZmlsZSA9IGdfc3RyY29uY2F0KGdfZ2V0X2N1cnJlbnRfZGlyKCksICIvIiwgYXZbMF0sICIuZ2xh
ZGUiLCBOVUxMKTsNCiAgICAtDQogICAgLQkvKiBDb25mIHN0dWZmcyAqLw0KICAgIC0JaWYgKGFj
ID4gMSAmJiBhdlsxXVswXSA9PSAnLScpIHsNCiAgICAtCQlzd2l0Y2ggKGF2WzFdWzFdKSB7DQog
ICAgLQkJY2FzZSAnYSc6DQogICAgLQkJCS8vc2hvd0FsbCA9IDE7DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCWNhc2UgJ3MnOg0KICAgIC0JCQljb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKE5VTEwp
Ow0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICdoJzoNCiAgICAtCQljYXNlICc/JzoNCiAg
ICAtCQkJcHJpbnRmKCIlcyBbLXNdIDxjb25maWc+XG4iLCBhdlswXSk7DQogICAgLQkJCWV4aXQo
MCk7DQogICAgLQkJfQ0KICAgIC0JCW5hbWUgPSBhdlsyXTsNCiAgICAtCX0gZWxzZQ0KICAgIC0J
CW5hbWUgPSBhdlsxXTsNCiAgICAtDQogICAgLQljb25mX3BhcnNlKG5hbWUpOw0KICAgIC0JZml4
dXBfcm9vdG1lbnUoJnJvb3RtZW51KTsNCiAgICAtCWNvbmZfcmVhZChOVUxMKTsNCiAgICAtDQog
ICAgLQkvKiBMb2FkIHRoZSBpbnRlcmZhY2UgYW5kIGNvbm5lY3Qgc2lnbmFscyAqLw0KICAgIC0J
aW5pdF9tYWluX3dpbmRvdyhnbGFkZV9maWxlKTsNCiAgICAtCWluaXRfdHJlZV9tb2RlbCgpOw0K
ICAgIC0JaW5pdF9sZWZ0X3RyZWUoKTsNCiAgICAtCWluaXRfcmlnaHRfdHJlZSgpOw0KICAgIC0N
CiAgICAtCXN3aXRjaCAodmlld19tb2RlKSB7DQogICAgLQljYXNlIFNJTkdMRV9WSUVXOg0KICAg
IC0JCWRpc3BsYXlfdHJlZV9wYXJ0KCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNQTElU
X1ZJRVc6DQogICAgLQkJZGlzcGxheV9saXN0KCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNl
IEZVTExfVklFVzoNCiAgICAtCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsNCiAgICAtCQlicmVh
azsNCiAgICAtCX0NCiAgICAtDQogICAgLQlndGtfbWFpbigpOw0KICAgIC0NCiAgICAtCXJldHVy
biAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX2NoYW5nZWQodm9pZCkN
CiAgICAtew0KICAgIC0JYm9vbCBjaGFuZ2VkID0gY29uZl9nZXRfY2hhbmdlZCgpOw0KICAgIC0J
Z3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHNhdmVfYnRuLCBjaGFuZ2VkKTsNCiAgICAtCWd0a193
aWRnZXRfc2V0X3NlbnNpdGl2ZShzYXZlX21lbnVfaXRlbSwgY2hhbmdlZCk7DQogICAgLX0NCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwM2U5N2Q3Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9n
Y29uZi5nbGFkZQ0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw2NjEgKzAsMCBAQA0KICAg
IC08P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+IDwhLS0qLSBtb2RlOiB4bWwg
LSotLT4NCiAgICAtDQogICAgLTxnbGFkZS1pbnRlcmZhY2U+DQogICAgLQ0KICAgIC08d2lkZ2V0
IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cxIj4NCiAgICAtICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLSAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0
cmFuc2xhdGFibGU9InllcyI+R3RrIFVuaWtyYWZ0IENvbmZpZ3VyYXRvcjwvcHJvcGVydHk+DQog
ICAgLSAgPHByb3BlcnR5IG5hbWU9InR5cGUiPkdUS19XSU5ET1dfVE9QTEVWRUw8L3Byb3BlcnR5
Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdUS19XSU5fUE9TX05P
TkU8L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+RmFsc2U8L3Byb3Bl
cnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0X3dpZHRoIj42NDA8L3Byb3BlcnR5
Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJkZWZhdWx0X2hlaWdodCI+NDgwPC9wcm9wZXJ0eT4N
CiAgICAtICA8cHJvcGVydHkgbmFtZT0icmVzaXphYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
ICA8cHJvcGVydHkgbmFtZT0iZGVzdHJveV93aXRoX3BhcmVudCI+RmFsc2U8L3Byb3BlcnR5Pg0K
ICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJkZWNvcmF0ZWQiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0g
IDxwcm9wZXJ0eSBuYW1lPSJza2lwX3Rhc2tiYXJfaGludCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAg
IC0gIDxwcm9wZXJ0eSBuYW1lPSJza2lwX3BhZ2VyX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAg
ICAtICA8cHJvcGVydHkgbmFtZT0idHlwZV9oaW50Ij5HREtfV0lORE9XX1RZUEVfSElOVF9OT1JN
QUw8L3Byb3BlcnR5Pg0KICAgIC0gIDxwcm9wZXJ0eSBuYW1lPSJncmF2aXR5Ij5HREtfR1JBVklU
WV9OT1JUSF9XRVNUPC9wcm9wZXJ0eT4NCiAgICAtICA8c2lnbmFsIG5hbWU9ImRlc3Ryb3kiIGhh
bmRsZXI9Im9uX3dpbmRvdzFfZGVzdHJveSIgb2JqZWN0PSJ3aW5kb3cxIi8+DQogICAgLSAgPHNp
Z25hbCBuYW1lPSJzaXplX3JlcXVlc3QiIGhhbmRsZXI9Im9uX3dpbmRvdzFfc2l6ZV9yZXF1ZXN0
IiBvYmplY3Q9InZwYW5lZDEiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZyaSwgMTEgSmFuIDIw
MDIgMTY6MTc6MTEgR01UIi8+DQogICAgLSAgPHNpZ25hbCBuYW1lPSJkZWxldGVfZXZlbnQiIGhh
bmRsZXI9Im9uX3dpbmRvdzFfZGVsZXRlX2V2ZW50IiBvYmplY3Q9IndpbmRvdzEiIGxhc3RfbW9k
aWZpY2F0aW9uX3RpbWU9IlN1biwgMDkgTWFyIDIwMDMgMTk6NDI6NDYgR01UIi8+DQogICAgLQ0K
ICAgIC0gIDxjaGlsZD4NCiAgICAtICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZCb3giIGlkPSJ2Ym94
MSI+DQogICAgLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtICAgICAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxzZTwvcHJvcGVydHk+
DQogICAgLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzcGFjaW5nIj4wPC9wcm9wZXJ0eT4NCiAgICAt
DQogICAgLSAgICAgIDxjaGlsZD4NCiAgICAtCTx3aWRnZXQgY2xhc3M9Ikd0a01lbnVCYXIiIGlk
PSJtZW51YmFyMSI+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICAtDQogICAgLQkgIDxjaGlsZD4NCiAgICAtCSAgICA8d2lkZ2V0IGNsYXNzPSJH
dGtNZW51SXRlbSIgaWQ9ImZpbGUxIj4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIg
dHJhbnNsYXRhYmxlPSJ5ZXMiPl9GaWxlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtDQogICAgLQkgICAg
ICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0iR3RrTWVudSIgaWQ9ImZpbGUxX21lbnUi
Pg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3Rr
SW1hZ2VNZW51SXRlbSIgaWQ9ImxvYWQxIj4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InRv
b2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2FkIGEgY29uZmlnIGZpbGU8L3Byb3BlcnR5Pg0K
ICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9M
b2FkPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGlu
ZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIg
aGFuZGxlcj0ib25fbG9hZDFfYWN0aXZhdGUiLz4NCiAgICAtCQkgICAgICA8YWNjZWxlcmF0b3Ig
a2V5PSJMIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0siIHNpZ25hbD0iYWN0aXZhdGUiLz4N
CiAgICAtDQogICAgLQkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+DQogICAg
LQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2UzOSI+DQogICAgLQkJCSAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0
eSBuYW1lPSJzdG9jayI+Z3RrLW9wZW48L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBu
YW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4
YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+
MC41PC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVy
dHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5Pg0KICAgIC0J
CQk8L3dpZGdldD4NCiAgICAtCQkgICAgICA8L2NoaWxkPg0KICAgIC0JCSAgICA8L3dpZGdldD4N
CiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8
d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0ic2F2ZTEiPg0KICAgIC0JCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8
cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgdGhlIGNvbmZp
ZyBpbiAuY29uZmlnPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFi
ZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fU2F2ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAg
IDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NhdmVfYWN0aXZhdGUiLz4NCiAg
ICAtCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJTIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01B
U0siIHNpZ25hbD0iYWN0aXZhdGUiLz4NCiAgICAtDQogICAgLQkJICAgICAgPGNoaWxkIGludGVy
bmFsLWNoaWxkPSJpbWFnZSI+DQogICAgLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0i
aW1hZ2U0MCI+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXNhdmU8L3Byb3BlcnR5
Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5Pg0KICAg
IC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgLQkJCSAg
PHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVy
dHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Inlw
YWQiPjA8L3Byb3BlcnR5Pg0KICAgIC0JCQk8L3dpZGdldD4NCiAgICAtCQkgICAgICA8L2NoaWxk
Pg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0J
CSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBp
ZD0ic2F2ZV9hczEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPlNhdmUgdGhlIGNvbmZpZyBpbiBhIGZpbGU8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgX2Fz
PC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFu
ZGxlcj0ib25fc2F2ZV9hczFfYWN0aXZhdGUiLz4NCiAgICAtDQogICAgLQkJICAgICAgPGNoaWxk
IGludGVybmFsLWNoaWxkPSJpbWFnZSI+DQogICAgLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdl
IiBpZD0iaW1hZ2U0MSI+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXNhdmUtYXM8
L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3Bl
cnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+DQog
ICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICAtCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5
IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5Pg0KICAgIC0JCQk8L3dpZGdldD4NCiAgICAtCQkgICAg
ICA8L2NoaWxkPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAg
LQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTZXBhcmF0
b3JNZW51SXRlbSIgaWQ9InNlcGFyYXRvcjEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgPC93aWRnZXQ+DQogICAgLQkJ
ICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBj
bGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9InF1aXQxIj4NCiAgICAtCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5
IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X1F1aXQ8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICAtCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9xdWl0MV9hY3Rp
dmF0ZSIvPg0KICAgIC0JCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9IlEiIG1vZGlmaWVycz0iR0RL
X0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPg0KICAgIC0NCiAgICAtCQkgICAgICA8
Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4NCiAgICAtCQkJPHdpZGdldCBjbGFzcz0iR3Rr
SW1hZ2UiIGlkPSJpbWFnZTQyIj4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrIj5ndGstcXVp
dDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJv
cGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4N
CiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgIC0J
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVy
dHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCTwvd2lkZ2V0Pg0KICAgIC0JCSAg
ICAgIDwvY2hpbGQ+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAgPC9jaGlsZD4NCiAg
ICAtCQk8L3dpZGdldD4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQkgICAgPC93aWRnZXQ+
DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICA8Y2hpbGQ+DQogICAgLQkgICAgPHdp
ZGdldCBjbGFzcz0iR3RrTWVudUl0ZW0iIGlkPSJvcHRpb25zMSI+DQogICAgLQkgICAgICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkgICAgICA8cHJvcGVy
dHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fT3B0aW9uczwvcHJvcGVydHk+DQog
ICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgLQ0KICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a01l
bnUiIGlkPSJvcHRpb25zMV9tZW51Ij4NCiAgICAtDQogICAgLQkJICA8Y2hpbGQ+DQogICAgLQkJ
ICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0NoZWNrTWVudUl0ZW0iIGlkPSJzaG93X25hbWUxIj4NCiAg
ICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAg
LQkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93
IG5hbWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJh
bnNsYXRhYmxlPSJ5ZXMiPlNob3cgX25hbWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8
cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNp
Z25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2hvd19uYW1lMV9hY3RpdmF0ZSIvPg0K
ICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JCSAg
PGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtDaGVja01lbnVJdGVtIiBpZD0i
c2hvd19yYW5nZTEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNs
YXRhYmxlPSJ5ZXMiPlNob3cgcmFuZ2UgKFkvTS9OKTwvcHJvcGVydHk+DQogICAgLQkJICAgICAg
PHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBfcmFuZ2U8L3By
b3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0iYWN0aXZlIj5GYWxzZTwv
cHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0i
b25fc2hvd19yYW5nZTFfYWN0aXZhdGUiLz4NCiAgICAtCQkgICAgPC93aWRnZXQ+DQogICAgLQkJ
ICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBj
bGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIgaWQ9InNob3dfZGF0YTEiPg0KICAgIC0JCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJv
cGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgdmFsdWUgb2YgdGhl
IG9wdGlvbjwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0
cmFuc2xhdGFibGU9InllcyI+U2hvdyBfZGF0YTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8
c2lnbmFsIG5hbWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zaG93X2RhdGExX2FjdGl2YXRlIi8+
DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAgPC9jaGlsZD4NCiAgICAtDQogICAgLQkJ
ICA8Y2hpbGQ+DQogICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1NlcGFyYXRvck1lbnVJdGVt
IiBpZD0ic2VwYXJhdG9yMiI+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+
DQogICAgLQ0KICAgIC0JCSAgPGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtS
YWRpb01lbnVJdGVtIiBpZD0ic2V0X29wdGlvbl9tb2RlMSI+DQogICAgLQkJICAgICAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0
eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBub3JtYWwgb3B0aW9uczwv
cHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFi
bGU9InllcyI+U2hvdyBub3JtYWwgb3B0aW9uczwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHBy
b3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxz
aWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NldF9vcHRpb25fbW9kZTFfYWN0aXZh
dGUiLz4NCiAgICAtCQkgICAgPC93aWRnZXQ+DQogICAgLQkJICA8L2NoaWxkPg0KICAgIC0NCiAg
ICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9NZW51SXRl
bSIgaWQ9InNldF9vcHRpb25fbW9kZTIiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9v
bHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgYWxsIG9wdGlvbnM8L3Byb3BlcnR5Pg0KICAg
IC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cg
YWxsIF9vcHRpb25zPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNl
X3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9
ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJn
cm91cCI+c2V0X29wdGlvbl9tb2RlMTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBu
YW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2V0X29wdGlvbl9tb2RlMl9hY3RpdmF0ZSIvPg0K
ICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JCSAg
PGNoaWxkPg0KICAgIC0JCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtSYWRpb01lbnVJdGVtIiBpZD0i
c2V0X29wdGlvbl9tb2RlMyI+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0
cmFuc2xhdGFibGU9InllcyI+U2hvdyBhbGwgb3B0aW9ucyB3aXRoIHByb21wdHM8L3Byb3BlcnR5
Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
PlNob3cgYWxsIHByb21wdCBvcHRpb25zPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHBy
b3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJncm91cCI+c2V0X29wdGlvbl9tb2RlMTwvcHJvcGVydHk+DQogICAgLQkJICAg
ICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2V0X29wdGlvbl9tb2RlM19h
Y3RpdmF0ZSIvPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAg
LQ0KICAgIC0JCTwvd2lkZ2V0Pg0KICAgIC0JICAgICAgPC9jaGlsZD4NCiAgICAtCSAgICA8L3dp
ZGdldD4NCiAgICAtCSAgPC9jaGlsZD4NCiAgICAtDQogICAgLQkgIDxjaGlsZD4NCiAgICAtCSAg
ICA8d2lkZ2V0IGNsYXNzPSJHdGtNZW51SXRlbSIgaWQ9ImhlbHAxIj4NCiAgICAtCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9IZWxwPC9wcm9wZXJ0eT4NCiAg
ICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtDQogICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0iR3RrTWVu
dSIgaWQ9ImhlbHAxX21lbnUiPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAg
PHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9ImludHJvZHVjdGlvbjEiPg0KICAg
IC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAt
CQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fSW50cm9k
dWN0aW9uPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVy
bGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0
ZSIgaGFuZGxlcj0ib25faW50cm9kdWN0aW9uMV9hY3RpdmF0ZSIgbGFzdF9tb2RpZmljYXRpb25f
dGltZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBHTVQiLz4NCiAgICAtCQkgICAgICA8YWNj
ZWxlcmF0b3Iga2V5PSJJIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01BU0siIHNpZ25hbD0iYWN0
aXZhdGUiLz4NCiAgICAtDQogICAgLQkJICAgICAgPGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFn
ZSI+DQogICAgLQkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0iaW1hZ2U0MyI+DQogICAg
LQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCQkg
IDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLWRpYWxvZy1xdWVzdGlvbjwvcHJvcGVydHk+DQog
ICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+DQogICAgLQkJ
CSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJv
cGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+
MDwvcHJvcGVydHk+DQogICAgLQkJCTwvd2lkZ2V0Pg0KICAgIC0JCSAgICAgIDwvY2hpbGQ+DQog
ICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAgPC9jaGlsZD4NCiAgICAtDQogICAgLQkJICA8
Y2hpbGQ+DQogICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJh
Ym91dDEiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0i
eWVzIj5fQWJvdXQ8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vf
dW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8c2lnbmFsIG5hbWU9ImFj
dGl2YXRlIiBoYW5kbGVyPSJvbl9hYm91dDFfYWN0aXZhdGUiIGxhc3RfbW9kaWZpY2F0aW9uX3Rp
bWU9IkZyaSwgMTUgTm92IDIwMDIgMjA6MjY6MzAgR01UIi8+DQogICAgLQkJICAgICAgPGFjY2Vs
ZXJhdG9yIGtleT0iQSIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2
YXRlIi8+DQogICAgLQ0KICAgIC0JCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2Ui
Pg0KICAgIC0JCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDQiPg0KICAgIC0J
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8
cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1wcm9wZXJ0aWVzPC9wcm9wZXJ0eT4NCiAgICAtCQkJ
ICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4NCiAgICAtCQkJICA8cHJv
cGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Inhw
YWQiPjA8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9w
ZXJ0eT4NCiAgICAtCQkJPC93aWRnZXQ+DQogICAgLQkJICAgICAgPC9jaGlsZD4NCiAgICAtCQkg
ICAgPC93aWRnZXQ+DQogICAgLQkJICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4N
CiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9ImxpY2Vuc2Ux
Ij4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+
X0xpY2Vuc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5k
ZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8c2lnbmFsIG5hbWU9ImFjdGl2
YXRlIiBoYW5kbGVyPSJvbl9saWNlbnNlMV9hY3RpdmF0ZSIgbGFzdF9tb2RpZmljYXRpb25fdGlt
ZT0iRnJpLCAxNSBOb3YgMjAwMiAyMDoyNjozMCBHTVQiLz4NCiAgICAtDQogICAgLQkJICAgICAg
PGNoaWxkIGludGVybmFsLWNoaWxkPSJpbWFnZSI+DQogICAgLQkJCTx3aWRnZXQgY2xhc3M9Ikd0
a0ltYWdlIiBpZD0iaW1hZ2U0NSI+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLWp1
c3RpZnktZmlsbDwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9Imljb25fc2l6
ZSI+MTwvcHJvcGVydHk+DQogICAgLQkJCSAgPHByb3BlcnR5IG5hbWU9InhhbGlnbiI+MC41PC9w
cm9wZXJ0eT4NCiAgICAtCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWduIj4wLjU8L3Byb3BlcnR5
Pg0KICAgIC0JCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICAtCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAgLQkJCTwvd2lkZ2V0Pg0K
ICAgIC0JCSAgICAgIDwvY2hpbGQ+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAgPC9j
aGlsZD4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQkgICAg
PC93aWRnZXQ+DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQk8L3dpZGdldD4NCiAgICAtCTxwYWNr
aW5nPg0KICAgIC0JICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+DQogICAg
LQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCSAgPHBy
b3BlcnR5IG5hbWU9ImZpbGwiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCTwvcGFja2luZz4NCiAg
ICAtICAgICAgPC9jaGlsZD4NCiAgICAtDQogICAgLSAgICAgIDxjaGlsZD4NCiAgICAtCTx3aWRn
ZXQgY2xhc3M9Ikd0a0hhbmRsZUJveCIgaWQ9ImhhbmRsZWJveDEiPg0KICAgIC0JICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1l
PSJzaGFkb3dfdHlwZSI+R1RLX1NIQURPV19PVVQ8L3Byb3BlcnR5Pg0KICAgIC0JICA8cHJvcGVy
dHkgbmFtZT0iaGFuZGxlX3Bvc2l0aW9uIj5HVEtfUE9TX0xFRlQ8L3Byb3BlcnR5Pg0KICAgIC0J
ICA8cHJvcGVydHkgbmFtZT0ic25hcF9lZGdlIj5HVEtfUE9TX1RPUDwvcHJvcGVydHk+DQogICAg
LQ0KICAgIC0JICA8Y2hpbGQ+DQogICAgLQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVG9vbGJhciIg
aWQ9InRvb2xiYXIxIj4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmllbnRhdGlvbiI+R1RL
X09SSUVOVEFUSU9OX0hPUklaT05UQUw8L3Byb3BlcnR5Pg0KICAgIC0JICAgICAgPHByb3BlcnR5
IG5hbWU9InRvb2xiYXJfc3R5bGUiPkdUS19UT09MQkFSX0JPVEg8L3Byb3BlcnR5Pg0KICAgIC0J
ICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXBzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJzaG93X2Fycm93Ij5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtDQog
ICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIg
aWQ9ImJ1dHRvbjEiPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3By
b3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0i
eWVzIj5Hb2VzIHVwIG9mIG9uZSBsZXZlbCAoc2luZ2xlIHZpZXcpPC9wcm9wZXJ0eT4NCiAgICAt
CQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkJhY2s8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstdW5kbzwvcHJvcGVy
dHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9w
cm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25f
YmFja19jbGlja2VkIi8+DQogICAgLQkJPC93aWRnZXQ+DQogICAgLQkJPHBhY2tpbmc+DQogICAg
LQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8
cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCTwvcGFj
a2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICAgICAgPGNoaWxkPg0K
ICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xJdGVtIiBpZD0idG9vbGl0ZW0xIj4NCiAgICAt
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3BlcnR5Pg0KICAg
IC0JCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAg
IC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlNlcGFy
YXRvciIgaWQ9InZzZXBhcmF0b3IxIj4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICAgIDwvd2lkZ2V0Pg0KICAgIC0JCSAgPC9j
aGlsZD4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCQk8cGFja2luZz4NCiAgICAtCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBu
YW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCTwvcGFja2luZz4NCiAg
ICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3
aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b24yIj4NCiAgICAtCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+TG9hZCBhIGNvbmZpZyBmaWxlPC9wcm9w
ZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMi
PkxvYWQ8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGst
b3BlbjwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9u
dGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3Zl
cnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBv
cnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIg
aGFuZGxlcj0ib25fbG9hZF9jbGlja2VkIi8+DQogICAgLQkJPC93aWRnZXQ+DQogICAgLQkJPHBh
Y2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+
DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCTwvcGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICAg
ICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0
b24zIj4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2F2
ZSBhIGNvbmZpZyBmaWxlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJl
bCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5
IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5
IG5hbWU9InN0b2NrX2lkIj5ndGstc2F2ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxw
cm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxz
aWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fc2F2ZV9hY3RpdmF0ZSIvPg0KICAgIC0J
CTwvd2lkZ2V0Pg0KICAgIC0JCTxwYWNraW5nPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImV4
cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5l
b3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8L2No
aWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lkZ2V0IGNsYXNzPSJH
dGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMiI+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9o
b3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJp
c19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtDQogICAgLQkJICA8Y2hpbGQ+DQog
ICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2c2VwYXJhdG9yMiI+
DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQkJPC93aWRnZXQ+
DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxz
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPkZhbHNl
PC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8L2NoaWxkPg0KICAg
IC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0
dG9uIiBpZD0iYnV0dG9uNCI+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRh
YmxlPSJ5ZXMiPlNpbmdsZSB2aWV3PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1l
PSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNpbmdsZTwvcHJvcGVydHk+DQogICAgLQkJICA8
cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8
cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1taXNzaW5nLWltYWdlPC9wcm9wZXJ0eT4NCiAg
ICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3Byb3BlcnR5
Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9zaW5nbGVf
Y2xpY2tlZCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODoz
OSBHTVQiLz4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCQk8cGFja2luZz4NCiAgICAtCQkgIDxw
cm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0
eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJPC9wYWNraW5nPg0K
ICAgIC0JICAgICAgPC9jaGlsZD4NCiAgICAtDQogICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJ
PHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1dHRvbjUiPg0KICAgIC0JCSAgPHBy
b3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5
IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TcGxpdCB2aWV3PC9wcm9wZXJ0eT4N
CiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNwbGl0
PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW1pc3Np
bmctaW1hZ2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9y
aXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJs
ZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaXNf
aW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8c2lnbmFsIG5hbWU9ImNsaWNr
ZWQiIGhhbmRsZXI9Im9uX3NwbGl0X2NsaWNrZWQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1
biwgMTIgSmFuIDIwMDMgMTQ6Mjg6NDUgR01UIi8+DQogICAgLQkJPC93aWRnZXQ+DQogICAgLQkJ
PHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVy
dHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5
Pg0KICAgIC0JCTwvcGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0J
ICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJi
dXR0b242Ij4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0
eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+
RnVsbCB2aWV3PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJh
bnNsYXRhYmxlPSJ5ZXMiPkZ1bGw8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9
InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9
InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkg
IDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkg
IDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fZnVsbF9jbGlja2VkIiBsYXN0X21v
ZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE0OjI4OjUwIEdNVCIvPg0KICAgIC0J
CTwvd2lkZ2V0Pg0KICAgIC0JCTxwYWNraW5nPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImV4
cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5l
b3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8L2No
aWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lkZ2V0IGNsYXNzPSJH
dGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMyI+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV9o
b3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNp
YmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJp
c19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtDQogICAgLQkJICA8Y2hpbGQ+DQog
ICAgLQkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2c2VwYXJhdG9yMyI+
DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkgIDwvY2hpbGQ+DQogICAgLQkJPC93aWRnZXQ+
DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxz
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPkZhbHNl
PC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8L2NoaWxkPg0KICAg
IC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0
dG9uIiBpZD0iYnV0dG9uNyI+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRh
YmxlPSJ5ZXMiPkNvbGxhcHNlIHRoZSB3aG9sZSB0cmVlIGluIHRoZSByaWdodCBmcmFtZTwvcHJv
cGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVz
Ij5Db2xsYXBzZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVy
bGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQi
Pmd0ay1yZW1vdmU8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVf
aG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlz
aWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0i
aXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8c2lnbmFsIG5hbWU9ImNs
aWNrZWQiIGhhbmRsZXI9Im9uX2NvbGxhcHNlX2NsaWNrZWQiLz4NCiAgICAtCQk8L3dpZGdldD4N
CiAgICAtCQk8cGFja2luZz4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNl
PC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwv
cHJvcGVydHk+DQogICAgLQkJPC9wYWNraW5nPg0KICAgIC0JICAgICAgPC9jaGlsZD4NCiAgICAt
DQogICAgLQkgICAgICA8Y2hpbGQ+DQogICAgLQkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRv
biIgaWQ9ImJ1dHRvbjgiPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJs
ZT0ieWVzIj5FeHBhbmQgdGhlIHdob2xlIHRyZWUgaW4gdGhlIHJpZ2h0IGZyYW1lPC9wcm9wZXJ0
eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkV4
cGFuZDwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1h
ZGQ8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRh
bCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0
aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0
YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgLQkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhh
bmRsZXI9Im9uX2V4cGFuZF9jbGlja2VkIi8+DQogICAgLQkJPC93aWRnZXQ+DQogICAgLQkJPHBh
Y2tpbmc+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+
DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgIC0JCTwvcGFja2luZz4NCiAgICAtCSAgICAgIDwvY2hpbGQ+DQogICAgLQkgICAgPC93aWRn
ZXQ+DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQk8L3dpZGdldD4NCiAgICAtCTxwYWNraW5nPg0K
ICAgIC0JICA8cHJvcGVydHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+DQogICAgLQkgIDxw
cm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCSAgPHByb3BlcnR5
IG5hbWU9ImZpbGwiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCTwvcGFja2luZz4NCiAgICAtICAg
ICAgPC9jaGlsZD4NCiAgICAtDQogICAgLSAgICAgIDxjaGlsZD4NCiAgICAtCTx3aWRnZXQgY2xh
c3M9Ikd0a0hQYW5lZCIgaWQ9ImhwYW5lZDEiPg0KICAgIC0JICA8cHJvcGVydHkgbmFtZT0id2lk
dGhfcmVxdWVzdCI+MTwvcHJvcGVydHk+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxl
Ij5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MDwvcHJvcGVy
dHk+DQogICAgLQ0KICAgIC0JICA8Y2hpbGQ+DQogICAgLQkgICAgPHdpZGdldCBjbGFzcz0iR3Rr
U2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzEiPg0KICAgIC0JICAgICAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JICAgICAgPHByb3BlcnR5
IG5hbWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+
DQogICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0idnNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJ
Q1lfQVVUT01BVElDPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaGFk
b3dfdHlwZSI+R1RLX1NIQURPV19JTjwvcHJvcGVydHk+DQogICAgLQkgICAgICA8cHJvcGVydHkg
bmFtZT0id2luZG93X3BsYWNlbWVudCI+R1RLX0NPUk5FUl9UT1BfTEVGVDwvcHJvcGVydHk+DQog
ICAgLQ0KICAgIC0JICAgICAgPGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1RyZWVW
aWV3IiBpZD0idHJlZXZpZXcxIj4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8
L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9ImhlYWRlcnNfdmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0icnVsZXNfaGludCI+RmFsc2U8
L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InJlb3JkZXJhYmxlIj5GYWxzZTwv
cHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0iZW5hYmxlX3NlYXJjaCI+RmFsc2U8
L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHNpZ25hbCBuYW1lPSJjdXJzb3JfY2hhbmdlZCIgaGFuZGxl
cj0ib25fdHJlZXZpZXcyX2N1cnNvcl9jaGFuZ2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJT
dW4sIDEyIEphbiAyMDAzIDE1OjU4OjIyIEdNVCIvPg0KICAgIC0JCSAgPHNpZ25hbCBuYW1lPSJi
dXR0b25fcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3MV9idXR0b25fcHJlc3NfZXZl
bnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTY6MDM6NTIgR01U
Ii8+DQogICAgLQkJICA8c2lnbmFsIG5hbWU9ImtleV9wcmVzc19ldmVudCIgaGFuZGxlcj0ib25f
dHJlZXZpZXcyX2tleV9wcmVzc19ldmVudCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAx
MiBKYW4gMjAwMyAxNjoxMTo0NCBHTVQiLz4NCiAgICAtCQk8L3dpZGdldD4NCiAgICAtCSAgICAg
IDwvY2hpbGQ+DQogICAgLQkgICAgPC93aWRnZXQ+DQogICAgLQkgICAgPHBhY2tpbmc+DQogICAg
LQkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJyZXNpemUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICA8
L3BhY2tpbmc+DQogICAgLQkgIDwvY2hpbGQ+DQogICAgLQ0KICAgIC0JICA8Y2hpbGQ+DQogICAg
LQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVlBhbmVkIiBpZD0idnBhbmVkMSI+DQogICAgLQkgICAg
ICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkgICAgICA8
cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJwb3NpdGlvbiI+MDwvcHJvcGVydHk+DQogICAgLQ0KICAgIC0JICAgICAg
PGNoaWxkPg0KICAgIC0JCTx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2luZG93IiBpZD0ic2Ny
b2xsZWR3aW5kb3cyIj4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9w
cm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0eSBuYW1lPSJoc2Nyb2xsYmFyX3BvbGljeSI+R1RL
X1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZz
Y3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+DQogICAgLQkJ
ICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUiPkdUS19TSEFET1dfSU48L3Byb3BlcnR5Pg0K
ICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9Q
X0xFRlQ8L3Byb3BlcnR5Pg0KICAgIC0NCiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdp
ZGdldCBjbGFzcz0iR3RrVHJlZVZpZXciIGlkPSJ0cmVldmlldzIiPg0KICAgIC0JCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJv
cGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJv
cGVydHkgbmFtZT0iaGFzX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJv
cGVydHkgbmFtZT0iaGVhZGVyc192aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0icnVsZXNfaGludCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0JCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJyZW9yZGVyYWJsZSI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgIC0J
CSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJlbmFibGVfc2VhcmNoIj5GYWxzZTwvcHJvcGVydHk+DQog
ICAgLQkJICAgICAgPHNpZ25hbCBuYW1lPSJjdXJzb3JfY2hhbmdlZCIgaGFuZGxlcj0ib25fdHJl
ZXZpZXcyX2N1cnNvcl9jaGFuZ2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEph
biAyMDAzIDE1OjU3OjU1IEdNVCIvPg0KICAgIC0JCSAgICAgIDxzaWduYWwgbmFtZT0iYnV0dG9u
X3ByZXNzX2V2ZW50IiBoYW5kbGVyPSJvbl90cmVldmlldzJfYnV0dG9uX3ByZXNzX2V2ZW50IiBs
YXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE1OjU3OjU4IEdNVCIvPg0K
ICAgIC0JCSAgICAgIDxzaWduYWwgbmFtZT0ia2V5X3ByZXNzX2V2ZW50IiBoYW5kbGVyPSJvbl90
cmVldmlldzJfa2V5X3ByZXNzX2V2ZW50IiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEy
IEphbiAyMDAzIDE1OjU4OjAxIEdNVCIvPg0KICAgIC0JCSAgICA8L3dpZGdldD4NCiAgICAtCQkg
IDwvY2hpbGQ+DQogICAgLQkJPC93aWRnZXQ+DQogICAgLQkJPHBhY2tpbmc+DQogICAgLQkJICA8
cHJvcGVydHkgbmFtZT0ic2hyaW5rIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgIDxwcm9wZXJ0
eSBuYW1lPSJyZXNpemUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAg
LQkgICAgICA8L2NoaWxkPg0KICAgIC0NCiAgICAtCSAgICAgIDxjaGlsZD4NCiAgICAtCQk8d2lk
Z2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93MyI+DQogICAg
LQkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkJICA8
cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfTkVWRVI8L3Byb3Bl
cnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9M
SUNZX0FVVE9NQVRJQzwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0ic2hhZG93
X3R5cGUiPkdUS19TSEFET1dfSU48L3Byb3BlcnR5Pg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9
IndpbmRvd19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9QX0xFRlQ8L3Byb3BlcnR5Pg0KICAgIC0N
CiAgICAtCQkgIDxjaGlsZD4NCiAgICAtCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrVGV4dFZpZXci
IGlkPSJ0ZXh0dmlldzMiPg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5U
cnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5U
cnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZWRpdGFibGUiPkZh
bHNlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ib3ZlcndyaXRlIj5G
YWxzZTwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjY2VwdHNfdGFi
Ij5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ianVzdGlmaWNh
dGlvbiI+R1RLX0pVU1RJRllfTEVGVDwvcHJvcGVydHk+DQogICAgLQkJICAgICAgPHByb3BlcnR5
IG5hbWU9IndyYXBfbW9kZSI+R1RLX1dSQVBfV09SRDwvcHJvcGVydHk+DQogICAgLQkJICAgICAg
PHByb3BlcnR5IG5hbWU9ImN1cnNvcl92aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2Fib3ZlX2xpbmVzIj4wPC9wcm9wZXJ0eT4NCiAg
ICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2JlbG93X2xpbmVzIj4wPC9wcm9wZXJ0
eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0icGl4ZWxzX2luc2lkZV93cmFwIj4wPC9w
cm9wZXJ0eT4NCiAgICAtCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGVmdF9tYXJnaW4iPjA8L3By
b3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyaWdodF9tYXJnaW4iPjA8L3By
b3BlcnR5Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmRlbnQiPjA8L3Byb3BlcnR5
Pg0KICAgIC0JCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXh0IiB0cmFuc2xhdGFibGU9InllcyI+
U29ycnksIG5vIGhlbHAgYXZhaWxhYmxlIGZvciB0aGlzIG9wdGlvbiB5ZXQuPC9wcm9wZXJ0eT4N
CiAgICAtCQkgICAgPC93aWRnZXQ+DQogICAgLQkJICA8L2NoaWxkPg0KICAgIC0JCTwvd2lkZ2V0
Pg0KICAgIC0JCTxwYWNraW5nPg0KICAgIC0JCSAgPHByb3BlcnR5IG5hbWU9InNocmluayI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQkJICA8cHJvcGVydHkgbmFtZT0icmVzaXplIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICAtCQk8L3BhY2tpbmc+DQogICAgLQkgICAgICA8L2NoaWxkPg0KICAgIC0JICAg
IDwvd2lkZ2V0Pg0KICAgIC0JICAgIDxwYWNraW5nPg0KICAgIC0JICAgICAgPHByb3BlcnR5IG5h
bWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLQkgICAgICA8cHJvcGVydHkgbmFtZT0i
cmVzaXplIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAtCSAgICA8L3BhY2tpbmc+DQogICAgLQkgIDwv
Y2hpbGQ+DQogICAgLQk8L3dpZGdldD4NCiAgICAtCTxwYWNraW5nPg0KICAgIC0JICA8cHJvcGVy
dHkgbmFtZT0icGFkZGluZyI+MDwvcHJvcGVydHk+DQogICAgLQkgIDxwcm9wZXJ0eSBuYW1lPSJl
eHBhbmQiPlRydWU8L3Byb3BlcnR5Pg0KICAgIC0JICA8cHJvcGVydHkgbmFtZT0iZmlsbCI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgLQk8L3BhY2tpbmc+DQogICAgLSAgICAgIDwvY2hpbGQ+DQogICAg
LSAgICA8L3dpZGdldD4NCiAgICAtICA8L2NoaWxkPg0KICAgIC08L3dpZGdldD4NCiAgICAtDQog
ICAgLTwvZ2xhZGUtaW50ZXJmYWNlPg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L2ltYWdlcy5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9pbWFnZXMuYw0KICAgIGRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGI0ZmEwZTQuLjAwMDAwMDANCiAgICAtLS0gYS9z
dXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0x
LDMyOCArMCwwIEBADQogICAgLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQog
ICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBs
aW51eC1tNjhrLm9yZz4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSAiaW1hZ2VzLmgi
DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICp4cG1fbG9hZFtdID0gew0KICAgIC0iMjIgMjIgNSAx
IiwNCiAgICAtIi4gYyBOb25lIiwNCiAgICAtIiMgYyAjMDAwMDAwIiwNCiAgICAtImMgYyAjODM4
MTAwIiwNCiAgICAtImEgYyAjZmZmZjAwIiwNCiAgICAtImIgYyAjZmZmZmZmIiwNCiAgICAtIi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQog
ICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLiMjIyMuLi4u
Iy4iLA0KICAgIC0iLi4uLi4uLi4uLi4jLi4uLiMjLiMjLiIsDQogICAgLSIuLi4uLi4uLi4uLi4u
Li4uLi4jIyMuIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uIyMjIy4iLA0KICAgIC0iLiMjIyMu
Li4uLi4uLi4uLiMjIyMjLiIsDQogICAgLSIjYWJhYiMjIyMjIyMjIyMuLi4uLi4uIiwNCiAgICAt
IiNiYWJhYmFiYWJhYmFiIy4uLi4uLi4iLA0KICAgIC0iI2FiYWJhYmFiYWJhYmEjLi4uLi4uLiIs
DQogICAgLSIjYmFiYWJhYmFiYWJhYiMuLi4uLi4uIiwNCiAgICAtIiNhYmFiYWIjIyMjIyMjIyMj
IyMjIyMiLA0KICAgIC0iI2JhYmFiIyNjY2NjY2NjY2NjY2MjIyIsDQogICAgLSIjYWJhYiMjY2Nj
Y2NjY2NjY2NjIyMuIiwNCiAgICAtIiNiYWIjI2NjY2NjY2NjY2NjYyMjLi4iLA0KICAgIC0iI2Fi
IyNjY2NjY2NjY2NjY2MjIy4uLiIsDQogICAgLSIjYiMjY2NjY2NjY2NjY2NjIyMuLi4uIiwNCiAg
ICAtIiMjI2NjY2NjY2NjY2NjYyMjLi4uLi4iLA0KICAgIC0iIyNjY2NjY2NjY2NjY2MjIy4uLi4u
LiIsDQogICAgLSIjIyMjIyMjIyMjIyMjIyMuLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4ifTsNCiAgICAtDQogICAgLWNvbnN0IGNoYXIgKnhwbV9zYXZlW10gPSB7DQogICAg
LSIyMiAyMiA1IDEiLA0KICAgIC0iLiBjIE5vbmUiLA0KICAgIC0iIyBjICMwMDAwMDAiLA0KICAg
IC0iYSBjICM4MzgxMDAiLA0KICAgIC0iYiBjICNjNWMyYzUiLA0KICAgIC0iYyBjICNjZGI2ZDUi
LA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuIyMjIyMjIyMjIyMjIyMj
IyMjIyMuIiwNCiAgICAtIi4jYWEjYmJiYmJiYmJiYmJiI2JiIy4iLA0KICAgIC0iLiNhYSNiYmJi
YmJiYmJiYmIjYmIjLiIsDQogICAgLSIuI2FhI2JiYmJiYmJiYmNiYiMjIyMuIiwNCiAgICAtIi4j
YWEjYmJiY2NiYmJiYmJiI2FhIy4iLA0KICAgIC0iLiNhYSNiYmJjY2JiYmJiYmIjYWEjLiIsDQog
ICAgLSIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwNCiAgICAtIi4jYWEjYmJiYmJiYmJiYmJiI2Fh
Iy4iLA0KICAgIC0iLiNhYSNiYmJiYmJiYmJiYmIjYWEjLiIsDQogICAgLSIuI2FhI2JiYmJiYmJi
YmJiYiNhYSMuIiwNCiAgICAtIi4jYWFhIyMjIyMjIyMjIyMjYWFhIy4iLA0KICAgIC0iLiNhYWFh
YWFhYWFhYWFhYWFhYWEjLiIsDQogICAgLSIuI2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwNCiAgICAt
Ii4jYWFhIyMjIyMjIyMjIyMjI2FhIy4iLA0KICAgIC0iLiNhYWEjIyMjIyMjIyNiYmIjYWEjLiIs
DQogICAgLSIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwNCiAgICAtIi4jYWFhIyMjIyMjIyMjYmJi
I2FhIy4iLA0KICAgIC0iLiNhYWEjIyMjIyMjIyNiYmIjYWEjLiIsDQogICAgLSIuI2FhYSMjIyMj
IyMjI2JiYiNhYSMuIiwNCiAgICAtIi4uIyMjIyMjIyMjIyMjIyMjIyMjLi4iLA0KICAgIC0iLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAgIC0NCiAgICAtY29uc3QgY2hhciAqeHBtX2JhY2tb
XSA9IHsNCiAgICAtIjIyIDIyIDMgMSIsDQogICAgLSIuIGMgTm9uZSIsDQogICAgLSIjIGMgIzAw
MDA4MyIsDQogICAgLSJhIGMgIzgzODE4MyIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4jIyMjIyNhLi4uLiIsDQogICAgLSIu
LiMuLi4uLi4jIyMjIyMjIyMjLi4uIiwNCiAgICAtIi4uIyMuLi4jIyMjLi4uLi4uIyNhLi4iLA0K
ICAgIC0iLi4jIyMuIyMjLi4uLi4uLi4uIyMuLiIsDQogICAgLSIuLiMjIyMjIy4uLi4uLi4uLi4j
Iy4uIiwNCiAgICAtIi4uIyMjIyMuLi4uLi4uLi4uLiMjLi4iLA0KICAgIC0iLi4jIyMjIyMuLi4u
Li4uLi4uIyMuLiIsDQogICAgLSIuLiMjIyMjIyMuLi4uLi4uLi4jIy4uIiwNCiAgICAtIi4uIyMj
IyMjIyMuLi4uLi4uIyNhLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uYSMjIy4uLiIsDQogICAg
LSIuLi4uLi4uLi4uLi4uLi4jIyMuLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4i
LA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07DQogICAgLQ0K
ICAgIC1jb25zdCBjaGFyICp4cG1fdHJlZV92aWV3W10gPSB7DQogICAgLSIyMiAyMiAyIDEiLA0K
ICAgIC0iLiBjIE5vbmUiLA0KICAgIC0iIyBjICMwMDAwMDAiLA0KICAgIC0iLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4u
LiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAg
LSIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4i
LA0KICAgIC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jIyMjIyMjIy4u
Li4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4u
Li4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4u
Li4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQog
ICAgLSIuLi4uLi4jIyMjIyMjIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4uLi4uLi4u
Li4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4u
Li4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4u
Iy4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jIyMjIyMjIy4uLi4uLi4uIiwNCiAgICAt
Ii4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9
Ow0KICAgIC0NCiAgICAtY29uc3QgY2hhciAqeHBtX3NpbmdsZV92aWV3W10gPSB7DQogICAgLSIy
MiAyMiAyIDEiLA0KICAgIC0iLiBjIE5vbmUiLA0KICAgIC0iIyBjICMwMDAwMDAiLA0KICAgIC0i
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwN
CiAgICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4u
Li4uLiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4j
Li4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIuLi4u
Li4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAg
IC0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4uLi4u
IiwNCiAgICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4u
Li4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4u
Li4jLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIu
Li4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0K
ICAgIC0iLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgLSIuLi4uLi4uLi4uIy4uLi4uLi4u
Li4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLiJ9Ow0KICAgIC0NCiAgICAtY29uc3QgY2hhciAqeHBtX3NwbGl0X3ZpZXdbXSA9
IHsNCiAgICAtIjIyIDIyIDIgMSIsDQogICAgLSIuIGMgTm9uZSIsDQogICAgLSIjIGMgIzAwMDAw
MCIsDQogICAgLSIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4uLi4j
Li4uLi4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgIC0i
Li4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwN
CiAgICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMuLi4u
Li4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4u
Li4jLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4u
Li4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAg
IC0iLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4u
IiwNCiAgICAtIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uIy4uLi4uLiMu
Li4uLi4uLiIsDQogICAgLSIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICAtIi4uLi4uLiMu
Li4uLi4jLi4uLi4uLi4iLA0KICAgIC0iLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgLSIu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uIn07DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICp4cG1fc3lt
Ym9sX25vW10gPSB7DQogICAgLSIxMiAxMiAyIDEiLA0KICAgIC0iICBjIHdoaXRlIiwNCiAgICAt
Ii4gYyBibGFjayIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iIC4uLi4uLi4uLi4gIiwN
CiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4gICAg
ICAgIC4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAg
IC0iIC4gICAgICAgIC4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgICAg
LiAiLA0KICAgIC0iIC4uLi4uLi4uLi4gIiwNCiAgICAtIiAgICAgICAgICAgICJ9Ow0KICAgIC0N
CiAgICAtY29uc3QgY2hhciAqeHBtX3N5bWJvbF9tb2RbXSA9IHsNCiAgICAtIjEyIDEyIDIgMSIs
DQogICAgLSIgIGMgd2hpdGUiLA0KICAgIC0iLiBjIGJsYWNrIiwNCiAgICAtIiAgICAgICAgICAg
ICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0KICAgIC0iIC4gICAgICAgIC4gIiwNCiAgICAtIiAu
ICAgICAgICAuICIsDQogICAgLSIgLiAgIC4uICAgLiAiLA0KICAgIC0iIC4gIC4uLi4gIC4gIiwN
CiAgICAtIiAuICAuLi4uICAuICIsDQogICAgLSIgLiAgIC4uICAgLiAiLA0KICAgIC0iIC4gICAg
ICAgIC4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0KICAg
IC0iICAgICAgICAgICAgIn07DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICp4cG1fc3ltYm9sX3ll
c1tdID0gew0KICAgIC0iMTIgMTIgMiAxIiwNCiAgICAtIiAgYyB3aGl0ZSIsDQogICAgLSIuIGMg
YmxhY2siLA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAtIiAuLi4uLi4uLi4uICIsDQogICAg
LSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4gICAgICAgIC4gIiwNCiAgICAtIiAuICAgICAgLiAu
ICIsDQogICAgLSIgLiAgICAgLi4gLiAiLA0KICAgIC0iIC4gLiAgLi4gIC4gIiwNCiAgICAtIiAu
IC4uLi4gICAuICIsDQogICAgLSIgLiAgLi4gICAgLiAiLA0KICAgIC0iIC4gICAgICAgIC4gIiwN
CiAgICAtIiAuLi4uLi4uLi4uICIsDQogICAgLSIgICAgICAgICAgICAifTsNCiAgICAtDQogICAg
LWNvbnN0IGNoYXIgKnhwbV9jaG9pY2Vfbm9bXSA9IHsNCiAgICAtIjEyIDEyIDIgMSIsDQogICAg
LSIgIGMgd2hpdGUiLA0KICAgIC0iLiBjIGJsYWNrIiwNCiAgICAtIiAgICAgICAgICAgICIsDQog
ICAgLSIgICAgLi4uLiAgICAiLA0KICAgIC0iICAuLiAgICAuLiAgIiwNCiAgICAtIiAgLiAgICAg
IC4gICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iIC4gICAgICAgIC4gIiwNCiAgICAt
IiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgICAgLiAiLA0KICAgIC0iICAuICAgICAgLiAg
IiwNCiAgICAtIiAgLi4gICAgLi4gICIsDQogICAgLSIgICAgLi4uLiAgICAiLA0KICAgIC0iICAg
ICAgICAgICAgIn07DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICp4cG1fY2hvaWNlX3llc1tdID0g
ew0KICAgIC0iMTIgMTIgMiAxIiwNCiAgICAtIiAgYyB3aGl0ZSIsDQogICAgLSIuIGMgYmxhY2si
LA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAtIiAgICAuLi4uICAgICIsDQogICAgLSIgIC4u
ICAgIC4uICAiLA0KICAgIC0iICAuICAgICAgLiAgIiwNCiAgICAtIiAuICAgLi4gICAuICIsDQog
ICAgLSIgLiAgLi4uLiAgLiAiLA0KICAgIC0iIC4gIC4uLi4gIC4gIiwNCiAgICAtIiAuICAgLi4g
ICAuICIsDQogICAgLSIgIC4gICAgICAuICAiLA0KICAgIC0iICAuLiAgICAuLiAgIiwNCiAgICAt
IiAgICAuLi4uICAgICIsDQogICAgLSIgICAgICAgICAgICAifTsNCiAgICAtDQogICAgLWNvbnN0
IGNoYXIgKnhwbV9tZW51W10gPSB7DQogICAgLSIxMiAxMiAyIDEiLA0KICAgIC0iICBjIHdoaXRl
IiwNCiAgICAtIi4gYyBibGFjayIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iIC4uLi4u
Li4uLi4gIiwNCiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAuLiAgICAgLiAiLA0KICAg
IC0iIC4gLi4uLiAgIC4gIiwNCiAgICAtIiAuIC4uLi4uLiAuICIsDQogICAgLSIgLiAuLi4uLi4g
LiAiLA0KICAgIC0iIC4gLi4uLiAgIC4gIiwNCiAgICAtIiAuIC4uICAgICAuICIsDQogICAgLSIg
LiAgICAgICAgLiAiLA0KICAgIC0iIC4uLi4uLi4uLi4gIiwNCiAgICAtIiAgICAgICAgICAgICJ9
Ow0KICAgIC0NCiAgICAtY29uc3QgY2hhciAqeHBtX21lbnVfaW52W10gPSB7DQogICAgLSIxMiAx
MiAyIDEiLA0KICAgIC0iICBjIHdoaXRlIiwNCiAgICAtIi4gYyBibGFjayIsDQogICAgLSIgICAg
ICAgICAgICAiLA0KICAgIC0iIC4uLi4uLi4uLi4gIiwNCiAgICAtIiAuLi4uLi4uLi4uICIsDQog
ICAgLSIgLi4gIC4uLi4uLiAiLA0KICAgIC0iIC4uICAgIC4uLi4gIiwNCiAgICAtIiAuLiAgICAg
IC4uICIsDQogICAgLSIgLi4gICAgICAuLiAiLA0KICAgIC0iIC4uICAgIC4uLi4gIiwNCiAgICAt
IiAuLiAgLi4uLi4uICIsDQogICAgLSIgLi4uLi4uLi4uLiAiLA0KICAgIC0iIC4uLi4uLi4uLi4g
IiwNCiAgICAtIiAgICAgICAgICAgICJ9Ow0KICAgIC0NCiAgICAtY29uc3QgY2hhciAqeHBtX21l
bnViYWNrW10gPSB7DQogICAgLSIxMiAxMiAyIDEiLA0KICAgIC0iICBjIHdoaXRlIiwNCiAgICAt
Ii4gYyBibGFjayIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iIC4uLi4uLi4uLi4gIiwN
CiAgICAtIiAuICAgICAgICAuICIsDQogICAgLSIgLiAgICAgLi4gLiAiLA0KICAgIC0iIC4gICAu
Li4uIC4gIiwNCiAgICAtIiAuIC4uLi4uLiAuICIsDQogICAgLSIgLiAuLi4uLi4gLiAiLA0KICAg
IC0iIC4gICAuLi4uIC4gIiwNCiAgICAtIiAuICAgICAuLiAuICIsDQogICAgLSIgLiAgICAgICAg
LiAiLA0KICAgIC0iIC4uLi4uLi4uLi4gIiwNCiAgICAtIiAgICAgICAgICAgICJ9Ow0KICAgIC0N
CiAgICAtY29uc3QgY2hhciAqeHBtX3ZvaWRbXSA9IHsNCiAgICAtIjEyIDEyIDIgMSIsDQogICAg
LSIgIGMgd2hpdGUiLA0KICAgIC0iLiBjIGJsYWNrIiwNCiAgICAtIiAgICAgICAgICAgICIsDQog
ICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAtIiAgICAgICAg
ICAgICIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iICAgICAgICAgICAgIiwNCiAgICAt
IiAgICAgICAgICAgICIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iICAgICAgICAgICAg
IiwNCiAgICAtIiAgICAgICAgICAgICIsDQogICAgLSIgICAgICAgICAgICAiLA0KICAgIC0iICAg
ICAgICAgICAgIn07DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvaW1hZ2Vz
LmggYi9zdXBwb3J0L2tjb25maWcubmV3L2ltYWdlcy5oDQogICAgZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggZDhmZjYxNC4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvaW1hZ2VzLmgNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMzMgKzAsMCBA
QA0KICAgIC0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KICAgIC0vKg0K
ICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4
ay5vcmc+DQogICAgLSAqLw0KICAgIC0NCiAgICAtI2lmbmRlZiBJTUFHRVNfSA0KICAgIC0jZGVm
aW5lIElNQUdFU19IDQogICAgLQ0KICAgIC0jaWZkZWYgX19jcGx1c3BsdXMNCiAgICAtZXh0ZXJu
ICJDIiB7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9s
b2FkW107DQogICAgLWV4dGVybiBjb25zdCBjaGFyICp4cG1fc2F2ZVtdOw0KICAgIC1leHRlcm4g
Y29uc3QgY2hhciAqeHBtX2JhY2tbXTsNCiAgICAtZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV90cmVl
X3ZpZXdbXTsNCiAgICAtZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zaW5nbGVfdmlld1tdOw0KICAg
IC1leHRlcm4gY29uc3QgY2hhciAqeHBtX3NwbGl0X3ZpZXdbXTsNCiAgICAtZXh0ZXJuIGNvbnN0
IGNoYXIgKnhwbV9zeW1ib2xfbm9bXTsNCiAgICAtZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1i
b2xfbW9kW107DQogICAgLWV4dGVybiBjb25zdCBjaGFyICp4cG1fc3ltYm9sX3llc1tdOw0KICAg
IC1leHRlcm4gY29uc3QgY2hhciAqeHBtX2Nob2ljZV9ub1tdOw0KICAgIC1leHRlcm4gY29uc3Qg
Y2hhciAqeHBtX2Nob2ljZV95ZXNbXTsNCiAgICAtZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9tZW51
W107DQogICAgLWV4dGVybiBjb25zdCBjaGFyICp4cG1fbWVudV9pbnZbXTsNCiAgICAtZXh0ZXJu
IGNvbnN0IGNoYXIgKnhwbV9tZW51YmFja1tdOw0KICAgIC1leHRlcm4gY29uc3QgY2hhciAqeHBt
X3ZvaWRbXTsNCiAgICAtDQogICAgLSNpZmRlZiBfX2NwbHVzcGx1cw0KICAgIC19DQogICAgLSNl
bmRpZg0KICAgIC0NCiAgICAtI2VuZGlmIC8qIElNQUdFU19IICovDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIu
bA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGM1YWNiMzIuLjAwMDAw
MDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwNCiAgICArKysgL2Rldi9u
dWxsDQogICAgQEAgLTEsNDk4ICswLDAgQEANCiAgICAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjAgKi8NCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu
IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0gKi8NCiAgICAtJW9wdGlvbiBu
b3N0ZGluaXQgbm95eXdyYXAgbmV2ZXItaW50ZXJhY3RpdmUgZnVsbCBlY3MNCiAgICAtJW9wdGlv
biA4Yml0IG5vZGVmYXVsdCB5eWxpbmVubw0KICAgIC0leCBBU1NJR05fVkFMIEhFTFAgU1RSSU5H
DQogICAgLSV7DQogICAgLQ0KICAgIC0jaW5jbHVkZSA8YXNzZXJ0Lmg+DQogICAgLSNpbmNsdWRl
IDxnbG9iLmg+DQogICAgLSNpbmNsdWRlIDxsaW1pdHMuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGlv
Lmg+DQogICAgLSNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICAtI2luY2x1ZGUgPHN0cmluZy5oPg0K
ICAgIC0jaW5jbHVkZSA8dW5pc3RkLmg+DQogICAgLQ0KICAgIC0jaW5jbHVkZSAibGtjLmgiDQog
ICAgLSNpbmNsdWRlICJwYXJzZXIudGFiLmgiDQogICAgLQ0KICAgIC0jZGVmaW5lIFlZX0RFQ0wJ
CXN0YXRpYyBpbnQgeXlsZXgxKHZvaWQpDQogICAgLQ0KICAgIC0jZGVmaW5lIFNUQVJUX1NUUlNJ
WkUJMTYNCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3Qgew0KICAgIC0Jc3RydWN0IGZpbGUgKmZp
bGU7DQogICAgLQlpbnQgbGluZW5vOw0KICAgIC19IGN1cnJlbnRfcG9zOw0KICAgIC0NCiAgICAt
c3RhdGljIGludCBwcmV2X3ByZXZfdG9rZW4gPSBUX0VPTDsNCiAgICAtc3RhdGljIGludCBwcmV2
X3Rva2VuID0gVF9FT0w7DQogICAgLXN0YXRpYyBjaGFyICp0ZXh0Ow0KICAgIC1zdGF0aWMgaW50
IHRleHRfc2l6ZSwgdGV4dF9hc2l6ZTsNCiAgICAtDQogICAgLXN0cnVjdCBidWZmZXIgew0KICAg
IC0Jc3RydWN0IGJ1ZmZlciAqcGFyZW50Ow0KICAgIC0JWVlfQlVGRkVSX1NUQVRFIHN0YXRlOw0K
ICAgIC19Ow0KICAgIC0NCiAgICAtc3RydWN0IGJ1ZmZlciAqY3VycmVudF9idWY7DQogICAgLQ0K
ICAgIC1zdGF0aWMgaW50IGxhc3RfdHMsIGZpcnN0X3RzOw0KICAgIC0NCiAgICAtc3RhdGljIGNo
YXIgKmV4cGFuZF90b2tlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IG4pOw0KICAgIC1zdGF0aWMg
dm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKTsNCiAgICAtc3RhdGlj
IHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsNCiAgICAtc3RhdGljIHZvaWQgemNvbmZfZW5kZmls
ZSh2b2lkKTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIG5ld19zdHJpbmcodm9pZCkNCiAgICAt
ew0KICAgIC0JdGV4dCA9IHhtYWxsb2MoU1RBUlRfU1RSU0laRSk7DQogICAgLQl0ZXh0X2FzaXpl
ID0gU1RBUlRfU1RSU0laRTsNCiAgICAtCXRleHRfc2l6ZSA9IDA7DQogICAgLQkqdGV4dCA9IDA7
DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGFwcGVuZF9zdHJpbmcoY29uc3QgY2hh
ciAqc3RyLCBpbnQgc2l6ZSkNCiAgICAtew0KICAgIC0JaW50IG5ld19zaXplID0gdGV4dF9zaXpl
ICsgc2l6ZSArIDE7DQogICAgLQlpZiAobmV3X3NpemUgPiB0ZXh0X2FzaXplKSB7DQogICAgLQkJ
bmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7DQogICAgLQkJbmV3X3NpemUgJj0gLVNUQVJU
X1NUUlNJWkU7DQogICAgLQkJdGV4dCA9IHhyZWFsbG9jKHRleHQsIG5ld19zaXplKTsNCiAgICAt
CQl0ZXh0X2FzaXplID0gbmV3X3NpemU7DQogICAgLQl9DQogICAgLQltZW1jcHkodGV4dCArIHRl
eHRfc2l6ZSwgc3RyLCBzaXplKTsNCiAgICAtCXRleHRfc2l6ZSArPSBzaXplOw0KICAgIC0JdGV4
dFt0ZXh0X3NpemVdID0gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgYWxsb2Nf
c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpDQogICAgLXsNCiAgICAtCXRleHQgPSB4
bWFsbG9jKHNpemUgKyAxKTsNCiAgICAtCW1lbWNweSh0ZXh0LCBzdHIsIHNpemUpOw0KICAgIC0J
dGV4dFtzaXplXSA9IDA7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHdhcm5faWdu
b3JlZF9jaGFyYWN0ZXIoY2hhciBjaHIpDQogICAgLXsNCiAgICAtCWZwcmludGYoc3RkZXJyLA0K
ICAgIC0JICAgICAgICAiJXM6JWQ6d2FybmluZzogaWdub3JpbmcgdW5zdXBwb3J0ZWQgY2hhcmFj
dGVyICclYydcbiIsDQogICAgLQkgICAgICAgIGN1cnJlbnRfZmlsZS0+bmFtZSwgeXlsaW5lbm8s
IGNocik7DQogICAgLX0NCiAgICAtJX0NCiAgICAtDQogICAgLW4JW0EtWmEtejAtOV8tXQ0KICAg
IC0NCiAgICAtJSUNCiAgICAtCWludCBzdHIgPSAwOw0KICAgIC0JaW50IHRzLCBpOw0KICAgIC0N
CiAgICAtIy4qCQkJLyogaWdub3JlIGNvbW1lbnQgKi8NCiAgICAtWyBcdF0qCQkJLyogd2hpdGVz
cGFjZXMgKi8NCiAgICAtXFxcbgkJCS8qIGVzY2FwZWQgbmV3IGxpbmUgKi8NCiAgICAtXG4JCQly
ZXR1cm4gVF9FT0w7DQogICAgLSJhbGxub2NvbmZpZ195IgkJcmV0dXJuIFRfQUxMTk9DT05GSUdf
WTsNCiAgICAtImJvb2wiCQkJcmV0dXJuIFRfQk9PTDsNCiAgICAtImNob2ljZSIJCXJldHVybiBU
X0NIT0lDRTsNCiAgICAtImNvbW1lbnQiCQlyZXR1cm4gVF9DT01NRU5UOw0KICAgIC0iY29uZmln
IgkJcmV0dXJuIFRfQ09ORklHOw0KICAgIC0iZGVmX2Jvb2wiCQlyZXR1cm4gVF9ERUZfQk9PTDsN
CiAgICAtImRlZl90cmlzdGF0ZSIJCXJldHVybiBUX0RFRl9UUklTVEFURTsNCiAgICAtImRlZmF1
bHQiCQlyZXR1cm4gVF9ERUZBVUxUOw0KICAgIC0iZGVmY29uZmlnX2xpc3QiCXJldHVybiBUX0RF
RkNPTkZJR19MSVNUOw0KICAgIC0iZGVwZW5kcyIJCXJldHVybiBUX0RFUEVORFM7DQogICAgLSJl
bmRjaG9pY2UiCQlyZXR1cm4gVF9FTkRDSE9JQ0U7DQogICAgLSJlbmRpZiIJCQlyZXR1cm4gVF9F
TkRJRjsNCiAgICAtImVuZG1lbnUiCQlyZXR1cm4gVF9FTkRNRU5VOw0KICAgIC0iaGVscCJ8Ii0t
LWhlbHAtLS0iCXJldHVybiBUX0hFTFA7DQogICAgLSJoZXgiCQkJcmV0dXJuIFRfSEVYOw0KICAg
IC0iaWYiCQkJcmV0dXJuIFRfSUY7DQogICAgLSJpbXBseSIJCQlyZXR1cm4gVF9JTVBMWTsNCiAg
ICAtImludCIJCQlyZXR1cm4gVF9JTlQ7DQogICAgLSJtYWlubWVudSIJCXJldHVybiBUX01BSU5N
RU5VOw0KICAgIC0ibWVudSIJCQlyZXR1cm4gVF9NRU5VOw0KICAgIC0ibWVudWNvbmZpZyIJCXJl
dHVybiBUX01FTlVDT05GSUc7DQogICAgLSJtb2R1bGVzIgkJcmV0dXJuIFRfTU9EVUxFUzsNCiAg
ICAtIm9uIgkJCXJldHVybiBUX09OOw0KICAgIC0ib3B0aW9uIgkJcmV0dXJuIFRfT1BUSU9OOw0K
ICAgIC0ib3B0aW9uYWwiCQlyZXR1cm4gVF9PUFRJT05BTDsNCiAgICAtInByb21wdCIJCXJldHVy
biBUX1BST01QVDsNCiAgICAtInJhbmdlIgkJCXJldHVybiBUX1JBTkdFOw0KICAgIC0ic2VsZWN0
IgkJcmV0dXJuIFRfU0VMRUNUOw0KICAgIC0ic291cmNlIgkJcmV0dXJuIFRfU09VUkNFOw0KICAg
IC0ic3RyaW5nIgkJcmV0dXJuIFRfU1RSSU5HOw0KICAgIC0idHJpc3RhdGUiCQlyZXR1cm4gVF9U
UklTVEFURTsNCiAgICAtInZpc2libGUiCQlyZXR1cm4gVF9WSVNJQkxFOw0KICAgIC0ifHwiCQkJ
cmV0dXJuIFRfT1I7DQogICAgLSImJiIJCQlyZXR1cm4gVF9BTkQ7DQogICAgLSI9IgkJCXJldHVy
biBUX0VRVUFMOw0KICAgIC0iIT0iCQkJcmV0dXJuIFRfVU5FUVVBTDsNCiAgICAtIjwiCQkJcmV0
dXJuIFRfTEVTUzsNCiAgICAtIjw9IgkJCXJldHVybiBUX0xFU1NfRVFVQUw7DQogICAgLSI+IgkJ
CXJldHVybiBUX0dSRUFURVI7DQogICAgLSI+PSIJCQlyZXR1cm4gVF9HUkVBVEVSX0VRVUFMOw0K
ICAgIC0iISIJCQlyZXR1cm4gVF9OT1Q7DQogICAgLSIoIgkJCXJldHVybiBUX09QRU5fUEFSRU47
DQogICAgLSIpIgkJCXJldHVybiBUX0NMT1NFX1BBUkVOOw0KICAgIC0iOj0iCQkJcmV0dXJuIFRf
Q09MT05fRVFVQUw7DQogICAgLSIrPSIJCQlyZXR1cm4gVF9QTFVTX0VRVUFMOw0KICAgIC1cInxc
JwkJCXsNCiAgICAtCQkJCXN0ciA9IHl5dGV4dFswXTsNCiAgICAtCQkJCW5ld19zdHJpbmcoKTsN
CiAgICAtCQkJCUJFR0lOKFNUUklORyk7DQogICAgLQkJCX0NCiAgICAte259KwkJCXsNCiAgICAt
CQkJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7DQogICAgLQkJCQl5eWx2YWwuc3RyaW5n
ID0gdGV4dDsNCiAgICAtCQkJCXJldHVybiBUX1dPUkQ7DQogICAgLQkJCX0NCiAgICAtKHtufXwk
KSsJCXsNCiAgICAtCQkJCS8qIHRoaXMgdG9rZW4gaW5jbHVkZXMgYXQgbGVhc3Qgb25lICckJyAq
Lw0KICAgIC0JCQkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRleHQsIHl5bGVuZyk7
DQogICAgLQkJCQlpZiAoc3RybGVuKHl5bHZhbC5zdHJpbmcpKQ0KICAgIC0JCQkJCXJldHVybiBU
X1dPUkQ7DQogICAgLQkJCQlmcmVlKHl5bHZhbC5zdHJpbmcpOw0KICAgIC0JCQl9DQogICAgLS4J
CQl3YXJuX2lnbm9yZWRfY2hhcmFjdGVyKCp5eXRleHQpOw0KICAgIC0NCiAgICAtPEFTU0lHTl9W
QUw+ew0KICAgIC0JW15bOmJsYW5rOl1cbl0rLioJew0KICAgIC0JCWFsbG9jX3N0cmluZyh5eXRl
eHQsIHl5bGVuZyk7DQogICAgLQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgLQkJcmV0dXJu
IFRfQVNTSUdOX1ZBTDsNCiAgICAtCX0NCiAgICAtCVxuCXsgQkVHSU4oSU5JVElBTCk7IHJldHVy
biBUX0VPTDsgfQ0KICAgIC0JLg0KICAgIC19DQogICAgLQ0KICAgIC08U1RSSU5HPnsNCiAgICAt
CSIkIi4qCWFwcGVuZF9leHBhbmRlZF9zdHJpbmcoeXl0ZXh0KTsNCiAgICAtCVteJCciXFxcbl0r
CXsNCiAgICAtCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsNCiAgICAtCX0NCiAgICAt
CVxcLj8Jew0KICAgIC0JCWFwcGVuZF9zdHJpbmcoeXl0ZXh0ICsgMSwgeXlsZW5nIC0gMSk7DQog
ICAgLQl9DQogICAgLQlcJ3xcIgl7DQogICAgLQkJaWYgKHN0ciA9PSB5eXRleHRbMF0pIHsNCiAg
ICAtCQkJQkVHSU4oSU5JVElBTCk7DQogICAgLQkJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAg
IC0JCQlyZXR1cm4gVF9XT1JEX1FVT1RFOw0KICAgIC0JCX0gZWxzZQ0KICAgIC0JCQlhcHBlbmRf
c3RyaW5nKHl5dGV4dCwgMSk7DQogICAgLQl9DQogICAgLQlcbgl7DQogICAgLQkJZnByaW50Zihz
dGRlcnIsDQogICAgLQkJCSIlczolZDp3YXJuaW5nOiBtdWx0aS1saW5lIHN0cmluZ3Mgbm90IHN1
cHBvcnRlZFxuIiwNCiAgICAtCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQog
ICAgLQkJdW5wdXQoJ1xuJyk7DQogICAgLQkJQkVHSU4oSU5JVElBTCk7DQogICAgLQkJeXlsdmFs
LnN0cmluZyA9IHRleHQ7DQogICAgLQkJcmV0dXJuIFRfV09SRF9RVU9URTsNCiAgICAtCX0NCiAg
ICAtCTw8RU9GPj4Jew0KICAgIC0JCUJFR0lOKElOSVRJQUwpOw0KICAgIC0JCXl5bHZhbC5zdHJp
bmcgPSB0ZXh0Ow0KICAgIC0JCXJldHVybiBUX1dPUkRfUVVPVEU7DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLTxIRUxQPnsNCiAgICAtCVsgXHRdKwl7DQogICAgLQkJdHMgPSAwOw0KICAg
IC0JCWZvciAoaSA9IDA7IGkgPCB5eWxlbmc7IGkrKykgew0KICAgIC0JCQlpZiAoeXl0ZXh0W2ld
ID09ICdcdCcpDQogICAgLQkJCQl0cyA9ICh0cyAmIH43KSArIDg7DQogICAgLQkJCWVsc2UNCiAg
ICAtCQkJCXRzKys7DQogICAgLQkJfQ0KICAgIC0JCWxhc3RfdHMgPSB0czsNCiAgICAtCQlpZiAo
Zmlyc3RfdHMpIHsNCiAgICAtCQkJaWYgKHRzIDwgZmlyc3RfdHMpIHsNCiAgICAtCQkJCXpjb25m
X2VuZGhlbHAoKTsNCiAgICAtCQkJCXJldHVybiBUX0hFTFBURVhUOw0KICAgIC0JCQl9DQogICAg
LQkJCXRzIC09IGZpcnN0X3RzOw0KICAgIC0JCQl3aGlsZSAodHMgPiA4KSB7DQogICAgLQkJCQlh
cHBlbmRfc3RyaW5nKCIgICAgICAgICIsIDgpOw0KICAgIC0JCQkJdHMgLT0gODsNCiAgICAtCQkJ
fQ0KICAgIC0JCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIsIHRzKTsNCiAgICAtCQl9DQogICAg
LQl9DQogICAgLQlbIFx0XSpcbi9bXiBcdFxuXSB7DQogICAgLQkJemNvbmZfZW5kaGVscCgpOw0K
ICAgIC0JCXJldHVybiBUX0hFTFBURVhUOw0KICAgIC0JfQ0KICAgIC0JWyBcdF0qXG4Jew0KICAg
IC0JCWFwcGVuZF9zdHJpbmcoIlxuIiwgMSk7DQogICAgLQl9DQogICAgLQlbXiBcdFxuXS4qIHsN
CiAgICAtCQl3aGlsZSAoeXlsZW5nKSB7DQogICAgLQkJCWlmICgoeXl0ZXh0W3l5bGVuZy0xXSAh
PSAnICcpICYmICh5eXRleHRbeXlsZW5nLTFdICE9ICdcdCcpKQ0KICAgIC0JCQkJYnJlYWs7DQog
ICAgLQkJCXl5bGVuZy0tOw0KICAgIC0JCX0NCiAgICAtCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwg
eXlsZW5nKTsNCiAgICAtCQlpZiAoIWZpcnN0X3RzKQ0KICAgIC0JCQlmaXJzdF90cyA9IGxhc3Rf
dHM7DQogICAgLQl9DQogICAgLQk8PEVPRj4+CXsNCiAgICAtCQl6Y29uZl9lbmRoZWxwKCk7DQog
ICAgLQkJcmV0dXJuIFRfSEVMUFRFWFQ7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLTw8
RU9GPj4Jew0KICAgIC0JQkVHSU4oSU5JVElBTCk7DQogICAgLQ0KICAgIC0JaWYgKHByZXZfdG9r
ZW4gIT0gVF9FT0wgJiYgcHJldl90b2tlbiAhPSBUX0hFTFBURVhUKQ0KICAgIC0JCWZwcmludGYo
c3RkZXJyLCAiJXM6JWQ6d2FybmluZzogbm8gbmV3IGxpbmUgYXQgZW5kIG9mIGZpbGVcbiIsDQog
ICAgLQkJCWN1cnJlbnRfZmlsZS0+bmFtZSwgeXlsaW5lbm8pOw0KICAgIC0NCiAgICAtCWlmIChj
dXJyZW50X2ZpbGUpIHsNCiAgICAtCQl6Y29uZl9lbmRmaWxlKCk7DQogICAgLQkJcmV0dXJuIFRf
RU9MOw0KICAgIC0JfQ0KICAgIC0JZmNsb3NlKHl5aW4pOw0KICAgIC0JeXl0ZXJtaW5hdGUoKTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtJSUNCiAgICAtDQogICAgLS8qIHNlY29uZCBzdGFnZSBsZXhl
ciAqLw0KICAgIC1pbnQgeXlsZXgodm9pZCkNCiAgICAtew0KICAgIC0JaW50IHRva2VuOw0KICAg
IC0NCiAgICAtcmVwZWF0Og0KICAgIC0JdG9rZW4gPSB5eWxleDEoKTsNCiAgICAtDQogICAgLQlp
ZiAocHJldl90b2tlbiA9PSBUX0VPTCB8fCBwcmV2X3Rva2VuID09IFRfSEVMUFRFWFQpIHsNCiAg
ICAtCQlpZiAodG9rZW4gPT0gVF9FT0wpIHsNCiAgICAtCQkJLyogRG8gbm90IHBhc3MgdW5uZWVk
ZWQgVF9FT0wgdG8gdGhlIHBhcnNlci4gKi8NCiAgICAtCQkJZ290byByZXBlYXQ7DQogICAgLQkJ
fSBlbHNlIHsNCiAgICAtCQkJLyoNCiAgICAtCQkJICogRm9yIHRoZSBwYXJzZXIsIHVwZGF0ZSBm
aWxlL2xpbmVubyBhdCB0aGUgZmlyc3QgdG9rZW4NCiAgICAtCQkJICogb2YgZWFjaCBzdGF0ZW1l
bnQuIEdlbmVyYWxseSwgXG4gaXMgYSBzdGF0ZW1lbnQNCiAgICAtCQkJICogdGVybWluYXRvciBp
biBLY29uZmlnLCBidXQgaXQgaXMgbm90IGFsd2F5cyB0cnVlDQogICAgLQkJCSAqIGJlY2F1c2Ug
XG4gY291bGQgYmUgZXNjYXBlZCBieSBhIGJhY2tzbGFzaC4NCiAgICAtCQkJICovDQogICAgLQkJ
CWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7DQogICAgLQkJCWN1cnJlbnRfcG9zLmxp
bmVubyA9IHl5bGluZW5vOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLQlpZiAocHJl
dl9wcmV2X3Rva2VuID09IFRfRU9MICYmIHByZXZfdG9rZW4gPT0gVF9XT1JEICYmDQogICAgLQkg
ICAgKHRva2VuID09IFRfRVFVQUwgfHwgdG9rZW4gPT0gVF9DT0xPTl9FUVVBTCB8fCB0b2tlbiA9
PSBUX1BMVVNfRVFVQUwpKQ0KICAgIC0JCUJFR0lOKEFTU0lHTl9WQUwpOw0KICAgIC0NCiAgICAt
CXByZXZfcHJldl90b2tlbiA9IHByZXZfdG9rZW47DQogICAgLQlwcmV2X3Rva2VuID0gdG9rZW47
DQogICAgLQ0KICAgIC0JcmV0dXJuIHRva2VuOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
Y2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIgKmluLCBzaXplX3QgbikNCiAgICAtew0KICAg
IC0JY2hhciAqb3V0Ow0KICAgIC0JaW50IGM7DQogICAgLQljaGFyIGMyOw0KICAgIC0JY29uc3Qg
Y2hhciAqcmVzdCwgKmVuZDsNCiAgICAtDQogICAgLQluZXdfc3RyaW5nKCk7DQogICAgLQlhcHBl
bmRfc3RyaW5nKGluLCBuKTsNCiAgICAtDQogICAgLQkvKiBnZXQgdGhlIHdob2xlIGxpbmUgYmVj
YXVzZSB3ZSBkbyBub3Qga25vdyB0aGUgZW5kIG9mIHRva2VuLiAqLw0KICAgIC0Jd2hpbGUgKChj
ID0gaW5wdXQoKSkgIT0gRU9GKSB7DQogICAgLQkJaWYgKGMgPT0gJ1xuJykgew0KICAgIC0JCQl1
bnB1dChjKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWMyID0gYzsNCiAgICAt
CQlhcHBlbmRfc3RyaW5nKCZjMiwgMSk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmVzdCA9IHRl
eHQ7DQogICAgLQlvdXQgPSBleHBhbmRfb25lX3Rva2VuKCZyZXN0KTsNCiAgICAtDQogICAgLQkv
KiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLw0KICAg
IC0JZW5kID0gcmVzdCArIHN0cmxlbihyZXN0KTsNCiAgICAtCXdoaWxlIChlbmQgPiByZXN0KQ0K
ICAgIC0JCXVucHV0KCotLWVuZCk7DQogICAgLQ0KICAgIC0JZnJlZSh0ZXh0KTsNCiAgICAtDQog
ICAgLQlyZXR1cm4gb3V0Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBhcHBlbmRf
ZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKnN0cikNCiAgICAtew0KICAgIC0JY29uc3QgY2hh
ciAqZW5kOw0KICAgIC0JY2hhciAqcmVzOw0KICAgIC0NCiAgICAtCXN0cisrOw0KICAgIC0NCiAg
ICAtCXJlcyA9IGV4cGFuZF9kb2xsYXIoJnN0cik7DQogICAgLQ0KICAgIC0JLyogcHVzaCBiYWNr
IHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRoZSBpbnB1dCBzdHJlYW0gKi8NCiAgICAtCWVuZCA9IHN0
ciArIHN0cmxlbihzdHIpOw0KICAgIC0Jd2hpbGUgKGVuZCA+IHN0cikNCiAgICAtCQl1bnB1dCgq
LS1lbmQpOw0KICAgIC0NCiAgICAtCWFwcGVuZF9zdHJpbmcocmVzLCBzdHJsZW4ocmVzKSk7DQog
ICAgLQ0KICAgIC0JZnJlZShyZXMpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHpjb25mX3N0
YXJ0aGVscCh2b2lkKQ0KICAgIC17DQogICAgLQluZXdfc3RyaW5nKCk7DQogICAgLQlsYXN0X3Rz
ID0gZmlyc3RfdHMgPSAwOw0KICAgIC0JQkVHSU4oSEVMUCk7DQogICAgLX0NCiAgICAtDQogICAg
LXN0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAodm9pZCkNCiAgICAtew0KICAgIC0JeXlsdmFsLnN0
cmluZyA9IHRleHQ7DQogICAgLQlCRUdJTihJTklUSUFMKTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
DQogICAgLS8qDQogICAgLSAqIFRyeSB0byBvcGVuIHNwZWNpZmllZCBmaWxlIHdpdGggZm9sbG93
aW5nIG5hbWVzOg0KICAgIC0gKiAuL25hbWUNCiAgICAtICogJChzcmN0cmVlKS9uYW1lDQogICAg
LSAqIFRoZSBsYXR0ZXIgaXMgdXNlZCB3aGVuIHNyY3RyZWUgaXMgc2VwYXJhdGUgZnJvbSBvYmp0
cmVlDQogICAgLSAqIHdoZW4gY29tcGlsaW5nIHRoZSBrZXJuZWwuDQogICAgLSAqIFJldHVybiBO
VUxMIGlmIGZpbGUgaXMgbm90IGZvdW5kLg0KICAgIC0gKi8NCiAgICAtRklMRSAqemNvbmZfZm9w
ZW4oY29uc3QgY2hhciAqbmFtZSkNCiAgICAtew0KICAgIC0JY2hhciAqZW52LCBmdWxsbmFtZVtQ
QVRIX01BWCsxXTsNCiAgICAtCUZJTEUgKmY7DQogICAgLQ0KICAgIC0JZiA9IGZvcGVuKG5hbWUs
ICJyIik7DQogICAgLQlpZiAoIWYgJiYgbmFtZSAhPSBOVUxMICYmIG5hbWVbMF0gIT0gJy8nKSB7
DQogICAgLQkJZW52ID0gZ2V0ZW52KFNSQ1RSRUUpOw0KICAgIC0JCWlmIChlbnYpIHsNCiAgICAt
CQkJc25wcmludGYoZnVsbG5hbWUsIHNpemVvZihmdWxsbmFtZSksDQogICAgLQkJCQkgIiVzLyVz
IiwgZW52LCBuYW1lKTsNCiAgICAtCQkJZiA9IGZvcGVuKGZ1bGxuYW1lLCAiciIpOw0KICAgIC0J
CX0NCiAgICAtCX0NCiAgICAtCXJldHVybiBmOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHpj
b25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgLXsNCiAgICAtCXl5aW4gPSB6Y29u
Zl9mb3BlbihuYW1lKTsNCiAgICAtCWlmICgheXlpbikgew0KICAgIC0JCWZwcmludGYoc3RkZXJy
LCAiY2FuJ3QgZmluZCBmaWxlICVzXG4iLCBuYW1lKTsNCiAgICAtCQlleGl0KDEpOw0KICAgIC0J
fQ0KICAgIC0NCiAgICAtCWN1cnJlbnRfYnVmID0geG1hbGxvYyhzaXplb2YoKmN1cnJlbnRfYnVm
KSk7DQogICAgLQltZW1zZXQoY3VycmVudF9idWYsIDAsIHNpemVvZigqY3VycmVudF9idWYpKTsN
CiAgICAtDQogICAgLQljdXJyZW50X2ZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsNCiAgICAtCXl5
bGluZW5vID0gMTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCB6Y29uZl9uZXh0ZmlsZShjb25z
dCBjaGFyICpuYW1lKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgZmlsZSAqaXRlcjsNCiAgICAtCXN0
cnVjdCBmaWxlICpmaWxlID0gZmlsZV9sb29rdXAobmFtZSk7DQogICAgLQlzdHJ1Y3QgYnVmZmVy
ICpidWYgPSB4bWFsbG9jKHNpemVvZigqYnVmKSk7DQogICAgLQltZW1zZXQoYnVmLCAwLCBzaXpl
b2YoKmJ1ZikpOw0KICAgIC0NCiAgICAtCWN1cnJlbnRfYnVmLT5zdGF0ZSA9IFlZX0NVUlJFTlRf
QlVGRkVSOw0KICAgIC0JeXlpbiA9IHpjb25mX2ZvcGVuKGZpbGUtPm5hbWUpOw0KICAgIC0JaWYg
KCF5eWluKSB7DQogICAgLQkJZnByaW50ZihzdGRlcnIsICIlczolZDogY2FuJ3Qgb3BlbiBmaWxl
IFwiJXNcIlxuIiwNCiAgICAtCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgZmls
ZS0+bmFtZSk7DQogICAgLQkJZXhpdCgxKTsNCiAgICAtCX0NCiAgICAtCXl5X3N3aXRjaF90b19i
dWZmZXIoeXlfY3JlYXRlX2J1ZmZlcih5eWluLCBZWV9CVUZfU0laRSkpOw0KICAgIC0JYnVmLT5w
YXJlbnQgPSBjdXJyZW50X2J1ZjsNCiAgICAtCWN1cnJlbnRfYnVmID0gYnVmOw0KICAgIC0NCiAg
ICAtCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5lbm87DQogICAgLQlmaWxlLT5wYXJlbnQg
PSBjdXJyZW50X2ZpbGU7DQogICAgLQ0KICAgIC0JZm9yIChpdGVyID0gY3VycmVudF9maWxlOyBp
dGVyOyBpdGVyID0gaXRlci0+cGFyZW50KSB7DQogICAgLQkJaWYgKCFzdHJjbXAoaXRlci0+bmFt
ZSwgZmlsZS0+bmFtZSkpIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsDQogICAgLQkJCQkiUmVj
dXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC5cbiINCiAgICAtCQkJCSJJbmNsdXNpb24gcGF0aDpc
biINCiAgICAtCQkJCSIgIGN1cnJlbnQgZmlsZSA6ICVzXG4iLCBmaWxlLT5uYW1lKTsNCiAgICAt
CQkJaXRlciA9IGZpbGU7DQogICAgLQkJCWRvIHsNCiAgICAtCQkJCWl0ZXIgPSBpdGVyLT5wYXJl
bnQ7DQogICAgLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgaW5jbHVkZWQgZnJvbTogJXM6JWRcbiIs
DQogICAgLQkJCQkJaXRlci0+bmFtZSwgaXRlci0+bGluZW5vIC0gMSk7DQogICAgLQkJCX0gd2hp
bGUgKHN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5uYW1lKSk7DQogICAgLQkJCWV4aXQoMSk7DQog
ICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXl5bGluZW5vID0gMTsNCiAgICAtCWN1cnJl
bnRfZmlsZSA9IGZpbGU7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgemNvbmZfbmV4dGZpbGVz
KGNvbnN0IGNoYXIgKndpbGRjYXJkKQ0KICAgIC17DQogICAgLQlnbG9iX3QgZyA9IHswfTsNCiAg
ICAtCWNoYXIgKip3Ow0KICAgIC0JaW50IGk7DQogICAgLQ0KICAgIC0JaWYgKGdsb2Iod2lsZGNh
cmQsIDAsIE5VTEwsICZnKSAhPSAwKSB7DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0J
aWYgKGcuZ2xfcGF0aHYgPT0gTlVMTCkgew0KICAgIC0JCWdsb2JmcmVlKCZnKTsNCiAgICAtCQly
ZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JLyogd29ya2luZyB0aHJvdWdoIGZpbGVzIGJh
Y2t3YXJkcywgc2luY2UNCiAgICAtCSAqIHdlJ3JlIGZpcnN0IHB1c2hpbmcgdGhlbSBvbiBhIHN0
YWNrDQogICAgLQkgKiBiZWZvcmUgYWN0dWFsbHkgaGFuZGxpbmcgdGhlbS4NCiAgICAtCSAqLw0K
ICAgIC0JZm9yIChpID0gZy5nbF9wYXRoYzsgaSA+IDA7IGktLSkgew0KICAgIC0JCXcgPSAmZy5n
bF9wYXRodltpIC0gMV07DQogICAgLQkJemNvbmZfbmV4dGZpbGUoKncpOw0KICAgIC0JfQ0KICAg
IC0NCiAgICAtCWdsb2JmcmVlKCZnKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQg
emNvbmZfZW5kZmlsZSh2b2lkKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7
DQogICAgLQ0KICAgIC0JY3VycmVudF9maWxlID0gY3VycmVudF9maWxlLT5wYXJlbnQ7DQogICAg
LQlpZiAoY3VycmVudF9maWxlKQ0KICAgIC0JCXl5bGluZW5vID0gY3VycmVudF9maWxlLT5saW5l
bm87DQogICAgLQ0KICAgIC0JcGFyZW50ID0gY3VycmVudF9idWYtPnBhcmVudDsNCiAgICAtCWlm
IChwYXJlbnQpIHsNCiAgICAtCQlmY2xvc2UoeXlpbik7DQogICAgLQkJeXlfZGVsZXRlX2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUik7DQogICAgLQkJeXlfc3dpdGNoX3RvX2J1ZmZlcihwYXJlbnQt
PnN0YXRlKTsNCiAgICAtCX0NCiAgICAtCWZyZWUoY3VycmVudF9idWYpOw0KICAgIC0JY3VycmVu
dF9idWYgPSBwYXJlbnQ7DQogICAgLX0NCiAgICAtDQogICAgLWludCB6Y29uZl9saW5lbm8odm9p
ZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIGN1cnJlbnRfcG9zLmxpbmVubzsNCiAgICAtfQ0KICAg
IC0NCiAgICAtY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKQ0KICAgIC17DQogICAgLQly
ZXR1cm4gY3VycmVudF9wb3MuZmlsZSA/IGN1cnJlbnRfcG9zLmZpbGUtPm5hbWUgOiAiPG5vbmU+
IjsNCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2xpc3QuaCBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvbGlzdC5oDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgaW5kZXggNDVjYjIzNy4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbGlzdC5oDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDEzMiArMCwwIEBADQogICAg
LS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQogICAgLSNpZm5kZWYgTElT
VF9IDQogICAgLSNkZWZpbmUgTElTVF9IDQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBDb3BpZWQg
ZnJvbSBpbmNsdWRlL2xpbnV4Ly4uLg0KICAgIC0gKi8NCiAgICAtDQogICAgLSN1bmRlZiBvZmZz
ZXRvZg0KICAgIC0jZGVmaW5lIG9mZnNldG9mKFRZUEUsIE1FTUJFUikgKChzaXplX3QpICYoKFRZ
UEUgKikwKS0+TUVNQkVSKQ0KICAgIC0NCiAgICAtLyoqDQogICAgLSAqIGNvbnRhaW5lcl9vZiAt
IGNhc3QgYSBtZW1iZXIgb2YgYSBzdHJ1Y3R1cmUgb3V0IHRvIHRoZSBjb250YWluaW5nIHN0cnVj
dHVyZQ0KICAgIC0gKiBAcHRyOiAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4NCiAg
ICAtICogQHR5cGU6ICAgICAgIHRoZSB0eXBlIG9mIHRoZSBjb250YWluZXIgc3RydWN0IHRoaXMg
aXMgZW1iZWRkZWQgaW4uDQogICAgLSAqIEBtZW1iZXI6ICAgICB0aGUgbmFtZSBvZiB0aGUgbWVt
YmVyIHdpdGhpbiB0aGUgc3RydWN0Lg0KICAgIC0gKg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBj
b250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpICh7ICAgICAgICAgICAgICAgICAgICAgIFwN
CiAgICAtCWNvbnN0IHR5cGVvZiggKCh0eXBlICopMCktPm1lbWJlciApICpfX21wdHIgPSAocHRy
KTsgICAgXA0KICAgIC0JKHR5cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxt
ZW1iZXIpICk7fSkNCiAgICAtDQogICAgLQ0KICAgIC1zdHJ1Y3QgbGlzdF9oZWFkIHsNCiAgICAt
CXN0cnVjdCBsaXN0X2hlYWQgKm5leHQsICpwcmV2Ow0KICAgIC19Ow0KICAgIC0NCiAgICAtDQog
ICAgLSNkZWZpbmUgTElTVF9IRUFEX0lOSVQobmFtZSkgeyAmKG5hbWUpLCAmKG5hbWUpIH0NCiAg
ICAtDQogICAgLSNkZWZpbmUgTElTVF9IRUFEKG5hbWUpIFwNCiAgICAtCXN0cnVjdCBsaXN0X2hl
YWQgbmFtZSA9IExJU1RfSEVBRF9JTklUKG5hbWUpDQogICAgLQ0KICAgIC0vKioNCiAgICAtICog
bGlzdF9lbnRyeSAtIGdldCB0aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5DQogICAgLSAqIEBwdHI6
CXRoZSAmc3RydWN0IGxpc3RfaGVhZCBwb2ludGVyLg0KICAgIC0gKiBAdHlwZToJdGhlIHR5cGUg
b2YgdGhlIHN0cnVjdCB0aGlzIGlzIGVtYmVkZGVkIGluLg0KICAgIC0gKiBAbWVtYmVyOgl0aGUg
bmFtZSBvZiB0aGUgbGlzdF9oZWFkIHdpdGhpbiB0aGUgc3RydWN0Lg0KICAgIC0gKi8NCiAgICAt
I2RlZmluZSBsaXN0X2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBcDQogICAgLQljb250YWluZXJf
b2YocHRyLCB0eXBlLCBtZW1iZXIpDQogICAgLQ0KICAgIC0vKioNCiAgICAtICogbGlzdF9mb3Jf
ZWFjaF9lbnRyeQktCWl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUNCiAgICAtICogQHBv
czoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4NCiAgICAtICogQGhlYWQ6CXRo
ZSBoZWFkIGZvciB5b3VyIGxpc3QuDQogICAgLSAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBs
aXN0X2hlYWQgd2l0aGluIHRoZSBzdHJ1Y3QuDQogICAgLSAqLw0KICAgIC0jZGVmaW5lIGxpc3Rf
Zm9yX2VhY2hfZW50cnkocG9zLCBoZWFkLCBtZW1iZXIpCQkJCVwNCiAgICAtCWZvciAocG9zID0g
bGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXA0KICAgIC0J
ICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJXA0KICAgIC0JICAgICBwb3MgPSBsaXN0X2Vu
dHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkNCiAgICAtDQogICAg
LS8qKg0KICAgIC0gKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUgLSBpdGVyYXRlIG92ZXIgbGlz
dCBvZiBnaXZlbiB0eXBlIHNhZmUgYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkNCiAgICAt
ICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4NCiAgICAtICogQG46
CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UNCiAgICAtICogQGhl
YWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuDQogICAgLSAqIEBtZW1iZXI6CXRoZSBuYW1lIG9m
IHRoZSBsaXN0X2hlYWQgd2l0aGluIHRoZSBzdHJ1Y3QuDQogICAgLSAqLw0KICAgIC0jZGVmaW5l
IGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sIGhlYWQsIG1lbWJlcikJCQlcDQogICAg
LQlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJl
ciksCVwNCiAgICAtCQluID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBv
cyksIG1lbWJlcik7CVwNCiAgICAtCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJCQkJCVwN
CiAgICAtCSAgICAgcG9zID0gbiwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVv
ZigqbiksIG1lbWJlcikpDQogICAgLQ0KICAgIC0vKioNCiAgICAtICogbGlzdF9lbXB0eSAtIHRl
c3RzIHdoZXRoZXIgYSBsaXN0IGlzIGVtcHR5DQogICAgLSAqIEBoZWFkOiB0aGUgbGlzdCB0byB0
ZXN0Lg0KICAgIC0gKi8NCiAgICAtc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShjb25zdCBz
dHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQ0KICAgIC17DQogICAgLQlyZXR1cm4gaGVhZC0+bmV4dCA9
PSBoZWFkOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBJbnNlcnQgYSBuZXcgZW50
cnkgYmV0d2VlbiB0d28ga25vd24gY29uc2VjdXRpdmUgZW50cmllcy4NCiAgICAtICoNCiAgICAt
ICogVGhpcyBpcyBvbmx5IGZvciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlvbiB3aGVyZSB3ZSBr
bm93DQogICAgLSAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQ0KICAgIC0gKi8NCiAg
ICAtc3RhdGljIGlubGluZSB2b2lkIF9fbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqX25ldywN
CiAgICAtCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcHJldiwNCiAgICAtCQkJICAgICAgc3Ry
dWN0IGxpc3RfaGVhZCAqbmV4dCkNCiAgICAtew0KICAgIC0JbmV4dC0+cHJldiA9IF9uZXc7DQog
ICAgLQlfbmV3LT5uZXh0ID0gbmV4dDsNCiAgICAtCV9uZXctPnByZXYgPSBwcmV2Ow0KICAgIC0J
cHJldi0+bmV4dCA9IF9uZXc7DQogICAgLX0NCiAgICAtDQogICAgLS8qKg0KICAgIC0gKiBsaXN0
X2FkZF90YWlsIC0gYWRkIGEgbmV3IGVudHJ5DQogICAgLSAqIEBuZXc6IG5ldyBlbnRyeSB0byBi
ZSBhZGRlZA0KICAgIC0gKiBAaGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBiZWZvcmUNCiAgICAt
ICoNCiAgICAtICogSW5zZXJ0IGEgbmV3IGVudHJ5IGJlZm9yZSB0aGUgc3BlY2lmaWVkIGhlYWQu
DQogICAgLSAqIFRoaXMgaXMgdXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgcXVldWVzLg0KICAgIC0g
Ki8NCiAgICAtc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0IGxpc3RfaGVh
ZCAqX25ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkNCiAgICAtew0KICAgIC0JX19saXN0X2Fk
ZChfbmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAt
ICogRGVsZXRlIGEgbGlzdCBlbnRyeSBieSBtYWtpbmcgdGhlIHByZXYvbmV4dCBlbnRyaWVzDQog
ICAgLSAqIHBvaW50IHRvIGVhY2ggb3RoZXIuDQogICAgLSAqDQogICAgLSAqIFRoaXMgaXMgb25s
eSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdw0KICAgIC0gKiB0
aGUgcHJldi9uZXh0IGVudHJpZXMgYWxyZWFkeSENCiAgICAtICovDQogICAgLXN0YXRpYyBpbmxp
bmUgdm9pZCBfX2xpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVjdCBsaXN0X2hl
YWQgKm5leHQpDQogICAgLXsNCiAgICAtCW5leHQtPnByZXYgPSBwcmV2Ow0KICAgIC0JcHJldi0+
bmV4dCA9IG5leHQ7DQogICAgLX0NCiAgICAtDQogICAgLSNkZWZpbmUgTElTVF9QT0lTT04xICAo
KHZvaWQgKikgMHgwMDEwMDEwMCkNCiAgICAtI2RlZmluZSBMSVNUX1BPSVNPTjIgICgodm9pZCAq
KSAweDAwMjAwMjAwKQ0KICAgIC0vKioNCiAgICAtICogbGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5
IGZyb20gbGlzdC4NCiAgICAtICogQGVudHJ5OiB0aGUgZWxlbWVudCB0byBkZWxldGUgZnJvbSB0
aGUgbGlzdC4NCiAgICAtICogTm90ZTogbGlzdF9lbXB0eSgpIG9uIGVudHJ5IGRvZXMgbm90IHJl
dHVybiB0cnVlIGFmdGVyIHRoaXMsIHRoZSBlbnRyeSBpcw0KICAgIC0gKiBpbiBhbiB1bmRlZmlu
ZWQgc3RhdGUuDQogICAgLSAqLw0KICAgIC1zdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3Ry
dWN0IGxpc3RfaGVhZCAqZW50cnkpDQogICAgLXsNCiAgICAtCV9fbGlzdF9kZWwoZW50cnktPnBy
ZXYsIGVudHJ5LT5uZXh0KTsNCiAgICAtCWVudHJ5LT5uZXh0ID0gKHN0cnVjdCBsaXN0X2hlYWQq
KUxJU1RfUE9JU09OMTsNCiAgICAtCWVudHJ5LT5wcmV2ID0gKHN0cnVjdCBsaXN0X2hlYWQqKUxJ
U1RfUE9JU09OMjsNCiAgICAtfQ0KICAgIC0jZW5kaWYNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy9sa2MuaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgNCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA2OWQyYzc3Li4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAt
MSwxNjAgKzAsMCBAQA0KICAgIC0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq
Lw0KICAgIC0vKg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBw
ZWxAbGludXgtbTY4ay5vcmc+DQogICAgLSAqLw0KICAgIC0NCiAgICAtI2lmbmRlZiBMS0NfSA0K
ICAgIC0jZGVmaW5lIExLQ19IDQogICAgLQ0KICAgIC0jaW5jbHVkZSAiZXhwci5oIg0KICAgIC0N
CiAgICAtI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgLWV4dGVybiAiQyIgew0KICAgIC0jZW5kaWYN
CiAgICAtDQogICAgLSNpbmNsdWRlICJsa2NfcHJvdG8uaCINCiAgICAtDQogICAgLSNkZWZpbmUg
U1JDVFJFRSAic3JjdHJlZSINCiAgICAtDQogICAgLSNpZm5kZWYgUEFDS0FHRQ0KICAgIC0jZGVm
aW5lIFBBQ0tBR0UgImxpbnV4Ig0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZm5kZWYgQ09O
RklHXw0KICAgIC0jZGVmaW5lIENPTkZJR18gIkNPTkZJR18iDQogICAgLSNlbmRpZg0KICAgIC1z
dGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKkNPTkZJR19wcmVmaXgodm9pZCkNCiAgICAtew0KICAg
IC0JcmV0dXJuIGdldGVudiggIkNPTkZJR18iICkgPzogQ09ORklHXzsNCiAgICAtfQ0KICAgIC0j
dW5kZWYgQ09ORklHXw0KICAgIC0jZGVmaW5lIENPTkZJR18gQ09ORklHX3ByZWZpeCgpDQogICAg
LQ0KICAgIC1lbnVtIGNvbmZfZGVmX21vZGUgew0KICAgIC0JZGVmX2RlZmF1bHQsDQogICAgLQlk
ZWZfeWVzLA0KICAgIC0JZGVmX21vZCwNCiAgICAtCWRlZl9ubywNCiAgICAtCWRlZl9yYW5kb20N
CiAgICAtfTsNCiAgICAtDQogICAgLWV4dGVybiBpbnQgeXlsaW5lbm87DQogICAgLXZvaWQgemNv
bmZkdW1wKEZJTEUgKm91dCk7DQogICAgLXZvaWQgemNvbmZfc3RhcnRoZWxwKHZvaWQpOw0KICAg
IC1GSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKTsNCiAgICAtdm9pZCB6Y29uZl9p
bml0c2Nhbihjb25zdCBjaGFyICpuYW1lKTsNCiAgICAtdm9pZCB6Y29uZl9uZXh0ZmlsZShjb25z
dCBjaGFyICpuYW1lKTsNCiAgICAtdm9pZCB6Y29uZl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqbmFt
ZSk7DQogICAgLWludCB6Y29uZl9saW5lbm8odm9pZCk7DQogICAgLWNvbnN0IGNoYXIgKnpjb25m
X2N1cm5hbWUodm9pZCk7DQogICAgLQ0KICAgIC0vKiBjb25mZGF0YS5jICovDQogICAgLWNvbnN0
IGNoYXIgKmNvbmZfZ2V0X2NvbmZpZ25hbWUodm9pZCk7DQogICAgLWNoYXIgKmNvbmZfZ2V0X2Rl
ZmF1bHRfY29uZm5hbWUodm9pZCk7DQogICAgLXZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50
IGNvdW50KTsNCiAgICAtdm9pZCBzeW1fYWRkX2NoYW5nZV9jb3VudChpbnQgY291bnQpOw0KICAg
IC1ib29sIGNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhlbnVtIGNvbmZfZGVmX21vZGUgbW9kZSk7
DQogICAgLXZvaWQgc2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pOw0K
ICAgIC0NCiAgICAtLyogY29uZmRhdGEuYyBhbmQgZXhwci5jICovDQogICAgLXN0YXRpYyBpbmxp
bmUgdm9pZCB4ZndyaXRlKGNvbnN0IHZvaWQgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IGNvdW50
LCBGSUxFICpvdXQpDQogICAgLXsNCiAgICAtCWFzc2VydChsZW4gIT0gMCk7DQogICAgLQ0KICAg
IC0JaWYgKGZ3cml0ZShzdHIsIGxlbiwgY291bnQsIG91dCkgIT0gY291bnQpDQogICAgLQkJZnBy
aW50ZihzdGRlcnIsICJFcnJvciBpbiB3cml0aW5nIG9yIGVuZCBvZiBmaWxlLlxuIik7DQogICAg
LX0NCiAgICAtDQogICAgLS8qIG1lbnUuYyAqLw0KICAgIC12b2lkIF9tZW51X2luaXQodm9pZCk7
DQogICAgLXZvaWQgbWVudV93YXJuKHN0cnVjdCBtZW51ICptZW51LCBjb25zdCBjaGFyICpmbXQs
IC4uLik7DQogICAgLXN0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpOw0KICAgIC12b2lk
IG1lbnVfZW5kX21lbnUodm9pZCk7DQogICAgLXZvaWQgbWVudV9hZGRfZW50cnkoc3RydWN0IHN5
bWJvbCAqc3ltKTsNCiAgICAtdm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCk7DQog
ICAgLXZvaWQgbWVudV9hZGRfdmlzaWJpbGl0eShzdHJ1Y3QgZXhwciAqZGVwKTsNCiAgICAtc3Ry
dWN0IHByb3BlcnR5ICptZW51X2FkZF9wcm9tcHQoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAq
cHJvbXB0LCBzdHJ1Y3QgZXhwciAqZGVwKTsNCiAgICAtdm9pZCBtZW51X2FkZF9leHByKGVudW0g
cHJvcF90eXBlIHR5cGUsIHN0cnVjdCBleHByICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKTsNCiAg
ICAtdm9pZCBtZW51X2FkZF9zeW1ib2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJv
bCAqc3ltLCBzdHJ1Y3QgZXhwciAqZGVwKTsNCiAgICAtdm9pZCBtZW51X2FkZF9vcHRpb25fbW9k
dWxlcyh2b2lkKTsNCiAgICAtdm9pZCBtZW51X2FkZF9vcHRpb25fZGVmY29uZmlnX2xpc3Qodm9p
ZCk7DQogICAgLXZvaWQgbWVudV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3kodm9pZCk7DQogICAg
LXZvaWQgbWVudV9maW5hbGl6ZShzdHJ1Y3QgbWVudSAqcGFyZW50KTsNCiAgICAtdm9pZCBtZW51
X3NldF90eXBlKGludCB0eXBlKTsNCiAgICAtDQogICAgLS8qIHV0aWwuYyAqLw0KICAgIC1zdHJ1
Y3QgZmlsZSAqZmlsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7DQogICAgLXZvaWQgKnhtYWxs
b2Moc2l6ZV90IHNpemUpOw0KICAgIC12b2lkICp4Y2FsbG9jKHNpemVfdCBubWVtYiwgc2l6ZV90
IHNpemUpOw0KICAgIC12b2lkICp4cmVhbGxvYyh2b2lkICpwLCBzaXplX3Qgc2l6ZSk7DQogICAg
LWNoYXIgKnhzdHJkdXAoY29uc3QgY2hhciAqcyk7DQogICAgLWNoYXIgKnhzdHJuZHVwKGNvbnN0
IGNoYXIgKnMsIHNpemVfdCBuKTsNCiAgICAtDQogICAgLS8qIGxleGVyLmwgKi8NCiAgICAtaW50
IHl5bGV4KHZvaWQpOw0KICAgIC0NCiAgICAtc3RydWN0IGdzdHIgew0KICAgIC0Jc2l6ZV90IGxl
bjsNCiAgICAtCWNoYXIgICpzOw0KICAgIC0JLyoNCiAgICAtCSogd2hlbiBtYXhfd2lkdGggaXMg
bm90IHplcm8gbG9uZyBsaW5lcyBpbiBzdHJpbmcgcyAoaWYgYW55KSBnZXQNCiAgICAtCSogd3Jh
cHBlZCBub3QgdG8gZXhjZWVkIHRoZSBtYXhfd2lkdGggdmFsdWUNCiAgICAtCSovDQogICAgLQlp
bnQgbWF4X3dpZHRoOw0KICAgIC19Ow0KICAgIC1zdHJ1Y3QgZ3N0ciBzdHJfbmV3KHZvaWQpOw0K
ICAgIC12b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3RyICpncyk7DQogICAgLXZvaWQgc3RyX2FwcGVu
ZChzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKnMpOw0KICAgIC12b2lkIHN0cl9wcmludGYo
c3RydWN0IGdzdHIgKmdzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7DQogICAgLWNvbnN0IGNoYXIg
KnN0cl9nZXQoc3RydWN0IGdzdHIgKmdzKTsNCiAgICAtDQogICAgLS8qIHN5bWJvbC5jICovDQog
ICAgLXZvaWQgc3ltX2NsZWFyX2FsbF92YWxpZCh2b2lkKTsNCiAgICAtc3RydWN0IHN5bWJvbCAq
c3ltX2Nob2ljZV9kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLXN0cnVjdCBwcm9w
ZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLWNvbnN0
IGNoYXIgKnN5bV9nZXRfc3RyaW5nX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAt
c3RydWN0IHN5bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAt
c3RydWN0IHByb3BlcnR5ICpwcm9wX2FsbG9jKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBz
eW1ib2wgKnN5bSk7DQogICAgLXN0cnVjdCBzeW1ib2wgKnByb3BfZ2V0X3N5bWJvbChzdHJ1Y3Qg
cHJvcGVydHkgKnByb3ApOw0KICAgIC0NCiAgICAtc3RhdGljIGlubGluZSB0cmlzdGF0ZSBzeW1f
Z2V0X3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0JcmV0
dXJuIHN5bS0+Y3Vyci50cmk7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC1zdGF0aWMgaW5s
aW5lIHN0cnVjdCBzeW1ib2wgKnN5bV9nZXRfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5
bSkNCiAgICAtew0KICAgIC0JcmV0dXJuIChzdHJ1Y3Qgc3ltYm9sICopc3ltLT5jdXJyLnZhbDsN
CiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGlubGluZSBib29sIHN5bV9zZXRfY2hvaWNlX3Zh
bHVlKHN0cnVjdCBzeW1ib2wgKmNoLCBzdHJ1Y3Qgc3ltYm9sICpjaHZhbCkNCiAgICAtew0KICAg
IC0JcmV0dXJuIHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2h2YWwsIHllcyk7DQogICAgLX0NCiAg
ICAtDQogICAgLXN0YXRpYyBpbmxpbmUgYm9vbCBzeW1faXNfY2hvaWNlKHN0cnVjdCBzeW1ib2wg
KnN5bSkNCiAgICAtew0KICAgIC0JcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFID8g
dHJ1ZSA6IGZhbHNlOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW5saW5lIGJvb2wgc3lt
X2lzX2Nob2ljZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXJldHVy
biBzeW0tPmZsYWdzICYgU1lNQk9MX0NIT0lDRVZBTCA/IHRydWUgOiBmYWxzZTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtc3RhdGljIGlubGluZSBib29sIHN5bV9pc19vcHRpb25hbChzdHJ1Y3Qgc3lt
Ym9sICpzeW0pDQogICAgLXsNCiAgICAtCXJldHVybiBzeW0tPmZsYWdzICYgU1lNQk9MX09QVElP
TkFMID8gdHJ1ZSA6IGZhbHNlOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW5saW5lIGJv
b2wgc3ltX2hhc192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXJldHVy
biBzeW0tPmZsYWdzICYgU1lNQk9MX0RFRl9VU0VSID8gdHJ1ZSA6IGZhbHNlOw0KICAgIC19DQog
ICAgLQ0KICAgIC0jaWZkZWYgX19jcGx1c3BsdXMNCiAgICAtfQ0KICAgIC0jZW5kaWYNCiAgICAt
DQogICAgLSNlbmRpZiAvKiBMS0NfSCAqLw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L2xrY19wcm90by5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2NfcHJvdG8uaA0KICAg
IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDg2YzI2NzUuLjAwMDAwMDANCiAg
ICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xrY19wcm90by5oDQogICAgKysrIC9kZXYvbnVs
bA0KICAgIEBAIC0xLDY2ICswLDAgQEANCiAgICAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEdQTC0yLjAgKi8NCiAgICAtI2luY2x1ZGUgPHN0ZGFyZy5oPg0KICAgIC0NCiAgICAtLyogY29u
ZmRhdGEuYyAqLw0KICAgIC12b2lkIGNvbmZfcGFyc2UoY29uc3QgY2hhciAqbmFtZSk7DQogICAg
LWludCBjb25mX3JlYWQoY29uc3QgY2hhciAqbmFtZSk7DQogICAgLWludCBjb25mX3JlYWRfc2lt
cGxlKGNvbnN0IGNoYXIgKm5hbWUsIGludCk7DQogICAgLWludCBjb25mX3dyaXRlX2RlZmNvbmZp
Zyhjb25zdCBjaGFyICpuYW1lKTsNCiAgICAtaW50IGNvbmZfd3JpdGUoY29uc3QgY2hhciAqbmFt
ZSk7DQogICAgLWludCBjb25mX3dyaXRlX2F1dG9jb25mKGludCBvdmVyd3JpdGUpOw0KICAgIC1i
b29sIGNvbmZfZ2V0X2NoYW5nZWQodm9pZCk7DQogICAgLXZvaWQgY29uZl9zZXRfY2hhbmdlZF9j
YWxsYmFjayh2b2lkICgqZm4pKHZvaWQpKTsNCiAgICAtdm9pZCBjb25mX3NldF9tZXNzYWdlX2Nh
bGxiYWNrKHZvaWQgKCpmbikoY29uc3QgY2hhciAqcykpOw0KICAgIC0NCiAgICAtLyogbWVudS5j
ICovDQogICAgLWV4dGVybiBzdHJ1Y3QgbWVudSByb290bWVudTsNCiAgICAtDQogICAgLWJvb2wg
bWVudV9pc19lbXB0eShzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgLWJvb2wgbWVudV9pc192aXNp
YmxlKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtYm9vbCBtZW51X2hhc19wcm9tcHQoc3RydWN0
IG1lbnUgKm1lbnUpOw0KICAgIC1jb25zdCBjaGFyICogbWVudV9nZXRfcHJvbXB0KHN0cnVjdCBt
ZW51ICptZW51KTsNCiAgICAtc3RydWN0IG1lbnUgKiBtZW51X2dldF9yb290X21lbnUoc3RydWN0
IG1lbnUgKm1lbnUpOw0KICAgIC1zdHJ1Y3QgbWVudSAqIG1lbnVfZ2V0X3BhcmVudF9tZW51KHN0
cnVjdCBtZW51ICptZW51KTsNCiAgICAtYm9vbCBtZW51X2hhc19oZWxwKHN0cnVjdCBtZW51ICpt
ZW51KTsNCiAgICAtY29uc3QgY2hhciAqIG1lbnVfZ2V0X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUp
Ow0KICAgIC1zdHJ1Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0cihzdHJ1Y3Qgc3ltYm9sICoqc3lt
X2Fyciwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7DQogICAgLXZvaWQgbWVudV9nZXRfZXh0X2hl
bHAoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBnc3RyICpoZWxwKTsNCiAgICAtDQogICAgLS8q
IHN5bWJvbC5jICovDQogICAgLWV4dGVybiBzdHJ1Y3Qgc3ltYm9sICogc3ltYm9sX2hhc2hbU1lN
Qk9MX0hBU0hTSVpFXTsNCiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2wgKiBzeW1fbG9va3VwKGNv
bnN0IGNoYXIgKm5hbWUsIGludCBmbGFncyk7DQogICAgLXN0cnVjdCBzeW1ib2wgKiBzeW1fZmlu
ZChjb25zdCBjaGFyICpuYW1lKTsNCiAgICAtY29uc3QgY2hhciAqIHN5bV9lc2NhcGVfc3RyaW5n
X3ZhbHVlKGNvbnN0IGNoYXIgKmluKTsNCiAgICAtc3RydWN0IHN5bWJvbCAqKiBzeW1fcmVfc2Vh
cmNoKGNvbnN0IGNoYXIgKnBhdHRlcm4pOw0KICAgIC1jb25zdCBjaGFyICogc3ltX3R5cGVfbmFt
ZShlbnVtIHN5bWJvbF90eXBlIHR5cGUpOw0KICAgIC12b2lkIHN5bV9jYWxjX3ZhbHVlKHN0cnVj
dCBzeW1ib2wgKnN5bSk7DQogICAgLWVudW0gc3ltYm9sX3R5cGUgc3ltX2dldF90eXBlKHN0cnVj
dCBzeW1ib2wgKnN5bSk7DQogICAgLWJvb2wgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzdHJ1
Y3Qgc3ltYm9sICpzeW0sdHJpc3RhdGUgdHJpKTsNCiAgICAtYm9vbCBzeW1fc2V0X3RyaXN0YXRl
X3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSx0cmlzdGF0ZSB0cmkpOw0KICAgIC10cmlzdGF0ZSBz
eW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLWJvb2wg
c3ltX3N0cmluZ192YWxpZChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCk7
DQogICAgLWJvb2wgc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3RydWN0IHN5bWJvbCAqc3ltLCBj
b25zdCBjaGFyICpzdHIpOw0KICAgIC1ib29sIHN5bV9zZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBz
eW1ib2wgKnN5bSwgY29uc3QgY2hhciAqbmV3dmFsKTsNCiAgICAtYm9vbCBzeW1faXNfY2hhbmdh
YmxlKHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLXN0cnVjdCBwcm9wZXJ0eSAqIHN5bV9nZXRf
Y2hvaWNlX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICAtY29uc3QgY2hhciAqIHN5bV9n
ZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgLQ0KICAgIC1jb25zdCBj
aGFyICogcHJvcF9nZXRfdHlwZV9uYW1lKGVudW0gcHJvcF90eXBlIHR5cGUpOw0KICAgIC0NCiAg
ICAtLyogcHJlcHJvY2Vzcy5jICovDQogICAgLWVudW0gdmFyaWFibGVfZmxhdm9yIHsNCiAgICAt
CVZBUl9TSU1QTEUsDQogICAgLQlWQVJfUkVDVVJTSVZFLA0KICAgIC0JVkFSX0FQUEVORCwNCiAg
ICAtfTsNCiAgICAtdm9pZCBlbnZfd3JpdGVfZGVwKEZJTEUgKmYsIGNvbnN0IGNoYXIgKmF1dG9f
Y29uZl9uYW1lKTsNCiAgICAtdm9pZCB2YXJpYWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqdmFsdWUsDQogICAgLQkJICBlbnVtIHZhcmlhYmxlX2ZsYXZvciBmbGF2b3IpOw0K
ICAgIC12b2lkIHZhcmlhYmxlX2FsbF9kZWwodm9pZCk7DQogICAgLWNoYXIgKmV4cGFuZF9zdHJp
bmcoY29uc3QgY2hhciAqaW4pOw0KICAgIC1jaGFyICpleHBhbmRfZG9sbGFyKGNvbnN0IGNoYXIg
KipzdHIpOw0KICAgIC1jaGFyICpleHBhbmRfb25lX3Rva2VuKGNvbnN0IGNoYXIgKipzdHIpOw0K
ICAgIC0NCiAgICAtLyogZXhwci5jICovDQogICAgLXZvaWQgZXhwcl9wcmludChzdHJ1Y3QgZXhw
ciAqZSwgdm9pZCAoKmZuKSh2b2lkICosIHN0cnVjdCBzeW1ib2wgKiwgY29uc3QgY2hhciAqKSwg
dm9pZCAqZGF0YSwgaW50IHByZXZ0b2tlbik7DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9s
eGRpYWxvZy9CSUcuRkFULldBUk5JTkcNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCA3Y2I1YTdlLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9s
eGRpYWxvZy9CSUcuRkFULldBUk5JTkcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsNCAr
MCwwIEBADQogICAgLVRoaXMgaXMgTk9UIHRoZSBvZmZpY2lhbCB2ZXJzaW9uIG9mIGRpYWxvZy4g
IFRoaXMgdmVyc2lvbiBoYXMgYmVlbg0KICAgIC1zaWduaWZpY2FudGx5IG1vZGlmaWVkIGZyb20g
dGhlIG9yaWdpbmFsLiAgSXQgaXMgZm9yIHVzZSBieSB0aGUgTGludXgNCiAgICAta2VybmVsIGNv
bmZpZ3VyYXRpb24gc2NyaXB0LiAgUGxlYXNlIGRvIG5vdCBib3RoZXIgU2F2aW8gTGFtIHdpdGgN
CiAgICAtcXVlc3Rpb25zIGFib3V0IHRoaXMgcHJvZ3JhbS4NCiAgICBkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9jaGVja2xpc3QuYyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbHhkaWFsb2cvY2hlY2tsaXN0LmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCBmZDE2MWNmLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9s
eGRpYWxvZy9jaGVja2xpc3QuYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwzMTkgKzAs
MCBAQA0KICAgIC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCiAgICAtLyoN
CiAgICAtICogIGNoZWNrbGlzdC5jIC0tIGltcGxlbWVudHMgdGhlIGNoZWNrbGlzdCBib3gNCiAg
ICAtICoNCiAgICAtICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Vo
ay5oaykNCiAgICAtICogICAgIFN0dWFydCBIZXJiZXJ0IC0gUy5IZXJiZXJ0QHNoZWZmaWVsZC5h
Yy51azogcmFkaW9saXN0IGV4dGVuc2lvbg0KICAgIC0gKiAgICAgQWxlc3NhbmRybyBSdWJpbmkg
LSBydWJpbmlAaXB2dmlzLnVuaXB2Lml0OiBtZXJnZWQgdGhlIHR3bw0KICAgIC0gKiAgTU9ESUZJ
RUQgRk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBj
ZncuY29tKQ0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRlICJkaWFsb2cuaCINCiAgICAt
DQogICAgLXN0YXRpYyBpbnQgbGlzdF93aWR0aCwgY2hlY2tfeCwgaXRlbV94Ow0KICAgIC0NCiAg
ICAtLyoNCiAgICAtICogUHJpbnQgbGlzdCBpdGVtDQogICAgLSAqLw0KICAgIC1zdGF0aWMgdm9p
ZCBwcmludF9pdGVtKFdJTkRPVyAqIHdpbiwgaW50IGNob2ljZSwgaW50IHNlbGVjdGVkKQ0KICAg
IC17DQogICAgLQlpbnQgaTsNCiAgICAtCWNoYXIgKmxpc3RfaXRlbSA9IG1hbGxvYyhsaXN0X3dp
ZHRoICsgMSk7DQogICAgLQ0KICAgIC0Jc3RybmNweShsaXN0X2l0ZW0sIGl0ZW1fc3RyKCksIGxp
c3Rfd2lkdGggLSBpdGVtX3gpOw0KICAgIC0JbGlzdF9pdGVtW2xpc3Rfd2lkdGggLSBpdGVtX3hd
ID0gJ1wwJzsNCiAgICAtDQogICAgLQkvKiBDbGVhciAncmVzaWR1ZScgb2YgbGFzdCBpdGVtICov
DQogICAgLQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7DQogICAgLQl3bW92ZSh3aW4s
IGNob2ljZSwgMCk7DQogICAgLQlmb3IgKGkgPSAwOyBpIDwgbGlzdF93aWR0aDsgaSsrKQ0KICAg
IC0JCXdhZGRjaCh3aW4sICcgJyk7DQogICAgLQ0KICAgIC0Jd21vdmUod2luLCBjaG9pY2UsIGNo
ZWNrX3gpOw0KICAgIC0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5jaGVja19zZWxlY3Rl
ZC5hdHINCiAgICAtCQkgOiBkbGcuY2hlY2suYXRyKTsNCiAgICAtCWlmICghaXRlbV9pc190YWco
JzonKSkNCiAgICAtCQl3cHJpbnR3KHdpbiwgIiglYykiLCBpdGVtX2lzX3RhZygnWCcpID8gJ1gn
IDogJyAnKTsNCiAgICAtDQogICAgLQl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLnRhZ19z
ZWxlY3RlZC5hdHIgOiBkbGcudGFnLmF0cik7DQogICAgLQltdndhZGRjaCh3aW4sIGNob2ljZSwg
aXRlbV94LCBsaXN0X2l0ZW1bMF0pOw0KICAgIC0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRs
Zy5pdGVtX3NlbGVjdGVkLmF0ciA6IGRsZy5pdGVtLmF0cik7DQogICAgLQl3YWRkc3RyKHdpbiwg
bGlzdF9pdGVtICsgMSk7DQogICAgLQlpZiAoc2VsZWN0ZWQpIHsNCiAgICAtCQl3bW92ZSh3aW4s
IGNob2ljZSwgY2hlY2tfeCArIDEpOw0KICAgIC0JCXdyZWZyZXNoKHdpbik7DQogICAgLQl9DQog
ICAgLQlmcmVlKGxpc3RfaXRlbSk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIFBy
aW50IHRoZSBzY3JvbGwgaW5kaWNhdG9ycy4NCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkIHBy
aW50X2Fycm93cyhXSU5ET1cgKiB3aW4sIGludCBjaG9pY2UsIGludCBpdGVtX25vLCBpbnQgc2Ny
b2xsLA0KICAgIC0JICAgICBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQpDQogICAgLXsNCiAgICAt
CXdtb3ZlKHdpbiwgeSwgeCk7DQogICAgLQ0KICAgIC0JaWYgKHNjcm9sbCA+IDApIHsNCiAgICAt
CQl3YXR0cnNldCh3aW4sIGRsZy51YXJyb3cuYXRyKTsNCiAgICAtCQl3YWRkY2god2luLCBBQ1Nf
VUFSUk9XKTsNCiAgICAtCQl3YWRkc3RyKHdpbiwgIigtKSIpOw0KICAgIC0JfSBlbHNlIHsNCiAg
ICAtCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0cik7DQogICAgLQkJd2FkZGNoKHdpbiwg
QUNTX0hMSU5FKTsNCiAgICAtCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgIC0JCXdhZGRj
aCh3aW4sIEFDU19ITElORSk7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAt
CX0NCiAgICAtDQogICAgLQl5ID0geSArIGhlaWdodCArIDE7DQogICAgLQl3bW92ZSh3aW4sIHks
IHgpOw0KICAgIC0NCiAgICAtCWlmICgoaGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGNo
b2ljZSA8IGl0ZW1fbm8gLSAxKSkgew0KICAgIC0JCXdhdHRyc2V0KHdpbiwgZGxnLmRhcnJvdy5h
dHIpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFDU19EQVJST1cpOw0KICAgIC0JCXdhZGRzdHIod2lu
LCAiKCspIik7DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVi
b3hfYm9yZGVyLmF0cik7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCQl3
YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQog
ICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAg
ICAtLyoNCiAgICAtICogIERpc3BsYXkgdGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMNCiAgICAtICov
DQogICAgLXN0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQgaGVp
Z2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkNCiAgICAtew0KICAgIC0JaW50IHggPSB3aWR0
aCAvIDIgLSAxMTsNCiAgICAtCWludCB5ID0gaGVpZ2h0IC0gMjsNCiAgICAtDQogICAgLQlwcmlu
dF9idXR0b24oZGlhbG9nLCAiU2VsZWN0IiwgeSwgeCwgc2VsZWN0ZWQgPT0gMCk7DQogICAgLQlw
cmludF9idXR0b24oZGlhbG9nLCAiIEhlbHAgIiwgeSwgeCArIDE0LCBzZWxlY3RlZCA9PSAxKTsN
CiAgICAtDQogICAgLQl3bW92ZShkaWFsb2csIHksIHggKyAxICsgMTQgKiBzZWxlY3RlZCk7DQog
ICAgLQl3cmVmcmVzaChkaWFsb2cpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBE
aXNwbGF5IGEgZGlhbG9nIGJveCB3aXRoIGEgbGlzdCBvZiBvcHRpb25zIHRoYXQgY2FuIGJlIHR1
cm5lZCBvbiBvciBvZmYNCiAgICAtICogaW4gdGhlIHN0eWxlIG9mIHJhZGlvbGlzdCAob25seSBv
bmUgb3B0aW9uIHR1cm5lZCBvbiBhdCBhIHRpbWUpLg0KICAgIC0gKi8NCiAgICAtaW50IGRpYWxv
Z19jaGVja2xpc3QoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhl
aWdodCwNCiAgICAtCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0KQ0KICAgIC17DQog
ICAgLQlpbnQgaSwgeCwgeSwgYm94X3gsIGJveF95Ow0KICAgIC0JaW50IGtleSA9IDAsIGJ1dHRv
biA9IDAsIGNob2ljZSA9IDAsIHNjcm9sbCA9IDAsIG1heF9jaG9pY2U7DQogICAgLQlXSU5ET1cg
KmRpYWxvZywgKmxpc3Q7DQogICAgLQ0KICAgIC0JLyogd2hpY2ggaXRlbSB0byBoaWdobGlnaHQg
Ki8NCiAgICAtCWl0ZW1fZm9yZWFjaCgpIHsNCiAgICAtCQlpZiAoaXRlbV9pc190YWcoJ1gnKSkN
CiAgICAtCQkJY2hvaWNlID0gaXRlbV9uKCk7DQogICAgLQkJaWYgKGl0ZW1faXNfc2VsZWN0ZWQo
KSkgew0KICAgIC0JCQljaG9pY2UgPSBpdGVtX24oKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
fQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtZG9fcmVzaXplOg0KICAgIC0JaWYgKGdldG1heHkoc3Rk
c2NyKSA8IChoZWlnaHQgKyBDSEVDS0xJU1RfSEVJR1RIX01JTikpDQogICAgLQkJcmV0dXJuIC1F
UlJESVNQTEFZVE9PU01BTEw7DQogICAgLQlpZiAoZ2V0bWF4eChzdGRzY3IpIDwgKHdpZHRoICsg
Q0hFQ0tMSVNUX1dJRFRIX01JTikpDQogICAgLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7
DQogICAgLQ0KICAgIC0JbWF4X2Nob2ljZSA9IE1JTihsaXN0X2hlaWdodCwgaXRlbV9jb3VudCgp
KTsNCiAgICAtDQogICAgLQkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICAt
CXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsNCiAgICAtCXkgPSAoZ2V0bWF4eShz
dGRzY3IpIC0gaGVpZ2h0KSAvIDI7DQogICAgLQ0KICAgIC0JZHJhd19zaGFkb3coc3Rkc2NyLCB5
LCB4LCBoZWlnaHQsIHdpZHRoKTsNCiAgICAtDQogICAgLQlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0
LCB3aWR0aCwgeSwgeCk7DQogICAgLQlrZXlwYWQoZGlhbG9nLCBUUlVFKTsNCiAgICAtDQogICAg
LQlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdodCwgd2lkdGgsDQogICAgLQkJIGRsZy5kaWFs
b2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7DQogICAgLQl3YXR0cnNldChkaWFsb2csIGRsZy5ib3Jk
ZXIuYXRyKTsNCiAgICAtCW12d2FkZGNoKGRpYWxvZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUp
Ow0KICAgIC0JZm9yIChpID0gMDsgaSA8IHdpZHRoIC0gMjsgaSsrKQ0KICAgIC0JCXdhZGRjaChk
aWFsb2csIEFDU19ITElORSk7DQogICAgLQl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRy
KTsNCiAgICAtCXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsNCiAgICAtDQogICAgLQlwcmludF90
aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7DQogICAgLQ0KICAgIC0Jd2F0dHJzZXQoZGlhbG9n
LCBkbGcuZGlhbG9nLmF0cik7DQogICAgLQlwcmludF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwg
d2lkdGggLSAyLCAxLCAzKTsNCiAgICAtDQogICAgLQlsaXN0X3dpZHRoID0gd2lkdGggLSA2Ow0K
ICAgIC0JYm94X3kgPSBoZWlnaHQgLSBsaXN0X2hlaWdodCAtIDU7DQogICAgLQlib3hfeCA9ICh3
aWR0aCAtIGxpc3Rfd2lkdGgpIC8gMiAtIDE7DQogICAgLQ0KICAgIC0JLyogY3JlYXRlIG5ldyB3
aW5kb3cgZm9yIHRoZSBsaXN0ICovDQogICAgLQlsaXN0ID0gc3Vid2luKGRpYWxvZywgbGlzdF9o
ZWlnaHQsIGxpc3Rfd2lkdGgsIHkgKyBib3hfeSArIDEsDQogICAgLQkJICAgICAgeCArIGJveF94
ICsgMSk7DQogICAgLQ0KICAgIC0Ja2V5cGFkKGxpc3QsIFRSVUUpOw0KICAgIC0NCiAgICAtCS8q
IGRyYXcgYSBib3ggYXJvdW5kIHRoZSBsaXN0IGl0ZW1zICovDQogICAgLQlkcmF3X2JveChkaWFs
b2csIGJveF95LCBib3hfeCwgbGlzdF9oZWlnaHQgKyAyLCBsaXN0X3dpZHRoICsgMiwNCiAgICAt
CQkgZGxnLm1lbnVib3hfYm9yZGVyLmF0ciwgZGxnLm1lbnVib3guYXRyKTsNCiAgICAtDQogICAg
LQkvKiBGaW5kIGxlbmd0aCBvZiBsb25nZXN0IGl0ZW0gaW4gb3JkZXIgdG8gY2VudGVyIGNoZWNr
bGlzdCAqLw0KICAgIC0JY2hlY2tfeCA9IDA7DQogICAgLQlpdGVtX2ZvcmVhY2goKQ0KICAgIC0J
CWNoZWNrX3ggPSBNQVgoY2hlY2tfeCwgc3RybGVuKGl0ZW1fc3RyKCkpICsgNCk7DQogICAgLQlj
aGVja194ID0gTUlOKGNoZWNrX3gsIGxpc3Rfd2lkdGgpOw0KICAgIC0NCiAgICAtCWNoZWNrX3gg
PSAobGlzdF93aWR0aCAtIGNoZWNrX3gpIC8gMjsNCiAgICAtCWl0ZW1feCA9IGNoZWNrX3ggKyA0
Ow0KICAgIC0NCiAgICAtCWlmIChjaG9pY2UgPj0gbGlzdF9oZWlnaHQpIHsNCiAgICAtCQlzY3Jv
bGwgPSBjaG9pY2UgLSBsaXN0X2hlaWdodCArIDE7DQogICAgLQkJY2hvaWNlIC09IHNjcm9sbDsN
CiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBQcmludCB0aGUgbGlzdCAqLw0KICAgIC0JZm9yIChp
ID0gMDsgaSA8IG1heF9jaG9pY2U7IGkrKykgew0KICAgIC0JCWl0ZW1fc2V0KHNjcm9sbCArIGkp
Ow0KICAgIC0JCXByaW50X2l0ZW0obGlzdCwgaSwgaSA9PSBjaG9pY2UpOw0KICAgIC0JfQ0KICAg
IC0NCiAgICAtCXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9jb3VudCgpLCBzY3Jv
bGwsDQogICAgLQkJICAgICBib3hfeSwgYm94X3ggKyBjaGVja194ICsgNSwgbGlzdF9oZWlnaHQp
Ow0KICAgIC0NCiAgICAtCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsN
CiAgICAtDQogICAgLQl3bm91dHJlZnJlc2goZGlhbG9nKTsNCiAgICAtCXdub3V0cmVmcmVzaChs
aXN0KTsNCiAgICAtCWRvdXBkYXRlKCk7DQogICAgLQ0KICAgIC0Jd2hpbGUgKGtleSAhPSBLRVlf
RVNDKSB7DQogICAgLQkJa2V5ID0gd2dldGNoKGRpYWxvZyk7DQogICAgLQ0KICAgIC0JCWZvciAo
aSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsNCiAgICAtCQkJaXRlbV9zZXQoaSArIHNjcm9s
bCk7DQogICAgLQkJCWlmICh0b3VwcGVyKGtleSkgPT0gdG91cHBlcihpdGVtX3N0cigpWzBdKSkN
CiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJaWYgKGkgPCBtYXhfY2hv
aWNlIHx8IGtleSA9PSBLRVlfVVAgfHwga2V5ID09IEtFWV9ET1dOIHx8DQogICAgLQkJICAgIGtl
eSA9PSAnKycgfHwga2V5ID09ICctJykgew0KICAgIC0JCQlpZiAoa2V5ID09IEtFWV9VUCB8fCBr
ZXkgPT0gJy0nKSB7DQogICAgLQkJCQlpZiAoIWNob2ljZSkgew0KICAgIC0JCQkJCWlmICghc2Ny
b2xsKQ0KICAgIC0JCQkJCQljb250aW51ZTsNCiAgICAtCQkJCQkvKiBTY3JvbGwgbGlzdCBkb3du
ICovDQogICAgLQkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4gMSkgew0KICAgIC0JCQkJCQkvKiBEZS1o
aWdobGlnaHQgY3VycmVudCBmaXJzdCBpdGVtICovDQogICAgLQkJCQkJCWl0ZW1fc2V0KHNjcm9s
bCk7DQogICAgLQkJCQkJCXByaW50X2l0ZW0obGlzdCwgMCwgRkFMU0UpOw0KICAgIC0JCQkJCQlz
Y3JvbGxvayhsaXN0LCBUUlVFKTsNCiAgICAtCQkJCQkJd3NjcmwobGlzdCwgLTEpOw0KICAgIC0J
CQkJCQlzY3JvbGxvayhsaXN0LCBGQUxTRSk7DQogICAgLQkJCQkJfQ0KICAgIC0JCQkJCXNjcm9s
bC0tOw0KICAgIC0JCQkJCWl0ZW1fc2V0KHNjcm9sbCk7DQogICAgLQkJCQkJcHJpbnRfaXRlbShs
aXN0LCAwLCBUUlVFKTsNCiAgICAtCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0
ZW1fY291bnQoKSwNCiAgICAtCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNr
X3ggKyA1LCBsaXN0X2hlaWdodCk7DQogICAgLQ0KICAgIC0JCQkJCXdub3V0cmVmcmVzaChkaWFs
b2cpOw0KICAgIC0JCQkJCXdyZWZyZXNoKGxpc3QpOw0KICAgIC0NCiAgICAtCQkJCQljb250aW51
ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8NCiAgICAtCQkJCX0gZWxzZQ0KICAg
IC0JCQkJCWkgPSBjaG9pY2UgLSAxOw0KICAgIC0JCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9X
TiB8fCBrZXkgPT0gJysnKSB7DQogICAgLQkJCQlpZiAoY2hvaWNlID09IG1heF9jaG9pY2UgLSAx
KSB7DQogICAgLQkJCQkJaWYgKHNjcm9sbCArIGNob2ljZSA+PSBpdGVtX2NvdW50KCkgLSAxKQ0K
ICAgIC0JCQkJCQljb250aW51ZTsNCiAgICAtCQkJCQkvKiBTY3JvbGwgbGlzdCB1cCAqLw0KICAg
IC0JCQkJCWlmIChsaXN0X2hlaWdodCA+IDEpIHsNCiAgICAtCQkJCQkJLyogRGUtaGlnaGxpZ2h0
IGN1cnJlbnQgbGFzdCBpdGVtIGJlZm9yZSBzY3JvbGxpbmcgdXAgKi8NCiAgICAtCQkJCQkJaXRl
bV9zZXQoc2Nyb2xsICsgbWF4X2Nob2ljZSAtIDEpOw0KICAgIC0JCQkJCQlwcmludF9pdGVtKGxp
c3QsDQogICAgLQkJCQkJCQkgICAgbWF4X2Nob2ljZSAtIDEsDQogICAgLQkJCQkJCQkgICAgRkFM
U0UpOw0KICAgIC0JCQkJCQlzY3JvbGxvayhsaXN0LCBUUlVFKTsNCiAgICAtCQkJCQkJd3Njcmwo
bGlzdCwgMSk7DQogICAgLQkJCQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNFKTsNCiAgICAtCQkJCQl9
DQogICAgLQkJCQkJc2Nyb2xsKys7DQogICAgLQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgbWF4X2No
b2ljZSAtIDEpOw0KICAgIC0JCQkJCXByaW50X2l0ZW0obGlzdCwgbWF4X2Nob2ljZSAtIDEsIFRS
VUUpOw0KICAgIC0NCiAgICAtCQkJCQlwcmludF9hcnJvd3MoZGlhbG9nLCBjaG9pY2UsIGl0ZW1f
Y291bnQoKSwNCiAgICAtCQkJCQkJICAgICBzY3JvbGwsIGJveF95LCBib3hfeCArIGNoZWNrX3gg
KyA1LCBsaXN0X2hlaWdodCk7DQogICAgLQ0KICAgIC0JCQkJCXdub3V0cmVmcmVzaChkaWFsb2cp
Ow0KICAgIC0JCQkJCXdyZWZyZXNoKGxpc3QpOw0KICAgIC0NCiAgICAtCQkJCQljb250aW51ZTsJ
Lyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8NCiAgICAtCQkJCX0gZWxzZQ0KICAgIC0J
CQkJCWkgPSBjaG9pY2UgKyAxOw0KICAgIC0JCQl9DQogICAgLQkJCWlmIChpICE9IGNob2ljZSkg
ew0KICAgIC0JCQkJLyogRGUtaGlnaGxpZ2h0IGN1cnJlbnQgaXRlbSAqLw0KICAgIC0JCQkJaXRl
bV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsNCiAgICAtCQkJCXByaW50X2l0ZW0obGlzdCwgY2hvaWNl
LCBGQUxTRSk7DQogICAgLQkJCQkvKiBIaWdobGlnaHQgbmV3IGl0ZW0gKi8NCiAgICAtCQkJCWNo
b2ljZSA9IGk7DQogICAgLQkJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOw0KICAgIC0JCQkJ
cHJpbnRfaXRlbShsaXN0LCBjaG9pY2UsIFRSVUUpOw0KICAgIC0JCQkJd25vdXRyZWZyZXNoKGRp
YWxvZyk7DQogICAgLQkJCQl3cmVmcmVzaChsaXN0KTsNCiAgICAtCQkJfQ0KICAgIC0JCQljb250
aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8NCiAgICAtCQl9DQogICAgLQkJ
c3dpdGNoIChrZXkpIHsNCiAgICAtCQljYXNlICdIJzoNCiAgICAtCQljYXNlICdoJzoNCiAgICAt
CQljYXNlICc/JzoNCiAgICAtCQkJYnV0dG9uID0gMTsNCiAgICAtCQkJLyogZmFsbC10aHJvdWdo
ICovDQogICAgLQkJY2FzZSAnUyc6DQogICAgLQkJY2FzZSAncyc6DQogICAgLQkJY2FzZSAnICc6
DQogICAgLQkJY2FzZSAnXG4nOg0KICAgIC0JCQlpdGVtX2ZvcmVhY2goKQ0KICAgIC0JCQkJaXRl
bV9zZXRfc2VsZWN0ZWQoMCk7DQogICAgLQkJCWl0ZW1fc2V0KHNjcm9sbCArIGNob2ljZSk7DQog
ICAgLQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOw0KICAgIC0JCQlkZWx3aW4obGlzdCk7DQogICAg
LQkJCWRlbHdpbihkaWFsb2cpOw0KICAgIC0JCQlyZXR1cm4gYnV0dG9uOw0KICAgIC0JCWNhc2Ug
VEFCOg0KICAgIC0JCWNhc2UgS0VZX0xFRlQ6DQogICAgLQkJY2FzZSBLRVlfUklHSFQ6DQogICAg
LQkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9MRUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAw
KQ0KICAgIC0JCQkgICAgPyAxIDogKGJ1dHRvbiA+IDEgPyAwIDogYnV0dG9uKTsNCiAgICAtDQog
ICAgLQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCBidXR0b24pOw0KICAg
IC0JCQl3cmVmcmVzaChkaWFsb2cpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICdYJzoN
CiAgICAtCQljYXNlICd4JzoNCiAgICAtCQkJa2V5ID0gS0VZX0VTQzsNCiAgICAtCQkJYnJlYWs7
DQogICAgLQkJY2FzZSBLRVlfRVNDOg0KICAgIC0JCQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX1JFU0laRToNCiAgICAtCQkJZGVsd2lu
KGxpc3QpOw0KICAgIC0JCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAtCQkJb25fa2V5X3Jlc2l6ZSgp
Ow0KICAgIC0JCQlnb3RvIGRvX3Jlc2l6ZTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCS8qIE5v
dywgdXBkYXRlIGV2ZXJ5dGhpbmcuLi4gKi8NCiAgICAtCQlkb3VwZGF0ZSgpOw0KICAgIC0JfQ0K
ICAgIC0JZGVsd2luKGxpc3QpOw0KICAgIC0JZGVsd2luKGRpYWxvZyk7DQogICAgLQlyZXR1cm4g
a2V5OwkJLyogRVNDIHByZXNzZWQgKi8NCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcubmV3L2x4ZGlhbG9nL2RpYWxvZy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRp
YWxvZy9kaWFsb2cuaA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDY4
YjU2NWUuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL2Rp
YWxvZy5oDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDIzOCArMCwwIEBADQogICAgLS8q
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKyAqLw0KICAgIC0vKg0KICAgIC0gKiAg
ZGlhbG9nLmggLS0gY29tbW9uIGRlY2xhcmF0aW9ucyBmb3IgYWxsIGRpYWxvZyBtb2R1bGVzDQog
ICAgLSAqDQogICAgLSAqICBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQog
ICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICAgIC0jaW5jbHVk
ZSA8ZmNudGwuaD4NCiAgICAtI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgIC0jaW5jbHVkZSA8Y3R5
cGUuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+
DQogICAgLSNpbmNsdWRlIDxzdGRib29sLmg+DQogICAgLQ0KICAgIC0jaWZkZWYgX19zdW5fXw0K
ICAgIC0jZGVmaW5lIENVUlNfTUFDUk9TDQogICAgLSNlbmRpZg0KICAgIC0jaW5jbHVkZSA8bmN1
cnNlcy5oPg0KICAgIC0NCiAgICAtLyoNCiAgICAtICogQ29sb3JzIGluIG5jdXJzZXMgMS45Ljll
IGRvIG5vdCB3b3JrIHByb3Blcmx5IHNpbmNlIGZvcmVncm91bmQgYW5kDQogICAgLSAqIGJhY2tn
cm91bmQgY29sb3JzIGFyZSBPUidkIHJhdGhlciB0aGFuIHNlcGFyYXRlbHkgbWFza2VkLiAgVGhp
cyB2ZXJzaW9uDQogICAgLSAqIG9mIGRpYWxvZyB3YXMgaGFja2VkIHRvIHdvcmsgd2l0aCBuY3Vy
c2VzIDEuOS45ZSwgbWFraW5nIGl0IGluY29tcGF0aWJsZQ0KICAgIC0gKiB3aXRoIHN0YW5kYXJk
IGN1cnNlcy4gIFRoZSBzaW1wbGVzdCBmaXggKHRvIG1ha2UgdGhpcyB3b3JrIHdpdGggc3RhbmRh
cmQNCiAgICAtICogY3Vyc2VzKSB1c2VzIHRoZSB3YmtnZHNldCgpIGZ1bmN0aW9uLCBub3QgdXNl
ZCBpbiB0aGUgb3JpZ2luYWwgaGFjay4NCiAgICAtICogVHVybiBpdCBvZmYgaWYgd2UncmUgYnVp
bGRpbmcgd2l0aCAxLjkuOWUsIHNpbmNlIGl0IGp1c3QgY29uZnVzZXMgdGhpbmdzLg0KICAgIC0g
Ki8NCiAgICAtI2lmIGRlZmluZWQoTkNVUlNFU19WRVJTSU9OKSAmJiBkZWZpbmVkKF9ORUVEX1dS
QVApICYmICFkZWZpbmVkKEdDQ19QUklOVEZMSUtFKQ0KICAgIC0jZGVmaW5lIE9MRF9OQ1VSU0VT
IDENCiAgICAtI3VuZGVmICB3YmtnZHNldA0KICAgIC0jZGVmaW5lIHdia2dkc2V0KHcscCkJCS8q
bm90aGluZyAqLw0KICAgIC0jZWxzZQ0KICAgIC0jZGVmaW5lIE9MRF9OQ1VSU0VTIDANCiAgICAt
I2VuZGlmDQogICAgLQ0KICAgIC0jZGVmaW5lIFRSKHBhcmFtcykgX3RyYWNlZiBwYXJhbXMNCiAg
ICAtDQogICAgLSNkZWZpbmUgS0VZX0VTQyAyNw0KICAgIC0jZGVmaW5lIFRBQiA5DQogICAgLSNk
ZWZpbmUgTUFYX0xFTiAyMDQ4DQogICAgLSNkZWZpbmUgQlVGX1NJWkUgKDEwKjEwMjQpDQogICAg
LSNkZWZpbmUgTUlOKHgseSkgKHggPCB5ID8geCA6IHkpDQogICAgLSNkZWZpbmUgTUFYKHgseSkg
KHggPiB5ID8geCA6IHkpDQogICAgLQ0KICAgIC0jaWZuZGVmIEFDU19VTENPUk5FUg0KICAgIC0j
ZGVmaW5lIEFDU19VTENPUk5FUiAnKycNCiAgICAtI2VuZGlmDQogICAgLSNpZm5kZWYgQUNTX0xM
Q09STkVSDQogICAgLSNkZWZpbmUgQUNTX0xMQ09STkVSICcrJw0KICAgIC0jZW5kaWYNCiAgICAt
I2lmbmRlZiBBQ1NfVVJDT1JORVINCiAgICAtI2RlZmluZSBBQ1NfVVJDT1JORVIgJysnDQogICAg
LSNlbmRpZg0KICAgIC0jaWZuZGVmIEFDU19MUkNPUk5FUg0KICAgIC0jZGVmaW5lIEFDU19MUkNP
Uk5FUiAnKycNCiAgICAtI2VuZGlmDQogICAgLSNpZm5kZWYgQUNTX0hMSU5FDQogICAgLSNkZWZp
bmUgQUNTX0hMSU5FICctJw0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBBQ1NfVkxJTkUNCiAg
ICAtI2RlZmluZSBBQ1NfVkxJTkUgJ3wnDQogICAgLSNlbmRpZg0KICAgIC0jaWZuZGVmIEFDU19M
VEVFDQogICAgLSNkZWZpbmUgQUNTX0xURUUgJysnDQogICAgLSNlbmRpZg0KICAgIC0jaWZuZGVm
IEFDU19SVEVFDQogICAgLSNkZWZpbmUgQUNTX1JURUUgJysnDQogICAgLSNlbmRpZg0KICAgIC0j
aWZuZGVmIEFDU19VQVJST1cNCiAgICAtI2RlZmluZSBBQ1NfVUFSUk9XICdeJw0KICAgIC0jZW5k
aWYNCiAgICAtI2lmbmRlZiBBQ1NfREFSUk9XDQogICAgLSNkZWZpbmUgQUNTX0RBUlJPVyAndicN
CiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0vKiBlcnJvciByZXR1cm4gY29kZXMgKi8NCiAgICAt
I2RlZmluZSBFUlJESVNQTEFZVE9PU01BTEwgKEtFWV9NQVggKyAxKQ0KICAgIC0NCiAgICAtLyoN
CiAgICAtICogICBDb2xvciBkZWZpbml0aW9ucw0KICAgIC0gKi8NCiAgICAtc3RydWN0IGRpYWxv
Z19jb2xvciB7DQogICAgLQljaHR5cGUgYXRyOwkvKiBDb2xvciBhdHRyaWJ1dGUgKi8NCiAgICAt
CWludCBmZzsJCS8qIGZvcmVncm91bmQgKi8NCiAgICAtCWludCBiZzsJCS8qIGJhY2tncm91bmQg
Ki8NCiAgICAtCWludCBobDsJCS8qIGhpZ2hsaWdodCB0aGlzIGl0ZW0gKi8NCiAgICAtfTsNCiAg
ICAtDQogICAgLXN0cnVjdCBzdWJ0aXRsZV9saXN0IHsNCiAgICAtCXN0cnVjdCBzdWJ0aXRsZV9s
aXN0ICpuZXh0Ow0KICAgIC0JY29uc3QgY2hhciAqdGV4dDsNCiAgICAtfTsNCiAgICAtDQogICAg
LXN0cnVjdCBkaWFsb2dfaW5mbyB7DQogICAgLQljb25zdCBjaGFyICpiYWNrdGl0bGU7DQogICAg
LQlzdHJ1Y3Qgc3VidGl0bGVfbGlzdCAqc3VidGl0bGVzOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19j
b2xvciBzY3JlZW47DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNoYWRvdzsNCiAgICAtCXN0
cnVjdCBkaWFsb2dfY29sb3IgZGlhbG9nOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciB0aXRs
ZTsNCiAgICAtCXN0cnVjdCBkaWFsb2dfY29sb3IgYm9yZGVyOw0KICAgIC0Jc3RydWN0IGRpYWxv
Z19jb2xvciBidXR0b25fYWN0aXZlOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25f
aW5hY3RpdmU7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJ1dHRvbl9rZXlfYWN0aXZlOw0K
ICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBidXR0b25fa2V5X2luYWN0aXZlOw0KICAgIC0Jc3Ry
dWN0IGRpYWxvZ19jb2xvciBidXR0b25fbGFiZWxfYWN0aXZlOw0KICAgIC0Jc3RydWN0IGRpYWxv
Z19jb2xvciBidXR0b25fbGFiZWxfaW5hY3RpdmU7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9y
IGlucHV0Ym94Ow0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBpbnB1dGJveF9ib3JkZXI7DQog
ICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveDsNCiAgICAtCXN0cnVjdCBkaWFsb2df
Y29sb3Igc2VhcmNoYm94X3RpdGxlOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBzZWFyY2hi
b3hfYm9yZGVyOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBwb3NpdGlvbl9pbmRpY2F0b3I7
DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIG1lbnVib3g7DQogICAgLQlzdHJ1Y3QgZGlhbG9n
X2NvbG9yIG1lbnVib3hfYm9yZGVyOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBpdGVtOw0K
ICAgIC0Jc3RydWN0IGRpYWxvZ19jb2xvciBpdGVtX3NlbGVjdGVkOw0KICAgIC0Jc3RydWN0IGRp
YWxvZ19jb2xvciB0YWc7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19zZWxlY3RlZDsN
CiAgICAtCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnX2tleTsNCiAgICAtCXN0cnVjdCBkaWFsb2df
Y29sb3IgdGFnX2tleV9zZWxlY3RlZDsNCiAgICAtCXN0cnVjdCBkaWFsb2dfY29sb3IgY2hlY2s7
DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGNoZWNrX3NlbGVjdGVkOw0KICAgIC0Jc3RydWN0
IGRpYWxvZ19jb2xvciB1YXJyb3c7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGRhcnJvdzsN
CiAgICAtfTsNCiAgICAtDQogICAgLS8qDQogICAgLSAqIEdsb2JhbCB2YXJpYWJsZXMNCiAgICAt
ICovDQogICAgLWV4dGVybiBzdHJ1Y3QgZGlhbG9nX2luZm8gZGxnOw0KICAgIC1leHRlcm4gY2hh
ciBkaWFsb2dfaW5wdXRfcmVzdWx0W107DQogICAgLWV4dGVybiBpbnQgc2F2ZWRfeCwgc2F2ZWRf
eTsJCS8qIE5lZWRlZCBpbiBzaWduYWwgaGFuZGxlciBpbiBtY29uZi5jICovDQogICAgLQ0KICAg
IC0vKg0KICAgIC0gKiBGdW5jdGlvbiBwcm90b3R5cGVzDQogICAgLSAqLw0KICAgIC0NCiAgICAt
LyogaXRlbSBsaXN0IGFzIHVzZWQgYnkgY2hlY2tsaXN0IGFuZCBtZW51Ym94ICovDQogICAgLXZv
aWQgaXRlbV9yZXNldCh2b2lkKTsNCiAgICAtdm9pZCBpdGVtX21ha2UoY29uc3QgY2hhciAqZm10
LCAuLi4pOw0KICAgIC12b2lkIGl0ZW1fYWRkX3N0cihjb25zdCBjaGFyICpmbXQsIC4uLik7DQog
ICAgLXZvaWQgaXRlbV9zZXRfdGFnKGNoYXIgdGFnKTsNCiAgICAtdm9pZCBpdGVtX3NldF9kYXRh
KHZvaWQgKnApOw0KICAgIC12b2lkIGl0ZW1fc2V0X3NlbGVjdGVkKGludCB2YWwpOw0KICAgIC1p
bnQgaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCh2b2lkKTsNCiAgICAtdm9pZCAqaXRlbV9kYXRhKHZv
aWQpOw0KICAgIC1jaGFyIGl0ZW1fdGFnKHZvaWQpOw0KICAgIC0NCiAgICAtLyogaXRlbSBsaXN0
IG1hbmlwdWxhdGlvbiBmb3IgbHhkaWFsb2cgdXNlICovDQogICAgLSNkZWZpbmUgTUFYSVRFTVNU
UiAyMDANCiAgICAtc3RydWN0IGRpYWxvZ19pdGVtIHsNCiAgICAtCWNoYXIgc3RyW01BWElURU1T
VFJdOwkvKiBwcm9tcHQgZGlzcGxheWVkICovDQogICAgLQljaGFyIHRhZzsNCiAgICAtCXZvaWQg
KmRhdGE7CS8qIHBvaW50ZXIgdG8gbWVudSBpdGVtIC0gdXNlZCBieSBtZW51Ym94K2NoZWNrbGlz
dCAqLw0KICAgIC0JaW50IHNlbGVjdGVkOwkvKiBTZXQgdG8gMSBieSBkaWFsb2dfKigpIGZ1bmN0
aW9uIGlmIHNlbGVjdGVkLiAqLw0KICAgIC19Ow0KICAgIC0NCiAgICAtLyogbGlzdCBvZiBsaWFs
b2dfaXRlbXMgKi8NCiAgICAtc3RydWN0IGRpYWxvZ19saXN0IHsNCiAgICAtCXN0cnVjdCBkaWFs
b2dfaXRlbSBub2RlOw0KICAgIC0Jc3RydWN0IGRpYWxvZ19saXN0ICpuZXh0Ow0KICAgIC19Ow0K
ICAgIC0NCiAgICAtZXh0ZXJuIHN0cnVjdCBkaWFsb2dfbGlzdCAqaXRlbV9jdXI7DQogICAgLWV4
dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3QgaXRlbV9uaWw7DQogICAgLWV4dGVybiBzdHJ1Y3QgZGlh
bG9nX2xpc3QgKml0ZW1faGVhZDsNCiAgICAtDQogICAgLWludCBpdGVtX2NvdW50KHZvaWQpOw0K
ICAgIC12b2lkIGl0ZW1fc2V0KGludCBuKTsNCiAgICAtaW50IGl0ZW1fbih2b2lkKTsNCiAgICAt
Y29uc3QgY2hhciAqaXRlbV9zdHIodm9pZCk7DQogICAgLWludCBpdGVtX2lzX3NlbGVjdGVkKHZv
aWQpOw0KICAgIC1pbnQgaXRlbV9pc190YWcoY2hhciB0YWcpOw0KICAgIC0jZGVmaW5lIGl0ZW1f
Zm9yZWFjaCgpIFwNCiAgICAtCWZvciAoaXRlbV9jdXIgPSBpdGVtX2hlYWQgPyBpdGVtX2hlYWQ6
IGl0ZW1fY3VyOyBcDQogICAgLQkgICAgIGl0ZW1fY3VyICYmIChpdGVtX2N1ciAhPSAmaXRlbV9u
aWwpOyBpdGVtX2N1ciA9IGl0ZW1fY3VyLT5uZXh0KQ0KICAgIC0NCiAgICAtLyogZ2VuZXJpYyBr
ZXkgaGFuZGxlcnMgKi8NCiAgICAtaW50IG9uX2tleV9lc2MoV0lORE9XICp3aW4pOw0KICAgIC1p
bnQgb25fa2V5X3Jlc2l6ZSh2b2lkKTsNCiAgICAtDQogICAgLS8qIG1pbmltdW0gKHJlKXNpemUg
dmFsdWVzICovDQogICAgLSNkZWZpbmUgQ0hFQ0tMSVNUX0hFSUdUSF9NSU4gNgkvKiBGb3IgZGlh
bG9nX2NoZWNrbGlzdCgpICovDQogICAgLSNkZWZpbmUgQ0hFQ0tMSVNUX1dJRFRIX01JTiA2DQog
ICAgLSNkZWZpbmUgSU5QVVRCT1hfSEVJR1RIX01JTiAyCS8qIEZvciBkaWFsb2dfaW5wdXRib3go
KSAqLw0KICAgIC0jZGVmaW5lIElOUFVUQk9YX1dJRFRIX01JTiAyDQogICAgLSNkZWZpbmUgTUVO
VUJPWF9IRUlHVEhfTUlOIDE1CS8qIEZvciBkaWFsb2dfbWVudSgpICovDQogICAgLSNkZWZpbmUg
TUVOVUJPWF9XSURUSF9NSU4gNjUNCiAgICAtI2RlZmluZSBURVhUQk9YX0hFSUdUSF9NSU4gOAkv
KiBGb3IgZGlhbG9nX3RleHRib3goKSAqLw0KICAgIC0jZGVmaW5lIFRFWFRCT1hfV0lEVEhfTUlO
IDgNCiAgICAtI2RlZmluZSBZRVNOT19IRUlHVEhfTUlOIDQJLyogRm9yIGRpYWxvZ195ZXNubygp
ICovDQogICAgLSNkZWZpbmUgWUVTTk9fV0lEVEhfTUlOIDQNCiAgICAtI2RlZmluZSBXSU5ET1df
SEVJR1RIX01JTiAxOQkvKiBGb3IgaW5pdF9kaWFsb2coKSAqLw0KICAgIC0jZGVmaW5lIFdJTkRP
V19XSURUSF9NSU4gODANCiAgICAtDQogICAgLWludCBpbml0X2RpYWxvZyhjb25zdCBjaGFyICpi
YWNrdGl0bGUpOw0KICAgIC12b2lkIHNldF9kaWFsb2dfYmFja3RpdGxlKGNvbnN0IGNoYXIgKmJh
Y2t0aXRsZSk7DQogICAgLXZvaWQgc2V0X2RpYWxvZ19zdWJ0aXRsZXMoc3RydWN0IHN1YnRpdGxl
X2xpc3QgKnN1YnRpdGxlcyk7DQogICAgLXZvaWQgZW5kX2RpYWxvZyhpbnQgeCwgaW50IHkpOw0K
ICAgIC12b2lkIGF0dHJfY2xlYXIoV0lORE9XICogd2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgs
IGNodHlwZSBhdHRyKTsNCiAgICAtdm9pZCBkaWFsb2dfY2xlYXIodm9pZCk7DQogICAgLXZvaWQg
cHJpbnRfYXV0b3dyYXAoV0lORE9XICogd2luLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB3aWR0
aCwgaW50IHksIGludCB4KTsNCiAgICAtdm9pZCBwcmludF9idXR0b24oV0lORE9XICogd2luLCBj
b25zdCBjaGFyICpsYWJlbCwgaW50IHksIGludCB4LCBpbnQgc2VsZWN0ZWQpOw0KICAgIC12b2lk
IHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25zdCBjaGFyICp0aXRsZSwgaW50IHdpZHRo
KTsNCiAgICAtdm9pZCBkcmF3X2JveChXSU5ET1cgKiB3aW4sIGludCB5LCBpbnQgeCwgaW50IGhl
aWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYm94LA0KICAgIC0JICAgICAgY2h0eXBlIGJvcmRlcik7
DQogICAgLXZvaWQgZHJhd19zaGFkb3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBo
ZWlnaHQsIGludCB3aWR0aCk7DQogICAgLQ0KICAgIC1pbnQgZmlyc3RfYWxwaGEoY29uc3QgY2hh
ciAqc3RyaW5nLCBjb25zdCBjaGFyICpleGVtcHQpOw0KICAgIC1pbnQgZGlhbG9nX3llc25vKGNv
bnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0
aCk7DQogICAgLWludCBkaWFsb2dfbXNnYm94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFy
ICpwcm9tcHQsIGludCBoZWlnaHQsDQogICAgLQkJICBpbnQgd2lkdGgsIGludCBwYXVzZSk7DQog
ICAgLQ0KICAgIC0NCiAgICAtdHlwZWRlZiB2b2lkICgqdXBkYXRlX3RleHRfZm4pKGNoYXIgKmJ1
Ziwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kLCB2b2lkDQogICAgLQkJCSAgICAgICAqX2RhdGEp
Ow0KICAgIC1pbnQgZGlhbG9nX3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRidWYs
IGludCBpbml0aWFsX2hlaWdodCwNCiAgICAtCQkgICBpbnQgaW5pdGlhbF93aWR0aCwgaW50ICpr
ZXlzLCBpbnQgKl92c2Nyb2xsLCBpbnQgKl9oc2Nyb2xsLA0KICAgIC0JCSAgIHVwZGF0ZV90ZXh0
X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsNCiAgICAtaW50IGRpYWxvZ19tZW51KGNvbnN0
IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsDQogICAgLQkJY29uc3Qgdm9pZCAqc2Vs
ZWN0ZWQsIGludCAqc19zY3JvbGwpOw0KICAgIC1pbnQgZGlhbG9nX2NoZWNrbGlzdChjb25zdCBj
aGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LA0KICAgIC0JCSAgICAg
aW50IHdpZHRoLCBpbnQgbGlzdF9oZWlnaHQpOw0KICAgIC1pbnQgZGlhbG9nX2lucHV0Ym94KGNv
bnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsIGludCBoZWlnaHQsDQogICAgLQkJ
ICAgIGludCB3aWR0aCwgY29uc3QgY2hhciAqaW5pdCk7DQogICAgLQ0KICAgIC0vKg0KICAgIC0g
KiBUaGlzIGlzIHRoZSBiYXNlIGZvciBmaWN0aXRpb3VzIGtleXMsIHdoaWNoIGFjdGl2YXRlDQog
ICAgLSAqIHRoZSBidXR0b25zLg0KICAgIC0gKg0KICAgIC0gKiBNb3VzZS1nZW5lcmF0ZWQga2V5
cyBhcmUgdGhlIGZvbGxvd2luZzoNCiAgICAtICogICAtLSB0aGUgZmlyc3QgMzIgYXJlIHVzZWQg
YXMgbnVtYmVycywgaW4gYWRkaXRpb24gdG8gJzAnLSc5Jw0KICAgIC0gKiAgIC0tIHRoZSBsb3dl
cmNhc2UgYXJlIHVzZWQgdG8gc2lnbmFsIG1vdXNlLWVudGVyIGV2ZW50cyAoTV9FVkVOVCArICdv
JykNCiAgICAtICogICAtLSB1cHBlcmNhc2UgY2hhcnMgYXJlIHVzZWQgdG8gaW52b2tlIHRoZSBi
dXR0b24gKE1fRVZFTlQgKyAnTycpDQogICAgLSAqLw0KICAgIC0jZGVmaW5lIE1fRVZFTlQgKEtF
WV9NQVgrMSkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9p
bnB1dGJveC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy9pbnB1dGJveC5jDQogICAg
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMWRjZmIyOC4uMDAwMDAwMA0KICAg
IC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvaW5wdXRib3guYw0KICAgICsrKyAv
ZGV2L251bGwNCiAgICBAQCAtMSwyODkgKzAsMCBAQA0KICAgIC0vLyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMCsNCiAgICAtLyoNCiAgICAtICogIGlucHV0Ym94LmMgLS0gaW1wbGVt
ZW50cyB0aGUgaW5wdXQgYm94DQogICAgLSAqDQogICAgLSAqICBPUklHSU5BTCBBVVRIT1I6IFNh
dmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQogICAgLSAqICBNT0RJRklFRCBGT1IgTElOVVgg
S0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pDQogICAg
LSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgImRpYWxvZy5oIg0KICAgIC0NCiAgICAtY2hhciBk
aWFsb2dfaW5wdXRfcmVzdWx0W01BWF9MRU4gKyAxXTsNCiAgICAtDQogICAgLS8qDQogICAgLSAq
ICBQcmludCB0aGUgdGVybWluYXRpb24gYnV0dG9ucw0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZv
aWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwg
aW50IHNlbGVjdGVkKQ0KICAgIC17DQogICAgLQlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOw0KICAg
IC0JaW50IHkgPSBoZWlnaHQgLSAyOw0KICAgIC0NCiAgICAtCXByaW50X2J1dHRvbihkaWFsb2cs
ICIgIE9rICAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsNCiAgICAtCXByaW50X2J1dHRvbihkaWFs
b2csICIgSGVscCAiLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOw0KICAgIC0NCiAgICAtCXdt
b3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxNCAqIHNlbGVjdGVkKTsNCiAgICAtCXdyZWZyZXNoKGRp
YWxvZyk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIERpc3BsYXkgYSBkaWFsb2cg
Ym94IGZvciBpbnB1dGluZyBhIHN0cmluZw0KICAgIC0gKi8NCiAgICAtaW50IGRpYWxvZ19pbnB1
dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBp
bnQgd2lkdGgsDQogICAgLQkJICAgIGNvbnN0IGNoYXIgKmluaXQpDQogICAgLXsNCiAgICAtCWlu
dCBpLCB4LCB5LCBib3hfeSwgYm94X3gsIGJveF93aWR0aDsNCiAgICAtCWludCBpbnB1dF94ID0g
MCwga2V5ID0gMCwgYnV0dG9uID0gLTE7DQogICAgLQlpbnQgc2hvd194LCBsZW4sIHBvczsNCiAg
ICAtCWNoYXIgKmluc3RyID0gZGlhbG9nX2lucHV0X3Jlc3VsdDsNCiAgICAtCVdJTkRPVyAqZGlh
bG9nOw0KICAgIC0NCiAgICAtCWlmICghaW5pdCkNCiAgICAtCQlpbnN0clswXSA9ICdcMCc7DQog
ICAgLQllbHNlDQogICAgLQkJc3RyY3B5KGluc3RyLCBpbml0KTsNCiAgICAtDQogICAgLWRvX3Jl
c2l6ZToNCiAgICAtCWlmIChnZXRtYXh5KHN0ZHNjcikgPD0gKGhlaWdodCAtIElOUFVUQk9YX0hF
SUdUSF9NSU4pKQ0KICAgIC0JCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0KICAgIC0JaWYg
KGdldG1heHgoc3Rkc2NyKSA8PSAod2lkdGggLSBJTlBVVEJPWF9XSURUSF9NSU4pKQ0KICAgIC0J
CXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0KICAgIC0NCiAgICAtCS8qIGNlbnRlciBkaWFs
b2cgYm94IG9uIHNjcmVlbiAqLw0KICAgIC0JeCA9IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0aCkg
LyAyOw0KICAgIC0JeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsNCiAgICAtDQog
ICAgLQlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOw0KICAgIC0NCiAg
ICAtCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsNCiAgICAtCWtleXBhZChk
aWFsb2csIFRSVUUpOw0KICAgIC0NCiAgICAtCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0
LCB3aWR0aCwNCiAgICAtCQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsNCiAgICAt
CXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOw0KICAgIC0JbXZ3YWRkY2goZGlhbG9n
LCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7DQogICAgLQlmb3IgKGkgPSAwOyBpIDwgd2lkdGgg
LSAyOyBpKyspDQogICAgLQkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsNCiAgICAtCXdhdHRy
c2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOw0KICAgIC0Jd2FkZGNoKGRpYWxvZywgQUNTX1JU
RUUpOw0KICAgIC0NCiAgICAtCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsNCiAg
ICAtDQogICAgLQl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAtCXByaW50
X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOw0KICAgIC0NCiAgICAt
CS8qIERyYXcgdGhlIGlucHV0IGZpZWxkIGJveCAqLw0KICAgIC0JYm94X3dpZHRoID0gd2lkdGgg
LSA2Ow0KICAgIC0JZ2V0eXgoZGlhbG9nLCB5LCB4KTsNCiAgICAtCWJveF95ID0geSArIDI7DQog
ICAgLQlib3hfeCA9ICh3aWR0aCAtIGJveF93aWR0aCkgLyAyOw0KICAgIC0JZHJhd19ib3goZGlh
bG9nLCB5ICsgMSwgYm94X3ggLSAxLCAzLCBib3hfd2lkdGggKyAyLA0KICAgIC0JCSBkbGcuZGlh
bG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOw0KICAgIC0NCiAgICAtCXByaW50X2J1dHRvbnMoZGlh
bG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICAtDQogICAgLQkvKiBTZXQgdXAgdGhlIGluaXRp
YWwgdmFsdWUgKi8NCiAgICAtCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsNCiAgICAtCXdh
dHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7DQogICAgLQ0KICAgIC0JbGVuID0gc3Ry
bGVuKGluc3RyKTsNCiAgICAtCXBvcyA9IGxlbjsNCiAgICAtDQogICAgLQlpZiAobGVuID49IGJv
eF93aWR0aCkgew0KICAgIC0JCXNob3dfeCA9IGxlbiAtIGJveF93aWR0aCArIDE7DQogICAgLQkJ
aW5wdXRfeCA9IGJveF93aWR0aCAtIDE7DQogICAgLQkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0
aCAtIDE7IGkrKykNCiAgICAtCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0K
ICAgIC0JfSBlbHNlIHsNCiAgICAtCQlzaG93X3ggPSAwOw0KICAgIC0JCWlucHV0X3ggPSBsZW47
DQogICAgLQkJd2FkZHN0cihkaWFsb2csIGluc3RyKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQl3
bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOw0KICAgIC0NCiAgICAtCXdyZWZy
ZXNoKGRpYWxvZyk7DQogICAgLQ0KICAgIC0Jd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7DQogICAg
LQkJa2V5ID0gd2dldGNoKGRpYWxvZyk7DQogICAgLQ0KICAgIC0JCWlmIChidXR0b24gPT0gLTEp
IHsJLyogSW5wdXQgYm94IHNlbGVjdGVkICovDQogICAgLQkJCXN3aXRjaCAoa2V5KSB7DQogICAg
LQkJCWNhc2UgVEFCOg0KICAgIC0JCQljYXNlIEtFWV9VUDoNCiAgICAtCQkJY2FzZSBLRVlfRE9X
TjoNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9CQUNLU1BBQ0U6DQogICAgLQkJ
CWNhc2UgODogICAvKiBeSCAqLw0KICAgIC0JCQljYXNlIDEyNzogLyogXj8gKi8NCiAgICAtCQkJ
CWlmIChwb3MpIHsNCiAgICAtCQkJCQl3YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJveC5hdHIp
Ow0KICAgIC0JCQkJCWlmIChpbnB1dF94ID09IDApIHsNCiAgICAtCQkJCQkJc2hvd194LS07DQog
ICAgLQkJCQkJfSBlbHNlDQogICAgLQkJCQkJCWlucHV0X3gtLTsNCiAgICAtDQogICAgLQkJCQkJ
aWYgKHBvcyA8IGxlbikgew0KICAgIC0JCQkJCQlmb3IgKGkgPSBwb3MgLSAxOyBpIDwgbGVuOyBp
KyspIHsNCiAgICAtCQkJCQkJCWluc3RyW2ldID0gaW5zdHJbaSsxXTsNCiAgICAtCQkJCQkJfQ0K
ICAgIC0JCQkJCX0NCiAgICAtDQogICAgLQkJCQkJcG9zLS07DQogICAgLQkJCQkJbGVuLS07DQog
ICAgLQkJCQkJaW5zdHJbbGVuXSA9ICdcMCc7DQogICAgLQkJCQkJd21vdmUoZGlhbG9nLCBib3hf
eSwgYm94X3gpOw0KICAgIC0JCQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykgew0K
ICAgIC0JCQkJCQlpZiAoIWluc3RyW3Nob3dfeCArIGldKSB7DQogICAgLQkJCQkJCQl3YWRkY2go
ZGlhbG9nLCAnICcpOw0KICAgIC0JCQkJCQkJYnJlYWs7DQogICAgLQkJCQkJCX0NCiAgICAtCQkJ
CQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0KICAgIC0JCQkJCX0NCiAgICAt
CQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBpbnB1dF94ICsgYm94X3gpOw0KICAgIC0JCQkJCXdy
ZWZyZXNoKGRpYWxvZyk7DQogICAgLQkJCQl9DQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJ
Y2FzZSBLRVlfTEVGVDoNCiAgICAtCQkJCWlmIChwb3MgPiAwKSB7DQogICAgLQkJCQkJaWYgKGlu
cHV0X3ggPiAwKSB7DQogICAgLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIC0taW5wdXRfeCAr
IGJveF94KTsNCiAgICAtCQkJCQl9IGVsc2UgaWYgKGlucHV0X3ggPT0gMCkgew0KICAgIC0JCQkJ
CQlzaG93X3gtLTsNCiAgICAtCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOw0KICAg
IC0JCQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsNCiAgICAtCQkJCQkJCWlm
ICghaW5zdHJbc2hvd194ICsgaV0pIHsNCiAgICAtCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcp
Ow0KICAgIC0JCQkJCQkJCWJyZWFrOw0KICAgIC0JCQkJCQkJfQ0KICAgIC0JCQkJCQkJd2FkZGNo
KGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0KICAgIC0JCQkJCQl9DQogICAgLQkJCQkJCXdt
b3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsNCiAgICAtCQkJCQl9DQogICAgLQkJCQkJcG9zLS07
DQogICAgLQkJCQl9DQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJY2FzZSBLRVlfUklHSFQ6
DQogICAgLQkJCQlpZiAocG9zIDwgbGVuKSB7DQogICAgLQkJCQkJaWYgKGlucHV0X3ggPCBib3hf
d2lkdGggLSAxKSB7DQogICAgLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksICsraW5wdXRfeCAr
IGJveF94KTsNCiAgICAtCQkJCQl9IGVsc2UgaWYgKGlucHV0X3ggPT0gYm94X3dpZHRoIC0gMSkg
ew0KICAgIC0JCQkJCQlzaG93X3grKzsNCiAgICAtCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwg
Ym94X3gpOw0KICAgIC0JCQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsNCiAg
ICAtCQkJCQkJCWlmICghaW5zdHJbc2hvd194ICsgaV0pIHsNCiAgICAtCQkJCQkJCQl3YWRkY2go
ZGlhbG9nLCAnICcpOw0KICAgIC0JCQkJCQkJCWJyZWFrOw0KICAgIC0JCQkJCQkJfQ0KICAgIC0J
CQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0KICAgIC0JCQkJCQl9DQog
ICAgLQkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7DQogICAgLQkJ
CQkJfQ0KICAgIC0JCQkJCXBvcysrOw0KICAgIC0JCQkJfQ0KICAgIC0JCQkJY29udGludWU7DQog
ICAgLQkJCWRlZmF1bHQ6DQogICAgLQkJCQlpZiAoa2V5IDwgMHgxMDAgJiYgaXNwcmludChrZXkp
KSB7DQogICAgLQkJCQkJaWYgKGxlbiA8IE1BWF9MRU4pIHsNCiAgICAtCQkJCQkJd2F0dHJzZXQo
ZGlhbG9nLCBkbGcuaW5wdXRib3guYXRyKTsNCiAgICAtCQkJCQkJaWYgKHBvcyA8IGxlbikgew0K
ICAgIC0JCQkJCQkJZm9yIChpID0gbGVuOyBpID4gcG9zOyBpLS0pDQogICAgLQkJCQkJCQkJaW5z
dHJbaV0gPSBpbnN0cltpLTFdOw0KICAgIC0JCQkJCQkJaW5zdHJbcG9zXSA9IGtleTsNCiAgICAt
CQkJCQkJfSBlbHNlIHsNCiAgICAtCQkJCQkJCWluc3RyW2xlbl0gPSBrZXk7DQogICAgLQkJCQkJ
CX0NCiAgICAtCQkJCQkJcG9zKys7DQogICAgLQkJCQkJCWxlbisrOw0KICAgIC0JCQkJCQlpbnN0
cltsZW5dID0gJ1wwJzsNCiAgICAtDQogICAgLQkJCQkJCWlmIChpbnB1dF94ID09IGJveF93aWR0
aCAtIDEpIHsNCiAgICAtCQkJCQkJCXNob3dfeCsrOw0KICAgIC0JCQkJCQl9IGVsc2Ugew0KICAg
IC0JCQkJCQkJaW5wdXRfeCsrOw0KICAgIC0JCQkJCQl9DQogICAgLQ0KICAgIC0JCQkJCQl3bW92
ZShkaWFsb2csIGJveF95LCBib3hfeCk7DQogICAgLQkJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hf
d2lkdGg7IGkrKykgew0KICAgIC0JCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgew0KICAg
IC0JCQkJCQkJCXdhZGRjaChkaWFsb2csICcgJyk7DQogICAgLQkJCQkJCQkJYnJlYWs7DQogICAg
LQkJCQkJCQl9DQogICAgLQkJCQkJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7
DQogICAgLQkJCQkJCX0NCiAgICAtCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCAr
IGJveF94KTsNCiAgICAtCQkJCQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICAtCQkJCQl9IGVsc2UN
CiAgICAtCQkJCQkJZmxhc2goKTsJLyogQWxhcm0gdXNlciBhYm91dCBvdmVyZmxvdyAqLw0KICAg
IC0JCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJfQ0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0J
CXN3aXRjaCAoa2V5KSB7DQogICAgLQkJY2FzZSAnTyc6DQogICAgLQkJY2FzZSAnbyc6DQogICAg
LQkJCWRlbHdpbihkaWFsb2cpOw0KICAgIC0JCQlyZXR1cm4gMDsNCiAgICAtCQljYXNlICdIJzoN
CiAgICAtCQljYXNlICdoJzoNCiAgICAtCQkJZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCXJldHVy
biAxOw0KICAgIC0JCWNhc2UgS0VZX1VQOg0KICAgIC0JCWNhc2UgS0VZX0xFRlQ6DQogICAgLQkJ
CXN3aXRjaCAoYnV0dG9uKSB7DQogICAgLQkJCWNhc2UgLTE6DQogICAgLQkJCQlidXR0b24gPSAx
OwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLw0KICAgIC0JCQkJcHJp
bnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDEpOw0KICAgIC0JCQkJYnJlYWs7DQog
ICAgLQkJCWNhc2UgMDoNCiAgICAtCQkJCWJ1dHRvbiA9IC0xOwkvKiBJbmRpY2F0ZXMgaW5wdXQg
Ym94IGlzIHNlbGVjdGVkICovDQogICAgLQkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0
LCB3aWR0aCwgMCk7DQogICAgLQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0
X3gpOw0KICAgIC0JCQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0J
CQljYXNlIDE6DQogICAgLQkJCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24g
aXMgc2VsZWN0ZWQgKi8NCiAgICAtCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdp
ZHRoLCAwKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAg
IC0JCWNhc2UgVEFCOg0KICAgIC0JCWNhc2UgS0VZX0RPV046DQogICAgLQkJY2FzZSBLRVlfUklH
SFQ6DQogICAgLQkJCXN3aXRjaCAoYnV0dG9uKSB7DQogICAgLQkJCWNhc2UgLTE6DQogICAgLQkJ
CQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8NCiAg
ICAtCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICAtCQkJ
CWJyZWFrOw0KICAgIC0JCQljYXNlIDA6DQogICAgLQkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0
ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLw0KICAgIC0JCQkJcHJpbnRfYnV0dG9ucyhk
aWFsb2csIGhlaWdodCwgd2lkdGgsIDEpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2Ug
MToNCiAgICAtCQkJCWJ1dHRvbiA9IC0xOwkvKiBJbmRpY2F0ZXMgaW5wdXQgYm94IGlzIHNlbGVj
dGVkICovDQogICAgLQkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7
DQogICAgLQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOw0KICAgIC0J
CQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJ
CWJyZWFrOw0KICAgIC0JCWNhc2UgJyAnOg0KICAgIC0JCWNhc2UgJ1xuJzoNCiAgICAtCQkJZGVs
d2luKGRpYWxvZyk7DQogICAgLQkJCXJldHVybiAoYnV0dG9uID09IC0xID8gMCA6IGJ1dHRvbik7
DQogICAgLQkJY2FzZSAnWCc6DQogICAgLQkJY2FzZSAneCc6DQogICAgLQkJCWtleSA9IEtFWV9F
U0M7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX0VTQzoNCiAgICAtCQkJa2V5ID0g
b25fa2V5X2VzYyhkaWFsb2cpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9SRVNJ
WkU6DQogICAgLQkJCWRlbHdpbihkaWFsb2cpOw0KICAgIC0JCQlvbl9rZXlfcmVzaXplKCk7DQog
ICAgLQkJCWdvdG8gZG9fcmVzaXplOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLQlk
ZWx3aW4oZGlhbG9nKTsNCiAgICAtCXJldHVybiBLRVlfRVNDOwkJLyogRVNDIHByZXNzZWQgKi8N
CiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL21l
bnVib3guYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jDQogICAgZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggNThjMmY4YS4uMDAwMDAwMA0KICAgIC0t
LSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cvbWVudWJveC5jDQogICAgKysrIC9kZXYv
bnVsbA0KICAgIEBAIC0xLDQyNCArMCwwIEBADQogICAgLS8vIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wKw0KICAgIC0vKg0KICAgIC0gKiAgbWVudWJveC5jIC0tIGltcGxlbWVudHMg
dGhlIG1lbnUgYm94DQogICAgLSAqDQogICAgLSAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExh
bSAobGFtODM2QGNzLmN1aGsuaGspDQogICAgLSAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVM
IENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2Fwd0BjZncuY29tKQ0KICAgIC0gKi8N
CiAgICAtDQogICAgLS8qDQogICAgLSAqICBDaGFuZ2VzIGJ5IENsaWZmb3JkIFdvbGYgKGdvZEBj
bGlmZm9yZC5hdCkNCiAgICAtICoNCiAgICAtICogIFsgMTk5OC0wNi0xMyBdDQogICAgLSAqDQog
ICAgLSAqICAgICopICBBIGJ1Z2ZpeCBmb3IgdGhlIFBhZ2UtRG93biBwcm9ibGVtDQogICAgLSAq
DQogICAgLSAqICAgICopICBGb3JtZXJseSB3aGVuIEkgdXNlZCBQYWdlIERvd24gYW5kIFBhZ2Ug
VXAsIHRoZSBjdXJzb3Igd291bGQgYmUgc2V0DQogICAgLSAqICAgICAgICB0byB0aGUgZmlyc3Qg
cG9zaXRpb24gaW4gdGhlIG1lbnUgYm94LiAgTm93IGx4ZGlhbG9nIGlzIGEgYml0DQogICAgLSAq
ICAgICAgICBzbWFydGVyIGFuZCB3b3JrcyBtb3JlIGxpa2Ugb3RoZXIgbWVudSBzeXN0ZW1zIChq
dXN0IGhhdmUgYSBsb29rIGF0DQogICAgLSAqICAgICAgICBpdCkuDQogICAgLSAqDQogICAgLSAq
ICAgICopICBGb3JtZXJseSBpZiBJIHNlbGVjdGVkIHNvbWV0aGluZyBteSBzY3JvbGxpbmcgd291
bGQgYmUgYnJva2VuIGJlY2F1c2UNCiAgICAtICogICAgICAgIGx4ZGlhbG9nIGlzIHJlLWludm9r
ZWQgYnkgdGhlIE1lbnVjb25maWcgc2hlbGwgc2NyaXB0LCBjYW4ndA0KICAgIC0gKiAgICAgICAg
cmVtZW1iZXIgdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9uLCBhbmQganVzdCBzZXRzIGl0IHNv
IHRoYXQgdGhlDQogICAgLSAqICAgICAgICBjdXJzb3IgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUg
Ym94LiAgTm93IGl0IHdyaXRlcyB0aGUgdGVtcG9yYXJ5IGZpbGUNCiAgICAtICogICAgICAgIGx4
ZGlhbG9nLnNjcmx0bXAgd2hpY2ggY29udGFpbnMgdGhpcyBpbmZvcm1hdGlvbi4gVGhlIGZpbGUg
aXMNCiAgICAtICogICAgICAgIGRlbGV0ZWQgYnkgbHhkaWFsb2cgaWYgdGhlIHVzZXIgbGVhdmVz
IGEgc3VibWVudSBvciBlbnRlcnMgYSBuZXcNCiAgICAtICogICAgICAgIG9uZSwgYnV0IGl0IHdv
dWxkIGJlIG5pY2UgaWYgTWVudWNvbmZpZyBjb3VsZCBtYWtlIGFub3RoZXIgInJtIC1mIg0KICAg
IC0gKiAgICAgICAganVzdCB0byBiZSBzdXJlLiAgSnVzdCB0cnkgaXQgb3V0IC0geW91IHdpbGwg
cmVjb2duaXNlIGEgZGlmZmVyZW5jZSENCiAgICAtICoNCiAgICAtICogIFsgMTk5OC0wNi0xNCBd
DQogICAgLSAqDQogICAgLSAqICAgICopICBOb3cgbHhkaWFsb2cgaXMgY3Jhc2gtc2FmZSBhZ2Fp
bnN0IGJyb2tlbiAibHhkaWFsb2cuc2NybHRtcCIgZmlsZXMNCiAgICAtICogICAgICAgIGFuZCBt
ZW51cyBjaGFuZ2UgdGhlaXIgc2l6ZSBvbiB0aGUgZmx5Lg0KICAgIC0gKg0KICAgIC0gKiAgICAq
KSAgSWYgZm9yIHNvbWUgcmVhc29uIHRoZSBsYXN0IHNjcm9sbGluZyBwb3NpdGlvbiBpcyBub3Qg
c2F2ZWQgYnkNCiAgICAtICogICAgICAgIGx4ZGlhbG9nLCBpdCBzZXRzIHRoZSBzY3JvbGxpbmcg
c28gdGhhdCB0aGUgc2VsZWN0ZWQgaXRlbSBpcyBpbiB0aGUNCiAgICAtICogICAgICAgIG1pZGRs
ZSBvZiB0aGUgbWVudSBib3gsIG5vdCBhdCB0aGUgYm90dG9tLg0KICAgIC0gKg0KICAgIC0gKiAw
MiBKYW51YXJ5IDE5OTksIE1pY2hhZWwgRWxpemFiZXRoIENoYXN0YWluIChtZWNAc2hvdXQubmV0
KQ0KICAgIC0gKiBSZXNldCAnc2Nyb2xsJyB0byAwIGlmIHRoZSB2YWx1ZSBmcm9tIGx4ZGlhbG9n
LnNjcmx0bXAgaXMgYm9ndXMuDQogICAgLSAqIFRoaXMgZml4ZXMgYSBidWcgaW4gTWVudWNvbmZp
ZyB3aGVyZSB1c2luZyAnICcgdG8gZGVzY2VuZCBpbnRvIG1lbnVzDQogICAgLSAqIHdvdWxkIGxl
YXZlIG1pcy1zeW5jaHJvbml6ZWQgbHhkaWFsb2cuc2NybHRtcCBmaWxlcyBseWluZyBhcm91bmQs
DQogICAgLSAqIGZzY2FuZiB3b3VsZCByZWFkIGluICdzY3JvbGwnLCBhbmQgZXZlbnR1YWxseSB0
aGF0IHZhbHVlIHdvdWxkIGdldCB1c2VkLg0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpbmNsdWRl
ICJkaWFsb2cuaCINCiAgICAtDQogICAgLXN0YXRpYyBpbnQgbWVudV93aWR0aCwgaXRlbV94Ow0K
ICAgIC0NCiAgICAtLyoNCiAgICAtICogUHJpbnQgbWVudSBpdGVtDQogICAgLSAqLw0KICAgIC1z
dGF0aWMgdm9pZCBkb19wcmludF9pdGVtKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqaXRlbSwg
aW50IGxpbmVfeSwNCiAgICAtCQkJICBpbnQgc2VsZWN0ZWQsIGludCBob3RrZXkpDQogICAgLXsN
CiAgICAtCWludCBqOw0KICAgIC0JY2hhciAqbWVudV9pdGVtID0gbWFsbG9jKG1lbnVfd2lkdGgg
KyAxKTsNCiAgICAtDQogICAgLQlzdHJuY3B5KG1lbnVfaXRlbSwgaXRlbSwgbWVudV93aWR0aCAt
IGl0ZW1feCk7DQogICAgLQltZW51X2l0ZW1bbWVudV93aWR0aCAtIGl0ZW1feF0gPSAnXDAnOw0K
ICAgIC0JaiA9IGZpcnN0X2FscGhhKG1lbnVfaXRlbSwgIll5Tm5NbUhoIik7DQogICAgLQ0KICAg
IC0JLyogQ2xlYXIgJ3Jlc2lkdWUnIG9mIGxhc3QgaXRlbSAqLw0KICAgIC0Jd2F0dHJzZXQod2lu
LCBkbGcubWVudWJveC5hdHIpOw0KICAgIC0Jd21vdmUod2luLCBsaW5lX3ksIDApOw0KICAgIC0j
aWYgT0xEX05DVVJTRVMNCiAgICAtCXsNCiAgICAtCQlpbnQgaTsNCiAgICAtCQlmb3IgKGkgPSAw
OyBpIDwgbWVudV93aWR0aDsgaSsrKQ0KICAgIC0JCQl3YWRkY2god2luLCAnICcpOw0KICAgIC0J
fQ0KICAgIC0jZWxzZQ0KICAgIC0Jd2NscnRvZW9sKHdpbik7DQogICAgLSNlbmRpZg0KICAgIC0J
d2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5pdGVtX3NlbGVjdGVkLmF0ciA6IGRsZy5pdGVt
LmF0cik7DQogICAgLQltdndhZGRzdHIod2luLCBsaW5lX3ksIGl0ZW1feCwgbWVudV9pdGVtKTsN
CiAgICAtCWlmIChob3RrZXkpIHsNCiAgICAtCQl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxn
LnRhZ19rZXlfc2VsZWN0ZWQuYXRyDQogICAgLQkJCSA6IGRsZy50YWdfa2V5LmF0cik7DQogICAg
LQkJbXZ3YWRkY2god2luLCBsaW5lX3ksIGl0ZW1feCArIGosIG1lbnVfaXRlbVtqXSk7DQogICAg
LQl9DQogICAgLQlpZiAoc2VsZWN0ZWQpIHsNCiAgICAtCQl3bW92ZSh3aW4sIGxpbmVfeSwgaXRl
bV94ICsgMSk7DQogICAgLQl9DQogICAgLQlmcmVlKG1lbnVfaXRlbSk7DQogICAgLQl3cmVmcmVz
aCh3aW4pOw0KICAgIC19DQogICAgLQ0KICAgIC0jZGVmaW5lIHByaW50X2l0ZW0oaW5kZXgsIGNo
b2ljZSwgc2VsZWN0ZWQpCQkJCVwNCiAgICAtZG8gewkJCQkJCQkJCVwNCiAgICAtCWl0ZW1fc2V0
KGluZGV4KTsJCQkJCQlcDQogICAgLQlkb19wcmludF9pdGVtKG1lbnUsIGl0ZW1fc3RyKCksIGNo
b2ljZSwgc2VsZWN0ZWQsICFpdGVtX2lzX3RhZygnOicpKTsgXA0KICAgIC19IHdoaWxlICgwKQ0K
ICAgIC0NCiAgICAtLyoNCiAgICAtICogUHJpbnQgdGhlIHNjcm9sbCBpbmRpY2F0b3JzLg0KICAg
IC0gKi8NCiAgICAtc3RhdGljIHZvaWQgcHJpbnRfYXJyb3dzKFdJTkRPVyAqIHdpbiwgaW50IGl0
ZW1fbm8sIGludCBzY3JvbGwsIGludCB5LCBpbnQgeCwNCiAgICAtCQkJIGludCBoZWlnaHQpDQog
ICAgLXsNCiAgICAtCWludCBjdXJfeSwgY3VyX3g7DQogICAgLQ0KICAgIC0JZ2V0eXgod2luLCBj
dXJfeSwgY3VyX3gpOw0KICAgIC0NCiAgICAtCXdtb3ZlKHdpbiwgeSwgeCk7DQogICAgLQ0KICAg
IC0JaWYgKHNjcm9sbCA+IDApIHsNCiAgICAtCQl3YXR0cnNldCh3aW4sIGRsZy51YXJyb3cuYXRy
KTsNCiAgICAtCQl3YWRkY2god2luLCBBQ1NfVUFSUk9XKTsNCiAgICAtCQl3YWRkc3RyKHdpbiwg
IigtKSIpOw0KICAgIC0JfSBlbHNlIHsNCiAgICAtCQl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94
LmF0cik7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCQl3YWRkY2god2lu
LCBBQ1NfSExJTkUpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAgLQkJd2Fk
ZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQl5ID0geSArIGhlaWdo
dCArIDE7DQogICAgLQl3bW92ZSh3aW4sIHksIHgpOw0KICAgIC0Jd3JlZnJlc2god2luKTsNCiAg
ICAtDQogICAgLQlpZiAoKGhlaWdodCA8IGl0ZW1fbm8pICYmIChzY3JvbGwgKyBoZWlnaHQgPCBp
dGVtX25vKSkgew0KICAgIC0JCXdhdHRyc2V0KHdpbiwgZGxnLmRhcnJvdy5hdHIpOw0KICAgIC0J
CXdhZGRjaCh3aW4sIEFDU19EQVJST1cpOw0KICAgIC0JCXdhZGRzdHIod2luLCAiKCspIik7DQog
ICAgLQl9IGVsc2Ugew0KICAgIC0JCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3hfYm9yZGVyLmF0
cik7DQogICAgLQkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCQl3YWRkY2god2luLCBB
Q1NfSExJTkUpOw0KICAgIC0JCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAgLQkJd2FkZGNo
KHdpbiwgQUNTX0hMSU5FKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQl3bW92ZSh3aW4sIGN1cl95
LCBjdXJfeCk7DQogICAgLQl3cmVmcmVzaCh3aW4pOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0K
ICAgIC0gKiBEaXNwbGF5IHRoZSB0ZXJtaW5hdGlvbiBidXR0b25zLg0KICAgIC0gKi8NCiAgICAt
c3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiB3aW4sIGludCBoZWlnaHQsIGludCB3
aWR0aCwgaW50IHNlbGVjdGVkKQ0KICAgIC17DQogICAgLQlpbnQgeCA9IHdpZHRoIC8gMiAtIDI4
Ow0KICAgIC0JaW50IHkgPSBoZWlnaHQgLSAyOw0KICAgIC0NCiAgICAtCXByaW50X2J1dHRvbih3
aW4sICJTZWxlY3QiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsNCiAgICAtCXByaW50X2J1dHRvbih3
aW4sICIgRXhpdCAiLCB5LCB4ICsgMTIsIHNlbGVjdGVkID09IDEpOw0KICAgIC0JcHJpbnRfYnV0
dG9uKHdpbiwgIiBIZWxwICIsIHksIHggKyAyNCwgc2VsZWN0ZWQgPT0gMik7DQogICAgLQlwcmlu
dF9idXR0b24od2luLCAiIFNhdmUgIiwgeSwgeCArIDM2LCBzZWxlY3RlZCA9PSAzKTsNCiAgICAt
CXByaW50X2J1dHRvbih3aW4sICIgTG9hZCAiLCB5LCB4ICsgNDgsIHNlbGVjdGVkID09IDQpOw0K
ICAgIC0NCiAgICAtCXdtb3ZlKHdpbiwgeSwgeCArIDEgKyAxMiAqIHNlbGVjdGVkKTsNCiAgICAt
CXdyZWZyZXNoKHdpbik7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHNjcm9sbCB1cCBuIGxpbmVz
IChuIG1heSBiZSBuZWdhdGl2ZSkgKi8NCiAgICAtc3RhdGljIHZvaWQgZG9fc2Nyb2xsKFdJTkRP
VyAqd2luLCBpbnQgKnNjcm9sbCwgaW50IG4pDQogICAgLXsNCiAgICAtCS8qIFNjcm9sbCBtZW51
IHVwICovDQogICAgLQlzY3JvbGxvayh3aW4sIFRSVUUpOw0KICAgIC0Jd3Njcmwod2luLCBuKTsN
CiAgICAtCXNjcm9sbG9rKHdpbiwgRkFMU0UpOw0KICAgIC0JKnNjcm9sbCA9ICpzY3JvbGwgKyBu
Ow0KICAgIC0Jd3JlZnJlc2god2luKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICog
RGlzcGxheSBhIG1lbnUgZm9yIGNob29zaW5nIGFtb25nIGEgbnVtYmVyIG9mIG9wdGlvbnMNCiAg
ICAtICovDQogICAgLWludCBkaWFsb2dfbWVudShjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hh
ciAqcHJvbXB0LA0KICAgIC0JCWNvbnN0IHZvaWQgKnNlbGVjdGVkLCBpbnQgKnNfc2Nyb2xsKQ0K
ICAgIC17DQogICAgLQlpbnQgaSwgaiwgeCwgeSwgYm94X3gsIGJveF95Ow0KICAgIC0JaW50IGhl
aWdodCwgd2lkdGgsIG1lbnVfaGVpZ2h0Ow0KICAgIC0JaW50IGtleSA9IDAsIGJ1dHRvbiA9IDAs
IHNjcm9sbCA9IDAsIGNob2ljZSA9IDA7DQogICAgLQlpbnQgZmlyc3RfaXRlbSA9ICAwLCBtYXhf
Y2hvaWNlOw0KICAgIC0JV0lORE9XICpkaWFsb2csICptZW51Ow0KICAgIC0NCiAgICAtZG9fcmVz
aXplOg0KICAgIC0JaGVpZ2h0ID0gZ2V0bWF4eShzdGRzY3IpOw0KICAgIC0Jd2lkdGggPSBnZXRt
YXh4KHN0ZHNjcik7DQogICAgLQlpZiAoaGVpZ2h0IDwgTUVOVUJPWF9IRUlHVEhfTUlOIHx8IHdp
ZHRoIDwgTUVOVUJPWF9XSURUSF9NSU4pDQogICAgLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01B
TEw7DQogICAgLQ0KICAgIC0JaGVpZ2h0IC09IDQ7DQogICAgLQl3aWR0aCAgLT0gNTsNCiAgICAt
CW1lbnVfaGVpZ2h0ID0gaGVpZ2h0IC0gMTA7DQogICAgLQ0KICAgIC0JbWF4X2Nob2ljZSA9IE1J
TihtZW51X2hlaWdodCwgaXRlbV9jb3VudCgpKTsNCiAgICAtDQogICAgLQkvKiBjZW50ZXIgZGlh
bG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICAtCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgp
IC8gMjsNCiAgICAtCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7DQogICAgLQ0K
ICAgIC0JZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsNCiAgICAtDQog
ICAgLQlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7DQogICAgLQlrZXlwYWQo
ZGlhbG9nLCBUUlVFKTsNCiAgICAtDQogICAgLQlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdo
dCwgd2lkdGgsDQogICAgLQkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7DQogICAg
LQl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsNCiAgICAtCW12d2FkZGNoKGRpYWxv
ZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0KICAgIC0JZm9yIChpID0gMDsgaSA8IHdpZHRo
IC0gMjsgaSsrKQ0KICAgIC0JCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7DQogICAgLQl3YXR0
cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAtCXdia2dkc2V0KGRpYWxvZywgZGxn
LmRpYWxvZy5hdHIgJiBBX0NPTE9SKTsNCiAgICAtCXdhZGRjaChkaWFsb2csIEFDU19SVEVFKTsN
CiAgICAtDQogICAgLQlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7DQogICAgLQ0K
ICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQogICAgLQlwcmludF9hdXRv
d3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsNCiAgICAtDQogICAgLQltZW51
X3dpZHRoID0gd2lkdGggLSA2Ow0KICAgIC0JYm94X3kgPSBoZWlnaHQgLSBtZW51X2hlaWdodCAt
IDU7DQogICAgLQlib3hfeCA9ICh3aWR0aCAtIG1lbnVfd2lkdGgpIC8gMiAtIDE7DQogICAgLQ0K
ICAgIC0JLyogY3JlYXRlIG5ldyB3aW5kb3cgZm9yIHRoZSBtZW51ICovDQogICAgLQltZW51ID0g
c3Vid2luKGRpYWxvZywgbWVudV9oZWlnaHQsIG1lbnVfd2lkdGgsDQogICAgLQkJICAgICAgeSAr
IGJveF95ICsgMSwgeCArIGJveF94ICsgMSk7DQogICAgLQlrZXlwYWQobWVudSwgVFJVRSk7DQog
ICAgLQ0KICAgIC0JLyogZHJhdyBhIGJveCBhcm91bmQgdGhlIG1lbnUgaXRlbXMgKi8NCiAgICAt
CWRyYXdfYm94KGRpYWxvZywgYm94X3ksIGJveF94LCBtZW51X2hlaWdodCArIDIsIG1lbnVfd2lk
dGggKyAyLA0KICAgIC0JCSBkbGcubWVudWJveF9ib3JkZXIuYXRyLCBkbGcubWVudWJveC5hdHIp
Ow0KICAgIC0NCiAgICAtCWlmIChtZW51X3dpZHRoID49IDgwKQ0KICAgIC0JCWl0ZW1feCA9ICht
ZW51X3dpZHRoIC0gNzApIC8gMjsNCiAgICAtCWVsc2UNCiAgICAtCQlpdGVtX3ggPSA0Ow0KICAg
IC0NCiAgICAtCS8qIFNldCBjaG9pY2UgdG8gZGVmYXVsdCBpdGVtICovDQogICAgLQlpdGVtX2Zv
cmVhY2goKQ0KICAgIC0JCWlmIChzZWxlY3RlZCAmJiAoc2VsZWN0ZWQgPT0gaXRlbV9kYXRhKCkp
KQ0KICAgIC0JCQljaG9pY2UgPSBpdGVtX24oKTsNCiAgICAtCS8qIGdldCB0aGUgc2F2ZWQgc2Ny
b2xsIGluZm8gKi8NCiAgICAtCXNjcm9sbCA9ICpzX3Njcm9sbDsNCiAgICAtCWlmICgoc2Nyb2xs
IDw9IGNob2ljZSkgJiYgKHNjcm9sbCArIG1heF9jaG9pY2UgPiBjaG9pY2UpICYmDQogICAgLQkg
ICAoc2Nyb2xsID49IDApICYmIChzY3JvbGwgKyBtYXhfY2hvaWNlIDw9IGl0ZW1fY291bnQoKSkp
IHsNCiAgICAtCQlmaXJzdF9pdGVtID0gc2Nyb2xsOw0KICAgIC0JCWNob2ljZSA9IGNob2ljZSAt
IHNjcm9sbDsNCiAgICAtCX0gZWxzZSB7DQogICAgLQkJc2Nyb2xsID0gMDsNCiAgICAtCX0NCiAg
ICAtCWlmICgoY2hvaWNlID49IG1heF9jaG9pY2UpKSB7DQogICAgLQkJaWYgKGNob2ljZSA+PSBp
dGVtX2NvdW50KCkgLSBtYXhfY2hvaWNlIC8gMikNCiAgICAtCQkJc2Nyb2xsID0gZmlyc3RfaXRl
bSA9IGl0ZW1fY291bnQoKSAtIG1heF9jaG9pY2U7DQogICAgLQkJZWxzZQ0KICAgIC0JCQlzY3Jv
bGwgPSBmaXJzdF9pdGVtID0gY2hvaWNlIC0gbWF4X2Nob2ljZSAvIDI7DQogICAgLQkJY2hvaWNl
ID0gY2hvaWNlIC0gc2Nyb2xsOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCS8qIFByaW50IHRoZSBt
ZW51ICovDQogICAgLQlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7DQogICAgLQkJ
cHJpbnRfaXRlbShmaXJzdF9pdGVtICsgaSwgaSwgaSA9PSBjaG9pY2UpOw0KICAgIC0JfQ0KICAg
IC0NCiAgICAtCXdub3V0cmVmcmVzaChtZW51KTsNCiAgICAtDQogICAgLQlwcmludF9hcnJvd3Mo
ZGlhbG9nLCBpdGVtX2NvdW50KCksIHNjcm9sbCwNCiAgICAtCQkgICAgIGJveF95LCBib3hfeCAr
IGl0ZW1feCArIDEsIG1lbnVfaGVpZ2h0KTsNCiAgICAtDQogICAgLQlwcmludF9idXR0b25zKGRp
YWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgLQl3bW92ZShtZW51LCBjaG9pY2UsIGl0ZW1f
eCArIDEpOw0KICAgIC0Jd3JlZnJlc2gobWVudSk7DQogICAgLQ0KICAgIC0Jd2hpbGUgKGtleSAh
PSBLRVlfRVNDKSB7DQogICAgLQkJa2V5ID0gd2dldGNoKG1lbnUpOw0KICAgIC0NCiAgICAtCQlp
ZiAoa2V5IDwgMjU2ICYmIGlzYWxwaGEoa2V5KSkNCiAgICAtCQkJa2V5ID0gdG9sb3dlcihrZXkp
Ow0KICAgIC0NCiAgICAtCQlpZiAoc3RyY2hyKCJ5bm1oIiwga2V5KSkNCiAgICAtCQkJaSA9IG1h
eF9jaG9pY2U7DQogICAgLQkJZWxzZSB7DQogICAgLQkJCWZvciAoaSA9IGNob2ljZSArIDE7IGkg
PCBtYXhfY2hvaWNlOyBpKyspIHsNCiAgICAtCQkJCWl0ZW1fc2V0KHNjcm9sbCArIGkpOw0KICAg
IC0JCQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1fc3RyKCksICJZeU5uTW1IaCIpOw0KICAgIC0JCQkJ
aWYgKGtleSA9PSB0b2xvd2VyKGl0ZW1fc3RyKClbal0pKQ0KICAgIC0JCQkJCWJyZWFrOw0KICAg
IC0JCQl9DQogICAgLQkJCWlmIChpID09IG1heF9jaG9pY2UpDQogICAgLQkJCQlmb3IgKGkgPSAw
OyBpIDwgbWF4X2Nob2ljZTsgaSsrKSB7DQogICAgLQkJCQkJaXRlbV9zZXQoc2Nyb2xsICsgaSk7
DQogICAgLQkJCQkJaiA9IGZpcnN0X2FscGhhKGl0ZW1fc3RyKCksICJZeU5uTW1IaCIpOw0KICAg
IC0JCQkJCWlmIChrZXkgPT0gdG9sb3dlcihpdGVtX3N0cigpW2pdKSkNCiAgICAtCQkJCQkJYnJl
YWs7DQogICAgLQkJCQl9DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlpZiAoaXRlbV9jb3VudCgp
ICE9IDAgJiYNCiAgICAtCQkgICAgKGkgPCBtYXhfY2hvaWNlIHx8DQogICAgLQkJICAgICBrZXkg
PT0gS0VZX1VQIHx8IGtleSA9PSBLRVlfRE9XTiB8fA0KICAgIC0JCSAgICAga2V5ID09ICctJyB8
fCBrZXkgPT0gJysnIHx8DQogICAgLQkJICAgICBrZXkgPT0gS0VZX1BQQUdFIHx8IGtleSA9PSBL
RVlfTlBBR0UpKSB7DQogICAgLQkJCS8qIFJlbW92ZSBoaWdobGlndCBvZiBjdXJyZW50IGl0ZW0g
Ki8NCiAgICAtCQkJcHJpbnRfaXRlbShzY3JvbGwgKyBjaG9pY2UsIGNob2ljZSwgRkFMU0UpOw0K
ICAgIC0NCiAgICAtCQkJaWYgKGtleSA9PSBLRVlfVVAgfHwga2V5ID09ICctJykgew0KICAgIC0J
CQkJaWYgKGNob2ljZSA8IDIgJiYgc2Nyb2xsKSB7DQogICAgLQkJCQkJLyogU2Nyb2xsIG1lbnUg
ZG93biAqLw0KICAgIC0JCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAtMSk7DQogICAgLQ0K
ICAgIC0JCQkJCXByaW50X2l0ZW0oc2Nyb2xsLCAwLCBGQUxTRSk7DQogICAgLQkJCQl9IGVsc2UN
CiAgICAtCQkJCQljaG9pY2UgPSBNQVgoY2hvaWNlIC0gMSwgMCk7DQogICAgLQ0KICAgIC0JCQl9
IGVsc2UgaWYgKGtleSA9PSBLRVlfRE9XTiB8fCBrZXkgPT0gJysnKSB7DQogICAgLQkJCQlwcmlu
dF9pdGVtKHNjcm9sbCtjaG9pY2UsIGNob2ljZSwgRkFMU0UpOw0KICAgIC0NCiAgICAtCQkJCWlm
ICgoY2hvaWNlID4gbWF4X2Nob2ljZSAtIDMpICYmDQogICAgLQkJCQkgICAgKHNjcm9sbCArIG1h
eF9jaG9pY2UgPCBpdGVtX2NvdW50KCkpKSB7DQogICAgLQkJCQkJLyogU2Nyb2xsIG1lbnUgdXAg
Ki8NCiAgICAtCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgMSk7DQogICAgLQ0KICAgIC0J
CQkJCXByaW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UgLSAxLA0KICAgIC0JCQkJCQkgICBtYXhf
Y2hvaWNlIC0gMSwgRkFMU0UpOw0KICAgIC0JCQkJfSBlbHNlDQogICAgLQkJCQkJY2hvaWNlID0g
TUlOKGNob2ljZSArIDEsIG1heF9jaG9pY2UgLSAxKTsNCiAgICAtDQogICAgLQkJCX0gZWxzZSBp
ZiAoa2V5ID09IEtFWV9QUEFHRSkgew0KICAgIC0JCQkJc2Nyb2xsb2sobWVudSwgVFJVRSk7DQog
ICAgLQkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBpKyspIHsNCiAgICAtCQkJCQlp
ZiAoc2Nyb2xsID4gMCkgew0KICAgIC0JCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgLTEp
Ow0KICAgIC0JCQkJCQlwcmludF9pdGVtKHNjcm9sbCwgMCwgRkFMU0UpOw0KICAgIC0JCQkJCX0g
ZWxzZSB7DQogICAgLQkJCQkJCWlmIChjaG9pY2UgPiAwKQ0KICAgIC0JCQkJCQkJY2hvaWNlLS07
DQogICAgLQkJCQkJfQ0KICAgIC0JCQkJfQ0KICAgIC0NCiAgICAtCQkJfSBlbHNlIGlmIChrZXkg
PT0gS0VZX05QQUdFKSB7DQogICAgLQkJCQlmb3IgKGkgPSAwOyAoaSA8IG1heF9jaG9pY2UpOyBp
KyspIHsNCiAgICAtCQkJCQlpZiAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8IGl0ZW1fY291bnQoKSkg
ew0KICAgIC0JCQkJCQlkb19zY3JvbGwobWVudSwgJnNjcm9sbCwgMSk7DQogICAgLQkJCQkJCXBy
aW50X2l0ZW0oc2Nyb2xsK21heF9jaG9pY2UtMSwNCiAgICAtCQkJCQkJCSAgIG1heF9jaG9pY2Ug
LSAxLCBGQUxTRSk7DQogICAgLQkJCQkJfSBlbHNlIHsNCiAgICAtCQkJCQkJaWYgKGNob2ljZSAr
IDEgPCBtYXhfY2hvaWNlKQ0KICAgIC0JCQkJCQkJY2hvaWNlKys7DQogICAgLQkJCQkJfQ0KICAg
IC0JCQkJfQ0KICAgIC0JCQl9IGVsc2UNCiAgICAtCQkJCWNob2ljZSA9IGk7DQogICAgLQ0KICAg
IC0JCQlwcmludF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBUUlVFKTsNCiAgICAtDQog
ICAgLQkJCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fY291bnQoKSwgc2Nyb2xsLA0KICAgIC0J
CQkJICAgICBib3hfeSwgYm94X3ggKyBpdGVtX3ggKyAxLCBtZW51X2hlaWdodCk7DQogICAgLQ0K
ICAgIC0JCQl3bm91dHJlZnJlc2goZGlhbG9nKTsNCiAgICAtCQkJd3JlZnJlc2gobWVudSk7DQog
ICAgLQ0KICAgIC0JCQljb250aW51ZTsJLyogd2FpdCBmb3IgYW5vdGhlciBrZXkgcHJlc3MgKi8N
CiAgICAtCQl9DQogICAgLQ0KICAgIC0JCXN3aXRjaCAoa2V5KSB7DQogICAgLQkJY2FzZSBLRVlf
TEVGVDoNCiAgICAtCQljYXNlIFRBQjoNCiAgICAtCQljYXNlIEtFWV9SSUdIVDoNCiAgICAtCQkJ
YnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApDQog
ICAgLQkJCSAgICA/IDQgOiAoYnV0dG9uID4gNCA/IDAgOiBidXR0b24pOw0KICAgIC0NCiAgICAt
CQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIGJ1dHRvbik7DQogICAgLQkJ
CXdyZWZyZXNoKG1lbnUpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICcgJzoNCiAgICAt
CQljYXNlICdzJzoNCiAgICAtCQljYXNlICd5JzoNCiAgICAtCQljYXNlICduJzoNCiAgICAtCQlj
YXNlICdtJzoNCiAgICAtCQljYXNlICcvJzoNCiAgICAtCQljYXNlICdoJzoNCiAgICAtCQljYXNl
ICc/JzoNCiAgICAtCQljYXNlICd6JzoNCiAgICAtCQljYXNlICdcbic6DQogICAgLQkJCS8qIHNh
dmUgc2Nyb2xsIGluZm8gKi8NCiAgICAtCQkJKnNfc2Nyb2xsID0gc2Nyb2xsOw0KICAgIC0JCQlk
ZWx3aW4obWVudSk7DQogICAgLQkJCWRlbHdpbihkaWFsb2cpOw0KICAgIC0JCQlpdGVtX3NldChz
Y3JvbGwgKyBjaG9pY2UpOw0KICAgIC0JCQlpdGVtX3NldF9zZWxlY3RlZCgxKTsNCiAgICAtCQkJ
c3dpdGNoIChrZXkpIHsNCiAgICAtCQkJY2FzZSAnaCc6DQogICAgLQkJCWNhc2UgJz8nOg0KICAg
IC0JCQkJcmV0dXJuIDI7DQogICAgLQkJCWNhc2UgJ3MnOg0KICAgIC0JCQljYXNlICd5JzoNCiAg
ICAtCQkJCXJldHVybiA1Ow0KICAgIC0JCQljYXNlICduJzoNCiAgICAtCQkJCXJldHVybiA2Ow0K
ICAgIC0JCQljYXNlICdtJzoNCiAgICAtCQkJCXJldHVybiA3Ow0KICAgIC0JCQljYXNlICcgJzoN
CiAgICAtCQkJCXJldHVybiA4Ow0KICAgIC0JCQljYXNlICcvJzoNCiAgICAtCQkJCXJldHVybiA5
Ow0KICAgIC0JCQljYXNlICd6JzoNCiAgICAtCQkJCXJldHVybiAxMDsNCiAgICAtCQkJY2FzZSAn
XG4nOg0KICAgIC0JCQkJcmV0dXJuIGJ1dHRvbjsNCiAgICAtCQkJfQ0KICAgIC0JCQlyZXR1cm4g
MDsNCiAgICAtCQljYXNlICdlJzoNCiAgICAtCQljYXNlICd4JzoNCiAgICAtCQkJa2V5ID0gS0VZ
X0VTQzsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRVNDOg0KICAgIC0JCQlrZXkg
PSBvbl9rZXlfZXNjKG1lbnUpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9SRVNJ
WkU6DQogICAgLQkJCW9uX2tleV9yZXNpemUoKTsNCiAgICAtCQkJZGVsd2luKG1lbnUpOw0KICAg
IC0JCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAtCQkJZ290byBkb19yZXNpemU7DQogICAgLQkJfQ0K
ICAgIC0JfQ0KICAgIC0JZGVsd2luKG1lbnUpOw0KICAgIC0JZGVsd2luKGRpYWxvZyk7DQogICAg
LQlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8NCiAgICAtfQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9nL3RleHRib3guYyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbHhkaWFsb2cvdGV4dGJveC5jDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggNGUzMzliMS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
bHhkaWFsb2cvdGV4dGJveC5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDM5NSArMCww
IEBADQogICAgLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KICAgIC0vKg0K
ICAgIC0gKiAgdGV4dGJveC5jIC0tIGltcGxlbWVudHMgdGhlIHRleHQgYm94DQogICAgLSAqDQog
ICAgLSAqICBPUklHSU5BTCBBVVRIT1I6IFNhdmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQog
ICAgLSAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2Fk
Y2FwIChyb2FkY2FwQGNmdy5jb20pDQogICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1ZGUgImRp
YWxvZy5oIg0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbik7DQogICAg
LXN0YXRpYyB2b2lkIHByaW50X3BhZ2UoV0lORE9XICp3aW4sIGludCBoZWlnaHQsIGludCB3aWR0
aCwgdXBkYXRlX3RleHRfZm4NCiAgICAtCQkgICAgICAgdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEp
Ow0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqd2luLCBpbnQgcm93LCBpbnQg
d2lkdGgpOw0KICAgIC1zdGF0aWMgY2hhciAqZ2V0X2xpbmUodm9pZCk7DQogICAgLXN0YXRpYyB2
b2lkIHByaW50X3Bvc2l0aW9uKFdJTkRPVyAqIHdpbik7DQogICAgLQ0KICAgIC1zdGF0aWMgaW50
IGhzY3JvbGw7DQogICAgLXN0YXRpYyBpbnQgYmVnaW5fcmVhY2hlZCwgZW5kX3JlYWNoZWQsIHBh
Z2VfbGVuZ3RoOw0KICAgIC1zdGF0aWMgY2hhciAqYnVmOw0KICAgIC1zdGF0aWMgY2hhciAqcGFn
ZTsNCiAgICAtDQogICAgLS8qDQogICAgLSAqIHJlZnJlc2ggd2luZG93IGNvbnRlbnQNCiAgICAt
ICovDQogICAgLXN0YXRpYyB2b2lkIHJlZnJlc2hfdGV4dF9ib3goV0lORE9XICpkaWFsb2csIFdJ
TkRPVyAqYm94LCBpbnQgYm94aCwgaW50IGJveHcsDQogICAgLQkJCSAgICAgaW50IGN1cl95LCBp
bnQgY3VyX3gsIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LA0KICAgIC0JCQkgICAgIHZvaWQg
KmRhdGEpDQogICAgLXsNCiAgICAtCXByaW50X3BhZ2UoYm94LCBib3hoLCBib3h3LCB1cGRhdGVf
dGV4dCwgZGF0YSk7DQogICAgLQlwcmludF9wb3NpdGlvbihkaWFsb2cpOw0KICAgIC0Jd21vdmUo
ZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBSZXN0b3JlIGN1cnNvciBwb3NpdGlvbiAqLw0KICAg
IC0Jd3JlZnJlc2goZGlhbG9nKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qDQogICAg
LSAqIERpc3BsYXkgdGV4dCBmcm9tIGEgZmlsZSBpbiBhIGRpYWxvZyBib3guDQogICAgLSAqDQog
ICAgLSAqIGtleXMgaXMgYSBudWxsLXRlcm1pbmF0ZWQgYXJyYXkNCiAgICAtICogdXBkYXRlX3Rl
eHQoKSBtYXkgbm90IGFkZCBvciByZW1vdmUgYW55ICdcbicgb3IgJ1wwJyBpbiB0YnVmDQogICAg
LSAqLw0KICAgIC1pbnQgZGlhbG9nX3RleHRib3goY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRi
dWYsIGludCBpbml0aWFsX2hlaWdodCwNCiAgICAtCQkgICBpbnQgaW5pdGlhbF93aWR0aCwgaW50
ICprZXlzLCBpbnQgKl92c2Nyb2xsLCBpbnQgKl9oc2Nyb2xsLA0KICAgIC0JCSAgIHVwZGF0ZV90
ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKQ0KICAgIC17DQogICAgLQlpbnQgaSwgeCwg
eSwgY3VyX3gsIGN1cl95LCBrZXkgPSAwOw0KICAgIC0JaW50IGhlaWdodCwgd2lkdGgsIGJveGgs
IGJveHc7DQogICAgLQlXSU5ET1cgKmRpYWxvZywgKmJveDsNCiAgICAtCWJvb2wgZG9uZSA9IGZh
bHNlOw0KICAgIC0NCiAgICAtCWJlZ2luX3JlYWNoZWQgPSAxOw0KICAgIC0JZW5kX3JlYWNoZWQg
PSAwOw0KICAgIC0JcGFnZV9sZW5ndGggPSAwOw0KICAgIC0JaHNjcm9sbCA9IDA7DQogICAgLQli
dWYgPSB0YnVmOw0KICAgIC0JcGFnZSA9IGJ1ZjsJLyogcGFnZSBpcyBwb2ludGVyIHRvIHN0YXJ0
IG9mIHBhZ2UgdG8gYmUgZGlzcGxheWVkICovDQogICAgLQ0KICAgIC0JaWYgKF92c2Nyb2xsICYm
ICpfdnNjcm9sbCkgew0KICAgIC0JCWJlZ2luX3JlYWNoZWQgPSAwOw0KICAgIC0NCiAgICAtCQlm
b3IgKGkgPSAwOyBpIDwgKl92c2Nyb2xsOyBpKyspDQogICAgLQkJCWdldF9saW5lKCk7DQogICAg
LQl9DQogICAgLQlpZiAoX2hzY3JvbGwpDQogICAgLQkJaHNjcm9sbCA9ICpfaHNjcm9sbDsNCiAg
ICAtDQogICAgLWRvX3Jlc2l6ZToNCiAgICAtCWdldG1heHl4KHN0ZHNjciwgaGVpZ2h0LCB3aWR0
aCk7DQogICAgLQlpZiAoaGVpZ2h0IDwgVEVYVEJPWF9IRUlHVEhfTUlOIHx8IHdpZHRoIDwgVEVY
VEJPWF9XSURUSF9NSU4pDQogICAgLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7DQogICAg
LQlpZiAoaW5pdGlhbF9oZWlnaHQgIT0gMCkNCiAgICAtCQloZWlnaHQgPSBpbml0aWFsX2hlaWdo
dDsNCiAgICAtCWVsc2UNCiAgICAtCQlpZiAoaGVpZ2h0ID4gNCkNCiAgICAtCQkJaGVpZ2h0IC09
IDQ7DQogICAgLQkJZWxzZQ0KICAgIC0JCQloZWlnaHQgPSAwOw0KICAgIC0JaWYgKGluaXRpYWxf
d2lkdGggIT0gMCkNCiAgICAtCQl3aWR0aCA9IGluaXRpYWxfd2lkdGg7DQogICAgLQllbHNlDQog
ICAgLQkJaWYgKHdpZHRoID4gNSkNCiAgICAtCQkJd2lkdGggLT0gNTsNCiAgICAtCQllbHNlDQog
ICAgLQkJCXdpZHRoID0gMDsNCiAgICAtDQogICAgLQkvKiBjZW50ZXIgZGlhbG9nIGJveCBvbiBz
Y3JlZW4gKi8NCiAgICAtCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgpIC8gMjsNCiAgICAt
CXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7DQogICAgLQ0KICAgIC0JZHJhd19z
aGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsNCiAgICAtDQogICAgLQlkaWFsb2cg
PSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7DQogICAgLQlrZXlwYWQoZGlhbG9nLCBUUlVF
KTsNCiAgICAtDQogICAgLQkvKiBDcmVhdGUgd2luZG93IGZvciBib3ggcmVnaW9uLCB1c2VkIGZv
ciBzY3JvbGxpbmcgdGV4dCAqLw0KICAgIC0JYm94aCA9IGhlaWdodCAtIDQ7DQogICAgLQlib3h3
ID0gd2lkdGggLSAyOw0KICAgIC0JYm94ID0gc3Vid2luKGRpYWxvZywgYm94aCwgYm94dywgeSAr
IDEsIHggKyAxKTsNCiAgICAtCXdhdHRyc2V0KGJveCwgZGxnLmRpYWxvZy5hdHIpOw0KICAgIC0J
d2JrZ2RzZXQoYm94LCBkbGcuZGlhbG9nLmF0ciAmIEFfQ09MT1IpOw0KICAgIC0NCiAgICAtCWtl
eXBhZChib3gsIFRSVUUpOw0KICAgIC0NCiAgICAtCS8qIHJlZ2lzdGVyIHRoZSBuZXcgd2luZG93
LCBhbG9uZyB3aXRoIGl0cyBib3JkZXJzICovDQogICAgLQlkcmF3X2JveChkaWFsb2csIDAsIDAs
IGhlaWdodCwgd2lkdGgsDQogICAgLQkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7
DQogICAgLQ0KICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuYm9yZGVyLmF0cik7DQogICAgLQlt
dndhZGRjaChkaWFsb2csIGhlaWdodCAtIDMsIDAsIEFDU19MVEVFKTsNCiAgICAtCWZvciAoaSA9
IDA7IGkgPCB3aWR0aCAtIDI7IGkrKykNCiAgICAtCQl3YWRkY2goZGlhbG9nLCBBQ1NfSExJTkUp
Ow0KICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQogICAgLQl3YmtnZHNl
dChkaWFsb2csIGRsZy5kaWFsb2cuYXRyICYgQV9DT0xPUik7DQogICAgLQl3YWRkY2goZGlhbG9n
LCBBQ1NfUlRFRSk7DQogICAgLQ0KICAgIC0JcHJpbnRfdGl0bGUoZGlhbG9nLCB0aXRsZSwgd2lk
dGgpOw0KICAgIC0NCiAgICAtCXByaW50X2J1dHRvbihkaWFsb2csICIgRXhpdCAiLCBoZWlnaHQg
LSAyLCB3aWR0aCAvIDIgLSA0LCBUUlVFKTsNCiAgICAtCXdub3V0cmVmcmVzaChkaWFsb2cpOw0K
ICAgIC0JZ2V0eXgoZGlhbG9nLCBjdXJfeSwgY3VyX3gpOwkvKiBTYXZlIGN1cnNvciBwb3NpdGlv
biAqLw0KICAgIC0NCiAgICAtCS8qIFByaW50IGZpcnN0IHBhZ2Ugb2YgdGV4dCAqLw0KICAgIC0J
YXR0cl9jbGVhcihib3gsIGJveGgsIGJveHcsIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAtCXJlZnJl
c2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LCBjdXJfeCwgdXBkYXRl
X3RleHQsDQogICAgLQkJCSBkYXRhKTsNCiAgICAtDQogICAgLQl3aGlsZSAoIWRvbmUpIHsNCiAg
ICAtCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsNCiAgICAtCQlzd2l0Y2ggKGtleSkgew0KICAgIC0J
CWNhc2UgJ0UnOgkvKiBFeGl0ICovDQogICAgLQkJY2FzZSAnZSc6DQogICAgLQkJY2FzZSAnWCc6
DQogICAgLQkJY2FzZSAneCc6DQogICAgLQkJY2FzZSAncSc6DQogICAgLQkJY2FzZSAnXG4nOg0K
ICAgIC0JCQlkb25lID0gdHJ1ZTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnZyc6CS8q
IEZpcnN0IHBhZ2UgKi8NCiAgICAtCQljYXNlIEtFWV9IT01FOg0KICAgIC0JCQlpZiAoIWJlZ2lu
X3JlYWNoZWQpIHsNCiAgICAtCQkJCWJlZ2luX3JlYWNoZWQgPSAxOw0KICAgIC0JCQkJcGFnZSA9
IGJ1ZjsNCiAgICAtCQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcs
DQogICAgLQkJCQkJCSBjdXJfeSwgY3VyX3gsIHVwZGF0ZV90ZXh0LA0KICAgIC0JCQkJCQkgZGF0
YSk7DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnRyc6CS8qIExhc3Qg
cGFnZSAqLw0KICAgIC0JCWNhc2UgS0VZX0VORDoNCiAgICAtDQogICAgLQkJCWVuZF9yZWFjaGVk
ID0gMTsNCiAgICAtCQkJLyogcG9pbnQgdG8gbGFzdCBjaGFyIGluIGJ1ZiAqLw0KICAgIC0JCQlw
YWdlID0gYnVmICsgc3RybGVuKGJ1Zik7DQogICAgLQkJCWJhY2tfbGluZXMoYm94aCk7DQogICAg
LQkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJveGgsIGJveHcsIGN1cl95LA0KICAg
IC0JCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgIC0JCQlicmVhazsNCiAgICAt
CQljYXNlICdLJzoJLyogUHJldmlvdXMgbGluZSAqLw0KICAgIC0JCWNhc2UgJ2snOg0KICAgIC0J
CWNhc2UgS0VZX1VQOg0KICAgIC0JCQlpZiAoYmVnaW5fcmVhY2hlZCkNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0NCiAgICAtCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCArIDEpOw0KICAgIC0JCQly
ZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICAtCQkJ
CQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2Fz
ZSAnQic6CS8qIFByZXZpb3VzIHBhZ2UgKi8NCiAgICAtCQljYXNlICdiJzoNCiAgICAtCQljYXNl
ICd1JzoNCiAgICAtCQljYXNlIEtFWV9QUEFHRToNCiAgICAtCQkJaWYgKGJlZ2luX3JlYWNoZWQp
DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCArIGJveGgp
Ow0KICAgIC0JCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJf
eSwNCiAgICAtCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7
DQogICAgLQkJY2FzZSAnSic6CS8qIE5leHQgbGluZSAqLw0KICAgIC0JCWNhc2UgJ2onOg0KICAg
IC0JCWNhc2UgS0VZX0RPV046DQogICAgLQkJCWlmIChlbmRfcmVhY2hlZCkNCiAgICAtCQkJCWJy
ZWFrOw0KICAgIC0NCiAgICAtCQkJYmFja19saW5lcyhwYWdlX2xlbmd0aCAtIDEpOw0KICAgIC0J
CQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICAt
CQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
Y2FzZSBLRVlfTlBBR0U6CS8qIE5leHQgcGFnZSAqLw0KICAgIC0JCWNhc2UgJyAnOg0KICAgIC0J
CWNhc2UgJ2QnOg0KICAgIC0JCQlpZiAoZW5kX3JlYWNoZWQpDQogICAgLQkJCQlicmVhazsNCiAg
ICAtDQogICAgLQkJCWJlZ2luX3JlYWNoZWQgPSAwOw0KICAgIC0JCQlyZWZyZXNoX3RleHRfYm94
KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICAtCQkJCQkgY3VyX3gsIHVwZGF0
ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnMCc6CS8qIEJlZ2lu
bmluZyBvZiBsaW5lICovDQogICAgLQkJY2FzZSAnSCc6CS8qIFNjcm9sbCBsZWZ0ICovDQogICAg
LQkJY2FzZSAnaCc6DQogICAgLQkJY2FzZSBLRVlfTEVGVDoNCiAgICAtCQkJaWYgKGhzY3JvbGwg
PD0gMCkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0NCiAgICAtCQkJaWYgKGtleSA9PSAnMCcpDQog
ICAgLQkJCQloc2Nyb2xsID0gMDsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJaHNjcm9sbC0tOw0K
ICAgIC0JCQkvKiBSZXByaW50IGN1cnJlbnQgcGFnZSB0byBzY3JvbGwgaG9yaXpvbnRhbGx5ICov
DQogICAgLQkJCWJhY2tfbGluZXMocGFnZV9sZW5ndGgpOw0KICAgIC0JCQlyZWZyZXNoX3RleHRf
Ym94KGRpYWxvZywgYm94LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICAtCQkJCQkgY3VyX3gsIHVw
ZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnTCc6CS8qIFNj
cm9sbCByaWdodCAqLw0KICAgIC0JCWNhc2UgJ2wnOg0KICAgIC0JCWNhc2UgS0VZX1JJR0hUOg0K
ICAgIC0JCQlpZiAoaHNjcm9sbCA+PSBNQVhfTEVOKQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJ
CWhzY3JvbGwrKzsNCiAgICAtCQkJLyogUmVwcmludCBjdXJyZW50IHBhZ2UgdG8gc2Nyb2xsIGhv
cml6b250YWxseSAqLw0KICAgIC0JCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3RoKTsNCiAgICAtCQkJ
cmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksDQogICAgLQkJ
CQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgS0VZX0VTQzoNCiAgICAtCQkJaWYgKG9uX2tleV9lc2MoZGlhbG9nKSA9PSBLRVlfRVNDKQ0K
ICAgIC0JCQkJZG9uZSA9IHRydWU7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX1JF
U0laRToNCiAgICAtCQkJYmFja19saW5lcyhoZWlnaHQpOw0KICAgIC0JCQlkZWx3aW4oYm94KTsN
CiAgICAtCQkJZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCW9uX2tleV9yZXNpemUoKTsNCiAgICAt
CQkJZ290byBkb19yZXNpemU7DQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJZm9yIChpID0gMDsg
a2V5c1tpXTsgaSsrKSB7DQogICAgLQkJCQlpZiAoa2V5ID09IGtleXNbaV0pIHsNCiAgICAtCQkJ
CQlkb25lID0gdHJ1ZTsNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0K
ICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWRlbHdpbihib3gpOw0KICAgIC0JZGVsd2luKGRpYWxv
Zyk7DQogICAgLQlpZiAoX3ZzY3JvbGwpIHsNCiAgICAtCQljb25zdCBjaGFyICpzOw0KICAgIC0N
CiAgICAtCQlzID0gYnVmOw0KICAgIC0JCSpfdnNjcm9sbCA9IDA7DQogICAgLQkJYmFja19saW5l
cyhwYWdlX2xlbmd0aCk7DQogICAgLQkJd2hpbGUgKHMgPCBwYWdlICYmIChzID0gc3RyY2hyKHMs
ICdcbicpKSkgew0KICAgIC0JCQkoKl92c2Nyb2xsKSsrOw0KICAgIC0JCQlzKys7DQogICAgLQkJ
fQ0KICAgIC0JfQ0KICAgIC0JaWYgKF9oc2Nyb2xsKQ0KICAgIC0JCSpfaHNjcm9sbCA9IGhzY3Jv
bGw7DQogICAgLQlyZXR1cm4ga2V5Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBH
byBiYWNrICduJyBsaW5lcyBpbiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3goKS4NCiAg
ICAtICogJ3BhZ2UnIHdpbGwgYmUgdXBkYXRlZCB0byBwb2ludCB0byB0aGUgZGVzaXJlZCBsaW5l
IGluICdidWYnLg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgYmFja19saW5lcyhpbnQgbikN
CiAgICAtew0KICAgIC0JaW50IGk7DQogICAgLQ0KICAgIC0JYmVnaW5fcmVhY2hlZCA9IDA7DQog
ICAgLQkvKiBHbyBiYWNrICduJyBsaW5lcyAqLw0KICAgIC0JZm9yIChpID0gMDsgaSA8IG47IGkr
Kykgew0KICAgIC0JCWlmICgqcGFnZSA9PSAnXDAnKSB7DQogICAgLQkJCWlmIChlbmRfcmVhY2hl
ZCkgew0KICAgIC0JCQkJZW5kX3JlYWNoZWQgPSAwOw0KICAgIC0JCQkJY29udGludWU7DQogICAg
LQkJCX0NCiAgICAtCQl9DQogICAgLQkJaWYgKHBhZ2UgPT0gYnVmKSB7DQogICAgLQkJCWJlZ2lu
X3JlYWNoZWQgPSAxOw0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0JCXBhZ2UtLTsN
CiAgICAtCQlkbyB7DQogICAgLQkJCWlmIChwYWdlID09IGJ1Zikgew0KICAgIC0JCQkJYmVnaW5f
cmVhY2hlZCA9IDE7DQogICAgLQkJCQlyZXR1cm47DQogICAgLQkJCX0NCiAgICAtCQkJcGFnZS0t
Ow0KICAgIC0JCX0gd2hpbGUgKCpwYWdlICE9ICdcbicpOw0KICAgIC0JCXBhZ2UrKzsNCiAgICAt
CX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogUHJpbnQgYSBuZXcgcGFnZSBvZiB0
ZXh0Lg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHZvaWQgcHJpbnRfcGFnZShXSU5ET1cgKndpbiwg
aW50IGhlaWdodCwgaW50IHdpZHRoLCB1cGRhdGVfdGV4dF9mbg0KICAgIC0JCSAgICAgICB1cGRh
dGVfdGV4dCwgdm9pZCAqZGF0YSkNCiAgICAtew0KICAgIC0JaW50IGksIHBhc3NlZF9lbmQgPSAw
Ow0KICAgIC0NCiAgICAtCWlmICh1cGRhdGVfdGV4dCkgew0KICAgIC0JCWNoYXIgKmVuZDsNCiAg
ICAtDQogICAgLQkJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKQ0KICAgIC0JCQlnZXRfbGlu
ZSgpOw0KICAgIC0JCWVuZCA9IHBhZ2U7DQogICAgLQkJYmFja19saW5lcyhoZWlnaHQpOw0KICAg
IC0JCXVwZGF0ZV90ZXh0KGJ1ZiwgcGFnZSAtIGJ1ZiwgZW5kIC0gYnVmLCBkYXRhKTsNCiAgICAt
CX0NCiAgICAtDQogICAgLQlwYWdlX2xlbmd0aCA9IDA7DQogICAgLQlmb3IgKGkgPSAwOyBpIDwg
aGVpZ2h0OyBpKyspIHsNCiAgICAtCQlwcmludF9saW5lKHdpbiwgaSwgd2lkdGgpOw0KICAgIC0J
CWlmICghcGFzc2VkX2VuZCkNCiAgICAtCQkJcGFnZV9sZW5ndGgrKzsNCiAgICAtCQlpZiAoZW5k
X3JlYWNoZWQgJiYgIXBhc3NlZF9lbmQpDQogICAgLQkJCXBhc3NlZF9lbmQgPSAxOw0KICAgIC0J
fQ0KICAgIC0Jd25vdXRyZWZyZXNoKHdpbik7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAg
LSAqIFByaW50IGEgbmV3IGxpbmUgb2YgdGV4dC4NCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lk
IHByaW50X2xpbmUoV0lORE9XICogd2luLCBpbnQgcm93LCBpbnQgd2lkdGgpDQogICAgLXsNCiAg
ICAtCWNoYXIgKmxpbmU7DQogICAgLQ0KICAgIC0JbGluZSA9IGdldF9saW5lKCk7DQogICAgLQls
aW5lICs9IE1JTihzdHJsZW4obGluZSksIGhzY3JvbGwpOwkvKiBTY3JvbGwgaG9yaXpvbnRhbGx5
ICovDQogICAgLQl3bW92ZSh3aW4sIHJvdywgMCk7CS8qIG1vdmUgY3Vyc29yIHRvIGNvcnJlY3Qg
bGluZSAqLw0KICAgIC0Jd2FkZGNoKHdpbiwgJyAnKTsNCiAgICAtCXdhZGRuc3RyKHdpbiwgbGlu
ZSwgTUlOKHN0cmxlbihsaW5lKSwgd2lkdGggLSAyKSk7DQogICAgLQ0KICAgIC0JLyogQ2xlYXIg
J3Jlc2lkdWUnIG9mIHByZXZpb3VzIGxpbmUgKi8NCiAgICAtI2lmIE9MRF9OQ1VSU0VTDQogICAg
LQl7DQogICAgLQkJaW50IHggPSBnZXRjdXJ4KHdpbik7DQogICAgLQkJaW50IGk7DQogICAgLQkJ
Zm9yIChpID0gMDsgaSA8IHdpZHRoIC0geDsgaSsrKQ0KICAgIC0JCQl3YWRkY2god2luLCAnICcp
Ow0KICAgIC0JfQ0KICAgIC0jZWxzZQ0KICAgIC0Jd2NscnRvZW9sKHdpbik7DQogICAgLSNlbmRp
Zg0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBSZXR1cm4gY3VycmVudCBsaW5lIG9m
IHRleHQuIENhbGxlZCBieSBkaWFsb2dfdGV4dGJveCgpIGFuZCBwcmludF9saW5lKCkuDQogICAg
LSAqICdwYWdlJyBzaG91bGQgcG9pbnQgdG8gc3RhcnQgb2YgY3VycmVudCBsaW5lIGJlZm9yZSBj
YWxsaW5nLCBhbmQgd2lsbCBiZQ0KICAgIC0gKiB1cGRhdGVkIHRvIHBvaW50IHRvIHN0YXJ0IG9m
IG5leHQgbGluZS4NCiAgICAtICovDQogICAgLXN0YXRpYyBjaGFyICpnZXRfbGluZSh2b2lkKQ0K
ICAgIC17DQogICAgLQlpbnQgaSA9IDA7DQogICAgLQlzdGF0aWMgY2hhciBsaW5lW01BWF9MRU4g
KyAxXTsNCiAgICAtDQogICAgLQllbmRfcmVhY2hlZCA9IDA7DQogICAgLQl3aGlsZSAoKnBhZ2Ug
IT0gJ1xuJykgew0KICAgIC0JCWlmICgqcGFnZSA9PSAnXDAnKSB7DQogICAgLQkJCWVuZF9yZWFj
aGVkID0gMTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfSBlbHNlIGlmIChpIDwgTUFYX0xFTikN
CiAgICAtCQkJbGluZVtpKytdID0gKihwYWdlKyspOw0KICAgIC0JCWVsc2Ugew0KICAgIC0JCQkv
KiBUcnVuY2F0ZSBsaW5lcyBsb25nZXIgdGhhbiBNQVhfTEVOIGNoYXJhY3RlcnMgKi8NCiAgICAt
CQkJaWYgKGkgPT0gTUFYX0xFTikNCiAgICAtCQkJCWxpbmVbaSsrXSA9ICdcMCc7DQogICAgLQkJ
CXBhZ2UrKzsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQlpZiAoaSA8PSBNQVhfTEVOKQ0KICAg
IC0JCWxpbmVbaV0gPSAnXDAnOw0KICAgIC0JaWYgKCFlbmRfcmVhY2hlZCkNCiAgICAtCQlwYWdl
Kys7CQkvKiBtb3ZlIHBhc3QgJ1xuJyAqLw0KICAgIC0NCiAgICAtCXJldHVybiBsaW5lOw0KICAg
IC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBQcmludCBjdXJyZW50IHBvc2l0aW9uDQogICAg
LSAqLw0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9wb3NpdGlvbihXSU5ET1cgKiB3aW4pDQogICAg
LXsNCiAgICAtCWludCBwZXJjZW50Ow0KICAgIC0NCiAgICAtCXdhdHRyc2V0KHdpbiwgZGxnLnBv
c2l0aW9uX2luZGljYXRvci5hdHIpOw0KICAgIC0Jd2JrZ2RzZXQod2luLCBkbGcucG9zaXRpb25f
aW5kaWNhdG9yLmF0ciAmIEFfQ09MT1IpOw0KICAgIC0JcGVyY2VudCA9IChwYWdlIC0gYnVmKSAq
IDEwMCAvIHN0cmxlbihidWYpOw0KICAgIC0Jd21vdmUod2luLCBnZXRtYXh5KHdpbikgLSAzLCBn
ZXRtYXh4KHdpbikgLSA5KTsNCiAgICAtCXdwcmludHcod2luLCAiKCUzZCUlKSIsIHBlcmNlbnQp
Ow0KICAgIC19DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cv
dXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy91dGlsLmMNCiAgICBkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAxYjQ5MGQ0Li4wMDAwMDAwDQogICAgLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9seGRpYWxvZy91dGlsLmMNCiAgICArKysgL2Rldi9udWxsDQog
ICAgQEAgLTEsNzAwICswLDAgQEANCiAgICAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjArDQogICAgLS8qDQogICAgLSAqICB1dGlsLmMNCiAgICAtICoNCiAgICAtICogIE9SSUdJ
TkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykNCiAgICAtICogIE1PRElG
SUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRjYXBA
Y2Z3LmNvbSkNCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSA8c3RkYXJnLmg+DQogICAg
LQ0KICAgIC0jaW5jbHVkZSAiZGlhbG9nLmgiDQogICAgLQ0KICAgIC0vKiBOZWVkZWQgaW4gc2ln
bmFsIGhhbmRsZXIgaW4gbWNvbmYuYyAqLw0KICAgIC1pbnQgc2F2ZWRfeCwgc2F2ZWRfeTsNCiAg
ICAtDQogICAgLXN0cnVjdCBkaWFsb2dfaW5mbyBkbGc7DQogICAgLQ0KICAgIC1zdGF0aWMgdm9p
ZCBzZXRfbW9ub190aGVtZSh2b2lkKQ0KICAgIC17DQogICAgLQlkbGcuc2NyZWVuLmF0ciA9IEFf
Tk9STUFMOw0KICAgIC0JZGxnLnNoYWRvdy5hdHIgPSBBX05PUk1BTDsNCiAgICAtCWRsZy5kaWFs
b2cuYXRyID0gQV9OT1JNQUw7DQogICAgLQlkbGcudGl0bGUuYXRyID0gQV9CT0xEOw0KICAgIC0J
ZGxnLmJvcmRlci5hdHIgPSBBX05PUk1BTDsNCiAgICAtCWRsZy5idXR0b25fYWN0aXZlLmF0ciA9
IEFfUkVWRVJTRTsNCiAgICAtCWRsZy5idXR0b25faW5hY3RpdmUuYXRyID0gQV9ESU07DQogICAg
LQlkbGcuYnV0dG9uX2tleV9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOw0KICAgIC0JZGxnLmJ1dHRv
bl9rZXlfaW5hY3RpdmUuYXRyID0gQV9CT0xEOw0KICAgIC0JZGxnLmJ1dHRvbl9sYWJlbF9hY3Rp
dmUuYXRyID0gQV9SRVZFUlNFOw0KICAgIC0JZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZS5hdHIg
PSBBX05PUk1BTDsNCiAgICAtCWRsZy5pbnB1dGJveC5hdHIgPSBBX05PUk1BTDsNCiAgICAtCWRs
Zy5pbnB1dGJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7DQogICAgLQlkbGcuc2VhcmNoYm94LmF0
ciA9IEFfTk9STUFMOw0KICAgIC0JZGxnLnNlYXJjaGJveF90aXRsZS5hdHIgPSBBX0JPTEQ7DQog
ICAgLQlkbGcuc2VhcmNoYm94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsNCiAgICAtCWRsZy5wb3Np
dGlvbl9pbmRpY2F0b3IuYXRyID0gQV9CT0xEOw0KICAgIC0JZGxnLm1lbnVib3guYXRyID0gQV9O
T1JNQUw7DQogICAgLQlkbGcubWVudWJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7DQogICAgLQlk
bGcuaXRlbS5hdHIgPSBBX05PUk1BTDsNCiAgICAtCWRsZy5pdGVtX3NlbGVjdGVkLmF0ciA9IEFf
UkVWRVJTRTsNCiAgICAtCWRsZy50YWcuYXRyID0gQV9CT0xEOw0KICAgIC0JZGxnLnRhZ19zZWxl
Y3RlZC5hdHIgPSBBX1JFVkVSU0U7DQogICAgLQlkbGcudGFnX2tleS5hdHIgPSBBX0JPTEQ7DQog
ICAgLQlkbGcudGFnX2tleV9zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7DQogICAgLQlkbGcuY2hl
Y2suYXRyID0gQV9CT0xEOw0KICAgIC0JZGxnLmNoZWNrX3NlbGVjdGVkLmF0ciA9IEFfUkVWRVJT
RTsNCiAgICAtCWRsZy51YXJyb3cuYXRyID0gQV9CT0xEOw0KICAgIC0JZGxnLmRhcnJvdy5hdHIg
PSBBX0JPTEQ7DQogICAgLX0NCiAgICAtDQogICAgLSNkZWZpbmUgRExHX0NPTE9SKGRpYWxvZywg
ZiwgYiwgaCkgXA0KICAgIC1kbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAg
ICAtCWRsZy5kaWFsb2cuZmcgPSAoZik7ICAgICAgIFwNCiAgICAtCWRsZy5kaWFsb2cuYmcgPSAo
Yik7ICAgICAgIFwNCiAgICAtCWRsZy5kaWFsb2cuaGwgPSAoaCk7ICAgICAgIFwNCiAgICAtfSB3
aGlsZSAoMCkNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHNldF9jbGFzc2ljX3RoZW1lKHZvaWQp
DQogICAgLXsNCiAgICAtCURMR19DT0xPUihzY3JlZW4sICAgICAgICAgICAgICAgIENPTE9SX0NZ
QU4sICAgQ09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihzaGFkb3csICAgICAg
ICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssICB0cnVlKTsNCiAgICAtCURMR19D
T0xPUihkaWFsb2csICAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBm
YWxzZSk7DQogICAgLQlETEdfQ09MT1IodGl0bGUsICAgICAgICAgICAgICAgICBDT0xPUl9ZRUxM
T1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgLQlETEdfQ09MT1IoYm9yZGVyLCAgICAgICAg
ICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgLQlETEdfQ09M
T1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICAgdHJ1
ZSk7DQogICAgLQlETEdfQ09MT1IoYnV0dG9uX2luYWN0aXZlLCAgICAgICBDT0xPUl9CTEFDSywg
IENPTE9SX1dISVRFLCAgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKGJ1dHRvbl9rZXlfYWN0aXZl
LCAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAgIC0JRExHX0NPTE9S
KGJ1dHRvbl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xPUl9XSElURSwgIGZhbHNl
KTsNCiAgICAtCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCAgIENPTE9SX1lFTExPVywg
Q09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihidXR0b25fbGFiZWxfaW5hY3Rp
dmUsIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihp
bnB1dGJveCwgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7
DQogICAgLQlETEdfQ09MT1IoaW5wdXRib3hfYm9yZGVyLCAgICAgICBDT0xPUl9CTEFDSywgIENP
TE9SX1dISVRFLCAgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKHNlYXJjaGJveCwgICAgICAgICAg
ICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsNCiAgICAtCURMR19DT0xPUihz
ZWFyY2hib3hfdGl0bGUsICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsN
CiAgICAtCURMR19DT0xPUihzZWFyY2hib3hfYm9yZGVyLCAgICAgIENPTE9SX1dISVRFLCAgQ09M
T1JfV0hJVEUsICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0b3IsICAg
IENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihtZW51
Ym94LCAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBmYWxzZSk7DQog
ICAgLQlETEdfQ09MT1IobWVudWJveF9ib3JkZXIsICAgICAgICBDT0xPUl9XSElURSwgIENPTE9S
X1dISVRFLCAgdHJ1ZSk7DQogICAgLQlETEdfQ09MT1IoaXRlbSwgICAgICAgICAgICAgICAgICBD
T0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKGl0ZW1f
c2VsZWN0ZWQsICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAg
IC0JRExHX0NPTE9SKHRhZywgICAgICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9X
SElURSwgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHRhZ19zZWxlY3RlZCwgICAgICAgICAgQ09M
T1JfWUVMTE9XLCBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKHRhZ19rZXks
ICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUpOw0KICAgIC0J
RExHX0NPTE9SKHRhZ19rZXlfc2VsZWN0ZWQsICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTFVF
LCAgIHRydWUpOw0KICAgIC0JRExHX0NPTE9SKGNoZWNrLCAgICAgICAgICAgICAgICAgQ09MT1Jf
QkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsNCiAgICAtCURMR19DT0xPUihjaGVja19zZWxl
Y3RlZCwgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICAtCURM
R19DT0xPUih1YXJyb3csICAgICAgICAgICAgICAgIENPTE9SX0dSRUVOLCAgQ09MT1JfV0hJVEUs
ICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihkYXJyb3csICAgICAgICAgICAgICAgIENPTE9SX0dS
RUVOLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZv
aWQgc2V0X2JsYWNrYmdfdGhlbWUodm9pZCkNCiAgICAtew0KICAgIC0JRExHX0NPTE9SKHNjcmVl
biwgQ09MT1JfUkVELCAgIENPTE9SX0JMQUNLLCB0cnVlKTsNCiAgICAtCURMR19DT0xPUihzaGFk
b3csIENPTE9SX0JMQUNLLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKGRp
YWxvZywgQ09MT1JfV0hJVEUsIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgLQlETEdfQ09MT1Io
dGl0bGUsICBDT0xPUl9SRUQsICAgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAtCURMR19DT0xP
Uihib3JkZXIsIENPTE9SX0JMQUNLLCBDT0xPUl9CTEFDSywgdHJ1ZSk7DQogICAgLQ0KICAgIC0J
RExHX0NPTE9SKGJ1dHRvbl9hY3RpdmUsICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQs
ICAgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwgICAgICAgQ09MT1Jf
WUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKGJ1dHRvbl9rZXlf
YWN0aXZlLCAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7DQogICAgLQlETEdf
Q09MT1IoYnV0dG9uX2tleV9pbmFjdGl2ZSwgICBDT0xPUl9SRUQsICAgIENPTE9SX0JMQUNLLCBm
YWxzZSk7DQogICAgLQlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBDT0xPUl9XSElU
RSwgIENPTE9SX1JFRCwgICBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2lu
YWN0aXZlLCBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsNCiAgICAtDQogICAgLQlE
TEdfQ09MT1IoaW5wdXRib3gsICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFs
c2UpOw0KICAgIC0JRExHX0NPTE9SKGlucHV0Ym94X2JvcmRlciwgIENPTE9SX1lFTExPVywgQ09M
T1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAtDQogICAgLQlETEdfQ09MT1Ioc2VhcmNoYm94LCAgICAg
ICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgIC0JRExHX0NPTE9SKHNl
YXJjaGJveF90aXRsZSwgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIHRydWUpOw0KICAgIC0J
RExHX0NPTE9SKHNlYXJjaGJveF9ib3JkZXIsIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssIHRy
dWUpOw0KICAgIC0NCiAgICAtCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0b3IsIENPTE9SX1JF
RCwgQ09MT1JfQkxBQ0ssICBmYWxzZSk7DQogICAgLQ0KICAgIC0JRExHX0NPTE9SKG1lbnVib3gs
ICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAtCURMR19D
T0xPUihtZW51Ym94X2JvcmRlciwgICBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsN
CiAgICAtDQogICAgLQlETEdfQ09MT1IoaXRlbSwgICAgICAgICAgICAgQ09MT1JfV0hJVEUsIENP
TE9SX0JMQUNLLCBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IoaXRlbV9zZWxlY3RlZCwgICAgQ09M
T1JfV0hJVEUsIENPTE9SX1JFRCwgICBmYWxzZSk7DQogICAgLQ0KICAgIC0JRExHX0NPTE9SKHRh
ZywgICAgICAgICAgICAgIENPTE9SX1JFRCwgICAgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAt
CURMR19DT0xPUih0YWdfc2VsZWN0ZWQsICAgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0
cnVlKTsNCiAgICAtCURMR19DT0xPUih0YWdfa2V5LCAgICAgICAgICBDT0xPUl9SRUQsICAgIENP
TE9SX0JMQUNLLCBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IodGFnX2tleV9zZWxlY3RlZCwgQ09M
T1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7DQogICAgLQ0KICAgIC0JRExHX0NPTE9SKGNo
ZWNrLCAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAt
CURMR19DT0xPUihjaGVja19zZWxlY3RlZCwgICBDT0xPUl9ZRUxMT1csIENPTE9SX1JFRCwgICB0
cnVlKTsNCiAgICAtDQogICAgLQlETEdfQ09MT1IodWFycm93LCBDT0xPUl9SRUQsIENPTE9SX0JM
QUNLLCBmYWxzZSk7DQogICAgLQlETEdfQ09MT1IoZGFycm93LCBDT0xPUl9SRUQsIENPTE9SX0JM
QUNLLCBmYWxzZSk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHNldF9ibHVldGl0
bGVfdGhlbWUodm9pZCkNCiAgICAtew0KICAgIC0Jc2V0X2NsYXNzaWNfdGhlbWUoKTsNCiAgICAt
CURMR19DT0xPUih0aXRsZSwgICAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRF
LCB0cnVlKTsNCiAgICAtCURMR19DT0xPUihidXR0b25fa2V5X2FjdGl2ZSwgICBDT0xPUl9ZRUxM
T1csIENPTE9SX0JMVUUsICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0
aXZlLCBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICB0cnVlKTsNCiAgICAtCURMR19DT0xPUihz
ZWFyY2hib3hfdGl0bGUsICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsNCiAg
ICAtCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0b3IsICBDT0xPUl9CTFVFLCAgIENPTE9SX1dI
SVRFLCB0cnVlKTsNCiAgICAtCURMR19DT0xPUih0YWcsICAgICAgICAgICAgICAgICBDT0xPUl9C
TFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsNCiAgICAtCURMR19DT0xPUih0YWdfa2V5LCAgICAg
ICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsNCiAgICAtDQogICAgLX0N
CiAgICAtDQogICAgLS8qDQogICAgLSAqIFNlbGVjdCBjb2xvciB0aGVtZQ0KICAgIC0gKi8NCiAg
ICAtc3RhdGljIGludCBzZXRfdGhlbWUoY29uc3QgY2hhciAqdGhlbWUpDQogICAgLXsNCiAgICAt
CWludCB1c2VfY29sb3IgPSAxOw0KICAgIC0JaWYgKCF0aGVtZSkNCiAgICAtCQlzZXRfYmx1ZXRp
dGxlX3RoZW1lKCk7DQogICAgLQllbHNlIGlmIChzdHJjbXAodGhlbWUsICJjbGFzc2ljIikgPT0g
MCkNCiAgICAtCQlzZXRfY2xhc3NpY190aGVtZSgpOw0KICAgIC0JZWxzZSBpZiAoc3RyY21wKHRo
ZW1lLCAiYmx1ZXRpdGxlIikgPT0gMCkNCiAgICAtCQlzZXRfYmx1ZXRpdGxlX3RoZW1lKCk7DQog
ICAgLQllbHNlIGlmIChzdHJjbXAodGhlbWUsICJibGFja2JnIikgPT0gMCkNCiAgICAtCQlzZXRf
YmxhY2tiZ190aGVtZSgpOw0KICAgIC0JZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAibW9ubyIpID09
IDApDQogICAgLQkJdXNlX2NvbG9yID0gMDsNCiAgICAtDQogICAgLQlyZXR1cm4gdXNlX2NvbG9y
Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBpbml0X29uZV9jb2xvcihzdHJ1Y3Qg
ZGlhbG9nX2NvbG9yICpjb2xvcikNCiAgICAtew0KICAgIC0Jc3RhdGljIGludCBwYWlyID0gMDsN
CiAgICAtDQogICAgLQlwYWlyKys7DQogICAgLQlpbml0X3BhaXIocGFpciwgY29sb3ItPmZnLCBj
b2xvci0+YmcpOw0KICAgIC0JaWYgKGNvbG9yLT5obCkNCiAgICAtCQljb2xvci0+YXRyID0gQV9C
T0xEIHwgQ09MT1JfUEFJUihwYWlyKTsNCiAgICAtCWVsc2UNCiAgICAtCQljb2xvci0+YXRyID0g
Q09MT1JfUEFJUihwYWlyKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgaW5pdF9k
aWFsb2dfY29sb3JzKHZvaWQpDQogICAgLXsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcuc2Ny
ZWVuKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcuc2hhZG93KTsNCiAgICAtCWluaXRfb25l
X2NvbG9yKCZkbGcuZGlhbG9nKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcudGl0bGUpOw0K
ICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5ib3JkZXIpOw0KICAgIC0JaW5pdF9vbmVfY29sb3Io
JmRsZy5idXR0b25fYWN0aXZlKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2lu
YWN0aXZlKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2tleV9hY3RpdmUpOw0K
ICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fa2V5X2luYWN0aXZlKTsNCiAgICAtCWlu
aXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2xhYmVsX2FjdGl2ZSk7DQogICAgLQlpbml0X29uZV9j
b2xvcigmZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZSk7DQogICAgLQlpbml0X29uZV9jb2xvcigm
ZGxnLmlucHV0Ym94KTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcuaW5wdXRib3hfYm9yZGVy
KTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94KTsNCiAgICAtCWluaXRfb25l
X2NvbG9yKCZkbGcuc2VhcmNoYm94X3RpdGxlKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcu
c2VhcmNoYm94X2JvcmRlcik7DQogICAgLQlpbml0X29uZV9jb2xvcigmZGxnLnBvc2l0aW9uX2lu
ZGljYXRvcik7DQogICAgLQlpbml0X29uZV9jb2xvcigmZGxnLm1lbnVib3gpOw0KICAgIC0JaW5p
dF9vbmVfY29sb3IoJmRsZy5tZW51Ym94X2JvcmRlcik7DQogICAgLQlpbml0X29uZV9jb2xvcigm
ZGxnLml0ZW0pOw0KICAgIC0JaW5pdF9vbmVfY29sb3IoJmRsZy5pdGVtX3NlbGVjdGVkKTsNCiAg
ICAtCWluaXRfb25lX2NvbG9yKCZkbGcudGFnKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcu
dGFnX3NlbGVjdGVkKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcudGFnX2tleSk7DQogICAg
LQlpbml0X29uZV9jb2xvcigmZGxnLnRhZ19rZXlfc2VsZWN0ZWQpOw0KICAgIC0JaW5pdF9vbmVf
Y29sb3IoJmRsZy5jaGVjayk7DQogICAgLQlpbml0X29uZV9jb2xvcigmZGxnLmNoZWNrX3NlbGVj
dGVkKTsNCiAgICAtCWluaXRfb25lX2NvbG9yKCZkbGcudWFycm93KTsNCiAgICAtCWluaXRfb25l
X2NvbG9yKCZkbGcuZGFycm93KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogU2V0
dXAgZm9yIGNvbG9yIGRpc3BsYXkNCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkIGNvbG9yX3Nl
dHVwKGNvbnN0IGNoYXIgKnRoZW1lKQ0KICAgIC17DQogICAgLQlpbnQgdXNlX2NvbG9yOw0KICAg
IC0NCiAgICAtCXVzZV9jb2xvciA9IHNldF90aGVtZSh0aGVtZSk7DQogICAgLQlpZiAodXNlX2Nv
bG9yICYmIGhhc19jb2xvcnMoKSkgew0KICAgIC0JCXN0YXJ0X2NvbG9yKCk7DQogICAgLQkJaW5p
dF9kaWFsb2dfY29sb3JzKCk7DQogICAgLQl9IGVsc2UNCiAgICAtCQlzZXRfbW9ub190aGVtZSgp
Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBTZXQgd2luZG93IHRvIGF0dHJpYnV0
ZSAnYXR0cicNCiAgICAtICovDQogICAgLXZvaWQgYXR0cl9jbGVhcihXSU5ET1cgKiB3aW4sIGlu
dCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpDQogICAgLXsNCiAgICAtCWludCBpLCBq
Ow0KICAgIC0NCiAgICAtCXdhdHRyc2V0KHdpbiwgYXR0cik7DQogICAgLQlmb3IgKGkgPSAwOyBp
IDwgaGVpZ2h0OyBpKyspIHsNCiAgICAtCQl3bW92ZSh3aW4sIGksIDApOw0KICAgIC0JCWZvciAo
aiA9IDA7IGogPCB3aWR0aDsgaisrKQ0KICAgIC0JCQl3YWRkY2god2luLCAnICcpOw0KICAgIC0J
fQ0KICAgIC0JdG91Y2h3aW4od2luKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBkaWFsb2df
Y2xlYXIodm9pZCkNCiAgICAtew0KICAgIC0JaW50IGxpbmVzLCBjb2x1bW5zOw0KICAgIC0NCiAg
ICAtCWxpbmVzID0gZ2V0bWF4eShzdGRzY3IpOw0KICAgIC0JY29sdW1ucyA9IGdldG1heHgoc3Rk
c2NyKTsNCiAgICAtDQogICAgLQlhdHRyX2NsZWFyKHN0ZHNjciwgbGluZXMsIGNvbHVtbnMsIGRs
Zy5zY3JlZW4uYXRyKTsNCiAgICAtCS8qIERpc3BsYXkgYmFja2dyb3VuZCB0aXRsZSBpZiBpdCBl
eGlzdHMgLi4uIC0gU0xIICovDQogICAgLQlpZiAoZGxnLmJhY2t0aXRsZSAhPSBOVUxMKSB7DQog
ICAgLQkJaW50IGksIGxlbiA9IDAsIHNraXAgPSAwOw0KICAgIC0JCXN0cnVjdCBzdWJ0aXRsZV9s
aXN0ICpwb3M7DQogICAgLQ0KICAgIC0JCXdhdHRyc2V0KHN0ZHNjciwgZGxnLnNjcmVlbi5hdHIp
Ow0KICAgIC0JCW12d2FkZHN0cihzdGRzY3IsIDAsIDEsIChjaGFyICopZGxnLmJhY2t0aXRsZSk7
DQogICAgLQ0KICAgIC0JCWZvciAocG9zID0gZGxnLnN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBv
cyA9IHBvcy0+bmV4dCkgew0KICAgIC0JCQkvKiAzIGlzIGZvciB0aGUgYXJyb3cgYW5kIHNwYWNl
cyAqLw0KICAgIC0JCQlsZW4gKz0gc3RybGVuKHBvcy0+dGV4dCkgKyAzOw0KICAgIC0JCX0NCiAg
ICAtDQogICAgLQkJd21vdmUoc3Rkc2NyLCAxLCAxKTsNCiAgICAtCQlpZiAobGVuID4gY29sdW1u
cyAtIDIpIHsNCiAgICAtCQkJY29uc3QgY2hhciAqZWxsaXBzaXMgPSAiWy4uLl0gIjsNCiAgICAt
CQkJd2FkZHN0cihzdGRzY3IsIGVsbGlwc2lzKTsNCiAgICAtCQkJc2tpcCA9IGxlbiAtIChjb2x1
bW5zIC0gMiAtIHN0cmxlbihlbGxpcHNpcykpOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJZm9y
IChwb3MgPSBkbGcuc3VidGl0bGVzOyBwb3MgIT0gTlVMTDsgcG9zID0gcG9zLT5uZXh0KSB7DQog
ICAgLQkJCWlmIChza2lwID09IDApDQogICAgLQkJCQl3YWRkY2goc3Rkc2NyLCBBQ1NfUkFSUk9X
KTsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJc2tpcC0tOw0KICAgIC0NCiAgICAtCQkJaWYgKHNr
aXAgPT0gMCkNCiAgICAtCQkJCXdhZGRjaChzdGRzY3IsICcgJyk7DQogICAgLQkJCWVsc2UNCiAg
ICAtCQkJCXNraXAtLTsNCiAgICAtDQogICAgLQkJCWlmIChza2lwIDwgc3RybGVuKHBvcy0+dGV4
dCkpIHsNCiAgICAtCQkJCXdhZGRzdHIoc3Rkc2NyLCBwb3MtPnRleHQgKyBza2lwKTsNCiAgICAt
CQkJCXNraXAgPSAwOw0KICAgIC0JCQl9IGVsc2UNCiAgICAtCQkJCXNraXAgLT0gc3RybGVuKHBv
cy0+dGV4dCk7DQogICAgLQ0KICAgIC0JCQlpZiAoc2tpcCA9PSAwKQ0KICAgIC0JCQkJd2FkZGNo
KHN0ZHNjciwgJyAnKTsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJc2tpcC0tOw0KICAgIC0JCX0N
CiAgICAtDQogICAgLQkJZm9yIChpID0gbGVuICsgMTsgaSA8IGNvbHVtbnMgLSAxOyBpKyspDQog
ICAgLQkJCXdhZGRjaChzdGRzY3IsIEFDU19ITElORSk7DQogICAgLQl9DQogICAgLQl3bm91dHJl
ZnJlc2goc3Rkc2NyKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogRG8gc29tZSBp
bml0aWFsaXphdGlvbiBmb3IgZGlhbG9nDQogICAgLSAqLw0KICAgIC1pbnQgaW5pdF9kaWFsb2co
Y29uc3QgY2hhciAqYmFja3RpdGxlKQ0KICAgIC17DQogICAgLQlpbnQgaGVpZ2h0LCB3aWR0aDsN
CiAgICAtDQogICAgLQlpbml0c2NyKCk7CQkvKiBJbml0IGN1cnNlcyAqLw0KICAgIC0NCiAgICAt
CS8qIEdldCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBmb3Igc2lnbmFsIGhhbmRsZXIgaW4gbWNv
bmYuYyAqLw0KICAgIC0JZ2V0eXgoc3Rkc2NyLCBzYXZlZF95LCBzYXZlZF94KTsNCiAgICAtDQog
ICAgLQlnZXRtYXh5eChzdGRzY3IsIGhlaWdodCwgd2lkdGgpOw0KICAgIC0JaWYgKGhlaWdodCA8
IFdJTkRPV19IRUlHVEhfTUlOIHx8IHdpZHRoIDwgV0lORE9XX1dJRFRIX01JTikgew0KICAgIC0J
CWVuZHdpbigpOw0KICAgIC0JCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0KICAgIC0JfQ0K
ICAgIC0NCiAgICAtCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7DQogICAgLQljb2xvcl9zZXR1
cChnZXRlbnYoIk1FTlVDT05GSUdfQ09MT1IiKSk7DQogICAgLQ0KICAgIC0Ja2V5cGFkKHN0ZHNj
ciwgVFJVRSk7DQogICAgLQljYnJlYWsoKTsNCiAgICAtCW5vZWNobygpOw0KICAgIC0JZGlhbG9n
X2NsZWFyKCk7DQogICAgLQ0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLXZv
aWQgc2V0X2RpYWxvZ19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKQ0KICAgIC17DQog
ICAgLQlkbGcuYmFja3RpdGxlID0gYmFja3RpdGxlOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lk
IHNldF9kaWFsb2dfc3VidGl0bGVzKHN0cnVjdCBzdWJ0aXRsZV9saXN0ICpzdWJ0aXRsZXMpDQog
ICAgLXsNCiAgICAtCWRsZy5zdWJ0aXRsZXMgPSBzdWJ0aXRsZXM7DQogICAgLX0NCiAgICAtDQog
ICAgLS8qDQogICAgLSAqIEVuZCB1c2luZyBkaWFsb2cgZnVuY3Rpb25zLg0KICAgIC0gKi8NCiAg
ICAtdm9pZCBlbmRfZGlhbG9nKGludCB4LCBpbnQgeSkNCiAgICAtew0KICAgIC0JLyogbW92ZSBj
dXJzb3IgYmFjayB0byBvcmlnaW5hbCBwb3NpdGlvbiAqLw0KICAgIC0JbW92ZSh5LCB4KTsNCiAg
ICAtCXJlZnJlc2goKTsNCiAgICAtCWVuZHdpbigpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBQ
cmludCB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZy4gQ2VudGVyIHRoZSB0aXRsZSBhbmQgdHJ1bmNh
dGUNCiAgICAtICogdGlsZSBpZiB3aWRlciB0aGFuIGRpYWxvZyAoLSAyIGNoYXJzKS4NCiAgICAt
ICoqLw0KICAgIC12b2lkIHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25zdCBjaGFyICp0
aXRsZSwgaW50IHdpZHRoKQ0KICAgIC17DQogICAgLQlpZiAodGl0bGUpIHsNCiAgICAtCQlpbnQg
dGxlbiA9IE1JTih3aWR0aCAtIDIsIHN0cmxlbih0aXRsZSkpOw0KICAgIC0JCXdhdHRyc2V0KGRp
YWxvZywgZGxnLnRpdGxlLmF0cik7DQogICAgLQkJbXZ3YWRkY2goZGlhbG9nLCAwLCAod2lkdGgg
LSB0bGVuKSAvIDIgLSAxLCAnICcpOw0KICAgIC0JCW12d2FkZG5zdHIoZGlhbG9nLCAwLCAod2lk
dGggLSB0bGVuKS8yLCB0aXRsZSwgdGxlbik7DQogICAgLQkJd2FkZGNoKGRpYWxvZywgJyAnKTsN
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogUHJpbnQgYSBzdHJpbmcg
b2YgdGV4dCBpbiBhIHdpbmRvdywgYXV0b21hdGljYWxseSB3cmFwIGFyb3VuZCB0byB0aGUNCiAg
ICAtICogbmV4dCBsaW5lIGlmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcgdG8gZml0IG9uIG9uZSBs
aW5lLiBOZXdsaW5lDQogICAgLSAqIGNoYXJhY3RlcnMgJ1xuJyBhcmUgcHJvcHBlcmx5IHByb2Nl
c3NlZC4gIFdlIHN0YXJ0IG9uIGEgbmV3IGxpbmUNCiAgICAtICogaWYgdGhlcmUgaXMgbm8gcm9v
bSBmb3IgYXQgbGVhc3QgNCBub25ibGFua3MgZm9sbG93aW5nIGEgZG91YmxlLXNwYWNlLg0KICAg
IC0gKi8NCiAgICAtdm9pZCBwcmludF9hdXRvd3JhcChXSU5ET1cgKiB3aW4sIGNvbnN0IGNoYXIg
KnByb21wdCwgaW50IHdpZHRoLCBpbnQgeSwgaW50IHgpDQogICAgLXsNCiAgICAtCWludCBuZXds
LCBjdXJfeCwgY3VyX3k7DQogICAgLQlpbnQgcHJvbXB0X2xlbiwgcm9vbSwgd2xlbjsNCiAgICAt
CWNoYXIgdGVtcHN0cltNQVhfTEVOICsgMV0sICp3b3JkLCAqc3AsICpzcDIsICpuZXdsaW5lX3Nl
cGFyYXRvciA9IDA7DQogICAgLQ0KICAgIC0Jc3RyY3B5KHRlbXBzdHIsIHByb21wdCk7DQogICAg
LQ0KICAgIC0JcHJvbXB0X2xlbiA9IHN0cmxlbih0ZW1wc3RyKTsNCiAgICAtDQogICAgLQlpZiAo
cHJvbXB0X2xlbiA8PSB3aWR0aCAtIHggKiAyKSB7CS8qIElmIHByb21wdCBpcyBzaG9ydCAqLw0K
ICAgIC0JCXdtb3ZlKHdpbiwgeSwgKHdpZHRoIC0gcHJvbXB0X2xlbikgLyAyKTsNCiAgICAtCQl3
YWRkc3RyKHdpbiwgdGVtcHN0cik7DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCWN1cl94ID0geDsN
CiAgICAtCQljdXJfeSA9IHk7DQogICAgLQkJbmV3bCA9IDE7DQogICAgLQkJd29yZCA9IHRlbXBz
dHI7DQogICAgLQkJd2hpbGUgKHdvcmQgJiYgKndvcmQpIHsNCiAgICAtCQkJc3AgPSBzdHJwYnJr
KHdvcmQsICJcbiAiKTsNCiAgICAtCQkJaWYgKHNwICYmICpzcCA9PSAnXG4nKQ0KICAgIC0JCQkJ
bmV3bGluZV9zZXBhcmF0b3IgPSBzcDsNCiAgICAtDQogICAgLQkJCWlmIChzcCkNCiAgICAtCQkJ
CSpzcCsrID0gMDsNCiAgICAtDQogICAgLQkJCS8qIFdyYXAgdG8gbmV4dCBsaW5lIGlmIGVpdGhl
ciB0aGUgd29yZCBkb2VzIG5vdCBmaXQsDQogICAgLQkJCSAgIG9yIGl0IGlzIHRoZSBmaXJzdCB3
b3JkIG9mIGEgbmV3IHNlbnRlbmNlLCBhbmQgaXQgaXMNCiAgICAtCQkJICAgc2hvcnQsIGFuZCB0
aGUgbmV4dCB3b3JkIGRvZXMgbm90IGZpdC4gKi8NCiAgICAtCQkJcm9vbSA9IHdpZHRoIC0gY3Vy
X3g7DQogICAgLQkJCXdsZW4gPSBzdHJsZW4od29yZCk7DQogICAgLQkJCWlmICh3bGVuID4gcm9v
bSB8fA0KICAgIC0JCQkgICAgKG5ld2wgJiYgd2xlbiA8IDQgJiYgc3ANCiAgICAtCQkJICAgICAm
JiB3bGVuICsgMSArIHN0cmxlbihzcCkgPiByb29tDQogICAgLQkJCSAgICAgJiYgKCEoc3AyID0g
c3RycGJyayhzcCwgIlxuICIpKQ0KICAgIC0JCQkJIHx8IHdsZW4gKyAxICsgKHNwMiAtIHNwKSA+
IHJvb20pKSkgew0KICAgIC0JCQkJY3VyX3krKzsNCiAgICAtCQkJCWN1cl94ID0geDsNCiAgICAt
CQkJfQ0KICAgIC0JCQl3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7DQogICAgLQkJCXdhZGRzdHIo
d2luLCB3b3JkKTsNCiAgICAtCQkJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOw0KICAgIC0NCiAg
ICAtCQkJLyogTW92ZSB0byB0aGUgbmV4dCBsaW5lIGlmIHRoZSB3b3JkIHNlcGFyYXRvciB3YXMg
YSBuZXdsaW5lICovDQogICAgLQkJCWlmIChuZXdsaW5lX3NlcGFyYXRvcikgew0KICAgIC0JCQkJ
Y3VyX3krKzsNCiAgICAtCQkJCWN1cl94ID0geDsNCiAgICAtCQkJCW5ld2xpbmVfc2VwYXJhdG9y
ID0gMDsNCiAgICAtCQkJfSBlbHNlDQogICAgLQkJCQljdXJfeCsrOw0KICAgIC0NCiAgICAtCQkJ
aWYgKHNwICYmICpzcCA9PSAnICcpIHsNCiAgICAtCQkJCWN1cl94Kys7CS8qIGRvdWJsZSBzcGFj
ZSAqLw0KICAgIC0JCQkJd2hpbGUgKCorK3NwID09ICcgJykgOw0KICAgIC0JCQkJbmV3bCA9IDE7
DQogICAgLQkJCX0gZWxzZQ0KICAgIC0JCQkJbmV3bCA9IDA7DQogICAgLQkJCXdvcmQgPSBzcDsN
CiAgICAtCQl9DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIFByaW50
IGEgYnV0dG9uDQogICAgLSAqLw0KICAgIC12b2lkIHByaW50X2J1dHRvbihXSU5ET1cgKiB3aW4s
IGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3RlZCkNCiAgICAtew0K
ICAgIC0JaW50IGksIHRlbXA7DQogICAgLQ0KICAgIC0Jd21vdmUod2luLCB5LCB4KTsNCiAgICAt
CXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2FjdGl2ZS5hdHINCiAgICAtCQkg
OiBkbGcuYnV0dG9uX2luYWN0aXZlLmF0cik7DQogICAgLQl3YWRkc3RyKHdpbiwgIjwiKTsNCiAg
ICAtCXRlbXAgPSBzdHJzcG4obGFiZWwsICIgIik7DQogICAgLQlsYWJlbCArPSB0ZW1wOw0KICAg
IC0Jd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fbGFiZWxfYWN0aXZlLmF0cg0K
ICAgIC0JCSA6IGRsZy5idXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyKTsNCiAgICAtCWZvciAoaSA9
IDA7IGkgPCB0ZW1wOyBpKyspDQogICAgLQkJd2FkZGNoKHdpbiwgJyAnKTsNCiAgICAtCXdhdHRy
c2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2tleV9hY3RpdmUuYXRyDQogICAgLQkJIDog
ZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUuYXRyKTsNCiAgICAtCXdhZGRjaCh3aW4sIGxhYmVsWzBd
KTsNCiAgICAtCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2xhYmVsX2FjdGl2
ZS5hdHINCiAgICAtCQkgOiBkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlLmF0cik7DQogICAgLQl3
YWRkc3RyKHdpbiwgKGNoYXIgKilsYWJlbCArIDEpOw0KICAgIC0Jd2F0dHJzZXQod2luLCBzZWxl
Y3RlZCA/IGRsZy5idXR0b25fYWN0aXZlLmF0cg0KICAgIC0JCSA6IGRsZy5idXR0b25faW5hY3Rp
dmUuYXRyKTsNCiAgICAtCXdhZGRzdHIod2luLCAiPiIpOw0KICAgIC0Jd21vdmUod2luLCB5LCB4
ICsgdGVtcCArIDEpOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBEcmF3IGEgcmVj
dGFuZ3VsYXIgYm94IHdpdGggbGluZSBkcmF3aW5nIGNoYXJhY3RlcnMNCiAgICAtICovDQogICAg
LXZvaWQNCiAgICAtZHJhd19ib3goV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWln
aHQsIGludCB3aWR0aCwNCiAgICAtCSBjaHR5cGUgYm94LCBjaHR5cGUgYm9yZGVyKQ0KICAgIC17
DQogICAgLQlpbnQgaSwgajsNCiAgICAtDQogICAgLQl3YXR0cnNldCh3aW4sIDApOw0KICAgIC0J
Zm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7DQogICAgLQkJd21vdmUod2luLCB5ICsgaSwg
eCk7DQogICAgLQkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspDQogICAgLQkJCWlmICghaSAm
JiAhaikNCiAgICAtCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19VTENPUk5FUik7DQogICAg
LQkJCWVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSAmJiAhaikNCiAgICAtCQkJCXdhZGRjaCh3aW4s
IGJvcmRlciB8IEFDU19MTENPUk5FUik7DQogICAgLQkJCWVsc2UgaWYgKCFpICYmIGogPT0gd2lk
dGggLSAxKQ0KICAgIC0JCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1VSQ09STkVSKTsNCiAgICAt
CQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmIGogPT0gd2lkdGggLSAxKQ0KICAgIC0JCQkJ
d2FkZGNoKHdpbiwgYm94IHwgQUNTX0xSQ09STkVSKTsNCiAgICAtCQkJZWxzZSBpZiAoIWkpDQog
ICAgLQkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfSExJTkUpOw0KICAgIC0JCQllbHNlIGlm
IChpID09IGhlaWdodCAtIDEpDQogICAgLQkJCQl3YWRkY2god2luLCBib3ggfCBBQ1NfSExJTkUp
Ow0KICAgIC0JCQllbHNlIGlmICghaikNCiAgICAtCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFD
U19WTElORSk7DQogICAgLQkJCWVsc2UgaWYgKGogPT0gd2lkdGggLSAxKQ0KICAgIC0JCQkJd2Fk
ZGNoKHdpbiwgYm94IHwgQUNTX1ZMSU5FKTsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJd2FkZGNo
KHdpbiwgYm94IHwgJyAnKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAt
ICogRHJhdyBzaGFkb3dzIGFsb25nIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2UgdG8gZ2l2ZSBh
IG1vcmUgM0QgbG9vaw0KICAgIC0gKiB0byB0aGUgYm94ZXMNCiAgICAtICovDQogICAgLXZvaWQg
ZHJhd19zaGFkb3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3
aWR0aCkNCiAgICAtew0KICAgIC0JaW50IGk7DQogICAgLQ0KICAgIC0JaWYgKGhhc19jb2xvcnMo
KSkgewkvKiBXaGV0aGVyIHRlcm1pbmFsIHN1cHBvcnRzIGNvbG9yPyAqLw0KICAgIC0JCXdhdHRy
c2V0KHdpbiwgZGxnLnNoYWRvdy5hdHIpOw0KICAgIC0JCXdtb3ZlKHdpbiwgeSArIGhlaWdodCwg
eCArIDIpOw0KICAgIC0JCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQ0KICAgIC0JCQl3YWRk
Y2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7DQogICAgLQkJZm9yIChpID0geSArIDE7
IGkgPCB5ICsgaGVpZ2h0ICsgMTsgaSsrKSB7DQogICAgLQkJCXdtb3ZlKHdpbiwgaSwgeCArIHdp
ZHRoKTsNCiAgICAtCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRFWFQpOw0KICAg
IC0JCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7DQogICAgLQkJfQ0KICAg
IC0JCXdub3V0cmVmcmVzaCh3aW4pOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKg0K
ICAgIC0gKiAgUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYWxwaGFiZXRpYyBjaGFy
YWN0ZXIgaW4gYSBzdHJpbmcuDQogICAgLSAqLw0KICAgIC1pbnQgZmlyc3RfYWxwaGEoY29uc3Qg
Y2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpleGVtcHQpDQogICAgLXsNCiAgICAtCWludCBpLCBp
bl9wYXJlbiA9IDAsIGM7DQogICAgLQ0KICAgIC0JZm9yIChpID0gMDsgaSA8IHN0cmxlbihzdHJp
bmcpOyBpKyspIHsNCiAgICAtCQljID0gdG9sb3dlcihzdHJpbmdbaV0pOw0KICAgIC0NCiAgICAt
CQlpZiAoc3RyY2hyKCI8WygiLCBjKSkNCiAgICAtCQkJKytpbl9wYXJlbjsNCiAgICAtCQlpZiAo
c3RyY2hyKCI+XSkiLCBjKSAmJiBpbl9wYXJlbiA+IDApDQogICAgLQkJCS0taW5fcGFyZW47DQog
ICAgLQ0KICAgIC0JCWlmICgoIWluX3BhcmVuKSAmJiBpc2FscGhhKGMpICYmIHN0cmNocihleGVt
cHQsIGMpID09IDApDQogICAgLQkJCXJldHVybiBpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXJl
dHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBuY3Vyc2VzIHVzZXMgRVND
IHRvIGRldGVjdCBlc2NhcGVkIGNoYXIgc2VxdWVuY2VzLiBUaGlzIHJlc3V0bCBpbg0KICAgIC0g
KiBhIHNtYWxsIHRpbWVvdXQgYmVmb3JlIEVTQyBpcyBhY3R1YWxseSBkZWxpdmVyZWQgdG8gdGhl
IGFwcGxpY2F0aW9uLg0KICAgIC0gKiBseGRpYWxvZyBzdWdnZXN0IDxFU0M+IDxFU0M+IHdoaWNo
IGlzIGNvcnJlY3RseSB0cmFuc2xhdGVkIHRvIHR3bw0KICAgIC0gKiB0aW1lcyBlc2MuIEJ1dCB0
aGVuIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgZXNjIHRvIGF2b2lkIHN0ZXBwaW5nDQog
ICAgLSAqIG91dCBvbmUgbWVudSB0b28gbXVjaC4gRmlsdGVyIGF3YXkgYWxsIGVzY2FwZWQga2V5
IHNlcXVlbmNlcyBzaW5jZQ0KICAgIC0gKiBrZXlwYWQoRkFMU0UpIHR1cm4gb2ZmIG5jdXJzZXMg
c3VwcG9ydCBmb3IgZXNjYXBlIHNlcXVlbmNlcyAtIGFuZCB0aGF0cw0KICAgIC0gKiBuZWVkZWQg
dG8gbWFrZSBub3RpbWVvdXQoKSBkbyBhcyBleHBlY3RlZC4NCiAgICAtICovDQogICAgLWludCBv
bl9rZXlfZXNjKFdJTkRPVyAqd2luKQ0KICAgIC17DQogICAgLQlpbnQga2V5Ow0KICAgIC0JaW50
IGtleTI7DQogICAgLQlpbnQga2V5MzsNCiAgICAtDQogICAgLQlub2RlbGF5KHdpbiwgVFJVRSk7
DQogICAgLQlrZXlwYWQod2luLCBGQUxTRSk7DQogICAgLQlrZXkgPSB3Z2V0Y2god2luKTsNCiAg
ICAtCWtleTIgPSB3Z2V0Y2god2luKTsNCiAgICAtCWRvIHsNCiAgICAtCQlrZXkzID0gd2dldGNo
KHdpbik7DQogICAgLQl9IHdoaWxlIChrZXkzICE9IEVSUik7DQogICAgLQlub2RlbGF5KHdpbiwg
RkFMU0UpOw0KICAgIC0Ja2V5cGFkKHdpbiwgVFJVRSk7DQogICAgLQlpZiAoa2V5ID09IEtFWV9F
U0MgJiYga2V5MiA9PSBFUlIpDQogICAgLQkJcmV0dXJuIEtFWV9FU0M7DQogICAgLQllbHNlIGlm
IChrZXkgIT0gRVJSICYmIGtleSAhPSBLRVlfRVNDICYmIGtleTIgPT0gRVJSKQ0KICAgIC0JCXVu
Z2V0Y2goa2V5KTsNCiAgICAtDQogICAgLQlyZXR1cm4gLTE7DQogICAgLX0NCiAgICAtDQogICAg
LS8qIHJlZHJhdyBzY3JlZW4gaW4gbmV3IHNpemUgKi8NCiAgICAtaW50IG9uX2tleV9yZXNpemUo
dm9pZCkNCiAgICAtew0KICAgIC0JZGlhbG9nX2NsZWFyKCk7DQogICAgLQlyZXR1cm4gS0VZX1JF
U0laRTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2N1cjsN
CiAgICAtc3RydWN0IGRpYWxvZ19saXN0IGl0ZW1fbmlsOw0KICAgIC1zdHJ1Y3QgZGlhbG9nX2xp
c3QgKml0ZW1faGVhZDsNCiAgICAtDQogICAgLXZvaWQgaXRlbV9yZXNldCh2b2lkKQ0KICAgIC17
DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnAsICpuZXh0Ow0KICAgIC0NCiAgICAtCWZvciAo
cCA9IGl0ZW1faGVhZDsgcDsgcCA9IG5leHQpIHsNCiAgICAtCQluZXh0ID0gcC0+bmV4dDsNCiAg
ICAtCQlmcmVlKHApOw0KICAgIC0JfQ0KICAgIC0JaXRlbV9oZWFkID0gTlVMTDsNCiAgICAtCWl0
ZW1fY3VyID0gJml0ZW1fbmlsOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIGl0ZW1fbWFrZShj
b25zdCBjaGFyICpmbXQsIC4uLikNCiAgICAtew0KICAgIC0JdmFfbGlzdCBhcDsNCiAgICAtCXN0
cnVjdCBkaWFsb2dfbGlzdCAqcCA9IG1hbGxvYyhzaXplb2YoKnApKTsNCiAgICAtDQogICAgLQlp
ZiAoaXRlbV9oZWFkKQ0KICAgIC0JCWl0ZW1fY3VyLT5uZXh0ID0gcDsNCiAgICAtCWVsc2UNCiAg
ICAtCQlpdGVtX2hlYWQgPSBwOw0KICAgIC0JaXRlbV9jdXIgPSBwOw0KICAgIC0JbWVtc2V0KHAs
IDAsIHNpemVvZigqcCkpOw0KICAgIC0NCiAgICAtCXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0J
dnNucHJpbnRmKGl0ZW1fY3VyLT5ub2RlLnN0ciwgc2l6ZW9mKGl0ZW1fY3VyLT5ub2RlLnN0ciks
IGZtdCwgYXApOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBp
dGVtX2FkZF9zdHIoY29uc3QgY2hhciAqZm10LCAuLi4pDQogICAgLXsNCiAgICAtCXZhX2xpc3Qg
YXA7DQogICAgLQlzaXplX3QgYXZhaWw7DQogICAgLQ0KICAgIC0JYXZhaWwgPSBzaXplb2YoaXRl
bV9jdXItPm5vZGUuc3RyKSAtIHN0cmxlbihpdGVtX2N1ci0+bm9kZS5zdHIpOw0KICAgIC0NCiAg
ICAtCXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgIC0JdnNucHJpbnRmKGl0ZW1fY3VyLT5ub2RlLnN0
ciArIHN0cmxlbihpdGVtX2N1ci0+bm9kZS5zdHIpLA0KICAgIC0JCSAgYXZhaWwsIGZtdCwgYXAp
Ow0KICAgIC0JaXRlbV9jdXItPm5vZGUuc3RyW3NpemVvZihpdGVtX2N1ci0+bm9kZS5zdHIpIC0g
MV0gPSAnXDAnOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBp
dGVtX3NldF90YWcoY2hhciB0YWcpDQogICAgLXsNCiAgICAtCWl0ZW1fY3VyLT5ub2RlLnRhZyA9
IHRhZzsNCiAgICAtfQ0KICAgIC12b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcHRyKQ0KICAgIC17
DQogICAgLQlpdGVtX2N1ci0+bm9kZS5kYXRhID0gcHRyOw0KICAgIC19DQogICAgLQ0KICAgIC12
b2lkIGl0ZW1fc2V0X3NlbGVjdGVkKGludCB2YWwpDQogICAgLXsNCiAgICAtCWl0ZW1fY3VyLT5u
b2RlLnNlbGVjdGVkID0gdmFsOw0KICAgIC19DQogICAgLQ0KICAgIC1pbnQgaXRlbV9hY3RpdmF0
ZV9zZWxlY3RlZCh2b2lkKQ0KICAgIC17DQogICAgLQlpdGVtX2ZvcmVhY2goKQ0KICAgIC0JCWlm
IChpdGVtX2lzX3NlbGVjdGVkKCkpDQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JcmV0dXJuIDA7
DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgKml0ZW1fZGF0YSh2b2lkKQ0KICAgIC17DQogICAg
LQlyZXR1cm4gaXRlbV9jdXItPm5vZGUuZGF0YTsNCiAgICAtfQ0KICAgIC0NCiAgICAtY2hhciBp
dGVtX3RhZyh2b2lkKQ0KICAgIC17DQogICAgLQlyZXR1cm4gaXRlbV9jdXItPm5vZGUudGFnOw0K
ICAgIC19DQogICAgLQ0KICAgIC1pbnQgaXRlbV9jb3VudCh2b2lkKQ0KICAgIC17DQogICAgLQlp
bnQgbiA9IDA7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7DQogICAgLQ0KICAgIC0JZm9y
IChwID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+bmV4dCkNCiAgICAtCQluKys7DQogICAgLQlyZXR1
cm4gbjsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBpdGVtX3NldChpbnQgbikNCiAgICAtew0K
ICAgIC0JaW50IGkgPSAwOw0KICAgIC0JaXRlbV9mb3JlYWNoKCkNCiAgICAtCQlpZiAoaSsrID09
IG4pDQogICAgLQkJCXJldHVybjsNCiAgICAtfQ0KICAgIC0NCiAgICAtaW50IGl0ZW1fbih2b2lk
KQ0KICAgIC17DQogICAgLQlpbnQgbiA9IDA7DQogICAgLQlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7
DQogICAgLQ0KICAgIC0JZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+bmV4dCkgew0KICAg
IC0JCWlmIChwID09IGl0ZW1fY3VyKQ0KICAgIC0JCQlyZXR1cm4gbjsNCiAgICAtCQluKys7DQog
ICAgLQl9DQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtY29uc3QgY2hhciAq
aXRlbV9zdHIodm9pZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIGl0ZW1fY3VyLT5ub2RlLnN0cjsN
CiAgICAtfQ0KICAgIC0NCiAgICAtaW50IGl0ZW1faXNfc2VsZWN0ZWQodm9pZCkNCiAgICAtew0K
ICAgIC0JcmV0dXJuIChpdGVtX2N1ci0+bm9kZS5zZWxlY3RlZCAhPSAwKTsNCiAgICAtfQ0KICAg
IC0NCiAgICAtaW50IGl0ZW1faXNfdGFnKGNoYXIgdGFnKQ0KICAgIC17DQogICAgLQlyZXR1cm4g
KGl0ZW1fY3VyLT5ub2RlLnRhZyA9PSB0YWcpOw0KICAgIC19DQogICAgZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvbHhkaWFsb2cveWVzbm8uYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcv
bHhkaWFsb2cveWVzbm8uYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IGJjYWFjOWIuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2x4ZGlhbG9n
L3llc25vLmMNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTAxICswLDAgQEANCiAgICAt
Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQogICAgLS8qDQogICAgLSAqICB5
ZXNuby5jIC0tIGltcGxlbWVudHMgdGhlIHllcy9ubyBib3gNCiAgICAtICoNCiAgICAtICogIE9S
SUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykNCiAgICAtICogIE1P
RElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAgKHJvYWRj
YXBAY2Z3LmNvbSkNCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSAiZGlhbG9nLmgiDQog
ICAgLQ0KICAgIC0vKg0KICAgIC0gKiBEaXNwbGF5IHRlcm1pbmF0aW9uIGJ1dHRvbnMNCiAgICAt
ICovDQogICAgLXN0YXRpYyB2b2lkIHByaW50X2J1dHRvbnMoV0lORE9XICogZGlhbG9nLCBpbnQg
aGVpZ2h0LCBpbnQgd2lkdGgsIGludCBzZWxlY3RlZCkNCiAgICAtew0KICAgIC0JaW50IHggPSB3
aWR0aCAvIDIgLSAxMDsNCiAgICAtCWludCB5ID0gaGVpZ2h0IC0gMjsNCiAgICAtDQogICAgLQlw
cmludF9idXR0b24oZGlhbG9nLCAiIFllcyAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsNCiAgICAt
CXByaW50X2J1dHRvbihkaWFsb2csICIgIE5vICAiLCB5LCB4ICsgMTMsIHNlbGVjdGVkID09IDEp
Ow0KICAgIC0NCiAgICAtCXdtb3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxMyAqIHNlbGVjdGVkKTsN
CiAgICAtCXdyZWZyZXNoKGRpYWxvZyk7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAq
IERpc3BsYXkgYSBkaWFsb2cgYm94IHdpdGggdHdvIGJ1dHRvbnMgLSBZZXMgYW5kIE5vDQogICAg
LSAqLw0KICAgIC1pbnQgZGlhbG9nX3llc25vKGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFy
ICpwcm9tcHQsIGludCBoZWlnaHQsIGludCB3aWR0aCkNCiAgICAtew0KICAgIC0JaW50IGksIHgs
IHksIGtleSA9IDAsIGJ1dHRvbiA9IDA7DQogICAgLQlXSU5ET1cgKmRpYWxvZzsNCiAgICAtDQog
ICAgLWRvX3Jlc2l6ZToNCiAgICAtCWlmIChnZXRtYXh5KHN0ZHNjcikgPCAoaGVpZ2h0ICsgWUVT
Tk9fSEVJR1RIX01JTikpDQogICAgLQkJcmV0dXJuIC1FUlJESVNQTEFZVE9PU01BTEw7DQogICAg
LQlpZiAoZ2V0bWF4eChzdGRzY3IpIDwgKHdpZHRoICsgWUVTTk9fV0lEVEhfTUlOKSkNCiAgICAt
CQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICAtDQogICAgLQkvKiBjZW50ZXIgZGlh
bG9nIGJveCBvbiBzY3JlZW4gKi8NCiAgICAtCXggPSAoZ2V0bWF4eChzdGRzY3IpIC0gd2lkdGgp
IC8gMjsNCiAgICAtCXkgPSAoZ2V0bWF4eShzdGRzY3IpIC0gaGVpZ2h0KSAvIDI7DQogICAgLQ0K
ICAgIC0JZHJhd19zaGFkb3coc3Rkc2NyLCB5LCB4LCBoZWlnaHQsIHdpZHRoKTsNCiAgICAtDQog
ICAgLQlkaWFsb2cgPSBuZXd3aW4oaGVpZ2h0LCB3aWR0aCwgeSwgeCk7DQogICAgLQlrZXlwYWQo
ZGlhbG9nLCBUUlVFKTsNCiAgICAtDQogICAgLQlkcmF3X2JveChkaWFsb2csIDAsIDAsIGhlaWdo
dCwgd2lkdGgsDQogICAgLQkJIGRsZy5kaWFsb2cuYXRyLCBkbGcuYm9yZGVyLmF0cik7DQogICAg
LQl3YXR0cnNldChkaWFsb2csIGRsZy5ib3JkZXIuYXRyKTsNCiAgICAtCW12d2FkZGNoKGRpYWxv
ZywgaGVpZ2h0IC0gMywgMCwgQUNTX0xURUUpOw0KICAgIC0JZm9yIChpID0gMDsgaSA8IHdpZHRo
IC0gMjsgaSsrKQ0KICAgIC0JCXdhZGRjaChkaWFsb2csIEFDU19ITElORSk7DQogICAgLQl3YXR0
cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAtCXdhZGRjaChkaWFsb2csIEFDU19S
VEVFKTsNCiAgICAtDQogICAgLQlwcmludF90aXRsZShkaWFsb2csIHRpdGxlLCB3aWR0aCk7DQog
ICAgLQ0KICAgIC0Jd2F0dHJzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0cik7DQogICAgLQlwcmlu
dF9hdXRvd3JhcChkaWFsb2csIHByb21wdCwgd2lkdGggLSAyLCAxLCAzKTsNCiAgICAtDQogICAg
LQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7DQogICAgLQ0KICAgIC0J
d2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7DQogICAgLQkJa2V5ID0gd2dldGNoKGRpYWxvZyk7DQog
ICAgLQkJc3dpdGNoIChrZXkpIHsNCiAgICAtCQljYXNlICdZJzoNCiAgICAtCQljYXNlICd5JzoN
CiAgICAtCQkJZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCXJldHVybiAwOw0KICAgIC0JCWNhc2Ug
J04nOg0KICAgIC0JCWNhc2UgJ24nOg0KICAgIC0JCQlkZWx3aW4oZGlhbG9nKTsNCiAgICAtCQkJ
cmV0dXJuIDE7DQogICAgLQ0KICAgIC0JCWNhc2UgVEFCOg0KICAgIC0JCWNhc2UgS0VZX0xFRlQ6
DQogICAgLQkJY2FzZSBLRVlfUklHSFQ6DQogICAgLQkJCWJ1dHRvbiA9ICgoa2V5ID09IEtFWV9M
RUZUID8gLS1idXR0b24gOiArK2J1dHRvbikgPCAwKSA/IDEgOiAoYnV0dG9uID4gMSA/IDAgOiBi
dXR0b24pOw0KICAgIC0NCiAgICAtCQkJcHJpbnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lk
dGgsIGJ1dHRvbik7DQogICAgLQkJCXdyZWZyZXNoKGRpYWxvZyk7DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCWNhc2UgJyAnOg0KICAgIC0JCWNhc2UgJ1xuJzoNCiAgICAtCQkJZGVsd2luKGRpYWxv
Zyk7DQogICAgLQkJCXJldHVybiBidXR0b247DQogICAgLQkJY2FzZSBLRVlfRVNDOg0KICAgIC0J
CQlrZXkgPSBvbl9rZXlfZXNjKGRpYWxvZyk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2Ug
S0VZX1JFU0laRToNCiAgICAtCQkJZGVsd2luKGRpYWxvZyk7DQogICAgLQkJCW9uX2tleV9yZXNp
emUoKTsNCiAgICAtCQkJZ290byBkb19yZXNpemU7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0N
CiAgICAtCWRlbHdpbihkaWFsb2cpOw0KICAgIC0JcmV0dXJuIGtleTsJCS8qIEVTQyBwcmVzc2Vk
ICovDQogICAgLX0NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi1j
Zmcuc2ggYi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaA0KICAgIGRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IGM4MTI4NzIuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBw
b3J0L2tjb25maWcubmV3L21jb25mLWNmZy5zaA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAt
MSw0NyArMCwwIEBADQogICAgLSMhL2Jpbi9zaA0KICAgIC0jIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBHUEwtMi4wDQogICAgLQ0KICAgIC1QS0c9Im5jdXJzZXN3Ig0KICAgIC1QS0cyPSJuY3Vy
c2VzIg0KICAgIC0NCiAgICAtaWYgWyAtbiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBdOyB0
aGVuDQogICAgLQlpZiBwa2ctY29uZmlnIC0tZXhpc3RzICRQS0c7IHRoZW4NCiAgICAtCQllY2hv
IGNmbGFncz1cIiQocGtnLWNvbmZpZyAtLWNmbGFncyAkUEtHKVwiDQogICAgLQkJZWNobyBsaWJz
PVwiJChwa2ctY29uZmlnIC0tbGlicyAkUEtHKVwiDQogICAgLQkJZXhpdCAwDQogICAgLQlmaQ0K
ICAgIC0NCiAgICAtCWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzI7IHRoZW4NCiAgICAtCQll
Y2hvIGNmbGFncz1cIiQocGtnLWNvbmZpZyAtLWNmbGFncyAkUEtHMilcIg0KICAgIC0JCWVjaG8g
bGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMgJFBLRzIpXCINCiAgICAtCQlleGl0IDANCiAgICAt
CWZpDQogICAgLWZpDQogICAgLQ0KICAgIC0jIENoZWNrIHRoZSBkZWZhdWx0IHBhdGhzIGluIGNh
c2UgcGtnLWNvbmZpZyBpcyBub3QgaW5zdGFsbGVkLg0KICAgIC0jIChFdmVuIGlmIGl0IGlzIGlu
c3RhbGxlZCwgc29tZSBkaXN0cmlidXRpb25zIHN1Y2ggYXMgb3BlblNVU0UgY2Fubm90DQogICAg
LSMgZmluZCBuY3Vyc2VzIGJ5IHBrZy1jb25maWcuKQ0KICAgIC1pZiBbIC1mIC91c3IvaW5jbHVk
ZS9uY3Vyc2Vzdy9uY3Vyc2VzLmggXTsgdGhlbg0KICAgIC0JZWNobyBjZmxhZ3M9XCItRF9HTlVf
U09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3XCINCiAgICAtCWVjaG8gbGlicz1cIi1sbmN1
cnNlc3dcIg0KICAgIC0JZXhpdCAwDQogICAgLWZpDQogICAgLQ0KICAgIC1pZiBbIC1mIC91c3Iv
aW5jbHVkZS9uY3Vyc2VzL25jdXJzZXMuaCBdOyB0aGVuDQogICAgLQllY2hvIGNmbGFncz1cIi1E
X0dOVV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc1wiDQogICAgLQllY2hvIGxpYnM9XCIt
bG5jdXJzZXNcIg0KICAgIC0JZXhpdCAwDQogICAgLWZpDQogICAgLQ0KICAgIC1pZiBbIC1mIC91
c3IvaW5jbHVkZS9uY3Vyc2VzLmggXTsgdGhlbg0KICAgIC0JZWNobyBjZmxhZ3M9XCItRF9HTlVf
U09VUkNFXCINCiAgICAtCWVjaG8gbGlicz1cIi1sbmN1cnNlc1wiDQogICAgLQlleGl0IDANCiAg
ICAtZmkNCiAgICAtDQogICAgLWVjaG8gPiYyICIqIg0KICAgIC1lY2hvID4mMiAiKiBVbmFibGUg
dG8gZmluZCB0aGUgbmN1cnNlcyBwYWNrYWdlLiINCiAgICAtZWNobyA+JjIgIiogSW5zdGFsbCBu
Y3Vyc2VzIChuY3Vyc2VzLWRldmVsIG9yIGxpYm5jdXJzZXMtZGV2Ig0KICAgIC1lY2hvID4mMiAi
KiBkZXBlbmRpbmcgb24geW91ciBkaXN0cmlidXRpb24pLiINCiAgICAtZWNobyA+JjIgIioiDQog
ICAgLWV4aXQgMQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMg
Yi9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQNCiAgICBpbmRleCA1M2M0YTYyLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9tY29uZi5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDEwMzkgKzAsMCBAQA0K
ICAgIC0vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0vKg0KICAgIC0g
KiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+
DQogICAgLSAqDQogICAgLSAqIEludHJvZHVjZWQgc2luZ2xlIG1lbnUgbW9kZSAoc2hvdyBhbGwg
c3ViLW1lbnVzIGluIG9uZSBsYXJnZSB0cmVlKS4NCiAgICAtICogMjAwMi0xMS0wNiBQZXRyIEJh
dWRpcyA8cGFza3lAdWN3LmN6Pg0KICAgIC0gKg0KICAgIC0gKiBpMThuLCAyMDA1LCBBcm5hbGRv
IENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4NCiAgICAtICovDQogICAg
LQ0KICAgIC0jaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAtI2luY2x1ZGUgPGVycm5vLmg+DQogICAg
LSNpbmNsdWRlIDxmY250bC5oPg0KICAgIC0jaW5jbHVkZSA8bGltaXRzLmg+DQogICAgLSNpbmNs
dWRlIDxzdGRhcmcuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVkZSA8
c3RyaW5nLmg+DQogICAgLSNpbmNsdWRlIDxzaWduYWwuaD4NCiAgICAtI2luY2x1ZGUgPHVuaXN0
ZC5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5oIg0KICAgIC0jaW5jbHVkZSAibHhkaWFs
b2cvZGlhbG9nLmgiDQogICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgY2hhciBtY29uZl9yZWFkbWVb
XSA9DQogICAgLSJPdmVydmlld1xuIg0KICAgIC0iLS0tLS0tLS1cbiINCiAgICAtIlRoaXMgaW50
ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGJ1
aWxkLlxuIg0KICAgIC0iRmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxhcml6
ZWQsIG9yIGlnbm9yZWQuIFBhcmFtZXRlcnNcbiINCiAgICAtIm11c3QgYmUgZW50ZXJlZCBpbiBh
cyBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIG51bWJlcnMgb3IgdGV4dC5cbiINCiAgICAtIlxuIg0K
ICAgIC0iTWVudSBpdGVtcyBiZWdpbm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2Vu
dCBmZWF0dXJlcyB0aGF0XG4iDQogICAgLSIgIFsgXSBjYW4gYmUgYnVpbHQgaW4gb3IgcmVtb3Zl
ZFxuIg0KICAgIC0iICA8ID4gY2FuIGJlIGJ1aWx0IGluLCBtb2R1bGFyaXplZCBvciByZW1vdmVk
XG4iDQogICAgLSIgIHsgfSBjYW4gYmUgYnVpbHQgaW4gb3IgbW9kdWxhcml6ZWQgKHNlbGVjdGVk
IGJ5IG90aGVyIGZlYXR1cmUpXG4iDQogICAgLSIgIC0gLSBhcmUgc2VsZWN0ZWQgYnkgb3RoZXIg
ZmVhdHVyZSxcbiINCiAgICAtIndoaWxlICosIE0gb3Igd2hpdGVzcGFjZSBpbnNpZGUgYnJhY2Vz
IG1lYW5zIHRvIGJ1aWxkIGluLCBidWlsZCBhc1xuIg0KICAgIC0iYSBtb2R1bGUgb3IgdG8gZXhj
bHVkZSB0aGUgZmVhdHVyZSByZXNwZWN0aXZlbHkuXG4iDQogICAgLSJcbiINCiAgICAtIlRvIGNo
YW5nZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXMsIGhpZ2hsaWdodCBpdCB3aXRoIHRoZSBjdXJzb3Jc
biINCiAgICAtImtleXMgYW5kIHByZXNzIDxZPiB0byBidWlsZCBpdCBpbiwgPE0+IHRvIG1ha2Ug
aXQgYSBtb2R1bGUgb3JcbiINCiAgICAtIjxOPiB0byByZW1vdmUgaXQuICBZb3UgbWF5IGFsc28g
cHJlc3MgdGhlIDxTcGFjZSBCYXI+IHRvIGN5Y2xlXG4iDQogICAgLSJ0aHJvdWdoIHRoZSBhdmFp
bGFibGUgb3B0aW9ucyAoaS5lLiBZLT5OLT5NLT5ZKS5cbiINCiAgICAtIlxuIg0KICAgIC0iU29t
ZSBhZGRpdGlvbmFsIGtleWJvYXJkIGhpbnRzOlxuIg0KICAgIC0iXG4iDQogICAgLSJNZW51c1xu
Ig0KICAgIC0iLS0tLS0tLS0tLVxuIg0KICAgIC0ibyAgVXNlIHRoZSBVcC9Eb3duIGFycm93IGtl
eXMgKGN1cnNvciBrZXlzKSB0byBoaWdobGlnaHQgdGhlIGl0ZW0geW91XG4iDQogICAgLSIgICB3
aXNoIHRvIGNoYW5nZSBvciB0aGUgc3VibWVudSB5b3Ugd2lzaCB0byBzZWxlY3QgYW5kIHByZXNz
IDxFbnRlcj4uXG4iDQogICAgLSIgICBTdWJtZW51cyBhcmUgZGVzaWduYXRlZCBieSBcIi0tLT5c
IiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiINCiAgICAtIlxuIg0KICAgIC0iICAgU2hvcnRj
dXQ6IFByZXNzIHRoZSBvcHRpb24ncyBoaWdobGlnaHRlZCBsZXR0ZXIgKGhvdGtleSkuXG4iDQog
ICAgLSIgICAgICAgICAgICAgUHJlc3NpbmcgYSBob3RrZXkgbW9yZSB0aGFuIG9uY2Ugd2lsbCBz
ZXF1ZW5jZVxuIg0KICAgIC0iICAgICAgICAgICAgIHRocm91Z2ggYWxsIHZpc2libGUgaXRlbXMg
d2hpY2ggdXNlIHRoYXQgaG90a2V5LlxuIg0KICAgIC0iXG4iDQogICAgLSIgICBZb3UgbWF5IGFs
c28gdXNlIHRoZSA8UEFHRSBVUD4gYW5kIDxQQUdFIERPV04+IGtleXMgdG8gc2Nyb2xsXG4iDQog
ICAgLSIgICB1bnNlZW4gb3B0aW9ucyBpbnRvIHZpZXcuXG4iDQogICAgLSJcbiINCiAgICAtIm8g
IFRvIGV4aXQgYSBtZW51IHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IHRoZSA8RXhp
dD4gYnV0dG9uXG4iDQogICAgLSIgICBhbmQgcHJlc3MgPEVOVEVSPi5cbiINCiAgICAtIlxuIg0K
ICAgIC0iICAgU2hvcnRjdXQ6IFByZXNzIDxFU0M+PEVTQz4gb3IgPEU+IG9yIDxYPiBpZiB0aGVy
ZSBpcyBubyBob3RrZXlcbiINCiAgICAtIiAgICAgICAgICAgICB1c2luZyB0aG9zZSBsZXR0ZXJz
LiAgWW91IG1heSBwcmVzcyBhIHNpbmdsZSA8RVNDPiwgYnV0XG4iDQogICAgLSIgICAgICAgICAg
ICAgdGhlcmUgaXMgYSBkZWxheWVkIHJlc3BvbnNlIHdoaWNoIHlvdSBtYXkgZmluZCBhbm5veWlu
Zy5cbiINCiAgICAtIlxuIg0KICAgIC0iICAgQWxzbywgdGhlIDxUQUI+IGFuZCBjdXJzb3Iga2V5
cyB3aWxsIGN5Y2xlIGJldHdlZW4gPFNlbGVjdD4sXG4iDQogICAgLSIgICA8RXhpdD4sIDxIZWxw
PiwgPFNhdmU+LCBhbmQgPExvYWQ+LlxuIg0KICAgIC0iXG4iDQogICAgLSJvICBUbyBnZXQgaGVs
cCB3aXRoIGFuIGl0ZW0sIHVzZSB0aGUgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IDxIZWxwPlxu
Ig0KICAgIC0iICAgYW5kIHByZXNzIDxFTlRFUj4uXG4iDQogICAgLSJcbiINCiAgICAtIiAgIFNo
b3J0Y3V0OiBQcmVzcyA8SD4gb3IgPD8+LlxuIg0KICAgIC0iXG4iDQogICAgLSJvICBUbyB0b2dn
bGUgdGhlIGRpc3BsYXkgb2YgaGlkZGVuIG9wdGlvbnMsIHByZXNzIDxaPi5cbiINCiAgICAtIlxu
Ig0KICAgIC0iXG4iDQogICAgLSJSYWRpb2xpc3RzICAoQ2hvaWNlIGxpc3RzKVxuIg0KICAgIC0i
LS0tLS0tLS0tLS1cbiINCiAgICAtIm8gIFVzZSB0aGUgY3Vyc29yIGtleXMgdG8gc2VsZWN0IHRo
ZSBvcHRpb24geW91IHdpc2ggdG8gc2V0IGFuZCBwcmVzc1xuIg0KICAgIC0iICAgPFM+IG9yIHRo
ZSA8U1BBQ0UgQkFSPi5cbiINCiAgICAtIlxuIg0KICAgIC0iICAgU2hvcnRjdXQ6IFByZXNzIHRo
ZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXQgdGhlblxuIg0KICAg
IC0iICAgICAgICAgICAgIHByZXNzIDxTPiBvciA8U1BBQ0UgQkFSPi5cbiINCiAgICAtIlxuIg0K
ICAgIC0ibyAgVG8gc2VlIGF2YWlsYWJsZSBoZWxwIGZvciB0aGUgaXRlbSwgdXNlIHRoZSBjdXJz
b3Iga2V5cyB0byBoaWdobGlnaHRcbiINCiAgICAtIiAgIDxIZWxwPiBhbmQgUHJlc3MgPEVOVEVS
Pi5cbiINCiAgICAtIlxuIg0KICAgIC0iICAgU2hvcnRjdXQ6IFByZXNzIDxIPiBvciA8Pz4uXG4i
DQogICAgLSJcbiINCiAgICAtIiAgIEFsc28sIHRoZSA8VEFCPiBhbmQgY3Vyc29yIGtleXMgd2ls
bCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+IGFuZFxuIg0KICAgIC0iICAgPEhlbHA+XG4iDQogICAg
LSJcbiINCiAgICAtIlxuIg0KICAgIC0iRGF0YSBFbnRyeVxuIg0KICAgIC0iLS0tLS0tLS0tLS1c
biINCiAgICAtIm8gIEVudGVyIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYW5kIHByZXNzIDxF
TlRFUj5cbiINCiAgICAtIiAgIElmIHlvdSBhcmUgZW50ZXJpbmcgaGV4YWRlY2ltYWwgdmFsdWVz
LCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvXG4iDQogICAgLSIgICBhZGQgdGhlICcweCcgcHJlZml4
IHRvIHRoZSBlbnRyeS5cbiINCiAgICAtIlxuIg0KICAgIC0ibyAgRm9yIGhlbHAsIHVzZSB0aGUg
PFRBQj4gb3IgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IHRoZSBoZWxwIG9wdGlvblxuIg0KICAg
IC0iICAgYW5kIHByZXNzIDxFTlRFUj4uICBZb3UgY2FuIHRyeSA8VEFCPjxIPiBhcyB3ZWxsLlxu
Ig0KICAgIC0iXG4iDQogICAgLSJcbiINCiAgICAtIlRleHQgQm94ICAgIChIZWxwIFdpbmRvdylc
biINCiAgICAtIi0tLS0tLS0tXG4iDQogICAgLSJvICBVc2UgdGhlIGN1cnNvciBrZXlzIHRvIHNj
cm9sbCB1cC9kb3duL2xlZnQvcmlnaHQuICBUaGUgVkkgZWRpdG9yXG4iDQogICAgLSIgICBrZXlz
IGgsaixrLGwgZnVuY3Rpb24gaGVyZSBhcyBkbyA8dT4sIDxkPiwgPFNQQUNFIEJBUj4gYW5kIDxC
PiBmb3JcbiINCiAgICAtIiAgIHRob3NlIHdobyBhcmUgZmFtaWxpYXIgd2l0aCBsZXNzIGFuZCBs
eW54LlxuIg0KICAgIC0iXG4iDQogICAgLSJvICBQcmVzcyA8RT4sIDxYPiwgPHE+LCA8RW50ZXI+
IG9yIDxFc2M+PEVzYz4gdG8gZXhpdC5cbiINCiAgICAtIlxuIg0KICAgIC0iXG4iDQogICAgLSJB
bHRlcm5hdGUgQ29uZmlndXJhdGlvbiBGaWxlc1xuIg0KICAgIC0iLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS1cbiINCiAgICAtIk1lbnVjb25maWcgc3VwcG9ydHMgdGhlIHVzZSBvZiBhbHRl
cm5hdGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3JcbiINCiAgICAtInRob3NlIHdobywgZm9yIHZh
cmlvdXMgcmVhc29ucywgZmluZCBpdCBuZWNlc3NhcnkgdG8gc3dpdGNoXG4iDQogICAgLSJiZXR3
ZWVuIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cbiINCiAgICAtIlxuIg0KICAgIC0iVGhlIDxT
YXZlPiBidXR0b24gd2lsbCBsZXQgeW91IHNhdmUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiB0
b1xuIg0KICAgIC0iYSBmaWxlIG9mIHlvdXIgY2hvb3NpbmcuICBVc2UgdGhlIDxMb2FkPiBidXR0
b24gdG8gbG9hZCBhIHByZXZpb3VzbHlcbiINCiAgICAtInNhdmVkIGFsdGVybmF0ZSBjb25maWd1
cmF0aW9uLlxuIg0KICAgIC0iXG4iDQogICAgLSJFdmVuIGlmIHlvdSBkb24ndCB1c2UgYWx0ZXJu
YXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJ1dCB5b3UgZmluZFxuIg0KICAgIC0iZHVyaW5nIGEg
TWVudWNvbmZpZyBzZXNzaW9uIHRoYXQgeW91IGhhdmUgY29tcGxldGVseSBtZXNzZWQgdXAgeW91
clxuIg0KICAgIC0ic2V0dGluZ3MsIHlvdSBtYXkgdXNlIHRoZSA8TG9hZD4gYnV0dG9uIHRvIHJl
c3RvcmUgeW91ciBwcmV2aW91c2x5XG4iDQogICAgLSJzYXZlZCBzZXR0aW5ncyBmcm9tIFwiLmNv
bmZpZ1wiIHdpdGhvdXQgcmVzdGFydGluZyBNZW51Y29uZmlnLlxuIg0KICAgIC0iXG4iDQogICAg
LSJPdGhlciBpbmZvcm1hdGlvblxuIg0KICAgIC0iLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAt
IklmIHlvdSB1c2UgTWVudWNvbmZpZyBpbiBhbiBYVEVSTSB3aW5kb3csIG1ha2Ugc3VyZSB5b3Ug
aGF2ZSB5b3VyXG4iDQogICAgLSIkVEVSTSB2YXJpYWJsZSBzZXQgdG8gcG9pbnQgdG8gYW4geHRl
cm0gZGVmaW5pdGlvbiB3aGljaCBzdXBwb3J0c1xuIg0KICAgIC0iY29sb3IuICBPdGhlcndpc2Us
IE1lbnVjb25maWcgd2lsbCBsb29rIHJhdGhlciBiYWQuICBNZW51Y29uZmlnIHdpbGxcbiINCiAg
ICAtIm5vdCBkaXNwbGF5IGNvcnJlY3RseSBpbiBhbiBSWFZUIHdpbmRvdyBiZWNhdXNlIHJ4dnQg
ZGlzcGxheXMgb25seSBvbmVcbiINCiAgICAtImludGVuc2l0eSBvZiBjb2xvciwgYnJpZ2h0Llxu
Ig0KICAgIC0iXG4iDQogICAgLSJNZW51Y29uZmlnIHdpbGwgZGlzcGxheSBsYXJnZXIgbWVudXMg
b24gc2NyZWVucyBvciB4dGVybXMgd2hpY2ggYXJlXG4iDQogICAgLSJzZXQgdG8gZGlzcGxheSBt
b3JlIHRoYW4gdGhlIHN0YW5kYXJkIDI1IHJvdyBieSA4MCBjb2x1bW4gZ2VvbWV0cnkuXG4iDQog
ICAgLSJJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB0aGUgXCJzdHR5IHNpemVcIiBjb21tYW5k
IG11c3QgYmUgYWJsZSB0b1xuIg0KICAgIC0iZGlzcGxheSB0aGUgc2NyZWVuJ3MgY3VycmVudCBy
b3cgYW5kIGNvbHVtbiBnZW9tZXRyeS4gIEkgU1RST05HTFlcbiINCiAgICAtIlJFQ09NTUVORCB0
aGF0IHlvdSBtYWtlIHN1cmUgeW91IGRvIE5PVCBoYXZlIHRoZSBzaGVsbCB2YXJpYWJsZXNcbiIN
CiAgICAtIkxJTkVTIGFuZCBDT0xVTU5TIGV4cG9ydGVkIGludG8geW91ciBlbnZpcm9ubWVudC4g
IFNvbWUgZGlzdHJpYnV0aW9uc1xuIg0KICAgIC0iZXhwb3J0IHRob3NlIHZhcmlhYmxlcyB2aWEg
L2V0Yy9wcm9maWxlLiAgU29tZSBuY3Vyc2VzIHByb2dyYW1zIGNhblxuIg0KICAgIC0iYmVjb21l
IGNvbmZ1c2VkIHdoZW4gdGhvc2UgdmFyaWFibGVzIChMSU5FUyAmIENPTFVNTlMpIGRvbid0IHJl
ZmxlY3RcbiINCiAgICAtInRoZSB0cnVlIHNjcmVlbiBzaXplLlxuIg0KICAgIC0iXG4iDQogICAg
LSJPcHRpb25hbCBwZXJzb25hbGl0eSBhdmFpbGFibGVcbiINCiAgICAtIi0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0iSWYgeW91IHByZWZlciB0byBoYXZlIGFsbCBvZiB0
aGUgb3B0aW9ucyBsaXN0ZWQgaW4gYSBzaW5nbGUgbWVudSxcbiINCiAgICAtInJhdGhlciB0aGFu
IHRoZSBkZWZhdWx0IG11bHRpbWVudSBoaWVyYXJjaHksIHJ1biB0aGUgbWVudWNvbmZpZyB3aXRo
XG4iDQogICAgLSJNRU5VQ09ORklHX01PREUgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHNp
bmdsZV9tZW51LiBFeGFtcGxlOlxuIg0KICAgIC0iXG4iDQogICAgLSJtYWtlIE1FTlVDT05GSUdf
TU9ERT1zaW5nbGVfbWVudSBtZW51Y29uZmlnXG4iDQogICAgLSJcbiINCiAgICAtIjxFbnRlcj4g
d2lsbCB0aGVuIHVucm9sbCB0aGUgYXBwcm9wcmlhdGUgY2F0ZWdvcnksIG9yIGVuZm9sZCBpdCBp
ZiBpdFxuIg0KICAgIC0iaXMgYWxyZWFkeSB1bnJvbGxlZC5cbiINCiAgICAtIlxuIg0KICAgIC0i
Tm90ZSB0aGF0IHRoaXMgbW9kZSBjYW4gZXZlbnR1YWxseSBiZSBhIGxpdHRsZSBtb3JlIENQVSBl
eHBlbnNpdmVcbiINCiAgICAtIihlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVu
cm9sbGVkIGNhdGVnb3JpZXMpIHRoYW4gdGhlXG4iDQogICAgLSJkZWZhdWx0IG1vZGUuXG4iDQog
ICAgLSJcbiINCiAgICAtIkRpZmZlcmVudCBjb2xvciB0aGVtZXMgYXZhaWxhYmxlXG4iDQogICAg
LSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0iSXQgaXMgcG9zc2li
bGUgdG8gc2VsZWN0IGRpZmZlcmVudCBjb2xvciB0aGVtZXMgdXNpbmcgdGhlIHZhcmlhYmxlXG4i
DQogICAgLSJNRU5VQ09ORklHX0NPTE9SLiBUbyBzZWxlY3QgYSB0aGVtZSB1c2U6XG4iDQogICAg
LSJcbiINCiAgICAtIm1ha2UgTUVOVUNPTkZJR19DT0xPUj08dGhlbWU+IG1lbnVjb25maWdcbiIN
CiAgICAtIlxuIg0KICAgIC0iQXZhaWxhYmxlIHRoZW1lcyBhcmVcbiINCiAgICAtIiBtb25vICAg
ICAgID0+IHNlbGVjdHMgY29sb3JzIHN1aXRhYmxlIGZvciBtb25vY2hyb21lIGRpc3BsYXlzXG4i
DQogICAgLSIgYmxhY2tiZyAgICA9PiBzZWxlY3RzIGEgY29sb3Igc2NoZW1lIHdpdGggYmxhY2sg
YmFja2dyb3VuZFxuIg0KICAgIC0iIGNsYXNzaWMgICAgPT4gdGhlbWUgd2l0aCBibHVlIGJhY2tn
cm91bmQuIFRoZSBjbGFzc2ljIGxvb2tcbiINCiAgICAtIiBibHVldGl0bGUgID0+IGFuIExDRCBm
cmllbmRseSB2ZXJzaW9uIG9mIGNsYXNzaWMuIChkZWZhdWx0KVxuIg0KICAgIC0iXG4iLA0KICAg
IC1tZW51X2luc3RydWN0aW9uc1tdID0NCiAgICAtCSJBcnJvdyBrZXlzIG5hdmlnYXRlIHRoZSBt
ZW51LiAgIg0KICAgIC0JIjxFbnRlcj4gc2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBlbXB0eSBz
dWJtZW51cyAtLS0tKS4gICINCiAgICAtCSJIaWdobGlnaHRlZCBsZXR0ZXJzIGFyZSBob3RrZXlz
LiAgIg0KICAgIC0JIlByZXNzaW5nIDxZPiBzZWxlY3RzIGEgZmVhdHVyZSwgd2hpbGUgPE4+IHdp
bGwgZXhjbHVkZSBhIGZlYXR1cmUuICAiDQogICAgLQkiUHJlc3MgPEVzYz48RXNjPiB0byBleGl0
LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIg0KICAgIC0JIkxlZ2VuZDogWypdIGZl
YXR1cmUgaXMgc2VsZWN0ZWQgIFsgXSBmZWF0dXJlIGlzIGV4Y2x1ZGVkIiwNCiAgICAtcmFkaW9s
aXN0X2luc3RydWN0aW9uc1tdID0NCiAgICAtCSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdh
dGUgdGhpcyB3aW5kb3cgb3IgIg0KICAgIC0JInByZXNzIHRoZSBob3RrZXkgb2YgdGhlIGl0ZW0g
eW91IHdpc2ggdG8gc2VsZWN0ICINCiAgICAtCSJmb2xsb3dlZCBieSB0aGUgPFNQQUNFIEJBUj4u
ICINCiAgICAtCSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhp
cyBvcHRpb24uIiwNCiAgICAtaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2ludFtdID0NCiAgICAtCSJQ
bGVhc2UgZW50ZXIgYSBkZWNpbWFsIHZhbHVlLiAiDQogICAgLQkiRnJhY3Rpb25zIHdpbGwgbm90
IGJlIGFjY2VwdGVkLiAgIg0KICAgIC0JIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1vdmUgZnJvbSB0
aGUgaW5wdXQgZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiwNCiAgICAtaW5wdXRib3hf
aW5zdHJ1Y3Rpb25zX2hleFtdID0NCiAgICAtCSJQbGVhc2UgZW50ZXIgYSBoZXhhZGVjaW1hbCB2
YWx1ZS4gIg0KICAgIC0JIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1vdmUgZnJvbSB0aGUgaW5wdXQg
ZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiwNCiAgICAtaW5wdXRib3hfaW5zdHJ1Y3Rp
b25zX3N0cmluZ1tdID0NCiAgICAtCSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuICINCiAg
ICAtCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3ZlIGZyb20gdGhlIGlucHV0IGZpZWxkIHRvIHRo
ZSBidXR0b25zIGJlbG93IGl0LiIsDQogICAgLXNldG1vZF90ZXh0W10gPQ0KICAgIC0JIlRoaXMg
ZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIgd2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBh
IG1vZHVsZS5cbiINCiAgICAtCSJBcyBhIHJlc3VsdCwgdGhpcyBmZWF0dXJlIHdpbGwgYmUgYnVp
bHQgYXMgYSBtb2R1bGUuIiwNCiAgICAtbG9hZF9jb25maWdfdGV4dFtdID0NCiAgICAtCSJFbnRl
ciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuICAi
DQogICAgLQkiQWNjZXB0IHRoZSBuYW1lIHNob3duIHRvIHJlc3RvcmUgdGhlIGNvbmZpZ3VyYXRp
b24geW91ICINCiAgICAtCSJsYXN0IHJldHJpZXZlZC4gIExlYXZlIGJsYW5rIHRvIGFib3J0LiIs
DQogICAgLWxvYWRfY29uZmlnX2hlbHBbXSA9DQogICAgLQkiXG4iDQogICAgLQkiRm9yIHZhcmlv
dXMgcmVhc29ucywgb25lIG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJhbCBkaWZmZXJlbnRcbiINCiAg
ICAtCSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiINCiAg
ICAtCSJcbiINCiAgICAtCSJJZiB5b3UgaGF2ZSBzYXZlZCBhIHByZXZpb3VzIGNvbmZpZ3VyYXRp
b24gaW4gYSBmaWxlIG90aGVyIHRoYW4gdGhlXG4iDQogICAgLQkiZGVmYXVsdCBvbmUsIGVudGVy
aW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbW9kaWZ5IHRoYXRcbiINCiAgICAt
CSJjb25maWd1cmF0aW9uLlxuIg0KICAgIC0JIlxuIg0KICAgIC0JIklmIHlvdSBhcmUgdW5jZXJ0
YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5IG5ldmVyIHVzZWQgYWx0ZXJuYXRlXG4iDQogICAg
LQkiY29uZmlndXJhdGlvbiBmaWxlcy4gWW91IHNob3VsZCB0aGVyZWZvcmUgbGVhdmUgdGhpcyBi
bGFuayB0byBhYm9ydC5cbiIsDQogICAgLXNhdmVfY29uZmlnX3RleHRbXSA9DQogICAgLQkiRW50
ZXIgYSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIHNhdmVk
ICINCiAgICAtCSJhcyBhbiBhbHRlcm5hdGUuICBMZWF2ZSBibGFuayB0byBhYm9ydC4iLA0KICAg
IC1zYXZlX2NvbmZpZ19oZWxwW10gPQ0KICAgIC0JIlxuIg0KICAgIC0JIkZvciB2YXJpb3VzIHJl
YXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVwIGRpZmZlcmVudCBjb25maWd1cmF0aW9uc1xuIg0K
ICAgIC0JImF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxuIg0KICAgIC0JIlxuIg0KICAg
IC0JIkVudGVyaW5nIGEgZmlsZSBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbGF0ZXIgcmV0
cmlldmUsIG1vZGlmeVxuIg0KICAgIC0JImFuZCB1c2UgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlv
biBhcyBhbiBhbHRlcm5hdGUgdG8gd2hhdGV2ZXJcbiINCiAgICAtCSJjb25maWd1cmF0aW9uIG9w
dGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxuIg0KICAgIC0JIlxuIg0KICAg
IC0JIklmIHlvdSBhcmUgdW5jZXJ0YWluIHdoYXQgYWxsIHRoaXMgbWVhbnMgdGhlbiB5b3Ugc2hv
dWxkIHByb2JhYmx5XG4iDQogICAgLQkibGVhdmUgdGhpcyBibGFuay5cbiIsDQogICAgLXNlYXJj
aF9oZWxwW10gPQ0KICAgIC0JIlxuIg0KICAgIC0JIlNlYXJjaCBmb3Igc3ltYm9scyBhbmQgZGlz
cGxheSB0aGVpciByZWxhdGlvbnMuXG4iDQogICAgLQkiUmVndWxhciBleHByZXNzaW9ucyBhcmUg
YWxsb3dlZC5cbiINCiAgICAtCSJFeGFtcGxlOiBzZWFyY2ggZm9yIFwiXkZPT1wiXG4iDQogICAg
LQkiUmVzdWx0OlxuIg0KICAgIC0JIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgLQkiU3ltYm9sOiBGT08gWz1t
XVxuIg0KICAgIC0JIlR5cGUgIDogdHJpc3RhdGVcbiINCiAgICAtCSJQcm9tcHQ6IEZvbyBidXMg
aXMgdXNlZCB0byBkcml2ZSB0aGUgYmFyIEhXXG4iDQogICAgLQkiICBMb2NhdGlvbjpcbiINCiAg
ICAtCSIgICAgLT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EpXG4iDQogICAg
LQkiICAgICAgLT4gUENJIHN1cHBvcnQgKFBDSSBbPXldKVxuIg0KICAgIC0JIigxKSAgICAgLT4g
UENJIGFjY2VzcyBtb2RlICg8Y2hvaWNlPiBbPXldKVxuIg0KICAgIC0JIiAgRGVmaW5lZCBhdCBk
cml2ZXJzL3BjaS9LY29uZmlnOjQ3XG4iDQogICAgLQkiICBEZXBlbmRzIG9uOiBYODZfTE9DQUxf
QVBJQyAmJiBYODZfSU9fQVBJQyB8fCBJQTY0XG4iDQogICAgLQkiICBTZWxlY3RzOiBMSUJDUkMz
MlxuIg0KICAgIC0JIiAgU2VsZWN0ZWQgYnk6IEJBUiBbPW5dXG4iDQogICAgLQkiLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1c
biINCiAgICAtCSJvIFRoZSBsaW5lICdUeXBlOicgc2hvd3MgdGhlIHR5cGUgb2YgdGhlIGNvbmZp
Z3VyYXRpb24gb3B0aW9uIGZvclxuIg0KICAgIC0JIiAgdGhpcyBzeW1ib2wgKGJvb2wsIHRyaXN0
YXRlLCBzdHJpbmcsIC4uLilcbiINCiAgICAtCSJvIFRoZSBsaW5lICdQcm9tcHQ6JyBzaG93cyB0
aGUgdGV4dCB1c2VkIGluIHRoZSBtZW51IHN0cnVjdHVyZSBmb3JcbiINCiAgICAtCSIgIHRoaXMg
c3ltYm9sXG4iDQogICAgLQkibyBUaGUgJ0RlZmluZWQgYXQnIGxpbmUgdGVsbHMgYXQgd2hhdCBm
aWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIg0KICAgIC0JIiAgaXMgZGVmaW5lZFxuIg0K
ICAgIC0JIm8gVGhlICdEZXBlbmRzIG9uOicgbGluZSB0ZWxscyB3aGF0IHN5bWJvbHMgbmVlZCB0
byBiZSBkZWZpbmVkIGZvclxuIg0KICAgIC0JIiAgdGhpcyBzeW1ib2wgdG8gYmUgdmlzaWJsZSBp
biB0aGUgbWVudSAoc2VsZWN0YWJsZSlcbiINCiAgICAtCSJvIFRoZSAnTG9jYXRpb246JyBsaW5l
cyB0ZWxscyB3aGVyZSBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgdGhpcyBzeW1ib2xcbiINCiAgICAt
CSIgIGlzIGxvY2F0ZWRcbiINCiAgICAtCSIgICAgQSBsb2NhdGlvbiBmb2xsb3dlZCBieSBhIFs9
eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhXG4iDQogICAgLQkiICAgIHNlbGVjdGFibGUgbWVu
dSBpdGVtIC0gYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGRpc3BsYXllZCBpbnNpZGVcbiINCiAg
ICAtCSIgICAgYnJhY2tldHMuXG4iDQogICAgLQkiICAgIFByZXNzIHRoZSBrZXkgaW4gdGhlICgj
KSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iDQogICAgLQkiICAgIGxvY2F0aW9u
LiBZb3Ugd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgY3VycmVudCBzZWFyY2ggcmVzdWx0c1xuIg0K
ICAgIC0JIiAgICBhZnRlciBleGl0aW5nIHRoaXMgbmV3IG1lbnUuXG4iDQogICAgLQkibyBUaGUg
J1NlbGVjdHM6JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyB3aWxsIGJlIGF1dG9tYXRpY2FsbHlc
biINCiAgICAtCSIgIHNlbGVjdGVkIGlmIHRoaXMgc3ltYm9sIGlzIHNlbGVjdGVkICh5IG9yIG0p
XG4iDQogICAgLQkibyBUaGUgJ1NlbGVjdGVkIGJ5JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9sIGhh
cyBzZWxlY3RlZCB0aGlzIHN5bWJvbFxuIg0KICAgIC0JIlxuIg0KICAgIC0JIk9ubHkgcmVsZXZh
bnQgbGluZXMgYXJlIHNob3duLlxuIg0KICAgIC0JIlxuXG4iDQogICAgLQkiU2VhcmNoIGV4YW1w
bGVzOlxuIg0KICAgIC0JIkV4YW1wbGVzOiBVU0IJPT4gZmluZCBhbGwgc3ltYm9scyBjb250YWlu
aW5nIFVTQlxuIg0KICAgIC0JIiAgICAgICAgICBeVVNCID0+IGZpbmQgYWxsIHN5bWJvbHMgc3Rh
cnRpbmcgd2l0aCBVU0JcbiINCiAgICAtCSIgICAgICAgICAgVVNCJCA9PiBmaW5kIGFsbCBzeW1i
b2xzIGVuZGluZyB3aXRoIFVTQlxuIg0KICAgIC0JIlxuIjsNCiAgICAtDQogICAgLXN0YXRpYyBp
bnQgaW5kZW50Ow0KICAgIC1zdGF0aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudTsNCiAgICAt
c3RhdGljIGludCBjaGlsZF9jb3VudDsNCiAgICAtc3RhdGljIGludCBzaW5nbGVfbWVudV9tb2Rl
Ow0KICAgIC1zdGF0aWMgaW50IHNob3dfYWxsX29wdGlvbnM7DQogICAgLXN0YXRpYyBpbnQgc2F2
ZV9hbmRfZXhpdDsNCiAgICAtc3RhdGljIGludCBzaWxlbnQ7DQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgbWVudSAqYWN0aXZlX21lbnUpOw0K
ICAgIC1zdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgLXN0
YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtc3RhdGljIHZv
aWQgY29uZl9sb2FkKHZvaWQpOw0KICAgIC1zdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCk7DQog
ICAgLXN0YXRpYyBpbnQgc2hvd190ZXh0Ym94X2V4dChjb25zdCBjaGFyICp0aXRsZSwgY2hhciAq
dGV4dCwgaW50IHIsIGludCBjLA0KICAgIC0JCQkgICAgaW50ICprZXlzLCBpbnQgKnZzY3JvbGws
IGludCAqaHNjcm9sbCwNCiAgICAtCQkJICAgIHVwZGF0ZV90ZXh0X2ZuIHVwZGF0ZV90ZXh0LCB2
b2lkICpkYXRhKTsNCiAgICAtc3RhdGljIHZvaWQgc2hvd190ZXh0Ym94KGNvbnN0IGNoYXIgKnRp
dGxlLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQgciwgaW50IGMpOw0KICAgIC1zdGF0aWMgdm9pZCBz
aG93X2hlbHB0ZXh0KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp0ZXh0KTsNCiAgICAt
c3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtDQogICAgLXN0
YXRpYyBjaGFyIGZpbGVuYW1lW1BBVEhfTUFYKzFdOw0KICAgIC1zdGF0aWMgdm9pZCBzZXRfY29u
ZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkNCiAgICAtew0KICAgIC0J
c3RhdGljIGNoYXIgbWVudV9iYWNrdGl0bGVbUEFUSF9NQVgrMTI4XTsNCiAgICAtCWludCBzaXpl
Ow0KICAgIC0NCiAgICAtCXNpemUgPSBzbnByaW50ZihtZW51X2JhY2t0aXRsZSwgc2l6ZW9mKG1l
bnVfYmFja3RpdGxlKSwNCiAgICAtCQkJIiVzIC0gJXMiLCBjb25maWdfZmlsZW5hbWUsIHJvb3Rt
ZW51LnByb21wdC0+dGV4dCk7DQogICAgLQlpZiAoc2l6ZSA+PSBzaXplb2YobWVudV9iYWNrdGl0
bGUpKQ0KICAgIC0JCW1lbnVfYmFja3RpdGxlW3NpemVvZihtZW51X2JhY2t0aXRsZSktMV0gPSAn
XDAnOw0KICAgIC0Jc2V0X2RpYWxvZ19iYWNrdGl0bGUobWVudV9iYWNrdGl0bGUpOw0KICAgIC0N
CiAgICAtCXNpemUgPSBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzIiwg
Y29uZmlnX2ZpbGVuYW1lKTsNCiAgICAtCWlmIChzaXplID49IHNpemVvZihmaWxlbmFtZSkpDQog
ICAgLQkJZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9ICdcMCc7DQogICAgLX0NCiAgICAt
DQogICAgLXN0cnVjdCBzdWJ0aXRsZV9wYXJ0IHsNCiAgICAtCXN0cnVjdCBsaXN0X2hlYWQgZW50
cmllczsNCiAgICAtCWNvbnN0IGNoYXIgKnRleHQ7DQogICAgLX07DQogICAgLXN0YXRpYyBMSVNU
X0hFQUQodHJhaWwpOw0KICAgIC0NCiAgICAtc3RhdGljIHN0cnVjdCBzdWJ0aXRsZV9saXN0ICpz
dWJ0aXRsZXM7DQogICAgLXN0YXRpYyB2b2lkIHNldF9zdWJ0aXRsZSh2b2lkKQ0KICAgIC17DQog
ICAgLQlzdHJ1Y3Qgc3VidGl0bGVfcGFydCAqc3A7DQogICAgLQlzdHJ1Y3Qgc3VidGl0bGVfbGlz
dCAqcG9zLCAqdG1wOw0KICAgIC0NCiAgICAtCWZvciAocG9zID0gc3VidGl0bGVzOyBwb3MgIT0g
TlVMTDsgcG9zID0gdG1wKSB7DQogICAgLQkJdG1wID0gcG9zLT5uZXh0Ow0KICAgIC0JCWZyZWUo
cG9zKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzdWJ0aXRsZXMgPSBOVUxMOw0KICAgIC0JbGlz
dF9mb3JfZWFjaF9lbnRyeShzcCwgJnRyYWlsLCBlbnRyaWVzKSB7DQogICAgLQkJaWYgKHNwLT50
ZXh0KSB7DQogICAgLQkJCWlmIChwb3MpIHsNCiAgICAtCQkJCXBvcy0+bmV4dCA9IHhjYWxsb2Mo
MSwgc2l6ZW9mKCpwb3MpKTsNCiAgICAtCQkJCXBvcyA9IHBvcy0+bmV4dDsNCiAgICAtCQkJfSBl
bHNlIHsNCiAgICAtCQkJCXN1YnRpdGxlcyA9IHBvcyA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwb3Mp
KTsNCiAgICAtCQkJfQ0KICAgIC0JCQlwb3MtPnRleHQgPSBzcC0+dGV4dDsNCiAgICAtCQl9DQog
ICAgLQl9DQogICAgLQ0KICAgIC0Jc2V0X2RpYWxvZ19zdWJ0aXRsZXMoc3VidGl0bGVzKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgcmVzZXRfc3VidGl0bGUodm9pZCkNCiAgICAt
ew0KICAgIC0Jc3RydWN0IHN1YnRpdGxlX2xpc3QgKnBvcywgKnRtcDsNCiAgICAtDQogICAgLQlm
b3IgKHBvcyA9IHN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9IHRtcCkgew0KICAgIC0JCXRt
cCA9IHBvcy0+bmV4dDsNCiAgICAtCQlmcmVlKHBvcyk7DQogICAgLQl9DQogICAgLQlzdWJ0aXRs
ZXMgPSBOVUxMOw0KICAgIC0Jc2V0X2RpYWxvZ19zdWJ0aXRsZXMoc3VidGl0bGVzKTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtc3RydWN0IHNlYXJjaF9kYXRhIHsNCiAgICAtCXN0cnVjdCBsaXN0X2hl
YWQgKmhlYWQ7DQogICAgLQlzdHJ1Y3QgbWVudSAqKnRhcmdldHM7DQogICAgLQlpbnQgKmtleXM7
DQogICAgLX07DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB1cGRhdGVfdGV4dChjaGFyICpidWYs
IHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCwgdm9pZCAqX2RhdGEpDQogICAgLXsNCiAgICAtCXN0
cnVjdCBzZWFyY2hfZGF0YSAqZGF0YSA9IF9kYXRhOw0KICAgIC0Jc3RydWN0IGp1bXBfa2V5ICpw
b3M7DQogICAgLQlpbnQgayA9IDA7DQogICAgLQ0KICAgIC0JbGlzdF9mb3JfZWFjaF9lbnRyeShw
b3MsIGRhdGEtPmhlYWQsIGVudHJpZXMpIHsNCiAgICAtCQlpZiAocG9zLT5vZmZzZXQgPj0gc3Rh
cnQgJiYgcG9zLT5vZmZzZXQgPCBlbmQpIHsNCiAgICAtCQkJY2hhciBoZWFkZXJbNF07DQogICAg
LQ0KICAgIC0JCQlpZiAoayA8IEpVTVBfTkIpIHsNCiAgICAtCQkJCWludCBrZXkgPSAnMCcgKyAo
cG9zLT5pbmRleCAlIEpVTVBfTkIpICsgMTsNCiAgICAtDQogICAgLQkJCQlzcHJpbnRmKGhlYWRl
ciwgIiglYykiLCBrZXkpOw0KICAgIC0JCQkJZGF0YS0+a2V5c1trXSA9IGtleTsNCiAgICAtCQkJ
CWRhdGEtPnRhcmdldHNba10gPSBwb3MtPnRhcmdldDsNCiAgICAtCQkJCWsrKzsNCiAgICAtCQkJ
fSBlbHNlIHsNCiAgICAtCQkJCXNwcmludGYoaGVhZGVyLCAiICAgIik7DQogICAgLQkJCX0NCiAg
ICAtDQogICAgLQkJCW1lbWNweShidWYgKyBwb3MtPm9mZnNldCwgaGVhZGVyLCBzaXplb2YoaGVh
ZGVyKSAtIDEpOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWRhdGEtPmtleXNba10gPSAwOw0K
ICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBzZWFyY2hfY29uZih2b2lkKQ0KICAgIC17
DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsNCiAgICAtCXN0cnVjdCBnc3RyIHJlczsN
CiAgICAtCXN0cnVjdCBnc3RyIHRpdGxlOw0KICAgIC0JY2hhciAqZGlhbG9nX2lucHV0Ow0KICAg
IC0JaW50IGRyZXMsIHZzY3JvbGwgPSAwLCBoc2Nyb2xsID0gMDsNCiAgICAtCWJvb2wgYWdhaW47
DQogICAgLQlzdHJ1Y3QgZ3N0ciBzdHRleHQ7DQogICAgLQlzdHJ1Y3Qgc3VidGl0bGVfcGFydCBz
dHBhcnQ7DQogICAgLQ0KICAgIC0JdGl0bGUgPSBzdHJfbmV3KCk7DQogICAgLQlzdHJfcHJpbnRm
KCAmdGl0bGUsICJFbnRlciAoc3ViKXN0cmluZyBvciByZWdleHAgdG8gc2VhcmNoIGZvciAiDQog
ICAgLQkJCSAgICAgICIod2l0aCBvciB3aXRob3V0IFwiJXNcIikiLCBDT05GSUdfKTsNCiAgICAt
DQogICAgLWFnYWluOg0KICAgIC0JZGlhbG9nX2NsZWFyKCk7DQogICAgLQlkcmVzID0gZGlhbG9n
X2lucHV0Ym94KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0ZXIiLA0KICAgIC0JCQkgICAg
ICBzdHJfZ2V0KCZ0aXRsZSksDQogICAgLQkJCSAgICAgIDEwLCA3NSwgIiIpOw0KICAgIC0Jc3dp
dGNoIChkcmVzKSB7DQogICAgLQljYXNlIDA6DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIDE6
DQogICAgLQkJc2hvd19oZWxwdGV4dCgiU2VhcmNoIENvbmZpZ3VyYXRpb24iLCBzZWFyY2hfaGVs
cCk7DQogICAgLQkJZ290byBhZ2FpbjsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJc3RyX2ZyZWUo
JnRpdGxlKTsNCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JLyogc3RyaXAg
dGhlIHByZWZpeCBpZiBuZWNlc3NhcnkgKi8NCiAgICAtCWRpYWxvZ19pbnB1dCA9IGRpYWxvZ19p
bnB1dF9yZXN1bHQ7DQogICAgLQlpZiAoc3RybmNhc2VjbXAoZGlhbG9nX2lucHV0X3Jlc3VsdCwg
Q09ORklHXywgc3RybGVuKENPTkZJR18pKSA9PSAwKQ0KICAgIC0JCWRpYWxvZ19pbnB1dCArPSBz
dHJsZW4oQ09ORklHXyk7DQogICAgLQ0KICAgIC0Jc3R0ZXh0ID0gc3RyX25ldygpOw0KICAgIC0J
c3RyX3ByaW50Zigmc3R0ZXh0LCAiU2VhcmNoICglcykiLCBkaWFsb2dfaW5wdXRfcmVzdWx0KTsN
CiAgICAtCXN0cGFydC50ZXh0ID0gc3RyX2dldCgmc3R0ZXh0KTsNCiAgICAtCWxpc3RfYWRkX3Rh
aWwoJnN0cGFydC5lbnRyaWVzLCAmdHJhaWwpOw0KICAgIC0NCiAgICAtCXN5bV9hcnIgPSBzeW1f
cmVfc2VhcmNoKGRpYWxvZ19pbnB1dCk7DQogICAgLQlkbyB7DQogICAgLQkJTElTVF9IRUFEKGhl
YWQpOw0KICAgIC0JCXN0cnVjdCBtZW51ICp0YXJnZXRzW0pVTVBfTkJdOw0KICAgIC0JCWludCBr
ZXlzW0pVTVBfTkIgKyAxXSwgaTsNCiAgICAtCQlzdHJ1Y3Qgc2VhcmNoX2RhdGEgZGF0YSA9IHsN
CiAgICAtCQkJLmhlYWQgPSAmaGVhZCwNCiAgICAtCQkJLnRhcmdldHMgPSB0YXJnZXRzLA0KICAg
IC0JCQkua2V5cyA9IGtleXMsDQogICAgLQkJfTsNCiAgICAtCQlzdHJ1Y3QganVtcF9rZXkgKnBv
cywgKnRtcDsNCiAgICAtDQogICAgLQkJcmVzID0gZ2V0X3JlbGF0aW9uc19zdHIoc3ltX2Fyciwg
JmhlYWQpOw0KICAgIC0JCXNldF9zdWJ0aXRsZSgpOw0KICAgIC0JCWRyZXMgPSBzaG93X3RleHRi
b3hfZXh0KCJTZWFyY2ggUmVzdWx0cyIsIChjaGFyICopDQogICAgLQkJCQkJc3RyX2dldCgmcmVz
KSwgMCwgMCwga2V5cywgJnZzY3JvbGwsDQogICAgLQkJCQkJJmhzY3JvbGwsICZ1cGRhdGVfdGV4
dCwgKHZvaWQgKikNCiAgICAtCQkJCQkmZGF0YSk7DQogICAgLQkJYWdhaW4gPSBmYWxzZTsNCiAg
ICAtCQlmb3IgKGkgPSAwOyBpIDwgSlVNUF9OQiAmJiBrZXlzW2ldOyBpKyspDQogICAgLQkJCWlm
IChkcmVzID09IGtleXNbaV0pIHsNCiAgICAtCQkJCWNvbmYodGFyZ2V0c1tpXS0+cGFyZW50LCB0
YXJnZXRzW2ldKTsNCiAgICAtCQkJCWFnYWluID0gdHJ1ZTsNCiAgICAtCQkJfQ0KICAgIC0JCXN0
cl9mcmVlKCZyZXMpOw0KICAgIC0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIHRtcCwg
JmhlYWQsIGVudHJpZXMpDQogICAgLQkJCWZyZWUocG9zKTsNCiAgICAtCX0gd2hpbGUgKGFnYWlu
KTsNCiAgICAtCWZyZWUoc3ltX2Fycik7DQogICAgLQlzdHJfZnJlZSgmdGl0bGUpOw0KICAgIC0J
bGlzdF9kZWwodHJhaWwucHJldik7DQogICAgLQlzdHJfZnJlZSgmc3R0ZXh0KTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtc3RhdGljIHZvaWQgYnVpbGRfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkNCiAg
ICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpw
cm9wOw0KICAgIC0Jc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgIC0JaW50IHR5cGUsIHRtcCwgZG9p
bnQgPSAyOw0KICAgIC0JdHJpc3RhdGUgdmFsOw0KICAgIC0JY2hhciBjaDsNCiAgICAtCWJvb2wg
dmlzaWJsZTsNCiAgICAtDQogICAgLQkvKg0KICAgIC0JICogbm90ZTogbWVudV9pc192aXNpYmxl
KCkgaGFzIHNpZGUgZWZmZWN0IHRoYXQgaXQgd2lsbA0KICAgIC0JICogcmVjYWxjIHRoZSB2YWx1
ZSBvZiB0aGUgc3ltYm9sLg0KICAgIC0JICovDQogICAgLQl2aXNpYmxlID0gbWVudV9pc192aXNp
YmxlKG1lbnUpOw0KICAgIC0JaWYgKHNob3dfYWxsX29wdGlvbnMgJiYgIW1lbnVfaGFzX3Byb21w
dChtZW51KSkNCiAgICAtCQlyZXR1cm47DQogICAgLQllbHNlIGlmICghc2hvd19hbGxfb3B0aW9u
cyAmJiAhdmlzaWJsZSkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0Jc3ltID0gbWVudS0+
c3ltOw0KICAgIC0JcHJvcCA9IG1lbnUtPnByb21wdDsNCiAgICAtCWlmICghc3ltKSB7DQogICAg
LQkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsNCiAgICAtCQkJY29uc3QgY2hh
ciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgIC0JCQlzd2l0Y2ggKHByb3At
PnR5cGUpIHsNCiAgICAtCQkJY2FzZSBQX01FTlU6DQogICAgLQkJCQljaGlsZF9jb3VudCsrOw0K
ICAgIC0JCQkJaWYgKHNpbmdsZV9tZW51X21vZGUpIHsNCiAgICAtCQkJCQlpdGVtX21ha2UoIiVz
JSpjJXMiLA0KICAgIC0JCQkJCQkgIG1lbnUtPmRhdGEgPyAiLS0+IiA6ICIrKz4iLA0KICAgIC0J
CQkJCQkgIGluZGVudCArIDEsICcgJywgcHJvbXB0KTsNCiAgICAtCQkJCX0gZWxzZQ0KICAgIC0J
CQkJCWl0ZW1fbWFrZSgiICAgJSpjJXMgICVzIiwNCiAgICAtCQkJCQkJICBpbmRlbnQgKyAxLCAn
ICcsIHByb21wdCwNCiAgICAtCQkJCQkJICBtZW51X2lzX2VtcHR5KG1lbnUpID8gIi0tLS0iIDog
Ii0tLT4iKTsNCiAgICAtCQkJCWl0ZW1fc2V0X3RhZygnbScpOw0KICAgIC0JCQkJaXRlbV9zZXRf
ZGF0YShtZW51KTsNCiAgICAtCQkJCWlmIChzaW5nbGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEp
DQogICAgLQkJCQkJZ290byBjb25mX2NoaWxkczsNCiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJ
Y2FzZSBQX0NPTU1FTlQ6DQogICAgLQkJCQlpZiAocHJvbXB0KSB7DQogICAgLQkJCQkJY2hpbGRf
Y291bnQrKzsNCiAgICAtCQkJCQlpdGVtX21ha2UoIiAgICUqYyoqKiAlcyAqKioiLCBpbmRlbnQg
KyAxLCAnICcsIHByb21wdCk7DQogICAgLQkJCQkJaXRlbV9zZXRfdGFnKCc6Jyk7DQogICAgLQkJ
CQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICAtCQkJCX0NCiAgICAtCQkJCWJyZWFrOw0KICAg
IC0JCQlkZWZhdWx0Og0KICAgIC0JCQkJaWYgKHByb21wdCkgew0KICAgIC0JCQkJCWNoaWxkX2Nv
dW50Kys7DQogICAgLQkJCQkJaXRlbV9tYWtlKCItLS0lKmMlcyIsIGluZGVudCArIDEsICcgJywg
cHJvbXB0KTsNCiAgICAtCQkJCQlpdGVtX3NldF90YWcoJzonKTsNCiAgICAtCQkJCQlpdGVtX3Nl
dF9kYXRhKG1lbnUpOw0KICAgIC0JCQkJfQ0KICAgIC0JCQl9DQogICAgLQkJfSBlbHNlDQogICAg
LQkJCWRvaW50ID0gMDsNCiAgICAtCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgIC0JfQ0KICAgIC0N
CiAgICAtCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsNCiAgICAtCWlmIChzeW1faXNfY2hvaWNl
KHN5bSkpIHsNCiAgICAtCQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltID0gc3ltX2dldF9jaG9pY2Vf
dmFsdWUoc3ltKTsNCiAgICAtCQlzdHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOw0KICAgIC0N
CiAgICAtCQljaGlsZF9jb3VudCsrOw0KICAgIC0JCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgIC0JCQlpZiAobWVudV9pc192aXNpYmxl
KGNoaWxkKSAmJiBjaGlsZC0+c3ltID09IGRlZl9zeW0pDQogICAgLQkJCQlkZWZfbWVudSA9IGNo
aWxkOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1
ZShzeW0pOw0KICAgIC0JCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICAtCQkJc3dp
dGNoICh0eXBlKSB7DQogICAgLQkJCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCQkJaXRlbV9tYWtl
KCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0J
CQljYXNlIFNfVFJJU1RBVEU6DQogICAgLQkJCQlzd2l0Y2ggKHZhbCkgew0KICAgIC0JCQkJY2Fz
ZSB5ZXM6IGNoID0gJyonOyBicmVhazsNCiAgICAtCQkJCWNhc2UgbW9kOiBjaCA9ICdNJzsgYnJl
YWs7DQogICAgLQkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFrOw0KICAgIC0JCQkJfQ0KICAg
IC0JCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0N
CiAgICAtCQkJaXRlbV9zZXRfdGFnKCd0Jyk7DQogICAgLQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7
DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJaXRlbV9tYWtlKCIgICAiKTsNCiAgICAtCQkJaXRl
bV9zZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsNCiAgICAtCQkJaXRlbV9zZXRfZGF0YSht
ZW51KTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCWl0ZW1fYWRkX3N0cigiJSpjJXMiLCBpbmRl
bnQgKyAxLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQogICAgLQkJaWYgKHZhbCA9PSB5
ZXMpIHsNCiAgICAtCQkJaWYgKGRlZl9tZW51KSB7DQogICAgLQkJCQlpdGVtX2FkZF9zdHIoIiAo
JXMpIiwgbWVudV9nZXRfcHJvbXB0KGRlZl9tZW51KSk7DQogICAgLQkJCQlpdGVtX2FkZF9zdHIo
IiAgLS0tPiIpOw0KICAgIC0JCQkJaWYgKGRlZl9tZW51LT5saXN0KSB7DQogICAgLQkJCQkJaW5k
ZW50ICs9IDI7DQogICAgLQkJCQkJYnVpbGRfY29uZihkZWZfbWVudSk7DQogICAgLQkJCQkJaW5k
ZW50IC09IDI7DQogICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtCQkJcmV0dXJuOw0KICAgIC0J
CX0NCiAgICAtCX0gZWxzZSB7DQogICAgLQkJaWYgKG1lbnUgPT0gY3VycmVudF9tZW51KSB7DQog
ICAgLQkJCWl0ZW1fbWFrZSgiLS0tJSpjJXMiLCBpbmRlbnQgKyAxLCAnICcsIG1lbnVfZ2V0X3By
b21wdChtZW51KSk7DQogICAgLQkJCWl0ZW1fc2V0X3RhZygnOicpOw0KICAgIC0JCQlpdGVtX3Nl
dF9kYXRhKG1lbnUpOw0KICAgIC0JCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgIC0JCX0NCiAgICAt
CQljaGlsZF9jb3VudCsrOw0KICAgIC0JCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3lt
KTsNCiAgICAtCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIHZhbCA9PSB5ZXMpIHsN
CiAgICAtCQkJaXRlbV9tYWtlKCIgICAiKTsNCiAgICAtCQkJaXRlbV9zZXRfdGFnKCc6Jyk7DQog
ICAgLQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJc3dp
dGNoICh0eXBlKSB7DQogICAgLQkJCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCQkJaWYgKHN5bV9p
c19jaGFuZ2FibGUoc3ltKSkNCiAgICAtCQkJCQlpdGVtX21ha2UoIlslY10iLCB2YWwgPT0gbm8g
PyAnICcgOiAnKicpOw0KICAgIC0JCQkJZWxzZQ0KICAgIC0JCQkJCWl0ZW1fbWFrZSgiLSVjLSIs
IHZhbCA9PSBubyA/ICcgJyA6ICcqJyk7DQogICAgLQkJCQlpdGVtX3NldF90YWcoJ3QnKTsNCiAg
ICAtCQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJY2Fz
ZSBTX1RSSVNUQVRFOg0KICAgIC0JCQkJc3dpdGNoICh2YWwpIHsNCiAgICAtCQkJCWNhc2UgeWVz
OiBjaCA9ICcqJzsgYnJlYWs7DQogICAgLQkJCQljYXNlIG1vZDogY2ggPSAnTSc7IGJyZWFrOw0K
ICAgIC0JCQkJZGVmYXVsdDogIGNoID0gJyAnOyBicmVhazsNCiAgICAtCQkJCX0NCiAgICAtCQkJ
CWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICAtCQkJCQlpZiAoc3ltLT5yZXZfZGVw
LnRyaSA9PSBtb2QpDQogICAgLQkJCQkJCWl0ZW1fbWFrZSgieyVjfSIsIGNoKTsNCiAgICAtCQkJ
CQllbHNlDQogICAgLQkJCQkJCWl0ZW1fbWFrZSgiPCVjPiIsIGNoKTsNCiAgICAtCQkJCX0gZWxz
ZQ0KICAgIC0JCQkJCWl0ZW1fbWFrZSgiLSVjLSIsIGNoKTsNCiAgICAtCQkJCWl0ZW1fc2V0X3Rh
ZygndCcpOw0KICAgIC0JCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICAtCQkJCWJyZWFrOw0K
ICAgIC0JCQlkZWZhdWx0Og0KICAgIC0JCQkJdG1wID0gMiArIHN0cmxlbihzeW1fZ2V0X3N0cmlu
Z192YWx1ZShzeW0pKTsgLyogKCkgPSAyICovDQogICAgLQkJCQlpdGVtX21ha2UoIiglcykiLCBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsNCiAgICAtCQkJCXRtcCA9IGluZGVudCAtIHRtcCAr
IDQ7DQogICAgLQkJCQlpZiAodG1wIDwgMCkNCiAgICAtCQkJCQl0bXAgPSAwOw0KICAgIC0JCQkJ
aXRlbV9hZGRfc3RyKCIlKmMlcyVzIiwgdG1wLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSwN
CiAgICAtCQkJCQkgICAgIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUo
c3ltKSkgPw0KICAgIC0JCQkJCSAgICAgIiIgOiAiIChORVcpIik7DQogICAgLQkJCQlpdGVtX3Nl
dF90YWcoJ3MnKTsNCiAgICAtCQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7DQogICAgLQkJCQlnb3Rv
IGNvbmZfY2hpbGRzOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWl0ZW1fYWRkX3N0cigi
JSpjJXMlcyIsIGluZGVudCArIDEsICcgJywgbWVudV9nZXRfcHJvbXB0KG1lbnUpLA0KICAgIC0J
CQkgIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPw0KICAg
IC0JCQkgICIiIDogIiAoTkVXKSIpOw0KICAgIC0JCWlmIChtZW51LT5wcm9tcHQtPnR5cGUgPT0g
UF9NRU5VKSB7DQogICAgLQkJCWl0ZW1fYWRkX3N0cigiICAlcyIsIG1lbnVfaXNfZW1wdHkobWVu
dSkgPyAiLS0tLSIgOiAiLS0tPiIpOw0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0J
fQ0KICAgIC0NCiAgICAtY29uZl9jaGlsZHM6DQogICAgLQlpbmRlbnQgKz0gZG9pbnQ7DQogICAg
LQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpDQog
ICAgLQkJYnVpbGRfY29uZihjaGlsZCk7DQogICAgLQlpbmRlbnQgLT0gZG9pbnQ7DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBt
ZW51ICphY3RpdmVfbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IG1lbnUgKnN1Ym1lbnU7DQog
ICAgLQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgLQlz
dHJ1Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQog
ICAgLQlpbnQgcmVzOw0KICAgIC0JaW50IHNfc2Nyb2xsID0gMDsNCiAgICAtDQogICAgLQlpZiAo
bWVudSAhPSAmcm9vdG1lbnUpDQogICAgLQkJc3RwYXJ0LnRleHQgPSBtZW51X2dldF9wcm9tcHQo
bWVudSk7DQogICAgLQllbHNlDQogICAgLQkJc3RwYXJ0LnRleHQgPSBOVUxMOw0KICAgIC0JbGlz
dF9hZGRfdGFpbCgmc3RwYXJ0LmVudHJpZXMsICZ0cmFpbCk7DQogICAgLQ0KICAgIC0Jd2hpbGUg
KDEpIHsNCiAgICAtCQlpdGVtX3Jlc2V0KCk7DQogICAgLQkJY3VycmVudF9tZW51ID0gbWVudTsN
CiAgICAtCQlidWlsZF9jb25mKG1lbnUpOw0KICAgIC0JCWlmICghY2hpbGRfY291bnQpDQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCXNldF9zdWJ0aXRsZSgpOw0KICAgIC0JCWRpYWxvZ19jbGVhcigp
Ow0KICAgIC0JCXJlcyA9IGRpYWxvZ19tZW51KHByb21wdCA/IHByb21wdCA6ICJNYWluIE1lbnUi
LA0KICAgIC0JCQkJICBtZW51X2luc3RydWN0aW9ucywNCiAgICAtCQkJCSAgYWN0aXZlX21lbnUs
ICZzX3Njcm9sbCk7DQogICAgLQkJaWYgKHJlcyA9PSAxIHx8IHJlcyA9PSBLRVlfRVNDIHx8IHJl
cyA9PSAtRVJSRElTUExBWVRPT1NNQUxMKQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQlpZiAoaXRl
bV9jb3VudCgpICE9IDApIHsNCiAgICAtCQkJaWYgKCFpdGVtX2FjdGl2YXRlX3NlbGVjdGVkKCkp
DQogICAgLQkJCQljb250aW51ZTsNCiAgICAtCQkJaWYgKCFpdGVtX3RhZygpKQ0KICAgIC0JCQkJ
Y29udGludWU7DQogICAgLQkJfQ0KICAgIC0JCXN1Ym1lbnUgPSBpdGVtX2RhdGEoKTsNCiAgICAt
CQlhY3RpdmVfbWVudSA9IGl0ZW1fZGF0YSgpOw0KICAgIC0JCWlmIChzdWJtZW51KQ0KICAgIC0J
CQlzeW0gPSBzdWJtZW51LT5zeW07DQogICAgLQkJZWxzZQ0KICAgIC0JCQlzeW0gPSBOVUxMOw0K
ICAgIC0NCiAgICAtCQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJc3dp
dGNoIChpdGVtX3RhZygpKSB7DQogICAgLQkJCWNhc2UgJ20nOg0KICAgIC0JCQkJaWYgKHNpbmds
ZV9tZW51X21vZGUpDQogICAgLQkJCQkJc3VibWVudS0+ZGF0YSA9ICh2b2lkICopIChsb25nKSAh
c3VibWVudS0+ZGF0YTsNCiAgICAtCQkJCWVsc2UNCiAgICAtCQkJCQljb25mKHN1Ym1lbnUsIE5V
TEwpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgJ3QnOg0KICAgIC0JCQkJaWYgKHN5
bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSkgPT0geWVzKQ0K
ICAgIC0JCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOw0KICAgIC0JCQkJZWxzZSBpZiAoc3VibWVu
dS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkNCiAgICAtCQkJCQljb25mKHN1Ym1lbnUsIE5VTEwp
Ow0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgJ3MnOg0KICAgIC0JCQkJY29uZl9zdHJp
bmcoc3VibWVudSk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIDI6DQogICAgLQkJCWlmIChzeW0pDQogICAgLQkJCQlzaG93X2hlbHAoc3Vi
bWVudSk7DQogICAgLQkJCWVsc2Ugew0KICAgIC0JCQkJcmVzZXRfc3VidGl0bGUoKTsNCiAgICAt
CQkJCXNob3dfaGVscHRleHQoIlJFQURNRSIsIG1jb25mX3JlYWRtZSk7DQogICAgLQkJCX0NCiAg
ICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAzOg0KICAgIC0JCQlyZXNldF9zdWJ0aXRsZSgpOw0K
ICAgIC0JCQljb25mX3NhdmUoKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSA0Og0KICAg
IC0JCQlyZXNldF9zdWJ0aXRsZSgpOw0KICAgIC0JCQljb25mX2xvYWQoKTsNCiAgICAtCQkJYnJl
YWs7DQogICAgLQkJY2FzZSA1Og0KICAgIC0JCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkgew0KICAg
IC0JCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQ0KICAgIC0JCQkJCWJy
ZWFrOw0KICAgIC0JCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpKQ0KICAg
IC0JCQkJCXNob3dfdGV4dGJveChOVUxMLCBzZXRtb2RfdGV4dCwgNiwgNzQpOw0KICAgIC0JCQl9
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgNjoNCiAgICAtCQkJaWYgKGl0ZW1faXNfdGFn
KCd0JykpDQogICAgLQkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbm8pOw0KICAgIC0J
CQlicmVhazsNCiAgICAtCQljYXNlIDc6DQogICAgLQkJCWlmIChpdGVtX2lzX3RhZygndCcpKQ0K
ICAgIC0JCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCk7DQogICAgLQkJCWJyZWFr
Ow0KICAgIC0JCWNhc2UgODoNCiAgICAtCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpDQogICAgLQkJ
CQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQkJCWVsc2UgaWYgKGl0ZW1f
aXNfdGFnKCdtJykpDQogICAgLQkJCQljb25mKHN1Ym1lbnUsIE5VTEwpOw0KICAgIC0JCQlicmVh
azsNCiAgICAtCQljYXNlIDk6DQogICAgLQkJCXNlYXJjaF9jb25mKCk7DQogICAgLQkJCWJyZWFr
Ow0KICAgIC0JCWNhc2UgMTA6DQogICAgLQkJCXNob3dfYWxsX29wdGlvbnMgPSAhc2hvd19hbGxf
b3B0aW9uczsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAt
CWxpc3RfZGVsKHRyYWlsLnByZXYpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IHNo
b3dfdGV4dGJveF9leHQoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIgKnRleHQsIGludCByLCBpbnQg
YywgaW50DQogICAgLQkJCSAgICAqa2V5cywgaW50ICp2c2Nyb2xsLCBpbnQgKmhzY3JvbGwsIHVw
ZGF0ZV90ZXh0X2ZuDQogICAgLQkJCSAgICB1cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkNCiAgICAt
ew0KICAgIC0JZGlhbG9nX2NsZWFyKCk7DQogICAgLQlyZXR1cm4gZGlhbG9nX3RleHRib3godGl0
bGUsIHRleHQsIHIsIGMsIGtleXMsIHZzY3JvbGwsIGhzY3JvbGwsDQogICAgLQkJCSAgICAgIHVw
ZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgc2hvd190
ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQgciwgaW50IGMp
DQogICAgLXsNCiAgICAtCXNob3dfdGV4dGJveF9leHQodGl0bGUsIChjaGFyICopIHRleHQsIHIs
IGMsIChpbnQgW10pIHswfSwgTlVMTCwgTlVMTCwNCiAgICAtCQkJIE5VTEwsIE5VTEwpOw0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBzaG93X2hlbHB0ZXh0KGNvbnN0IGNoYXIgKnRp
dGxlLCBjb25zdCBjaGFyICp0ZXh0KQ0KICAgIC17DQogICAgLQlzaG93X3RleHRib3godGl0bGUs
IHRleHQsIDAsIDApOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX21lc3Nh
Z2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykNCiAgICAtew0KICAgIC0JaWYgKHNhdmVfYW5kX2V4
aXQpIHsNCiAgICAtCQlpZiAoIXNpbGVudCkNCiAgICAtCQkJcHJpbnRmKCIlcyIsIHMpOw0KICAg
IC0JfSBlbHNlIHsNCiAgICAtCQlzaG93X3RleHRib3goTlVMTCwgcywgNiwgNjApOw0KICAgIC0J
fQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUg
Km1lbnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBnc3RyIGhlbHAgPSBzdHJfbmV3KCk7DQogICAg
LQ0KICAgIC0JaGVscC5tYXhfd2lkdGggPSBnZXRtYXh4KHN0ZHNjcikgLSAxMDsNCiAgICAtCW1l
bnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsNCiAgICAtDQogICAgLQlzaG93X2hlbHB0ZXh0
KG1lbnVfZ2V0X3Byb21wdChtZW51KSwgc3RyX2dldCgmaGVscCkpOw0KICAgIC0Jc3RyX2ZyZWUo
JmhlbHApOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1
Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9n
ZXRfcHJvbXB0KG1lbnUpOw0KICAgIC0Jc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgIC0Jc3RydWN0
IHN5bWJvbCAqYWN0aXZlOw0KICAgIC0NCiAgICAtCWFjdGl2ZSA9IHN5bV9nZXRfY2hvaWNlX3Zh
bHVlKG1lbnUtPnN5bSk7DQogICAgLQl3aGlsZSAoMSkgew0KICAgIC0JCWludCByZXM7DQogICAg
LQkJaW50IHNlbGVjdGVkOw0KICAgIC0JCWl0ZW1fcmVzZXQoKTsNCiAgICAtDQogICAgLQkJY3Vy
cmVudF9tZW51ID0gbWVudTsNCiAgICAtCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICAtCQkJaWYgKCFtZW51X2lzX3Zpc2libGUoY2hp
bGQpKQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCWlmIChjaGlsZC0+c3ltKQ0KICAgIC0J
CQkJaXRlbV9tYWtlKCIlcyIsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOw0KICAgIC0JCQllbHNl
IHsNCiAgICAtCQkJCWl0ZW1fbWFrZSgiKioqICVzICoqKiIsIG1lbnVfZ2V0X3Byb21wdChjaGls
ZCkpOw0KICAgIC0JCQkJaXRlbV9zZXRfdGFnKCc6Jyk7DQogICAgLQkJCX0NCiAgICAtCQkJaXRl
bV9zZXRfZGF0YShjaGlsZCk7DQogICAgLQkJCWlmIChjaGlsZC0+c3ltID09IGFjdGl2ZSkNCiAg
ICAtCQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOw0KICAgIC0JCQlpZiAoY2hpbGQtPnN5bSA9PSBz
eW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pKQ0KICAgIC0JCQkJaXRlbV9zZXRfdGFnKCdY
Jyk7DQogICAgLQkJfQ0KICAgIC0JCWRpYWxvZ19jbGVhcigpOw0KICAgIC0JCXJlcyA9IGRpYWxv
Z19jaGVja2xpc3QocHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsDQogICAgLQkJCQkJcmFk
aW9saXN0X2luc3RydWN0aW9ucywNCiAgICAtCQkJCQlNRU5VQk9YX0hFSUdUSF9NSU4sDQogICAg
LQkJCQkJTUVOVUJPWF9XSURUSF9NSU4sDQogICAgLQkJCQkJQ0hFQ0tMSVNUX0hFSUdUSF9NSU4p
Ow0KICAgIC0JCXNlbGVjdGVkID0gaXRlbV9hY3RpdmF0ZV9zZWxlY3RlZCgpOw0KICAgIC0JCXN3
aXRjaCAocmVzKSB7DQogICAgLQkJY2FzZSAwOg0KICAgIC0JCQlpZiAoc2VsZWN0ZWQpIHsNCiAg
ICAtCQkJCWNoaWxkID0gaXRlbV9kYXRhKCk7DQogICAgLQkJCQlpZiAoIWNoaWxkLT5zeW0pDQog
ICAgLQkJCQkJYnJlYWs7DQogICAgLQ0KICAgIC0JCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShj
aGlsZC0+c3ltLCB5ZXMpOw0KICAgIC0JCQl9DQogICAgLQkJCXJldHVybjsNCiAgICAtCQljYXNl
IDE6DQogICAgLQkJCWlmIChzZWxlY3RlZCkgew0KICAgIC0JCQkJY2hpbGQgPSBpdGVtX2RhdGEo
KTsNCiAgICAtCQkJCXNob3dfaGVscChjaGlsZCk7DQogICAgLQkJCQlhY3RpdmUgPSBjaGlsZC0+
c3ltOw0KICAgIC0JCQl9IGVsc2UNCiAgICAtCQkJCXNob3dfaGVscChtZW51KTsNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRVNDOg0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJY2Fz
ZSAtRVJSRElTUExBWVRPT1NNQUxMOg0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0J
fQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVu
dSAqbWVudSkNCiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJv
bXB0KG1lbnUpOw0KICAgIC0NCiAgICAtCXdoaWxlICgxKSB7DQogICAgLQkJaW50IHJlczsNCiAg
ICAtCQljb25zdCBjaGFyICpoZWFkaW5nOw0KICAgIC0NCiAgICAtCQlzd2l0Y2ggKHN5bV9nZXRf
dHlwZShtZW51LT5zeW0pKSB7DQogICAgLQkJY2FzZSBTX0lOVDoNCiAgICAtCQkJaGVhZGluZyA9
IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2Ug
U19IRVg6DQogICAgLQkJCWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaGV4Ow0KICAg
IC0JCQlicmVhazsNCiAgICAtCQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCQloZWFkaW5nID0gaW5w
dXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJZGVmYXVs
dDoNCiAgICAtCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBtY29uZiBlcnJvciEiOw0KICAgIC0JCX0N
CiAgICAtCQlkaWFsb2dfY2xlYXIoKTsNCiAgICAtCQlyZXMgPSBkaWFsb2dfaW5wdXRib3gocHJv
bXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsDQogICAgLQkJCQkgICAgICBoZWFkaW5nLCAxMCwg
NzUsDQogICAgLQkJCQkgICAgICBzeW1fZ2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0pKTsNCiAg
ICAtCQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJaWYgKHN5bV9zZXRf
c3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSwgZGlhbG9nX2lucHV0X3Jlc3VsdCkpDQogICAgLQkJCQly
ZXR1cm47DQogICAgLQkJCXNob3dfdGV4dGJveChOVUxMLCAiWW91IGhhdmUgbWFkZSBhbiBpbnZh
bGlkIGVudHJ5LiIsIDUsIDQzKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAxOg0KICAg
IC0JCQlzaG93X2hlbHAobWVudSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX0VT
QzoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpDQogICAgLXsNCiAgICAtDQogICAgLQl3aGls
ZSAoMSkgew0KICAgIC0JCWludCByZXM7DQogICAgLQkJZGlhbG9nX2NsZWFyKCk7DQogICAgLQkJ
cmVzID0gZGlhbG9nX2lucHV0Ym94KE5VTEwsIGxvYWRfY29uZmlnX3RleHQsDQogICAgLQkJCQkg
ICAgICAxMSwgNTUsIGZpbGVuYW1lKTsNCiAgICAtCQlzd2l0Y2gocmVzKSB7DQogICAgLQkJY2Fz
ZSAwOg0KICAgIC0JCQlpZiAoIWRpYWxvZ19pbnB1dF9yZXN1bHRbMF0pDQogICAgLQkJCQlyZXR1
cm47DQogICAgLQkJCWlmICghY29uZl9yZWFkKGRpYWxvZ19pbnB1dF9yZXN1bHQpKSB7DQogICAg
LQkJCQlzZXRfY29uZmlnX2ZpbGVuYW1lKGRpYWxvZ19pbnB1dF9yZXN1bHQpOw0KICAgIC0JCQkJ
c3ltX3NldF9jaGFuZ2VfY291bnQoMSk7DQogICAgLQkJCQlyZXR1cm47DQogICAgLQkJCX0NCiAg
ICAtCQkJc2hvd190ZXh0Ym94KE5VTEwsICJGaWxlIGRvZXMgbm90IGV4aXN0ISIsIDUsIDM4KTsN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAxOg0KICAgIC0JCQlzaG93X2hlbHB0ZXh0KCJM
b2FkIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiwgbG9hZF9jb25maWdfaGVscCk7DQogICAgLQkJ
CWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX0VTQzoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0N
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9zYXZlKHZvaWQp
DQogICAgLXsNCiAgICAtCXdoaWxlICgxKSB7DQogICAgLQkJaW50IHJlczsNCiAgICAtCQlkaWFs
b2dfY2xlYXIoKTsNCiAgICAtCQlyZXMgPSBkaWFsb2dfaW5wdXRib3goTlVMTCwgc2F2ZV9jb25m
aWdfdGV4dCwNCiAgICAtCQkJCSAgICAgIDExLCA1NSwgZmlsZW5hbWUpOw0KICAgIC0JCXN3aXRj
aChyZXMpIHsNCiAgICAtCQljYXNlIDA6DQogICAgLQkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3Vs
dFswXSkNCiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJaWYgKCFjb25mX3dyaXRlKGRpYWxvZ19p
bnB1dF9yZXN1bHQpKSB7DQogICAgLQkJCQlzZXRfY29uZmlnX2ZpbGVuYW1lKGRpYWxvZ19pbnB1
dF9yZXN1bHQpOw0KICAgIC0JCQkJcmV0dXJuOw0KICAgIC0JCQl9DQogICAgLQkJCXNob3dfdGV4
dGJveChOVUxMLCAiQ2FuJ3QgY3JlYXRlIGZpbGUhIiwgNSwgNjApOw0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIDE6DQogICAgLQkJCXNob3dfaGVscHRleHQoIlNhdmUgQWx0ZXJuYXRlIENv
bmZpZ3VyYXRpb24iLCBzYXZlX2NvbmZpZ19oZWxwKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJ
Y2FzZSBLRVlfRVNDOg0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19
DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGhhbmRsZV9leGl0KHZvaWQpDQogICAgLXsNCiAgICAt
CWludCByZXM7DQogICAgLQ0KICAgIC0Jc2F2ZV9hbmRfZXhpdCA9IDE7DQogICAgLQlyZXNldF9z
dWJ0aXRsZSgpOw0KICAgIC0JZGlhbG9nX2NsZWFyKCk7DQogICAgLQlpZiAoY29uZl9nZXRfY2hh
bmdlZCgpKQ0KICAgIC0JCXJlcyA9IGRpYWxvZ195ZXNubyhOVUxMLA0KICAgIC0JCQkJICAgIkRv
IHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29uZmlndXJhdGlvbj9cbiINCiAgICAtCQkJCSAg
ICAgIihQcmVzcyA8RVNDPjxFU0M+IHRvIGNvbnRpbnVlIFVuaWtyYWZ0IGNvbmZpZ3VyYXRpb24u
KSIsDQogICAgLQkJCQkgICA2LCA2MCk7DQogICAgLQllbHNlDQogICAgLQkJcmVzID0gLTE7DQog
ICAgLQ0KICAgIC0JZW5kX2RpYWxvZyhzYXZlZF94LCBzYXZlZF95KTsNCiAgICAtDQogICAgLQlz
d2l0Y2ggKHJlcykgew0KICAgIC0JY2FzZSAwOg0KICAgIC0JCWlmIChjb25mX3dyaXRlKGZpbGVu
YW1lKSkgew0KICAgIC0JCQlmcHJpbnRmKHN0ZGVyciwgIlxuXG4iDQogICAgLQkJCQkJICAiRXJy
b3Igd2hpbGUgd3JpdGluZyBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiINCiAgICAtCQkJCQkgICJZ
b3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iDQogICAgLQkJCQkJICAi
XG5cbiIpOw0KICAgIC0JCQlyZXR1cm4gMTsNCiAgICAtCQl9DQogICAgLQkJY29uZl93cml0ZV9h
dXRvY29uZigwKTsNCiAgICAtCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICAtCWNhc2UgLTE6DQog
ICAgLQkJaWYgKCFzaWxlbnQpDQogICAgLQkJCXByaW50ZigiXG5cbiINCiAgICAtCQkJCSAiKioq
IEVuZCBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiINCiAgICAtCQkJCSAiKioqIEV4ZWN1dGUgJ21h
a2UnIHRvIHN0YXJ0IHRoZSBidWlsZCBvciB0cnkgJ21ha2UgaGVscCcuIg0KICAgIC0JCQkJICJc
blxuIik7DQogICAgLQkJcmVzID0gMDsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQog
ICAgLQkJaWYgKCFzaWxlbnQpDQogICAgLQkJCWZwcmludGYoc3RkZXJyLCAiXG5cbiINCiAgICAt
CQkJCQkgICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4iDQogICAg
LQkJCQkJICAiXG5cbiIpOw0KICAgIC0JCWlmIChyZXMgIT0gS0VZX0VTQykNCiAgICAtCQkJcmVz
ID0gMDsNCiAgICAtCX0NCiAgICAtDQogICAgLQlyZXR1cm4gcmVzOw0KICAgIC19DQogICAgLQ0K
ICAgIC1zdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnbm8pDQogICAgLXsNCiAgICAtCWV4
aXQoaGFuZGxlX2V4aXQoKSk7DQogICAgLX0NCiAgICAtDQogICAgLWludCBtYWluKGludCBhYywg
Y2hhciAqKmF2KQ0KICAgIC17DQogICAgLQljaGFyICptb2RlOw0KICAgIC0JaW50IHJlczsNCiAg
ICAtDQogICAgLQlzaWduYWwoU0lHSU5ULCBzaWdfaGFuZGxlcik7DQogICAgLQ0KICAgIC0JaWYg
KGFjID4gMSAmJiBzdHJjbXAoYXZbMV0sICItcyIpID09IDApIHsNCiAgICAtCQlzaWxlbnQgPSAx
Ow0KICAgIC0JCS8qIFNpbGVuY2UgY29uZl9yZWFkKCkgdW50aWwgdGhlIHJlYWwgY2FsbGJhY2sg
aXMgc2V0IHVwICovDQogICAgLQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsNCiAg
ICAtCQlhdisrOw0KICAgIC0JfQ0KICAgIC0JY29uZl9wYXJzZShhdlsxXSk7DQogICAgLQljb25m
X3JlYWQoTlVMTCk7DQogICAgLQ0KICAgIC0JbW9kZSA9IGdldGVudigiTUVOVUNPTkZJR19NT0RF
Iik7DQogICAgLQlpZiAobW9kZSkgew0KICAgIC0JCWlmICghc3RyY2FzZWNtcChtb2RlLCAic2lu
Z2xlX21lbnUiKSkNCiAgICAtCQkJc2luZ2xlX21lbnVfbW9kZSA9IDE7DQogICAgLQl9DQogICAg
LQ0KICAgIC0JaWYgKGluaXRfZGlhbG9nKE5VTEwpKSB7DQogICAgLQkJZnByaW50ZihzdGRlcnIs
ICJZb3VyIGRpc3BsYXkgaXMgdG9vIHNtYWxsIHRvIHJ1biBNZW51Y29uZmlnIVxuIik7DQogICAg
LQkJZnByaW50ZihzdGRlcnIsICJJdCBtdXN0IGJlIGF0IGxlYXN0IDE5IGxpbmVzIGJ5IDgwIGNv
bHVtbnMuXG4iKTsNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzZXRf
Y29uZmlnX2ZpbGVuYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSk7DQogICAgLQljb25mX3NldF9t
ZXNzYWdlX2NhbGxiYWNrKGNvbmZfbWVzc2FnZV9jYWxsYmFjayk7DQogICAgLQlkbyB7DQogICAg
LQkJY29uZigmcm9vdG1lbnUsIE5VTEwpOw0KICAgIC0JCXJlcyA9IGhhbmRsZV9leGl0KCk7DQog
ICAgLQl9IHdoaWxlIChyZXMgPT0gS0VZX0VTQyk7DQogICAgLQ0KICAgIC0JcmV0dXJuIHJlczsN
CiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L21lbnUuYyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvbWVudS5jDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggZDlkMTY0Ni4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
bWVudS5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDg2NyArMCwwIEBADQogICAgLS8v
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLS8qDQogICAgLSAqIENvcHly
aWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAt
ICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGFy
Zy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4N
CiAgICAtDQogICAgLSNpbmNsdWRlICJsa2MuaCINCiAgICAtDQogICAgLXN0YXRpYyBjb25zdCBj
aGFyIG5vaGVscF90ZXh0W10gPSAiVGhlcmUgaXMgbm8gaGVscCBhdmFpbGFibGUgZm9yIHRoaXMg
b3B0aW9uLiI7DQogICAgLQ0KICAgIC1zdHJ1Y3QgbWVudSByb290bWVudTsNCiAgICAtc3RhdGlj
IHN0cnVjdCBtZW51ICoqbGFzdF9lbnRyeV9wdHI7DQogICAgLQ0KICAgIC1zdHJ1Y3QgZmlsZSAq
ZmlsZV9saXN0Ow0KICAgIC1zdHJ1Y3QgZmlsZSAqY3VycmVudF9maWxlOw0KICAgIC0NCiAgICAt
dm9pZCBtZW51X3dhcm4oc3RydWN0IG1lbnUgKm1lbnUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0K
ICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0JdmFfc3RhcnQoYXAsIGZtdCk7DQogICAg
LQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOndhcm5pbmc6ICIsIG1lbnUtPmZpbGUtPm5hbWUsIG1l
bnUtPmxpbmVubyk7DQogICAgLQl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOw0KICAgIC0JZnBy
aW50ZihzdGRlcnIsICJcbiIpOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RhdGljIHZvaWQgcHJvcF93YXJuKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCwgY29uc3QgY2hh
ciAqZm10LCAuLi4pDQogICAgLXsNCiAgICAtCXZhX2xpc3QgYXA7DQogICAgLQl2YV9zdGFydChh
cCwgZm10KTsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgcHJvcC0+
ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vKTsNCiAgICAtCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBh
cCk7DQogICAgLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7DQogICAgLQl2YV9lbmQoYXApOw0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIF9tZW51X2luaXQodm9pZCkNCiAgICAtew0KICAgIC0JY3Vy
cmVudF9lbnRyeSA9IGN1cnJlbnRfbWVudSA9ICZyb290bWVudTsNCiAgICAtCWxhc3RfZW50cnlf
cHRyID0gJnJvb3RtZW51Lmxpc3Q7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgbWVudV9hZGRf
ZW50cnkoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVu
dTsNCiAgICAtDQogICAgLQltZW51ID0geG1hbGxvYyhzaXplb2YoKm1lbnUpKTsNCiAgICAtCW1l
bXNldChtZW51LCAwLCBzaXplb2YoKm1lbnUpKTsNCiAgICAtCW1lbnUtPnN5bSA9IHN5bTsNCiAg
ICAtCW1lbnUtPnBhcmVudCA9IGN1cnJlbnRfbWVudTsNCiAgICAtCW1lbnUtPmZpbGUgPSBjdXJy
ZW50X2ZpbGU7DQogICAgLQltZW51LT5saW5lbm8gPSB6Y29uZl9saW5lbm8oKTsNCiAgICAtDQog
ICAgLQkqbGFzdF9lbnRyeV9wdHIgPSBtZW51Ow0KICAgIC0JbGFzdF9lbnRyeV9wdHIgPSAmbWVu
dS0+bmV4dDsNCiAgICAtCWN1cnJlbnRfZW50cnkgPSBtZW51Ow0KICAgIC0JaWYgKHN5bSkNCiAg
ICAtCQltZW51X2FkZF9zeW1ib2woUF9TWU1CT0wsIHN5bSwgTlVMTCk7DQogICAgLX0NCiAgICAt
DQogICAgLXN0cnVjdCBtZW51ICptZW51X2FkZF9tZW51KHZvaWQpDQogICAgLXsNCiAgICAtCWxh
c3RfZW50cnlfcHRyID0gJmN1cnJlbnRfZW50cnktPmxpc3Q7DQogICAgLQlyZXR1cm4gY3VycmVu
dF9tZW51ID0gY3VycmVudF9lbnRyeTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2Vu
ZF9tZW51KHZvaWQpDQogICAgLXsNCiAgICAtCWxhc3RfZW50cnlfcHRyID0gJmN1cnJlbnRfbWVu
dS0+bmV4dDsNCiAgICAtCWN1cnJlbnRfbWVudSA9IGN1cnJlbnRfbWVudS0+cGFyZW50Ow0KICAg
IC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBSZXdyaXRlcyAnbScgdG8gJ20nICYmIE1PRFVM
RVMsIHNvIHRoYXQgaXQgZXZhbHVhdGVzIHRvICduJyB3aGVuIHJ1bm5pbmcNCiAgICAtICogd2l0
aG91dCBtb2R1bGVzDQogICAgLSAqLw0KICAgIC1zdGF0aWMgc3RydWN0IGV4cHIgKnJld3JpdGVf
bShzdHJ1Y3QgZXhwciAqZSkNCiAgICAtew0KICAgIC0JaWYgKCFlKQ0KICAgIC0JCXJldHVybiBl
Ow0KICAgIC0NCiAgICAtCXN3aXRjaCAoZS0+dHlwZSkgew0KICAgIC0JY2FzZSBFX05PVDoNCiAg
ICAtCQllLT5sZWZ0LmV4cHIgPSByZXdyaXRlX20oZS0+bGVmdC5leHByKTsNCiAgICAtCQlicmVh
azsNCiAgICAtCWNhc2UgRV9PUjoNCiAgICAtCWNhc2UgRV9BTkQ6DQogICAgLQkJZS0+bGVmdC5l
eHByID0gcmV3cml0ZV9tKGUtPmxlZnQuZXhwcik7DQogICAgLQkJZS0+cmlnaHQuZXhwciA9IHJl
d3JpdGVfbShlLT5yaWdodC5leHByKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgRV9TWU1C
T0w6DQogICAgLQkJLyogY2hhbmdlICdtJyBpbnRvICdtJyAmJiBNT0RVTEVTICovDQogICAgLQkJ
aWYgKGUtPmxlZnQuc3ltID09ICZzeW1ib2xfbW9kKQ0KICAgIC0JCQlyZXR1cm4gZXhwcl9hbGxv
Y19hbmQoZSwgZXhwcl9hbGxvY19zeW1ib2wobW9kdWxlc19zeW0pKTsNCiAgICAtCQlicmVhazsN
CiAgICAtCWRlZmF1bHQ6DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQlyZXR1cm4gZTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2FkZF9kZXAoc3RydWN0IGV4cHIgKmRlcCkN
CiAgICAtew0KICAgIC0JY3VycmVudF9lbnRyeS0+ZGVwID0gZXhwcl9hbGxvY19hbmQoY3VycmVu
dF9lbnRyeS0+ZGVwLCBkZXApOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIG1lbnVfc2V0X3R5
cGUoaW50IHR5cGUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bSA9IGN1cnJlbnRf
ZW50cnktPnN5bTsNCiAgICAtDQogICAgLQlpZiAoc3ltLT50eXBlID09IHR5cGUpDQogICAgLQkJ
cmV0dXJuOw0KICAgIC0JaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pIHsNCiAgICAtCQlzeW0t
PnR5cGUgPSB0eXBlOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtCW1lbnVfd2Fybihj
dXJyZW50X2VudHJ5LA0KICAgIC0JCSJpZ25vcmluZyB0eXBlIHJlZGVmaW5pdGlvbiBvZiAnJXMn
IGZyb20gJyVzJyB0byAnJXMnIiwNCiAgICAtCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNo
b2ljZT4iLA0KICAgIC0JCXN5bV90eXBlX25hbWUoc3ltLT50eXBlKSwgc3ltX3R5cGVfbmFtZSh0
eXBlKSk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKm1lbnVf
YWRkX3Byb3AoZW51bSBwcm9wX3R5cGUgdHlwZSwgY2hhciAqcHJvbXB0LCBzdHJ1Y3QgZXhwciAq
ZXhwciwgc3RydWN0IGV4cHIgKmRlcCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpw
cm9wID0gcHJvcF9hbGxvYyh0eXBlLCBjdXJyZW50X2VudHJ5LT5zeW0pOw0KICAgIC0NCiAgICAt
CXByb3AtPm1lbnUgPSBjdXJyZW50X2VudHJ5Ow0KICAgIC0JcHJvcC0+ZXhwciA9IGV4cHI7DQog
ICAgLQlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7DQogICAgLQ0KICAgIC0JaWYgKHByb21wdCkg
ew0KICAgIC0JCWlmIChpc3NwYWNlKCpwcm9tcHQpKSB7DQogICAgLQkJCXByb3Bfd2Fybihwcm9w
LCAibGVhZGluZyB3aGl0ZXNwYWNlIGlnbm9yZWQiKTsNCiAgICAtCQkJd2hpbGUgKGlzc3BhY2Uo
KnByb21wdCkpDQogICAgLQkJCQlwcm9tcHQrKzsNCiAgICAtCQl9DQogICAgLQkJaWYgKGN1cnJl
bnRfZW50cnktPnByb21wdCAmJiBjdXJyZW50X2VudHJ5ICE9ICZyb290bWVudSkNCiAgICAtCQkJ
cHJvcF93YXJuKHByb3AsICJwcm9tcHQgcmVkZWZpbmVkIik7DQogICAgLQ0KICAgIC0JCS8qIEFw
cGx5IGFsbCB1cHBlciBtZW51cycgdmlzaWJpbGl0aWVzIHRvIGFjdHVhbCBwcm9tcHRzLiAqLw0K
ICAgIC0JCWlmKHR5cGUgPT0gUF9QUk9NUFQpIHsNCiAgICAtCQkJc3RydWN0IG1lbnUgKm1lbnUg
PSBjdXJyZW50X2VudHJ5Ow0KICAgIC0NCiAgICAtCQkJd2hpbGUgKChtZW51ID0gbWVudS0+cGFy
ZW50KSAhPSBOVUxMKSB7DQogICAgLQkJCQlzdHJ1Y3QgZXhwciAqZHVwX2V4cHI7DQogICAgLQ0K
ICAgIC0JCQkJaWYgKCFtZW51LT52aXNpYmlsaXR5KQ0KICAgIC0JCQkJCWNvbnRpbnVlOw0KICAg
IC0JCQkJLyoNCiAgICAtCQkJCSAqIERvIG5vdCBhZGQgYSByZWZlcmVuY2UgdG8gdGhlDQogICAg
LQkJCQkgKiBtZW51J3MgdmlzaWJpbGl0eSBleHByZXNzaW9uIGJ1dA0KICAgIC0JCQkJICogdXNl
IGEgY29weSBvZiBpdC4gIE90aGVyd2lzZSB0aGUNCiAgICAtCQkJCSAqIGV4cHJlc3Npb24gcmVk
dWN0aW9uIGZ1bmN0aW9ucw0KICAgIC0JCQkJICogd2lsbCBtb2RpZnkgZXhwcmVzc2lvbnMgdGhh
dCBoYXZlDQogICAgLQkJCQkgKiBtdWx0aXBsZSByZWZlcmVuY2VzIHdoaWNoIGNhbg0KICAgIC0J
CQkJICogY2F1c2UgdW53YW50ZWQgc2lkZSBlZmZlY3RzLg0KICAgIC0JCQkJICovDQogICAgLQkJ
CQlkdXBfZXhwciA9IGV4cHJfY29weShtZW51LT52aXNpYmlsaXR5KTsNCiAgICAtDQogICAgLQkJ
CQlwcm9wLT52aXNpYmxlLmV4cHINCiAgICAtCQkJCQk9IGV4cHJfYWxsb2NfYW5kKHByb3AtPnZp
c2libGUuZXhwciwNCiAgICAtCQkJCQkJCSBkdXBfZXhwcik7DQogICAgLQkJCX0NCiAgICAtCQl9
DQogICAgLQ0KICAgIC0JCWN1cnJlbnRfZW50cnktPnByb21wdCA9IHByb3A7DQogICAgLQl9DQog
ICAgLQlwcm9wLT50ZXh0ID0gcHJvbXB0Ow0KICAgIC0NCiAgICAtCXJldHVybiBwcm9wOw0KICAg
IC19DQogICAgLQ0KICAgIC1zdHJ1Y3QgcHJvcGVydHkgKm1lbnVfYWRkX3Byb21wdChlbnVtIHBy
b3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHByICpkZXApDQogICAgLXsNCiAg
ICAtCXJldHVybiBtZW51X2FkZF9wcm9wKHR5cGUsIHByb21wdCwgTlVMTCwgZGVwKTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVjdCBleHByICpleHBy
KQ0KICAgIC17DQogICAgLQljdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5ID0gZXhwcl9hbGxvY19h
bmQoY3VycmVudF9lbnRyeS0+dmlzaWJpbGl0eSwNCiAgICAtCSAgICBleHByKTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtdm9pZCBtZW51X2FkZF9leHByKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVj
dCBleHByICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKQ0KICAgIC17DQogICAgLQltZW51X2FkZF9w
cm9wKHR5cGUsIE5VTEwsIGV4cHIsIGRlcCk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgbWVu
dV9hZGRfc3ltYm9sKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSwgc3Ry
dWN0IGV4cHIgKmRlcCkNCiAgICAtew0KICAgIC0JbWVudV9hZGRfcHJvcCh0eXBlLCBOVUxMLCBl
eHByX2FsbG9jX3N5bWJvbChzeW0pLCBkZXApOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIG1l
bnVfYWRkX29wdGlvbl9tb2R1bGVzKHZvaWQpDQogICAgLXsNCiAgICAtCWlmIChtb2R1bGVzX3N5
bSkNCiAgICAtCQl6Y29uZl9lcnJvcigic3ltYm9sICclcycgcmVkZWZpbmVzIG9wdGlvbiAnbW9k
dWxlcycgYWxyZWFkeSBkZWZpbmVkIGJ5IHN5bWJvbCAnJXMnIiwNCiAgICAtCQkJICAgIGN1cnJl
bnRfZW50cnktPnN5bS0+bmFtZSwgbW9kdWxlc19zeW0tPm5hbWUpOw0KICAgIC0JbW9kdWxlc19z
eW0gPSBjdXJyZW50X2VudHJ5LT5zeW07DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgbWVudV9h
ZGRfb3B0aW9uX2RlZmNvbmZpZ19saXN0KHZvaWQpDQogICAgLXsNCiAgICAtCWlmICghc3ltX2Rl
ZmNvbmZpZ19saXN0KQ0KICAgIC0JCXN5bV9kZWZjb25maWdfbGlzdCA9IGN1cnJlbnRfZW50cnkt
PnN5bTsNCiAgICAtCWVsc2UgaWYgKHN5bV9kZWZjb25maWdfbGlzdCAhPSBjdXJyZW50X2VudHJ5
LT5zeW0pDQogICAgLQkJemNvbmZfZXJyb3IoInRyeWluZyB0byByZWRlZmluZSBkZWZjb25maWcg
c3ltYm9sIik7DQogICAgLQlzeW1fZGVmY29uZmlnX2xpc3QtPmZsYWdzIHw9IFNZTUJPTF9OT19X
UklURTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2FkZF9vcHRpb25fYWxsbm9jb25m
aWdfeSh2b2lkKQ0KICAgIC17DQogICAgLQljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9IFNZ
TUJPTF9BTExOT0NPTkZJR19ZOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IG1lbnVf
dmFsaWRhdGVfbnVtYmVyKHN0cnVjdCBzeW1ib2wgKnN5bSwgc3RydWN0IHN5bWJvbCAqc3ltMikN
CiAgICAtew0KICAgIC0JcmV0dXJuIHN5bTItPnR5cGUgPT0gU19JTlQgfHwgc3ltMi0+dHlwZSA9
PSBTX0hFWCB8fA0KICAgIC0JICAgICAgIChzeW0yLT50eXBlID09IFNfVU5LTk9XTiAmJiBzeW1f
c3RyaW5nX3ZhbGlkKHN5bSwgc3ltMi0+bmFtZSkpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0
aWMgdm9pZCBzeW1fY2hlY2tfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAt
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTI7DQogICAg
LQljaGFyICp1c2U7DQogICAgLQ0KICAgIC0JZm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBw
cm9wID0gcHJvcC0+bmV4dCkgew0KICAgIC0JCXN3aXRjaCAocHJvcC0+dHlwZSkgew0KICAgIC0J
CWNhc2UgUF9ERUZBVUxUOg0KICAgIC0JCQlpZiAoKHN5bS0+dHlwZSA9PSBTX1NUUklORyB8fCBz
eW0tPnR5cGUgPT0gU19JTlQgfHwgc3ltLT50eXBlID09IFNfSEVYKSAmJg0KICAgIC0JCQkgICAg
cHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICAtCQkJCXByb3Bfd2Fybihwcm9wLA0K
ICAgIC0JCQkJICAgICJkZWZhdWx0IGZvciBjb25maWcgc3ltYm9sICclcyciDQogICAgLQkJCQkg
ICAgIiBtdXN0IGJlIGEgc2luZ2xlIHN5bWJvbCIsIHN5bS0+bmFtZSk7DQogICAgLQkJCWlmIChw
cm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCXN5
bTIgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7DQogICAgLQkJCWlmIChzeW0tPnR5cGUgPT0gU19I
RVggfHwgc3ltLT50eXBlID09IFNfSU5UKSB7DQogICAgLQkJCQlpZiAoIW1lbnVfdmFsaWRhdGVf
bnVtYmVyKHN5bSwgc3ltMikpDQogICAgLQkJCQkJcHJvcF93YXJuKHByb3AsDQogICAgLQkJCQkJ
ICAgICInJXMnOiBudW1iZXIgaXMgaW52YWxpZCIsDQogICAgLQkJCQkJICAgIHN5bS0+bmFtZSk7
DQogICAgLQkJCX0NCiAgICAtCQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgIC0JCQkJ
c3RydWN0IHByb3BlcnR5ICpjaG9pY2VfcHJvcCA9DQogICAgLQkJCQkJc3ltX2dldF9jaG9pY2Vf
cHJvcChzeW0yKTsNCiAgICAtDQogICAgLQkJCQlpZiAoIWNob2ljZV9wcm9wIHx8DQogICAgLQkJ
CQkgICAgcHJvcF9nZXRfc3ltYm9sKGNob2ljZV9wcm9wKSAhPSBzeW0pDQogICAgLQkJCQkJcHJv
cF93YXJuKHByb3AsDQogICAgLQkJCQkJCSAgImNob2ljZSBkZWZhdWx0IHN5bWJvbCAnJXMnIGlz
IG5vdCBjb250YWluZWQgaW4gdGhlIGNob2ljZSIsDQogICAgLQkJCQkJCSAgc3ltMi0+bmFtZSk7
DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX1NFTEVDVDoNCiAgICAt
CQljYXNlIFBfSU1QTFk6DQogICAgLQkJCXVzZSA9IHByb3AtPnR5cGUgPT0gUF9TRUxFQ1QgPyAi
c2VsZWN0IiA6ICJpbXBseSI7DQogICAgLQkJCXN5bTIgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7
DQogICAgLQkJCWlmIChzeW0tPnR5cGUgIT0gU19CT09MRUFOICYmIHN5bS0+dHlwZSAhPSBTX1RS
SVNUQVRFKQ0KICAgIC0JCQkJcHJvcF93YXJuKHByb3AsDQogICAgLQkJCQkgICAgImNvbmZpZyBz
eW1ib2wgJyVzJyB1c2VzICVzLCBidXQgaXMgIg0KICAgIC0JCQkJICAgICJub3QgYm9vbCBvciB0
cmlzdGF0ZSIsIHN5bS0+bmFtZSwgdXNlKTsNCiAgICAtCQkJZWxzZSBpZiAoc3ltMi0+dHlwZSAh
PSBTX1VOS05PV04gJiYNCiAgICAtCQkJCSBzeW0yLT50eXBlICE9IFNfQk9PTEVBTiAmJg0KICAg
IC0JCQkJIHN5bTItPnR5cGUgIT0gU19UUklTVEFURSkNCiAgICAtCQkJCXByb3Bfd2Fybihwcm9w
LA0KICAgIC0JCQkJICAgICInJXMnIGhhcyB3cm9uZyB0eXBlLiAnJXMnIG9ubHkgIg0KICAgIC0J
CQkJICAgICJhY2NlcHQgYXJndW1lbnRzIG9mIGJvb2wgYW5kICINCiAgICAtCQkJCSAgICAidHJp
c3RhdGUgdHlwZSIsIHN5bTItPm5hbWUsIHVzZSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNh
c2UgUF9SQU5HRToNCiAgICAtCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0lOVCAmJiBzeW0tPnR5cGUg
IT0gU19IRVgpDQogICAgLQkJCQlwcm9wX3dhcm4ocHJvcCwgInJhbmdlIGlzIG9ubHkgYWxsb3dl
ZCAiDQogICAgLQkJCQkJCSJmb3IgaW50IG9yIGhleCBzeW1ib2xzIik7DQogICAgLQkJCWlmICgh
bWVudV92YWxpZGF0ZV9udW1iZXIoc3ltLCBwcm9wLT5leHByLT5sZWZ0LnN5bSkgfHwNCiAgICAt
CQkJICAgICFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPnJpZ2h0LnN5bSkp
DQogICAgLQkJCQlwcm9wX3dhcm4ocHJvcCwgInJhbmdlIGlzIGludmFsaWQiKTsNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJOw0KICAgIC0JCX0NCiAgICAtCX0NCiAg
ICAtfQ0KICAgIC0NCiAgICAtdm9pZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpwYXJlbnQp
DQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51LCAqbGFzdF9tZW51Ow0KICAgIC0Jc3Ry
dWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3Ry
dWN0IGV4cHIgKnBhcmVudGRlcCwgKmJhc2VkZXAsICpkZXAsICpkZXAyLCAqKmVwOw0KICAgIC0N
CiAgICAtCXN5bSA9IHBhcmVudC0+c3ltOw0KICAgIC0JaWYgKHBhcmVudC0+bGlzdCkgew0KICAg
IC0JCS8qDQogICAgLQkJICogVGhpcyBtZW51IG5vZGUgaGFzIGNoaWxkcmVuLiBXZSAocmVjdXJz
aXZlbHkpIHByb2Nlc3MgdGhlbQ0KICAgIC0JCSAqIGFuZCBwcm9wYWdhdGUgcGFyZW50IGRlcGVu
ZGVuY2llcyBiZWZvcmUgbW92aW5nIG9uLg0KICAgIC0JCSAqLw0KICAgIC0NCiAgICAtCQlpZiAo
c3ltICYmIHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgIC0JCQlpZiAoc3ltLT50eXBlID09IFNf
VU5LTk9XTikgew0KICAgIC0JCQkJLyogZmluZCB0aGUgZmlyc3QgY2hvaWNlIHZhbHVlIHRvIGZp
bmQgb3V0IGNob2ljZSB0eXBlICovDQogICAgLQkJCQljdXJyZW50X2VudHJ5ID0gcGFyZW50Ow0K
ICAgIC0JCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4
dCkgew0KICAgIC0JCQkJCWlmIChtZW51LT5zeW0gJiYgbWVudS0+c3ltLT50eXBlICE9IFNfVU5L
Tk9XTikgew0KICAgIC0JCQkJCQltZW51X3NldF90eXBlKG1lbnUtPnN5bS0+dHlwZSk7DQogICAg
LQkJCQkJCWJyZWFrOw0KICAgIC0JCQkJCX0NCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0J
CQkvKiBzZXQgdGhlIHR5cGUgb2YgdGhlIHJlbWFpbmluZyBjaG9pY2UgdmFsdWVzICovDQogICAg
LQkJCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsN
CiAgICAtCQkJCWN1cnJlbnRfZW50cnkgPSBtZW51Ow0KICAgIC0JCQkJaWYgKG1lbnUtPnN5bSAm
JiBtZW51LT5zeW0tPnR5cGUgPT0gU19VTktOT1dOKQ0KICAgIC0JCQkJCW1lbnVfc2V0X3R5cGUo
c3ltLT50eXBlKTsNCiAgICAtCQkJfQ0KICAgIC0NCiAgICAtCQkJLyoNCiAgICAtCQkJICogVXNl
IHRoZSBjaG9pY2UgaXRzZWxmIGFzIHRoZSBwYXJlbnQgZGVwZW5kZW5jeSBvZg0KICAgIC0JCQkg
KiB0aGUgY29udGFpbmVkIGl0ZW1zLiBUaGlzIHR1cm5zIHRoZSBtb2RlIG9mIHRoZQ0KICAgIC0J
CQkgKiBjaG9pY2UgaW50byBhbiB1cHBlciBib3VuZCBvbiB0aGUgdmlzaWJpbGl0eSBvZiB0aGUN
CiAgICAtCQkJICogY2hvaWNlIHZhbHVlIHN5bWJvbHMuDQogICAgLQkJCSAqLw0KICAgIC0JCQlw
YXJlbnRkZXAgPSBleHByX2FsbG9jX3N5bWJvbChzeW0pOw0KICAgIC0JCX0gZWxzZSBpZiAocGFy
ZW50LT5wcm9tcHQpDQogICAgLQkJCS8qIE1lbnUgbm9kZSBmb3IgJ21lbnUnICovDQogICAgLQkJ
CXBhcmVudGRlcCA9IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHI7DQogICAgLQkJZWxzZQ0K
ICAgIC0JCQkvKiBNZW51IG5vZGUgZm9yICdpZicgKi8NCiAgICAtCQkJcGFyZW50ZGVwID0gcGFy
ZW50LT5kZXA7DQogICAgLQ0KICAgIC0JCS8qIEZvciBlYWNoIGNoaWxkIG1lbnUgbm9kZS4uLiAq
Lw0KICAgIC0JCWZvciAobWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5l
eHQpIHsNCiAgICAtCQkJLyoNCiAgICAtCQkJICogUHJvcGFnYXRlIHBhcmVudCBkZXBlbmRlbmNp
ZXMgdG8gdGhlIGNoaWxkIG1lbnUNCiAgICAtCQkJICogbm9kZSwgYWxzbyByZXdyaXRpbmcgYW5k
IHNpbXBsaWZ5aW5nIGV4cHJlc3Npb25zDQogICAgLQkJCSAqLw0KICAgIC0JCQliYXNlZGVwID0g
cmV3cml0ZV9tKG1lbnUtPmRlcCk7DQogICAgLQkJCWJhc2VkZXAgPSBleHByX3RyYW5zZm9ybShi
YXNlZGVwKTsNCiAgICAtCQkJYmFzZWRlcCA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShwYXJl
bnRkZXApLCBiYXNlZGVwKTsNCiAgICAtCQkJYmFzZWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMo
YmFzZWRlcCk7DQogICAgLQkJCW1lbnUtPmRlcCA9IGJhc2VkZXA7DQogICAgLQ0KICAgIC0JCQlp
ZiAobWVudS0+c3ltKQ0KICAgIC0JCQkJLyoNCiAgICAtCQkJCSAqIE5vdGU6IEZvciBzeW1ib2xz
LCBhbGwgcHJvbXB0cyBhcmUgaW5jbHVkZWQNCiAgICAtCQkJCSAqIHRvbyBpbiB0aGUgc3ltYm9s
J3Mgb3duIHByb3BlcnR5IGxpc3QNCiAgICAtCQkJCSAqLw0KICAgIC0JCQkJcHJvcCA9IG1lbnUt
PnN5bS0+cHJvcDsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJLyoNCiAgICAtCQkJCSAqIEZvciBu
b24tc3ltYm9sIG1lbnUgbm9kZXMsIHdlIGp1c3QgbmVlZCB0bw0KICAgIC0JCQkJICogaGFuZGxl
IHRoZSBwcm9tcHQNCiAgICAtCQkJCSAqLw0KICAgIC0JCQkJcHJvcCA9IG1lbnUtPnByb21wdDsN
CiAgICAtDQogICAgLQkJCS8qIEZvciBlYWNoIHByb3BlcnR5Li4uICovDQogICAgLQkJCWZvciAo
OyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgIC0JCQkJaWYgKHByb3AtPm1lbnUgIT0g
bWVudSkNCiAgICAtCQkJCQkvKg0KICAgIC0JCQkJCSAqIFR3byBwb3NzaWJpbGl0aWVzOg0KICAg
IC0JCQkJCSAqDQogICAgLQkJCQkJICogMS4gVGhlIHByb3BlcnR5IGxhY2tzIGRlcGVuZGVuY2ll
cw0KICAgIC0JCQkJCSAqICAgIGFuZCBzbyBpc24ndCBsb2NhdGlvbi1zcGVjaWZpYywNCiAgICAt
CQkJCQkgKiAgICBlLmcuIGFuICdvcHRpb24nDQogICAgLQkJCQkJICoNCiAgICAtCQkJCQkgKiAy
LiBUaGUgcHJvcGVydHkgYmVsb25ncyB0byBhIHN5bWJvbA0KICAgIC0JCQkJCSAqICAgIGRlZmlu
ZWQgaW4gbXVsdGlwbGUgbG9jYXRpb25zIGFuZA0KICAgIC0JCQkJCSAqICAgIGlzIGZyb20gc29t
ZSBvdGhlciBsb2NhdGlvbi4gSXQNCiAgICAtCQkJCQkgKiAgICB3aWxsIGJlIGhhbmRsZWQgdGhl
cmUgaW4gdGhhdA0KICAgIC0JCQkJCSAqICAgIGNhc2UuDQogICAgLQkJCQkJICoNCiAgICAtCQkJ
CQkgKiBTa2lwIHRoZSBwcm9wZXJ0eS4NCiAgICAtCQkJCQkgKi8NCiAgICAtCQkJCQljb250aW51
ZTsNCiAgICAtDQogICAgLQkJCQkvKg0KICAgIC0JCQkJICogUHJvcGFnYXRlIHBhcmVudCBkZXBl
bmRlbmNpZXMgdG8gdGhlDQogICAgLQkJCQkgKiBwcm9wZXJ0eSdzIGNvbmRpdGlvbiwgcmV3cml0
aW5nIGFuZA0KICAgIC0JCQkJICogc2ltcGxpZnlpbmcgZXhwcmVzc2lvbnMgYXQgdGhlIHNhbWUg
dGltZQ0KICAgIC0JCQkJICovDQogICAgLQkJCQlkZXAgPSByZXdyaXRlX20ocHJvcC0+dmlzaWJs
ZS5leHByKTsNCiAgICAtCQkJCWRlcCA9IGV4cHJfdHJhbnNmb3JtKGRlcCk7DQogICAgLQkJCQlk
ZXAgPSBleHByX2FsbG9jX2FuZChleHByX2NvcHkoYmFzZWRlcCksIGRlcCk7DQogICAgLQkJCQlk
ZXAgPSBleHByX2VsaW1pbmF0ZV9kdXBzKGRlcCk7DQogICAgLQkJCQlpZiAobWVudS0+c3ltICYm
IG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKQ0KICAgIC0JCQkJCWRlcCA9IGV4cHJfdHJh
bnNfYm9vbChkZXApOw0KICAgIC0JCQkJcHJvcC0+dmlzaWJsZS5leHByID0gZGVwOw0KICAgIC0N
CiAgICAtCQkJCS8qDQogICAgLQkJCQkgKiBIYW5kbGUgc2VsZWN0cyBhbmQgaW1wbGllcywgd2hp
Y2ggbW9kaWZ5IHRoZQ0KICAgIC0JCQkJICogZGVwZW5kZW5jaWVzIG9mIHRoZSBzZWxlY3RlZC9p
bXBsaWVkIHN5bWJvbA0KICAgIC0JCQkJICovDQogICAgLQkJCQlpZiAocHJvcC0+dHlwZSA9PSBQ
X1NFTEVDVCkgew0KICAgIC0JCQkJCXN0cnVjdCBzeW1ib2wgKmVzID0gcHJvcF9nZXRfc3ltYm9s
KHByb3ApOw0KICAgIC0JCQkJCWVzLT5yZXZfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKGVzLT5y
ZXZfZGVwLmV4cHIsDQogICAgLQkJCQkJCQlleHByX2FsbG9jX2FuZChleHByX2FsbG9jX3N5bWJv
bChtZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOw0KICAgIC0JCQkJfSBlbHNlIGlmIChwcm9w
LT50eXBlID09IFBfSU1QTFkpIHsNCiAgICAtCQkJCQlzdHJ1Y3Qgc3ltYm9sICplcyA9IHByb3Bf
Z2V0X3N5bWJvbChwcm9wKTsNCiAgICAtCQkJCQllcy0+aW1wbGllZC5leHByID0gZXhwcl9hbGxv
Y19vcihlcy0+aW1wbGllZC5leHByLA0KICAgIC0JCQkJCQkJZXhwcl9hbGxvY19hbmQoZXhwcl9h
bGxvY19zeW1ib2wobWVudS0+c3ltKSwgZXhwcl9jb3B5KGRlcCkpKTsNCiAgICAtCQkJCX0NCiAg
ICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJaWYgKHN5bSAmJiBzeW1faXNfY2hvaWNl
KHN5bSkpDQogICAgLQkJCWV4cHJfZnJlZShwYXJlbnRkZXApOw0KICAgIC0NCiAgICAtCQkvKg0K
ICAgIC0JCSAqIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgY2hpbGRyZW4gaW4gdGhlIHNhbWUgZmFzaGlv
biBiZWZvcmUNCiAgICAtCQkgKiBtb3Zpbmcgb24NCiAgICAtCQkgKi8NCiAgICAtCQlmb3IgKG1l
bnUgPSBwYXJlbnQtPmxpc3Q7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KQ0KICAgIC0JCQltZW51
X2ZpbmFsaXplKG1lbnUpOw0KICAgIC0JfSBlbHNlIGlmIChzeW0pIHsNCiAgICAtCQkvKg0KICAg
IC0JCSAqIEF1dG9tYXRpYyBzdWJtZW51IGNyZWF0aW9uLiBJZiBzeW0gaXMgYSBzeW1ib2wgYW5k
IEEsIEIsIEMsDQogICAgLQkJICogLi4uIGFyZSBjb25zZWN1dGl2ZSBpdGVtcyAoc3ltYm9scywg
bWVudXMsIGlmcywgZXRjLikgdGhhdA0KICAgIC0JCSAqIGFsbCBkZXBlbmQgb24gc3ltLCB0aGVu
IHRoZSBmb2xsb3dpbmcgbWVudSBzdHJ1Y3R1cmUgaXMNCiAgICAtCQkgKiBjcmVhdGVkOg0KICAg
IC0JCSAqDQogICAgLQkJICoJc3ltDQogICAgLQkJICoJICstQQ0KICAgIC0JCSAqCSArLUINCiAg
ICAtCQkgKgkgKy1DDQogICAgLQkJICoJIC4uLg0KICAgIC0JCSAqDQogICAgLQkJICogVGhpcyBh
bHNvIHdvcmtzIHJlY3Vyc2l2ZWx5LCBnaXZpbmcgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUNCiAg
ICAtCQkgKiBpZiBBIGlzIGEgc3ltYm9sIGFuZCBCIGRlcGVuZHMgb24gQToNCiAgICAtCQkgKg0K
ICAgIC0JCSAqCXN5bQ0KICAgIC0JCSAqCSArLUENCiAgICAtCQkgKgkgfCArLUINCiAgICAtCQkg
KgkgKy1DDQogICAgLQkJICoJIC4uLg0KICAgIC0JCSAqLw0KICAgIC0NCiAgICAtCQliYXNlZGVw
ID0gcGFyZW50LT5wcm9tcHQgPyBwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByIDogTlVMTDsN
CiAgICAtCQliYXNlZGVwID0gZXhwcl90cmFuc19jb21wYXJlKGJhc2VkZXAsIEVfVU5FUVVBTCwg
JnN5bWJvbF9ubyk7DQogICAgLQkJYmFzZWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90
cmFuc2Zvcm0oYmFzZWRlcCkpOw0KICAgIC0NCiAgICAtCQkvKiBFeGFtaW5lIGNvbnNlY3V0aXZl
IGVsZW1lbnRzIGFmdGVyIHN5bSAqLw0KICAgIC0JCWxhc3RfbWVudSA9IE5VTEw7DQogICAgLQkJ
Zm9yIChtZW51ID0gcGFyZW50LT5uZXh0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkgew0KICAg
IC0JCQlkZXAgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciA6IG1l
bnUtPmRlcDsNCiAgICAtCQkJaWYgKCFleHByX2NvbnRhaW5zX3N5bWJvbChkZXAsIHN5bSkpDQog
ICAgLQkJCQkvKiBObyBkZXBlbmRlbmN5LCBxdWl0ICovDQogICAgLQkJCQlicmVhazsNCiAgICAt
CQkJaWYgKGV4cHJfZGVwZW5kc19zeW1ib2woZGVwLCBzeW0pKQ0KICAgIC0JCQkJLyogQWJzb2x1
dGUgZGVwZW5kZW5jeSwgcHV0IGluIHN1Ym1lbnUgKi8NCiAgICAtCQkJCWdvdG8gbmV4dDsNCiAg
ICAtDQogICAgLQkJCS8qDQogICAgLQkJCSAqIEFsc28gY29uc2lkZXIgaXQgYSBkZXBlbmRlbmN5
IG9uIHN5bSBpZiBvdXINCiAgICAtCQkJICogZGVwZW5kZW5jaWVzIGNvbnRhaW4gc3ltIGFuZCBh
cmUgYSAic3VwZXJzZXQiIG9mDQogICAgLQkJCSAqIHN5bSdzIGRlcGVuZGVuY2llcywgZS5nLiAn
KHN5bSB8fCBRKSAmJiBSJyB3aGVuIHN5bQ0KICAgIC0JCQkgKiBkZXBlbmRzIG9uIFIuDQogICAg
LQkJCSAqDQogICAgLQkJCSAqIE5vdGUgdGhhdCAnUicgbWlnaHQgYmUgZnJvbSBhbiBlbmNsb3Np
bmcgbWVudSBvciBpZiwNCiAgICAtCQkJICogbWFraW5nIHRoaXMgYSBtb3JlIGNvbW1vbiBjYXNl
IHRoYW4gaXQgbWlnaHQgc2VlbS4NCiAgICAtCQkJICovDQogICAgLQkJCWRlcCA9IGV4cHJfdHJh
bnNfY29tcGFyZShkZXAsIEVfVU5FUVVBTCwgJnN5bWJvbF9ubyk7DQogICAgLQkJCWRlcCA9IGV4
cHJfZWxpbWluYXRlX2R1cHMoZXhwcl90cmFuc2Zvcm0oZGVwKSk7DQogICAgLQkJCWRlcDIgPSBl
eHByX2NvcHkoYmFzZWRlcCk7DQogICAgLQkJCWV4cHJfZWxpbWluYXRlX2VxKCZkZXAsICZkZXAy
KTsNCiAgICAtCQkJZXhwcl9mcmVlKGRlcCk7DQogICAgLQkJCWlmICghZXhwcl9pc195ZXMoZGVw
MikpIHsNCiAgICAtCQkJCS8qIE5vdCBzdXBlcnNldCwgcXVpdCAqLw0KICAgIC0JCQkJZXhwcl9m
cmVlKGRlcDIpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQkJLyogU3VwZXJz
ZXQsIHB1dCBpbiBzdWJtZW51ICovDQogICAgLQkJCWV4cHJfZnJlZShkZXAyKTsNCiAgICAtCQlu
ZXh0Og0KICAgIC0JCQltZW51X2ZpbmFsaXplKG1lbnUpOw0KICAgIC0JCQltZW51LT5wYXJlbnQg
PSBwYXJlbnQ7DQogICAgLQkJCWxhc3RfbWVudSA9IG1lbnU7DQogICAgLQkJfQ0KICAgIC0JCWV4
cHJfZnJlZShiYXNlZGVwKTsNCiAgICAtCQlpZiAobGFzdF9tZW51KSB7DQogICAgLQkJCXBhcmVu
dC0+bGlzdCA9IHBhcmVudC0+bmV4dDsNCiAgICAtCQkJcGFyZW50LT5uZXh0ID0gbGFzdF9tZW51
LT5uZXh0Ow0KICAgIC0JCQlsYXN0X21lbnUtPm5leHQgPSBOVUxMOw0KICAgIC0JCX0NCiAgICAt
DQogICAgLQkJc3ltLT5kaXJfZGVwLmV4cHIgPSBleHByX2FsbG9jX29yKHN5bS0+ZGlyX2RlcC5l
eHByLCBwYXJlbnQtPmRlcCk7DQogICAgLQl9DQogICAgLQlmb3IgKG1lbnUgPSBwYXJlbnQtPmxp
c3Q7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7DQogICAgLQkJaWYgKHN5bSAmJiBzeW1faXNf
Y2hvaWNlKHN5bSkgJiYNCiAgICAtCQkgICAgbWVudS0+c3ltICYmICFzeW1faXNfY2hvaWNlX3Zh
bHVlKG1lbnUtPnN5bSkpIHsNCiAgICAtCQkJY3VycmVudF9lbnRyeSA9IG1lbnU7DQogICAgLQkJ
CW1lbnUtPnN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0NIT0lDRVZBTDsNCiAgICAtCQkJaWYgKCFtZW51
LT5wcm9tcHQpDQogICAgLQkJCQltZW51X3dhcm4obWVudSwgImNob2ljZSB2YWx1ZSBtdXN0IGhh
dmUgYSBwcm9tcHQiKTsNCiAgICAtCQkJZm9yIChwcm9wID0gbWVudS0+c3ltLT5wcm9wOyBwcm9w
OyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgIC0JCQkJaWYgKHByb3AtPnR5cGUgPT0gUF9ERUZB
VUxUKQ0KICAgIC0JCQkJCXByb3Bfd2Fybihwcm9wLCAiZGVmYXVsdHMgZm9yIGNob2ljZSAiDQog
ICAgLQkJCQkJCSAgInZhbHVlcyBub3Qgc3VwcG9ydGVkIik7DQogICAgLQkJCQlpZiAocHJvcC0+
bWVudSA9PSBtZW51KQ0KICAgIC0JCQkJCWNvbnRpbnVlOw0KICAgIC0JCQkJaWYgKHByb3AtPnR5
cGUgPT0gUF9QUk9NUFQgJiYNCiAgICAtCQkJCSAgICBwcm9wLT5tZW51LT5wYXJlbnQtPnN5bSAh
PSBzeW0pDQogICAgLQkJCQkJcHJvcF93YXJuKHByb3AsICJjaG9pY2UgdmFsdWUgdXNlZCBvdXRz
aWRlIGl0cyBjaG9pY2UgZ3JvdXAiKTsNCiAgICAtCQkJfQ0KICAgIC0JCQkvKiBOb24tdHJpc3Rh
dGUgY2hvaWNlIHZhbHVlcyBvZiB0cmlzdGF0ZSBjaG9pY2VzIG11c3QNCiAgICAtCQkJICogZGVw
ZW5kIG9uIHRoZSBjaG9pY2UgYmVpbmcgc2V0IHRvIFkuIFRoZSBjaG9pY2UNCiAgICAtCQkJICog
dmFsdWVzJyBkZXBlbmRlbmNpZXMgd2VyZSBwcm9wYWdhdGVkIHRvIHRoZWlyDQogICAgLQkJCSAq
IHByb3BlcnRpZXMgYWJvdmUsIHNvIHRoZSBjaGFuZ2UgaGVyZSBtdXN0IGJlIHJlLQ0KICAgIC0J
CQkgKiBwcm9wYWdhdGVkLg0KICAgIC0JCQkgKi8NCiAgICAtCQkJaWYgKHN5bS0+dHlwZSA9PSBT
X1RSSVNUQVRFICYmIG1lbnUtPnN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFKSB7DQogICAgLQkJCQli
YXNlZGVwID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bSwgJnN5bWJvbF95ZXMpOw0KICAg
IC0JCQkJbWVudS0+ZGVwID0gZXhwcl9hbGxvY19hbmQoYmFzZWRlcCwgbWVudS0+ZGVwKTsNCiAg
ICAtCQkJCWZvciAocHJvcCA9IG1lbnUtPnN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5l
eHQpIHsNCiAgICAtCQkJCQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQ0KICAgIC0JCQkJCQljb250
aW51ZTsNCiAgICAtCQkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBleHByX2FsbG9jX2FuZChleHBy
X2NvcHkoYmFzZWRlcCksDQogICAgLQkJCQkJCQkJCSAgICBwcm9wLT52aXNpYmxlLmV4cHIpOw0K
ICAgIC0JCQkJfQ0KICAgIC0JCQl9DQogICAgLQkJCW1lbnVfYWRkX3N5bWJvbChQX0NIT0lDRSwg
c3ltLCBOVUxMKTsNCiAgICAtCQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsNCiAg
ICAtCQkJZm9yIChlcCA9ICZwcm9wLT5leHByOyAqZXA7IGVwID0gJigqZXApLT5sZWZ0LmV4cHIp
DQogICAgLQkJCQk7DQogICAgLQkJCSplcCA9IGV4cHJfYWxsb2Nfb25lKEVfTElTVCwgTlVMTCk7
DQogICAgLQkJCSgqZXApLT5yaWdodC5zeW0gPSBtZW51LT5zeW07DQogICAgLQkJfQ0KICAgIC0N
CiAgICAtCQkvKg0KICAgIC0JCSAqIFRoaXMgY29kZSBzZXJ2ZXMgdHdvIHB1cnBvc2VzOg0KICAg
IC0JCSAqDQogICAgLQkJICogKDEpIEZsYXR0ZW5pbmcgJ2lmJyBibG9ja3MsIHdoaWNoIGRvIG5v
dCBzcGVjaWZ5IGEgc3VibWVudQ0KICAgIC0JCSAqICAgICBhbmQgb25seSBhZGQgZGVwZW5kZW5j
aWVzLg0KICAgIC0JCSAqDQogICAgLQkJICogICAgIChBdXRvbWF0aWMgc3VibWVudSBjcmVhdGlv
biBtaWdodCBzdGlsbCBjcmVhdGUgYSBzdWJtZW51DQogICAgLQkJICogICAgIGZyb20gYW4gJ2lm
JyBiZWZvcmUgdGhpcyBjb2RlIHJ1bnMuKQ0KICAgIC0JCSAqDQogICAgLQkJICogKDIpICJVbmRv
aW5nIiBhbnkgYXV0b21hdGljIHN1Ym1lbnVzIGNyZWF0ZWQgZWFybGllciBiZWxvdw0KICAgIC0J
CSAqICAgICBwcm9tcHRsZXNzIHN5bWJvbHMuDQogICAgLQkJICoNCiAgICAtCQkgKiBCZWZvcmU6
DQogICAgLQkJICoNCiAgICAtCQkgKglBDQogICAgLQkJICoJaWYgLi4uIChvciBwcm9tcHRsZXNz
IHN5bWJvbCkNCiAgICAtCQkgKgkgKy1CDQogICAgLQkJICoJICstQw0KICAgIC0JCSAqCUQNCiAg
ICAtCQkgKg0KICAgIC0JCSAqIEFmdGVyOg0KICAgIC0JCSAqDQogICAgLQkJICoJQQ0KICAgIC0J
CSAqCWlmIC4uLiAob3IgcHJvbXB0bGVzcyBzeW1ib2wpDQogICAgLQkJICoJQg0KICAgIC0JCSAq
CUMNCiAgICAtCQkgKglEDQogICAgLQkJICovDQogICAgLQkJaWYgKG1lbnUtPmxpc3QgJiYgKCFt
ZW51LT5wcm9tcHQgfHwgIW1lbnUtPnByb21wdC0+dGV4dCkpIHsNCiAgICAtCQkJZm9yIChsYXN0
X21lbnUgPSBtZW51LT5saXN0OyA7IGxhc3RfbWVudSA9IGxhc3RfbWVudS0+bmV4dCkgew0KICAg
IC0JCQkJbGFzdF9tZW51LT5wYXJlbnQgPSBwYXJlbnQ7DQogICAgLQkJCQlpZiAoIWxhc3RfbWVu
dS0+bmV4dCkNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCQlsYXN0X21lbnUt
Pm5leHQgPSBtZW51LT5uZXh0Ow0KICAgIC0JCQltZW51LT5uZXh0ID0gbWVudS0+bGlzdDsNCiAg
ICAtCQkJbWVudS0+bGlzdCA9IE5VTEw7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAt
CWlmIChzeW0gJiYgIShzeW0tPmZsYWdzICYgU1lNQk9MX1dBUk5FRCkpIHsNCiAgICAtCQlpZiAo
c3ltLT50eXBlID09IFNfVU5LTk9XTikNCiAgICAtCQkJbWVudV93YXJuKHBhcmVudCwgImNvbmZp
ZyBzeW1ib2wgZGVmaW5lZCB3aXRob3V0IHR5cGUiKTsNCiAgICAtDQogICAgLQkJaWYgKHN5bV9p
c19jaG9pY2Uoc3ltKSAmJiAhcGFyZW50LT5wcm9tcHQpDQogICAgLQkJCW1lbnVfd2FybihwYXJl
bnQsICJjaG9pY2UgbXVzdCBoYXZlIGEgcHJvbXB0Iik7DQogICAgLQ0KICAgIC0JCS8qIENoZWNr
IHByb3BlcnRpZXMgY29ubmVjdGVkIHRvIHRoaXMgc3ltYm9sICovDQogICAgLQkJc3ltX2NoZWNr
X3Byb3Aoc3ltKTsNCiAgICAtCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9XQVJORUQ7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAqIEZvciBub24tb3B0aW9uYWwgY2hvaWNlcywgYWRk
IGEgcmV2ZXJzZSBkZXBlbmRlbmN5IChjb3JyZXNwb25kaW5nIHRvDQogICAgLQkgKiBhIHNlbGVj
dCkgb2YgJzx2aXNpYmlsaXR5PiAmJiBtJy4gVGhpcyBwcmV2ZW50cyB0aGUgdXNlciBmcm9tDQog
ICAgLQkgKiBzZXR0aW5nIHRoZSBjaG9pY2UgbW9kZSB0byAnbicgd2hlbiB0aGUgY2hvaWNlIGlz
IHZpc2libGUuDQogICAgLQkgKg0KICAgIC0JICogVGhpcyB3b3VsZCBhbHNvIHdvcmsgZm9yIG5v
bi1jaG9pY2Ugc3ltYm9scywgYnV0IG9ubHkgbm9uLW9wdGlvbmFsDQogICAgLQkgKiBjaG9pY2Vz
IGNsZWFyIFNZTUJPTF9PUFRJT05BTCBhcyBvZiB3cml0aW5nLiBDaG9pY2VzIGFyZSBpbXBsZW1l
bnRlZA0KICAgIC0JICogYXMgYSB0eXBlIG9mIHN5bWJvbC4NCiAgICAtCSAqLw0KICAgIC0JaWYg
KHN5bSAmJiAhc3ltX2lzX29wdGlvbmFsKHN5bSkgJiYgcGFyZW50LT5wcm9tcHQpIHsNCiAgICAt
CQlzeW0tPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5yZXZfZGVwLmV4cHIsDQog
ICAgLQkJCQlleHByX2FsbG9jX2FuZChwYXJlbnQtPnByb21wdC0+dmlzaWJsZS5leHByLA0KICAg
IC0JCQkJCWV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbW9kKSkpOw0KICAgIC0JfQ0KICAgIC19
DQogICAgLQ0KICAgIC1ib29sIG1lbnVfaGFzX3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkNCiAg
ICAtew0KICAgIC0JaWYgKCFtZW51LT5wcm9tcHQpDQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAg
IC0JcmV0dXJuIHRydWU7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIERldGVybWlu
ZSBpZiBhIG1lbnUgaXMgZW1wdHkuDQogICAgLSAqIEEgbWVudSBpcyBjb25zaWRlcmVkIGVtcHR5
IGlmIGl0IGNvbnRhaW5zIG5vIG9yIG9ubHkNCiAgICAtICogaW52aXNpYmxlIGVudHJpZXMuDQog
ICAgLSAqLw0KICAgIC1ib29sIG1lbnVfaXNfZW1wdHkoc3RydWN0IG1lbnUgKm1lbnUpDQogICAg
LXsNCiAgICAtCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtDQogICAgLQlmb3IgKGNoaWxkID0g
bWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICAtCQlpZiAobWVu
dV9pc192aXNpYmxlKGNoaWxkKSkNCiAgICAtCQkJcmV0dXJuKGZhbHNlKTsNCiAgICAtCX0NCiAg
ICAtCXJldHVybih0cnVlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBtZW51X2lzX3Zpc2li
bGUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51ICpjaGlsZDsN
CiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCXRyaXN0YXRlIHZpc2libGU7DQogICAg
LQ0KICAgIC0JaWYgKCFtZW51LT5wcm9tcHQpDQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0N
CiAgICAtCWlmIChtZW51LT52aXNpYmlsaXR5KSB7DQogICAgLQkJaWYgKGV4cHJfY2FsY192YWx1
ZShtZW51LT52aXNpYmlsaXR5KSA9PSBubykNCiAgICAtCQkJcmV0dXJuIGZhbHNlOw0KICAgIC0J
fQ0KICAgIC0NCiAgICAtCXN5bSA9IG1lbnUtPnN5bTsNCiAgICAtCWlmIChzeW0pIHsNCiAgICAt
CQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAgIC0JCXZpc2libGUgPSBtZW51LT5wcm9tcHQtPnZp
c2libGUudHJpOw0KICAgIC0JfSBlbHNlDQogICAgLQkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+
dmlzaWJsZS50cmkgPSBleHByX2NhbGNfdmFsdWUobWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIp
Ow0KICAgIC0NCiAgICAtCWlmICh2aXNpYmxlICE9IG5vKQ0KICAgIC0JCXJldHVybiB0cnVlOw0K
ICAgIC0NCiAgICAtCWlmICghc3ltIHx8IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUobWVudS0+c3lt
KSA9PSBubykNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQ0KICAgIC0JZm9yIChjaGlsZCA9
IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgLQkJaWYgKG1l
bnVfaXNfdmlzaWJsZShjaGlsZCkpIHsNCiAgICAtCQkJaWYgKHN5bSkNCiAgICAtCQkJCXN5bS0+
ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgIC0JCQlyZXR1cm4gdHJ1ZTsNCiAgICAtCQl9
DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIGZhbHNlOw0KICAgIC19DQogICAgLQ0KICAg
IC1jb25zdCBjaGFyICptZW51X2dldF9wcm9tcHQoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsN
CiAgICAtCWlmIChtZW51LT5wcm9tcHQpDQogICAgLQkJcmV0dXJuIG1lbnUtPnByb21wdC0+dGV4
dDsNCiAgICAtCWVsc2UgaWYgKG1lbnUtPnN5bSkNCiAgICAtCQlyZXR1cm4gbWVudS0+c3ltLT5u
YW1lOw0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBtZW51
ICptZW51X2dldF9yb290X21lbnUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCXJl
dHVybiAmcm9vdG1lbnU7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBtZW51ICptZW51X2dl
dF9wYXJlbnRfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0JZW51bSBwcm9w
X3R5cGUgdHlwZTsNCiAgICAtDQogICAgLQlmb3IgKDsgbWVudSAhPSAmcm9vdG1lbnU7IG1lbnUg
PSBtZW51LT5wYXJlbnQpIHsNCiAgICAtCQl0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJv
bXB0LT50eXBlIDogMDsNCiAgICAtCQlpZiAodHlwZSA9PSBQX01FTlUpDQogICAgLQkJCWJyZWFr
Ow0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIG1lbnU7DQogICAgLX0NCiAgICAtDQogICAgLWJvb2wg
bWVudV9oYXNfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0JcmV0dXJuIG1l
bnUtPmhlbHAgIT0gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtY29uc3QgY2hhciAqbWVudV9n
ZXRfaGVscChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0JaWYgKG1lbnUtPmhlbHAp
DQogICAgLQkJcmV0dXJuIG1lbnUtPmhlbHA7DQogICAgLQllbHNlDQogICAgLQkJcmV0dXJuICIi
Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBnZXRfcHJvbXB0X3N0cihzdHJ1Y3Qg
Z3N0ciAqciwgc3RydWN0IHByb3BlcnR5ICpwcm9wLA0KICAgIC0JCQkgICBzdHJ1Y3QgbGlzdF9o
ZWFkICpoZWFkKQ0KICAgIC17DQogICAgLQlpbnQgaSwgajsNCiAgICAtCXN0cnVjdCBtZW51ICpz
dWJtZW51WzhdLCAqbWVudSwgKmxvY2F0aW9uID0gTlVMTDsNCiAgICAtCXN0cnVjdCBqdW1wX2tl
eSAqanVtcCA9IE5VTEw7DQogICAgLQ0KICAgIC0Jc3RyX3ByaW50ZihyLCAiUHJvbXB0OiAlc1xu
IiwgcHJvcC0+dGV4dCk7DQogICAgLQltZW51ID0gcHJvcC0+bWVudS0+cGFyZW50Ow0KICAgIC0J
Zm9yIChpID0gMDsgbWVudSAhPSAmcm9vdG1lbnUgJiYgaSA8IDg7IG1lbnUgPSBtZW51LT5wYXJl
bnQpIHsNCiAgICAtCQlib29sIGFjY2Vzc2libGUgPSBtZW51X2lzX3Zpc2libGUobWVudSk7DQog
ICAgLQ0KICAgIC0JCXN1Ym1lbnVbaSsrXSA9IG1lbnU7DQogICAgLQkJaWYgKGxvY2F0aW9uID09
IE5VTEwgJiYgYWNjZXNzaWJsZSkNCiAgICAtCQkJbG9jYXRpb24gPSBtZW51Ow0KICAgIC0JfQ0K
ICAgIC0JaWYgKGhlYWQgJiYgbG9jYXRpb24pIHsNCiAgICAtCQlqdW1wID0geG1hbGxvYyhzaXpl
b2Yoc3RydWN0IGp1bXBfa2V5KSk7DQogICAgLQ0KICAgIC0JCWlmIChtZW51X2lzX3Zpc2libGUo
cHJvcC0+bWVudSkpIHsNCiAgICAtCQkJLyoNCiAgICAtCQkJICogVGhlcmUgaXMgbm90IGVub3Vn
aCByb29tIHRvIHB1dCB0aGUgaGludCBhdCB0aGUNCiAgICAtCQkJICogYmVnaW5uaW5nIG9mIHRo
ZSAiUHJvbXB0IiBsaW5lLiBQdXQgdGhlIGhpbnQgb24gdGhlDQogICAgLQkJCSAqIGxhc3QgIkxv
Y2F0aW9uIiBsaW5lIGV2ZW4gd2hlbiBpdCB3b3VsZCBiZWxvbmcgb24NCiAgICAtCQkJICogdGhl
IGZvcm1lci4NCiAgICAtCQkJICovDQogICAgLQkJCWp1bXAtPnRhcmdldCA9IHByb3AtPm1lbnU7
DQogICAgLQkJfSBlbHNlDQogICAgLQkJCWp1bXAtPnRhcmdldCA9IGxvY2F0aW9uOw0KICAgIC0N
CiAgICAtCQlpZiAobGlzdF9lbXB0eShoZWFkKSkNCiAgICAtCQkJanVtcC0+aW5kZXggPSAwOw0K
ICAgIC0JCWVsc2UNCiAgICAtCQkJanVtcC0+aW5kZXggPSBsaXN0X2VudHJ5KGhlYWQtPnByZXYs
IHN0cnVjdCBqdW1wX2tleSwNCiAgICAtCQkJCQkJIGVudHJpZXMpLT5pbmRleCArIDE7DQogICAg
LQ0KICAgIC0JCWxpc3RfYWRkX3RhaWwoJmp1bXAtPmVudHJpZXMsIGhlYWQpOw0KICAgIC0JfQ0K
ICAgIC0NCiAgICAtCWlmIChpID4gMCkgew0KICAgIC0JCXN0cl9wcmludGYociwgIiAgTG9jYXRp
b246XG4iKTsNCiAgICAtCQlmb3IgKGogPSA0OyAtLWkgPj0gMDsgaiArPSAyKSB7DQogICAgLQkJ
CW1lbnUgPSBzdWJtZW51W2ldOw0KICAgIC0JCQlpZiAoanVtcCAmJiBtZW51ID09IGxvY2F0aW9u
KQ0KICAgIC0JCQkJanVtcC0+b2Zmc2V0ID0gc3RybGVuKHItPnMpOw0KICAgIC0JCQlzdHJfcHJp
bnRmKHIsICIlKmMtPiAlcyIsIGosICcgJywNCiAgICAtCQkJCSAgIG1lbnVfZ2V0X3Byb21wdCht
ZW51KSk7DQogICAgLQkJCWlmIChtZW51LT5zeW0pIHsNCiAgICAtCQkJCXN0cl9wcmludGYociwg
IiAoJXMgWz0lc10pIiwgbWVudS0+c3ltLT5uYW1lID8NCiAgICAtCQkJCQltZW51LT5zeW0tPm5h
bWUgOiAiPGNob2ljZT4iLA0KICAgIC0JCQkJCXN5bV9nZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5
bSkpOw0KICAgIC0JCQl9DQogICAgLQkJCXN0cl9hcHBlbmQociwgIlxuIik7DQogICAgLQkJfQ0K
ICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBnZXQgcHJvcGVydHkgb2Yg
dHlwZSBQX1NZTUJPTA0KICAgIC0gKi8NCiAgICAtc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqZ2V0
X3N5bWJvbF9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHBy
b3BlcnR5ICpwcm9wID0gTlVMTDsNCiAgICAtDQogICAgLQlmb3JfYWxsX3Byb3BlcnRpZXMoc3lt
LCBwcm9wLCBQX1NZTUJPTCkNCiAgICAtCQlicmVhazsNCiAgICAtCXJldHVybiBwcm9wOw0KICAg
IC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBnZXRfc3ltYm9sX3Byb3BzX3N0cihzdHJ1Y3Qg
Z3N0ciAqciwgc3RydWN0IHN5bWJvbCAqc3ltLA0KICAgIC0JCQkJIGVudW0gcHJvcF90eXBlIHRv
aywgY29uc3QgY2hhciAqcHJlZml4KQ0KICAgIC17DQogICAgLQlib29sIGhpdCA9IGZhbHNlOw0K
ICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0NCiAgICAtCWZvcl9hbGxfcHJvcGVy
dGllcyhzeW0sIHByb3AsIHRvaykgew0KICAgIC0JCWlmICghaGl0KSB7DQogICAgLQkJCXN0cl9h
cHBlbmQociwgcHJlZml4KTsNCiAgICAtCQkJaGl0ID0gdHJ1ZTsNCiAgICAtCQl9IGVsc2UNCiAg
ICAtCQkJc3RyX3ByaW50ZihyLCAiICYmICIpOw0KICAgIC0JCWV4cHJfZ3N0cl9wcmludChwcm9w
LT5leHByLCByKTsNCiAgICAtCX0NCiAgICAtCWlmIChoaXQpDQogICAgLQkJc3RyX2FwcGVuZChy
LCAiXG4iKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogaGVhZCBpcyBvcHRpb25h
bCBhbmQgbWF5IGJlIE5VTEwNCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lkIGdldF9zeW1ib2xf
c3RyKHN0cnVjdCBnc3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sDQogICAgLQkJICAgIHN0cnVj
dCBsaXN0X2hlYWQgKmhlYWQpDQogICAgLXsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsN
CiAgICAtDQogICAgLQlpZiAoc3ltICYmIHN5bS0+bmFtZSkgew0KICAgIC0JCXN0cl9wcmludGYo
ciwgIlN5bWJvbDogJXMgWz0lc11cbiIsIHN5bS0+bmFtZSwNCiAgICAtCQkJICAgc3ltX2dldF9z
dHJpbmdfdmFsdWUoc3ltKSk7DQogICAgLQkJc3RyX3ByaW50ZihyLCAiVHlwZSAgOiAlc1xuIiwg
c3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsNCiAgICAtCQlpZiAoc3ltLT50eXBlID09IFNfSU5U
IHx8IHN5bS0+dHlwZSA9PSBTX0hFWCkgew0KICAgIC0JCQlwcm9wID0gc3ltX2dldF9yYW5nZV9w
cm9wKHN5bSk7DQogICAgLQkJCWlmIChwcm9wKSB7DQogICAgLQkJCQlzdHJfcHJpbnRmKHIsICJS
YW5nZSA6ICIpOw0KICAgIC0JCQkJZXhwcl9nc3RyX3ByaW50KHByb3AtPmV4cHIsIHIpOw0KICAg
IC0JCQkJc3RyX2FwcGVuZChyLCAiXG4iKTsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCX0N
CiAgICAtCWZvcl9hbGxfcHJvbXB0cyhzeW0sIHByb3ApDQogICAgLQkJZ2V0X3Byb21wdF9zdHIo
ciwgcHJvcCwgaGVhZCk7DQogICAgLQ0KICAgIC0JcHJvcCA9IGdldF9zeW1ib2xfcHJvcChzeW0p
Ow0KICAgIC0JaWYgKHByb3ApIHsNCiAgICAtCQlzdHJfcHJpbnRmKHIsICIgIERlZmluZWQgYXQg
JXM6JWRcbiIsIHByb3AtPm1lbnUtPmZpbGUtPm5hbWUsDQogICAgLQkJCXByb3AtPm1lbnUtPmxp
bmVubyk7DQogICAgLQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7DQog
ICAgLQkJCXN0cl9hcHBlbmQociwgIiAgRGVwZW5kcyBvbjogIik7DQogICAgLQkJCWV4cHJfZ3N0
cl9wcmludChwcm9wLT52aXNpYmxlLmV4cHIsIHIpOw0KICAgIC0JCQlzdHJfYXBwZW5kKHIsICJc
biIpOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLQlnZXRfc3ltYm9sX3Byb3BzX3N0
cihyLCBzeW0sIFBfU0VMRUNULCAiICBTZWxlY3RzOiAiKTsNCiAgICAtCWlmIChzeW0tPnJldl9k
ZXAuZXhwcikgew0KICAgIC0JCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5yZXZfZGVwLmV4
cHIsIHIsIHllcywgIiAgU2VsZWN0ZWQgYnkgW3ldOlxuIik7DQogICAgLQkJZXhwcl9nc3RyX3By
aW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwgciwgbW9kLCAiICBTZWxlY3RlZCBieSBbbV06
XG4iKTsNCiAgICAtCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCBy
LCBubywgIiAgU2VsZWN0ZWQgYnkgW25dOlxuIik7DQogICAgLQl9DQogICAgLQ0KICAgIC0JZ2V0
X3N5bWJvbF9wcm9wc19zdHIociwgc3ltLCBQX0lNUExZLCAiICBJbXBsaWVzOiAiKTsNCiAgICAt
CWlmIChzeW0tPmltcGxpZWQuZXhwcikgew0KICAgIC0JCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAo
c3ltLT5pbXBsaWVkLmV4cHIsIHIsIHllcywgIiAgSW1wbGllZCBieSBbeV06XG4iKTsNCiAgICAt
CQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+aW1wbGllZC5leHByLCByLCBtb2QsICIgIElt
cGxpZWQgYnkgW21dOlxuIik7DQogICAgLQkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPmlt
cGxpZWQuZXhwciwgciwgbm8sICIgIEltcGxpZWQgYnkgW25dOlxuIik7DQogICAgLQl9DQogICAg
LQ0KICAgIC0Jc3RyX2FwcGVuZChyLCAiXG5cbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1
Y3QgZ3N0ciBnZXRfcmVsYXRpb25zX3N0cihzdHJ1Y3Qgc3ltYm9sICoqc3ltX2Fyciwgc3RydWN0
IGxpc3RfaGVhZCAqaGVhZCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3ltOw0KICAg
IC0Jc3RydWN0IGdzdHIgcmVzID0gc3RyX25ldygpOw0KICAgIC0JaW50IGk7DQogICAgLQ0KICAg
IC0JZm9yIChpID0gMDsgc3ltX2FyciAmJiAoc3ltID0gc3ltX2FycltpXSk7IGkrKykNCiAgICAt
CQlnZXRfc3ltYm9sX3N0cigmcmVzLCBzeW0sIGhlYWQpOw0KICAgIC0JaWYgKCFpKQ0KICAgIC0J
CXN0cl9hcHBlbmQoJnJlcywgIk5vIG1hdGNoZXMgZm91bmQuXG4iKTsNCiAgICAtCXJldHVybiBy
ZXM7DQogICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC12b2lkIG1lbnVfZ2V0X2V4dF9oZWxwKHN0
cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCkNCiAgICAtew0KICAgIC0Jc3RydWN0
IHN5bWJvbCAqc3ltID0gbWVudS0+c3ltOw0KICAgIC0JY29uc3QgY2hhciAqaGVscF90ZXh0ID0g
bm9oZWxwX3RleHQ7DQogICAgLQ0KICAgIC0JaWYgKG1lbnVfaGFzX2hlbHAobWVudSkpIHsNCiAg
ICAtCQlpZiAoc3ltLT5uYW1lKQ0KICAgIC0JCQlzdHJfcHJpbnRmKGhlbHAsICIlcyVzOlxuXG4i
LCBDT05GSUdfLCBzeW0tPm5hbWUpOw0KICAgIC0JCWhlbHBfdGV4dCA9IG1lbnVfZ2V0X2hlbHAo
bWVudSk7DQogICAgLQl9DQogICAgLQlzdHJfcHJpbnRmKGhlbHAsICIlc1xuIiwgaGVscF90ZXh0
KTsNCiAgICAtCWlmIChzeW0pDQogICAgLQkJZ2V0X3N5bWJvbF9zdHIoaGVscCwgc3ltLCBOVUxM
KTsNCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L21lcmdlX2Nv
bmZpZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29uZmlnLnNoDQogICAgZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggZDkyNGM1MS4uMDAwMDAwMA0KICAgIC0tLSBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbWVyZ2VfY29uZmlnLnNoDQogICAgKysrIC9kZXYvbnVsbA0K
ICAgIEBAIC0xLDE4OSArMCwwIEBADQogICAgLSMhL2Jpbi9zaA0KICAgIC0jIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLSMNCiAgICAtIyAgbWVyZ2VfY29uZmlnLnNoIC0g
VGFrZXMgYSBsaXN0IG9mIGNvbmZpZyBmcmFnbWVudCB2YWx1ZXMsIGFuZCBtZXJnZXMNCiAgICAt
IyAgdGhlbSBvbmUgYnkgb25lLiBQcm92aWRlcyB3YXJuaW5ncyBvbiBvdmVycmlkZGVuIHZhbHVl
cywgYW5kIHNwZWNpZmllZA0KICAgIC0jICB2YWx1ZXMgdGhhdCBkaWQgbm90IG1ha2UgaXQgdG8g
dGhlIHJlc3VsdGluZyAuY29uZmlnIGZpbGUgKGR1ZSB0byBtaXNzZWQNCiAgICAtIyAgZGVwZW5k
ZW5jaWVzIG9yIGNvbmZpZyBzeW1ib2wgcmVtb3ZhbCkuDQogICAgLSMNCiAgICAtIyAgUG9ydGlv
bnMgcmV1c2VkIGZyb20ga2NvbmZfY2hlY2sgYW5kIGdlbmVyYXRlX2NmZzoNCiAgICAtIyAgaHR0
cDovL2dpdC55b2N0b3Byb2plY3Qub3JnL2NnaXQvY2dpdC5jZ2kveW9jdG8ta2VybmVsLXRvb2xz
L3RyZWUvdG9vbHMva2NvbmZfY2hlY2sNCiAgICAtIyAgaHR0cDovL2dpdC55b2N0b3Byb2plY3Qu
b3JnL2NnaXQvY2dpdC5jZ2kveW9jdG8ta2VybmVsLXRvb2xzL3RyZWUvdG9vbHMvZ2VuZXJhdGVf
Y2ZnDQogICAgLSMNCiAgICAtIyAgQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgV2luZCBSaXZlciBT
eXN0ZW1zLCBJbmMuDQogICAgLSMgIENvcHlyaWdodCAyMDExIExpbmFybw0KICAgIC0NCiAgICAt
Y2xlYW5fdXAoKSB7DQogICAgLQlybSAtZiAkVE1QX0ZJTEUNCiAgICAtCXJtIC1mICRNRVJHRV9G
SUxFDQogICAgLQlleGl0DQogICAgLX0NCiAgICAtdHJhcCBjbGVhbl91cCBIVVAgSU5UIFRFUk0N
CiAgICAtDQogICAgLXVzYWdlKCkgew0KICAgIC0JZWNobyAiVXNhZ2U6ICQwIFtPUFRJT05TXSBb
Q09ORklHIFsuLi5dXSINCiAgICAtCWVjaG8gIiAgLWggICAgZGlzcGxheSB0aGlzIGhlbHAgdGV4
dCINCiAgICAtCWVjaG8gIiAgLW0gICAgb25seSBtZXJnZSB0aGUgZnJhZ21lbnRzLCBkbyBub3Qg
ZXhlY3V0ZSB0aGUgbWFrZSBjb21tYW5kIg0KICAgIC0JZWNobyAiICAtbiAgICB1c2UgYWxsbm9j
b25maWcgaW5zdGVhZCBvZiBhbGxkZWZjb25maWciDQogICAgLQllY2hvICIgIC1yICAgIGxpc3Qg
cmVkdW5kYW50IGVudHJpZXMgd2hlbiBtZXJnaW5nIGZyYWdtZW50cyINCiAgICAtCWVjaG8gIiAg
LXkgICAgbWFrZSBidWlsdGluIGhhdmUgcHJlY2VkZW5jZSBvdmVyIG1vZHVsZXMiDQogICAgLQll
Y2hvICIgIC1PICAgIGRpciB0byBwdXQgZ2VuZXJhdGVkIG91dHB1dCBmaWxlcy4gIENvbnNpZGVy
IHNldHRpbmcgXCRLQ09ORklHX0NPTkZJRyBpbnN0ZWFkLiINCiAgICAtCWVjaG8NCiAgICAtCWVj
aG8gIlVzZWQgcHJlZml4OiAnJENPTkZJR19QUkVGSVgnLiBZb3UgY2FuIHJlZGVmaW5lIGl0IHdp
dGggXCRDT05GSUdfIGVudmlyb25tZW50IHZhcmlhYmxlLiINCiAgICAtfQ0KICAgIC0NCiAgICAt
UlVOTUFLRT10cnVlDQogICAgLUFMTFRBUkdFVD1hbGxkZWZjb25maWcNCiAgICAtV0FSTlJFRFVO
PWZhbHNlDQogICAgLUJVSUxUSU49ZmFsc2UNCiAgICAtT1VUUFVUPS4NCiAgICAtQ09ORklHX1BS
RUZJWD0ke0NPTkZJR18tQ09ORklHX30NCiAgICAtDQogICAgLXdoaWxlIHRydWU7IGRvDQogICAg
LQljYXNlICQxIGluDQogICAgLQkiLW4iKQ0KICAgIC0JCUFMTFRBUkdFVD1hbGxub2NvbmZpZw0K
ICAgIC0JCXNoaWZ0DQogICAgLQkJY29udGludWUNCiAgICAtCQk7Ow0KICAgIC0JIi1tIikNCiAg
ICAtCQlSVU5NQUtFPWZhbHNlDQogICAgLQkJc2hpZnQNCiAgICAtCQljb250aW51ZQ0KICAgIC0J
CTs7DQogICAgLQkiLWgiKQ0KICAgIC0JCXVzYWdlDQogICAgLQkJZXhpdA0KICAgIC0JCTs7DQog
ICAgLQkiLXIiKQ0KICAgIC0JCVdBUk5SRURVTj10cnVlDQogICAgLQkJc2hpZnQNCiAgICAtCQlj
b250aW51ZQ0KICAgIC0JCTs7DQogICAgLQkiLXkiKQ0KICAgIC0JCUJVSUxUSU49dHJ1ZQ0KICAg
IC0JCXNoaWZ0DQogICAgLQkJY29udGludWUNCiAgICAtCQk7Ow0KICAgIC0JIi1PIikNCiAgICAt
CQlpZiBbIC1kICQyIF07dGhlbg0KICAgIC0JCQlPVVRQVVQ9JChlY2hvICQyIHwgc2VkICdzL1wv
KiQvLycpDQogICAgLQkJZWxzZQ0KICAgIC0JCQllY2hvICJvdXRwdXQgZGlyZWN0b3J5ICQyIGRv
ZXMgbm90IGV4aXN0IiAxPiYyDQogICAgLQkJCWV4aXQgMQ0KICAgIC0JCWZpDQogICAgLQkJc2hp
ZnQgMg0KICAgIC0JCWNvbnRpbnVlDQogICAgLQkJOzsNCiAgICAtCSopDQogICAgLQkJYnJlYWsN
CiAgICAtCQk7Ow0KICAgIC0JZXNhYw0KICAgIC1kb25lDQogICAgLQ0KICAgIC1pZiBbICIkIyIg
LWx0IDEgXSA7IHRoZW4NCiAgICAtCXVzYWdlDQogICAgLQlleGl0DQogICAgLWZpDQogICAgLQ0K
ICAgIC1pZiBbIC16ICIkS0NPTkZJR19DT05GSUciIF07IHRoZW4NCiAgICAtCWlmIFsgIiRPVVRQ
VVQiICE9IC4gXTsgdGhlbg0KICAgIC0JCUtDT05GSUdfQ09ORklHPSQocmVhZGxpbmsgLW0gLS0g
IiRPVVRQVVQvLmNvbmZpZyIpDQogICAgLQllbHNlDQogICAgLQkJS0NPTkZJR19DT05GSUc9LmNv
bmZpZw0KICAgIC0JZmkNCiAgICAtZmkNCiAgICAtDQogICAgLUlOSVRGSUxFPSQxDQogICAgLXNo
aWZ0Ow0KICAgIC0NCiAgICAtaWYgWyAhIC1yICIkSU5JVEZJTEUiIF07IHRoZW4NCiAgICAtCWVj
aG8gIlRoZSBiYXNlIGZpbGUgJyRJTklURklMRScgZG9lcyBub3QgZXhpc3QuICBFeGl0LiIgPiYy
DQogICAgLQlleGl0IDENCiAgICAtZmkNCiAgICAtDQogICAgLU1FUkdFX0xJU1Q9JCoNCiAgICAt
U0VEX0NPTkZJR19FWFAxPSJzL15cKCR7Q09ORklHX1BSRUZJWH1bYS16QS1aMC05X10qXCk9Liov
XDEvcCINCiAgICAtU0VEX0NPTkZJR19FWFAyPSJzL14jIFwoJHtDT05GSUdfUFJFRklYfVthLXpB
LVowLTlfXSpcKSBpcyBub3Qgc2V0JC9cMS9wIg0KICAgIC0NCiAgICAtVE1QX0ZJTEU9JChta3Rl
bXAgLi8udG1wLmNvbmZpZy5YWFhYWFhYWFhYKQ0KICAgIC1NRVJHRV9GSUxFPSQobWt0ZW1wIC4v
Lm1lcmdlX3RtcC5jb25maWcuWFhYWFhYWFhYWCkNCiAgICAtDQogICAgLWVjaG8gIlVzaW5nICRJ
TklURklMRSBhcyBiYXNlIg0KICAgIC1jYXQgJElOSVRGSUxFID4gJFRNUF9GSUxFDQogICAgLQ0K
ICAgIC0jIE1lcmdlIGZpbGVzLCBwcmludGluZyB3YXJuaW5ncyBvbiBvdmVycmlkZGVuIHZhbHVl
cw0KICAgIC1mb3IgT1JJR19NRVJHRV9GSUxFIGluICRNRVJHRV9MSVNUIDsgZG8NCiAgICAtCWVj
aG8gIk1lcmdpbmcgJE9SSUdfTUVSR0VfRklMRSINCiAgICAtCWlmIFsgISAtciAiJE9SSUdfTUVS
R0VfRklMRSIgXTsgdGhlbg0KICAgIC0JCWVjaG8gIlRoZSBtZXJnZSBmaWxlICckT1JJR19NRVJH
RV9GSUxFJyBkb2VzIG5vdCBleGlzdC4gIEV4aXQuIiA+JjINCiAgICAtCQlleGl0IDENCiAgICAt
CWZpDQogICAgLQljYXQgJE9SSUdfTUVSR0VfRklMRSA+ICRNRVJHRV9GSUxFDQogICAgLQlDRkdf
TElTVD0kKHNlZCAtbiAtZSAiJFNFRF9DT05GSUdfRVhQMSIgLWUgIiRTRURfQ09ORklHX0VYUDIi
ICRNRVJHRV9GSUxFKQ0KICAgIC0NCiAgICAtCWZvciBDRkcgaW4gJENGR19MSVNUIDsgZG8NCiAg
ICAtCQlncmVwIC1xIC13ICRDRkcgJFRNUF9GSUxFIHx8IGNvbnRpbnVlDQogICAgLQkJUFJFVl9W
QUw9JChncmVwIC13ICRDRkcgJFRNUF9GSUxFKQ0KICAgIC0JCU5FV19WQUw9JChncmVwIC13ICRD
RkcgJE1FUkdFX0ZJTEUpDQogICAgLQkJQlVJTFRJTl9GTEFHPWZhbHNlDQogICAgLQkJaWYgWyAi
JEJVSUxUSU4iID0gInRydWUiIF0gJiYgWyAiJHtORVdfVkFMI0NPTkZJR18qPX0iID0gIm0iIF0g
JiYgWyAiJHtQUkVWX1ZBTCNDT05GSUdfKj19IiA9ICJ5IiBdOyB0aGVuDQogICAgLQkJCWVjaG8g
UHJldmlvdXMgIHZhbHVlOiAkUFJFVl9WQUwNCiAgICAtCQkJZWNobyBOZXcgdmFsdWU6ICAgICAg
ICRORVdfVkFMDQogICAgLQkJCWVjaG8gLXkgcGFzc2VkLCB3aWxsIG5vdCBkZW1vdGUgeSB0byBt
DQogICAgLQkJCWVjaG8NCiAgICAtCQkJQlVJTFRJTl9GTEFHPXRydWUNCiAgICAtCQllbGlmIFsg
IngkUFJFVl9WQUwiICE9ICJ4JE5FV19WQUwiIF0gOyB0aGVuDQogICAgLQkJCWVjaG8gVmFsdWUg
b2YgJENGRyBpcyByZWRlZmluZWQgYnkgZnJhZ21lbnQgJE9SSUdfTUVSR0VfRklMRToNCiAgICAt
CQkJZWNobyBQcmV2aW91cyAgdmFsdWU6ICRQUkVWX1ZBTA0KICAgIC0JCQllY2hvIE5ldyB2YWx1
ZTogICAgICAgJE5FV19WQUwNCiAgICAtCQkJZWNobw0KICAgIC0JCWVsaWYgWyAiJFdBUk5SRURV
TiIgPSAidHJ1ZSIgXTsgdGhlbg0KICAgIC0JCQllY2hvIFZhbHVlIG9mICRDRkcgaXMgcmVkdW5k
YW50IGJ5IGZyYWdtZW50ICRPUklHX01FUkdFX0ZJTEU6DQogICAgLQkJZmkNCiAgICAtCQlpZiBb
ICIkQlVJTFRJTl9GTEFHIiA9ICJmYWxzZSIgXTsgdGhlbg0KICAgIC0JCQlzZWQgLWkgIi8kQ0ZH
WyA9XS9kIiAkVE1QX0ZJTEUNCiAgICAtCQllbHNlDQogICAgLQkJCXNlZCAtaSAiLyRDRkdbID1d
L2QiICRNRVJHRV9GSUxFDQogICAgLQkJZmkNCiAgICAtCWRvbmUNCiAgICAtCWNhdCAkTUVSR0Vf
RklMRSA+PiAkVE1QX0ZJTEUNCiAgICAtZG9uZQ0KICAgIC0NCiAgICAtaWYgWyAiJFJVTk1BS0Ui
ID0gImZhbHNlIiBdOyB0aGVuDQogICAgLQljcCAtVCAtLSAiJFRNUF9GSUxFIiAiJEtDT05GSUdf
Q09ORklHIg0KICAgIC0JZWNobyAiIyINCiAgICAtCWVjaG8gIiMgbWVyZ2VkIGNvbmZpZ3VyYXRp
b24gd3JpdHRlbiB0byAkS0NPTkZJR19DT05GSUcgKG5lZWRzIG1ha2UpIg0KICAgIC0JZWNobyAi
IyINCiAgICAtCWNsZWFuX3VwDQogICAgLQlleGl0DQogICAgLWZpDQogICAgLQ0KICAgIC0jIElm
IHdlIGhhdmUgYW4gb3V0cHV0IGRpciwgc2V0dXAgdGhlIE89IGFyZ3VtZW50LCBvdGhlcndpc2Ug
bGVhdmUNCiAgICAtIyBpdCBibGFuaywgc2luY2UgTz0uIHdpbGwgY3JlYXRlIGFuIHVubmVjZXNz
YXJ5IC4vc291cmNlIHNvZnRsaW5rDQogICAgLU9VVFBVVF9BUkc9IiINCiAgICAtaWYgWyAiJE9V
VFBVVCIgIT0gIi4iIF0gOyB0aGVuDQogICAgLQlPVVRQVVRfQVJHPSJPPSRPVVRQVVQiDQogICAg
LWZpDQogICAgLQ0KICAgIC0NCiAgICAtIyBVc2UgdGhlIG1lcmdlZCBmaWxlIGFzIHRoZSBzdGFy
dGluZyBwb2ludCBmb3I6DQogICAgLSMgYWxsZGVmY29uZmlnOiBGaWxscyBpbiBhbnkgbWlzc2lu
ZyBzeW1ib2xzIHdpdGggS2NvbmZpZyBkZWZhdWx0DQogICAgLSMgYWxsbm9jb25maWc6IEZpbGxz
IGluIGFueSBtaXNzaW5nIHN5bWJvbHMgd2l0aCAjIENPTkZJR18qIGlzIG5vdCBzZXQNCiAgICAt
bWFrZSBLQ09ORklHX0FMTENPTkZJRz0kVE1QX0ZJTEUgJE9VVFBVVF9BUkcgJEFMTFRBUkdFVA0K
ICAgIC0NCiAgICAtDQogICAgLSMgQ2hlY2sgYWxsIHNwZWNpZmllZCBjb25maWcgdmFsdWVzIHRv
b2sgKG1pZ2h0IGhhdmUgbWlzc2VkLWRlcGVuZGVuY3kgaXNzdWVzKQ0KICAgIC1mb3IgQ0ZHIGlu
ICQoc2VkIC1uIC1lICIkU0VEX0NPTkZJR19FWFAxIiAtZSAiJFNFRF9DT05GSUdfRVhQMiIgJFRN
UF9GSUxFKTsgZG8NCiAgICAtDQogICAgLQlSRVFVRVNURURfVkFMPSQoZ3JlcCAtdyAtZSAiJENG
RyIgJFRNUF9GSUxFKQ0KICAgIC0JQUNUVUFMX1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICIkS0NP
TkZJR19DT05GSUciKQ0KICAgIC0JaWYgWyAieCRSRVFVRVNURURfVkFMIiAhPSAieCRBQ1RVQUxf
VkFMIiBdIDsgdGhlbg0KICAgIC0JCWVjaG8gIlZhbHVlIHJlcXVlc3RlZCBmb3IgJENGRyBub3Qg
aW4gZmluYWwgLmNvbmZpZyINCiAgICAtCQllY2hvICJSZXF1ZXN0ZWQgdmFsdWU6ICAkUkVRVUVT
VEVEX1ZBTCINCiAgICAtCQllY2hvICJBY3R1YWwgdmFsdWU6ICAgICAkQUNUVUFMX1ZBTCINCiAg
ICAtCQllY2hvICIiDQogICAgLQlmaQ0KICAgIC1kb25lDQogICAgLQ0KICAgIC1jbGVhbl91cA0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLWNmZy5zaCBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvbmNvbmYtY2ZnLnNoDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1
DQogICAgaW5kZXggMDAxNTU5ZS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvbmNvbmYtY2ZnLnNoDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDQ3ICswLDAgQEAN
CiAgICAtIyEvYmluL3NoDQogICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN
CiAgICAtDQogICAgLVBLRz0ibmN1cnNlc3cgbWVudXcgcGFuZWx3Ig0KICAgIC1QS0cyPSJuY3Vy
c2VzIG1lbnUgcGFuZWwiDQogICAgLQ0KICAgIC1pZiBbIC1uICIkKGNvbW1hbmQgLXYgcGtnLWNv
bmZpZykiIF07IHRoZW4NCiAgICAtCWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzsgdGhlbg0K
ICAgIC0JCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cpXCINCiAgICAt
CQllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCINCiAgICAtCQlleGl0IDAN
CiAgICAtCWZpDQogICAgLQ0KICAgIC0JaWYgcGtnLWNvbmZpZyAtLWV4aXN0cyAkUEtHMjsgdGhl
bg0KICAgIC0JCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiDQog
ICAgLQkJZWNobyBsaWJzPVwiJChwa2ctY29uZmlnIC0tbGlicyAkUEtHMilcIg0KICAgIC0JCWV4
aXQgMA0KICAgIC0JZmkNCiAgICAtZmkNCiAgICAtDQogICAgLSMgQ2hlY2sgdGhlIGRlZmF1bHQg
cGF0aHMgaW4gY2FzZSBwa2ctY29uZmlnIGlzIG5vdCBpbnN0YWxsZWQuDQogICAgLSMgKEV2ZW4g
aWYgaXQgaXMgaW5zdGFsbGVkLCBzb21lIGRpc3RyaWJ1dGlvbnMgc3VjaCBhcyBvcGVuU1VTRSBj
YW5ub3QNCiAgICAtIyBmaW5kIG5jdXJzZXMgYnkgcGtnLWNvbmZpZy4pDQogICAgLWlmIFsgLWYg
L3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMuaCBdOyB0aGVuDQogICAgLQllY2hvIGNmbGFn
cz1cIi1EX0dOVV9TT1VSQ0UgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3dcIg0KICAgIC0JZWNobyBs
aWJzPVwiLWxuY3Vyc2VzdyAtbG1lbnV3IC1scGFuZWx3XCINCiAgICAtCWV4aXQgMA0KICAgIC1m
aQ0KICAgIC0NCiAgICAtaWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy9uY3Vyc2VzLmggXTsg
dGhlbg0KICAgIC0JZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25j
dXJzZXNcIg0KICAgIC0JZWNobyBsaWJzPVwiLWxuY3Vyc2VzIC1sbWVudSAtbHBhbmVsXCINCiAg
ICAtCWV4aXQgMA0KICAgIC1maQ0KICAgIC0NCiAgICAtaWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1
cnNlcy5oIF07IHRoZW4NCiAgICAtCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRVwiDQogICAg
LQllY2hvIGxpYnM9XCItbG5jdXJzZXMgLWxtZW51IC1scGFuZWxcIg0KICAgIC0JZXhpdCAwDQog
ICAgLWZpDQogICAgLQ0KICAgIC1lY2hvID4mMiAiKiINCiAgICAtZWNobyA+JjIgIiogVW5hYmxl
IHRvIGZpbmQgdGhlIG5jdXJzZXMgcGFja2FnZS4iDQogICAgLWVjaG8gPiYyICIqIEluc3RhbGwg
bmN1cnNlcyAobmN1cnNlcy1kZXZlbCBvciBsaWJuY3Vyc2VzLWRldiINCiAgICAtZWNobyA+JjIg
IiogZGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJpYnV0aW9uKS4iDQogICAgLWVjaG8gPiYyICIqIg0K
ICAgIC1leGl0IDENCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5j
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0DQogICAgaW5kZXggZDNkOTA4Yy4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbmNvbmYuYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxNTU1ICswLDAgQEAN
CiAgICAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtLyoNCiAgICAt
ICogQ29weXJpZ2h0IChDKSAyMDA4IE5pciBUemFjaGFyIDxuaXIudHphY2hhckBnbWFpbC5jb20+
DQogICAgLSAqDQogICAgLSAqIERlcml2ZWQgZnJvbSBtZW51Y29uZmlnLg0KICAgIC0gKi8NCiAg
ICAtI2lmbmRlZiBfR05VX1NPVVJDRQ0KICAgIC0jZGVmaW5lIF9HTlVfU09VUkNFDQogICAgLSNl
bmRpZg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNpbmNsdWRlIDxzdGRsaWIuaD4N
CiAgICAtDQogICAgLSNpbmNsdWRlICJsa2MuaCINCiAgICAtI2luY2x1ZGUgIm5jb25mLmgiDQog
ICAgLSNpbmNsdWRlIDxjdHlwZS5oPg0KICAgIC0NCiAgICAtc3RhdGljIGNvbnN0IGNoYXIgbmNv
bmZfZ2xvYmFsX2hlbHBbXSA9DQogICAgLSJIZWxwIHdpbmRvd3NcbiINCiAgICAtIi0tLS0tLS0t
LS0tLVxuIg0KICAgIC0ibyAgR2xvYmFsIGhlbHA6ICBVbmxlc3MgaW4gYSBkYXRhIGVudHJ5IHdp
bmRvdywgcHJlc3NpbmcgPEYxPiB3aWxsIGdpdmUgXG4iDQogICAgLSIgICB5b3UgdGhlIGdsb2Jh
bCBoZWxwIHdpbmRvdywgd2hpY2ggeW91IGFyZSBqdXN0IHJlYWRpbmcuXG4iDQogICAgLSJcbiIN
CiAgICAtIm8gIEEgc2hvcnQgdmVyc2lvbiBvZiB0aGUgZ2xvYmFsIGhlbHAgaXMgYXZhaWxhYmxl
IGJ5IHByZXNzaW5nIDxGMz4uXG4iDQogICAgLSJcbiINCiAgICAtIm8gIExvY2FsIGhlbHA6ICBU
byBnZXQgaGVscCByZWxhdGVkIHRvIHRoZSBjdXJyZW50IG1lbnUgZW50cnksIHVzZSBhbnlcbiIN
CiAgICAtIiAgIG9mIDw/PiA8aD4sIG9yIGlmIGluIGEgZGF0YSBlbnRyeSB3aW5kb3cgdGhlbiBw
cmVzcyA8RjE+LlxuIg0KICAgIC0iXG4iDQogICAgLSJcbiINCiAgICAtIk1lbnUgZW50cmllc1xu
Ig0KICAgIC0iLS0tLS0tLS0tLS0tXG4iDQogICAgLSJUaGlzIGludGVyZmFjZSBsZXRzIHlvdSBz
ZWxlY3QgZmVhdHVyZXMgYW5kIHBhcmFtZXRlcnMgZm9yIHRoZSBrZXJuZWxcbiINCiAgICAtImJ1
aWxkLiAgVW5pa3JhZnQgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBzZWxlY3RlZCBvciBkZXNlbGVj
dGVkLlxuIg0KICAgIC0iUGFyYW1ldGVycyBtdXN0IGJlIGVudGVyZWQgYXMgdGV4dCBvciBkZWNp
bWFsIG9yIGhleGFkZWNpbWFsIG51bWJlcnMuXG4iDQogICAgLSJcbiINCiAgICAtIk1lbnUgZW50
cmllcyBiZWdpbm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0
aGF0XG4iDQogICAgLSIgIFsgXSAgY2FuIGJlIGJ1aWx0IGluIG9yIHJlbW92ZWRcbiINCiAgICAt
IiAgPCA+ICBjYW4gYmUgYnVpbHQgaW4sIG1vZHVsYXJpemVkIG9yIHJlbW92ZWRcbiINCiAgICAt
IiAgeyB9ICBjYW4gYmUgYnVpbHQgaW4gb3IgbW9kdWxhcml6ZWQsIGFyZSBzZWxlY3RlZCBieSBh
bm90aGVyIGZlYXR1cmVcbiINCiAgICAtIiAgLSAtICBhcmUgc2VsZWN0ZWQgYnkgYW5vdGhlciBm
ZWF0dXJlXG4iDQogICAgLSIgIFhYWCAgY2Fubm90IGJlIHNlbGVjdGVkLiAgU3ltYm9sIEluZm8g
PEYyPiB0ZWxscyB5b3Ugd2h5LlxuIg0KICAgIC0iKiwgTSBvciB3aGl0ZXNwYWNlIGluc2lkZSBi
cmFjZXMgbWVhbnMgdG8gYnVpbGQgaW4sIGJ1aWxkIGFzIGEgbW9kdWxlXG4iDQogICAgLSJvciB0
byBleGNsdWRlIHRoZSBmZWF0dXJlIHJlc3BlY3RpdmVseS5cbiINCiAgICAtIlxuIg0KICAgIC0i
VG8gY2hhbmdlIGFueSBvZiB0aGVzZSBmZWF0dXJlcywgaGlnaGxpZ2h0IGl0IHdpdGggdGhlIG1v
dmVtZW50IGtleXNcbiINCiAgICAtImxpc3RlZCBiZWxvdyBhbmQgcHJlc3MgPHk+IHRvIGJ1aWxk
IGl0IGluLCA8bT4gdG8gbWFrZSBpdCBhIG1vZHVsZSBvclxuIg0KICAgIC0iPG4+IHRvIHJlbW92
ZSBpdC4gIFlvdSBtYXkgcHJlc3MgdGhlIDxTcGFjZT4ga2V5IHRvIGN5Y2xlIHRocm91Z2ggdGhl
XG4iDQogICAgLSJhdmFpbGFibGUgb3B0aW9ucy5cbiINCiAgICAtIlxuIg0KICAgIC0iQSB0cmFp
bGluZyBcIi0tLT5cIiBkZXNpZ25hdGVzIGEgc3VibWVudSwgYSB0cmFpbGluZyBcIi0tLS1cIiBh
blxuIg0KICAgIC0iZW1wdHkgc3VibWVudS5cbiINCiAgICAtIlxuIg0KICAgIC0iTWVudSBuYXZp
Z2F0aW9uIGtleXNcbiINCiAgICAtIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAtIkxpbmV3aXNlIHVw
ICAgICAgICAgICAgICAgICA8VXA+XG4iDQogICAgLSJMaW5ld2lzZSBkb3duICAgICAgICAgICAg
ICAgPERvd24+XG4iDQogICAgLSJQYWdld2lzZSB1cCAgICAgICAgICAgICAgICAgPFBhZ2UgVXA+
XG4iDQogICAgLSJQYWdld2lzZSBkb3duICAgICAgICAgICAgICAgPFBhZ2UgRG93bj5cbiINCiAg
ICAtIkZpcnN0IGVudHJ5ICAgICAgICAgICAgICAgICA8SG9tZT5cbiINCiAgICAtIkxhc3QgZW50
cnkgICAgICAgICAgICAgICAgICA8RW5kPlxuIg0KICAgIC0iRW50ZXIgYSBzdWJtZW51ICAgICAg
ICAgICAgIDxSaWdodD4gIDxFbnRlcj5cbiINCiAgICAtIkdvIGJhY2sgdG8gcGFyZW50IG1lbnUg
ICAgICA8TGVmdD4gICA8RXNjPiAgPEY1PlxuIg0KICAgIC0iQ2xvc2UgYSBoZWxwIHdpbmRvdyAg
ICAgICAgIDxFbnRlcj4gIDxFc2M+ICA8RjU+XG4iDQogICAgLSJDbG9zZSBlbnRyeSB3aW5kb3cs
IGFwcGx5ICAgPEVudGVyPlxuIg0KICAgIC0iQ2xvc2UgZW50cnkgd2luZG93LCBmb3JnZXQgIDxF
c2M+ICA8RjU+XG4iDQogICAgLSJTdGFydCBpbmNyZW1lbnRhbCwgY2FzZS1pbnNlbnNpdGl2ZSBz
ZWFyY2ggZm9yIFNUUklORyBpbiBtZW51IGVudHJpZXMsXG4iDQogICAgLSIgICAgbm8gcmVnZXgg
c3VwcG9ydCwgU1RSSU5HIGlzIGRpc3BsYXllZCBpbiB1cHBlciBsZWZ0IGNvcm5lclxuIg0KICAg
IC0iICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvPlNUUklOR1xuIg0KICAgIC0iICAgIFJl
bW92ZSBsYXN0IGNoYXJhY3RlciAgIDxCYWNrc3BhY2U+XG4iDQogICAgLSIgICAgSnVtcCB0byBu
ZXh0IGhpdCAgICAgICAgPERvd24+XG4iDQogICAgLSIgICAgSnVtcCB0byBwcmV2aW91cyBoaXQg
ICAgPFVwPlxuIg0KICAgIC0iRXhpdCBtZW51IHNlYXJjaCBtb2RlICAgICAgIDwvPiAgPEVzYz5c
biINCiAgICAtIlNlYXJjaCBmb3IgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgd2l0aCBvciB3aXRo
b3V0IGxlYWRpbmcgQ09ORklHX1xuIg0KICAgIC0iICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDxGOD5SZWdFeHByPEVudGVyPlxuIg0KICAgIC0iVmVyYm9zZSBzZWFyY2ggaGVscCAgICAgICAg
IDxGOD48RjE+XG4iDQogICAgLSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgLSJcbiINCiAgICAtIlVu
bGVzcyBpbiBhIGRhdGEgZW50cnkgd2luZG93LCBrZXkgPDE+IG1heSBiZSB1c2VkIGluc3RlYWQg
b2YgPEYxPixcbiINCiAgICAtIjwyPiBpbnN0ZWFkIG9mIDxGMj4sIGV0Yy5cbiINCiAgICAtIlxu
Ig0KICAgIC0iXG4iDQogICAgLSJSYWRpb2xpc3QgKENob2ljZSBsaXN0KVxuIg0KICAgIC0iLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAtIlVzZSB0aGUgbW92ZW1lbnQga2V5cyBsaXN0
ZWQgYWJvdmUgdG8gc2VsZWN0IHRoZSBvcHRpb24geW91IHdpc2ggdG8gc2V0XG4iDQogICAgLSJh
bmQgcHJlc3MgPFNwYWNlPi5cbiINCiAgICAtIlxuIg0KICAgIC0iXG4iDQogICAgLSJEYXRhIGVu
dHJ5XG4iDQogICAgLSItLS0tLS0tLS0tXG4iDQogICAgLSJFbnRlciB0aGUgcmVxdWVzdGVkIGlu
Zm9ybWF0aW9uIGFuZCBwcmVzcyA8RW50ZXI+LiAgSGV4YWRlY2ltYWwgdmFsdWVzXG4iDQogICAg
LSJtYXkgYmUgZW50ZXJlZCB3aXRob3V0IHRoZSBcIjB4XCIgcHJlZml4LlxuIg0KICAgIC0iXG4i
DQogICAgLSJcbiINCiAgICAtIlRleHQgQm94IChIZWxwIFdpbmRvdylcbiINCiAgICAtIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICAtIlVzZSBtb3ZlbWVudCBrZXlzIGFzIGxpc3RlZCBp
biB0YWJsZSBhYm92ZS5cbiINCiAgICAtIlxuIg0KICAgIC0iUHJlc3MgYW55IG9mIDxFbnRlcj4g
PEVzYz4gPHE+IDxGNT4gPEY5PiB0byBleGl0LlxuIg0KICAgIC0iXG4iDQogICAgLSJcbiINCiAg
ICAtIkFsdGVybmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzXG4iDQogICAgLSItLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0ibmNvbmZpZyBzdXBwb3J0cyBzd2l0Y2hpbmcgYmV0
d2VlbiBkaWZmZXJlbnQgY29uZmlndXJhdGlvbnMuXG4iDQogICAgLSJQcmVzcyA8RjY+IHRvIHNh
dmUgeW91ciBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBQcmVzcyA8Rjc+IGFuZCBlbnRlclxuIg0K
ICAgIC0iYSBmaWxlIG5hbWUgdG8gbG9hZCBhIHByZXZpb3VzbHkgc2F2ZWQgY29uZmlndXJhdGlv
bi5cbiINCiAgICAtIlxuIg0KICAgIC0iXG4iDQogICAgLSJUZXJtaW5hbCBjb25maWd1cmF0aW9u
XG4iDQogICAgLSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgLSJJZiB5b3UgdXNlIG5j
b25maWcgaW4gYSB4dGVybSB3aW5kb3csIG1ha2Ugc3VyZSB5b3VyIFRFUk0gZW52aXJvbm1lbnRc
biINCiAgICAtInZhcmlhYmxlIHNwZWNpZmllcyBhIHRlcm1pbmFsIGNvbmZpZ3VyYXRpb24gd2hp
Y2ggc3VwcG9ydHMgYXQgbGVhc3RcbiINCiAgICAtIjE2IGNvbG9ycy4gIE90aGVyd2lzZSBuY29u
ZmlnIHdpbGwgbG9vayByYXRoZXIgYmFkLlxuIg0KICAgIC0iXG4iDQogICAgLSJJZiB0aGUgXCJz
dHR5IHNpemVcIiBjb21tYW5kIHJlcG9ydHMgdGhlIGN1cnJlbnQgdGVybWluYWxzaXplIGNvcnJl
Y3RseSxcbiINCiAgICAtIm5jb25maWcgd2lsbCBhZGFwdCB0byBzaXplcyBsYXJnZXIgdGhhbiB0
aGUgdHJhZGl0aW9uYWwgODB4MjUgXCJzdGFuZGFyZFwiXG4iDQogICAgLSJhbmQgZGlzcGxheSBs
b25nZXIgbWVudXMgcHJvcGVybHkuXG4iDQogICAgLSJcbiINCiAgICAtIlxuIg0KICAgIC0iU2lu
Z2xlIG1lbnUgbW9kZVxuIg0KICAgIC0iLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0iSWYgeW91
IHByZWZlciB0byBoYXZlIGFsbCBvZiB0aGUgbWVudSBlbnRyaWVzIGxpc3RlZCBpbiBhIHNpbmds
ZSBtZW51LFxuIg0KICAgIC0icmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgbXVsdGltZW51IGhpZXJh
cmNoeSwgcnVuIG5jb25maWcgd2l0aFxuIg0KICAgIC0iTkNPTkZJR19NT0RFIGVudmlyb25tZW50
IHZhcmlhYmxlIHNldCB0byBzaW5nbGVfbWVudS4gIEV4YW1wbGU6XG4iDQogICAgLSJcbiINCiAg
ICAtIm1ha2UgTkNPTkZJR19NT0RFPXNpbmdsZV9tZW51IG5jb25maWdcbiINCiAgICAtIlxuIg0K
ICAgIC0iPEVudGVyPiB3aWxsIHRoZW4gdW5mb2xkIHRoZSBhcHByb3ByaWF0ZSBjYXRlZ29yeSwg
b3IgZm9sZCBpdCBpZiBpdFxuIg0KICAgIC0iaXMgYWxyZWFkeSB1bmZvbGRlZC4gIEZvbGRlZCBt
ZW51IGVudHJpZXMgd2lsbCBiZSBkZXNpZ25hdGVkIGJ5IGFcbiINCiAgICAtImxlYWRpbmcgXCIr
Kz5cIiBhbmQgdW5mb2xkZWQgZW50cmllcyBieSBhIGxlYWRpbmcgXCItLT5cIi5cbiINCiAgICAt
IlxuIg0KICAgIC0iTm90ZSB0aGF0IHRoaXMgbW9kZSBjYW4gZXZlbnR1YWxseSBiZSBhIGxpdHRs
ZSBtb3JlIENQVSBleHBlbnNpdmUgdGhhblxuIg0KICAgIC0idGhlIGRlZmF1bHQgbW9kZSwgZXNw
ZWNpYWxseSB3aXRoIGEgbGFyZ2VyIG51bWJlciBvZiB1bmZvbGRlZCBzdWJtZW51cy5cbiINCiAg
ICAtIlxuIiwNCiAgICAtbWVudV9ub19mX2luc3RydWN0aW9uc1tdID0NCiAgICAtIkxlZ2VuZDog
IFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8ID4gbW9kdWxlIGNhcGFi
bGUuXG4iDQogICAgLSJTdWJtZW51cyBhcmUgZGVzaWduYXRlZCBieSBhIHRyYWlsaW5nIFwiLS0t
PlwiLCBlbXB0eSBvbmVzIGJ5IFwiLS0tLVwiLlxuIg0KICAgIC0iXG4iDQogICAgLSJVc2UgdGhl
IGZvbGxvd2luZyBrZXlzIHRvIG5hdmlnYXRlIHRoZSBtZW51czpcbiINCiAgICAtIk1vdmUgdXAg
b3IgZG93biB3aXRoIDxVcD4gYW5kIDxEb3duPi5cbiINCiAgICAtIkVudGVyIGEgc3VibWVudSB3
aXRoIDxFbnRlcj4gb3IgPFJpZ2h0Pi5cbiINCiAgICAtIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBw
YXJlbnQgbWVudSB3aXRoIDxFc2M+IG9yIDxMZWZ0Pi5cbiINCiAgICAtIlByZXNzaW5nIDx5PiBp
bmNsdWRlcywgPG4+IGV4Y2x1ZGVzLCA8bT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuXG4iDQogICAg
LSJQcmVzc2luZyA8U3BhY2U+IGN5Y2xlcyB0aHJvdWdoIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5c
biINCiAgICAtIlRvIHNlYXJjaCBmb3IgbWVudSBlbnRyaWVzIHByZXNzIDwvPi5cbiINCiAgICAt
IjxFc2M+IGFsd2F5cyBsZWF2ZXMgdGhlIGN1cnJlbnQgd2luZG93LlxuIg0KICAgIC0iXG4iDQog
ICAgLSJZb3UgZG8gbm90IGhhdmUgZnVuY3Rpb24ga2V5cyBzdXBwb3J0LlxuIg0KICAgIC0iUHJl
c3MgPDE+IGluc3RlYWQgb2YgPEYxPiwgPDI+IGluc3RlYWQgb2YgPEYyPiwgZXRjLlxuIg0KICAg
IC0iRm9yIHZlcmJvc2UgZ2xvYmFsIGhlbHAgdXNlIGtleSA8MT4uXG4iDQogICAgLSJGb3IgaGVs
cCByZWxhdGVkIHRvIHRoZSBjdXJyZW50IG1lbnUgZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiIs
DQogICAgLW1lbnVfaW5zdHJ1Y3Rpb25zW10gPQ0KICAgIC0iTGVnZW5kOiAgWypdIGJ1aWx0LWlu
ICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBtb2R1bGUgY2FwYWJsZS5cbiINCiAgICAt
IlN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IGEgdHJhaWxpbmcgXCItLS0+XCIsIGVtcHR5IG9u
ZXMgYnkgXCItLS0tXCIuXG4iDQogICAgLSJcbiINCiAgICAtIlVzZSB0aGUgZm9sbG93aW5nIGtl
eXMgdG8gbmF2aWdhdGUgdGhlIG1lbnVzOlxuIg0KICAgIC0iTW92ZSB1cCBvciBkb3duIHdpdGgg
PFVwPiBvciA8RG93bj4uXG4iDQogICAgLSJFbnRlciBhIHN1Ym1lbnUgd2l0aCA8RW50ZXI+IG9y
IDxSaWdodD4uXG4iDQogICAgLSJFeGl0IGEgc3VibWVudSB0byBpdHMgcGFyZW50IG1lbnUgd2l0
aCA8RXNjPiBvciA8TGVmdD4uXG4iDQogICAgLSJQcmVzc2luZyA8eT4gaW5jbHVkZXMsIDxuPiBl
eGNsdWRlcywgPG0+IG1vZHVsYXJpemVzIGZlYXR1cmVzLlxuIg0KICAgIC0iUHJlc3NpbmcgPFNw
YWNlPiBjeWNsZXMgdGhyb3VnaCB0aGUgYXZhaWxhYmxlIG9wdGlvbnMuXG4iDQogICAgLSJUbyBz
ZWFyY2ggZm9yIG1lbnUgZW50cmllcyBwcmVzcyA8Lz4uXG4iDQogICAgLSI8RXNjPiBhbHdheXMg
bGVhdmVzIHRoZSBjdXJyZW50IHdpbmRvdy5cbiINCiAgICAtIlxuIg0KICAgIC0iUHJlc3Npbmcg
PDE+IG1heSBiZSB1c2VkIGluc3RlYWQgb2YgPEYxPiwgPDI+IGluc3RlYWQgb2YgPEYyPiwgZXRj
LlxuIg0KICAgIC0iRm9yIHZlcmJvc2UgZ2xvYmFsIGhlbHAgcHJlc3MgPEYxPi5cbiINCiAgICAt
IkZvciBoZWxwIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBlbnRyeSBwcmVzcyA8Pz4gb3Ig
PGg+LlxuIiwNCiAgICAtcmFkaW9saXN0X2luc3RydWN0aW9uc1tdID0NCiAgICAtIlByZXNzIDxV
cD4sIDxEb3duPiwgPEhvbWU+IG9yIDxFbmQ+IHRvIG5hdmlnYXRlIGEgcmFkaW9saXN0LCBzZWxl
Y3RcbiINCiAgICAtIndpdGggPFNwYWNlPi5cbiINCiAgICAtIkZvciBoZWxwIHJlbGF0ZWQgdG8g
dGhlIGN1cnJlbnQgZW50cnkgcHJlc3MgPD8+IG9yIDxoPi5cbiINCiAgICAtIkZvciBnbG9iYWwg
aGVscCBwcmVzcyA8RjE+LlxuIiwNCiAgICAtaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2ludFtdID0N
CiAgICAtIlBsZWFzZSBlbnRlciBhIGRlY2ltYWwgdmFsdWUuXG4iDQogICAgLSJGcmFjdGlvbnMg
d2lsbCBub3QgYmUgYWNjZXB0ZWQuXG4iDQogICAgLSJQcmVzcyA8RW50ZXI+IHRvIGFwcGx5LCA8
RXNjPiB0byBjYW5jZWwuIiwNCiAgICAtaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleFtdID0NCiAg
ICAtIlBsZWFzZSBlbnRlciBhIGhleGFkZWNpbWFsIHZhbHVlLlxuIg0KICAgIC0iUHJlc3MgPEVu
dGVyPiB0byBhcHBseSwgPEVzYz4gdG8gY2FuY2VsLiIsDQogICAgLWlucHV0Ym94X2luc3RydWN0
aW9uc19zdHJpbmdbXSA9DQogICAgLSJQbGVhc2UgZW50ZXIgYSBzdHJpbmcgdmFsdWUuXG4iDQog
ICAgLSJQcmVzcyA8RW50ZXI+IHRvIGFwcGx5LCA8RXNjPiB0byBjYW5jZWwuIiwNCiAgICAtc2V0
bW9kX3RleHRbXSA9DQogICAgLSJUaGlzIGZlYXR1cmUgZGVwZW5kcyBvbiBhbm90aGVyIGZlYXR1
cmUgd2hpY2ggaGFzIGJlZW4gY29uZmlndXJlZCBhcyBhXG4iDQogICAgLSJtb2R1bGUuICBBcyBh
IHJlc3VsdCwgdGhlIGN1cnJlbnQgZmVhdHVyZSB3aWxsIGJlIGJ1aWx0IGFzIGEgbW9kdWxlIHRv
by4iLA0KICAgIC1sb2FkX2NvbmZpZ190ZXh0W10gPQ0KICAgIC0iRW50ZXIgdGhlIG5hbWUgb2Yg
dGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB5b3Ugd2lzaCB0byBsb2FkLlxuIg0KICAgIC0iQWNjZXB0
IHRoZSBuYW1lIHNob3duIHRvIHJlc3RvcmUgdGhlIGNvbmZpZ3VyYXRpb24geW91IGxhc3RcbiIN
CiAgICAtInJldHJpZXZlZC4gIExlYXZlIGVtcHR5IHRvIGFib3J0LiIsDQogICAgLWxvYWRfY29u
ZmlnX2hlbHBbXSA9DQogICAgLSJGb3IgdmFyaW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8g
a2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIg0KICAgIC0iY29uZmlndXJhdGlvbnMgYXZhaWxhYmxl
IG9uIGEgc2luZ2xlIG1hY2hpbmUuXG4iDQogICAgLSJcbiINCiAgICAtIklmIHlvdSBoYXZlIHNh
dmVkIGEgcHJldmlvdXMgY29uZmlndXJhdGlvbiBpbiBhIGZpbGUgb3RoZXIgdGhhbiB0aGVcbiIN
CiAgICAtImRlZmF1bHQgb25lLCBlbnRlcmluZyBpdHMgbmFtZSBoZXJlIHdpbGwgYWxsb3cgeW91
IHRvIGxvYWQgYW5kIG1vZGlmeVxuIg0KICAgIC0idGhhdCBjb25maWd1cmF0aW9uLlxuIg0KICAg
IC0iXG4iDQogICAgLSJMZWF2ZSBlbXB0eSB0byBhYm9ydC5cbiIsDQogICAgLXNhdmVfY29uZmln
X3RleHRbXSA9DQogICAgLSJFbnRlciBhIGZpbGVuYW1lIHRvIHdoaWNoIHRoaXMgY29uZmlndXJh
dGlvbiBzaG91bGQgYmUgc2F2ZWRcbiINCiAgICAtImFzIGFuIGFsdGVybmF0ZS4gIExlYXZlIGVt
cHR5IHRvIGFib3J0LiIsDQogICAgLXNhdmVfY29uZmlnX2hlbHBbXSA9DQogICAgLSJGb3IgdmFy
aW91cyByZWFzb25zLCBvbmUgbWF5IHdpc2ggdG8ga2VlcCBzZXZlcmFsIGRpZmZlcmVudFxuIg0K
ICAgIC0iY29uZmlndXJhdGlvbnMgYXZhaWxhYmxlIG9uIGEgc2luZ2xlIG1hY2hpbmUuXG4iDQog
ICAgLSJcbiINCiAgICAtIkVudGVyaW5nIGEgZmlsZSBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3Ug
dG8gbGF0ZXIgcmV0cmlldmUsIG1vZGlmeVxuIg0KICAgIC0iYW5kIHVzZSB0aGUgY3VycmVudCBj
b25maWd1cmF0aW9uIGFzIGFuIGFsdGVybmF0ZSB0byB3aGF0ZXZlclxuIg0KICAgIC0iY29uZmln
dXJhdGlvbiBvcHRpb25zIHlvdSBoYXZlIHNlbGVjdGVkIGF0IHRoYXQgdGltZS5cbiINCiAgICAt
IlxuIg0KICAgIC0iTGVhdmUgZW1wdHkgdG8gYWJvcnQuXG4iLA0KICAgIC1zZWFyY2hfaGVscFtd
ID0NCiAgICAtIlNlYXJjaCBmb3Igc3ltYm9scyAoY29uZmlndXJhdGlvbiB2YXJpYWJsZSBuYW1l
cyBDT05GSUdfKikgYW5kIGRpc3BsYXlcbiINCiAgICAtInRoZWlyIHJlbGF0aW9ucy4gIFJlZ3Vs
YXIgZXhwcmVzc2lvbnMgYXJlIHN1cHBvcnRlZC5cbiINCiAgICAtIkV4YW1wbGU6ICBTZWFyY2gg
Zm9yIFwiXkZPT1wiLlxuIg0KICAgIC0iUmVzdWx0OlxuIg0KICAgIC0iLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAg
ICAtIlN5bWJvbDogRk9PIFsgPSBtXVxuIg0KICAgIC0iUHJvbXB0OiBGb28gYnVzIGlzIHVzZWQg
dG8gZHJpdmUgdGhlIGJhciBIV1xuIg0KICAgIC0iRGVmaW5lZCBhdCBkcml2ZXJzL3BjaS9LY29u
ZmlnOjQ3XG4iDQogICAgLSJEZXBlbmRzIG9uOiBYODZfTE9DQUxfQVBJQyAmJiBYODZfSU9fQVBJ
QyB8fCBJQTY0XG4iDQogICAgLSJMb2NhdGlvbjpcbiINCiAgICAtIiAgLT4gQnVzIG9wdGlvbnMg
KFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EpXG4iDQogICAgLSIgICAgLT4gUENJIHN1cHBvcnQgKFBD
SSBbID0geV0pXG4iDQogICAgLSIgICAgICAtPiBQQ0kgYWNjZXNzIG1vZGUgKDxjaG9pY2U+IFsg
PSB5XSlcbiINCiAgICAtIlNlbGVjdHM6IExJQkNSQzMyXG4iDQogICAgLSJTZWxlY3RlZCBieTog
QkFSXG4iDQogICAgLSItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgIC0ibyAgVGhlIGxpbmUgJ1Byb21wdDonIHNo
b3dzIHRoZSB0ZXh0IGRpc3BsYXllZCBmb3IgdGhpcyBzeW1ib2wgaW5cbiINCiAgICAtIiAgIHRo
ZSBtZW51IGhpZXJhcmNoeS5cbiINCiAgICAtIm8gIFRoZSAnRGVmaW5lZCBhdCcgbGluZSB0ZWxs
cyBhdCB3aGF0IGZpbGUgLyBsaW5lIG51bWJlciB0aGUgc3ltYm9sIGlzXG4iDQogICAgLSIgICBk
ZWZpbmVkLlxuIg0KICAgIC0ibyAgVGhlICdEZXBlbmRzIG9uOicgbGluZSBsaXN0cyBzeW1ib2xz
IHRoYXQgbmVlZCB0byBiZSBkZWZpbmVkIGZvclxuIg0KICAgIC0iICAgdGhpcyBzeW1ib2wgdG8g
YmUgdmlzaWJsZSBhbmQgc2VsZWN0YWJsZSBpbiB0aGUgbWVudS5cbiINCiAgICAtIm8gIFRoZSAn
TG9jYXRpb246JyBsaW5lcyB0ZWxsLCB3aGVyZSBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgdGhpcyBz
eW1ib2xcbiINCiAgICAtIiAgIGlzIGxvY2F0ZWQuICBBIGxvY2F0aW9uIGZvbGxvd2VkIGJ5IGEg
WyA9IHldIGluZGljYXRlcyB0aGF0IHRoaXMgaXNcbiINCiAgICAtIiAgIGEgc2VsZWN0YWJsZSBt
ZW51IGl0ZW0sIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBpcyBkaXNwbGF5ZWQgaW5zaWRlXG4iDQog
ICAgLSIgICBicmFja2V0cy5cbiINCiAgICAtIm8gIFRoZSAnU2VsZWN0czonIGxpbmUgdGVsbHMs
IHdoYXQgc3ltYm9sIHdpbGwgYmUgYXV0b21hdGljYWxseSBzZWxlY3RlZFxuIg0KICAgIC0iICAg
aWYgdGhpcyBzeW1ib2wgaXMgc2VsZWN0ZWQgKHkgb3IgbSkuXG4iDQogICAgLSJvICBUaGUgJ1Nl
bGVjdGVkIGJ5JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9sIGhhcyBzZWxlY3RlZCB0aGlzIHN5bWJv
bC5cbiINCiAgICAtIlxuIg0KICAgIC0iT25seSByZWxldmFudCBsaW5lcyBhcmUgc2hvd24uXG4i
DQogICAgLSJcblxuIg0KICAgIC0iU2VhcmNoIGV4YW1wbGVzOlxuIg0KICAgIC0iVVNCICA9PiBm
aW5kIGFsbCBzeW1ib2xzIGNvbnRhaW5pbmcgVVNCXG4iDQogICAgLSJeVVNCID0+IGZpbmQgYWxs
IHN5bWJvbHMgc3RhcnRpbmcgd2l0aCBVU0JcbiINCiAgICAtIlVTQiQgPT4gZmluZCBhbGwgc3lt
Ym9scyBlbmRpbmcgd2l0aCBVU0JcbiINCiAgICAtIlxuIjsNCiAgICAtDQogICAgLXN0cnVjdCBt
aXRlbSB7DQogICAgLQljaGFyIHN0clsyNTZdOw0KICAgIC0JY2hhciB0YWc7DQogICAgLQl2b2lk
ICp1c3JwdHI7DQogICAgLQlpbnQgaXNfdmlzaWJsZTsNCiAgICAtfTsNCiAgICAtDQogICAgLSNk
ZWZpbmUgTUFYX01FTlVfSVRFTVMgNDA5Ng0KICAgIC1zdGF0aWMgaW50IHNob3dfYWxsX2l0ZW1z
Ow0KICAgIC1zdGF0aWMgaW50IGluZGVudDsNCiAgICAtc3RhdGljIHN0cnVjdCBtZW51ICpjdXJy
ZW50X21lbnU7DQogICAgLXN0YXRpYyBpbnQgY2hpbGRfY291bnQ7DQogICAgLXN0YXRpYyBpbnQg
c2luZ2xlX21lbnVfbW9kZTsNCiAgICAtLyogdGhlIHdpbmRvdyBpbiB3aGljaCBhbGwgaW5mb3Jt
YXRpb24gYXBwZWFycyAqLw0KICAgIC1zdGF0aWMgV0lORE9XICptYWluX3dpbmRvdzsNCiAgICAt
LyogdGhlIGxhcmdlc3Qgc2l6ZSBvZiB0aGUgbWVudSB3aW5kb3cgKi8NCiAgICAtc3RhdGljIGlu
dCBtd2luX21heF9saW5lczsNCiAgICAtc3RhdGljIGludCBtd2luX21heF9jb2xzOw0KICAgIC0v
KiB0aGUgd2luZG93IGluIHdoaWNoIHdlIHNob3cgb3B0aW9uIGJ1dHRvbnMgKi8NCiAgICAtc3Rh
dGljIE1FTlUgKmN1cnNlc19tZW51Ow0KICAgIC1zdGF0aWMgSVRFTSAqY3Vyc2VzX21lbnVfaXRl
bXNbTUFYX01FTlVfSVRFTVNdOw0KICAgIC1zdGF0aWMgc3RydWN0IG1pdGVtIGtfbWVudV9pdGVt
c1tNQVhfTUVOVV9JVEVNU107DQogICAgLXN0YXRpYyBpbnQgaXRlbXNfbnVtOw0KICAgIC1zdGF0
aWMgaW50IGdsb2JhbF9leGl0Ow0KICAgIC0vKiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGJ1dHRv
biAqLw0KICAgIC1zdGF0aWMgY29uc3QgY2hhciAqY3VycmVudF9pbnN0cnVjdGlvbnMgPSBtZW51
X2luc3RydWN0aW9uczsNCiAgICAtDQogICAgLXN0YXRpYyBjaGFyICpkaWFsb2dfaW5wdXRfcmVz
dWx0Ow0KICAgIC1zdGF0aWMgaW50IGRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuOw0KICAgIC0NCiAg
ICAtc3RhdGljIHZvaWQgY29uZihzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgLXN0YXRpYyB2b2lk
IGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtc3RhdGljIHZvaWQgY29uZl9z
dHJpbmcoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC1zdGF0aWMgdm9pZCBjb25mX2xvYWQodm9p
ZCk7DQogICAgLXN0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2b2lkKTsNCiAgICAtc3RhdGljIHZvaWQg
c2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAtc3RhdGljIGludCBkb19leGl0KHZv
aWQpOw0KICAgIC1zdGF0aWMgdm9pZCBzZXR1cF93aW5kb3dzKHZvaWQpOw0KICAgIC1zdGF0aWMg
dm9pZCBzZWFyY2hfY29uZih2b2lkKTsNCiAgICAtDQogICAgLXR5cGVkZWYgdm9pZCAoKmZ1bmN0
aW9uX2tleV9oYW5kbGVyX3QpKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgLXN0
YXRpYyB2b2lkIGhhbmRsZV9mMShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7
DQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mMihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJl
bnRfaXRlbSk7DQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mMyhpbnQgKmtleSwgc3RydWN0IG1l
bnUgKmN1cnJlbnRfaXRlbSk7DQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mNChpbnQgKmtleSwg
c3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7DQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mNShp
bnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7DQogICAgLXN0YXRpYyB2b2lkIGhh
bmRsZV9mNihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7DQogICAgLXN0YXRp
YyB2b2lkIGhhbmRsZV9mNyhpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSk7DQog
ICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mOChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRf
aXRlbSk7DQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mOShpbnQgKmtleSwgc3RydWN0IG1lbnUg
KmN1cnJlbnRfaXRlbSk7DQogICAgLQ0KICAgIC1zdHJ1Y3QgZnVuY3Rpb25fa2V5cyB7DQogICAg
LQljb25zdCBjaGFyICprZXlfc3RyOw0KICAgIC0JY29uc3QgY2hhciAqZnVuYzsNCiAgICAtCWZ1
bmN0aW9uX2tleSBrZXk7DQogICAgLQlmdW5jdGlvbl9rZXlfaGFuZGxlcl90IGhhbmRsZXI7DQog
ICAgLX07DQogICAgLQ0KICAgIC1zdGF0aWMgY29uc3QgaW50IGZ1bmN0aW9uX2tleXNfbnVtID0g
OTsNCiAgICAtc3RhdGljIHN0cnVjdCBmdW5jdGlvbl9rZXlzIGZ1bmN0aW9uX2tleXNbXSA9IHsN
CiAgICAtCXsNCiAgICAtCQkua2V5X3N0ciA9ICJGMSIsDQogICAgLQkJLmZ1bmMgPSAiSGVscCIs
DQogICAgLQkJLmtleSA9IEZfSEVMUCwNCiAgICAtCQkuaGFuZGxlciA9IGhhbmRsZV9mMSwNCiAg
ICAtCX0sDQogICAgLQl7DQogICAgLQkJLmtleV9zdHIgPSAiRjIiLA0KICAgIC0JCS5mdW5jID0g
IlN5bUluZm8iLA0KICAgIC0JCS5rZXkgPSBGX1NZTUJPTCwNCiAgICAtCQkuaGFuZGxlciA9IGhh
bmRsZV9mMiwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkJLmtleV9zdHIgPSAiRjMiLA0KICAg
IC0JCS5mdW5jID0gIkhlbHAgMiIsDQogICAgLQkJLmtleSA9IEZfSU5TVFMsDQogICAgLQkJLmhh
bmRsZXIgPSBoYW5kbGVfZjMsDQogICAgLQl9LA0KICAgIC0Jew0KICAgIC0JCS5rZXlfc3RyID0g
IkY0IiwNCiAgICAtCQkuZnVuYyA9ICJTaG93QWxsIiwNCiAgICAtCQkua2V5ID0gRl9DT05GLA0K
ICAgIC0JCS5oYW5kbGVyID0gaGFuZGxlX2Y0LA0KICAgIC0JfSwNCiAgICAtCXsNCiAgICAtCQku
a2V5X3N0ciA9ICJGNSIsDQogICAgLQkJLmZ1bmMgPSAiQmFjayIsDQogICAgLQkJLmtleSA9IEZf
QkFDSywNCiAgICAtCQkuaGFuZGxlciA9IGhhbmRsZV9mNSwNCiAgICAtCX0sDQogICAgLQl7DQog
ICAgLQkJLmtleV9zdHIgPSAiRjYiLA0KICAgIC0JCS5mdW5jID0gIlNhdmUiLA0KICAgIC0JCS5r
ZXkgPSBGX1NBVkUsDQogICAgLQkJLmhhbmRsZXIgPSBoYW5kbGVfZjYsDQogICAgLQl9LA0KICAg
IC0Jew0KICAgIC0JCS5rZXlfc3RyID0gIkY3IiwNCiAgICAtCQkuZnVuYyA9ICJMb2FkIiwNCiAg
ICAtCQkua2V5ID0gRl9MT0FELA0KICAgIC0JCS5oYW5kbGVyID0gaGFuZGxlX2Y3LA0KICAgIC0J
fSwNCiAgICAtCXsNCiAgICAtCQkua2V5X3N0ciA9ICJGOCIsDQogICAgLQkJLmZ1bmMgPSAiU3lt
U2VhcmNoIiwNCiAgICAtCQkua2V5ID0gRl9TRUFSQ0gsDQogICAgLQkJLmhhbmRsZXIgPSBoYW5k
bGVfZjgsDQogICAgLQl9LA0KICAgIC0Jew0KICAgIC0JCS5rZXlfc3RyID0gIkY5IiwNCiAgICAt
CQkuZnVuYyA9ICJFeGl0IiwNCiAgICAtCQkua2V5ID0gRl9FWElULA0KICAgIC0JCS5oYW5kbGVy
ID0gaGFuZGxlX2Y5LA0KICAgIC0JfSwNCiAgICAtfTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lk
IHByaW50X2Z1bmN0aW9uX2xpbmUodm9pZCkNCiAgICAtew0KICAgIC0JaW50IGk7DQogICAgLQlp
bnQgb2Zmc2V0ID0gMTsNCiAgICAtCWNvbnN0IGludCBza2lwID0gMTsNCiAgICAtCWludCBsaW5l
cyA9IGdldG1heHkoc3Rkc2NyKTsNCiAgICAtDQogICAgLQlmb3IgKGkgPSAwOyBpIDwgZnVuY3Rp
b25fa2V5c19udW07IGkrKykgew0KICAgIC0JCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywg
YXR0cmlidXRlc1tGVU5DVElPTl9ISUdITElHSFRdKTsNCiAgICAtCQltdndwcmludHcobWFpbl93
aW5kb3csIGxpbmVzLTMsIG9mZnNldCwNCiAgICAtCQkJCSIlcyIsDQogICAgLQkJCQlmdW5jdGlv
bl9rZXlzW2ldLmtleV9zdHIpOw0KICAgIC0JCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywg
YXR0cmlidXRlc1tGVU5DVElPTl9URVhUXSk7DQogICAgLQkJb2Zmc2V0ICs9IHN0cmxlbihmdW5j
dGlvbl9rZXlzW2ldLmtleV9zdHIpOw0KICAgIC0JCW12d3ByaW50dyhtYWluX3dpbmRvdywgbGlu
ZXMtMywNCiAgICAtCQkJCW9mZnNldCwgIiVzIiwNCiAgICAtCQkJCWZ1bmN0aW9uX2tleXNbaV0u
ZnVuYyk7DQogICAgLQkJb2Zmc2V0ICs9IHN0cmxlbihmdW5jdGlvbl9rZXlzW2ldLmZ1bmMpICsg
c2tpcDsNCiAgICAtCX0NCiAgICAtCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmli
dXRlc1tOT1JNQUxdKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogaGVscCAqLw0KICAgIC1zdGF0
aWMgdm9pZCBoYW5kbGVfZjEoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQog
ICAgLXsNCiAgICAtCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywNCiAgICAtCQkJIkdsb2Jh
bCBoZWxwIiwgbmNvbmZfZ2xvYmFsX2hlbHApOw0KICAgIC0JcmV0dXJuOw0KICAgIC19DQogICAg
LQ0KICAgIC0vKiBzeW1ib2xlIGhlbHAgKi8NCiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2YyKGlu
dCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0KICAgIC17DQogICAgLQlzaG93X2hl
bHAoY3VycmVudF9pdGVtKTsNCiAgICAtCXJldHVybjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyog
aW5zdHJ1Y3Rpb25zICovDQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mMyhpbnQgKmtleSwgc3Ry
dWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkNCiAgICAtew0KICAgIC0Jc2hvd19zY3JvbGxfd2luKG1h
aW5fd2luZG93LA0KICAgIC0JCQkiU2hvcnQgaGVscCIsDQogICAgLQkJCWN1cnJlbnRfaW5zdHJ1
Y3Rpb25zKTsNCiAgICAtCXJldHVybjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogY29uZmlnICov
DQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mNChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJl
bnRfaXRlbSkNCiAgICAtew0KICAgIC0JaW50IHJlcyA9IGJ0bl9kaWFsb2cobWFpbl93aW5kb3cs
DQogICAgLQkJCSJTaG93IGFsbCBzeW1ib2xzPyIsDQogICAgLQkJCTIsDQogICAgLQkJCSIgICA8
U2hvdyBBbGw+ICAgIiwNCiAgICAtCQkJIjxEb24ndCBzaG93IGFsbD4iKTsNCiAgICAtCWlmIChy
ZXMgPT0gMCkNCiAgICAtCQlzaG93X2FsbF9pdGVtcyA9IDE7DQogICAgLQllbHNlIGlmIChyZXMg
PT0gMSkNCiAgICAtCQlzaG93X2FsbF9pdGVtcyA9IDA7DQogICAgLQ0KICAgIC0JcmV0dXJuOw0K
ICAgIC19DQogICAgLQ0KICAgIC0vKiBiYWNrICovDQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9m
NShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkNCiAgICAtew0KICAgIC0JKmtl
eSA9IEtFWV9MRUZUOw0KICAgIC0JcmV0dXJuOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBzYXZl
ICovDQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mNihpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1
cnJlbnRfaXRlbSkNCiAgICAtew0KICAgIC0JY29uZl9zYXZlKCk7DQogICAgLQlyZXR1cm47DQog
ICAgLX0NCiAgICAtDQogICAgLS8qIGxvYWQgKi8NCiAgICAtc3RhdGljIHZvaWQgaGFuZGxlX2Y3
KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0KICAgIC17DQogICAgLQljb25m
X2xvYWQoKTsNCiAgICAtCXJldHVybjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogc2VhcmNoICov
DQogICAgLXN0YXRpYyB2b2lkIGhhbmRsZV9mOChpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJl
bnRfaXRlbSkNCiAgICAtew0KICAgIC0Jc2VhcmNoX2NvbmYoKTsNCiAgICAtCXJldHVybjsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtLyogZXhpdCAqLw0KICAgIC1zdGF0aWMgdm9pZCBoYW5kbGVfZjko
aW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgLXsNCiAgICAtCWRvX2V4
aXQoKTsNCiAgICAtCXJldHVybjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogcmV0dXJuICE9IDAg
dG8gaW5kaWNhdGUgdGhlIGtleSB3YXMgaGFuZGxlcyAqLw0KICAgIC1zdGF0aWMgaW50IHByb2Nl
c3Nfc3BlY2lhbF9rZXlzKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAg
IC0JaW50IGk7DQogICAgLQ0KICAgIC0JaWYgKCprZXkgPT0gS0VZX1JFU0laRSkgew0KICAgIC0J
CXNldHVwX3dpbmRvd3MoKTsNCiAgICAtCQlyZXR1cm4gMTsNCiAgICAtCX0NCiAgICAtDQogICAg
LQlmb3IgKGkgPSAwOyBpIDwgZnVuY3Rpb25fa2V5c19udW07IGkrKykgew0KICAgIC0JCWlmICgq
a2V5ID09IEtFWV9GKGZ1bmN0aW9uX2tleXNbaV0ua2V5KSB8fA0KICAgIC0JCSAgICAqa2V5ID09
ICcwJyArIGZ1bmN0aW9uX2tleXNbaV0ua2V5KXsNCiAgICAtCQkJZnVuY3Rpb25fa2V5c1tpXS5o
YW5kbGVyKGtleSwgbWVudSk7DQogICAgLQkJCXJldHVybiAxOw0KICAgIC0JCX0NCiAgICAtCX0N
CiAgICAtDQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQg
Y2xlYW5faXRlbXModm9pZCkNCiAgICAtew0KICAgIC0JaW50IGk7DQogICAgLQlmb3IgKGkgPSAw
OyBjdXJzZXNfbWVudV9pdGVtc1tpXTsgaSsrKQ0KICAgIC0JCWZyZWVfaXRlbShjdXJzZXNfbWVu
dV9pdGVtc1tpXSk7DQogICAgLQliemVybyhjdXJzZXNfbWVudV9pdGVtcywgc2l6ZW9mKGN1cnNl
c19tZW51X2l0ZW1zKSk7DQogICAgLQliemVybyhrX21lbnVfaXRlbXMsIHNpemVvZihrX21lbnVf
aXRlbXMpKTsNCiAgICAtCWl0ZW1zX251bSA9IDA7DQogICAgLX0NCiAgICAtDQogICAgLXR5cGVk
ZWYgZW51bSB7TUFUQ0hfVElOS0VSX1BBVFRFUk5fVVAsIE1BVENIX1RJTktFUl9QQVRURVJOX0RP
V04sDQogICAgLQlGSU5EX05FWFRfTUFUQ0hfRE9XTiwgRklORF9ORVhUX01BVENIX1VQfSBtYXRj
aF9mOw0KICAgIC0NCiAgICAtLyogcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCBpdGVt
LCBvciAtMSBpZiBubyBzdWNoIGl0ZW0gZXhpc3RzICovDQogICAgLXN0YXRpYyBpbnQgZ2V0X21l
eHRfbWF0Y2goY29uc3QgY2hhciAqbWF0Y2hfc3RyLCBtYXRjaF9mIGZsYWcpDQogICAgLXsNCiAg
ICAtCWludCBtYXRjaF9zdGFydCA9IGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKGN1cnNlc19tZW51
KSk7DQogICAgLQlpbnQgaW5kZXg7DQogICAgLQ0KICAgIC0JaWYgKGZsYWcgPT0gRklORF9ORVhU
X01BVENIX0RPV04pDQogICAgLQkJKyttYXRjaF9zdGFydDsNCiAgICAtCWVsc2UgaWYgKGZsYWcg
PT0gRklORF9ORVhUX01BVENIX1VQKQ0KICAgIC0JCS0tbWF0Y2hfc3RhcnQ7DQogICAgLQ0KICAg
IC0JaW5kZXggPSBtYXRjaF9zdGFydDsNCiAgICAtCWluZGV4ID0gKGluZGV4ICsgaXRlbXNfbnVt
KSAlIGl0ZW1zX251bTsNCiAgICAtCXdoaWxlICh0cnVlKSB7DQogICAgLQkJY2hhciAqc3RyID0g
a19tZW51X2l0ZW1zW2luZGV4XS5zdHI7DQogICAgLQkJaWYgKHN0cmNhc2VzdHIoc3RyLCBtYXRj
aF9zdHIpICE9IE5VTEwpDQogICAgLQkJCXJldHVybiBpbmRleDsNCiAgICAtCQlpZiAoZmxhZyA9
PSBGSU5EX05FWFRfTUFUQ0hfVVAgfHwNCiAgICAtCQkgICAgZmxhZyA9PSBNQVRDSF9USU5LRVJf
UEFUVEVSTl9VUCkNCiAgICAtCQkJLS1pbmRleDsNCiAgICAtCQllbHNlDQogICAgLQkJCSsraW5k
ZXg7DQogICAgLQkJaW5kZXggPSAoaW5kZXggKyBpdGVtc19udW0pICUgaXRlbXNfbnVtOw0KICAg
IC0JCWlmIChpbmRleCA9PSBtYXRjaF9zdGFydCkNCiAgICAtCQkJcmV0dXJuIC0xOw0KICAgIC0J
fQ0KICAgIC19DQogICAgLQ0KICAgIC0vKiBNYWtlIGEgbmV3IGl0ZW0uICovDQogICAgLXN0YXRp
YyB2b2lkIGl0ZW1fbWFrZShzdHJ1Y3QgbWVudSAqbWVudSwgY2hhciB0YWcsIGNvbnN0IGNoYXIg
KmZtdCwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0NCiAgICAtCWlmIChp
dGVtc19udW0gPiBNQVhfTUVOVV9JVEVNUy0xKQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAg
LQliemVybygma19tZW51X2l0ZW1zW2l0ZW1zX251bV0sIHNpemVvZihrX21lbnVfaXRlbXNbMF0p
KTsNCiAgICAtCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLnRhZyA9IHRhZzsNCiAgICAtCWtfbWVu
dV9pdGVtc1tpdGVtc19udW1dLnVzcnB0ciA9IG1lbnU7DQogICAgLQlpZiAobWVudSAhPSBOVUxM
KQ0KICAgIC0JCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLmlzX3Zpc2libGUgPQ0KICAgIC0JCQlt
ZW51X2lzX3Zpc2libGUobWVudSk7DQogICAgLQllbHNlDQogICAgLQkJa19tZW51X2l0ZW1zW2l0
ZW1zX251bV0uaXNfdmlzaWJsZSA9IDE7DQogICAgLQ0KICAgIC0JdmFfc3RhcnQoYXAsIGZtdCk7
DQogICAgLQl2c25wcmludGYoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyLA0KICAgIC0JCSAg
c2l6ZW9mKGtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciksDQogICAgLQkJICBmbXQsIGFwKTsN
CiAgICAtCXZhX2VuZChhcCk7DQogICAgLQ0KICAgIC0JaWYgKCFrX21lbnVfaXRlbXNbaXRlbXNf
bnVtXS5pc192aXNpYmxlKQ0KICAgIC0JCW1lbWNweShrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5z
dHIsICJYWFgiLCAzKTsNCiAgICAtDQogICAgLQljdXJzZXNfbWVudV9pdGVtc1tpdGVtc19udW1d
ID0gbmV3X2l0ZW0oDQogICAgLQkJCWtfbWVudV9pdGVtc1tpdGVtc19udW1dLnN0ciwNCiAgICAt
CQkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyKTsNCiAgICAtCXNldF9pdGVtX3VzZXJwdHIo
Y3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSwNCiAgICAtCQkJJmtfbWVudV9pdGVtc1tpdGVt
c19udW1dKTsNCiAgICAtCS8qDQogICAgLQlpZiAoIWtfbWVudV9pdGVtc1tpdGVtc19udW1dLmlz
X3Zpc2libGUpDQogICAgLQkJaXRlbV9vcHRzX29mZihjdXJzZXNfbWVudV9pdGVtc1tpdGVtc19u
dW1dLCBPX1NFTEVDVEFCTEUpOw0KICAgIC0JKi8NCiAgICAtDQogICAgLQlpdGVtc19udW0rKzsN
CiAgICAtCWN1cnNlc19tZW51X2l0ZW1zW2l0ZW1zX251bV0gPSBOVUxMOw0KICAgIC19DQogICAg
LQ0KICAgIC0vKiB2ZXJ5IGhhY2tpc2guIGFkZHMgYSBzdHJpbmcgdG8gdGhlIGxhc3QgaXRlbSBh
ZGRlZCAqLw0KICAgIC1zdGF0aWMgdm9pZCBpdGVtX2FkZF9zdHIoY29uc3QgY2hhciAqZm10LCAu
Li4pDQogICAgLXsNCiAgICAtCXZhX2xpc3QgYXA7DQogICAgLQlpbnQgaW5kZXggPSBpdGVtc19u
dW0tMTsNCiAgICAtCWNoYXIgbmV3X3N0clsyNTZdOw0KICAgIC0JY2hhciB0bXBfc3RyWzI1Nl07
DQogICAgLQ0KICAgIC0JaWYgKGluZGV4IDwgMCkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAg
IC0JdmFfc3RhcnQoYXAsIGZtdCk7DQogICAgLQl2c25wcmludGYobmV3X3N0ciwgc2l6ZW9mKG5l
d19zdHIpLCBmbXQsIGFwKTsNCiAgICAtCXZhX2VuZChhcCk7DQogICAgLQlzbnByaW50Zih0bXBf
c3RyLCBzaXplb2YodG1wX3N0ciksICIlcyVzIiwNCiAgICAtCQkJa19tZW51X2l0ZW1zW2luZGV4
XS5zdHIsIG5ld19zdHIpOw0KICAgIC0Jc3RybmNweShrX21lbnVfaXRlbXNbaW5kZXhdLnN0ciwN
CiAgICAtCQl0bXBfc3RyLA0KICAgIC0JCXNpemVvZihrX21lbnVfaXRlbXNbaW5kZXhdLnN0cikp
Ow0KICAgIC0NCiAgICAtCWZyZWVfaXRlbShjdXJzZXNfbWVudV9pdGVtc1tpbmRleF0pOw0KICAg
IC0JY3Vyc2VzX21lbnVfaXRlbXNbaW5kZXhdID0gbmV3X2l0ZW0oDQogICAgLQkJCWtfbWVudV9p
dGVtc1tpbmRleF0uc3RyLA0KICAgIC0JCQlrX21lbnVfaXRlbXNbaW5kZXhdLnN0cik7DQogICAg
LQlzZXRfaXRlbV91c2VycHRyKGN1cnNlc19tZW51X2l0ZW1zW2luZGV4XSwNCiAgICAtCQkJJmtf
bWVudV9pdGVtc1tpbmRleF0pOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBnZXQgdGhlIHRhZyBv
ZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW0gKi8NCiAgICAtc3RhdGljIGNoYXIgaXRlbV90
YWcodm9pZCkNCiAgICAtew0KICAgIC0JSVRFTSAqY3VyOw0KICAgIC0Jc3RydWN0IG1pdGVtICpt
Y3VyOw0KICAgIC0NCiAgICAtCWN1ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7DQogICAg
LQlpZiAoY3VyID09IE5VTEwpDQogICAgLQkJcmV0dXJuIDA7DQogICAgLQltY3VyID0gKHN0cnVj
dCBtaXRlbSAqKSBpdGVtX3VzZXJwdHIoY3VyKTsNCiAgICAtCXJldHVybiBtY3VyLT50YWc7DQog
ICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBpbnQgY3Vyc2VzX2l0ZW1faW5kZXgodm9pZCkNCiAg
ICAtew0KICAgIC0JcmV0dXJuICBpdGVtX2luZGV4KGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSkp
Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCAqaXRlbV9kYXRhKHZvaWQpDQogICAg
LXsNCiAgICAtCUlURU0gKmN1cjsNCiAgICAtCXN0cnVjdCBtaXRlbSAqbWN1cjsNCiAgICAtDQog
ICAgLQljdXIgPSBjdXJyZW50X2l0ZW0oY3Vyc2VzX21lbnUpOw0KICAgIC0JaWYgKCFjdXIpDQog
ICAgLQkJcmV0dXJuIE5VTEw7DQogICAgLQltY3VyID0gKHN0cnVjdCBtaXRlbSAqKSBpdGVtX3Vz
ZXJwdHIoY3VyKTsNCiAgICAtCXJldHVybiBtY3VyLT51c3JwdHI7DQogICAgLQ0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgaW50IGl0ZW1faXNfdGFnKGNoYXIgdGFnKQ0KICAgIC17DQogICAg
LQlyZXR1cm4gaXRlbV90YWcoKSA9PSB0YWc7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBj
aGFyIGZpbGVuYW1lW1BBVEhfTUFYKzFdOw0KICAgIC1zdGF0aWMgY2hhciBtZW51X2JhY2t0aXRs
ZVtQQVRIX01BWCsxMjhdOw0KICAgIC1zdGF0aWMgY29uc3QgY2hhciAqc2V0X2NvbmZpZ19maWxl
bmFtZShjb25zdCBjaGFyICpjb25maWdfZmlsZW5hbWUpDQogICAgLXsNCiAgICAtCWludCBzaXpl
Ow0KICAgIC0NCiAgICAtCXNpemUgPSBzbnByaW50ZihtZW51X2JhY2t0aXRsZSwgc2l6ZW9mKG1l
bnVfYmFja3RpdGxlKSwNCiAgICAtCQkJIiVzIC0gJXMiLCBjb25maWdfZmlsZW5hbWUsIHJvb3Rt
ZW51LnByb21wdC0+dGV4dCk7DQogICAgLQlpZiAoc2l6ZSA+PSBzaXplb2YobWVudV9iYWNrdGl0
bGUpKQ0KICAgIC0JCW1lbnVfYmFja3RpdGxlW3NpemVvZihtZW51X2JhY2t0aXRsZSktMV0gPSAn
XDAnOw0KICAgIC0NCiAgICAtCXNpemUgPSBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVu
YW1lKSwgIiVzIiwgY29uZmlnX2ZpbGVuYW1lKTsNCiAgICAtCWlmIChzaXplID49IHNpemVvZihm
aWxlbmFtZSkpDQogICAgLQkJZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9ICdcMCc7DQog
ICAgLQlyZXR1cm4gbWVudV9iYWNrdGl0bGU7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHJldHVy
biA9IDAgbWVhbnMgd2UgYXJlIHN1Y2Nlc3NmdWwuDQogICAgLSAqIC0xIG1lYW5zIGdvIG9uIGRv
aW5nIHdoYXQgeW91IHdlcmUgZG9pbmcNCiAgICAtICovDQogICAgLXN0YXRpYyBpbnQgZG9fZXhp
dCh2b2lkKQ0KICAgIC17DQogICAgLQlpbnQgcmVzOw0KICAgIC0JaWYgKCFjb25mX2dldF9jaGFu
Z2VkKCkpIHsNCiAgICAtCQlnbG9iYWxfZXhpdCA9IDE7DQogICAgLQkJcmV0dXJuIDA7DQogICAg
LQl9DQogICAgLQlyZXMgPSBidG5fZGlhbG9nKG1haW5fd2luZG93LA0KICAgIC0JCQkiRG8geW91
IHdpc2ggdG8gc2F2ZSB5b3VyIG5ldyBjb25maWd1cmF0aW9uP1xuIg0KICAgIC0JCQkJIjxFU0M+
IHRvIGNhbmNlbCBhbmQgcmVzdW1lIG5jb25maWcuIiwNCiAgICAtCQkJMiwNCiAgICAtCQkJIiAg
IDxzYXZlPiAgICIsDQogICAgLQkJCSI8ZG9uJ3Qgc2F2ZT4iKTsNCiAgICAtCWlmIChyZXMgPT0g
S0VZX0VYSVQpIHsNCiAgICAtCQlnbG9iYWxfZXhpdCA9IDA7DQogICAgLQkJcmV0dXJuIC0xOw0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCS8qIGlmIHdlIGdvdCBoZXJlLCB0aGUgdXNlciByZWFsbHkg
d2FudHMgdG8gZXhpdCAqLw0KICAgIC0Jc3dpdGNoIChyZXMpIHsNCiAgICAtCWNhc2UgMDoNCiAg
ICAtCQlyZXMgPSBjb25mX3dyaXRlKGZpbGVuYW1lKTsNCiAgICAtCQlpZiAocmVzKQ0KICAgIC0J
CQlidG5fZGlhbG9nKA0KICAgIC0JCQkJbWFpbl93aW5kb3csDQogICAgLQkJCQkiRXJyb3IgZHVy
aW5nIHdyaXRpbmcgb2YgY29uZmlndXJhdGlvbi5cbiINCiAgICAtCQkJCSAgIllvdXIgY29uZmln
dXJhdGlvbiBjaGFuZ2VzIHdlcmUgTk9UIHNhdmVkLiIsDQogICAgLQkJCQkgIDEsDQogICAgLQkJ
CQkgICI8T0s+Iik7DQogICAgLQkJY29uZl93cml0ZV9hdXRvY29uZigwKTsNCiAgICAtCQlicmVh
azsNCiAgICAtCWRlZmF1bHQ6DQogICAgLQkJYnRuX2RpYWxvZygNCiAgICAtCQkJbWFpbl93aW5k
b3csDQogICAgLQkJCSJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZlZC4i
LA0KICAgIC0JCQkxLA0KICAgIC0JCQkiPE9LPiIpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0K
ICAgIC0JZ2xvYmFsX2V4aXQgPSAxOw0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0NCiAgICAtDQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBzZWFyY2hfY29uZih2b2lkKQ0KICAgIC17DQogICAgLQlz
dHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsNCiAgICAtCXN0cnVjdCBnc3RyIHJlczsNCiAgICAtCXN0
cnVjdCBnc3RyIHRpdGxlOw0KICAgIC0JY2hhciAqZGlhbG9nX2lucHV0Ow0KICAgIC0JaW50IGRy
ZXM7DQogICAgLQ0KICAgIC0JdGl0bGUgPSBzdHJfbmV3KCk7DQogICAgLQlzdHJfcHJpbnRmKCAm
dGl0bGUsICJFbnRlciAoc3ViKXN0cmluZyBvciByZWdleHAgdG8gc2VhcmNoIGZvciAiDQogICAg
LQkJCSAgICAgICIod2l0aCBvciB3aXRob3V0IFwiJXNcIikiLCBDT05GSUdfKTsNCiAgICAtDQog
ICAgLWFnYWluOg0KICAgIC0JZHJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywNCiAg
ICAtCQkJIlNlYXJjaCBDb25maWd1cmF0aW9uIFBhcmFtZXRlciIsDQogICAgLQkJCXN0cl9nZXQo
JnRpdGxlKSwNCiAgICAtCQkJIiIsICZkaWFsb2dfaW5wdXRfcmVzdWx0LCAmZGlhbG9nX2lucHV0
X3Jlc3VsdF9sZW4pOw0KICAgIC0Jc3dpdGNoIChkcmVzKSB7DQogICAgLQljYXNlIDA6DQogICAg
LQkJYnJlYWs7DQogICAgLQljYXNlIDE6DQogICAgLQkJc2hvd19zY3JvbGxfd2luKG1haW5fd2lu
ZG93LA0KICAgIC0JCQkJIlNlYXJjaCBDb25maWd1cmF0aW9uIiwgc2VhcmNoX2hlbHApOw0KICAg
IC0JCWdvdG8gYWdhaW47DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCXN0cl9mcmVlKCZ0aXRsZSk7
DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCS8qIHN0cmlwIHRoZSBwcmVm
aXggaWYgbmVjZXNzYXJ5ICovDQogICAgLQlkaWFsb2dfaW5wdXQgPSBkaWFsb2dfaW5wdXRfcmVz
dWx0Ow0KICAgIC0JaWYgKHN0cm5jYXNlY21wKGRpYWxvZ19pbnB1dF9yZXN1bHQsIENPTkZJR18s
IHN0cmxlbihDT05GSUdfKSkgPT0gMCkNCiAgICAtCQlkaWFsb2dfaW5wdXQgKz0gc3RybGVuKENP
TkZJR18pOw0KICAgIC0NCiAgICAtCXN5bV9hcnIgPSBzeW1fcmVfc2VhcmNoKGRpYWxvZ19pbnB1
dCk7DQogICAgLQlyZXMgPSBnZXRfcmVsYXRpb25zX3N0cihzeW1fYXJyLCBOVUxMKTsNCiAgICAt
CWZyZWUoc3ltX2Fycik7DQogICAgLQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csDQogICAg
LQkJCSJTZWFyY2ggUmVzdWx0cyIsIHN0cl9nZXQoJnJlcykpOw0KICAgIC0Jc3RyX2ZyZWUoJnJl
cyk7DQogICAgLQlzdHJfZnJlZSgmdGl0bGUpOw0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAt
c3RhdGljIHZvaWQgYnVpbGRfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0J
c3RydWN0IHN5bWJvbCAqc3ltOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0J
c3RydWN0IG1lbnUgKmNoaWxkOw0KICAgIC0JaW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOw0KICAg
IC0JdHJpc3RhdGUgdmFsOw0KICAgIC0JY2hhciBjaDsNCiAgICAtDQogICAgLQlpZiAoIW1lbnUg
fHwgKCFzaG93X2FsbF9pdGVtcyAmJiAhbWVudV9pc192aXNpYmxlKG1lbnUpKSkNCiAgICAtCQly
ZXR1cm47DQogICAgLQ0KICAgIC0Jc3ltID0gbWVudS0+c3ltOw0KICAgIC0JcHJvcCA9IG1lbnUt
PnByb21wdDsNCiAgICAtCWlmICghc3ltKSB7DQogICAgLQkJaWYgKHByb3AgJiYgbWVudSAhPSBj
dXJyZW50X21lbnUpIHsNCiAgICAtCQkJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJv
bXB0KG1lbnUpOw0KICAgIC0JCQllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICAtCQkJcHR5cGUg
PSBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQkJ
CXN3aXRjaCAocHR5cGUpIHsNCiAgICAtCQkJY2FzZSBQX01FTlU6DQogICAgLQkJCQljaGlsZF9j
b3VudCsrOw0KICAgIC0JCQkJcHJvbXB0ID0gcHJvbXB0Ow0KICAgIC0JCQkJaWYgKHNpbmdsZV9t
ZW51X21vZGUpIHsNCiAgICAtCQkJCQlpdGVtX21ha2UobWVudSwgJ20nLA0KICAgIC0JCQkJCQki
JXMlKmMlcyIsDQogICAgLQkJCQkJCW1lbnUtPmRhdGEgPyAiLS0+IiA6ICIrKz4iLA0KICAgIC0J
CQkJCQlpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7DQogICAgLQkJCQl9IGVsc2UNCiAgICAtCQkJ
CQlpdGVtX21ha2UobWVudSwgJ20nLA0KICAgIC0JCQkJCQkgICIgICAlKmMlcyAgJXMiLA0KICAg
IC0JCQkJCQkgIGluZGVudCArIDEsICcgJywgcHJvbXB0LA0KICAgIC0JCQkJCQkgIG1lbnVfaXNf
ZW1wdHkobWVudSkgPyAiLS0tLSIgOiAiLS0tPiIpOw0KICAgIC0NCiAgICAtCQkJCWlmIChzaW5n
bGVfbWVudV9tb2RlICYmIG1lbnUtPmRhdGEpDQogICAgLQkJCQkJZ290byBjb25mX2NoaWxkczsN
CiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJY2FzZSBQX0NPTU1FTlQ6DQogICAgLQkJCQlpZiAo
cHJvbXB0KSB7DQogICAgLQkJCQkJY2hpbGRfY291bnQrKzsNCiAgICAtCQkJCQlpdGVtX21ha2Uo
bWVudSwgJzonLA0KICAgIC0JCQkJCQkiICAgJSpjKioqICVzICoqKiIsDQogICAgLQkJCQkJCWlu
ZGVudCArIDEsICcgJywNCiAgICAtCQkJCQkJcHJvbXB0KTsNCiAgICAtCQkJCX0NCiAgICAtCQkJ
CWJyZWFrOw0KICAgIC0JCQlkZWZhdWx0Og0KICAgIC0JCQkJaWYgKHByb21wdCkgew0KICAgIC0J
CQkJCWNoaWxkX2NvdW50Kys7DQogICAgLQkJCQkJaXRlbV9tYWtlKG1lbnUsICc6JywgIi0tLSUq
YyVzIiwNCiAgICAtCQkJCQkJaW5kZW50ICsgMSwgJyAnLA0KICAgIC0JCQkJCQlwcm9tcHQpOw0K
ICAgIC0JCQkJfQ0KICAgIC0JCQl9DQogICAgLQkJfSBlbHNlDQogICAgLQkJCWRvaW50ID0gMDsN
CiAgICAtCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXR5cGUgPSBz
eW1fZ2V0X3R5cGUoc3ltKTsNCiAgICAtCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsNCiAgICAt
CQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsNCiAg
ICAtCQlzdHJ1Y3QgbWVudSAqZGVmX21lbnUgPSBOVUxMOw0KICAgIC0NCiAgICAtCQljaGlsZF9j
b3VudCsrOw0KICAgIC0JCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBj
aGlsZC0+bmV4dCkgew0KICAgIC0JCQlpZiAobWVudV9pc192aXNpYmxlKGNoaWxkKSAmJiBjaGls
ZC0+c3ltID09IGRlZl9zeW0pDQogICAgLQkJCQlkZWZfbWVudSA9IGNoaWxkOw0KICAgIC0JCX0N
CiAgICAtDQogICAgLQkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0J
CWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICAtCQkJc3dpdGNoICh0eXBlKSB7DQog
ICAgLQkJCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIlsl
Y10iLA0KICAgIC0JCQkJCQl2YWwgPT0gbm8gPyAnICcgOiAnKicpOw0KICAgIC0JCQkJYnJlYWs7
DQogICAgLQkJCWNhc2UgU19UUklTVEFURToNCiAgICAtCQkJCXN3aXRjaCAodmFsKSB7DQogICAg
LQkJCQljYXNlIHllczoNCiAgICAtCQkJCQljaCA9ICcqJzsNCiAgICAtCQkJCQlicmVhazsNCiAg
ICAtCQkJCWNhc2UgbW9kOg0KICAgIC0JCQkJCWNoID0gJ00nOw0KICAgIC0JCQkJCWJyZWFrOw0K
ICAgIC0JCQkJZGVmYXVsdDoNCiAgICAtCQkJCQljaCA9ICcgJzsNCiAgICAtCQkJCQlicmVhazsN
CiAgICAtCQkJCX0NCiAgICAtCQkJCWl0ZW1fbWFrZShtZW51LCAndCcsICI8JWM+IiwgY2gpOw0K
ICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCX0NCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQlpdGVt
X21ha2UobWVudSwgZGVmX21lbnUgPyAndCcgOiAnOicsICIgICAiKTsNCiAgICAtCQl9DQogICAg
LQ0KICAgIC0JCWl0ZW1fYWRkX3N0cigiJSpjJXMiLCBpbmRlbnQgKyAxLA0KICAgIC0JCQkJJyAn
LCBtZW51X2dldF9wcm9tcHQobWVudSkpOw0KICAgIC0JCWlmICh2YWwgPT0geWVzKSB7DQogICAg
LQkJCWlmIChkZWZfbWVudSkgew0KICAgIC0JCQkJaXRlbV9hZGRfc3RyKCIgKCVzKSIsDQogICAg
LQkJCQkJbWVudV9nZXRfcHJvbXB0KGRlZl9tZW51KSk7DQogICAgLQkJCQlpdGVtX2FkZF9zdHIo
IiAgLS0tPiIpOw0KICAgIC0JCQkJaWYgKGRlZl9tZW51LT5saXN0KSB7DQogICAgLQkJCQkJaW5k
ZW50ICs9IDI7DQogICAgLQkJCQkJYnVpbGRfY29uZihkZWZfbWVudSk7DQogICAgLQkJCQkJaW5k
ZW50IC09IDI7DQogICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAtCQkJcmV0dXJuOw0KICAgIC0J
CX0NCiAgICAtCX0gZWxzZSB7DQogICAgLQkJaWYgKG1lbnUgPT0gY3VycmVudF9tZW51KSB7DQog
ICAgLQkJCWl0ZW1fbWFrZShtZW51LCAnOicsDQogICAgLQkJCQkiLS0tJSpjJXMiLCBpbmRlbnQg
KyAxLA0KICAgIC0JCQkJJyAnLCBtZW51X2dldF9wcm9tcHQobWVudSkpOw0KICAgIC0JCQlnb3Rv
IGNvbmZfY2hpbGRzOw0KICAgIC0JCX0NCiAgICAtCQljaGlsZF9jb3VudCsrOw0KICAgIC0JCXZh
bCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICAtCQlpZiAoc3ltX2lzX2Nob2lj
ZV92YWx1ZShzeW0pICYmIHZhbCA9PSB5ZXMpIHsNCiAgICAtCQkJaXRlbV9tYWtlKG1lbnUsICc6
JywgIiAgICIpOw0KICAgIC0JCX0gZWxzZSB7DQogICAgLQkJCXN3aXRjaCAodHlwZSkgew0KICAg
IC0JCQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCQkJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkp
DQogICAgLQkJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIlslY10iLA0KICAgIC0JCQkJCQl2YWwg
PT0gbm8gPyAnICcgOiAnKicpOw0KICAgIC0JCQkJZWxzZQ0KICAgIC0JCQkJCWl0ZW1fbWFrZSht
ZW51LCAndCcsICItJWMtIiwNCiAgICAtCQkJCQkJdmFsID09IG5vID8gJyAnIDogJyonKTsNCiAg
ICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIFNfVFJJU1RBVEU6DQogICAgLQkJCQlzd2l0Y2gg
KHZhbCkgew0KICAgIC0JCQkJY2FzZSB5ZXM6DQogICAgLQkJCQkJY2ggPSAnKic7DQogICAgLQkJ
CQkJYnJlYWs7DQogICAgLQkJCQljYXNlIG1vZDoNCiAgICAtCQkJCQljaCA9ICdNJzsNCiAgICAt
CQkJCQlicmVhazsNCiAgICAtCQkJCWRlZmF1bHQ6DQogICAgLQkJCQkJY2ggPSAnICc7DQogICAg
LQkJCQkJYnJlYWs7DQogICAgLQkJCQl9DQogICAgLQkJCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShz
eW0pKSB7DQogICAgLQkJCQkJaWYgKHN5bS0+cmV2X2RlcC50cmkgPT0gbW9kKQ0KICAgIC0JCQkJ
CQlpdGVtX21ha2UobWVudSwNCiAgICAtCQkJCQkJCSd0JywgInslY30iLCBjaCk7DQogICAgLQkJ
CQkJZWxzZQ0KICAgIC0JCQkJCQlpdGVtX21ha2UobWVudSwNCiAgICAtCQkJCQkJCSd0JywgIjwl
Yz4iLCBjaCk7DQogICAgLQkJCQl9IGVsc2UNCiAgICAtCQkJCQlpdGVtX21ha2UobWVudSwgJ3Qn
LCAiLSVjLSIsIGNoKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQlkZWZhdWx0Og0KICAgIC0J
CQkJdG1wID0gMiArIHN0cmxlbihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsNCiAgICAtCQkJ
CWl0ZW1fbWFrZShtZW51LCAncycsICIgICAgKCVzKSIsDQogICAgLQkJCQkJCXN5bV9nZXRfc3Ry
aW5nX3ZhbHVlKHN5bSkpOw0KICAgIC0JCQkJdG1wID0gaW5kZW50IC0gdG1wICsgNDsNCiAgICAt
CQkJCWlmICh0bXAgPCAwKQ0KICAgIC0JCQkJCXRtcCA9IDA7DQogICAgLQkJCQlpdGVtX2FkZF9z
dHIoIiUqYyVzJXMiLCB0bXAsICcgJywNCiAgICAtCQkJCQkJbWVudV9nZXRfcHJvbXB0KG1lbnUp
LA0KICAgIC0JCQkJCQkoc3ltX2hhc192YWx1ZShzeW0pIHx8DQogICAgLQkJCQkJCSAhc3ltX2lz
X2NoYW5nYWJsZShzeW0pKSA/ICIiIDoNCiAgICAtCQkJCQkJIiAoTkVXKSIpOw0KICAgIC0JCQkJ
Z290byBjb25mX2NoaWxkczsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCQlpdGVtX2FkZF9z
dHIoIiUqYyVzJXMiLCBpbmRlbnQgKyAxLCAnICcsDQogICAgLQkJCQltZW51X2dldF9wcm9tcHQo
bWVudSksDQogICAgLQkJCQkoc3ltX2hhc192YWx1ZShzeW0pIHx8ICFzeW1faXNfY2hhbmdhYmxl
KHN5bSkpID8NCiAgICAtCQkJCSIiIDogIiAoTkVXKSIpOw0KICAgIC0JCWlmIChtZW51LT5wcm9t
cHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkgew0KICAgIC0JCQlpdGVtX2FkZF9z
dHIoIiAgJXMiLCBtZW51X2lzX2VtcHR5KG1lbnUpID8gIi0tLS0iIDogIi0tLT4iKTsNCiAgICAt
CQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLWNvbmZfY2hpbGRzOg0K
ICAgIC0JaW5kZW50ICs9IGRvaW50Ow0KICAgIC0JZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQ0KICAgIC0JCWJ1aWxkX2NvbmYoY2hpbGQpOw0KICAg
IC0JaW5kZW50IC09IGRvaW50Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCByZXNl
dF9tZW51KHZvaWQpDQogICAgLXsNCiAgICAtCXVucG9zdF9tZW51KGN1cnNlc19tZW51KTsNCiAg
ICAtCWNsZWFuX2l0ZW1zKCk7DQogICAgLX0NCiAgICAtDQogICAgLS8qIGFkanVzdCB0aGUgbWVu
dSB0byBzaG93IHRoaXMgaXRlbS4NCiAgICAtICogcHJlZmVyIG5vdCB0byBzY3JvbGwgdGhlIG1l
bnUgaWYgcG9zc2libGUqLw0KICAgIC1zdGF0aWMgdm9pZCBjZW50ZXJfaXRlbShpbnQgc2VsZWN0
ZWRfaW5kZXgsIGludCAqbGFzdF90b3Bfcm93KQ0KICAgIC17DQogICAgLQlpbnQgdG9wcm93Ow0K
ICAgIC0NCiAgICAtCXNldF90b3Bfcm93KGN1cnNlc19tZW51LCAqbGFzdF90b3Bfcm93KTsNCiAg
ICAtCXRvcHJvdyA9IHRvcF9yb3coY3Vyc2VzX21lbnUpOw0KICAgIC0JaWYgKHNlbGVjdGVkX2lu
ZGV4IDwgdG9wcm93IHx8DQogICAgLQkgICAgc2VsZWN0ZWRfaW5kZXggPj0gdG9wcm93K213aW5f
bWF4X2xpbmVzKSB7DQogICAgLQkJdG9wcm93ID0gbWF4KHNlbGVjdGVkX2luZGV4LW13aW5fbWF4
X2xpbmVzLzIsIDApOw0KICAgIC0JCWlmICh0b3Byb3cgPj0gaXRlbV9jb3VudChjdXJzZXNfbWVu
dSktbXdpbl9tYXhfbGluZXMpDQogICAgLQkJCXRvcHJvdyA9IGl0ZW1fY291bnQoY3Vyc2VzX21l
bnUpLW13aW5fbWF4X2xpbmVzOw0KICAgIC0JCXNldF90b3Bfcm93KGN1cnNlc19tZW51LCB0b3By
b3cpOw0KICAgIC0JfQ0KICAgIC0Jc2V0X2N1cnJlbnRfaXRlbShjdXJzZXNfbWVudSwNCiAgICAt
CQkJY3Vyc2VzX21lbnVfaXRlbXNbc2VsZWN0ZWRfaW5kZXhdKTsNCiAgICAtCSpsYXN0X3RvcF9y
b3cgPSB0b3Byb3c7DQogICAgLQlwb3N0X21lbnUoY3Vyc2VzX21lbnUpOw0KICAgIC0JcmVmcmVz
aF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHRoaXMg
ZnVuY3Rpb24gYXNzdW1lcyByZXNldF9tZW51IGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUgKi8NCiAg
ICAtc3RhdGljIHZvaWQgc2hvd19tZW51KGNvbnN0IGNoYXIgKnByb21wdCwgY29uc3QgY2hhciAq
aW5zdHJ1Y3Rpb25zLA0KICAgIC0JCWludCBzZWxlY3RlZF9pbmRleCwgaW50ICpsYXN0X3RvcF9y
b3cpDQogICAgLXsNCiAgICAtCWludCBtYXh4LCBtYXh5Ow0KICAgIC0JV0lORE9XICptZW51X3dp
bmRvdzsNCiAgICAtDQogICAgLQljdXJyZW50X2luc3RydWN0aW9ucyA9IGluc3RydWN0aW9uczsN
CiAgICAtDQogICAgLQljbGVhcigpOw0KICAgIC0JKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93
LCBhdHRyaWJ1dGVzW05PUk1BTF0pOw0KICAgIC0JcHJpbnRfaW5fbWlkZGxlKHN0ZHNjciwgMSwg
MCwgZ2V0bWF4eChzdGRzY3IpLA0KICAgIC0JCQltZW51X2JhY2t0aXRsZSwNCiAgICAtCQkJYXR0
cmlidXRlc1tNQUlOX0hFQURJTkddKTsNCiAgICAtDQogICAgLQkodm9pZCkgd2F0dHJzZXQobWFp
bl93aW5kb3csIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0JPWF0pOw0KICAgIC0JYm94KG1haW5fd2lu
ZG93LCAwLCAwKTsNCiAgICAtCSh2b2lkKSB3YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRl
c1tNQUlOX01FTlVfSEVBRElOR10pOw0KICAgIC0JbXZ3cHJpbnR3KG1haW5fd2luZG93LCAwLCAz
LCAiICVzICIsIHByb21wdCk7DQogICAgLQkodm9pZCkgd2F0dHJzZXQobWFpbl93aW5kb3csIGF0
dHJpYnV0ZXNbTk9STUFMXSk7DQogICAgLQ0KICAgIC0Jc2V0X21lbnVfaXRlbXMoY3Vyc2VzX21l
bnUsIGN1cnNlc19tZW51X2l0ZW1zKTsNCiAgICAtDQogICAgLQkvKiBwb3NpdGlvbiB0aGUgbWVu
dSBhdCB0aGUgbWlkZGxlIG9mIHRoZSBzY3JlZW4gKi8NCiAgICAtCXNjYWxlX21lbnUoY3Vyc2Vz
X21lbnUsICZtYXh5LCAmbWF4eCk7DQogICAgLQltYXh4ID0gbWluKG1heHgsIG13aW5fbWF4X2Nv
bHMtMik7DQogICAgLQltYXh5ID0gbXdpbl9tYXhfbGluZXM7DQogICAgLQltZW51X3dpbmRvdyA9
IGRlcndpbihtYWluX3dpbmRvdywNCiAgICAtCQkJbWF4eSwNCiAgICAtCQkJbWF4eCwNCiAgICAt
CQkJMiwNCiAgICAtCQkJKG13aW5fbWF4X2NvbHMtbWF4eCkvMik7DQogICAgLQlrZXlwYWQobWVu
dV93aW5kb3csIFRSVUUpOw0KICAgIC0Jc2V0X21lbnVfd2luKGN1cnNlc19tZW51LCBtZW51X3dp
bmRvdyk7DQogICAgLQlzZXRfbWVudV9zdWIoY3Vyc2VzX21lbnUsIG1lbnVfd2luZG93KTsNCiAg
ICAtDQogICAgLQkvKiBtdXN0IHJlYXNzZXJ0IHRoaXMgYWZ0ZXIgY2hhbmdpbmcgaXRlbXMsIG90
aGVyd2lzZSByZXR1cm5zIHRvIGENCiAgICAtCSAqIGRlZmF1bHQgb2YgMTYNCiAgICAtCSAqLw0K
ICAgIC0Jc2V0X21lbnVfZm9ybWF0KGN1cnNlc19tZW51LCBtYXh5LCAxKTsNCiAgICAtCWNlbnRl
cl9pdGVtKHNlbGVjdGVkX2luZGV4LCBsYXN0X3RvcF9yb3cpOw0KICAgIC0Jc2V0X21lbnVfZm9y
bWF0KGN1cnNlc19tZW51LCBtYXh5LCAxKTsNCiAgICAtDQogICAgLQlwcmludF9mdW5jdGlvbl9s
aW5lKCk7DQogICAgLQ0KICAgIC0JLyogUG9zdCB0aGUgbWVudSAqLw0KICAgIC0JcG9zdF9tZW51
KGN1cnNlc19tZW51KTsNCiAgICAtCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOw0K
ICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBhZGpfbWF0Y2hfZGlyKG1hdGNoX2YgKm1h
dGNoX2RpcmVjdGlvbikNCiAgICAtew0KICAgIC0JaWYgKCptYXRjaF9kaXJlY3Rpb24gPT0gRklO
RF9ORVhUX01BVENIX0RPV04pDQogICAgLQkJKm1hdGNoX2RpcmVjdGlvbiA9DQogICAgLQkJCU1B
VENIX1RJTktFUl9QQVRURVJOX0RPV047DQogICAgLQllbHNlIGlmICgqbWF0Y2hfZGlyZWN0aW9u
ID09IEZJTkRfTkVYVF9NQVRDSF9VUCkNCiAgICAtCQkqbWF0Y2hfZGlyZWN0aW9uID0NCiAgICAt
CQkJTUFUQ0hfVElOS0VSX1BBVFRFUk5fVVA7DQogICAgLQkvKiBlbHNlLCBkbyBubyBjaGFuZ2Uu
LiAqLw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3QgbWF0Y2hfc3RhdGUNCiAgICAtew0KICAg
IC0JaW50IGluX3NlYXJjaDsNCiAgICAtCW1hdGNoX2YgbWF0Y2hfZGlyZWN0aW9uOw0KICAgIC0J
Y2hhciBwYXR0ZXJuWzI1Nl07DQogICAgLX07DQogICAgLQ0KICAgIC0vKiBSZXR1cm4gMCBtZWFu
cyBJIGhhdmUgaGFuZGxlZCB0aGUga2V5LiBJbiBzdWNoIGEgY2FzZSwgYW5zIHNob3VsZCBob2xk
IHRoZQ0KICAgIC0gKiBpdGVtIHRvIGNlbnRlciwgb3IgLTEgb3RoZXJ3aXNlLg0KICAgIC0gKiBF
bHNlIHJldHVybiAtMSAuDQogICAgLSAqLw0KICAgIC1zdGF0aWMgaW50IGRvX21hdGNoKGludCBr
ZXksIHN0cnVjdCBtYXRjaF9zdGF0ZSAqc3RhdGUsIGludCAqYW5zKQ0KICAgIC17DQogICAgLQlj
aGFyIGMgPSAoY2hhcikga2V5Ow0KICAgIC0JaW50IHRlcm1pbmF0ZV9zZWFyY2ggPSAwOw0KICAg
IC0JKmFucyA9IC0xOw0KICAgIC0JaWYgKGtleSA9PSAnLycgfHwgKHN0YXRlLT5pbl9zZWFyY2gg
JiYga2V5ID09IDI3KSkgew0KICAgIC0JCW1vdmUoMCwgMCk7DQogICAgLQkJcmVmcmVzaCgpOw0K
ICAgIC0JCWNscnRvZW9sKCk7DQogICAgLQkJc3RhdGUtPmluX3NlYXJjaCA9IDEtc3RhdGUtPmlu
X3NlYXJjaDsNCiAgICAtCQliemVybyhzdGF0ZS0+cGF0dGVybiwgc2l6ZW9mKHN0YXRlLT5wYXR0
ZXJuKSk7DQogICAgLQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbiA9IE1BVENIX1RJTktFUl9QQVRU
RVJOX0RPV047DQogICAgLQkJcmV0dXJuIDA7DQogICAgLQl9IGVsc2UgaWYgKCFzdGF0ZS0+aW5f
c2VhcmNoKQ0KICAgIC0JCXJldHVybiAxOw0KICAgIC0NCiAgICAtCWlmIChpc2FsbnVtKGMpIHx8
IGlzZ3JhcGgoYykgfHwgYyA9PSAnICcpIHsNCiAgICAtCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4o
c3RhdGUtPnBhdHRlcm4pXSA9IGM7DQogICAgLQkJc3RhdGUtPnBhdHRlcm5bc3RybGVuKHN0YXRl
LT5wYXR0ZXJuKV0gPSAnXDAnOw0KICAgIC0JCWFkal9tYXRjaF9kaXIoJnN0YXRlLT5tYXRjaF9k
aXJlY3Rpb24pOw0KICAgIC0JCSphbnMgPSBnZXRfbWV4dF9tYXRjaChzdGF0ZS0+cGF0dGVybiwN
CiAgICAtCQkJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOw0KICAgIC0JfSBlbHNlIGlmIChrZXkg
PT0gS0VZX0RPV04pIHsNCiAgICAtCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uID0gRklORF9ORVhU
X01BVENIX0RPV047DQogICAgLQkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRlLT5wYXR0ZXJu
LA0KICAgIC0JCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgLQl9IGVsc2UgaWYgKGtl
eSA9PSBLRVlfVVApIHsNCiAgICAtCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uID0gRklORF9ORVhU
X01BVENIX1VQOw0KICAgIC0JCSphbnMgPSBnZXRfbWV4dF9tYXRjaChzdGF0ZS0+cGF0dGVybiwN
CiAgICAtCQkJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24pOw0KICAgIC0JfSBlbHNlIGlmIChrZXkg
PT0gS0VZX0JBQ0tTUEFDRSB8fCBrZXkgPT0gOCB8fCBrZXkgPT0gMTI3KSB7DQogICAgLQkJc3Rh
dGUtPnBhdHRlcm5bc3RybGVuKHN0YXRlLT5wYXR0ZXJuKS0xXSA9ICdcMCc7DQogICAgLQkJYWRq
X21hdGNoX2Rpcigmc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgLQl9IGVsc2UNCiAgICAt
CQl0ZXJtaW5hdGVfc2VhcmNoID0gMTsNCiAgICAtDQogICAgLQlpZiAodGVybWluYXRlX3NlYXJj
aCkgew0KICAgIC0JCXN0YXRlLT5pbl9zZWFyY2ggPSAwOw0KICAgIC0JCWJ6ZXJvKHN0YXRlLT5w
YXR0ZXJuLCBzaXplb2Yoc3RhdGUtPnBhdHRlcm4pKTsNCiAgICAtCQltb3ZlKDAsIDApOw0KICAg
IC0JCXJlZnJlc2goKTsNCiAgICAtCQljbHJ0b2VvbCgpOw0KICAgIC0JCXJldHVybiAtMTsNCiAg
ICAtCX0NCiAgICAtCXJldHVybiAwOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBj
b25mKHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgbWVudSAqc3VibWVu
dSA9IE5VTEw7DQogICAgLQljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVu
dSk7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlpbnQgcmVzOw0KICAgIC0JaW50
IGN1cnJlbnRfaW5kZXggPSAwOw0KICAgIC0JaW50IGxhc3RfdG9wX3JvdyA9IDA7DQogICAgLQlz
dHJ1Y3QgbWF0Y2hfc3RhdGUgbWF0Y2hfc3RhdGUgPSB7DQogICAgLQkJLmluX3NlYXJjaCA9IDAs
DQogICAgLQkJLm1hdGNoX2RpcmVjdGlvbiA9IE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sDQog
ICAgLQkJLnBhdHRlcm4gPSAiIiwNCiAgICAtCX07DQogICAgLQ0KICAgIC0Jd2hpbGUgKCFnbG9i
YWxfZXhpdCkgew0KICAgIC0JCXJlc2V0X21lbnUoKTsNCiAgICAtCQljdXJyZW50X21lbnUgPSBt
ZW51Ow0KICAgIC0JCWJ1aWxkX2NvbmYobWVudSk7DQogICAgLQkJaWYgKCFjaGlsZF9jb3VudCkN
CiAgICAtCQkJYnJlYWs7DQogICAgLQ0KICAgIC0JCXNob3dfbWVudShwcm9tcHQgPyBwcm9tcHQg
OiAiTWFpbiBNZW51IiwNCiAgICAtCQkJCW1lbnVfaW5zdHJ1Y3Rpb25zLA0KICAgIC0JCQkJY3Vy
cmVudF9pbmRleCwgJmxhc3RfdG9wX3Jvdyk7DQogICAgLQkJa2V5cGFkKChtZW51X3dpbihjdXJz
ZXNfbWVudSkpLCBUUlVFKTsNCiAgICAtCQl3aGlsZSAoIWdsb2JhbF9leGl0KSB7DQogICAgLQkJ
CWlmIChtYXRjaF9zdGF0ZS5pbl9zZWFyY2gpIHsNCiAgICAtCQkJCW12cHJpbnR3KDAsIDAsDQog
ICAgLQkJCQkJInNlYXJjaGluZzogJXMiLCBtYXRjaF9zdGF0ZS5wYXR0ZXJuKTsNCiAgICAtCQkJ
CWNscnRvZW9sKCk7DQogICAgLQkJCX0NCiAgICAtCQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWlu
X3dpbmRvdyk7DQogICAgLQkJCXJlcyA9IHdnZXRjaChtZW51X3dpbihjdXJzZXNfbWVudSkpOw0K
ICAgIC0JCQlpZiAoIXJlcykNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQlpZiAoZG9fbWF0Y2go
cmVzLCAmbWF0Y2hfc3RhdGUsICZjdXJyZW50X2luZGV4KSA9PSAwKSB7DQogICAgLQkJCQlpZiAo
Y3VycmVudF9pbmRleCAhPSAtMSkNCiAgICAtCQkJCQljZW50ZXJfaXRlbShjdXJyZW50X2luZGV4
LA0KICAgIC0JCQkJCQkgICAgJmxhc3RfdG9wX3Jvdyk7DQogICAgLQkJCQljb250aW51ZTsNCiAg
ICAtCQkJfQ0KICAgIC0JCQlpZiAocHJvY2Vzc19zcGVjaWFsX2tleXMoJnJlcywNCiAgICAtCQkJ
CQkJKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKSkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0J
CQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCQljYXNlIEtFWV9ET1dOOg0KICAgIC0JCQkJbWVudV9k
cml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9ET1dOX0lURU0pOw0KICAgIC0JCQkJYnJlYWs7DQogICAg
LQkJCWNhc2UgS0VZX1VQOg0KICAgIC0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9V
UF9JVEVNKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9OUEFHRToNCiAgICAt
CQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfU0NSX0RQQUdFKTsNCiAgICAtCQkJCWJy
ZWFrOw0KICAgIC0JCQljYXNlIEtFWV9QUEFHRToNCiAgICAtCQkJCW1lbnVfZHJpdmVyKGN1cnNl
c19tZW51LCBSRVFfU0NSX1VQQUdFKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtF
WV9IT01FOg0KICAgIC0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9GSVJTVF9JVEVN
KTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9FTkQ6DQogICAgLQkJCQltZW51
X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0xBU1RfSVRFTSk7DQogICAgLQkJCQlicmVhazsNCiAg
ICAtCQkJY2FzZSAnaCc6DQogICAgLQkJCWNhc2UgJz8nOg0KICAgIC0JCQkJc2hvd19oZWxwKChz
dHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSk7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0K
ICAgIC0JCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fA0KICAgIC0JCQkJcmVzID09IDMy
IHx8IHJlcyA9PSAnbicgfHwgcmVzID09ICd5JyB8fA0KICAgIC0JCQkJcmVzID09IEtFWV9MRUZU
IHx8IHJlcyA9PSBLRVlfUklHSFQgfHwNCiAgICAtCQkJCXJlcyA9PSAnbScpDQogICAgLQkJCQli
cmVhazsNCiAgICAtCQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgLQkJ
fQ0KICAgIC0NCiAgICAtCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICAt
CQkvKiBpZiBFU0Mgb3IgbGVmdCovDQogICAgLQkJaWYgKHJlcyA9PSAyNyB8fCAobWVudSAhPSAm
cm9vdG1lbnUgJiYgcmVzID09IEtFWV9MRUZUKSkNCiAgICAtCQkJYnJlYWs7DQogICAgLQ0KICAg
IC0JCS8qIHJlbWVtYmVyIGxvY2F0aW9uIGluIHRoZSBtZW51ICovDQogICAgLQkJbGFzdF90b3Bf
cm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7DQogICAgLQkJY3VycmVudF9pbmRleCA9IGN1cnNl
c19pdGVtX2luZGV4KCk7DQogICAgLQ0KICAgIC0JCWlmICghaXRlbV90YWcoKSkNCiAgICAtCQkJ
Y29udGludWU7DQogICAgLQ0KICAgIC0JCXN1Ym1lbnUgPSAoc3RydWN0IG1lbnUgKikgaXRlbV9k
YXRhKCk7DQogICAgLQkJaWYgKCFzdWJtZW51IHx8ICFtZW51X2lzX3Zpc2libGUoc3VibWVudSkp
DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCXN5bSA9IHN1Ym1lbnUtPnN5bTsNCiAgICAtDQog
ICAgLQkJc3dpdGNoIChyZXMpIHsNCiAgICAtCQljYXNlICcgJzoNCiAgICAtCQkJaWYgKGl0ZW1f
aXNfdGFnKCd0JykpDQogICAgLQkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQog
ICAgLQkJCWVsc2UgaWYgKGl0ZW1faXNfdGFnKCdtJykpDQogICAgLQkJCQljb25mKHN1Ym1lbnUp
Ow0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9SSUdIVDoNCiAgICAtCQljYXNlIDEw
OiAvKiBFTlRFUiBXQVMgUFJFU1NFRCAqLw0KICAgIC0JCQlzd2l0Y2ggKGl0ZW1fdGFnKCkpIHsN
CiAgICAtCQkJY2FzZSAnbSc6DQogICAgLQkJCQlpZiAoc2luZ2xlX21lbnVfbW9kZSkNCiAgICAt
CQkJCQlzdWJtZW51LT5kYXRhID0NCiAgICAtCQkJCQkJKHZvaWQgKikgKGxvbmcpICFzdWJtZW51
LT5kYXRhOw0KICAgIC0JCQkJZWxzZQ0KICAgIC0JCQkJCWNvbmYoc3VibWVudSk7DQogICAgLQkJ
CQlicmVhazsNCiAgICAtCQkJY2FzZSAndCc6DQogICAgLQkJCQlpZiAoc3ltX2lzX2Nob2ljZShz
eW0pICYmDQogICAgLQkJCQkgICAgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHllcykN
CiAgICAtCQkJCQljb25mX2Nob2ljZShzdWJtZW51KTsNCiAgICAtCQkJCWVsc2UgaWYgKHN1Ym1l
bnUtPnByb21wdCAmJg0KICAgIC0JCQkJCSBzdWJtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5V
KQ0KICAgIC0JCQkJCWNvbmYoc3VibWVudSk7DQogICAgLQkJCQllbHNlIGlmIChyZXMgPT0gMTAp
DQogICAgLQkJCQkJc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0JCQkJYnJl
YWs7DQogICAgLQkJCWNhc2UgJ3MnOg0KICAgIC0JCQkJY29uZl9zdHJpbmcoc3VibWVudSk7DQog
ICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICd5
JzoNCiAgICAtCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpIHsNCiAgICAtCQkJCWlmIChzeW1fc2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSwgeWVzKSkNCiAgICAtCQkJCQlicmVhazsNCiAgICAtCQkJCWlm
IChzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKSkNCiAgICAtCQkJCQlidG5fZGlhbG9n
KG1haW5fd2luZG93LCBzZXRtb2RfdGV4dCwgMCk7DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7
DQogICAgLQkJY2FzZSAnbic6DQogICAgLQkJCWlmIChpdGVtX2lzX3RhZygndCcpKQ0KICAgIC0J
CQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsNCiAgICAtCQkJYnJlYWs7DQogICAg
LQkJY2FzZSAnbSc6DQogICAgLQkJCWlmIChpdGVtX2lzX3RhZygndCcpKQ0KICAgIC0JCQkJc3lt
X3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0N
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9tZXNzYWdlX2Nh
bGxiYWNrKGNvbnN0IGNoYXIgKnMpDQogICAgLXsNCiAgICAtCWJ0bl9kaWFsb2cobWFpbl93aW5k
b3csIHMsIDEsICI8T0s+Iik7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHNob3df
aGVscChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0Jc3RydWN0IGdzdHIgaGVscDsN
CiAgICAtDQogICAgLQlpZiAoIW1lbnUpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCWhl
bHAgPSBzdHJfbmV3KCk7DQogICAgLQltZW51X2dldF9leHRfaGVscChtZW51LCAmaGVscCk7DQog
ICAgLQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csIG1lbnVfZ2V0X3Byb21wdChtZW51KSwg
c3RyX2dldCgmaGVscCkpOw0KICAgIC0Jc3RyX2ZyZWUoJmhlbHApOw0KICAgIC19DQogICAgLQ0K
ICAgIC1zdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0K
ICAgIC0JY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgIC0J
c3RydWN0IG1lbnUgKmNoaWxkID0gTlVMTDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKmFjdGl2ZTsN
CiAgICAtCWludCBzZWxlY3RlZF9pbmRleCA9IDA7DQogICAgLQlpbnQgbGFzdF90b3Bfcm93ID0g
MDsNCiAgICAtCWludCByZXMsIGkgPSAwOw0KICAgIC0Jc3RydWN0IG1hdGNoX3N0YXRlIG1hdGNo
X3N0YXRlID0gew0KICAgIC0JCS5pbl9zZWFyY2ggPSAwLA0KICAgIC0JCS5tYXRjaF9kaXJlY3Rp
b24gPSBNQVRDSF9USU5LRVJfUEFUVEVSTl9ET1dOLA0KICAgIC0JCS5wYXR0ZXJuID0gIiIsDQog
ICAgLQl9Ow0KICAgIC0NCiAgICAtCWFjdGl2ZSA9IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUt
PnN5bSk7DQogICAgLQkvKiB0aGlzIGlzIG1vc3RseSBkdXBsaWNhdGVkIGZyb20gdGhlIGNvbmYo
KSBmdW5jdGlvbi4gKi8NCiAgICAtCXdoaWxlICghZ2xvYmFsX2V4aXQpIHsNCiAgICAtCQlyZXNl
dF9tZW51KCk7DQogICAgLQ0KICAgIC0JCWZvciAoaSA9IDAsIGNoaWxkID0gbWVudS0+bGlzdDsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICAtCQkJaWYgKCFzaG93X2FsbF9pdGVt
cyAmJiAhbWVudV9pc192aXNpYmxlKGNoaWxkKSkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0N
CiAgICAtCQkJaWYgKGNoaWxkLT5zeW0gPT0gc3ltX2dldF9jaG9pY2VfdmFsdWUobWVudS0+c3lt
KSkNCiAgICAtCQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiPFg+ICVzIiwNCiAgICAtCQkJCQkJ
bWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7DQogICAgLQkJCWVsc2UgaWYgKGNoaWxkLT5zeW0pDQog
ICAgLQkJCQlpdGVtX21ha2UoY2hpbGQsICc6JywgIiAgICAlcyIsDQogICAgLQkJCQkJCW1lbnVf
Z2V0X3Byb21wdChjaGlsZCkpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQlpdGVtX21ha2UoY2hp
bGQsICc6JywgIioqKiAlcyAqKioiLA0KICAgIC0JCQkJCQltZW51X2dldF9wcm9tcHQoY2hpbGQp
KTsNCiAgICAtDQogICAgLQkJCWlmIChjaGlsZC0+c3ltID09IGFjdGl2ZSl7DQogICAgLQkJCQls
YXN0X3RvcF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsNCiAgICAtCQkJCXNlbGVjdGVkX2lu
ZGV4ID0gaTsNCiAgICAtCQkJfQ0KICAgIC0JCQlpKys7DQogICAgLQkJfQ0KICAgIC0JCXNob3df
bWVudShwcm9tcHQgPyBwcm9tcHQgOiAiQ2hvaWNlIE1lbnUiLA0KICAgIC0JCQkJcmFkaW9saXN0
X2luc3RydWN0aW9ucywNCiAgICAtCQkJCXNlbGVjdGVkX2luZGV4LA0KICAgIC0JCQkJJmxhc3Rf
dG9wX3Jvdyk7DQogICAgLQkJd2hpbGUgKCFnbG9iYWxfZXhpdCkgew0KICAgIC0JCQlpZiAobWF0
Y2hfc3RhdGUuaW5fc2VhcmNoKSB7DQogICAgLQkJCQltdnByaW50dygwLCAwLCAic2VhcmNoaW5n
OiAlcyIsDQogICAgLQkJCQkJIG1hdGNoX3N0YXRlLnBhdHRlcm4pOw0KICAgIC0JCQkJY2xydG9l
b2woKTsNCiAgICAtCQkJfQ0KICAgIC0JCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93
KTsNCiAgICAtCQkJcmVzID0gd2dldGNoKG1lbnVfd2luKGN1cnNlc19tZW51KSk7DQogICAgLQkJ
CWlmICghcmVzKQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWlmIChkb19tYXRjaChyZXMsICZt
YXRjaF9zdGF0ZSwgJnNlbGVjdGVkX2luZGV4KSA9PSAwKSB7DQogICAgLQkJCQlpZiAoc2VsZWN0
ZWRfaW5kZXggIT0gLTEpDQogICAgLQkJCQkJY2VudGVyX2l0ZW0oc2VsZWN0ZWRfaW5kZXgsDQog
ICAgLQkJCQkJCSAgICAmbGFzdF90b3Bfcm93KTsNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0J
CQl9DQogICAgLQkJCWlmIChwcm9jZXNzX3NwZWNpYWxfa2V5cygNCiAgICAtCQkJCQkJJnJlcywN
CiAgICAtCQkJCQkJKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKSkNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0JCQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCQljYXNlIEtFWV9ET1dOOg0KICAgIC0J
CQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9ET1dOX0lURU0pOw0KICAgIC0JCQkJYnJl
YWs7DQogICAgLQkJCWNhc2UgS0VZX1VQOg0KICAgIC0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21l
bnUsIFJFUV9VUF9JVEVNKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9OUEFH
RToNCiAgICAtCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfU0NSX0RQQUdFKTsNCiAg
ICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9QUEFHRToNCiAgICAtCQkJCW1lbnVfZHJp
dmVyKGN1cnNlc19tZW51LCBSRVFfU0NSX1VQQUdFKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0J
CQljYXNlIEtFWV9IT01FOg0KICAgIC0JCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9G
SVJTVF9JVEVNKTsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCQljYXNlIEtFWV9FTkQ6DQogICAg
LQkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0xBU1RfSVRFTSk7DQogICAgLQkJCQli
cmVhazsNCiAgICAtCQkJY2FzZSAnaCc6DQogICAgLQkJCWNhc2UgJz8nOg0KICAgIC0JCQkJc2hv
d19oZWxwKChzdHJ1Y3QgbWVudSAqKSBpdGVtX2RhdGEoKSk7DQogICAgLQkJCQlicmVhazsNCiAg
ICAtCQkJfQ0KICAgIC0JCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fCByZXMgPT0gJyAn
IHx8DQogICAgLQkJCQkJcmVzID09IEtFWV9MRUZUKXsNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0J
CQl9DQogICAgLQkJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOw0KICAgIC0JCX0N
CiAgICAtCQkvKiBpZiBFU0Mgb3IgbGVmdCAqLw0KICAgIC0JCWlmIChyZXMgPT0gMjcgfHwgcmVz
ID09IEtFWV9MRUZUKQ0KICAgIC0JCQlicmVhazsNCiAgICAtDQogICAgLQkJY2hpbGQgPSBpdGVt
X2RhdGEoKTsNCiAgICAtCQlpZiAoIWNoaWxkIHx8ICFtZW51X2lzX3Zpc2libGUoY2hpbGQpIHx8
ICFjaGlsZC0+c3ltKQ0KICAgIC0JCQljb250aW51ZTsNCiAgICAtCQlzd2l0Y2ggKHJlcykgew0K
ICAgIC0JCWNhc2UgJyAnOg0KICAgIC0JCWNhc2UgIDEwOg0KICAgIC0JCWNhc2UgS0VZX1JJR0hU
Og0KICAgIC0JCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKGNoaWxkLT5zeW0sIHllcyk7DQogICAg
LQkJCXJldHVybjsNCiAgICAtCQljYXNlICdoJzoNCiAgICAtCQljYXNlICc/JzoNCiAgICAtCQkJ
c2hvd19oZWxwKGNoaWxkKTsNCiAgICAtCQkJYWN0aXZlID0gY2hpbGQtPnN5bTsNCiAgICAtCQkJ
YnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRVhJVDoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0N
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9zdHJpbmcoc3Ry
dWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVf
Z2V0X3Byb21wdChtZW51KTsNCiAgICAtDQogICAgLQl3aGlsZSAoMSkgew0KICAgIC0JCWludCBy
ZXM7DQogICAgLQkJY29uc3QgY2hhciAqaGVhZGluZzsNCiAgICAtDQogICAgLQkJc3dpdGNoIChz
eW1fZ2V0X3R5cGUobWVudS0+c3ltKSkgew0KICAgIC0JCWNhc2UgU19JTlQ6DQogICAgLQkJCWhl
YWRpbmcgPSBpbnB1dGJveF9pbnN0cnVjdGlvbnNfaW50Ow0KICAgIC0JCQlicmVhazsNCiAgICAt
CQljYXNlIFNfSEVYOg0KICAgIC0JCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hl
eDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBTX1NUUklORzoNCiAgICAtCQkJaGVhZGlu
ZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19zdHJpbmc7DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CWRlZmF1bHQ6DQogICAgLQkJCWhlYWRpbmcgPSAiSW50ZXJuYWwgbmNvbmYgZXJyb3IhIjsNCiAg
ICAtCQl9DQogICAgLQkJcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LA0KICAgIC0J
CQkJcHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsDQogICAgLQkJCQloZWFkaW5nLA0KICAg
IC0JCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltKSwNCiAgICAtCQkJCSZkaWFsb2df
aW5wdXRfcmVzdWx0LA0KICAgIC0JCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsNCiAgICAt
CQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJaWYgKHN5bV9zZXRfc3Ry
aW5nX3ZhbHVlKG1lbnUtPnN5bSwNCiAgICAtCQkJCQkJZGlhbG9nX2lucHV0X3Jlc3VsdCkpDQog
ICAgLQkJCQlyZXR1cm47DQogICAgLQkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csDQogICAgLQkJ
CQkiWW91IGhhdmUgbWFkZSBhbiBpbnZhbGlkIGVudHJ5LiIsIDApOw0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIDE6DQogICAgLQkJCXNob3dfaGVscChtZW51KTsNCiAgICAtCQkJYnJlYWs7
DQogICAgLQkJY2FzZSBLRVlfRVhJVDoNCiAgICAtCQkJcmV0dXJuOw0KICAgIC0JCX0NCiAgICAt
CX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpDQogICAg
LXsNCiAgICAtCXdoaWxlICgxKSB7DQogICAgLQkJaW50IHJlczsNCiAgICAtCQlyZXMgPSBkaWFs
b2dfaW5wdXRib3gobWFpbl93aW5kb3csDQogICAgLQkJCQlOVUxMLCBsb2FkX2NvbmZpZ190ZXh0
LA0KICAgIC0JCQkJZmlsZW5hbWUsDQogICAgLQkJCQkmZGlhbG9nX2lucHV0X3Jlc3VsdCwNCiAg
ICAtCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7DQogICAgLQkJc3dpdGNoIChyZXMpIHsN
CiAgICAtCQljYXNlIDA6DQogICAgLQkJCWlmICghZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkNCiAg
ICAtCQkJCXJldHVybjsNCiAgICAtCQkJaWYgKCFjb25mX3JlYWQoZGlhbG9nX2lucHV0X3Jlc3Vs
dCkpIHsNCiAgICAtCQkJCXNldF9jb25maWdfZmlsZW5hbWUoZGlhbG9nX2lucHV0X3Jlc3VsdCk7
DQogICAgLQkJCQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsNCiAgICAtCQkJCXJldHVybjsNCiAg
ICAtCQkJfQ0KICAgIC0JCQlidG5fZGlhbG9nKG1haW5fd2luZG93LCAiRmlsZSBkb2VzIG5vdCBl
eGlzdCEiLCAwKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAxOg0KICAgIC0JCQlzaG93
X3Njcm9sbF93aW4obWFpbl93aW5kb3csDQogICAgLQkJCQkJIkxvYWQgQWx0ZXJuYXRlIENvbmZp
Z3VyYXRpb24iLA0KICAgIC0JCQkJCWxvYWRfY29uZmlnX2hlbHApOw0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIEtFWV9FWElUOg0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJfQ0KICAgIC0J
fQ0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBjb25mX3NhdmUodm9pZCkNCiAgICAt
ew0KICAgIC0Jd2hpbGUgKDEpIHsNCiAgICAtCQlpbnQgcmVzOw0KICAgIC0JCXJlcyA9IGRpYWxv
Z19pbnB1dGJveChtYWluX3dpbmRvdywNCiAgICAtCQkJCU5VTEwsIHNhdmVfY29uZmlnX3RleHQs
DQogICAgLQkJCQlmaWxlbmFtZSwNCiAgICAtCQkJCSZkaWFsb2dfaW5wdXRfcmVzdWx0LA0KICAg
IC0JCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsNCiAgICAtCQlzd2l0Y2ggKHJlcykgew0K
ICAgIC0JCWNhc2UgMDoNCiAgICAtCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVzdWx0WzBdKQ0KICAg
IC0JCQkJcmV0dXJuOw0KICAgIC0JCQlyZXMgPSBjb25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1
bHQpOw0KICAgIC0JCQlpZiAoIXJlcykgew0KICAgIC0JCQkJc2V0X2NvbmZpZ19maWxlbmFtZShk
aWFsb2dfaW5wdXRfcmVzdWx0KTsNCiAgICAtCQkJCXJldHVybjsNCiAgICAtCQkJfQ0KICAgIC0J
CQlidG5fZGlhbG9nKG1haW5fd2luZG93LCAiQ2FuJ3QgY3JlYXRlIGZpbGUhIiwNCiAgICAtCQkJ
CTEsICI8T0s+Iik7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgMToNCiAgICAtCQkJc2hv
d19zY3JvbGxfd2luKG1haW5fd2luZG93LA0KICAgIC0JCQkJIlNhdmUgQWx0ZXJuYXRlIENvbmZp
Z3VyYXRpb24iLA0KICAgIC0JCQkJc2F2ZV9jb25maWdfaGVscCk7DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCWNhc2UgS0VZX0VYSVQ6DQogICAgLQkJCXJldHVybjsNCiAgICAtCQl9DQogICAgLQl9
DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHNldHVwX3dpbmRvd3Modm9pZCkNCiAg
ICAtew0KICAgIC0JaW50IGxpbmVzLCBjb2x1bW5zOw0KICAgIC0NCiAgICAtCWdldG1heHl4KHN0
ZHNjciwgbGluZXMsIGNvbHVtbnMpOw0KICAgIC0NCiAgICAtCWlmIChtYWluX3dpbmRvdyAhPSBO
VUxMKQ0KICAgIC0JCWRlbHdpbihtYWluX3dpbmRvdyk7DQogICAgLQ0KICAgIC0JLyogc2V0IHVw
IHRoZSBtZW51IGFuZCBtZW51IHdpbmRvdyAqLw0KICAgIC0JbWFpbl93aW5kb3cgPSBuZXd3aW4o
bGluZXMtMiwgY29sdW1ucy0yLCAyLCAxKTsNCiAgICAtCWtleXBhZChtYWluX3dpbmRvdywgVFJV
RSk7DQogICAgLQltd2luX21heF9saW5lcyA9IGxpbmVzLTc7DQogICAgLQltd2luX21heF9jb2xz
ID0gY29sdW1ucy02Ow0KICAgIC0NCiAgICAtCS8qIHBhbmVscyBvcmRlciBpcyBmcm9tIGJvdHRv
bSB0byB0b3AgKi8NCiAgICAtCW5ld19wYW5lbChtYWluX3dpbmRvdyk7DQogICAgLX0NCiAgICAt
DQogICAgLWludCBtYWluKGludCBhYywgY2hhciAqKmF2KQ0KICAgIC17DQogICAgLQlpbnQgbGlu
ZXMsIGNvbHVtbnM7DQogICAgLQljaGFyICptb2RlOw0KICAgIC0NCiAgICAtCWlmIChhYyA+IDEg
JiYgc3RyY21wKGF2WzFdLCAiLXMiKSA9PSAwKSB7DQogICAgLQkJLyogU2lsZW5jZSBjb25mX3Jl
YWQoKSB1bnRpbCB0aGUgcmVhbCBjYWxsYmFjayBpcyBzZXQgdXAgKi8NCiAgICAtCQljb25mX3Nl
dF9tZXNzYWdlX2NhbGxiYWNrKE5VTEwpOw0KICAgIC0JCWF2Kys7DQogICAgLQl9DQogICAgLQlj
b25mX3BhcnNlKGF2WzFdKTsNCiAgICAtCWNvbmZfcmVhZChOVUxMKTsNCiAgICAtDQogICAgLQlt
b2RlID0gZ2V0ZW52KCJOQ09ORklHX01PREUiKTsNCiAgICAtCWlmIChtb2RlKSB7DQogICAgLQkJ
aWYgKCFzdHJjYXNlY21wKG1vZGUsICJzaW5nbGVfbWVudSIpKQ0KICAgIC0JCQlzaW5nbGVfbWVu
dV9tb2RlID0gMTsNCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBJbml0aWFsaXplIGN1cnNlcyAq
Lw0KICAgIC0JaW5pdHNjcigpOw0KICAgIC0JLyogc2V0IGNvbG9yIHRoZW1lICovDQogICAgLQlz
ZXRfY29sb3JzKCk7DQogICAgLQ0KICAgIC0JY2JyZWFrKCk7DQogICAgLQlub2VjaG8oKTsNCiAg
ICAtCWtleXBhZChzdGRzY3IsIFRSVUUpOw0KICAgIC0JY3Vyc19zZXQoMCk7DQogICAgLQ0KICAg
IC0JZ2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7DQogICAgLQlpZiAoY29sdW1ucyA8
IDc1IHx8IGxpbmVzIDwgMjApIHsNCiAgICAtCQllbmR3aW4oKTsNCiAgICAtCQlwcmludGYoIllv
dXIgdGVybWluYWwgc2hvdWxkIGhhdmUgYXQgIg0KICAgIC0JCQkibGVhc3QgMjAgbGluZXMgYW5k
IDc1IGNvbHVtbnNcbiIpOw0KICAgIC0JCXJldHVybiAxOw0KICAgIC0JfQ0KICAgIC0NCiAgICAt
CW5vdGltZW91dChzdGRzY3IsIEZBTFNFKTsNCiAgICAtI2lmIE5DVVJTRVNfUkVFTlRSQU5UDQog
ICAgLQlzZXRfZXNjZGVsYXkoMSk7DQogICAgLSNlbHNlDQogICAgLQlFU0NERUxBWSA9IDE7DQog
ICAgLSNlbmRpZg0KICAgIC0NCiAgICAtCS8qIHNldCBidG5zIG1lbnUgKi8NCiAgICAtCWN1cnNl
c19tZW51ID0gbmV3X21lbnUoY3Vyc2VzX21lbnVfaXRlbXMpOw0KICAgIC0JbWVudV9vcHRzX29m
ZihjdXJzZXNfbWVudSwgT19TSE9XREVTQyk7DQogICAgLQltZW51X29wdHNfb24oY3Vyc2VzX21l
bnUsIE9fU0hPV01BVENIKTsNCiAgICAtCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19PTkVW
QUxVRSk7DQogICAgLQltZW51X29wdHNfb24oY3Vyc2VzX21lbnUsIE9fTk9OQ1lDTElDKTsNCiAg
ICAtCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19JR05PUkVDQVNFKTsNCiAgICAtCXNldF9t
ZW51X21hcmsoY3Vyc2VzX21lbnUsICIgIik7DQogICAgLQlzZXRfbWVudV9mb3JlKGN1cnNlc19t
ZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9GT1JFXSk7DQogICAgLQlzZXRfbWVudV9iYWNrKGN1
cnNlc19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9CQUNLXSk7DQogICAgLQlzZXRfbWVudV9n
cmV5KGN1cnNlc19tZW51LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9HUkVZXSk7DQogICAgLQ0KICAg
IC0Jc2V0X2NvbmZpZ19maWxlbmFtZShjb25mX2dldF9jb25maWduYW1lKCkpOw0KICAgIC0Jc2V0
dXBfd2luZG93cygpOw0KICAgIC0NCiAgICAtCS8qIGNoZWNrIGZvciBLRVlfRlVOQygxKSAqLw0K
ICAgIC0JaWYgKGhhc19rZXkoS0VZX0YoMSkpID09IEZBTFNFKSB7DQogICAgLQkJc2hvd19zY3Jv
bGxfd2luKG1haW5fd2luZG93LA0KICAgIC0JCQkJIkluc3RydWN0aW9ucyIsDQogICAgLQkJCQlt
ZW51X25vX2ZfaW5zdHJ1Y3Rpb25zKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQljb25mX3NldF9t
ZXNzYWdlX2NhbGxiYWNrKGNvbmZfbWVzc2FnZV9jYWxsYmFjayk7DQogICAgLQkvKiBkbyB0aGUg
d29yayAqLw0KICAgIC0Jd2hpbGUgKCFnbG9iYWxfZXhpdCkgew0KICAgIC0JCWNvbmYoJnJvb3Rt
ZW51KTsNCiAgICAtCQlpZiAoIWdsb2JhbF9leGl0ICYmIGRvX2V4aXQoKSA9PSAwKQ0KICAgIC0J
CQlicmVhazsNCiAgICAtCX0NCiAgICAtCS8qIG9rLCB3ZSBhcmUgZG9uZSAqLw0KICAgIC0JdW5w
b3N0X21lbnUoY3Vyc2VzX21lbnUpOw0KICAgIC0JZnJlZV9tZW51KGN1cnNlc19tZW51KTsNCiAg
ICAtCWRlbHdpbihtYWluX3dpbmRvdyk7DQogICAgLQljbGVhcigpOw0KICAgIC0JcmVmcmVzaCgp
Ow0KICAgIC0JZW5kd2luKCk7DQogICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIGRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1aS5jIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9uY29uZi5ndWkuYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDc3
ZjUyNWEuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmd1aS5j
DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDY2NCArMCwwIEBADQogICAgLS8vIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAo
QykgMjAwOCBOaXIgVHphY2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPg0KICAgIC0gKg0KICAg
IC0gKiBEZXJpdmVkIGZyb20gbWVudWNvbmZpZy4NCiAgICAtICovDQogICAgLSNpbmNsdWRlICJu
Y29uZi5oIg0KICAgIC0jaW5jbHVkZSAibGtjLmgiDQogICAgLQ0KICAgIC0vKiBhIGxpc3Qgb2Yg
YWxsIHRoZSBkaWZmZXJlbnQgd2lkZ2V0cyB3ZSB1c2UgKi8NCiAgICAtYXR0cmlidXRlc190IGF0
dHJpYnV0ZXNbQVRUUl9NQVgrMV0gPSB7MH07DQogICAgLQ0KICAgIC0vKiBhdmFpbGFibGUgY29s
b3JzOg0KICAgIC0gICBDT0xPUl9CTEFDSyAgIDANCiAgICAtICAgQ09MT1JfUkVEICAgICAxDQog
ICAgLSAgIENPTE9SX0dSRUVOICAgMg0KICAgIC0gICBDT0xPUl9ZRUxMT1cgIDMNCiAgICAtICAg
Q09MT1JfQkxVRSAgICA0DQogICAgLSAgIENPTE9SX01BR0VOVEEgNQ0KICAgIC0gICBDT0xPUl9D
WUFOICAgIDYNCiAgICAtICAgQ09MT1JfV0hJVEUgICA3DQogICAgLSAgICovDQogICAgLXN0YXRp
YyB2b2lkIHNldF9ub3JtYWxfY29sb3JzKHZvaWQpDQogICAgLXsNCiAgICAtCWluaXRfcGFpcihO
T1JNQUwsIC0xLCAtMSk7DQogICAgLQlpbml0X3BhaXIoTUFJTl9IRUFESU5HLCBDT0xPUl9NQUdF
TlRBLCAtMSk7DQogICAgLQ0KICAgIC0JLyogRk9SRSBpcyBmb3IgdGhlIHNlbGVjdGVkIGl0ZW0g
Ki8NCiAgICAtCWluaXRfcGFpcihNQUlOX01FTlVfRk9SRSwgLTEsIC0xKTsNCiAgICAtCS8qIEJB
Q0sgZm9yIGFsbCB0aGUgcmVzdCAqLw0KICAgIC0JaW5pdF9wYWlyKE1BSU5fTUVOVV9CQUNLLCAt
MSwgLTEpOw0KICAgIC0JaW5pdF9wYWlyKE1BSU5fTUVOVV9HUkVZLCAtMSwgLTEpOw0KICAgIC0J
aW5pdF9wYWlyKE1BSU5fTUVOVV9IRUFESU5HLCBDT0xPUl9HUkVFTiwgLTEpOw0KICAgIC0JaW5p
dF9wYWlyKE1BSU5fTUVOVV9CT1gsIENPTE9SX1lFTExPVywgLTEpOw0KICAgIC0NCiAgICAtCWlu
aXRfcGFpcihTQ1JPTExXSU5fVEVYVCwgLTEsIC0xKTsNCiAgICAtCWluaXRfcGFpcihTQ1JPTExX
SU5fSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsNCiAgICAtCWluaXRfcGFpcihTQ1JPTExXSU5f
Qk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsNCiAgICAtDQogICAgLQlpbml0X3BhaXIoRElBTE9HX1RF
WFQsIC0xLCAtMSk7DQogICAgLQlpbml0X3BhaXIoRElBTE9HX0JPWCwgQ09MT1JfWUVMTE9XLCAt
MSk7DQogICAgLQlpbml0X3BhaXIoRElBTE9HX01FTlVfQkFDSywgQ09MT1JfWUVMTE9XLCAtMSk7
DQogICAgLQlpbml0X3BhaXIoRElBTE9HX01FTlVfRk9SRSwgQ09MT1JfUkVELCAtMSk7DQogICAg
LQ0KICAgIC0JaW5pdF9wYWlyKElOUFVUX0JPWCwgQ09MT1JfWUVMTE9XLCAtMSk7DQogICAgLQlp
bml0X3BhaXIoSU5QVVRfSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsNCiAgICAtCWluaXRfcGFp
cihJTlBVVF9URVhULCAtMSwgLTEpOw0KICAgIC0JaW5pdF9wYWlyKElOUFVUX0ZJRUxELCAtMSwg
LTEpOw0KICAgIC0NCiAgICAtCWluaXRfcGFpcihGVU5DVElPTl9ISUdITElHSFQsIC0xLCAtMSk7
DQogICAgLQlpbml0X3BhaXIoRlVOQ1RJT05fVEVYVCwgQ09MT1JfWUVMTE9XLCAtMSk7DQogICAg
LX0NCiAgICAtDQogICAgLS8qIGF2YWlsYWJsZSBhdHRyaWJ1dGVzOg0KICAgIC0gICBBX05PUk1B
TCAgICAgICAgTm9ybWFsIGRpc3BsYXkgKG5vIGhpZ2hsaWdodCkNCiAgICAtICAgQV9TVEFORE9V
VCAgICAgIEJlc3QgaGlnaGxpZ2h0aW5nIG1vZGUgb2YgdGhlIHRlcm1pbmFsLg0KICAgIC0gICBB
X1VOREVSTElORSAgICAgVW5kZXJsaW5pbmcNCiAgICAtICAgQV9SRVZFUlNFICAgICAgIFJldmVy
c2UgdmlkZW8NCiAgICAtICAgQV9CTElOSyAgICAgICAgIEJsaW5raW5nDQogICAgLSAgIEFfRElN
ICAgICAgICAgICBIYWxmIGJyaWdodA0KICAgIC0gICBBX0JPTEQgICAgICAgICAgRXh0cmEgYnJp
Z2h0IG9yIGJvbGQNCiAgICAtICAgQV9QUk9URUNUICAgICAgIFByb3RlY3RlZCBtb2RlDQogICAg
LSAgIEFfSU5WSVMgICAgICAgICBJbnZpc2libGUgb3IgYmxhbmsgbW9kZQ0KICAgIC0gICBBX0FM
VENIQVJTRVQgICAgQWx0ZXJuYXRlIGNoYXJhY3RlciBzZXQNCiAgICAtICAgQV9DSEFSVEVYVCAg
ICAgIEJpdC1tYXNrIHRvIGV4dHJhY3QgYSBjaGFyYWN0ZXINCiAgICAtICAgQ09MT1JfUEFJUihu
KSAgIENvbG9yLXBhaXIgbnVtYmVyIG4NCiAgICAtICAgKi8NCiAgICAtc3RhdGljIHZvaWQgbm9y
bWFsX2NvbG9yX3RoZW1lKHZvaWQpDQogICAgLXsNCiAgICAtCS8qIGF1dG9tYXRpY2FsbHkgYWRk
IGNvbG9yLi4uICovDQogICAgLSNkZWZpbmUgbWthdHRyKG5hbWUsIGF0dHIpIGRvIHsgXA0KICAg
IC1hdHRyaWJ1dGVzW25hbWVdID0gYXR0ciB8IENPTE9SX1BBSVIobmFtZSk7IH0gd2hpbGUgKDAp
DQogICAgLQlta2F0dHIoTk9STUFMLCBOT1JNQUwpOw0KICAgIC0JbWthdHRyKE1BSU5fSEVBRElO
RywgQV9CT0xEIHwgQV9VTkRFUkxJTkUpOw0KICAgIC0NCiAgICAtCW1rYXR0cihNQUlOX01FTlVf
Rk9SRSwgQV9SRVZFUlNFKTsNCiAgICAtCW1rYXR0cihNQUlOX01FTlVfQkFDSywgQV9OT1JNQUwp
Ow0KICAgIC0JbWthdHRyKE1BSU5fTUVOVV9HUkVZLCBBX05PUk1BTCk7DQogICAgLQlta2F0dHIo
TUFJTl9NRU5VX0hFQURJTkcsIEFfQk9MRCk7DQogICAgLQlta2F0dHIoTUFJTl9NRU5VX0JPWCwg
QV9OT1JNQUwpOw0KICAgIC0NCiAgICAtCW1rYXR0cihTQ1JPTExXSU5fVEVYVCwgQV9OT1JNQUwp
Ow0KICAgIC0JbWthdHRyKFNDUk9MTFdJTl9IRUFESU5HLCBBX0JPTEQpOw0KICAgIC0JbWthdHRy
KFNDUk9MTFdJTl9CT1gsIEFfQk9MRCk7DQogICAgLQ0KICAgIC0JbWthdHRyKERJQUxPR19URVhU
LCBBX0JPTEQpOw0KICAgIC0JbWthdHRyKERJQUxPR19CT1gsIEFfQk9MRCk7DQogICAgLQlta2F0
dHIoRElBTE9HX01FTlVfRk9SRSwgQV9TVEFORE9VVCk7DQogICAgLQlta2F0dHIoRElBTE9HX01F
TlVfQkFDSywgQV9OT1JNQUwpOw0KICAgIC0NCiAgICAtCW1rYXR0cihJTlBVVF9CT1gsIEFfTk9S
TUFMKTsNCiAgICAtCW1rYXR0cihJTlBVVF9IRUFESU5HLCBBX0JPTEQpOw0KICAgIC0JbWthdHRy
KElOUFVUX1RFWFQsIEFfTk9STUFMKTsNCiAgICAtCW1rYXR0cihJTlBVVF9GSUVMRCwgQV9VTkRF
UkxJTkUpOw0KICAgIC0NCiAgICAtCW1rYXR0cihGVU5DVElPTl9ISUdITElHSFQsIEFfQk9MRCk7
DQogICAgLQlta2F0dHIoRlVOQ1RJT05fVEVYVCwgQV9SRVZFUlNFKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtc3RhdGljIHZvaWQgbm9fY29sb3JzX3RoZW1lKHZvaWQpDQogICAgLXsNCiAgICAtCS8q
IGF1dG9tYXRpY2FsbHkgYWRkIGhpZ2hsaWdodCwgbm8gY29sb3IgKi8NCiAgICAtI2RlZmluZSBt
a2F0dHJuKG5hbWUsIGF0dHIpIHsgYXR0cmlidXRlc1tuYW1lXSA9IGF0dHI7IH0NCiAgICAtDQog
ICAgLQlta2F0dHJuKE5PUk1BTCwgTk9STUFMKTsNCiAgICAtCW1rYXR0cm4oTUFJTl9IRUFESU5H
LCBBX0JPTEQgfCBBX1VOREVSTElORSk7DQogICAgLQ0KICAgIC0JbWthdHRybihNQUlOX01FTlVf
Rk9SRSwgQV9TVEFORE9VVCk7DQogICAgLQlta2F0dHJuKE1BSU5fTUVOVV9CQUNLLCBBX05PUk1B
TCk7DQogICAgLQlta2F0dHJuKE1BSU5fTUVOVV9HUkVZLCBBX05PUk1BTCk7DQogICAgLQlta2F0
dHJuKE1BSU5fTUVOVV9IRUFESU5HLCBBX0JPTEQpOw0KICAgIC0JbWthdHRybihNQUlOX01FTlVf
Qk9YLCBBX05PUk1BTCk7DQogICAgLQ0KICAgIC0JbWthdHRybihTQ1JPTExXSU5fVEVYVCwgQV9O
T1JNQUwpOw0KICAgIC0JbWthdHRybihTQ1JPTExXSU5fSEVBRElORywgQV9CT0xEKTsNCiAgICAt
CW1rYXR0cm4oU0NST0xMV0lOX0JPWCwgQV9CT0xEKTsNCiAgICAtDQogICAgLQlta2F0dHJuKERJ
QUxPR19URVhULCBBX05PUk1BTCk7DQogICAgLQlta2F0dHJuKERJQUxPR19CT1gsIEFfQk9MRCk7
DQogICAgLQlta2F0dHJuKERJQUxPR19NRU5VX0ZPUkUsIEFfU1RBTkRPVVQpOw0KICAgIC0JbWth
dHRybihESUFMT0dfTUVOVV9CQUNLLCBBX05PUk1BTCk7DQogICAgLQ0KICAgIC0JbWthdHRybihJ
TlBVVF9CT1gsIEFfQk9MRCk7DQogICAgLQlta2F0dHJuKElOUFVUX0hFQURJTkcsIEFfQk9MRCk7
DQogICAgLQlta2F0dHJuKElOUFVUX1RFWFQsIEFfTk9STUFMKTsNCiAgICAtCW1rYXR0cm4oSU5Q
VVRfRklFTEQsIEFfVU5ERVJMSU5FKTsNCiAgICAtDQogICAgLQlta2F0dHJuKEZVTkNUSU9OX0hJ
R0hMSUdIVCwgQV9CT0xEKTsNCiAgICAtCW1rYXR0cm4oRlVOQ1RJT05fVEVYVCwgQV9SRVZFUlNF
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBzZXRfY29sb3JzKHZvaWQpDQogICAgLXsNCiAg
ICAtCXN0YXJ0X2NvbG9yKCk7DQogICAgLQl1c2VfZGVmYXVsdF9jb2xvcnMoKTsNCiAgICAtCXNl
dF9ub3JtYWxfY29sb3JzKCk7DQogICAgLQlpZiAoaGFzX2NvbG9ycygpKSB7DQogICAgLQkJbm9y
bWFsX2NvbG9yX3RoZW1lKCk7DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCS8qIGdpdmUgZGVmYXVs
dHMgKi8NCiAgICAtCQlub19jb2xvcnNfdGhlbWUoKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0N
CiAgICAtDQogICAgLS8qIHRoaXMgY2hhbmdlcyB0aGUgd2luZG93cyBhdHRyaWJ1dGVzICEhISAq
Lw0KICAgIC12b2lkIHByaW50X2luX21pZGRsZShXSU5ET1cgKndpbiwNCiAgICAtCQlpbnQgc3Rh
cnR5LA0KICAgIC0JCWludCBzdGFydHgsDQogICAgLQkJaW50IHdpZHRoLA0KICAgIC0JCWNvbnN0
IGNoYXIgKnN0cmluZywNCiAgICAtCQljaHR5cGUgY29sb3IpDQogICAgLXsgICAgICBpbnQgbGVu
Z3RoLCB4LCB5Ow0KICAgIC0JZmxvYXQgdGVtcDsNCiAgICAtDQogICAgLQ0KICAgIC0JaWYgKHdp
biA9PSBOVUxMKQ0KICAgIC0JCXdpbiA9IHN0ZHNjcjsNCiAgICAtCWdldHl4KHdpbiwgeSwgeCk7
DQogICAgLQlpZiAoc3RhcnR4ICE9IDApDQogICAgLQkJeCA9IHN0YXJ0eDsNCiAgICAtCWlmIChz
dGFydHkgIT0gMCkNCiAgICAtCQl5ID0gc3RhcnR5Ow0KICAgIC0JaWYgKHdpZHRoID09IDApDQog
ICAgLQkJd2lkdGggPSA4MDsNCiAgICAtDQogICAgLQlsZW5ndGggPSBzdHJsZW4oc3RyaW5nKTsN
CiAgICAtCXRlbXAgPSAod2lkdGggLSBsZW5ndGgpIC8gMjsNCiAgICAtCXggPSBzdGFydHggKyAo
aW50KXRlbXA7DQogICAgLQkodm9pZCkgd2F0dHJzZXQod2luLCBjb2xvcik7DQogICAgLQltdndw
cmludHcod2luLCB5LCB4LCAiJXMiLCBzdHJpbmcpOw0KICAgIC0JcmVmcmVzaCgpOw0KICAgIC19
DQogICAgLQ0KICAgIC1pbnQgZ2V0X2xpbmVfbm8oY29uc3QgY2hhciAqdGV4dCkNCiAgICAtew0K
ICAgIC0JaW50IGk7DQogICAgLQlpbnQgdG90YWwgPSAxOw0KICAgIC0NCiAgICAtCWlmICghdGV4
dCkNCiAgICAtCQlyZXR1cm4gMDsNCiAgICAtDQogICAgLQlmb3IgKGkgPSAwOyB0ZXh0W2ldICE9
ICdcMCc7IGkrKykNCiAgICAtCQlpZiAodGV4dFtpXSA9PSAnXG4nKQ0KICAgIC0JCQl0b3RhbCsr
Ow0KICAgIC0JcmV0dXJuIHRvdGFsOw0KICAgIC19DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICpn
ZXRfbGluZShjb25zdCBjaGFyICp0ZXh0LCBpbnQgbGluZV9ubykNCiAgICAtew0KICAgIC0JaW50
IGk7DQogICAgLQlpbnQgbGluZXMgPSAwOw0KICAgIC0NCiAgICAtCWlmICghdGV4dCkNCiAgICAt
CQlyZXR1cm4gTlVMTDsNCiAgICAtDQogICAgLQlmb3IgKGkgPSAwOyB0ZXh0W2ldICE9ICdcMCcg
JiYgbGluZXMgPCBsaW5lX25vOyBpKyspDQogICAgLQkJaWYgKHRleHRbaV0gPT0gJ1xuJykNCiAg
ICAtCQkJbGluZXMrKzsNCiAgICAtCXJldHVybiB0ZXh0K2k7DQogICAgLX0NCiAgICAtDQogICAg
LWludCBnZXRfbGluZV9sZW5ndGgoY29uc3QgY2hhciAqbGluZSkNCiAgICAtew0KICAgIC0JaW50
IHJlcyA9IDA7DQogICAgLQl3aGlsZSAoKmxpbmUgIT0gJ1wwJyAmJiAqbGluZSAhPSAnXG4nKSB7
DQogICAgLQkJbGluZSsrOw0KICAgIC0JCXJlcysrOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIHJl
czsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogcHJpbnQgYWxsIGxpbmVzIHRvIHRoZSB3aW5kb3cu
ICovDQogICAgLXZvaWQgZmlsbF93aW5kb3coV0lORE9XICp3aW4sIGNvbnN0IGNoYXIgKnRleHQp
DQogICAgLXsNCiAgICAtCWludCB4LCB5Ow0KICAgIC0JaW50IHRvdGFsX2xpbmVzID0gZ2V0X2xp
bmVfbm8odGV4dCk7DQogICAgLQlpbnQgaTsNCiAgICAtDQogICAgLQlnZXRtYXh5eCh3aW4sIHks
IHgpOw0KICAgIC0JLyogZG8gbm90IGdvIG92ZXIgZW5kIG9mIGxpbmUgKi8NCiAgICAtCXRvdGFs
X2xpbmVzID0gbWluKHRvdGFsX2xpbmVzLCB5KTsNCiAgICAtCWZvciAoaSA9IDA7IGkgPCB0b3Rh
bF9saW5lczsgaSsrKSB7DQogICAgLQkJY2hhciB0bXBbeCsxMF07DQogICAgLQkJY29uc3QgY2hh
ciAqbGluZSA9IGdldF9saW5lKHRleHQsIGkpOw0KICAgIC0JCWludCBsZW4gPSBnZXRfbGluZV9s
ZW5ndGgobGluZSk7DQogICAgLQkJc3RybmNweSh0bXAsIGxpbmUsIG1pbihsZW4sIHgpKTsNCiAg
ICAtCQl0bXBbbGVuXSA9ICdcMCc7DQogICAgLQkJbXZ3cHJpbnR3KHdpbiwgaSwgMCwgIiVzIiwg
dG1wKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyogZ2V0IHRoZSBtZXNzYWdlLCBh
bmQgYnV0dG9ucy4NCiAgICAtICogZWFjaCBidXR0b24gbXVzdCBiZSBhIGNoYXIqDQogICAgLSAq
IHJldHVybiB0aGUgc2VsZWN0ZWQgYnV0dG9uDQogICAgLSAqDQogICAgLSAqIHRoaXMgZGlhbG9n
IGlzIHVzZWQgZm9yIDIgZGlmZmVyZW50IHRoaW5nczoNCiAgICAtICogMSkgc2hvdyBhIHRleHQg
Ym94LCBubyBidXR0b25zLg0KICAgIC0gKiAyKSBzaG93IGEgZGlhbG9nLCB3aXRoIGhvcml6b250
YWwgYnV0dG9ucw0KICAgIC0gKi8NCiAgICAtaW50IGJ0bl9kaWFsb2coV0lORE9XICptYWluX3dp
bmRvdywgY29uc3QgY2hhciAqbXNnLCBpbnQgYnRuX251bSwgLi4uKQ0KICAgIC17DQogICAgLQl2
YV9saXN0IGFwOw0KICAgIC0JY2hhciAqYnRuOw0KICAgIC0JaW50IGJ0bnNfd2lkdGggPSAwOw0K
ICAgIC0JaW50IG1zZ19saW5lcyA9IDA7DQogICAgLQlpbnQgbXNnX3dpZHRoID0gMDsNCiAgICAt
CWludCB0b3RhbF93aWR0aDsNCiAgICAtCWludCB3aW5fcm93cyA9IDA7DQogICAgLQlXSU5ET1cg
KndpbjsNCiAgICAtCVdJTkRPVyAqbXNnX3dpbjsNCiAgICAtCVdJTkRPVyAqbWVudV93aW47DQog
ICAgLQlNRU5VICptZW51Ow0KICAgIC0JSVRFTSAqYnRuc1tidG5fbnVtKzFdOw0KICAgIC0JaW50
IGksIHgsIHk7DQogICAgLQlpbnQgcmVzID0gLTE7DQogICAgLQ0KICAgIC0NCiAgICAtCXZhX3N0
YXJ0KGFwLCBidG5fbnVtKTsNCiAgICAtCWZvciAoaSA9IDA7IGkgPCBidG5fbnVtOyBpKyspIHsN
CiAgICAtCQlidG4gPSB2YV9hcmcoYXAsIGNoYXIgKik7DQogICAgLQkJYnRuc1tpXSA9IG5ld19p
dGVtKGJ0biwgIiIpOw0KICAgIC0JCWJ0bnNfd2lkdGggKz0gc3RybGVuKGJ0bikrMTsNCiAgICAt
CX0NCiAgICAtCXZhX2VuZChhcCk7DQogICAgLQlidG5zW2J0bl9udW1dID0gTlVMTDsNCiAgICAt
DQogICAgLQkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovDQogICAgLQltc2dfbGlu
ZXMgPSBnZXRfbGluZV9ubyhtc2cpOw0KICAgIC0JZm9yIChpID0gMDsgaSA8IG1zZ19saW5lczsg
aSsrKSB7DQogICAgLQkJY29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKG1zZywgaSk7DQogICAg
LQkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5lKTsNCiAgICAtCQlpZiAobXNnX3dpZHRo
IDwgbGVuKQ0KICAgIC0JCQltc2dfd2lkdGggPSBsZW47DQogICAgLQl9DQogICAgLQ0KICAgIC0J
dG90YWxfd2lkdGggPSBtYXgobXNnX3dpZHRoLCBidG5zX3dpZHRoKTsNCiAgICAtCS8qIHBsYWNl
IGRpYWxvZyBpbiBtaWRkbGUgb2Ygc2NyZWVuICovDQogICAgLQl5ID0gKGdldG1heHkoc3Rkc2Ny
KS0obXNnX2xpbmVzKzQpKS8yOw0KICAgIC0JeCA9IChnZXRtYXh4KHN0ZHNjciktKHRvdGFsX3dp
ZHRoKzQpKS8yOw0KICAgIC0NCiAgICAtDQogICAgLQkvKiBjcmVhdGUgdGhlIHdpbmRvd3MgKi8N
CiAgICAtCWlmIChidG5fbnVtID4gMCkNCiAgICAtCQl3aW5fcm93cyA9IG1zZ19saW5lcys0Ow0K
ICAgIC0JZWxzZQ0KICAgIC0JCXdpbl9yb3dzID0gbXNnX2xpbmVzKzI7DQogICAgLQ0KICAgIC0J
d2luID0gbmV3d2luKHdpbl9yb3dzLCB0b3RhbF93aWR0aCs0LCB5LCB4KTsNCiAgICAtCWtleXBh
ZCh3aW4sIFRSVUUpOw0KICAgIC0JbWVudV93aW4gPSBkZXJ3aW4od2luLCAxLCBidG5zX3dpZHRo
LCB3aW5fcm93cy0yLA0KICAgIC0JCQkxKyh0b3RhbF93aWR0aCsyLWJ0bnNfd2lkdGgpLzIpOw0K
ICAgIC0JbWVudSA9IG5ld19tZW51KGJ0bnMpOw0KICAgIC0JbXNnX3dpbiA9IGRlcndpbih3aW4s
IHdpbl9yb3dzLTIsIG1zZ193aWR0aCwgMSwNCiAgICAtCQkJMSsodG90YWxfd2lkdGgrMi1tc2df
d2lkdGgpLzIpOw0KICAgIC0NCiAgICAtCXNldF9tZW51X2ZvcmUobWVudSwgYXR0cmlidXRlc1tE
SUFMT0dfTUVOVV9GT1JFXSk7DQogICAgLQlzZXRfbWVudV9iYWNrKG1lbnUsIGF0dHJpYnV0ZXNb
RElBTE9HX01FTlVfQkFDS10pOw0KICAgIC0NCiAgICAtCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0
dHJpYnV0ZXNbRElBTE9HX0JPWF0pOw0KICAgIC0JYm94KHdpbiwgMCwgMCk7DQogICAgLQ0KICAg
IC0JLyogcHJpbnQgbWVzc2FnZSAqLw0KICAgIC0JKHZvaWQpIHdhdHRyc2V0KG1zZ193aW4sIGF0
dHJpYnV0ZXNbRElBTE9HX1RFWFRdKTsNCiAgICAtCWZpbGxfd2luZG93KG1zZ193aW4sIG1zZyk7
DQogICAgLQ0KICAgIC0Jc2V0X21lbnVfd2luKG1lbnUsIHdpbik7DQogICAgLQlzZXRfbWVudV9z
dWIobWVudSwgbWVudV93aW4pOw0KICAgIC0Jc2V0X21lbnVfZm9ybWF0KG1lbnUsIDEsIGJ0bl9u
dW0pOw0KICAgIC0JbWVudV9vcHRzX29mZihtZW51LCBPX1NIT1dERVNDKTsNCiAgICAtCW1lbnVf
b3B0c19vZmYobWVudSwgT19TSE9XTUFUQ0gpOw0KICAgIC0JbWVudV9vcHRzX29uKG1lbnUsIE9f
T05FVkFMVUUpOw0KICAgIC0JbWVudV9vcHRzX29uKG1lbnUsIE9fTk9OQ1lDTElDKTsNCiAgICAt
CXNldF9tZW51X21hcmsobWVudSwgIiIpOw0KICAgIC0JcG9zdF9tZW51KG1lbnUpOw0KICAgIC0N
CiAgICAtDQogICAgLQl0b3VjaHdpbih3aW4pOw0KICAgIC0JcmVmcmVzaF9hbGxfd2luZG93cyht
YWluX3dpbmRvdyk7DQogICAgLQl3aGlsZSAoKHJlcyA9IHdnZXRjaCh3aW4pKSkgew0KICAgIC0J
CXN3aXRjaCAocmVzKSB7DQogICAgLQkJY2FzZSBLRVlfTEVGVDoNCiAgICAtCQkJbWVudV9kcml2
ZXIobWVudSwgUkVRX0xFRlRfSVRFTSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZ
X1JJR0hUOg0KICAgIC0JCQltZW51X2RyaXZlcihtZW51LCBSRVFfUklHSFRfSVRFTSk7DQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgMTA6IC8qIEVOVEVSICovDQogICAgLQkJY2FzZSAyNzog
LyogRVNDQVBFICovDQogICAgLQkJY2FzZSAnICc6DQogICAgLQkJY2FzZSBLRVlfRihGX0JBQ0sp
Og0KICAgIC0JCWNhc2UgS0VZX0YoRl9FWElUKToNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0K
ICAgIC0JCXRvdWNod2luKHdpbik7DQogICAgLQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dp
bmRvdyk7DQogICAgLQ0KICAgIC0JCWlmIChyZXMgPT0gMTAgfHwgcmVzID09ICcgJykgew0KICAg
IC0JCQlyZXMgPSBpdGVtX2luZGV4KGN1cnJlbnRfaXRlbShtZW51KSk7DQogICAgLQkJCWJyZWFr
Ow0KICAgIC0JCX0gZWxzZSBpZiAocmVzID09IDI3IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8
DQogICAgLQkJCQlyZXMgPT0gS0VZX0YoRl9FWElUKSkgew0KICAgIC0JCQlyZXMgPSBLRVlfRVhJ
VDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCXVucG9z
dF9tZW51KG1lbnUpOw0KICAgIC0JZnJlZV9tZW51KG1lbnUpOw0KICAgIC0JZm9yIChpID0gMDsg
aSA8IGJ0bl9udW07IGkrKykNCiAgICAtCQlmcmVlX2l0ZW0oYnRuc1tpXSk7DQogICAgLQ0KICAg
IC0JZGVsd2luKHdpbik7DQogICAgLQlyZXR1cm4gcmVzOw0KICAgIC19DQogICAgLQ0KICAgIC1p
bnQgZGlhbG9nX2lucHV0Ym94KFdJTkRPVyAqbWFpbl93aW5kb3csDQogICAgLQkJY29uc3QgY2hh
ciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwNCiAgICAtCQljb25zdCBjaGFyICppbml0LCBj
aGFyICoqcmVzdWx0cCwgaW50ICpyZXN1bHRfbGVuKQ0KICAgIC17DQogICAgLQlpbnQgcHJvbXB0
X2xpbmVzID0gMDsNCiAgICAtCWludCBwcm9tcHRfd2lkdGggPSAwOw0KICAgIC0JV0lORE9XICp3
aW47DQogICAgLQlXSU5ET1cgKnByb21wdF93aW47DQogICAgLQlXSU5ET1cgKmZvcm1fd2luOw0K
ICAgIC0JUEFORUwgKnBhbmVsOw0KICAgIC0JaW50IGksIHgsIHksIGxpbmVzLCBjb2x1bW5zLCB3
aW5fbGluZXMsIHdpbl9jb2xzOw0KICAgIC0JaW50IHJlcyA9IC0xOw0KICAgIC0JaW50IGN1cnNv
cl9wb3NpdGlvbiA9IHN0cmxlbihpbml0KTsNCiAgICAtCWludCBjdXJzb3JfZm9ybV93aW47DQog
ICAgLQljaGFyICpyZXN1bHQgPSAqcmVzdWx0cDsNCiAgICAtDQogICAgLQlnZXRtYXh5eChzdGRz
Y3IsIGxpbmVzLCBjb2x1bW5zKTsNCiAgICAtDQogICAgLQlpZiAoc3RybGVuKGluaXQpKzEgPiAq
cmVzdWx0X2xlbikgew0KICAgIC0JCSpyZXN1bHRfbGVuID0gc3RybGVuKGluaXQpKzE7DQogICAg
LQkJKnJlc3VsdHAgPSByZXN1bHQgPSB4cmVhbGxvYyhyZXN1bHQsICpyZXN1bHRfbGVuKTsNCiAg
ICAtCX0NCiAgICAtDQogICAgLQkvKiBmaW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovDQog
ICAgLQlwcm9tcHRfbGluZXMgPSBnZXRfbGluZV9ubyhwcm9tcHQpOw0KICAgIC0JZm9yIChpID0g
MDsgaSA8IHByb21wdF9saW5lczsgaSsrKSB7DQogICAgLQkJY29uc3QgY2hhciAqbGluZSA9IGdl
dF9saW5lKHByb21wdCwgaSk7DQogICAgLQkJaW50IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5l
KTsNCiAgICAtCQlwcm9tcHRfd2lkdGggPSBtYXgocHJvbXB0X3dpZHRoLCBsZW4pOw0KICAgIC0J
fQ0KICAgIC0NCiAgICAtCWlmICh0aXRsZSkNCiAgICAtCQlwcm9tcHRfd2lkdGggPSBtYXgocHJv
bXB0X3dpZHRoLCBzdHJsZW4odGl0bGUpKTsNCiAgICAtDQogICAgLQl3aW5fbGluZXMgPSBtaW4o
cHJvbXB0X2xpbmVzKzYsIGxpbmVzLTIpOw0KICAgIC0Jd2luX2NvbHMgPSBtaW4ocHJvbXB0X3dp
ZHRoKzcsIGNvbHVtbnMtMik7DQogICAgLQlwcm9tcHRfbGluZXMgPSBtYXgod2luX2xpbmVzLTYs
IDApOw0KICAgIC0JcHJvbXB0X3dpZHRoID0gbWF4KHdpbl9jb2xzLTcsIDApOw0KICAgIC0NCiAg
ICAtCS8qIHBsYWNlIGRpYWxvZyBpbiBtaWRkbGUgb2Ygc2NyZWVuICovDQogICAgLQl5ID0gKGxp
bmVzLXdpbl9saW5lcykvMjsNCiAgICAtCXggPSAoY29sdW1ucy13aW5fY29scykvMjsNCiAgICAt
DQogICAgLQlzdHJuY3B5KHJlc3VsdCwgaW5pdCwgKnJlc3VsdF9sZW4pOw0KICAgIC0NCiAgICAt
CS8qIGNyZWF0ZSB0aGUgd2luZG93cyAqLw0KICAgIC0Jd2luID0gbmV3d2luKHdpbl9saW5lcywg
d2luX2NvbHMsIHksIHgpOw0KICAgIC0JcHJvbXB0X3dpbiA9IGRlcndpbih3aW4sIHByb21wdF9s
aW5lcysxLCBwcm9tcHRfd2lkdGgsIDIsIDIpOw0KICAgIC0JZm9ybV93aW4gPSBkZXJ3aW4od2lu
LCAxLCBwcm9tcHRfd2lkdGgsIHByb21wdF9saW5lcyszLCAyKTsNCiAgICAtCWtleXBhZChmb3Jt
X3dpbiwgVFJVRSk7DQogICAgLQ0KICAgIC0JKHZvaWQpIHdhdHRyc2V0KGZvcm1fd2luLCBhdHRy
aWJ1dGVzW0lOUFVUX0ZJRUxEXSk7DQogICAgLQ0KICAgIC0JKHZvaWQpIHdhdHRyc2V0KHdpbiwg
YXR0cmlidXRlc1tJTlBVVF9CT1hdKTsNCiAgICAtCWJveCh3aW4sIDAsIDApOw0KICAgIC0JKHZv
aWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tJTlBVVF9IRUFESU5HXSk7DQogICAgLQlpZiAo
dGl0bGUpDQogICAgLQkJbXZ3cHJpbnR3KHdpbiwgMCwgMywgIiVzIiwgdGl0bGUpOw0KICAgIC0N
CiAgICAtCS8qIHByaW50IG1lc3NhZ2UgKi8NCiAgICAtCSh2b2lkKSB3YXR0cnNldChwcm9tcHRf
d2luLCBhdHRyaWJ1dGVzW0lOUFVUX1RFWFRdKTsNCiAgICAtCWZpbGxfd2luZG93KHByb21wdF93
aW4sIHByb21wdCk7DQogICAgLQ0KICAgIC0JbXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAiJSpz
IiwgcHJvbXB0X3dpZHRoLCAiICIpOw0KICAgIC0JY3Vyc29yX2Zvcm1fd2luID0gbWluKGN1cnNv
cl9wb3NpdGlvbiwgcHJvbXB0X3dpZHRoLTEpOw0KICAgIC0JbXZ3cHJpbnR3KGZvcm1fd2luLCAw
LCAwLCAiJXMiLA0KICAgIC0JCSAgcmVzdWx0ICsgY3Vyc29yX3Bvc2l0aW9uLWN1cnNvcl9mb3Jt
X3dpbik7DQogICAgLQ0KICAgIC0JLyogY3JlYXRlIHBhbmVscyAqLw0KICAgIC0JcGFuZWwgPSBu
ZXdfcGFuZWwod2luKTsNCiAgICAtDQogICAgLQkvKiBzaG93IHRoZSBjdXJzb3IgKi8NCiAgICAt
CWN1cnNfc2V0KDEpOw0KICAgIC0NCiAgICAtCXRvdWNod2luKHdpbik7DQogICAgLQlyZWZyZXNo
X2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICAtCXdoaWxlICgocmVzID0gd2dldGNoKGZv
cm1fd2luKSkpIHsNCiAgICAtCQlpbnQgbGVuID0gc3RybGVuKHJlc3VsdCk7DQogICAgLQkJc3dp
dGNoIChyZXMpIHsNCiAgICAtCQljYXNlIDEwOiAvKiBFTlRFUiAqLw0KICAgIC0JCWNhc2UgMjc6
IC8qIEVTQ0FQRSAqLw0KICAgIC0JCWNhc2UgS0VZX0YoRl9IRUxQKToNCiAgICAtCQljYXNlIEtF
WV9GKEZfRVhJVCk6DQogICAgLQkJY2FzZSBLRVlfRihGX0JBQ0spOg0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlIDg6ICAgLyogXkggKi8NCiAgICAtCQljYXNlIDEyNzogLyogXj8gKi8NCiAg
ICAtCQljYXNlIEtFWV9CQUNLU1BBQ0U6DQogICAgLQkJCWlmIChjdXJzb3JfcG9zaXRpb24gPiAw
KSB7DQogICAgLQkJCQltZW1tb3ZlKCZyZXN1bHRbY3Vyc29yX3Bvc2l0aW9uLTFdLA0KICAgIC0J
CQkJCQkmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0sDQogICAgLQkJCQkJCWxlbi1jdXJzb3JfcG9z
aXRpb24rMSk7DQogICAgLQkJCQljdXJzb3JfcG9zaXRpb24tLTsNCiAgICAtCQkJCWN1cnNvcl9m
b3JtX3dpbi0tOw0KICAgIC0JCQkJbGVuLS07DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQog
ICAgLQkJY2FzZSBLRVlfREM6DQogICAgLQkJCWlmIChjdXJzb3JfcG9zaXRpb24gPj0gMCAmJiBj
dXJzb3JfcG9zaXRpb24gPCBsZW4pIHsNCiAgICAtCQkJCW1lbW1vdmUoJnJlc3VsdFtjdXJzb3Jf
cG9zaXRpb25dLA0KICAgIC0JCQkJCQkmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbisxXSwNCiAgICAt
CQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlvbisxKTsNCiAgICAtCQkJCWxlbi0tOw0KICAgIC0JCQl9
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX1VQOg0KICAgIC0JCWNhc2UgS0VZX1JJ
R0hUOg0KICAgIC0JCQlpZiAoY3Vyc29yX3Bvc2l0aW9uIDwgbGVuKSB7DQogICAgLQkJCQljdXJz
b3JfcG9zaXRpb24rKzsNCiAgICAtCQkJCWN1cnNvcl9mb3JtX3dpbisrOw0KICAgIC0JCQl9DQog
ICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgS0VZX0RPV046DQogICAgLQkJY2FzZSBLRVlfTEVG
VDoNCiAgICAtCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA+IDApIHsNCiAgICAtCQkJCWN1cnNvcl9w
b3NpdGlvbi0tOw0KICAgIC0JCQkJY3Vyc29yX2Zvcm1fd2luLS07DQogICAgLQkJCX0NCiAgICAt
CQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfSE9NRToNCiAgICAtCQkJY3Vyc29yX3Bvc2l0aW9u
ID0gMDsNCiAgICAtCQkJY3Vyc29yX2Zvcm1fd2luID0gMDsNCiAgICAtCQkJYnJlYWs7DQogICAg
LQkJY2FzZSBLRVlfRU5EOg0KICAgIC0JCQljdXJzb3JfcG9zaXRpb24gPSBsZW47DQogICAgLQkJ
CWN1cnNvcl9mb3JtX3dpbiA9IG1pbihjdXJzb3JfcG9zaXRpb24sIHByb21wdF93aWR0aC0xKTsN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJZGVmYXVsdDoNCiAgICAtCQkJaWYgKChpc2dyYXBoKHJl
cykgfHwgaXNzcGFjZShyZXMpKSkgew0KICAgIC0JCQkJLyogb25lIGZvciBuZXcgY2hhciwgb25l
IGZvciAnXDAnICovDQogICAgLQkJCQlpZiAobGVuKzIgPiAqcmVzdWx0X2xlbikgew0KICAgIC0J
CQkJCSpyZXN1bHRfbGVuID0gbGVuKzI7DQogICAgLQkJCQkJKnJlc3VsdHAgPSByZXN1bHQgPSBy
ZWFsbG9jKHJlc3VsdCwNCiAgICAtCQkJCQkJCQkqcmVzdWx0X2xlbik7DQogICAgLQkJCQl9DQog
ICAgLQkJCQkvKiBpbnNlcnQgdGhlIGNoYXIgYXQgdGhlIHByb3BlciBwb3NpdGlvbiAqLw0KICAg
IC0JCQkJbWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbisxXSwNCiAgICAtCQkJCQkJJnJl
c3VsdFtjdXJzb3JfcG9zaXRpb25dLA0KICAgIC0JCQkJCQlsZW4tY3Vyc29yX3Bvc2l0aW9uKzEp
Ow0KICAgIC0JCQkJcmVzdWx0W2N1cnNvcl9wb3NpdGlvbl0gPSByZXM7DQogICAgLQkJCQljdXJz
b3JfcG9zaXRpb24rKzsNCiAgICAtCQkJCWN1cnNvcl9mb3JtX3dpbisrOw0KICAgIC0JCQkJbGVu
Kys7DQogICAgLQkJCX0gZWxzZSB7DQogICAgLQkJCQltdnByaW50dygwLCAwLCAidW5rbm93biBr
ZXk6ICVkXG4iLCByZXMpOw0KICAgIC0JCQl9DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAg
ICAtCQlpZiAoY3Vyc29yX2Zvcm1fd2luIDwgMCkNCiAgICAtCQkJY3Vyc29yX2Zvcm1fd2luID0g
MDsNCiAgICAtCQllbHNlIGlmIChjdXJzb3JfZm9ybV93aW4gPiBwcm9tcHRfd2lkdGgtMSkNCiAg
ICAtCQkJY3Vyc29yX2Zvcm1fd2luID0gcHJvbXB0X3dpZHRoLTE7DQogICAgLQ0KICAgIC0JCXdt
b3ZlKGZvcm1fd2luLCAwLCAwKTsNCiAgICAtCQl3Y2xydG9lb2woZm9ybV93aW4pOw0KICAgIC0J
CW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiUqcyIsIHByb21wdF93aWR0aCwgIiAiKTsNCiAg
ICAtCQltdndwcmludHcoZm9ybV93aW4sIDAsIDAsICIlcyIsDQogICAgLQkJCXJlc3VsdCArIGN1
cnNvcl9wb3NpdGlvbi1jdXJzb3JfZm9ybV93aW4pOw0KICAgIC0JCXdtb3ZlKGZvcm1fd2luLCAw
LCBjdXJzb3JfZm9ybV93aW4pOw0KICAgIC0JCXRvdWNod2luKHdpbik7DQogICAgLQkJcmVmcmVz
aF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgLQ0KICAgIC0JCWlmIChyZXMgPT0gMTAp
IHsNCiAgICAtCQkJcmVzID0gMDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfSBlbHNlIGlmIChy
ZXMgPT0gMjcgfHwgcmVzID09IEtFWV9GKEZfQkFDSykgfHwNCiAgICAtCQkJCXJlcyA9PSBLRVlf
RihGX0VYSVQpKSB7DQogICAgLQkJCXJlcyA9IEtFWV9FWElUOw0KICAgIC0JCQlicmVhazsNCiAg
ICAtCQl9IGVsc2UgaWYgKHJlcyA9PSBLRVlfRihGX0hFTFApKSB7DQogICAgLQkJCXJlcyA9IDE7
DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBoaWRl
IHRoZSBjdXJzb3IgKi8NCiAgICAtCWN1cnNfc2V0KDApOw0KICAgIC0JZGVsX3BhbmVsKHBhbmVs
KTsNCiAgICAtCWRlbHdpbihwcm9tcHRfd2luKTsNCiAgICAtCWRlbHdpbihmb3JtX3dpbik7DQog
ICAgLQlkZWx3aW4od2luKTsNCiAgICAtCXJldHVybiByZXM7DQogICAgLX0NCiAgICAtDQogICAg
LS8qIHJlZnJlc2ggYWxsIHdpbmRvd3MgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgKi8NCiAgICAtdm9p
ZCByZWZyZXNoX2FsbF93aW5kb3dzKFdJTkRPVyAqbWFpbl93aW5kb3cpDQogICAgLXsNCiAgICAt
CXVwZGF0ZV9wYW5lbHMoKTsNCiAgICAtCXRvdWNod2luKG1haW5fd2luZG93KTsNCiAgICAtCXJl
ZnJlc2goKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogbGF5bWFuJ3Mgc2Nyb2xsYWJsZSB3aW5k
b3cuLi4gKi8NCiAgICAtdm9pZCBzaG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywN
CiAgICAtCQljb25zdCBjaGFyICp0aXRsZSwNCiAgICAtCQljb25zdCBjaGFyICp0ZXh0KQ0KICAg
IC17DQogICAgLQlpbnQgcmVzOw0KICAgIC0JaW50IHRvdGFsX2xpbmVzID0gZ2V0X2xpbmVfbm8o
dGV4dCk7DQogICAgLQlpbnQgeCwgeSwgbGluZXMsIGNvbHVtbnM7DQogICAgLQlpbnQgc3RhcnRf
eCA9IDAsIHN0YXJ0X3kgPSAwOw0KICAgIC0JaW50IHRleHRfbGluZXMgPSAwLCB0ZXh0X2NvbHMg
PSAwOw0KICAgIC0JaW50IHRvdGFsX2NvbHMgPSAwOw0KICAgIC0JaW50IHdpbl9jb2xzID0gMDsN
CiAgICAtCWludCB3aW5fbGluZXMgPSAwOw0KICAgIC0JaW50IGkgPSAwOw0KICAgIC0JV0lORE9X
ICp3aW47DQogICAgLQlXSU5ET1cgKnBhZDsNCiAgICAtCVBBTkVMICpwYW5lbDsNCiAgICAtDQog
ICAgLQlnZXRtYXh5eChzdGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsNCiAgICAtDQogICAgLQkvKiBm
aW5kIHRoZSB3aWRlc3QgbGluZSBvZiBtc2c6ICovDQogICAgLQl0b3RhbF9saW5lcyA9IGdldF9s
aW5lX25vKHRleHQpOw0KICAgIC0JZm9yIChpID0gMDsgaSA8IHRvdGFsX2xpbmVzOyBpKyspIHsN
CiAgICAtCQljb25zdCBjaGFyICpsaW5lID0gZ2V0X2xpbmUodGV4dCwgaSk7DQogICAgLQkJaW50
IGxlbiA9IGdldF9saW5lX2xlbmd0aChsaW5lKTsNCiAgICAtCQl0b3RhbF9jb2xzID0gbWF4KHRv
dGFsX2NvbHMsIGxlbisyKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQkvKiBjcmVhdGUgdGhlIHBh
ZCAqLw0KICAgIC0JcGFkID0gbmV3cGFkKHRvdGFsX2xpbmVzKzEwLCB0b3RhbF9jb2xzKzEwKTsN
CiAgICAtCSh2b2lkKSB3YXR0cnNldChwYWQsIGF0dHJpYnV0ZXNbU0NST0xMV0lOX1RFWFRdKTsN
CiAgICAtCWZpbGxfd2luZG93KHBhZCwgdGV4dCk7DQogICAgLQ0KICAgIC0Jd2luX2xpbmVzID0g
bWluKHRvdGFsX2xpbmVzKzQsIGxpbmVzLTIpOw0KICAgIC0Jd2luX2NvbHMgPSBtaW4odG90YWxf
Y29scysyLCBjb2x1bW5zLTIpOw0KICAgIC0JdGV4dF9saW5lcyA9IG1heCh3aW5fbGluZXMtNCwg
MCk7DQogICAgLQl0ZXh0X2NvbHMgPSBtYXgod2luX2NvbHMtMiwgMCk7DQogICAgLQ0KICAgIC0J
LyogcGxhY2Ugd2luZG93IGluIG1pZGRsZSBvZiBzY3JlZW4gKi8NCiAgICAtCXkgPSAobGluZXMt
d2luX2xpbmVzKS8yOw0KICAgIC0JeCA9IChjb2x1bW5zLXdpbl9jb2xzKS8yOw0KICAgIC0NCiAg
ICAtCXdpbiA9IG5ld3dpbih3aW5fbGluZXMsIHdpbl9jb2xzLCB5LCB4KTsNCiAgICAtCWtleXBh
ZCh3aW4sIFRSVUUpOw0KICAgIC0JLyogc2hvdyB0aGUgaGVscCBpbiB0aGUgaGVscCB3aW5kb3cs
IGFuZCBzaG93IHRoZSBoZWxwIHBhbmVsICovDQogICAgLQkodm9pZCkgd2F0dHJzZXQod2luLCBh
dHRyaWJ1dGVzW1NDUk9MTFdJTl9CT1hdKTsNCiAgICAtCWJveCh3aW4sIDAsIDApOw0KICAgIC0J
KHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmlidXRlc1tTQ1JPTExXSU5fSEVBRElOR10pOw0KICAg
IC0JbXZ3cHJpbnR3KHdpbiwgMCwgMywgIiAlcyAiLCB0aXRsZSk7DQogICAgLQlwYW5lbCA9IG5l
d19wYW5lbCh3aW4pOw0KICAgIC0NCiAgICAtCS8qIGhhbmRsZSBzY3JvbGxpbmcgKi8NCiAgICAt
CWRvIHsNCiAgICAtDQogICAgLQkJY29weXdpbihwYWQsIHdpbiwgc3RhcnRfeSwgc3RhcnRfeCwg
MiwgMiwgdGV4dF9saW5lcywNCiAgICAtCQkJCXRleHRfY29scywgMCk7DQogICAgLQkJcHJpbnRf
aW5fbWlkZGxlKHdpbiwNCiAgICAtCQkJCXRleHRfbGluZXMrMiwNCiAgICAtCQkJCTAsDQogICAg
LQkJCQl0ZXh0X2NvbHMsDQogICAgLQkJCQkiPE9LPiIsDQogICAgLQkJCQlhdHRyaWJ1dGVzW0RJ
QUxPR19NRU5VX0ZPUkVdKTsNCiAgICAtCQl3cmVmcmVzaCh3aW4pOw0KICAgIC0NCiAgICAtCQly
ZXMgPSB3Z2V0Y2god2luKTsNCiAgICAtCQlzd2l0Y2ggKHJlcykgew0KICAgIC0JCWNhc2UgS0VZ
X05QQUdFOg0KICAgIC0JCWNhc2UgJyAnOg0KICAgIC0JCWNhc2UgJ2QnOg0KICAgIC0JCQlzdGFy
dF95ICs9IHRleHRfbGluZXMtMjsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfUFBB
R0U6DQogICAgLQkJY2FzZSAndSc6DQogICAgLQkJCXN0YXJ0X3kgLT0gdGV4dF9saW5lcysyOw0K
ICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9IT01FOg0KICAgIC0JCQlzdGFydF95ID0g
MDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBLRVlfRU5EOg0KICAgIC0JCQlzdGFydF95
ID0gdG90YWxfbGluZXMtdGV4dF9saW5lczsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBL
RVlfRE9XTjoNCiAgICAtCQljYXNlICdqJzoNCiAgICAtCQkJc3RhcnRfeSsrOw0KICAgIC0JCQli
cmVhazsNCiAgICAtCQljYXNlIEtFWV9VUDoNCiAgICAtCQljYXNlICdrJzoNCiAgICAtCQkJc3Rh
cnRfeS0tOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIEtFWV9MRUZUOg0KICAgIC0JCWNh
c2UgJ2gnOg0KICAgIC0JCQlzdGFydF94LS07DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2Ug
S0VZX1JJR0hUOg0KICAgIC0JCWNhc2UgJ2wnOg0KICAgIC0JCQlzdGFydF94Kys7DQogICAgLQkJ
CWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAyNyB8fCBy
ZXMgPT0gJ3EnIHx8DQogICAgLQkJCXJlcyA9PSBLRVlfRihGX0hFTFApIHx8IHJlcyA9PSBLRVlf
RihGX0JBQ0spIHx8DQogICAgLQkJCXJlcyA9PSBLRVlfRihGX0VYSVQpKQ0KICAgIC0JCQlicmVh
azsNCiAgICAtCQlpZiAoc3RhcnRfeSA8IDApDQogICAgLQkJCXN0YXJ0X3kgPSAwOw0KICAgIC0J
CWlmIChzdGFydF95ID49IHRvdGFsX2xpbmVzLXRleHRfbGluZXMpDQogICAgLQkJCXN0YXJ0X3kg
PSB0b3RhbF9saW5lcy10ZXh0X2xpbmVzOw0KICAgIC0JCWlmIChzdGFydF94IDwgMCkNCiAgICAt
CQkJc3RhcnRfeCA9IDA7DQogICAgLQkJaWYgKHN0YXJ0X3ggPj0gdG90YWxfY29scy10ZXh0X2Nv
bHMpDQogICAgLQkJCXN0YXJ0X3ggPSB0b3RhbF9jb2xzLXRleHRfY29sczsNCiAgICAtCX0gd2hp
bGUgKHJlcyk7DQogICAgLQ0KICAgIC0JZGVsX3BhbmVsKHBhbmVsKTsNCiAgICAtCWRlbHdpbih3
aW4pOw0KICAgIC0JcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgLX0NCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5oIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9uY29uZi5oDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
ZmE1MjQ1ZS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuaA0K
ICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw5MiArMCwwIEBADQogICAgLS8qIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAo
QykgMjAwOCBOaXIgVHphY2hhciA8bmlyLnR6YWNoYXJAZ21haWwuY29tPg0KICAgIC0gKg0KICAg
IC0gKiBEZXJpdmVkIGZyb20gbWVudWNvbmZpZy4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5j
bHVkZSA8Y3R5cGUuaD4NCiAgICAtI2luY2x1ZGUgPGVycm5vLmg+DQogICAgLSNpbmNsdWRlIDxm
Y250bC5oPg0KICAgIC0jaW5jbHVkZSA8bGltaXRzLmg+DQogICAgLSNpbmNsdWRlIDxzdGRhcmcu
aD4NCiAgICAtI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQog
ICAgLSNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAtI2luY2x1ZGUgPG5jdXJzZXMuaD4NCiAgICAt
I2luY2x1ZGUgPG1lbnUuaD4NCiAgICAtI2luY2x1ZGUgPHBhbmVsLmg+DQogICAgLSNpbmNsdWRl
IDxmb3JtLmg+DQogICAgLQ0KICAgIC0jaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAtI2luY2x1ZGUg
PHRpbWUuaD4NCiAgICAtI2luY2x1ZGUgPHN5cy90aW1lLmg+DQogICAgLQ0KICAgIC0jZGVmaW5l
IG1heChhLCBiKSAoe1wNCiAgICAtCQl0eXBlb2YoYSkgX2EgPSBhO1wNCiAgICAtCQl0eXBlb2Yo
YikgX2IgPSBiO1wNCiAgICAtCQlfYSA+IF9iID8gX2EgOiBfYjsgfSkNCiAgICAtDQogICAgLSNk
ZWZpbmUgbWluKGEsIGIpICh7XA0KICAgIC0JCXR5cGVvZihhKSBfYSA9IGE7XA0KICAgIC0JCXR5
cGVvZihiKSBfYiA9IGI7XA0KICAgIC0JCV9hIDwgX2IgPyBfYSA6IF9iOyB9KQ0KICAgIC0NCiAg
ICAtdHlwZWRlZiBlbnVtIHsNCiAgICAtCU5PUk1BTCA9IDEsDQogICAgLQlNQUlOX0hFQURJTkcs
DQogICAgLQlNQUlOX01FTlVfQk9YLA0KICAgIC0JTUFJTl9NRU5VX0ZPUkUsDQogICAgLQlNQUlO
X01FTlVfQkFDSywNCiAgICAtCU1BSU5fTUVOVV9HUkVZLA0KICAgIC0JTUFJTl9NRU5VX0hFQURJ
TkcsDQogICAgLQlTQ1JPTExXSU5fVEVYVCwNCiAgICAtCVNDUk9MTFdJTl9IRUFESU5HLA0KICAg
IC0JU0NST0xMV0lOX0JPWCwNCiAgICAtCURJQUxPR19URVhULA0KICAgIC0JRElBTE9HX01FTlVf
Rk9SRSwNCiAgICAtCURJQUxPR19NRU5VX0JBQ0ssDQogICAgLQlESUFMT0dfQk9YLA0KICAgIC0J
SU5QVVRfQk9YLA0KICAgIC0JSU5QVVRfSEVBRElORywNCiAgICAtCUlOUFVUX1RFWFQsDQogICAg
LQlJTlBVVF9GSUVMRCwNCiAgICAtCUZVTkNUSU9OX1RFWFQsDQogICAgLQlGVU5DVElPTl9ISUdI
TElHSFQsDQogICAgLQlBVFRSX01BWA0KICAgIC19IGF0dHJpYnV0ZXNfdDsNCiAgICAtZXh0ZXJu
IGF0dHJpYnV0ZXNfdCBhdHRyaWJ1dGVzW107DQogICAgLQ0KICAgIC10eXBlZGVmIGVudW0gew0K
ICAgIC0JRl9IRUxQID0gMSwNCiAgICAtCUZfU1lNQk9MID0gMiwNCiAgICAtCUZfSU5TVFMgPSAz
LA0KICAgIC0JRl9DT05GID0gNCwNCiAgICAtCUZfQkFDSyA9IDUsDQogICAgLQlGX1NBVkUgPSA2
LA0KICAgIC0JRl9MT0FEID0gNywNCiAgICAtCUZfU0VBUkNIID0gOCwNCiAgICAtCUZfRVhJVCA9
IDksDQogICAgLX0gZnVuY3Rpb25fa2V5Ow0KICAgIC0NCiAgICAtdm9pZCBzZXRfY29sb3JzKHZv
aWQpOw0KICAgIC0NCiAgICAtLyogdGhpcyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMg
ISEhICovDQogICAgLXZvaWQgcHJpbnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLA0KICAgIC0JCWlu
dCBzdGFydHksDQogICAgLQkJaW50IHN0YXJ0eCwNCiAgICAtCQlpbnQgd2lkdGgsDQogICAgLQkJ
Y29uc3QgY2hhciAqc3RyaW5nLA0KICAgIC0JCWNodHlwZSBjb2xvcik7DQogICAgLWludCBnZXRf
bGluZV9sZW5ndGgoY29uc3QgY2hhciAqbGluZSk7DQogICAgLWludCBnZXRfbGluZV9ubyhjb25z
dCBjaGFyICp0ZXh0KTsNCiAgICAtY29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4
dCwgaW50IGxpbmVfbm8pOw0KICAgIC12b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25z
dCBjaGFyICp0ZXh0KTsNCiAgICAtaW50IGJ0bl9kaWFsb2coV0lORE9XICptYWluX3dpbmRvdywg
Y29uc3QgY2hhciAqbXNnLCBpbnQgYnRuX251bSwgLi4uKTsNCiAgICAtaW50IGRpYWxvZ19pbnB1
dGJveChXSU5ET1cgKm1haW5fd2luZG93LA0KICAgIC0JCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25z
dCBjaGFyICpwcm9tcHQsDQogICAgLQkJY29uc3QgY2hhciAqaW5pdCwgY2hhciAqKnJlc3VsdHAs
IGludCAqcmVzdWx0X2xlbik7DQogICAgLXZvaWQgcmVmcmVzaF9hbGxfd2luZG93cyhXSU5ET1cg
Km1haW5fd2luZG93KTsNCiAgICAtdm9pZCBzaG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dp
bmRvdywNCiAgICAtCQljb25zdCBjaGFyICp0aXRsZSwNCiAgICAtCQljb25zdCBjaGFyICp0ZXh0
KTsNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueSBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvcGFyc2VyLnkNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCA5NTcwMGY4Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXJzZXIueQ0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw3MzEgKzAsMCBAQA0KICAgIC0v
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KICAgIC0vKg0KICAgIC0gKiBD
b3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQog
ICAgLSAqLw0KICAgIC0lew0KICAgIC0NCiAgICAtI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgLSNp
bmNsdWRlIDxzdGRhcmcuaD4NCiAgICAtI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgLSNpbmNsdWRl
IDxzdGRsaWIuaD4NCiAgICAtI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSA8c3Rk
Ym9vbC5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5oIg0KICAgIC0NCiAgICAtI2RlZmlu
ZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmludGYoZm10KQ0K
ICAgIC0NCiAgICAtI2RlZmluZSBQUklOVEQJCTB4MDAwMQ0KICAgIC0jZGVmaW5lIERFQlVHX1BB
UlNFCTB4MDAwMg0KICAgIC0NCiAgICAtaW50IGNkZWJ1ZyA9IFBSSU5URDsNCiAgICAtDQogICAg
LXN0YXRpYyB2b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqZXJyKTsNCiAgICAtc3RhdGljIHZvaWQg
emNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLik7DQogICAgLXN0YXRpYyB2b2lkIHpjb25m
X2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKTsNCiAgICAtc3RhdGljIGJvb2wgemNvbmZfZW5k
dG9rZW4oY29uc3QgY2hhciAqdG9rZW5uYW1lLA0KICAgIC0JCQkgICBjb25zdCBjaGFyICpleHBl
Y3RlZF90b2tlbm5hbWUpOw0KICAgIC0NCiAgICAtc3RydWN0IHN5bWJvbCAqc3ltYm9sX2hhc2hb
U1lNQk9MX0hBU0hTSVpFXTsNCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9tZW51LCAqY3VycmVudF9lbnRyeTsNCiAgICAtDQogICAgLSV9DQogICAgLQ0KICAgIC0ldW5p
b24NCiAgICAtew0KICAgIC0JY2hhciAqc3RyaW5nOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3lt
Ym9sOw0KICAgIC0Jc3RydWN0IGV4cHIgKmV4cHI7DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudTsN
CiAgICAtCWVudW0gc3ltYm9sX3R5cGUgdHlwZTsNCiAgICAtCWVudW0gdmFyaWFibGVfZmxhdm9y
IGZsYXZvcjsNCiAgICAtfQ0KICAgIC0NCiAgICAtJXRva2VuIDxzdHJpbmc+IFRfSEVMUFRFWFQN
CiAgICAtJXRva2VuIDxzdHJpbmc+IFRfV09SRA0KICAgIC0ldG9rZW4gPHN0cmluZz4gVF9XT1JE
X1FVT1RFDQogICAgLSV0b2tlbiBUX0FMTE5PQ09ORklHX1kNCiAgICAtJXRva2VuIFRfQk9PTA0K
ICAgIC0ldG9rZW4gVF9DSE9JQ0UNCiAgICAtJXRva2VuIFRfQ0xPU0VfUEFSRU4NCiAgICAtJXRv
a2VuIFRfQ09MT05fRVFVQUwNCiAgICAtJXRva2VuIFRfQ09NTUVOVA0KICAgIC0ldG9rZW4gVF9D
T05GSUcNCiAgICAtJXRva2VuIFRfREVGQVVMVA0KICAgIC0ldG9rZW4gVF9ERUZDT05GSUdfTElT
VA0KICAgIC0ldG9rZW4gVF9ERUZfQk9PTA0KICAgIC0ldG9rZW4gVF9ERUZfVFJJU1RBVEUNCiAg
ICAtJXRva2VuIFRfREVQRU5EUw0KICAgIC0ldG9rZW4gVF9FTkRDSE9JQ0UNCiAgICAtJXRva2Vu
IFRfRU5ESUYNCiAgICAtJXRva2VuIFRfRU5ETUVOVQ0KICAgIC0ldG9rZW4gVF9IRUxQDQogICAg
LSV0b2tlbiBUX0hFWA0KICAgIC0ldG9rZW4gVF9JRg0KICAgIC0ldG9rZW4gVF9JTVBMWQ0KICAg
IC0ldG9rZW4gVF9JTlQNCiAgICAtJXRva2VuIFRfTUFJTk1FTlUNCiAgICAtJXRva2VuIFRfTUVO
VQ0KICAgIC0ldG9rZW4gVF9NRU5VQ09ORklHDQogICAgLSV0b2tlbiBUX01PRFVMRVMNCiAgICAt
JXRva2VuIFRfT04NCiAgICAtJXRva2VuIFRfT1BFTl9QQVJFTg0KICAgIC0ldG9rZW4gVF9PUFRJ
T04NCiAgICAtJXRva2VuIFRfT1BUSU9OQUwNCiAgICAtJXRva2VuIFRfUExVU19FUVVBTA0KICAg
IC0ldG9rZW4gVF9QUk9NUFQNCiAgICAtJXRva2VuIFRfUkFOR0UNCiAgICAtJXRva2VuIFRfU0VM
RUNUDQogICAgLSV0b2tlbiBUX1NPVVJDRQ0KICAgIC0ldG9rZW4gVF9TVFJJTkcNCiAgICAtJXRv
a2VuIFRfVFJJU1RBVEUNCiAgICAtJXRva2VuIFRfVklTSUJMRQ0KICAgIC0ldG9rZW4gVF9FT0wN
CiAgICAtJXRva2VuIDxzdHJpbmc+IFRfQVNTSUdOX1ZBTA0KICAgIC0NCiAgICAtJWxlZnQgVF9P
Ug0KICAgIC0lbGVmdCBUX0FORA0KICAgIC0lbGVmdCBUX0VRVUFMIFRfVU5FUVVBTA0KICAgIC0l
bGVmdCBUX0xFU1MgVF9MRVNTX0VRVUFMIFRfR1JFQVRFUiBUX0dSRUFURVJfRVFVQUwNCiAgICAt
JW5vbmFzc29jIFRfTk9UDQogICAgLQ0KICAgIC0ldHlwZSA8c3RyaW5nPiBwcm9tcHQNCiAgICAt
JXR5cGUgPHN5bWJvbD4gbm9uY29uc3Rfc3ltYm9sDQogICAgLSV0eXBlIDxzeW1ib2w+IHN5bWJv
bA0KICAgIC0ldHlwZSA8dHlwZT4gdHlwZSBsb2dpY190eXBlIGRlZmF1bHQNCiAgICAtJXR5cGUg
PGV4cHI+IGV4cHINCiAgICAtJXR5cGUgPGV4cHI+IGlmX2V4cHINCiAgICAtJXR5cGUgPHN0cmlu
Zz4gZW5kDQogICAgLSV0eXBlIDxtZW51PiBpZl9lbnRyeSBtZW51X2VudHJ5IGNob2ljZV9lbnRy
eQ0KICAgIC0ldHlwZSA8c3RyaW5nPiB3b3JkX29wdCBhc3NpZ25fdmFsDQogICAgLSV0eXBlIDxm
bGF2b3I+IGFzc2lnbl9vcA0KICAgIC0NCiAgICAtJWRlc3RydWN0b3Igew0KICAgIC0JZnByaW50
ZihzdGRlcnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4i
LA0KICAgIC0JCSQkLT5maWxlLT5uYW1lLCAkJC0+bGluZW5vKTsNCiAgICAtCWlmIChjdXJyZW50
X21lbnUgPT0gJCQpDQogICAgLQkJbWVudV9lbmRfbWVudSgpOw0KICAgIC19IGlmX2VudHJ5IG1l
bnVfZW50cnkgY2hvaWNlX2VudHJ5DQogICAgLQ0KICAgIC0lJQ0KICAgIC1pbnB1dDogbWFpbm1l
bnVfc3RtdCBzdG10X2xpc3QgfCBzdG10X2xpc3Q7DQogICAgLQ0KICAgIC0vKiBtYWlubWVudSBl
bnRyeSAqLw0KICAgIC0NCiAgICAtbWFpbm1lbnVfc3RtdDogVF9NQUlOTUVOVSBwcm9tcHQgVF9F
T0wNCiAgICAtew0KICAgIC0JbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgJDIsIE5VTEwpOw0KICAg
IC19Ow0KICAgIC0NCiAgICAtc3RtdF9saXN0Og0KICAgIC0JICAvKiBlbXB0eSAqLw0KICAgIC0J
fCBzdG10X2xpc3QgY29tbW9uX3N0bXQNCiAgICAtCXwgc3RtdF9saXN0IGNob2ljZV9zdG10DQog
ICAgLQl8IHN0bXRfbGlzdCBtZW51X3N0bXQNCiAgICAtCXwgc3RtdF9saXN0IFRfV09SRCBlcnJv
ciBUX0VPTAl7IHpjb25mX2Vycm9yKCJ1bmtub3duIHN0YXRlbWVudCBcIiVzXCIiLCAkMik7IH0N
CiAgICAtCXwgc3RtdF9saXN0IGVycm9yIFRfRU9MCQl7IHpjb25mX2Vycm9yKCJpbnZhbGlkIHN0
YXRlbWVudCIpOyB9DQogICAgLTsNCiAgICAtDQogICAgLWNvbW1vbl9zdG10Og0KICAgIC0JICBp
Zl9zdG10DQogICAgLQl8IGNvbW1lbnRfc3RtdA0KICAgIC0JfCBjb25maWdfc3RtdA0KICAgIC0J
fCBtZW51Y29uZmlnX3N0bXQNCiAgICAtCXwgc291cmNlX3N0bXQNCiAgICAtCXwgYXNzaWdubWVu
dF9zdG10DQogICAgLTsNCiAgICAtDQogICAgLS8qIGNvbmZpZy9tZW51Y29uZmlnIGVudHJ5ICov
DQogICAgLQ0KICAgIC1jb25maWdfZW50cnlfc3RhcnQ6IFRfQ09ORklHIG5vbmNvbnN0X3N5bWJv
bCBUX0VPTA0KICAgIC17DQogICAgLQkkMi0+ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOw0KICAg
IC0JbWVudV9hZGRfZW50cnkoJDIpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6
Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7
DQogICAgLX07DQogICAgLQ0KICAgIC1jb25maWdfc3RtdDogY29uZmlnX2VudHJ5X3N0YXJ0IGNv
bmZpZ19vcHRpb25fbGlzdA0KICAgIC17DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczol
ZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19
Ow0KICAgIC0NCiAgICAtbWVudWNvbmZpZ19lbnRyeV9zdGFydDogVF9NRU5VQ09ORklHIG5vbmNv
bnN0X3N5bWJvbCBUX0VPTA0KICAgIC17DQogICAgLQkkMi0+ZmxhZ3MgfD0gU1lNQk9MX09QVElP
TkFMOw0KICAgIC0JbWVudV9hZGRfZW50cnkoJDIpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6bWVudWNvbmZpZyAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSwgJDItPm5hbWUpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtbWVudWNvbmZpZ19zdG10OiBtZW51
Y29uZmlnX2VudHJ5X3N0YXJ0IGNvbmZpZ19vcHRpb25fbGlzdA0KICAgIC17DQogICAgLQlpZiAo
Y3VycmVudF9lbnRyeS0+cHJvbXB0KQ0KICAgIC0JCWN1cnJlbnRfZW50cnktPnByb21wdC0+dHlw
ZSA9IFBfTUVOVTsNCiAgICAtCWVsc2UNCiAgICAtCQl6Y29uZnByaW50KCJ3YXJuaW5nOiBtZW51
Y29uZmlnIHN0YXRlbWVudCB3aXRob3V0IHByb21wdCIpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6ZW5kY29uZmlnXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
KTsNCiAgICAtfTsNCiAgICAtDQogICAgLWNvbmZpZ19vcHRpb25fbGlzdDoNCiAgICAtCSAgLyog
ZW1wdHkgKi8NCiAgICAtCXwgY29uZmlnX29wdGlvbl9saXN0IGNvbmZpZ19vcHRpb24NCiAgICAt
CXwgY29uZmlnX29wdGlvbl9saXN0IGRlcGVuZHMNCiAgICAtCXwgY29uZmlnX29wdGlvbl9saXN0
IGhlbHANCiAgICAtOw0KICAgIC0NCiAgICAtY29uZmlnX29wdGlvbjogdHlwZSBwcm9tcHRfc3Rt
dF9vcHQgVF9FT0wNCiAgICAtew0KICAgIC0JbWVudV9zZXRfdHlwZSgkMSk7DQogICAgLQlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBlKCV1KVxuIiwNCiAgICAtCQl6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpLA0KICAgIC0JCSQxKTsNCiAgICAtfTsNCiAgICAtDQogICAgLWNv
bmZpZ19vcHRpb246IFRfUFJPTVBUIHByb21wdCBpZl9leHByIFRfRU9MDQogICAgLXsNCiAgICAt
CW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgJDIsICQzKTsNCiAgICAtCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOnByb21wdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7
DQogICAgLX07DQogICAgLQ0KICAgIC1jb25maWdfb3B0aW9uOiBkZWZhdWx0IGV4cHIgaWZfZXhw
ciBUX0VPTA0KICAgIC17DQogICAgLQltZW51X2FkZF9leHByKFBfREVGQVVMVCwgJDIsICQzKTsN
CiAgICAtCWlmICgkMSAhPSBTX1VOS05PV04pDQogICAgLQkJbWVudV9zZXRfdHlwZSgkMSk7DQog
ICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0KCV1KVxuIiwNCiAgICAtCQl6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLA0KICAgIC0JCSQxKTsNCiAgICAtfTsNCiAg
ICAtDQogICAgLWNvbmZpZ19vcHRpb246IFRfU0VMRUNUIG5vbmNvbnN0X3N5bWJvbCBpZl9leHBy
IFRfRU9MDQogICAgLXsNCiAgICAtCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgJDIsICQzKTsN
CiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLX07DQogICAgLQ0KICAgIC1jb25maWdfb3B0aW9u
OiBUX0lNUExZIG5vbmNvbnN0X3N5bWJvbCBpZl9leHByIFRfRU9MDQogICAgLXsNCiAgICAtCW1l
bnVfYWRkX3N5bWJvbChQX0lNUExZLCAkMiwgJDMpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNF
LCAiJXM6JWQ6aW1wbHlcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAg
IC19Ow0KICAgIC0NCiAgICAtY29uZmlnX29wdGlvbjogVF9SQU5HRSBzeW1ib2wgc3ltYm9sIGlm
X2V4cHIgVF9FT0wNCiAgICAtew0KICAgIC0JbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2Fs
bG9jX2NvbXAoRV9SQU5HRSwkMiwgJDMpLCAkNCk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpyYW5nZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAg
LX07DQogICAgLQ0KICAgIC1jb25maWdfb3B0aW9uOiBUX09QVElPTiBUX01PRFVMRVMgVF9FT0wN
CiAgICAtew0KICAgIC0JbWVudV9hZGRfb3B0aW9uX21vZHVsZXMoKTsNCiAgICAtfTsNCiAgICAt
DQogICAgLWNvbmZpZ19vcHRpb246IFRfT1BUSU9OIFRfREVGQ09ORklHX0xJU1QgVF9FT0wNCiAg
ICAtew0KICAgIC0JbWVudV9hZGRfb3B0aW9uX2RlZmNvbmZpZ19saXN0KCk7DQogICAgLX07DQog
ICAgLQ0KICAgIC1jb25maWdfb3B0aW9uOiBUX09QVElPTiBUX0FMTE5PQ09ORklHX1kgVF9FT0wN
CiAgICAtew0KICAgIC0JbWVudV9hZGRfb3B0aW9uX2FsbG5vY29uZmlnX3koKTsNCiAgICAtfTsN
CiAgICAtDQogICAgLS8qIGNob2ljZSBlbnRyeSAqLw0KICAgIC0NCiAgICAtY2hvaWNlOiBUX0NI
T0lDRSB3b3JkX29wdCBUX0VPTA0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBz
eW1fbG9va3VwKCQyLCBTWU1CT0xfQ0hPSUNFKTsNCiAgICAtCXN5bS0+ZmxhZ3MgfD0gU1lNQk9M
X05PX1dSSVRFOw0KICAgIC0JbWVudV9hZGRfZW50cnkoc3ltKTsNCiAgICAtCW1lbnVfYWRkX2V4
cHIoUF9DSE9JQ0UsIE5VTEwsIE5VTEwpOw0KICAgIC0JZnJlZSgkMik7DQogICAgLQlwcmludGQo
REVCVUdfUEFSU0UsICIlczolZDpjaG9pY2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCkpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY2hvaWNlX2VudHJ5OiBjaG9pY2UgY2hvaWNl
X29wdGlvbl9saXN0DQogICAgLXsNCiAgICAtCSQkID0gbWVudV9hZGRfbWVudSgpOw0KICAgIC19
Ow0KICAgIC0NCiAgICAtY2hvaWNlX2VuZDogZW5kDQogICAgLXsNCiAgICAtCWlmICh6Y29uZl9l
bmR0b2tlbigkMSwgImNob2ljZSIpKSB7DQogICAgLQkJbWVudV9lbmRfbWVudSgpOw0KICAgIC0J
CXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgp
LCB6Y29uZl9saW5lbm8oKSk7DQogICAgLQl9DQogICAgLX07DQogICAgLQ0KICAgIC1jaG9pY2Vf
c3RtdDogY2hvaWNlX2VudHJ5IGNob2ljZV9ibG9jayBjaG9pY2VfZW5kDQogICAgLTsNCiAgICAt
DQogICAgLWNob2ljZV9vcHRpb25fbGlzdDoNCiAgICAtCSAgLyogZW1wdHkgKi8NCiAgICAtCXwg
Y2hvaWNlX29wdGlvbl9saXN0IGNob2ljZV9vcHRpb24NCiAgICAtCXwgY2hvaWNlX29wdGlvbl9s
aXN0IGRlcGVuZHMNCiAgICAtCXwgY2hvaWNlX29wdGlvbl9saXN0IGhlbHANCiAgICAtOw0KICAg
IC0NCiAgICAtY2hvaWNlX29wdGlvbjogVF9QUk9NUFQgcHJvbXB0IGlmX2V4cHIgVF9FT0wNCiAg
ICAtew0KICAgIC0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMiwgJDMpOw0KICAgIC0JcHJp
bnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25m
X2xpbmVubygpKTsNCiAgICAtfTsNCiAgICAtDQogICAgLWNob2ljZV9vcHRpb246IGxvZ2ljX3R5
cGUgcHJvbXB0X3N0bXRfb3B0IFRfRU9MDQogICAgLXsNCiAgICAtCW1lbnVfc2V0X3R5cGUoJDEp
Ow0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6dHlwZSgldSlcbiIsDQogICAgLQkg
ICAgICAgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDEpOw0KICAgIC19Ow0KICAg
IC0NCiAgICAtY2hvaWNlX29wdGlvbjogVF9PUFRJT05BTCBUX0VPTA0KICAgIC17DQogICAgLQlj
dXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsNCiAgICAtCXByaW50
ZChERUJVR19QQVJTRSwgIiVzOiVkOm9wdGlvbmFsXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25m
X2xpbmVubygpKTsNCiAgICAtfTsNCiAgICAtDQogICAgLWNob2ljZV9vcHRpb246IFRfREVGQVVM
VCBub25jb25zdF9zeW1ib2wgaWZfZXhwciBUX0VPTA0KICAgIC17DQogICAgLQltZW51X2FkZF9z
eW1ib2woUF9ERUZBVUxULCAkMiwgJDMpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6ZGVmYXVsdFxuIiwNCiAgICAtCSAgICAgICB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICAtfTsNCiAgICAtDQogICAgLXR5cGU6DQogICAgLQkgIGxvZ2ljX3R5cGUNCiAg
ICAtCXwgVF9JTlQJCQl7ICQkID0gU19JTlQ7IH0NCiAgICAtCXwgVF9IRVgJCQl7ICQkID0gU19I
RVg7IH0NCiAgICAtCXwgVF9TVFJJTkcJCXsgJCQgPSBTX1NUUklORzsgfQ0KICAgIC0NCiAgICAt
bG9naWNfdHlwZToNCiAgICAtCSAgVF9CT09MCQl7ICQkID0gU19CT09MRUFOOyB9DQogICAgLQl8
IFRfVFJJU1RBVEUJCXsgJCQgPSBTX1RSSVNUQVRFOyB9DQogICAgLQ0KICAgIC1kZWZhdWx0Og0K
ICAgIC0JICBUX0RFRkFVTFQJCXsgJCQgPSBTX1VOS05PV047IH0NCiAgICAtCXwgVF9ERUZfQk9P
TAkJeyAkJCA9IFNfQk9PTEVBTjsgfQ0KICAgIC0JfCBUX0RFRl9UUklTVEFURQl7ICQkID0gU19U
UklTVEFURTsgfQ0KICAgIC0NCiAgICAtY2hvaWNlX2Jsb2NrOg0KICAgIC0JICAvKiBlbXB0eSAq
Lw0KICAgIC0JfCBjaG9pY2VfYmxvY2sgY29tbW9uX3N0bXQNCiAgICAtOw0KICAgIC0NCiAgICAt
LyogaWYgZW50cnkgKi8NCiAgICAtDQogICAgLWlmX2VudHJ5OiBUX0lGIGV4cHIgVF9FT0wNCiAg
ICAtew0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aWZcbiIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JbWVudV9hZGRfZW50cnkoTlVMTCk7DQogICAg
LQltZW51X2FkZF9kZXAoJDIpOw0KICAgIC0JJCQgPSBtZW51X2FkZF9tZW51KCk7DQogICAgLX07
DQogICAgLQ0KICAgIC1pZl9lbmQ6IGVuZA0KICAgIC17DQogICAgLQlpZiAoemNvbmZfZW5kdG9r
ZW4oJDEsICJpZiIpKSB7DQogICAgLQkJbWVudV9lbmRfbWVudSgpOw0KICAgIC0JCXByaW50ZChE
RUJVR19QQVJTRSwgIiVzOiVkOmVuZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVu
bygpKTsNCiAgICAtCX0NCiAgICAtfTsNCiAgICAtDQogICAgLWlmX3N0bXQ6IGlmX2VudHJ5IHN0
bXRfbGlzdCBpZl9lbmQNCiAgICAtOw0KICAgIC0NCiAgICAtLyogbWVudSBlbnRyeSAqLw0KICAg
IC0NCiAgICAtbWVudTogVF9NRU5VIHByb21wdCBUX0VPTA0KICAgIC17DQogICAgLQltZW51X2Fk
ZF9lbnRyeShOVUxMKTsNCiAgICAtCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICQyLCBOVUxMKTsN
CiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUo
KSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtbWVudV9lbnRyeTogbWVu
dSBtZW51X29wdGlvbl9saXN0DQogICAgLXsNCiAgICAtCSQkID0gbWVudV9hZGRfbWVudSgpOw0K
ICAgIC19Ow0KICAgIC0NCiAgICAtbWVudV9lbmQ6IGVuZA0KICAgIC17DQogICAgLQlpZiAoemNv
bmZfZW5kdG9rZW4oJDEsICJtZW51IikpIHsNCiAgICAtCQltZW51X2VuZF9tZW51KCk7DQogICAg
LQkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwgemNvbmZfY3VybmFtZSgp
LCB6Y29uZl9saW5lbm8oKSk7DQogICAgLQl9DQogICAgLX07DQogICAgLQ0KICAgIC1tZW51X3N0
bXQ6IG1lbnVfZW50cnkgc3RtdF9saXN0IG1lbnVfZW5kDQogICAgLTsNCiAgICAtDQogICAgLW1l
bnVfb3B0aW9uX2xpc3Q6DQogICAgLQkgIC8qIGVtcHR5ICovDQogICAgLQl8IG1lbnVfb3B0aW9u
X2xpc3QgdmlzaWJsZQ0KICAgIC0JfCBtZW51X29wdGlvbl9saXN0IGRlcGVuZHMNCiAgICAtOw0K
ICAgIC0NCiAgICAtc291cmNlX3N0bXQ6IFRfU09VUkNFIHByb21wdCBUX0VPTA0KICAgIC17DQog
ICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCksICQyKTsNCiAgICAtCXpjb25mX25leHRmaWxlcygkMik7DQog
ICAgLQlmcmVlKCQyKTsNCiAgICAtfTsNCiAgICAtDQogICAgLS8qIGNvbW1lbnQgZW50cnkgKi8N
CiAgICAtDQogICAgLWNvbW1lbnQ6IFRfQ09NTUVOVCBwcm9tcHQgVF9FT0wNCiAgICAtew0KICAg
IC0JbWVudV9hZGRfZW50cnkoTlVMTCk7DQogICAgLQltZW51X2FkZF9wcm9tcHQoUF9DT01NRU5U
LCAkMiwgTlVMTCk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21tZW50XG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfTsNCiAgICAtDQogICAg
LWNvbW1lbnRfc3RtdDogY29tbWVudCBjb21tZW50X29wdGlvbl9saXN0DQogICAgLTsNCiAgICAt
DQogICAgLWNvbW1lbnRfb3B0aW9uX2xpc3Q6DQogICAgLQkgIC8qIGVtcHR5ICovDQogICAgLQl8
IGNvbW1lbnRfb3B0aW9uX2xpc3QgZGVwZW5kcw0KICAgIC07DQogICAgLQ0KICAgIC0vKiBoZWxw
IG9wdGlvbiAqLw0KICAgIC0NCiAgICAtaGVscF9zdGFydDogVF9IRUxQIFRfRU9MDQogICAgLXsN
CiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmhlbHBcbiIsIHpjb25mX2N1cm5hbWUo
KSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JemNvbmZfc3RhcnRoZWxwKCk7DQogICAgLX07DQog
ICAgLQ0KICAgIC1oZWxwOiBoZWxwX3N0YXJ0IFRfSEVMUFRFWFQNCiAgICAtew0KICAgIC0JaWYg
KGN1cnJlbnRfZW50cnktPmhlbHApIHsNCiAgICAtCQlmcmVlKGN1cnJlbnRfZW50cnktPmhlbHAp
Ow0KICAgIC0JCXpjb25mcHJpbnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIG1vcmUgdGhh
biBvbmUgaGVscCB0ZXh0IC0tIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCIsDQogICAg
LQkJCSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsNCiAgICAtCX0N
CiAgICAtDQogICAgLQkvKiBJcyB0aGUgaGVscCB0ZXh0IGVtcHR5IG9yIGFsbCB3aGl0ZXNwYWNl
PyAqLw0KICAgIC0JaWYgKCQyW3N0cnNwbigkMiwgIiBcZlxuXHJcdFx2IildID09ICdcMCcpDQog
ICAgLQkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVkIHdpdGggYmxhbmsgaGVscCB0
ZXh0IiwNCiAgICAtCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIp
Ow0KICAgIC0NCiAgICAtCWN1cnJlbnRfZW50cnktPmhlbHAgPSAkMjsNCiAgICAtfTsNCiAgICAt
DQogICAgLS8qIGRlcGVuZHMgb3B0aW9uICovDQogICAgLQ0KICAgIC1kZXBlbmRzOiBUX0RFUEVO
RFMgVF9PTiBleHByIFRfRU9MDQogICAgLXsNCiAgICAtCW1lbnVfYWRkX2RlcCgkMyk7DQogICAg
LQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZXBlbmRzIG9uXG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfTsNCiAgICAtDQogICAgLS8qIHZpc2liaWxpdHkg
b3B0aW9uICovDQogICAgLXZpc2libGU6IFRfVklTSUJMRSBpZl9leHByIFRfRU9MDQogICAgLXsN
CiAgICAtCW1lbnVfYWRkX3Zpc2liaWxpdHkoJDIpOw0KICAgIC19Ow0KICAgIC0NCiAgICAtLyog
cHJvbXB0IHN0YXRlbWVudCAqLw0KICAgIC0NCiAgICAtcHJvbXB0X3N0bXRfb3B0Og0KICAgIC0J
ICAvKiBlbXB0eSAqLw0KICAgIC0JfCBwcm9tcHQgaWZfZXhwcg0KICAgIC17DQogICAgLQltZW51
X2FkZF9wcm9tcHQoUF9QUk9NUFQsICQxLCAkMik7DQogICAgLX07DQogICAgLQ0KICAgIC1wcm9t
cHQ6CSAgVF9XT1JEDQogICAgLQl8IFRfV09SRF9RVU9URQ0KICAgIC07DQogICAgLQ0KICAgIC1l
bmQ6CSAgVF9FTkRNRU5VIFRfRU9MCXsgJCQgPSAibWVudSI7IH0NCiAgICAtCXwgVF9FTkRDSE9J
Q0UgVF9FT0wJeyAkJCA9ICJjaG9pY2UiOyB9DQogICAgLQl8IFRfRU5ESUYgVF9FT0wJCXsgJCQg
PSAiaWYiOyB9DQogICAgLTsNCiAgICAtDQogICAgLWlmX2V4cHI6ICAvKiBlbXB0eSAqLwkJCXsg
JCQgPSBOVUxMOyB9DQogICAgLQl8IFRfSUYgZXhwcgkJCXsgJCQgPSAkMjsgfQ0KICAgIC07DQog
ICAgLQ0KICAgIC1leHByOgkgIHN5bWJvbAkJCQl7ICQkID0gZXhwcl9hbGxvY19zeW1ib2woJDEp
OyB9DQogICAgLQl8IHN5bWJvbCBUX0xFU1Mgc3ltYm9sCQkJeyAkJCA9IGV4cHJfYWxsb2NfY29t
cChFX0xUSCwgJDEsICQzKTsgfQ0KICAgIC0JfCBzeW1ib2wgVF9MRVNTX0VRVUFMIHN5bWJvbAkJ
eyAkJCA9IGV4cHJfYWxsb2NfY29tcChFX0xFUSwgJDEsICQzKTsgfQ0KICAgIC0JfCBzeW1ib2wg
VF9HUkVBVEVSIHN5bWJvbAkJeyAkJCA9IGV4cHJfYWxsb2NfY29tcChFX0dUSCwgJDEsICQzKTsg
fQ0KICAgIC0JfCBzeW1ib2wgVF9HUkVBVEVSX0VRVUFMIHN5bWJvbAkJeyAkJCA9IGV4cHJfYWxs
b2NfY29tcChFX0dFUSwgJDEsICQzKTsgfQ0KICAgIC0JfCBzeW1ib2wgVF9FUVVBTCBzeW1ib2wJ
CQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfRVFVQUwsICQxLCAkMyk7IH0NCiAgICAtCXwgc3lt
Ym9sIFRfVU5FUVVBTCBzeW1ib2wJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCAk
MSwgJDMpOyB9DQogICAgLQl8IFRfT1BFTl9QQVJFTiBleHByIFRfQ0xPU0VfUEFSRU4JeyAkJCA9
ICQyOyB9DQogICAgLQl8IFRfTk9UIGV4cHIJCQkJeyAkJCA9IGV4cHJfYWxsb2Nfb25lKEVfTk9U
LCAkMik7IH0NCiAgICAtCXwgZXhwciBUX09SIGV4cHIJCQl7ICQkID0gZXhwcl9hbGxvY190d28o
RV9PUiwgJDEsICQzKTsgfQ0KICAgIC0JfCBleHByIFRfQU5EIGV4cHIJCQl7ICQkID0gZXhwcl9h
bGxvY190d28oRV9BTkQsICQxLCAkMyk7IH0NCiAgICAtOw0KICAgIC0NCiAgICAtLyogRm9yIHN5
bWJvbCBkZWZpbml0aW9ucywgc2VsZWN0cywgZXRjLiwgd2hlcmUgcXVvdGVzIGFyZSBub3QgYWNj
ZXB0ZWQgKi8NCiAgICAtbm9uY29uc3Rfc3ltYm9sOiBUX1dPUkQgeyAkJCA9IHN5bV9sb29rdXAo
JDEsIDApOyBmcmVlKCQxKTsgfTsNCiAgICAtDQogICAgLXN5bWJvbDoJICBub25jb25zdF9zeW1i
b2wNCiAgICAtCXwgVF9XT1JEX1FVT1RFCXsgJCQgPSBzeW1fbG9va3VwKCQxLCBTWU1CT0xfQ09O
U1QpOyBmcmVlKCQxKTsgfQ0KICAgIC07DQogICAgLQ0KICAgIC13b3JkX29wdDogLyogZW1wdHkg
Ki8JCQl7ICQkID0gTlVMTDsgfQ0KICAgIC0JfCBUX1dPUkQNCiAgICAtDQogICAgLS8qIGFzc2ln
bm1lbnQgc3RhdGVtZW50ICovDQogICAgLQ0KICAgIC1hc3NpZ25tZW50X3N0bXQ6ICBUX1dPUkQg
YXNzaWduX29wIGFzc2lnbl92YWwgVF9FT0wJeyB2YXJpYWJsZV9hZGQoJDEsICQzLCAkMik7IGZy
ZWUoJDEpOyBmcmVlKCQzKTsgfQ0KICAgIC0NCiAgICAtYXNzaWduX29wOg0KICAgIC0JICBUX0VR
VUFMCXsgJCQgPSBWQVJfUkVDVVJTSVZFOyB9DQogICAgLQl8IFRfQ09MT05fRVFVQUwJeyAkJCA9
IFZBUl9TSU1QTEU7IH0NCiAgICAtCXwgVF9QTFVTX0VRVUFMCXsgJCQgPSBWQVJfQVBQRU5EOyB9
DQogICAgLTsNCiAgICAtDQogICAgLWFzc2lnbl92YWw6DQogICAgLQkvKiBlbXB0eSAqLwkJeyAk
JCA9IHhzdHJkdXAoIiIpOyB9Ow0KICAgIC0JfCBUX0FTU0lHTl9WQUwNCiAgICAtOw0KICAgIC0N
CiAgICAtJSUNCiAgICAtDQogICAgLXZvaWQgY29uZl9wYXJzZShjb25zdCBjaGFyICpuYW1lKQ0K
ICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgLQlpbnQgaTsNCiAgICAtDQog
ICAgLQl6Y29uZl9pbml0c2NhbihuYW1lKTsNCiAgICAtDQogICAgLQlfbWVudV9pbml0KCk7DQog
ICAgLQ0KICAgIC0JaWYgKGdldGVudigiWkNPTkZfREVCVUciKSkNCiAgICAtCQl5eWRlYnVnID0g
MTsNCiAgICAtCXl5cGFyc2UoKTsNCiAgICAtDQogICAgLQkvKiBWYXJpYWJsZXMgYXJlIGV4cGFu
ZGVkIGluIHRoZSBwYXJzZSBwaGFzZS4gV2UgY2FuIGZyZWUgdGhlbSBoZXJlLiAqLw0KICAgIC0J
dmFyaWFibGVfYWxsX2RlbCgpOw0KICAgIC0NCiAgICAtCWlmICh5eW5lcnJzKQ0KICAgIC0JCWV4
aXQoMSk7DQogICAgLQlpZiAoIW1vZHVsZXNfc3ltKQ0KICAgIC0JCW1vZHVsZXNfc3ltID0gc3lt
X2ZpbmQoICJuIiApOw0KICAgIC0NCiAgICAtCWlmICghbWVudV9oYXNfcHJvbXB0KCZyb290bWVu
dSkpIHsNCiAgICAtCQljdXJyZW50X2VudHJ5ID0gJnJvb3RtZW51Ow0KICAgIC0JCW1lbnVfYWRk
X3Byb21wdChQX01FTlUsICJNYWluIG1lbnUiLCBOVUxMKTsNCiAgICAtCX0NCiAgICAtDQogICAg
LQltZW51X2ZpbmFsaXplKCZyb290bWVudSk7DQogICAgLQlmb3JfYWxsX3N5bWJvbHMoaSwgc3lt
KSB7DQogICAgLQkJaWYgKHN5bV9jaGVja19kZXBzKHN5bSkpDQogICAgLQkJCXl5bmVycnMrKzsN
CiAgICAtCX0NCiAgICAtCWlmICh5eW5lcnJzKQ0KICAgIC0JCWV4aXQoMSk7DQogICAgLQlzeW1f
c2V0X2NoYW5nZV9jb3VudCgxKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGJvb2wgemNv
bmZfZW5kdG9rZW4oY29uc3QgY2hhciAqdG9rZW5uYW1lLA0KICAgIC0JCQkgICBjb25zdCBjaGFy
ICpleHBlY3RlZF90b2tlbm5hbWUpDQogICAgLXsNCiAgICAtCWlmIChzdHJjbXAodG9rZW5uYW1l
LCBleHBlY3RlZF90b2tlbm5hbWUpKSB7DQogICAgLQkJemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQg
JyVzJyB3aXRoaW4gJXMgYmxvY2siLA0KICAgIC0JCQkgICAgdG9rZW5uYW1lLCBleHBlY3RlZF90
b2tlbm5hbWUpOw0KICAgIC0JCXl5bmVycnMrKzsNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAg
LQl9DQogICAgLQlpZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1cnJlbnRfZmlsZSkgew0KICAg
IC0JCXpjb25mX2Vycm9yKCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIsDQogICAg
LQkJCSAgICB0b2tlbm5hbWUsIGV4cGVjdGVkX3Rva2VubmFtZSk7DQogICAgLQkJZnByaW50Zihz
dGRlcnIsICIlczolZDogbG9jYXRpb24gb2YgdGhlICclcydcbiIsDQogICAgLQkJCWN1cnJlbnRf
bWVudS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sDQogICAgLQkJCWV4cGVjdGVk
X3Rva2VubmFtZSk7DQogICAgLQkJeXluZXJycysrOw0KICAgIC0JCXJldHVybiBmYWxzZTsNCiAg
ICAtCX0NCiAgICAtCXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9p
ZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0
IGFwOw0KICAgIC0NCiAgICAtCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JdmFfc3RhcnQoYXAsIGVycik7DQogICAgLQl2
ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtCWZwcmlu
dGYoc3RkZXJyLCAiXG4iKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgemNvbmZf
ZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pDQogICAgLXsNCiAgICAtCXZhX2xpc3QgYXA7DQog
ICAgLQ0KICAgIC0JeXluZXJycysrOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICIlczolZDogIiwg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLQl2YV9zdGFydChhcCwgZXJy
KTsNCiAgICAtCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7DQogICAgLQl2YV9lbmQoYXApOw0K
ICAgIC0JZnByaW50ZihzdGRlcnIsICJcbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKmVycikNCiAgICAtew0KICAgIC0JZnByaW50ZihzdGRl
cnIsICIlczolZDogJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkgKyAxLCBl
cnIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9xdW90ZWRfc3RyaW5n
KEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQ0KICAgIC17DQogICAgLQljb25zdCBjaGFyICpw
Ow0KICAgIC0JaW50IGxlbjsNCiAgICAtDQogICAgLQlwdXRjKCciJywgb3V0KTsNCiAgICAtCXdo
aWxlICgocCA9IHN0cmNocihzdHIsICciJykpKSB7DQogICAgLQkJbGVuID0gcCAtIHN0cjsNCiAg
ICAtCQlpZiAobGVuKQ0KICAgIC0JCQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4sIHN0cik7DQog
ICAgLQkJZnB1dHMoIlxcXCIiLCBvdXQpOw0KICAgIC0JCXN0ciA9IHAgKyAxOw0KICAgIC0JfQ0K
ICAgIC0JZnB1dHMoc3RyLCBvdXQpOw0KICAgIC0JcHV0YygnIicsIG91dCk7DQogICAgLX0NCiAg
ICAtDQogICAgLXN0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVjdCBtZW51
ICptZW51KQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQog
ICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQ0KICAgIC0JaWYgKHN5bV9pc19jaG9p
Y2Uoc3ltKSkNCiAgICAtCQlmcHJpbnRmKG91dCwgIlxuY2hvaWNlXG4iKTsNCiAgICAtCWVsc2UN
CiAgICAtCQlmcHJpbnRmKG91dCwgIlxuY29uZmlnICVzXG4iLCBzeW0tPm5hbWUpOw0KICAgIC0J
c3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCWZwdXRz
KCIgIGJvb2xcbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNfVFJJU1RBVEU6
DQogICAgLQkJZnB1dHMoIiAgdHJpc3RhdGVcbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAg
LQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCWZwdXRzKCIgIHN0cmluZ1xuIiwgb3V0KTsNCiAgICAt
CQlicmVhazsNCiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQkJZnB1dHMoIiAgaW50ZWdlclxuIiwg
b3V0KTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQkJZnB1dHMoIiAg
aGV4XG4iLCBvdXQpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlmcHV0
cygiICA/Pz9cbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQlmb3IgKHBy
b3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgLQkJaWYgKHBy
b3AtPm1lbnUgIT0gbWVudSkNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJc3dpdGNoIChwcm9w
LT50eXBlKSB7DQogICAgLQkJY2FzZSBQX1BST01QVDoNCiAgICAtCQkJZnB1dHMoIiAgcHJvbXB0
ICIsIG91dCk7DQogICAgLQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsN
CiAgICAtCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7DQogICAgLQkJ
CQlmcHV0cygiIGlmICIsIG91dCk7DQogICAgLQkJCQlleHByX2ZwcmludChwcm9wLT52aXNpYmxl
LmV4cHIsIG91dCk7DQogICAgLQkJCX0NCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAt
CQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX0RFRkFVTFQ6DQogICAgLQkJCWZwdXRzKCAiICBkZWZh
dWx0ICIsIG91dCk7DQogICAgLQkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAg
LQkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgIC0JCQkJZnB1
dHMoIiBpZiAiLCBvdXQpOw0KICAgIC0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCBvdXQpOw0KICAgIC0JCQl9DQogICAgLQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgLQkJCWJy
ZWFrOw0KICAgIC0JCWNhc2UgUF9DSE9JQ0U6DQogICAgLQkJCWZwdXRzKCIgICNjaG9pY2UgdmFs
dWVcbiIsIG91dCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9TRUxFQ1Q6DQogICAg
LQkJCWZwdXRzKCAiICBzZWxlY3QgIiwgb3V0KTsNCiAgICAtCQkJZXhwcl9mcHJpbnQocHJvcC0+
ZXhwciwgb3V0KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJYnJlYWs7DQog
ICAgLQkJY2FzZSBQX0lNUExZOg0KICAgIC0JCQlmcHV0cyggIiAgaW1wbHkgIiwgb3V0KTsNCiAg
ICAtCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywg
b3V0KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX1JBTkdFOg0KICAgIC0JCQlmcHV0
cyggIiAgcmFuZ2UgIiwgb3V0KTsNCiAgICAtCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0
KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2Fz
ZSBQX01FTlU6DQogICAgLQkJCWZwdXRzKCAiICBtZW51ICIsIG91dCk7DQogICAgLQkJCXByaW50
X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0
KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX1NZTUJPTDoNCiAgICAtCQkJZnB1dHMo
ICIgIHN5bWJvbCAiLCBvdXQpOw0KICAgIC0JCQlmcHJpbnRmKG91dCwgIiVzXG4iLCBwcm9wLT5z
eW0tPm5hbWUpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQlkZWZhdWx0Og0KICAgIC0JCQlmcHJp
bnRmKG91dCwgIiAgdW5rbm93biBwcm9wICVkIVxuIiwgcHJvcC0+dHlwZSk7DQogICAgLQkJCWJy
ZWFrOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWlmIChtZW51LT5oZWxwKSB7DQogICAgLQkJ
aW50IGxlbiA9IHN0cmxlbihtZW51LT5oZWxwKTsNCiAgICAtCQl3aGlsZSAobWVudS0+aGVscFst
LWxlbl0gPT0gJ1xuJykNCiAgICAtCQkJbWVudS0+aGVscFtsZW5dID0gMDsNCiAgICAtCQlmcHJp
bnRmKG91dCwgIiAgaGVscFxuJXNcbiIsIG1lbnUtPmhlbHApOw0KICAgIC0JfQ0KICAgIC19DQog
ICAgLQ0KICAgIC12b2lkIHpjb25mZHVtcChGSUxFICpvdXQpDQogICAgLXsNCiAgICAtCXN0cnVj
dCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCXN0cnVj
dCBtZW51ICptZW51Ow0KICAgIC0NCiAgICAtCW1lbnUgPSByb290bWVudS5saXN0Ow0KICAgIC0J
d2hpbGUgKG1lbnUpIHsNCiAgICAtCQlpZiAoKHN5bSA9IG1lbnUtPnN5bSkpDQogICAgLQkJCXBy
aW50X3N5bWJvbChvdXQsIG1lbnUpOw0KICAgIC0JCWVsc2UgaWYgKChwcm9wID0gbWVudS0+cHJv
bXB0KSkgew0KICAgIC0JCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAgICAtCQkJY2FzZSBQX0NP
TU1FTlQ6DQogICAgLQkJCQlmcHV0cygiXG5jb21tZW50ICIsIG91dCk7DQogICAgLQkJCQlwcmlu
dF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAgLQkJCQlmcHV0cygiXG4iLCBv
dXQpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgUF9NRU5VOg0KICAgIC0JCQkJZnB1
dHMoIlxubWVudSAiLCBvdXQpOw0KICAgIC0JCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHBy
b3AtPnRleHQpOw0KICAgIC0JCQkJZnB1dHMoIlxuIiwgb3V0KTsNCiAgICAtCQkJCWJyZWFrOw0K
ICAgIC0JCQlkZWZhdWx0Og0KICAgIC0JCQkJOw0KICAgIC0JCQl9DQogICAgLQkJCWlmICghZXhw
cl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgIC0JCQkJZnB1dHMoIiAgZGVwZW5k
cyAiLCBvdXQpOw0KICAgIC0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBvdXQp
Ow0KICAgIC0JCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAt
DQogICAgLQkJaWYgKG1lbnUtPmxpc3QpDQogICAgLQkJCW1lbnUgPSBtZW51LT5saXN0Ow0KICAg
IC0JCWVsc2UgaWYgKG1lbnUtPm5leHQpDQogICAgLQkJCW1lbnUgPSBtZW51LT5uZXh0Ow0KICAg
IC0JCWVsc2Ugd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkgew0KICAgIC0JCQlpZiAobWVu
dS0+cHJvbXB0ICYmIG1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpDQogICAgLQkJCQlmcHV0
cygiXG5lbmRtZW51XG4iLCBvdXQpOw0KICAgIC0JCQlpZiAobWVudS0+bmV4dCkgew0KICAgIC0J
CQkJbWVudSA9IG1lbnUtPm5leHQ7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0KICAgIC0J
CX0NCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtI2luY2x1ZGUgInV0aWwuYyINCiAgICAt
I2luY2x1ZGUgIm1lbnUuYyINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoDQogICAg
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggZjBkNjNiNC4uMDAwMDAwMA0KICAg
IC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by11
bmlrcmFmdC5wYXRjaA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw3NiArMCwwIEBADQog
ICAgLWRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy9NYWtlZmlsZQ0KICAgIC1pbmRleCAzZjMyN2UyLi43YjUzMmM1IDEwMDY0NA0K
ICAgIC0tLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlDQogICAgLSsrKyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUNCiAgICAtQEAgLTEsNiArMSw2IEBADQogICAgLSAjIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLSAjID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KICAgIC0tIyBLZXJuZWwgY29uZmlndXJhdGlvbiB0YXJnZXRzDQogICAgLSsjIFVuaWtyYWZ0
IGNvbmZpZ3VyYXRpb24gdGFyZ2V0cw0KICAgIC0gIyBUaGVzZSB0YXJnZXRzIGFyZSB1c2VkIGZy
b20gdG9wLWxldmVsIG1ha2VmaWxlDQogICAgLSANCiAgICAtIFBIT05ZICs9IHhjb25maWcgZ2Nv
bmZpZyBtZW51Y29uZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZyBcDQog
ICAgLWRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQ0KICAgIC1pbmRleCBhYTQ4M2NiLi4wM2U5N2Q3IDEw
MDY0NA0KICAgIC0tLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlDQogICAgLSsr
KyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUNCiAgICAtQEAgLTQsNyArNCw3IEBA
DQogICAgLSANCiAgICAtIDx3aWRnZXQgY2xhc3M9Ikd0a1dpbmRvdyIgaWQ9IndpbmRvdzEiPg0K
ICAgIC0gICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgLS0g
IDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkd0ayBLZXJuZWwgQ29u
ZmlndXJhdG9yPC9wcm9wZXJ0eT4NCiAgICAtKyAgPHByb3BlcnR5IG5hbWU9InRpdGxlIiB0cmFu
c2xhdGFibGU9InllcyI+R3RrIFVuaWtyYWZ0IENvbmZpZ3VyYXRvcjwvcHJvcGVydHk+DQogICAg
LSAgIDxwcm9wZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lORE9XX1RPUExFVkVMPC9wcm9wZXJ0eT4N
CiAgICAtICAgPHByb3BlcnR5IG5hbWU9IndpbmRvd19wb3NpdGlvbiI+R1RLX1dJTl9QT1NfTk9O
RTwvcHJvcGVydHk+DQogICAgLSAgIDxwcm9wZXJ0eSBuYW1lPSJtb2RhbCI+RmFsc2U8L3Byb3Bl
cnR5Pg0KICAgIC1kaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9tY29uZi5jDQogICAgLWluZGV4IDY5NDA5MWYuLjUzYzRhNjIgMTAw
NjQ0DQogICAgLS0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYw0KICAgIC0rKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L21jb25mLmMNCiAgICAtQEAgLTE3NSw5ICsxNzUsOSBAQCBtZW51
X2luc3RydWN0aW9uc1tdID0NCiAgICAtIAkiQXJyb3cga2V5cyBuYXZpZ2F0ZSB0aGUgbWVudS4g
ICINCiAgICAtIAkiPEVudGVyPiBzZWxlY3RzIHN1Ym1lbnVzIC0tLT4gKG9yIGVtcHR5IHN1Ym1l
bnVzIC0tLS0pLiAgIg0KICAgIC0gCSJIaWdobGlnaHRlZCBsZXR0ZXJzIGFyZSBob3RrZXlzLiAg
Ig0KICAgIC0tCSJQcmVzc2luZyA8WT4gaW5jbHVkZXMsIDxOPiBleGNsdWRlcywgPE0+IG1vZHVs
YXJpemVzIGZlYXR1cmVzLiAgIg0KICAgIC0rCSJQcmVzc2luZyA8WT4gc2VsZWN0cyBhIGZlYXR1
cmUsIHdoaWxlIDxOPiB3aWxsIGV4Y2x1ZGUgYSBmZWF0dXJlLiAgIg0KICAgIC0gCSJQcmVzcyA8
RXNjPjxFc2M+IHRvIGV4aXQsIDw/PiBmb3IgSGVscCwgPC8+IGZvciBTZWFyY2guICAiDQogICAg
LS0JIkxlZ2VuZDogWypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBt
b2R1bGUgY2FwYWJsZSIsDQogICAgLSsJIkxlZ2VuZDogWypdIGZlYXR1cmUgaXMgc2VsZWN0ZWQg
IFsgXSBmZWF0dXJlIGlzIGV4Y2x1ZGVkIiwNCiAgICAtIHJhZGlvbGlzdF9pbnN0cnVjdGlvbnNb
XSA9DQogICAgLSAJIlVzZSB0aGUgYXJyb3cga2V5cyB0byBuYXZpZ2F0ZSB0aGlzIHdpbmRvdyBv
ciAiDQogICAgLSAJInByZXNzIHRoZSBob3RrZXkgb2YgdGhlIGl0ZW0geW91IHdpc2ggdG8gc2Vs
ZWN0ICINCiAgICAtQEAgLTk1Nyw3ICs5NTcsNyBAQCBzdGF0aWMgaW50IGhhbmRsZV9leGl0KHZv
aWQpDQogICAgLSAJaWYgKGNvbmZfZ2V0X2NoYW5nZWQoKSkNCiAgICAtIAkJcmVzID0gZGlhbG9n
X3llc25vKE5VTEwsDQogICAgLSAJCQkJICAgIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcg
Y29uZmlndXJhdGlvbj9cbiINCiAgICAtLQkJCQkgICAgICIoUHJlc3MgPEVTQz48RVNDPiB0byBj
b250aW51ZSBrZXJuZWwgY29uZmlndXJhdGlvbi4pIiwNCiAgICAtKwkJCQkgICAgICIoUHJlc3Mg
PEVTQz48RVNDPiB0byBjb250aW51ZSBVbmlrcmFmdCBjb25maWd1cmF0aW9uLikiLA0KICAgIC0g
CQkJCSAgIDYsIDYwKTsNCiAgICAtIAllbHNlDQogICAgLSAJCXJlcyA9IC0xOw0KICAgIC1kaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9uY29uZi5jIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9uY29uZi5jDQogICAgLWluZGV4IGNiYWZlM2IuLmQzZDkwOGMgMTAwNjQ0DQogICAgLS0tLSBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYw0KICAgIC0rKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L25jb25mLmMNCiAgICAtQEAgLTI5LDcgKzI5LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgbmNv
bmZfZ2xvYmFsX2hlbHBbXSA9DQogICAgLSAiTWVudSBlbnRyaWVzXG4iDQogICAgLSAiLS0tLS0t
LS0tLS0tXG4iDQogICAgLSAiVGhpcyBpbnRlcmZhY2UgbGV0cyB5b3Ugc2VsZWN0IGZlYXR1cmVz
IGFuZCBwYXJhbWV0ZXJzIGZvciB0aGUga2VybmVsXG4iDQogICAgLS0iYnVpbGQuICBLZXJuZWwg
ZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBidWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIHJlbW92ZWQu
XG4iDQogICAgLSsiYnVpbGQuICBVbmlrcmFmdCBmZWF0dXJlcyBjYW4gZWl0aGVyIGJlIHNlbGVj
dGVkIG9yIGRlc2VsZWN0ZWQuXG4iDQogICAgLSAiUGFyYW1ldGVycyBtdXN0IGJlIGVudGVyZWQg
YXMgdGV4dCBvciBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIG51bWJlcnMuXG4iDQogICAgLSAiXG4i
DQogICAgLSAiTWVudSBlbnRyaWVzIGJlZ2lubmluZyB3aXRoIGZvbGxvd2luZyBicmFjZXMgcmVw
cmVzZW50IGZlYXR1cmVzIHRoYXRcbiINCiAgICAtZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvcWNvbmYuY2MgYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmNjDQogICAgLWluZGV4
IGNlN2ZjODcuLjAwMjFhYTYgMTAwNjQ0DQogICAgLS0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
cWNvbmYuY2MNCiAgICAtKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYw0KICAgIC1A
QCAtNDYsNyArNDYsNyBAQCBzdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgY2hh
ciogc3RyKQ0KICAgIC0gfQ0KICAgIC0gDQogICAgLSBDb25maWdTZXR0aW5nczo6Q29uZmlnU2V0
dGluZ3MoKQ0KICAgIC0tCTogUVNldHRpbmdzKCJrZXJuZWwub3JnIiwgInFjb25mIikNCiAgICAt
Kwk6IFFTZXR0aW5ncygidW5pa3JhZnQub3JnIiwgInFjb25mIikNCiAgICAtIHsNCiAgICAtIH0N
CiAgICAtIA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDIt
aW1wb3J0LW1ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAyLWltcG9y
dC1tYWtlZmlsZS5icg0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGZm
ZTBiYTkuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDIt
aW1wb3J0LW1ha2VmaWxlLmJyDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDU5ICswLDAg
QEANCiAgICAtZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgLW5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgLWluZGV4IDAwMDAwMDAuLjQxYzVjZTENCiAgICAtLS0tIC9kZXYvbnVsbA0KICAgIC0r
KysgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgLUBAIC0wLDAgKzEsNTMg
QEANCiAgICAtK3NyYyA6PSAuDQogICAgLSt0b3Bfc3JjZGlyPS4uLy4uLw0KICAgIC0rdG9wX2J1
aWxkZGlyPS4uLy4uLw0KICAgIC0rc3JjdHJlZSA6PSAuDQogICAgLStvYmogPz0gLg0KICAgIC0r
DQogICAgLStpbmNsdWRlIE1ha2VmaWxlDQogICAgLSsjSE9TVENGTEFHUys9LURpbmxpbmU9IiIg
LWluY2x1ZGUgZm9vLmgNCiAgICAtKy1pbmNsdWRlICQob2JqKS8uZGVwZW5kDQogICAgLSskKG9i
aikvLmRlcGVuZDogJCh3aWxkY2FyZCAqLmggKi5jKQ0KICAgIC0rCSQoSE9TVENDKSAkKEhPU1Rf
RVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoN
CiAgICAtKw0KICAgIC0rX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9z
dHByb2dzLW0pKQ0KICAgIC0raG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJv
Z3MpLCQoaWYgJCgkKG0pLW9ianMpLCwkKG0pKSkNCiAgICAtK2hvc3QtY211bHRpIDo9ICQoZm9y
ZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwNCiAgICAtKyAgICAgICAgICAgJChpZiAkKCQobSktY3h4
b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkNCiAgICAtK2hvc3QtY3h4bXVsdGkgOj0g
JChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXA0KICAgIC0rICAgICAgICAgICAkKGlmICQoJCht
KS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQ0KICAgIC0raG9zdC1jb2JqcyA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KCQobSktb2JqcykpKSkNCiAgICAtK2hvc3QtY3h4b2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikv
LCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktY3h4b2JqcykpKSkNCiAg
ICAtKw0KICAgIC0rSE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIg0K
ICAgIC0rDQogICAgLSskKGhvc3QtY3NpbmdsZSk6ICU6ICUuYw0KICAgIC0rCSQoSE9TVENDKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAk
KG9iaikvJEANCiAgICAtKw0KICAgIC0rJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1jb2Jqcykg
JChob3N0LWNzaGxpYikNCiAgICAtKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhP
U1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9i
anMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1vICQob2JqKS8kQA0KICAgIC0rDQogICAgLSsk
KGhvc3QtY3h4bXVsdGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3Qt
Y3NobGliKQ0KICAgIC0rCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxB
R1MpICQoSE9TVENYWEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2Jqcykg
JCgkKEBGKS1jeHhvYmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAg
ICAtKw0KICAgIC0rJChvYmopLyUubzogJS5jDQogICAgLSsJJChIT1NUQ0MpICQoSE9TVF9FWFRS
QUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRADQog
ICAgLSsNCiAgICAtKyQob2JqKS8lLm86ICQob2JqKS8lLmMNCiAgICAtKwkkKEhPU1RDQykgJChI
T1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwg
LW8gJEANCiAgICAtKw0KICAgIC0rJChvYmopLyUubzogJS5jYw0KICAgIC0rCSQoSE9TVENDKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1j
ICQ8IC1vICRADQogICAgLSsNCiAgICAtKyQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZA0KICAg
IC0rCSQoUSljYXQgJDwgPiAkQA0KICAgIC0rDQogICAgLStjbGVhbjoNCiAgICAtKwkkKFEpcm0g
LWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkNCiAgICAtK2Rpc3RjbGVhbjog
Y2xlYW4NCiAgICAtKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGx4ZGlhbG9nKSAk
KGNvbmYtb2JqcykgJChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpzKSBcDQogICAgLSsJCSQo
aG9zdHByb2dzLXkpICQocWNvbmYtY3h4b2JqcykgJChxY29uZi1vYmpzKSAkKGdjb25mLW9ianMp
IFwNCiAgICAtKwkJbWNvbmYgLmRlcGVuZCkNCiAgICAtKw0KICAgIC0rRk9SQ0U6DQogICAgLSsu
UEhPTlk6IEZPUkNFIGNsZWFuIGRpc3RjbGVhbg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXItZnJvbS1rZXJuZWwg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDMtaW5jbHVkZS1tYWtlZmlsZS1oZWxwZXIt
ZnJvbS1rZXJuZWwNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAzNWM3
OWY4Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzAzLWlu
Y2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsDQogICAgKysrIC9kZXYvbnVsbA0KICAg
IEBAIC0xLDEwMiArMCwwIEBADQogICAgLWRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgIC1pbmRl
eCA0MWM1Y2UxLi4wZmRiZTlhIDEwMDY0NA0KICAgIC0tLS0gYS9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLmJyDQogICAgLSsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIN
CiAgICAtQEAgLTQsNiArNCw3IEBAIHRvcF9idWlsZGRpcj0uLi8uLi8NCiAgICAtIHNyY3RyZWUg
Oj0gLg0KICAgIC0gb2JqID89IC4NCiAgICAtIA0KICAgIC0raW5jbHVkZSBNYWtlZmlsZS5ydWxl
cw0KICAgIC0gaW5jbHVkZSBNYWtlZmlsZQ0KICAgIC0gI0hPU1RDRkxBR1MrPS1EaW5saW5lPSIi
IC1pbmNsdWRlIGZvby5oDQogICAgLSAtaW5jbHVkZSAkKG9iaikvLmRlcGVuZA0KICAgIC1kaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcyBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvTWFrZWZpbGUucnVsZXMNCiAgICAtbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICAt
aW5kZXggMDAwMDAwMC4uNzhhOWM4MQ0KICAgIC0tLS0gL2Rldi9udWxsDQogICAgLSsrKyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUucnVsZXMNCiAgICAtQEAgLTAsMCArMSw4NCBAQA0K
ICAgIC0ra2VjaG8gOj0gZWNobw0KICAgIC0rY29tbWEgOj0gLA0KICAgIC0rDQogICAgLSsNCiAg
ICAtK2RvdC10YXJnZXQgPSAkKGRpciAkQCkuJChub3RkaXIgJEApDQogICAgLSsNCiAgICAtK2Fu
eS1wcmVyZXEgPSAkKGZpbHRlci1vdXQgJChQSE9OWSksJD8pICQoZmlsdGVyLW91dCAkKFBIT05Z
KSAkKHdpbGRjYXJkICReKSwkXikNCiAgICAtKw0KICAgIC0rYXJnLWNoZWNrID0gJChpZiAkKHN0
cmlwICQoY21kXyRAKSksLDEpDQogICAgLSsNCiAgICAtK21ha2UtY21kID0gJChjYWxsIGVzY3Nx
LCQoc3Vic3QgJChwb3VuZCksJCQocG91bmQpLCQoc3Vic3QgJCQsJCQkJCwkKGNtZF8kKDEpKSkp
KQ0KICAgIC0rDQogICAgLSsjIHByaW50aW5nIGNvbW1hbmRzDQogICAgLStjbWQgPSBAc2V0IC1l
OyAkKGVjaG8tY21kKSAkKGNtZF8kKDEpKQ0KICAgIC0rDQogICAgLStkZXBmaWxlID0gJChzdWJz
dCAkKGNvbW1hKSxfLCQoZG90LXRhcmdldCkuZCkNCiAgICAtK2RlcGZsYWdzID0gLVdwJChjb21t
YSktTUQkKGNvbW1hKSQoY2FsbCBkb3QtdGFyZ2V0KQ0KICAgIC0rDQogICAgLStjbWRfYW5kX2Zp
eGRlcCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K
ICAgIC0rCSQoY21kKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXA0KICAgIC0rCSQob2JqKS9maXhkZXAgJChkZXBmaWxlKSAkQCAnJChtYWtl
LWNtZCknID4gJChkb3QtdGFyZ2V0KS5jbWQ7XA0KICAgIC0rCXJtIC1mICQoZGVwZmlsZSkNCiAg
ICAtKw0KICAgIC0raWZfY2hhbmdlZF9kZXAgPSAkKGlmICQoc3RyaXAgJChhbnktcHJlcmVxKSAk
KGFyZy1jaGVjaykpLCQoY21kX2FuZF9maXhkZXApLEA6KQ0KICAgIC0rDQogICAgLStkZWZpbmUg
bXVsdGlfZGVwZW5kDQogICAgLSskKGZvcmVhY2ggbSwgJChub3RkaXIgJDEpLCBcDQogICAgLSsg
ICAgJChldmFsICQob2JqKS8kbTogXA0KICAgIC0rICAgICQoYWRkcHJlZml4ICQob2JqKS8sICQo
Zm9yZWFjaCBzLCAkMywgJCgkKG06JSQoc3RyaXAgJDIpPSUkKHMpKSkpKSkpDQogICAgLStlbmRl
Zg0KICAgIC0rDQogICAgLSsjIyMNCiAgICAtKyMgZmlsZWNoayBpcyB1c2VkIHRvIGNoZWNrIGlm
IHRoZSBjb250ZW50IG9mIGEgZ2VuZXJhdGVkIGZpbGUgaXMgdXBkYXRlZC4NCiAgICAtKyMgU2Ft
cGxlIHVzYWdlOg0KICAgIC0rIw0KICAgIC0rIyBmaWxlY2hrX3NhbXBsZSA9IGVjaG8gJChLRVJO
RUxSRUxFQVNFKQ0KICAgIC0rIyB2ZXJzaW9uLmg6IEZPUkNFDQogICAgLSsjICAgJChjYWxsIGZp
bGVjaGssc2FtcGxlKQ0KICAgIC0rIw0KICAgIC0rIyBUaGUgcnVsZSBkZWZpbmVkIHNoYWxsIHdy
aXRlIHRvIHN0ZG91dCB0aGUgY29udGVudCBvZiB0aGUgbmV3IGZpbGUuDQogICAgLSsjIFRoZSBl
eGlzdGluZyBmaWxlIHdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgbmV3IG9uZS4NCiAgICAtKyMg
LSBJZiBubyBmaWxlIGV4aXN0IGl0IGlzIGNyZWF0ZWQNCiAgICAtKyMgLSBJZiB0aGUgY29udGVu
dCBkaWZmZXIgdGhlIG5ldyBmaWxlIGlzIHVzZWQNCiAgICAtKyMgLSBJZiB0aGV5IGFyZSBlcXVh
bCBubyBjaGFuZ2UsIGFuZCBubyB0aW1lc3RhbXAgdXBkYXRlDQogICAgLSsjIC0gc3RkaW4gaXMg
cGlwZWQgaW4gZnJvbSB0aGUgZmlyc3QgcHJlcmVxdWlzaXRlICgkPCkgc28gb25lIGhhcw0KICAg
IC0rIyAgIHRvIHNwZWNpZnkgYSB2YWxpZCBmaWxlIGFzIGZpcnN0IHByZXJlcXVpc2l0ZSAob2Z0
ZW4gdGhlIGtidWlsZCBmaWxlKQ0KICAgIC0rZGVmaW5lIGZpbGVjaGsNCiAgICAtKwkkKFEpc2V0
IC1lOyAgICAgICAgICAgICBcDQogICAgLSsJbWtkaXIgLXAgJChkaXIgJEApOyAgICAgICAgIFwN
CiAgICAtKwl7ICQoZmlsZWNoa18kKDEpKTsgfSA+ICRALnRtcDsgICAgICBcDQogICAgLSsJaWYg
WyAtciAkQCBdICYmIGNtcCAtcyAkQCAkQC50bXA7IHRoZW4gIFwNCiAgICAtKwkgICAgcm0gLWYg
JEAudG1wOyAgICAgICAgICAgXA0KICAgIC0rCWVsc2UgICAgICAgICAgICAgICAgICAgIFwNCiAg
ICAtKwkgICAgJChrZWNobykgJyAgVVBEICAgICAkQCc7ICAgIFwNCiAgICAtKwkgICAgbXYgLWYg
JEAudG1wICRAOyAgICAgICAgXA0KICAgIC0rCWZpDQogICAgLStlbmRlZg0KICAgIC0rDQogICAg
LSsjIEV4ZWN1dGUgY29tbWFuZCBpZiBjb21tYW5kIGhhcyBjaGFuZ2VkIG9yIHByZXJlcXVpc2l0
ZShzKSBhcmUgdXBkYXRlZC4NCiAgICAtK2lmX2NoYW5nZWQgPSAkKGlmICQoc3RyaXAgJChhbnkt
cHJlcmVxKSAkKGFyZy1jaGVjaykpLAkJXA0KICAgIC0rCSQoY21kKTtcDQogICAgLSsJcHJpbnRm
ICclc1xuJyAnY21kXyRAIDo9ICQobWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kLCBAOikN
CiAgICAtKw0KICAgIC0rIyBMRVgNCiAgICAtKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgLStx
dWlldF9jbWRfZmxleCA9IExFWCAkQA0KICAgIC0rY21kX2ZsZXggPSAkKExFWCkgLW8kQCAtTCAk
PA0KICAgIC0rDQogICAgLSskKG9iaikvJS5sZXguYzogJChzcmMpLyUubCBGT1JDRQ0KICAgIC0r
CSQoY2FsbCBpZl9jaGFuZ2VkLGZsZXgpDQogICAgLSsNCiAgICAtKyMgWUFDQw0KICAgIC0rIyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0NCiAgICAtK3F1aWV0X2NtZF9iaXNvbiA9IFlBQ0MgICAgJEANCiAg
ICAtK2NtZF9iaXNvbiA9ICQoWUFDQykgLW8kQCAtdCAtbCAkPA0KICAgIC0rDQogICAgLSskKG9i
aikvJS50YWIuYzogJChzcmMpLyUueSBGT1JDRQ0KICAgIC0rCSQoY2FsbCBpZl9jaGFuZ2VkLGJp
c29uKQ0KICAgIC0rDQogICAgLStxdWlldF9jbWRfYmlzb25faCA9IFlBQ0MgICAgJEANCiAgICAt
K2NtZF9iaXNvbl9oID0gJChZQUNDKSAtby9kZXYvbnVsbCAtLWRlZmluZXM9JEAgLXQgLWwgJDwN
CiAgICAtKw0KICAgIC0rJChvYmopLyUudGFiLmg6ICQoc3JjKS8lLnkgRk9SQ0UNCiAgICAtKwkk
KGNhbGwgaWZfY2hhbmdlZCxiaXNvbl9oKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZSBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlDQogICAgZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggM2RlMGNiMS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlDQogICAgKysrIC9kZXYvbnVs
bA0KICAgIEBAIC0xLDI2ICswLDAgQEANCiAgICAtZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAg
LWluZGV4IDBmZGJlOWEuLmMxMWYyOTcgMTAwNjQ0DQogICAgLS0tLSBhL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnINCiAgICAtKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmls
ZS5icg0KICAgIC1AQCAtMzEsMTggKzMxLDYgQEAgJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1j
b2JqcykgJChob3N0LWNzaGxpYikNCiAgICAtICQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1j
eHhvYmpzKSAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpDQogICAgLSAJJChIT1NUQ1hYKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEApICQoYWRk
cHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhPU1RMT0FE
TElCRVNfJChARikpIC1vICQob2JqKS8kQA0KICAgIC0gDQogICAgLS0kKG9iaikvJS5vOiAlLmMN
CiAgICAtLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9T
VENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICAtLQ0KICAgIC0tJChvYmopLyUubzogJChv
YmopLyUuYw0KICAgIC0tCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFH
UykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAkPCAtbyAkQA0KICAgIC0tDQogICAgLS0kKG9iaikv
JS5vOiAlLmNjDQogICAgLS0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZM
QUdTKSAkKEhPU1RDWFhGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICAtLQ0KICAgIC0tJChv
YmopLyU6OiAkKHNyYykvJV9zaGlwcGVkDQogICAgLS0JJChRKWNhdCAkPCA+ICRADQogICAgLS0N
CiAgICAtIGNsZWFuOg0KICAgIC0gCSQoUSlybSAtZiAkKGFkZHByZWZpeCAkKG9iaikvLCQoY2xl
YW4tZmlsZXMpKQ0KICAgIC0gZGlzdGNsZWFuOiBjbGVhbg0KICAgIC1kaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUgYi9zdXBwb3J0
L2tjb25maWcubmV3L3BhdGNoZXMvMDQtcmVtb3ZlLWdlbmVyaWMtcnVsZQ0KICAgIC1uZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIC1pbmRleCAwMDAwMDAwLi5lNjlkZTI5DQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVwLWhl
YWRlciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQtZml4ZGVw
LWhlYWRlcg0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDNiMmM4YWUu
LjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDUtYWRkLXVu
aWtyYWZ0LWZpeGRlcC1oZWFkZXINCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTIgKzAs
MCBAQA0KICAgIC1kaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYyBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvZml4ZGVwLmMNCiAgICAtaW5kZXggZmFjYmQ2MC4uOTdhZmI3MCAx
MDA2NDQNCiAgICAtLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYw0KICAgIC0rKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jDQogICAgLUBAIC0yNjksNiArMjY5LDcgQEAg
c3RhdGljIGludCBpc19pZ25vcmVkX2ZpbGUoY29uc3QgY2hhciAqcywgaW50IGxlbikNCiAgICAt
IHsNCiAgICAtIAlyZXR1cm4gc3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRl
ZC9hdXRvY29uZi5oIikgfHwNCiAgICAtIAkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICJp
bmNsdWRlL2dlbmVyYXRlZC9hdXRva3N5bXMuaCIpIHx8DQogICAgLSsJICAgICAgIHN0cl9lbmRz
X3dpdGgocywgbGVuLCAiYnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fA0KICAgIC0gCSAg
ICAgICBzdHJfZW5kc193aXRoKHMsIGxlbiwgIi52ZXIiKTsNCiAgICAtIH0NCiAgICAtIA0KICAg
IGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3ZlLWltcGxp
Y2l0LXJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA2LXJlbW92ZS1pbXBsaWNp
dC1ydWxlcw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDRlMTc5ZTgu
LjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDYtcmVtb3Zl
LWltcGxpY2l0LXJ1bGVzDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDEzICswLDAgQEAN
CiAgICAtZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBw
b3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgLWluZGV4IDU4ZTZlNzUuLmFmZTk0ZWUg
MTAwNjQ0DQogICAgLS0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICAt
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgIC1AQCAtNCw2ICs0LDgg
QEAgdG9wX2J1aWxkZGlyPS4uLy4uLw0KICAgIC0gc3JjdHJlZSA6PSAuDQogICAgLSBvYmogPz0g
Lg0KICAgIC0gDQogICAgLSsuU1VGRklYRVMgOg0KICAgIC0rDQogICAgLSBpbmNsdWRlIE1ha2Vm
aWxlLnJ1bGVzDQogICAgLSBpbmNsdWRlIE1ha2VmaWxlDQogICAgLSAjSE9TVENGTEFHUys9LURp
bmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzDQogICAgZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggZDI0ZGM5Ny4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBv
cnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNy1pbXBvcnQtaG9zdC10b29scy1ydWxlcw0KICAgICsr
KyAvZGV2L251bGwNCiAgICBAQCAtMSwxNDIgKzAsMCBAQA0KICAgIC1kaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZp
bGUuYnINCiAgICAtaW5kZXggYWZlOTRlZS4uOGU2NGE5YiAxMDA2NDQNCiAgICAtLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgIC0rKysgYi9zdXBwb3J0L2tjb25maWcu
bmV3L01ha2VmaWxlLmJyDQogICAgLUBAIC0xMCwyOSArMTAsNDEgQEAgaW5jbHVkZSBNYWtlZmls
ZS5ydWxlcw0KICAgIC0gaW5jbHVkZSBNYWtlZmlsZQ0KICAgIC0gI0hPU1RDRkxBR1MrPS1EaW5s
aW5lPSIiIC1pbmNsdWRlIGZvby5oDQogICAgLSAtaW5jbHVkZSAkKG9iaikvLmRlcGVuZA0KICAg
IC0tJChvYmopLy5kZXBlbmQ6ICQod2lsZGNhcmQgKi5oICouYykNCiAgICAtLQkkKEhPU1RDQykg
JChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpIC1NTSAqLmMgPiAkQCAyPi9kZXYvbnVs
bCB8fCA6DQogICAgLSANCiAgICAtIF9faG9zdHByb2dzIDo9ICQoc29ydCAkKGhvc3Rwcm9ncy15
KSAkKGhvc3Rwcm9ncy1tKSkNCiAgICAtLWhvc3QtY3NpbmdsZSA6PSAkKGZvcmVhY2ggbSwkKF9f
aG9zdHByb2dzKSwkKGlmICQoJChtKS1vYmpzKSwsJChtKSkpDQogICAgLStob3N0LWNzaGxpYiA6
PSAkKHNvcnQgJChob3N0bGlicy15KSAkKGhvc3RsaWJzLW0pKQ0KICAgIC0raG9zdC1jeHhzaGxp
YiA6PSAkKHNvcnQgJChob3N0Y3h4bGlicy15KSAkKGhvc3RjeHhsaWJzLW0pKQ0KICAgIC0rDQog
ICAgLSsjIEMgY29kZQ0KICAgIC0rIyBFeGVjdXRhYmxlcyBjb21waWxlZCBmcm9tIGEgc2luZ2xl
IC5jIGZpbGUNCiAgICAtK2hvc3QtY3NpbmdsZTo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3Mp
LCBcDQogICAgLSsgICAgICAgICAgICAgJChpZiAkKCQobSktb2JqcykkKCQobSktY3h4b2Jqcyks
LCQobSkpKQ0KICAgIC0gaG9zdC1jbXVsdGkgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyks
XA0KICAgIC0tICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwsJChpZiAkKCQobSktb2Jq
cyksJChtKSkpKQ0KICAgIC0taG9zdC1jeHhtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHBy
b2dzKSxcDQogICAgLS0gICAgICAgICAgICQoaWYgJCgkKG0pLWN4eG9ianMpLCQobSksJChpZiAk
KCQobSktb2JqcyksKSkpDQogICAgLS1ob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8s
JChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoJChtKS1vYmpzKSkpKQ0KICAgIC0t
aG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChzb3J0ICQoZm9yZWFjaCBtLCQo
X19ob3N0cHJvZ3MpLCQoJChtKS1jeHhvYmpzKSkpKQ0KICAgIC0rCQkgICAgICAgICAgICAkKGlm
ICQoJChtKS1jeHhvYmpzKSwsJChpZiAkKCQobSktb2JqcyksJChtKSkpKQ0KICAgIC0rIyBPYmpl
Y3QgKC5vKSBmaWxlcyBjb21waWxlZCBmcm9tIC5jIGZpbGVzDQogICAgLStob3N0LWNvYmpzICA6
PSAkKHNvcnQgJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJCgkKG0pLW9ianMpKSkNCiAgICAt
Kw0KICAgIC0rIyBDKysgY29kZQ0KICAgIC0rIyBDKysgZXhlY3V0YWJsZXMgY29tcGlsZWQgZnJv
bSBhdCBsZWFzdCBvbmUgLmNjIGZpbGUNCiAgICAtKyMgYW5kIHplcm8gb3IgbW9yZSAuYyBmaWxl
cw0KICAgIC0rIGhvc3QtY3h4bXVsdGkgICA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KGlmICQoJChtKS1jeHhvYmpzKSwkKG0pKSkNCiAgICAtKyMgQysrIE9iamVjdCAoLm8pIGZpbGVz
IGNvbXBpbGVkIGZyb20gLmNjIGZpbGVzDQogICAgLStob3N0LWN4eG9ianMgICAgOj0gJChzb3J0
ICQoZm9yZWFjaCBtLCQoaG9zdC1jeHhtdWx0aSksJCgkKG0pLWN4eG9ianMpKSkNCiAgICAtKyNP
YmplY3QgKC5vKSBmaWxlcyB1c2VkIGJ5IHRoZSBzaGFyZWQgbGliYXJpZXMNCiAgICAtK2hvc3Qt
Y3Nob2JqcyAgICA6PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWNzaGxpYiksJCgkKG06LnNv
PS1vYmpzKSkpKQ0KICAgIC0raG9zdC1jeHhzaG9ianMgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwk
KGhvc3QtY3h4c2hsaWIpLCQoJChtOi5zbz0tb2JqcykpKSkNCiAgICAtKw0KICAgIC0rDQogICAg
LStob3N0LWNzaW5nbGUgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3NpbmdsZSkpDQog
ICAgLStob3N0LWNtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY211bHRpKSkN
CiAgICAtK2hvc3QtY3h4bXVsdGkgIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG11
bHRpKSkNCiAgICAtK2hvc3QtY29ianMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY29i
anMpKQ0KICAgIC0raG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4
eG9ianMpKQ0KICAgIC0gZml4ZGVwLW9ianMgOj0gJChvYmopL2ZpeGRlcC5vDQogICAgLSANCiAg
ICAtIEhPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKG9iaikgLURDT05GSUdfPVwiXCINCiAgICAtIA0K
ICAgIC0tJChob3N0LWNzaW5nbGUpOiAlOiAlLmMNCiAgICAtLQkkKEhPU1RDQykgJChIT1NUX0VY
VFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kQCkgJDwgLW8gJChvYmopLyRA
DQogICAgLS0NCiAgICAtLSQoaG9zdC1jbXVsdGkpOiAlOiAkKGhvc3QtY29ianMpICQoaG9zdC1j
c2hsaWIpDQogICAgLS0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdT
KSAkKEhPU1RDRkxBR1NfJEApICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSkgJChI
T1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAgICAtIA0KICAgIC0tJChob3N0LWN4
eG11bHRpKTogJTogJChob3N0LWN4eG9ianMpICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxpYikN
CiAgICAtLQkkKEhPU1RDWFgpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhP
U1RDWFhGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpICQoJChARikt
Y3h4b2JqcykpICQoSE9TVExPQURMSUJFU18kKEBGKSkgLW8gJChvYmopLyRADQogICAgLSANCiAg
ICAtICQob2JqKS9maXhkZXA6ICQoZml4ZGVwLW9ianMpDQogICAgLSAJJChIT1NUQ0MpICQoSE9T
VF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpICQ8IC1vICRA
DQogICAgLUBAIC00MCw2ICs1Miw4MCBAQCAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQ0K
ICAgIC0gJChmaXhkZXAtb2Jqcyk6ICQoc3JjKS9maXhkZXAuYw0KICAgIC0gCSQoSE9TVENDKSAk
KEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAtYyAk
PCAtbyAkQA0KICAgIC0gDQogICAgLSsjIyMjIw0KICAgIC0rIyBDb21waWxlIHByb2dyYW1zIG9u
IHRoZSBob3N0DQogICAgLSsNCiAgICAtKyMgQ3JlYXRlIGV4ZWN1dGFibGUgZnJvbSBhIHNpbmds
ZSAuYyBmaWxlDQogICAgLSsjIGhvc3QtY3NpbmdsZSAtPiBFeGVjdXRhYmxlDQogICAgLStxdWll
dF9jbWRfaG9zdC1jc2luZ2xlIAk9IEhPU1RDQyAgJEANCiAgICAtKyAgICAgIGNtZF9ob3N0LWNz
aW5nbGUJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgJChIT1NUTERGTEFHUykgLW8gJEAgJDwg
XA0KICAgIC0rCQkkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18kKEBGKSkNCiAgICAtKyQoaG9z
dC1jc2luZ2xlKTogJChvYmopLyU6ICQoc3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQ0KICAg
IC0rCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNzaW5nbGUpDQogICAgLSsNCiAgICAtKyMg
TGluayBhbiBleGVjdXRhYmxlIGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmlsZXMsIGFsbCBwbGFpbiBj
DQogICAgLSsjIGhvc3QtY211bHRpIC0+IGV4ZWN1dGFibGUNCiAgICAtK3F1aWV0X2NtZF9ob3N0
LWNtdWx0aQk9IEhPU1RMRCAgJEANCiAgICAtKyAgICAgIGNtZF9ob3N0LWNtdWx0aQk9ICQoSE9T
VENDKSAkKGhvc3RjX2ZsYWdzKSAtbyAkQCBcDQogICAgLSsJCQkgICQoYWRkcHJlZml4ICQob2Jq
KS8sJCgkKEBGKS1vYmpzKSkgXA0KICAgIC0rCQkJICAkKEhPU1RfTERGTEFHUykgJChIT1NUTERM
SUJTXyQoQEYpKQ0KICAgIC0rJChob3N0LWNtdWx0aSk6ICQob2JqKS9maXhkZXAgRk9SQ0UNCiAg
ICAtKwkkKGNhbGwgaWZfY2hhbmdlZCxob3N0LWNtdWx0aSkNCiAgICAtKyQoY2FsbCBtdWx0aV9k
ZXBlbmQsJChob3N0LWNtdWx0aSksICwgLW9ianMpDQogICAgLSsNCiAgICAtKw0KICAgIC0rIyBD
cmVhdGUgLm8gZmlsZSBmcm9tIGEgc2luZ2xlIC5jIGZpbGUNCiAgICAtKyMgaG9zdC1jb2JqcyAt
PiAubw0KICAgIC0rcXVpZXRfY21kX2hvc3QtY29ianMJPSBIT1NUQ0MgICRADQogICAgLSsgICAg
ICBjbWRfaG9zdC1jb2Jqcwk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAkKEhPU1RDRkxBR1Nf
JChARikpXA0KICAgIC0rCQkJICAtYyAtbyAkQCAkPA0KICAgIC0rJChmaWx0ZXItb3V0ICUudGFi
Lm8sICQoZmlsdGVyLW91dCAlLmxleC5vLCQoaG9zdC1jb2JqcykpKTogJChvYmopLyUubzpcDQog
ICAgLSsJCSQoc3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQ0KICAgIC0rCSQoY2FsbCBpZl9j
aGFuZ2VkX2RlcCxob3N0LWNvYmpzKQ0KICAgIC0rDQogICAgLSskKGZpbHRlciAlLmxleC5vLCQo
aG9zdC1jb2JqcykpOiAkKG9iaikvJS5sZXgubzogICQob2JqKS8lLmxleC5jICQob2JqKS9maXhk
ZXAgRk9SQ0UNCiAgICAtKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykNCiAgICAt
Kw0KICAgIC0rJChmaWx0ZXIgJS50YWIubywkKGhvc3QtY29ianMpKTogJChvYmopLyUudGFiLm86
ICAkKG9iaikvJS50YWIuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAgLSsJJChjYWxsIGlmX2No
YW5nZWRfZGVwLGhvc3QtY29ianMpDQogICAgLSsNCiAgICAtKyMgTGluayBhbiBleGVjdXRhYmxl
IGJhc2VkIG9uIGxpc3Qgb2YgLm8gZmlsZXMsIGEgbWl4dHVyZSBvZiAuYyBhbmQgLmNjDQogICAg
LSsjIGhvc3QtY3h4bXVsdGkgLT4gZXhlY3V0YWJsZQ0KICAgIC0rcXVpZXRfY21kX2hvc3QtY3h4
bXVsdGkJPSBIT1NUTEQgICRADQogICAgLSsgICAgICBjbWRfaG9zdC1jeHhtdWx0aQk9ICQoSE9T
VENYWCkgJChIT1NUTERGTEFHUykgLW8gJEBcDQogICAgLSsJCQkgICQoZm9yZWFjaCBvLG9ianMg
Y3h4b2JqcyxcDQogICAgLSsJCQkgICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS0kKG8pKSkp
IFwNCiAgICAtKwkJCSAgJChIT1NUTERMSUJTKSAkKEhPU1RMRExJQlNfJChARikpDQogICAgLSsk
KGhvc3QtY3h4bXVsdGkpOiBGT1JDRQ0KICAgIC0rCSQoY2FsbCBpZl9jaGFuZ2VkLGhvc3QtY3h4
bXVsdGkpDQogICAgLSskKGNhbGwgbXVsdGlfZGVwZW5kLCQoaG9zdC1jeHhtdWx0aSksICwgLW9i
anMgLWN4eG9ianMpDQogICAgLSsNCiAgICAtKw0KICAgIC0rIyBDcmVhdGUgLm8gZmlsZSBmcm9t
IGEgc2luZ2xlIC5jYyAoQysrKSBmaWxlDQogICAgLStxdWlldF9jbWRfaG9zdC1jeHhvYmpzCT0g
SE9TVENYWCAkQA0KICAgIC0rICAgICAgY21kX2hvc3QtY3h4b2Jqcwk9ICQoSE9TVENYWCkgJCho
b3N0Y3h4X2ZsYWdzKSAkKEhPU1RDWFhGTEFHU18kKEBGKSkgXA0KICAgIC0rCQkJICAtYyAtbyAk
QCAkPA0KICAgIC0rJChob3N0LWN4eG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jYyBGT1JD
RQ0KICAgIC0rCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4eG9ianMpDQogICAgLSsNCiAg
ICAtKyMgQ29tcGlsZSAuYyBmaWxlLCBjcmVhdGUgcG9zaXRpb24gaW5kZXBlbmRlbnQgLm8gZmls
ZQ0KICAgIC0rIyBob3N0LWNzaG9ianMgLT4gLm8NCiAgICAtK3F1aWV0X2NtZF9ob3N0LWNzaG9i
anMJPSBIT1NUQ0MgIC1mUElDICRADQogICAgLSsgICAgICBjbWRfaG9zdC1jc2hvYmpzCT0gJChI
T1NUQ0MpICQoaG9zdGNfZmxhZ3MpIC1mUElDIC1jIC1vICRAICQ8DQogICAgLSskKGhvc3QtY3No
b2Jqcyk6ICQob2JqKS8lLm86ICQoc3JjKS8lLmMgRk9SQ0UNCiAgICAtKwkkKGNhbGwgaWZfY2hh
bmdlZF9kZXAsaG9zdC1jc2hvYmpzKQ0KICAgIC0rDQogICAgLSsjIENvbXBpbGUgLmMgZmlsZSwg
Y3JlYXRlIHBvc2l0aW9uIGluZGVwZW5kZW50IC5vIGZpbGUNCiAgICAtKyMgTm90ZSB0aGF0IHBs
dWdpbiBjYXBhYmxlIGdjYyB2ZXJzaW9ucyBjYW4gYmUgZWl0aGVyIEMgb3IgQysrIGJhc2VkDQog
ICAgLSsjIHRoZXJlZm9yZSBwbHVnaW4gc291cmNlIGZpbGVzIGhhdmUgdG8gYmUgY29tcGlsYWJs
ZSBpbiBib3RoIEMgYW5kIEMrKyBtb2RlLg0KICAgIC0rIyBUaGlzIGlzIHdoeSBhIEMrKyBjb21w
aWxlciBpcyBpbnZva2VkIG9uIGEgLmMgZmlsZS4NCiAgICAtKyMgaG9zdC1jeHhzaG9ianMgLT4g
Lm8NCiAgICAtK3F1aWV0X2NtZF9ob3N0LWN4eHNob2Jqcwk9IEhPU1RDWFggLWZQSUMgJEANCiAg
ICAtKyAgICAgIGNtZF9ob3N0LWN4eHNob2Jqcwk9ICQoSE9TVENYWCkgJChob3N0Y3h4X2ZsYWdz
KSAtZlBJQyAtYyAtbyAkQCAkPA0KICAgIC0rJChob3N0LWN4eHNob2Jqcyk6ICQob2JqKS8lLm86
ICQoc3JjKS8lLmMgJChvYmopL2ZpeGRlcCBGT1JDRQ0KICAgIC0rCUBlY2hvIHRlc3QtLSRADQog
ICAgLSsJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3h4c2hvYmpzKQ0KICAgIC0rDQogICAg
LSBjbGVhbjoNCiAgICAtIAkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGNsZWFuLWZp
bGVzKSkNCiAgICAtIGRpc3RjbGVhbjogY2xlYW4NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmlnLWZsYWcgYi9zdXBwb3J0L2tj
b25maWcubmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZw0KICAgIGRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDRhM2EzNTguLjAwMDAwMDANCiAgICAtLS0gYS9z
dXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDgtZml4ZGVwLWFuZC1jb25maWctZmxhZw0KICAg
ICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxOSArMCwwIEBADQogICAgLWRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtl
ZmlsZS5icg0KICAgIC1pbmRleCAyOWRlZTVlLi45YzExMjkzIDEwMDY0NA0KICAgIC0tLS0gYS9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgLSsrKyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnINCiAgICAtQEAgLTQyLDkgKzQyLDEzIEBAIGhvc3QtY29ianMgOj0g
JChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY29ianMpKQ0KICAgIC0gaG9zdC1jeHhvYmpzIDo9
ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQ0KICAgIC0gZml4ZGVwLW9ianMg
Oj0gJChvYmopL2ZpeGRlcC5vDQogICAgLSANCiAgICAtLUhPU1RfRVhUUkFDRkxBR1MgKz0gLUkk
KG9iaikgLURDT05GSUdfPVwiXCINCiAgICAtK0hPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKHNyYykg
LUkkKG9iaikgLURDT05GSUdfPVwiXCINCiAgICAtIA0KICAgIC0rX2hvc3RjX2ZsYWdzID0gJChI
T1NUQ0ZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHU18kKGJhc2V0YXJnZXQp
Lm8pDQogICAgLStfaG9zdGN4eF9mbGFncyA9ICQoSE9TVENYWEZMQUdTKSAkKEhPU1RfRVhUUkFD
RkxBR1MpICQoSE9TVENYWEZMQUdTXyQoYmFzZXRhcmdldCkubykNCiAgICAtIA0KICAgIC0raG9z
dGNfZmxhZ3MgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChfaG9zdGNfZmxhZ3MpDQogICAgLSto
b3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y3h4X2ZsYWdzKQ0KICAg
IC0gDQogICAgLSAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQ0KICAgIC0gCSQoSE9TVEND
KSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQoQEYpKSAk
PCAtbyAkQA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDkt
c3VwcG9ydC1nbG9iLWluLWtjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhdGNoZXMvMDkt
c3VwcG9ydC1nbG9iLWluLWtjb25maWcNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMzU3YzIyLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAg
IEBAIC0xLDcwICswLDAgQEANCiAgICAtZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
bGV4ZXIubCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubA0KICAgIC1pbmRleCA2MzU0Yzkw
Li5jNWFjYjMyIDEwMDY0NA0KICAgIC0tLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwN
CiAgICAtKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sDQogICAgLUBAIC04LDYgKzgs
NyBAQA0KICAgIC0gJXsNCiAgICAtIA0KICAgIC0gI2luY2x1ZGUgPGFzc2VydC5oPg0KICAgIC0r
I2luY2x1ZGUgPGdsb2IuaD4NCiAgICAtICNpbmNsdWRlIDxsaW1pdHMuaD4NCiAgICAtICNpbmNs
dWRlIDxzdGRpby5oPg0KICAgIC0gI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC1AQCAtNDQyLDYg
KzQ0MywzMiBAQCB2b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgLSAJ
Y3VycmVudF9maWxlID0gZmlsZTsNCiAgICAtIH0NCiAgICAtIA0KICAgIC0rdm9pZCB6Y29uZl9u
ZXh0ZmlsZXMoY29uc3QgY2hhciAqd2lsZGNhcmQpDQogICAgLSt7DQogICAgLSsJZ2xvYl90IGcg
PSB7MH07DQogICAgLSsJY2hhciAqKnc7DQogICAgLSsJaW50IGk7DQogICAgLSsNCiAgICAtKwlp
ZiAoZ2xvYih3aWxkY2FyZCwgMCwgTlVMTCwgJmcpICE9IDApIHsNCiAgICAtKwkJcmV0dXJuOw0K
ICAgIC0rCX0NCiAgICAtKwlpZiAoZy5nbF9wYXRodiA9PSBOVUxMKSB7DQogICAgLSsJCWdsb2Jm
cmVlKCZnKTsNCiAgICAtKwkJcmV0dXJuOw0KICAgIC0rCX0NCiAgICAtKw0KICAgIC0rCS8qIHdv
cmtpbmcgdGhyb3VnaCBmaWxlcyBiYWNrd2FyZHMsIHNpbmNlDQogICAgLSsJICogd2UncmUgZmly
c3QgcHVzaGluZyB0aGVtIG9uIGEgc3RhY2sNCiAgICAtKwkgKiBiZWZvcmUgYWN0dWFsbHkgaGFu
ZGxpbmcgdGhlbS4NCiAgICAtKwkgKi8NCiAgICAtKwlmb3IgKGkgPSBnLmdsX3BhdGhjOyBpID4g
MDsgaS0tKSB7DQogICAgLSsJCXcgPSAmZy5nbF9wYXRodltpIC0gMV07DQogICAgLSsJCXpjb25m
X25leHRmaWxlKCp3KTsNCiAgICAtKwl9DQogICAgLSsNCiAgICAtKwlnbG9iZnJlZSgmZyk7DQog
ICAgLSt9DQogICAgLSsNCiAgICAtIHN0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUodm9pZCkNCiAg
ICAtIHsNCiAgICAtIAlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7DQogICAgLWRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L2xrYy5oIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaA0KICAg
IC1pbmRleCBjYmM3NjU4Li42OWQyYzc3IDEwMDY0NA0KICAgIC0tLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L2xrYy5oDQogICAgLSsrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtjLmgNCiAgICAt
QEAgLTQ0LDYgKzQ0LDcgQEAgdm9pZCB6Y29uZl9zdGFydGhlbHAodm9pZCk7DQogICAgLSBGSUxF
ICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKTsNCiAgICAtIHZvaWQgemNvbmZfaW5pdHNj
YW4oY29uc3QgY2hhciAqbmFtZSk7DQogICAgLSB2b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNo
YXIgKm5hbWUpOw0KICAgIC0rdm9pZCB6Y29uZl9uZXh0ZmlsZXMoY29uc3QgY2hhciAqbmFtZSk7
DQogICAgLSBpbnQgemNvbmZfbGluZW5vKHZvaWQpOw0KICAgIC0gY29uc3QgY2hhciAqemNvbmZf
Y3VybmFtZSh2b2lkKTsNCiAgICAtIA0KICAgIC1kaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
Lm5ldy9wYXJzZXIueSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkNCiAgICAtaW5kZXgg
NjA5MzZjNy4uOTU3MDBmOCAxMDA2NDQNCiAgICAtLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9w
YXJzZXIueQ0KICAgIC0rKysgYi9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55DQogICAgLUBA
IC0zNjYsNyArMzY2LDcgQEAgbWVudV9vcHRpb25fbGlzdDoNCiAgICAtIHNvdXJjZV9zdG10OiBU
X1NPVVJDRSBwcm9tcHQgVF9FT0wNCiAgICAtIHsNCiAgICAtIAlwcmludGQoREVCVUdfUEFSU0Us
ICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICQy
KTsNCiAgICAtLQl6Y29uZl9uZXh0ZmlsZSgkMik7DQogICAgLSsJemNvbmZfbmV4dGZpbGVzKCQy
KTsNCiAgICAtIAlmcmVlKCQyKTsNCiAgICAtIH07DQogICAgLSANCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9wcmVwcm9jZXNzLmMgYi9zdXBwb3J0L2tjb25maWcubmV3L3By
ZXByb2Nlc3MuYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDU5MmRm
YmYuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3ByZXByb2Nlc3MuYw0K
ICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw1NzMgKzAsMCBAQA0KICAgIC0vLyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0vLw0KICAgIC0vLyBDb3B5cmlnaHQgKEMp
IDIwMTggTWFzYWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9uZXh0LmNvbT4NCiAg
ICAtDQogICAgLSNpbmNsdWRlIDxjdHlwZS5oPg0KICAgIC0jaW5jbHVkZSA8c3RkYXJnLmg+DQog
ICAgLSNpbmNsdWRlIDxzdGRib29sLmg+DQogICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0j
aW5jbHVkZSA8c3RkbGliLmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAtDQogICAg
LSNpbmNsdWRlICJsaXN0LmgiDQogICAgLSNpbmNsdWRlICJsa2MuaCINCiAgICAtDQogICAgLSNk
ZWZpbmUgQVJSQVlfU0laRShhcnIpCQkoc2l6ZW9mKGFycikgLyBzaXplb2YoKGFycilbMF0pKQ0K
ICAgIC0NCiAgICAtc3RhdGljIGNoYXIgKmV4cGFuZF9zdHJpbmdfd2l0aF9hcmdzKGNvbnN0IGNo
YXIgKmluLCBpbnQgYXJnYywgY2hhciAqYXJndltdKTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lk
IF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkgcHBlcnJvcihjb25zdCBjaGFyICpmb3JtYXQsIC4u
LikNCiAgICAtew0KICAgIC0JdmFfbGlzdCBhcDsNCiAgICAtDQogICAgLQlmcHJpbnRmKHN0ZGVy
ciwgIiVzOiVkOiAiLCBjdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vKTsNCiAgICAtCXZhX3N0
YXJ0KGFwLCBmb3JtYXQpOw0KICAgIC0JdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsNCiAg
ICAtCXZhX2VuZChhcCk7DQogICAgLQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7DQogICAgLQ0KICAg
IC0JZXhpdCgxKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogRW52aXJvbm1lbnQg
dmFyaWFibGVzDQogICAgLSAqLw0KICAgIC1zdGF0aWMgTElTVF9IRUFEKGVudl9saXN0KTsNCiAg
ICAtDQogICAgLXN0cnVjdCBlbnYgew0KICAgIC0JY2hhciAqbmFtZTsNCiAgICAtCWNoYXIgKnZh
bHVlOw0KICAgIC0Jc3RydWN0IGxpc3RfaGVhZCBub2RlOw0KICAgIC19Ow0KICAgIC0NCiAgICAt
c3RhdGljIHZvaWQgZW52X2FkZChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSkN
CiAgICAtew0KICAgIC0Jc3RydWN0IGVudiAqZTsNCiAgICAtDQogICAgLQllID0geG1hbGxvYyhz
aXplb2YoKmUpKTsNCiAgICAtCWUtPm5hbWUgPSB4c3RyZHVwKG5hbWUpOw0KICAgIC0JZS0+dmFs
dWUgPSB4c3RyZHVwKHZhbHVlKTsNCiAgICAtDQogICAgLQlsaXN0X2FkZF90YWlsKCZlLT5ub2Rl
LCAmZW52X2xpc3QpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBlbnZfZGVsKHN0
cnVjdCBlbnYgKmUpDQogICAgLXsNCiAgICAtCWxpc3RfZGVsKCZlLT5ub2RlKTsNCiAgICAtCWZy
ZWUoZS0+bmFtZSk7DQogICAgLQlmcmVlKGUtPnZhbHVlKTsNCiAgICAtCWZyZWUoZSk7DQogICAg
LX0NCiAgICAtDQogICAgLS8qIFRoZSByZXR1cm5lZCBwb2ludGVyIG11c3QgYmUgZnJlZWQgd2hl
biBkb25lICovDQogICAgLXN0YXRpYyBjaGFyICplbnZfZXhwYW5kKGNvbnN0IGNoYXIgKm5hbWUp
DQogICAgLXsNCiAgICAtCXN0cnVjdCBlbnYgKmU7DQogICAgLQljb25zdCBjaGFyICp2YWx1ZTsN
CiAgICAtDQogICAgLQlpZiAoISpuYW1lKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0NCiAg
ICAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJmVudl9saXN0LCBub2RlKSB7DQogICAgLQkJaWYg
KCFzdHJjbXAobmFtZSwgZS0+bmFtZSkpDQogICAgLQkJCXJldHVybiB4c3RyZHVwKGUtPnZhbHVl
KTsNCiAgICAtCX0NCiAgICAtDQogICAgLQl2YWx1ZSA9IGdldGVudihuYW1lKTsNCiAgICAtCWlm
ICghdmFsdWUpDQogICAgLQkJcmV0dXJuIE5VTEw7DQogICAgLQ0KICAgIC0JLyoNCiAgICAtCSAq
IFdlIG5lZWQgdG8gcmVtZW1iZXIgYWxsIHJlZmVyZW5jZWQgZW52aXJvbm1lbnQgdmFyaWFibGVz
Lg0KICAgIC0JICogVGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IHRvIGluY2x1ZGUvY29uZmlnL2F1
dG8uY29uZi5jbWQNCiAgICAtCSAqLw0KICAgIC0JZW52X2FkZChuYW1lLCB2YWx1ZSk7DQogICAg
LQ0KICAgIC0JcmV0dXJuIHhzdHJkdXAodmFsdWUpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lk
IGVudl93cml0ZV9kZXAoRklMRSAqZiwgY29uc3QgY2hhciAqYXV0b2NvbmZpZ19uYW1lKQ0KICAg
IC17DQogICAgLQlzdHJ1Y3QgZW52ICplLCAqdG1wOw0KICAgIC0NCiAgICAtCWxpc3RfZm9yX2Vh
Y2hfZW50cnlfc2FmZShlLCB0bXAsICZlbnZfbGlzdCwgbm9kZSkgew0KICAgIC0JCWZwcmludGYo
ZiwgImlmbmVxIFwiJCglcylcIiBcIiVzXCJcbiIsIGUtPm5hbWUsIGUtPnZhbHVlKTsNCiAgICAt
CQlmcHJpbnRmKGYsICIlczogRk9SQ0VcbiIsIGF1dG9jb25maWdfbmFtZSk7DQogICAgLQkJZnBy
aW50ZihmLCAiZW5kaWZcbiIpOw0KICAgIC0JCWVudl9kZWwoZSk7DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLS8qDQogICAgLSAqIEJ1aWx0LWluIGZ1bmN0aW9ucw0KICAgIC0gKi8NCiAg
ICAtc3RydWN0IGZ1bmN0aW9uIHsNCiAgICAtCWNvbnN0IGNoYXIgKm5hbWU7DQogICAgLQl1bnNp
Z25lZCBpbnQgbWluX2FyZ3M7DQogICAgLQl1bnNpZ25lZCBpbnQgbWF4X2FyZ3M7DQogICAgLQlj
aGFyICooKmZ1bmMpKGludCBhcmdjLCBjaGFyICphcmd2W10pOw0KICAgIC19Ow0KICAgIC0NCiAg
ICAtc3RhdGljIGNoYXIgKmRvX2Vycm9yX2lmKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAg
LXsNCiAgICAtCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ5IikpDQogICAgLQkJcHBlcnJvcigiJXMi
LCBhcmd2WzFdKTsNCiAgICAtDQogICAgLQlyZXR1cm4gTlVMTDsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RhdGljIGNoYXIgKmRvX2ZpbGVuYW1lKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAg
LXsNCiAgICAtCXJldHVybiB4c3RyZHVwKGN1cnJlbnRfZmlsZS0+bmFtZSk7DQogICAgLX0NCiAg
ICAtDQogICAgLXN0YXRpYyBjaGFyICpkb19pbmZvKGludCBhcmdjLCBjaGFyICphcmd2W10pDQog
ICAgLXsNCiAgICAtCXByaW50ZigiJXNcbiIsIGFyZ3ZbMF0pOw0KICAgIC0NCiAgICAtCXJldHVy
biB4c3RyZHVwKCIiKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGNoYXIgKmRvX2xpbmVu
byhpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgIC17DQogICAgLQljaGFyIGJ1ZlsxNl07DQog
ICAgLQ0KICAgIC0Jc3ByaW50ZihidWYsICIlZCIsIHl5bGluZW5vKTsNCiAgICAtDQogICAgLQly
ZXR1cm4geHN0cmR1cChidWYpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgY2hhciAqZG9f
c2hlbGwoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICAtew0KICAgIC0JRklMRSAqcDsNCiAg
ICAtCWNoYXIgYnVmWzI1Nl07DQogICAgLQljaGFyICpjbWQ7DQogICAgLQlzaXplX3QgbnJlYWQ7
DQogICAgLQlpbnQgaTsNCiAgICAtDQogICAgLQljbWQgPSBhcmd2WzBdOw0KICAgIC0NCiAgICAt
CXAgPSBwb3BlbihjbWQsICJyIik7DQogICAgLQlpZiAoIXApIHsNCiAgICAtCQlwZXJyb3IoY21k
KTsNCiAgICAtCQlleGl0KDEpOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCW5yZWFkID0gZnJlYWQo
YnVmLCAxLCBzaXplb2YoYnVmKSwgcCk7DQogICAgLQlpZiAobnJlYWQgPT0gc2l6ZW9mKGJ1Zikp
DQogICAgLQkJbnJlYWQtLTsNCiAgICAtDQogICAgLQkvKiByZW1vdmUgdHJhaWxpbmcgbmV3IGxp
bmVzICovDQogICAgLQl3aGlsZSAobnJlYWQgPiAwICYmIGJ1ZltucmVhZCAtIDFdID09ICdcbicp
DQogICAgLQkJbnJlYWQtLTsNCiAgICAtDQogICAgLQlidWZbbnJlYWRdID0gMDsNCiAgICAtDQog
ICAgLQkvKiByZXBsYWNlIGEgbmV3IGxpbmUgd2l0aCBhIHNwYWNlICovDQogICAgLQlmb3IgKGkg
PSAwOyBpIDwgbnJlYWQ7IGkrKykgew0KICAgIC0JCWlmIChidWZbaV0gPT0gJ1xuJykNCiAgICAt
CQkJYnVmW2ldID0gJyAnOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmIChwY2xvc2UocCkgPT0g
LTEpIHsNCiAgICAtCQlwZXJyb3IoY21kKTsNCiAgICAtCQlleGl0KDEpOw0KICAgIC0JfQ0KICAg
IC0NCiAgICAtCXJldHVybiB4c3RyZHVwKGJ1Zik7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRp
YyBjaGFyICpkb193YXJuaW5nX2lmKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAgLXsNCiAg
ICAtCWlmICghc3RyY21wKGFyZ3ZbMF0sICJ5IikpDQogICAgLQkJZnByaW50ZihzdGRlcnIsICIl
czolZDogJXNcbiIsDQogICAgLQkJCWN1cnJlbnRfZmlsZS0+bmFtZSwgeXlsaW5lbm8sIGFyZ3Zb
MV0pOw0KICAgIC0NCiAgICAtCXJldHVybiB4c3RyZHVwKCIiKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtc3RhdGljIGNvbnN0IHN0cnVjdCBmdW5jdGlvbiBmdW5jdGlvbl90YWJsZVtdID0gew0KICAg
IC0JLyogTmFtZQkJTUlOCU1BWAlGdW5jdGlvbiAqLw0KICAgIC0JeyAiZXJyb3ItaWYiLAkyLAky
LAlkb19lcnJvcl9pZiB9LA0KICAgIC0JeyAiZmlsZW5hbWUiLAkwLAkwLAlkb19maWxlbmFtZSB9
LA0KICAgIC0JeyAiaW5mbyIsCTEsCTEsCWRvX2luZm8gfSwNCiAgICAtCXsgImxpbmVubyIsCTAs
CTAsCWRvX2xpbmVubyB9LA0KICAgIC0JeyAic2hlbGwiLAkxLAkxLAlkb19zaGVsbCB9LA0KICAg
IC0JeyAid2FybmluZy1pZiIsCTIsCTIsCWRvX3dhcm5pbmdfaWYgfSwNCiAgICAtfTsNCiAgICAt
DQogICAgLSNkZWZpbmUgRlVOQ1RJT05fTUFYX0FSR1MJCTE2DQogICAgLQ0KICAgIC1zdGF0aWMg
Y2hhciAqZnVuY3Rpb25fZXhwYW5kKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhcmdjLCBjaGFyICph
cmd2W10pDQogICAgLXsNCiAgICAtCWNvbnN0IHN0cnVjdCBmdW5jdGlvbiAqZjsNCiAgICAtCWlu
dCBpOw0KICAgIC0NCiAgICAtCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZ1bmN0aW9uX3Rh
YmxlKTsgaSsrKSB7DQogICAgLQkJZiA9ICZmdW5jdGlvbl90YWJsZVtpXTsNCiAgICAtCQlpZiAo
c3RyY21wKGYtPm5hbWUsIG5hbWUpKQ0KICAgIC0JCQljb250aW51ZTsNCiAgICAtDQogICAgLQkJ
aWYgKGFyZ2MgPCBmLT5taW5fYXJncykNCiAgICAtCQkJcHBlcnJvcigidG9vIGZldyBmdW5jdGlv
biBhcmd1bWVudHMgcGFzc2VkIHRvICclcyciLA0KICAgIC0JCQkJbmFtZSk7DQogICAgLQ0KICAg
IC0JCWlmIChhcmdjID4gZi0+bWF4X2FyZ3MpDQogICAgLQkJCXBwZXJyb3IoInRvbyBtYW55IGZ1
bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gJyVzJyIsDQogICAgLQkJCQluYW1lKTsNCiAgICAt
DQogICAgLQkJcmV0dXJuIGYtPmZ1bmMoYXJnYywgYXJndik7DQogICAgLQl9DQogICAgLQ0KICAg
IC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIFZhcmlhYmxl
cyAoYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMpDQogICAgLSAqLw0KICAgIC1zdGF0aWMgTElT
VF9IRUFEKHZhcmlhYmxlX2xpc3QpOw0KICAgIC0NCiAgICAtc3RydWN0IHZhcmlhYmxlIHsNCiAg
ICAtCWNoYXIgKm5hbWU7DQogICAgLQljaGFyICp2YWx1ZTsNCiAgICAtCWVudW0gdmFyaWFibGVf
Zmxhdm9yIGZsYXZvcjsNCiAgICAtCWludCBleHBfY291bnQ7DQogICAgLQlzdHJ1Y3QgbGlzdF9o
ZWFkIG5vZGU7DQogICAgLX07DQogICAgLQ0KICAgIC1zdGF0aWMgc3RydWN0IHZhcmlhYmxlICp2
YXJpYWJsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHZh
cmlhYmxlICp2Ow0KICAgIC0NCiAgICAtCWxpc3RfZm9yX2VhY2hfZW50cnkodiwgJnZhcmlhYmxl
X2xpc3QsIG5vZGUpIHsNCiAgICAtCQlpZiAoIXN0cmNtcChuYW1lLCB2LT5uYW1lKSkNCiAgICAt
CQkJcmV0dXJuIHY7DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0N
CiAgICAtDQogICAgLXN0YXRpYyBjaGFyICp2YXJpYWJsZV9leHBhbmQoY29uc3QgY2hhciAqbmFt
ZSwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHZhcmlhYmxl
ICp2Ow0KICAgIC0JY2hhciAqcmVzOw0KICAgIC0NCiAgICAtCXYgPSB2YXJpYWJsZV9sb29rdXAo
bmFtZSk7DQogICAgLQlpZiAoIXYpDQogICAgLQkJcmV0dXJuIE5VTEw7DQogICAgLQ0KICAgIC0J
aWYgKGFyZ2MgPT0gMCAmJiB2LT5leHBfY291bnQpDQogICAgLQkJcHBlcnJvcigiUmVjdXJzaXZl
IHZhcmlhYmxlICclcycgcmVmZXJlbmNlcyBpdHNlbGYgKGV2ZW50dWFsbHkpIiwNCiAgICAtCQkJ
bmFtZSk7DQogICAgLQ0KICAgIC0JaWYgKHYtPmV4cF9jb3VudCA+IDEwMDApDQogICAgLQkJcHBl
cnJvcigiVG9vIGRlZXAgcmVjdXJzaXZlIGV4cGFuc2lvbiIpOw0KICAgIC0NCiAgICAtCXYtPmV4
cF9jb3VudCsrOw0KICAgIC0NCiAgICAtCWlmICh2LT5mbGF2b3IgPT0gVkFSX1JFQ1VSU0lWRSkN
CiAgICAtCQlyZXMgPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyh2LT52YWx1ZSwgYXJnYywgYXJn
dik7DQogICAgLQllbHNlDQogICAgLQkJcmVzID0geHN0cmR1cCh2LT52YWx1ZSk7DQogICAgLQ0K
ICAgIC0Jdi0+ZXhwX2NvdW50LS07DQogICAgLQ0KICAgIC0JcmV0dXJuIHJlczsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtdm9pZCB2YXJpYWJsZV9hZGQoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hh
ciAqdmFsdWUsDQogICAgLQkJICBlbnVtIHZhcmlhYmxlX2ZsYXZvciBmbGF2b3IpDQogICAgLXsN
CiAgICAtCXN0cnVjdCB2YXJpYWJsZSAqdjsNCiAgICAtCWNoYXIgKm5ld192YWx1ZTsNCiAgICAt
CWJvb2wgYXBwZW5kID0gZmFsc2U7DQogICAgLQ0KICAgIC0JdiA9IHZhcmlhYmxlX2xvb2t1cChu
YW1lKTsNCiAgICAtCWlmICh2KSB7DQogICAgLQkJLyogRm9yIGRlZmluZWQgdmFyaWFibGVzLCAr
PSBpbmhlcml0cyB0aGUgZXhpc3RpbmcgZmxhdm9yICovDQogICAgLQkJaWYgKGZsYXZvciA9PSBW
QVJfQVBQRU5EKSB7DQogICAgLQkJCWZsYXZvciA9IHYtPmZsYXZvcjsNCiAgICAtCQkJYXBwZW5k
ID0gdHJ1ZTsNCiAgICAtCQl9IGVsc2Ugew0KICAgIC0JCQlmcmVlKHYtPnZhbHVlKTsNCiAgICAt
CQl9DQogICAgLQl9IGVsc2Ugew0KICAgIC0JCS8qIEZvciB1bmRlZmluZWQgdmFyaWFibGVzLCAr
PSBhc3N1bWVzIHRoZSByZWN1cnNpdmUgZmxhdm9yICovDQogICAgLQkJaWYgKGZsYXZvciA9PSBW
QVJfQVBQRU5EKQ0KICAgIC0JCQlmbGF2b3IgPSBWQVJfUkVDVVJTSVZFOw0KICAgIC0NCiAgICAt
CQl2ID0geG1hbGxvYyhzaXplb2YoKnYpKTsNCiAgICAtCQl2LT5uYW1lID0geHN0cmR1cChuYW1l
KTsNCiAgICAtCQl2LT5leHBfY291bnQgPSAwOw0KICAgIC0JCWxpc3RfYWRkX3RhaWwoJnYtPm5v
ZGUsICZ2YXJpYWJsZV9saXN0KTsNCiAgICAtCX0NCiAgICAtDQogICAgLQl2LT5mbGF2b3IgPSBm
bGF2b3I7DQogICAgLQ0KICAgIC0JaWYgKGZsYXZvciA9PSBWQVJfU0lNUExFKQ0KICAgIC0JCW5l
d192YWx1ZSA9IGV4cGFuZF9zdHJpbmcodmFsdWUpOw0KICAgIC0JZWxzZQ0KICAgIC0JCW5ld192
YWx1ZSA9IHhzdHJkdXAodmFsdWUpOw0KICAgIC0NCiAgICAtCWlmIChhcHBlbmQpIHsNCiAgICAt
CQl2LT52YWx1ZSA9IHhyZWFsbG9jKHYtPnZhbHVlLA0KICAgIC0JCQkJICAgIHN0cmxlbih2LT52
YWx1ZSkgKyBzdHJsZW4obmV3X3ZhbHVlKSArIDIpOw0KICAgIC0JCXN0cmNhdCh2LT52YWx1ZSwg
IiAiKTsNCiAgICAtCQlzdHJjYXQodi0+dmFsdWUsIG5ld192YWx1ZSk7DQogICAgLQkJZnJlZShu
ZXdfdmFsdWUpOw0KICAgIC0JfSBlbHNlIHsNCiAgICAtCQl2LT52YWx1ZSA9IG5ld192YWx1ZTsN
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQgdmFyaWFibGVfZGVsKHN0
cnVjdCB2YXJpYWJsZSAqdikNCiAgICAtew0KICAgIC0JbGlzdF9kZWwoJnYtPm5vZGUpOw0KICAg
IC0JZnJlZSh2LT5uYW1lKTsNCiAgICAtCWZyZWUodi0+dmFsdWUpOw0KICAgIC0JZnJlZSh2KTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCB2YXJpYWJsZV9hbGxfZGVsKHZvaWQpDQogICAgLXsN
CiAgICAtCXN0cnVjdCB2YXJpYWJsZSAqdiwgKnRtcDsNCiAgICAtDQogICAgLQlsaXN0X2Zvcl9l
YWNoX2VudHJ5X3NhZmUodiwgdG1wLCAmdmFyaWFibGVfbGlzdCwgbm9kZSkNCiAgICAtCQl2YXJp
YWJsZV9kZWwodik7DQogICAgLX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIEV2YWx1YXRlIGEg
Y2xhdXNlIHdpdGggYXJndW1lbnRzLiAgYXJnYy9hcmd2IGFyZSBhcmd1bWVudHMgZnJvbSB0aGUg
dXBwZXINCiAgICAtICogZnVuY3Rpb24gY2FsbC4NCiAgICAtICoNCiAgICAtICogUmV0dXJuZWQg
c3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBkb25lDQogICAgLSAqLw0KICAgIC1zdGF0aWMgY2hh
ciAqZXZhbF9jbGF1c2UoY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBpbnQgYXJnYywgY2hh
ciAqYXJndltdKQ0KICAgIC17DQogICAgLQljaGFyICp0bXAsICpuYW1lLCAqcmVzLCAqZW5kcHRy
LCAqcHJldiwgKnA7DQogICAgLQlpbnQgbmV3X2FyZ2MgPSAwOw0KICAgIC0JY2hhciAqbmV3X2Fy
Z3ZbRlVOQ1RJT05fTUFYX0FSR1NdOw0KICAgIC0JaW50IG5lc3QgPSAwOw0KICAgIC0JaW50IGk7
DQogICAgLQl1bnNpZ25lZCBsb25nIG47DQogICAgLQ0KICAgIC0JdG1wID0geHN0cm5kdXAoc3Ry
LCBsZW4pOw0KICAgIC0NCiAgICAtCS8qDQogICAgLQkgKiBJZiB2YXJpYWJsZSBuYW1lIGlzICcx
JywgJzInLCBldGMuICBJdCBpcyBnZW5lcmFsbHkgYW4gYXJndW1lbnQNCiAgICAtCSAqIGZyb20g
YSB1c2VyLWZ1bmN0aW9uIGNhbGwgKGkuZS4gbG9jYWwtc2NvcGUgdmFyaWFibGUpLiAgSWYgbm90
DQogICAgLQkgKiBhdmFpbGFibGUsIHRoZW4gbG9vay11cCBnbG9iYWwtc2NvcGUgdmFyaWFibGVz
Lg0KICAgIC0JICovDQogICAgLQluID0gc3RydG91bCh0bXAsICZlbmRwdHIsIDEwKTsNCiAgICAt
CWlmICghKmVuZHB0ciAmJiBuID4gMCAmJiBuIDw9IGFyZ2MpIHsNCiAgICAtCQlyZXMgPSB4c3Ry
ZHVwKGFyZ3ZbbiAtIDFdKTsNCiAgICAtCQlnb3RvIGZyZWVfdG1wOw0KICAgIC0JfQ0KICAgIC0N
CiAgICAtCXByZXYgPSBwID0gdG1wOw0KICAgIC0NCiAgICAtCS8qDQogICAgLQkgKiBTcGxpdCBp
bnRvIHRva2Vucw0KICAgIC0JICogVGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGFyZ3VtZW50cyBhcmUg
c2VwYXJhdGVkIGJ5IGEgY29tbWEuDQogICAgLQkgKiBGb3IgZXhhbXBsZSwgaWYgdGhlIGZ1bmN0
aW9uIGNhbGwgaXMgbGlrZSB0aGlzOg0KICAgIC0JICogICAkKGZvbywkKHgpLCQoeSkpDQogICAg
LQkgKg0KICAgIC0JICogVGhlIGlucHV0IHN0cmluZyBmb3IgdGhpcyBoZWxwZXIgc2hvdWxkIGJl
Og0KICAgIC0JICogICBmb28sJCh4KSwkKHkpDQogICAgLQkgKg0KICAgIC0JICogYW5kIHNwbGl0
IGludG86DQogICAgLQkgKiAgIG5ld19hcmd2WzBdID0gJ2ZvbycNCiAgICAtCSAqICAgbmV3X2Fy
Z3ZbMV0gPSAnJCh4KScNCiAgICAtCSAqICAgbmV3X2FyZ3ZbMl0gPSAnJCh5KScNCiAgICAtCSAq
Lw0KICAgIC0Jd2hpbGUgKCpwKSB7DQogICAgLQkJaWYgKG5lc3QgPT0gMCAmJiAqcCA9PSAnLCcp
IHsNCiAgICAtCQkJKnAgPSAwOw0KICAgIC0JCQlpZiAobmV3X2FyZ2MgPj0gRlVOQ1RJT05fTUFY
X0FSR1MpDQogICAgLQkJCQlwcGVycm9yKCJ0b28gbWFueSBmdW5jdGlvbiBhcmd1bWVudHMiKTsN
CiAgICAtCQkJbmV3X2FyZ3ZbbmV3X2FyZ2MrK10gPSBwcmV2Ow0KICAgIC0JCQlwcmV2ID0gcCAr
IDE7DQogICAgLQkJfSBlbHNlIGlmICgqcCA9PSAnKCcpIHsNCiAgICAtCQkJbmVzdCsrOw0KICAg
IC0JCX0gZWxzZSBpZiAoKnAgPT0gJyknKSB7DQogICAgLQkJCW5lc3QtLTsNCiAgICAtCQl9DQog
ICAgLQ0KICAgIC0JCXArKzsNCiAgICAtCX0NCiAgICAtCW5ld19hcmd2W25ld19hcmdjKytdID0g
cHJldjsNCiAgICAtDQogICAgLQkvKg0KICAgIC0JICogU2hpZnQgYXJndW1lbnRzDQogICAgLQkg
KiBuZXdfYXJndlswXSByZXByZXNlbnRzIGEgZnVuY3Rpb24gbmFtZSBvciBhIHZhcmlhYmxlIG5h
bWUuICBQdXQgaXQNCiAgICAtCSAqIGludG8gJ25hbWUnLCB0aGVuIHNoaWZ0IHRoZSByZXN0IG9m
IHRoZSBhcmd1bWVudHMuICBUaGlzIHNpbXBsaWZpZXMNCiAgICAtCSAqICdjb25zdCcgaGFuZGxp
bmcuDQogICAgLQkgKi8NCiAgICAtCW5hbWUgPSBleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhuZXdf
YXJndlswXSwgYXJnYywgYXJndik7DQogICAgLQluZXdfYXJnYy0tOw0KICAgIC0JZm9yIChpID0g
MDsgaSA8IG5ld19hcmdjOyBpKyspDQogICAgLQkJbmV3X2FyZ3ZbaV0gPSBleHBhbmRfc3RyaW5n
X3dpdGhfYXJncyhuZXdfYXJndltpICsgMV0sDQogICAgLQkJCQkJCSAgICAgIGFyZ2MsIGFyZ3Yp
Ow0KICAgIC0NCiAgICAtCS8qIFNlYXJjaCBmb3IgdmFyaWFibGVzICovDQogICAgLQlyZXMgPSB2
YXJpYWJsZV9leHBhbmQobmFtZSwgbmV3X2FyZ2MsIG5ld19hcmd2KTsNCiAgICAtCWlmIChyZXMp
DQogICAgLQkJZ290byBmcmVlOw0KICAgIC0NCiAgICAtCS8qIExvb2sgZm9yIGJ1aWx0LWluIGZ1
bmN0aW9ucyAqLw0KICAgIC0JcmVzID0gZnVuY3Rpb25fZXhwYW5kKG5hbWUsIG5ld19hcmdjLCBu
ZXdfYXJndik7DQogICAgLQlpZiAocmVzKQ0KICAgIC0JCWdvdG8gZnJlZTsNCiAgICAtDQogICAg
LQkvKiBMYXN0LCB0cnkgZW52aXJvbm1lbnQgdmFyaWFibGUgKi8NCiAgICAtCWlmIChuZXdfYXJn
YyA9PSAwKSB7DQogICAgLQkJcmVzID0gZW52X2V4cGFuZChuYW1lKTsNCiAgICAtCQlpZiAocmVz
KQ0KICAgIC0JCQlnb3RvIGZyZWU7DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmVzID0geHN0cmR1
cCgiIik7DQogICAgLWZyZWU6DQogICAgLQlmb3IgKGkgPSAwOyBpIDwgbmV3X2FyZ2M7IGkrKykN
CiAgICAtCQlmcmVlKG5ld19hcmd2W2ldKTsNCiAgICAtCWZyZWUobmFtZSk7DQogICAgLWZyZWVf
dG1wOg0KICAgIC0JZnJlZSh0bXApOw0KICAgIC0NCiAgICAtCXJldHVybiByZXM7DQogICAgLX0N
CiAgICAtDQogICAgLS8qDQogICAgLSAqIEV4cGFuZCBhIHN0cmluZyB0aGF0IGZvbGxvd3MgJyQn
DQogICAgLSAqDQogICAgLSAqIEZvciBleGFtcGxlLCBpZiB0aGUgaW5wdXQgc3RyaW5nIGlzDQog
ICAgLSAqICAgICAoJChGT08pJCgkKEJBUikpKSQoQkFaKQ0KICAgIC0gKiB0aGlzIGhlbHBlciBl
dmFsdWF0ZXMNCiAgICAtICogICAgICQoJChGT08pJCgkKEJBUikpKQ0KICAgIC0gKiBhbmQgcmV0
dXJucyBhIG5ldyBzdHJpbmcgY29udGFpbmluZyB0aGUgZXhwYW5zaW9uIChub3RlIHRoYXQgdGhl
IHN0cmluZyBpcw0KICAgIC0gKiByZWN1cnNpdmVseSBleHBhbmRlZCksIGFsc28gYWR2YW5jaW5n
ICdzdHInIHRvIHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3Rlcg0KICAgIC0gKiBhZnRlciB0aGUg
Y29ycmVzcG9uZGluZyBjbG9zaW5nIHBhcmVudGhlc2lzLCBpbiB0aGlzIGNhc2UsICpzdHIgd2ls
bCBiZQ0KICAgIC0gKiAgICAgJChCQVIpDQogICAgLSAqLw0KICAgIC1zdGF0aWMgY2hhciAqZXhw
YW5kX2RvbGxhcl93aXRoX2FyZ3MoY29uc3QgY2hhciAqKnN0ciwgaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkNCiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqcCA9ICpzdHI7DQogICAgLQljb25zdCBj
aGFyICpxOw0KICAgIC0JaW50IG5lc3QgPSAwOw0KICAgIC0NCiAgICAtCS8qDQogICAgLQkgKiBJ
biBLY29uZmlnLCB2YXJpYWJsZS9mdW5jdGlvbiByZWZlcmVuY2VzIGFsd2F5cyBzdGFydCB3aXRo
ICIkKCIuDQogICAgLQkgKiBOZWl0aGVyIHNpbmdsZS1sZXR0ZXIgdmFyaWFibGVzIGFzIGluICRB
IG5vciBjdXJseSBicmFjZXMgYXMgaW4gJHtDQ30NCiAgICAtCSAqIGFyZSBzdXBwb3J0ZWQuICAn
JCcgbm90IGZvbGxvd2VkIGJ5ICcoJyBsb3NlcyBpdHMgc3BlY2lhbCBtZWFuaW5nLg0KICAgIC0J
ICovDQogICAgLQlpZiAoKnAgIT0gJygnKSB7DQogICAgLQkJKnN0ciA9IHA7DQogICAgLQkJcmV0
dXJuIHhzdHJkdXAoIiQiKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlwKys7DQogICAgLQlxID0g
cDsNCiAgICAtCXdoaWxlICgqcSkgew0KICAgIC0JCWlmICgqcSA9PSAnKCcpIHsNCiAgICAtCQkJ
bmVzdCsrOw0KICAgIC0JCX0gZWxzZSBpZiAoKnEgPT0gJyknKSB7DQogICAgLQkJCWlmIChuZXN0
LS0gPT0gMCkNCiAgICAtCQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlxKys7DQogICAgLQl9
DQogICAgLQ0KICAgIC0JaWYgKCEqcSkNCiAgICAtCQlwcGVycm9yKCJ1bnRlcm1pbmF0ZWQgcmVm
ZXJlbmNlIHRvICclcyc6IG1pc3NpbmcgJyknIiwgcCk7DQogICAgLQ0KICAgIC0JLyogQWR2YW5j
ZSAnc3RyJyB0byBhZnRlciB0aGUgZXhwYW5kZWQgaW5pdGlhbCBwb3J0aW9uIG9mIHRoZSBzdHJp
bmcgKi8NCiAgICAtCSpzdHIgPSBxICsgMTsNCiAgICAtDQogICAgLQlyZXR1cm4gZXZhbF9jbGF1
c2UocCwgcSAtIHAsIGFyZ2MsIGFyZ3YpOw0KICAgIC19DQogICAgLQ0KICAgIC1jaGFyICpleHBh
bmRfZG9sbGFyKGNvbnN0IGNoYXIgKipzdHIpDQogICAgLXsNCiAgICAtCXJldHVybiBleHBhbmRf
ZG9sbGFyX3dpdGhfYXJncyhzdHIsIDAsIE5VTEwpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0
aWMgY2hhciAqX19leHBhbmRfc3RyaW5nKGNvbnN0IGNoYXIgKipzdHIsIGJvb2wgKCppc19lbmQp
KGNoYXIgYyksDQogICAgLQkJCSAgICAgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICAtew0K
ICAgIC0JY29uc3QgY2hhciAqaW4sICpwOw0KICAgIC0JY2hhciAqZXhwYW5zaW9uLCAqb3V0Ow0K
ICAgIC0Jc2l6ZV90IGluX2xlbiwgb3V0X2xlbjsNCiAgICAtDQogICAgLQlvdXQgPSB4bWFsbG9j
KDEpOw0KICAgIC0JKm91dCA9IDA7DQogICAgLQlvdXRfbGVuID0gMTsNCiAgICAtDQogICAgLQlw
ID0gaW4gPSAqc3RyOw0KICAgIC0NCiAgICAtCXdoaWxlICgxKSB7DQogICAgLQkJaWYgKCpwID09
ICckJykgew0KICAgIC0JCQlpbl9sZW4gPSBwIC0gaW47DQogICAgLQkJCXArKzsNCiAgICAtCQkJ
ZXhwYW5zaW9uID0gZXhwYW5kX2RvbGxhcl93aXRoX2FyZ3MoJnAsIGFyZ2MsIGFyZ3YpOw0KICAg
IC0JCQlvdXRfbGVuICs9IGluX2xlbiArIHN0cmxlbihleHBhbnNpb24pOw0KICAgIC0JCQlvdXQg
PSB4cmVhbGxvYyhvdXQsIG91dF9sZW4pOw0KICAgIC0JCQlzdHJuY2F0KG91dCwgaW4sIGluX2xl
bik7DQogICAgLQkJCXN0cmNhdChvdXQsIGV4cGFuc2lvbik7DQogICAgLQkJCWZyZWUoZXhwYW5z
aW9uKTsNCiAgICAtCQkJaW4gPSBwOw0KICAgIC0JCQljb250aW51ZTsNCiAgICAtCQl9DQogICAg
LQ0KICAgIC0JCWlmIChpc19lbmQoKnApKQ0KICAgIC0JCQlicmVhazsNCiAgICAtDQogICAgLQkJ
cCsrOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWluX2xlbiA9IHAgLSBpbjsNCiAgICAtCW91dF9s
ZW4gKz0gaW5fbGVuOw0KICAgIC0Jb3V0ID0geHJlYWxsb2Mob3V0LCBvdXRfbGVuKTsNCiAgICAt
CXN0cm5jYXQob3V0LCBpbiwgaW5fbGVuKTsNCiAgICAtDQogICAgLQkvKiBBZHZhbmNlICdzdHIn
IHRvIHRoZSBlbmQgY2hhcmFjdGVyICovDQogICAgLQkqc3RyID0gcDsNCiAgICAtDQogICAgLQly
ZXR1cm4gb3V0Ow0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgYm9vbCBpc19lbmRfb2Zfc3Ry
KGNoYXIgYykNCiAgICAtew0KICAgIC0JcmV0dXJuICFjOw0KICAgIC19DQogICAgLQ0KICAgIC0v
Kg0KICAgIC0gKiBFeHBhbmQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgaW4gdGhlIGdpdmVuIHN0
cmluZy4gIFVuZGVmaW5lZCB2YXJpYWJsZXMNCiAgICAtICogZXhwYW5kIHRvIGFuIGVtcHR5IHN0
cmluZy4NCiAgICAtICogVGhlIHJldHVybmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHdoZW4gZG9u
ZS4NCiAgICAtICovDQogICAgLXN0YXRpYyBjaGFyICpleHBhbmRfc3RyaW5nX3dpdGhfYXJncyhj
b25zdCBjaGFyICppbiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICAtew0KICAgIC0JcmV0
dXJuIF9fZXhwYW5kX3N0cmluZygmaW4sIGlzX2VuZF9vZl9zdHIsIGFyZ2MsIGFyZ3YpOw0KICAg
IC19DQogICAgLQ0KICAgIC1jaGFyICpleHBhbmRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKQ0KICAg
IC17DQogICAgLQlyZXR1cm4gZXhwYW5kX3N0cmluZ193aXRoX2FyZ3MoaW4sIDAsIE5VTEwpOw0K
ICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgYm9vbCBpc19lbmRfb2ZfdG9rZW4oY2hhciBjKQ0K
ICAgIC17DQogICAgLQlyZXR1cm4gIShpc2FsbnVtKGMpIHx8IGMgPT0gJ18nIHx8IGMgPT0gJy0n
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogRXhwYW5kIHZhcmlhYmxlcyBpbiBh
IHRva2VuLiAgVGhlIHBhcnNpbmcgc3RvcHMgd2hlbiBhIHRva2VuIHNlcGFyYXRlcg0KICAgIC0g
KiAoaW4gbW9zdCBjYXNlcywgaXQgaXMgYSB3aGl0ZXNwYWNlKSBpcyBlbmNvdW50ZXJlZC4gICdz
dHInIGlzIHVwZGF0ZWQgdG8NCiAgICAtICogcG9pbnQgdG8gdGhlIG5leHQgY2hhcmFjdGVyLg0K
ICAgIC0gKg0KICAgIC0gKiBUaGUgcmV0dXJuZWQgc3RyaW5nIG11c3QgYmUgZnJlZWQgd2hlbiBk
b25lLg0KICAgIC0gKi8NCiAgICAtY2hhciAqZXhwYW5kX29uZV90b2tlbihjb25zdCBjaGFyICoq
c3RyKQ0KICAgIC17DQogICAgLQlyZXR1cm4gX19leHBhbmRfc3RyaW5nKHN0ciwgaXNfZW5kX29m
X3Rva2VuLCAwLCBOVUxMKTsNCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Fjb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoDQog
ICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDJjY2MwYS4uMDAwMDAwMA0K
ICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYtY2ZnLnNoDQogICAgKysrIC9kZXYv
bnVsbA0KICAgIEBAIC0xLDMyICswLDAgQEANCiAgICAtIyEvYmluL3NoDQogICAgLSMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtDQogICAgLVBLRz0iUXQ1Q29yZSBRdDVH
dWkgUXQ1V2lkZ2V0cyINCiAgICAtUEtHMj0iUXRDb3JlIFF0R3VpIg0KICAgIC0NCiAgICAtaWYg
WyAteiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBdOyB0aGVuDQogICAgLQllY2hvID4mMiAi
KiINCiAgICAtCWVjaG8gPiYyICIqICdtYWtlIHhjb25maWcnIHJlcXVpcmVzICdwa2ctY29uZmln
Jy4gUGxlYXNlIGluc3RhbGwgaXQuIg0KICAgIC0JZWNobyA+JjIgIioiDQogICAgLQlleGl0IDEN
CiAgICAtZmkNCiAgICAtDQogICAgLWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzsgdGhlbg0K
ICAgIC0JZWNobyBjZmxhZ3M9XCItc3RkPWMrKzExIC1mUElDICQocGtnLWNvbmZpZyAtLWNmbGFn
cyBRdDVDb3JlIFF0NUd1aSBRdDVXaWRnZXRzKVwiDQogICAgLQllY2hvIGxpYnM9XCIkKHBrZy1j
b25maWcgLS1saWJzICRQS0cpXCINCiAgICAtCWVjaG8gbW9jPVwiJChwa2ctY29uZmlnIC0tdmFy
aWFibGU9aG9zdF9iaW5zIFF0NUNvcmUpL21vY1wiDQogICAgLQlleGl0IDANCiAgICAtZmkNCiAg
ICAtDQogICAgLWlmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzI7IHRoZW4NCiAgICAtCWVjaG8g
Y2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiDQogICAgLQllY2hvIGxpYnM9
XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cyKVwiDQogICAgLQllY2hvIG1vYz1cIiQocGtnLWNv
bmZpZyAtLXZhcmlhYmxlPW1vY19sb2NhdGlvbiBRdENvcmUpXCINCiAgICAtCWV4aXQgMA0KICAg
IC1maQ0KICAgIC0NCiAgICAtZWNobyA+JjIgIioiDQogICAgLWVjaG8gPiYyICIqIENvdWxkIG5v
dCBmaW5kIFF0IHZpYSBwa2ctY29uZmlnLiINCiAgICAtZWNobyA+JjIgIiogUGxlYXNlIGluc3Rh
bGwgZWl0aGVyIFF0IDQuOCBvciA1LnguIGFuZCBtYWtlIHN1cmUgaXQncyBpbiBQS0dfQ09ORklH
X1BBVEgiDQogICAgLWVjaG8gPiYyICIqIg0KICAgIC1leGl0IDENCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYu
Y2MNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDIxYWE2Li4wMDAw
MDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYw0KICAgICsrKyAvZGV2
L251bGwNCiAgICBAQCAtMSwxODk2ICswLDAgQEANCiAgICAtLy8gU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjANCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFu
IFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQm9yaXMgQmFyYnVsb3Zza2kgPGJiYXJidWxvdnNraUBnbWFpbC5jb20+DQogICAgLSAqLw0K
ICAgIC0NCiAgICAtI2luY2x1ZGUgPHFnbG9iYWwuaD4NCiAgICAtDQogICAgLSNpbmNsdWRlIDxR
TWFpbldpbmRvdz4NCiAgICAtI2luY2x1ZGUgPFFMaXN0Pg0KICAgIC0jaW5jbHVkZSA8cXRleHRi
cm93c2VyLmg+DQogICAgLSNpbmNsdWRlIDxRQWN0aW9uPg0KICAgIC0jaW5jbHVkZSA8UUZpbGVE
aWFsb2c+DQogICAgLSNpbmNsdWRlIDxRTWVudT4NCiAgICAtDQogICAgLSNpbmNsdWRlIDxxYXBw
bGljYXRpb24uaD4NCiAgICAtI2luY2x1ZGUgPHFkZXNrdG9wd2lkZ2V0Lmg+DQogICAgLSNpbmNs
dWRlIDxxdG9vbGJhci5oPg0KICAgIC0jaW5jbHVkZSA8cWxheW91dC5oPg0KICAgIC0jaW5jbHVk
ZSA8cXNwbGl0dGVyLmg+DQogICAgLSNpbmNsdWRlIDxxbGluZWVkaXQuaD4NCiAgICAtI2luY2x1
ZGUgPHFsYWJlbC5oPg0KICAgIC0jaW5jbHVkZSA8cXB1c2hidXR0b24uaD4NCiAgICAtI2luY2x1
ZGUgPHFtZW51YmFyLmg+DQogICAgLSNpbmNsdWRlIDxxbWVzc2FnZWJveC5oPg0KICAgIC0jaW5j
bHVkZSA8cXJlZ2V4cC5oPg0KICAgIC0jaW5jbHVkZSA8cWV2ZW50Lmg+DQogICAgLQ0KICAgIC0j
aW5jbHVkZSA8c3RkbGliLmg+DQogICAgLQ0KICAgIC0jaW5jbHVkZSAibGtjLmgiDQogICAgLSNp
bmNsdWRlICJxY29uZi5oIg0KICAgIC0NCiAgICAtI2luY2x1ZGUgInFjb25mLm1vYyINCiAgICAt
I2luY2x1ZGUgImltYWdlcy5oIg0KICAgIC0NCiAgICAtDQogICAgLXN0YXRpYyBRQXBwbGljYXRp
b24gKmNvbmZpZ0FwcDsNCiAgICAtc3RhdGljIENvbmZpZ1NldHRpbmdzICpjb25maWdTZXR0aW5n
czsNCiAgICAtDQogICAgLVFBY3Rpb24gKkNvbmZpZ01haW5XaW5kb3c6OnNhdmVBY3Rpb247DQog
ICAgLQ0KICAgIC1zdGF0aWMgaW5saW5lIFFTdHJpbmcgcWdldHRleHQoY29uc3QgY2hhciogc3Ry
KQ0KICAgIC17DQogICAgLQlyZXR1cm4gUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzdHIpOw0KICAg
IC19DQogICAgLQ0KICAgIC1Db25maWdTZXR0aW5nczo6Q29uZmlnU2V0dGluZ3MoKQ0KICAgIC0J
OiBRU2V0dGluZ3MoInVuaWtyYWZ0Lm9yZyIsICJxY29uZiIpDQogICAgLXsNCiAgICAtfQ0KICAg
IC0NCiAgICAtLyoqDQogICAgLSAqIFJlYWRzIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVlcyBmcm9t
IHRoZSBhcHBsaWNhdGlvbiBzZXR0aW5ncy4NCiAgICAtICovDQogICAgLVFMaXN0PGludD4gQ29u
ZmlnU2V0dGluZ3M6OnJlYWRTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGJvb2wgKm9rKQ0KICAg
IC17DQogICAgLQlRTGlzdDxpbnQ+IHJlc3VsdDsNCiAgICAtDQogICAgLQlpZiAoY29udGFpbnMo
a2V5KSkNCiAgICAtCXsNCiAgICAtCQlRU3RyaW5nTGlzdCBlbnRyeUxpc3QgPSB2YWx1ZShrZXkp
LnRvU3RyaW5nTGlzdCgpOw0KICAgIC0JCVFTdHJpbmdMaXN0OjpJdGVyYXRvciBpdDsNCiAgICAt
DQogICAgLQkJZm9yIChpdCA9IGVudHJ5TGlzdC5iZWdpbigpOyBpdCAhPSBlbnRyeUxpc3QuZW5k
KCk7ICsraXQpDQogICAgLQkJCXJlc3VsdC5wdXNoX2JhY2soKCppdCkudG9JbnQoKSk7DQogICAg
LQ0KICAgIC0JCSpvayA9IHRydWU7DQogICAgLQl9DQogICAgLQllbHNlDQogICAgLQkJKm9rID0g
ZmFsc2U7DQogICAgLQ0KICAgIC0JcmV0dXJuIHJlc3VsdDsNCiAgICAtfQ0KICAgIC0NCiAgICAt
LyoqDQogICAgLSAqIFdyaXRlcyBhIGxpc3Qgb2YgaW50ZWdlciB2YWx1ZXMgdG8gdGhlIGFwcGxp
Y2F0aW9uIHNldHRpbmdzLg0KICAgIC0gKi8NCiAgICAtYm9vbCBDb25maWdTZXR0aW5nczo6d3Jp
dGVTaXplcyhjb25zdCBRU3RyaW5nJiBrZXksIGNvbnN0IFFMaXN0PGludD4mIHZhbHVlKQ0KICAg
IC17DQogICAgLQlRU3RyaW5nTGlzdCBzdHJpbmdMaXN0Ow0KICAgIC0JUUxpc3Q8aW50Pjo6Q29u
c3RJdGVyYXRvciBpdDsNCiAgICAtDQogICAgLQlmb3IgKGl0ID0gdmFsdWUuYmVnaW4oKTsgaXQg
IT0gdmFsdWUuZW5kKCk7ICsraXQpDQogICAgLQkJc3RyaW5nTGlzdC5wdXNoX2JhY2soUVN0cmlu
Zzo6bnVtYmVyKCppdCkpOw0KICAgIC0Jc2V0VmFsdWUoa2V5LCBzdHJpbmdMaXN0KTsNCiAgICAt
DQogICAgLQlyZXR1cm4gdHJ1ZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qDQogICAg
LSAqIHNldCB0aGUgbmV3IGRhdGENCiAgICAtICogVE9ETyBjaGVjayB0aGUgdmFsdWUNCiAgICAt
ICovDQogICAgLXZvaWQgQ29uZmlnSXRlbTo6b2tSZW5hbWUoaW50IGNvbCkNCiAgICAtew0KICAg
IC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiB1cGRhdGUgdGhlIGRpc3BsYXllZCBvZiBhIG1l
bnUgZW50cnkNCiAgICAtICovDQogICAgLXZvaWQgQ29uZmlnSXRlbTo6dXBkYXRlTWVudSh2b2lk
KQ0KICAgIC17DQogICAgLQlDb25maWdMaXN0KiBsaXN0Ow0KICAgIC0Jc3RydWN0IHN5bWJvbCog
c3ltOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0JUVN0cmluZyBwcm9tcHQ7
DQogICAgLQlpbnQgdHlwZTsNCiAgICAtCXRyaXN0YXRlIGV4cHI7DQogICAgLQ0KICAgIC0JbGlz
dCA9IGxpc3RWaWV3KCk7DQogICAgLQlpZiAoZ29QYXJlbnQpIHsNCiAgICAtCQlzZXRQaXhtYXAo
cHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51QmFja1BpeCk7DQogICAgLQkJcHJvbXB0ID0gIi4uIjsN
CiAgICAtCQlnb3RvIHNldF9wcm9tcHQ7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltID0gbWVu
dS0+c3ltOw0KICAgIC0JcHJvcCA9IG1lbnUtPnByb21wdDsNCiAgICAtCXByb21wdCA9IHFnZXR0
ZXh0KG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQogICAgLQ0KICAgIC0JaWYgKHByb3ApIHN3aXRj
aCAocHJvcC0+dHlwZSkgew0KICAgIC0JY2FzZSBQX01FTlU6DQogICAgLQkJaWYgKGxpc3QtPm1v
ZGUgPT0gc2luZ2xlTW9kZSB8fCBsaXN0LT5tb2RlID09IHN5bWJvbE1vZGUpIHsNCiAgICAtCQkJ
LyogYSBtZW51Y29uZmlnIGVudHJ5IGlzIGRpc3BsYXllZCBkaWZmZXJlbnRseQ0KICAgIC0JCQkg
KiBkZXBlbmRpbmcgd2hldGhlciBpdCdzIGF0IHRoZSB2aWV3IHJvb3Qgb3IgYSBjaGlsZC4NCiAg
ICAtCQkJICovDQogICAgLQkJCWlmIChzeW0gJiYgbGlzdC0+cm9vdEVudHJ5ID09IG1lbnUpDQog
ICAgLQkJCQlicmVhazsNCiAgICAtCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgbGlzdC0+bWVu
dVBpeCk7DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJaWYgKHN5bSkNCiAgICAtCQkJCWJyZWFr
Ow0KICAgIC0JCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsNCiAgICAtCQl9DQog
ICAgLQkJZ290byBzZXRfcHJvbXB0Ow0KICAgIC0JY2FzZSBQX0NPTU1FTlQ6DQogICAgLQkJc2V0
UGl4bWFwKHByb21wdENvbElkeCwgUUljb24oKSk7DQogICAgLQkJZ290byBzZXRfcHJvbXB0Ow0K
ICAgIC0JZGVmYXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLQlpZiAoIXN5bSkNCiAgICAt
CQlnb3RvIHNldF9wcm9tcHQ7DQogICAgLQ0KICAgIC0Jc2V0VGV4dChuYW1lQ29sSWR4LCBRU3Ry
aW5nOjpmcm9tTG9jYWw4Qml0KHN5bS0+bmFtZSkpOw0KICAgIC0NCiAgICAtCXR5cGUgPSBzeW1f
Z2V0X3R5cGUoc3ltKTsNCiAgICAtCXN3aXRjaCAodHlwZSkgew0KICAgIC0JY2FzZSBTX0JPT0xF
QU46DQogICAgLQljYXNlIFNfVFJJU1RBVEU6DQogICAgLQkJY2hhciBjaDsNCiAgICAtDQogICAg
LQkJaWYgKCFzeW1faXNfY2hhbmdhYmxlKHN5bSkgJiYgbGlzdC0+b3B0TW9kZSA9PSBub3JtYWxP
cHQpIHsNCiAgICAtCQkJc2V0UGl4bWFwKHByb21wdENvbElkeCwgUUljb24oKSk7DQogICAgLQkJ
CXNldFRleHQobm9Db2xJZHgsIFFTdHJpbmc6Om51bGwpOw0KICAgIC0JCQlzZXRUZXh0KG1vZENv
bElkeCwgUVN0cmluZzo6bnVsbCk7DQogICAgLQkJCXNldFRleHQoeWVzQ29sSWR4LCBRU3RyaW5n
OjpudWxsKTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JCWV4cHIgPSBzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQkJc3dpdGNoIChleHByKSB7DQogICAgLQkJY2Fz
ZSB5ZXM6DQogICAgLQkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdHlwZSA9PSBT
X0JPT0xFQU4pDQogICAgLQkJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5jaG9pY2VZ
ZXNQaXgpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBs
aXN0LT5zeW1ib2xZZXNQaXgpOw0KICAgIC0JCQlzZXRUZXh0KHllc0NvbElkeCwgIlkiKTsNCiAg
ICAtCQkJY2ggPSAnWSc7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgbW9kOg0KICAgIC0J
CQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5zeW1ib2xNb2RQaXgpOw0KICAgIC0JCQlz
ZXRUZXh0KG1vZENvbElkeCwgIk0iKTsNCiAgICAtCQkJY2ggPSAnTSc7DQogICAgLQkJCWJyZWFr
Ow0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkg
JiYgdHlwZSA9PSBTX0JPT0xFQU4pDQogICAgLQkJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBs
aXN0LT5jaG9pY2VOb1BpeCk7DQogICAgLQkJCWVsc2UNCiAgICAtCQkJCXNldFBpeG1hcChwcm9t
cHRDb2xJZHgsIGxpc3QtPnN5bWJvbE5vUGl4KTsNCiAgICAtCQkJc2V0VGV4dChub0NvbElkeCwg
Ik4iKTsNCiAgICAtCQkJY2ggPSAnTic7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAt
CQlpZiAoZXhwciAhPSBubykNCiAgICAtCQkJc2V0VGV4dChub0NvbElkeCwgc3ltX3RyaXN0YXRl
X3dpdGhpbl9yYW5nZShzeW0sIG5vKSA/ICJfIiA6IDApOw0KICAgIC0JCWlmIChleHByICE9IG1v
ZCkNCiAgICAtCQkJc2V0VGV4dChtb2RDb2xJZHgsIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uo
c3ltLCBtb2QpID8gIl8iIDogMCk7DQogICAgLQkJaWYgKGV4cHIgIT0geWVzKQ0KICAgIC0JCQlz
ZXRUZXh0KHllc0NvbElkeCwgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHllcykgPyAi
XyIgOiAwKTsNCiAgICAtDQogICAgLQkJc2V0VGV4dChkYXRhQ29sSWR4LCBRQ2hhcihjaCkpOw0K
ICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCWNhc2UgU19IRVg6DQogICAg
LQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCWNvbnN0IGNoYXIqIGRhdGE7DQogICAgLQ0KICAgIC0J
CWRhdGEgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0KICAgIC0NCiAgICAtCQlzZXRUZXh0
KGRhdGFDb2xJZHgsIGRhdGEpOw0KICAgIC0JCWlmICh0eXBlID09IFNfU1RSSU5HKQ0KICAgIC0J
CQlwcm9tcHQgPSBRU3RyaW5nKCIlMTogJTIiKS5hcmcocHJvbXB0KS5hcmcoZGF0YSk7DQogICAg
LQkJZWxzZQ0KICAgIC0JCQlwcm9tcHQgPSBRU3RyaW5nKCIoJTIpICUxIikuYXJnKHByb21wdCku
YXJnKGRhdGEpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JaWYgKCFzeW1faGFzX3Zh
bHVlKHN5bSkgJiYgdmlzaWJsZSkNCiAgICAtCQlwcm9tcHQgKz0gIiAoTkVXKSI7DQogICAgLXNl
dF9wcm9tcHQ6DQogICAgLQlzZXRUZXh0KHByb21wdENvbElkeCwgcHJvbXB0KTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtdm9pZCBDb25maWdJdGVtOjp0ZXN0VXBkYXRlTWVudShib29sIHYpDQogICAg
LXsNCiAgICAtCUNvbmZpZ0l0ZW0qIGk7DQogICAgLQ0KICAgIC0JdmlzaWJsZSA9IHY7DQogICAg
LQlpZiAoIW1lbnUpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCXN5bV9jYWxjX3ZhbHVl
KG1lbnUtPnN5bSk7DQogICAgLQlpZiAobWVudS0+ZmxhZ3MgJiBNRU5VX0NIQU5HRUQpIHsNCiAg
ICAtCQkvKiB0aGUgbWVudSBlbnRyeSBjaGFuZ2VkLCBzbyB1cGRhdGUgYWxsIGxpc3QgaXRlbXMg
Ki8NCiAgICAtCQltZW51LT5mbGFncyAmPSB+TUVOVV9DSEFOR0VEOw0KICAgIC0JCWZvciAoaSA9
IChDb25maWdJdGVtKiltZW51LT5kYXRhOyBpOyBpID0gaS0+bmV4dEl0ZW0pDQogICAgLQkJCWkt
PnVwZGF0ZU1lbnUoKTsNCiAgICAtCX0gZWxzZSBpZiAobGlzdFZpZXcoKS0+dXBkYXRlQWxsKQ0K
ICAgIC0JCXVwZGF0ZU1lbnUoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qDQogICAg
LSAqIGNvbnN0cnVjdCBhIG1lbnUgZW50cnkNCiAgICAtICovDQogICAgLXZvaWQgQ29uZmlnSXRl
bTo6aW5pdCh2b2lkKQ0KICAgIC17DQogICAgLQlpZiAobWVudSkgew0KICAgIC0JCUNvbmZpZ0xp
c3QqIGxpc3QgPSBsaXN0VmlldygpOw0KICAgIC0JCW5leHRJdGVtID0gKENvbmZpZ0l0ZW0qKW1l
bnUtPmRhdGE7DQogICAgLQkJbWVudS0+ZGF0YSA9IHRoaXM7DQogICAgLQ0KICAgIC0JCWlmIChs
aXN0LT5tb2RlICE9IGZ1bGxNb2RlKQ0KICAgIC0JCQlzZXRFeHBhbmRlZCh0cnVlKTsNCiAgICAt
CQlzeW1fY2FsY192YWx1ZShtZW51LT5zeW0pOw0KICAgIC0JfQ0KICAgIC0JdXBkYXRlTWVudSgp
Ow0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBkZXN0cnVjdCBhIG1lbnUgZW50cnkN
CiAgICAtICovDQogICAgLUNvbmZpZ0l0ZW06On5Db25maWdJdGVtKHZvaWQpDQogICAgLXsNCiAg
ICAtCWlmIChtZW51KSB7DQogICAgLQkJQ29uZmlnSXRlbSoqIGlwID0gKENvbmZpZ0l0ZW0qKikm
bWVudS0+ZGF0YTsNCiAgICAtCQlmb3IgKDsgKmlwOyBpcCA9ICYoKmlwKS0+bmV4dEl0ZW0pIHsN
CiAgICAtCQkJaWYgKCppcCA9PSB0aGlzKSB7DQogICAgLQkJCQkqaXAgPSBuZXh0SXRlbTsNCiAg
ICAtCQkJCWJyZWFrOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19DQogICAg
LQ0KICAgIC1Db25maWdMaW5lRWRpdDo6Q29uZmlnTGluZUVkaXQoQ29uZmlnVmlldyogcGFyZW50
KQ0KICAgIC0JOiBQYXJlbnQocGFyZW50KQ0KICAgIC17DQogICAgLQljb25uZWN0KHRoaXMsIFNJ
R05BTChlZGl0aW5nRmluaXNoZWQoKSksIFNMT1QoaGlkZSgpKSk7DQogICAgLX0NCiAgICAtDQog
ICAgLXZvaWQgQ29uZmlnTGluZUVkaXQ6OnNob3coQ29uZmlnSXRlbSogaSkNCiAgICAtew0KICAg
IC0JaXRlbSA9IGk7DQogICAgLQlpZiAoc3ltX2dldF9zdHJpbmdfdmFsdWUoaXRlbS0+bWVudS0+
c3ltKSkNCiAgICAtCQlzZXRUZXh0KFFTdHJpbmc6OmZyb21Mb2NhbDhCaXQoc3ltX2dldF9zdHJp
bmdfdmFsdWUoaXRlbS0+bWVudS0+c3ltKSkpOw0KICAgIC0JZWxzZQ0KICAgIC0JCXNldFRleHQo
UVN0cmluZzo6bnVsbCk7DQogICAgLQlQYXJlbnQ6OnNob3coKTsNCiAgICAtCXNldEZvY3VzKCk7
DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTGluZUVkaXQ6OmtleVByZXNzRXZlbnQo
UUtleUV2ZW50KiBlKQ0KICAgIC17DQogICAgLQlzd2l0Y2ggKGUtPmtleSgpKSB7DQogICAgLQlj
YXNlIFF0OjpLZXlfRXNjYXBlOg0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBRdDo6S2V5X1Jl
dHVybjoNCiAgICAtCWNhc2UgUXQ6OktleV9FbnRlcjoNCiAgICAtCQlzeW1fc2V0X3N0cmluZ192
YWx1ZShpdGVtLT5tZW51LT5zeW0sIHRleHQoKS50b0xhdGluMSgpKTsNCiAgICAtCQlwYXJlbnQo
KS0+dXBkYXRlTGlzdChpdGVtKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6DQogICAg
LQkJUGFyZW50OjprZXlQcmVzc0V2ZW50KGUpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAg
ICAtCWUtPmFjY2VwdCgpOw0KICAgIC0JcGFyZW50KCktPmxpc3QtPnNldEZvY3VzKCk7DQogICAg
LQloaWRlKCk7DQogICAgLX0NCiAgICAtDQogICAgLUNvbmZpZ0xpc3Q6OkNvbmZpZ0xpc3QoQ29u
ZmlnVmlldyogcCwgY29uc3QgY2hhciAqbmFtZSkNCiAgICAtCTogUGFyZW50KHApLA0KICAgIC0J
ICB1cGRhdGVBbGwoZmFsc2UpLA0KICAgIC0JICBzeW1ib2xZZXNQaXgoeHBtX3N5bWJvbF95ZXMp
LCBzeW1ib2xNb2RQaXgoeHBtX3N5bWJvbF9tb2QpLCBzeW1ib2xOb1BpeCh4cG1fc3ltYm9sX25v
KSwNCiAgICAtCSAgY2hvaWNlWWVzUGl4KHhwbV9jaG9pY2VfeWVzKSwgY2hvaWNlTm9QaXgoeHBt
X2Nob2ljZV9ubyksDQogICAgLQkgIG1lbnVQaXgoeHBtX21lbnUpLCBtZW51SW52UGl4KHhwbV9t
ZW51X2ludiksIG1lbnVCYWNrUGl4KHhwbV9tZW51YmFjayksIHZvaWRQaXgoeHBtX3ZvaWQpLA0K
ICAgIC0JICBzaG93TmFtZShmYWxzZSksIHNob3dSYW5nZShmYWxzZSksIHNob3dEYXRhKGZhbHNl
KSwgbW9kZShzaW5nbGVNb2RlKSwgb3B0TW9kZShub3JtYWxPcHQpLA0KICAgIC0JICByb290RW50
cnkoMCksIGhlYWRlclBvcHVwKDApDQogICAgLXsNCiAgICAtCWludCBpOw0KICAgIC0NCiAgICAt
CXNldE9iamVjdE5hbWUobmFtZSk7DQogICAgLQlzZXRTb3J0aW5nRW5hYmxlZChmYWxzZSk7DQog
ICAgLQlzZXRSb290SXNEZWNvcmF0ZWQodHJ1ZSk7DQogICAgLQ0KICAgIC0Jc2V0VmVydGljYWxT
Y3JvbGxNb2RlKFNjcm9sbFBlclBpeGVsKTsNCiAgICAtCXNldEhvcml6b250YWxTY3JvbGxNb2Rl
KFNjcm9sbFBlclBpeGVsKTsNCiAgICAtDQogICAgLQlzZXRIZWFkZXJMYWJlbHMoUVN0cmluZ0xp
c3QoKSA8PCAiT3B0aW9uIiA8PCAiTmFtZSIgPDwgIk4iIDw8ICJNIiA8PCAiWSIgPDwgIlZhbHVl
Iik7DQogICAgLQ0KICAgIC0JY29ubmVjdCh0aGlzLCBTSUdOQUwoaXRlbVNlbGVjdGlvbkNoYW5n
ZWQodm9pZCkpLA0KICAgIC0JCVNMT1QodXBkYXRlU2VsZWN0aW9uKHZvaWQpKSk7DQogICAgLQ0K
ICAgIC0JaWYgKG5hbWUpIHsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChuYW1l
KTsNCiAgICAtCQlzaG93TmFtZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3Nob3dOYW1lIiwg
ZmFsc2UpLnRvQm9vbCgpOw0KICAgIC0JCXNob3dSYW5nZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1
ZSgiL3Nob3dSYW5nZSIsIGZhbHNlKS50b0Jvb2woKTsNCiAgICAtCQlzaG93RGF0YSA9IGNvbmZp
Z1NldHRpbmdzLT52YWx1ZSgiL3Nob3dEYXRhIiwgZmFsc2UpLnRvQm9vbCgpOw0KICAgIC0JCW9w
dE1vZGUgPSAoZW51bSBvcHRpb25Nb2RlKWNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL29wdGlvbk1v
ZGUiLCAwKS50b0ludCgpOw0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAg
IC0JCWNvbm5lY3QoY29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIFNMT1Qoc2F2ZVNl
dHRpbmdzKCkpKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlhZGRDb2x1bW4ocHJvbXB0Q29sSWR4
KTsNCiAgICAtDQogICAgLQlyZWluaXQoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBDb25m
aWdMaXN0OjptZW51U2tpcChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAtew0KICAgIC0JaWYgKG9w
dE1vZGUgPT0gbm9ybWFsT3B0ICYmIG1lbnVfaXNfdmlzaWJsZShtZW51KSkNCiAgICAtCQlyZXR1
cm4gZmFsc2U7DQogICAgLQlpZiAob3B0TW9kZSA9PSBwcm9tcHRPcHQgJiYgbWVudV9oYXNfcHJv
bXB0KG1lbnUpKQ0KICAgIC0JCXJldHVybiBmYWxzZTsNCiAgICAtCWlmIChvcHRNb2RlID09IGFs
bE9wdCkNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQlyZXR1cm4gdHJ1ZTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0OjpyZWluaXQodm9pZCkNCiAgICAtew0KICAgIC0J
cmVtb3ZlQ29sdW1uKGRhdGFDb2xJZHgpOw0KICAgIC0JcmVtb3ZlQ29sdW1uKHllc0NvbElkeCk7
DQogICAgLQlyZW1vdmVDb2x1bW4obW9kQ29sSWR4KTsNCiAgICAtCXJlbW92ZUNvbHVtbihub0Nv
bElkeCk7DQogICAgLQlyZW1vdmVDb2x1bW4obmFtZUNvbElkeCk7DQogICAgLQ0KICAgIC0JaWYg
KHNob3dOYW1lKQ0KICAgIC0JCWFkZENvbHVtbihuYW1lQ29sSWR4KTsNCiAgICAtCWlmIChzaG93
UmFuZ2UpIHsNCiAgICAtCQlhZGRDb2x1bW4obm9Db2xJZHgpOw0KICAgIC0JCWFkZENvbHVtbiht
b2RDb2xJZHgpOw0KICAgIC0JCWFkZENvbHVtbih5ZXNDb2xJZHgpOw0KICAgIC0JfQ0KICAgIC0J
aWYgKHNob3dEYXRhKQ0KICAgIC0JCWFkZENvbHVtbihkYXRhQ29sSWR4KTsNCiAgICAtDQogICAg
LQl1cGRhdGVMaXN0QWxsKCk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6
c2F2ZVNldHRpbmdzKHZvaWQpDQogICAgLXsNCiAgICAtCWlmICghb2JqZWN0TmFtZSgpLmlzRW1w
dHkoKSkgew0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG9iamVjdE5hbWUoKSk7
DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd05hbWUiLCBzaG93TmFtZSk7
DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvc2hvd1JhbmdlIiwgc2hvd1Jhbmdl
KTsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93RGF0YSIsIHNob3dEYXRh
KTsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9vcHRpb25Nb2RlIiwgKGludClv
cHRNb2RlKTsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsNCiAgICAtCX0NCiAg
ICAtfQ0KICAgIC0NCiAgICAtQ29uZmlnSXRlbSogQ29uZmlnTGlzdDo6ZmluZENvbmZpZ0l0ZW0o
c3RydWN0IG1lbnUgKm1lbnUpDQogICAgLXsNCiAgICAtCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29u
ZmlnSXRlbSopbWVudS0+ZGF0YTsNCiAgICAtDQogICAgLQlmb3IgKDsgaXRlbTsgaXRlbSA9IGl0
ZW0tPm5leHRJdGVtKSB7DQogICAgLQkJaWYgKHRoaXMgPT0gaXRlbS0+bGlzdFZpZXcoKSkNCiAg
ICAtCQkJYnJlYWs7DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJuIGl0ZW07DQogICAgLX0N
CiAgICAtDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6dXBkYXRlU2VsZWN0aW9uKHZvaWQpDQogICAg
LXsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51Ow0KICAgIC0JZW51bSBwcm9wX3R5cGUgdHlwZTsN
CiAgICAtDQogICAgLQlpZiAoc2VsZWN0ZWRJdGVtcygpLmNvdW50KCkgPT0gMCkNCiAgICAtCQly
ZXR1cm47DQogICAgLQ0KICAgIC0JQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKilzZWxl
Y3RlZEl0ZW1zKCkuZmlyc3QoKTsNCiAgICAtCWlmICghaXRlbSkNCiAgICAtCQlyZXR1cm47DQog
ICAgLQ0KICAgIC0JbWVudSA9IGl0ZW0tPm1lbnU7DQogICAgLQllbWl0IG1lbnVDaGFuZ2VkKG1l
bnUpOw0KICAgIC0JaWYgKCFtZW51KQ0KICAgIC0JCXJldHVybjsNCiAgICAtCXR5cGUgPSBtZW51
LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQlpZiAobW9k
ZSA9PSBtZW51TW9kZSAmJiB0eXBlID09IFBfTUVOVSkNCiAgICAtCQllbWl0IG1lbnVTZWxlY3Rl
ZChtZW51KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojp1cGRhdGVMaXN0
KENvbmZpZ0l0ZW0qIGl0ZW0pDQogICAgLXsNCiAgICAtCUNvbmZpZ0l0ZW0qIGxhc3QgPSAwOw0K
ICAgIC0NCiAgICAtCWlmICghcm9vdEVudHJ5KSB7DQogICAgLQkJaWYgKG1vZGUgIT0gbGlzdE1v
ZGUpDQogICAgLQkJCWdvdG8gdXBkYXRlOw0KICAgIC0JCVFUcmVlV2lkZ2V0SXRlbUl0ZXJhdG9y
IGl0KHRoaXMpOw0KICAgIC0JCUNvbmZpZ0l0ZW0qIGl0ZW07DQogICAgLQ0KICAgIC0JCXdoaWxl
ICgqaXQpIHsNCiAgICAtCQkJaXRlbSA9IChDb25maWdJdGVtKikoKml0KTsNCiAgICAtCQkJaWYg
KCFpdGVtLT5tZW51KQ0KICAgIC0JCQkJY29udGludWU7DQogICAgLQkJCWl0ZW0tPnRlc3RVcGRh
dGVNZW51KG1lbnVfaXNfdmlzaWJsZShpdGVtLT5tZW51KSk7DQogICAgLQ0KICAgIC0JCQkrK2l0
Ow0KICAgIC0JCX0NCiAgICAtCQlyZXR1cm47DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKHJv
b3RFbnRyeSAhPSAmcm9vdG1lbnUgJiYgKG1vZGUgPT0gc2luZ2xlTW9kZSB8fA0KICAgIC0JICAg
IChtb2RlID09IHN5bWJvbE1vZGUgJiYgcm9vdEVudHJ5LT5wYXJlbnQgIT0gJnJvb3RtZW51KSkp
IHsNCiAgICAtCQlpdGVtID0gKENvbmZpZ0l0ZW0gKil0b3BMZXZlbEl0ZW0oMCk7DQogICAgLQkJ
aWYgKCFpdGVtKQ0KICAgIC0JCQlpdGVtID0gbmV3IENvbmZpZ0l0ZW0odGhpcywgMCwgdHJ1ZSk7
DQogICAgLQkJbGFzdCA9IGl0ZW07DQogICAgLQl9DQogICAgLQlpZiAoKG1vZGUgPT0gc2luZ2xl
TW9kZSB8fCAobW9kZSA9PSBzeW1ib2xNb2RlICYmICEocm9vdEVudHJ5LT5mbGFncyAmIE1FTlVf
Uk9PVCkpKSAmJg0KICAgIC0JICAgIHJvb3RFbnRyeS0+c3ltICYmIHJvb3RFbnRyeS0+cHJvbXB0
KSB7DQogICAgLQkJaXRlbSA9IGxhc3QgPyBsYXN0LT5uZXh0U2libGluZygpIDogZmlyc3RDaGls
ZCgpOw0KICAgIC0JCWlmICghaXRlbSkNCiAgICAtCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHRo
aXMsIGxhc3QsIHJvb3RFbnRyeSwgdHJ1ZSk7DQogICAgLQkJZWxzZQ0KICAgIC0JCQlpdGVtLT50
ZXN0VXBkYXRlTWVudSh0cnVlKTsNCiAgICAtDQogICAgLQkJdXBkYXRlTWVudUxpc3QoaXRlbSwg
cm9vdEVudHJ5KTsNCiAgICAtCQl1cGRhdGUoKTsNCiAgICAtCQlyZXNpemVDb2x1bW5Ub0NvbnRl
bnRzKDApOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtdXBkYXRlOg0KICAgIC0JdXBk
YXRlTWVudUxpc3QodGhpcywgcm9vdEVudHJ5KTsNCiAgICAtCXVwZGF0ZSgpOw0KICAgIC0JcmVz
aXplQ29sdW1uVG9Db250ZW50cygwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdM
aXN0OjpzZXRWYWx1ZShDb25maWdJdGVtKiBpdGVtLCB0cmlzdGF0ZSB2YWwpDQogICAgLXsNCiAg
ICAtCXN0cnVjdCBzeW1ib2wqIHN5bTsNCiAgICAtCWludCB0eXBlOw0KICAgIC0JdHJpc3RhdGUg
b2xkdmFsOw0KICAgIC0NCiAgICAtCXN5bSA9IGl0ZW0tPm1lbnUgPyBpdGVtLT5tZW51LT5zeW0g
OiAwOw0KICAgIC0JaWYgKCFzeW0pDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCXR5cGUg
PSBzeW1fZ2V0X3R5cGUoc3ltKTsNCiAgICAtCXN3aXRjaCAodHlwZSkgew0KICAgIC0JY2FzZSBT
X0JPT0xFQU46DQogICAgLQljYXNlIFNfVFJJU1RBVEU6DQogICAgLQkJb2xkdmFsID0gc3ltX2dl
dF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0NCiAgICAtCQlpZiAoIXN5bV9zZXRfdHJpc3Rh
dGVfdmFsdWUoc3ltLCB2YWwpKQ0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJaWYgKG9sZHZhbCA9
PSBubyAmJiBpdGVtLT5tZW51LT5saXN0KQ0KICAgIC0JCQlpdGVtLT5zZXRFeHBhbmRlZCh0cnVl
KTsNCiAgICAtCQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVtKTsNCiAgICAtCQlicmVhazsNCiAg
ICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0OjpjaGFuZ2VWYWx1ZShD
b25maWdJdGVtKiBpdGVtKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sKiBzeW07DQogICAg
LQlzdHJ1Y3QgbWVudSogbWVudTsNCiAgICAtCWludCB0eXBlLCBvbGRleHByLCBuZXdleHByOw0K
ICAgIC0NCiAgICAtCW1lbnUgPSBpdGVtLT5tZW51Ow0KICAgIC0JaWYgKCFtZW51KQ0KICAgIC0J
CXJldHVybjsNCiAgICAtCXN5bSA9IG1lbnUtPnN5bTsNCiAgICAtCWlmICghc3ltKSB7DQogICAg
LQkJaWYgKGl0ZW0tPm1lbnUtPmxpc3QpDQogICAgLQkJCWl0ZW0tPnNldEV4cGFuZGVkKCFpdGVt
LT5pc0V4cGFuZGVkKCkpOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtDQogICAgLQl0
eXBlID0gc3ltX2dldF90eXBlKHN5bSk7DQogICAgLQlzd2l0Y2ggKHR5cGUpIHsNCiAgICAtCWNh
c2UgU19CT09MRUFOOg0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCW9sZGV4cHIgPSBz
eW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQkJbmV3ZXhwciA9IHN5bV90b2dnbGVf
dHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICAtCQlpZiAoaXRlbS0+bWVudS0+bGlzdCkgew0KICAg
IC0JCQlpZiAob2xkZXhwciA9PSBuZXdleHByKQ0KICAgIC0JCQkJaXRlbS0+c2V0RXhwYW5kZWQo
IWl0ZW0tPmlzRXhwYW5kZWQoKSk7DQogICAgLQkJCWVsc2UgaWYgKG9sZGV4cHIgPT0gbm8pDQog
ICAgLQkJCQlpdGVtLT5zZXRFeHBhbmRlZCh0cnVlKTsNCiAgICAtCQl9DQogICAgLQkJaWYgKG9s
ZGV4cHIgIT0gbmV3ZXhwcikNCiAgICAtCQkJcGFyZW50KCktPnVwZGF0ZUxpc3QoaXRlbSk7DQog
ICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNfSU5UOg0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAt
CWNhc2UgU19TVFJJTkc6DQogICAgLQkJcGFyZW50KCktPmxpbmVFZGl0LT5zaG93KGl0ZW0pOw0K
ICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0xp
c3Q6OnNldFJvb3RNZW51KHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQllbnVtIHBy
b3BfdHlwZSB0eXBlOw0KICAgIC0NCiAgICAtCWlmIChyb290RW50cnkgPT0gbWVudSkNCiAgICAt
CQlyZXR1cm47DQogICAgLQl0eXBlID0gbWVudSAmJiBtZW51LT5wcm9tcHQgPyBtZW51LT5wcm9t
cHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQlpZiAodHlwZSAhPSBQX01FTlUpDQogICAgLQkJ
cmV0dXJuOw0KICAgIC0JdXBkYXRlTWVudUxpc3QodGhpcywgMCk7DQogICAgLQlyb290RW50cnkg
PSBtZW51Ow0KICAgIC0JdXBkYXRlTGlzdEFsbCgpOw0KICAgIC0JaWYgKGN1cnJlbnRJdGVtKCkp
IHsNCiAgICAtCQljdXJyZW50SXRlbSgpLT5zZXRTZWxlY3RlZChoYXNGb2N1cygpKTsNCiAgICAt
CQlzY3JvbGxUb0l0ZW0oY3VycmVudEl0ZW0oKSk7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQog
ICAgLXZvaWQgQ29uZmlnTGlzdDo6c2V0UGFyZW50TWVudSh2b2lkKQ0KICAgIC17DQogICAgLQlD
b25maWdJdGVtKiBpdGVtOw0KICAgIC0Jc3RydWN0IG1lbnUgKm9sZHJvb3Q7DQogICAgLQ0KICAg
IC0Jb2xkcm9vdCA9IHJvb3RFbnRyeTsNCiAgICAtCWlmIChyb290RW50cnkgPT0gJnJvb3RtZW51
KQ0KICAgIC0JCXJldHVybjsNCiAgICAtCXNldFJvb3RNZW51KG1lbnVfZ2V0X3BhcmVudF9tZW51
KHJvb3RFbnRyeS0+cGFyZW50KSk7DQogICAgLQ0KICAgIC0JUVRyZWVXaWRnZXRJdGVtSXRlcmF0
b3IgaXQodGhpcyk7DQogICAgLQl3aGlsZSAoKml0KSB7DQogICAgLQkJaXRlbSA9IChDb25maWdJ
dGVtICopKCppdCk7DQogICAgLQkJaWYgKGl0ZW0tPm1lbnUgPT0gb2xkcm9vdCkgew0KICAgIC0J
CQlzZXRDdXJyZW50SXRlbShpdGVtKTsNCiAgICAtCQkJc2Nyb2xsVG9JdGVtKGl0ZW0pOw0KICAg
IC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0JCSsraXQ7DQogICAgLQl9DQogICAg
LX0NCiAgICAtDQogICAgLS8qDQogICAgLSAqIHVwZGF0ZSBhbGwgdGhlIGNoaWxkcmVuIG9mIGEg
bWVudSBlbnRyeQ0KICAgIC0gKiAgIHJlbW92ZXMvYWRkcyB0aGUgZW50cmllcyBmcm9tIHRoZSBw
YXJlbnQgd2lkZ2V0IGFzIG5lY2Vzc2FyeQ0KICAgIC0gKg0KICAgIC0gKiBwYXJlbnQ6IGVpdGhl
ciB0aGUgbWVudSBsaXN0IHdpZGdldCBvciBhIG1lbnUgZW50cnkgd2lkZ2V0DQogICAgLSAqIG1l
bnU6IGVudHJ5IHRvIGJlIHVwZGF0ZWQNCiAgICAtICovDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6
dXBkYXRlTWVudUxpc3QoQ29uZmlnSXRlbSAqcGFyZW50LCBzdHJ1Y3QgbWVudSogbWVudSkNCiAg
ICAtew0KICAgIC0Jc3RydWN0IG1lbnUqIGNoaWxkOw0KICAgIC0JQ29uZmlnSXRlbSogaXRlbTsN
CiAgICAtCUNvbmZpZ0l0ZW0qIGxhc3Q7DQogICAgLQlib29sIHZpc2libGU7DQogICAgLQllbnVt
IHByb3BfdHlwZSB0eXBlOw0KICAgIC0NCiAgICAtCWlmICghbWVudSkgew0KICAgIC0JCXdoaWxl
IChwYXJlbnQtPmNoaWxkQ291bnQoKSA+IDApDQogICAgLQkJew0KICAgIC0JCQlkZWxldGUgcGFy
ZW50LT50YWtlQ2hpbGQoMCk7DQogICAgLQkJfQ0KICAgIC0NCiAgICAtCQlyZXR1cm47DQogICAg
LQl9DQogICAgLQ0KICAgIC0JbGFzdCA9IHBhcmVudC0+Zmlyc3RDaGlsZCgpOw0KICAgIC0JaWYg
KGxhc3QgJiYgIWxhc3QtPmdvUGFyZW50KQ0KICAgIC0JCWxhc3QgPSAwOw0KICAgIC0JZm9yIChj
aGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgLQkJ
aXRlbSA9IGxhc3QgPyBsYXN0LT5uZXh0U2libGluZygpIDogcGFyZW50LT5maXJzdENoaWxkKCk7
DQogICAgLQkJdHlwZSA9IGNoaWxkLT5wcm9tcHQgPyBjaGlsZC0+cHJvbXB0LT50eXBlIDogUF9V
TktOT1dOOw0KICAgIC0NCiAgICAtCQlzd2l0Y2ggKG1vZGUpIHsNCiAgICAtCQljYXNlIG1lbnVN
b2RlOg0KICAgIC0JCQlpZiAoIShjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQ0KICAgIC0JCQkJ
Z290byBoaWRlOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIHN5bWJvbE1vZGU6DQogICAg
LQkJCWlmIChjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpDQogICAgLQkJCQlnb3RvIGhpZGU7DQog
ICAgLQkJCWJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0N
CiAgICAtDQogICAgLQkJdmlzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShjaGlsZCk7DQogICAgLQkJ
aWYgKCFtZW51U2tpcChjaGlsZCkpIHsNCiAgICAtCQkJaWYgKCFjaGlsZC0+c3ltICYmICFjaGls
ZC0+bGlzdCAmJiAhY2hpbGQtPnByb21wdCkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlp
ZiAoIWl0ZW0gfHwgaXRlbS0+bWVudSAhPSBjaGlsZCkNCiAgICAtCQkJCWl0ZW0gPSBuZXcgQ29u
ZmlnSXRlbShwYXJlbnQsIGxhc3QsIGNoaWxkLCB2aXNpYmxlKTsNCiAgICAtCQkJZWxzZQ0KICAg
IC0JCQkJaXRlbS0+dGVzdFVwZGF0ZU1lbnUodmlzaWJsZSk7DQogICAgLQ0KICAgIC0JCQlpZiAo
bW9kZSA9PSBmdWxsTW9kZSB8fCBtb2RlID09IG1lbnVNb2RlIHx8IHR5cGUgIT0gUF9NRU5VKQ0K
ICAgIC0JCQkJdXBkYXRlTWVudUxpc3QoaXRlbSwgY2hpbGQpOw0KICAgIC0JCQllbHNlDQogICAg
LQkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCAwKTsNCiAgICAtCQkJbGFzdCA9IGl0ZW07DQogICAg
LQkJCWNvbnRpbnVlOw0KICAgIC0JCX0NCiAgICAtCWhpZGU6DQogICAgLQkJaWYgKGl0ZW0gJiYg
aXRlbS0+bWVudSA9PSBjaGlsZCkgew0KICAgIC0JCQlsYXN0ID0gcGFyZW50LT5maXJzdENoaWxk
KCk7DQogICAgLQkJCWlmIChsYXN0ID09IGl0ZW0pDQogICAgLQkJCQlsYXN0ID0gMDsNCiAgICAt
CQkJZWxzZSB3aGlsZSAobGFzdC0+bmV4dFNpYmxpbmcoKSAhPSBpdGVtKQ0KICAgIC0JCQkJbGFz
dCA9IGxhc3QtPm5leHRTaWJsaW5nKCk7DQogICAgLQkJCWRlbGV0ZSBpdGVtOw0KICAgIC0JCX0N
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojp1cGRhdGVNZW51
TGlzdChDb25maWdMaXN0ICpwYXJlbnQsIHN0cnVjdCBtZW51KiBtZW51KQ0KICAgIC17DQogICAg
LQlzdHJ1Y3QgbWVudSogY2hpbGQ7DQogICAgLQlDb25maWdJdGVtKiBpdGVtOw0KICAgIC0JQ29u
ZmlnSXRlbSogbGFzdDsNCiAgICAtCWJvb2wgdmlzaWJsZTsNCiAgICAtCWVudW0gcHJvcF90eXBl
IHR5cGU7DQogICAgLQ0KICAgIC0JaWYgKCFtZW51KSB7DQogICAgLQkJd2hpbGUgKHBhcmVudC0+
dG9wTGV2ZWxJdGVtQ291bnQoKSA+IDApDQogICAgLQkJew0KICAgIC0JCQlkZWxldGUgcGFyZW50
LT50YWtlVG9wTGV2ZWxJdGVtKDApOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJcmV0dXJuOw0K
ICAgIC0JfQ0KICAgIC0NCiAgICAtCWxhc3QgPSAoQ29uZmlnSXRlbSopcGFyZW50LT50b3BMZXZl
bEl0ZW0oMCk7DQogICAgLQlpZiAobGFzdCAmJiAhbGFzdC0+Z29QYXJlbnQpDQogICAgLQkJbGFz
dCA9IDA7DQogICAgLQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHQpIHsNCiAgICAtCQlpdGVtID0gbGFzdCA/IGxhc3QtPm5leHRTaWJsaW5nKCkgOiAo
Q29uZmlnSXRlbSopcGFyZW50LT50b3BMZXZlbEl0ZW0oMCk7DQogICAgLQkJdHlwZSA9IGNoaWxk
LT5wcm9tcHQgPyBjaGlsZC0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOw0KICAgIC0NCiAgICAt
CQlzd2l0Y2ggKG1vZGUpIHsNCiAgICAtCQljYXNlIG1lbnVNb2RlOg0KICAgIC0JCQlpZiAoIShj
aGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQ0KICAgIC0JCQkJZ290byBoaWRlOw0KICAgIC0JCQli
cmVhazsNCiAgICAtCQljYXNlIHN5bWJvbE1vZGU6DQogICAgLQkJCWlmIChjaGlsZC0+ZmxhZ3Mg
JiBNRU5VX1JPT1QpDQogICAgLQkJCQlnb3RvIGhpZGU7DQogICAgLQkJCWJyZWFrOw0KICAgIC0J
CWRlZmF1bHQ6DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJdmlzaWJs
ZSA9IG1lbnVfaXNfdmlzaWJsZShjaGlsZCk7DQogICAgLQkJaWYgKCFtZW51U2tpcChjaGlsZCkp
IHsNCiAgICAtCQkJaWYgKCFjaGlsZC0+c3ltICYmICFjaGlsZC0+bGlzdCAmJiAhY2hpbGQtPnBy
b21wdCkNCiAgICAtCQkJCWNvbnRpbnVlOw0KICAgIC0JCQlpZiAoIWl0ZW0gfHwgaXRlbS0+bWVu
dSAhPSBjaGlsZCkNCiAgICAtCQkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbShwYXJlbnQsIGxhc3Qs
IGNoaWxkLCB2aXNpYmxlKTsNCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJaXRlbS0+dGVzdFVwZGF0
ZU1lbnUodmlzaWJsZSk7DQogICAgLQ0KICAgIC0JCQlpZiAobW9kZSA9PSBmdWxsTW9kZSB8fCBt
b2RlID09IG1lbnVNb2RlIHx8IHR5cGUgIT0gUF9NRU5VKQ0KICAgIC0JCQkJdXBkYXRlTWVudUxp
c3QoaXRlbSwgY2hpbGQpOw0KICAgIC0JCQllbHNlDQogICAgLQkJCQl1cGRhdGVNZW51TGlzdChp
dGVtLCAwKTsNCiAgICAtCQkJbGFzdCA9IGl0ZW07DQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0J
CX0NCiAgICAtCWhpZGU6DQogICAgLQkJaWYgKGl0ZW0gJiYgaXRlbS0+bWVudSA9PSBjaGlsZCkg
ew0KICAgIC0JCQlsYXN0ID0gKENvbmZpZ0l0ZW0qKXBhcmVudC0+dG9wTGV2ZWxJdGVtKDApOw0K
ICAgIC0JCQlpZiAobGFzdCA9PSBpdGVtKQ0KICAgIC0JCQkJbGFzdCA9IDA7DQogICAgLQkJCWVs
c2Ugd2hpbGUgKGxhc3QtPm5leHRTaWJsaW5nKCkgIT0gaXRlbSkNCiAgICAtCQkJCWxhc3QgPSBs
YXN0LT5uZXh0U2libGluZygpOw0KICAgIC0JCQlkZWxldGUgaXRlbTsNCiAgICAtCQl9DQogICAg
LQl9DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6a2V5UHJlc3NFdmVudChR
S2V5RXZlbnQqIGV2KQ0KICAgIC17DQogICAgLQlRVHJlZVdpZGdldEl0ZW0qIGkgPSBjdXJyZW50
SXRlbSgpOw0KICAgIC0JQ29uZmlnSXRlbSogaXRlbTsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51
Ow0KICAgIC0JZW51bSBwcm9wX3R5cGUgdHlwZTsNCiAgICAtDQogICAgLQlpZiAoZXYtPmtleSgp
ID09IFF0OjpLZXlfRXNjYXBlICYmIG1vZGUgIT0gZnVsbE1vZGUgJiYgbW9kZSAhPSBsaXN0TW9k
ZSkgew0KICAgIC0JCWVtaXQgcGFyZW50U2VsZWN0ZWQoKTsNCiAgICAtCQlldi0+YWNjZXB0KCk7
DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmICghaSkgew0KICAgIC0J
CVBhcmVudDo6a2V5UHJlc3NFdmVudChldik7DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAg
IC0JaXRlbSA9IChDb25maWdJdGVtKilpOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoZXYtPmtleSgp
KSB7DQogICAgLQljYXNlIFF0OjpLZXlfUmV0dXJuOg0KICAgIC0JY2FzZSBRdDo6S2V5X0VudGVy
Og0KICAgIC0JCWlmIChpdGVtLT5nb1BhcmVudCkgew0KICAgIC0JCQllbWl0IHBhcmVudFNlbGVj
dGVkKCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQltZW51ID0gaXRlbS0+bWVu
dTsNCiAgICAtCQlpZiAoIW1lbnUpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JCXR5cGUgPSBtZW51
LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQkJaWYgKHR5
cGUgPT0gUF9NRU5VICYmIHJvb3RFbnRyeSAhPSBtZW51ICYmDQogICAgLQkJICAgIG1vZGUgIT0g
ZnVsbE1vZGUgJiYgbW9kZSAhPSBtZW51TW9kZSkgew0KICAgIC0JCQllbWl0IG1lbnVTZWxlY3Rl
ZChtZW51KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JY2FzZSBRdDo6S2V5X1Nw
YWNlOg0KICAgIC0JCWNoYW5nZVZhbHVlKGl0ZW0pOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2Fz
ZSBRdDo6S2V5X046DQogICAgLQkJc2V0VmFsdWUoaXRlbSwgbm8pOw0KICAgIC0JCWJyZWFrOw0K
ICAgIC0JY2FzZSBRdDo6S2V5X006DQogICAgLQkJc2V0VmFsdWUoaXRlbSwgbW9kKTsNCiAgICAt
CQlicmVhazsNCiAgICAtCWNhc2UgUXQ6OktleV9ZOg0KICAgIC0JCXNldFZhbHVlKGl0ZW0sIHll
cyk7DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCVBhcmVudDo6a2V5UHJl
c3NFdmVudChldik7DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0JZXYtPmFjY2VwdCgp
Ow0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0xpc3Q6Om1vdXNlUHJlc3NFdmVudChR
TW91c2VFdmVudCogZSkNCiAgICAtew0KICAgIC0JLy9RUG9pbnQgcChjb250ZW50c1RvVmlld3Bv
cnQoZS0+cG9zKCkpKTsNCiAgICAtCS8vcHJpbnRmKCJjb250ZW50c01vdXNlUHJlc3NFdmVudDog
JWQsJWRcbiIsIHAueCgpLCBwLnkoKSk7DQogICAgLQlQYXJlbnQ6Om1vdXNlUHJlc3NFdmVudChl
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojptb3VzZVJlbGVhc2VFdmVu
dChRTW91c2VFdmVudCogZSkNCiAgICAtew0KICAgIC0JUVBvaW50IHAgPSBlLT5wb3MoKTsNCiAg
ICAtCUNvbmZpZ0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSopaXRlbUF0KHApOw0KICAgIC0Jc3Ry
dWN0IG1lbnUgKm1lbnU7DQogICAgLQllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICAtCVFJY29u
IGljb247DQogICAgLQlpbnQgaWR4LCB4Ow0KICAgIC0NCiAgICAtCWlmICghaXRlbSkNCiAgICAt
CQlnb3RvIHNraXA7DQogICAgLQ0KICAgIC0JbWVudSA9IGl0ZW0tPm1lbnU7DQogICAgLQl4ID0g
aGVhZGVyKCktPm9mZnNldCgpICsgcC54KCk7DQogICAgLQlpZHggPSBoZWFkZXIoKS0+bG9naWNh
bEluZGV4QXQoeCk7DQogICAgLQlzd2l0Y2ggKGlkeCkgew0KICAgIC0JY2FzZSBwcm9tcHRDb2xJ
ZHg6DQogICAgLQkJaWNvbiA9IGl0ZW0tPnBpeG1hcChwcm9tcHRDb2xJZHgpOw0KICAgIC0JCWlm
ICghaWNvbi5pc051bGwoKSkgew0KICAgIC0JCQlpbnQgb2ZmID0gaGVhZGVyKCktPnNlY3Rpb25Q
b3NpdGlvbigwKSArIHZpc3VhbFJlY3QoaW5kZXhBdChwKSkueCgpICsgNDsgLy8gNCBpcyBIYXJk
Y29kZWQgaW1hZ2Ugb2Zmc2V0LiBUaGVyZSBtaWdodCBiZSBhIHdheSB0byBkbyBpdCBwcm9wZXJs
eS4NCiAgICAtCQkJaWYgKHggPj0gb2ZmICYmIHggPCBvZmYgKyBpY29uLmF2YWlsYWJsZVNpemVz
KCkuZmlyc3QoKS53aWR0aCgpKSB7DQogICAgLQkJCQlpZiAoaXRlbS0+Z29QYXJlbnQpIHsNCiAg
ICAtCQkJCQllbWl0IHBhcmVudFNlbGVjdGVkKCk7DQogICAgLQkJCQkJYnJlYWs7DQogICAgLQkJ
CQl9IGVsc2UgaWYgKCFtZW51KQ0KICAgIC0JCQkJCWJyZWFrOw0KICAgIC0JCQkJcHR5cGUgPSBt
ZW51LT5wcm9tcHQgPyBtZW51LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgLQkJCQlp
ZiAocHR5cGUgPT0gUF9NRU5VICYmIHJvb3RFbnRyeSAhPSBtZW51ICYmDQogICAgLQkJCQkgICAg
bW9kZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IG1lbnVNb2RlKQ0KICAgIC0JCQkJCWVtaXQgbWVu
dVNlbGVjdGVkKG1lbnUpOw0KICAgIC0JCQkJZWxzZQ0KICAgIC0JCQkJCWNoYW5nZVZhbHVlKGl0
ZW0pOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBub0Nv
bElkeDoNCiAgICAtCQlzZXRWYWx1ZShpdGVtLCBubyk7DQogICAgLQkJYnJlYWs7DQogICAgLQlj
YXNlIG1vZENvbElkeDoNCiAgICAtCQlzZXRWYWx1ZShpdGVtLCBtb2QpOw0KICAgIC0JCWJyZWFr
Ow0KICAgIC0JY2FzZSB5ZXNDb2xJZHg6DQogICAgLQkJc2V0VmFsdWUoaXRlbSwgeWVzKTsNCiAg
ICAtCQlicmVhazsNCiAgICAtCWNhc2UgZGF0YUNvbElkeDoNCiAgICAtCQljaGFuZ2VWYWx1ZShp
dGVtKTsNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtDQogICAgLXNraXA6DQogICAgLQkv
L3ByaW50ZigiY29udGVudHNNb3VzZVJlbGVhc2VFdmVudDogJWQsJWRcbiIsIHAueCgpLCBwLnko
KSk7DQogICAgLQlQYXJlbnQ6Om1vdXNlUmVsZWFzZUV2ZW50KGUpOw0KICAgIC19DQogICAgLQ0K
ICAgIC12b2lkIENvbmZpZ0xpc3Q6Om1vdXNlTW92ZUV2ZW50KFFNb3VzZUV2ZW50KiBlKQ0KICAg
IC17DQogICAgLQkvL1FQb2ludCBwKGNvbnRlbnRzVG9WaWV3cG9ydChlLT5wb3MoKSkpOw0KICAg
IC0JLy9wcmludGYoImNvbnRlbnRzTW91c2VNb3ZlRXZlbnQ6ICVkLCVkXG4iLCBwLngoKSwgcC55
KCkpOw0KICAgIC0JUGFyZW50Ojptb3VzZU1vdmVFdmVudChlKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtdm9pZCBDb25maWdMaXN0Ojptb3VzZURvdWJsZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQqIGUp
DQogICAgLXsNCiAgICAtCVFQb2ludCBwID0gZS0+cG9zKCk7IC8vIFRPRE86IENoZWNrIGlmIHRo
aXMgd29ya3Mod2FzIGNvbnRlbnRzVG9WaWV3cG9ydCkuDQogICAgLQlDb25maWdJdGVtKiBpdGVt
ID0gKENvbmZpZ0l0ZW0qKWl0ZW1BdChwKTsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51Ow0KICAg
IC0JZW51bSBwcm9wX3R5cGUgcHR5cGU7DQogICAgLQ0KICAgIC0JaWYgKCFpdGVtKQ0KICAgIC0J
CWdvdG8gc2tpcDsNCiAgICAtCWlmIChpdGVtLT5nb1BhcmVudCkgew0KICAgIC0JCWVtaXQgcGFy
ZW50U2VsZWN0ZWQoKTsNCiAgICAtCQlnb3RvIHNraXA7DQogICAgLQl9DQogICAgLQltZW51ID0g
aXRlbS0+bWVudTsNCiAgICAtCWlmICghbWVudSkNCiAgICAtCQlnb3RvIHNraXA7DQogICAgLQlw
dHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAg
ICAtCWlmIChwdHlwZSA9PSBQX01FTlUgJiYgKG1vZGUgPT0gc2luZ2xlTW9kZSB8fCBtb2RlID09
IHN5bWJvbE1vZGUpKQ0KICAgIC0JCWVtaXQgbWVudVNlbGVjdGVkKG1lbnUpOw0KICAgIC0JZWxz
ZSBpZiAobWVudS0+c3ltKQ0KICAgIC0JCWNoYW5nZVZhbHVlKGl0ZW0pOw0KICAgIC0NCiAgICAt
c2tpcDoNCiAgICAtCS8vcHJpbnRmKCJjb250ZW50c01vdXNlRG91YmxlQ2xpY2tFdmVudDogJWQs
JWRcbiIsIHAueCgpLCBwLnkoKSk7DQogICAgLQlQYXJlbnQ6Om1vdXNlRG91YmxlQ2xpY2tFdmVu
dChlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdMaXN0Ojpmb2N1c0luRXZlbnQo
UUZvY3VzRXZlbnQgKmUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51ICptZW51ID0gTlVMTDsN
CiAgICAtDQogICAgLQlQYXJlbnQ6OmZvY3VzSW5FdmVudChlKTsNCiAgICAtDQogICAgLQlDb25m
aWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0gKiljdXJyZW50SXRlbSgpOw0KICAgIC0JaWYgKGl0
ZW0pIHsNCiAgICAtCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsNCiAgICAtCQltZW51ID0gaXRl
bS0+bWVudTsNCiAgICAtCX0NCiAgICAtCWVtaXQgZ290Rm9jdXMobWVudSk7DQogICAgLX0NCiAg
ICAtDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6Y29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVF
dmVudCAqZSkNCiAgICAtew0KICAgIC0JaWYgKGUtPnkoKSA8PSBoZWFkZXIoKS0+Z2VvbWV0cnko
KS5ib3R0b20oKSkgew0KICAgIC0JCWlmICghaGVhZGVyUG9wdXApIHsNCiAgICAtCQkJUUFjdGlv
biAqYWN0aW9uOw0KICAgIC0NCiAgICAtCQkJaGVhZGVyUG9wdXAgPSBuZXcgUU1lbnUodGhpcyk7
DQogICAgLQkJCWFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IE5hbWUiLCB0aGlzKTsNCiAgICAt
CQkJICBhY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAgICAtCQkJICBjb25uZWN0KGFjdGlv
biwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLA0KICAgIC0JCQkJICBwYXJlbnQoKSwgU0xPVChzZXRT
aG93TmFtZShib29sKSkpOw0KICAgIC0JCQkgIGNvbm5lY3QocGFyZW50KCksIFNJR05BTChzaG93
TmFtZUNoYW5nZWQoYm9vbCkpLA0KICAgIC0JCQkJICBhY3Rpb24sIFNMT1Qoc2V0T24oYm9vbCkp
KTsNCiAgICAtCQkJICBhY3Rpb24tPnNldENoZWNrZWQoc2hvd05hbWUpOw0KICAgIC0JCQkgIGhl
YWRlclBvcHVwLT5hZGRBY3Rpb24oYWN0aW9uKTsNCiAgICAtCQkJYWN0aW9uID0gbmV3IFFBY3Rp
b24oIlNob3cgUmFuZ2UiLCB0aGlzKTsNCiAgICAtCQkJICBhY3Rpb24tPnNldENoZWNrYWJsZSh0
cnVlKTsNCiAgICAtCQkJICBjb25uZWN0KGFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9vbCkpLA0K
ICAgIC0JCQkJICBwYXJlbnQoKSwgU0xPVChzZXRTaG93UmFuZ2UoYm9vbCkpKTsNCiAgICAtCQkJ
ICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwoc2hvd1JhbmdlQ2hhbmdlZChib29sKSksDQogICAg
LQkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkpOw0KICAgIC0JCQkgIGFjdGlvbi0+c2V0
Q2hlY2tlZChzaG93UmFuZ2UpOw0KICAgIC0JCQkgIGhlYWRlclBvcHVwLT5hZGRBY3Rpb24oYWN0
aW9uKTsNCiAgICAtCQkJYWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgRGF0YSIsIHRoaXMpOw0K
ICAgIC0JCQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgIC0JCQkgIGNvbm5lY3Qo
YWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksDQogICAgLQkJCQkgIHBhcmVudCgpLCBTTE9U
KHNldFNob3dEYXRhKGJvb2wpKSk7DQogICAgLQkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFM
KHNob3dEYXRhQ2hhbmdlZChib29sKSksDQogICAgLQkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihi
b29sKSkpOw0KICAgIC0JCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93RGF0YSk7DQogICAgLQkJ
CSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOw0KICAgIC0JCX0NCiAgICAtCQloZWFk
ZXJQb3B1cC0+ZXhlYyhlLT5nbG9iYWxQb3MoKSk7DQogICAgLQkJZS0+YWNjZXB0KCk7DQogICAg
LQl9IGVsc2UNCiAgICAtCQllLT5pZ25vcmUoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtQ29uZmln
VmlldypDb25maWdWaWV3Ojp2aWV3TGlzdDsNCiAgICAtUUFjdGlvbiAqQ29uZmlnVmlldzo6c2hv
d05vcm1hbEFjdGlvbjsNCiAgICAtUUFjdGlvbiAqQ29uZmlnVmlldzo6c2hvd0FsbEFjdGlvbjsN
CiAgICAtUUFjdGlvbiAqQ29uZmlnVmlldzo6c2hvd1Byb21wdEFjdGlvbjsNCiAgICAtDQogICAg
LUNvbmZpZ1ZpZXc6OkNvbmZpZ1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1l
KQ0KICAgIC0JOiBQYXJlbnQocGFyZW50KQ0KICAgIC17DQogICAgLQlzZXRPYmplY3ROYW1lKG5h
bWUpOw0KICAgIC0JUVZCb3hMYXlvdXQgKnZlcnRpY2FsTGF5b3V0ID0gbmV3IFFWQm94TGF5b3V0
KHRoaXMpOw0KICAgIC0JdmVydGljYWxMYXlvdXQtPnNldENvbnRlbnRzTWFyZ2lucygwLCAwLCAw
LCAwKTsNCiAgICAtDQogICAgLQlsaXN0ID0gbmV3IENvbmZpZ0xpc3QodGhpcyk7DQogICAgLQl2
ZXJ0aWNhbExheW91dC0+YWRkV2lkZ2V0KGxpc3QpOw0KICAgIC0JbGluZUVkaXQgPSBuZXcgQ29u
ZmlnTGluZUVkaXQodGhpcyk7DQogICAgLQlsaW5lRWRpdC0+aGlkZSgpOw0KICAgIC0JdmVydGlj
YWxMYXlvdXQtPmFkZFdpZGdldChsaW5lRWRpdCk7DQogICAgLQ0KICAgIC0JdGhpcy0+bmV4dFZp
ZXcgPSB2aWV3TGlzdDsNCiAgICAtCXZpZXdMaXN0ID0gdGhpczsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtQ29uZmlnVmlldzo6fkNvbmZpZ1ZpZXcodm9pZCkNCiAgICAtew0KICAgIC0JQ29uZmlnVmll
dyoqIHZwOw0KICAgIC0NCiAgICAtCWZvciAodnAgPSAmdmlld0xpc3Q7ICp2cDsgdnAgPSAmKCp2
cCktPm5leHRWaWV3KSB7DQogICAgLQkJaWYgKCp2cCA9PSB0aGlzKSB7DQogICAgLQkJCSp2cCA9
IG5leHRWaWV3Ow0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLX0NCiAg
ICAtDQogICAgLXZvaWQgQ29uZmlnVmlldzo6c2V0T3B0aW9uTW9kZShRQWN0aW9uICphY3QpDQog
ICAgLXsNCiAgICAtCWlmIChhY3QgPT0gc2hvd05vcm1hbEFjdGlvbikNCiAgICAtCQlsaXN0LT5v
cHRNb2RlID0gbm9ybWFsT3B0Ow0KICAgIC0JZWxzZSBpZiAoYWN0ID09IHNob3dBbGxBY3Rpb24p
DQogICAgLQkJbGlzdC0+b3B0TW9kZSA9IGFsbE9wdDsNCiAgICAtCWVsc2UNCiAgICAtCQlsaXN0
LT5vcHRNb2RlID0gcHJvbXB0T3B0Ow0KICAgIC0NCiAgICAtCWxpc3QtPnVwZGF0ZUxpc3RBbGwo
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdWaWV3OjpzZXRTaG93TmFtZShib29s
IGIpDQogICAgLXsNCiAgICAtCWlmIChsaXN0LT5zaG93TmFtZSAhPSBiKSB7DQogICAgLQkJbGlz
dC0+c2hvd05hbWUgPSBiOw0KICAgIC0JCWxpc3QtPnJlaW5pdCgpOw0KICAgIC0JCWVtaXQgc2hv
d05hbWVDaGFuZ2VkKGIpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZp
Z1ZpZXc6OnNldFNob3dSYW5nZShib29sIGIpDQogICAgLXsNCiAgICAtCWlmIChsaXN0LT5zaG93
UmFuZ2UgIT0gYikgew0KICAgIC0JCWxpc3QtPnNob3dSYW5nZSA9IGI7DQogICAgLQkJbGlzdC0+
cmVpbml0KCk7DQogICAgLQkJZW1pdCBzaG93UmFuZ2VDaGFuZ2VkKGIpOw0KICAgIC0JfQ0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dEYXRhKGJvb2wgYikNCiAg
ICAtew0KICAgIC0JaWYgKGxpc3QtPnNob3dEYXRhICE9IGIpIHsNCiAgICAtCQlsaXN0LT5zaG93
RGF0YSA9IGI7DQogICAgLQkJbGlzdC0+cmVpbml0KCk7DQogICAgLQkJZW1pdCBzaG93RGF0YUNo
YW5nZWQoYik7DQogICAgLQl9DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTGlzdDo6
c2V0QWxsT3Blbihib29sIG9wZW4pDQogICAgLXsNCiAgICAtCVFUcmVlV2lkZ2V0SXRlbUl0ZXJh
dG9yIGl0KHRoaXMpOw0KICAgIC0NCiAgICAtCXdoaWxlICgqaXQpIHsNCiAgICAtCQkoKml0KS0+
c2V0RXhwYW5kZWQob3Blbik7DQogICAgLQ0KICAgIC0JCSsraXQ7DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLXZvaWQgQ29uZmlnVmlldzo6dXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVt
KQ0KICAgIC17DQogICAgLQlDb25maWdWaWV3KiB2Ow0KICAgIC0NCiAgICAtCWZvciAodiA9IHZp
ZXdMaXN0OyB2OyB2ID0gdi0+bmV4dFZpZXcpDQogICAgLQkJdi0+bGlzdC0+dXBkYXRlTGlzdChp
dGVtKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0QWxs
KHZvaWQpDQogICAgLXsNCiAgICAtCUNvbmZpZ1ZpZXcqIHY7DQogICAgLQ0KICAgIC0JZm9yICh2
ID0gdmlld0xpc3Q7IHY7IHYgPSB2LT5uZXh0VmlldykNCiAgICAtCQl2LT5saXN0LT51cGRhdGVM
aXN0QWxsKCk7DQogICAgLX0NCiAgICAtDQogICAgLUNvbmZpZ0luZm9WaWV3OjpDb25maWdJbmZv
VmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpDQogICAgLQk6IFBhcmVudChw
YXJlbnQpLCBzeW0oMCksIF9tZW51KDApDQogICAgLXsNCiAgICAtCXNldE9iamVjdE5hbWUobmFt
ZSk7DQogICAgLQ0KICAgIC0NCiAgICAtCWlmICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgew0K
ICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG9iamVjdE5hbWUoKSk7DQogICAgLQkJ
c2V0U2hvd0RlYnVnKGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3Nob3dEZWJ1ZyIsIGZhbHNlKS50
b0Jvb2woKSk7DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7DQogICAgLQkJY29u
bmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChzYXZlU2V0dGluZ3Mo
KSkpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0luZm9WaWV3Ojpz
YXZlU2V0dGluZ3Modm9pZCkNCiAgICAtew0KICAgIC0JaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0
eSgpKSB7DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAob2JqZWN0TmFtZSgpKTsN
CiAgICAtCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93RGVidWciLCBzaG93RGVidWco
KSk7DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7DQogICAgLQl9DQogICAgLX0N
CiAgICAtDQogICAgLXZvaWQgQ29uZmlnSW5mb1ZpZXc6OnNldFNob3dEZWJ1Zyhib29sIGIpDQog
ICAgLXsNCiAgICAtCWlmIChfc2hvd0RlYnVnICE9IGIpIHsNCiAgICAtCQlfc2hvd0RlYnVnID0g
YjsNCiAgICAtCQlpZiAoX21lbnUpDQogICAgLQkJCW1lbnVJbmZvKCk7DQogICAgLQkJZWxzZSBp
ZiAoc3ltKQ0KICAgIC0JCQlzeW1ib2xJbmZvKCk7DQogICAgLQkJZW1pdCBzaG93RGVidWdDaGFu
Z2VkKGIpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0luZm9WaWV3
OjpzZXRJbmZvKHN0cnVjdCBtZW51ICptKQ0KICAgIC17DQogICAgLQlpZiAoX21lbnUgPT0gbSkN
CiAgICAtCQlyZXR1cm47DQogICAgLQlfbWVudSA9IG07DQogICAgLQlzeW0gPSBOVUxMOw0KICAg
IC0JaWYgKCFfbWVudSkNCiAgICAtCQljbGVhcigpOw0KICAgIC0JZWxzZQ0KICAgIC0JCW1lbnVJ
bmZvKCk7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnSW5mb1ZpZXc6OnN5bWJvbElu
Zm8odm9pZCkNCiAgICAtew0KICAgIC0JUVN0cmluZyBzdHI7DQogICAgLQ0KICAgIC0Jc3RyICs9
ICI8YmlnPlN5bWJvbDogPGI+IjsNCiAgICAtCXN0ciArPSBwcmludF9maWx0ZXIoc3ltLT5uYW1l
KTsNCiAgICAtCXN0ciArPSAiPC9iPjwvYmlnPjxicj48YnI+dmFsdWU6ICI7DQogICAgLQlzdHIg
Kz0gcHJpbnRfZmlsdGVyKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkpOw0KICAgIC0Jc3RyICs9
ICI8YnI+dmlzaWJpbGl0eTogIjsNCiAgICAtCXN0ciArPSBzeW0tPnZpc2libGUgPT0geWVzID8g
InkiIDogc3ltLT52aXNpYmxlID09IG1vZCA/ICJtIiA6ICJuIjsNCiAgICAtCXN0ciArPSAiPGJy
PiI7DQogICAgLQlzdHIgKz0gZGVidWdfaW5mbyhzeW0pOw0KICAgIC0NCiAgICAtCXNldFRleHQo
c3RyKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdJbmZvVmlldzo6bWVudUluZm8o
dm9pZCkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCogc3ltOw0KICAgIC0JUVN0cmluZyBo
ZWFkLCBkZWJ1ZywgaGVscDsNCiAgICAtDQogICAgLQlzeW0gPSBfbWVudS0+c3ltOw0KICAgIC0J
aWYgKHN5bSkgew0KICAgIC0JCWlmIChfbWVudS0+cHJvbXB0KSB7DQogICAgLQkJCWhlYWQgKz0g
IjxiaWc+PGI+IjsNCiAgICAtCQkJaGVhZCArPSBwcmludF9maWx0ZXIoX21lbnUtPnByb21wdC0+
dGV4dCk7DQogICAgLQkJCWhlYWQgKz0gIjwvYj48L2JpZz4iOw0KICAgIC0JCQlpZiAoc3ltLT5u
YW1lKSB7DQogICAgLQkJCQloZWFkICs9ICIgKCI7DQogICAgLQkJCQlpZiAoc2hvd0RlYnVnKCkp
DQogICAgLQkJCQkJaGVhZCArPSBRU3RyaW5nKCkuc3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIs
IHN5bSk7DQogICAgLQkJCQloZWFkICs9IHByaW50X2ZpbHRlcihzeW0tPm5hbWUpOw0KICAgIC0J
CQkJaWYgKHNob3dEZWJ1ZygpKQ0KICAgIC0JCQkJCWhlYWQgKz0gIjwvYT4iOw0KICAgIC0JCQkJ
aGVhZCArPSAiKSI7DQogICAgLQkJCX0NCiAgICAtCQl9IGVsc2UgaWYgKHN5bS0+bmFtZSkgew0K
ICAgIC0JCQloZWFkICs9ICI8YmlnPjxiPiI7DQogICAgLQkJCWlmIChzaG93RGVidWcoKSkNCiAg
ICAtCQkJCWhlYWQgKz0gUVN0cmluZygpLnNwcmludGYoIjxhIGhyZWY9XCJzJXBcIj4iLCBzeW0p
Ow0KICAgIC0JCQloZWFkICs9IHByaW50X2ZpbHRlcihzeW0tPm5hbWUpOw0KICAgIC0JCQlpZiAo
c2hvd0RlYnVnKCkpDQogICAgLQkJCQloZWFkICs9ICI8L2E+IjsNCiAgICAtCQkJaGVhZCArPSAi
PC9iPjwvYmlnPiI7DQogICAgLQkJfQ0KICAgIC0JCWhlYWQgKz0gIjxicj48YnI+IjsNCiAgICAt
DQogICAgLQkJaWYgKHNob3dEZWJ1ZygpKQ0KICAgIC0JCQlkZWJ1ZyA9IGRlYnVnX2luZm8oc3lt
KTsNCiAgICAtDQogICAgLQkJc3RydWN0IGdzdHIgaGVscF9nc3RyID0gc3RyX25ldygpOw0KICAg
IC0JCW1lbnVfZ2V0X2V4dF9oZWxwKF9tZW51LCAmaGVscF9nc3RyKTsNCiAgICAtCQloZWxwID0g
cHJpbnRfZmlsdGVyKHN0cl9nZXQoJmhlbHBfZ3N0cikpOw0KICAgIC0JCXN0cl9mcmVlKCZoZWxw
X2dzdHIpOw0KICAgIC0JfSBlbHNlIGlmIChfbWVudS0+cHJvbXB0KSB7DQogICAgLQkJaGVhZCAr
PSAiPGJpZz48Yj4iOw0KICAgIC0JCWhlYWQgKz0gcHJpbnRfZmlsdGVyKF9tZW51LT5wcm9tcHQt
PnRleHQpOw0KICAgIC0JCWhlYWQgKz0gIjwvYj48L2JpZz48YnI+PGJyPiI7DQogICAgLQkJaWYg
KHNob3dEZWJ1ZygpKSB7DQogICAgLQkJCWlmIChfbWVudS0+cHJvbXB0LT52aXNpYmxlLmV4cHIp
IHsNCiAgICAtCQkJCWRlYnVnICs9ICImbmJzcDsmbmJzcDtkZXA6ICI7DQogICAgLQkJCQlleHBy
X3ByaW50KF9tZW51LT5wcm9tcHQtPnZpc2libGUuZXhwciwgZXhwcl9wcmludF9oZWxwLCAmZGVi
dWcsIEVfTk9ORSk7DQogICAgLQkJCQlkZWJ1ZyArPSAiPGJyPjxicj4iOw0KICAgIC0JCQl9DQog
ICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0JaWYgKHNob3dEZWJ1ZygpKQ0KICAgIC0JCWRlYnVnICs9
IFFTdHJpbmcoKS5zcHJpbnRmKCJkZWZpbmVkIGF0ICVzOiVkPGJyPjxicj4iLCBfbWVudS0+Zmls
ZS0+bmFtZSwgX21lbnUtPmxpbmVubyk7DQogICAgLQ0KICAgIC0Jc2V0VGV4dChoZWFkICsgZGVi
dWcgKyBoZWxwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtUVN0cmluZyBDb25maWdJbmZvVmlldzo6
ZGVidWdfaW5mbyhzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCVFTdHJpbmcgZGVi
dWc7DQogICAgLQ0KICAgIC0JZGVidWcgKz0gInR5cGU6ICI7DQogICAgLQlkZWJ1ZyArPSBwcmlu
dF9maWx0ZXIoc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpKTsNCiAgICAtCWlmIChzeW1faXNfY2hv
aWNlKHN5bSkpDQogICAgLQkJZGVidWcgKz0gIiAoY2hvaWNlKSI7DQogICAgLQlkZWJ1ZyArPSAi
PGJyPiI7DQogICAgLQlpZiAoc3ltLT5yZXZfZGVwLmV4cHIpIHsNCiAgICAtCQlkZWJ1ZyArPSAi
cmV2ZXJzZSBkZXA6ICI7DQogICAgLQkJZXhwcl9wcmludChzeW0tPnJldl9kZXAuZXhwciwgZXhw
cl9wcmludF9oZWxwLCAmZGVidWcsIEVfTk9ORSk7DQogICAgLQkJZGVidWcgKz0gIjxicj4iOw0K
ICAgIC0JfQ0KICAgIC0JZm9yIChzdHJ1Y3QgcHJvcGVydHkgKnByb3AgPSBzeW0tPnByb3A7IHBy
b3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgLQkJc3dpdGNoIChwcm9wLT50eXBlKSB7DQog
ICAgLQkJY2FzZSBQX1BST01QVDoNCiAgICAtCQljYXNlIFBfTUVOVToNCiAgICAtCQkJZGVidWcg
Kz0gUVN0cmluZygpLnNwcmludGYoInByb21wdDogPGEgaHJlZj1cIm0lcFwiPiIsIHByb3AtPm1l
bnUpOw0KICAgIC0JCQlkZWJ1ZyArPSBwcmludF9maWx0ZXIocHJvcC0+dGV4dCk7DQogICAgLQkJ
CWRlYnVnICs9ICI8L2E+PGJyPiI7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9ERUZB
VUxUOg0KICAgIC0JCWNhc2UgUF9TRUxFQ1Q6DQogICAgLQkJY2FzZSBQX1JBTkdFOg0KICAgIC0J
CQlkZWJ1ZyArPSBwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSk7DQogICAgLQkJCWRlYnVn
ICs9ICI6ICI7DQogICAgLQkJCWV4cHJfcHJpbnQocHJvcC0+ZXhwciwgZXhwcl9wcmludF9oZWxw
LCAmZGVidWcsIEVfTk9ORSk7DQogICAgLQkJCWRlYnVnICs9ICI8YnI+IjsNCiAgICAtCQkJYnJl
YWs7DQogICAgLQkJY2FzZSBQX0NIT0lDRToNCiAgICAtCQkJaWYgKHN5bV9pc19jaG9pY2Uoc3lt
KSkgew0KICAgIC0JCQkJZGVidWcgKz0gImNob2ljZTogIjsNCiAgICAtCQkJCWV4cHJfcHJpbnQo
cHJvcC0+ZXhwciwgZXhwcl9wcmludF9oZWxwLCAmZGVidWcsIEVfTk9ORSk7DQogICAgLQkJCQlk
ZWJ1ZyArPSAiPGJyPiI7DQogICAgLQkJCX0NCiAgICAtCQkJYnJlYWs7DQogICAgLQkJZGVmYXVs
dDoNCiAgICAtCQkJZGVidWcgKz0gInVua25vd24gcHJvcGVydHk6ICI7DQogICAgLQkJCWRlYnVn
ICs9IHByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKTsNCiAgICAtCQkJZGVidWcgKz0gIjxi
cj4iOw0KICAgIC0JCX0NCiAgICAtCQlpZiAocHJvcC0+dmlzaWJsZS5leHByKSB7DQogICAgLQkJ
CWRlYnVnICs9ICImbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtkZXA6ICI7DQogICAgLQkJCWV4cHJf
cHJpbnQocHJvcC0+dmlzaWJsZS5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05F
KTsNCiAgICAtCQkJZGVidWcgKz0gIjxicj4iOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWRl
YnVnICs9ICI8YnI+IjsNCiAgICAtDQogICAgLQlyZXR1cm4gZGVidWc7DQogICAgLX0NCiAgICAt
DQogICAgLVFTdHJpbmcgQ29uZmlnSW5mb1ZpZXc6OnByaW50X2ZpbHRlcihjb25zdCBRU3RyaW5n
ICZzdHIpDQogICAgLXsNCiAgICAtCVFSZWdFeHAgcmUoIls8PiZcIlxcbl0iKTsNCiAgICAtCVFT
dHJpbmcgcmVzID0gc3RyOw0KICAgIC0JZm9yIChpbnQgaSA9IDA7IChpID0gcmVzLmluZGV4T2Yo
cmUsIGkpKSA+PSAwOykgew0KICAgIC0JCXN3aXRjaCAocmVzW2ldLnRvTGF0aW4xKCkpIHsNCiAg
ICAtCQljYXNlICc8JzoNCiAgICAtCQkJcmVzLnJlcGxhY2UoaSwgMSwgIiZsdDsiKTsNCiAgICAt
CQkJaSArPSA0Ow0KICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlICc+JzoNCiAgICAtCQkJcmVz
LnJlcGxhY2UoaSwgMSwgIiZndDsiKTsNCiAgICAtCQkJaSArPSA0Ow0KICAgIC0JCQlicmVhazsN
CiAgICAtCQljYXNlICcmJzoNCiAgICAtCQkJcmVzLnJlcGxhY2UoaSwgMSwgIiZhbXA7Iik7DQog
ICAgLQkJCWkgKz0gNTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSAnIic6DQogICAgLQkJ
CXJlcy5yZXBsYWNlKGksIDEsICImcXVvdDsiKTsNCiAgICAtCQkJaSArPSA2Ow0KICAgIC0JCQli
cmVhazsNCiAgICAtCQljYXNlICdcbic6DQogICAgLQkJCXJlcy5yZXBsYWNlKGksIDEsICI8YnI+
Iik7DQogICAgLQkJCWkgKz0gNDsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJfQ0KICAgIC0JfQ0K
ICAgIC0JcmV0dXJuIHJlczsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdJbmZvVmll
dzo6ZXhwcl9wcmludF9oZWxwKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3Qg
Y2hhciAqc3RyKQ0KICAgIC17DQogICAgLQlRU3RyaW5nKiB0ZXh0ID0gcmVpbnRlcnByZXRfY2Fz
dDxRU3RyaW5nKj4oZGF0YSk7DQogICAgLQlRU3RyaW5nIHN0cjIgPSBwcmludF9maWx0ZXIoc3Ry
KTsNCiAgICAtDQogICAgLQlpZiAoc3ltICYmIHN5bS0+bmFtZSAmJiAhKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfQ09OU1QpKSB7DQogICAgLQkJKnRleHQgKz0gUVN0cmluZygpLnNwcmludGYoIjxhIGhy
ZWY9XCJzJXBcIj4iLCBzeW0pOw0KICAgIC0JCSp0ZXh0ICs9IHN0cjI7DQogICAgLQkJKnRleHQg
Kz0gIjwvYT4iOw0KICAgIC0JfSBlbHNlDQogICAgLQkJKnRleHQgKz0gc3RyMjsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtUU1lbnUqIENvbmZpZ0luZm9WaWV3OjpjcmVhdGVTdGFuZGFyZENvbnRleHRN
ZW51KGNvbnN0IFFQb2ludCAmIHBvcykNCiAgICAtew0KICAgIC0JUU1lbnUqIHBvcHVwID0gUGFy
ZW50OjpjcmVhdGVTdGFuZGFyZENvbnRleHRNZW51KHBvcyk7DQogICAgLQlRQWN0aW9uKiBhY3Rp
b24gPSBuZXcgUUFjdGlvbigiU2hvdyBEZWJ1ZyBJbmZvIiwgcG9wdXApOw0KICAgIC0JICBhY3Rp
b24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAgICAtCSAgY29ubmVjdChhY3Rpb24sIFNJR05BTCh0
b2dnbGVkKGJvb2wpKSwgU0xPVChzZXRTaG93RGVidWcoYm9vbCkpKTsNCiAgICAtCSAgY29ubmVj
dCh0aGlzLCBTSUdOQUwoc2hvd0RlYnVnQ2hhbmdlZChib29sKSksIGFjdGlvbiwgU0xPVChzZXRP
bihib29sKSkpOw0KICAgIC0JICBhY3Rpb24tPnNldENoZWNrZWQoc2hvd0RlYnVnKCkpOw0KICAg
IC0JcG9wdXAtPmFkZFNlcGFyYXRvcigpOw0KICAgIC0JcG9wdXAtPmFkZEFjdGlvbihhY3Rpb24p
Ow0KICAgIC0JcmV0dXJuIHBvcHVwOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ0lu
Zm9WaWV3Ojpjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKQ0KICAgIC17DQog
ICAgLQlQYXJlbnQ6OmNvbnRleHRNZW51RXZlbnQoZSk7DQogICAgLX0NCiAgICAtDQogICAgLUNv
bmZpZ1NlYXJjaFdpbmRvdzo6Q29uZmlnU2VhcmNoV2luZG93KENvbmZpZ01haW5XaW5kb3cqIHBh
cmVudCwgY29uc3QgY2hhciAqbmFtZSkNCiAgICAtCTogUGFyZW50KHBhcmVudCksIHJlc3VsdChO
VUxMKQ0KICAgIC17DQogICAgLQlzZXRPYmplY3ROYW1lKG5hbWUpOw0KICAgIC0Jc2V0V2luZG93
VGl0bGUoIlNlYXJjaCBDb25maWciKTsNCiAgICAtDQogICAgLQlRVkJveExheW91dCogbGF5b3V0
MSA9IG5ldyBRVkJveExheW91dCh0aGlzKTsNCiAgICAtCWxheW91dDEtPnNldENvbnRlbnRzTWFy
Z2lucygxMSwgMTEsIDExLCAxMSk7DQogICAgLQlsYXlvdXQxLT5zZXRTcGFjaW5nKDYpOw0KICAg
IC0JUUhCb3hMYXlvdXQqIGxheW91dDIgPSBuZXcgUUhCb3hMYXlvdXQoMCk7DQogICAgLQlsYXlv
dXQyLT5zZXRDb250ZW50c01hcmdpbnMoMCwgMCwgMCwgMCk7DQogICAgLQlsYXlvdXQyLT5zZXRT
cGFjaW5nKDYpOw0KICAgIC0JbGF5b3V0Mi0+YWRkV2lkZ2V0KG5ldyBRTGFiZWwoIkZpbmQ6Iiwg
dGhpcykpOw0KICAgIC0JZWRpdEZpZWxkID0gbmV3IFFMaW5lRWRpdCh0aGlzKTsNCiAgICAtCWNv
bm5lY3QoZWRpdEZpZWxkLCBTSUdOQUwocmV0dXJuUHJlc3NlZCgpKSwgU0xPVChzZWFyY2goKSkp
Ow0KICAgIC0JbGF5b3V0Mi0+YWRkV2lkZ2V0KGVkaXRGaWVsZCk7DQogICAgLQlzZWFyY2hCdXR0
b24gPSBuZXcgUVB1c2hCdXR0b24oIlNlYXJjaCIsIHRoaXMpOw0KICAgIC0Jc2VhcmNoQnV0dG9u
LT5zZXRBdXRvRGVmYXVsdChmYWxzZSk7DQogICAgLQljb25uZWN0KHNlYXJjaEJ1dHRvbiwgU0lH
TkFMKGNsaWNrZWQoKSksIFNMT1Qoc2VhcmNoKCkpKTsNCiAgICAtCWxheW91dDItPmFkZFdpZGdl
dChzZWFyY2hCdXR0b24pOw0KICAgIC0JbGF5b3V0MS0+YWRkTGF5b3V0KGxheW91dDIpOw0KICAg
IC0NCiAgICAtCXNwbGl0ID0gbmV3IFFTcGxpdHRlcih0aGlzKTsNCiAgICAtCXNwbGl0LT5zZXRP
cmllbnRhdGlvbihRdDo6VmVydGljYWwpOw0KICAgIC0JbGlzdCA9IG5ldyBDb25maWdWaWV3KHNw
bGl0LCBuYW1lKTsNCiAgICAtCWxpc3QtPmxpc3QtPm1vZGUgPSBsaXN0TW9kZTsNCiAgICAtCWlu
Zm8gPSBuZXcgQ29uZmlnSW5mb1ZpZXcoc3BsaXQsIG5hbWUpOw0KICAgIC0JY29ubmVjdChsaXN0
LT5saXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0KICAgIC0JCWluZm8s
IFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0JY29ubmVjdChsaXN0LT5saXN0
LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0KICAgIC0JCXBhcmVudCwgU0xP
VChzZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0NCiAgICAtCWxheW91dDEtPmFk
ZFdpZGdldChzcGxpdCk7DQogICAgLQ0KICAgIC0JaWYgKG5hbWUpIHsNCiAgICAtCQlRVmFyaWFu
dCB4LCB5Ow0KICAgIC0JCWludCB3aWR0aCwgaGVpZ2h0Ow0KICAgIC0JCWJvb2wgb2s7DQogICAg
LQ0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUpOw0KICAgIC0JCXdpZHRo
ID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvd2luZG93IHdpZHRoIiwgcGFyZW50LT53aWR0aCgp
IC8gMikudG9JbnQoKTsNCiAgICAtCQloZWlnaHQgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93
aW5kb3cgaGVpZ2h0IiwgcGFyZW50LT5oZWlnaHQoKSAvIDIpLnRvSW50KCk7DQogICAgLQkJcmVz
aXplKHdpZHRoLCBoZWlnaHQpOw0KICAgIC0JCXggPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93
aW5kb3cgeCIpOw0KICAgIC0JCXkgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgeSIp
Ow0KICAgIC0JCWlmICgoeC5pc1ZhbGlkKCkpJiYoeS5pc1ZhbGlkKCkpKQ0KICAgIC0JCQltb3Zl
KHgudG9JbnQoKSwgeS50b0ludCgpKTsNCiAgICAtCQlRTGlzdDxpbnQ+IHNpemVzID0gY29uZmln
U2V0dGluZ3MtPnJlYWRTaXplcygiL3NwbGl0IiwgJm9rKTsNCiAgICAtCQlpZiAob2spDQogICAg
LQkJCXNwbGl0LT5zZXRTaXplcyhzaXplcyk7DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPmVuZEdy
b3VwKCk7DQogICAgLQkJY29ubmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwg
U0xPVChzYXZlU2V0dGluZ3MoKSkpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lk
IENvbmZpZ1NlYXJjaFdpbmRvdzo6c2F2ZVNldHRpbmdzKHZvaWQpDQogICAgLXsNCiAgICAtCWlm
ICghb2JqZWN0TmFtZSgpLmlzRW1wdHkoKSkgew0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5iZWdp
bkdyb3VwKG9iamVjdE5hbWUoKSk7DQogICAgLQkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIv
d2luZG93IHgiLCBwb3MoKS54KCkpOw0KICAgIC0JCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgi
L3dpbmRvdyB5IiwgcG9zKCkueSgpKTsNCiAgICAtCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUo
Ii93aW5kb3cgd2lkdGgiLCBzaXplKCkud2lkdGgoKSk7DQogICAgLQkJY29uZmlnU2V0dGluZ3Mt
PnNldFZhbHVlKCIvd2luZG93IGhlaWdodCIsIHNpemUoKS5oZWlnaHQoKSk7DQogICAgLQkJY29u
ZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxpdCIsIHNwbGl0LT5zaXplcygpKTsNCiAgICAt
CQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAg
ICAtdm9pZCBDb25maWdTZWFyY2hXaW5kb3c6OnNlYXJjaCh2b2lkKQ0KICAgIC17DQogICAgLQlz
dHJ1Y3Qgc3ltYm9sICoqcDsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCUNv
bmZpZ0l0ZW0gKmxhc3RJdGVtID0gTlVMTDsNCiAgICAtDQogICAgLQlmcmVlKHJlc3VsdCk7DQog
ICAgLQlsaXN0LT5saXN0LT5jbGVhcigpOw0KICAgIC0JaW5mby0+Y2xlYXIoKTsNCiAgICAtDQog
ICAgLQlyZXN1bHQgPSBzeW1fcmVfc2VhcmNoKGVkaXRGaWVsZC0+dGV4dCgpLnRvTGF0aW4xKCkp
Ow0KICAgIC0JaWYgKCFyZXN1bHQpDQogICAgLQkJcmV0dXJuOw0KICAgIC0JZm9yIChwID0gcmVz
dWx0OyAqcDsgcCsrKSB7DQogICAgLQkJZm9yX2FsbF9wcm9tcHRzKCgqcCksIHByb3ApDQogICAg
LQkJCWxhc3RJdGVtID0gbmV3IENvbmZpZ0l0ZW0obGlzdC0+bGlzdCwgbGFzdEl0ZW0sIHByb3At
Pm1lbnUsDQogICAgLQkJCQkJCSAgbWVudV9pc192aXNpYmxlKHByb3AtPm1lbnUpKTsNCiAgICAt
CX0NCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogQ29uc3RydWN0IHRoZSBjb21wbGV0
ZSBjb25maWcgd2lkZ2V0DQogICAgLSAqLw0KICAgIC1Db25maWdNYWluV2luZG93OjpDb25maWdN
YWluV2luZG93KHZvaWQpDQogICAgLQk6IHNlYXJjaFdpbmRvdygwKQ0KICAgIC17DQogICAgLQlR
TWVudUJhciogbWVudTsNCiAgICAtCWJvb2wgb2sgPSB0cnVlOw0KICAgIC0JUVZhcmlhbnQgeCwg
eTsNCiAgICAtCWludCB3aWR0aCwgaGVpZ2h0Ow0KICAgIC0JY2hhciB0aXRsZVsyNTZdOw0KICAg
IC0NCiAgICAtCVFEZXNrdG9wV2lkZ2V0ICpkID0gY29uZmlnQXBwLT5kZXNrdG9wKCk7DQogICAg
LQlzbnByaW50Zih0aXRsZSwgc2l6ZW9mKHRpdGxlKSwgIiVzJXMiLA0KICAgIC0JCXJvb3RtZW51
LnByb21wdC0+dGV4dCwNCiAgICAtCQkiIg0KICAgIC0JCSk7DQogICAgLQlzZXRXaW5kb3dUaXRs
ZSh0aXRsZSk7DQogICAgLQ0KICAgIC0Jd2lkdGggPSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93
aW5kb3cgd2lkdGgiLCBkLT53aWR0aCgpIC0gNjQpLnRvSW50KCk7DQogICAgLQloZWlnaHQgPSBj
b25maWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgaGVpZ2h0IiwgZC0+aGVpZ2h0KCkgLSA2NCku
dG9JbnQoKTsNCiAgICAtCXJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsNCiAgICAtCXggPSBjb25maWdT
ZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgeCIpOw0KICAgIC0JeSA9IGNvbmZpZ1NldHRpbmdzLT52
YWx1ZSgiL3dpbmRvdyB5Iik7DQogICAgLQlpZiAoKHguaXNWYWxpZCgpKSYmKHkuaXNWYWxpZCgp
KSkNCiAgICAtCQltb3ZlKHgudG9JbnQoKSwgeS50b0ludCgpKTsNCiAgICAtDQogICAgLQlzcGxp
dDEgPSBuZXcgUVNwbGl0dGVyKHRoaXMpOw0KICAgIC0Jc3BsaXQxLT5zZXRPcmllbnRhdGlvbihR
dDo6SG9yaXpvbnRhbCk7DQogICAgLQlzZXRDZW50cmFsV2lkZ2V0KHNwbGl0MSk7DQogICAgLQ0K
ICAgIC0JbWVudVZpZXcgPSBuZXcgQ29uZmlnVmlldyhzcGxpdDEsICJtZW51Iik7DQogICAgLQlt
ZW51TGlzdCA9IG1lbnVWaWV3LT5saXN0Ow0KICAgIC0NCiAgICAtCXNwbGl0MiA9IG5ldyBRU3Bs
aXR0ZXIoc3BsaXQxKTsNCiAgICAtCXNwbGl0Mi0+c2V0T3JpZW50YXRpb24oUXQ6OlZlcnRpY2Fs
KTsNCiAgICAtDQogICAgLQkvLyBjcmVhdGUgY29uZmlnIHRyZWUNCiAgICAtCWNvbmZpZ1ZpZXcg
PSBuZXcgQ29uZmlnVmlldyhzcGxpdDIsICJjb25maWciKTsNCiAgICAtCWNvbmZpZ0xpc3QgPSBj
b25maWdWaWV3LT5saXN0Ow0KICAgIC0NCiAgICAtCWhlbHBUZXh0ID0gbmV3IENvbmZpZ0luZm9W
aWV3KHNwbGl0MiwgImhlbHAiKTsNCiAgICAtDQogICAgLQlzZXRUYWJPcmRlcihjb25maWdMaXN0
LCBoZWxwVGV4dCk7DQogICAgLQljb25maWdMaXN0LT5zZXRGb2N1cygpOw0KICAgIC0NCiAgICAt
CW1lbnUgPSBtZW51QmFyKCk7DQogICAgLQl0b29sQmFyID0gbmV3IFFUb29sQmFyKCJUb29scyIs
IHRoaXMpOw0KICAgIC0JYWRkVG9vbEJhcih0b29sQmFyKTsNCiAgICAtDQogICAgLQliYWNrQWN0
aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fYmFjayksICJCYWNrIiwgdGhpcyk7DQogICAg
LQkgIGNvbm5lY3QoYmFja0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1QoZ29C
YWNrKCkpKTsNCiAgICAtCSAgYmFja0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7DQogICAgLQlR
QWN0aW9uICpxdWl0QWN0aW9uID0gbmV3IFFBY3Rpb24oIiZRdWl0IiwgdGhpcyk7DQogICAgLQlx
dWl0QWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfUSk7DQogICAgLQkgIGNv
bm5lY3QocXVpdEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1QoY2xvc2UoKSkp
Ow0KICAgIC0JUUFjdGlvbiAqbG9hZEFjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX2xv
YWQpLCAiJkxvYWQiLCB0aGlzKTsNCiAgICAtCWxvYWRBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpD
VFJMICsgUXQ6OktleV9MKTsNCiAgICAtCSAgY29ubmVjdChsb2FkQWN0aW9uLCBTSUdOQUwodHJp
Z2dlcmVkKGJvb2wpKSwgU0xPVChsb2FkQ29uZmlnKCkpKTsNCiAgICAtCXNhdmVBY3Rpb24gPSBu
ZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9zYXZlKSwgIiZTYXZlIiwgdGhpcyk7DQogICAgLQlzYXZl
QWN0aW9uLT5zZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfUyk7DQogICAgLQkgIGNvbm5l
Y3Qoc2F2ZUFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2F2ZUNvbmZpZygp
KSk7DQogICAgLQljb25mX3NldF9jaGFuZ2VkX2NhbGxiYWNrKGNvbmZfY2hhbmdlZCk7DQogICAg
LQkvLyBTZXQgc2F2ZUFjdGlvbidzIGluaXRpYWwgc3RhdGUNCiAgICAtCWNvbmZfY2hhbmdlZCgp
Ow0KICAgIC0JY29uZmlnbmFtZSA9IHhzdHJkdXAoY29uZl9nZXRfY29uZmlnbmFtZSgpKTsNCiAg
ICAtDQogICAgLQlRQWN0aW9uICpzYXZlQXNBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2F2ZSAmQXMu
Li4iLCB0aGlzKTsNCiAgICAtCSAgY29ubmVjdChzYXZlQXNBY3Rpb24sIFNJR05BTCh0cmlnZ2Vy
ZWQoYm9vbCkpLCBTTE9UKHNhdmVDb25maWdBcygpKSk7DQogICAgLQlRQWN0aW9uICpzZWFyY2hB
Y3Rpb24gPSBuZXcgUUFjdGlvbigiJkZpbmQiLCB0aGlzKTsNCiAgICAtCXNlYXJjaEFjdGlvbi0+
c2V0U2hvcnRjdXQoUXQ6OkNUUkwgKyBRdDo6S2V5X0YpOw0KICAgIC0JICBjb25uZWN0KHNlYXJj
aEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2VhcmNoQ29uZmlnKCkpKTsN
CiAgICAtCXNpbmdsZVZpZXdBY3Rpb24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9zaW5nbGVf
dmlldyksICJTaW5nbGUgVmlldyIsIHRoaXMpOw0KICAgIC0Jc2luZ2xlVmlld0FjdGlvbi0+c2V0
Q2hlY2thYmxlKHRydWUpOw0KICAgIC0JICBjb25uZWN0KHNpbmdsZVZpZXdBY3Rpb24sIFNJR05B
TCh0cmlnZ2VyZWQoYm9vbCkpLCBTTE9UKHNob3dTaW5nbGVWaWV3KCkpKTsNCiAgICAtCXNwbGl0
Vmlld0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NwbGl0X3ZpZXcpLCAiU3BsaXQg
VmlldyIsIHRoaXMpOw0KICAgIC0Jc3BsaXRWaWV3QWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7
DQogICAgLQkgIGNvbm5lY3Qoc3BsaXRWaWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wp
KSwgU0xPVChzaG93U3BsaXRWaWV3KCkpKTsNCiAgICAtCWZ1bGxWaWV3QWN0aW9uID0gbmV3IFFB
Y3Rpb24oUVBpeG1hcCh4cG1fdHJlZV92aWV3KSwgIkZ1bGwgVmlldyIsIHRoaXMpOw0KICAgIC0J
ZnVsbFZpZXdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAgICAtCSAgY29ubmVjdChmdWxs
Vmlld0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd0Z1bGxWaWV3KCkp
KTsNCiAgICAtDQogICAgLQlRQWN0aW9uICpzaG93TmFtZUFjdGlvbiA9IG5ldyBRQWN0aW9uKCJT
aG93IE5hbWUiLCB0aGlzKTsNCiAgICAtCSAgc2hvd05hbWVBY3Rpb24tPnNldENoZWNrYWJsZSh0
cnVlKTsNCiAgICAtCSAgY29ubmVjdChzaG93TmFtZUFjdGlvbiwgU0lHTkFMKHRvZ2dsZWQoYm9v
bCkpLCBjb25maWdWaWV3LCBTTE9UKHNldFNob3dOYW1lKGJvb2wpKSk7DQogICAgLQkgIHNob3dO
YW1lQWN0aW9uLT5zZXRDaGVja2VkKGNvbmZpZ1ZpZXctPnNob3dOYW1lKCkpOw0KICAgIC0JUUFj
dGlvbiAqc2hvd1JhbmdlQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgUmFuZ2UiLCB0aGlzKTsN
CiAgICAtCSAgc2hvd1JhbmdlQWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7DQogICAgLQkgIGNv
bm5lY3Qoc2hvd1JhbmdlQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksIGNvbmZpZ1ZpZXcs
IFNMT1Qoc2V0U2hvd1JhbmdlKGJvb2wpKSk7DQogICAgLQlRQWN0aW9uICpzaG93RGF0YUFjdGlv
biA9IG5ldyBRQWN0aW9uKCJTaG93IERhdGEiLCB0aGlzKTsNCiAgICAtCSAgc2hvd0RhdGFBY3Rp
b24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAgICAtCSAgY29ubmVjdChzaG93RGF0YUFjdGlvbiwg
U0lHTkFMKHRvZ2dsZWQoYm9vbCkpLCBjb25maWdWaWV3LCBTTE9UKHNldFNob3dEYXRhKGJvb2wp
KSk7DQogICAgLQ0KICAgIC0JUUFjdGlvbkdyb3VwICpvcHRHcm91cCA9IG5ldyBRQWN0aW9uR3Jv
dXAodGhpcyk7DQogICAgLQlvcHRHcm91cC0+c2V0RXhjbHVzaXZlKHRydWUpOw0KICAgIC0JY29u
bmVjdChvcHRHcm91cCwgU0lHTkFMKHRyaWdnZXJlZChRQWN0aW9uKikpLCBjb25maWdWaWV3LA0K
ICAgIC0JCVNMT1Qoc2V0T3B0aW9uTW9kZShRQWN0aW9uICopKSk7DQogICAgLQljb25uZWN0KG9w
dEdyb3VwLCBTSUdOQUwodHJpZ2dlcmVkKFFBY3Rpb24gKikpLCBtZW51VmlldywNCiAgICAtCQlT
TE9UKHNldE9wdGlvbk1vZGUoUUFjdGlvbiAqKSkpOw0KICAgIC0NCiAgICAtCWNvbmZpZ1ZpZXct
PnNob3dOb3JtYWxBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBOb3JtYWwgT3B0aW9ucyIsIG9w
dEdyb3VwKTsNCiAgICAtCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24gPSBuZXcgUUFjdGlvbigi
U2hvdyBBbGwgT3B0aW9ucyIsIG9wdEdyb3VwKTsNCiAgICAtCWNvbmZpZ1ZpZXctPnNob3dQcm9t
cHRBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBQcm9tcHQgT3B0aW9ucyIsIG9wdEdyb3VwKTsN
CiAgICAtCWNvbmZpZ1ZpZXctPnNob3dOb3JtYWxBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsN
CiAgICAtCWNvbmZpZ1ZpZXctPnNob3dBbGxBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAg
ICAtCWNvbmZpZ1ZpZXctPnNob3dQcm9tcHRBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAg
ICAtDQogICAgLQlRQWN0aW9uICpzaG93RGVidWdBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBE
ZWJ1ZyBJbmZvIiwgdGhpcyk7DQogICAgLQkgIHNob3dEZWJ1Z0FjdGlvbi0+c2V0Q2hlY2thYmxl
KHRydWUpOw0KICAgIC0JICBjb25uZWN0KHNob3dEZWJ1Z0FjdGlvbiwgU0lHTkFMKHRvZ2dsZWQo
Ym9vbCkpLCBoZWxwVGV4dCwgU0xPVChzZXRTaG93RGVidWcoYm9vbCkpKTsNCiAgICAtCSAgc2hv
d0RlYnVnQWN0aW9uLT5zZXRDaGVja2VkKGhlbHBUZXh0LT5zaG93RGVidWcoKSk7DQogICAgLQ0K
ICAgIC0JUUFjdGlvbiAqc2hvd0ludHJvQWN0aW9uID0gbmV3IFFBY3Rpb24oIkludHJvZHVjdGlv
biIsIHRoaXMpOw0KICAgIC0JICBjb25uZWN0KHNob3dJbnRyb0FjdGlvbiwgU0lHTkFMKHRyaWdn
ZXJlZChib29sKSksIFNMT1Qoc2hvd0ludHJvKCkpKTsNCiAgICAtCVFBY3Rpb24gKnNob3dBYm91
dEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJBYm91dCIsIHRoaXMpOw0KICAgIC0JICBjb25uZWN0KHNo
b3dBYm91dEFjdGlvbiwgU0lHTkFMKHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd0Fib3V0KCkp
KTsNCiAgICAtDQogICAgLQkvLyBpbml0IHRvb2wgYmFyDQogICAgLQl0b29sQmFyLT5hZGRBY3Rp
b24oYmFja0FjdGlvbik7DQogICAgLQl0b29sQmFyLT5hZGRTZXBhcmF0b3IoKTsNCiAgICAtCXRv
b2xCYXItPmFkZEFjdGlvbihsb2FkQWN0aW9uKTsNCiAgICAtCXRvb2xCYXItPmFkZEFjdGlvbihz
YXZlQWN0aW9uKTsNCiAgICAtCXRvb2xCYXItPmFkZFNlcGFyYXRvcigpOw0KICAgIC0JdG9vbEJh
ci0+YWRkQWN0aW9uKHNpbmdsZVZpZXdBY3Rpb24pOw0KICAgIC0JdG9vbEJhci0+YWRkQWN0aW9u
KHNwbGl0Vmlld0FjdGlvbik7DQogICAgLQl0b29sQmFyLT5hZGRBY3Rpb24oZnVsbFZpZXdBY3Rp
b24pOw0KICAgIC0NCiAgICAtCS8vIGNyZWF0ZSBjb25maWcgbWVudQ0KICAgIC0JUU1lbnUqIGNv
bmZpZyA9IG1lbnUtPmFkZE1lbnUoIiZGaWxlIik7DQogICAgLQljb25maWctPmFkZEFjdGlvbihs
b2FkQWN0aW9uKTsNCiAgICAtCWNvbmZpZy0+YWRkQWN0aW9uKHNhdmVBY3Rpb24pOw0KICAgIC0J
Y29uZmlnLT5hZGRBY3Rpb24oc2F2ZUFzQWN0aW9uKTsNCiAgICAtCWNvbmZpZy0+YWRkU2VwYXJh
dG9yKCk7DQogICAgLQljb25maWctPmFkZEFjdGlvbihxdWl0QWN0aW9uKTsNCiAgICAtDQogICAg
LQkvLyBjcmVhdGUgZWRpdCBtZW51DQogICAgLQlRTWVudSogZWRpdE1lbnUgPSBtZW51LT5hZGRN
ZW51KCImRWRpdCIpOw0KICAgIC0JZWRpdE1lbnUtPmFkZEFjdGlvbihzZWFyY2hBY3Rpb24pOw0K
ICAgIC0NCiAgICAtCS8vIGNyZWF0ZSBvcHRpb25zIG1lbnUNCiAgICAtCVFNZW51KiBvcHRpb25N
ZW51ID0gbWVudS0+YWRkTWVudSgiJk9wdGlvbiIpOw0KICAgIC0Jb3B0aW9uTWVudS0+YWRkQWN0
aW9uKHNob3dOYW1lQWN0aW9uKTsNCiAgICAtCW9wdGlvbk1lbnUtPmFkZEFjdGlvbihzaG93UmFu
Z2VBY3Rpb24pOw0KICAgIC0Jb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dEYXRhQWN0aW9uKTsN
CiAgICAtCW9wdGlvbk1lbnUtPmFkZFNlcGFyYXRvcigpOw0KICAgIC0Jb3B0aW9uTWVudS0+YWRk
QWN0aW9ucyhvcHRHcm91cC0+YWN0aW9ucygpKTsNCiAgICAtCW9wdGlvbk1lbnUtPmFkZFNlcGFy
YXRvcigpOw0KICAgIC0Jb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dEZWJ1Z0FjdGlvbik7DQog
ICAgLQ0KICAgIC0JLy8gY3JlYXRlIGhlbHAgbWVudQ0KICAgIC0JbWVudS0+YWRkU2VwYXJhdG9y
KCk7DQogICAgLQlRTWVudSogaGVscE1lbnUgPSBtZW51LT5hZGRNZW51KCImSGVscCIpOw0KICAg
IC0JaGVscE1lbnUtPmFkZEFjdGlvbihzaG93SW50cm9BY3Rpb24pOw0KICAgIC0JaGVscE1lbnUt
PmFkZEFjdGlvbihzaG93QWJvdXRBY3Rpb24pOw0KICAgIC0NCiAgICAtCWNvbm5lY3QoY29uZmln
TGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwNCiAgICAtCQloZWxwVGV4
dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgLQljb25uZWN0KGNvbmZpZ0xp
c3QsIFNJR05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLA0KICAgIC0JCVNMT1QoY2hh
bmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0JY29ubmVjdChjb25maWdMaXN0LCBTSUdO
QUwocGFyZW50U2VsZWN0ZWQoKSksDQogICAgLQkJU0xPVChnb0JhY2soKSkpOw0KICAgIC0JY29u
bmVjdChtZW51TGlzdCwgU0lHTkFMKG1lbnVDaGFuZ2VkKHN0cnVjdCBtZW51ICopKSwNCiAgICAt
CQloZWxwVGV4dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgLQljb25uZWN0
KG1lbnVMaXN0LCBTSUdOQUwobWVudVNlbGVjdGVkKHN0cnVjdCBtZW51ICopKSwNCiAgICAtCQlT
TE9UKGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKikpKTsNCiAgICAtDQogICAgLQljb25uZWN0KGNv
bmZpZ0xpc3QsIFNJR05BTChnb3RGb2N1cyhzdHJ1Y3QgbWVudSAqKSksDQogICAgLQkJaGVscFRl
eHQsIFNMT1Qoc2V0SW5mbyhzdHJ1Y3QgbWVudSAqKSkpOw0KICAgIC0JY29ubmVjdChtZW51TGlz
dCwgU0lHTkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwNCiAgICAtCQloZWxwVGV4dCwgU0xP
VChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgLQljb25uZWN0KG1lbnVMaXN0LCBTSUdO
QUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLA0KICAgIC0JCVNMT1QobGlzdEZvY3VzQ2hhbmdl
ZCh2b2lkKSkpOw0KICAgIC0JY29ubmVjdChoZWxwVGV4dCwgU0lHTkFMKG1lbnVTZWxlY3RlZChz
dHJ1Y3QgbWVudSAqKSksDQogICAgLQkJU0xPVChzZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqKSkp
Ow0KICAgIC0NCiAgICAtCVFTdHJpbmcgbGlzdE1vZGUgPSBjb25maWdTZXR0aW5ncy0+dmFsdWUo
Ii9saXN0TW9kZSIsICJzeW1ib2wiKS50b1N0cmluZygpOw0KICAgIC0JaWYgKGxpc3RNb2RlID09
ICJzaW5nbGUiKQ0KICAgIC0JCXNob3dTaW5nbGVWaWV3KCk7DQogICAgLQllbHNlIGlmIChsaXN0
TW9kZSA9PSAiZnVsbCIpDQogICAgLQkJc2hvd0Z1bGxWaWV3KCk7DQogICAgLQllbHNlIC8qaWYg
KGxpc3RNb2RlID09ICJzcGxpdCIpKi8NCiAgICAtCQlzaG93U3BsaXRWaWV3KCk7DQogICAgLQ0K
ICAgIC0JLy8gVUkgc2V0dXAgZG9uZSwgcmVzdG9yZSBzcGxpdHRlciBwb3NpdGlvbnMNCiAgICAt
CVFMaXN0PGludD4gc2l6ZXMgPSBjb25maWdTZXR0aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQxIiwg
Jm9rKTsNCiAgICAtCWlmIChvaykNCiAgICAtCQlzcGxpdDEtPnNldFNpemVzKHNpemVzKTsNCiAg
ICAtDQogICAgLQlzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxpdDIiLCAm
b2spOw0KICAgIC0JaWYgKG9rKQ0KICAgIC0JCXNwbGl0Mi0+c2V0U2l6ZXMoc2l6ZXMpOw0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6OmxvYWRDb25maWcodm9pZCkN
CiAgICAtew0KICAgIC0JUVN0cmluZyBzdHI7DQogICAgLQlRQnl0ZUFycmF5IGJhOw0KICAgIC0J
Y29uc3QgY2hhciAqbmFtZTsNCiAgICAtDQogICAgLQlzdHIgPSBRRmlsZURpYWxvZzo6Z2V0T3Bl
bkZpbGVOYW1lKHRoaXMsICIiLCBjb25maWduYW1lKTsNCiAgICAtCWlmIChzdHIuaXNOdWxsKCkp
DQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCWJhID0gc3RyLnRvTG9jYWw4Qml0KCk7DQog
ICAgLQluYW1lID0gYmEuZGF0YSgpOw0KICAgIC0NCiAgICAtCWlmIChjb25mX3JlYWQobmFtZSkp
DQogICAgLQkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsICJVbmFibGUg
dG8gbG9hZCBjb25maWd1cmF0aW9uISIpOw0KICAgIC0NCiAgICAtCWZyZWUoY29uZmlnbmFtZSk7
DQogICAgLQljb25maWduYW1lID0geHN0cmR1cChuYW1lKTsNCiAgICAtDQogICAgLQlDb25maWdW
aWV3Ojp1cGRhdGVMaXN0QWxsKCk7DQogICAgLX0NCiAgICAtDQogICAgLWJvb2wgQ29uZmlnTWFp
bldpbmRvdzo6c2F2ZUNvbmZpZyh2b2lkKQ0KICAgIC17DQogICAgLQlpZiAoY29uZl93cml0ZShj
b25maWduYW1lKSkgew0KICAgIC0JCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCAicWNv
bmYiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiEiKTsNCiAgICAtCQlyZXR1cm4gZmFs
c2U7DQogICAgLQl9DQogICAgLQljb25mX3dyaXRlX2F1dG9jb25mKDApOw0KICAgIC0NCiAgICAt
CXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6
OnNhdmVDb25maWdBcyh2b2lkKQ0KICAgIC17DQogICAgLQlRU3RyaW5nIHN0cjsNCiAgICAtCVFC
eXRlQXJyYXkgYmE7DQogICAgLQljb25zdCBjaGFyICpuYW1lOw0KICAgIC0NCiAgICAtCXN0ciA9
IFFGaWxlRGlhbG9nOjpnZXRTYXZlRmlsZU5hbWUodGhpcywgIiIsIGNvbmZpZ25hbWUpOw0KICAg
IC0JaWYgKHN0ci5pc051bGwoKSkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0JYmEgPSBz
dHIudG9Mb2NhbDhCaXQoKTsNCiAgICAtCW5hbWUgPSBiYS5kYXRhKCk7DQogICAgLQ0KICAgIC0J
aWYgKGNvbmZfd3JpdGUobmFtZSkpIHsNCiAgICAtCQlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24o
dGhpcywgInFjb25mIiwgIlVuYWJsZSB0byBzYXZlIGNvbmZpZ3VyYXRpb24hIik7DQogICAgLQl9
DQogICAgLQljb25mX3dyaXRlX2F1dG9jb25mKDApOw0KICAgIC0NCiAgICAtCWZyZWUoY29uZmln
bmFtZSk7DQogICAgLQljb25maWduYW1lID0geHN0cmR1cChuYW1lKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtdm9pZCBDb25maWdNYWluV2luZG93OjpzZWFyY2hDb25maWcodm9pZCkNCiAgICAtew0K
ICAgIC0JaWYgKCFzZWFyY2hXaW5kb3cpDQogICAgLQkJc2VhcmNoV2luZG93ID0gbmV3IENvbmZp
Z1NlYXJjaFdpbmRvdyh0aGlzLCAic2VhcmNoIik7DQogICAgLQlzZWFyY2hXaW5kb3ctPnNob3co
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBDb25maWdNYWluV2luZG93OjpjaGFuZ2VNZW51
KHN0cnVjdCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQljb25maWdMaXN0LT5zZXRSb290TWVu
dShtZW51KTsNCiAgICAtCWlmIChjb25maWdMaXN0LT5yb290RW50cnktPnBhcmVudCA9PSAmcm9v
dG1lbnUpDQogICAgLQkJYmFja0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7DQogICAgLQllbHNl
DQogICAgLQkJYmFja0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtdm9pZCBDb25maWdNYWluV2luZG93OjpzZXRNZW51TGluayhzdHJ1Y3QgbWVudSAqbWVudSkN
CiAgICAtew0KICAgIC0Jc3RydWN0IG1lbnUgKnBhcmVudDsNCiAgICAtCUNvbmZpZ0xpc3QqIGxp
c3QgPSBOVUxMOw0KICAgIC0JQ29uZmlnSXRlbSogaXRlbTsNCiAgICAtDQogICAgLQlpZiAoY29u
ZmlnTGlzdC0+bWVudVNraXAobWVudSkpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCXN3
aXRjaCAoY29uZmlnTGlzdC0+bW9kZSkgew0KICAgIC0JY2FzZSBzaW5nbGVNb2RlOg0KICAgIC0J
CWxpc3QgPSBjb25maWdMaXN0Ow0KICAgIC0JCXBhcmVudCA9IG1lbnVfZ2V0X3BhcmVudF9tZW51
KG1lbnUpOw0KICAgIC0JCWlmICghcGFyZW50KQ0KICAgIC0JCQlyZXR1cm47DQogICAgLQkJbGlz
dC0+c2V0Um9vdE1lbnUocGFyZW50KTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2Ugc3ltYm9s
TW9kZToNCiAgICAtCQlpZiAobWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpIHsNCiAgICAtCQkJY29u
ZmlnTGlzdC0+c2V0Um9vdE1lbnUobWVudSk7DQogICAgLQkJCWNvbmZpZ0xpc3QtPmNsZWFyU2Vs
ZWN0aW9uKCk7DQogICAgLQkJCWxpc3QgPSBtZW51TGlzdDsNCiAgICAtCQl9IGVsc2Ugew0KICAg
IC0JCQlsaXN0ID0gY29uZmlnTGlzdDsNCiAgICAtCQkJcGFyZW50ID0gbWVudV9nZXRfcGFyZW50
X21lbnUobWVudS0+cGFyZW50KTsNCiAgICAtCQkJaWYgKCFwYXJlbnQpDQogICAgLQkJCQlyZXR1
cm47DQogICAgLQkJCWl0ZW0gPSBtZW51TGlzdC0+ZmluZENvbmZpZ0l0ZW0ocGFyZW50KTsNCiAg
ICAtCQkJaWYgKGl0ZW0pIHsNCiAgICAtCQkJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOw0KICAg
IC0JCQkJbWVudUxpc3QtPnNjcm9sbFRvSXRlbShpdGVtKTsNCiAgICAtCQkJfQ0KICAgIC0JCQls
aXN0LT5zZXRSb290TWVudShwYXJlbnQpOw0KICAgIC0JCX0NCiAgICAtCQlicmVhazsNCiAgICAt
CWNhc2UgZnVsbE1vZGU6DQogICAgLQkJbGlzdCA9IGNvbmZpZ0xpc3Q7DQogICAgLQkJYnJlYWs7
DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlm
IChsaXN0KSB7DQogICAgLQkJaXRlbSA9IGxpc3QtPmZpbmRDb25maWdJdGVtKG1lbnUpOw0KICAg
IC0JCWlmIChpdGVtKSB7DQogICAgLQkJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOw0KICAgIC0J
CQlsaXN0LT5zY3JvbGxUb0l0ZW0oaXRlbSk7DQogICAgLQkJCWxpc3QtPnNldEZvY3VzKCk7DQog
ICAgLQkJfQ0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5k
b3c6Omxpc3RGb2N1c0NoYW5nZWQodm9pZCkNCiAgICAtew0KICAgIC0JaWYgKG1lbnVMaXN0LT5t
b2RlID09IG1lbnVNb2RlKQ0KICAgIC0JCWNvbmZpZ0xpc3QtPmNsZWFyU2VsZWN0aW9uKCk7DQog
ICAgLX0NCiAgICAtDQogICAgLXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6Z29CYWNrKHZvaWQpDQog
ICAgLXsNCiAgICAtCUNvbmZpZ0l0ZW0qIGl0ZW0sICpvbGRTZWxlY3Rpb247DQogICAgLQ0KICAg
IC0JY29uZmlnTGlzdC0+c2V0UGFyZW50TWVudSgpOw0KICAgIC0JaWYgKGNvbmZpZ0xpc3QtPnJv
b3RFbnRyeSA9PSAmcm9vdG1lbnUpDQogICAgLQkJYmFja0FjdGlvbi0+c2V0RW5hYmxlZChmYWxz
ZSk7DQogICAgLQ0KICAgIC0JaWYgKG1lbnVMaXN0LT5zZWxlY3RlZEl0ZW1zKCkuY291bnQoKSA9
PSAwKQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlpdGVtID0gKENvbmZpZ0l0ZW0qKW1l
bnVMaXN0LT5zZWxlY3RlZEl0ZW1zKCkuZmlyc3QoKTsNCiAgICAtCW9sZFNlbGVjdGlvbiA9IGl0
ZW07DQogICAgLQl3aGlsZSAoaXRlbSkgew0KICAgIC0JCWlmIChpdGVtLT5tZW51ID09IGNvbmZp
Z0xpc3QtPnJvb3RFbnRyeSkgew0KICAgIC0JCQlvbGRTZWxlY3Rpb24tPnNldFNlbGVjdGVkKGZh
bHNlKTsNCiAgICAtCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7DQogICAgLQkJCWJyZWFrOw0K
ICAgIC0JCX0NCiAgICAtCQlpdGVtID0gKENvbmZpZ0l0ZW0qKWl0ZW0tPnBhcmVudCgpOw0KICAg
IC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dTaW5n
bGVWaWV3KHZvaWQpDQogICAgLXsNCiAgICAtCXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQo
ZmFsc2UpOw0KICAgIC0Jc2luZ2xlVmlld0FjdGlvbi0+c2V0Q2hlY2tlZCh0cnVlKTsNCiAgICAt
CXNwbGl0Vmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsNCiAgICAtCXNwbGl0Vmlld0FjdGlv
bi0+c2V0Q2hlY2tlZChmYWxzZSk7DQogICAgLQlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0
cnVlKTsNCiAgICAtCWZ1bGxWaWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICAtDQog
ICAgLQltZW51Vmlldy0+aGlkZSgpOw0KICAgIC0JbWVudUxpc3QtPnNldFJvb3RNZW51KDApOw0K
ICAgIC0JY29uZmlnTGlzdC0+bW9kZSA9IHNpbmdsZU1vZGU7DQogICAgLQlpZiAoY29uZmlnTGlz
dC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkNCiAgICAtCQljb25maWdMaXN0LT51cGRhdGVMaXN0
QWxsKCk7DQogICAgLQllbHNlDQogICAgLQkJY29uZmlnTGlzdC0+c2V0Um9vdE1lbnUoJnJvb3Rt
ZW51KTsNCiAgICAtCWNvbmZpZ0xpc3QtPnNldEZvY3VzKCk7DQogICAgLX0NCiAgICAtDQogICAg
LXZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd1NwbGl0Vmlldyh2b2lkKQ0KICAgIC17DQogICAg
LQlzaW5nbGVWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOw0KICAgIC0Jc2luZ2xlVmlld0Fj
dGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7DQogICAgLQlzcGxpdFZpZXdBY3Rpb24tPnNldEVuYWJs
ZWQoZmFsc2UpOw0KICAgIC0Jc3BsaXRWaWV3QWN0aW9uLT5zZXRDaGVja2VkKHRydWUpOw0KICAg
IC0JZnVsbFZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7DQogICAgLQlmdWxsVmlld0FjdGlv
bi0+c2V0Q2hlY2tlZChmYWxzZSk7DQogICAgLQ0KICAgIC0JY29uZmlnTGlzdC0+bW9kZSA9IHN5
bWJvbE1vZGU7DQogICAgLQlpZiAoY29uZmlnTGlzdC0+cm9vdEVudHJ5ID09ICZyb290bWVudSkN
CiAgICAtCQljb25maWdMaXN0LT51cGRhdGVMaXN0QWxsKCk7DQogICAgLQllbHNlDQogICAgLQkJ
Y29uZmlnTGlzdC0+c2V0Um9vdE1lbnUoJnJvb3RtZW51KTsNCiAgICAtCWNvbmZpZ0xpc3QtPnNl
dEFsbE9wZW4odHJ1ZSk7DQogICAgLQljb25maWdBcHAtPnByb2Nlc3NFdmVudHMoKTsNCiAgICAt
CW1lbnVMaXN0LT5tb2RlID0gbWVudU1vZGU7DQogICAgLQltZW51TGlzdC0+c2V0Um9vdE1lbnUo
JnJvb3RtZW51KTsNCiAgICAtCW1lbnVMaXN0LT5zZXRBbGxPcGVuKHRydWUpOw0KICAgIC0JbWVu
dVZpZXctPnNob3coKTsNCiAgICAtCW1lbnVMaXN0LT5zZXRGb2N1cygpOw0KICAgIC19DQogICAg
LQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dGdWxsVmlldyh2b2lkKQ0KICAgIC17
DQogICAgLQlzaW5nbGVWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOw0KICAgIC0Jc2luZ2xl
Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7DQogICAgLQlzcGxpdFZpZXdBY3Rpb24tPnNl
dEVuYWJsZWQodHJ1ZSk7DQogICAgLQlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2Up
Ow0KICAgIC0JZnVsbFZpZXdBY3Rpb24tPnNldEVuYWJsZWQoZmFsc2UpOw0KICAgIC0JZnVsbFZp
ZXdBY3Rpb24tPnNldENoZWNrZWQodHJ1ZSk7DQogICAgLQ0KICAgIC0JbWVudVZpZXctPmhpZGUo
KTsNCiAgICAtCW1lbnVMaXN0LT5zZXRSb290TWVudSgwKTsNCiAgICAtCWNvbmZpZ0xpc3QtPm1v
ZGUgPSBmdWxsTW9kZTsNCiAgICAtCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3Rt
ZW51KQ0KICAgIC0JCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwoKTsNCiAgICAtCWVsc2UNCiAg
ICAtCQljb25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOw0KICAgIC0JY29uZmlnTGlz
dC0+c2V0Rm9jdXMoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogYXNrIGZvciBz
YXZpbmcgY29uZmlndXJhdGlvbiBiZWZvcmUgcXVpdHRpbmcNCiAgICAtICogVE9ETyBhc2sgb25s
eSB3aGVuIHNvbWV0aGluZyBjaGFuZ2VkDQogICAgLSAqLw0KICAgIC12b2lkIENvbmZpZ01haW5X
aW5kb3c6OmNsb3NlRXZlbnQoUUNsb3NlRXZlbnQqIGUpDQogICAgLXsNCiAgICAtCWlmICghY29u
Zl9nZXRfY2hhbmdlZCgpKSB7DQogICAgLQkJZS0+YWNjZXB0KCk7DQogICAgLQkJcmV0dXJuOw0K
ICAgIC0JfQ0KICAgIC0JUU1lc3NhZ2VCb3ggbWIoInFjb25mIiwgIlNhdmUgY29uZmlndXJhdGlv
bj8iLCBRTWVzc2FnZUJveDo6V2FybmluZywNCiAgICAtCQkJUU1lc3NhZ2VCb3g6OlllcyB8IFFN
ZXNzYWdlQm94OjpEZWZhdWx0LCBRTWVzc2FnZUJveDo6Tm8sIFFNZXNzYWdlQm94OjpDYW5jZWwg
fCBRTWVzc2FnZUJveDo6RXNjYXBlKTsNCiAgICAtCW1iLnNldEJ1dHRvblRleHQoUU1lc3NhZ2VC
b3g6OlllcywgIiZTYXZlIENoYW5nZXMiKTsNCiAgICAtCW1iLnNldEJ1dHRvblRleHQoUU1lc3Nh
Z2VCb3g6Ok5vLCAiJkRpc2NhcmQgQ2hhbmdlcyIpOw0KICAgIC0JbWIuc2V0QnV0dG9uVGV4dChR
TWVzc2FnZUJveDo6Q2FuY2VsLCAiQ2FuY2VsIEV4aXQiKTsNCiAgICAtCXN3aXRjaCAobWIuZXhl
YygpKSB7DQogICAgLQljYXNlIFFNZXNzYWdlQm94OjpZZXM6DQogICAgLQkJaWYgKHNhdmVDb25m
aWcoKSkNCiAgICAtCQkJZS0+YWNjZXB0KCk7DQogICAgLQkJZWxzZQ0KICAgIC0JCQllLT5pZ25v
cmUoKTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgUU1lc3NhZ2VCb3g6Ok5vOg0KICAgIC0J
CWUtPmFjY2VwdCgpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBRTWVzc2FnZUJveDo6Q2Fu
Y2VsOg0KICAgIC0JCWUtPmlnbm9yZSgpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JfQ0KICAgIC19
DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dJbnRybyh2b2lkKQ0KICAg
IC17DQogICAgLQlzdGF0aWMgY29uc3QgUVN0cmluZyBzdHIgPSAiV2VsY29tZSB0byB0aGUgcWNv
bmYgZ3JhcGhpY2FsIGNvbmZpZ3VyYXRpb24gdG9vbC5cblxuIg0KICAgIC0JCSJGb3IgZWFjaCBv
cHRpb24sIGEgYmxhbmsgYm94IGluZGljYXRlcyB0aGUgZmVhdHVyZSBpcyBkaXNhYmxlZCwgYSBj
aGVja1xuIg0KICAgIC0JCSJpbmRpY2F0ZXMgaXQgaXMgZW5hYmxlZCwgYW5kIGEgZG90IGluZGlj
YXRlcyB0aGF0IGl0IGlzIHRvIGJlIGNvbXBpbGVkXG4iDQogICAgLQkJImFzIGEgbW9kdWxlLiAg
Q2xpY2tpbmcgb24gdGhlIGJveCB3aWxsIGN5Y2xlIHRocm91Z2ggdGhlIHRocmVlIHN0YXRlcy5c
blxuIg0KICAgIC0JCSJJZiB5b3UgZG8gbm90IHNlZSBhbiBvcHRpb24gKGUuZy4sIGEgZGV2aWNl
IGRyaXZlcikgdGhhdCB5b3UgYmVsaWV2ZVxuIg0KICAgIC0JCSJzaG91bGQgYmUgcHJlc2VudCwg
dHJ5IHR1cm5pbmcgb24gU2hvdyBBbGwgT3B0aW9ucyB1bmRlciB0aGUgT3B0aW9ucyBtZW51Llxu
Ig0KICAgIC0JCSJBbHRob3VnaCB0aGVyZSBpcyBubyBjcm9zcyByZWZlcmVuY2UgeWV0IHRvIGhl
bHAgeW91IGZpZ3VyZSBvdXQgd2hhdCBvdGhlclxuIg0KICAgIC0JCSJvcHRpb25zIG11c3QgYmUg
ZW5hYmxlZCB0byBzdXBwb3J0IHRoZSBvcHRpb24geW91IGFyZSBpbnRlcmVzdGVkIGluLCB5b3Ug
Y2FuXG4iDQogICAgLQkJInN0aWxsIHZpZXcgdGhlIGhlbHAgb2YgYSBncmF5ZWQtb3V0IG9wdGlv
bi5cblxuIg0KICAgIC0JCSJUb2dnbGluZyBTaG93IERlYnVnIEluZm8gdW5kZXIgdGhlIE9wdGlv
bnMgbWVudSB3aWxsIHNob3cgdGhlIGRlcGVuZGVuY2llcyxcbiINCiAgICAtCQkid2hpY2ggeW91
IGNhbiB0aGVuIG1hdGNoIGJ5IGV4YW1pbmluZyBvdGhlciBvcHRpb25zLlxuXG4iOw0KICAgIC0N
CiAgICAtCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCAicWNvbmYiLCBzdHIpOw0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6OnNob3dBYm91dCh2b2lkKQ0K
ICAgIC17DQogICAgLQlzdGF0aWMgY29uc3QgUVN0cmluZyBzdHIgPSAicWNvbmYgaXMgQ29weXJp
Z2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPi5cbiINCiAg
ICAtCQkiQ29weXJpZ2h0IChDKSAyMDE1IEJvcmlzIEJhcmJ1bG92c2tpIDxiYmFyYnVsb3Zza2lA
Z21haWwuY29tPi5cblxuIg0KICAgIC0JCSJCdWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0
IGNhbiBhbHNvIGJlIGVudGVyZWQgYXQgaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcvXG4iOw0K
ICAgIC0NCiAgICAtCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlzLCAicWNvbmYiLCBzdHIp
Ow0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZpZ01haW5XaW5kb3c6OnNhdmVTZXR0aW5n
cyh2b2lkKQ0KICAgIC17DQogICAgLQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cg
eCIsIHBvcygpLngoKSk7DQogICAgLQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cg
eSIsIHBvcygpLnkoKSk7DQogICAgLQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93aW5kb3cg
d2lkdGgiLCBzaXplKCkud2lkdGgoKSk7DQogICAgLQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUo
Ii93aW5kb3cgaGVpZ2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsNCiAgICAtDQogICAgLQlRU3RyaW5n
IGVudHJ5Ow0KICAgIC0Jc3dpdGNoKGNvbmZpZ0xpc3QtPm1vZGUpIHsNCiAgICAtCWNhc2Ugc2lu
Z2xlTW9kZSA6DQogICAgLQkJZW50cnkgPSAic2luZ2xlIjsNCiAgICAtCQlicmVhazsNCiAgICAt
DQogICAgLQljYXNlIHN5bWJvbE1vZGUgOg0KICAgIC0JCWVudHJ5ID0gInNwbGl0IjsNCiAgICAt
CQlicmVhazsNCiAgICAtDQogICAgLQljYXNlIGZ1bGxNb2RlIDoNCiAgICAtCQllbnRyeSA9ICJm
dWxsIjsNCiAgICAtCQlicmVhazsNCiAgICAtDQogICAgLQlkZWZhdWx0Og0KICAgIC0JCWJyZWFr
Ow0KICAgIC0JfQ0KICAgIC0JY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIvbGlzdE1vZGUiLCBl
bnRyeSk7DQogICAgLQ0KICAgIC0JY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9zcGxpdDEi
LCBzcGxpdDEtPnNpemVzKCkpOw0KICAgIC0JY29uZmlnU2V0dGluZ3MtPndyaXRlU2l6ZXMoIi9z
cGxpdDIiLCBzcGxpdDItPnNpemVzKCkpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIENvbmZp
Z01haW5XaW5kb3c6OmNvbmZfY2hhbmdlZCh2b2lkKQ0KICAgIC17DQogICAgLQlpZiAoc2F2ZUFj
dGlvbikNCiAgICAtCQlzYXZlQWN0aW9uLT5zZXRFbmFibGVkKGNvbmZfZ2V0X2NoYW5nZWQoKSk7
DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgZml4dXBfcm9vdG1lbnUoc3RydWN0IG1lbnUgKm1l
bnUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBtZW51ICpjaGlsZDsNCiAgICAtCXN0YXRpYyBpbnQg
bWVudV9jbnQgPSAwOw0KICAgIC0NCiAgICAtCW1lbnUtPmZsYWdzIHw9IE1FTlVfUk9PVDsNCiAg
ICAtCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkg
ew0KICAgIC0JCWlmIChjaGlsZC0+cHJvbXB0ICYmIGNoaWxkLT5wcm9tcHQtPnR5cGUgPT0gUF9N
RU5VKSB7DQogICAgLQkJCW1lbnVfY250Kys7DQogICAgLQkJCWZpeHVwX3Jvb3RtZW51KGNoaWxk
KTsNCiAgICAtCQkJbWVudV9jbnQtLTsNCiAgICAtCQl9IGVsc2UgaWYgKCFtZW51X2NudCkNCiAg
ICAtCQkJZml4dXBfcm9vdG1lbnUoY2hpbGQpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAg
IC1zdGF0aWMgY29uc3QgY2hhciAqcHJvZ25hbWU7DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB1
c2FnZSh2b2lkKQ0KICAgIC17DQogICAgLQlwcmludGYoIiVzIFstc10gPGNvbmZpZz5cbiIsIHBy
b2duYW1lKTsNCiAgICAtCWV4aXQoMCk7DQogICAgLX0NCiAgICAtDQogICAgLWludCBtYWluKGlu
dCBhYywgY2hhcioqIGF2KQ0KICAgIC17DQogICAgLQlDb25maWdNYWluV2luZG93KiB2Ow0KICAg
IC0JY29uc3QgY2hhciAqbmFtZTsNCiAgICAtDQogICAgLQlwcm9nbmFtZSA9IGF2WzBdOw0KICAg
IC0JY29uZmlnQXBwID0gbmV3IFFBcHBsaWNhdGlvbihhYywgYXYpOw0KICAgIC0JaWYgKGFjID4g
MSAmJiBhdlsxXVswXSA9PSAnLScpIHsNCiAgICAtCQlzd2l0Y2ggKGF2WzFdWzFdKSB7DQogICAg
LQkJY2FzZSAncyc6DQogICAgLQkJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7DQog
ICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgJ2gnOg0KICAgIC0JCWNhc2UgJz8nOg0KICAgIC0J
CQl1c2FnZSgpOw0KICAgIC0JCX0NCiAgICAtCQluYW1lID0gYXZbMl07DQogICAgLQl9IGVsc2UN
CiAgICAtCQluYW1lID0gYXZbMV07DQogICAgLQlpZiAoIW5hbWUpDQogICAgLQkJdXNhZ2UoKTsN
CiAgICAtDQogICAgLQljb25mX3BhcnNlKG5hbWUpOw0KICAgIC0JZml4dXBfcm9vdG1lbnUoJnJv
b3RtZW51KTsNCiAgICAtCWNvbmZfcmVhZChOVUxMKTsNCiAgICAtCS8vemNvbmZkdW1wKHN0ZG91
dCk7DQogICAgLQ0KICAgIC0JY29uZmlnU2V0dGluZ3MgPSBuZXcgQ29uZmlnU2V0dGluZ3MoKTsN
CiAgICAtCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKCIva2NvbmZpZy9xY29uZiIpOw0KICAg
IC0JdiA9IG5ldyBDb25maWdNYWluV2luZG93KCk7DQogICAgLQ0KICAgIC0JLy96Y29uZmR1bXAo
c3Rkb3V0KTsNCiAgICAtCWNvbmZpZ0FwcC0+Y29ubmVjdChjb25maWdBcHAsIFNJR05BTChsYXN0
V2luZG93Q2xvc2VkKCkpLCBTTE9UKHF1aXQoKSkpOw0KICAgIC0JY29uZmlnQXBwLT5jb25uZWN0
KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCB2LCBTTE9UKHNhdmVTZXR0aW5ncygp
KSk7DQogICAgLQl2LT5zaG93KCk7DQogICAgLQljb25maWdBcHAtPmV4ZWMoKTsNCiAgICAtDQog
ICAgLQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsNCiAgICAtCWRlbGV0ZSBjb25maWdTZXR0
aW5nczsNCiAgICAtCWRlbGV0ZSB2Ow0KICAgIC0JZGVsZXRlIGNvbmZpZ0FwcDsNCiAgICAtDQog
ICAgLQlyZXR1cm4gMDsNCiAgICAtfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLmggYi9zdXBwb3J0L2tjb25maWcubmV3L3Fjb25mLmgNCiAgICBkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA0NWJmZTliLi4wMDAwMDAwDQogICAgLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy9xY29uZi5oDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDMz
MSArMCwwIEBADQogICAgLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQog
ICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBs
aW51eC1tNjhrLm9yZz4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSA8UVRleHRCcm93
c2VyPg0KICAgIC0jaW5jbHVkZSA8UVRyZWVXaWRnZXQ+DQogICAgLSNpbmNsdWRlIDxRTWFpbldp
bmRvdz4NCiAgICAtI2luY2x1ZGUgPFFIZWFkZXJWaWV3Pg0KICAgIC0jaW5jbHVkZSA8cXNldHRp
bmdzLmg+DQogICAgLSNpbmNsdWRlIDxRUHVzaEJ1dHRvbj4NCiAgICAtI2luY2x1ZGUgPFFTZXR0
aW5ncz4NCiAgICAtI2luY2x1ZGUgPFFMaW5lRWRpdD4NCiAgICAtI2luY2x1ZGUgPFFTcGxpdHRl
cj4NCiAgICAtI2luY2x1ZGUgPFFDaGVja0JveD4NCiAgICAtI2luY2x1ZGUgPFFEaWFsb2c+DQog
ICAgLSNpbmNsdWRlICJleHByLmgiDQogICAgLQ0KICAgIC1jbGFzcyBDb25maWdWaWV3Ow0KICAg
IC1jbGFzcyBDb25maWdMaXN0Ow0KICAgIC1jbGFzcyBDb25maWdJdGVtOw0KICAgIC1jbGFzcyBD
b25maWdMaW5lRWRpdDsNCiAgICAtY2xhc3MgQ29uZmlnTWFpbldpbmRvdzsNCiAgICAtDQogICAg
LWNsYXNzIENvbmZpZ1NldHRpbmdzIDogcHVibGljIFFTZXR0aW5ncyB7DQogICAgLXB1YmxpYzoN
CiAgICAtCUNvbmZpZ1NldHRpbmdzKCk7DQogICAgLQlRTGlzdDxpbnQ+IHJlYWRTaXplcyhjb25z
dCBRU3RyaW5nJiBrZXksIGJvb2wgKm9rKTsNCiAgICAtCWJvb2wgd3JpdGVTaXplcyhjb25zdCBR
U3RyaW5nJiBrZXksIGNvbnN0IFFMaXN0PGludD4mIHZhbHVlKTsNCiAgICAtfTsNCiAgICAtDQog
ICAgLWVudW0gY29sSWR4IHsNCiAgICAtCXByb21wdENvbElkeCwgbmFtZUNvbElkeCwgbm9Db2xJ
ZHgsIG1vZENvbElkeCwgeWVzQ29sSWR4LCBkYXRhQ29sSWR4LCBjb2xOcg0KICAgIC19Ow0KICAg
IC1lbnVtIGxpc3RNb2RlIHsNCiAgICAtCXNpbmdsZU1vZGUsIG1lbnVNb2RlLCBzeW1ib2xNb2Rl
LCBmdWxsTW9kZSwgbGlzdE1vZGUNCiAgICAtfTsNCiAgICAtZW51bSBvcHRpb25Nb2RlIHsNCiAg
ICAtCW5vcm1hbE9wdCA9IDAsIGFsbE9wdCwgcHJvbXB0T3B0DQogICAgLX07DQogICAgLQ0KICAg
IC1jbGFzcyBDb25maWdMaXN0IDogcHVibGljIFFUcmVlV2lkZ2V0IHsNCiAgICAtCVFfT0JKRUNU
DQogICAgLQl0eXBlZGVmIGNsYXNzIFFUcmVlV2lkZ2V0IFBhcmVudDsNCiAgICAtcHVibGljOg0K
ICAgIC0JQ29uZmlnTGlzdChDb25maWdWaWV3KiBwLCBjb25zdCBjaGFyICpuYW1lID0gMCk7DQog
ICAgLQl2b2lkIHJlaW5pdCh2b2lkKTsNCiAgICAtCUNvbmZpZ1ZpZXcqIHBhcmVudCh2b2lkKSBj
b25zdA0KICAgIC0Jew0KICAgIC0JCXJldHVybiAoQ29uZmlnVmlldyopUGFyZW50OjpwYXJlbnQo
KTsNCiAgICAtCX0NCiAgICAtCUNvbmZpZ0l0ZW0qIGZpbmRDb25maWdJdGVtKHN0cnVjdCBtZW51
ICopOw0KICAgIC0NCiAgICAtcHJvdGVjdGVkOg0KICAgIC0Jdm9pZCBrZXlQcmVzc0V2ZW50KFFL
ZXlFdmVudCAqZSk7DQogICAgLQl2b2lkIG1vdXNlUHJlc3NFdmVudChRTW91c2VFdmVudCAqZSk7
DQogICAgLQl2b2lkIG1vdXNlUmVsZWFzZUV2ZW50KFFNb3VzZUV2ZW50ICplKTsNCiAgICAtCXZv
aWQgbW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQgKmUpOw0KICAgIC0Jdm9pZCBtb3VzZURvdWJs
ZUNsaWNrRXZlbnQoUU1vdXNlRXZlbnQgKmUpOw0KICAgIC0Jdm9pZCBmb2N1c0luRXZlbnQoUUZv
Y3VzRXZlbnQgKmUpOw0KICAgIC0Jdm9pZCBjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2
ZW50ICplKTsNCiAgICAtDQogICAgLXB1YmxpYyBzbG90czoNCiAgICAtCXZvaWQgc2V0Um9vdE1l
bnUoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgIC0NCiAgICAtCXZvaWQgdXBkYXRlTGlzdChDb25m
aWdJdGVtICppdGVtKTsNCiAgICAtCXZvaWQgc2V0VmFsdWUoQ29uZmlnSXRlbSogaXRlbSwgdHJp
c3RhdGUgdmFsKTsNCiAgICAtCXZvaWQgY2hhbmdlVmFsdWUoQ29uZmlnSXRlbSogaXRlbSk7DQog
ICAgLQl2b2lkIHVwZGF0ZVNlbGVjdGlvbih2b2lkKTsNCiAgICAtCXZvaWQgc2F2ZVNldHRpbmdz
KHZvaWQpOw0KICAgIC1zaWduYWxzOg0KICAgIC0Jdm9pZCBtZW51Q2hhbmdlZChzdHJ1Y3QgbWVu
dSAqbWVudSk7DQogICAgLQl2b2lkIG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqbWVudSk7DQog
ICAgLQl2b2lkIHBhcmVudFNlbGVjdGVkKHZvaWQpOw0KICAgIC0Jdm9pZCBnb3RGb2N1cyhzdHJ1
Y3QgbWVudSAqKTsNCiAgICAtDQogICAgLXB1YmxpYzoNCiAgICAtCXZvaWQgdXBkYXRlTGlzdEFs
bCh2b2lkKQ0KICAgIC0Jew0KICAgIC0JCXVwZGF0ZUFsbCA9IHRydWU7DQogICAgLQkJdXBkYXRl
TGlzdChOVUxMKTsNCiAgICAtCQl1cGRhdGVBbGwgPSBmYWxzZTsNCiAgICAtCX0NCiAgICAtCUNv
bmZpZ0xpc3QqIGxpc3RWaWV3KCkNCiAgICAtCXsNCiAgICAtCQlyZXR1cm4gdGhpczsNCiAgICAt
CX0NCiAgICAtCUNvbmZpZ0l0ZW0qIGZpcnN0Q2hpbGQoKSBjb25zdA0KICAgIC0Jew0KICAgIC0J
CXJldHVybiAoQ29uZmlnSXRlbSAqKWNoaWxkcmVuKCkuZmlyc3QoKTsNCiAgICAtCX0NCiAgICAt
CXZvaWQgYWRkQ29sdW1uKGNvbElkeCBpZHgpDQogICAgLQl7DQogICAgLQkJc2hvd0NvbHVtbihp
ZHgpOw0KICAgIC0JfQ0KICAgIC0Jdm9pZCByZW1vdmVDb2x1bW4oY29sSWR4IGlkeCkNCiAgICAt
CXsNCiAgICAtCQloaWRlQ29sdW1uKGlkeCk7DQogICAgLQl9DQogICAgLQl2b2lkIHNldEFsbE9w
ZW4oYm9vbCBvcGVuKTsNCiAgICAtCXZvaWQgc2V0UGFyZW50TWVudSh2b2lkKTsNCiAgICAtDQog
ICAgLQlib29sIG1lbnVTa2lwKHN0cnVjdCBtZW51ICopOw0KICAgIC0NCiAgICAtCXZvaWQgdXBk
YXRlTWVudUxpc3QoQ29uZmlnSXRlbSAqcGFyZW50LCBzdHJ1Y3QgbWVudSopOw0KICAgIC0Jdm9p
ZCB1cGRhdGVNZW51TGlzdChDb25maWdMaXN0ICpwYXJlbnQsIHN0cnVjdCBtZW51Kik7DQogICAg
LQ0KICAgIC0JYm9vbCB1cGRhdGVBbGw7DQogICAgLQ0KICAgIC0JUVBpeG1hcCBzeW1ib2xZZXNQ
aXgsIHN5bWJvbE1vZFBpeCwgc3ltYm9sTm9QaXg7DQogICAgLQlRUGl4bWFwIGNob2ljZVllc1Bp
eCwgY2hvaWNlTm9QaXg7DQogICAgLQlRUGl4bWFwIG1lbnVQaXgsIG1lbnVJbnZQaXgsIG1lbnVC
YWNrUGl4LCB2b2lkUGl4Ow0KICAgIC0NCiAgICAtCWJvb2wgc2hvd05hbWUsIHNob3dSYW5nZSwg
c2hvd0RhdGE7DQogICAgLQllbnVtIGxpc3RNb2RlIG1vZGU7DQogICAgLQllbnVtIG9wdGlvbk1v
ZGUgb3B0TW9kZTsNCiAgICAtCXN0cnVjdCBtZW51ICpyb290RW50cnk7DQogICAgLQlRUGFsZXR0
ZSBkaXNhYmxlZENvbG9yR3JvdXA7DQogICAgLQlRUGFsZXR0ZSBpbmFjdGl2ZWRDb2xvckdyb3Vw
Ow0KICAgIC0JUU1lbnUqIGhlYWRlclBvcHVwOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY2xhc3Mg
Q29uZmlnSXRlbSA6IHB1YmxpYyBRVHJlZVdpZGdldEl0ZW0gew0KICAgIC0JdHlwZWRlZiBjbGFz
cyBRVHJlZVdpZGdldEl0ZW0gUGFyZW50Ow0KICAgIC1wdWJsaWM6DQogICAgLQlDb25maWdJdGVt
KENvbmZpZ0xpc3QgKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIHN0cnVjdCBtZW51ICptLCBi
b29sIHYpDQogICAgLQk6IFBhcmVudChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUo
bSksIHZpc2libGUodiksIGdvUGFyZW50KGZhbHNlKQ0KICAgIC0Jew0KICAgIC0JCWluaXQoKTsN
CiAgICAtCX0NCiAgICAtCUNvbmZpZ0l0ZW0oQ29uZmlnSXRlbSAqcGFyZW50LCBDb25maWdJdGVt
ICphZnRlciwgc3RydWN0IG1lbnUgKm0sIGJvb2wgdikNCiAgICAtCTogUGFyZW50KHBhcmVudCwg
YWZ0ZXIpLCBuZXh0SXRlbSgwKSwgbWVudShtKSwgdmlzaWJsZSh2KSwgZ29QYXJlbnQoZmFsc2Up
DQogICAgLQl7DQogICAgLQkJaW5pdCgpOw0KICAgIC0JfQ0KICAgIC0JQ29uZmlnSXRlbShDb25m
aWdMaXN0ICpwYXJlbnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBib29sIHYpDQogICAgLQk6IFBhcmVu
dChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0oMCksIG1lbnUoMCksIHZpc2libGUodiksIGdvUGFy
ZW50KHRydWUpDQogICAgLQl7DQogICAgLQkJaW5pdCgpOw0KICAgIC0JfQ0KICAgIC0JfkNvbmZp
Z0l0ZW0odm9pZCk7DQogICAgLQl2b2lkIGluaXQodm9pZCk7DQogICAgLQl2b2lkIG9rUmVuYW1l
KGludCBjb2wpOw0KICAgIC0Jdm9pZCB1cGRhdGVNZW51KHZvaWQpOw0KICAgIC0Jdm9pZCB0ZXN0
VXBkYXRlTWVudShib29sIHYpOw0KICAgIC0JQ29uZmlnTGlzdCogbGlzdFZpZXcoKSBjb25zdA0K
ICAgIC0Jew0KICAgIC0JCXJldHVybiAoQ29uZmlnTGlzdCopUGFyZW50Ojp0cmVlV2lkZ2V0KCk7
DQogICAgLQl9DQogICAgLQlDb25maWdJdGVtKiBmaXJzdENoaWxkKCkgY29uc3QNCiAgICAtCXsN
CiAgICAtCQlyZXR1cm4gKENvbmZpZ0l0ZW0gKilQYXJlbnQ6OmNoaWxkKDApOw0KICAgIC0JfQ0K
ICAgIC0JQ29uZmlnSXRlbSogbmV4dFNpYmxpbmcoKQ0KICAgIC0Jew0KICAgIC0JCUNvbmZpZ0l0
ZW0gKnJldCA9IE5VTEw7DQogICAgLQkJQ29uZmlnSXRlbSAqX3BhcmVudCA9IChDb25maWdJdGVt
ICopcGFyZW50KCk7DQogICAgLQ0KICAgIC0JCWlmKF9wYXJlbnQpIHsNCiAgICAtCQkJcmV0ID0g
KENvbmZpZ0l0ZW0gKilfcGFyZW50LT5jaGlsZChfcGFyZW50LT5pbmRleE9mQ2hpbGQodGhpcykr
MSk7DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJUVRyZWVXaWRnZXQgKl90cmVlV2lkZ2V0ID0g
dHJlZVdpZGdldCgpOw0KICAgIC0JCQlyZXQgPSAoQ29uZmlnSXRlbSAqKV90cmVlV2lkZ2V0LT50
b3BMZXZlbEl0ZW0oX3RyZWVXaWRnZXQtPmluZGV4T2ZUb3BMZXZlbEl0ZW0odGhpcykrMSk7DQog
ICAgLQkJfQ0KICAgIC0NCiAgICAtCQlyZXR1cm4gcmV0Ow0KICAgIC0JfQ0KICAgIC0Jdm9pZCBz
ZXRUZXh0KGNvbElkeCBpZHgsIGNvbnN0IFFTdHJpbmcmIHRleHQpDQogICAgLQl7DQogICAgLQkJ
UGFyZW50OjpzZXRUZXh0KGlkeCwgdGV4dCk7DQogICAgLQl9DQogICAgLQlRU3RyaW5nIHRleHQo
Y29sSWR4IGlkeCkgY29uc3QNCiAgICAtCXsNCiAgICAtCQlyZXR1cm4gUGFyZW50Ojp0ZXh0KGlk
eCk7DQogICAgLQl9DQogICAgLQl2b2lkIHNldFBpeG1hcChjb2xJZHggaWR4LCBjb25zdCBRSWNv
biAmaWNvbikNCiAgICAtCXsNCiAgICAtCQlQYXJlbnQ6OnNldEljb24oaWR4LCBpY29uKTsNCiAg
ICAtCX0NCiAgICAtCWNvbnN0IFFJY29uIHBpeG1hcChjb2xJZHggaWR4KSBjb25zdA0KICAgIC0J
ew0KICAgIC0JCXJldHVybiBpY29uKGlkeCk7DQogICAgLQl9DQogICAgLQkvLyBUT0RPOiBJbXBs
ZW1lbnQgcGFpbnRDZWxsDQogICAgLQ0KICAgIC0JQ29uZmlnSXRlbSogbmV4dEl0ZW07DQogICAg
LQlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICAtCWJvb2wgdmlzaWJsZTsNCiAgICAtCWJvb2wgZ29Q
YXJlbnQ7DQogICAgLX07DQogICAgLQ0KICAgIC1jbGFzcyBDb25maWdMaW5lRWRpdCA6IHB1Ymxp
YyBRTGluZUVkaXQgew0KICAgIC0JUV9PQkpFQ1QNCiAgICAtCXR5cGVkZWYgY2xhc3MgUUxpbmVF
ZGl0IFBhcmVudDsNCiAgICAtcHVibGljOg0KICAgIC0JQ29uZmlnTGluZUVkaXQoQ29uZmlnVmll
dyogcGFyZW50KTsNCiAgICAtCUNvbmZpZ1ZpZXcqIHBhcmVudCh2b2lkKSBjb25zdA0KICAgIC0J
ew0KICAgIC0JCXJldHVybiAoQ29uZmlnVmlldyopUGFyZW50OjpwYXJlbnQoKTsNCiAgICAtCX0N
CiAgICAtCXZvaWQgc2hvdyhDb25maWdJdGVtICppKTsNCiAgICAtCXZvaWQga2V5UHJlc3NFdmVu
dChRS2V5RXZlbnQgKmUpOw0KICAgIC0NCiAgICAtcHVibGljOg0KICAgIC0JQ29uZmlnSXRlbSAq
aXRlbTsNCiAgICAtfTsNCiAgICAtDQogICAgLWNsYXNzIENvbmZpZ1ZpZXcgOiBwdWJsaWMgUVdp
ZGdldCB7DQogICAgLQlRX09CSkVDVA0KICAgIC0JdHlwZWRlZiBjbGFzcyBRV2lkZ2V0IFBhcmVu
dDsNCiAgICAtcHVibGljOg0KICAgIC0JQ29uZmlnVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0
IGNoYXIgKm5hbWUgPSAwKTsNCiAgICAtCX5Db25maWdWaWV3KHZvaWQpOw0KICAgIC0Jc3RhdGlj
IHZvaWQgdXBkYXRlTGlzdChDb25maWdJdGVtKiBpdGVtKTsNCiAgICAtCXN0YXRpYyB2b2lkIHVw
ZGF0ZUxpc3RBbGwodm9pZCk7DQogICAgLQ0KICAgIC0JYm9vbCBzaG93TmFtZSh2b2lkKSBjb25z
dCB7IHJldHVybiBsaXN0LT5zaG93TmFtZTsgfQ0KICAgIC0JYm9vbCBzaG93UmFuZ2Uodm9pZCkg
Y29uc3QgeyByZXR1cm4gbGlzdC0+c2hvd1JhbmdlOyB9DQogICAgLQlib29sIHNob3dEYXRhKHZv
aWQpIGNvbnN0IHsgcmV0dXJuIGxpc3QtPnNob3dEYXRhOyB9DQogICAgLXB1YmxpYyBzbG90czoN
CiAgICAtCXZvaWQgc2V0U2hvd05hbWUoYm9vbCk7DQogICAgLQl2b2lkIHNldFNob3dSYW5nZShi
b29sKTsNCiAgICAtCXZvaWQgc2V0U2hvd0RhdGEoYm9vbCk7DQogICAgLQl2b2lkIHNldE9wdGlv
bk1vZGUoUUFjdGlvbiAqKTsNCiAgICAtc2lnbmFsczoNCiAgICAtCXZvaWQgc2hvd05hbWVDaGFu
Z2VkKGJvb2wpOw0KICAgIC0Jdm9pZCBzaG93UmFuZ2VDaGFuZ2VkKGJvb2wpOw0KICAgIC0Jdm9p
ZCBzaG93RGF0YUNoYW5nZWQoYm9vbCk7DQogICAgLXB1YmxpYzoNCiAgICAtCUNvbmZpZ0xpc3Qq
IGxpc3Q7DQogICAgLQlDb25maWdMaW5lRWRpdCogbGluZUVkaXQ7DQogICAgLQ0KICAgIC0Jc3Rh
dGljIENvbmZpZ1ZpZXcqIHZpZXdMaXN0Ow0KICAgIC0JQ29uZmlnVmlldyogbmV4dFZpZXc7DQog
ICAgLQ0KICAgIC0Jc3RhdGljIFFBY3Rpb24gKnNob3dOb3JtYWxBY3Rpb247DQogICAgLQlzdGF0
aWMgUUFjdGlvbiAqc2hvd0FsbEFjdGlvbjsNCiAgICAtCXN0YXRpYyBRQWN0aW9uICpzaG93UHJv
bXB0QWN0aW9uOw0KICAgIC19Ow0KICAgIC0NCiAgICAtY2xhc3MgQ29uZmlnSW5mb1ZpZXcgOiBw
dWJsaWMgUVRleHRCcm93c2VyIHsNCiAgICAtCVFfT0JKRUNUDQogICAgLQl0eXBlZGVmIGNsYXNz
IFFUZXh0QnJvd3NlciBQYXJlbnQ7DQogICAgLXB1YmxpYzoNCiAgICAtCUNvbmZpZ0luZm9WaWV3
KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSA9IDApOw0KICAgIC0JYm9vbCBzaG93
RGVidWcodm9pZCkgY29uc3QgeyByZXR1cm4gX3Nob3dEZWJ1ZzsgfQ0KICAgIC0NCiAgICAtcHVi
bGljIHNsb3RzOg0KICAgIC0Jdm9pZCBzZXRJbmZvKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAt
CXZvaWQgc2F2ZVNldHRpbmdzKHZvaWQpOw0KICAgIC0Jdm9pZCBzZXRTaG93RGVidWcoYm9vbCk7
DQogICAgLQ0KICAgIC1zaWduYWxzOg0KICAgIC0Jdm9pZCBzaG93RGVidWdDaGFuZ2VkKGJvb2wp
Ow0KICAgIC0Jdm9pZCBtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKik7DQogICAgLQ0KICAgIC1w
cm90ZWN0ZWQ6DQogICAgLQl2b2lkIHN5bWJvbEluZm8odm9pZCk7DQogICAgLQl2b2lkIG1lbnVJ
bmZvKHZvaWQpOw0KICAgIC0JUVN0cmluZyBkZWJ1Z19pbmZvKHN0cnVjdCBzeW1ib2wgKnN5bSk7
DQogICAgLQlzdGF0aWMgUVN0cmluZyBwcmludF9maWx0ZXIoY29uc3QgUVN0cmluZyAmc3RyKTsN
CiAgICAtCXN0YXRpYyB2b2lkIGV4cHJfcHJpbnRfaGVscCh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3lt
Ym9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cik7DQogICAgLQlRTWVudSAqY3JlYXRlU3RhbmRhcmRD
b250ZXh0TWVudShjb25zdCBRUG9pbnQgJiBwb3MpOw0KICAgIC0Jdm9pZCBjb250ZXh0TWVudUV2
ZW50KFFDb250ZXh0TWVudUV2ZW50ICplKTsNCiAgICAtDQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpz
eW07DQogICAgLQlzdHJ1Y3QgbWVudSAqX21lbnU7DQogICAgLQlib29sIF9zaG93RGVidWc7DQog
ICAgLX07DQogICAgLQ0KICAgIC1jbGFzcyBDb25maWdTZWFyY2hXaW5kb3cgOiBwdWJsaWMgUURp
YWxvZyB7DQogICAgLQlRX09CSkVDVA0KICAgIC0JdHlwZWRlZiBjbGFzcyBRRGlhbG9nIFBhcmVu
dDsNCiAgICAtcHVibGljOg0KICAgIC0JQ29uZmlnU2VhcmNoV2luZG93KENvbmZpZ01haW5XaW5k
b3cqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSA9IDApOw0KICAgIC0NCiAgICAtcHVibGljIHNs
b3RzOg0KICAgIC0Jdm9pZCBzYXZlU2V0dGluZ3Modm9pZCk7DQogICAgLQl2b2lkIHNlYXJjaCh2
b2lkKTsNCiAgICAtDQogICAgLXByb3RlY3RlZDoNCiAgICAtCVFMaW5lRWRpdCogZWRpdEZpZWxk
Ow0KICAgIC0JUVB1c2hCdXR0b24qIHNlYXJjaEJ1dHRvbjsNCiAgICAtCVFTcGxpdHRlciogc3Bs
aXQ7DQogICAgLQlDb25maWdWaWV3KiBsaXN0Ow0KICAgIC0JQ29uZmlnSW5mb1ZpZXcqIGluZm87
DQogICAgLQ0KICAgIC0Jc3RydWN0IHN5bWJvbCAqKnJlc3VsdDsNCiAgICAtfTsNCiAgICAtDQog
ICAgLWNsYXNzIENvbmZpZ01haW5XaW5kb3cgOiBwdWJsaWMgUU1haW5XaW5kb3cgew0KICAgIC0J
UV9PQkpFQ1QNCiAgICAtDQogICAgLQljaGFyICpjb25maWduYW1lOw0KICAgIC0Jc3RhdGljIFFB
Y3Rpb24gKnNhdmVBY3Rpb247DQogICAgLQlzdGF0aWMgdm9pZCBjb25mX2NoYW5nZWQodm9pZCk7
DQogICAgLXB1YmxpYzoNCiAgICAtCUNvbmZpZ01haW5XaW5kb3codm9pZCk7DQogICAgLXB1Ymxp
YyBzbG90czoNCiAgICAtCXZvaWQgY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKTsNCiAgICAtCXZv
aWQgc2V0TWVudUxpbmsoc3RydWN0IG1lbnUgKik7DQogICAgLQl2b2lkIGxpc3RGb2N1c0NoYW5n
ZWQodm9pZCk7DQogICAgLQl2b2lkIGdvQmFjayh2b2lkKTsNCiAgICAtCXZvaWQgbG9hZENvbmZp
Zyh2b2lkKTsNCiAgICAtCWJvb2wgc2F2ZUNvbmZpZyh2b2lkKTsNCiAgICAtCXZvaWQgc2F2ZUNv
bmZpZ0FzKHZvaWQpOw0KICAgIC0Jdm9pZCBzZWFyY2hDb25maWcodm9pZCk7DQogICAgLQl2b2lk
IHNob3dTaW5nbGVWaWV3KHZvaWQpOw0KICAgIC0Jdm9pZCBzaG93U3BsaXRWaWV3KHZvaWQpOw0K
ICAgIC0Jdm9pZCBzaG93RnVsbFZpZXcodm9pZCk7DQogICAgLQl2b2lkIHNob3dJbnRybyh2b2lk
KTsNCiAgICAtCXZvaWQgc2hvd0Fib3V0KHZvaWQpOw0KICAgIC0Jdm9pZCBzYXZlU2V0dGluZ3Mo
dm9pZCk7DQogICAgLQ0KICAgIC1wcm90ZWN0ZWQ6DQogICAgLQl2b2lkIGNsb3NlRXZlbnQoUUNs
b3NlRXZlbnQgKmUpOw0KICAgIC0NCiAgICAtCUNvbmZpZ1NlYXJjaFdpbmRvdyAqc2VhcmNoV2lu
ZG93Ow0KICAgIC0JQ29uZmlnVmlldyAqbWVudVZpZXc7DQogICAgLQlDb25maWdMaXN0ICptZW51
TGlzdDsNCiAgICAtCUNvbmZpZ1ZpZXcgKmNvbmZpZ1ZpZXc7DQogICAgLQlDb25maWdMaXN0ICpj
b25maWdMaXN0Ow0KICAgIC0JQ29uZmlnSW5mb1ZpZXcgKmhlbHBUZXh0Ow0KICAgIC0JUVRvb2xC
YXIgKnRvb2xCYXI7DQogICAgLQlRQWN0aW9uICpiYWNrQWN0aW9uOw0KICAgIC0JUUFjdGlvbiAq
c2luZ2xlVmlld0FjdGlvbjsNCiAgICAtCVFBY3Rpb24gKnNwbGl0Vmlld0FjdGlvbjsNCiAgICAt
CVFBY3Rpb24gKmZ1bGxWaWV3QWN0aW9uOw0KICAgIC0JUVNwbGl0dGVyICpzcGxpdDE7DQogICAg
LQlRU3BsaXR0ZXIgKnNwbGl0MjsNCiAgICAtfTsNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy9zdHJlYW1saW5lX2NvbmZpZy5wbCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvc3Ry
ZWFtbGluZV9jb25maWcucGwNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUNCiAgICBpbmRl
eCAwOGQ3NmQ3Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9zdHJlYW1s
aW5lX2NvbmZpZy5wbA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw2ODIgKzAsMCBAQA0K
ICAgIC0jIS91c3IvYmluL2VudiBwZXJsDQogICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEdQTC0yLjANCiAgICAtIw0KICAgIC0jIENvcHlyaWdodCAyMDA1LTIwMDkgLSBTdGV2ZW4gUm9z
dGVkdA0KICAgIC0jDQogICAgLSMgIEl0J3Mgc2ltcGxlIGVub3VnaCB0byBmaWd1cmUgb3V0IGhv
dyB0aGlzIHdvcmtzLg0KICAgIC0jICBJZiBub3QsIHRoZW4geW91IGNhbiBhc2sgbWUgYXQgc3Ry
aXBjb25maWdAZ29vZG1pcy5vcmcNCiAgICAtIw0KICAgIC0jIFdoYXQgaXQgZG9lcz8NCiAgICAt
Iw0KICAgIC0jICAgSWYgeW91IGhhdmUgaW5zdGFsbGVkIGEgTGludXgga2VybmVsIGZyb20gYSBk
aXN0cmlidXRpb24NCiAgICAtIyAgIHRoYXQgdHVybnMgb24gd2F5IHRvbyBtYW55IG1vZHVsZXMg
dGhhbiB5b3UgbmVlZCwgYW5kDQogICAgLSMgICB5b3Ugb25seSB3YW50IHRoZSBtb2R1bGVzIHlv
dSB1c2UsIHRoZW4gdGhpcyBwcm9ncmFtDQogICAgLSMgICBpcyBwZXJmZWN0IGZvciB5b3UuDQog
ICAgLSMNCiAgICAtIyAgIEl0IGdpdmVzIHlvdSB0aGUgYWJpbGl0eSB0byB0dXJuIG9mZiBhbGwg
dGhlIG1vZHVsZXMgdGhhdCBhcmUNCiAgICAtIyAgIG5vdCBsb2FkZWQgb24geW91ciBzeXN0ZW0u
DQogICAgLSMNCiAgICAtIyBIb3d0bzoNCiAgICAtIw0KICAgIC0jICAxLiBCb290IHVwIHRoZSBr
ZXJuZWwgdGhhdCB5b3Ugd2FudCB0byBzdHJlYW0gbGluZSB0aGUgY29uZmlnIG9uLg0KICAgIC0j
ICAyLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBkaXJlY3RvcnkgaG9sZGluZyB0aGUgc291cmNl
IG9mIHRoZQ0KICAgIC0jICAgICAgIGtlcm5lbCB0aGF0IHlvdSBqdXN0IGJvb3RlZC4NCiAgICAt
IyAgMy4gQ29weSB0aGUgY29uZmlndXJhdG9uIGZpbGUgdG8gdGhpcyBkaXJlY3RvcnkgYXMgLmNv
bmZpZw0KICAgIC0jICA0LiBIYXZlIGFsbCB5b3VyIGRldmljZXMgdGhhdCB5b3UgbmVlZCBtb2R1
bGVzIGZvciBjb25uZWN0ZWQgYW5kDQogICAgLSMgICAgICBvcGVyYXRpb25hbCAobWFrZSBzdXJl
IHRoYXQgdGhlaXIgY29ycmVzcG9uZGluZyBtb2R1bGVzIGFyZSBsb2FkZWQpDQogICAgLSMgIDUu
IFJ1biB0aGlzIHNjcmlwdCByZWRpcmVjdGluZyB0aGUgb3V0cHV0IHRvIHNvbWUgb3RoZXIgZmls
ZQ0KICAgIC0jICAgICAgIGxpa2UgY29uZmlnX3N0cmlwLg0KICAgIC0jICA2LiBCYWNrIHVwIHlv
dXIgb2xkIGNvbmZpZyAoaWYgeW91IHdhbnQgdG9vKS4NCiAgICAtIyAgNy4gY29weSB0aGUgY29u
ZmlnX3N0cmlwIGZpbGUgdG8gLmNvbmZpZw0KICAgIC0jICA4LiBSdW4gIm1ha2Ugb2xkY29uZmln
Ig0KICAgIC0jDQogICAgLSMgIE5vdyB5b3VyIGtlcm5lbCBpcyByZWFkeSB0byBiZSBidWlsdCB3
aXRoIG9ubHkgdGhlIG1vZHVsZXMgdGhhdA0KICAgIC0jICBhcmUgbG9hZGVkLg0KICAgIC0jDQog
ICAgLSMgSGVyZSdzIHdoYXQgSSBkaWQgd2l0aCBteSBEZWJpYW4gZGlzdHJpYnV0aW9uLg0KICAg
IC0jDQogICAgLSMgICAgY2QgL3Vzci9zcmMvbGludXgtMi42LjEwDQogICAgLSMgICAgY3AgL2Jv
b3QvY29uZmlnLTIuNi4xMC0xLTY4Ni1zbXAgLmNvbmZpZw0KICAgIC0jICAgIH4vYmluL3N0cmVh
bWxpbmVfY29uZmlnID4gY29uZmlnX3N0cmlwDQogICAgLSMgICAgbXYgLmNvbmZpZyBjb25maWdf
c2F2DQogICAgLSMgICAgbXYgY29uZmlnX3N0cmlwIC5jb25maWcNCiAgICAtIyAgICBtYWtlIG9s
ZGNvbmZpZw0KICAgIC0jDQogICAgLXVzZSB3YXJuaW5nczsNCiAgICAtdXNlIHN0cmljdDsNCiAg
ICAtdXNlIEdldG9wdDo6TG9uZzsNCiAgICAtDQogICAgLSMgc2V0IHRoZSBlbnZpcm9ubWVudCB2
YXJpYWJsZSBMT0NBTE1PRENPTkZJR19ERUJVRyB0byBnZXQNCiAgICAtIyBkZWJ1ZyBvdXRwdXQu
DQogICAgLW15ICRkZWJ1Z3ByaW50ID0gMDsNCiAgICAtJGRlYnVncHJpbnQgPSAxIGlmIChkZWZp
bmVkKCRFTlZ7TE9DQUxNT0RDT05GSUdfREVCVUd9KSk7DQogICAgLQ0KICAgIC1zdWIgZHByaW50
IHsNCiAgICAtICAgIHJldHVybiBpZiAoISRkZWJ1Z3ByaW50KTsNCiAgICAtICAgIHByaW50IFNU
REVSUiBAXzsNCiAgICAtfQ0KICAgIC0NCiAgICAtbXkgJGNvbmZpZyA9ICIuY29uZmlnIjsNCiAg
ICAtDQogICAgLW15ICR1bmFtZSA9IGB1bmFtZSAtcmA7DQogICAgLWNob21wICR1bmFtZTsNCiAg
ICAtDQogICAgLW15IEBzZWFyY2hjb25maWdzID0gKA0KICAgIC0Jew0KICAgIC0JICAgICJmaWxl
IiA9PiAiLmNvbmZpZyIsDQogICAgLQkgICAgImV4ZWMiID0+ICJjYXQiLA0KICAgIC0JfSwNCiAg
ICAtCXsNCiAgICAtCSAgICAiZmlsZSIgPT4gIi9wcm9jL2NvbmZpZy5neiIsDQogICAgLQkgICAg
ImV4ZWMiID0+ICJ6Y2F0IiwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkgICAgImZpbGUiID0+
ICIvYm9vdC9jb25maWctJHVuYW1lIiwNCiAgICAtCSAgICAiZXhlYyIgPT4gImNhdCIsDQogICAg
LQl9LA0KICAgIC0Jew0KICAgIC0JICAgICJmaWxlIiA9PiAiL2Jvb3Qvdm1saW51ei0kdW5hbWUi
LA0KICAgIC0JICAgICJleGVjIiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICAt
CSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsDQogICAgLQl9LA0KICAg
IC0Jew0KICAgIC0JICAgICJmaWxlIiA9PiAidm1saW51eCIsDQogICAgLQkgICAgImV4ZWMiID0+
ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgIC0JICAgICJ0ZXN0IiA9PiAic2NyaXB0
cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkgICAgImZpbGUi
ID0+ICIvbGliL21vZHVsZXMvJHVuYW1lL2tlcm5lbC9rZXJuZWwvY29uZmlncy5rbyIsDQogICAg
LQkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgIC0JICAgICJ0
ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICAtCX0sDQogICAgLQl7DQog
ICAgLQkgICAgImZpbGUiID0+ICJrZXJuZWwvY29uZmlncy5rbyIsDQogICAgLQkgICAgImV4ZWMi
ID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgIC0JICAgICJ0ZXN0IiA9PiAic2Ny
aXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICAtCX0sDQogICAgLQl7DQogICAgLQkgICAgImZp
bGUiID0+ICJrZXJuZWwvY29uZmlncy5vIiwNCiAgICAtCSAgICAiZXhlYyIgPT4gInNjcmlwdHMv
ZXh0cmFjdC1pa2NvbmZpZyIsDQogICAgLQkgICAgInRlc3QiID0+ICJzY3JpcHRzL2V4dHJhY3Qt
aWtjb25maWciLA0KICAgIC0JfSwNCiAgICAtKTsNCiAgICAtDQogICAgLXN1YiByZWFkX2NvbmZp
ZyB7DQogICAgLSAgICBmb3JlYWNoIG15ICRjb25mIChAc2VhcmNoY29uZmlncykgew0KICAgIC0J
bXkgJGZpbGUgPSAkY29uZi0+eyJmaWxlIn07DQogICAgLQ0KICAgIC0JbmV4dCBpZiAoICEgLWYg
IiRmaWxlIik7DQogICAgLQ0KICAgIC0JaWYgKGRlZmluZWQoJGNvbmYtPnsidGVzdCJ9KSkgew0K
ICAgIC0JICAgIGAkY29uZi0+eyJ0ZXN0In0gJGNvbmYtPnsiZmlsZSJ9IDI+L2Rldi9udWxsYDsN
CiAgICAtCSAgICBuZXh0IGlmICgkPyk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JbXkgJGV4ZWMg
PSAkY29uZi0+eyJleGVjIn07DQogICAgLQ0KICAgIC0JcHJpbnQgU1RERVJSICJ1c2luZyBjb25m
aWc6ICckZmlsZSdcbiI7DQogICAgLQ0KICAgIC0Jb3BlbihteSAkaW5maWxlLCAnLXwnLCAiJGV4
ZWMgJGZpbGUiKSB8fCBkaWUgIkZhaWxlZCB0byBydW4gJGV4ZWMgJGZpbGUiOw0KICAgIC0JbXkg
QHggPSA8JGluZmlsZT47DQogICAgLQljbG9zZSAkaW5maWxlOw0KICAgIC0JcmV0dXJuIEB4Ow0K
ICAgIC0gICAgfQ0KICAgIC0gICAgZGllICJObyBjb25maWcgZmlsZSBmb3VuZCI7DQogICAgLX0N
CiAgICAtDQogICAgLW15IEBjb25maWdfZmlsZSA9IHJlYWRfY29uZmlnOw0KICAgIC0NCiAgICAt
IyBQYXJzZSBvcHRpb25zDQogICAgLW15ICRsb2NhbG1vZGNvbmZpZyA9IDA7DQogICAgLW15ICRs
b2NhbHllc2NvbmZpZyA9IDA7DQogICAgLQ0KICAgIC1HZXRPcHRpb25zKCJsb2NhbG1vZGNvbmZp
ZyIgPT4gXCRsb2NhbG1vZGNvbmZpZywNCiAgICAtCSAgICJsb2NhbHllc2NvbmZpZyIgPT4gXCRs
b2NhbHllc2NvbmZpZyk7DQogICAgLQ0KICAgIC0jIEdldCB0aGUgYnVpbGQgc291cmNlIGFuZCB0
b3AgbGV2ZWwgS2NvbmZpZyBmaWxlIChwYXNzZWQgaW4pDQogICAgLW15ICRrc291cmNlID0gKCRB
UkdWWzBdID8gJEFSR1ZbMF0gOiAnLicpOw0KICAgIC1teSAka2NvbmZpZyA9ICRBUkdWWzFdOw0K
ICAgIC1teSAkbHNtb2RfZmlsZSA9ICRFTlZ7J0xTTU9EJ307DQogICAgLQ0KICAgIC1teSBAbWFr
ZWZpbGVzID0gYGZpbmQgJGtzb3VyY2UgLW5hbWUgTWFrZWZpbGUgLW9yIC1uYW1lIEtidWlsZCAy
Pi9kZXYvbnVsbGA7DQogICAgLWNob21wIEBtYWtlZmlsZXM7DQogICAgLQ0KICAgIC1teSAlZGVw
ZW5kczsNCiAgICAtbXkgJXNlbGVjdHM7DQogICAgLW15ICVwcm9tcHRzOw0KICAgIC1teSAlb2Jq
ZWN0czsNCiAgICAtbXkgJHZhcjsNCiAgICAtbXkgJGlmbGV2ZWwgPSAwOw0KICAgIC1teSBAaWZk
ZXBzOw0KICAgIC0NCiAgICAtIyBwcmV2ZW50IHJlY3Vyc2lvbg0KICAgIC1teSAlcmVhZF9rY29u
ZmlnczsNCiAgICAtDQogICAgLXN1YiByZWFkX2tjb25maWcgew0KICAgIC0gICAgbXkgKCRrY29u
ZmlnKSA9IEBfOw0KICAgIC0NCiAgICAtICAgIG15ICRzdGF0ZSA9ICJOT05FIjsNCiAgICAtICAg
IG15ICRjb25maWc7DQogICAgLQ0KICAgIC0gICAgbXkgJGNvbnQgPSAwOw0KICAgIC0gICAgbXkg
JGxpbmU7DQogICAgLQ0KICAgIC0gICAgbXkgJHNvdXJjZSA9ICIka3NvdXJjZS8ka2NvbmZpZyI7
DQogICAgLSAgICBteSAkbGFzdF9zb3VyY2UgPSAiIjsNCiAgICAtDQogICAgLSAgICAjIENoZWNr
IGZvciBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVzZWQNCiAgICAtICAgIHdoaWxlICgkc291
cmNlID1+IC9cJFwoKFx3KylcKS8gJiYgJGxhc3Rfc291cmNlIG5lICRzb3VyY2UpIHsNCiAgICAt
CW15ICRlbnYgPSAkMTsNCiAgICAtCSRsYXN0X3NvdXJjZSA9ICRzb3VyY2U7DQogICAgLQkkc291
cmNlID1+IHMvXCRcKCRlbnZcKS8kRU5WeyRlbnZ9LzsNCiAgICAtICAgIH0NCiAgICAtDQogICAg
LSAgICBvcGVuKG15ICRraW5maWxlLCAnPCcsICRzb3VyY2UpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAk
a2NvbmZpZyI7DQogICAgLSAgICB3aGlsZSAoPCRraW5maWxlPikgew0KICAgIC0JY2hvbXA7DQog
ICAgLQ0KICAgIC0JIyBNYWtlIHN1cmUgdGhhdCBsaW5lcyBlbmRpbmcgd2l0aCBcIGNvbnRpbnVl
DQogICAgLQlpZiAoJGNvbnQpIHsNCiAgICAtCSAgICAkXyA9ICRsaW5lIC4gIiAiIC4gJF87DQog
ICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKHMvXFwkLy8pIHsNCiAgICAtCSAgICAkY29udCA9IDE7
DQogICAgLQkgICAgJGxpbmUgPSAkXzsNCiAgICAtCSAgICBuZXh0Ow0KICAgIC0JfQ0KICAgIC0N
CiAgICAtCSRjb250ID0gMDsNCiAgICAtDQogICAgLQkjIGNvbGxlY3QgYW55IEtjb25maWcgc291
cmNlcw0KICAgIC0JaWYgKC9ec291cmNlXHMrIj8oW14iXSspLykgew0KICAgIC0JICAgIG15ICRr
Y29uZmlnID0gJDE7DQogICAgLQkgICAgIyBwcmV2ZW50IHJlYWRpbmcgdHdpY2UuDQogICAgLQkg
ICAgaWYgKCFkZWZpbmVkKCRyZWFkX2tjb25maWdzeyRrY29uZmlnfSkpIHsNCiAgICAtCQkkcmVh
ZF9rY29uZmlnc3ska2NvbmZpZ30gPSAxOw0KICAgIC0JCXJlYWRfa2NvbmZpZygka2NvbmZpZyk7
DQogICAgLQkgICAgfQ0KICAgIC0JICAgIG5leHQ7DQogICAgLQl9DQogICAgLQ0KICAgIC0JIyBj
b25maWdzIGZvdW5kDQogICAgLQlpZiAoL15ccyoobWVudSk/Y29uZmlnXHMrKFxTKylccyokLykg
ew0KICAgIC0JICAgICRzdGF0ZSA9ICJORVciOw0KICAgIC0JICAgICRjb25maWcgPSAkMjsNCiAg
ICAtDQogICAgLQkgICAgIyBBZGQgZGVwZW5kcyBmb3IgJ2lmJyBuZXN0aW5nDQogICAgLQkgICAg
Zm9yIChteSAkaSA9IDA7ICRpIDwgJGlmbGV2ZWw7ICRpKyspIHsNCiAgICAtCQlpZiAoJGkpIHsN
CiAgICAtCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0gIiAiIC4gJGlmZGVwc1skaV07DQogICAg
LQkJfSBlbHNlIHsNCiAgICAtCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkaWZkZXBzWyRpXTsN
CiAgICAtCQl9DQogICAgLQkJJHN0YXRlID0gIkRFUCI7DQogICAgLQkgICAgfQ0KICAgIC0NCiAg
ICAtCSMgY29sbGVjdCB0aGUgZGVwZW5kcyBmb3IgdGhlIGNvbmZpZw0KICAgIC0JfSBlbHNpZiAo
JHN0YXRlIGVxICJORVciICYmIC9eXHMqZGVwZW5kc1xzK29uXHMrKC4qKSQvKSB7DQogICAgLQkg
ICAgJHN0YXRlID0gIkRFUCI7DQogICAgLQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gPSAkMTsNCiAg
ICAtCX0gZWxzaWYgKCRzdGF0ZSBlcSAiREVQIiAmJiAvXlxzKmRlcGVuZHNccytvblxzKyguKikk
Lykgew0KICAgIC0JICAgICRkZXBlbmRzeyRjb25maWd9IC49ICIgIiAuICQxOw0KICAgIC0JfSBl
bHNpZiAoJHN0YXRlIGVxICJERVAiICYmIC9eXHMqZGVmKF8oYm9vbHx0cmlzdGF0ZSl8YXVsdClc
cysoXFMuKikkLykgew0KICAgIC0JICAgIG15ICRkZXAgPSAkMzsNCiAgICAtCSAgICBpZiAoJGRl
cCAhfiAvXlxzKih5fG18bilccyokLykgew0KICAgIC0JCSRkZXAgPX4gcy8uKlxzaWZccysvLzsN
CiAgICAtCQkkZGVwZW5kc3skY29uZmlnfSAuPSAiICIgLiAkZGVwOw0KICAgIC0JCWRwcmludCAi
QWRkZWQgZGVmYXVsdCBkZXBlbmRzICRkZXAgdG8gJGNvbmZpZ1xuIjsNCiAgICAtCSAgICB9DQog
ICAgLQ0KICAgIC0JIyBHZXQgdGhlIGNvbmZpZ3MgdGhhdCBzZWxlY3QgdGhpcyBjb25maWcNCiAg
ICAtCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYgL15ccypzZWxlY3RccysoXFMrKS8pIHsN
CiAgICAtCSAgICBteSAkY29uZiA9ICQxOw0KICAgIC0JICAgIGlmIChkZWZpbmVkKCRzZWxlY3Rz
eyRjb25mfSkpIHsNCiAgICAtCQkkc2VsZWN0c3skY29uZn0gLj0gIiAiIC4gJGNvbmZpZzsNCiAg
ICAtCSAgICB9IGVsc2Ugew0KICAgIC0JCSRzZWxlY3RzeyRjb25mfSA9ICRjb25maWc7DQogICAg
LQkgICAgfQ0KICAgIC0NCiAgICAtCSMgY29uZmlncyB3aXRob3V0IHByb21wdHMgbXVzdCBiZSBz
ZWxlY3RlZA0KICAgIC0JfSBlbHNpZiAoJHN0YXRlIG5lICJOT05FIiAmJiAvXlxzKih0cmlzdGF0
ZVxzK1xTfHByb21wdFxiKS8pIHsNCiAgICAtCSAgICAjIG5vdGUgaWYgdGhlIGNvbmZpZyBoYXMg
YSBwcm9tcHQNCiAgICAtCSAgICAkcHJvbXB0c3skY29uZmlnfSA9IDE7DQogICAgLQ0KICAgIC0J
IyBDaGVjayBmb3IgaWYgc3RhdGVtZW50cw0KICAgIC0JfSBlbHNpZiAoL15pZlxzKyguKlxTKVxz
KiQvKSB7DQogICAgLQkgICAgbXkgJGRlcHMgPSAkMTsNCiAgICAtCSAgICAjIHJlbW92ZSBiZWdp
bm5pbmcgYW5kIGVuZGluZyBub24gdGV4dA0KICAgIC0JICAgICRkZXBzID1+IHMvXlteYS16QS1a
MC05X10qLy87DQogICAgLQkgICAgJGRlcHMgPX4gcy9bXmEtekEtWjAtOV9dKiQvLzsNCiAgICAt
DQogICAgLQkgICAgbXkgQGRlcHMgPSBzcGxpdCAvW15hLXpBLVowLTlfXSsvLCAkZGVwczsNCiAg
ICAtDQogICAgLQkgICAgJGlmZGVwc1skaWZsZXZlbCsrXSA9IGpvaW4gJzonLCBAZGVwczsNCiAg
ICAtDQogICAgLQl9IGVsc2lmICgvXmVuZGlmLykgew0KICAgIC0NCiAgICAtCSAgICAkaWZsZXZl
bC0tIGlmICgkaWZsZXZlbCk7DQogICAgLQ0KICAgIC0JIyBzdG9wIG9uICJoZWxwIiBhbmQga2V5
d29yZHMgdGhhdCBlbmQgYSBtZW51IGVudHJ5DQogICAgLQl9IGVsc2lmICgvXlxzKigtLS0pP2hl
bHAoLS0tKT9ccyokLyB8fCAvXihjb21tZW50fGNob2ljZXxtZW51KVxiLykgew0KICAgIC0JICAg
ICRzdGF0ZSA9ICJOT05FIjsNCiAgICAtCX0NCiAgICAtICAgIH0NCiAgICAtICAgIGNsb3NlKCRr
aW5maWxlKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtaWYgKCRrY29uZmlnKSB7DQogICAgLSAgICBy
ZWFkX2tjb25maWcoJGtjb25maWcpOw0KICAgIC19DQogICAgLQ0KICAgIC0jIE1ha2VmaWxlcyBj
YW4gdXNlIHZhcmlhYmxlcyB0byBkZWZpbmUgdGhlaXIgZGVwZW5kZW5jaWVzDQogICAgLXN1YiBj
b252ZXJ0X3ZhcnMgew0KICAgIC0gICAgbXkgKCRsaW5lLCAldmFycykgPSBAXzsNCiAgICAtDQog
ICAgLSAgICBteSAkcHJvY2VzcyA9ICIiOw0KICAgIC0NCiAgICAtICAgIHdoaWxlICgkbGluZSA9
fiBzL14oLio/KShcJFwoKC4qPylcKSkvLykgew0KICAgIC0JbXkgJHN0YXJ0ID0gJDE7DQogICAg
LQlteSAkdmFyaWFibGUgPSAkMjsNCiAgICAtCW15ICR2YXIgPSAkMzsNCiAgICAtDQogICAgLQlp
ZiAoZGVmaW5lZCgkdmFyc3skdmFyfSkpIHsNCiAgICAtCSAgICAkcHJvY2VzcyAuPSAkc3RhcnQg
LiAkdmFyc3skdmFyfTsNCiAgICAtCX0gZWxzZSB7DQogICAgLQkgICAgJHByb2Nlc3MgLj0gJHN0
YXJ0IC4gJHZhcmlhYmxlOw0KICAgIC0JfQ0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICAgICRw
cm9jZXNzIC49ICRsaW5lOw0KICAgIC0NCiAgICAtICAgIHJldHVybiAkcHJvY2VzczsNCiAgICAt
fQ0KICAgIC0NCiAgICAtIyBSZWFkIGFsbCBNYWtlZmlsZXMgdG8gbWFwIHRoZSBjb25maWdzIHRv
IHRoZSBvYmplY3RzDQogICAgLWZvcmVhY2ggbXkgJG1ha2VmaWxlIChAbWFrZWZpbGVzKSB7DQog
ICAgLQ0KICAgIC0gICAgbXkgJGxpbmUgPSAiIjsNCiAgICAtICAgIG15ICVtYWtlX3ZhcnM7DQog
ICAgLQ0KICAgIC0gICAgb3BlbihteSAkaW5maWxlLCAnPCcsICRtYWtlZmlsZSkgfHwgZGllICJD
YW4ndCBvcGVuICRtYWtlZmlsZSI7DQogICAgLSAgICB3aGlsZSAoPCRpbmZpbGU+KSB7DQogICAg
LQkjIGlmIHRoaXMgbGluZSBlbmRzIHdpdGggYSBiYWNrc2xhc2gsIGNvbnRpbnVlDQogICAgLQlj
aG9tcDsNCiAgICAtCWlmICgvXiguKilcXCQvKSB7DQogICAgLQkgICAgJGxpbmUgLj0gJDE7DQog
ICAgLQkgICAgbmV4dDsNCiAgICAtCX0NCiAgICAtDQogICAgLQkkbGluZSAuPSAkXzsNCiAgICAt
CSRfID0gJGxpbmU7DQogICAgLQkkbGluZSA9ICIiOw0KICAgIC0NCiAgICAtCW15ICRvYmpzOw0K
ICAgIC0NCiAgICAtCSMgQ29udmVydCB2YXJpYWJsZXMgaW4gYSBsaW5lIChjb3VsZCBkZWZpbmUg
Y29uZmlncykNCiAgICAtCSRfID0gY29udmVydF92YXJzKCRfLCAlbWFrZV92YXJzKTsNCiAgICAt
DQogICAgLQkjIGNvbGxlY3Qgb2JqZWN0cyBhZnRlciBvYmotJChDT05GSUdfRk9PX0JBUikNCiAg
ICAtCWlmICgvb2JqLVwkXCgoQ09ORklHX1teXCldKilcKVxzKlsrOl0/PVxzKiguKikvKSB7DQog
ICAgLQkgICAgJHZhciA9ICQxOw0KICAgIC0JICAgICRvYmpzID0gJDI7DQogICAgLQ0KICAgIC0J
IyBjaGVjayBpZiB2YXJpYWJsZXMgYXJlIHNldA0KICAgIC0JfSBlbHNpZiAoL15ccyooXFMrKVxz
Kls6XT89XHMqKC4qXFMpLykgew0KICAgIC0JICAgICRtYWtlX3ZhcnN7JDF9ID0gJDI7DQogICAg
LQl9DQogICAgLQlpZiAoZGVmaW5lZCgkb2JqcykpIHsNCiAgICAtCSAgICBmb3JlYWNoIG15ICRv
YmogKHNwbGl0IC9ccysvLCRvYmpzKSB7DQogICAgLQkJJG9iaiA9fiBzLy0vXy9nOw0KICAgIC0J
CWlmICgkb2JqID1+IC8oLiopXC5vJC8pIHsNCiAgICAtCQkgICAgIyBPYmplY3RzIG1heSBiZSBl
bmFibGVkIGJ5IG1vcmUgdGhhbiBvbmUgY29uZmlnLg0KICAgIC0JCSAgICAjIFN0b3JlIGNvbmZp
Z3MgaW4gYW4gYXJyYXkuDQogICAgLQkJICAgIG15IEBhcnI7DQogICAgLQ0KICAgIC0JCSAgICBp
ZiAoZGVmaW5lZCgkb2JqZWN0c3skMX0pKSB7DQogICAgLQkJCUBhcnIgPSBAeyRvYmplY3RzeyQx
fX07DQogICAgLQkJICAgIH0NCiAgICAtDQogICAgLQkJICAgICRhcnJbJCNhcnIrMV0gPSAkdmFy
Ow0KICAgIC0NCiAgICAtCQkgICAgIyBUaGUgb2JqZWN0cyBoYXZlIGEgaGFzaCBtYXBwaW5nIHRv
IGEgcmVmZXJlbmNlDQogICAgLQkJICAgICMgb2YgYW4gYXJyYXkgb2YgY29uZmlncy4NCiAgICAt
CQkgICAgJG9iamVjdHN7JDF9ID0gXEBhcnI7DQogICAgLQkJfQ0KICAgIC0JICAgIH0NCiAgICAt
CX0NCiAgICAtICAgIH0NCiAgICAtICAgIGNsb3NlKCRpbmZpbGUpOw0KICAgIC19DQogICAgLQ0K
ICAgIC1teSAlbW9kdWxlczsNCiAgICAtbXkgJGxpbmZpbGU7DQogICAgLQ0KICAgIC1pZiAoZGVm
aW5lZCgkbHNtb2RfZmlsZSkpIHsNCiAgICAtICAgIGlmICggISAtZiAkbHNtb2RfZmlsZSkgew0K
ICAgIC0JaWYgKCAtZiAkRU5WeydvYmp0cmVlJ30uIi8iLiRsc21vZF9maWxlKSB7DQogICAgLQkg
ICAgJGxzbW9kX2ZpbGUgPSAkRU5WeydvYmp0cmVlJ30uIi8iLiRsc21vZF9maWxlOw0KICAgIC0J
fSBlbHNlIHsNCiAgICAtCQlkaWUgIiRsc21vZF9maWxlIG5vdCBmb3VuZCI7DQogICAgLQl9DQog
ICAgLSAgICB9DQogICAgLQ0KICAgIC0gICAgbXkgJG90eXBlID0gKCAteCAkbHNtb2RfZmlsZSkg
PyAnLXwnIDogJzwnOw0KICAgIC0gICAgb3BlbigkbGluZmlsZSwgJG90eXBlLCAkbHNtb2RfZmls
ZSk7DQogICAgLQ0KICAgIC19IGVsc2Ugew0KICAgIC0NCiAgICAtICAgICMgc2VlIHdoYXQgbW9k
dWxlcyBhcmUgbG9hZGVkIG9uIHRoaXMgc3lzdGVtDQogICAgLSAgICBteSAkbHNtb2Q7DQogICAg
LQ0KICAgIC0gICAgZm9yZWFjaCBteSAkZGlyICggKCIvc2JpbiIsICIvYmluIiwgIi91c3Ivc2Jp
biIsICIvdXNyL2JpbiIpICkgew0KICAgIC0JaWYgKCAteCAiJGRpci9sc21vZCIgKSB7DQogICAg
LQkgICAgJGxzbW9kID0gIiRkaXIvbHNtb2QiOw0KICAgIC0JICAgIGxhc3Q7DQogICAgLQl9DQog
ICAgLX0NCiAgICAtICAgIGlmICghZGVmaW5lZCgkbHNtb2QpKSB7DQogICAgLQkjIHRyeSBqdXN0
IHRoZSBwYXRoDQogICAgLQkkbHNtb2QgPSAibHNtb2QiOw0KICAgIC0gICAgfQ0KICAgIC0NCiAg
ICAtICAgIG9wZW4oJGxpbmZpbGUsICctfCcsICRsc21vZCkgfHwgZGllICJDYW4gbm90IGNhbGwg
bHNtb2Qgd2l0aCAkbHNtb2QiOw0KICAgIC19DQogICAgLQ0KICAgIC13aGlsZSAoPCRsaW5maWxl
Pikgew0KICAgIC0JbmV4dCBpZiAoL15Nb2R1bGUvKTsgICMgU2tpcCB0aGUgZmlyc3QgbGluZS4N
CiAgICAtCWlmICgvXihcUyspLykgew0KICAgIC0JCSRtb2R1bGVzeyQxfSA9IDE7DQogICAgLQl9
DQogICAgLX0NCiAgICAtY2xvc2UgKCRsaW5maWxlKTsNCiAgICAtDQogICAgLSMgYWRkIHRvIHRo
ZSBjb25maWdzIGhhc2ggYWxsIGNvbmZpZ3MgdGhhdCBhcmUgbmVlZGVkIHRvIGVuYWJsZQ0KICAg
IC0jIGEgbG9hZGVkIG1vZHVsZS4gVGhpcyBpcyBhIGRpcmVjdCBvYmotJHtDT05GSUdfRk9PfSAr
PSBiYXIubw0KICAgIC0jIHdoZXJlIHdlIGtub3cgd2UgbmVlZCBiYXIubyBzbyB3ZSBhZGQgRk9P
IHRvIHRoZSBsaXN0Lg0KICAgIC1teSAlY29uZmlnczsNCiAgICAtZm9yZWFjaCBteSAkbW9kdWxl
IChrZXlzKCVtb2R1bGVzKSkgew0KICAgIC0gICAgaWYgKGRlZmluZWQoJG9iamVjdHN7JG1vZHVs
ZX0pKSB7DQogICAgLQlteSBAYXJyID0gQHskb2JqZWN0c3skbW9kdWxlfX07DQogICAgLQlmb3Jl
YWNoIG15ICRjb25mIChAYXJyKSB7DQogICAgLQkgICAgJGNvbmZpZ3N7JGNvbmZ9ID0gJG1vZHVs
ZTsNCiAgICAtCSAgICBkcHJpbnQgIiRjb25mIGFkZGVkIGJ5IGRpcmVjdCAoJG1vZHVsZSlcbiI7
DQogICAgLQkgICAgaWYgKCRkZWJ1Z3ByaW50KSB7DQogICAgLQkJbXkgJGM9JGNvbmY7DQogICAg
LQkJJGMgPX4gcy9eQ09ORklHXy8vOw0KICAgIC0JCWlmIChkZWZpbmVkKCRkZXBlbmRzeyRjfSkp
IHsNCiAgICAtCQkgICAgZHByaW50ICIgZGVwcyA9ICRkZXBlbmRzeyRjfVxuIjsNCiAgICAtCQl9
IGVsc2Ugew0KICAgIC0JCSAgICBkcHJpbnQgIiBubyBkZXBzXG4iOw0KICAgIC0JCX0NCiAgICAt
CSAgICB9DQogICAgLQl9DQogICAgLSAgICB9IGVsc2Ugew0KICAgIC0JIyBNb3N0IGxpa2VseSwg
c29tZW9uZSBoYXMgYSBjdXN0b20gKGJpbmFyeT8pIG1vZHVsZSBsb2FkZWQuDQogICAgLQlwcmlu
dCBTVERFUlIgIiRtb2R1bGUgY29uZmlnIG5vdCBmb3VuZCEhXG4iOw0KICAgIC0gICAgfQ0KICAg
IC19DQogICAgLQ0KICAgIC0jIFJlYWQgdGhlIGN1cnJlbnQgY29uZmlnLCBhbmQgc2VlIHdoYXQg
aXMgZW5hYmxlZC4gV2Ugd2FudCB0bw0KICAgIC0jIGlnbm9yZSBjb25maWdzIHRoYXQgd2Ugd291
bGQgbm90IGVuYWJsZSBhbnl3YXkuDQogICAgLQ0KICAgIC1teSAlb3JpZ19jb25maWdzOw0KICAg
IC1teSAkdmFsaWQgPSAiQS1aYS16XzAtOSI7DQogICAgLQ0KICAgIC1mb3JlYWNoIG15ICRsaW5l
IChAY29uZmlnX2ZpbGUpIHsNCiAgICAtICAgICRfID0gJGxpbmU7DQogICAgLQ0KICAgIC0gICAg
aWYgKC8oQ09ORklHX1skdmFsaWRdKik9KG18eSkvKSB7DQogICAgLQkkb3JpZ19jb25maWdzeyQx
fSA9ICQyOw0KICAgIC0gICAgfQ0KICAgIC19DQogICAgLQ0KICAgIC1teSAkcmVwZWF0ID0gMTsN
CiAgICAtDQogICAgLW15ICRkZXBjb25maWc7DQogICAgLQ0KICAgIC0jDQogICAgLSMgTm90ZSwg
d2UgZG8gbm90IGNhcmUgYWJvdXQgb3BlcmFuZHMgKGxpa2U6ICYmLCB8fCwgISkgd2Ugd2FudCB0
byBhZGQgYW55DQogICAgLSMgY29uZmlnIHRoYXQgaXMgaW4gdGhlIGRlcGVuZCBsaXN0IG9mIGFu
b3RoZXIgY29uZmlnLiBUaGlzIHNjcmlwdCBkb2VzDQogICAgLSMgbm90IGVuYWJsZSBjb25maWdz
IHRoYXQgYXJlIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElmIHdlIGNvbWUgYWNyb3NzIGENCiAgICAt
IyBjb25maWcgQSB0aGF0IGRlcGVuZHMgb24gIUIsIHdlIGNhbiBzdGlsbCBhZGQgQiB0byB0aGUg
bGlzdCBvZiBkZXBlbmRzDQogICAgLSMgdG8ga2VlcCBvbi4gSWYgQSB3YXMgb24gaW4gdGhlIG9y
aWdpbmFsIGNvbmZpZywgQiB3b3VsZCBub3QgaGF2ZSBiZWVuDQogICAgLSMgYW5kIEIgd291bGQg
bm90IGJlIHR1cm5lZCBvbiBieSB0aGlzIHNjcmlwdC4NCiAgICAtIw0KICAgIC1zdWIgcGFyc2Vf
Y29uZmlnX2RlcGVuZHMNCiAgICAtew0KICAgIC0gICAgbXkgKCRwKSA9IEBfOw0KICAgIC0NCiAg
ICAtICAgIHdoaWxlICgkcCA9fiAvWyR2YWxpZF0vKSB7DQogICAgLQ0KICAgIC0JaWYgKCRwID1+
IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykgew0KICAgIC0JICAgIG15ICRjb25mID0gIkNPTkZJ
R18iIC4gJDE7DQogICAgLQ0KICAgIC0JICAgICRwID1+IHMvXlteJHZhbGlkXSpbJHZhbGlkXSsv
LzsNCiAgICAtDQogICAgLQkgICAgIyBXZSBvbmx5IG5lZWQgdG8gcHJvY2VzcyBpZiB0aGUgZGVw
ZW5kIGNvbmZpZyBpcyBhIG1vZHVsZQ0KICAgIC0JICAgIGlmICghZGVmaW5lZCgkb3JpZ19jb25m
aWdzeyRjb25mfSkgfHwgJG9yaWdfY29uZmlnc3skY29uZn0gZXEgInkiKSB7DQogICAgLQkJbmV4
dDsNCiAgICAtCSAgICB9DQogICAgLQ0KICAgIC0JICAgIGlmICghZGVmaW5lZCgkY29uZmlnc3sk
Y29uZn0pKSB7DQogICAgLQkJIyBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoaXMgY29uZmlnIGhh
cyBpdHMNCiAgICAtCQkjIGRlcGVuZGVuY2llcyBtZXQuDQogICAgLQkJJHJlcGVhdCA9IDE7ICMg
ZG8gYWdhaW4NCiAgICAtCQlkcHJpbnQgIiRjb25mIHNlbGVjdGVkIGJ5IGRlcGVuZCAkZGVwY29u
ZmlnXG4iOw0KICAgIC0JCSRjb25maWdzeyRjb25mfSA9IDE7DQogICAgLQkgICAgfQ0KICAgIC0J
fSBlbHNlIHsNCiAgICAtCSAgICBkaWUgInRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiI7DQogICAg
LQl9DQogICAgLSAgICB9DQogICAgLX0NCiAgICAtDQogICAgLSMgU2VsZWN0IGlzIHRyZWF0ZWQg
YSBiaXQgZGlmZmVyZW50bHkgdGhhbiBkZXBlbmRzLiBXZSBjYWxsIHRoaXMNCiAgICAtIyB3aGVu
IGEgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIHJlcXVpcmVzIGFub3RoZXIgY29uZmlnIHRvIGJl
DQogICAgLSMgc2VsZWN0ZWQuIFdlIHVzZSB0byBqdXN0IHNlbGVjdCBhbGwgY29uZmlncyB0aGF0
IHNlbGVjdGVkIHRoaXMNCiAgICAtIyBjb25maWcsIGJ1dCBmb3VuZCB0aGF0IHRoYXQgY2FuIGJh
bGxvb24gaW50byBlbmFibGluZyBodW5kcmVkcw0KICAgIC0jIG9mIGNvbmZpZ3MgdGhhdCB3ZSBk
byBub3QgY2FyZSBhYm91dC4NCiAgICAtIw0KICAgIC0jIFRoZSBpZGVhIGlzIHdlIGxvb2sgYXQg
YWxsIHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IGl0LiBJZiBvbmUNCiAgICAtIyBpcyBhbHJlYWR5
IGluIG91ciBsaXN0IG9mIGNvbmZpZ3MgdG8gZW5hYmxlLCB0aGVuIHRoZXJlJ3Mgbm90aGluZw0K
ICAgIC0jIGVsc2UgdG8gZG8uIElmIHRoZXJlIGlzbid0LCB3ZSBwaWNrIHRoZSBmaXJzdCBjb25m
aWcgdGhhdCB3YXMNCiAgICAtIyBlbmFibGVkIGluIHRoZSBvcmlnbmFsIGNvbmZpZyBhbmQgdXNl
IHRoYXQuDQogICAgLXN1YiBwYXJzZV9jb25maWdfc2VsZWN0cw0KICAgIC17DQogICAgLSAgICBt
eSAoJGNvbmZpZywgJHApID0gQF87DQogICAgLQ0KICAgIC0gICAgbXkgJG5leHRfY29uZmlnOw0K
ICAgIC0NCiAgICAtICAgIHdoaWxlICgkcCA9fiAvWyR2YWxpZF0vKSB7DQogICAgLQ0KICAgIC0J
aWYgKCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykgew0KICAgIC0JICAgIG15ICRjb25m
ID0gIkNPTkZJR18iIC4gJDE7DQogICAgLQ0KICAgIC0JICAgICRwID1+IHMvXlteJHZhbGlkXSpb
JHZhbGlkXSsvLzsNCiAgICAtDQogICAgLQkgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGlzIGNvbmZp
ZyBleGlzdHMgaW4gdGhlIGN1cnJlbnQgLmNvbmZpZyBmaWxlDQogICAgLQkgICAgaWYgKCFkZWZp
bmVkKCRvcmlnX2NvbmZpZ3N7JGNvbmZ9KSkgew0KICAgIC0JCWRwcmludCAiJGNvbmYgbm90IHNl
dCBmb3IgJGNvbmZpZyBzZWxlY3RcbiI7DQogICAgLQkJbmV4dDsNCiAgICAtCSAgICB9DQogICAg
LQ0KICAgIC0JICAgICMgQ2hlY2sgaWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtb2R1bGUgc2Vs
ZWN0cyB0aGlzIGNvbmZpZw0KICAgIC0JICAgIGlmIChkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7JGNv
bmZ9KSAmJiAkb3JpZ19jb25maWdzeyRjb25mfSBuZSAibSIpIHsNCiAgICAtCQlkcHJpbnQgIiRj
b25mIChub24gbW9kdWxlKSBzZWxlY3RzIGNvbmZpZywgd2UgYXJlIGdvb2RcbiI7DQogICAgLQkJ
IyB3ZSBhcmUgZ29vZCB3aXRoIHRoaXMNCiAgICAtCQlyZXR1cm47DQogICAgLQkgICAgfQ0KICAg
IC0JICAgIGlmIChkZWZpbmVkKCRjb25maWdzeyRjb25mfSkpIHsNCiAgICAtCQlkcHJpbnQgIiRj
b25mIHNlbGVjdHMgJGNvbmZpZyBzbyB3ZSBhcmUgZ29vZFxuIjsNCiAgICAtCQkjIEEgc2V0IGNv
bmZpZyBzZWxlY3RzIHRoaXMgY29uZmlnLCB3ZSBhcmUgZ29vZA0KICAgIC0JCXJldHVybjsNCiAg
ICAtCSAgICB9DQogICAgLQkgICAgIyBTZXQgdGhpcyBjb25maWcgdG8gYmUgc2VsZWN0ZWQNCiAg
ICAtCSAgICBpZiAoIWRlZmluZWQoJG5leHRfY29uZmlnKSkgew0KICAgIC0JCSRuZXh0X2NvbmZp
ZyA9ICRjb25mOw0KICAgIC0JICAgIH0NCiAgICAtCX0gZWxzZSB7DQogICAgLQkgICAgZGllICJ0
aGlzIHNob3VsZCBuZXZlciBoYXBwZW4iOw0KICAgIC0JfQ0KICAgIC0gICAgfQ0KICAgIC0NCiAg
ICAtICAgICMgSWYgbm8gcG9zc2libGUgY29uZmlnIHNlbGVjdGVkIHRoaXMsIHRoZW4gc29tZXRo
aW5nIGhhcHBlbmVkLg0KICAgIC0gICAgaWYgKCFkZWZpbmVkKCRuZXh0X2NvbmZpZykpIHsNCiAg
ICAtCXByaW50IFNUREVSUiAiV0FSTklORzogJGNvbmZpZyBpcyByZXF1aXJlZCwgYnV0IG5vdGhp
bmcgaW4gdGhlXG4iOw0KICAgIC0JcHJpbnQgU1RERVJSICIgIGN1cnJlbnQgY29uZmlnIHNlbGVj
dHMgaXQuXG4iOw0KICAgIC0JcmV0dXJuOw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICAgICMg
SWYgd2UgYXJlIGhlcmUsIHRoZW4gd2UgZm91bmQgbm8gY29uZmlnIHRoYXQgaXMgc2V0IGFuZA0K
ICAgIC0gICAgIyBzZWxlY3RzIHRoaXMgY29uZmlnLiBSZXBlYXQuDQogICAgLSAgICAkcmVwZWF0
ID0gMTsNCiAgICAtICAgICMgTWFrZSB0aGlzIGNvbmZpZyBuZWVkIHRvIGJlIHNlbGVjdGVkDQog
ICAgLSAgICAkY29uZmlnc3skbmV4dF9jb25maWd9ID0gMTsNCiAgICAtICAgIGRwcmludCAiJG5l
eHRfY29uZmlnIHNlbGVjdGVkIGJ5IHNlbGVjdCAkY29uZmlnXG4iOw0KICAgIC19DQogICAgLQ0K
ICAgIC1teSAlcHJvY2Vzc19zZWxlY3RzOw0KICAgIC0NCiAgICAtIyBsb29wIHRocm91Z2ggYWxs
IGNvbmZpZ3MsIHNlbGVjdCB0aGVpciBkZXBlbmRlbmNpZXMuDQogICAgLXN1YiBsb29wX2RlcGVu
ZCB7DQogICAgLSAgICAkcmVwZWF0ID0gMTsNCiAgICAtDQogICAgLSAgICB3aGlsZSAoJHJlcGVh
dCkgew0KICAgIC0JJHJlcGVhdCA9IDA7DQogICAgLQ0KICAgIC0gICAgICBmb3Jsb29wOg0KICAg
IC0JZm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVjb25maWdzKSB7DQogICAgLQ0KICAgIC0JICAg
ICMgSWYgdGhpcyBjb25maWcgaXMgbm90IGEgbW9kdWxlLCB3ZSBkbyBub3QgbmVlZCB0byBwcm9j
ZXNzIGl0DQogICAgLQkgICAgaWYgKGRlZmluZWQoJG9yaWdfY29uZmlnc3skY29uZmlnfSkgJiYg
JG9yaWdfY29uZmlnc3skY29uZmlnfSBuZSAibSIpIHsNCiAgICAtCQluZXh0IGZvcmxvb3A7DQog
ICAgLQkgICAgfQ0KICAgIC0NCiAgICAtCSAgICAkY29uZmlnID1+IHMvXkNPTkZJR18vLzsNCiAg
ICAtCSAgICAkZGVwY29uZmlnID0gJGNvbmZpZzsNCiAgICAtDQogICAgLQkgICAgaWYgKGRlZmlu
ZWQoJGRlcGVuZHN7JGNvbmZpZ30pKSB7DQogICAgLQkJIyBUaGlzIGNvbmZpZyBoYXMgZGVwZW5k
ZW5jaWVzLiBNYWtlIHN1cmUgdGhleSBhcmUgYWxzbyBpbmNsdWRlZA0KICAgIC0JCXBhcnNlX2Nv
bmZpZ19kZXBlbmRzICRkZXBlbmRzeyRjb25maWd9Ow0KICAgIC0JICAgIH0NCiAgICAtDQogICAg
LQkgICAgIyBJZiB0aGUgY29uZmlnIGhhcyBubyBwcm9tcHQsIHRoZW4gd2UgbmVlZCB0byBjaGVj
ayBpZiBhIGNvbmZpZw0KICAgIC0JICAgICMgdGhhdCBpcyBlbmFibGVkIHNlbGVjdGVkIGl0LiBP
ciBpZiB3ZSBuZWVkIHRvIGVuYWJsZSBvbmUuDQogICAgLQkgICAgaWYgKCFkZWZpbmVkKCRwcm9t
cHRzeyRjb25maWd9KSAmJiBkZWZpbmVkKCRzZWxlY3RzeyRjb25maWd9KSkgew0KICAgIC0JCSRw
cm9jZXNzX3NlbGVjdHN7JGNvbmZpZ30gPSAxOw0KICAgIC0JICAgIH0NCiAgICAtCX0NCiAgICAt
ICAgIH0NCiAgICAtfQ0KICAgIC0NCiAgICAtc3ViIGxvb3Bfc2VsZWN0IHsNCiAgICAtDQogICAg
LSAgICBmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJXByb2Nlc3Nfc2VsZWN0cykgew0KICAgIC0J
JGNvbmZpZyA9fiBzL15DT05GSUdfLy87DQogICAgLQ0KICAgIC0JZHByaW50ICJQcm9jZXNzIHNl
bGVjdCAkY29uZmlnXG4iOw0KICAgIC0NCiAgICAtCSMgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5k
IG11c3QgYmUgc2VsZWN0ZWQuDQogICAgLQlwYXJzZV9jb25maWdfc2VsZWN0cyAkY29uZmlnLCAk
c2VsZWN0c3skY29uZmlnfTsNCiAgICAtICAgIH0NCiAgICAtfQ0KICAgIC0NCiAgICAtd2hpbGUg
KCRyZXBlYXQpIHsNCiAgICAtICAgICMgR2V0IHRoZSBmaXJzdCBzZXQgb2YgY29uZmlncyBhbmQg
dGhlaXIgZGVwZW5kZW5jaWVzLg0KICAgIC0gICAgbG9vcF9kZXBlbmQ7DQogICAgLQ0KICAgIC0g
ICAgJHJlcGVhdCA9IDA7DQogICAgLQ0KICAgIC0gICAgIyBOb3cgd2UgbmVlZCB0byBzZWUgaWYg
d2UgaGF2ZSB0byBjaGVjayBzZWxlY3RzOw0KICAgIC0gICAgbG9vcF9zZWxlY3Q7DQogICAgLX0N
CiAgICAtDQogICAgLW15ICVzZXRjb25maWdzOw0KICAgIC0NCiAgICAtIyBGaW5hbGx5LCByZWFk
IHRoZSAuY29uZmlnIGZpbGUgYW5kIHR1cm4gb2ZmIGFueSBtb2R1bGUgZW5hYmxlZCB0aGF0DQog
ICAgLSMgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb24gdG8ga2VlcCBlbmFibGVkLg0KICAgIC1m
b3JlYWNoIG15ICRsaW5lIChAY29uZmlnX2ZpbGUpIHsNCiAgICAtICAgICRfID0gJGxpbmU7DQog
ICAgLQ0KICAgIC0gICAgaWYgKC9DT05GSUdfSUtDT05GSUcvKSB7DQogICAgLQlpZiAoLyMgQ09O
RklHX0lLQ09ORklHIGlzIG5vdCBzZXQvKSB7DQogICAgLQkgICAgIyBlbmFibGUgSUtDT05GSUcg
YXQgbGVhc3QgYXMgYSBtb2R1bGUNCiAgICAtCSAgICBwcmludCAiQ09ORklHX0lLQ09ORklHPW1c
biI7DQogICAgLQkgICAgIyBkb24ndCBhc2sgYWJvdXQgUFJPQw0KICAgIC0JICAgIHByaW50ICIj
IENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXRcbiI7DQogICAgLQl9IGVsc2Ugew0KICAg
IC0JICAgIHByaW50Ow0KICAgIC0JfQ0KICAgIC0JbmV4dDsNCiAgICAtICAgIH0NCiAgICAtDQog
ICAgLSAgICBpZiAoL0NPTkZJR19NT0RVTEVfU0lHX0tFWT0iKC4rKSIvKSB7DQogICAgLSAgICAg
ICAgbXkgJG9yaWdfY2VydCA9ICQxOw0KICAgIC0gICAgICAgIG15ICRkZWZhdWx0X2NlcnQgPSAi
Y2VydHMvc2lnbmluZ19rZXkucGVtIjsNCiAgICAtDQogICAgLSAgICAgICAgIyBDaGVjayB0aGF0
IHRoZSBsb2dpYyBpbiB0aGlzIHNjcmlwdCBzdGlsbCBtYXRjaGVzIHRoZSBvbmUgaW4gS2NvbmZp
Zw0KICAgIC0gICAgICAgIGlmICghZGVmaW5lZCgkZGVwZW5kc3siTU9EVUxFX1NJR19LRVkifSkg
fHwNCiAgICAtICAgICAgICAgICAgJGRlcGVuZHN7Ik1PRFVMRV9TSUdfS0VZIn0gIX4gLyJcUSRk
ZWZhdWx0X2NlcnRcRSIvKSB7DQogICAgLSAgICAgICAgICAgIHByaW50IFNUREVSUiAiV0FSTklO
RzogTU9EVUxFX1NJR19LRVkgYXNzZXJ0aW9uIGZhaWx1cmUsICIsDQogICAgLSAgICAgICAgICAg
ICAgICAidXBkYXRlIG5lZWRlZCB0byAiLCBfX0ZJTEVfXywgIiBsaW5lICIsIF9fTElORV9fLCAi
XG4iOw0KICAgIC0gICAgICAgICAgICBwcmludDsNCiAgICAtICAgICAgICB9IGVsc2lmICgkb3Jp
Z19jZXJ0IG5lICRkZWZhdWx0X2NlcnQgJiYgISAtZiAkb3JpZ19jZXJ0KSB7DQogICAgLSAgICAg
ICAgICAgIHByaW50IFNUREVSUiAiTW9kdWxlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZW5hYmxl
ZCBidXQgIiwNCiAgICAtICAgICAgICAgICAgICAgICJtb2R1bGUgc2lnbmluZyBrZXkgXCIkb3Jp
Z19jZXJ0XCIgbm90IGZvdW5kLiBSZXNldHRpbmcgIiwNCiAgICAtICAgICAgICAgICAgICAgICJz
aWduaW5nIGtleSB0byBkZWZhdWx0IHZhbHVlLlxuIjsNCiAgICAtICAgICAgICAgICAgcHJpbnQg
IkNPTkZJR19NT0RVTEVfU0lHX0tFWT1cIiRkZWZhdWx0X2NlcnRcIlxuIjsNCiAgICAtICAgICAg
ICB9IGVsc2Ugew0KICAgIC0gICAgICAgICAgICBwcmludDsNCiAgICAtICAgICAgICB9DQogICAg
LSAgICAgICAgbmV4dDsNCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgICBpZiAoL0NPTkZJR19T
WVNURU1fVFJVU1RFRF9LRVlTPSIoLispIi8pIHsNCiAgICAtICAgICAgICBteSAkb3JpZ19rZXlz
ID0gJDE7DQogICAgLQ0KICAgIC0gICAgICAgIGlmICghIC1mICRvcmlnX2tleXMpIHsNCiAgICAt
ICAgICAgICAgICAgcHJpbnQgU1RERVJSICJTeXN0ZW0ga2V5cmluZyBlbmFibGVkIGJ1dCBrZXlz
IFwiJG9yaWdfa2V5c1wiICIsDQogICAgLSAgICAgICAgICAgICAgICAibm90IGZvdW5kLiBSZXNl
dHRpbmcga2V5cyB0byBkZWZhdWx0IHZhbHVlLlxuIjsNCiAgICAtICAgICAgICAgICAgcHJpbnQg
IkNPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlTPVwiXCJcbiI7DQogICAgLSAgICAgICAgfSBlbHNl
IHsNCiAgICAtICAgICAgICAgICAgcHJpbnQ7DQogICAgLSAgICAgICAgfQ0KICAgIC0gICAgICAg
IG5leHQ7DQogICAgLSAgICB9DQogICAgLQ0KICAgIC0gICAgaWYgKC9eKENPTkZJRy4qKT0obXx5
KS8pIHsNCiAgICAtCWlmIChkZWZpbmVkKCRjb25maWdzeyQxfSkpIHsNCiAgICAtCSAgICBpZiAo
JGxvY2FseWVzY29uZmlnKSB7DQogICAgLQkgICAgICAgICRzZXRjb25maWdzeyQxfSA9ICd5JzsN
CiAgICAtCQlwcmludCAiJDE9eVxuIjsNCiAgICAtCQluZXh0Ow0KICAgIC0JICAgIH0gZWxzZSB7
DQogICAgLQkgICAgICAgICRzZXRjb25maWdzeyQxfSA9ICQyOw0KICAgIC0JICAgIH0NCiAgICAt
CX0gZWxzaWYgKCQyIGVxICJtIikgew0KICAgIC0JICAgIHByaW50ICIjICQxIGlzIG5vdCBzZXRc
biI7DQogICAgLQkgICAgbmV4dDsNCiAgICAtCX0NCiAgICAtICAgIH0NCiAgICAtICAgIHByaW50
Ow0KICAgIC19DQogICAgLQ0KICAgIC0jIEludGVncml0eSBjaGVjaywgbWFrZSBzdXJlIGFsbCBt
b2R1bGVzIHRoYXQgd2Ugd2FudCBlbmFibGVkIGRvDQogICAgLSMgaW5kZWVkIGhhdmUgdGhlaXIg
Y29uZmlncyBzZXQuDQogICAgLWxvb3A6DQogICAgLWZvcmVhY2ggbXkgJG1vZHVsZSAoa2V5cygl
bW9kdWxlcykpIHsNCiAgICAtICAgIGlmIChkZWZpbmVkKCRvYmplY3RzeyRtb2R1bGV9KSkgew0K
ICAgIC0JbXkgQGFyciA9IEB7JG9iamVjdHN7JG1vZHVsZX19Ow0KICAgIC0JZm9yZWFjaCBteSAk
Y29uZiAoQGFycikgew0KICAgIC0JICAgIGlmIChkZWZpbmVkKCRzZXRjb25maWdzeyRjb25mfSkp
IHsNCiAgICAtCQluZXh0IGxvb3A7DQogICAgLQkgICAgfQ0KICAgIC0JfQ0KICAgIC0JcHJpbnQg
U1RERVJSICJtb2R1bGUgJG1vZHVsZSBkaWQgbm90IGhhdmUgY29uZmlncyI7DQogICAgLQlmb3Jl
YWNoIG15ICRjb25mIChAYXJyKSB7DQogICAgLQkgICAgcHJpbnQgU1RERVJSICIgIiAsICRjb25m
Ow0KICAgIC0JfQ0KICAgIC0JcHJpbnQgU1RERVJSICJcbiI7DQogICAgLSAgICB9DQogICAgLX0N
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9zeW1ib2wuYyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvc3ltYm9sLmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCAxZjkyNjZkLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9zeW1i
b2wuYw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxMzMxICswLDAgQEANCiAgICAtLy8g
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtLyoNCiAgICAtICogQ29weXJp
Z2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgIC0g
Ki8NCiAgICAtDQogICAgLSNpbmNsdWRlIDxjdHlwZS5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGli
Lmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAtI2luY2x1ZGUgPHJlZ2V4Lmg+DQog
ICAgLSNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5o
Ig0KICAgIC0NCiAgICAtc3RydWN0IHN5bWJvbCBzeW1ib2xfeWVzID0gew0KICAgIC0JLm5hbWUg
PSAieSIsDQogICAgLQkuY3VyciA9IHsgInkiLCB5ZXMgfSwNCiAgICAtCS5mbGFncyA9IFNZTUJP
TF9DT05TVHxTWU1CT0xfVkFMSUQsDQogICAgLX0sIHN5bWJvbF9tb2QgPSB7DQogICAgLQkubmFt
ZSA9ICJtIiwNCiAgICAtCS5jdXJyID0geyAibSIsIG1vZCB9LA0KICAgIC0JLmZsYWdzID0gU1lN
Qk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwNCiAgICAtfSwgc3ltYm9sX25vID0gew0KICAgIC0JLm5h
bWUgPSAibiIsDQogICAgLQkuY3VyciA9IHsgIm4iLCBubyB9LA0KICAgIC0JLmZsYWdzID0gU1lN
Qk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwNCiAgICAtfSwgc3ltYm9sX2VtcHR5ID0gew0KICAgIC0J
Lm5hbWUgPSAiIiwNCiAgICAtCS5jdXJyID0geyAiIiwgbm8gfSwNCiAgICAtCS5mbGFncyA9IFNZ
TUJPTF9WQUxJRCwNCiAgICAtfTsNCiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2wgKnN5bV9kZWZj
b25maWdfbGlzdDsNCiAgICAtc3RydWN0IHN5bWJvbCAqbW9kdWxlc19zeW07DQogICAgLXRyaXN0
YXRlIG1vZHVsZXNfdmFsOw0KICAgIC0NCiAgICAtZW51bSBzeW1ib2xfdHlwZSBzeW1fZ2V0X3R5
cGUoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQllbnVtIHN5bWJvbF90eXBlIHR5
cGUgPSBzeW0tPnR5cGU7DQogICAgLQ0KICAgIC0JaWYgKHR5cGUgPT0gU19UUklTVEFURSkgew0K
ICAgIC0JCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHll
cykNCiAgICAtCQkJdHlwZSA9IFNfQk9PTEVBTjsNCiAgICAtCQllbHNlIGlmIChtb2R1bGVzX3Zh
bCA9PSBubykNCiAgICAtCQkJdHlwZSA9IFNfQk9PTEVBTjsNCiAgICAtCX0NCiAgICAtCXJldHVy
biB0eXBlOw0KICAgIC19DQogICAgLQ0KICAgIC1jb25zdCBjaGFyICpzeW1fdHlwZV9uYW1lKGVu
dW0gc3ltYm9sX3R5cGUgdHlwZSkNCiAgICAtew0KICAgIC0Jc3dpdGNoICh0eXBlKSB7DQogICAg
LQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCQlyZXR1cm4gImJvb2wiOw0KICAgIC0JY2FzZSBTX1RS
SVNUQVRFOg0KICAgIC0JCXJldHVybiAidHJpc3RhdGUiOw0KICAgIC0JY2FzZSBTX0lOVDoNCiAg
ICAtCQlyZXR1cm4gImludGVnZXIiOw0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAtCQlyZXR1cm4g
ImhleCI7DQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCXJldHVybiAic3RyaW5nIjsNCiAg
ICAtCWNhc2UgU19VTktOT1dOOg0KICAgIC0JCXJldHVybiAidW5rbm93biI7DQogICAgLQl9DQog
ICAgLQlyZXR1cm4gIj8/PyI7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBwcm9wZXJ0eSAq
c3ltX2dldF9jaG9pY2VfcHJvcChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0
cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtDQogICAgLQlmb3JfYWxsX2Nob2ljZXMoc3ltLCBw
cm9wKQ0KICAgIC0JCXJldHVybiBwcm9wOw0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAg
ICAtDQogICAgLXN0YXRpYyBzdHJ1Y3QgcHJvcGVydHkgKnN5bV9nZXRfZGVmYXVsdF9wcm9wKHN0
cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0K
ICAgIC0NCiAgICAtCWZvcl9hbGxfZGVmYXVsdHMoc3ltLCBwcm9wKSB7DQogICAgLQkJcHJvcC0+
dmlzaWJsZS50cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsNCiAgICAt
CQlpZiAocHJvcC0+dmlzaWJsZS50cmkgIT0gbm8pDQogICAgLQkJCXJldHVybiBwcm9wOw0KICAg
IC0JfQ0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBwcm9w
ZXJ0eSAqc3ltX2dldF9yYW5nZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAg
IC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0NCiAgICAtCWZvcl9hbGxfcHJvcGVydGll
cyhzeW0sIHByb3AsIFBfUkFOR0UpIHsNCiAgICAtCQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJf
Y2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgIC0JCWlmIChwcm9wLT52aXNpYmxl
LnRyaSAhPSBubykNCiAgICAtCQkJcmV0dXJuIHByb3A7DQogICAgLQl9DQogICAgLQlyZXR1cm4g
TlVMTDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIGxvbmcgbG9uZyBzeW1fZ2V0X3Jhbmdl
X3ZhbChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGludCBiYXNlKQ0KICAgIC17DQogICAgLQlzeW1fY2Fs
Y192YWx1ZShzeW0pOw0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19J
TlQ6DQogICAgLQkJYmFzZSA9IDEwOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JY2FzZSBTX0hFWDoN
CiAgICAtCQliYXNlID0gMTY7DQogICAgLQkJYnJlYWs7DQogICAgLQlkZWZhdWx0Og0KICAgIC0J
CWJyZWFrOw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuIHN0cnRvbGwoc3ltLT5jdXJyLnZhbCwgTlVM
TCwgYmFzZSk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHN5bV92YWxpZGF0ZV9y
YW5nZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAq
cHJvcDsNCiAgICAtCWludCBiYXNlOw0KICAgIC0JbG9uZyBsb25nIHZhbCwgdmFsMjsNCiAgICAt
CWNoYXIgc3RyWzY0XTsNCiAgICAtDQogICAgLQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgIC0J
Y2FzZSBTX0lOVDoNCiAgICAtCQliYXNlID0gMTA7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNl
IFNfSEVYOg0KICAgIC0JCWJhc2UgPSAxNjsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6
DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0JcHJvcCA9IHN5bV9nZXRfcmFuZ2VfcHJv
cChzeW0pOw0KICAgIC0JaWYgKCFwcm9wKQ0KICAgIC0JCXJldHVybjsNCiAgICAtCXZhbCA9IHN0
cnRvbGwoc3ltLT5jdXJyLnZhbCwgTlVMTCwgYmFzZSk7DQogICAgLQl2YWwyID0gc3ltX2dldF9y
YW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5zeW0sIGJhc2UpOw0KICAgIC0JaWYgKHZhbCA+PSB2
YWwyKSB7DQogICAgLQkJdmFsMiA9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJpZ2h0
LnN5bSwgYmFzZSk7DQogICAgLQkJaWYgKHZhbCA8PSB2YWwyKQ0KICAgIC0JCQlyZXR1cm47DQog
ICAgLQl9DQogICAgLQlpZiAoc3ltLT50eXBlID09IFNfSU5UKQ0KICAgIC0JCXNwcmludGYoc3Ry
LCAiJWxsZCIsIHZhbDIpOw0KICAgIC0JZWxzZQ0KICAgIC0JCXNwcmludGYoc3RyLCAiMHglbGx4
IiwgdmFsMik7DQogICAgLQlzeW0tPmN1cnIudmFsID0geHN0cmR1cChzdHIpOw0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBzeW1fc2V0X2NoYW5nZWQoc3RydWN0IHN5bWJvbCAqc3lt
KQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQ0KICAgIC0Jc3lt
LT5mbGFncyB8PSBTWU1CT0xfQ0hBTkdFRDsNCiAgICAtCWZvciAocHJvcCA9IHN5bS0+cHJvcDsg
cHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsNCiAgICAtCQlpZiAocHJvcC0+bWVudSkNCiAgICAt
CQkJcHJvcC0+bWVudS0+ZmxhZ3MgfD0gTUVOVV9DSEFOR0VEOw0KICAgIC0JfQ0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBzeW1fc2V0X2FsbF9jaGFuZ2VkKHZvaWQpDQogICAgLXsN
CiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAtCWludCBpOw0KICAgIC0NCiAgICAtCWZv
cl9hbGxfc3ltYm9scyhpLCBzeW0pDQogICAgLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHN5bV9jYWxjX3Zpc2liaWxpdHkoc3RydWN0IHN5
bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlz
dHJ1Y3Qgc3ltYm9sICpjaG9pY2Vfc3ltID0gTlVMTDsNCiAgICAtCXRyaXN0YXRlIHRyaTsNCiAg
ICAtDQogICAgLQkvKiBhbnkgcHJvbXB0IHZpc2libGU/ICovDQogICAgLQl0cmkgPSBubzsNCiAg
ICAtDQogICAgLQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQ0KICAgIC0JCWNob2ljZV9z
eW0gPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsNCiAgICAtDQog
ICAgLQlmb3JfYWxsX3Byb21wdHMoc3ltLCBwcm9wKSB7DQogICAgLQkJcHJvcC0+dmlzaWJsZS50
cmkgPSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsNCiAgICAtCQkvKg0KICAg
IC0JCSAqIFRyaXN0YXRlIGNob2ljZV92YWx1ZXMgd2l0aCB2aXNpYmlsaXR5ICdtb2QnIGFyZQ0K
ICAgIC0JCSAqIG5vdCB2aXNpYmxlIGlmIHRoZSBjb3JyZXNwb25kaW5nIGNob2ljZSdzIHZhbHVl
IGlzDQogICAgLQkJICogJ3llcycuDQogICAgLQkJICovDQogICAgLQkJaWYgKGNob2ljZV9zeW0g
JiYgc3ltLT50eXBlID09IFNfVFJJU1RBVEUgJiYNCiAgICAtCQkgICAgcHJvcC0+dmlzaWJsZS50
cmkgPT0gbW9kICYmIGNob2ljZV9zeW0tPmN1cnIudHJpID09IHllcykNCiAgICAtCQkJcHJvcC0+
dmlzaWJsZS50cmkgPSBubzsNCiAgICAtDQogICAgLQkJdHJpID0gRVhQUl9PUih0cmksIHByb3At
PnZpc2libGUudHJpKTsNCiAgICAtCX0NCiAgICAtCWlmICh0cmkgPT0gbW9kICYmIChzeW0tPnR5
cGUgIT0gU19UUklTVEFURSB8fCBtb2R1bGVzX3ZhbCA9PSBubykpDQogICAgLQkJdHJpID0geWVz
Ow0KICAgIC0JaWYgKHN5bS0+dmlzaWJsZSAhPSB0cmkpIHsNCiAgICAtCQlzeW0tPnZpc2libGUg
PSB0cmk7DQogICAgLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAgLQl9DQogICAgLQlpZiAo
c3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKQ0KICAgIC0JCXJldHVybjsNCiAgICAtCS8qIGRlZmF1
bHRpbmcgdG8gInllcyIgaWYgbm8gZXhwbGljaXQgImRlcGVuZHMgb24iIGFyZSBnaXZlbiAqLw0K
ICAgIC0JdHJpID0geWVzOw0KICAgIC0JaWYgKHN5bS0+ZGlyX2RlcC5leHByKQ0KICAgIC0JCXRy
aSA9IGV4cHJfY2FsY192YWx1ZShzeW0tPmRpcl9kZXAuZXhwcik7DQogICAgLQlpZiAodHJpID09
IG1vZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pDQogICAgLQkJdHJpID0geWVz
Ow0KICAgIC0JaWYgKHN5bS0+ZGlyX2RlcC50cmkgIT0gdHJpKSB7DQogICAgLQkJc3ltLT5kaXJf
ZGVwLnRyaSA9IHRyaTsNCiAgICAtCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICAtCX0NCiAg
ICAtCXRyaSA9IG5vOw0KICAgIC0JaWYgKHN5bS0+cmV2X2RlcC5leHByKQ0KICAgIC0JCXRyaSA9
IGV4cHJfY2FsY192YWx1ZShzeW0tPnJldl9kZXAuZXhwcik7DQogICAgLQlpZiAodHJpID09IG1v
ZCAmJiBzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4pDQogICAgLQkJdHJpID0geWVzOw0K
ICAgIC0JaWYgKHN5bS0+cmV2X2RlcC50cmkgIT0gdHJpKSB7DQogICAgLQkJc3ltLT5yZXZfZGVw
LnRyaSA9IHRyaTsNCiAgICAtCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICAtCX0NCiAgICAt
CXRyaSA9IG5vOw0KICAgIC0JaWYgKHN5bS0+aW1wbGllZC5leHByICYmIHN5bS0+ZGlyX2RlcC50
cmkgIT0gbm8pDQogICAgLQkJdHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+aW1wbGllZC5leHBy
KTsNCiAgICAtCWlmICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVB
TikNCiAgICAtCQl0cmkgPSB5ZXM7DQogICAgLQlpZiAoc3ltLT5pbXBsaWVkLnRyaSAhPSB0cmkp
IHsNCiAgICAtCQlzeW0tPmltcGxpZWQudHJpID0gdHJpOw0KICAgIC0JCXN5bV9zZXRfY2hhbmdl
ZChzeW0pOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBGaW5kIHRo
ZSBkZWZhdWx0IHN5bWJvbCBmb3IgYSBjaG9pY2UuDQogICAgLSAqIEZpcnN0IHRyeSB0aGUgZGVm
YXVsdCB2YWx1ZXMgZm9yIHRoZSBjaG9pY2Ugc3ltYm9sDQogICAgLSAqIE5leHQgbG9jYXRlIHRo
ZSBmaXJzdCB2aXNpYmxlIGNob2ljZSB2YWx1ZQ0KICAgIC0gKiBSZXR1cm4gTlVMTCBpZiBub25l
IHdhcyBmb3VuZA0KICAgIC0gKi8NCiAgICAtc3RydWN0IHN5bWJvbCAqc3ltX2Nob2ljZV9kZWZh
dWx0KHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqZGVm
X3N5bTsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBleHByICpl
Ow0KICAgIC0NCiAgICAtCS8qIGFueSBvZiB0aGUgZGVmYXVsdHMgdmlzaWJsZT8gKi8NCiAgICAt
CWZvcl9hbGxfZGVmYXVsdHMoc3ltLCBwcm9wKSB7DQogICAgLQkJcHJvcC0+dmlzaWJsZS50cmkg
PSBleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKTsNCiAgICAtCQlpZiAocHJvcC0+
dmlzaWJsZS50cmkgPT0gbm8pDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCWRlZl9zeW0gPSBw
cm9wX2dldF9zeW1ib2wocHJvcCk7DQogICAgLQkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8p
DQogICAgLQkJCXJldHVybiBkZWZfc3ltOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCS8qIGp1c3Qg
Z2V0IHRoZSBmaXJzdCB2aXNpYmxlIHZhbHVlICovDQogICAgLQlwcm9wID0gc3ltX2dldF9jaG9p
Y2VfcHJvcChzeW0pOw0KICAgIC0JZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBl
LCBkZWZfc3ltKQ0KICAgIC0JCWlmIChkZWZfc3ltLT52aXNpYmxlICE9IG5vKQ0KICAgIC0JCQly
ZXR1cm4gZGVmX3N5bTsNCiAgICAtDQogICAgLQkvKiBmYWlsZWQgdG8gbG9jYXRlIGFueSBkZWZh
dWx0cyAqLw0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBz
dHJ1Y3Qgc3ltYm9sICpzeW1fY2FsY19jaG9pY2Uoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17
DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3ltOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpw
cm9wOw0KICAgIC0Jc3RydWN0IGV4cHIgKmU7DQogICAgLQlpbnQgZmxhZ3M7DQogICAgLQ0KICAg
IC0JLyogZmlyc3QgY2FsY3VsYXRlIGFsbCBjaG9pY2UgdmFsdWVzJyB2aXNpYmlsaXRpZXMgKi8N
CiAgICAtCWZsYWdzID0gc3ltLT5mbGFnczsNCiAgICAtCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9w
cm9wKHN5bSk7DQogICAgLQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIGRl
Zl9zeW0pIHsNCiAgICAtCQlzeW1fY2FsY192aXNpYmlsaXR5KGRlZl9zeW0pOw0KICAgIC0JCWlm
IChkZWZfc3ltLT52aXNpYmxlICE9IG5vKQ0KICAgIC0JCQlmbGFncyAmPSBkZWZfc3ltLT5mbGFn
czsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzeW0tPmZsYWdzICY9IGZsYWdzIHwgflNZTUJPTF9E
RUZfVVNFUjsNCiAgICAtDQogICAgLQkvKiBpcyB0aGUgdXNlciBjaG9pY2UgdmlzaWJsZT8gKi8N
CiAgICAtCWRlZl9zeW0gPSBzeW0tPmRlZltTX0RFRl9VU0VSXS52YWw7DQogICAgLQlpZiAoZGVm
X3N5bSAmJiBkZWZfc3ltLT52aXNpYmxlICE9IG5vKQ0KICAgIC0JCXJldHVybiBkZWZfc3ltOw0K
ICAgIC0NCiAgICAtCWRlZl9zeW0gPSBzeW1fY2hvaWNlX2RlZmF1bHQoc3ltKTsNCiAgICAtDQog
ICAgLQlpZiAoZGVmX3N5bSA9PSBOVUxMKQ0KICAgIC0JCS8qIG5vIGNob2ljZT8gcmVzZXQgdHJp
c3RhdGUgdmFsdWUgKi8NCiAgICAtCQlzeW0tPmN1cnIudHJpID0gbm87DQogICAgLQ0KICAgIC0J
cmV0dXJuIGRlZl9zeW07DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHN5bV93YXJu
X3VubWV0X2RlcChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0cnVjdCBnc3Ry
IGdzID0gc3RyX25ldygpOw0KICAgIC0NCiAgICAtCXN0cl9wcmludGYoJmdzLA0KICAgIC0JCSAg
ICJcbldBUk5JTkc6IHVubWV0IGRpcmVjdCBkZXBlbmRlbmNpZXMgZGV0ZWN0ZWQgZm9yICVzXG4i
LA0KICAgIC0JCSAgIHN5bS0+bmFtZSk7DQogICAgLQlzdHJfcHJpbnRmKCZncywNCiAgICAtCQkg
ICAiICBEZXBlbmRzIG9uIFslY106ICIsDQogICAgLQkJICAgc3ltLT5kaXJfZGVwLnRyaSA9PSBt
b2QgPyAnbScgOiAnbicpOw0KICAgIC0JZXhwcl9nc3RyX3ByaW50KHN5bS0+ZGlyX2RlcC5leHBy
LCAmZ3MpOw0KICAgIC0Jc3RyX3ByaW50ZigmZ3MsICJcbiIpOw0KICAgIC0NCiAgICAtCWV4cHJf
Z3N0cl9wcmludF9yZXZkZXAoc3ltLT5yZXZfZGVwLmV4cHIsICZncywgeWVzLA0KICAgIC0JCQkg
ICAgICAgIiAgU2VsZWN0ZWQgYnkgW3ldOlxuIik7DQogICAgLQlleHByX2dzdHJfcHJpbnRfcmV2
ZGVwKHN5bS0+cmV2X2RlcC5leHByLCAmZ3MsIG1vZCwNCiAgICAtCQkJICAgICAgICIgIFNlbGVj
dGVkIGJ5IFttXTpcbiIpOw0KICAgIC0NCiAgICAtCWZwdXRzKHN0cl9nZXQoJmdzKSwgc3RkZXJy
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCBzeW1fY2FsY192YWx1ZShzdHJ1Y3Qgc3ltYm9s
ICpzeW0pDQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2xfdmFsdWUgbmV3dmFsLCBvbGR2YWw7
DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1Y3QgZXhwciAqZTsNCiAg
ICAtDQogICAgLQlpZiAoIXN5bSkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0JaWYgKHN5
bS0+ZmxhZ3MgJiBTWU1CT0xfVkFMSUQpDQogICAgLQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCWlm
IChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYNCiAgICAtCSAgICBzeW0tPmZsYWdzICYgU1lN
Qk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMpIHsNCiAgICAtCQlzeW0tPmZsYWdzICY9IH5TWU1C
T0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUzsNCiAgICAtCQlwcm9wID0gc3ltX2dldF9jaG9pY2Vf
cHJvcChzeW0pOw0KICAgIC0JCXN5bV9jYWxjX3ZhbHVlKHByb3BfZ2V0X3N5bWJvbChwcm9wKSk7
DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltLT5mbGFncyB8PSBTWU1CT0xfVkFMSUQ7DQogICAg
LQ0KICAgIC0Jb2xkdmFsID0gc3ltLT5jdXJyOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoc3ltLT50
eXBlKSB7DQogICAgLQljYXNlIFNfSU5UOg0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAtCWNhc2Ug
U19TVFJJTkc6DQogICAgLQkJbmV3dmFsID0gc3ltYm9sX2VtcHR5LmN1cnI7DQogICAgLQkJYnJl
YWs7DQogICAgLQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCWNhc2UgU19UUklTVEFURToNCiAgICAt
CQluZXd2YWwgPSBzeW1ib2xfbm8uY3VycjsNCiAgICAtCQlicmVhazsNCiAgICAtCWRlZmF1bHQ6
DQogICAgLQkJc3ltLT5jdXJyLnZhbCA9IHN5bS0+bmFtZTsNCiAgICAtCQlzeW0tPmN1cnIudHJp
ID0gbm87DQogICAgLQkJcmV0dXJuOw0KICAgIC0JfQ0KICAgIC0Jc3ltLT5mbGFncyAmPSB+U1lN
Qk9MX1dSSVRFOw0KICAgIC0NCiAgICAtCXN5bV9jYWxjX3Zpc2liaWxpdHkoc3ltKTsNCiAgICAt
DQogICAgLQlpZiAoc3ltLT52aXNpYmxlICE9IG5vKQ0KICAgIC0JCXN5bS0+ZmxhZ3MgfD0gU1lN
Qk9MX1dSSVRFOw0KICAgIC0NCiAgICAtCS8qIHNldCBkZWZhdWx0IGlmIHJlY3Vyc2l2ZWx5IGNh
bGxlZCAqLw0KICAgIC0Jc3ltLT5jdXJyID0gbmV3dmFsOw0KICAgIC0NCiAgICAtCXN3aXRjaCAo
c3ltX2dldF90eXBlKHN5bSkpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0JY2FzZSBT
X1RSSVNUQVRFOg0KICAgIC0JCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52
aXNpYmxlID09IHllcykgew0KICAgIC0JCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0p
Ow0KICAgIC0JCQluZXd2YWwudHJpID0gKHByb3BfZ2V0X3N5bWJvbChwcm9wKS0+Y3Vyci52YWwg
PT0gc3ltKSA/IHllcyA6IG5vOw0KICAgIC0JCX0gZWxzZSB7DQogICAgLQkJCWlmIChzeW0tPnZp
c2libGUgIT0gbm8pIHsNCiAgICAtCQkJCS8qIGlmIHRoZSBzeW1ib2wgaXMgdmlzaWJsZSB1c2Ug
dGhlIHVzZXIgdmFsdWUNCiAgICAtCQkJCSAqIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRyeSB0
aGUgZGVmYXVsdCB2YWx1ZQ0KICAgIC0JCQkJICovDQogICAgLQkJCQlpZiAoc3ltX2hhc192YWx1
ZShzeW0pKSB7DQogICAgLQkJCQkJbmV3dmFsLnRyaSA9IEVYUFJfQU5EKHN5bS0+ZGVmW1NfREVG
X1VTRVJdLnRyaSwNCiAgICAtCQkJCQkJCSAgICAgIHN5bS0+dmlzaWJsZSk7DQogICAgLQkJCQkJ
Z290byBjYWxjX25ld3ZhbDsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0KICAgIC0JCQlpZiAoc3lt
LT5yZXZfZGVwLnRyaSAhPSBubykNCiAgICAtCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRF
Ow0KICAgIC0JCQlpZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgIC0JCQkJcHJvcCA9IHN5
bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7DQogICAgLQkJCQlpZiAocHJvcCkgew0KICAgIC0JCQkJ
CW5ld3ZhbC50cmkgPSBFWFBSX0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhwciksDQogICAg
LQkJCQkJCQkgICAgICBwcm9wLT52aXNpYmxlLnRyaSk7DQogICAgLQkJCQkJaWYgKG5ld3ZhbC50
cmkgIT0gbm8pDQogICAgLQkJCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOw0KICAgIC0J
CQkJfQ0KICAgIC0JCQkJaWYgKHN5bS0+aW1wbGllZC50cmkgIT0gbm8pIHsNCiAgICAtCQkJCQlz
eW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsNCiAgICAtCQkJCQluZXd2YWwudHJpID0gRVhQUl9P
UihuZXd2YWwudHJpLCBzeW0tPmltcGxpZWQudHJpKTsNCiAgICAtCQkJCX0NCiAgICAtCQkJfQ0K
ICAgIC0JCWNhbGNfbmV3dmFsOg0KICAgIC0JCQlpZiAoc3ltLT5kaXJfZGVwLnRyaSA8IHN5bS0+
cmV2X2RlcC50cmkpDQogICAgLQkJCQlzeW1fd2Fybl91bm1ldF9kZXAoc3ltKTsNCiAgICAtCQkJ
bmV3dmFsLnRyaSA9IEVYUFJfT1IobmV3dmFsLnRyaSwgc3ltLT5yZXZfZGVwLnRyaSk7DQogICAg
LQkJfQ0KICAgIC0JCWlmIChuZXd2YWwudHJpID09IG1vZCAmJg0KICAgIC0JCSAgICAoc3ltX2dl
dF90eXBlKHN5bSkgPT0gU19CT09MRUFOIHx8IHN5bS0+aW1wbGllZC50cmkgPT0geWVzKSkNCiAg
ICAtCQkJbmV3dmFsLnRyaSA9IHllczsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgU19TVFJJ
Tkc6DQogICAgLQljYXNlIFNfSEVYOg0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCQlpZiAoc3lt
LT52aXNpYmxlICE9IG5vICYmIHN5bV9oYXNfdmFsdWUoc3ltKSkgew0KICAgIC0JCQluZXd2YWwu
dmFsID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQl9
DQogICAgLQkJcHJvcCA9IHN5bV9nZXRfZGVmYXVsdF9wcm9wKHN5bSk7DQogICAgLQkJaWYgKHBy
b3ApIHsNCiAgICAtCQkJc3RydWN0IHN5bWJvbCAqZHMgPSBwcm9wX2dldF9zeW1ib2wocHJvcCk7
DQogICAgLQkJCWlmIChkcykgew0KICAgIC0JCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7
DQogICAgLQkJCQlzeW1fY2FsY192YWx1ZShkcyk7DQogICAgLQkJCQluZXd2YWwudmFsID0gZHMt
PmN1cnIudmFsOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVm
YXVsdDoNCiAgICAtCQk7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltLT5jdXJyID0gbmV3dmFs
Ow0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBuZXd2YWwudHJpID09IHllcykNCiAg
ICAtCQlzeW0tPmN1cnIudmFsID0gc3ltX2NhbGNfY2hvaWNlKHN5bSk7DQogICAgLQlzeW1fdmFs
aWRhdGVfcmFuZ2Uoc3ltKTsNCiAgICAtDQogICAgLQlpZiAobWVtY21wKCZvbGR2YWwsICZzeW0t
PmN1cnIsIHNpemVvZihvbGR2YWwpKSkgew0KICAgIC0JCXN5bV9zZXRfY2hhbmdlZChzeW0pOw0K
ICAgIC0JCWlmIChtb2R1bGVzX3N5bSA9PSBzeW0pIHsNCiAgICAtCQkJc3ltX3NldF9hbGxfY2hh
bmdlZCgpOw0KICAgIC0JCQltb2R1bGVzX3ZhbCA9IG1vZHVsZXNfc3ltLT5jdXJyLnRyaTsNCiAg
ICAtCQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0K
ICAgIC0JCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW07DQogICAgLQ0KICAgIC0JCXByb3AgPSBz
eW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSk7DQogICAgLQkJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShw
cm9wLT5leHByLCBlLCBjaG9pY2Vfc3ltKSB7DQogICAgLQkJCWlmICgoc3ltLT5mbGFncyAmIFNZ
TUJPTF9XUklURSkgJiYNCiAgICAtCQkJICAgIGNob2ljZV9zeW0tPnZpc2libGUgIT0gbm8pDQog
ICAgLQkJCQljaG9pY2Vfc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7DQogICAgLQkJCWlmIChz
eW0tPmZsYWdzICYgU1lNQk9MX0NIQU5HRUQpDQogICAgLQkJCQlzeW1fc2V0X2NoYW5nZWQoY2hv
aWNlX3N5bSk7DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX05PX1dSSVRFKQ0KICAgIC0JCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9XUklURTsN
CiAgICAtDQogICAgLQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFM
VUVTKQ0KICAgIC0JCXNldF9hbGxfY2hvaWNlX3ZhbHVlcyhzeW0pOw0KICAgIC19DQogICAgLQ0K
ICAgIC12b2lkIHN5bV9jbGVhcl9hbGxfdmFsaWQodm9pZCkNCiAgICAtew0KICAgIC0Jc3RydWN0
IHN5bWJvbCAqc3ltOw0KICAgIC0JaW50IGk7DQogICAgLQ0KICAgIC0JZm9yX2FsbF9zeW1ib2xz
KGksIHN5bSkNCiAgICAtCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfVkFMSUQ7DQogICAgLQlzeW1f
YWRkX2NoYW5nZV9jb3VudCgxKTsNCiAgICAtCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsN
CiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN0cnVj
dCBzeW1ib2wgKnN5bSwgdHJpc3RhdGUgdmFsKQ0KICAgIC17DQogICAgLQlpbnQgdHlwZSA9IHN5
bV9nZXRfdHlwZShzeW0pOw0KICAgIC0NCiAgICAtCWlmIChzeW0tPnZpc2libGUgPT0gbm8pDQog
ICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0NCiAgICAtCWlmICh0eXBlICE9IFNfQk9PTEVBTiAm
JiB0eXBlICE9IFNfVFJJU1RBVEUpDQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0NCiAgICAt
CWlmICh0eXBlID09IFNfQk9PTEVBTiAmJiB2YWwgPT0gbW9kKQ0KICAgIC0JCXJldHVybiBmYWxz
ZTsNCiAgICAtCWlmIChzeW0tPnZpc2libGUgPD0gc3ltLT5yZXZfZGVwLnRyaSkNCiAgICAtCQly
ZXR1cm4gZmFsc2U7DQogICAgLQlpZiAoc3ltLT5pbXBsaWVkLnRyaSA9PSB5ZXMgJiYgdmFsID09
IG1vZCkNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1
ZShzeW0pICYmIHN5bS0+dmlzaWJsZSA9PSB5ZXMpDQogICAgLQkJcmV0dXJuIHZhbCA9PSB5ZXM7
DQogICAgLQlyZXR1cm4gdmFsID49IHN5bS0+cmV2X2RlcC50cmkgJiYgdmFsIDw9IHN5bS0+dmlz
aWJsZTsNCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN0
cnVjdCBzeW1ib2wgKnN5bSwgdHJpc3RhdGUgdmFsKQ0KICAgIC17DQogICAgLQl0cmlzdGF0ZSBv
bGR2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQ0KICAgIC0JaWYgKG9s
ZHZhbCAhPSB2YWwgJiYgIXN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB2YWwpKQ0KICAg
IC0JCXJldHVybiBmYWxzZTsNCiAgICAtDQogICAgLQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9M
X0RFRl9VU0VSKSkgew0KICAgIC0JCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAg
IC0JCXN5bV9zZXRfY2hhbmdlZChzeW0pOw0KICAgIC0JfQ0KICAgIC0JLyoNCiAgICAtCSAqIHNl
dHRpbmcgYSBjaG9pY2UgdmFsdWUgYWxzbyByZXNldHMgdGhlIG5ldyBmbGFnIG9mIHRoZSBjaG9p
Y2UNCiAgICAtCSAqIHN5bWJvbCBhbmQgYWxsIG90aGVyIGNob2ljZSB2YWx1ZXMuDQogICAgLQkg
Ki8NCiAgICAtCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgew0K
ICAgIC0JCXN0cnVjdCBzeW1ib2wgKmNzID0gcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNl
X3Byb3Aoc3ltKSk7DQogICAgLQkJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0JCXN0cnVj
dCBleHByICplOw0KICAgIC0NCiAgICAtCQljcy0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHN5bTsN
CiAgICAtCQljcy0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgIC0JCXByb3AgPSBzeW1f
Z2V0X2Nob2ljZV9wcm9wKGNzKTsNCiAgICAtCQlmb3IgKGUgPSBwcm9wLT5leHByOyBlOyBlID0g
ZS0+bGVmdC5leHByKSB7DQogICAgLQkJCWlmIChlLT5yaWdodC5zeW0tPnZpc2libGUgIT0gbm8p
DQogICAgLQkJCQllLT5yaWdodC5zeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZfVVNFUjsNCiAgICAt
CQl9DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gdmFs
Ow0KICAgIC0JaWYgKG9sZHZhbCAhPSB2YWwpDQogICAgLQkJc3ltX2NsZWFyX2FsbF92YWxpZCgp
Ow0KICAgIC0NCiAgICAtCXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC10cmlzdGF0
ZSBzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0K
ICAgIC0JdHJpc3RhdGUgb2xkdmFsLCBuZXd2YWw7DQogICAgLQ0KICAgIC0Jb2xkdmFsID0gbmV3
dmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgIC0JZG8gew0KICAgIC0JCXN3
aXRjaCAobmV3dmFsKSB7DQogICAgLQkJY2FzZSBubzoNCiAgICAtCQkJbmV3dmFsID0gbW9kOw0K
ICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIG1vZDoNCiAgICAtCQkJbmV3dmFsID0geWVzOw0K
ICAgIC0JCQlicmVhazsNCiAgICAtCQljYXNlIHllczoNCiAgICAtCQkJbmV3dmFsID0gbm87DQog
ICAgLQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCQlpZiAoc3ltX3NldF90cmlzdGF0ZV92YWx1
ZShzeW0sIG5ld3ZhbCkpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JfSB3aGlsZSAob2xkdmFsICE9
IG5ld3ZhbCk7DQogICAgLQlyZXR1cm4gbmV3dmFsOw0KICAgIC19DQogICAgLQ0KICAgIC1ib29s
IHN5bV9zdHJpbmdfdmFsaWQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpDQog
ICAgLXsNCiAgICAtCXNpZ25lZCBjaGFyIGNoOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoc3ltLT50
eXBlKSB7DQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCXJldHVybiB0cnVlOw0KICAgIC0J
Y2FzZSBTX0lOVDoNCiAgICAtCQljaCA9ICpzdHIrKzsNCiAgICAtCQlpZiAoY2ggPT0gJy0nKQ0K
ICAgIC0JCQljaCA9ICpzdHIrKzsNCiAgICAtCQlpZiAoIWlzZGlnaXQoY2gpKQ0KICAgIC0JCQly
ZXR1cm4gZmFsc2U7DQogICAgLQkJaWYgKGNoID09ICcwJyAmJiAqc3RyICE9IDApDQogICAgLQkJ
CXJldHVybiBmYWxzZTsNCiAgICAtCQl3aGlsZSAoKGNoID0gKnN0cisrKSkgew0KICAgIC0JCQlp
ZiAoIWlzZGlnaXQoY2gpKQ0KICAgIC0JCQkJcmV0dXJuIGZhbHNlOw0KICAgIC0JCX0NCiAgICAt
CQlyZXR1cm4gdHJ1ZTsNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQkJaWYgKHN0clswXSA9PSAn
MCcgJiYgKHN0clsxXSA9PSAneCcgfHwgc3RyWzFdID09ICdYJykpDQogICAgLQkJCXN0ciArPSAy
Ow0KICAgIC0JCWNoID0gKnN0cisrOw0KICAgIC0JCWRvIHsNCiAgICAtCQkJaWYgKCFpc3hkaWdp
dChjaCkpDQogICAgLQkJCQlyZXR1cm4gZmFsc2U7DQogICAgLQkJfSB3aGlsZSAoKGNoID0gKnN0
cisrKSk7DQogICAgLQkJcmV0dXJuIHRydWU7DQogICAgLQljYXNlIFNfQk9PTEVBTjoNCiAgICAt
CWNhc2UgU19UUklTVEFURToNCiAgICAtCQlzd2l0Y2ggKHN0clswXSkgew0KICAgIC0JCWNhc2Ug
J3knOiBjYXNlICdZJzoNCiAgICAtCQljYXNlICdtJzogY2FzZSAnTSc6DQogICAgLQkJY2FzZSAn
bic6IGNhc2UgJ04nOg0KICAgIC0JCQlyZXR1cm4gdHJ1ZTsNCiAgICAtCQl9DQogICAgLQkJcmV0
dXJuIGZhbHNlOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQl9
DQogICAgLX0NCiAgICAtDQogICAgLWJvb2wgc3ltX3N0cmluZ193aXRoaW5fcmFuZ2Uoc3RydWN0
IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpzdHIpDQogICAgLXsNCiAgICAtCXN0cnVjdCBwcm9w
ZXJ0eSAqcHJvcDsNCiAgICAtCWxvbmcgbG9uZyB2YWw7DQogICAgLQ0KICAgIC0Jc3dpdGNoIChz
eW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19TVFJJTkc6DQogICAgLQkJcmV0dXJuIHN5bV9zdHJp
bmdfdmFsaWQoc3ltLCBzdHIpOw0KICAgIC0JY2FzZSBTX0lOVDoNCiAgICAtCQlpZiAoIXN5bV9z
dHJpbmdfdmFsaWQoc3ltLCBzdHIpKQ0KICAgIC0JCQlyZXR1cm4gZmFsc2U7DQogICAgLQkJcHJv
cCA9IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOw0KICAgIC0JCWlmICghcHJvcCkNCiAgICAtCQkJ
cmV0dXJuIHRydWU7DQogICAgLQkJdmFsID0gc3RydG9sbChzdHIsIE5VTEwsIDEwKTsNCiAgICAt
CQlyZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAx
MCkgJiYNCiAgICAtCQkgICAgICAgdmFsIDw9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHIt
PnJpZ2h0LnN5bSwgMTApOw0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAtCQlpZiAoIXN5bV9zdHJp
bmdfdmFsaWQoc3ltLCBzdHIpKQ0KICAgIC0JCQlyZXR1cm4gZmFsc2U7DQogICAgLQkJcHJvcCA9
IHN5bV9nZXRfcmFuZ2VfcHJvcChzeW0pOw0KICAgIC0JCWlmICghcHJvcCkNCiAgICAtCQkJcmV0
dXJuIHRydWU7DQogICAgLQkJdmFsID0gc3RydG9sbChzdHIsIE5VTEwsIDE2KTsNCiAgICAtCQly
ZXR1cm4gdmFsID49IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPmxlZnQuc3ltLCAxNikg
JiYNCiAgICAtCQkgICAgICAgdmFsIDw9IHN5bV9nZXRfcmFuZ2VfdmFsKHByb3AtPmV4cHItPnJp
Z2h0LnN5bSwgMTYpOw0KICAgIC0JY2FzZSBTX0JPT0xFQU46DQogICAgLQljYXNlIFNfVFJJU1RB
VEU6DQogICAgLQkJc3dpdGNoIChzdHJbMF0pIHsNCiAgICAtCQljYXNlICd5JzogY2FzZSAnWSc6
DQogICAgLQkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKTsNCiAg
ICAtCQljYXNlICdtJzogY2FzZSAnTSc6DQogICAgLQkJCXJldHVybiBzeW1fdHJpc3RhdGVfd2l0
aGluX3JhbmdlKHN5bSwgbW9kKTsNCiAgICAtCQljYXNlICduJzogY2FzZSAnTic6DQogICAgLQkJ
CXJldHVybiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbm8pOw0KICAgIC0JCX0NCiAg
ICAtCQlyZXR1cm4gZmFsc2U7DQogICAgLQlkZWZhdWx0Og0KICAgIC0JCXJldHVybiBmYWxzZTsN
CiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShz
dHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCkNCiAgICAtew0KICAgIC0JY29u
c3QgY2hhciAqb2xkdmFsOw0KICAgIC0JY2hhciAqdmFsOw0KICAgIC0JaW50IHNpemU7DQogICAg
LQ0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAg
IC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCXN3aXRjaCAobmV3dmFsWzBdKSB7DQogICAgLQkJ
Y2FzZSAneSc6IGNhc2UgJ1knOg0KICAgIC0JCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1
ZShzeW0sIHllcyk7DQogICAgLQkJY2FzZSAnbSc6IGNhc2UgJ00nOg0KICAgIC0JCQlyZXR1cm4g
c3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1vZCk7DQogICAgLQkJY2FzZSAnbic6IGNhc2Ug
J04nOg0KICAgIC0JCQlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG5vKTsNCiAg
ICAtCQl9DQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0JZGVmYXVsdDoNCiAgICAtCQk7DQog
ICAgLQl9DQogICAgLQ0KICAgIC0JaWYgKCFzeW1fc3RyaW5nX3dpdGhpbl9yYW5nZShzeW0sIG5l
d3ZhbCkpDQogICAgLQkJcmV0dXJuIGZhbHNlOw0KICAgIC0NCiAgICAtCWlmICghKHN5bS0+Zmxh
Z3MgJiBTWU1CT0xfREVGX1VTRVIpKSB7DQogICAgLQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVG
X1VTRVI7DQogICAgLQkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAgLQl9DQogICAgLQ0KICAg
IC0Jb2xkdmFsID0gc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsOw0KICAgIC0Jc2l6ZSA9IHN0cmxl
bihuZXd2YWwpICsgMTsNCiAgICAtCWlmIChzeW0tPnR5cGUgPT0gU19IRVggJiYgKG5ld3ZhbFsw
XSAhPSAnMCcgfHwgKG5ld3ZhbFsxXSAhPSAneCcgJiYgbmV3dmFsWzFdICE9ICdYJykpKSB7DQog
ICAgLQkJc2l6ZSArPSAyOw0KICAgIC0JCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHZhbCA9
IHhtYWxsb2Moc2l6ZSk7DQogICAgLQkJKnZhbCsrID0gJzAnOw0KICAgIC0JCSp2YWwrKyA9ICd4
JzsNCiAgICAtCX0gZWxzZSBpZiAoIW9sZHZhbCB8fCBzdHJjbXAob2xkdmFsLCBuZXd2YWwpKQ0K
ICAgIC0JCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCA9IHZhbCA9IHhtYWxsb2Moc2l6ZSk7DQog
ICAgLQllbHNlDQogICAgLQkJcmV0dXJuIHRydWU7DQogICAgLQ0KICAgIC0Jc3RyY3B5KHZhbCwg
bmV3dmFsKTsNCiAgICAtCWZyZWUoKHZvaWQgKilvbGR2YWwpOw0KICAgIC0Jc3ltX2NsZWFyX2Fs
bF92YWxpZCgpOw0KICAgIC0NCiAgICAtCXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAg
IC0vKg0KICAgIC0gKiBGaW5kIHRoZSBkZWZhdWx0IHZhbHVlIGFzc29jaWF0ZWQgdG8gYSBzeW1i
b2wuDQogICAgLSAqIEZvciB0cmlzdGF0ZSBzeW1ib2wgaGFuZGxlIHRoZSBtb2R1bGVzPW4gY2Fz
ZQ0KICAgIC0gKiBpbiB3aGljaCBjYXNlICJtIiBiZWNvbWVzICJ5Ii4NCiAgICAtICogSWYgdGhl
IHN5bWJvbCBkb2VzIG5vdCBoYXZlIGFueSBkZWZhdWx0IHRoZW4gZmFsbGJhY2sNCiAgICAtICog
dG8gdGhlIGZpeGVkIGRlZmF1bHQgdmFsdWVzLg0KICAgIC0gKi8NCiAgICAtY29uc3QgY2hhciAq
c3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAt
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKmRzOw0KICAgIC0J
Y29uc3QgY2hhciAqc3RyOw0KICAgIC0JdHJpc3RhdGUgdmFsOw0KICAgIC0NCiAgICAtCXN5bV9j
YWxjX3Zpc2liaWxpdHkoc3ltKTsNCiAgICAtCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsN
CiAgICAtCXZhbCA9IHN5bWJvbF9uby5jdXJyLnRyaTsNCiAgICAtCXN0ciA9IHN5bWJvbF9lbXB0
eS5jdXJyLnZhbDsNCiAgICAtDQogICAgLQkvKiBJZiBzeW1ib2wgaGFzIGEgZGVmYXVsdCB2YWx1
ZSBsb29rIGl0IHVwICovDQogICAgLQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsN
CiAgICAtCWlmIChwcm9wICE9IE5VTEwpIHsNCiAgICAtCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0K
ICAgIC0JCWNhc2UgU19CT09MRUFOOg0KICAgIC0JCWNhc2UgU19UUklTVEFURToNCiAgICAtCQkJ
LyogVGhlIHZpc2liaWxpdHkgbWF5IGxpbWl0IHRoZSB2YWx1ZSBmcm9tIHllcyA9PiBtb2QgKi8N
CiAgICAtCQkJdmFsID0gRVhQUl9BTkQoZXhwcl9jYWxjX3ZhbHVlKHByb3AtPmV4cHIpLCBwcm9w
LT52aXNpYmxlLnRyaSk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWRlZmF1bHQ6DQogICAgLQkJ
CS8qDQogICAgLQkJCSAqIFRoZSBmb2xsb3dpbmcgZmFpbHMgdG8gaGFuZGxlIHRoZSBzaXR1YXRp
b24NCiAgICAtCQkJICogd2hlcmUgYSBkZWZhdWx0IHZhbHVlIGlzIGZ1cnRoZXIgbGltaXRlZCBi
eQ0KICAgIC0JCQkgKiB0aGUgdmFsaWQgcmFuZ2UuDQogICAgLQkJCSAqLw0KICAgIC0JCQlkcyA9
IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsNCiAgICAtCQkJaWYgKGRzICE9IE5VTEwpIHsNCiAgICAt
CQkJCXN5bV9jYWxjX3ZhbHVlKGRzKTsNCiAgICAtCQkJCXN0ciA9IChjb25zdCBjaGFyICopZHMt
PmN1cnIudmFsOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCS8q
IEhhbmRsZSBzZWxlY3Qgc3RhdGVtZW50cyAqLw0KICAgIC0JdmFsID0gRVhQUl9PUih2YWwsIHN5
bS0+cmV2X2RlcC50cmkpOw0KICAgIC0NCiAgICAtCS8qIHRyYW5zcG9zZSBtb2QgdG8geWVzIGlm
IG1vZHVsZXMgYXJlIG5vdCBlbmFibGVkICovDQogICAgLQlpZiAodmFsID09IG1vZCkNCiAgICAt
CQlpZiAoIXN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBtb2R1bGVzX3N5bS0+Y3Vyci50cmkg
PT0gbm8pDQogICAgLQkJCXZhbCA9IHllczsNCiAgICAtDQogICAgLQkvKiB0cmFuc3Bvc2UgbW9k
IHRvIHllcyBpZiB0eXBlIGlzIGJvb2wgKi8NCiAgICAtCWlmIChzeW0tPnR5cGUgPT0gU19CT09M
RUFOICYmIHZhbCA9PSBtb2QpDQogICAgLQkJdmFsID0geWVzOw0KICAgIC0NCiAgICAtCS8qIGFk
anVzdCB0aGUgZGVmYXVsdCB2YWx1ZSBpZiB0aGlzIHN5bWJvbCBpcyBpbXBsaWVkIGJ5IGFub3Ro
ZXIgKi8NCiAgICAtCWlmICh2YWwgPCBzeW0tPmltcGxpZWQudHJpKQ0KICAgIC0JCXZhbCA9IHN5
bS0+aW1wbGllZC50cmk7DQogICAgLQ0KICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAt
CWNhc2UgU19CT09MRUFOOg0KICAgIC0JY2FzZSBTX1RSSVNUQVRFOg0KICAgIC0JCXN3aXRjaCAo
dmFsKSB7DQogICAgLQkJY2FzZSBubzogcmV0dXJuICJuIjsNCiAgICAtCQljYXNlIG1vZDogcmV0
dXJuICJtIjsNCiAgICAtCQljYXNlIHllczogcmV0dXJuICJ5IjsNCiAgICAtCQl9DQogICAgLQlj
YXNlIFNfSU5UOg0KICAgIC0JY2FzZSBTX0hFWDoNCiAgICAtCQlyZXR1cm4gc3RyOw0KICAgIC0J
Y2FzZSBTX1NUUklORzoNCiAgICAtCQlyZXR1cm4gc3RyOw0KICAgIC0JY2FzZSBTX1VOS05PV046
DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQlyZXR1cm4gIiI7DQogICAgLX0NCiAgICAt
DQogICAgLWNvbnN0IGNoYXIgKnN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5
bSkNCiAgICAtew0KICAgIC0JdHJpc3RhdGUgdmFsOw0KICAgIC0NCiAgICAtCXN3aXRjaCAoc3lt
LT50eXBlKSB7DQogICAgLQljYXNlIFNfQk9PTEVBTjoNCiAgICAtCWNhc2UgU19UUklTVEFURToN
CiAgICAtCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgLQkJc3dpdGNo
ICh2YWwpIHsNCiAgICAtCQljYXNlIG5vOg0KICAgIC0JCQlyZXR1cm4gIm4iOw0KICAgIC0JCWNh
c2UgbW9kOg0KICAgIC0JCQlzeW1fY2FsY192YWx1ZShtb2R1bGVzX3N5bSk7DQogICAgLQkJCXJl
dHVybiAobW9kdWxlc19zeW0tPmN1cnIudHJpID09IG5vKSA/ICJuIiA6ICJtIjsNCiAgICAtCQlj
YXNlIHllczoNCiAgICAtCQkJcmV0dXJuICJ5IjsNCiAgICAtCQl9DQogICAgLQkJYnJlYWs7DQog
ICAgLQlkZWZhdWx0Og0KICAgIC0JCTsNCiAgICAtCX0NCiAgICAtCXJldHVybiAoY29uc3QgY2hh
ciAqKXN5bS0+Y3Vyci52YWw7DQogICAgLX0NCiAgICAtDQogICAgLWJvb2wgc3ltX2lzX2NoYW5n
YWJsZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXJldHVybiBzeW0tPnZpc2li
bGUgPiBzeW0tPnJldl9kZXAudHJpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdW5zaWdu
ZWQgc3RyaGFzaChjb25zdCBjaGFyICpzKQ0KICAgIC17DQogICAgLQkvKiBmbnYzMiBoYXNoICov
DQogICAgLQl1bnNpZ25lZCBoYXNoID0gMjE2NjEzNjI2MVU7DQogICAgLQlmb3IgKDsgKnM7IHMr
KykNCiAgICAtCQloYXNoID0gKGhhc2ggXiAqcykgKiAweDAxMDAwMTkzOw0KICAgIC0JcmV0dXJu
IGhhc2g7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2wgKnN5bV9sb29rdXAoY29u
c3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpz
eW1ib2w7DQogICAgLQljaGFyICpuZXdfbmFtZTsNCiAgICAtCWludCBoYXNoOw0KICAgIC0NCiAg
ICAtCWlmIChuYW1lKSB7DQogICAgLQkJaWYgKG5hbWVbMF0gJiYgIW5hbWVbMV0pIHsNCiAgICAt
CQkJc3dpdGNoIChuYW1lWzBdKSB7DQogICAgLQkJCWNhc2UgJ3knOiByZXR1cm4gJnN5bWJvbF95
ZXM7DQogICAgLQkJCWNhc2UgJ20nOiByZXR1cm4gJnN5bWJvbF9tb2Q7DQogICAgLQkJCWNhc2Ug
J24nOiByZXR1cm4gJnN5bWJvbF9ubzsNCiAgICAtCQkJfQ0KICAgIC0JCX0NCiAgICAtCQloYXNo
ID0gc3RyaGFzaChuYW1lKSAlIFNZTUJPTF9IQVNIU0laRTsNCiAgICAtDQogICAgLQkJZm9yIChz
eW1ib2wgPSBzeW1ib2xfaGFzaFtoYXNoXTsgc3ltYm9sOyBzeW1ib2wgPSBzeW1ib2wtPm5leHQp
IHsNCiAgICAtCQkJaWYgKHN5bWJvbC0+bmFtZSAmJg0KICAgIC0JCQkgICAgIXN0cmNtcChzeW1i
b2wtPm5hbWUsIG5hbWUpICYmDQogICAgLQkJCSAgICAoZmxhZ3MgPyBzeW1ib2wtPmZsYWdzICYg
ZmxhZ3MNCiAgICAtCQkJCSAgIDogIShzeW1ib2wtPmZsYWdzICYgKFNZTUJPTF9DT05TVHxTWU1C
T0xfQ0hPSUNFKSkpKQ0KICAgIC0JCQkJcmV0dXJuIHN5bWJvbDsNCiAgICAtCQl9DQogICAgLQkJ
bmV3X25hbWUgPSB4c3RyZHVwKG5hbWUpOw0KICAgIC0JfSBlbHNlIHsNCiAgICAtCQluZXdfbmFt
ZSA9IE5VTEw7DQogICAgLQkJaGFzaCA9IDA7DQogICAgLQl9DQogICAgLQ0KICAgIC0Jc3ltYm9s
ID0geG1hbGxvYyhzaXplb2YoKnN5bWJvbCkpOw0KICAgIC0JbWVtc2V0KHN5bWJvbCwgMCwgc2l6
ZW9mKCpzeW1ib2wpKTsNCiAgICAtCXN5bWJvbC0+bmFtZSA9IG5ld19uYW1lOw0KICAgIC0Jc3lt
Ym9sLT50eXBlID0gU19VTktOT1dOOw0KICAgIC0Jc3ltYm9sLT5mbGFncyB8PSBmbGFnczsNCiAg
ICAtDQogICAgLQlzeW1ib2wtPm5leHQgPSBzeW1ib2xfaGFzaFtoYXNoXTsNCiAgICAtCXN5bWJv
bF9oYXNoW2hhc2hdID0gc3ltYm9sOw0KICAgIC0NCiAgICAtCXJldHVybiBzeW1ib2w7DQogICAg
LX0NCiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2wgKnN5bV9maW5kKGNvbnN0IGNoYXIgKm5hbWUp
DQogICAgLXsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bWJvbCA9IE5VTEw7DQogICAgLQlpbnQg
aGFzaCA9IDA7DQogICAgLQ0KICAgIC0JaWYgKCFuYW1lKQ0KICAgIC0JCXJldHVybiBOVUxMOw0K
ICAgIC0NCiAgICAtCWlmIChuYW1lWzBdICYmICFuYW1lWzFdKSB7DQogICAgLQkJc3dpdGNoIChu
YW1lWzBdKSB7DQogICAgLQkJY2FzZSAneSc6IHJldHVybiAmc3ltYm9sX3llczsNCiAgICAtCQlj
YXNlICdtJzogcmV0dXJuICZzeW1ib2xfbW9kOw0KICAgIC0JCWNhc2UgJ24nOiByZXR1cm4gJnN5
bWJvbF9ubzsNCiAgICAtCQl9DQogICAgLQl9DQogICAgLQloYXNoID0gc3RyaGFzaChuYW1lKSAl
IFNZTUJPTF9IQVNIU0laRTsNCiAgICAtDQogICAgLQlmb3IgKHN5bWJvbCA9IHN5bWJvbF9oYXNo
W2hhc2hdOyBzeW1ib2w7IHN5bWJvbCA9IHN5bWJvbC0+bmV4dCkgew0KICAgIC0JCWlmIChzeW1i
b2wtPm5hbWUgJiYNCiAgICAtCQkgICAgIXN0cmNtcChzeW1ib2wtPm5hbWUsIG5hbWUpICYmDQog
ICAgLQkJICAgICEoc3ltYm9sLT5mbGFncyAmIFNZTUJPTF9DT05TVCkpDQogICAgLQkJCQlicmVh
azsNCiAgICAtCX0NCiAgICAtDQogICAgLQlyZXR1cm4gc3ltYm9sOw0KICAgIC19DQogICAgLQ0K
ICAgIC1jb25zdCBjaGFyICpzeW1fZXNjYXBlX3N0cmluZ192YWx1ZShjb25zdCBjaGFyICppbikN
CiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqcDsNCiAgICAtCXNpemVfdCByZXNsZW47DQogICAg
LQljaGFyICpyZXM7DQogICAgLQlzaXplX3QgbDsNCiAgICAtDQogICAgLQlyZXNsZW4gPSBzdHJs
ZW4oaW4pICsgc3RybGVuKCJcIlwiIikgKyAxOw0KICAgIC0NCiAgICAtCXAgPSBpbjsNCiAgICAt
CWZvciAoOzspIHsNCiAgICAtCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOw0KICAgIC0JCXAgKz0g
bDsNCiAgICAtDQogICAgLQkJaWYgKHBbMF0gPT0gJ1wwJykNCiAgICAtCQkJYnJlYWs7DQogICAg
LQ0KICAgIC0JCXJlc2xlbisrOw0KICAgIC0JCXArKzsNCiAgICAtCX0NCiAgICAtDQogICAgLQly
ZXMgPSB4bWFsbG9jKHJlc2xlbik7DQogICAgLQlyZXNbMF0gPSAnXDAnOw0KICAgIC0NCiAgICAt
CXN0cmNhdChyZXMsICJcIiIpOw0KICAgIC0NCiAgICAtCXAgPSBpbjsNCiAgICAtCWZvciAoOzsp
IHsNCiAgICAtCQlsID0gc3RyY3NwbihwLCAiXCJcXCIpOw0KICAgIC0JCXN0cm5jYXQocmVzLCBw
LCBsKTsNCiAgICAtCQlwICs9IGw7DQogICAgLQ0KICAgIC0JCWlmIChwWzBdID09ICdcMCcpDQog
ICAgLQkJCWJyZWFrOw0KICAgIC0NCiAgICAtCQlzdHJjYXQocmVzLCAiXFwiKTsNCiAgICAtCQlz
dHJuY2F0KHJlcywgcCsrLCAxKTsNCiAgICAtCX0NCiAgICAtDQogICAgLQlzdHJjYXQocmVzLCAi
XCIiKTsNCiAgICAtCXJldHVybiByZXM7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBzeW1f
bWF0Y2ggew0KICAgIC0Jc3RydWN0IHN5bWJvbAkqc3ltOw0KICAgIC0Jb2ZmX3QJCXNvLCBlbzsN
CiAgICAtfTsNCiAgICAtDQogICAgLS8qIENvbXBhcmUgbWF0Y2hlZCBzeW1ib2xzIGFzIHRodXM6
DQogICAgLSAqIC0gZmlyc3QsIHN5bWJvbHMgdGhhdCBtYXRjaCBleGFjdGx5DQogICAgLSAqIC0g
dGhlbiwgYWxwaGFiZXRpY2FsIHNvcnQNCiAgICAtICovDQogICAgLXN0YXRpYyBpbnQgc3ltX3Jl
bF9jb21wKGNvbnN0IHZvaWQgKnN5bTEsIGNvbnN0IHZvaWQgKnN5bTIpDQogICAgLXsNCiAgICAt
CWNvbnN0IHN0cnVjdCBzeW1fbWF0Y2ggKnMxID0gc3ltMTsNCiAgICAtCWNvbnN0IHN0cnVjdCBz
eW1fbWF0Y2ggKnMyID0gc3ltMjsNCiAgICAtCWludCBleGFjdDEsIGV4YWN0MjsNCiAgICAtDQog
ICAgLQkvKiBFeGFjdCBtYXRjaDoNCiAgICAtCSAqIC0gaWYgbWF0Y2hlZCBsZW5ndGggb24gc3lt
Ym9sIHMxIGlzIHRoZSBsZW5ndGggb2YgdGhhdCBzeW1ib2wsDQogICAgLQkgKiAgIHRoZW4gdGhp
cyBzeW1ib2wgc2hvdWxkIGNvbWUgZmlyc3Q7DQogICAgLQkgKiAtIGlmIG1hdGNoZWQgbGVuZ3Ro
IG9uIHN5bWJvbCBzMiBpcyB0aGUgbGVuZ3RoIG9mIHRoYXQgc3ltYm9sLA0KICAgIC0JICogICB0
aGVuIHRoaXMgc3ltYm9sIHNob3VsZCBjb21lIGZpcnN0Lg0KICAgIC0JICogTm90ZTogc2luY2Ug
dGhlIHNlYXJjaCBjYW4gYmUgYSByZWdleHAsIGJvdGggc3ltYm9scyBtYXkgbWF0Y2gNCiAgICAt
CSAqIGV4YWN0bHk7IGlmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIGNhbid0IGRlY2lkZSB3aGljaCBj
b21lcyBmaXJzdCwNCiAgICAtCSAqIGFuZCB3ZSBmYWxsYmFjayB0byBzb3J0aW5nIGFscGhhYmV0
aWNhbGx5Lg0KICAgIC0JICovDQogICAgLQlleGFjdDEgPSAoczEtPmVvIC0gczEtPnNvKSA9PSBz
dHJsZW4oczEtPnN5bS0+bmFtZSk7DQogICAgLQlleGFjdDIgPSAoczItPmVvIC0gczItPnNvKSA9
PSBzdHJsZW4oczItPnN5bS0+bmFtZSk7DQogICAgLQlpZiAoZXhhY3QxICYmICFleGFjdDIpDQog
ICAgLQkJcmV0dXJuIC0xOw0KICAgIC0JaWYgKCFleGFjdDEgJiYgZXhhY3QyKQ0KICAgIC0JCXJl
dHVybiAxOw0KICAgIC0NCiAgICAtCS8qIEFzIGEgZmFsbGJhY2ssIHNvcnQgc3ltYm9scyBhbHBo
YWJldGljYWxseSAqLw0KICAgIC0JcmV0dXJuIHN0cmNtcChzMS0+c3ltLT5uYW1lLCBzMi0+c3lt
LT5uYW1lKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RydWN0IHN5bWJvbCAqKnN5bV9yZV9zZWFy
Y2goY29uc3QgY2hhciAqcGF0dGVybikNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5bWJvbCAqc3lt
LCAqKnN5bV9hcnIgPSBOVUxMOw0KICAgIC0Jc3RydWN0IHN5bV9tYXRjaCAqc3ltX21hdGNoX2Fy
ciA9IE5VTEw7DQogICAgLQlpbnQgaSwgY250LCBzaXplOw0KICAgIC0JcmVnZXhfdCByZTsNCiAg
ICAtCXJlZ21hdGNoX3QgbWF0Y2hbMV07DQogICAgLQ0KICAgIC0JY250ID0gc2l6ZSA9IDA7DQog
ICAgLQkvKiBTa2lwIGlmIGVtcHR5ICovDQogICAgLQlpZiAoc3RybGVuKHBhdHRlcm4pID09IDAp
DQogICAgLQkJcmV0dXJuIE5VTEw7DQogICAgLQlpZiAocmVnY29tcCgmcmUsIHBhdHRlcm4sIFJF
R19FWFRFTkRFRHxSRUdfSUNBU0UpKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0NCiAgICAt
CWZvcl9hbGxfc3ltYm9scyhpLCBzeW0pIHsNCiAgICAtCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJP
TF9DT05TVCB8fCAhc3ltLT5uYW1lKQ0KICAgIC0JCQljb250aW51ZTsNCiAgICAtCQlpZiAocmVn
ZXhlYygmcmUsIHN5bS0+bmFtZSwgMSwgbWF0Y2gsIDApKQ0KICAgIC0JCQljb250aW51ZTsNCiAg
ICAtCQlpZiAoY250ID49IHNpemUpIHsNCiAgICAtCQkJdm9pZCAqdG1wOw0KICAgIC0JCQlzaXpl
ICs9IDE2Ow0KICAgIC0JCQl0bXAgPSByZWFsbG9jKHN5bV9tYXRjaF9hcnIsIHNpemUgKiBzaXpl
b2Yoc3RydWN0IHN5bV9tYXRjaCkpOw0KICAgIC0JCQlpZiAoIXRtcCkNCiAgICAtCQkJCWdvdG8g
c3ltX3JlX3NlYXJjaF9mcmVlOw0KICAgIC0JCQlzeW1fbWF0Y2hfYXJyID0gdG1wOw0KICAgIC0J
CX0NCiAgICAtCQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAgIC0JCS8qIEFzIHJlZ2V4ZWMgcmV0
dXJuZWQgMCwgd2Uga25vdyB3ZSBoYXZlIGEgbWF0Y2gsIHNvDQogICAgLQkJICogd2UgY2FuIHVz
ZSBtYXRjaFswXS5ybV9bc2VdbyB3aXRob3V0IGZ1cnRoZXIgY2hlY2tzDQogICAgLQkJICovDQog
ICAgLQkJc3ltX21hdGNoX2FycltjbnRdLnNvID0gbWF0Y2hbMF0ucm1fc287DQogICAgLQkJc3lt
X21hdGNoX2FycltjbnRdLmVvID0gbWF0Y2hbMF0ucm1fZW87DQogICAgLQkJc3ltX21hdGNoX2Fy
cltjbnQrK10uc3ltID0gc3ltOw0KICAgIC0JfQ0KICAgIC0JaWYgKHN5bV9tYXRjaF9hcnIpIHsN
CiAgICAtCQlxc29ydChzeW1fbWF0Y2hfYXJyLCBjbnQsIHNpemVvZihzdHJ1Y3Qgc3ltX21hdGNo
KSwgc3ltX3JlbF9jb21wKTsNCiAgICAtCQlzeW1fYXJyID0gbWFsbG9jKChjbnQrMSkgKiBzaXpl
b2Yoc3RydWN0IHN5bWJvbCAqKSk7DQogICAgLQkJaWYgKCFzeW1fYXJyKQ0KICAgIC0JCQlnb3Rv
IHN5bV9yZV9zZWFyY2hfZnJlZTsNCiAgICAtCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspDQog
ICAgLQkJCXN5bV9hcnJbaV0gPSBzeW1fbWF0Y2hfYXJyW2ldLnN5bTsNCiAgICAtCQlzeW1fYXJy
W2NudF0gPSBOVUxMOw0KICAgIC0JfQ0KICAgIC1zeW1fcmVfc2VhcmNoX2ZyZWU6DQogICAgLQkv
KiBzeW1fbWF0Y2hfYXJyIGNhbiBiZSBOVUxMIGlmIG5vIG1hdGNoLCBidXQgZnJlZShOVUxMKSBp
cyBPSyAqLw0KICAgIC0JZnJlZShzeW1fbWF0Y2hfYXJyKTsNCiAgICAtCXJlZ2ZyZWUoJnJlKTsN
CiAgICAtDQogICAgLQlyZXR1cm4gc3ltX2FycjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAg
ICAtICogV2hlbiB3ZSBjaGVjayBmb3IgcmVjdXJzaXZlIGRlcGVuZGVuY2llcyB3ZSB1c2UgYSBz
dGFjayB0byBzYXZlDQogICAgLSAqIGN1cnJlbnQgc3RhdGUgc28gd2UgY2FuIHByaW50IG91dCBy
ZWxldmFudCBpbmZvIHRvIHVzZXIuDQogICAgLSAqIFRoZSBlbnRyaWVzIGFyZSBsb2NhdGVkIG9u
IHRoZSBjYWxsIHN0YWNrIHNvIG5vIG5lZWQgdG8gZnJlZSBtZW1vcnkuDQogICAgLSAqIE5vdGUg
aW5zZXJ0KCkgcmVtb3ZlKCkgbXVzdCBhbHdheXMgbWF0Y2ggdG8gcHJvcGVybHkgY2xlYXIgdGhl
IHN0YWNrLg0KICAgIC0gKi8NCiAgICAtc3RhdGljIHN0cnVjdCBkZXBfc3RhY2sgew0KICAgIC0J
c3RydWN0IGRlcF9zdGFjayAqcHJldiwgKm5leHQ7DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07
DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1Y3QgZXhwciAqKmV4cHI7
DQogICAgLX0gKmNoZWNrX3RvcDsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGRlcF9zdGFja19p
bnNlcnQoc3RydWN0IGRlcF9zdGFjayAqc3RhY2ssIHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAt
ew0KICAgIC0JbWVtc2V0KHN0YWNrLCAwLCBzaXplb2YoKnN0YWNrKSk7DQogICAgLQlpZiAoY2hl
Y2tfdG9wKQ0KICAgIC0JCWNoZWNrX3RvcC0+bmV4dCA9IHN0YWNrOw0KICAgIC0Jc3RhY2stPnBy
ZXYgPSBjaGVja190b3A7DQogICAgLQlzdGFjay0+c3ltID0gc3ltOw0KICAgIC0JY2hlY2tfdG9w
ID0gc3RhY2s7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGRlcF9zdGFja19yZW1v
dmUodm9pZCkNCiAgICAtew0KICAgIC0JY2hlY2tfdG9wID0gY2hlY2tfdG9wLT5wcmV2Ow0KICAg
IC0JaWYgKGNoZWNrX3RvcCkNCiAgICAtCQljaGVja190b3AtPm5leHQgPSBOVUxMOw0KICAgIC19
DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBDYWxsZWQgd2hlbiB3ZSBoYXZlIGRldGVjdGVkIGEg
cmVjdXJzaXZlIGRlcGVuZGVuY3kuDQogICAgLSAqIGNoZWNrX3RvcCBwb2ludCB0byB0aGUgdG9w
IG9mIHRoZSBzdGFjdCBzbyB3ZSB1c2UNCiAgICAtICogdGhlIC0+cHJldiBwb2ludGVyIHRvIGxv
Y2F0ZSB0aGUgYm90dG9tIG9mIHRoZSBzdGFjay4NCiAgICAtICovDQogICAgLXN0YXRpYyB2b2lk
IHN5bV9jaGVja19wcmludF9yZWN1cnNpdmUoc3RydWN0IHN5bWJvbCAqbGFzdF9zeW0pDQogICAg
LXsNCiAgICAtCXN0cnVjdCBkZXBfc3RhY2sgKnN0YWNrOw0KICAgIC0Jc3RydWN0IHN5bWJvbCAq
c3ltLCAqbmV4dF9zeW07DQogICAgLQlzdHJ1Y3QgbWVudSAqbWVudSA9IE5VTEw7DQogICAgLQlz
dHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQlzdHJ1Y3QgZGVwX3N0YWNrIGN2X3N0YWNrOw0K
ICAgIC0NCiAgICAtCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKGxhc3Rfc3ltKSkgew0KICAgIC0J
CWRlcF9zdGFja19pbnNlcnQoJmN2X3N0YWNrLCBsYXN0X3N5bSk7DQogICAgLQkJbGFzdF9zeW0g
PSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChsYXN0X3N5bSkpOw0KICAgIC0J
fQ0KICAgIC0NCiAgICAtCWZvciAoc3RhY2sgPSBjaGVja190b3A7IHN0YWNrICE9IE5VTEw7IHN0
YWNrID0gc3RhY2stPnByZXYpDQogICAgLQkJaWYgKHN0YWNrLT5zeW0gPT0gbGFzdF9zeW0pDQog
ICAgLQkJCWJyZWFrOw0KICAgIC0JaWYgKCFzdGFjaykgew0KICAgIC0JCWZwcmludGYoc3RkZXJy
LCAidW5leHBlY3RlZCByZWN1cnNpdmUgZGVwZW5kZW5jeSBlcnJvclxuIik7DQogICAgLQkJcmV0
dXJuOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWZvciAoOyBzdGFjazsgc3RhY2sgPSBzdGFjay0+
bmV4dCkgew0KICAgIC0JCXN5bSA9IHN0YWNrLT5zeW07DQogICAgLQkJbmV4dF9zeW0gPSBzdGFj
ay0+bmV4dCA/IHN0YWNrLT5uZXh0LT5zeW0gOiBsYXN0X3N5bTsNCiAgICAtCQlwcm9wID0gc3Rh
Y2stPnByb3A7DQogICAgLQkJaWYgKHByb3AgPT0gTlVMTCkNCiAgICAtCQkJcHJvcCA9IHN0YWNr
LT5zeW0tPnByb3A7DQogICAgLQ0KICAgIC0JCS8qIGZvciBjaG9pY2UgdmFsdWVzIGZpbmQgdGhl
IG1lbnUgZW50cnkgKHVzZWQgYmVsb3cpICovDQogICAgLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3lt
KSB8fCBzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsNCiAgICAtCQkJZm9yIChwcm9wID0gc3lt
LT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgIC0JCQkJbWVudSA9IHByb3At
Pm1lbnU7DQogICAgLQkJCQlpZiAocHJvcC0+bWVudSkNCiAgICAtCQkJCQlicmVhazsNCiAgICAt
CQkJfQ0KICAgIC0JCX0NCiAgICAtCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0X3N5bSkNCiAgICAt
CQkJZnByaW50ZihzdGRlcnIsICIlczolZDplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0
ZWN0ZWQhXG4iLA0KICAgIC0JCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vKTsNCiAg
ICAtDQogICAgLQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgIC0JCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiVkOlx0Y2hvaWNlICVzIGNvbnRhaW5zIHN5bWJvbCAlc1xuIiwNCiAgICAtCQkJ
CW1lbnUtPmZpbGUtPm5hbWUsIG1lbnUtPmxpbmVubywNCiAgICAtCQkJCXN5bS0+bmFtZSA/IHN5
bS0+bmFtZSA6ICI8Y2hvaWNlPiIsDQogICAgLQkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3lt
LT5uYW1lIDogIjxjaG9pY2U+Iik7DQogICAgLQkJfSBlbHNlIGlmIChzeW1faXNfY2hvaWNlX3Zh
bHVlKHN5bSkpIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBp
cyBwYXJ0IG9mIGNob2ljZSAlc1xuIiwNCiAgICAtCQkJCW1lbnUtPmZpbGUtPm5hbWUsIG1lbnUt
PmxpbmVubywNCiAgICAtCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNlPiIsDQog
ICAgLQkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7DQog
ICAgLQkJfSBlbHNlIGlmIChzdGFjay0+ZXhwciA9PSAmc3ltLT5kaXJfZGVwLmV4cHIpIHsNCiAg
ICAtCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJvbCAlcyBkZXBlbmRzIG9uICVzXG4i
LA0KICAgIC0JCQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLA0KICAgIC0JCQkJc3lt
LT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwNCiAgICAtCQkJCW5leHRfc3ltLT5uYW1l
ID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsNCiAgICAtCQl9IGVsc2UgaWYgKHN0YWNr
LT5leHByID09ICZzeW0tPnJldl9kZXAuZXhwcikgew0KICAgIC0JCQlmcHJpbnRmKHN0ZGVyciwg
IiVzOiVkOlx0c3ltYm9sICVzIGlzIHNlbGVjdGVkIGJ5ICVzXG4iLA0KICAgIC0JCQkJcHJvcC0+
ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLA0KICAgIC0JCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1l
IDogIjxjaG9pY2U+IiwNCiAgICAtCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUg
OiAiPGNob2ljZT4iKTsNCiAgICAtCQl9IGVsc2UgaWYgKHN0YWNrLT5leHByID09ICZzeW0tPmlt
cGxpZWQuZXhwcikgew0KICAgIC0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVz
IGlzIGltcGxpZWQgYnkgJXNcbiIsDQogICAgLQkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5s
aW5lbm8sDQogICAgLQkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLA0KICAg
IC0JCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOw0KICAg
IC0JCX0gZWxzZSBpZiAoc3RhY2stPmV4cHIpIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsICIl
czolZDpcdHN5bWJvbCAlcyAlcyB2YWx1ZSBjb250YWlucyAlc1xuIiwNCiAgICAtCQkJCXByb3At
PmZpbGUtPm5hbWUsIHByb3AtPmxpbmVubywNCiAgICAtCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFt
ZSA6ICI8Y2hvaWNlPiIsDQogICAgLQkJCQlwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSks
DQogICAgLQkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7
DQogICAgLQkJfSBlbHNlIHsNCiAgICAtCQkJZnByaW50ZihzdGRlcnIsICIlczolZDpcdHN5bWJv
bCAlcyAlcyBpcyB2aXNpYmxlIGRlcGVuZGluZyBvbiAlc1xuIiwNCiAgICAtCQkJCXByb3AtPmZp
bGUtPm5hbWUsIHByb3AtPmxpbmVubywNCiAgICAtCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6
ICI8Y2hvaWNlPiIsDQogICAgLQkJCQlwcm9wX2dldF90eXBlX25hbWUocHJvcC0+dHlwZSksDQog
ICAgLQkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+Iik7DQog
ICAgLQkJfQ0KICAgIC0JfQ0KICAgIC0NCiAgICAtCWZwcmludGYoc3RkZXJyLA0KICAgIC0JCSJG
b3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFu
Z3VhZ2UudHh0XG4iDQogICAgLQkJInN1YnNlY3Rpb24gXCJLY29uZmlnIHJlY3Vyc2l2ZSBkZXBl
bmRlbmN5IGxpbWl0YXRpb25zXCJcbiINCiAgICAtCQkiXG4iKTsNCiAgICAtDQogICAgLQlpZiAo
Y2hlY2tfdG9wID09ICZjdl9zdGFjaykNCiAgICAtCQlkZXBfc3RhY2tfcmVtb3ZlKCk7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZXhwcl9kZXBz
KHN0cnVjdCBleHByICplKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAg
LQ0KICAgIC0JaWYgKCFlKQ0KICAgIC0JCXJldHVybiBOVUxMOw0KICAgIC0Jc3dpdGNoIChlLT50
eXBlKSB7DQogICAgLQljYXNlIEVfT1I6DQogICAgLQljYXNlIEVfQU5EOg0KICAgIC0JCXN5bSA9
IHN5bV9jaGVja19leHByX2RlcHMoZS0+bGVmdC5leHByKTsNCiAgICAtCQlpZiAoc3ltKQ0KICAg
IC0JCQlyZXR1cm4gc3ltOw0KICAgIC0JCXJldHVybiBzeW1fY2hlY2tfZXhwcl9kZXBzKGUtPnJp
Z2h0LmV4cHIpOw0KICAgIC0JY2FzZSBFX05PVDoNCiAgICAtCQlyZXR1cm4gc3ltX2NoZWNrX2V4
cHJfZGVwcyhlLT5sZWZ0LmV4cHIpOw0KICAgIC0JY2FzZSBFX0VRVUFMOg0KICAgIC0JY2FzZSBF
X0dFUToNCiAgICAtCWNhc2UgRV9HVEg6DQogICAgLQljYXNlIEVfTEVROg0KICAgIC0JY2FzZSBF
X0xUSDoNCiAgICAtCWNhc2UgRV9VTkVRVUFMOg0KICAgIC0JCXN5bSA9IHN5bV9jaGVja19kZXBz
KGUtPmxlZnQuc3ltKTsNCiAgICAtCQlpZiAoc3ltKQ0KICAgIC0JCQlyZXR1cm4gc3ltOw0KICAg
IC0JCXJldHVybiBzeW1fY2hlY2tfZGVwcyhlLT5yaWdodC5zeW0pOw0KICAgIC0JY2FzZSBFX1NZ
TUJPTDoNCiAgICAtCQlyZXR1cm4gc3ltX2NoZWNrX2RlcHMoZS0+bGVmdC5zeW0pOw0KICAgIC0J
ZGVmYXVsdDoNCiAgICAtCQlicmVhazsNCiAgICAtCX0NCiAgICAtCWZwcmludGYoc3RkZXJyLCAi
T29wcyEgSG93IHRvIGNoZWNrICVkP1xuIiwgZS0+dHlwZSk7DQogICAgLQlyZXR1cm4gTlVMTDsN
CiAgICAtfQ0KICAgIC0NCiAgICAtLyogcmV0dXJuIE5VTEwgd2hlbiBkZXBlbmRlbmNpZXMgYXJl
IE9LICovDQogICAgLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfc3ltX2RlcHMoc3Ry
dWN0IHN5bWJvbCAqc3ltKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0yOw0KICAg
IC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0Jc3RydWN0IGRlcF9zdGFjayBzdGFjazsN
CiAgICAtDQogICAgLQlkZXBfc3RhY2tfaW5zZXJ0KCZzdGFjaywgc3ltKTsNCiAgICAtDQogICAg
LQlzdGFjay5leHByID0gJnN5bS0+ZGlyX2RlcC5leHByOw0KICAgIC0Jc3ltMiA9IHN5bV9jaGVj
a19leHByX2RlcHMoc3ltLT5kaXJfZGVwLmV4cHIpOw0KICAgIC0JaWYgKHN5bTIpDQogICAgLQkJ
Z290byBvdXQ7DQogICAgLQ0KICAgIC0Jc3RhY2suZXhwciA9ICZzeW0tPnJldl9kZXAuZXhwcjsN
CiAgICAtCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHN5bS0+cmV2X2RlcC5leHByKTsNCiAg
ICAtCWlmIChzeW0yKQ0KICAgIC0JCWdvdG8gb3V0Ow0KICAgIC0NCiAgICAtCXN0YWNrLmV4cHIg
PSAmc3ltLT5pbXBsaWVkLmV4cHI7DQogICAgLQlzeW0yID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhz
eW0tPmltcGxpZWQuZXhwcik7DQogICAgLQlpZiAoc3ltMikNCiAgICAtCQlnb3RvIG91dDsNCiAg
ICAtDQogICAgLQlzdGFjay5leHByID0gTlVMTDsNCiAgICAtDQogICAgLQlmb3IgKHByb3AgPSBz
eW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgLQkJaWYgKHByb3AtPnR5
cGUgPT0gUF9DSE9JQ0UgfHwgcHJvcC0+dHlwZSA9PSBQX1NFTEVDVCB8fA0KICAgIC0JCSAgICBw
cm9wLT50eXBlID09IFBfSU1QTFkpDQogICAgLQkJCWNvbnRpbnVlOw0KICAgIC0JCXN0YWNrLnBy
b3AgPSBwcm9wOw0KICAgIC0JCXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHByb3AtPnZpc2li
bGUuZXhwcik7DQogICAgLQkJaWYgKHN5bTIpDQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWlmIChw
cm9wLT50eXBlICE9IFBfREVGQVVMVCB8fCBzeW1faXNfY2hvaWNlKHN5bSkpDQogICAgLQkJCWNv
bnRpbnVlOw0KICAgIC0JCXN0YWNrLmV4cHIgPSAmcHJvcC0+ZXhwcjsNCiAgICAtCQlzeW0yID0g
c3ltX2NoZWNrX2V4cHJfZGVwcyhwcm9wLT5leHByKTsNCiAgICAtCQlpZiAoc3ltMikNCiAgICAt
CQkJYnJlYWs7DQogICAgLQkJc3RhY2suZXhwciA9IE5VTEw7DQogICAgLQl9DQogICAgLQ0KICAg
IC1vdXQ6DQogICAgLQlkZXBfc3RhY2tfcmVtb3ZlKCk7DQogICAgLQ0KICAgIC0JcmV0dXJuIHN5
bTI7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tf
Y2hvaWNlX2RlcHMoc3RydWN0IHN5bWJvbCAqY2hvaWNlKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qg
c3ltYm9sICpzeW0sICpzeW0yOw0KICAgIC0Jc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgIC0J
c3RydWN0IGV4cHIgKmU7DQogICAgLQlzdHJ1Y3QgZGVwX3N0YWNrIHN0YWNrOw0KICAgIC0NCiAg
ICAtCWRlcF9zdGFja19pbnNlcnQoJnN0YWNrLCBjaG9pY2UpOw0KICAgIC0NCiAgICAtCXByb3Ag
PSBzeW1fZ2V0X2Nob2ljZV9wcm9wKGNob2ljZSk7DQogICAgLQlleHByX2xpc3RfZm9yX2VhY2hf
c3ltKHByb3AtPmV4cHIsIGUsIHN5bSkNCiAgICAtCQlzeW0tPmZsYWdzIHw9IChTWU1CT0xfQ0hF
Q0sgfCBTWU1CT0xfQ0hFQ0tFRCk7DQogICAgLQ0KICAgIC0JY2hvaWNlLT5mbGFncyB8PSAoU1lN
Qk9MX0NIRUNLIHwgU1lNQk9MX0NIRUNLRUQpOw0KICAgIC0Jc3ltMiA9IHN5bV9jaGVja19zeW1f
ZGVwcyhjaG9pY2UpOw0KICAgIC0JY2hvaWNlLT5mbGFncyAmPSB+U1lNQk9MX0NIRUNLOw0KICAg
IC0JaWYgKHN5bTIpDQogICAgLQkJZ290byBvdXQ7DQogICAgLQ0KICAgIC0JZXhwcl9saXN0X2Zv
cl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pIHsNCiAgICAtCQlzeW0yID0gc3ltX2NoZWNr
X3N5bV9kZXBzKHN5bSk7DQogICAgLQkJaWYgKHN5bTIpDQogICAgLQkJCWJyZWFrOw0KICAgIC0J
fQ0KICAgIC1vdXQ6DQogICAgLQlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUs
IHN5bSkNCiAgICAtCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7DQogICAgLQ0KICAgIC0J
aWYgKHN5bTIgJiYgc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0yKSAmJg0KICAgIC0JICAgIHByb3Bf
Z2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bTIpKSA9PSBjaG9pY2UpDQogICAgLQkJ
c3ltMiA9IGNob2ljZTsNCiAgICAtDQogICAgLQlkZXBfc3RhY2tfcmVtb3ZlKCk7DQogICAgLQ0K
ICAgIC0JcmV0dXJuIHN5bTI7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBzeW1ib2wgKnN5
bV9jaGVja19kZXBzKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAtew0KICAgIC0Jc3RydWN0IHN5
bWJvbCAqc3ltMjsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtDQogICAgLQlp
ZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDSykgew0KICAgIC0JCXN5bV9jaGVja19wcmludF9y
ZWN1cnNpdmUoc3ltKTsNCiAgICAtCQlyZXR1cm4gc3ltOw0KICAgIC0JfQ0KICAgIC0JaWYgKHN5
bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hFQ0tFRCkNCiAgICAtCQlyZXR1cm4gTlVMTDsNCiAgICAtDQog
ICAgLQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pKSB7DQogICAgLQkJc3RydWN0IGRlcF9z
dGFjayBzdGFjazsNCiAgICAtDQogICAgLQkJLyogZm9yIGNob2ljZSBncm91cHMgc3RhcnQgdGhl
IGNoZWNrIHdpdGggbWFpbiBjaG9pY2Ugc3ltYm9sICovDQogICAgLQkJZGVwX3N0YWNrX2luc2Vy
dCgmc3RhY2ssIHN5bSk7DQogICAgLQkJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsN
CiAgICAtCQlzeW0yID0gc3ltX2NoZWNrX2RlcHMocHJvcF9nZXRfc3ltYm9sKHByb3ApKTsNCiAg
ICAtCQlkZXBfc3RhY2tfcmVtb3ZlKCk7DQogICAgLQl9IGVsc2UgaWYgKHN5bV9pc19jaG9pY2Uo
c3ltKSkgew0KICAgIC0JCXN5bTIgPSBzeW1fY2hlY2tfY2hvaWNlX2RlcHMoc3ltKTsNCiAgICAt
CX0gZWxzZSB7DQogICAgLQkJc3ltLT5mbGFncyB8PSAoU1lNQk9MX0NIRUNLIHwgU1lNQk9MX0NI
RUNLRUQpOw0KICAgIC0JCXN5bTIgPSBzeW1fY2hlY2tfc3ltX2RlcHMoc3ltKTsNCiAgICAtCQlz
eW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hFQ0s7DQogICAgLQl9DQogICAgLQ0KICAgIC0JcmV0dXJu
IHN5bTI7DQogICAgLX0NCiAgICAtDQogICAgLXN0cnVjdCBwcm9wZXJ0eSAqcHJvcF9hbGxvYyhl
bnVtIHByb3BfdHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgLXsNCiAgICAtCXN0
cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBwcm9wZXJ0eSAqKnByb3BwOw0KICAg
IC0NCiAgICAtCXByb3AgPSB4bWFsbG9jKHNpemVvZigqcHJvcCkpOw0KICAgIC0JbWVtc2V0KHBy
b3AsIDAsIHNpemVvZigqcHJvcCkpOw0KICAgIC0JcHJvcC0+dHlwZSA9IHR5cGU7DQogICAgLQlw
cm9wLT5zeW0gPSBzeW07DQogICAgLQlwcm9wLT5maWxlID0gY3VycmVudF9maWxlOw0KICAgIC0J
cHJvcC0+bGluZW5vID0gemNvbmZfbGluZW5vKCk7DQogICAgLQ0KICAgIC0JLyogYXBwZW5kIHBy
b3BlcnR5IHRvIHRoZSBwcm9wIGxpc3Qgb2Ygc3ltYm9sICovDQogICAgLQlpZiAoc3ltKSB7DQog
ICAgLQkJZm9yIChwcm9wcCA9ICZzeW0tPnByb3A7ICpwcm9wcDsgcHJvcHAgPSAmKCpwcm9wcCkt
Pm5leHQpDQogICAgLQkJCTsNCiAgICAtCQkqcHJvcHAgPSBwcm9wOw0KICAgIC0JfQ0KICAgIC0N
CiAgICAtCXJldHVybiBwcm9wOw0KICAgIC19DQogICAgLQ0KICAgIC1zdHJ1Y3Qgc3ltYm9sICpw
cm9wX2dldF9zeW1ib2woc3RydWN0IHByb3BlcnR5ICpwcm9wKQ0KICAgIC17DQogICAgLQlpZiAo
cHJvcC0+ZXhwciAmJiAocHJvcC0+ZXhwci0+dHlwZSA9PSBFX1NZTUJPTCB8fA0KICAgIC0JCQkg
ICBwcm9wLT5leHByLT50eXBlID09IEVfTElTVCkpDQogICAgLQkJcmV0dXJuIHByb3AtPmV4cHIt
PmxlZnQuc3ltOw0KICAgIC0JcmV0dXJuIE5VTEw7DQogICAgLX0NCiAgICAtDQogICAgLWNvbnN0
IGNoYXIgKnByb3BfZ2V0X3R5cGVfbmFtZShlbnVtIHByb3BfdHlwZSB0eXBlKQ0KICAgIC17DQog
ICAgLQlzd2l0Y2ggKHR5cGUpIHsNCiAgICAtCWNhc2UgUF9QUk9NUFQ6DQogICAgLQkJcmV0dXJu
ICJwcm9tcHQiOw0KICAgIC0JY2FzZSBQX0NPTU1FTlQ6DQogICAgLQkJcmV0dXJuICJjb21tZW50
IjsNCiAgICAtCWNhc2UgUF9NRU5VOg0KICAgIC0JCXJldHVybiAibWVudSI7DQogICAgLQljYXNl
IFBfREVGQVVMVDoNCiAgICAtCQlyZXR1cm4gImRlZmF1bHQiOw0KICAgIC0JY2FzZSBQX0NIT0lD
RToNCiAgICAtCQlyZXR1cm4gImNob2ljZSI7DQogICAgLQljYXNlIFBfU0VMRUNUOg0KICAgIC0J
CXJldHVybiAic2VsZWN0IjsNCiAgICAtCWNhc2UgUF9JTVBMWToNCiAgICAtCQlyZXR1cm4gImlt
cGx5IjsNCiAgICAtCWNhc2UgUF9SQU5HRToNCiAgICAtCQlyZXR1cm4gInJhbmdlIjsNCiAgICAt
CWNhc2UgUF9TWU1CT0w6DQogICAgLQkJcmV0dXJuICJzeW1ib2wiOw0KICAgIC0JY2FzZSBQX1VO
S05PV046DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQlyZXR1cm4gInVua25vd24iOw0K
ICAgIC19DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19z
dWJtZW51L0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9L
Y29uZmlnDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggYjIwNzYxZS4u
MDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51
L0tjb25maWcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsNTIgKzAsMCBAQA0KICAgIC0j
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLQ0KICAgIC1jb25maWcgQQ0K
ICAgIC0JYm9vbCAiQSINCiAgICAtCWRlZmF1bHQgeQ0KICAgIC0NCiAgICAtY29uZmlnIEEwDQog
ICAgLQlib29sICJBMCINCiAgICAtCWRlcGVuZHMgb24gQQ0KICAgIC0JZGVmYXVsdCB5DQogICAg
LQloZWxwDQogICAgLQkgIFRoaXMgZGVwZW5kcyBvbiBBLCBzbyBzaG91bGQgYmUgYSBzdWJtZW51
IG9mIEEuDQogICAgLQ0KICAgIC1jb25maWcgQTBfMA0KICAgIC0JYm9vbCAiQTFfMCINCiAgICAt
CWRlcGVuZHMgb24gQTANCiAgICAtCWhlbHANCiAgICAtCSAgU3VibWVudXMgYXJlIGNyZWF0ZWQg
cmVjdXJzaXZlbHkuDQogICAgLQkgIFRoaXMgc2hvdWxkIGJlIGEgc3VibWVudSBvZiBBMC4NCiAg
ICAtDQogICAgLWNvbmZpZyBBMQ0KICAgIC0JYm9vbCAiQTEiDQogICAgLQlkZXBlbmRzIG9uIEEN
CiAgICAtCWRlZmF1bHQgeQ0KICAgIC0JaGVscA0KICAgIC0JICBUaGlzIHNob3VsZCBsaW5lIHVw
IHdpdGggQTAuDQogICAgLQ0KICAgIC1jaG9pY2UNCiAgICAtCXByb21wdCAiY2hvaWNlIg0KICAg
IC0JZGVwZW5kcyBvbiBBMQ0KICAgIC0JaGVscA0KICAgIC0JICBDaG9pY2Ugc2hvdWxkIGJlY29t
ZSBhIHN1Ym1lbnUgYXMgd2VsbC4NCiAgICAtDQogICAgLWNvbmZpZyBBMV8wDQogICAgLQlib29s
ICJBMV8wIg0KICAgIC0NCiAgICAtY29uZmlnIEExXzENCiAgICAtCWJvb2wgIkExXzEiDQogICAg
LQ0KICAgIC1lbmRjaG9pY2UNCiAgICAtDQogICAgLWNvbmZpZyBCDQogICAgLQlib29sICJCIg0K
ICAgIC0JaGVscA0KICAgIC0JICBUaGlzIGlzIGluZGVwZW5kZW50IG9mIEEuDQogICAgLQ0KICAg
IC1jb25maWcgQw0KICAgIC0JYm9vbCAiQyINCiAgICAtCWRlcGVuZHMgb24gQQ0KICAgIC0JaGVs
cA0KICAgIC0JICBUaGlzIGRlcGVuZHMgb24gQSwgYnV0IG5vdCBhIGNvbnNlY3V0aXZlIGl0ZW0s
IHNvIGNhbi9zaG91bGQgbm90DQogICAgLQkgIGJlIGEgc3VibWVudS4NCiAgICBkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkgYi9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQ0KICAgIGRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDI1YWJkOTIuLjAwMDAwMDANCiAgICAt
LS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2F1dG9fc3VibWVudS9fX2luaXRfXy5weQ0K
ICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxMyArMCwwIEBADQogICAgLSMgU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtIiIiDQogICAgLUNyZWF0ZSBzdWJtZW51IGZv
ciBzeW1ib2xzIHRoYXQgZGVwZW5kIG9uIHRoZSBwcmVjZWRpbmcgb25lLg0KICAgIC0NCiAgICAt
SWYgYSBzeW1ib2xzIGhhcyBkZXBlbmRlbmN5IG9uIHRoZSBwcmVjZWRpbmcgc3ltYm9sLCB0aGUg
bWVudSBlbnRyeQ0KICAgIC1zaG91bGQgYmVjb21lIHRoZSBzdWJtZW51IG9mIHRoZSBwcmVjZWRp
bmcgb25lLCBhbmQgZGlzcGxheWVkIHdpdGgNCiAgICAtZGVlcGVyIGluZGVudGF0aW9uLg0KICAg
IC0iIiINCiAgICAtDQogICAgLQ0KICAgIC1kZWYgdGVzdChjb25mKToNCiAgICAtICAgIGFzc2Vy
dCBjb25mLm9sZGFza2NvbmZpZygpID09IDANCiAgICAtICAgIGFzc2VydCBjb25mLnN0ZG91dF9j
b250YWlucygnZXhwZWN0ZWRfc3Rkb3V0JykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9hdXRvX3N1Ym1lbnUvZXhwZWN0ZWRfc3Rkb3V0DQogICAgZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggYmY1MjM2Zi4uMDAwMDAwMA0KICAgIC0tLSBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dA0KICAg
ICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxMCArMCwwIEBADQogICAgLUEgKEEpIFtZL24vP10g
KE5FVykgDQogICAgLSAgQTAgKEEwKSBbWS9uLz9dIChORVcpIA0KICAgIC0gICAgQTFfMCAoQTBf
MCkgW04veS8/XSAoTkVXKSANCiAgICAtICBBMSAoQTEpIFtZL24vP10gKE5FVykgDQogICAgLSAg
ICBjaG9pY2UNCiAgICAtICAgID4gMS4gQTFfMCAoQTFfMCkgKE5FVykNCiAgICAtICAgICAgMi4g
QTFfMSAoQTFfMSkgKE5FVykNCiAgICAtICAgIGNob2ljZVsxLTI/XTogDQogICAgLUIgKEIpIFtO
L3kvP10gKE5FVykgDQogICAgLUMgKEMpIFtOL3kvP10gKE5FVykgDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL0tjb25maWcgYi9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9LY29uZmlnDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgaW5kZXggYTQxMjIwNS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL0tjb25maWcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsNTYg
KzAsMCBAQA0KICAgIC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLQ0K
ICAgIC1jb25maWcgTU9EVUxFUw0KICAgIC0JYm9vbCAiRW5hYmxlIGxvYWRhYmxlIG1vZHVsZSBz
dXBwb3J0Ig0KICAgIC0Jb3B0aW9uIG1vZHVsZXMNCiAgICAtCWRlZmF1bHQgeQ0KICAgIC0NCiAg
ICAtY2hvaWNlDQogICAgLQlwcm9tcHQgImJvb2xlYW4gY2hvaWNlIg0KICAgIC0JZGVmYXVsdCBC
T09MX0NIT0lDRTENCiAgICAtDQogICAgLWNvbmZpZyBCT09MX0NIT0lDRTANCiAgICAtCWJvb2wg
ImNob2ljZSAwIg0KICAgIC0NCiAgICAtY29uZmlnIEJPT0xfQ0hPSUNFMQ0KICAgIC0JYm9vbCAi
Y2hvaWNlIDEiDQogICAgLQ0KICAgIC1lbmRjaG9pY2UNCiAgICAtDQogICAgLWNob2ljZQ0KICAg
IC0JcHJvbXB0ICJvcHRpb25hbCBib29sZWFuIGNob2ljZSINCiAgICAtCW9wdGlvbmFsDQogICAg
LQlkZWZhdWx0IE9QVF9CT09MX0NIT0lDRTENCiAgICAtDQogICAgLWNvbmZpZyBPUFRfQk9PTF9D
SE9JQ0UwDQogICAgLQlib29sICJjaG9pY2UgMCINCiAgICAtDQogICAgLWNvbmZpZyBPUFRfQk9P
TF9DSE9JQ0UxDQogICAgLQlib29sICJjaG9pY2UgMSINCiAgICAtDQogICAgLWVuZGNob2ljZQ0K
ICAgIC0NCiAgICAtY2hvaWNlDQogICAgLQlwcm9tcHQgInRyaXN0YXRlIGNob2ljZSINCiAgICAt
CWRlZmF1bHQgVFJJX0NIT0lDRTENCiAgICAtDQogICAgLWNvbmZpZyBUUklfQ0hPSUNFMA0KICAg
IC0JdHJpc3RhdGUgImNob2ljZSAwIg0KICAgIC0NCiAgICAtY29uZmlnIFRSSV9DSE9JQ0UxDQog
ICAgLQl0cmlzdGF0ZSAiY2hvaWNlIDEiDQogICAgLQ0KICAgIC1lbmRjaG9pY2UNCiAgICAtDQog
ICAgLWNob2ljZQ0KICAgIC0JcHJvbXB0ICJvcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2UiDQogICAg
LQlvcHRpb25hbA0KICAgIC0JZGVmYXVsdCBPUFRfVFJJX0NIT0lDRTENCiAgICAtDQogICAgLWNv
bmZpZyBPUFRfVFJJX0NIT0lDRTANCiAgICAtCXRyaXN0YXRlICJjaG9pY2UgMCINCiAgICAtDQog
ICAgLWNvbmZpZyBPUFRfVFJJX0NIT0lDRTENCiAgICAtCXRyaXN0YXRlICJjaG9pY2UgMSINCiAg
ICAtDQogICAgLWVuZGNob2ljZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hv
aWNlL19faW5pdF9fLnB5DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
NDMxOGZjZS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hv
aWNlL19faW5pdF9fLnB5DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDQxICswLDAgQEAN
CiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0iIiINCiAgICAt
QmFzaWMgY2hvaWNlIHRlc3RzLg0KICAgIC0NCiAgICAtVGhlIGhhbmRsaW5nIG9mICdjaG9pY2Un
IGlzIGEgYml0IGNvbXBsaWNhdGVkIHBhcnQgaW4gS2NvbmZpZy4NCiAgICAtDQogICAgLVRoZSBi
ZWhhdmlvciBvZiAneScgY2hvaWNlIGlzIGludHVpdGl2ZS4gIElmIGNob2ljZSB2YWx1ZXMgYXJl
IHRyaXN0YXRlLA0KICAgIC10aGUgY2hvaWNlIGNhbiBiZSAnbScgd2hlcmUgZWFjaCB2YWx1ZSBj
YW4gYmUgZW5hYmxlZCBpbmRlcGVuZGVudGx5Lg0KICAgIC1BbHNvLCBpZiBhIGNob2ljZSBpcyBt
YXJrZWQgYXMgJ29wdGlvbmFsJywgdGhlIHdob2xlIGNob2ljZSBjYW4gYmUNCiAgICAtaW52aXNp
YmxlLg0KICAgIC0iIiINCiAgICAtDQogICAgLQ0KICAgIC1kZWYgdGVzdF9vbGRhc2swKGNvbmYp
Og0KICAgIC0gICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0gMA0KICAgIC0gICAgYXNz
ZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdvbGRhc2swX2V4cGVjdGVkX3N0ZG91dCcpDQogICAg
LQ0KICAgIC0NCiAgICAtZGVmIHRlc3Rfb2xkYXNrMShjb25mKToNCiAgICAtICAgIGFzc2VydCBj
b25mLm9sZGFza2NvbmZpZygnb2xkYXNrMV9jb25maWcnKSA9PSAwDQogICAgLSAgICBhc3NlcnQg
Y29uZi5zdGRvdXRfY29udGFpbnMoJ29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0JykNCiAgICAtDQog
ICAgLQ0KICAgIC1kZWYgdGVzdF9hbGx5ZXMoY29uZik6DQogICAgLSAgICBhc3NlcnQgY29uZi5h
bGx5ZXNjb25maWcoKSA9PSAwDQogICAgLSAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMo
J2FsbHllc19leHBlY3RlZF9jb25maWcnKQ0KICAgIC0NCiAgICAtDQogICAgLWRlZiB0ZXN0X2Fs
bG1vZChjb25mKToNCiAgICAtICAgIGFzc2VydCBjb25mLmFsbG1vZGNvbmZpZygpID09IDANCiAg
ICAtICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnYWxsbW9kX2V4cGVjdGVkX2NvbmZp
ZycpDQogICAgLQ0KICAgIC0NCiAgICAtZGVmIHRlc3RfYWxsbm8oY29uZik6DQogICAgLSAgICBh
c3NlcnQgY29uZi5hbGxub2NvbmZpZygpID09IDANCiAgICAtICAgIGFzc2VydCBjb25mLmNvbmZp
Z19jb250YWlucygnYWxsbm9fZXhwZWN0ZWRfY29uZmlnJykNCiAgICAtDQogICAgLQ0KICAgIC1k
ZWYgdGVzdF9hbGxkZWYoY29uZik6DQogICAgLSAgICBhc3NlcnQgY29uZi5hbGxkZWZjb25maWco
KSA9PSAwDQogICAgLSAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbGRlZl9leHBl
Y3RlZF9jb25maWcnKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9jaG9pY2UvYWxsZGVmX2V4cGVjdGVkX2NvbmZpZw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDdhNzU0YmYuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnDQogICAgKysrIC9kZXYv
bnVsbA0KICAgIEBAIC0xLDUgKzAsMCBAQA0KICAgIC1DT05GSUdfTU9EVUxFUz15DQogICAgLSMg
Q09ORklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0DQogICAgLUNPTkZJR19CT09MX0NIT0lDRTE9
eQ0KICAgIC0jIENPTkZJR19UUklfQ0hPSUNFMCBpcyBub3Qgc2V0DQogICAgLSMgQ09ORklHX1RS
SV9DSE9JQ0UxIGlzIG5vdCBzZXQNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5u
ZXcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25maWcNCiAgICBkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCBmMWY1ZGNkLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbW9kX2V4cGVjdGVkX2NvbmZpZw0KICAgICsr
KyAvZGV2L251bGwNCiAgICBAQCAtMSw5ICswLDAgQEANCiAgICAtQ09ORklHX01PRFVMRVM9eQ0K
ICAgIC0jIENPTkZJR19CT09MX0NIT0lDRTAgaXMgbm90IHNldA0KICAgIC1DT05GSUdfQk9PTF9D
SE9JQ0UxPXkNCiAgICAtIyBDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0DQogICAg
LUNPTkZJR19PUFRfQk9PTF9DSE9JQ0UxPXkNCiAgICAtQ09ORklHX1RSSV9DSE9JQ0UwPW0NCiAg
ICAtQ09ORklHX1RSSV9DSE9JQ0UxPW0NCiAgICAtQ09ORklHX09QVF9UUklfQ0hPSUNFMD1tDQog
ICAgLUNPTkZJR19PUFRfVFJJX0NIT0lDRTE9bQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcNCiAgICBkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBiODhlZTdhLi4wMDAwMDAwDQogICAgLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxsbm9fZXhwZWN0ZWRfY29uZmlnDQog
ICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDUgKzAsMCBAQA0KICAgIC0jIENPTkZJR19NT0RV
TEVTIGlzIG5vdCBzZXQNCiAgICAtIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQNCiAg
ICAtQ09ORklHX0JPT0xfQ0hPSUNFMT15DQogICAgLSMgQ09ORklHX1RSSV9DSE9JQ0UwIGlzIG5v
dCBzZXQNCiAgICAtQ09ORklHX1RSSV9DSE9JQ0UxPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL2FsbHllc19leHBlY3RlZF9jb25maWcNCiAgICBk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBlNWEwNjJhLi4wMDAwMDAwDQogICAg
LS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2Nv
bmZpZw0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw5ICswLDAgQEANCiAgICAtQ09ORklH
X01PRFVMRVM9eQ0KICAgIC0jIENPTkZJR19CT09MX0NIT0lDRTAgaXMgbm90IHNldA0KICAgIC1D
T05GSUdfQk9PTF9DSE9JQ0UxPXkNCiAgICAtIyBDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMCBpcyBu
b3Qgc2V0DQogICAgLUNPTkZJR19PUFRfQk9PTF9DSE9JQ0UxPXkNCiAgICAtIyBDT05GSUdfVFJJ
X0NIT0lDRTAgaXMgbm90IHNldA0KICAgIC1DT05GSUdfVFJJX0NIT0lDRTE9eQ0KICAgIC0jIENP
TkZJR19PUFRfVFJJX0NIT0lDRTAgaXMgbm90IHNldA0KICAgIC1DT05GSUdfT1BUX1RSSV9DSE9J
Q0UxPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uv
b2xkYXNrMF9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2lj
ZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0K
ICAgIGluZGV4IGIyNTFiYmEuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dA0KICAgICsrKyAvZGV2L251bGwN
CiAgICBAQCAtMSwxMCArMCwwIEBADQogICAgLUVuYWJsZSBsb2FkYWJsZSBtb2R1bGUgc3VwcG9y
dCAoTU9EVUxFUykgW1kvbi8/XSAoTkVXKSANCiAgICAtYm9vbGVhbiBjaG9pY2UNCiAgICAtICAx
LiBjaG9pY2UgMCAoQk9PTF9DSE9JQ0UwKSAoTkVXKQ0KICAgIC0+IDIuIGNob2ljZSAxIChCT09M
X0NIT0lDRTEpIChORVcpDQogICAgLWNob2ljZVsxLTI/XTogDQogICAgLW9wdGlvbmFsIGJvb2xl
YW4gY2hvaWNlIFtOL3kvP10gKE5FVykgDQogICAgLXRyaXN0YXRlIGNob2ljZSBbTS95Lz9dIChO
RVcpIA0KICAgIC0gIGNob2ljZSAwIChUUklfQ0hPSUNFMCkgW04vbS8/XSAoTkVXKSANCiAgICAt
ICBjaG9pY2UgMSAoVFJJX0NIT0lDRTEpIFtOL20vP10gKE5FVykgDQogICAgLW9wdGlvbmFsIHRy
aXN0YXRlIGNob2ljZSBbTi9tL3kvP10gKE5FVykgDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnIGIvc3VwcG9ydC9rY29uZmln
Lm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCBiNjdiZmUzLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9jb25maWcNCiAgICArKysgL2Rldi9udWxsDQog
ICAgQEAgLTEsMiArMCwwIEBADQogICAgLSMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldA0KICAg
IC1DT05GSUdfT1BUX0JPT0xfQ0hPSUNFMD15DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0IGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQNCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBjMjEyNWU5Li4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRv
dXQNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTUgKzAsMCBAQA0KICAgIC1FbmFibGUg
bG9hZGFibGUgbW9kdWxlIHN1cHBvcnQgKE1PRFVMRVMpIFtOL3kvP10gDQogICAgLWJvb2xlYW4g
Y2hvaWNlDQogICAgLSAgMS4gY2hvaWNlIDAgKEJPT0xfQ0hPSUNFMCkgKE5FVykNCiAgICAtPiAy
LiBjaG9pY2UgMSAoQk9PTF9DSE9JQ0UxKSAoTkVXKQ0KICAgIC1jaG9pY2VbMS0yP106IA0KICAg
IC1vcHRpb25hbCBib29sZWFuIGNob2ljZSBbWS9uLz9dIChORVcpIA0KICAgIC1vcHRpb25hbCBi
b29sZWFuIGNob2ljZQ0KICAgIC0+IDEuIGNob2ljZSAwIChPUFRfQk9PTF9DSE9JQ0UwKQ0KICAg
IC0gIDIuIGNob2ljZSAxIChPUFRfQk9PTF9DSE9JQ0UxKSAoTkVXKQ0KICAgIC1jaG9pY2VbMS0y
P106IA0KICAgIC10cmlzdGF0ZSBjaG9pY2UNCiAgICAtICAxLiBjaG9pY2UgMCAoVFJJX0NIT0lD
RTApIChORVcpDQogICAgLT4gMi4gY2hvaWNlIDEgKFRSSV9DSE9JQ0UxKSAoTkVXKQ0KICAgIC1j
aG9pY2VbMS0yP106IA0KICAgIC1vcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2UgW04veS8/XSANCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0
aF9tX2RlcC9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVf
d2l0aF9tX2RlcC9LY29uZmlnDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggNzEwNmMyNi4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
Y2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZw0KICAgICsrKyAvZGV2L251bGwNCiAgICBA
QCAtMSwyMSArMCwwIEBADQogICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN
CiAgICAtDQogICAgLWNvbmZpZyBNT0RVTEVTDQogICAgLQlkZWZfYm9vbCB5DQogICAgLQlvcHRp
b24gbW9kdWxlcw0KICAgIC0NCiAgICAtY29uZmlnIERFUA0KICAgIC0JdHJpc3RhdGUNCiAgICAt
CWRlZmF1bHQgbQ0KICAgIC0NCiAgICAtY2hvaWNlDQogICAgLQlwcm9tcHQgIlRyaXN0YXRlIENo
b2ljZSINCiAgICAtDQogICAgLWNvbmZpZyBDSE9JQ0UwDQogICAgLQl0cmlzdGF0ZSAiQ2hvaWNl
IDAiDQogICAgLQ0KICAgIC1jb25maWcgQ0hPSUNFMQ0KICAgIC0JdHJpc3RhdGUgIkNob2ljZSAx
Ig0KICAgIC0JZGVwZW5kcyBvbiBERVANCiAgICAtDQogICAgLWVuZGNob2ljZQ0KICAgIGRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0
aF9tX2RlcC9fX2luaXRfXy5weQ0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGlu
ZGV4IDA3NWI0ZTAuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3Rz
L2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5DQogICAgKysrIC9kZXYvbnVsbA0K
ICAgIEBAIC0xLDE2ICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMA0KICAgIC0iIiINCiAgICAtSGlkZSB0cmlzdGF0ZSBjaG9pY2UgdmFsdWVzIHdpdGggbW9k
IGRlcGVuZGVuY3kgaW4geSBjaG9pY2UuDQogICAgLQ0KICAgIC1JZiB0cmlzdGF0ZSBjaG9pY2Ug
dmFsdWVzIGRlcGVuZCBvbiBzeW1ib2xzIHNldCB0byAnbScsIHRoZXkgc2hvdWxkIGJlDQogICAg
LWhpZGRlbiB3aGVuIHRoZSBjaG9pY2UgY29udGFpbmluZyB0aGVtIGlzIGNoYW5nZWQgZnJvbSAn
bScgdG8gJ3knDQogICAgLShpLmUuIGV4Y2x1c2l2ZSBjaG9pY2UpLg0KICAgIC0NCiAgICAtUmVs
YXRlZCBMaW51eCBjb21taXQ6IGZhNjRlNWY2YTM1ZWZkNWU3N2Q2MzkxMjVkOTczMDc3Y2E1MDYw
NzQNCiAgICAtIiIiDQogICAgLQ0KICAgIC0NCiAgICAtZGVmIHRlc3QoY29uZik6DQogICAgLSAg
ICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoJ2NvbmZpZycsICd5JykgPT0gMA0KICAgIC0gICAg
YXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3RlZF9jb25maWcnKQ0KICAgIC0gICAg
YXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQnKQ0KICAgIGRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVw
L2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9k
ZXAvY29uZmlnDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggM2ExMjZi
Ny4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3Zh
bHVlX3dpdGhfbV9kZXAvY29uZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDIgKzAs
MCBAQA0KICAgIC1DT05GSUdfQ0hPSUNFMD1tDQogICAgLUNPTkZJR19DSE9JQ0UxPW0NCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9t
X2RlcC9leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92
YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDRkMDdiNDQuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX2NvbmZpZw0KICAg
ICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwzICswLDAgQEANCiAgICAtQ09ORklHX01PRFVMRVM9
eQ0KICAgIC1DT05GSUdfREVQPW0NCiAgICAtQ09ORklHX0NIT0lDRTA9eQ0KICAgIGRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4
cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dp
dGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMmI1MGFiNi4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcv
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfc3Rkb3V0DQogICAgKysrIC9k
ZXYvbnVsbA0KICAgIEBAIC0xLDQgKzAsMCBAQA0KICAgIC1UcmlzdGF0ZSBDaG9pY2UgW00veS8/
XSB5DQogICAgLVRyaXN0YXRlIENob2ljZQ0KICAgIC0+IDEuIENob2ljZSAwIChDSE9JQ0UwKQ0K
ICAgIC1jaG9pY2VbMV06IDENCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9jb25mdGVzdC5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvY29uZnRlc3QucHkN
CiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMzQ1ZWY2Li4wMDAwMDAw
DQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9jb25mdGVzdC5weQ0KICAgICsr
KyAvZGV2L251bGwNCiAgICBAQCAtMSwyOTEgKzAsMCBAQA0KICAgIC0jIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLSMNCiAgICAtIyBDb3B5cmlnaHQgKEMpIDIwMTggTWFz
YWhpcm8gWWFtYWRhIDx5YW1hZGEubWFzYWhpcm9Ac29jaW9uZXh0LmNvbT4NCiAgICAtIw0KICAg
IC0NCiAgICAtIiIiDQogICAgLUtjb25maWcgdW5pdCB0ZXN0aW5nIGZyYW1ld29yay4NCiAgICAt
DQogICAgLVRoaXMgcHJvdmlkZXMgZml4dHVyZSBmdW5jdGlvbnMgY29tbW9ubHkgdXNlZCBmcm9t
IHRlc3QgZmlsZXMuDQogICAgLSIiIg0KICAgIC0NCiAgICAtaW1wb3J0IG9zDQogICAgLWltcG9y
dCBweXRlc3QNCiAgICAtaW1wb3J0IHNodXRpbA0KICAgIC1pbXBvcnQgc3VicHJvY2Vzcw0KICAg
IC1pbXBvcnQgdGVtcGZpbGUNCiAgICAtDQogICAgLUNPTkZfUEFUSCA9IG9zLnBhdGguYWJzcGF0
aChvcy5wYXRoLmpvaW4oJ3NjcmlwdHMnLCAna2NvbmZpZycsICdjb25mJykpDQogICAgLQ0KICAg
IC0NCiAgICAtY2xhc3MgQ29uZjoNCiAgICAtICAgICIiIktjb25maWcgcnVubmVyIGFuZCByZXN1
bHQgY2hlY2tlci4NCiAgICAtDQogICAgLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIG1ldGhvZHMg
dG8gcnVuIHRleHQtYmFzZWQgaW50ZXJmYWNlIG9mIEtjb25maWcNCiAgICAtICAgIChzY3JpcHRz
L2tjb25maWcvY29uZikgYW5kIHJldHJpZXZlIHRoZSByZXN1bHRlZCBjb25maWd1cmF0aW9uLA0K
ICAgIC0gICAgc3Rkb3V0LCBhbmQgc3RkZXJyLiAgSXQgYWxzbyBwcm92aWRlcyBtZXRob2RzIHRv
IGNvbXBhcmUgdGhvc2UNCiAgICAtICAgIHJlc3VsdHMgd2l0aCBleHBlY3RhdGlvbnMuDQogICAg
LSAgICAiIiINCiAgICAtDQogICAgLSAgICBkZWYgX19pbml0X18oc2VsZiwgcmVxdWVzdCk6DQog
ICAgLSAgICAgICAgIiIiQ3JlYXRlIGEgbmV3IENvbmYgaW5zdGFuY2UuDQogICAgLQ0KICAgIC0g
ICAgICAgIHJlcXVlc3Q6IG9iamVjdCB0byBpbnRyb3NwZWN0IHRoZSByZXF1ZXN0aW5nIHRlc3Qg
bW9kdWxlDQogICAgLSAgICAgICAgIiIiDQogICAgLSAgICAgICAgIyB0aGUgZGlyZWN0b3J5IG9m
IHRoZSB0ZXN0IGJlaW5nIHJ1bg0KICAgIC0gICAgICAgIHNlbGYuX3Rlc3RfZGlyID0gb3MucGF0
aC5kaXJuYW1lKHN0cihyZXF1ZXN0LmZzcGF0aCkpDQogICAgLQ0KICAgIC0gICAgIyBydW5uZXJz
DQogICAgLSAgICBkZWYgX3J1bl9jb25mKHNlbGYsIG1vZGUsIGRvdF9jb25maWc9Tm9uZSwgb3V0
X2ZpbGU9Jy5jb25maWcnLA0KICAgIC0gICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZT1GYWxz
ZSwgaW5fa2V5cz1Ob25lLCBleHRyYV9lbnY9e30pOg0KICAgIC0gICAgICAgICIiIlJ1biB0ZXh0
LWJhc2VkIEtjb25maWcgZXhlY3V0YWJsZSBhbmQgc2F2ZSB0aGUgcmVzdWx0Lg0KICAgIC0NCiAg
ICAtICAgICAgICBtb2RlOiBpbnB1dCBtb2RlIG9wdGlvbiAoLS1vbGRhc2tjb25maWcsIC0tZGVm
Y29uZmlnPTxmaWxlPiBldGMuKQ0KICAgIC0gICAgICAgIGRvdF9jb25maWc6IC5jb25maWcgZmls
ZSB0byB1c2UgZm9yIGNvbmZpZ3VyYXRpb24gYmFzZQ0KICAgIC0gICAgICAgIG91dF9maWxlOiBm
aWxlIG5hbWUgdG8gY29udGFpbiB0aGUgb3V0cHV0IGNvbmZpZyBkYXRhDQogICAgLSAgICAgICAg
aW50ZXJhY3RpdmU6IGZsYWcgdG8gc3BlY2lmeSB0aGUgaW50ZXJhY3RpdmUgbW9kZQ0KICAgIC0g
ICAgICAgIGluX2tleXM6IGtleSBpbnB1dHMgZm9yIGludGVyYWN0aXZlIG1vZGVzDQogICAgLSAg
ICAgICAgZXh0cmFfZW52OiBhZGRpdGlvbmFsIGVudmlyb25tZW50cw0KICAgIC0gICAgICAgIHJl
dHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUNCiAgICAtICAg
ICAgICAiIiINCiAgICAtICAgICAgICBjb21tYW5kID0gW0NPTkZfUEFUSCwgbW9kZSwgJ0tjb25m
aWcnXQ0KICAgIC0NCiAgICAtICAgICAgICAjIE92ZXJyaWRlICdzcmN0cmVlJyBlbnZpcm9ubWVu
dCB0byBtYWtlIHRoZSB0ZXN0IGFzIHRoZSB0b3AgZGlyZWN0b3J5DQogICAgLSAgICAgICAgZXh0
cmFfZW52WydzcmN0cmVlJ10gPSBzZWxmLl90ZXN0X2Rpcg0KICAgIC0NCiAgICAtICAgICAgICAj
IFJ1biBLY29uZmlnIGluIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeS4NCiAgICAtICAgICAgICAjIFRo
aXMgZGlyZWN0b3J5IGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB3aGVuIGRvbmUuDQogICAgLSAg
ICAgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0ZW1wX2RpcjoNCiAg
ICAtDQogICAgLSAgICAgICAgICAgICMgaWYgLmNvbmZpZyBpcyBnaXZlbiwgY29weSBpdCB0byB0
aGUgd29ya2luZyBkaXJlY3RvcnkNCiAgICAtICAgICAgICAgICAgaWYgZG90X2NvbmZpZzoNCiAg
ICAtICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5fdGVz
dF9kaXIsIGRvdF9jb25maWcpLA0KICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9zLnBhdGguam9pbih0ZW1wX2RpciwgJy5jb25maWcnKSkNCiAgICAtDQogICAgLSAgICAgICAg
ICAgIHBzID0gc3VicHJvY2Vzcy5Qb3Blbihjb21tYW5kLA0KICAgIC0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLA0KICAgIC0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwNCiAgICAtICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsDQog
ICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjd2Q9dGVtcF9kaXIsDQogICAg
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZGljdChvcy5lbnZpcm9uLCAq
KmV4dHJhX2VudikpDQogICAgLQ0KICAgIC0gICAgICAgICAgICAjIElmIGlucHV0IGtleSBzZXF1
ZW5jZSBpcyBnaXZlbiwgZmVlZCBpdCB0byBzdGRpbi4NCiAgICAtICAgICAgICAgICAgaWYgaW5f
a2V5czoNCiAgICAtICAgICAgICAgICAgICAgIHBzLnN0ZGluLndyaXRlKGluX2tleXMuZW5jb2Rl
KCd1dGYtOCcpKQ0KICAgIC0NCiAgICAtICAgICAgICAgICAgd2hpbGUgcHMucG9sbCgpIGlzIE5v
bmU6DQogICAgLSAgICAgICAgICAgICAgICAjIEZvciBpbnRlcmFjdGl2ZSBtb2RlcyBzdWNoIGFz
IG9sZGFza2NvbmZpZywgb2xkY29uZmlnLA0KICAgIC0gICAgICAgICAgICAgICAgIyBzZW5kICdF
bnRlcicga2V5IHVudGlsIHRoZSBwcm9ncmFtIGZpbmlzaGVzLg0KICAgIC0gICAgICAgICAgICAg
ICAgaWYgaW50ZXJhY3RpdmU6DQogICAgLSAgICAgICAgICAgICAgICAgICAgcHMuc3RkaW4ud3Jp
dGUoYidcbicpDQogICAgLQ0KICAgIC0gICAgICAgICAgICBzZWxmLnJldGNvZGUgPSBwcy5yZXR1
cm5jb2RlDQogICAgLSAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gcHMuc3Rkb3V0LnJlYWQoKS5k
ZWNvZGUoKQ0KICAgIC0gICAgICAgICAgICBzZWxmLnN0ZGVyciA9IHBzLnN0ZGVyci5yZWFkKCku
ZGVjb2RlKCkNCiAgICAtDQogICAgLSAgICAgICAgICAgICMgUmV0cmlldmUgdGhlIHJlc3VsdGVk
IGNvbmZpZyBkYXRhIG9ubHkgd2hlbiAuY29uZmlnIGlzIHN1cHBvc2VkDQogICAgLSAgICAgICAg
ICAgICMgdG8gZXhpc3QuICBJZiB0aGUgY29tbWFuZCBmYWlscywgdGhlIC5jb25maWcgZG9lcyBu
b3QgZXhpc3QuDQogICAgLSAgICAgICAgICAgICMgJ2xpc3RuZXdjb25maWcnIGRvZXMgbm90IHBy
b2R1Y2UgLmNvbmZpZyBpbiB0aGUgZmlyc3QgcGxhY2UuDQogICAgLSAgICAgICAgICAgIGlmIHNl
bGYucmV0Y29kZSA9PSAwIGFuZCBvdXRfZmlsZToNCiAgICAtICAgICAgICAgICAgICAgIHdpdGgg
b3Blbihvcy5wYXRoLmpvaW4odGVtcF9kaXIsIG91dF9maWxlKSkgYXMgZjoNCiAgICAtICAgICAg
ICAgICAgICAgICAgICBzZWxmLmNvbmZpZyA9IGYucmVhZCgpDQogICAgLSAgICAgICAgICAgIGVs
c2U6DQogICAgLSAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZyA9IE5vbmUNCiAgICAtDQogICAg
LSAgICAgICAgIyBMb2dnaW5nOg0KICAgIC0gICAgICAgICMgUHl0ZXN0IGNhcHR1cmVzIHRoZSBm
b2xsb3dpbmcgaW5mb3JtYXRpb24gYnkgZGVmYXVsdC4gIEluIGZhaWx1cmUNCiAgICAtICAgICAg
ICAjIG9mIHRlc3RzLCB0aGUgY2FwdHVyZWQgbG9nIHdpbGwgYmUgZGlzcGxheWVkLiAgVGhpcyB3
aWxsIGJlIHVzZWZ1bCB0bw0KICAgIC0gICAgICAgICMgZmlndXJlIG91dCB3aGF0IGhhcyBoYXBw
ZW5lZC4NCiAgICAtDQogICAgLSAgICAgICAgcHJpbnQoIltjb21tYW5kXVxue31cbiIuZm9ybWF0
KCcgJy5qb2luKGNvbW1hbmQpKSkNCiAgICAtDQogICAgLSAgICAgICAgcHJpbnQoIltyZXRjb2Rl
XVxue31cbiIuZm9ybWF0KHNlbGYucmV0Y29kZSkpDQogICAgLQ0KICAgIC0gICAgICAgIHByaW50
KCJbc3Rkb3V0XSIpDQogICAgLSAgICAgICAgcHJpbnQoc2VsZi5zdGRvdXQpDQogICAgLQ0KICAg
IC0gICAgICAgIHByaW50KCJbc3RkZXJyXSIpDQogICAgLSAgICAgICAgcHJpbnQoc2VsZi5zdGRl
cnIpDQogICAgLQ0KICAgIC0gICAgICAgIGlmIHNlbGYuY29uZmlnIGlzIG5vdCBOb25lOg0KICAg
IC0gICAgICAgICAgICBwcmludCgiW291dHB1dCBmb3IgJ3t9J10iLmZvcm1hdChvdXRfZmlsZSkp
DQogICAgLSAgICAgICAgICAgIHByaW50KHNlbGYuY29uZmlnKQ0KICAgIC0NCiAgICAtICAgICAg
ICByZXR1cm4gc2VsZi5yZXRjb2RlDQogICAgLQ0KICAgIC0gICAgZGVmIG9sZGFza2NvbmZpZyhz
ZWxmLCBkb3RfY29uZmlnPU5vbmUsIGluX2tleXM9Tm9uZSk6DQogICAgLSAgICAgICAgIiIiUnVu
IG9sZGFza2NvbmZpZy4NCiAgICAtDQogICAgLSAgICAgICAgZG90X2NvbmZpZzogLmNvbmZpZyBm
aWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25hbCkNCiAgICAtICAgICAg
ICBpbl9rZXk6IGtleSBpbnB1dHMgKG9wdGlvbmFsKQ0KICAgIC0gICAgICAgIHJldHVybmNvZGU6
IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUNCiAgICAtICAgICAgICAiIiIN
CiAgICAtICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tb2xkYXNrY29uZmlnJywgZG90
X2NvbmZpZz1kb3RfY29uZmlnLA0KICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnRlcmFjdGl2ZT1UcnVlLCBpbl9rZXlzPWluX2tleXMpDQogICAgLQ0KICAgIC0gICAgZGVmIG9s
ZGNvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUsIGluX2tleXM9Tm9uZSk6DQogICAgLSAgICAg
ICAgIiIiUnVuIG9sZGNvbmZpZy4NCiAgICAtDQogICAgLSAgICAgICAgZG90X2NvbmZpZzogLmNv
bmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25hbCkNCiAgICAt
ICAgICAgICBpbl9rZXk6IGtleSBpbnB1dHMgKG9wdGlvbmFsKQ0KICAgIC0gICAgICAgIHJldHVy
bmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4ZWN1dGFibGUNCiAgICAtICAgICAg
ICAiIiINCiAgICAtICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tb2xkY29uZmlnJywg
ZG90X2NvbmZpZz1kb3RfY29uZmlnLA0KICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnRlcmFjdGl2ZT1UcnVlLCBpbl9rZXlzPWluX2tleXMpDQogICAgLQ0KICAgIC0gICAgZGVm
IG9sZGRlZmNvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUpOg0KICAgIC0gICAgICAgICIiIlJ1
biBvbGRkZWZjb25maWcuDQogICAgLQ0KICAgIC0gICAgICAgIGRvdF9jb25maWc6IC5jb25maWcg
ZmlsZSB0byB1c2UgZm9yIGNvbmZpZ3VyYXRpb24gYmFzZSAob3B0aW9uYWwpDQogICAgLSAgICAg
ICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAg
IC0gICAgICAgICIiIg0KICAgIC0gICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1vbGRk
ZWZjb25maWcnLCBkb3RfY29uZmlnPWRvdF9jb25maWcpDQogICAgLQ0KICAgIC0gICAgZGVmIGRl
ZmNvbmZpZyhzZWxmLCBkZWZjb25maWcpOg0KICAgIC0gICAgICAgICIiIlJ1biBkZWZjb25maWcu
DQogICAgLQ0KICAgIC0gICAgICAgIGRlZmNvbmZpZzogZGVmY29uZmlnIGZpbGUgZm9yIGlucHV0
DQogICAgLSAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhl
Y3V0YWJsZQ0KICAgIC0gICAgICAgICIiIg0KICAgIC0gICAgICAgIGRlZmNvbmZpZ19wYXRoID0g
b3MucGF0aC5qb2luKHNlbGYuX3Rlc3RfZGlyLCBkZWZjb25maWcpDQogICAgLSAgICAgICAgcmV0
dXJuIHNlbGYuX3J1bl9jb25mKCctLWRlZmNvbmZpZz17fScuZm9ybWF0KGRlZmNvbmZpZ19wYXRo
KSkNCiAgICAtDQogICAgLSAgICBkZWYgX2FsbGNvbmZpZyhzZWxmLCBtb2RlLCBhbGxfY29uZmln
KToNCiAgICAtICAgICAgICBpZiBhbGxfY29uZmlnOg0KICAgIC0gICAgICAgICAgICBhbGxfY29u
ZmlnX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGFsbF9jb25maWcpDQogICAg
LSAgICAgICAgICAgIGV4dHJhX2VudiA9IHsnS0NPTkZJR19BTExDT05GSUcnOiBhbGxfY29uZmln
X3BhdGh9DQogICAgLSAgICAgICAgZWxzZToNCiAgICAtICAgICAgICAgICAgZXh0cmFfZW52ID0g
e30NCiAgICAtDQogICAgLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCctLXt9Y29uZmln
Jy5mb3JtYXQobW9kZSksIGV4dHJhX2Vudj1leHRyYV9lbnYpDQogICAgLQ0KICAgIC0gICAgZGVm
IGFsbHllc2NvbmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOg0KICAgIC0gICAgICAgICIiIlJ1
biBhbGx5ZXNjb25maWcuDQogICAgLQ0KICAgIC0gICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50
IGNvbmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpDQogICAgLSAgICAg
ICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAg
IC0gICAgICAgICIiIg0KICAgIC0gICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbHll
cycsIGFsbF9jb25maWcpDQogICAgLQ0KICAgIC0gICAgZGVmIGFsbG1vZGNvbmZpZyhzZWxmLCBh
bGxfY29uZmlnPU5vbmUpOg0KICAgIC0gICAgICAgICIiIlJ1biBhbGxtb2Rjb25maWcuDQogICAg
LQ0KICAgIC0gICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNvbmZpZyBmaWxlIGZvciBLQ09O
RklHX0FMTENPTkZJRyAob3B0aW9uYWwpDQogICAgLSAgICAgICAgcmV0dXJuY29kZTogZXhpdCBz
dGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgIC0gICAgICAgICIiIg0KICAgIC0g
ICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbG1vZCcsIGFsbF9jb25maWcpDQogICAg
LQ0KICAgIC0gICAgZGVmIGFsbG5vY29uZmlnKHNlbGYsIGFsbF9jb25maWc9Tm9uZSk6DQogICAg
LSAgICAgICAgIiIiUnVuIGFsbG5vY29uZmlnLg0KICAgIC0NCiAgICAtICAgICAgICBhbGxfY29u
ZmlnOiBmcmFnbWVudCBjb25maWcgZmlsZSBmb3IgS0NPTkZJR19BTExDT05GSUcgKG9wdGlvbmFs
KQ0KICAgIC0gICAgICAgIHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBLY29uZmlnIGV4
ZWN1dGFibGUNCiAgICAtICAgICAgICAiIiINCiAgICAtICAgICAgICByZXR1cm4gc2VsZi5fYWxs
Y29uZmlnKCdhbGxubycsIGFsbF9jb25maWcpDQogICAgLQ0KICAgIC0gICAgZGVmIGFsbGRlZmNv
bmZpZyhzZWxmLCBhbGxfY29uZmlnPU5vbmUpOg0KICAgIC0gICAgICAgICIiIlJ1biBhbGxkZWZj
b25maWcuDQogICAgLQ0KICAgIC0gICAgICAgIGFsbF9jb25maWc6IGZyYWdtZW50IGNvbmZpZyBm
aWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0aW9uYWwpDQogICAgLSAgICAgICAgcmV0dXJu
Y29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgIC0gICAgICAg
ICIiIg0KICAgIC0gICAgICAgIHJldHVybiBzZWxmLl9hbGxjb25maWcoJ2FsbGRlZicsIGFsbF9j
b25maWcpDQogICAgLQ0KICAgIC0gICAgZGVmIHJhbmRjb25maWcoc2VsZiwgYWxsX2NvbmZpZz1O
b25lKToNCiAgICAtICAgICAgICAiIiJSdW4gcmFuZGNvbmZpZy4NCiAgICAtDQogICAgLSAgICAg
ICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9yIEtDT05GSUdfQUxMQ09ORklH
IChvcHRpb25hbCkNCiAgICAtICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUg
S2NvbmZpZyBleGVjdXRhYmxlDQogICAgLSAgICAgICAgIiIiDQogICAgLSAgICAgICAgcmV0dXJu
IHNlbGYuX2FsbGNvbmZpZygncmFuZCcsIGFsbF9jb25maWcpDQogICAgLQ0KICAgIC0gICAgZGVm
IHNhdmVkZWZjb25maWcoc2VsZiwgZG90X2NvbmZpZyk6DQogICAgLSAgICAgICAgIiIiUnVuIHNh
dmVkZWZjb25maWcuDQogICAgLQ0KICAgIC0gICAgICAgIGRvdF9jb25maWc6IC5jb25maWcgZmls
ZSBmb3IgaW5wdXQNCiAgICAtICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUg
S2NvbmZpZyBleGVjdXRhYmxlDQogICAgLSAgICAgICAgIiIiDQogICAgLSAgICAgICAgcmV0dXJu
IHNlbGYuX3J1bl9jb25mKCctLXNhdmVkZWZjb25maWcnLCBvdXRfZmlsZT0nZGVmY29uZmlnJykN
CiAgICAtDQogICAgLSAgICBkZWYgbGlzdG5ld2NvbmZpZyhzZWxmLCBkb3RfY29uZmlnPU5vbmUp
Og0KICAgIC0gICAgICAgICIiIlJ1biBsaXN0bmV3Y29uZmlnLg0KICAgIC0NCiAgICAtICAgICAg
ICBkb3RfY29uZmlnOiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2Ug
KG9wdGlvbmFsKQ0KICAgIC0gICAgICAgIHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9mIHRoZSBL
Y29uZmlnIGV4ZWN1dGFibGUNCiAgICAtICAgICAgICAiIiINCiAgICAtICAgICAgICByZXR1cm4g
c2VsZi5fcnVuX2NvbmYoJy0tbGlzdG5ld2NvbmZpZycsIGRvdF9jb25maWc9ZG90X2NvbmZpZywN
CiAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0X2ZpbGU9Tm9uZSkNCiAgICAt
DQogICAgLSAgICAjIGNoZWNrZXJzDQogICAgLSAgICBkZWYgX3JlYWRfYW5kX2NvbXBhcmUoc2Vs
ZiwgY29tcGFyZSwgZXhwZWN0ZWQpOg0KICAgIC0gICAgICAgICIiIkNvbXBhcmUgdGhlIHJlc3Vs
dCB3aXRoIGV4cGVjdGF0aW9uLg0KICAgIC0NCiAgICAtICAgICAgICBjb21wYXJlOiBmdW5jdGlv
biB0byBjb21wYXJlIHRoZSByZXN1bHQgd2l0aCBleHBlY3RhdGlvbg0KICAgIC0gICAgICAgIGV4
cGVjdGVkOiBmaWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGENCiAgICAtICAgICAg
ICAiIiINCiAgICAtICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3Rlc3RfZGly
LCBleHBlY3RlZCkpIGFzIGY6DQogICAgLSAgICAgICAgICAgIGV4cGVjdGVkX2RhdGEgPSBmLnJl
YWQoKQ0KICAgIC0gICAgICAgIHJldHVybiBjb21wYXJlKHNlbGYsIGV4cGVjdGVkX2RhdGEpDQog
ICAgLQ0KICAgIC0gICAgZGVmIF9jb250YWlucyhzZWxmLCBhdHRyLCBleHBlY3RlZCk6DQogICAg
LSAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfYW5kX2NvbXBhcmUoDQogICAgLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYSBzLCBlOiBnZXRhdHRyKHMsIGF0dHIpLmZp
bmQoZSkgPj0gMCwNCiAgICAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhw
ZWN0ZWQpDQogICAgLQ0KICAgIC0gICAgZGVmIF9tYXRjaGVzKHNlbGYsIGF0dHIsIGV4cGVjdGVk
KToNCiAgICAtICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbmRfY29tcGFyZShsYW1iZGEgcywg
ZTogZ2V0YXR0cihzLCBhdHRyKSA9PSBlLA0KICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4cGVjdGVkKQ0KICAgIC0NCiAgICAtICAgIGRlZiBjb25maWdfY29udGFp
bnMoc2VsZiwgZXhwZWN0ZWQpOg0KICAgIC0gICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIGNv
bmZpZ3VyYXRpb24gY29udGFpbnMgZXhwZWN0ZWQgZGF0YS4NCiAgICAtDQogICAgLSAgICAgICAg
ZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQ0KICAgIC0gICAg
ICAgIHJldHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRh
LCBGYWxzZSBvdGhlcndpc2UNCiAgICAtICAgICAgICAiIiINCiAgICAtICAgICAgICByZXR1cm4g
c2VsZi5fY29udGFpbnMoJ2NvbmZpZycsIGV4cGVjdGVkKQ0KICAgIC0NCiAgICAtICAgIGRlZiBj
b25maWdfbWF0Y2hlcyhzZWxmLCBleHBlY3RlZCk6DQogICAgLSAgICAgICAgIiIiQ2hlY2sgaWYg
cmVzdWx0ZWQgY29uZmlndXJhdGlvbiBleGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4NCiAg
ICAtDQogICAgLSAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0
ZWQgZGF0YQ0KICAgIC0gICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IG1hdGNoZXMg
dGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQ0KICAgIC0gICAgICAgICIiIg0KICAg
IC0gICAgICAgIHJldHVybiBzZWxmLl9tYXRjaGVzKCdjb25maWcnLCBleHBlY3RlZCkNCiAgICAt
DQogICAgLSAgICBkZWYgc3Rkb3V0X2NvbnRhaW5zKHNlbGYsIGV4cGVjdGVkKToNCiAgICAtICAg
ICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBzdGRvdXQgY29udGFpbnMgZXhwZWN0ZWQgZGF0YS4N
CiAgICAtDQogICAgLSAgICAgICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhw
ZWN0ZWQgZGF0YQ0KICAgIC0gICAgICAgIHJldHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IGNvbnRh
aW5zIHRoZSBleHBlY3RlZCBkYXRhLCBGYWxzZSBvdGhlcndpc2UNCiAgICAtICAgICAgICAiIiIN
CiAgICAtICAgICAgICByZXR1cm4gc2VsZi5fY29udGFpbnMoJ3N0ZG91dCcsIGV4cGVjdGVkKQ0K
ICAgIC0NCiAgICAtICAgIGRlZiBzdGRvdXRfbWF0Y2hlcyhzZWxmLCBleHBlY3RlZCk6DQogICAg
LSAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3Rkb3V0IGV4YWN0bHkgbWF0Y2hlcyBleHBl
Y3RlZCBkYXRhLg0KICAgIC0NCiAgICAtICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNvbnRh
aW5zIHRoZSBleHBlY3RlZCBkYXRhDQogICAgLSAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiBy
ZXN1bHQgbWF0Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlDQogICAgLSAg
ICAgICAgIiIiDQogICAgLSAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ3N0ZG91dCcsIGV4
cGVjdGVkKQ0KICAgIC0NCiAgICAtICAgIGRlZiBzdGRlcnJfY29udGFpbnMoc2VsZiwgZXhwZWN0
ZWQpOg0KICAgIC0gICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBjb250YWlucyBl
eHBlY3RlZCBkYXRhLg0KICAgIC0NCiAgICAtICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNv
bnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhDQogICAgLSAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBp
ZiByZXN1bHQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQ0KICAg
IC0gICAgICAgICIiIg0KICAgIC0gICAgICAgIHJldHVybiBzZWxmLl9jb250YWlucygnc3RkZXJy
JywgZXhwZWN0ZWQpDQogICAgLQ0KICAgIC0gICAgZGVmIHN0ZGVycl9tYXRjaGVzKHNlbGYsIGV4
cGVjdGVkKToNCiAgICAtICAgICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBzdGRlcnIgZXhhY3Rs
eSBtYXRjaGVzIGV4cGVjdGVkIGRhdGEuDQogICAgLQ0KICAgIC0gICAgICAgIGV4cGVjdGVkOiBm
aWxlIHRoYXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGENCiAgICAtICAgICAgICByZXR1cm5j
b2RlOiBUcnVlIGlmIHJlc3VsdCBtYXRjaGVzIHRoZSBleHBlY3RlZCBkYXRhLCBGYWxzZSBvdGhl
cndpc2UNCiAgICAtICAgICAgICAiIiINCiAgICAtICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hl
cygnc3RkZXJyJywgZXhwZWN0ZWQpDQogICAgLQ0KICAgIC0NCiAgICAtQHB5dGVzdC5maXh0dXJl
KHNjb3BlPSJtb2R1bGUiKQ0KICAgIC1kZWYgY29uZihyZXF1ZXN0KToNCiAgICAtICAgICIiIkNy
ZWF0ZSBhIENvbmYgaW5zdGFuY2UgYW5kIHByb3ZpZGUgaXQgdG8gdGVzdCBmdW5jdGlvbnMuIiIi
DQogICAgLSAgICByZXR1cm4gQ29uZihyZXF1ZXN0KQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcgYi9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcNCiAgICBkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBlYmRiM2ZmLi4wMDAwMDAwDQogICAgLS0tIGEvc3Vw
cG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnDQogICAgKysr
IC9kZXYvbnVsbA0KICAgIEBAIC0xLDYzICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMA0KICAgIC0NCiAgICAtIyBkZXBlbmRzIG9uIGl0c2VsZg0KICAgIC0N
CiAgICAtY29uZmlnIEENCiAgICAtCWJvb2wgIkEiDQogICAgLQlkZXBlbmRzIG9uIEENCiAgICAt
DQogICAgLSMgc2VsZWN0IGl0c2VsZg0KICAgIC0NCiAgICAtY29uZmlnIEINCiAgICAtCWJvb2wN
CiAgICAtCXNlbGVjdCBCDQogICAgLQ0KICAgIC0jIGRlcGVuZHMgb24gZWFjaCBvdGhlcg0KICAg
IC0NCiAgICAtY29uZmlnIEMxDQogICAgLQlib29sICJDMSINCiAgICAtCWRlcGVuZHMgb24gQzIN
CiAgICAtDQogICAgLWNvbmZpZyBDMg0KICAgIC0JYm9vbCAiQzIiDQogICAgLQlkZXBlbmRzIG9u
IEMxDQogICAgLQ0KICAgIC0jIGRlcGVuZHMgb24gYW5kIHNlbGVjdA0KICAgIC0NCiAgICAtY29u
ZmlnIEQxDQogICAgLQlib29sICJEMSINCiAgICAtCWRlcGVuZHMgb24gRDINCiAgICAtCXNlbGVj
dCBEMg0KICAgIC0NCiAgICAtY29uZmlnIEQyDQogICAgLQlib29sDQogICAgLQ0KICAgIC0jIGRl
cGVuZHMgb24gYW5kIGltcGx5DQogICAgLQ0KICAgIC1jb25maWcgRTENCiAgICAtCWJvb2wgIkUx
Ig0KICAgIC0JZGVwZW5kcyBvbiBFMg0KICAgIC0JaW1wbHkgRTINCiAgICAtDQogICAgLWNvbmZp
ZyBFMg0KICAgIC0JYm9vbCAiRTIiDQogICAgLQ0KICAgIC0jIHByb3BlcnR5DQogICAgLQ0KICAg
IC1jb25maWcgRjENCiAgICAtCWJvb2wgIkYxIg0KICAgIC0JZGVmYXVsdCBGMg0KICAgIC0NCiAg
ICAtY29uZmlnIEYyDQogICAgLQlib29sICJGMiINCiAgICAtCWRlcGVuZHMgb24gRjENCiAgICAt
DQogICAgLSMgbWVudQ0KICAgIC0NCiAgICAtbWVudSAibWVudSBkZXBlbmRpbmcgb24gaXRzIGNv
bnRlbnQiDQogICAgLQlkZXBlbmRzIG9uIEcNCiAgICAtDQogICAgLWNvbmZpZyBHDQogICAgLQli
b29sICJHIg0KICAgIC0NCiAgICAtZW5kbWVudQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5IGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weQ0KICAgIGRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDVmMzgyMWIuLjAwMDAwMDANCiAgICAtLS0g
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5
DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDEwICswLDAgQEANCiAgICAtIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0iIiINCiAgICAtRGV0ZWN0IHJlY3Vyc2l2
ZSBkZXBlbmRlbmN5IGVycm9yLg0KICAgIC0NCiAgICAtUmVjdXJzaXZlIGRlcGVuZGVuY3kgc2hv
dWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuDQogICAgLSIiIg0KICAgIC0NCiAgICAtZGVmIHRl
c3QoY29uZik6DQogICAgLSAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSA9PSAxDQogICAg
LSAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZGVycicpDQogICAg
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAv
ZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZl
X2RlcC9leHBlY3RlZF9zdGRlcnINCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCA4NDY3OWIxLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnINCiAgICArKysgL2Rldi9udWxsDQog
ICAgQEAgLTEsMzggKzAsMCBAQA0KICAgIC1LY29uZmlnOjExOmVycm9yOiByZWN1cnNpdmUgZGVw
ZW5kZW5jeSBkZXRlY3RlZCENCiAgICAtS2NvbmZpZzoxMToJc3ltYm9sIEIgaXMgc2VsZWN0ZWQg
YnkgQg0KICAgIC1Gb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxk
L2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgLXN1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZl
IGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgLQ0KICAgIC1LY29uZmlnOjU6ZXJyb3I6IHJl
Y3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQ0KICAgIC1LY29uZmlnOjU6CXN5bWJvbCBBIGRl
cGVuZHMgb24gQQ0KICAgIC1Gb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24v
a2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgLXN1YnNlY3Rpb24gIktjb25maWcgcmVj
dXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgLQ0KICAgIC1LY29uZmlnOjE3OmVy
cm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCENCiAgICAtS2NvbmZpZzoxNzoJc3lt
Ym9sIEMxIGRlcGVuZHMgb24gQzINCiAgICAtS2NvbmZpZzoyMToJc3ltYm9sIEMyIGRlcGVuZHMg
b24gQzENCiAgICAtRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWls
ZC9rY29uZmlnLWxhbmd1YWdlLnR4dA0KICAgIC1zdWJzZWN0aW9uICJLY29uZmlnIHJlY3Vyc2l2
ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIg0KICAgIC0NCiAgICAtS2NvbmZpZzozMjplcnJvcjog
cmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhDQogICAgLUtjb25maWc6MzI6CXN5bWJvbCBE
MiBpcyBzZWxlY3RlZCBieSBEMQ0KICAgIC1LY29uZmlnOjI3OglzeW1ib2wgRDEgZGVwZW5kcyBv
biBEMg0KICAgIC1Gb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxk
L2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgLXN1YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZl
IGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgLQ0KICAgIC1LY29uZmlnOjM3OmVycm9yOiBy
ZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCENCiAgICAtS2NvbmZpZzozNzoJc3ltYm9sIEUx
IGRlcGVuZHMgb24gRTINCiAgICAtS2NvbmZpZzo0MjoJc3ltYm9sIEUyIGlzIGltcGxpZWQgYnkg
RTENCiAgICAtRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVudGF0aW9uL2tidWlsZC9r
Y29uZmlnLWxhbmd1YWdlLnR4dA0KICAgIC1zdWJzZWN0aW9uICJLY29uZmlnIHJlY3Vyc2l2ZSBk
ZXBlbmRlbmN5IGxpbWl0YXRpb25zIg0KICAgIC0NCiAgICAtS2NvbmZpZzo2MDplcnJvcjogcmVj
dXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhDQogICAgLUtjb25maWc6NjA6CXN5bWJvbCBHIGRl
cGVuZHMgb24gRw0KICAgIC1Gb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50YXRpb24v
a2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgLXN1YnNlY3Rpb24gIktjb25maWcgcmVj
dXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgLQ0KICAgIC1LY29uZmlnOjUxOmVy
cm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCENCiAgICAtS2NvbmZpZzo1MToJc3lt
Ym9sIEYyIGRlcGVuZHMgb24gRjENCiAgICAtS2NvbmZpZzo0OToJc3ltYm9sIEYxIGRlZmF1bHQg
dmFsdWUgY29udGFpbnMgRjINCiAgICAtRm9yIGEgcmVzb2x1dGlvbiByZWZlciB0byBEb2N1bWVu
dGF0aW9uL2tidWlsZC9rY29uZmlnLWxhbmd1YWdlLnR4dA0KICAgIC1zdWJzZWN0aW9uICJLY29u
ZmlnIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGxpbWl0YXRpb25zIg0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcgYi9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcNCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBjNmY0YWRlLi4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnDQog
ICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDIgKzAsMCBAQA0KICAgIC0jIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCiAgICAtc291cmNlICJLY29uZmlnLmluYzEiDQog
ICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9p
bmMvS2NvbmZpZy5pbmMxIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZl
X2luYy9LY29uZmlnLmluYzENCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMWNiZjBkLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9l
cnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzENCiAgICArKysgL2Rldi9udWxsDQogICAgQEAg
LTEsNSArMCwwIEBADQogICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25s
eQ0KICAgIC0NCiAgICAtDQogICAgLQ0KICAgIC1zb3VyY2UgIktjb25maWcuaW5jMiINCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9L
Y29uZmlnLmluYzIgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5j
L0tjb25maWcuaW5jMg0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDgy
MzUxMDcuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2Vycl9y
ZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMg0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw0
ICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQog
ICAgLQ0KICAgIC0NCiAgICAtc291cmNlICJLY29uZmlnLmluYzMiDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMz
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmlu
YzMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBjNmY0YWRlLi4wMDAw
MDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2lu
Yy9LY29uZmlnLmluYzMNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMiArMCwwIEBADQog
ICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KICAgIC1zb3VyY2Ug
Iktjb25maWcuaW5jMSINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAyN2FhMTg5Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQ0KICAgICsrKyAvZGV2
L251bGwNCiAgICBAQCAtMSwxMSArMCwwIEBADQogICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEdQTC0yLjANCiAgICAtIiIiDQogICAgLURldGVjdCByZWN1cnNpdmUgaW5jbHVzaW9uIGVy
cm9yLg0KICAgIC0NCiAgICAtSWYgcmVjdXJzaXZlIGluY2x1c2lvbiBpcyBkZXRlY3RlZCwgaXQg
c2hvdWxkIGZhaWwgd2l0aCBlcnJvciBtZXNzYWdlcy4NCiAgICAtIiIiDQogICAgLQ0KICAgIC0N
CiAgICAtZGVmIHRlc3QoY29uZik6DQogICAgLSAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWco
KSAhPSAwDQogICAgLSAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFpbnMoJ2V4cGVjdGVkX3N0
ZGVycicpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvZXJyX3Jl
Y3Vyc2l2ZV9pbmMvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9l
cnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnINCiAgICBkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCBiMDcwYTMxLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnINCiAgICArKysg
L2Rldi9udWxsDQogICAgQEAgLTEsNiArMCwwIEBADQogICAgLVJlY3Vyc2l2ZSBpbmNsdXNpb24g
ZGV0ZWN0ZWQuDQogICAgLUluY2x1c2lvbiBwYXRoOg0KICAgIC0gIGN1cnJlbnQgZmlsZSA6IEtj
b25maWcuaW5jMQ0KICAgIC0gIGluY2x1ZGVkIGZyb206IEtjb25maWcuaW5jMzoyDQogICAgLSAg
aW5jbHVkZWQgZnJvbTogS2NvbmZpZy5pbmMyOjQNCiAgICAtICBpbmNsdWRlZCBmcm9tOiBLY29u
ZmlnLmluYzE6NQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2lu
dGVyX2Nob2ljZS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9p
Y2UvS2NvbmZpZw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDU2OThh
NDAuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2No
b2ljZS9LY29uZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDI1ICswLDAgQEANCiAg
ICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0NCiAgICAtY29uZmln
IE1PRFVMRVMNCiAgICAtCWRlZl9ib29sIHkNCiAgICAtCW9wdGlvbiBtb2R1bGVzDQogICAgLQ0K
ICAgIC1jaG9pY2UNCiAgICAtCXByb21wdCAiQ2hvaWNlIg0KICAgIC0NCiAgICAtY29uZmlnIENI
T0lDRV9WQUwwDQogICAgLQl0cmlzdGF0ZSAiQ2hvaWNlIDAiDQogICAgLQ0KICAgIC1jb25maWcg
Q0hPSVZFX1ZBTDENCiAgICAtCXRyaXN0YXRlICJDaG9pY2UgMSINCiAgICAtDQogICAgLWVuZGNo
b2ljZQ0KICAgIC0NCiAgICAtY2hvaWNlDQogICAgLQlwcm9tcHQgIkFub3RoZXIgY2hvaWNlIg0K
ICAgIC0JZGVwZW5kcyBvbiBDSE9JQ0VfVkFMMA0KICAgIC0NCiAgICAtY29uZmlnIERVTU1ZDQog
ICAgLQlib29sICJkdW1teSINCiAgICAtDQogICAgLWVuZGNob2ljZQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2ljZS9fX2luaXRfXy5weSBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5DQogICAgZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggZmZlYTZiMS4uMDAwMDAwMA0KICAgIC0t
LSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL19faW5pdF9fLnB5DQog
ICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDE1ICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0iIiINCiAgICAtRG8gbm90IGFmZmVjdCB1c2Vy
LWFzc2lnbmVkIGNob2ljZSB2YWx1ZSBieSBhbm90aGVyIGNob2ljZS4NCiAgICAtDQogICAgLUhh
bmRsaW5nIG9mIHN0YXRlIGZsYWdzIGZvciBjaG9pY2VzIGlzIGNvbXBsZWNhdGVkLiAgSW4gb2xk
IGRheXMsDQogICAgLXRoZSBkZWZjb25maWcgcmVzdWx0IG9mIGEgY2hvaWNlIGNvdWxkIGJlIGFm
ZmVjdGVkIGJ5IGFub3RoZXIgY2hvaWNlDQogICAgLWlmIHRob3NlIGNob2ljZXMgaW50ZXJhY3Qg
YnkgJ2RlcGVuZHMgb24nLCAnc2VsZWN0JywgZXRjLg0KICAgIC0NCiAgICAtUmVsYXRlZCBMaW51
eCBjb21taXQ6IGZiZTk4YmI5ZWQzZGFlMjNlMzIwYzZiMTEzZTM1ZjEyOTUzOGQxNGENCiAgICAt
IiIiDQogICAgLQ0KICAgIC0NCiAgICAtZGVmIHRlc3QoY29uZik6DQogICAgLSAgICBhc3NlcnQg
Y29uZi5kZWZjb25maWcoJ2RlZmNvbmZpZycpID09IDANCiAgICAtICAgIGFzc2VydCBjb25mLmNv
bmZpZ19jb250YWlucygnZXhwZWN0ZWRfY29uZmlnJykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9pbnRlcl9jaG9pY2UvZGVmY29uZmlnDQogICAgZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggMTYyYzQxNC4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZw0KICAgICsrKyAvZGV2L251
bGwNCiAgICBAQCAtMSArMCwwIEBADQogICAgLUNPTkZJR19DSE9JQ0VfVkFMMD15DQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVk
X2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVk
X2NvbmZpZw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDVkY2VlZmIu
LjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL2ludGVyX2Nob2lj
ZS9leHBlY3RlZF9jb25maWcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsNCArMCwwIEBA
DQogICAgLUNPTkZJR19NT0RVTEVTPXkNCiAgICAtQ09ORklHX0NIT0lDRV9WQUwwPXkNCiAgICAt
IyBDT05GSUdfQ0hPSVZFX1ZBTDEgaXMgbm90IHNldA0KICAgIC1DT05GSUdfRFVNTVk9eQ0KICAg
IGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9k
ZXAvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2Rl
cC9LY29uZmlnDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMTI3NzMx
Yy4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2lj
ZV93aXRoX2RlcC9LY29uZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDM5ICswLDAg
QEANCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0NCiAgICAt
Y29uZmlnIEENCiAgICAtCWJvb2wgIkEiDQogICAgLQloZWxwDQogICAgLQkgIFRoaXMgaXMgYSBu
ZXcgc3ltYm9sLg0KICAgIC0NCiAgICAtY2hvaWNlDQogICAgLQlwcm9tcHQgIkNob2ljZSA/Ig0K
ICAgIC0JZGVwZW5kcyBvbiBBDQogICAgLQloZWxwDQogICAgLQkgICJkZXBlbmRzIG9uIEEiIGhh
cyBiZWVuIG5ld2x5IGFkZGVkLg0KICAgIC0NCiAgICAtY29uZmlnIENIT0lDRV9CDQogICAgLQli
b29sICJDaG9pY2UgQiINCiAgICAtDQogICAgLWNvbmZpZyBDSE9JQ0VfQw0KICAgIC0JYm9vbCAi
Q2hvaWNlIEMiDQogICAgLQloZWxwDQogICAgLQkgIFRoaXMgaXMgYSBuZXcgc3ltYm9sLCBzbyBz
aG91bGQgYmUgYXNrZWQuDQogICAgLQ0KICAgIC1lbmRjaG9pY2UNCiAgICAtDQogICAgLWNob2lj
ZQ0KICAgIC0JcHJvbXB0ICJDaG9pY2UyID8iDQogICAgLQ0KICAgIC1jb25maWcgQ0hPSUNFX0QN
CiAgICAtCWJvb2wgIkNob2ljZSBEIg0KICAgIC0NCiAgICAtY29uZmlnIENIT0lDRV9FDQogICAg
LQlib29sICJDaG9pY2UgRSINCiAgICAtDQogICAgLWNvbmZpZyBDSE9JQ0VfRg0KICAgIC0JYm9v
bCAiQ2hvaWNlIEYiDQogICAgLQlkZXBlbmRzIG9uIEENCiAgICAtCWhlbHANCiAgICAtCSAgVGhp
cyBpcyBhIG5ldyBzeW1ib2wsIHNvIHNob3VsZCBiZSBhc2tlZC4NCiAgICAtDQogICAgLWVuZGNo
b2ljZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9p
Y2Vfd2l0aF9kZXAvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19j
aG9pY2Vfd2l0aF9kZXAvX19pbml0X18ucHkNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQN
CiAgICBpbmRleCBmZTlkMzIyLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5l
dy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5DQogICAgKysrIC9kZXYvbnVs
bA0KICAgIEBAIC0xLDE1ICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog
R1BMLTIuMA0KICAgIC0iIiINCiAgICAtQXNrIG5ldyBjaG9pY2UgdmFsdWVzIHdoZW4gdGhleSBi
ZWNvbWUgdmlzaWJsZS4NCiAgICAtDQogICAgLUlmIG5ldyBjaG9pY2UgdmFsdWVzIGFyZSBhZGRl
ZCB3aXRoIG5ldyBkZXBlbmRlbmN5LCBhbmQgdGhleSBiZWNvbWUNCiAgICAtdmlzaWJsZSBkdXJp
bmcgdXNlciBjb25maWd1cmF0aW9uLCBvbGRjb25maWcgc2hvdWxkIHJlY29nbml6ZSB0aGVtDQog
ICAgLWFzIChORVcpLCBhbmQgYXNrIHRoZSB1c2VyIGZvciBjaG9pY2UuDQogICAgLQ0KICAgIC1S
ZWxhdGVkIExpbnV4IGNvbW1pdDogNWQwOTU5OGQ0ODhmMDgxZTNiZTIzZjg4NWVkNjVjYmJlMmQw
NzNiNQ0KICAgIC0iIiINCiAgICAtDQogICAgLQ0KICAgIC1kZWYgdGVzdChjb25mKToNCiAgICAt
ICAgIGFzc2VydCBjb25mLm9sZGNvbmZpZygnY29uZmlnJywgJ3knKSA9PSAwDQogICAgLSAgICBh
c3NlcnQgY29uZi5zdGRvdXRfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dCcpDQogICAgZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9jb25m
aWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29uZmln
DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggNDdlZjk1ZC4uMDAwMDAw
MA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2Rl
cC9jb25maWcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMyArMCwwIEBADQogICAgLUNP
TkZJR19DSE9JQ0VfQj15DQogICAgLSMgQ09ORklHX0NIT0lDRV9EIGlzIG5vdCBzZXQNCiAgICAt
Q09ORklHX0NIT0lDRV9FPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90
ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQNCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA3NGRjMGJjLi4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4cGVjdGVk
X3N0ZG91dA0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxMCArMCwwIEBADQogICAgLUEg
KEEpIFtOL3kvP10gKE5FVykgeQ0KICAgIC0gIENob2ljZSA/DQogICAgLSAgPiAxLiBDaG9pY2Ug
QiAoQ0hPSUNFX0IpDQogICAgLSAgICAyLiBDaG9pY2UgQyAoQ0hPSUNFX0MpIChORVcpDQogICAg
LSAgY2hvaWNlWzEtMj9dOiANCiAgICAtQ2hvaWNlMiA/DQogICAgLSAgMS4gQ2hvaWNlIEQgKENI
T0lDRV9EKQ0KICAgIC0+IDIuIENob2ljZSBFIChDSE9JQ0VfRSkNCiAgICAtICAzLiBDaG9pY2Ug
RiAoQ0hPSUNFX0YpIChORVcpDQogICAgLWNob2ljZVsxLTM/XTogDQogICAgZGlmZiAtLWdpdCBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9LY29uZmln
DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggNDc2N2FhYi4uMDAwMDAw
MA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3Vu
bWV0L0tjb25maWcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTYgKzAsMCBAQA0KICAg
IC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLQ0KICAgIC1jb25maWcg
QQ0KICAgIC0JYm9vbCAiQSINCiAgICAtDQogICAgLWNob2ljZQ0KICAgIC0JcHJvbXB0ICJDaG9p
Y2UgPyINCiAgICAtCWRlcGVuZHMgb24gQQ0KICAgIC0NCiAgICAtY29uZmlnIENIT0lDRV9CDQog
ICAgLQlib29sICJDaG9pY2UgQiINCiAgICAtDQogICAgLWNvbmZpZyBDSE9JQ0VfQw0KICAgIC0J
Ym9vbCAiQ2hvaWNlIEMiDQogICAgLQ0KICAgIC1lbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvX19pbml0X18u
cHkgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9fX2lu
aXRfXy5weQ0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGZmZDQ2OWQu
LjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9fX2luaXRfXy5weQ0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwyMCAr
MCwwIEBADQogICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtIiIi
DQogICAgLURvIG5vdCB3cml0ZSBjaG9pY2UgdmFsdWVzIHRvIC5jb25maWcgaWYgdGhlIGRlcGVu
ZGVuY3kgaXMgdW5tZXQuDQogICAgLQ0KICAgIC0iIyBDT05GSUdfLi4uIGlzIG5vdCBzZXQiIHNo
b3VsZCBub3QgYmUgd3JpdHRlbiBpbnRvIHRoZSAuY29uZmlnIGZpbGUNCiAgICAtZm9yIHN5bWJv
bHMgd2l0aCB1bm1ldCBkZXBlbmRlbmN5Lg0KICAgIC0NCiAgICAtVGhpcyB3YXMgbm90IHdvcmtp
bmcgY29ycmVjdGx5IGZvciBjaG9pY2UgdmFsdWVzIGJlY2F1c2UgY2hvaWNlIG5lZWRzDQogICAg
LWEgYml0IGRpZmZlcmVudCBzeW1ib2wgY29tcHV0YXRpb24uDQogICAgLQ0KICAgIC1UaGlzIGNo
ZWNrcyB0aGF0IG5vIHVubmVlZGVkICIjIENPRklHXy4uLiBpcyBub3Qgc2V0IiBpcyBjb250YWlu
ZWQgaW4NCiAgICAtdGhlIC5jb25maWcgZmlsZS4NCiAgICAtDQogICAgLVJlbGF0ZWQgTGludXgg
Y29tbWl0OiBjYjY3YWIyY2QyYjhhYmQ5NjUwMjkyYzk4NmM3OTkwMWUzMDczYTU5DQogICAgLSIi
Ig0KICAgIC0NCiAgICAtDQogICAgLWRlZiB0ZXN0KGNvbmYpOg0KICAgIC0gICAgYXNzZXJ0IGNv
bmYub2xkYXNrY29uZmlnKCdjb25maWcnLCAnbicpID09IDANCiAgICAtICAgIGFzc2VydCBjb25m
LmNvbmZpZ19tYXRjaGVzKCdleHBlY3RlZF9jb25maWcnKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcgYi9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcNCiAgICBk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBhYmQyODBlLi4wMDAwMDAwDQogICAg
LS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvY29u
ZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xICswLDAgQEANCiAgICAtQ09ORklHX0E9
eQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25vX3dyaXRlX2lm
X2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL25v
X3dyaXRlX2lmX2RlcF91bm1ldC9leHBlY3RlZF9jb25maWcNCiAgICBkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCA0NzMyMjg4Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnDQog
ICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDUgKzAsMCBAQA0KICAgIC0jDQogICAgLSMgQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgZmlsZTsgRE8gTk9UIEVESVQuDQogICAgLSMgTWFpbiBtZW51
DQogICAgLSMNCiAgICAtIyBDT05GSUdfQSBpcyBub3Qgc2V0DQogICAgZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZp
Zw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IGJhYTMyODguLjAwMDAw
MDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRp
bl9mdW5jL0tjb25maWcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMjcgKzAsMCBAQA0K
ICAgIC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLQ0KICAgIC0jICdp
bmZvJyBwcmludHMgdGhlIGFyZ3VtZW50IHRvIHN0ZG91dC4NCiAgICAtJChpbmZvLGhlbGxvIHdv
cmxkIDApDQogICAgLQ0KICAgIC0jICd3YXJuaW5nLWlmJywgaWYgdGhlIGZpcnN0IGFyZ3VtZW50
IGlzIHksIHNlbmRzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gc3RkZXJyLA0KICAgIC0jIGFuZCB0
aGUgbWVzc2FnZSBpcyBwcmVmaXhlZCB3aXRoIHRoZSBjdXJyZW50IGZpbGUgbmFtZSBhbmQgbGlu
ZSBudW1iZXIuDQogICAgLSQod2FybmluZy1pZix5LGhlbGxvIHdvcmxkIDEpDQogICAgLQ0KICAg
IC0jICdlcnJvci1pZicgaXMgc2ltaWxhciwgYnV0IGl0IHRlcm1pbmF0ZXMgdGhlIHBhcnNpbmcg
aW1tZWRpYXRlbHkuDQogICAgLSMgVGhlIGZvbGxvd2luZyBpcyBqdXN0IG5vLW9wIHNpbmNlIHRo
ZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgeS4NCiAgICAtJChlcnJvci1pZixuLHRoaXMgc2hvdWxk
IG5vdCBiZSBwcmludGVkKQ0KICAgIC0NCiAgICAtIyBTaG9ydGhhbmQNCiAgICAtd2FybmluZyA9
ICQod2FybmluZy1pZix5LCQoMSkpDQogICAgLQ0KICAgIC0jICdzaGVsbCcgZXhlY3V0ZXMgYSBj
b21tYW5kLCBhbmQgcmV0dXJucyBpdHMgc3Rkb3V0Lg0KICAgIC0kKHdhcm5pbmcsJChzaGVsbCxl
Y2hvIGhlbGxvIHdvcmxkIDMpKQ0KICAgIC0NCiAgICAtIyBFdmVyeSBuZXdsaW5lIGluIHRoZSBv
dXRwdXQgaXMgcmVwbGFjZWQgd2l0aCBhIHNwYWNlLA0KICAgIC0jIGJ1dCBhbnkgdHJhaWxpbmcg
bmV3bGluZXMgYXJlIGRlbGV0ZWQuDQogICAgLSQod2FybmluZywkKHNoZWxsLHByaW50ZiAnaGVs
bG9cbndvcmxkXG5cbjRcblxuXG4nKSkNCiAgICAtDQogICAgLSMgJ2ZpbGVuYW1lJyBpcyBleHBh
bmRlZCB0byB0aGUgY3VycmVudGx5IHBhcnNlZCBmaWxlIG5hbWUsDQogICAgLSMgJ2xpbmVubycg
dG8gdGhlIGxpbmUgbnVtYmVyLg0KICAgIC0kKHdhcm5pbmcsZmlsZW5hbWU9JChmaWxlbmFtZSkp
DQogICAgLSQod2FybmluZyxsaW5lbm89JChsaW5lbm8pKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9fX2lu
aXRfXy5weQ0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDJlNTNiYTAu
LjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3Mv
YnVpbHRpbl9mdW5jL19faW5pdF9fLnB5DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDkg
KzAsMCBAQA0KICAgIC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgLSIi
Ig0KICAgIC1CdWlsdC1pbiBmdW5jdGlvbiB0ZXN0cy4NCiAgICAtIiIiDQogICAgLQ0KICAgIC1k
ZWYgdGVzdChjb25mKToNCiAgICAtICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDAN
CiAgICAtICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0JykN
CiAgICAtICAgIGFzc2VydCBjb25mLnN0ZGVycl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQ0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVp
bHRpbl9mdW5jL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyDQogICAgZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggMzNlYTljYS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQv
a2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJy
DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDUgKzAsMCBAQA0KICAgIC1LY29uZmlnOjg6
IGhlbGxvIHdvcmxkIDENCiAgICAtS2NvbmZpZzoxODogaGVsbG8gd29ybGQgMw0KICAgIC1LY29u
ZmlnOjIyOiBoZWxsbyB3b3JsZCAgNA0KICAgIC1LY29uZmlnOjI2OiBmaWxlbmFtZT1LY29uZmln
DQogICAgLUtjb25maWc6Mjc6IGxpbmVubz0yNw0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVkX3N0ZG91dCBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0
ZWRfc3Rkb3V0DQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggODJkZTNh
Ny4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vz
cy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBA
IC0xICswLDAgQEANCiAgICAtaGVsbG8gd29ybGQgMA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcg
Yi9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9u
L0tjb25maWcNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA2ODM4OTk3
Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNz
L2NpcmN1bGFyX2V4cGFuc2lvbi9LY29uZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0x
LDUgKzAsMCBAQA0KICAgIC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAg
LQ0KICAgIC1YID0gJChZKQ0KICAgIC1ZID0gJChYKQ0KICAgIC0kKGluZm8gJChYKSkNCiAgICBk
aWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFy
X2V4cGFuc2lvbi9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJv
Y2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vX19pbml0X18ucHkNCiAgICBkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCA0MTliZGEzLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9r
Y29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5w
eQ0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSwxMSArMCwwIEBADQogICAgLSMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAtIiIiDQogICAgLURldGVjdCBjaXJjdWxh
ciB2YXJpYWJsZSBleHBhbnNpb24uDQogICAgLQ0KICAgIC1JZiBhIHJlY3Vyc2l2ZWx5IGV4cGFu
ZGVkIHZhcmlhYmxlIHJlZmVyZW5jZXMgaXRzZWxmIChldmVudHVhbGx5KSwNCiAgICAtaXQgc2hv
dWxkIGZhaWwgd2l0aCBhbiBlcnJvciBtZXNzYWdlLg0KICAgIC0iIiINCiAgICAtDQogICAgLWRl
ZiB0ZXN0KGNvbmYpOg0KICAgIC0gICAgYXNzZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgIT0gMA0K
ICAgIC0gICAgYXNzZXJ0IGNvbmYuc3RkZXJyX21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpDQog
ICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJj
dWxhcl9leHBhbnNpb24vZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBlY3RlZF9zdGRlcnINCiAgICBkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBjZGU2OGZhLi4wMDAwMDAwDQogICAgLS0t
IGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lv
bi9leHBlY3RlZF9zdGRlcnINCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEgKzAsMCBAQA0K
ICAgIC1LY29uZmlnOjU6IFJlY3Vyc2l2ZSB2YXJpYWJsZSAnWCcgcmVmZXJlbmNlcyBpdHNlbGYg
KGV2ZW50dWFsbHkpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJl
cHJvY2Vzcy9lc2NhcGUvS2NvbmZpZw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAg
IGluZGV4IDRlM2Y0NDQuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rl
c3RzL3ByZXByb2Nlc3MvZXNjYXBlL0tjb25maWcNCiAgICArKysgL2Rldi9udWxsDQogICAgQEAg
LTEsNDQgKzAsMCBAQA0KICAgIC0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQog
ICAgLQ0KICAgIC0jIFNob3J0aGFuZA0KICAgIC13YXJuaW5nID0gJCh3YXJuaW5nLWlmLHksJCgx
KSkNCiAgICAtDQogICAgLSMgWW91IGNhbiBub3QgcGFzcyBjb21tYXMgZGlyZWN0bHkgdG8gYSBm
dW5jdGlvbiBzaW5jZSB0aGV5IGFyZSB0cmVhdGVkIGFzDQogICAgLSMgZGVsaW1pdGVycy4gWW91
IGNhbiB1c2UgdGhlIGZvbGxvd2luZyB0cmljayB0byBkbyBzby4NCiAgICAtY29tbWEgICA6PSAs
DQogICAgLSQod2FybmluZyxoZWxsbyQoY29tbWEpIHdvcmxkKQ0KICAgIC0NCiAgICAtIyBMaWtl
IE1ha2UsIHNpbmdsZSBxdW90ZXMsIGRvdWJsZSBxdW90ZXMsIHNwYWNlcyBhcmUgdHJlYXRlZCB2
ZXJiYXRpbS4NCiAgICAtIyBUaGUgZm9sbG93aW5nIHByaW50cyB0aGUgdGV4dCBhcy1pcy4NCiAg
ICAtJCh3YXJuaW5nLCAgJyAiICciICAgJyAnJycgIiciKQ0KICAgIC0NCiAgICAtIyBVbmxpa2Ug
TWFrZSwgJyQnIGhhcyBzcGVjaWFsIG1lYW5pbmcgb25seSB3aGVuIGl0IGlzIGZvbGxvd2VkIGJ5
ICcoJy4NCiAgICAtIyBObyBuZWVkIHRvIGVzY2FwZSAnJCcgaXRzZWxmLg0KICAgIC0kKHdhcm5p
bmcsJCkNCiAgICAtJCh3YXJuaW5nLCQkKQ0KICAgIC0kIDo9IDENCiAgICAtJCh3YXJuaW5nLCQo
JCkpDQogICAgLQ0KICAgIC0jIFlvdSBuZWVkIGEgdHJpY2sgdG8gZXNjYXBlICckJyBmb2xsb3dl
ZCBieSAnKCcNCiAgICAtIyBUaGUgZm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIuIEl0IHNo
b3VsZCBub3QgYmUgZXhwYW5kZWQgZnVydGhlci4NCiAgICAtZG9sbGFyIDo9ICQNCiAgICAtJCh3
YXJuaW5nLCQoZG9sbGFyKShYKSkNCiAgICAtDQogICAgLSMgWW91IG5lZWQgYSB0cmljayB0byB0
cmVhdCB1bmJhbGFuY2VkIHBhcmVudGhlc2VzLg0KICAgIC0jIFRoZSBmb2xsb3dpbmcgc2hvdWxk
IHByaW50ICIoIi4NCiAgICAtbGVmdF9wYXJlbiA6PSAoDQogICAgLSQod2FybmluZywkKGxlZnRf
cGFyZW4pKQ0KICAgIC0NCiAgICAtIyBBIHNpbXBsZSBleHBhbmRlZCBzaG91bGQgbm90IGJlIGV4
cGFuZGVkIG11bHRpcGxlIHRpbWVzLg0KICAgIC0jIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByaW50
ICIkKFgpIi4gSXQgc2hvdWxkIG5vdCBiZSBleHBhbmRlZCBmdXJ0aGVyLg0KICAgIC1ZIDo9ICQo
ZG9sbGFyKShYKQ0KICAgIC0kKHdhcm5pbmcsJChZKSkNCiAgICAtDQogICAgLSMgVGhlIGZvbGxv
d2luZyBzaG91bGQgcHJpbnQgIiQoWCkiIGFzIHdlbGwuDQogICAgLVkgPSAkKGRvbGxhcikoWCkN
CiAgICAtJCh3YXJuaW5nLCQoWSkpDQogICAgLQ0KICAgIC0jIFRoZSBmb2xsb3dpbmcgc2hvdWxk
IHByaW50ICIkKCIuDQogICAgLSMgSXQgc2hvdWxkIG5vdCBiZSBlbWl0ICJ1bnRlcm1pbmF0ZWQg
cmVmZXJlbmNlIiBlcnJvci4NCiAgICAtdW50ZXJtaW5hdGVkIDo9ICQoZG9sbGFyKSgNCiAgICAt
JCh3YXJuaW5nLCQodW50ZXJtaW5hdGVkKSkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvX19pbml0X18ucHkNCiAgICBkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCA3ZWU4ZTc0Li4wMDAwMDAwDQogICAgLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQ0K
ICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAtMSw4ICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0iIiINCiAgICAtRXNjYXBlIHNlcXVlbmNlIHRl
c3RzLg0KICAgIC0iIiINCiAgICAtDQogICAgLWRlZiB0ZXN0KGNvbmYpOg0KICAgIC0gICAgYXNz
ZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0gMA0KICAgIC0gICAgYXNzZXJ0IGNvbmYuc3RkZXJy
X21hdGNoZXMoJ2V4cGVjdGVkX3N0ZGVycicpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvZXhwZWN0ZWRfc3RkZXJyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnINCiAg
ICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAxYzAwOTU3Li4wMDAwMDAwDQog
ICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9leHBl
Y3RlZF9zdGRlcnINCiAgICArKysgL2Rldi9udWxsDQogICAgQEAgLTEsMTAgKzAsMCBAQA0KICAg
IC1LY29uZmlnOjk6IGhlbGxvLCB3b3JsZA0KICAgIC1LY29uZmlnOjEzOiAgICcgIiAnIiAgICcg
JycnICInIg0KICAgIC1LY29uZmlnOjE3OiAkDQogICAgLUtjb25maWc6MTg6ICQkDQogICAgLUtj
b25maWc6MjA6IDENCiAgICAtS2NvbmZpZzoyNTogJChYKQ0KICAgIC1LY29uZmlnOjMwOiAoDQog
ICAgLUtjb25maWc6MzU6ICQoWCkNCiAgICAtS2NvbmZpZzozOTogJChYKQ0KICAgIC1LY29uZmln
OjQ0OiAkKA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3ByZXBy
b2Nlc3MvdmFyaWFibGUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJv
Y2Vzcy92YXJpYWJsZS9LY29uZmlnDQogICAgZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
aW5kZXggOWNlMmY5NS4uMDAwMDAwMA0KICAgIC0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9LY29uZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBA
IC0xLDUzICswLDAgQEANCiAgICAtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K
ICAgIC0NCiAgICAtIyBTaG9ydGhhbmQNCiAgICAtd2FybmluZyA9ICQod2FybmluZy1pZix5LCQo
MSkpDQogICAgLQ0KICAgIC0jIFNpbXBseSBleHBhbmRlZCB2YXJpYWJsZS4NCiAgICAtWCA6PSAx
DQogICAgLVNJTVBMRSA6PSAkKFgpDQogICAgLVggOj0gMg0KICAgIC0kKHdhcm5pbmcsU0lNUExF
ID0gJChTSU1QTEUpKQ0KICAgIC0NCiAgICAtIyBSZWN1cnNpdmVseSBleHBhbmRlZCB2YXJpYWJs
ZS4NCiAgICAtWCA6PSAxDQogICAgLVJFQ1VSU0lWRSA9ICQoWCkNCiAgICAtWCA6PSAyDQogICAg
LSQod2FybmluZyxSRUNVUlNJVkUgPSAkKFJFQ1VSU0lWRSkpDQogICAgLQ0KICAgIC0jIEFwcGVu
ZCBzb21ldGhpbmcgdG8gYSBzaW1wbHkgZXhwYW5kZWQgdmFyaWFibGUuDQogICAgLVkgOj0gMw0K
ICAgIC1TSU1QTEUgKz0gJChZKQ0KICAgIC1ZIDo9IDQNCiAgICAtJCh3YXJuaW5nLFNJTVBMRSA9
ICQoU0lNUExFKSkNCiAgICAtDQogICAgLSMgQXBwZW5kIHNvbWV0aGluZyB0byBhIHJlY3Vyc2l2
ZWx5IGV4cGFuZGVkIHZhcmlhYmxlLg0KICAgIC1ZIDo9IDMNCiAgICAtUkVDVVJTSVZFICs9ICQo
WSkNCiAgICAtWSA6PSA0DQogICAgLSQod2FybmluZyxSRUNVUlNJVkUgPSAkKFJFQ1VSU0lWRSkp
DQogICAgLQ0KICAgIC0jIFVzZSArPSBvcGVyYXRvciB0byBhbiB1bmRlZmluZWQgdmFyaWFibGUu
DQogICAgLSMgVGhpcyB3b3JrcyBhcyBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlLg0K
ICAgIC1ZIDo9IDMNCiAgICAtVU5ERUZJTkVEX1ZBUklBQkxFICs9ICQoWSkNCiAgICAtWSA6PSA0
DQogICAgLSQod2FybmluZyxVTkRFRklORURfVkFSSUFCTEUgPSAkKFVOREVGSU5FRF9WQVJJQUJM
RSkpDQogICAgLQ0KICAgIC0jIFlvdSBjYW4gdXNlIHZhcmlhYmxlIHJlZmVyZW5jZXMgZm9yIHRo
ZSBsZWZ0aGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50Lg0KICAgIC1YIDo9IEENCiAg
ICAtWSA6PSBCDQogICAgLSQoWCkkKFkpIDo9IDUNCiAgICAtJCh3YXJuaW5nLEFCID0gJChBQikp
DQogICAgLQ0KICAgIC0jIFVzZXItZGVmaW5lZCBmdW5jdGlvbi4NCiAgICAtZ3JlZXRpbmcgPSAk
KDEpLCBteSBuYW1lIGlzICQoMikuDQogICAgLSQod2FybmluZywkKGdyZWV0aW5nLEhlbGxvLEpv
aG4pKQ0KICAgIC0NCiAgICAtIyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBub3QgY2hlY2tl
ZCBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4NCiAgICAtIyBJZiBzb21lIGFyZ3VtZW50cyBh
cmUgb3B0aW9uYWwsIGl0IGlzIHVzZWZ1bCB0byBwYXNzIGZld2VyIHBhcmFtZXRlcnMuDQogICAg
LSMgJCgyKSB3aWxsIGJlIGJsYW5rIGluIHRoaXMgY2FzZS4NCiAgICAtJCh3YXJuaW5nLCQoZ3Jl
ZXRpbmcsSGVsbG8pKQ0KICAgIC0NCiAgICAtIyBVbnJlZmVyZW5jZWQgcGFyYW1ldGVycyBhcmUg
anVzdCBpZ25vcmVkLg0KICAgIC0kKHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2huLGlnbm9y
ZWQsaWdub3JlZCkpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMv
cHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVz
dHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9fX2luaXRfXy5weQ0KICAgIGRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NA0KICAgIGluZGV4IGU4OGIxNzAuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tj
b25maWcubmV3L3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkNCiAgICArKysg
L2Rldi9udWxsDQogICAgQEAgLTEsOCArMCwwIEBADQogICAgLSMgU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjANCiAgICAtIiIiDQogICAgLVZhcmlhYmxlIGFuZCB1c2VyLWRlZmluZWQg
ZnVuY3Rpb24gdGVzdHMuDQogICAgLSIiIg0KICAgIC0NCiAgICAtZGVmIHRlc3QoY29uZik6DQog
ICAgLSAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSA9PSAwDQogICAgLSAgICBhc3NlcnQg
Y29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRfc3RkZXJyJykNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0
ZGVyciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBl
Y3RlZF9zdGRlcnINCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCBhNDg0
MWMzLi4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9wcmVwcm9j
ZXNzL3ZhcmlhYmxlL2V4cGVjdGVkX3N0ZGVycg0KICAgICsrKyAvZGV2L251bGwNCiAgICBAQCAt
MSw5ICswLDAgQEANCiAgICAtS2NvbmZpZzoxMDogU0lNUExFID0gMQ0KICAgIC1LY29uZmlnOjE2
OiBSRUNVUlNJVkUgPSAyDQogICAgLUtjb25maWc6MjI6IFNJTVBMRSA9IDEgMw0KICAgIC1LY29u
ZmlnOjI4OiBSRUNVUlNJVkUgPSAyIDQNCiAgICAtS2NvbmZpZzozNTogVU5ERUZJTkVEX1ZBUklB
QkxFID0gNA0KICAgIC1LY29uZmlnOjQxOiBBQiA9IDUNCiAgICAtS2NvbmZpZzo0NTogSGVsbG8s
IG15IG5hbWUgaXMgSm9obi4NCiAgICAtS2NvbmZpZzo1MDogSGVsbG8sIG15IG5hbWUgaXMgLg0K
ICAgIC1LY29uZmlnOjUzOiBIZWxsbywgbXkgbmFtZSBpcyBKb2huLg0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3B5dGVzdC5pbmkgYi9zdXBwb3J0L2tjb25maWcu
bmV3L3Rlc3RzL3B5dGVzdC5pbmkNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCA4NWQ3Y2U4Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0
cy9weXRlc3QuaW5pDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDcgKzAsMCBAQA0KICAg
IC1bcHl0ZXN0XQ0KICAgIC1hZGRvcHRzID0gLS12ZXJib3NlDQogICAgLQ0KICAgIC0jIFB5dGVz
dCByZXF1aXJlcyB0aGF0IHRlc3QgZmlsZXMgaGF2ZSB1bmlxdWUgbmFtZXMsIGJlY2F1c2UgcHl0
ZXN0IGltcG9ydHMNCiAgICAtIyB0aGVtIGFzIHRvcC1sZXZlbCBtb2R1bGVzLiAgSXQgaXMgc2ls
bHkgdG8gcHJlZml4IG9yIHN1ZmZpeCBhIHRlc3QgZmlsZSB3aXRoDQogICAgLSMgdGhlIGRpcmVj
dG9yeSBuYW1lIHRoYXQgY29udGFpbnMgaXQuICBVc2UgX19pbml0X18ucHkgZm9yIGFsbCB0ZXN0
IGZpbGVzLg0KICAgIC1weXRob25fZmlsZXMgPSBfX2luaXRfXy5weQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29uZmlnIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvS2NvbmZpZw0KICAg
IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDgzNTBkZTcuLjAwMDAwMDANCiAg
ICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9LY29u
ZmlnDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDM1ICswLDAgQEANCiAgICAtIyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0NCiAgICAtY2hvaWNlDQogICAgLQlw
cm9tcHQgImNob2ljZSINCiAgICAtDQogICAgLWNvbmZpZyBBDQogICAgLQlib29sICJBIg0KICAg
IC0NCiAgICAtY29uZmlnIEINCiAgICAtCWJvb2wgIkIiDQogICAgLQ0KICAgIC1pZiBCDQogICAg
LWNob2ljZQ0KICAgIC0JcHJvbXB0ICJzdWIgY2hvaWNlIg0KICAgIC0NCiAgICAtY29uZmlnIEMN
CiAgICAtCWJvb2wgIkMiDQogICAgLQ0KICAgIC1jb25maWcgRA0KICAgIC0JYm9vbCAiRCINCiAg
ICAtDQogICAgLWlmIEQNCiAgICAtY2hvaWNlDQogICAgLQlwcm9tcHQgInN1YnN1YiBjaG9pY2Ui
DQogICAgLQ0KICAgIC1jb25maWcgRQ0KICAgIC0JYm9vbCAiRSINCiAgICAtDQogICAgLWVuZGNo
b2ljZQ0KICAgIC1lbmRpZiAjIEQNCiAgICAtDQogICAgLWVuZGNob2ljZQ0KICAgIC1lbmRpZiAj
IEINCiAgICAtDQogICAgLWVuZGNob2ljZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2Nv
bmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5DQogICAgZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggOWU0YjJkYi4uMDAwMDAwMA0KICAgIC0tLSBh
L3N1cHBvcnQva2NvbmZpZy5uZXcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5
DQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDE3ICswLDAgQEANCiAgICAtIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgIC0iIiINCiAgICAtU2V0IHJhbmRvbSB2YWx1
ZXMgcmVjdXJzaXZlbHkgaW4gbmVzdGVkIGNob2ljZXMuDQogICAgLQ0KICAgIC1LY29uZmlnIGNh
biBjcmVhdGUgYSBjaG9pY2UtaW4tY2hvaWNlIHN0cnVjdHVyZSBieSB1c2luZyAnaWYnIHN0YXRl
bWVudC4NCiAgICAtcmFuZGNvbmZpZyBzaG91bGQgY29ycmVjdGx5IHNldCByYW5kb20gY2hvaWNl
IHZhbHVlcy4NCiAgICAtDQogICAgLVJlbGF0ZWQgTGludXggY29tbWl0OiAzYjlhMTllMDg5NjBl
NWNkYWQ1MjUzOTk4NjM3NjUzZTU5MmEzYzI5DQogICAgLSIiIg0KICAgIC0NCiAgICAtDQogICAg
LWRlZiB0ZXN0KGNvbmYpOg0KICAgIC0gICAgZm9yIGkgaW4gcmFuZ2UoMjApOg0KICAgIC0gICAg
ICAgIGFzc2VydCBjb25mLnJhbmRjb25maWcoKSA9PSAwDQogICAgLSAgICAgICAgYXNzZXJ0IChj
b25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0MCcpIG9yDQogICAgLSAgICAgICAg
ICAgICAgICBjb25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0MScpIG9yDQogICAg
LSAgICAgICAgICAgICAgICBjb25mLmNvbmZpZ19jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0Micp
KQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVk
X2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwIGIvc3VwcG9ydC9rY29uZmlnLm5ldy90ZXN0cy9yYW5k
X25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MA0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDA1NDUwZjMuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQwDQogICAgKysr
IC9kZXYvbnVsbA0KICAgIEBAIC0xLDIgKzAsMCBAQA0KICAgIC1DT05GSUdfQT15DQogICAgLSMg
Q09ORklHX0IgaXMgbm90IHNldA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MQ0KICAgIGRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDM3YWIyOTUuLjAwMDAwMDANCiAgICAt
LS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3Rl
ZF9zdGRvdXQxDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDQgKzAsMCBAQA0KICAgIC0j
IENPTkZJR19BIGlzIG5vdCBzZXQNCiAgICAtQ09ORklHX0I9eQ0KICAgIC1DT05GSUdfQz15DQog
ICAgLSMgQ09ORklHX0QgaXMgbm90IHNldA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQyIGIvc3VwcG9y
dC9rY29uZmlnLm5ldy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0Mg0K
ICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDg0OWZmNDcuLjAwMDAwMDAN
CiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9l
eHBlY3RlZF9zdGRvdXQyDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDUgKzAsMCBAQA0K
ICAgIC0jIENPTkZJR19BIGlzIG5vdCBzZXQNCiAgICAtQ09ORklHX0I9eQ0KICAgIC0jIENPTkZJ
R19DIGlzIG5vdCBzZXQNCiAgICAtQ09ORklHX0Q9eQ0KICAgIC1DT05GSUdfRT15DQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy91dGlsLmMNCiAgICBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAyOTU4NTM5
Li4wMDAwMDAwDQogICAgLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy91dGlsLmMNCiAgICArKysg
L2Rldi9udWxsDQogICAgQEAgLTEsMTI5ICswLDAgQEANCiAgICAtLy8gU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEdQTC0yLjANCiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAyMDAyLTIw
MDUgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgLSAqIENvcHlyaWdo
dCAoQykgMjAwMi0yMDA1IFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4NCiAgICAtICov
DQogICAgLQ0KICAgIC0jaW5jbHVkZSA8c3RkYXJnLmg+DQogICAgLSNpbmNsdWRlIDxzdGRsaWIu
aD4NCiAgICAtI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgIC0jaW5jbHVkZSAibGtjLmgiDQogICAg
LQ0KICAgIC0vKiBmaWxlIGFscmVhZHkgcHJlc2VudCBpbiBsaXN0PyBJZiBub3QgYWRkIGl0ICov
DQogICAgLXN0cnVjdCBmaWxlICpmaWxlX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQ0KICAgIC17
DQogICAgLQlzdHJ1Y3QgZmlsZSAqZmlsZTsNCiAgICAtDQogICAgLQlmb3IgKGZpbGUgPSBmaWxl
X2xpc3Q7IGZpbGU7IGZpbGUgPSBmaWxlLT5uZXh0KSB7DQogICAgLQkJaWYgKCFzdHJjbXAobmFt
ZSwgZmlsZS0+bmFtZSkpIHsNCiAgICAtCQkJcmV0dXJuIGZpbGU7DQogICAgLQkJfQ0KICAgIC0J
fQ0KICAgIC0NCiAgICAtCWZpbGUgPSB4bWFsbG9jKHNpemVvZigqZmlsZSkpOw0KICAgIC0JbWVt
c2V0KGZpbGUsIDAsIHNpemVvZigqZmlsZSkpOw0KICAgIC0JZmlsZS0+bmFtZSA9IHhzdHJkdXAo
bmFtZSk7DQogICAgLQlmaWxlLT5uZXh0ID0gZmlsZV9saXN0Ow0KICAgIC0JZmlsZV9saXN0ID0g
ZmlsZTsNCiAgICAtCXJldHVybiBmaWxlOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiBBbGxvY2F0
ZSBpbml0aWFsIGdyb3dhYmxlIHN0cmluZyAqLw0KICAgIC1zdHJ1Y3QgZ3N0ciBzdHJfbmV3KHZv
aWQpDQogICAgLXsNCiAgICAtCXN0cnVjdCBnc3RyIGdzOw0KICAgIC0JZ3MucyA9IHhtYWxsb2Mo
c2l6ZW9mKGNoYXIpICogNjQpOw0KICAgIC0JZ3MubGVuID0gNjQ7DQogICAgLQlncy5tYXhfd2lk
dGggPSAwOw0KICAgIC0Jc3RyY3B5KGdzLnMsICJcMCIpOw0KICAgIC0JcmV0dXJuIGdzOw0KICAg
IC19DQogICAgLQ0KICAgIC0vKiBGcmVlIHN0b3JhZ2UgZm9yIGdyb3dhYmxlIHN0cmluZyAqLw0K
ICAgIC12b2lkIHN0cl9mcmVlKHN0cnVjdCBnc3RyICpncykNCiAgICAtew0KICAgIC0JaWYgKGdz
LT5zKQ0KICAgIC0JCWZyZWUoZ3MtPnMpOw0KICAgIC0JZ3MtPnMgPSBOVUxMOw0KICAgIC0JZ3Mt
PmxlbiA9IDA7DQogICAgLX0NCiAgICAtDQogICAgLS8qIEFwcGVuZCB0byBncm93YWJsZSBzdHJp
bmcgKi8NCiAgICAtdm9pZCBzdHJfYXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAq
cykNCiAgICAtew0KICAgIC0Jc2l6ZV90IGw7DQogICAgLQlpZiAocykgew0KICAgIC0JCWwgPSBz
dHJsZW4oZ3MtPnMpICsgc3RybGVuKHMpICsgMTsNCiAgICAtCQlpZiAobCA+IGdzLT5sZW4pIHsN
CiAgICAtCQkJZ3MtPnMgPSB4cmVhbGxvYyhncy0+cywgbCk7DQogICAgLQkJCWdzLT5sZW4gPSBs
Ow0KICAgIC0JCX0NCiAgICAtCQlzdHJjYXQoZ3MtPnMsIHMpOw0KICAgIC0JfQ0KICAgIC19DQog
ICAgLQ0KICAgIC0vKiBBcHBlbmQgcHJpbnRmIGZvcm1hdHRlZCBzdHJpbmcgdG8gZ3Jvd2FibGUg
c3RyaW5nICovDQogICAgLXZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNo
YXIgKmZtdCwgLi4uKQ0KICAgIC17DQogICAgLQl2YV9saXN0IGFwOw0KICAgIC0JY2hhciBzWzEw
MDAwXTsgLyogYmlnIGVub3VnaC4uLiAqLw0KICAgIC0JdmFfc3RhcnQoYXAsIGZtdCk7DQogICAg
LQl2c25wcmludGYocywgc2l6ZW9mKHMpLCBmbXQsIGFwKTsNCiAgICAtCXN0cl9hcHBlbmQoZ3Ms
IHMpOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyogUmV0cmlldmUg
dmFsdWUgb2YgZ3Jvd2FibGUgc3RyaW5nICovDQogICAgLWNvbnN0IGNoYXIgKnN0cl9nZXQoc3Ry
dWN0IGdzdHIgKmdzKQ0KICAgIC17DQogICAgLQlyZXR1cm4gZ3MtPnM7DQogICAgLX0NCiAgICAt
DQogICAgLXZvaWQgKnhtYWxsb2Moc2l6ZV90IHNpemUpDQogICAgLXsNCiAgICAtCXZvaWQgKnAg
PSBtYWxsb2Moc2l6ZSk7DQogICAgLQlpZiAocCkNCiAgICAtCQlyZXR1cm4gcDsNCiAgICAtCWZw
cmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOw0KICAgIC0JZXhpdCgxKTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtdm9pZCAqeGNhbGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQ0K
ICAgIC17DQogICAgLQl2b2lkICpwID0gY2FsbG9jKG5tZW1iLCBzaXplKTsNCiAgICAtCWlmIChw
KQ0KICAgIC0JCXJldHVybiBwOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5
LlxuIik7DQogICAgLQlleGl0KDEpOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkICp4cmVhbGxv
Yyh2b2lkICpwLCBzaXplX3Qgc2l6ZSkNCiAgICAtew0KICAgIC0JcCA9IHJlYWxsb2MocCwgc2l6
ZSk7DQogICAgLQlpZiAocCkNCiAgICAtCQlyZXR1cm4gcDsNCiAgICAtCWZwcmludGYoc3RkZXJy
LCAiT3V0IG9mIG1lbW9yeS5cbiIpOw0KICAgIC0JZXhpdCgxKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICpzKQ0KICAgIC17DQogICAgLQljaGFyICpwOw0K
ICAgIC0NCiAgICAtCXAgPSBzdHJkdXAocyk7DQogICAgLQlpZiAocCkNCiAgICAtCQlyZXR1cm4g
cDsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOw0KICAgIC0JZXhp
dCgxKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqcywg
c2l6ZV90IG4pDQogICAgLXsNCiAgICAtCWNoYXIgKnA7DQogICAgLQ0KICAgIC0JcCA9IHN0cm5k
dXAocywgbik7DQogICAgLQlpZiAocCkNCiAgICAtCQlyZXR1cm4gcDsNCiAgICAtCWZwcmludGYo
c3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOw0KICAgIC0JZXhpdCgxKTsNCiAgICAtfQ0KICAg
IGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3pjb25mLmxleC5jIGIvc3VwcG9ydC9r
Y29uZmlnLm5ldy96Y29uZi5sZXguYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KICAg
IGluZGV4IGIyNTg3NzYuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3pj
b25mLmxleC5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDI4MjAgKzAsMCBAQA0KICAg
IC0NCiAgICAtI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50DQogICAgLQ0KICAgIC0v
KiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLw0KICAgIC0NCiAgICAtI2Rl
ZmluZSBGTEVYX1NDQU5ORVINCiAgICAtI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMg0K
ICAgIC0jZGVmaW5lIFlZX0ZMRVhfTUlOT1JfVkVSU0lPTiA2DQogICAgLSNkZWZpbmUgWVlfRkxF
WF9TVUJNSU5PUl9WRVJTSU9OIDENCiAgICAtI2lmIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+
IDANCiAgICAtI2RlZmluZSBGTEVYX0JFVEENCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0vKiBG
aXJzdCwgd2UgZGVhbCB3aXRoICBwbGF0Zm9ybS1zcGVjaWZpYyBvciBjb21waWxlci1zcGVjaWZp
YyBpc3N1ZXMuICovDQogICAgLQ0KICAgIC0vKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICov
DQogICAgLSNpbmNsdWRlIDxzdGRpby5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAg
LSNpbmNsdWRlIDxlcnJuby5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAgLQ0KICAg
IC0vKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLw0KICAgIC0NCiAgICAtLyogZmxleCBpbnRl
Z2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8NCiAgICAtDQogICAgLSNpZm5kZWYgRkxFWElOVF9IDQog
ICAgLSNkZWZpbmUgRkxFWElOVF9IDQogICAgLQ0KICAgIC0vKiBDOTkgc3lzdGVtcyBoYXZlIDxp
bnR0eXBlcy5oPi4gTm9uLUM5OSBzeXN0ZW1zIG1heSBvciBtYXkgbm90LiAqLw0KICAgIC0NCiAg
ICAtI2lmIGRlZmluZWQgKF9fU1REQ19WRVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0g
MTk5OTAxTA0KICAgIC0NCiAgICAtLyogQzk5IHNheXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9N
QUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQuaCwNCiAgICAtICogaWYgeW91IHdhbnQgdGhl
IGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4gDQogICAgLSAqLw0KICAgIC0j
aWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MNCiAgICAtI2RlZmluZSBfX1NURENfTElNSVRfTUFD
Uk9TIDENCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jaW5jbHVkZSA8aW50dHlwZXMuaD4NCiAg
ICAtdHlwZWRlZiBpbnQ4X3QgZmxleF9pbnQ4X3Q7DQogICAgLXR5cGVkZWYgdWludDhfdCBmbGV4
X3VpbnQ4X3Q7DQogICAgLXR5cGVkZWYgaW50MTZfdCBmbGV4X2ludDE2X3Q7DQogICAgLXR5cGVk
ZWYgdWludDE2X3QgZmxleF91aW50MTZfdDsNCiAgICAtdHlwZWRlZiBpbnQzMl90IGZsZXhfaW50
MzJfdDsNCiAgICAtdHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90Ow0KICAgIC0jZWxzZQ0K
ICAgIC10eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90Ow0KICAgIC10eXBlZGVmIHNob3J0
IGludCBmbGV4X2ludDE2X3Q7DQogICAgLXR5cGVkZWYgaW50IGZsZXhfaW50MzJfdDsNCiAgICAt
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgDQogICAgLXR5cGVkZWYgdW5zaWdu
ZWQgc2hvcnQgaW50IGZsZXhfdWludDE2X3Q7DQogICAgLXR5cGVkZWYgdW5zaWduZWQgaW50IGZs
ZXhfdWludDMyX3Q7DQogICAgLQ0KICAgIC0vKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICov
DQogICAgLSNpZm5kZWYgSU5UOF9NSU4NCiAgICAtI2RlZmluZSBJTlQ4X01JTiAgICAgICAgICAg
ICAgICgtMTI4KQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBJTlQxNl9NSU4NCiAgICAtI2Rl
ZmluZSBJTlQxNl9NSU4gICAgICAgICAgICAgICgtMzI3NjctMSkNCiAgICAtI2VuZGlmDQogICAg
LSNpZm5kZWYgSU5UMzJfTUlODQogICAgLSNkZWZpbmUgSU5UMzJfTUlOICAgICAgICAgICAgICAo
LTIxNDc0ODM2NDctMSkNCiAgICAtI2VuZGlmDQogICAgLSNpZm5kZWYgSU5UOF9NQVgNCiAgICAt
I2RlZmluZSBJTlQ4X01BWCAgICAgICAgICAgICAgICgxMjcpDQogICAgLSNlbmRpZg0KICAgIC0j
aWZuZGVmIElOVDE2X01BWA0KICAgIC0jZGVmaW5lIElOVDE2X01BWCAgICAgICAgICAgICAgKDMy
NzY3KQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBJTlQzMl9NQVgNCiAgICAtI2RlZmluZSBJ
TlQzMl9NQVggICAgICAgICAgICAgICgyMTQ3NDgzNjQ3KQ0KICAgIC0jZW5kaWYNCiAgICAtI2lm
bmRlZiBVSU5UOF9NQVgNCiAgICAtI2RlZmluZSBVSU5UOF9NQVggICAgICAgICAgICAgICgyNTVV
KQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBVSU5UMTZfTUFYDQogICAgLSNkZWZpbmUgVUlO
VDE2X01BWCAgICAgICAgICAgICAoNjU1MzVVKQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBV
SU5UMzJfTUFYDQogICAgLSNkZWZpbmUgVUlOVDMyX01BWCAgICAgICAgICAgICAoNDI5NDk2NzI5
NVUpDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2VuZGlmIC8qICEgQzk5ICovDQogICAgLQ0K
ICAgIC0jZW5kaWYgLyogISBGTEVYSU5UX0ggKi8NCiAgICAtDQogICAgLS8qIFRPRE86IHRoaXMg
aXMgYWx3YXlzIGRlZmluZWQsIHNvIGlubGluZSBpdCAqLw0KICAgIC0jZGVmaW5lIHl5Y29uc3Qg
Y29uc3QNCiAgICAtDQogICAgLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAz
DQogICAgLSNkZWZpbmUgeXlub3JldHVybiBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQ0K
ICAgIC0jZWxzZQ0KICAgIC0jZGVmaW5lIHl5bm9yZXR1cm4NCiAgICAtI2VuZGlmDQogICAgLQ0K
ICAgIC0vKiBSZXR1cm5lZCB1cG9uIGVuZC1vZi1maWxlLiAqLw0KICAgIC0jZGVmaW5lIFlZX05V
TEwgMA0KICAgIC0NCiAgICAtLyogUHJvbW90ZXMgYSBwb3NzaWJseSBuZWdhdGl2ZSwgcG9zc2li
bHkgc2lnbmVkIGNoYXIgdG8gYW4gdW5zaWduZWQNCiAgICAtICogaW50ZWdlciBmb3IgdXNlIGFz
IGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFyIGlzIG5lZ2F0aXZlLA0KICAgIC0g
KiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5zaWduZWQgY2hhciwg
aGVuY2UgdGhlDQogICAgLSAqIGRvdWJsZSBjYXN0Lg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBZ
WV9TQ19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpDQogICAgLQ0K
ICAgIC0vKiBFbnRlciBhIHN0YXJ0IGNvbmRpdGlvbi4gIFRoaXMgbWFjcm8gcmVhbGx5IG91Z2h0
IHRvIHRha2UgYSBwYXJhbWV0ZXIsDQogICAgLSAqIGJ1dCB3ZSBkbyBpdCB0aGUgZGlzZ3VzdGlu
ZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVzcw0KICAgIC0gKiBkZWZpbml0
aW9uIG9mIEJFR0lOLg0KICAgIC0gKi8NCiAgICAtI2RlZmluZSBCRUdJTiAoeXlfc3RhcnQpID0g
MSArIDIgKg0KICAgIC0NCiAgICAtLyogVHJhbnNsYXRlIHRoZSBjdXJyZW50IHN0YXJ0IHN0YXRl
IGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBsYXRlciBoYW5kZWQNCiAgICAtICogdG8gQkVHSU4g
dG8gcmV0dXJuIHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgNCiAg
ICAtICogY29tcGF0aWJpbGl0eS4NCiAgICAtICovDQogICAgLSNkZWZpbmUgWVlfU1RBUlQgKCgo
eXlfc3RhcnQpIC0gMSkgLyAyKQ0KICAgIC0jZGVmaW5lIFlZU1RBVEUgWVlfU1RBUlQNCiAgICAt
DQogICAgLS8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxlIG9mIGEgZ2l2ZW4gc3RhcnQgc3Rh
dGUuICovDQogICAgLSNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlfRU5EX09GX0JVRkZF
UiArIHN0YXRlICsgMSkNCiAgICAtDQogICAgLS8qIFNwZWNpYWwgYWN0aW9uIG1lYW5pbmcgInN0
YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovDQogICAgLSNkZWZpbmUgWVlfTkVXX0ZJTEUg
eXlyZXN0YXJ0KHl5aW4gICkNCiAgICAtDQogICAgLSNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9D
SEFSIDANCiAgICAtDQogICAgLS8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovDQog
ICAgLSNpZm5kZWYgWVlfQlVGX1NJWkUNCiAgICAtI2lmZGVmIF9faWE2NF9fDQogICAgLS8qIE9u
IElBLTY0LCB0aGUgYnVmZmVyIHNpemUgaXMgMTZrLCBub3QgOGsuDQogICAgLSAqIE1vcmVvdmVy
LCBZWV9CVUZfU0laRSBpcyAyKllZX1JFQURfQlVGX1NJWkUgaW4gdGhlIGdlbmVyYWwgY2FzZS4N
CiAgICAtICogRGl0dG8gZm9yIHRoZSBfX2lhNjRfXyBjYXNlIGFjY29yZGluZ2x5Lg0KICAgIC0g
Ki8NCiAgICAtI2RlZmluZSBZWV9CVUZfU0laRSAzMjc2OA0KICAgIC0jZWxzZQ0KICAgIC0jZGVm
aW5lIFlZX0JVRl9TSVpFIDE2Mzg0DQogICAgLSNlbmRpZiAvKiBfX2lhNjRfXyAqLw0KICAgIC0j
ZW5kaWYNCiAgICAtDQogICAgLS8qIFRoZSBzdGF0ZSBidWYgbXVzdCBiZSBsYXJnZSBlbm91Z2gg
dG8gaG9sZCBvbmUgc3RhdGUgcGVyIGNoYXJhY3RlciBpbiB0aGUgbWFpbiBidWZmZXIuDQogICAg
LSAqLw0KICAgIC0jZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZWV9CVUZfU0laRSArIDIp
ICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQ0KICAgIC0NCiAgICAtI2lmbmRlZiBZWV9UWVBFREVG
X1lZX0JVRkZFUl9TVEFURQ0KICAgIC0jZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRF
DQogICAgLXR5cGVkZWYgc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSAqWVlfQlVGRkVSX1NUQVRFOw0K
ICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TSVpFX1QNCiAg
ICAtI2RlZmluZSBZWV9UWVBFREVGX1lZX1NJWkVfVA0KICAgIC10eXBlZGVmIHNpemVfdCB5eV9z
aXplX3Q7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtZXh0ZXJuIGludCB5eWxlbmc7DQogICAg
LQ0KICAgIC1leHRlcm4gRklMRSAqeXlpbiwgKnl5b3V0Ow0KICAgIC0NCiAgICAtI2RlZmluZSBF
T0JfQUNUX0NPTlRJTlVFX1NDQU4gMA0KICAgIC0jZGVmaW5lIEVPQl9BQ1RfRU5EX09GX0ZJTEUg
MQ0KICAgIC0jZGVmaW5lIEVPQl9BQ1RfTEFTVF9NQVRDSCAyDQogICAgLQ0KICAgIC0gICAgLyog
Tm90ZTogV2Ugc3BlY2lmaWNhbGx5IG9taXQgdGhlIHRlc3QgZm9yIHl5X3J1bGVfY2FuX21hdGNo
X2VvbCBiZWNhdXNlIGl0IHJlcXVpcmVzDQogICAgLSAgICAgKiAgICAgICBhY2Nlc3MgdG8gdGhl
IGxvY2FsIHZhcmlhYmxlIHl5X2FjdC4gU2luY2UgeXlsZXNzKCkgaXMgYSBtYWNybywgaXQgd291
bGQgYnJlYWsNCiAgICAtICAgICAqICAgICAgIGV4aXN0aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5
eWxlc3MoKSBmcm9tIE9VVFNJREUgeXlsZXguDQogICAgLSAgICAgKiAgICAgICBPbmUgb2J2aW91
cyBzb2x1dGlvbiBpdCB0byBtYWtlIHl5X2FjdCBhIGdsb2JhbC4gSSB0cmllZCB0aGF0LCBhbmQg
c2F3DQogICAgLSAgICAgKiAgICAgICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBpbiBhIG5vbi15eWxp
bmVubyBzY2FubmVyLCBiZWNhdXNlIHl5X2FjdCBpcw0KICAgIC0gICAgICogICAgICAgbm9ybWFs
bHkgZGVjbGFyZWQgYXMgYSByZWdpc3RlciB2YXJpYWJsZS0tIHNvIGl0IGlzIG5vdCB3b3J0aCBp
dC4NCiAgICAtICAgICAqLw0KICAgIC0gICAgI2RlZmluZSAgWVlfTEVTU19MSU5FTk8obikgXA0K
ICAgIC0gICAgICAgICAgICBkbyB7IFwNCiAgICAtICAgICAgICAgICAgICAgIGludCB5eWw7XA0K
ICAgIC0gICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyArK3l5bCAp
XA0KICAgIC0gICAgICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXA0K
ICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wNCiAgICAtICAgICAgICAg
ICAgfXdoaWxlKDApDQogICAgLSAgICAjZGVmaW5lIFlZX0xJTkVOT19SRVdJTkRfVE8oZHN0KSBc
DQogICAgLSAgICAgICAgICAgIGRvIHtcDQogICAgLSAgICAgICAgICAgICAgICBjb25zdCBjaGFy
ICpwO1wNCiAgICAtICAgICAgICAgICAgICAgIGZvciAoIHAgPSB5eV9jcC0xOyBwID49IChkc3Qp
OyAtLXApXA0KICAgIC0gICAgICAgICAgICAgICAgICAgIGlmICggKnAgPT0gJ1xuJyApXA0KICAg
IC0gICAgICAgICAgICAgICAgICAgICAgICAtLXl5bGluZW5vO1wNCiAgICAtICAgICAgICAgICAg
fXdoaWxlKDApDQogICAgLSAgICANCiAgICAtLyogUmV0dXJuIGFsbCBidXQgdGhlIGZpcnN0ICJu
IiBtYXRjaGVkIGNoYXJhY3RlcnMgYmFjayB0byB0aGUgaW5wdXQgc3RyZWFtLiAqLw0KICAgIC0j
ZGVmaW5lIHl5bGVzcyhuKSBcDQogICAgLQlkbyBcDQogICAgLQkJeyBcDQogICAgLQkJLyogVW5k
byBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcDQogICAgLSAgICAgICAgaW50IHl5
bGVzc19tYWNyb19hcmcgPSAobik7IFwNCiAgICAtICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxl
c3NfbWFjcm9fYXJnKTtcDQogICAgLQkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IFwNCiAgICAt
CQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwNCiAgICAtCQkoeXlfY19idWZfcCkgPSB5eV9j
cCA9IHl5X2JwICsgeXlsZXNzX21hY3JvX2FyZyAtIFlZX01PUkVfQURKOyBcDQogICAgLQkJWVlf
RE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcDQogICAgLQkJfSBc
DQogICAgLQl3aGlsZSAoIDAgKQ0KICAgIC0NCiAgICAtI2RlZmluZSB1bnB1dChjKSB5eXVucHV0
KCBjLCAoeXl0ZXh0X3B0cikgICkNCiAgICAtDQogICAgLSNpZm5kZWYgWVlfU1RSVUNUX1lZX0JV
RkZFUl9TVEFURQ0KICAgIC0jZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUNCiAgICAt
c3RydWN0IHl5X2J1ZmZlcl9zdGF0ZQ0KICAgIC0Jew0KICAgIC0JRklMRSAqeXlfaW5wdXRfZmls
ZTsNCiAgICAtDQogICAgLQljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8NCiAg
ICAtCWNoYXIgKnl5X2J1Zl9wb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZl
ciAqLw0KICAgIC0NCiAgICAtCS8qIFNpemUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3Qg
aW5jbHVkaW5nIHJvb20gZm9yIEVPQg0KICAgIC0JICogY2hhcmFjdGVycy4NCiAgICAtCSAqLw0K
ICAgIC0JaW50IHl5X2J1Zl9zaXplOw0KICAgIC0NCiAgICAtCS8qIE51bWJlciBvZiBjaGFyYWN0
ZXJzIHJlYWQgaW50byB5eV9jaF9idWYsIG5vdCBpbmNsdWRpbmcgRU9CDQogICAgLQkgKiBjaGFy
YWN0ZXJzLg0KICAgIC0JICovDQogICAgLQlpbnQgeXlfbl9jaGFyczsNCiAgICAtDQogICAgLQkv
KiBXaGV0aGVyIHdlICJvd24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQg
aXQsDQogICAgLQkgKiBhbmQgY2FuIHJlYWxsb2MoKSBpdCB0byBncm93IGl0LCBhbmQgc2hvdWxk
IGZyZWUoKSBpdCB0bw0KICAgIC0JICogZGVsZXRlIGl0Lg0KICAgIC0JICovDQogICAgLQlpbnQg
eXlfaXNfb3VyX2J1ZmZlcjsNCiAgICAtDQogICAgLQkvKiBXaGV0aGVyIHRoaXMgaXMgYW4gImlu
dGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQNCiAgICAtCSAqIGlmIHdlJ3JlIHVz
aW5nIHN0ZGlvIGZvciBpbnB1dCwgdGhlbiB3ZSB3YW50IHRvIHVzZSBnZXRjKCkNCiAgICAtCSAq
IGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcgaW5wdXQg
YWZ0ZXINCiAgICAtCSAqIGVhY2ggbmV3bGluZS4NCiAgICAtCSAqLw0KICAgIC0JaW50IHl5X2lz
X2ludGVyYWN0aXZlOw0KICAgIC0NCiAgICAtCS8qIFdoZXRoZXIgd2UncmUgY29uc2lkZXJlZCB0
byBiZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZS4NCiAgICAtCSAqIElmIHNvLCAnXicgcnVs
ZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhlIG5leHQgbWF0Y2gsIG90aGVyd2lzZQ0KICAgIC0JICog
bm90Lg0KICAgIC0JICovDQogICAgLQlpbnQgeXlfYXRfYm9sOw0KICAgIC0NCiAgICAtICAgIGlu
dCB5eV9ic19saW5lbm87IC8qKjwgVGhlIGxpbmUgY291bnQuICovDQogICAgLSAgICBpbnQgeXlf
YnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovDQogICAgLQ0KICAgIC0JLyogV2hl
dGhlciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlDQog
ICAgLQkgKiBlbmQgb2YgaXQuDQogICAgLQkgKi8NCiAgICAtCWludCB5eV9maWxsX2J1ZmZlcjsN
CiAgICAtDQogICAgLQlpbnQgeXlfYnVmZmVyX3N0YXR1czsNCiAgICAtDQogICAgLSNkZWZpbmUg
WVlfQlVGRkVSX05FVyAwDQogICAgLSNkZWZpbmUgWVlfQlVGRkVSX05PUk1BTCAxDQogICAgLQkv
KiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21lIHRleHQgdG8g
cHJvY2Vzcw0KICAgIC0JICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJ
TkcsIHRvIGluZGljYXRlIHRoYXQgd2UNCiAgICAtCSAqIHNob3VsZG4ndCB0cnkgcmVhZGluZyBm
cm9tIHRoZSBpbnB1dCBzb3VyY2UgYW55IG1vcmUuICBXZSBtaWdodA0KICAgIC0JICogc3RpbGwg
aGF2ZSBhIGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mDQogICAg
LQkgKiBwb3NzaWJsZSBiYWNraW5nLXVwLg0KICAgIC0JICoNCiAgICAtCSAqIFdoZW4gd2UgYWN0
dWFsbHkgc2VlIHRoZSBFT0YsIHdlIGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciDQogICAgLQkg
KiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5p
bmcgYnkNCiAgICAtCSAqIGp1c3QgcG9pbnRpbmcgeXlpbiBhdCBhIG5ldyBpbnB1dCBmaWxlLg0K
ICAgIC0JICovDQogICAgLSNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5HIDINCiAgICAtDQog
ICAgLQl9Ow0KICAgIC0jZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8NCiAg
ICAtDQogICAgLS8qIFN0YWNrIG9mIGlucHV0IGJ1ZmZlcnMuICovDQogICAgLXN0YXRpYyBzaXpl
X3QgeXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAq
Lw0KICAgIC1zdGF0aWMgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19tYXggPSAwOyAvKio8IGNhcGFj
aXR5IG9mIHN0YWNrLiAqLw0KICAgIC1zdGF0aWMgWVlfQlVGRkVSX1NUQVRFICogeXlfYnVmZmVy
X3N0YWNrID0gTlVMTDsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8NCiAgICAtDQogICAgLS8q
IFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNlIGlu
IHRoZQ0KICAgIC0gKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4g
YSBtb3JlIGdlbmVyYWwNCiAgICAtICogInNjYW5uZXIgc3RhdGUiLg0KICAgIC0gKg0KICAgIC0g
KiBSZXR1cm5zIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCBvciBOVUxMLg0KICAgIC0gKi8NCiAgICAt
I2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAoICh5eV9idWZmZXJfc3RhY2spIFwNCiAgICAtICAg
ICAgICAgICAgICAgICAgICAgICAgICA/ICh5eV9idWZmZXJfc3RhY2spWyh5eV9idWZmZXJfc3Rh
Y2tfdG9wKV0gXA0KICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgIDogTlVMTCkNCiAgICAt
DQogICAgLS8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2VmdWwgd2hlbiB3ZSBrbm93
IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QNCiAgICAtICogTlVMTCBvciB3aGVuIHdlIG5l
ZWQgYW4gbHZhbHVlLiBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuDQogICAgLSAqLw0KICAgIC0jZGVm
aW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSAoeXlfYnVmZmVyX3N0YWNrKVsoeXlfYnVmZmVy
X3N0YWNrX3RvcCldDQogICAgLQ0KICAgIC0vKiB5eV9ob2xkX2NoYXIgaG9sZHMgdGhlIGNoYXJh
Y3RlciBsb3N0IHdoZW4geXl0ZXh0IGlzIGZvcm1lZC4gKi8NCiAgICAtc3RhdGljIGNoYXIgeXlf
aG9sZF9jaGFyOw0KICAgIC1zdGF0aWMgaW50IHl5X25fY2hhcnM7CQkvKiBudW1iZXIgb2YgY2hh
cmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmICovDQogICAgLWludCB5eWxlbmc7DQogICAgLQ0K
ICAgIC0vKiBQb2ludHMgdG8gY3VycmVudCBjaGFyYWN0ZXIgaW4gYnVmZmVyLiAqLw0KICAgIC1z
dGF0aWMgY2hhciAqeXlfY19idWZfcCA9IE5VTEw7DQogICAgLXN0YXRpYyBpbnQgeXlfaW5pdCA9
IDA7CQkvKiB3aGV0aGVyIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSAqLw0KICAgIC1zdGF0aWMgaW50
IHl5X3N0YXJ0ID0gMDsJLyogc3RhcnQgc3RhdGUgbnVtYmVyICovDQogICAgLQ0KICAgIC0vKiBG
bGFnIHdoaWNoIGlzIHVzZWQgdG8gYWxsb3cgeXl3cmFwKCkncyB0byBkbyBidWZmZXIgc3dpdGNo
ZXMNCiAgICAtICogaW5zdGVhZCBvZiBzZXR0aW5nIHVwIGEgZnJlc2ggeXlpbi4gIEEgYml0IG9m
IGEgaGFjayAuLi4NCiAgICAtICovDQogICAgLXN0YXRpYyBpbnQgeXlfZGlkX2J1ZmZlcl9zd2l0
Y2hfb25fZW9mOw0KICAgIC0NCiAgICAtdm9pZCB5eXJlc3RhcnQgKEZJTEUgKmlucHV0X2ZpbGUg
ICk7DQogICAgLXZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIG5ld19i
dWZmZXIgICk7DQogICAgLVlZX0JVRkZFUl9TVEFURSB5eV9jcmVhdGVfYnVmZmVyIChGSUxFICpm
aWxlLGludCBzaXplICApOw0KICAgIC12b2lkIHl5X2RlbGV0ZV9idWZmZXIgKFlZX0JVRkZFUl9T
VEFURSBiICApOw0KICAgIC12b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIg
ICk7DQogICAgLXZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19i
dWZmZXIgICk7DQogICAgLXZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkICk7DQogICAgLQ0K
ICAgIC1zdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHZvaWQgKTsNCiAgICAtc3Rh
dGljIHZvaWQgeXlfbG9hZF9idWZmZXJfc3RhdGUgKHZvaWQgKTsNCiAgICAtc3RhdGljIHZvaWQg
eXlfaW5pdF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgICk7DQogICAgLQ0K
ICAgIC0jZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVOVF9C
VUZGRVIgKQ0KICAgIC0NCiAgICAtWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChjaGFy
ICpiYXNlLHl5X3NpemVfdCBzaXplICApOw0KICAgIC1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9z
dHJpbmcgKHl5Y29uc3QgY2hhciAqeXlfc3RyICApOw0KICAgIC1ZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRlcyxpbnQgbGVuICApOw0KICAgIC0NCiAgICAt
dm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICApOw0KICAgIC12b2lkICp5eXJlYWxsb2MgKHZvaWQg
Kix5eV9zaXplX3QgICk7DQogICAgLXZvaWQgeXlmcmVlICh2b2lkICogICk7DQogICAgLQ0KICAg
IC0jZGVmaW5lIHl5X25ld19idWZmZXIgeXlfY3JlYXRlX2J1ZmZlcg0KICAgIC0NCiAgICAtI2Rl
ZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwNCiAgICAtCXsgXA0KICAg
IC0JaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwNCiAgICAtICAgICAgICB5eWVuc3VyZV9i
dWZmZXJfc3RhY2sgKCk7IFwNCiAgICAtCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBc
DQogICAgLSAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOyBc
DQogICAgLQl9IFwNCiAgICAtCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJh
Y3RpdmUgPSBpc19pbnRlcmFjdGl2ZTsgXA0KICAgIC0JfQ0KICAgIC0NCiAgICAtI2RlZmluZSB5
eV9zZXRfYm9sKGF0X2JvbCkgXA0KICAgIC0JeyBcDQogICAgLQlpZiAoICEgWVlfQ1VSUkVOVF9C
VUZGRVIgKXtcDQogICAgLSAgICAgICAgeXllbnN1cmVfYnVmZmVyX3N0YWNrICgpOyBcDQogICAg
LQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXA0KICAgIC0gICAgICAgICAgICB5eV9j
cmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsgXA0KICAgIC0JfSBcDQogICAgLQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCA9IGF0X2JvbDsgXA0KICAgIC0JfQ0KICAg
IC0NCiAgICAtI2RlZmluZSBZWV9BVF9CT0woKSAoWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9hdF9ib2wpDQogICAgLQ0KICAgIC0vKiBCZWdpbiB1c2VyIHNlY3QzICovDQogICAgLQ0KICAg
IC0jZGVmaW5lIHl5d3JhcCgpICgvKkNPTlNUQ09ORCovMSkNCiAgICAtI2RlZmluZSBZWV9TS0lQ
X1lZV1JBUA0KICAgIC0NCiAgICAtdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NIQVI7DQogICAg
LQ0KICAgIC1GSUxFICp5eWluID0gTlVMTCwgKnl5b3V0ID0gTlVMTDsNCiAgICAtDQogICAgLXR5
cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7DQogICAgLQ0KICAgIC1leHRlcm4gaW50IHl5bGluZW5v
Ow0KICAgIC0NCiAgICAtaW50IHl5bGluZW5vID0gMTsNCiAgICAtDQogICAgLWV4dGVybiBjaGFy
ICp5eXRleHQ7DQogICAgLSNpZmRlZiB5eXRleHRfcHRyDQogICAgLSN1bmRlZiB5eXRleHRfcHRy
DQogICAgLSNlbmRpZg0KICAgIC0jZGVmaW5lIHl5dGV4dF9wdHIgeXl0ZXh0DQogICAgLQ0KICAg
IC1zdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0W11bMjFdID0NCiAgICAtICAgIHsN
CiAgICAtICAgIHsNCiAgICAtICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLCAgICAwLCAgICAwLA0KICAgIC0gICAgICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsDQogICAgLSAgICAgICAgMA0K
ICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgICAxNCwgICAx
NSwgICAxNiwgICAxNCwgICAxNCwgICAxNywgICAxNCwgICAxNCwgICAxNCwNCiAgICAtICAgICAg
IDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0
LA0KICAgIC0gICAgICAgMTQNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0g
ICAgICAgMTMsICAgMTQsICAgMTUsICAgMTYsICAgMTQsICAgMTQsICAgMTcsICAgMTQsICAgMTQs
ICAgMTQsDQogICAgLSAgICAgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAxNCwgICAx
NCwgICAxNCwgICAxNCwgICAxNCwNCiAgICAtICAgICAgIDE0DQogICAgLSAgICB9LA0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgIDE4LCAgIDE5LCAgIDIwLCAgIDE4LCAgIDE4
LCAgIDE4LCAgIDIxLCAgIDE4LCAgIDE4LA0KICAgIC0NCiAgICAtICAgICAgIDE4LCAgIDE4LCAg
IDIyLCAgIDIzLCAgIDE4LCAgIDI0LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDE4LA0KICAgIC0gICAg
ICAgMTgNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAg
MTgsICAgMTksICAgMjAsICAgMTgsICAgMTgsICAgMTgsICAgMjEsICAgMTgsICAgMTgsDQogICAg
LSAgICAgICAxOCwgICAxOCwgICAyMiwgICAyMywgICAxOCwgICAyNCwgICAxOCwgICAyNSwgICAx
OCwgICAxOCwNCiAgICAtICAgICAgIDE4DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsN
CiAgICAtICAgICAgIDEzLCAgIDI2LCAgIDI3LCAgIDI4LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2
LCAgIDI2LCAgIDI2LA0KICAgIC0gICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAg
MjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsDQogICAgLSAgICAgICAyNg0KICAgIC0gICAgfSwN
CiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgICAyNiwgICAyNywgICAyOCwgICAy
NiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwNCiAgICAtICAgICAgIDI2LCAgIDI2LCAg
IDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LA0KICAgIC0NCiAg
ICAtICAgICAgIDI2DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAg
IDEzLCAgIDI5LCAgIDI5LCAgIDMwLCAgIDI5LCAgIDMxLCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMx
LA0KICAgIC0gICAgICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAg
MjksICAgMjksICAgMzMsDQogICAgLSAgICAgICAyOQ0KICAgIC0gICAgfSwNCiAgICAtDQogICAg
LSAgICB7DQogICAgLSAgICAgICAxMywgICAyOSwgICAyOSwgICAzMCwgICAyOSwgICAzMSwgICAy
OSwgICAzMiwgICAyOSwgICAzMSwNCiAgICAtICAgICAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAg
IDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDI5LCAgIDMzLA0KICAgIC0gICAgICAgMjkNCiAgICAt
ICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAgMzQsICAgMzUsICAg
MzYsICAgMzcsICAgMzgsICAgMzksICAgNDAsICAgNDEsICAgMzgsDQogICAgLSAgICAgICA0Miwg
ICA0MywgICAzNCwgICA0NCwgICA0NCwgICAzNCwgICA0NSwgICA0NiwgICA0NywgICA0OCwNCiAg
ICAtICAgICAgIDQ5DQogICAgLQ0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAg
LSAgICAgICAxMywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAzOSwgICA0MCwgICA0
MSwgICAzOCwNCiAgICAtICAgICAgIDQyLCAgIDQzLCAgIDM0LCAgIDQ0LCAgIDQ0LCAgIDM0LCAg
IDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LA0KICAgIC0gICAgICAgNDkNCiAgICAtICAgIH0sDQogICAg
LQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAgNTAsICAgNTEsICAgNTIsICAgNTAsICAg
NTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsDQogICAgLSAgICAgICA1MCwgICA1MCwgICA1MCwg
ICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwNCiAgICAtICAgICAgIDUw
DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgIDUwLCAg
IDUxLCAgIDUyLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLA0KICAgIC0gICAg
ICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAg
NTAsDQogICAgLSAgICAgICA1MA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAg
LSAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0x
MywgIC0xMywNCiAgICAtDQogICAgLSAgICAgIC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywg
IC0xMywgIC0xMywgIC0xMywgIC0xMywgIC0xMywNCiAgICAtICAgICAgLTEzDQogICAgLSAgICB9
LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTE0LCAgLTE0LCAgLTE0LCAg
LTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LCAgLTE0LA0KICAgIC0gICAgICAtMTQsICAtMTQs
ICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsDQogICAgLSAg
ICAgIC0xNA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywg
IC0xNSwgICA1MywgICA1NCwgIC0xNSwgIC0xNSwgICA1NSwgIC0xNSwgIC0xNSwgIC0xNSwNCiAg
ICAtICAgICAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAgLTE1LCAg
LTE1LCAgLTE1LA0KICAgIC0gICAgICAtMTUNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAg
ew0KICAgIC0gICAgICAgMTMsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAtMTYsICAt
MTYsICAtMTYsICAtMTYsDQogICAgLSAgICAgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwg
IC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwNCiAgICAtDQogICAgLSAgICAgIC0xNg0KICAg
IC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgICA1NiwgICA1Niwg
ICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwNCiAgICAtICAgICAgIDU2
LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LA0K
ICAgIC0gICAgICAgNTYNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAg
ICAgMTMsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAtMTgsICAt
MTgsDQogICAgLSAgICAgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwg
IC0xOCwgIC0xOCwgIC0xOCwNCiAgICAtICAgICAgLTE4DQogICAgLSAgICB9LA0KICAgIC0NCiAg
ICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTE5LCAgIDU4LCAgLTE5LCAgLTE5LCAgLTE5LCAg
LTE5LCAgLTE5LCAgLTE5LCAgLTE5LA0KICAgIC0gICAgICAtMTksICAtMTksICAtMTksICAtMTks
ICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksDQogICAgLSAgICAgIC0xOQ0KICAg
IC0NCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtMjAs
ICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsICAtMjAsDQogICAgLSAg
ICAgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwg
IC0yMCwNCiAgICAtICAgICAgLTIwDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAg
ICAtICAgICAgIDEzLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgLTIxLCAgIDU5LCAg
LTIxLCAgLTIxLA0KICAgIC0gICAgICAtMjEsICAtMjEsICAtMjEsICAgNTksICAtMjEsICAtMjEs
ICAtMjEsICAtMjEsICAtMjEsICAtMjEsDQogICAgLSAgICAgIC0yMQ0KICAgIC0gICAgfSwNCiAg
ICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwg
IC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwgIC0yMiwNCiAgICAtICAgICAgLTIyLCAgLTIyLCAgLTIy
LCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgIDYwLCAgLTIyLCAgLTIyLA0KICAgIC0gICAgICAt
MjINCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtMjMs
ICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAtMjMsICAgNTksICAtMjMsICAtMjMsDQogICAgLQ0K
ICAgIC0gICAgICAtMjMsICAtMjMsICAtMjMsICAgNjEsICAtMjMsICAtMjMsICAtMjMsICAtMjMs
ICAtMjMsICAtMjMsDQogICAgLSAgICAgIC0yMw0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAg
ICB7DQogICAgLSAgICAgICAxMywgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwgIC0yNCwg
IC0yNCwgIC0yNCwgIC0yNCwNCiAgICAtICAgICAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0
LCAgLTI0LCAgLTI0LCAgIDYyLCAgLTI0LCAgLTI0LA0KICAgIC0gICAgICAtMjQNCiAgICAtICAg
IH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtMjUsICAtMjUsICAtMjUs
ICAtMjUsICAtMjUsICAtMjUsICAtMjUsICAtMjUsICAtMjUsDQogICAgLSAgICAgIC0yNSwgIC0y
NSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwNCiAgICAt
ICAgICAgLTI1DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEz
LCAgIDYzLCAgIDYzLCAgLTI2LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLA0K
ICAgIC0gICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsDQogICAgLQ0KICAgIC0gICAgICAgNjMNCiAgICAtICAgIH0sDQogICAgLQ0K
ICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtMjcsICAgNjQsICAgNjUsICAtMjcsICAtMjcs
ICAtMjcsICAtMjcsICAtMjcsICAtMjcsDQogICAgLSAgICAgIC0yNywgIC0yNywgIC0yNywgIC0y
NywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywNCiAgICAtICAgICAgLTI3DQog
ICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgIDY2LCAgLTI4
LCAgLTI4LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LA0KICAgIC0gICAgICAg
NjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYs
DQogICAgLSAgICAgICA2Ng0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAg
ICAgICAxMywgICA2NywgICA2NywgICA2OCwgICA2NywgIC0yOSwgICA2NywgIC0yOSwgICA2Nywg
IC0yOSwNCiAgICAtICAgICAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3LCAgIDY3
LCAgIDY3LCAgIDY3LCAgLTI5LA0KICAgIC0gICAgICAgNjcNCiAgICAtDQogICAgLSAgICB9LA0K
ICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMw
LCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLCAgLTMwLA0KICAgIC0gICAgICAtMzAsICAtMzAsICAt
MzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsDQogICAgLSAgICAg
IC0zMA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC0z
MSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwgIC0zMSwNCiAgICAt
ICAgICAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMx
LCAgLTMxLA0KICAgIC0gICAgICAtMzENCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0K
ICAgIC0gICAgICAgMTMsICAgNjksICAgNjksICAtMzIsICAgNjksICAgNjksICAgNjksICAgNjks
ICAgNjksICAgNjksDQogICAgLSAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2
OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwNCiAgICAtICAgICAgIDY5DQogICAgLSAgICB9LA0K
ICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgIDcwLCAgIDcwLCAgIDcxLCAgIDcw
LCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLA0KICAgIC0NCiAgICAtICAgICAgIDcwLCAg
IDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLCAgIDcwLA0KICAg
IC0gICAgICAgNzANCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAg
MTMsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQsICAtMzQs
DQogICAgLSAgICAgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0z
NCwgIC0zNCwgIC0zNCwNCiAgICAtICAgICAgLTM0DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAt
ICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTM1LCAgIDcyLCAgLTM1LCAgLTM1LCAgLTM1LCAgLTM1
LCAgLTM1LCAgLTM1LCAgLTM1LA0KICAgIC0gICAgICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAt
MzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsDQogICAgLSAgICAgIC0zNQ0KICAgIC0g
ICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC0zNiwgIC0zNiwgIC0z
NiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwgIC0zNiwNCiAgICAtICAgICAgLTM2LCAg
LTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LA0KICAg
IC0NCiAgICAtICAgICAgLTM2DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAt
ICAgICAgIDEzLCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3LCAgLTM3
LCAgLTM3LA0KICAgIC0gICAgICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAt
MzcsICAgNzMsICAtMzcsICAtMzcsDQogICAgLSAgICAgIC0zNw0KICAgIC0gICAgfSwNCiAgICAt
DQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0z
OCwgIC0zOCwgIC0zOCwgIC0zOCwgIC0zOCwNCiAgICAtICAgICAgLTM4LCAgLTM4LCAgLTM4LCAg
LTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LA0KICAgIC0gICAgICAtMzgN
CiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAgNzQsICAg
NzQsICAtMzksICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsDQogICAgLSAgICAg
ICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwNCiAgICAtICAgICAgIDc0DQogICAgLQ0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7
DQogICAgLSAgICAgICAxMywgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgIC00MCwgICA3
NSwgIC00MCwgIC00MCwNCiAgICAtICAgICAgLTQwLCAgLTQwLCAgLTQwLCAgIDc1LCAgIDc1LCAg
LTQwLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQwLA0KICAgIC0gICAgICAtNDANCiAgICAtICAgIH0s
DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtNDEsICAtNDEsICAtNDEsICAt
NDEsICAtNDEsICAtNDEsICAtNDEsICAgNzYsICAtNDEsDQogICAgLSAgICAgIC00MSwgIC00MSwg
IC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwNCiAgICAtICAg
ICAgLTQxDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAg
LTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLCAgLTQyLA0KICAg
IC0gICAgICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAt
NDIsICAtNDIsDQogICAgLSAgICAgIC00Mg0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7
DQogICAgLSAgICAgICAxMywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00
MywgIC00MywgIC00MywNCiAgICAtDQogICAgLSAgICAgIC00MywgIC00MywgIC00MywgIC00Mywg
IC00MywgIC00MywgIC00MywgIC00MywgIC00MywgIC00MywNCiAgICAtICAgICAgLTQzDQogICAg
LSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTQ0LCAgLTQ0LCAg
LTQ0LCAgLTQ0LCAgLTQ0LCAgLTQ0LCAgIDc1LCAgLTQ0LCAgLTQ0LA0KICAgIC0gICAgICAtNDQs
ICAtNDQsICAtNDQsICAgNzcsICAgNzcsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsDQog
ICAgLSAgICAgIC00NA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAg
ICAxMywgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00NSwgIC00
NSwNCiAgICAtICAgICAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAg
IDc4LCAgLTQ1LCAgLTQ1LA0KICAgIC0gICAgICAtNDUNCiAgICAtICAgIH0sDQogICAgLQ0KICAg
IC0gICAgew0KICAgIC0gICAgICAgMTMsICAtNDYsICAtNDYsICAtNDYsICAtNDYsICAtNDYsICAt
NDYsICAtNDYsICAtNDYsICAtNDYsDQogICAgLSAgICAgIC00NiwgIC00NiwgIC00NiwgIC00Niwg
IC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwNCiAgICAtDQogICAgLSAgICAgIC00
Ng0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC00Nywg
IC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywgIC00NywNCiAgICAtICAg
ICAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgIDc5LCAgLTQ3LCAg
LTQ3LA0KICAgIC0gICAgICAtNDcNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAg
IC0gICAgICAgMTMsICAtNDgsICAtNDgsICAgODAsICAtNDgsICAtNDgsICAtNDgsICAtNDgsICAt
NDgsICAtNDgsDQogICAgLSAgICAgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwg
IC00OCwgIC00OCwgIC00OCwgIC00OCwNCiAgICAtICAgICAgLTQ4DQogICAgLSAgICB9LA0KICAg
IC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAg
LTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LCAgLTQ5LA0KICAgIC0gICAgICAtNDksICAtNDksICAtNDks
ICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksDQogICAgLSAgICAgICA4
MQ0KICAgIC0NCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMs
ICAgODIsICAgODMsICAtNTAsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsDQog
ICAgLSAgICAgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4Miwg
ICA4MiwgICA4MiwNCiAgICAtICAgICAgIDgyDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAg
IHsNCiAgICAtICAgICAgIDEzLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAgLTUxLCAg
LTUxLCAgLTUxLCAgLTUxLA0KICAgIC0gICAgICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEs
ICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsDQogICAgLSAgICAgIC01MQ0KICAgIC0gICAg
fSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC01MiwgIC01MiwgIC01Miwg
IC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwgIC01MiwNCiAgICAtICAgICAgLTUyLCAgLTUy
LCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLA0KICAgIC0g
ICAgICAtNTINCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMs
ICAtNTMsICAgNTMsICAgNTQsICAtNTMsICAtNTMsICAgNTUsICAtNTMsICAtNTMsICAtNTMsDQog
ICAgLQ0KICAgIC0gICAgICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMsICAtNTMs
ICAtNTMsICAtNTMsICAtNTMsDQogICAgLSAgICAgIC01Mw0KICAgIC0gICAgfSwNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC01NCwgIC01NCwgIC01NCwgIC01NCwgIC01NCwg
IC01NCwgIC01NCwgIC01NCwgIC01NCwNCiAgICAtICAgICAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0
LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LA0KICAgIC0gICAgICAtNTQNCiAg
ICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAgNTYsICAgNTYs
ICAgNTcsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsDQogICAgLSAgICAgICA1
NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwN
CiAgICAtICAgICAgIDU2DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAg
ICAgIDEzLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAg
IDU2LA0KICAgIC0gICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYs
ICAgNTYsICAgNTYsICAgNTYsDQogICAgLQ0KICAgIC0gICAgICAgNTYNCiAgICAtICAgIH0sDQog
ICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtNTcsICAtNTcsICAtNTcsICAtNTcs
ICAtNTcsICAtNTcsICAtNTcsICAtNTcsICAtNTcsDQogICAgLSAgICAgIC01NywgIC01NywgIC01
NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywNCiAgICAtICAgICAg
LTU3DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTU4
LCAgIDU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LCAgLTU4LA0KICAgIC0g
ICAgICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgs
ICAtNTgsDQogICAgLSAgICAgIC01OA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQog
ICAgLSAgICAgICAxMywgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgIC01OSwgICA1OSwg
IC01OSwgIC01OSwNCiAgICAtICAgICAgLTU5LCAgLTU5LCAgLTU5LCAgIDU5LCAgLTU5LCAgLTU5
LCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LA0KICAgIC0gICAgICAtNTkNCiAgICAtDQogICAgLSAg
ICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTYwLCAgLTYwLCAgLTYw
LCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLCAgLTYwLA0KICAgIC0gICAgICAtNjAsICAt
NjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsDQogICAg
LSAgICAgIC02MA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAx
MywgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgIC02MSwgICA1OSwgIC02MSwgIC02MSwN
CiAgICAtICAgICAgLTYxLCAgLTYxLCAgLTYxLCAgIDYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYx
LCAgLTYxLCAgLTYxLA0KICAgIC0gICAgICAtNjENCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0g
ICAgew0KICAgIC0gICAgICAgMTMsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIsICAtNjIs
ICAtNjIsICAtNjIsICAtNjIsDQogICAgLSAgICAgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02
MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwNCiAgICAtICAgICAgLTYyDQogICAgLSAg
ICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgIDYzLCAgIDYzLCAgLTYz
LCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLA0KICAgIC0NCiAgICAtICAgICAg
IDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYzLCAgIDYz
LA0KICAgIC0gICAgICAgNjMNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0g
ICAgICAgMTMsICAtNjQsICAgNjQsICAgNjUsICAtNjQsICAtNjQsICAtNjQsICAtNjQsICAtNjQs
ICAtNjQsDQogICAgLSAgICAgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02NCwgIC02
NCwgIC02NCwgIC02NCwgIC02NCwNCiAgICAtICAgICAgLTY0DQogICAgLSAgICB9LA0KICAgIC0N
CiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgIDY2LCAgLTY1LCAgLTY1LCAgIDY2LCAgIDY2
LCAgIDY2LCAgIDY2LCAgIDY2LCAgIDY2LA0KICAgIC0gICAgICAgNjYsICAgNjYsICAgNjYsICAg
NjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsDQogICAgLSAgICAgICA2Ng0K
ICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC02NiwgIC02
NiwgIC02NiwgIC02NiwgIC02NiwgIC02NiwgIC02NiwgIC02NiwgIC02NiwNCiAgICAtICAgICAg
LTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2
LA0KICAgIC0NCiAgICAtICAgICAgLTY2DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsN
CiAgICAtICAgICAgIDEzLCAgIDY3LCAgIDY3LCAgIDY4LCAgIDY3LCAgLTY3LCAgIDY3LCAgLTY3
LCAgIDY3LCAgLTY3LA0KICAgIC0gICAgICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAg
NjcsICAgNjcsICAgNjcsICAgNjcsICAtNjcsDQogICAgLSAgICAgICA2Nw0KICAgIC0gICAgfSwN
CiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgIC02OCwgIC02OCwgIC02OCwgIC02
OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwgIC02OCwNCiAgICAtICAgICAgLTY4LCAgLTY4LCAg
LTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LA0KICAgIC0gICAg
ICAtNjgNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAg
NjksICAgNjksICAtNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksICAgNjksDQogICAg
LSAgICAgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2
OSwgICA2OSwNCiAgICAtICAgICAgIDY5DQogICAgLQ0KICAgIC0gICAgfSwNCiAgICAtDQogICAg
LSAgICB7DQogICAgLSAgICAgICAxMywgIC03MCwgIC03MCwgICA3MSwgIC03MCwgIC03MCwgIC03
MCwgIC03MCwgIC03MCwgIC03MCwNCiAgICAtICAgICAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLCAg
LTcwLCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLA0KICAgIC0gICAgICAtNzANCiAgICAt
ICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtNzEsICAtNzEsICAt
NzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsICAtNzEsDQogICAgLSAgICAgIC03MSwg
IC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwNCiAg
ICAtICAgICAgLTcxDQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAg
IDEzLCAgLTcyLCAgIDcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcyLCAgLTcy
LA0KICAgIC0gICAgICAtNzIsICAtNzIsICAtNzIsICAtNzIsICAtNzIsICAtNzIsICAtNzIsICAt
NzIsICAtNzIsICAtNzIsDQogICAgLSAgICAgIC03Mg0KICAgIC0gICAgfSwNCiAgICAtDQogICAg
LSAgICB7DQogICAgLSAgICAgICAxMywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03
MywgIC03MywgIC03MywgIC03MywNCiAgICAtDQogICAgLSAgICAgIC03MywgIC03MywgIC03Mywg
IC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywgIC03MywNCiAgICAtICAgICAgLTcz
DQogICAgLSAgICB9LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgIDc0LCAg
IDc0LCAgLTc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LA0KICAgIC0gICAg
ICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAg
NzQsDQogICAgLSAgICAgICA3NA0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAg
LSAgICAgICAxMywgIC03NSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwgIC03NSwgICA3NSwgIC03
NSwgIC03NSwNCiAgICAtICAgICAgLTc1LCAgLTc1LCAgLTc1LCAgIDc1LCAgIDc1LCAgLTc1LCAg
LTc1LCAgLTc1LCAgLTc1LCAgLTc1LA0KICAgIC0gICAgICAtNzUNCiAgICAtICAgIH0sDQogICAg
LQ0KICAgIC0gICAgew0KICAgIC0gICAgICAgMTMsICAtNzYsICAtNzYsICAtNzYsICAtNzYsICAt
NzYsICAtNzYsICAtNzYsICAtNzYsICAtNzYsDQogICAgLSAgICAgIC03NiwgIC03NiwgIC03Niwg
IC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwNCiAgICAtDQogICAgLSAg
ICAgIC03Ng0KICAgIC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywg
IC03NywgIC03NywgIC03NywgIC03NywgIC03NywgIC03NywgICA3NSwgIC03NywgIC03NywNCiAg
ICAtICAgICAgLTc3LCAgLTc3LCAgLTc3LCAgIDc3LCAgIDc3LCAgLTc3LCAgLTc3LCAgLTc3LCAg
LTc3LCAgLTc3LA0KICAgIC0gICAgICAtNzcNCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAg
ew0KICAgIC0gICAgICAgMTMsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAtNzgsICAt
NzgsICAtNzgsICAtNzgsDQogICAgLSAgICAgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwg
IC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwNCiAgICAtICAgICAgLTc4DQogICAgLSAgICB9
LA0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTc5LCAgLTc5LCAgLTc5LCAg
LTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LCAgLTc5LA0KICAgIC0gICAgICAtNzksICAtNzks
ICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksDQogICAgLSAg
ICAgIC03OQ0KICAgIC0NCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAg
ICAgMTMsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAtODAsICAt
ODAsDQogICAgLSAgICAgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwg
IC04MCwgIC04MCwgIC04MCwNCiAgICAtICAgICAgLTgwDQogICAgLSAgICB9LA0KICAgIC0NCiAg
ICAtICAgIHsNCiAgICAtICAgICAgIDEzLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAgLTgxLCAg
LTgxLCAgLTgxLCAgLTgxLCAgLTgxLA0KICAgIC0gICAgICAtODEsICAtODEsICAtODEsICAtODEs
ICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsDQogICAgLSAgICAgIC04MQ0KICAg
IC0gICAgfSwNCiAgICAtDQogICAgLSAgICB7DQogICAgLSAgICAgICAxMywgICA4MiwgICA4Mywg
IC04MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwgICA4MiwNCiAgICAtICAgICAgIDgy
LCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLA0K
ICAgIC0gICAgICAgODINCiAgICAtICAgIH0sDQogICAgLQ0KICAgIC0gICAgew0KICAgIC0gICAg
ICAgMTMsICAgODMsICAgODMsICAtODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAg
ODMsDQogICAgLQ0KICAgIC0gICAgICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
ICAgODMsICAgODMsICAgODMsICAgODMsDQogICAgLSAgICAgICA4Mw0KICAgIC0gICAgfSwNCiAg
ICAtDQogICAgLSAgICB9IDsNCiAgICAtDQogICAgLXN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X2dl
dF9wcmV2aW91c19zdGF0ZSAodm9pZCApOw0KICAgIC1zdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV90
cnlfTlVMX3RyYW5zICh5eV9zdGF0ZV90eXBlIGN1cnJlbnRfc3RhdGUgICk7DQogICAgLXN0YXRp
YyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh2b2lkICk7DQogICAgLXN0YXRpYyB2b2lkIHl5bm9y
ZXR1cm4geXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICApOw0KICAgIC0NCiAgICAt
LyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVuIG1hdGNoZWQgYW5kIGJl
Zm9yZSB0aGUNCiAgICAtICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5dGV4dC4N
CiAgICAtICovDQogICAgLSNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcDQogICAgLQkoeXl0
ZXh0X3B0cikgPSB5eV9icDsgXA0KICAgIC0JeXlsZW5nID0gKGludCkgKHl5X2NwIC0geXlfYnAp
OyBcDQogICAgLQkoeXlfaG9sZF9jaGFyKSA9ICp5eV9jcDsgXA0KICAgIC0JKnl5X2NwID0gJ1ww
JzsgXA0KICAgIC0JKHl5X2NfYnVmX3ApID0geXlfY3A7DQogICAgLQ0KICAgIC0jZGVmaW5lIFlZ
X05VTV9SVUxFUyA0Nw0KICAgIC0jZGVmaW5lIFlZX0VORF9PRl9CVUZGRVIgNDgNCiAgICAtLyog
VGhpcyBzdHJ1Y3QgaXMgbm90IHVzZWQgaW4gdGhpcyBzY2FubmVyLA0KICAgIC0gICBidXQgaXRz
IHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8NCiAgICAtc3RydWN0IHl5X3RyYW5zX2luZm8NCiAg
ICAtCXsNCiAgICAtCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7DQogICAgLQlmbGV4X2ludDMyX3Qg
eXlfbnh0Ow0KICAgIC0JfTsNCiAgICAtc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Fj
Y2VwdFs4NF0gPQ0KICAgIC0gICAgeyAgIDAsDQogICAgLSAgICAgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwNCiAgICAtICAgICAgICAw
LCAgICAwLCAgIDQ4LCAgICA1LCAgICA0LCAgICAyLCAgICAzLCAgIDEyLCAgIDExLCAgIDEzLA0K
ICAgIC0gICAgICAgIDcsICAgMTIsICAgIDYsICAgMTIsICAgIDgsICAgNDYsICAgNDMsICAgNDUs
ICAgMzgsICAgNDIsDQogICAgLSAgICAgICA0MSwgICAzNiwgICA0MCwgICAzNSwgICAzNCwgICAy
OSwgICAyMSwgICAyOCwgICAzMiwgICAzMSwNCiAgICAtICAgICAgIDM1LCAgIDE5LCAgIDIwLCAg
IDMwLCAgIDI2LCAgIDIyLCAgIDI3LCAgIDM1LCAgIDM1LCAgIDE0LA0KICAgIC0gICAgICAgMTYs
ICAgMTUsICAgIDQsICAgIDIsICAgIDMsICAgIDMsICAgIDEsICAgMTEsICAgIDcsICAgMTAsDQog
ICAgLSAgICAgICAgNiwgICAgOSwgICA0NiwgICA0MywgICA0NSwgICA0NCwgICAzOCwgICAzNywg
ICAzNiwgICA0MCwNCiAgICAtICAgICAgIDM5LCAgIDM0LCAgIDIzLCAgIDMyLCAgIDMxLCAgIDE3
LCAgIDMwLCAgIDI0LCAgIDI1LCAgIDMzLA0KICAgIC0gICAgICAgMTgsICAgMTQsICAgMTQNCiAg
ICAtICAgIH0gOw0KICAgIC0NCiAgICAtc3RhdGljIHl5Y29uc3QgWVlfQ0hBUiB5eV9lY1syNTZd
ID0NCiAgICAtICAgIHsgICAwLA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDIsICAgIDMsDQogICAgLSAgICAgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICAtICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLA0KICAgIC0gICAgICAgIDEsICAgIDIsICAgIDQsICAgIDUsICAgIDYsICAgIDcsICAgIDEs
ICAgIDgsICAgIDksICAgMTAsDQogICAgLSAgICAgICAxMSwgICAgMSwgICAxMiwgICAgMSwgICAx
MywgICAxNCwgICAxNCwgICAxMywgICAxMywgICAxMywNCiAgICAtICAgICAgIDEzLCAgIDEzLCAg
IDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDE1LCAgICAxLCAgIDE2LA0KICAgIC0gICAg
ICAgMTcsICAgMTgsICAgIDEsICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAg
MTMsDQogICAgLSAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywNCiAgICAtICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEz
LCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLA0KICAgIC0gICAgICAgIDEsICAgMTksICAg
IDEsICAgIDEsICAgMTMsICAgIDEsICAgMTMsICAgMTMsICAgMTMsICAgMTMsDQogICAgLQ0KICAg
IC0gICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAg
MTMsICAgMTMsDQogICAgLSAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywg
ICAxMywgICAxMywgICAxMywgICAxMywNCiAgICAtICAgICAgIDEzLCAgIDEzLCAgICAxLCAgIDIw
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgIC0gICAgICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAg
LSAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwNCiAgICAtICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgLSAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICAt
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgLQ0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgLSAgICAgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwN
CiAgICAtICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLA0KICAgIC0gICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgLSAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICAtICAgICAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxDQogICAgLSAgICB9IDsNCiAgICAtDQogICAgLS8qIFRh
YmxlIG9mIGJvb2xlYW5zLCB0cnVlIGlmIHJ1bGUgY291bGQgbWF0Y2ggZW9sLiAqLw0KICAgIC1z
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzQ4XSA9DQog
ICAgLSAgICB7ICAgMCwNCiAgICAtMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MSwgMCwgMSwgMCwgMCwgMCwgMCwgDQogICAgLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAxLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAxLCAwLCAxLCANCiAgICAtICAgIDAsIDAsIDEsIDAs
IDEsIDEsIDAsIDAsICAgICB9Ow0KICAgIC0NCiAgICAtZXh0ZXJuIGludCB5eV9mbGV4X2RlYnVn
Ow0KICAgIC1pbnQgeXlfZmxleF9kZWJ1ZyA9IDA7DQogICAgLQ0KICAgIC0vKiBUaGUgaW50ZW50
IGJlaGluZCB0aGlzIGRlZmluaXRpb24gaXMgdGhhdCBpdCdsbCBjYXRjaA0KICAgIC0gKiBhbnkg
dXNlcyBvZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuDQogICAgLSAqLw0KICAgIC0jZGVmaW5l
IFJFSkVDVCByZWplY3RfdXNlZF9idXRfbm90X2RldGVjdGVkDQogICAgLSNkZWZpbmUgeXltb3Jl
KCkgeXltb3JlX3VzZWRfYnV0X25vdF9kZXRlY3RlZA0KICAgIC0jZGVmaW5lIFlZX01PUkVfQURK
IDANCiAgICAtI2RlZmluZSBZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUDQogICAgLWNoYXIgKnl5
dGV4dDsNCiAgICAtDQogICAgLS8qDQogICAgLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBa
aXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICAtICogUmVsZWFzZWQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgR1BMIHYyLjAuDQogICAgLSAqLw0KICAgIC0NCiAgICAtI2luY2x1
ZGUgPGFzc2VydC5oPg0KICAgIC0jaW5jbHVkZSA8bGltaXRzLmg+DQogICAgLSNpbmNsdWRlIDxz
dGRpby5oPg0KICAgIC0jaW5jbHVkZSA8c3RkbGliLmg+DQogICAgLSNpbmNsdWRlIDxzdHJpbmcu
aD4NCiAgICAtI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgIC0NCiAgICAtI2luY2x1ZGUgImxrYy5o
Ig0KICAgIC0NCiAgICAtI2RlZmluZSBTVEFSVF9TVFJTSVpFCTE2DQogICAgLQ0KICAgIC1zdGF0
aWMgc3RydWN0IHsNCiAgICAtCXN0cnVjdCBmaWxlICpmaWxlOw0KICAgIC0JaW50IGxpbmVubzsN
CiAgICAtfSBjdXJyZW50X3BvczsNCiAgICAtDQogICAgLXN0YXRpYyBjaGFyICp0ZXh0Ow0KICAg
IC1zdGF0aWMgaW50IHRleHRfc2l6ZSwgdGV4dF9hc2l6ZTsNCiAgICAtDQogICAgLXN0cnVjdCBi
dWZmZXIgew0KICAgIC0Jc3RydWN0IGJ1ZmZlciAqcGFyZW50Ow0KICAgIC0JWVlfQlVGRkVSX1NU
QVRFIHN0YXRlOw0KICAgIC19Ow0KICAgIC0NCiAgICAtc3RydWN0IGJ1ZmZlciAqY3VycmVudF9i
dWY7DQogICAgLQ0KICAgIC1zdGF0aWMgaW50IGxhc3RfdHMsIGZpcnN0X3RzOw0KICAgIC0NCiAg
ICAtc3RhdGljIGNoYXIgKmV4cGFuZF90b2tlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IG4pOw0K
ICAgIC1zdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKTsN
CiAgICAtc3RhdGljIHZvaWQgemNvbmZfZW5kaGVscCh2b2lkKTsNCiAgICAtc3RhdGljIHZvaWQg
emNvbmZfZW5kZmlsZSh2b2lkKTsNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIG5ld19zdHJpbmco
dm9pZCkNCiAgICAtew0KICAgIC0JdGV4dCA9IHhtYWxsb2MoU1RBUlRfU1RSU0laRSk7DQogICAg
LQl0ZXh0X2FzaXplID0gU1RBUlRfU1RSU0laRTsNCiAgICAtCXRleHRfc2l6ZSA9IDA7DQogICAg
LQkqdGV4dCA9IDA7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIGFwcGVuZF9zdHJp
bmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc2l6ZSkNCiAgICAtew0KICAgIC0JaW50IG5ld19zaXpl
ID0gdGV4dF9zaXplICsgc2l6ZSArIDE7DQogICAgLQlpZiAobmV3X3NpemUgPiB0ZXh0X2FzaXpl
KSB7DQogICAgLQkJbmV3X3NpemUgKz0gU1RBUlRfU1RSU0laRSAtIDE7DQogICAgLQkJbmV3X3Np
emUgJj0gLVNUQVJUX1NUUlNJWkU7DQogICAgLQkJdGV4dCA9IHhyZWFsbG9jKHRleHQsIG5ld19z
aXplKTsNCiAgICAtCQl0ZXh0X2FzaXplID0gbmV3X3NpemU7DQogICAgLQl9DQogICAgLQltZW1j
cHkodGV4dCArIHRleHRfc2l6ZSwgc3RyLCBzaXplKTsNCiAgICAtCXRleHRfc2l6ZSArPSBzaXpl
Ow0KICAgIC0JdGV4dFt0ZXh0X3NpemVdID0gMDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGlj
IHZvaWQgYWxsb2Nfc3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IHNpemUpDQogICAgLXsNCiAg
ICAtCXRleHQgPSB4bWFsbG9jKHNpemUgKyAxKTsNCiAgICAtCW1lbWNweSh0ZXh0LCBzdHIsIHNp
emUpOw0KICAgIC0JdGV4dFtzaXplXSA9IDA7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2
b2lkIHdhcm5faWdub3JlZF9jaGFyYWN0ZXIoY2hhciBjaHIpDQogICAgLXsNCiAgICAtCWZwcmlu
dGYoc3RkZXJyLA0KICAgIC0JICAgICAgICAiJXM6JWQ6d2FybmluZzogaWdub3JpbmcgdW5zdXBw
b3J0ZWQgY2hhcmFjdGVyICclYydcbiIsDQogICAgLQkgICAgICAgIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCksIGNocik7DQogICAgLX0NCiAgICAtDQogICAgLSNkZWZpbmUgSU5JVElB
TCAwDQogICAgLSNkZWZpbmUgQ09NTUFORCAxDQogICAgLSNkZWZpbmUgSEVMUCAyDQogICAgLSNk
ZWZpbmUgU1RSSU5HIDMNCiAgICAtI2RlZmluZSBQQVJBTSA0DQogICAgLSNkZWZpbmUgQVNTSUdO
X1ZBTCA1DQogICAgLQ0KICAgIC0jaWZuZGVmIFlZX05PX1VOSVNURF9IDQogICAgLS8qIFNwZWNp
YWwgY2FzZSBmb3IgInVuaXN0ZC5oIiwgc2luY2UgaXQgaXMgbm9uLUFOU0kuIFdlIGluY2x1ZGUg
aXQgd2F5DQogICAgLSAqIGRvd24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHVzZXIncyBzZWN0
aW9uIDEgdG8gaGF2ZSBiZWVuIHNjYW5uZWQgZmlyc3QuDQogICAgLSAqIFRoZSB1c2VyIGhhcyBh
IGNoYW5jZSB0byBvdmVycmlkZSBpdCB3aXRoIGFuIG9wdGlvbi4NCiAgICAtICovDQogICAgLSNp
bmNsdWRlIDx1bmlzdGQuaD4NCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jaWZuZGVmIFlZX0VY
VFJBX1RZUEUNCiAgICAtI2RlZmluZSBZWV9FWFRSQV9UWVBFIHZvaWQgKg0KICAgIC0jZW5kaWYN
CiAgICAtDQogICAgLXN0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh2b2lkICk7DQogICAgLQ0K
ICAgIC0vKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuDQogICAgLSAgIFRoZXNlIGFyZSBt
YWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2UuICov
DQogICAgLQ0KICAgIC1pbnQgeXlsZXhfZGVzdHJveSAodm9pZCApOw0KICAgIC0NCiAgICAtaW50
IHl5Z2V0X2RlYnVnICh2b2lkICk7DQogICAgLQ0KICAgIC12b2lkIHl5c2V0X2RlYnVnIChpbnQg
ZGVidWdfZmxhZyAgKTsNCiAgICAtDQogICAgLVlZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgKHZv
aWQgKTsNCiAgICAtDQogICAgLXZvaWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgdXNlcl9k
ZWZpbmVkICApOw0KICAgIC0NCiAgICAtRklMRSAqeXlnZXRfaW4gKHZvaWQgKTsNCiAgICAtDQog
ICAgLXZvaWQgeXlzZXRfaW4gIChGSUxFICogX2luX3N0ciAgKTsNCiAgICAtDQogICAgLUZJTEUg
Knl5Z2V0X291dCAodm9pZCApOw0KICAgIC0NCiAgICAtdm9pZCB5eXNldF9vdXQgIChGSUxFICog
X291dF9zdHIgICk7DQogICAgLQ0KICAgIC0JCQlpbnQgeXlnZXRfbGVuZyAodm9pZCApOw0KICAg
IC0NCiAgICAtY2hhciAqeXlnZXRfdGV4dCAodm9pZCApOw0KICAgIC0NCiAgICAtaW50IHl5Z2V0
X2xpbmVubyAodm9pZCApOw0KICAgIC0NCiAgICAtdm9pZCB5eXNldF9saW5lbm8gKGludCBfbGlu
ZV9udW1iZXIgICk7DQogICAgLQ0KICAgIC0vKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2ludCBjYW4g
YWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbg0KICAgIC0gKiBzZWN0aW9u
IDEuDQogICAgLSAqLw0KICAgIC0NCiAgICAtI2lmbmRlZiBZWV9TS0lQX1lZV1JBUA0KICAgIC0j
aWZkZWYgX19jcGx1c3BsdXMNCiAgICAtZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh2b2lkICk7DQog
ICAgLSNlbHNlDQogICAgLWV4dGVybiBpbnQgeXl3cmFwICh2b2lkICk7DQogICAgLSNlbmRpZg0K
ICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZm5kZWYgWVlfTk9fVU5QVVQNCiAgICAtICAgIA0K
ICAgIC0gICAgc3RhdGljIHZvaWQgeXl1bnB1dCAoaW50IGMsY2hhciAqYnVmX3B0ciAgKTsNCiAg
ICAtICAgIA0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZm5kZWYgeXl0ZXh0X3B0cg0KICAg
IC1zdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIgKix5eWNvbnN0IGNoYXIgKixpbnQg
KTsNCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0jaWZkZWYgWVlfTkVFRF9TVFJMRU4NCiAgICAt
c3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogKTsNCiAgICAtI2VuZGlm
DQogICAgLQ0KICAgIC0jaWZuZGVmIFlZX05PX0lOUFVUDQogICAgLQ0KICAgIC0jaWZkZWYgX19j
cGx1c3BsdXMNCiAgICAtc3RhdGljIGludCB5eWlucHV0ICh2b2lkICk7DQogICAgLSNlbHNlDQog
ICAgLXN0YXRpYyBpbnQgaW5wdXQgKHZvaWQgKTsNCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0j
ZW5kaWYNCiAgICAtDQogICAgLS8qIEFtb3VudCBvZiBzdHVmZiB0byBzbHVycCB1cCB3aXRoIGVh
Y2ggcmVhZC4gKi8NCiAgICAtI2lmbmRlZiBZWV9SRUFEX0JVRl9TSVpFDQogICAgLSNpZmRlZiBf
X2lhNjRfXw0KICAgIC0vKiBPbiBJQS02NCwgdGhlIGJ1ZmZlciBzaXplIGlzIDE2aywgbm90IDhr
ICovDQogICAgLSNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSAxNjM4NA0KICAgIC0jZWxzZQ0KICAg
IC0jZGVmaW5lIFlZX1JFQURfQlVGX1NJWkUgODE5Mg0KICAgIC0jZW5kaWYgLyogX19pYTY0X18g
Ki8NCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0vKiBDb3B5IHdoYXRldmVyIHRoZSBsYXN0IHJ1
bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLw0KICAgIC0jaWZuZGVmIEVDSE8N
CiAgICAtLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUgc3RyaW5n
IG1pZ2h0IGNvbnRhaW4gTlVMJ3MsDQogICAgLSAqIHdlIG5vdyB1c2UgZndyaXRlKCkuDQogICAg
LSAqLw0KICAgIC0jZGVmaW5lIEVDSE8gZG8geyBpZiAoZndyaXRlKCB5eXRleHQsIChzaXplX3Qp
IHl5bGVuZywgMSwgeXlvdXQgKSkge30gfSB3aGlsZSAoMCkNCiAgICAtI2VuZGlmDQogICAgLQ0K
ICAgIC0vKiBHZXRzIGlucHV0IGFuZCBzdHVmZnMgaXQgaW50byAiYnVmIi4gIG51bWJlciBvZiBj
aGFyYWN0ZXJzIHJlYWQsIG9yIFlZX05VTEwsDQogICAgLSAqIGlzIHJldHVybmVkIGluICJyZXN1
bHQiLg0KICAgIC0gKi8NCiAgICAtI2lmbmRlZiBZWV9JTlBVVA0KICAgIC0jZGVmaW5lIFlZX0lO
UFVUKGJ1ZixyZXN1bHQsbWF4X3NpemUpIFwNCiAgICAtCWVycm5vPTA7IFwNCiAgICAtCXdoaWxl
ICggKHJlc3VsdCA9IChpbnQpIHJlYWQoIGZpbGVubyh5eWluKSwgYnVmLCBtYXhfc2l6ZSApKSA8
IDAgKSBcDQogICAgLQl7IFwNCiAgICAtCQlpZiggZXJybm8gIT0gRUlOVFIpIFwNCiAgICAtCQl7
IFwNCiAgICAtCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5uZXIgZmFpbGVk
IiApOyBcDQogICAgLQkJCWJyZWFrOyBcDQogICAgLQkJfSBcDQogICAgLQkJZXJybm89MDsgXA0K
ICAgIC0JCWNsZWFyZXJyKHl5aW4pOyBcDQogICAgLQl9XA0KICAgIC1cDQogICAgLQ0KICAgIC0j
ZW5kaWYNCiAgICAtDQogICAgLS8qIE5vIHNlbWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0
IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1pbmF0ZSgpOyIgLQ0KICAgIC0gKiB3ZSBkb24ndCB3
YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIgYmVjYXVzZSB0aGF0IHdpbGwgY2F1
c2UNCiAgICAtICogc29tZSBjb21waWxlcnMgdG8gY29tcGxhaW4gYWJvdXQgdW5yZWFjaGFibGUg
c3RhdGVtZW50cy4NCiAgICAtICovDQogICAgLSNpZm5kZWYgeXl0ZXJtaW5hdGUNCiAgICAtI2Rl
ZmluZSB5eXRlcm1pbmF0ZSgpIHJldHVybiBZWV9OVUxMDQogICAgLSNlbmRpZg0KICAgIC0NCiAg
ICAtLyogTnVtYmVyIG9mIGVudHJpZXMgYnkgd2hpY2ggc3RhcnQtY29uZGl0aW9uIHN0YWNrIGdy
b3dzLiAqLw0KICAgIC0jaWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1INCiAgICAtI2RlZmluZSBZ
WV9TVEFSVF9TVEFDS19JTkNSIDI1DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtLyogUmVwb3J0
IGEgZmF0YWwgZXJyb3IuICovDQogICAgLSNpZm5kZWYgWVlfRkFUQUxfRVJST1INCiAgICAtI2Rl
ZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cgKQ0KICAgIC0jZW5k
aWYNCiAgICAtDQogICAgLS8qIGVuZCB0YWJsZXMgc2VyaWFsaXphdGlvbiBzdHJ1Y3R1cmVzIGFu
ZCBwcm90b3R5cGVzICovDQogICAgLQ0KICAgIC0vKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdl
bmVyYXRlZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuDQogICAgLSAqIGVhc2ls
eSBhZGQgcGFyYW1ldGVycy4NCiAgICAtICovDQogICAgLSNpZm5kZWYgWVlfREVDTA0KICAgIC0j
ZGVmaW5lIFlZX0RFQ0xfSVNfT1VSUyAxDQogICAgLQ0KICAgIC1leHRlcm4gaW50IHl5bGV4ICh2
b2lkKTsNCiAgICAtDQogICAgLSNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXggKHZvaWQpDQogICAg
LSNlbmRpZiAvKiAhWVlfREVDTCAqLw0KICAgIC0NCiAgICAtLyogQ29kZSBleGVjdXRlZCBhdCB0
aGUgYmVnaW5uaW5nIG9mIGVhY2ggcnVsZSwgYWZ0ZXIgeXl0ZXh0IGFuZCB5eWxlbmcNCiAgICAt
ICogaGF2ZSBiZWVuIHNldCB1cC4NCiAgICAtICovDQogICAgLSNpZm5kZWYgWVlfVVNFUl9BQ1RJ
T04NCiAgICAtI2RlZmluZSBZWV9VU0VSX0FDVElPTg0KICAgIC0jZW5kaWYNCiAgICAtDQogICAg
LS8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNoIHJ1bGUuICovDQogICAgLSNpZm5k
ZWYgWVlfQlJFQUsNCiAgICAtI2RlZmluZSBZWV9CUkVBSyAvKkxJTlRFRCovYnJlYWs7DQogICAg
LSNlbmRpZg0KICAgIC0NCiAgICAtI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwNCiAgICAtCVlZX1VT
RVJfQUNUSU9ODQogICAgLQ0KICAgIC0vKiogVGhlIG1haW4gc2Nhbm5lciBmdW5jdGlvbiB3aGlj
aCBkb2VzIGFsbCB0aGUgd29yay4NCiAgICAtICovDQogICAgLVlZX0RFQ0wNCiAgICAtew0KICAg
IC0JeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOw0KICAgIC0JY2hhciAqeXlfY3AsICp5
eV9icDsNCiAgICAtCWludCB5eV9hY3Q7DQogICAgLSAgICANCiAgICAtCWlmICggISh5eV9pbml0
KSApDQogICAgLQkJew0KICAgIC0JCSh5eV9pbml0KSA9IDE7DQogICAgLQ0KICAgIC0jaWZkZWYg
WVlfVVNFUl9JTklUDQogICAgLQkJWVlfVVNFUl9JTklUOw0KICAgIC0jZW5kaWYNCiAgICAtDQog
ICAgLQkJaWYgKCAhICh5eV9zdGFydCkgKQ0KICAgIC0JCQkoeXlfc3RhcnQpID0gMTsJLyogZmly
c3Qgc3RhcnQgc3RhdGUgKi8NCiAgICAtDQogICAgLQkJaWYgKCAhIHl5aW4gKQ0KICAgIC0JCQl5
eWluID0gc3RkaW47DQogICAgLQ0KICAgIC0JCWlmICggISB5eW91dCApDQogICAgLQkJCXl5b3V0
ID0gc3Rkb3V0Ow0KICAgIC0NCiAgICAtCQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKSB7DQog
ICAgLQkJCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsNCiAgICAtCQkJWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFID0NCiAgICAtCQkJCXl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAp
Ow0KICAgIC0JCX0NCiAgICAtDQogICAgLQkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7DQogICAg
LQkJfQ0KICAgIC0NCiAgICAtCXsNCiAgICAtDQogICAgLQlpbnQgc3RyID0gMDsNCiAgICAtCWlu
dCB0cywgaTsNCiAgICAtDQogICAgLQl3aGlsZSAoIC8qQ09OU1RDT05EKi8xICkJCS8qIGxvb3Bz
IHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8NCiAgICAtCQl7DQogICAgLQkJeXlfY3Ag
PSAoeXlfY19idWZfcCk7DQogICAgLQ0KICAgIC0JCS8qIFN1cHBvcnQgb2YgeXl0ZXh0LiAqLw0K
ICAgIC0JCSp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOw0KICAgIC0NCiAgICAtCQkvKiB5eV9icCBw
b2ludHMgdG8gdGhlIHBvc2l0aW9uIGluIHl5X2NoX2J1ZiBvZiB0aGUgc3RhcnQgb2YNCiAgICAt
CQkgKiB0aGUgY3VycmVudCBydW4uDQogICAgLQkJICovDQogICAgLQkJeXlfYnAgPSB5eV9jcDsN
CiAgICAtDQogICAgLQkJeXlfY3VycmVudF9zdGF0ZSA9ICh5eV9zdGFydCk7DQogICAgLXl5X21h
dGNoOg0KICAgIC0JCXdoaWxlICggKHl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3VycmVu
dF9zdGF0ZV1bIHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldICBdKSA+IDAgKQ0KICAgIC0JCQkr
K3l5X2NwOw0KICAgIC0NCiAgICAtCQl5eV9jdXJyZW50X3N0YXRlID0gLXl5X2N1cnJlbnRfc3Rh
dGU7DQogICAgLQ0KICAgIC15eV9maW5kX2FjdGlvbjoNCiAgICAtCQl5eV9hY3QgPSB5eV9hY2Nl
cHRbeXlfY3VycmVudF9zdGF0ZV07DQogICAgLQ0KICAgIC0JCVlZX0RPX0JFRk9SRV9BQ1RJT047
DQogICAgLQ0KICAgIC0JCWlmICggeXlfYWN0ICE9IFlZX0VORF9PRl9CVUZGRVIgJiYgeXlfcnVs
ZV9jYW5fbWF0Y2hfZW9sW3l5X2FjdF0gKQ0KICAgIC0JCQl7DQogICAgLQkJCWludCB5eWw7DQog
ICAgLQkJCWZvciAoIHl5bCA9IDA7IHl5bCA8IHl5bGVuZzsgKyt5eWwgKQ0KICAgIC0JCQkJaWYg
KCB5eXRleHRbeXlsXSA9PSAnXG4nICkNCiAgICAtCQkJCQkNCiAgICAtICAgIHl5bGluZW5vKys7
DQogICAgLTsNCiAgICAtCQkJfQ0KICAgIC0NCiAgICAtZG9fYWN0aW9uOgkvKiBUaGlzIGxhYmVs
IGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovDQogICAgLQ0KICAgIC0JCXN3
aXRjaCAoIHl5X2FjdCApDQogICAgLQl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICov
DQogICAgLWNhc2UgMToNCiAgICAtLyogcnVsZSAxIGNhbiBtYXRjaCBlb2wgKi8NCiAgICAtY2Fz
ZSAyOg0KICAgIC0vKiBydWxlIDIgY2FuIG1hdGNoIGVvbCAqLw0KICAgIC1ZWV9SVUxFX1NFVFVQ
DQogICAgLXsNCiAgICAtCXJldHVybiBUX0VPTDsNCiAgICAtfQ0KICAgIC0JWVlfQlJFQUsNCiAg
ICAtY2FzZSAzOg0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLQ0KICAgIC0JWVlfQlJFQUsNCiAg
ICAtY2FzZSA0Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCUJFR0lOKENPTU1B
TkQpOw0KICAgIC19DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDU6DQogICAgLVlZX1JVTEVf
U0VUVVANCiAgICAtew0KICAgIC0JdW5wdXQoeXl0ZXh0WzBdKTsNCiAgICAtCUJFR0lOKENPTU1B
TkQpOw0KICAgIC19DQogICAgLQlZWV9CUkVBSw0KICAgIC0NCiAgICAtY2FzZSA2Og0KICAgIC1Z
WV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0g
a2NvbmZfaWRfbG9va3VwKHl5dGV4dCwgeXlsZW5nKTsNCiAgICAtCQljdXJyZW50X3Bvcy5maWxl
ID0gY3VycmVudF9maWxlOw0KICAgIC0JCWN1cnJlbnRfcG9zLmxpbmVubyA9IHl5bGluZW5vOw0K
ICAgIC0JCWlmIChpZCAmJiBpZC0+ZmxhZ3MgJiBURl9DT01NQU5EKSB7DQogICAgLQkJCUJFR0lO
KFBBUkFNKTsNCiAgICAtCQkJeXlsdmFsLmlkID0gaWQ7DQogICAgLQkJCXJldHVybiBpZC0+dG9r
ZW47DQogICAgLQkJfQ0KICAgIC0JCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7DQogICAg
LQkJeXlsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgLQkJcmV0dXJuIFRfVkFSSUFCTEU7DQogICAg
LQl9DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDc6DQogICAgLVlZX1JVTEVfU0VUVVANCiAg
ICAtew0KICAgIC0JCS8qIHRoaXMgdG9rZW4gaW5jbHVkZXMgYXQgbGVhc3Qgb25lICckJyAqLw0K
ICAgIC0JCXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxlbmcpOw0KICAg
IC0JCWlmIChzdHJsZW4oeXlsdmFsLnN0cmluZykpDQogICAgLQkJCXJldHVybiBUX1ZBUklBQkxF
Ow0KICAgIC0JCWZyZWUoeXlsdmFsLnN0cmluZyk7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0K
ICAgIC1jYXNlIDg6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAteyBCRUdJTihBU1NJR05fVkFM
KTsgeXlsdmFsLmZsYXZvciA9IFZBUl9SRUNVUlNJVkU7IHJldHVybiBUX0FTU0lHTjsgfQ0KICAg
IC0JWVlfQlJFQUsNCiAgICAtY2FzZSA5Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsgQkVH
SU4oQVNTSUdOX1ZBTCk7IHl5bHZhbC5mbGF2b3IgPSBWQVJfU0lNUExFOyByZXR1cm4gVF9BU1NJ
R047IH0NCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMTA6DQogICAgLVlZX1JVTEVfU0VUVVAN
CiAgICAteyBCRUdJTihBU1NJR05fVkFMKTsgeXlsdmFsLmZsYXZvciA9IFZBUl9BUFBFTkQ7IHJl
dHVybiBUX0FTU0lHTjsgfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAxMToNCiAgICAtWVlf
UlVMRV9TRVRVUA0KICAgIC0NCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMTI6DQogICAgLVlZ
X1JVTEVfU0VUVVANCiAgICAtd2Fybl9pZ25vcmVkX2NoYXJhY3RlcigqeXl0ZXh0KTsNCiAgICAt
CVlZX0JSRUFLDQogICAgLWNhc2UgMTM6DQogICAgLS8qIHJ1bGUgMTMgY2FuIG1hdGNoIGVvbCAq
Lw0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQlCRUdJTihJTklUSUFMKTsNCiAg
ICAtCQlyZXR1cm4gVF9FT0w7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0KICAgIC0NCiAgICAt
Y2FzZSAxNDoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC17DQogICAgLQkJYWxsb2Nfc3RyaW5n
KHl5dGV4dCwgeXlsZW5nKTsNCiAgICAtCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICAtCQly
ZXR1cm4gVF9BU1NJR05fVkFMOw0KICAgIC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAx
NToNCiAgICAtLyogcnVsZSAxNSBjYW4gbWF0Y2ggZW9sICovDQogICAgLVlZX1JVTEVfU0VUVVAN
CiAgICAteyBCRUdJTihJTklUSUFMKTsgcmV0dXJuIFRfRU9MOyB9DQogICAgLQlZWV9CUkVBSw0K
ICAgIC1jYXNlIDE2Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLQ0KICAgIC0JWVlfQlJFQUsN
CiAgICAtDQogICAgLWNhc2UgMTc6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtcmV0dXJuIFRf
QU5EOw0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSAxODoNCiAgICAtWVlfUlVMRV9TRVRVUA0K
ICAgIC1yZXR1cm4gVF9PUjsNCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMTk6DQogICAgLVlZ
X1JVTEVfU0VUVVANCiAgICAtcmV0dXJuIFRfT1BFTl9QQVJFTjsNCiAgICAtCVlZX0JSRUFLDQog
ICAgLWNhc2UgMjA6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtcmV0dXJuIFRfQ0xPU0VfUEFS
RU47DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDIxOg0KICAgIC1ZWV9SVUxFX1NFVFVQDQog
ICAgLXJldHVybiBUX05PVDsNCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMjI6DQogICAgLVlZ
X1JVTEVfU0VUVVANCiAgICAtcmV0dXJuIFRfRVFVQUw7DQogICAgLQlZWV9CUkVBSw0KICAgIC1j
YXNlIDIzOg0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXJldHVybiBUX1VORVFVQUw7DQogICAg
LQlZWV9CUkVBSw0KICAgIC1jYXNlIDI0Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXJldHVy
biBUX0xFU1NfRVFVQUw7DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDI1Og0KICAgIC1ZWV9S
VUxFX1NFVFVQDQogICAgLXJldHVybiBUX0dSRUFURVJfRVFVQUw7DQogICAgLQlZWV9CUkVBSw0K
ICAgIC1jYXNlIDI2Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXJldHVybiBUX0xFU1M7DQog
ICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDI3Og0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXJl
dHVybiBUX0dSRUFURVI7DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDI4Og0KICAgIC1ZWV9S
VUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQlzdHIgPSB5eXRleHRbMF07DQogICAgLQkJbmV3X3N0
cmluZygpOw0KICAgIC0JCUJFR0lOKFNUUklORyk7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0K
ICAgIC1jYXNlIDI5Og0KICAgIC0vKiBydWxlIDI5IGNhbiBtYXRjaCBlb2wgKi8NCiAgICAtWVlf
UlVMRV9TRVRVUA0KICAgIC1CRUdJTihJTklUSUFMKTsgcmV0dXJuIFRfRU9MOw0KICAgIC0JWVlf
QlJFQUsNCiAgICAtY2FzZSAzMDoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC17DQogICAgLQkJ
Y29uc3Qgc3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCh5eXRleHQsIHl5bGVu
Zyk7DQogICAgLQkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX1BBUkFNKSB7DQogICAgLQkJCXl5
bHZhbC5pZCA9IGlkOw0KICAgIC0JCQlyZXR1cm4gaWQtPnRva2VuOw0KICAgIC0JCX0NCiAgICAt
CQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0KICAgIC0JCXl5bHZhbC5zdHJpbmcgPSB0
ZXh0Ow0KICAgIC0JCXJldHVybiBUX1dPUkQ7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0KICAg
IC1jYXNlIDMxOg0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQkvKiB0aGlzIHRv
a2VuIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAnJCcgKi8NCiAgICAtCQl5eWx2YWwuc3RyaW5nID0g
ZXhwYW5kX3Rva2VuKHl5dGV4dCwgeXlsZW5nKTsNCiAgICAtCQlpZiAoc3RybGVuKHl5bHZhbC5z
dHJpbmcpKQ0KICAgIC0JCQlyZXR1cm4gVF9XT1JEOw0KICAgIC0JCWZyZWUoeXlsdmFsLnN0cmlu
Zyk7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDMyOg0KICAgIC1ZWV9SVUxF
X1NFVFVQDQogICAgLS8qIGNvbW1lbnQgKi8NCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMzM6
DQogICAgLS8qIHJ1bGUgMzMgY2FuIG1hdGNoIGVvbCAqLw0KICAgIC1ZWV9SVUxFX1NFVFVQDQog
ICAgLTsNCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMzQ6DQogICAgLVlZX1JVTEVfU0VUVVAN
CiAgICAtDQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDM1Og0KICAgIC1ZWV9SVUxFX1NFVFVQ
DQogICAgLXdhcm5faWdub3JlZF9jaGFyYWN0ZXIoKnl5dGV4dCk7DQogICAgLQlZWV9CUkVBSw0K
ICAgIC1jYXNlIFlZX1NUQVRFX0VPRihQQVJBTSk6DQogICAgLXsNCiAgICAtCQlCRUdJTihJTklU
SUFMKTsNCiAgICAtCX0NCiAgICAtCVlZX0JSRUFLDQogICAgLQ0KICAgIC1jYXNlIDM2Og0KICAg
IC1ZWV9SVUxFX1NFVFVQDQogICAgLWFwcGVuZF9leHBhbmRlZF9zdHJpbmcoeXl0ZXh0KTsNCiAg
ICAtCVlZX0JSRUFLDQogICAgLWNhc2UgMzc6DQogICAgLS8qIHJ1bGUgMzcgY2FuIG1hdGNoIGVv
bCAqLw0KICAgIC0qeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3RzIG9mIHNl
dHRpbmcgdXAgeXl0ZXh0ICovDQogICAgLVlZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3AgLSAxKTsN
CiAgICAtKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsNCiAgICAtWVlfRE9fQkVGT1JFX0FDVElP
TjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLw0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsN
CiAgICAtCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsNCiAgICAtCQl5eWx2YWwuc3Ry
aW5nID0gdGV4dDsNCiAgICAtCQlyZXR1cm4gVF9XT1JEX1FVT1RFOw0KICAgIC0JfQ0KICAgIC0J
WVlfQlJFQUsNCiAgICAtY2FzZSAzODoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC17DQogICAg
LQkJYXBwZW5kX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7DQogICAgLQl9DQogICAgLQlZWV9CUkVB
Sw0KICAgIC1jYXNlIDM5Og0KICAgIC0vKiBydWxlIDM5IGNhbiBtYXRjaCBlb2wgKi8NCiAgICAt
Knl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dCAqLw0KICAgIC1ZWV9MSU5FTk9fUkVXSU5EX1RPKHl5X2NwIC0gMSk7DQogICAgLSh5eV9j
X2J1Zl9wKSA9IHl5X2NwIC09IDE7DQogICAgLVlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1
cCB5eXRleHQgYWdhaW4gKi8NCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC17DQogICAgLQkJYXBw
ZW5kX3N0cmluZyh5eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsNCiAgICAtCQl5eWx2YWwuc3RyaW5n
ID0gdGV4dDsNCiAgICAtCQlyZXR1cm4gVF9XT1JEX1FVT1RFOw0KICAgIC0JfQ0KICAgIC0JWVlf
QlJFQUsNCiAgICAtY2FzZSA0MDoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC17DQogICAgLQkJ
YXBwZW5kX3N0cmluZyh5eXRleHQgKyAxLCB5eWxlbmcgLSAxKTsNCiAgICAtCX0NCiAgICAtCVlZ
X0JSRUFLDQogICAgLWNhc2UgNDE6DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtew0KICAgIC0J
CWlmIChzdHIgPT0geXl0ZXh0WzBdKSB7DQogICAgLQkJCUJFR0lOKFBBUkFNKTsNCiAgICAtCQkJ
eXlsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgLQkJCXJldHVybiBUX1dPUkRfUVVPVEU7DQogICAg
LQkJfSBlbHNlDQogICAgLQkJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCAxKTsNCiAgICAtCX0NCiAg
ICAtCVlZX0JSRUFLDQogICAgLWNhc2UgNDI6DQogICAgLS8qIHJ1bGUgNDIgY2FuIG1hdGNoIGVv
bCAqLw0KICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQlmcHJpbnRmKHN0ZGVyciwN
CiAgICAtCQkJIiVzOiVkOndhcm5pbmc6IG11bHRpLWxpbmUgc3RyaW5ncyBub3Qgc3VwcG9ydGVk
XG4iLA0KICAgIC0JCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtCQlC
RUdJTihJTklUSUFMKTsNCiAgICAtCQlyZXR1cm4gVF9FT0w7DQogICAgLQl9DQogICAgLQlZWV9C
UkVBSw0KICAgIC1jYXNlIFlZX1NUQVRFX0VPRihTVFJJTkcpOg0KICAgIC17DQogICAgLQkJQkVH
SU4oSU5JVElBTCk7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0KICAgIC0NCiAgICAtY2FzZSA0
MzoNCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC17DQogICAgLQkJdHMgPSAwOw0KICAgIC0JCWZv
ciAoaSA9IDA7IGkgPCB5eWxlbmc7IGkrKykgew0KICAgIC0JCQlpZiAoeXl0ZXh0W2ldID09ICdc
dCcpDQogICAgLQkJCQl0cyA9ICh0cyAmIH43KSArIDg7DQogICAgLQkJCWVsc2UNCiAgICAtCQkJ
CXRzKys7DQogICAgLQkJfQ0KICAgIC0JCWxhc3RfdHMgPSB0czsNCiAgICAtCQlpZiAoZmlyc3Rf
dHMpIHsNCiAgICAtCQkJaWYgKHRzIDwgZmlyc3RfdHMpIHsNCiAgICAtCQkJCXpjb25mX2VuZGhl
bHAoKTsNCiAgICAtCQkJCXJldHVybiBUX0hFTFBURVhUOw0KICAgIC0JCQl9DQogICAgLQkJCXRz
IC09IGZpcnN0X3RzOw0KICAgIC0JCQl3aGlsZSAodHMgPiA4KSB7DQogICAgLQkJCQlhcHBlbmRf
c3RyaW5nKCIgICAgICAgICIsIDgpOw0KICAgIC0JCQkJdHMgLT0gODsNCiAgICAtCQkJfQ0KICAg
IC0JCQlhcHBlbmRfc3RyaW5nKCIgICAgICAgICIsIHRzKTsNCiAgICAtCQl9DQogICAgLQl9DQog
ICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDQ0Og0KICAgIC0vKiBydWxlIDQ0IGNhbiBtYXRjaCBl
b2wgKi8NCiAgICAtKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7IC8qIHVuZG8gZWZmZWN0cyBvZiBz
ZXR0aW5nIHVwIHl5dGV4dCAqLw0KICAgIC1ZWV9MSU5FTk9fUkVXSU5EX1RPKHl5X2NwIC0gMSk7
DQogICAgLSh5eV9jX2J1Zl9wKSA9IHl5X2NwIC09IDE7DQogICAgLVlZX0RPX0JFRk9SRV9BQ1RJ
T047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8NCiAgICAtWVlfUlVMRV9TRVRVUA0KICAgIC17
DQogICAgLQkJemNvbmZfZW5kaGVscCgpOw0KICAgIC0JCXJldHVybiBUX0hFTFBURVhUOw0KICAg
IC0JfQ0KICAgIC0JWVlfQlJFQUsNCiAgICAtY2FzZSA0NToNCiAgICAtLyogcnVsZSA0NSBjYW4g
bWF0Y2ggZW9sICovDQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtew0KICAgIC0JCWFwcGVuZF9z
dHJpbmcoIlxuIiwgMSk7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0KICAgIC1jYXNlIDQ2Og0K
ICAgIC1ZWV9SVUxFX1NFVFVQDQogICAgLXsNCiAgICAtCQl3aGlsZSAoeXlsZW5nKSB7DQogICAg
LQkJCWlmICgoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnICcpICYmICh5eXRleHRbeXlsZW5nLTFdICE9
ICdcdCcpKQ0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCXl5bGVuZy0tOw0KICAgIC0JCX0NCiAg
ICAtCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsNCiAgICAtCQlpZiAoIWZpcnN0X3Rz
KQ0KICAgIC0JCQlmaXJzdF90cyA9IGxhc3RfdHM7DQogICAgLQl9DQogICAgLQlZWV9CUkVBSw0K
ICAgIC1jYXNlIFlZX1NUQVRFX0VPRihIRUxQKToNCiAgICAtew0KICAgIC0JCXpjb25mX2VuZGhl
bHAoKTsNCiAgICAtCQlyZXR1cm4gVF9IRUxQVEVYVDsNCiAgICAtCX0NCiAgICAtCVlZX0JSRUFL
DQogICAgLQ0KICAgIC1jYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToNCiAgICAtY2FzZSBZWV9T
VEFURV9FT0YoQ09NTUFORCk6DQogICAgLWNhc2UgWVlfU1RBVEVfRU9GKEFTU0lHTl9WQUwpOg0K
ICAgIC17DQogICAgLQlpZiAoY3VycmVudF9maWxlKSB7DQogICAgLQkJemNvbmZfZW5kZmlsZSgp
Ow0KICAgIC0JCXJldHVybiBUX0VPTDsNCiAgICAtCX0NCiAgICAtCWZjbG9zZSh5eWluKTsNCiAg
ICAtCXl5dGVybWluYXRlKCk7DQogICAgLX0NCiAgICAtCVlZX0JSRUFLDQogICAgLWNhc2UgNDc6
DQogICAgLVlZX1JVTEVfU0VUVVANCiAgICAtWVlfRkFUQUxfRVJST1IoICJmbGV4IHNjYW5uZXIg
amFtbWVkIiApOw0KICAgIC0JWVlfQlJFQUsNCiAgICAtDQogICAgLQljYXNlIFlZX0VORF9PRl9C
VUZGRVI6DQogICAgLQkJew0KICAgIC0JCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGlu
Y2x1ZGluZyB0aGUgRU9CIGNoYXIuICovDQogICAgLQkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVk
X3RleHQgPSAoaW50KSAoeXlfY3AgLSAoeXl0ZXh0X3B0cikpIC0gMTsNCiAgICAtDQogICAgLQkJ
LyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9ET19CRUZPUkVfQUNUSU9OLiAqLw0KICAgIC0JCSp5
eV9jcCA9ICh5eV9ob2xkX2NoYXIpOw0KICAgIC0JCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQN
CiAgICAtDQogICAgLQkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9z
dGF0dXMgPT0gWVlfQlVGRkVSX05FVyApDQogICAgLQkJCXsNCiAgICAtCQkJLyogV2UncmUgc2Nh
bm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzDQogICAgLQkJCSAqIHBvc3Np
YmxlIHRoYXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyDQogICAgLQkJCSAqIGp1c3Qg
cG9pbnRlZCB5eWluIGF0IGEgbmV3IHNvdXJjZSBhbmQgY2FsbGVkDQogICAgLQkJCSAqIHl5bGV4
KCkuICBJZiBzbywgdGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQ0KICAgIC0JCQkgKiBjb25zaXN0ZW5j
eSBiZXR3ZWVuIFlZX0NVUlJFTlRfQlVGRkVSIGFuZCBvdXINCiAgICAtCQkJICogZ2xvYmFscy4g
IEhlcmUgaXMgdGhlIHJpZ2h0IHBsYWNlIHRvIGRvIHNvLCBiZWNhdXNlDQogICAgLQkJCSAqIHRo
aXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3RoZXIgdGhhbiBwb3NzaWJseSBhDQogICAgLQkJCSAq
IGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5ldyBpbnB1dCBzb3VyY2UuDQogICAg
LQkJCSAqLw0KICAgIC0JCQkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUt
Pnl5X25fY2hhcnM7DQogICAgLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaW5wdXRf
ZmlsZSA9IHl5aW47DQogICAgLQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9IFlZX0JVRkZFUl9OT1JNQUw7DQogICAgLQkJCX0NCiAgICAtDQogICAgLQkJLyog
Tm90ZSB0aGF0IGhlcmUgd2UgdGVzdCBmb3IgeXlfY19idWZfcCAiPD0iIHRvIHRoZSBwb3NpdGlv
bg0KICAgIC0JCSAqIG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19i
dWZfcCB3aWxsDQogICAgLQkJICogYWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0
aGUgTlVMIGNoYXJhY3Rlcg0KICAgIC0JCSAqIChzaW5jZSBhbGwgc3RhdGVzIG1ha2UgdHJhbnNp
dGlvbnMgb24gRU9CIHRvIHRoZQ0KICAgIC0JCSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29u
dHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0DQogICAgLQkJICogaW4gaW5wdXQoKS4NCiAgICAtCQkg
Ki8NCiAgICAtCQlpZiAoICh5eV9jX2J1Zl9wKSA8PSAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApDQogICAgLQkJCXsgLyogVGhpcyB3YXMgcmVhbGx5
IGEgTlVMLiAqLw0KICAgIC0JCQl5eV9zdGF0ZV90eXBlIHl5X25leHRfc3RhdGU7DQogICAgLQ0K
ICAgIC0JCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hl
ZF90ZXh0Ow0KICAgIC0NCiAgICAtCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91
c19zdGF0ZSggICk7DQogICAgLQ0KICAgIC0JCQkvKiBPa2F5LCB3ZSdyZSBub3cgcG9zaXRpb25l
ZCB0byBtYWtlIHRoZSBOVUwNCiAgICAtCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhh
dmUNCiAgICAtCQkJICogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0
DQogICAgLQkJCSAqIGZvciB1cyBiZWNhdXNlIGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVhbA0K
ICAgIC0JCQkgKiB3aXRoIHRoZSBwb3NzaWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QN
CiAgICAtCQkJICogd2FudCB0byBidWlsZCBqYW1taW5nIGludG8gaXQgYmVjYXVzZSB0aGVuIGl0
DQogICAgLQkJCSAqIHdpbGwgcnVuIG1vcmUgc2xvd2x5KS4NCiAgICAtCQkJICovDQogICAgLQ0K
ICAgIC0JCQl5eV9uZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggeXlfY3VycmVudF9zdGF0
ZSApOw0KICAgIC0NCiAgICAtCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZWV9NT1JFX0FESjsN
CiAgICAtDQogICAgLQkJCWlmICggeXlfbmV4dF9zdGF0ZSApDQogICAgLQkJCQl7DQogICAgLQkJ
CQkvKiBDb25zdW1lIHRoZSBOVUwuICovDQogICAgLQkJCQl5eV9jcCA9ICsrKHl5X2NfYnVmX3Ap
Ow0KICAgIC0JCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7DQogICAgLQkJCQln
b3RvIHl5X21hdGNoOw0KICAgIC0JCQkJfQ0KICAgIC0NCiAgICAtCQkJZWxzZQ0KICAgIC0JCQkJ
ew0KICAgIC0JCQkJeXlfY3AgPSAoeXlfY19idWZfcCk7DQogICAgLQkJCQlnb3RvIHl5X2ZpbmRf
YWN0aW9uOw0KICAgIC0JCQkJfQ0KICAgIC0JCQl9DQogICAgLQ0KICAgIC0JCWVsc2Ugc3dpdGNo
ICggeXlfZ2V0X25leHRfYnVmZmVyKCAgKSApDQogICAgLQkJCXsNCiAgICAtCQkJY2FzZSBFT0Jf
QUNUX0VORF9PRl9GSUxFOg0KICAgIC0JCQkJew0KICAgIC0JCQkJKHl5X2RpZF9idWZmZXJfc3dp
dGNoX29uX2VvZikgPSAwOw0KICAgIC0NCiAgICAtCQkJCWlmICggeXl3cmFwKCApICkNCiAgICAt
CQkJCQl7DQogICAgLQkJCQkJLyogTm90ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluDQog
ICAgLQkJCQkJICogeXlfZ2V0X25leHRfYnVmZmVyKCkgdG8gaGF2ZSBzZXQgdXANCiAgICAtCQkJ
CQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVwDQogICAgLQkJCQkJICogeXlfY19idWZfcCBz
byB0aGF0IGlmIHNvbWUgdG90YWwNCiAgICAtCQkJCQkgKiBob3NlciAobGlrZSBmbGV4IGl0c2Vs
Zikgd2FudHMgdG8NCiAgICAtCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFmdGVyIHdlIHJldHVy
biB0aGUNCiAgICAtCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhlcg0K
ICAgIC0JCQkJCSAqIFlZX05VTEwgd2lsbCBnZXQgcmV0dXJuZWQuDQogICAgLQkJCQkJICovDQog
ICAgLQkJCQkJKHl5X2NfYnVmX3ApID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7DQogICAg
LQ0KICAgIC0JCQkJCXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7DQogICAgLQkJCQkJ
Z290byBkb19hY3Rpb247DQogICAgLQkJCQkJfQ0KICAgIC0NCiAgICAtCQkJCWVsc2UNCiAgICAt
CQkJCQl7DQogICAgLQkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkN
CiAgICAtCQkJCQkJWVlfTkVXX0ZJTEU7DQogICAgLQkJCQkJfQ0KICAgIC0JCQkJYnJlYWs7DQog
ICAgLQkJCQl9DQogICAgLQ0KICAgIC0JCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoNCiAg
ICAtCQkJCSh5eV9jX2J1Zl9wKSA9DQogICAgLQkJCQkJKHl5dGV4dF9wdHIpICsgeXlfYW1vdW50
X29mX21hdGNoZWRfdGV4dDsNCiAgICAtDQogICAgLQkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsNCiAgICAtDQogICAgLQkJCQl5eV9jcCA9ICh5eV9jX2J1
Zl9wKTsNCiAgICAtCQkJCXl5X2JwID0gKHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7DQogICAg
LQkJCQlnb3RvIHl5X21hdGNoOw0KICAgIC0NCiAgICAtCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFU
Q0g6DQogICAgLQkJCQkoeXlfY19idWZfcCkgPQ0KICAgIC0JCQkJJllZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV07DQogICAgLQ0KICAgIC0JCQkJeXlfY3Vy
cmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggICk7DQogICAgLQ0KICAgIC0JCQkJ
eXlfY3AgPSAoeXlfY19idWZfcCk7DQogICAgLQkJCQl5eV9icCA9ICh5eXRleHRfcHRyKSArIFlZ
X01PUkVfQURKOw0KICAgIC0JCQkJZ290byB5eV9maW5kX2FjdGlvbjsNCiAgICAtCQkJfQ0KICAg
IC0JCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQlkZWZhdWx0Og0KICAgIC0JCVlZX0ZB
VEFMX0VSUk9SKA0KICAgIC0JCQkiZmF0YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1u
byBhY3Rpb24gZm91bmQiICk7DQogICAgLQl9IC8qIGVuZCBvZiBhY3Rpb24gc3dpdGNoICovDQog
ICAgLQkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovDQogICAgLQl9IC8qIGVuZCBv
ZiB1c2VyJ3MgZGVjbGFyYXRpb25zICovDQogICAgLX0gLyogZW5kIG9mIHl5bGV4ICovDQogICAg
LQ0KICAgIC0vKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBhIG5ldyBidWZm
ZXINCiAgICAtICoNCiAgICAtICogUmV0dXJucyBhIGNvZGUgcmVwcmVzZW50aW5nIGFuIGFjdGlv
bjoNCiAgICAtICoJRU9CX0FDVF9MQVNUX01BVENIIC0NCiAgICAtICoJRU9CX0FDVF9DT05USU5V
RV9TQ0FOIC0gY29udGludWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uDQogICAgLSAq
CUVPQl9BQ1RfRU5EX09GX0ZJTEUgLSBlbmQgb2YgZmlsZQ0KICAgIC0gKi8NCiAgICAtc3RhdGlj
IGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQpDQogICAgLXsNCiAgICAtICAgIAljaGFyICpk
ZXN0ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWY7DQogICAgLQljaGFyICpz
b3VyY2UgPSAoeXl0ZXh0X3B0cik7DQogICAgLQlpbnQgbnVtYmVyX3RvX21vdmUsIGk7DQogICAg
LQlpbnQgcmV0X3ZhbDsNCiAgICAtDQogICAgLQlpZiAoICh5eV9jX2J1Zl9wKSA+ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSApDQogICAgLQkJ
WVlfRkFUQUxfRVJST1IoDQogICAgLQkJImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJv
ci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQiICk7DQogICAgLQ0KICAgIC0JaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2ZpbGxfYnVmZmVyID09IDAgKQ0KICAgIC0JCXsgLyogRG9uJ3Qg
dHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBFT0YuICovDQogICAgLQkJaWYg
KCAoeXlfY19idWZfcCkgLSAoeXl0ZXh0X3B0cikgLSBZWV9NT1JFX0FESiA9PSAxICkNCiAgICAt
CQkJew0KICAgIC0JCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3RlciwgdGhlIEVPQiwg
c28NCiAgICAtCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4NCiAgICAtCQkJICovDQog
ICAgLQkJCXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOw0KICAgIC0JCQl9DQogICAgLQ0KICAg
IC0JCWVsc2UNCiAgICAtCQkJew0KICAgIC0JCQkvKiBXZSBtYXRjaGVkIHNvbWUgdGV4dCBwcmlv
ciB0byB0aGUgRU9CLCBmaXJzdA0KICAgIC0JCQkgKiBwcm9jZXNzIGl0Lg0KICAgIC0JCQkgKi8N
CiAgICAtCQkJcmV0dXJuIEVPQl9BQ1RfTEFTVF9NQVRDSDsNCiAgICAtCQkJfQ0KICAgIC0JCX0N
CiAgICAtDQogICAgLQkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovDQogICAgLQ0KICAgIC0J
LyogRmlyc3QgbW92ZSBsYXN0IGNoYXJzIHRvIHN0YXJ0IG9mIGJ1ZmZlci4gKi8NCiAgICAtCW51
bWJlcl90b19tb3ZlID0gKGludCkgKCh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAtIDEpOw0K
ICAgIC0NCiAgICAtCWZvciAoIGkgPSAwOyBpIDwgbnVtYmVyX3RvX21vdmU7ICsraSApDQogICAg
LQkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7DQogICAgLQ0KICAgIC0JaWYgKCBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX0VPRl9QRU5ESU5H
ICkNCiAgICAtCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFudGVlZCB0byBy
ZXR1cm4gYW4gRU9GLA0KICAgIC0JCSAqIGp1c3QgZm9yY2UgYW4gRU9GDQogICAgLQkJICovDQog
ICAgLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0gKHl5X25fY2hhcnMp
ID0gMDsNCiAgICAtDQogICAgLQllbHNlDQogICAgLQkJew0KICAgIC0JCQlpbnQgbnVtX3RvX3Jl
YWQgPQ0KICAgIC0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0gbnVt
YmVyX3RvX21vdmUgLSAxOw0KICAgIC0NCiAgICAtCQl3aGlsZSAoIG51bV90b19yZWFkIDw9IDAg
KQ0KICAgIC0JCQl7IC8qIE5vdCBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyIC0gZ3JvdyBpdC4g
Ki8NCiAgICAtDQogICAgLQkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50
IGJ1ZmZlciAqLw0KICAgIC0JCQlZWV9CVUZGRVJfU1RBVEUgYiA9IFlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRTsNCiAgICAtDQogICAgLQkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9DQogICAgLQkJ
CQkoaW50KSAoKHl5X2NfYnVmX3ApIC0gYi0+eXlfY2hfYnVmKTsNCiAgICAtDQogICAgLQkJCWlm
ICggYi0+eXlfaXNfb3VyX2J1ZmZlciApDQogICAgLQkJCQl7DQogICAgLQkJCQlpbnQgbmV3X3Np
emUgPSBiLT55eV9idWZfc2l6ZSAqIDI7DQogICAgLQ0KICAgIC0JCQkJaWYgKCBuZXdfc2l6ZSA8
PSAwICkNCiAgICAtCQkJCQliLT55eV9idWZfc2l6ZSArPSBiLT55eV9idWZfc2l6ZSAvIDg7DQog
ICAgLQkJCQllbHNlDQogICAgLQkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsNCiAgICAtDQogICAg
LQkJCQliLT55eV9jaF9idWYgPSAoY2hhciAqKQ0KICAgIC0JCQkJCS8qIEluY2x1ZGUgcm9vbSBp
biBmb3IgMiBFT0IgY2hhcnMuICovDQogICAgLQkJCQkJeXlyZWFsbG9jKCh2b2lkICopIGItPnl5
X2NoX2J1ZixiLT55eV9idWZfc2l6ZSArIDIgICk7DQogICAgLQkJCQl9DQogICAgLQkJCWVsc2UN
CiAgICAtCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRvbid0IG93biBpdC4gKi8NCiAgICAtCQkJ
CWItPnl5X2NoX2J1ZiA9IE5VTEw7DQogICAgLQ0KICAgIC0JCQlpZiAoICEgYi0+eXlfY2hfYnVm
ICkNCiAgICAtCQkJCVlZX0ZBVEFMX0VSUk9SKA0KICAgIC0JCQkJImZhdGFsIGVycm9yIC0gc2Nh
bm5lciBpbnB1dCBidWZmZXIgb3ZlcmZsb3ciICk7DQogICAgLQ0KICAgIC0JCQkoeXlfY19idWZf
cCkgPSAmYi0+eXlfY2hfYnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsNCiAgICAtDQogICAgLQkJCW51
bV90b19yZWFkID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtDQogICAg
LQkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsNCiAgICAtDQogICAgLQkJCX0NCiAgICAtDQogICAg
LQkJaWYgKCBudW1fdG9fcmVhZCA+IFlZX1JFQURfQlVGX1NJWkUgKQ0KICAgIC0JCQludW1fdG9f
cmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7DQogICAgLQ0KICAgIC0JCS8qIFJlYWQgaW4gbW9yZSBk
YXRhLiAqLw0KICAgIC0JCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW251bWJlcl90b19tb3ZlXSksDQogICAgLQkJCSh5eV9uX2NoYXJzKSwgbnVtX3RvX3Jl
YWQgKTsNCiAgICAtDQogICAgLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0gKHl5X25fY2hhcnMpOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQlpZiAoICh5eV9uX2NoYXJz
KSA9PSAwICkNCiAgICAtCQl7DQogICAgLQkJaWYgKCBudW1iZXJfdG9fbW92ZSA9PSBZWV9NT1JF
X0FESiApDQogICAgLQkJCXsNCiAgICAtCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfRU5EX09GX0ZJTEU7
DQogICAgLQkJCXl5cmVzdGFydCh5eWluICApOw0KICAgIC0JCQl9DQogICAgLQ0KICAgIC0JCWVs
c2UNCiAgICAtCQkJew0KICAgIC0JCQlyZXRfdmFsID0gRU9CX0FDVF9MQVNUX01BVENIOw0KICAg
IC0JCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQ0KICAgIC0J
CQkJWVlfQlVGRkVSX0VPRl9QRU5ESU5HOw0KICAgIC0JCQl9DQogICAgLQkJfQ0KICAgIC0NCiAg
ICAtCWVsc2UNCiAgICAtCQlyZXRfdmFsID0gRU9CX0FDVF9DT05USU5VRV9TQ0FOOw0KICAgIC0N
CiAgICAtCWlmICgoKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUpID4gWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSkgew0KICAgIC0JCS8qIEV4dGVuZCB0aGUgYXJyYXkg
YnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQuICovDQogICAgLQkJaW50IG5l
d19zaXplID0gKHl5X25fY2hhcnMpICsgbnVtYmVyX3RvX21vdmUgKyAoKHl5X25fY2hhcnMpID4+
IDEpOw0KICAgIC0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmID0gKGNoYXIg
KikgeXlyZWFsbG9jKCh2b2lkICopIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVm
LG5ld19zaXplICApOw0KICAgIC0JCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZiApDQogICAgLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X2dldF9uZXh0X2J1ZmZlcigpIiApOw0KICAgIC0JfQ0KICAgIC0NCiAgICAtCSh5eV9u
X2NoYXJzKSArPSBudW1iZXJfdG9fbW92ZTsNCiAgICAtCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJzKV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7DQogICAg
LQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycykgKyAxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsNCiAgICAtDQogICAgLQkoeXl0ZXh0X3B0cikgPSAmWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07DQogICAgLQ0KICAgIC0JcmV0dXJu
IHJldF92YWw7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHl5X2dldF9wcmV2aW91c19zdGF0ZSAt
IGdldCB0aGUgc3RhdGUganVzdCBiZWZvcmUgdGhlIEVPQiBjaGFyIHdhcyByZWFjaGVkICovDQog
ICAgLQ0KICAgIC0gICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
ICh2b2lkKQ0KICAgIC17DQogICAgLQl5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7DQog
ICAgLQljaGFyICp5eV9jcDsNCiAgICAtICAgIA0KICAgIC0JeXlfY3VycmVudF9zdGF0ZSA9ICh5
eV9zdGFydCk7DQogICAgLQ0KICAgIC0JZm9yICggeXlfY3AgPSAoeXl0ZXh0X3B0cikgKyBZWV9N
T1JFX0FESjsgeXlfY3AgPCAoeXlfY19idWZfcCk7ICsreXlfY3AgKQ0KICAgIC0JCXsNCiAgICAt
CQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVdWygqeXlfY3AgPyB5
eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXSA6IDEpXTsNCiAgICAtCQl9DQogICAgLQ0KICAgIC0J
cmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7DQogICAgLX0NCiAgICAtDQogICAgLS8qIHl5X3RyeV9O
VUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0ZXIN
CiAgICAtICoNCiAgICAtICogc3lub3BzaXMNCiAgICAtICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9O
VUxfdHJhbnMoIGN1cnJlbnRfc3RhdGUgKTsNCiAgICAtICovDQogICAgLSAgICBzdGF0aWMgeXlf
c3RhdGVfdHlwZSB5eV90cnlfTlVMX3RyYW5zICAoeXlfc3RhdGVfdHlwZSB5eV9jdXJyZW50X3N0
YXRlICkNCiAgICAtew0KICAgIC0JaW50IHl5X2lzX2phbTsNCiAgICAtICAgIA0KICAgIC0JeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9jdXJyZW50X3N0YXRlXVsxXTsNCiAgICAtCXl5X2lz
X2phbSA9ICh5eV9jdXJyZW50X3N0YXRlIDw9IDApOw0KICAgIC0NCiAgICAtCQlyZXR1cm4geXlf
aXNfamFtID8gMCA6IHl5X2N1cnJlbnRfc3RhdGU7DQogICAgLX0NCiAgICAtDQogICAgLSNpZm5k
ZWYgWVlfTk9fVU5QVVQNCiAgICAtDQogICAgLSAgICBzdGF0aWMgdm9pZCB5eXVucHV0IChpbnQg
YywgY2hhciAqIHl5X2JwICkNCiAgICAtew0KICAgIC0JY2hhciAqeXlfY3A7DQogICAgLSAgICAN
CiAgICAtICAgIHl5X2NwID0gKHl5X2NfYnVmX3ApOw0KICAgIC0NCiAgICAtCS8qIHVuZG8gZWZm
ZWN0cyBvZiBzZXR0aW5nIHVwIHl5dGV4dCAqLw0KICAgIC0JKnl5X2NwID0gKHl5X2hvbGRfY2hh
cik7DQogICAgLQ0KICAgIC0JaWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfY2hfYnVmICsgMiApDQogICAgLQkJeyAvKiBuZWVkIHRvIHNoaWZ0IHRoaW5ncyB1cCB0byBt
YWtlIHJvb20gKi8NCiAgICAtCQkvKiArMiBmb3IgRU9CIGNoYXJzLiAqLw0KICAgIC0JCWludCBu
dW1iZXJfdG9fbW92ZSA9ICh5eV9uX2NoYXJzKSArIDI7DQogICAgLQkJY2hhciAqZGVzdCA9ICZZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsNCiAgICAtCQkJCQlZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplICsgMl07DQogICAgLQkJY2hhciAqc291cmNlID0N
CiAgICAtCQkJCSZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZltudW1iZXJfdG9f
bW92ZV07DQogICAgLQ0KICAgIC0JCXdoaWxlICggc291cmNlID4gWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYgKQ0KICAgIC0JCQkqLS1kZXN0ID0gKi0tc291cmNlOw0KICAgIC0N
CiAgICAtCQl5eV9jcCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7DQogICAgLQkJeXlfYnAgKz0g
KGludCkgKGRlc3QgLSBzb3VyY2UpOw0KICAgIC0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFycyA9DQogICAgLQkJCSh5eV9uX2NoYXJzKSA9IChpbnQpIFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemU7DQogICAgLQ0KICAgIC0JCWlmICggeXlfY3AgPCBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiArIDIgKQ0KICAgIC0JCQlZWV9GQVRBTF9F
UlJPUiggImZsZXggc2Nhbm5lciBwdXNoLWJhY2sgb3ZlcmZsb3ciICk7DQogICAgLQkJfQ0KICAg
IC0NCiAgICAtCSotLXl5X2NwID0gKGNoYXIpIGM7DQogICAgLQ0KICAgIC0gICAgaWYgKCBjID09
ICdcbicgKXsNCiAgICAtICAgICAgICAtLXl5bGluZW5vOw0KICAgIC0gICAgfQ0KICAgIC0NCiAg
ICAtCSh5eXRleHRfcHRyKSA9IHl5X2JwOw0KICAgIC0JKHl5X2hvbGRfY2hhcikgPSAqeXlfY3A7
DQogICAgLQkoeXlfY19idWZfcCkgPSB5eV9jcDsNCiAgICAtfQ0KICAgIC0NCiAgICAtI2VuZGlm
DQogICAgLQ0KICAgIC0jaWZuZGVmIFlZX05PX0lOUFVUDQogICAgLSNpZmRlZiBfX2NwbHVzcGx1
cw0KICAgIC0gICAgc3RhdGljIGludCB5eWlucHV0ICh2b2lkKQ0KICAgIC0jZWxzZQ0KICAgIC0g
ICAgc3RhdGljIGludCBpbnB1dCAgKHZvaWQpDQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtew0K
ICAgIC0JaW50IGM7DQogICAgLSAgICANCiAgICAtCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9j
aGFyKTsNCiAgICAtDQogICAgLQlpZiAoICooeXlfY19idWZfcCkgPT0gWVlfRU5EX09GX0JVRkZF
Ul9DSEFSICkNCiAgICAtCQl7DQogICAgLQkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRo
ZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uDQogICAgLQkJICogSWYgdGhpcyBvY2N1cnMg
KmJlZm9yZSogdGhlIEVPQiBjaGFyYWN0ZXJzLCB0aGVuIGl0J3MgYQ0KICAgIC0JCSAqIHZhbGlk
IE5VTDsgaWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuDQogICAg
LQkJICovDQogICAgLQkJaWYgKCAoeXlfY19idWZfcCkgPCAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSApDQogICAgLQkJCS8qIFRoaXMgd2FzIHJlYWxs
eSBhIE5VTC4gKi8NCiAgICAtCQkJKih5eV9jX2J1Zl9wKSA9ICdcMCc7DQogICAgLQ0KICAgIC0J
CWVsc2UNCiAgICAtCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQgKi8NCiAgICAtCQkJaW50IG9mZnNl
dCA9ICh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKTsNCiAgICAtCQkJKysoeXlfY19idWZfcCk7
DQogICAgLQ0KICAgIC0JCQlzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkNCiAgICAt
CQkJCXsNCiAgICAtCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOg0KICAgIC0JCQkJCS8qIFRo
aXMgaGFwcGVucyBiZWNhdXNlIHl5X2dfbl9iKCkNCiAgICAtCQkJCQkgKiBzZWVzIHRoYXQgd2Un
dmUgYWNjdW11bGF0ZWQgYQ0KICAgIC0JCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5l
ZWQgdG8NCiAgICAtCQkJCQkgKiB0cnkgbWF0Y2hpbmcgdGhlIHRva2VuIGJlZm9yZQ0KICAgIC0J
CQkJCSAqIHByb2NlZWRpbmcuICBCdXQgZm9yIGlucHV0KCksDQogICAgLQkJCQkJICogdGhlcmUn
cyBubyBtYXRjaGluZyB0byBjb25zaWRlci4NCiAgICAtCQkJCQkgKiBTbyBjb252ZXJ0IHRoZSBF
T0JfQUNUX0xBU1RfTUFUQ0gNCiAgICAtCQkJCQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLg0K
ICAgIC0JCQkJCSAqLw0KICAgIC0NCiAgICAtCQkJCQkvKiBSZXNldCBidWZmZXIgc3RhdHVzLiAq
Lw0KICAgIC0JCQkJCXl5cmVzdGFydCh5eWluICk7DQogICAgLQ0KICAgIC0JCQkJCS8qRkFMTFRI
Uk9VR0gqLw0KICAgIC0NCiAgICAtCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToNCiAgICAt
CQkJCQl7DQogICAgLQkJCQkJaWYgKCB5eXdyYXAoICkgKQ0KICAgIC0JCQkJCQlyZXR1cm4gMDsN
CiAgICAtDQogICAgLQkJCQkJaWYgKCAhICh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpICkN
CiAgICAtCQkJCQkJWVlfTkVXX0ZJTEU7DQogICAgLSNpZmRlZiBfX2NwbHVzcGx1cw0KICAgIC0J
CQkJCXJldHVybiB5eWlucHV0KCk7DQogICAgLSNlbHNlDQogICAgLQkJCQkJcmV0dXJuIGlucHV0
KCk7DQogICAgLSNlbmRpZg0KICAgIC0JCQkJCX0NCiAgICAtDQogICAgLQkJCQljYXNlIEVPQl9B
Q1RfQ09OVElOVUVfU0NBTjoNCiAgICAtCQkJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikg
KyBvZmZzZXQ7DQogICAgLQkJCQkJYnJlYWs7DQogICAgLQkJCQl9DQogICAgLQkJCX0NCiAgICAt
CQl9DQogICAgLQ0KICAgIC0JYyA9ICoodW5zaWduZWQgY2hhciAqKSAoeXlfY19idWZfcCk7CS8q
IGNhc3QgZm9yIDgtYml0IGNoYXIncyAqLw0KICAgIC0JKih5eV9jX2J1Zl9wKSA9ICdcMCc7CS8q
IHByZXNlcnZlIHl5dGV4dCAqLw0KICAgIC0JKHl5X2hvbGRfY2hhcikgPSAqKysoeXlfY19idWZf
cCk7DQogICAgLQ0KICAgIC0JaWYgKCBjID09ICdcbicgKQ0KICAgIC0JCQ0KICAgIC0gICAgeXls
aW5lbm8rKzsNCiAgICAtOw0KICAgIC0NCiAgICAtCXJldHVybiBjOw0KICAgIC19DQogICAgLSNl
bmRpZgkvKiBpZm5kZWYgWVlfTk9fSU5QVVQgKi8NCiAgICAtDQogICAgLS8qKiBJbW1lZGlhdGVs
eSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQgc3RyZWFtLg0KICAgIC0gKiBAcGFyYW0gaW5w
dXRfZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4NCiAgICAtICogDQogICAgLSAqIEBub3RlIFRoaXMg
ZnVuY3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFM
IC4NCiAgICAtICovDQogICAgLSAgICB2b2lkIHl5cmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxl
ICkNCiAgICAtew0KICAgIC0gICAgDQogICAgLQlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsN
CiAgICAtICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7DQogICAgLQkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0NCiAgICAtICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JeXlfaW5pdF9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIsaW5wdXRfZmlsZSApOw0KICAgIC0JeXlfbG9hZF9idWZmZXJfc3RhdGUo
ICk7DQogICAgLX0NCiAgICAtDQogICAgLS8qKiBTd2l0Y2ggdG8gYSBkaWZmZXJlbnQgaW5wdXQg
YnVmZmVyLg0KICAgIC0gKiBAcGFyYW0gbmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4N
CiAgICAtICogDQogICAgLSAqLw0KICAgIC0gICAgdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICAo
WVlfQlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICkNCiAgICAtew0KICAgIC0gICAgDQogICAgLQkv
KiBUT0RPLiBXZSBzaG91bGQgYmUgYWJsZSB0byByZXBsYWNlIHRoaXMgZW50aXJlIGZ1bmN0aW9u
IGJvZHkNCiAgICAtCSAqIHdpdGgNCiAgICAtCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsNCiAg
ICAtCSAqCQl5eXB1c2hfYnVmZmVyX3N0YXRlKG5ld19idWZmZXIpOw0KICAgIC0gICAgICovDQog
ICAgLQl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKCk7DQogICAgLQlpZiAoIFlZX0NVUlJFTlRfQlVG
RkVSID09IG5ld19idWZmZXIgKQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlpZiAoIFlZ
X0NVUlJFTlRfQlVGRkVSICkNCiAgICAtCQl7DQogICAgLQkJLyogRmx1c2ggb3V0IGluZm9ybWF0
aW9uIGZvciBvbGQgYnVmZmVyLiAqLw0KICAgIC0JCSooeXlfY19idWZfcCkgPSAoeXlfaG9sZF9j
aGFyKTsNCiAgICAtCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSAoeXlf
Y19idWZfcCk7DQogICAgLQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0g
KHl5X25fY2hhcnMpOw0KICAgIC0JCX0NCiAgICAtDQogICAgLQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOw0KICAgIC0JeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7DQogICAg
LQ0KICAgIC0JLyogV2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3
aXRjaCBkdXJpbmcNCiAgICAtCSAqIEVPRiAoeXl3cmFwKCkpIHByb2Nlc3NpbmcsIGJ1dCB0aGUg
b25seSB0aW1lIHRoaXMgZmxhZw0KICAgIC0JICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3Jh
cCgpIGlzIGNhbGxlZCwgc28gaXQncyBzYWZlDQogICAgLQkgKiB0byBnbyBhaGVhZCBhbmQgYWx3
YXlzIHNldCBpdC4NCiAgICAtCSAqLw0KICAgIC0JKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2Vv
ZikgPSAxOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9z
dGF0ZSAgKHZvaWQpDQogICAgLXsNCiAgICAtICAgIAkoeXlfbl9jaGFycykgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7DQogICAgLQkoeXl0ZXh0X3B0cikgPSAoeXlfY19i
dWZfcCkgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3M7DQogICAgLQl5eWlu
ID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOw0KICAgIC0JKHl5X2hv
bGRfY2hhcikgPSAqKHl5X2NfYnVmX3ApOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiogQWxsb2Nh
dGUgYW5kIGluaXRpYWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLg0KICAgIC0gKiBAcGFyYW0g
ZmlsZSBBIHJlYWRhYmxlIHN0cmVhbS4NCiAgICAtICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3Rl
ciBidWZmZXIgc2l6ZSBpbiBieXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpF
Lg0KICAgIC0gKiANCiAgICAtICogQHJldHVybiB0aGUgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZS4N
CiAgICAtICovDQogICAgLSAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJ
TEUgKiBmaWxlLCBpbnQgIHNpemUgKQ0KICAgIC17DQogICAgLQlZWV9CVUZGRVJfU1RBVEUgYjsN
CiAgICAtICAgIA0KICAgIC0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgICk7DQogICAgLQlpZiAoICEgYiApDQogICAgLQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigp
IiApOw0KICAgIC0NCiAgICAtCWItPnl5X2J1Zl9zaXplID0gKHl5X3NpemVfdClzaXplOw0KICAg
IC0NCiAgICAtCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUgMiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFu
IHRoZSBzaXplIGdpdmVuIGJlY2F1c2UNCiAgICAtCSAqIHdlIG5lZWQgdG8gcHV0IGluIDIgZW5k
LW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLg0KICAgIC0JICovDQogICAgLQliLT55eV9jaF9idWYgPSAo
Y2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAgKTsNCiAgICAtCWlmICggISBiLT55
eV9jaF9idWYgKQ0KICAgIC0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5
IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsNCiAgICAtDQogICAgLQliLT55eV9pc19vdXJfYnVm
ZmVyID0gMTsNCiAgICAtDQogICAgLQl5eV9pbml0X2J1ZmZlcihiLGZpbGUgKTsNCiAgICAtDQog
ICAgLQlyZXR1cm4gYjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoqIERlc3Ryb3kgdGhlIGJ1ZmZl
ci4NCiAgICAtICogQHBhcmFtIGIgYSBidWZmZXIgY3JlYXRlZCB3aXRoIHl5X2NyZWF0ZV9idWZm
ZXIoKQ0KICAgIC0gKiANCiAgICAtICovDQogICAgLSAgICB2b2lkIHl5X2RlbGV0ZV9idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSAgYiApDQogICAgLXsNCiAgICAtICAgIA0KICAgIC0JaWYgKCAhIGIg
KQ0KICAgIC0JCXJldHVybjsNCiAgICAtDQogICAgLQlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZG
RVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgcG9wIGhlcmUuICovDQogICAgLQkJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFID0gKFlZX0JVRkZFUl9TVEFURSkgMDsNCiAgICAtDQogICAgLQlp
ZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQ0KICAgIC0JCXl5ZnJlZSgodm9pZCAqKSBiLT55eV9j
aF9idWYgICk7DQogICAgLQ0KICAgIC0JeXlmcmVlKCh2b2lkICopIGIgICk7DQogICAgLX0NCiAg
ICAtDQogICAgLS8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZmZXIuDQogICAg
LSAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0
aGUgc2FtZSBidWZmZXIsDQogICAgLSAqIHN1Y2ggYXMgZHVyaW5nIGEgeXlyZXN0YXJ0KCkgb3Ig
YXQgRU9GLg0KICAgIC0gKi8NCiAgICAtICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAo
WVlfQlVGRkVSX1NUQVRFICBiLCBGSUxFICogZmlsZSApDQogICAgLQ0KICAgIC17DQogICAgLQlp
bnQgb2Vycm5vID0gZXJybm87DQogICAgLSAgICANCiAgICAtCXl5X2ZsdXNoX2J1ZmZlcihiICk7
DQogICAgLQ0KICAgIC0JYi0+eXlfaW5wdXRfZmlsZSA9IGZpbGU7DQogICAgLQliLT55eV9maWxs
X2J1ZmZlciA9IDE7DQogICAgLQ0KICAgIC0gICAgLyogSWYgYiBpcyB0aGUgY3VycmVudCBidWZm
ZXIsIHRoZW4geXlfaW5pdF9idWZmZXIgd2FzIF9wcm9iYWJseV8NCiAgICAtICAgICAqIGNhbGxl
ZCBmcm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25leHRfYnVmZmVyLg0KICAgIC0g
ICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBsaW5lbm8gb3Ig
Y29sdW1uLg0KICAgIC0gICAgICovDQogICAgLSAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JVRkZF
Uil7DQogICAgLSAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsNCiAgICAtICAgICAgICBiLT55
eV9ic19jb2x1bW4gPSAwOw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICAgICAgICBiLT55eV9p
c19pbnRlcmFjdGl2ZSA9IDA7DQogICAgLSAgICANCiAgICAtCWVycm5vID0gb2Vycm5vOw0KICAg
IC19DQogICAgLQ0KICAgIC0vKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVycy4gT24g
dGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuDQogICAgLSAqIEBwYXJhbSBi
IHRoZSBidWZmZXIgc3RhdGUgdG8gYmUgZmx1c2hlZCwgdXN1YWxseSBAYyBZWV9DVVJSRU5UX0JV
RkZFUi4NCiAgICAtICogDQogICAgLSAqLw0KICAgIC0gICAgdm9pZCB5eV9mbHVzaF9idWZmZXIg
KFlZX0JVRkZFUl9TVEFURSAgYiApDQogICAgLXsNCiAgICAtICAgIAlpZiAoICEgYiApDQogICAg
LQkJcmV0dXJuOw0KICAgIC0NCiAgICAtCWItPnl5X25fY2hhcnMgPSAwOw0KICAgIC0NCiAgICAt
CS8qIFdlIGFsd2F5cyBuZWVkIHR3byBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuICBUaGUgZmly
c3QgY2F1c2VzDQogICAgLQkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIgc3Rh
dGUuICBUaGUgc2Vjb25kIGNhdXNlcw0KICAgIC0JICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4NCiAg
ICAtCSAqLw0KICAgIC0JYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOw0K
ICAgIC0JYi0+eXlfY2hfYnVmWzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOw0KICAgIC0NCiAg
ICAtCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlfY2hfYnVmWzBdOw0KICAgIC0NCiAgICAtCWItPnl5
X2F0X2JvbCA9IDE7DQogICAgLQliLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05FVzsN
CiAgICAtDQogICAgLQlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKQ0KICAgIC0JCXl5X2xv
YWRfYnVmZmVyX3N0YXRlKCApOw0KICAgIC19DQogICAgLQ0KICAgIC0vKiogUHVzaGVzIHRoZSBu
ZXcgc3RhdGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcw0KICAgIC0gKiAg
dGhlIGN1cnJlbnQgc3RhdGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sN
CiAgICAtICogIGlmIG5lY2Vzc2FyeS4NCiAgICAtICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBu
ZXcgc3RhdGUuDQogICAgLSAqICANCiAgICAtICovDQogICAgLXZvaWQgeXlwdXNoX2J1ZmZlcl9z
dGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgKQ0KICAgIC17DQogICAgLSAgICAJaWYg
KG5ld19idWZmZXIgPT0gTlVMTCkNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAgIC0JeXllbnN1
cmVfYnVmZmVyX3N0YWNrKCk7DQogICAgLQ0KICAgIC0JLyogVGhpcyBibG9jayBpcyBjb3BpZWQg
ZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAqLw0KICAgIC0JaWYgKCBZWV9DVVJSRU5UX0JVRkZF
UiApDQogICAgLQkJew0KICAgIC0JCS8qIEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1
ZmZlci4gKi8NCiAgICAtCQkqKHl5X2NfYnVmX3ApID0gKHl5X2hvbGRfY2hhcik7DQogICAgLQkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zID0gKHl5X2NfYnVmX3ApOw0KICAg
IC0JCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFycyA9ICh5eV9uX2NoYXJzKTsN
CiAgICAtCQl9DQogICAgLQ0KICAgIC0JLyogT25seSBwdXNoIGlmIHRvcCBleGlzdHMuIE90aGVy
d2lzZSwgcmVwbGFjZSB0b3AuICovDQogICAgLQlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIpDQogICAg
LQkJKHl5X2J1ZmZlcl9zdGFja190b3ApKys7DQogICAgLQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBuZXdfYnVmZmVyOw0KICAgIC0NCiAgICAtCS8qIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90
b19idWZmZXIuICovDQogICAgLQl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSggKTsNCiAgICAtCSh5eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoqIFJl
bW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuDQogICAg
LSAqICBUaGUgbmV4dCBlbGVtZW50IGJlY29tZXMgdGhlIG5ldyB0b3AuDQogICAgLSAqICANCiAg
ICAtICovDQogICAgLXZvaWQgeXlwb3BfYnVmZmVyX3N0YXRlICh2b2lkKQ0KICAgIC17DQogICAg
LSAgICAJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikNCiAgICAtCQlyZXR1cm47DQogICAgLQ0KICAg
IC0JeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApOw0KICAgIC0JWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFID0gTlVMTDsNCiAgICAtCWlmICgoeXlfYnVmZmVyX3N0YWNrX3RvcCkg
PiAwKQ0KICAgIC0JCS0tKHl5X2J1ZmZlcl9zdGFja190b3ApOw0KICAgIC0NCiAgICAtCWlmIChZ
WV9DVVJSRU5UX0JVRkZFUikgew0KICAgIC0JCXl5X2xvYWRfYnVmZmVyX3N0YXRlKCApOw0KICAg
IC0JCSh5eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YpID0gMTsNCiAgICAtCX0NCiAgICAtfQ0K
ICAgIC0NCiAgICAtLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2VzIG5vdCBleGlzdC4N
CiAgICAtICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLg0KICAgIC0g
Ki8NCiAgICAtc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh2b2lkKQ0KICAgIC17
DQogICAgLQlpbnQgbnVtX3RvX2FsbG9jOw0KICAgIC0gICAgDQogICAgLQlpZiAoISh5eV9idWZm
ZXJfc3RhY2spKSB7DQogICAgLQ0KICAgIC0JCS8qIEZpcnN0IGFsbG9jYXRpb24gaXMganVzdCBm
b3IgMiBlbGVtZW50cywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGlzDQogICAgLQkJICogc2Nh
bm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZv
aWQgYW4NCiAgICAtCQkgKiBpbW1lZGlhdGUgcmVhbGxvYyBvbiB0aGUgbmV4dCBjYWxsLg0KICAg
IC0gICAgICAgICAqLw0KICAgIC0gICAgICBudW1fdG9fYWxsb2MgPSAxOyAvKiBBZnRlciBhbGwg
dGhhdCB0YWxrLCB0aGlzIHdhcyBzZXQgdG8gMSBhbnl3YXlzLi4uICovDQogICAgLQkJKHl5X2J1
ZmZlcl9zdGFjaykgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MNCiAgICAtCQkJ
CQkJCQkobnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQ0KICAg
IC0JCQkJCQkJCSk7DQogICAgLQkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkNCiAgICAtCQkJ
WVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVy
X3N0YWNrKCkiICk7DQogICAgLQ0KICAgIC0JCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNrKSwgMCwg
bnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7DQogICAgLQ0K
ICAgIC0JCSh5eV9idWZmZXJfc3RhY2tfbWF4KSA9IG51bV90b19hbGxvYzsNCiAgICAtCQkoeXlf
YnVmZmVyX3N0YWNrX3RvcCkgPSAwOw0KICAgIC0JCXJldHVybjsNCiAgICAtCX0NCiAgICAtDQog
ICAgLQlpZiAoKHl5X2J1ZmZlcl9zdGFja190b3ApID49ICgoeXlfYnVmZmVyX3N0YWNrX21heCkp
IC0gMSl7DQogICAgLQ0KICAgIC0JCS8qIEluY3JlYXNlIHRoZSBidWZmZXIgdG8gcHJlcGFyZSBm
b3IgYSBwb3NzaWJsZSBwdXNoLiAqLw0KICAgIC0JCXl5X3NpemVfdCBncm93X3NpemUgPSA4IC8q
IGFyYml0cmFyeSBncm93IHNpemUgKi87DQogICAgLQ0KICAgIC0JCW51bV90b19hbGxvYyA9ICh5
eV9idWZmZXJfc3RhY2tfbWF4KSArIGdyb3dfc2l6ZTsNCiAgICAtCQkoeXlfYnVmZmVyX3N0YWNr
KSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9jDQogICAgLQkJCQkJCQkJKCh5
eV9idWZmZXJfc3RhY2spLA0KICAgIC0JCQkJCQkJCW51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1
Y3QgeXlfYnVmZmVyX3N0YXRlKikNCiAgICAtCQkJCQkJCQkpOw0KICAgIC0JCWlmICggISAoeXlf
YnVmZmVyX3N0YWNrKSApDQogICAgLQkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOw0KICAgIC0NCiAgICAtCQkvKiB6
ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLw0KICAgIC0JCW1lbXNldCgoeXlfYnVmZmVyX3N0YWNr
KSArICh5eV9idWZmZXJfc3RhY2tfbWF4KSwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5
eV9idWZmZXJfc3RhdGUqKSk7DQogICAgLQkJKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gbnVtX3Rv
X2FsbG9jOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAgIC0vKiogU2V0dXAgdGhlIGlucHV0
IGJ1ZmZlciBzdGF0ZSB0byBzY2FuIGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFy
YWN0ZXIgYnVmZmVyLg0KICAgIC0gKiBAcGFyYW0gYmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcg0K
ICAgIC0gKiBAcGFyYW0gc2l6ZSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgY2hhcmFjdGVyIGJ1
ZmZlcg0KICAgIC0gKiANCiAgICAtICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZl
ciBzdGF0ZSBvYmplY3QuDQogICAgLSAqLw0KICAgIC1ZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
dWZmZXIgIChjaGFyICogYmFzZSwgeXlfc2l6ZV90ICBzaXplICkNCiAgICAtew0KICAgIC0JWVlf
QlVGRkVSX1NUQVRFIGI7DQogICAgLSAgICANCiAgICAtCWlmICggc2l6ZSA8IDIgfHwNCiAgICAt
CSAgICAgYmFzZVtzaXplLTJdICE9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUiB8fA0KICAgIC0JICAg
ICBiYXNlW3NpemUtMV0gIT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSICkNCiAgICAtCQkvKiBUaGV5
IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9CJ3MuICovDQogICAgLQkJcmV0dXJuIE5V
TEw7DQogICAgLQ0KICAgIC0JYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBz
dHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgICk7DQogICAgLQlpZiAoICEgYiApDQogICAgLQkJWVlf
RkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZmZXIoKSIg
KTsNCiAgICAtDQogICAgLQliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0
YWtlIGNhcmUgb2YgRU9CJ3MgKi8NCiAgICAtCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYg
PSBiYXNlOw0KICAgIC0JYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDA7DQogICAgLQliLT55eV9pbnB1
dF9maWxlID0gTlVMTDsNCiAgICAtCWItPnl5X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsNCiAg
ICAtCWItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsNCiAgICAtCWItPnl5X2F0X2JvbCA9IDE7DQog
ICAgLQliLT55eV9maWxsX2J1ZmZlciA9IDA7DQogICAgLQliLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05FVzsNCiAgICAtDQogICAgLQl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgICk7DQog
ICAgLQ0KICAgIC0JcmV0dXJuIGI7DQogICAgLX0NCiAgICAtDQogICAgLS8qKiBTZXR1cCB0aGUg
aW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXls
ZXgoKSB3aWxsDQogICAgLSAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgc3RyLg0KICAgIC0g
KiBAcGFyYW0geXlzdHIgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgdG8gc2Nhbg0KICAgIC0gKiAN
CiAgICAtICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBvYmplY3Qu
DQogICAgLSAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFp
biBOVUwgdmFsdWVzLCB0aGVuIHVzZQ0KICAgIC0gKiAgICAgICB5eV9zY2FuX2J5dGVzKCkgaW5z
dGVhZC4NCiAgICAtICovDQogICAgLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXlj
b25zdCBjaGFyICogeXlzdHIgKQ0KICAgIC17DQogICAgLSAgICANCiAgICAtCXJldHVybiB5eV9z
Y2FuX2J5dGVzKHl5c3RyLChpbnQpIHN0cmxlbih5eXN0cikgKTsNCiAgICAtfQ0KICAgIC0NCiAg
ICAtLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0
ZXMuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsDQogICAgLSAqIHNjYW4gZnJvbSBhIEBl
IGNvcHkgb2YgQGEgYnl0ZXMuDQogICAgLSAqIEBwYXJhbSB5eWJ5dGVzIHRoZSBieXRlIGJ1ZmZl
ciB0byBzY2FuDQogICAgLSAqIEBwYXJhbSBfeXlieXRlc19sZW4gdGhlIG51bWJlciBvZiBieXRl
cyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuDQogICAgLSAqIA0KICAgIC0g
KiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4NCiAgICAt
ICovDQogICAgLVlZX0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICAoeXljb25zdCBjaGFyICog
eXlieXRlcywgaW50ICBfeXlieXRlc19sZW4gKQ0KICAgIC17DQogICAgLQlZWV9CVUZGRVJfU1RB
VEUgYjsNCiAgICAtCWNoYXIgKmJ1ZjsNCiAgICAtCXl5X3NpemVfdCBuOw0KICAgIC0JaW50IGk7
DQogICAgLSAgICANCiAgICAtCS8qIEdldCBtZW1vcnkgZm9yIGZ1bGwgYnVmZmVyLCBpbmNsdWRp
bmcgc3BhY2UgZm9yIHRyYWlsaW5nIEVPQidzLiAqLw0KICAgIC0JbiA9ICh5eV9zaXplX3QpIChf
eXlieXRlc19sZW4gKyAyKTsNCiAgICAtCWJ1ZiA9IChjaGFyICopIHl5YWxsb2MobiAgKTsNCiAg
ICAtCWlmICggISBidWYgKQ0KICAgIC0JCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMg
bWVtb3J5IGluIHl5X3NjYW5fYnl0ZXMoKSIgKTsNCiAgICAtDQogICAgLQlmb3IgKCBpID0gMDsg
aSA8IF95eWJ5dGVzX2xlbjsgKytpICkNCiAgICAtCQlidWZbaV0gPSB5eWJ5dGVzW2ldOw0KICAg
IC0NCiAgICAtCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVzX2xlbisxXSA9IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUjsNCiAgICAtDQogICAgLQliID0geXlfc2Nhbl9idWZmZXIoYnVmLG4g
KTsNCiAgICAtCWlmICggISBiICkNCiAgICAtCQlZWV9GQVRBTF9FUlJPUiggImJhZCBidWZmZXIg
aW4geXlfc2Nhbl9ieXRlcygpIiApOw0KICAgIC0NCiAgICAtCS8qIEl0J3Mgb2theSB0byBncm93
IGV0Yy4gdGhpcyBidWZmZXIsIGFuZCB3ZSBzaG91bGQgdGhyb3cgaXQNCiAgICAtCSAqIGF3YXkg
d2hlbiB3ZSdyZSBkb25lLg0KICAgIC0JICovDQogICAgLQliLT55eV9pc19vdXJfYnVmZmVyID0g
MTsNCiAgICAtDQogICAgLQlyZXR1cm4gYjsNCiAgICAtfQ0KICAgIC0NCiAgICAtI2lmbmRlZiBZ
WV9FWElUX0ZBSUxVUkUNCiAgICAtI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMg0KICAgIC0jZW5k
aWYNCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHl5bm9yZXR1cm4geXlfZmF0YWxfZXJyb3IgKHl5
Y29uc3QgY2hhciogbXNnICkNCiAgICAtew0KICAgIC0JCQkodm9pZCkgZnByaW50Ziggc3RkZXJy
LCAiJXNcbiIsIG1zZyApOw0KICAgIC0JZXhpdCggWVlfRVhJVF9GQUlMVVJFICk7DQogICAgLX0N
CiAgICAtDQogICAgLS8qIFJlZGVmaW5lIHl5bGVzcygpIHNvIGl0IHdvcmtzIGluIHNlY3Rpb24g
MyBjb2RlLiAqLw0KICAgIC0NCiAgICAtI3VuZGVmIHl5bGVzcw0KICAgIC0jZGVmaW5lIHl5bGVz
cyhuKSBcDQogICAgLQlkbyBcDQogICAgLQkJeyBcDQogICAgLQkJLyogVW5kbyBlZmZlY3RzIG9m
IHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBcDQogICAgLSAgICAgICAgaW50IHl5bGVzc19tYWNyb19h
cmcgPSAobik7IFwNCiAgICAtICAgICAgICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJn
KTtcDQogICAgLQkJeXl0ZXh0W3l5bGVuZ10gPSAoeXlfaG9sZF9jaGFyKTsgXA0KICAgIC0JCSh5
eV9jX2J1Zl9wKSA9IHl5dGV4dCArIHl5bGVzc19tYWNyb19hcmc7IFwNCiAgICAtCQkoeXlfaG9s
ZF9jaGFyKSA9ICooeXlfY19idWZfcCk7IFwNCiAgICAtCQkqKHl5X2NfYnVmX3ApID0gJ1wwJzsg
XA0KICAgIC0JCXl5bGVuZyA9IHl5bGVzc19tYWNyb19hcmc7IFwNCiAgICAtCQl9IFwNCiAgICAt
CXdoaWxlICggMCApDQogICAgLQ0KICAgIC0vKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3NldCBm
dW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLw0KICAgIC0NCiAgICAtLyoqIEdldCB0aGUg
Y3VycmVudCBsaW5lIG51bWJlci4NCiAgICAtICogDQogICAgLSAqLw0KICAgIC1pbnQgeXlnZXRf
bGluZW5vICAodm9pZCkNCiAgICAtew0KICAgIC0gICAgDQogICAgLSAgICByZXR1cm4geXlsaW5l
bm87DQogICAgLX0NCiAgICAtDQogICAgLS8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4NCiAgICAt
ICogDQogICAgLSAqLw0KICAgIC1GSUxFICp5eWdldF9pbiAgKHZvaWQpDQogICAgLXsNCiAgICAt
ICAgICAgICByZXR1cm4geXlpbjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoqIEdldCB0aGUgb3V0
cHV0IHN0cmVhbS4NCiAgICAtICogDQogICAgLSAqLw0KICAgIC1GSUxFICp5eWdldF9vdXQgICh2
b2lkKQ0KICAgIC17DQogICAgLSAgICAgICAgcmV0dXJuIHl5b3V0Ow0KICAgIC19DQogICAgLQ0K
ICAgIC0vKiogR2V0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQgdG9rZW4uDQogICAgLSAqIA0K
ICAgIC0gKi8NCiAgICAtaW50IHl5Z2V0X2xlbmcgICh2b2lkKQ0KICAgIC17DQogICAgLSAgICAg
ICAgcmV0dXJuIHl5bGVuZzsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoqIEdldCB0aGUgY3VycmVu
dCB0b2tlbi4NCiAgICAtICogDQogICAgLSAqLw0KICAgIC0NCiAgICAtY2hhciAqeXlnZXRfdGV4
dCAgKHZvaWQpDQogICAgLXsNCiAgICAtICAgICAgICByZXR1cm4geXl0ZXh0Ow0KICAgIC19DQog
ICAgLQ0KICAgIC0vKiogU2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLg0KICAgIC0gKiBAcGFy
YW0gX2xpbmVfbnVtYmVyIGxpbmUgbnVtYmVyDQogICAgLSAqIA0KICAgIC0gKi8NCiAgICAtdm9p
ZCB5eXNldF9saW5lbm8gKGludCAgX2xpbmVfbnVtYmVyICkNCiAgICAtew0KICAgIC0gICAgDQog
ICAgLSAgICB5eWxpbmVubyA9IF9saW5lX251bWJlcjsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoq
IFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90IGRpc2NhcmQgdGhlIGN1cnJlbnQN
CiAgICAtICogaW5wdXQgYnVmZmVyLg0KICAgIC0gKiBAcGFyYW0gX2luX3N0ciBBIHJlYWRhYmxl
IHN0cmVhbS4NCiAgICAtICogDQogICAgLSAqIEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcg0KICAg
IC0gKi8NCiAgICAtdm9pZCB5eXNldF9pbiAoRklMRSAqICBfaW5fc3RyICkNCiAgICAtew0KICAg
IC0gICAgICAgIHl5aW4gPSBfaW5fc3RyIDsNCiAgICAtfQ0KICAgIC0NCiAgICAtdm9pZCB5eXNl
dF9vdXQgKEZJTEUgKiAgX291dF9zdHIgKQ0KICAgIC17DQogICAgLSAgICAgICAgeXlvdXQgPSBf
b3V0X3N0ciA7DQogICAgLX0NCiAgICAtDQogICAgLWludCB5eWdldF9kZWJ1ZyAgKHZvaWQpDQog
ICAgLXsNCiAgICAtICAgICAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsNCiAgICAtfQ0KICAgIC0N
CiAgICAtdm9pZCB5eXNldF9kZWJ1ZyAoaW50ICBfYmRlYnVnICkNCiAgICAtew0KICAgIC0gICAg
ICAgIHl5X2ZsZXhfZGVidWcgPSBfYmRlYnVnIDsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGlj
IGludCB5eV9pbml0X2dsb2JhbHMgKHZvaWQpDQogICAgLXsNCiAgICAtICAgICAgICAvKiBJbml0
aWFsaXphdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgdGhlIG5vbi1yZWVudHJhbnQgc2Nhbm5lci4N
CiAgICAtICAgICAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgp
LCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLg0KICAgIC0gICAgICovDQogICAgLQ0KICAgIC0gICAg
LyogV2UgZG8gbm90IHRvdWNoIHl5bGluZW5vIHVubGVzcyB0aGUgb3B0aW9uIGlzIGVuYWJsZWQu
ICovDQogICAgLSAgICB5eWxpbmVubyA9ICAxOw0KICAgIC0gICAgDQogICAgLSAgICAoeXlfYnVm
ZmVyX3N0YWNrKSA9IE5VTEw7DQogICAgLSAgICAoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPSAwOw0K
ICAgIC0gICAgKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gMDsNCiAgICAtICAgICh5eV9jX2J1Zl9w
KSA9IE5VTEw7DQogICAgLSAgICAoeXlfaW5pdCkgPSAwOw0KICAgIC0gICAgKHl5X3N0YXJ0KSA9
IDA7DQogICAgLQ0KICAgIC0vKiBEZWZpbmVkIGluIG1haW4uYyAqLw0KICAgIC0jaWZkZWYgWVlf
U1RESU5JVA0KICAgIC0gICAgeXlpbiA9IHN0ZGluOw0KICAgIC0gICAgeXlvdXQgPSBzdGRvdXQ7
DQogICAgLSNlbHNlDQogICAgLSAgICB5eWluID0gTlVMTDsNCiAgICAtICAgIHl5b3V0ID0gTlVM
TDsNCiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0gICAgLyogRm9yIGZ1dHVyZSByZWZlcmVuY2U6
IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNhbGxlZCBieQ0KICAgIC0gICAgICog
eXlsZXhfaW5pdCgpDQogICAgLSAgICAgKi8NCiAgICAtICAgIHJldHVybiAwOw0KICAgIC19DQog
ICAgLQ0KICAgIC0vKiB5eWxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9u
LXJlZW50cmFudCBzY2FubmVycy4gKi8NCiAgICAtaW50IHl5bGV4X2Rlc3Ryb3kgICh2b2lkKQ0K
ICAgIC17DQogICAgLSAgICANCiAgICAtICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0
cm95aW5nIGVhY2ggZWxlbWVudC4gKi8NCiAgICAtCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsN
CiAgICAtCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICApOw0KICAgIC0JCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5VTEw7DQogICAgLQkJeXlwb3BfYnVmZmVyX3N0YXRl
KCk7DQogICAgLQl9DQogICAgLQ0KICAgIC0JLyogRGVzdHJveSB0aGUgc3RhY2sgaXRzZWxmLiAq
Lw0KICAgIC0JeXlmcmVlKCh5eV9idWZmZXJfc3RhY2spICk7DQogICAgLQkoeXlfYnVmZmVyX3N0
YWNrKSA9IE5VTEw7DQogICAgLQ0KICAgIC0gICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMg
aXMgaW1wb3J0YW50IGluIGEgbm9uLXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUN
CiAgICAtICAgICAqIHl5bGV4KCkgaXMgY2FsbGVkLCBpbml0aWFsaXphdGlvbiB3aWxsIG9jY3Vy
LiAqLw0KICAgIC0gICAgeXlfaW5pdF9nbG9iYWxzKCApOw0KICAgIC0NCiAgICAtICAgIHJldHVy
biAwOw0KICAgIC19DQogICAgLQ0KICAgIC0vKg0KICAgIC0gKiBJbnRlcm5hbCB1dGlsaXR5IHJv
dXRpbmVzLg0KICAgIC0gKi8NCiAgICAtDQogICAgLSNpZm5kZWYgeXl0ZXh0X3B0cg0KICAgIC1z
dGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIqIHMxLCB5eWNvbnN0IGNoYXIgKiBzMiwg
aW50IG4gKQ0KICAgIC17DQogICAgLQkJDQogICAgLQlpbnQgaTsNCiAgICAtCWZvciAoIGkgPSAw
OyBpIDwgbjsgKytpICkNCiAgICAtCQlzMVtpXSA9IHMyW2ldOw0KICAgIC19DQogICAgLSNlbmRp
Zg0KICAgIC0NCiAgICAtI2lmZGVmIFlZX05FRURfU1RSTEVODQogICAgLXN0YXRpYyBpbnQgeXlf
ZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgKQ0KICAgIC17DQogICAgLQlpbnQgbjsNCiAg
ICAtCWZvciAoIG4gPSAwOyBzW25dOyArK24gKQ0KICAgIC0JCTsNCiAgICAtDQogICAgLQlyZXR1
cm4gbjsNCiAgICAtfQ0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLXZvaWQgKnl5YWxsb2MgKHl5
X3NpemVfdCAgc2l6ZSApDQogICAgLXsNCiAgICAtCQkJcmV0dXJuIG1hbGxvYyhzaXplKTsNCiAg
ICAtfQ0KICAgIC0NCiAgICAtdm9pZCAqeXlyZWFsbG9jICAodm9pZCAqIHB0ciwgeXlfc2l6ZV90
ICBzaXplICkNCiAgICAtew0KICAgIC0JCQ0KICAgIC0JLyogVGhlIGNhc3QgdG8gKGNoYXIgKikg
aW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aA0KICAgIC0JICogaW1wbGVtZW50YXRp
b25zIHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQ0KICAgIC0JICog
dGhhdCB1c2Ugdm9pZCogZ2VuZXJpYyBwb2ludGVycy4gIEl0IHdvcmtzIHdpdGggdGhlIGxhdHRl
cg0KICAgIC0JICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFz
c2lnbm1lbnQgZnJvbQ0KICAgIC0JICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRl
YWwgd2l0aCBhcmd1bWVudCBjb252ZXJzaW9ucw0KICAgIC0JICogYXMgdGhvdWdoIGRvaW5nIGFu
IGFzc2lnbm1lbnQuDQogICAgLQkgKi8NCiAgICAtCXJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7
DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgeXlmcmVlICh2b2lkICogcHRyICkNCiAgICAtew0K
ICAgIC0JCQlmcmVlKCAoY2hhciAqKSBwdHIgKTsJLyogc2VlIHl5cmVhbGxvYygpIGZvciAoY2hh
ciAqKSBjYXN0ICovDQogICAgLX0NCiAgICAtDQogICAgLSNkZWZpbmUgWVlUQUJMRVNfTkFNRSAi
eXl0YWJsZXMiDQogICAgLQ0KICAgIC1zdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNo
YXIgKmluLCBzaXplX3QgbikNCiAgICAtew0KICAgIC0JY2hhciAqb3V0Ow0KICAgIC0JaW50IGM7
DQogICAgLQljaGFyIGMyOw0KICAgIC0JY29uc3QgY2hhciAqcmVzdCwgKmVuZDsNCiAgICAtDQog
ICAgLQluZXdfc3RyaW5nKCk7DQogICAgLQlhcHBlbmRfc3RyaW5nKGluLCBuKTsNCiAgICAtDQog
ICAgLQkvKiBnZXQgdGhlIHdob2xlIGxpbmUgYmVjYXVzZSB3ZSBkbyBub3Qga25vdyB0aGUgZW5k
IG9mIHRva2VuLiAqLw0KICAgIC0Jd2hpbGUgKChjID0gaW5wdXQoKSkgIT0gRU9GKSB7DQogICAg
LQkJaWYgKGMgPT0gJ1xuJykgew0KICAgIC0JCQl1bnB1dChjKTsNCiAgICAtCQkJYnJlYWs7DQog
ICAgLQkJfQ0KICAgIC0JCWMyID0gYzsNCiAgICAtCQlhcHBlbmRfc3RyaW5nKCZjMiwgMSk7DQog
ICAgLQl9DQogICAgLQ0KICAgIC0JcmVzdCA9IHRleHQ7DQogICAgLQlvdXQgPSBleHBhbmRfb25l
X3Rva2VuKCZyZXN0KTsNCiAgICAtDQogICAgLQkvKiBwdXNoIGJhY2sgdW51c2VkIGNoYXJhY3Rl
cnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLw0KICAgIC0JZW5kID0gcmVzdCArIHN0cmxlbihyZXN0
KTsNCiAgICAtCXdoaWxlIChlbmQgPiByZXN0KQ0KICAgIC0JCXVucHV0KCotLWVuZCk7DQogICAg
LQ0KICAgIC0JZnJlZSh0ZXh0KTsNCiAgICAtDQogICAgLQlyZXR1cm4gb3V0Ow0KICAgIC19DQog
ICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKGNvbnN0IGNoYXIg
KnN0cikNCiAgICAtew0KICAgIC0JY29uc3QgY2hhciAqZW5kOw0KICAgIC0JY2hhciAqcmVzOw0K
ICAgIC0NCiAgICAtCXN0cisrOw0KICAgIC0NCiAgICAtCXJlcyA9IGV4cGFuZF9kb2xsYXIoJnN0
cik7DQogICAgLQ0KICAgIC0JLyogcHVzaCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRoZSBp
bnB1dCBzdHJlYW0gKi8NCiAgICAtCWVuZCA9IHN0ciArIHN0cmxlbihzdHIpOw0KICAgIC0Jd2hp
bGUgKGVuZCA+IHN0cikNCiAgICAtCQl1bnB1dCgqLS1lbmQpOw0KICAgIC0NCiAgICAtCWFwcGVu
ZF9zdHJpbmcocmVzLCBzdHJsZW4ocmVzKSk7DQogICAgLQ0KICAgIC0JZnJlZShyZXMpOw0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKQ0KICAgIC17DQogICAg
LQluZXdfc3RyaW5nKCk7DQogICAgLQlsYXN0X3RzID0gZmlyc3RfdHMgPSAwOw0KICAgIC0JQkVH
SU4oSEVMUCk7DQogICAgLX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHpjb25mX2VuZGhlbHAo
dm9pZCkNCiAgICAtew0KICAgIC0JeXlsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgLQlCRUdJTihJ
TklUSUFMKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyoNCiAgICAtICogVHJ5IHRvIG9wZW4gc3Bl
Y2lmaWVkIGZpbGUgd2l0aCBmb2xsb3dpbmcgbmFtZXM6DQogICAgLSAqIC4vbmFtZQ0KICAgIC0g
KiAkKHNyY3RyZWUpL25hbWUNCiAgICAtICogVGhlIGxhdHRlciBpcyB1c2VkIHdoZW4gc3JjdHJl
ZSBpcyBzZXBhcmF0ZSBmcm9tIG9ianRyZWUNCiAgICAtICogd2hlbiBjb21waWxpbmcgdGhlIGtl
cm5lbC4NCiAgICAtICogUmV0dXJuIE5VTEwgaWYgZmlsZSBpcyBub3QgZm91bmQuDQogICAgLSAq
Lw0KICAgIC1GSUxFICp6Y29uZl9mb3Blbihjb25zdCBjaGFyICpuYW1lKQ0KICAgIC17DQogICAg
LQljaGFyICplbnYsIGZ1bGxuYW1lW1BBVEhfTUFYKzFdOw0KICAgIC0JRklMRSAqZjsNCiAgICAt
DQogICAgLQlmID0gZm9wZW4obmFtZSwgInIiKTsNCiAgICAtCWlmICghZiAmJiBuYW1lICE9IE5V
TEwgJiYgbmFtZVswXSAhPSAnLycpIHsNCiAgICAtCQllbnYgPSBnZXRlbnYoU1JDVFJFRSk7DQog
ICAgLQkJaWYgKGVudikgew0KICAgIC0JCQlzcHJpbnRmKGZ1bGxuYW1lLCAiJXMvJXMiLCBlbnYs
IG5hbWUpOw0KICAgIC0JCQlmID0gZm9wZW4oZnVsbG5hbWUsICJyIik7DQogICAgLQkJfQ0KICAg
IC0JfQ0KICAgIC0JcmV0dXJuIGY7DQogICAgLX0NCiAgICAtDQogICAgLXZvaWQgemNvbmZfaW5p
dHNjYW4oY29uc3QgY2hhciAqbmFtZSkNCiAgICAtew0KICAgIC0JeXlpbiA9IHpjb25mX2ZvcGVu
KG5hbWUpOw0KICAgIC0JaWYgKCF5eWluKSB7DQogICAgLQkJZnByaW50ZihzdGRlcnIsICJjYW4n
dCBmaW5kIGZpbGUgJXNcbiIsIG5hbWUpOw0KICAgIC0JCWV4aXQoMSk7DQogICAgLQl9DQogICAg
LQ0KICAgIC0JY3VycmVudF9idWYgPSB4bWFsbG9jKHNpemVvZigqY3VycmVudF9idWYpKTsNCiAg
ICAtCW1lbXNldChjdXJyZW50X2J1ZiwgMCwgc2l6ZW9mKCpjdXJyZW50X2J1ZikpOw0KICAgIC0N
CiAgICAtCWN1cnJlbnRfZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOw0KICAgIC0JeXlsaW5lbm8g
PSAxOw0KICAgIC19DQogICAgLQ0KICAgIC12b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIg
Km5hbWUpDQogICAgLXsNCiAgICAtCXN0cnVjdCBmaWxlICppdGVyOw0KICAgIC0Jc3RydWN0IGZp
bGUgKmZpbGUgPSBmaWxlX2xvb2t1cChuYW1lKTsNCiAgICAtCXN0cnVjdCBidWZmZXIgKmJ1ZiA9
IHhtYWxsb2Moc2l6ZW9mKCpidWYpKTsNCiAgICAtCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVm
KSk7DQogICAgLQ0KICAgIC0JY3VycmVudF9idWYtPnN0YXRlID0gWVlfQ1VSUkVOVF9CVUZGRVI7
DQogICAgLQl5eWluID0gemNvbmZfZm9wZW4oZmlsZS0+bmFtZSk7DQogICAgLQlpZiAoIXl5aW4p
IHsNCiAgICAtCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBjYW4ndCBvcGVuIGZpbGUgXCIlc1wi
XG4iLA0KICAgIC0JCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLCBmaWxlLT5uYW1l
KTsNCiAgICAtCQlleGl0KDEpOw0KICAgIC0JfQ0KICAgIC0JeXlfc3dpdGNoX3RvX2J1ZmZlcih5
eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUpKTsNCiAgICAtCWJ1Zi0+cGFyZW50ID0g
Y3VycmVudF9idWY7DQogICAgLQljdXJyZW50X2J1ZiA9IGJ1ZjsNCiAgICAtDQogICAgLQljdXJy
ZW50X2ZpbGUtPmxpbmVubyA9IHl5bGluZW5vOw0KICAgIC0JZmlsZS0+cGFyZW50ID0gY3VycmVu
dF9maWxlOw0KICAgIC0NCiAgICAtCWZvciAoaXRlciA9IGN1cnJlbnRfZmlsZTsgaXRlcjsgaXRl
ciA9IGl0ZXItPnBhcmVudCkgew0KICAgIC0JCWlmICghc3RyY21wKGl0ZXItPm5hbWUsIGZpbGUt
Pm5hbWUpKSB7DQogICAgLQkJCWZwcmludGYoc3RkZXJyLA0KICAgIC0JCQkJIlJlY3Vyc2l2ZSBp
bmNsdXNpb24gZGV0ZWN0ZWQuXG4iDQogICAgLQkJCQkiSW5jbHVzaW9uIHBhdGg6XG4iDQogICAg
LQkJCQkiICBjdXJyZW50IGZpbGUgOiAlc1xuIiwgZmlsZS0+bmFtZSk7DQogICAgLQkJCWl0ZXIg
PSBmaWxlOw0KICAgIC0JCQlkbyB7DQogICAgLQkJCQlpdGVyID0gaXRlci0+cGFyZW50Ow0KICAg
IC0JCQkJZnByaW50ZihzdGRlcnIsICIgIGluY2x1ZGVkIGZyb206ICVzOiVkXG4iLA0KICAgIC0J
CQkJCWl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubyAtIDEpOw0KICAgIC0JCQl9IHdoaWxlIChzdHJj
bXAoaXRlci0+bmFtZSwgZmlsZS0+bmFtZSkpOw0KICAgIC0JCQlleGl0KDEpOw0KICAgIC0JCX0N
CiAgICAtCX0NCiAgICAtDQogICAgLQl5eWxpbmVubyA9IDE7DQogICAgLQljdXJyZW50X2ZpbGUg
PSBmaWxlOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZv
aWQpDQogICAgLXsNCiAgICAtCXN0cnVjdCBidWZmZXIgKnBhcmVudDsNCiAgICAtDQogICAgLQlj
dXJyZW50X2ZpbGUgPSBjdXJyZW50X2ZpbGUtPnBhcmVudDsNCiAgICAtCWlmIChjdXJyZW50X2Zp
bGUpDQogICAgLQkJeXlsaW5lbm8gPSBjdXJyZW50X2ZpbGUtPmxpbmVubzsNCiAgICAtDQogICAg
LQlwYXJlbnQgPSBjdXJyZW50X2J1Zi0+cGFyZW50Ow0KICAgIC0JaWYgKHBhcmVudCkgew0KICAg
IC0JCWZjbG9zZSh5eWluKTsNCiAgICAtCQl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVG
RkVSKTsNCiAgICAtCQl5eV9zd2l0Y2hfdG9fYnVmZmVyKHBhcmVudC0+c3RhdGUpOw0KICAgIC0J
fQ0KICAgIC0JZnJlZShjdXJyZW50X2J1Zik7DQogICAgLQljdXJyZW50X2J1ZiA9IHBhcmVudDsN
CiAgICAtfQ0KICAgIC0NCiAgICAtaW50IHpjb25mX2xpbmVubyh2b2lkKQ0KICAgIC17DQogICAg
LQlyZXR1cm4gY3VycmVudF9wb3MubGluZW5vOw0KICAgIC19DQogICAgLQ0KICAgIC1jb25zdCBj
aGFyICp6Y29uZl9jdXJuYW1lKHZvaWQpDQogICAgLXsNCiAgICAtCXJldHVybiBjdXJyZW50X3Bv
cy5maWxlID8gY3VycmVudF9wb3MuZmlsZS0+bmFtZSA6ICI8bm9uZT4iOw0KICAgIC19DQogICAg
LQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3pjb25mLnRhYi5jIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy96Y29uZi50YWIuYw0KICAgIGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IGQxY2ZiY2IuLjAwMDAwMDANCiAgICAtLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L3pjb25mLnRhYi5jDQogICAgKysrIC9kZXYvbnVsbA0KICAgIEBAIC0xLDI1MDQgKzAsMCBA
QA0KICAgIC0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMy4wLjQuICAqLw0K
ICAgIC0NCiAgICAtLyogQmlzb24gaW1wbGVtZW50YXRpb24gZm9yIFlhY2MtbGlrZSBwYXJzZXJz
IGluIEMNCiAgICAtDQogICAgLSAgIENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAyMDAw
LTIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQogICAgLQ0KICAgIC0gICBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQ0KICAgIC0gICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KICAgIC0gICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcg0KICAgIC0gICAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KICAgIC0NCiAgICAtICAgVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
DQogICAgLSAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mDQogICAgLSAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiAgICAtICAgR05VIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiAgICAtDQogICAgLSAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQogICAg
LSAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251
Lm9yZy9saWNlbnNlcy8+LiAgKi8NCiAgICAtDQogICAgLS8qIEFzIGEgc3BlY2lhbCBleGNlcHRp
b24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhhdCBjb250YWlucw0KICAgIC0gICBw
YXJ0IG9yIGFsbCBvZiB0aGUgQmlzb24gcGFyc2VyIHNrZWxldG9uIGFuZCBkaXN0cmlidXRlIHRo
YXQgd29yaw0KICAgIC0gICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0
aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGENCiAgICAtICAgcGFyc2VyIGdlbmVyYXRvciB1c2luZyB0
aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YNCiAgICAtICAgYXMgYSBw
YXJzZXIgc2tlbGV0b24uICBBbHRlcm5hdGl2ZWx5LCBpZiB5b3UgbW9kaWZ5IG9yIHJlZGlzdHJp
YnV0ZQ0KICAgIC0gICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91
ciBvcHRpb24pIHJlbW92ZSB0aGlzDQogICAgLSAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3
aWxsIGNhdXNlIHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZw0KICAgIC0gICBCaXNvbiBv
dXRwdXQgZmlsZXMgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0K
ICAgIC0gICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4NCiAgICAtDQog
ICAgLSAgIFRoaXMgc3BlY2lhbCBleGNlcHRpb24gd2FzIGFkZGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24gaW4NCiAgICAtICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLw0KICAg
IC0NCiAgICAtLyogQyBMQUxSKDEpIHBhcnNlciBza2VsZXRvbiB3cml0dGVuIGJ5IFJpY2hhcmQg
U3RhbGxtYW4sIGJ5DQogICAgLSAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQg
InNlbWFudGljIiBwYXJzZXIuICAqLw0KICAgIC0NCiAgICAtLyogQWxsIHN5bWJvbHMgZGVmaW5l
ZCBiZWxvdyBzaG91bGQgYmVnaW4gd2l0aCB5eSBvciBZWSwgdG8gYXZvaWQNCiAgICAtICAgaW5m
cmluZ2luZyBvbiB1c2VyIG5hbWUgc3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9y
IGxvY2FsDQogICAgLSAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhw
YW5kZWQgYnkgdXNlciBtYWNyb3MuDQogICAgLSAgIFRoZXJlIGFyZSBzb21lIHVuYXZvaWRhYmxl
IGV4Y2VwdGlvbnMgd2l0aGluIGluY2x1ZGUgZmlsZXMgdG8NCiAgICAtICAgZGVmaW5lIG5lY2Vz
c2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVkICJJTkZSSU5HRVMgT04NCiAgICAt
ICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4gICovDQogICAgLQ0KICAgIC0vKiBJZGVudGlmeSBC
aXNvbiBvdXRwdXQuICAqLw0KICAgIC0jZGVmaW5lIFlZQklTT04gMQ0KICAgIC0NCiAgICAtLyog
Qmlzb24gdmVyc2lvbi4gICovDQogICAgLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIzLjAuNCIN
CiAgICAtDQogICAgLS8qIFNrZWxldG9uIG5hbWUuICAqLw0KICAgIC0jZGVmaW5lIFlZU0tFTEVU
T05fTkFNRSAieWFjYy5jIg0KICAgIC0NCiAgICAtLyogUHVyZSBwYXJzZXJzLiAgKi8NCiAgICAt
I2RlZmluZSBZWVBVUkUgMA0KICAgIC0NCiAgICAtLyogUHVzaCBwYXJzZXJzLiAgKi8NCiAgICAt
I2RlZmluZSBZWVBVU0ggMA0KICAgIC0NCiAgICAtLyogUHVsbCBwYXJzZXJzLiAgKi8NCiAgICAt
I2RlZmluZSBZWVBVTEwgMQ0KICAgIC0NCiAgICAtDQogICAgLQ0KICAgIC0NCiAgICAtLyogQ29w
eSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovDQogICAgLQ0KICAgIC0N
CiAgICAtLyoNCiAgICAtICogQ29weXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVs
QGxpbnV4LW02OGsub3JnPg0KICAgIC0gKiBSZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBHUEwgdjIuMC4NCiAgICAtICovDQogICAgLQ0KICAgIC0jaW5jbHVkZSA8Y3R5cGUuaD4N
CiAgICAtI2luY2x1ZGUgPHN0ZGFyZy5oPg0KICAgIC0jaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAt
I2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIC0jaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgLSNpbmNs
dWRlIDxzdGRib29sLmg+DQogICAgLQ0KICAgIC0jaW5jbHVkZSAibGtjLmgiDQogICAgLQ0KICAg
IC0jZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAobWFzaykpIHByaW50
ZihmbXQpDQogICAgLQ0KICAgIC0jZGVmaW5lIFBSSU5URAkJMHgwMDAxDQogICAgLSNkZWZpbmUg
REVCVUdfUEFSU0UJMHgwMDAyDQogICAgLQ0KICAgIC1pbnQgY2RlYnVnID0gUFJJTlREOw0KICAg
IC0NCiAgICAtaW50IHl5bGV4KHZvaWQpOw0KICAgIC1zdGF0aWMgdm9pZCB5eWVycm9yKGNvbnN0
IGNoYXIgKmVycik7DQogICAgLXN0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJy
LCAuLi4pOw0KICAgIC1zdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4u
Lik7DQogICAgLXN0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKGNvbnN0IHN0cnVjdCBrY29uZl9p
ZCAqaWQsIGludCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pOw0KICAgIC0NCiAgICAtc3RydWN0
IHN5bWJvbCAqc3ltYm9sX2hhc2hbU1lNQk9MX0hBU0hTSVpFXTsNCiAgICAtDQogICAgLXN0YXRp
YyBzdHJ1Y3QgbWVudSAqY3VycmVudF9tZW51LCAqY3VycmVudF9lbnRyeTsNCiAgICAtDQogICAg
LQ0KICAgIC0NCiAgICAtDQogICAgLSMgaWZuZGVmIFlZX05VTExQVFINCiAgICAtIyAgaWYgZGVm
aW5lZCBfX2NwbHVzcGx1cyAmJiAyMDExMDNMIDw9IF9fY3BsdXNwbHVzDQogICAgLSMgICBkZWZp
bmUgWVlfTlVMTFBUUiBudWxscHRyDQogICAgLSMgIGVsc2UNCiAgICAtIyAgIGRlZmluZSBZWV9O
VUxMUFRSIDANCiAgICAtIyAgZW5kaWYNCiAgICAtIyBlbmRpZg0KICAgIC0NCiAgICAtLyogRW5h
YmxpbmcgdmVyYm9zZSBlcnJvciBtZXNzYWdlcy4gICovDQogICAgLSNpZmRlZiBZWUVSUk9SX1ZF
UkJPU0UNCiAgICAtIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UNCiAgICAtIyBkZWZpbmUgWVlFUlJP
Ul9WRVJCT1NFIDENCiAgICAtI2Vsc2UNCiAgICAtIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDAN
CiAgICAtI2VuZGlmDQogICAgLQ0KICAgIC0NCiAgICAtLyogRGVidWcgdHJhY2VzLiAgKi8NCiAg
ICAtI2lmbmRlZiBZWURFQlVHDQogICAgLSMgZGVmaW5lIFlZREVCVUcgMQ0KICAgIC0jZW5kaWYN
CiAgICAtI2lmIFlZREVCVUcNCiAgICAtZXh0ZXJuIGludCB5eWRlYnVnOw0KICAgIC0jZW5kaWYN
CiAgICAtDQogICAgLS8qIFRva2VuIHR5cGUuICAqLw0KICAgIC0jaWZuZGVmIFlZVE9LRU5UWVBF
DQogICAgLSMgZGVmaW5lIFlZVE9LRU5UWVBFDQogICAgLSAgZW51bSB5eXRva2VudHlwZQ0KICAg
IC0gIHsNCiAgICAtICAgIFRfTUFJTk1FTlUgPSAyNTgsDQogICAgLSAgICBUX01FTlUgPSAyNTks
DQogICAgLSAgICBUX0VORE1FTlUgPSAyNjAsDQogICAgLSAgICBUX1NPVVJDRSA9IDI2MSwNCiAg
ICAtICAgIFRfQ0hPSUNFID0gMjYyLA0KICAgIC0gICAgVF9FTkRDSE9JQ0UgPSAyNjMsDQogICAg
LSAgICBUX0NPTU1FTlQgPSAyNjQsDQogICAgLSAgICBUX0NPTkZJRyA9IDI2NSwNCiAgICAtICAg
IFRfTUVOVUNPTkZJRyA9IDI2NiwNCiAgICAtICAgIFRfSEVMUCA9IDI2NywNCiAgICAtICAgIFRf
SEVMUFRFWFQgPSAyNjgsDQogICAgLSAgICBUX0lGID0gMjY5LA0KICAgIC0gICAgVF9FTkRJRiA9
IDI3MCwNCiAgICAtICAgIFRfREVQRU5EUyA9IDI3MSwNCiAgICAtICAgIFRfT1BUSU9OQUwgPSAy
NzIsDQogICAgLSAgICBUX1BST01QVCA9IDI3MywNCiAgICAtICAgIFRfVFlQRSA9IDI3NCwNCiAg
ICAtICAgIFRfREVGQVVMVCA9IDI3NSwNCiAgICAtICAgIFRfU0VMRUNUID0gMjc2LA0KICAgIC0g
ICAgVF9JTVBMWSA9IDI3NywNCiAgICAtICAgIFRfUkFOR0UgPSAyNzgsDQogICAgLSAgICBUX1ZJ
U0lCTEUgPSAyNzksDQogICAgLSAgICBUX09QVElPTiA9IDI4MCwNCiAgICAtICAgIFRfT04gPSAy
ODEsDQogICAgLSAgICBUX1dPUkQgPSAyODIsDQogICAgLSAgICBUX1dPUkRfUVVPVEUgPSAyODMs
DQogICAgLSAgICBUX1VORVFVQUwgPSAyODQsDQogICAgLSAgICBUX0xFU1MgPSAyODUsDQogICAg
LSAgICBUX0xFU1NfRVFVQUwgPSAyODYsDQogICAgLSAgICBUX0dSRUFURVIgPSAyODcsDQogICAg
LSAgICBUX0dSRUFURVJfRVFVQUwgPSAyODgsDQogICAgLSAgICBUX0NMT1NFX1BBUkVOID0gMjg5
LA0KICAgIC0gICAgVF9PUEVOX1BBUkVOID0gMjkwLA0KICAgIC0gICAgVF9FT0wgPSAyOTEsDQog
ICAgLSAgICBUX1ZBUklBQkxFID0gMjkyLA0KICAgIC0gICAgVF9BU1NJR04gPSAyOTMsDQogICAg
LSAgICBUX0FTU0lHTl9WQUwgPSAyOTQsDQogICAgLSAgICBUX09SID0gMjk1LA0KICAgIC0gICAg
VF9BTkQgPSAyOTYsDQogICAgLSAgICBUX0VRVUFMID0gMjk3LA0KICAgIC0gICAgVF9OT1QgPSAy
OTgNCiAgICAtICB9Ow0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLS8qIFZhbHVlIHR5cGUuICAq
Lw0KICAgIC0jaWYgISBkZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVD
TEFSRUQNCiAgICAtDQogICAgLXVuaW9uIFlZU1RZUEUNCiAgICAtew0KICAgIC0NCiAgICAtDQog
ICAgLQljaGFyICpzdHJpbmc7DQogICAgLQlzdHJ1Y3QgZmlsZSAqZmlsZTsNCiAgICAtCXN0cnVj
dCBzeW1ib2wgKnN5bWJvbDsNCiAgICAtCXN0cnVjdCBleHByICpleHByOw0KICAgIC0Jc3RydWN0
IG1lbnUgKm1lbnU7DQogICAgLQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkOw0KICAgIC0JZW51
bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOw0KICAgIC0NCiAgICAtDQogICAgLX07DQogICAgLQ0K
ICAgIC10eXBlZGVmIHVuaW9uIFlZU1RZUEUgWVlTVFlQRTsNCiAgICAtIyBkZWZpbmUgWVlTVFlQ
RV9JU19UUklWSUFMIDENCiAgICAtIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxDQogICAg
LSNlbmRpZg0KICAgIC0NCiAgICAtDQogICAgLWV4dGVybiBZWVNUWVBFIHl5bHZhbDsNCiAgICAt
DQogICAgLWludCB5eXBhcnNlICh2b2lkKTsNCiAgICAtDQogICAgLQ0KICAgIC0NCiAgICAtLyog
Q29weSB0aGUgc2Vjb25kIHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLw0KICAgIC0NCiAg
ICAtDQogICAgLS8qIEluY2x1ZGUga2NvbmZfaWQuYyBoZXJlIHNvIGl0IGNhbiBzZWUgdGhlIHRv
a2VuIGNvbnN0YW50cy4gKi8NCiAgICAtI2luY2x1ZGUgImtjb25mX2lkLmMiDQogICAgLQ0KICAg
IC0NCiAgICAtDQogICAgLSNpZmRlZiBzaG9ydA0KICAgIC0jIHVuZGVmIHNob3J0DQogICAgLSNl
bmRpZg0KICAgIC0NCiAgICAtI2lmZGVmIFlZVFlQRV9VSU5UOA0KICAgIC10eXBlZGVmIFlZVFlQ
RV9VSU5UOCB5eXR5cGVfdWludDg7DQogICAgLSNlbHNlDQogICAgLXR5cGVkZWYgdW5zaWduZWQg
Y2hhciB5eXR5cGVfdWludDg7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2lmZGVmIFlZVFlQ
RV9JTlQ4DQogICAgLXR5cGVkZWYgWVlUWVBFX0lOVDggeXl0eXBlX2ludDg7DQogICAgLSNlbHNl
DQogICAgLXR5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7DQogICAgLSNlbmRpZg0KICAg
IC0NCiAgICAtI2lmZGVmIFlZVFlQRV9VSU5UMTYNCiAgICAtdHlwZWRlZiBZWVRZUEVfVUlOVDE2
IHl5dHlwZV91aW50MTY7DQogICAgLSNlbHNlDQogICAgLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQg
aW50IHl5dHlwZV91aW50MTY7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2lmZGVmIFlZVFlQ
RV9JTlQxNg0KICAgIC10eXBlZGVmIFlZVFlQRV9JTlQxNiB5eXR5cGVfaW50MTY7DQogICAgLSNl
bHNlDQogICAgLXR5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsNCiAgICAtI2VuZGlmDQog
ICAgLQ0KICAgIC0jaWZuZGVmIFlZU0laRV9UDQogICAgLSMgaWZkZWYgX19TSVpFX1RZUEVfXw0K
ICAgIC0jICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXw0KICAgIC0jIGVsaWYgZGVmaW5l
ZCBzaXplX3QNCiAgICAtIyAgZGVmaW5lIFlZU0laRV9UIHNpemVfdA0KICAgIC0jIGVsaWYgISBk
ZWZpbmVkIFlZU0laRV9UDQogICAgLSMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMg
T04gVVNFUiBOQU1FIFNQQUNFICovDQogICAgLSMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QNCiAg
ICAtIyBlbHNlDQogICAgLSMgIGRlZmluZSBZWVNJWkVfVCB1bnNpZ25lZCBpbnQNCiAgICAtIyBl
bmRpZg0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNkZWZpbmUgWVlTSVpFX01BWElNVU0gKChZ
WVNJWkVfVCkgLTEpDQogICAgLQ0KICAgIC0jaWZuZGVmIFlZXw0KICAgIC0jIGlmIGRlZmluZWQg
WVlFTkFCTEVfTkxTICYmIFlZRU5BQkxFX05MUw0KICAgIC0jICBpZiBFTkFCTEVfTkxTDQogICAg
LSMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8NCiAgICAtIyAgIGRlZmluZSBZWV8oTXNnaWQpIGRnZXR0ZXh0ICgiYmlzb24tcnVudGltZSIs
IE1zZ2lkKQ0KICAgIC0jICBlbmRpZg0KICAgIC0jIGVuZGlmDQogICAgLSMgaWZuZGVmIFlZXw0K
ICAgIC0jICBkZWZpbmUgWVlfKE1zZ2lkKSBNc2dpZA0KICAgIC0jIGVuZGlmDQogICAgLSNlbmRp
Zg0KICAgIC0NCiAgICAtI2lmbmRlZiBZWV9BVFRSSUJVVEUNCiAgICAtIyBpZiAoZGVmaW5lZCBf
X0dOVUNfXyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K
ICAgIC0gICAgICAmJiAoMiA8IF9fR05VQ19fIHx8IChfX0dOVUNfXyA9PSAyICYmIDk2IDw9IF9f
R05VQ19NSU5PUl9fKSkpICBcDQogICAgLSAgICAgfHwgZGVmaW5lZCBfX1NVTlBST19DICYmIDB4
NTExMCA8PSBfX1NVTlBST19DDQogICAgLSMgIGRlZmluZSBZWV9BVFRSSUJVVEUoU3BlYykgX19h
dHRyaWJ1dGVfXyhTcGVjKQ0KICAgIC0jIGVsc2UNCiAgICAtIyAgZGVmaW5lIFlZX0FUVFJJQlVU
RShTcGVjKSAvKiBlbXB0eSAqLw0KICAgIC0jIGVuZGlmDQogICAgLSNlbmRpZg0KICAgIC0NCiAg
ICAtI2lmbmRlZiBZWV9BVFRSSUJVVEVfUFVSRQ0KICAgIC0jIGRlZmluZSBZWV9BVFRSSUJVVEVf
UFVSRSAgIFlZX0FUVFJJQlVURSAoKF9fcHVyZV9fKSkNCiAgICAtI2VuZGlmDQogICAgLQ0KICAg
IC0jaWZuZGVmIFlZX0FUVFJJQlVURV9VTlVTRUQNCiAgICAtIyBkZWZpbmUgWVlfQVRUUklCVVRF
X1VOVVNFRCBZWV9BVFRSSUJVVEUgKChfX3VudXNlZF9fKSkNCiAgICAtI2VuZGlmDQogICAgLQ0K
ICAgIC0jaWYgIWRlZmluZWQgX05vcmV0dXJuIFwNCiAgICAtICAgICAmJiAoIWRlZmluZWQgX19T
VERDX1ZFUlNJT05fXyB8fCBfX1NURENfVkVSU0lPTl9fIDwgMjAxMTEyKQ0KICAgIC0jIGlmIGRl
ZmluZWQgX01TQ19WRVIgJiYgMTIwMCA8PSBfTVNDX1ZFUg0KICAgIC0jICBkZWZpbmUgX05vcmV0
dXJuIF9fZGVjbHNwZWMgKG5vcmV0dXJuKQ0KICAgIC0jIGVsc2UNCiAgICAtIyAgZGVmaW5lIF9O
b3JldHVybiBZWV9BVFRSSUJVVEUgKChfX25vcmV0dXJuX18pKQ0KICAgIC0jIGVuZGlmDQogICAg
LSNlbmRpZg0KICAgIC0NCiAgICAtLyogU3VwcHJlc3MgdW51c2VkLXZhcmlhYmxlIHdhcm5pbmdz
IGJ5ICJ1c2luZyIgRS4gICovDQogICAgLSNpZiAhIGRlZmluZWQgbGludCB8fCBkZWZpbmVkIF9f
R05VQ19fDQogICAgLSMgZGVmaW5lIFlZVVNFKEUpICgodm9pZCkgKEUpKQ0KICAgIC0jZWxzZQ0K
ICAgIC0jIGRlZmluZSBZWVVTRShFKSAvKiBlbXB0eSAqLw0KICAgIC0jZW5kaWYNCiAgICAtDQog
ICAgLSNpZiBkZWZpbmVkIF9fR05VQ19fICYmIDQwNyA8PSBfX0dOVUNfXyAqIDEwMCArIF9fR05V
Q19NSU5PUl9fDQogICAgLS8qIFN1cHByZXNzIGFuIGluY29ycmVjdCBkaWFnbm9zdGljIGFib3V0
IHl5bHZhbCBiZWluZyB1bmluaXRpYWxpemVkLiAgKi8NCiAgICAtIyBkZWZpbmUgWVlfSUdOT1JF
X01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4gXA0KICAgIC0gICAgX1ByYWdtYSAoIkdDQyBkaWFn
bm9zdGljIHB1c2giKSBcDQogICAgLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0aWMgaWdub3Jl
ZCBcIi1XdW5pbml0aWFsaXplZFwiIilcDQogICAgLSAgICBfUHJhZ21hICgiR0NDIGRpYWdub3N0
aWMgaWdub3JlZCBcIi1XbWF5YmUtdW5pbml0aWFsaXplZFwiIikNCiAgICAtIyBkZWZpbmUgWVlf
SUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EIFwNCiAgICAtICAgIF9QcmFnbWEgKCJHQ0Mg
ZGlhZ25vc3RpYyBwb3AiKQ0KICAgIC0jZWxzZQ0KICAgIC0jIGRlZmluZSBZWV9JTklUSUFMX1ZB
TFVFKFZhbHVlKSBWYWx1ZQ0KICAgIC0jZW5kaWYNCiAgICAtI2lmbmRlZiBZWV9JR05PUkVfTUFZ
QkVfVU5JTklUSUFMSVpFRF9CRUdJTg0KICAgIC0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5J
TklUSUFMSVpFRF9CRUdJTg0KICAgIC0jIGRlZmluZSBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFM
SVpFRF9FTkQNCiAgICAtI2VuZGlmDQogICAgLSNpZm5kZWYgWVlfSU5JVElBTF9WQUxVRQ0KICAg
IC0jIGRlZmluZSBZWV9JTklUSUFMX1ZBTFVFKFZhbHVlKSAvKiBOb3RoaW5nLiAqLw0KICAgIC0j
ZW5kaWYNCiAgICAtDQogICAgLQ0KICAgIC0jaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlF
UlJPUl9WRVJCT1NFDQogICAgLQ0KICAgIC0vKiBUaGUgcGFyc2VyIGludm9rZXMgYWxsb2NhIG9y
IG1hbGxvYzsgZGVmaW5lIHRoZSBuZWNlc3Nhcnkgc3ltYm9scy4gICovDQogICAgLQ0KICAgIC0j
IGlmZGVmIFlZU1RBQ0tfVVNFX0FMTE9DQQ0KICAgIC0jICBpZiBZWVNUQUNLX1VTRV9BTExPQ0EN
CiAgICAtIyAgIGlmZGVmIF9fR05VQ19fDQogICAgLSMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0Mg
X19idWlsdGluX2FsbG9jYQ0KICAgIC0jICAgZWxpZiBkZWZpbmVkIF9fQlVJTFRJTl9WQV9BUkdf
SU5DUg0KICAgIC0jICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBO
QU1FIFNQQUNFICovDQogICAgLSMgICBlbGlmIGRlZmluZWQgX0FJWA0KICAgIC0jICAgIGRlZmlu
ZSBZWVNUQUNLX0FMTE9DIF9fYWxsb2NhDQogICAgLSMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIN
CiAgICAtIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBT
UEFDRSAqLw0KICAgIC0jICAgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQ0KICAgIC0jICAgZWxzZQ0K
ICAgIC0jICAgIGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQ0KICAgIC0jICAgIGlmICEgZGVm
aW5lZCBfQUxMT0NBX0ggJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUw0KICAgIC0jICAgICBpbmNs
dWRlIDxzdGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgIC0g
ICAgICAvKiBVc2UgRVhJVF9TVUNDRVNTIGFzIGEgd2l0bmVzcyBmb3Igc3RkbGliLmguICAqLw0K
ICAgIC0jICAgICBpZm5kZWYgRVhJVF9TVUNDRVNTDQogICAgLSMgICAgICBkZWZpbmUgRVhJVF9T
VUNDRVNTIDANCiAgICAtIyAgICAgZW5kaWYNCiAgICAtIyAgICBlbmRpZg0KICAgIC0jICAgZW5k
aWYNCiAgICAtIyAgZW5kaWYNCiAgICAtIyBlbmRpZg0KICAgIC0NCiAgICAtIyBpZmRlZiBZWVNU
QUNLX0FMTE9DDQogICAgLSAgIC8qIFBhY2lmeSBHQ0MncyAnZW1wdHkgaWYtYm9keScgd2Fybmlu
Zy4gICovDQogICAgLSMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8qIGVtcHR5ICov
OyB9IHdoaWxlICgwKQ0KICAgIC0jICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNDQogICAg
LSAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2UgYXQgdGhl
IGJvdHRvbSBvZiB0aGUgc3RhY2ssDQogICAgLSAgICAgICBhbmQgYSBwYWdlIHNpemUgY2FuIGJl
IGFzIHNtYWxsIGFzIDQwOTYgYnl0ZXMuICBTbyB3ZSBjYW5ub3Qgc2FmZWx5DQogICAgLSAgICAg
ICBpbnZva2UgYWxsb2NhIChOKSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNt
YWxsZXIgbnVtYmVyDQogICAgLSAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxs
b2NhdGVkIHRlbXBvcmFyeSBzdGFjayBzbG90cy4gICovDQogICAgLSMgICBkZWZpbmUgWVlTVEFD
S19BTExPQ19NQVhJTVVNIDQwMzIgLyogcmVhc29uYWJsZSBjaXJjYSAyMDA2ICovDQogICAgLSMg
IGVuZGlmDQogICAgLSMgZWxzZQ0KICAgIC0jICBkZWZpbmUgWVlTVEFDS19BTExPQyBZWU1BTExP
Qw0KICAgIC0jICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQ0KICAgIC0jICBpZm5kZWYgWVlT
VEFDS19BTExPQ19NQVhJTVVNDQogICAgLSMgICBkZWZpbmUgWVlTVEFDS19BTExPQ19NQVhJTVVN
IFlZU0laRV9NQVhJTVVNDQogICAgLSMgIGVuZGlmDQogICAgLSMgIGlmIChkZWZpbmVkIF9fY3Bs
dXNwbHVzICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MgXA0KICAgIC0gICAgICAgJiYgISAoKGRl
ZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwNCiAgICAtICAgICAgICAgICAgICYm
IChkZWZpbmVkIFlZRlJFRSB8fCBkZWZpbmVkIGZyZWUpKSkNCiAgICAtIyAgIGluY2x1ZGUgPHN0
ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovDQogICAgLSMgICBpZm5k
ZWYgRVhJVF9TVUNDRVNTDQogICAgLSMgICAgZGVmaW5lIEVYSVRfU1VDQ0VTUyAwDQogICAgLSMg
ICBlbmRpZg0KICAgIC0jICBlbmRpZg0KICAgIC0jICBpZm5kZWYgWVlNQUxMT0MNCiAgICAtIyAg
IGRlZmluZSBZWU1BTExPQyBtYWxsb2MNCiAgICAtIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYg
ISBkZWZpbmVkIEVYSVRfU1VDQ0VTUw0KICAgIC12b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgIC0jICAgZW5kaWYNCiAgICAtIyAg
ZW5kaWYNCiAgICAtIyAgaWZuZGVmIFlZRlJFRQ0KICAgIC0jICAgZGVmaW5lIFlZRlJFRSBmcmVl
DQogICAgLSMgICBpZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTDQog
ICAgLXZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
Lw0KICAgIC0jICAgZW5kaWYNCiAgICAtIyAgZW5kaWYNCiAgICAtIyBlbmRpZg0KICAgIC0jZW5k
aWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJCT1NFICovDQogICAgLQ0K
ICAgIC0NCiAgICAtI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcDQogICAgLSAgICAgJiYgKCEg
ZGVmaW5lZCBfX2NwbHVzcGx1cyBcDQogICAgLSAgICAgICAgIHx8IChkZWZpbmVkIFlZU1RZUEVf
SVNfVFJJVklBTCAmJiBZWVNUWVBFX0lTX1RSSVZJQUwpKSkNCiAgICAtDQogICAgLS8qIEEgdHlw
ZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQgZm9yIGFueSBzdGFjayBtZW1iZXIuICAqLw0KICAg
IC11bmlvbiB5eWFsbG9jDQogICAgLXsNCiAgICAtICB5eXR5cGVfaW50MTYgeXlzc19hbGxvYzsN
CiAgICAtICBZWVNUWVBFIHl5dnNfYWxsb2M7DQogICAgLX07DQogICAgLQ0KICAgIC0vKiBUaGUg
c2l6ZSBvZiB0aGUgbWF4aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhl
IG5leHQuICAqLw0KICAgIC0jIGRlZmluZSBZWVNUQUNLX0dBUF9NQVhJTVVNIChzaXplb2YgKHVu
aW9uIHl5YWxsb2MpIC0gMSkNCiAgICAtDQogICAgLS8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxh
cmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFja3MsIGVhY2ggd2l0aA0KICAgIC0gICBOIGVs
ZW1lbnRzLiAgKi8NCiAgICAtIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcDQogICAgLSAgICAg
KChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpKSBcDQogICAg
LSAgICAgICsgWVlTVEFDS19HQVBfTUFYSU1VTSkNCiAgICAtDQogICAgLSMgZGVmaW5lIFlZQ09Q
WV9ORUVERUQgMQ0KICAgIC0NCiAgICAtLyogUmVsb2NhdGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxv
Y2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlDQogICAgLSAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJ
WkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUgdGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZg0KICAgIC0g
ICBlbGVtZW50cyBpbiB0aGUgc3RhY2ssIGFuZCBZWVBUUiBnaXZlcyB0aGUgbmV3IGxvY2F0aW9u
IG9mIHRoZQ0KICAgIC0gICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9wZXJseSBhbGln
bmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dA0KICAgIC0gICBzdGFjay4gICovDQogICAgLSMgZGVm
aW5lIFlZU1RBQ0tfUkVMT0NBVEUoU3RhY2tfYWxsb2MsIFN0YWNrKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwNCiAgICAtICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0gICAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
DQogICAgLSAgICAgICAgWVlTSVpFX1QgeXluZXdieXRlczsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICAgICAgICBZWUNPUFkgKCZ5eXB0ci0+U3Rh
Y2tfYWxsb2MsIFN0YWNrLCB5eXNpemUpOyAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0gICAg
ICAgIFN0YWNrID0gJnl5cHRyLT5TdGFja19hbGxvYzsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcDQogICAgLSAgICAgICAgeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6
ZW9mICgqU3RhY2spICsgWVlTVEFDS19HQVBfTUFYSU1VTTsgXA0KICAgIC0gICAgICAgIHl5cHRy
ICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0cik7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcDQogICAgLSAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICAgIHdoaWxlICgwKQ0KICAgIC0NCiAg
ICAtI2VuZGlmDQogICAgLQ0KICAgIC0jaWYgZGVmaW5lZCBZWUNPUFlfTkVFREVEICYmIFlZQ09Q
WV9ORUVERUQNCiAgICAtLyogQ29weSBDT1VOVCBvYmplY3RzIGZyb20gU1JDIHRvIERTVC4gIFRo
ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRvDQogICAgLSAgIG5vdCBvdmVybGFwLiAgKi8NCiAg
ICAtIyBpZm5kZWYgWVlDT1BZDQogICAgLSMgIGlmIGRlZmluZWQgX19HTlVDX18gJiYgMSA8IF9f
R05VQ19fDQogICAgLSMgICBkZWZpbmUgWVlDT1BZKERzdCwgU3JjLCBDb3VudCkgXA0KICAgIC0g
ICAgICBfX2J1aWx0aW5fbWVtY3B5IChEc3QsIFNyYywgKENvdW50KSAqIHNpemVvZiAoKihTcmMp
KSkNCiAgICAtIyAgZWxzZQ0KICAgIC0jICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQp
ICAgICAgICAgICAgICBcDQogICAgLSAgICAgIGRvICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwNCiAgICAtICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXA0KICAgIC0gICAgICAgICAgWVlTSVpFX1QgeXlpOyAgICAgICAgICAgICAg
ICAgICAgICAgICBcDQogICAgLSAgICAgICAgICBmb3IgKHl5aSA9IDA7IHl5aSA8IChDb3VudCk7
IHl5aSsrKSAgIFwNCiAgICAtICAgICAgICAgICAgKERzdClbeXlpXSA9IChTcmMpW3l5aV07ICAg
ICAgICAgICAgXA0KICAgIC0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcDQogICAgLSAgICAgIHdoaWxlICgwKQ0KICAgIC0jICBlbmRpZg0KICAgIC0jIGVu
ZGlmDQogICAgLSNlbmRpZiAvKiAhWVlDT1BZX05FRURFRCAqLw0KICAgIC0NCiAgICAtLyogWVlG
SU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLiAgKi8NCiAgICAt
I2RlZmluZSBZWUZJTkFMICAxMQ0KICAgIC0vKiBZWUxBU1QgLS0gTGFzdCBpbmRleCBpbiBZWVRB
QkxFLiAgKi8NCiAgICAtI2RlZmluZSBZWUxBU1QgICAzMzINCiAgICAtDQogICAgLS8qIFlZTlRP
S0VOUyAtLSBOdW1iZXIgb2YgdGVybWluYWxzLiAgKi8NCiAgICAtI2RlZmluZSBZWU5UT0tFTlMg
IDQ0DQogICAgLS8qIFlZTk5UUyAtLSBOdW1iZXIgb2Ygbm9udGVybWluYWxzLiAgKi8NCiAgICAt
I2RlZmluZSBZWU5OVFMgIDUzDQogICAgLS8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4g
ICovDQogICAgLSNkZWZpbmUgWVlOUlVMRVMgIDEyOQ0KICAgIC0vKiBZWU5TVEFURVMgLS0gTnVt
YmVyIG9mIHN0YXRlcy4gICovDQogICAgLSNkZWZpbmUgWVlOU1RBVEVTICAyMTENCiAgICAtDQog
ICAgLS8qIFlZVFJBTlNMQVRFW1lZWF0gLS0gU3ltYm9sIG51bWJlciBjb3JyZXNwb25kaW5nIHRv
IFlZWCBhcyByZXR1cm5lZA0KICAgIC0gICBieSB5eWxleCwgd2l0aCBvdXQtb2YtYm91bmRzIGNo
ZWNraW5nLiAgKi8NCiAgICAtI2RlZmluZSBZWVVOREVGVE9LICAyDQogICAgLSNkZWZpbmUgWVlN
QVhVVE9LICAgMjk4DQogICAgLQ0KICAgIC0jZGVmaW5lIFlZVFJBTlNMQVRFKFlZWCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLSAgKCh1bnNp
Z25lZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVG
VE9LKQ0KICAgIC0NCiAgICAtLyogWVlUUkFOU0xBVEVbVE9LRU4tTlVNXSAtLSBTeW1ib2wgbnVt
YmVyIGNvcnJlc3BvbmRpbmcgdG8gVE9LRU4tTlVNDQogICAgLSAgIGFzIHJldHVybmVkIGJ5IHl5
bGV4LCB3aXRob3V0IG91dC1vZi1ib3VuZHMgY2hlY2tpbmcuICAqLw0KICAgIC1zdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQ4IHl5dHJhbnNsYXRlW10gPQ0KICAgIC17DQogICAgLSAgICAgICAwLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
DQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAg
ICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0g
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgLSAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQog
ICAgLSAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwNCiAgICAtICAgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAxMywg
ICAgMTQsDQogICAgLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LA0KICAgIC0gICAgICAyNSwgICAgMjYsICAgIDI3
LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDMzLCAgICAzNCwNCiAgICAt
ICAgICAgMzUsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQy
LCAgICA0Mw0KICAgIC19Ow0KICAgIC0NCiAgICAtI2lmIFlZREVCVUcNCiAgICAtICAvKiBZWVJM
SU5FW1lZTl0gLS0gU291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdhcyBkZWZpbmVk
LiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXlybGluZVtdID0NCiAgICAt
ew0KICAgIC0gICAgICAgMCwgICAxMTQsICAgMTE0LCAgIDExNCwgICAxMTYsICAgMTE2LCAgIDEy
MCwgICAxMjUsICAgMTI3LCAgIDEyOCwNCiAgICAtICAgICAxMjksICAgMTMwLCAgIDEzMSwgICAx
MzIsICAgMTM2LCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsDQogICAgLSAgICAg
MTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0NCwgICAxNDUsICAgMTQ2LCAgIDE0NywgICAx
NDgsICAgMTQ5LA0KICAgIC0gICAgIDE1MCwgICAxNTQsICAgMTU1LCAgIDE2MSwgICAxNjgsICAg
MTczLCAgIDE4MCwgICAxODksICAgMTkxLCAgIDE5MiwNCiAgICAtICAgICAxOTMsICAgMTk0LCAg
IDE5NSwgICAxOTYsICAgMTk5LCAgIDIwNywgICAyMTMsICAgMjIzLCAgIDIyOSwgICAyMzUsDQog
ICAgLSAgICAgMjQxLCAgIDI0NCwgICAyNDYsICAgMjU5LCAgIDI2MCwgICAyNjUsICAgMjc1LCAg
IDI4MCwgICAyODgsICAgMjkxLA0KICAgIC0gICAgIDI5MywgICAyOTQsICAgMjk1LCAgIDI5Niwg
ICAyOTcsICAgMzAwLCAgIDMwNiwgICAzMTcsICAgMzIzLCAgIDMzMywNCiAgICAtICAgICAzMzUs
ICAgMzQwLCAgIDM0OCwgICAzNTYsICAgMzU5LCAgIDM2MSwgICAzNjIsICAgMzYzLCAgIDM2OCwg
ICAzNzUsDQogICAgLSAgICAgMzgwLCAgIDM4OCwgICAzOTEsICAgMzkzLCAgIDM5NCwgICAzOTUs
ICAgMzk4LCAgIDQwNywgICA0MTQsICAgNDE5LA0KICAgIC0gICAgIDQyNSwgICA0NDMsICAgNDQ1
LCAgIDQ0NiwgICA0NDcsICAgNDUwLCAgIDQ1OCwgICA0NjAsICAgNDYxLCAgIDQ2NCwNCiAgICAt
ICAgICA0NzEsICAgNDczLCAgIDQ3OCwgICA0NzksICAgNDgyLCAgIDQ4MywgICA0ODQsICAgNDg4
LCAgIDQ4OSwgICA0OTIsDQogICAgLSAgICAgNDkzLCAgIDQ5NiwgICA0OTcsICAgNDk4LCAgIDQ5
OSwgICA1MDAsICAgNTAxLCAgIDUwMiwgICA1MDMsICAgNTA0LA0KICAgIC0gICAgIDUwNSwgICA1
MDYsICAgNTEwLCAgIDUxMiwgICA1MTMsICAgNTE2LCAgIDUxNywgICA1MjEsICAgNTI0LCAgIDUy
NQ0KICAgIC19Ow0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLSNpZiBZWURFQlVHIHx8IFlZRVJS
T1JfVkVSQk9TRSB8fCAwDQogICAgLS8qIFlZVE5BTUVbU1lNQk9MLU5VTV0gLS0gU3RyaW5nIG5h
bWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLg0KICAgIC0gICBGaXJzdCwgdGhlIHRlcm1pbmFs
cywgdGhlbiwgc3RhcnRpbmcgYXQgWVlOVE9LRU5TLCBub250ZXJtaW5hbHMuICAqLw0KICAgIC1z
dGF0aWMgY29uc3QgY2hhciAqY29uc3QgeXl0bmFtZVtdID0NCiAgICAtew0KICAgIC0gICIkZW5k
IiwgImVycm9yIiwgIiR1bmRlZmluZWQiLCAiVF9NQUlOTUVOVSIsICJUX01FTlUiLCAiVF9FTkRN
RU5VIiwNCiAgICAtICAiVF9TT1VSQ0UiLCAiVF9DSE9JQ0UiLCAiVF9FTkRDSE9JQ0UiLCAiVF9D
T01NRU5UIiwgIlRfQ09ORklHIiwNCiAgICAtICAiVF9NRU5VQ09ORklHIiwgIlRfSEVMUCIsICJU
X0hFTFBURVhUIiwgIlRfSUYiLCAiVF9FTkRJRiIsICJUX0RFUEVORFMiLA0KICAgIC0gICJUX09Q
VElPTkFMIiwgIlRfUFJPTVBUIiwgIlRfVFlQRSIsICJUX0RFRkFVTFQiLCAiVF9TRUxFQ1QiLCAi
VF9JTVBMWSIsDQogICAgLSAgIlRfUkFOR0UiLCAiVF9WSVNJQkxFIiwgIlRfT1BUSU9OIiwgIlRf
T04iLCAiVF9XT1JEIiwgIlRfV09SRF9RVU9URSIsDQogICAgLSAgIlRfVU5FUVVBTCIsICJUX0xF
U1MiLCAiVF9MRVNTX0VRVUFMIiwgIlRfR1JFQVRFUiIsICJUX0dSRUFURVJfRVFVQUwiLA0KICAg
IC0gICJUX0NMT1NFX1BBUkVOIiwgIlRfT1BFTl9QQVJFTiIsICJUX0VPTCIsICJUX1ZBUklBQkxF
IiwgIlRfQVNTSUdOIiwNCiAgICAtICAiVF9BU1NJR05fVkFMIiwgIlRfT1IiLCAiVF9BTkQiLCAi
VF9FUVVBTCIsICJUX05PVCIsICIkYWNjZXB0IiwgImlucHV0IiwNCiAgICAtICAic3RhcnQiLCAi
bWFpbm1lbnVfc3RtdCIsICJzdG10X2xpc3QiLCAib3B0aW9uX25hbWUiLCAiY29tbW9uX3N0bXQi
LA0KICAgIC0gICJvcHRpb25fZXJyb3IiLCAiY29uZmlnX2VudHJ5X3N0YXJ0IiwgImNvbmZpZ19z
dG10IiwNCiAgICAtICAibWVudWNvbmZpZ19lbnRyeV9zdGFydCIsICJtZW51Y29uZmlnX3N0bXQi
LCAiY29uZmlnX29wdGlvbl9saXN0IiwNCiAgICAtICAiY29uZmlnX29wdGlvbiIsICJzeW1ib2xf
b3B0aW9uIiwgInN5bWJvbF9vcHRpb25fbGlzdCIsDQogICAgLSAgInN5bWJvbF9vcHRpb25fYXJn
IiwgImNob2ljZSIsICJjaG9pY2VfZW50cnkiLCAiY2hvaWNlX2VuZCIsDQogICAgLSAgImNob2lj
ZV9zdG10IiwgImNob2ljZV9vcHRpb25fbGlzdCIsICJjaG9pY2Vfb3B0aW9uIiwgImNob2ljZV9i
bG9jayIsDQogICAgLSAgImlmX2VudHJ5IiwgImlmX2VuZCIsICJpZl9zdG10IiwgImlmX2Jsb2Nr
IiwgIm1lbnUiLCAibWVudV9lbnRyeSIsDQogICAgLSAgIm1lbnVfZW5kIiwgIm1lbnVfc3RtdCIs
ICJtZW51X2Jsb2NrIiwgInNvdXJjZV9zdG10IiwgImNvbW1lbnQiLA0KICAgIC0gICJjb21tZW50
X3N0bXQiLCAiaGVscF9zdGFydCIsICJoZWxwIiwgImRlcGVuZHNfbGlzdCIsICJkZXBlbmRzIiwN
CiAgICAtICAidmlzaWJpbGl0eV9saXN0IiwgInZpc2libGUiLCAicHJvbXB0X3N0bXRfb3B0Iiwg
InByb21wdCIsICJlbmQiLCAibmwiLA0KICAgIC0gICJpZl9leHByIiwgImV4cHIiLCAibm9uY29u
c3Rfc3ltYm9sIiwgInN5bWJvbCIsICJ3b3JkX29wdCIsDQogICAgLSAgImFzc2lnbm1lbnRfc3Rt
dCIsICJhc3NpZ25fdmFsIiwgWVlfTlVMTFBUUg0KICAgIC19Ow0KICAgIC0jZW5kaWYNCiAgICAt
DQogICAgLSMgaWZkZWYgWVlQUklOVA0KICAgIC0vKiBZWVRPS05VTVtOVU1dIC0tIChFeHRlcm5h
bCkgdG9rZW4gbnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlDQogICAgLSAgIChpbnRlcm5hbCkg
c3ltYm9sIG51bWJlciBOVU0gKHdoaWNoIG11c3QgYmUgdGhhdCBvZiBhIHRva2VuKS4gICovDQog
ICAgLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQ0KICAgIC17DQogICAg
LSAgICAgICAwLCAgIDI1NiwgICAyNTcsICAgMjU4LCAgIDI1OSwgICAyNjAsICAgMjYxLCAgIDI2
MiwgICAyNjMsICAgMjY0LA0KICAgIC0gICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAy
NjksICAgMjcwLCAgIDI3MSwgICAyNzIsICAgMjczLCAgIDI3NCwNCiAgICAtICAgICAyNzUsICAg
Mjc2LCAgIDI3NywgICAyNzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAy
ODQsDQogICAgLSAgICAgMjg1LCAgIDI4NiwgICAyODcsICAgMjg4LCAgIDI4OSwgICAyOTAsICAg
MjkxLCAgIDI5MiwgICAyOTMsICAgMjk0LA0KICAgIC0gICAgIDI5NSwgICAyOTYsICAgMjk3LCAg
IDI5OA0KICAgIC19Ow0KICAgIC0jIGVuZGlmDQogICAgLQ0KICAgIC0jZGVmaW5lIFlZUEFDVF9O
SU5GIC05Mg0KICAgIC0NCiAgICAtI2RlZmluZSB5eXBhY3RfdmFsdWVfaXNfZGVmYXVsdChZeXN0
YXRlKSBcDQogICAgLSAgKCEhKChZeXN0YXRlKSA9PSAoLTkyKSkpDQogICAgLQ0KICAgIC0jZGVm
aW5lIFlZVEFCTEVfTklORiAtODkNCiAgICAtDQogICAgLSNkZWZpbmUgeXl0YWJsZV92YWx1ZV9p
c19lcnJvcihZeXRhYmxlX3ZhbHVlKSBcDQogICAgLSAgMA0KICAgIC0NCiAgICAtICAvKiBZWVBB
Q1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2NyaWJp
bmcNCiAgICAtICAgICBTVEFURS1OVU0uICAqLw0KICAgIC1zdGF0aWMgY29uc3QgeXl0eXBlX2lu
dDE2IHl5cGFjdFtdID0NCiAgICAtew0KICAgIC0gICAgICAyMSwgICAgMzgsICAgLTkyLCAgICAg
NCwgICAtOTIsICAgLTkyLCAgIDE1NywgICAgMjMsICAgLTkyLCAgIC05MiwNCiAgICAtICAgICAt
MTksICAgLTkyLCAgIDE5MSwgICAtMTYsICAgIDM4LCAgIC0xMywgICAgMzgsICAgICA2LCAgICAy
NCwgICAgMzgsDQogICAgLSAgICAgIDQ4LCAgICA0OCwgICAgMzQsICAgIDQzLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLA0KICAgIC0gICAgIC05MiwgICAtOTIsICAg
LTkyLCAgICA5NiwgICAtOTIsICAgIDQ0LCAgIDExMSwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAg
ICAtICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsDQogICAgLSAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgIDgzLA0KICAgIC0gICAgIC05Miwg
ICAgODksICAgLTkyLCAgIDExNiwgICAtOTIsICAgMTMzLCAgIC05MiwgICAxMzQsICAgMTQ2LCAg
IC05MiwNCiAgICAtICAgICAgMzQsICAgIDM0LCAgIDExMywgICAtOTIsICAgIDczLCAgIC05Miwg
ICAxNTAsICAgIDYyLCAgIDE1MSwgICAgMzEsDQogICAgLSAgICAgMTIzLCAgIDI1OCwgICAyOTMs
ICAgMjgyLCAgICAtMiwgICAyODIsICAgMjI1LCAgIC05MiwgICAtOTIsICAgLTkyLA0KICAgIC0g
ICAgIC05MiwgICAtOTIsICAgLTkyLCAgICAzMCwgICAtOTIsICAgLTkyLCAgICAzNCwgICAgMzQs
ICAgIDY1LCAgICA2NSwNCiAgICAtICAgICAgNjUsICAgIDY1LCAgICA2NSwgICAgNjUsICAgLTky
LCAgIC05MiwgICAxNTIsICAgLTkyLCAgIDE1MywgICAxNTQsDQogICAgLSAgICAgMTEwLCAgICAz
OCwgICAgMzgsICAgIDM0LCAgICA0OCwgICAgNDgsICAgIDY1LCAgIC05MiwgICAyMDIsICAgLTky
LA0KICAgIC0gICAgIC05MiwgICAtOTIsICAgLTkyLCAgIDIwMywgICAtOTIsICAgLTkyLCAgIDE4
MSwgICAgMzgsICAgIDM4LCAgICA0OCwNCiAgICAtICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsDQogICAgLSAgICAg
LTkyLCAgIC05MiwgICAtOTIsICAgMjA1LCAgIC05MiwgICAgODAsICAgLTkyLCAgIC05MiwgICAt
OTIsICAgLTkyLA0KICAgIC0gICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIDE3OSwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICAtICAgICAtOTIsICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgIDM0LCAgIDIwNSwgICAxODUsDQog
ICAgLSAgICAgMjA1LCAgIC0xMSwgICAyMDUsICAgMjA1LCAgICA2NSwgICAgMzYsICAgMTg2LCAg
IC05MiwgICAtOTIsICAgMjA1LA0KICAgIC0gICAgIDE4NywgICAyMDUsICAgIDM0LCAgIC05Miwg
ICAxMTUsICAgMTg4LCAgIC05MiwgICAtOTIsICAgMjAxLCAgIDIxNCwNCiAgICAtICAgICAyMTUs
ICAgMjA1LCAgIDE5NiwgICAtOTIsICAgLTkyLCAgIDIxNywgICAtOTIsICAgMjE4LCAgICA4MSwg
ICAtOTIsDQogICAgLSAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDIxOSwgICAgMzgs
ICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLA0KICAgIC0gICAgIC05Mg0KICAgIC19Ow0KICAg
IC0NCiAgICAtICAvKiBZWURFRkFDVFtTVEFURS1OVU1dIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51
bWJlciBpbiBzdGF0ZSBTVEFURS1OVU0uDQogICAgLSAgICAgUGVyZm9ybWVkIHdoZW4gWVlUQUJM
RSBkb2VzIG5vdCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLiAgWmVybw0KICAgIC0gICAg
IG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eWRlZmFjdFtdID0NCiAgICAtew0KICAgIC0gICAgICAgNywgICAgIDAsICAg
MTA3LCAgICAgMCwgICAgIDMsICAgICA3LCAgICAgMCwgICAgIDcsICAgMTAyLCAgIDEwMywNCiAg
ICAtICAgICAgIDAsICAgICAxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
MTI1LCAgICAgMCwgICAgIDAsDQogICAgLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAxNSwgICAgMjAsICAgIDE2LCAgICAxNywgICAgMjIsICAgIDE4LA0KICAgIC0gICAgICAxOSwg
ICAgMjEsICAgIDIzLCAgICAgMCwgICAgMjQsICAgICAwLCAgICAgMCwgICAgIDgsICAgIDM3LCAg
ICAyNywNCiAgICAtICAgICAgMzcsICAgIDI4LCAgICA1OSwgICAgNjksICAgICA5LCAgICA3NCwg
ICAgMjUsICAgIDk2LCAgICA4MiwgICAgMTAsDQogICAgLSAgICAgIDI5LCAgICA5MSwgICAgMjYs
ICAgIDExLCAgICAzMCwgICAxMDgsICAgICAyLCAgICAgNiwgICAgMTQsICAgICAwLA0KICAgIC0g
ICAgIDEwNCwgICAgIDAsICAgMTI2LCAgICAgMCwgICAxMDUsICAgICAwLCAgIDEyMiwgICAgIDAs
ICAgICAwLCAgIDEyNCwNCiAgICAtICAgICAgIDAsICAgICAwLCAgICAgMCwgICAxMjMsICAgMTEx
LCAgIDEwNiwgICAgIDAsICAgMTI4LCAgICAgMCwgICAgIDAsDQogICAgLSAgICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA3OCwgICAgODYsICAgIDU1
LA0KICAgIC0gICAgICA4NywgICAgMzMsICAgIDM1LCAgICAgMCwgICAxMTksICAgIDcxLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwNCiAgICAtICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDEyLCAgIDEyOSwgICAgIDAsICAgIDEzLCAgICAgMCwgICAgIDAsDQogICAgLSAgICAg
ICAwLCAgICAgMCwgICAxMDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA1MSwgICAg
IDAsICAgIDQzLA0KICAgIC0gICAgICA0MiwgICAgMzgsICAgIDM5LCAgICAgMCwgICAgNDEsICAg
IDQwLCAgICAgMCwgICAgIDAsICAgMTAwLCAgICAgMCwNCiAgICAtICAgICAgNjMsICAgIDY0LCAg
ICA2MCwgICAgNjIsICAgIDYxLCAgICA3MCwgICAgNTgsICAgIDU3LCAgICA3NSwgICAgNzcsDQog
ICAgLSAgICAgIDczLCAgICA3NiwgICAgNzIsICAgMTA5LCAgICA5OCwgICAgIDAsICAgIDk3LCAg
ICA4MywgICAgODUsICAgIDgxLA0KICAgIC0gICAgICA4NCwgICAgODAsICAgIDkzLCAgICA5NCwg
ICAgOTIsICAgMTE4LCAgIDEyMCwgICAxMjEsICAgMTE3LCAgIDExMiwNCiAgICAtICAgICAxMTMs
ICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTI3LCAgICAzMiwgICAgODksICAgICAwLCAgIDEwOSwg
ICAgIDAsDQogICAgLSAgICAgMTA5LCAgIDEwOSwgICAxMDksICAgMTA5LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICA5MCwgICAgNjcsICAgMTA5LA0KICAgIC0gICAgICAgMCwgICAxMDksICAgICAw
LCAgICA5OSwgICAgIDAsICAgICAwLCAgICA0NCwgICAxMDEsICAgICAwLCAgICAgMCwNCiAgICAt
ICAgICAgIDAsICAgMTA5LCAgICA1MywgICAgNTAsICAgIDMxLCAgICAgMCwgICAgNjYsICAgICAw
LCAgIDExMCwgICAgOTUsDQogICAgLSAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAg
MCwgICAgIDAsICAgIDUyLCAgICA2NSwgICAgNjgsICAgIDQ5LA0KICAgIC0gICAgICA1NA0KICAg
IC19Ow0KICAgIC0NCiAgICAtICAvKiBZWVBHT1RPW05URVJNLU5VTV0uICAqLw0KICAgIC1zdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cGdvdG9bXSA9DQogICAgLXsNCiAgICAtICAgICAtOTIs
ICAgLTkyLCAgIDI0OSwgICAtOTIsICAgMjUyLCAgIC05MiwgICAgLTksICAgLTY3LCAgIC05Miwg
ICAtOTIsDQogICAgLSAgICAgLTkyLCAgIC05MiwgICAyMjAsICAgLTkyLCAgIC05MiwgICAtOTIs
ICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLA0KICAgIC0gICAgICAzNSwgICAtOTIsICAgLTky
LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICAt
ICAgICAtOTIsICAgMTAwLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgMTc3
LCAgIDE5NSwgICAtNjUsDQogICAgLSAgICAgLTkyLCAgIC05MiwgICAxMzcsICAgIC0xLCAgICAy
NiwgICAtOTIsICAgMTQxLCAgIC02OSwgICAtMTUsICAgLTkxLA0KICAgIC0gICAgIC05MiwgICAt
OTIsICAgLTkyDQogICAgLX07DQogICAgLQ0KICAgIC0gIC8qIFlZREVGR09UT1tOVEVSTS1OVU1d
LiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWRlZmdvdG9bXSA9DQogICAg
LXsNCiAgICAtICAgICAgLTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAzNiwgICAg
MzcsICAgMTIwLCAgICAzOCwgICAgMzksDQogICAgLSAgICAgIDQwLCAgICA0MSwgICAgNzksICAg
MTIxLCAgIDEyMiwgICAxNzUsICAgMjA2LCAgICA0MiwgICAgNDMsICAgMTM2LA0KICAgIC0gICAg
ICA0NCwgICAgODEsICAgMTMyLCAgICA4MiwgICAgNDUsICAgMTQwLCAgICA0NiwgICAgODMsICAg
IDQ3LCAgICA0OCwNCiAgICAtICAgICAxNDksICAgIDQ5LCAgICA4NSwgICAgNTAsICAgIDUxLCAg
ICA1MiwgICAxMjMsICAgMTI0LCAgICA4NiwgICAxMjUsDQogICAgLSAgICAgIDg0LCAgIDE0Niwg
ICAxNjksICAgMTcwLCAgICA1MywgICAgIDcsICAgMTgzLCAgICA3MiwgICAgNzMsICAgIDc0LA0K
ICAgIC0gICAgICA2MywgICAgNTQsICAgMTA2DQogICAgLX07DQogICAgLQ0KICAgIC0gIC8qIFlZ
VEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dIC0tIFdoYXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVN
LiAgSWYNCiAgICAtICAgICBwb3NpdGl2ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZl
LCByZWR1Y2UgdGhlIHJ1bGUgd2hvc2UNCiAgICAtICAgICBudW1iZXIgaXMgdGhlIG9wcG9zaXRl
LiAgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLw0KICAgIC1zdGF0aWMgY29uc3Qg
eXl0eXBlX2ludDE2IHl5dGFibGVbXSA9DQogICAgLXsNCiAgICAtICAgICAgMTAsICAgIDkzLCAg
ICA5NCwgICAxODIsICAgIDExLCAgICA2NywgICAgNjgsICAgMTU4LCAgIDE1OSwgICAxNjAsDQog
ICAgLSAgICAgMTYxLCAgIDE2MiwgICAxNjMsICAgIDU5LCAgIDEzMSwgICAgNjEsICAgMTM0LCAg
ICA1NywgICAgNjUsICAgMTUzLA0KICAgIC0gICAgICA1OCwgICAxNTQsICAgMTQzLCAgICA2MCwg
ICAgIDEsICAgMTc0LCAgICAgMSwgICAxNTYsICAgMTU3LCAgICA5NiwNCiAgICAtICAgICAgOTcs
ICAgLTM0LCAgIDEwOCwgICAgNjIsICAgMTQ0LCAgIC0zNCwgICAtMzQsICAgLTM0LCAgIC0zNCwg
ICAtMzQsDQogICAgLSAgICAgLTM0LCAgIC0zNCwgICAtMzQsICAgMTA5LCAgIDE3MSwgICAtMzQs
ICAgLTM0LCAgIDExMCwgICAtMzQsICAgMTExLA0KICAgIC0gICAgIDExMiwgICAxMTMsICAgMTE0
LCAgIDExNSwgICAxMTYsICAgLTM0LCAgIDExNywgICAgIDIsICAgMTE4LCAgICA1NSwNCiAgICAt
ICAgICAgNjQsICAgIDY2LCAgICA2OSwgICAxOTIsICAgMTU1LCAgICAgOCwgICAgIDksICAgMTE5
LCAgIC0zNCwgICAgNzAsDQogICAgLSAgICAgIDk2LCAgICA5NywgICAxOTMsICAgMTM1LCAgIDEz
OCwgICAgNjYsICAgMTQ3LCAgICA3MSwgICAxNTMsICAgIDc1LA0KICAgIC0gICAgIDE1NCwgICAx
MDgsICAgIDc3LCAgIDE5MSwgICAtNzksICAgLTc5LCAgIC03OSwgICAtNzksICAgLTc5LCAgIC03
OSwNCiAgICAtICAgICAtNzksICAgLTc5LCAgICA2NiwgICAgNjksICAgLTc5LCAgIC03OSwgICAx
MTAsICAgIDc2LCAgIDE4NCwgICAxNzIsDQogICAgLSAgICAgMTczLCAgIDEwNSwgICAgOTgsICAg
IDk5LCAgIDEwMCwgICAxMDEsICAgMTAyLCAgIDExOCwgICAxMzcsICAgMTQyLA0KICAgIC0gICAg
IDE2OCwgICAxNTEsICAgIDc4LCAgIDE5OCwgICAxODEsICAgMTAzLCAgIDE1MiwgICAtNzksICAg
MTM5LCAgICA4NywNCiAgICAtICAgICAxNDgsICAgIDk2LCAgICA5NywgICAtMzYsICAgMTA4LCAg
ICA4OCwgICAxNzksICAgLTM2LCAgIC0zNiwgICAtMzYsDQogICAgLSAgICAgLTM2LCAgIC0zNiwg
ICAtMzYsICAgLTM2LCAgIC0zNiwgICAxMDksICAgMTY3LCAgIC0zNiwgICAtMzYsICAgMTEwLA0K
ICAgIC0gICAgIC0zNiwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1LCAgIDExNiwg
ICAtMzYsICAgMTE3LCAgICA5NSwNCiAgICAtICAgICAxMTgsICAgMTk5LCAgICA4OSwgICAgOTYs
ICAgIDk3LCAgICA5NiwgICAgOTcsICAgIC01LCAgICAxMywgICAxMTksDQogICAgLSAgICAgLTM2
LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDkwLA0KICAgIC0gICAgICA5MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwNCiAgICAtICAgICAgMzEsICAgIDMyLCAgICA5
MiwgICAxNDEsICAgIDMzLCAgIDE1MCwgICAxMDQsICAgMTA3LCAgIDE2NCwgICAxNjUsDQogICAg
LSAgICAgMTY2LCAgICAtNCwgICAgMTMsICAgIDM0LCAgICAzNSwgICAgMTQsICAgIDE1LCAgICAx
NiwgICAgMTcsICAgIDE4LA0KICAgIC0gICAgICAxOSwgICAgMjAsICAgIDIxLCAgIDE3NiwgICAy
MTAsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwNCiAgICAtICAgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAxNzcsICAgMTc4LCAgICAzMywgICAx
ODIsDQogICAgLSAgICAgIDk3LCAgIDE4NiwgICAxOTQsICAgMTk2LCAgIDIwMCwgICAtODgsICAg
MTA4LCAgICAzNCwgICAgMzUsICAgLTg4LA0KICAgIC0gICAgIC04OCwgICAtODgsICAgLTg4LCAg
IC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAyMDEsICAgMjA1LCAgIC04OCwNCiAgICAtICAg
ICAtODgsICAgMTEwLCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAg
IC04OCwgICAtODgsDQogICAgLSAgICAgMjAyLCAgIDIwMywgICAxMTgsICAgMjA3LCAgIDIwOCwg
ICAyMDksICAgIDU2LCAgICAxMiwgICAxMzMsICAgMTA4LA0KICAgIC0gICAgICA4MCwgICAxNTIs
ICAgLTg4LCAgIC01NiwgICAtNTYsICAgMTgwLCAgIC01NiwgICAtNTYsICAgLTU2LCAgIC01NiwN
CiAgICAtICAgICAxMDksICAgICAwLCAgIC01NiwgICAtNTYsICAgMTEwLCAgIDEyNiwgICAxMjcs
ICAgMTI4LCAgIDEyOSwgICAxNDUsDQogICAgLSAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAxMTgsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LA0KICAgIC0gICAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAxMzAsICAgLTU2LCAgICAyMiwgICAgMjMsICAgIDE1
LCAgICAxNiwNCiAgICAtICAgICAgIDAsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAg
MCwgICAgIDAsICAgIDIyLCAgICAyMywgICAxODUsDQogICAgLSAgICAgICAwLCAgIDE4NywgICAx
ODgsICAgMTg5LCAgIDE5MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMzQsICAgIDM1LA0KICAg
IC0gICAgIDE5NSwgICAgIDAsICAgMTk3LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAzNCwNCiAgICAtICAgICAgMzUsICAgICAwLCAgIDIwNA0KICAgIC19Ow0K
ICAgIC0NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQ0KICAgIC17
DQogICAgLSAgICAgICAxLCAgICA3MCwgICAgNzEsICAgIDE0LCAgICAgMCwgICAgMjAsICAgIDIx
LCAgICA5OCwgICAgOTksICAgMTAwLA0KICAgIC0gICAgIDEwMSwgICAxMDIsICAgMTAzLCAgICAx
NCwgICAgODEsICAgIDE2LCAgICA4MSwgICAgMzYsICAgIDE5LCAgICA4NiwNCiAgICAtICAgICAg
MzYsICAgIDg2LCAgICAyNCwgICAgMzYsICAgICAzLCAgIDExNiwgICAgIDMsICAgIDk2LCAgICA5
NywgICAgNDAsDQogICAgLSAgICAgIDQxLCAgICAgMCwgICAgIDEsICAgIDI3LCAgICAzNiwgICAg
IDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LA0KICAgIC0gICAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAxMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwNCiAg
ICAtICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDM2LCAgICAyNywgICAgMzYsDQogICAgLSAgICAgIDM2LCAgICAyNywgICAgMjgsICAgIDI3LCAg
ICAzNCwgICAgMjcsICAgIDI4LCAgICAzNiwgICAgMzcsICAgIDM1LA0KICAgIC0gICAgICA0MCwg
ICAgNDEsICAgIDM2LCAgICA4MiwgICAgODMsICAgIDI3LCAgICA4NSwgICAgNDMsICAgMTQ1LCAg
ICAzNiwNCiAgICAtICAgICAxNDUsICAgICAxLCAgICAzOCwgICAxNzQsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksDQogICAgLSAgICAgIDEwLCAgICAxMSwgICAgMjcs
ICAgIDI4LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAgMSwgICAxNjcsICAgMTE0LA0KICAgIC0g
ICAgIDExNSwgICAgMzksICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMjcs
ICAgIDgyLCAgICA4MywNCiAgICAtICAgICAxMTEsICAgIDg1LCAgICAgMSwgICAxODIsICAgMTI5
LCAgICA0MiwgICAgMzYsICAgIDM3LCAgICA4MywgICAgMzYsDQogICAgLSAgICAgIDg1LCAgICA0
MCwgICAgNDEsICAgICAwLCAgICAgMSwgICAgMzYsICAgMTI3LCAgICAgNCwgICAgIDUsICAgICA2
LA0KICAgIC0gICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAy
NiwgICAgMTQsICAgIDE1LCAgICAxNiwNCiAgICAtICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAg
MjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMzYsDQogICAgLSAgICAg
IDI3LCAgICAzNiwgICAgMzYsICAgIDQwLCAgICA0MSwgICAgNDAsICAgIDQxLCAgICAgMCwgICAg
IDEsICAgIDM2LA0KICAgIC0gICAgICAzNywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzNiwNCiAgICAtICAgICAgMzYsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsDQog
ICAgLSAgICAgIDIzLCAgICAyNCwgICAgMzYsICAgIDgzLCAgICAyNywgICAgODUsICAgIDM2LCAg
ICAzNiwgICAgMzYsICAgIDM2LA0KICAgIC0gICAgICAzNiwgICAgIDAsICAgICAxLCAgICAzNiwg
ICAgMzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwNCiAgICAtICAgICAgIDks
ICAgIDEwLCAgICAxMSwgICAgIDEsICAgMjA1LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywg
ICAgMTgsDQogICAgLSAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQs
ICAgIDEzLCAgICAzNiwgICAgMjcsICAgIDE0LA0KICAgIC0gICAgICA0MSwgICAgMzYsICAgIDM2
LCAgICAzNiwgICAgMzYsICAgICAwLCAgICAgMSwgICAgMzYsICAgIDM3LCAgICAgNCwNCiAgICAt
ICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDM2
LCAgICA0MiwgICAgMTQsDQogICAgLSAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAx
OSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LA0KICAgIC0gICAgICAzNiwgICAg
MzYsICAgIDI3LCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAgNywgICAgIDUsICAgIDgxLCAgICAg
MSwNCiAgICAtICAgICAgNDAsICAgIDM2LCAgICAzNywgICAgIDUsICAgICA2LCAgIDEyOCwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsDQogICAgLSAgICAgIDEyLCAgICAtMSwgICAgMTQsICAg
IDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDg0LA0KICAgIC0gICAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDI3LCAgICAgNCwgICAgIDUsICAg
ICA2LCAgICAgNywNCiAgICAtICAgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDM2LCAg
ICAzNywgICAgMTQsICAgIDE1LCAgICAgNSwgICAgIDYsDQogICAgLSAgICAgIC0xLCAgICAgOCwg
ICAgIDksICAgIDEwLCAgICAxMSwgICAgLTEsICAgIC0xLCAgICAxNCwgICAgMTUsICAgMTY4LA0K
ICAgIC0gICAgICAtMSwgICAxNzAsICAgMTcxLCAgIDE3MiwgICAxNzMsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDM2LCAgICAzNywNCiAgICAtICAgICAxNzksICAgIC0xLCAgIDE4MSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsDQogICAgLSAgICAgIDM3
LCAgICAtMSwgICAxOTENCiAgICAtfTsNCiAgICAtDQogICAgLSAgLyogWVlTVE9TW1NUQVRFLU5V
TV0gLS0gVGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcNCiAgICAtICAgICBz
eW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAgKi8NCiAgICAtc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXN0b3NbXSA9DQogICAgLXsNCiAgICAtICAgICAgIDAsICAgICAzLCAgICAzNiwgICAg
NDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDg5LCAgICAyNywgICAgMjgsDQogICAgLSAgICAg
IDg3LCAgICAgMCwgICAgNDgsICAgICAxLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAg
IDgsICAgICA5LA0KICAgIC0gICAgICAxMCwgICAgMTEsICAgIDE0LCAgICAxNSwgICAgMTYsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwNCiAgICAtICAgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjcsICAgIDM2LCAgICAzNywgICAgNDksICAgIDUwLCAgICA1MiwgICAgNTMsDQog
ICAgLSAgICAgIDU0LCAgICA1NSwgICAgNjEsICAgIDYyLCAgICA2NCwgICAgNjgsICAgIDcwLCAg
ICA3MiwgICAgNzMsICAgIDc1LA0KICAgIC0gICAgICA3NywgICAgNzgsICAgIDc5LCAgICA4OCwg
ICAgOTUsICAgIDM2LCAgICA0NiwgICAgMzYsICAgIDM2LCAgICA4NywNCiAgICAtICAgICAgMzYs
ICAgIDg3LCAgICAyNywgICAgOTQsICAgIDM2LCAgICA4NywgICAgMjcsICAgIDkyLCAgICA5Miwg
ICAgMjgsDQogICAgLSAgICAgIDM1LCAgICA0MywgICAgOTEsICAgIDkyLCAgICA5MywgICAgMzYs
ICAgICAxLCAgICAzOCwgICAgIDEsICAgIDU2LA0KICAgIC0gICAgICA1NiwgICAgNjUsICAgIDY3
LCAgICA3MSwgICAgODQsICAgIDc2LCAgICA4MiwgICAgMzYsICAgIDM2LCAgICAzNiwNCiAgICAt
ICAgICAgMzYsICAgIDM2LCAgICAzNiwgICAgOTEsICAgIDkxLCAgICAzNiwgICAgNDAsICAgIDQx
LCAgICAyOSwgICAgMzAsDQogICAgLSAgICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDQyLCAgICAz
NiwgICAgMzksICAgIDk2LCAgICAzNiwgICAgIDEsICAgIDEyLA0KICAgIC0gICAgICAxNiwgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjUsICAgIDI3LCAgICAz
NiwNCiAgICAtICAgICAgNTEsICAgIDU3LCAgICA1OCwgICAgODAsICAgIDgxLCAgICA4MywgICAg
MTcsICAgIDE4LCAgICAxOSwgICAgMjAsDQogICAgLSAgICAgIDM2LCAgICA1MSwgICAgNjYsICAg
IDgxLCAgICA4MywgICAgNTAsICAgIDYzLCAgICA4OCwgICAgNTAsICAgIDY0LA0KICAgIC0gICAg
ICA2OSwgICAgNzUsICAgIDg4LCAgICAyNCwgICAgMzYsICAgIDgyLCAgICA4NSwgICAgNTAsICAg
IDY0LCAgICA3NCwNCiAgICAtICAgICAgNzUsICAgIDg4LCAgICAzNiwgICAgNTEsICAgIDgzLCAg
ICAzNCwgICAgOTEsICAgIDkxLCAgICA5MywgICAgOTMsDQogICAgLSAgICAgIDkzLCAgICA5Mywg
ICAgOTMsICAgIDkzLCAgICAzNiwgICAgMzYsICAgIDM2LCAgICAyNiwgICAgODcsICAgIDg2LA0K
ICAgIC0gICAgICA4NywgICAgOTEsICAgIDkyLCAgICA5MiwgICAgOTMsICAgIDU5LCAgICAgMSwg
ICAgMTMsICAgIDM2LCAgICA4NywNCiAgICAtICAgICAgODYsICAgIDkyLCAgICAxNCwgICAgOTAs
ICAgIDkxLCAgICA5MCwgICAgMzYsICAgIDkwLCAgICA5MCwgICAgOTAsDQogICAgLSAgICAgIDkw
LCAgICA5MywgICAgMjcsICAgIDM2LCAgICAzNiwgICAgOTAsICAgIDM2LCAgICA5MCwgICAgOTEs
ICAgIDM2LA0KICAgIC0gICAgICAzNiwgICAgMzYsICAgIDM2LCAgICAzNiwgICAgOTAsICAgIDQy
LCAgICA2MCwgICAgMzYsICAgIDM2LCAgICAzNiwNCiAgICAtICAgICAgODcNCiAgICAtfTsNCiAg
ICAtDQogICAgLSAgLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIgb2Ygc3ltYm9sIHRoYXQg
cnVsZSBZWU4gZGVyaXZlcy4gICovDQogICAgLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXly
MVtdID0NCiAgICAtew0KICAgIC0gICAgICAgMCwgICAgNDQsICAgIDQ1LCAgICA0NSwgICAgNDYs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIDQ4LCAgICA0OCwNCiAgICAtICAgICAgNDgsICAgIDQ4
LCAgICA0OCwgICAgNDgsICAgIDQ4LCAgICA0OSwgICAgNDksICAgIDQ5LCAgICA0OSwgICAgNDks
DQogICAgLSAgICAgIDQ5LCAgICA0OSwgICAgNDksICAgIDQ5LCAgICA1MCwgICAgNTAsICAgIDUw
LCAgICA1MCwgICAgNTAsICAgIDUwLA0KICAgIC0gICAgICA1MCwgICAgNTEsICAgIDUxLCAgICA1
MiwgICAgNTMsICAgIDU0LCAgICA1NSwgICAgNTYsICAgIDU2LCAgICA1NiwNCiAgICAtICAgICAg
NTYsICAgIDU2LCAgICA1NiwgICAgNTYsICAgIDU3LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1
NywgICAgNTcsDQogICAgLSAgICAgIDU4LCAgICA1OSwgICAgNTksICAgIDYwLCAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA2MywgICAgNjQsICAgIDY1LA0KICAgIC0gICAgICA2NSwgICAgNjUsICAg
IDY1LCAgICA2NSwgICAgNjUsICAgIDY2LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NywNCiAg
ICAtICAgICAgNjcsICAgIDY4LCAgICA2OSwgICAgNzAsICAgIDcxLCAgICA3MSwgICAgNzEsICAg
IDcxLCAgICA3MiwgICAgNzMsDQogICAgLSAgICAgIDc0LCAgICA3NSwgICAgNzYsICAgIDc2LCAg
ICA3NiwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLA0KICAgIC0gICAgICA4MSwg
ICAgODIsICAgIDgyLCAgICA4MiwgICAgODIsICAgIDgzLCAgICA4NCwgICAgODQsICAgIDg0LCAg
ICA4NSwNCiAgICAtICAgICAgODYsICAgIDg2LCAgICA4NywgICAgODcsICAgIDg4LCAgICA4OCwg
ICAgODgsICAgIDg5LCAgICA4OSwgICAgOTAsDQogICAgLSAgICAgIDkwLCAgICA5MSwgICAgOTEs
ICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLA0KICAgIC0g
ICAgICA5MSwgICAgOTEsICAgIDkyLCAgICA5MywgICAgOTMsICAgIDk0LCAgICA5NCwgICAgOTUs
ICAgIDk2LCAgICA5Ng0KICAgIC19Ow0KICAgIC0NCiAgICAtICAvKiBZWVIyW1lZTl0gLS0gTnVt
YmVyIG9mIHN5bWJvbHMgb24gdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICovDQog
ICAgLXN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlyMltdID0NCiAgICAtew0KICAgIC0gICAg
ICAgMCwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMywgICAgIDAsICAg
ICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgNCwgICAgIDQsICAgICAzLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsDQogICAgLSAgICAgICAxLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLA0K
ICAgIC0gICAgICAgMSwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwg
ICAgIDAsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDQsICAgICA0LCAgICAgNCwgICAgIDUsDQogICAgLSAgICAgICAz
LCAgICAgMCwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwgICAgIDMs
ICAgICAwLA0KICAgIC0gICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICA0
LCAgICAgMywgICAgIDIsICAgICA0LCAgICAgMCwNCiAgICAtICAgICAgIDIsICAgICAzLCAgICAg
MSwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAgIDMsDQogICAg
LSAgICAgICAxLCAgICAgMywgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAzLCAgICAg
MywgICAgIDIsICAgICAyLA0KICAgIC0gICAgICAgMiwgICAgIDAsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICA0LCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAtICAgICAgIDAsICAg
ICAyLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAg
IDAsDQogICAgLSAgICAgICAyLCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMywgICAgIDMsICAg
ICAzLCAgICAgMywgICAgIDMsICAgICAyLA0KICAgIC0gICAgICAgMywgICAgIDMsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAwLCAgICAgMSwgICAgIDQsICAgICAwLCAgICAgMQ0KICAgIC19Ow0K
ICAgIC0NCiAgICAtDQogICAgLSNkZWZpbmUgeXllcnJvayAgICAgICAgICh5eWVycnN0YXR1cyA9
IDApDQogICAgLSNkZWZpbmUgeXljbGVhcmluICAgICAgICh5eWNoYXIgPSBZWUVNUFRZKQ0KICAg
IC0jZGVmaW5lIFlZRU1QVFkgICAgICAgICAoLTIpDQogICAgLSNkZWZpbmUgWVlFT0YgICAgICAg
ICAgIDANCiAgICAtDQogICAgLSNkZWZpbmUgWVlBQ0NFUFQgICAgICAgIGdvdG8geXlhY2NlcHRs
YWINCiAgICAtI2RlZmluZSBZWUFCT1JUICAgICAgICAgZ290byB5eWFib3J0bGFiDQogICAgLSNk
ZWZpbmUgWVlFUlJPUiAgICAgICAgIGdvdG8geXllcnJvcmxhYg0KICAgIC0NCiAgICAtDQogICAg
LSNkZWZpbmUgWVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQ0KICAgIC0NCiAgICAtI2Rl
ZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwNCiAgICAtZG8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICBpZiAoeXljaGFyID09IFlZRU1QVFkpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAt
ICAgICAgeXljaGFyID0gKFRva2VuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwNCiAgICAtICAgICAgeXlsdmFsID0gKFZhbHVlKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICAgICAgWVlQT1BTVEFDSyAoeXlsZW4pOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICAgICAgeXlzdGF0
ZSA9ICp5eXNzcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAg
ICAtICAgICAgZ290byB5eWJhY2t1cDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwNCiAgICAtICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICBlbHNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN
CiAgICAtICAgICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3I6IGNhbm5vdCBiYWNrIHVwIikp
OyBcDQogICAgLSAgICAgIFlZRVJST1I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcDQogICAgLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLXdoaWxlICgwKQ0KICAgIC0N
CiAgICAtLyogRXJyb3IgdG9rZW4gbnVtYmVyICovDQogICAgLSNkZWZpbmUgWVlURVJST1IgICAg
ICAgIDENCiAgICAtI2RlZmluZSBZWUVSUkNPREUgICAgICAgMjU2DQogICAgLQ0KICAgIC0NCiAg
ICAtDQogICAgLS8qIEVuYWJsZSBkZWJ1Z2dpbmcgaWYgcmVxdWVzdGVkLiAgKi8NCiAgICAtI2lm
IFlZREVCVUcNCiAgICAtDQogICAgLSMgaWZuZGVmIFlZRlBSSU5URg0KICAgIC0jICBpbmNsdWRl
IDxzdGRpby5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovDQogICAgLSMgIGRl
ZmluZSBZWUZQUklOVEYgZnByaW50Zg0KICAgIC0jIGVuZGlmDQogICAgLQ0KICAgIC0jIGRlZmlu
ZSBZWURQUklOVEYoQXJncykgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLWRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICBpZiAoeXlk
ZWJ1ZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0gICAgWVlGUFJJ
TlRGIEFyZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLX0gd2hpbGUgKDAp
DQogICAgLQ0KICAgIC0vKiBUaGlzIG1hY3JvIGlzIHByb3ZpZGVkIGZvciBiYWNrd2FyZCBjb21w
YXRpYmlsaXR5LiAqLw0KICAgIC0jaWZuZGVmIFlZX0xPQ0FUSU9OX1BSSU5UDQogICAgLSMgZGVm
aW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykgKCh2b2lkKSAwKQ0KICAgIC0jZW5kaWYN
CiAgICAtDQogICAgLQ0KICAgIC0jIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5cGUs
IFZhbHVlLCBMb2NhdGlvbikgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcDQogICAgLSAgaWYgKHl5ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0gICAgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN
CiAgICAtICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIlcyAiLCBUaXRsZSk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLSAgICAgIHl5X3N5bWJvbF9wcmludCAoc3Rk
ZXJyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0g
ICAgICAgICAgICAgICAgICBUeXBlLCBWYWx1ZSk7IFwNCiAgICAtICAgICAgWVlGUFJJTlRGIChz
dGRlcnIsICJcbiIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
DQogICAgLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC19IHdoaWxlICgwKQ0KICAgIC0NCiAgICAt
DQogICAgLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICAt
fCBQcmludCB0aGlzIHN5bWJvbCdzIHZhbHVlIG9uIFlZT1VUUFVULiAgfA0KICAgIC1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZA0KICAgIC15eV9zeW1ib2xfdmFsdWVfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0
eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXApDQogICAgLXsNCiAgICAtICBGSUxF
ICp5eW8gPSB5eW91dHB1dDsNCiAgICAtICBZWVVTRSAoeXlvKTsNCiAgICAtICBpZiAoIXl5dmFs
dWVwKQ0KICAgIC0gICAgcmV0dXJuOw0KICAgIC0jIGlmZGVmIFlZUFJJTlQNCiAgICAtICBpZiAo
eXl0eXBlIDwgWVlOVE9LRU5TKQ0KICAgIC0gICAgWVlQUklOVCAoeXlvdXRwdXQsIHl5dG9rbnVt
W3l5dHlwZV0sICp5eXZhbHVlcCk7DQogICAgLSMgZW5kaWYNCiAgICAtICBZWVVTRSAoeXl0eXBl
KTsNCiAgICAtfQ0KICAgIC0NCiAgICAtDQogICAgLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0uDQogICAgLXwgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8DQogICAg
LWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgLQ0KICAgIC1zdGF0aWMg
dm9pZA0KICAgIC15eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXApDQogICAgLXsNCiAgICAtICBZWUZQUklOVEYg
KHl5b3V0cHV0LCAiJXMgJXMgKCIsDQogICAgLSAgICAgICAgICAgICB5eXR5cGUgPCBZWU5UT0tF
TlMgPyAidG9rZW4iIDogIm50ZXJtIiwgeXl0bmFtZVt5eXR5cGVdKTsNCiAgICAtDQogICAgLSAg
eXlfc3ltYm9sX3ZhbHVlX3ByaW50ICh5eW91dHB1dCwgeXl0eXBlLCB5eXZhbHVlcCk7DQogICAg
LSAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0uDQogICAgLXwgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZy
b20gaXRzIEJPVFRPTSB1cCB0byBpdHMgfA0KICAgIC18IFRPUCAoaW5jbHVkZWQpLiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCiAgICAtYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovDQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZA0KICAgIC15eV9zdGFja19wcmludCAoeXl0
eXBlX2ludDE2ICp5eWJvdHRvbSwgeXl0eXBlX2ludDE2ICp5eXRvcCkNCiAgICAtew0KICAgIC0g
IFlZRlBSSU5URiAoc3RkZXJyLCAiU3RhY2sgbm93Iik7DQogICAgLSAgZm9yICg7IHl5Ym90dG9t
IDw9IHl5dG9wOyB5eWJvdHRvbSsrKQ0KICAgIC0gICAgew0KICAgIC0gICAgICBpbnQgeXlib3Qg
PSAqeXlib3R0b207DQogICAgLSAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgeXlib3Qp
Ow0KICAgIC0gICAgfQ0KICAgIC0gIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9tLCBUb3ApICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwNCiAgICAtZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICBpZiAoeXlkZWJ1Zykg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAt
ICAgIHl5X3N0YWNrX3ByaW50ICgoQm90dG9tKSwgKFRvcCkpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwNCiAgICAtfSB3aGlsZSAoMCkNCiAgICAtDQogICAgLQ0KICAgIC0vKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICAtfCBSZXBvcnQg
dGhhdCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8DQogICAgLWAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgIC0NCiAgICAt
c3RhdGljIHZvaWQNCiAgICAteXlfcmVkdWNlX3ByaW50ICh5eXR5cGVfaW50MTYgKnl5c3NwLCBZ
WVNUWVBFICp5eXZzcCwgaW50IHl5cnVsZSkNCiAgICAtew0KICAgIC0gIHVuc2lnbmVkIGxvbmcg
aW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOw0KICAgIC0gIGludCB5eW5yaHMgPSB5eXIyW3l5
cnVsZV07DQogICAgLSAgaW50IHl5aTsNCiAgICAtICBZWUZQUklOVEYgKHN0ZGVyciwgIlJlZHVj
aW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIsDQogICAgLSAgICAgICAgICAgICB5
eXJ1bGUgLSAxLCB5eWxubyk7DQogICAgLSAgLyogVGhlIHN5bWJvbHMgYmVpbmcgcmVkdWNlZC4g
ICovDQogICAgLSAgZm9yICh5eWkgPSAwOyB5eWkgPCB5eW5yaHM7IHl5aSsrKQ0KICAgIC0gICAg
ew0KICAgIC0gICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAgICQlZCA9ICIsIHl5aSArIDEpOw0K
ICAgIC0gICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0ZGVyciwNCiAgICAtICAgICAgICAgICAgICAg
ICAgICAgICB5eXN0b3NbeXlzc3BbeXlpICsgMSAtIHl5bnJoc11dLA0KICAgIC0gICAgICAgICAg
ICAgICAgICAgICAgICYoeXl2c3BbKHl5aSArIDEpIC0gKHl5bnJocyldKQ0KICAgIC0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAtICAgICAgWVlG
UFJJTlRGIChzdGRlcnIsICJcbiIpOw0KICAgIC0gICAgfQ0KICAgIC19DQogICAgLQ0KICAgIC0j
IGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkgICAgICAgICAgXA0KICAgIC1kbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0gIGlmICh5eWRlYnVnKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0gICAgeXlfcmVkdWNlX3ByaW50ICh5eXNzcCwg
eXl2c3AsIFJ1bGUpOyBcDQogICAgLX0gd2hpbGUgKDApDQogICAgLQ0KICAgIC0vKiBOb256ZXJv
IG1lYW5zIHByaW50IHBhcnNlIHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRo
YXQNCiAgICAtICAgbXVsdGlwbGUgcGFyc2VycyBjYW4gY29leGlzdC4gICovDQogICAgLWludCB5
eWRlYnVnOw0KICAgIC0jZWxzZSAvKiAhWVlERUJVRyAqLw0KICAgIC0jIGRlZmluZSBZWURQUklO
VEYoQXJncykNCiAgICAtIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1
ZSwgTG9jYXRpb24pDQogICAgLSMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQ0K
ICAgIC0jIGRlZmluZSBZWV9SRURVQ0VfUFJJTlQoUnVsZSkNCiAgICAtI2VuZGlmIC8qICFZWURF
QlVHICovDQogICAgLQ0KICAgIC0NCiAgICAtLyogWVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXpl
IG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLw0KICAgIC0jaWZuZGVmIFlZSU5JVERFUFRIDQog
ICAgLSMgZGVmaW5lIFlZSU5JVERFUFRIIDIwMA0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLS8q
IFlZTUFYREVQVEggLS0gbWF4aW11bSBzaXplIHRoZSBzdGFja3MgY2FuIGdyb3cgdG8gKGVmZmVj
dGl2ZSBvbmx5DQogICAgLSAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9k
IGlzIHVzZWQpLg0KICAgIC0NCiAgICAtICAgRG8gbm90IG1ha2UgdGhpcyB2YWx1ZSB0b28gbGFy
Z2U7IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQgaWYNCiAgICAtICAgWVlTVEFDS19BTExPQ19N
QVhJTVVNIDwgWVlTVEFDS19CWVRFUyAoWVlNQVhERVBUSCkNCiAgICAtICAgZXZhbHVhdGVkIHdp
dGggaW5maW5pdGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovDQogICAgLQ0KICAg
IC0jaWZuZGVmIFlZTUFYREVQVEgNCiAgICAtIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMA0KICAg
IC0jZW5kaWYNCiAgICAtDQogICAgLQ0KICAgIC0jaWYgWVlFUlJPUl9WRVJCT1NFDQogICAgLQ0K
ICAgIC0jIGlmbmRlZiB5eXN0cmxlbg0KICAgIC0jICBpZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBk
ZWZpbmVkIF9TVFJJTkdfSA0KICAgIC0jICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbg0KICAgIC0j
ICBlbHNlDQogICAgLS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIFlZU1RSLiAgKi8NCiAgICAtc3Rh
dGljIFlZU0laRV9UDQogICAgLXl5c3RybGVuIChjb25zdCBjaGFyICp5eXN0cikNCiAgICAtew0K
ICAgIC0gIFlZU0laRV9UIHl5bGVuOw0KICAgIC0gIGZvciAoeXlsZW4gPSAwOyB5eXN0clt5eWxl
bl07IHl5bGVuKyspDQogICAgLSAgICBjb250aW51ZTsNCiAgICAtICByZXR1cm4geXlsZW47DQog
ICAgLX0NCiAgICAtIyAgZW5kaWYNCiAgICAtIyBlbmRpZg0KICAgIC0NCiAgICAtIyBpZm5kZWYg
eXlzdHBjcHkNCiAgICAtIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYgZGVmaW5lZCBfU1RSSU5H
X0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQ0KICAgIC0jICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNw
eQ0KICAgIC0jICBlbHNlDQogICAgLS8qIENvcHkgWVlTUkMgdG8gWVlERVNULCByZXR1cm5pbmcg
dGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4NCiAgICAtICAgWVlERVNULiAg
Ki8NCiAgICAtc3RhdGljIGNoYXIgKg0KICAgIC15eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25z
dCBjaGFyICp5eXNyYykNCiAgICAtew0KICAgIC0gIGNoYXIgKnl5ZCA9IHl5ZGVzdDsNCiAgICAt
ICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsNCiAgICAtDQogICAgLSAgd2hpbGUgKCgqeXlkKysg
PSAqeXlzKyspICE9ICdcMCcpDQogICAgLSAgICBjb250aW51ZTsNCiAgICAtDQogICAgLSAgcmV0
dXJuIHl5ZCAtIDE7DQogICAgLX0NCiAgICAtIyAgZW5kaWYNCiAgICAtIyBlbmRpZg0KICAgIC0N
CiAgICAtIyBpZm5kZWYgeXl0bmFtZXJyDQogICAgLS8qIENvcHkgdG8gWVlSRVMgdGhlIGNvbnRl
bnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5DQogICAgLSAgIHF1
b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0YWJsZSBmb3IgeXllcnJvci4g
IFRoZQ0KICAgIC0gICBoZXVyaXN0aWMgaXMgdGhhdCBkb3VibGUtcXVvdGluZyBpcyB1bm5lY2Vz
c2FyeSB1bmxlc3MgdGhlIHN0cmluZw0KICAgIC0gICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBh
IGNvbW1hLCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4NCiAgICAtICAgYmFja3NsYXNoLWJhY2tz
bGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcw0KICAgIC0g
ICBudWxsLCBkbyBub3QgY29weTsgaW5zdGVhZCwgcmV0dXJuIHRoZSBsZW5ndGggb2Ygd2hhdCB0
aGUgcmVzdWx0DQogICAgLSAgIHdvdWxkIGhhdmUgYmVlbi4gICovDQogICAgLXN0YXRpYyBZWVNJ
WkVfVA0KICAgIC15eXRuYW1lcnIgKGNoYXIgKnl5cmVzLCBjb25zdCBjaGFyICp5eXN0cikNCiAg
ICAtew0KICAgIC0gIGlmICgqeXlzdHIgPT0gJyInKQ0KICAgIC0gICAgew0KICAgIC0gICAgICBZ
WVNJWkVfVCB5eW4gPSAwOw0KICAgIC0gICAgICBjaGFyIGNvbnN0ICp5eXAgPSB5eXN0cjsNCiAg
ICAtDQogICAgLSAgICAgIGZvciAoOzspDQogICAgLSAgICAgICAgc3dpdGNoICgqKyt5eXApDQog
ICAgLSAgICAgICAgICB7DQogICAgLSAgICAgICAgICBjYXNlICdcJyc6DQogICAgLSAgICAgICAg
ICBjYXNlICcsJzoNCiAgICAtICAgICAgICAgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOw0K
ICAgIC0NCiAgICAtICAgICAgICAgIGNhc2UgJ1xcJzoNCiAgICAtICAgICAgICAgICAgaWYgKCor
K3l5cCAhPSAnXFwnKQ0KICAgIC0gICAgICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3Rl
czsNCiAgICAtICAgICAgICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8NCiAgICAtICAgICAgICAg
IGRlZmF1bHQ6DQogICAgLSAgICAgICAgICAgIGlmICh5eXJlcykNCiAgICAtICAgICAgICAgICAg
ICB5eXJlc1t5eW5dID0gKnl5cDsNCiAgICAtICAgICAgICAgICAgeXluKys7DQogICAgLSAgICAg
ICAgICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICAgICAgICAgIGNhc2UgJyInOg0KICAgIC0gICAg
ICAgICAgICBpZiAoeXlyZXMpDQogICAgLSAgICAgICAgICAgICAgeXlyZXNbeXluXSA9ICdcMCc7
DQogICAgLSAgICAgICAgICAgIHJldHVybiB5eW47DQogICAgLSAgICAgICAgICB9DQogICAgLSAg
ICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7DQogICAgLSAgICB9DQogICAgLQ0KICAgIC0gIGlmICgh
IHl5cmVzKQ0KICAgIC0gICAgcmV0dXJuIHl5c3RybGVuICh5eXN0cik7DQogICAgLQ0KICAgIC0g
IHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOw0KICAgIC19DQogICAgLSMg
ZW5kaWYNCiAgICAtDQogICAgLS8qIENvcHkgaW50byAqWVlNU0csIHdoaWNoIGlzIG9mIHNpemUg
KllZTVNHX0FMTE9DLCBhbiBlcnJvciBtZXNzYWdlDQogICAgLSAgIGFib3V0IHRoZSB1bmV4cGVj
dGVkIHRva2VuIFlZVE9LRU4gZm9yIHRoZSBzdGF0ZSBzdGFjayB3aG9zZSB0b3AgaXMNCiAgICAt
ICAgWVlTU1AuDQogICAgLQ0KICAgIC0gICBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3Nm
dWxseSB3cml0dGVuLiAgUmV0dXJuIDEgaWYgKllZTVNHIGlzDQogICAgLSAgIG5vdCBsYXJnZSBl
bm91Z2ggdG8gaG9sZCB0aGUgbWVzc2FnZS4gIEluIHRoYXQgY2FzZSwgYWxzbyBzZXQNCiAgICAt
ICAgKllZTVNHX0FMTE9DIHRvIHRoZSByZXF1aXJlZCBudW1iZXIgb2YgYnl0ZXMuICBSZXR1cm4g
MiBpZiB0aGUNCiAgICAtICAgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBsYXJnZSB0
byBzdG9yZS4gICovDQogICAgLXN0YXRpYyBpbnQNCiAgICAteXlzeW50YXhfZXJyb3IgKFlZU0la
RV9UICp5eW1zZ19hbGxvYywgY2hhciAqKnl5bXNnLA0KICAgIC0gICAgICAgICAgICAgICAgeXl0
eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pDQogICAgLXsNCiAgICAtICBZWVNJWkVfVCB5
eXNpemUwID0geXl0bmFtZXJyIChZWV9OVUxMUFRSLCB5eXRuYW1lW3l5dG9rZW5dKTsNCiAgICAt
ICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOw0KICAgIC0gIGVudW0geyBZWUVSUk9SX1ZFUkJP
U0VfQVJHU19NQVhJTVVNID0gNSB9Ow0KICAgIC0gIC8qIEludGVybmF0aW9uYWxpemVkIGZvcm1h
dCBzdHJpbmcuICovDQogICAgLSAgY29uc3QgY2hhciAqeXlmb3JtYXQgPSBZWV9OVUxMUFRSOw0K
ICAgIC0gIC8qIEFyZ3VtZW50cyBvZiB5eWZvcm1hdC4gKi8NCiAgICAtICBjaGFyIGNvbnN0ICp5
eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsNCiAgICAtICAvKiBOdW1iZXIgb2Yg
cmVwb3J0ZWQgdG9rZW5zIChvbmUgZm9yIHRoZSAidW5leHBlY3RlZCIsIG9uZSBwZXINCiAgICAt
ICAgICAiZXhwZWN0ZWQiKS4gKi8NCiAgICAtICBpbnQgeXljb3VudCA9IDA7DQogICAgLQ0KICAg
IC0gIC8qIFRoZXJlIGFyZSBtYW55IHBvc3NpYmlsaXRpZXMgaGVyZSB0byBjb25zaWRlcjoNCiAg
ICAtICAgICAtIElmIHRoaXMgc3RhdGUgaXMgYSBjb25zaXN0ZW50IHN0YXRlIHdpdGggYSBkZWZh
dWx0IGFjdGlvbiwgdGhlbg0KICAgIC0gICAgICAgdGhlIG9ubHkgd2F5IHRoaXMgZnVuY3Rpb24g
d2FzIGludm9rZWQgaXMgaWYgdGhlIGRlZmF1bHQgYWN0aW9uDQogICAgLSAgICAgICBpcyBhbiBl
cnJvciBhY3Rpb24uICBJbiB0aGF0IGNhc2UsIGRvbid0IGNoZWNrIGZvciBleHBlY3RlZA0KICAg
IC0gICAgICAgdG9rZW5zIGJlY2F1c2UgdGhlcmUgYXJlIG5vbmUuDQogICAgLSAgICAgLSBUaGUg
b25seSB3YXkgdGhlcmUgY2FuIGJlIG5vIGxvb2thaGVhZCBwcmVzZW50IChpbiB5eWNoYXIpIGlz
IGlmDQogICAgLSAgICAgICB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEg
ZGVmYXVsdCBhY3Rpb24uICBUaHVzLA0KICAgIC0gICAgICAgZGV0ZWN0aW5nIHRoZSBhYnNlbmNl
IG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZXJtaW5lDQogICAgLSAgICAgICB0
aGF0IHRoZXJlIGlzIG5vIHVuZXhwZWN0ZWQgb3IgZXhwZWN0ZWQgdG9rZW4gdG8gcmVwb3J0LiAg
SW4gdGhhdA0KICAgIC0gICAgICAgY2FzZSwganVzdCByZXBvcnQgYSBzaW1wbGUgInN5bnRheCBl
cnJvciIuDQogICAgLSAgICAgLSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3QgYSBsb29rYWhlYWQg
anVzdCBiZWNhdXNlIHRoaXMgc3RhdGUgaXMgYQ0KICAgIC0gICAgICAgY29uc2lzdGVudCBzdGF0
ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uICBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYQ0KICAgIC0g
ICAgICAgcHJldmlvdXMgaW5jb25zaXN0ZW50IHN0YXRlLCBjb25zaXN0ZW50IHN0YXRlIHdpdGgg
YSBub24tZGVmYXVsdA0KICAgIC0gICAgICAgYWN0aW9uLCBvciB1c2VyIHNlbWFudGljIGFjdGlv
biB0aGF0IG1hbmlwdWxhdGVkIHl5Y2hhci4NCiAgICAtICAgICAtIE9mIGNvdXJzZSwgdGhlIGV4
cGVjdGVkIHRva2VuIGxpc3QgZGVwZW5kcyBvbiBzdGF0ZXMgdG8gaGF2ZQ0KICAgIC0gICAgICAg
Y29ycmVjdCBsb29rYWhlYWQgaW5mb3JtYXRpb24sIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBwYXJz
ZXIgbm90DQogICAgLSAgICAgICB0byBwZXJmb3JtIGV4dHJhIHJlZHVjdGlvbnMgYWZ0ZXIgZmV0
Y2hpbmcgYSBsb29rYWhlYWQgZnJvbSB0aGUNCiAgICAtICAgICAgIHNjYW5uZXIgYW5kIGJlZm9y
ZSBkZXRlY3RpbmcgYSBzeW50YXggZXJyb3IuICBUaHVzLCBzdGF0ZSBtZXJnaW5nDQogICAgLSAg
ICAgICAoZnJvbSBMQUxSIG9yIElFTFIpIGFuZCBkZWZhdWx0IHJlZHVjdGlvbnMgY29ycnVwdCB0
aGUgZXhwZWN0ZWQNCiAgICAtICAgICAgIHRva2VuIGxpc3QuICBIb3dldmVyLCB0aGUgbGlzdCBp
cyBjb3JyZWN0IGZvciBjYW5vbmljYWwgTFIgd2l0aA0KICAgIC0gICAgICAgb25lIGV4Y2VwdGlv
bjogaXQgd2lsbCBzdGlsbCBjb250YWluIGFueSB0b2tlbiB0aGF0IHdpbGwgbm90IGJlDQogICAg
LSAgICAgICBhY2NlcHRlZCBkdWUgdG8gYW4gZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUu
DQogICAgLSAgKi8NCiAgICAtICBpZiAoeXl0b2tlbiAhPSBZWUVNUFRZKQ0KICAgIC0gICAgew0K
ICAgIC0gICAgICBpbnQgeXluID0geXlwYWN0Wyp5eXNzcF07DQogICAgLSAgICAgIHl5YXJnW3l5
Y291bnQrK10gPSB5eXRuYW1lW3l5dG9rZW5dOw0KICAgIC0gICAgICBpZiAoIXl5cGFjdF92YWx1
ZV9pc19kZWZhdWx0ICh5eW4pKQ0KICAgIC0gICAgICAgIHsNCiAgICAtICAgICAgICAgIC8qIFN0
YXJ0IFlZWCBhdCAtWVlOIGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4N
CiAgICAtICAgICAgICAgICAgIFlZQ0hFQ0suICBJbiBvdGhlciB3b3Jkcywgc2tpcCB0aGUgZmly
c3QgLVlZTiBhY3Rpb25zIGZvcg0KICAgIC0gICAgICAgICAgICAgdGhpcyBzdGF0ZSBiZWNhdXNl
IHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy4gICovDQogICAgLSAgICAgICAgICBpbnQgeXl4YmVn
aW4gPSB5eW4gPCAwID8gLXl5biA6IDA7DQogICAgLSAgICAgICAgICAvKiBTdGF5IHdpdGhpbiBi
b3VuZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8NCiAgICAtICAgICAgICAgIGlu
dCB5eWNoZWNrbGltID0gWVlMQVNUIC0geXluICsgMTsNCiAgICAtICAgICAgICAgIGludCB5eXhl
bmQgPSB5eWNoZWNrbGltIDwgWVlOVE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsNCiAg
ICAtICAgICAgICAgIGludCB5eXg7DQogICAgLQ0KICAgIC0gICAgICAgICAgZm9yICh5eXggPSB5
eXhiZWdpbjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkNCiAgICAtICAgICAgICAgICAgaWYgKHl5Y2hl
Y2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SDQogICAgLSAgICAgICAgICAg
ICAgICAmJiAheXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXl0YWJsZVt5eXggKyB5eW5dKSkNCiAg
ICAtICAgICAgICAgICAgICB7DQogICAgLSAgICAgICAgICAgICAgICBpZiAoeXljb3VudCA9PSBZ
WUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNKQ0KICAgIC0gICAgICAgICAgICAgICAgICB7DQog
ICAgLSAgICAgICAgICAgICAgICAgICAgeXljb3VudCA9IDE7DQogICAgLSAgICAgICAgICAgICAg
ICAgICAgeXlzaXplID0geXlzaXplMDsNCiAgICAtICAgICAgICAgICAgICAgICAgICBicmVhazsN
CiAgICAtICAgICAgICAgICAgICAgICAgfQ0KICAgIC0gICAgICAgICAgICAgICAgeXlhcmdbeXlj
b3VudCsrXSA9IHl5dG5hbWVbeXl4XTsNCiAgICAtICAgICAgICAgICAgICAgIHsNCiAgICAtICAg
ICAgICAgICAgICAgICAgWVlTSVpFX1QgeXlzaXplMSA9IHl5c2l6ZSArIHl5dG5hbWVyciAoWVlf
TlVMTFBUUiwgeXl0bmFtZVt5eXhdKTsNCiAgICAtICAgICAgICAgICAgICAgICAgaWYgKCEgKHl5
c2l6ZSA8PSB5eXNpemUxDQogICAgLSAgICAgICAgICAgICAgICAgICAgICAgICAmJiB5eXNpemUx
IDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpDQogICAgLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIDI7DQogICAgLSAgICAgICAgICAgICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTE7DQogICAgLSAg
ICAgICAgICAgICAgICB9DQogICAgLSAgICAgICAgICAgICAgfQ0KICAgIC0gICAgICAgIH0NCiAg
ICAtICAgIH0NCiAgICAtDQogICAgLSAgc3dpdGNoICh5eWNvdW50KQ0KICAgIC0gICAgew0KICAg
IC0jIGRlZmluZSBZWUNBU0VfKE4sIFMpICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAtICAg
ICAgY2FzZSBOOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgLSAgICAgICAg
eXlmb3JtYXQgPSBTOyAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIC0gICAgICBicmVhaw0K
ICAgIC0gICAgICBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOw0KICAgIC0gICAgICBZ
WUNBU0VfKDEsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikpOw0KICAgIC0gICAg
ICBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rpbmcg
JXMiKSk7DQogICAgLSAgICAgIFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0
ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyIpKTsNCiAgICAtICAgICAgWVlDQVNFXyg0LCBZWV8o
InN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIikp
Ow0KICAgIC0gICAgICBZWUNBU0VfKDUsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVz
LCBleHBlY3RpbmcgJXMgb3IgJXMgb3IgJXMgb3IgJXMiKSk7DQogICAgLSMgdW5kZWYgWVlDQVNF
Xw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICB7DQogICAgLSAgICBZWVNJWkVfVCB5eXNpemUx
ID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zm9ybWF0KTsNCiAgICAtICAgIGlmICghICh5eXNpemUg
PD0geXlzaXplMSAmJiB5eXNpemUxIDw9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpDQogICAgLSAg
ICAgIHJldHVybiAyOw0KICAgIC0gICAgeXlzaXplID0geXlzaXplMTsNCiAgICAtICB9DQogICAg
LQ0KICAgIC0gIGlmICgqeXltc2dfYWxsb2MgPCB5eXNpemUpDQogICAgLSAgICB7DQogICAgLSAg
ICAgICp5eW1zZ19hbGxvYyA9IDIgKiB5eXNpemU7DQogICAgLSAgICAgIGlmICghICh5eXNpemUg
PD0gKnl5bXNnX2FsbG9jDQogICAgLSAgICAgICAgICAgICAmJiAqeXltc2dfYWxsb2MgPD0gWVlT
VEFDS19BTExPQ19NQVhJTVVNKSkNCiAgICAtICAgICAgICAqeXltc2dfYWxsb2MgPSBZWVNUQUNL
X0FMTE9DX01BWElNVU07DQogICAgLSAgICAgIHJldHVybiAxOw0KICAgIC0gICAgfQ0KICAgIC0N
CiAgICAtICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdlcyBvbiB0aGUgdXNlcidz
IG5hbWUgc3BhY2UuDQogICAgLSAgICAgRG9uJ3QgaGF2ZSB1bmRlZmluZWQgYmVoYXZpb3IgZXZl
biBpZiB0aGUgdHJhbnNsYXRpb24NCiAgICAtICAgICBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRo
ZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLw0KICAgIC0gIHsNCiAgICAtICAgIGNoYXIgKnl5
cCA9ICp5eW1zZzsNCiAgICAtICAgIGludCB5eWkgPSAwOw0KICAgIC0gICAgd2hpbGUgKCgqeXlw
ID0gKnl5Zm9ybWF0KSAhPSAnXDAnKQ0KICAgIC0gICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlm
b3JtYXRbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQpDQogICAgLSAgICAgICAgew0KICAgIC0g
ICAgICAgICAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5eWFyZ1t5eWkrK10pOw0KICAgIC0gICAg
ICAgICAgeXlmb3JtYXQgKz0gMjsNCiAgICAtICAgICAgICB9DQogICAgLSAgICAgIGVsc2UNCiAg
ICAtICAgICAgICB7DQogICAgLSAgICAgICAgICB5eXArKzsNCiAgICAtICAgICAgICAgIHl5Zm9y
bWF0Kys7DQogICAgLSAgICAgICAgfQ0KICAgIC0gIH0NCiAgICAtICByZXR1cm4gMDsNCiAgICAt
fQ0KICAgIC0jZW5kaWYgLyogWVlFUlJPUl9WRVJCT1NFICovDQogICAgLQ0KICAgIC0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgIC18IFJlbGVh
c2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLiAgfA0KICAgIC1gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgIC0NCiAgICAt
c3RhdGljIHZvaWQNCiAgICAteXlkZXN0cnVjdCAoY29uc3QgY2hhciAqeXltc2csIGludCB5eXR5
cGUsIFlZU1RZUEUgKnl5dmFsdWVwKQ0KICAgIC17DQogICAgLSAgWVlVU0UgKHl5dmFsdWVwKTsN
CiAgICAtICBpZiAoIXl5bXNnKQ0KICAgIC0gICAgeXltc2cgPSAiRGVsZXRpbmciOw0KICAgIC0g
IFlZX1NZTUJPTF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsN
CiAgICAtDQogICAgLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4NCiAgICAt
ICBzd2l0Y2ggKHl5dHlwZSkNCiAgICAtICAgIHsNCiAgICAtICAgICAgICAgIGNhc2UgNjI6IC8q
IGNob2ljZV9lbnRyeSAgKi8NCiAgICAtDQogICAgLSAgICAgIHsNCiAgICAtCWZwcmludGYoc3Rk
ZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwNCiAg
ICAtCQkoKCp5eXZhbHVlcCkubWVudSktPmZpbGUtPm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+
bGluZW5vKTsNCiAgICAtCWlmIChjdXJyZW50X21lbnUgPT0gKCgqeXl2YWx1ZXApLm1lbnUpKQ0K
ICAgIC0JCW1lbnVfZW5kX21lbnUoKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtICAgICAgICBicmVh
azsNCiAgICAtDQogICAgLSAgICBjYXNlIDY4OiAvKiBpZl9lbnRyeSAgKi8NCiAgICAtDQogICAg
LSAgICAgIHsNCiAgICAtCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRl
bWVudCBmb3IgdGhpcyBlbnRyeVxuIiwNCiAgICAtCQkoKCp5eXZhbHVlcCkubWVudSktPmZpbGUt
Pm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+bGluZW5vKTsNCiAgICAtCWlmIChjdXJyZW50X21l
bnUgPT0gKCgqeXl2YWx1ZXApLm1lbnUpKQ0KICAgIC0JCW1lbnVfZW5kX21lbnUoKTsNCiAgICAt
fQ0KICAgIC0NCiAgICAtICAgICAgICBicmVhazsNCiAgICAtDQogICAgLSAgICBjYXNlIDczOiAv
KiBtZW51X2VudHJ5ICAqLw0KICAgIC0NCiAgICAtICAgICAgew0KICAgIC0JZnByaW50ZihzdGRl
cnIsICIlczolZDogbWlzc2luZyBlbmQgc3RhdGVtZW50IGZvciB0aGlzIGVudHJ5XG4iLA0KICAg
IC0JCSgoKnl5dmFsdWVwKS5tZW51KS0+ZmlsZS0+bmFtZSwgKCgqeXl2YWx1ZXApLm1lbnUpLT5s
aW5lbm8pOw0KICAgIC0JaWYgKGN1cnJlbnRfbWVudSA9PSAoKCp5eXZhbHVlcCkubWVudSkpDQog
ICAgLQkJbWVudV9lbmRfbWVudSgpOw0KICAgIC19DQogICAgLQ0KICAgIC0gICAgICAgIGJyZWFr
Ow0KICAgIC0NCiAgICAtDQogICAgLSAgICAgIGRlZmF1bHQ6DQogICAgLSAgICAgICAgYnJlYWs7
DQogICAgLSAgICB9DQogICAgLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EDQog
ICAgLX0NCiAgICAtDQogICAgLQ0KICAgIC0NCiAgICAtDQogICAgLS8qIFRoZSBsb29rYWhlYWQg
c3ltYm9sLiAgKi8NCiAgICAtaW50IHl5Y2hhcjsNCiAgICAtDQogICAgLS8qIFRoZSBzZW1hbnRp
YyB2YWx1ZSBvZiB0aGUgbG9va2FoZWFkIHN5bWJvbC4gICovDQogICAgLVlZU1RZUEUgeXlsdmFs
Ow0KICAgIC0vKiBOdW1iZXIgb2Ygc3ludGF4IGVycm9ycyBzbyBmYXIuICAqLw0KICAgIC1pbnQg
eXluZXJyczsNCiAgICAtDQogICAgLQ0KICAgIC0vKi0tLS0tLS0tLS0uDQogICAgLXwgeXlwYXJz
ZS4gIHwNCiAgICAtYC0tLS0tLS0tLS0qLw0KICAgIC0NCiAgICAtaW50DQogICAgLXl5cGFyc2Ug
KHZvaWQpDQogICAgLXsNCiAgICAtICAgIGludCB5eXN0YXRlOw0KICAgIC0gICAgLyogTnVtYmVy
IG9mIHRva2VucyB0byBzaGlmdCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovDQog
ICAgLSAgICBpbnQgeXllcnJzdGF0dXM7DQogICAgLQ0KICAgIC0gICAgLyogVGhlIHN0YWNrcyBh
bmQgdGhlaXIgdG9vbHM6DQogICAgLSAgICAgICAneXlzcyc6IHJlbGF0ZWQgdG8gc3RhdGVzLg0K
ICAgIC0gICAgICAgJ3l5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcy4NCiAgICAtDQog
ICAgLSAgICAgICBSZWZlciB0byB0aGUgc3RhY2tzIHRocm91Z2ggc2VwYXJhdGUgcG9pbnRlcnMs
IHRvIGFsbG93IHl5b3ZlcmZsb3cNCiAgICAtICAgICAgIHRvIHJlYWxsb2NhdGUgdGhlbSBlbHNl
d2hlcmUuICAqLw0KICAgIC0NCiAgICAtICAgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovDQogICAg
LSAgICB5eXR5cGVfaW50MTYgeXlzc2FbWVlJTklUREVQVEhdOw0KICAgIC0gICAgeXl0eXBlX2lu
dDE2ICp5eXNzOw0KICAgIC0gICAgeXl0eXBlX2ludDE2ICp5eXNzcDsNCiAgICAtDQogICAgLSAg
ICAvKiBUaGUgc2VtYW50aWMgdmFsdWUgc3RhY2suICAqLw0KICAgIC0gICAgWVlTVFlQRSB5eXZz
YVtZWUlOSVRERVBUSF07DQogICAgLSAgICBZWVNUWVBFICp5eXZzOw0KICAgIC0gICAgWVlTVFlQ
RSAqeXl2c3A7DQogICAgLQ0KICAgIC0gICAgWVlTSVpFX1QgeXlzdGFja3NpemU7DQogICAgLQ0K
ICAgIC0gIGludCB5eW47DQogICAgLSAgaW50IHl5cmVzdWx0Ow0KICAgIC0gIC8qIExvb2thaGVh
ZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4gbnVtYmVyLiAgKi8NCiAg
ICAtICBpbnQgeXl0b2tlbiA9IDA7DQogICAgLSAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJl
dHVybiBzZW1hbnRpYyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUNCiAgICAtICAgICBhY3Rp
b24gcm91dGluZXMuICAqLw0KICAgIC0gIFlZU1RZUEUgeXl2YWw7DQogICAgLQ0KICAgIC0jaWYg
WVlFUlJPUl9WRVJCT1NFDQogICAgLSAgLyogQnVmZmVyIGZvciBlcnJvciBtZXNzYWdlcywgYW5k
IGl0cyBhbGxvY2F0ZWQgc2l6ZS4gICovDQogICAgLSAgY2hhciB5eW1zZ2J1ZlsxMjhdOw0KICAg
IC0gIGNoYXIgKnl5bXNnID0geXltc2didWY7DQogICAgLSAgWVlTSVpFX1QgeXltc2dfYWxsb2Mg
PSBzaXplb2YgeXltc2didWY7DQogICAgLSNlbmRpZg0KICAgIC0NCiAgICAtI2RlZmluZSBZWVBP
UFNUQUNLKE4pICAgKHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQ0KICAgIC0NCiAgICAtICAv
KiBUaGUgbnVtYmVyIG9mIHN5bWJvbHMgb24gdGhlIFJIUyBvZiB0aGUgcmVkdWNlZCBydWxlLg0K
ICAgIC0gICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJvbCBzaG91bGQgYmUgcG9wcGVkLiAg
Ki8NCiAgICAtICBpbnQgeXlsZW4gPSAwOw0KICAgIC0NCiAgICAtICB5eXNzcCA9IHl5c3MgPSB5
eXNzYTsNCiAgICAtICB5eXZzcCA9IHl5dnMgPSB5eXZzYTsNCiAgICAtICB5eXN0YWNrc2l6ZSA9
IFlZSU5JVERFUFRIOw0KICAgIC0NCiAgICAtICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFydGlu
ZyBwYXJzZVxuIikpOw0KICAgIC0NCiAgICAtICB5eXN0YXRlID0gMDsNCiAgICAtICB5eWVycnN0
YXR1cyA9IDA7DQogICAgLSAgeXluZXJycyA9IDA7DQogICAgLSAgeXljaGFyID0gWVlFTVBUWTsg
LyogQ2F1c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8NCiAgICAtICBnb3RvIHl5c2V0c3RhdGU7
DQogICAgLQ0KICAgIC0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICAtfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3Rh
dGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8DQogICAgLWAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgIC0geXlu
ZXdzdGF0ZToNCiAgICAtICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUg
dmFsdWUgYW5kIGxvY2F0aW9uIHN0YWNrcw0KICAgIC0gICAgIGhhdmUganVzdCBiZWVuIHB1c2hl
ZC4gIFNvIHB1c2hpbmcgYSBzdGF0ZSBoZXJlIGV2ZW5zIHRoZSBzdGFja3MuICAqLw0KICAgIC0g
IHl5c3NwKys7DQogICAgLQ0KICAgIC0geXlzZXRzdGF0ZToNCiAgICAtICAqeXlzc3AgPSB5eXN0
YXRlOw0KICAgIC0NCiAgICAtICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkN
CiAgICAtICAgIHsNCiAgICAtICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0
aGUgdGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovDQogICAgLSAgICAgIFlZU0laRV9UIHl5
c2l6ZSA9IHl5c3NwIC0geXlzcyArIDE7DQogICAgLQ0KICAgIC0jaWZkZWYgeXlvdmVyZmxvdw0K
ICAgIC0gICAgICB7DQogICAgLSAgICAgICAgLyogR2l2ZSB1c2VyIGEgY2hhbmNlIHRvIHJlYWxs
b2NhdGUgdGhlIHN0YWNrLiAgVXNlIGNvcGllcyBvZg0KICAgIC0gICAgICAgICAgIHRoZXNlIHNv
IHRoYXQgdGhlICYncyBkb24ndCBmb3JjZSB0aGUgcmVhbCBvbmVzIGludG8NCiAgICAtICAgICAg
ICAgICBtZW1vcnkuICAqLw0KICAgIC0gICAgICAgIFlZU1RZUEUgKnl5dnMxID0geXl2czsNCiAg
ICAtICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0geXlzczsNCiAgICAtDQogICAgLSAgICAg
ICAgLyogRWFjaCBzdGFjayBwb2ludGVyIGFkZHJlc3MgaXMgZm9sbG93ZWQgYnkgdGhlIHNpemUg
b2YgdGhlDQogICAgLSAgICAgICAgICAgZGF0YSBpbiB1c2UgaW4gdGhhdCBzdGFjaywgaW4gYnl0
ZXMuICBUaGlzIHVzZWQgdG8gYmUgYQ0KICAgIC0gICAgICAgICAgIGNvbmRpdGlvbmFsIGFyb3Vu
ZCBqdXN0IHRoZSB0d28gZXh0cmEgYXJncywgYnV0IHRoYXQgbWlnaHQNCiAgICAtICAgICAgICAg
ICBiZSB1bmRlZmluZWQgaWYgeXlvdmVyZmxvdyBpcyBhIG1hY3JvLiAgKi8NCiAgICAtICAgICAg
ICB5eW92ZXJmbG93IChZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSwNCiAgICAtICAgICAgICAgICAg
ICAgICAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwNCiAgICAtICAgICAgICAg
ICAgICAgICAgICAmeXl2czEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5dnNwKSwNCiAgICAtICAgICAg
ICAgICAgICAgICAgICAmeXlzdGFja3NpemUpOw0KICAgIC0NCiAgICAtICAgICAgICB5eXNzID0g
eXlzczE7DQogICAgLSAgICAgICAgeXl2cyA9IHl5dnMxOw0KICAgIC0gICAgICB9DQogICAgLSNl
bHNlIC8qIG5vIHl5b3ZlcmZsb3cgKi8NCiAgICAtIyBpZm5kZWYgWVlTVEFDS19SRUxPQ0FURQ0K
ICAgIC0gICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOw0KICAgIC0jIGVsc2UNCiAgICAtICAgICAg
LyogRXh0ZW5kIHRoZSBzdGFjayBvdXIgb3duIHdheS4gICovDQogICAgLSAgICAgIGlmIChZWU1B
WERFUFRIIDw9IHl5c3RhY2tzaXplKQ0KICAgIC0gICAgICAgIGdvdG8geXlleGhhdXN0ZWRsYWI7
DQogICAgLSAgICAgIHl5c3RhY2tzaXplICo9IDI7DQogICAgLSAgICAgIGlmIChZWU1BWERFUFRI
IDwgeXlzdGFja3NpemUpDQogICAgLSAgICAgICAgeXlzdGFja3NpemUgPSBZWU1BWERFUFRIOw0K
ICAgIC0NCiAgICAtICAgICAgew0KICAgIC0gICAgICAgIHl5dHlwZV9pbnQxNiAqeXlzczEgPSB5
eXNzOw0KICAgIC0gICAgICAgIHVuaW9uIHl5YWxsb2MgKnl5cHRyID0NCiAgICAtICAgICAgICAg
ICh1bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tz
aXplKSk7DQogICAgLSAgICAgICAgaWYgKCEgeXlwdHIpDQogICAgLSAgICAgICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOw0KICAgIC0gICAgICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5c3NfYWxsb2Ms
IHl5c3MpOw0KICAgIC0gICAgICAgIFlZU1RBQ0tfUkVMT0NBVEUgKHl5dnNfYWxsb2MsIHl5dnMp
Ow0KICAgIC0jICB1bmRlZiBZWVNUQUNLX1JFTE9DQVRFDQogICAgLSAgICAgICAgaWYgKHl5c3Mx
ICE9IHl5c3NhKQ0KICAgIC0gICAgICAgICAgWVlTVEFDS19GUkVFICh5eXNzMSk7DQogICAgLSAg
ICAgIH0NCiAgICAtIyBlbmRpZg0KICAgIC0jZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLw0KICAg
IC0NCiAgICAtICAgICAgeXlzc3AgPSB5eXNzICsgeXlzaXplIC0gMTsNCiAgICAtICAgICAgeXl2
c3AgPSB5eXZzICsgeXlzaXplIC0gMTsNCiAgICAtDQogICAgLSAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlN0YWNrIHNpemUgaW5jcmVhc2VkIHRvICVsdVxuIiwNCiAgICAtICAgICAgICAgICAg
ICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOw0KICAgIC0NCiAgICAtICAg
ICAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApDQogICAgLSAgICAgICAgWVlB
Qk9SVDsNCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgWVlEUFJJTlRGICgoc3RkZXJyLCAiRW50
ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsNCiAgICAtDQogICAgLSAgaWYgKHl5c3RhdGUg
PT0gWVlGSU5BTCkNCiAgICAtICAgIFlZQUNDRVBUOw0KICAgIC0NCiAgICAtICBnb3RvIHl5YmFj
a3VwOw0KICAgIC0NCiAgICAtLyotLS0tLS0tLS0tLS4NCiAgICAtfCB5eWJhY2t1cC4gIHwNCiAg
ICAtYC0tLS0tLS0tLS0tKi8NCiAgICAteXliYWNrdXA6DQogICAgLQ0KICAgIC0gIC8qIERvIGFw
cHJvcHJpYXRlIHByb2Nlc3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGENCiAg
ICAtICAgICBsb29rYWhlYWQgdG9rZW4gaWYgd2UgbmVlZCBvbmUgYW5kIGRvbid0IGFscmVhZHkg
aGF2ZSBvbmUuICAqLw0KICAgIC0NCiAgICAtICAvKiBGaXJzdCB0cnkgdG8gZGVjaWRlIHdoYXQg
dG8gZG8gd2l0aG91dCByZWZlcmVuY2UgdG8gbG9va2FoZWFkIHRva2VuLiAgKi8NCiAgICAtICB5
eW4gPSB5eXBhY3RbeXlzdGF0ZV07DQogICAgLSAgaWYgKHl5cGFjdF92YWx1ZV9pc19kZWZhdWx0
ICh5eW4pKQ0KICAgIC0gICAgZ290byB5eWRlZmF1bHQ7DQogICAgLQ0KICAgIC0gIC8qIE5vdCBr
bm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4g
ICovDQogICAgLQ0KICAgIC0gIC8qIFlZQ0hBUiBpcyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBv
ciBhIHZhbGlkIGxvb2thaGVhZCBzeW1ib2wuICAqLw0KICAgIC0gIGlmICh5eWNoYXIgPT0gWVlF
TVBUWSkNCiAgICAtICAgIHsNCiAgICAtICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGlu
ZyBhIHRva2VuOiAiKSk7DQogICAgLSAgICAgIHl5Y2hhciA9IHl5bGV4ICgpOw0KICAgIC0gICAg
fQ0KICAgIC0NCiAgICAtICBpZiAoeXljaGFyIDw9IFlZRU9GKQ0KICAgIC0gICAgew0KICAgIC0g
ICAgICB5eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7DQogICAgLSAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIk5vdyBhdCBlbmQgb2YgaW5wdXQuXG4iKSk7DQogICAgLSAgICB9DQogICAgLSAgZWxz
ZQ0KICAgIC0gICAgew0KICAgIC0gICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7
DQogICAgLSAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQgdG9rZW4gaXMiLCB5eXRva2VuLCAm
eXlsdmFsLCAmeXlsbG9jKTsNCiAgICAtICAgIH0NCiAgICAtDQogICAgLSAgLyogSWYgdGhlIHBy
b3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9yIHRvDQog
ICAgLSAgICAgZGV0ZWN0IGFuIGVycm9yLCB0YWtlIHRoYXQgYWN0aW9uLiAgKi8NCiAgICAtICB5
eW4gKz0geXl0b2tlbjsNCiAgICAtICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXlj
aGVja1t5eW5dICE9IHl5dG9rZW4pDQogICAgLSAgICBnb3RvIHl5ZGVmYXVsdDsNCiAgICAtICB5
eW4gPSB5eXRhYmxlW3l5bl07DQogICAgLSAgaWYgKHl5biA8PSAwKQ0KICAgIC0gICAgew0KICAg
IC0gICAgICBpZiAoeXl0YWJsZV92YWx1ZV9pc19lcnJvciAoeXluKSkNCiAgICAtICAgICAgICBn
b3RvIHl5ZXJybGFiOw0KICAgIC0gICAgICB5eW4gPSAteXluOw0KICAgIC0gICAgICBnb3RvIHl5
cmVkdWNlOw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICAvKiBDb3VudCB0b2tlbnMgc2hpZnRl
ZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9yDQogICAgLSAgICAgc3Rh
dHVzLiAgKi8NCiAgICAtICBpZiAoeXllcnJzdGF0dXMpDQogICAgLSAgICB5eWVycnN0YXR1cy0t
Ow0KICAgIC0NCiAgICAtICAvKiBTaGlmdCB0aGUgbG9va2FoZWFkIHRva2VuLiAgKi8NCiAgICAt
ICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2Mp
Ow0KICAgIC0NCiAgICAtICAvKiBEaXNjYXJkIHRoZSBzaGlmdGVkIHRva2VuLiAgKi8NCiAgICAt
ICB5eWNoYXIgPSBZWUVNUFRZOw0KICAgIC0NCiAgICAtICB5eXN0YXRlID0geXluOw0KICAgIC0g
IFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lODQogICAgLSAgKisreXl2c3AgPSB5
eWx2YWw7DQogICAgLSAgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElBTElaRURfRU5EDQogICAgLQ0K
ICAgIC0gIGdvdG8geXluZXdzdGF0ZTsNCiAgICAtDQogICAgLQ0KICAgIC0vKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgIC18
IHl5ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRl
LiAgfA0KICAgIC1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLw0KICAgIC15eWRlZmF1bHQ6DQogICAgLSAgeXluID0geXlkZWZhY3Rb
eXlzdGF0ZV07DQogICAgLSAgaWYgKHl5biA9PSAwKQ0KICAgIC0gICAgZ290byB5eWVycmxhYjsN
CiAgICAtICBnb3RvIHl5cmVkdWNlOw0KICAgIC0NCiAgICAtDQogICAgLS8qLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uDQogICAgLXwgeXlyZWR1Y2UgLS0gRG8gYSByZWR1Y3Rpb24uICB8
DQogICAgLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgLXl5cmVkdWNlOg0K
ICAgIC0gIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4gICov
DQogICAgLSAgeXlsZW4gPSB5eXIyW3l5bl07DQogICAgLQ0KICAgIC0gIC8qIElmIFlZTEVOIGlz
IG5vbnplcm8sIGltcGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOg0KICAg
IC0gICAgICckJCA9ICQxJy4NCiAgICAtDQogICAgLSAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93
aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJiYWdlLg0KICAgIC0gICAgIFRoaXMgYmVoYXZpb3Ig
aXMgdW5kb2N1bWVudGVkIGFuZCBCaXNvbg0KICAgIC0gICAgIHVzZXJzIHNob3VsZCBub3QgcmVs
eSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMDQogICAgLSAgICAgdW5jb25kaXRpb25hbGx5
IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2b2lkcyBhDQogICAgLSAg
ICAgR0NDIHdhcm5pbmcgdGhhdCBZWVZBTCBtYXkgYmUgdXNlZCB1bmluaXRpYWxpemVkLiAgKi8N
CiAgICAtICB5eXZhbCA9IHl5dnNwWzEteXlsZW5dOw0KICAgIC0NCiAgICAtDQogICAgLSAgWVlf
UkVEVUNFX1BSSU5UICh5eW4pOw0KICAgIC0gIHN3aXRjaCAoeXluKQ0KICAgIC0gICAgew0KICAg
IC0gICAgICAgIGNhc2UgNjoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQltZW51X2FkZF9wcm9t
cHQoUF9NRU5VLCAoeXl2c3BbLTFdLnN0cmluZyksIE5VTEwpOw0KICAgIC19DQogICAgLQ0KICAg
IC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTE6DQogICAgLQ0KICAgIC0gICAgeyB6
Y29uZl9lcnJvcigidW5leHBlY3RlZCBlbmQgc3RhdGVtZW50Iik7IH0NCiAgICAtDQogICAgLSAg
ICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMjoNCiAgICAtDQogICAgLSAgICB7IHpjb25m
X2Vycm9yKCJ1bmtub3duIHN0YXRlbWVudCBcIiVzXCIiLCAoeXl2c3BbLTJdLnN0cmluZykpOyB9
DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTM6DQogICAgLQ0K
ICAgIC0gICAgew0KICAgIC0JemNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgb3B0aW9uIFwiJXNcIiIs
ICh5eXZzcFstMl0uaWQpLT5uYW1lKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0K
ICAgIC0NCiAgICAtICBjYXNlIDE0Og0KICAgIC0NCiAgICAtICAgIHsgemNvbmZfZXJyb3IoImlu
dmFsaWQgc3RhdGVtZW50Iik7IH0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAg
LSAgY2FzZSAzMToNCiAgICAtDQogICAgLSAgICB7IHpjb25mX2Vycm9yKCJ1bmtub3duIG9wdGlv
biBcIiVzXCIiLCAoeXl2c3BbLTJdLnN0cmluZykpOyB9DQogICAgLQ0KICAgIC0gICAgYnJlYWs7
DQogICAgLQ0KICAgIC0gIGNhc2UgMzI6DQogICAgLQ0KICAgIC0gICAgeyB6Y29uZl9lcnJvcigi
aW52YWxpZCBvcHRpb24iKTsgfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAt
ICBjYXNlIDMzOg0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCSh5eXZzcFstMV0uc3ltYm9sKS0+
ZmxhZ3MgfD0gU1lNQk9MX09QVElPTkFMOw0KICAgIC0JbWVudV9hZGRfZW50cnkoKHl5dnNwWy0x
XS5zeW1ib2wpKTsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNvbmZpZyAlc1xu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zeW1ib2wpLT5u
YW1lKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNl
IDM0Og0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk
OmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLX0N
CiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAzNToNCiAgICAtDQog
ICAgLSAgICB7DQogICAgLQkoeXl2c3BbLTFdLnN5bWJvbCktPmZsYWdzIHw9IFNZTUJPTF9PUFRJ
T05BTDsNCiAgICAtCW1lbnVfYWRkX2VudHJ5KCh5eXZzcFstMV0uc3ltYm9sKSk7DQogICAgLQlw
cmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpLCAoeXl2c3BbLTFdLnN5bWJvbCktPm5hbWUpOw0KICAgIC19DQog
ICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMzY6DQogICAgLQ0KICAg
IC0gICAgew0KICAgIC0JaWYgKGN1cnJlbnRfZW50cnktPnByb21wdCkNCiAgICAtCQljdXJyZW50
X2VudHJ5LT5wcm9tcHQtPnR5cGUgPSBQX01FTlU7DQogICAgLQllbHNlDQogICAgLQkJemNvbmZw
cmludCgid2FybmluZzogbWVudWNvbmZpZyBzdGF0ZW1lbnQgd2l0aG91dCBwcm9tcHQiKTsNCiAg
ICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLX0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAg
ICAtDQogICAgLSAgY2FzZSA0NDoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQltZW51X3NldF90
eXBlKCh5eXZzcFstMl0uaWQpLT5zdHlwZSk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIl
czolZDp0eXBlKCV1KVxuIiwNCiAgICAtCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
LA0KICAgIC0JCSh5eXZzcFstMl0uaWQpLT5zdHlwZSk7DQogICAgLX0NCiAgICAtDQogICAgLSAg
ICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA0NToNCiAgICAtDQogICAgLSAgICB7DQogICAg
LQltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQsICh5eXZzcFstMl0uc3RyaW5nKSwgKHl5dnNwWy0x
XS5leHByKSk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19DQogICAgLQ0KICAgIC0gICAg
YnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNDY6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0J
bWVudV9hZGRfZXhwcihQX0RFRkFVTFQsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFstMV0uZXhw
cikpOw0KICAgIC0JaWYgKCh5eXZzcFstM10uaWQpLT5zdHlwZSAhPSBTX1VOS05PV04pDQogICAg
LQkJbWVudV9zZXRfdHlwZSgoeXl2c3BbLTNdLmlkKS0+c3R5cGUpOw0KICAgIC0JcHJpbnRkKERF
QlVHX1BBUlNFLCAiJXM6JWQ6ZGVmYXVsdCgldSlcbiIsDQogICAgLQkJemNvbmZfY3VybmFtZSgp
LCB6Y29uZl9saW5lbm8oKSwNCiAgICAtCQkoeXl2c3BbLTNdLmlkKS0+c3R5cGUpOw0KICAgIC19
DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNDc6DQogICAgLQ0K
ICAgIC0gICAgew0KICAgIC0JbWVudV9hZGRfc3ltYm9sKFBfU0VMRUNULCAoeXl2c3BbLTJdLnN5
bWJvbCksICh5eXZzcFstMV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6
JWQ6c2VsZWN0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfQ0K
ICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDQ4Og0KICAgIC0NCiAg
ICAtICAgIHsNCiAgICAtCW1lbnVfYWRkX3N5bWJvbChQX0lNUExZLCAoeXl2c3BbLTJdLnN5bWJv
bCksICh5eXZzcFstMV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6
aW1wbHlcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19DQogICAg
LQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNDk6DQogICAgLQ0KICAgIC0g
ICAgew0KICAgIC0JbWVudV9hZGRfZXhwcihQX1JBTkdFLCBleHByX2FsbG9jX2NvbXAoRV9SQU5H
RSwoeXl2c3BbLTNdLnN5bWJvbCksICh5eXZzcFstMl0uc3ltYm9sKSksICh5eXZzcFstMV0uZXhw
cikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cmFuZ2VcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19DQogICAgLQ0KICAgIC0gICAgYnJlYWs7
DQogICAgLQ0KICAgIC0gIGNhc2UgNTI6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0JY29uc3Qg
c3RydWN0IGtjb25mX2lkICppZCA9IGtjb25mX2lkX2xvb2t1cCgoeXl2c3BbLTFdLnN0cmluZyks
IHN0cmxlbigoeXl2c3BbLTFdLnN0cmluZykpKTsNCiAgICAtCWlmIChpZCAmJiBpZC0+ZmxhZ3Mg
JiBURl9PUFRJT04pIHsNCiAgICAtCQltZW51X2FkZF9vcHRpb24oaWQtPnRva2VuLCAoeXl2c3Bb
MF0uc3RyaW5nKSk7DQogICAgLQkJZnJlZSgoeXl2c3BbMF0uc3RyaW5nKSk7DQogICAgLQl9DQog
ICAgLQllbHNlDQogICAgLQkJemNvbmZwcmludCgid2FybmluZzogaWdub3JpbmcgdW5rbm93biBv
cHRpb24gJXMiLCAoeXl2c3BbLTFdLnN0cmluZykpOw0KICAgIC0JZnJlZSgoeXl2c3BbLTFdLnN0
cmluZykpOw0KICAgIC19DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNh
c2UgNTM6DQogICAgLQ0KICAgIC0gICAgeyAoeXl2YWwuc3RyaW5nKSA9IE5VTEw7IH0NCiAgICAt
DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA1NDoNCiAgICAtDQogICAgLSAg
ICB7ICh5eXZhbC5zdHJpbmcpID0gKHl5dnNwWzBdLnN0cmluZyk7IH0NCiAgICAtDQogICAgLSAg
ICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA1NToNCiAgICAtDQogICAgLSAgICB7DQogICAg
LQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBzeW1fbG9va3VwKCh5eXZzcFstMV0uc3RyaW5nKSwgU1lN
Qk9MX0NIT0lDRSk7DQogICAgLQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9OT19XUklURTsNCiAgICAt
CW1lbnVfYWRkX2VudHJ5KHN5bSk7DQogICAgLQltZW51X2FkZF9leHByKFBfQ0hPSUNFLCBOVUxM
LCBOVUxMKTsNCiAgICAtCWZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsNCiAgICAtCXByaW50ZChE
RUJVR19QQVJTRSwgIiVzOiVkOmNob2ljZVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5l
bm8oKSk7DQogICAgLX0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2Fz
ZSA1NjoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQkoeXl2YWwubWVudSkgPSBtZW51X2FkZF9t
ZW51KCk7DQogICAgLX0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2Fz
ZSA1NzoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQlpZiAoemNvbmZfZW5kdG9rZW4oKHl5dnNw
WzBdLmlkKSwgVF9DSE9JQ0UsIFRfRU5EQ0hPSUNFKSkgew0KICAgIC0JCW1lbnVfZW5kX21lbnUo
KTsNCiAgICAtCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjaG9pY2VcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JfQ0KICAgIC19DQogICAgLQ0KICAg
IC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNjU6DQogICAgLQ0KICAgIC0gICAgew0K
ICAgIC0JbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAoeXl2c3BbLTJdLnN0cmluZyksICh5eXZz
cFstMV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4i
LCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAt
ICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDY2Og0KICAgIC0NCiAgICAtICAgIHsNCiAg
ICAtCWlmICgoeXl2c3BbLTJdLmlkKS0+c3R5cGUgPT0gU19CT09MRUFOIHx8ICh5eXZzcFstMl0u
aWQpLT5zdHlwZSA9PSBTX1RSSVNUQVRFKSB7DQogICAgLQkJbWVudV9zZXRfdHlwZSgoeXl2c3Bb
LTJdLmlkKS0+c3R5cGUpOw0KICAgIC0JCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnR5cGUo
JXUpXG4iLA0KICAgIC0JCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpLA0KICAgIC0J
CQkoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOw0KICAgIC0JfSBlbHNlDQogICAgLQkJWVlFUlJPUjsN
CiAgICAtfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDY3Og0K
ICAgIC0NCiAgICAtICAgIHsNCiAgICAtCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0gU1lN
Qk9MX09QVElPTkFMOw0KICAgIC0JcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6b3B0aW9uYWxc
biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC19DQogICAgLQ0KICAg
IC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNjg6DQogICAgLQ0KICAgIC0gICAgew0K
ICAgIC0JaWYgKCh5eXZzcFstM10uaWQpLT5zdHlwZSA9PSBTX1VOS05PV04pIHsNCiAgICAtCQlt
ZW51X2FkZF9zeW1ib2woUF9ERUZBVUxULCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFstMV0u
ZXhwcikpOw0KICAgIC0JCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHRcbiIsDQog
ICAgLQkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JfSBlbHNlDQog
ICAgLQkJWVlFUlJPUjsNCiAgICAtfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAg
ICAtICBjYXNlIDcxOg0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAt
CW1lbnVfYWRkX2VudHJ5KE5VTEwpOw0KICAgIC0JbWVudV9hZGRfZGVwKCh5eXZzcFstMV0uZXhw
cikpOw0KICAgIC0JKHl5dmFsLm1lbnUpID0gbWVudV9hZGRfbWVudSgpOw0KICAgIC19DQogICAg
LQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgNzI6DQogICAgLQ0KICAgIC0g
ICAgew0KICAgIC0JaWYgKHpjb25mX2VuZHRva2VuKCh5eXZzcFswXS5pZCksIFRfSUYsIFRfRU5E
SUYpKSB7DQogICAgLQkJbWVudV9lbmRfbWVudSgpOw0KICAgIC0JCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmVuZGlmXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAg
ICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNl
IDc4Og0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCW1lbnVfYWRkX2VudHJ5KE5VTEwpOw0KICAg
IC0JbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgKHl5dnNwWy0xXS5zdHJpbmcpLCBOVUxMKTsNCiAg
ICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm1lbnVcbiIsIHpjb25mX2N1cm5hbWUoKSwg
emNvbmZfbGluZW5vKCkpOw0KICAgIC19DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0K
ICAgIC0gIGNhc2UgNzk6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0JKHl5dmFsLm1lbnUpID0g
bWVudV9hZGRfbWVudSgpOw0KICAgIC19DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0K
ICAgIC0gIGNhc2UgODA6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0JaWYgKHpjb25mX2VuZHRv
a2VuKCh5eXZzcFswXS5pZCksIFRfTUVOVSwgVF9FTkRNRU5VKSkgew0KICAgIC0JCW1lbnVfZW5k
X21lbnUoKTsNCiAgICAtCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRtZW51XG4iLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtCX0NCiAgICAtfQ0KICAgIC0N
CiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDg2Og0KICAgIC0NCiAgICAtICAg
IHsNCiAgICAtCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJjZSAlc1xuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zdHJpbmcpKTsNCiAgICAtCXpj
b25mX25leHRmaWxlKCh5eXZzcFstMV0uc3RyaW5nKSk7DQogICAgLQlmcmVlKCh5eXZzcFstMV0u
c3RyaW5nKSk7DQogICAgLX0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAg
Y2FzZSA4NzoNCiAgICAtDQogICAgLSAgICB7DQogICAgLQltZW51X2FkZF9lbnRyeShOVUxMKTsN
CiAgICAtCW1lbnVfYWRkX3Byb21wdChQX0NPTU1FTlQsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVM
TCk7DQogICAgLQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb21tZW50XG4iLCB6Y29uZl9j
dXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtICAgIGJyZWFr
Ow0KICAgIC0NCiAgICAtICBjYXNlIDg5Og0KICAgIC0NCiAgICAtICAgIHsNCiAgICAtCXByaW50
ZChERUJVR19QQVJTRSwgIiVzOiVkOmhlbHBcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCkpOw0KICAgIC0JemNvbmZfc3RhcnRoZWxwKCk7DQogICAgLX0NCiAgICAtDQogICAgLSAg
ICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA5MDoNCiAgICAtDQogICAgLSAgICB7DQogICAg
LQlpZiAoY3VycmVudF9lbnRyeS0+aGVscCkgew0KICAgIC0JCWZyZWUoY3VycmVudF9lbnRyeS0+
aGVscCk7DQogICAgLQkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBkZWZpbmVkIHdpdGggbW9y
ZSB0aGFuIG9uZSBoZWxwIHRleHQgLS0gb25seSB0aGUgbGFzdCBvbmUgd2lsbCBiZSB1c2VkIiwN
CiAgICAtCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOw0KICAg
IC0JfQ0KICAgIC0NCiAgICAtCS8qIElzIHRoZSBoZWxwIHRleHQgZW1wdHkgb3IgYWxsIHdoaXRl
c3BhY2U/ICovDQogICAgLQlpZiAoKHl5dnNwWzBdLnN0cmluZylbc3Ryc3BuKCh5eXZzcFswXS5z
dHJpbmcpLCAiIFxmXG5cclx0XHYiKV0gPT0gJ1wwJykNCiAgICAtCQl6Y29uZnByaW50KCJ3YXJu
aW5nOiAnJXMnIGRlZmluZWQgd2l0aCBibGFuayBoZWxwIHRleHQiLA0KICAgIC0JCQkgICBjdXJy
ZW50X2VudHJ5LT5zeW0tPm5hbWUgPzogIjxjaG9pY2U+Iik7DQogICAgLQ0KICAgIC0JY3VycmVu
dF9lbnRyeS0+aGVscCA9ICh5eXZzcFswXS5zdHJpbmcpOw0KICAgIC19DQogICAgLQ0KICAgIC0g
ICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgOTU6DQogICAgLQ0KICAgIC0gICAgew0KICAg
IC0JbWVudV9hZGRfZGVwKCh5eXZzcFstMV0uZXhwcikpOw0KICAgIC0JcHJpbnRkKERFQlVHX1BB
UlNFLCAiJXM6JWQ6ZGVwZW5kcyBvblxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSk7DQogICAgLX0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSA5
OToNCiAgICAtDQogICAgLSAgICB7DQogICAgLQltZW51X2FkZF92aXNpYmlsaXR5KCh5eXZzcFsw
XS5leHByKSk7DQogICAgLX0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAg
Y2FzZSAxMDE6DQogICAgLQ0KICAgIC0gICAgew0KICAgIC0JbWVudV9hZGRfcHJvbXB0KFBfUFJP
TVBULCAoeXl2c3BbLTFdLnN0cmluZyksICh5eXZzcFswXS5leHByKSk7DQogICAgLX0NCiAgICAt
DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMDQ6DQogICAgLQ0KICAgIC0g
ICAgeyAoeXl2YWwuaWQpID0gKHl5dnNwWy0xXS5pZCk7IH0NCiAgICAtDQogICAgLSAgICBicmVh
azsNCiAgICAtDQogICAgLSAgY2FzZSAxMDU6DQogICAgLQ0KICAgIC0gICAgeyAoeXl2YWwuaWQp
ID0gKHl5dnNwWy0xXS5pZCk7IH0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAg
LSAgY2FzZSAxMDY6DQogICAgLQ0KICAgIC0gICAgeyAoeXl2YWwuaWQpID0gKHl5dnNwWy0xXS5p
ZCk7IH0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMDk6DQog
ICAgLQ0KICAgIC0gICAgeyAoeXl2YWwuZXhwcikgPSBOVUxMOyB9DQogICAgLQ0KICAgIC0gICAg
YnJlYWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTEwOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFs
LmV4cHIpID0gKHl5dnNwWzBdLmV4cHIpOyB9DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAg
LQ0KICAgIC0gIGNhc2UgMTExOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4cHIpID0gZXhw
cl9hbGxvY19zeW1ib2woKHl5dnNwWzBdLnN5bWJvbCkpOyB9DQogICAgLQ0KICAgIC0gICAgYnJl
YWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTEyOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4
cHIpID0gZXhwcl9hbGxvY19jb21wKEVfTFRILCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFsw
XS5zeW1ib2wpKTsgfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNl
IDExMzoNCiAgICAtDQogICAgLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChF
X0xFUSwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0NCiAgICAtDQog
ICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMTQ6DQogICAgLQ0KICAgIC0gICAg
eyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9HVEgsICh5eXZzcFstMl0uc3ltYm9s
KSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0K
ICAgIC0gIGNhc2UgMTE1Og0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9h
bGxvY19jb21wKEVfR0VRLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsg
fQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDExNjoNCiAgICAt
DQogICAgLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCAoeXl2
c3BbLTJdLnN5bWJvbCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQ0KICAgIC0NCiAgICAtICAgIGJy
ZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDExNzoNCiAgICAtDQogICAgLSAgICB7ICh5eXZhbC5l
eHByKSA9IGV4cHJfYWxsb2NfY29tcChFX1VORVFVQUwsICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5
dnNwWzBdLnN5bWJvbCkpOyB9DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0g
IGNhc2UgMTE4Og0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4cHIpID0gKHl5dnNwWy0xXS5l
eHByKTsgfQ0KICAgIC0NCiAgICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDExOToN
CiAgICAtDQogICAgLSAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nfb25lKEVfTk9ULCAo
eXl2c3BbMF0uZXhwcikpOyB9DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0g
IGNhc2UgMTIwOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY190
d28oRV9PUiwgKHl5dnNwWy0yXS5leHByKSwgKHl5dnNwWzBdLmV4cHIpKTsgfQ0KICAgIC0NCiAg
ICAtICAgIGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDEyMToNCiAgICAtDQogICAgLSAgICB7
ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCAoeXl2c3BbLTJdLmV4cHIpLCAo
eXl2c3BbMF0uZXhwcikpOyB9DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0g
IGNhc2UgMTIyOg0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLnN5bWJvbCkgPSBzeW1fbG9va3Vw
KCh5eXZzcFswXS5zdHJpbmcpLCAwKTsgZnJlZSgoeXl2c3BbMF0uc3RyaW5nKSk7IH0NCiAgICAt
DQogICAgLSAgICBicmVhazsNCiAgICAtDQogICAgLSAgY2FzZSAxMjQ6DQogICAgLQ0KICAgIC0g
ICAgeyAoeXl2YWwuc3ltYm9sKSA9IHN5bV9sb29rdXAoKHl5dnNwWzBdLnN0cmluZyksIFNZTUJP
TF9DT05TVCk7IGZyZWUoKHl5dnNwWzBdLnN0cmluZykpOyB9DQogICAgLQ0KICAgIC0gICAgYnJl
YWs7DQogICAgLQ0KICAgIC0gIGNhc2UgMTI1Og0KICAgIC0NCiAgICAtICAgIHsgKHl5dmFsLnN0
cmluZykgPSBOVUxMOyB9DQogICAgLQ0KICAgIC0gICAgYnJlYWs7DQogICAgLQ0KICAgIC0gIGNh
c2UgMTI3Og0KICAgIC0NCiAgICAtICAgIHsgdmFyaWFibGVfYWRkKCh5eXZzcFstM10uc3RyaW5n
KSwgKHl5dnNwWy0xXS5zdHJpbmcpLCAoeXl2c3BbLTJdLmZsYXZvcikpOyBmcmVlKCh5eXZzcFst
M10uc3RyaW5nKSk7IGZyZWUoKHl5dnNwWy0xXS5zdHJpbmcpKTsgfQ0KICAgIC0NCiAgICAtICAg
IGJyZWFrOw0KICAgIC0NCiAgICAtICBjYXNlIDEyODoNCiAgICAtDQogICAgLSAgICB7ICh5eXZh
bC5zdHJpbmcpID0geHN0cmR1cCgiIik7IH0NCiAgICAtDQogICAgLSAgICBicmVhazsNCiAgICAt
DQogICAgLQ0KICAgIC0NCiAgICAtICAgICAgZGVmYXVsdDogYnJlYWs7DQogICAgLSAgICB9DQog
ICAgLSAgLyogVXNlciBzZW1hbnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFu
ZCB0aGF0IHJlcXVpcmVzDQogICAgLSAgICAgdGhhdCB5eXRva2VuIGJlIHVwZGF0ZWQgd2l0aCB0
aGUgbmV3IHRyYW5zbGF0aW9uLiAgV2UgdGFrZSB0aGUNCiAgICAtICAgICBhcHByb2FjaCBvZiB0
cmFuc2xhdGluZyBpbW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uDQogICAg
LSAgICAgT25lIGFsdGVybmF0aXZlIGlzIHRyYW5zbGF0aW5nIGhlcmUgYWZ0ZXIgZXZlcnkgc2Vt
YW50aWMgYWN0aW9uLA0KICAgIC0gICAgIGJ1dCB0aGF0IHRyYW5zbGF0aW9uIHdvdWxkIGJlIG1p
c3NlZCBpZiB0aGUgc2VtYW50aWMgYWN0aW9uIGludm9rZXMNCiAgICAtICAgICBZWUFCT1JULCBZ
WUFDQ0VQVCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IN
CiAgICAtICAgICBpZiBpdCBpbnZva2VzIFlZQkFDS1VQLiAgSW4gdGhlIGNhc2Ugb2YgWVlBQk9S
VCBvciBZWUFDQ0VQVCwgYW4NCiAgICAtICAgICBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBtaWdodCB0
aGVuIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuICBJbiB0aGUNCiAgICAtICAgICBjYXNlIG9mIFlZ
RVJST1Igb3IgWVlCQUNLVVAsIHN1YnNlcXVlbnQgcGFyc2VyIGFjdGlvbnMgbWlnaHQgbGVhZA0K
ICAgIC0gICAgIHRvIGFuIGluY29ycmVjdCBkZXN0cnVjdG9yIGNhbGwgb3IgdmVyYm9zZSBzeW50
YXggZXJyb3IgbWVzc2FnZQ0KICAgIC0gICAgIGJlZm9yZSB0aGUgbG9va2FoZWFkIGlzIHRyYW5z
bGF0ZWQuICAqLw0KICAgIC0gIFlZX1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0s
ICZ5eXZhbCwgJnl5bG9jKTsNCiAgICAtDQogICAgLSAgWVlQT1BTVEFDSyAoeXlsZW4pOw0KICAg
IC0gIHl5bGVuID0gMDsNCiAgICAtICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOw0KICAg
IC0NCiAgICAtICAqKyt5eXZzcCA9IHl5dmFsOw0KICAgIC0NCiAgICAtICAvKiBOb3cgJ3NoaWZ0
JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hhdCBzdGF0ZQ0KICAg
IC0gICAgIHRoYXQgZ29lcyB0bywgYmFzZWQgb24gdGhlIHN0YXRlIHdlIHBvcHBlZCBiYWNrIHRv
IGFuZCB0aGUgcnVsZQ0KICAgIC0gICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8NCiAgICAtDQog
ICAgLSAgeXluID0geXlyMVt5eW5dOw0KICAgIC0NCiAgICAtICB5eXN0YXRlID0geXlwZ290b1t5
eW4gLSBZWU5UT0tFTlNdICsgKnl5c3NwOw0KICAgIC0gIGlmICgwIDw9IHl5c3RhdGUgJiYgeXlz
dGF0ZSA8PSBZWUxBU1QgJiYgeXljaGVja1t5eXN0YXRlXSA9PSAqeXlzc3ApDQogICAgLSAgICB5
eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsNCiAgICAtICBlbHNlDQogICAgLSAgICB5eXN0YXRl
ID0geXlkZWZnb3RvW3l5biAtIFlZTlRPS0VOU107DQogICAgLQ0KICAgIC0gIGdvdG8geXluZXdz
dGF0ZTsNCiAgICAtDQogICAgLQ0KICAgIC0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLg0KICAgIC18IHl5ZXJybGFiIC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yLiAg
fA0KICAgIC1gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgIC15
eWVycmxhYjoNCiAgICAtICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3QgbG9va2FoZWFkIHRy
YW5zbGF0aW9uLiAgU2VlIGNvbW1lbnRzIGF0DQogICAgLSAgICAgdXNlciBzZW1hbnRpYyBhY3Rp
b25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuICAqLw0KICAgIC0gIHl5dG9rZW4gPSB5eWNo
YXIgPT0gWVlFTVBUWSA/IFlZRU1QVFkgOiBZWVRSQU5TTEFURSAoeXljaGFyKTsNCiAgICAtDQog
ICAgLSAgLyogSWYgbm90IGFscmVhZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQg
dGhpcyBlcnJvci4gICovDQogICAgLSAgaWYgKCF5eWVycnN0YXR1cykNCiAgICAtICAgIHsNCiAg
ICAtICAgICAgKyt5eW5lcnJzOw0KICAgIC0jaWYgISBZWUVSUk9SX1ZFUkJPU0UNCiAgICAtICAg
ICAgeXllcnJvciAoWVlfKCJzeW50YXggZXJyb3IiKSk7DQogICAgLSNlbHNlDQogICAgLSMgZGVm
aW5lIFlZU1lOVEFYX0VSUk9SIHl5c3ludGF4X2Vycm9yICgmeXltc2dfYWxsb2MsICZ5eW1zZywg
XA0KICAgIC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlzc3AsIHl5
dG9rZW4pDQogICAgLSAgICAgIHsNCiAgICAtICAgICAgICBjaGFyIGNvbnN0ICp5eW1zZ3AgPSBZ
WV8oInN5bnRheCBlcnJvciIpOw0KICAgIC0gICAgICAgIGludCB5eXN5bnRheF9lcnJvcl9zdGF0
dXM7DQogICAgLSAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7
DQogICAgLSAgICAgICAgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAwKQ0KICAgIC0gICAg
ICAgICAgeXltc2dwID0geXltc2c7DQogICAgLSAgICAgICAgZWxzZSBpZiAoeXlzeW50YXhfZXJy
b3Jfc3RhdHVzID09IDEpDQogICAgLSAgICAgICAgICB7DQogICAgLSAgICAgICAgICAgIGlmICh5
eW1zZyAhPSB5eW1zZ2J1ZikNCiAgICAtICAgICAgICAgICAgICBZWVNUQUNLX0ZSRUUgKHl5bXNn
KTsNCiAgICAtICAgICAgICAgICAgeXltc2cgPSAoY2hhciAqKSBZWVNUQUNLX0FMTE9DICh5eW1z
Z19hbGxvYyk7DQogICAgLSAgICAgICAgICAgIGlmICgheXltc2cpDQogICAgLSAgICAgICAgICAg
ICAgew0KICAgIC0gICAgICAgICAgICAgICAgeXltc2cgPSB5eW1zZ2J1ZjsNCiAgICAtICAgICAg
ICAgICAgICAgIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOw0KICAgIC0gICAgICAgICAg
ICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gMjsNCiAgICAtICAgICAgICAgICAgICB9DQog
ICAgLSAgICAgICAgICAgIGVsc2UNCiAgICAtICAgICAgICAgICAgICB7DQogICAgLSAgICAgICAg
ICAgICAgICB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSBZWVNZTlRBWF9FUlJPUjsNCiAgICAtICAg
ICAgICAgICAgICAgIHl5bXNncCA9IHl5bXNnOw0KICAgIC0gICAgICAgICAgICAgIH0NCiAgICAt
ICAgICAgICAgIH0NCiAgICAtICAgICAgICB5eWVycm9yICh5eW1zZ3ApOw0KICAgIC0gICAgICAg
IGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMikNCiAgICAtICAgICAgICAgIGdvdG8geXll
eGhhdXN0ZWRsYWI7DQogICAgLSAgICAgIH0NCiAgICAtIyB1bmRlZiBZWVNZTlRBWF9FUlJPUg0K
ICAgIC0jZW5kaWYNCiAgICAtICAgIH0NCiAgICAtDQogICAgLQ0KICAgIC0NCiAgICAtICBpZiAo
eXllcnJzdGF0dXMgPT0gMykNCiAgICAtICAgIHsNCiAgICAtICAgICAgLyogSWYganVzdCB0cmll
ZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2thaGVhZCB0b2tlbiBhZnRlciBhbg0KICAgIC0gICAg
ICAgICBlcnJvciwgZGlzY2FyZCBpdC4gICovDQogICAgLQ0KICAgIC0gICAgICBpZiAoeXljaGFy
IDw9IFlZRU9GKQ0KICAgIC0gICAgICAgIHsNCiAgICAtICAgICAgICAgIC8qIFJldHVybiBmYWls
dXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovDQogICAgLSAgICAgICAgICBpZiAoeXljaGFyID09
IFlZRU9GKQ0KICAgIC0gICAgICAgICAgICBZWUFCT1JUOw0KICAgIC0gICAgICAgIH0NCiAgICAt
ICAgICAgZWxzZQ0KICAgIC0gICAgICAgIHsNCiAgICAtICAgICAgICAgIHl5ZGVzdHJ1Y3QgKCJF
cnJvcjogZGlzY2FyZGluZyIsDQogICAgLSAgICAgICAgICAgICAgICAgICAgICB5eXRva2VuLCAm
eXlsdmFsKTsNCiAgICAtICAgICAgICAgIHl5Y2hhciA9IFlZRU1QVFk7DQogICAgLSAgICAgICAg
fQ0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICAvKiBFbHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxv
b2thaGVhZCB0b2tlbiBhZnRlciBzaGlmdGluZyB0aGUgZXJyb3INCiAgICAtICAgICB0b2tlbi4g
ICovDQogICAgLSAgZ290byB5eWVycmxhYjE7DQogICAgLQ0KICAgIC0NCiAgICAtLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAgLXwgeXll
cnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAgfA0KICAgIC1g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAg
ICAteXllcnJvcmxhYjoNCiAgICAtDQogICAgLSAgLyogUGFjaWZ5IGNvbXBpbGVycyBsaWtlIEdD
QyB3aGVuIHRoZSB1c2VyIGNvZGUgbmV2ZXIgaW52b2tlcw0KICAgIC0gICAgIFlZRVJST1IgYW5k
IHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9yZSBuZXZlciBhcHBlYXJzIGluIHVzZXINCiAg
ICAtICAgICBjb2RlLiAgKi8NCiAgICAtICBpZiAoLypDT05TVENPTkQqLyAwKQ0KICAgIC0gICAg
IGdvdG8geXllcnJvcmxhYjsNCiAgICAtDQogICAgLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5
bWJvbHMgb2YgdGhlIHJ1bGUgd2hvc2UgYWN0aW9uIHRyaWdnZXJlZA0KICAgIC0gICAgIHRoaXMg
WVlFUlJPUi4gICovDQogICAgLSAgWVlQT1BTVEFDSyAoeXlsZW4pOw0KICAgIC0gIHl5bGVuID0g
MDsNCiAgICAtICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOw0KICAgIC0gIHl5c3RhdGUg
PSAqeXlzc3A7DQogICAgLSAgZ290byB5eWVycmxhYjE7DQogICAgLQ0KICAgIC0NCiAgICAtLyot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLg0KICAgIC18IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBzeW50YXggZXJy
b3IgYW5kIFlZRVJST1IuICB8DQogICAgLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAteXllcnJsYWIxOg0KICAgIC0g
IHl5ZXJyc3RhdHVzID0gMzsgICAgICAvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNyZW1l
bnRzIHRoaXMuICAqLw0KICAgIC0NCiAgICAtICBmb3IgKDs7KQ0KICAgIC0gICAgew0KICAgIC0g
ICAgICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07DQogICAgLSAgICAgIGlmICgheXlwYWN0X3ZhbHVl
X2lzX2RlZmF1bHQgKHl5bikpDQogICAgLSAgICAgICAgew0KICAgIC0gICAgICAgICAgeXluICs9
IFlZVEVSUk9SOw0KICAgIC0gICAgICAgICAgaWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1Qg
JiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9SKQ0KICAgIC0gICAgICAgICAgICB7DQogICAgLSAg
ICAgICAgICAgICAgeXluID0geXl0YWJsZVt5eW5dOw0KICAgIC0gICAgICAgICAgICAgIGlmICgw
IDwgeXluKQ0KICAgIC0gICAgICAgICAgICAgICAgYnJlYWs7DQogICAgLSAgICAgICAgICAgIH0N
CiAgICAtICAgICAgICB9DQogICAgLQ0KICAgIC0gICAgICAvKiBQb3AgdGhlIGN1cnJlbnQgc3Rh
dGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4gICovDQogICAgLSAg
ICAgIGlmICh5eXNzcCA9PSB5eXNzKQ0KICAgIC0gICAgICAgIFlZQUJPUlQ7DQogICAgLQ0KICAg
IC0NCiAgICAtICAgICAgeXlkZXN0cnVjdCAoIkVycm9yOiBwb3BwaW5nIiwNCiAgICAtICAgICAg
ICAgICAgICAgICAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCk7DQogICAgLSAgICAgIFlZUE9QU1RB
Q0sgKDEpOw0KICAgIC0gICAgICB5eXN0YXRlID0gKnl5c3NwOw0KICAgIC0gICAgICBZWV9TVEFD
S19QUklOVCAoeXlzcywgeXlzc3ApOw0KICAgIC0gICAgfQ0KICAgIC0NCiAgICAtICBZWV9JR05P
UkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTg0KICAgIC0gICorK3l5dnNwID0geXlsdmFsOw0K
ICAgIC0gIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORA0KICAgIC0NCiAgICAtDQog
ICAgLSAgLyogU2hpZnQgdGhlIGVycm9yIHRva2VuLiAgKi8NCiAgICAtICBZWV9TWU1CT0xfUFJJ
TlQgKCJTaGlmdGluZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOw0KICAgIC0NCiAgICAt
ICB5eXN0YXRlID0geXluOw0KICAgIC0gIGdvdG8geXluZXdzdGF0ZTsNCiAgICAtDQogICAgLQ0K
ICAgIC0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAgLXwgeXlh
Y2NlcHRsYWIgLS0gWVlBQ0NFUFQgY29tZXMgaGVyZS4gIHwNCiAgICAtYC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgIC15eWFjY2VwdGxhYjoNCiAgICAtICB5eXJl
c3VsdCA9IDA7DQogICAgLSAgZ290byB5eXJldHVybjsNCiAgICAtDQogICAgLS8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAgLXwgeXlhYm9ydGxhYiAtLSBZWUFCT1JU
IGNvbWVzIGhlcmUuICB8DQogICAgLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSovDQogICAgLXl5YWJvcnRsYWI6DQogICAgLSAgeXlyZXN1bHQgPSAxOw0KICAgIC0gIGdvdG8g
eXlyZXR1cm47DQogICAgLQ0KICAgIC0jaWYgIWRlZmluZWQgeXlvdmVyZmxvdyB8fCBZWUVSUk9S
X1ZFUkJPU0UNCiAgICAtLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLg0KICAgIC18IHl5ZXhoYXVzdGVkbGFiIC0tIG1lbW9yeSBleGhhdXN0aW9uIGNv
bWVzIGhlcmUuICB8DQogICAgLWAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tKi8NCiAgICAteXlleGhhdXN0ZWRsYWI6DQogICAgLSAgeXllcnJvciAoWVlf
KCJtZW1vcnkgZXhoYXVzdGVkIikpOw0KICAgIC0gIHl5cmVzdWx0ID0gMjsNCiAgICAtICAvKiBG
YWxsIHRocm91Z2guICAqLw0KICAgIC0jZW5kaWYNCiAgICAtDQogICAgLXl5cmV0dXJuOg0KICAg
IC0gIGlmICh5eWNoYXIgIT0gWVlFTVBUWSkNCiAgICAtICAgIHsNCiAgICAtICAgICAgLyogTWFr
ZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50
cyBhdA0KICAgIC0gICAgICAgICB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlz
IG5lY2Vzc2FyeS4gICovDQogICAgLSAgICAgIHl5dG9rZW4gPSBZWVRSQU5TTEFURSAoeXljaGFy
KTsNCiAgICAtICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRpbmcgbG9va2FoZWFk
IiwNCiAgICAtICAgICAgICAgICAgICAgICAgeXl0b2tlbiwgJnl5bHZhbCk7DQogICAgLSAgICB9
DQogICAgLSAgLyogRG8gbm90IHJlY2xhaW0gdGhlIHN5bWJvbHMgb2YgdGhlIHJ1bGUgd2hvc2Ug
YWN0aW9uIHRyaWdnZXJlZA0KICAgIC0gICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICov
DQogICAgLSAgWVlQT1BTVEFDSyAoeXlsZW4pOw0KICAgIC0gIFlZX1NUQUNLX1BSSU5UICh5eXNz
LCB5eXNzcCk7DQogICAgLSAgd2hpbGUgKHl5c3NwICE9IHl5c3MpDQogICAgLSAgICB7DQogICAg
LSAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBwb3BwaW5nIiwNCiAgICAtICAgICAgICAgICAg
ICAgICAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwKTsNCiAgICAtICAgICAgWVlQT1BTVEFDSyAoMSk7
DQogICAgLSAgICB9DQogICAgLSNpZm5kZWYgeXlvdmVyZmxvdw0KICAgIC0gIGlmICh5eXNzICE9
IHl5c3NhKQ0KICAgIC0gICAgWVlTVEFDS19GUkVFICh5eXNzKTsNCiAgICAtI2VuZGlmDQogICAg
LSNpZiBZWUVSUk9SX1ZFUkJPU0UNCiAgICAtICBpZiAoeXltc2cgIT0geXltc2didWYpDQogICAg
LSAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsNCiAgICAtI2VuZGlmDQogICAgLSAgcmV0dXJuIHl5
cmVzdWx0Ow0KICAgIC19DQogICAgLQ0KICAgIC0NCiAgICAtDQogICAgLXZvaWQgY29uZl9wYXJz
ZShjb25zdCBjaGFyICpuYW1lKQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW07DQog
ICAgLQlpbnQgaTsNCiAgICAtDQogICAgLQl6Y29uZl9pbml0c2NhbihuYW1lKTsNCiAgICAtDQog
ICAgLQlfbWVudV9pbml0KCk7DQogICAgLQ0KICAgIC0JaWYgKGdldGVudigiWkNPTkZfREVCVUci
KSkNCiAgICAtCQl5eWRlYnVnID0gMTsNCiAgICAtCXl5cGFyc2UoKTsNCiAgICAtDQogICAgLQkv
KiBWYXJpYWJsZXMgYXJlIGV4cGFuZGVkIGluIHRoZSBwYXJzZSBwaGFzZS4gV2UgY2FuIGZyZWUg
dGhlbSBoZXJlLiAqLw0KICAgIC0JdmFyaWFibGVfYWxsX2RlbCgpOw0KICAgIC0NCiAgICAtCWlm
ICh5eW5lcnJzKQ0KICAgIC0JCWV4aXQoMSk7DQogICAgLQlpZiAoIW1vZHVsZXNfc3ltKQ0KICAg
IC0JCW1vZHVsZXNfc3ltID0gc3ltX2ZpbmQoICJuIiApOw0KICAgIC0NCiAgICAtCWlmICghbWVu
dV9oYXNfcHJvbXB0KCZyb290bWVudSkpIHsNCiAgICAtCQljdXJyZW50X2VudHJ5ID0gJnJvb3Rt
ZW51Ow0KICAgIC0JCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICJNYWluIG1lbnUiLCBOVUxMKTsN
CiAgICAtCX0NCiAgICAtDQogICAgLQltZW51X2ZpbmFsaXplKCZyb290bWVudSk7DQogICAgLQlm
b3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7DQogICAgLQkJaWYgKHN5bV9jaGVja19kZXBzKHN5bSkp
DQogICAgLQkJCXl5bmVycnMrKzsNCiAgICAtCX0NCiAgICAtCWlmICh5eW5lcnJzKQ0KICAgIC0J
CWV4aXQoMSk7DQogICAgLQlzeW1fc2V0X2NoYW5nZV9jb3VudCgxKTsNCiAgICAtfQ0KICAgIC0N
CiAgICAtc3RhdGljIGNvbnN0IGNoYXIgKnpjb25mX3Rva2VubmFtZShpbnQgdG9rZW4pDQogICAg
LXsNCiAgICAtCXN3aXRjaCAodG9rZW4pIHsNCiAgICAtCWNhc2UgVF9NRU5VOgkJcmV0dXJuICJt
ZW51IjsNCiAgICAtCWNhc2UgVF9FTkRNRU5VOgkJcmV0dXJuICJlbmRtZW51IjsNCiAgICAtCWNh
c2UgVF9DSE9JQ0U6CQlyZXR1cm4gImNob2ljZSI7DQogICAgLQljYXNlIFRfRU5EQ0hPSUNFOgly
ZXR1cm4gImVuZGNob2ljZSI7DQogICAgLQljYXNlIFRfSUY6CQlyZXR1cm4gImlmIjsNCiAgICAt
CWNhc2UgVF9FTkRJRjoJCXJldHVybiAiZW5kaWYiOw0KICAgIC0JY2FzZSBUX0RFUEVORFM6CQly
ZXR1cm4gImRlcGVuZHMiOw0KICAgIC0JY2FzZSBUX1ZJU0lCTEU6CQlyZXR1cm4gInZpc2libGUi
Ow0KICAgIC0JfQ0KICAgIC0JcmV0dXJuICI8dG9rZW4+IjsNCiAgICAtfQ0KICAgIC0NCiAgICAt
c3RhdGljIGJvb2wgemNvbmZfZW5kdG9rZW4oY29uc3Qgc3RydWN0IGtjb25mX2lkICppZCwgaW50
IHN0YXJ0dG9rZW4sIGludCBlbmR0b2tlbikNCiAgICAtew0KICAgIC0JaWYgKGlkLT50b2tlbiAh
PSBlbmR0b2tlbikgew0KICAgIC0JCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkICclcycgd2l0aGlu
ICVzIGJsb2NrIiwNCiAgICAtCQkJaWQtPm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2Vu
KSk7DQogICAgLQkJeXluZXJycysrOw0KICAgIC0JCXJldHVybiBmYWxzZTsNCiAgICAtCX0NCiAg
ICAtCWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0gY3VycmVudF9maWxlKSB7DQogICAgLQkJemNv
bmZfZXJyb3IoIiclcycgaW4gZGlmZmVyZW50IGZpbGUgdGhhbiAnJXMnIiwNCiAgICAtCQkJaWQt
Pm5hbWUsIHpjb25mX3Rva2VubmFtZShzdGFydHRva2VuKSk7DQogICAgLQkJZnByaW50ZihzdGRl
cnIsICIlczolZDogbG9jYXRpb24gb2YgdGhlICclcydcbiIsDQogICAgLQkJCWN1cnJlbnRfbWVu
dS0+ZmlsZS0+bmFtZSwgY3VycmVudF9tZW51LT5saW5lbm8sDQogICAgLQkJCXpjb25mX3Rva2Vu
bmFtZShzdGFydHRva2VuKSk7DQogICAgLQkJeXluZXJycysrOw0KICAgIC0JCXJldHVybiBmYWxz
ZTsNCiAgICAtCX0NCiAgICAtCXJldHVybiB0cnVlOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0
aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKQ0KICAgIC17DQogICAgLQl2
YV9saXN0IGFwOw0KICAgIC0NCiAgICAtCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgIC0JdmFfc3RhcnQoYXAsIGVycik7DQog
ICAgLQl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOw0KICAgIC0JdmFfZW5kKGFwKTsNCiAgICAt
CWZwcmludGYoc3RkZXJyLCAiXG4iKTsNCiAgICAtfQ0KICAgIC0NCiAgICAtc3RhdGljIHZvaWQg
emNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pDQogICAgLXsNCiAgICAtCXZhX2xpc3Qg
YXA7DQogICAgLQ0KICAgIC0JeXluZXJycysrOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICIlczol
ZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgLQl2YV9zdGFydChh
cCwgZXJyKTsNCiAgICAtCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7DQogICAgLQl2YV9lbmQo
YXApOw0KICAgIC0JZnByaW50ZihzdGRlcnIsICJcbiIpOw0KICAgIC19DQogICAgLQ0KICAgIC1z
dGF0aWMgdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIgKmVycikNCiAgICAtew0KICAgIC0JZnByaW50
ZihzdGRlcnIsICIlczolZDogJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkg
KyAxLCBlcnIpOw0KICAgIC19DQogICAgLQ0KICAgIC1zdGF0aWMgdm9pZCBwcmludF9xdW90ZWRf
c3RyaW5nKEZJTEUgKm91dCwgY29uc3QgY2hhciAqc3RyKQ0KICAgIC17DQogICAgLQljb25zdCBj
aGFyICpwOw0KICAgIC0JaW50IGxlbjsNCiAgICAtDQogICAgLQlwdXRjKCciJywgb3V0KTsNCiAg
ICAtCXdoaWxlICgocCA9IHN0cmNocihzdHIsICciJykpKSB7DQogICAgLQkJbGVuID0gcCAtIHN0
cjsNCiAgICAtCQlpZiAobGVuKQ0KICAgIC0JCQlmcHJpbnRmKG91dCwgIiUuKnMiLCBsZW4sIHN0
cik7DQogICAgLQkJZnB1dHMoIlxcXCIiLCBvdXQpOw0KICAgIC0JCXN0ciA9IHAgKyAxOw0KICAg
IC0JfQ0KICAgIC0JZnB1dHMoc3RyLCBvdXQpOw0KICAgIC0JcHV0YygnIicsIG91dCk7DQogICAg
LX0NCiAgICAtDQogICAgLXN0YXRpYyB2b2lkIHByaW50X3N5bWJvbChGSUxFICpvdXQsIHN0cnVj
dCBtZW51ICptZW51KQ0KICAgIC17DQogICAgLQlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5z
eW07DQogICAgLQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgLQ0KICAgIC0JaWYgKHN5bV9p
c19jaG9pY2Uoc3ltKSkNCiAgICAtCQlmcHJpbnRmKG91dCwgIlxuY2hvaWNlXG4iKTsNCiAgICAt
CWVsc2UNCiAgICAtCQlmcHJpbnRmKG91dCwgIlxuY29uZmlnICVzXG4iLCBzeW0tPm5hbWUpOw0K
ICAgIC0Jc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICAtCWNhc2UgU19CT09MRUFOOg0KICAgIC0J
CWZwdXRzKCIgIGJvb2xcbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAgLQljYXNlIFNfVFJJ
U1RBVEU6DQogICAgLQkJZnB1dHMoIiAgdHJpc3RhdGVcbiIsIG91dCk7DQogICAgLQkJYnJlYWs7
DQogICAgLQljYXNlIFNfU1RSSU5HOg0KICAgIC0JCWZwdXRzKCIgIHN0cmluZ1xuIiwgb3V0KTsN
CiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgU19JTlQ6DQogICAgLQkJZnB1dHMoIiAgaW50ZWdl
clxuIiwgb3V0KTsNCiAgICAtCQlicmVhazsNCiAgICAtCWNhc2UgU19IRVg6DQogICAgLQkJZnB1
dHMoIiAgaGV4XG4iLCBvdXQpOw0KICAgIC0JCWJyZWFrOw0KICAgIC0JZGVmYXVsdDoNCiAgICAt
CQlmcHV0cygiICA/Pz9cbiIsIG91dCk7DQogICAgLQkJYnJlYWs7DQogICAgLQl9DQogICAgLQlm
b3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgLQkJ
aWYgKHByb3AtPm1lbnUgIT0gbWVudSkNCiAgICAtCQkJY29udGludWU7DQogICAgLQkJc3dpdGNo
IChwcm9wLT50eXBlKSB7DQogICAgLQkJY2FzZSBQX1BST01QVDoNCiAgICAtCQkJZnB1dHMoIiAg
cHJvbXB0ICIsIG91dCk7DQogICAgLQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50
ZXh0KTsNCiAgICAtCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7DQog
ICAgLQkJCQlmcHV0cygiIGlmICIsIG91dCk7DQogICAgLQkJCQlleHByX2ZwcmludChwcm9wLT52
aXNpYmxlLmV4cHIsIG91dCk7DQogICAgLQkJCX0NCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsN
CiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX0RFRkFVTFQ6DQogICAgLQkJCWZwdXRzKCAi
ICBkZWZhdWx0ICIsIG91dCk7DQogICAgLQkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7
DQogICAgLQkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgIC0J
CQkJZnB1dHMoIiBpZiAiLCBvdXQpOw0KICAgIC0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJs
ZS5leHByLCBvdXQpOw0KICAgIC0JCQl9DQogICAgLQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9DSE9JQ0U6DQogICAgLQkJCWZwdXRzKCIgICNjaG9p
Y2UgdmFsdWVcbiIsIG91dCk7DQogICAgLQkJCWJyZWFrOw0KICAgIC0JCWNhc2UgUF9TRUxFQ1Q6
DQogICAgLQkJCWZwdXRzKCAiICBzZWxlY3QgIiwgb3V0KTsNCiAgICAtCQkJZXhwcl9mcHJpbnQo
cHJvcC0+ZXhwciwgb3V0KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJYnJl
YWs7DQogICAgLQkJY2FzZSBQX0lNUExZOg0KICAgIC0JCQlmcHV0cyggIiAgaW1wbHkgIiwgb3V0
KTsNCiAgICAtCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhwciwgb3V0KTsNCiAgICAtCQkJZnB1dGMo
J1xuJywgb3V0KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX1JBTkdFOg0KICAgIC0J
CQlmcHV0cyggIiAgcmFuZ2UgIiwgb3V0KTsNCiAgICAtCQkJZXhwcl9mcHJpbnQocHJvcC0+ZXhw
ciwgb3V0KTsNCiAgICAtCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJYnJlYWs7DQogICAg
LQkJY2FzZSBQX01FTlU6DQogICAgLQkJCWZwdXRzKCAiICBtZW51ICIsIG91dCk7DQogICAgLQkJ
CXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAgICAtCQkJZnB1dGMoJ1xu
Jywgb3V0KTsNCiAgICAtCQkJYnJlYWs7DQogICAgLQkJY2FzZSBQX1NZTUJPTDoNCiAgICAtCQkJ
ZnB1dHMoICIgIHN5bWJvbCAiLCBvdXQpOw0KICAgIC0JCQlmcHJpbnRmKG91dCwgIiVzXG4iLCBw
cm9wLT5zeW0tPm5hbWUpOw0KICAgIC0JCQlicmVhazsNCiAgICAtCQlkZWZhdWx0Og0KICAgIC0J
CQlmcHJpbnRmKG91dCwgIiAgdW5rbm93biBwcm9wICVkIVxuIiwgcHJvcC0+dHlwZSk7DQogICAg
LQkJCWJyZWFrOw0KICAgIC0JCX0NCiAgICAtCX0NCiAgICAtCWlmIChtZW51LT5oZWxwKSB7DQog
ICAgLQkJaW50IGxlbiA9IHN0cmxlbihtZW51LT5oZWxwKTsNCiAgICAtCQl3aGlsZSAobWVudS0+
aGVscFstLWxlbl0gPT0gJ1xuJykNCiAgICAtCQkJbWVudS0+aGVscFtsZW5dID0gMDsNCiAgICAt
CQlmcHJpbnRmKG91dCwgIiAgaGVscFxuJXNcbiIsIG1lbnUtPmhlbHApOw0KICAgIC0JfQ0KICAg
IC19DQogICAgLQ0KICAgIC12b2lkIHpjb25mZHVtcChGSUxFICpvdXQpDQogICAgLXsNCiAgICAt
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICAtCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAt
CXN0cnVjdCBtZW51ICptZW51Ow0KICAgIC0NCiAgICAtCW1lbnUgPSByb290bWVudS5saXN0Ow0K
ICAgIC0Jd2hpbGUgKG1lbnUpIHsNCiAgICAtCQlpZiAoKHN5bSA9IG1lbnUtPnN5bSkpDQogICAg
LQkJCXByaW50X3N5bWJvbChvdXQsIG1lbnUpOw0KICAgIC0JCWVsc2UgaWYgKChwcm9wID0gbWVu
dS0+cHJvbXB0KSkgew0KICAgIC0JCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAgICAtCQkJY2Fz
ZSBQX0NPTU1FTlQ6DQogICAgLQkJCQlmcHV0cygiXG5jb21tZW50ICIsIG91dCk7DQogICAgLQkJ
CQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAgLQkJCQlmcHV0cygi
XG4iLCBvdXQpOw0KICAgIC0JCQkJYnJlYWs7DQogICAgLQkJCWNhc2UgUF9NRU5VOg0KICAgIC0J
CQkJZnB1dHMoIlxubWVudSAiLCBvdXQpOw0KICAgIC0JCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhv
dXQsIHByb3AtPnRleHQpOw0KICAgIC0JCQkJZnB1dHMoIlxuIiwgb3V0KTsNCiAgICAtCQkJCWJy
ZWFrOw0KICAgIC0JCQlkZWZhdWx0Og0KICAgIC0JCQkJOw0KICAgIC0JCQl9DQogICAgLQkJCWlm
ICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0KICAgIC0JCQkJZnB1dHMoIiAg
ZGVwZW5kcyAiLCBvdXQpOw0KICAgIC0JCQkJZXhwcl9mcHJpbnQocHJvcC0+dmlzaWJsZS5leHBy
LCBvdXQpOw0KICAgIC0JCQkJZnB1dGMoJ1xuJywgb3V0KTsNCiAgICAtCQkJfQ0KICAgIC0JCX0N
CiAgICAtDQogICAgLQkJaWYgKG1lbnUtPmxpc3QpDQogICAgLQkJCW1lbnUgPSBtZW51LT5saXN0
Ow0KICAgIC0JCWVsc2UgaWYgKG1lbnUtPm5leHQpDQogICAgLQkJCW1lbnUgPSBtZW51LT5uZXh0
Ow0KICAgIC0JCWVsc2Ugd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkgew0KICAgIC0JCQlp
ZiAobWVudS0+cHJvbXB0ICYmIG1lbnUtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpDQogICAgLQkJ
CQlmcHV0cygiXG5lbmRtZW51XG4iLCBvdXQpOw0KICAgIC0JCQlpZiAobWVudS0+bmV4dCkgew0K
ICAgIC0JCQkJbWVudSA9IG1lbnUtPm5leHQ7DQogICAgLQkJCQlicmVhazsNCiAgICAtCQkJfQ0K
ICAgIC0JCX0NCiAgICAtCX0NCiAgICAtfQ0KICAgIC0NCiAgICAtI2luY2x1ZGUgInpjb25mLmxl
eC5jIg0KICAgIC0jaW5jbHVkZSAidXRpbC5jIg0KICAgIC0jaW5jbHVkZSAiY29uZmRhdGEuYyIN
CiAgICAtI2luY2x1ZGUgImV4cHIuYyINCiAgICAtI2luY2x1ZGUgInN5bWJvbC5jIg0KICAgIC0j
aW5jbHVkZSAibWVudS5jIg0KICAgIC0jaW5jbHVkZSAicHJlcHJvY2Vzcy5jIg0KICAgIGRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcvTWFrZWZpbGUgYi9zdXBwb3J0L2tjb25maWcvTWFrZWZp
bGUNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjdiNTMyYzUN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlDQog
ICAgQEAgLTAsMCArMSwyMDggQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMA0KICAgICsjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICsjIFVuaWtyYWZ0IGNvbmZpZ3Vy
YXRpb24gdGFyZ2V0cw0KICAgICsjIFRoZXNlIHRhcmdldHMgYXJlIHVzZWQgZnJvbSB0b3AtbGV2
ZWwgbWFrZWZpbGUNCiAgICArDQogICAgK1BIT05ZICs9IHhjb25maWcgZ2NvbmZpZyBtZW51Y29u
ZmlnIGNvbmZpZyBsb2NhbG1vZGNvbmZpZyBsb2NhbHllc2NvbmZpZyBcDQogICAgKwlidWlsZF9t
ZW51Y29uZmlnIGJ1aWxkX25jb25maWcgYnVpbGRfZ2NvbmZpZyBidWlsZF94Y29uZmlnDQogICAg
Kw0KICAgICtpZmRlZiBLQlVJTERfS0NPTkZJRw0KICAgICtLY29uZmlnIDo9ICQoS0JVSUxEX0tD
T05GSUcpDQogICAgK2Vsc2UNCiAgICArS2NvbmZpZyA6PSBLY29uZmlnDQogICAgK2VuZGlmDQog
ICAgKw0KICAgICtpZmVxICgkKHF1aWV0KSxzaWxlbnRfKQ0KICAgICtzaWxlbnQgOj0gLXMNCiAg
ICArZW5kaWYNCiAgICArDQogICAgKyMgV2UgbmVlZCB0aGlzLCBpbiBjYXNlIHRoZSB1c2VyIGhh
cyBpdCBpbiBpdHMgZW52aXJvbm1lbnQNCiAgICArdW5leHBvcnQgQ09ORklHXw0KICAgICsNCiAg
ICAreGNvbmZpZzogJChvYmopL3Fjb25mDQogICAgKwkkPCAkKHNpbGVudCkgJChLY29uZmlnKQ0K
ICAgICsNCiAgICArZ2NvbmZpZzogJChvYmopL2djb25mDQogICAgKwkkPCAkKHNpbGVudCkgJChL
Y29uZmlnKQ0KICAgICsNCiAgICArbWVudWNvbmZpZzogJChvYmopL21jb25mDQogICAgKwkkPCAk
KHNpbGVudCkgJChLY29uZmlnKQ0KICAgICsNCiAgICArY29uZmlnOiAkKG9iaikvY29uZg0KICAg
ICsJJDwgJChzaWxlbnQpIC0tb2xkYXNrY29uZmlnICQoS2NvbmZpZykNCiAgICArDQogICAgK25j
b25maWc6ICQob2JqKS9uY29uZg0KICAgICsJJDwgJChzaWxlbnQpICQoS2NvbmZpZykNCiAgICAr
DQogICAgK2J1aWxkX21lbnVjb25maWc6ICQob2JqKS9tY29uZg0KICAgICsNCiAgICArYnVpbGRf
bmNvbmZpZzogJChvYmopL25jb25mDQogICAgKw0KICAgICtidWlsZF9nY29uZmlnOiAkKG9iaikv
Z2NvbmYNCiAgICArDQogICAgK2J1aWxkX3hjb25maWc6ICQob2JqKS9xY29uZg0KICAgICsNCiAg
ICArbG9jYWx5ZXNjb25maWcgbG9jYWxtb2Rjb25maWc6ICQob2JqKS9jb25mDQogICAgKwkkKFEp
cGVybCAkKHNyY3RyZWUpLyQoc3JjKS9zdHJlYW1saW5lX2NvbmZpZy5wbCAtLSRAICQoc3JjdHJl
ZSkgJChLY29uZmlnKSA+IC50bXAuY29uZmlnDQogICAgKwkkKFEpaWYgWyAtZiAuY29uZmlnIF07
IHRoZW4gCQkJCQlcDQogICAgKwkJCWNtcCAtcyAudG1wLmNvbmZpZyAuY29uZmlnIHx8CQkJXA0K
ICAgICsJCQkobXYgLWYgLmNvbmZpZyAuY29uZmlnLm9sZC4xOwkJCVwNCiAgICArCQkJIG12IC1m
IC50bXAuY29uZmlnIC5jb25maWc7CQkJXA0KICAgICsJCQkgJDwgJChzaWxlbnQpIC0tb2xkY29u
ZmlnICQoS2NvbmZpZyk7CQlcDQogICAgKwkJCSBtdiAtZiAuY29uZmlnLm9sZC4xIC5jb25maWcu
b2xkKQkJXA0KICAgICsJZWxzZQkJCQkJCQkJXA0KICAgICsJCQltdiAtZiAudG1wLmNvbmZpZyAu
Y29uZmlnOwkJCVwNCiAgICArCQkJJDwgJChzaWxlbnQpIC0tb2xkY29uZmlnICQoS2NvbmZpZyk7
CQlcDQogICAgKwlmaQ0KICAgICsJJChRKXJtIC1mIC50bXAuY29uZmlnDQogICAgKw0KICAgICsj
IFRoZXNlIHRhcmdldHMgbWFwIDE6MSB0byB0aGUgY29tbWFuZGxpbmUgb3B0aW9ucyBvZiAnY29u
ZicNCiAgICArIw0KICAgICsjIE5vdGU6DQogICAgKyMgIHN5bmNjb25maWcgaGFzIGJlY29tZSBh
biBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgYW5kIGlzIG5vdw0KICAgICsjICBkZXBy
ZWNhdGVkIGZvciBleHRlcm5hbCB1c2UNCiAgICArc2ltcGxlLXRhcmdldHMgOj0gb2xkY29uZmln
IGFsbG5vY29uZmlnIGFsbHllc2NvbmZpZyBhbGxtb2Rjb25maWcgXA0KICAgICsJYWxsZGVmY29u
ZmlnIHJhbmRjb25maWcgbGlzdG5ld2NvbmZpZyBvbGRkZWZjb25maWcgc3luY2NvbmZpZw0KICAg
ICtQSE9OWSArPSAkKHNpbXBsZS10YXJnZXRzKQ0KICAgICsNCiAgICArJChzaW1wbGUtdGFyZ2V0
cyk6ICQob2JqKS9jb25mDQogICAgKwkkPCAkKHNpbGVudCkgLS0kQCAkKEtjb25maWcpDQogICAg
Kw0KICAgICtQSE9OWSArPSBzYXZlZGVmY29uZmlnIGRlZmNvbmZpZw0KICAgICsNCiAgICArc2F2
ZWRlZmNvbmZpZzogJChvYmopL2NvbmYNCiAgICArCSQ8ICQoc2lsZW50KSAtLSRAPWRlZmNvbmZp
ZyAkKEtjb25maWcpDQogICAgKw0KICAgICtkZWZjb25maWc6ICQob2JqKS9jb25mDQogICAgK2lm
ZXEgKCQoS0JVSUxEX0RFRkNPTkZJRyksKQ0KICAgICsJJDwgJChzaWxlbnQpIC0tZGVmY29uZmln
ICQoS2NvbmZpZykNCiAgICArZWxzZSBpZm5lcSAoJCh3aWxkY2FyZCAkKHNyY3RyZWUpL2FyY2gv
JChTUkNBUkNIKS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykpLCkNCiAgICArCUAkKGtlY2hv
KSAiKioqIERlZmF1bHQgY29uZmlndXJhdGlvbiBpcyBiYXNlZCBvbiAnJChLQlVJTERfREVGQ09O
RklHKSciDQogICAgKwkkKFEpJDwgJChzaWxlbnQpIC0tZGVmY29uZmlnPWFyY2gvJChTUkNBUkNI
KS9jb25maWdzLyQoS0JVSUxEX0RFRkNPTkZJRykgJChLY29uZmlnKQ0KICAgICtlbHNlDQogICAg
KwlAJChrZWNobykgIioqKiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gaXMgYmFzZWQgb24gdGFyZ2V0
ICckKEtCVUlMRF9ERUZDT05GSUcpJyINCiAgICArCSQoUSkkKE1BS0UpIC1mICQoc3JjdHJlZSkv
TWFrZWZpbGUgJChLQlVJTERfREVGQ09ORklHKQ0KICAgICtlbmRpZg0KICAgICsNCiAgICArJV9k
ZWZjb25maWc6ICQob2JqKS9jb25mDQogICAgKwkkKFEpJDwgJChzaWxlbnQpIC0tZGVmY29uZmln
PWFyY2gvJChTUkNBUkNIKS9jb25maWdzLyRAICQoS2NvbmZpZykNCiAgICArDQogICAgK2NvbmZp
Z2ZpbGVzPSQod2lsZGNhcmQgJChzcmN0cmVlKS9rZXJuZWwvY29uZmlncy8kQCAkKHNyY3RyZWUp
L2FyY2gvJChTUkNBUkNIKS9jb25maWdzLyRAKQ0KICAgICsNCiAgICArJS5jb25maWc6ICQob2Jq
KS9jb25mDQogICAgKwkkKGlmICQoY2FsbCBjb25maWdmaWxlcyksLCAkKGVycm9yIE5vIGNvbmZp
Z3VyYXRpb24gZXhpc3RzIGZvciB0aGlzIHRhcmdldCBvbiB0aGlzIGFyY2hpdGVjdHVyZSkpDQog
ICAgKwkkKFEpJChDT05GSUdfU0hFTEwpICQoc3JjdHJlZSkvc2NyaXB0cy9rY29uZmlnL21lcmdl
X2NvbmZpZy5zaCAtbSAuY29uZmlnICQoY29uZmlnZmlsZXMpDQogICAgKwkrJChRKXllcyAiIiB8
ICQoTUFLRSkgLWYgJChzcmN0cmVlKS9NYWtlZmlsZSBvbGRjb25maWcNCiAgICArDQogICAgK1BI
T05ZICs9IGt2bWNvbmZpZw0KICAgICtrdm1jb25maWc6IGt2bV9ndWVzdC5jb25maWcNCiAgICAr
CUA6DQogICAgKw0KICAgICtQSE9OWSArPSB4ZW5jb25maWcNCiAgICAreGVuY29uZmlnOiB4ZW4u
Y29uZmlnDQogICAgKwlAOg0KICAgICsNCiAgICArUEhPTlkgKz0gdGlueWNvbmZpZw0KICAgICt0
aW55Y29uZmlnOg0KICAgICsJJChRKSQoTUFLRSkgLWYgJChzcmN0cmVlKS9NYWtlZmlsZSBhbGxu
b2NvbmZpZyB0aW55LmNvbmZpZw0KICAgICsNCiAgICArIyBDSEVDSzogLW8gY2FjaGVfZGlyPTxw
YXRoPiB3b3JraW5nPw0KICAgICtQSE9OWSArPSB0ZXN0Y29uZmlnDQogICAgK3Rlc3Rjb25maWc6
ICQob2JqKS9jb25mDQogICAgKwkkKFBZVEhPTjMpIC1CIC1tIHB5dGVzdCAkKHNyY3RyZWUpLyQo
c3JjKS90ZXN0cyBcDQogICAgKwktbyBjYWNoZV9kaXI9JChhYnNwYXRoICQob2JqKS90ZXN0cy8u
Y2FjaGUpIFwNCiAgICArCSQoaWYgJChmaW5kc3RyaW5nIDEsJChLQlVJTERfVkVSQk9TRSkpLC0t
Y2FwdHVyZT1ubykNCiAgICArY2xlYW4tZGlycyArPSB0ZXN0cy8uY2FjaGUNCiAgICArDQogICAg
KyMgSGVscCB0ZXh0IHVzZWQgYnkgbWFrZSBoZWxwDQogICAgK2hlbHA6DQogICAgKwlAZWNobyAg
JyAgY29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlzaW5nIGEgbGluZS1vcmll
bnRlZCBwcm9ncmFtJw0KICAgICsJQGVjaG8gICcgIG5jb25maWcgICAgICAgICAtIFVwZGF0ZSBj
dXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBuY3Vyc2VzIG1lbnUgYmFzZWQgcHJvZ3JhbScNCiAg
ICArCUBlY2hvICAnICBtZW51Y29uZmlnCSAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgdXRpbGlz
aW5nIGEgbWVudSBiYXNlZCBwcm9ncmFtJw0KICAgICsJQGVjaG8gICcgIHhjb25maWcJICAtIFVw
ZGF0ZSBjdXJyZW50IGNvbmZpZyB1dGlsaXNpbmcgYSBRdCBiYXNlZCBmcm9udC1lbmQnDQogICAg
KwlAZWNobyAgJyAgZ2NvbmZpZwkgIC0gVXBkYXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBh
IEdUSysgYmFzZWQgZnJvbnQtZW5kJw0KICAgICsJQGVjaG8gICcgIG9sZGNvbmZpZwkgIC0gVXBk
YXRlIGN1cnJlbnQgY29uZmlnIHV0aWxpc2luZyBhIHByb3ZpZGVkIC5jb25maWcgYXMgYmFzZScN
CiAgICArCUBlY2hvICAnICBsb2NhbG1vZGNvbmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcg
ZGlzYWJsaW5nIG1vZHVsZXMgbm90IGxvYWRlZCcNCiAgICArCUBlY2hvICAnICBsb2NhbHllc2Nv
bmZpZyAgLSBVcGRhdGUgY3VycmVudCBjb25maWcgY29udmVydGluZyBsb2NhbCBtb2RzIHRvIGNv
cmUnDQogICAgKwlAZWNobyAgJyAgZGVmY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggZGVmYXVs
dCBmcm9tIEFSQ0ggc3VwcGxpZWQgZGVmY29uZmlnJw0KICAgICsJQGVjaG8gICcgIHNhdmVkZWZj
b25maWcgICAtIFNhdmUgY3VycmVudCBjb25maWcgYXMgLi9kZWZjb25maWcgKG1pbmltYWwgY29u
ZmlnKScNCiAgICArCUBlY2hvICAnICBhbGxub2NvbmZpZwkgIC0gTmV3IGNvbmZpZyB3aGVyZSBh
bGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCBubycNCiAgICArCUBlY2hvICAnICBhbGx5ZXNj
b25maWcJICAtIE5ldyBjb25maWcgd2hlcmUgYWxsIG9wdGlvbnMgYXJlIGFjY2VwdGVkIHdpdGgg
eWVzJw0KICAgICsJQGVjaG8gICcgIGFsbG1vZGNvbmZpZwkgIC0gTmV3IGNvbmZpZyBzZWxlY3Rp
bmcgbW9kdWxlcyB3aGVuIHBvc3NpYmxlJw0KICAgICsJQGVjaG8gICcgIGFsbGRlZmNvbmZpZyAg
ICAtIE5ldyBjb25maWcgd2l0aCBhbGwgc3ltYm9scyBzZXQgdG8gZGVmYXVsdCcNCiAgICArCUBl
Y2hvICAnICByYW5kY29uZmlnCSAgLSBOZXcgY29uZmlnIHdpdGggcmFuZG9tIGFuc3dlciB0byBh
bGwgb3B0aW9ucycNCiAgICArCUBlY2hvICAnICBsaXN0bmV3Y29uZmlnICAgLSBMaXN0IG5ldyBv
cHRpb25zJw0KICAgICsJQGVjaG8gICcgIG9sZGRlZmNvbmZpZwkgIC0gU2FtZSBhcyBvbGRjb25m
aWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8gdGhlaXInDQogICAgKwlAZWNobyAgJyAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSB3aXRob3V0IHByb21wdGluZycNCiAgICArCUBlY2hv
ICAnICBrdm1jb25maWcJICAtIEVuYWJsZSBhZGRpdGlvbmFsIG9wdGlvbnMgZm9yIGt2bSBndWVz
dCBrZXJuZWwgc3VwcG9ydCcNCiAgICArCUBlY2hvICAnICB4ZW5jb25maWcgICAgICAgLSBFbmFi
bGUgYWRkaXRpb25hbCBvcHRpb25zIGZvciB4ZW4gZG9tMCBhbmQgZ3Vlc3Qga2VybmVsIHN1cHBv
cnQnDQogICAgKwlAZWNobyAgJyAgdGlueWNvbmZpZwkgIC0gQ29uZmlndXJlIHRoZSB0aW5pZXN0
IHBvc3NpYmxlIGtlcm5lbCcNCiAgICArCUBlY2hvICAnICB0ZXN0Y29uZmlnCSAgLSBSdW4gS2Nv
bmZpZyB1bml0IHRlc3RzIChyZXF1aXJlcyBweXRob24zIGFuZCBweXRlc3QpJw0KICAgICsNCiAg
ICArIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICArIyBvYmplY3QgZmlsZXMgdXNlZCBieSBhbGwg
a2NvbmZpZyBmbGF2b3Vycw0KICAgICtjb21tb24tb2Jqcwk6PSBjb25mZGF0YS5vIGV4cHIubyBs
ZXhlci5sZXgubyBwYXJzZXIudGFiLm8gcHJlcHJvY2Vzcy5vIFwNCiAgICArCQkgICBzeW1ib2wu
bw0KICAgICsNCiAgICArJChvYmopL2xleGVyLmxleC5vOiAkKG9iaikvcGFyc2VyLnRhYi5oDQog
ICAgK0hPU1RDRkxBR1NfbGV4ZXIubGV4Lm8JOj0gLUkgJChzcmN0cmVlKS8kKHNyYykNCiAgICAr
SE9TVENGTEFHU19wYXJzZXIudGFiLm8JOj0gLUkgJChzcmN0cmVlKS8kKHNyYykNCiAgICArDQog
ICAgKyMgY29uZjogVXNlZCBmb3IgZGVmY29uZmlnLCBvbGRjb25maWcgYW5kIHJlbGF0ZWQgdGFy
Z2V0cw0KICAgICtob3N0cHJvZ3MteQkrPSBjb25mDQogICAgK2NvbmYtb2Jqcwk6PSBjb25mLm8g
JChjb21tb24tb2JqcykNCiAgICArDQogICAgKyMgbmNvbmY6IFVzZWQgZm9yIHRoZSBuY29uZmln
IHRhcmdldCBiYXNlZCBvbiBuY3Vyc2VzDQogICAgK2hvc3Rwcm9ncy15CSs9IG5jb25mDQogICAg
K25jb25mLW9ianMJOj0gbmNvbmYubyBuY29uZi5ndWkubyAkKGNvbW1vbi1vYmpzKQ0KICAgICsN
CiAgICArSE9TVExETElCU19uY29uZgk9ICQoc2hlbGwgLiAkKG9iaikvbmNvbmYtY2ZnICYmIGVj
aG8gJCRsaWJzKQ0KICAgICtIT1NUQ0ZMQUdTX25jb25mLm8JPSAkKHNoZWxsIC4gJChvYmopL25j
b25mLWNmZyAmJiBlY2hvICQkY2ZsYWdzKQ0KICAgICtIT1NUQ0ZMQUdTX25jb25mLmd1aS5vCT0g
JChzaGVsbCAuICQob2JqKS9uY29uZi1jZmcgJiYgZWNobyAkJGNmbGFncykNCiAgICArDQogICAg
KyQob2JqKS9uY29uZi5vICQob2JqKS9uY29uZi5ndWkubzogJChvYmopL25jb25mLWNmZw0KICAg
ICsNCiAgICArIyBtY29uZjogVXNlZCBmb3IgdGhlIG1lbnVjb25maWcgdGFyZ2V0IGJhc2VkIG9u
IGx4ZGlhbG9nDQogICAgK2hvc3Rwcm9ncy15CSs9IG1jb25mDQogICAgK2x4ZGlhbG9nCTo9IGNo
ZWNrbGlzdC5vIGlucHV0Ym94Lm8gbWVudWJveC5vIHRleHRib3gubyB1dGlsLm8geWVzbm8ubw0K
ICAgICttY29uZi1vYmpzCTo9IG1jb25mLm8gJChhZGRwcmVmaXggbHhkaWFsb2cvLCAkKGx4ZGlh
bG9nKSkgJChjb21tb24tb2JqcykNCiAgICArDQogICAgK0hPU1RMRExJQlNfbWNvbmYgPSAkKHNo
ZWxsIC4gJChvYmopL21jb25mLWNmZyAmJiBlY2hvICQkbGlicykNCiAgICArJChmb3JlYWNoIGYs
IG1jb25mLm8gJChseGRpYWxvZyksIFwNCiAgICArICAkKGV2YWwgSE9TVENGTEFHU18kZiA9ICQk
KHNoZWxsIC4gJChvYmopL21jb25mLWNmZyAmJiBlY2hvICQkJCRjZmxhZ3MpKSkNCiAgICArDQog
ICAgKyQob2JqKS9tY29uZi5vOiAkKG9iaikvbWNvbmYtY2ZnDQogICAgKyQoYWRkcHJlZml4ICQo
b2JqKS9seGRpYWxvZy8sICQobHhkaWFsb2cpKTogJChvYmopL21jb25mLWNmZw0KICAgICsNCiAg
ICArIyBxY29uZjogVXNlZCBmb3IgdGhlIHhjb25maWcgdGFyZ2V0IGJhc2VkIG9uIFF0DQogICAg
K2hvc3Rwcm9ncy15CSs9IHFjb25mDQogICAgK3Fjb25mLWN4eG9ianMJOj0gcWNvbmYubw0KICAg
ICtxY29uZi1vYmpzCTo9IGltYWdlcy5vICQoY29tbW9uLW9ianMpDQogICAgKw0KICAgICtIT1NU
TERMSUJTX3Fjb25mCT0gJChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcgJiYgZWNobyAkJGxpYnMp
DQogICAgK0hPU1RDWFhGTEFHU19xY29uZi5vCT0gJChzaGVsbCAuICQob2JqKS9xY29uZi1jZmcg
JiYgZWNobyAkJGNmbGFncykNCiAgICArDQogICAgKyQob2JqKS9xY29uZi5vOiAkKG9iaikvcWNv
bmYtY2ZnICQob2JqKS9xY29uZi5tb2MNCiAgICArDQogICAgK3F1aWV0X2NtZF9tb2MgPSBNT0Mg
ICAgICRADQogICAgKyAgICAgIGNtZF9tb2MgPSAkKHNoZWxsIC4gJChvYmopL3Fjb25mLWNmZyAm
JiBlY2hvICQkbW9jKSAtaSAkPCAtbyAkQA0KICAgICsNCiAgICArJChvYmopLyUubW9jOiAkKHNy
YykvJS5oICQob2JqKS9xY29uZi1jZmcNCiAgICArCSQoY2FsbCBjbWQsbW9jKQ0KICAgICsNCiAg
ICArIyBnY29uZjogVXNlZCBmb3IgdGhlIGdjb25maWcgdGFyZ2V0IGJhc2VkIG9uIEdUSysNCiAg
ICAraG9zdHByb2dzLXkJKz0gZ2NvbmYNCiAgICArZ2NvbmYtb2Jqcwk6PSBnY29uZi5vIGltYWdl
cy5vICQoY29tbW9uLW9ianMpDQogICAgKw0KICAgICtIT1NUTERMSUJTX2djb25mICAgID0gJChz
aGVsbCAuICQob2JqKS9nY29uZi1jZmcgJiYgZWNobyAkJGxpYnMpDQogICAgK0hPU1RDRkxBR1Nf
Z2NvbmYubyAgPSAkKHNoZWxsIC4gJChvYmopL2djb25mLWNmZyAmJiBlY2hvICQkY2ZsYWdzKQ0K
ICAgICsNCiAgICArJChvYmopL2djb25mLm86ICQob2JqKS9nY29uZi1jZmcNCiAgICArDQogICAg
KyMgY2hlY2sgaWYgbmVjZXNzYXJ5IHBhY2thZ2VzIGFyZSBhdmFpbGFibGUsIGFuZCBjb25maWd1
cmUgYnVpbGQgZmxhZ3MNCiAgICArZmlsZWNoa19jb25mX2NmZyA9ICQoQ09ORklHX1NIRUxMKSAk
PA0KICAgICsNCiAgICArJChvYmopLyVjb25mLWNmZzogJChzcmMpLyVjb25mLWNmZy5zaCBGT1JD
RQ0KICAgICsJJChjYWxsIGZpbGVjaGssY29uZl9jZmcpDQogICAgKw0KICAgICtjbGVhbi1maWxl
cyArPSAqY29uZi1jZmcNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxl
LmJyIGIvc3VwcG9ydC9rY29uZmlnL01ha2VmaWxlLmJyDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICBpbmRleCAwMDAwMDAwLi5lZDlhNWNmDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsr
KyBiL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5icg0KICAgIEBAIC0wLDAgKzEsMTQxIEBADQog
ICAgK3NyYyA6PSAuDQogICAgK3RvcF9zcmNkaXI9Li4vLi4vDQogICAgK3RvcF9idWlsZGRpcj0u
Li8uLi8NCiAgICArc3JjdHJlZSA6PSAuDQogICAgK29iaiA/PSAuDQogICAgKw0KICAgICsuU1VG
RklYRVMgOg0KICAgICsNCiAgICAraW5jbHVkZSBNYWtlZmlsZS5ydWxlcw0KICAgICtpbmNsdWRl
IE1ha2VmaWxlDQogICAgKyNIT1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5jbHVkZSBmb28uaA0K
ICAgICstaW5jbHVkZSAkKG9iaikvLmRlcGVuZA0KICAgICsNCiAgICArX19ob3N0cHJvZ3MgOj0g
JChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQ0KICAgICtob3N0LWNzaGxpYiA6
PSAkKHNvcnQgJChob3N0bGlicy15KSAkKGhvc3RsaWJzLW0pKQ0KICAgICtob3N0LWN4eHNobGli
IDo9ICQoc29ydCAkKGhvc3RjeHhsaWJzLXkpICQoaG9zdGN4eGxpYnMtbSkpDQogICAgKw0KICAg
ICsjIEMgY29kZQ0KICAgICsjIEV4ZWN1dGFibGVzIGNvbXBpbGVkIGZyb20gYSBzaW5nbGUgLmMg
ZmlsZQ0KICAgICtob3N0LWNzaW5nbGU6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwgXA0K
ICAgICsgICAgICAgICAgICAgJChpZiAkKCQobSktb2JqcykkKCQobSktY3h4b2JqcyksLCQobSkp
KQ0KICAgICtob3N0LWNtdWx0aSA6PSAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSxcDQogICAg
KwkJICAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQo
bSkpKSkNCiAgICArIyBPYmplY3QgKC5vKSBmaWxlcyBjb21waWxlZCBmcm9tIC5jIGZpbGVzDQog
ICAgK2hvc3QtY29ianMgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQo
bSktb2JqcykpKQ0KICAgICsNCiAgICArIyBDKysgY29kZQ0KICAgICsjIEMrKyBleGVjdXRhYmxl
cyBjb21waWxlZCBmcm9tIGF0IGxlYXN0IG9uZSAuY2MgZmlsZQ0KICAgICsjIGFuZCB6ZXJvIG9y
IG1vcmUgLmMgZmlsZXMNCiAgICArIGhvc3QtY3h4bXVsdGkgICA6PSAkKGZvcmVhY2ggbSwkKF9f
aG9zdHByb2dzKSwkKGlmICQoJChtKS1jeHhvYmpzKSwkKG0pKSkNCiAgICArIyBDKysgT2JqZWN0
ICgubykgZmlsZXMgY29tcGlsZWQgZnJvbSAuY2MgZmlsZXMNCiAgICAraG9zdC1jeHhvYmpzICAg
IDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3h4bXVsdGkpLCQoJChtKS1jeHhvYmpzKSkp
DQogICAgKyNPYmplY3QgKC5vKSBmaWxlcyB1c2VkIGJ5IHRoZSBzaGFyZWQgbGliYXJpZXMNCiAg
ICAraG9zdC1jc2hvYmpzICAgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3NobGliKSwk
KCQobTouc289LW9ianMpKSkpDQogICAgK2hvc3QtY3h4c2hvYmpzICA6PSAkKHNvcnQgJChmb3Jl
YWNoIG0sJChob3N0LWN4eHNobGliKSwkKCQobTouc289LW9ianMpKSkpDQogICAgKw0KICAgICsN
CiAgICAraG9zdC1jc2luZ2xlIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNzaW5nbGUp
KQ0KICAgICtob3N0LWNtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY211bHRp
KSkNCiAgICAraG9zdC1jeHhtdWx0aSAgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY3h4
bXVsdGkpKQ0KICAgICtob3N0LWNvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWNv
YmpzKSkNCiAgICAraG9zdC1jeHhvYmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4
eG9ianMpKQ0KICAgICtmaXhkZXAtb2JqcyA6PSAkKG9iaikvZml4ZGVwLm8NCiAgICArDQogICAg
K0hPU1RfRVhUUkFDRkxBR1MgKz0gLUkkKHNyYykgLUkkKG9iaikgLURDT05GSUdfPVwiXCINCiAg
ICArDQogICAgK19ob3N0Y19mbGFncyA9ICQoSE9TVENGTEFHUykgJChIT1NUX0VYVFJBQ0ZMQUdT
KSAkKEhPU1RDRkxBR1NfJChiYXNldGFyZ2V0KS5vKQ0KICAgICtfaG9zdGN4eF9mbGFncyA9ICQo
SE9TVENYWEZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoYmFzZXRh
cmdldCkubykNCiAgICArDQogICAgK2hvc3RjX2ZsYWdzICAgID0gLVdwLC1NRCwkKGRlcGZpbGUp
ICQoX2hvc3RjX2ZsYWdzKQ0KICAgICtob3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxl
KSAkKF9ob3N0Y3h4X2ZsYWdzKQ0KICAgICsNCiAgICArJChvYmopL2ZpeGRlcDogJChmaXhkZXAt
b2JqcykNCiAgICArCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykg
JChIT1NUQ0ZMQUdTXyQoQEYpKSAkPCAtbyAkQA0KICAgICsNCiAgICArJChmaXhkZXAtb2Jqcyk6
ICQoc3JjKS9maXhkZXAuYw0KICAgICsJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChI
T1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAgKw0KICAgICsj
IyMjIw0KICAgICsjIENvbXBpbGUgcHJvZ3JhbXMgb24gdGhlIGhvc3QNCiAgICArDQogICAgKyMg
Q3JlYXRlIGV4ZWN1dGFibGUgZnJvbSBhIHNpbmdsZSAuYyBmaWxlDQogICAgKyMgaG9zdC1jc2lu
Z2xlIC0+IEV4ZWN1dGFibGUNCiAgICArcXVpZXRfY21kX2hvc3QtY3NpbmdsZSAJPSBIT1NUQ0Mg
ICRADQogICAgKyAgICAgIGNtZF9ob3N0LWNzaW5nbGUJPSAkKEhPU1RDQykgJChob3N0Y19mbGFn
cykgJChIT1NUTERGTEFHUykgLW8gJEAgJDwgXA0KICAgICsJCSQoSE9TVExETElCUykgJChIT1NU
TERMSUJTXyQoQEYpKQ0KICAgICskKGhvc3QtY3NpbmdsZSk6ICQob2JqKS8lOiAkKHNyYykvJS5j
ICQob2JqKS9maXhkZXAgRk9SQ0UNCiAgICArCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNz
aW5nbGUpDQogICAgKw0KICAgICsjIExpbmsgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiBsaXN0IG9m
IC5vIGZpbGVzLCBhbGwgcGxhaW4gYw0KICAgICsjIGhvc3QtY211bHRpIC0+IGV4ZWN1dGFibGUN
CiAgICArcXVpZXRfY21kX2hvc3QtY211bHRpCT0gSE9TVExEICAkQA0KICAgICsgICAgICBjbWRf
aG9zdC1jbXVsdGkJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgLW8gJEAgXA0KICAgICsJCQkg
ICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS1vYmpzKSkgXA0KICAgICsJCQkgICQoSE9TVF9M
REZMQUdTKSAkKEhPU1RMRExJQlNfJChARikpDQogICAgKyQoaG9zdC1jbXVsdGkpOiAkKG9iaikv
Zml4ZGVwIEZPUkNFDQogICAgKwkkKGNhbGwgaWZfY2hhbmdlZCxob3N0LWNtdWx0aSkNCiAgICAr
JChjYWxsIG11bHRpX2RlcGVuZCwkKGhvc3QtY211bHRpKSwgLCAtb2JqcykNCiAgICArDQogICAg
Kw0KICAgICsjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmMgZmlsZQ0KICAgICsjIGhv
c3QtY29ianMgLT4gLm8NCiAgICArcXVpZXRfY21kX2hvc3QtY29ianMJPSBIT1NUQ0MgICRADQog
ICAgKyAgICAgIGNtZF9ob3N0LWNvYmpzCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQoSE9T
VENGTEFHU18kKEBGKSlcDQogICAgKwkJCSAgLWMgLW8gJEAgJDwNCiAgICArJChmaWx0ZXItb3V0
ICUudGFiLm8sICQoZmlsdGVyLW91dCAlLmxleC5vLCQoaG9zdC1jb2JqcykpKTogJChvYmopLyUu
bzpcDQogICAgKwkJJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAgKwkkKGNhbGwg
aWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykNCiAgICArDQogICAgKyQoZmlsdGVyICUubGV4Lm8s
JChob3N0LWNvYmpzKSk6ICQob2JqKS8lLmxleC5vOiAgJChvYmopLyUubGV4LmMgJChvYmopL2Zp
eGRlcCBGT1JDRQ0KICAgICsJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY29ianMpDQogICAg
Kw0KICAgICskKGZpbHRlciAlLnRhYi5vLCQoaG9zdC1jb2JqcykpOiAkKG9iaikvJS50YWIubzog
ICQob2JqKS8lLnRhYi5jICQob2JqKS9maXhkZXAgRk9SQ0UNCiAgICArCSQoY2FsbCBpZl9jaGFu
Z2VkX2RlcCxob3N0LWNvYmpzKQ0KICAgICsNCiAgICArIyBMaW5rIGFuIGV4ZWN1dGFibGUgYmFz
ZWQgb24gbGlzdCBvZiAubyBmaWxlcywgYSBtaXh0dXJlIG9mIC5jIGFuZCAuY2MNCiAgICArIyBo
b3N0LWN4eG11bHRpIC0+IGV4ZWN1dGFibGUNCiAgICArcXVpZXRfY21kX2hvc3QtY3h4bXVsdGkJ
PSBIT1NUTEQgICRADQogICAgKyAgICAgIGNtZF9ob3N0LWN4eG11bHRpCT0gJChIT1NUQ1hYKSAk
KEhPU1RMREZMQUdTKSAtbyAkQFwNCiAgICArCQkJICAkKGZvcmVhY2ggbyxvYmpzIGN4eG9ianMs
XA0KICAgICsJCQkgICQoYWRkcHJlZml4ICQob2JqKS8sJCgkKEBGKS0kKG8pKSkpIFwNCiAgICAr
CQkJICAkKEhPU1RMRExJQlMpICQoSE9TVExETElCU18kKEBGKSkNCiAgICArJChob3N0LWN4eG11
bHRpKTogRk9SQ0UNCiAgICArCSQoY2FsbCBpZl9jaGFuZ2VkLGhvc3QtY3h4bXVsdGkpDQogICAg
KyQoY2FsbCBtdWx0aV9kZXBlbmQsJChob3N0LWN4eG11bHRpKSwgLCAtb2JqcyAtY3h4b2JqcykN
CiAgICArDQogICAgKw0KICAgICsjIENyZWF0ZSAubyBmaWxlIGZyb20gYSBzaW5nbGUgLmNjIChD
KyspIGZpbGUNCiAgICArcXVpZXRfY21kX2hvc3QtY3h4b2Jqcwk9IEhPU1RDWFggJEANCiAgICAr
ICAgICAgY21kX2hvc3QtY3h4b2Jqcwk9ICQoSE9TVENYWCkgJChob3N0Y3h4X2ZsYWdzKSAkKEhP
U1RDWFhGTEFHU18kKEBGKSkgXA0KICAgICsJCQkgIC1jIC1vICRAICQ8DQogICAgKyQoaG9zdC1j
eHhvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuY2MgRk9SQ0UNCiAgICArCSQoY2FsbCBpZl9j
aGFuZ2VkX2RlcCxob3N0LWN4eG9ianMpDQogICAgKw0KICAgICsjIENvbXBpbGUgLmMgZmlsZSwg
Y3JlYXRlIHBvc2l0aW9uIGluZGVwZW5kZW50IC5vIGZpbGUNCiAgICArIyBob3N0LWNzaG9ianMg
LT4gLm8NCiAgICArcXVpZXRfY21kX2hvc3QtY3Nob2Jqcwk9IEhPU1RDQyAgLWZQSUMgJEANCiAg
ICArICAgICAgY21kX2hvc3QtY3Nob2Jqcwk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAtZlBJ
QyAtYyAtbyAkQCAkPA0KICAgICskKGhvc3QtY3Nob2Jqcyk6ICQob2JqKS8lLm86ICQoc3JjKS8l
LmMgRk9SQ0UNCiAgICArCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNzaG9ianMpDQogICAg
Kw0KICAgICsjIENvbXBpbGUgLmMgZmlsZSwgY3JlYXRlIHBvc2l0aW9uIGluZGVwZW5kZW50IC5v
IGZpbGUNCiAgICArIyBOb3RlIHRoYXQgcGx1Z2luIGNhcGFibGUgZ2NjIHZlcnNpb25zIGNhbiBi
ZSBlaXRoZXIgQyBvciBDKysgYmFzZWQNCiAgICArIyB0aGVyZWZvcmUgcGx1Z2luIHNvdXJjZSBm
aWxlcyBoYXZlIHRvIGJlIGNvbXBpbGFibGUgaW4gYm90aCBDIGFuZCBDKysgbW9kZS4NCiAgICAr
IyBUaGlzIGlzIHdoeSBhIEMrKyBjb21waWxlciBpcyBpbnZva2VkIG9uIGEgLmMgZmlsZS4NCiAg
ICArIyBob3N0LWN4eHNob2JqcyAtPiAubw0KICAgICtxdWlldF9jbWRfaG9zdC1jeHhzaG9ianMJ
PSBIT1NUQ1hYIC1mUElDICRADQogICAgKyAgICAgIGNtZF9ob3N0LWN4eHNob2Jqcwk9ICQoSE9T
VENYWCkgJChob3N0Y3h4X2ZsYWdzKSAtZlBJQyAtYyAtbyAkQCAkPA0KICAgICskKGhvc3QtY3h4
c2hvYmpzKTogJChvYmopLyUubzogJChzcmMpLyUuYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAg
KwlAZWNobyB0ZXN0LS0kQA0KICAgICsJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3h4c2hv
YmpzKQ0KICAgICsNCiAgICArY2xlYW46DQogICAgKwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChv
YmopLywkKGNsZWFuLWZpbGVzKSkNCiAgICArZGlzdGNsZWFuOiBjbGVhbg0KICAgICsJJChRKXJt
IC1mICQoYWRkcHJlZml4ICQob2JqKS8sJChseGRpYWxvZykgJChjb25mLW9ianMpICQobWNvbmYt
b2JqcykgJChreGdldHRleHQtb2JqcykgXA0KICAgICsJCSQoaG9zdHByb2dzLXkpICQocWNvbmYt
Y3h4b2JqcykgJChxY29uZi1vYmpzKSAkKGdjb25mLW9ianMpIFwNCiAgICArCQltY29uZiAuZGVw
ZW5kKQ0KICAgICsNCiAgICArRk9SQ0U6DQogICAgKy5QSE9OWTogRk9SQ0UgY2xlYW4gZGlzdGNs
ZWFuDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5ydWxlcyBiL3N1
cHBvcnQva2NvbmZpZy9NYWtlZmlsZS5ydWxlcw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uNzhhOWM4MQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9z
dXBwb3J0L2tjb25maWcvTWFrZWZpbGUucnVsZXMNCiAgICBAQCAtMCwwICsxLDg0IEBADQogICAg
K2tlY2hvIDo9IGVjaG8NCiAgICArY29tbWEgOj0gLA0KICAgICsNCiAgICArDQogICAgK2RvdC10
YXJnZXQgPSAkKGRpciAkQCkuJChub3RkaXIgJEApDQogICAgKw0KICAgICthbnktcHJlcmVxID0g
JChmaWx0ZXItb3V0ICQoUEhPTlkpLCQ/KSAkKGZpbHRlci1vdXQgJChQSE9OWSkgJCh3aWxkY2Fy
ZCAkXiksJF4pDQogICAgKw0KICAgICthcmctY2hlY2sgPSAkKGlmICQoc3RyaXAgJChjbWRfJEAp
KSwsMSkNCiAgICArDQogICAgK21ha2UtY21kID0gJChjYWxsIGVzY3NxLCQoc3Vic3QgJChwb3Vu
ZCksJCQocG91bmQpLCQoc3Vic3QgJCQsJCQkJCwkKGNtZF8kKDEpKSkpKQ0KICAgICsNCiAgICAr
IyBwcmludGluZyBjb21tYW5kcw0KICAgICtjbWQgPSBAc2V0IC1lOyAkKGVjaG8tY21kKSAkKGNt
ZF8kKDEpKQ0KICAgICsNCiAgICArZGVwZmlsZSA9ICQoc3Vic3QgJChjb21tYSksXywkKGRvdC10
YXJnZXQpLmQpDQogICAgK2RlcGZsYWdzID0gLVdwJChjb21tYSktTUQkKGNvbW1hKSQoY2FsbCBk
b3QtdGFyZ2V0KQ0KICAgICsNCiAgICArY21kX2FuZF9maXhkZXAgPSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArCSQoY21kKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsJJChv
YmopL2ZpeGRlcCAkKGRlcGZpbGUpICRAICckKG1ha2UtY21kKScgPiAkKGRvdC10YXJnZXQpLmNt
ZDtcDQogICAgKwlybSAtZiAkKGRlcGZpbGUpDQogICAgKw0KICAgICtpZl9jaGFuZ2VkX2RlcCA9
ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSksJChjbWRfYW5kX2ZpeGRl
cCksQDopDQogICAgKw0KICAgICtkZWZpbmUgbXVsdGlfZGVwZW5kDQogICAgKyQoZm9yZWFjaCBt
LCAkKG5vdGRpciAkMSksIFwNCiAgICArICAgICQoZXZhbCAkKG9iaikvJG06IFwNCiAgICArICAg
ICQoYWRkcHJlZml4ICQob2JqKS8sICQoZm9yZWFjaCBzLCAkMywgJCgkKG06JSQoc3RyaXAgJDIp
PSUkKHMpKSkpKSkpDQogICAgK2VuZGVmDQogICAgKw0KICAgICsjIyMNCiAgICArIyBmaWxlY2hr
IGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGNvbnRlbnQgb2YgYSBnZW5lcmF0ZWQgZmlsZSBpcyB1
cGRhdGVkLg0KICAgICsjIFNhbXBsZSB1c2FnZToNCiAgICArIw0KICAgICsjIGZpbGVjaGtfc2Ft
cGxlID0gZWNobyAkKEtFUk5FTFJFTEVBU0UpDQogICAgKyMgdmVyc2lvbi5oOiBGT1JDRQ0KICAg
ICsjICAgJChjYWxsIGZpbGVjaGssc2FtcGxlKQ0KICAgICsjDQogICAgKyMgVGhlIHJ1bGUgZGVm
aW5lZCBzaGFsbCB3cml0ZSB0byBzdGRvdXQgdGhlIGNvbnRlbnQgb2YgdGhlIG5ldyBmaWxlLg0K
ICAgICsjIFRoZSBleGlzdGluZyBmaWxlIHdpbGwgYmUgY29tcGFyZWQgd2l0aCB0aGUgbmV3IG9u
ZS4NCiAgICArIyAtIElmIG5vIGZpbGUgZXhpc3QgaXQgaXMgY3JlYXRlZA0KICAgICsjIC0gSWYg
dGhlIGNvbnRlbnQgZGlmZmVyIHRoZSBuZXcgZmlsZSBpcyB1c2VkDQogICAgKyMgLSBJZiB0aGV5
IGFyZSBlcXVhbCBubyBjaGFuZ2UsIGFuZCBubyB0aW1lc3RhbXAgdXBkYXRlDQogICAgKyMgLSBz
dGRpbiBpcyBwaXBlZCBpbiBmcm9tIHRoZSBmaXJzdCBwcmVyZXF1aXNpdGUgKCQ8KSBzbyBvbmUg
aGFzDQogICAgKyMgICB0byBzcGVjaWZ5IGEgdmFsaWQgZmlsZSBhcyBmaXJzdCBwcmVyZXF1aXNp
dGUgKG9mdGVuIHRoZSBrYnVpbGQgZmlsZSkNCiAgICArZGVmaW5lIGZpbGVjaGsNCiAgICArCSQo
USlzZXQgLWU7ICAgICAgICAgICAgIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKTsgICAgICAg
ICBcDQogICAgKwl7ICQoZmlsZWNoa18kKDEpKTsgfSA+ICRALnRtcDsgICAgICBcDQogICAgKwlp
ZiBbIC1yICRAIF0gJiYgY21wIC1zICRAICRALnRtcDsgdGhlbiAgXA0KICAgICsJICAgIHJtIC1m
ICRALnRtcDsgICAgICAgICAgIFwNCiAgICArCWVsc2UgICAgICAgICAgICAgICAgICAgIFwNCiAg
ICArCSAgICAkKGtlY2hvKSAnICBVUEQgICAgICRAJzsgICAgXA0KICAgICsJICAgIG12IC1mICRA
LnRtcCAkQDsgICAgICAgIFwNCiAgICArCWZpDQogICAgK2VuZGVmDQogICAgKw0KICAgICsjIEV4
ZWN1dGUgY29tbWFuZCBpZiBjb21tYW5kIGhhcyBjaGFuZ2VkIG9yIHByZXJlcXVpc2l0ZShzKSBh
cmUgdXBkYXRlZC4NCiAgICAraWZfY2hhbmdlZCA9ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEp
ICQoYXJnLWNoZWNrKSksCQlcDQogICAgKwkkKGNtZCk7XA0KICAgICsJcHJpbnRmICclc1xuJyAn
Y21kXyRAIDo9ICQobWFrZS1jbWQpJyA+ICQoZG90LXRhcmdldCkuY21kLCBAOikNCiAgICArDQog
ICAgKyMgTEVYDQogICAgKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgK3F1aWV0X2NtZF9mbGV4
ID0gTEVYICRADQogICAgK2NtZF9mbGV4ID0gJChMRVgpIC1vJEAgLUwgJDwNCiAgICArDQogICAg
KyQob2JqKS8lLmxleC5jOiAkKHNyYykvJS5sIEZPUkNFDQogICAgKwkkKGNhbGwgaWZfY2hhbmdl
ZCxmbGV4KQ0KICAgICsNCiAgICArIyBZQUNDDQogICAgKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQog
ICAgK3F1aWV0X2NtZF9iaXNvbiA9IFlBQ0MgICAgJEANCiAgICArY21kX2Jpc29uID0gJChZQUND
KSAtbyRAIC10IC1sICQ8DQogICAgKw0KICAgICskKG9iaikvJS50YWIuYzogJChzcmMpLyUueSBG
T1JDRQ0KICAgICsJJChjYWxsIGlmX2NoYW5nZWQsYmlzb24pDQogICAgKw0KICAgICtxdWlldF9j
bWRfYmlzb25faCA9IFlBQ0MgICAgJEANCiAgICArY21kX2Jpc29uX2ggPSAkKFlBQ0MpIC1vL2Rl
di9udWxsIC0tZGVmaW5lcz0kQCAtdCAtbCAkPA0KICAgICsNCiAgICArJChvYmopLyUudGFiLmg6
ICQoc3JjKS8lLnkgRk9SQ0UNCiAgICArCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uX2gpDQogICAg
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9SRUFETUUudW5pa3JhZnQgYi9zdXBwb3J0L2tj
b25maWcvUkVBRE1FLnVuaWtyYWZ0DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMDAwMDAwLi5kZTM3ZjlmDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQv
a2NvbmZpZy9SRUFETUUudW5pa3JhZnQNCiAgICBAQCAtMCwwICsxLDIxIEBADQogICAgK1RoaXMg
aXMgYSBjb3B5IG9mIHRoZSBrY29uZmlnIGNvZGUgaW4gdGhlIGtlcm5lbCAoY3VycmVudGx5IHY1
LjIpIHR3ZWFrZWQNCiAgICArdG8gc3VpdCBVbmlrcmFmdC4NCiAgICArDQogICAgK1RvIHVwZGF0
ZSAoZnJvbSBsaW51eCk6DQogICAgKwljcCAtciAvdXNyL3NyYy9saW51eC9zY3JpcHRzL2tjb25m
aWcgc3VwcG9ydC9rY29uZmlnLm5ldw0KICAgICsJY2Qgc3VwcG9ydC9rY29uZmlnLm5ldw0KICAg
ICsJY3AgLWEgLi4va2NvbmZpZy9wYXRjaGVzIC4uL2tjb25maWcvUkVBRE1FLnVuaWtyYWZ0IC4u
L2tjb25maWcvLmdpdGlnbm9yZSAuDQogICAgKwlxdWlsdCBwdXNoIC1hDQogICAgKwkjIEZpeCBh
bnkgY29uZmxpY3QNCiAgICArCWNkIC4uDQogICAgKwlybSAtcmYga2NvbmZpZw0KICAgICsJbXYg
a2NvbmZpZy5uZXcga2NvbmZpZw0KICAgICsNCiAgICArVGhlbiB2ZXJpZnkgdGhlIHRvcGxldmVs
IHRhcmdldHMgd29yazoNCiAgICArCWNvbmZpZw0KICAgICsJZGVmY29uZmlnDQogICAgKwltZW51
Y29uZmlnDQogICAgKwl4Y29uZmlnDQogICAgKwlnY29uZmlnDQogICAgKwlvbGRjb25maWcNCiAg
ICArCXFjb25maWcNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2NvbmYuYyBiL3N1
cHBvcnQva2NvbmZpZy9jb25mLmMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IDAwMDAwMDAuLmVmMzY3OGMNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnL2NvbmYuYw0KICAgIEBAIC0wLDAgKzEsNzAyIEBADQogICAgKy8vIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAw
MiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQogICAgKw0K
ICAgICsjaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICArI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgICsj
aW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsjaW5jbHVk
ZSA8c3RyaW5nLmg+DQogICAgKyNpbmNsdWRlIDx0aW1lLmg+DQogICAgKyNpbmNsdWRlIDx1bmlz
dGQuaD4NCiAgICArI2luY2x1ZGUgPGdldG9wdC5oPg0KICAgICsjaW5jbHVkZSA8c3lzL3N0YXQu
aD4NCiAgICArI2luY2x1ZGUgPHN5cy90aW1lLmg+DQogICAgKyNpbmNsdWRlIDxlcnJuby5oPg0K
ICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsNCiAgICArc3RhdGljIHZvaWQgY29u
ZihzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK3N0YXRpYyB2b2lkIGNoZWNrX2NvbmYoc3RydWN0
IG1lbnUgKm1lbnUpOw0KICAgICsNCiAgICArZW51bSBpbnB1dF9tb2RlIHsNCiAgICArCW9sZGFz
a2NvbmZpZywNCiAgICArCXN5bmNjb25maWcsDQogICAgKwlvbGRjb25maWcsDQogICAgKwlhbGxu
b2NvbmZpZywNCiAgICArCWFsbHllc2NvbmZpZywNCiAgICArCWFsbG1vZGNvbmZpZywNCiAgICAr
CWFsbGRlZmNvbmZpZywNCiAgICArCXJhbmRjb25maWcsDQogICAgKwlkZWZjb25maWcsDQogICAg
KwlzYXZlZGVmY29uZmlnLA0KICAgICsJbGlzdG5ld2NvbmZpZywNCiAgICArCW9sZGRlZmNvbmZp
ZywNCiAgICArfTsNCiAgICArc3RhdGljIGVudW0gaW5wdXRfbW9kZSBpbnB1dF9tb2RlID0gb2xk
YXNrY29uZmlnOw0KICAgICsNCiAgICArc3RhdGljIGludCBpbmRlbnQgPSAxOw0KICAgICtzdGF0
aWMgaW50IHR0eV9zdGRpbzsNCiAgICArc3RhdGljIGludCBzeW5jX2tjb25maWc7DQogICAgK3N0
YXRpYyBpbnQgY29uZl9jbnQ7DQogICAgK3N0YXRpYyBjaGFyIGxpbmVbUEFUSF9NQVhdOw0KICAg
ICtzdGF0aWMgc3RydWN0IG1lbnUgKnJvb3RFbnRyeTsNCiAgICArDQogICAgK3N0YXRpYyB2b2lk
IHByaW50X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCXN0cnVjdCBnc3Ry
IGhlbHAgPSBzdHJfbmV3KCk7DQogICAgKw0KICAgICsJbWVudV9nZXRfZXh0X2hlbHAobWVudSwg
JmhlbHApOw0KICAgICsNCiAgICArCXByaW50ZigiXG4lc1xuIiwgc3RyX2dldCgmaGVscCkpOw0K
ICAgICsJc3RyX2ZyZWUoJmhlbHApOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBz
dHJpcChjaGFyICpzdHIpDQogICAgK3sNCiAgICArCWNoYXIgKnAgPSBzdHI7DQogICAgKwlpbnQg
bDsNCiAgICArDQogICAgKwl3aGlsZSAoKGlzc3BhY2UoKnApKSkNCiAgICArCQlwKys7DQogICAg
KwlsID0gc3RybGVuKHApOw0KICAgICsJaWYgKHAgIT0gc3RyKQ0KICAgICsJCW1lbW1vdmUoc3Ry
LCBwLCBsICsgMSk7DQogICAgKwlpZiAoIWwpDQogICAgKwkJcmV0dXJuOw0KICAgICsJcCA9IHN0
ciArIGwgLSAxOw0KICAgICsJd2hpbGUgKChpc3NwYWNlKCpwKSkpDQogICAgKwkJKnAtLSA9IDA7
DQogICAgK30NCiAgICArDQogICAgKy8qIEhlbHBlciBmdW5jdGlvbiB0byBmYWNpbGl0YXRlIGZn
ZXRzKCkgYnkgSmVhbiBTYWNyZW4uICovDQogICAgK3N0YXRpYyB2b2lkIHhmZ2V0cyhjaGFyICpz
dHIsIGludCBzaXplLCBGSUxFICppbikNCiAgICArew0KICAgICsJaWYgKCFmZ2V0cyhzdHIsIHNp
emUsIGluKSkNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgIlxuRXJyb3IgaW4gcmVhZGluZyBvciBl
bmQgb2YgZmlsZS5cbiIpOw0KICAgICsNCiAgICArCWlmICghdHR5X3N0ZGlvKQ0KICAgICsJCXBy
aW50ZigiJXMiLCBzdHIpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW50IGNvbmZfYXNr
dmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpkZWYpDQogICAgK3sNCiAgICAr
CWVudW0gc3ltYm9sX3R5cGUgdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgICsNCiAgICAr
CWlmICghc3ltX2hhc192YWx1ZShzeW0pKQ0KICAgICsJCXByaW50ZigiKE5FVykgIik7DQogICAg
Kw0KICAgICsJbGluZVswXSA9ICdcbic7DQogICAgKwlsaW5lWzFdID0gMDsNCiAgICArDQogICAg
KwlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgICsJCXByaW50ZigiJXNcbiIsIGRl
Zik7DQogICAgKwkJbGluZVswXSA9ICdcbic7DQogICAgKwkJbGluZVsxXSA9IDA7DQogICAgKwkJ
cmV0dXJuIDA7DQogICAgKwl9DQogICAgKw0KICAgICsJc3dpdGNoIChpbnB1dF9tb2RlKSB7DQog
ICAgKwljYXNlIG9sZGNvbmZpZzoNCiAgICArCWNhc2Ugc3luY2NvbmZpZzoNCiAgICArCQlpZiAo
c3ltX2hhc192YWx1ZShzeW0pKSB7DQogICAgKwkJCXByaW50ZigiJXNcbiIsIGRlZik7DQogICAg
KwkJCXJldHVybiAwOw0KICAgICsJCX0NCiAgICArCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICAr
CWNhc2Ugb2xkYXNrY29uZmlnOg0KICAgICsJCWZmbHVzaChzdGRvdXQpOw0KICAgICsJCXhmZ2V0
cyhsaW5lLCBzaXplb2YobGluZSksIHN0ZGluKTsNCiAgICArCQlyZXR1cm4gMTsNCiAgICArCWRl
ZmF1bHQ6DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgKw0KICAgICsJc3dpdGNoICh0eXBl
KSB7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJY2FzZSBTX0hFWDoNCiAgICArCWNhc2UgU19T
VFJJTkc6DQogICAgKwkJcHJpbnRmKCIlc1xuIiwgZGVmKTsNCiAgICArCQlyZXR1cm4gMTsNCiAg
ICArCWRlZmF1bHQ6DQogICAgKwkJOw0KICAgICsJfQ0KICAgICsJcHJpbnRmKCIlcyIsIGxpbmUp
Ow0KICAgICsJcmV0dXJuIDE7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbnQgY29uZl9z
dHJpbmcoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5
bSA9IG1lbnUtPnN5bTsNCiAgICArCWNvbnN0IGNoYXIgKmRlZjsNCiAgICArDQogICAgKwl3aGls
ZSAoMSkgew0KICAgICsJCXByaW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwgIiIsIG1lbnUtPnBy
b21wdC0+dGV4dCk7DQogICAgKwkJcHJpbnRmKCIoJXMpICIsIHN5bS0+bmFtZSk7DQogICAgKwkJ
ZGVmID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsNCiAgICArCQlpZiAoc3ltX2dldF9zdHJp
bmdfdmFsdWUoc3ltKSkNCiAgICArCQkJcHJpbnRmKCJbJXNdICIsIGRlZik7DQogICAgKwkJaWYg
KCFjb25mX2Fza3ZhbHVlKHN5bSwgZGVmKSkNCiAgICArCQkJcmV0dXJuIDA7DQogICAgKwkJc3dp
dGNoIChsaW5lWzBdKSB7DQogICAgKwkJY2FzZSAnXG4nOg0KICAgICsJCQlicmVhazsNCiAgICAr
CQljYXNlICc/JzoNCiAgICArCQkJLyogcHJpbnQgaGVscCAqLw0KICAgICsJCQlpZiAobGluZVsx
XSA9PSAnXG4nKSB7DQogICAgKwkJCQlwcmludF9oZWxwKG1lbnUpOw0KICAgICsJCQkJZGVmID0g
TlVMTDsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCS8qIGZhbGwgdGhyb3Vn
aCAqLw0KICAgICsJCWRlZmF1bHQ6DQogICAgKwkJCWxpbmVbc3RybGVuKGxpbmUpLTFdID0gMDsN
CiAgICArCQkJZGVmID0gbGluZTsNCiAgICArCQl9DQogICAgKwkJaWYgKGRlZiAmJiBzeW1fc2V0
X3N0cmluZ192YWx1ZShzeW0sIGRlZikpDQogICAgKwkJCXJldHVybiAwOw0KICAgICsJfQ0KICAg
ICt9DQogICAgKw0KICAgICtzdGF0aWMgaW50IGNvbmZfc3ltKHN0cnVjdCBtZW51ICptZW51KQ0K
ICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgKwl0cmlz
dGF0ZSBvbGR2YWwsIG5ld3ZhbDsNCiAgICArDQogICAgKwl3aGlsZSAoMSkgew0KICAgICsJCXBy
aW50ZigiJSpzJXMgIiwgaW5kZW50IC0gMSwgIiIsIG1lbnUtPnByb21wdC0+dGV4dCk7DQogICAg
KwkJaWYgKHN5bS0+bmFtZSkNCiAgICArCQkJcHJpbnRmKCIoJXMpICIsIHN5bS0+bmFtZSk7DQog
ICAgKwkJcHV0Y2hhcignWycpOw0KICAgICsJCW9sZHZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFs
dWUoc3ltKTsNCiAgICArCQlzd2l0Y2ggKG9sZHZhbCkgew0KICAgICsJCWNhc2Ugbm86DQogICAg
KwkJCXB1dGNoYXIoJ04nKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBtb2Q6DQogICAg
KwkJCXB1dGNoYXIoJ00nKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSB5ZXM6DQogICAg
KwkJCXB1dGNoYXIoJ1knKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlmIChv
bGR2YWwgIT0gbm8gJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIG5vKSkNCiAgICAr
CQkJcHJpbnRmKCIvbiIpOw0KICAgICsJCWlmIChvbGR2YWwgIT0gbW9kICYmIHN5bV90cmlzdGF0
ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpKQ0KICAgICsJCQlwcmludGYoIi9tIik7DQogICAgKwkJ
aWYgKG9sZHZhbCAhPSB5ZXMgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHllcykp
DQogICAgKwkJCXByaW50ZigiL3kiKTsNCiAgICArCQlwcmludGYoIi8/XSAiKTsNCiAgICArCQlp
ZiAoIWNvbmZfYXNrdmFsdWUoc3ltLCBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKSkNCiAgICAr
CQkJcmV0dXJuIDA7DQogICAgKwkJc3RyaXAobGluZSk7DQogICAgKw0KICAgICsJCXN3aXRjaCAo
bGluZVswXSkgew0KICAgICsJCWNhc2UgJ24nOg0KICAgICsJCWNhc2UgJ04nOg0KICAgICsJCQlu
ZXd2YWwgPSBubzsNCiAgICArCQkJaWYgKCFsaW5lWzFdIHx8ICFzdHJjbXAoJmxpbmVbMV0sICJv
IikpDQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY29udGludWU7DQogICAgKwkJY2FzZSAnbSc6
DQogICAgKwkJY2FzZSAnTSc6DQogICAgKwkJCW5ld3ZhbCA9IG1vZDsNCiAgICArCQkJaWYgKCFs
aW5lWzFdKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCWNhc2Ug
J3knOg0KICAgICsJCWNhc2UgJ1knOg0KICAgICsJCQluZXd2YWwgPSB5ZXM7DQogICAgKwkJCWlm
ICghbGluZVsxXSB8fCAhc3RyY21wKCZsaW5lWzFdLCAiZXMiKSkNCiAgICArCQkJCWJyZWFrOw0K
ICAgICsJCQljb250aW51ZTsNCiAgICArCQljYXNlIDA6DQogICAgKwkJCW5ld3ZhbCA9IG9sZHZh
bDsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAnPyc6DQogICAgKwkJCWdvdG8gaGVscDsN
CiAgICArCQlkZWZhdWx0Og0KICAgICsJCQljb250aW51ZTsNCiAgICArCQl9DQogICAgKwkJaWYg
KHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBuZXd2YWwpKQ0KICAgICsJCQlyZXR1cm4gMDsN
CiAgICAraGVscDoNCiAgICArCQlwcmludF9oZWxwKG1lbnUpOw0KICAgICsJfQ0KICAgICt9DQog
ICAgKw0KICAgICtzdGF0aWMgaW50IGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51KQ0KICAg
ICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW0sICpkZWZfc3ltOw0KICAgICsJc3RydWN0IG1l
bnUgKmNoaWxkOw0KICAgICsJYm9vbCBpc19uZXc7DQogICAgKw0KICAgICsJc3ltID0gbWVudS0+
c3ltOw0KICAgICsJaXNfbmV3ID0gIXN5bV9oYXNfdmFsdWUoc3ltKTsNCiAgICArCWlmIChzeW1f
aXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICArCQljb25mX3N5bShtZW51KTsNCiAgICArCQlzeW1f
Y2FsY192YWx1ZShzeW0pOw0KICAgICsJCXN3aXRjaCAoc3ltX2dldF90cmlzdGF0ZV92YWx1ZShz
eW0pKSB7DQogICAgKwkJY2FzZSBubzoNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwkJY2FzZSBt
b2Q6DQogICAgKwkJCXJldHVybiAwOw0KICAgICsJCWNhc2UgeWVzOg0KICAgICsJCQlicmVhazsN
CiAgICArCQl9DQogICAgKwl9IGVsc2Ugew0KICAgICsJCXN3aXRjaCAoc3ltX2dldF90cmlzdGF0
ZV92YWx1ZShzeW0pKSB7DQogICAgKwkJY2FzZSBubzoNCiAgICArCQkJcmV0dXJuIDE7DQogICAg
KwkJY2FzZSBtb2Q6DQogICAgKwkJCXByaW50ZigiJSpzJXNcbiIsIGluZGVudCAtIDEsICIiLCBt
ZW51X2dldF9wcm9tcHQobWVudSkpOw0KICAgICsJCQlyZXR1cm4gMDsNCiAgICArCQljYXNlIHll
czoNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCXdoaWxl
ICgxKSB7DQogICAgKwkJaW50IGNudCwgZGVmOw0KICAgICsNCiAgICArCQlwcmludGYoIiUqcyVz
XG4iLCBpbmRlbnQgLSAxLCAiIiwgbWVudV9nZXRfcHJvbXB0KG1lbnUpKTsNCiAgICArCQlkZWZf
c3ltID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsNCiAgICArCQljbnQgPSBkZWYgPSAwOw0K
ICAgICsJCWxpbmVbMF0gPSAwOw0KICAgICsJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGls
ZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCQlpZiAoIW1lbnVfaXNfdmlzaWJsZShj
aGlsZCkpDQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJaWYgKCFjaGlsZC0+c3ltKSB7DQog
ICAgKwkJCQlwcmludGYoIiUqYyAlc1xuIiwgaW5kZW50LCAnKicsIG1lbnVfZ2V0X3Byb21wdChj
aGlsZCkpOw0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCX0NCiAgICArCQkJY250Kys7DQog
ICAgKwkJCWlmIChjaGlsZC0+c3ltID09IGRlZl9zeW0pIHsNCiAgICArCQkJCWRlZiA9IGNudDsN
CiAgICArCQkJCXByaW50ZigiJSpjIiwgaW5kZW50LCAnPicpOw0KICAgICsJCQl9IGVsc2UNCiAg
ICArCQkJCXByaW50ZigiJSpjIiwgaW5kZW50LCAnICcpOw0KICAgICsJCQlwcmludGYoIiAlZC4g
JXMiLCBjbnQsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOw0KICAgICsJCQlpZiAoY2hpbGQtPnN5
bS0+bmFtZSkNCiAgICArCQkJCXByaW50ZigiICglcykiLCBjaGlsZC0+c3ltLT5uYW1lKTsNCiAg
ICArCQkJaWYgKCFzeW1faGFzX3ZhbHVlKGNoaWxkLT5zeW0pKQ0KICAgICsJCQkJcHJpbnRmKCIg
KE5FVykiKTsNCiAgICArCQkJcHJpbnRmKCJcbiIpOw0KICAgICsJCX0NCiAgICArCQlwcmludGYo
IiUqc2Nob2ljZSIsIGluZGVudCAtIDEsICIiKTsNCiAgICArCQlpZiAoY250ID09IDEpIHsNCiAg
ICArCQkJcHJpbnRmKCJbMV06IDFcbiIpOw0KICAgICsJCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAg
ICsJCX0NCiAgICArCQlwcmludGYoIlsxLSVkP106ICIsIGNudCk7DQogICAgKwkJc3dpdGNoIChp
bnB1dF9tb2RlKSB7DQogICAgKwkJY2FzZSBvbGRjb25maWc6DQogICAgKwkJY2FzZSBzeW5jY29u
ZmlnOg0KICAgICsJCQlpZiAoIWlzX25ldykgew0KICAgICsJCQkJY250ID0gZGVmOw0KICAgICsJ
CQkJcHJpbnRmKCIlZFxuIiwgY250KTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAg
KwkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgICsJCWNhc2Ugb2xkYXNrY29uZmlnOg0KICAgICsJ
CQlmZmx1c2goc3Rkb3V0KTsNCiAgICArCQkJeGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgc3Rk
aW4pOw0KICAgICsJCQlzdHJpcChsaW5lKTsNCiAgICArCQkJaWYgKGxpbmVbMF0gPT0gJz8nKSB7
DQogICAgKwkJCQlwcmludF9oZWxwKG1lbnUpOw0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJ
CX0NCiAgICArCQkJaWYgKCFsaW5lWzBdKQ0KICAgICsJCQkJY250ID0gZGVmOw0KICAgICsJCQll
bHNlIGlmIChpc2RpZ2l0KGxpbmVbMF0pKQ0KICAgICsJCQkJY250ID0gYXRvaShsaW5lKTsNCiAg
ICArCQkJZWxzZQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWRl
ZmF1bHQ6DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArDQogICAgKwljb25mX2NoaWxk
czoNCiAgICArCQlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHQpIHsNCiAgICArCQkJaWYgKCFjaGlsZC0+c3ltIHx8ICFtZW51X2lzX3Zpc2libGUoY2hp
bGQpKQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWlmICghLS1jbnQpDQogICAgKwkJCQli
cmVhazsNCiAgICArCQl9DQogICAgKwkJaWYgKCFjaGlsZCkNCiAgICArCQkJY29udGludWU7DQog
ICAgKwkJaWYgKGxpbmVbMF0gJiYgbGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAnPycpIHsNCiAg
ICArCQkJcHJpbnRfaGVscChjaGlsZCk7DQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCX0NCiAg
ICArCQlzeW1fc2V0X2Nob2ljZV92YWx1ZShzeW0sIGNoaWxkLT5zeW0pOw0KICAgICsJCWZvciAo
Y2hpbGQgPSBjaGlsZC0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICAr
CQkJaW5kZW50ICs9IDI7DQogICAgKwkJCWNvbmYoY2hpbGQpOw0KICAgICsJCQlpbmRlbnQgLT0g
MjsNCiAgICArCQl9DQogICAgKwkJcmV0dXJuIDE7DQogICAgKwl9DQogICAgK30NCiAgICArDQog
ICAgK3N0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCXN0
cnVjdCBzeW1ib2wgKnN5bTsNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0
cnVjdCBtZW51ICpjaGlsZDsNCiAgICArDQogICAgKwlpZiAoIW1lbnVfaXNfdmlzaWJsZShtZW51
KSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsJ
cHJvcCA9IG1lbnUtPnByb21wdDsNCiAgICArCWlmIChwcm9wKSB7DQogICAgKwkJY29uc3QgY2hh
ciAqcHJvbXB0Ow0KICAgICsNCiAgICArCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAgICArCQlj
YXNlIFBfTUVOVToNCiAgICArCQkJLyoNCiAgICArCQkJICogRXhjZXB0IGluIG9sZGFza2NvbmZp
ZyBtb2RlLCB3ZSBzaG93IG9ubHkgbWVudXMgdGhhdA0KICAgICsJCQkgKiBjb250YWluIG5ldyBz
eW1ib2xzLg0KICAgICsJCQkgKi8NCiAgICArCQkJaWYgKGlucHV0X21vZGUgIT0gb2xkYXNrY29u
ZmlnICYmIHJvb3RFbnRyeSAhPSBtZW51KSB7DQogICAgKwkJCQljaGVja19jb25mKG1lbnUpOw0K
ICAgICsJCQkJcmV0dXJuOw0KICAgICsJCQl9DQogICAgKwkJCS8qIGZhbGwgdGhyb3VnaCAqLw0K
ICAgICsJCWNhc2UgUF9DT01NRU5UOg0KICAgICsJCQlwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQo
bWVudSk7DQogICAgKwkJCWlmIChwcm9tcHQpDQogICAgKwkJCQlwcmludGYoIiUqY1xuJSpjICVz
XG4lKmNcbiIsDQogICAgKwkJCQkJaW5kZW50LCAnKicsDQogICAgKwkJCQkJaW5kZW50LCAnKics
IHByb21wdCwNCiAgICArCQkJCQlpbmRlbnQsICcqJyk7DQogICAgKwkJZGVmYXVsdDoNCiAgICAr
CQkJOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoIXN5bSkNCiAgICArCQln
b3RvIGNvbmZfY2hpbGRzOw0KICAgICsNCiAgICArCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsN
CiAgICArCQljb25mX2Nob2ljZShtZW51KTsNCiAgICArCQlpZiAoc3ltLT5jdXJyLnRyaSAhPSBt
b2QpDQogICAgKwkJCXJldHVybjsNCiAgICArCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgICsJfQ0K
ICAgICsNCiAgICArCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwljYXNlIFNfSU5UOg0KICAg
ICsJY2FzZSBTX0hFWDoNCiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJY29uZl9zdHJpbmco
bWVudSk7DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCWNvbmZfc3ltKG1l
bnUpOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArY29uZl9jaGlsZHM6DQog
ICAgKwlpZiAoc3ltKQ0KICAgICsJCWluZGVudCArPSAyOw0KICAgICsJZm9yIChjaGlsZCA9IG1l
bnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KQ0KICAgICsJCWNvbmYoY2hpbGQp
Ow0KICAgICsJaWYgKHN5bSkNCiAgICArCQlpbmRlbnQgLT0gMjsNCiAgICArfQ0KICAgICsNCiAg
ICArc3RhdGljIHZvaWQgY2hlY2tfY29uZihzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAg
ICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsN
CiAgICArCWlmICghbWVudV9pc192aXNpYmxlKG1lbnUpKQ0KICAgICsJCXJldHVybjsNCiAgICAr
DQogICAgKwlzeW0gPSBtZW51LT5zeW07DQogICAgKwlpZiAoc3ltICYmICFzeW1faGFzX3ZhbHVl
KHN5bSkpIHsNCiAgICArCQlpZiAoc3ltX2lzX2NoYW5nYWJsZShzeW0pIHx8DQogICAgKwkJICAg
IChzeW1faXNfY2hvaWNlKHN5bSkgJiYgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09IHll
cykpIHsNCiAgICArCQkJaWYgKGlucHV0X21vZGUgPT0gbGlzdG5ld2NvbmZpZykgew0KICAgICsJ
CQkJaWYgKHN5bS0+bmFtZSkgew0KICAgICsJCQkJCWNvbnN0IGNoYXIgKnN0cjsNCiAgICArDQog
ICAgKwkJCQkJaWYgKHN5bS0+dHlwZSA9PSBTX1NUUklORykgew0KICAgICsJCQkJCQlzdHIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pOw0KICAgICsJCQkJCQlzdHIgPSBzeW1fZXNjYXBlX3N0
cmluZ192YWx1ZShzdHIpOw0KICAgICsJCQkJCQlwcmludGYoIiVzJXM9JXNcbiIsIENPTkZJR18s
IHN5bS0+bmFtZSwgc3RyKTsNCiAgICArCQkJCQkJZnJlZSgodm9pZCAqKXN0cik7DQogICAgKwkJ
CQkJfSBlbHNlIHsNCiAgICArCQkJCQkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsN
CiAgICArCQkJCQkJcHJpbnRmKCIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0tPm5hbWUsIHN0cik7
DQogICAgKwkJCQkJfQ0KICAgICsJCQkJfQ0KICAgICsJCQl9IGVsc2Ugew0KICAgICsJCQkJaWYg
KCFjb25mX2NudCsrKQ0KICAgICsJCQkJCXByaW50ZigiKlxuKiBSZXN0YXJ0IGNvbmZpZy4uLlxu
KlxuIik7DQogICAgKwkJCQlyb290RW50cnkgPSBtZW51X2dldF9wYXJlbnRfbWVudShtZW51KTsN
CiAgICArCQkJCWNvbmYocm9vdEVudHJ5KTsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCX0N
CiAgICArDQogICAgKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPm5leHQpDQogICAgKwkJY2hlY2tfY29uZihjaGlsZCk7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyBzdHJ1Y3Qgb3B0aW9uIGxvbmdfb3B0c1tdID0gew0KICAgICsJeyJvbGRhc2tjb25m
aWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgb2xkYXNrY29uZmlnfSwNCiAgICArCXsi
b2xkY29uZmlnIiwgICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIG9sZGNvbmZpZ30sDQog
ICAgKwl7InN5bmNjb25maWciLCAgICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBzeW5jY29u
ZmlnfSwNCiAgICArCXsiZGVmY29uZmlnIiwgICAgICAgb3B0aW9uYWxfYXJndW1lbnQsIE5VTEws
IGRlZmNvbmZpZ30sDQogICAgKwl7InNhdmVkZWZjb25maWciLCAgIHJlcXVpcmVkX2FyZ3VtZW50
LCBOVUxMLCBzYXZlZGVmY29uZmlnfSwNCiAgICArCXsiYWxsbm9jb25maWciLCAgICAgbm9fYXJn
dW1lbnQsICAgICAgIE5VTEwsIGFsbG5vY29uZmlnfSwNCiAgICArCXsiYWxseWVzY29uZmlnIiwg
ICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEwsIGFsbHllc2NvbmZpZ30sDQogICAgKwl7ImFsbG1v
ZGNvbmZpZyIsICAgIG5vX2FyZ3VtZW50LCAgICAgICBOVUxMLCBhbGxtb2Rjb25maWd9LA0KICAg
ICsJeyJhbGxkZWZjb25maWciLCAgICBub19hcmd1bWVudCwgICAgICAgTlVMTCwgYWxsZGVmY29u
ZmlnfSwNCiAgICArCXsicmFuZGNvbmZpZyIsICAgICAgbm9fYXJndW1lbnQsICAgICAgIE5VTEws
IHJhbmRjb25maWd9LA0KICAgICsJeyJsaXN0bmV3Y29uZmlnIiwgICBub19hcmd1bWVudCwgICAg
ICAgTlVMTCwgbGlzdG5ld2NvbmZpZ30sDQogICAgKwl7Im9sZGRlZmNvbmZpZyIsICAgIG5vX2Fy
Z3VtZW50LCAgICAgICBOVUxMLCBvbGRkZWZjb25maWd9LA0KICAgICsJe05VTEwsIDAsIE5VTEws
IDB9DQogICAgK307DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX3VzYWdlKGNvbnN0IGNo
YXIgKnByb2duYW1lKQ0KICAgICt7DQogICAgKw0KICAgICsJcHJpbnRmKCJVc2FnZTogJXMgWy1z
XSBbb3B0aW9uXSA8a2NvbmZpZy1maWxlPlxuIiwgcHJvZ25hbWUpOw0KICAgICsJcHJpbnRmKCJb
b3B0aW9uXSBpcyBfb25lXyBvZiB0aGUgZm9sbG93aW5nOlxuIik7DQogICAgKwlwcmludGYoIiAg
LS1saXN0bmV3Y29uZmlnICAgICAgICAgTGlzdCBuZXcgb3B0aW9uc1xuIik7DQogICAgKwlwcmlu
dGYoIiAgLS1vbGRhc2tjb25maWcgICAgICAgICAgU3RhcnQgYSBuZXcgY29uZmlndXJhdGlvbiB1
c2luZyBhIGxpbmUtb3JpZW50ZWQgcHJvZ3JhbVxuIik7DQogICAgKwlwcmludGYoIiAgLS1vbGRj
b25maWcgICAgICAgICAgICAgVXBkYXRlIGEgY29uZmlndXJhdGlvbiB1c2luZyBhIHByb3ZpZGVk
IC5jb25maWcgYXMgYmFzZVxuIik7DQogICAgKwlwcmludGYoIiAgLS1zeW5jY29uZmlnICAgICAg
ICAgICAgU2ltaWxhciB0byBvbGRjb25maWcgYnV0IGdlbmVyYXRlcyBjb25maWd1cmF0aW9uIGlu
XG4iDQogICAgKwkgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZS97Z2Vu
ZXJhdGVkLyxjb25maWcvfVxuIik7DQogICAgKwlwcmludGYoIiAgLS1vbGRkZWZjb25maWcgICAg
ICAgICAgU2FtZSBhcyBvbGRjb25maWcgYnV0IHNldHMgbmV3IHN5bWJvbHMgdG8gdGhlaXIgZGVm
YXVsdCB2YWx1ZVxuIik7DQogICAgKwlwcmludGYoIiAgLS1kZWZjb25maWcgPGZpbGU+ICAgICAg
TmV3IGNvbmZpZyB3aXRoIGRlZmF1bHQgZGVmaW5lZCBpbiA8ZmlsZT5cbiIpOw0KICAgICsJcHJp
bnRmKCIgIC0tc2F2ZWRlZmNvbmZpZyA8ZmlsZT4gIFNhdmUgdGhlIG1pbmltYWwgY3VycmVudCBj
b25maWd1cmF0aW9uIHRvIDxmaWxlPlxuIik7DQogICAgKwlwcmludGYoIiAgLS1hbGxub2NvbmZp
ZyAgICAgICAgICAgTmV3IGNvbmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0
aCBub1xuIik7DQogICAgKwlwcmludGYoIiAgLS1hbGx5ZXNjb25maWcgICAgICAgICAgTmV3IGNv
bmZpZyB3aGVyZSBhbGwgb3B0aW9ucyBhcmUgYW5zd2VyZWQgd2l0aCB5ZXNcbiIpOw0KICAgICsJ
cHJpbnRmKCIgIC0tYWxsbW9kY29uZmlnICAgICAgICAgIE5ldyBjb25maWcgd2hlcmUgYWxsIG9w
dGlvbnMgYXJlIGFuc3dlcmVkIHdpdGggbW9kXG4iKTsNCiAgICArCXByaW50ZigiICAtLWFsbGRl
ZmNvbmZpZyAgICAgICAgICBOZXcgY29uZmlnIHdpdGggYWxsIHN5bWJvbHMgc2V0IHRvIGRlZmF1
bHRcbiIpOw0KICAgICsJcHJpbnRmKCIgIC0tcmFuZGNvbmZpZyAgICAgICAgICAgIE5ldyBjb25m
aWcgd2l0aCByYW5kb20gYW5zd2VyIHRvIGFsbCBvcHRpb25zXG4iKTsNCiAgICArfQ0KICAgICsN
CiAgICAraW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpDQogICAgK3sNCiAgICArCWNvbnN0IGNo
YXIgKnByb2duYW1lID0gYXZbMF07DQogICAgKwlpbnQgb3B0Ow0KICAgICsJY29uc3QgY2hhciAq
bmFtZSwgKmRlZmNvbmZpZ19maWxlID0gTlVMTCAvKiBnY2MgdW5pbml0ICovOw0KICAgICsJaW50
IG5vX2NvbmZfd3JpdGUgPSAwOw0KICAgICsNCiAgICArCXR0eV9zdGRpbyA9IGlzYXR0eSgwKSAm
JiBpc2F0dHkoMSk7DQogICAgKw0KICAgICsJd2hpbGUgKChvcHQgPSBnZXRvcHRfbG9uZyhhYywg
YXYsICJzIiwgbG9uZ19vcHRzLCBOVUxMKSkgIT0gLTEpIHsNCiAgICArCQlpZiAob3B0ID09ICdz
Jykgew0KICAgICsJCQljb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKE5VTEwpOw0KICAgICsJCQlj
b250aW51ZTsNCiAgICArCQl9DQogICAgKwkJaW5wdXRfbW9kZSA9IChlbnVtIGlucHV0X21vZGUp
b3B0Ow0KICAgICsJCXN3aXRjaCAob3B0KSB7DQogICAgKwkJY2FzZSBzeW5jY29uZmlnOg0KICAg
ICsJCQkvKg0KICAgICsJCQkgKiBzeW5jY29uZmlnIGlzIGludm9rZWQgZHVyaW5nIHRoZSBidWls
ZCBzdGFnZS4NCiAgICArCQkJICogU3VwcHJlc3MgZGlzdHJhY3RpbmcgImNvbmZpZ3VyYXRpb24g
d3JpdHRlbiB0byAuLi4iDQogICAgKwkJCSAqLw0KICAgICsJCQljb25mX3NldF9tZXNzYWdlX2Nh
bGxiYWNrKE5VTEwpOw0KICAgICsJCQlzeW5jX2tjb25maWcgPSAxOw0KICAgICsJCQlicmVhazsN
CiAgICArCQljYXNlIGRlZmNvbmZpZzoNCiAgICArCQljYXNlIHNhdmVkZWZjb25maWc6DQogICAg
KwkJCWRlZmNvbmZpZ19maWxlID0gb3B0YXJnOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNl
IHJhbmRjb25maWc6DQogICAgKwkJew0KICAgICsJCQlzdHJ1Y3QgdGltZXZhbCBub3c7DQogICAg
KwkJCXVuc2lnbmVkIGludCBzZWVkOw0KICAgICsJCQljaGFyICpzZWVkX2VudjsNCiAgICArDQog
ICAgKwkJCS8qDQogICAgKwkJCSAqIFVzZSBtaWNyb3NlY29uZHMgZGVyaXZlZCBzZWVkLA0KICAg
ICsJCQkgKiBjb21wZW5zYXRlIGZvciBzeXN0ZW1zIHdoZXJlIGl0IG1heSBiZSB6ZXJvDQogICAg
KwkJCSAqLw0KICAgICsJCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7DQogICAgKwkJCXNlZWQg
PSAodW5zaWduZWQgaW50KSgobm93LnR2X3NlYyArIDEpICogKG5vdy50dl91c2VjICsgMSkpOw0K
ICAgICsNCiAgICArCQkJc2VlZF9lbnYgPSBnZXRlbnYoIktDT05GSUdfU0VFRCIpOw0KICAgICsJ
CQlpZiggc2VlZF9lbnYgJiYgKnNlZWRfZW52ICkgew0KICAgICsJCQkJY2hhciAqZW5kcDsNCiAg
ICArCQkJCWludCB0bXAgPSAoaW50KXN0cnRvbChzZWVkX2VudiwgJmVuZHAsIDApOw0KICAgICsJ
CQkJaWYgKCplbmRwID09ICdcMCcpIHsNCiAgICArCQkJCQlzZWVkID0gdG1wOw0KICAgICsJCQkJ
fQ0KICAgICsJCQl9DQogICAgKwkJCWZwcmludGYoIHN0ZGVyciwgIktDT05GSUdfU0VFRD0weCVY
XG4iLCBzZWVkICk7DQogICAgKwkJCXNyYW5kKHNlZWQpOw0KICAgICsJCQlicmVhazsNCiAgICAr
CQl9DQogICAgKwkJY2FzZSBvbGRhc2tjb25maWc6DQogICAgKwkJY2FzZSBvbGRjb25maWc6DQog
ICAgKwkJY2FzZSBhbGxub2NvbmZpZzoNCiAgICArCQljYXNlIGFsbHllc2NvbmZpZzoNCiAgICAr
CQljYXNlIGFsbG1vZGNvbmZpZzoNCiAgICArCQljYXNlIGFsbGRlZmNvbmZpZzoNCiAgICArCQlj
YXNlIGxpc3RuZXdjb25maWc6DQogICAgKwkJY2FzZSBvbGRkZWZjb25maWc6DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgJz8nOg0KICAgICsJCQljb25mX3VzYWdlKHByb2duYW1lKTsNCiAg
ICArCQkJZXhpdCgxKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJ
aWYgKGFjID09IG9wdGluZCkgew0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiJXM6IEtjb25maWcg
ZmlsZSBtaXNzaW5nXG4iLCBhdlswXSk7DQogICAgKwkJY29uZl91c2FnZShwcm9nbmFtZSk7DQog
ICAgKwkJZXhpdCgxKTsNCiAgICArCX0NCiAgICArCW5hbWUgPSBhdltvcHRpbmRdOw0KICAgICsJ
Y29uZl9wYXJzZShuYW1lKTsNCiAgICArCS8vemNvbmZkdW1wKHN0ZG91dCk7DQogICAgKw0KICAg
ICsJc3dpdGNoIChpbnB1dF9tb2RlKSB7DQogICAgKwljYXNlIGRlZmNvbmZpZzoNCiAgICArCQlp
ZiAoIWRlZmNvbmZpZ19maWxlKQ0KICAgICsJCQlkZWZjb25maWdfZmlsZSA9IGNvbmZfZ2V0X2Rl
ZmF1bHRfY29uZm5hbWUoKTsNCiAgICArCQlpZiAoY29uZl9yZWFkKGRlZmNvbmZpZ19maWxlKSkg
ew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwNCiAgICArCQkJCSIqKipcbiINCiAgICArCQkJCSAg
IioqKiBDYW4ndCBmaW5kIGRlZmF1bHQgY29uZmlndXJhdGlvbiBcIiVzXCIhXG4iDQogICAgKwkJ
CQkgICIqKipcbiIsDQogICAgKwkJCQlkZWZjb25maWdfZmlsZSk7DQogICAgKwkJCWV4aXQoMSk7
DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBzYXZlZGVmY29uZmlnOg0KICAg
ICsJY2FzZSBzeW5jY29uZmlnOg0KICAgICsJY2FzZSBvbGRhc2tjb25maWc6DQogICAgKwljYXNl
IG9sZGNvbmZpZzoNCiAgICArCWNhc2UgbGlzdG5ld2NvbmZpZzoNCiAgICArCWNhc2Ugb2xkZGVm
Y29uZmlnOg0KICAgICsJCWNvbmZfcmVhZChOVUxMKTsNCiAgICArCQlicmVhazsNCiAgICArCWNh
c2UgYWxsbm9jb25maWc6DQogICAgKwljYXNlIGFsbHllc2NvbmZpZzoNCiAgICArCWNhc2UgYWxs
bW9kY29uZmlnOg0KICAgICsJY2FzZSBhbGxkZWZjb25maWc6DQogICAgKwljYXNlIHJhbmRjb25m
aWc6DQogICAgKwkJbmFtZSA9IGdldGVudigiS0NPTkZJR19BTExDT05GSUciKTsNCiAgICArCQlp
ZiAoIW5hbWUpDQogICAgKwkJCWJyZWFrOw0KICAgICsJCWlmICgoc3RyY21wKG5hbWUsICIiKSAh
PSAwKSAmJiAoc3RyY21wKG5hbWUsICIxIikgIT0gMCkpIHsNCiAgICArCQkJaWYgKGNvbmZfcmVh
ZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikpIHsNCiAgICArCQkJCWZwcmludGYoc3RkZXJyLA0K
ICAgICsJCQkJCSIqKiogQ2FuJ3QgcmVhZCBzZWVkIGNvbmZpZ3VyYXRpb24gXCIlc1wiIVxuIiwN
CiAgICArCQkJCQluYW1lKTsNCiAgICArCQkJCWV4aXQoMSk7DQogICAgKwkJCX0NCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJfQ0KICAgICsJCXN3aXRjaCAoaW5wdXRfbW9kZSkgew0KICAgICsJCWNh
c2UgYWxsbm9jb25maWc6CW5hbWUgPSAiYWxsbm8uY29uZmlnIjsgYnJlYWs7DQogICAgKwkJY2Fz
ZSBhbGx5ZXNjb25maWc6CW5hbWUgPSAiYWxseWVzLmNvbmZpZyI7IGJyZWFrOw0KICAgICsJCWNh
c2UgYWxsbW9kY29uZmlnOgluYW1lID0gImFsbG1vZC5jb25maWciOyBicmVhazsNCiAgICArCQlj
YXNlIGFsbGRlZmNvbmZpZzoJbmFtZSA9ICJhbGxkZWYuY29uZmlnIjsgYnJlYWs7DQogICAgKwkJ
Y2FzZSByYW5kY29uZmlnOgluYW1lID0gImFsbHJhbmRvbS5jb25maWciOyBicmVhazsNCiAgICAr
CQlkZWZhdWx0OiBicmVhazsNCiAgICArCQl9DQogICAgKwkJaWYgKGNvbmZfcmVhZF9zaW1wbGUo
bmFtZSwgU19ERUZfVVNFUikgJiYNCiAgICArCQkgICAgY29uZl9yZWFkX3NpbXBsZSgiYWxsLmNv
bmZpZyIsIFNfREVGX1VTRVIpKSB7DQogICAgKwkJCWZwcmludGYoc3RkZXJyLA0KICAgICsJCQkJ
IioqKiBLQ09ORklHX0FMTENPTkZJRyBzZXQsIGJ1dCBubyBcIiVzXCIgb3IgXCJhbGwuY29uZmln
XCIgZmlsZSBmb3VuZFxuIiwNCiAgICArCQkJCW5hbWUpOw0KICAgICsJCQlleGl0KDEpOw0KICAg
ICsJCX0NCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJYnJlYWs7DQogICAg
Kwl9DQogICAgKw0KICAgICsJaWYgKHN5bmNfa2NvbmZpZykgew0KICAgICsJCW5hbWUgPSBnZXRl
bnYoIktDT05GSUdfTk9TSUxFTlRVUERBVEUiKTsNCiAgICArCQlpZiAobmFtZSAmJiAqbmFtZSkg
ew0KICAgICsJCQlpZiAoY29uZl9nZXRfY2hhbmdlZCgpKSB7DQogICAgKwkJCQlmcHJpbnRmKHN0
ZGVyciwNCiAgICArCQkJCQkiXG4qKiogVGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZXMgZXhwbGlj
aXQgdXBkYXRlLlxuXG4iKTsNCiAgICArCQkJCXJldHVybiAxOw0KICAgICsJCQl9DQogICAgKwkJ
CW5vX2NvbmZfd3JpdGUgPSAxOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwlzd2l0
Y2ggKGlucHV0X21vZGUpIHsNCiAgICArCWNhc2UgYWxsbm9jb25maWc6DQogICAgKwkJY29uZl9z
ZXRfYWxsX25ld19zeW1ib2xzKGRlZl9ubyk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIGFs
bHllc2NvbmZpZzoNCiAgICArCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX3llcyk7DQog
ICAgKwkJYnJlYWs7DQogICAgKwljYXNlIGFsbG1vZGNvbmZpZzoNCiAgICArCQljb25mX3NldF9h
bGxfbmV3X3N5bWJvbHMoZGVmX21vZCk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIGFsbGRl
ZmNvbmZpZzoNCiAgICArCQljb25mX3NldF9hbGxfbmV3X3N5bWJvbHMoZGVmX2RlZmF1bHQpOw0K
ICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSByYW5kY29uZmlnOg0KICAgICsJCS8qIFJlYWxseSBu
b3RoaW5nIHRvIGRvIGluIHRoaXMgbG9vcCAqLw0KICAgICsJCXdoaWxlIChjb25mX3NldF9hbGxf
bmV3X3N5bWJvbHMoZGVmX3JhbmRvbSkpIDsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgZGVm
Y29uZmlnOg0KICAgICsJCWNvbmZfc2V0X2FsbF9uZXdfc3ltYm9scyhkZWZfZGVmYXVsdCk7DQog
ICAgKwkJYnJlYWs7DQogICAgKwljYXNlIHNhdmVkZWZjb25maWc6DQogICAgKwkJYnJlYWs7DQog
ICAgKwljYXNlIG9sZGFza2NvbmZpZzoNCiAgICArCQlyb290RW50cnkgPSAmcm9vdG1lbnU7DQog
ICAgKwkJY29uZigmcm9vdG1lbnUpOw0KICAgICsJCWlucHV0X21vZGUgPSBvbGRjb25maWc7DQog
ICAgKwkJLyogZmFsbCB0aHJvdWdoICovDQogICAgKwljYXNlIG9sZGNvbmZpZzoNCiAgICArCWNh
c2UgbGlzdG5ld2NvbmZpZzoNCiAgICArCWNhc2Ugc3luY2NvbmZpZzoNCiAgICArCQkvKiBVcGRh
dGUgdW50aWwgYSBsb29wIGNhdXNlZCBubyBtb3JlIGNoYW5nZXMgKi8NCiAgICArCQlkbyB7DQog
ICAgKwkJCWNvbmZfY250ID0gMDsNCiAgICArCQkJY2hlY2tfY29uZigmcm9vdG1lbnUpOw0KICAg
ICsJCX0gd2hpbGUgKGNvbmZfY250KTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2Ugb2xkZGVm
Y29uZmlnOg0KICAgICsJZGVmYXVsdDoNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArDQog
ICAgKwlpZiAoaW5wdXRfbW9kZSA9PSBzYXZlZGVmY29uZmlnKSB7DQogICAgKwkJaWYgKGNvbmZf
d3JpdGVfZGVmY29uZmlnKGRlZmNvbmZpZ19maWxlKSkgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVy
ciwgIm4qKiogRXJyb3Igd2hpbGUgc2F2aW5nIGRlZmNvbmZpZyB0bzogJXNcblxuIiwNCiAgICAr
CQkJCWRlZmNvbmZpZ19maWxlKTsNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwkJfQ0KICAgICsJ
fSBlbHNlIGlmIChpbnB1dF9tb2RlICE9IGxpc3RuZXdjb25maWcpIHsNCiAgICArCQlpZiAoIW5v
X2NvbmZfd3JpdGUgJiYgY29uZl93cml0ZShOVUxMKSkgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVy
ciwgIlxuKioqIEVycm9yIGR1cmluZyB3cml0aW5nIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuXG4i
KTsNCiAgICArCQkJZXhpdCgxKTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCS8qDQogICAgKwkJ
ICogQ3JlYXRlIGF1dG8uY29uZiBpZiBpdCBkb2VzIG5vdCBleGlzdC4NCiAgICArCQkgKiBUaGlz
IHByZXZlbnRzIEdOVSBNYWtlIDQuMSBvciBvbGRlciBmcm9tIGVtaXR0aW5nDQogICAgKwkJICog
ImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZjogTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSINCiAg
ICArCQkgKiBpbiB0aGUgdG9wLWxldmVsIE1ha2VmaWxlDQogICAgKwkJICoNCiAgICArCQkgKiBz
eW5jY29uZmlnIGFsd2F5cyBjcmVhdGVzIG9yIHVwZGF0ZXMgYXV0by5jb25mIGJlY2F1c2UgaXQg
aXMNCiAgICArCQkgKiB1c2VkIGR1cmluZyB0aGUgYnVpbGQuDQogICAgKwkJICovDQogICAgKwkJ
aWYgKGNvbmZfd3JpdGVfYXV0b2NvbmYoc3luY19rY29uZmlnKSAmJiBzeW5jX2tjb25maWcpIHsN
CiAgICArCQkJZnByaW50ZihzdGRlcnIsDQogICAgKwkJCQkiXG4qKiogRXJyb3IgZHVyaW5nIHN5
bmMgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG5cbiIpOw0KICAgICsJCQlyZXR1cm4gMTsNCiAgICAr
CQl9DQogICAgKwl9DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvY29uZmRhdGEuYyBiL3N1cHBvcnQva2NvbmZpZy9jb25mZGF0YS5jDQog
ICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi42MDA2MTU0DQogICAg
LS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9jb25mZGF0YS5jDQogICAg
QEAgLTAsMCArMSwxMzgwIEBADQogICAgKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHpp
cHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8c3lz
L21tYW4uaD4NCiAgICArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogICAgKyNpbmNsdWRlIDxjdHlw
ZS5oPg0KICAgICsjaW5jbHVkZSA8ZXJybm8uaD4NCiAgICArI2luY2x1ZGUgPGZjbnRsLmg+DQog
ICAgKyNpbmNsdWRlIDxsaW1pdHMuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGFyZy5oPg0KICAgICsj
aW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsjaW5jbHVk
ZSA8c3RyaW5nLmg+DQogICAgKyNpbmNsdWRlIDx0aW1lLmg+DQogICAgKyNpbmNsdWRlIDx1bmlz
dGQuaD4NCiAgICArDQogICAgKyNpbmNsdWRlICJsa2MuaCINCiAgICArDQogICAgKy8qIHJldHVy
biB0cnVlIGlmICdwYXRoJyBleGlzdHMsIGZhbHNlIG90aGVyd2lzZSAqLw0KICAgICtzdGF0aWMg
Ym9vbCBpc19wcmVzZW50KGNvbnN0IGNoYXIgKnBhdGgpDQogICAgK3sNCiAgICArCXN0cnVjdCBz
dGF0IHN0Ow0KICAgICsNCiAgICArCXJldHVybiAhc3RhdChwYXRoLCAmc3QpOw0KICAgICt9DQog
ICAgKw0KICAgICsvKiByZXR1cm4gdHJ1ZSBpZiAncGF0aCcgZXhpc3RzIGFuZCBpdCBpcyBhIGRp
cmVjdG9yeSwgZmFsc2Ugb3RoZXJ3aXNlICovDQogICAgK3N0YXRpYyBib29sIGlzX2Rpcihjb25z
dCBjaGFyICpwYXRoKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3RhdCBzdDsNCiAgICArDQogICAg
KwlpZiAoc3RhdChwYXRoLCAmc3QpKQ0KICAgICsJCXJldHVybiAwOw0KICAgICsNCiAgICArCXJl
dHVybiBTX0lTRElSKHN0LnN0X21vZGUpOw0KICAgICt9DQogICAgKw0KICAgICsvKiByZXR1cm4g
dHJ1ZSBpZiB0aGUgZ2l2ZW4gdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSwgZmFsc2Ugb3RoZXJ3aXNl
ICovDQogICAgK3N0YXRpYyBib29sIGlzX3NhbWUoY29uc3QgY2hhciAqZmlsZTEsIGNvbnN0IGNo
YXIgKmZpbGUyKQ0KICAgICt7DQogICAgKwlpbnQgZmQxLCBmZDI7DQogICAgKwlzdHJ1Y3Qgc3Rh
dCBzdDEsIHN0MjsNCiAgICArCXZvaWQgKm1hcDEsICptYXAyOw0KICAgICsJYm9vbCByZXQgPSBm
YWxzZTsNCiAgICArDQogICAgKwlmZDEgPSBvcGVuKGZpbGUxLCBPX1JET05MWSk7DQogICAgKwlp
ZiAoZmQxIDwgMCkNCiAgICArCQlyZXR1cm4gcmV0Ow0KICAgICsNCiAgICArCWZkMiA9IG9wZW4o
ZmlsZTIsIE9fUkRPTkxZKTsNCiAgICArCWlmIChmZDIgPCAwKQ0KICAgICsJCWdvdG8gY2xvc2Ux
Ow0KICAgICsNCiAgICArCXJldCA9IGZzdGF0KGZkMSwgJnN0MSk7DQogICAgKwlpZiAocmV0KQ0K
ICAgICsJCWdvdG8gY2xvc2UyOw0KICAgICsJcmV0ID0gZnN0YXQoZmQyLCAmc3QyKTsNCiAgICAr
CWlmIChyZXQpDQogICAgKwkJZ290byBjbG9zZTI7DQogICAgKw0KICAgICsJaWYgKHN0MS5zdF9z
aXplICE9IHN0Mi5zdF9zaXplKQ0KICAgICsJCWdvdG8gY2xvc2UyOw0KICAgICsNCiAgICArCW1h
cDEgPSBtbWFwKE5VTEwsIHN0MS5zdF9zaXplLCBQUk9UX1JFQUQsIE1BUF9QUklWQVRFLCBmZDEs
IDApOw0KICAgICsJaWYgKG1hcDEgPT0gTUFQX0ZBSUxFRCkNCiAgICArCQlnb3RvIGNsb3NlMjsN
CiAgICArDQogICAgKwltYXAyID0gbW1hcChOVUxMLCBzdDIuc3Rfc2l6ZSwgUFJPVF9SRUFELCBN
QVBfUFJJVkFURSwgZmQyLCAwKTsNCiAgICArCWlmIChtYXAyID09IE1BUF9GQUlMRUQpDQogICAg
KwkJZ290byBjbG9zZTI7DQogICAgKw0KICAgICsJaWYgKGJjbXAobWFwMSwgbWFwMiwgc3QxLnN0
X3NpemUpKQ0KICAgICsJCWdvdG8gY2xvc2UyOw0KICAgICsNCiAgICArCXJldCA9IHRydWU7DQog
ICAgK2Nsb3NlMjoNCiAgICArCWNsb3NlKGZkMik7DQogICAgK2Nsb3NlMToNCiAgICArCWNsb3Nl
KGZkMSk7DQogICAgKw0KICAgICsJcmV0dXJuIHJldDsNCiAgICArfQ0KICAgICsNCiAgICArLyoN
CiAgICArICogQ3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBnaXZlbiBwYXRoLg0K
ICAgICsgKg0KICAgICsgKiBGb3IgZXhhbXBsZSwgaWYgJ2luY2x1ZGUvY29uZmlnL2F1dG8uY29u
ZicgaXMgZ2l2ZW4sIGNyZWF0ZSAnaW5jbHVkZS9jb25maWcnLg0KICAgICsgKi8NCiAgICArc3Rh
dGljIGludCBtYWtlX3BhcmVudF9kaXIoY29uc3QgY2hhciAqcGF0aCkNCiAgICArew0KICAgICsJ
Y2hhciB0bXBbUEFUSF9NQVggKyAxXTsNCiAgICArCWNoYXIgKnA7DQogICAgKw0KICAgICsJc3Ry
bmNweSh0bXAsIHBhdGgsIHNpemVvZih0bXApKTsNCiAgICArCXRtcFtzaXplb2YodG1wKSAtIDFd
ID0gMDsNCiAgICArDQogICAgKwkvKiBSZW1vdmUgdGhlIGJhc2UgbmFtZS4gSnVzdCByZXR1cm4g
aWYgbm90aGluZyBpcyBsZWZ0ICovDQogICAgKwlwID0gc3RycmNocih0bXAsICcvJyk7DQogICAg
KwlpZiAoIXApDQogICAgKwkJcmV0dXJuIDA7DQogICAgKwkqKHAgKyAxKSA9IDA7DQogICAgKw0K
ICAgICsJLyogSnVzdCBpbiBjYXNlIGl0IGlzIGFuIGFic29sdXRlIHBhdGggKi8NCiAgICArCXAg
PSB0bXA7DQogICAgKwl3aGlsZSAoKnAgPT0gJy8nKQ0KICAgICsJCXArKzsNCiAgICArDQogICAg
Kwl3aGlsZSAoKHAgPSBzdHJjaHIocCwgJy8nKSkpIHsNCiAgICArCQkqcCA9IDA7DQogICAgKw0K
ICAgICsJCS8qIHNraXAgaWYgdGhlIGRpcmVjdG9yeSBleGlzdHMgKi8NCiAgICArCQlpZiAoIWlz
X2Rpcih0bXApICYmIG1rZGlyKHRtcCwgMDc1NSkpDQogICAgKwkJCXJldHVybiAtMTsNCiAgICAr
DQogICAgKwkJKnAgPSAnLyc7DQogICAgKwkJd2hpbGUgKCpwID09ICcvJykNCiAgICArCQkJcCsr
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtz
dGF0aWMgY2hhciBkZXBmaWxlX3BhdGhbUEFUSF9NQVhdOw0KICAgICtzdGF0aWMgc2l6ZV90IGRl
cGZpbGVfcHJlZml4X2xlbjsNCiAgICArDQogICAgKy8qIHRvdWNoIGRlcGZpbGUgZm9yIHN5bWJv
bCAnbmFtZScgKi8NCiAgICArc3RhdGljIGludCBjb25mX3RvdWNoX2RlcChjb25zdCBjaGFyICpu
YW1lKQ0KICAgICt7DQogICAgKwlpbnQgZmQsIHJldDsNCiAgICArCWNvbnN0IGNoYXIgKnM7DQog
ICAgKwljaGFyICpkLCBjOw0KICAgICsNCiAgICArCS8qIGNoZWNrIG92ZXJmbG93OiBwcmVmaXgg
KyBuYW1lICsgIi5oIiArICdcMCcgbXVzdCBmaXQgaW4gYnVmZmVyLiAqLw0KICAgICsJaWYgKGRl
cGZpbGVfcHJlZml4X2xlbiArIHN0cmxlbihuYW1lKSArIDMgPiBzaXplb2YoZGVwZmlsZV9wYXRo
KSkNCiAgICArCQlyZXR1cm4gLTE7DQogICAgKw0KICAgICsJZCA9IGRlcGZpbGVfcGF0aCArIGRl
cGZpbGVfcHJlZml4X2xlbjsNCiAgICArCXMgPSBuYW1lOw0KICAgICsNCiAgICArCXdoaWxlICgo
YyA9ICpzKyspKQ0KICAgICsJCSpkKysgPSAoYyA9PSAnXycpID8gJy8nIDogdG9sb3dlcihjKTsN
CiAgICArCXN0cmNweShkLCAiLmgiKTsNCiAgICArDQogICAgKwkvKiBBc3N1bWUgZGlyZWN0b3J5
IHBhdGggYWxyZWFkeSBleGlzdHMuICovDQogICAgKwlmZCA9IG9wZW4oZGVwZmlsZV9wYXRoLCBP
X1dST05MWSB8IE9fQ1JFQVQgfCBPX1RSVU5DLCAwNjQ0KTsNCiAgICArCWlmIChmZCA9PSAtMSkg
ew0KICAgICsJCWlmIChlcnJubyAhPSBFTk9FTlQpDQogICAgKwkJCXJldHVybiAtMTsNCiAgICAr
DQogICAgKwkJcmV0ID0gbWFrZV9wYXJlbnRfZGlyKGRlcGZpbGVfcGF0aCk7DQogICAgKwkJaWYg
KHJldCkNCiAgICArCQkJcmV0dXJuIHJldDsNCiAgICArDQogICAgKwkJLyogVHJ5IGl0IGFnYWlu
LiAqLw0KICAgICsJCWZkID0gb3BlbihkZXBmaWxlX3BhdGgsIE9fV1JPTkxZIHwgT19DUkVBVCB8
IE9fVFJVTkMsIDA2NDQpOw0KICAgICsJCWlmIChmZCA9PSAtMSkNCiAgICArCQkJcmV0dXJuIC0x
Ow0KICAgICsJfQ0KICAgICsJY2xvc2UoZmQpOw0KICAgICsNCiAgICArCXJldHVybiAwOw0KICAg
ICt9DQogICAgKw0KICAgICtzdHJ1Y3QgY29uZl9wcmludGVyIHsNCiAgICArCXZvaWQgKCpwcmlu
dF9zeW1ib2wpKEZJTEUgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICosIHZvaWQgKik7
DQogICAgKwl2b2lkICgqcHJpbnRfY29tbWVudCkoRklMRSAqLCBjb25zdCBjaGFyICosIHZvaWQg
Kik7DQogICAgK307DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3Qg
Y2hhciAqZm10LCAuLi4pDQogICAgKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEs
IDIpKSk7DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX21lc3NhZ2UoY29uc3QgY2hhciAq
Zm10LCAuLi4pDQogICAgKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7
DQogICAgKw0KICAgICtzdGF0aWMgY29uc3QgY2hhciAqY29uZl9maWxlbmFtZTsNCiAgICArc3Rh
dGljIGludCBjb25mX2xpbmVubywgY29uZl93YXJuaW5nczsNCiAgICArDQogICAgK2NvbnN0IGNo
YXIgY29uZl9kZWZuYW1lW10gPSAiYXJjaC8kKEFSQ0gpL2RlZmNvbmZpZyI7DQogICAgKw0KICAg
ICtzdGF0aWMgdm9pZCBjb25mX3dhcm5pbmcoY29uc3QgY2hhciAqZm10LCAuLi4pDQogICAgK3sN
CiAgICArCXZhX2xpc3QgYXA7DQogICAgKwl2YV9zdGFydChhcCwgZm10KTsNCiAgICArCWZwcmlu
dGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgY29uZl9maWxlbmFtZSwgY29uZl9saW5lbm8p
Ow0KICAgICsJdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsNCiAgICArCWZwcmludGYoc3RkZXJy
LCAiXG4iKTsNCiAgICArCXZhX2VuZChhcCk7DQogICAgKwljb25mX3dhcm5pbmdzKys7DQogICAg
K30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZfZGVmYXVsdF9tZXNzYWdlX2NhbGxiYWNr
KGNvbnN0IGNoYXIgKnMpDQogICAgK3sNCiAgICArCXByaW50ZigiI1xuIyAiKTsNCiAgICArCXBy
aW50ZigiJXMiLCBzKTsNCiAgICArCXByaW50ZigiXG4jXG4iKTsNCiAgICArfQ0KICAgICsNCiAg
ICArc3RhdGljIHZvaWQgKCpjb25mX21lc3NhZ2VfY2FsbGJhY2spKGNvbnN0IGNoYXIgKnMpID0N
CiAgICArCWNvbmZfZGVmYXVsdF9tZXNzYWdlX2NhbGxiYWNrOw0KICAgICt2b2lkIGNvbmZfc2V0
X21lc3NhZ2VfY2FsbGJhY2sodm9pZCAoKmZuKShjb25zdCBjaGFyICpzKSkNCiAgICArew0KICAg
ICsJY29uZl9tZXNzYWdlX2NhbGxiYWNrID0gZm47DQogICAgK30NCiAgICArDQogICAgK3N0YXRp
YyB2b2lkIGNvbmZfbWVzc2FnZShjb25zdCBjaGFyICpmbXQsIC4uLikNCiAgICArew0KICAgICsJ
dmFfbGlzdCBhcDsNCiAgICArCWNoYXIgYnVmWzQwOTZdOw0KICAgICsNCiAgICArCWlmICghY29u
Zl9tZXNzYWdlX2NhbGxiYWNrKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwl2YV9zdGFy
dChhcCwgZm10KTsNCiAgICArDQogICAgKwl2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10
LCBhcCk7DQogICAgKwljb25mX21lc3NhZ2VfY2FsbGJhY2soYnVmKTsNCiAgICArCXZhX2VuZChh
cCk7DQogICAgK30NCiAgICArDQogICAgK2NvbnN0IGNoYXIgKmNvbmZfZ2V0X2NvbmZpZ25hbWUo
dm9pZCkNCiAgICArew0KICAgICsJY2hhciAqbmFtZSA9IGdldGVudigiS0NPTkZJR19DT05GSUci
KTsNCiAgICArDQogICAgKwlyZXR1cm4gbmFtZSA/IG5hbWUgOiAiLmNvbmZpZyI7DQogICAgK30N
CiAgICArDQogICAgK3N0YXRpYyBjb25zdCBjaGFyICpjb25mX2dldF9hdXRvY29uZmlnX25hbWUo
dm9pZCkNCiAgICArew0KICAgICsJY2hhciAqbmFtZSA9IGdldGVudigiS0NPTkZJR19BVVRPQ09O
RklHIik7DQogICAgKw0KICAgICsJcmV0dXJuIG5hbWUgPyBuYW1lIDogImluY2x1ZGUvY29uZmln
L2F1dG8uY29uZiI7DQogICAgK30NCiAgICArDQogICAgK2NoYXIgKmNvbmZfZ2V0X2RlZmF1bHRf
Y29uZm5hbWUodm9pZCkNCiAgICArew0KICAgICsJc3RhdGljIGNoYXIgZnVsbG5hbWVbUEFUSF9N
QVgrMV07DQogICAgKwljaGFyICplbnYsICpuYW1lOw0KICAgICsNCiAgICArCW5hbWUgPSBleHBh
bmRfc3RyaW5nKGNvbmZfZGVmbmFtZSk7DQogICAgKwllbnYgPSBnZXRlbnYoU1JDVFJFRSk7DQog
ICAgKwlpZiAoZW52KSB7DQogICAgKwkJc25wcmludGYoZnVsbG5hbWUsIHNpemVvZihmdWxsbmFt
ZSksICIlcy8lcyIsIGVudiwgbmFtZSk7DQogICAgKwkJaWYgKGlzX3ByZXNlbnQoZnVsbG5hbWUp
KQ0KICAgICsJCQlyZXR1cm4gZnVsbG5hbWU7DQogICAgKwl9DQogICAgKwlyZXR1cm4gbmFtZTsN
CiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGludCBjb25mX3NldF9zeW1fdmFsKHN0cnVjdCBz
eW1ib2wgKnN5bSwgaW50IGRlZiwgaW50IGRlZl9mbGFncywgY2hhciAqcCkNCiAgICArew0KICAg
ICsJY2hhciAqcDI7DQogICAgKw0KICAgICsJc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICArCWNh
c2UgU19UUklTVEFURToNCiAgICArCQlpZiAocFswXSA9PSAnbScpIHsNCiAgICArCQkJc3ltLT5k
ZWZbZGVmXS50cmkgPSBtb2Q7DQogICAgKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJLyogZmFsbCB0aHJvdWdoICovDQogICAgKwlj
YXNlIFNfQk9PTEVBTjoNCiAgICArCQlpZiAocFswXSA9PSAneScpIHsNCiAgICArCQkJc3ltLT5k
ZWZbZGVmXS50cmkgPSB5ZXM7DQogICAgKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJaWYgKHBbMF0gPT0gJ24nKSB7DQogICAgKwkJ
CXN5bS0+ZGVmW2RlZl0udHJpID0gbm87DQogICAgKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdz
Ow0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJaWYgKGRlZiAhPSBTX0RFRl9BVVRP
KQ0KICAgICsJCQljb25mX3dhcm5pbmcoInN5bWJvbCB2YWx1ZSAnJXMnIGludmFsaWQgZm9yICVz
IiwNCiAgICArCQkJCSAgICAgcCwgc3ltLT5uYW1lKTsNCiAgICArCQlyZXR1cm4gMTsNCiAgICAr
CWNhc2UgU19TVFJJTkc6DQogICAgKwkJaWYgKCpwKysgIT0gJyInKQ0KICAgICsJCQlicmVhazsN
CiAgICArCQlmb3IgKHAyID0gcDsgKHAyID0gc3RycGJyayhwMiwgIlwiXFwiKSk7IHAyKyspIHsN
CiAgICArCQkJaWYgKCpwMiA9PSAnIicpIHsNCiAgICArCQkJCSpwMiA9IDA7DQogICAgKwkJCQli
cmVhazsNCiAgICArCQkJfQ0KICAgICsJCQltZW1tb3ZlKHAyLCBwMiArIDEsIHN0cmxlbihwMikp
Ow0KICAgICsJCX0NCiAgICArCQlpZiAoIXAyKSB7DQogICAgKwkJCWlmIChkZWYgIT0gU19ERUZf
QVVUTykNCiAgICArCQkJCWNvbmZfd2FybmluZygiaW52YWxpZCBzdHJpbmcgZm91bmQiKTsNCiAg
ICArCQkJcmV0dXJuIDE7DQogICAgKwkJfQ0KICAgICsJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAg
ICsJY2FzZSBTX0lOVDoNCiAgICArCWNhc2UgU19IRVg6DQogICAgKwkJaWYgKHN5bV9zdHJpbmdf
dmFsaWQoc3ltLCBwKSkgew0KICAgICsJCQlzeW0tPmRlZltkZWZdLnZhbCA9IHhzdHJkdXAocCk7
DQogICAgKwkJCXN5bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAgICsJCX0gZWxzZSB7DQogICAg
KwkJCWlmIChkZWYgIT0gU19ERUZfQVVUTykNCiAgICArCQkJCWNvbmZfd2FybmluZygic3ltYm9s
IHZhbHVlICclcycgaW52YWxpZCBmb3IgJXMiLA0KICAgICsJCQkJCSAgICAgcCwgc3ltLT5uYW1l
KTsNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAgICsJZGVm
YXVsdDoNCiAgICArCQk7DQogICAgKwl9DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsN
CiAgICArI2RlZmluZSBMSU5FX0dST1dUSCAxNg0KICAgICtzdGF0aWMgaW50IGFkZF9ieXRlKGlu
dCBjLCBjaGFyICoqbGluZXB0ciwgc2l6ZV90IHNsZW4sIHNpemVfdCAqbikNCiAgICArew0KICAg
ICsJY2hhciAqbmxpbmU7DQogICAgKwlzaXplX3QgbmV3X3NpemUgPSBzbGVuICsgMTsNCiAgICAr
CWlmIChuZXdfc2l6ZSA+ICpuKSB7DQogICAgKwkJbmV3X3NpemUgKz0gTElORV9HUk9XVEggLSAx
Ow0KICAgICsJCW5ld19zaXplICo9IDI7DQogICAgKwkJbmxpbmUgPSB4cmVhbGxvYygqbGluZXB0
ciwgbmV3X3NpemUpOw0KICAgICsJCWlmICghbmxpbmUpDQogICAgKwkJCXJldHVybiAtMTsNCiAg
ICArDQogICAgKwkJKmxpbmVwdHIgPSBubGluZTsNCiAgICArCQkqbiA9IG5ld19zaXplOw0KICAg
ICsJfQ0KICAgICsNCiAgICArCSgqbGluZXB0cilbc2xlbl0gPSBjOw0KICAgICsNCiAgICArCXJl
dHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgc3NpemVfdCBjb21wYXRfZ2V0bGlu
ZShjaGFyICoqbGluZXB0ciwgc2l6ZV90ICpuLCBGSUxFICpzdHJlYW0pDQogICAgK3sNCiAgICAr
CWNoYXIgKmxpbmUgPSAqbGluZXB0cjsNCiAgICArCXNpemVfdCBzbGVuID0gMDsNCiAgICArDQog
ICAgKwlmb3IgKDs7KSB7DQogICAgKwkJaW50IGMgPSBnZXRjKHN0cmVhbSk7DQogICAgKw0KICAg
ICsJCXN3aXRjaCAoYykgew0KICAgICsJCWNhc2UgJ1xuJzoNCiAgICArCQkJaWYgKGFkZF9ieXRl
KGMsICZsaW5lLCBzbGVuLCBuKSA8IDApDQogICAgKwkJCQlnb3RvIGVfb3V0Ow0KICAgICsJCQlz
bGVuKys7DQogICAgKwkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgICsJCWNhc2UgRU9GOg0KICAg
ICsJCQlpZiAoYWRkX2J5dGUoJ1wwJywgJmxpbmUsIHNsZW4sIG4pIDwgMCkNCiAgICArCQkJCWdv
dG8gZV9vdXQ7DQogICAgKwkJCSpsaW5lcHRyID0gbGluZTsNCiAgICArCQkJaWYgKHNsZW4gPT0g
MCkNCiAgICArCQkJCXJldHVybiAtMTsNCiAgICArCQkJcmV0dXJuIHNsZW47DQogICAgKwkJZGVm
YXVsdDoNCiAgICArCQkJaWYgKGFkZF9ieXRlKGMsICZsaW5lLCBzbGVuLCBuKSA8IDApDQogICAg
KwkJCQlnb3RvIGVfb3V0Ow0KICAgICsJCQlzbGVuKys7DQogICAgKwkJfQ0KICAgICsJfQ0KICAg
ICsNCiAgICArZV9vdXQ6DQogICAgKwlsaW5lW3NsZW4tMV0gPSAnXDAnOw0KICAgICsJKmxpbmVw
dHIgPSBsaW5lOw0KICAgICsJcmV0dXJuIC0xOw0KICAgICt9DQogICAgKw0KICAgICtpbnQgY29u
Zl9yZWFkX3NpbXBsZShjb25zdCBjaGFyICpuYW1lLCBpbnQgZGVmKQ0KICAgICt7DQogICAgKwlG
SUxFICppbiA9IE5VTEw7DQogICAgKwljaGFyICAgKmxpbmUgPSBOVUxMOw0KICAgICsJc2l6ZV90
ICBsaW5lX2FzaXplID0gMDsNCiAgICArCWNoYXIgKnAsICpwMjsNCiAgICArCXN0cnVjdCBzeW1i
b2wgKnN5bTsNCiAgICArCWludCBpLCBkZWZfZmxhZ3M7DQogICAgKw0KICAgICsJaWYgKG5hbWUp
IHsNCiAgICArCQlpbiA9IHpjb25mX2ZvcGVuKG5hbWUpOw0KICAgICsJfSBlbHNlIHsNCiAgICAr
CQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKw0KICAgICsJCW5hbWUgPSBjb25mX2dldF9j
b25maWduYW1lKCk7DQogICAgKwkJaW4gPSB6Y29uZl9mb3BlbihuYW1lKTsNCiAgICArCQlpZiAo
aW4pDQogICAgKwkJCWdvdG8gbG9hZDsNCiAgICArCQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsN
CiAgICArCQlpZiAoIXN5bV9kZWZjb25maWdfbGlzdCkNCiAgICArCQkJcmV0dXJuIDE7DQogICAg
Kw0KICAgICsJCWZvcl9hbGxfZGVmYXVsdHMoc3ltX2RlZmNvbmZpZ19saXN0LCBwcm9wKSB7DQog
ICAgKwkJCWlmIChleHByX2NhbGNfdmFsdWUocHJvcC0+dmlzaWJsZS5leHByKSA9PSBubyB8fA0K
ICAgICsJCQkgICAgcHJvcC0+ZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICArCQkJCWNvbnRp
bnVlOw0KICAgICsJCQlzeW1fY2FsY192YWx1ZShwcm9wLT5leHByLT5sZWZ0LnN5bSk7DQogICAg
KwkJCW5hbWUgPSBzeW1fZ2V0X3N0cmluZ192YWx1ZShwcm9wLT5leHByLT5sZWZ0LnN5bSk7DQog
ICAgKwkJCWluID0gemNvbmZfZm9wZW4obmFtZSk7DQogICAgKwkJCWlmIChpbikgew0KICAgICsJ
CQkJY29uZl9tZXNzYWdlKCJ1c2luZyBkZWZhdWx0cyBmb3VuZCBpbiAlcyIsDQogICAgKwkJCQkJ
IG5hbWUpOw0KICAgICsJCQkJZ290byBsb2FkOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJ
fQ0KICAgICsJaWYgKCFpbikNCiAgICArCQlyZXR1cm4gMTsNCiAgICArDQogICAgK2xvYWQ6DQog
ICAgKwljb25mX2ZpbGVuYW1lID0gbmFtZTsNCiAgICArCWNvbmZfbGluZW5vID0gMDsNCiAgICAr
CWNvbmZfd2FybmluZ3MgPSAwOw0KICAgICsNCiAgICArCWRlZl9mbGFncyA9IFNZTUJPTF9ERUYg
PDwgZGVmOw0KICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgICsJCXN5bS0+Zmxh
Z3MgfD0gU1lNQk9MX0NIQU5HRUQ7DQogICAgKwkJc3ltLT5mbGFncyAmPSB+KGRlZl9mbGFnc3xT
WU1CT0xfVkFMSUQpOw0KICAgICsJCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpDQogICAgKwkJCXN5
bS0+ZmxhZ3MgfD0gZGVmX2ZsYWdzOw0KICAgICsJCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAg
KwkJY2FzZSBTX0lOVDoNCiAgICArCQljYXNlIFNfSEVYOg0KICAgICsJCWNhc2UgU19TVFJJTkc6
DQogICAgKwkJCWlmIChzeW0tPmRlZltkZWZdLnZhbCkNCiAgICArCQkJCWZyZWUoc3ltLT5kZWZb
ZGVmXS52YWwpOw0KICAgICsJCQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICArCQlkZWZhdWx0Og0K
ICAgICsJCQlzeW0tPmRlZltkZWZdLnZhbCA9IE5VTEw7DQogICAgKwkJCXN5bS0+ZGVmW2RlZl0u
dHJpID0gbm87DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCXdoaWxlIChjb21wYXRf
Z2V0bGluZSgmbGluZSwgJmxpbmVfYXNpemUsIGluKSAhPSAtMSkgew0KICAgICsJCWNvbmZfbGlu
ZW5vKys7DQogICAgKwkJc3ltID0gTlVMTDsNCiAgICArCQlpZiAobGluZVswXSA9PSAnIycpIHsN
CiAgICArCQkJaWYgKG1lbWNtcChsaW5lICsgMiwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSkN
CiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQlwID0gc3RyY2hyKGxpbmUgKyAyICsgc3RybGVu
KENPTkZJR18pLCAnICcpOw0KICAgICsJCQlpZiAoIXApDQogICAgKwkJCQljb250aW51ZTsNCiAg
ICArCQkJKnArKyA9IDA7DQogICAgKwkJCWlmIChzdHJuY21wKHAsICJpcyBub3Qgc2V0IiwgMTAp
KQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWlmIChkZWYgPT0gU19ERUZfVVNFUikgew0K
ICAgICsJCQkJc3ltID0gc3ltX2ZpbmQobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXykpOw0KICAg
ICsJCQkJaWYgKCFzeW0pIHsNCiAgICArCQkJCQlzeW1fYWRkX2NoYW5nZV9jb3VudCgxKTsNCiAg
ICArCQkJCQljb250aW51ZTsNCiAgICArCQkJCX0NCiAgICArCQkJfSBlbHNlIHsNCiAgICArCQkJ
CXN5bSA9IHN5bV9sb29rdXAobGluZSArIDIgKyBzdHJsZW4oQ09ORklHXyksIDApOw0KICAgICsJ
CQkJaWYgKHN5bS0+dHlwZSA9PSBTX1VOS05PV04pDQogICAgKwkJCQkJc3ltLT50eXBlID0gU19C
T09MRUFOOw0KICAgICsJCQl9DQogICAgKwkJCWlmIChzeW0tPmZsYWdzICYgZGVmX2ZsYWdzKSB7
DQogICAgKwkJCQljb25mX3dhcm5pbmcoIm92ZXJyaWRlOiByZWFzc2lnbmluZyB0byBzeW1ib2wg
JXMiLCBzeW0tPm5hbWUpOw0KICAgICsJCQl9DQogICAgKwkJCXN3aXRjaCAoc3ltLT50eXBlKSB7
DQogICAgKwkJCWNhc2UgU19CT09MRUFOOg0KICAgICsJCQljYXNlIFNfVFJJU1RBVEU6DQogICAg
KwkJCQlzeW0tPmRlZltkZWZdLnRyaSA9IG5vOw0KICAgICsJCQkJc3ltLT5mbGFncyB8PSBkZWZf
ZmxhZ3M7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJZGVmYXVsdDoNCiAgICArCQkJCTsNCiAg
ICArCQkJfQ0KICAgICsJCX0gZWxzZSBpZiAobWVtY21wKGxpbmUsIENPTkZJR18sIHN0cmxlbihD
T05GSUdfKSkgPT0gMCkgew0KICAgICsJCQlwID0gc3RyY2hyKGxpbmUgKyBzdHJsZW4oQ09ORklH
XyksICc9Jyk7DQogICAgKwkJCWlmICghcCkNCiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQkq
cCsrID0gMDsNCiAgICArCQkJcDIgPSBzdHJjaHIocCwgJ1xuJyk7DQogICAgKwkJCWlmIChwMikg
ew0KICAgICsJCQkJKnAyLS0gPSAwOw0KICAgICsJCQkJaWYgKCpwMiA9PSAnXHInKQ0KICAgICsJ
CQkJCSpwMiA9IDA7DQogICAgKwkJCX0NCiAgICArDQogICAgKwkJCXN5bSA9IHN5bV9maW5kKGxp
bmUgKyBzdHJsZW4oQ09ORklHXykpOw0KICAgICsJCQlpZiAoIXN5bSkgew0KICAgICsJCQkJaWYg
KGRlZiA9PSBTX0RFRl9BVVRPKQ0KICAgICsJCQkJCS8qDQogICAgKwkJCQkJICogUmVhZGluZyBm
cm9tIGluY2x1ZGUvY29uZmlnL2F1dG8uY29uZg0KICAgICsJCQkJCSAqIElmIENPTkZJR19GT08g
cHJldmlvdXNseSBleGlzdGVkIGluDQogICAgKwkJCQkJICogYXV0by5jb25mIGJ1dCBpdCBpcyBt
aXNzaW5nIG5vdywNCiAgICArCQkJCQkgKiBpbmNsdWRlL2NvbmZpZy9mb28uaCBtdXN0IGJlIHRv
dWNoZWQuDQogICAgKwkJCQkJICovDQogICAgKwkJCQkJY29uZl90b3VjaF9kZXAobGluZSArIHN0
cmxlbihDT05GSUdfKSk7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJc3ltX2FkZF9jaGFuZ2Vf
Y291bnQoMSk7DQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJfQ0KICAgICsNCiAgICArCQkJ
aWYgKHN5bS0+ZmxhZ3MgJiBkZWZfZmxhZ3MpIHsNCiAgICArCQkJCWNvbmZfd2FybmluZygib3Zl
cnJpZGU6IHJlYXNzaWduaW5nIHRvIHN5bWJvbCAlcyIsIHN5bS0+bmFtZSk7DQogICAgKwkJCX0N
CiAgICArCQkJaWYgKGNvbmZfc2V0X3N5bV92YWwoc3ltLCBkZWYsIGRlZl9mbGFncywgcCkpDQog
ICAgKwkJCQljb250aW51ZTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlpZiAobGluZVswXSAh
PSAnXHInICYmIGxpbmVbMF0gIT0gJ1xuJykNCiAgICArCQkJCWNvbmZfd2FybmluZygidW5leHBl
Y3RlZCBkYXRhOiAlLipzIiwNCiAgICArCQkJCQkgICAgIChpbnQpc3RyY3NwbihsaW5lLCAiXHJc
biIpLCBsaW5lKTsNCiAgICArDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCX0NCiAgICArDQog
ICAgKwkJaWYgKHN5bSAmJiBzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsNCiAgICArCQkJc3Ry
dWN0IHN5bWJvbCAqY3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0p
KTsNCiAgICArCQkJc3dpdGNoIChzeW0tPmRlZltkZWZdLnRyaSkgew0KICAgICsJCQljYXNlIG5v
Og0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgbW9kOg0KICAgICsJCQkJaWYgKGNzLT5k
ZWZbZGVmXS50cmkgPT0geWVzKSB7DQogICAgKwkJCQkJY29uZl93YXJuaW5nKCIlcyBjcmVhdGVz
IGluY29uc2lzdGVudCBjaG9pY2Ugc3RhdGUiLCBzeW0tPm5hbWUpOw0KICAgICsJCQkJCWNzLT5m
bGFncyAmPSB+ZGVmX2ZsYWdzOw0KICAgICsJCQkJfQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJ
CWNhc2UgeWVzOg0KICAgICsJCQkJaWYgKGNzLT5kZWZbZGVmXS50cmkgIT0gbm8pDQogICAgKwkJ
CQkJY29uZl93YXJuaW5nKCJvdmVycmlkZTogJXMgY2hhbmdlcyBjaG9pY2Ugc3RhdGUiLCBzeW0t
Pm5hbWUpOw0KICAgICsJCQkJY3MtPmRlZltkZWZdLnZhbCA9IHN5bTsNCiAgICArCQkJCWJyZWFr
Ow0KICAgICsJCQl9DQogICAgKwkJCWNzLT5kZWZbZGVmXS50cmkgPSBFWFBSX09SKGNzLT5kZWZb
ZGVmXS50cmksIHN5bS0+ZGVmW2RlZl0udHJpKTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKwlm
cmVlKGxpbmUpOw0KICAgICsJZmNsb3NlKGluKTsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQog
ICAgKw0KICAgICtpbnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgK3sNCiAgICAr
CXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICArCWludCBjb25mX3Vuc2F2ZWQgPSAwOw0KICAgICsJ
aW50IGk7DQogICAgKw0KICAgICsJc3ltX3NldF9jaGFuZ2VfY291bnQoMCk7DQogICAgKw0KICAg
ICsJaWYgKGNvbmZfcmVhZF9zaW1wbGUobmFtZSwgU19ERUZfVVNFUikpIHsNCiAgICArCQlzeW1f
Y2FsY192YWx1ZShtb2R1bGVzX3N5bSk7DQogICAgKwkJcmV0dXJuIDE7DQogICAgKwl9DQogICAg
Kw0KICAgICsJc3ltX2NhbGNfdmFsdWUobW9kdWxlc19zeW0pOw0KICAgICsNCiAgICArCWZvcl9h
bGxfc3ltYm9scyhpLCBzeW0pIHsNCiAgICArCQlzeW1fY2FsY192YWx1ZShzeW0pOw0KICAgICsJ
CWlmIChzeW1faXNfY2hvaWNlKHN5bSkgfHwgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfTk9fV1JJVEUp
KQ0KICAgICsJCQljb250aW51ZTsNCiAgICArCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmIChz
eW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkgew0KICAgICsJCQkvKiBjaGVjayB0aGF0IGNhbGN1
bGF0ZWQgdmFsdWUgYWdyZWVzIHdpdGggc2F2ZWQgdmFsdWUgKi8NCiAgICArCQkJc3dpdGNoIChz
eW0tPnR5cGUpIHsNCiAgICArCQkJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJCWNhc2UgU19UUklT
VEFURToNCiAgICArCQkJCWlmIChzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgIT0gc3ltX2dldF90
cmlzdGF0ZV92YWx1ZShzeW0pKQ0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQkJaWYgKCFzeW1f
aXNfY2hvaWNlKHN5bSkpDQogICAgKwkJCQkJY29udGludWU7DQogICAgKwkJCQkvKiBmYWxsIHRo
cm91Z2ggKi8NCiAgICArCQkJZGVmYXVsdDoNCiAgICArCQkJCWlmICghc3RyY21wKHN5bS0+Y3Vy
ci52YWwsIHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbCkpDQogICAgKwkJCQkJY29udGludWU7DQog
ICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCX0gZWxzZSBpZiAoIXN5bV9oYXNfdmFs
dWUoc3ltKSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQ0KICAgICsJCQkvKiBubyBw
cmV2aW91cyB2YWx1ZSBhbmQgbm90IHNhdmVkICovDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJ
CWNvbmZfdW5zYXZlZCsrOw0KICAgICsJCS8qIG1heWJlIHByaW50IHZhbHVlIGluIHZlcmJvc2Ug
bW9kZS4uLiAqLw0KICAgICsJfQ0KICAgICsNCiAgICArCWZvcl9hbGxfc3ltYm9scyhpLCBzeW0p
IHsNCiAgICArCQlpZiAoc3ltX2hhc192YWx1ZShzeW0pICYmICFzeW1faXNfY2hvaWNlX3ZhbHVl
KHN5bSkpIHsNCiAgICArCQkJLyogUmVzZXQgdmFsdWVzIG9mIGdlbmVyYXRlcyB2YWx1ZXMsIHNv
IHRoZXknbGwgYXBwZWFyDQogICAgKwkJCSAqIGFzIG5ldywgaWYgdGhleSBzaG91bGQgYmVjb21l
IHZpc2libGUsIGJ1dCB0aGF0DQogICAgKwkJCSAqIGRvZXNuJ3QgcXVpdGUgd29yayBpZiB0aGUg
S2NvbmZpZyBhbmQgdGhlIHNhdmVkDQogICAgKwkJCSAqIGNvbmZpZ3VyYXRpb24gZGlzYWdyZWUu
DQogICAgKwkJCSAqLw0KICAgICsJCQlpZiAoc3ltLT52aXNpYmxlID09IG5vICYmICFjb25mX3Vu
c2F2ZWQpDQogICAgKwkJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfREVGX1VTRVI7DQogICAgKwkJ
CXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwkJCWNhc2UgU19TVFJJTkc6DQogICAgKwkJCWNh
c2UgU19JTlQ6DQogICAgKwkJCWNhc2UgU19IRVg6DQogICAgKwkJCQkvKiBSZXNldCBhIHN0cmlu
ZyB2YWx1ZSBpZiBpdCdzIG91dCBvZiByYW5nZSAqLw0KICAgICsJCQkJaWYgKHN5bV9zdHJpbmdf
d2l0aGluX3JhbmdlKHN5bSwgc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsKSkNCiAgICArCQkJCQli
cmVhazsNCiAgICArCQkJCXN5bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUR8U1lNQk9MX0RFRl9V
U0VSKTsNCiAgICArCQkJCWNvbmZfdW5zYXZlZCsrOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJ
CWRlZmF1bHQ6DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCX0N
CiAgICArDQogICAgKwlzeW1fYWRkX2NoYW5nZV9jb3VudChjb25mX3dhcm5pbmdzIHx8IGNvbmZf
dW5zYXZlZCk7DQogICAgKw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKy8q
DQogICAgKyAqIEtjb25maWcgY29uZmlndXJhdGlvbiBwcmludGVyDQogICAgKyAqDQogICAgKyAq
IFRoaXMgcHJpbnRlciBpcyB1c2VkIHdoZW4gZ2VuZXJhdGluZyB0aGUgcmVzdWx0aW5nIGNvbmZp
Z3VyYXRpb24gYWZ0ZXINCiAgICArICoga2NvbmZpZyBpbnZvY2F0aW9uIGFuZCBgZGVmY29uZmln
JyBmaWxlcy4gVW5zZXQgc3ltYm9sIG1pZ2h0IGJlIG9taXR0ZWQgYnkNCiAgICArICogcGFzc2lu
ZyBhIG5vbi1OVUxMIGFyZ3VtZW50IHRvIHRoZSBwcmludGVyLg0KICAgICsgKg0KICAgICsgKi8N
CiAgICArc3RhdGljIHZvaWQNCiAgICAra2NvbmZpZ19wcmludF9zeW1ib2woRklMRSAqZnAsIHN0
cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykNCiAgICArew0K
ICAgICsNCiAgICArCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoN
CiAgICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQlpZiAoKnZhbHVlID09ICduJykgew0KICAg
ICsJCQlib29sIHNraXBfdW5zZXQgPSAoYXJnICE9IE5VTEwpOw0KICAgICsNCiAgICArCQkJaWYg
KCFza2lwX3Vuc2V0KQ0KICAgICsJCQkJZnByaW50ZihmcCwgIiMgJXMlcyBpcyBub3Qgc2V0XG4i
LA0KICAgICsJCQkJICAgIENPTkZJR18sIHN5bS0+bmFtZSk7DQogICAgKwkJCXJldHVybjsNCiAg
ICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCWJyZWFrOw0KICAg
ICsJfQ0KICAgICsNCiAgICArCWZwcmludGYoZnAsICIlcyVzPSVzXG4iLCBDT05GSUdfLCBzeW0t
Pm5hbWUsIHZhbHVlKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQNCiAgICAra2Nv
bmZpZ19wcmludF9jb21tZW50KEZJTEUgKmZwLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAqYXJn
KQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICpwID0gdmFsdWU7DQogICAgKwlzaXplX3QgbDsN
CiAgICArDQogICAgKwlmb3IgKDs7KSB7DQogICAgKwkJbCA9IHN0cmNzcG4ocCwgIlxuIik7DQog
ICAgKwkJZnByaW50ZihmcCwgIiMiKTsNCiAgICArCQlpZiAobCkgew0KICAgICsJCQlmcHJpbnRm
KGZwLCAiICIpOw0KICAgICsJCQl4ZndyaXRlKHAsIGwsIDEsIGZwKTsNCiAgICArCQkJcCArPSBs
Ow0KICAgICsJCX0NCiAgICArCQlmcHJpbnRmKGZwLCAiXG4iKTsNCiAgICArCQlpZiAoKnArKyA9
PSAnXDAnKQ0KICAgICsJCQlicmVhazsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArc3Rh
dGljIHN0cnVjdCBjb25mX3ByaW50ZXIga2NvbmZpZ19wcmludGVyX2NiID0NCiAgICArew0KICAg
ICsJLnByaW50X3N5bWJvbCA9IGtjb25maWdfcHJpbnRfc3ltYm9sLA0KICAgICsJLnByaW50X2Nv
bW1lbnQgPSBrY29uZmlnX3ByaW50X2NvbW1lbnQsDQogICAgK307DQogICAgKw0KICAgICsvKg0K
ICAgICsgKiBIZWFkZXIgcHJpbnRlcg0KICAgICsgKg0KICAgICsgKiBUaGlzIHByaW50ZXIgaXMg
dXNlZCB3aGVuIGdlbmVyYXRpbmcgdGhlIGBpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oJyBm
aWxlLg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQNCiAgICAraGVhZGVyX3ByaW50X3N5bWJv
bChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICp2YWx1ZSwgdm9pZCAq
YXJnKQ0KICAgICt7DQogICAgKw0KICAgICsJc3dpdGNoIChzeW0tPnR5cGUpIHsNCiAgICArCWNh
c2UgU19CT09MRUFOOg0KICAgICsJY2FzZSBTX1RSSVNUQVRFOiB7DQogICAgKwkJY29uc3QgY2hh
ciAqc3VmZml4ID0gIiI7DQogICAgKw0KICAgICsJCXN3aXRjaCAoKnZhbHVlKSB7DQogICAgKwkJ
Y2FzZSAnbic6DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJ20nOg0KICAgICsJCQlzdWZm
aXggPSAiX01PRFVMRSI7DQogICAgKwkJCS8qIGZhbGwgdGhyb3VnaCAqLw0KICAgICsJCWRlZmF1
bHQ6DQogICAgKwkJCWZwcmludGYoZnAsICIjZGVmaW5lICVzJXMlcyAxXG4iLA0KICAgICsJCQkg
ICAgQ09ORklHXywgc3ltLT5uYW1lLCBzdWZmaXgpOw0KICAgICsJCX0NCiAgICArCQlicmVhazsN
CiAgICArCX0NCiAgICArCWNhc2UgU19IRVg6IHsNCiAgICArCQljb25zdCBjaGFyICpwcmVmaXgg
PSAiIjsNCiAgICArDQogICAgKwkJaWYgKHZhbHVlWzBdICE9ICcwJyB8fCAodmFsdWVbMV0gIT0g
J3gnICYmIHZhbHVlWzFdICE9ICdYJykpDQogICAgKwkJCXByZWZpeCA9ICIweCI7DQogICAgKwkJ
ZnByaW50ZihmcCwgIiNkZWZpbmUgJXMlcyAlcyVzXG4iLA0KICAgICsJCSAgICBDT05GSUdfLCBz
eW0tPm5hbWUsIHByZWZpeCwgdmFsdWUpOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJ
Y2FzZSBTX1NUUklORzoNCiAgICArCWNhc2UgU19JTlQ6DQogICAgKwkJZnByaW50ZihmcCwgIiNk
ZWZpbmUgJXMlcyAlc1xuIiwNCiAgICArCQkgICAgQ09ORklHXywgc3ltLT5uYW1lLCB2YWx1ZSk7
DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0K
ICAgICsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQNCiAgICAraGVhZGVyX3ByaW50
X2NvbW1lbnQoRklMRSAqZnAsIGNvbnN0IGNoYXIgKnZhbHVlLCB2b2lkICphcmcpDQogICAgK3sN
CiAgICArCWNvbnN0IGNoYXIgKnAgPSB2YWx1ZTsNCiAgICArCXNpemVfdCBsOw0KICAgICsNCiAg
ICArCWZwcmludGYoZnAsICIvKlxuIik7DQogICAgKwlmb3IgKDs7KSB7DQogICAgKwkJbCA9IHN0
cmNzcG4ocCwgIlxuIik7DQogICAgKwkJZnByaW50ZihmcCwgIiAqIik7DQogICAgKwkJaWYgKGwp
IHsNCiAgICArCQkJZnByaW50ZihmcCwgIiAiKTsNCiAgICArCQkJeGZ3cml0ZShwLCBsLCAxLCBm
cCk7DQogICAgKwkJCXAgKz0gbDsNCiAgICArCQl9DQogICAgKwkJZnByaW50ZihmcCwgIlxuIik7
DQogICAgKwkJaWYgKCpwKysgPT0gJ1wwJykNCiAgICArCQkJYnJlYWs7DQogICAgKwl9DQogICAg
KwlmcHJpbnRmKGZwLCAiICovXG4iKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVj
dCBjb25mX3ByaW50ZXIgaGVhZGVyX3ByaW50ZXJfY2IgPQ0KICAgICt7DQogICAgKwkucHJpbnRf
c3ltYm9sID0gaGVhZGVyX3ByaW50X3N5bWJvbCwNCiAgICArCS5wcmludF9jb21tZW50ID0gaGVh
ZGVyX3ByaW50X2NvbW1lbnQsDQogICAgK307DQogICAgKw0KICAgICsvKg0KICAgICsgKiBUcmlz
dGF0ZSBwcmludGVyDQogICAgKyAqDQogICAgKyAqIFRoaXMgcHJpbnRlciBpcyB1c2VkIHdoZW4g
Z2VuZXJhdGluZyB0aGUgYGluY2x1ZGUvY29uZmlnL3RyaXN0YXRlLmNvbmYnIGZpbGUuDQogICAg
KyAqLw0KICAgICtzdGF0aWMgdm9pZA0KICAgICt0cmlzdGF0ZV9wcmludF9zeW1ib2woRklMRSAq
ZnAsIHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqdmFsdWUsIHZvaWQgKmFyZykNCiAg
ICArew0KICAgICsNCiAgICArCWlmIChzeW0tPnR5cGUgPT0gU19UUklTVEFURSAmJiAqdmFsdWUg
IT0gJ24nKQ0KICAgICsJCWZwcmludGYoZnAsICIlcyVzPSVjXG4iLCBDT05GSUdfLCBzeW0tPm5h
bWUsIChjaGFyKXRvdXBwZXIoKnZhbHVlKSk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBz
dHJ1Y3QgY29uZl9wcmludGVyIHRyaXN0YXRlX3ByaW50ZXJfY2IgPQ0KICAgICt7DQogICAgKwku
cHJpbnRfc3ltYm9sID0gdHJpc3RhdGVfcHJpbnRfc3ltYm9sLA0KICAgICsJLnByaW50X2NvbW1l
bnQgPSBrY29uZmlnX3ByaW50X2NvbW1lbnQsDQogICAgK307DQogICAgKw0KICAgICtzdGF0aWMg
dm9pZCBjb25mX3dyaXRlX3N5bWJvbChGSUxFICpmcCwgc3RydWN0IHN5bWJvbCAqc3ltLA0KICAg
ICsJCQkgICAgICBzdHJ1Y3QgY29uZl9wcmludGVyICpwcmludGVyLCB2b2lkICpwcmludGVyX2Fy
ZykNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqc3RyOw0KICAgICsNCiAgICArCXN3aXRjaCAo
c3ltLT50eXBlKSB7DQogICAgKwljYXNlIFNfVU5LTk9XTjoNCiAgICArCQlicmVhazsNCiAgICAr
CWNhc2UgU19TVFJJTkc6DQogICAgKwkJc3RyID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsN
CiAgICArCQlzdHIgPSBzeW1fZXNjYXBlX3N0cmluZ192YWx1ZShzdHIpOw0KICAgICsJCXByaW50
ZXItPnByaW50X3N5bWJvbChmcCwgc3ltLCBzdHIsIHByaW50ZXJfYXJnKTsNCiAgICArCQlmcmVl
KCh2b2lkICopc3RyKTsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJc3Ry
ID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsNCiAgICArCQlwcmludGVyLT5wcmludF9zeW1i
b2woZnAsIHN5bSwgc3RyLCBwcmludGVyX2FyZyk7DQogICAgKwl9DQogICAgK30NCiAgICArDQog
ICAgK3N0YXRpYyB2b2lkDQogICAgK2NvbmZfd3JpdGVfaGVhZGluZyhGSUxFICpmcCwgc3RydWN0
IGNvbmZfcHJpbnRlciAqcHJpbnRlciwgdm9pZCAqcHJpbnRlcl9hcmcpDQogICAgK3sNCiAgICAr
CWNoYXIgYnVmWzI1Nl07DQogICAgKw0KICAgICsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwN
CiAgICArCSAgICAiXG4iDQogICAgKwkgICAgIkF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZpbGU7
IERPIE5PVCBFRElULlxuIg0KICAgICsJICAgICIlc1xuIiwNCiAgICArCSAgICByb290bWVudS5w
cm9tcHQtPnRleHQpOw0KICAgICsNCiAgICArCXByaW50ZXItPnByaW50X2NvbW1lbnQoZnAsIGJ1
ZiwgcHJpbnRlcl9hcmcpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBXcml0ZSBv
dXQgYSBtaW5pbWFsIGNvbmZpZy4NCiAgICArICogQWxsIHZhbHVlcyB0aGF0IGhhcyBkZWZhdWx0
IHZhbHVlcyBhcmUgc2tpcHBlZCBhcyB0aGlzIGlzIHJlZHVuZGFudC4NCiAgICArICovDQogICAg
K2ludCBjb25mX3dyaXRlX2RlZmNvbmZpZyhjb25zdCBjaGFyICpmaWxlbmFtZSkNCiAgICArew0K
ICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAg
KwlGSUxFICpvdXQ7DQogICAgKw0KICAgICsJb3V0ID0gZm9wZW4oZmlsZW5hbWUsICJ3Iik7DQog
ICAgKwlpZiAoIW91dCkNCiAgICArCQlyZXR1cm4gMTsNCiAgICArDQogICAgKwlzeW1fY2xlYXJf
YWxsX3ZhbGlkKCk7DQogICAgKw0KICAgICsJLyogVHJhdmVyc2UgYWxsIG1lbnVzIHRvIGZpbmQg
YWxsIHJlbGV2YW50IHN5bWJvbHMgKi8NCiAgICArCW1lbnUgPSByb290bWVudS5saXN0Ow0KICAg
ICsNCiAgICArCXdoaWxlIChtZW51ICE9IE5VTEwpDQogICAgKwl7DQogICAgKwkJc3ltID0gbWVu
dS0+c3ltOw0KICAgICsJCWlmIChzeW0gPT0gTlVMTCkgew0KICAgICsJCQlpZiAoIW1lbnVfaXNf
dmlzaWJsZShtZW51KSkNCiAgICArCQkJCWdvdG8gbmV4dF9tZW51Ow0KICAgICsJCX0gZWxzZSBp
ZiAoIXN5bV9pc19jaG9pY2Uoc3ltKSkgew0KICAgICsJCQlzeW1fY2FsY192YWx1ZShzeW0pOw0K
ICAgICsJCQlpZiAoIShzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSkNCiAgICArCQkJCWdvdG8g
bmV4dF9tZW51Ow0KICAgICsJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfV1JJVEU7DQogICAgKwkJ
CS8qIElmIHdlIGNhbm5vdCBjaGFuZ2UgdGhlIHN5bWJvbCAtIHNraXAgKi8NCiAgICArCQkJaWYg
KCFzeW1faXNfY2hhbmdhYmxlKHN5bSkpDQogICAgKwkJCQlnb3RvIG5leHRfbWVudTsNCiAgICAr
CQkJLyogSWYgc3ltYm9sIGVxdWFscyB0byBkZWZhdWx0IHZhbHVlIC0gc2tpcCAqLw0KICAgICsJ
CQlpZiAoc3RyY21wKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSksIHN5bV9nZXRfc3RyaW5nX2Rl
ZmF1bHQoc3ltKSkgPT0gMCkNCiAgICArCQkJCWdvdG8gbmV4dF9tZW51Ow0KICAgICsNCiAgICAr
CQkJLyoNCiAgICArCQkJICogSWYgc3ltYm9sIGlzIGEgY2hvaWNlIHZhbHVlIGFuZCBlcXVhbHMg
dG8gdGhlDQogICAgKwkJCSAqIGRlZmF1bHQgZm9yIGEgY2hvaWNlIC0gc2tpcC4NCiAgICArCQkJ
ICogQnV0IG9ubHkgaWYgdmFsdWUgaXMgYm9vbCBhbmQgZXF1YWwgdG8gInkiIGFuZA0KICAgICsJ
CQkgKiBjaG9pY2UgaXMgbm90ICJvcHRpb25hbCIuDQogICAgKwkJCSAqIChJZiBjaG9pY2UgaXMg
Im9wdGlvbmFsIiB0aGVuIGFsbCB2YWx1ZXMgY2FuIGJlICJuIikNCiAgICArCQkJICovDQogICAg
KwkJCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsNCiAgICArCQkJCXN0cnVjdCBzeW1i
b2wgKmNzOw0KICAgICsJCQkJc3RydWN0IHN5bWJvbCAqZHM7DQogICAgKw0KICAgICsJCQkJY3Mg
PSBwcm9wX2dldF9zeW1ib2woc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pKTsNCiAgICArCQkJCWRz
ID0gc3ltX2Nob2ljZV9kZWZhdWx0KGNzKTsNCiAgICArCQkJCWlmICghc3ltX2lzX29wdGlvbmFs
KGNzKSAmJiBzeW0gPT0gZHMpIHsNCiAgICArCQkJCQlpZiAoKHN5bS0+dHlwZSA9PSBTX0JPT0xF
QU4pICYmDQogICAgKwkJCQkJICAgIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PSB5ZXMp
DQogICAgKwkJCQkJCWdvdG8gbmV4dF9tZW51Ow0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAg
KwkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxM
KTsNCiAgICArCQl9DQogICAgK25leHRfbWVudToNCiAgICArCQlpZiAobWVudS0+bGlzdCAhPSBO
VUxMKSB7DQogICAgKwkJCW1lbnUgPSBtZW51LT5saXN0Ow0KICAgICsJCX0NCiAgICArCQllbHNl
IGlmIChtZW51LT5uZXh0ICE9IE5VTEwpIHsNCiAgICArCQkJbWVudSA9IG1lbnUtPm5leHQ7DQog
ICAgKwkJfSBlbHNlIHsNCiAgICArCQkJd2hpbGUgKChtZW51ID0gbWVudS0+cGFyZW50KSkgew0K
ICAgICsJCQkJaWYgKG1lbnUtPm5leHQgIT0gTlVMTCkgew0KICAgICsJCQkJCW1lbnUgPSBtZW51
LT5uZXh0Ow0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAgKwkJ
fQ0KICAgICsJfQ0KICAgICsJZmNsb3NlKG91dCk7DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0K
ICAgICsNCiAgICAraW50IGNvbmZfd3JpdGUoY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0KICAg
ICsJRklMRSAqb3V0Ow0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJc3RydWN0IG1l
bnUgKm1lbnU7DQogICAgKwljb25zdCBjaGFyICpzdHI7DQogICAgKwljaGFyIHRtcG5hbWVbUEFU
SF9NQVggKyAxXSwgb2xkbmFtZVtQQVRIX01BWCArIDFdOw0KICAgICsJY2hhciAqZW52Ow0KICAg
ICsJYm9vbCBuZWVkX25ld2xpbmUgPSBmYWxzZTsNCiAgICArDQogICAgKwlpZiAoIW5hbWUpDQog
ICAgKwkJbmFtZSA9IGNvbmZfZ2V0X2NvbmZpZ25hbWUoKTsNCiAgICArDQogICAgKwlpZiAoISpu
YW1lKSB7DQogICAgKwkJZnByaW50ZihzdGRlcnIsICJjb25maWcgbmFtZSBpcyBlbXB0eVxuIik7
DQogICAgKwkJcmV0dXJuIC0xOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmIChpc19kaXIobmFt
ZSkpIHsNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBJcyBhIGRpcmVjdG9yeVxuIiwgbmFt
ZSk7DQogICAgKwkJcmV0dXJuIC0xOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmIChtYWtlX3Bh
cmVudF9kaXIobmFtZSkpDQogICAgKwkJcmV0dXJuIC0xOw0KICAgICsNCiAgICArCWVudiA9IGdl
dGVudigiS0NPTkZJR19PVkVSV1JJVEVDT05GSUciKTsNCiAgICArCWlmIChlbnYgJiYgKmVudikg
ew0KICAgICsJCSp0bXBuYW1lID0gMDsNCiAgICArCQlvdXQgPSBmb3BlbihuYW1lLCAidyIpOw0K
ICAgICsJfSBlbHNlIHsNCiAgICArCQlzbnByaW50Zih0bXBuYW1lLCBzaXplb2YodG1wbmFtZSks
ICIlcy4lZC50bXAiLA0KICAgICsJCQkgbmFtZSwgKGludClnZXRwaWQoKSk7DQogICAgKwkJb3V0
ID0gZm9wZW4odG1wbmFtZSwgInciKTsNCiAgICArCX0NCiAgICArCWlmICghb3V0KQ0KICAgICsJ
CXJldHVybiAxOw0KICAgICsNCiAgICArCWNvbmZfd3JpdGVfaGVhZGluZyhvdXQsICZrY29uZmln
X3ByaW50ZXJfY2IsIE5VTEwpOw0KICAgICsNCiAgICArCWlmICghY29uZl9nZXRfY2hhbmdlZCgp
KQ0KICAgICsJCXN5bV9jbGVhcl9hbGxfdmFsaWQoKTsNCiAgICArDQogICAgKwltZW51ID0gcm9v
dG1lbnUubGlzdDsNCiAgICArCXdoaWxlIChtZW51KSB7DQogICAgKwkJc3ltID0gbWVudS0+c3lt
Ow0KICAgICsJCWlmICghc3ltKSB7DQogICAgKwkJCWlmICghbWVudV9pc192aXNpYmxlKG1lbnUp
KQ0KICAgICsJCQkJZ290byBuZXh0Ow0KICAgICsJCQlzdHIgPSBtZW51X2dldF9wcm9tcHQobWVu
dSk7DQogICAgKwkJCWZwcmludGYob3V0LCAiXG4iDQogICAgKwkJCQkgICAgICIjXG4iDQogICAg
KwkJCQkgICAgICIjICVzXG4iDQogICAgKwkJCQkgICAgICIjXG4iLCBzdHIpOw0KICAgICsJCQlu
ZWVkX25ld2xpbmUgPSBmYWxzZTsNCiAgICArCQl9IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZ
TUJPTF9DSE9JQ0UpKSB7DQogICAgKwkJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgKwkJCWlm
ICghKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV1JJVEUpKQ0KICAgICsJCQkJZ290byBuZXh0Ow0KICAg
ICsJCQlpZiAobmVlZF9uZXdsaW5lKSB7DQogICAgKwkJCQlmcHJpbnRmKG91dCwgIlxuIik7DQog
ICAgKwkJCQluZWVkX25ld2xpbmUgPSBmYWxzZTsNCiAgICArCQkJfQ0KICAgICsJCQlzeW0tPmZs
YWdzICY9IH5TWU1CT0xfV1JJVEU7DQogICAgKwkJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3lt
LCAma2NvbmZpZ19wcmludGVyX2NiLCBOVUxMKTsNCiAgICArCQl9DQogICAgKw0KICAgICtuZXh0
Og0KICAgICsJCWlmIChtZW51LT5saXN0KSB7DQogICAgKwkJCW1lbnUgPSBtZW51LT5saXN0Ow0K
ICAgICsJCQljb250aW51ZTsNCiAgICArCQl9DQogICAgKwkJaWYgKG1lbnUtPm5leHQpDQogICAg
KwkJCW1lbnUgPSBtZW51LT5uZXh0Ow0KICAgICsJCWVsc2Ugd2hpbGUgKChtZW51ID0gbWVudS0+
cGFyZW50KSkgew0KICAgICsJCQlpZiAoIW1lbnUtPnN5bSAmJiBtZW51X2lzX3Zpc2libGUobWVu
dSkgJiYNCiAgICArCQkJICAgIG1lbnUgIT0gJnJvb3RtZW51KSB7DQogICAgKwkJCQlzdHIgPSBt
ZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgKwkJCQlmcHJpbnRmKG91dCwgIiMgZW5kIG9mICVz
XG4iLCBzdHIpOw0KICAgICsJCQkJbmVlZF9uZXdsaW5lID0gdHJ1ZTsNCiAgICArCQkJfQ0KICAg
ICsJCQlpZiAobWVudS0+bmV4dCkgew0KICAgICsJCQkJbWVudSA9IG1lbnUtPm5leHQ7DQogICAg
KwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWZjbG9zZShv
dXQpOw0KICAgICsNCiAgICArCWlmICgqdG1wbmFtZSkgew0KICAgICsJCWlmIChpc19zYW1lKG5h
bWUsIHRtcG5hbWUpKSB7DQogICAgKwkJCWNvbmZfbWVzc2FnZSgiTm8gY2hhbmdlIHRvICVzIiwg
bmFtZSk7DQogICAgKwkJCXVubGluayh0bXBuYW1lKTsNCiAgICArCQkJc3ltX3NldF9jaGFuZ2Vf
Y291bnQoMCk7DQogICAgKwkJCXJldHVybiAwOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJc25w
cmludGYob2xkbmFtZSwgc2l6ZW9mKG9sZG5hbWUpLCAiJXMub2xkIiwgbmFtZSk7DQogICAgKwkJ
cmVuYW1lKG5hbWUsIG9sZG5hbWUpOw0KICAgICsJCWlmIChyZW5hbWUodG1wbmFtZSwgbmFtZSkp
DQogICAgKwkJCXJldHVybiAxOw0KICAgICsJfQ0KICAgICsNCiAgICArCWNvbmZfbWVzc2FnZSgi
Y29uZmlndXJhdGlvbiB3cml0dGVuIHRvICVzIiwgbmFtZSk7DQogICAgKw0KICAgICsJc3ltX3Nl
dF9jaGFuZ2VfY291bnQoMCk7DQogICAgKw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICAr
DQogICAgKy8qIHdyaXRlIGEgZGVwZW5kZW5jeSBmaWxlIGFzIHVzZWQgYnkga2J1aWxkIHRvIHRy
YWNrIGRlcGVuZGVuY2llcyAqLw0KICAgICtzdGF0aWMgaW50IGNvbmZfd3JpdGVfZGVwKGNvbnN0
IGNoYXIgKm5hbWUpDQogICAgK3sNCiAgICArCXN0cnVjdCBmaWxlICpmaWxlOw0KICAgICsJRklM
RSAqb3V0Ow0KICAgICsNCiAgICArCW91dCA9IGZvcGVuKCIuLmNvbmZpZy50bXAiLCAidyIpOw0K
ICAgICsJaWYgKCFvdXQpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKwlmcHJpbnRmKG91dCwgImRl
cHNfY29uZmlnIDo9IFxcXG4iKTsNCiAgICArCWZvciAoZmlsZSA9IGZpbGVfbGlzdDsgZmlsZTsg
ZmlsZSA9IGZpbGUtPm5leHQpIHsNCiAgICArCQlpZiAoZmlsZS0+bmV4dCkNCiAgICArCQkJZnBy
aW50ZihvdXQsICJcdCVzIFxcXG4iLCBmaWxlLT5uYW1lKTsNCiAgICArCQllbHNlDQogICAgKwkJ
CWZwcmludGYob3V0LCAiXHQlc1xuIiwgZmlsZS0+bmFtZSk7DQogICAgKwl9DQogICAgKwlmcHJp
bnRmKG91dCwgIlxuJXM6IFxcXG4iDQogICAgKwkJICAgICAiXHQkKGRlcHNfY29uZmlnKVxuXG4i
LCBjb25mX2dldF9hdXRvY29uZmlnX25hbWUoKSk7DQogICAgKw0KICAgICsJZW52X3dyaXRlX2Rl
cChvdXQsIGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpKTsNCiAgICArDQogICAgKwlmcHJpbnRm
KG91dCwgIlxuJChkZXBzX2NvbmZpZyk6IDtcbiIpOw0KICAgICsJZmNsb3NlKG91dCk7DQogICAg
Kw0KICAgICsJaWYgKG1ha2VfcGFyZW50X2RpcihuYW1lKSkNCiAgICArCQlyZXR1cm4gMTsNCiAg
ICArCXJlbmFtZSgiLi5jb25maWcudG1wIiwgbmFtZSk7DQogICAgKwlyZXR1cm4gMDsNCiAgICAr
fQ0KICAgICsNCiAgICArc3RhdGljIGludCBjb25mX3RvdWNoX2RlcHModm9pZCkNCiAgICArew0K
ICAgICsJY29uc3QgY2hhciAqbmFtZTsNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAr
CWludCByZXMsIGk7DQogICAgKw0KICAgICsJc3RyY3B5KGRlcGZpbGVfcGF0aCwgImluY2x1ZGUv
Y29uZmlnLyIpOw0KICAgICsJZGVwZmlsZV9wcmVmaXhfbGVuID0gc3RybGVuKGRlcGZpbGVfcGF0
aCk7DQogICAgKw0KICAgICsJbmFtZSA9IGNvbmZfZ2V0X2F1dG9jb25maWdfbmFtZSgpOw0KICAg
ICsJY29uZl9yZWFkX3NpbXBsZShuYW1lLCBTX0RFRl9BVVRPKTsNCiAgICArCXN5bV9jYWxjX3Zh
bHVlKG1vZHVsZXNfc3ltKTsNCiAgICArDQogICAgKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7
DQogICAgKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICArCQlpZiAoKHN5bS0+ZmxhZ3MgJiBT
WU1CT0xfTk9fV1JJVEUpIHx8ICFzeW0tPm5hbWUpDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJ
CWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSB7DQogICAgKwkJCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX0RFRl9BVVRPKSB7DQogICAgKwkJCQkvKg0KICAgICsJCQkJICogc3ltYm9sIGhh
cyBvbGQgYW5kIG5ldyB2YWx1ZSwNCiAgICArCQkJCSAqIHNvIGNvbXBhcmUgdGhlbS4uLg0KICAg
ICsJCQkJICovDQogICAgKwkJCQlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJCQkJY2FzZSBT
X0JPT0xFQU46DQogICAgKwkJCQljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJCQkJaWYgKHN5bV9n
ZXRfdHJpc3RhdGVfdmFsdWUoc3ltKSA9PQ0KICAgICsJCQkJCSAgICBzeW0tPmRlZltTX0RFRl9B
VVRPXS50cmkpDQogICAgKwkJCQkJCWNvbnRpbnVlOw0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJ
CQkJY2FzZSBTX1NUUklORzoNCiAgICArCQkJCWNhc2UgU19IRVg6DQogICAgKwkJCQljYXNlIFNf
SU5UOg0KICAgICsJCQkJCWlmICghc3RyY21wKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSksDQog
ICAgKwkJCQkJCSAgICBzeW0tPmRlZltTX0RFRl9BVVRPXS52YWwpKQ0KICAgICsJCQkJCQljb250
aW51ZTsNCiAgICArCQkJCQlicmVhazsNCiAgICArCQkJCWRlZmF1bHQ6DQogICAgKwkJCQkJYnJl
YWs7DQogICAgKwkJCQl9DQogICAgKwkJCX0gZWxzZSB7DQogICAgKwkJCQkvKg0KICAgICsJCQkJ
ICogSWYgdGhlcmUgaXMgbm8gb2xkIHZhbHVlLCBvbmx5ICdubycgKHVuc2V0KQ0KICAgICsJCQkJ
ICogaXMgYWxsb3dlZCBhcyBuZXcgdmFsdWUuDQogICAgKwkJCQkgKi8NCiAgICArCQkJCXN3aXRj
aCAoc3ltLT50eXBlKSB7DQogICAgKwkJCQljYXNlIFNfQk9PTEVBTjoNCiAgICArCQkJCWNhc2Ug
U19UUklTVEFURToNCiAgICArCQkJCQlpZiAoc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pID09
IG5vKQ0KICAgICsJCQkJCQljb250aW51ZTsNCiAgICArCQkJCQlicmVhazsNCiAgICArCQkJCWRl
ZmF1bHQ6DQogICAgKwkJCQkJYnJlYWs7DQogICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICArCQl9
IGVsc2UgaWYgKCEoc3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfQVVUTykpDQogICAgKwkJCS8qIFRo
ZXJlIGlzIG5laXRoZXIgYW4gb2xkIG5vciBhIG5ldyB2YWx1ZS4gKi8NCiAgICArCQkJY29udGlu
dWU7DQogICAgKwkJLyogZWxzZQ0KICAgICsJCSAqCVRoZXJlIGlzIGFuIG9sZCB2YWx1ZSwgYnV0
IG5vIG5ldyB2YWx1ZSAoJ25vJyAodW5zZXQpDQogICAgKwkJICoJaXNuJ3Qgc2F2ZWQgaW4gYXV0
by5jb25mLCBzbyB0aGUgb2xkIHZhbHVlIGlzIGFsd2F5cw0KICAgICsJCSAqCWRpZmZlcmVudCBm
cm9tICdubycpLg0KICAgICsJCSAqLw0KICAgICsNCiAgICArCQlyZXMgPSBjb25mX3RvdWNoX2Rl
cChzeW0tPm5hbWUpOw0KICAgICsJCWlmIChyZXMpDQogICAgKwkJCXJldHVybiByZXM7DQogICAg
Kwl9DQogICAgKw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK2ludCBjb25m
X3dyaXRlX2F1dG9jb25mKGludCBvdmVyd3JpdGUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1i
b2wgKnN5bTsNCiAgICArCWNvbnN0IGNoYXIgKm5hbWU7DQogICAgKwljb25zdCBjaGFyICphdXRv
Y29uZl9uYW1lID0gY29uZl9nZXRfYXV0b2NvbmZpZ19uYW1lKCk7DQogICAgKwlGSUxFICpvdXQs
ICp0cmlzdGF0ZSwgKm91dF9oOw0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJaWYgKCFvdmVy
d3JpdGUgJiYgaXNfcHJlc2VudChhdXRvY29uZl9uYW1lKSkNCiAgICArCQlyZXR1cm4gMDsNCiAg
ICArDQogICAgKwlzeW1fY2xlYXJfYWxsX3ZhbGlkKCk7DQogICAgKw0KICAgICsJY29uZl93cml0
ZV9kZXAoImluY2x1ZGUvY29uZmlnL2F1dG8uY29uZi5jbWQiKTsNCiAgICArDQogICAgKwlpZiAo
Y29uZl90b3VjaF9kZXBzKCkpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKw0KICAgICsJb3V0ID0g
Zm9wZW4oIi50bXBjb25maWciLCAidyIpOw0KICAgICsJaWYgKCFvdXQpDQogICAgKwkJcmV0dXJu
IDE7DQogICAgKw0KICAgICsJdHJpc3RhdGUgPSBmb3BlbigiLnRtcGNvbmZpZ190cmlzdGF0ZSIs
ICJ3Iik7DQogICAgKwlpZiAoIXRyaXN0YXRlKSB7DQogICAgKwkJZmNsb3NlKG91dCk7DQogICAg
KwkJcmV0dXJuIDE7DQogICAgKwl9DQogICAgKw0KICAgICsJb3V0X2ggPSBmb3BlbigiLnRtcGNv
bmZpZy5oIiwgInciKTsNCiAgICArCWlmICghb3V0X2gpIHsNCiAgICArCQlmY2xvc2Uob3V0KTsN
CiAgICArCQlmY2xvc2UodHJpc3RhdGUpOw0KICAgICsJCXJldHVybiAxOw0KICAgICsJfQ0KICAg
ICsNCiAgICArCWNvbmZfd3JpdGVfaGVhZGluZyhvdXQsICZrY29uZmlnX3ByaW50ZXJfY2IsIE5V
TEwpOw0KICAgICsNCiAgICArCWNvbmZfd3JpdGVfaGVhZGluZyh0cmlzdGF0ZSwgJnRyaXN0YXRl
X3ByaW50ZXJfY2IsIE5VTEwpOw0KICAgICsNCiAgICArCWNvbmZfd3JpdGVfaGVhZGluZyhvdXRf
aCwgJmhlYWRlcl9wcmludGVyX2NiLCBOVUxMKTsNCiAgICArDQogICAgKwlmb3JfYWxsX3N5bWJv
bHMoaSwgc3ltKSB7DQogICAgKwkJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICArCQlpZiAoIShz
eW0tPmZsYWdzICYgU1lNQk9MX1dSSVRFKSB8fCAhc3ltLT5uYW1lKQ0KICAgICsJCQljb250aW51
ZTsNCiAgICArDQogICAgKwkJLyogd3JpdGUgc3ltYm9sIHRvIGF1dG8uY29uZiwgdHJpc3RhdGUg
YW5kIGhlYWRlciBmaWxlcyAqLw0KICAgICsJCWNvbmZfd3JpdGVfc3ltYm9sKG91dCwgc3ltLCAm
a2NvbmZpZ19wcmludGVyX2NiLCAodm9pZCAqKTEpOw0KICAgICsNCiAgICArCQljb25mX3dyaXRl
X3N5bWJvbCh0cmlzdGF0ZSwgc3ltLCAmdHJpc3RhdGVfcHJpbnRlcl9jYiwgKHZvaWQgKikxKTsN
CiAgICArDQogICAgKwkJY29uZl93cml0ZV9zeW1ib2wob3V0X2gsIHN5bSwgJmhlYWRlcl9wcmlu
dGVyX2NiLCBOVUxMKTsNCiAgICArCX0NCiAgICArCWZjbG9zZShvdXQpOw0KICAgICsJZmNsb3Nl
KHRyaXN0YXRlKTsNCiAgICArCWZjbG9zZShvdXRfaCk7DQogICAgKw0KICAgICsJbmFtZSA9IGdl
dGVudigiS0NPTkZJR19BVVRPSEVBREVSIik7DQogICAgKwlpZiAoIW5hbWUpDQogICAgKwkJbmFt
ZSA9ICJpbmNsdWRlL2dlbmVyYXRlZC9hdXRvY29uZi5oIjsNCiAgICArCWlmIChtYWtlX3BhcmVu
dF9kaXIobmFtZSkpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKwlpZiAocmVuYW1lKCIudG1wY29u
ZmlnLmgiLCBuYW1lKSkNCiAgICArCQlyZXR1cm4gMTsNCiAgICArDQogICAgKwluYW1lID0gZ2V0
ZW52KCJLQ09ORklHX1RSSVNUQVRFIik7DQogICAgKwlpZiAoIW5hbWUpDQogICAgKwkJbmFtZSA9
ICJpbmNsdWRlL2NvbmZpZy90cmlzdGF0ZS5jb25mIjsNCiAgICArCWlmIChtYWtlX3BhcmVudF9k
aXIobmFtZSkpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKwlpZiAocmVuYW1lKCIudG1wY29uZmln
X3RyaXN0YXRlIiwgbmFtZSkpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKw0KICAgICsJaWYgKG1h
a2VfcGFyZW50X2RpcihhdXRvY29uZl9uYW1lKSkNCiAgICArCQlyZXR1cm4gMTsNCiAgICArCS8q
DQogICAgKwkgKiBUaGlzIG11c3QgYmUgdGhlIGxhc3Qgc3RlcCwga2J1aWxkIGhhcyBhIGRlcGVu
ZGVuY3kgb24gYXV0by5jb25mDQogICAgKwkgKiBhbmQgdGhpcyBtYXJrcyB0aGUgc3VjY2Vzc2Z1
bCBjb21wbGV0aW9uIG9mIHRoZSBwcmV2aW91cyBzdGVwcy4NCiAgICArCSAqLw0KICAgICsJaWYg
KHJlbmFtZSgiLnRtcGNvbmZpZyIsIGF1dG9jb25mX25hbWUpKQ0KICAgICsJCXJldHVybiAxOw0K
ICAgICsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW50IHN5
bV9jaGFuZ2VfY291bnQ7DQogICAgK3N0YXRpYyB2b2lkICgqY29uZl9jaGFuZ2VkX2NhbGxiYWNr
KSh2b2lkKTsNCiAgICArDQogICAgK3ZvaWQgc3ltX3NldF9jaGFuZ2VfY291bnQoaW50IGNvdW50
KQ0KICAgICt7DQogICAgKwlpbnQgX3N5bV9jaGFuZ2VfY291bnQgPSBzeW1fY2hhbmdlX2NvdW50
Ow0KICAgICsJc3ltX2NoYW5nZV9jb3VudCA9IGNvdW50Ow0KICAgICsJaWYgKGNvbmZfY2hhbmdl
ZF9jYWxsYmFjayAmJg0KICAgICsJICAgIChib29sKV9zeW1fY2hhbmdlX2NvdW50ICE9IChib29s
KWNvdW50KQ0KICAgICsJCWNvbmZfY2hhbmdlZF9jYWxsYmFjaygpOw0KICAgICt9DQogICAgKw0K
ICAgICt2b2lkIHN5bV9hZGRfY2hhbmdlX2NvdW50KGludCBjb3VudCkNCiAgICArew0KICAgICsJ
c3ltX3NldF9jaGFuZ2VfY291bnQoY291bnQgKyBzeW1fY2hhbmdlX2NvdW50KTsNCiAgICArfQ0K
ICAgICsNCiAgICArYm9vbCBjb25mX2dldF9jaGFuZ2VkKHZvaWQpDQogICAgK3sNCiAgICArCXJl
dHVybiBzeW1fY2hhbmdlX2NvdW50Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIGNvbmZfc2V0
X2NoYW5nZWRfY2FsbGJhY2sodm9pZCAoKmZuKSh2b2lkKSkNCiAgICArew0KICAgICsJY29uZl9j
aGFuZ2VkX2NhbGxiYWNrID0gZm47DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBib29sIHJh
bmRvbWl6ZV9jaG9pY2VfdmFsdWVzKHN0cnVjdCBzeW1ib2wgKmNzeW0pDQogICAgK3sNCiAgICAr
CXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICAr
CXN0cnVjdCBleHByICplOw0KICAgICsJaW50IGNudCwgZGVmOw0KICAgICsNCiAgICArCS8qDQog
ICAgKwkgKiBJZiBjaG9pY2UgaXMgbW9kIHRoZW4gd2UgbWF5IGhhdmUgbW9yZSBpdGVtcyBzZWxl
Y3RlZA0KICAgICsJICogYW5kIGlmIG5vIHRoZW4gbm8tb25lLg0KICAgICsJICogSW4gYm90aCBj
YXNlcyBzdG9wLg0KICAgICsJICovDQogICAgKwlpZiAoY3N5bS0+Y3Vyci50cmkgIT0geWVzKQ0K
ICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArDQogICAgKwlwcm9wID0gc3ltX2dldF9jaG9pY2Vf
cHJvcChjc3ltKTsNCiAgICArDQogICAgKwkvKiBjb3VudCBlbnRyaWVzIGluIGNob2ljZSBibG9j
ayAqLw0KICAgICsJY250ID0gMDsNCiAgICArCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+
ZXhwciwgZSwgc3ltKQ0KICAgICsJCWNudCsrOw0KICAgICsNCiAgICArCS8qDQogICAgKwkgKiBm
aW5kIGEgcmFuZG9tIHZhbHVlIGFuZCBzZXQgaXQgdG8geWVzLA0KICAgICsJICogc2V0IHRoZSBy
ZXN0IHRvIG5vIHNvIHdlIGhhdmUgb25seSBvbmUgc2V0DQogICAgKwkgKi8NCiAgICArCWRlZiA9
IChyYW5kKCkgJSBjbnQpOw0KICAgICsNCiAgICArCWNudCA9IDA7DQogICAgKwlleHByX2xpc3Rf
Zm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgew0KICAgICsJCWlmIChkZWYgPT0gY250
KyspIHsNCiAgICArCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0geWVzOw0KICAgICsJCQlj
c3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gc3ltOw0KICAgICsJCX0NCiAgICArCQllbHNlIHsN
CiAgICArCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJpID0gbm87DQogICAgKwkJfQ0KICAgICsJ
CXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAgICsJCS8qIGNsZWFyIFZBTElEIHRv
IGdldCB2YWx1ZSBjYWxjdWxhdGVkICovDQogICAgKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9MX1ZB
TElEOw0KICAgICsJfQ0KICAgICsJY3N5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VSOw0KICAg
ICsJLyogY2xlYXIgVkFMSUQgdG8gZ2V0IHZhbHVlIGNhbGN1bGF0ZWQgKi8NCiAgICArCWNzeW0t
PmZsYWdzICY9IH4oU1lNQk9MX1ZBTElEKTsNCiAgICArDQogICAgKwlyZXR1cm4gdHJ1ZTsNCiAg
ICArfQ0KICAgICsNCiAgICArdm9pZCBzZXRfYWxsX2Nob2ljZV92YWx1ZXMoc3RydWN0IHN5bWJv
bCAqY3N5bSkNCiAgICArew0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3Ry
dWN0IHN5bWJvbCAqc3ltOw0KICAgICsJc3RydWN0IGV4cHIgKmU7DQogICAgKw0KICAgICsJcHJv
cCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3N5bSk7DQogICAgKw0KICAgICsJLyoNCiAgICArCSAq
IFNldCBhbGwgbm9uLWFzc2luZ2VkIGNob2ljZSB2YWx1ZXMgdG8gbm8NCiAgICArCSAqLw0KICAg
ICsJZXhwcl9saXN0X2Zvcl9lYWNoX3N5bShwcm9wLT5leHByLCBlLCBzeW0pIHsNCiAgICArCQlp
ZiAoIXN5bV9oYXNfdmFsdWUoc3ltKSkNCiAgICArCQkJc3ltLT5kZWZbU19ERUZfVVNFUl0udHJp
ID0gbm87DQogICAgKwl9DQogICAgKwljc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQog
ICAgKwkvKiBjbGVhciBWQUxJRCB0byBnZXQgdmFsdWUgY2FsY3VsYXRlZCAqLw0KICAgICsJY3N5
bS0+ZmxhZ3MgJj0gfihTWU1CT0xfVkFMSUQgfCBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVF
Uyk7DQogICAgK30NCiAgICArDQogICAgK2Jvb2wgY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGVu
dW0gY29uZl9kZWZfbW9kZSBtb2RlKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW0s
ICpjc3ltOw0KICAgICsJaW50IGksIGNudCwgcGJ5LCBwdHksIHB0bTsJLyogcGJ5OiBwcm9iYWJp
bGl0eSBvZiBib29sICAgICA9IHkNCiAgICArCQkJCQkgKiBwdHk6IHByb2JhYmlsaXR5IG9mIHRy
aXN0YXRlID0geQ0KICAgICsJCQkJCSAqIHB0bTogcHJvYmFiaWxpdHkgb2YgdHJpc3RhdGUgPSBt
DQogICAgKwkJCQkJICovDQogICAgKw0KICAgICsJcGJ5ID0gNTA7IHB0eSA9IHB0bSA9IDMzOyAv
KiBjYW4ndCBnbyBhcyB0aGUgZGVmYXVsdCBpbiBzd2l0Y2gtY2FzZQ0KICAgICsJCQkJICAgKiBi
ZWxvdywgb3RoZXJ3aXNlIGdjYyB3aGluZXMgYWJvdXQNCiAgICArCQkJCSAgICogLVdtYXliZS11
bmluaXRpYWxpemVkICovDQogICAgKwlpZiAobW9kZSA9PSBkZWZfcmFuZG9tKSB7DQogICAgKwkJ
aW50IG4sIHBbM107DQogICAgKwkJY2hhciAqZW52ID0gZ2V0ZW52KCJLQ09ORklHX1BST0JBQklM
SVRZIik7DQogICAgKwkJbiA9IDA7DQogICAgKwkJd2hpbGUoIGVudiAmJiAqZW52ICkgew0KICAg
ICsJCQljaGFyICplbmRwOw0KICAgICsJCQlpbnQgdG1wID0gc3RydG9sKCBlbnYsICZlbmRwLCAx
MCApOw0KICAgICsJCQlpZiggdG1wID49IDAgJiYgdG1wIDw9IDEwMCApIHsNCiAgICArCQkJCXBb
bisrXSA9IHRtcDsNCiAgICArCQkJfSBlbHNlIHsNCiAgICArCQkJCWVycm5vID0gRVJBTkdFOw0K
ICAgICsJCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIgKTsNCiAgICArCQkJCWV4aXQo
IDEgKTsNCiAgICArCQkJfQ0KICAgICsJCQllbnYgPSAoKmVuZHAgPT0gJzonKSA/IGVuZHArMSA6
IGVuZHA7DQogICAgKwkJCWlmKCBuID49MyApIHsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9
DQogICAgKwkJfQ0KICAgICsJCXN3aXRjaCggbiApIHsNCiAgICArCQljYXNlIDE6DQogICAgKwkJ
CXBieSA9IHBbMF07IHB0bSA9IHBieS8yOyBwdHkgPSBwYnktcHRtOw0KICAgICsJCQlicmVhazsN
CiAgICArCQljYXNlIDI6DQogICAgKwkJCXB0eSA9IHBbMF07IHB0bSA9IHBbMV07IHBieSA9IHB0
eSArIHB0bTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAzOg0KICAgICsJCQlwYnkgPSBw
WzBdOyBwdHkgPSBwWzFdOyBwdG0gPSBwWzJdOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQog
ICAgKw0KICAgICsJCWlmKCBwdHkrcHRtID4gMTAwICkgew0KICAgICsJCQllcnJubyA9IEVSQU5H
RTsNCiAgICArCQkJcGVycm9yKCAiS0NPTkZJR19QUk9CQUJJTElUWSIgKTsNCiAgICArCQkJZXhp
dCggMSApOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWJvb2wgaGFzX2NoYW5nZWQgPSBmYWxz
ZTsNCiAgICArDQogICAgKwlmb3JfYWxsX3N5bWJvbHMoaSwgc3ltKSB7DQogICAgKwkJaWYgKHN5
bV9oYXNfdmFsdWUoc3ltKSB8fCAoc3ltLT5mbGFncyAmIFNZTUJPTF9WQUxJRCkpDQogICAgKwkJ
CWNvbnRpbnVlOw0KICAgICsJCXN3aXRjaCAoc3ltX2dldF90eXBlKHN5bSkpIHsNCiAgICArCQlj
YXNlIFNfQk9PTEVBTjoNCiAgICArCQljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJCWhhc19jaGFu
Z2VkID0gdHJ1ZTsNCiAgICArCQkJc3dpdGNoIChtb2RlKSB7DQogICAgKwkJCWNhc2UgZGVmX3ll
czoNCiAgICArCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsNCiAgICArCQkJCWJy
ZWFrOw0KICAgICsJCQljYXNlIGRlZl9tb2Q6DQogICAgKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VS
XS50cmkgPSBtb2Q7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSBkZWZfbm86DQogICAg
KwkJCQlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9BTExOT0NPTkZJR19ZKQ0KICAgICsJCQkJCXN5
bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsNCiAgICArCQkJCWVsc2UNCiAgICArCQkJCQlz
eW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQlj
YXNlIGRlZl9yYW5kb206DQogICAgKwkJCQlzeW0tPmRlZltTX0RFRl9VU0VSXS50cmkgPSBubzsN
CiAgICArCQkJCWNudCA9IHJhbmQoKSAlIDEwMDsNCiAgICArCQkJCWlmIChzeW0tPnR5cGUgPT0g
U19UUklTVEFURSkgew0KICAgICsJCQkJCWlmIChjbnQgPCBwdHkpDQogICAgKwkJCQkJCXN5bS0+
ZGVmW1NfREVGX1VTRVJdLnRyaSA9IHllczsNCiAgICArCQkJCQllbHNlIGlmIChjbnQgPCAocHR5
K3B0bSkpDQogICAgKwkJCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJdLnRyaSA9IG1vZDsNCiAgICAr
CQkJCX0gZWxzZSBpZiAoY250IDwgcGJ5KQ0KICAgICsJCQkJCXN5bS0+ZGVmW1NfREVGX1VTRVJd
LnRyaSA9IHllczsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQlkZWZhdWx0Og0KICAgICsJCQkJ
Y29udGludWU7DQogICAgKwkJCX0NCiAgICArCQkJaWYgKCEoc3ltX2lzX2Nob2ljZShzeW0pICYm
IG1vZGUgPT0gZGVmX3JhbmRvbSkpDQogICAgKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJPTF9ERUZf
VVNFUjsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJYnJlYWs7DQog
ICAgKwkJfQ0KICAgICsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW1fY2xlYXJfYWxsX3ZhbGlk
KCk7DQogICAgKw0KICAgICsJLyoNCiAgICArCSAqIFdlIGhhdmUgZGlmZmVyZW50IHR5cGUgb2Yg
Y2hvaWNlIGJsb2Nrcy4NCiAgICArCSAqIElmIGN1cnIudHJpIGVxdWFscyB0byBtb2QgdGhlbiB3
ZSBjYW4gc2VsZWN0IHNldmVyYWwNCiAgICArCSAqIGNob2ljZSBzeW1ib2xzIGluIG9uZSBibG9j
ay4NCiAgICArCSAqIEluIHRoaXMgY2FzZSB3ZSBkbyBub3RoaW5nLg0KICAgICsJICogSWYgY3Vy
ci50cmkgZXF1YWxzIHllcyB0aGVuIG9ubHkgb25lIHN5bWJvbCBjYW4gYmUNCiAgICArCSAqIHNl
bGVjdGVkIGluIGEgY2hvaWNlIGJsb2NrIGFuZCB3ZSBzZXQgaXQgdG8geWVzLA0KICAgICsJICog
YW5kIHRoZSByZXN0IHRvIG5vLg0KICAgICsJICovDQogICAgKwlpZiAobW9kZSAhPSBkZWZfcmFu
ZG9tKSB7DQogICAgKwkJZm9yX2FsbF9zeW1ib2xzKGksIGNzeW0pIHsNCiAgICArCQkJaWYgKChz
eW1faXNfY2hvaWNlKGNzeW0pICYmICFzeW1faGFzX3ZhbHVlKGNzeW0pKSB8fA0KICAgICsJCQkg
ICAgc3ltX2lzX2Nob2ljZV92YWx1ZShjc3ltKSkNCiAgICArCQkJCWNzeW0tPmZsYWdzIHw9IFNZ
TUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQog
ICAgKwlmb3JfYWxsX3N5bWJvbHMoaSwgY3N5bSkgew0KICAgICsJCWlmIChzeW1faGFzX3ZhbHVl
KGNzeW0pIHx8ICFzeW1faXNfY2hvaWNlKGNzeW0pKQ0KICAgICsJCQljb250aW51ZTsNCiAgICAr
DQogICAgKwkJc3ltX2NhbGNfdmFsdWUoY3N5bSk7DQogICAgKwkJaWYgKG1vZGUgPT0gZGVmX3Jh
bmRvbSkNCiAgICArCQkJaGFzX2NoYW5nZWQgPSByYW5kb21pemVfY2hvaWNlX3ZhbHVlcyhjc3lt
KTsNCiAgICArCQllbHNlIHsNCiAgICArCQkJc2V0X2FsbF9jaG9pY2VfdmFsdWVzKGNzeW0pOw0K
ICAgICsJCQloYXNfY2hhbmdlZCA9IHRydWU7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAg
ICArCXJldHVybiBoYXNfY2hhbmdlZDsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0
L2tjb25maWcvZXhwci5jIGIvc3VwcG9ydC9rY29uZmlnL2V4cHIuYw0KICAgIG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNzdmZmZmMw0KICAgIC0tLSAvZGV2L251bGwN
CiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvZXhwci5jDQogICAgQEAgLTAsMCArMSwxMjk3IEBA
DQogICAgKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKy8qDQogICAg
KyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9y
Zz4NCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICArI2luY2x1
ZGUgPGVycm5vLmg+DQogICAgKyNpbmNsdWRlIDxzdGRpby5oPg0KICAgICsjaW5jbHVkZSA8c3Rk
bGliLmg+DQogICAgKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICArDQogICAgKyNpbmNsdWRlICJs
a2MuaCINCiAgICArDQogICAgKyNkZWZpbmUgREVCVUdfRVhQUgkwDQogICAgKw0KICAgICtzdGF0
aWMgaW50IGV4cHJfZXEoc3RydWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOw0KICAgICtz
dGF0aWMgc3RydWN0IGV4cHIgKmV4cHJfZWxpbWluYXRlX3luKHN0cnVjdCBleHByICplKTsNCiAg
ICArDQogICAgK3N0cnVjdCBleHByICpleHByX2FsbG9jX3N5bWJvbChzdHJ1Y3Qgc3ltYm9sICpz
eW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUp
KTsNCiAgICArCWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICArCWUtPmxlZnQuc3ltID0gc3ltOw0K
ICAgICsJcmV0dXJuIGU7DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBleHByICpleHByX2Fs
bG9jX29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpDQogICAgK3sNCiAg
ICArCXN0cnVjdCBleHByICplID0geGNhbGxvYygxLCBzaXplb2YoKmUpKTsNCiAgICArCWUtPnR5
cGUgPSB0eXBlOw0KICAgICsJZS0+bGVmdC5leHByID0gY2U7DQogICAgKwlyZXR1cm4gZTsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RydWN0IGV4cHIgKmV4cHJfYWxsb2NfdHdvKGVudW0gZXhwcl90
eXBlIHR5cGUsIHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKQ0KICAgICt7DQogICAg
KwlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2MoMSwgc2l6ZW9mKCplKSk7DQogICAgKwllLT50eXBl
ID0gdHlwZTsNCiAgICArCWUtPmxlZnQuZXhwciA9IGUxOw0KICAgICsJZS0+cmlnaHQuZXhwciA9
IGUyOw0KICAgICsJcmV0dXJuIGU7DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBleHByICpl
eHByX2FsbG9jX2NvbXAoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqczEsIHN0
cnVjdCBzeW1ib2wgKnMyKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZXhwciAqZSA9IHhjYWxsb2Mo
MSwgc2l6ZW9mKCplKSk7DQogICAgKwllLT50eXBlID0gdHlwZTsNCiAgICArCWUtPmxlZnQuc3lt
ID0gczE7DQogICAgKwllLT5yaWdodC5zeW0gPSBzMjsNCiAgICArCXJldHVybiBlOw0KICAgICt9
DQogICAgKw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY19hbmQoc3RydWN0IGV4cHIgKmUx
LCBzdHJ1Y3QgZXhwciAqZTIpDQogICAgK3sNCiAgICArCWlmICghZTEpDQogICAgKwkJcmV0dXJu
IGUyOw0KICAgICsJcmV0dXJuIGUyID8gZXhwcl9hbGxvY190d28oRV9BTkQsIGUxLCBlMikgOiBl
MTsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IGV4cHIgKmV4cHJfYWxsb2Nfb3Ioc3RydWN0
IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpDQogICAgK3sNCiAgICArCWlmICghZTEpDQogICAg
KwkJcmV0dXJuIGUyOw0KICAgICsJcmV0dXJuIGUyID8gZXhwcl9hbGxvY190d28oRV9PUiwgZTEs
IGUyKSA6IGUxOw0KICAgICt9DQogICAgKw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9jb3B5KGNv
bnN0IHN0cnVjdCBleHByICpvcmcpDQogICAgK3sNCiAgICArCXN0cnVjdCBleHByICplOw0KICAg
ICsNCiAgICArCWlmICghb3JnKQ0KICAgICsJCXJldHVybiBOVUxMOw0KICAgICsNCiAgICArCWUg
PSB4bWFsbG9jKHNpemVvZigqb3JnKSk7DQogICAgKwltZW1jcHkoZSwgb3JnLCBzaXplb2YoKm9y
ZykpOw0KICAgICsJc3dpdGNoIChvcmctPnR5cGUpIHsNCiAgICArCWNhc2UgRV9TWU1CT0w6DQog
ICAgKwkJZS0+bGVmdCA9IG9yZy0+bGVmdDsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9O
T1Q6DQogICAgKwkJZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsNCiAg
ICArCQlicmVhazsNCiAgICArCWNhc2UgRV9FUVVBTDoNCiAgICArCWNhc2UgRV9HRVE6DQogICAg
KwljYXNlIEVfR1RIOg0KICAgICsJY2FzZSBFX0xFUToNCiAgICArCWNhc2UgRV9MVEg6DQogICAg
KwljYXNlIEVfVU5FUVVBTDoNCiAgICArCQllLT5sZWZ0LnN5bSA9IG9yZy0+bGVmdC5zeW07DQog
ICAgKwkJZS0+cmlnaHQuc3ltID0gb3JnLT5yaWdodC5zeW07DQogICAgKwkJYnJlYWs7DQogICAg
KwljYXNlIEVfQU5EOg0KICAgICsJY2FzZSBFX09SOg0KICAgICsJY2FzZSBFX0xJU1Q6DQogICAg
KwkJZS0+bGVmdC5leHByID0gZXhwcl9jb3B5KG9yZy0+bGVmdC5leHByKTsNCiAgICArCQllLT5y
aWdodC5leHByID0gZXhwcl9jb3B5KG9yZy0+cmlnaHQuZXhwcik7DQogICAgKwkJYnJlYWs7DQog
ICAgKwlkZWZhdWx0Og0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiY2FuJ3QgY29weSB0eXBlICVk
XG4iLCBlLT50eXBlKTsNCiAgICArCQlmcmVlKGUpOw0KICAgICsJCWUgPSBOVUxMOw0KICAgICsJ
CWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiBlOw0KICAgICt9DQogICAgKw0K
ICAgICt2b2lkIGV4cHJfZnJlZShzdHJ1Y3QgZXhwciAqZSkNCiAgICArew0KICAgICsJaWYgKCFl
KQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwlzd2l0Y2ggKGUtPnR5cGUpIHsNCiAgICAr
CWNhc2UgRV9TWU1CT0w6DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIEVfTk9UOg0KICAgICsJ
CWV4cHJfZnJlZShlLT5sZWZ0LmV4cHIpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX0VR
VUFMOg0KICAgICsJY2FzZSBFX0dFUToNCiAgICArCWNhc2UgRV9HVEg6DQogICAgKwljYXNlIEVf
TEVROg0KICAgICsJY2FzZSBFX0xUSDoNCiAgICArCWNhc2UgRV9VTkVRVUFMOg0KICAgICsJCWJy
ZWFrOw0KICAgICsJY2FzZSBFX09SOg0KICAgICsJY2FzZSBFX0FORDoNCiAgICArCQlleHByX2Zy
ZWUoZS0+bGVmdC5leHByKTsNCiAgICArCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQogICAg
KwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiaG93IHRv
IGZyZWUgdHlwZSAlZD9cbiIsIGUtPnR5cGUpOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAg
ICsJZnJlZShlKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGludCB0cmFuc19jb3VudDsN
CiAgICArDQogICAgKyNkZWZpbmUgZTEgKCplcDEpDQogICAgKyNkZWZpbmUgZTIgKCplcDIpDQog
ICAgKw0KICAgICsvKg0KICAgICsgKiBleHByX2VsaW1pbmF0ZV9lcSgpIGhlbHBlci4NCiAgICAr
ICoNCiAgICArICogV2Fsa3MgdGhlIHR3byBleHByZXNzaW9uIHRyZWVzIGdpdmVuIGluICdlcDEn
IGFuZCAnZXAyJy4gQW55IG5vZGUgdGhhdCBkb2VzDQogICAgKyAqIG5vdCBoYXZlIHR5cGUgJ3R5
cGUnIChFX09SL0VfQU5EKSBpcyBjb25zaWRlcmVkIGEgbGVhZiwgYW5kIGlzIGNvbXBhcmVkDQog
ICAgKyAqIGFnYWluc3QgYWxsIG90aGVyIGxlYXZlcy4gVHdvIGVxdWFsIGxlYXZlcyBhcmUgYm90
aCByZXBsYWNlZCB3aXRoIGVpdGhlciAneScNCiAgICArICogb3IgJ24nIGFzIGFwcHJvcHJpYXRl
IGZvciAndHlwZScsIHRvIGJlIGVsaW1pbmF0ZWQgbGF0ZXIuDQogICAgKyAqLw0KICAgICtzdGF0
aWMgdm9pZCBfX2V4cHJfZWxpbWluYXRlX2VxKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBl
eHByICoqZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMikNCiAgICArew0KICAgICsJLyogUmVjdXJzZSBk
b3duIHRvIGxlYXZlcyAqLw0KICAgICsNCiAgICArCWlmIChlMS0+dHlwZSA9PSB0eXBlKSB7DQog
ICAgKwkJX19leHByX2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEtPmxlZnQuZXhwciwgJmUyKTsNCiAg
ICArCQlfX2V4cHJfZWxpbWluYXRlX2VxKHR5cGUsICZlMS0+cmlnaHQuZXhwciwgJmUyKTsNCiAg
ICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKwlpZiAoZTItPnR5cGUgPT0gdHlwZSkgew0KICAg
ICsJCV9fZXhwcl9lbGltaW5hdGVfZXEodHlwZSwgJmUxLCAmZTItPmxlZnQuZXhwcik7DQogICAg
KwkJX19leHByX2VsaW1pbmF0ZV9lcSh0eXBlLCAmZTEsICZlMi0+cmlnaHQuZXhwcik7DQogICAg
KwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsNCiAgICArCS8qIGUxIGFuZCBlMiBhcmUgbGVhdmVz
LiBDb21wYXJlIHRoZW0uICovDQogICAgKw0KICAgICsJaWYgKGUxLT50eXBlID09IEVfU1lNQk9M
ICYmIGUyLT50eXBlID09IEVfU1lNQk9MICYmDQogICAgKwkgICAgZTEtPmxlZnQuc3ltID09IGUy
LT5sZWZ0LnN5bSAmJg0KICAgICsJICAgIChlMS0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMgfHwg
ZTEtPmxlZnQuc3ltID09ICZzeW1ib2xfbm8pKQ0KICAgICsJCXJldHVybjsNCiAgICArCWlmICgh
ZXhwcl9lcShlMSwgZTIpKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwkvKiBlMSBhbmQg
ZTIgYXJlIGVxdWFsIGxlYXZlcy4gUHJlcGFyZSB0aGVtIGZvciBlbGltaW5hdGlvbi4gKi8NCiAg
ICArDQogICAgKwl0cmFuc19jb3VudCsrOw0KICAgICsJZXhwcl9mcmVlKGUxKTsgZXhwcl9mcmVl
KGUyKTsNCiAgICArCXN3aXRjaCAodHlwZSkgew0KICAgICsJY2FzZSBFX09SOg0KICAgICsJCWUx
ID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9ubyk7DQogICAgKwkJZTIgPSBleHByX2FsbG9j
X3N5bWJvbCgmc3ltYm9sX25vKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9BTkQ6DQog
ICAgKwkJZTEgPSBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7DQogICAgKwkJZTIgPSBl
eHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX3llcyk7DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZh
dWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICog
UmV3cml0ZXMgdGhlIGV4cHJlc3Npb25zICdlcDEnIGFuZCAnZXAyJyB0byByZW1vdmUgb3BlcmFu
ZHMgY29tbW9uIHRvIGJvdGguDQogICAgKyAqIEV4YW1wbGUgcmVkdWN0aW9uczoNCiAgICArICoN
CiAgICArICoJZXAxOiBBICYmIEIgICAgICAgICAgIC0+ICBlcDE6IHkNCiAgICArICoJZXAyOiBB
ICYmIEIgJiYgQyAgICAgIC0+ICBlcDI6IEMNCiAgICArICoNCiAgICArICoJZXAxOiBBIHx8IEIg
ICAgICAgICAgIC0+ICBlcDE6IG4NCiAgICArICoJZXAyOiBBIHx8IEIgfHwgQyAgICAgIC0+ICBl
cDI6IEMNCiAgICArICoNCiAgICArICoJZXAxOiBBICYmIChCICYmIEZPTykgIC0+ICBlcDE6IEZP
Tw0KICAgICsgKgllcDI6IChCQVIgJiYgQikgJiYgQSAgLT4gIGVwMjogQkFSDQogICAgKyAqDQog
ICAgKyAqCWVwMTogQSAmJiAoQiB8fCBDKSAgICAtPiAgZXAxOiB5DQogICAgKyAqCWVwMjogKEMg
fHwgQikgJiYgQSAgICAtPiAgZXAyOiB5DQogICAgKyAqDQogICAgKyAqIENvbXBhcmlzb25zIGFy
ZSBkb25lIGJldHdlZW4gYWxsIG9wZXJhbmRzIGF0IHRoZSBzYW1lICJsZXZlbCIgb2YgJiYgb3Ig
fHwuDQogICAgKyAqIEZvciBleGFtcGxlLCBpbiB0aGUgZXhwcmVzc2lvbiAnZTEgJiYgKGUyIHx8
IGUzKSAmJiAoZTQgfHwgZTUpJywgdGhlDQogICAgKyAqIGZvbGxvd2luZyBvcGVyYW5kcyB3aWxs
IGJlIGNvbXBhcmVkOg0KICAgICsgKg0KICAgICsgKgktICdlMScsICdlMiB8fCBlMycsIGFuZCAn
ZTQgfHwgZTUnLCBhZ2FpbnN0IGVhY2ggb3RoZXINCiAgICArICoJLSBlMiBhZ2FpbnN0IGUzDQog
ICAgKyAqCS0gZTQgYWdhaW5zdCBlNQ0KICAgICsgKg0KICAgICsgKiBQYXJlbnRoZXNlcyBhcmUg
aXJyZWxldmFudCB3aXRoaW4gYSBzaW5nbGUgbGV2ZWwuICdlMSAmJiAoZTIgJiYgZTMpJyBhbmQN
CiAgICArICogJyhlMSAmJiBlMikgJiYgZTMnIGFyZSBib3RoIGEgc2luZ2xlIGxldmVsLg0KICAg
ICsgKg0KICAgICsgKiBTZWUgX19leHByX2VsaW1pbmF0ZV9lcSgpIGFzIHdlbGwuDQogICAgKyAq
Lw0KICAgICt2b2lkIGV4cHJfZWxpbWluYXRlX2VxKHN0cnVjdCBleHByICoqZXAxLCBzdHJ1Y3Qg
ZXhwciAqKmVwMikNCiAgICArew0KICAgICsJaWYgKCFlMSB8fCAhZTIpDQogICAgKwkJcmV0dXJu
Ow0KICAgICsJc3dpdGNoIChlMS0+dHlwZSkgew0KICAgICsJY2FzZSBFX09SOg0KICAgICsJY2Fz
ZSBFX0FORDoNCiAgICArCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUxLT50eXBlLCBlcDEsIGVwMik7
DQogICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArCWlmIChlMS0+dHlwZSAh
PSBlMi0+dHlwZSkgc3dpdGNoIChlMi0+dHlwZSkgew0KICAgICsJY2FzZSBFX09SOg0KICAgICsJ
Y2FzZSBFX0FORDoNCiAgICArCQlfX2V4cHJfZWxpbWluYXRlX2VxKGUyLT50eXBlLCBlcDEsIGVw
Mik7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArCWUxID0gZXhwcl9l
bGltaW5hdGVfeW4oZTEpOw0KICAgICsJZTIgPSBleHByX2VsaW1pbmF0ZV95bihlMik7DQogICAg
K30NCiAgICArDQogICAgKyN1bmRlZiBlMQ0KICAgICsjdW5kZWYgZTINCiAgICArDQogICAgKy8q
DQogICAgKyAqIFJldHVybnMgdHJ1ZSBpZiAnZTEnIGFuZCAnZTInIGFyZSBlcXVhbCwgYWZ0ZXIg
bWlub3Igc2ltcGxpZmljYXRpb24uIFR3bw0KICAgICsgKiAmJi98fCBleHByZXNzaW9ucyBhcmUg
Y29uc2lkZXJlZCBlcXVhbCBpZiBldmVyeSBvcGVyYW5kIGluIG9uZSBleHByZXNzaW9uDQogICAg
KyAqIGVxdWFscyBzb21lIG9wZXJhbmQgaW4gdGhlIG90aGVyIChvcGVyYW5kcyBkbyBub3QgbmVl
ZCB0byBhcHBlYXIgaW4gdGhlIHNhbWUNCiAgICArICogb3JkZXIpLCByZWN1cnNpdmVseS4NCiAg
ICArICovDQogICAgK3N0YXRpYyBpbnQgZXhwcl9lcShzdHJ1Y3QgZXhwciAqZTEsIHN0cnVjdCBl
eHByICplMikNCiAgICArew0KICAgICsJaW50IHJlcywgb2xkX2NvdW50Ow0KICAgICsNCiAgICAr
CWlmIChlMS0+dHlwZSAhPSBlMi0+dHlwZSkNCiAgICArCQlyZXR1cm4gMDsNCiAgICArCXN3aXRj
aCAoZTEtPnR5cGUpIHsNCiAgICArCWNhc2UgRV9FUVVBTDoNCiAgICArCWNhc2UgRV9HRVE6DQog
ICAgKwljYXNlIEVfR1RIOg0KICAgICsJY2FzZSBFX0xFUToNCiAgICArCWNhc2UgRV9MVEg6DQog
ICAgKwljYXNlIEVfVU5FUVVBTDoNCiAgICArCQlyZXR1cm4gZTEtPmxlZnQuc3ltID09IGUyLT5s
ZWZ0LnN5bSAmJiBlMS0+cmlnaHQuc3ltID09IGUyLT5yaWdodC5zeW07DQogICAgKwljYXNlIEVf
U1lNQk9MOg0KICAgICsJCXJldHVybiBlMS0+bGVmdC5zeW0gPT0gZTItPmxlZnQuc3ltOw0KICAg
ICsJY2FzZSBFX05PVDoNCiAgICArCQlyZXR1cm4gZXhwcl9lcShlMS0+bGVmdC5leHByLCBlMi0+
bGVmdC5leHByKTsNCiAgICArCWNhc2UgRV9BTkQ6DQogICAgKwljYXNlIEVfT1I6DQogICAgKwkJ
ZTEgPSBleHByX2NvcHkoZTEpOw0KICAgICsJCWUyID0gZXhwcl9jb3B5KGUyKTsNCiAgICArCQlv
bGRfY291bnQgPSB0cmFuc19jb3VudDsNCiAgICArCQlleHByX2VsaW1pbmF0ZV9lcSgmZTEsICZl
Mik7DQogICAgKwkJcmVzID0gKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVf
U1lNQk9MICYmDQogICAgKwkJICAgICAgIGUxLT5sZWZ0LnN5bSA9PSBlMi0+bGVmdC5zeW0pOw0K
ICAgICsJCWV4cHJfZnJlZShlMSk7DQogICAgKwkJZXhwcl9mcmVlKGUyKTsNCiAgICArCQl0cmFu
c19jb3VudCA9IG9sZF9jb3VudDsNCiAgICArCQlyZXR1cm4gcmVzOw0KICAgICsJY2FzZSBFX0xJ
U1Q6DQogICAgKwljYXNlIEVfUkFOR0U6DQogICAgKwljYXNlIEVfTk9ORToNCiAgICArCQkvKiBw
YW5pYyAqLzsNCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoREVCVUdfRVhQUikgew0KICAgICsJ
CWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOw0KICAgICsJCXByaW50ZigiID0gIik7DQogICAgKwkJ
ZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7DQogICAgKwkJcHJpbnRmKCIgP1xuIik7DQogICAgKwl9
DQogICAgKw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAq
IFJlY3Vyc2l2ZWx5IHBlcmZvcm1zIHRoZSBmb2xsb3dpbmcgc2ltcGxpZmljYXRpb25zIGluLXBs
YWNlIChhcyB3ZWxsIGFzIHRoZQ0KICAgICsgKiBjb3JyZXNwb25kaW5nIHNpbXBsaWZpY2F0aW9u
cyB3aXRoIHN3YXBwZWQgb3BlcmFuZHMpOg0KICAgICsgKg0KICAgICsgKglleHByICYmIG4gIC0+
ICBuDQogICAgKyAqCWV4cHIgJiYgeSAgLT4gIGV4cHINCiAgICArICoJZXhwciB8fCBuICAtPiAg
ZXhwcg0KICAgICsgKglleHByIHx8IHkgIC0+ICB5DQogICAgKyAqDQogICAgKyAqIFJldHVybnMg
dGhlIG9wdGltaXplZCBleHByZXNzaW9uLg0KICAgICsgKi8NCiAgICArc3RhdGljIHN0cnVjdCBl
eHByICpleHByX2VsaW1pbmF0ZV95bihzdHJ1Y3QgZXhwciAqZSkNCiAgICArew0KICAgICsJc3Ry
dWN0IGV4cHIgKnRtcDsNCiAgICArDQogICAgKwlpZiAoZSkgc3dpdGNoIChlLT50eXBlKSB7DQog
ICAgKwljYXNlIEVfQU5EOg0KICAgICsJCWUtPmxlZnQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3lu
KGUtPmxlZnQuZXhwcik7DQogICAgKwkJZS0+cmlnaHQuZXhwciA9IGV4cHJfZWxpbWluYXRlX3lu
KGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCWlmIChlLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1C
T0wpIHsNCiAgICArCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykg
ew0KICAgICsJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7DQogICAgKwkJCQlleHByX2ZyZWUo
ZS0+cmlnaHQuZXhwcik7DQogICAgKwkJCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgKwkJCQll
LT5sZWZ0LnN5bSA9ICZzeW1ib2xfbm87DQogICAgKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsN
CiAgICArCQkJCXJldHVybiBlOw0KICAgICsJCQl9IGVsc2UgaWYgKGUtPmxlZnQuZXhwci0+bGVm
dC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAgICArCQkJCWZyZWUoZS0+bGVmdC5leHByKTsNCiAg
ICArCQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7DQogICAgKwkJCQkqZSA9ICooZS0+cmlnaHQuZXhw
cik7DQogICAgKwkJCQlmcmVlKHRtcCk7DQogICAgKwkJCQlyZXR1cm4gZTsNCiAgICArCQkJfQ0K
ICAgICsJCX0NCiAgICArCQlpZiAoZS0+cmlnaHQuZXhwci0+dHlwZSA9PSBFX1NZTUJPTCkgew0K
ICAgICsJCQlpZiAoZS0+cmlnaHQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAg
ICsJCQkJZXhwcl9mcmVlKGUtPmxlZnQuZXhwcik7DQogICAgKwkJCQlleHByX2ZyZWUoZS0+cmln
aHQuZXhwcik7DQogICAgKwkJCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgKwkJCQllLT5sZWZ0
LnN5bSA9ICZzeW1ib2xfbm87DQogICAgKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsNCiAgICAr
CQkJCXJldHVybiBlOw0KICAgICsJCQl9IGVsc2UgaWYgKGUtPnJpZ2h0LmV4cHItPmxlZnQuc3lt
ID09ICZzeW1ib2xfeWVzKSB7DQogICAgKwkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJ
CQkJdG1wID0gZS0+bGVmdC5leHByOw0KICAgICsJCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7DQog
ICAgKwkJCQlmcmVlKHRtcCk7DQogICAgKwkJCQlyZXR1cm4gZTsNCiAgICArCQkJfQ0KICAgICsJ
CX0NCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9PUjoNCiAgICArCQllLT5sZWZ0LmV4cHIg
PSBleHByX2VsaW1pbmF0ZV95bihlLT5sZWZ0LmV4cHIpOw0KICAgICsJCWUtPnJpZ2h0LmV4cHIg
PSBleHByX2VsaW1pbmF0ZV95bihlLT5yaWdodC5leHByKTsNCiAgICArCQlpZiAoZS0+bGVmdC5l
eHByLT50eXBlID09IEVfU1lNQk9MKSB7DQogICAgKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQu
c3ltID09ICZzeW1ib2xfbm8pIHsNCiAgICArCQkJCWZyZWUoZS0+bGVmdC5leHByKTsNCiAgICAr
CQkJCXRtcCA9IGUtPnJpZ2h0LmV4cHI7DQogICAgKwkJCQkqZSA9ICooZS0+cmlnaHQuZXhwcik7
DQogICAgKwkJCQlmcmVlKHRtcCk7DQogICAgKwkJCQlyZXR1cm4gZTsNCiAgICArCQkJfSBlbHNl
IGlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfeWVzKSB7DQogICAgKwkJCQll
eHByX2ZyZWUoZS0+bGVmdC5leHByKTsNCiAgICArCQkJCWV4cHJfZnJlZShlLT5yaWdodC5leHBy
KTsNCiAgICArCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICArCQkJCWUtPmxlZnQuc3ltID0g
JnN5bWJvbF95ZXM7DQogICAgKwkJCQllLT5yaWdodC5leHByID0gTlVMTDsNCiAgICArCQkJCXJl
dHVybiBlOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJCWlmIChlLT5yaWdodC5leHByLT50
eXBlID09IEVfU1lNQk9MKSB7DQogICAgKwkJCWlmIChlLT5yaWdodC5leHByLT5sZWZ0LnN5bSA9
PSAmc3ltYm9sX25vKSB7DQogICAgKwkJCQlmcmVlKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCQkJ
dG1wID0gZS0+bGVmdC5leHByOw0KICAgICsJCQkJKmUgPSAqKGUtPmxlZnQuZXhwcik7DQogICAg
KwkJCQlmcmVlKHRtcCk7DQogICAgKwkJCQlyZXR1cm4gZTsNCiAgICArCQkJfSBlbHNlIGlmIChl
LT5yaWdodC5leHByLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX3llcykgew0KICAgICsJCQkJZXhwcl9m
cmVlKGUtPmxlZnQuZXhwcik7DQogICAgKwkJCQlleHByX2ZyZWUoZS0+cmlnaHQuZXhwcik7DQog
ICAgKwkJCQllLT50eXBlID0gRV9TWU1CT0w7DQogICAgKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1i
b2xfeWVzOw0KICAgICsJCQkJZS0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgKwkJCQlyZXR1cm4g
ZTsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQog
ICAgKwkJOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIGU7DQogICAgK30NCiAgICArDQogICAgKy8q
DQogICAgKyAqIGJvb2wgRk9PIT1uID0+IEZPTw0KICAgICsgKi8NCiAgICArc3RydWN0IGV4cHIg
KmV4cHJfdHJhbnNfYm9vbChzdHJ1Y3QgZXhwciAqZSkNCiAgICArew0KICAgICsJaWYgKCFlKQ0K
ICAgICsJCXJldHVybiBOVUxMOw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7DQogICAgKwljYXNl
IEVfQU5EOg0KICAgICsJY2FzZSBFX09SOg0KICAgICsJY2FzZSBFX05PVDoNCiAgICArCQllLT5s
ZWZ0LmV4cHIgPSBleHByX3RyYW5zX2Jvb2woZS0+bGVmdC5leHByKTsNCiAgICArCQllLT5yaWdo
dC5leHByID0gZXhwcl90cmFuc19ib29sKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCWJyZWFrOw0K
ICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwkJLy8gRk9PIT1uIC0+IEZPTw0KICAgICsJCWlm
IChlLT5sZWZ0LnN5bS0+dHlwZSA9PSBTX1RSSVNUQVRFKSB7DQogICAgKwkJCWlmIChlLT5yaWdo
dC5zeW0gPT0gJnN5bWJvbF9ubykgew0KICAgICsJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0KICAg
ICsJCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArCQli
cmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIGU7
DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIGUxIHx8IGUyIC0+ID8NCiAgICArICov
DQogICAgK3N0YXRpYyBzdHJ1Y3QgZXhwciAqZXhwcl9qb2luX29yKHN0cnVjdCBleHByICplMSwg
c3RydWN0IGV4cHIgKmUyKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZXhwciAqdG1wOw0KICAgICsJ
c3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7DQogICAgKw0KICAgICsJaWYgKGV4cHJfZXEoZTEs
IGUyKSkNCiAgICArCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsNCiAgICArCWlmIChlMS0+dHlwZSAh
PSBFX0VRVUFMICYmIGUxLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZTUJP
TCAmJiBlMS0+dHlwZSAhPSBFX05PVCkNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArCWlmIChl
Mi0+dHlwZSAhPSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSAh
PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSAhPSBFX05PVCkNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAg
ICArCWlmIChlMS0+dHlwZSA9PSBFX05PVCkgew0KICAgICsJCXRtcCA9IGUxLT5sZWZ0LmV4cHI7
DQogICAgKwkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1VORVFV
QUwgJiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgICsJCQlyZXR1cm4gTlVMTDsNCiAgICAr
CQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsNCiAgICArCX0gZWxzZQ0KICAgICsJCXN5bTEgPSBlMS0+
bGVmdC5zeW07DQogICAgKwlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsNCiAgICArCQlpZiAoZTIt
PmxlZnQuZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICArCQkJcmV0dXJuIE5VTEw7DQogICAg
KwkJc3ltMiA9IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOw0KICAgICsJfSBlbHNlDQogICAgKwkJ
c3ltMiA9IGUyLT5sZWZ0LnN5bTsNCiAgICArCWlmIChzeW0xICE9IHN5bTIpDQogICAgKwkJcmV0
dXJuIE5VTEw7DQogICAgKwlpZiAoc3ltMS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+dHlw
ZSAhPSBTX1RSSVNUQVRFKQ0KICAgICsJCXJldHVybiBOVUxMOw0KICAgICsJaWYgKHN5bTEtPnR5
cGUgPT0gU19UUklTVEFURSkgew0KICAgICsJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUy
LT50eXBlID09IEVfRVFVQUwgJiYNCiAgICArCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1i
b2xfeWVzICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8DQogICAgKwkJICAgICAo
ZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xf
eWVzKSkpIHsNCiAgICArCQkJLy8gKGE9J3knKSB8fCAoYT0nbScpIC0+IChhIT0nbicpDQogICAg
KwkJCXJldHVybiBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX25vKTsN
CiAgICArCQl9DQogICAgKwkJaWYgKGUxLT50eXBlID09IEVfRVFVQUwgJiYgZTItPnR5cGUgPT0g
RV9FUVVBTCAmJg0KICAgICsJCSAgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMgJiYg
ZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fA0KICAgICsJCSAgICAgKGUxLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSkpIHsNCiAg
ICArCQkJLy8gKGE9J3knKSB8fCAoYT0nbicpIC0+IChhIT0nbScpDQogICAgKwkJCXJldHVybiBl
eHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7DQogICAgKwkJfQ0K
ICAgICsJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50eXBlID09IEVfRVFVQUwgJiYN
CiAgICArCQkgICAgKChlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kICYmIGUyLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9ubykgfHwNCiAgICArCQkgICAgIChlMS0+cmlnaHQuc3ltID09ICZzeW1i
b2xfbm8gJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkpKSB7DQogICAgKwkJCS8vIChh
PSdtJykgfHwgKGE9J24nKSAtPiAoYSE9J3knKQ0KICAgICsJCQlyZXR1cm4gZXhwcl9hbGxvY19j
b21wKEVfVU5FUVVBTCwgc3ltMSwgJnN5bWJvbF95ZXMpOw0KICAgICsJCX0NCiAgICArCX0NCiAg
ICArCWlmIChzeW0xLT50eXBlID09IFNfQk9PTEVBTiAmJiBzeW0xID09IHN5bTIpIHsNCiAgICAr
CQlpZiAoKGUxLT50eXBlID09IEVfTk9UICYmIGUxLT5sZWZ0LmV4cHItPnR5cGUgPT0gRV9TWU1C
T0wgJiYgZTItPnR5cGUgPT0gRV9TWU1CT0wpIHx8DQogICAgKwkJICAgIChlMi0+dHlwZSA9PSBF
X05PVCAmJiBlMi0+bGVmdC5leHByLT50eXBlID09IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVf
U1lNQk9MKSkNCiAgICArCQkJcmV0dXJuIGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfeWVzKTsN
CiAgICArCX0NCiAgICArDQogICAgKwlpZiAoREVCVUdfRVhQUikgew0KICAgICsJCXByaW50Zigi
b3B0aW1pemUgKCIpOw0KICAgICsJCWV4cHJfZnByaW50KGUxLCBzdGRvdXQpOw0KICAgICsJCXBy
aW50ZigiKSB8fCAoIik7DQogICAgKwkJZXhwcl9mcHJpbnQoZTIsIHN0ZG91dCk7DQogICAgKwkJ
cHJpbnRmKCIpP1xuIik7DQogICAgKwl9DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RhdGljIHN0cnVjdCBleHByICpleHByX2pvaW5fYW5kKHN0cnVjdCBleHByICpl
MSwgc3RydWN0IGV4cHIgKmUyKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZXhwciAqdG1wOw0KICAg
ICsJc3RydWN0IHN5bWJvbCAqc3ltMSwgKnN5bTI7DQogICAgKw0KICAgICsJaWYgKGV4cHJfZXEo
ZTEsIGUyKSkNCiAgICArCQlyZXR1cm4gZXhwcl9jb3B5KGUxKTsNCiAgICArCWlmIChlMS0+dHlw
ZSAhPSBFX0VRVUFMICYmIGUxLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMS0+dHlwZSAhPSBFX1NZ
TUJPTCAmJiBlMS0+dHlwZSAhPSBFX05PVCkNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArCWlm
IChlMi0+dHlwZSAhPSBFX0VRVUFMICYmIGUyLT50eXBlICE9IEVfVU5FUVVBTCAmJiBlMi0+dHlw
ZSAhPSBFX1NZTUJPTCAmJiBlMi0+dHlwZSAhPSBFX05PVCkNCiAgICArCQlyZXR1cm4gTlVMTDsN
CiAgICArCWlmIChlMS0+dHlwZSA9PSBFX05PVCkgew0KICAgICsJCXRtcCA9IGUxLT5sZWZ0LmV4
cHI7DQogICAgKwkJaWYgKHRtcC0+dHlwZSAhPSBFX0VRVUFMICYmIHRtcC0+dHlwZSAhPSBFX1VO
RVFVQUwgJiYgdG1wLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgICsJCQlyZXR1cm4gTlVMTDsNCiAg
ICArCQlzeW0xID0gdG1wLT5sZWZ0LnN5bTsNCiAgICArCX0gZWxzZQ0KICAgICsJCXN5bTEgPSBl
MS0+bGVmdC5zeW07DQogICAgKwlpZiAoZTItPnR5cGUgPT0gRV9OT1QpIHsNCiAgICArCQlpZiAo
ZTItPmxlZnQuZXhwci0+dHlwZSAhPSBFX1NZTUJPTCkNCiAgICArCQkJcmV0dXJuIE5VTEw7DQog
ICAgKwkJc3ltMiA9IGUyLT5sZWZ0LmV4cHItPmxlZnQuc3ltOw0KICAgICsJfSBlbHNlDQogICAg
KwkJc3ltMiA9IGUyLT5sZWZ0LnN5bTsNCiAgICArCWlmIChzeW0xICE9IHN5bTIpDQogICAgKwkJ
cmV0dXJuIE5VTEw7DQogICAgKwlpZiAoc3ltMS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltMS0+
dHlwZSAhPSBTX1RSSVNUQVRFKQ0KICAgICsJCXJldHVybiBOVUxMOw0KICAgICsNCiAgICArCWlm
ICgoZTEtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTItPnR5cGUgPT0gRV9FUVVBTCAmJiBlMi0+cmln
aHQuc3ltID09ICZzeW1ib2xfeWVzKSB8fA0KICAgICsJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJP
TCAmJiBlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMp
KQ0KICAgICsJCS8vIChhKSAmJiAoYT0neScpIC0+IChhPSd5JykNCiAgICArCQlyZXR1cm4gZXhw
cl9hbGxvY19jb21wKEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsNCiAgICArDQogICAgKwlp
ZiAoKGUxLT50eXBlID09IEVfU1lNQk9MICYmIGUyLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+
cmlnaHQuc3ltID09ICZzeW1ib2xfbm8pIHx8DQogICAgKwkgICAgKGUyLT50eXBlID09IEVfU1lN
Qk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZzeW1ib2xf
bm8pKQ0KICAgICsJCS8vIChhKSAmJiAoYSE9J24nKSAtPiAoYSkNCiAgICArCQlyZXR1cm4gZXhw
cl9hbGxvY19zeW1ib2woc3ltMSk7DQogICAgKw0KICAgICsJaWYgKChlMS0+dHlwZSA9PSBFX1NZ
TUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X21vZCkgfHwNCiAgICArCSAgICAoZTItPnR5cGUgPT0gRV9TWU1CT0wgJiYgZTEtPnR5cGUgPT0g
RV9VTkVRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKQ0KICAgICsJCS8vIChh
KSAmJiAoYSE9J20nKSAtPiAoYT0neScpDQogICAgKwkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChF
X0VRVUFMLCBzeW0xLCAmc3ltYm9sX3llcyk7DQogICAgKw0KICAgICsJaWYgKHN5bTEtPnR5cGUg
PT0gU19UUklTVEFURSkgew0KICAgICsJCWlmIChlMS0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT50
eXBlID09IEVfVU5FUVVBTCkgew0KICAgICsJCQkvLyAoYT0nYicpICYmIChhIT0nYycpIC0+ICdi
Jz0nYycgPyAnbicgOiBhPSdiJw0KICAgICsJCQlzeW0yID0gZTEtPnJpZ2h0LnN5bTsNCiAgICAr
CQkJaWYgKChlMi0+cmlnaHQuc3ltLT5mbGFncyAmIFNZTUJPTF9DT05TVCkgJiYgKHN5bTItPmZs
YWdzICYgU1lNQk9MX0NPTlNUKSkNCiAgICArCQkJCXJldHVybiBzeW0yICE9IGUyLT5yaWdodC5z
eW0gPyBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgc3ltMikNCiAgICArCQkJCQkJCSAg
ICAgOiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsNCiAgICArCQl9DQogICAgKwkJaWYg
KGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMKSB7DQogICAgKwkJ
CS8vIChhPSdiJykgJiYgKGEhPSdjJykgLT4gJ2InPSdjJyA/ICduJyA6IGE9J2InDQogICAgKwkJ
CXN5bTIgPSBlMi0+cmlnaHQuc3ltOw0KICAgICsJCQlpZiAoKGUxLT5yaWdodC5zeW0tPmZsYWdz
ICYgU1lNQk9MX0NPTlNUKSAmJiAoc3ltMi0+ZmxhZ3MgJiBTWU1CT0xfQ09OU1QpKQ0KICAgICsJ
CQkJcmV0dXJuIHN5bTIgIT0gZTEtPnJpZ2h0LnN5bSA/IGV4cHJfYWxsb2NfY29tcChFX0VRVUFM
LCBzeW0xLCBzeW0yKQ0KICAgICsJCQkJCQkJICAgICA6IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1i
b2xfbm8pOw0KICAgICsJCX0NCiAgICArCQlpZiAoZTEtPnR5cGUgPT0gRV9VTkVRVUFMICYmIGUy
LT50eXBlID09IEVfVU5FUVVBTCAmJg0KICAgICsJCQkgICAoKGUxLT5yaWdodC5zeW0gPT0gJnN5
bWJvbF95ZXMgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB8fA0KICAgICsJCQkgICAg
KGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9ubyAmJiBlMi0+cmlnaHQuc3ltID09ICZzeW1ib2xf
eWVzKSkpDQogICAgKwkJCS8vIChhIT0neScpICYmIChhIT0nbicpIC0+IChhPSdtJykNCiAgICAr
CQkJcmV0dXJuIGV4cHJfYWxsb2NfY29tcChFX0VRVUFMLCBzeW0xLCAmc3ltYm9sX21vZCk7DQog
ICAgKw0KICAgICsJCWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9V
TkVRVUFMICYmDQogICAgKwkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcyAmJiBl
Mi0+cmlnaHQuc3ltID09ICZzeW1ib2xfbW9kKSB8fA0KICAgICsJCQkgICAgKGUxLT5yaWdodC5z
eW0gPT0gJnN5bWJvbF9tb2QgJiYgZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykpKQ0KICAg
ICsJCQkvLyAoYSE9J3knKSAmJiAoYSE9J20nKSAtPiAoYT0nbicpDQogICAgKwkJCXJldHVybiBl
eHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltMSwgJnN5bWJvbF9ubyk7DQogICAgKw0KICAgICsJ
CWlmIChlMS0+dHlwZSA9PSBFX1VORVFVQUwgJiYgZTItPnR5cGUgPT0gRV9VTkVRVUFMICYmDQog
ICAgKwkJCSAgICgoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCAmJiBlMi0+cmlnaHQuc3lt
ID09ICZzeW1ib2xfbm8pIHx8DQogICAgKwkJCSAgICAoZTEtPnJpZ2h0LnN5bSA9PSAmc3ltYm9s
X25vICYmIGUyLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpKSkNCiAgICArCQkJLy8gKGEhPSdt
JykgJiYgKGEhPSduJykgLT4gKGE9J20nKQ0KICAgICsJCQlyZXR1cm4gZXhwcl9hbGxvY19jb21w
KEVfRVFVQUwsIHN5bTEsICZzeW1ib2xfeWVzKTsNCiAgICArDQogICAgKwkJaWYgKChlMS0+dHlw
ZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX0VRVUFMICYmIGUyLT5yaWdodC5zeW0gPT0g
JnN5bWJvbF9tb2QpIHx8DQogICAgKwkJICAgIChlMi0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMS0+
dHlwZSA9PSBFX0VRVUFMICYmIGUxLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2QpIHx8DQogICAg
KwkJICAgIChlMS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlMi0+dHlwZSA9PSBFX1VORVFVQUwgJiYg
ZTItPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX3llcykgfHwNCiAgICArCQkgICAgKGUyLT50eXBlID09
IEVfU1lNQk9MICYmIGUxLT50eXBlID09IEVfVU5FUVVBTCAmJiBlMS0+cmlnaHQuc3ltID09ICZz
eW1ib2xfeWVzKSkNCiAgICArCQkJcmV0dXJuIE5VTEw7DQogICAgKwl9DQogICAgKw0KICAgICsJ
aWYgKERFQlVHX0VYUFIpIHsNCiAgICArCQlwcmludGYoIm9wdGltaXplICgiKTsNCiAgICArCQll
eHByX2ZwcmludChlMSwgc3Rkb3V0KTsNCiAgICArCQlwcmludGYoIikgJiYgKCIpOw0KICAgICsJ
CWV4cHJfZnByaW50KGUyLCBzdGRvdXQpOw0KICAgICsJCXByaW50ZigiKT9cbiIpOw0KICAgICsJ
fQ0KICAgICsJcmV0dXJuIE5VTEw7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIGV4
cHJfZWxpbWluYXRlX2R1cHMoKSBoZWxwZXIuDQogICAgKyAqDQogICAgKyAqIFdhbGtzIHRoZSB0
d28gZXhwcmVzc2lvbiB0cmVlcyBnaXZlbiBpbiAnZXAxJyBhbmQgJ2VwMicuIEFueSBub2RlIHRo
YXQgZG9lcw0KICAgICsgKiBub3QgaGF2ZSB0eXBlICd0eXBlJyAoRV9PUi9FX0FORCkgaXMgY29u
c2lkZXJlZCBhIGxlYWYsIGFuZCBpcyBjb21wYXJlZA0KICAgICsgKiBhZ2FpbnN0IGFsbCBvdGhl
ciBsZWF2ZXMgdG8gbG9vayBmb3Igc2ltcGxpZmljYXRpb25zLg0KICAgICsgKi8NCiAgICArc3Rh
dGljIHZvaWQgZXhwcl9lbGltaW5hdGVfZHVwczEoZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0
IGV4cHIgKiplcDEsIHN0cnVjdCBleHByICoqZXAyKQ0KICAgICt7DQogICAgKyNkZWZpbmUgZTEg
KCplcDEpDQogICAgKyNkZWZpbmUgZTIgKCplcDIpDQogICAgKwlzdHJ1Y3QgZXhwciAqdG1wOw0K
ICAgICsNCiAgICArCS8qIFJlY3Vyc2UgZG93biB0byBsZWF2ZXMgKi8NCiAgICArDQogICAgKwlp
ZiAoZTEtPnR5cGUgPT0gdHlwZSkgew0KICAgICsJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUs
ICZlMS0+bGVmdC5leHByLCAmZTIpOw0KICAgICsJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUs
ICZlMS0+cmlnaHQuZXhwciwgJmUyKTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKwlp
ZiAoZTItPnR5cGUgPT0gdHlwZSkgew0KICAgICsJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUs
ICZlMSwgJmUyLT5sZWZ0LmV4cHIpOw0KICAgICsJCWV4cHJfZWxpbWluYXRlX2R1cHMxKHR5cGUs
ICZlMSwgJmUyLT5yaWdodC5leHByKTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKw0K
ICAgICsJLyogZTEgYW5kIGUyIGFyZSBsZWF2ZXMuIENvbXBhcmUgYW5kIHByb2Nlc3MgdGhlbS4g
Ki8NCiAgICArDQogICAgKwlpZiAoZTEgPT0gZTIpDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAg
ICArCXN3aXRjaCAoZTEtPnR5cGUpIHsNCiAgICArCWNhc2UgRV9PUjogY2FzZSBFX0FORDoNCiAg
ICArCQlleHByX2VsaW1pbmF0ZV9kdXBzMShlMS0+dHlwZSwgJmUxLCAmZTEpOw0KICAgICsJZGVm
YXVsdDoNCiAgICArCQk7DQogICAgKwl9DQogICAgKw0KICAgICsJc3dpdGNoICh0eXBlKSB7DQog
ICAgKwljYXNlIEVfT1I6DQogICAgKwkJdG1wID0gZXhwcl9qb2luX29yKGUxLCBlMik7DQogICAg
KwkJaWYgKHRtcCkgew0KICAgICsJCQlleHByX2ZyZWUoZTEpOyBleHByX2ZyZWUoZTIpOw0KICAg
ICsJCQllMSA9IGV4cHJfYWxsb2Nfc3ltYm9sKCZzeW1ib2xfbm8pOw0KICAgICsJCQllMiA9IHRt
cDsNCiAgICArCQkJdHJhbnNfY291bnQrKzsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAg
KwljYXNlIEVfQU5EOg0KICAgICsJCXRtcCA9IGV4cHJfam9pbl9hbmQoZTEsIGUyKTsNCiAgICAr
CQlpZiAodG1wKSB7DQogICAgKwkJCWV4cHJfZnJlZShlMSk7IGV4cHJfZnJlZShlMik7DQogICAg
KwkJCWUxID0gZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOw0KICAgICsJCQllMiA9IHRt
cDsNCiAgICArCQkJdHJhbnNfY291bnQrKzsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAg
KwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArI3VuZGVmIGUxDQogICAgKyN1bmRl
ZiBlMg0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBSZXdyaXRlcyAnZScgaW4tcGxh
Y2UgdG8gcmVtb3ZlICgiam9pbiIpIGR1cGxpY2F0ZSBhbmQgb3RoZXIgcmVkdW5kYW50DQogICAg
KyAqIG9wZXJhbmRzLg0KICAgICsgKg0KICAgICsgKiBFeGFtcGxlIHNpbXBsaWZpY2F0aW9uczoN
CiAgICArICoNCiAgICArICoJQSB8fCBCIHx8IEEgICAgLT4gIEEgfHwgQg0KICAgICsgKglBICYm
IEIgJiYgQT15ICAtPiAgQT15ICYmIEINCiAgICArICoNCiAgICArICogUmV0dXJucyB0aGUgZGVk
dXBsaWNhdGVkIGV4cHJlc3Npb24uDQogICAgKyAqLw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9l
bGltaW5hdGVfZHVwcyhzdHJ1Y3QgZXhwciAqZSkNCiAgICArew0KICAgICsJaW50IG9sZGNvdW50
Ow0KICAgICsJaWYgKCFlKQ0KICAgICsJCXJldHVybiBlOw0KICAgICsNCiAgICArCW9sZGNvdW50
ID0gdHJhbnNfY291bnQ7DQogICAgKwl3aGlsZSAoMSkgew0KICAgICsJCXRyYW5zX2NvdW50ID0g
MDsNCiAgICArCQlzd2l0Y2ggKGUtPnR5cGUpIHsNCiAgICArCQljYXNlIEVfT1I6IGNhc2UgRV9B
TkQ6DQogICAgKwkJCWV4cHJfZWxpbWluYXRlX2R1cHMxKGUtPnR5cGUsICZlLCAmZSk7DQogICAg
KwkJZGVmYXVsdDoNCiAgICArCQkJOw0KICAgICsJCX0NCiAgICArCQlpZiAoIXRyYW5zX2NvdW50
KQ0KICAgICsJCQkvKiBObyBzaW1wbGlmaWNhdGlvbnMgZG9uZSBpbiB0aGlzIHBhc3MuIFdlJ3Jl
IGRvbmUgKi8NCiAgICArCQkJYnJlYWs7DQogICAgKwkJZSA9IGV4cHJfZWxpbWluYXRlX3luKGUp
Ow0KICAgICsJfQ0KICAgICsJdHJhbnNfY291bnQgPSBvbGRjb3VudDsNCiAgICArCXJldHVybiBl
Ow0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBQZXJmb3JtcyB2YXJpb3VzIHNpbXBs
aWZpY2F0aW9ucyBpbnZvbHZpbmcgbG9naWNhbCBvcGVyYXRvcnMgYW5kDQogICAgKyAqIGNvbXBh
cmlzb25zLg0KICAgICsgKg0KICAgICsgKiBBbGxvY2F0ZXMgYW5kIHJldHVybnMgYSBuZXcgZXhw
cmVzc2lvbi4NCiAgICArICovDQogICAgK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1
Y3QgZXhwciAqZSkNCiAgICArew0KICAgICsJc3RydWN0IGV4cHIgKnRtcDsNCiAgICArDQogICAg
KwlpZiAoIWUpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwlzd2l0Y2ggKGUtPnR5cGUpIHsN
CiAgICArCWNhc2UgRV9FUVVBTDoNCiAgICArCWNhc2UgRV9HRVE6DQogICAgKwljYXNlIEVfR1RI
Og0KICAgICsJY2FzZSBFX0xFUToNCiAgICArCWNhc2UgRV9MVEg6DQogICAgKwljYXNlIEVfVU5F
UVVBTDoNCiAgICArCWNhc2UgRV9TWU1CT0w6DQogICAgKwljYXNlIEVfTElTVDoNCiAgICArCQli
cmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJZS0+bGVmdC5leHByID0gZXhwcl90cmFuc2Zv
cm0oZS0+bGVmdC5leHByKTsNCiAgICArCQllLT5yaWdodC5leHByID0gZXhwcl90cmFuc2Zvcm0o
ZS0+cmlnaHQuZXhwcik7DQogICAgKwl9DQogICAgKw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7
DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwkJaWYgKGUtPmxlZnQuc3ltLT50eXBlICE9IFNf
Qk9PTEVBTikNCiAgICArCQkJYnJlYWs7DQogICAgKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX25vKSB7DQogICAgKwkJCWUtPnR5cGUgPSBFX05PVDsNCiAgICArCQkJZS0+bGVmdC5leHBy
ID0gZXhwcl9hbGxvY19zeW1ib2woZS0+bGVmdC5zeW0pOw0KICAgICsJCQllLT5yaWdodC5zeW0g
PSBOVUxMOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJaWYgKGUtPnJpZ2h0LnN5
bSA9PSAmc3ltYm9sX21vZCkgew0KICAgICsJCQlwcmludGYoImJvb2xlYW4gc3ltYm9sICVzIHRl
c3RlZCBmb3IgJ20nPyB0ZXN0IGZvcmNlZCB0byAnbidcbiIsIGUtPmxlZnQuc3ltLT5uYW1lKTsN
CiAgICArCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0KICAgICsJCQllLT5sZWZ0LnN5bSA9ICZzeW1i
b2xfbm87DQogICAgKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCX0NCiAgICArCQlpZiAoZS0+cmlnaHQuc3ltID09ICZzeW1ib2xfeWVzKSB7DQogICAgKwkJ
CWUtPnR5cGUgPSBFX1NZTUJPTDsNCiAgICArCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX1VORVFVQUw6
DQogICAgKwkJaWYgKGUtPmxlZnQuc3ltLT50eXBlICE9IFNfQk9PTEVBTikNCiAgICArCQkJYnJl
YWs7DQogICAgKwkJaWYgKGUtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX25vKSB7DQogICAgKwkJCWUt
PnR5cGUgPSBFX1NZTUJPTDsNCiAgICArCQkJZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICArCQkJ
YnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlmIChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF9tb2Qp
IHsNCiAgICArCQkJcHJpbnRmKCJib29sZWFuIHN5bWJvbCAlcyB0ZXN0ZWQgZm9yICdtJz8gdGVz
dCBmb3JjZWQgdG8gJ3knXG4iLCBlLT5sZWZ0LnN5bS0+bmFtZSk7DQogICAgKwkJCWUtPnR5cGUg
PSBFX1NZTUJPTDsNCiAgICArCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9sX3llczsNCiAgICArCQkJ
ZS0+cmlnaHQuc3ltID0gTlVMTDsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlm
IChlLT5yaWdodC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAgICArCQkJZS0+dHlwZSA9IEVfTk9U
Ow0KICAgICsJCQllLT5sZWZ0LmV4cHIgPSBleHByX2FsbG9jX3N5bWJvbChlLT5sZWZ0LnN5bSk7
DQogICAgKwkJCWUtPnJpZ2h0LnN5bSA9IE5VTEw7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0N
CiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9OT1Q6DQogICAgKwkJc3dpdGNoIChlLT5sZWZ0
LmV4cHItPnR5cGUpIHsNCiAgICArCQljYXNlIEVfTk9UOg0KICAgICsJCQkvLyAhIWEgLT4gYQ0K
ICAgICsJCQl0bXAgPSBlLT5sZWZ0LmV4cHItPmxlZnQuZXhwcjsNCiAgICArCQkJZnJlZShlLT5s
ZWZ0LmV4cHIpOw0KICAgICsJCQlmcmVlKGUpOw0KICAgICsJCQllID0gdG1wOw0KICAgICsJCQll
ID0gZXhwcl90cmFuc2Zvcm0oZSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgRV9FUVVB
TDoNCiAgICArCQljYXNlIEVfVU5FUVVBTDoNCiAgICArCQkJLy8gIWE9J3gnIC0+IGEhPSd4Jw0K
ICAgICsJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7DQogICAgKwkJCWZyZWUoZSk7DQogICAgKwkJCWUg
PSB0bXA7DQogICAgKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfRVFVQUwgPyBFX1VORVFVQUwg
OiBFX0VRVUFMOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEVfTEVROg0KICAgICsJCWNh
c2UgRV9HRVE6DQogICAgKwkJCS8vICFhPD0neCcgLT4gYT4neCcNCiAgICArCQkJdG1wID0gZS0+
bGVmdC5leHByOw0KICAgICsJCQlmcmVlKGUpOw0KICAgICsJCQllID0gdG1wOw0KICAgICsJCQll
LT50eXBlID0gZS0+dHlwZSA9PSBFX0xFUSA/IEVfR1RIIDogRV9MVEg7DQogICAgKwkJCWJyZWFr
Ow0KICAgICsJCWNhc2UgRV9MVEg6DQogICAgKwkJY2FzZSBFX0dUSDoNCiAgICArCQkJLy8gIWE8
J3gnIC0+IGE+PSd4Jw0KICAgICsJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7DQogICAgKwkJCWZyZWUo
ZSk7DQogICAgKwkJCWUgPSB0bXA7DQogICAgKwkJCWUtPnR5cGUgPSBlLT50eXBlID09IEVfTFRI
ID8gRV9HRVEgOiBFX0xFUTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBFX09SOg0KICAg
ICsJCQkvLyAhKGEgfHwgYikgLT4gIWEgJiYgIWINCiAgICArCQkJdG1wID0gZS0+bGVmdC5leHBy
Ow0KICAgICsJCQllLT50eXBlID0gRV9BTkQ7DQogICAgKwkJCWUtPnJpZ2h0LmV4cHIgPSBleHBy
X2FsbG9jX29uZShFX05PVCwgdG1wLT5yaWdodC5leHByKTsNCiAgICArCQkJdG1wLT50eXBlID0g
RV9OT1Q7DQogICAgKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgKwkJCWUgPSBleHBy
X3RyYW5zZm9ybShlKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBFX0FORDoNCiAgICAr
CQkJLy8gIShhICYmIGIpIC0+ICFhIHx8ICFiDQogICAgKwkJCXRtcCA9IGUtPmxlZnQuZXhwcjsN
CiAgICArCQkJZS0+dHlwZSA9IEVfT1I7DQogICAgKwkJCWUtPnJpZ2h0LmV4cHIgPSBleHByX2Fs
bG9jX29uZShFX05PVCwgdG1wLT5yaWdodC5leHByKTsNCiAgICArCQkJdG1wLT50eXBlID0gRV9O
T1Q7DQogICAgKwkJCXRtcC0+cmlnaHQuZXhwciA9IE5VTEw7DQogICAgKwkJCWUgPSBleHByX3Ry
YW5zZm9ybShlKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBFX1NZTUJPTDoNCiAgICAr
CQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0gPT0gJnN5bWJvbF95ZXMpIHsNCiAgICArCQkJ
CS8vICEneScgLT4gJ24nDQogICAgKwkJCQl0bXAgPSBlLT5sZWZ0LmV4cHI7DQogICAgKwkJCQlm
cmVlKGUpOw0KICAgICsJCQkJZSA9IHRtcDsNCiAgICArCQkJCWUtPnR5cGUgPSBFX1NZTUJPTDsN
CiAgICArCQkJCWUtPmxlZnQuc3ltID0gJnN5bWJvbF9ubzsNCiAgICArCQkJCWJyZWFrOw0KICAg
ICsJCQl9DQogICAgKwkJCWlmIChlLT5sZWZ0LmV4cHItPmxlZnQuc3ltID09ICZzeW1ib2xfbW9k
KSB7DQogICAgKwkJCQkvLyAhJ20nIC0+ICdtJw0KICAgICsJCQkJdG1wID0gZS0+bGVmdC5leHBy
Ow0KICAgICsJCQkJZnJlZShlKTsNCiAgICArCQkJCWUgPSB0bXA7DQogICAgKwkJCQllLT50eXBl
ID0gRV9TWU1CT0w7DQogICAgKwkJCQllLT5sZWZ0LnN5bSA9ICZzeW1ib2xfbW9kOw0KICAgICsJ
CQkJYnJlYWs7DQogICAgKwkJCX0NCiAgICArCQkJaWYgKGUtPmxlZnQuZXhwci0+bGVmdC5zeW0g
PT0gJnN5bWJvbF9ubykgew0KICAgICsJCQkJLy8gISduJyAtPiAneScNCiAgICArCQkJCXRtcCA9
IGUtPmxlZnQuZXhwcjsNCiAgICArCQkJCWZyZWUoZSk7DQogICAgKwkJCQllID0gdG1wOw0KICAg
ICsJCQkJZS0+dHlwZSA9IEVfU1lNQk9MOw0KICAgICsJCQkJZS0+bGVmdC5zeW0gPSAmc3ltYm9s
X3llczsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CWRlZmF1bHQ6DQogICAgKwkJCTsNCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZh
dWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArCXJldHVybiBlOw0KICAgICt9DQogICAgKw0K
ICAgICtpbnQgZXhwcl9jb250YWluc19zeW1ib2woc3RydWN0IGV4cHIgKmRlcCwgc3RydWN0IHN5
bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlpZiAoIWRlcCkNCiAgICArCQlyZXR1cm4gMDsNCiAg
ICArDQogICAgKwlzd2l0Y2ggKGRlcC0+dHlwZSkgew0KICAgICsJY2FzZSBFX0FORDoNCiAgICAr
CWNhc2UgRV9PUjoNCiAgICArCQlyZXR1cm4gZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5sZWZ0
LmV4cHIsIHN5bSkgfHwNCiAgICArCQkgICAgICAgZXhwcl9jb250YWluc19zeW1ib2woZGVwLT5y
aWdodC5leHByLCBzeW0pOw0KICAgICsJY2FzZSBFX1NZTUJPTDoNCiAgICArCQlyZXR1cm4gZGVw
LT5sZWZ0LnN5bSA9PSBzeW07DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwljYXNlIEVfR0VR
Og0KICAgICsJY2FzZSBFX0dUSDoNCiAgICArCWNhc2UgRV9MRVE6DQogICAgKwljYXNlIEVfTFRI
Og0KICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwkJcmV0dXJuIGRlcC0+bGVmdC5zeW0gPT0g
c3ltIHx8DQogICAgKwkJICAgICAgIGRlcC0+cmlnaHQuc3ltID09IHN5bTsNCiAgICArCWNhc2Ug
RV9OT1Q6DQogICAgKwkJcmV0dXJuIGV4cHJfY29udGFpbnNfc3ltYm9sKGRlcC0+bGVmdC5leHBy
LCBzeW0pOw0KICAgICsJZGVmYXVsdDoNCiAgICArCQk7DQogICAgKwl9DQogICAgKwlyZXR1cm4g
MDsNCiAgICArfQ0KICAgICsNCiAgICArYm9vbCBleHByX2RlcGVuZHNfc3ltYm9sKHN0cnVjdCBl
eHByICpkZXAsIHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJaWYgKCFkZXApDQog
ICAgKwkJcmV0dXJuIGZhbHNlOw0KICAgICsNCiAgICArCXN3aXRjaCAoZGVwLT50eXBlKSB7DQog
ICAgKwljYXNlIEVfQU5EOg0KICAgICsJCXJldHVybiBleHByX2RlcGVuZHNfc3ltYm9sKGRlcC0+
bGVmdC5leHByLCBzeW0pIHx8DQogICAgKwkJICAgICAgIGV4cHJfZGVwZW5kc19zeW1ib2woZGVw
LT5yaWdodC5leHByLCBzeW0pOw0KICAgICsJY2FzZSBFX1NZTUJPTDoNCiAgICArCQlyZXR1cm4g
ZGVwLT5sZWZ0LnN5bSA9PSBzeW07DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwkJaWYgKGRl
cC0+bGVmdC5zeW0gPT0gc3ltKSB7DQogICAgKwkJCWlmIChkZXAtPnJpZ2h0LnN5bSA9PSAmc3lt
Ym9sX3llcyB8fCBkZXAtPnJpZ2h0LnN5bSA9PSAmc3ltYm9sX21vZCkNCiAgICArCQkJCXJldHVy
biB0cnVlOw0KICAgICsJCX0NCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9VTkVRVUFMOg0K
ICAgICsJCWlmIChkZXAtPmxlZnQuc3ltID09IHN5bSkgew0KICAgICsJCQlpZiAoZGVwLT5yaWdo
dC5zeW0gPT0gJnN5bWJvbF9ubykNCiAgICArCQkJCXJldHVybiB0cnVlOw0KICAgICsJCX0NCiAg
ICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJOw0KICAgICsJfQ0KICAgICsgCXJl
dHVybiBmYWxzZTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogSW5zZXJ0cyBleHBs
aWNpdCBjb21wYXJpc29ucyBvZiB0eXBlICd0eXBlJyB0byBzeW1ib2wgJ3N5bScgaW50byB0aGUN
CiAgICArICogZXhwcmVzc2lvbiAnZScuDQogICAgKyAqDQogICAgKyAqIEV4YW1wbGVzIHRyYW5z
Zm9ybWF0aW9ucyBmb3IgdHlwZSA9PSBFX1VORVFVQUwsIHN5bSA9PSAmc3ltYm9sX25vOg0KICAg
ICsgKg0KICAgICsgKglBICAgICAgICAgICAgICAtPiAgQSE9bg0KICAgICsgKgkhQSAgICAgICAg
ICAgICAtPiAgQT1uDQogICAgKyAqCUEgJiYgQiAgICAgICAgIC0+ICAhKEE9biB8fCBCPW4pDQog
ICAgKyAqCUEgfHwgQiAgICAgICAgIC0+ICAhKEE9biAmJiBCPW4pDQogICAgKyAqCUEgJiYgKEIg
fHwgQykgIC0+ICAhKEE9biB8fCAoQj1uICYmIEM9bikpDQogICAgKyAqDQogICAgKyAqIEFsbG9j
YXRlcyBhbmQgcmV0dXJucyBhIG5ldyBleHByZXNzaW9uLg0KICAgICsgKi8NCiAgICArc3RydWN0
IGV4cHIgKmV4cHJfdHJhbnNfY29tcGFyZShzdHJ1Y3QgZXhwciAqZSwgZW51bSBleHByX3R5cGUg
dHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZXhwciAqZTEs
ICplMjsNCiAgICArDQogICAgKwlpZiAoIWUpIHsNCiAgICArCQllID0gZXhwcl9hbGxvY19zeW1i
b2woc3ltKTsNCiAgICArCQlpZiAodHlwZSA9PSBFX1VORVFVQUwpDQogICAgKwkJCWUgPSBleHBy
X2FsbG9jX29uZShFX05PVCwgZSk7DQogICAgKwkJcmV0dXJuIGU7DQogICAgKwl9DQogICAgKwlz
d2l0Y2ggKGUtPnR5cGUpIHsNCiAgICArCWNhc2UgRV9BTkQ6DQogICAgKwkJZTEgPSBleHByX3Ry
YW5zX2NvbXBhcmUoZS0+bGVmdC5leHByLCBFX0VRVUFMLCBzeW0pOw0KICAgICsJCWUyID0gZXhw
cl90cmFuc19jb21wYXJlKGUtPnJpZ2h0LmV4cHIsIEVfRVFVQUwsIHN5bSk7DQogICAgKwkJaWYg
KHN5bSA9PSAmc3ltYm9sX3llcykNCiAgICArCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBl
MSwgZTIpOw0KICAgICsJCWlmIChzeW0gPT0gJnN5bWJvbF9ubykNCiAgICArCQkJZSA9IGV4cHJf
YWxsb2NfdHdvKEVfT1IsIGUxLCBlMik7DQogICAgKwkJaWYgKHR5cGUgPT0gRV9VTkVRVUFMKQ0K
ICAgICsJCQllID0gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGUpOw0KICAgICsJCXJldHVybiBlOw0K
ICAgICsJY2FzZSBFX09SOg0KICAgICsJCWUxID0gZXhwcl90cmFuc19jb21wYXJlKGUtPmxlZnQu
ZXhwciwgRV9FUVVBTCwgc3ltKTsNCiAgICArCQllMiA9IGV4cHJfdHJhbnNfY29tcGFyZShlLT5y
aWdodC5leHByLCBFX0VRVUFMLCBzeW0pOw0KICAgICsJCWlmIChzeW0gPT0gJnN5bWJvbF95ZXMp
DQogICAgKwkJCWUgPSBleHByX2FsbG9jX3R3byhFX09SLCBlMSwgZTIpOw0KICAgICsJCWlmIChz
eW0gPT0gJnN5bWJvbF9ubykNCiAgICArCQkJZSA9IGV4cHJfYWxsb2NfdHdvKEVfQU5ELCBlMSwg
ZTIpOw0KICAgICsJCWlmICh0eXBlID09IEVfVU5FUVVBTCkNCiAgICArCQkJZSA9IGV4cHJfYWxs
b2Nfb25lKEVfTk9ULCBlKTsNCiAgICArCQlyZXR1cm4gZTsNCiAgICArCWNhc2UgRV9OT1Q6DQog
ICAgKwkJcmV0dXJuIGV4cHJfdHJhbnNfY29tcGFyZShlLT5sZWZ0LmV4cHIsIHR5cGUgPT0gRV9F
UVVBTCA/IEVfVU5FUVVBTCA6IEVfRVFVQUwsIHN5bSk7DQogICAgKwljYXNlIEVfVU5FUVVBTDoN
CiAgICArCWNhc2UgRV9MVEg6DQogICAgKwljYXNlIEVfTEVROg0KICAgICsJY2FzZSBFX0dUSDoN
CiAgICArCWNhc2UgRV9HRVE6DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwkJaWYgKHR5cGUg
PT0gRV9FUVVBTCkgew0KICAgICsJCQlpZiAoc3ltID09ICZzeW1ib2xfeWVzKQ0KICAgICsJCQkJ
cmV0dXJuIGV4cHJfY29weShlKTsNCiAgICArCQkJaWYgKHN5bSA9PSAmc3ltYm9sX21vZCkNCiAg
ICArCQkJCXJldHVybiBleHByX2FsbG9jX3N5bWJvbCgmc3ltYm9sX25vKTsNCiAgICArCQkJaWYg
KHN5bSA9PSAmc3ltYm9sX25vKQ0KICAgICsJCQkJcmV0dXJuIGV4cHJfYWxsb2Nfb25lKEVfTk9U
LCBleHByX2NvcHkoZSkpOw0KICAgICsJCX0gZWxzZSB7DQogICAgKwkJCWlmIChzeW0gPT0gJnN5
bWJvbF95ZXMpDQogICAgKwkJCQlyZXR1cm4gZXhwcl9hbGxvY19vbmUoRV9OT1QsIGV4cHJfY29w
eShlKSk7DQogICAgKwkJCWlmIChzeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgKwkJCQlyZXR1cm4g
ZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF95ZXMpOw0KICAgICsJCQlpZiAoc3ltID09ICZzeW1i
b2xfbm8pDQogICAgKwkJCQlyZXR1cm4gZXhwcl9jb3B5KGUpOw0KICAgICsJCX0NCiAgICArCQli
cmVhazsNCiAgICArCWNhc2UgRV9TWU1CT0w6DQogICAgKwkJcmV0dXJuIGV4cHJfYWxsb2NfY29t
cCh0eXBlLCBlLT5sZWZ0LnN5bSwgc3ltKTsNCiAgICArCWNhc2UgRV9MSVNUOg0KICAgICsJY2Fz
ZSBFX1JBTkdFOg0KICAgICsJY2FzZSBFX05PTkU6DQogICAgKwkJLyogcGFuaWMgKi87DQogICAg
Kwl9DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICArZW51bSBzdHJpbmdf
dmFsdWVfa2luZCB7DQogICAgKwlrX3N0cmluZywNCiAgICArCWtfc2lnbmVkLA0KICAgICsJa191
bnNpZ25lZCwNCiAgICArfTsNCiAgICArDQogICAgK3VuaW9uIHN0cmluZ192YWx1ZSB7DQogICAg
Kwl1bnNpZ25lZCBsb25nIGxvbmcgdTsNCiAgICArCXNpZ25lZCBsb25nIGxvbmcgczsNCiAgICAr
fTsNCiAgICArDQogICAgK3N0YXRpYyBlbnVtIHN0cmluZ192YWx1ZV9raW5kIGV4cHJfcGFyc2Vf
c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwNCiAgICArCQkJCQkJZW51bSBzeW1ib2xfdHlwZSB0eXBl
LA0KICAgICsJCQkJCQl1bmlvbiBzdHJpbmdfdmFsdWUgKnZhbCkNCiAgICArew0KICAgICsJY2hh
ciAqdGFpbDsNCiAgICArCWVudW0gc3RyaW5nX3ZhbHVlX2tpbmQga2luZDsNCiAgICArDQogICAg
KwllcnJubyA9IDA7DQogICAgKwlzd2l0Y2ggKHR5cGUpIHsNCiAgICArCWNhc2UgU19CT09MRUFO
Og0KICAgICsJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCXZhbC0+cyA9ICFzdHJjbXAoc3RyLCAi
biIpID8gMCA6DQogICAgKwkJCSAhc3RyY21wKHN0ciwgIm0iKSA/IDEgOg0KICAgICsJCQkgIXN0
cmNtcChzdHIsICJ5IikgPyAyIDogLTE7DQogICAgKwkJcmV0dXJuIGtfc2lnbmVkOw0KICAgICsJ
Y2FzZSBTX0lOVDoNCiAgICArCQl2YWwtPnMgPSBzdHJ0b2xsKHN0ciwgJnRhaWwsIDEwKTsNCiAg
ICArCQlraW5kID0ga19zaWduZWQ7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSEVYOg0K
ICAgICsJCXZhbC0+dSA9IHN0cnRvdWxsKHN0ciwgJnRhaWwsIDE2KTsNCiAgICArCQlraW5kID0g
a191bnNpZ25lZDsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJdmFsLT5z
ID0gc3RydG9sbChzdHIsICZ0YWlsLCAwKTsNCiAgICArCQlraW5kID0ga19zaWduZWQ7DQogICAg
KwkJYnJlYWs7DQogICAgKwl9DQogICAgKwlyZXR1cm4gIWVycm5vICYmICEqdGFpbCAmJiB0YWls
ID4gc3RyICYmIGlzeGRpZ2l0KHRhaWxbLTFdKQ0KICAgICsJICAgICAgID8ga2luZCA6IGtfc3Ry
aW5nOw0KICAgICt9DQogICAgKw0KICAgICt0cmlzdGF0ZSBleHByX2NhbGNfdmFsdWUoc3RydWN0
IGV4cHIgKmUpDQogICAgK3sNCiAgICArCXRyaXN0YXRlIHZhbDEsIHZhbDI7DQogICAgKwljb25z
dCBjaGFyICpzdHIxLCAqc3RyMjsNCiAgICArCWVudW0gc3RyaW5nX3ZhbHVlX2tpbmQgazEgPSBr
X3N0cmluZywgazIgPSBrX3N0cmluZzsNCiAgICArCXVuaW9uIHN0cmluZ192YWx1ZSBsdmFsID0g
e30sIHJ2YWwgPSB7fTsNCiAgICArCWludCByZXM7DQogICAgKw0KICAgICsJaWYgKCFlKQ0KICAg
ICsJCXJldHVybiB5ZXM7DQogICAgKw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7DQogICAgKwlj
YXNlIEVfU1lNQk9MOg0KICAgICsJCXN5bV9jYWxjX3ZhbHVlKGUtPmxlZnQuc3ltKTsNCiAgICAr
CQlyZXR1cm4gZS0+bGVmdC5zeW0tPmN1cnIudHJpOw0KICAgICsJY2FzZSBFX0FORDoNCiAgICAr
CQl2YWwxID0gZXhwcl9jYWxjX3ZhbHVlKGUtPmxlZnQuZXhwcik7DQogICAgKwkJdmFsMiA9IGV4
cHJfY2FsY192YWx1ZShlLT5yaWdodC5leHByKTsNCiAgICArCQlyZXR1cm4gRVhQUl9BTkQodmFs
MSwgdmFsMik7DQogICAgKwljYXNlIEVfT1I6DQogICAgKwkJdmFsMSA9IGV4cHJfY2FsY192YWx1
ZShlLT5sZWZ0LmV4cHIpOw0KICAgICsJCXZhbDIgPSBleHByX2NhbGNfdmFsdWUoZS0+cmlnaHQu
ZXhwcik7DQogICAgKwkJcmV0dXJuIEVYUFJfT1IodmFsMSwgdmFsMik7DQogICAgKwljYXNlIEVf
Tk9UOg0KICAgICsJCXZhbDEgPSBleHByX2NhbGNfdmFsdWUoZS0+bGVmdC5leHByKTsNCiAgICAr
CQlyZXR1cm4gRVhQUl9OT1QodmFsMSk7DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwljYXNl
IEVfR0VROg0KICAgICsJY2FzZSBFX0dUSDoNCiAgICArCWNhc2UgRV9MRVE6DQogICAgKwljYXNl
IEVfTFRIOg0KICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwkJYnJlYWs7DQogICAgKwlkZWZh
dWx0Og0KICAgICsJCXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiAlZD9cbiIsIGUtPnR5cGUpOw0K
ICAgICsJCXJldHVybiBubzsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW1fY2FsY192YWx1ZShl
LT5sZWZ0LnN5bSk7DQogICAgKwlzeW1fY2FsY192YWx1ZShlLT5yaWdodC5zeW0pOw0KICAgICsJ
c3RyMSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKGUtPmxlZnQuc3ltKTsNCiAgICArCXN0cjIgPSBz
eW1fZ2V0X3N0cmluZ192YWx1ZShlLT5yaWdodC5zeW0pOw0KICAgICsNCiAgICArCWlmIChlLT5s
ZWZ0LnN5bS0+dHlwZSAhPSBTX1NUUklORyB8fCBlLT5yaWdodC5zeW0tPnR5cGUgIT0gU19TVFJJ
TkcpIHsNCiAgICArCQlrMSA9IGV4cHJfcGFyc2Vfc3RyaW5nKHN0cjEsIGUtPmxlZnQuc3ltLT50
eXBlLCAmbHZhbCk7DQogICAgKwkJazIgPSBleHByX3BhcnNlX3N0cmluZyhzdHIyLCBlLT5yaWdo
dC5zeW0tPnR5cGUsICZydmFsKTsNCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoazEgPT0ga19z
dHJpbmcgfHwgazIgPT0ga19zdHJpbmcpDQogICAgKwkJcmVzID0gc3RyY21wKHN0cjEsIHN0cjIp
Ow0KICAgICsJZWxzZSBpZiAoazEgPT0ga191bnNpZ25lZCB8fCBrMiA9PSBrX3Vuc2lnbmVkKQ0K
ICAgICsJCXJlcyA9IChsdmFsLnUgPiBydmFsLnUpIC0gKGx2YWwudSA8IHJ2YWwudSk7DQogICAg
KwllbHNlIC8qIGlmIChrMSA9PSBrX3NpZ25lZCAmJiBrMiA9PSBrX3NpZ25lZCkgKi8NCiAgICAr
CQlyZXMgPSAobHZhbC5zID4gcnZhbC5zKSAtIChsdmFsLnMgPCBydmFsLnMpOw0KICAgICsNCiAg
ICArCXN3aXRjaChlLT50eXBlKSB7DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAgKwkJcmV0dXJu
IHJlcyA/IG5vIDogeWVzOw0KICAgICsJY2FzZSBFX0dFUToNCiAgICArCQlyZXR1cm4gcmVzID49
IDAgPyB5ZXMgOiBubzsNCiAgICArCWNhc2UgRV9HVEg6DQogICAgKwkJcmV0dXJuIHJlcyA+IDAg
PyB5ZXMgOiBubzsNCiAgICArCWNhc2UgRV9MRVE6DQogICAgKwkJcmV0dXJuIHJlcyA8PSAwID8g
eWVzIDogbm87DQogICAgKwljYXNlIEVfTFRIOg0KICAgICsJCXJldHVybiByZXMgPCAwID8geWVz
IDogbm87DQogICAgKwljYXNlIEVfVU5FUVVBTDoNCiAgICArCQlyZXR1cm4gcmVzID8geWVzIDog
bm87DQogICAgKwlkZWZhdWx0Og0KICAgICsJCXByaW50ZigiZXhwcl9jYWxjX3ZhbHVlOiByZWxh
dGlvbiAlZD9cbiIsIGUtPnR5cGUpOw0KICAgICsJCXJldHVybiBubzsNCiAgICArCX0NCiAgICAr
fQ0KICAgICsNCiAgICArc3RhdGljIGludCBleHByX2NvbXBhcmVfdHlwZShlbnVtIGV4cHJfdHlw
ZSB0MSwgZW51bSBleHByX3R5cGUgdDIpDQogICAgK3sNCiAgICArCWlmICh0MSA9PSB0MikNCiAg
ICArCQlyZXR1cm4gMDsNCiAgICArCXN3aXRjaCAodDEpIHsNCiAgICArCWNhc2UgRV9MRVE6DQog
ICAgKwljYXNlIEVfTFRIOg0KICAgICsJY2FzZSBFX0dFUToNCiAgICArCWNhc2UgRV9HVEg6DQog
ICAgKwkJaWYgKHQyID09IEVfRVFVQUwgfHwgdDIgPT0gRV9VTkVRVUFMKQ0KICAgICsJCQlyZXR1
cm4gMTsNCiAgICArCWNhc2UgRV9FUVVBTDoNCiAgICArCWNhc2UgRV9VTkVRVUFMOg0KICAgICsJ
CWlmICh0MiA9PSBFX05PVCkNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwljYXNlIEVfTk9UOg0K
ICAgICsJCWlmICh0MiA9PSBFX0FORCkNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwljYXNlIEVf
QU5EOg0KICAgICsJCWlmICh0MiA9PSBFX09SKQ0KICAgICsJCQlyZXR1cm4gMTsNCiAgICArCWNh
c2UgRV9PUjoNCiAgICArCQlpZiAodDIgPT0gRV9MSVNUKQ0KICAgICsJCQlyZXR1cm4gMTsNCiAg
ICArCWNhc2UgRV9MSVNUOg0KICAgICsJCWlmICh0MiA9PSAwKQ0KICAgICsJCQlyZXR1cm4gMTsN
CiAgICArCWRlZmF1bHQ6DQogICAgKwkJcmV0dXJuIC0xOw0KICAgICsJfQ0KICAgICsJcHJpbnRm
KCJbJWRndCVkP10iLCB0MSwgdDIpOw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQog
ICAgK3ZvaWQgZXhwcl9wcmludChzdHJ1Y3QgZXhwciAqZSwNCiAgICArCQl2b2lkICgqZm4pKHZv
aWQgKiwgc3RydWN0IHN5bWJvbCAqLCBjb25zdCBjaGFyICopLA0KICAgICsJCXZvaWQgKmRhdGEs
IGludCBwcmV2dG9rZW4pDQogICAgK3sNCiAgICArCWlmICghZSkgew0KICAgICsJCWZuKGRhdGEs
IE5VTEwsICJ5Iik7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmIChl
eHByX2NvbXBhcmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4gMCkNCiAgICArCQlmbihkYXRh
LCBOVUxMLCAiKCIpOw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7DQogICAgKwljYXNlIEVfU1lN
Qk9MOg0KICAgICsJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkNCiAgICArCQkJZm4oZGF0YSwgZS0+
bGVmdC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsNCiAgICArCQllbHNlDQogICAgKwkJCWZuKGRh
dGEsIE5VTEwsICI8Y2hvaWNlPiIpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX05PVDoN
CiAgICArCQlmbihkYXRhLCBOVUxMLCAiISIpOw0KICAgICsJCWV4cHJfcHJpbnQoZS0+bGVmdC5l
eHByLCBmbiwgZGF0YSwgRV9OT1QpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX0VRVUFM
Og0KICAgICsJCWlmIChlLT5sZWZ0LnN5bS0+bmFtZSkNCiAgICArCQkJZm4oZGF0YSwgZS0+bGVm
dC5zeW0sIGUtPmxlZnQuc3ltLT5uYW1lKTsNCiAgICArCQllbHNlDQogICAgKwkJCWZuKGRhdGEs
IE5VTEwsICI8Y2hvaWNlPiIpOw0KICAgICsJCWZuKGRhdGEsIE5VTEwsICI9Iik7DQogICAgKwkJ
Zm4oZGF0YSwgZS0+cmlnaHQuc3ltLCBlLT5yaWdodC5zeW0tPm5hbWUpOw0KICAgICsJCWJyZWFr
Ow0KICAgICsJY2FzZSBFX0xFUToNCiAgICArCWNhc2UgRV9MVEg6DQogICAgKwkJaWYgKGUtPmxl
ZnQuc3ltLT5uYW1lKQ0KICAgICsJCQlmbihkYXRhLCBlLT5sZWZ0LnN5bSwgZS0+bGVmdC5zeW0t
Pm5hbWUpOw0KICAgICsJCWVsc2UNCiAgICArCQkJZm4oZGF0YSwgTlVMTCwgIjxjaG9pY2U+Iik7
DQogICAgKwkJZm4oZGF0YSwgTlVMTCwgZS0+dHlwZSA9PSBFX0xFUSA/ICI8PSIgOiAiPCIpOw0K
ICAgICsJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsNCiAgICAr
CQlicmVhazsNCiAgICArCWNhc2UgRV9HRVE6DQogICAgKwljYXNlIEVfR1RIOg0KICAgICsJCWlm
IChlLT5sZWZ0LnN5bS0+bmFtZSkNCiAgICArCQkJZm4oZGF0YSwgZS0+bGVmdC5zeW0sIGUtPmxl
ZnQuc3ltLT5uYW1lKTsNCiAgICArCQllbHNlDQogICAgKwkJCWZuKGRhdGEsIE5VTEwsICI8Y2hv
aWNlPiIpOw0KICAgICsJCWZuKGRhdGEsIE5VTEwsIGUtPnR5cGUgPT0gRV9HRVEgPyAiPj0iIDog
Ij4iKTsNCiAgICArCQlmbihkYXRhLCBlLT5yaWdodC5zeW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7
DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIEVfVU5FUVVBTDoNCiAgICArCQlpZiAoZS0+bGVm
dC5zeW0tPm5hbWUpDQogICAgKwkJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+
bmFtZSk7DQogICAgKwkJZWxzZQ0KICAgICsJCQlmbihkYXRhLCBOVUxMLCAiPGNob2ljZT4iKTsN
CiAgICArCQlmbihkYXRhLCBOVUxMLCAiIT0iKTsNCiAgICArCQlmbihkYXRhLCBlLT5yaWdodC5z
eW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIEVfT1I6
DQogICAgKwkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX09SKTsNCiAgICAr
CQlmbihkYXRhLCBOVUxMLCAiIHx8ICIpOw0KICAgICsJCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhw
ciwgZm4sIGRhdGEsIEVfT1IpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX0FORDoNCiAg
ICArCQlleHByX3ByaW50KGUtPmxlZnQuZXhwciwgZm4sIGRhdGEsIEVfQU5EKTsNCiAgICArCQlm
bihkYXRhLCBOVUxMLCAiICYmICIpOw0KICAgICsJCWV4cHJfcHJpbnQoZS0+cmlnaHQuZXhwciwg
Zm4sIGRhdGEsIEVfQU5EKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9MSVNUOg0KICAg
ICsJCWZuKGRhdGEsIGUtPnJpZ2h0LnN5bSwgZS0+cmlnaHQuc3ltLT5uYW1lKTsNCiAgICArCQlp
ZiAoZS0+bGVmdC5leHByKSB7DQogICAgKwkJCWZuKGRhdGEsIE5VTEwsICIgXiAiKTsNCiAgICAr
CQkJZXhwcl9wcmludChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRhLCBFX0xJU1QpOw0KICAgICsJCX0N
CiAgICArCQlicmVhazsNCiAgICArCWNhc2UgRV9SQU5HRToNCiAgICArCQlmbihkYXRhLCBOVUxM
LCAiWyIpOw0KICAgICsJCWZuKGRhdGEsIGUtPmxlZnQuc3ltLCBlLT5sZWZ0LnN5bS0+bmFtZSk7
DQogICAgKwkJZm4oZGF0YSwgTlVMTCwgIiAiKTsNCiAgICArCQlmbihkYXRhLCBlLT5yaWdodC5z
eW0sIGUtPnJpZ2h0LnN5bS0+bmFtZSk7DQogICAgKwkJZm4oZGF0YSwgTlVMTCwgIl0iKTsNCiAg
ICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkgIHsNCiAgICArCQljaGFyIGJ1Zlsz
Ml07DQogICAgKwkJc3ByaW50ZihidWYsICI8dW5rbm93biB0eXBlICVkPiIsIGUtPnR5cGUpOw0K
ICAgICsJCWZuKGRhdGEsIE5VTEwsIGJ1Zik7DQogICAgKwkJYnJlYWs7DQogICAgKwkgIH0NCiAg
ICArCX0NCiAgICArCWlmIChleHByX2NvbXBhcmVfdHlwZShwcmV2dG9rZW4sIGUtPnR5cGUpID4g
MCkNCiAgICArCQlmbihkYXRhLCBOVUxMLCAiKSIpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0
aWMgdm9pZCBleHByX3ByaW50X2ZpbGVfaGVscGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1ib2wg
KnN5bSwgY29uc3QgY2hhciAqc3RyKQ0KICAgICt7DQogICAgKwl4ZndyaXRlKHN0ciwgc3RybGVu
KHN0ciksIDEsIGRhdGEpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIGV4cHJfZnByaW50KHN0
cnVjdCBleHByICplLCBGSUxFICpvdXQpDQogICAgK3sNCiAgICArCWV4cHJfcHJpbnQoZSwgZXhw
cl9wcmludF9maWxlX2hlbHBlciwgb3V0LCBFX05PTkUpOw0KICAgICt9DQogICAgKw0KICAgICtz
dGF0aWMgdm9pZCBleHByX3ByaW50X2dzdHJfaGVscGVyKHZvaWQgKmRhdGEsIHN0cnVjdCBzeW1i
b2wgKnN5bSwgY29uc3QgY2hhciAqc3RyKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZ3N0ciAqZ3Mg
PSAoc3RydWN0IGdzdHIqKWRhdGE7DQogICAgKwljb25zdCBjaGFyICpzeW1fc3RyID0gTlVMTDsN
CiAgICArDQogICAgKwlpZiAoc3ltKQ0KICAgICsJCXN5bV9zdHIgPSBzeW1fZ2V0X3N0cmluZ192
YWx1ZShzeW0pOw0KICAgICsNCiAgICArCWlmIChncy0+bWF4X3dpZHRoKSB7DQogICAgKwkJdW5z
aWduZWQgZXh0cmFfbGVuZ3RoID0gc3RybGVuKHN0cik7DQogICAgKwkJY29uc3QgY2hhciAqbGFz
dF9jciA9IHN0cnJjaHIoZ3MtPnMsICdcbicpOw0KICAgICsJCXVuc2lnbmVkIGxhc3RfbGluZV9s
ZW5ndGg7DQogICAgKw0KICAgICsJCWlmIChzeW1fc3RyKQ0KICAgICsJCQlleHRyYV9sZW5ndGgg
Kz0gNCArIHN0cmxlbihzeW1fc3RyKTsNCiAgICArDQogICAgKwkJaWYgKCFsYXN0X2NyKQ0KICAg
ICsJCQlsYXN0X2NyID0gZ3MtPnM7DQogICAgKw0KICAgICsJCWxhc3RfbGluZV9sZW5ndGggPSBz
dHJsZW4oZ3MtPnMpIC0gKGxhc3RfY3IgLSBncy0+cyk7DQogICAgKw0KICAgICsJCWlmICgobGFz
dF9saW5lX2xlbmd0aCArIGV4dHJhX2xlbmd0aCkgPiBncy0+bWF4X3dpZHRoKQ0KICAgICsJCQlz
dHJfYXBwZW5kKGdzLCAiXFxcbiIpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXN0cl9hcHBlbmQo
Z3MsIHN0cik7DQogICAgKwlpZiAoc3ltICYmIHN5bS0+dHlwZSAhPSBTX1VOS05PV04pDQogICAg
KwkJc3RyX3ByaW50ZihncywgIiBbPSVzXSIsIHN5bV9zdHIpOw0KICAgICt9DQogICAgKw0KICAg
ICt2b2lkIGV4cHJfZ3N0cl9wcmludChzdHJ1Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzKQ0K
ICAgICt7DQogICAgKwlleHByX3ByaW50KGUsIGV4cHJfcHJpbnRfZ3N0cl9oZWxwZXIsIGdzLCBF
X05PTkUpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBUcmFuc2Zvcm0gdGhlIHRv
cCBsZXZlbCAifHwiIHRva2VucyBpbnRvIG5ld2xpbmVzIGFuZCBwcmVwZW5kIGVhY2gNCiAgICAr
ICogbGluZSB3aXRoIGEgbWludXMuIFRoaXMgbWFrZXMgZXhwcmVzc2lvbnMgbXVjaCBlYXNpZXIg
dG8gcmVhZC4NCiAgICArICogU3VpdGFibGUgZm9yIHJldmVyc2UgZGVwZW5kZW5jeSBleHByZXNz
aW9ucy4NCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIGV4cHJfcHJpbnRfcmV2ZGVwKHN0cnVj
dCBleHByICplLA0KICAgICsJCQkgICAgICB2b2lkICgqZm4pKHZvaWQgKiwgc3RydWN0IHN5bWJv
bCAqLCBjb25zdCBjaGFyICopLA0KICAgICsJCQkgICAgICB2b2lkICpkYXRhLCB0cmlzdGF0ZSBw
cl90eXBlLCBjb25zdCBjaGFyICoqdGl0bGUpDQogICAgK3sNCiAgICArCWlmIChlLT50eXBlID09
IEVfT1IpIHsNCiAgICArCQlleHByX3ByaW50X3JldmRlcChlLT5sZWZ0LmV4cHIsIGZuLCBkYXRh
LCBwcl90eXBlLCB0aXRsZSk7DQogICAgKwkJZXhwcl9wcmludF9yZXZkZXAoZS0+cmlnaHQuZXhw
ciwgZm4sIGRhdGEsIHByX3R5cGUsIHRpdGxlKTsNCiAgICArCX0gZWxzZSBpZiAoZXhwcl9jYWxj
X3ZhbHVlKGUpID09IHByX3R5cGUpIHsNCiAgICArCQlpZiAoKnRpdGxlKSB7DQogICAgKwkJCWZu
KGRhdGEsIE5VTEwsICp0aXRsZSk7DQogICAgKwkJCSp0aXRsZSA9IE5VTEw7DQogICAgKwkJfQ0K
ICAgICsNCiAgICArCQlmbihkYXRhLCBOVUxMLCAiICAtICIpOw0KICAgICsJCWV4cHJfcHJpbnQo
ZSwgZm4sIGRhdGEsIEVfTk9ORSk7DQogICAgKwkJZm4oZGF0YSwgTlVMTCwgIlxuIik7DQogICAg
Kwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgZXhwcl9nc3RyX3ByaW50X3JldmRlcChzdHJ1
Y3QgZXhwciAqZSwgc3RydWN0IGdzdHIgKmdzLA0KICAgICsJCQkgICAgdHJpc3RhdGUgcHJfdHlw
ZSwgY29uc3QgY2hhciAqdGl0bGUpDQogICAgK3sNCiAgICArCWV4cHJfcHJpbnRfcmV2ZGVwKGUs
IGV4cHJfcHJpbnRfZ3N0cl9oZWxwZXIsIGdzLCBwcl90eXBlLCAmdGl0bGUpOw0KICAgICt9DQog
ICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9leHByLmggYi9zdXBwb3J0L2tjb25maWcv
ZXhwci5oDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi44ZGRl
NjViDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9leHByLmgN
CiAgICBAQCAtMCwwICsxLDMzMSBAQA0KICAgICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog
R1BMLTIuMCAqLw0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlw
cGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqLw0KICAgICsNCiAgICArI2lmbmRl
ZiBFWFBSX0gNCiAgICArI2RlZmluZSBFWFBSX0gNCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVz
cGx1cw0KICAgICtleHRlcm4gIkMiIHsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaW5jbHVk
ZSA8YXNzZXJ0Lmg+DQogICAgKyNpbmNsdWRlIDxzdGRpby5oPg0KICAgICsjaW5jbHVkZSAibGlz
dC5oIg0KICAgICsjaWZuZGVmIF9fY3BsdXNwbHVzDQogICAgKyNpbmNsdWRlIDxzdGRib29sLmg+
DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArc3RydWN0IGZpbGUgew0KICAgICsJc3RydWN0IGZp
bGUgKm5leHQ7DQogICAgKwlzdHJ1Y3QgZmlsZSAqcGFyZW50Ow0KICAgICsJY29uc3QgY2hhciAq
bmFtZTsNCiAgICArCWludCBsaW5lbm87DQogICAgK307DQogICAgKw0KICAgICt0eXBlZGVmIGVu
dW0gdHJpc3RhdGUgew0KICAgICsJbm8sIG1vZCwgeWVzDQogICAgK30gdHJpc3RhdGU7DQogICAg
Kw0KICAgICtlbnVtIGV4cHJfdHlwZSB7DQogICAgKwlFX05PTkUsIEVfT1IsIEVfQU5ELCBFX05P
VCwNCiAgICArCUVfRVFVQUwsIEVfVU5FUVVBTCwgRV9MVEgsIEVfTEVRLCBFX0dUSCwgRV9HRVEs
DQogICAgKwlFX0xJU1QsIEVfU1lNQk9MLCBFX1JBTkdFDQogICAgK307DQogICAgKw0KICAgICt1
bmlvbiBleHByX2RhdGEgew0KICAgICsJc3RydWN0IGV4cHIgKmV4cHI7DQogICAgKwlzdHJ1Y3Qg
c3ltYm9sICpzeW07DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgZXhwciB7DQogICAgKwll
bnVtIGV4cHJfdHlwZSB0eXBlOw0KICAgICsJdW5pb24gZXhwcl9kYXRhIGxlZnQsIHJpZ2h0Ow0K
ICAgICt9Ow0KICAgICsNCiAgICArI2RlZmluZSBFWFBSX09SKGRlcDEsIGRlcDIpCSgoKGRlcDEp
PihkZXAyKSk/KGRlcDEpOihkZXAyKSkNCiAgICArI2RlZmluZSBFWFBSX0FORChkZXAxLCBkZXAy
KQkoKChkZXAxKTwoZGVwMikpPyhkZXAxKTooZGVwMikpDQogICAgKyNkZWZpbmUgRVhQUl9OT1Qo
ZGVwKQkJKDItKGRlcCkpDQogICAgKw0KICAgICsjZGVmaW5lIGV4cHJfbGlzdF9mb3JfZWFjaF9z
eW0obCwgZSwgcykgXA0KICAgICsJZm9yIChlID0gKGwpOyBlICYmIChzID0gZS0+cmlnaHQuc3lt
KTsgZSA9IGUtPmxlZnQuZXhwcikNCiAgICArDQogICAgK3N0cnVjdCBleHByX3ZhbHVlIHsNCiAg
ICArCXN0cnVjdCBleHByICpleHByOw0KICAgICsJdHJpc3RhdGUgdHJpOw0KICAgICt9Ow0KICAg
ICsNCiAgICArc3RydWN0IHN5bWJvbF92YWx1ZSB7DQogICAgKwl2b2lkICp2YWw7DQogICAgKwl0
cmlzdGF0ZSB0cmk7DQogICAgK307DQogICAgKw0KICAgICtlbnVtIHN5bWJvbF90eXBlIHsNCiAg
ICArCVNfVU5LTk9XTiwgU19CT09MRUFOLCBTX1RSSVNUQVRFLCBTX0lOVCwgU19IRVgsIFNfU1RS
SU5HDQogICAgK307DQogICAgKw0KICAgICsvKiBlbnVtIHZhbHVlcyBhcmUgdXNlZCBhcyBpbmRl
eCB0byBzeW1ib2wuZGVmW10gKi8NCiAgICArZW51bSB7DQogICAgKwlTX0RFRl9VU0VSLAkJLyog
bWFpbiB1c2VyIHZhbHVlICovDQogICAgKwlTX0RFRl9BVVRPLAkJLyogdmFsdWVzIHJlYWQgZnJv
bSBhdXRvLmNvbmYgKi8NCiAgICArCVNfREVGX0RFRjMsCQkvKiBSZXNlcnZlZCBmb3IgVUkgdXNh
Z2UgKi8NCiAgICArCVNfREVGX0RFRjQsCQkvKiBSZXNlcnZlZCBmb3IgVUkgdXNhZ2UgKi8NCiAg
ICArCVNfREVGX0NPVU5UDQogICAgK307DQogICAgKw0KICAgICsvKg0KICAgICsgKiBSZXByZXNl
bnRzIGEgY29uZmlndXJhdGlvbiBzeW1ib2wuDQogICAgKyAqDQogICAgKyAqIENob2ljZXMgYXJl
IHJlcHJlc2VudGVkIGFzIGEgc3BlY2lhbCBraW5kIG9mIHN5bWJvbCBhbmQgaGF2ZSB0aGUNCiAg
ICArICogU1lNQk9MX0NIT0lDRSBiaXQgc2V0IGluICdmbGFncycuDQogICAgKyAqLw0KICAgICtz
dHJ1Y3Qgc3ltYm9sIHsNCiAgICArCS8qIFRoZSBuZXh0IHN5bWJvbCBpbiB0aGUgc2FtZSBidWNr
ZXQgaW4gdGhlIHN5bWJvbCBoYXNoIHRhYmxlICovDQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpuZXh0
Ow0KICAgICsNCiAgICArCS8qIFRoZSBuYW1lIG9mIHRoZSBzeW1ib2wsIGUuZy4gIkZPTyIgZm9y
ICdjb25maWcgRk9PJyAqLw0KICAgICsJY2hhciAqbmFtZTsNCiAgICArDQogICAgKwkvKiBTX0JP
T0xFQU4sIFNfVFJJU1RBVEUsIC4uLiAqLw0KICAgICsJZW51bSBzeW1ib2xfdHlwZSB0eXBlOw0K
ICAgICsNCiAgICArCS8qDQogICAgKwkgKiBUaGUgY2FsY3VsYXRlZCB2YWx1ZSBvZiB0aGUgc3lt
Ym9sLiBUaGUgU1lNQk9MX1ZBTElEIGJpdCBpcyBzZXQgaW4NCiAgICArCSAqICdmbGFncycgd2hl
biB0aGlzIGlzIHVwIHRvIGRhdGUuIE5vdGUgdGhhdCB0aGlzIHZhbHVlIG1pZ2h0IGRpZmZlcg0K
ICAgICsJICogZnJvbSB0aGUgdXNlciB2YWx1ZSBzZXQgaW4gZS5nLiBhIC5jb25maWcgZmlsZSwg
ZHVlIHRvIHZpc2liaWxpdHkuDQogICAgKwkgKi8NCiAgICArCXN0cnVjdCBzeW1ib2xfdmFsdWUg
Y3VycjsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogVmFsdWVzIGZvciB0aGUgc3ltYm9sIHBy
b3ZpZGVkIGZyb20gb3V0c2lkZS4gZGVmW1NfREVGX1VTRVJdIGhvbGRzDQogICAgKwkgKiB0aGUg
LmNvbmZpZyB2YWx1ZS4NCiAgICArCSAqLw0KICAgICsJc3RydWN0IHN5bWJvbF92YWx1ZSBkZWZb
U19ERUZfQ09VTlRdOw0KICAgICsNCiAgICArCS8qDQogICAgKwkgKiBBbiB1cHBlciBib3VuZCBv
biB0aGUgdHJpc3RhdGUgdmFsdWUgdGhlIHVzZXIgY2FuIHNldCBmb3IgdGhlIHN5bWJvbA0KICAg
ICsJICogaWYgaXQgaXMgYSBib29sZWFuIG9yIHRyaXN0YXRlLiBDYWxjdWxhdGVkIGZyb20gcHJv
bXB0IGRlcGVuZGVuY2llcywNCiAgICArCSAqIHdoaWNoIGFsc28gaW5oZXJpdCBkZXBlbmRlbmNp
ZXMgZnJvbSBlbmNsb3NpbmcgbWVudXMsIGNob2ljZXMsIGFuZA0KICAgICsJICogaWZzLiBJZiAn
bicsIHRoZSB1c2VyIHZhbHVlIHdpbGwgYmUgaWdub3JlZC4NCiAgICArCSAqDQogICAgKwkgKiBT
eW1ib2xzIGxhY2tpbmcgcHJvbXB0cyBhbHdheXMgaGF2ZSB2aXNpYmlsaXR5ICduJy4NCiAgICAr
CSAqLw0KICAgICsJdHJpc3RhdGUgdmlzaWJsZTsNCiAgICArDQogICAgKwkvKiBTWU1CT0xfKiBm
bGFncyAqLw0KICAgICsJaW50IGZsYWdzOw0KICAgICsNCiAgICArCS8qIExpc3Qgb2YgcHJvcGVy
dGllcy4gU2VlIHByb3BfdHlwZS4gKi8NCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAg
ICArDQogICAgKwkvKiBEZXBlbmRlbmNpZXMgZnJvbSBlbmNsb3NpbmcgbWVudXMsIGNob2ljZXMs
IGFuZCBpZnMgKi8NCiAgICArCXN0cnVjdCBleHByX3ZhbHVlIGRpcl9kZXA7DQogICAgKw0KICAg
ICsJLyogUmV2ZXJzZSBkZXBlbmRlbmNpZXMgdGhyb3VnaCBiZWluZyBzZWxlY3RlZCBieSBvdGhl
ciBzeW1ib2xzICovDQogICAgKwlzdHJ1Y3QgZXhwcl92YWx1ZSByZXZfZGVwOw0KICAgICsNCiAg
ICArCS8qDQogICAgKwkgKiAiV2VhayIgcmV2ZXJzZSBkZXBlbmRlbmNpZXMgdGhyb3VnaCBiZWlu
ZyBpbXBsaWVkIGJ5IG90aGVyIHN5bWJvbHMNCiAgICArCSAqLw0KICAgICsJc3RydWN0IGV4cHJf
dmFsdWUgaW1wbGllZDsNCiAgICArfTsNCiAgICArDQogICAgKyNkZWZpbmUgZm9yX2FsbF9zeW1i
b2xzKGksIHN5bSkgZm9yIChpID0gMDsgaSA8IFNZTUJPTF9IQVNIU0laRTsgaSsrKSBmb3IgKHN5
bSA9IHN5bWJvbF9oYXNoW2ldOyBzeW07IHN5bSA9IHN5bS0+bmV4dCkNCiAgICArDQogICAgKyNk
ZWZpbmUgU1lNQk9MX0NPTlNUICAgICAgMHgwMDAxICAvKiBzeW1ib2wgaXMgY29uc3QgKi8NCiAg
ICArI2RlZmluZSBTWU1CT0xfQ0hFQ0sgICAgICAweDAwMDggIC8qIHVzZWQgZHVyaW5nIGRlcGVu
ZGVuY3kgY2hlY2tpbmcgKi8NCiAgICArI2RlZmluZSBTWU1CT0xfQ0hPSUNFICAgICAweDAwMTAg
IC8qIHN0YXJ0IG9mIGEgY2hvaWNlIGJsb2NrIChudWxsIG5hbWUpICovDQogICAgKyNkZWZpbmUg
U1lNQk9MX0NIT0lDRVZBTCAgMHgwMDIwICAvKiB1c2VkIGFzIGEgdmFsdWUgaW4gYSBjaG9pY2Ug
YmxvY2sgKi8NCiAgICArI2RlZmluZSBTWU1CT0xfVkFMSUQgICAgICAweDAwODAgIC8qIHNldCB3
aGVuIHN5bWJvbC5jdXJyIGlzIGNhbGN1bGF0ZWQgKi8NCiAgICArI2RlZmluZSBTWU1CT0xfT1BU
SU9OQUwgICAweDAxMDAgIC8qIGNob2ljZSBpcyBvcHRpb25hbCAtIHZhbHVlcyBjYW4gYmUgJ24n
ICovDQogICAgKyNkZWZpbmUgU1lNQk9MX1dSSVRFICAgICAgMHgwMjAwICAvKiB3cml0ZSBzeW1i
b2wgdG8gZmlsZSAoS0NPTkZJR19DT05GSUcpICovDQogICAgKyNkZWZpbmUgU1lNQk9MX0NIQU5H
RUQgICAgMHgwNDAwICAvKiA/ICovDQogICAgKyNkZWZpbmUgU1lNQk9MX05PX1dSSVRFICAgMHgx
MDAwICAvKiBTeW1ib2wgZm9yIGludGVybmFsIHVzZSBvbmx5OyBpdCB3aWxsIG5vdCBiZSB3cml0
dGVuICovDQogICAgKyNkZWZpbmUgU1lNQk9MX0NIRUNLRUQgICAgMHgyMDAwICAvKiB1c2VkIGR1
cmluZyBkZXBlbmRlbmN5IGNoZWNraW5nICovDQogICAgKyNkZWZpbmUgU1lNQk9MX1dBUk5FRCAg
ICAgMHg4MDAwICAvKiB3YXJuaW5nIGhhcyBiZWVuIGlzc3VlZCAqLw0KICAgICsNCiAgICArLyog
U2V0IHdoZW4gc3ltYm9sLmRlZltdIGlzIHVzZWQgKi8NCiAgICArI2RlZmluZSBTWU1CT0xfREVG
ICAgICAgICAweDEwMDAwICAvKiBGaXJzdCBiaXQgb2YgU1lNQk9MX0RFRiAqLw0KICAgICsjZGVm
aW5lIFNZTUJPTF9ERUZfVVNFUiAgIDB4MTAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZfVVNFUl0g
aXMgdmFsaWQgKi8NCiAgICArI2RlZmluZSBTWU1CT0xfREVGX0FVVE8gICAweDIwMDAwICAvKiBz
eW1ib2wuZGVmW1NfREVGX0FVVE9dIGlzIHZhbGlkICovDQogICAgKyNkZWZpbmUgU1lNQk9MX0RF
RjMgICAgICAgMHg0MDAwMCAgLyogc3ltYm9sLmRlZltTX0RFRl8zXSBpcyB2YWxpZCAqLw0KICAg
ICsjZGVmaW5lIFNZTUJPTF9ERUY0ICAgICAgIDB4ODAwMDAgIC8qIHN5bWJvbC5kZWZbU19ERUZf
NF0gaXMgdmFsaWQgKi8NCiAgICArDQogICAgKy8qIGNob2ljZSB2YWx1ZXMgbmVlZCB0byBiZSBz
ZXQgYmVmb3JlIGNhbGN1bGF0aW5nIHRoaXMgc3ltYm9sIHZhbHVlICovDQogICAgKyNkZWZpbmUg
U1lNQk9MX05FRURfU0VUX0NIT0lDRV9WQUxVRVMgIDB4MTAwMDAwDQogICAgKw0KICAgICsvKiBT
ZXQgc3ltYm9sIHRvIHkgaWYgYWxsbm9jb25maWc7IHVzZWQgZm9yIHN5bWJvbHMgdGhhdCBoaWRl
IG90aGVycyAqLw0KICAgICsjZGVmaW5lIFNZTUJPTF9BTExOT0NPTkZJR19ZIDB4MjAwMDAwDQog
ICAgKw0KICAgICsjZGVmaW5lIFNZTUJPTF9NQVhMRU5HVEgJMjU2DQogICAgKyNkZWZpbmUgU1lN
Qk9MX0hBU0hTSVpFCQk5OTczDQogICAgKw0KICAgICsvKiBBIHByb3BlcnR5IHJlcHJlc2VudCB0
aGUgY29uZmlnIG9wdGlvbnMgdGhhdCBjYW4gYmUgYXNzb2NpYXRlZA0KICAgICsgKiB3aXRoIGEg
Y29uZmlnICJzeW1ib2wiLg0KICAgICsgKiBTYW1wbGU6DQogICAgKyAqIGNvbmZpZyBGT08NCiAg
ICArICogICAgICAgICBkZWZhdWx0IHkNCiAgICArICogICAgICAgICBwcm9tcHQgImZvbyBwcm9t
cHQiDQogICAgKyAqICAgICAgICAgc2VsZWN0IEJBUg0KICAgICsgKiBjb25maWcgQkFaDQogICAg
KyAqICAgICAgICAgaW50ICJCQVogVmFsdWUiDQogICAgKyAqICAgICAgICAgcmFuZ2UgMS4uMjU1
DQogICAgKyAqDQogICAgKyAqIFBsZWFzZSwgYWxzbyBjaGVjayBwYXJzZXIueTpwcmludF9zeW1i
b2woKSB3aGVuIG1vZGlmeWluZyB0aGUNCiAgICArICogbGlzdCBvZiBwcm9wZXJ0eSB0eXBlcyEN
CiAgICArICovDQogICAgK2VudW0gcHJvcF90eXBlIHsNCiAgICArCVBfVU5LTk9XTiwNCiAgICAr
CVBfUFJPTVBULCAgIC8qIHByb21wdCAiZm9vIHByb21wdCIgb3IgIkJBWiBWYWx1ZSIgKi8NCiAg
ICArCVBfQ09NTUVOVCwgIC8qIHRleHQgYXNzb2NpYXRlZCB3aXRoIGEgY29tbWVudCAqLw0KICAg
ICsJUF9NRU5VLCAgICAgLyogcHJvbXB0IGFzc29jaWF0ZWQgd2l0aCBhIG1lbnUgb3IgbWVudWNv
bmZpZyBzeW1ib2wgKi8NCiAgICArCVBfREVGQVVMVCwgIC8qIGRlZmF1bHQgeSAqLw0KICAgICsJ
UF9DSE9JQ0UsICAgLyogY2hvaWNlIHZhbHVlICovDQogICAgKwlQX1NFTEVDVCwgICAvKiBzZWxl
Y3QgQkFSICovDQogICAgKwlQX0lNUExZLCAgICAvKiBpbXBseSBCQVIgKi8NCiAgICArCVBfUkFO
R0UsICAgIC8qIHJhbmdlIDcuLjEwMCAoZm9yIGEgc3ltYm9sKSAqLw0KICAgICsJUF9TWU1CT0ws
ICAgLyogd2hlcmUgYSBzeW1ib2wgaXMgZGVmaW5lZCAqLw0KICAgICt9Ow0KICAgICsNCiAgICAr
c3RydWN0IHByb3BlcnR5IHsNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqbmV4dDsgICAgIC8qIG5l
eHQgcHJvcGVydHkgLSBudWxsIGlmIGxhc3QgKi8NCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsg
ICAgICAgIC8qIHRoZSBzeW1ib2wgZm9yIHdoaWNoIHRoZSBwcm9wZXJ0eSBpcyBhc3NvY2lhdGVk
ICovDQogICAgKwllbnVtIHByb3BfdHlwZSB0eXBlOyAgICAgICAvKiB0eXBlIG9mIHByb3BlcnR5
ICovDQogICAgKwljb25zdCBjaGFyICp0ZXh0OyAgICAgICAgICAvKiB0aGUgcHJvbXB0IHZhbHVl
IC0gUF9QUk9NUFQsIFBfTUVOVSwgUF9DT01NRU5UICovDQogICAgKwlzdHJ1Y3QgZXhwcl92YWx1
ZSB2aXNpYmxlOw0KICAgICsJc3RydWN0IGV4cHIgKmV4cHI7ICAgICAgICAgLyogdGhlIG9wdGlv
bmFsIGNvbmRpdGlvbmFsIHBhcnQgb2YgdGhlIHByb3BlcnR5ICovDQogICAgKwlzdHJ1Y3QgbWVu
dSAqbWVudTsgICAgICAgICAvKiB0aGUgbWVudSB0aGUgcHJvcGVydHkgYXJlIGFzc29jaWF0ZWQg
d2l0aA0KICAgICsJICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdmFsaWQgZm9yOiBQX1NF
TEVDVCwgUF9SQU5HRSwgUF9DSE9JQ0UsDQogICAgKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiBQX1BST01QVCwgUF9ERUZBVUxULCBQX01FTlUsIFBfQ09NTUVOVCAqLw0KICAgICsJc3Ry
dWN0IGZpbGUgKmZpbGU7ICAgICAgICAgLyogd2hhdCBmaWxlIHdhcyB0aGlzIHByb3BlcnR5IGRl
ZmluZWQgKi8NCiAgICArCWludCBsaW5lbm87ICAgICAgICAgICAgICAgIC8qIHdoYXQgbGluZW5v
IHdhcyB0aGlzIHByb3BlcnR5IGRlZmluZWQgKi8NCiAgICArfTsNCiAgICArDQogICAgKyNkZWZp
bmUgZm9yX2FsbF9wcm9wZXJ0aWVzKHN5bSwgc3QsIHRvaykgXA0KICAgICsJZm9yIChzdCA9IHN5
bS0+cHJvcDsgc3Q7IHN0ID0gc3QtPm5leHQpIFwNCiAgICArCQlpZiAoc3QtPnR5cGUgPT0gKHRv
aykpDQogICAgKyNkZWZpbmUgZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHN0KSBmb3JfYWxsX3Byb3Bl
cnRpZXMoc3ltLCBzdCwgUF9ERUZBVUxUKQ0KICAgICsjZGVmaW5lIGZvcl9hbGxfY2hvaWNlcyhz
eW0sIHN0KSBmb3JfYWxsX3Byb3BlcnRpZXMoc3ltLCBzdCwgUF9DSE9JQ0UpDQogICAgKyNkZWZp
bmUgZm9yX2FsbF9wcm9tcHRzKHN5bSwgc3QpIFwNCiAgICArCWZvciAoc3QgPSBzeW0tPnByb3A7
IHN0OyBzdCA9IHN0LT5uZXh0KSBcDQogICAgKwkJaWYgKHN0LT50ZXh0KQ0KICAgICsNCiAgICAr
LyoNCiAgICArICogUmVwcmVzZW50cyBhIG5vZGUgaW4gdGhlIG1lbnUgdHJlZSwgYXMgc2VlbiBp
biBlLmcuIG1lbnVjb25maWcgKHRob3VnaCB1c2VkDQogICAgKyAqIGZvciBhbGwgZnJvbnQgZW5k
cykuIEVhY2ggc3ltYm9sLCBtZW51LCBldGMuIGRlZmluZWQgaW4gdGhlIEtjb25maWcgZmlsZXMN
CiAgICArICogZ2V0cyBhIG5vZGUuIEEgc3ltYm9sIGRlZmluZWQgaW4gbXVsdGlwbGUgbG9jYXRp
b25zIGdldHMgb25lIG5vZGUgYXQgZWFjaA0KICAgICsgKiBsb2NhdGlvbi4NCiAgICArICovDQog
ICAgK3N0cnVjdCBtZW51IHsNCiAgICArCS8qIFRoZSBuZXh0IG1lbnUgbm9kZSBhdCB0aGUgc2Ft
ZSBsZXZlbCAqLw0KICAgICsJc3RydWN0IG1lbnUgKm5leHQ7DQogICAgKw0KICAgICsJLyogVGhl
IHBhcmVudCBtZW51IG5vZGUsIGNvcnJlc3BvbmRpbmcgdG8gZS5nLiBhIG1lbnUgb3IgY2hvaWNl
ICovDQogICAgKwlzdHJ1Y3QgbWVudSAqcGFyZW50Ow0KICAgICsNCiAgICArCS8qIFRoZSBmaXJz
dCBjaGlsZCBtZW51IG5vZGUsIGZvciBlLmcuIG1lbnVzIGFuZCBjaG9pY2VzICovDQogICAgKwlz
dHJ1Y3QgbWVudSAqbGlzdDsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogVGhlIHN5bWJvbCBh
c3NvY2lhdGVkIHdpdGggdGhlIG1lbnUgbm9kZS4gQ2hvaWNlcyBhcmUgaW1wbGVtZW50ZWQgYXMN
CiAgICArCSAqIGEgc3BlY2lhbCBraW5kIG9mIHN5bWJvbC4gTlVMTCBmb3IgbWVudXMsIGNvbW1l
bnRzLCBhbmQgaWZzLg0KICAgICsJICovDQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAg
Kw0KICAgICsJLyoNCiAgICArCSAqIFRoZSBwcm9tcHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2Rl
LiBUaGlzIGhvbGRzIHRoZSBwcm9tcHQgZm9yIGENCiAgICArCSAqIHN5bWJvbCBhcyB3ZWxsIGFz
IHRoZSB0ZXh0IGZvciBhIG1lbnUgb3IgY29tbWVudCwgYWxvbmcgd2l0aCB0aGUNCiAgICArCSAq
IHR5cGUgKFBfUFJPTVBULCBQX01FTlUsIGV0Yy4pDQogICAgKwkgKi8NCiAgICArCXN0cnVjdCBw
cm9wZXJ0eSAqcHJvbXB0Ow0KICAgICsNCiAgICArCS8qDQogICAgKwkgKiAndmlzaWJsZSBpZicg
ZGVwZW5kZW5jaWVzLiBJZiBtb3JlIHRoYW4gb25lIGlzIGdpdmVuLCB0aGV5IHdpbGwgYmUNCiAg
ICArCSAqIEFORGVkIHRvZ2V0aGVyLg0KICAgICsJICovDQogICAgKwlzdHJ1Y3QgZXhwciAqdmlz
aWJpbGl0eTsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogT3JkaW5hcnkgZGVwZW5kZW5jaWVz
IGZyb20gZS5nLiAnZGVwZW5kcyBvbicgYW5kICdpZicsIEFORGVkDQogICAgKwkgKiB0b2dldGhl
cg0KICAgICsJICovDQogICAgKwlzdHJ1Y3QgZXhwciAqZGVwOw0KICAgICsNCiAgICArCS8qIE1F
TlVfKiBmbGFncyAqLw0KICAgICsJdW5zaWduZWQgaW50IGZsYWdzOw0KICAgICsNCiAgICArCS8q
IEFueSBoZWxwIHRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBub2RlICovDQogICAgKwljaGFyICpo
ZWxwOw0KICAgICsNCiAgICArCS8qIFRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgbWVudSBub2RlIGFw
cGVhcnMgaW4gdGhlIEtjb25maWcgZmlsZXMgKi8NCiAgICArCXN0cnVjdCBmaWxlICpmaWxlOw0K
ICAgICsJaW50IGxpbmVubzsNCiAgICArDQogICAgKwkvKiBGb3IgdXNlIGJ5IGZyb250IGVuZHMg
dGhhdCBuZWVkIHRvIHN0b3JlIGF1eGlsaWFyeSBkYXRhICovDQogICAgKwl2b2lkICpkYXRhOw0K
ICAgICt9Ow0KICAgICsNCiAgICArLyoNCiAgICArICogU2V0IG9uIGEgbWVudSBub2RlIHdoZW4g
dGhlIGNvcnJlc3BvbmRpbmcgc3ltYm9sIGNoYW5nZXMgc3RhdGUgaW4gc29tZSB3YXkuDQogICAg
KyAqIENhbiBiZSBjaGVja2VkIGJ5IGZyb250IGVuZHMuDQogICAgKyAqLw0KICAgICsjZGVmaW5l
IE1FTlVfQ0hBTkdFRAkJMHgwMDAxDQogICAgKw0KICAgICsjZGVmaW5lIE1FTlVfUk9PVAkJMHgw
MDAyDQogICAgKw0KICAgICtzdHJ1Y3QganVtcF9rZXkgew0KICAgICsJc3RydWN0IGxpc3RfaGVh
ZCBlbnRyaWVzOw0KICAgICsJc2l6ZV90IG9mZnNldDsNCiAgICArCXN0cnVjdCBtZW51ICp0YXJn
ZXQ7DQogICAgKwlpbnQgaW5kZXg7DQogICAgK307DQogICAgKw0KICAgICsjZGVmaW5lIEpVTVBf
TkIJCQk5DQogICAgKw0KICAgICtleHRlcm4gc3RydWN0IGZpbGUgKmZpbGVfbGlzdDsNCiAgICAr
ZXh0ZXJuIHN0cnVjdCBmaWxlICpjdXJyZW50X2ZpbGU7DQogICAgK3N0cnVjdCBmaWxlICpsb29r
dXBfZmlsZShjb25zdCBjaGFyICpuYW1lKTsNCiAgICArDQogICAgK2V4dGVybiBzdHJ1Y3Qgc3lt
Ym9sIHN5bWJvbF95ZXMsIHN5bWJvbF9ubywgc3ltYm9sX21vZDsNCiAgICArZXh0ZXJuIHN0cnVj
dCBzeW1ib2wgKm1vZHVsZXNfc3ltOw0KICAgICtleHRlcm4gc3RydWN0IHN5bWJvbCAqc3ltX2Rl
ZmNvbmZpZ19saXN0Ow0KICAgICtleHRlcm4gaW50IGNkZWJ1ZzsNCiAgICArc3RydWN0IGV4cHIg
KmV4cHJfYWxsb2Nfc3ltYm9sKHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgK3N0cnVjdCBleHBy
ICpleHByX2FsbG9jX29uZShlbnVtIGV4cHJfdHlwZSB0eXBlLCBzdHJ1Y3QgZXhwciAqY2UpOw0K
ICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9hbGxvY190d28oZW51bSBleHByX3R5cGUgdHlwZSwgc3Ry
dWN0IGV4cHIgKmUxLCBzdHJ1Y3QgZXhwciAqZTIpOw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9h
bGxvY19jb21wKGVudW0gZXhwcl90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnMxLCBzdHJ1Y3Qg
c3ltYm9sICpzMik7DQogICAgK3N0cnVjdCBleHByICpleHByX2FsbG9jX2FuZChzdHJ1Y3QgZXhw
ciAqZTEsIHN0cnVjdCBleHByICplMik7DQogICAgK3N0cnVjdCBleHByICpleHByX2FsbG9jX29y
KHN0cnVjdCBleHByICplMSwgc3RydWN0IGV4cHIgKmUyKTsNCiAgICArc3RydWN0IGV4cHIgKmV4
cHJfY29weShjb25zdCBzdHJ1Y3QgZXhwciAqb3JnKTsNCiAgICArdm9pZCBleHByX2ZyZWUoc3Ry
dWN0IGV4cHIgKmUpOw0KICAgICt2b2lkIGV4cHJfZWxpbWluYXRlX2VxKHN0cnVjdCBleHByICoq
ZXAxLCBzdHJ1Y3QgZXhwciAqKmVwMik7DQogICAgK3RyaXN0YXRlIGV4cHJfY2FsY192YWx1ZShz
dHJ1Y3QgZXhwciAqZSk7DQogICAgK3N0cnVjdCBleHByICpleHByX3RyYW5zX2Jvb2woc3RydWN0
IGV4cHIgKmUpOw0KICAgICtzdHJ1Y3QgZXhwciAqZXhwcl9lbGltaW5hdGVfZHVwcyhzdHJ1Y3Qg
ZXhwciAqZSk7DQogICAgK3N0cnVjdCBleHByICpleHByX3RyYW5zZm9ybShzdHJ1Y3QgZXhwciAq
ZSk7DQogICAgK2ludCBleHByX2NvbnRhaW5zX3N5bWJvbChzdHJ1Y3QgZXhwciAqZGVwLCBzdHJ1
Y3Qgc3ltYm9sICpzeW0pOw0KICAgICtib29sIGV4cHJfZGVwZW5kc19zeW1ib2woc3RydWN0IGV4
cHIgKmRlcCwgc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICArc3RydWN0IGV4cHIgKmV4cHJfdHJh
bnNfY29tcGFyZShzdHJ1Y3QgZXhwciAqZSwgZW51bSBleHByX3R5cGUgdHlwZSwgc3RydWN0IHN5
bWJvbCAqc3ltKTsNCiAgICArDQogICAgK3ZvaWQgZXhwcl9mcHJpbnQoc3RydWN0IGV4cHIgKmUs
IEZJTEUgKm91dCk7DQogICAgK3N0cnVjdCBnc3RyOyAvKiBmb3J3YXJkICovDQogICAgK3ZvaWQg
ZXhwcl9nc3RyX3ByaW50KHN0cnVjdCBleHByICplLCBzdHJ1Y3QgZ3N0ciAqZ3MpOw0KICAgICt2
b2lkIGV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3RydWN0IGV4cHIgKmUsIHN0cnVjdCBnc3RyICpn
cywNCiAgICArCQkJICAgIHRyaXN0YXRlIHByX3R5cGUsIGNvbnN0IGNoYXIgKnRpdGxlKTsNCiAg
ICArDQogICAgK3N0YXRpYyBpbmxpbmUgaW50IGV4cHJfaXNfeWVzKHN0cnVjdCBleHByICplKQ0K
ICAgICt7DQogICAgKwlyZXR1cm4gIWUgfHwgKGUtPnR5cGUgPT0gRV9TWU1CT0wgJiYgZS0+bGVm
dC5zeW0gPT0gJnN5bWJvbF95ZXMpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW5saW5l
IGludCBleHByX2lzX25vKHN0cnVjdCBleHByICplKQ0KICAgICt7DQogICAgKwlyZXR1cm4gZSAm
JiAoZS0+dHlwZSA9PSBFX1NZTUJPTCAmJiBlLT5sZWZ0LnN5bSA9PSAmc3ltYm9sX25vKTsNCiAg
ICArfQ0KICAgICsNCiAgICArI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgK30NCiAgICArI2VuZGlm
DQogICAgKw0KICAgICsjZW5kaWYgLyogRVhQUl9IICovDQogICAgZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy9maXhkZXAuYyBiL3N1cHBvcnQva2NvbmZpZy9maXhkZXAuYw0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uOTdhZmI3MA0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvZml4ZGVwLmMNCiAgICBAQCAtMCwwICsx
LDM4MCBAQA0KICAgICsvKg0KICAgICsgKiAiT3B0aW1pemUiIGEgbGlzdCBvZiBkZXBlbmRlbmNp
ZXMgYXMgc3BpdCBvdXQgYnkgZ2NjIC1NRA0KICAgICsgKiBmb3IgdGhlIGtlcm5lbCBidWlsZA0K
ICAgICsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICArICoNCiAgICArICogQXV0aG9yICAgICAg
IEthaSBHZXJtYXNjaGV3c2tpDQogICAgKyAqIENvcHlyaWdodCAgICAyMDAyIGJ5IEthaSBHZXJt
YXNjaGV3c2tpICA8a2FpLmdlcm1hc2NoZXdza2lAZ214LmRlPg0KICAgICsgKg0KICAgICsgKiBU
aGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhl
IHRlcm1zDQogICAgKyAqIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jw
b3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuDQogICAgKyAqDQogICAgKyAqDQogICAgKyAqIElu
dHJvZHVjdGlvbjoNCiAgICArICoNCiAgICArICogZ2NjIHByb2R1Y2VzIGEgdmVyeSBuaWNlIGFu
ZCBjb3JyZWN0IGxpc3Qgb2YgZGVwZW5kZW5jaWVzIHdoaWNoDQogICAgKyAqIHRlbGxzIG1ha2Ug
d2hlbiB0byByZW1ha2UgYSBmaWxlLg0KICAgICsgKg0KICAgICsgKiBUbyB1c2UgdGhpcyBsaXN0
IGFzLWlzIGhvd2V2ZXIgaGFzIHRoZSBkcmF3YmFjayB0aGF0IHZpcnR1YWxseQ0KICAgICsgKiBl
dmVyeSBmaWxlIGluIHRoZSBrZXJuZWwgaW5jbHVkZXMgYXV0b2NvbmYuaC4NCiAgICArICoNCiAg
ICArICogSWYgdGhlIHVzZXIgcmUtcnVucyBtYWtlICpjb25maWcsIGF1dG9jb25mLmggd2lsbCBi
ZQ0KICAgICsgKiByZWdlbmVyYXRlZC4gIG1ha2Ugbm90aWNlcyB0aGF0IGFuZCB3aWxsIHJlYnVp
bGQgZXZlcnkgZmlsZSB3aGljaA0KICAgICsgKiBpbmNsdWRlcyBhdXRvY29uZi5oLCBpLmUuIGJh
c2ljYWxseSBhbGwgZmlsZXMuIFRoaXMgaXMgZXh0cmVtZWx5DQogICAgKyAqIGFubm95aW5nIGlm
IHRoZSB1c2VyIGp1c3QgY2hhbmdlZCBDT05GSUdfSElTX0RSSVZFUiBmcm9tIG4gdG8gbS4NCiAg
ICArICoNCiAgICArICogU28gd2UgcGxheSB0aGUgc2FtZSB0cmljayB0aGF0ICJta2RlcCIgcGxh
eWVkIGJlZm9yZS4gV2UgcmVwbGFjZQ0KICAgICsgKiB0aGUgZGVwZW5kZW5jeSBvbiBhdXRvY29u
Zi5oIGJ5IGEgZGVwZW5kZW5jeSBvbiBldmVyeSBjb25maWcNCiAgICArICogb3B0aW9uIHdoaWNo
IGlzIG1lbnRpb25lZCBpbiBhbnkgb2YgdGhlIGxpc3RlZCBwcmVyZXF1aXNpdGVzLg0KICAgICsg
Kg0KICAgICsgKiBrY29uZmlnIHBvcHVsYXRlcyBhIHRyZWUgaW4gaW5jbHVkZS9jb25maWcvIHdp
dGggYW4gZW1wdHkgZmlsZQ0KICAgICsgKiBmb3IgZWFjaCBjb25maWcgc3ltYm9sIGFuZCB3aGVu
IHRoZSBjb25maWd1cmF0aW9uIGlzIHVwZGF0ZWQNCiAgICArICogdGhlIGZpbGVzIHJlcHJlc2Vu
dGluZyBjaGFuZ2VkIGNvbmZpZyBvcHRpb25zIGFyZSB0b3VjaGVkDQogICAgKyAqIHdoaWNoIHRo
ZW4gbGV0IG1ha2UgcGljayB1cCB0aGUgY2hhbmdlcyBhbmQgdGhlIGZpbGVzIHRoYXQgdXNlDQog
ICAgKyAqIHRoZSBjb25maWcgc3ltYm9scyBhcmUgcmVidWlsdC4NCiAgICArICoNCiAgICArICog
U28gaWYgdGhlIHVzZXIgY2hhbmdlcyBoaXMgQ09ORklHX0hJU19EUklWRVIgb3B0aW9uLCBvbmx5
IHRoZSBvYmplY3RzDQogICAgKyAqIHdoaWNoIGRlcGVuZCBvbiAiaW5jbHVkZS9jb25maWcvaGlz
L2RyaXZlci5oIiB3aWxsIGJlIHJlYnVpbHQsDQogICAgKyAqIHNvIG1vc3QgbGlrZWx5IG9ubHkg
aGlzIGRyaXZlciA7LSkNCiAgICArICoNCiAgICArICogVGhlIGlkZWEgYWJvdmUgZGF0ZXMsIGJ5
IHRoZSB3YXksIGJhY2sgdG8gTWljaGFlbCBFIENoYXN0YWluLCBBRkFJSy4NCiAgICArICoNCiAg
ICArICogU28gdG8gZ2V0IGRlcGVuZGVuY2llcyByaWdodCwgdGhlcmUgYXJlIHR3byBpc3N1ZXM6
DQogICAgKyAqIG8gaWYgYW55IG9mIHRoZSBmaWxlcyB0aGUgY29tcGlsZXIgcmVhZCBjaGFuZ2Vk
LCB3ZSBuZWVkIHRvIHJlYnVpbGQNCiAgICArICogbyBpZiB0aGUgY29tbWFuZCBsaW5lIGdpdmVu
IHRvIHRoZSBjb21waWxlIHRoZSBmaWxlIGNoYW5nZWQsIHdlDQogICAgKyAqICAgYmV0dGVyIHJl
YnVpbGQgYXMgd2VsbC4NCiAgICArICoNCiAgICArICogVGhlIGZvcm1lciBpcyBoYW5kbGVkIGJ5
IHVzaW5nIHRoZSAtTUQgb3V0cHV0LCB0aGUgbGF0ZXIgYnkgc2F2aW5nDQogICAgKyAqIHRoZSBj
b21tYW5kIGxpbmUgdXNlZCB0byBjb21waWxlIHRoZSBvbGQgb2JqZWN0IGFuZCBjb21wYXJpbmcg
aXQNCiAgICArICogdG8gdGhlIG9uZSB3ZSB3b3VsZCBub3cgdXNlLg0KICAgICsgKg0KICAgICsg
KiBBZ2FpbiwgYWxzbyB0aGlzIGlkZWEgaXMgcHJldHR5IG9sZCBhbmQgaGFzIGJlZW4gZGlzY3Vz
c2VkIG9uDQogICAgKyAqIGtidWlsZC1kZXZlbCBhIGxvbmcgdGltZSBhZ28uIEkgZG9uJ3QgaGF2
ZSBhIHNlbnNpYmx5IHdvcmtpbmcNCiAgICArICogaW50ZXJuZXQgY29ubmVjdGlvbiByaWdodCBu
b3csIHNvIEkgcmF0aGVyIGRvbid0IG1lbnRpb24gbmFtZXMNCiAgICArICogd2l0aG91dCBkb3Vi
bGUgY2hlY2tpbmcuDQogICAgKyAqDQogICAgKyAqIFRoaXMgY29kZSBoZXJlIGhhcyBiZWVuIGJh
c2VkIHBhcnRpYWxseSBiYXNlZCBvbiBta2RlcC5jLCB3aGljaA0KICAgICsgKiBzYXlzIHRoZSBm
b2xsb3dpbmcgYWJvdXQgaXRzIGhpc3Rvcnk6DQogICAgKyAqDQogICAgKyAqICAgQ29weXJpZ2h0
IGFiYW5kb25lZCwgTWljaGFlbCBDaGFzdGFpbiwgPG1haWx0bzptZWNAc2hvdXQubmV0Pi4NCiAg
ICArICogICBUaGlzIGlzIGEgQyB2ZXJzaW9uIG9mIHN5bmNkZXAucGwgYnkgV2VybmVyIEFsbWVz
YmVyZ2VyLg0KICAgICsgKg0KICAgICsgKg0KICAgICsgKiBJdCBpcyBpbnZva2VkIGFzDQogICAg
KyAqDQogICAgKyAqICAgZml4ZGVwIDxkZXBmaWxlPiA8dGFyZ2V0PiA8Y21kbGluZT4NCiAgICAr
ICoNCiAgICArICogYW5kIHdpbGwgcmVhZCB0aGUgZGVwZW5kZW5jeSBmaWxlIDxkZXBmaWxlPg0K
ICAgICsgKg0KICAgICsgKiBUaGUgdHJhbnNmb3JtZWQgZGVwZW5kZW5jeSBzbmlwcGVkIGlzIHdy
aXR0ZW4gdG8gc3Rkb3V0Lg0KICAgICsgKg0KICAgICsgKiBJdCBmaXJzdCBnZW5lcmF0ZXMgYSBs
aW5lDQogICAgKyAqDQogICAgKyAqICAgY21kXzx0YXJnZXQ+ID0gPGNtZGxpbmU+DQogICAgKyAq
DQogICAgKyAqIGFuZCB0aGVuIGJhc2ljYWxseSBjb3BpZXMgdGhlIC48dGFyZ2V0Pi5kIGZpbGUg
dG8gc3Rkb3V0LCBpbiB0aGUNCiAgICArICogcHJvY2VzcyBmaWx0ZXJpbmcgb3V0IHRoZSBkZXBl
bmRlbmN5IG9uIGF1dG9jb25mLmggYW5kIGFkZGluZw0KICAgICsgKiBkZXBlbmRlbmNpZXMgb24g
aW5jbHVkZS9jb25maWcvbXkvb3B0aW9uLmggZm9yIGV2ZXJ5DQogICAgKyAqIENPTkZJR19NWV9P
UFRJT04gZW5jb3VudGVyZWQgaW4gYW55IG9mIHRoZSBwcmVyZXF1aXNpdGVzLg0KICAgICsgKg0K
ICAgICsgKiBJdCB3aWxsIGFsc28gZmlsdGVyIG91dCBhbGwgdGhlIGRlcGVuZGVuY2llcyBvbiAq
LnZlci4gV2UgbmVlZA0KICAgICsgKiB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZ2VuZXJhdGVkIHZl
cnNpb24gY2hlY2tzdW0gYXJlIGdsb2JhbGx5IHVwDQogICAgKyAqIHRvIGRhdGUgYmVmb3JlIGV2
ZW4gc3RhcnRpbmcgdGhlIHJlY3Vyc2l2ZSBidWlsZCwgc28gaXQncyB0b28gbGF0ZQ0KICAgICsg
KiBhdCB0aGlzIHBvaW50IGFueXdheS4NCiAgICArICoNCiAgICArICogV2UgZG9uJ3QgZXZlbiB0
cnkgdG8gcmVhbGx5IHBhcnNlIHRoZSBoZWFkZXIgZmlsZXMsIGJ1dA0KICAgICsgKiBtZXJlbHkg
Z3JlcCwgaS5lLiBpZiBDT05GSUdfRk9PIGlzIG1lbnRpb25lZCBpbiBhIGNvbW1lbnQsIGl0IHdp
bGwNCiAgICArICogYmUgcGlja2VkIHVwIGFzIHdlbGwuIEl0J3Mgbm90IGEgcHJvYmxlbSB3aXRo
IHJlc3BlY3QgdG8NCiAgICArICogY29ycmVjdG5lc3MsIHNpbmNlIHRoYXQgY2FuIG9ubHkgZ2l2
ZSB0b28gbWFueSBkZXBlbmRlbmNpZXMsIHRodXMNCiAgICArICogd2UgY2Fubm90IG1pc3MgYSBy
ZWJ1aWxkLiBTaW5jZSBwZW9wbGUgdGVuZCB0byBub3QgbWVudGlvbiB0b3RhbGx5DQogICAgKyAq
IHVucmVsYXRlZCBDT05GSUdfIG9wdGlvbnMgYWxsIG92ZXIgdGhlIHBsYWNlLCBpdCdzIG5vdCBh
bg0KICAgICsgKiBlZmZpY2llbmN5IHByb2JsZW0gZWl0aGVyLg0KICAgICsgKg0KICAgICsgKiAo
Tm90ZTogaXQnZCBiZSBlYXN5IHRvIHBvcnQgb3ZlciB0aGUgY29tcGxldGUgbWtkZXAgc3RhdGUg
bWFjaGluZSwNCiAgICArICogIGJ1dCBJIGRvbid0IHRoaW5rIHRoZSBhZGRlZCBjb21wbGV4aXR5
IGlzIHdvcnRoIGl0KQ0KICAgICsgKi8NCiAgICArDQogICAgKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4NCiAgICArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogICAgKyNpbmNsdWRlIDx1bmlzdGQuaD4N
CiAgICArI2luY2x1ZGUgPGZjbnRsLmg+DQogICAgKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAr
I2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1
ZGUgPGN0eXBlLmg+DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQ0KICAgICt7
DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiBmaXhkZXAgPGRlcGZpbGU+IDx0YXJnZXQ+
IDxjbWRsaW5lPlxuIik7DQogICAgKwlleGl0KDEpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0K
ICAgICsgKiBQcmludCBvdXQgYSBkZXBlbmRlbmN5IHBhdGggZnJvbSBhIHN5bWJvbCBuYW1lDQog
ICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9kZXAoY29uc3QgY2hhciAqbSwgaW50IHNs
ZW4sIGNvbnN0IGNoYXIgKmRpcikNCiAgICArew0KICAgICsJaW50IGMsIHByZXZfYyA9ICcvJywg
aTsNCiAgICArDQogICAgKwlwcmludGYoIiAgICAkKHdpbGRjYXJkICVzLyIsIGRpcik7DQogICAg
Kwlmb3IgKGkgPSAwOyBpIDwgc2xlbjsgaSsrKSB7DQogICAgKwkJYyA9IG1baV07DQogICAgKwkJ
aWYgKGMgPT0gJ18nKQ0KICAgICsJCQljID0gJy8nOw0KICAgICsJCWVsc2UNCiAgICArCQkJYyA9
IHRvbG93ZXIoYyk7DQogICAgKwkJaWYgKGMgIT0gJy8nIHx8IHByZXZfYyAhPSAnLycpDQogICAg
KwkJCXB1dGNoYXIoYyk7DQogICAgKwkJcHJldl9jID0gYzsNCiAgICArCX0NCiAgICArCXByaW50
ZigiLmgpIFxcXG4iKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IGl0ZW0gew0KICAgICsJ
c3RydWN0IGl0ZW0JKm5leHQ7DQogICAgKwl1bnNpZ25lZCBpbnQJbGVuOw0KICAgICsJdW5zaWdu
ZWQgaW50CWhhc2g7DQogICAgKwljaGFyCQluYW1lWzBdOw0KICAgICt9Ow0KICAgICsNCiAgICAr
I2RlZmluZSBIQVNIU1ogMjU2DQogICAgK3N0YXRpYyBzdHJ1Y3QgaXRlbSAqaGFzaHRhYltIQVNI
U1pdOw0KICAgICsNCiAgICArc3RhdGljIHVuc2lnbmVkIGludCBzdHJoYXNoKGNvbnN0IGNoYXIg
KnN0ciwgdW5zaWduZWQgaW50IHN6KQ0KICAgICt7DQogICAgKwkvKiBmbnYzMiBoYXNoICovDQog
ICAgKwl1bnNpZ25lZCBpbnQgaSwgaGFzaCA9IDIxNjYxMzYyNjFVOw0KICAgICsNCiAgICArCWZv
ciAoaSA9IDA7IGkgPCBzejsgaSsrKQ0KICAgICsJCWhhc2ggPSAoaGFzaCBeIHN0cltpXSkgKiAw
eDAxMDAwMTkzOw0KICAgICsJcmV0dXJuIGhhc2g7DQogICAgK30NCiAgICArDQogICAgKy8qDQog
ICAgKyAqIExvb2t1cCBhIHZhbHVlIGluIHRoZSBjb25maWd1cmF0aW9uIHN0cmluZy4NCiAgICAr
ICovDQogICAgK3N0YXRpYyBpbnQgaXNfZGVmaW5lZF9jb25maWcoY29uc3QgY2hhciAqbmFtZSwg
aW50IGxlbiwgdW5zaWduZWQgaW50IGhhc2gpDQogICAgK3sNCiAgICArCXN0cnVjdCBpdGVtICph
dXg7DQogICAgKw0KICAgICsJZm9yIChhdXggPSBoYXNodGFiW2hhc2ggJSBIQVNIU1pdOyBhdXg7
IGF1eCA9IGF1eC0+bmV4dCkgew0KICAgICsJCWlmIChhdXgtPmhhc2ggPT0gaGFzaCAmJiBhdXgt
PmxlbiA9PSBsZW4gJiYNCiAgICArCQkgICAgbWVtY21wKGF1eC0+bmFtZSwgbmFtZSwgbGVuKSA9
PSAwKQ0KICAgICsJCQlyZXR1cm4gMTsNCiAgICArCX0NCiAgICArCXJldHVybiAwOw0KICAgICt9
DQogICAgKw0KICAgICsvKg0KICAgICsgKiBBZGQgYSBuZXcgdmFsdWUgdG8gdGhlIGNvbmZpZ3Vy
YXRpb24gc3RyaW5nLg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgZGVmaW5lX2NvbmZpZyhj
b25zdCBjaGFyICpuYW1lLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgaGFzaCkNCiAgICArew0KICAg
ICsJc3RydWN0IGl0ZW0gKmF1eCA9IG1hbGxvYyhzaXplb2YoKmF1eCkgKyBsZW4pOw0KICAgICsN
CiAgICArCWlmICghYXV4KSB7DQogICAgKwkJcGVycm9yKCJmaXhkZXA6bWFsbG9jIik7DQogICAg
KwkJZXhpdCgxKTsNCiAgICArCX0NCiAgICArCW1lbWNweShhdXgtPm5hbWUsIG5hbWUsIGxlbik7
DQogICAgKwlhdXgtPmxlbiA9IGxlbjsNCiAgICArCWF1eC0+aGFzaCA9IGhhc2g7DQogICAgKwlh
dXgtPm5leHQgPSBoYXNodGFiW2hhc2ggJSBIQVNIU1pdOw0KICAgICsJaGFzaHRhYltoYXNoICUg
SEFTSFNaXSA9IGF1eDsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogUmVjb3JkIHRo
ZSB1c2Ugb2YgYSBDT05GSUdfKiB3b3JkLg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgdXNl
X2NvbmZpZyhjb25zdCBjaGFyICptLCBpbnQgc2xlbikNCiAgICArew0KICAgICsJdW5zaWduZWQg
aW50IGhhc2ggPSBzdHJoYXNoKG0sIHNsZW4pOw0KICAgICsNCiAgICArCWlmIChpc19kZWZpbmVk
X2NvbmZpZyhtLCBzbGVuLCBoYXNoKSkNCiAgICArCSAgICByZXR1cm47DQogICAgKw0KICAgICsJ
ZGVmaW5lX2NvbmZpZyhtLCBzbGVuLCBoYXNoKTsNCiAgICArCXByaW50X2RlcChtLCBzbGVuLCAi
aW5jbHVkZS9jb25maWciKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogdGVzdCBpZiBzIGVuZHMg
aW4gc3ViICovDQogICAgK3N0YXRpYyBpbnQgc3RyX2VuZHNfd2l0aChjb25zdCBjaGFyICpzLCBp
bnQgc2xlbiwgY29uc3QgY2hhciAqc3ViKQ0KICAgICt7DQogICAgKwlpbnQgc3VibGVuID0gc3Ry
bGVuKHN1Yik7DQogICAgKw0KICAgICsJaWYgKHN1YmxlbiA+IHNsZW4pDQogICAgKwkJcmV0dXJu
IDA7DQogICAgKw0KICAgICsJcmV0dXJuICFtZW1jbXAocyArIHNsZW4gLSBzdWJsZW4sIHN1Yiwg
c3VibGVuKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgcGFyc2VfY29uZmlnX2Zp
bGUoY29uc3QgY2hhciAqcCkNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqcSwgKnI7DQogICAg
Kwljb25zdCBjaGFyICpzdGFydCA9IHA7DQogICAgKw0KICAgICsJd2hpbGUgKChwID0gc3Ryc3Ry
KHAsICJDT05GSUdfIikpKSB7DQogICAgKwkJaWYgKHAgPiBzdGFydCAmJiAoaXNhbG51bShwWy0x
XSkgfHwgcFstMV0gPT0gJ18nKSkgew0KICAgICsJCQlwICs9IDc7DQogICAgKwkJCWNvbnRpbnVl
Ow0KICAgICsJCX0NCiAgICArCQlwICs9IDc7DQogICAgKwkJcSA9IHA7DQogICAgKwkJd2hpbGUg
KCpxICYmIChpc2FsbnVtKCpxKSB8fCAqcSA9PSAnXycpKQ0KICAgICsJCQlxKys7DQogICAgKwkJ
aWYgKHN0cl9lbmRzX3dpdGgocCwgcSAtIHAsICJfTU9EVUxFIikpDQogICAgKwkJCXIgPSBxIC0g
NzsNCiAgICArCQllbHNlDQogICAgKwkJCXIgPSBxOw0KICAgICsJCWlmIChyID4gcCkNCiAgICAr
CQkJdXNlX2NvbmZpZyhwLCByIC0gcCk7DQogICAgKwkJcCA9IHE7DQogICAgKwl9DQogICAgK30N
CiAgICArDQogICAgK3N0YXRpYyB2b2lkICpyZWFkX2ZpbGUoY29uc3QgY2hhciAqZmlsZW5hbWUp
DQogICAgK3sNCiAgICArCXN0cnVjdCBzdGF0IHN0Ow0KICAgICsJaW50IGZkOw0KICAgICsJY2hh
ciAqYnVmOw0KICAgICsNCiAgICArCWZkID0gb3BlbihmaWxlbmFtZSwgT19SRE9OTFkpOw0KICAg
ICsJaWYgKGZkIDwgMCkgew0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiZml4ZGVwOiBlcnJvciBv
cGVuaW5nIGZpbGU6ICIpOw0KICAgICsJCXBlcnJvcihmaWxlbmFtZSk7DQogICAgKwkJZXhpdCgy
KTsNCiAgICArCX0NCiAgICArCWlmIChmc3RhdChmZCwgJnN0KSA8IDApIHsNCiAgICArCQlmcHJp
bnRmKHN0ZGVyciwgImZpeGRlcDogZXJyb3IgZnN0YXQnaW5nIGZpbGU6ICIpOw0KICAgICsJCXBl
cnJvcihmaWxlbmFtZSk7DQogICAgKwkJZXhpdCgyKTsNCiAgICArCX0NCiAgICArCWJ1ZiA9IG1h
bGxvYyhzdC5zdF9zaXplICsgMSk7DQogICAgKwlpZiAoIWJ1Zikgew0KICAgICsJCXBlcnJvcigi
Zml4ZGVwOiBtYWxsb2MiKTsNCiAgICArCQlleGl0KDIpOw0KICAgICsJfQ0KICAgICsJaWYgKHJl
YWQoZmQsIGJ1Ziwgc3Quc3Rfc2l6ZSkgIT0gc3Quc3Rfc2l6ZSkgew0KICAgICsJCXBlcnJvcigi
Zml4ZGVwOiByZWFkIik7DQogICAgKwkJZXhpdCgyKTsNCiAgICArCX0NCiAgICArCWJ1ZltzdC5z
dF9zaXplXSA9ICdcMCc7DQogICAgKwljbG9zZShmZCk7DQogICAgKw0KICAgICsJcmV0dXJuIGJ1
ZjsNCiAgICArfQ0KICAgICsNCiAgICArLyogSWdub3JlIGNlcnRhaW4gZGVwZW5kZW5jaWVzICov
DQogICAgK3N0YXRpYyBpbnQgaXNfaWdub3JlZF9maWxlKGNvbnN0IGNoYXIgKnMsIGludCBsZW4p
DQogICAgK3sNCiAgICArCXJldHVybiBzdHJfZW5kc193aXRoKHMsIGxlbiwgImluY2x1ZGUvZ2Vu
ZXJhdGVkL2F1dG9jb25mLmgiKSB8fA0KICAgICsJICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVu
LCAiaW5jbHVkZS9nZW5lcmF0ZWQvYXV0b2tzeW1zLmgiKSB8fA0KICAgICsJICAgICAgIHN0cl9l
bmRzX3dpdGgocywgbGVuLCAiYnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fA0KICAgICsJ
ICAgICAgIHN0cl9lbmRzX3dpdGgocywgbGVuLCAiLnZlciIpOw0KICAgICt9DQogICAgKw0KICAg
ICsvKg0KICAgICsgKiBJbXBvcnRhbnQ6IFRoZSBiZWxvdyBnZW5lcmF0ZWQgc291cmNlX2Zvby5v
IGFuZCBkZXBzX2Zvby5vIHZhcmlhYmxlDQogICAgKyAqIGFzc2lnbm1lbnRzIGFyZSBwYXJzZWQg
bm90IG9ubHkgYnkgbWFrZSwgYnV0IGFsc28gYnkgdGhlIHJhdGhlciBzaW1wbGUNCiAgICArICog
cGFyc2VyIGluIHNjcmlwdHMvbW9kL3N1bXZlcnNpb24uYy4NCiAgICArICovDQogICAgK3N0YXRp
YyB2b2lkIHBhcnNlX2RlcF9maWxlKGNoYXIgKm0sIGNvbnN0IGNoYXIgKnRhcmdldCkNCiAgICAr
ew0KICAgICsJY2hhciAqcDsNCiAgICArCWludCBpc19sYXN0LCBpc190YXJnZXQ7DQogICAgKwlp
bnQgc2F3X2FueV90YXJnZXQgPSAwOw0KICAgICsJaW50IGlzX2ZpcnN0X2RlcCA9IDA7DQogICAg
Kwl2b2lkICpidWY7DQogICAgKw0KICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQkvKiBTa2lwIGFu
eSAid2hpdGUgc3BhY2UiICovDQogICAgKwkJd2hpbGUgKCptID09ICcgJyB8fCAqbSA9PSAnXFwn
IHx8ICptID09ICdcbicpDQogICAgKwkJCW0rKzsNCiAgICArDQogICAgKwkJaWYgKCEqbSkNCiAg
ICArCQkJYnJlYWs7DQogICAgKw0KICAgICsJCS8qIEZpbmQgbmV4dCAid2hpdGUgc3BhY2UiICov
DQogICAgKwkJcCA9IG07DQogICAgKwkJd2hpbGUgKCpwICYmICpwICE9ICcgJyAmJiAqcCAhPSAn
XFwnICYmICpwICE9ICdcbicpDQogICAgKwkJCXArKzsNCiAgICArCQlpc19sYXN0ID0gKCpwID09
ICdcMCcpOw0KICAgICsJCS8qIElzIHRoZSB0b2tlbiB3ZSBmb3VuZCBhIHRhcmdldCBuYW1lPyAq
Lw0KICAgICsJCWlzX3RhcmdldCA9ICgqKHAtMSkgPT0gJzonKTsNCiAgICArCQkvKiBEb24ndCB3
cml0ZSBhbnkgdGFyZ2V0IG5hbWVzIGludG8gdGhlIGRlcGVuZGVuY3kgZmlsZSAqLw0KICAgICsJ
CWlmIChpc190YXJnZXQpIHsNCiAgICArCQkJLyogVGhlIC9uZXh0LyBmaWxlIGlzIHRoZSBmaXJz
dCBkZXBlbmRlbmN5ICovDQogICAgKwkJCWlzX2ZpcnN0X2RlcCA9IDE7DQogICAgKwkJfSBlbHNl
IGlmICghaXNfaWdub3JlZF9maWxlKG0sIHAgLSBtKSkgew0KICAgICsJCQkqcCA9ICdcMCc7DQog
ICAgKw0KICAgICsJCQkvKg0KICAgICsJCQkgKiBEbyBub3QgbGlzdCB0aGUgc291cmNlIGZpbGUg
YXMgZGVwZW5kZW5jeSwgc28gdGhhdA0KICAgICsJCQkgKiBrYnVpbGQgaXMgbm90IGNvbmZ1c2Vk
IGlmIGEgLmMgZmlsZSBpcyByZXdyaXR0ZW4NCiAgICArCQkJICogaW50byAuUyBvciB2aWNlIHZl
cnNhLiBTdG9yaW5nIGl0IGluIHNvdXJjZV8qIGlzDQogICAgKwkJCSAqIG5lZWRlZCBmb3IgbW9k
cG9zdCB0byBjb21wdXRlIHNyY3ZlcnNpb25zLg0KICAgICsJCQkgKi8NCiAgICArCQkJaWYgKGlz
X2ZpcnN0X2RlcCkgew0KICAgICsJCQkJLyoNCiAgICArCQkJCSAqIElmIHByb2Nlc3NpbmcgdGhl
IGNvbmNhdGVuYXRpb24gb2YgbXVsdGlwbGUNCiAgICArCQkJCSAqIGRlcGVuZGVuY3kgZmlsZXMs
IG9ubHkgcHJvY2VzcyB0aGUgZmlyc3QNCiAgICArCQkJCSAqIHRhcmdldCBuYW1lLCB3aGljaCB3
aWxsIGJlIHRoZSBvcmlnaW5hbA0KICAgICsJCQkJICogc291cmNlIG5hbWUsIGFuZCBpZ25vcmUg
YW55IG90aGVyIHRhcmdldA0KICAgICsJCQkJICogbmFtZXMsIHdoaWNoIHdpbGwgYmUgaW50ZXJt
ZWRpYXRlIHRlbXBvcmFyeQ0KICAgICsJCQkJICogZmlsZXMuDQogICAgKwkJCQkgKi8NCiAgICAr
CQkJCWlmICghc2F3X2FueV90YXJnZXQpIHsNCiAgICArCQkJCQlzYXdfYW55X3RhcmdldCA9IDE7
DQogICAgKwkJCQkJcHJpbnRmKCJzb3VyY2VfJXMgOj0gJXNcblxuIiwNCiAgICArCQkJCQkgICAg
ICAgdGFyZ2V0LCBtKTsNCiAgICArCQkJCQlwcmludGYoImRlcHNfJXMgOj0gXFxcbiIsIHRhcmdl
dCk7DQogICAgKwkJCQl9DQogICAgKwkJCQlpc19maXJzdF9kZXAgPSAwOw0KICAgICsJCQl9IGVs
c2Ugew0KICAgICsJCQkJcHJpbnRmKCIgICVzIFxcXG4iLCBtKTsNCiAgICArCQkJfQ0KICAgICsN
CiAgICArCQkJYnVmID0gcmVhZF9maWxlKG0pOw0KICAgICsJCQlwYXJzZV9jb25maWdfZmlsZShi
dWYpOw0KICAgICsJCQlmcmVlKGJ1Zik7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlpZiAoaXNf
bGFzdCkNCiAgICArCQkJYnJlYWs7DQogICAgKw0KICAgICsJCS8qDQogICAgKwkJICogU3RhcnQg
c2VhcmNoaW5nIGZvciBuZXh0IHRva2VuIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBmaXJzdA0KICAg
ICsJCSAqICJ3aGl0ZXNwYWNlIiBjaGFyYWN0ZXIgdGhhdCBmb2xsb3dzIHRoaXMgdG9rZW4uDQog
ICAgKwkJICovDQogICAgKwkJbSA9IHAgKyAxOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmICgh
c2F3X2FueV90YXJnZXQpIHsNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgImZpeGRlcDogcGFyc2Ug
ZXJyb3I7IG5vIHRhcmdldHMgZm91bmRcbiIpOw0KICAgICsJCWV4aXQoMSk7DQogICAgKwl9DQog
ICAgKw0KICAgICsJcHJpbnRmKCJcbiVzOiAkKGRlcHNfJXMpXG5cbiIsIHRhcmdldCwgdGFyZ2V0
KTsNCiAgICArCXByaW50ZigiJChkZXBzXyVzKTpcbiIsIHRhcmdldCk7DQogICAgK30NCiAgICAr
DQogICAgK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAgK3sNCiAgICArCWNv
bnN0IGNoYXIgKmRlcGZpbGUsICp0YXJnZXQsICpjbWRsaW5lOw0KICAgICsJdm9pZCAqYnVmOw0K
ICAgICsNCiAgICArCWlmIChhcmdjICE9IDQpDQogICAgKwkJdXNhZ2UoKTsNCiAgICArDQogICAg
KwlkZXBmaWxlID0gYXJndlsxXTsNCiAgICArCXRhcmdldCA9IGFyZ3ZbMl07DQogICAgKwljbWRs
aW5lID0gYXJndlszXTsNCiAgICArDQogICAgKwlwcmludGYoImNtZF8lcyA6PSAlc1xuXG4iLCB0
YXJnZXQsIGNtZGxpbmUpOw0KICAgICsNCiAgICArCWJ1ZiA9IHJlYWRfZmlsZShkZXBmaWxlKTsN
CiAgICArCXBhcnNlX2RlcF9maWxlKGJ1ZiwgdGFyZ2V0KTsNCiAgICArCWZyZWUoYnVmKTsNCiAg
ICArDQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcvZ2NvbmYtY2ZnLnNoIGIvc3VwcG9ydC9rY29uZmlnL2djb25mLWNmZy5zaA0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDAwMDAwMC4uNDgwZWNkOA0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvZ2NvbmYtY2ZnLnNoDQogICAgQEAg
LTAsMCArMSwzMCBAQA0KICAgICsjIS9iaW4vc2gNCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArUEtHPSJndGsrLTIuMCBnbW9kdWxlLTIuMCBsaWJn
bGFkZS0yLjAiDQogICAgKw0KICAgICtpZiBbIC16ICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZyki
IF07IHRoZW4NCiAgICArCWVjaG8gPiYyICIqIg0KICAgICsJZWNobyA+JjIgIiogJ21ha2UgZ2Nv
bmZpZycgcmVxdWlyZXMgJ3BrZy1jb25maWcnLiBQbGVhc2UgaW5zdGFsbCBpdC4iDQogICAgKwll
Y2hvID4mMiAiKiINCiAgICArCWV4aXQgMQ0KICAgICtmaQ0KICAgICsNCiAgICAraWYgISBwa2ct
Y29uZmlnIC0tZXhpc3RzICRQS0c7IHRoZW4NCiAgICArCWVjaG8gPiYyICIqIg0KICAgICsJZWNo
byA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIEdUSysgaW5zdGFsbGF0aW9uLiBQbGVhc2UgbWFr
ZSBzdXJlIHRoYXQiDQogICAgKwllY2hvID4mMiAiKiB0aGUgR1RLKyAyLjAgZGV2ZWxvcG1lbnQg
cGFja2FnZSBpcyBjb3JyZWN0bHkgaW5zdGFsbGVkLiINCiAgICArCWVjaG8gPiYyICIqIFlvdSBu
ZWVkICRQS0ciDQogICAgKwllY2hvID4mMiAiKiINCiAgICArCWV4aXQgMQ0KICAgICtmaQ0KICAg
ICsNCiAgICAraWYgISBwa2ctY29uZmlnIC0tYXRsZWFzdC12ZXJzaW9uPTIuMC4wIGd0aystMi4w
OyB0aGVuDQogICAgKwllY2hvID4mMiAiKiINCiAgICArCWVjaG8gPiYyICIqIEdUSysgaXMgcHJl
c2VudCBidXQgdmVyc2lvbiA+PSAyLjAuMCBpcyByZXF1aXJlZC4iDQogICAgKwllY2hvID4mMiAi
KiINCiAgICArCWV4aXQgMQ0KICAgICtmaQ0KICAgICsNCiAgICArZWNobyBjZmxhZ3M9XCIkKHBr
Zy1jb25maWcgLS1jZmxhZ3MgJFBLRylcIg0KICAgICtlY2hvIGxpYnM9XCIkKHBrZy1jb25maWcg
LS1saWJzICRQS0cpXCINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2djb25mLmMg
Yi9zdXBwb3J0L2tjb25maWcvZ2NvbmYuYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
aW5kZXggMDAwMDAwMC4uZTM2YjM0Mg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBw
b3J0L2tjb25maWcvZ2NvbmYuYw0KICAgIEBAIC0wLDAgKzEsMTUxNiBAQA0KICAgICsvLyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQg
KEMpIDIwMDItMjAwMyBSb21haW4gTGlldmluIDxyb21zQHRpbHAuaW5mbz4NCiAgICArICovDQog
ICAgKw0KICAgICsjaWZkZWYgSEFWRV9DT05GSUdfSA0KICAgICsjICBpbmNsdWRlIDxjb25maWcu
aD4NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaW5jbHVkZSA8c3RkbGliLmg+DQogICAgKyNp
bmNsdWRlICJsa2MuaCINCiAgICArI2luY2x1ZGUgImltYWdlcy5oIg0KICAgICsNCiAgICArI2lu
Y2x1ZGUgPGdsYWRlL2dsYWRlLmg+DQogICAgKyNpbmNsdWRlIDxndGsvZ3RrLmg+DQogICAgKyNp
bmNsdWRlIDxnbGliLmg+DQogICAgKyNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPg0KICAgICsN
CiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICAr
I2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICsjaW5jbHVkZSA8dGltZS5oPg0KICAgICsNCiAgICAr
Ly8jZGVmaW5lIERFQlVHDQogICAgKw0KICAgICtlbnVtIHsNCiAgICArCVNJTkdMRV9WSUVXLCBT
UExJVF9WSUVXLCBGVUxMX1ZJRVcNCiAgICArfTsNCiAgICArDQogICAgK2VudW0gew0KICAgICsJ
T1BUX05PUk1BTCwgT1BUX0FMTCwgT1BUX1BST01QVA0KICAgICt9Ow0KICAgICsNCiAgICArc3Rh
dGljIGdpbnQgdmlld19tb2RlID0gRlVMTF9WSUVXOw0KICAgICtzdGF0aWMgZ2Jvb2xlYW4gc2hv
d19uYW1lID0gVFJVRTsNCiAgICArc3RhdGljIGdib29sZWFuIHNob3dfcmFuZ2UgPSBUUlVFOw0K
ICAgICtzdGF0aWMgZ2Jvb2xlYW4gc2hvd192YWx1ZSA9IFRSVUU7DQogICAgK3N0YXRpYyBnYm9v
bGVhbiByZXNpemVhYmxlID0gRkFMU0U7DQogICAgK3N0YXRpYyBpbnQgb3B0X21vZGUgPSBPUFRf
Tk9STUFMOw0KICAgICsNCiAgICArR3RrV2lkZ2V0ICptYWluX3duZCA9IE5VTEw7DQogICAgK0d0
a1dpZGdldCAqdHJlZTFfdyA9IE5VTEw7CS8vIGxlZnQgIGZyYW1lDQogICAgK0d0a1dpZGdldCAq
dHJlZTJfdyA9IE5VTEw7CS8vIHJpZ2h0IGZyYW1lDQogICAgK0d0a1dpZGdldCAqdGV4dF93ID0g
TlVMTDsNCiAgICArR3RrV2lkZ2V0ICpocGFuZWQgPSBOVUxMOw0KICAgICtHdGtXaWRnZXQgKnZw
YW5lZCA9IE5VTEw7DQogICAgK0d0a1dpZGdldCAqYmFja19idG4gPSBOVUxMOw0KICAgICtHdGtX
aWRnZXQgKnNhdmVfYnRuID0gTlVMTDsNCiAgICArR3RrV2lkZ2V0ICpzYXZlX21lbnVfaXRlbSA9
IE5VTEw7DQogICAgKw0KICAgICtHdGtUZXh0VGFnICp0YWcxLCAqdGFnMjsNCiAgICArR2RrQ29s
b3IgY29sb3I7DQogICAgKw0KICAgICtHdGtUcmVlU3RvcmUgKnRyZWUxLCAqdHJlZTIsICp0cmVl
Ow0KICAgICtHdGtUcmVlTW9kZWwgKm1vZGVsMSwgKm1vZGVsMjsNCiAgICArc3RhdGljIEd0a1Ry
ZWVJdGVyICpwYXJlbnRzWzI1Nl07DQogICAgK3N0YXRpYyBnaW50IGluZGVudDsNCiAgICArDQog
ICAgK3N0YXRpYyBzdHJ1Y3QgbWVudSAqY3VycmVudDsgLy8gY3VycmVudCBub2RlIGZvciBTSU5H
TEUgdmlldw0KICAgICtzdGF0aWMgc3RydWN0IG1lbnUgKmJyb3dzZWQ7IC8vIGJyb3dzZWQgbm9k
ZSBmb3IgU1BMSVQgdmlldw0KICAgICsNCiAgICArZW51bSB7DQogICAgKwlDT0xfT1BUSU9OLCBD
T0xfTkFNRSwgQ09MX05PLCBDT0xfTU9ELCBDT0xfWUVTLCBDT0xfVkFMVUUsDQogICAgKwlDT0xf
TUVOVSwgQ09MX0NPTE9SLCBDT0xfRURJVCwgQ09MX1BJWEJVRiwNCiAgICArCUNPTF9QSVhWSVMs
IENPTF9CVE5WSVMsIENPTF9CVE5BQ1QsIENPTF9CVE5JTkMsIENPTF9CVE5SQUQsDQogICAgKwlD
T0xfTlVNQkVSDQogICAgK307DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBkaXNwbGF5X2xpc3Qo
dm9pZCk7DQogICAgK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZShzdHJ1Y3QgbWVudSAqbWVudSk7
DQogICAgK3N0YXRpYyB2b2lkIGRpc3BsYXlfdHJlZV9wYXJ0KHZvaWQpOw0KICAgICtzdGF0aWMg
dm9pZCB1cGRhdGVfdHJlZShzdHJ1Y3QgbWVudSAqc3JjLCBHdGtUcmVlSXRlciAqIGRzdCk7DQog
ICAgK3N0YXRpYyB2b2lkIHNldF9ub2RlKEd0a1RyZWVJdGVyICogbm9kZSwgc3RydWN0IG1lbnUg
Km1lbnUsIGdjaGFyICoqIHJvdyk7DQogICAgK3N0YXRpYyBnY2hhciAqKmZpbGxfcm93KHN0cnVj
dCBtZW51ICptZW51KTsNCiAgICArc3RhdGljIHZvaWQgY29uZl9jaGFuZ2VkKHZvaWQpOw0KICAg
ICsNCiAgICArLyogSGVscGluZy9EZWJ1Z2dpbmcgRnVuY3Rpb25zICovDQogICAgKyNpZmRlZiBE
RUJVRw0KICAgICtzdGF0aWMgY29uc3QgY2hhciAqZGJnX3N5bV9mbGFncyhpbnQgdmFsKQ0KICAg
ICt7DQogICAgKwlzdGF0aWMgY2hhciBidWZbMjU2XTsNCiAgICArDQogICAgKwliemVybyhidWYs
IDI1Nik7DQogICAgKw0KICAgICsJaWYgKHZhbCAmIFNZTUJPTF9DT05TVCkNCiAgICArCQlzdHJj
YXQoYnVmLCAiY29uc3QvIik7DQogICAgKwlpZiAodmFsICYgU1lNQk9MX0NIRUNLKQ0KICAgICsJ
CXN0cmNhdChidWYsICJjaGVjay8iKTsNCiAgICArCWlmICh2YWwgJiBTWU1CT0xfQ0hPSUNFKQ0K
ICAgICsJCXN0cmNhdChidWYsICJjaG9pY2UvIik7DQogICAgKwlpZiAodmFsICYgU1lNQk9MX0NI
T0lDRVZBTCkNCiAgICArCQlzdHJjYXQoYnVmLCAiY2hvaWNldmFsLyIpOw0KICAgICsJaWYgKHZh
bCAmIFNZTUJPTF9WQUxJRCkNCiAgICArCQlzdHJjYXQoYnVmLCAidmFsaWQvIik7DQogICAgKwlp
ZiAodmFsICYgU1lNQk9MX09QVElPTkFMKQ0KICAgICsJCXN0cmNhdChidWYsICJvcHRpb25hbC8i
KTsNCiAgICArCWlmICh2YWwgJiBTWU1CT0xfV1JJVEUpDQogICAgKwkJc3RyY2F0KGJ1ZiwgIndy
aXRlLyIpOw0KICAgICsJaWYgKHZhbCAmIFNZTUJPTF9DSEFOR0VEKQ0KICAgICsJCXN0cmNhdChi
dWYsICJjaGFuZ2VkLyIpOw0KICAgICsJaWYgKHZhbCAmIFNZTUJPTF9OT19XUklURSkNCiAgICAr
CQlzdHJjYXQoYnVmLCAibm9fd3JpdGUvIik7DQogICAgKw0KICAgICsJYnVmW3N0cmxlbihidWYp
IC0gMV0gPSAnXDAnOw0KICAgICsNCiAgICArCXJldHVybiBidWY7DQogICAgK30NCiAgICArI2Vu
ZGlmDQogICAgKw0KICAgICtzdGF0aWMgdm9pZCByZXBsYWNlX2J1dHRvbl9pY29uKEdsYWRlWE1M
ICp4bWwsIEdka0RyYXdhYmxlICp3aW5kb3csDQogICAgKwkJCQlHdGtTdHlsZSAqc3R5bGUsIGdj
aGFyICpidG5fbmFtZSwgZ2NoYXIgKip4cG0pDQogICAgK3sNCiAgICArCUdka1BpeG1hcCAqcGl4
bWFwOw0KICAgICsJR2RrQml0bWFwICptYXNrOw0KICAgICsJR3RrVG9vbEJ1dHRvbiAqYnV0dG9u
Ow0KICAgICsJR3RrV2lkZ2V0ICppbWFnZTsNCiAgICArDQogICAgKwlwaXhtYXAgPSBnZGtfcGl4
bWFwX2NyZWF0ZV9mcm9tX3hwbV9kKHdpbmRvdywgJm1hc2ssDQogICAgKwkJCQkJICAgICAgJnN0
eWxlLT5iZ1tHVEtfU1RBVEVfTk9STUFMXSwNCiAgICArCQkJCQkgICAgICB4cG0pOw0KICAgICsN
CiAgICArCWJ1dHRvbiA9IEdUS19UT09MX0JVVFRPTihnbGFkZV94bWxfZ2V0X3dpZGdldCh4bWws
IGJ0bl9uYW1lKSk7DQogICAgKwlpbWFnZSA9IGd0a19pbWFnZV9uZXdfZnJvbV9waXhtYXAocGl4
bWFwLCBtYXNrKTsNCiAgICArCWd0a193aWRnZXRfc2hvdyhpbWFnZSk7DQogICAgKwlndGtfdG9v
bF9idXR0b25fc2V0X2ljb25fd2lkZ2V0KGJ1dHRvbiwgaW1hZ2UpOw0KICAgICt9DQogICAgKw0K
ICAgICsvKiBNYWluIFdpbmRvdyBJbml0aWFsaXphdGlvbiAqLw0KICAgICtzdGF0aWMgdm9pZCBp
bml0X21haW5fd2luZG93KGNvbnN0IGdjaGFyICpnbGFkZV9maWxlKQ0KICAgICt7DQogICAgKwlH
bGFkZVhNTCAqeG1sOw0KICAgICsJR3RrV2lkZ2V0ICp3aWRnZXQ7DQogICAgKwlHdGtUZXh0QnVm
ZmVyICp0eHRidWY7DQogICAgKwlHdGtTdHlsZSAqc3R5bGU7DQogICAgKw0KICAgICsJeG1sID0g
Z2xhZGVfeG1sX25ldyhnbGFkZV9maWxlLCAid2luZG93MSIsIE5VTEwpOw0KICAgICsJaWYgKCF4
bWwpDQogICAgKwkJZ19lcnJvcigiR1VJIGxvYWRpbmcgZmFpbGVkICFcbiIpOw0KICAgICsJZ2xh
ZGVfeG1sX3NpZ25hbF9hdXRvY29ubmVjdCh4bWwpOw0KICAgICsNCiAgICArCW1haW5fd25kID0g
Z2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAid2luZG93MSIpOw0KICAgICsJaHBhbmVkID0gZ2xh
ZGVfeG1sX2dldF93aWRnZXQoeG1sLCAiaHBhbmVkMSIpOw0KICAgICsJdnBhbmVkID0gZ2xhZGVf
eG1sX2dldF93aWRnZXQoeG1sLCAidnBhbmVkMSIpOw0KICAgICsJdHJlZTFfdyA9IGdsYWRlX3ht
bF9nZXRfd2lkZ2V0KHhtbCwgInRyZWV2aWV3MSIpOw0KICAgICsJdHJlZTJfdyA9IGdsYWRlX3ht
bF9nZXRfd2lkZ2V0KHhtbCwgInRyZWV2aWV3MiIpOw0KICAgICsJdGV4dF93ID0gZ2xhZGVfeG1s
X2dldF93aWRnZXQoeG1sLCAidGV4dHZpZXczIik7DQogICAgKw0KICAgICsJYmFja19idG4gPSBn
bGFkZV94bWxfZ2V0X3dpZGdldCh4bWwsICJidXR0b24xIik7DQogICAgKwlndGtfd2lkZ2V0X3Nl
dF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsNCiAgICArDQogICAgKwl3aWRnZXQgPSBnbGFk
ZV94bWxfZ2V0X3dpZGdldCh4bWwsICJzaG93X25hbWUxIik7DQogICAgKwlndGtfY2hlY2tfbWVu
dV9pdGVtX3NldF9hY3RpdmUoKEd0a0NoZWNrTWVudUl0ZW0gKikgd2lkZ2V0LA0KICAgICsJCQkJ
ICAgICAgIHNob3dfbmFtZSk7DQogICAgKw0KICAgICsJd2lkZ2V0ID0gZ2xhZGVfeG1sX2dldF93
aWRnZXQoeG1sLCAic2hvd19yYW5nZTEiKTsNCiAgICArCWd0a19jaGVja19tZW51X2l0ZW1fc2V0
X2FjdGl2ZSgoR3RrQ2hlY2tNZW51SXRlbSAqKSB3aWRnZXQsDQogICAgKwkJCQkgICAgICAgc2hv
d19yYW5nZSk7DQogICAgKw0KICAgICsJd2lkZ2V0ID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1s
LCAic2hvd19kYXRhMSIpOw0KICAgICsJZ3RrX2NoZWNrX21lbnVfaXRlbV9zZXRfYWN0aXZlKChH
dGtDaGVja01lbnVJdGVtICopIHdpZGdldCwNCiAgICArCQkJCSAgICAgICBzaG93X3ZhbHVlKTsN
CiAgICArDQogICAgKwlzYXZlX2J0biA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgImJ1dHRv
bjMiKTsNCiAgICArCXNhdmVfbWVudV9pdGVtID0gZ2xhZGVfeG1sX2dldF93aWRnZXQoeG1sLCAi
c2F2ZTEiKTsNCiAgICArCWNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsN
CiAgICArDQogICAgKwlzdHlsZSA9IGd0a193aWRnZXRfZ2V0X3N0eWxlKG1haW5fd25kKTsNCiAg
ICArCXdpZGdldCA9IGdsYWRlX3htbF9nZXRfd2lkZ2V0KHhtbCwgInRvb2xiYXIxIik7DQogICAg
Kw0KICAgICsJcmVwbGFjZV9idXR0b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxl
LA0KICAgICsJCQkgICAgImJ1dHRvbjQiLCAoZ2NoYXIgKiopIHhwbV9zaW5nbGVfdmlldyk7DQog
ICAgKwlyZXBsYWNlX2J1dHRvbl9pY29uKHhtbCwgbWFpbl93bmQtPndpbmRvdywgc3R5bGUsDQog
ICAgKwkJCSAgICAiYnV0dG9uNSIsIChnY2hhciAqKikgeHBtX3NwbGl0X3ZpZXcpOw0KICAgICsJ
cmVwbGFjZV9idXR0b25faWNvbih4bWwsIG1haW5fd25kLT53aW5kb3csIHN0eWxlLA0KICAgICsJ
CQkgICAgImJ1dHRvbjYiLCAoZ2NoYXIgKiopIHhwbV90cmVlX3ZpZXcpOw0KICAgICsNCiAgICAr
CXR4dGJ1ZiA9IGd0a190ZXh0X3ZpZXdfZ2V0X2J1ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykp
Ow0KICAgICsJdGFnMSA9IGd0a190ZXh0X2J1ZmZlcl9jcmVhdGVfdGFnKHR4dGJ1ZiwgIm15dGFn
MSIsDQogICAgKwkJCQkJICAiZm9yZWdyb3VuZCIsICJyZWQiLA0KICAgICsJCQkJCSAgIndlaWdo
dCIsIFBBTkdPX1dFSUdIVF9CT0xELA0KICAgICsJCQkJCSAgTlVMTCk7DQogICAgKwl0YWcyID0g
Z3RrX3RleHRfYnVmZmVyX2NyZWF0ZV90YWcodHh0YnVmLCAibXl0YWcyIiwNCiAgICArCQkJCQkg
IC8qInN0eWxlIiwgUEFOR09fU1RZTEVfT0JMSVFVRSwgKi8NCiAgICArCQkJCQkgIE5VTEwpOw0K
ICAgICsNCiAgICArCWd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1cobWFpbl93bmQpLCBy
b290bWVudS5wcm9tcHQtPnRleHQpOw0KICAgICsNCiAgICArCWd0a193aWRnZXRfc2hvdyhtYWlu
X3duZCk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGluaXRfdHJlZV9tb2RlbCh2
b2lkKQ0KICAgICt7DQogICAgKwlnaW50IGk7DQogICAgKw0KICAgICsJdHJlZSA9IHRyZWUyID0g
Z3RrX3RyZWVfc3RvcmVfbmV3KENPTF9OVU1CRVIsDQogICAgKwkJCQkJICBHX1RZUEVfU1RSSU5H
LCBHX1RZUEVfU1RSSU5HLA0KICAgICsJCQkJCSAgR19UWVBFX1NUUklORywgR19UWVBFX1NUUklO
RywNCiAgICArCQkJCQkgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsDQogICAgKwkJCQkJ
ICBHX1RZUEVfUE9JTlRFUiwgR0RLX1RZUEVfQ09MT1IsDQogICAgKwkJCQkJICBHX1RZUEVfQk9P
TEVBTiwgR0RLX1RZUEVfUElYQlVGLA0KICAgICsJCQkJCSAgR19UWVBFX0JPT0xFQU4sIEdfVFlQ
RV9CT09MRUFOLA0KICAgICsJCQkJCSAgR19UWVBFX0JPT0xFQU4sIEdfVFlQRV9CT09MRUFOLA0K
ICAgICsJCQkJCSAgR19UWVBFX0JPT0xFQU4pOw0KICAgICsJbW9kZWwyID0gR1RLX1RSRUVfTU9E
RUwodHJlZTIpOw0KICAgICsNCiAgICArCWZvciAocGFyZW50c1swXSA9IE5VTEwsIGkgPSAxOyBp
IDwgMjU2OyBpKyspDQogICAgKwkJcGFyZW50c1tpXSA9IChHdGtUcmVlSXRlciAqKSBnX21hbGxv
YyhzaXplb2YoR3RrVHJlZUl0ZXIpKTsNCiAgICArDQogICAgKwl0cmVlMSA9IGd0a190cmVlX3N0
b3JlX25ldyhDT0xfTlVNQkVSLA0KICAgICsJCQkJICAgR19UWVBFX1NUUklORywgR19UWVBFX1NU
UklORywNCiAgICArCQkJCSAgIEdfVFlQRV9TVFJJTkcsIEdfVFlQRV9TVFJJTkcsDQogICAgKwkJ
CQkgICBHX1RZUEVfU1RSSU5HLCBHX1RZUEVfU1RSSU5HLA0KICAgICsJCQkJICAgR19UWVBFX1BP
SU5URVIsIEdES19UWVBFX0NPTE9SLA0KICAgICsJCQkJICAgR19UWVBFX0JPT0xFQU4sIEdES19U
WVBFX1BJWEJVRiwNCiAgICArCQkJCSAgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfQk9PTEVBTiwN
CiAgICArCQkJCSAgIEdfVFlQRV9CT09MRUFOLCBHX1RZUEVfQk9PTEVBTiwNCiAgICArCQkJCSAg
IEdfVFlQRV9CT09MRUFOKTsNCiAgICArCW1vZGVsMSA9IEdUS19UUkVFX01PREVMKHRyZWUxKTsN
CiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgaW5pdF9sZWZ0X3RyZWUodm9pZCkNCiAg
ICArew0KICAgICsJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHRyZWUxX3cpOw0K
ICAgICsJR3RrQ2VsbFJlbmRlcmVyICpyZW5kZXJlcjsNCiAgICArCUd0a1RyZWVTZWxlY3Rpb24g
KnNlbDsNCiAgICArCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47DQogICAgKw0KICAgICsJZ3Rr
X3RyZWVfdmlld19zZXRfbW9kZWwodmlldywgbW9kZWwxKTsNCiAgICArCWd0a190cmVlX3ZpZXdf
c2V0X2hlYWRlcnNfdmlzaWJsZSh2aWV3LCBUUlVFKTsNCiAgICArCWd0a190cmVlX3ZpZXdfc2V0
X3J1bGVzX2hpbnQodmlldywgVFJVRSk7DQogICAgKw0KICAgICsJY29sdW1uID0gZ3RrX3RyZWVf
dmlld19jb2x1bW5fbmV3KCk7DQogICAgKwlndGtfdHJlZV92aWV3X2FwcGVuZF9jb2x1bW4odmll
dywgY29sdW1uKTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF90aXRsZShjb2x1bW4s
ICJPcHRpb25zIik7DQogICAgKw0KICAgICsJcmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90
b2dnbGVfbmV3KCk7DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0KEdUS19U
UkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJcmVuZGVyZXIsIEZBTFNFKTsNCiAg
ICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJRVdfQ09M
VU1OKGNvbHVtbiksDQogICAgKwkJCQkJICAgIHJlbmRlcmVyLA0KICAgICsJCQkJCSAgICAiYWN0
aXZlIiwgQ09MX0JUTkFDVCwNCiAgICArCQkJCQkgICAgImluY29uc2lzdGVudCIsIENPTF9CVE5J
TkMsDQogICAgKwkJCQkJICAgICJ2aXNpYmxlIiwgQ09MX0JUTlZJUywNCiAgICArCQkJCQkgICAg
InJhZGlvIiwgQ09MX0JUTlJBRCwgTlVMTCk7DQogICAgKwlyZW5kZXJlciA9IGd0a19jZWxsX3Jl
bmRlcmVyX3RleHRfbmV3KCk7DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNrX3N0YXJ0
KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJcmVuZGVyZXIsIEZBTFNF
KTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19UUkVFX1ZJ
RVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJICAgIHJlbmRlcmVyLA0KICAgICsJCQkJCSAg
ICAidGV4dCIsIENPTF9PUFRJT04sDQogICAgKwkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIsDQog
ICAgKwkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgKw0KICAgICsJc2VsID0gZ3RrX3Ry
ZWVfdmlld19nZXRfc2VsZWN0aW9uKHZpZXcpOw0KICAgICsJZ3RrX3RyZWVfc2VsZWN0aW9uX3Nl
dF9tb2RlKHNlbCwgR1RLX1NFTEVDVElPTl9TSU5HTEUpOw0KICAgICsJZ3RrX3dpZGdldF9yZWFs
aXplKHRyZWUxX3cpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCByZW5kZXJlcl9l
ZGl0ZWQoR3RrQ2VsbFJlbmRlcmVyVGV4dCAqIGNlbGwsDQogICAgKwkJCSAgICBjb25zdCBnY2hh
ciAqIHBhdGhfc3RyaW5nLA0KICAgICsJCQkgICAgY29uc3QgZ2NoYXIgKiBuZXdfdGV4dCwgZ3Bv
aW50ZXIgdXNlcl9kYXRhKTsNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGluaXRfcmlnaHRfdHJl
ZSh2b2lkKQ0KICAgICt7DQogICAgKwlHdGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVco
dHJlZTJfdyk7DQogICAgKwlHdGtDZWxsUmVuZGVyZXIgKnJlbmRlcmVyOw0KICAgICsJR3RrVHJl
ZVNlbGVjdGlvbiAqc2VsOw0KICAgICsJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsNCiAgICAr
CWdpbnQgaTsNCiAgICArDQogICAgKwlndGtfdHJlZV92aWV3X3NldF9tb2RlbCh2aWV3LCBtb2Rl
bDIpOw0KICAgICsJZ3RrX3RyZWVfdmlld19zZXRfaGVhZGVyc192aXNpYmxlKHZpZXcsIFRSVUUp
Ow0KICAgICsJZ3RrX3RyZWVfdmlld19zZXRfcnVsZXNfaGludCh2aWV3LCBUUlVFKTsNCiAgICAr
DQogICAgKwljb2x1bW4gPSBndGtfdHJlZV92aWV3X2NvbHVtbl9uZXcoKTsNCiAgICArCWd0a190
cmVlX3ZpZXdfYXBwZW5kX2NvbHVtbih2aWV3LCBjb2x1bW4pOw0KICAgICsJZ3RrX3RyZWVfdmll
d19jb2x1bW5fc2V0X3RpdGxlKGNvbHVtbiwgIk9wdGlvbnMiKTsNCiAgICArDQogICAgKwlyZW5k
ZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3BpeGJ1Zl9uZXcoKTsNCiAgICArCWd0a190cmVlX3Zp
ZXdfY29sdW1uX3BhY2tfc3RhcnQoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwNCiAgICAr
CQkJCQlyZW5kZXJlciwgRkFMU0UpOw0KICAgICsJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X2F0
dHJpYnV0ZXMoR1RLX1RSRUVfVklFV19DT0xVTU4oY29sdW1uKSwNCiAgICArCQkJCQkgICAgcmVu
ZGVyZXIsDQogICAgKwkJCQkJICAgICJwaXhidWYiLCBDT0xfUElYQlVGLA0KICAgICsJCQkJCSAg
ICAidmlzaWJsZSIsIENPTF9QSVhWSVMsIE5VTEwpOw0KICAgICsJcmVuZGVyZXIgPSBndGtfY2Vs
bF9yZW5kZXJlcl90b2dnbGVfbmV3KCk7DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVtbl9wYWNr
X3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJcmVuZGVyZXIs
IEZBTFNFKTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVzKEdUS19U
UkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJICAgIHJlbmRlcmVyLA0KICAgICsJ
CQkJCSAgICAiYWN0aXZlIiwgQ09MX0JUTkFDVCwNCiAgICArCQkJCQkgICAgImluY29uc2lzdGVu
dCIsIENPTF9CVE5JTkMsDQogICAgKwkJCQkJICAgICJ2aXNpYmxlIiwgQ09MX0JUTlZJUywNCiAg
ICArCQkJCQkgICAgInJhZGlvIiwgQ09MX0JUTlJBRCwgTlVMTCk7DQogICAgKwlyZW5kZXJlciA9
IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVt
bl9wYWNrX3N0YXJ0KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJcmVu
ZGVyZXIsIEZBTFNFKTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF9hdHRyaWJ1dGVz
KEdUS19UUkVFX1ZJRVdfQ09MVU1OKGNvbHVtbiksDQogICAgKwkJCQkJICAgIHJlbmRlcmVyLA0K
ICAgICsJCQkJCSAgICAidGV4dCIsIENPTF9PUFRJT04sDQogICAgKwkJCQkJICAgICJmb3JlZ3Jv
dW5kLWdkayIsDQogICAgKwkJCQkJICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgKw0KICAgICsJ
cmVuZGVyZXIgPSBndGtfY2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOw0KICAgICsJZ3RrX3RyZWVf
dmlld19pbnNlcnRfY29sdW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwNCiAgICArCQkJCQkJ
ICAgICJOYW1lIiwgcmVuZGVyZXIsDQogICAgKwkJCQkJCSAgICAidGV4dCIsIENPTF9OQU1FLA0K
ICAgICsJCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwNCiAgICArCQkJCQkJICAgIENPTF9DT0xP
UiwgTlVMTCk7DQogICAgKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVyX3RleHRfbmV3KCk7
DQogICAgKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRyaWJ1dGVzKHZpZXcs
IC0xLA0KICAgICsJCQkJCQkgICAgIk4iLCByZW5kZXJlciwNCiAgICArCQkJCQkJICAgICJ0ZXh0
IiwgQ09MX05PLA0KICAgICsJCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwNCiAgICArCQkJCQkJ
ICAgIENPTF9DT0xPUiwgTlVMTCk7DQogICAgKwlyZW5kZXJlciA9IGd0a19jZWxsX3JlbmRlcmVy
X3RleHRfbmV3KCk7DQogICAgKwlndGtfdHJlZV92aWV3X2luc2VydF9jb2x1bW5fd2l0aF9hdHRy
aWJ1dGVzKHZpZXcsIC0xLA0KICAgICsJCQkJCQkgICAgIk0iLCByZW5kZXJlciwNCiAgICArCQkJ
CQkJICAgICJ0ZXh0IiwgQ09MX01PRCwNCiAgICArCQkJCQkJICAgICJmb3JlZ3JvdW5kLWdkayIs
DQogICAgKwkJCQkJCSAgICBDT0xfQ09MT1IsIE5VTEwpOw0KICAgICsJcmVuZGVyZXIgPSBndGtf
Y2VsbF9yZW5kZXJlcl90ZXh0X25ldygpOw0KICAgICsJZ3RrX3RyZWVfdmlld19pbnNlcnRfY29s
dW1uX3dpdGhfYXR0cmlidXRlcyh2aWV3LCAtMSwNCiAgICArCQkJCQkJICAgICJZIiwgcmVuZGVy
ZXIsDQogICAgKwkJCQkJCSAgICAidGV4dCIsIENPTF9ZRVMsDQogICAgKwkJCQkJCSAgICAiZm9y
ZWdyb3VuZC1nZGsiLA0KICAgICsJCQkJCQkgICAgQ09MX0NPTE9SLCBOVUxMKTsNCiAgICArCXJl
bmRlcmVyID0gZ3RrX2NlbGxfcmVuZGVyZXJfdGV4dF9uZXcoKTsNCiAgICArCWd0a190cmVlX3Zp
ZXdfaW5zZXJ0X2NvbHVtbl93aXRoX2F0dHJpYnV0ZXModmlldywgLTEsDQogICAgKwkJCQkJCSAg
ICAiVmFsdWUiLCByZW5kZXJlciwNCiAgICArCQkJCQkJICAgICJ0ZXh0IiwgQ09MX1ZBTFVFLA0K
ICAgICsJCQkJCQkgICAgImVkaXRhYmxlIiwNCiAgICArCQkJCQkJICAgIENPTF9FRElULA0KICAg
ICsJCQkJCQkgICAgImZvcmVncm91bmQtZ2RrIiwNCiAgICArCQkJCQkJICAgIENPTF9DT0xPUiwg
TlVMTCk7DQogICAgKwlnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHJlbmRlcmVyKSwgImVkaXRl
ZCIsDQogICAgKwkJCSBHX0NBTExCQUNLKHJlbmRlcmVyX2VkaXRlZCksIE5VTEwpOw0KICAgICsN
CiAgICArCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2aWV3LCBDT0xfTkFNRSk7
DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNob3dfbmFt
ZSk7DQogICAgKwljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywgQ09MX05P
KTsNCiAgICArCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbHVtbiwgc2hvd19y
YW5nZSk7DQogICAgKwljb2x1bW4gPSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywgQ09M
X01PRCk7DQogICAgKwlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShjb2x1bW4sIHNo
b3dfcmFuZ2UpOw0KICAgICsJY29sdW1uID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKHZpZXcs
IENPTF9ZRVMpOw0KICAgICsJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUoY29sdW1u
LCBzaG93X3JhbmdlKTsNCiAgICArCWNvbHVtbiA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbih2
aWV3LCBDT0xfVkFMVUUpOw0KICAgICsJZ3RrX3RyZWVfdmlld19jb2x1bW5fc2V0X3Zpc2libGUo
Y29sdW1uLCBzaG93X3ZhbHVlKTsNCiAgICArDQogICAgKwlpZiAocmVzaXplYWJsZSkgew0KICAg
ICsJCWZvciAoaSA9IDA7IGkgPCBDT0xfVkFMVUU7IGkrKykgew0KICAgICsJCQljb2x1bW4gPSBn
dGtfdHJlZV92aWV3X2dldF9jb2x1bW4odmlldywgaSk7DQogICAgKwkJCWd0a190cmVlX3ZpZXdf
Y29sdW1uX3NldF9yZXNpemFibGUoY29sdW1uLCBUUlVFKTsNCiAgICArCQl9DQogICAgKwl9DQog
ICAgKw0KICAgICsJc2VsID0gZ3RrX3RyZWVfdmlld19nZXRfc2VsZWN0aW9uKHZpZXcpOw0KICAg
ICsJZ3RrX3RyZWVfc2VsZWN0aW9uX3NldF9tb2RlKHNlbCwgR1RLX1NFTEVDVElPTl9TSU5HTEUp
Ow0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyogVXRpbGl0eSBGdW5jdGlvbnMgKi8NCiAg
ICArDQogICAgKw0KICAgICtzdGF0aWMgdm9pZCB0ZXh0X2luc2VydF9oZWxwKHN0cnVjdCBtZW51
ICptZW51KQ0KICAgICt7DQogICAgKwlHdGtUZXh0QnVmZmVyICpidWZmZXI7DQogICAgKwlHdGtU
ZXh0SXRlciBzdGFydCwgZW5kOw0KICAgICsJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRf
cHJvbXB0KG1lbnUpOw0KICAgICsJc3RydWN0IGdzdHIgaGVscCA9IHN0cl9uZXcoKTsNCiAgICAr
DQogICAgKwltZW51X2dldF9leHRfaGVscChtZW51LCAmaGVscCk7DQogICAgKw0KICAgICsJYnVm
ZmVyID0gZ3RrX3RleHRfdmlld19nZXRfYnVmZmVyKEdUS19URVhUX1ZJRVcodGV4dF93KSk7DQog
ICAgKwlndGtfdGV4dF9idWZmZXJfZ2V0X2JvdW5kcyhidWZmZXIsICZzdGFydCwgJmVuZCk7DQog
ICAgKwlndGtfdGV4dF9idWZmZXJfZGVsZXRlKGJ1ZmZlciwgJnN0YXJ0LCAmZW5kKTsNCiAgICAr
CWd0a190ZXh0X3ZpZXdfc2V0X2xlZnRfbWFyZ2luKEdUS19URVhUX1ZJRVcodGV4dF93KSwgMTUp
Ow0KICAgICsNCiAgICArCWd0a190ZXh0X2J1ZmZlcl9nZXRfZW5kX2l0ZXIoYnVmZmVyLCAmZW5k
KTsNCiAgICArCWd0a190ZXh0X2J1ZmZlcl9pbnNlcnRfd2l0aF90YWdzKGJ1ZmZlciwgJmVuZCwg
cHJvbXB0LCAtMSwgdGFnMSwNCiAgICArCQkJCQkgTlVMTCk7DQogICAgKwlndGtfdGV4dF9idWZm
ZXJfaW5zZXJ0X2F0X2N1cnNvcihidWZmZXIsICJcblxuIiwgMik7DQogICAgKwlndGtfdGV4dF9i
dWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJf
aW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQsIHN0cl9nZXQoJmhlbHApLCAtMSwgdGFnMiwN
CiAgICArCQkJCQkgTlVMTCk7DQogICAgKwlzdHJfZnJlZSgmaGVscCk7DQogICAgK30NCiAgICAr
DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCB0ZXh0X2luc2VydF9tc2coY29uc3QgY2hhciAqdGl0
bGUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpDQogICAgK3sNCiAgICArCUd0a1RleHRCdWZmZXIgKmJ1
ZmZlcjsNCiAgICArCUd0a1RleHRJdGVyIHN0YXJ0LCBlbmQ7DQogICAgKwljb25zdCBjaGFyICpt
c2cgPSBtZXNzYWdlOw0KICAgICsNCiAgICArCWJ1ZmZlciA9IGd0a190ZXh0X3ZpZXdfZ2V0X2J1
ZmZlcihHVEtfVEVYVF9WSUVXKHRleHRfdykpOw0KICAgICsJZ3RrX3RleHRfYnVmZmVyX2dldF9i
b3VuZHMoYnVmZmVyLCAmc3RhcnQsICZlbmQpOw0KICAgICsJZ3RrX3RleHRfYnVmZmVyX2RlbGV0
ZShidWZmZXIsICZzdGFydCwgJmVuZCk7DQogICAgKwlndGtfdGV4dF92aWV3X3NldF9sZWZ0X21h
cmdpbihHVEtfVEVYVF9WSUVXKHRleHRfdyksIDE1KTsNCiAgICArDQogICAgKwlndGtfdGV4dF9i
dWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwgJmVuZCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJf
aW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZlbmQsIHRpdGxlLCAtMSwgdGFnMSwNCiAgICArCQkJ
CQkgTlVMTCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X2F0X2N1cnNvcihidWZmZXIs
ICJcblxuIiwgMik7DQogICAgKwlndGtfdGV4dF9idWZmZXJfZ2V0X2VuZF9pdGVyKGJ1ZmZlciwg
JmVuZCk7DQogICAgKwlndGtfdGV4dF9idWZmZXJfaW5zZXJ0X3dpdGhfdGFncyhidWZmZXIsICZl
bmQsIG1zZywgLTEsIHRhZzIsDQogICAgKwkJCQkJIE5VTEwpOw0KICAgICt9DQogICAgKw0KICAg
ICsNCiAgICArLyogTWFpbiBXaW5kb3dzIENhbGxiYWNrcyAqLw0KICAgICsNCiAgICArdm9pZCBv
bl9zYXZlX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0
YSk7DQogICAgK2dib29sZWFuIG9uX3dpbmRvdzFfZGVsZXRlX2V2ZW50KEd0a1dpZGdldCAqIHdp
ZGdldCwgR2RrRXZlbnQgKiBldmVudCwNCiAgICArCQkJCSBncG9pbnRlciB1c2VyX2RhdGEpDQog
ICAgK3sNCiAgICArCUd0a1dpZGdldCAqZGlhbG9nLCAqbGFiZWw7DQogICAgKwlnaW50IHJlc3Vs
dDsNCiAgICArDQogICAgKwlpZiAoIWNvbmZfZ2V0X2NoYW5nZWQoKSkNCiAgICArCQlyZXR1cm4g
RkFMU0U7DQogICAgKw0KICAgICsJZGlhbG9nID0gZ3RrX2RpYWxvZ19uZXdfd2l0aF9idXR0b25z
KCJXYXJuaW5nICEiLA0KICAgICsJCQkJCSAgICAgR1RLX1dJTkRPVyhtYWluX3duZCksDQogICAg
KwkJCQkJICAgICAoR3RrRGlhbG9nRmxhZ3MpDQogICAgKwkJCQkJICAgICAoR1RLX0RJQUxPR19N
T0RBTCB8DQogICAgKwkJCQkJICAgICAgR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5UKSwN
CiAgICArCQkJCQkgICAgIEdUS19TVE9DS19PSywNCiAgICArCQkJCQkgICAgIEdUS19SRVNQT05T
RV9ZRVMsDQogICAgKwkJCQkJICAgICBHVEtfU1RPQ0tfTk8sDQogICAgKwkJCQkJICAgICBHVEtf
UkVTUE9OU0VfTk8sDQogICAgKwkJCQkJICAgICBHVEtfU1RPQ0tfQ0FOQ0VMLA0KICAgICsJCQkJ
CSAgICAgR1RLX1JFU1BPTlNFX0NBTkNFTCwgTlVMTCk7DQogICAgKwlndGtfZGlhbG9nX3NldF9k
ZWZhdWx0X3Jlc3BvbnNlKEdUS19ESUFMT0coZGlhbG9nKSwNCiAgICArCQkJCQlHVEtfUkVTUE9O
U0VfQ0FOQ0VMKTsNCiAgICArDQogICAgKwlsYWJlbCA9IGd0a19sYWJlbF9uZXcoIlxuU2F2ZSBj
b25maWd1cmF0aW9uID9cbiIpOw0KICAgICsJZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5F
UihHVEtfRElBTE9HKGRpYWxvZyktPnZib3gpLCBsYWJlbCk7DQogICAgKwlndGtfd2lkZ2V0X3No
b3cobGFiZWwpOw0KICAgICsNCiAgICArCXJlc3VsdCA9IGd0a19kaWFsb2dfcnVuKEdUS19ESUFM
T0coZGlhbG9nKSk7DQogICAgKwlzd2l0Y2ggKHJlc3VsdCkgew0KICAgICsJY2FzZSBHVEtfUkVT
UE9OU0VfWUVTOg0KICAgICsJCW9uX3NhdmVfYWN0aXZhdGUoTlVMTCwgTlVMTCk7DQogICAgKwkJ
cmV0dXJuIEZBTFNFOw0KICAgICsJY2FzZSBHVEtfUkVTUE9OU0VfTk86DQogICAgKwkJcmV0dXJu
IEZBTFNFOw0KICAgICsJY2FzZSBHVEtfUkVTUE9OU0VfQ0FOQ0VMOg0KICAgICsJY2FzZSBHVEtf
UkVTUE9OU0VfREVMRVRFX0VWRU5UOg0KICAgICsJZGVmYXVsdDoNCiAgICArCQlndGtfd2lkZ2V0
X2Rlc3Ryb3koZGlhbG9nKTsNCiAgICArCQlyZXR1cm4gVFJVRTsNCiAgICArCX0NCiAgICArDQog
ICAgKwlyZXR1cm4gRkFMU0U7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICt2b2lkIG9uX3dp
bmRvdzFfZGVzdHJveShHdGtPYmplY3QgKiBvYmplY3QsIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAg
ICArew0KICAgICsJZ3RrX21haW5fcXVpdCgpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICAr
dm9pZA0KICAgICtvbl93aW5kb3cxX3NpemVfcmVxdWVzdChHdGtXaWRnZXQgKiB3aWRnZXQsDQog
ICAgKwkJCUd0a1JlcXVpc2l0aW9uICogcmVxdWlzaXRpb24sIGdwb2ludGVyIHVzZXJfZGF0YSkN
CiAgICArew0KICAgICsJc3RhdGljIGdpbnQgb2xkX2g7DQogICAgKwlnaW50IHcsIGg7DQogICAg
Kw0KICAgICsJaWYgKHdpZGdldC0+d2luZG93ID09IE5VTEwpDQogICAgKwkJZ3RrX3dpbmRvd19n
ZXRfZGVmYXVsdF9zaXplKEdUS19XSU5ET1cobWFpbl93bmQpLCAmdywgJmgpOw0KICAgICsJZWxz
ZQ0KICAgICsJCWdka193aW5kb3dfZ2V0X3NpemUod2lkZ2V0LT53aW5kb3csICZ3LCAmaCk7DQog
ICAgKw0KICAgICsJaWYgKGggPT0gb2xkX2gpDQogICAgKwkJcmV0dXJuOw0KICAgICsJb2xkX2gg
PSBoOw0KICAgICsNCiAgICArCWd0a19wYW5lZF9zZXRfcG9zaXRpb24oR1RLX1BBTkVEKHZwYW5l
ZCksIDIgKiBoIC8gMyk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICsvKiBNZW51ICYgVG9v
bGJhciBDYWxsYmFja3MgKi8NCiAgICArDQogICAgKw0KICAgICtzdGF0aWMgdm9pZA0KICAgICts
b2FkX2ZpbGVuYW1lKEd0a0ZpbGVTZWxlY3Rpb24gKiBmaWxlX3NlbGVjdG9yLCBncG9pbnRlciB1
c2VyX2RhdGEpDQogICAgK3sNCiAgICArCWNvbnN0IGdjaGFyICpmbjsNCiAgICArDQogICAgKwlm
biA9IGd0a19maWxlX3NlbGVjdGlvbl9nZXRfZmlsZW5hbWUoR1RLX0ZJTEVfU0VMRUNUSU9ODQog
ICAgKwkJCQkJICAgICAodXNlcl9kYXRhKSk7DQogICAgKw0KICAgICsJaWYgKGNvbmZfcmVhZChm
bikpDQogICAgKwkJdGV4dF9pbnNlcnRfbXNnKCJFcnJvciIsICJVbmFibGUgdG8gbG9hZCBjb25m
aWd1cmF0aW9uICEiKTsNCiAgICArCWVsc2UNCiAgICArCQlkaXNwbGF5X3RyZWUoJnJvb3RtZW51
KTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBvbl9sb2FkMV9hY3RpdmF0ZShHdGtNZW51SXRl
bSAqIG1lbnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCUd0a1dpZGdl
dCAqZnM7DQogICAgKw0KICAgICsJZnMgPSBndGtfZmlsZV9zZWxlY3Rpb25fbmV3KCJMb2FkIGZp
bGUuLi4iKTsNCiAgICArCWdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVChHVEtfRklMRV9TRUxF
Q1RJT04oZnMpLT5va19idXR0b24pLA0KICAgICsJCQkgImNsaWNrZWQiLA0KICAgICsJCQkgR19D
QUxMQkFDSyhsb2FkX2ZpbGVuYW1lKSwgKGdwb2ludGVyKSBmcyk7DQogICAgKwlnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVA0KICAgICsJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04o
ZnMpLT5va19idXR0b24pLA0KICAgICsJCQkJICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lk
Z2V0X2Rlc3Ryb3kpLA0KICAgICsJCQkJIChncG9pbnRlcikgZnMpOw0KICAgICsJZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QNCiAgICArCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9O
KGZzKS0+Y2FuY2VsX2J1dHRvbiksDQogICAgKwkJCQkgImNsaWNrZWQiLCBHX0NBTExCQUNLKGd0
a193aWRnZXRfZGVzdHJveSksDQogICAgKwkJCQkgKGdwb2ludGVyKSBmcyk7DQogICAgKwlndGtf
d2lkZ2V0X3Nob3coZnMpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9zYXZl
X2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAg
ICArew0KICAgICsJaWYgKGNvbmZfd3JpdGUoTlVMTCkpDQogICAgKwkJdGV4dF9pbnNlcnRfbXNn
KCJFcnJvciIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uICEiKTsNCiAgICArCWNvbmZf
d3JpdGVfYXV0b2NvbmYoMCk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICtzdGF0aWMgdm9p
ZA0KICAgICtzdG9yZV9maWxlbmFtZShHdGtGaWxlU2VsZWN0aW9uICogZmlsZV9zZWxlY3Rvciwg
Z3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwljb25zdCBnY2hhciAqZm47DQogICAg
Kw0KICAgICsJZm4gPSBndGtfZmlsZV9zZWxlY3Rpb25fZ2V0X2ZpbGVuYW1lKEdUS19GSUxFX1NF
TEVDVElPTg0KICAgICsJCQkJCSAgICAgKHVzZXJfZGF0YSkpOw0KICAgICsNCiAgICArCWlmIChj
b25mX3dyaXRlKGZuKSkNCiAgICArCQl0ZXh0X2luc2VydF9tc2coIkVycm9yIiwgIlVuYWJsZSB0
byBzYXZlIGNvbmZpZ3VyYXRpb24gISIpOw0KICAgICsNCiAgICArCWd0a193aWRnZXRfZGVzdHJv
eShHVEtfV0lER0VUKHVzZXJfZGF0YSkpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIG9uX3Nh
dmVfYXMxX2FjdGl2YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0
YSkNCiAgICArew0KICAgICsJR3RrV2lkZ2V0ICpmczsNCiAgICArDQogICAgKwlmcyA9IGd0a19m
aWxlX3NlbGVjdGlvbl9uZXcoIlNhdmUgZmlsZSBhcy4uLiIpOw0KICAgICsJZ19zaWduYWxfY29u
bmVjdChHVEtfT0JKRUNUKEdUS19GSUxFX1NFTEVDVElPTihmcyktPm9rX2J1dHRvbiksDQogICAg
KwkJCSAiY2xpY2tlZCIsDQogICAgKwkJCSBHX0NBTExCQUNLKHN0b3JlX2ZpbGVuYW1lKSwgKGdw
b2ludGVyKSBmcyk7DQogICAgKwlnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoR1RLX09CSkVDVA0K
ICAgICsJCQkJIChHVEtfRklMRV9TRUxFQ1RJT04oZnMpLT5va19idXR0b24pLA0KICAgICsJCQkJ
ICJjbGlja2VkIiwgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLA0KICAgICsJCQkJIChn
cG9pbnRlcikgZnMpOw0KICAgICsJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QN
CiAgICArCQkJCSAoR1RLX0ZJTEVfU0VMRUNUSU9OKGZzKS0+Y2FuY2VsX2J1dHRvbiksDQogICAg
KwkJCQkgImNsaWNrZWQiLCBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksDQogICAgKwkJ
CQkgKGdwb2ludGVyKSBmcyk7DQogICAgKwlndGtfd2lkZ2V0X3Nob3coZnMpOw0KICAgICt9DQog
ICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9xdWl0MV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1l
bnVpdGVtLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCWlmICghb25fd2luZG93
MV9kZWxldGVfZXZlbnQoTlVMTCwgTlVMTCwgTlVMTCkpDQogICAgKwkJZ3RrX3dpZGdldF9kZXN0
cm95KEdUS19XSURHRVQobWFpbl93bmQpKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3Zv
aWQgb25fc2hvd19uYW1lMV9hY3RpdmF0ZShHdGtNZW51SXRlbSAqIG1lbnVpdGVtLCBncG9pbnRl
ciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCUd0a1RyZWVWaWV3Q29sdW1uICpjb2w7DQogICAg
Kw0KICAgICsJc2hvd19uYW1lID0gR1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSktPmFjdGl2
ZTsNCiAgICArCWNvbCA9IGd0a190cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRy
ZWUyX3cpLCBDT0xfTkFNRSk7DQogICAgKwlpZiAoY29sKQ0KICAgICsJCWd0a190cmVlX3ZpZXdf
Y29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19uYW1lKTsNCiAgICArfQ0KICAgICsNCiAgICAr
DQogICAgK3ZvaWQgb25fc2hvd19yYW5nZTFfYWN0aXZhdGUoR3RrTWVudUl0ZW0gKiBtZW51aXRl
bSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlHdGtUcmVlVmlld0NvbHVtbiAq
Y29sOw0KICAgICsNCiAgICArCXNob3dfcmFuZ2UgPSBHVEtfQ0hFQ0tfTUVOVV9JVEVNKG1lbnVp
dGVtKS0+YWN0aXZlOw0KICAgICsJY29sID0gZ3RrX3RyZWVfdmlld19nZXRfY29sdW1uKEdUS19U
UkVFX1ZJRVcodHJlZTJfdyksIENPTF9OTyk7DQogICAgKwlpZiAoY29sKQ0KICAgICsJCWd0a190
cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7DQogICAgKwljb2wg
PSBndGtfdHJlZV92aWV3X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09MX01P
RCk7DQogICAgKwlpZiAoY29sKQ0KICAgICsJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNp
YmxlKGNvbCwgc2hvd19yYW5nZSk7DQogICAgKwljb2wgPSBndGtfdHJlZV92aWV3X2dldF9jb2x1
bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgQ09MX1lFUyk7DQogICAgKwlpZiAoY29sKQ0KICAg
ICsJCWd0a190cmVlX3ZpZXdfY29sdW1uX3NldF92aXNpYmxlKGNvbCwgc2hvd19yYW5nZSk7DQog
ICAgKw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9zaG93X2RhdGExX2FjdGl2
YXRlKEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0K
ICAgICsJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbDsNCiAgICArDQogICAgKwlzaG93X3ZhbHVlID0g
R1RLX0NIRUNLX01FTlVfSVRFTShtZW51aXRlbSktPmFjdGl2ZTsNCiAgICArCWNvbCA9IGd0a190
cmVlX3ZpZXdfZ2V0X2NvbHVtbihHVEtfVFJFRV9WSUVXKHRyZWUyX3cpLCBDT0xfVkFMVUUpOw0K
ICAgICsJaWYgKGNvbCkNCiAgICArCQlndGtfdHJlZV92aWV3X2NvbHVtbl9zZXRfdmlzaWJsZShj
b2wsIHNob3dfdmFsdWUpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZA0KICAgICtv
bl9zZXRfb3B0aW9uX21vZGUxX2FjdGl2YXRlKEd0a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlvcHRfbW9kZSA9IE9QVF9OT1JNQUw7DQogICAg
KwlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7DQogICAgKwlkaXNwbGF5X3RyZWUoJnJvb3Rt
ZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0byBzcGVlZC11cCAqLw0KICAgICt9DQog
ICAgKw0KICAgICsNCiAgICArdm9pZA0KICAgICtvbl9zZXRfb3B0aW9uX21vZGUyX2FjdGl2YXRl
KEd0a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAg
KwlvcHRfbW9kZSA9IE9QVF9BTEw7DQogICAgKwlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7
DQogICAgKwlkaXNwbGF5X3RyZWUoJnJvb3RtZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJl
ZSB0byBzcGVlZC11cCAqLw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZA0KICAgICtv
bl9zZXRfb3B0aW9uX21vZGUzX2FjdGl2YXRlKEd0a01lbnVJdGVtICptZW51aXRlbSwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlvcHRfbW9kZSA9IE9QVF9QUk9NUFQ7DQogICAg
KwlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7DQogICAgKwlkaXNwbGF5X3RyZWUoJnJvb3Rt
ZW51KTsJLyogaW5zdGVhZCBvZiB1cGRhdGVfdHJlZSB0byBzcGVlZC11cCAqLw0KICAgICt9DQog
ICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9pbnRyb2R1Y3Rpb24xX2FjdGl2YXRlKEd0a01lbnVJ
dGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJR3RrV2lk
Z2V0ICpkaWFsb2c7DQogICAgKwljb25zdCBnY2hhciAqaW50cm9fdGV4dCA9DQogICAgKwkgICAg
IldlbGNvbWUgdG8gZ2tjLCB0aGUgR1RLKyBncmFwaGljYWwgY29uZmlndXJhdGlvbiB0b29sXG4i
DQogICAgKwkgICAgIkZvciBlYWNoIG9wdGlvbiwgYSBibGFuayBib3ggaW5kaWNhdGVzIHRoZSBm
ZWF0dXJlIGlzIGRpc2FibGVkLCBhXG4iDQogICAgKwkgICAgImNoZWNrIGluZGljYXRlcyBpdCBp
cyBlbmFibGVkLCBhbmQgYSBkb3QgaW5kaWNhdGVzIHRoYXQgaXQgaXMgdG9cbiINCiAgICArCSAg
ICAiYmUgY29tcGlsZWQgYXMgYSBtb2R1bGUuICBDbGlja2luZyBvbiB0aGUgYm94IHdpbGwgY3lj
bGUgdGhyb3VnaCB0aGUgdGhyZWUgc3RhdGVzLlxuIg0KICAgICsJICAgICJcbiINCiAgICArCSAg
ICAiSWYgeW91IGRvIG5vdCBzZWUgYW4gb3B0aW9uIChlLmcuLCBhIGRldmljZSBkcml2ZXIpIHRo
YXQgeW91XG4iDQogICAgKwkgICAgImJlbGlldmUgc2hvdWxkIGJlIHByZXNlbnQsIHRyeSB0dXJu
aW5nIG9uIFNob3cgQWxsIE9wdGlvbnNcbiINCiAgICArCSAgICAidW5kZXIgdGhlIE9wdGlvbnMg
bWVudS5cbiINCiAgICArCSAgICAiQWx0aG91Z2ggdGhlcmUgaXMgbm8gY3Jvc3MgcmVmZXJlbmNl
IHlldCB0byBoZWxwIHlvdSBmaWd1cmUgb3V0XG4iDQogICAgKwkgICAgIndoYXQgb3RoZXIgb3B0
aW9ucyBtdXN0IGJlIGVuYWJsZWQgdG8gc3VwcG9ydCB0aGUgb3B0aW9uIHlvdVxuIg0KICAgICsJ
ICAgICJhcmUgaW50ZXJlc3RlZCBpbiwgeW91IGNhbiBzdGlsbCB2aWV3IHRoZSBoZWxwIG9mIGEg
Z3JheWVkLW91dFxuIg0KICAgICsJICAgICJvcHRpb24uXG4iDQogICAgKwkgICAgIlxuIg0KICAg
ICsJICAgICJUb2dnbGluZyBTaG93IERlYnVnIEluZm8gdW5kZXIgdGhlIE9wdGlvbnMgbWVudSB3
aWxsIHNob3cgXG4iDQogICAgKwkgICAgInRoZSBkZXBlbmRlbmNpZXMsIHdoaWNoIHlvdSBjYW4g
dGhlbiBtYXRjaCBieSBleGFtaW5pbmcgb3RoZXIgb3B0aW9ucy4iOw0KICAgICsNCiAgICArCWRp
YWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoR1RLX1dJTkRPVyhtYWluX3duZCksDQogICAg
KwkJCQkJR1RLX0RJQUxPR19ERVNUUk9ZX1dJVEhfUEFSRU5ULA0KICAgICsJCQkJCUdUS19NRVNT
QUdFX0lORk8sDQogICAgKwkJCQkJR1RLX0JVVFRPTlNfQ0xPU0UsICIlcyIsIGludHJvX3RleHQp
Ow0KICAgICsJZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKEdUS19PQkpFQ1QoZGlhbG9nKSwgInJl
c3BvbnNlIiwNCiAgICArCQkJCSBHX0NBTExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksDQogICAg
KwkJCQkgR1RLX09CSkVDVChkaWFsb2cpKTsNCiAgICArCWd0a193aWRnZXRfc2hvd19hbGwoZGlh
bG9nKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25fYWJvdXQxX2FjdGl2YXRl
KEd0a01lbnVJdGVtICogbWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAg
ICsJR3RrV2lkZ2V0ICpkaWFsb2c7DQogICAgKwljb25zdCBnY2hhciAqYWJvdXRfdGV4dCA9DQog
ICAgKwkgICAgImdrYyBpcyBjb3B5cmlnaHQgKGMpIDIwMDIgUm9tYWluIExpZXZpbiA8cm9tc0Bs
cGcudGljYWxjLm9yZz4uXG4iDQogICAgKwkgICAgICAiQmFzZWQgb24gdGhlIHNvdXJjZSBjb2Rl
IGZyb20gUm9tYW4gWmlwcGVsLlxuIjsNCiAgICArDQogICAgKwlkaWFsb2cgPSBndGtfbWVzc2Fn
ZV9kaWFsb2dfbmV3KEdUS19XSU5ET1cobWFpbl93bmQpLA0KICAgICsJCQkJCUdUS19ESUFMT0df
REVTVFJPWV9XSVRIX1BBUkVOVCwNCiAgICArCQkJCQlHVEtfTUVTU0FHRV9JTkZPLA0KICAgICsJ
CQkJCUdUS19CVVRUT05TX0NMT1NFLCAiJXMiLCBhYm91dF90ZXh0KTsNCiAgICArCWdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChHVEtfT0JKRUNUKGRpYWxvZyksICJyZXNwb25zZSIsDQogICAgKwkJ
CQkgR19DQUxMQkFDSyhndGtfd2lkZ2V0X2Rlc3Ryb3kpLA0KICAgICsJCQkJIEdUS19PQkpFQ1Qo
ZGlhbG9nKSk7DQogICAgKwlndGtfd2lkZ2V0X3Nob3dfYWxsKGRpYWxvZyk7DQogICAgK30NCiAg
ICArDQogICAgKw0KICAgICt2b2lkIG9uX2xpY2Vuc2UxX2FjdGl2YXRlKEd0a01lbnVJdGVtICog
bWVudWl0ZW0sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICArew0KICAgICsJR3RrV2lkZ2V0ICpk
aWFsb2c7DQogICAgKwljb25zdCBnY2hhciAqbGljZW5zZV90ZXh0ID0NCiAgICArCSAgICAiZ2tj
IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi5cbiINCiAgICAr
CSAgICAgICJGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgc291cmNlIGNvZGUg
b3JcbiINCiAgICArCSAgICAgICJ2aXNpdCBodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zZXMvbGlj
ZW5zZXMuaHRtbFxuIjsNCiAgICArDQogICAgKwlkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2df
bmV3KEdUS19XSU5ET1cobWFpbl93bmQpLA0KICAgICsJCQkJCUdUS19ESUFMT0dfREVTVFJPWV9X
SVRIX1BBUkVOVCwNCiAgICArCQkJCQlHVEtfTUVTU0FHRV9JTkZPLA0KICAgICsJCQkJCUdUS19C
VVRUT05TX0NMT1NFLCAiJXMiLCBsaWNlbnNlX3RleHQpOw0KICAgICsJZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKEdUS19PQkpFQ1QoZGlhbG9nKSwgInJlc3BvbnNlIiwNCiAgICArCQkJCSBHX0NB
TExCQUNLKGd0a193aWRnZXRfZGVzdHJveSksDQogICAgKwkJCQkgR1RLX09CSkVDVChkaWFsb2cp
KTsNCiAgICArCWd0a193aWRnZXRfc2hvd19hbGwoZGlhbG9nKTsNCiAgICArfQ0KICAgICsNCiAg
ICArDQogICAgK3ZvaWQgb25fYmFja19jbGlja2VkKEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50
ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICAr
DQogICAgKwljdXJyZW50ID0gY3VycmVudC0+cGFyZW50Ow0KICAgICsJcHR5cGUgPSBjdXJyZW50
LT5wcm9tcHQgPyBjdXJyZW50LT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgKwlpZiAo
cHR5cGUgIT0gUF9NRU5VKQ0KICAgICsJCWN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQ7DQogICAg
KwlkaXNwbGF5X3RyZWVfcGFydCgpOw0KICAgICsNCiAgICArCWlmIChjdXJyZW50ID09ICZyb290
bWVudSkNCiAgICArCQlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoYmFja19idG4sIEZBTFNFKTsN
CiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25fbG9hZF9jbGlja2VkKEd0a0J1dHRv
biAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlvbl9sb2FkMV9h
Y3RpdmF0ZShOVUxMLCB1c2VyX2RhdGEpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9p
ZCBvbl9zaW5nbGVfY2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0
YSkNCiAgICArew0KICAgICsJdmlld19tb2RlID0gU0lOR0xFX1ZJRVc7DQogICAgKwlndGtfd2lk
Z2V0X2hpZGUodHJlZTFfdyk7DQogICAgKwljdXJyZW50ID0gJnJvb3RtZW51Ow0KICAgICsJZGlz
cGxheV90cmVlX3BhcnQoKTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25fc3Bs
aXRfY2xpY2tlZChHdGtCdXR0b24gKiBidXR0b24sIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAr
ew0KICAgICsJZ2ludCB3LCBoOw0KICAgICsJdmlld19tb2RlID0gU1BMSVRfVklFVzsNCiAgICAr
CWd0a193aWRnZXRfc2hvdyh0cmVlMV93KTsNCiAgICArCWd0a193aW5kb3dfZ2V0X2RlZmF1bHRf
c2l6ZShHVEtfV0lORE9XKG1haW5fd25kKSwgJncsICZoKTsNCiAgICArCWd0a19wYW5lZF9zZXRf
cG9zaXRpb24oR1RLX1BBTkVEKGhwYW5lZCksIHcgLyAyKTsNCiAgICArCWlmICh0cmVlMikNCiAg
ICArCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7DQogICAgKwlkaXNwbGF5X2xpc3QoKTsN
CiAgICArDQogICAgKwkvKiBEaXNhYmxlIGJhY2sgYnRuLCBsaWtlIGluIGZ1bGwgbW9kZS4gKi8N
CiAgICArCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFMU0UpOw0KICAgICt9
DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9mdWxsX2NsaWNrZWQoR3RrQnV0dG9uICogYnV0
dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCXZpZXdfbW9kZSA9IEZVTExf
VklFVzsNCiAgICArCWd0a193aWRnZXRfaGlkZSh0cmVlMV93KTsNCiAgICArCWlmICh0cmVlMikN
CiAgICArCQlndGtfdHJlZV9zdG9yZV9jbGVhcih0cmVlMik7DQogICAgKwlkaXNwbGF5X3RyZWUo
JnJvb3RtZW51KTsNCiAgICArCWd0a193aWRnZXRfc2V0X3NlbnNpdGl2ZShiYWNrX2J0biwgRkFM
U0UpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArdm9pZCBvbl9jb2xsYXBzZV9jbGlja2Vk
KEd0a0J1dHRvbiAqIGJ1dHRvbiwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwln
dGtfdHJlZV92aWV3X2NvbGxhcHNlX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUyX3cpKTsNCiAgICAr
fQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgb25fZXhwYW5kX2NsaWNrZWQoR3RrQnV0dG9uICog
YnV0dG9uLCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCWd0a190cmVlX3ZpZXdf
ZXhwYW5kX2FsbChHVEtfVFJFRV9WSUVXKHRyZWUyX3cpKTsNCiAgICArfQ0KICAgICsNCiAgICAr
DQogICAgKy8qIENUcmVlIENhbGxiYWNrcyAqLw0KICAgICsNCiAgICArLyogQ2hhbmdlIGhleC9p
bnQvc3RyaW5nIHZhbHVlIGluIHRoZSBjZWxsICovDQogICAgK3N0YXRpYyB2b2lkIHJlbmRlcmVy
X2VkaXRlZChHdGtDZWxsUmVuZGVyZXJUZXh0ICogY2VsbCwNCiAgICArCQkJICAgIGNvbnN0IGdj
aGFyICogcGF0aF9zdHJpbmcsDQogICAgKwkJCSAgICBjb25zdCBnY2hhciAqIG5ld190ZXh0LCBn
cG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCUd0a1RyZWVQYXRoICpwYXRoID0gZ3Rr
X3RyZWVfcGF0aF9uZXdfZnJvbV9zdHJpbmcocGF0aF9zdHJpbmcpOw0KICAgICsJR3RrVHJlZUl0
ZXIgaXRlcjsNCiAgICArCWNvbnN0IGNoYXIgKm9sZF9kZWYsICpuZXdfZGVmOw0KICAgICsJc3Ry
dWN0IG1lbnUgKm1lbnU7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKw0KICAgICsJ
aWYgKCFndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbDIsICZpdGVyLCBwYXRoKSkNCiAgICAr
CQlyZXR1cm47DQogICAgKw0KICAgICsJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgJml0ZXIs
IENPTF9NRU5VLCAmbWVudSwgLTEpOw0KICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsNCiAg
ICArCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfVkFMVUUsICZvbGRfZGVm
LCAtMSk7DQogICAgKwluZXdfZGVmID0gbmV3X3RleHQ7DQogICAgKw0KICAgICsJc3ltX3NldF9z
dHJpbmdfdmFsdWUoc3ltLCBuZXdfZGVmKTsNCiAgICArDQogICAgKwl1cGRhdGVfdHJlZSgmcm9v
dG1lbnUsIE5VTEwpOw0KICAgICsNCiAgICArCWd0a190cmVlX3BhdGhfZnJlZShwYXRoKTsNCiAg
ICArfQ0KICAgICsNCiAgICArLyogQ2hhbmdlIHRoZSB2YWx1ZSBvZiBhIHN5bWJvbCBhbmQgdXBk
YXRlIHRoZSB0cmVlICovDQogICAgK3N0YXRpYyB2b2lkIGNoYW5nZV9zeW1fdmFsdWUoc3RydWN0
IG1lbnUgKm1lbnUsIGdpbnQgY29sKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW0g
PSBtZW51LT5zeW07DQogICAgKwl0cmlzdGF0ZSBuZXd2YWw7DQogICAgKw0KICAgICsJaWYgKCFz
eW0pDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAgICArCWlmIChjb2wgPT0gQ09MX05PKQ0KICAg
ICsJCW5ld3ZhbCA9IG5vOw0KICAgICsJZWxzZSBpZiAoY29sID09IENPTF9NT0QpDQogICAgKwkJ
bmV3dmFsID0gbW9kOw0KICAgICsJZWxzZSBpZiAoY29sID09IENPTF9ZRVMpDQogICAgKwkJbmV3
dmFsID0geWVzOw0KICAgICsJZWxzZQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwlzd2l0
Y2ggKHN5bV9nZXRfdHlwZShzeW0pKSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCWNh
c2UgU19UUklTVEFURToNCiAgICArCQlpZiAoIXN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3lt
LCBuZXd2YWwpKQ0KICAgICsJCQluZXd2YWwgPSB5ZXM7DQogICAgKwkJc3ltX3NldF90cmlzdGF0
ZV92YWx1ZShzeW0sIG5ld3ZhbCk7DQogICAgKwkJaWYgKHZpZXdfbW9kZSA9PSBGVUxMX1ZJRVcp
DQogICAgKwkJCXVwZGF0ZV90cmVlKCZyb290bWVudSwgTlVMTCk7DQogICAgKwkJZWxzZSBpZiAo
dmlld19tb2RlID09IFNQTElUX1ZJRVcpIHsNCiAgICArCQkJdXBkYXRlX3RyZWUoYnJvd3NlZCwg
TlVMTCk7DQogICAgKwkJCWRpc3BsYXlfbGlzdCgpOw0KICAgICsJCX0NCiAgICArCQllbHNlIGlm
ICh2aWV3X21vZGUgPT0gU0lOR0xFX1ZJRVcpDQogICAgKwkJCWRpc3BsYXlfdHJlZV9wYXJ0KCk7
CS8vZml4bWU6IGtlZXAgZXhwL2NvbGwNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgU19JTlQ6
DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJY2FzZSBTX1NUUklORzoNCiAgICArCWRlZmF1bHQ6
DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lk
IHRvZ2dsZV9zeW1fdmFsdWUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCWlmICgh
bWVudS0+c3ltKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwlzeW1fdG9nZ2xlX3RyaXN0
YXRlX3ZhbHVlKG1lbnUtPnN5bSk7DQogICAgKwlpZiAodmlld19tb2RlID09IEZVTExfVklFVykN
CiAgICArCQl1cGRhdGVfdHJlZSgmcm9vdG1lbnUsIE5VTEwpOw0KICAgICsJZWxzZSBpZiAodmll
d19tb2RlID09IFNQTElUX1ZJRVcpIHsNCiAgICArCQl1cGRhdGVfdHJlZShicm93c2VkLCBOVUxM
KTsNCiAgICArCQlkaXNwbGF5X2xpc3QoKTsNCiAgICArCX0NCiAgICArCWVsc2UgaWYgKHZpZXdf
bW9kZSA9PSBTSU5HTEVfVklFVykNCiAgICArCQlkaXNwbGF5X3RyZWVfcGFydCgpOwkvL2ZpeG1l
OiBrZWVwIGV4cC9jb2xsDQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBnaW50IGNvbHVtbjJp
bmRleChHdGtUcmVlVmlld0NvbHVtbiAqIGNvbHVtbikNCiAgICArew0KICAgICsJZ2ludCBpOw0K
ICAgICsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBDT0xfTlVNQkVSOyBpKyspIHsNCiAgICArCQlH
dGtUcmVlVmlld0NvbHVtbiAqY29sOw0KICAgICsNCiAgICArCQljb2wgPSBndGtfdHJlZV92aWV3
X2dldF9jb2x1bW4oR1RLX1RSRUVfVklFVyh0cmVlMl93KSwgaSk7DQogICAgKwkJaWYgKGNvbCA9
PSBjb2x1bW4pDQogICAgKwkJCXJldHVybiBpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVy
biAtMTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgKy8qIFVzZXIgY2xpY2s6IHVwZGF0ZSBj
aG9pY2UgKGZ1bGwpIG9yIGdvZXMgZG93biAoc2luZ2xlKSAqLw0KICAgICtnYm9vbGVhbg0KICAg
ICtvbl90cmVldmlldzJfYnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdpZGdldCwNCiAg
ICArCQkJCUdka0V2ZW50QnV0dG9uICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0YSkNCiAgICAr
ew0KICAgICsJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdldCk7DQogICAg
KwlHdGtUcmVlUGF0aCAqcGF0aDsNCiAgICArCUd0a1RyZWVWaWV3Q29sdW1uICpjb2x1bW47DQog
ICAgKwlHdGtUcmVlSXRlciBpdGVyOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAgKwln
aW50IGNvbDsNCiAgICArDQogICAgKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigyLDEsNCkgLy8gYnVn
IGluIGN0cmVlIHdpdGggZWFybGllciB2ZXJzaW9uIG9mIEdUSw0KICAgICsJZ2ludCB0eCA9IChn
aW50KSBldmVudC0+eDsNCiAgICArCWdpbnQgdHkgPSAoZ2ludCkgZXZlbnQtPnk7DQogICAgKwln
aW50IGN4LCBjeTsNCiAgICArDQogICAgKwlndGtfdHJlZV92aWV3X2dldF9wYXRoX2F0X3Bvcyh2
aWV3LCB0eCwgdHksICZwYXRoLCAmY29sdW1uLCAmY3gsDQogICAgKwkJCQkgICAgICAmY3kpOw0K
ICAgICsjZWxzZQ0KICAgICsJZ3RrX3RyZWVfdmlld19nZXRfY3Vyc29yKHZpZXcsICZwYXRoLCAm
Y29sdW1uKTsNCiAgICArI2VuZGlmDQogICAgKwlpZiAocGF0aCA9PSBOVUxMKQ0KICAgICsJCXJl
dHVybiBGQUxTRTsNCiAgICArDQogICAgKwlpZiAoIWd0a190cmVlX21vZGVsX2dldF9pdGVyKG1v
ZGVsMiwgJml0ZXIsIHBhdGgpKQ0KICAgICsJCXJldHVybiBGQUxTRTsNCiAgICArCWd0a190cmVl
X21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfTUVOVSwgJm1lbnUsIC0xKTsNCiAgICArDQog
ICAgKwljb2wgPSBjb2x1bW4yaW5kZXgoY29sdW1uKTsNCiAgICArCWlmIChldmVudC0+dHlwZSA9
PSBHREtfMkJVVFRPTl9QUkVTUykgew0KICAgICsJCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAg
ICsJCXB0eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dO
Ow0KICAgICsNCiAgICArCQlpZiAocHR5cGUgPT0gUF9NRU5VICYmIHZpZXdfbW9kZSAhPSBGVUxM
X1ZJRVcgJiYgY29sID09IENPTF9PUFRJT04pIHsNCiAgICArCQkJLy8gZ29lcyBkb3duIGludG8g
bWVudQ0KICAgICsJCQljdXJyZW50ID0gbWVudTsNCiAgICArCQkJZGlzcGxheV90cmVlX3BhcnQo
KTsNCiAgICArCQkJZ3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKGJhY2tfYnRuLCBUUlVFKTsNCiAg
ICArCQl9IGVsc2UgaWYgKGNvbCA9PSBDT0xfT1BUSU9OKSB7DQogICAgKwkJCXRvZ2dsZV9zeW1f
dmFsdWUobWVudSk7DQogICAgKwkJCWd0a190cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRo
LCBUUlVFKTsNCiAgICArCQl9DQogICAgKwl9IGVsc2Ugew0KICAgICsJCWlmIChjb2wgPT0gQ09M
X1ZBTFVFKSB7DQogICAgKwkJCXRvZ2dsZV9zeW1fdmFsdWUobWVudSk7DQogICAgKwkJCWd0a190
cmVlX3ZpZXdfZXhwYW5kX3Jvdyh2aWV3LCBwYXRoLCBUUlVFKTsNCiAgICArCQl9IGVsc2UgaWYg
KGNvbCA9PSBDT0xfTk8gfHwgY29sID09IENPTF9NT0QNCiAgICArCQkJICAgfHwgY29sID09IENP
TF9ZRVMpIHsNCiAgICArCQkJY2hhbmdlX3N5bV92YWx1ZShtZW51LCBjb2wpOw0KICAgICsJCQln
dGtfdHJlZV92aWV3X2V4cGFuZF9yb3codmlldywgcGF0aCwgVFJVRSk7DQogICAgKwkJfQ0KICAg
ICsJfQ0KICAgICsNCiAgICArCXJldHVybiBGQUxTRTsNCiAgICArfQ0KICAgICsNCiAgICArLyog
S2V5IHByZXNzZWQ6IHVwZGF0ZSBjaG9pY2UgKi8NCiAgICArZ2Jvb2xlYW4NCiAgICArb25fdHJl
ZXZpZXcyX2tleV9wcmVzc19ldmVudChHdGtXaWRnZXQgKiB3aWRnZXQsDQogICAgKwkJCSAgICAg
R2RrRXZlbnRLZXkgKiBldmVudCwgZ3BvaW50ZXIgdXNlcl9kYXRhKQ0KICAgICt7DQogICAgKwlH
dGtUcmVlVmlldyAqdmlldyA9IEdUS19UUkVFX1ZJRVcod2lkZ2V0KTsNCiAgICArCUd0a1RyZWVQ
YXRoICpwYXRoOw0KICAgICsJR3RrVHJlZVZpZXdDb2x1bW4gKmNvbHVtbjsNCiAgICArCUd0a1Ry
ZWVJdGVyIGl0ZXI7DQogICAgKwlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICArCWdpbnQgY29sOw0K
ICAgICsNCiAgICArCWd0a190cmVlX3ZpZXdfZ2V0X2N1cnNvcih2aWV3LCAmcGF0aCwgJmNvbHVt
bik7DQogICAgKwlpZiAocGF0aCA9PSBOVUxMKQ0KICAgICsJCXJldHVybiBGQUxTRTsNCiAgICAr
DQogICAgKwlpZiAoZXZlbnQtPmtleXZhbCA9PSBHREtfc3BhY2UpIHsNCiAgICArCQlpZiAoZ3Rr
X3RyZWVfdmlld19yb3dfZXhwYW5kZWQodmlldywgcGF0aCkpDQogICAgKwkJCWd0a190cmVlX3Zp
ZXdfY29sbGFwc2Vfcm93KHZpZXcsIHBhdGgpOw0KICAgICsJCWVsc2UNCiAgICArCQkJZ3RrX3Ry
ZWVfdmlld19leHBhbmRfcm93KHZpZXcsIHBhdGgsIEZBTFNFKTsNCiAgICArCQlyZXR1cm4gVFJV
RTsNCiAgICArCX0NCiAgICArCWlmIChldmVudC0+a2V5dmFsID09IEdES19LUF9FbnRlcikgew0K
ICAgICsJfQ0KICAgICsJaWYgKHdpZGdldCA9PSB0cmVlMV93KQ0KICAgICsJCXJldHVybiBGQUxT
RTsNCiAgICArDQogICAgKwlndGtfdHJlZV9tb2RlbF9nZXRfaXRlcihtb2RlbDIsICZpdGVyLCBw
YXRoKTsNCiAgICArCWd0a190cmVlX21vZGVsX2dldChtb2RlbDIsICZpdGVyLCBDT0xfTUVOVSwg
Jm1lbnUsIC0xKTsNCiAgICArDQogICAgKwlpZiAoIXN0cmNhc2VjbXAoZXZlbnQtPnN0cmluZywg
Im4iKSkNCiAgICArCQljb2wgPSBDT0xfTk87DQogICAgKwllbHNlIGlmICghc3RyY2FzZWNtcChl
dmVudC0+c3RyaW5nLCAibSIpKQ0KICAgICsJCWNvbCA9IENPTF9NT0Q7DQogICAgKwllbHNlIGlm
ICghc3RyY2FzZWNtcChldmVudC0+c3RyaW5nLCAieSIpKQ0KICAgICsJCWNvbCA9IENPTF9ZRVM7
DQogICAgKwllbHNlDQogICAgKwkJY29sID0gLTE7DQogICAgKwljaGFuZ2Vfc3ltX3ZhbHVlKG1l
bnUsIGNvbCk7DQogICAgKw0KICAgICsJcmV0dXJuIEZBTFNFOw0KICAgICt9DQogICAgKw0KICAg
ICsNCiAgICArLyogUm93IHNlbGVjdGlvbiBjaGFuZ2VkOiB1cGRhdGUgaGVscCAqLw0KICAgICt2
b2lkDQogICAgK29uX3RyZWV2aWV3Ml9jdXJzb3JfY2hhbmdlZChHdGtUcmVlVmlldyAqIHRyZWV2
aWV3LCBncG9pbnRlciB1c2VyX2RhdGEpDQogICAgK3sNCiAgICArCUd0a1RyZWVTZWxlY3Rpb24g
KnNlbGVjdGlvbjsNCiAgICArCUd0a1RyZWVJdGVyIGl0ZXI7DQogICAgKwlzdHJ1Y3QgbWVudSAq
bWVudTsNCiAgICArDQogICAgKwlzZWxlY3Rpb24gPSBndGtfdHJlZV92aWV3X2dldF9zZWxlY3Rp
b24odHJlZXZpZXcpOw0KICAgICsJaWYgKGd0a190cmVlX3NlbGVjdGlvbl9nZXRfc2VsZWN0ZWQo
c2VsZWN0aW9uLCAmbW9kZWwyLCAmaXRlcikpIHsNCiAgICArCQlndGtfdHJlZV9tb2RlbF9nZXQo
bW9kZWwyLCAmaXRlciwgQ09MX01FTlUsICZtZW51LCAtMSk7DQogICAgKwkJdGV4dF9pbnNlcnRf
aGVscChtZW51KTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArDQogICAgKy8qIFVzZXIg
Y2xpY2s6IGRpc3BsYXkgc3ViLXRyZWUgaW4gdGhlIHJpZ2h0IGZyYW1lLiAqLw0KICAgICtnYm9v
bGVhbg0KICAgICtvbl90cmVldmlldzFfYnV0dG9uX3ByZXNzX2V2ZW50KEd0a1dpZGdldCAqIHdp
ZGdldCwNCiAgICArCQkJCUdka0V2ZW50QnV0dG9uICogZXZlbnQsIGdwb2ludGVyIHVzZXJfZGF0
YSkNCiAgICArew0KICAgICsJR3RrVHJlZVZpZXcgKnZpZXcgPSBHVEtfVFJFRV9WSUVXKHdpZGdl
dCk7DQogICAgKwlHdGtUcmVlUGF0aCAqcGF0aDsNCiAgICArCUd0a1RyZWVWaWV3Q29sdW1uICpj
b2x1bW47DQogICAgKwlHdGtUcmVlSXRlciBpdGVyOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7
DQogICAgKw0KICAgICsJZ2ludCB0eCA9IChnaW50KSBldmVudC0+eDsNCiAgICArCWdpbnQgdHkg
PSAoZ2ludCkgZXZlbnQtPnk7DQogICAgKwlnaW50IGN4LCBjeTsNCiAgICArDQogICAgKwlndGtf
dHJlZV92aWV3X2dldF9wYXRoX2F0X3Bvcyh2aWV3LCB0eCwgdHksICZwYXRoLCAmY29sdW1uLCAm
Y3gsDQogICAgKwkJCQkgICAgICAmY3kpOw0KICAgICsJaWYgKHBhdGggPT0gTlVMTCkNCiAgICAr
CQlyZXR1cm4gRkFMU0U7DQogICAgKw0KICAgICsJZ3RrX3RyZWVfbW9kZWxfZ2V0X2l0ZXIobW9k
ZWwxLCAmaXRlciwgcGF0aCk7DQogICAgKwlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwxLCAmaXRl
ciwgQ09MX01FTlUsICZtZW51LCAtMSk7DQogICAgKw0KICAgICsJaWYgKGV2ZW50LT50eXBlID09
IEdES18yQlVUVE9OX1BSRVNTKSB7DQogICAgKwkJdG9nZ2xlX3N5bV92YWx1ZShtZW51KTsNCiAg
ICArCQljdXJyZW50ID0gbWVudTsNCiAgICArCQlkaXNwbGF5X3RyZWVfcGFydCgpOw0KICAgICsJ
fSBlbHNlIHsNCiAgICArCQlicm93c2VkID0gbWVudTsNCiAgICArCQlkaXNwbGF5X3RyZWVfcGFy
dCgpOw0KICAgICsJfQ0KICAgICsNCiAgICArCWd0a193aWRnZXRfcmVhbGl6ZSh0cmVlMl93KTsN
CiAgICArCWd0a190cmVlX3ZpZXdfc2V0X2N1cnNvcih2aWV3LCBwYXRoLCBOVUxMLCBGQUxTRSk7
DQogICAgKwlndGtfd2lkZ2V0X2dyYWJfZm9jdXModHJlZTJfdyk7DQogICAgKw0KICAgICsJcmV0
dXJuIEZBTFNFOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyogRmlsbCBhIHJvdyBvZiBz
dHJpbmdzICovDQogICAgK3N0YXRpYyBnY2hhciAqKmZpbGxfcm93KHN0cnVjdCBtZW51ICptZW51
KQ0KICAgICt7DQogICAgKwlzdGF0aWMgZ2NoYXIgKnJvd1tDT0xfTlVNQkVSXTsNCiAgICArCXN0
cnVjdCBzeW1ib2wgKnN5bSA9IG1lbnUtPnN5bTsNCiAgICArCWNvbnN0IGNoYXIgKmRlZjsNCiAg
ICArCWludCBzdHlwZTsNCiAgICArCXRyaXN0YXRlIHZhbDsNCiAgICArCWVudW0gcHJvcF90eXBl
IHB0eXBlOw0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJZm9yIChpID0gQ09MX09QVElPTjsg
aSA8PSBDT0xfQ09MT1I7IGkrKykNCiAgICArCQlnX2ZyZWUocm93W2ldKTsNCiAgICArCWJ6ZXJv
KHJvdywgc2l6ZW9mKHJvdykpOw0KICAgICsNCiAgICArCXJvd1tDT0xfT1BUSU9OXSA9DQogICAg
KwkgICAgZ19zdHJkdXBfcHJpbnRmKCIlcyAlcyIsIG1lbnVfZ2V0X3Byb21wdChtZW51KSwNCiAg
ICArCQkJICAgIHN5bSAmJiAhc3ltX2hhc192YWx1ZShzeW0pID8gIihORVcpIiA6ICIiKTsNCiAg
ICArDQogICAgKwlpZiAob3B0X21vZGUgPT0gT1BUX0FMTCAmJiAhbWVudV9pc192aXNpYmxlKG1l
bnUpKQ0KICAgICsJCXJvd1tDT0xfQ09MT1JdID0gZ19zdHJkdXAoIkRhcmtHcmF5Iik7DQogICAg
KwllbHNlIGlmIChvcHRfbW9kZSA9PSBPUFRfUFJPTVBUICYmDQogICAgKwkJCW1lbnVfaGFzX3By
b21wdChtZW51KSAmJiAhbWVudV9pc192aXNpYmxlKG1lbnUpKQ0KICAgICsJCXJvd1tDT0xfQ09M
T1JdID0gZ19zdHJkdXAoIkRhcmtHcmF5Iik7DQogICAgKwllbHNlDQogICAgKwkJcm93W0NPTF9D
T0xPUl0gPSBnX3N0cmR1cCgiQmxhY2siKTsNCiAgICArDQogICAgKwlwdHlwZSA9IG1lbnUtPnBy
b21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCXN3aXRjaCAocHR5
cGUpIHsNCiAgICArCWNhc2UgUF9NRU5VOg0KICAgICsJCXJvd1tDT0xfUElYQlVGXSA9IChnY2hh
ciAqKSB4cG1fbWVudTsNCiAgICArCQlpZiAodmlld19tb2RlID09IFNJTkdMRV9WSUVXKQ0KICAg
ICsJCQlyb3dbQ09MX1BJWFZJU10gPSBHSU5UX1RPX1BPSU5URVIoVFJVRSk7DQogICAgKwkJcm93
W0NPTF9CVE5WSVNdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAgICArCQlicmVhazsNCiAg
ICArCWNhc2UgUF9DT01NRU5UOg0KICAgICsJCXJvd1tDT0xfUElYQlVGXSA9IChnY2hhciAqKSB4
cG1fdm9pZDsNCiAgICArCQlyb3dbQ09MX1BJWFZJU10gPSBHSU5UX1RPX1BPSU5URVIoRkFMU0Up
Ow0KICAgICsJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7DQogICAg
KwkJYnJlYWs7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCXJvd1tDT0xfUElYQlVGXSA9IChnY2hh
ciAqKSB4cG1fdm9pZDsNCiAgICArCQlyb3dbQ09MX1BJWFZJU10gPSBHSU5UX1RPX1BPSU5URVIo
RkFMU0UpOw0KICAgICsJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsN
CiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoIXN5bSkNCiAgICArCQly
ZXR1cm4gcm93Ow0KICAgICsJcm93W0NPTF9OQU1FXSA9IGdfc3RyZHVwKHN5bS0+bmFtZSk7DQog
ICAgKw0KICAgICsJc3ltX2NhbGNfdmFsdWUoc3ltKTsNCiAgICArCXN5bS0+ZmxhZ3MgJj0gflNZ
TUJPTF9DSEFOR0VEOw0KICAgICsNCiAgICArCWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsJLy8g
cGFyc2UgY2hpbGRzIGZvciBnZXR0aW5nIGZpbmFsIHZhbHVlDQogICAgKwkJc3RydWN0IG1lbnUg
KmNoaWxkOw0KICAgICsJCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92
YWx1ZShzeW0pOw0KICAgICsJCXN0cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7DQogICAgKw0K
ICAgICsJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxTRSk7DQogICAgKw0K
ICAgICsJCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dCkgew0KICAgICsJCQlpZiAobWVudV9pc192aXNpYmxlKGNoaWxkKQ0KICAgICsJCQkgICAgJiYg
Y2hpbGQtPnN5bSA9PSBkZWZfc3ltKQ0KICAgICsJCQkJZGVmX21lbnUgPSBjaGlsZDsNCiAgICAr
CQl9DQogICAgKw0KICAgICsJCWlmIChkZWZfbWVudSkNCiAgICArCQkJcm93W0NPTF9WQUxVRV0g
PQ0KICAgICsJCQkgICAgZ19zdHJkdXAobWVudV9nZXRfcHJvbXB0KGRlZl9tZW51KSk7DQogICAg
Kwl9DQogICAgKwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSE9JQ0VWQUwpDQogICAgKwkJcm93
W0NPTF9CVE5SQURdID0gR0lOVF9UT19QT0lOVEVSKFRSVUUpOw0KICAgICsNCiAgICArCXN0eXBl
ID0gc3ltX2dldF90eXBlKHN5bSk7DQogICAgKwlzd2l0Y2ggKHN0eXBlKSB7DQogICAgKwljYXNl
IFNfQk9PTEVBTjoNCiAgICArCQlpZiAoR1BPSU5URVJfVE9fSU5UKHJvd1tDT0xfUElYVklTXSkg
PT0gRkFMU0UpDQogICAgKwkJCXJvd1tDT0xfQlROVklTXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVF
KTsNCiAgICArCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKQ0KICAgICsJCQlicmVhazsNCiAgICAr
CQkvKiBmYWxsIHRocm91Z2ggKi8NCiAgICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQl2YWwg
PSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKwkJc3dpdGNoICh2YWwpIHsNCiAg
ICArCQljYXNlIG5vOg0KICAgICsJCQlyb3dbQ09MX05PXSA9IGdfc3RyZHVwKCJOIik7DQogICAg
KwkJCXJvd1tDT0xfVkFMVUVdID0gZ19zdHJkdXAoIk4iKTsNCiAgICArCQkJcm93W0NPTF9CVE5B
Q1RdID0gR0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAgICArCQkJcm93W0NPTF9CVE5JTkNdID0g
R0lOVF9UT19QT0lOVEVSKEZBTFNFKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBtb2Q6
DQogICAgKwkJCXJvd1tDT0xfTU9EXSA9IGdfc3RyZHVwKCJNIik7DQogICAgKwkJCXJvd1tDT0xf
VkFMVUVdID0gZ19zdHJkdXAoIk0iKTsNCiAgICArCQkJcm93W0NPTF9CVE5JTkNdID0gR0lOVF9U
T19QT0lOVEVSKFRSVUUpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIHllczoNCiAgICAr
CQkJcm93W0NPTF9ZRVNdID0gZ19zdHJkdXAoIlkiKTsNCiAgICArCQkJcm93W0NPTF9WQUxVRV0g
PSBnX3N0cmR1cCgiWSIpOw0KICAgICsJCQlyb3dbQ09MX0JUTkFDVF0gPSBHSU5UX1RPX1BPSU5U
RVIoVFJVRSk7DQogICAgKwkJCXJvd1tDT0xfQlROSU5DXSA9IEdJTlRfVE9fUE9JTlRFUihGQUxT
RSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJaWYgKHZhbCAhPSBu
byAmJiBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgbm8pKQ0KICAgICsJCQlyb3dbQ09M
X05PXSA9IGdfc3RyZHVwKCJfIik7DQogICAgKwkJaWYgKHZhbCAhPSBtb2QgJiYgc3ltX3RyaXN0
YXRlX3dpdGhpbl9yYW5nZShzeW0sIG1vZCkpDQogICAgKwkJCXJvd1tDT0xfTU9EXSA9IGdfc3Ry
ZHVwKCJfIik7DQogICAgKwkJaWYgKHZhbCAhPSB5ZXMgJiYgc3ltX3RyaXN0YXRlX3dpdGhpbl9y
YW5nZShzeW0sIHllcykpDQogICAgKwkJCXJvd1tDT0xfWUVTXSA9IGdfc3RyZHVwKCJfIik7DQog
ICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJY2FzZSBTX0hFWDoNCiAgICAr
CWNhc2UgU19TVFJJTkc6DQogICAgKwkJZGVmID0gc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKTsN
CiAgICArCQlyb3dbQ09MX1ZBTFVFXSA9IGdfc3RyZHVwKGRlZik7DQogICAgKwkJcm93W0NPTF9F
RElUXSA9IEdJTlRfVE9fUE9JTlRFUihUUlVFKTsNCiAgICArCQlyb3dbQ09MX0JUTlZJU10gPSBH
SU5UX1RPX1BPSU5URVIoRkFMU0UpOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAg
ICArCXJldHVybiByb3c7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICsvKiBTZXQgdGhlIG5v
ZGUgY29udGVudCB3aXRoIGEgcm93IG9mIHN0cmluZ3MgKi8NCiAgICArc3RhdGljIHZvaWQgc2V0
X25vZGUoR3RrVHJlZUl0ZXIgKiBub2RlLCBzdHJ1Y3QgbWVudSAqbWVudSwgZ2NoYXIgKiogcm93
KQ0KICAgICt7DQogICAgKwlHZGtDb2xvciBjb2xvcjsNCiAgICArCWdib29sZWFuIHN1Y2Nlc3M7
DQogICAgKwlHZGtQaXhidWYgKnBpeDsNCiAgICArDQogICAgKwlwaXggPSBnZGtfcGl4YnVmX25l
d19mcm9tX3hwbV9kYXRhKChjb25zdCBjaGFyICoqKQ0KICAgICsJCQkJCSAgIHJvd1tDT0xfUElY
QlVGXSk7DQogICAgKw0KICAgICsJZ2RrX2NvbG9yX3BhcnNlKHJvd1tDT0xfQ09MT1JdLCAmY29s
b3IpOw0KICAgICsJZ2RrX2NvbG9ybWFwX2FsbG9jX2NvbG9ycyhnZGtfY29sb3JtYXBfZ2V0X3N5
c3RlbSgpLCAmY29sb3IsIDEsDQogICAgKwkJCQkgIEZBTFNFLCBGQUxTRSwgJnN1Y2Nlc3MpOw0K
ICAgICsNCiAgICArCWd0a190cmVlX3N0b3JlX3NldCh0cmVlLCBub2RlLA0KICAgICsJCQkgICBD
T0xfT1BUSU9OLCByb3dbQ09MX09QVElPTl0sDQogICAgKwkJCSAgIENPTF9OQU1FLCByb3dbQ09M
X05BTUVdLA0KICAgICsJCQkgICBDT0xfTk8sIHJvd1tDT0xfTk9dLA0KICAgICsJCQkgICBDT0xf
TU9ELCByb3dbQ09MX01PRF0sDQogICAgKwkJCSAgIENPTF9ZRVMsIHJvd1tDT0xfWUVTXSwNCiAg
ICArCQkJICAgQ09MX1ZBTFVFLCByb3dbQ09MX1ZBTFVFXSwNCiAgICArCQkJICAgQ09MX01FTlUs
IChncG9pbnRlcikgbWVudSwNCiAgICArCQkJICAgQ09MX0NPTE9SLCAmY29sb3IsDQogICAgKwkJ
CSAgIENPTF9FRElULCBHUE9JTlRFUl9UT19JTlQocm93W0NPTF9FRElUXSksDQogICAgKwkJCSAg
IENPTF9QSVhCVUYsIHBpeCwNCiAgICArCQkJICAgQ09MX1BJWFZJUywgR1BPSU5URVJfVE9fSU5U
KHJvd1tDT0xfUElYVklTXSksDQogICAgKwkJCSAgIENPTF9CVE5WSVMsIEdQT0lOVEVSX1RPX0lO
VChyb3dbQ09MX0JUTlZJU10pLA0KICAgICsJCQkgICBDT0xfQlROQUNULCBHUE9JTlRFUl9UT19J
TlQocm93W0NPTF9CVE5BQ1RdKSwNCiAgICArCQkJICAgQ09MX0JUTklOQywgR1BPSU5URVJfVE9f
SU5UKHJvd1tDT0xfQlROSU5DXSksDQogICAgKwkJCSAgIENPTF9CVE5SQUQsIEdQT0lOVEVSX1RP
X0lOVChyb3dbQ09MX0JUTlJBRF0pLA0KICAgICsJCQkgICAtMSk7DQogICAgKw0KICAgICsJZ19v
YmplY3RfdW5yZWYocGl4KTsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgKy8qIEFkZCBhIG5v
ZGUgdG8gdGhlIHRyZWUgKi8NCiAgICArc3RhdGljIHZvaWQgcGxhY2Vfbm9kZShzdHJ1Y3QgbWVu
dSAqbWVudSwgY2hhciAqKnJvdykNCiAgICArew0KICAgICsJR3RrVHJlZUl0ZXIgKnBhcmVudCA9
IHBhcmVudHNbaW5kZW50IC0gMV07DQogICAgKwlHdGtUcmVlSXRlciAqbm9kZSA9IHBhcmVudHNb
aW5kZW50XTsNCiAgICArDQogICAgKwlndGtfdHJlZV9zdG9yZV9hcHBlbmQodHJlZSwgbm9kZSwg
cGFyZW50KTsNCiAgICArCXNldF9ub2RlKG5vZGUsIG1lbnUsIHJvdyk7DQogICAgK30NCiAgICAr
DQogICAgKw0KICAgICsvKiBGaW5kIGEgbm9kZSBpbiB0aGUgR1RLKyB0cmVlICovDQogICAgK3N0
YXRpYyBHdGtUcmVlSXRlciBmb3VuZDsNCiAgICArDQogICAgKy8qDQogICAgKyAqIEZpbmQgYSBt
ZW51IGluIHRoZSBHdGtUcmVlIHN0YXJ0aW5nIGF0IHBhcmVudC4NCiAgICArICovDQogICAgK3N0
YXRpYyBHdGtUcmVlSXRlciAqZ3RrdHJlZV9pdGVyX2ZpbmRfbm9kZShHdGtUcmVlSXRlciAqcGFy
ZW50LA0KICAgICsJCQkJCSAgIHN0cnVjdCBtZW51ICp0b2ZpbmQpDQogICAgK3sNCiAgICArCUd0
a1RyZWVJdGVyIGl0ZXI7DQogICAgKwlHdGtUcmVlSXRlciAqY2hpbGQgPSAmaXRlcjsNCiAgICAr
CWdib29sZWFuIHZhbGlkOw0KICAgICsJR3RrVHJlZUl0ZXIgKnJldDsNCiAgICArDQogICAgKwl2
YWxpZCA9IGd0a190cmVlX21vZGVsX2l0ZXJfY2hpbGRyZW4obW9kZWwyLCBjaGlsZCwgcGFyZW50
KTsNCiAgICArCXdoaWxlICh2YWxpZCkgew0KICAgICsJCXN0cnVjdCBtZW51ICptZW51Ow0KICAg
ICsNCiAgICArCQlndGtfdHJlZV9tb2RlbF9nZXQobW9kZWwyLCBjaGlsZCwgNiwgJm1lbnUsIC0x
KTsNCiAgICArDQogICAgKwkJaWYgKG1lbnUgPT0gdG9maW5kKSB7DQogICAgKwkJCW1lbWNweSgm
Zm91bmQsIGNoaWxkLCBzaXplb2YoR3RrVHJlZUl0ZXIpKTsNCiAgICArCQkJcmV0dXJuICZmb3Vu
ZDsNCiAgICArCQl9DQogICAgKw0KICAgICsJCXJldCA9IGd0a3RyZWVfaXRlcl9maW5kX25vZGUo
Y2hpbGQsIHRvZmluZCk7DQogICAgKwkJaWYgKHJldCkNCiAgICArCQkJcmV0dXJuIHJldDsNCiAg
ICArDQogICAgKwkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQobW9kZWwyLCBjaGls
ZCk7DQogICAgKwl9DQogICAgKw0KICAgICsJcmV0dXJuIE5VTEw7DQogICAgK30NCiAgICArDQog
ICAgKw0KICAgICsvKg0KICAgICsgKiBVcGRhdGUgdGhlIHRyZWUgYnkgYWRkaW5nL3JlbW92aW5n
IGVudHJpZXMNCiAgICArICogRG9lcyBub3QgY2hhbmdlIG90aGVyIG5vZGVzDQogICAgKyAqLw0K
ICAgICtzdGF0aWMgdm9pZCB1cGRhdGVfdHJlZShzdHJ1Y3QgbWVudSAqc3JjLCBHdGtUcmVlSXRl
ciAqIGRzdCkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkMTsNCiAgICArCUd0a1Ry
ZWVJdGVyIGl0ZXIsIHRtcDsNCiAgICArCUd0a1RyZWVJdGVyICpjaGlsZDIgPSAmaXRlcjsNCiAg
ICArCWdib29sZWFuIHZhbGlkOw0KICAgICsJR3RrVHJlZUl0ZXIgKnNpYmxpbmc7DQogICAgKwlz
dHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgbWVudSAqbWVudTEsICptZW51MjsNCiAg
ICArDQogICAgKwlpZiAoc3JjID09ICZyb290bWVudSkNCiAgICArCQlpbmRlbnQgPSAxOw0KICAg
ICsNCiAgICArCXZhbGlkID0gZ3RrX3RyZWVfbW9kZWxfaXRlcl9jaGlsZHJlbihtb2RlbDIsIGNo
aWxkMiwgZHN0KTsNCiAgICArCWZvciAoY2hpbGQxID0gc3JjLT5saXN0OyBjaGlsZDE7IGNoaWxk
MSA9IGNoaWxkMS0+bmV4dCkgew0KICAgICsNCiAgICArCQlzeW0gPSBjaGlsZDEtPnN5bTsNCiAg
ICArDQogICAgKwkgICAgICByZXBhcnNlOg0KICAgICsJCW1lbnUxID0gY2hpbGQxOw0KICAgICsJ
CWlmICh2YWxpZCkNCiAgICArCQkJZ3RrX3RyZWVfbW9kZWxfZ2V0KG1vZGVsMiwgY2hpbGQyLCBD
T0xfTUVOVSwNCiAgICArCQkJCQkgICAmbWVudTIsIC0xKTsNCiAgICArCQllbHNlDQogICAgKwkJ
CW1lbnUyID0gTlVMTDsJLy8gZm9yY2UgYWRkaW5nIG9mIGEgZmlyc3QgY2hpbGQNCiAgICArDQog
ICAgKyNpZmRlZiBERUJVRw0KICAgICsJCXByaW50ZigiJSpjJXMgfCAlc1xuIiwgaW5kZW50LCAn
ICcsDQogICAgKwkJICAgICAgIG1lbnUxID8gbWVudV9nZXRfcHJvbXB0KG1lbnUxKSA6ICJuaWwi
LA0KICAgICsJCSAgICAgICBtZW51MiA/IG1lbnVfZ2V0X3Byb21wdChtZW51MikgOiAibmlsIik7
DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArCQlpZiAoKG9wdF9tb2RlID09IE9QVF9OT1JNQUwg
JiYgIW1lbnVfaXNfdmlzaWJsZShjaGlsZDEpKSB8fA0KICAgICsJCSAgICAob3B0X21vZGUgPT0g
T1BUX1BST01QVCAmJiAhbWVudV9oYXNfcHJvbXB0KGNoaWxkMSkpIHx8DQogICAgKwkJICAgIChv
cHRfbW9kZSA9PSBPUFRfQUxMICAgICYmICFtZW51X2dldF9wcm9tcHQoY2hpbGQxKSkpIHsNCiAg
ICArDQogICAgKwkJCS8qIHJlbW92ZSBub2RlICovDQogICAgKwkJCWlmIChndGt0cmVlX2l0ZXJf
ZmluZF9ub2RlKGRzdCwgbWVudTEpICE9IE5VTEwpIHsNCiAgICArCQkJCW1lbWNweSgmdG1wLCBj
aGlsZDIsIHNpemVvZihHdGtUcmVlSXRlcikpOw0KICAgICsJCQkJdmFsaWQgPSBndGtfdHJlZV9t
b2RlbF9pdGVyX25leHQobW9kZWwyLA0KICAgICsJCQkJCQkJCSBjaGlsZDIpOw0KICAgICsJCQkJ
Z3RrX3RyZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAmdG1wKTsNCiAgICArCQkJCWlmICghdmFsaWQp
DQogICAgKwkJCQkJcmV0dXJuOwkJLyogbmV4dCBwYXJlbnQgKi8NCiAgICArCQkJCWVsc2UNCiAg
ICArCQkJCQlnb3RvIHJlcGFyc2U7CS8qIG5leHQgY2hpbGQgKi8NCiAgICArCQkJfSBlbHNlDQog
ICAgKwkJCQljb250aW51ZTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCWlmIChtZW51MSAhPSBt
ZW51Mikgew0KICAgICsJCQlpZiAoZ3RrdHJlZV9pdGVyX2ZpbmRfbm9kZShkc3QsIG1lbnUxKSA9
PSBOVUxMKSB7CS8vIGFkZCBub2RlDQogICAgKwkJCQlpZiAoIXZhbGlkICYmICFtZW51MikNCiAg
ICArCQkJCQlzaWJsaW5nID0gTlVMTDsNCiAgICArCQkJCWVsc2UNCiAgICArCQkJCQlzaWJsaW5n
ID0gY2hpbGQyOw0KICAgICsJCQkJZ3RrX3RyZWVfc3RvcmVfaW5zZXJ0X2JlZm9yZSh0cmVlMiwN
CiAgICArCQkJCQkJCSAgICAgY2hpbGQyLA0KICAgICsJCQkJCQkJICAgICBkc3QsIHNpYmxpbmcp
Ow0KICAgICsJCQkJc2V0X25vZGUoY2hpbGQyLCBtZW51MSwgZmlsbF9yb3cobWVudTEpKTsNCiAg
ICArCQkJCWlmIChtZW51MiA9PSBOVUxMKQ0KICAgICsJCQkJCXZhbGlkID0gVFJVRTsNCiAgICAr
CQkJfSBlbHNlIHsJLy8gcmVtb3ZlIG5vZGUNCiAgICArCQkJCW1lbWNweSgmdG1wLCBjaGlsZDIs
IHNpemVvZihHdGtUcmVlSXRlcikpOw0KICAgICsJCQkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9p
dGVyX25leHQobW9kZWwyLA0KICAgICsJCQkJCQkJCSBjaGlsZDIpOw0KICAgICsJCQkJZ3RrX3Ry
ZWVfc3RvcmVfcmVtb3ZlKHRyZWUyLCAmdG1wKTsNCiAgICArCQkJCWlmICghdmFsaWQpDQogICAg
KwkJCQkJcmV0dXJuOwkvLyBuZXh0IHBhcmVudA0KICAgICsJCQkJZWxzZQ0KICAgICsJCQkJCWdv
dG8gcmVwYXJzZTsJLy8gbmV4dCBjaGlsZA0KICAgICsJCQl9DQogICAgKwkJfSBlbHNlIGlmIChz
eW0gJiYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hBTkdFRCkpIHsNCiAgICArCQkJc2V0X25vZGUo
Y2hpbGQyLCBtZW51MSwgZmlsbF9yb3cobWVudTEpKTsNCiAgICArCQl9DQogICAgKw0KICAgICsJ
CWluZGVudCsrOw0KICAgICsJCXVwZGF0ZV90cmVlKGNoaWxkMSwgY2hpbGQyKTsNCiAgICArCQlp
bmRlbnQtLTsNCiAgICArDQogICAgKwkJdmFsaWQgPSBndGtfdHJlZV9tb2RlbF9pdGVyX25leHQo
bW9kZWwyLCBjaGlsZDIpOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyog
RGlzcGxheSB0aGUgd2hvbGUgdHJlZSAoc2luZ2xlL3NwbGl0L2Z1bGwgdmlldykgKi8NCiAgICAr
c3RhdGljIHZvaWQgZGlzcGxheV90cmVlKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAg
KwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAg
KwlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgKwllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICAr
DQogICAgKwlpZiAobWVudSA9PSAmcm9vdG1lbnUpIHsNCiAgICArCQlpbmRlbnQgPSAxOw0KICAg
ICsJCWN1cnJlbnQgPSAmcm9vdG1lbnU7DQogICAgKwl9DQogICAgKw0KICAgICsJZm9yIChjaGls
ZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgKwkJcHJv
cCA9IGNoaWxkLT5wcm9tcHQ7DQogICAgKwkJc3ltID0gY2hpbGQtPnN5bTsNCiAgICArCQlwdHlw
ZSA9IHByb3AgPyBwcm9wLT50eXBlIDogUF9VTktOT1dOOw0KICAgICsNCiAgICArCQlpZiAoc3lt
KQ0KICAgICsJCQlzeW0tPmZsYWdzICY9IH5TWU1CT0xfQ0hBTkdFRDsNCiAgICArDQogICAgKwkJ
aWYgKCh2aWV3X21vZGUgPT0gU1BMSVRfVklFVykNCiAgICArCQkgICAgJiYgIShjaGlsZC0+Zmxh
Z3MgJiBNRU5VX1JPT1QpICYmICh0cmVlID09IHRyZWUxKSkNCiAgICArCQkJY29udGludWU7DQog
ICAgKw0KICAgICsJCWlmICgodmlld19tb2RlID09IFNQTElUX1ZJRVcpICYmIChjaGlsZC0+Zmxh
Z3MgJiBNRU5VX1JPT1QpDQogICAgKwkJICAgICYmICh0cmVlID09IHRyZWUyKSkNCiAgICArCQkJ
Y29udGludWU7DQogICAgKw0KICAgICsJCWlmICgob3B0X21vZGUgPT0gT1BUX05PUk1BTCAmJiBt
ZW51X2lzX3Zpc2libGUoY2hpbGQpKSB8fA0KICAgICsJCSAgICAob3B0X21vZGUgPT0gT1BUX1BS
T01QVCAmJiBtZW51X2hhc19wcm9tcHQoY2hpbGQpKSB8fA0KICAgICsJCSAgICAob3B0X21vZGUg
PT0gT1BUX0FMTCAgICAmJiBtZW51X2dldF9wcm9tcHQoY2hpbGQpKSkNCiAgICArCQkJcGxhY2Vf
bm9kZShjaGlsZCwgZmlsbF9yb3coY2hpbGQpKTsNCiAgICArI2lmZGVmIERFQlVHDQogICAgKwkJ
cHJpbnRmKCIlKmMlczogIiwgaW5kZW50LCAnICcsIG1lbnVfZ2V0X3Byb21wdChjaGlsZCkpOw0K
ICAgICsJCXByaW50ZigiJXMiLCBjaGlsZC0+ZmxhZ3MgJiBNRU5VX1JPT1QgPyAicm9vdG1lbnUg
fCAiIDogIiIpOw0KICAgICsJCXByaW50ZigiJXMiLCBwcm9wX2dldF90eXBlX25hbWUocHR5cGUp
KTsNCiAgICArCQlwcmludGYoIiB8ICIpOw0KICAgICsJCWlmIChzeW0pIHsNCiAgICArCQkJcHJp
bnRmKCIlcyIsIHN5bV90eXBlX25hbWUoc3ltLT50eXBlKSk7DQogICAgKwkJCXByaW50ZigiIHwg
Iik7DQogICAgKwkJCXByaW50ZigiJXMiLCBkYmdfc3ltX2ZsYWdzKHN5bS0+ZmxhZ3MpKTsNCiAg
ICArCQkJcHJpbnRmKCJcbiIpOw0KICAgICsJCX0gZWxzZQ0KICAgICsJCQlwcmludGYoIlxuIik7
DQogICAgKyNlbmRpZg0KICAgICsJCWlmICgodmlld19tb2RlICE9IEZVTExfVklFVykgJiYgKHB0
eXBlID09IFBfTUVOVSkNCiAgICArCQkgICAgJiYgKHRyZWUgPT0gdHJlZTIpKQ0KICAgICsJCQlj
b250aW51ZTsNCiAgICArLyoNCiAgICArCQlpZiAoKChtZW51ICE9ICZyb290bWVudSkgJiYgISht
ZW51LT5mbGFncyAmIE1FTlVfUk9PVCkpDQogICAgKwkJICAgIHx8ICh2aWV3X21vZGUgPT0gRlVM
TF9WSUVXKQ0KICAgICsJCSAgICB8fCAodmlld19tb2RlID09IFNQTElUX1ZJRVcpKSovDQogICAg
Kw0KICAgICsJCS8qIENoYW5nZSBwYW5lZCBwb3NpdGlvbiBpZiB0aGUgdmlldyBpcyBub3QgaW4g
J3NwbGl0IG1vZGUnICovDQogICAgKwkJaWYgKHZpZXdfbW9kZSA9PSBTSU5HTEVfVklFVyB8fCB2
aWV3X21vZGUgPT0gRlVMTF9WSUVXKSB7DQogICAgKwkJCWd0a19wYW5lZF9zZXRfcG9zaXRpb24o
R1RLX1BBTkVEKGhwYW5lZCksIDApOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJaWYgKCgodmll
d19tb2RlID09IFNJTkdMRV9WSUVXKSAmJiAobWVudS0+ZmxhZ3MgJiBNRU5VX1JPT1QpKQ0KICAg
ICsJCSAgICB8fCAodmlld19tb2RlID09IEZVTExfVklFVykNCiAgICArCQkgICAgfHwgKHZpZXdf
bW9kZSA9PSBTUExJVF9WSUVXKSkgew0KICAgICsJCQlpbmRlbnQrKzsNCiAgICArCQkJZGlzcGxh
eV90cmVlKGNoaWxkKTsNCiAgICArCQkJaW5kZW50LS07DQogICAgKwkJfQ0KICAgICsJfQ0KICAg
ICt9DQogICAgKw0KICAgICsvKiBEaXNwbGF5IGEgcGFydCBvZiB0aGUgdHJlZSBzdGFydGluZyBh
dCBjdXJyZW50IG5vZGUgKHNpbmdsZS9zcGxpdCB2aWV3KSAqLw0KICAgICtzdGF0aWMgdm9pZCBk
aXNwbGF5X3RyZWVfcGFydCh2b2lkKQ0KICAgICt7DQogICAgKwlpZiAodHJlZTIpDQogICAgKwkJ
Z3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTIpOw0KICAgICsJaWYgKHZpZXdfbW9kZSA9PSBTSU5H
TEVfVklFVykNCiAgICArCQlkaXNwbGF5X3RyZWUoY3VycmVudCk7DQogICAgKwllbHNlIGlmICh2
aWV3X21vZGUgPT0gU1BMSVRfVklFVykNCiAgICArCQlkaXNwbGF5X3RyZWUoYnJvd3NlZCk7DQog
ICAgKwlndGtfdHJlZV92aWV3X2V4cGFuZF9hbGwoR1RLX1RSRUVfVklFVyh0cmVlMl93KSk7DQog
ICAgK30NCiAgICArDQogICAgKy8qIERpc3BsYXkgdGhlIGxpc3QgaW4gdGhlIGxlZnQgZnJhbWUg
KHNwbGl0IHZpZXcpICovDQogICAgK3N0YXRpYyB2b2lkIGRpc3BsYXlfbGlzdCh2b2lkKQ0KICAg
ICt7DQogICAgKwlpZiAodHJlZTEpDQogICAgKwkJZ3RrX3RyZWVfc3RvcmVfY2xlYXIodHJlZTEp
Ow0KICAgICsNCiAgICArCXRyZWUgPSB0cmVlMTsNCiAgICArCWRpc3BsYXlfdHJlZSgmcm9vdG1l
bnUpOw0KICAgICsJZ3RrX3RyZWVfdmlld19leHBhbmRfYWxsKEdUS19UUkVFX1ZJRVcodHJlZTFf
dykpOw0KICAgICsJdHJlZSA9IHRyZWUyOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9p
ZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0
IG1lbnUgKmNoaWxkOw0KICAgICsJc3RhdGljIGludCBtZW51X2NudCA9IDA7DQogICAgKw0KICAg
ICsJbWVudS0+ZmxhZ3MgfD0gTUVOVV9ST09UOw0KICAgICsJZm9yIChjaGlsZCA9IG1lbnUtPmxp
c3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgKwkJaWYgKGNoaWxkLT5wcm9t
cHQgJiYgY2hpbGQtPnByb21wdC0+dHlwZSA9PSBQX01FTlUpIHsNCiAgICArCQkJbWVudV9jbnQr
KzsNCiAgICArCQkJZml4dXBfcm9vdG1lbnUoY2hpbGQpOw0KICAgICsJCQltZW51X2NudC0tOw0K
ICAgICsJCX0gZWxzZSBpZiAoIW1lbnVfY250KQ0KICAgICsJCQlmaXh1cF9yb290bWVudShjaGls
ZCk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKw0KICAgICsvKiBNYWluICovDQogICAg
K2ludCBtYWluKGludCBhYywgY2hhciAqYXZbXSkNCiAgICArew0KICAgICsJY29uc3QgY2hhciAq
bmFtZTsNCiAgICArCWNoYXIgKmVudjsNCiAgICArCWdjaGFyICpnbGFkZV9maWxlOw0KICAgICsN
CiAgICArCS8qIEdUSyBzdHVmZnMgKi8NCiAgICArCWd0a19zZXRfbG9jYWxlKCk7DQogICAgKwln
dGtfaW5pdCgmYWMsICZhdik7DQogICAgKwlnbGFkZV9pbml0KCk7DQogICAgKw0KICAgICsJLy9h
ZGRfcGl4bWFwX2RpcmVjdG9yeSAoUEFDS0FHRV9EQVRBX0RJUiAiLyIgUEFDS0FHRSAiL3BpeG1h
cHMiKTsNCiAgICArCS8vYWRkX3BpeG1hcF9kaXJlY3RvcnkgKFBBQ0tBR0VfU09VUkNFX0RJUiAi
L3BpeG1hcHMiKTsNCiAgICArDQogICAgKwkvKiBEZXRlcm1pbmUgR1VJIHBhdGggKi8NCiAgICAr
CWVudiA9IGdldGVudihTUkNUUkVFKTsNCiAgICArCWlmIChlbnYpDQogICAgKwkJZ2xhZGVfZmls
ZSA9IGdfc3RyY29uY2F0KGVudiwgIi9zY3JpcHRzL2tjb25maWcvZ2NvbmYuZ2xhZGUiLCBOVUxM
KTsNCiAgICArCWVsc2UgaWYgKGF2WzBdWzBdID09ICcvJykNCiAgICArCQlnbGFkZV9maWxlID0g
Z19zdHJjb25jYXQoYXZbMF0sICIuZ2xhZGUiLCBOVUxMKTsNCiAgICArCWVsc2UNCiAgICArCQln
bGFkZV9maWxlID0gZ19zdHJjb25jYXQoZ19nZXRfY3VycmVudF9kaXIoKSwgIi8iLCBhdlswXSwg
Ii5nbGFkZSIsIE5VTEwpOw0KICAgICsNCiAgICArCS8qIENvbmYgc3R1ZmZzICovDQogICAgKwlp
ZiAoYWMgPiAxICYmIGF2WzFdWzBdID09ICctJykgew0KICAgICsJCXN3aXRjaCAoYXZbMV1bMV0p
IHsNCiAgICArCQljYXNlICdhJzoNCiAgICArCQkJLy9zaG93QWxsID0gMTsNCiAgICArCQkJYnJl
YWs7DQogICAgKwkJY2FzZSAncyc6DQogICAgKwkJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2so
TlVMTCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJ2gnOg0KICAgICsJCWNhc2UgJz8n
Og0KICAgICsJCQlwcmludGYoIiVzIFstc10gPGNvbmZpZz5cbiIsIGF2WzBdKTsNCiAgICArCQkJ
ZXhpdCgwKTsNCiAgICArCQl9DQogICAgKwkJbmFtZSA9IGF2WzJdOw0KICAgICsJfSBlbHNlDQog
ICAgKwkJbmFtZSA9IGF2WzFdOw0KICAgICsNCiAgICArCWNvbmZfcGFyc2UobmFtZSk7DQogICAg
KwlmaXh1cF9yb290bWVudSgmcm9vdG1lbnUpOw0KICAgICsJY29uZl9yZWFkKE5VTEwpOw0KICAg
ICsNCiAgICArCS8qIExvYWQgdGhlIGludGVyZmFjZSBhbmQgY29ubmVjdCBzaWduYWxzICovDQog
ICAgKwlpbml0X21haW5fd2luZG93KGdsYWRlX2ZpbGUpOw0KICAgICsJaW5pdF90cmVlX21vZGVs
KCk7DQogICAgKwlpbml0X2xlZnRfdHJlZSgpOw0KICAgICsJaW5pdF9yaWdodF90cmVlKCk7DQog
ICAgKw0KICAgICsJc3dpdGNoICh2aWV3X21vZGUpIHsNCiAgICArCWNhc2UgU0lOR0xFX1ZJRVc6
DQogICAgKwkJZGlzcGxheV90cmVlX3BhcnQoKTsNCiAgICArCQlicmVhazsNCiAgICArCWNhc2Ug
U1BMSVRfVklFVzoNCiAgICArCQlkaXNwbGF5X2xpc3QoKTsNCiAgICArCQlicmVhazsNCiAgICAr
CWNhc2UgRlVMTF9WSUVXOg0KICAgICsJCWRpc3BsYXlfdHJlZSgmcm9vdG1lbnUpOw0KICAgICsJ
CWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArCWd0a19tYWluKCk7DQogICAgKw0KICAgICsJ
cmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZfY2hhbmdlZCh2
b2lkKQ0KICAgICt7DQogICAgKwlib29sIGNoYW5nZWQgPSBjb25mX2dldF9jaGFuZ2VkKCk7DQog
ICAgKwlndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoc2F2ZV9idG4sIGNoYW5nZWQpOw0KICAgICsJ
Z3RrX3dpZGdldF9zZXRfc2Vuc2l0aXZlKHNhdmVfbWVudV9pdGVtLCBjaGFuZ2VkKTsNCiAgICAr
fQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvZ2NvbmYuZ2xhZGUgYi9zdXBwb3J0
L2tjb25maWcvZ2NvbmYuZ2xhZGUNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4
IDAwMDAwMDAuLjAzZTk3ZDcNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnL2djb25mLmdsYWRlDQogICAgQEAgLTAsMCArMSw2NjEgQEANCiAgICArPD94bWwgdmVy
c2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PiA8IS0tKi0gbW9kZTogeG1sIC0qLS0+DQogICAg
Kw0KICAgICs8Z2xhZGUtaW50ZXJmYWNlPg0KICAgICsNCiAgICArPHdpZGdldCBjbGFzcz0iR3Rr
V2luZG93IiBpZD0id2luZG93MSI+DQogICAgKyAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIgdHJhbnNsYXRhYmxl
PSJ5ZXMiPkd0ayBVbmlrcmFmdCBDb25maWd1cmF0b3I8L3Byb3BlcnR5Pg0KICAgICsgIDxwcm9w
ZXJ0eSBuYW1lPSJ0eXBlIj5HVEtfV0lORE9XX1RPUExFVkVMPC9wcm9wZXJ0eT4NCiAgICArICA8
cHJvcGVydHkgbmFtZT0id2luZG93X3Bvc2l0aW9uIj5HVEtfV0lOX1BPU19OT05FPC9wcm9wZXJ0
eT4NCiAgICArICA8cHJvcGVydHkgbmFtZT0ibW9kYWwiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAr
ICA8cHJvcGVydHkgbmFtZT0iZGVmYXVsdF93aWR0aCI+NjQwPC9wcm9wZXJ0eT4NCiAgICArICA8
cHJvcGVydHkgbmFtZT0iZGVmYXVsdF9oZWlnaHQiPjQ4MDwvcHJvcGVydHk+DQogICAgKyAgPHBy
b3BlcnR5IG5hbWU9InJlc2l6YWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKyAgPHByb3BlcnR5
IG5hbWU9ImRlc3Ryb3lfd2l0aF9wYXJlbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArICA8cHJv
cGVydHkgbmFtZT0iZGVjb3JhdGVkIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArICA8cHJvcGVydHkg
bmFtZT0ic2tpcF90YXNrYmFyX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArICA8cHJvcGVy
dHkgbmFtZT0ic2tpcF9wYWdlcl9oaW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKyAgPHByb3Bl
cnR5IG5hbWU9InR5cGVfaGludCI+R0RLX1dJTkRPV19UWVBFX0hJTlRfTk9STUFMPC9wcm9wZXJ0
eT4NCiAgICArICA8cHJvcGVydHkgbmFtZT0iZ3Jhdml0eSI+R0RLX0dSQVZJVFlfTk9SVEhfV0VT
VDwvcHJvcGVydHk+DQogICAgKyAgPHNpZ25hbCBuYW1lPSJkZXN0cm95IiBoYW5kbGVyPSJvbl93
aW5kb3cxX2Rlc3Ryb3kiIG9iamVjdD0id2luZG93MSIvPg0KICAgICsgIDxzaWduYWwgbmFtZT0i
c2l6ZV9yZXF1ZXN0IiBoYW5kbGVyPSJvbl93aW5kb3cxX3NpemVfcmVxdWVzdCIgb2JqZWN0PSJ2
cGFuZWQxIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDExIEphbiAyMDAyIDE2OjE3OjEx
IEdNVCIvPg0KICAgICsgIDxzaWduYWwgbmFtZT0iZGVsZXRlX2V2ZW50IiBoYW5kbGVyPSJvbl93
aW5kb3cxX2RlbGV0ZV9ldmVudCIgb2JqZWN0PSJ3aW5kb3cxIiBsYXN0X21vZGlmaWNhdGlvbl90
aW1lPSJTdW4sIDA5IE1hciAyMDAzIDE5OjQyOjQ2IEdNVCIvPg0KICAgICsNCiAgICArICA8Y2hp
bGQ+DQogICAgKyAgICA8d2lkZ2V0IGNsYXNzPSJHdGtWQm94IiBpZD0idmJveDEiPg0KICAgICsg
ICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKyAgICAg
IDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsgICAg
ICA8cHJvcGVydHkgbmFtZT0ic3BhY2luZyI+MDwvcHJvcGVydHk+DQogICAgKw0KICAgICsgICAg
ICA8Y2hpbGQ+DQogICAgKwk8d2lkZ2V0IGNsYXNzPSJHdGtNZW51QmFyIiBpZD0ibWVudWJhcjEi
Pg0KICAgICsJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAg
Kw0KICAgICsJICA8Y2hpbGQ+DQogICAgKwkgICAgPHdpZGdldCBjbGFzcz0iR3RrTWVudUl0ZW0i
IGlkPSJmaWxlMSI+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwv
cHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJs
ZT0ieWVzIj5fRmlsZTwvcHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0idXNl
X3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKw0KICAgICsJICAgICAgPGNoaWxkPg0K
ICAgICsJCTx3aWRnZXQgY2xhc3M9Ikd0a01lbnUiIGlkPSJmaWxlMV9tZW51Ij4NCiAgICArDQog
ICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0
ZW0iIGlkPSJsb2FkMSI+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFu
c2xhdGFibGU9InllcyI+TG9hZCBhIGNvbmZpZyBmaWxlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAg
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fTG9hZDwvcHJvcGVy
dHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9u
X2xvYWQxX2FjdGl2YXRlIi8+DQogICAgKwkJICAgICAgPGFjY2VsZXJhdG9yIGtleT0iTCIgbW9k
aWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+DQogICAgKw0KICAg
ICsJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPg0KICAgICsJCQk8d2lkZ2V0
IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlMzkiPg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ic3Rv
Y2siPmd0ay1vcGVuPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9z
aXplIj4xPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8
L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVy
dHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJ
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9wZXJ0eT4NCiAgICArCQkJPC93aWRnZXQ+
DQogICAgKwkJICAgICAgPC9jaGlsZD4NCiAgICArCQkgICAgPC93aWRnZXQ+DQogICAgKwkJICA8
L2NoaWxkPg0KICAgICsNCiAgICArCQkgIDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBjbGFz
cz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9InNhdmUxIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkg
bmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZlIHRoZSBjb25maWcgaW4gLmNvbmZp
ZzwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xh
dGFibGU9InllcyI+X1NhdmU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8c2lnbmFsIG5h
bWU9ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zYXZlX2FjdGl2YXRlIi8+DQogICAgKwkJICAgICAg
PGFjY2VsZXJhdG9yIGtleT0iUyIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9
ImFjdGl2YXRlIi8+DQogICAgKw0KICAgICsJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0i
aW1hZ2UiPg0KICAgICsJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDAiPg0K
ICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAr
CQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1zYXZlPC9wcm9wZXJ0eT4NCiAgICArCQkJ
ICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJv
cGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBu
YW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9Inhw
YWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFkIj4wPC9wcm9w
ZXJ0eT4NCiAgICArCQkJPC93aWRnZXQ+DQogICAgKwkJICAgICAgPC9jaGlsZD4NCiAgICArCQkg
ICAgPC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsNCiAgICArCQkgIDxjaGlsZD4N
CiAgICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrSW1hZ2VNZW51SXRlbSIgaWQ9InNhdmVfYXMx
Ij4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVz
Ij5TYXZlIHRoZSBjb25maWcgaW4gYSBmaWxlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJv
cGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TYXZlIF9hczwvcHJvcGVydHk+
DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3Nh
dmVfYXMxX2FjdGl2YXRlIi8+DQogICAgKw0KICAgICsJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1j
aGlsZD0iaW1hZ2UiPg0KICAgICsJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdl
NDEiPg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1zYXZlLWFzPC9wcm9wZXJ0eT4N
CiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0iaWNvbl9zaXplIj4xPC9wcm9wZXJ0eT4NCiAgICAr
CQkJICA8cHJvcGVydHkgbmFtZT0ieGFsaWduIj4wLjU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ5YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5
IG5hbWU9InhwYWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ5cGFk
Ij4wPC9wcm9wZXJ0eT4NCiAgICArCQkJPC93aWRnZXQ+DQogICAgKwkJICAgICAgPC9jaGlsZD4N
CiAgICArCQkgICAgPC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsNCiAgICArCQkg
IDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrU2VwYXJhdG9yTWVudUl0ZW0i
IGlkPSJzZXBhcmF0b3IxIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAgPC9jaGlsZD4N
CiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0lt
YWdlTWVudUl0ZW0iIGlkPSJxdWl0MSI+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZp
c2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJl
bCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9RdWl0PC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJv
cGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAg
PHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fcXVpdDFfYWN0aXZhdGUiLz4NCiAg
ICArCQkgICAgICA8YWNjZWxlcmF0b3Iga2V5PSJRIiBtb2RpZmllcnM9IkdES19DT05UUk9MX01B
U0siIHNpZ25hbD0iYWN0aXZhdGUiLz4NCiAgICArDQogICAgKwkJICAgICAgPGNoaWxkIGludGVy
bmFsLWNoaWxkPSJpbWFnZSI+DQogICAgKwkJCTx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlIiBpZD0i
aW1hZ2U0MiI+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9jayI+Z3RrLXF1aXQ8L3Byb3BlcnR5
Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5Pg0KICAg
ICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgKwkJCSAg
PHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVy
dHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9Inlw
YWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJCQk8L3dpZGdldD4NCiAgICArCQkgICAgICA8L2NoaWxk
Pg0KICAgICsJCSAgICA8L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+DQogICAgKwkJPC93aWRn
ZXQ+DQogICAgKwkgICAgICA8L2NoaWxkPg0KICAgICsJICAgIDwvd2lkZ2V0Pg0KICAgICsJICA8
L2NoaWxkPg0KICAgICsNCiAgICArCSAgPGNoaWxkPg0KICAgICsJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a01lbnVJdGVtIiBpZD0ib3B0aW9uczEiPg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9
InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9Imxh
YmVsIiB0cmFuc2xhdGFibGU9InllcyI+X09wdGlvbnM8L3Byb3BlcnR5Pg0KICAgICsJICAgICAg
PHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsNCiAg
ICArCSAgICAgIDxjaGlsZD4NCiAgICArCQk8d2lkZ2V0IGNsYXNzPSJHdGtNZW51IiBpZD0ib3B0
aW9uczFfbWVudSI+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAgICsJCSAgICA8d2lkZ2V0
IGNsYXNzPSJHdGtDaGVja01lbnVJdGVtIiBpZD0ic2hvd19uYW1lMSI+DQogICAgKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxw
cm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+U2hvdyBuYW1lPC9wcm9w
ZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0i
eWVzIj5TaG93IF9uYW1lPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
dXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5h
bWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0i
YWN0aXZhdGUiIGhhbmRsZXI9Im9uX3Nob3dfbmFtZTFfYWN0aXZhdGUiLz4NCiAgICArCQkgICAg
PC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsNCiAgICArCQkgIDxjaGlsZD4NCiAg
ICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrQ2hlY2tNZW51SXRlbSIgaWQ9InNob3dfcmFuZ2Ux
Ij4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVz
Ij5TaG93IHJhbmdlIChZL00vTik8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgX3JhbmdlPC9wcm9wZXJ0eT4NCiAg
ICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImFjdGl2ZSI+RmFsc2U8L3Byb3BlcnR5Pg0K
ICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3Nob3dfcmFu
Z2UxX2FjdGl2YXRlIi8+DQogICAgKwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAgPC9jaGlsZD4N
CiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a0No
ZWNrTWVudUl0ZW0iIGlkPSJzaG93X2RhdGExIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IHZhbHVlIG9mIHRoZSBvcHRpb248L3By
b3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxl
PSJ5ZXMiPlNob3cgX2RhdGE8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkg
bmFtZT0iYWN0aXZlIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHNpZ25hbCBuYW1l
PSJhY3RpdmF0ZSIgaGFuZGxlcj0ib25fc2hvd19kYXRhMV9hY3RpdmF0ZSIvPg0KICAgICsJCSAg
ICA8L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0K
ICAgICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtTZXBhcmF0b3JNZW51SXRlbSIgaWQ9InNlcGFy
YXRvcjIiPg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICArCQkgICAgPC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsNCiAg
ICArCQkgIDxjaGlsZD4NCiAgICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9NZW51SXRl
bSIgaWQ9InNldF9vcHRpb25fbW9kZTEiPg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9v
bHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNob3cgbm9ybWFsIG9wdGlvbnM8L3Byb3BlcnR5Pg0K
ICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNo
b3cgbm9ybWFsIG9wdGlvbnM8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkg
bmFtZT0iYWN0aXZlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8c2lnbmFsIG5hbWU9
ImFjdGl2YXRlIiBoYW5kbGVyPSJvbl9zZXRfb3B0aW9uX21vZGUxX2FjdGl2YXRlIi8+DQogICAg
KwkJICAgIDwvd2lkZ2V0Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArDQogICAgKwkJICA8Y2hp
bGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1JhZGlvTWVudUl0ZW0iIGlkPSJzZXRf
b3B0aW9uX21vZGUyIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5z
bGF0YWJsZT0ieWVzIj5TaG93IGFsbCBvcHRpb25zPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8
cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBfb3B0aW9u
czwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY3RpdmUiPkZh
bHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0iZ3JvdXAiPnNldF9v
cHRpb25fbW9kZTE8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZh
dGUiIGhhbmRsZXI9Im9uX3NldF9vcHRpb25fbW9kZTJfYWN0aXZhdGUiLz4NCiAgICArCQkgICAg
PC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsNCiAgICArCQkgIDxjaGlsZD4NCiAg
ICArCQkgICAgPHdpZGdldCBjbGFzcz0iR3RrUmFkaW9NZW51SXRlbSIgaWQ9InNldF9vcHRpb25f
bW9kZTMiPg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxl
PSJ5ZXMiPlNob3cgYWxsIG9wdGlvbnMgd2l0aCBwcm9tcHRzPC9wcm9wZXJ0eT4NCiAgICArCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TaG93IGFsbCBw
cm9tcHQgb3B0aW9uczwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVz
ZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1l
PSJhY3RpdmUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0i
Z3JvdXAiPnNldF9vcHRpb25fbW9kZTE8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwg
bmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9Im9uX3NldF9vcHRpb25fbW9kZTNfYWN0aXZhdGUiLz4N
CiAgICArCQkgICAgPC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsNCiAgICArCQk8
L3dpZGdldD4NCiAgICArCSAgICAgIDwvY2hpbGQ+DQogICAgKwkgICAgPC93aWRnZXQ+DQogICAg
KwkgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJICA8Y2hpbGQ+DQogICAgKwkgICAgPHdpZGdldCBj
bGFzcz0iR3RrTWVudUl0ZW0iIGlkPSJoZWxwMSI+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0i
bGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5fSGVscDwvcHJvcGVydHk+DQogICAgKwkgICAgICA8
cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKw0KICAg
ICsJICAgICAgPGNoaWxkPg0KICAgICsJCTx3aWRnZXQgY2xhc3M9Ikd0a01lbnUiIGlkPSJoZWxw
MV9tZW51Ij4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xh
c3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJpbnRyb2R1Y3Rpb24xIj4NCiAgICArCQkgICAgICA8
cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHBy
b3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0ludHJvZHVjdGlvbjwvcHJv
cGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxzaWduYWwgbmFtZT0iYWN0aXZhdGUiIGhhbmRsZXI9
Im9uX2ludHJvZHVjdGlvbjFfYWN0aXZhdGUiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZyaSwg
MTUgTm92IDIwMDIgMjA6MjY6MzAgR01UIi8+DQogICAgKwkJICAgICAgPGFjY2VsZXJhdG9yIGtl
eT0iSSIgbW9kaWZpZXJzPSJHREtfQ09OVFJPTF9NQVNLIiBzaWduYWw9ImFjdGl2YXRlIi8+DQog
ICAgKw0KICAgICsJCSAgICAgIDxjaGlsZCBpbnRlcm5hbC1jaGlsZD0iaW1hZ2UiPg0KICAgICsJ
CQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9ImltYWdlNDMiPg0KICAgICsJCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkg
bmFtZT0ic3RvY2siPmd0ay1kaWFsb2ctcXVlc3Rpb248L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxw
cm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9
InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+
MDwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5
Pg0KICAgICsJCQk8L3dpZGdldD4NCiAgICArCQkgICAgICA8L2NoaWxkPg0KICAgICsJCSAgICA8
L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAg
ICsJCSAgICA8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZU1lbnVJdGVtIiBpZD0iYWJvdXQxIj4NCiAg
ICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAg
KwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+X0Fib3V0
PC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFu
ZGxlcj0ib25fYWJvdXQxX2FjdGl2YXRlIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJGcmksIDE1
IE5vdiAyMDAyIDIwOjI2OjMwIEdNVCIvPg0KICAgICsJCSAgICAgIDxhY2NlbGVyYXRvciBrZXk9
IkEiIG1vZGlmaWVycz0iR0RLX0NPTlRST0xfTUFTSyIgc2lnbmFsPSJhY3RpdmF0ZSIvPg0KICAg
ICsNCiAgICArCQkgICAgICA8Y2hpbGQgaW50ZXJuYWwtY2hpbGQ9ImltYWdlIj4NCiAgICArCQkJ
PHdpZGdldCBjbGFzcz0iR3RrSW1hZ2UiIGlkPSJpbWFnZTQ0Ij4NCiAgICArCQkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5h
bWU9InN0b2NrIj5ndGstcHJvcGVydGllczwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5
IG5hbWU9Imljb25fc2l6ZSI+MTwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9
InhhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieWFsaWdu
Ij4wLjU8L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4cGFkIj4wPC9wcm9w
ZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ieXBhZCI+MDwvcHJvcGVydHk+DQogICAg
KwkJCTwvd2lkZ2V0Pg0KICAgICsJCSAgICAgIDwvY2hpbGQ+DQogICAgKwkJICAgIDwvd2lkZ2V0
Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAg
IDx3aWRnZXQgY2xhc3M9Ikd0a0ltYWdlTWVudUl0ZW0iIGlkPSJsaWNlbnNlMSI+DQogICAgKwkJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJsYWJlbCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPl9MaWNlbnNlPC9w
cm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHNpZ25hbCBuYW1lPSJhY3RpdmF0ZSIgaGFuZGxl
cj0ib25fbGljZW5zZTFfYWN0aXZhdGUiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IkZyaSwgMTUg
Tm92IDIwMDIgMjA6MjY6MzAgR01UIi8+DQogICAgKw0KICAgICsJCSAgICAgIDxjaGlsZCBpbnRl
cm5hbC1jaGlsZD0iaW1hZ2UiPg0KICAgICsJCQk8d2lkZ2V0IGNsYXNzPSJHdGtJbWFnZSIgaWQ9
ImltYWdlNDUiPg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICArCQkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2siPmd0ay1qdXN0aWZ5LWZpbGw8
L3Byb3BlcnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJpY29uX3NpemUiPjE8L3Byb3Bl
cnR5Pg0KICAgICsJCQkgIDxwcm9wZXJ0eSBuYW1lPSJ4YWxpZ24iPjAuNTwvcHJvcGVydHk+DQog
ICAgKwkJCSAgPHByb3BlcnR5IG5hbWU9InlhbGlnbiI+MC41PC9wcm9wZXJ0eT4NCiAgICArCQkJ
ICA8cHJvcGVydHkgbmFtZT0ieHBhZCI+MDwvcHJvcGVydHk+DQogICAgKwkJCSAgPHByb3BlcnR5
IG5hbWU9InlwYWQiPjA8L3Byb3BlcnR5Pg0KICAgICsJCQk8L3dpZGdldD4NCiAgICArCQkgICAg
ICA8L2NoaWxkPg0KICAgICsJCSAgICA8L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+DQogICAg
KwkJPC93aWRnZXQ+DQogICAgKwkgICAgICA8L2NoaWxkPg0KICAgICsJICAgIDwvd2lkZ2V0Pg0K
ICAgICsJICA8L2NoaWxkPg0KICAgICsJPC93aWRnZXQ+DQogICAgKwk8cGFja2luZz4NCiAgICAr
CSAgPHByb3BlcnR5IG5hbWU9InBhZGRpbmciPjA8L3Byb3BlcnR5Pg0KICAgICsJICA8cHJvcGVy
dHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1l
PSJmaWxsIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwk8L3BhY2tpbmc+DQogICAgKyAgICAgIDwv
Y2hpbGQ+DQogICAgKw0KICAgICsgICAgICA8Y2hpbGQ+DQogICAgKwk8d2lkZ2V0IGNsYXNzPSJH
dGtIYW5kbGVCb3giIGlkPSJoYW5kbGVib3gxIj4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9InZp
c2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5
cGUiPkdUS19TSEFET1dfT1VUPC9wcm9wZXJ0eT4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9Imhh
bmRsZV9wb3NpdGlvbiI+R1RLX1BPU19MRUZUPC9wcm9wZXJ0eT4NCiAgICArCSAgPHByb3BlcnR5
IG5hbWU9InNuYXBfZWRnZSI+R1RLX1BPU19UT1A8L3Byb3BlcnR5Pg0KICAgICsNCiAgICArCSAg
PGNoaWxkPg0KICAgICsJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xiYXIiIGlkPSJ0b29sYmFy
MSI+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0ib3JpZW50YXRpb24iPkdUS19PUklFTlRBVElP
Tl9IT1JJWk9OVEFMPC9wcm9wZXJ0eT4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ0b29s
YmFyX3N0eWxlIj5HVEtfVE9PTEJBUl9CT1RIPC9wcm9wZXJ0eT4NCiAgICArCSAgICAgIDxwcm9w
ZXJ0eSBuYW1lPSJ0b29sdGlwcyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVy
dHkgbmFtZT0ic2hvd19hcnJvdyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKw0KICAgICsJICAgICAg
PGNoaWxkPg0KICAgICsJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b24x
Ij4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAg
ICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+R29lcyB1
cCBvZiBvbmUgbGV2ZWwgKHNpbmdsZSB2aWV3KTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVy
dHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5CYWNrPC9wcm9wZXJ0eT4NCiAgICAr
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAr
CQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLXVuZG88L3Byb3BlcnR5Pg0KICAgICsJ
CSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQog
ICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+
DQogICAgKwkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2JhY2tfY2xpY2tl
ZCIvPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxwYWNraW5nPg0KICAgICsJCSAgPHByb3Bl
cnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQk8L3BhY2tpbmc+DQogICAg
KwkgICAgICA8L2NoaWxkPg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4NCiAgICArCQk8d2lk
Z2V0IGNsYXNzPSJHdGtUb29sSXRlbSIgaWQ9InRvb2xpdGVtMSI+DQogICAgKwkJICA8cHJvcGVy
dHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0
eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9w
ZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArDQogICAgKwkJ
ICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1ZTZXBhcmF0b3IiIGlkPSJ2
c2VwYXJhdG9yMSI+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgICA8L3dpZGdldD4NCiAgICArCQkgIDwvY2hpbGQ+DQogICAg
KwkJPC93aWRnZXQ+DQogICAgKwkJPHBhY2tpbmc+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0i
ZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dl
bmVvdXMiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQk8L3BhY2tpbmc+DQogICAgKwkgICAgICA8
L2NoaWxkPg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4NCiAgICArCQk8d2lkZ2V0IGNsYXNz
PSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uMiI+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idG9vbHRp
cCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkxvYWQgYSBjb25maWcgZmlsZTwvcHJvcGVydHk+DQogICAg
KwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5Mb2FkPC9wcm9w
ZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJsaW5lIj5UcnVlPC9wcm9w
ZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+Z3RrLW9wZW48L3Byb3Bl
cnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwv
cHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxz
ZTwvcHJvcGVydHk+DQogICAgKwkJICA8c2lnbmFsIG5hbWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9u
X2xvYWRfY2xpY2tlZCIvPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxwYWNraW5nPg0KICAg
ICsJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAg
PHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQk8L3Bh
Y2tpbmc+DQogICAgKwkgICAgICA8L2NoaWxkPg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4N
CiAgICArCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uMyI+DQogICAg
KwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8
cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNhdmUgYSBjb25maWcg
ZmlsZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0
YWJsZT0ieWVzIj5TYXZlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2Vf
dW5kZXJsaW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9j
a19pZCI+Z3RrLXNhdmU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2li
bGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0i
dmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFt
ZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICA8c2lnbmFsIG5hbWU9
ImNsaWNrZWQiIGhhbmRsZXI9Im9uX3NhdmVfYWN0aXZhdGUiLz4NCiAgICArCQk8L3dpZGdldD4N
CiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNl
PC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwv
cHJvcGVydHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAgICAr
DQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEl0ZW0i
IGlkPSJ0b29saXRlbTIiPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNh
bCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50
Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAgICsJCSAgICA8
d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjIiPg0KICAgICsJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAg
PC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxw
YWNraW5nPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5
Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxzZTwvcHJvcGVydHk+
DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAgICArDQogICAgKwkg
ICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1
dHRvbjQiPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5T
aW5nbGUgdmlldzwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRy
YW5zbGF0YWJsZT0ieWVzIj5TaW5nbGU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9InN0b2NrX2lkIj5ndGstbWlzc2luZy1pbWFnZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJv
cGVydHkgbmFtZT0idmlzaWJsZV9ob3Jpem9udGFsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkg
IDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX3ZlcnRpY2FsIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICAr
CQkgIDxwcm9wZXJ0eSBuYW1lPSJpc19pbXBvcnRhbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICAr
CQkgIDxzaWduYWwgbmFtZT0iY2xpY2tlZCIgaGFuZGxlcj0ib25fc2luZ2xlX2NsaWNrZWQiIGxh
c3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMgMTQ6Mjg6MzkgR01UIi8+DQog
ICAgKwkJPC93aWRnZXQ+DQogICAgKwkJPHBhY2tpbmc+DQogICAgKwkJICA8cHJvcGVydHkgbmFt
ZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaG9t
b2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCTwvcGFja2luZz4NCiAgICArCSAgICAg
IDwvY2hpbGQ+DQogICAgKw0KICAgICsJICAgICAgPGNoaWxkPg0KICAgICsJCTx3aWRnZXQgY2xh
c3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0b241Ij4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1l
PSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29s
dGlwIiB0cmFuc2xhdGFibGU9InllcyI+U3BsaXQgdmlldzwvcHJvcGVydHk+DQogICAgKwkJICA8
cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5TcGxpdDwvcHJvcGVydHk+
DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idXNlX3VuZGVybGluZSI+VHJ1ZTwvcHJvcGVydHk+
DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0ic3RvY2tfaWQiPmd0ay1taXNzaW5nLWltYWdlPC9w
cm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRy
dWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+
RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVy
PSJvbl9zcGxpdF9jbGlja2VkIiBsYXN0X21vZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAy
MDAzIDE0OjI4OjQ1IEdNVCIvPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxwYWNraW5nPg0K
ICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJ
CSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQk8
L3BhY2tpbmc+DQogICAgKwkgICAgICA8L2NoaWxkPg0KICAgICsNCiAgICArCSAgICAgIDxjaGls
ZD4NCiAgICArCQk8d2lkZ2V0IGNsYXNzPSJHdGtUb29sQnV0dG9uIiBpZD0iYnV0dG9uNiI+DQog
ICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJ
ICA8cHJvcGVydHkgbmFtZT0idG9vbHRpcCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPkZ1bGwgdmlldzwv
cHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0i
eWVzIj5GdWxsPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ1c2VfdW5kZXJs
aW5lIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJzdG9ja19pZCI+
Z3RrLW1pc3NpbmctaW1hZ2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZp
c2libGVfaG9yaXpvbnRhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZV92ZXJ0aWNhbCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkg
bmFtZT0iaXNfaW1wb3J0YW50Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJICA8c2lnbmFsIG5h
bWU9ImNsaWNrZWQiIGhhbmRsZXI9Im9uX2Z1bGxfY2xpY2tlZCIgbGFzdF9tb2RpZmljYXRpb25f
dGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNDoyODo1MCBHTVQiLz4NCiAgICArCQk8L3dpZGdldD4N
CiAgICArCQk8cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJleHBhbmQiPkZhbHNl
PC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJob21vZ2VuZW91cyI+VHJ1ZTwv
cHJvcGVydHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAgICAr
DQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEl0ZW0i
IGlkPSJ0b29saXRlbTMiPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfaG9yaXpvbnRhbCI+
VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZV92ZXJ0aWNh
bCI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaXNfaW1wb3J0YW50
Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKw0KICAgICsJCSAgPGNoaWxkPg0KICAgICsJCSAgICA8
d2lkZ2V0IGNsYXNzPSJHdGtWU2VwYXJhdG9yIiBpZD0idnNlcGFyYXRvcjMiPg0KICAgICsJCSAg
ICAgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAg
PC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxw
YWNraW5nPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5
Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5GYWxzZTwvcHJvcGVydHk+
DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAgICArDQogICAgKwkg
ICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0iR3RrVG9vbEJ1dHRvbiIgaWQ9ImJ1
dHRvbjciPg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5
Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InRvb2x0aXAiIHRyYW5zbGF0YWJsZT0ieWVzIj5D
b2xsYXBzZSB0aGUgd2hvbGUgdHJlZSBpbiB0aGUgcmlnaHQgZnJhbWU8L3Byb3BlcnR5Pg0KICAg
ICsJCSAgPHByb3BlcnR5IG5hbWU9ImxhYmVsIiB0cmFuc2xhdGFibGU9InllcyI+Q29sbGFwc2U8
L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstcmVtb3Zl
PC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGlj
YWwiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFu
dCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5k
bGVyPSJvbl9jb2xsYXBzZV9jbGlja2VkIi8+DQogICAgKwkJPC93aWRnZXQ+DQogICAgKwkJPHBh
Y2tpbmc+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+
DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaG9tb2dlbmVvdXMiPlRydWU8L3Byb3BlcnR5Pg0K
ICAgICsJCTwvcGFja2luZz4NCiAgICArCSAgICAgIDwvY2hpbGQ+DQogICAgKw0KICAgICsJICAg
ICAgPGNoaWxkPg0KICAgICsJCTx3aWRnZXQgY2xhc3M9Ikd0a1Rvb2xCdXR0b24iIGlkPSJidXR0
b244Ij4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ0b29sdGlwIiB0cmFuc2xhdGFibGU9InllcyI+RXhw
YW5kIHRoZSB3aG9sZSB0cmVlIGluIHRoZSByaWdodCBmcmFtZTwvcHJvcGVydHk+DQogICAgKwkJ
ICA8cHJvcGVydHkgbmFtZT0ibGFiZWwiIHRyYW5zbGF0YWJsZT0ieWVzIj5FeHBhbmQ8L3Byb3Bl
cnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InVzZV91bmRlcmxpbmUiPlRydWU8L3Byb3Bl
cnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InN0b2NrX2lkIj5ndGstYWRkPC9wcm9wZXJ0
eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2aXNpYmxlX2hvcml6b250YWwiPlRydWU8L3By
b3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InZpc2libGVfdmVydGljYWwiPlRydWU8
L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImlzX2ltcG9ydGFudCI+RmFsc2U8
L3Byb3BlcnR5Pg0KICAgICsJCSAgPHNpZ25hbCBuYW1lPSJjbGlja2VkIiBoYW5kbGVyPSJvbl9l
eHBhbmRfY2xpY2tlZCIvPg0KICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxwYWNraW5nPg0KICAg
ICsJCSAgPHByb3BlcnR5IG5hbWU9ImV4cGFuZCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAg
PHByb3BlcnR5IG5hbWU9ImhvbW9nZW5lb3VzIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCQk8L3Bh
Y2tpbmc+DQogICAgKwkgICAgICA8L2NoaWxkPg0KICAgICsJICAgIDwvd2lkZ2V0Pg0KICAgICsJ
ICA8L2NoaWxkPg0KICAgICsJPC93aWRnZXQ+DQogICAgKwk8cGFja2luZz4NCiAgICArCSAgPHBy
b3BlcnR5IG5hbWU9InBhZGRpbmciPjA8L3Byb3BlcnR5Pg0KICAgICsJICA8cHJvcGVydHkgbmFt
ZT0iZXhwYW5kIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJmaWxs
Ij5GYWxzZTwvcHJvcGVydHk+DQogICAgKwk8L3BhY2tpbmc+DQogICAgKyAgICAgIDwvY2hpbGQ+
DQogICAgKw0KICAgICsgICAgICA8Y2hpbGQ+DQogICAgKwk8d2lkZ2V0IGNsYXNzPSJHdGtIUGFu
ZWQiIGlkPSJocGFuZWQxIj4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9IndpZHRoX3JlcXVlc3Qi
PjE8L3Byb3BlcnR5Pg0KICAgICsJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJv
cGVydHk+DQogICAgKwkgIDxwcm9wZXJ0eSBuYW1lPSJjYW5fZm9jdXMiPlRydWU8L3Byb3BlcnR5
Pg0KICAgICsJICA8cHJvcGVydHkgbmFtZT0icG9zaXRpb24iPjA8L3Byb3BlcnR5Pg0KICAgICsN
CiAgICArCSAgPGNoaWxkPg0KICAgICsJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1Njcm9sbGVkV2lu
ZG93IiBpZD0ic2Nyb2xsZWR3aW5kb3cxIj4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ2
aXNpYmxlIj5UcnVlPC9wcm9wZXJ0eT4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJoc2Ny
b2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5Pg0KICAgICsJICAg
ICAgPHByb3BlcnR5IG5hbWU9InZzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX0FVVE9NQVRJ
QzwvcHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFtZT0ic2hhZG93X3R5cGUiPkdU
S19TSEFET1dfSU48L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9IndpbmRv
d19wbGFjZW1lbnQiPkdUS19DT1JORVJfVE9QX0xFRlQ8L3Byb3BlcnR5Pg0KICAgICsNCiAgICAr
CSAgICAgIDxjaGlsZD4NCiAgICArCQk8d2lkZ2V0IGNsYXNzPSJHdGtUcmVlVmlldyIgaWQ9InRy
ZWV2aWV3MSI+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0iY2FuX2ZvY3VzIj5UcnVlPC9wcm9wZXJ0eT4N
CiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJoZWFkZXJzX3Zpc2libGUiPlRydWU8L3Byb3BlcnR5
Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InJ1bGVzX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4N
CiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJyZW9yZGVyYWJsZSI+RmFsc2U8L3Byb3BlcnR5Pg0K
ICAgICsJCSAgPHByb3BlcnR5IG5hbWU9ImVuYWJsZV9zZWFyY2giPkZhbHNlPC9wcm9wZXJ0eT4N
CiAgICArCQkgIDxzaWduYWwgbmFtZT0iY3Vyc29yX2NoYW5nZWQiIGhhbmRsZXI9Im9uX3RyZWV2
aWV3Ml9jdXJzb3JfY2hhbmdlZCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4g
MjAwMyAxNTo1ODoyMiBHTVQiLz4NCiAgICArCQkgIDxzaWduYWwgbmFtZT0iYnV0dG9uX3ByZXNz
X2V2ZW50IiBoYW5kbGVyPSJvbl90cmVldmlldzFfYnV0dG9uX3ByZXNzX2V2ZW50IiBsYXN0X21v
ZGlmaWNhdGlvbl90aW1lPSJTdW4sIDEyIEphbiAyMDAzIDE2OjAzOjUyIEdNVCIvPg0KICAgICsJ
CSAgPHNpZ25hbCBuYW1lPSJrZXlfcHJlc3NfZXZlbnQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9r
ZXlfcHJlc3NfZXZlbnQiIGxhc3RfbW9kaWZpY2F0aW9uX3RpbWU9IlN1biwgMTIgSmFuIDIwMDMg
MTY6MTE6NDQgR01UIi8+DQogICAgKwkJPC93aWRnZXQ+DQogICAgKwkgICAgICA8L2NoaWxkPg0K
ICAgICsJICAgIDwvd2lkZ2V0Pg0KICAgICsJICAgIDxwYWNraW5nPg0KICAgICsJICAgICAgPHBy
b3BlcnR5IG5hbWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVy
dHkgbmFtZT0icmVzaXplIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkgICAgPC9wYWNraW5nPg0K
ICAgICsJICA8L2NoaWxkPg0KICAgICsNCiAgICArCSAgPGNoaWxkPg0KICAgICsJICAgIDx3aWRn
ZXQgY2xhc3M9Ikd0a1ZQYW5lZCIgaWQ9InZwYW5lZDEiPg0KICAgICsJICAgICAgPHByb3BlcnR5
IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5h
bWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkgICAgICA8cHJvcGVydHkgbmFt
ZT0icG9zaXRpb24iPjA8L3Byb3BlcnR5Pg0KICAgICsNCiAgICArCSAgICAgIDxjaGlsZD4NCiAg
ICArCQk8d2lkZ2V0IGNsYXNzPSJHdGtTY3JvbGxlZFdpbmRvdyIgaWQ9InNjcm9sbGVkd2luZG93
MiI+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQog
ICAgKwkJICA8cHJvcGVydHkgbmFtZT0iaHNjcm9sbGJhcl9wb2xpY3kiPkdUS19QT0xJQ1lfQVVU
T01BVElDPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3Bv
bGljeSI+R1RLX1BPTElDWV9BVVRPTUFUSUM8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5
IG5hbWU9InNoYWRvd190eXBlIj5HVEtfU0hBRE9XX0lOPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxw
cm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxhY2VtZW50Ij5HVEtfQ09STkVSX1RPUF9MRUZUPC9wcm9w
ZXJ0eT4NCiAgICArDQogICAgKwkJICA8Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9
Ikd0a1RyZWVWaWV3IiBpZD0idHJlZXZpZXcyIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFt
ZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
Imhhc19mb2N1cyI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9
ImhlYWRlcnNfdmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5
IG5hbWU9InJ1bGVzX2hpbnQiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJvcGVy
dHkgbmFtZT0icmVvcmRlcmFibGUiPkZhbHNlPC9wcm9wZXJ0eT4NCiAgICArCQkgICAgICA8cHJv
cGVydHkgbmFtZT0iZW5hYmxlX3NlYXJjaCI+RmFsc2U8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAg
IDxzaWduYWwgbmFtZT0iY3Vyc29yX2NoYW5nZWQiIGhhbmRsZXI9Im9uX3RyZWV2aWV3Ml9jdXJz
b3JfY2hhbmdlZCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNTo1
Nzo1NSBHTVQiLz4NCiAgICArCQkgICAgICA8c2lnbmFsIG5hbWU9ImJ1dHRvbl9wcmVzc19ldmVu
dCIgaGFuZGxlcj0ib25fdHJlZXZpZXcyX2J1dHRvbl9wcmVzc19ldmVudCIgbGFzdF9tb2RpZmlj
YXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAxNTo1Nzo1OCBHTVQiLz4NCiAgICArCQkgICAg
ICA8c2lnbmFsIG5hbWU9ImtleV9wcmVzc19ldmVudCIgaGFuZGxlcj0ib25fdHJlZXZpZXcyX2tl
eV9wcmVzc19ldmVudCIgbGFzdF9tb2RpZmljYXRpb25fdGltZT0iU3VuLCAxMiBKYW4gMjAwMyAx
NTo1ODowMSBHTVQiLz4NCiAgICArCQkgICAgPC93aWRnZXQ+DQogICAgKwkJICA8L2NoaWxkPg0K
ICAgICsJCTwvd2lkZ2V0Pg0KICAgICsJCTxwYWNraW5nPg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9InNocmluayI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICA8cHJvcGVydHkgbmFtZT0icmVz
aXplIj5GYWxzZTwvcHJvcGVydHk+DQogICAgKwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9j
aGlsZD4NCiAgICArDQogICAgKwkgICAgICA8Y2hpbGQ+DQogICAgKwkJPHdpZGdldCBjbGFzcz0i
R3RrU2Nyb2xsZWRXaW5kb3ciIGlkPSJzY3JvbGxlZHdpbmRvdzMiPg0KICAgICsJCSAgPHByb3Bl
cnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5h
bWU9ImhzY3JvbGxiYXJfcG9saWN5Ij5HVEtfUE9MSUNZX05FVkVSPC9wcm9wZXJ0eT4NCiAgICAr
CQkgIDxwcm9wZXJ0eSBuYW1lPSJ2c2Nyb2xsYmFyX3BvbGljeSI+R1RLX1BPTElDWV9BVVRPTUFU
SUM8L3Byb3BlcnR5Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InNoYWRvd190eXBlIj5HVEtf
U0hBRE9XX0lOPC9wcm9wZXJ0eT4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcGxh
Y2VtZW50Ij5HVEtfQ09STkVSX1RPUF9MRUZUPC9wcm9wZXJ0eT4NCiAgICArDQogICAgKwkJICA8
Y2hpbGQ+DQogICAgKwkJICAgIDx3aWRnZXQgY2xhc3M9Ikd0a1RleHRWaWV3IiBpZD0idGV4dHZp
ZXczIj4NCiAgICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0idmlzaWJsZSI+VHJ1ZTwvcHJvcGVy
dHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImNhbl9mb2N1cyI+VHJ1ZTwvcHJvcGVy
dHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImVkaXRhYmxlIj5GYWxzZTwvcHJvcGVy
dHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Im92ZXJ3cml0ZSI+RmFsc2U8L3Byb3Bl
cnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhY2NlcHRzX3RhYiI+VHJ1ZTwvcHJv
cGVydHk+DQogICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9Imp1c3RpZmljYXRpb24iPkdUS19K
VVNUSUZZX0xFRlQ8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJ3cmFw
X21vZGUiPkdUS19XUkFQX1dPUkQ8L3Byb3BlcnR5Pg0KICAgICsJCSAgICAgIDxwcm9wZXJ0eSBu
YW1lPSJjdXJzb3JfdmlzaWJsZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAgKwkJICAgICAgPHByb3Bl
cnR5IG5hbWU9InBpeGVsc19hYm92ZV9saW5lcyI+MDwvcHJvcGVydHk+DQogICAgKwkJICAgICAg
PHByb3BlcnR5IG5hbWU9InBpeGVsc19iZWxvd19saW5lcyI+MDwvcHJvcGVydHk+DQogICAgKwkJ
ICAgICAgPHByb3BlcnR5IG5hbWU9InBpeGVsc19pbnNpZGVfd3JhcCI+MDwvcHJvcGVydHk+DQog
ICAgKwkJICAgICAgPHByb3BlcnR5IG5hbWU9ImxlZnRfbWFyZ2luIj4wPC9wcm9wZXJ0eT4NCiAg
ICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0icmlnaHRfbWFyZ2luIj4wPC9wcm9wZXJ0eT4NCiAg
ICArCQkgICAgICA8cHJvcGVydHkgbmFtZT0iaW5kZW50Ij4wPC9wcm9wZXJ0eT4NCiAgICArCQkg
ICAgICA8cHJvcGVydHkgbmFtZT0idGV4dCIgdHJhbnNsYXRhYmxlPSJ5ZXMiPlNvcnJ5LCBubyBo
ZWxwIGF2YWlsYWJsZSBmb3IgdGhpcyBvcHRpb24geWV0LjwvcHJvcGVydHk+DQogICAgKwkJICAg
IDwvd2lkZ2V0Pg0KICAgICsJCSAgPC9jaGlsZD4NCiAgICArCQk8L3dpZGdldD4NCiAgICArCQk8
cGFja2luZz4NCiAgICArCQkgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsiPlRydWU8L3Byb3BlcnR5
Pg0KICAgICsJCSAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+VHJ1ZTwvcHJvcGVydHk+DQogICAg
KwkJPC9wYWNraW5nPg0KICAgICsJICAgICAgPC9jaGlsZD4NCiAgICArCSAgICA8L3dpZGdldD4N
CiAgICArCSAgICA8cGFja2luZz4NCiAgICArCSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzaHJpbmsi
PlRydWU8L3Byb3BlcnR5Pg0KICAgICsJICAgICAgPHByb3BlcnR5IG5hbWU9InJlc2l6ZSI+VHJ1
ZTwvcHJvcGVydHk+DQogICAgKwkgICAgPC9wYWNraW5nPg0KICAgICsJICA8L2NoaWxkPg0KICAg
ICsJPC93aWRnZXQ+DQogICAgKwk8cGFja2luZz4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9InBh
ZGRpbmciPjA8L3Byb3BlcnR5Pg0KICAgICsJICA8cHJvcGVydHkgbmFtZT0iZXhwYW5kIj5UcnVl
PC9wcm9wZXJ0eT4NCiAgICArCSAgPHByb3BlcnR5IG5hbWU9ImZpbGwiPlRydWU8L3Byb3BlcnR5
Pg0KICAgICsJPC9wYWNraW5nPg0KICAgICsgICAgICA8L2NoaWxkPg0KICAgICsgICAgPC93aWRn
ZXQ+DQogICAgKyAgPC9jaGlsZD4NCiAgICArPC93aWRnZXQ+DQogICAgKw0KICAgICs8L2dsYWRl
LWludGVyZmFjZT4NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2ltYWdlcy5jIGIv
c3VwcG9ydC9rY29uZmlnL2ltYWdlcy5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBp
bmRleCAwMDAwMDAwLi5iNGZhMGU0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBv
cnQva2NvbmZpZy9pbWFnZXMuYw0KICAgIEBAIC0wLDAgKzEsMzI4IEBADQogICAgKy8vIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAo
QykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQog
ICAgKw0KICAgICsjaW5jbHVkZSAiaW1hZ2VzLmgiDQogICAgKw0KICAgICtjb25zdCBjaGFyICp4
cG1fbG9hZFtdID0gew0KICAgICsiMjIgMjIgNSAxIiwNCiAgICArIi4gYyBOb25lIiwNCiAgICAr
IiMgYyAjMDAwMDAwIiwNCiAgICArImMgYyAjODM4MTAwIiwNCiAgICArImEgYyAjZmZmZjAwIiwN
CiAgICArImIgYyAjZmZmZmZmIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAg
ICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IiwNCiAgICArIi4uLi4uLi4uLi4uLiMjIyMuLi4uIy4iLA0KICAgICsiLi4uLi4uLi4uLi4jLi4u
LiMjLiMjLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4jIyMuIiwNCiAgICArIi4uLi4uLi4u
Li4uLi4uLi4uIyMjIy4iLA0KICAgICsiLiMjIyMuLi4uLi4uLi4uLiMjIyMjLiIsDQogICAgKyIj
YWJhYiMjIyMjIyMjIyMuLi4uLi4uIiwNCiAgICArIiNiYWJhYmFiYWJhYmFiIy4uLi4uLi4iLA0K
ICAgICsiI2FiYWJhYmFiYWJhYmEjLi4uLi4uLiIsDQogICAgKyIjYmFiYWJhYmFiYWJhYiMuLi4u
Li4uIiwNCiAgICArIiNhYmFiYWIjIyMjIyMjIyMjIyMjIyMiLA0KICAgICsiI2JhYmFiIyNjY2Nj
Y2NjY2NjY2MjIyIsDQogICAgKyIjYWJhYiMjY2NjY2NjY2NjY2NjIyMuIiwNCiAgICArIiNiYWIj
I2NjY2NjY2NjY2NjYyMjLi4iLA0KICAgICsiI2FiIyNjY2NjY2NjY2NjY2MjIy4uLiIsDQogICAg
KyIjYiMjY2NjY2NjY2NjY2NjIyMuLi4uIiwNCiAgICArIiMjI2NjY2NjY2NjY2NjYyMjLi4uLi4i
LA0KICAgICsiIyNjY2NjY2NjY2NjY2MjIy4uLi4uLiIsDQogICAgKyIjIyMjIyMjIyMjIyMjIyMu
Li4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ifTsNCiAgICArDQogICAgK2Nv
bnN0IGNoYXIgKnhwbV9zYXZlW10gPSB7DQogICAgKyIyMiAyMiA1IDEiLA0KICAgICsiLiBjIE5v
bmUiLA0KICAgICsiIyBjICMwMDAwMDAiLA0KICAgICsiYSBjICM4MzgxMDAiLA0KICAgICsiYiBj
ICNjNWMyYzUiLA0KICAgICsiYyBjICNjZGI2ZDUiLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsDQogICAgKyIuIyMjIyMjIyMjIyMjIyMjIyMjIyMuIiwNCiAgICArIi4jYWEjYmJiYmJi
YmJiYmJiI2JiIy4iLA0KICAgICsiLiNhYSNiYmJiYmJiYmJiYmIjYmIjLiIsDQogICAgKyIuI2Fh
I2JiYmJiYmJiYmNiYiMjIyMuIiwNCiAgICArIi4jYWEjYmJiY2NiYmJiYmJiI2FhIy4iLA0KICAg
ICsiLiNhYSNiYmJjY2JiYmJiYmIjYWEjLiIsDQogICAgKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMu
IiwNCiAgICArIi4jYWEjYmJiYmJiYmJiYmJiI2FhIy4iLA0KICAgICsiLiNhYSNiYmJiYmJiYmJi
YmIjYWEjLiIsDQogICAgKyIuI2FhI2JiYmJiYmJiYmJiYiNhYSMuIiwNCiAgICArIi4jYWFhIyMj
IyMjIyMjIyMjYWFhIy4iLA0KICAgICsiLiNhYWFhYWFhYWFhYWFhYWFhYWEjLiIsDQogICAgKyIu
I2FhYWFhYWFhYWFhYWFhYWFhYSMuIiwNCiAgICArIi4jYWFhIyMjIyMjIyMjIyMjI2FhIy4iLA0K
ICAgICsiLiNhYWEjIyMjIyMjIyNiYmIjYWEjLiIsDQogICAgKyIuI2FhYSMjIyMjIyMjI2JiYiNh
YSMuIiwNCiAgICArIi4jYWFhIyMjIyMjIyMjYmJiI2FhIy4iLA0KICAgICsiLiNhYWEjIyMjIyMj
IyNiYmIjYWEjLiIsDQogICAgKyIuI2FhYSMjIyMjIyMjI2JiYiNhYSMuIiwNCiAgICArIi4uIyMj
IyMjIyMjIyMjIyMjIyMjLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAg
ICsNCiAgICArY29uc3QgY2hhciAqeHBtX2JhY2tbXSA9IHsNCiAgICArIjIyIDIyIDMgMSIsDQog
ICAgKyIuIGMgTm9uZSIsDQogICAgKyIjIGMgIzAwMDA4MyIsDQogICAgKyJhIGMgIzgzODE4MyIs
DQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4u
Li4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4u
Li4uLi4uLi4jIyMjIyNhLi4uLiIsDQogICAgKyIuLiMuLi4uLi4jIyMjIyMjIyMjLi4uIiwNCiAg
ICArIi4uIyMuLi4jIyMjLi4uLi4uIyNhLi4iLA0KICAgICsiLi4jIyMuIyMjLi4uLi4uLi4uIyMu
LiIsDQogICAgKyIuLiMjIyMjIy4uLi4uLi4uLi4jIy4uIiwNCiAgICArIi4uIyMjIyMuLi4uLi4u
Li4uLiMjLi4iLA0KICAgICsiLi4jIyMjIyMuLi4uLi4uLi4uIyMuLiIsDQogICAgKyIuLiMjIyMj
IyMuLi4uLi4uLi4jIy4uIiwNCiAgICArIi4uIyMjIyMjIyMuLi4uLi4uIyNhLi4iLA0KICAgICsi
Li4uLi4uLi4uLi4uLi4uYSMjIy4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4jIyMuLi4uIiwN
CiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uIn07DQogICAgKw0KICAgICtjb25zdCBjaGFyICp4cG1fdHJlZV92
aWV3W10gPSB7DQogICAgKyIyMiAyMiAyIDEiLA0KICAgICsiLiBjIE5vbmUiLA0KICAgICsiIyBj
ICMwMDAwMDAiLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgICsi
Li4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwN
CiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLi4uLi4u
Li4uLiIsDQogICAgKyIuLi4uLi4jIyMjIyMjIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4u
Li4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4u
Li4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAg
ICsiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jIyMjIyMjIy4uLi4uLi4u
IiwNCiAgICArIi4uLi4uLiMuLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLi4u
Li4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMu
Li4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIu
Li4uLi4jIyMjIyMjIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0K
ICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAgICsNCiAgICArY29uc3QgY2hhciAq
eHBtX3NpbmdsZV92aWV3W10gPSB7DQogICAgKyIyMiAyMiAyIDEiLA0KICAgICsiLiBjIE5vbmUi
LA0KICAgICsiIyBjICMwMDAwMDAiLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiIsDQog
ICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4jLi4uLi4uLi4u
Li4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uIy4u
Li4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4u
Li4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICAr
Ii4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIs
DQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4jLi4uLi4u
Li4uLi4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4u
Iy4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgICsiLi4u
Li4uLi4uLiMuLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAg
ICArIi4uLi4uLi4uLi4jLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLiMuLi4uLi4uLi4u
LiIsDQogICAgKyIuLi4uLi4uLi4uIy4uLi4uLi4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4iLA0KICAgICsiLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiJ9Ow0KICAgICsNCiAgICAr
Y29uc3QgY2hhciAqeHBtX3NwbGl0X3ZpZXdbXSA9IHsNCiAgICArIjIyIDIyIDIgMSIsDQogICAg
KyIuIGMgTm9uZSIsDQogICAgKyIjIGMgIzAwMDAwMCIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIiwNCiAgICArIi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4u
Li4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICArIi4u
Li4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQog
ICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4jLi4uLi4u
Li4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4u
Iy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsiLi4uLi4u
Iy4uLi4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICAr
Ii4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIs
DQogICAgKyIuLi4uLi4jLi4uLi4uIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4jLi4u
Li4uLi4iLA0KICAgICsiLi4uLi4uIy4uLi4uLiMuLi4uLi4uLiIsDQogICAgKyIuLi4uLi4jLi4u
Li4uIy4uLi4uLi4uIiwNCiAgICArIi4uLi4uLiMuLi4uLi4jLi4uLi4uLi4iLA0KICAgICsiLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiIsDQogICAgKyIuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIn07DQog
ICAgKw0KICAgICtjb25zdCBjaGFyICp4cG1fc3ltYm9sX25vW10gPSB7DQogICAgKyIxMiAxMiAy
IDEiLA0KICAgICsiICBjIHdoaXRlIiwNCiAgICArIi4gYyBibGFjayIsDQogICAgKyIgICAgICAg
ICAgICAiLA0KICAgICsiIC4uLi4uLi4uLi4gIiwNCiAgICArIiAuICAgICAgICAuICIsDQogICAg
KyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuICAgICAgICAu
ICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAu
ICAgICAgICAuICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4uLi4uLi4uLi4gIiwN
CiAgICArIiAgICAgICAgICAgICJ9Ow0KICAgICsNCiAgICArY29uc3QgY2hhciAqeHBtX3N5bWJv
bF9tb2RbXSA9IHsNCiAgICArIjEyIDEyIDIgMSIsDQogICAgKyIgIGMgd2hpdGUiLA0KICAgICsi
LiBjIGJsYWNrIiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAgKyIgLi4uLi4uLi4uLiAiLA0K
ICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuICAgICAgICAuICIsDQogICAgKyIgLiAgIC4u
ICAgLiAiLA0KICAgICsiIC4gIC4uLi4gIC4gIiwNCiAgICArIiAuICAuLi4uICAuICIsDQogICAg
KyIgLiAgIC4uICAgLiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuICAgICAgICAu
ICIsDQogICAgKyIgLi4uLi4uLi4uLiAiLA0KICAgICsiICAgICAgICAgICAgIn07DQogICAgKw0K
ICAgICtjb25zdCBjaGFyICp4cG1fc3ltYm9sX3llc1tdID0gew0KICAgICsiMTIgMTIgMiAxIiwN
CiAgICArIiAgYyB3aGl0ZSIsDQogICAgKyIuIGMgYmxhY2siLA0KICAgICsiICAgICAgICAgICAg
IiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4g
ICAgICAgIC4gIiwNCiAgICArIiAuICAgICAgLiAuICIsDQogICAgKyIgLiAgICAgLi4gLiAiLA0K
ICAgICsiIC4gLiAgLi4gIC4gIiwNCiAgICArIiAuIC4uLi4gICAuICIsDQogICAgKyIgLiAgLi4g
ICAgLiAiLA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQogICAg
KyIgICAgICAgICAgICAifTsNCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnhwbV9jaG9pY2Vfbm9b
XSA9IHsNCiAgICArIjEyIDEyIDIgMSIsDQogICAgKyIgIGMgd2hpdGUiLA0KICAgICsiLiBjIGJs
YWNrIiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAgKyIgICAgLi4uLiAgICAiLA0KICAgICsi
ICAuLiAgICAuLiAgIiwNCiAgICArIiAgLiAgICAgIC4gICIsDQogICAgKyIgLiAgICAgICAgLiAi
LA0KICAgICsiIC4gICAgICAgIC4gIiwNCiAgICArIiAuICAgICAgICAuICIsDQogICAgKyIgLiAg
ICAgICAgLiAiLA0KICAgICsiICAuICAgICAgLiAgIiwNCiAgICArIiAgLi4gICAgLi4gICIsDQog
ICAgKyIgICAgLi4uLiAgICAiLA0KICAgICsiICAgICAgICAgICAgIn07DQogICAgKw0KICAgICtj
b25zdCBjaGFyICp4cG1fY2hvaWNlX3llc1tdID0gew0KICAgICsiMTIgMTIgMiAxIiwNCiAgICAr
IiAgYyB3aGl0ZSIsDQogICAgKyIuIGMgYmxhY2siLA0KICAgICsiICAgICAgICAgICAgIiwNCiAg
ICArIiAgICAuLi4uICAgICIsDQogICAgKyIgIC4uICAgIC4uICAiLA0KICAgICsiICAuICAgICAg
LiAgIiwNCiAgICArIiAuICAgLi4gICAuICIsDQogICAgKyIgLiAgLi4uLiAgLiAiLA0KICAgICsi
IC4gIC4uLi4gIC4gIiwNCiAgICArIiAuICAgLi4gICAuICIsDQogICAgKyIgIC4gICAgICAuICAi
LA0KICAgICsiICAuLiAgICAuLiAgIiwNCiAgICArIiAgICAuLi4uICAgICIsDQogICAgKyIgICAg
ICAgICAgICAifTsNCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnhwbV9tZW51W10gPSB7DQogICAg
KyIxMiAxMiAyIDEiLA0KICAgICsiICBjIHdoaXRlIiwNCiAgICArIi4gYyBibGFjayIsDQogICAg
KyIgICAgICAgICAgICAiLA0KICAgICsiIC4uLi4uLi4uLi4gIiwNCiAgICArIiAuICAgICAgICAu
ICIsDQogICAgKyIgLiAuLiAgICAgLiAiLA0KICAgICsiIC4gLi4uLiAgIC4gIiwNCiAgICArIiAu
IC4uLi4uLiAuICIsDQogICAgKyIgLiAuLi4uLi4gLiAiLA0KICAgICsiIC4gLi4uLiAgIC4gIiwN
CiAgICArIiAuIC4uICAgICAuICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4uLi4u
Li4uLi4gIiwNCiAgICArIiAgICAgICAgICAgICJ9Ow0KICAgICsNCiAgICArY29uc3QgY2hhciAq
eHBtX21lbnVfaW52W10gPSB7DQogICAgKyIxMiAxMiAyIDEiLA0KICAgICsiICBjIHdoaXRlIiwN
CiAgICArIi4gYyBibGFjayIsDQogICAgKyIgICAgICAgICAgICAiLA0KICAgICsiIC4uLi4uLi4u
Li4gIiwNCiAgICArIiAuLi4uLi4uLi4uICIsDQogICAgKyIgLi4gIC4uLi4uLiAiLA0KICAgICsi
IC4uICAgIC4uLi4gIiwNCiAgICArIiAuLiAgICAgIC4uICIsDQogICAgKyIgLi4gICAgICAuLiAi
LA0KICAgICsiIC4uICAgIC4uLi4gIiwNCiAgICArIiAuLiAgLi4uLi4uICIsDQogICAgKyIgLi4u
Li4uLi4uLiAiLA0KICAgICsiIC4uLi4uLi4uLi4gIiwNCiAgICArIiAgICAgICAgICAgICJ9Ow0K
ICAgICsNCiAgICArY29uc3QgY2hhciAqeHBtX21lbnViYWNrW10gPSB7DQogICAgKyIxMiAxMiAy
IDEiLA0KICAgICsiICBjIHdoaXRlIiwNCiAgICArIi4gYyBibGFjayIsDQogICAgKyIgICAgICAg
ICAgICAiLA0KICAgICsiIC4uLi4uLi4uLi4gIiwNCiAgICArIiAuICAgICAgICAuICIsDQogICAg
KyIgLiAgICAgLi4gLiAiLA0KICAgICsiIC4gICAuLi4uIC4gIiwNCiAgICArIiAuIC4uLi4uLiAu
ICIsDQogICAgKyIgLiAuLi4uLi4gLiAiLA0KICAgICsiIC4gICAuLi4uIC4gIiwNCiAgICArIiAu
ICAgICAuLiAuICIsDQogICAgKyIgLiAgICAgICAgLiAiLA0KICAgICsiIC4uLi4uLi4uLi4gIiwN
CiAgICArIiAgICAgICAgICAgICJ9Ow0KICAgICsNCiAgICArY29uc3QgY2hhciAqeHBtX3ZvaWRb
XSA9IHsNCiAgICArIjEyIDEyIDIgMSIsDQogICAgKyIgIGMgd2hpdGUiLA0KICAgICsiLiBjIGJs
YWNrIiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAgKyIgICAgICAgICAgICAiLA0KICAgICsi
ICAgICAgICAgICAgIiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAgKyIgICAgICAgICAgICAi
LA0KICAgICsiICAgICAgICAgICAgIiwNCiAgICArIiAgICAgICAgICAgICIsDQogICAgKyIgICAg
ICAgICAgICAiLA0KICAgICsiICAgICAgICAgICAgIiwNCiAgICArIiAgICAgICAgICAgICIsDQog
ICAgKyIgICAgICAgICAgICAiLA0KICAgICsiICAgICAgICAgICAgIn07DQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy9pbWFnZXMuaCBiL3N1cHBvcnQva2NvbmZpZy9pbWFnZXMuaA0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZDhmZjYxNA0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvaW1hZ2VzLmgNCiAgICBA
QCAtMCwwICsxLDMzIEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w
ICovDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHpp
cHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQogICAgKw0KICAgICsjaWZuZGVmIElNQUdF
U19IDQogICAgKyNkZWZpbmUgSU1BR0VTX0gNCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1
cw0KICAgICtleHRlcm4gIkMiIHsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICtleHRlcm4gY29u
c3QgY2hhciAqeHBtX2xvYWRbXTsNCiAgICArZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zYXZlW107
DQogICAgK2V4dGVybiBjb25zdCBjaGFyICp4cG1fYmFja1tdOw0KICAgICtleHRlcm4gY29uc3Qg
Y2hhciAqeHBtX3RyZWVfdmlld1tdOw0KICAgICtleHRlcm4gY29uc3QgY2hhciAqeHBtX3Npbmds
ZV92aWV3W107DQogICAgK2V4dGVybiBjb25zdCBjaGFyICp4cG1fc3BsaXRfdmlld1tdOw0KICAg
ICtleHRlcm4gY29uc3QgY2hhciAqeHBtX3N5bWJvbF9ub1tdOw0KICAgICtleHRlcm4gY29uc3Qg
Y2hhciAqeHBtX3N5bWJvbF9tb2RbXTsNCiAgICArZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9zeW1i
b2xfeWVzW107DQogICAgK2V4dGVybiBjb25zdCBjaGFyICp4cG1fY2hvaWNlX25vW107DQogICAg
K2V4dGVybiBjb25zdCBjaGFyICp4cG1fY2hvaWNlX3llc1tdOw0KICAgICtleHRlcm4gY29uc3Qg
Y2hhciAqeHBtX21lbnVbXTsNCiAgICArZXh0ZXJuIGNvbnN0IGNoYXIgKnhwbV9tZW51X2ludltd
Ow0KICAgICtleHRlcm4gY29uc3QgY2hhciAqeHBtX21lbnViYWNrW107DQogICAgK2V4dGVybiBj
b25zdCBjaGFyICp4cG1fdm9pZFtdOw0KICAgICsNCiAgICArI2lmZGVmIF9fY3BsdXNwbHVzDQog
ICAgK30NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjZW5kaWYgLyogSU1BR0VTX0ggKi8NCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2xleGVyLmwgYi9zdXBwb3J0L2tjb25maWcv
bGV4ZXIubA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYzVh
Y2IzMg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvbGV4ZXIu
bA0KICAgIEBAIC0wLDAgKzEsNDk4IEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBHUEwtMi4wICovDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBa
aXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQogICAgKyVvcHRpb24gbm9z
dGRpbml0IG5veXl3cmFwIG5ldmVyLWludGVyYWN0aXZlIGZ1bGwgZWNzDQogICAgKyVvcHRpb24g
OGJpdCBub2RlZmF1bHQgeXlsaW5lbm8NCiAgICArJXggQVNTSUdOX1ZBTCBIRUxQIFNUUklORw0K
ICAgICslew0KICAgICsNCiAgICArI2luY2x1ZGUgPGFzc2VydC5oPg0KICAgICsjaW5jbHVkZSA8
Z2xvYi5oPg0KICAgICsjaW5jbHVkZSA8bGltaXRzLmg+DQogICAgKyNpbmNsdWRlIDxzdGRpby5o
Pg0KICAgICsjaW5jbHVkZSA8c3RkbGliLmg+DQogICAgKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAg
ICArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAg
ICsjaW5jbHVkZSAicGFyc2VyLnRhYi5oIg0KICAgICsNCiAgICArI2RlZmluZSBZWV9ERUNMCQlz
dGF0aWMgaW50IHl5bGV4MSh2b2lkKQ0KICAgICsNCiAgICArI2RlZmluZSBTVEFSVF9TVFJTSVpF
CTE2DQogICAgKw0KICAgICtzdGF0aWMgc3RydWN0IHsNCiAgICArCXN0cnVjdCBmaWxlICpmaWxl
Ow0KICAgICsJaW50IGxpbmVubzsNCiAgICArfSBjdXJyZW50X3BvczsNCiAgICArDQogICAgK3N0
YXRpYyBpbnQgcHJldl9wcmV2X3Rva2VuID0gVF9FT0w7DQogICAgK3N0YXRpYyBpbnQgcHJldl90
b2tlbiA9IFRfRU9MOw0KICAgICtzdGF0aWMgY2hhciAqdGV4dDsNCiAgICArc3RhdGljIGludCB0
ZXh0X3NpemUsIHRleHRfYXNpemU7DQogICAgKw0KICAgICtzdHJ1Y3QgYnVmZmVyIHsNCiAgICAr
CXN0cnVjdCBidWZmZXIgKnBhcmVudDsNCiAgICArCVlZX0JVRkZFUl9TVEFURSBzdGF0ZTsNCiAg
ICArfTsNCiAgICArDQogICAgK3N0cnVjdCBidWZmZXIgKmN1cnJlbnRfYnVmOw0KICAgICsNCiAg
ICArc3RhdGljIGludCBsYXN0X3RzLCBmaXJzdF90czsNCiAgICArDQogICAgK3N0YXRpYyBjaGFy
ICpleHBhbmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNpemVfdCBuKTsNCiAgICArc3RhdGljIHZv
aWQgYXBwZW5kX2V4cGFuZGVkX3N0cmluZyhjb25zdCBjaGFyICppbik7DQogICAgK3N0YXRpYyB2
b2lkIHpjb25mX2VuZGhlbHAodm9pZCk7DQogICAgK3N0YXRpYyB2b2lkIHpjb25mX2VuZGZpbGUo
dm9pZCk7DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBuZXdfc3RyaW5nKHZvaWQpDQogICAgK3sN
CiAgICArCXRleHQgPSB4bWFsbG9jKFNUQVJUX1NUUlNJWkUpOw0KICAgICsJdGV4dF9hc2l6ZSA9
IFNUQVJUX1NUUlNJWkU7DQogICAgKwl0ZXh0X3NpemUgPSAwOw0KICAgICsJKnRleHQgPSAwOw0K
ICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBhcHBlbmRfc3RyaW5nKGNvbnN0IGNoYXIg
KnN0ciwgaW50IHNpemUpDQogICAgK3sNCiAgICArCWludCBuZXdfc2l6ZSA9IHRleHRfc2l6ZSAr
IHNpemUgKyAxOw0KICAgICsJaWYgKG5ld19zaXplID4gdGV4dF9hc2l6ZSkgew0KICAgICsJCW5l
d19zaXplICs9IFNUQVJUX1NUUlNJWkUgLSAxOw0KICAgICsJCW5ld19zaXplICY9IC1TVEFSVF9T
VFJTSVpFOw0KICAgICsJCXRleHQgPSB4cmVhbGxvYyh0ZXh0LCBuZXdfc2l6ZSk7DQogICAgKwkJ
dGV4dF9hc2l6ZSA9IG5ld19zaXplOw0KICAgICsJfQ0KICAgICsJbWVtY3B5KHRleHQgKyB0ZXh0
X3NpemUsIHN0ciwgc2l6ZSk7DQogICAgKwl0ZXh0X3NpemUgKz0gc2l6ZTsNCiAgICArCXRleHRb
dGV4dF9zaXplXSA9IDA7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGFsbG9jX3N0
cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQ0KICAgICt7DQogICAgKwl0ZXh0ID0geG1h
bGxvYyhzaXplICsgMSk7DQogICAgKwltZW1jcHkodGV4dCwgc3RyLCBzaXplKTsNCiAgICArCXRl
eHRbc2l6ZV0gPSAwOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCB3YXJuX2lnbm9y
ZWRfY2hhcmFjdGVyKGNoYXIgY2hyKQ0KICAgICt7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwNCiAg
ICArCSAgICAgICAgIiVzOiVkOndhcm5pbmc6IGlnbm9yaW5nIHVuc3VwcG9ydGVkIGNoYXJhY3Rl
ciAnJWMnXG4iLA0KICAgICsJICAgICAgICBjdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vLCBj
aHIpOw0KICAgICt9DQogICAgKyV9DQogICAgKw0KICAgICtuCVtBLVphLXowLTlfLV0NCiAgICAr
DQogICAgKyUlDQogICAgKwlpbnQgc3RyID0gMDsNCiAgICArCWludCB0cywgaTsNCiAgICArDQog
ICAgKyMuKgkJCS8qIGlnbm9yZSBjb21tZW50ICovDQogICAgK1sgXHRdKgkJCS8qIHdoaXRlc3Bh
Y2VzICovDQogICAgK1xcXG4JCQkvKiBlc2NhcGVkIG5ldyBsaW5lICovDQogICAgK1xuCQkJcmV0
dXJuIFRfRU9MOw0KICAgICsiYWxsbm9jb25maWdfeSIJCXJldHVybiBUX0FMTE5PQ09ORklHX1k7
DQogICAgKyJib29sIgkJCXJldHVybiBUX0JPT0w7DQogICAgKyJjaG9pY2UiCQlyZXR1cm4gVF9D
SE9JQ0U7DQogICAgKyJjb21tZW50IgkJcmV0dXJuIFRfQ09NTUVOVDsNCiAgICArImNvbmZpZyIJ
CXJldHVybiBUX0NPTkZJRzsNCiAgICArImRlZl9ib29sIgkJcmV0dXJuIFRfREVGX0JPT0w7DQog
ICAgKyJkZWZfdHJpc3RhdGUiCQlyZXR1cm4gVF9ERUZfVFJJU1RBVEU7DQogICAgKyJkZWZhdWx0
IgkJcmV0dXJuIFRfREVGQVVMVDsNCiAgICArImRlZmNvbmZpZ19saXN0IglyZXR1cm4gVF9ERUZD
T05GSUdfTElTVDsNCiAgICArImRlcGVuZHMiCQlyZXR1cm4gVF9ERVBFTkRTOw0KICAgICsiZW5k
Y2hvaWNlIgkJcmV0dXJuIFRfRU5EQ0hPSUNFOw0KICAgICsiZW5kaWYiCQkJcmV0dXJuIFRfRU5E
SUY7DQogICAgKyJlbmRtZW51IgkJcmV0dXJuIFRfRU5ETUVOVTsNCiAgICArImhlbHAifCItLS1o
ZWxwLS0tIglyZXR1cm4gVF9IRUxQOw0KICAgICsiaGV4IgkJCXJldHVybiBUX0hFWDsNCiAgICAr
ImlmIgkJCXJldHVybiBUX0lGOw0KICAgICsiaW1wbHkiCQkJcmV0dXJuIFRfSU1QTFk7DQogICAg
KyJpbnQiCQkJcmV0dXJuIFRfSU5UOw0KICAgICsibWFpbm1lbnUiCQlyZXR1cm4gVF9NQUlOTUVO
VTsNCiAgICArIm1lbnUiCQkJcmV0dXJuIFRfTUVOVTsNCiAgICArIm1lbnVjb25maWciCQlyZXR1
cm4gVF9NRU5VQ09ORklHOw0KICAgICsibW9kdWxlcyIJCXJldHVybiBUX01PRFVMRVM7DQogICAg
KyJvbiIJCQlyZXR1cm4gVF9PTjsNCiAgICArIm9wdGlvbiIJCXJldHVybiBUX09QVElPTjsNCiAg
ICArIm9wdGlvbmFsIgkJcmV0dXJuIFRfT1BUSU9OQUw7DQogICAgKyJwcm9tcHQiCQlyZXR1cm4g
VF9QUk9NUFQ7DQogICAgKyJyYW5nZSIJCQlyZXR1cm4gVF9SQU5HRTsNCiAgICArInNlbGVjdCIJ
CXJldHVybiBUX1NFTEVDVDsNCiAgICArInNvdXJjZSIJCXJldHVybiBUX1NPVVJDRTsNCiAgICAr
InN0cmluZyIJCXJldHVybiBUX1NUUklORzsNCiAgICArInRyaXN0YXRlIgkJcmV0dXJuIFRfVFJJ
U1RBVEU7DQogICAgKyJ2aXNpYmxlIgkJcmV0dXJuIFRfVklTSUJMRTsNCiAgICArInx8IgkJCXJl
dHVybiBUX09SOw0KICAgICsiJiYiCQkJcmV0dXJuIFRfQU5EOw0KICAgICsiPSIJCQlyZXR1cm4g
VF9FUVVBTDsNCiAgICArIiE9IgkJCXJldHVybiBUX1VORVFVQUw7DQogICAgKyI8IgkJCXJldHVy
biBUX0xFU1M7DQogICAgKyI8PSIJCQlyZXR1cm4gVF9MRVNTX0VRVUFMOw0KICAgICsiPiIJCQly
ZXR1cm4gVF9HUkVBVEVSOw0KICAgICsiPj0iCQkJcmV0dXJuIFRfR1JFQVRFUl9FUVVBTDsNCiAg
ICArIiEiCQkJcmV0dXJuIFRfTk9UOw0KICAgICsiKCIJCQlyZXR1cm4gVF9PUEVOX1BBUkVOOw0K
ICAgICsiKSIJCQlyZXR1cm4gVF9DTE9TRV9QQVJFTjsNCiAgICArIjo9IgkJCXJldHVybiBUX0NP
TE9OX0VRVUFMOw0KICAgICsiKz0iCQkJcmV0dXJuIFRfUExVU19FUVVBTDsNCiAgICArXCJ8XCcJ
CQl7DQogICAgKwkJCQlzdHIgPSB5eXRleHRbMF07DQogICAgKwkJCQluZXdfc3RyaW5nKCk7DQog
ICAgKwkJCQlCRUdJTihTVFJJTkcpOw0KICAgICsJCQl9DQogICAgK3tufSsJCQl7DQogICAgKwkJ
CQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0KICAgICsJCQkJeXlsdmFsLnN0cmluZyA9
IHRleHQ7DQogICAgKwkJCQlyZXR1cm4gVF9XT1JEOw0KICAgICsJCQl9DQogICAgKyh7bn18JCkr
CQl7DQogICAgKwkJCQkvKiB0aGlzIHRva2VuIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAnJCcgKi8N
CiAgICArCQkJCXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxlbmcpOw0K
ICAgICsJCQkJaWYgKHN0cmxlbih5eWx2YWwuc3RyaW5nKSkNCiAgICArCQkJCQlyZXR1cm4gVF9X
T1JEOw0KICAgICsJCQkJZnJlZSh5eWx2YWwuc3RyaW5nKTsNCiAgICArCQkJfQ0KICAgICsuCQkJ
d2Fybl9pZ25vcmVkX2NoYXJhY3RlcigqeXl0ZXh0KTsNCiAgICArDQogICAgKzxBU1NJR05fVkFM
PnsNCiAgICArCVteWzpibGFuazpdXG5dKy4qCXsNCiAgICArCQlhbGxvY19zdHJpbmcoeXl0ZXh0
LCB5eWxlbmcpOw0KICAgICsJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAgICsJCXJldHVybiBU
X0FTU0lHTl9WQUw7DQogICAgKwl9DQogICAgKwlcbgl7IEJFR0lOKElOSVRJQUwpOyByZXR1cm4g
VF9FT0w7IH0NCiAgICArCS4NCiAgICArfQ0KICAgICsNCiAgICArPFNUUklORz57DQogICAgKwki
JCIuKglhcHBlbmRfZXhwYW5kZWRfc3RyaW5nKHl5dGV4dCk7DQogICAgKwlbXiQnIlxcXG5dKwl7
DQogICAgKwkJYXBwZW5kX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7DQogICAgKwl9DQogICAgKwlc
XC4/CXsNCiAgICArCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOw0KICAg
ICsJfQ0KICAgICsJXCd8XCIJew0KICAgICsJCWlmIChzdHIgPT0geXl0ZXh0WzBdKSB7DQogICAg
KwkJCUJFR0lOKElOSVRJQUwpOw0KICAgICsJCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICAr
CQkJcmV0dXJuIFRfV09SRF9RVU9URTsNCiAgICArCQl9IGVsc2UNCiAgICArCQkJYXBwZW5kX3N0
cmluZyh5eXRleHQsIDEpOw0KICAgICsJfQ0KICAgICsJXG4Jew0KICAgICsJCWZwcmludGYoc3Rk
ZXJyLA0KICAgICsJCQkiJXM6JWQ6d2FybmluZzogbXVsdGktbGluZSBzdHJpbmdzIG5vdCBzdXBw
b3J0ZWRcbiIsDQogICAgKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAg
ICsJCXVucHV0KCdcbicpOw0KICAgICsJCUJFR0lOKElOSVRJQUwpOw0KICAgICsJCXl5bHZhbC5z
dHJpbmcgPSB0ZXh0Ow0KICAgICsJCXJldHVybiBUX1dPUkRfUVVPVEU7DQogICAgKwl9DQogICAg
Kwk8PEVPRj4+CXsNCiAgICArCQlCRUdJTihJTklUSUFMKTsNCiAgICArCQl5eWx2YWwuc3RyaW5n
ID0gdGV4dDsNCiAgICArCQlyZXR1cm4gVF9XT1JEX1FVT1RFOw0KICAgICsJfQ0KICAgICt9DQog
ICAgKw0KICAgICs8SEVMUD57DQogICAgKwlbIFx0XSsJew0KICAgICsJCXRzID0gMDsNCiAgICAr
CQlmb3IgKGkgPSAwOyBpIDwgeXlsZW5nOyBpKyspIHsNCiAgICArCQkJaWYgKHl5dGV4dFtpXSA9
PSAnXHQnKQ0KICAgICsJCQkJdHMgPSAodHMgJiB+NykgKyA4Ow0KICAgICsJCQllbHNlDQogICAg
KwkJCQl0cysrOw0KICAgICsJCX0NCiAgICArCQlsYXN0X3RzID0gdHM7DQogICAgKwkJaWYgKGZp
cnN0X3RzKSB7DQogICAgKwkJCWlmICh0cyA8IGZpcnN0X3RzKSB7DQogICAgKwkJCQl6Y29uZl9l
bmRoZWxwKCk7DQogICAgKwkJCQlyZXR1cm4gVF9IRUxQVEVYVDsNCiAgICArCQkJfQ0KICAgICsJ
CQl0cyAtPSBmaXJzdF90czsNCiAgICArCQkJd2hpbGUgKHRzID4gOCkgew0KICAgICsJCQkJYXBw
ZW5kX3N0cmluZygiICAgICAgICAiLCA4KTsNCiAgICArCQkJCXRzIC09IDg7DQogICAgKwkJCX0N
CiAgICArCQkJYXBwZW5kX3N0cmluZygiICAgICAgICAiLCB0cyk7DQogICAgKwkJfQ0KICAgICsJ
fQ0KICAgICsJWyBcdF0qXG4vW14gXHRcbl0gew0KICAgICsJCXpjb25mX2VuZGhlbHAoKTsNCiAg
ICArCQlyZXR1cm4gVF9IRUxQVEVYVDsNCiAgICArCX0NCiAgICArCVsgXHRdKlxuCXsNCiAgICAr
CQlhcHBlbmRfc3RyaW5nKCJcbiIsIDEpOw0KICAgICsJfQ0KICAgICsJW14gXHRcbl0uKiB7DQog
ICAgKwkJd2hpbGUgKHl5bGVuZykgew0KICAgICsJCQlpZiAoKHl5dGV4dFt5eWxlbmctMV0gIT0g
JyAnKSAmJiAoeXl0ZXh0W3l5bGVuZy0xXSAhPSAnXHQnKSkNCiAgICArCQkJCWJyZWFrOw0KICAg
ICsJCQl5eWxlbmctLTsNCiAgICArCQl9DQogICAgKwkJYXBwZW5kX3N0cmluZyh5eXRleHQsIHl5
bGVuZyk7DQogICAgKwkJaWYgKCFmaXJzdF90cykNCiAgICArCQkJZmlyc3RfdHMgPSBsYXN0X3Rz
Ow0KICAgICsJfQ0KICAgICsJPDxFT0Y+Pgl7DQogICAgKwkJemNvbmZfZW5kaGVscCgpOw0KICAg
ICsJCXJldHVybiBUX0hFTFBURVhUOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICs8PEVP
Rj4+CXsNCiAgICArCUJFR0lOKElOSVRJQUwpOw0KICAgICsNCiAgICArCWlmIChwcmV2X3Rva2Vu
ICE9IFRfRU9MICYmIHByZXZfdG9rZW4gIT0gVF9IRUxQVEVYVCkNCiAgICArCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiVkOndhcm5pbmc6IG5vIG5ldyBsaW5lIGF0IGVuZCBvZiBmaWxlXG4iLA0KICAg
ICsJCQljdXJyZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vKTsNCiAgICArDQogICAgKwlpZiAoY3Vy
cmVudF9maWxlKSB7DQogICAgKwkJemNvbmZfZW5kZmlsZSgpOw0KICAgICsJCXJldHVybiBUX0VP
TDsNCiAgICArCX0NCiAgICArCWZjbG9zZSh5eWluKTsNCiAgICArCXl5dGVybWluYXRlKCk7DQog
ICAgK30NCiAgICArDQogICAgKyUlDQogICAgKw0KICAgICsvKiBzZWNvbmQgc3RhZ2UgbGV4ZXIg
Ki8NCiAgICAraW50IHl5bGV4KHZvaWQpDQogICAgK3sNCiAgICArCWludCB0b2tlbjsNCiAgICAr
DQogICAgK3JlcGVhdDoNCiAgICArCXRva2VuID0geXlsZXgxKCk7DQogICAgKw0KICAgICsJaWYg
KHByZXZfdG9rZW4gPT0gVF9FT0wgfHwgcHJldl90b2tlbiA9PSBUX0hFTFBURVhUKSB7DQogICAg
KwkJaWYgKHRva2VuID09IFRfRU9MKSB7DQogICAgKwkJCS8qIERvIG5vdCBwYXNzIHVubmVlZGVk
IFRfRU9MIHRvIHRoZSBwYXJzZXIuICovDQogICAgKwkJCWdvdG8gcmVwZWF0Ow0KICAgICsJCX0g
ZWxzZSB7DQogICAgKwkJCS8qDQogICAgKwkJCSAqIEZvciB0aGUgcGFyc2VyLCB1cGRhdGUgZmls
ZS9saW5lbm8gYXQgdGhlIGZpcnN0IHRva2VuDQogICAgKwkJCSAqIG9mIGVhY2ggc3RhdGVtZW50
LiBHZW5lcmFsbHksIFxuIGlzIGEgc3RhdGVtZW50DQogICAgKwkJCSAqIHRlcm1pbmF0b3IgaW4g
S2NvbmZpZywgYnV0IGl0IGlzIG5vdCBhbHdheXMgdHJ1ZQ0KICAgICsJCQkgKiBiZWNhdXNlIFxu
IGNvdWxkIGJlIGVzY2FwZWQgYnkgYSBiYWNrc2xhc2guDQogICAgKwkJCSAqLw0KICAgICsJCQlj
dXJyZW50X3Bvcy5maWxlID0gY3VycmVudF9maWxlOw0KICAgICsJCQljdXJyZW50X3Bvcy5saW5l
bm8gPSB5eWxpbmVubzsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKHByZXZf
cHJldl90b2tlbiA9PSBUX0VPTCAmJiBwcmV2X3Rva2VuID09IFRfV09SRCAmJg0KICAgICsJICAg
ICh0b2tlbiA9PSBUX0VRVUFMIHx8IHRva2VuID09IFRfQ09MT05fRVFVQUwgfHwgdG9rZW4gPT0g
VF9QTFVTX0VRVUFMKSkNCiAgICArCQlCRUdJTihBU1NJR05fVkFMKTsNCiAgICArDQogICAgKwlw
cmV2X3ByZXZfdG9rZW4gPSBwcmV2X3Rva2VuOw0KICAgICsJcHJldl90b2tlbiA9IHRva2VuOw0K
ICAgICsNCiAgICArCXJldHVybiB0b2tlbjsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGNo
YXIgKmV4cGFuZF90b2tlbihjb25zdCBjaGFyICppbiwgc2l6ZV90IG4pDQogICAgK3sNCiAgICAr
CWNoYXIgKm91dDsNCiAgICArCWludCBjOw0KICAgICsJY2hhciBjMjsNCiAgICArCWNvbnN0IGNo
YXIgKnJlc3QsICplbmQ7DQogICAgKw0KICAgICsJbmV3X3N0cmluZygpOw0KICAgICsJYXBwZW5k
X3N0cmluZyhpbiwgbik7DQogICAgKw0KICAgICsJLyogZ2V0IHRoZSB3aG9sZSBsaW5lIGJlY2F1
c2Ugd2UgZG8gbm90IGtub3cgdGhlIGVuZCBvZiB0b2tlbi4gKi8NCiAgICArCXdoaWxlICgoYyA9
IGlucHV0KCkpICE9IEVPRikgew0KICAgICsJCWlmIChjID09ICdcbicpIHsNCiAgICArCQkJdW5w
dXQoYyk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCQljMiA9IGM7DQogICAgKwkJ
YXBwZW5kX3N0cmluZygmYzIsIDEpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJlc3QgPSB0ZXh0
Ow0KICAgICsJb3V0ID0gZXhwYW5kX29uZV90b2tlbigmcmVzdCk7DQogICAgKw0KICAgICsJLyog
cHVzaCBiYWNrIHVudXNlZCBjaGFyYWN0ZXJzIHRvIHRoZSBpbnB1dCBzdHJlYW0gKi8NCiAgICAr
CWVuZCA9IHJlc3QgKyBzdHJsZW4ocmVzdCk7DQogICAgKwl3aGlsZSAoZW5kID4gcmVzdCkNCiAg
ICArCQl1bnB1dCgqLS1lbmQpOw0KICAgICsNCiAgICArCWZyZWUodGV4dCk7DQogICAgKw0KICAg
ICsJcmV0dXJuIG91dDsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgYXBwZW5kX2V4
cGFuZGVkX3N0cmluZyhjb25zdCBjaGFyICpzdHIpDQogICAgK3sNCiAgICArCWNvbnN0IGNoYXIg
KmVuZDsNCiAgICArCWNoYXIgKnJlczsNCiAgICArDQogICAgKwlzdHIrKzsNCiAgICArDQogICAg
KwlyZXMgPSBleHBhbmRfZG9sbGFyKCZzdHIpOw0KICAgICsNCiAgICArCS8qIHB1c2ggYmFjayB1
bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5wdXQgc3RyZWFtICovDQogICAgKwllbmQgPSBzdHIg
KyBzdHJsZW4oc3RyKTsNCiAgICArCXdoaWxlIChlbmQgPiBzdHIpDQogICAgKwkJdW5wdXQoKi0t
ZW5kKTsNCiAgICArDQogICAgKwlhcHBlbmRfc3RyaW5nKHJlcywgc3RybGVuKHJlcykpOw0KICAg
ICsNCiAgICArCWZyZWUocmVzKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB6Y29uZl9zdGFy
dGhlbHAodm9pZCkNCiAgICArew0KICAgICsJbmV3X3N0cmluZygpOw0KICAgICsJbGFzdF90cyA9
IGZpcnN0X3RzID0gMDsNCiAgICArCUJFR0lOKEhFTFApOw0KICAgICt9DQogICAgKw0KICAgICtz
dGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpDQogICAgK3sNCiAgICArCXl5bHZhbC5zdHJp
bmcgPSB0ZXh0Ow0KICAgICsJQkVHSU4oSU5JVElBTCk7DQogICAgK30NCiAgICArDQogICAgKw0K
ICAgICsvKg0KICAgICsgKiBUcnkgdG8gb3BlbiBzcGVjaWZpZWQgZmlsZSB3aXRoIGZvbGxvd2lu
ZyBuYW1lczoNCiAgICArICogLi9uYW1lDQogICAgKyAqICQoc3JjdHJlZSkvbmFtZQ0KICAgICsg
KiBUaGUgbGF0dGVyIGlzIHVzZWQgd2hlbiBzcmN0cmVlIGlzIHNlcGFyYXRlIGZyb20gb2JqdHJl
ZQ0KICAgICsgKiB3aGVuIGNvbXBpbGluZyB0aGUga2VybmVsLg0KICAgICsgKiBSZXR1cm4gTlVM
TCBpZiBmaWxlIGlzIG5vdCBmb3VuZC4NCiAgICArICovDQogICAgK0ZJTEUgKnpjb25mX2ZvcGVu
KGNvbnN0IGNoYXIgKm5hbWUpDQogICAgK3sNCiAgICArCWNoYXIgKmVudiwgZnVsbG5hbWVbUEFU
SF9NQVgrMV07DQogICAgKwlGSUxFICpmOw0KICAgICsNCiAgICArCWYgPSBmb3BlbihuYW1lLCAi
ciIpOw0KICAgICsJaWYgKCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcvJykgew0K
ICAgICsJCWVudiA9IGdldGVudihTUkNUUkVFKTsNCiAgICArCQlpZiAoZW52KSB7DQogICAgKwkJ
CXNucHJpbnRmKGZ1bGxuYW1lLCBzaXplb2YoZnVsbG5hbWUpLA0KICAgICsJCQkJICIlcy8lcyIs
IGVudiwgbmFtZSk7DQogICAgKwkJCWYgPSBmb3BlbihmdWxsbmFtZSwgInIiKTsNCiAgICArCQl9
DQogICAgKwl9DQogICAgKwlyZXR1cm4gZjsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB6Y29u
Zl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKQ0KICAgICt7DQogICAgKwl5eWluID0gemNvbmZf
Zm9wZW4obmFtZSk7DQogICAgKwlpZiAoIXl5aW4pIHsNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwg
ImNhbid0IGZpbmQgZmlsZSAlc1xuIiwgbmFtZSk7DQogICAgKwkJZXhpdCgxKTsNCiAgICArCX0N
CiAgICArDQogICAgKwljdXJyZW50X2J1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpjdXJyZW50X2J1Zikp
Ow0KICAgICsJbWVtc2V0KGN1cnJlbnRfYnVmLCAwLCBzaXplb2YoKmN1cnJlbnRfYnVmKSk7DQog
ICAgKw0KICAgICsJY3VycmVudF9maWxlID0gZmlsZV9sb29rdXAobmFtZSk7DQogICAgKwl5eWxp
bmVubyA9IDE7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3Qg
Y2hhciAqbmFtZSkNCiAgICArew0KICAgICsJc3RydWN0IGZpbGUgKml0ZXI7DQogICAgKwlzdHJ1
Y3QgZmlsZSAqZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOw0KICAgICsJc3RydWN0IGJ1ZmZlciAq
YnVmID0geG1hbGxvYyhzaXplb2YoKmJ1ZikpOw0KICAgICsJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9m
KCpidWYpKTsNCiAgICArDQogICAgKwljdXJyZW50X2J1Zi0+c3RhdGUgPSBZWV9DVVJSRU5UX0JV
RkZFUjsNCiAgICArCXl5aW4gPSB6Y29uZl9mb3BlbihmaWxlLT5uYW1lKTsNCiAgICArCWlmICgh
eXlpbikgew0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGNhbid0IG9wZW4gZmlsZSBc
IiVzXCJcbiIsDQogICAgKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksIGZpbGUt
Pm5hbWUpOw0KICAgICsJCWV4aXQoMSk7DQogICAgKwl9DQogICAgKwl5eV9zd2l0Y2hfdG9fYnVm
ZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlpbiwgWVlfQlVGX1NJWkUpKTsNCiAgICArCWJ1Zi0+cGFy
ZW50ID0gY3VycmVudF9idWY7DQogICAgKwljdXJyZW50X2J1ZiA9IGJ1ZjsNCiAgICArDQogICAg
KwljdXJyZW50X2ZpbGUtPmxpbmVubyA9IHl5bGluZW5vOw0KICAgICsJZmlsZS0+cGFyZW50ID0g
Y3VycmVudF9maWxlOw0KICAgICsNCiAgICArCWZvciAoaXRlciA9IGN1cnJlbnRfZmlsZTsgaXRl
cjsgaXRlciA9IGl0ZXItPnBhcmVudCkgew0KICAgICsJCWlmICghc3RyY21wKGl0ZXItPm5hbWUs
IGZpbGUtPm5hbWUpKSB7DQogICAgKwkJCWZwcmludGYoc3RkZXJyLA0KICAgICsJCQkJIlJlY3Vy
c2l2ZSBpbmNsdXNpb24gZGV0ZWN0ZWQuXG4iDQogICAgKwkJCQkiSW5jbHVzaW9uIHBhdGg6XG4i
DQogICAgKwkJCQkiICBjdXJyZW50IGZpbGUgOiAlc1xuIiwgZmlsZS0+bmFtZSk7DQogICAgKwkJ
CWl0ZXIgPSBmaWxlOw0KICAgICsJCQlkbyB7DQogICAgKwkJCQlpdGVyID0gaXRlci0+cGFyZW50
Ow0KICAgICsJCQkJZnByaW50ZihzdGRlcnIsICIgIGluY2x1ZGVkIGZyb206ICVzOiVkXG4iLA0K
ICAgICsJCQkJCWl0ZXItPm5hbWUsIGl0ZXItPmxpbmVubyAtIDEpOw0KICAgICsJCQl9IHdoaWxl
IChzdHJjbXAoaXRlci0+bmFtZSwgZmlsZS0+bmFtZSkpOw0KICAgICsJCQlleGl0KDEpOw0KICAg
ICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwl5eWxpbmVubyA9IDE7DQogICAgKwljdXJyZW50
X2ZpbGUgPSBmaWxlOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIHpjb25mX25leHRmaWxlcyhj
b25zdCBjaGFyICp3aWxkY2FyZCkNCiAgICArew0KICAgICsJZ2xvYl90IGcgPSB7MH07DQogICAg
KwljaGFyICoqdzsNCiAgICArCWludCBpOw0KICAgICsNCiAgICArCWlmIChnbG9iKHdpbGRjYXJk
LCAwLCBOVUxMLCAmZykgIT0gMCkgew0KICAgICsJCXJldHVybjsNCiAgICArCX0NCiAgICArCWlm
IChnLmdsX3BhdGh2ID09IE5VTEwpIHsNCiAgICArCQlnbG9iZnJlZSgmZyk7DQogICAgKwkJcmV0
dXJuOw0KICAgICsJfQ0KICAgICsNCiAgICArCS8qIHdvcmtpbmcgdGhyb3VnaCBmaWxlcyBiYWNr
d2FyZHMsIHNpbmNlDQogICAgKwkgKiB3ZSdyZSBmaXJzdCBwdXNoaW5nIHRoZW0gb24gYSBzdGFj
aw0KICAgICsJICogYmVmb3JlIGFjdHVhbGx5IGhhbmRsaW5nIHRoZW0uDQogICAgKwkgKi8NCiAg
ICArCWZvciAoaSA9IGcuZ2xfcGF0aGM7IGkgPiAwOyBpLS0pIHsNCiAgICArCQl3ID0gJmcuZ2xf
cGF0aHZbaSAtIDFdOw0KICAgICsJCXpjb25mX25leHRmaWxlKCp3KTsNCiAgICArCX0NCiAgICAr
DQogICAgKwlnbG9iZnJlZSgmZyk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHpj
b25mX2VuZGZpbGUodm9pZCkNCiAgICArew0KICAgICsJc3RydWN0IGJ1ZmZlciAqcGFyZW50Ow0K
ICAgICsNCiAgICArCWN1cnJlbnRfZmlsZSA9IGN1cnJlbnRfZmlsZS0+cGFyZW50Ow0KICAgICsJ
aWYgKGN1cnJlbnRfZmlsZSkNCiAgICArCQl5eWxpbmVubyA9IGN1cnJlbnRfZmlsZS0+bGluZW5v
Ow0KICAgICsNCiAgICArCXBhcmVudCA9IGN1cnJlbnRfYnVmLT5wYXJlbnQ7DQogICAgKwlpZiAo
cGFyZW50KSB7DQogICAgKwkJZmNsb3NlKHl5aW4pOw0KICAgICsJCXl5X2RlbGV0ZV9idWZmZXIo
WVlfQ1VSUkVOVF9CVUZGRVIpOw0KICAgICsJCXl5X3N3aXRjaF90b19idWZmZXIocGFyZW50LT5z
dGF0ZSk7DQogICAgKwl9DQogICAgKwlmcmVlKGN1cnJlbnRfYnVmKTsNCiAgICArCWN1cnJlbnRf
YnVmID0gcGFyZW50Ow0KICAgICt9DQogICAgKw0KICAgICtpbnQgemNvbmZfbGluZW5vKHZvaWQp
DQogICAgK3sNCiAgICArCXJldHVybiBjdXJyZW50X3Bvcy5saW5lbm87DQogICAgK30NCiAgICAr
DQogICAgK2NvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCkNCiAgICArew0KICAgICsJcmV0
dXJuIGN1cnJlbnRfcG9zLmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25lPiI7
DQogICAgK30NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2xpc3QuaCBiL3N1cHBv
cnQva2NvbmZpZy9saXN0LmgNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAw
MDAwMDAuLjQ1Y2IyMzcNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29u
ZmlnL2xpc3QuaA0KICAgIEBAIC0wLDAgKzEsMTMyIEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBHUEwtMi4wICovDQogICAgKyNpZm5kZWYgTElTVF9IDQogICAgKyNkZWZpbmUg
TElTVF9IDQogICAgKw0KICAgICsvKg0KICAgICsgKiBDb3BpZWQgZnJvbSBpbmNsdWRlL2xpbnV4
Ly4uLg0KICAgICsgKi8NCiAgICArDQogICAgKyN1bmRlZiBvZmZzZXRvZg0KICAgICsjZGVmaW5l
IG9mZnNldG9mKFRZUEUsIE1FTUJFUikgKChzaXplX3QpICYoKFRZUEUgKikwKS0+TUVNQkVSKQ0K
ICAgICsNCiAgICArLyoqDQogICAgKyAqIGNvbnRhaW5lcl9vZiAtIGNhc3QgYSBtZW1iZXIgb2Yg
YSBzdHJ1Y3R1cmUgb3V0IHRvIHRoZSBjb250YWluaW5nIHN0cnVjdHVyZQ0KICAgICsgKiBAcHRy
OiAgICAgICAgdGhlIHBvaW50ZXIgdG8gdGhlIG1lbWJlci4NCiAgICArICogQHR5cGU6ICAgICAg
IHRoZSB0eXBlIG9mIHRoZSBjb250YWluZXIgc3RydWN0IHRoaXMgaXMgZW1iZWRkZWQgaW4uDQog
ICAgKyAqIEBtZW1iZXI6ICAgICB0aGUgbmFtZSBvZiB0aGUgbWVtYmVyIHdpdGhpbiB0aGUgc3Ry
dWN0Lg0KICAgICsgKg0KICAgICsgKi8NCiAgICArI2RlZmluZSBjb250YWluZXJfb2YocHRyLCB0
eXBlLCBtZW1iZXIpICh7ICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArCWNvbnN0IHR5cGVv
ZiggKCh0eXBlICopMCktPm1lbWJlciApICpfX21wdHIgPSAocHRyKTsgICAgXA0KICAgICsJKHR5
cGUgKikoIChjaGFyICopX19tcHRyIC0gb2Zmc2V0b2YodHlwZSxtZW1iZXIpICk7fSkNCiAgICAr
DQogICAgKw0KICAgICtzdHJ1Y3QgbGlzdF9oZWFkIHsNCiAgICArCXN0cnVjdCBsaXN0X2hlYWQg
Km5leHQsICpwcmV2Ow0KICAgICt9Ow0KICAgICsNCiAgICArDQogICAgKyNkZWZpbmUgTElTVF9I
RUFEX0lOSVQobmFtZSkgeyAmKG5hbWUpLCAmKG5hbWUpIH0NCiAgICArDQogICAgKyNkZWZpbmUg
TElTVF9IRUFEKG5hbWUpIFwNCiAgICArCXN0cnVjdCBsaXN0X2hlYWQgbmFtZSA9IExJU1RfSEVB
RF9JTklUKG5hbWUpDQogICAgKw0KICAgICsvKioNCiAgICArICogbGlzdF9lbnRyeSAtIGdldCB0
aGUgc3RydWN0IGZvciB0aGlzIGVudHJ5DQogICAgKyAqIEBwdHI6CXRoZSAmc3RydWN0IGxpc3Rf
aGVhZCBwb2ludGVyLg0KICAgICsgKiBAdHlwZToJdGhlIHR5cGUgb2YgdGhlIHN0cnVjdCB0aGlz
IGlzIGVtYmVkZGVkIGluLg0KICAgICsgKiBAbWVtYmVyOgl0aGUgbmFtZSBvZiB0aGUgbGlzdF9o
ZWFkIHdpdGhpbiB0aGUgc3RydWN0Lg0KICAgICsgKi8NCiAgICArI2RlZmluZSBsaXN0X2VudHJ5
KHB0ciwgdHlwZSwgbWVtYmVyKSBcDQogICAgKwljb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1i
ZXIpDQogICAgKw0KICAgICsvKioNCiAgICArICogbGlzdF9mb3JfZWFjaF9lbnRyeQktCWl0ZXJh
dGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUNCiAgICArICogQHBvczoJdGhlIHR5cGUgKiB0byB1
c2UgYXMgYSBsb29wIGN1cnNvci4NCiAgICArICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxp
c3QuDQogICAgKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X2hlYWQgd2l0aGluIHRo
ZSBzdHJ1Y3QuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnkocG9z
LCBoZWFkLCBtZW1iZXIpCQkJCVwNCiAgICArCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCkt
Pm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXA0KICAgICsJICAgICAmcG9zLT5tZW1iZXIg
IT0gKGhlYWQpOyAJXA0KICAgICsJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5l
eHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkNCiAgICArDQogICAgKy8qKg0KICAgICsgKiBsaXN0
X2Zvcl9lYWNoX2VudHJ5X3NhZmUgLSBpdGVyYXRlIG92ZXIgbGlzdCBvZiBnaXZlbiB0eXBlIHNh
ZmUgYWdhaW5zdCByZW1vdmFsIG9mIGxpc3QgZW50cnkNCiAgICArICogQHBvczoJdGhlIHR5cGUg
KiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4NCiAgICArICogQG46CQlhbm90aGVyIHR5cGUgKiB0
byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UNCiAgICArICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5
b3VyIGxpc3QuDQogICAgKyAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBsaXN0X2hlYWQgd2l0
aGluIHRoZSBzdHJ1Y3QuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50
cnlfc2FmZShwb3MsIG4sIGhlYWQsIG1lbWJlcikJCQlcDQogICAgKwlmb3IgKHBvcyA9IGxpc3Rf
ZW50cnkoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlciksCVwNCiAgICArCQluID0g
bGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwNCiAg
ICArCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJCQkJCVwNCiAgICArCSAgICAgcG9zID0g
biwgbiA9IGxpc3RfZW50cnkobi0+bWVtYmVyLm5leHQsIHR5cGVvZigqbiksIG1lbWJlcikpDQog
ICAgKw0KICAgICsvKioNCiAgICArICogbGlzdF9lbXB0eSAtIHRlc3RzIHdoZXRoZXIgYSBsaXN0
IGlzIGVtcHR5DQogICAgKyAqIEBoZWFkOiB0aGUgbGlzdCB0byB0ZXN0Lg0KICAgICsgKi8NCiAg
ICArc3RhdGljIGlubGluZSBpbnQgbGlzdF9lbXB0eShjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpo
ZWFkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gaGVhZC0+bmV4dCA9PSBoZWFkOw0KICAgICt9DQog
ICAgKw0KICAgICsvKg0KICAgICsgKiBJbnNlcnQgYSBuZXcgZW50cnkgYmV0d2VlbiB0d28ga25v
d24gY29uc2VjdXRpdmUgZW50cmllcy4NCiAgICArICoNCiAgICArICogVGhpcyBpcyBvbmx5IGZv
ciBpbnRlcm5hbCBsaXN0IG1hbmlwdWxhdGlvbiB3aGVyZSB3ZSBrbm93DQogICAgKyAqIHRoZSBw
cmV2L25leHQgZW50cmllcyBhbHJlYWR5IQ0KICAgICsgKi8NCiAgICArc3RhdGljIGlubGluZSB2
b2lkIF9fbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqX25ldywNCiAgICArCQkJICAgICAgc3Ry
dWN0IGxpc3RfaGVhZCAqcHJldiwNCiAgICArCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbmV4
dCkNCiAgICArew0KICAgICsJbmV4dC0+cHJldiA9IF9uZXc7DQogICAgKwlfbmV3LT5uZXh0ID0g
bmV4dDsNCiAgICArCV9uZXctPnByZXYgPSBwcmV2Ow0KICAgICsJcHJldi0+bmV4dCA9IF9uZXc7
DQogICAgK30NCiAgICArDQogICAgKy8qKg0KICAgICsgKiBsaXN0X2FkZF90YWlsIC0gYWRkIGEg
bmV3IGVudHJ5DQogICAgKyAqIEBuZXc6IG5ldyBlbnRyeSB0byBiZSBhZGRlZA0KICAgICsgKiBA
aGVhZDogbGlzdCBoZWFkIHRvIGFkZCBpdCBiZWZvcmUNCiAgICArICoNCiAgICArICogSW5zZXJ0
IGEgbmV3IGVudHJ5IGJlZm9yZSB0aGUgc3BlY2lmaWVkIGhlYWQuDQogICAgKyAqIFRoaXMgaXMg
dXNlZnVsIGZvciBpbXBsZW1lbnRpbmcgcXVldWVzLg0KICAgICsgKi8NCiAgICArc3RhdGljIGlu
bGluZSB2b2lkIGxpc3RfYWRkX3RhaWwoc3RydWN0IGxpc3RfaGVhZCAqX25ldywgc3RydWN0IGxp
c3RfaGVhZCAqaGVhZCkNCiAgICArew0KICAgICsJX19saXN0X2FkZChfbmV3LCBoZWFkLT5wcmV2
LCBoZWFkKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogRGVsZXRlIGEgbGlzdCBl
bnRyeSBieSBtYWtpbmcgdGhlIHByZXYvbmV4dCBlbnRyaWVzDQogICAgKyAqIHBvaW50IHRvIGVh
Y2ggb3RoZXIuDQogICAgKyAqDQogICAgKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlz
dCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdw0KICAgICsgKiB0aGUgcHJldi9uZXh0IGVudHJp
ZXMgYWxyZWFkeSENCiAgICArICovDQogICAgK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2xpc3RfZGVs
KHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpDQogICAgK3sN
CiAgICArCW5leHQtPnByZXYgPSBwcmV2Ow0KICAgICsJcHJldi0+bmV4dCA9IG5leHQ7DQogICAg
K30NCiAgICArDQogICAgKyNkZWZpbmUgTElTVF9QT0lTT04xICAoKHZvaWQgKikgMHgwMDEwMDEw
MCkNCiAgICArI2RlZmluZSBMSVNUX1BPSVNPTjIgICgodm9pZCAqKSAweDAwMjAwMjAwKQ0KICAg
ICsvKioNCiAgICArICogbGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdC4NCiAgICAr
ICogQGVudHJ5OiB0aGUgZWxlbWVudCB0byBkZWxldGUgZnJvbSB0aGUgbGlzdC4NCiAgICArICog
Tm90ZTogbGlzdF9lbXB0eSgpIG9uIGVudHJ5IGRvZXMgbm90IHJldHVybiB0cnVlIGFmdGVyIHRo
aXMsIHRoZSBlbnRyeSBpcw0KICAgICsgKiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuDQogICAgKyAq
Lw0KICAgICtzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50
cnkpDQogICAgK3sNCiAgICArCV9fbGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsN
CiAgICArCWVudHJ5LT5uZXh0ID0gKHN0cnVjdCBsaXN0X2hlYWQqKUxJU1RfUE9JU09OMTsNCiAg
ICArCWVudHJ5LT5wcmV2ID0gKHN0cnVjdCBsaXN0X2hlYWQqKUxJU1RfUE9JU09OMjsNCiAgICAr
fQ0KICAgICsjZW5kaWYNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL2xrYy5oIGIv
c3VwcG9ydC9rY29uZmlnL2xrYy5oDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMDAwMDAwLi42OWQyYzc3DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQv
a2NvbmZpZy9sa2MuaA0KICAgIEBAIC0wLDAgKzEsMTYwIEBADQogICAgKy8qIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykg
MjAwMiBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQogICAg
Kw0KICAgICsjaWZuZGVmIExLQ19IDQogICAgKyNkZWZpbmUgTEtDX0gNCiAgICArDQogICAgKyNp
bmNsdWRlICJleHByLmgiDQogICAgKw0KICAgICsjaWZkZWYgX19jcGx1c3BsdXMNCiAgICArZXh0
ZXJuICJDIiB7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2luY2x1ZGUgImxrY19wcm90by5o
Ig0KICAgICsNCiAgICArI2RlZmluZSBTUkNUUkVFICJzcmN0cmVlIg0KICAgICsNCiAgICArI2lm
bmRlZiBQQUNLQUdFDQogICAgKyNkZWZpbmUgUEFDS0FHRSAibGludXgiDQogICAgKyNlbmRpZg0K
ICAgICsNCiAgICArI2lmbmRlZiBDT05GSUdfDQogICAgKyNkZWZpbmUgQ09ORklHXyAiQ09ORklH
XyINCiAgICArI2VuZGlmDQogICAgK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqQ09ORklHX3By
ZWZpeCh2b2lkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gZ2V0ZW52KCAiQ09ORklHXyIgKSA/OiBD
T05GSUdfOw0KICAgICt9DQogICAgKyN1bmRlZiBDT05GSUdfDQogICAgKyNkZWZpbmUgQ09ORklH
XyBDT05GSUdfcHJlZml4KCkNCiAgICArDQogICAgK2VudW0gY29uZl9kZWZfbW9kZSB7DQogICAg
KwlkZWZfZGVmYXVsdCwNCiAgICArCWRlZl95ZXMsDQogICAgKwlkZWZfbW9kLA0KICAgICsJZGVm
X25vLA0KICAgICsJZGVmX3JhbmRvbQ0KICAgICt9Ow0KICAgICsNCiAgICArZXh0ZXJuIGludCB5
eWxpbmVubzsNCiAgICArdm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KTsNCiAgICArdm9pZCB6Y29u
Zl9zdGFydGhlbHAodm9pZCk7DQogICAgK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5h
bWUpOw0KICAgICt2b2lkIHpjb25mX2luaXRzY2FuKGNvbnN0IGNoYXIgKm5hbWUpOw0KICAgICt2
b2lkIHpjb25mX25leHRmaWxlKGNvbnN0IGNoYXIgKm5hbWUpOw0KICAgICt2b2lkIHpjb25mX25l
eHRmaWxlcyhjb25zdCBjaGFyICpuYW1lKTsNCiAgICAraW50IHpjb25mX2xpbmVubyh2b2lkKTsN
CiAgICArY29uc3QgY2hhciAqemNvbmZfY3VybmFtZSh2b2lkKTsNCiAgICArDQogICAgKy8qIGNv
bmZkYXRhLmMgKi8NCiAgICArY29uc3QgY2hhciAqY29uZl9nZXRfY29uZmlnbmFtZSh2b2lkKTsN
CiAgICArY2hhciAqY29uZl9nZXRfZGVmYXVsdF9jb25mbmFtZSh2b2lkKTsNCiAgICArdm9pZCBz
eW1fc2V0X2NoYW5nZV9jb3VudChpbnQgY291bnQpOw0KICAgICt2b2lkIHN5bV9hZGRfY2hhbmdl
X2NvdW50KGludCBjb3VudCk7DQogICAgK2Jvb2wgY29uZl9zZXRfYWxsX25ld19zeW1ib2xzKGVu
dW0gY29uZl9kZWZfbW9kZSBtb2RlKTsNCiAgICArdm9pZCBzZXRfYWxsX2Nob2ljZV92YWx1ZXMo
c3RydWN0IHN5bWJvbCAqY3N5bSk7DQogICAgKw0KICAgICsvKiBjb25mZGF0YS5jIGFuZCBleHBy
LmMgKi8NCiAgICArc3RhdGljIGlubGluZSB2b2lkIHhmd3JpdGUoY29uc3Qgdm9pZCAqc3RyLCBz
aXplX3QgbGVuLCBzaXplX3QgY291bnQsIEZJTEUgKm91dCkNCiAgICArew0KICAgICsJYXNzZXJ0
KGxlbiAhPSAwKTsNCiAgICArDQogICAgKwlpZiAoZndyaXRlKHN0ciwgbGVuLCBjb3VudCwgb3V0
KSAhPSBjb3VudCkNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yIGluIHdyaXRpbmcgb3Ig
ZW5kIG9mIGZpbGUuXG4iKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogbWVudS5jICovDQogICAg
K3ZvaWQgX21lbnVfaW5pdCh2b2lkKTsNCiAgICArdm9pZCBtZW51X3dhcm4oc3RydWN0IG1lbnUg
Km1lbnUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCiAgICArc3RydWN0IG1lbnUgKm1lbnVfYWRk
X21lbnUodm9pZCk7DQogICAgK3ZvaWQgbWVudV9lbmRfbWVudSh2b2lkKTsNCiAgICArdm9pZCBt
ZW51X2FkZF9lbnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgICt2b2lkIG1lbnVfYWRkX2Rl
cChzdHJ1Y3QgZXhwciAqZGVwKTsNCiAgICArdm9pZCBtZW51X2FkZF92aXNpYmlsaXR5KHN0cnVj
dCBleHByICpkZXApOw0KICAgICtzdHJ1Y3QgcHJvcGVydHkgKm1lbnVfYWRkX3Byb21wdChlbnVt
IHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHByICpkZXApOw0KICAgICt2
b2lkIG1lbnVfYWRkX2V4cHIoZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IGV4cHIgKmV4cHIs
IHN0cnVjdCBleHByICpkZXApOw0KICAgICt2b2lkIG1lbnVfYWRkX3N5bWJvbChlbnVtIHByb3Bf
dHlwZSB0eXBlLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sIHN0cnVjdCBleHByICpkZXApOw0KICAgICt2
b2lkIG1lbnVfYWRkX29wdGlvbl9tb2R1bGVzKHZvaWQpOw0KICAgICt2b2lkIG1lbnVfYWRkX29w
dGlvbl9kZWZjb25maWdfbGlzdCh2b2lkKTsNCiAgICArdm9pZCBtZW51X2FkZF9vcHRpb25fYWxs
bm9jb25maWdfeSh2b2lkKTsNCiAgICArdm9pZCBtZW51X2ZpbmFsaXplKHN0cnVjdCBtZW51ICpw
YXJlbnQpOw0KICAgICt2b2lkIG1lbnVfc2V0X3R5cGUoaW50IHR5cGUpOw0KICAgICsNCiAgICAr
LyogdXRpbC5jICovDQogICAgK3N0cnVjdCBmaWxlICpmaWxlX2xvb2t1cChjb25zdCBjaGFyICpu
YW1lKTsNCiAgICArdm9pZCAqeG1hbGxvYyhzaXplX3Qgc2l6ZSk7DQogICAgK3ZvaWQgKnhjYWxs
b2Moc2l6ZV90IG5tZW1iLCBzaXplX3Qgc2l6ZSk7DQogICAgK3ZvaWQgKnhyZWFsbG9jKHZvaWQg
KnAsIHNpemVfdCBzaXplKTsNCiAgICArY2hhciAqeHN0cmR1cChjb25zdCBjaGFyICpzKTsNCiAg
ICArY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pOw0KICAgICsNCiAgICAr
LyogbGV4ZXIubCAqLw0KICAgICtpbnQgeXlsZXgodm9pZCk7DQogICAgKw0KICAgICtzdHJ1Y3Qg
Z3N0ciB7DQogICAgKwlzaXplX3QgbGVuOw0KICAgICsJY2hhciAgKnM7DQogICAgKwkvKg0KICAg
ICsJKiB3aGVuIG1heF93aWR0aCBpcyBub3QgemVybyBsb25nIGxpbmVzIGluIHN0cmluZyBzIChp
ZiBhbnkpIGdldA0KICAgICsJKiB3cmFwcGVkIG5vdCB0byBleGNlZWQgdGhlIG1heF93aWR0aCB2
YWx1ZQ0KICAgICsJKi8NCiAgICArCWludCBtYXhfd2lkdGg7DQogICAgK307DQogICAgK3N0cnVj
dCBnc3RyIHN0cl9uZXcodm9pZCk7DQogICAgK3ZvaWQgc3RyX2ZyZWUoc3RydWN0IGdzdHIgKmdz
KTsNCiAgICArdm9pZCBzdHJfYXBwZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqcyk7
DQogICAgK3ZvaWQgc3RyX3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwg
Li4uKTsNCiAgICArY29uc3QgY2hhciAqc3RyX2dldChzdHJ1Y3QgZ3N0ciAqZ3MpOw0KICAgICsN
CiAgICArLyogc3ltYm9sLmMgKi8NCiAgICArdm9pZCBzeW1fY2xlYXJfYWxsX3ZhbGlkKHZvaWQp
Ow0KICAgICtzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hvaWNlX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAq
c3ltKTsNCiAgICArc3RydWN0IHByb3BlcnR5ICpzeW1fZ2V0X3JhbmdlX3Byb3Aoc3RydWN0IHN5
bWJvbCAqc3ltKTsNCiAgICArY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfZGVmYXVsdChzdHJ1
Y3Qgc3ltYm9sICpzeW0pOw0KICAgICtzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hlY2tfZGVwcyhzdHJ1
Y3Qgc3ltYm9sICpzeW0pOw0KICAgICtzdHJ1Y3QgcHJvcGVydHkgKnByb3BfYWxsb2MoZW51bSBw
cm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltKTsNCiAgICArc3RydWN0IHN5bWJvbCAq
cHJvcF9nZXRfc3ltYm9sKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCk7DQogICAgKw0KICAgICtzdGF0
aWMgaW5saW5lIHRyaXN0YXRlIHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAq
c3ltKQ0KICAgICt7DQogICAgKwlyZXR1cm4gc3ltLT5jdXJyLnRyaTsNCiAgICArfQ0KICAgICsN
CiAgICArDQogICAgK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN5bWJvbCAqc3ltX2dldF9jaG9pY2Vf
dmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlyZXR1cm4gKHN0cnVjdCBz
eW1ib2wgKilzeW0tPmN1cnIudmFsOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW5saW5l
IGJvb2wgc3ltX3NldF9jaG9pY2VfdmFsdWUoc3RydWN0IHN5bWJvbCAqY2gsIHN0cnVjdCBzeW1i
b2wgKmNodmFsKQ0KICAgICt7DQogICAgKwlyZXR1cm4gc3ltX3NldF90cmlzdGF0ZV92YWx1ZShj
aHZhbCwgeWVzKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGlubGluZSBib29sIHN5bV9p
c19jaG9pY2Uoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlyZXR1cm4gc3ltLT5m
bGFncyAmIFNZTUJPTF9DSE9JQ0UgPyB0cnVlIDogZmFsc2U7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyBpbmxpbmUgYm9vbCBzeW1faXNfY2hvaWNlX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5
bSkNCiAgICArew0KICAgICsJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hPSUNFVkFMID8g
dHJ1ZSA6IGZhbHNlOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW5saW5lIGJvb2wgc3lt
X2lzX29wdGlvbmFsKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJcmV0dXJuIHN5
bS0+ZmxhZ3MgJiBTWU1CT0xfT1BUSU9OQUwgPyB0cnVlIDogZmFsc2U7DQogICAgK30NCiAgICAr
DQogICAgK3N0YXRpYyBpbmxpbmUgYm9vbCBzeW1faGFzX3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5
bSkNCiAgICArew0KICAgICsJcmV0dXJuIHN5bS0+ZmxhZ3MgJiBTWU1CT0xfREVGX1VTRVIgPyB0
cnVlIDogZmFsc2U7DQogICAgK30NCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KICAg
ICt9DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2VuZGlmIC8qIExLQ19IICovDQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9sa2NfcHJvdG8uaCBiL3N1cHBvcnQva2NvbmZpZy9s
a2NfcHJvdG8uaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
ODZjMjY3NQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvbGtj
X3Byb3RvLmgNCiAgICBAQCAtMCwwICsxLDY2IEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wICovDQogICAgKyNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICArDQogICAg
Ky8qIGNvbmZkYXRhLmMgKi8NCiAgICArdm9pZCBjb25mX3BhcnNlKGNvbnN0IGNoYXIgKm5hbWUp
Ow0KICAgICtpbnQgY29uZl9yZWFkKGNvbnN0IGNoYXIgKm5hbWUpOw0KICAgICtpbnQgY29uZl9y
ZWFkX3NpbXBsZShjb25zdCBjaGFyICpuYW1lLCBpbnQpOw0KICAgICtpbnQgY29uZl93cml0ZV9k
ZWZjb25maWcoY29uc3QgY2hhciAqbmFtZSk7DQogICAgK2ludCBjb25mX3dyaXRlKGNvbnN0IGNo
YXIgKm5hbWUpOw0KICAgICtpbnQgY29uZl93cml0ZV9hdXRvY29uZihpbnQgb3ZlcndyaXRlKTsN
CiAgICArYm9vbCBjb25mX2dldF9jaGFuZ2VkKHZvaWQpOw0KICAgICt2b2lkIGNvbmZfc2V0X2No
YW5nZWRfY2FsbGJhY2sodm9pZCAoKmZuKSh2b2lkKSk7DQogICAgK3ZvaWQgY29uZl9zZXRfbWVz
c2FnZV9jYWxsYmFjayh2b2lkICgqZm4pKGNvbnN0IGNoYXIgKnMpKTsNCiAgICArDQogICAgKy8q
IG1lbnUuYyAqLw0KICAgICtleHRlcm4gc3RydWN0IG1lbnUgcm9vdG1lbnU7DQogICAgKw0KICAg
ICtib29sIG1lbnVfaXNfZW1wdHkoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtib29sIG1lbnVf
aXNfdmlzaWJsZShzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK2Jvb2wgbWVudV9oYXNfcHJvbXB0
KHN0cnVjdCBtZW51ICptZW51KTsNCiAgICArY29uc3QgY2hhciAqIG1lbnVfZ2V0X3Byb21wdChz
dHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK3N0cnVjdCBtZW51ICogbWVudV9nZXRfcm9vdF9tZW51
KHN0cnVjdCBtZW51ICptZW51KTsNCiAgICArc3RydWN0IG1lbnUgKiBtZW51X2dldF9wYXJlbnRf
bWVudShzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK2Jvb2wgbWVudV9oYXNfaGVscChzdHJ1Y3Qg
bWVudSAqbWVudSk7DQogICAgK2NvbnN0IGNoYXIgKiBtZW51X2dldF9oZWxwKHN0cnVjdCBtZW51
ICptZW51KTsNCiAgICArc3RydWN0IGdzdHIgZ2V0X3JlbGF0aW9uc19zdHIoc3RydWN0IHN5bWJv
bCAqKnN5bV9hcnIsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpOw0KICAgICt2b2lkIG1lbnVfZ2V0
X2V4dF9oZWxwKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgZ3N0ciAqaGVscCk7DQogICAgKw0K
ICAgICsvKiBzeW1ib2wuYyAqLw0KICAgICtleHRlcm4gc3RydWN0IHN5bWJvbCAqIHN5bWJvbF9o
YXNoW1NZTUJPTF9IQVNIU0laRV07DQogICAgKw0KICAgICtzdHJ1Y3Qgc3ltYm9sICogc3ltX2xv
b2t1cChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOw0KICAgICtzdHJ1Y3Qgc3ltYm9sICog
c3ltX2ZpbmQoY29uc3QgY2hhciAqbmFtZSk7DQogICAgK2NvbnN0IGNoYXIgKiBzeW1fZXNjYXBl
X3N0cmluZ192YWx1ZShjb25zdCBjaGFyICppbik7DQogICAgK3N0cnVjdCBzeW1ib2wgKiogc3lt
X3JlX3NlYXJjaChjb25zdCBjaGFyICpwYXR0ZXJuKTsNCiAgICArY29uc3QgY2hhciAqIHN5bV90
eXBlX25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlKTsNCiAgICArdm9pZCBzeW1fY2FsY192YWx1
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgICtlbnVtIHN5bWJvbF90eXBlIHN5bV9nZXRfdHlw
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgICtib29sIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFu
Z2Uoc3RydWN0IHN5bWJvbCAqc3ltLHRyaXN0YXRlIHRyaSk7DQogICAgK2Jvb2wgc3ltX3NldF90
cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sdHJpc3RhdGUgdHJpKTsNCiAgICArdHJp
c3RhdGUgc3ltX3RvZ2dsZV90cmlzdGF0ZV92YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAg
ICtib29sIHN5bV9zdHJpbmdfdmFsaWQoc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBjaGFyICpu
ZXd2YWwpOw0KICAgICtib29sIHN5bV9zdHJpbmdfd2l0aGluX3JhbmdlKHN0cnVjdCBzeW1ib2wg
KnN5bSwgY29uc3QgY2hhciAqc3RyKTsNCiAgICArYm9vbCBzeW1fc2V0X3N0cmluZ192YWx1ZShz
dHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKm5ld3ZhbCk7DQogICAgK2Jvb2wgc3ltX2lz
X2NoYW5nYWJsZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgICtzdHJ1Y3QgcHJvcGVydHkgKiBz
eW1fZ2V0X2Nob2ljZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSk7DQogICAgK2NvbnN0IGNoYXIg
KiBzeW1fZ2V0X3N0cmluZ192YWx1ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgICsNCiAgICAr
Y29uc3QgY2hhciAqIHByb3BfZ2V0X3R5cGVfbmFtZShlbnVtIHByb3BfdHlwZSB0eXBlKTsNCiAg
ICArDQogICAgKy8qIHByZXByb2Nlc3MuYyAqLw0KICAgICtlbnVtIHZhcmlhYmxlX2ZsYXZvciB7
DQogICAgKwlWQVJfU0lNUExFLA0KICAgICsJVkFSX1JFQ1VSU0lWRSwNCiAgICArCVZBUl9BUFBF
TkQsDQogICAgK307DQogICAgK3ZvaWQgZW52X3dyaXRlX2RlcChGSUxFICpmLCBjb25zdCBjaGFy
ICphdXRvX2NvbmZfbmFtZSk7DQogICAgK3ZvaWQgdmFyaWFibGVfYWRkKGNvbnN0IGNoYXIgKm5h
bWUsIGNvbnN0IGNoYXIgKnZhbHVlLA0KICAgICsJCSAgZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxh
dm9yKTsNCiAgICArdm9pZCB2YXJpYWJsZV9hbGxfZGVsKHZvaWQpOw0KICAgICtjaGFyICpleHBh
bmRfc3RyaW5nKGNvbnN0IGNoYXIgKmluKTsNCiAgICArY2hhciAqZXhwYW5kX2RvbGxhcihjb25z
dCBjaGFyICoqc3RyKTsNCiAgICArY2hhciAqZXhwYW5kX29uZV90b2tlbihjb25zdCBjaGFyICoq
c3RyKTsNCiAgICArDQogICAgKy8qIGV4cHIuYyAqLw0KICAgICt2b2lkIGV4cHJfcHJpbnQoc3Ry
dWN0IGV4cHIgKmUsIHZvaWQgKCpmbikodm9pZCAqLCBzdHJ1Y3Qgc3ltYm9sICosIGNvbnN0IGNo
YXIgKiksIHZvaWQgKmRhdGEsIGludCBwcmV2dG9rZW4pOw0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HIGIvc3VwcG9ydC9rY29uZmlnL2x4
ZGlhbG9nL0JJRy5GQVQuV0FSTklORw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uN2NiNWE3ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0
L2tjb25maWcvbHhkaWFsb2cvQklHLkZBVC5XQVJOSU5HDQogICAgQEAgLTAsMCArMSw0IEBADQog
ICAgK1RoaXMgaXMgTk9UIHRoZSBvZmZpY2lhbCB2ZXJzaW9uIG9mIGRpYWxvZy4gIFRoaXMgdmVy
c2lvbiBoYXMgYmVlbg0KICAgICtzaWduaWZpY2FudGx5IG1vZGlmaWVkIGZyb20gdGhlIG9yaWdp
bmFsLiAgSXQgaXMgZm9yIHVzZSBieSB0aGUgTGludXgNCiAgICAra2VybmVsIGNvbmZpZ3VyYXRp
b24gc2NyaXB0LiAgUGxlYXNlIGRvIG5vdCBib3RoZXIgU2F2aW8gTGFtIHdpdGgNCiAgICArcXVl
c3Rpb25zIGFib3V0IHRoaXMgcHJvZ3JhbS4NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnL2x4ZGlhbG9nL2NoZWNrbGlzdC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2NoZWNr
bGlzdC5jDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5mZDE2
MWNmDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9seGRpYWxv
Zy9jaGVja2xpc3QuYw0KICAgIEBAIC0wLDAgKzEsMzE5IEBADQogICAgKy8vIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBHUEwtMi4wKw0KICAgICsvKg0KICAgICsgKiAgY2hlY2tsaXN0LmMgLS0g
aW1wbGVtZW50cyB0aGUgY2hlY2tsaXN0IGJveA0KICAgICsgKg0KICAgICsgKiAgT1JJR0lOQUwg
QVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQ0KICAgICsgKiAgICAgU3R1YXJ0
IEhlcmJlcnQgLSBTLkhlcmJlcnRAc2hlZmZpZWxkLmFjLnVrOiByYWRpb2xpc3QgZXh0ZW5zaW9u
DQogICAgKyAqICAgICBBbGVzc2FuZHJvIFJ1YmluaSAtIHJ1YmluaUBpcHZ2aXMudW5pcHYuaXQ6
IG1lcmdlZCB0aGUgdHdvDQogICAgKyAqICBNT0RJRklFRCBGT1IgTElOVVggS0VSTkVMIENPTkZJ
RyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pDQogICAgKyAqLw0KICAgICsN
CiAgICArI2luY2x1ZGUgImRpYWxvZy5oIg0KICAgICsNCiAgICArc3RhdGljIGludCBsaXN0X3dp
ZHRoLCBjaGVja194LCBpdGVtX3g7DQogICAgKw0KICAgICsvKg0KICAgICsgKiBQcmludCBsaXN0
IGl0ZW0NCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIHByaW50X2l0ZW0oV0lORE9XICogd2lu
LCBpbnQgY2hvaWNlLCBpbnQgc2VsZWN0ZWQpDQogICAgK3sNCiAgICArCWludCBpOw0KICAgICsJ
Y2hhciAqbGlzdF9pdGVtID0gbWFsbG9jKGxpc3Rfd2lkdGggKyAxKTsNCiAgICArDQogICAgKwlz
dHJuY3B5KGxpc3RfaXRlbSwgaXRlbV9zdHIoKSwgbGlzdF93aWR0aCAtIGl0ZW1feCk7DQogICAg
KwlsaXN0X2l0ZW1bbGlzdF93aWR0aCAtIGl0ZW1feF0gPSAnXDAnOw0KICAgICsNCiAgICArCS8q
IENsZWFyICdyZXNpZHVlJyBvZiBsYXN0IGl0ZW0gKi8NCiAgICArCXdhdHRyc2V0KHdpbiwgZGxn
Lm1lbnVib3guYXRyKTsNCiAgICArCXdtb3ZlKHdpbiwgY2hvaWNlLCAwKTsNCiAgICArCWZvciAo
aSA9IDA7IGkgPCBsaXN0X3dpZHRoOyBpKyspDQogICAgKwkJd2FkZGNoKHdpbiwgJyAnKTsNCiAg
ICArDQogICAgKwl3bW92ZSh3aW4sIGNob2ljZSwgY2hlY2tfeCk7DQogICAgKwl3YXR0cnNldCh3
aW4sIHNlbGVjdGVkID8gZGxnLmNoZWNrX3NlbGVjdGVkLmF0cg0KICAgICsJCSA6IGRsZy5jaGVj
ay5hdHIpOw0KICAgICsJaWYgKCFpdGVtX2lzX3RhZygnOicpKQ0KICAgICsJCXdwcmludHcod2lu
LCAiKCVjKSIsIGl0ZW1faXNfdGFnKCdYJykgPyAnWCcgOiAnICcpOw0KICAgICsNCiAgICArCXdh
dHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX3NlbGVjdGVkLmF0ciA6IGRsZy50YWcuYXRy
KTsNCiAgICArCW12d2FkZGNoKHdpbiwgY2hvaWNlLCBpdGVtX3gsIGxpc3RfaXRlbVswXSk7DQog
ICAgKwl3YXR0cnNldCh3aW4sIHNlbGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDogZGxn
Lml0ZW0uYXRyKTsNCiAgICArCXdhZGRzdHIod2luLCBsaXN0X2l0ZW0gKyAxKTsNCiAgICArCWlm
IChzZWxlY3RlZCkgew0KICAgICsJCXdtb3ZlKHdpbiwgY2hvaWNlLCBjaGVja194ICsgMSk7DQog
ICAgKwkJd3JlZnJlc2god2luKTsNCiAgICArCX0NCiAgICArCWZyZWUobGlzdF9pdGVtKTsNCiAg
ICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogUHJpbnQgdGhlIHNjcm9sbCBpbmRpY2F0b3Jz
Lg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgcHJpbnRfYXJyb3dzKFdJTkRPVyAqIHdpbiwg
aW50IGNob2ljZSwgaW50IGl0ZW1fbm8sIGludCBzY3JvbGwsDQogICAgKwkgICAgIGludCB5LCBp
bnQgeCwgaW50IGhlaWdodCkNCiAgICArew0KICAgICsJd21vdmUod2luLCB5LCB4KTsNCiAgICAr
DQogICAgKwlpZiAoc2Nyb2xsID4gMCkgew0KICAgICsJCXdhdHRyc2V0KHdpbiwgZGxnLnVhcnJv
dy5hdHIpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19VQVJST1cpOw0KICAgICsJCXdhZGRzdHIo
d2luLCAiKC0pIik7DQogICAgKwl9IGVsc2Ugew0KICAgICsJCXdhdHRyc2V0KHdpbiwgZGxnLm1l
bnVib3guYXRyKTsNCiAgICArCQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgICsJCXdhZGRj
aCh3aW4sIEFDU19ITElORSk7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICAr
CQl3YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXkgPSB5ICsg
aGVpZ2h0ICsgMTsNCiAgICArCXdtb3ZlKHdpbiwgeSwgeCk7DQogICAgKw0KICAgICsJaWYgKCho
ZWlnaHQgPCBpdGVtX25vKSAmJiAoc2Nyb2xsICsgY2hvaWNlIDwgaXRlbV9ubyAtIDEpKSB7DQog
ICAgKwkJd2F0dHJzZXQod2luLCBkbGcuZGFycm93LmF0cik7DQogICAgKwkJd2FkZGNoKHdpbiwg
QUNTX0RBUlJPVyk7DQogICAgKwkJd2FkZHN0cih3aW4sICIoKykiKTsNCiAgICArCX0gZWxzZSB7
DQogICAgKwkJd2F0dHJzZXQod2luLCBkbGcubWVudWJveF9ib3JkZXIuYXRyKTsNCiAgICArCQl3
YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQog
ICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCQl3YWRkY2god2luLCBBQ1NfSExJ
TkUpOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiAgRGlzcGxheSB0
aGUgdGVybWluYXRpb24gYnV0dG9ucw0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgcHJpbnRf
YnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwgaW50IHNlbGVj
dGVkKQ0KICAgICt7DQogICAgKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOw0KICAgICsJaW50IHkg
PSBoZWlnaHQgLSAyOw0KICAgICsNCiAgICArCXByaW50X2J1dHRvbihkaWFsb2csICJTZWxlY3Qi
LCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsNCiAgICArCXByaW50X2J1dHRvbihkaWFsb2csICIgSGVs
cCAiLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOw0KICAgICsNCiAgICArCXdtb3ZlKGRpYWxv
ZywgeSwgeCArIDEgKyAxNCAqIHNlbGVjdGVkKTsNCiAgICArCXdyZWZyZXNoKGRpYWxvZyk7DQog
ICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIERpc3BsYXkgYSBkaWFsb2cgYm94IHdpdGgg
YSBsaXN0IG9mIG9wdGlvbnMgdGhhdCBjYW4gYmUgdHVybmVkIG9uIG9yIG9mZg0KICAgICsgKiBp
biB0aGUgc3R5bGUgb2YgcmFkaW9saXN0IChvbmx5IG9uZSBvcHRpb24gdHVybmVkIG9uIGF0IGEg
dGltZSkuDQogICAgKyAqLw0KICAgICtpbnQgZGlhbG9nX2NoZWNrbGlzdChjb25zdCBjaGFyICp0
aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LA0KICAgICsJCSAgICAgaW50IHdp
ZHRoLCBpbnQgbGlzdF9oZWlnaHQpDQogICAgK3sNCiAgICArCWludCBpLCB4LCB5LCBib3hfeCwg
Ym94X3k7DQogICAgKwlpbnQga2V5ID0gMCwgYnV0dG9uID0gMCwgY2hvaWNlID0gMCwgc2Nyb2xs
ID0gMCwgbWF4X2Nob2ljZTsNCiAgICArCVdJTkRPVyAqZGlhbG9nLCAqbGlzdDsNCiAgICArDQog
ICAgKwkvKiB3aGljaCBpdGVtIHRvIGhpZ2hsaWdodCAqLw0KICAgICsJaXRlbV9mb3JlYWNoKCkg
ew0KICAgICsJCWlmIChpdGVtX2lzX3RhZygnWCcpKQ0KICAgICsJCQljaG9pY2UgPSBpdGVtX24o
KTsNCiAgICArCQlpZiAoaXRlbV9pc19zZWxlY3RlZCgpKSB7DQogICAgKwkJCWNob2ljZSA9IGl0
ZW1fbigpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICtk
b19yZXNpemU6DQogICAgKwlpZiAoZ2V0bWF4eShzdGRzY3IpIDwgKGhlaWdodCArIENIRUNLTElT
VF9IRUlHVEhfTUlOKSkNCiAgICArCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICAr
CWlmIChnZXRtYXh4KHN0ZHNjcikgPCAod2lkdGggKyBDSEVDS0xJU1RfV0lEVEhfTUlOKSkNCiAg
ICArCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICArDQogICAgKwltYXhfY2hvaWNl
ID0gTUlOKGxpc3RfaGVpZ2h0LCBpdGVtX2NvdW50KCkpOw0KICAgICsNCiAgICArCS8qIGNlbnRl
ciBkaWFsb2cgYm94IG9uIHNjcmVlbiAqLw0KICAgICsJeCA9IChnZXRtYXh4KHN0ZHNjcikgLSB3
aWR0aCkgLyAyOw0KICAgICsJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsNCiAg
ICArDQogICAgKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOw0KICAg
ICsNCiAgICArCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsNCiAgICArCWtl
eXBhZChkaWFsb2csIFRSVUUpOw0KICAgICsNCiAgICArCWRyYXdfYm94KGRpYWxvZywgMCwgMCwg
aGVpZ2h0LCB3aWR0aCwNCiAgICArCQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsN
CiAgICArCXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOw0KICAgICsJbXZ3YWRkY2go
ZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwg
d2lkdGggLSAyOyBpKyspDQogICAgKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsNCiAgICAr
CXdhdHRyc2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOw0KICAgICsJd2FkZGNoKGRpYWxvZywg
QUNTX1JURUUpOw0KICAgICsNCiAgICArCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRo
KTsNCiAgICArDQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICAr
CXByaW50X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOw0KICAgICsN
CiAgICArCWxpc3Rfd2lkdGggPSB3aWR0aCAtIDY7DQogICAgKwlib3hfeSA9IGhlaWdodCAtIGxp
c3RfaGVpZ2h0IC0gNTsNCiAgICArCWJveF94ID0gKHdpZHRoIC0gbGlzdF93aWR0aCkgLyAyIC0g
MTsNCiAgICArDQogICAgKwkvKiBjcmVhdGUgbmV3IHdpbmRvdyBmb3IgdGhlIGxpc3QgKi8NCiAg
ICArCWxpc3QgPSBzdWJ3aW4oZGlhbG9nLCBsaXN0X2hlaWdodCwgbGlzdF93aWR0aCwgeSArIGJv
eF95ICsgMSwNCiAgICArCQkgICAgICB4ICsgYm94X3ggKyAxKTsNCiAgICArDQogICAgKwlrZXlw
YWQobGlzdCwgVFJVRSk7DQogICAgKw0KICAgICsJLyogZHJhdyBhIGJveCBhcm91bmQgdGhlIGxp
c3QgaXRlbXMgKi8NCiAgICArCWRyYXdfYm94KGRpYWxvZywgYm94X3ksIGJveF94LCBsaXN0X2hl
aWdodCArIDIsIGxpc3Rfd2lkdGggKyAyLA0KICAgICsJCSBkbGcubWVudWJveF9ib3JkZXIuYXRy
LCBkbGcubWVudWJveC5hdHIpOw0KICAgICsNCiAgICArCS8qIEZpbmQgbGVuZ3RoIG9mIGxvbmdl
c3QgaXRlbSBpbiBvcmRlciB0byBjZW50ZXIgY2hlY2tsaXN0ICovDQogICAgKwljaGVja194ID0g
MDsNCiAgICArCWl0ZW1fZm9yZWFjaCgpDQogICAgKwkJY2hlY2tfeCA9IE1BWChjaGVja194LCBz
dHJsZW4oaXRlbV9zdHIoKSkgKyA0KTsNCiAgICArCWNoZWNrX3ggPSBNSU4oY2hlY2tfeCwgbGlz
dF93aWR0aCk7DQogICAgKw0KICAgICsJY2hlY2tfeCA9IChsaXN0X3dpZHRoIC0gY2hlY2tfeCkg
LyAyOw0KICAgICsJaXRlbV94ID0gY2hlY2tfeCArIDQ7DQogICAgKw0KICAgICsJaWYgKGNob2lj
ZSA+PSBsaXN0X2hlaWdodCkgew0KICAgICsJCXNjcm9sbCA9IGNob2ljZSAtIGxpc3RfaGVpZ2h0
ICsgMTsNCiAgICArCQljaG9pY2UgLT0gc2Nyb2xsOw0KICAgICsJfQ0KICAgICsNCiAgICArCS8q
IFByaW50IHRoZSBsaXN0ICovDQogICAgKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Nob2ljZTsgaSsr
KSB7DQogICAgKwkJaXRlbV9zZXQoc2Nyb2xsICsgaSk7DQogICAgKwkJcHJpbnRfaXRlbShsaXN0
LCBpLCBpID09IGNob2ljZSk7DQogICAgKwl9DQogICAgKw0KICAgICsJcHJpbnRfYXJyb3dzKGRp
YWxvZywgY2hvaWNlLCBpdGVtX2NvdW50KCksIHNjcm9sbCwNCiAgICArCQkgICAgIGJveF95LCBi
b3hfeCArIGNoZWNrX3ggKyA1LCBsaXN0X2hlaWdodCk7DQogICAgKw0KICAgICsJcHJpbnRfYnV0
dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDApOw0KICAgICsNCiAgICArCXdub3V0cmVmcmVz
aChkaWFsb2cpOw0KICAgICsJd25vdXRyZWZyZXNoKGxpc3QpOw0KICAgICsJZG91cGRhdGUoKTsN
CiAgICArDQogICAgKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsNCiAgICArCQlrZXkgPSB3Z2V0
Y2goZGlhbG9nKTsNCiAgICArDQogICAgKwkJZm9yIChpID0gMDsgaSA8IG1heF9jaG9pY2U7IGkr
Kykgew0KICAgICsJCQlpdGVtX3NldChpICsgc2Nyb2xsKTsNCiAgICArCQkJaWYgKHRvdXBwZXIo
a2V5KSA9PSB0b3VwcGVyKGl0ZW1fc3RyKClbMF0pKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJ
fQ0KICAgICsNCiAgICArCQlpZiAoaSA8IG1heF9jaG9pY2UgfHwga2V5ID09IEtFWV9VUCB8fCBr
ZXkgPT0gS0VZX0RPV04gfHwNCiAgICArCQkgICAga2V5ID09ICcrJyB8fCBrZXkgPT0gJy0nKSB7
DQogICAgKwkJCWlmIChrZXkgPT0gS0VZX1VQIHx8IGtleSA9PSAnLScpIHsNCiAgICArCQkJCWlm
ICghY2hvaWNlKSB7DQogICAgKwkJCQkJaWYgKCFzY3JvbGwpDQogICAgKwkJCQkJCWNvbnRpbnVl
Ow0KICAgICsJCQkJCS8qIFNjcm9sbCBsaXN0IGRvd24gKi8NCiAgICArCQkJCQlpZiAobGlzdF9o
ZWlnaHQgPiAxKSB7DQogICAgKwkJCQkJCS8qIERlLWhpZ2hsaWdodCBjdXJyZW50IGZpcnN0IGl0
ZW0gKi8NCiAgICArCQkJCQkJaXRlbV9zZXQoc2Nyb2xsKTsNCiAgICArCQkJCQkJcHJpbnRfaXRl
bShsaXN0LCAwLCBGQUxTRSk7DQogICAgKwkJCQkJCXNjcm9sbG9rKGxpc3QsIFRSVUUpOw0KICAg
ICsJCQkJCQl3c2NybChsaXN0LCAtMSk7DQogICAgKwkJCQkJCXNjcm9sbG9rKGxpc3QsIEZBTFNF
KTsNCiAgICArCQkJCQl9DQogICAgKwkJCQkJc2Nyb2xsLS07DQogICAgKwkJCQkJaXRlbV9zZXQo
c2Nyb2xsKTsNCiAgICArCQkJCQlwcmludF9pdGVtKGxpc3QsIDAsIFRSVUUpOw0KICAgICsJCQkJ
CXByaW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9jb3VudCgpLA0KICAgICsJCQkJCQkg
ICAgIHNjcm9sbCwgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsNCiAg
ICArDQogICAgKwkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7DQogICAgKwkJCQkJd3JlZnJlc2go
bGlzdCk7DQogICAgKw0KICAgICsJCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtl
eSBwcmVzcyAqLw0KICAgICsJCQkJfSBlbHNlDQogICAgKwkJCQkJaSA9IGNob2ljZSAtIDE7DQog
ICAgKwkJCX0gZWxzZSBpZiAoa2V5ID09IEtFWV9ET1dOIHx8IGtleSA9PSAnKycpIHsNCiAgICAr
CQkJCWlmIChjaG9pY2UgPT0gbWF4X2Nob2ljZSAtIDEpIHsNCiAgICArCQkJCQlpZiAoc2Nyb2xs
ICsgY2hvaWNlID49IGl0ZW1fY291bnQoKSAtIDEpDQogICAgKwkJCQkJCWNvbnRpbnVlOw0KICAg
ICsJCQkJCS8qIFNjcm9sbCBsaXN0IHVwICovDQogICAgKwkJCQkJaWYgKGxpc3RfaGVpZ2h0ID4g
MSkgew0KICAgICsJCQkJCQkvKiBEZS1oaWdobGlnaHQgY3VycmVudCBsYXN0IGl0ZW0gYmVmb3Jl
IHNjcm9sbGluZyB1cCAqLw0KICAgICsJCQkJCQlpdGVtX3NldChzY3JvbGwgKyBtYXhfY2hvaWNl
IC0gMSk7DQogICAgKwkJCQkJCXByaW50X2l0ZW0obGlzdCwNCiAgICArCQkJCQkJCSAgICBtYXhf
Y2hvaWNlIC0gMSwNCiAgICArCQkJCQkJCSAgICBGQUxTRSk7DQogICAgKwkJCQkJCXNjcm9sbG9r
KGxpc3QsIFRSVUUpOw0KICAgICsJCQkJCQl3c2NybChsaXN0LCAxKTsNCiAgICArCQkJCQkJc2Ny
b2xsb2sobGlzdCwgRkFMU0UpOw0KICAgICsJCQkJCX0NCiAgICArCQkJCQlzY3JvbGwrKzsNCiAg
ICArCQkJCQlpdGVtX3NldChzY3JvbGwgKyBtYXhfY2hvaWNlIC0gMSk7DQogICAgKwkJCQkJcHJp
bnRfaXRlbShsaXN0LCBtYXhfY2hvaWNlIC0gMSwgVFJVRSk7DQogICAgKw0KICAgICsJCQkJCXBy
aW50X2Fycm93cyhkaWFsb2csIGNob2ljZSwgaXRlbV9jb3VudCgpLA0KICAgICsJCQkJCQkgICAg
IHNjcm9sbCwgYm94X3ksIGJveF94ICsgY2hlY2tfeCArIDUsIGxpc3RfaGVpZ2h0KTsNCiAgICAr
DQogICAgKwkJCQkJd25vdXRyZWZyZXNoKGRpYWxvZyk7DQogICAgKwkJCQkJd3JlZnJlc2gobGlz
dCk7DQogICAgKw0KICAgICsJCQkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBw
cmVzcyAqLw0KICAgICsJCQkJfSBlbHNlDQogICAgKwkJCQkJaSA9IGNob2ljZSArIDE7DQogICAg
KwkJCX0NCiAgICArCQkJaWYgKGkgIT0gY2hvaWNlKSB7DQogICAgKwkJCQkvKiBEZS1oaWdobGln
aHQgY3VycmVudCBpdGVtICovDQogICAgKwkJCQlpdGVtX3NldChzY3JvbGwgKyBjaG9pY2UpOw0K
ICAgICsJCQkJcHJpbnRfaXRlbShsaXN0LCBjaG9pY2UsIEZBTFNFKTsNCiAgICArCQkJCS8qIEhp
Z2hsaWdodCBuZXcgaXRlbSAqLw0KICAgICsJCQkJY2hvaWNlID0gaTsNCiAgICArCQkJCWl0ZW1f
c2V0KHNjcm9sbCArIGNob2ljZSk7DQogICAgKwkJCQlwcmludF9pdGVtKGxpc3QsIGNob2ljZSwg
VFJVRSk7DQogICAgKwkJCQl3bm91dHJlZnJlc2goZGlhbG9nKTsNCiAgICArCQkJCXdyZWZyZXNo
KGxpc3QpOw0KICAgICsJCQl9DQogICAgKwkJCWNvbnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVy
IGtleSBwcmVzcyAqLw0KICAgICsJCX0NCiAgICArCQlzd2l0Y2ggKGtleSkgew0KICAgICsJCWNh
c2UgJ0gnOg0KICAgICsJCWNhc2UgJ2gnOg0KICAgICsJCWNhc2UgJz8nOg0KICAgICsJCQlidXR0
b24gPSAxOw0KICAgICsJCQkvKiBmYWxsLXRocm91Z2ggKi8NCiAgICArCQljYXNlICdTJzoNCiAg
ICArCQljYXNlICdzJzoNCiAgICArCQljYXNlICcgJzoNCiAgICArCQljYXNlICdcbic6DQogICAg
KwkJCWl0ZW1fZm9yZWFjaCgpDQogICAgKwkJCQlpdGVtX3NldF9zZWxlY3RlZCgwKTsNCiAgICAr
CQkJaXRlbV9zZXQoc2Nyb2xsICsgY2hvaWNlKTsNCiAgICArCQkJaXRlbV9zZXRfc2VsZWN0ZWQo
MSk7DQogICAgKwkJCWRlbHdpbihsaXN0KTsNCiAgICArCQkJZGVsd2luKGRpYWxvZyk7DQogICAg
KwkJCXJldHVybiBidXR0b247DQogICAgKwkJY2FzZSBUQUI6DQogICAgKwkJY2FzZSBLRVlfTEVG
VDoNCiAgICArCQljYXNlIEtFWV9SSUdIVDoNCiAgICArCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZ
X0xFRlQgPyAtLWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApDQogICAgKwkJCSAgICA/IDEgOiAoYnV0
dG9uID4gMSA/IDAgOiBidXR0b24pOw0KICAgICsNCiAgICArCQkJcHJpbnRfYnV0dG9ucyhkaWFs
b2csIGhlaWdodCwgd2lkdGgsIGJ1dHRvbik7DQogICAgKwkJCXdyZWZyZXNoKGRpYWxvZyk7DQog
ICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJ1gnOg0KICAgICsJCWNhc2UgJ3gnOg0KICAgICsJ
CQlrZXkgPSBLRVlfRVNDOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9FU0M6DQog
ICAgKwkJCWtleSA9IG9uX2tleV9lc2MoZGlhbG9nKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
Y2FzZSBLRVlfUkVTSVpFOg0KICAgICsJCQlkZWx3aW4obGlzdCk7DQogICAgKwkJCWRlbHdpbihk
aWFsb2cpOw0KICAgICsJCQlvbl9rZXlfcmVzaXplKCk7DQogICAgKwkJCWdvdG8gZG9fcmVzaXpl
Ow0KICAgICsJCX0NCiAgICArDQogICAgKwkJLyogTm93LCB1cGRhdGUgZXZlcnl0aGluZy4uLiAq
Lw0KICAgICsJCWRvdXBkYXRlKCk7DQogICAgKwl9DQogICAgKwlkZWx3aW4obGlzdCk7DQogICAg
KwlkZWx3aW4oZGlhbG9nKTsNCiAgICArCXJldHVybiBrZXk7CQkvKiBFU0MgcHJlc3NlZCAqLw0K
ICAgICt9DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9kaWFsb2cu
aCBiL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy9kaWFsb2cuaA0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNjhiNTY1ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvZGlhbG9nLmgNCiAgICBAQCAtMCwwICsx
LDIzOCBAQA0KICAgICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsgKi8NCiAg
ICArLyoNCiAgICArICogIGRpYWxvZy5oIC0tIGNvbW1vbiBkZWNsYXJhdGlvbnMgZm9yIGFsbCBk
aWFsb2cgbW9kdWxlcw0KICAgICsgKg0KICAgICsgKiAgQVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgz
NkBjcy5jdWhrLmhrKQ0KICAgICsgKi8NCiAgICArDQogICAgKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4NCiAgICArI2luY2x1ZGUgPGZjbnRsLmg+DQogICAgKyNpbmNsdWRlIDx1bmlzdGQuaD4NCiAg
ICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2lu
Y2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0KICAgICsNCiAgICAr
I2lmZGVmIF9fc3VuX18NCiAgICArI2RlZmluZSBDVVJTX01BQ1JPUw0KICAgICsjZW5kaWYNCiAg
ICArI2luY2x1ZGUgPG5jdXJzZXMuaD4NCiAgICArDQogICAgKy8qDQogICAgKyAqIENvbG9ycyBp
biBuY3Vyc2VzIDEuOS45ZSBkbyBub3Qgd29yayBwcm9wZXJseSBzaW5jZSBmb3JlZ3JvdW5kIGFu
ZA0KICAgICsgKiBiYWNrZ3JvdW5kIGNvbG9ycyBhcmUgT1InZCByYXRoZXIgdGhhbiBzZXBhcmF0
ZWx5IG1hc2tlZC4gIFRoaXMgdmVyc2lvbg0KICAgICsgKiBvZiBkaWFsb2cgd2FzIGhhY2tlZCB0
byB3b3JrIHdpdGggbmN1cnNlcyAxLjkuOWUsIG1ha2luZyBpdCBpbmNvbXBhdGlibGUNCiAgICAr
ICogd2l0aCBzdGFuZGFyZCBjdXJzZXMuICBUaGUgc2ltcGxlc3QgZml4ICh0byBtYWtlIHRoaXMg
d29yayB3aXRoIHN0YW5kYXJkDQogICAgKyAqIGN1cnNlcykgdXNlcyB0aGUgd2JrZ2RzZXQoKSBm
dW5jdGlvbiwgbm90IHVzZWQgaW4gdGhlIG9yaWdpbmFsIGhhY2suDQogICAgKyAqIFR1cm4gaXQg
b2ZmIGlmIHdlJ3JlIGJ1aWxkaW5nIHdpdGggMS45LjllLCBzaW5jZSBpdCBqdXN0IGNvbmZ1c2Vz
IHRoaW5ncy4NCiAgICArICovDQogICAgKyNpZiBkZWZpbmVkKE5DVVJTRVNfVkVSU0lPTikgJiYg
ZGVmaW5lZChfTkVFRF9XUkFQKSAmJiAhZGVmaW5lZChHQ0NfUFJJTlRGTElLRSkNCiAgICArI2Rl
ZmluZSBPTERfTkNVUlNFUyAxDQogICAgKyN1bmRlZiAgd2JrZ2RzZXQNCiAgICArI2RlZmluZSB3
YmtnZHNldCh3LHApCQkvKm5vdGhpbmcgKi8NCiAgICArI2Vsc2UNCiAgICArI2RlZmluZSBPTERf
TkNVUlNFUyAwDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2RlZmluZSBUUihwYXJhbXMpIF90
cmFjZWYgcGFyYW1zDQogICAgKw0KICAgICsjZGVmaW5lIEtFWV9FU0MgMjcNCiAgICArI2RlZmlu
ZSBUQUIgOQ0KICAgICsjZGVmaW5lIE1BWF9MRU4gMjA0OA0KICAgICsjZGVmaW5lIEJVRl9TSVpF
ICgxMCoxMDI0KQ0KICAgICsjZGVmaW5lIE1JTih4LHkpICh4IDwgeSA/IHggOiB5KQ0KICAgICsj
ZGVmaW5lIE1BWCh4LHkpICh4ID4geSA/IHggOiB5KQ0KICAgICsNCiAgICArI2lmbmRlZiBBQ1Nf
VUxDT1JORVINCiAgICArI2RlZmluZSBBQ1NfVUxDT1JORVIgJysnDQogICAgKyNlbmRpZg0KICAg
ICsjaWZuZGVmIEFDU19MTENPUk5FUg0KICAgICsjZGVmaW5lIEFDU19MTENPUk5FUiAnKycNCiAg
ICArI2VuZGlmDQogICAgKyNpZm5kZWYgQUNTX1VSQ09STkVSDQogICAgKyNkZWZpbmUgQUNTX1VS
Q09STkVSICcrJw0KICAgICsjZW5kaWYNCiAgICArI2lmbmRlZiBBQ1NfTFJDT1JORVINCiAgICAr
I2RlZmluZSBBQ1NfTFJDT1JORVIgJysnDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIEFDU19I
TElORQ0KICAgICsjZGVmaW5lIEFDU19ITElORSAnLScNCiAgICArI2VuZGlmDQogICAgKyNpZm5k
ZWYgQUNTX1ZMSU5FDQogICAgKyNkZWZpbmUgQUNTX1ZMSU5FICd8Jw0KICAgICsjZW5kaWYNCiAg
ICArI2lmbmRlZiBBQ1NfTFRFRQ0KICAgICsjZGVmaW5lIEFDU19MVEVFICcrJw0KICAgICsjZW5k
aWYNCiAgICArI2lmbmRlZiBBQ1NfUlRFRQ0KICAgICsjZGVmaW5lIEFDU19SVEVFICcrJw0KICAg
ICsjZW5kaWYNCiAgICArI2lmbmRlZiBBQ1NfVUFSUk9XDQogICAgKyNkZWZpbmUgQUNTX1VBUlJP
VyAnXicNCiAgICArI2VuZGlmDQogICAgKyNpZm5kZWYgQUNTX0RBUlJPVw0KICAgICsjZGVmaW5l
IEFDU19EQVJST1cgJ3YnDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogZXJyb3IgcmV0dXJu
IGNvZGVzICovDQogICAgKyNkZWZpbmUgRVJSRElTUExBWVRPT1NNQUxMIChLRVlfTUFYICsgMSkN
CiAgICArDQogICAgKy8qDQogICAgKyAqICAgQ29sb3IgZGVmaW5pdGlvbnMNCiAgICArICovDQog
ICAgK3N0cnVjdCBkaWFsb2dfY29sb3Igew0KICAgICsJY2h0eXBlIGF0cjsJLyogQ29sb3IgYXR0
cmlidXRlICovDQogICAgKwlpbnQgZmc7CQkvKiBmb3JlZ3JvdW5kICovDQogICAgKwlpbnQgYmc7
CQkvKiBiYWNrZ3JvdW5kICovDQogICAgKwlpbnQgaGw7CQkvKiBoaWdobGlnaHQgdGhpcyBpdGVt
ICovDQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3Qgc3VidGl0bGVfbGlzdCB7DQogICAgKwlz
dHJ1Y3Qgc3VidGl0bGVfbGlzdCAqbmV4dDsNCiAgICArCWNvbnN0IGNoYXIgKnRleHQ7DQogICAg
K307DQogICAgKw0KICAgICtzdHJ1Y3QgZGlhbG9nX2luZm8gew0KICAgICsJY29uc3QgY2hhciAq
YmFja3RpdGxlOw0KICAgICsJc3RydWN0IHN1YnRpdGxlX2xpc3QgKnN1YnRpdGxlczsNCiAgICAr
CXN0cnVjdCBkaWFsb2dfY29sb3Igc2NyZWVuOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBz
aGFkb3c7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGRpYWxvZzsNCiAgICArCXN0cnVjdCBk
aWFsb2dfY29sb3IgdGl0bGU7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIGJvcmRlcjsNCiAg
ICArCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2FjdGl2ZTsNCiAgICArCXN0cnVjdCBkaWFs
b2dfY29sb3IgYnV0dG9uX2luYWN0aXZlOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBidXR0
b25fa2V5X2FjdGl2ZTsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2tleV9pbmFj
dGl2ZTsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2xhYmVsX2FjdGl2ZTsNCiAg
ICArCXN0cnVjdCBkaWFsb2dfY29sb3IgYnV0dG9uX2xhYmVsX2luYWN0aXZlOw0KICAgICsJc3Ry
dWN0IGRpYWxvZ19jb2xvciBpbnB1dGJveDsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgaW5w
dXRib3hfYm9yZGVyOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBzZWFyY2hib3g7DQogICAg
KwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHNlYXJjaGJveF90aXRsZTsNCiAgICArCXN0cnVjdCBkaWFs
b2dfY29sb3Igc2VhcmNoYm94X2JvcmRlcjsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgcG9z
aXRpb25faW5kaWNhdG9yOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBtZW51Ym94Ow0KICAg
ICsJc3RydWN0IGRpYWxvZ19jb2xvciBtZW51Ym94X2JvcmRlcjsNCiAgICArCXN0cnVjdCBkaWFs
b2dfY29sb3IgaXRlbTsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgaXRlbV9zZWxlY3RlZDsN
CiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgdGFnOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xv
ciB0YWdfc2VsZWN0ZWQ7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19rZXk7DQogICAg
KwlzdHJ1Y3QgZGlhbG9nX2NvbG9yIHRhZ19rZXlfc2VsZWN0ZWQ7DQogICAgKwlzdHJ1Y3QgZGlh
bG9nX2NvbG9yIGNoZWNrOw0KICAgICsJc3RydWN0IGRpYWxvZ19jb2xvciBjaGVja19zZWxlY3Rl
ZDsNCiAgICArCXN0cnVjdCBkaWFsb2dfY29sb3IgdWFycm93Ow0KICAgICsJc3RydWN0IGRpYWxv
Z19jb2xvciBkYXJyb3c7DQogICAgK307DQogICAgKw0KICAgICsvKg0KICAgICsgKiBHbG9iYWwg
dmFyaWFibGVzDQogICAgKyAqLw0KICAgICtleHRlcm4gc3RydWN0IGRpYWxvZ19pbmZvIGRsZzsN
CiAgICArZXh0ZXJuIGNoYXIgZGlhbG9nX2lucHV0X3Jlc3VsdFtdOw0KICAgICtleHRlcm4gaW50
IHNhdmVkX3gsIHNhdmVkX3k7CQkvKiBOZWVkZWQgaW4gc2lnbmFsIGhhbmRsZXIgaW4gbWNvbmYu
YyAqLw0KICAgICsNCiAgICArLyoNCiAgICArICogRnVuY3Rpb24gcHJvdG90eXBlcw0KICAgICsg
Ki8NCiAgICArDQogICAgKy8qIGl0ZW0gbGlzdCBhcyB1c2VkIGJ5IGNoZWNrbGlzdCBhbmQgbWVu
dWJveCAqLw0KICAgICt2b2lkIGl0ZW1fcmVzZXQodm9pZCk7DQogICAgK3ZvaWQgaXRlbV9tYWtl
KGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsNCiAgICArdm9pZCBpdGVtX2FkZF9zdHIoY29uc3QgY2hh
ciAqZm10LCAuLi4pOw0KICAgICt2b2lkIGl0ZW1fc2V0X3RhZyhjaGFyIHRhZyk7DQogICAgK3Zv
aWQgaXRlbV9zZXRfZGF0YSh2b2lkICpwKTsNCiAgICArdm9pZCBpdGVtX3NldF9zZWxlY3RlZChp
bnQgdmFsKTsNCiAgICAraW50IGl0ZW1fYWN0aXZhdGVfc2VsZWN0ZWQodm9pZCk7DQogICAgK3Zv
aWQgKml0ZW1fZGF0YSh2b2lkKTsNCiAgICArY2hhciBpdGVtX3RhZyh2b2lkKTsNCiAgICArDQog
ICAgKy8qIGl0ZW0gbGlzdCBtYW5pcHVsYXRpb24gZm9yIGx4ZGlhbG9nIHVzZSAqLw0KICAgICsj
ZGVmaW5lIE1BWElURU1TVFIgMjAwDQogICAgK3N0cnVjdCBkaWFsb2dfaXRlbSB7DQogICAgKwlj
aGFyIHN0cltNQVhJVEVNU1RSXTsJLyogcHJvbXB0IGRpc3BsYXllZCAqLw0KICAgICsJY2hhciB0
YWc7DQogICAgKwl2b2lkICpkYXRhOwkvKiBwb2ludGVyIHRvIG1lbnUgaXRlbSAtIHVzZWQgYnkg
bWVudWJveCtjaGVja2xpc3QgKi8NCiAgICArCWludCBzZWxlY3RlZDsJLyogU2V0IHRvIDEgYnkg
ZGlhbG9nXyooKSBmdW5jdGlvbiBpZiBzZWxlY3RlZC4gKi8NCiAgICArfTsNCiAgICArDQogICAg
Ky8qIGxpc3Qgb2YgbGlhbG9nX2l0ZW1zICovDQogICAgK3N0cnVjdCBkaWFsb2dfbGlzdCB7DQog
ICAgKwlzdHJ1Y3QgZGlhbG9nX2l0ZW0gbm9kZTsNCiAgICArCXN0cnVjdCBkaWFsb2dfbGlzdCAq
bmV4dDsNCiAgICArfTsNCiAgICArDQogICAgK2V4dGVybiBzdHJ1Y3QgZGlhbG9nX2xpc3QgKml0
ZW1fY3VyOw0KICAgICtleHRlcm4gc3RydWN0IGRpYWxvZ19saXN0IGl0ZW1fbmlsOw0KICAgICtl
eHRlcm4gc3RydWN0IGRpYWxvZ19saXN0ICppdGVtX2hlYWQ7DQogICAgKw0KICAgICtpbnQgaXRl
bV9jb3VudCh2b2lkKTsNCiAgICArdm9pZCBpdGVtX3NldChpbnQgbik7DQogICAgK2ludCBpdGVt
X24odm9pZCk7DQogICAgK2NvbnN0IGNoYXIgKml0ZW1fc3RyKHZvaWQpOw0KICAgICtpbnQgaXRl
bV9pc19zZWxlY3RlZCh2b2lkKTsNCiAgICAraW50IGl0ZW1faXNfdGFnKGNoYXIgdGFnKTsNCiAg
ICArI2RlZmluZSBpdGVtX2ZvcmVhY2goKSBcDQogICAgKwlmb3IgKGl0ZW1fY3VyID0gaXRlbV9o
ZWFkID8gaXRlbV9oZWFkOiBpdGVtX2N1cjsgXA0KICAgICsJICAgICBpdGVtX2N1ciAmJiAoaXRl
bV9jdXIgIT0gJml0ZW1fbmlsKTsgaXRlbV9jdXIgPSBpdGVtX2N1ci0+bmV4dCkNCiAgICArDQog
ICAgKy8qIGdlbmVyaWMga2V5IGhhbmRsZXJzICovDQogICAgK2ludCBvbl9rZXlfZXNjKFdJTkRP
VyAqd2luKTsNCiAgICAraW50IG9uX2tleV9yZXNpemUodm9pZCk7DQogICAgKw0KICAgICsvKiBt
aW5pbXVtIChyZSlzaXplIHZhbHVlcyAqLw0KICAgICsjZGVmaW5lIENIRUNLTElTVF9IRUlHVEhf
TUlOIDYJLyogRm9yIGRpYWxvZ19jaGVja2xpc3QoKSAqLw0KICAgICsjZGVmaW5lIENIRUNLTElT
VF9XSURUSF9NSU4gNg0KICAgICsjZGVmaW5lIElOUFVUQk9YX0hFSUdUSF9NSU4gMgkvKiBGb3Ig
ZGlhbG9nX2lucHV0Ym94KCkgKi8NCiAgICArI2RlZmluZSBJTlBVVEJPWF9XSURUSF9NSU4gMg0K
ICAgICsjZGVmaW5lIE1FTlVCT1hfSEVJR1RIX01JTiAxNQkvKiBGb3IgZGlhbG9nX21lbnUoKSAq
Lw0KICAgICsjZGVmaW5lIE1FTlVCT1hfV0lEVEhfTUlOIDY1DQogICAgKyNkZWZpbmUgVEVYVEJP
WF9IRUlHVEhfTUlOIDgJLyogRm9yIGRpYWxvZ190ZXh0Ym94KCkgKi8NCiAgICArI2RlZmluZSBU
RVhUQk9YX1dJRFRIX01JTiA4DQogICAgKyNkZWZpbmUgWUVTTk9fSEVJR1RIX01JTiA0CS8qIEZv
ciBkaWFsb2dfeWVzbm8oKSAqLw0KICAgICsjZGVmaW5lIFlFU05PX1dJRFRIX01JTiA0DQogICAg
KyNkZWZpbmUgV0lORE9XX0hFSUdUSF9NSU4gMTkJLyogRm9yIGluaXRfZGlhbG9nKCkgKi8NCiAg
ICArI2RlZmluZSBXSU5ET1dfV0lEVEhfTUlOIDgwDQogICAgKw0KICAgICtpbnQgaW5pdF9kaWFs
b2coY29uc3QgY2hhciAqYmFja3RpdGxlKTsNCiAgICArdm9pZCBzZXRfZGlhbG9nX2JhY2t0aXRs
ZShjb25zdCBjaGFyICpiYWNrdGl0bGUpOw0KICAgICt2b2lkIHNldF9kaWFsb2dfc3VidGl0bGVz
KHN0cnVjdCBzdWJ0aXRsZV9saXN0ICpzdWJ0aXRsZXMpOw0KICAgICt2b2lkIGVuZF9kaWFsb2co
aW50IHgsIGludCB5KTsNCiAgICArdm9pZCBhdHRyX2NsZWFyKFdJTkRPVyAqIHdpbiwgaW50IGhl
aWdodCwgaW50IHdpZHRoLCBjaHR5cGUgYXR0cik7DQogICAgK3ZvaWQgZGlhbG9nX2NsZWFyKHZv
aWQpOw0KICAgICt2b2lkIHByaW50X2F1dG93cmFwKFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAq
cHJvbXB0LCBpbnQgd2lkdGgsIGludCB5LCBpbnQgeCk7DQogICAgK3ZvaWQgcHJpbnRfYnV0dG9u
KFdJTkRPVyAqIHdpbiwgY29uc3QgY2hhciAqbGFiZWwsIGludCB5LCBpbnQgeCwgaW50IHNlbGVj
dGVkKTsNCiAgICArdm9pZCBwcmludF90aXRsZShXSU5ET1cgKmRpYWxvZywgY29uc3QgY2hhciAq
dGl0bGUsIGludCB3aWR0aCk7DQogICAgK3ZvaWQgZHJhd19ib3goV0lORE9XICogd2luLCBpbnQg
eSwgaW50IHgsIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGJveCwNCiAgICArCSAgICAg
IGNodHlwZSBib3JkZXIpOw0KICAgICt2b2lkIGRyYXdfc2hhZG93KFdJTkRPVyAqIHdpbiwgaW50
IHksIGludCB4LCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgpOw0KICAgICsNCiAgICAraW50IGZpcnN0
X2FscGhhKGNvbnN0IGNoYXIgKnN0cmluZywgY29uc3QgY2hhciAqZXhlbXB0KTsNCiAgICAraW50
IGRpYWxvZ195ZXNubyhjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQg
aGVpZ2h0LCBpbnQgd2lkdGgpOw0KICAgICtpbnQgZGlhbG9nX21zZ2JveChjb25zdCBjaGFyICp0
aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LA0KICAgICsJCSAgaW50IHdpZHRo
LCBpbnQgcGF1c2UpOw0KICAgICsNCiAgICArDQogICAgK3R5cGVkZWYgdm9pZCAoKnVwZGF0ZV90
ZXh0X2ZuKShjaGFyICpidWYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCwgdm9pZA0KICAgICsJ
CQkgICAgICAgKl9kYXRhKTsNCiAgICAraW50IGRpYWxvZ190ZXh0Ym94KGNvbnN0IGNoYXIgKnRp
dGxlLCBjaGFyICp0YnVmLCBpbnQgaW5pdGlhbF9oZWlnaHQsDQogICAgKwkJICAgaW50IGluaXRp
YWxfd2lkdGgsIGludCAqa2V5cywgaW50ICpfdnNjcm9sbCwgaW50ICpfaHNjcm9sbCwNCiAgICAr
CQkgICB1cGRhdGVfdGV4dF9mbiB1cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSk7DQogICAgK2ludCBk
aWFsb2dfbWVudShjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LA0KICAgICsJ
CWNvbnN0IHZvaWQgKnNlbGVjdGVkLCBpbnQgKnNfc2Nyb2xsKTsNCiAgICAraW50IGRpYWxvZ19j
aGVja2xpc3QoY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21wdCwgaW50IGhlaWdo
dCwNCiAgICArCQkgICAgIGludCB3aWR0aCwgaW50IGxpc3RfaGVpZ2h0KTsNCiAgICAraW50IGRp
YWxvZ19pbnB1dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQg
aGVpZ2h0LA0KICAgICsJCSAgICBpbnQgd2lkdGgsIGNvbnN0IGNoYXIgKmluaXQpOw0KICAgICsN
CiAgICArLyoNCiAgICArICogVGhpcyBpcyB0aGUgYmFzZSBmb3IgZmljdGl0aW91cyBrZXlzLCB3
aGljaCBhY3RpdmF0ZQ0KICAgICsgKiB0aGUgYnV0dG9ucy4NCiAgICArICoNCiAgICArICogTW91
c2UtZ2VuZXJhdGVkIGtleXMgYXJlIHRoZSBmb2xsb3dpbmc6DQogICAgKyAqICAgLS0gdGhlIGZp
cnN0IDMyIGFyZSB1c2VkIGFzIG51bWJlcnMsIGluIGFkZGl0aW9uIHRvICcwJy0nOScNCiAgICAr
ICogICAtLSB0aGUgbG93ZXJjYXNlIGFyZSB1c2VkIHRvIHNpZ25hbCBtb3VzZS1lbnRlciBldmVu
dHMgKE1fRVZFTlQgKyAnbycpDQogICAgKyAqICAgLS0gdXBwZXJjYXNlIGNoYXJzIGFyZSB1c2Vk
IHRvIGludm9rZSB0aGUgYnV0dG9uIChNX0VWRU5UICsgJ08nKQ0KICAgICsgKi8NCiAgICArI2Rl
ZmluZSBNX0VWRU5UIChLRVlfTUFYKzEpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy9seGRpYWxvZy9pbnB1dGJveC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2lucHV0Ym94
LmMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjFkY2ZiMjgN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL2lu
cHV0Ym94LmMNCiAgICBAQCAtMCwwICsxLDI4OSBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMCsNCiAgICArLyoNCiAgICArICogIGlucHV0Ym94LmMgLS0gaW1wbGVt
ZW50cyB0aGUgaW5wdXQgYm94DQogICAgKyAqDQogICAgKyAqICBPUklHSU5BTCBBVVRIT1I6IFNh
dmlvIExhbSAobGFtODM2QGNzLmN1aGsuaGspDQogICAgKyAqICBNT0RJRklFRCBGT1IgTElOVVgg
S0VSTkVMIENPTkZJRyBCWTogV2lsbGlhbSBSb2FkY2FwIChyb2FkY2FwQGNmdy5jb20pDQogICAg
KyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgImRpYWxvZy5oIg0KICAgICsNCiAgICArY2hhciBk
aWFsb2dfaW5wdXRfcmVzdWx0W01BWF9MRU4gKyAxXTsNCiAgICArDQogICAgKy8qDQogICAgKyAq
ICBQcmludCB0aGUgdGVybWluYXRpb24gYnV0dG9ucw0KICAgICsgKi8NCiAgICArc3RhdGljIHZv
aWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQsIGludCB3aWR0aCwg
aW50IHNlbGVjdGVkKQ0KICAgICt7DQogICAgKwlpbnQgeCA9IHdpZHRoIC8gMiAtIDExOw0KICAg
ICsJaW50IHkgPSBoZWlnaHQgLSAyOw0KICAgICsNCiAgICArCXByaW50X2J1dHRvbihkaWFsb2cs
ICIgIE9rICAiLCB5LCB4LCBzZWxlY3RlZCA9PSAwKTsNCiAgICArCXByaW50X2J1dHRvbihkaWFs
b2csICIgSGVscCAiLCB5LCB4ICsgMTQsIHNlbGVjdGVkID09IDEpOw0KICAgICsNCiAgICArCXdt
b3ZlKGRpYWxvZywgeSwgeCArIDEgKyAxNCAqIHNlbGVjdGVkKTsNCiAgICArCXdyZWZyZXNoKGRp
YWxvZyk7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIERpc3BsYXkgYSBkaWFsb2cg
Ym94IGZvciBpbnB1dGluZyBhIHN0cmluZw0KICAgICsgKi8NCiAgICAraW50IGRpYWxvZ19pbnB1
dGJveChjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgaGVpZ2h0LCBp
bnQgd2lkdGgsDQogICAgKwkJICAgIGNvbnN0IGNoYXIgKmluaXQpDQogICAgK3sNCiAgICArCWlu
dCBpLCB4LCB5LCBib3hfeSwgYm94X3gsIGJveF93aWR0aDsNCiAgICArCWludCBpbnB1dF94ID0g
MCwga2V5ID0gMCwgYnV0dG9uID0gLTE7DQogICAgKwlpbnQgc2hvd194LCBsZW4sIHBvczsNCiAg
ICArCWNoYXIgKmluc3RyID0gZGlhbG9nX2lucHV0X3Jlc3VsdDsNCiAgICArCVdJTkRPVyAqZGlh
bG9nOw0KICAgICsNCiAgICArCWlmICghaW5pdCkNCiAgICArCQlpbnN0clswXSA9ICdcMCc7DQog
ICAgKwllbHNlDQogICAgKwkJc3RyY3B5KGluc3RyLCBpbml0KTsNCiAgICArDQogICAgK2RvX3Jl
c2l6ZToNCiAgICArCWlmIChnZXRtYXh5KHN0ZHNjcikgPD0gKGhlaWdodCAtIElOUFVUQk9YX0hF
SUdUSF9NSU4pKQ0KICAgICsJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0KICAgICsJaWYg
KGdldG1heHgoc3Rkc2NyKSA8PSAod2lkdGggLSBJTlBVVEJPWF9XSURUSF9NSU4pKQ0KICAgICsJ
CXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0KICAgICsNCiAgICArCS8qIGNlbnRlciBkaWFs
b2cgYm94IG9uIHNjcmVlbiAqLw0KICAgICsJeCA9IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0aCkg
LyAyOw0KICAgICsJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsNCiAgICArDQog
ICAgKwlkcmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOw0KICAgICsNCiAg
ICArCWRpYWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsNCiAgICArCWtleXBhZChk
aWFsb2csIFRSVUUpOw0KICAgICsNCiAgICArCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0
LCB3aWR0aCwNCiAgICArCQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsNCiAgICAr
CXdhdHRyc2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOw0KICAgICsJbXZ3YWRkY2goZGlhbG9n
LCBoZWlnaHQgLSAzLCAwLCBBQ1NfTFRFRSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGgg
LSAyOyBpKyspDQogICAgKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsNCiAgICArCXdhdHRy
c2V0KGRpYWxvZywgZGxnLmRpYWxvZy5hdHIpOw0KICAgICsJd2FkZGNoKGRpYWxvZywgQUNTX1JU
RUUpOw0KICAgICsNCiAgICArCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsNCiAg
ICArDQogICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICArCXByaW50
X2F1dG93cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOw0KICAgICsNCiAgICAr
CS8qIERyYXcgdGhlIGlucHV0IGZpZWxkIGJveCAqLw0KICAgICsJYm94X3dpZHRoID0gd2lkdGgg
LSA2Ow0KICAgICsJZ2V0eXgoZGlhbG9nLCB5LCB4KTsNCiAgICArCWJveF95ID0geSArIDI7DQog
ICAgKwlib3hfeCA9ICh3aWR0aCAtIGJveF93aWR0aCkgLyAyOw0KICAgICsJZHJhd19ib3goZGlh
bG9nLCB5ICsgMSwgYm94X3ggLSAxLCAzLCBib3hfd2lkdGggKyAyLA0KICAgICsJCSBkbGcuZGlh
bG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOw0KICAgICsNCiAgICArCXByaW50X2J1dHRvbnMoZGlh
bG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICArDQogICAgKwkvKiBTZXQgdXAgdGhlIGluaXRp
YWwgdmFsdWUgKi8NCiAgICArCXdtb3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsNCiAgICArCXdh
dHRyc2V0KGRpYWxvZywgZGxnLmlucHV0Ym94LmF0cik7DQogICAgKw0KICAgICsJbGVuID0gc3Ry
bGVuKGluc3RyKTsNCiAgICArCXBvcyA9IGxlbjsNCiAgICArDQogICAgKwlpZiAobGVuID49IGJv
eF93aWR0aCkgew0KICAgICsJCXNob3dfeCA9IGxlbiAtIGJveF93aWR0aCArIDE7DQogICAgKwkJ
aW5wdXRfeCA9IGJveF93aWR0aCAtIDE7DQogICAgKwkJZm9yIChpID0gMDsgaSA8IGJveF93aWR0
aCAtIDE7IGkrKykNCiAgICArCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0K
ICAgICsJfSBlbHNlIHsNCiAgICArCQlzaG93X3ggPSAwOw0KICAgICsJCWlucHV0X3ggPSBsZW47
DQogICAgKwkJd2FkZHN0cihkaWFsb2csIGluc3RyKTsNCiAgICArCX0NCiAgICArDQogICAgKwl3
bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOw0KICAgICsNCiAgICArCXdyZWZy
ZXNoKGRpYWxvZyk7DQogICAgKw0KICAgICsJd2hpbGUgKGtleSAhPSBLRVlfRVNDKSB7DQogICAg
KwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7DQogICAgKw0KICAgICsJCWlmIChidXR0b24gPT0gLTEp
IHsJLyogSW5wdXQgYm94IHNlbGVjdGVkICovDQogICAgKwkJCXN3aXRjaCAoa2V5KSB7DQogICAg
KwkJCWNhc2UgVEFCOg0KICAgICsJCQljYXNlIEtFWV9VUDoNCiAgICArCQkJY2FzZSBLRVlfRE9X
TjoNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQljYXNlIEtFWV9CQUNLU1BBQ0U6DQogICAgKwkJ
CWNhc2UgODogICAvKiBeSCAqLw0KICAgICsJCQljYXNlIDEyNzogLyogXj8gKi8NCiAgICArCQkJ
CWlmIChwb3MpIHsNCiAgICArCQkJCQl3YXR0cnNldChkaWFsb2csIGRsZy5pbnB1dGJveC5hdHIp
Ow0KICAgICsJCQkJCWlmIChpbnB1dF94ID09IDApIHsNCiAgICArCQkJCQkJc2hvd194LS07DQog
ICAgKwkJCQkJfSBlbHNlDQogICAgKwkJCQkJCWlucHV0X3gtLTsNCiAgICArDQogICAgKwkJCQkJ
aWYgKHBvcyA8IGxlbikgew0KICAgICsJCQkJCQlmb3IgKGkgPSBwb3MgLSAxOyBpIDwgbGVuOyBp
KyspIHsNCiAgICArCQkJCQkJCWluc3RyW2ldID0gaW5zdHJbaSsxXTsNCiAgICArCQkJCQkJfQ0K
ICAgICsJCQkJCX0NCiAgICArDQogICAgKwkJCQkJcG9zLS07DQogICAgKwkJCQkJbGVuLS07DQog
ICAgKwkJCQkJaW5zdHJbbGVuXSA9ICdcMCc7DQogICAgKwkJCQkJd21vdmUoZGlhbG9nLCBib3hf
eSwgYm94X3gpOw0KICAgICsJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hfd2lkdGg7IGkrKykgew0K
ICAgICsJCQkJCQlpZiAoIWluc3RyW3Nob3dfeCArIGldKSB7DQogICAgKwkJCQkJCQl3YWRkY2go
ZGlhbG9nLCAnICcpOw0KICAgICsJCQkJCQkJYnJlYWs7DQogICAgKwkJCQkJCX0NCiAgICArCQkJ
CQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0KICAgICsJCQkJCX0NCiAgICAr
CQkJCQl3bW92ZShkaWFsb2csIGJveF95LCBpbnB1dF94ICsgYm94X3gpOw0KICAgICsJCQkJCXdy
ZWZyZXNoKGRpYWxvZyk7DQogICAgKwkJCQl9DQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJ
Y2FzZSBLRVlfTEVGVDoNCiAgICArCQkJCWlmIChwb3MgPiAwKSB7DQogICAgKwkJCQkJaWYgKGlu
cHV0X3ggPiAwKSB7DQogICAgKwkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIC0taW5wdXRfeCAr
IGJveF94KTsNCiAgICArCQkJCQl9IGVsc2UgaWYgKGlucHV0X3ggPT0gMCkgew0KICAgICsJCQkJ
CQlzaG93X3gtLTsNCiAgICArCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgYm94X3gpOw0KICAg
ICsJCQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsNCiAgICArCQkJCQkJCWlm
ICghaW5zdHJbc2hvd194ICsgaV0pIHsNCiAgICArCQkJCQkJCQl3YWRkY2goZGlhbG9nLCAnICcp
Ow0KICAgICsJCQkJCQkJCWJyZWFrOw0KICAgICsJCQkJCQkJfQ0KICAgICsJCQkJCQkJd2FkZGNo
KGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0KICAgICsJCQkJCQl9DQogICAgKwkJCQkJCXdt
b3ZlKGRpYWxvZywgYm94X3ksIGJveF94KTsNCiAgICArCQkJCQl9DQogICAgKwkJCQkJcG9zLS07
DQogICAgKwkJCQl9DQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJY2FzZSBLRVlfUklHSFQ6
DQogICAgKwkJCQlpZiAocG9zIDwgbGVuKSB7DQogICAgKwkJCQkJaWYgKGlucHV0X3ggPCBib3hf
d2lkdGggLSAxKSB7DQogICAgKwkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksICsraW5wdXRfeCAr
IGJveF94KTsNCiAgICArCQkJCQl9IGVsc2UgaWYgKGlucHV0X3ggPT0gYm94X3dpZHRoIC0gMSkg
ew0KICAgICsJCQkJCQlzaG93X3grKzsNCiAgICArCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwg
Ym94X3gpOw0KICAgICsJCQkJCQlmb3IgKGkgPSAwOyBpIDwgYm94X3dpZHRoOyBpKyspIHsNCiAg
ICArCQkJCQkJCWlmICghaW5zdHJbc2hvd194ICsgaV0pIHsNCiAgICArCQkJCQkJCQl3YWRkY2go
ZGlhbG9nLCAnICcpOw0KICAgICsJCQkJCQkJCWJyZWFrOw0KICAgICsJCQkJCQkJfQ0KICAgICsJ
CQkJCQkJd2FkZGNoKGRpYWxvZywgaW5zdHJbc2hvd194ICsgaV0pOw0KICAgICsJCQkJCQl9DQog
ICAgKwkJCQkJCXdtb3ZlKGRpYWxvZywgYm94X3ksIGlucHV0X3ggKyBib3hfeCk7DQogICAgKwkJ
CQkJfQ0KICAgICsJCQkJCXBvcysrOw0KICAgICsJCQkJfQ0KICAgICsJCQkJY29udGludWU7DQog
ICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQlpZiAoa2V5IDwgMHgxMDAgJiYgaXNwcmludChrZXkp
KSB7DQogICAgKwkJCQkJaWYgKGxlbiA8IE1BWF9MRU4pIHsNCiAgICArCQkJCQkJd2F0dHJzZXQo
ZGlhbG9nLCBkbGcuaW5wdXRib3guYXRyKTsNCiAgICArCQkJCQkJaWYgKHBvcyA8IGxlbikgew0K
ICAgICsJCQkJCQkJZm9yIChpID0gbGVuOyBpID4gcG9zOyBpLS0pDQogICAgKwkJCQkJCQkJaW5z
dHJbaV0gPSBpbnN0cltpLTFdOw0KICAgICsJCQkJCQkJaW5zdHJbcG9zXSA9IGtleTsNCiAgICAr
CQkJCQkJfSBlbHNlIHsNCiAgICArCQkJCQkJCWluc3RyW2xlbl0gPSBrZXk7DQogICAgKwkJCQkJ
CX0NCiAgICArCQkJCQkJcG9zKys7DQogICAgKwkJCQkJCWxlbisrOw0KICAgICsJCQkJCQlpbnN0
cltsZW5dID0gJ1wwJzsNCiAgICArDQogICAgKwkJCQkJCWlmIChpbnB1dF94ID09IGJveF93aWR0
aCAtIDEpIHsNCiAgICArCQkJCQkJCXNob3dfeCsrOw0KICAgICsJCQkJCQl9IGVsc2Ugew0KICAg
ICsJCQkJCQkJaW5wdXRfeCsrOw0KICAgICsJCQkJCQl9DQogICAgKw0KICAgICsJCQkJCQl3bW92
ZShkaWFsb2csIGJveF95LCBib3hfeCk7DQogICAgKwkJCQkJCWZvciAoaSA9IDA7IGkgPCBib3hf
d2lkdGg7IGkrKykgew0KICAgICsJCQkJCQkJaWYgKCFpbnN0cltzaG93X3ggKyBpXSkgew0KICAg
ICsJCQkJCQkJCXdhZGRjaChkaWFsb2csICcgJyk7DQogICAgKwkJCQkJCQkJYnJlYWs7DQogICAg
KwkJCQkJCQl9DQogICAgKwkJCQkJCQl3YWRkY2goZGlhbG9nLCBpbnN0cltzaG93X3ggKyBpXSk7
DQogICAgKwkJCQkJCX0NCiAgICArCQkJCQkJd21vdmUoZGlhbG9nLCBib3hfeSwgaW5wdXRfeCAr
IGJveF94KTsNCiAgICArCQkJCQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICArCQkJCQl9IGVsc2UN
CiAgICArCQkJCQkJZmxhc2goKTsJLyogQWxhcm0gdXNlciBhYm91dCBvdmVyZmxvdyAqLw0KICAg
ICsJCQkJCWNvbnRpbnVlOw0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJ
CXN3aXRjaCAoa2V5KSB7DQogICAgKwkJY2FzZSAnTyc6DQogICAgKwkJY2FzZSAnbyc6DQogICAg
KwkJCWRlbHdpbihkaWFsb2cpOw0KICAgICsJCQlyZXR1cm4gMDsNCiAgICArCQljYXNlICdIJzoN
CiAgICArCQljYXNlICdoJzoNCiAgICArCQkJZGVsd2luKGRpYWxvZyk7DQogICAgKwkJCXJldHVy
biAxOw0KICAgICsJCWNhc2UgS0VZX1VQOg0KICAgICsJCWNhc2UgS0VZX0xFRlQ6DQogICAgKwkJ
CXN3aXRjaCAoYnV0dG9uKSB7DQogICAgKwkJCWNhc2UgLTE6DQogICAgKwkJCQlidXR0b24gPSAx
OwkvKiBJbmRpY2F0ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLw0KICAgICsJCQkJcHJp
bnRfYnV0dG9ucyhkaWFsb2csIGhlaWdodCwgd2lkdGgsIDEpOw0KICAgICsJCQkJYnJlYWs7DQog
ICAgKwkJCWNhc2UgMDoNCiAgICArCQkJCWJ1dHRvbiA9IC0xOwkvKiBJbmRpY2F0ZXMgaW5wdXQg
Ym94IGlzIHNlbGVjdGVkICovDQogICAgKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0
LCB3aWR0aCwgMCk7DQogICAgKwkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0
X3gpOw0KICAgICsJCQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJ
CQljYXNlIDE6DQogICAgKwkJCQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24g
aXMgc2VsZWN0ZWQgKi8NCiAgICArCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdp
ZHRoLCAwKTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWNhc2UgVEFCOg0KICAgICsJCWNhc2UgS0VZX0RPV046DQogICAgKwkJY2FzZSBLRVlfUklH
SFQ6DQogICAgKwkJCXN3aXRjaCAoYnV0dG9uKSB7DQogICAgKwkJCWNhc2UgLTE6DQogICAgKwkJ
CQlidXR0b24gPSAwOwkvKiBJbmRpY2F0ZXMgIk9LIiBidXR0b24gaXMgc2VsZWN0ZWQgKi8NCiAg
ICArCQkJCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICArCQkJ
CWJyZWFrOw0KICAgICsJCQljYXNlIDA6DQogICAgKwkJCQlidXR0b24gPSAxOwkvKiBJbmRpY2F0
ZXMgIkhlbHAiIGJ1dHRvbiBpcyBzZWxlY3RlZCAqLw0KICAgICsJCQkJcHJpbnRfYnV0dG9ucyhk
aWFsb2csIGhlaWdodCwgd2lkdGgsIDEpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2Ug
MToNCiAgICArCQkJCWJ1dHRvbiA9IC0xOwkvKiBJbmRpY2F0ZXMgaW5wdXQgYm94IGlzIHNlbGVj
dGVkICovDQogICAgKwkJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgMCk7
DQogICAgKwkJCQl3bW92ZShkaWFsb2csIGJveF95LCBib3hfeCArIGlucHV0X3gpOw0KICAgICsJ
CQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJ
CWJyZWFrOw0KICAgICsJCWNhc2UgJyAnOg0KICAgICsJCWNhc2UgJ1xuJzoNCiAgICArCQkJZGVs
d2luKGRpYWxvZyk7DQogICAgKwkJCXJldHVybiAoYnV0dG9uID09IC0xID8gMCA6IGJ1dHRvbik7
DQogICAgKwkJY2FzZSAnWCc6DQogICAgKwkJY2FzZSAneCc6DQogICAgKwkJCWtleSA9IEtFWV9F
U0M7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX0VTQzoNCiAgICArCQkJa2V5ID0g
b25fa2V5X2VzYyhkaWFsb2cpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9SRVNJ
WkU6DQogICAgKwkJCWRlbHdpbihkaWFsb2cpOw0KICAgICsJCQlvbl9rZXlfcmVzaXplKCk7DQog
ICAgKwkJCWdvdG8gZG9fcmVzaXplOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwlk
ZWx3aW4oZGlhbG9nKTsNCiAgICArCXJldHVybiBLRVlfRVNDOwkJLyogRVNDIHByZXNzZWQgKi8N
CiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvbWVudWJv
eC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL21lbnVib3guYw0KICAgIG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNThjMmY4YQ0KICAgIC0tLSAvZGV2L251bGwN
CiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvbWVudWJveC5jDQogICAgQEAgLTAs
MCArMSw0MjQgQEANCiAgICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArDQog
ICAgKy8qDQogICAgKyAqICBtZW51Ym94LmMgLS0gaW1wbGVtZW50cyB0aGUgbWVudSBib3gNCiAg
ICArICoNCiAgICArICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Vo
ay5oaykNCiAgICArICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxs
aWFtIFJvYWRjYXAgKHJvYWRjYXB3QGNmdy5jb20pDQogICAgKyAqLw0KICAgICsNCiAgICArLyoN
CiAgICArICogIENoYW5nZXMgYnkgQ2xpZmZvcmQgV29sZiAoZ29kQGNsaWZmb3JkLmF0KQ0KICAg
ICsgKg0KICAgICsgKiAgWyAxOTk4LTA2LTEzIF0NCiAgICArICoNCiAgICArICogICAgKikgIEEg
YnVnZml4IGZvciB0aGUgUGFnZS1Eb3duIHByb2JsZW0NCiAgICArICoNCiAgICArICogICAgKikg
IEZvcm1lcmx5IHdoZW4gSSB1c2VkIFBhZ2UgRG93biBhbmQgUGFnZSBVcCwgdGhlIGN1cnNvciB3
b3VsZCBiZSBzZXQNCiAgICArICogICAgICAgIHRvIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiB0aGUg
bWVudSBib3guICBOb3cgbHhkaWFsb2cgaXMgYSBiaXQNCiAgICArICogICAgICAgIHNtYXJ0ZXIg
YW5kIHdvcmtzIG1vcmUgbGlrZSBvdGhlciBtZW51IHN5c3RlbXMgKGp1c3QgaGF2ZSBhIGxvb2sg
YXQNCiAgICArICogICAgICAgIGl0KS4NCiAgICArICoNCiAgICArICogICAgKikgIEZvcm1lcmx5
IGlmIEkgc2VsZWN0ZWQgc29tZXRoaW5nIG15IHNjcm9sbGluZyB3b3VsZCBiZSBicm9rZW4gYmVj
YXVzZQ0KICAgICsgKiAgICAgICAgbHhkaWFsb2cgaXMgcmUtaW52b2tlZCBieSB0aGUgTWVudWNv
bmZpZyBzaGVsbCBzY3JpcHQsIGNhbid0DQogICAgKyAqICAgICAgICByZW1lbWJlciB0aGUgbGFz
dCBzY3JvbGxpbmcgcG9zaXRpb24sIGFuZCBqdXN0IHNldHMgaXQgc28gdGhhdCB0aGUNCiAgICAr
ICogICAgICAgIGN1cnNvciBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBib3guICBOb3cgaXQgd3Jp
dGVzIHRoZSB0ZW1wb3JhcnkgZmlsZQ0KICAgICsgKiAgICAgICAgbHhkaWFsb2cuc2NybHRtcCB3
aGljaCBjb250YWlucyB0aGlzIGluZm9ybWF0aW9uLiBUaGUgZmlsZSBpcw0KICAgICsgKiAgICAg
ICAgZGVsZXRlZCBieSBseGRpYWxvZyBpZiB0aGUgdXNlciBsZWF2ZXMgYSBzdWJtZW51IG9yIGVu
dGVycyBhIG5ldw0KICAgICsgKiAgICAgICAgb25lLCBidXQgaXQgd291bGQgYmUgbmljZSBpZiBN
ZW51Y29uZmlnIGNvdWxkIG1ha2UgYW5vdGhlciAicm0gLWYiDQogICAgKyAqICAgICAgICBqdXN0
IHRvIGJlIHN1cmUuICBKdXN0IHRyeSBpdCBvdXQgLSB5b3Ugd2lsbCByZWNvZ25pc2UgYSBkaWZm
ZXJlbmNlIQ0KICAgICsgKg0KICAgICsgKiAgWyAxOTk4LTA2LTE0IF0NCiAgICArICoNCiAgICAr
ICogICAgKikgIE5vdyBseGRpYWxvZyBpcyBjcmFzaC1zYWZlIGFnYWluc3QgYnJva2VuICJseGRp
YWxvZy5zY3JsdG1wIiBmaWxlcw0KICAgICsgKiAgICAgICAgYW5kIG1lbnVzIGNoYW5nZSB0aGVp
ciBzaXplIG9uIHRoZSBmbHkuDQogICAgKyAqDQogICAgKyAqICAgICopICBJZiBmb3Igc29tZSBy
ZWFzb24gdGhlIGxhc3Qgc2Nyb2xsaW5nIHBvc2l0aW9uIGlzIG5vdCBzYXZlZCBieQ0KICAgICsg
KiAgICAgICAgbHhkaWFsb2csIGl0IHNldHMgdGhlIHNjcm9sbGluZyBzbyB0aGF0IHRoZSBzZWxl
Y3RlZCBpdGVtIGlzIGluIHRoZQ0KICAgICsgKiAgICAgICAgbWlkZGxlIG9mIHRoZSBtZW51IGJv
eCwgbm90IGF0IHRoZSBib3R0b20uDQogICAgKyAqDQogICAgKyAqIDAyIEphbnVhcnkgMTk5OSwg
TWljaGFlbCBFbGl6YWJldGggQ2hhc3RhaW4gKG1lY0BzaG91dC5uZXQpDQogICAgKyAqIFJlc2V0
ICdzY3JvbGwnIHRvIDAgaWYgdGhlIHZhbHVlIGZyb20gbHhkaWFsb2cuc2NybHRtcCBpcyBib2d1
cy4NCiAgICArICogVGhpcyBmaXhlcyBhIGJ1ZyBpbiBNZW51Y29uZmlnIHdoZXJlIHVzaW5nICcg
JyB0byBkZXNjZW5kIGludG8gbWVudXMNCiAgICArICogd291bGQgbGVhdmUgbWlzLXN5bmNocm9u
aXplZCBseGRpYWxvZy5zY3JsdG1wIGZpbGVzIGx5aW5nIGFyb3VuZCwNCiAgICArICogZnNjYW5m
IHdvdWxkIHJlYWQgaW4gJ3Njcm9sbCcsIGFuZCBldmVudHVhbGx5IHRoYXQgdmFsdWUgd291bGQg
Z2V0IHVzZWQuDQogICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgImRpYWxvZy5oIg0KICAg
ICsNCiAgICArc3RhdGljIGludCBtZW51X3dpZHRoLCBpdGVtX3g7DQogICAgKw0KICAgICsvKg0K
ICAgICsgKiBQcmludCBtZW51IGl0ZW0NCiAgICArICovDQogICAgK3N0YXRpYyB2b2lkIGRvX3By
aW50X2l0ZW0oV0lORE9XICogd2luLCBjb25zdCBjaGFyICppdGVtLCBpbnQgbGluZV95LA0KICAg
ICsJCQkgIGludCBzZWxlY3RlZCwgaW50IGhvdGtleSkNCiAgICArew0KICAgICsJaW50IGo7DQog
ICAgKwljaGFyICptZW51X2l0ZW0gPSBtYWxsb2MobWVudV93aWR0aCArIDEpOw0KICAgICsNCiAg
ICArCXN0cm5jcHkobWVudV9pdGVtLCBpdGVtLCBtZW51X3dpZHRoIC0gaXRlbV94KTsNCiAgICAr
CW1lbnVfaXRlbVttZW51X3dpZHRoIC0gaXRlbV94XSA9ICdcMCc7DQogICAgKwlqID0gZmlyc3Rf
YWxwaGEobWVudV9pdGVtLCAiWXlObk1tSGgiKTsNCiAgICArDQogICAgKwkvKiBDbGVhciAncmVz
aWR1ZScgb2YgbGFzdCBpdGVtICovDQogICAgKwl3YXR0cnNldCh3aW4sIGRsZy5tZW51Ym94LmF0
cik7DQogICAgKwl3bW92ZSh3aW4sIGxpbmVfeSwgMCk7DQogICAgKyNpZiBPTERfTkNVUlNFUw0K
ICAgICsJew0KICAgICsJCWludCBpOw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCBtZW51X3dpZHRo
OyBpKyspDQogICAgKwkJCXdhZGRjaCh3aW4sICcgJyk7DQogICAgKwl9DQogICAgKyNlbHNlDQog
ICAgKwl3Y2xydG9lb2wod2luKTsNCiAgICArI2VuZGlmDQogICAgKwl3YXR0cnNldCh3aW4sIHNl
bGVjdGVkID8gZGxnLml0ZW1fc2VsZWN0ZWQuYXRyIDogZGxnLml0ZW0uYXRyKTsNCiAgICArCW12
d2FkZHN0cih3aW4sIGxpbmVfeSwgaXRlbV94LCBtZW51X2l0ZW0pOw0KICAgICsJaWYgKGhvdGtl
eSkgew0KICAgICsJCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcudGFnX2tleV9zZWxlY3Rl
ZC5hdHINCiAgICArCQkJIDogZGxnLnRhZ19rZXkuYXRyKTsNCiAgICArCQltdndhZGRjaCh3aW4s
IGxpbmVfeSwgaXRlbV94ICsgaiwgbWVudV9pdGVtW2pdKTsNCiAgICArCX0NCiAgICArCWlmIChz
ZWxlY3RlZCkgew0KICAgICsJCXdtb3ZlKHdpbiwgbGluZV95LCBpdGVtX3ggKyAxKTsNCiAgICAr
CX0NCiAgICArCWZyZWUobWVudV9pdGVtKTsNCiAgICArCXdyZWZyZXNoKHdpbik7DQogICAgK30N
CiAgICArDQogICAgKyNkZWZpbmUgcHJpbnRfaXRlbShpbmRleCwgY2hvaWNlLCBzZWxlY3RlZCkJ
CQkJXA0KICAgICtkbyB7CQkJCQkJCQkJXA0KICAgICsJaXRlbV9zZXQoaW5kZXgpOwkJCQkJCVwN
CiAgICArCWRvX3ByaW50X2l0ZW0obWVudSwgaXRlbV9zdHIoKSwgY2hvaWNlLCBzZWxlY3RlZCwg
IWl0ZW1faXNfdGFnKCc6JykpOyBcDQogICAgK30gd2hpbGUgKDApDQogICAgKw0KICAgICsvKg0K
ICAgICsgKiBQcmludCB0aGUgc2Nyb2xsIGluZGljYXRvcnMuDQogICAgKyAqLw0KICAgICtzdGF0
aWMgdm9pZCBwcmludF9hcnJvd3MoV0lORE9XICogd2luLCBpbnQgaXRlbV9ubywgaW50IHNjcm9s
bCwgaW50IHksIGludCB4LA0KICAgICsJCQkgaW50IGhlaWdodCkNCiAgICArew0KICAgICsJaW50
IGN1cl95LCBjdXJfeDsNCiAgICArDQogICAgKwlnZXR5eCh3aW4sIGN1cl95LCBjdXJfeCk7DQog
ICAgKw0KICAgICsJd21vdmUod2luLCB5LCB4KTsNCiAgICArDQogICAgKwlpZiAoc2Nyb2xsID4g
MCkgew0KICAgICsJCXdhdHRyc2V0KHdpbiwgZGxnLnVhcnJvdy5hdHIpOw0KICAgICsJCXdhZGRj
aCh3aW4sIEFDU19VQVJST1cpOw0KICAgICsJCXdhZGRzdHIod2luLCAiKC0pIik7DQogICAgKwl9
IGVsc2Ugew0KICAgICsJCXdhdHRyc2V0KHdpbiwgZGxnLm1lbnVib3guYXRyKTsNCiAgICArCQl3
YWRkY2god2luLCBBQ1NfSExJTkUpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQog
ICAgKwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCQl3YWRkY2god2luLCBBQ1NfSExJ
TkUpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXkgPSB5ICsgaGVpZ2h0ICsgMTsNCiAgICArCXdt
b3ZlKHdpbiwgeSwgeCk7DQogICAgKwl3cmVmcmVzaCh3aW4pOw0KICAgICsNCiAgICArCWlmICgo
aGVpZ2h0IDwgaXRlbV9ubykgJiYgKHNjcm9sbCArIGhlaWdodCA8IGl0ZW1fbm8pKSB7DQogICAg
KwkJd2F0dHJzZXQod2luLCBkbGcuZGFycm93LmF0cik7DQogICAgKwkJd2FkZGNoKHdpbiwgQUNT
X0RBUlJPVyk7DQogICAgKwkJd2FkZHN0cih3aW4sICIoKykiKTsNCiAgICArCX0gZWxzZSB7DQog
ICAgKwkJd2F0dHJzZXQod2luLCBkbGcubWVudWJveF9ib3JkZXIuYXRyKTsNCiAgICArCQl3YWRk
Y2god2luLCBBQ1NfSExJTkUpOw0KICAgICsJCXdhZGRjaCh3aW4sIEFDU19ITElORSk7DQogICAg
KwkJd2FkZGNoKHdpbiwgQUNTX0hMSU5FKTsNCiAgICArCQl3YWRkY2god2luLCBBQ1NfSExJTkUp
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXdtb3ZlKHdpbiwgY3VyX3ksIGN1cl94KTsNCiAgICAr
CXdyZWZyZXNoKHdpbik7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIERpc3BsYXkg
dGhlIHRlcm1pbmF0aW9uIGJ1dHRvbnMuDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBwcmlu
dF9idXR0b25zKFdJTkRPVyAqIHdpbiwgaW50IGhlaWdodCwgaW50IHdpZHRoLCBpbnQgc2VsZWN0
ZWQpDQogICAgK3sNCiAgICArCWludCB4ID0gd2lkdGggLyAyIC0gMjg7DQogICAgKwlpbnQgeSA9
IGhlaWdodCAtIDI7DQogICAgKw0KICAgICsJcHJpbnRfYnV0dG9uKHdpbiwgIlNlbGVjdCIsIHks
IHgsIHNlbGVjdGVkID09IDApOw0KICAgICsJcHJpbnRfYnV0dG9uKHdpbiwgIiBFeGl0ICIsIHks
IHggKyAxMiwgc2VsZWN0ZWQgPT0gMSk7DQogICAgKwlwcmludF9idXR0b24od2luLCAiIEhlbHAg
IiwgeSwgeCArIDI0LCBzZWxlY3RlZCA9PSAyKTsNCiAgICArCXByaW50X2J1dHRvbih3aW4sICIg
U2F2ZSAiLCB5LCB4ICsgMzYsIHNlbGVjdGVkID09IDMpOw0KICAgICsJcHJpbnRfYnV0dG9uKHdp
biwgIiBMb2FkICIsIHksIHggKyA0OCwgc2VsZWN0ZWQgPT0gNCk7DQogICAgKw0KICAgICsJd21v
dmUod2luLCB5LCB4ICsgMSArIDEyICogc2VsZWN0ZWQpOw0KICAgICsJd3JlZnJlc2god2luKTsN
CiAgICArfQ0KICAgICsNCiAgICArLyogc2Nyb2xsIHVwIG4gbGluZXMgKG4gbWF5IGJlIG5lZ2F0
aXZlKSAqLw0KICAgICtzdGF0aWMgdm9pZCBkb19zY3JvbGwoV0lORE9XICp3aW4sIGludCAqc2Ny
b2xsLCBpbnQgbikNCiAgICArew0KICAgICsJLyogU2Nyb2xsIG1lbnUgdXAgKi8NCiAgICArCXNj
cm9sbG9rKHdpbiwgVFJVRSk7DQogICAgKwl3c2NybCh3aW4sIG4pOw0KICAgICsJc2Nyb2xsb2so
d2luLCBGQUxTRSk7DQogICAgKwkqc2Nyb2xsID0gKnNjcm9sbCArIG47DQogICAgKwl3cmVmcmVz
aCh3aW4pOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBEaXNwbGF5IGEgbWVudSBm
b3IgY2hvb3NpbmcgYW1vbmcgYSBudW1iZXIgb2Ygb3B0aW9ucw0KICAgICsgKi8NCiAgICAraW50
IGRpYWxvZ19tZW51KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsDQogICAg
KwkJY29uc3Qgdm9pZCAqc2VsZWN0ZWQsIGludCAqc19zY3JvbGwpDQogICAgK3sNCiAgICArCWlu
dCBpLCBqLCB4LCB5LCBib3hfeCwgYm94X3k7DQogICAgKwlpbnQgaGVpZ2h0LCB3aWR0aCwgbWVu
dV9oZWlnaHQ7DQogICAgKwlpbnQga2V5ID0gMCwgYnV0dG9uID0gMCwgc2Nyb2xsID0gMCwgY2hv
aWNlID0gMDsNCiAgICArCWludCBmaXJzdF9pdGVtID0gIDAsIG1heF9jaG9pY2U7DQogICAgKwlX
SU5ET1cgKmRpYWxvZywgKm1lbnU7DQogICAgKw0KICAgICtkb19yZXNpemU6DQogICAgKwloZWln
aHQgPSBnZXRtYXh5KHN0ZHNjcik7DQogICAgKwl3aWR0aCA9IGdldG1heHgoc3Rkc2NyKTsNCiAg
ICArCWlmIChoZWlnaHQgPCBNRU5VQk9YX0hFSUdUSF9NSU4gfHwgd2lkdGggPCBNRU5VQk9YX1dJ
RFRIX01JTikNCiAgICArCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICArDQogICAg
KwloZWlnaHQgLT0gNDsNCiAgICArCXdpZHRoICAtPSA1Ow0KICAgICsJbWVudV9oZWlnaHQgPSBo
ZWlnaHQgLSAxMDsNCiAgICArDQogICAgKwltYXhfY2hvaWNlID0gTUlOKG1lbnVfaGVpZ2h0LCBp
dGVtX2NvdW50KCkpOw0KICAgICsNCiAgICArCS8qIGNlbnRlciBkaWFsb2cgYm94IG9uIHNjcmVl
biAqLw0KICAgICsJeCA9IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0aCkgLyAyOw0KICAgICsJeSA9
IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsNCiAgICArDQogICAgKwlkcmF3X3NoYWRv
dyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOw0KICAgICsNCiAgICArCWRpYWxvZyA9IG5l
d3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsNCiAgICArCWtleXBhZChkaWFsb2csIFRSVUUpOw0K
ICAgICsNCiAgICArCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0aCwNCiAgICAr
CQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsNCiAgICArCXdhdHRyc2V0KGRpYWxv
ZywgZGxnLmJvcmRlci5hdHIpOw0KICAgICsJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAw
LCBBQ1NfTFRFRSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBpKyspDQogICAg
KwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsNCiAgICArCXdhdHRyc2V0KGRpYWxvZywgZGxn
LmRpYWxvZy5hdHIpOw0KICAgICsJd2JrZ2RzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0ciAmIEFf
Q09MT1IpOw0KICAgICsJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOw0KICAgICsNCiAgICArCXBy
aW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsNCiAgICArDQogICAgKwl3YXR0cnNldChk
aWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICArCXByaW50X2F1dG93cmFwKGRpYWxvZywgcHJv
bXB0LCB3aWR0aCAtIDIsIDEsIDMpOw0KICAgICsNCiAgICArCW1lbnVfd2lkdGggPSB3aWR0aCAt
IDY7DQogICAgKwlib3hfeSA9IGhlaWdodCAtIG1lbnVfaGVpZ2h0IC0gNTsNCiAgICArCWJveF94
ID0gKHdpZHRoIC0gbWVudV93aWR0aCkgLyAyIC0gMTsNCiAgICArDQogICAgKwkvKiBjcmVhdGUg
bmV3IHdpbmRvdyBmb3IgdGhlIG1lbnUgKi8NCiAgICArCW1lbnUgPSBzdWJ3aW4oZGlhbG9nLCBt
ZW51X2hlaWdodCwgbWVudV93aWR0aCwNCiAgICArCQkgICAgICB5ICsgYm94X3kgKyAxLCB4ICsg
Ym94X3ggKyAxKTsNCiAgICArCWtleXBhZChtZW51LCBUUlVFKTsNCiAgICArDQogICAgKwkvKiBk
cmF3IGEgYm94IGFyb3VuZCB0aGUgbWVudSBpdGVtcyAqLw0KICAgICsJZHJhd19ib3goZGlhbG9n
LCBib3hfeSwgYm94X3gsIG1lbnVfaGVpZ2h0ICsgMiwgbWVudV93aWR0aCArIDIsDQogICAgKwkJ
IGRsZy5tZW51Ym94X2JvcmRlci5hdHIsIGRsZy5tZW51Ym94LmF0cik7DQogICAgKw0KICAgICsJ
aWYgKG1lbnVfd2lkdGggPj0gODApDQogICAgKwkJaXRlbV94ID0gKG1lbnVfd2lkdGggLSA3MCkg
LyAyOw0KICAgICsJZWxzZQ0KICAgICsJCWl0ZW1feCA9IDQ7DQogICAgKw0KICAgICsJLyogU2V0
IGNob2ljZSB0byBkZWZhdWx0IGl0ZW0gKi8NCiAgICArCWl0ZW1fZm9yZWFjaCgpDQogICAgKwkJ
aWYgKHNlbGVjdGVkICYmIChzZWxlY3RlZCA9PSBpdGVtX2RhdGEoKSkpDQogICAgKwkJCWNob2lj
ZSA9IGl0ZW1fbigpOw0KICAgICsJLyogZ2V0IHRoZSBzYXZlZCBzY3JvbGwgaW5mbyAqLw0KICAg
ICsJc2Nyb2xsID0gKnNfc2Nyb2xsOw0KICAgICsJaWYgKChzY3JvbGwgPD0gY2hvaWNlKSAmJiAo
c2Nyb2xsICsgbWF4X2Nob2ljZSA+IGNob2ljZSkgJiYNCiAgICArCSAgIChzY3JvbGwgPj0gMCkg
JiYgKHNjcm9sbCArIG1heF9jaG9pY2UgPD0gaXRlbV9jb3VudCgpKSkgew0KICAgICsJCWZpcnN0
X2l0ZW0gPSBzY3JvbGw7DQogICAgKwkJY2hvaWNlID0gY2hvaWNlIC0gc2Nyb2xsOw0KICAgICsJ
fSBlbHNlIHsNCiAgICArCQlzY3JvbGwgPSAwOw0KICAgICsJfQ0KICAgICsJaWYgKChjaG9pY2Ug
Pj0gbWF4X2Nob2ljZSkpIHsNCiAgICArCQlpZiAoY2hvaWNlID49IGl0ZW1fY291bnQoKSAtIG1h
eF9jaG9pY2UgLyAyKQ0KICAgICsJCQlzY3JvbGwgPSBmaXJzdF9pdGVtID0gaXRlbV9jb3VudCgp
IC0gbWF4X2Nob2ljZTsNCiAgICArCQllbHNlDQogICAgKwkJCXNjcm9sbCA9IGZpcnN0X2l0ZW0g
PSBjaG9pY2UgLSBtYXhfY2hvaWNlIC8gMjsNCiAgICArCQljaG9pY2UgPSBjaG9pY2UgLSBzY3Jv
bGw7DQogICAgKwl9DQogICAgKw0KICAgICsJLyogUHJpbnQgdGhlIG1lbnUgKi8NCiAgICArCWZv
ciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNlOyBpKyspIHsNCiAgICArCQlwcmludF9pdGVtKGZpcnN0
X2l0ZW0gKyBpLCBpLCBpID09IGNob2ljZSk7DQogICAgKwl9DQogICAgKw0KICAgICsJd25vdXRy
ZWZyZXNoKG1lbnUpOw0KICAgICsNCiAgICArCXByaW50X2Fycm93cyhkaWFsb2csIGl0ZW1fY291
bnQoKSwgc2Nyb2xsLA0KICAgICsJCSAgICAgYm94X3ksIGJveF94ICsgaXRlbV94ICsgMSwgbWVu
dV9oZWlnaHQpOw0KICAgICsNCiAgICArCXByaW50X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdp
ZHRoLCAwKTsNCiAgICArCXdtb3ZlKG1lbnUsIGNob2ljZSwgaXRlbV94ICsgMSk7DQogICAgKwl3
cmVmcmVzaChtZW51KTsNCiAgICArDQogICAgKwl3aGlsZSAoa2V5ICE9IEtFWV9FU0MpIHsNCiAg
ICArCQlrZXkgPSB3Z2V0Y2gobWVudSk7DQogICAgKw0KICAgICsJCWlmIChrZXkgPCAyNTYgJiYg
aXNhbHBoYShrZXkpKQ0KICAgICsJCQlrZXkgPSB0b2xvd2VyKGtleSk7DQogICAgKw0KICAgICsJ
CWlmIChzdHJjaHIoInlubWgiLCBrZXkpKQ0KICAgICsJCQlpID0gbWF4X2Nob2ljZTsNCiAgICAr
CQllbHNlIHsNCiAgICArCQkJZm9yIChpID0gY2hvaWNlICsgMTsgaSA8IG1heF9jaG9pY2U7IGkr
Kykgew0KICAgICsJCQkJaXRlbV9zZXQoc2Nyb2xsICsgaSk7DQogICAgKwkJCQlqID0gZmlyc3Rf
YWxwaGEoaXRlbV9zdHIoKSwgIll5Tm5NbUhoIik7DQogICAgKwkJCQlpZiAoa2V5ID09IHRvbG93
ZXIoaXRlbV9zdHIoKVtqXSkpDQogICAgKwkJCQkJYnJlYWs7DQogICAgKwkJCX0NCiAgICArCQkJ
aWYgKGkgPT0gbWF4X2Nob2ljZSkNCiAgICArCQkJCWZvciAoaSA9IDA7IGkgPCBtYXhfY2hvaWNl
OyBpKyspIHsNCiAgICArCQkJCQlpdGVtX3NldChzY3JvbGwgKyBpKTsNCiAgICArCQkJCQlqID0g
Zmlyc3RfYWxwaGEoaXRlbV9zdHIoKSwgIll5Tm5NbUhoIik7DQogICAgKwkJCQkJaWYgKGtleSA9
PSB0b2xvd2VyKGl0ZW1fc3RyKClbal0pKQ0KICAgICsJCQkJCQlicmVhazsNCiAgICArCQkJCX0N
CiAgICArCQl9DQogICAgKw0KICAgICsJCWlmIChpdGVtX2NvdW50KCkgIT0gMCAmJg0KICAgICsJ
CSAgICAoaSA8IG1heF9jaG9pY2UgfHwNCiAgICArCQkgICAgIGtleSA9PSBLRVlfVVAgfHwga2V5
ID09IEtFWV9ET1dOIHx8DQogICAgKwkJICAgICBrZXkgPT0gJy0nIHx8IGtleSA9PSAnKycgfHwN
CiAgICArCQkgICAgIGtleSA9PSBLRVlfUFBBR0UgfHwga2V5ID09IEtFWV9OUEFHRSkpIHsNCiAg
ICArCQkJLyogUmVtb3ZlIGhpZ2hsaWd0IG9mIGN1cnJlbnQgaXRlbSAqLw0KICAgICsJCQlwcmlu
dF9pdGVtKHNjcm9sbCArIGNob2ljZSwgY2hvaWNlLCBGQUxTRSk7DQogICAgKw0KICAgICsJCQlp
ZiAoa2V5ID09IEtFWV9VUCB8fCBrZXkgPT0gJy0nKSB7DQogICAgKwkJCQlpZiAoY2hvaWNlIDwg
MiAmJiBzY3JvbGwpIHsNCiAgICArCQkJCQkvKiBTY3JvbGwgbWVudSBkb3duICovDQogICAgKwkJ
CQkJZG9fc2Nyb2xsKG1lbnUsICZzY3JvbGwsIC0xKTsNCiAgICArDQogICAgKwkJCQkJcHJpbnRf
aXRlbShzY3JvbGwsIDAsIEZBTFNFKTsNCiAgICArCQkJCX0gZWxzZQ0KICAgICsJCQkJCWNob2lj
ZSA9IE1BWChjaG9pY2UgLSAxLCAwKTsNCiAgICArDQogICAgKwkJCX0gZWxzZSBpZiAoa2V5ID09
IEtFWV9ET1dOIHx8IGtleSA9PSAnKycpIHsNCiAgICArCQkJCXByaW50X2l0ZW0oc2Nyb2xsK2No
b2ljZSwgY2hvaWNlLCBGQUxTRSk7DQogICAgKw0KICAgICsJCQkJaWYgKChjaG9pY2UgPiBtYXhf
Y2hvaWNlIC0gMykgJiYNCiAgICArCQkJCSAgICAoc2Nyb2xsICsgbWF4X2Nob2ljZSA8IGl0ZW1f
Y291bnQoKSkpIHsNCiAgICArCQkJCQkvKiBTY3JvbGwgbWVudSB1cCAqLw0KICAgICsJCQkJCWRv
X3Njcm9sbChtZW51LCAmc2Nyb2xsLCAxKTsNCiAgICArDQogICAgKwkJCQkJcHJpbnRfaXRlbShz
Y3JvbGwrbWF4X2Nob2ljZSAtIDEsDQogICAgKwkJCQkJCSAgIG1heF9jaG9pY2UgLSAxLCBGQUxT
RSk7DQogICAgKwkJCQl9IGVsc2UNCiAgICArCQkJCQljaG9pY2UgPSBNSU4oY2hvaWNlICsgMSwg
bWF4X2Nob2ljZSAtIDEpOw0KICAgICsNCiAgICArCQkJfSBlbHNlIGlmIChrZXkgPT0gS0VZX1BQ
QUdFKSB7DQogICAgKwkJCQlzY3JvbGxvayhtZW51LCBUUlVFKTsNCiAgICArCQkJCWZvciAoaSA9
IDA7IChpIDwgbWF4X2Nob2ljZSk7IGkrKykgew0KICAgICsJCQkJCWlmIChzY3JvbGwgPiAwKSB7
DQogICAgKwkJCQkJCWRvX3Njcm9sbChtZW51LCAmc2Nyb2xsLCAtMSk7DQogICAgKwkJCQkJCXBy
aW50X2l0ZW0oc2Nyb2xsLCAwLCBGQUxTRSk7DQogICAgKwkJCQkJfSBlbHNlIHsNCiAgICArCQkJ
CQkJaWYgKGNob2ljZSA+IDApDQogICAgKwkJCQkJCQljaG9pY2UtLTsNCiAgICArCQkJCQl9DQog
ICAgKwkJCQl9DQogICAgKw0KICAgICsJCQl9IGVsc2UgaWYgKGtleSA9PSBLRVlfTlBBR0UpIHsN
CiAgICArCQkJCWZvciAoaSA9IDA7IChpIDwgbWF4X2Nob2ljZSk7IGkrKykgew0KICAgICsJCQkJ
CWlmIChzY3JvbGwgKyBtYXhfY2hvaWNlIDwgaXRlbV9jb3VudCgpKSB7DQogICAgKwkJCQkJCWRv
X3Njcm9sbChtZW51LCAmc2Nyb2xsLCAxKTsNCiAgICArCQkJCQkJcHJpbnRfaXRlbShzY3JvbGwr
bWF4X2Nob2ljZS0xLA0KICAgICsJCQkJCQkJICAgbWF4X2Nob2ljZSAtIDEsIEZBTFNFKTsNCiAg
ICArCQkJCQl9IGVsc2Ugew0KICAgICsJCQkJCQlpZiAoY2hvaWNlICsgMSA8IG1heF9jaG9pY2Up
DQogICAgKwkJCQkJCQljaG9pY2UrKzsNCiAgICArCQkJCQl9DQogICAgKwkJCQl9DQogICAgKwkJ
CX0gZWxzZQ0KICAgICsJCQkJY2hvaWNlID0gaTsNCiAgICArDQogICAgKwkJCXByaW50X2l0ZW0o
c2Nyb2xsICsgY2hvaWNlLCBjaG9pY2UsIFRSVUUpOw0KICAgICsNCiAgICArCQkJcHJpbnRfYXJy
b3dzKGRpYWxvZywgaXRlbV9jb3VudCgpLCBzY3JvbGwsDQogICAgKwkJCQkgICAgIGJveF95LCBi
b3hfeCArIGl0ZW1feCArIDEsIG1lbnVfaGVpZ2h0KTsNCiAgICArDQogICAgKwkJCXdub3V0cmVm
cmVzaChkaWFsb2cpOw0KICAgICsJCQl3cmVmcmVzaChtZW51KTsNCiAgICArDQogICAgKwkJCWNv
bnRpbnVlOwkvKiB3YWl0IGZvciBhbm90aGVyIGtleSBwcmVzcyAqLw0KICAgICsJCX0NCiAgICAr
DQogICAgKwkJc3dpdGNoIChrZXkpIHsNCiAgICArCQljYXNlIEtFWV9MRUZUOg0KICAgICsJCWNh
c2UgVEFCOg0KICAgICsJCWNhc2UgS0VZX1JJR0hUOg0KICAgICsJCQlidXR0b24gPSAoKGtleSA9
PSBLRVlfTEVGVCA/IC0tYnV0dG9uIDogKytidXR0b24pIDwgMCkNCiAgICArCQkJICAgID8gNCA6
IChidXR0b24gPiA0ID8gMCA6IGJ1dHRvbik7DQogICAgKw0KICAgICsJCQlwcmludF9idXR0b25z
KGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgYnV0dG9uKTsNCiAgICArCQkJd3JlZnJlc2gobWVudSk7
DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJyAnOg0KICAgICsJCWNhc2UgJ3MnOg0KICAg
ICsJCWNhc2UgJ3knOg0KICAgICsJCWNhc2UgJ24nOg0KICAgICsJCWNhc2UgJ20nOg0KICAgICsJ
CWNhc2UgJy8nOg0KICAgICsJCWNhc2UgJ2gnOg0KICAgICsJCWNhc2UgJz8nOg0KICAgICsJCWNh
c2UgJ3onOg0KICAgICsJCWNhc2UgJ1xuJzoNCiAgICArCQkJLyogc2F2ZSBzY3JvbGwgaW5mbyAq
Lw0KICAgICsJCQkqc19zY3JvbGwgPSBzY3JvbGw7DQogICAgKwkJCWRlbHdpbihtZW51KTsNCiAg
ICArCQkJZGVsd2luKGRpYWxvZyk7DQogICAgKwkJCWl0ZW1fc2V0KHNjcm9sbCArIGNob2ljZSk7
DQogICAgKwkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOw0KICAgICsJCQlzd2l0Y2ggKGtleSkgew0K
ICAgICsJCQljYXNlICdoJzoNCiAgICArCQkJY2FzZSAnPyc6DQogICAgKwkJCQlyZXR1cm4gMjsN
CiAgICArCQkJY2FzZSAncyc6DQogICAgKwkJCWNhc2UgJ3knOg0KICAgICsJCQkJcmV0dXJuIDU7
DQogICAgKwkJCWNhc2UgJ24nOg0KICAgICsJCQkJcmV0dXJuIDY7DQogICAgKwkJCWNhc2UgJ20n
Og0KICAgICsJCQkJcmV0dXJuIDc7DQogICAgKwkJCWNhc2UgJyAnOg0KICAgICsJCQkJcmV0dXJu
IDg7DQogICAgKwkJCWNhc2UgJy8nOg0KICAgICsJCQkJcmV0dXJuIDk7DQogICAgKwkJCWNhc2Ug
J3onOg0KICAgICsJCQkJcmV0dXJuIDEwOw0KICAgICsJCQljYXNlICdcbic6DQogICAgKwkJCQly
ZXR1cm4gYnV0dG9uOw0KICAgICsJCQl9DQogICAgKwkJCXJldHVybiAwOw0KICAgICsJCWNhc2Ug
J2UnOg0KICAgICsJCWNhc2UgJ3gnOg0KICAgICsJCQlrZXkgPSBLRVlfRVNDOw0KICAgICsJCQli
cmVhazsNCiAgICArCQljYXNlIEtFWV9FU0M6DQogICAgKwkJCWtleSA9IG9uX2tleV9lc2MobWVu
dSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX1JFU0laRToNCiAgICArCQkJb25f
a2V5X3Jlc2l6ZSgpOw0KICAgICsJCQlkZWx3aW4obWVudSk7DQogICAgKwkJCWRlbHdpbihkaWFs
b2cpOw0KICAgICsJCQlnb3RvIGRvX3Jlc2l6ZTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKwlk
ZWx3aW4obWVudSk7DQogICAgKwlkZWx3aW4oZGlhbG9nKTsNCiAgICArCXJldHVybiBrZXk7CQkv
KiBFU0MgcHJlc3NlZCAqLw0KICAgICt9DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy9seGRpYWxvZy90ZXh0Ym94LmMgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cvdGV4dGJveC5j
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40ZTMzOWIxDQog
ICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy90ZXh0
Ym94LmMNCiAgICBAQCAtMCwwICsxLDM5NSBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMCsNCiAgICArLyoNCiAgICArICogIHRleHRib3guYyAtLSBpbXBsZW1lbnRz
IHRoZSB0ZXh0IGJveA0KICAgICsgKg0KICAgICsgKiAgT1JJR0lOQUwgQVVUSE9SOiBTYXZpbyBM
YW0gKGxhbTgzNkBjcy5jdWhrLmhrKQ0KICAgICsgKiAgTU9ESUZJRUQgRk9SIExJTlVYIEtFUk5F
TCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncuY29tKQ0KICAgICsgKi8N
CiAgICArDQogICAgKyNpbmNsdWRlICJkaWFsb2cuaCINCiAgICArDQogICAgK3N0YXRpYyB2b2lk
IGJhY2tfbGluZXMoaW50IG4pOw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9wYWdlKFdJTkRPVyAq
d2luLCBpbnQgaGVpZ2h0LCBpbnQgd2lkdGgsIHVwZGF0ZV90ZXh0X2ZuDQogICAgKwkJICAgICAg
IHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsNCiAgICArc3RhdGljIHZvaWQgcHJpbnRfbGluZShX
SU5ET1cgKndpbiwgaW50IHJvdywgaW50IHdpZHRoKTsNCiAgICArc3RhdGljIGNoYXIgKmdldF9s
aW5lKHZvaWQpOw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9wb3NpdGlvbihXSU5ET1cgKiB3aW4p
Ow0KICAgICsNCiAgICArc3RhdGljIGludCBoc2Nyb2xsOw0KICAgICtzdGF0aWMgaW50IGJlZ2lu
X3JlYWNoZWQsIGVuZF9yZWFjaGVkLCBwYWdlX2xlbmd0aDsNCiAgICArc3RhdGljIGNoYXIgKmJ1
ZjsNCiAgICArc3RhdGljIGNoYXIgKnBhZ2U7DQogICAgKw0KICAgICsvKg0KICAgICsgKiByZWZy
ZXNoIHdpbmRvdyBjb250ZW50DQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCByZWZyZXNoX3Rl
eHRfYm94KFdJTkRPVyAqZGlhbG9nLCBXSU5ET1cgKmJveCwgaW50IGJveGgsIGludCBib3h3LA0K
ICAgICsJCQkgICAgIGludCBjdXJfeSwgaW50IGN1cl94LCB1cGRhdGVfdGV4dF9mbiB1cGRhdGVf
dGV4dCwNCiAgICArCQkJICAgICB2b2lkICpkYXRhKQ0KICAgICt7DQogICAgKwlwcmludF9wYWdl
KGJveCwgYm94aCwgYm94dywgdXBkYXRlX3RleHQsIGRhdGEpOw0KICAgICsJcHJpbnRfcG9zaXRp
b24oZGlhbG9nKTsNCiAgICArCXdtb3ZlKGRpYWxvZywgY3VyX3ksIGN1cl94KTsJLyogUmVzdG9y
ZSBjdXJzb3IgcG9zaXRpb24gKi8NCiAgICArCXdyZWZyZXNoKGRpYWxvZyk7DQogICAgK30NCiAg
ICArDQogICAgKw0KICAgICsvKg0KICAgICsgKiBEaXNwbGF5IHRleHQgZnJvbSBhIGZpbGUgaW4g
YSBkaWFsb2cgYm94Lg0KICAgICsgKg0KICAgICsgKiBrZXlzIGlzIGEgbnVsbC10ZXJtaW5hdGVk
IGFycmF5DQogICAgKyAqIHVwZGF0ZV90ZXh0KCkgbWF5IG5vdCBhZGQgb3IgcmVtb3ZlIGFueSAn
XG4nIG9yICdcMCcgaW4gdGJ1Zg0KICAgICsgKi8NCiAgICAraW50IGRpYWxvZ190ZXh0Ym94KGNv
bnN0IGNoYXIgKnRpdGxlLCBjaGFyICp0YnVmLCBpbnQgaW5pdGlhbF9oZWlnaHQsDQogICAgKwkJ
ICAgaW50IGluaXRpYWxfd2lkdGgsIGludCAqa2V5cywgaW50ICpfdnNjcm9sbCwgaW50ICpfaHNj
cm9sbCwNCiAgICArCQkgICB1cGRhdGVfdGV4dF9mbiB1cGRhdGVfdGV4dCwgdm9pZCAqZGF0YSkN
CiAgICArew0KICAgICsJaW50IGksIHgsIHksIGN1cl94LCBjdXJfeSwga2V5ID0gMDsNCiAgICAr
CWludCBoZWlnaHQsIHdpZHRoLCBib3hoLCBib3h3Ow0KICAgICsJV0lORE9XICpkaWFsb2csICpi
b3g7DQogICAgKwlib29sIGRvbmUgPSBmYWxzZTsNCiAgICArDQogICAgKwliZWdpbl9yZWFjaGVk
ID0gMTsNCiAgICArCWVuZF9yZWFjaGVkID0gMDsNCiAgICArCXBhZ2VfbGVuZ3RoID0gMDsNCiAg
ICArCWhzY3JvbGwgPSAwOw0KICAgICsJYnVmID0gdGJ1ZjsNCiAgICArCXBhZ2UgPSBidWY7CS8q
IHBhZ2UgaXMgcG9pbnRlciB0byBzdGFydCBvZiBwYWdlIHRvIGJlIGRpc3BsYXllZCAqLw0KICAg
ICsNCiAgICArCWlmIChfdnNjcm9sbCAmJiAqX3ZzY3JvbGwpIHsNCiAgICArCQliZWdpbl9yZWFj
aGVkID0gMDsNCiAgICArDQogICAgKwkJZm9yIChpID0gMDsgaSA8ICpfdnNjcm9sbDsgaSsrKQ0K
ICAgICsJCQlnZXRfbGluZSgpOw0KICAgICsJfQ0KICAgICsJaWYgKF9oc2Nyb2xsKQ0KICAgICsJ
CWhzY3JvbGwgPSAqX2hzY3JvbGw7DQogICAgKw0KICAgICtkb19yZXNpemU6DQogICAgKwlnZXRt
YXh5eChzdGRzY3IsIGhlaWdodCwgd2lkdGgpOw0KICAgICsJaWYgKGhlaWdodCA8IFRFWFRCT1hf
SEVJR1RIX01JTiB8fCB3aWR0aCA8IFRFWFRCT1hfV0lEVEhfTUlOKQ0KICAgICsJCXJldHVybiAt
RVJSRElTUExBWVRPT1NNQUxMOw0KICAgICsJaWYgKGluaXRpYWxfaGVpZ2h0ICE9IDApDQogICAg
KwkJaGVpZ2h0ID0gaW5pdGlhbF9oZWlnaHQ7DQogICAgKwllbHNlDQogICAgKwkJaWYgKGhlaWdo
dCA+IDQpDQogICAgKwkJCWhlaWdodCAtPSA0Ow0KICAgICsJCWVsc2UNCiAgICArCQkJaGVpZ2h0
ID0gMDsNCiAgICArCWlmIChpbml0aWFsX3dpZHRoICE9IDApDQogICAgKwkJd2lkdGggPSBpbml0
aWFsX3dpZHRoOw0KICAgICsJZWxzZQ0KICAgICsJCWlmICh3aWR0aCA+IDUpDQogICAgKwkJCXdp
ZHRoIC09IDU7DQogICAgKwkJZWxzZQ0KICAgICsJCQl3aWR0aCA9IDA7DQogICAgKw0KICAgICsJ
LyogY2VudGVyIGRpYWxvZyBib3ggb24gc2NyZWVuICovDQogICAgKwl4ID0gKGdldG1heHgoc3Rk
c2NyKSAtIHdpZHRoKSAvIDI7DQogICAgKwl5ID0gKGdldG1heHkoc3Rkc2NyKSAtIGhlaWdodCkg
LyAyOw0KICAgICsNCiAgICArCWRyYXdfc2hhZG93KHN0ZHNjciwgeSwgeCwgaGVpZ2h0LCB3aWR0
aCk7DQogICAgKw0KICAgICsJZGlhbG9nID0gbmV3d2luKGhlaWdodCwgd2lkdGgsIHksIHgpOw0K
ICAgICsJa2V5cGFkKGRpYWxvZywgVFJVRSk7DQogICAgKw0KICAgICsJLyogQ3JlYXRlIHdpbmRv
dyBmb3IgYm94IHJlZ2lvbiwgdXNlZCBmb3Igc2Nyb2xsaW5nIHRleHQgKi8NCiAgICArCWJveGgg
PSBoZWlnaHQgLSA0Ow0KICAgICsJYm94dyA9IHdpZHRoIC0gMjsNCiAgICArCWJveCA9IHN1Yndp
bihkaWFsb2csIGJveGgsIGJveHcsIHkgKyAxLCB4ICsgMSk7DQogICAgKwl3YXR0cnNldChib3gs
IGRsZy5kaWFsb2cuYXRyKTsNCiAgICArCXdia2dkc2V0KGJveCwgZGxnLmRpYWxvZy5hdHIgJiBB
X0NPTE9SKTsNCiAgICArDQogICAgKwlrZXlwYWQoYm94LCBUUlVFKTsNCiAgICArDQogICAgKwkv
KiByZWdpc3RlciB0aGUgbmV3IHdpbmRvdywgYWxvbmcgd2l0aCBpdHMgYm9yZGVycyAqLw0KICAg
ICsJZHJhd19ib3goZGlhbG9nLCAwLCAwLCBoZWlnaHQsIHdpZHRoLA0KICAgICsJCSBkbGcuZGlh
bG9nLmF0ciwgZGxnLmJvcmRlci5hdHIpOw0KICAgICsNCiAgICArCXdhdHRyc2V0KGRpYWxvZywg
ZGxnLmJvcmRlci5hdHIpOw0KICAgICsJbXZ3YWRkY2goZGlhbG9nLCBoZWlnaHQgLSAzLCAwLCBB
Q1NfTFRFRSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBpKyspDQogICAgKwkJ
d2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsNCiAgICArCXdhdHRyc2V0KGRpYWxvZywgZGxnLmRp
YWxvZy5hdHIpOw0KICAgICsJd2JrZ2RzZXQoZGlhbG9nLCBkbGcuZGlhbG9nLmF0ciAmIEFfQ09M
T1IpOw0KICAgICsJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOw0KICAgICsNCiAgICArCXByaW50
X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsNCiAgICArDQogICAgKwlwcmludF9idXR0b24o
ZGlhbG9nLCAiIEV4aXQgIiwgaGVpZ2h0IC0gMiwgd2lkdGggLyAyIC0gNCwgVFJVRSk7DQogICAg
Kwl3bm91dHJlZnJlc2goZGlhbG9nKTsNCiAgICArCWdldHl4KGRpYWxvZywgY3VyX3ksIGN1cl94
KTsJLyogU2F2ZSBjdXJzb3IgcG9zaXRpb24gKi8NCiAgICArDQogICAgKwkvKiBQcmludCBmaXJz
dCBwYWdlIG9mIHRleHQgKi8NCiAgICArCWF0dHJfY2xlYXIoYm94LCBib3hoLCBib3h3LCBkbGcu
ZGlhbG9nLmF0cik7DQogICAgKwlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94LCBib3hoLCBi
b3h3LCBjdXJfeSwgY3VyX3gsIHVwZGF0ZV90ZXh0LA0KICAgICsJCQkgZGF0YSk7DQogICAgKw0K
ICAgICsJd2hpbGUgKCFkb25lKSB7DQogICAgKwkJa2V5ID0gd2dldGNoKGRpYWxvZyk7DQogICAg
KwkJc3dpdGNoIChrZXkpIHsNCiAgICArCQljYXNlICdFJzoJLyogRXhpdCAqLw0KICAgICsJCWNh
c2UgJ2UnOg0KICAgICsJCWNhc2UgJ1gnOg0KICAgICsJCWNhc2UgJ3gnOg0KICAgICsJCWNhc2Ug
J3EnOg0KICAgICsJCWNhc2UgJ1xuJzoNCiAgICArCQkJZG9uZSA9IHRydWU7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgJ2cnOgkvKiBGaXJzdCBwYWdlICovDQogICAgKwkJY2FzZSBLRVlf
SE9NRToNCiAgICArCQkJaWYgKCFiZWdpbl9yZWFjaGVkKSB7DQogICAgKwkJCQliZWdpbl9yZWFj
aGVkID0gMTsNCiAgICArCQkJCXBhZ2UgPSBidWY7DQogICAgKwkJCQlyZWZyZXNoX3RleHRfYm94
KGRpYWxvZywgYm94LCBib3hoLCBib3h3LA0KICAgICsJCQkJCQkgY3VyX3ksIGN1cl94LCB1cGRh
dGVfdGV4dCwNCiAgICArCQkJCQkJIGRhdGEpOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0K
ICAgICsJCWNhc2UgJ0cnOgkvKiBMYXN0IHBhZ2UgKi8NCiAgICArCQljYXNlIEtFWV9FTkQ6DQog
ICAgKw0KICAgICsJCQllbmRfcmVhY2hlZCA9IDE7DQogICAgKwkJCS8qIHBvaW50IHRvIGxhc3Qg
Y2hhciBpbiBidWYgKi8NCiAgICArCQkJcGFnZSA9IGJ1ZiArIHN0cmxlbihidWYpOw0KICAgICsJ
CQliYWNrX2xpbmVzKGJveGgpOw0KICAgICsJCQlyZWZyZXNoX3RleHRfYm94KGRpYWxvZywgYm94
LCBib3hoLCBib3h3LCBjdXJfeSwNCiAgICArCQkJCQkgY3VyX3gsIHVwZGF0ZV90ZXh0LCBkYXRh
KTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAnSyc6CS8qIFByZXZpb3VzIGxpbmUgKi8N
CiAgICArCQljYXNlICdrJzoNCiAgICArCQljYXNlIEtFWV9VUDoNCiAgICArCQkJaWYgKGJlZ2lu
X3JlYWNoZWQpDQogICAgKwkJCQlicmVhazsNCiAgICArDQogICAgKwkJCWJhY2tfbGluZXMocGFn
ZV9sZW5ndGggKyAxKTsNCiAgICArCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94
aCwgYm94dywgY3VyX3ksDQogICAgKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7DQog
ICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJ0InOgkvKiBQcmV2aW91cyBwYWdlICovDQogICAg
KwkJY2FzZSAnYic6DQogICAgKwkJY2FzZSAndSc6DQogICAgKwkJY2FzZSBLRVlfUFBBR0U6DQog
ICAgKwkJCWlmIChiZWdpbl9yZWFjaGVkKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWJhY2tf
bGluZXMocGFnZV9sZW5ndGggKyBib3hoKTsNCiAgICArCQkJcmVmcmVzaF90ZXh0X2JveChkaWFs
b2csIGJveCwgYm94aCwgYm94dywgY3VyX3ksDQogICAgKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4
dCwgZGF0YSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJ0onOgkvKiBOZXh0IGxpbmUg
Ki8NCiAgICArCQljYXNlICdqJzoNCiAgICArCQljYXNlIEtFWV9ET1dOOg0KICAgICsJCQlpZiAo
ZW5kX3JlYWNoZWQpDQogICAgKwkJCQlicmVhazsNCiAgICArDQogICAgKwkJCWJhY2tfbGluZXMo
cGFnZV9sZW5ndGggLSAxKTsNCiAgICArCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwg
Ym94aCwgYm94dywgY3VyX3ksDQogICAgKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7
DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX05QQUdFOgkvKiBOZXh0IHBhZ2UgKi8N
CiAgICArCQljYXNlICcgJzoNCiAgICArCQljYXNlICdkJzoNCiAgICArCQkJaWYgKGVuZF9yZWFj
aGVkKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKw0KICAgICsJCQliZWdpbl9yZWFjaGVkID0gMDsN
CiAgICArCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3VyX3ks
DQogICAgKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7DQogICAgKwkJCWJyZWFrOw0K
ICAgICsJCWNhc2UgJzAnOgkvKiBCZWdpbm5pbmcgb2YgbGluZSAqLw0KICAgICsJCWNhc2UgJ0gn
OgkvKiBTY3JvbGwgbGVmdCAqLw0KICAgICsJCWNhc2UgJ2gnOg0KICAgICsJCWNhc2UgS0VZX0xF
RlQ6DQogICAgKwkJCWlmIChoc2Nyb2xsIDw9IDApDQogICAgKwkJCQlicmVhazsNCiAgICArDQog
ICAgKwkJCWlmIChrZXkgPT0gJzAnKQ0KICAgICsJCQkJaHNjcm9sbCA9IDA7DQogICAgKwkJCWVs
c2UNCiAgICArCQkJCWhzY3JvbGwtLTsNCiAgICArCQkJLyogUmVwcmludCBjdXJyZW50IHBhZ2Ug
dG8gc2Nyb2xsIGhvcml6b250YWxseSAqLw0KICAgICsJCQliYWNrX2xpbmVzKHBhZ2VfbGVuZ3Ro
KTsNCiAgICArCQkJcmVmcmVzaF90ZXh0X2JveChkaWFsb2csIGJveCwgYm94aCwgYm94dywgY3Vy
X3ksDQogICAgKwkJCQkJIGN1cl94LCB1cGRhdGVfdGV4dCwgZGF0YSk7DQogICAgKwkJCWJyZWFr
Ow0KICAgICsJCWNhc2UgJ0wnOgkvKiBTY3JvbGwgcmlnaHQgKi8NCiAgICArCQljYXNlICdsJzoN
CiAgICArCQljYXNlIEtFWV9SSUdIVDoNCiAgICArCQkJaWYgKGhzY3JvbGwgPj0gTUFYX0xFTikN
CiAgICArCQkJCWJyZWFrOw0KICAgICsJCQloc2Nyb2xsKys7DQogICAgKwkJCS8qIFJlcHJpbnQg
Y3VycmVudCBwYWdlIHRvIHNjcm9sbCBob3Jpem9udGFsbHkgKi8NCiAgICArCQkJYmFja19saW5l
cyhwYWdlX2xlbmd0aCk7DQogICAgKwkJCXJlZnJlc2hfdGV4dF9ib3goZGlhbG9nLCBib3gsIGJv
eGgsIGJveHcsIGN1cl95LA0KICAgICsJCQkJCSBjdXJfeCwgdXBkYXRlX3RleHQsIGRhdGEpOw0K
ICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9FU0M6DQogICAgKwkJCWlmIChvbl9rZXlf
ZXNjKGRpYWxvZykgPT0gS0VZX0VTQykNCiAgICArCQkJCWRvbmUgPSB0cnVlOw0KICAgICsJCQli
cmVhazsNCiAgICArCQljYXNlIEtFWV9SRVNJWkU6DQogICAgKwkJCWJhY2tfbGluZXMoaGVpZ2h0
KTsNCiAgICArCQkJZGVsd2luKGJveCk7DQogICAgKwkJCWRlbHdpbihkaWFsb2cpOw0KICAgICsJ
CQlvbl9rZXlfcmVzaXplKCk7DQogICAgKwkJCWdvdG8gZG9fcmVzaXplOw0KICAgICsJCWRlZmF1
bHQ6DQogICAgKwkJCWZvciAoaSA9IDA7IGtleXNbaV07IGkrKykgew0KICAgICsJCQkJaWYgKGtl
eSA9PSBrZXlzW2ldKSB7DQogICAgKwkJCQkJZG9uZSA9IHRydWU7DQogICAgKwkJCQkJYnJlYWs7
DQogICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAgKwlkZWx3aW4o
Ym94KTsNCiAgICArCWRlbHdpbihkaWFsb2cpOw0KICAgICsJaWYgKF92c2Nyb2xsKSB7DQogICAg
KwkJY29uc3QgY2hhciAqczsNCiAgICArDQogICAgKwkJcyA9IGJ1ZjsNCiAgICArCQkqX3ZzY3Jv
bGwgPSAwOw0KICAgICsJCWJhY2tfbGluZXMocGFnZV9sZW5ndGgpOw0KICAgICsJCXdoaWxlIChz
IDwgcGFnZSAmJiAocyA9IHN0cmNocihzLCAnXG4nKSkpIHsNCiAgICArCQkJKCpfdnNjcm9sbCkr
KzsNCiAgICArCQkJcysrOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWlmIChfaHNjcm9sbCkN
CiAgICArCQkqX2hzY3JvbGwgPSBoc2Nyb2xsOw0KICAgICsJcmV0dXJuIGtleTsNCiAgICArfQ0K
ICAgICsNCiAgICArLyoNCiAgICArICogR28gYmFjayAnbicgbGluZXMgaW4gdGV4dC4gQ2FsbGVk
IGJ5IGRpYWxvZ190ZXh0Ym94KCkuDQogICAgKyAqICdwYWdlJyB3aWxsIGJlIHVwZGF0ZWQgdG8g
cG9pbnQgdG8gdGhlIGRlc2lyZWQgbGluZSBpbiAnYnVmJy4NCiAgICArICovDQogICAgK3N0YXRp
YyB2b2lkIGJhY2tfbGluZXMoaW50IG4pDQogICAgK3sNCiAgICArCWludCBpOw0KICAgICsNCiAg
ICArCWJlZ2luX3JlYWNoZWQgPSAwOw0KICAgICsJLyogR28gYmFjayAnbicgbGluZXMgKi8NCiAg
ICArCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsNCiAgICArCQlpZiAoKnBhZ2UgPT0gJ1wwJykg
ew0KICAgICsJCQlpZiAoZW5kX3JlYWNoZWQpIHsNCiAgICArCQkJCWVuZF9yZWFjaGVkID0gMDsN
CiAgICArCQkJCWNvbnRpbnVlOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJCWlmIChwYWdl
ID09IGJ1Zikgew0KICAgICsJCQliZWdpbl9yZWFjaGVkID0gMTsNCiAgICArCQkJcmV0dXJuOw0K
ICAgICsJCX0NCiAgICArCQlwYWdlLS07DQogICAgKwkJZG8gew0KICAgICsJCQlpZiAocGFnZSA9
PSBidWYpIHsNCiAgICArCQkJCWJlZ2luX3JlYWNoZWQgPSAxOw0KICAgICsJCQkJcmV0dXJuOw0K
ICAgICsJCQl9DQogICAgKwkJCXBhZ2UtLTsNCiAgICArCQl9IHdoaWxlICgqcGFnZSAhPSAnXG4n
KTsNCiAgICArCQlwYWdlKys7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAg
KyAqIFByaW50IGEgbmV3IHBhZ2Ugb2YgdGV4dC4NCiAgICArICovDQogICAgK3N0YXRpYyB2b2lk
IHByaW50X3BhZ2UoV0lORE9XICp3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgdXBkYXRlX3Rl
eHRfZm4NCiAgICArCQkgICAgICAgdXBkYXRlX3RleHQsIHZvaWQgKmRhdGEpDQogICAgK3sNCiAg
ICArCWludCBpLCBwYXNzZWRfZW5kID0gMDsNCiAgICArDQogICAgKwlpZiAodXBkYXRlX3RleHQp
IHsNCiAgICArCQljaGFyICplbmQ7DQogICAgKw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCBoZWln
aHQ7IGkrKykNCiAgICArCQkJZ2V0X2xpbmUoKTsNCiAgICArCQllbmQgPSBwYWdlOw0KICAgICsJ
CWJhY2tfbGluZXMoaGVpZ2h0KTsNCiAgICArCQl1cGRhdGVfdGV4dChidWYsIHBhZ2UgLSBidWYs
IGVuZCAtIGJ1ZiwgZGF0YSk7DQogICAgKwl9DQogICAgKw0KICAgICsJcGFnZV9sZW5ndGggPSAw
Ow0KICAgICsJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7DQogICAgKwkJcHJpbnRfbGlu
ZSh3aW4sIGksIHdpZHRoKTsNCiAgICArCQlpZiAoIXBhc3NlZF9lbmQpDQogICAgKwkJCXBhZ2Vf
bGVuZ3RoKys7DQogICAgKwkJaWYgKGVuZF9yZWFjaGVkICYmICFwYXNzZWRfZW5kKQ0KICAgICsJ
CQlwYXNzZWRfZW5kID0gMTsNCiAgICArCX0NCiAgICArCXdub3V0cmVmcmVzaCh3aW4pOw0KICAg
ICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBQcmludCBhIG5ldyBsaW5lIG9mIHRleHQuDQog
ICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9saW5lKFdJTkRPVyAqIHdpbiwgaW50IHJv
dywgaW50IHdpZHRoKQ0KICAgICt7DQogICAgKwljaGFyICpsaW5lOw0KICAgICsNCiAgICArCWxp
bmUgPSBnZXRfbGluZSgpOw0KICAgICsJbGluZSArPSBNSU4oc3RybGVuKGxpbmUpLCBoc2Nyb2xs
KTsJLyogU2Nyb2xsIGhvcml6b250YWxseSAqLw0KICAgICsJd21vdmUod2luLCByb3csIDApOwkv
KiBtb3ZlIGN1cnNvciB0byBjb3JyZWN0IGxpbmUgKi8NCiAgICArCXdhZGRjaCh3aW4sICcgJyk7
DQogICAgKwl3YWRkbnN0cih3aW4sIGxpbmUsIE1JTihzdHJsZW4obGluZSksIHdpZHRoIC0gMikp
Ow0KICAgICsNCiAgICArCS8qIENsZWFyICdyZXNpZHVlJyBvZiBwcmV2aW91cyBsaW5lICovDQog
ICAgKyNpZiBPTERfTkNVUlNFUw0KICAgICsJew0KICAgICsJCWludCB4ID0gZ2V0Y3VyeCh3aW4p
Ow0KICAgICsJCWludCBpOw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAtIHg7IGkrKykN
CiAgICArCQkJd2FkZGNoKHdpbiwgJyAnKTsNCiAgICArCX0NCiAgICArI2Vsc2UNCiAgICArCXdj
bHJ0b2VvbCh3aW4pOw0KICAgICsjZW5kaWYNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICAr
ICogUmV0dXJuIGN1cnJlbnQgbGluZSBvZiB0ZXh0LiBDYWxsZWQgYnkgZGlhbG9nX3RleHRib3go
KSBhbmQgcHJpbnRfbGluZSgpLg0KICAgICsgKiAncGFnZScgc2hvdWxkIHBvaW50IHRvIHN0YXJ0
IG9mIGN1cnJlbnQgbGluZSBiZWZvcmUgY2FsbGluZywgYW5kIHdpbGwgYmUNCiAgICArICogdXBk
YXRlZCB0byBwb2ludCB0byBzdGFydCBvZiBuZXh0IGxpbmUuDQogICAgKyAqLw0KICAgICtzdGF0
aWMgY2hhciAqZ2V0X2xpbmUodm9pZCkNCiAgICArew0KICAgICsJaW50IGkgPSAwOw0KICAgICsJ
c3RhdGljIGNoYXIgbGluZVtNQVhfTEVOICsgMV07DQogICAgKw0KICAgICsJZW5kX3JlYWNoZWQg
PSAwOw0KICAgICsJd2hpbGUgKCpwYWdlICE9ICdcbicpIHsNCiAgICArCQlpZiAoKnBhZ2UgPT0g
J1wwJykgew0KICAgICsJCQllbmRfcmVhY2hlZCA9IDE7DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CX0gZWxzZSBpZiAoaSA8IE1BWF9MRU4pDQogICAgKwkJCWxpbmVbaSsrXSA9ICoocGFnZSsrKTsN
CiAgICArCQllbHNlIHsNCiAgICArCQkJLyogVHJ1bmNhdGUgbGluZXMgbG9uZ2VyIHRoYW4gTUFY
X0xFTiBjaGFyYWN0ZXJzICovDQogICAgKwkJCWlmIChpID09IE1BWF9MRU4pDQogICAgKwkJCQls
aW5lW2krK10gPSAnXDAnOw0KICAgICsJCQlwYWdlKys7DQogICAgKwkJfQ0KICAgICsJfQ0KICAg
ICsJaWYgKGkgPD0gTUFYX0xFTikNCiAgICArCQlsaW5lW2ldID0gJ1wwJzsNCiAgICArCWlmICgh
ZW5kX3JlYWNoZWQpDQogICAgKwkJcGFnZSsrOwkJLyogbW92ZSBwYXN0ICdcbicgKi8NCiAgICAr
DQogICAgKwlyZXR1cm4gbGluZTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogUHJp
bnQgY3VycmVudCBwb3NpdGlvbg0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgcHJpbnRfcG9z
aXRpb24oV0lORE9XICogd2luKQ0KICAgICt7DQogICAgKwlpbnQgcGVyY2VudDsNCiAgICArDQog
ICAgKwl3YXR0cnNldCh3aW4sIGRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyKTsNCiAgICArCXdi
a2dkc2V0KHdpbiwgZGxnLnBvc2l0aW9uX2luZGljYXRvci5hdHIgJiBBX0NPTE9SKTsNCiAgICAr
CXBlcmNlbnQgPSAocGFnZSAtIGJ1ZikgKiAxMDAgLyBzdHJsZW4oYnVmKTsNCiAgICArCXdtb3Zl
KHdpbiwgZ2V0bWF4eSh3aW4pIC0gMywgZ2V0bWF4eCh3aW4pIC0gOSk7DQogICAgKwl3cHJpbnR3
KHdpbiwgIiglM2QlJSkiLCBwZXJjZW50KTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcvbHhkaWFsb2cvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnL2x4ZGlhbG9nL3V0
aWwuYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMWI0OTBk
NA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvbHhkaWFsb2cv
dXRpbC5jDQogICAgQEAgLTAsMCArMSw3MDAgQEANCiAgICArLy8gU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEdQTC0yLjArDQogICAgKy8qDQogICAgKyAqICB1dGlsLmMNCiAgICArICoNCiAgICAr
ICogIE9SSUdJTkFMIEFVVEhPUjogU2F2aW8gTGFtIChsYW04MzZAY3MuY3Voay5oaykNCiAgICAr
ICogIE1PRElGSUVEIEZPUiBMSU5VWCBLRVJORUwgQ09ORklHIEJZOiBXaWxsaWFtIFJvYWRjYXAg
KHJvYWRjYXBAY2Z3LmNvbSkNCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8c3RkYXJn
Lmg+DQogICAgKw0KICAgICsjaW5jbHVkZSAiZGlhbG9nLmgiDQogICAgKw0KICAgICsvKiBOZWVk
ZWQgaW4gc2lnbmFsIGhhbmRsZXIgaW4gbWNvbmYuYyAqLw0KICAgICtpbnQgc2F2ZWRfeCwgc2F2
ZWRfeTsNCiAgICArDQogICAgK3N0cnVjdCBkaWFsb2dfaW5mbyBkbGc7DQogICAgKw0KICAgICtz
dGF0aWMgdm9pZCBzZXRfbW9ub190aGVtZSh2b2lkKQ0KICAgICt7DQogICAgKwlkbGcuc2NyZWVu
LmF0ciA9IEFfTk9STUFMOw0KICAgICsJZGxnLnNoYWRvdy5hdHIgPSBBX05PUk1BTDsNCiAgICAr
CWRsZy5kaWFsb2cuYXRyID0gQV9OT1JNQUw7DQogICAgKwlkbGcudGl0bGUuYXRyID0gQV9CT0xE
Ow0KICAgICsJZGxnLmJvcmRlci5hdHIgPSBBX05PUk1BTDsNCiAgICArCWRsZy5idXR0b25fYWN0
aXZlLmF0ciA9IEFfUkVWRVJTRTsNCiAgICArCWRsZy5idXR0b25faW5hY3RpdmUuYXRyID0gQV9E
SU07DQogICAgKwlkbGcuYnV0dG9uX2tleV9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOw0KICAgICsJ
ZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUuYXRyID0gQV9CT0xEOw0KICAgICsJZGxnLmJ1dHRvbl9s
YWJlbF9hY3RpdmUuYXRyID0gQV9SRVZFUlNFOw0KICAgICsJZGxnLmJ1dHRvbl9sYWJlbF9pbmFj
dGl2ZS5hdHIgPSBBX05PUk1BTDsNCiAgICArCWRsZy5pbnB1dGJveC5hdHIgPSBBX05PUk1BTDsN
CiAgICArCWRsZy5pbnB1dGJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7DQogICAgKwlkbGcuc2Vh
cmNoYm94LmF0ciA9IEFfTk9STUFMOw0KICAgICsJZGxnLnNlYXJjaGJveF90aXRsZS5hdHIgPSBB
X0JPTEQ7DQogICAgKwlkbGcuc2VhcmNoYm94X2JvcmRlci5hdHIgPSBBX05PUk1BTDsNCiAgICAr
CWRsZy5wb3NpdGlvbl9pbmRpY2F0b3IuYXRyID0gQV9CT0xEOw0KICAgICsJZGxnLm1lbnVib3gu
YXRyID0gQV9OT1JNQUw7DQogICAgKwlkbGcubWVudWJveF9ib3JkZXIuYXRyID0gQV9OT1JNQUw7
DQogICAgKwlkbGcuaXRlbS5hdHIgPSBBX05PUk1BTDsNCiAgICArCWRsZy5pdGVtX3NlbGVjdGVk
LmF0ciA9IEFfUkVWRVJTRTsNCiAgICArCWRsZy50YWcuYXRyID0gQV9CT0xEOw0KICAgICsJZGxn
LnRhZ19zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7DQogICAgKwlkbGcudGFnX2tleS5hdHIgPSBB
X0JPTEQ7DQogICAgKwlkbGcudGFnX2tleV9zZWxlY3RlZC5hdHIgPSBBX1JFVkVSU0U7DQogICAg
KwlkbGcuY2hlY2suYXRyID0gQV9CT0xEOw0KICAgICsJZGxnLmNoZWNrX3NlbGVjdGVkLmF0ciA9
IEFfUkVWRVJTRTsNCiAgICArCWRsZy51YXJyb3cuYXRyID0gQV9CT0xEOw0KICAgICsJZGxnLmRh
cnJvdy5hdHIgPSBBX0JPTEQ7DQogICAgK30NCiAgICArDQogICAgKyNkZWZpbmUgRExHX0NPTE9S
KGRpYWxvZywgZiwgYiwgaCkgXA0KICAgICtkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwNCiAgICArCWRsZy5kaWFsb2cuZmcgPSAoZik7ICAgICAgIFwNCiAgICArCWRsZy5kaWFs
b2cuYmcgPSAoYik7ICAgICAgIFwNCiAgICArCWRsZy5kaWFsb2cuaGwgPSAoaCk7ICAgICAgIFwN
CiAgICArfSB3aGlsZSAoMCkNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHNldF9jbGFzc2ljX3Ro
ZW1lKHZvaWQpDQogICAgK3sNCiAgICArCURMR19DT0xPUihzY3JlZW4sICAgICAgICAgICAgICAg
IENPTE9SX0NZQU4sICAgQ09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICArCURMR19DT0xPUihzaGFk
b3csICAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfQkxBQ0ssICB0cnVlKTsNCiAg
ICArCURMR19DT0xPUihkaWFsb2csICAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1Jf
V0hJVEUsICBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IodGl0bGUsICAgICAgICAgICAgICAgICBD
T0xPUl9ZRUxMT1csIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IoYm9yZGVy
LCAgICAgICAgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAg
KwlETEdfQ09MT1IoYnV0dG9uX2FjdGl2ZSwgICAgICAgICBDT0xPUl9XSElURSwgIENPTE9SX0JM
VUUsICAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IoYnV0dG9uX2luYWN0aXZlLCAgICAgICBDT0xP
Ul9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGJ1dHRvbl9r
ZXlfYWN0aXZlLCAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAgICsJ
RExHX0NPTE9SKGJ1dHRvbl9rZXlfaW5hY3RpdmUsICAgQ09MT1JfUkVELCAgICBDT0xPUl9XSElU
RSwgIGZhbHNlKTsNCiAgICArCURMR19DT0xPUihidXR0b25fbGFiZWxfYWN0aXZlLCAgIENPTE9S
X1lFTExPVywgQ09MT1JfQkxVRSwgICB0cnVlKTsNCiAgICArCURMR19DT0xPUihidXR0b25fbGFi
ZWxfaW5hY3RpdmUsIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICArCURM
R19DT0xPUihpbnB1dGJveCwgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUs
ICBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IoaW5wdXRib3hfYm9yZGVyLCAgICAgICBDT0xPUl9C
TEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKHNlYXJjaGJveCwg
ICAgICAgICAgICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsNCiAgICArCURM
R19DT0xPUihzZWFyY2hib3hfdGl0bGUsICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUs
ICB0cnVlKTsNCiAgICArCURMR19DT0xPUihzZWFyY2hib3hfYm9yZGVyLCAgICAgIENPTE9SX1dI
SVRFLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICArCURMR19DT0xPUihwb3NpdGlvbl9pbmRp
Y2F0b3IsICAgIENPTE9SX1lFTExPVywgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICArCURMR19D
T0xPUihtZW51Ym94LCAgICAgICAgICAgICAgIENPTE9SX0JMQUNLLCAgQ09MT1JfV0hJVEUsICBm
YWxzZSk7DQogICAgKwlETEdfQ09MT1IobWVudWJveF9ib3JkZXIsICAgICAgICBDT0xPUl9XSElU
RSwgIENPTE9SX1dISVRFLCAgdHJ1ZSk7DQogICAgKwlETEdfQ09MT1IoaXRlbSwgICAgICAgICAg
ICAgICAgICBDT0xPUl9CTEFDSywgIENPTE9SX1dISVRFLCAgZmFsc2UpOw0KICAgICsJRExHX0NP
TE9SKGl0ZW1fc2VsZWN0ZWQsICAgICAgICAgQ09MT1JfV0hJVEUsICBDT0xPUl9CTFVFLCAgIHRy
dWUpOw0KICAgICsJRExHX0NPTE9SKHRhZywgICAgICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9X
LCBDT0xPUl9XSElURSwgIHRydWUpOw0KICAgICsJRExHX0NPTE9SKHRhZ19zZWxlY3RlZCwgICAg
ICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTFVFLCAgIHRydWUpOw0KICAgICsJRExHX0NPTE9S
KHRhZ19rZXksICAgICAgICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9XSElURSwgIHRydWUp
Ow0KICAgICsJRExHX0NPTE9SKHRhZ19rZXlfc2VsZWN0ZWQsICAgICAgQ09MT1JfWUVMTE9XLCBD
T0xPUl9CTFVFLCAgIHRydWUpOw0KICAgICsJRExHX0NPTE9SKGNoZWNrLCAgICAgICAgICAgICAg
ICAgQ09MT1JfQkxBQ0ssICBDT0xPUl9XSElURSwgIGZhbHNlKTsNCiAgICArCURMR19DT0xPUihj
aGVja19zZWxlY3RlZCwgICAgICAgIENPTE9SX1dISVRFLCAgQ09MT1JfQkxVRSwgICB0cnVlKTsN
CiAgICArCURMR19DT0xPUih1YXJyb3csICAgICAgICAgICAgICAgIENPTE9SX0dSRUVOLCAgQ09M
T1JfV0hJVEUsICB0cnVlKTsNCiAgICArCURMR19DT0xPUihkYXJyb3csICAgICAgICAgICAgICAg
IENPTE9SX0dSRUVOLCAgQ09MT1JfV0hJVEUsICB0cnVlKTsNCiAgICArfQ0KICAgICsNCiAgICAr
c3RhdGljIHZvaWQgc2V0X2JsYWNrYmdfdGhlbWUodm9pZCkNCiAgICArew0KICAgICsJRExHX0NP
TE9SKHNjcmVlbiwgQ09MT1JfUkVELCAgIENPTE9SX0JMQUNLLCB0cnVlKTsNCiAgICArCURMR19D
T0xPUihzaGFkb3csIENPTE9SX0JMQUNLLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICsJRExH
X0NPTE9SKGRpYWxvZywgQ09MT1JfV0hJVEUsIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgKwlE
TEdfQ09MT1IodGl0bGUsICBDT0xPUl9SRUQsICAgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICAr
CURMR19DT0xPUihib3JkZXIsIENPTE9SX0JMQUNLLCBDT0xPUl9CTEFDSywgdHJ1ZSk7DQogICAg
Kw0KICAgICsJRExHX0NPTE9SKGJ1dHRvbl9hY3RpdmUsICAgICAgICAgQ09MT1JfWUVMTE9XLCBD
T0xPUl9SRUQsICAgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGJ1dHRvbl9pbmFjdGl2ZSwgICAg
ICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGJ1
dHRvbl9rZXlfYWN0aXZlLCAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7DQog
ICAgKwlETEdfQ09MT1IoYnV0dG9uX2tleV9pbmFjdGl2ZSwgICBDT0xPUl9SRUQsICAgIENPTE9S
X0JMQUNLLCBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IoYnV0dG9uX2xhYmVsX2FjdGl2ZSwgICBD
T0xPUl9XSElURSwgIENPTE9SX1JFRCwgICBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IoYnV0dG9u
X2xhYmVsX2luYWN0aXZlLCBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNLLCB0cnVlKTsNCiAgICAr
DQogICAgKwlETEdfQ09MT1IoaW5wdXRib3gsICAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9C
TEFDSywgZmFsc2UpOw0KICAgICsJRExHX0NPTE9SKGlucHV0Ym94X2JvcmRlciwgIENPTE9SX1lF
TExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAgICArDQogICAgKwlETEdfQ09MT1Ioc2VhcmNo
Ym94LCAgICAgICAgQ09MT1JfWUVMTE9XLCBDT0xPUl9CTEFDSywgZmFsc2UpOw0KICAgICsJRExH
X0NPTE9SKHNlYXJjaGJveF90aXRsZSwgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIHRydWUp
Ow0KICAgICsJRExHX0NPTE9SKHNlYXJjaGJveF9ib3JkZXIsIENPTE9SX0JMQUNLLCAgQ09MT1Jf
QkxBQ0ssIHRydWUpOw0KICAgICsNCiAgICArCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0b3Is
IENPTE9SX1JFRCwgQ09MT1JfQkxBQ0ssICBmYWxzZSk7DQogICAgKw0KICAgICsJRExHX0NPTE9S
KG1lbnVib3gsICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNlKTsNCiAg
ICArCURMR19DT0xPUihtZW51Ym94X2JvcmRlciwgICBDT0xPUl9CTEFDSywgIENPTE9SX0JMQUNL
LCB0cnVlKTsNCiAgICArDQogICAgKwlETEdfQ09MT1IoaXRlbSwgICAgICAgICAgICAgQ09MT1Jf
V0hJVEUsIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IoaXRlbV9zZWxlY3Rl
ZCwgICAgQ09MT1JfV0hJVEUsIENPTE9SX1JFRCwgICBmYWxzZSk7DQogICAgKw0KICAgICsJRExH
X0NPTE9SKHRhZywgICAgICAgICAgICAgIENPTE9SX1JFRCwgICAgQ09MT1JfQkxBQ0ssIGZhbHNl
KTsNCiAgICArCURMR19DT0xPUih0YWdfc2VsZWN0ZWQsICAgICBDT0xPUl9ZRUxMT1csIENPTE9S
X1JFRCwgICB0cnVlKTsNCiAgICArCURMR19DT0xPUih0YWdfa2V5LCAgICAgICAgICBDT0xPUl9S
RUQsICAgIENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IodGFnX2tleV9zZWxl
Y3RlZCwgQ09MT1JfWUVMTE9XLCBDT0xPUl9SRUQsICAgdHJ1ZSk7DQogICAgKw0KICAgICsJRExH
X0NPTE9SKGNoZWNrLCAgICAgICAgICAgIENPTE9SX1lFTExPVywgQ09MT1JfQkxBQ0ssIGZhbHNl
KTsNCiAgICArCURMR19DT0xPUihjaGVja19zZWxlY3RlZCwgICBDT0xPUl9ZRUxMT1csIENPTE9S
X1JFRCwgICB0cnVlKTsNCiAgICArDQogICAgKwlETEdfQ09MT1IodWFycm93LCBDT0xPUl9SRUQs
IENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgKwlETEdfQ09MT1IoZGFycm93LCBDT0xPUl9SRUQs
IENPTE9SX0JMQUNLLCBmYWxzZSk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHNl
dF9ibHVldGl0bGVfdGhlbWUodm9pZCkNCiAgICArew0KICAgICsJc2V0X2NsYXNzaWNfdGhlbWUo
KTsNCiAgICArCURMR19DT0xPUih0aXRsZSwgICAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENP
TE9SX1dISVRFLCB0cnVlKTsNCiAgICArCURMR19DT0xPUihidXR0b25fa2V5X2FjdGl2ZSwgICBD
T0xPUl9ZRUxMT1csIENPTE9SX0JMVUUsICB0cnVlKTsNCiAgICArCURMR19DT0xPUihidXR0b25f
bGFiZWxfYWN0aXZlLCBDT0xPUl9XSElURSwgIENPTE9SX0JMVUUsICB0cnVlKTsNCiAgICArCURM
R19DT0xPUihzZWFyY2hib3hfdGl0bGUsICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0
cnVlKTsNCiAgICArCURMR19DT0xPUihwb3NpdGlvbl9pbmRpY2F0b3IsICBDT0xPUl9CTFVFLCAg
IENPTE9SX1dISVRFLCB0cnVlKTsNCiAgICArCURMR19DT0xPUih0YWcsICAgICAgICAgICAgICAg
ICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsNCiAgICArCURMR19DT0xPUih0YWdf
a2V5LCAgICAgICAgICAgICBDT0xPUl9CTFVFLCAgIENPTE9SX1dISVRFLCB0cnVlKTsNCiAgICAr
DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFNlbGVjdCBjb2xvciB0aGVtZQ0KICAg
ICsgKi8NCiAgICArc3RhdGljIGludCBzZXRfdGhlbWUoY29uc3QgY2hhciAqdGhlbWUpDQogICAg
K3sNCiAgICArCWludCB1c2VfY29sb3IgPSAxOw0KICAgICsJaWYgKCF0aGVtZSkNCiAgICArCQlz
ZXRfYmx1ZXRpdGxlX3RoZW1lKCk7DQogICAgKwllbHNlIGlmIChzdHJjbXAodGhlbWUsICJjbGFz
c2ljIikgPT0gMCkNCiAgICArCQlzZXRfY2xhc3NpY190aGVtZSgpOw0KICAgICsJZWxzZSBpZiAo
c3RyY21wKHRoZW1lLCAiYmx1ZXRpdGxlIikgPT0gMCkNCiAgICArCQlzZXRfYmx1ZXRpdGxlX3Ro
ZW1lKCk7DQogICAgKwllbHNlIGlmIChzdHJjbXAodGhlbWUsICJibGFja2JnIikgPT0gMCkNCiAg
ICArCQlzZXRfYmxhY2tiZ190aGVtZSgpOw0KICAgICsJZWxzZSBpZiAoc3RyY21wKHRoZW1lLCAi
bW9ubyIpID09IDApDQogICAgKwkJdXNlX2NvbG9yID0gMDsNCiAgICArDQogICAgKwlyZXR1cm4g
dXNlX2NvbG9yOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBpbml0X29uZV9jb2xv
cihzdHJ1Y3QgZGlhbG9nX2NvbG9yICpjb2xvcikNCiAgICArew0KICAgICsJc3RhdGljIGludCBw
YWlyID0gMDsNCiAgICArDQogICAgKwlwYWlyKys7DQogICAgKwlpbml0X3BhaXIocGFpciwgY29s
b3ItPmZnLCBjb2xvci0+YmcpOw0KICAgICsJaWYgKGNvbG9yLT5obCkNCiAgICArCQljb2xvci0+
YXRyID0gQV9CT0xEIHwgQ09MT1JfUEFJUihwYWlyKTsNCiAgICArCWVsc2UNCiAgICArCQljb2xv
ci0+YXRyID0gQ09MT1JfUEFJUihwYWlyKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZv
aWQgaW5pdF9kaWFsb2dfY29sb3JzKHZvaWQpDQogICAgK3sNCiAgICArCWluaXRfb25lX2NvbG9y
KCZkbGcuc2NyZWVuKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuc2hhZG93KTsNCiAgICAr
CWluaXRfb25lX2NvbG9yKCZkbGcuZGlhbG9nKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcu
dGl0bGUpOw0KICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy5ib3JkZXIpOw0KICAgICsJaW5pdF9v
bmVfY29sb3IoJmRsZy5idXR0b25fYWN0aXZlKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcu
YnV0dG9uX2luYWN0aXZlKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2tleV9h
Y3RpdmUpOw0KICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy5idXR0b25fa2V5X2luYWN0aXZlKTsN
CiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuYnV0dG9uX2xhYmVsX2FjdGl2ZSk7DQogICAgKwlp
bml0X29uZV9jb2xvcigmZGxnLmJ1dHRvbl9sYWJlbF9pbmFjdGl2ZSk7DQogICAgKwlpbml0X29u
ZV9jb2xvcigmZGxnLmlucHV0Ym94KTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuaW5wdXRi
b3hfYm9yZGVyKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94KTsNCiAgICAr
CWluaXRfb25lX2NvbG9yKCZkbGcuc2VhcmNoYm94X3RpdGxlKTsNCiAgICArCWluaXRfb25lX2Nv
bG9yKCZkbGcuc2VhcmNoYm94X2JvcmRlcik7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLnBv
c2l0aW9uX2luZGljYXRvcik7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLm1lbnVib3gpOw0K
ICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy5tZW51Ym94X2JvcmRlcik7DQogICAgKwlpbml0X29u
ZV9jb2xvcigmZGxnLml0ZW0pOw0KICAgICsJaW5pdF9vbmVfY29sb3IoJmRsZy5pdGVtX3NlbGVj
dGVkKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcudGFnKTsNCiAgICArCWluaXRfb25lX2Nv
bG9yKCZkbGcudGFnX3NlbGVjdGVkKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcudGFnX2tl
eSk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLnRhZ19rZXlfc2VsZWN0ZWQpOw0KICAgICsJ
aW5pdF9vbmVfY29sb3IoJmRsZy5jaGVjayk7DQogICAgKwlpbml0X29uZV9jb2xvcigmZGxnLmNo
ZWNrX3NlbGVjdGVkKTsNCiAgICArCWluaXRfb25lX2NvbG9yKCZkbGcudWFycm93KTsNCiAgICAr
CWluaXRfb25lX2NvbG9yKCZkbGcuZGFycm93KTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAg
ICArICogU2V0dXAgZm9yIGNvbG9yIGRpc3BsYXkNCiAgICArICovDQogICAgK3N0YXRpYyB2b2lk
IGNvbG9yX3NldHVwKGNvbnN0IGNoYXIgKnRoZW1lKQ0KICAgICt7DQogICAgKwlpbnQgdXNlX2Nv
bG9yOw0KICAgICsNCiAgICArCXVzZV9jb2xvciA9IHNldF90aGVtZSh0aGVtZSk7DQogICAgKwlp
ZiAodXNlX2NvbG9yICYmIGhhc19jb2xvcnMoKSkgew0KICAgICsJCXN0YXJ0X2NvbG9yKCk7DQog
ICAgKwkJaW5pdF9kaWFsb2dfY29sb3JzKCk7DQogICAgKwl9IGVsc2UNCiAgICArCQlzZXRfbW9u
b190aGVtZSgpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBTZXQgd2luZG93IHRv
IGF0dHJpYnV0ZSAnYXR0cicNCiAgICArICovDQogICAgK3ZvaWQgYXR0cl9jbGVhcihXSU5ET1cg
KiB3aW4sIGludCBoZWlnaHQsIGludCB3aWR0aCwgY2h0eXBlIGF0dHIpDQogICAgK3sNCiAgICAr
CWludCBpLCBqOw0KICAgICsNCiAgICArCXdhdHRyc2V0KHdpbiwgYXR0cik7DQogICAgKwlmb3Ig
KGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsNCiAgICArCQl3bW92ZSh3aW4sIGksIDApOw0KICAg
ICsJCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKQ0KICAgICsJCQl3YWRkY2god2luLCAnICcp
Ow0KICAgICsJfQ0KICAgICsJdG91Y2h3aW4od2luKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9p
ZCBkaWFsb2dfY2xlYXIodm9pZCkNCiAgICArew0KICAgICsJaW50IGxpbmVzLCBjb2x1bW5zOw0K
ICAgICsNCiAgICArCWxpbmVzID0gZ2V0bWF4eShzdGRzY3IpOw0KICAgICsJY29sdW1ucyA9IGdl
dG1heHgoc3Rkc2NyKTsNCiAgICArDQogICAgKwlhdHRyX2NsZWFyKHN0ZHNjciwgbGluZXMsIGNv
bHVtbnMsIGRsZy5zY3JlZW4uYXRyKTsNCiAgICArCS8qIERpc3BsYXkgYmFja2dyb3VuZCB0aXRs
ZSBpZiBpdCBleGlzdHMgLi4uIC0gU0xIICovDQogICAgKwlpZiAoZGxnLmJhY2t0aXRsZSAhPSBO
VUxMKSB7DQogICAgKwkJaW50IGksIGxlbiA9IDAsIHNraXAgPSAwOw0KICAgICsJCXN0cnVjdCBz
dWJ0aXRsZV9saXN0ICpwb3M7DQogICAgKw0KICAgICsJCXdhdHRyc2V0KHN0ZHNjciwgZGxnLnNj
cmVlbi5hdHIpOw0KICAgICsJCW12d2FkZHN0cihzdGRzY3IsIDAsIDEsIChjaGFyICopZGxnLmJh
Y2t0aXRsZSk7DQogICAgKw0KICAgICsJCWZvciAocG9zID0gZGxnLnN1YnRpdGxlczsgcG9zICE9
IE5VTEw7IHBvcyA9IHBvcy0+bmV4dCkgew0KICAgICsJCQkvKiAzIGlzIGZvciB0aGUgYXJyb3cg
YW5kIHNwYWNlcyAqLw0KICAgICsJCQlsZW4gKz0gc3RybGVuKHBvcy0+dGV4dCkgKyAzOw0KICAg
ICsJCX0NCiAgICArDQogICAgKwkJd21vdmUoc3Rkc2NyLCAxLCAxKTsNCiAgICArCQlpZiAobGVu
ID4gY29sdW1ucyAtIDIpIHsNCiAgICArCQkJY29uc3QgY2hhciAqZWxsaXBzaXMgPSAiWy4uLl0g
IjsNCiAgICArCQkJd2FkZHN0cihzdGRzY3IsIGVsbGlwc2lzKTsNCiAgICArCQkJc2tpcCA9IGxl
biAtIChjb2x1bW5zIC0gMiAtIHN0cmxlbihlbGxpcHNpcykpOw0KICAgICsJCX0NCiAgICArDQog
ICAgKwkJZm9yIChwb3MgPSBkbGcuc3VidGl0bGVzOyBwb3MgIT0gTlVMTDsgcG9zID0gcG9zLT5u
ZXh0KSB7DQogICAgKwkJCWlmIChza2lwID09IDApDQogICAgKwkJCQl3YWRkY2goc3Rkc2NyLCBB
Q1NfUkFSUk9XKTsNCiAgICArCQkJZWxzZQ0KICAgICsJCQkJc2tpcC0tOw0KICAgICsNCiAgICAr
CQkJaWYgKHNraXAgPT0gMCkNCiAgICArCQkJCXdhZGRjaChzdGRzY3IsICcgJyk7DQogICAgKwkJ
CWVsc2UNCiAgICArCQkJCXNraXAtLTsNCiAgICArDQogICAgKwkJCWlmIChza2lwIDwgc3RybGVu
KHBvcy0+dGV4dCkpIHsNCiAgICArCQkJCXdhZGRzdHIoc3Rkc2NyLCBwb3MtPnRleHQgKyBza2lw
KTsNCiAgICArCQkJCXNraXAgPSAwOw0KICAgICsJCQl9IGVsc2UNCiAgICArCQkJCXNraXAgLT0g
c3RybGVuKHBvcy0+dGV4dCk7DQogICAgKw0KICAgICsJCQlpZiAoc2tpcCA9PSAwKQ0KICAgICsJ
CQkJd2FkZGNoKHN0ZHNjciwgJyAnKTsNCiAgICArCQkJZWxzZQ0KICAgICsJCQkJc2tpcC0tOw0K
ICAgICsJCX0NCiAgICArDQogICAgKwkJZm9yIChpID0gbGVuICsgMTsgaSA8IGNvbHVtbnMgLSAx
OyBpKyspDQogICAgKwkJCXdhZGRjaChzdGRzY3IsIEFDU19ITElORSk7DQogICAgKwl9DQogICAg
Kwl3bm91dHJlZnJlc2goc3Rkc2NyKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICog
RG8gc29tZSBpbml0aWFsaXphdGlvbiBmb3IgZGlhbG9nDQogICAgKyAqLw0KICAgICtpbnQgaW5p
dF9kaWFsb2coY29uc3QgY2hhciAqYmFja3RpdGxlKQ0KICAgICt7DQogICAgKwlpbnQgaGVpZ2h0
LCB3aWR0aDsNCiAgICArDQogICAgKwlpbml0c2NyKCk7CQkvKiBJbml0IGN1cnNlcyAqLw0KICAg
ICsNCiAgICArCS8qIEdldCBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiBmb3Igc2lnbmFsIGhhbmRs
ZXIgaW4gbWNvbmYuYyAqLw0KICAgICsJZ2V0eXgoc3Rkc2NyLCBzYXZlZF95LCBzYXZlZF94KTsN
CiAgICArDQogICAgKwlnZXRtYXh5eChzdGRzY3IsIGhlaWdodCwgd2lkdGgpOw0KICAgICsJaWYg
KGhlaWdodCA8IFdJTkRPV19IRUlHVEhfTUlOIHx8IHdpZHRoIDwgV0lORE9XX1dJRFRIX01JTikg
ew0KICAgICsJCWVuZHdpbigpOw0KICAgICsJCXJldHVybiAtRVJSRElTUExBWVRPT1NNQUxMOw0K
ICAgICsJfQ0KICAgICsNCiAgICArCWRsZy5iYWNrdGl0bGUgPSBiYWNrdGl0bGU7DQogICAgKwlj
b2xvcl9zZXR1cChnZXRlbnYoIk1FTlVDT05GSUdfQ09MT1IiKSk7DQogICAgKw0KICAgICsJa2V5
cGFkKHN0ZHNjciwgVFJVRSk7DQogICAgKwljYnJlYWsoKTsNCiAgICArCW5vZWNobygpOw0KICAg
ICsJZGlhbG9nX2NsZWFyKCk7DQogICAgKw0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICAr
DQogICAgK3ZvaWQgc2V0X2RpYWxvZ19iYWNrdGl0bGUoY29uc3QgY2hhciAqYmFja3RpdGxlKQ0K
ICAgICt7DQogICAgKwlkbGcuYmFja3RpdGxlID0gYmFja3RpdGxlOw0KICAgICt9DQogICAgKw0K
ICAgICt2b2lkIHNldF9kaWFsb2dfc3VidGl0bGVzKHN0cnVjdCBzdWJ0aXRsZV9saXN0ICpzdWJ0
aXRsZXMpDQogICAgK3sNCiAgICArCWRsZy5zdWJ0aXRsZXMgPSBzdWJ0aXRsZXM7DQogICAgK30N
CiAgICArDQogICAgKy8qDQogICAgKyAqIEVuZCB1c2luZyBkaWFsb2cgZnVuY3Rpb25zLg0KICAg
ICsgKi8NCiAgICArdm9pZCBlbmRfZGlhbG9nKGludCB4LCBpbnQgeSkNCiAgICArew0KICAgICsJ
LyogbW92ZSBjdXJzb3IgYmFjayB0byBvcmlnaW5hbCBwb3NpdGlvbiAqLw0KICAgICsJbW92ZSh5
LCB4KTsNCiAgICArCXJlZnJlc2goKTsNCiAgICArCWVuZHdpbigpOw0KICAgICt9DQogICAgKw0K
ICAgICsvKiBQcmludCB0aGUgdGl0bGUgb2YgdGhlIGRpYWxvZy4gQ2VudGVyIHRoZSB0aXRsZSBh
bmQgdHJ1bmNhdGUNCiAgICArICogdGlsZSBpZiB3aWRlciB0aGFuIGRpYWxvZyAoLSAyIGNoYXJz
KS4NCiAgICArICoqLw0KICAgICt2b2lkIHByaW50X3RpdGxlKFdJTkRPVyAqZGlhbG9nLCBjb25z
dCBjaGFyICp0aXRsZSwgaW50IHdpZHRoKQ0KICAgICt7DQogICAgKwlpZiAodGl0bGUpIHsNCiAg
ICArCQlpbnQgdGxlbiA9IE1JTih3aWR0aCAtIDIsIHN0cmxlbih0aXRsZSkpOw0KICAgICsJCXdh
dHRyc2V0KGRpYWxvZywgZGxnLnRpdGxlLmF0cik7DQogICAgKwkJbXZ3YWRkY2goZGlhbG9nLCAw
LCAod2lkdGggLSB0bGVuKSAvIDIgLSAxLCAnICcpOw0KICAgICsJCW12d2FkZG5zdHIoZGlhbG9n
LCAwLCAod2lkdGggLSB0bGVuKS8yLCB0aXRsZSwgdGxlbik7DQogICAgKwkJd2FkZGNoKGRpYWxv
ZywgJyAnKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogUHJpbnQg
YSBzdHJpbmcgb2YgdGV4dCBpbiBhIHdpbmRvdywgYXV0b21hdGljYWxseSB3cmFwIGFyb3VuZCB0
byB0aGUNCiAgICArICogbmV4dCBsaW5lIGlmIHRoZSBzdHJpbmcgaXMgdG9vIGxvbmcgdG8gZml0
IG9uIG9uZSBsaW5lLiBOZXdsaW5lDQogICAgKyAqIGNoYXJhY3RlcnMgJ1xuJyBhcmUgcHJvcHBl
cmx5IHByb2Nlc3NlZC4gIFdlIHN0YXJ0IG9uIGEgbmV3IGxpbmUNCiAgICArICogaWYgdGhlcmUg
aXMgbm8gcm9vbSBmb3IgYXQgbGVhc3QgNCBub25ibGFua3MgZm9sbG93aW5nIGEgZG91YmxlLXNw
YWNlLg0KICAgICsgKi8NCiAgICArdm9pZCBwcmludF9hdXRvd3JhcChXSU5ET1cgKiB3aW4sIGNv
bnN0IGNoYXIgKnByb21wdCwgaW50IHdpZHRoLCBpbnQgeSwgaW50IHgpDQogICAgK3sNCiAgICAr
CWludCBuZXdsLCBjdXJfeCwgY3VyX3k7DQogICAgKwlpbnQgcHJvbXB0X2xlbiwgcm9vbSwgd2xl
bjsNCiAgICArCWNoYXIgdGVtcHN0cltNQVhfTEVOICsgMV0sICp3b3JkLCAqc3AsICpzcDIsICpu
ZXdsaW5lX3NlcGFyYXRvciA9IDA7DQogICAgKw0KICAgICsJc3RyY3B5KHRlbXBzdHIsIHByb21w
dCk7DQogICAgKw0KICAgICsJcHJvbXB0X2xlbiA9IHN0cmxlbih0ZW1wc3RyKTsNCiAgICArDQog
ICAgKwlpZiAocHJvbXB0X2xlbiA8PSB3aWR0aCAtIHggKiAyKSB7CS8qIElmIHByb21wdCBpcyBz
aG9ydCAqLw0KICAgICsJCXdtb3ZlKHdpbiwgeSwgKHdpZHRoIC0gcHJvbXB0X2xlbikgLyAyKTsN
CiAgICArCQl3YWRkc3RyKHdpbiwgdGVtcHN0cik7DQogICAgKwl9IGVsc2Ugew0KICAgICsJCWN1
cl94ID0geDsNCiAgICArCQljdXJfeSA9IHk7DQogICAgKwkJbmV3bCA9IDE7DQogICAgKwkJd29y
ZCA9IHRlbXBzdHI7DQogICAgKwkJd2hpbGUgKHdvcmQgJiYgKndvcmQpIHsNCiAgICArCQkJc3Ag
PSBzdHJwYnJrKHdvcmQsICJcbiAiKTsNCiAgICArCQkJaWYgKHNwICYmICpzcCA9PSAnXG4nKQ0K
ICAgICsJCQkJbmV3bGluZV9zZXBhcmF0b3IgPSBzcDsNCiAgICArDQogICAgKwkJCWlmIChzcCkN
CiAgICArCQkJCSpzcCsrID0gMDsNCiAgICArDQogICAgKwkJCS8qIFdyYXAgdG8gbmV4dCBsaW5l
IGlmIGVpdGhlciB0aGUgd29yZCBkb2VzIG5vdCBmaXQsDQogICAgKwkJCSAgIG9yIGl0IGlzIHRo
ZSBmaXJzdCB3b3JkIG9mIGEgbmV3IHNlbnRlbmNlLCBhbmQgaXQgaXMNCiAgICArCQkJICAgc2hv
cnQsIGFuZCB0aGUgbmV4dCB3b3JkIGRvZXMgbm90IGZpdC4gKi8NCiAgICArCQkJcm9vbSA9IHdp
ZHRoIC0gY3VyX3g7DQogICAgKwkJCXdsZW4gPSBzdHJsZW4od29yZCk7DQogICAgKwkJCWlmICh3
bGVuID4gcm9vbSB8fA0KICAgICsJCQkgICAgKG5ld2wgJiYgd2xlbiA8IDQgJiYgc3ANCiAgICAr
CQkJICAgICAmJiB3bGVuICsgMSArIHN0cmxlbihzcCkgPiByb29tDQogICAgKwkJCSAgICAgJiYg
KCEoc3AyID0gc3RycGJyayhzcCwgIlxuICIpKQ0KICAgICsJCQkJIHx8IHdsZW4gKyAxICsgKHNw
MiAtIHNwKSA+IHJvb20pKSkgew0KICAgICsJCQkJY3VyX3krKzsNCiAgICArCQkJCWN1cl94ID0g
eDsNCiAgICArCQkJfQ0KICAgICsJCQl3bW92ZSh3aW4sIGN1cl95LCBjdXJfeCk7DQogICAgKwkJ
CXdhZGRzdHIod2luLCB3b3JkKTsNCiAgICArCQkJZ2V0eXgod2luLCBjdXJfeSwgY3VyX3gpOw0K
ICAgICsNCiAgICArCQkJLyogTW92ZSB0byB0aGUgbmV4dCBsaW5lIGlmIHRoZSB3b3JkIHNlcGFy
YXRvciB3YXMgYSBuZXdsaW5lICovDQogICAgKwkJCWlmIChuZXdsaW5lX3NlcGFyYXRvcikgew0K
ICAgICsJCQkJY3VyX3krKzsNCiAgICArCQkJCWN1cl94ID0geDsNCiAgICArCQkJCW5ld2xpbmVf
c2VwYXJhdG9yID0gMDsNCiAgICArCQkJfSBlbHNlDQogICAgKwkJCQljdXJfeCsrOw0KICAgICsN
CiAgICArCQkJaWYgKHNwICYmICpzcCA9PSAnICcpIHsNCiAgICArCQkJCWN1cl94Kys7CS8qIGRv
dWJsZSBzcGFjZSAqLw0KICAgICsJCQkJd2hpbGUgKCorK3NwID09ICcgJykgOw0KICAgICsJCQkJ
bmV3bCA9IDE7DQogICAgKwkJCX0gZWxzZQ0KICAgICsJCQkJbmV3bCA9IDA7DQogICAgKwkJCXdv
cmQgPSBzcDsNCiAgICArCQl9DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAg
KyAqIFByaW50IGEgYnV0dG9uDQogICAgKyAqLw0KICAgICt2b2lkIHByaW50X2J1dHRvbihXSU5E
T1cgKiB3aW4sIGNvbnN0IGNoYXIgKmxhYmVsLCBpbnQgeSwgaW50IHgsIGludCBzZWxlY3RlZCkN
CiAgICArew0KICAgICsJaW50IGksIHRlbXA7DQogICAgKw0KICAgICsJd21vdmUod2luLCB5LCB4
KTsNCiAgICArCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2FjdGl2ZS5hdHIN
CiAgICArCQkgOiBkbGcuYnV0dG9uX2luYWN0aXZlLmF0cik7DQogICAgKwl3YWRkc3RyKHdpbiwg
IjwiKTsNCiAgICArCXRlbXAgPSBzdHJzcG4obGFiZWwsICIgIik7DQogICAgKwlsYWJlbCArPSB0
ZW1wOw0KICAgICsJd2F0dHJzZXQod2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fbGFiZWxfYWN0
aXZlLmF0cg0KICAgICsJCSA6IGRsZy5idXR0b25fbGFiZWxfaW5hY3RpdmUuYXRyKTsNCiAgICAr
CWZvciAoaSA9IDA7IGkgPCB0ZW1wOyBpKyspDQogICAgKwkJd2FkZGNoKHdpbiwgJyAnKTsNCiAg
ICArCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2tleV9hY3RpdmUuYXRyDQog
ICAgKwkJIDogZGxnLmJ1dHRvbl9rZXlfaW5hY3RpdmUuYXRyKTsNCiAgICArCXdhZGRjaCh3aW4s
IGxhYmVsWzBdKTsNCiAgICArCXdhdHRyc2V0KHdpbiwgc2VsZWN0ZWQgPyBkbGcuYnV0dG9uX2xh
YmVsX2FjdGl2ZS5hdHINCiAgICArCQkgOiBkbGcuYnV0dG9uX2xhYmVsX2luYWN0aXZlLmF0cik7
DQogICAgKwl3YWRkc3RyKHdpbiwgKGNoYXIgKilsYWJlbCArIDEpOw0KICAgICsJd2F0dHJzZXQo
d2luLCBzZWxlY3RlZCA/IGRsZy5idXR0b25fYWN0aXZlLmF0cg0KICAgICsJCSA6IGRsZy5idXR0
b25faW5hY3RpdmUuYXRyKTsNCiAgICArCXdhZGRzdHIod2luLCAiPiIpOw0KICAgICsJd21vdmUo
d2luLCB5LCB4ICsgdGVtcCArIDEpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBE
cmF3IGEgcmVjdGFuZ3VsYXIgYm94IHdpdGggbGluZSBkcmF3aW5nIGNoYXJhY3RlcnMNCiAgICAr
ICovDQogICAgK3ZvaWQNCiAgICArZHJhd19ib3goV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgs
IGludCBoZWlnaHQsIGludCB3aWR0aCwNCiAgICArCSBjaHR5cGUgYm94LCBjaHR5cGUgYm9yZGVy
KQ0KICAgICt7DQogICAgKwlpbnQgaSwgajsNCiAgICArDQogICAgKwl3YXR0cnNldCh3aW4sIDAp
Ow0KICAgICsJZm9yIChpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7DQogICAgKwkJd21vdmUod2lu
LCB5ICsgaSwgeCk7DQogICAgKwkJZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspDQogICAgKwkJ
CWlmICghaSAmJiAhaikNCiAgICArCQkJCXdhZGRjaCh3aW4sIGJvcmRlciB8IEFDU19VTENPUk5F
Uik7DQogICAgKwkJCWVsc2UgaWYgKGkgPT0gaGVpZ2h0IC0gMSAmJiAhaikNCiAgICArCQkJCXdh
ZGRjaCh3aW4sIGJvcmRlciB8IEFDU19MTENPUk5FUik7DQogICAgKwkJCWVsc2UgaWYgKCFpICYm
IGogPT0gd2lkdGggLSAxKQ0KICAgICsJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1VSQ09STkVS
KTsNCiAgICArCQkJZWxzZSBpZiAoaSA9PSBoZWlnaHQgLSAxICYmIGogPT0gd2lkdGggLSAxKQ0K
ICAgICsJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX0xSQ09STkVSKTsNCiAgICArCQkJZWxzZSBp
ZiAoIWkpDQogICAgKwkJCQl3YWRkY2god2luLCBib3JkZXIgfCBBQ1NfSExJTkUpOw0KICAgICsJ
CQllbHNlIGlmIChpID09IGhlaWdodCAtIDEpDQogICAgKwkJCQl3YWRkY2god2luLCBib3ggfCBB
Q1NfSExJTkUpOw0KICAgICsJCQllbHNlIGlmICghaikNCiAgICArCQkJCXdhZGRjaCh3aW4sIGJv
cmRlciB8IEFDU19WTElORSk7DQogICAgKwkJCWVsc2UgaWYgKGogPT0gd2lkdGggLSAxKQ0KICAg
ICsJCQkJd2FkZGNoKHdpbiwgYm94IHwgQUNTX1ZMSU5FKTsNCiAgICArCQkJZWxzZQ0KICAgICsJ
CQkJd2FkZGNoKHdpbiwgYm94IHwgJyAnKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICAr
LyoNCiAgICArICogRHJhdyBzaGFkb3dzIGFsb25nIHRoZSByaWdodCBhbmQgYm90dG9tIGVkZ2Ug
dG8gZ2l2ZSBhIG1vcmUgM0QgbG9vaw0KICAgICsgKiB0byB0aGUgYm94ZXMNCiAgICArICovDQog
ICAgK3ZvaWQgZHJhd19zaGFkb3coV0lORE9XICogd2luLCBpbnQgeSwgaW50IHgsIGludCBoZWln
aHQsIGludCB3aWR0aCkNCiAgICArew0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJaWYgKGhh
c19jb2xvcnMoKSkgewkvKiBXaGV0aGVyIHRlcm1pbmFsIHN1cHBvcnRzIGNvbG9yPyAqLw0KICAg
ICsJCXdhdHRyc2V0KHdpbiwgZGxnLnNoYWRvdy5hdHIpOw0KICAgICsJCXdtb3ZlKHdpbiwgeSAr
IGhlaWdodCwgeCArIDIpOw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKQ0KICAg
ICsJCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7DQogICAgKwkJZm9yIChp
ID0geSArIDE7IGkgPCB5ICsgaGVpZ2h0ICsgMTsgaSsrKSB7DQogICAgKwkJCXdtb3ZlKHdpbiwg
aSwgeCArIHdpZHRoKTsNCiAgICArCQkJd2FkZGNoKHdpbiwgd2luY2god2luKSAmIEFfQ0hBUlRF
WFQpOw0KICAgICsJCQl3YWRkY2god2luLCB3aW5jaCh3aW4pICYgQV9DSEFSVEVYVCk7DQogICAg
KwkJfQ0KICAgICsJCXdub3V0cmVmcmVzaCh3aW4pOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0K
ICAgICsvKg0KICAgICsgKiAgUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYWxwaGFi
ZXRpYyBjaGFyYWN0ZXIgaW4gYSBzdHJpbmcuDQogICAgKyAqLw0KICAgICtpbnQgZmlyc3RfYWxw
aGEoY29uc3QgY2hhciAqc3RyaW5nLCBjb25zdCBjaGFyICpleGVtcHQpDQogICAgK3sNCiAgICAr
CWludCBpLCBpbl9wYXJlbiA9IDAsIGM7DQogICAgKw0KICAgICsJZm9yIChpID0gMDsgaSA8IHN0
cmxlbihzdHJpbmcpOyBpKyspIHsNCiAgICArCQljID0gdG9sb3dlcihzdHJpbmdbaV0pOw0KICAg
ICsNCiAgICArCQlpZiAoc3RyY2hyKCI8WygiLCBjKSkNCiAgICArCQkJKytpbl9wYXJlbjsNCiAg
ICArCQlpZiAoc3RyY2hyKCI+XSkiLCBjKSAmJiBpbl9wYXJlbiA+IDApDQogICAgKwkJCS0taW5f
cGFyZW47DQogICAgKw0KICAgICsJCWlmICgoIWluX3BhcmVuKSAmJiBpc2FscGhhKGMpICYmIHN0
cmNocihleGVtcHQsIGMpID09IDApDQogICAgKwkJCXJldHVybiBpOw0KICAgICsJfQ0KICAgICsN
CiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBuY3Vyc2Vz
IHVzZXMgRVNDIHRvIGRldGVjdCBlc2NhcGVkIGNoYXIgc2VxdWVuY2VzLiBUaGlzIHJlc3V0bCBp
bg0KICAgICsgKiBhIHNtYWxsIHRpbWVvdXQgYmVmb3JlIEVTQyBpcyBhY3R1YWxseSBkZWxpdmVy
ZWQgdG8gdGhlIGFwcGxpY2F0aW9uLg0KICAgICsgKiBseGRpYWxvZyBzdWdnZXN0IDxFU0M+IDxF
U0M+IHdoaWNoIGlzIGNvcnJlY3RseSB0cmFuc2xhdGVkIHRvIHR3bw0KICAgICsgKiB0aW1lcyBl
c2MuIEJ1dCB0aGVuIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBzZWNvbmQgZXNjIHRvIGF2b2lkIHN0
ZXBwaW5nDQogICAgKyAqIG91dCBvbmUgbWVudSB0b28gbXVjaC4gRmlsdGVyIGF3YXkgYWxsIGVz
Y2FwZWQga2V5IHNlcXVlbmNlcyBzaW5jZQ0KICAgICsgKiBrZXlwYWQoRkFMU0UpIHR1cm4gb2Zm
IG5jdXJzZXMgc3VwcG9ydCBmb3IgZXNjYXBlIHNlcXVlbmNlcyAtIGFuZCB0aGF0cw0KICAgICsg
KiBuZWVkZWQgdG8gbWFrZSBub3RpbWVvdXQoKSBkbyBhcyBleHBlY3RlZC4NCiAgICArICovDQog
ICAgK2ludCBvbl9rZXlfZXNjKFdJTkRPVyAqd2luKQ0KICAgICt7DQogICAgKwlpbnQga2V5Ow0K
ICAgICsJaW50IGtleTI7DQogICAgKwlpbnQga2V5MzsNCiAgICArDQogICAgKwlub2RlbGF5KHdp
biwgVFJVRSk7DQogICAgKwlrZXlwYWQod2luLCBGQUxTRSk7DQogICAgKwlrZXkgPSB3Z2V0Y2go
d2luKTsNCiAgICArCWtleTIgPSB3Z2V0Y2god2luKTsNCiAgICArCWRvIHsNCiAgICArCQlrZXkz
ID0gd2dldGNoKHdpbik7DQogICAgKwl9IHdoaWxlIChrZXkzICE9IEVSUik7DQogICAgKwlub2Rl
bGF5KHdpbiwgRkFMU0UpOw0KICAgICsJa2V5cGFkKHdpbiwgVFJVRSk7DQogICAgKwlpZiAoa2V5
ID09IEtFWV9FU0MgJiYga2V5MiA9PSBFUlIpDQogICAgKwkJcmV0dXJuIEtFWV9FU0M7DQogICAg
KwllbHNlIGlmIChrZXkgIT0gRVJSICYmIGtleSAhPSBLRVlfRVNDICYmIGtleTIgPT0gRVJSKQ0K
ICAgICsJCXVuZ2V0Y2goa2V5KTsNCiAgICArDQogICAgKwlyZXR1cm4gLTE7DQogICAgK30NCiAg
ICArDQogICAgKy8qIHJlZHJhdyBzY3JlZW4gaW4gbmV3IHNpemUgKi8NCiAgICAraW50IG9uX2tl
eV9yZXNpemUodm9pZCkNCiAgICArew0KICAgICsJZGlhbG9nX2NsZWFyKCk7DQogICAgKwlyZXR1
cm4gS0VZX1JFU0laRTsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IGRpYWxvZ19saXN0ICpp
dGVtX2N1cjsNCiAgICArc3RydWN0IGRpYWxvZ19saXN0IGl0ZW1fbmlsOw0KICAgICtzdHJ1Y3Qg
ZGlhbG9nX2xpc3QgKml0ZW1faGVhZDsNCiAgICArDQogICAgK3ZvaWQgaXRlbV9yZXNldCh2b2lk
KQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnAsICpuZXh0Ow0KICAgICsNCiAg
ICArCWZvciAocCA9IGl0ZW1faGVhZDsgcDsgcCA9IG5leHQpIHsNCiAgICArCQluZXh0ID0gcC0+
bmV4dDsNCiAgICArCQlmcmVlKHApOw0KICAgICsJfQ0KICAgICsJaXRlbV9oZWFkID0gTlVMTDsN
CiAgICArCWl0ZW1fY3VyID0gJml0ZW1fbmlsOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIGl0
ZW1fbWFrZShjb25zdCBjaGFyICpmbXQsIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBhcDsN
CiAgICArCXN0cnVjdCBkaWFsb2dfbGlzdCAqcCA9IG1hbGxvYyhzaXplb2YoKnApKTsNCiAgICAr
DQogICAgKwlpZiAoaXRlbV9oZWFkKQ0KICAgICsJCWl0ZW1fY3VyLT5uZXh0ID0gcDsNCiAgICAr
CWVsc2UNCiAgICArCQlpdGVtX2hlYWQgPSBwOw0KICAgICsJaXRlbV9jdXIgPSBwOw0KICAgICsJ
bWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOw0KICAgICsNCiAgICArCXZhX3N0YXJ0KGFwLCBmbXQp
Ow0KICAgICsJdnNucHJpbnRmKGl0ZW1fY3VyLT5ub2RlLnN0ciwgc2l6ZW9mKGl0ZW1fY3VyLT5u
b2RlLnN0ciksIGZtdCwgYXApOw0KICAgICsJdmFfZW5kKGFwKTsNCiAgICArfQ0KICAgICsNCiAg
ICArdm9pZCBpdGVtX2FkZF9zdHIoY29uc3QgY2hhciAqZm10LCAuLi4pDQogICAgK3sNCiAgICAr
CXZhX2xpc3QgYXA7DQogICAgKwlzaXplX3QgYXZhaWw7DQogICAgKw0KICAgICsJYXZhaWwgPSBz
aXplb2YoaXRlbV9jdXItPm5vZGUuc3RyKSAtIHN0cmxlbihpdGVtX2N1ci0+bm9kZS5zdHIpOw0K
ICAgICsNCiAgICArCXZhX3N0YXJ0KGFwLCBmbXQpOw0KICAgICsJdnNucHJpbnRmKGl0ZW1fY3Vy
LT5ub2RlLnN0ciArIHN0cmxlbihpdGVtX2N1ci0+bm9kZS5zdHIpLA0KICAgICsJCSAgYXZhaWws
IGZtdCwgYXApOw0KICAgICsJaXRlbV9jdXItPm5vZGUuc3RyW3NpemVvZihpdGVtX2N1ci0+bm9k
ZS5zdHIpIC0gMV0gPSAnXDAnOw0KICAgICsJdmFfZW5kKGFwKTsNCiAgICArfQ0KICAgICsNCiAg
ICArdm9pZCBpdGVtX3NldF90YWcoY2hhciB0YWcpDQogICAgK3sNCiAgICArCWl0ZW1fY3VyLT5u
b2RlLnRhZyA9IHRhZzsNCiAgICArfQ0KICAgICt2b2lkIGl0ZW1fc2V0X2RhdGEodm9pZCAqcHRy
KQ0KICAgICt7DQogICAgKwlpdGVtX2N1ci0+bm9kZS5kYXRhID0gcHRyOw0KICAgICt9DQogICAg
Kw0KICAgICt2b2lkIGl0ZW1fc2V0X3NlbGVjdGVkKGludCB2YWwpDQogICAgK3sNCiAgICArCWl0
ZW1fY3VyLT5ub2RlLnNlbGVjdGVkID0gdmFsOw0KICAgICt9DQogICAgKw0KICAgICtpbnQgaXRl
bV9hY3RpdmF0ZV9zZWxlY3RlZCh2b2lkKQ0KICAgICt7DQogICAgKwlpdGVtX2ZvcmVhY2goKQ0K
ICAgICsJCWlmIChpdGVtX2lzX3NlbGVjdGVkKCkpDQogICAgKwkJCXJldHVybiAxOw0KICAgICsJ
cmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgKml0ZW1fZGF0YSh2b2lkKQ0KICAg
ICt7DQogICAgKwlyZXR1cm4gaXRlbV9jdXItPm5vZGUuZGF0YTsNCiAgICArfQ0KICAgICsNCiAg
ICArY2hhciBpdGVtX3RhZyh2b2lkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gaXRlbV9jdXItPm5v
ZGUudGFnOw0KICAgICt9DQogICAgKw0KICAgICtpbnQgaXRlbV9jb3VudCh2b2lkKQ0KICAgICt7
DQogICAgKwlpbnQgbiA9IDA7DQogICAgKwlzdHJ1Y3QgZGlhbG9nX2xpc3QgKnA7DQogICAgKw0K
ICAgICsJZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+bmV4dCkNCiAgICArCQluKys7DQog
ICAgKwlyZXR1cm4gbjsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBpdGVtX3NldChpbnQgbikN
CiAgICArew0KICAgICsJaW50IGkgPSAwOw0KICAgICsJaXRlbV9mb3JlYWNoKCkNCiAgICArCQlp
ZiAoaSsrID09IG4pDQogICAgKwkJCXJldHVybjsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGl0
ZW1fbih2b2lkKQ0KICAgICt7DQogICAgKwlpbnQgbiA9IDA7DQogICAgKwlzdHJ1Y3QgZGlhbG9n
X2xpc3QgKnA7DQogICAgKw0KICAgICsJZm9yIChwID0gaXRlbV9oZWFkOyBwOyBwID0gcC0+bmV4
dCkgew0KICAgICsJCWlmIChwID09IGl0ZW1fY3VyKQ0KICAgICsJCQlyZXR1cm4gbjsNCiAgICAr
CQluKys7DQogICAgKwl9DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICArY29u
c3QgY2hhciAqaXRlbV9zdHIodm9pZCkNCiAgICArew0KICAgICsJcmV0dXJuIGl0ZW1fY3VyLT5u
b2RlLnN0cjsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGl0ZW1faXNfc2VsZWN0ZWQodm9pZCkN
CiAgICArew0KICAgICsJcmV0dXJuIChpdGVtX2N1ci0+bm9kZS5zZWxlY3RlZCAhPSAwKTsNCiAg
ICArfQ0KICAgICsNCiAgICAraW50IGl0ZW1faXNfdGFnKGNoYXIgdGFnKQ0KICAgICt7DQogICAg
KwlyZXR1cm4gKGl0ZW1fY3VyLT5ub2RlLnRhZyA9PSB0YWcpOw0KICAgICt9DQogICAgZGlmZiAt
LWdpdCBhL3N1cHBvcnQva2NvbmZpZy9seGRpYWxvZy95ZXNuby5jIGIvc3VwcG9ydC9rY29uZmln
L2x4ZGlhbG9nL3llc25vLmMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAw
MDAwMDAuLmJjYWFjOWINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29u
ZmlnL2x4ZGlhbG9nL3llc25vLmMNCiAgICBAQCAtMCwwICsxLDEwMSBAQA0KICAgICsvLyBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCsNCiAgICArLyoNCiAgICArICogIHllc25vLmMg
LS0gaW1wbGVtZW50cyB0aGUgeWVzL25vIGJveA0KICAgICsgKg0KICAgICsgKiAgT1JJR0lOQUwg
QVVUSE9SOiBTYXZpbyBMYW0gKGxhbTgzNkBjcy5jdWhrLmhrKQ0KICAgICsgKiAgTU9ESUZJRUQg
Rk9SIExJTlVYIEtFUk5FTCBDT05GSUcgQlk6IFdpbGxpYW0gUm9hZGNhcCAocm9hZGNhcEBjZncu
Y29tKQ0KICAgICsgKi8NCiAgICArDQogICAgKyNpbmNsdWRlICJkaWFsb2cuaCINCiAgICArDQog
ICAgKy8qDQogICAgKyAqIERpc3BsYXkgdGVybWluYXRpb24gYnV0dG9ucw0KICAgICsgKi8NCiAg
ICArc3RhdGljIHZvaWQgcHJpbnRfYnV0dG9ucyhXSU5ET1cgKiBkaWFsb2csIGludCBoZWlnaHQs
IGludCB3aWR0aCwgaW50IHNlbGVjdGVkKQ0KICAgICt7DQogICAgKwlpbnQgeCA9IHdpZHRoIC8g
MiAtIDEwOw0KICAgICsJaW50IHkgPSBoZWlnaHQgLSAyOw0KICAgICsNCiAgICArCXByaW50X2J1
dHRvbihkaWFsb2csICIgWWVzICIsIHksIHgsIHNlbGVjdGVkID09IDApOw0KICAgICsJcHJpbnRf
YnV0dG9uKGRpYWxvZywgIiAgTm8gICIsIHksIHggKyAxMywgc2VsZWN0ZWQgPT0gMSk7DQogICAg
Kw0KICAgICsJd21vdmUoZGlhbG9nLCB5LCB4ICsgMSArIDEzICogc2VsZWN0ZWQpOw0KICAgICsJ
d3JlZnJlc2goZGlhbG9nKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogRGlzcGxh
eSBhIGRpYWxvZyBib3ggd2l0aCB0d28gYnV0dG9ucyAtIFllcyBhbmQgTm8NCiAgICArICovDQog
ICAgK2ludCBkaWFsb2dfeWVzbm8oY29uc3QgY2hhciAqdGl0bGUsIGNvbnN0IGNoYXIgKnByb21w
dCwgaW50IGhlaWdodCwgaW50IHdpZHRoKQ0KICAgICt7DQogICAgKwlpbnQgaSwgeCwgeSwga2V5
ID0gMCwgYnV0dG9uID0gMDsNCiAgICArCVdJTkRPVyAqZGlhbG9nOw0KICAgICsNCiAgICArZG9f
cmVzaXplOg0KICAgICsJaWYgKGdldG1heHkoc3Rkc2NyKSA8IChoZWlnaHQgKyBZRVNOT19IRUlH
VEhfTUlOKSkNCiAgICArCQlyZXR1cm4gLUVSUkRJU1BMQVlUT09TTUFMTDsNCiAgICArCWlmIChn
ZXRtYXh4KHN0ZHNjcikgPCAod2lkdGggKyBZRVNOT19XSURUSF9NSU4pKQ0KICAgICsJCXJldHVy
biAtRVJSRElTUExBWVRPT1NNQUxMOw0KICAgICsNCiAgICArCS8qIGNlbnRlciBkaWFsb2cgYm94
IG9uIHNjcmVlbiAqLw0KICAgICsJeCA9IChnZXRtYXh4KHN0ZHNjcikgLSB3aWR0aCkgLyAyOw0K
ICAgICsJeSA9IChnZXRtYXh5KHN0ZHNjcikgLSBoZWlnaHQpIC8gMjsNCiAgICArDQogICAgKwlk
cmF3X3NoYWRvdyhzdGRzY3IsIHksIHgsIGhlaWdodCwgd2lkdGgpOw0KICAgICsNCiAgICArCWRp
YWxvZyA9IG5ld3dpbihoZWlnaHQsIHdpZHRoLCB5LCB4KTsNCiAgICArCWtleXBhZChkaWFsb2cs
IFRSVUUpOw0KICAgICsNCiAgICArCWRyYXdfYm94KGRpYWxvZywgMCwgMCwgaGVpZ2h0LCB3aWR0
aCwNCiAgICArCQkgZGxnLmRpYWxvZy5hdHIsIGRsZy5ib3JkZXIuYXRyKTsNCiAgICArCXdhdHRy
c2V0KGRpYWxvZywgZGxnLmJvcmRlci5hdHIpOw0KICAgICsJbXZ3YWRkY2goZGlhbG9nLCBoZWln
aHQgLSAzLCAwLCBBQ1NfTFRFRSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLSAyOyBp
KyspDQogICAgKwkJd2FkZGNoKGRpYWxvZywgQUNTX0hMSU5FKTsNCiAgICArCXdhdHRyc2V0KGRp
YWxvZywgZGxnLmRpYWxvZy5hdHIpOw0KICAgICsJd2FkZGNoKGRpYWxvZywgQUNTX1JURUUpOw0K
ICAgICsNCiAgICArCXByaW50X3RpdGxlKGRpYWxvZywgdGl0bGUsIHdpZHRoKTsNCiAgICArDQog
ICAgKwl3YXR0cnNldChkaWFsb2csIGRsZy5kaWFsb2cuYXRyKTsNCiAgICArCXByaW50X2F1dG93
cmFwKGRpYWxvZywgcHJvbXB0LCB3aWR0aCAtIDIsIDEsIDMpOw0KICAgICsNCiAgICArCXByaW50
X2J1dHRvbnMoZGlhbG9nLCBoZWlnaHQsIHdpZHRoLCAwKTsNCiAgICArDQogICAgKwl3aGlsZSAo
a2V5ICE9IEtFWV9FU0MpIHsNCiAgICArCQlrZXkgPSB3Z2V0Y2goZGlhbG9nKTsNCiAgICArCQlz
d2l0Y2ggKGtleSkgew0KICAgICsJCWNhc2UgJ1knOg0KICAgICsJCWNhc2UgJ3knOg0KICAgICsJ
CQlkZWx3aW4oZGlhbG9nKTsNCiAgICArCQkJcmV0dXJuIDA7DQogICAgKwkJY2FzZSAnTic6DQog
ICAgKwkJY2FzZSAnbic6DQogICAgKwkJCWRlbHdpbihkaWFsb2cpOw0KICAgICsJCQlyZXR1cm4g
MTsNCiAgICArDQogICAgKwkJY2FzZSBUQUI6DQogICAgKwkJY2FzZSBLRVlfTEVGVDoNCiAgICAr
CQljYXNlIEtFWV9SSUdIVDoNCiAgICArCQkJYnV0dG9uID0gKChrZXkgPT0gS0VZX0xFRlQgPyAt
LWJ1dHRvbiA6ICsrYnV0dG9uKSA8IDApID8gMSA6IChidXR0b24gPiAxID8gMCA6IGJ1dHRvbik7
DQogICAgKw0KICAgICsJCQlwcmludF9idXR0b25zKGRpYWxvZywgaGVpZ2h0LCB3aWR0aCwgYnV0
dG9uKTsNCiAgICArCQkJd3JlZnJlc2goZGlhbG9nKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
Y2FzZSAnICc6DQogICAgKwkJY2FzZSAnXG4nOg0KICAgICsJCQlkZWx3aW4oZGlhbG9nKTsNCiAg
ICArCQkJcmV0dXJuIGJ1dHRvbjsNCiAgICArCQljYXNlIEtFWV9FU0M6DQogICAgKwkJCWtleSA9
IG9uX2tleV9lc2MoZGlhbG9nKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfUkVT
SVpFOg0KICAgICsJCQlkZWx3aW4oZGlhbG9nKTsNCiAgICArCQkJb25fa2V5X3Jlc2l6ZSgpOw0K
ICAgICsJCQlnb3RvIGRvX3Jlc2l6ZTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJ
ZGVsd2luKGRpYWxvZyk7DQogICAgKwlyZXR1cm4ga2V5OwkJLyogRVNDIHByZXNzZWQgKi8NCiAg
ICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvbWNvbmYtY2ZnLnNoIGIvc3Vw
cG9ydC9rY29uZmlnL21jb25mLWNmZy5zaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNzU1DQogICAg
aW5kZXggMDAwMDAwMC4uYzgxMjg3Mg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBw
b3J0L2tjb25maWcvbWNvbmYtY2ZnLnNoDQogICAgQEAgLTAsMCArMSw0NyBAQA0KICAgICsjIS9i
aW4vc2gNCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAg
ICArUEtHPSJuY3Vyc2VzdyINCiAgICArUEtHMj0ibmN1cnNlcyINCiAgICArDQogICAgK2lmIFsg
LW4gIiQoY29tbWFuZCAtdiBwa2ctY29uZmlnKSIgXTsgdGhlbg0KICAgICsJaWYgcGtnLWNvbmZp
ZyAtLWV4aXN0cyAkUEtHOyB0aGVuDQogICAgKwkJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25maWcg
LS1jZmxhZ3MgJFBLRylcIg0KICAgICsJCWVjaG8gbGlicz1cIiQocGtnLWNvbmZpZyAtLWxpYnMg
JFBLRylcIg0KICAgICsJCWV4aXQgMA0KICAgICsJZmkNCiAgICArDQogICAgKwlpZiBwa2ctY29u
ZmlnIC0tZXhpc3RzICRQS0cyOyB0aGVuDQogICAgKwkJZWNobyBjZmxhZ3M9XCIkKHBrZy1jb25m
aWcgLS1jZmxhZ3MgJFBLRzIpXCINCiAgICArCQllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1s
aWJzICRQS0cyKVwiDQogICAgKwkJZXhpdCAwDQogICAgKwlmaQ0KICAgICtmaQ0KICAgICsNCiAg
ICArIyBDaGVjayB0aGUgZGVmYXVsdCBwYXRocyBpbiBjYXNlIHBrZy1jb25maWcgaXMgbm90IGlu
c3RhbGxlZC4NCiAgICArIyAoRXZlbiBpZiBpdCBpcyBpbnN0YWxsZWQsIHNvbWUgZGlzdHJpYnV0
aW9ucyBzdWNoIGFzIG9wZW5TVVNFIGNhbm5vdA0KICAgICsjIGZpbmQgbmN1cnNlcyBieSBwa2ct
Y29uZmlnLikNCiAgICAraWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cvbmN1cnNlcy5oIF07
IHRoZW4NCiAgICArCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRSAtSS91c3IvaW5jbHVkZS9u
Y3Vyc2Vzd1wiDQogICAgKwllY2hvIGxpYnM9XCItbG5jdXJzZXN3XCINCiAgICArCWV4aXQgMA0K
ICAgICtmaQ0KICAgICsNCiAgICAraWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy9uY3Vyc2Vz
LmggXTsgdGhlbg0KICAgICsJZWNobyBjZmxhZ3M9XCItRF9HTlVfU09VUkNFIC1JL3Vzci9pbmNs
dWRlL25jdXJzZXNcIg0KICAgICsJZWNobyBsaWJzPVwiLWxuY3Vyc2VzXCINCiAgICArCWV4aXQg
MA0KICAgICtmaQ0KICAgICsNCiAgICAraWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy5oIF07
IHRoZW4NCiAgICArCWVjaG8gY2ZsYWdzPVwiLURfR05VX1NPVVJDRVwiDQogICAgKwllY2hvIGxp
YnM9XCItbG5jdXJzZXNcIg0KICAgICsJZXhpdCAwDQogICAgK2ZpDQogICAgKw0KICAgICtlY2hv
ID4mMiAiKiINCiAgICArZWNobyA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIG5jdXJzZXMgcGFj
a2FnZS4iDQogICAgK2VjaG8gPiYyICIqIEluc3RhbGwgbmN1cnNlcyAobmN1cnNlcy1kZXZlbCBv
ciBsaWJuY3Vyc2VzLWRldiINCiAgICArZWNobyA+JjIgIiogZGVwZW5kaW5nIG9uIHlvdXIgZGlz
dHJpYnV0aW9uKS4iDQogICAgK2VjaG8gPiYyICIqIg0KICAgICtleGl0IDENCiAgICBkaWZmIC0t
Z2l0IGEvc3VwcG9ydC9rY29uZmlnL21jb25mLmMgYi9zdXBwb3J0L2tjb25maWcvbWNvbmYuYw0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNTNjNGE2Mg0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvbWNvbmYuYw0KICAgIEBA
IC0wLDAgKzEsMTAzOSBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu
MA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBw
ZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqDQogICAgKyAqIEludHJvZHVjZWQgc2luZ2xlIG1l
bnUgbW9kZSAoc2hvdyBhbGwgc3ViLW1lbnVzIGluIG9uZSBsYXJnZSB0cmVlKS4NCiAgICArICog
MjAwMi0xMS0wNiBQZXRyIEJhdWRpcyA8cGFza3lAdWN3LmN6Pg0KICAgICsgKg0KICAgICsgKiBp
MThuLCAyMDA1LCBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5i
cj4NCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICArI2luY2x1
ZGUgPGVycm5vLmg+DQogICAgKyNpbmNsdWRlIDxmY250bC5oPg0KICAgICsjaW5jbHVkZSA8bGlt
aXRzLmg+DQogICAgKyNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5o
Pg0KICAgICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKyNpbmNsdWRlIDxzaWduYWwuaD4NCiAg
ICArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAg
ICsjaW5jbHVkZSAibHhkaWFsb2cvZGlhbG9nLmgiDQogICAgKw0KICAgICtzdGF0aWMgY29uc3Qg
Y2hhciBtY29uZl9yZWFkbWVbXSA9DQogICAgKyJPdmVydmlld1xuIg0KICAgICsiLS0tLS0tLS1c
biINCiAgICArIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFy
YW1ldGVycyBmb3IgdGhlIGJ1aWxkLlxuIg0KICAgICsiRmVhdHVyZXMgY2FuIGVpdGhlciBiZSBi
dWlsdC1pbiwgbW9kdWxhcml6ZWQsIG9yIGlnbm9yZWQuIFBhcmFtZXRlcnNcbiINCiAgICArIm11
c3QgYmUgZW50ZXJlZCBpbiBhcyBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIG51bWJlcnMgb3IgdGV4
dC5cbiINCiAgICArIlxuIg0KICAgICsiTWVudSBpdGVtcyBiZWdpbm5pbmcgd2l0aCBmb2xsb3dp
bmcgYnJhY2VzIHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iDQogICAgKyIgIFsgXSBjYW4gYmUg
YnVpbHQgaW4gb3IgcmVtb3ZlZFxuIg0KICAgICsiICA8ID4gY2FuIGJlIGJ1aWx0IGluLCBtb2R1
bGFyaXplZCBvciByZW1vdmVkXG4iDQogICAgKyIgIHsgfSBjYW4gYmUgYnVpbHQgaW4gb3IgbW9k
dWxhcml6ZWQgKHNlbGVjdGVkIGJ5IG90aGVyIGZlYXR1cmUpXG4iDQogICAgKyIgIC0gLSBhcmUg
c2VsZWN0ZWQgYnkgb3RoZXIgZmVhdHVyZSxcbiINCiAgICArIndoaWxlICosIE0gb3Igd2hpdGVz
cGFjZSBpbnNpZGUgYnJhY2VzIG1lYW5zIHRvIGJ1aWxkIGluLCBidWlsZCBhc1xuIg0KICAgICsi
YSBtb2R1bGUgb3IgdG8gZXhjbHVkZSB0aGUgZmVhdHVyZSByZXNwZWN0aXZlbHkuXG4iDQogICAg
KyJcbiINCiAgICArIlRvIGNoYW5nZSBhbnkgb2YgdGhlc2UgZmVhdHVyZXMsIGhpZ2hsaWdodCBp
dCB3aXRoIHRoZSBjdXJzb3JcbiINCiAgICArImtleXMgYW5kIHByZXNzIDxZPiB0byBidWlsZCBp
dCBpbiwgPE0+IHRvIG1ha2UgaXQgYSBtb2R1bGUgb3JcbiINCiAgICArIjxOPiB0byByZW1vdmUg
aXQuICBZb3UgbWF5IGFsc28gcHJlc3MgdGhlIDxTcGFjZSBCYXI+IHRvIGN5Y2xlXG4iDQogICAg
KyJ0aHJvdWdoIHRoZSBhdmFpbGFibGUgb3B0aW9ucyAoaS5lLiBZLT5OLT5NLT5ZKS5cbiINCiAg
ICArIlxuIg0KICAgICsiU29tZSBhZGRpdGlvbmFsIGtleWJvYXJkIGhpbnRzOlxuIg0KICAgICsi
XG4iDQogICAgKyJNZW51c1xuIg0KICAgICsiLS0tLS0tLS0tLVxuIg0KICAgICsibyAgVXNlIHRo
ZSBVcC9Eb3duIGFycm93IGtleXMgKGN1cnNvciBrZXlzKSB0byBoaWdobGlnaHQgdGhlIGl0ZW0g
eW91XG4iDQogICAgKyIgICB3aXNoIHRvIGNoYW5nZSBvciB0aGUgc3VibWVudSB5b3Ugd2lzaCB0
byBzZWxlY3QgYW5kIHByZXNzIDxFbnRlcj4uXG4iDQogICAgKyIgICBTdWJtZW51cyBhcmUgZGVz
aWduYXRlZCBieSBcIi0tLT5cIiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiINCiAgICArIlxu
Ig0KICAgICsiICAgU2hvcnRjdXQ6IFByZXNzIHRoZSBvcHRpb24ncyBoaWdobGlnaHRlZCBsZXR0
ZXIgKGhvdGtleSkuXG4iDQogICAgKyIgICAgICAgICAgICAgUHJlc3NpbmcgYSBob3RrZXkgbW9y
ZSB0aGFuIG9uY2Ugd2lsbCBzZXF1ZW5jZVxuIg0KICAgICsiICAgICAgICAgICAgIHRocm91Z2gg
YWxsIHZpc2libGUgaXRlbXMgd2hpY2ggdXNlIHRoYXQgaG90a2V5LlxuIg0KICAgICsiXG4iDQog
ICAgKyIgICBZb3UgbWF5IGFsc28gdXNlIHRoZSA8UEFHRSBVUD4gYW5kIDxQQUdFIERPV04+IGtl
eXMgdG8gc2Nyb2xsXG4iDQogICAgKyIgICB1bnNlZW4gb3B0aW9ucyBpbnRvIHZpZXcuXG4iDQog
ICAgKyJcbiINCiAgICArIm8gIFRvIGV4aXQgYSBtZW51IHVzZSB0aGUgY3Vyc29yIGtleXMgdG8g
aGlnaGxpZ2h0IHRoZSA8RXhpdD4gYnV0dG9uXG4iDQogICAgKyIgICBhbmQgcHJlc3MgPEVOVEVS
Pi5cbiINCiAgICArIlxuIg0KICAgICsiICAgU2hvcnRjdXQ6IFByZXNzIDxFU0M+PEVTQz4gb3Ig
PEU+IG9yIDxYPiBpZiB0aGVyZSBpcyBubyBob3RrZXlcbiINCiAgICArIiAgICAgICAgICAgICB1
c2luZyB0aG9zZSBsZXR0ZXJzLiAgWW91IG1heSBwcmVzcyBhIHNpbmdsZSA8RVNDPiwgYnV0XG4i
DQogICAgKyIgICAgICAgICAgICAgdGhlcmUgaXMgYSBkZWxheWVkIHJlc3BvbnNlIHdoaWNoIHlv
dSBtYXkgZmluZCBhbm5veWluZy5cbiINCiAgICArIlxuIg0KICAgICsiICAgQWxzbywgdGhlIDxU
QUI+IGFuZCBjdXJzb3Iga2V5cyB3aWxsIGN5Y2xlIGJldHdlZW4gPFNlbGVjdD4sXG4iDQogICAg
KyIgICA8RXhpdD4sIDxIZWxwPiwgPFNhdmU+LCBhbmQgPExvYWQ+LlxuIg0KICAgICsiXG4iDQog
ICAgKyJvICBUbyBnZXQgaGVscCB3aXRoIGFuIGl0ZW0sIHVzZSB0aGUgY3Vyc29yIGtleXMgdG8g
aGlnaGxpZ2h0IDxIZWxwPlxuIg0KICAgICsiICAgYW5kIHByZXNzIDxFTlRFUj4uXG4iDQogICAg
KyJcbiINCiAgICArIiAgIFNob3J0Y3V0OiBQcmVzcyA8SD4gb3IgPD8+LlxuIg0KICAgICsiXG4i
DQogICAgKyJvICBUbyB0b2dnbGUgdGhlIGRpc3BsYXkgb2YgaGlkZGVuIG9wdGlvbnMsIHByZXNz
IDxaPi5cbiINCiAgICArIlxuIg0KICAgICsiXG4iDQogICAgKyJSYWRpb2xpc3RzICAoQ2hvaWNl
IGxpc3RzKVxuIg0KICAgICsiLS0tLS0tLS0tLS1cbiINCiAgICArIm8gIFVzZSB0aGUgY3Vyc29y
IGtleXMgdG8gc2VsZWN0IHRoZSBvcHRpb24geW91IHdpc2ggdG8gc2V0IGFuZCBwcmVzc1xuIg0K
ICAgICsiICAgPFM+IG9yIHRoZSA8U1BBQ0UgQkFSPi5cbiINCiAgICArIlxuIg0KICAgICsiICAg
U2hvcnRjdXQ6IFByZXNzIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0
byBzZXQgdGhlblxuIg0KICAgICsiICAgICAgICAgICAgIHByZXNzIDxTPiBvciA8U1BBQ0UgQkFS
Pi5cbiINCiAgICArIlxuIg0KICAgICsibyAgVG8gc2VlIGF2YWlsYWJsZSBoZWxwIGZvciB0aGUg
aXRlbSwgdXNlIHRoZSBjdXJzb3Iga2V5cyB0byBoaWdobGlnaHRcbiINCiAgICArIiAgIDxIZWxw
PiBhbmQgUHJlc3MgPEVOVEVSPi5cbiINCiAgICArIlxuIg0KICAgICsiICAgU2hvcnRjdXQ6IFBy
ZXNzIDxIPiBvciA8Pz4uXG4iDQogICAgKyJcbiINCiAgICArIiAgIEFsc28sIHRoZSA8VEFCPiBh
bmQgY3Vyc29yIGtleXMgd2lsbCBjeWNsZSBiZXR3ZWVuIDxTZWxlY3Q+IGFuZFxuIg0KICAgICsi
ICAgPEhlbHA+XG4iDQogICAgKyJcbiINCiAgICArIlxuIg0KICAgICsiRGF0YSBFbnRyeVxuIg0K
ICAgICsiLS0tLS0tLS0tLS1cbiINCiAgICArIm8gIEVudGVyIHRoZSByZXF1ZXN0ZWQgaW5mb3Jt
YXRpb24gYW5kIHByZXNzIDxFTlRFUj5cbiINCiAgICArIiAgIElmIHlvdSBhcmUgZW50ZXJpbmcg
aGV4YWRlY2ltYWwgdmFsdWVzLCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvXG4iDQogICAgKyIgICBh
ZGQgdGhlICcweCcgcHJlZml4IHRvIHRoZSBlbnRyeS5cbiINCiAgICArIlxuIg0KICAgICsibyAg
Rm9yIGhlbHAsIHVzZSB0aGUgPFRBQj4gb3IgY3Vyc29yIGtleXMgdG8gaGlnaGxpZ2h0IHRoZSBo
ZWxwIG9wdGlvblxuIg0KICAgICsiICAgYW5kIHByZXNzIDxFTlRFUj4uICBZb3UgY2FuIHRyeSA8
VEFCPjxIPiBhcyB3ZWxsLlxuIg0KICAgICsiXG4iDQogICAgKyJcbiINCiAgICArIlRleHQgQm94
ICAgIChIZWxwIFdpbmRvdylcbiINCiAgICArIi0tLS0tLS0tXG4iDQogICAgKyJvICBVc2UgdGhl
IGN1cnNvciBrZXlzIHRvIHNjcm9sbCB1cC9kb3duL2xlZnQvcmlnaHQuICBUaGUgVkkgZWRpdG9y
XG4iDQogICAgKyIgICBrZXlzIGgsaixrLGwgZnVuY3Rpb24gaGVyZSBhcyBkbyA8dT4sIDxkPiwg
PFNQQUNFIEJBUj4gYW5kIDxCPiBmb3JcbiINCiAgICArIiAgIHRob3NlIHdobyBhcmUgZmFtaWxp
YXIgd2l0aCBsZXNzIGFuZCBseW54LlxuIg0KICAgICsiXG4iDQogICAgKyJvICBQcmVzcyA8RT4s
IDxYPiwgPHE+LCA8RW50ZXI+IG9yIDxFc2M+PEVzYz4gdG8gZXhpdC5cbiINCiAgICArIlxuIg0K
ICAgICsiXG4iDQogICAgKyJBbHRlcm5hdGUgQ29uZmlndXJhdGlvbiBGaWxlc1xuIg0KICAgICsi
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArIk1lbnVjb25maWcgc3VwcG9y
dHMgdGhlIHVzZSBvZiBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3JcbiINCiAgICAr
InRob3NlIHdobywgZm9yIHZhcmlvdXMgcmVhc29ucywgZmluZCBpdCBuZWNlc3NhcnkgdG8gc3dp
dGNoXG4iDQogICAgKyJiZXR3ZWVuIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cbiINCiAgICAr
IlxuIg0KICAgICsiVGhlIDxTYXZlPiBidXR0b24gd2lsbCBsZXQgeW91IHNhdmUgdGhlIGN1cnJl
bnQgY29uZmlndXJhdGlvbiB0b1xuIg0KICAgICsiYSBmaWxlIG9mIHlvdXIgY2hvb3NpbmcuICBV
c2UgdGhlIDxMb2FkPiBidXR0b24gdG8gbG9hZCBhIHByZXZpb3VzbHlcbiINCiAgICArInNhdmVk
IGFsdGVybmF0ZSBjb25maWd1cmF0aW9uLlxuIg0KICAgICsiXG4iDQogICAgKyJFdmVuIGlmIHlv
dSBkb24ndCB1c2UgYWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIGJ1dCB5b3UgZmluZFxu
Ig0KICAgICsiZHVyaW5nIGEgTWVudWNvbmZpZyBzZXNzaW9uIHRoYXQgeW91IGhhdmUgY29tcGxl
dGVseSBtZXNzZWQgdXAgeW91clxuIg0KICAgICsic2V0dGluZ3MsIHlvdSBtYXkgdXNlIHRoZSA8
TG9hZD4gYnV0dG9uIHRvIHJlc3RvcmUgeW91ciBwcmV2aW91c2x5XG4iDQogICAgKyJzYXZlZCBz
ZXR0aW5ncyBmcm9tIFwiLmNvbmZpZ1wiIHdpdGhvdXQgcmVzdGFydGluZyBNZW51Y29uZmlnLlxu
Ig0KICAgICsiXG4iDQogICAgKyJPdGhlciBpbmZvcm1hdGlvblxuIg0KICAgICsiLS0tLS0tLS0t
LS0tLS0tLS1cbiINCiAgICArIklmIHlvdSB1c2UgTWVudWNvbmZpZyBpbiBhbiBYVEVSTSB3aW5k
b3csIG1ha2Ugc3VyZSB5b3UgaGF2ZSB5b3VyXG4iDQogICAgKyIkVEVSTSB2YXJpYWJsZSBzZXQg
dG8gcG9pbnQgdG8gYW4geHRlcm0gZGVmaW5pdGlvbiB3aGljaCBzdXBwb3J0c1xuIg0KICAgICsi
Y29sb3IuICBPdGhlcndpc2UsIE1lbnVjb25maWcgd2lsbCBsb29rIHJhdGhlciBiYWQuICBNZW51
Y29uZmlnIHdpbGxcbiINCiAgICArIm5vdCBkaXNwbGF5IGNvcnJlY3RseSBpbiBhbiBSWFZUIHdp
bmRvdyBiZWNhdXNlIHJ4dnQgZGlzcGxheXMgb25seSBvbmVcbiINCiAgICArImludGVuc2l0eSBv
ZiBjb2xvciwgYnJpZ2h0LlxuIg0KICAgICsiXG4iDQogICAgKyJNZW51Y29uZmlnIHdpbGwgZGlz
cGxheSBsYXJnZXIgbWVudXMgb24gc2NyZWVucyBvciB4dGVybXMgd2hpY2ggYXJlXG4iDQogICAg
KyJzZXQgdG8gZGlzcGxheSBtb3JlIHRoYW4gdGhlIHN0YW5kYXJkIDI1IHJvdyBieSA4MCBjb2x1
bW4gZ2VvbWV0cnkuXG4iDQogICAgKyJJbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB0aGUgXCJz
dHR5IHNpemVcIiBjb21tYW5kIG11c3QgYmUgYWJsZSB0b1xuIg0KICAgICsiZGlzcGxheSB0aGUg
c2NyZWVuJ3MgY3VycmVudCByb3cgYW5kIGNvbHVtbiBnZW9tZXRyeS4gIEkgU1RST05HTFlcbiIN
CiAgICArIlJFQ09NTUVORCB0aGF0IHlvdSBtYWtlIHN1cmUgeW91IGRvIE5PVCBoYXZlIHRoZSBz
aGVsbCB2YXJpYWJsZXNcbiINCiAgICArIkxJTkVTIGFuZCBDT0xVTU5TIGV4cG9ydGVkIGludG8g
eW91ciBlbnZpcm9ubWVudC4gIFNvbWUgZGlzdHJpYnV0aW9uc1xuIg0KICAgICsiZXhwb3J0IHRo
b3NlIHZhcmlhYmxlcyB2aWEgL2V0Yy9wcm9maWxlLiAgU29tZSBuY3Vyc2VzIHByb2dyYW1zIGNh
blxuIg0KICAgICsiYmVjb21lIGNvbmZ1c2VkIHdoZW4gdGhvc2UgdmFyaWFibGVzIChMSU5FUyAm
IENPTFVNTlMpIGRvbid0IHJlZmxlY3RcbiINCiAgICArInRoZSB0cnVlIHNjcmVlbiBzaXplLlxu
Ig0KICAgICsiXG4iDQogICAgKyJPcHRpb25hbCBwZXJzb25hbGl0eSBhdmFpbGFibGVcbiINCiAg
ICArIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgICsiSWYgeW91IHByZWZl
ciB0byBoYXZlIGFsbCBvZiB0aGUgb3B0aW9ucyBsaXN0ZWQgaW4gYSBzaW5nbGUgbWVudSxcbiIN
CiAgICArInJhdGhlciB0aGFuIHRoZSBkZWZhdWx0IG11bHRpbWVudSBoaWVyYXJjaHksIHJ1biB0
aGUgbWVudWNvbmZpZyB3aXRoXG4iDQogICAgKyJNRU5VQ09ORklHX01PREUgZW52aXJvbm1lbnQg
dmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiBFeGFtcGxlOlxuIg0KICAgICsiXG4iDQogICAg
KyJtYWtlIE1FTlVDT05GSUdfTU9ERT1zaW5nbGVfbWVudSBtZW51Y29uZmlnXG4iDQogICAgKyJc
biINCiAgICArIjxFbnRlcj4gd2lsbCB0aGVuIHVucm9sbCB0aGUgYXBwcm9wcmlhdGUgY2F0ZWdv
cnksIG9yIGVuZm9sZCBpdCBpZiBpdFxuIg0KICAgICsiaXMgYWxyZWFkeSB1bnJvbGxlZC5cbiIN
CiAgICArIlxuIg0KICAgICsiTm90ZSB0aGF0IHRoaXMgbW9kZSBjYW4gZXZlbnR1YWxseSBiZSBh
IGxpdHRsZSBtb3JlIENQVSBleHBlbnNpdmVcbiINCiAgICArIihlc3BlY2lhbGx5IHdpdGggYSBs
YXJnZXIgbnVtYmVyIG9mIHVucm9sbGVkIGNhdGVnb3JpZXMpIHRoYW4gdGhlXG4iDQogICAgKyJk
ZWZhdWx0IG1vZGUuXG4iDQogICAgKyJcbiINCiAgICArIkRpZmZlcmVudCBjb2xvciB0aGVtZXMg
YXZhaWxhYmxlXG4iDQogICAgKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0K
ICAgICsiSXQgaXMgcG9zc2libGUgdG8gc2VsZWN0IGRpZmZlcmVudCBjb2xvciB0aGVtZXMgdXNp
bmcgdGhlIHZhcmlhYmxlXG4iDQogICAgKyJNRU5VQ09ORklHX0NPTE9SLiBUbyBzZWxlY3QgYSB0
aGVtZSB1c2U6XG4iDQogICAgKyJcbiINCiAgICArIm1ha2UgTUVOVUNPTkZJR19DT0xPUj08dGhl
bWU+IG1lbnVjb25maWdcbiINCiAgICArIlxuIg0KICAgICsiQXZhaWxhYmxlIHRoZW1lcyBhcmVc
biINCiAgICArIiBtb25vICAgICAgID0+IHNlbGVjdHMgY29sb3JzIHN1aXRhYmxlIGZvciBtb25v
Y2hyb21lIGRpc3BsYXlzXG4iDQogICAgKyIgYmxhY2tiZyAgICA9PiBzZWxlY3RzIGEgY29sb3Ig
c2NoZW1lIHdpdGggYmxhY2sgYmFja2dyb3VuZFxuIg0KICAgICsiIGNsYXNzaWMgICAgPT4gdGhl
bWUgd2l0aCBibHVlIGJhY2tncm91bmQuIFRoZSBjbGFzc2ljIGxvb2tcbiINCiAgICArIiBibHVl
dGl0bGUgID0+IGFuIExDRCBmcmllbmRseSB2ZXJzaW9uIG9mIGNsYXNzaWMuIChkZWZhdWx0KVxu
Ig0KICAgICsiXG4iLA0KICAgICttZW51X2luc3RydWN0aW9uc1tdID0NCiAgICArCSJBcnJvdyBr
ZXlzIG5hdmlnYXRlIHRoZSBtZW51LiAgIg0KICAgICsJIjxFbnRlcj4gc2VsZWN0cyBzdWJtZW51
cyAtLS0+IChvciBlbXB0eSBzdWJtZW51cyAtLS0tKS4gICINCiAgICArCSJIaWdobGlnaHRlZCBs
ZXR0ZXJzIGFyZSBob3RrZXlzLiAgIg0KICAgICsJIlByZXNzaW5nIDxZPiBzZWxlY3RzIGEgZmVh
dHVyZSwgd2hpbGUgPE4+IHdpbGwgZXhjbHVkZSBhIGZlYXR1cmUuICAiDQogICAgKwkiUHJlc3Mg
PEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIg0KICAg
ICsJIkxlZ2VuZDogWypdIGZlYXR1cmUgaXMgc2VsZWN0ZWQgIFsgXSBmZWF0dXJlIGlzIGV4Y2x1
ZGVkIiwNCiAgICArcmFkaW9saXN0X2luc3RydWN0aW9uc1tdID0NCiAgICArCSJVc2UgdGhlIGFy
cm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3aW5kb3cgb3IgIg0KICAgICsJInByZXNzIHRoZSBo
b3RrZXkgb2YgdGhlIGl0ZW0geW91IHdpc2ggdG8gc2VsZWN0ICINCiAgICArCSJmb2xsb3dlZCBi
eSB0aGUgPFNQQUNFIEJBUj4uICINCiAgICArCSJQcmVzcyA8Pz4gZm9yIGFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gYWJvdXQgdGhpcyBvcHRpb24uIiwNCiAgICAraW5wdXRib3hfaW5zdHJ1Y3Rpb25z
X2ludFtdID0NCiAgICArCSJQbGVhc2UgZW50ZXIgYSBkZWNpbWFsIHZhbHVlLiAiDQogICAgKwki
RnJhY3Rpb25zIHdpbGwgbm90IGJlIGFjY2VwdGVkLiAgIg0KICAgICsJIlVzZSB0aGUgPFRBQj4g
a2V5IHRvIG1vdmUgZnJvbSB0aGUgaW5wdXQgZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQu
IiwNCiAgICAraW5wdXRib3hfaW5zdHJ1Y3Rpb25zX2hleFtdID0NCiAgICArCSJQbGVhc2UgZW50
ZXIgYSBoZXhhZGVjaW1hbCB2YWx1ZS4gIg0KICAgICsJIlVzZSB0aGUgPFRBQj4ga2V5IHRvIG1v
dmUgZnJvbSB0aGUgaW5wdXQgZmllbGQgdG8gdGhlIGJ1dHRvbnMgYmVsb3cgaXQuIiwNCiAgICAr
aW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZ1tdID0NCiAgICArCSJQbGVhc2UgZW50ZXIgYSBz
dHJpbmcgdmFsdWUuICINCiAgICArCSJVc2UgdGhlIDxUQUI+IGtleSB0byBtb3ZlIGZyb20gdGhl
IGlucHV0IGZpZWxkIHRvIHRoZSBidXR0b25zIGJlbG93IGl0LiIsDQogICAgK3NldG1vZF90ZXh0
W10gPQ0KICAgICsJIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFub3RoZXIgd2hpY2ggaGFzIGJl
ZW4gY29uZmlndXJlZCBhcyBhIG1vZHVsZS5cbiINCiAgICArCSJBcyBhIHJlc3VsdCwgdGhpcyBm
ZWF0dXJlIHdpbGwgYmUgYnVpbHQgYXMgYSBtb2R1bGUuIiwNCiAgICArbG9hZF9jb25maWdfdGV4
dFtdID0NCiAgICArCSJFbnRlciB0aGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHlv
dSB3aXNoIHRvIGxvYWQuICAiDQogICAgKwkiQWNjZXB0IHRoZSBuYW1lIHNob3duIHRvIHJlc3Rv
cmUgdGhlIGNvbmZpZ3VyYXRpb24geW91ICINCiAgICArCSJsYXN0IHJldHJpZXZlZC4gIExlYXZl
IGJsYW5rIHRvIGFib3J0LiIsDQogICAgK2xvYWRfY29uZmlnX2hlbHBbXSA9DQogICAgKwkiXG4i
DQogICAgKwkiRm9yIHZhcmlvdXMgcmVhc29ucywgb25lIG1heSB3aXNoIHRvIGtlZXAgc2V2ZXJh
bCBkaWZmZXJlbnRcbiINCiAgICArCSJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5n
bGUgbWFjaGluZS5cbiINCiAgICArCSJcbiINCiAgICArCSJJZiB5b3UgaGF2ZSBzYXZlZCBhIHBy
ZXZpb3VzIGNvbmZpZ3VyYXRpb24gaW4gYSBmaWxlIG90aGVyIHRoYW4gdGhlXG4iDQogICAgKwki
ZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gbW9k
aWZ5IHRoYXRcbiINCiAgICArCSJjb25maWd1cmF0aW9uLlxuIg0KICAgICsJIlxuIg0KICAgICsJ
IklmIHlvdSBhcmUgdW5jZXJ0YWluLCB0aGVuIHlvdSBoYXZlIHByb2JhYmx5IG5ldmVyIHVzZWQg
YWx0ZXJuYXRlXG4iDQogICAgKwkiY29uZmlndXJhdGlvbiBmaWxlcy4gWW91IHNob3VsZCB0aGVy
ZWZvcmUgbGVhdmUgdGhpcyBibGFuayB0byBhYm9ydC5cbiIsDQogICAgK3NhdmVfY29uZmlnX3Rl
eHRbXSA9DQogICAgKwkiRW50ZXIgYSBmaWxlbmFtZSB0byB3aGljaCB0aGlzIGNvbmZpZ3VyYXRp
b24gc2hvdWxkIGJlIHNhdmVkICINCiAgICArCSJhcyBhbiBhbHRlcm5hdGUuICBMZWF2ZSBibGFu
ayB0byBhYm9ydC4iLA0KICAgICtzYXZlX2NvbmZpZ19oZWxwW10gPQ0KICAgICsJIlxuIg0KICAg
ICsJIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVwIGRpZmZlcmVudCBj
b25maWd1cmF0aW9uc1xuIg0KICAgICsJImF2YWlsYWJsZSBvbiBhIHNpbmdsZSBtYWNoaW5lLlxu
Ig0KICAgICsJIlxuIg0KICAgICsJIkVudGVyaW5nIGEgZmlsZSBuYW1lIGhlcmUgd2lsbCBhbGxv
dyB5b3UgdG8gbGF0ZXIgcmV0cmlldmUsIG1vZGlmeVxuIg0KICAgICsJImFuZCB1c2UgdGhlIGN1
cnJlbnQgY29uZmlndXJhdGlvbiBhcyBhbiBhbHRlcm5hdGUgdG8gd2hhdGV2ZXJcbiINCiAgICAr
CSJjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1lLlxu
Ig0KICAgICsJIlxuIg0KICAgICsJIklmIHlvdSBhcmUgdW5jZXJ0YWluIHdoYXQgYWxsIHRoaXMg
bWVhbnMgdGhlbiB5b3Ugc2hvdWxkIHByb2JhYmx5XG4iDQogICAgKwkibGVhdmUgdGhpcyBibGFu
ay5cbiIsDQogICAgK3NlYXJjaF9oZWxwW10gPQ0KICAgICsJIlxuIg0KICAgICsJIlNlYXJjaCBm
b3Igc3ltYm9scyBhbmQgZGlzcGxheSB0aGVpciByZWxhdGlvbnMuXG4iDQogICAgKwkiUmVndWxh
ciBleHByZXNzaW9ucyBhcmUgYWxsb3dlZC5cbiINCiAgICArCSJFeGFtcGxlOiBzZWFyY2ggZm9y
IFwiXkZPT1wiXG4iDQogICAgKwkiUmVzdWx0OlxuIg0KICAgICsJIi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAg
KwkiU3ltYm9sOiBGT08gWz1tXVxuIg0KICAgICsJIlR5cGUgIDogdHJpc3RhdGVcbiINCiAgICAr
CSJQcm9tcHQ6IEZvbyBidXMgaXMgdXNlZCB0byBkcml2ZSB0aGUgYmFyIEhXXG4iDQogICAgKwki
ICBMb2NhdGlvbjpcbiINCiAgICArCSIgICAgLT4gQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBF
SVNBLCBJU0EpXG4iDQogICAgKwkiICAgICAgLT4gUENJIHN1cHBvcnQgKFBDSSBbPXldKVxuIg0K
ICAgICsJIigxKSAgICAgLT4gUENJIGFjY2VzcyBtb2RlICg8Y2hvaWNlPiBbPXldKVxuIg0KICAg
ICsJIiAgRGVmaW5lZCBhdCBkcml2ZXJzL3BjaS9LY29uZmlnOjQ3XG4iDQogICAgKwkiICBEZXBl
bmRzIG9uOiBYODZfTE9DQUxfQVBJQyAmJiBYODZfSU9fQVBJQyB8fCBJQTY0XG4iDQogICAgKwki
ICBTZWxlY3RzOiBMSUJDUkMzMlxuIg0KICAgICsJIiAgU2VsZWN0ZWQgYnk6IEJBUiBbPW5dXG4i
DQogICAgKwkiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArCSJvIFRoZSBsaW5lICdUeXBlOicgc2hvd3MgdGhl
IHR5cGUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGZvclxuIg0KICAgICsJIiAgdGhpcyBz
eW1ib2wgKGJvb2wsIHRyaXN0YXRlLCBzdHJpbmcsIC4uLilcbiINCiAgICArCSJvIFRoZSBsaW5l
ICdQcm9tcHQ6JyBzaG93cyB0aGUgdGV4dCB1c2VkIGluIHRoZSBtZW51IHN0cnVjdHVyZSBmb3Jc
biINCiAgICArCSIgIHRoaXMgc3ltYm9sXG4iDQogICAgKwkibyBUaGUgJ0RlZmluZWQgYXQnIGxp
bmUgdGVsbHMgYXQgd2hhdCBmaWxlIC8gbGluZSBudW1iZXIgdGhlIHN5bWJvbFxuIg0KICAgICsJ
IiAgaXMgZGVmaW5lZFxuIg0KICAgICsJIm8gVGhlICdEZXBlbmRzIG9uOicgbGluZSB0ZWxscyB3
aGF0IHN5bWJvbHMgbmVlZCB0byBiZSBkZWZpbmVkIGZvclxuIg0KICAgICsJIiAgdGhpcyBzeW1i
b2wgdG8gYmUgdmlzaWJsZSBpbiB0aGUgbWVudSAoc2VsZWN0YWJsZSlcbiINCiAgICArCSJvIFRo
ZSAnTG9jYXRpb246JyBsaW5lcyB0ZWxscyB3aGVyZSBpbiB0aGUgbWVudSBzdHJ1Y3R1cmUgdGhp
cyBzeW1ib2xcbiINCiAgICArCSIgIGlzIGxvY2F0ZWRcbiINCiAgICArCSIgICAgQSBsb2NhdGlv
biBmb2xsb3dlZCBieSBhIFs9eV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpcyBhXG4iDQogICAgKwki
ICAgIHNlbGVjdGFibGUgbWVudSBpdGVtIC0gYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGRpc3Bs
YXllZCBpbnNpZGVcbiINCiAgICArCSIgICAgYnJhY2tldHMuXG4iDQogICAgKwkiICAgIFByZXNz
IHRoZSBrZXkgaW4gdGhlICgjKSBwcmVmaXggdG8ganVtcCBkaXJlY3RseSB0byB0aGF0XG4iDQog
ICAgKwkiICAgIGxvY2F0aW9uLiBZb3Ugd2lsbCBiZSByZXR1cm5lZCB0byB0aGUgY3VycmVudCBz
ZWFyY2ggcmVzdWx0c1xuIg0KICAgICsJIiAgICBhZnRlciBleGl0aW5nIHRoaXMgbmV3IG1lbnUu
XG4iDQogICAgKwkibyBUaGUgJ1NlbGVjdHM6JyBsaW5lIHRlbGxzIHdoYXQgc3ltYm9scyB3aWxs
IGJlIGF1dG9tYXRpY2FsbHlcbiINCiAgICArCSIgIHNlbGVjdGVkIGlmIHRoaXMgc3ltYm9sIGlz
IHNlbGVjdGVkICh5IG9yIG0pXG4iDQogICAgKwkibyBUaGUgJ1NlbGVjdGVkIGJ5JyBsaW5lIHRl
bGxzIHdoYXQgc3ltYm9sIGhhcyBzZWxlY3RlZCB0aGlzIHN5bWJvbFxuIg0KICAgICsJIlxuIg0K
ICAgICsJIk9ubHkgcmVsZXZhbnQgbGluZXMgYXJlIHNob3duLlxuIg0KICAgICsJIlxuXG4iDQog
ICAgKwkiU2VhcmNoIGV4YW1wbGVzOlxuIg0KICAgICsJIkV4YW1wbGVzOiBVU0IJPT4gZmluZCBh
bGwgc3ltYm9scyBjb250YWluaW5nIFVTQlxuIg0KICAgICsJIiAgICAgICAgICBeVVNCID0+IGZp
bmQgYWxsIHN5bWJvbHMgc3RhcnRpbmcgd2l0aCBVU0JcbiINCiAgICArCSIgICAgICAgICAgVVNC
JCA9PiBmaW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIg0KICAgICsJIlxuIjsNCiAg
ICArDQogICAgK3N0YXRpYyBpbnQgaW5kZW50Ow0KICAgICtzdGF0aWMgc3RydWN0IG1lbnUgKmN1
cnJlbnRfbWVudTsNCiAgICArc3RhdGljIGludCBjaGlsZF9jb3VudDsNCiAgICArc3RhdGljIGlu
dCBzaW5nbGVfbWVudV9tb2RlOw0KICAgICtzdGF0aWMgaW50IHNob3dfYWxsX29wdGlvbnM7DQog
ICAgK3N0YXRpYyBpbnQgc2F2ZV9hbmRfZXhpdDsNCiAgICArc3RhdGljIGludCBzaWxlbnQ7DQog
ICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51LCBzdHJ1Y3QgbWVu
dSAqYWN0aXZlX21lbnUpOw0KICAgICtzdGF0aWMgdm9pZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVu
dSAqbWVudSk7DQogICAgK3N0YXRpYyB2b2lkIGNvbmZfc3RyaW5nKHN0cnVjdCBtZW51ICptZW51
KTsNCiAgICArc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpOw0KICAgICtzdGF0aWMgdm9pZCBj
b25mX3NhdmUodm9pZCk7DQogICAgK3N0YXRpYyBpbnQgc2hvd190ZXh0Ym94X2V4dChjb25zdCBj
aGFyICp0aXRsZSwgY2hhciAqdGV4dCwgaW50IHIsIGludCBjLA0KICAgICsJCQkgICAgaW50ICpr
ZXlzLCBpbnQgKnZzY3JvbGwsIGludCAqaHNjcm9sbCwNCiAgICArCQkJICAgIHVwZGF0ZV90ZXh0
X2ZuIHVwZGF0ZV90ZXh0LCB2b2lkICpkYXRhKTsNCiAgICArc3RhdGljIHZvaWQgc2hvd190ZXh0
Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp0ZXh0LCBpbnQgciwgaW50IGMpOw0K
ICAgICtzdGF0aWMgdm9pZCBzaG93X2hlbHB0ZXh0KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBj
aGFyICp0ZXh0KTsNCiAgICArc3RhdGljIHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51
KTsNCiAgICArDQogICAgK3N0YXRpYyBjaGFyIGZpbGVuYW1lW1BBVEhfTUFYKzFdOw0KICAgICtz
dGF0aWMgdm9pZCBzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFt
ZSkNCiAgICArew0KICAgICsJc3RhdGljIGNoYXIgbWVudV9iYWNrdGl0bGVbUEFUSF9NQVgrMTI4
XTsNCiAgICArCWludCBzaXplOw0KICAgICsNCiAgICArCXNpemUgPSBzbnByaW50ZihtZW51X2Jh
Y2t0aXRsZSwgc2l6ZW9mKG1lbnVfYmFja3RpdGxlKSwNCiAgICArCQkJIiVzIC0gJXMiLCBjb25m
aWdfZmlsZW5hbWUsIHJvb3RtZW51LnByb21wdC0+dGV4dCk7DQogICAgKwlpZiAoc2l6ZSA+PSBz
aXplb2YobWVudV9iYWNrdGl0bGUpKQ0KICAgICsJCW1lbnVfYmFja3RpdGxlW3NpemVvZihtZW51
X2JhY2t0aXRsZSktMV0gPSAnXDAnOw0KICAgICsJc2V0X2RpYWxvZ19iYWNrdGl0bGUobWVudV9i
YWNrdGl0bGUpOw0KICAgICsNCiAgICArCXNpemUgPSBzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9m
KGZpbGVuYW1lKSwgIiVzIiwgY29uZmlnX2ZpbGVuYW1lKTsNCiAgICArCWlmIChzaXplID49IHNp
emVvZihmaWxlbmFtZSkpDQogICAgKwkJZmlsZW5hbWVbc2l6ZW9mKGZpbGVuYW1lKS0xXSA9ICdc
MCc7DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBzdWJ0aXRsZV9wYXJ0IHsNCiAgICArCXN0
cnVjdCBsaXN0X2hlYWQgZW50cmllczsNCiAgICArCWNvbnN0IGNoYXIgKnRleHQ7DQogICAgK307
DQogICAgK3N0YXRpYyBMSVNUX0hFQUQodHJhaWwpOw0KICAgICsNCiAgICArc3RhdGljIHN0cnVj
dCBzdWJ0aXRsZV9saXN0ICpzdWJ0aXRsZXM7DQogICAgK3N0YXRpYyB2b2lkIHNldF9zdWJ0aXRs
ZSh2b2lkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3VidGl0bGVfcGFydCAqc3A7DQogICAgKwlz
dHJ1Y3Qgc3VidGl0bGVfbGlzdCAqcG9zLCAqdG1wOw0KICAgICsNCiAgICArCWZvciAocG9zID0g
c3VidGl0bGVzOyBwb3MgIT0gTlVMTDsgcG9zID0gdG1wKSB7DQogICAgKwkJdG1wID0gcG9zLT5u
ZXh0Ow0KICAgICsJCWZyZWUocG9zKTsNCiAgICArCX0NCiAgICArDQogICAgKwlzdWJ0aXRsZXMg
PSBOVUxMOw0KICAgICsJbGlzdF9mb3JfZWFjaF9lbnRyeShzcCwgJnRyYWlsLCBlbnRyaWVzKSB7
DQogICAgKwkJaWYgKHNwLT50ZXh0KSB7DQogICAgKwkJCWlmIChwb3MpIHsNCiAgICArCQkJCXBv
cy0+bmV4dCA9IHhjYWxsb2MoMSwgc2l6ZW9mKCpwb3MpKTsNCiAgICArCQkJCXBvcyA9IHBvcy0+
bmV4dDsNCiAgICArCQkJfSBlbHNlIHsNCiAgICArCQkJCXN1YnRpdGxlcyA9IHBvcyA9IHhjYWxs
b2MoMSwgc2l6ZW9mKCpwb3MpKTsNCiAgICArCQkJfQ0KICAgICsJCQlwb3MtPnRleHQgPSBzcC0+
dGV4dDsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJc2V0X2RpYWxvZ19zdWJ0aXRs
ZXMoc3VidGl0bGVzKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgcmVzZXRfc3Vi
dGl0bGUodm9pZCkNCiAgICArew0KICAgICsJc3RydWN0IHN1YnRpdGxlX2xpc3QgKnBvcywgKnRt
cDsNCiAgICArDQogICAgKwlmb3IgKHBvcyA9IHN1YnRpdGxlczsgcG9zICE9IE5VTEw7IHBvcyA9
IHRtcCkgew0KICAgICsJCXRtcCA9IHBvcy0+bmV4dDsNCiAgICArCQlmcmVlKHBvcyk7DQogICAg
Kwl9DQogICAgKwlzdWJ0aXRsZXMgPSBOVUxMOw0KICAgICsJc2V0X2RpYWxvZ19zdWJ0aXRsZXMo
c3VidGl0bGVzKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHNlYXJjaF9kYXRhIHsNCiAg
ICArCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7DQogICAgKwlzdHJ1Y3QgbWVudSAqKnRhcmdldHM7
DQogICAgKwlpbnQgKmtleXM7DQogICAgK307DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCB1cGRh
dGVfdGV4dChjaGFyICpidWYsIHNpemVfdCBzdGFydCwgc2l6ZV90IGVuZCwgdm9pZCAqX2RhdGEp
DQogICAgK3sNCiAgICArCXN0cnVjdCBzZWFyY2hfZGF0YSAqZGF0YSA9IF9kYXRhOw0KICAgICsJ
c3RydWN0IGp1bXBfa2V5ICpwb3M7DQogICAgKwlpbnQgayA9IDA7DQogICAgKw0KICAgICsJbGlz
dF9mb3JfZWFjaF9lbnRyeShwb3MsIGRhdGEtPmhlYWQsIGVudHJpZXMpIHsNCiAgICArCQlpZiAo
cG9zLT5vZmZzZXQgPj0gc3RhcnQgJiYgcG9zLT5vZmZzZXQgPCBlbmQpIHsNCiAgICArCQkJY2hh
ciBoZWFkZXJbNF07DQogICAgKw0KICAgICsJCQlpZiAoayA8IEpVTVBfTkIpIHsNCiAgICArCQkJ
CWludCBrZXkgPSAnMCcgKyAocG9zLT5pbmRleCAlIEpVTVBfTkIpICsgMTsNCiAgICArDQogICAg
KwkJCQlzcHJpbnRmKGhlYWRlciwgIiglYykiLCBrZXkpOw0KICAgICsJCQkJZGF0YS0+a2V5c1tr
XSA9IGtleTsNCiAgICArCQkJCWRhdGEtPnRhcmdldHNba10gPSBwb3MtPnRhcmdldDsNCiAgICAr
CQkJCWsrKzsNCiAgICArCQkJfSBlbHNlIHsNCiAgICArCQkJCXNwcmludGYoaGVhZGVyLCAiICAg
Iik7DQogICAgKwkJCX0NCiAgICArDQogICAgKwkJCW1lbWNweShidWYgKyBwb3MtPm9mZnNldCwg
aGVhZGVyLCBzaXplb2YoaGVhZGVyKSAtIDEpOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWRh
dGEtPmtleXNba10gPSAwOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBzZWFyY2hf
Y29uZih2b2lkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICoqc3ltX2FycjsNCiAgICAr
CXN0cnVjdCBnc3RyIHJlczsNCiAgICArCXN0cnVjdCBnc3RyIHRpdGxlOw0KICAgICsJY2hhciAq
ZGlhbG9nX2lucHV0Ow0KICAgICsJaW50IGRyZXMsIHZzY3JvbGwgPSAwLCBoc2Nyb2xsID0gMDsN
CiAgICArCWJvb2wgYWdhaW47DQogICAgKwlzdHJ1Y3QgZ3N0ciBzdHRleHQ7DQogICAgKwlzdHJ1
Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7DQogICAgKw0KICAgICsJdGl0bGUgPSBzdHJfbmV3KCk7
DQogICAgKwlzdHJfcHJpbnRmKCAmdGl0bGUsICJFbnRlciAoc3ViKXN0cmluZyBvciByZWdleHAg
dG8gc2VhcmNoIGZvciAiDQogICAgKwkJCSAgICAgICIod2l0aCBvciB3aXRob3V0IFwiJXNcIiki
LCBDT05GSUdfKTsNCiAgICArDQogICAgK2FnYWluOg0KICAgICsJZGlhbG9nX2NsZWFyKCk7DQog
ICAgKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KCJTZWFyY2ggQ29uZmlndXJhdGlvbiBQYXJhbWV0
ZXIiLA0KICAgICsJCQkgICAgICBzdHJfZ2V0KCZ0aXRsZSksDQogICAgKwkJCSAgICAgIDEwLCA3
NSwgIiIpOw0KICAgICsJc3dpdGNoIChkcmVzKSB7DQogICAgKwljYXNlIDA6DQogICAgKwkJYnJl
YWs7DQogICAgKwljYXNlIDE6DQogICAgKwkJc2hvd19oZWxwdGV4dCgiU2VhcmNoIENvbmZpZ3Vy
YXRpb24iLCBzZWFyY2hfaGVscCk7DQogICAgKwkJZ290byBhZ2FpbjsNCiAgICArCWRlZmF1bHQ6
DQogICAgKwkJc3RyX2ZyZWUoJnRpdGxlKTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAg
Kw0KICAgICsJLyogc3RyaXAgdGhlIHByZWZpeCBpZiBuZWNlc3NhcnkgKi8NCiAgICArCWRpYWxv
Z19pbnB1dCA9IGRpYWxvZ19pbnB1dF9yZXN1bHQ7DQogICAgKwlpZiAoc3RybmNhc2VjbXAoZGlh
bG9nX2lucHV0X3Jlc3VsdCwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSA9PSAwKQ0KICAgICsJ
CWRpYWxvZ19pbnB1dCArPSBzdHJsZW4oQ09ORklHXyk7DQogICAgKw0KICAgICsJc3R0ZXh0ID0g
c3RyX25ldygpOw0KICAgICsJc3RyX3ByaW50Zigmc3R0ZXh0LCAiU2VhcmNoICglcykiLCBkaWFs
b2dfaW5wdXRfcmVzdWx0KTsNCiAgICArCXN0cGFydC50ZXh0ID0gc3RyX2dldCgmc3R0ZXh0KTsN
CiAgICArCWxpc3RfYWRkX3RhaWwoJnN0cGFydC5lbnRyaWVzLCAmdHJhaWwpOw0KICAgICsNCiAg
ICArCXN5bV9hcnIgPSBzeW1fcmVfc2VhcmNoKGRpYWxvZ19pbnB1dCk7DQogICAgKwlkbyB7DQog
ICAgKwkJTElTVF9IRUFEKGhlYWQpOw0KICAgICsJCXN0cnVjdCBtZW51ICp0YXJnZXRzW0pVTVBf
TkJdOw0KICAgICsJCWludCBrZXlzW0pVTVBfTkIgKyAxXSwgaTsNCiAgICArCQlzdHJ1Y3Qgc2Vh
cmNoX2RhdGEgZGF0YSA9IHsNCiAgICArCQkJLmhlYWQgPSAmaGVhZCwNCiAgICArCQkJLnRhcmdl
dHMgPSB0YXJnZXRzLA0KICAgICsJCQkua2V5cyA9IGtleXMsDQogICAgKwkJfTsNCiAgICArCQlz
dHJ1Y3QganVtcF9rZXkgKnBvcywgKnRtcDsNCiAgICArDQogICAgKwkJcmVzID0gZ2V0X3JlbGF0
aW9uc19zdHIoc3ltX2FyciwgJmhlYWQpOw0KICAgICsJCXNldF9zdWJ0aXRsZSgpOw0KICAgICsJ
CWRyZXMgPSBzaG93X3RleHRib3hfZXh0KCJTZWFyY2ggUmVzdWx0cyIsIChjaGFyICopDQogICAg
KwkJCQkJc3RyX2dldCgmcmVzKSwgMCwgMCwga2V5cywgJnZzY3JvbGwsDQogICAgKwkJCQkJJmhz
Y3JvbGwsICZ1cGRhdGVfdGV4dCwgKHZvaWQgKikNCiAgICArCQkJCQkmZGF0YSk7DQogICAgKwkJ
YWdhaW4gPSBmYWxzZTsNCiAgICArCQlmb3IgKGkgPSAwOyBpIDwgSlVNUF9OQiAmJiBrZXlzW2ld
OyBpKyspDQogICAgKwkJCWlmIChkcmVzID09IGtleXNbaV0pIHsNCiAgICArCQkJCWNvbmYodGFy
Z2V0c1tpXS0+cGFyZW50LCB0YXJnZXRzW2ldKTsNCiAgICArCQkJCWFnYWluID0gdHJ1ZTsNCiAg
ICArCQkJfQ0KICAgICsJCXN0cl9mcmVlKCZyZXMpOw0KICAgICsJCWxpc3RfZm9yX2VhY2hfZW50
cnlfc2FmZShwb3MsIHRtcCwgJmhlYWQsIGVudHJpZXMpDQogICAgKwkJCWZyZWUocG9zKTsNCiAg
ICArCX0gd2hpbGUgKGFnYWluKTsNCiAgICArCWZyZWUoc3ltX2Fycik7DQogICAgKwlzdHJfZnJl
ZSgmdGl0bGUpOw0KICAgICsJbGlzdF9kZWwodHJhaWwucHJldik7DQogICAgKwlzdHJfZnJlZSgm
c3R0ZXh0KTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgYnVpbGRfY29uZihzdHJ1
Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJ
c3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsJ
aW50IHR5cGUsIHRtcCwgZG9pbnQgPSAyOw0KICAgICsJdHJpc3RhdGUgdmFsOw0KICAgICsJY2hh
ciBjaDsNCiAgICArCWJvb2wgdmlzaWJsZTsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogbm90
ZTogbWVudV9pc192aXNpYmxlKCkgaGFzIHNpZGUgZWZmZWN0IHRoYXQgaXQgd2lsbA0KICAgICsJ
ICogcmVjYWxjIHRoZSB2YWx1ZSBvZiB0aGUgc3ltYm9sLg0KICAgICsJICovDQogICAgKwl2aXNp
YmxlID0gbWVudV9pc192aXNpYmxlKG1lbnUpOw0KICAgICsJaWYgKHNob3dfYWxsX29wdGlvbnMg
JiYgIW1lbnVfaGFzX3Byb21wdChtZW51KSkNCiAgICArCQlyZXR1cm47DQogICAgKwllbHNlIGlm
ICghc2hvd19hbGxfb3B0aW9ucyAmJiAhdmlzaWJsZSkNCiAgICArCQlyZXR1cm47DQogICAgKw0K
ICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsJcHJvcCA9IG1lbnUtPnByb21wdDsNCiAgICAr
CWlmICghc3ltKSB7DQogICAgKwkJaWYgKHByb3AgJiYgbWVudSAhPSBjdXJyZW50X21lbnUpIHsN
CiAgICArCQkJY29uc3QgY2hhciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAg
ICsJCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAgICArCQkJY2FzZSBQX01FTlU6DQogICAgKwkJ
CQljaGlsZF9jb3VudCsrOw0KICAgICsJCQkJaWYgKHNpbmdsZV9tZW51X21vZGUpIHsNCiAgICAr
CQkJCQlpdGVtX21ha2UoIiVzJSpjJXMiLA0KICAgICsJCQkJCQkgIG1lbnUtPmRhdGEgPyAiLS0+
IiA6ICIrKz4iLA0KICAgICsJCQkJCQkgIGluZGVudCArIDEsICcgJywgcHJvbXB0KTsNCiAgICAr
CQkJCX0gZWxzZQ0KICAgICsJCQkJCWl0ZW1fbWFrZSgiICAgJSpjJXMgICVzIiwNCiAgICArCQkJ
CQkJICBpbmRlbnQgKyAxLCAnICcsIHByb21wdCwNCiAgICArCQkJCQkJICBtZW51X2lzX2VtcHR5
KG1lbnUpID8gIi0tLS0iIDogIi0tLT4iKTsNCiAgICArCQkJCWl0ZW1fc2V0X3RhZygnbScpOw0K
ICAgICsJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICArCQkJCWlmIChzaW5nbGVfbWVudV9t
b2RlICYmIG1lbnUtPmRhdGEpDQogICAgKwkJCQkJZ290byBjb25mX2NoaWxkczsNCiAgICArCQkJ
CXJldHVybjsNCiAgICArCQkJY2FzZSBQX0NPTU1FTlQ6DQogICAgKwkJCQlpZiAocHJvbXB0KSB7
DQogICAgKwkJCQkJY2hpbGRfY291bnQrKzsNCiAgICArCQkJCQlpdGVtX21ha2UoIiAgICUqYyoq
KiAlcyAqKioiLCBpbmRlbnQgKyAxLCAnICcsIHByb21wdCk7DQogICAgKwkJCQkJaXRlbV9zZXRf
dGFnKCc6Jyk7DQogICAgKwkJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICArCQkJCX0NCiAg
ICArCQkJCWJyZWFrOw0KICAgICsJCQlkZWZhdWx0Og0KICAgICsJCQkJaWYgKHByb21wdCkgew0K
ICAgICsJCQkJCWNoaWxkX2NvdW50Kys7DQogICAgKwkJCQkJaXRlbV9tYWtlKCItLS0lKmMlcyIs
IGluZGVudCArIDEsICcgJywgcHJvbXB0KTsNCiAgICArCQkJCQlpdGVtX3NldF90YWcoJzonKTsN
CiAgICArCQkJCQlpdGVtX3NldF9kYXRhKG1lbnUpOw0KICAgICsJCQkJfQ0KICAgICsJCQl9DQog
ICAgKwkJfSBlbHNlDQogICAgKwkJCWRvaW50ID0gMDsNCiAgICArCQlnb3RvIGNvbmZfY2hpbGRz
Ow0KICAgICsJfQ0KICAgICsNCiAgICArCXR5cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsNCiAgICAr
CWlmIChzeW1faXNfY2hvaWNlKHN5bSkpIHsNCiAgICArCQlzdHJ1Y3Qgc3ltYm9sICpkZWZfc3lt
ID0gc3ltX2dldF9jaG9pY2VfdmFsdWUoc3ltKTsNCiAgICArCQlzdHJ1Y3QgbWVudSAqZGVmX21l
bnUgPSBOVUxMOw0KICAgICsNCiAgICArCQljaGlsZF9jb3VudCsrOw0KICAgICsJCWZvciAoY2hp
bGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCQlp
ZiAobWVudV9pc192aXNpYmxlKGNoaWxkKSAmJiBjaGlsZC0+c3ltID09IGRlZl9zeW0pDQogICAg
KwkJCQlkZWZfbWVudSA9IGNoaWxkOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJdmFsID0gc3lt
X2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgICsJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5
bSkpIHsNCiAgICArCQkJc3dpdGNoICh0eXBlKSB7DQogICAgKwkJCWNhc2UgU19CT09MRUFOOg0K
ICAgICsJCQkJaXRlbV9tYWtlKCJbJWNdIiwgdmFsID09IG5vID8gJyAnIDogJyonKTsNCiAgICAr
CQkJCWJyZWFrOw0KICAgICsJCQljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJCQlzd2l0Y2ggKHZh
bCkgew0KICAgICsJCQkJY2FzZSB5ZXM6IGNoID0gJyonOyBicmVhazsNCiAgICArCQkJCWNhc2Ug
bW9kOiBjaCA9ICdNJzsgYnJlYWs7DQogICAgKwkJCQlkZWZhdWx0OiAgY2ggPSAnICc7IGJyZWFr
Ow0KICAgICsJCQkJfQ0KICAgICsJCQkJaXRlbV9tYWtlKCI8JWM+IiwgY2gpOw0KICAgICsJCQkJ
YnJlYWs7DQogICAgKwkJCX0NCiAgICArCQkJaXRlbV9zZXRfdGFnKCd0Jyk7DQogICAgKwkJCWl0
ZW1fc2V0X2RhdGEobWVudSk7DQogICAgKwkJfSBlbHNlIHsNCiAgICArCQkJaXRlbV9tYWtlKCIg
ICAiKTsNCiAgICArCQkJaXRlbV9zZXRfdGFnKGRlZl9tZW51ID8gJ3QnIDogJzonKTsNCiAgICAr
CQkJaXRlbV9zZXRfZGF0YShtZW51KTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCWl0ZW1fYWRk
X3N0cigiJSpjJXMiLCBpbmRlbnQgKyAxLCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQog
ICAgKwkJaWYgKHZhbCA9PSB5ZXMpIHsNCiAgICArCQkJaWYgKGRlZl9tZW51KSB7DQogICAgKwkJ
CQlpdGVtX2FkZF9zdHIoIiAoJXMpIiwgbWVudV9nZXRfcHJvbXB0KGRlZl9tZW51KSk7DQogICAg
KwkJCQlpdGVtX2FkZF9zdHIoIiAgLS0tPiIpOw0KICAgICsJCQkJaWYgKGRlZl9tZW51LT5saXN0
KSB7DQogICAgKwkJCQkJaW5kZW50ICs9IDI7DQogICAgKwkJCQkJYnVpbGRfY29uZihkZWZfbWVu
dSk7DQogICAgKwkJCQkJaW5kZW50IC09IDI7DQogICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICAr
CQkJcmV0dXJuOw0KICAgICsJCX0NCiAgICArCX0gZWxzZSB7DQogICAgKwkJaWYgKG1lbnUgPT0g
Y3VycmVudF9tZW51KSB7DQogICAgKwkJCWl0ZW1fbWFrZSgiLS0tJSpjJXMiLCBpbmRlbnQgKyAx
LCAnICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQogICAgKwkJCWl0ZW1fc2V0X3RhZygnOicp
Ow0KICAgICsJCQlpdGVtX3NldF9kYXRhKG1lbnUpOw0KICAgICsJCQlnb3RvIGNvbmZfY2hpbGRz
Ow0KICAgICsJCX0NCiAgICArCQljaGlsZF9jb3VudCsrOw0KICAgICsJCXZhbCA9IHN5bV9nZXRf
dHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArCQlpZiAoc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0p
ICYmIHZhbCA9PSB5ZXMpIHsNCiAgICArCQkJaXRlbV9tYWtlKCIgICAiKTsNCiAgICArCQkJaXRl
bV9zZXRfdGFnKCc6Jyk7DQogICAgKwkJCWl0ZW1fc2V0X2RhdGEobWVudSk7DQogICAgKwkJfSBl
bHNlIHsNCiAgICArCQkJc3dpdGNoICh0eXBlKSB7DQogICAgKwkJCWNhc2UgU19CT09MRUFOOg0K
ICAgICsJCQkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkNCiAgICArCQkJCQlpdGVtX21ha2Uo
IlslY10iLCB2YWwgPT0gbm8gPyAnICcgOiAnKicpOw0KICAgICsJCQkJZWxzZQ0KICAgICsJCQkJ
CWl0ZW1fbWFrZSgiLSVjLSIsIHZhbCA9PSBubyA/ICcgJyA6ICcqJyk7DQogICAgKwkJCQlpdGVt
X3NldF90YWcoJ3QnKTsNCiAgICArCQkJCWl0ZW1fc2V0X2RhdGEobWVudSk7DQogICAgKwkJCQli
cmVhazsNCiAgICArCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCQkJc3dpdGNoICh2YWwpIHsN
CiAgICArCQkJCWNhc2UgeWVzOiBjaCA9ICcqJzsgYnJlYWs7DQogICAgKwkJCQljYXNlIG1vZDog
Y2ggPSAnTSc7IGJyZWFrOw0KICAgICsJCQkJZGVmYXVsdDogIGNoID0gJyAnOyBicmVhazsNCiAg
ICArCQkJCX0NCiAgICArCQkJCWlmIChzeW1faXNfY2hhbmdhYmxlKHN5bSkpIHsNCiAgICArCQkJ
CQlpZiAoc3ltLT5yZXZfZGVwLnRyaSA9PSBtb2QpDQogICAgKwkJCQkJCWl0ZW1fbWFrZSgieyVj
fSIsIGNoKTsNCiAgICArCQkJCQllbHNlDQogICAgKwkJCQkJCWl0ZW1fbWFrZSgiPCVjPiIsIGNo
KTsNCiAgICArCQkJCX0gZWxzZQ0KICAgICsJCQkJCWl0ZW1fbWFrZSgiLSVjLSIsIGNoKTsNCiAg
ICArCQkJCWl0ZW1fc2V0X3RhZygndCcpOw0KICAgICsJCQkJaXRlbV9zZXRfZGF0YShtZW51KTsN
CiAgICArCQkJCWJyZWFrOw0KICAgICsJCQlkZWZhdWx0Og0KICAgICsJCQkJdG1wID0gMiArIHN0
cmxlbihzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsgLyogKCkgPSAyICovDQogICAgKwkJCQlp
dGVtX21ha2UoIiglcykiLCBzeW1fZ2V0X3N0cmluZ192YWx1ZShzeW0pKTsNCiAgICArCQkJCXRt
cCA9IGluZGVudCAtIHRtcCArIDQ7DQogICAgKwkJCQlpZiAodG1wIDwgMCkNCiAgICArCQkJCQl0
bXAgPSAwOw0KICAgICsJCQkJaXRlbV9hZGRfc3RyKCIlKmMlcyVzIiwgdG1wLCAnICcsIG1lbnVf
Z2V0X3Byb21wdChtZW51KSwNCiAgICArCQkJCQkgICAgIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwg
IXN5bV9pc19jaGFuZ2FibGUoc3ltKSkgPw0KICAgICsJCQkJCSAgICAgIiIgOiAiIChORVcpIik7
DQogICAgKwkJCQlpdGVtX3NldF90YWcoJ3MnKTsNCiAgICArCQkJCWl0ZW1fc2V0X2RhdGEobWVu
dSk7DQogICAgKwkJCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAg
ICsJCWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIGluZGVudCArIDEsICcgJywgbWVudV9nZXRfcHJv
bXB0KG1lbnUpLA0KICAgICsJCQkgIChzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9pc19jaGFu
Z2FibGUoc3ltKSkgPw0KICAgICsJCQkgICIiIDogIiAoTkVXKSIpOw0KICAgICsJCWlmIChtZW51
LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7DQogICAgKwkJCWl0ZW1fYWRkX3N0cigiICAlcyIs
IG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0tLSIgOiAiLS0tPiIpOw0KICAgICsJCQlyZXR1cm47
DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArY29uZl9jaGlsZHM6DQogICAgKwlpbmRl
bnQgKz0gZG9pbnQ7DQogICAgKwlmb3IgKGNoaWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHQpDQogICAgKwkJYnVpbGRfY29uZihjaGlsZCk7DQogICAgKwlpbmRlbnQg
LT0gZG9pbnQ7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1l
bnUgKm1lbnUsIHN0cnVjdCBtZW51ICphY3RpdmVfbWVudSkNCiAgICArew0KICAgICsJc3RydWN0
IG1lbnUgKnN1Ym1lbnU7DQogICAgKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9t
cHQobWVudSk7DQogICAgKwlzdHJ1Y3Qgc3VidGl0bGVfcGFydCBzdHBhcnQ7DQogICAgKwlzdHJ1
Y3Qgc3ltYm9sICpzeW07DQogICAgKwlpbnQgcmVzOw0KICAgICsJaW50IHNfc2Nyb2xsID0gMDsN
CiAgICArDQogICAgKwlpZiAobWVudSAhPSAmcm9vdG1lbnUpDQogICAgKwkJc3RwYXJ0LnRleHQg
PSBtZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgKwllbHNlDQogICAgKwkJc3RwYXJ0LnRleHQg
PSBOVUxMOw0KICAgICsJbGlzdF9hZGRfdGFpbCgmc3RwYXJ0LmVudHJpZXMsICZ0cmFpbCk7DQog
ICAgKw0KICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQlpdGVtX3Jlc2V0KCk7DQogICAgKwkJY3Vy
cmVudF9tZW51ID0gbWVudTsNCiAgICArCQlidWlsZF9jb25mKG1lbnUpOw0KICAgICsJCWlmICgh
Y2hpbGRfY291bnQpDQogICAgKwkJCWJyZWFrOw0KICAgICsJCXNldF9zdWJ0aXRsZSgpOw0KICAg
ICsJCWRpYWxvZ19jbGVhcigpOw0KICAgICsJCXJlcyA9IGRpYWxvZ19tZW51KHByb21wdCA/IHBy
b21wdCA6ICJNYWluIE1lbnUiLA0KICAgICsJCQkJICBtZW51X2luc3RydWN0aW9ucywNCiAgICAr
CQkJCSAgYWN0aXZlX21lbnUsICZzX3Njcm9sbCk7DQogICAgKwkJaWYgKHJlcyA9PSAxIHx8IHJl
cyA9PSBLRVlfRVNDIHx8IHJlcyA9PSAtRVJSRElTUExBWVRPT1NNQUxMKQ0KICAgICsJCQlicmVh
azsNCiAgICArCQlpZiAoaXRlbV9jb3VudCgpICE9IDApIHsNCiAgICArCQkJaWYgKCFpdGVtX2Fj
dGl2YXRlX3NlbGVjdGVkKCkpDQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJaWYgKCFpdGVt
X3RhZygpKQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJfQ0KICAgICsJCXN1Ym1lbnUgPSBp
dGVtX2RhdGEoKTsNCiAgICArCQlhY3RpdmVfbWVudSA9IGl0ZW1fZGF0YSgpOw0KICAgICsJCWlm
IChzdWJtZW51KQ0KICAgICsJCQlzeW0gPSBzdWJtZW51LT5zeW07DQogICAgKwkJZWxzZQ0KICAg
ICsJCQlzeW0gPSBOVUxMOw0KICAgICsNCiAgICArCQlzd2l0Y2ggKHJlcykgew0KICAgICsJCWNh
c2UgMDoNCiAgICArCQkJc3dpdGNoIChpdGVtX3RhZygpKSB7DQogICAgKwkJCWNhc2UgJ20nOg0K
ICAgICsJCQkJaWYgKHNpbmdsZV9tZW51X21vZGUpDQogICAgKwkJCQkJc3VibWVudS0+ZGF0YSA9
ICh2b2lkICopIChsb25nKSAhc3VibWVudS0+ZGF0YTsNCiAgICArCQkJCWVsc2UNCiAgICArCQkJ
CQljb25mKHN1Ym1lbnUsIE5VTEwpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgJ3Qn
Og0KICAgICsJCQkJaWYgKHN5bV9pc19jaG9pY2Uoc3ltKSAmJiBzeW1fZ2V0X3RyaXN0YXRlX3Zh
bHVlKHN5bSkgPT0geWVzKQ0KICAgICsJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOw0KICAgICsJ
CQkJZWxzZSBpZiAoc3VibWVudS0+cHJvbXB0LT50eXBlID09IFBfTUVOVSkNCiAgICArCQkJCQlj
b25mKHN1Ym1lbnUsIE5VTEwpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgJ3MnOg0K
ICAgICsJCQkJY29uZl9zdHJpbmcoc3VibWVudSk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJ
fQ0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDI6DQogICAgKwkJCWlmIChzeW0pDQogICAg
KwkJCQlzaG93X2hlbHAoc3VibWVudSk7DQogICAgKwkJCWVsc2Ugew0KICAgICsJCQkJcmVzZXRf
c3VidGl0bGUoKTsNCiAgICArCQkJCXNob3dfaGVscHRleHQoIlJFQURNRSIsIG1jb25mX3JlYWRt
ZSk7DQogICAgKwkJCX0NCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAzOg0KICAgICsJCQly
ZXNldF9zdWJ0aXRsZSgpOw0KICAgICsJCQljb25mX3NhdmUoKTsNCiAgICArCQkJYnJlYWs7DQog
ICAgKwkJY2FzZSA0Og0KICAgICsJCQlyZXNldF9zdWJ0aXRsZSgpOw0KICAgICsJCQljb25mX2xv
YWQoKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSA1Og0KICAgICsJCQlpZiAoaXRlbV9p
c190YWcoJ3QnKSkgew0KICAgICsJCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5
ZXMpKQ0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFs
dWUoc3ltLCBtb2QpKQ0KICAgICsJCQkJCXNob3dfdGV4dGJveChOVUxMLCBzZXRtb2RfdGV4dCwg
NiwgNzQpOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgNjoNCiAgICAr
CQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpDQogICAgKwkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVl
KHN5bSwgbm8pOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDc6DQogICAgKwkJCWlmIChp
dGVtX2lzX3RhZygndCcpKQ0KICAgICsJCQkJc3ltX3NldF90cmlzdGF0ZV92YWx1ZShzeW0sIG1v
ZCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgODoNCiAgICArCQkJaWYgKGl0ZW1faXNf
dGFnKCd0JykpDQogICAgKwkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAg
KwkJCWVsc2UgaWYgKGl0ZW1faXNfdGFnKCdtJykpDQogICAgKwkJCQljb25mKHN1Ym1lbnUsIE5V
TEwpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDk6DQogICAgKwkJCXNlYXJjaF9jb25m
KCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgMTA6DQogICAgKwkJCXNob3dfYWxsX29w
dGlvbnMgPSAhc2hvd19hbGxfb3B0aW9uczsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAg
ICsJfQ0KICAgICsNCiAgICArCWxpc3RfZGVsKHRyYWlsLnByZXYpOw0KICAgICt9DQogICAgKw0K
ICAgICtzdGF0aWMgaW50IHNob3dfdGV4dGJveF9leHQoY29uc3QgY2hhciAqdGl0bGUsIGNoYXIg
KnRleHQsIGludCByLCBpbnQgYywgaW50DQogICAgKwkJCSAgICAqa2V5cywgaW50ICp2c2Nyb2xs
LCBpbnQgKmhzY3JvbGwsIHVwZGF0ZV90ZXh0X2ZuDQogICAgKwkJCSAgICB1cGRhdGVfdGV4dCwg
dm9pZCAqZGF0YSkNCiAgICArew0KICAgICsJZGlhbG9nX2NsZWFyKCk7DQogICAgKwlyZXR1cm4g
ZGlhbG9nX3RleHRib3godGl0bGUsIHRleHQsIHIsIGMsIGtleXMsIHZzY3JvbGwsIGhzY3JvbGws
DQogICAgKwkJCSAgICAgIHVwZGF0ZV90ZXh0LCBkYXRhKTsNCiAgICArfQ0KICAgICsNCiAgICAr
c3RhdGljIHZvaWQgc2hvd190ZXh0Ym94KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp0
ZXh0LCBpbnQgciwgaW50IGMpDQogICAgK3sNCiAgICArCXNob3dfdGV4dGJveF9leHQodGl0bGUs
IChjaGFyICopIHRleHQsIHIsIGMsIChpbnQgW10pIHswfSwgTlVMTCwgTlVMTCwNCiAgICArCQkJ
IE5VTEwsIE5VTEwpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBzaG93X2hlbHB0
ZXh0KGNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICp0ZXh0KQ0KICAgICt7DQogICAgKwlz
aG93X3RleHRib3godGl0bGUsIHRleHQsIDAsIDApOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0
aWMgdm9pZCBjb25mX21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykNCiAgICArew0KICAg
ICsJaWYgKHNhdmVfYW5kX2V4aXQpIHsNCiAgICArCQlpZiAoIXNpbGVudCkNCiAgICArCQkJcHJp
bnRmKCIlcyIsIHMpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQlzaG93X3RleHRib3goTlVMTCwg
cywgNiwgNjApOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBzaG93
X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCXN0cnVjdCBnc3RyIGhlbHAg
PSBzdHJfbmV3KCk7DQogICAgKw0KICAgICsJaGVscC5tYXhfd2lkdGggPSBnZXRtYXh4KHN0ZHNj
cikgLSAxMDsNCiAgICArCW1lbnVfZ2V0X2V4dF9oZWxwKG1lbnUsICZoZWxwKTsNCiAgICArDQog
ICAgKwlzaG93X2hlbHB0ZXh0KG1lbnVfZ2V0X3Byb21wdChtZW51KSwgc3RyX2dldCgmaGVscCkp
Ow0KICAgICsJc3RyX2ZyZWUoJmhlbHApOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9p
ZCBjb25mX2Nob2ljZShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJY29uc3QgY2hh
ciAqcHJvbXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgICsJc3RydWN0IG1lbnUgKmNo
aWxkOw0KICAgICsJc3RydWN0IHN5bWJvbCAqYWN0aXZlOw0KICAgICsNCiAgICArCWFjdGl2ZSA9
IHN5bV9nZXRfY2hvaWNlX3ZhbHVlKG1lbnUtPnN5bSk7DQogICAgKwl3aGlsZSAoMSkgew0KICAg
ICsJCWludCByZXM7DQogICAgKwkJaW50IHNlbGVjdGVkOw0KICAgICsJCWl0ZW1fcmVzZXQoKTsN
CiAgICArDQogICAgKwkJY3VycmVudF9tZW51ID0gbWVudTsNCiAgICArCQlmb3IgKGNoaWxkID0g
bWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICArCQkJaWYgKCFt
ZW51X2lzX3Zpc2libGUoY2hpbGQpKQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWlmIChj
aGlsZC0+c3ltKQ0KICAgICsJCQkJaXRlbV9tYWtlKCIlcyIsIG1lbnVfZ2V0X3Byb21wdChjaGls
ZCkpOw0KICAgICsJCQllbHNlIHsNCiAgICArCQkJCWl0ZW1fbWFrZSgiKioqICVzICoqKiIsIG1l
bnVfZ2V0X3Byb21wdChjaGlsZCkpOw0KICAgICsJCQkJaXRlbV9zZXRfdGFnKCc6Jyk7DQogICAg
KwkJCX0NCiAgICArCQkJaXRlbV9zZXRfZGF0YShjaGlsZCk7DQogICAgKwkJCWlmIChjaGlsZC0+
c3ltID09IGFjdGl2ZSkNCiAgICArCQkJCWl0ZW1fc2V0X3NlbGVjdGVkKDEpOw0KICAgICsJCQlp
ZiAoY2hpbGQtPnN5bSA9PSBzeW1fZ2V0X2Nob2ljZV92YWx1ZShtZW51LT5zeW0pKQ0KICAgICsJ
CQkJaXRlbV9zZXRfdGFnKCdYJyk7DQogICAgKwkJfQ0KICAgICsJCWRpYWxvZ19jbGVhcigpOw0K
ICAgICsJCXJlcyA9IGRpYWxvZ19jaGVja2xpc3QocHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVu
dSIsDQogICAgKwkJCQkJcmFkaW9saXN0X2luc3RydWN0aW9ucywNCiAgICArCQkJCQlNRU5VQk9Y
X0hFSUdUSF9NSU4sDQogICAgKwkJCQkJTUVOVUJPWF9XSURUSF9NSU4sDQogICAgKwkJCQkJQ0hF
Q0tMSVNUX0hFSUdUSF9NSU4pOw0KICAgICsJCXNlbGVjdGVkID0gaXRlbV9hY3RpdmF0ZV9zZWxl
Y3RlZCgpOw0KICAgICsJCXN3aXRjaCAocmVzKSB7DQogICAgKwkJY2FzZSAwOg0KICAgICsJCQlp
ZiAoc2VsZWN0ZWQpIHsNCiAgICArCQkJCWNoaWxkID0gaXRlbV9kYXRhKCk7DQogICAgKwkJCQlp
ZiAoIWNoaWxkLT5zeW0pDQogICAgKwkJCQkJYnJlYWs7DQogICAgKw0KICAgICsJCQkJc3ltX3Nl
dF90cmlzdGF0ZV92YWx1ZShjaGlsZC0+c3ltLCB5ZXMpOw0KICAgICsJCQl9DQogICAgKwkJCXJl
dHVybjsNCiAgICArCQljYXNlIDE6DQogICAgKwkJCWlmIChzZWxlY3RlZCkgew0KICAgICsJCQkJ
Y2hpbGQgPSBpdGVtX2RhdGEoKTsNCiAgICArCQkJCXNob3dfaGVscChjaGlsZCk7DQogICAgKwkJ
CQlhY3RpdmUgPSBjaGlsZC0+c3ltOw0KICAgICsJCQl9IGVsc2UNCiAgICArCQkJCXNob3dfaGVs
cChtZW51KTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfRVNDOg0KICAgICsJCQly
ZXR1cm47DQogICAgKwkJY2FzZSAtRVJSRElTUExBWVRPT1NNQUxMOg0KICAgICsJCQlyZXR1cm47
DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25m
X3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqcHJv
bXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgICsNCiAgICArCXdoaWxlICgxKSB7DQog
ICAgKwkJaW50IHJlczsNCiAgICArCQljb25zdCBjaGFyICpoZWFkaW5nOw0KICAgICsNCiAgICAr
CQlzd2l0Y2ggKHN5bV9nZXRfdHlwZShtZW51LT5zeW0pKSB7DQogICAgKwkJY2FzZSBTX0lOVDoN
CiAgICArCQkJaGVhZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgU19IRVg6DQogICAgKwkJCWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0
cnVjdGlvbnNfaGV4Ow0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFNfU1RSSU5HOg0KICAg
ICsJCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsNCiAgICArCQkJYnJl
YWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBtY29uZiBl
cnJvciEiOw0KICAgICsJCX0NCiAgICArCQlkaWFsb2dfY2xlYXIoKTsNCiAgICArCQlyZXMgPSBk
aWFsb2dfaW5wdXRib3gocHJvbXB0ID8gcHJvbXB0IDogIk1haW4gTWVudSIsDQogICAgKwkJCQkg
ICAgICBoZWFkaW5nLCAxMCwgNzUsDQogICAgKwkJCQkgICAgICBzeW1fZ2V0X3N0cmluZ192YWx1
ZShtZW51LT5zeW0pKTsNCiAgICArCQlzd2l0Y2ggKHJlcykgew0KICAgICsJCWNhc2UgMDoNCiAg
ICArCQkJaWYgKHN5bV9zZXRfc3RyaW5nX3ZhbHVlKG1lbnUtPnN5bSwgZGlhbG9nX2lucHV0X3Jl
c3VsdCkpDQogICAgKwkJCQlyZXR1cm47DQogICAgKwkJCXNob3dfdGV4dGJveChOVUxMLCAiWW91
IGhhdmUgbWFkZSBhbiBpbnZhbGlkIGVudHJ5LiIsIDUsIDQzKTsNCiAgICArCQkJYnJlYWs7DQog
ICAgKwkJY2FzZSAxOg0KICAgICsJCQlzaG93X2hlbHAobWVudSk7DQogICAgKwkJCWJyZWFrOw0K
ICAgICsJCWNhc2UgS0VZX0VTQzoNCiAgICArCQkJcmV0dXJuOw0KICAgICsJCX0NCiAgICArCX0N
CiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgY29uZl9sb2FkKHZvaWQpDQogICAgK3sN
CiAgICArDQogICAgKwl3aGlsZSAoMSkgew0KICAgICsJCWludCByZXM7DQogICAgKwkJZGlhbG9n
X2NsZWFyKCk7DQogICAgKwkJcmVzID0gZGlhbG9nX2lucHV0Ym94KE5VTEwsIGxvYWRfY29uZmln
X3RleHQsDQogICAgKwkJCQkgICAgICAxMSwgNTUsIGZpbGVuYW1lKTsNCiAgICArCQlzd2l0Y2go
cmVzKSB7DQogICAgKwkJY2FzZSAwOg0KICAgICsJCQlpZiAoIWRpYWxvZ19pbnB1dF9yZXN1bHRb
MF0pDQogICAgKwkJCQlyZXR1cm47DQogICAgKwkJCWlmICghY29uZl9yZWFkKGRpYWxvZ19pbnB1
dF9yZXN1bHQpKSB7DQogICAgKwkJCQlzZXRfY29uZmlnX2ZpbGVuYW1lKGRpYWxvZ19pbnB1dF9y
ZXN1bHQpOw0KICAgICsJCQkJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7DQogICAgKwkJCQlyZXR1
cm47DQogICAgKwkJCX0NCiAgICArCQkJc2hvd190ZXh0Ym94KE5VTEwsICJGaWxlIGRvZXMgbm90
IGV4aXN0ISIsIDUsIDM4KTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAxOg0KICAgICsJ
CQlzaG93X2hlbHB0ZXh0KCJMb2FkIEFsdGVybmF0ZSBDb25maWd1cmF0aW9uIiwgbG9hZF9jb25m
aWdfaGVscCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX0VTQzoNCiAgICArCQkJ
cmV0dXJuOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZv
aWQgY29uZl9zYXZlKHZvaWQpDQogICAgK3sNCiAgICArCXdoaWxlICgxKSB7DQogICAgKwkJaW50
IHJlczsNCiAgICArCQlkaWFsb2dfY2xlYXIoKTsNCiAgICArCQlyZXMgPSBkaWFsb2dfaW5wdXRi
b3goTlVMTCwgc2F2ZV9jb25maWdfdGV4dCwNCiAgICArCQkJCSAgICAgIDExLCA1NSwgZmlsZW5h
bWUpOw0KICAgICsJCXN3aXRjaChyZXMpIHsNCiAgICArCQljYXNlIDA6DQogICAgKwkJCWlmICgh
ZGlhbG9nX2lucHV0X3Jlc3VsdFswXSkNCiAgICArCQkJCXJldHVybjsNCiAgICArCQkJaWYgKCFj
b25mX3dyaXRlKGRpYWxvZ19pbnB1dF9yZXN1bHQpKSB7DQogICAgKwkJCQlzZXRfY29uZmlnX2Zp
bGVuYW1lKGRpYWxvZ19pbnB1dF9yZXN1bHQpOw0KICAgICsJCQkJcmV0dXJuOw0KICAgICsJCQl9
DQogICAgKwkJCXNob3dfdGV4dGJveChOVUxMLCAiQ2FuJ3QgY3JlYXRlIGZpbGUhIiwgNSwgNjAp
Ow0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDE6DQogICAgKwkJCXNob3dfaGVscHRleHQo
IlNhdmUgQWx0ZXJuYXRlIENvbmZpZ3VyYXRpb24iLCBzYXZlX2NvbmZpZ19oZWxwKTsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfRVNDOg0KICAgICsJCQlyZXR1cm47DQogICAgKwkJ
fQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgaW50IGhhbmRsZV9leGl0KHZv
aWQpDQogICAgK3sNCiAgICArCWludCByZXM7DQogICAgKw0KICAgICsJc2F2ZV9hbmRfZXhpdCA9
IDE7DQogICAgKwlyZXNldF9zdWJ0aXRsZSgpOw0KICAgICsJZGlhbG9nX2NsZWFyKCk7DQogICAg
KwlpZiAoY29uZl9nZXRfY2hhbmdlZCgpKQ0KICAgICsJCXJlcyA9IGRpYWxvZ195ZXNubyhOVUxM
LA0KICAgICsJCQkJICAgIkRvIHlvdSB3aXNoIHRvIHNhdmUgeW91ciBuZXcgY29uZmlndXJhdGlv
bj9cbiINCiAgICArCQkJCSAgICAgIihQcmVzcyA8RVNDPjxFU0M+IHRvIGNvbnRpbnVlIFVuaWty
YWZ0IGNvbmZpZ3VyYXRpb24uKSIsDQogICAgKwkJCQkgICA2LCA2MCk7DQogICAgKwllbHNlDQog
ICAgKwkJcmVzID0gLTE7DQogICAgKw0KICAgICsJZW5kX2RpYWxvZyhzYXZlZF94LCBzYXZlZF95
KTsNCiAgICArDQogICAgKwlzd2l0Y2ggKHJlcykgew0KICAgICsJY2FzZSAwOg0KICAgICsJCWlm
IChjb25mX3dyaXRlKGZpbGVuYW1lKSkgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIlxuXG4i
DQogICAgKwkJCQkJICAiRXJyb3Igd2hpbGUgd3JpdGluZyBvZiB0aGUgY29uZmlndXJhdGlvbi5c
biINCiAgICArCQkJCQkgICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJlIE5PVCBzYXZl
ZC4iDQogICAgKwkJCQkJICAiXG5cbiIpOw0KICAgICsJCQlyZXR1cm4gMTsNCiAgICArCQl9DQog
ICAgKwkJY29uZl93cml0ZV9hdXRvY29uZigwKTsNCiAgICArCQkvKiBmYWxsIHRocm91Z2ggKi8N
CiAgICArCWNhc2UgLTE6DQogICAgKwkJaWYgKCFzaWxlbnQpDQogICAgKwkJCXByaW50ZigiXG5c
biINCiAgICArCQkJCSAiKioqIEVuZCBvZiB0aGUgY29uZmlndXJhdGlvbi5cbiINCiAgICArCQkJ
CSAiKioqIEV4ZWN1dGUgJ21ha2UnIHRvIHN0YXJ0IHRoZSBidWlsZCBvciB0cnkgJ21ha2UgaGVs
cCcuIg0KICAgICsJCQkJICJcblxuIik7DQogICAgKwkJcmVzID0gMDsNCiAgICArCQlicmVhazsN
CiAgICArCWRlZmF1bHQ6DQogICAgKwkJaWYgKCFzaWxlbnQpDQogICAgKwkJCWZwcmludGYoc3Rk
ZXJyLCAiXG5cbiINCiAgICArCQkJCQkgICJZb3VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyB3ZXJl
IE5PVCBzYXZlZC4iDQogICAgKwkJCQkJICAiXG5cbiIpOw0KICAgICsJCWlmIChyZXMgIT0gS0VZ
X0VTQykNCiAgICArCQkJcmVzID0gMDsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gcmVz
Ow0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBzaWdfaGFuZGxlcihpbnQgc2lnbm8p
DQogICAgK3sNCiAgICArCWV4aXQoaGFuZGxlX2V4aXQoKSk7DQogICAgK30NCiAgICArDQogICAg
K2ludCBtYWluKGludCBhYywgY2hhciAqKmF2KQ0KICAgICt7DQogICAgKwljaGFyICptb2RlOw0K
ICAgICsJaW50IHJlczsNCiAgICArDQogICAgKwlzaWduYWwoU0lHSU5ULCBzaWdfaGFuZGxlcik7
DQogICAgKw0KICAgICsJaWYgKGFjID4gMSAmJiBzdHJjbXAoYXZbMV0sICItcyIpID09IDApIHsN
CiAgICArCQlzaWxlbnQgPSAxOw0KICAgICsJCS8qIFNpbGVuY2UgY29uZl9yZWFkKCkgdW50aWwg
dGhlIHJlYWwgY2FsbGJhY2sgaXMgc2V0IHVwICovDQogICAgKwkJY29uZl9zZXRfbWVzc2FnZV9j
YWxsYmFjayhOVUxMKTsNCiAgICArCQlhdisrOw0KICAgICsJfQ0KICAgICsJY29uZl9wYXJzZShh
dlsxXSk7DQogICAgKwljb25mX3JlYWQoTlVMTCk7DQogICAgKw0KICAgICsJbW9kZSA9IGdldGVu
digiTUVOVUNPTkZJR19NT0RFIik7DQogICAgKwlpZiAobW9kZSkgew0KICAgICsJCWlmICghc3Ry
Y2FzZWNtcChtb2RlLCAic2luZ2xlX21lbnUiKSkNCiAgICArCQkJc2luZ2xlX21lbnVfbW9kZSA9
IDE7DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKGluaXRfZGlhbG9nKE5VTEwpKSB7DQogICAg
KwkJZnByaW50ZihzdGRlcnIsICJZb3VyIGRpc3BsYXkgaXMgdG9vIHNtYWxsIHRvIHJ1biBNZW51
Y29uZmlnIVxuIik7DQogICAgKwkJZnByaW50ZihzdGRlcnIsICJJdCBtdXN0IGJlIGF0IGxlYXN0
IDE5IGxpbmVzIGJ5IDgwIGNvbHVtbnMuXG4iKTsNCiAgICArCQlyZXR1cm4gMTsNCiAgICArCX0N
CiAgICArDQogICAgKwlzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSk7
DQogICAgKwljb25mX3NldF9tZXNzYWdlX2NhbGxiYWNrKGNvbmZfbWVzc2FnZV9jYWxsYmFjayk7
DQogICAgKwlkbyB7DQogICAgKwkJY29uZigmcm9vdG1lbnUsIE5VTEwpOw0KICAgICsJCXJlcyA9
IGhhbmRsZV9leGl0KCk7DQogICAgKwl9IHdoaWxlIChyZXMgPT0gS0VZX0VTQyk7DQogICAgKw0K
ICAgICsJcmV0dXJuIHJlczsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcvbWVudS5jIGIvc3VwcG9ydC9rY29uZmlnL21lbnUuYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAw
NjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZDlkMTY0Ng0KICAgIC0tLSAvZGV2L251bGwNCiAgICAr
KysgYi9zdXBwb3J0L2tjb25maWcvbWVudS5jDQogICAgQEAgLTAsMCArMSw4NjcgQEANCiAgICAr
Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArLyoNCiAgICArICogQ29w
eXJpZ2h0IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAg
ICsgKi8NCiAgICArDQogICAgKyNpbmNsdWRlIDxjdHlwZS5oPg0KICAgICsjaW5jbHVkZSA8c3Rk
YXJnLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmluZy5o
Pg0KICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsNCiAgICArc3RhdGljIGNvbnN0
IGNoYXIgbm9oZWxwX3RleHRbXSA9ICJUaGVyZSBpcyBubyBoZWxwIGF2YWlsYWJsZSBmb3IgdGhp
cyBvcHRpb24uIjsNCiAgICArDQogICAgK3N0cnVjdCBtZW51IHJvb3RtZW51Ow0KICAgICtzdGF0
aWMgc3RydWN0IG1lbnUgKipsYXN0X2VudHJ5X3B0cjsNCiAgICArDQogICAgK3N0cnVjdCBmaWxl
ICpmaWxlX2xpc3Q7DQogICAgK3N0cnVjdCBmaWxlICpjdXJyZW50X2ZpbGU7DQogICAgKw0KICAg
ICt2b2lkIG1lbnVfd2FybihzdHJ1Y3QgbWVudSAqbWVudSwgY29uc3QgY2hhciAqZm10LCAuLi4p
DQogICAgK3sNCiAgICArCXZhX2xpc3QgYXA7DQogICAgKwl2YV9zdGFydChhcCwgZm10KTsNCiAg
ICArCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6d2FybmluZzogIiwgbWVudS0+ZmlsZS0+bmFtZSwg
bWVudS0+bGluZW5vKTsNCiAgICArCXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7DQogICAgKwlm
cHJpbnRmKHN0ZGVyciwgIlxuIik7DQogICAgKwl2YV9lbmQoYXApOw0KICAgICt9DQogICAgKw0K
ICAgICtzdGF0aWMgdm9pZCBwcm9wX3dhcm4oc3RydWN0IHByb3BlcnR5ICpwcm9wLCBjb25zdCBj
aGFyICpmbXQsIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBhcDsNCiAgICArCXZhX3N0YXJ0
KGFwLCBmbXQpOw0KICAgICsJZnByaW50ZihzdGRlcnIsICIlczolZDp3YXJuaW5nOiAiLCBwcm9w
LT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8pOw0KICAgICsJdmZwcmludGYoc3RkZXJyLCBmbXQs
IGFwKTsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiXG4iKTsNCiAgICArCXZhX2VuZChhcCk7DQog
ICAgK30NCiAgICArDQogICAgK3ZvaWQgX21lbnVfaW5pdCh2b2lkKQ0KICAgICt7DQogICAgKwlj
dXJyZW50X2VudHJ5ID0gY3VycmVudF9tZW51ID0gJnJvb3RtZW51Ow0KICAgICsJbGFzdF9lbnRy
eV9wdHIgPSAmcm9vdG1lbnUubGlzdDsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBtZW51X2Fk
ZF9lbnRyeShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBtZW51ICpt
ZW51Ow0KICAgICsNCiAgICArCW1lbnUgPSB4bWFsbG9jKHNpemVvZigqbWVudSkpOw0KICAgICsJ
bWVtc2V0KG1lbnUsIDAsIHNpemVvZigqbWVudSkpOw0KICAgICsJbWVudS0+c3ltID0gc3ltOw0K
ICAgICsJbWVudS0+cGFyZW50ID0gY3VycmVudF9tZW51Ow0KICAgICsJbWVudS0+ZmlsZSA9IGN1
cnJlbnRfZmlsZTsNCiAgICArCW1lbnUtPmxpbmVubyA9IHpjb25mX2xpbmVubygpOw0KICAgICsN
CiAgICArCSpsYXN0X2VudHJ5X3B0ciA9IG1lbnU7DQogICAgKwlsYXN0X2VudHJ5X3B0ciA9ICZt
ZW51LT5uZXh0Ow0KICAgICsJY3VycmVudF9lbnRyeSA9IG1lbnU7DQogICAgKwlpZiAoc3ltKQ0K
ICAgICsJCW1lbnVfYWRkX3N5bWJvbChQX1NZTUJPTCwgc3ltLCBOVUxMKTsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RydWN0IG1lbnUgKm1lbnVfYWRkX21lbnUodm9pZCkNCiAgICArew0KICAgICsJ
bGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9lbnRyeS0+bGlzdDsNCiAgICArCXJldHVybiBjdXJy
ZW50X21lbnUgPSBjdXJyZW50X2VudHJ5Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVf
ZW5kX21lbnUodm9pZCkNCiAgICArew0KICAgICsJbGFzdF9lbnRyeV9wdHIgPSAmY3VycmVudF9t
ZW51LT5uZXh0Ow0KICAgICsJY3VycmVudF9tZW51ID0gY3VycmVudF9tZW51LT5wYXJlbnQ7DQog
ICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIFJld3JpdGVzICdtJyB0byAnbScgJiYgTU9E
VUxFUywgc28gdGhhdCBpdCBldmFsdWF0ZXMgdG8gJ24nIHdoZW4gcnVubmluZw0KICAgICsgKiB3
aXRob3V0IG1vZHVsZXMNCiAgICArICovDQogICAgK3N0YXRpYyBzdHJ1Y3QgZXhwciAqcmV3cml0
ZV9tKHN0cnVjdCBleHByICplKQ0KICAgICt7DQogICAgKwlpZiAoIWUpDQogICAgKwkJcmV0dXJu
IGU7DQogICAgKw0KICAgICsJc3dpdGNoIChlLT50eXBlKSB7DQogICAgKwljYXNlIEVfTk9UOg0K
ICAgICsJCWUtPmxlZnQuZXhwciA9IHJld3JpdGVfbShlLT5sZWZ0LmV4cHIpOw0KICAgICsJCWJy
ZWFrOw0KICAgICsJY2FzZSBFX09SOg0KICAgICsJY2FzZSBFX0FORDoNCiAgICArCQllLT5sZWZ0
LmV4cHIgPSByZXdyaXRlX20oZS0+bGVmdC5leHByKTsNCiAgICArCQllLT5yaWdodC5leHByID0g
cmV3cml0ZV9tKGUtPnJpZ2h0LmV4cHIpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBFX1NZ
TUJPTDoNCiAgICArCQkvKiBjaGFuZ2UgJ20nIGludG8gJ20nICYmIE1PRFVMRVMgKi8NCiAgICAr
CQlpZiAoZS0+bGVmdC5zeW0gPT0gJnN5bWJvbF9tb2QpDQogICAgKwkJCXJldHVybiBleHByX2Fs
bG9jX2FuZChlLCBleHByX2FsbG9jX3N5bWJvbChtb2R1bGVzX3N5bSkpOw0KICAgICsJCWJyZWFr
Ow0KICAgICsJZGVmYXVsdDoNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArCXJldHVybiBl
Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX2RlcChzdHJ1Y3QgZXhwciAqZGVw
KQ0KICAgICt7DQogICAgKwljdXJyZW50X2VudHJ5LT5kZXAgPSBleHByX2FsbG9jX2FuZChjdXJy
ZW50X2VudHJ5LT5kZXAsIGRlcCk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgbWVudV9zZXRf
dHlwZShpbnQgdHlwZSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltID0gY3VycmVu
dF9lbnRyeS0+c3ltOw0KICAgICsNCiAgICArCWlmIChzeW0tPnR5cGUgPT0gdHlwZSkNCiAgICAr
CQlyZXR1cm47DQogICAgKwlpZiAoc3ltLT50eXBlID09IFNfVU5LTk9XTikgew0KICAgICsJCXN5
bS0+dHlwZSA9IHR5cGU7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsJbWVudV93YXJu
KGN1cnJlbnRfZW50cnksDQogICAgKwkJImlnbm9yaW5nIHR5cGUgcmVkZWZpbml0aW9uIG9mICcl
cycgZnJvbSAnJXMnIHRvICclcyciLA0KICAgICsJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8
Y2hvaWNlPiIsDQogICAgKwkJc3ltX3R5cGVfbmFtZShzeW0tPnR5cGUpLCBzeW1fdHlwZV9uYW1l
KHR5cGUpKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqbWVu
dV9hZGRfcHJvcChlbnVtIHByb3BfdHlwZSB0eXBlLCBjaGFyICpwcm9tcHQsIHN0cnVjdCBleHBy
ICpleHByLCBzdHJ1Y3QgZXhwciAqZGVwKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkg
KnByb3AgPSBwcm9wX2FsbG9jKHR5cGUsIGN1cnJlbnRfZW50cnktPnN5bSk7DQogICAgKw0KICAg
ICsJcHJvcC0+bWVudSA9IGN1cnJlbnRfZW50cnk7DQogICAgKwlwcm9wLT5leHByID0gZXhwcjsN
CiAgICArCXByb3AtPnZpc2libGUuZXhwciA9IGRlcDsNCiAgICArDQogICAgKwlpZiAocHJvbXB0
KSB7DQogICAgKwkJaWYgKGlzc3BhY2UoKnByb21wdCkpIHsNCiAgICArCQkJcHJvcF93YXJuKHBy
b3AsICJsZWFkaW5nIHdoaXRlc3BhY2UgaWdub3JlZCIpOw0KICAgICsJCQl3aGlsZSAoaXNzcGFj
ZSgqcHJvbXB0KSkNCiAgICArCQkJCXByb21wdCsrOw0KICAgICsJCX0NCiAgICArCQlpZiAoY3Vy
cmVudF9lbnRyeS0+cHJvbXB0ICYmIGN1cnJlbnRfZW50cnkgIT0gJnJvb3RtZW51KQ0KICAgICsJ
CQlwcm9wX3dhcm4ocHJvcCwgInByb21wdCByZWRlZmluZWQiKTsNCiAgICArDQogICAgKwkJLyog
QXBwbHkgYWxsIHVwcGVyIG1lbnVzJyB2aXNpYmlsaXRpZXMgdG8gYWN0dWFsIHByb21wdHMuICov
DQogICAgKwkJaWYodHlwZSA9PSBQX1BST01QVCkgew0KICAgICsJCQlzdHJ1Y3QgbWVudSAqbWVu
dSA9IGN1cnJlbnRfZW50cnk7DQogICAgKw0KICAgICsJCQl3aGlsZSAoKG1lbnUgPSBtZW51LT5w
YXJlbnQpICE9IE5VTEwpIHsNCiAgICArCQkJCXN0cnVjdCBleHByICpkdXBfZXhwcjsNCiAgICAr
DQogICAgKwkJCQlpZiAoIW1lbnUtPnZpc2liaWxpdHkpDQogICAgKwkJCQkJY29udGludWU7DQog
ICAgKwkJCQkvKg0KICAgICsJCQkJICogRG8gbm90IGFkZCBhIHJlZmVyZW5jZSB0byB0aGUNCiAg
ICArCQkJCSAqIG1lbnUncyB2aXNpYmlsaXR5IGV4cHJlc3Npb24gYnV0DQogICAgKwkJCQkgKiB1
c2UgYSBjb3B5IG9mIGl0LiAgT3RoZXJ3aXNlIHRoZQ0KICAgICsJCQkJICogZXhwcmVzc2lvbiBy
ZWR1Y3Rpb24gZnVuY3Rpb25zDQogICAgKwkJCQkgKiB3aWxsIG1vZGlmeSBleHByZXNzaW9ucyB0
aGF0IGhhdmUNCiAgICArCQkJCSAqIG11bHRpcGxlIHJlZmVyZW5jZXMgd2hpY2ggY2FuDQogICAg
KwkJCQkgKiBjYXVzZSB1bndhbnRlZCBzaWRlIGVmZmVjdHMuDQogICAgKwkJCQkgKi8NCiAgICAr
CQkJCWR1cF9leHByID0gZXhwcl9jb3B5KG1lbnUtPnZpc2liaWxpdHkpOw0KICAgICsNCiAgICAr
CQkJCXByb3AtPnZpc2libGUuZXhwcg0KICAgICsJCQkJCT0gZXhwcl9hbGxvY19hbmQocHJvcC0+
dmlzaWJsZS5leHByLA0KICAgICsJCQkJCQkJIGR1cF9leHByKTsNCiAgICArCQkJfQ0KICAgICsJ
CX0NCiAgICArDQogICAgKwkJY3VycmVudF9lbnRyeS0+cHJvbXB0ID0gcHJvcDsNCiAgICArCX0N
CiAgICArCXByb3AtPnRleHQgPSBwcm9tcHQ7DQogICAgKw0KICAgICsJcmV0dXJuIHByb3A7DQog
ICAgK30NCiAgICArDQogICAgK3N0cnVjdCBwcm9wZXJ0eSAqbWVudV9hZGRfcHJvbXB0KGVudW0g
cHJvcF90eXBlIHR5cGUsIGNoYXIgKnByb21wdCwgc3RydWN0IGV4cHIgKmRlcCkNCiAgICArew0K
ICAgICsJcmV0dXJuIG1lbnVfYWRkX3Byb3AodHlwZSwgcHJvbXB0LCBOVUxMLCBkZXApOw0KICAg
ICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX3Zpc2liaWxpdHkoc3RydWN0IGV4cHIgKmV4
cHIpDQogICAgK3sNCiAgICArCWN1cnJlbnRfZW50cnktPnZpc2liaWxpdHkgPSBleHByX2FsbG9j
X2FuZChjdXJyZW50X2VudHJ5LT52aXNpYmlsaXR5LA0KICAgICsJICAgIGV4cHIpOw0KICAgICt9
DQogICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX2V4cHIoZW51bSBwcm9wX3R5cGUgdHlwZSwgc3Ry
dWN0IGV4cHIgKmV4cHIsIHN0cnVjdCBleHByICpkZXApDQogICAgK3sNCiAgICArCW1lbnVfYWRk
X3Byb3AodHlwZSwgTlVMTCwgZXhwciwgZGVwKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBt
ZW51X2FkZF9zeW1ib2woZW51bSBwcm9wX3R5cGUgdHlwZSwgc3RydWN0IHN5bWJvbCAqc3ltLCBz
dHJ1Y3QgZXhwciAqZGVwKQ0KICAgICt7DQogICAgKwltZW51X2FkZF9wcm9wKHR5cGUsIE5VTEws
IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSksIGRlcCk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQg
bWVudV9hZGRfb3B0aW9uX21vZHVsZXModm9pZCkNCiAgICArew0KICAgICsJaWYgKG1vZHVsZXNf
c3ltKQ0KICAgICsJCXpjb25mX2Vycm9yKCJzeW1ib2wgJyVzJyByZWRlZmluZXMgb3B0aW9uICdt
b2R1bGVzJyBhbHJlYWR5IGRlZmluZWQgYnkgc3ltYm9sICclcyciLA0KICAgICsJCQkgICAgY3Vy
cmVudF9lbnRyeS0+c3ltLT5uYW1lLCBtb2R1bGVzX3N5bS0+bmFtZSk7DQogICAgKwltb2R1bGVz
X3N5bSA9IGN1cnJlbnRfZW50cnktPnN5bTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBtZW51
X2FkZF9vcHRpb25fZGVmY29uZmlnX2xpc3Qodm9pZCkNCiAgICArew0KICAgICsJaWYgKCFzeW1f
ZGVmY29uZmlnX2xpc3QpDQogICAgKwkJc3ltX2RlZmNvbmZpZ19saXN0ID0gY3VycmVudF9lbnRy
eS0+c3ltOw0KICAgICsJZWxzZSBpZiAoc3ltX2RlZmNvbmZpZ19saXN0ICE9IGN1cnJlbnRfZW50
cnktPnN5bSkNCiAgICArCQl6Y29uZl9lcnJvcigidHJ5aW5nIHRvIHJlZGVmaW5lIGRlZmNvbmZp
ZyBzeW1ib2wiKTsNCiAgICArCXN5bV9kZWZjb25maWdfbGlzdC0+ZmxhZ3MgfD0gU1lNQk9MX05P
X1dSSVRFOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfYWRkX29wdGlvbl9hbGxub2Nv
bmZpZ195KHZvaWQpDQogICAgK3sNCiAgICArCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0g
U1lNQk9MX0FMTE5PQ09ORklHX1k7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbnQgbWVu
dV92YWxpZGF0ZV9udW1iZXIoc3RydWN0IHN5bWJvbCAqc3ltLCBzdHJ1Y3Qgc3ltYm9sICpzeW0y
KQ0KICAgICt7DQogICAgKwlyZXR1cm4gc3ltMi0+dHlwZSA9PSBTX0lOVCB8fCBzeW0yLT50eXBl
ID09IFNfSEVYIHx8DQogICAgKwkgICAgICAgKHN5bTItPnR5cGUgPT0gU19VTktOT1dOICYmIHN5
bV9zdHJpbmdfdmFsaWQoc3ltLCBzeW0yLT5uYW1lKSk7DQogICAgK30NCiAgICArDQogICAgK3N0
YXRpYyB2b2lkIHN5bV9jaGVja19wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAg
ICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltMjsNCiAg
ICArCWNoYXIgKnVzZTsNCiAgICArDQogICAgKwlmb3IgKHByb3AgPSBzeW0tPnByb3A7IHByb3A7
IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJc3dpdGNoIChwcm9wLT50eXBlKSB7DQogICAg
KwkJY2FzZSBQX0RFRkFVTFQ6DQogICAgKwkJCWlmICgoc3ltLT50eXBlID09IFNfU1RSSU5HIHx8
IHN5bS0+dHlwZSA9PSBTX0lOVCB8fCBzeW0tPnR5cGUgPT0gU19IRVgpICYmDQogICAgKwkJCSAg
ICBwcm9wLT5leHByLT50eXBlICE9IEVfU1lNQk9MKQ0KICAgICsJCQkJcHJvcF93YXJuKHByb3As
DQogICAgKwkJCQkgICAgImRlZmF1bHQgZm9yIGNvbmZpZyBzeW1ib2wgJyVzJyINCiAgICArCQkJ
CSAgICAiIG11c3QgYmUgYSBzaW5nbGUgc3ltYm9sIiwgc3ltLT5uYW1lKTsNCiAgICArCQkJaWYg
KHByb3AtPmV4cHItPnR5cGUgIT0gRV9TWU1CT0wpDQogICAgKwkJCQlicmVhazsNCiAgICArCQkJ
c3ltMiA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsNCiAgICArCQkJaWYgKHN5bS0+dHlwZSA9PSBT
X0hFWCB8fCBzeW0tPnR5cGUgPT0gU19JTlQpIHsNCiAgICArCQkJCWlmICghbWVudV92YWxpZGF0
ZV9udW1iZXIoc3ltLCBzeW0yKSkNCiAgICArCQkJCQlwcm9wX3dhcm4ocHJvcCwNCiAgICArCQkJ
CQkgICAgIiclcyc6IG51bWJlciBpcyBpbnZhbGlkIiwNCiAgICArCQkJCQkgICAgc3ltLT5uYW1l
KTsNCiAgICArCQkJfQ0KICAgICsJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJ
CQlzdHJ1Y3QgcHJvcGVydHkgKmNob2ljZV9wcm9wID0NCiAgICArCQkJCQlzeW1fZ2V0X2Nob2lj
ZV9wcm9wKHN5bTIpOw0KICAgICsNCiAgICArCQkJCWlmICghY2hvaWNlX3Byb3AgfHwNCiAgICAr
CQkJCSAgICBwcm9wX2dldF9zeW1ib2woY2hvaWNlX3Byb3ApICE9IHN5bSkNCiAgICArCQkJCQlw
cm9wX3dhcm4ocHJvcCwNCiAgICArCQkJCQkJICAiY2hvaWNlIGRlZmF1bHQgc3ltYm9sICclcycg
aXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgY2hvaWNlIiwNCiAgICArCQkJCQkJICBzeW0yLT5uYW1l
KTsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfU0VMRUNUOg0KICAg
ICsJCWNhc2UgUF9JTVBMWToNCiAgICArCQkJdXNlID0gcHJvcC0+dHlwZSA9PSBQX1NFTEVDVCA/
ICJzZWxlY3QiIDogImltcGx5IjsNCiAgICArCQkJc3ltMiA9IHByb3BfZ2V0X3N5bWJvbChwcm9w
KTsNCiAgICArCQkJaWYgKHN5bS0+dHlwZSAhPSBTX0JPT0xFQU4gJiYgc3ltLT50eXBlICE9IFNf
VFJJU1RBVEUpDQogICAgKwkJCQlwcm9wX3dhcm4ocHJvcCwNCiAgICArCQkJCSAgICAiY29uZmln
IHN5bWJvbCAnJXMnIHVzZXMgJXMsIGJ1dCBpcyAiDQogICAgKwkJCQkgICAgIm5vdCBib29sIG9y
IHRyaXN0YXRlIiwgc3ltLT5uYW1lLCB1c2UpOw0KICAgICsJCQllbHNlIGlmIChzeW0yLT50eXBl
ICE9IFNfVU5LTk9XTiAmJg0KICAgICsJCQkJIHN5bTItPnR5cGUgIT0gU19CT09MRUFOICYmDQog
ICAgKwkJCQkgc3ltMi0+dHlwZSAhPSBTX1RSSVNUQVRFKQ0KICAgICsJCQkJcHJvcF93YXJuKHBy
b3AsDQogICAgKwkJCQkgICAgIiclcycgaGFzIHdyb25nIHR5cGUuICclcycgb25seSAiDQogICAg
KwkJCQkgICAgImFjY2VwdCBhcmd1bWVudHMgb2YgYm9vbCBhbmQgIg0KICAgICsJCQkJICAgICJ0
cmlzdGF0ZSB0eXBlIiwgc3ltMi0+bmFtZSwgdXNlKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
Y2FzZSBQX1JBTkdFOg0KICAgICsJCQlpZiAoc3ltLT50eXBlICE9IFNfSU5UICYmIHN5bS0+dHlw
ZSAhPSBTX0hFWCkNCiAgICArCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgb25seSBhbGxv
d2VkICINCiAgICArCQkJCQkJImZvciBpbnQgb3IgaGV4IHN5bWJvbHMiKTsNCiAgICArCQkJaWYg
KCFtZW51X3ZhbGlkYXRlX251bWJlcihzeW0sIHByb3AtPmV4cHItPmxlZnQuc3ltKSB8fA0KICAg
ICsJCQkgICAgIW1lbnVfdmFsaWRhdGVfbnVtYmVyKHN5bSwgcHJvcC0+ZXhwci0+cmlnaHQuc3lt
KSkNCiAgICArCQkJCXByb3Bfd2Fybihwcm9wLCAicmFuZ2UgaXMgaW52YWxpZCIpOw0KICAgICsJ
CQlicmVhazsNCiAgICArCQlkZWZhdWx0Og0KICAgICsJCQk7DQogICAgKwkJfQ0KICAgICsJfQ0K
ICAgICt9DQogICAgKw0KICAgICt2b2lkIG1lbnVfZmluYWxpemUoc3RydWN0IG1lbnUgKnBhcmVu
dCkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKm1lbnUsICpsYXN0X21lbnU7DQogICAgKwlz
dHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlz
dHJ1Y3QgZXhwciAqcGFyZW50ZGVwLCAqYmFzZWRlcCwgKmRlcCwgKmRlcDIsICoqZXA7DQogICAg
Kw0KICAgICsJc3ltID0gcGFyZW50LT5zeW07DQogICAgKwlpZiAocGFyZW50LT5saXN0KSB7DQog
ICAgKwkJLyoNCiAgICArCQkgKiBUaGlzIG1lbnUgbm9kZSBoYXMgY2hpbGRyZW4uIFdlIChyZWN1
cnNpdmVseSkgcHJvY2VzcyB0aGVtDQogICAgKwkJICogYW5kIHByb3BhZ2F0ZSBwYXJlbnQgZGVw
ZW5kZW5jaWVzIGJlZm9yZSBtb3Zpbmcgb24uDQogICAgKwkJICovDQogICAgKw0KICAgICsJCWlm
IChzeW0gJiYgc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJCWlmIChzeW0tPnR5cGUgPT0g
U19VTktOT1dOKSB7DQogICAgKwkJCQkvKiBmaW5kIHRoZSBmaXJzdCBjaG9pY2UgdmFsdWUgdG8g
ZmluZCBvdXQgY2hvaWNlIHR5cGUgKi8NCiAgICArCQkJCWN1cnJlbnRfZW50cnkgPSBwYXJlbnQ7
DQogICAgKwkJCQlmb3IgKG1lbnUgPSBwYXJlbnQtPmxpc3Q7IG1lbnU7IG1lbnUgPSBtZW51LT5u
ZXh0KSB7DQogICAgKwkJCQkJaWYgKG1lbnUtPnN5bSAmJiBtZW51LT5zeW0tPnR5cGUgIT0gU19V
TktOT1dOKSB7DQogICAgKwkJCQkJCW1lbnVfc2V0X3R5cGUobWVudS0+c3ltLT50eXBlKTsNCiAg
ICArCQkJCQkJYnJlYWs7DQogICAgKwkJCQkJfQ0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAg
KwkJCS8qIHNldCB0aGUgdHlwZSBvZiB0aGUgcmVtYWluaW5nIGNob2ljZSB2YWx1ZXMgKi8NCiAg
ICArCQkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+bmV4dCkg
ew0KICAgICsJCQkJY3VycmVudF9lbnRyeSA9IG1lbnU7DQogICAgKwkJCQlpZiAobWVudS0+c3lt
ICYmIG1lbnUtPnN5bS0+dHlwZSA9PSBTX1VOS05PV04pDQogICAgKwkJCQkJbWVudV9zZXRfdHlw
ZShzeW0tPnR5cGUpOw0KICAgICsJCQl9DQogICAgKw0KICAgICsJCQkvKg0KICAgICsJCQkgKiBV
c2UgdGhlIGNob2ljZSBpdHNlbGYgYXMgdGhlIHBhcmVudCBkZXBlbmRlbmN5IG9mDQogICAgKwkJ
CSAqIHRoZSBjb250YWluZWQgaXRlbXMuIFRoaXMgdHVybnMgdGhlIG1vZGUgb2YgdGhlDQogICAg
KwkJCSAqIGNob2ljZSBpbnRvIGFuIHVwcGVyIGJvdW5kIG9uIHRoZSB2aXNpYmlsaXR5IG9mIHRo
ZQ0KICAgICsJCQkgKiBjaG9pY2UgdmFsdWUgc3ltYm9scy4NCiAgICArCQkJICovDQogICAgKwkJ
CXBhcmVudGRlcCA9IGV4cHJfYWxsb2Nfc3ltYm9sKHN5bSk7DQogICAgKwkJfSBlbHNlIGlmIChw
YXJlbnQtPnByb21wdCkNCiAgICArCQkJLyogTWVudSBub2RlIGZvciAnbWVudScgKi8NCiAgICAr
CQkJcGFyZW50ZGVwID0gcGFyZW50LT5wcm9tcHQtPnZpc2libGUuZXhwcjsNCiAgICArCQllbHNl
DQogICAgKwkJCS8qIE1lbnUgbm9kZSBmb3IgJ2lmJyAqLw0KICAgICsJCQlwYXJlbnRkZXAgPSBw
YXJlbnQtPmRlcDsNCiAgICArDQogICAgKwkJLyogRm9yIGVhY2ggY2hpbGQgbWVudSBub2RlLi4u
ICovDQogICAgKwkJZm9yIChtZW51ID0gcGFyZW50LT5saXN0OyBtZW51OyBtZW51ID0gbWVudS0+
bmV4dCkgew0KICAgICsJCQkvKg0KICAgICsJCQkgKiBQcm9wYWdhdGUgcGFyZW50IGRlcGVuZGVu
Y2llcyB0byB0aGUgY2hpbGQgbWVudQ0KICAgICsJCQkgKiBub2RlLCBhbHNvIHJld3JpdGluZyBh
bmQgc2ltcGxpZnlpbmcgZXhwcmVzc2lvbnMNCiAgICArCQkJICovDQogICAgKwkJCWJhc2VkZXAg
PSByZXdyaXRlX20obWVudS0+ZGVwKTsNCiAgICArCQkJYmFzZWRlcCA9IGV4cHJfdHJhbnNmb3Jt
KGJhc2VkZXApOw0KICAgICsJCQliYXNlZGVwID0gZXhwcl9hbGxvY19hbmQoZXhwcl9jb3B5KHBh
cmVudGRlcCksIGJhc2VkZXApOw0KICAgICsJCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVw
cyhiYXNlZGVwKTsNCiAgICArCQkJbWVudS0+ZGVwID0gYmFzZWRlcDsNCiAgICArDQogICAgKwkJ
CWlmIChtZW51LT5zeW0pDQogICAgKwkJCQkvKg0KICAgICsJCQkJICogTm90ZTogRm9yIHN5bWJv
bHMsIGFsbCBwcm9tcHRzIGFyZSBpbmNsdWRlZA0KICAgICsJCQkJICogdG9vIGluIHRoZSBzeW1i
b2wncyBvd24gcHJvcGVydHkgbGlzdA0KICAgICsJCQkJICovDQogICAgKwkJCQlwcm9wID0gbWVu
dS0+c3ltLT5wcm9wOw0KICAgICsJCQllbHNlDQogICAgKwkJCQkvKg0KICAgICsJCQkJICogRm9y
IG5vbi1zeW1ib2wgbWVudSBub2Rlcywgd2UganVzdCBuZWVkIHRvDQogICAgKwkJCQkgKiBoYW5k
bGUgdGhlIHByb21wdA0KICAgICsJCQkJICovDQogICAgKwkJCQlwcm9wID0gbWVudS0+cHJvbXB0
Ow0KICAgICsNCiAgICArCQkJLyogRm9yIGVhY2ggcHJvcGVydHkuLi4gKi8NCiAgICArCQkJZm9y
ICg7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJCQlpZiAocHJvcC0+bWVudSAh
PSBtZW51KQ0KICAgICsJCQkJCS8qDQogICAgKwkJCQkJICogVHdvIHBvc3NpYmlsaXRpZXM6DQog
ICAgKwkJCQkJICoNCiAgICArCQkJCQkgKiAxLiBUaGUgcHJvcGVydHkgbGFja3MgZGVwZW5kZW5j
aWVzDQogICAgKwkJCQkJICogICAgYW5kIHNvIGlzbid0IGxvY2F0aW9uLXNwZWNpZmljLA0KICAg
ICsJCQkJCSAqICAgIGUuZy4gYW4gJ29wdGlvbicNCiAgICArCQkJCQkgKg0KICAgICsJCQkJCSAq
IDIuIFRoZSBwcm9wZXJ0eSBiZWxvbmdzIHRvIGEgc3ltYm9sDQogICAgKwkJCQkJICogICAgZGVm
aW5lZCBpbiBtdWx0aXBsZSBsb2NhdGlvbnMgYW5kDQogICAgKwkJCQkJICogICAgaXMgZnJvbSBz
b21lIG90aGVyIGxvY2F0aW9uLiBJdA0KICAgICsJCQkJCSAqICAgIHdpbGwgYmUgaGFuZGxlZCB0
aGVyZSBpbiB0aGF0DQogICAgKwkJCQkJICogICAgY2FzZS4NCiAgICArCQkJCQkgKg0KICAgICsJ
CQkJCSAqIFNraXAgdGhlIHByb3BlcnR5Lg0KICAgICsJCQkJCSAqLw0KICAgICsJCQkJCWNvbnRp
bnVlOw0KICAgICsNCiAgICArCQkJCS8qDQogICAgKwkJCQkgKiBQcm9wYWdhdGUgcGFyZW50IGRl
cGVuZGVuY2llcyB0byB0aGUNCiAgICArCQkJCSAqIHByb3BlcnR5J3MgY29uZGl0aW9uLCByZXdy
aXRpbmcgYW5kDQogICAgKwkJCQkgKiBzaW1wbGlmeWluZyBleHByZXNzaW9ucyBhdCB0aGUgc2Ft
ZSB0aW1lDQogICAgKwkJCQkgKi8NCiAgICArCQkJCWRlcCA9IHJld3JpdGVfbShwcm9wLT52aXNp
YmxlLmV4cHIpOw0KICAgICsJCQkJZGVwID0gZXhwcl90cmFuc2Zvcm0oZGVwKTsNCiAgICArCQkJ
CWRlcCA9IGV4cHJfYWxsb2NfYW5kKGV4cHJfY29weShiYXNlZGVwKSwgZGVwKTsNCiAgICArCQkJ
CWRlcCA9IGV4cHJfZWxpbWluYXRlX2R1cHMoZGVwKTsNCiAgICArCQkJCWlmIChtZW51LT5zeW0g
JiYgbWVudS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpDQogICAgKwkJCQkJZGVwID0gZXhwcl90
cmFuc19ib29sKGRlcCk7DQogICAgKwkJCQlwcm9wLT52aXNpYmxlLmV4cHIgPSBkZXA7DQogICAg
Kw0KICAgICsJCQkJLyoNCiAgICArCQkJCSAqIEhhbmRsZSBzZWxlY3RzIGFuZCBpbXBsaWVzLCB3
aGljaCBtb2RpZnkgdGhlDQogICAgKwkJCQkgKiBkZXBlbmRlbmNpZXMgb2YgdGhlIHNlbGVjdGVk
L2ltcGxpZWQgc3ltYm9sDQogICAgKwkJCQkgKi8NCiAgICArCQkJCWlmIChwcm9wLT50eXBlID09
IFBfU0VMRUNUKSB7DQogICAgKwkJCQkJc3RydWN0IHN5bWJvbCAqZXMgPSBwcm9wX2dldF9zeW1i
b2wocHJvcCk7DQogICAgKwkJCQkJZXMtPnJldl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3IoZXMt
PnJldl9kZXAuZXhwciwNCiAgICArCQkJCQkJCWV4cHJfYWxsb2NfYW5kKGV4cHJfYWxsb2Nfc3lt
Ym9sKG1lbnUtPnN5bSksIGV4cHJfY29weShkZXApKSk7DQogICAgKwkJCQl9IGVsc2UgaWYgKHBy
b3AtPnR5cGUgPT0gUF9JTVBMWSkgew0KICAgICsJCQkJCXN0cnVjdCBzeW1ib2wgKmVzID0gcHJv
cF9nZXRfc3ltYm9sKHByb3ApOw0KICAgICsJCQkJCWVzLT5pbXBsaWVkLmV4cHIgPSBleHByX2Fs
bG9jX29yKGVzLT5pbXBsaWVkLmV4cHIsDQogICAgKwkJCQkJCQlleHByX2FsbG9jX2FuZChleHBy
X2FsbG9jX3N5bWJvbChtZW51LT5zeW0pLCBleHByX2NvcHkoZGVwKSkpOw0KICAgICsJCQkJfQ0K
ICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlpZiAoc3ltICYmIHN5bV9pc19jaG9p
Y2Uoc3ltKSkNCiAgICArCQkJZXhwcl9mcmVlKHBhcmVudGRlcCk7DQogICAgKw0KICAgICsJCS8q
DQogICAgKwkJICogUmVjdXJzaXZlbHkgcHJvY2VzcyBjaGlsZHJlbiBpbiB0aGUgc2FtZSBmYXNo
aW9uIGJlZm9yZQ0KICAgICsJCSAqIG1vdmluZyBvbg0KICAgICsJCSAqLw0KICAgICsJCWZvciAo
bWVudSA9IHBhcmVudC0+bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpDQogICAgKwkJCW1l
bnVfZmluYWxpemUobWVudSk7DQogICAgKwl9IGVsc2UgaWYgKHN5bSkgew0KICAgICsJCS8qDQog
ICAgKwkJICogQXV0b21hdGljIHN1Ym1lbnUgY3JlYXRpb24uIElmIHN5bSBpcyBhIHN5bWJvbCBh
bmQgQSwgQiwgQywNCiAgICArCQkgKiAuLi4gYXJlIGNvbnNlY3V0aXZlIGl0ZW1zIChzeW1ib2xz
LCBtZW51cywgaWZzLCBldGMuKSB0aGF0DQogICAgKwkJICogYWxsIGRlcGVuZCBvbiBzeW0sIHRo
ZW4gdGhlIGZvbGxvd2luZyBtZW51IHN0cnVjdHVyZSBpcw0KICAgICsJCSAqIGNyZWF0ZWQ6DQog
ICAgKwkJICoNCiAgICArCQkgKglzeW0NCiAgICArCQkgKgkgKy1BDQogICAgKwkJICoJICstQg0K
ICAgICsJCSAqCSArLUMNCiAgICArCQkgKgkgLi4uDQogICAgKwkJICoNCiAgICArCQkgKiBUaGlz
IGFsc28gd29ya3MgcmVjdXJzaXZlbHksIGdpdmluZyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZQ0K
ICAgICsJCSAqIGlmIEEgaXMgYSBzeW1ib2wgYW5kIEIgZGVwZW5kcyBvbiBBOg0KICAgICsJCSAq
DQogICAgKwkJICoJc3ltDQogICAgKwkJICoJICstQQ0KICAgICsJCSAqCSB8ICstQg0KICAgICsJ
CSAqCSArLUMNCiAgICArCQkgKgkgLi4uDQogICAgKwkJICovDQogICAgKw0KICAgICsJCWJhc2Vk
ZXAgPSBwYXJlbnQtPnByb21wdCA/IHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIgOiBOVUxM
Ow0KICAgICsJCWJhc2VkZXAgPSBleHByX3RyYW5zX2NvbXBhcmUoYmFzZWRlcCwgRV9VTkVRVUFM
LCAmc3ltYm9sX25vKTsNCiAgICArCQliYXNlZGVwID0gZXhwcl9lbGltaW5hdGVfZHVwcyhleHBy
X3RyYW5zZm9ybShiYXNlZGVwKSk7DQogICAgKw0KICAgICsJCS8qIEV4YW1pbmUgY29uc2VjdXRp
dmUgZWxlbWVudHMgYWZ0ZXIgc3ltICovDQogICAgKwkJbGFzdF9tZW51ID0gTlVMTDsNCiAgICAr
CQlmb3IgKG1lbnUgPSBwYXJlbnQtPm5leHQ7IG1lbnU7IG1lbnUgPSBtZW51LT5uZXh0KSB7DQog
ICAgKwkJCWRlcCA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dmlzaWJsZS5leHByIDog
bWVudS0+ZGVwOw0KICAgICsJCQlpZiAoIWV4cHJfY29udGFpbnNfc3ltYm9sKGRlcCwgc3ltKSkN
CiAgICArCQkJCS8qIE5vIGRlcGVuZGVuY3ksIHF1aXQgKi8NCiAgICArCQkJCWJyZWFrOw0KICAg
ICsJCQlpZiAoZXhwcl9kZXBlbmRzX3N5bWJvbChkZXAsIHN5bSkpDQogICAgKwkJCQkvKiBBYnNv
bHV0ZSBkZXBlbmRlbmN5LCBwdXQgaW4gc3VibWVudSAqLw0KICAgICsJCQkJZ290byBuZXh0Ow0K
ICAgICsNCiAgICArCQkJLyoNCiAgICArCQkJICogQWxzbyBjb25zaWRlciBpdCBhIGRlcGVuZGVu
Y3kgb24gc3ltIGlmIG91cg0KICAgICsJCQkgKiBkZXBlbmRlbmNpZXMgY29udGFpbiBzeW0gYW5k
IGFyZSBhICJzdXBlcnNldCIgb2YNCiAgICArCQkJICogc3ltJ3MgZGVwZW5kZW5jaWVzLCBlLmcu
ICcoc3ltIHx8IFEpICYmIFInIHdoZW4gc3ltDQogICAgKwkJCSAqIGRlcGVuZHMgb24gUi4NCiAg
ICArCQkJICoNCiAgICArCQkJICogTm90ZSB0aGF0ICdSJyBtaWdodCBiZSBmcm9tIGFuIGVuY2xv
c2luZyBtZW51IG9yIGlmLA0KICAgICsJCQkgKiBtYWtpbmcgdGhpcyBhIG1vcmUgY29tbW9uIGNh
c2UgdGhhbiBpdCBtaWdodCBzZWVtLg0KICAgICsJCQkgKi8NCiAgICArCQkJZGVwID0gZXhwcl90
cmFuc19jb21wYXJlKGRlcCwgRV9VTkVRVUFMLCAmc3ltYm9sX25vKTsNCiAgICArCQkJZGVwID0g
ZXhwcl9lbGltaW5hdGVfZHVwcyhleHByX3RyYW5zZm9ybShkZXApKTsNCiAgICArCQkJZGVwMiA9
IGV4cHJfY29weShiYXNlZGVwKTsNCiAgICArCQkJZXhwcl9lbGltaW5hdGVfZXEoJmRlcCwgJmRl
cDIpOw0KICAgICsJCQlleHByX2ZyZWUoZGVwKTsNCiAgICArCQkJaWYgKCFleHByX2lzX3llcyhk
ZXAyKSkgew0KICAgICsJCQkJLyogTm90IHN1cGVyc2V0LCBxdWl0ICovDQogICAgKwkJCQlleHBy
X2ZyZWUoZGVwMik7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCQkvKiBTdXBl
cnNldCwgcHV0IGluIHN1Ym1lbnUgKi8NCiAgICArCQkJZXhwcl9mcmVlKGRlcDIpOw0KICAgICsJ
CW5leHQ6DQogICAgKwkJCW1lbnVfZmluYWxpemUobWVudSk7DQogICAgKwkJCW1lbnUtPnBhcmVu
dCA9IHBhcmVudDsNCiAgICArCQkJbGFzdF9tZW51ID0gbWVudTsNCiAgICArCQl9DQogICAgKwkJ
ZXhwcl9mcmVlKGJhc2VkZXApOw0KICAgICsJCWlmIChsYXN0X21lbnUpIHsNCiAgICArCQkJcGFy
ZW50LT5saXN0ID0gcGFyZW50LT5uZXh0Ow0KICAgICsJCQlwYXJlbnQtPm5leHQgPSBsYXN0X21l
bnUtPm5leHQ7DQogICAgKwkJCWxhc3RfbWVudS0+bmV4dCA9IE5VTEw7DQogICAgKwkJfQ0KICAg
ICsNCiAgICArCQlzeW0tPmRpcl9kZXAuZXhwciA9IGV4cHJfYWxsb2Nfb3Ioc3ltLT5kaXJfZGVw
LmV4cHIsIHBhcmVudC0+ZGVwKTsNCiAgICArCX0NCiAgICArCWZvciAobWVudSA9IHBhcmVudC0+
bGlzdDsgbWVudTsgbWVudSA9IG1lbnUtPm5leHQpIHsNCiAgICArCQlpZiAoc3ltICYmIHN5bV9p
c19jaG9pY2Uoc3ltKSAmJg0KICAgICsJCSAgICBtZW51LT5zeW0gJiYgIXN5bV9pc19jaG9pY2Vf
dmFsdWUobWVudS0+c3ltKSkgew0KICAgICsJCQljdXJyZW50X2VudHJ5ID0gbWVudTsNCiAgICAr
CQkJbWVudS0+c3ltLT5mbGFncyB8PSBTWU1CT0xfQ0hPSUNFVkFMOw0KICAgICsJCQlpZiAoIW1l
bnUtPnByb21wdCkNCiAgICArCQkJCW1lbnVfd2FybihtZW51LCAiY2hvaWNlIHZhbHVlIG11c3Qg
aGF2ZSBhIHByb21wdCIpOw0KICAgICsJCQlmb3IgKHByb3AgPSBtZW51LT5zeW0tPnByb3A7IHBy
b3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJCQlpZiAocHJvcC0+dHlwZSA9PSBQX0RF
RkFVTFQpDQogICAgKwkJCQkJcHJvcF93YXJuKHByb3AsICJkZWZhdWx0cyBmb3IgY2hvaWNlICIN
CiAgICArCQkJCQkJICAidmFsdWVzIG5vdCBzdXBwb3J0ZWQiKTsNCiAgICArCQkJCWlmIChwcm9w
LT5tZW51ID09IG1lbnUpDQogICAgKwkJCQkJY29udGludWU7DQogICAgKwkJCQlpZiAocHJvcC0+
dHlwZSA9PSBQX1BST01QVCAmJg0KICAgICsJCQkJICAgIHByb3AtPm1lbnUtPnBhcmVudC0+c3lt
ICE9IHN5bSkNCiAgICArCQkJCQlwcm9wX3dhcm4ocHJvcCwgImNob2ljZSB2YWx1ZSB1c2VkIG91
dHNpZGUgaXRzIGNob2ljZSBncm91cCIpOw0KICAgICsJCQl9DQogICAgKwkJCS8qIE5vbi10cmlz
dGF0ZSBjaG9pY2UgdmFsdWVzIG9mIHRyaXN0YXRlIGNob2ljZXMgbXVzdA0KICAgICsJCQkgKiBk
ZXBlbmQgb24gdGhlIGNob2ljZSBiZWluZyBzZXQgdG8gWS4gVGhlIGNob2ljZQ0KICAgICsJCQkg
KiB2YWx1ZXMnIGRlcGVuZGVuY2llcyB3ZXJlIHByb3BhZ2F0ZWQgdG8gdGhlaXINCiAgICArCQkJ
ICogcHJvcGVydGllcyBhYm92ZSwgc28gdGhlIGNoYW5nZSBoZXJlIG11c3QgYmUgcmUtDQogICAg
KwkJCSAqIHByb3BhZ2F0ZWQuDQogICAgKwkJCSAqLw0KICAgICsJCQlpZiAoc3ltLT50eXBlID09
IFNfVFJJU1RBVEUgJiYgbWVudS0+c3ltLT50eXBlICE9IFNfVFJJU1RBVEUpIHsNCiAgICArCQkJ
CWJhc2VkZXAgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgc3ltLCAmc3ltYm9sX3llcyk7DQog
ICAgKwkJCQltZW51LT5kZXAgPSBleHByX2FsbG9jX2FuZChiYXNlZGVwLCBtZW51LT5kZXApOw0K
ICAgICsJCQkJZm9yIChwcm9wID0gbWVudS0+c3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+
bmV4dCkgew0KICAgICsJCQkJCWlmIChwcm9wLT5tZW51ICE9IG1lbnUpDQogICAgKwkJCQkJCWNv
bnRpbnVlOw0KICAgICsJCQkJCXByb3AtPnZpc2libGUuZXhwciA9IGV4cHJfYWxsb2NfYW5kKGV4
cHJfY29weShiYXNlZGVwKSwNCiAgICArCQkJCQkJCQkJICAgIHByb3AtPnZpc2libGUuZXhwcik7
DQogICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICArCQkJbWVudV9hZGRfc3ltYm9sKFBfQ0hPSUNF
LCBzeW0sIE5VTEwpOw0KICAgICsJCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJvcChzeW0pOw0K
ICAgICsJCQlmb3IgKGVwID0gJnByb3AtPmV4cHI7ICplcDsgZXAgPSAmKCplcCktPmxlZnQuZXhw
cikNCiAgICArCQkJCTsNCiAgICArCQkJKmVwID0gZXhwcl9hbGxvY19vbmUoRV9MSVNULCBOVUxM
KTsNCiAgICArCQkJKCplcCktPnJpZ2h0LnN5bSA9IG1lbnUtPnN5bTsNCiAgICArCQl9DQogICAg
Kw0KICAgICsJCS8qDQogICAgKwkJICogVGhpcyBjb2RlIHNlcnZlcyB0d28gcHVycG9zZXM6DQog
ICAgKwkJICoNCiAgICArCQkgKiAoMSkgRmxhdHRlbmluZyAnaWYnIGJsb2Nrcywgd2hpY2ggZG8g
bm90IHNwZWNpZnkgYSBzdWJtZW51DQogICAgKwkJICogICAgIGFuZCBvbmx5IGFkZCBkZXBlbmRl
bmNpZXMuDQogICAgKwkJICoNCiAgICArCQkgKiAgICAgKEF1dG9tYXRpYyBzdWJtZW51IGNyZWF0
aW9uIG1pZ2h0IHN0aWxsIGNyZWF0ZSBhIHN1Ym1lbnUNCiAgICArCQkgKiAgICAgZnJvbSBhbiAn
aWYnIGJlZm9yZSB0aGlzIGNvZGUgcnVucy4pDQogICAgKwkJICoNCiAgICArCQkgKiAoMikgIlVu
ZG9pbmciIGFueSBhdXRvbWF0aWMgc3VibWVudXMgY3JlYXRlZCBlYXJsaWVyIGJlbG93DQogICAg
KwkJICogICAgIHByb21wdGxlc3Mgc3ltYm9scy4NCiAgICArCQkgKg0KICAgICsJCSAqIEJlZm9y
ZToNCiAgICArCQkgKg0KICAgICsJCSAqCUENCiAgICArCQkgKglpZiAuLi4gKG9yIHByb21wdGxl
c3Mgc3ltYm9sKQ0KICAgICsJCSAqCSArLUINCiAgICArCQkgKgkgKy1DDQogICAgKwkJICoJRA0K
ICAgICsJCSAqDQogICAgKwkJICogQWZ0ZXI6DQogICAgKwkJICoNCiAgICArCQkgKglBDQogICAg
KwkJICoJaWYgLi4uIChvciBwcm9tcHRsZXNzIHN5bWJvbCkNCiAgICArCQkgKglCDQogICAgKwkJ
ICoJQw0KICAgICsJCSAqCUQNCiAgICArCQkgKi8NCiAgICArCQlpZiAobWVudS0+bGlzdCAmJiAo
IW1lbnUtPnByb21wdCB8fCAhbWVudS0+cHJvbXB0LT50ZXh0KSkgew0KICAgICsJCQlmb3IgKGxh
c3RfbWVudSA9IG1lbnUtPmxpc3Q7IDsgbGFzdF9tZW51ID0gbGFzdF9tZW51LT5uZXh0KSB7DQog
ICAgKwkJCQlsYXN0X21lbnUtPnBhcmVudCA9IHBhcmVudDsNCiAgICArCQkJCWlmICghbGFzdF9t
ZW51LT5uZXh0KQ0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWxhc3RfbWVu
dS0+bmV4dCA9IG1lbnUtPm5leHQ7DQogICAgKwkJCW1lbnUtPm5leHQgPSBtZW51LT5saXN0Ow0K
ICAgICsJCQltZW51LT5saXN0ID0gTlVMTDsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAg
ICsJaWYgKHN5bSAmJiAhKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfV0FSTkVEKSkgew0KICAgICsJCWlm
IChzeW0tPnR5cGUgPT0gU19VTktOT1dOKQ0KICAgICsJCQltZW51X3dhcm4ocGFyZW50LCAiY29u
ZmlnIHN5bWJvbCBkZWZpbmVkIHdpdGhvdXQgdHlwZSIpOw0KICAgICsNCiAgICArCQlpZiAoc3lt
X2lzX2Nob2ljZShzeW0pICYmICFwYXJlbnQtPnByb21wdCkNCiAgICArCQkJbWVudV93YXJuKHBh
cmVudCwgImNob2ljZSBtdXN0IGhhdmUgYSBwcm9tcHQiKTsNCiAgICArDQogICAgKwkJLyogQ2hl
Y2sgcHJvcGVydGllcyBjb25uZWN0ZWQgdG8gdGhpcyBzeW1ib2wgKi8NCiAgICArCQlzeW1fY2hl
Y2tfcHJvcChzeW0pOw0KICAgICsJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dBUk5FRDsNCiAgICAr
CX0NCiAgICArDQogICAgKwkvKg0KICAgICsJICogRm9yIG5vbi1vcHRpb25hbCBjaG9pY2VzLCBh
ZGQgYSByZXZlcnNlIGRlcGVuZGVuY3kgKGNvcnJlc3BvbmRpbmcgdG8NCiAgICArCSAqIGEgc2Vs
ZWN0KSBvZiAnPHZpc2liaWxpdHk+ICYmIG0nLiBUaGlzIHByZXZlbnRzIHRoZSB1c2VyIGZyb20N
CiAgICArCSAqIHNldHRpbmcgdGhlIGNob2ljZSBtb2RlIHRvICduJyB3aGVuIHRoZSBjaG9pY2Ug
aXMgdmlzaWJsZS4NCiAgICArCSAqDQogICAgKwkgKiBUaGlzIHdvdWxkIGFsc28gd29yayBmb3Ig
bm9uLWNob2ljZSBzeW1ib2xzLCBidXQgb25seSBub24tb3B0aW9uYWwNCiAgICArCSAqIGNob2lj
ZXMgY2xlYXIgU1lNQk9MX09QVElPTkFMIGFzIG9mIHdyaXRpbmcuIENob2ljZXMgYXJlIGltcGxl
bWVudGVkDQogICAgKwkgKiBhcyBhIHR5cGUgb2Ygc3ltYm9sLg0KICAgICsJICovDQogICAgKwlp
ZiAoc3ltICYmICFzeW1faXNfb3B0aW9uYWwoc3ltKSAmJiBwYXJlbnQtPnByb21wdCkgew0KICAg
ICsJCXN5bS0+cmV2X2RlcC5leHByID0gZXhwcl9hbGxvY19vcihzeW0tPnJldl9kZXAuZXhwciwN
CiAgICArCQkJCWV4cHJfYWxsb2NfYW5kKHBhcmVudC0+cHJvbXB0LT52aXNpYmxlLmV4cHIsDQog
ICAgKwkJCQkJZXhwcl9hbGxvY19zeW1ib2woJnN5bWJvbF9tb2QpKSk7DQogICAgKwl9DQogICAg
K30NCiAgICArDQogICAgK2Jvb2wgbWVudV9oYXNfcHJvbXB0KHN0cnVjdCBtZW51ICptZW51KQ0K
ICAgICt7DQogICAgKwlpZiAoIW1lbnUtPnByb21wdCkNCiAgICArCQlyZXR1cm4gZmFsc2U7DQog
ICAgKwlyZXR1cm4gdHJ1ZTsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogRGV0ZXJt
aW5lIGlmIGEgbWVudSBpcyBlbXB0eS4NCiAgICArICogQSBtZW51IGlzIGNvbnNpZGVyZWQgZW1w
dHkgaWYgaXQgY29udGFpbnMgbm8gb3Igb25seQ0KICAgICsgKiBpbnZpc2libGUgZW50cmllcy4N
CiAgICArICovDQogICAgK2Jvb2wgbWVudV9pc19lbXB0eShzdHJ1Y3QgbWVudSAqbWVudSkNCiAg
ICArew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsNCiAgICArCWZvciAoY2hpbGQg
PSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCWlmICht
ZW51X2lzX3Zpc2libGUoY2hpbGQpKQ0KICAgICsJCQlyZXR1cm4oZmFsc2UpOw0KICAgICsJfQ0K
ICAgICsJcmV0dXJuKHRydWUpOw0KICAgICt9DQogICAgKw0KICAgICtib29sIG1lbnVfaXNfdmlz
aWJsZShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxk
Ow0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJdHJpc3RhdGUgdmlzaWJsZTsNCiAg
ICArDQogICAgKwlpZiAoIW1lbnUtPnByb21wdCkNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAg
Kw0KICAgICsJaWYgKG1lbnUtPnZpc2liaWxpdHkpIHsNCiAgICArCQlpZiAoZXhwcl9jYWxjX3Zh
bHVlKG1lbnUtPnZpc2liaWxpdHkpID09IG5vKQ0KICAgICsJCQlyZXR1cm4gZmFsc2U7DQogICAg
Kwl9DQogICAgKw0KICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsJaWYgKHN5bSkgew0KICAg
ICsJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgKwkJdmlzaWJsZSA9IG1lbnUtPnByb21wdC0+
dmlzaWJsZS50cmk7DQogICAgKwl9IGVsc2UNCiAgICArCQl2aXNpYmxlID0gbWVudS0+cHJvbXB0
LT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShtZW51LT5wcm9tcHQtPnZpc2libGUuZXhw
cik7DQogICAgKw0KICAgICsJaWYgKHZpc2libGUgIT0gbm8pDQogICAgKwkJcmV0dXJuIHRydWU7
DQogICAgKw0KICAgICsJaWYgKCFzeW0gfHwgc3ltX2dldF90cmlzdGF0ZV92YWx1ZShtZW51LT5z
eW0pID09IG5vKQ0KICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArDQogICAgKwlmb3IgKGNoaWxk
ID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICArCQlpZiAo
bWVudV9pc192aXNpYmxlKGNoaWxkKSkgew0KICAgICsJCQlpZiAoc3ltKQ0KICAgICsJCQkJc3lt
LT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQogICAgKwkJCXJldHVybiB0cnVlOw0KICAgICsJ
CX0NCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gZmFsc2U7DQogICAgK30NCiAgICArDQog
ICAgK2NvbnN0IGNoYXIgKm1lbnVfZ2V0X3Byb21wdChzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICAr
ew0KICAgICsJaWYgKG1lbnUtPnByb21wdCkNCiAgICArCQlyZXR1cm4gbWVudS0+cHJvbXB0LT50
ZXh0Ow0KICAgICsJZWxzZSBpZiAobWVudS0+c3ltKQ0KICAgICsJCXJldHVybiBtZW51LT5zeW0t
Pm5hbWU7DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IG1l
bnUgKm1lbnVfZ2V0X3Jvb3RfbWVudShzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJ
cmV0dXJuICZyb290bWVudTsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IG1lbnUgKm1lbnVf
Z2V0X3BhcmVudF9tZW51KHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwllbnVtIHBy
b3BfdHlwZSB0eXBlOw0KICAgICsNCiAgICArCWZvciAoOyBtZW51ICE9ICZyb290bWVudTsgbWVu
dSA9IG1lbnUtPnBhcmVudCkgew0KICAgICsJCXR5cGUgPSBtZW51LT5wcm9tcHQgPyBtZW51LT5w
cm9tcHQtPnR5cGUgOiAwOw0KICAgICsJCWlmICh0eXBlID09IFBfTUVOVSkNCiAgICArCQkJYnJl
YWs7DQogICAgKwl9DQogICAgKwlyZXR1cm4gbWVudTsNCiAgICArfQ0KICAgICsNCiAgICArYm9v
bCBtZW51X2hhc19oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlyZXR1cm4g
bWVudS0+aGVscCAhPSBOVUxMOw0KICAgICt9DQogICAgKw0KICAgICtjb25zdCBjaGFyICptZW51
X2dldF9oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlpZiAobWVudS0+aGVs
cCkNCiAgICArCQlyZXR1cm4gbWVudS0+aGVscDsNCiAgICArCWVsc2UNCiAgICArCQlyZXR1cm4g
IiI7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGdldF9wcm9tcHRfc3RyKHN0cnVj
dCBnc3RyICpyLCBzdHJ1Y3QgcHJvcGVydHkgKnByb3AsDQogICAgKwkJCSAgIHN0cnVjdCBsaXN0
X2hlYWQgKmhlYWQpDQogICAgK3sNCiAgICArCWludCBpLCBqOw0KICAgICsJc3RydWN0IG1lbnUg
KnN1Ym1lbnVbOF0sICptZW51LCAqbG9jYXRpb24gPSBOVUxMOw0KICAgICsJc3RydWN0IGp1bXBf
a2V5ICpqdW1wID0gTlVMTDsNCiAgICArDQogICAgKwlzdHJfcHJpbnRmKHIsICJQcm9tcHQ6ICVz
XG4iLCBwcm9wLT50ZXh0KTsNCiAgICArCW1lbnUgPSBwcm9wLT5tZW51LT5wYXJlbnQ7DQogICAg
Kwlmb3IgKGkgPSAwOyBtZW51ICE9ICZyb290bWVudSAmJiBpIDwgODsgbWVudSA9IG1lbnUtPnBh
cmVudCkgew0KICAgICsJCWJvb2wgYWNjZXNzaWJsZSA9IG1lbnVfaXNfdmlzaWJsZShtZW51KTsN
CiAgICArDQogICAgKwkJc3VibWVudVtpKytdID0gbWVudTsNCiAgICArCQlpZiAobG9jYXRpb24g
PT0gTlVMTCAmJiBhY2Nlc3NpYmxlKQ0KICAgICsJCQlsb2NhdGlvbiA9IG1lbnU7DQogICAgKwl9
DQogICAgKwlpZiAoaGVhZCAmJiBsb2NhdGlvbikgew0KICAgICsJCWp1bXAgPSB4bWFsbG9jKHNp
emVvZihzdHJ1Y3QganVtcF9rZXkpKTsNCiAgICArDQogICAgKwkJaWYgKG1lbnVfaXNfdmlzaWJs
ZShwcm9wLT5tZW51KSkgew0KICAgICsJCQkvKg0KICAgICsJCQkgKiBUaGVyZSBpcyBub3QgZW5v
dWdoIHJvb20gdG8gcHV0IHRoZSBoaW50IGF0IHRoZQ0KICAgICsJCQkgKiBiZWdpbm5pbmcgb2Yg
dGhlICJQcm9tcHQiIGxpbmUuIFB1dCB0aGUgaGludCBvbiB0aGUNCiAgICArCQkJICogbGFzdCAi
TG9jYXRpb24iIGxpbmUgZXZlbiB3aGVuIGl0IHdvdWxkIGJlbG9uZyBvbg0KICAgICsJCQkgKiB0
aGUgZm9ybWVyLg0KICAgICsJCQkgKi8NCiAgICArCQkJanVtcC0+dGFyZ2V0ID0gcHJvcC0+bWVu
dTsNCiAgICArCQl9IGVsc2UNCiAgICArCQkJanVtcC0+dGFyZ2V0ID0gbG9jYXRpb247DQogICAg
Kw0KICAgICsJCWlmIChsaXN0X2VtcHR5KGhlYWQpKQ0KICAgICsJCQlqdW1wLT5pbmRleCA9IDA7
DQogICAgKwkJZWxzZQ0KICAgICsJCQlqdW1wLT5pbmRleCA9IGxpc3RfZW50cnkoaGVhZC0+cHJl
diwgc3RydWN0IGp1bXBfa2V5LA0KICAgICsJCQkJCQkgZW50cmllcyktPmluZGV4ICsgMTsNCiAg
ICArDQogICAgKwkJbGlzdF9hZGRfdGFpbCgmanVtcC0+ZW50cmllcywgaGVhZCk7DQogICAgKwl9
DQogICAgKw0KICAgICsJaWYgKGkgPiAwKSB7DQogICAgKwkJc3RyX3ByaW50ZihyLCAiICBMb2Nh
dGlvbjpcbiIpOw0KICAgICsJCWZvciAoaiA9IDQ7IC0taSA+PSAwOyBqICs9IDIpIHsNCiAgICAr
CQkJbWVudSA9IHN1Ym1lbnVbaV07DQogICAgKwkJCWlmIChqdW1wICYmIG1lbnUgPT0gbG9jYXRp
b24pDQogICAgKwkJCQlqdW1wLT5vZmZzZXQgPSBzdHJsZW4oci0+cyk7DQogICAgKwkJCXN0cl9w
cmludGYociwgIiUqYy0+ICVzIiwgaiwgJyAnLA0KICAgICsJCQkJICAgbWVudV9nZXRfcHJvbXB0
KG1lbnUpKTsNCiAgICArCQkJaWYgKG1lbnUtPnN5bSkgew0KICAgICsJCQkJc3RyX3ByaW50Zihy
LCAiICglcyBbPSVzXSkiLCBtZW51LT5zeW0tPm5hbWUgPw0KICAgICsJCQkJCW1lbnUtPnN5bS0+
bmFtZSA6ICI8Y2hvaWNlPiIsDQogICAgKwkJCQkJc3ltX2dldF9zdHJpbmdfdmFsdWUobWVudS0+
c3ltKSk7DQogICAgKwkJCX0NCiAgICArCQkJc3RyX2FwcGVuZChyLCAiXG4iKTsNCiAgICArCQl9
DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIGdldCBwcm9wZXJ0eSBv
ZiB0eXBlIFBfU1lNQk9MDQogICAgKyAqLw0KICAgICtzdGF0aWMgc3RydWN0IHByb3BlcnR5ICpn
ZXRfc3ltYm9sX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qg
cHJvcGVydHkgKnByb3AgPSBOVUxMOw0KICAgICsNCiAgICArCWZvcl9hbGxfcHJvcGVydGllcyhz
eW0sIHByb3AsIFBfU1lNQk9MKQ0KICAgICsJCWJyZWFrOw0KICAgICsJcmV0dXJuIHByb3A7DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGdldF9zeW1ib2xfcHJvcHNfc3RyKHN0cnVj
dCBnc3RyICpyLCBzdHJ1Y3Qgc3ltYm9sICpzeW0sDQogICAgKwkJCQkgZW51bSBwcm9wX3R5cGUg
dG9rLCBjb25zdCBjaGFyICpwcmVmaXgpDQogICAgK3sNCiAgICArCWJvb2wgaGl0ID0gZmFsc2U7
DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKw0KICAgICsJZm9yX2FsbF9wcm9w
ZXJ0aWVzKHN5bSwgcHJvcCwgdG9rKSB7DQogICAgKwkJaWYgKCFoaXQpIHsNCiAgICArCQkJc3Ry
X2FwcGVuZChyLCBwcmVmaXgpOw0KICAgICsJCQloaXQgPSB0cnVlOw0KICAgICsJCX0gZWxzZQ0K
ICAgICsJCQlzdHJfcHJpbnRmKHIsICIgJiYgIik7DQogICAgKwkJZXhwcl9nc3RyX3ByaW50KHBy
b3AtPmV4cHIsIHIpOw0KICAgICsJfQ0KICAgICsJaWYgKGhpdCkNCiAgICArCQlzdHJfYXBwZW5k
KHIsICJcbiIpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBoZWFkIGlzIG9wdGlv
bmFsIGFuZCBtYXkgYmUgTlVMTA0KICAgICsgKi8NCiAgICArc3RhdGljIHZvaWQgZ2V0X3N5bWJv
bF9zdHIoc3RydWN0IGdzdHIgKnIsIHN0cnVjdCBzeW1ib2wgKnN5bSwNCiAgICArCQkgICAgc3Ry
dWN0IGxpc3RfaGVhZCAqaGVhZCkNCiAgICArew0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9w
Ow0KICAgICsNCiAgICArCWlmIChzeW0gJiYgc3ltLT5uYW1lKSB7DQogICAgKwkJc3RyX3ByaW50
ZihyLCAiU3ltYm9sOiAlcyBbPSVzXVxuIiwgc3ltLT5uYW1lLA0KICAgICsJCQkgICBzeW1fZ2V0
X3N0cmluZ192YWx1ZShzeW0pKTsNCiAgICArCQlzdHJfcHJpbnRmKHIsICJUeXBlICA6ICVzXG4i
LCBzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOw0KICAgICsJCWlmIChzeW0tPnR5cGUgPT0gU19J
TlQgfHwgc3ltLT50eXBlID09IFNfSEVYKSB7DQogICAgKwkJCXByb3AgPSBzeW1fZ2V0X3Jhbmdl
X3Byb3Aoc3ltKTsNCiAgICArCQkJaWYgKHByb3ApIHsNCiAgICArCQkJCXN0cl9wcmludGYociwg
IlJhbmdlIDogIik7DQogICAgKwkJCQlleHByX2dzdHJfcHJpbnQocHJvcC0+ZXhwciwgcik7DQog
ICAgKwkJCQlzdHJfYXBwZW5kKHIsICJcbiIpOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJ
fQ0KICAgICsJZm9yX2FsbF9wcm9tcHRzKHN5bSwgcHJvcCkNCiAgICArCQlnZXRfcHJvbXB0X3N0
cihyLCBwcm9wLCBoZWFkKTsNCiAgICArDQogICAgKwlwcm9wID0gZ2V0X3N5bWJvbF9wcm9wKHN5
bSk7DQogICAgKwlpZiAocHJvcCkgew0KICAgICsJCXN0cl9wcmludGYociwgIiAgRGVmaW5lZCBh
dCAlczolZFxuIiwgcHJvcC0+bWVudS0+ZmlsZS0+bmFtZSwNCiAgICArCQkJcHJvcC0+bWVudS0+
bGluZW5vKTsNCiAgICArCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsN
CiAgICArCQkJc3RyX2FwcGVuZChyLCAiICBEZXBlbmRzIG9uOiAiKTsNCiAgICArCQkJZXhwcl9n
c3RyX3ByaW50KHByb3AtPnZpc2libGUuZXhwciwgcik7DQogICAgKwkJCXN0cl9hcHBlbmQociwg
IlxuIik7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCWdldF9zeW1ib2xfcHJvcHNf
c3RyKHIsIHN5bSwgUF9TRUxFQ1QsICIgIFNlbGVjdHM6ICIpOw0KICAgICsJaWYgKHN5bS0+cmV2
X2RlcC5leHByKSB7DQogICAgKwkJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAu
ZXhwciwgciwgeWVzLCAiICBTZWxlY3RlZCBieSBbeV06XG4iKTsNCiAgICArCQlleHByX2dzdHJf
cHJpbnRfcmV2ZGVwKHN5bS0+cmV2X2RlcC5leHByLCByLCBtb2QsICIgIFNlbGVjdGVkIGJ5IFtt
XTpcbiIpOw0KICAgICsJCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5yZXZfZGVwLmV4cHIs
IHIsIG5vLCAiICBTZWxlY3RlZCBieSBbbl06XG4iKTsNCiAgICArCX0NCiAgICArDQogICAgKwln
ZXRfc3ltYm9sX3Byb3BzX3N0cihyLCBzeW0sIFBfSU1QTFksICIgIEltcGxpZXM6ICIpOw0KICAg
ICsJaWYgKHN5bS0+aW1wbGllZC5leHByKSB7DQogICAgKwkJZXhwcl9nc3RyX3ByaW50X3JldmRl
cChzeW0tPmltcGxpZWQuZXhwciwgciwgeWVzLCAiICBJbXBsaWVkIGJ5IFt5XTpcbiIpOw0KICAg
ICsJCWV4cHJfZ3N0cl9wcmludF9yZXZkZXAoc3ltLT5pbXBsaWVkLmV4cHIsIHIsIG1vZCwgIiAg
SW1wbGllZCBieSBbbV06XG4iKTsNCiAgICArCQlleHByX2dzdHJfcHJpbnRfcmV2ZGVwKHN5bS0+
aW1wbGllZC5leHByLCByLCBubywgIiAgSW1wbGllZCBieSBbbl06XG4iKTsNCiAgICArCX0NCiAg
ICArDQogICAgKwlzdHJfYXBwZW5kKHIsICJcblxuIik7DQogICAgK30NCiAgICArDQogICAgK3N0
cnVjdCBnc3RyIGdldF9yZWxhdGlvbnNfc3RyKHN0cnVjdCBzeW1ib2wgKipzeW1fYXJyLCBzdHJ1
Y3QgbGlzdF9oZWFkICpoZWFkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQog
ICAgKwlzdHJ1Y3QgZ3N0ciByZXMgPSBzdHJfbmV3KCk7DQogICAgKwlpbnQgaTsNCiAgICArDQog
ICAgKwlmb3IgKGkgPSAwOyBzeW1fYXJyICYmIChzeW0gPSBzeW1fYXJyW2ldKTsgaSsrKQ0KICAg
ICsJCWdldF9zeW1ib2xfc3RyKCZyZXMsIHN5bSwgaGVhZCk7DQogICAgKwlpZiAoIWkpDQogICAg
KwkJc3RyX2FwcGVuZCgmcmVzLCAiTm8gbWF0Y2hlcyBmb3VuZC5cbiIpOw0KICAgICsJcmV0dXJu
IHJlczsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgK3ZvaWQgbWVudV9nZXRfZXh0X2hlbHAo
c3RydWN0IG1lbnUgKm1lbnUsIHN0cnVjdCBnc3RyICpoZWxwKQ0KICAgICt7DQogICAgKwlzdHJ1
Y3Qgc3ltYm9sICpzeW0gPSBtZW51LT5zeW07DQogICAgKwljb25zdCBjaGFyICpoZWxwX3RleHQg
PSBub2hlbHBfdGV4dDsNCiAgICArDQogICAgKwlpZiAobWVudV9oYXNfaGVscChtZW51KSkgew0K
ICAgICsJCWlmIChzeW0tPm5hbWUpDQogICAgKwkJCXN0cl9wcmludGYoaGVscCwgIiVzJXM6XG5c
biIsIENPTkZJR18sIHN5bS0+bmFtZSk7DQogICAgKwkJaGVscF90ZXh0ID0gbWVudV9nZXRfaGVs
cChtZW51KTsNCiAgICArCX0NCiAgICArCXN0cl9wcmludGYoaGVscCwgIiVzXG4iLCBoZWxwX3Rl
eHQpOw0KICAgICsJaWYgKHN5bSkNCiAgICArCQlnZXRfc3ltYm9sX3N0cihoZWxwLCBzeW0sIE5V
TEwpOw0KICAgICt9DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9tZXJnZV9jb25m
aWcuc2ggYi9zdXBwb3J0L2tjb25maWcvbWVyZ2VfY29uZmlnLnNoDQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA3NTUNCiAgICBpbmRleCAwMDAwMDAwLi5kOTI0YzUxDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9tZXJnZV9jb25maWcuc2gNCiAgICBAQCAtMCwwICsx
LDE4OSBAQA0KICAgICsjIS9iaW4vc2gNCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog
R1BMLTIuMA0KICAgICsjDQogICAgKyMgIG1lcmdlX2NvbmZpZy5zaCAtIFRha2VzIGEgbGlzdCBv
ZiBjb25maWcgZnJhZ21lbnQgdmFsdWVzLCBhbmQgbWVyZ2VzDQogICAgKyMgIHRoZW0gb25lIGJ5
IG9uZS4gUHJvdmlkZXMgd2FybmluZ3Mgb24gb3ZlcnJpZGRlbiB2YWx1ZXMsIGFuZCBzcGVjaWZp
ZWQNCiAgICArIyAgdmFsdWVzIHRoYXQgZGlkIG5vdCBtYWtlIGl0IHRvIHRoZSByZXN1bHRpbmcg
LmNvbmZpZyBmaWxlIChkdWUgdG8gbWlzc2VkDQogICAgKyMgIGRlcGVuZGVuY2llcyBvciBjb25m
aWcgc3ltYm9sIHJlbW92YWwpLg0KICAgICsjDQogICAgKyMgIFBvcnRpb25zIHJldXNlZCBmcm9t
IGtjb25mX2NoZWNrIGFuZCBnZW5lcmF0ZV9jZmc6DQogICAgKyMgIGh0dHA6Ly9naXQueW9jdG9w
cm9qZWN0Lm9yZy9jZ2l0L2NnaXQuY2dpL3lvY3RvLWtlcm5lbC10b29scy90cmVlL3Rvb2xzL2tj
b25mX2NoZWNrDQogICAgKyMgIGh0dHA6Ly9naXQueW9jdG9wcm9qZWN0Lm9yZy9jZ2l0L2NnaXQu
Y2dpL3lvY3RvLWtlcm5lbC10b29scy90cmVlL3Rvb2xzL2dlbmVyYXRlX2NmZw0KICAgICsjDQog
ICAgKyMgIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIFdpbmQgUml2ZXIgU3lzdGVtcywgSW5jLg0K
ICAgICsjICBDb3B5cmlnaHQgMjAxMSBMaW5hcm8NCiAgICArDQogICAgK2NsZWFuX3VwKCkgew0K
ICAgICsJcm0gLWYgJFRNUF9GSUxFDQogICAgKwlybSAtZiAkTUVSR0VfRklMRQ0KICAgICsJZXhp
dA0KICAgICt9DQogICAgK3RyYXAgY2xlYW5fdXAgSFVQIElOVCBURVJNDQogICAgKw0KICAgICt1
c2FnZSgpIHsNCiAgICArCWVjaG8gIlVzYWdlOiAkMCBbT1BUSU9OU10gW0NPTkZJRyBbLi4uXV0i
DQogICAgKwllY2hvICIgIC1oICAgIGRpc3BsYXkgdGhpcyBoZWxwIHRleHQiDQogICAgKwllY2hv
ICIgIC1tICAgIG9ubHkgbWVyZ2UgdGhlIGZyYWdtZW50cywgZG8gbm90IGV4ZWN1dGUgdGhlIG1h
a2UgY29tbWFuZCINCiAgICArCWVjaG8gIiAgLW4gICAgdXNlIGFsbG5vY29uZmlnIGluc3RlYWQg
b2YgYWxsZGVmY29uZmlnIg0KICAgICsJZWNobyAiICAtciAgICBsaXN0IHJlZHVuZGFudCBlbnRy
aWVzIHdoZW4gbWVyZ2luZyBmcmFnbWVudHMiDQogICAgKwllY2hvICIgIC15ICAgIG1ha2UgYnVp
bHRpbiBoYXZlIHByZWNlZGVuY2Ugb3ZlciBtb2R1bGVzIg0KICAgICsJZWNobyAiICAtTyAgICBk
aXIgdG8gcHV0IGdlbmVyYXRlZCBvdXRwdXQgZmlsZXMuICBDb25zaWRlciBzZXR0aW5nIFwkS0NP
TkZJR19DT05GSUcgaW5zdGVhZC4iDQogICAgKwllY2hvDQogICAgKwllY2hvICJVc2VkIHByZWZp
eDogJyRDT05GSUdfUFJFRklYJy4gWW91IGNhbiByZWRlZmluZSBpdCB3aXRoIFwkQ09ORklHXyBl
bnZpcm9ubWVudCB2YXJpYWJsZS4iDQogICAgK30NCiAgICArDQogICAgK1JVTk1BS0U9dHJ1ZQ0K
ICAgICtBTExUQVJHRVQ9YWxsZGVmY29uZmlnDQogICAgK1dBUk5SRURVTj1mYWxzZQ0KICAgICtC
VUlMVElOPWZhbHNlDQogICAgK09VVFBVVD0uDQogICAgK0NPTkZJR19QUkVGSVg9JHtDT05GSUdf
LUNPTkZJR199DQogICAgKw0KICAgICt3aGlsZSB0cnVlOyBkbw0KICAgICsJY2FzZSAkMSBpbg0K
ICAgICsJIi1uIikNCiAgICArCQlBTExUQVJHRVQ9YWxsbm9jb25maWcNCiAgICArCQlzaGlmdA0K
ICAgICsJCWNvbnRpbnVlDQogICAgKwkJOzsNCiAgICArCSItbSIpDQogICAgKwkJUlVOTUFLRT1m
YWxzZQ0KICAgICsJCXNoaWZ0DQogICAgKwkJY29udGludWUNCiAgICArCQk7Ow0KICAgICsJIi1o
IikNCiAgICArCQl1c2FnZQ0KICAgICsJCWV4aXQNCiAgICArCQk7Ow0KICAgICsJIi1yIikNCiAg
ICArCQlXQVJOUkVEVU49dHJ1ZQ0KICAgICsJCXNoaWZ0DQogICAgKwkJY29udGludWUNCiAgICAr
CQk7Ow0KICAgICsJIi15IikNCiAgICArCQlCVUlMVElOPXRydWUNCiAgICArCQlzaGlmdA0KICAg
ICsJCWNvbnRpbnVlDQogICAgKwkJOzsNCiAgICArCSItTyIpDQogICAgKwkJaWYgWyAtZCAkMiBd
O3RoZW4NCiAgICArCQkJT1VUUFVUPSQoZWNobyAkMiB8IHNlZCAncy9cLyokLy8nKQ0KICAgICsJ
CWVsc2UNCiAgICArCQkJZWNobyAib3V0cHV0IGRpcmVjdG9yeSAkMiBkb2VzIG5vdCBleGlzdCIg
MT4mMg0KICAgICsJCQlleGl0IDENCiAgICArCQlmaQ0KICAgICsJCXNoaWZ0IDINCiAgICArCQlj
b250aW51ZQ0KICAgICsJCTs7DQogICAgKwkqKQ0KICAgICsJCWJyZWFrDQogICAgKwkJOzsNCiAg
ICArCWVzYWMNCiAgICArZG9uZQ0KICAgICsNCiAgICAraWYgWyAiJCMiIC1sdCAxIF0gOyB0aGVu
DQogICAgKwl1c2FnZQ0KICAgICsJZXhpdA0KICAgICtmaQ0KICAgICsNCiAgICAraWYgWyAteiAi
JEtDT05GSUdfQ09ORklHIiBdOyB0aGVuDQogICAgKwlpZiBbICIkT1VUUFVUIiAhPSAuIF07IHRo
ZW4NCiAgICArCQlLQ09ORklHX0NPTkZJRz0kKHJlYWRsaW5rIC1tIC0tICIkT1VUUFVULy5jb25m
aWciKQ0KICAgICsJZWxzZQ0KICAgICsJCUtDT05GSUdfQ09ORklHPS5jb25maWcNCiAgICArCWZp
DQogICAgK2ZpDQogICAgKw0KICAgICtJTklURklMRT0kMQ0KICAgICtzaGlmdDsNCiAgICArDQog
ICAgK2lmIFsgISAtciAiJElOSVRGSUxFIiBdOyB0aGVuDQogICAgKwllY2hvICJUaGUgYmFzZSBm
aWxlICckSU5JVEZJTEUnIGRvZXMgbm90IGV4aXN0LiAgRXhpdC4iID4mMg0KICAgICsJZXhpdCAx
DQogICAgK2ZpDQogICAgKw0KICAgICtNRVJHRV9MSVNUPSQqDQogICAgK1NFRF9DT05GSUdfRVhQ
MT0icy9eXCgke0NPTkZJR19QUkVGSVh9W2EtekEtWjAtOV9dKlwpPS4qL1wxL3AiDQogICAgK1NF
RF9DT05GSUdfRVhQMj0icy9eIyBcKCR7Q09ORklHX1BSRUZJWH1bYS16QS1aMC05X10qXCkgaXMg
bm90IHNldCQvXDEvcCINCiAgICArDQogICAgK1RNUF9GSUxFPSQobWt0ZW1wIC4vLnRtcC5jb25m
aWcuWFhYWFhYWFhYWCkNCiAgICArTUVSR0VfRklMRT0kKG1rdGVtcCAuLy5tZXJnZV90bXAuY29u
ZmlnLlhYWFhYWFhYWFgpDQogICAgKw0KICAgICtlY2hvICJVc2luZyAkSU5JVEZJTEUgYXMgYmFz
ZSINCiAgICArY2F0ICRJTklURklMRSA+ICRUTVBfRklMRQ0KICAgICsNCiAgICArIyBNZXJnZSBm
aWxlcywgcHJpbnRpbmcgd2FybmluZ3Mgb24gb3ZlcnJpZGRlbiB2YWx1ZXMNCiAgICArZm9yIE9S
SUdfTUVSR0VfRklMRSBpbiAkTUVSR0VfTElTVCA7IGRvDQogICAgKwllY2hvICJNZXJnaW5nICRP
UklHX01FUkdFX0ZJTEUiDQogICAgKwlpZiBbICEgLXIgIiRPUklHX01FUkdFX0ZJTEUiIF07IHRo
ZW4NCiAgICArCQllY2hvICJUaGUgbWVyZ2UgZmlsZSAnJE9SSUdfTUVSR0VfRklMRScgZG9lcyBu
b3QgZXhpc3QuICBFeGl0LiIgPiYyDQogICAgKwkJZXhpdCAxDQogICAgKwlmaQ0KICAgICsJY2F0
ICRPUklHX01FUkdFX0ZJTEUgPiAkTUVSR0VfRklMRQ0KICAgICsJQ0ZHX0xJU1Q9JChzZWQgLW4g
LWUgIiRTRURfQ09ORklHX0VYUDEiIC1lICIkU0VEX0NPTkZJR19FWFAyIiAkTUVSR0VfRklMRSkN
CiAgICArDQogICAgKwlmb3IgQ0ZHIGluICRDRkdfTElTVCA7IGRvDQogICAgKwkJZ3JlcCAtcSAt
dyAkQ0ZHICRUTVBfRklMRSB8fCBjb250aW51ZQ0KICAgICsJCVBSRVZfVkFMPSQoZ3JlcCAtdyAk
Q0ZHICRUTVBfRklMRSkNCiAgICArCQlORVdfVkFMPSQoZ3JlcCAtdyAkQ0ZHICRNRVJHRV9GSUxF
KQ0KICAgICsJCUJVSUxUSU5fRkxBRz1mYWxzZQ0KICAgICsJCWlmIFsgIiRCVUlMVElOIiA9ICJ0
cnVlIiBdICYmIFsgIiR7TkVXX1ZBTCNDT05GSUdfKj19IiA9ICJtIiBdICYmIFsgIiR7UFJFVl9W
QUwjQ09ORklHXyo9fSIgPSAieSIgXTsgdGhlbg0KICAgICsJCQllY2hvIFByZXZpb3VzICB2YWx1
ZTogJFBSRVZfVkFMDQogICAgKwkJCWVjaG8gTmV3IHZhbHVlOiAgICAgICAkTkVXX1ZBTA0KICAg
ICsJCQllY2hvIC15IHBhc3NlZCwgd2lsbCBub3QgZGVtb3RlIHkgdG8gbQ0KICAgICsJCQllY2hv
DQogICAgKwkJCUJVSUxUSU5fRkxBRz10cnVlDQogICAgKwkJZWxpZiBbICJ4JFBSRVZfVkFMIiAh
PSAieCRORVdfVkFMIiBdIDsgdGhlbg0KICAgICsJCQllY2hvIFZhbHVlIG9mICRDRkcgaXMgcmVk
ZWZpbmVkIGJ5IGZyYWdtZW50ICRPUklHX01FUkdFX0ZJTEU6DQogICAgKwkJCWVjaG8gUHJldmlv
dXMgIHZhbHVlOiAkUFJFVl9WQUwNCiAgICArCQkJZWNobyBOZXcgdmFsdWU6ICAgICAgICRORVdf
VkFMDQogICAgKwkJCWVjaG8NCiAgICArCQllbGlmIFsgIiRXQVJOUkVEVU4iID0gInRydWUiIF07
IHRoZW4NCiAgICArCQkJZWNobyBWYWx1ZSBvZiAkQ0ZHIGlzIHJlZHVuZGFudCBieSBmcmFnbWVu
dCAkT1JJR19NRVJHRV9GSUxFOg0KICAgICsJCWZpDQogICAgKwkJaWYgWyAiJEJVSUxUSU5fRkxB
RyIgPSAiZmFsc2UiIF07IHRoZW4NCiAgICArCQkJc2VkIC1pICIvJENGR1sgPV0vZCIgJFRNUF9G
SUxFDQogICAgKwkJZWxzZQ0KICAgICsJCQlzZWQgLWkgIi8kQ0ZHWyA9XS9kIiAkTUVSR0VfRklM
RQ0KICAgICsJCWZpDQogICAgKwlkb25lDQogICAgKwljYXQgJE1FUkdFX0ZJTEUgPj4gJFRNUF9G
SUxFDQogICAgK2RvbmUNCiAgICArDQogICAgK2lmIFsgIiRSVU5NQUtFIiA9ICJmYWxzZSIgXTsg
dGhlbg0KICAgICsJY3AgLVQgLS0gIiRUTVBfRklMRSIgIiRLQ09ORklHX0NPTkZJRyINCiAgICAr
CWVjaG8gIiMiDQogICAgKwllY2hvICIjIG1lcmdlZCBjb25maWd1cmF0aW9uIHdyaXR0ZW4gdG8g
JEtDT05GSUdfQ09ORklHIChuZWVkcyBtYWtlKSINCiAgICArCWVjaG8gIiMiDQogICAgKwljbGVh
bl91cA0KICAgICsJZXhpdA0KICAgICtmaQ0KICAgICsNCiAgICArIyBJZiB3ZSBoYXZlIGFuIG91
dHB1dCBkaXIsIHNldHVwIHRoZSBPPSBhcmd1bWVudCwgb3RoZXJ3aXNlIGxlYXZlDQogICAgKyMg
aXQgYmxhbmssIHNpbmNlIE89LiB3aWxsIGNyZWF0ZSBhbiB1bm5lY2Vzc2FyeSAuL3NvdXJjZSBz
b2Z0bGluaw0KICAgICtPVVRQVVRfQVJHPSIiDQogICAgK2lmIFsgIiRPVVRQVVQiICE9ICIuIiBd
IDsgdGhlbg0KICAgICsJT1VUUFVUX0FSRz0iTz0kT1VUUFVUIg0KICAgICtmaQ0KICAgICsNCiAg
ICArDQogICAgKyMgVXNlIHRoZSBtZXJnZWQgZmlsZSBhcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9y
Og0KICAgICsjIGFsbGRlZmNvbmZpZzogRmlsbHMgaW4gYW55IG1pc3Npbmcgc3ltYm9scyB3aXRo
IEtjb25maWcgZGVmYXVsdA0KICAgICsjIGFsbG5vY29uZmlnOiBGaWxscyBpbiBhbnkgbWlzc2lu
ZyBzeW1ib2xzIHdpdGggIyBDT05GSUdfKiBpcyBub3Qgc2V0DQogICAgK21ha2UgS0NPTkZJR19B
TExDT05GSUc9JFRNUF9GSUxFICRPVVRQVVRfQVJHICRBTExUQVJHRVQNCiAgICArDQogICAgKw0K
ICAgICsjIENoZWNrIGFsbCBzcGVjaWZpZWQgY29uZmlnIHZhbHVlcyB0b29rIChtaWdodCBoYXZl
IG1pc3NlZC1kZXBlbmRlbmN5IGlzc3VlcykNCiAgICArZm9yIENGRyBpbiAkKHNlZCAtbiAtZSAi
JFNFRF9DT05GSUdfRVhQMSIgLWUgIiRTRURfQ09ORklHX0VYUDIiICRUTVBfRklMRSk7IGRvDQog
ICAgKw0KICAgICsJUkVRVUVTVEVEX1ZBTD0kKGdyZXAgLXcgLWUgIiRDRkciICRUTVBfRklMRSkN
CiAgICArCUFDVFVBTF9WQUw9JChncmVwIC13IC1lICIkQ0ZHIiAiJEtDT05GSUdfQ09ORklHIikN
CiAgICArCWlmIFsgIngkUkVRVUVTVEVEX1ZBTCIgIT0gIngkQUNUVUFMX1ZBTCIgXSA7IHRoZW4N
CiAgICArCQllY2hvICJWYWx1ZSByZXF1ZXN0ZWQgZm9yICRDRkcgbm90IGluIGZpbmFsIC5jb25m
aWciDQogICAgKwkJZWNobyAiUmVxdWVzdGVkIHZhbHVlOiAgJFJFUVVFU1RFRF9WQUwiDQogICAg
KwkJZWNobyAiQWN0dWFsIHZhbHVlOiAgICAgJEFDVFVBTF9WQUwiDQogICAgKwkJZWNobyAiIg0K
ICAgICsJZmkNCiAgICArZG9uZQ0KICAgICsNCiAgICArY2xlYW5fdXANCiAgICBkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnL25jb25mLWNmZy5zaCBiL3N1cHBvcnQva2NvbmZpZy9uY29uZi1j
Zmcuc2gNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4IDAwMDAwMDAuLjAwMTU1
OWUNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL25jb25mLWNm
Zy5zaA0KICAgIEBAIC0wLDAgKzEsNDcgQEANCiAgICArIyEvYmluL3NoDQogICAgKyMgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArDQogICAgK1BLRz0ibmN1cnNlc3cgbWVu
dXcgcGFuZWx3Ig0KICAgICtQS0cyPSJuY3Vyc2VzIG1lbnUgcGFuZWwiDQogICAgKw0KICAgICtp
ZiBbIC1uICIkKGNvbW1hbmQgLXYgcGtnLWNvbmZpZykiIF07IHRoZW4NCiAgICArCWlmIHBrZy1j
b25maWcgLS1leGlzdHMgJFBLRzsgdGhlbg0KICAgICsJCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29u
ZmlnIC0tY2ZsYWdzICRQS0cpXCINCiAgICArCQllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1s
aWJzICRQS0cpXCINCiAgICArCQlleGl0IDANCiAgICArCWZpDQogICAgKw0KICAgICsJaWYgcGtn
LWNvbmZpZyAtLWV4aXN0cyAkUEtHMjsgdGhlbg0KICAgICsJCWVjaG8gY2ZsYWdzPVwiJChwa2ct
Y29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiDQogICAgKwkJZWNobyBsaWJzPVwiJChwa2ctY29uZmln
IC0tbGlicyAkUEtHMilcIg0KICAgICsJCWV4aXQgMA0KICAgICsJZmkNCiAgICArZmkNCiAgICAr
DQogICAgKyMgQ2hlY2sgdGhlIGRlZmF1bHQgcGF0aHMgaW4gY2FzZSBwa2ctY29uZmlnIGlzIG5v
dCBpbnN0YWxsZWQuDQogICAgKyMgKEV2ZW4gaWYgaXQgaXMgaW5zdGFsbGVkLCBzb21lIGRpc3Ry
aWJ1dGlvbnMgc3VjaCBhcyBvcGVuU1VTRSBjYW5ub3QNCiAgICArIyBmaW5kIG5jdXJzZXMgYnkg
cGtnLWNvbmZpZy4pDQogICAgK2lmIFsgLWYgL3Vzci9pbmNsdWRlL25jdXJzZXN3L25jdXJzZXMu
aCBdOyB0aGVuDQogICAgKwllY2hvIGNmbGFncz1cIi1EX0dOVV9TT1VSQ0UgLUkvdXNyL2luY2x1
ZGUvbmN1cnNlc3dcIg0KICAgICsJZWNobyBsaWJzPVwiLWxuY3Vyc2VzdyAtbG1lbnV3IC1scGFu
ZWx3XCINCiAgICArCWV4aXQgMA0KICAgICtmaQ0KICAgICsNCiAgICAraWYgWyAtZiAvdXNyL2lu
Y2x1ZGUvbmN1cnNlcy9uY3Vyc2VzLmggXTsgdGhlbg0KICAgICsJZWNobyBjZmxhZ3M9XCItRF9H
TlVfU09VUkNFIC1JL3Vzci9pbmNsdWRlL25jdXJzZXNcIg0KICAgICsJZWNobyBsaWJzPVwiLWxu
Y3Vyc2VzIC1sbWVudSAtbHBhbmVsXCINCiAgICArCWV4aXQgMA0KICAgICtmaQ0KICAgICsNCiAg
ICAraWYgWyAtZiAvdXNyL2luY2x1ZGUvbmN1cnNlcy5oIF07IHRoZW4NCiAgICArCWVjaG8gY2Zs
YWdzPVwiLURfR05VX1NPVVJDRVwiDQogICAgKwllY2hvIGxpYnM9XCItbG5jdXJzZXMgLWxtZW51
IC1scGFuZWxcIg0KICAgICsJZXhpdCAwDQogICAgK2ZpDQogICAgKw0KICAgICtlY2hvID4mMiAi
KiINCiAgICArZWNobyA+JjIgIiogVW5hYmxlIHRvIGZpbmQgdGhlIG5jdXJzZXMgcGFja2FnZS4i
DQogICAgK2VjaG8gPiYyICIqIEluc3RhbGwgbmN1cnNlcyAobmN1cnNlcy1kZXZlbCBvciBsaWJu
Y3Vyc2VzLWRldiINCiAgICArZWNobyA+JjIgIiogZGVwZW5kaW5nIG9uIHlvdXIgZGlzdHJpYnV0
aW9uKS4iDQogICAgK2VjaG8gPiYyICIqIg0KICAgICtleGl0IDENCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL25jb25mLmMgYi9zdXBwb3J0L2tjb25maWcvbmNvbmYuYw0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZDNkOTA4Yw0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvbmNvbmYuYw0KICAgIEBAIC0wLDAg
KzEsMTU1NSBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAg
ICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDggTmlyIFR6YWNoYXIgPG5pci50emFjaGFy
QGdtYWlsLmNvbT4NCiAgICArICoNCiAgICArICogRGVyaXZlZCBmcm9tIG1lbnVjb25maWcuDQog
ICAgKyAqLw0KICAgICsjaWZuZGVmIF9HTlVfU09VUkNFDQogICAgKyNkZWZpbmUgX0dOVV9TT1VS
Q0UNCiAgICArI2VuZGlmDQogICAgKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICArI2luY2x1ZGUg
PHN0ZGxpYi5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsjaW5jbHVkZSAi
bmNvbmYuaCINCiAgICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKw0KICAgICtzdGF0aWMgY29u
c3QgY2hhciBuY29uZl9nbG9iYWxfaGVscFtdID0NCiAgICArIkhlbHAgd2luZG93c1xuIg0KICAg
ICsiLS0tLS0tLS0tLS0tXG4iDQogICAgKyJvICBHbG9iYWwgaGVscDogIFVubGVzcyBpbiBhIGRh
dGEgZW50cnkgd2luZG93LCBwcmVzc2luZyA8RjE+IHdpbGwgZ2l2ZSBcbiINCiAgICArIiAgIHlv
dSB0aGUgZ2xvYmFsIGhlbHAgd2luZG93LCB3aGljaCB5b3UgYXJlIGp1c3QgcmVhZGluZy5cbiIN
CiAgICArIlxuIg0KICAgICsibyAgQSBzaG9ydCB2ZXJzaW9uIG9mIHRoZSBnbG9iYWwgaGVscCBp
cyBhdmFpbGFibGUgYnkgcHJlc3NpbmcgPEYzPi5cbiINCiAgICArIlxuIg0KICAgICsibyAgTG9j
YWwgaGVscDogIFRvIGdldCBoZWxwIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBlbnRyeSwg
dXNlIGFueVxuIg0KICAgICsiICAgb2YgPD8+IDxoPiwgb3IgaWYgaW4gYSBkYXRhIGVudHJ5IHdp
bmRvdyB0aGVuIHByZXNzIDxGMT4uXG4iDQogICAgKyJcbiINCiAgICArIlxuIg0KICAgICsiTWVu
dSBlbnRyaWVzXG4iDQogICAgKyItLS0tLS0tLS0tLS1cbiINCiAgICArIlRoaXMgaW50ZXJmYWNl
IGxldHMgeW91IHNlbGVjdCBmZWF0dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxu
Ig0KICAgICsiYnVpbGQuICBVbmlrcmFmdCBmZWF0dXJlcyBjYW4gZWl0aGVyIGJlIHNlbGVjdGVk
IG9yIGRlc2VsZWN0ZWQuXG4iDQogICAgKyJQYXJhbWV0ZXJzIG11c3QgYmUgZW50ZXJlZCBhcyB0
ZXh0IG9yIGRlY2ltYWwgb3IgaGV4YWRlY2ltYWwgbnVtYmVycy5cbiINCiAgICArIlxuIg0KICAg
ICsiTWVudSBlbnRyaWVzIGJlZ2lubmluZyB3aXRoIGZvbGxvd2luZyBicmFjZXMgcmVwcmVzZW50
IGZlYXR1cmVzIHRoYXRcbiINCiAgICArIiAgWyBdICBjYW4gYmUgYnVpbHQgaW4gb3IgcmVtb3Zl
ZFxuIg0KICAgICsiICA8ID4gIGNhbiBiZSBidWlsdCBpbiwgbW9kdWxhcml6ZWQgb3IgcmVtb3Zl
ZFxuIg0KICAgICsiICB7IH0gIGNhbiBiZSBidWlsdCBpbiBvciBtb2R1bGFyaXplZCwgYXJlIHNl
bGVjdGVkIGJ5IGFub3RoZXIgZmVhdHVyZVxuIg0KICAgICsiICAtIC0gIGFyZSBzZWxlY3RlZCBi
eSBhbm90aGVyIGZlYXR1cmVcbiINCiAgICArIiAgWFhYICBjYW5ub3QgYmUgc2VsZWN0ZWQuICBT
eW1ib2wgSW5mbyA8RjI+IHRlbGxzIHlvdSB3aHkuXG4iDQogICAgKyIqLCBNIG9yIHdoaXRlc3Bh
Y2UgaW5zaWRlIGJyYWNlcyBtZWFucyB0byBidWlsZCBpbiwgYnVpbGQgYXMgYSBtb2R1bGVcbiIN
CiAgICArIm9yIHRvIGV4Y2x1ZGUgdGhlIGZlYXR1cmUgcmVzcGVjdGl2ZWx5LlxuIg0KICAgICsi
XG4iDQogICAgKyJUbyBjaGFuZ2UgYW55IG9mIHRoZXNlIGZlYXR1cmVzLCBoaWdobGlnaHQgaXQg
d2l0aCB0aGUgbW92ZW1lbnQga2V5c1xuIg0KICAgICsibGlzdGVkIGJlbG93IGFuZCBwcmVzcyA8
eT4gdG8gYnVpbGQgaXQgaW4sIDxtPiB0byBtYWtlIGl0IGEgbW9kdWxlIG9yXG4iDQogICAgKyI8
bj4gdG8gcmVtb3ZlIGl0LiAgWW91IG1heSBwcmVzcyB0aGUgPFNwYWNlPiBrZXkgdG8gY3ljbGUg
dGhyb3VnaCB0aGVcbiINCiAgICArImF2YWlsYWJsZSBvcHRpb25zLlxuIg0KICAgICsiXG4iDQog
ICAgKyJBIHRyYWlsaW5nIFwiLS0tPlwiIGRlc2lnbmF0ZXMgYSBzdWJtZW51LCBhIHRyYWlsaW5n
IFwiLS0tLVwiIGFuXG4iDQogICAgKyJlbXB0eSBzdWJtZW51LlxuIg0KICAgICsiXG4iDQogICAg
KyJNZW51IG5hdmlnYXRpb24ga2V5c1xuIg0KICAgICsiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgICsi
TGluZXdpc2UgdXAgICAgICAgICAgICAgICAgIDxVcD5cbiINCiAgICArIkxpbmV3aXNlIGRvd24g
ICAgICAgICAgICAgICA8RG93bj5cbiINCiAgICArIlBhZ2V3aXNlIHVwICAgICAgICAgICAgICAg
ICA8UGFnZSBVcD5cbiINCiAgICArIlBhZ2V3aXNlIGRvd24gICAgICAgICAgICAgICA8UGFnZSBE
b3duPlxuIg0KICAgICsiRmlyc3QgZW50cnkgICAgICAgICAgICAgICAgIDxIb21lPlxuIg0KICAg
ICsiTGFzdCBlbnRyeSAgICAgICAgICAgICAgICAgIDxFbmQ+XG4iDQogICAgKyJFbnRlciBhIHN1
Ym1lbnUgICAgICAgICAgICAgPFJpZ2h0PiAgPEVudGVyPlxuIg0KICAgICsiR28gYmFjayB0byBw
YXJlbnQgbWVudSAgICAgIDxMZWZ0PiAgIDxFc2M+ICA8RjU+XG4iDQogICAgKyJDbG9zZSBhIGhl
bHAgd2luZG93ICAgICAgICAgPEVudGVyPiAgPEVzYz4gIDxGNT5cbiINCiAgICArIkNsb3NlIGVu
dHJ5IHdpbmRvdywgYXBwbHkgICA8RW50ZXI+XG4iDQogICAgKyJDbG9zZSBlbnRyeSB3aW5kb3cs
IGZvcmdldCAgPEVzYz4gIDxGNT5cbiINCiAgICArIlN0YXJ0IGluY3JlbWVudGFsLCBjYXNlLWlu
c2Vuc2l0aXZlIHNlYXJjaCBmb3IgU1RSSU5HIGluIG1lbnUgZW50cmllcyxcbiINCiAgICArIiAg
ICBubyByZWdleCBzdXBwb3J0LCBTVFJJTkcgaXMgZGlzcGxheWVkIGluIHVwcGVyIGxlZnQgY29y
bmVyXG4iDQogICAgKyIgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+U1RSSU5HXG4iDQog
ICAgKyIgICAgUmVtb3ZlIGxhc3QgY2hhcmFjdGVyICAgPEJhY2tzcGFjZT5cbiINCiAgICArIiAg
ICBKdW1wIHRvIG5leHQgaGl0ICAgICAgICA8RG93bj5cbiINCiAgICArIiAgICBKdW1wIHRvIHBy
ZXZpb3VzIGhpdCAgICA8VXA+XG4iDQogICAgKyJFeGl0IG1lbnUgc2VhcmNoIG1vZGUgICAgICAg
PC8+ICA8RXNjPlxuIg0KICAgICsiU2VhcmNoIGZvciBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyB3
aXRoIG9yIHdpdGhvdXQgbGVhZGluZyBDT05GSUdfXG4iDQogICAgKyIgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPEY4PlJlZ0V4cHI8RW50ZXI+XG4iDQogICAgKyJWZXJib3NlIHNlYXJjaCBo
ZWxwICAgICAgICAgPEY4PjxGMT5cbiINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArIlxu
Ig0KICAgICsiVW5sZXNzIGluIGEgZGF0YSBlbnRyeSB3aW5kb3csIGtleSA8MT4gbWF5IGJlIHVz
ZWQgaW5zdGVhZCBvZiA8RjE+LFxuIg0KICAgICsiPDI+IGluc3RlYWQgb2YgPEYyPiwgZXRjLlxu
Ig0KICAgICsiXG4iDQogICAgKyJcbiINCiAgICArIlJhZGlvbGlzdCAoQ2hvaWNlIGxpc3QpXG4i
DQogICAgKyItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgICsiVXNlIHRoZSBtb3ZlbWVu
dCBrZXlzIGxpc3RlZCBhYm92ZSB0byBzZWxlY3QgdGhlIG9wdGlvbiB5b3Ugd2lzaCB0byBzZXRc
biINCiAgICArImFuZCBwcmVzcyA8U3BhY2U+LlxuIg0KICAgICsiXG4iDQogICAgKyJcbiINCiAg
ICArIkRhdGEgZW50cnlcbiINCiAgICArIi0tLS0tLS0tLS1cbiINCiAgICArIkVudGVyIHRoZSBy
ZXF1ZXN0ZWQgaW5mb3JtYXRpb24gYW5kIHByZXNzIDxFbnRlcj4uICBIZXhhZGVjaW1hbCB2YWx1
ZXNcbiINCiAgICArIm1heSBiZSBlbnRlcmVkIHdpdGhvdXQgdGhlIFwiMHhcIiBwcmVmaXguXG4i
DQogICAgKyJcbiINCiAgICArIlxuIg0KICAgICsiVGV4dCBCb3ggKEhlbHAgV2luZG93KVxuIg0K
ICAgICsiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIg0KICAgICsiVXNlIG1vdmVtZW50IGtleXMg
YXMgbGlzdGVkIGluIHRhYmxlIGFib3ZlLlxuIg0KICAgICsiXG4iDQogICAgKyJQcmVzcyBhbnkg
b2YgPEVudGVyPiA8RXNjPiA8cT4gPEY1PiA8Rjk+IHRvIGV4aXQuXG4iDQogICAgKyJcbiINCiAg
ICArIlxuIg0KICAgICsiQWx0ZXJuYXRlIGNvbmZpZ3VyYXRpb24gZmlsZXNcbiINCiAgICArIi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgKyJuY29uZmlnIHN1cHBvcnRzIHN3
aXRjaGluZyBiZXR3ZWVuIGRpZmZlcmVudCBjb25maWd1cmF0aW9ucy5cbiINCiAgICArIlByZXNz
IDxGNj4gdG8gc2F2ZSB5b3VyIGN1cnJlbnQgY29uZmlndXJhdGlvbi4gIFByZXNzIDxGNz4gYW5k
IGVudGVyXG4iDQogICAgKyJhIGZpbGUgbmFtZSB0byBsb2FkIGEgcHJldmlvdXNseSBzYXZlZCBj
b25maWd1cmF0aW9uLlxuIg0KICAgICsiXG4iDQogICAgKyJcbiINCiAgICArIlRlcm1pbmFsIGNv
bmZpZ3VyYXRpb25cbiINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiINCiAgICArIklm
IHlvdSB1c2UgbmNvbmZpZyBpbiBhIHh0ZXJtIHdpbmRvdywgbWFrZSBzdXJlIHlvdXIgVEVSTSBl
bnZpcm9ubWVudFxuIg0KICAgICsidmFyaWFibGUgc3BlY2lmaWVzIGEgdGVybWluYWwgY29uZmln
dXJhdGlvbiB3aGljaCBzdXBwb3J0cyBhdCBsZWFzdFxuIg0KICAgICsiMTYgY29sb3JzLiAgT3Ro
ZXJ3aXNlIG5jb25maWcgd2lsbCBsb29rIHJhdGhlciBiYWQuXG4iDQogICAgKyJcbiINCiAgICAr
IklmIHRoZSBcInN0dHkgc2l6ZVwiIGNvbW1hbmQgcmVwb3J0cyB0aGUgY3VycmVudCB0ZXJtaW5h
bHNpemUgY29ycmVjdGx5LFxuIg0KICAgICsibmNvbmZpZyB3aWxsIGFkYXB0IHRvIHNpemVzIGxh
cmdlciB0aGFuIHRoZSB0cmFkaXRpb25hbCA4MHgyNSBcInN0YW5kYXJkXCJcbiINCiAgICArImFu
ZCBkaXNwbGF5IGxvbmdlciBtZW51cyBwcm9wZXJseS5cbiINCiAgICArIlxuIg0KICAgICsiXG4i
DQogICAgKyJTaW5nbGUgbWVudSBtb2RlXG4iDQogICAgKyItLS0tLS0tLS0tLS0tLS0tXG4iDQog
ICAgKyJJZiB5b3UgcHJlZmVyIHRvIGhhdmUgYWxsIG9mIHRoZSBtZW51IGVudHJpZXMgbGlzdGVk
IGluIGEgc2luZ2xlIG1lbnUsXG4iDQogICAgKyJyYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBtdWx0
aW1lbnUgaGllcmFyY2h5LCBydW4gbmNvbmZpZyB3aXRoXG4iDQogICAgKyJOQ09ORklHX01PREUg
ZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0IHRvIHNpbmdsZV9tZW51LiAgRXhhbXBsZTpcbiINCiAg
ICArIlxuIg0KICAgICsibWFrZSBOQ09ORklHX01PREU9c2luZ2xlX21lbnUgbmNvbmZpZ1xuIg0K
ICAgICsiXG4iDQogICAgKyI8RW50ZXI+IHdpbGwgdGhlbiB1bmZvbGQgdGhlIGFwcHJvcHJpYXRl
IGNhdGVnb3J5LCBvciBmb2xkIGl0IGlmIGl0XG4iDQogICAgKyJpcyBhbHJlYWR5IHVuZm9sZGVk
LiAgRm9sZGVkIG1lbnUgZW50cmllcyB3aWxsIGJlIGRlc2lnbmF0ZWQgYnkgYVxuIg0KICAgICsi
bGVhZGluZyBcIisrPlwiIGFuZCB1bmZvbGRlZCBlbnRyaWVzIGJ5IGEgbGVhZGluZyBcIi0tPlwi
LlxuIg0KICAgICsiXG4iDQogICAgKyJOb3RlIHRoYXQgdGhpcyBtb2RlIGNhbiBldmVudHVhbGx5
IGJlIGEgbGl0dGxlIG1vcmUgQ1BVIGV4cGVuc2l2ZSB0aGFuXG4iDQogICAgKyJ0aGUgZGVmYXVs
dCBtb2RlLCBlc3BlY2lhbGx5IHdpdGggYSBsYXJnZXIgbnVtYmVyIG9mIHVuZm9sZGVkIHN1Ym1l
bnVzLlxuIg0KICAgICsiXG4iLA0KICAgICttZW51X25vX2ZfaW5zdHJ1Y3Rpb25zW10gPQ0KICAg
ICsiTGVnZW5kOiAgWypdIGJ1aWx0LWluICBbIF0gZXhjbHVkZWQgIDxNPiBtb2R1bGUgIDwgPiBt
b2R1bGUgY2FwYWJsZS5cbiINCiAgICArIlN1Ym1lbnVzIGFyZSBkZXNpZ25hdGVkIGJ5IGEgdHJh
aWxpbmcgXCItLS0+XCIsIGVtcHR5IG9uZXMgYnkgXCItLS0tXCIuXG4iDQogICAgKyJcbiINCiAg
ICArIlVzZSB0aGUgZm9sbG93aW5nIGtleXMgdG8gbmF2aWdhdGUgdGhlIG1lbnVzOlxuIg0KICAg
ICsiTW92ZSB1cCBvciBkb3duIHdpdGggPFVwPiBhbmQgPERvd24+LlxuIg0KICAgICsiRW50ZXIg
YSBzdWJtZW51IHdpdGggPEVudGVyPiBvciA8UmlnaHQ+LlxuIg0KICAgICsiRXhpdCBhIHN1Ym1l
bnUgdG8gaXRzIHBhcmVudCBtZW51IHdpdGggPEVzYz4gb3IgPExlZnQ+LlxuIg0KICAgICsiUHJl
c3NpbmcgPHk+IGluY2x1ZGVzLCA8bj4gZXhjbHVkZXMsIDxtPiBtb2R1bGFyaXplcyBmZWF0dXJl
cy5cbiINCiAgICArIlByZXNzaW5nIDxTcGFjZT4gY3ljbGVzIHRocm91Z2ggdGhlIGF2YWlsYWJs
ZSBvcHRpb25zLlxuIg0KICAgICsiVG8gc2VhcmNoIGZvciBtZW51IGVudHJpZXMgcHJlc3MgPC8+
LlxuIg0KICAgICsiPEVzYz4gYWx3YXlzIGxlYXZlcyB0aGUgY3VycmVudCB3aW5kb3cuXG4iDQog
ICAgKyJcbiINCiAgICArIllvdSBkbyBub3QgaGF2ZSBmdW5jdGlvbiBrZXlzIHN1cHBvcnQuXG4i
DQogICAgKyJQcmVzcyA8MT4gaW5zdGVhZCBvZiA8RjE+LCA8Mj4gaW5zdGVhZCBvZiA8RjI+LCBl
dGMuXG4iDQogICAgKyJGb3IgdmVyYm9zZSBnbG9iYWwgaGVscCB1c2Uga2V5IDwxPi5cbiINCiAg
ICArIkZvciBoZWxwIHJlbGF0ZWQgdG8gdGhlIGN1cnJlbnQgbWVudSBlbnRyeSBwcmVzcyA8Pz4g
b3IgPGg+LlxuIiwNCiAgICArbWVudV9pbnN0cnVjdGlvbnNbXSA9DQogICAgKyJMZWdlbmQ6ICBb
Kl0gYnVpbHQtaW4gIFsgXSBleGNsdWRlZCAgPE0+IG1vZHVsZSAgPCA+IG1vZHVsZSBjYXBhYmxl
LlxuIg0KICAgICsiU3VibWVudXMgYXJlIGRlc2lnbmF0ZWQgYnkgYSB0cmFpbGluZyBcIi0tLT5c
IiwgZW1wdHkgb25lcyBieSBcIi0tLS1cIi5cbiINCiAgICArIlxuIg0KICAgICsiVXNlIHRoZSBm
b2xsb3dpbmcga2V5cyB0byBuYXZpZ2F0ZSB0aGUgbWVudXM6XG4iDQogICAgKyJNb3ZlIHVwIG9y
IGRvd24gd2l0aCA8VXA+IG9yIDxEb3duPi5cbiINCiAgICArIkVudGVyIGEgc3VibWVudSB3aXRo
IDxFbnRlcj4gb3IgPFJpZ2h0Pi5cbiINCiAgICArIkV4aXQgYSBzdWJtZW51IHRvIGl0cyBwYXJl
bnQgbWVudSB3aXRoIDxFc2M+IG9yIDxMZWZ0Pi5cbiINCiAgICArIlByZXNzaW5nIDx5PiBpbmNs
dWRlcywgPG4+IGV4Y2x1ZGVzLCA8bT4gbW9kdWxhcml6ZXMgZmVhdHVyZXMuXG4iDQogICAgKyJQ
cmVzc2luZyA8U3BhY2U+IGN5Y2xlcyB0aHJvdWdoIHRoZSBhdmFpbGFibGUgb3B0aW9ucy5cbiIN
CiAgICArIlRvIHNlYXJjaCBmb3IgbWVudSBlbnRyaWVzIHByZXNzIDwvPi5cbiINCiAgICArIjxF
c2M+IGFsd2F5cyBsZWF2ZXMgdGhlIGN1cnJlbnQgd2luZG93LlxuIg0KICAgICsiXG4iDQogICAg
KyJQcmVzc2luZyA8MT4gbWF5IGJlIHVzZWQgaW5zdGVhZCBvZiA8RjE+LCA8Mj4gaW5zdGVhZCBv
ZiA8RjI+LCBldGMuXG4iDQogICAgKyJGb3IgdmVyYm9zZSBnbG9iYWwgaGVscCBwcmVzcyA8RjE+
LlxuIg0KICAgICsiRm9yIGhlbHAgcmVsYXRlZCB0byB0aGUgY3VycmVudCBtZW51IGVudHJ5IHBy
ZXNzIDw/PiBvciA8aD4uXG4iLA0KICAgICtyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zW10gPQ0KICAg
ICsiUHJlc3MgPFVwPiwgPERvd24+LCA8SG9tZT4gb3IgPEVuZD4gdG8gbmF2aWdhdGUgYSByYWRp
b2xpc3QsIHNlbGVjdFxuIg0KICAgICsid2l0aCA8U3BhY2U+LlxuIg0KICAgICsiRm9yIGhlbHAg
cmVsYXRlZCB0byB0aGUgY3VycmVudCBlbnRyeSBwcmVzcyA8Pz4gb3IgPGg+LlxuIg0KICAgICsi
Rm9yIGdsb2JhbCBoZWxwIHByZXNzIDxGMT4uXG4iLA0KICAgICtpbnB1dGJveF9pbnN0cnVjdGlv
bnNfaW50W10gPQ0KICAgICsiUGxlYXNlIGVudGVyIGEgZGVjaW1hbCB2YWx1ZS5cbiINCiAgICAr
IkZyYWN0aW9ucyB3aWxsIG5vdCBiZSBhY2NlcHRlZC5cbiINCiAgICArIlByZXNzIDxFbnRlcj4g
dG8gYXBwbHksIDxFc2M+IHRvIGNhbmNlbC4iLA0KICAgICtpbnB1dGJveF9pbnN0cnVjdGlvbnNf
aGV4W10gPQ0KICAgICsiUGxlYXNlIGVudGVyIGEgaGV4YWRlY2ltYWwgdmFsdWUuXG4iDQogICAg
KyJQcmVzcyA8RW50ZXI+IHRvIGFwcGx5LCA8RXNjPiB0byBjYW5jZWwuIiwNCiAgICAraW5wdXRi
b3hfaW5zdHJ1Y3Rpb25zX3N0cmluZ1tdID0NCiAgICArIlBsZWFzZSBlbnRlciBhIHN0cmluZyB2
YWx1ZS5cbiINCiAgICArIlByZXNzIDxFbnRlcj4gdG8gYXBwbHksIDxFc2M+IHRvIGNhbmNlbC4i
LA0KICAgICtzZXRtb2RfdGV4dFtdID0NCiAgICArIlRoaXMgZmVhdHVyZSBkZXBlbmRzIG9uIGFu
b3RoZXIgZmVhdHVyZSB3aGljaCBoYXMgYmVlbiBjb25maWd1cmVkIGFzIGFcbiINCiAgICArIm1v
ZHVsZS4gIEFzIGEgcmVzdWx0LCB0aGUgY3VycmVudCBmZWF0dXJlIHdpbGwgYmUgYnVpbHQgYXMg
YSBtb2R1bGUgdG9vLiIsDQogICAgK2xvYWRfY29uZmlnX3RleHRbXSA9DQogICAgKyJFbnRlciB0
aGUgbmFtZSBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHlvdSB3aXNoIHRvIGxvYWQuXG4iDQog
ICAgKyJBY2NlcHQgdGhlIG5hbWUgc2hvd24gdG8gcmVzdG9yZSB0aGUgY29uZmlndXJhdGlvbiB5
b3UgbGFzdFxuIg0KICAgICsicmV0cmlldmVkLiAgTGVhdmUgZW1wdHkgdG8gYWJvcnQuIiwNCiAg
ICArbG9hZF9jb25maWdfaGVscFtdID0NCiAgICArIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBt
YXkgd2lzaCB0byBrZWVwIHNldmVyYWwgZGlmZmVyZW50XG4iDQogICAgKyJjb25maWd1cmF0aW9u
cyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFjaGluZS5cbiINCiAgICArIlxuIg0KICAgICsiSWYg
eW91IGhhdmUgc2F2ZWQgYSBwcmV2aW91cyBjb25maWd1cmF0aW9uIGluIGEgZmlsZSBvdGhlciB0
aGFuIHRoZVxuIg0KICAgICsiZGVmYXVsdCBvbmUsIGVudGVyaW5nIGl0cyBuYW1lIGhlcmUgd2ls
bCBhbGxvdyB5b3UgdG8gbG9hZCBhbmQgbW9kaWZ5XG4iDQogICAgKyJ0aGF0IGNvbmZpZ3VyYXRp
b24uXG4iDQogICAgKyJcbiINCiAgICArIkxlYXZlIGVtcHR5IHRvIGFib3J0LlxuIiwNCiAgICAr
c2F2ZV9jb25maWdfdGV4dFtdID0NCiAgICArIkVudGVyIGEgZmlsZW5hbWUgdG8gd2hpY2ggdGhp
cyBjb25maWd1cmF0aW9uIHNob3VsZCBiZSBzYXZlZFxuIg0KICAgICsiYXMgYW4gYWx0ZXJuYXRl
LiAgTGVhdmUgZW1wdHkgdG8gYWJvcnQuIiwNCiAgICArc2F2ZV9jb25maWdfaGVscFtdID0NCiAg
ICArIkZvciB2YXJpb3VzIHJlYXNvbnMsIG9uZSBtYXkgd2lzaCB0byBrZWVwIHNldmVyYWwgZGlm
ZmVyZW50XG4iDQogICAgKyJjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgb24gYSBzaW5nbGUgbWFj
aGluZS5cbiINCiAgICArIlxuIg0KICAgICsiRW50ZXJpbmcgYSBmaWxlIG5hbWUgaGVyZSB3aWxs
IGFsbG93IHlvdSB0byBsYXRlciByZXRyaWV2ZSwgbW9kaWZ5XG4iDQogICAgKyJhbmQgdXNlIHRo
ZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gYXMgYW4gYWx0ZXJuYXRlIHRvIHdoYXRldmVyXG4iDQog
ICAgKyJjb25maWd1cmF0aW9uIG9wdGlvbnMgeW91IGhhdmUgc2VsZWN0ZWQgYXQgdGhhdCB0aW1l
LlxuIg0KICAgICsiXG4iDQogICAgKyJMZWF2ZSBlbXB0eSB0byBhYm9ydC5cbiIsDQogICAgK3Nl
YXJjaF9oZWxwW10gPQ0KICAgICsiU2VhcmNoIGZvciBzeW1ib2xzIChjb25maWd1cmF0aW9uIHZh
cmlhYmxlIG5hbWVzIENPTkZJR18qKSBhbmQgZGlzcGxheVxuIg0KICAgICsidGhlaXIgcmVsYXRp
b25zLiAgUmVndWxhciBleHByZXNzaW9ucyBhcmUgc3VwcG9ydGVkLlxuIg0KICAgICsiRXhhbXBs
ZTogIFNlYXJjaCBmb3IgXCJeRk9PXCIuXG4iDQogICAgKyJSZXN1bHQ6XG4iDQogICAgKyItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIg0KICAgICsiU3ltYm9sOiBGT08gWyA9IG1dXG4iDQogICAgKyJQcm9tcHQ6IEZvbyBi
dXMgaXMgdXNlZCB0byBkcml2ZSB0aGUgYmFyIEhXXG4iDQogICAgKyJEZWZpbmVkIGF0IGRyaXZl
cnMvcGNpL0tjb25maWc6NDdcbiINCiAgICArIkRlcGVuZHMgb246IFg4Nl9MT0NBTF9BUElDICYm
IFg4Nl9JT19BUElDIHx8IElBNjRcbiINCiAgICArIkxvY2F0aW9uOlxuIg0KICAgICsiICAtPiBC
dXMgb3B0aW9ucyAoUENJLCBQQ01DSUEsIEVJU0EsIElTQSlcbiINCiAgICArIiAgICAtPiBQQ0kg
c3VwcG9ydCAoUENJIFsgPSB5XSlcbiINCiAgICArIiAgICAgIC0+IFBDSSBhY2Nlc3MgbW9kZSAo
PGNob2ljZT4gWyA9IHldKVxuIg0KICAgICsiU2VsZWN0czogTElCQ1JDMzJcbiINCiAgICArIlNl
bGVjdGVkIGJ5OiBCQVJcbiINCiAgICArIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iDQogICAgKyJvICBUaGUgbGluZSAn
UHJvbXB0Oicgc2hvd3MgdGhlIHRleHQgZGlzcGxheWVkIGZvciB0aGlzIHN5bWJvbCBpblxuIg0K
ICAgICsiICAgdGhlIG1lbnUgaGllcmFyY2h5LlxuIg0KICAgICsibyAgVGhlICdEZWZpbmVkIGF0
JyBsaW5lIHRlbGxzIGF0IHdoYXQgZmlsZSAvIGxpbmUgbnVtYmVyIHRoZSBzeW1ib2wgaXNcbiIN
CiAgICArIiAgIGRlZmluZWQuXG4iDQogICAgKyJvICBUaGUgJ0RlcGVuZHMgb246JyBsaW5lIGxp
c3RzIHN5bWJvbHMgdGhhdCBuZWVkIHRvIGJlIGRlZmluZWQgZm9yXG4iDQogICAgKyIgICB0aGlz
IHN5bWJvbCB0byBiZSB2aXNpYmxlIGFuZCBzZWxlY3RhYmxlIGluIHRoZSBtZW51LlxuIg0KICAg
ICsibyAgVGhlICdMb2NhdGlvbjonIGxpbmVzIHRlbGwsIHdoZXJlIGluIHRoZSBtZW51IHN0cnVj
dHVyZSB0aGlzIHN5bWJvbFxuIg0KICAgICsiICAgaXMgbG9jYXRlZC4gIEEgbG9jYXRpb24gZm9s
bG93ZWQgYnkgYSBbID0geV0gaW5kaWNhdGVzIHRoYXQgdGhpcyBpc1xuIg0KICAgICsiICAgYSBz
ZWxlY3RhYmxlIG1lbnUgaXRlbSwgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIGRpc3BsYXllZCBp
bnNpZGVcbiINCiAgICArIiAgIGJyYWNrZXRzLlxuIg0KICAgICsibyAgVGhlICdTZWxlY3RzOicg
bGluZSB0ZWxscywgd2hhdCBzeW1ib2wgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkXG4i
DQogICAgKyIgICBpZiB0aGlzIHN5bWJvbCBpcyBzZWxlY3RlZCAoeSBvciBtKS5cbiINCiAgICAr
Im8gIFRoZSAnU2VsZWN0ZWQgYnknIGxpbmUgdGVsbHMgd2hhdCBzeW1ib2wgaGFzIHNlbGVjdGVk
IHRoaXMgc3ltYm9sLlxuIg0KICAgICsiXG4iDQogICAgKyJPbmx5IHJlbGV2YW50IGxpbmVzIGFy
ZSBzaG93bi5cbiINCiAgICArIlxuXG4iDQogICAgKyJTZWFyY2ggZXhhbXBsZXM6XG4iDQogICAg
KyJVU0IgID0+IGZpbmQgYWxsIHN5bWJvbHMgY29udGFpbmluZyBVU0JcbiINCiAgICArIl5VU0Ig
PT4gZmluZCBhbGwgc3ltYm9scyBzdGFydGluZyB3aXRoIFVTQlxuIg0KICAgICsiVVNCJCA9PiBm
aW5kIGFsbCBzeW1ib2xzIGVuZGluZyB3aXRoIFVTQlxuIg0KICAgICsiXG4iOw0KICAgICsNCiAg
ICArc3RydWN0IG1pdGVtIHsNCiAgICArCWNoYXIgc3RyWzI1Nl07DQogICAgKwljaGFyIHRhZzsN
CiAgICArCXZvaWQgKnVzcnB0cjsNCiAgICArCWludCBpc192aXNpYmxlOw0KICAgICt9Ow0KICAg
ICsNCiAgICArI2RlZmluZSBNQVhfTUVOVV9JVEVNUyA0MDk2DQogICAgK3N0YXRpYyBpbnQgc2hv
d19hbGxfaXRlbXM7DQogICAgK3N0YXRpYyBpbnQgaW5kZW50Ow0KICAgICtzdGF0aWMgc3RydWN0
IG1lbnUgKmN1cnJlbnRfbWVudTsNCiAgICArc3RhdGljIGludCBjaGlsZF9jb3VudDsNCiAgICAr
c3RhdGljIGludCBzaW5nbGVfbWVudV9tb2RlOw0KICAgICsvKiB0aGUgd2luZG93IGluIHdoaWNo
IGFsbCBpbmZvcm1hdGlvbiBhcHBlYXJzICovDQogICAgK3N0YXRpYyBXSU5ET1cgKm1haW5fd2lu
ZG93Ow0KICAgICsvKiB0aGUgbGFyZ2VzdCBzaXplIG9mIHRoZSBtZW51IHdpbmRvdyAqLw0KICAg
ICtzdGF0aWMgaW50IG13aW5fbWF4X2xpbmVzOw0KICAgICtzdGF0aWMgaW50IG13aW5fbWF4X2Nv
bHM7DQogICAgKy8qIHRoZSB3aW5kb3cgaW4gd2hpY2ggd2Ugc2hvdyBvcHRpb24gYnV0dG9ucyAq
Lw0KICAgICtzdGF0aWMgTUVOVSAqY3Vyc2VzX21lbnU7DQogICAgK3N0YXRpYyBJVEVNICpjdXJz
ZXNfbWVudV9pdGVtc1tNQVhfTUVOVV9JVEVNU107DQogICAgK3N0YXRpYyBzdHJ1Y3QgbWl0ZW0g
a19tZW51X2l0ZW1zW01BWF9NRU5VX0lURU1TXTsNCiAgICArc3RhdGljIGludCBpdGVtc19udW07
DQogICAgK3N0YXRpYyBpbnQgZ2xvYmFsX2V4aXQ7DQogICAgKy8qIHRoZSBjdXJyZW50bHkgc2Vs
ZWN0ZWQgYnV0dG9uICovDQogICAgK3N0YXRpYyBjb25zdCBjaGFyICpjdXJyZW50X2luc3RydWN0
aW9ucyA9IG1lbnVfaW5zdHJ1Y3Rpb25zOw0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKmRpYWxv
Z19pbnB1dF9yZXN1bHQ7DQogICAgK3N0YXRpYyBpbnQgZGlhbG9nX2lucHV0X3Jlc3VsdF9sZW47
DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mKHN0cnVjdCBtZW51ICptZW51KTsNCiAgICAr
c3RhdGljIHZvaWQgY29uZl9jaG9pY2Uoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtzdGF0aWMg
dm9pZCBjb25mX3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgK3N0YXRpYyB2b2lkIGNv
bmZfbG9hZCh2b2lkKTsNCiAgICArc3RhdGljIHZvaWQgY29uZl9zYXZlKHZvaWQpOw0KICAgICtz
dGF0aWMgdm9pZCBzaG93X2hlbHAoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICtzdGF0aWMgaW50
IGRvX2V4aXQodm9pZCk7DQogICAgK3N0YXRpYyB2b2lkIHNldHVwX3dpbmRvd3Modm9pZCk7DQog
ICAgK3N0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpOw0KICAgICsNCiAgICArdHlwZWRlZiB2
b2lkICgqZnVuY3Rpb25fa2V5X2hhbmRsZXJfdCkoaW50ICprZXksIHN0cnVjdCBtZW51ICptZW51
KTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2YxKGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3Vy
cmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2YyKGludCAqa2V5LCBzdHJ1Y3Qg
bWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2YzKGludCAqa2V5
LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y0
KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQg
aGFuZGxlX2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArc3Rh
dGljIHZvaWQgaGFuZGxlX2Y2KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsN
CiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y3KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVu
dF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3QgbWVu
dSAqY3VycmVudF9pdGVtKTsNCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y5KGludCAqa2V5LCBz
dHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKTsNCiAgICArDQogICAgK3N0cnVjdCBmdW5jdGlvbl9r
ZXlzIHsNCiAgICArCWNvbnN0IGNoYXIgKmtleV9zdHI7DQogICAgKwljb25zdCBjaGFyICpmdW5j
Ow0KICAgICsJZnVuY3Rpb25fa2V5IGtleTsNCiAgICArCWZ1bmN0aW9uX2tleV9oYW5kbGVyX3Qg
aGFuZGxlcjsNCiAgICArfTsNCiAgICArDQogICAgK3N0YXRpYyBjb25zdCBpbnQgZnVuY3Rpb25f
a2V5c19udW0gPSA5Ow0KICAgICtzdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2tleXMgZnVuY3Rpb25f
a2V5c1tdID0gew0KICAgICsJew0KICAgICsJCS5rZXlfc3RyID0gIkYxIiwNCiAgICArCQkuZnVu
YyA9ICJIZWxwIiwNCiAgICArCQkua2V5ID0gRl9IRUxQLA0KICAgICsJCS5oYW5kbGVyID0gaGFu
ZGxlX2YxLA0KICAgICsJfSwNCiAgICArCXsNCiAgICArCQkua2V5X3N0ciA9ICJGMiIsDQogICAg
KwkJLmZ1bmMgPSAiU3ltSW5mbyIsDQogICAgKwkJLmtleSA9IEZfU1lNQk9MLA0KICAgICsJCS5o
YW5kbGVyID0gaGFuZGxlX2YyLA0KICAgICsJfSwNCiAgICArCXsNCiAgICArCQkua2V5X3N0ciA9
ICJGMyIsDQogICAgKwkJLmZ1bmMgPSAiSGVscCAyIiwNCiAgICArCQkua2V5ID0gRl9JTlNUUywN
CiAgICArCQkuaGFuZGxlciA9IGhhbmRsZV9mMywNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkJ
LmtleV9zdHIgPSAiRjQiLA0KICAgICsJCS5mdW5jID0gIlNob3dBbGwiLA0KICAgICsJCS5rZXkg
PSBGX0NPTkYsDQogICAgKwkJLmhhbmRsZXIgPSBoYW5kbGVfZjQsDQogICAgKwl9LA0KICAgICsJ
ew0KICAgICsJCS5rZXlfc3RyID0gIkY1IiwNCiAgICArCQkuZnVuYyA9ICJCYWNrIiwNCiAgICAr
CQkua2V5ID0gRl9CQUNLLA0KICAgICsJCS5oYW5kbGVyID0gaGFuZGxlX2Y1LA0KICAgICsJfSwN
CiAgICArCXsNCiAgICArCQkua2V5X3N0ciA9ICJGNiIsDQogICAgKwkJLmZ1bmMgPSAiU2F2ZSIs
DQogICAgKwkJLmtleSA9IEZfU0FWRSwNCiAgICArCQkuaGFuZGxlciA9IGhhbmRsZV9mNiwNCiAg
ICArCX0sDQogICAgKwl7DQogICAgKwkJLmtleV9zdHIgPSAiRjciLA0KICAgICsJCS5mdW5jID0g
IkxvYWQiLA0KICAgICsJCS5rZXkgPSBGX0xPQUQsDQogICAgKwkJLmhhbmRsZXIgPSBoYW5kbGVf
ZjcsDQogICAgKwl9LA0KICAgICsJew0KICAgICsJCS5rZXlfc3RyID0gIkY4IiwNCiAgICArCQku
ZnVuYyA9ICJTeW1TZWFyY2giLA0KICAgICsJCS5rZXkgPSBGX1NFQVJDSCwNCiAgICArCQkuaGFu
ZGxlciA9IGhhbmRsZV9mOCwNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkJLmtleV9zdHIgPSAi
RjkiLA0KICAgICsJCS5mdW5jID0gIkV4aXQiLA0KICAgICsJCS5rZXkgPSBGX0VYSVQsDQogICAg
KwkJLmhhbmRsZXIgPSBoYW5kbGVfZjksDQogICAgKwl9LA0KICAgICt9Ow0KICAgICsNCiAgICAr
c3RhdGljIHZvaWQgcHJpbnRfZnVuY3Rpb25fbGluZSh2b2lkKQ0KICAgICt7DQogICAgKwlpbnQg
aTsNCiAgICArCWludCBvZmZzZXQgPSAxOw0KICAgICsJY29uc3QgaW50IHNraXAgPSAxOw0KICAg
ICsJaW50IGxpbmVzID0gZ2V0bWF4eShzdGRzY3IpOw0KICAgICsNCiAgICArCWZvciAoaSA9IDA7
IGkgPCBmdW5jdGlvbl9rZXlzX251bTsgaSsrKSB7DQogICAgKwkJKHZvaWQpIHdhdHRyc2V0KG1h
aW5fd2luZG93LCBhdHRyaWJ1dGVzW0ZVTkNUSU9OX0hJR0hMSUdIVF0pOw0KICAgICsJCW12d3By
aW50dyhtYWluX3dpbmRvdywgbGluZXMtMywgb2Zmc2V0LA0KICAgICsJCQkJIiVzIiwNCiAgICAr
CQkJCWZ1bmN0aW9uX2tleXNbaV0ua2V5X3N0cik7DQogICAgKwkJKHZvaWQpIHdhdHRyc2V0KG1h
aW5fd2luZG93LCBhdHRyaWJ1dGVzW0ZVTkNUSU9OX1RFWFRdKTsNCiAgICArCQlvZmZzZXQgKz0g
c3RybGVuKGZ1bmN0aW9uX2tleXNbaV0ua2V5X3N0cik7DQogICAgKwkJbXZ3cHJpbnR3KG1haW5f
d2luZG93LCBsaW5lcy0zLA0KICAgICsJCQkJb2Zmc2V0LCAiJXMiLA0KICAgICsJCQkJZnVuY3Rp
b25fa2V5c1tpXS5mdW5jKTsNCiAgICArCQlvZmZzZXQgKz0gc3RybGVuKGZ1bmN0aW9uX2tleXNb
aV0uZnVuYykgKyBza2lwOw0KICAgICsJfQ0KICAgICsJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2lu
ZG93LCBhdHRyaWJ1dGVzW05PUk1BTF0pOw0KICAgICt9DQogICAgKw0KICAgICsvKiBoZWxwICov
DQogICAgK3N0YXRpYyB2b2lkIGhhbmRsZV9mMShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJl
bnRfaXRlbSkNCiAgICArew0KICAgICsJc2hvd19zY3JvbGxfd2luKG1haW5fd2luZG93LA0KICAg
ICsJCQkiR2xvYmFsIGhlbHAiLCBuY29uZl9nbG9iYWxfaGVscCk7DQogICAgKwlyZXR1cm47DQog
ICAgK30NCiAgICArDQogICAgKy8qIHN5bWJvbGUgaGVscCAqLw0KICAgICtzdGF0aWMgdm9pZCBo
YW5kbGVfZjIoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgK3sNCiAg
ICArCXNob3dfaGVscChjdXJyZW50X2l0ZW0pOw0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAg
Kw0KICAgICsvKiBpbnN0cnVjdGlvbnMgKi8NCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2YzKGlu
dCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0KICAgICt7DQogICAgKwlzaG93X3Nj
cm9sbF93aW4obWFpbl93aW5kb3csDQogICAgKwkJCSJTaG9ydCBoZWxwIiwNCiAgICArCQkJY3Vy
cmVudF9pbnN0cnVjdGlvbnMpOw0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsv
KiBjb25maWcgKi8NCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y0KGludCAqa2V5LCBzdHJ1Y3Qg
bWVudSAqY3VycmVudF9pdGVtKQ0KICAgICt7DQogICAgKwlpbnQgcmVzID0gYnRuX2RpYWxvZyht
YWluX3dpbmRvdywNCiAgICArCQkJIlNob3cgYWxsIHN5bWJvbHM/IiwNCiAgICArCQkJMiwNCiAg
ICArCQkJIiAgIDxTaG93IEFsbD4gICAiLA0KICAgICsJCQkiPERvbid0IHNob3cgYWxsPiIpOw0K
ICAgICsJaWYgKHJlcyA9PSAwKQ0KICAgICsJCXNob3dfYWxsX2l0ZW1zID0gMTsNCiAgICArCWVs
c2UgaWYgKHJlcyA9PSAxKQ0KICAgICsJCXNob3dfYWxsX2l0ZW1zID0gMDsNCiAgICArDQogICAg
KwlyZXR1cm47DQogICAgK30NCiAgICArDQogICAgKy8qIGJhY2sgKi8NCiAgICArc3RhdGljIHZv
aWQgaGFuZGxlX2Y1KGludCAqa2V5LCBzdHJ1Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0KICAgICt7
DQogICAgKwkqa2V5ID0gS0VZX0xFRlQ7DQogICAgKwlyZXR1cm47DQogICAgK30NCiAgICArDQog
ICAgKy8qIHNhdmUgKi8NCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y2KGludCAqa2V5LCBzdHJ1
Y3QgbWVudSAqY3VycmVudF9pdGVtKQ0KICAgICt7DQogICAgKwljb25mX3NhdmUoKTsNCiAgICAr
CXJldHVybjsNCiAgICArfQ0KICAgICsNCiAgICArLyogbG9hZCAqLw0KICAgICtzdGF0aWMgdm9p
ZCBoYW5kbGVfZjcoaW50ICprZXksIHN0cnVjdCBtZW51ICpjdXJyZW50X2l0ZW0pDQogICAgK3sN
CiAgICArCWNvbmZfbG9hZCgpOw0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsv
KiBzZWFyY2ggKi8NCiAgICArc3RhdGljIHZvaWQgaGFuZGxlX2Y4KGludCAqa2V5LCBzdHJ1Y3Qg
bWVudSAqY3VycmVudF9pdGVtKQ0KICAgICt7DQogICAgKwlzZWFyY2hfY29uZigpOw0KICAgICsJ
cmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsvKiBleGl0ICovDQogICAgK3N0YXRpYyB2b2lk
IGhhbmRsZV9mOShpbnQgKmtleSwgc3RydWN0IG1lbnUgKmN1cnJlbnRfaXRlbSkNCiAgICArew0K
ICAgICsJZG9fZXhpdCgpOw0KICAgICsJcmV0dXJuOw0KICAgICt9DQogICAgKw0KICAgICsvKiBy
ZXR1cm4gIT0gMCB0byBpbmRpY2F0ZSB0aGUga2V5IHdhcyBoYW5kbGVzICovDQogICAgK3N0YXRp
YyBpbnQgcHJvY2Vzc19zcGVjaWFsX2tleXMoaW50ICprZXksIHN0cnVjdCBtZW51ICptZW51KQ0K
ICAgICt7DQogICAgKwlpbnQgaTsNCiAgICArDQogICAgKwlpZiAoKmtleSA9PSBLRVlfUkVTSVpF
KSB7DQogICAgKwkJc2V0dXBfd2luZG93cygpOw0KICAgICsJCXJldHVybiAxOw0KICAgICsJfQ0K
ICAgICsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBmdW5jdGlvbl9rZXlzX251bTsgaSsrKSB7DQog
ICAgKwkJaWYgKCprZXkgPT0gS0VZX0YoZnVuY3Rpb25fa2V5c1tpXS5rZXkpIHx8DQogICAgKwkJ
ICAgICprZXkgPT0gJzAnICsgZnVuY3Rpb25fa2V5c1tpXS5rZXkpew0KICAgICsJCQlmdW5jdGlv
bl9rZXlzW2ldLmhhbmRsZXIoa2V5LCBtZW51KTsNCiAgICArCQkJcmV0dXJuIDE7DQogICAgKwkJ
fQ0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtz
dGF0aWMgdm9pZCBjbGVhbl9pdGVtcyh2b2lkKQ0KICAgICt7DQogICAgKwlpbnQgaTsNCiAgICAr
CWZvciAoaSA9IDA7IGN1cnNlc19tZW51X2l0ZW1zW2ldOyBpKyspDQogICAgKwkJZnJlZV9pdGVt
KGN1cnNlc19tZW51X2l0ZW1zW2ldKTsNCiAgICArCWJ6ZXJvKGN1cnNlc19tZW51X2l0ZW1zLCBz
aXplb2YoY3Vyc2VzX21lbnVfaXRlbXMpKTsNCiAgICArCWJ6ZXJvKGtfbWVudV9pdGVtcywgc2l6
ZW9mKGtfbWVudV9pdGVtcykpOw0KICAgICsJaXRlbXNfbnVtID0gMDsNCiAgICArfQ0KICAgICsN
CiAgICArdHlwZWRlZiBlbnVtIHtNQVRDSF9USU5LRVJfUEFUVEVSTl9VUCwgTUFUQ0hfVElOS0VS
X1BBVFRFUk5fRE9XTiwNCiAgICArCUZJTkRfTkVYVF9NQVRDSF9ET1dOLCBGSU5EX05FWFRfTUFU
Q0hfVVB9IG1hdGNoX2Y7DQogICAgKw0KICAgICsvKiByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBt
YXRjaGVkIGl0ZW0sIG9yIC0xIGlmIG5vIHN1Y2ggaXRlbSBleGlzdHMgKi8NCiAgICArc3RhdGlj
IGludCBnZXRfbWV4dF9tYXRjaChjb25zdCBjaGFyICptYXRjaF9zdHIsIG1hdGNoX2YgZmxhZykN
CiAgICArew0KICAgICsJaW50IG1hdGNoX3N0YXJ0ID0gaXRlbV9pbmRleChjdXJyZW50X2l0ZW0o
Y3Vyc2VzX21lbnUpKTsNCiAgICArCWludCBpbmRleDsNCiAgICArDQogICAgKwlpZiAoZmxhZyA9
PSBGSU5EX05FWFRfTUFUQ0hfRE9XTikNCiAgICArCQkrK21hdGNoX3N0YXJ0Ow0KICAgICsJZWxz
ZSBpZiAoZmxhZyA9PSBGSU5EX05FWFRfTUFUQ0hfVVApDQogICAgKwkJLS1tYXRjaF9zdGFydDsN
CiAgICArDQogICAgKwlpbmRleCA9IG1hdGNoX3N0YXJ0Ow0KICAgICsJaW5kZXggPSAoaW5kZXgg
KyBpdGVtc19udW0pICUgaXRlbXNfbnVtOw0KICAgICsJd2hpbGUgKHRydWUpIHsNCiAgICArCQlj
aGFyICpzdHIgPSBrX21lbnVfaXRlbXNbaW5kZXhdLnN0cjsNCiAgICArCQlpZiAoc3RyY2FzZXN0
cihzdHIsIG1hdGNoX3N0cikgIT0gTlVMTCkNCiAgICArCQkJcmV0dXJuIGluZGV4Ow0KICAgICsJ
CWlmIChmbGFnID09IEZJTkRfTkVYVF9NQVRDSF9VUCB8fA0KICAgICsJCSAgICBmbGFnID09IE1B
VENIX1RJTktFUl9QQVRURVJOX1VQKQ0KICAgICsJCQktLWluZGV4Ow0KICAgICsJCWVsc2UNCiAg
ICArCQkJKytpbmRleDsNCiAgICArCQlpbmRleCA9IChpbmRleCArIGl0ZW1zX251bSkgJSBpdGVt
c19udW07DQogICAgKwkJaWYgKGluZGV4ID09IG1hdGNoX3N0YXJ0KQ0KICAgICsJCQlyZXR1cm4g
LTE7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qIE1ha2UgYSBuZXcgaXRlbS4gKi8N
CiAgICArc3RhdGljIHZvaWQgaXRlbV9tYWtlKHN0cnVjdCBtZW51ICptZW51LCBjaGFyIHRhZywg
Y29uc3QgY2hhciAqZm10LCAuLi4pDQogICAgK3sNCiAgICArCXZhX2xpc3QgYXA7DQogICAgKw0K
ICAgICsJaWYgKGl0ZW1zX251bSA+IE1BWF9NRU5VX0lURU1TLTEpDQogICAgKwkJcmV0dXJuOw0K
ICAgICsNCiAgICArCWJ6ZXJvKCZrX21lbnVfaXRlbXNbaXRlbXNfbnVtXSwgc2l6ZW9mKGtfbWVu
dV9pdGVtc1swXSkpOw0KICAgICsJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0udGFnID0gdGFnOw0K
ICAgICsJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0udXNycHRyID0gbWVudTsNCiAgICArCWlmICht
ZW51ICE9IE5VTEwpDQogICAgKwkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uaXNfdmlzaWJsZSA9
DQogICAgKwkJCW1lbnVfaXNfdmlzaWJsZShtZW51KTsNCiAgICArCWVsc2UNCiAgICArCQlrX21l
bnVfaXRlbXNbaXRlbXNfbnVtXS5pc192aXNpYmxlID0gMTsNCiAgICArDQogICAgKwl2YV9zdGFy
dChhcCwgZm10KTsNCiAgICArCXZzbnByaW50ZihrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIs
DQogICAgKwkJICBzaXplb2Yoa19tZW51X2l0ZW1zW2l0ZW1zX251bV0uc3RyKSwNCiAgICArCQkg
IGZtdCwgYXApOw0KICAgICsJdmFfZW5kKGFwKTsNCiAgICArDQogICAgKwlpZiAoIWtfbWVudV9p
dGVtc1tpdGVtc19udW1dLmlzX3Zpc2libGUpDQogICAgKwkJbWVtY3B5KGtfbWVudV9pdGVtc1tp
dGVtc19udW1dLnN0ciwgIlhYWCIsIDMpOw0KICAgICsNCiAgICArCWN1cnNlc19tZW51X2l0ZW1z
W2l0ZW1zX251bV0gPSBuZXdfaXRlbSgNCiAgICArCQkJa19tZW51X2l0ZW1zW2l0ZW1zX251bV0u
c3RyLA0KICAgICsJCQlrX21lbnVfaXRlbXNbaXRlbXNfbnVtXS5zdHIpOw0KICAgICsJc2V0X2l0
ZW1fdXNlcnB0cihjdXJzZXNfbWVudV9pdGVtc1tpdGVtc19udW1dLA0KICAgICsJCQkma19tZW51
X2l0ZW1zW2l0ZW1zX251bV0pOw0KICAgICsJLyoNCiAgICArCWlmICgha19tZW51X2l0ZW1zW2l0
ZW1zX251bV0uaXNfdmlzaWJsZSkNCiAgICArCQlpdGVtX29wdHNfb2ZmKGN1cnNlc19tZW51X2l0
ZW1zW2l0ZW1zX251bV0sIE9fU0VMRUNUQUJMRSk7DQogICAgKwkqLw0KICAgICsNCiAgICArCWl0
ZW1zX251bSsrOw0KICAgICsJY3Vyc2VzX21lbnVfaXRlbXNbaXRlbXNfbnVtXSA9IE5VTEw7DQog
ICAgK30NCiAgICArDQogICAgKy8qIHZlcnkgaGFja2lzaC4gYWRkcyBhIHN0cmluZyB0byB0aGUg
bGFzdCBpdGVtIGFkZGVkICovDQogICAgK3N0YXRpYyB2b2lkIGl0ZW1fYWRkX3N0cihjb25zdCBj
aGFyICpmbXQsIC4uLikNCiAgICArew0KICAgICsJdmFfbGlzdCBhcDsNCiAgICArCWludCBpbmRl
eCA9IGl0ZW1zX251bS0xOw0KICAgICsJY2hhciBuZXdfc3RyWzI1Nl07DQogICAgKwljaGFyIHRt
cF9zdHJbMjU2XTsNCiAgICArDQogICAgKwlpZiAoaW5kZXggPCAwKQ0KICAgICsJCXJldHVybjsN
CiAgICArDQogICAgKwl2YV9zdGFydChhcCwgZm10KTsNCiAgICArCXZzbnByaW50ZihuZXdfc3Ry
LCBzaXplb2YobmV3X3N0ciksIGZtdCwgYXApOw0KICAgICsJdmFfZW5kKGFwKTsNCiAgICArCXNu
cHJpbnRmKHRtcF9zdHIsIHNpemVvZih0bXBfc3RyKSwgIiVzJXMiLA0KICAgICsJCQlrX21lbnVf
aXRlbXNbaW5kZXhdLnN0ciwgbmV3X3N0cik7DQogICAgKwlzdHJuY3B5KGtfbWVudV9pdGVtc1tp
bmRleF0uc3RyLA0KICAgICsJCXRtcF9zdHIsDQogICAgKwkJc2l6ZW9mKGtfbWVudV9pdGVtc1tp
bmRleF0uc3RyKSk7DQogICAgKw0KICAgICsJZnJlZV9pdGVtKGN1cnNlc19tZW51X2l0ZW1zW2lu
ZGV4XSk7DQogICAgKwljdXJzZXNfbWVudV9pdGVtc1tpbmRleF0gPSBuZXdfaXRlbSgNCiAgICAr
CQkJa19tZW51X2l0ZW1zW2luZGV4XS5zdHIsDQogICAgKwkJCWtfbWVudV9pdGVtc1tpbmRleF0u
c3RyKTsNCiAgICArCXNldF9pdGVtX3VzZXJwdHIoY3Vyc2VzX21lbnVfaXRlbXNbaW5kZXhdLA0K
ICAgICsJCQkma19tZW51X2l0ZW1zW2luZGV4XSk7DQogICAgK30NCiAgICArDQogICAgKy8qIGdl
dCB0aGUgdGFnIG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbSAqLw0KICAgICtzdGF0aWMg
Y2hhciBpdGVtX3RhZyh2b2lkKQ0KICAgICt7DQogICAgKwlJVEVNICpjdXI7DQogICAgKwlzdHJ1
Y3QgbWl0ZW0gKm1jdXI7DQogICAgKw0KICAgICsJY3VyID0gY3VycmVudF9pdGVtKGN1cnNlc19t
ZW51KTsNCiAgICArCWlmIChjdXIgPT0gTlVMTCkNCiAgICArCQlyZXR1cm4gMDsNCiAgICArCW1j
dXIgPSAoc3RydWN0IG1pdGVtICopIGl0ZW1fdXNlcnB0cihjdXIpOw0KICAgICsJcmV0dXJuIG1j
dXItPnRhZzsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGludCBjdXJzZXNfaXRlbV9pbmRl
eCh2b2lkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gIGl0ZW1faW5kZXgoY3VycmVudF9pdGVtKGN1
cnNlc19tZW51KSk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkICppdGVtX2RhdGEo
dm9pZCkNCiAgICArew0KICAgICsJSVRFTSAqY3VyOw0KICAgICsJc3RydWN0IG1pdGVtICptY3Vy
Ow0KICAgICsNCiAgICArCWN1ciA9IGN1cnJlbnRfaXRlbShjdXJzZXNfbWVudSk7DQogICAgKwlp
ZiAoIWN1cikNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArCW1jdXIgPSAoc3RydWN0IG1pdGVt
ICopIGl0ZW1fdXNlcnB0cihjdXIpOw0KICAgICsJcmV0dXJuIG1jdXItPnVzcnB0cjsNCiAgICAr
DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBpbnQgaXRlbV9pc190YWcoY2hhciB0YWcpDQog
ICAgK3sNCiAgICArCXJldHVybiBpdGVtX3RhZygpID09IHRhZzsNCiAgICArfQ0KICAgICsNCiAg
ICArc3RhdGljIGNoYXIgZmlsZW5hbWVbUEFUSF9NQVgrMV07DQogICAgK3N0YXRpYyBjaGFyIG1l
bnVfYmFja3RpdGxlW1BBVEhfTUFYKzEyOF07DQogICAgK3N0YXRpYyBjb25zdCBjaGFyICpzZXRf
Y29uZmlnX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSkNCiAgICArew0KICAg
ICsJaW50IHNpemU7DQogICAgKw0KICAgICsJc2l6ZSA9IHNucHJpbnRmKG1lbnVfYmFja3RpdGxl
LCBzaXplb2YobWVudV9iYWNrdGl0bGUpLA0KICAgICsJCQkiJXMgLSAlcyIsIGNvbmZpZ19maWxl
bmFtZSwgcm9vdG1lbnUucHJvbXB0LT50ZXh0KTsNCiAgICArCWlmIChzaXplID49IHNpemVvZiht
ZW51X2JhY2t0aXRsZSkpDQogICAgKwkJbWVudV9iYWNrdGl0bGVbc2l6ZW9mKG1lbnVfYmFja3Rp
dGxlKS0xXSA9ICdcMCc7DQogICAgKw0KICAgICsJc2l6ZSA9IHNucHJpbnRmKGZpbGVuYW1lLCBz
aXplb2YoZmlsZW5hbWUpLCAiJXMiLCBjb25maWdfZmlsZW5hbWUpOw0KICAgICsJaWYgKHNpemUg
Pj0gc2l6ZW9mKGZpbGVuYW1lKSkNCiAgICArCQlmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFd
ID0gJ1wwJzsNCiAgICArCXJldHVybiBtZW51X2JhY2t0aXRsZTsNCiAgICArfQ0KICAgICsNCiAg
ICArLyogcmV0dXJuID0gMCBtZWFucyB3ZSBhcmUgc3VjY2Vzc2Z1bC4NCiAgICArICogLTEgbWVh
bnMgZ28gb24gZG9pbmcgd2hhdCB5b3Ugd2VyZSBkb2luZw0KICAgICsgKi8NCiAgICArc3RhdGlj
IGludCBkb19leGl0KHZvaWQpDQogICAgK3sNCiAgICArCWludCByZXM7DQogICAgKwlpZiAoIWNv
bmZfZ2V0X2NoYW5nZWQoKSkgew0KICAgICsJCWdsb2JhbF9leGl0ID0gMTsNCiAgICArCQlyZXR1
cm4gMDsNCiAgICArCX0NCiAgICArCXJlcyA9IGJ0bl9kaWFsb2cobWFpbl93aW5kb3csDQogICAg
KwkJCSJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIgbmV3IGNvbmZpZ3VyYXRpb24/XG4iDQogICAg
KwkJCQkiPEVTQz4gdG8gY2FuY2VsIGFuZCByZXN1bWUgbmNvbmZpZy4iLA0KICAgICsJCQkyLA0K
ICAgICsJCQkiICAgPHNhdmU+ICAgIiwNCiAgICArCQkJIjxkb24ndCBzYXZlPiIpOw0KICAgICsJ
aWYgKHJlcyA9PSBLRVlfRVhJVCkgew0KICAgICsJCWdsb2JhbF9leGl0ID0gMDsNCiAgICArCQly
ZXR1cm4gLTE7DQogICAgKwl9DQogICAgKw0KICAgICsJLyogaWYgd2UgZ290IGhlcmUsIHRoZSB1
c2VyIHJlYWxseSB3YW50cyB0byBleGl0ICovDQogICAgKwlzd2l0Y2ggKHJlcykgew0KICAgICsJ
Y2FzZSAwOg0KICAgICsJCXJlcyA9IGNvbmZfd3JpdGUoZmlsZW5hbWUpOw0KICAgICsJCWlmIChy
ZXMpDQogICAgKwkJCWJ0bl9kaWFsb2coDQogICAgKwkJCQltYWluX3dpbmRvdywNCiAgICArCQkJ
CSJFcnJvciBkdXJpbmcgd3JpdGluZyBvZiBjb25maWd1cmF0aW9uLlxuIg0KICAgICsJCQkJICAi
WW91ciBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2VyZSBOT1Qgc2F2ZWQuIiwNCiAgICArCQkJCSAg
MSwNCiAgICArCQkJCSAgIjxPSz4iKTsNCiAgICArCQljb25mX3dyaXRlX2F1dG9jb25mKDApOw0K
ICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAgICArCQlidG5fZGlhbG9nKA0KICAgICsJ
CQltYWluX3dpbmRvdywNCiAgICArCQkJIllvdXIgY29uZmlndXJhdGlvbiBjaGFuZ2VzIHdlcmUg
Tk9UIHNhdmVkLiIsDQogICAgKwkJCTEsDQogICAgKwkJCSI8T0s+Iik7DQogICAgKwkJYnJlYWs7
DQogICAgKwl9DQogICAgKwlnbG9iYWxfZXhpdCA9IDE7DQogICAgKwlyZXR1cm4gMDsNCiAgICAr
fQ0KICAgICsNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHNlYXJjaF9jb25mKHZvaWQpDQogICAg
K3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKipzeW1fYXJyOw0KICAgICsJc3RydWN0IGdzdHIgcmVz
Ow0KICAgICsJc3RydWN0IGdzdHIgdGl0bGU7DQogICAgKwljaGFyICpkaWFsb2dfaW5wdXQ7DQog
ICAgKwlpbnQgZHJlczsNCiAgICArDQogICAgKwl0aXRsZSA9IHN0cl9uZXcoKTsNCiAgICArCXN0
cl9wcmludGYoICZ0aXRsZSwgIkVudGVyIChzdWIpc3RyaW5nIG9yIHJlZ2V4cCB0byBzZWFyY2gg
Zm9yICINCiAgICArCQkJICAgICAgIih3aXRoIG9yIHdpdGhvdXQgXCIlc1wiKSIsIENPTkZJR18p
Ow0KICAgICsNCiAgICArYWdhaW46DQogICAgKwlkcmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5f
d2luZG93LA0KICAgICsJCQkiU2VhcmNoIENvbmZpZ3VyYXRpb24gUGFyYW1ldGVyIiwNCiAgICAr
CQkJc3RyX2dldCgmdGl0bGUpLA0KICAgICsJCQkiIiwgJmRpYWxvZ19pbnB1dF9yZXN1bHQsICZk
aWFsb2dfaW5wdXRfcmVzdWx0X2xlbik7DQogICAgKwlzd2l0Y2ggKGRyZXMpIHsNCiAgICArCWNh
c2UgMDoNCiAgICArCQlicmVhazsNCiAgICArCWNhc2UgMToNCiAgICArCQlzaG93X3Njcm9sbF93
aW4obWFpbl93aW5kb3csDQogICAgKwkJCQkiU2VhcmNoIENvbmZpZ3VyYXRpb24iLCBzZWFyY2hf
aGVscCk7DQogICAgKwkJZ290byBhZ2FpbjsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJc3RyX2Zy
ZWUoJnRpdGxlKTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKw0KICAgICsJLyogc3Ry
aXAgdGhlIHByZWZpeCBpZiBuZWNlc3NhcnkgKi8NCiAgICArCWRpYWxvZ19pbnB1dCA9IGRpYWxv
Z19pbnB1dF9yZXN1bHQ7DQogICAgKwlpZiAoc3RybmNhc2VjbXAoZGlhbG9nX2lucHV0X3Jlc3Vs
dCwgQ09ORklHXywgc3RybGVuKENPTkZJR18pKSA9PSAwKQ0KICAgICsJCWRpYWxvZ19pbnB1dCAr
PSBzdHJsZW4oQ09ORklHXyk7DQogICAgKw0KICAgICsJc3ltX2FyciA9IHN5bV9yZV9zZWFyY2go
ZGlhbG9nX2lucHV0KTsNCiAgICArCXJlcyA9IGdldF9yZWxhdGlvbnNfc3RyKHN5bV9hcnIsIE5V
TEwpOw0KICAgICsJZnJlZShzeW1fYXJyKTsNCiAgICArCXNob3dfc2Nyb2xsX3dpbihtYWluX3dp
bmRvdywNCiAgICArCQkJIlNlYXJjaCBSZXN1bHRzIiwgc3RyX2dldCgmcmVzKSk7DQogICAgKwlz
dHJfZnJlZSgmcmVzKTsNCiAgICArCXN0cl9mcmVlKCZ0aXRsZSk7DQogICAgK30NCiAgICArDQog
ICAgKw0KICAgICtzdGF0aWMgdm9pZCBidWlsZF9jb25mKHN0cnVjdCBtZW51ICptZW51KQ0KICAg
ICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnBy
b3A7DQogICAgKwlzdHJ1Y3QgbWVudSAqY2hpbGQ7DQogICAgKwlpbnQgdHlwZSwgdG1wLCBkb2lu
dCA9IDI7DQogICAgKwl0cmlzdGF0ZSB2YWw7DQogICAgKwljaGFyIGNoOw0KICAgICsNCiAgICAr
CWlmICghbWVudSB8fCAoIXNob3dfYWxsX2l0ZW1zICYmICFtZW51X2lzX3Zpc2libGUobWVudSkp
KQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwlzeW0gPSBtZW51LT5zeW07DQogICAgKwlw
cm9wID0gbWVudS0+cHJvbXB0Ow0KICAgICsJaWYgKCFzeW0pIHsNCiAgICArCQlpZiAocHJvcCAm
JiBtZW51ICE9IGN1cnJlbnRfbWVudSkgew0KICAgICsJCQljb25zdCBjaGFyICpwcm9tcHQgPSBt
ZW51X2dldF9wcm9tcHQobWVudSk7DQogICAgKwkJCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAg
ICsJCQlwdHlwZSA9IG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9X
TjsNCiAgICArCQkJc3dpdGNoIChwdHlwZSkgew0KICAgICsJCQljYXNlIFBfTUVOVToNCiAgICAr
CQkJCWNoaWxkX2NvdW50Kys7DQogICAgKwkJCQlwcm9tcHQgPSBwcm9tcHQ7DQogICAgKwkJCQlp
ZiAoc2luZ2xlX21lbnVfbW9kZSkgew0KICAgICsJCQkJCWl0ZW1fbWFrZShtZW51LCAnbScsDQog
ICAgKwkJCQkJCSIlcyUqYyVzIiwNCiAgICArCQkJCQkJbWVudS0+ZGF0YSA/ICItLT4iIDogIisr
PiIsDQogICAgKwkJCQkJCWluZGVudCArIDEsICcgJywgcHJvbXB0KTsNCiAgICArCQkJCX0gZWxz
ZQ0KICAgICsJCQkJCWl0ZW1fbWFrZShtZW51LCAnbScsDQogICAgKwkJCQkJCSAgIiAgICUqYyVz
ICAlcyIsDQogICAgKwkJCQkJCSAgaW5kZW50ICsgMSwgJyAnLCBwcm9tcHQsDQogICAgKwkJCQkJ
CSAgbWVudV9pc19lbXB0eShtZW51KSA/ICItLS0tIiA6ICItLS0+Iik7DQogICAgKw0KICAgICsJ
CQkJaWYgKHNpbmdsZV9tZW51X21vZGUgJiYgbWVudS0+ZGF0YSkNCiAgICArCQkJCQlnb3RvIGNv
bmZfY2hpbGRzOw0KICAgICsJCQkJcmV0dXJuOw0KICAgICsJCQljYXNlIFBfQ09NTUVOVDoNCiAg
ICArCQkJCWlmIChwcm9tcHQpIHsNCiAgICArCQkJCQljaGlsZF9jb3VudCsrOw0KICAgICsJCQkJ
CWl0ZW1fbWFrZShtZW51LCAnOicsDQogICAgKwkJCQkJCSIgICAlKmMqKiogJXMgKioqIiwNCiAg
ICArCQkJCQkJaW5kZW50ICsgMSwgJyAnLA0KICAgICsJCQkJCQlwcm9tcHQpOw0KICAgICsJCQkJ
fQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQlpZiAocHJvbXB0
KSB7DQogICAgKwkJCQkJY2hpbGRfY291bnQrKzsNCiAgICArCQkJCQlpdGVtX21ha2UobWVudSwg
JzonLCAiLS0tJSpjJXMiLA0KICAgICsJCQkJCQlpbmRlbnQgKyAxLCAnICcsDQogICAgKwkJCQkJ
CXByb21wdCk7DQogICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICArCQl9IGVsc2UNCiAgICArCQkJ
ZG9pbnQgPSAwOw0KICAgICsJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgKwl9DQogICAgKw0KICAg
ICsJdHlwZSA9IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgICsJaWYgKHN5bV9pc19jaG9pY2Uoc3lt
KSkgew0KICAgICsJCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW0gPSBzeW1fZ2V0X2Nob2ljZV92YWx1
ZShzeW0pOw0KICAgICsJCXN0cnVjdCBtZW51ICpkZWZfbWVudSA9IE5VTEw7DQogICAgKw0KICAg
ICsJCWNoaWxkX2NvdW50Kys7DQogICAgKwkJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxk
OyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7DQogICAgKwkJCWlmIChtZW51X2lzX3Zpc2libGUoY2hp
bGQpICYmIGNoaWxkLT5zeW0gPT0gZGVmX3N5bSkNCiAgICArCQkJCWRlZl9tZW51ID0gY2hpbGQ7
DQogICAgKwkJfQ0KICAgICsNCiAgICArCQl2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSk7DQogICAgKwkJaWYgKHN5bV9pc19jaGFuZ2FibGUoc3ltKSkgew0KICAgICsJCQlzd2l0Y2gg
KHR5cGUpIHsNCiAgICArCQkJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJCQlpdGVtX21ha2UobWVu
dSwgJ3QnLCAiWyVjXSIsDQogICAgKwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7DQogICAg
KwkJCQlicmVhazsNCiAgICArCQkJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCQkJc3dpdGNoICh2
YWwpIHsNCiAgICArCQkJCWNhc2UgeWVzOg0KICAgICsJCQkJCWNoID0gJyonOw0KICAgICsJCQkJ
CWJyZWFrOw0KICAgICsJCQkJY2FzZSBtb2Q6DQogICAgKwkJCQkJY2ggPSAnTSc7DQogICAgKwkJ
CQkJYnJlYWs7DQogICAgKwkJCQlkZWZhdWx0Og0KICAgICsJCQkJCWNoID0gJyAnOw0KICAgICsJ
CQkJCWJyZWFrOw0KICAgICsJCQkJfQ0KICAgICsJCQkJaXRlbV9tYWtlKG1lbnUsICd0JywgIjwl
Yz4iLCBjaCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJfQ0KICAgICsJCX0gZWxzZSB7DQog
ICAgKwkJCWl0ZW1fbWFrZShtZW51LCBkZWZfbWVudSA/ICd0JyA6ICc6JywgIiAgICIpOw0KICAg
ICsJCX0NCiAgICArDQogICAgKwkJaXRlbV9hZGRfc3RyKCIlKmMlcyIsIGluZGVudCArIDEsDQog
ICAgKwkJCQknICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQogICAgKwkJaWYgKHZhbCA9PSB5
ZXMpIHsNCiAgICArCQkJaWYgKGRlZl9tZW51KSB7DQogICAgKwkJCQlpdGVtX2FkZF9zdHIoIiAo
JXMpIiwNCiAgICArCQkJCQltZW51X2dldF9wcm9tcHQoZGVmX21lbnUpKTsNCiAgICArCQkJCWl0
ZW1fYWRkX3N0cigiICAtLS0+Iik7DQogICAgKwkJCQlpZiAoZGVmX21lbnUtPmxpc3QpIHsNCiAg
ICArCQkJCQlpbmRlbnQgKz0gMjsNCiAgICArCQkJCQlidWlsZF9jb25mKGRlZl9tZW51KTsNCiAg
ICArCQkJCQlpbmRlbnQgLT0gMjsNCiAgICArCQkJCX0NCiAgICArCQkJfQ0KICAgICsJCQlyZXR1
cm47DQogICAgKwkJfQ0KICAgICsJfSBlbHNlIHsNCiAgICArCQlpZiAobWVudSA9PSBjdXJyZW50
X21lbnUpIHsNCiAgICArCQkJaXRlbV9tYWtlKG1lbnUsICc6JywNCiAgICArCQkJCSItLS0lKmMl
cyIsIGluZGVudCArIDEsDQogICAgKwkJCQknICcsIG1lbnVfZ2V0X3Byb21wdChtZW51KSk7DQog
ICAgKwkJCWdvdG8gY29uZl9jaGlsZHM7DQogICAgKwkJfQ0KICAgICsJCWNoaWxkX2NvdW50Kys7
DQogICAgKwkJdmFsID0gc3ltX2dldF90cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgICsJCWlmIChz
eW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkgJiYgdmFsID09IHllcykgew0KICAgICsJCQlpdGVtX21h
a2UobWVudSwgJzonLCAiICAgIik7DQogICAgKwkJfSBlbHNlIHsNCiAgICArCQkJc3dpdGNoICh0
eXBlKSB7DQogICAgKwkJCWNhc2UgU19CT09MRUFOOg0KICAgICsJCQkJaWYgKHN5bV9pc19jaGFu
Z2FibGUoc3ltKSkNCiAgICArCQkJCQlpdGVtX21ha2UobWVudSwgJ3QnLCAiWyVjXSIsDQogICAg
KwkJCQkJCXZhbCA9PSBubyA/ICcgJyA6ICcqJyk7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJ
aXRlbV9tYWtlKG1lbnUsICd0JywgIi0lYy0iLA0KICAgICsJCQkJCQl2YWwgPT0gbm8gPyAnICcg
OiAnKicpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgU19UUklTVEFURToNCiAgICAr
CQkJCXN3aXRjaCAodmFsKSB7DQogICAgKwkJCQljYXNlIHllczoNCiAgICArCQkJCQljaCA9ICcq
JzsNCiAgICArCQkJCQlicmVhazsNCiAgICArCQkJCWNhc2UgbW9kOg0KICAgICsJCQkJCWNoID0g
J00nOw0KICAgICsJCQkJCWJyZWFrOw0KICAgICsJCQkJZGVmYXVsdDoNCiAgICArCQkJCQljaCA9
ICcgJzsNCiAgICArCQkJCQlicmVhazsNCiAgICArCQkJCX0NCiAgICArCQkJCWlmIChzeW1faXNf
Y2hhbmdhYmxlKHN5bSkpIHsNCiAgICArCQkJCQlpZiAoc3ltLT5yZXZfZGVwLnRyaSA9PSBtb2Qp
DQogICAgKwkJCQkJCWl0ZW1fbWFrZShtZW51LA0KICAgICsJCQkJCQkJJ3QnLCAieyVjfSIsIGNo
KTsNCiAgICArCQkJCQllbHNlDQogICAgKwkJCQkJCWl0ZW1fbWFrZShtZW51LA0KICAgICsJCQkJ
CQkJJ3QnLCAiPCVjPiIsIGNoKTsNCiAgICArCQkJCX0gZWxzZQ0KICAgICsJCQkJCWl0ZW1fbWFr
ZShtZW51LCAndCcsICItJWMtIiwgY2gpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWRlZmF1
bHQ6DQogICAgKwkJCQl0bXAgPSAyICsgc3RybGVuKHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSkp
Ow0KICAgICsJCQkJaXRlbV9tYWtlKG1lbnUsICdzJywgIiAgICAoJXMpIiwNCiAgICArCQkJCQkJ
c3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7DQogICAgKwkJCQl0bXAgPSBpbmRlbnQgLSB0bXAg
KyA0Ow0KICAgICsJCQkJaWYgKHRtcCA8IDApDQogICAgKwkJCQkJdG1wID0gMDsNCiAgICArCQkJ
CWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIHRtcCwgJyAnLA0KICAgICsJCQkJCQltZW51X2dldF9w
cm9tcHQobWVudSksDQogICAgKwkJCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwNCiAgICArCQkJ
CQkJICFzeW1faXNfY2hhbmdhYmxlKHN5bSkpID8gIiIgOg0KICAgICsJCQkJCQkiIChORVcpIik7
DQogICAgKwkJCQlnb3RvIGNvbmZfY2hpbGRzOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJ
CWl0ZW1fYWRkX3N0cigiJSpjJXMlcyIsIGluZGVudCArIDEsICcgJywNCiAgICArCQkJCW1lbnVf
Z2V0X3Byb21wdChtZW51KSwNCiAgICArCQkJCShzeW1faGFzX3ZhbHVlKHN5bSkgfHwgIXN5bV9p
c19jaGFuZ2FibGUoc3ltKSkgPw0KICAgICsJCQkJIiIgOiAiIChORVcpIik7DQogICAgKwkJaWYg
KG1lbnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKSB7DQogICAgKwkJ
CWl0ZW1fYWRkX3N0cigiICAlcyIsIG1lbnVfaXNfZW1wdHkobWVudSkgPyAiLS0tLSIgOiAiLS0t
PiIpOw0KICAgICsJCQlyZXR1cm47DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArY29u
Zl9jaGlsZHM6DQogICAgKwlpbmRlbnQgKz0gZG9pbnQ7DQogICAgKwlmb3IgKGNoaWxkID0gbWVu
dS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpDQogICAgKwkJYnVpbGRfY29uZihj
aGlsZCk7DQogICAgKwlpbmRlbnQgLT0gZG9pbnQ7DQogICAgK30NCiAgICArDQogICAgK3N0YXRp
YyB2b2lkIHJlc2V0X21lbnUodm9pZCkNCiAgICArew0KICAgICsJdW5wb3N0X21lbnUoY3Vyc2Vz
X21lbnUpOw0KICAgICsJY2xlYW5faXRlbXMoKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogYWRq
dXN0IHRoZSBtZW51IHRvIHNob3cgdGhpcyBpdGVtLg0KICAgICsgKiBwcmVmZXIgbm90IHRvIHNj
cm9sbCB0aGUgbWVudSBpZiBwb3NzaWJsZSovDQogICAgK3N0YXRpYyB2b2lkIGNlbnRlcl9pdGVt
KGludCBzZWxlY3RlZF9pbmRleCwgaW50ICpsYXN0X3RvcF9yb3cpDQogICAgK3sNCiAgICArCWlu
dCB0b3Byb3c7DQogICAgKw0KICAgICsJc2V0X3RvcF9yb3coY3Vyc2VzX21lbnUsICpsYXN0X3Rv
cF9yb3cpOw0KICAgICsJdG9wcm93ID0gdG9wX3JvdyhjdXJzZXNfbWVudSk7DQogICAgKwlpZiAo
c2VsZWN0ZWRfaW5kZXggPCB0b3Byb3cgfHwNCiAgICArCSAgICBzZWxlY3RlZF9pbmRleCA+PSB0
b3Byb3crbXdpbl9tYXhfbGluZXMpIHsNCiAgICArCQl0b3Byb3cgPSBtYXgoc2VsZWN0ZWRfaW5k
ZXgtbXdpbl9tYXhfbGluZXMvMiwgMCk7DQogICAgKwkJaWYgKHRvcHJvdyA+PSBpdGVtX2NvdW50
KGN1cnNlc19tZW51KS1td2luX21heF9saW5lcykNCiAgICArCQkJdG9wcm93ID0gaXRlbV9jb3Vu
dChjdXJzZXNfbWVudSktbXdpbl9tYXhfbGluZXM7DQogICAgKwkJc2V0X3RvcF9yb3coY3Vyc2Vz
X21lbnUsIHRvcHJvdyk7DQogICAgKwl9DQogICAgKwlzZXRfY3VycmVudF9pdGVtKGN1cnNlc19t
ZW51LA0KICAgICsJCQljdXJzZXNfbWVudV9pdGVtc1tzZWxlY3RlZF9pbmRleF0pOw0KICAgICsJ
Kmxhc3RfdG9wX3JvdyA9IHRvcHJvdzsNCiAgICArCXBvc3RfbWVudShjdXJzZXNfbWVudSk7DQog
ICAgKwlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICArfQ0KICAgICsNCiAg
ICArLyogdGhpcyBmdW5jdGlvbiBhc3N1bWVzIHJlc2V0X21lbnUgaGFzIGJlZW4gY2FsbGVkIGJl
Zm9yZSAqLw0KICAgICtzdGF0aWMgdm9pZCBzaG93X21lbnUoY29uc3QgY2hhciAqcHJvbXB0LCBj
b25zdCBjaGFyICppbnN0cnVjdGlvbnMsDQogICAgKwkJaW50IHNlbGVjdGVkX2luZGV4LCBpbnQg
Kmxhc3RfdG9wX3JvdykNCiAgICArew0KICAgICsJaW50IG1heHgsIG1heHk7DQogICAgKwlXSU5E
T1cgKm1lbnVfd2luZG93Ow0KICAgICsNCiAgICArCWN1cnJlbnRfaW5zdHJ1Y3Rpb25zID0gaW5z
dHJ1Y3Rpb25zOw0KICAgICsNCiAgICArCWNsZWFyKCk7DQogICAgKwkodm9pZCkgd2F0dHJzZXQo
bWFpbl93aW5kb3csIGF0dHJpYnV0ZXNbTk9STUFMXSk7DQogICAgKwlwcmludF9pbl9taWRkbGUo
c3Rkc2NyLCAxLCAwLCBnZXRtYXh4KHN0ZHNjciksDQogICAgKwkJCW1lbnVfYmFja3RpdGxlLA0K
ICAgICsJCQlhdHRyaWJ1dGVzW01BSU5fSEVBRElOR10pOw0KICAgICsNCiAgICArCSh2b2lkKSB3
YXR0cnNldChtYWluX3dpbmRvdywgYXR0cmlidXRlc1tNQUlOX01FTlVfQk9YXSk7DQogICAgKwli
b3gobWFpbl93aW5kb3csIDAsIDApOw0KICAgICsJKHZvaWQpIHdhdHRyc2V0KG1haW5fd2luZG93
LCBhdHRyaWJ1dGVzW01BSU5fTUVOVV9IRUFESU5HXSk7DQogICAgKwltdndwcmludHcobWFpbl93
aW5kb3csIDAsIDMsICIgJXMgIiwgcHJvbXB0KTsNCiAgICArCSh2b2lkKSB3YXR0cnNldChtYWlu
X3dpbmRvdywgYXR0cmlidXRlc1tOT1JNQUxdKTsNCiAgICArDQogICAgKwlzZXRfbWVudV9pdGVt
cyhjdXJzZXNfbWVudSwgY3Vyc2VzX21lbnVfaXRlbXMpOw0KICAgICsNCiAgICArCS8qIHBvc2l0
aW9uIHRoZSBtZW51IGF0IHRoZSBtaWRkbGUgb2YgdGhlIHNjcmVlbiAqLw0KICAgICsJc2NhbGVf
bWVudShjdXJzZXNfbWVudSwgJm1heHksICZtYXh4KTsNCiAgICArCW1heHggPSBtaW4obWF4eCwg
bXdpbl9tYXhfY29scy0yKTsNCiAgICArCW1heHkgPSBtd2luX21heF9saW5lczsNCiAgICArCW1l
bnVfd2luZG93ID0gZGVyd2luKG1haW5fd2luZG93LA0KICAgICsJCQltYXh5LA0KICAgICsJCQlt
YXh4LA0KICAgICsJCQkyLA0KICAgICsJCQkobXdpbl9tYXhfY29scy1tYXh4KS8yKTsNCiAgICAr
CWtleXBhZChtZW51X3dpbmRvdywgVFJVRSk7DQogICAgKwlzZXRfbWVudV93aW4oY3Vyc2VzX21l
bnUsIG1lbnVfd2luZG93KTsNCiAgICArCXNldF9tZW51X3N1YihjdXJzZXNfbWVudSwgbWVudV93
aW5kb3cpOw0KICAgICsNCiAgICArCS8qIG11c3QgcmVhc3NlcnQgdGhpcyBhZnRlciBjaGFuZ2lu
ZyBpdGVtcywgb3RoZXJ3aXNlIHJldHVybnMgdG8gYQ0KICAgICsJICogZGVmYXVsdCBvZiAxNg0K
ICAgICsJICovDQogICAgKwlzZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEpOw0K
ICAgICsJY2VudGVyX2l0ZW0oc2VsZWN0ZWRfaW5kZXgsIGxhc3RfdG9wX3Jvdyk7DQogICAgKwlz
ZXRfbWVudV9mb3JtYXQoY3Vyc2VzX21lbnUsIG1heHksIDEpOw0KICAgICsNCiAgICArCXByaW50
X2Z1bmN0aW9uX2xpbmUoKTsNCiAgICArDQogICAgKwkvKiBQb3N0IHRoZSBtZW51ICovDQogICAg
Kwlwb3N0X21lbnUoY3Vyc2VzX21lbnUpOw0KICAgICsJcmVmcmVzaF9hbGxfd2luZG93cyhtYWlu
X3dpbmRvdyk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGFkal9tYXRjaF9kaXIo
bWF0Y2hfZiAqbWF0Y2hfZGlyZWN0aW9uKQ0KICAgICt7DQogICAgKwlpZiAoKm1hdGNoX2RpcmVj
dGlvbiA9PSBGSU5EX05FWFRfTUFUQ0hfRE9XTikNCiAgICArCQkqbWF0Y2hfZGlyZWN0aW9uID0N
CiAgICArCQkJTUFUQ0hfVElOS0VSX1BBVFRFUk5fRE9XTjsNCiAgICArCWVsc2UgaWYgKCptYXRj
aF9kaXJlY3Rpb24gPT0gRklORF9ORVhUX01BVENIX1VQKQ0KICAgICsJCSptYXRjaF9kaXJlY3Rp
b24gPQ0KICAgICsJCQlNQVRDSF9USU5LRVJfUEFUVEVSTl9VUDsNCiAgICArCS8qIGVsc2UsIGRv
IG5vIGNoYW5nZS4uICovDQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBtYXRjaF9zdGF0ZQ0K
ICAgICt7DQogICAgKwlpbnQgaW5fc2VhcmNoOw0KICAgICsJbWF0Y2hfZiBtYXRjaF9kaXJlY3Rp
b247DQogICAgKwljaGFyIHBhdHRlcm5bMjU2XTsNCiAgICArfTsNCiAgICArDQogICAgKy8qIFJl
dHVybiAwIG1lYW5zIEkgaGF2ZSBoYW5kbGVkIHRoZSBrZXkuIEluIHN1Y2ggYSBjYXNlLCBhbnMg
c2hvdWxkIGhvbGQgdGhlDQogICAgKyAqIGl0ZW0gdG8gY2VudGVyLCBvciAtMSBvdGhlcndpc2Uu
DQogICAgKyAqIEVsc2UgcmV0dXJuIC0xIC4NCiAgICArICovDQogICAgK3N0YXRpYyBpbnQgZG9f
bWF0Y2goaW50IGtleSwgc3RydWN0IG1hdGNoX3N0YXRlICpzdGF0ZSwgaW50ICphbnMpDQogICAg
K3sNCiAgICArCWNoYXIgYyA9IChjaGFyKSBrZXk7DQogICAgKwlpbnQgdGVybWluYXRlX3NlYXJj
aCA9IDA7DQogICAgKwkqYW5zID0gLTE7DQogICAgKwlpZiAoa2V5ID09ICcvJyB8fCAoc3RhdGUt
PmluX3NlYXJjaCAmJiBrZXkgPT0gMjcpKSB7DQogICAgKwkJbW92ZSgwLCAwKTsNCiAgICArCQly
ZWZyZXNoKCk7DQogICAgKwkJY2xydG9lb2woKTsNCiAgICArCQlzdGF0ZS0+aW5fc2VhcmNoID0g
MS1zdGF0ZS0+aW5fc2VhcmNoOw0KICAgICsJCWJ6ZXJvKHN0YXRlLT5wYXR0ZXJuLCBzaXplb2Yo
c3RhdGUtPnBhdHRlcm4pKTsNCiAgICArCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hf
VElOS0VSX1BBVFRFUk5fRE9XTjsNCiAgICArCQlyZXR1cm4gMDsNCiAgICArCX0gZWxzZSBpZiAo
IXN0YXRlLT5pbl9zZWFyY2gpDQogICAgKwkJcmV0dXJuIDE7DQogICAgKw0KICAgICsJaWYgKGlz
YWxudW0oYykgfHwgaXNncmFwaChjKSB8fCBjID09ICcgJykgew0KICAgICsJCXN0YXRlLT5wYXR0
ZXJuW3N0cmxlbihzdGF0ZS0+cGF0dGVybildID0gYzsNCiAgICArCQlzdGF0ZS0+cGF0dGVybltz
dHJsZW4oc3RhdGUtPnBhdHRlcm4pXSA9ICdcMCc7DQogICAgKwkJYWRqX21hdGNoX2Rpcigmc3Rh
dGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRl
LT5wYXR0ZXJuLA0KICAgICsJCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgKwl9IGVs
c2UgaWYgKGtleSA9PSBLRVlfRE9XTikgew0KICAgICsJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24g
PSBGSU5EX05FWFRfTUFUQ0hfRE9XTjsNCiAgICArCQkqYW5zID0gZ2V0X21leHRfbWF0Y2goc3Rh
dGUtPnBhdHRlcm4sDQogICAgKwkJCQlzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsNCiAgICArCX0g
ZWxzZSBpZiAoa2V5ID09IEtFWV9VUCkgew0KICAgICsJCXN0YXRlLT5tYXRjaF9kaXJlY3Rpb24g
PSBGSU5EX05FWFRfTUFUQ0hfVVA7DQogICAgKwkJKmFucyA9IGdldF9tZXh0X21hdGNoKHN0YXRl
LT5wYXR0ZXJuLA0KICAgICsJCQkJc3RhdGUtPm1hdGNoX2RpcmVjdGlvbik7DQogICAgKwl9IGVs
c2UgaWYgKGtleSA9PSBLRVlfQkFDS1NQQUNFIHx8IGtleSA9PSA4IHx8IGtleSA9PSAxMjcpIHsN
CiAgICArCQlzdGF0ZS0+cGF0dGVybltzdHJsZW4oc3RhdGUtPnBhdHRlcm4pLTFdID0gJ1wwJzsN
CiAgICArCQlhZGpfbWF0Y2hfZGlyKCZzdGF0ZS0+bWF0Y2hfZGlyZWN0aW9uKTsNCiAgICArCX0g
ZWxzZQ0KICAgICsJCXRlcm1pbmF0ZV9zZWFyY2ggPSAxOw0KICAgICsNCiAgICArCWlmICh0ZXJt
aW5hdGVfc2VhcmNoKSB7DQogICAgKwkJc3RhdGUtPmluX3NlYXJjaCA9IDA7DQogICAgKwkJYnpl
cm8oc3RhdGUtPnBhdHRlcm4sIHNpemVvZihzdGF0ZS0+cGF0dGVybikpOw0KICAgICsJCW1vdmUo
MCwgMCk7DQogICAgKwkJcmVmcmVzaCgpOw0KICAgICsJCWNscnRvZW9sKCk7DQogICAgKwkJcmV0
dXJuIC0xOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK3N0
YXRpYyB2b2lkIGNvbmYoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCXN0cnVjdCBt
ZW51ICpzdWJtZW51ID0gTlVMTDsNCiAgICArCWNvbnN0IGNoYXIgKnByb21wdCA9IG1lbnVfZ2V0
X3Byb21wdChtZW51KTsNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAgICArCWludCByZXM7
DQogICAgKwlpbnQgY3VycmVudF9pbmRleCA9IDA7DQogICAgKwlpbnQgbGFzdF90b3Bfcm93ID0g
MDsNCiAgICArCXN0cnVjdCBtYXRjaF9zdGF0ZSBtYXRjaF9zdGF0ZSA9IHsNCiAgICArCQkuaW5f
c2VhcmNoID0gMCwNCiAgICArCQkubWF0Y2hfZGlyZWN0aW9uID0gTUFUQ0hfVElOS0VSX1BBVFRF
Uk5fRE9XTiwNCiAgICArCQkucGF0dGVybiA9ICIiLA0KICAgICsJfTsNCiAgICArDQogICAgKwl3
aGlsZSAoIWdsb2JhbF9leGl0KSB7DQogICAgKwkJcmVzZXRfbWVudSgpOw0KICAgICsJCWN1cnJl
bnRfbWVudSA9IG1lbnU7DQogICAgKwkJYnVpbGRfY29uZihtZW51KTsNCiAgICArCQlpZiAoIWNo
aWxkX2NvdW50KQ0KICAgICsJCQlicmVhazsNCiAgICArDQogICAgKwkJc2hvd19tZW51KHByb21w
dCA/IHByb21wdCA6ICJNYWluIE1lbnUiLA0KICAgICsJCQkJbWVudV9pbnN0cnVjdGlvbnMsDQog
ICAgKwkJCQljdXJyZW50X2luZGV4LCAmbGFzdF90b3Bfcm93KTsNCiAgICArCQlrZXlwYWQoKG1l
bnVfd2luKGN1cnNlc19tZW51KSksIFRSVUUpOw0KICAgICsJCXdoaWxlICghZ2xvYmFsX2V4aXQp
IHsNCiAgICArCQkJaWYgKG1hdGNoX3N0YXRlLmluX3NlYXJjaCkgew0KICAgICsJCQkJbXZwcmlu
dHcoMCwgMCwNCiAgICArCQkJCQkic2VhcmNoaW5nOiAlcyIsIG1hdGNoX3N0YXRlLnBhdHRlcm4p
Ow0KICAgICsJCQkJY2xydG9lb2woKTsNCiAgICArCQkJfQ0KICAgICsJCQlyZWZyZXNoX2FsbF93
aW5kb3dzKG1haW5fd2luZG93KTsNCiAgICArCQkJcmVzID0gd2dldGNoKG1lbnVfd2luKGN1cnNl
c19tZW51KSk7DQogICAgKwkJCWlmICghcmVzKQ0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWlm
IChkb19tYXRjaChyZXMsICZtYXRjaF9zdGF0ZSwgJmN1cnJlbnRfaW5kZXgpID09IDApIHsNCiAg
ICArCQkJCWlmIChjdXJyZW50X2luZGV4ICE9IC0xKQ0KICAgICsJCQkJCWNlbnRlcl9pdGVtKGN1
cnJlbnRfaW5kZXgsDQogICAgKwkJCQkJCSAgICAmbGFzdF90b3Bfcm93KTsNCiAgICArCQkJCWNv
bnRpbnVlOw0KICAgICsJCQl9DQogICAgKwkJCWlmIChwcm9jZXNzX3NwZWNpYWxfa2V5cygmcmVz
LA0KICAgICsJCQkJCQkoc3RydWN0IG1lbnUgKikgaXRlbV9kYXRhKCkpKQ0KICAgICsJCQkJYnJl
YWs7DQogICAgKwkJCXN3aXRjaCAocmVzKSB7DQogICAgKwkJCWNhc2UgS0VZX0RPV046DQogICAg
KwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7DQogICAgKwkJCQli
cmVhazsNCiAgICArCQkJY2FzZSBLRVlfVVA6DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNf
bWVudSwgUkVRX1VQX0lURU0pOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX05Q
QUdFOg0KICAgICsJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfRFBBR0UpOw0K
ICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX1BQQUdFOg0KICAgICsJCQkJbWVudV9k
cml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOw0KICAgICsJCQkJYnJlYWs7DQogICAg
KwkJCWNhc2UgS0VZX0hPTUU6DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVR
X0ZJUlNUX0lURU0pOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX0VORDoNCiAg
ICArCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsNCiAgICArCQkJ
CWJyZWFrOw0KICAgICsJCQljYXNlICdoJzoNCiAgICArCQkJY2FzZSAnPyc6DQogICAgKwkJCQlz
aG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKTsNCiAgICArCQkJCWJyZWFrOw0K
ICAgICsJCQl9DQogICAgKwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8DQogICAgKwkJ
CQlyZXMgPT0gMzIgfHwgcmVzID09ICduJyB8fCByZXMgPT0gJ3knIHx8DQogICAgKwkJCQlyZXMg
PT0gS0VZX0xFRlQgfHwgcmVzID09IEtFWV9SSUdIVCB8fA0KICAgICsJCQkJcmVzID09ICdtJykN
CiAgICArCQkJCWJyZWFrOw0KICAgICsJCQlyZWZyZXNoX2FsbF93aW5kb3dzKG1haW5fd2luZG93
KTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5k
b3cpOw0KICAgICsJCS8qIGlmIEVTQyBvciBsZWZ0Ki8NCiAgICArCQlpZiAocmVzID09IDI3IHx8
IChtZW51ICE9ICZyb290bWVudSAmJiByZXMgPT0gS0VZX0xFRlQpKQ0KICAgICsJCQlicmVhazsN
CiAgICArDQogICAgKwkJLyogcmVtZW1iZXIgbG9jYXRpb24gaW4gdGhlIG1lbnUgKi8NCiAgICAr
CQlsYXN0X3RvcF9yb3cgPSB0b3Bfcm93KGN1cnNlc19tZW51KTsNCiAgICArCQljdXJyZW50X2lu
ZGV4ID0gY3Vyc2VzX2l0ZW1faW5kZXgoKTsNCiAgICArDQogICAgKwkJaWYgKCFpdGVtX3RhZygp
KQ0KICAgICsJCQljb250aW51ZTsNCiAgICArDQogICAgKwkJc3VibWVudSA9IChzdHJ1Y3QgbWVu
dSAqKSBpdGVtX2RhdGEoKTsNCiAgICArCQlpZiAoIXN1Ym1lbnUgfHwgIW1lbnVfaXNfdmlzaWJs
ZShzdWJtZW51KSkNCiAgICArCQkJY29udGludWU7DQogICAgKwkJc3ltID0gc3VibWVudS0+c3lt
Ow0KICAgICsNCiAgICArCQlzd2l0Y2ggKHJlcykgew0KICAgICsJCWNhc2UgJyAnOg0KICAgICsJ
CQlpZiAoaXRlbV9pc190YWcoJ3QnKSkNCiAgICArCQkJCXN5bV90b2dnbGVfdHJpc3RhdGVfdmFs
dWUoc3ltKTsNCiAgICArCQkJZWxzZSBpZiAoaXRlbV9pc190YWcoJ20nKSkNCiAgICArCQkJCWNv
bmYoc3VibWVudSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX1JJR0hUOg0KICAg
ICsJCWNhc2UgMTA6IC8qIEVOVEVSIFdBUyBQUkVTU0VEICovDQogICAgKwkJCXN3aXRjaCAoaXRl
bV90YWcoKSkgew0KICAgICsJCQljYXNlICdtJzoNCiAgICArCQkJCWlmIChzaW5nbGVfbWVudV9t
b2RlKQ0KICAgICsJCQkJCXN1Ym1lbnUtPmRhdGEgPQ0KICAgICsJCQkJCQkodm9pZCAqKSAobG9u
ZykgIXN1Ym1lbnUtPmRhdGE7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJY29uZihzdWJtZW51
KTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQljYXNlICd0JzoNCiAgICArCQkJCWlmIChzeW1f
aXNfY2hvaWNlKHN5bSkgJiYNCiAgICArCQkJCSAgICBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5
bSkgPT0geWVzKQ0KICAgICsJCQkJCWNvbmZfY2hvaWNlKHN1Ym1lbnUpOw0KICAgICsJCQkJZWxz
ZSBpZiAoc3VibWVudS0+cHJvbXB0ICYmDQogICAgKwkJCQkJIHN1Ym1lbnUtPnByb21wdC0+dHlw
ZSA9PSBQX01FTlUpDQogICAgKwkJCQkJY29uZihzdWJtZW51KTsNCiAgICArCQkJCWVsc2UgaWYg
KHJlcyA9PSAxMCkNCiAgICArCQkJCQlzeW1fdG9nZ2xlX3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQog
ICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSAncyc6DQogICAgKwkJCQljb25mX3N0cmluZyhz
dWJtZW51KTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWNhc2UgJ3knOg0KICAgICsJCQlpZiAoaXRlbV9pc190YWcoJ3QnKSkgew0KICAgICsJCQkJ
aWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCB5ZXMpKQ0KICAgICsJCQkJCWJyZWFrOw0K
ICAgICsJCQkJaWYgKHN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoc3ltLCBtb2QpKQ0KICAgICsJCQkJ
CWJ0bl9kaWFsb2cobWFpbl93aW5kb3csIHNldG1vZF90ZXh0LCAwKTsNCiAgICArCQkJfQ0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlICduJzoNCiAgICArCQkJaWYgKGl0ZW1faXNfdGFnKCd0
JykpDQogICAgKwkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbm8pOw0KICAgICsJCQli
cmVhazsNCiAgICArCQljYXNlICdtJzoNCiAgICArCQkJaWYgKGl0ZW1faXNfdGFnKCd0JykpDQog
ICAgKwkJCQlzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsNCiAgICArCQkJYnJlYWs7
DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25m
X21lc3NhZ2VfY2FsbGJhY2soY29uc3QgY2hhciAqcykNCiAgICArew0KICAgICsJYnRuX2RpYWxv
ZyhtYWluX3dpbmRvdywgcywgMSwgIjxPSz4iKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGlj
IHZvaWQgc2hvd19oZWxwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qg
Z3N0ciBoZWxwOw0KICAgICsNCiAgICArCWlmICghbWVudSkNCiAgICArCQlyZXR1cm47DQogICAg
Kw0KICAgICsJaGVscCA9IHN0cl9uZXcoKTsNCiAgICArCW1lbnVfZ2V0X2V4dF9oZWxwKG1lbnUs
ICZoZWxwKTsNCiAgICArCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywgbWVudV9nZXRfcHJv
bXB0KG1lbnUpLCBzdHJfZ2V0KCZoZWxwKSk7DQogICAgKwlzdHJfZnJlZSgmaGVscCk7DQogICAg
K30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZfY2hvaWNlKHN0cnVjdCBtZW51ICptZW51
KQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICpwcm9tcHQgPSBtZW51X2dldF9wcm9tcHQobWVu
dSk7DQogICAgKwlzdHJ1Y3QgbWVudSAqY2hpbGQgPSBOVUxMOw0KICAgICsJc3RydWN0IHN5bWJv
bCAqYWN0aXZlOw0KICAgICsJaW50IHNlbGVjdGVkX2luZGV4ID0gMDsNCiAgICArCWludCBsYXN0
X3RvcF9yb3cgPSAwOw0KICAgICsJaW50IHJlcywgaSA9IDA7DQogICAgKwlzdHJ1Y3QgbWF0Y2hf
c3RhdGUgbWF0Y2hfc3RhdGUgPSB7DQogICAgKwkJLmluX3NlYXJjaCA9IDAsDQogICAgKwkJLm1h
dGNoX2RpcmVjdGlvbiA9IE1BVENIX1RJTktFUl9QQVRURVJOX0RPV04sDQogICAgKwkJLnBhdHRl
cm4gPSAiIiwNCiAgICArCX07DQogICAgKw0KICAgICsJYWN0aXZlID0gc3ltX2dldF9jaG9pY2Vf
dmFsdWUobWVudS0+c3ltKTsNCiAgICArCS8qIHRoaXMgaXMgbW9zdGx5IGR1cGxpY2F0ZWQgZnJv
bSB0aGUgY29uZigpIGZ1bmN0aW9uLiAqLw0KICAgICsJd2hpbGUgKCFnbG9iYWxfZXhpdCkgew0K
ICAgICsJCXJlc2V0X21lbnUoKTsNCiAgICArDQogICAgKwkJZm9yIChpID0gMCwgY2hpbGQgPSBt
ZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCkgew0KICAgICsJCQlpZiAoIXNo
b3dfYWxsX2l0ZW1zICYmICFtZW51X2lzX3Zpc2libGUoY2hpbGQpKQ0KICAgICsJCQkJY29udGlu
dWU7DQogICAgKw0KICAgICsJCQlpZiAoY2hpbGQtPnN5bSA9PSBzeW1fZ2V0X2Nob2ljZV92YWx1
ZShtZW51LT5zeW0pKQ0KICAgICsJCQkJaXRlbV9tYWtlKGNoaWxkLCAnOicsICI8WD4gJXMiLA0K
ICAgICsJCQkJCQltZW51X2dldF9wcm9tcHQoY2hpbGQpKTsNCiAgICArCQkJZWxzZSBpZiAoY2hp
bGQtPnN5bSkNCiAgICArCQkJCWl0ZW1fbWFrZShjaGlsZCwgJzonLCAiICAgICVzIiwNCiAgICAr
CQkJCQkJbWVudV9nZXRfcHJvbXB0KGNoaWxkKSk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCWl0
ZW1fbWFrZShjaGlsZCwgJzonLCAiKioqICVzICoqKiIsDQogICAgKwkJCQkJCW1lbnVfZ2V0X3By
b21wdChjaGlsZCkpOw0KICAgICsNCiAgICArCQkJaWYgKGNoaWxkLT5zeW0gPT0gYWN0aXZlKXsN
CiAgICArCQkJCWxhc3RfdG9wX3JvdyA9IHRvcF9yb3coY3Vyc2VzX21lbnUpOw0KICAgICsJCQkJ
c2VsZWN0ZWRfaW5kZXggPSBpOw0KICAgICsJCQl9DQogICAgKwkJCWkrKzsNCiAgICArCQl9DQog
ICAgKwkJc2hvd19tZW51KHByb21wdCA/IHByb21wdCA6ICJDaG9pY2UgTWVudSIsDQogICAgKwkJ
CQlyYWRpb2xpc3RfaW5zdHJ1Y3Rpb25zLA0KICAgICsJCQkJc2VsZWN0ZWRfaW5kZXgsDQogICAg
KwkJCQkmbGFzdF90b3Bfcm93KTsNCiAgICArCQl3aGlsZSAoIWdsb2JhbF9leGl0KSB7DQogICAg
KwkJCWlmIChtYXRjaF9zdGF0ZS5pbl9zZWFyY2gpIHsNCiAgICArCQkJCW12cHJpbnR3KDAsIDAs
ICJzZWFyY2hpbmc6ICVzIiwNCiAgICArCQkJCQkgbWF0Y2hfc3RhdGUucGF0dGVybik7DQogICAg
KwkJCQljbHJ0b2VvbCgpOw0KICAgICsJCQl9DQogICAgKwkJCXJlZnJlc2hfYWxsX3dpbmRvd3Mo
bWFpbl93aW5kb3cpOw0KICAgICsJCQlyZXMgPSB3Z2V0Y2gobWVudV93aW4oY3Vyc2VzX21lbnUp
KTsNCiAgICArCQkJaWYgKCFyZXMpDQogICAgKwkJCQlicmVhazsNCiAgICArCQkJaWYgKGRvX21h
dGNoKHJlcywgJm1hdGNoX3N0YXRlLCAmc2VsZWN0ZWRfaW5kZXgpID09IDApIHsNCiAgICArCQkJ
CWlmIChzZWxlY3RlZF9pbmRleCAhPSAtMSkNCiAgICArCQkJCQljZW50ZXJfaXRlbShzZWxlY3Rl
ZF9pbmRleCwNCiAgICArCQkJCQkJICAgICZsYXN0X3RvcF9yb3cpOw0KICAgICsJCQkJY29udGlu
dWU7DQogICAgKwkJCX0NCiAgICArCQkJaWYgKHByb2Nlc3Nfc3BlY2lhbF9rZXlzKA0KICAgICsJ
CQkJCQkmcmVzLA0KICAgICsJCQkJCQkoc3RydWN0IG1lbnUgKikgaXRlbV9kYXRhKCkpKQ0KICAg
ICsJCQkJYnJlYWs7DQogICAgKwkJCXN3aXRjaCAocmVzKSB7DQogICAgKwkJCWNhc2UgS0VZX0RP
V046DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNfbWVudSwgUkVRX0RPV05fSVRFTSk7DQog
ICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSBLRVlfVVA6DQogICAgKwkJCQltZW51X2RyaXZl
cihjdXJzZXNfbWVudSwgUkVRX1VQX0lURU0pOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNh
c2UgS0VZX05QQUdFOg0KICAgICsJCQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1Jf
RFBBR0UpOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZX1BQQUdFOg0KICAgICsJ
CQkJbWVudV9kcml2ZXIoY3Vyc2VzX21lbnUsIFJFUV9TQ1JfVVBBR0UpOw0KICAgICsJCQkJYnJl
YWs7DQogICAgKwkJCWNhc2UgS0VZX0hPTUU6DQogICAgKwkJCQltZW51X2RyaXZlcihjdXJzZXNf
bWVudSwgUkVRX0ZJUlNUX0lURU0pOw0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWNhc2UgS0VZ
X0VORDoNCiAgICArCQkJCW1lbnVfZHJpdmVyKGN1cnNlc19tZW51LCBSRVFfTEFTVF9JVEVNKTsN
CiAgICArCQkJCWJyZWFrOw0KICAgICsJCQljYXNlICdoJzoNCiAgICArCQkJY2FzZSAnPyc6DQog
ICAgKwkJCQlzaG93X2hlbHAoKHN0cnVjdCBtZW51ICopIGl0ZW1fZGF0YSgpKTsNCiAgICArCQkJ
CWJyZWFrOw0KICAgICsJCQl9DQogICAgKwkJCWlmIChyZXMgPT0gMTAgfHwgcmVzID09IDI3IHx8
IHJlcyA9PSAnICcgfHwNCiAgICArCQkJCQlyZXMgPT0gS0VZX0xFRlQpew0KICAgICsJCQkJYnJl
YWs7DQogICAgKwkJCX0NCiAgICArCQkJcmVmcmVzaF9hbGxfd2luZG93cyhtYWluX3dpbmRvdyk7
DQogICAgKwkJfQ0KICAgICsJCS8qIGlmIEVTQyBvciBsZWZ0ICovDQogICAgKwkJaWYgKHJlcyA9
PSAyNyB8fCByZXMgPT0gS0VZX0xFRlQpDQogICAgKwkJCWJyZWFrOw0KICAgICsNCiAgICArCQlj
aGlsZCA9IGl0ZW1fZGF0YSgpOw0KICAgICsJCWlmICghY2hpbGQgfHwgIW1lbnVfaXNfdmlzaWJs
ZShjaGlsZCkgfHwgIWNoaWxkLT5zeW0pDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCXN3aXRj
aCAocmVzKSB7DQogICAgKwkJY2FzZSAnICc6DQogICAgKwkJY2FzZSAgMTA6DQogICAgKwkJY2Fz
ZSBLRVlfUklHSFQ6DQogICAgKwkJCXN5bV9zZXRfdHJpc3RhdGVfdmFsdWUoY2hpbGQtPnN5bSwg
eWVzKTsNCiAgICArCQkJcmV0dXJuOw0KICAgICsJCWNhc2UgJ2gnOg0KICAgICsJCWNhc2UgJz8n
Og0KICAgICsJCQlzaG93X2hlbHAoY2hpbGQpOw0KICAgICsJCQlhY3RpdmUgPSBjaGlsZC0+c3lt
Ow0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9FWElUOg0KICAgICsJCQlyZXR1cm47
DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25m
X3N0cmluZyhzdHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJY29uc3QgY2hhciAqcHJv
bXB0ID0gbWVudV9nZXRfcHJvbXB0KG1lbnUpOw0KICAgICsNCiAgICArCXdoaWxlICgxKSB7DQog
ICAgKwkJaW50IHJlczsNCiAgICArCQljb25zdCBjaGFyICpoZWFkaW5nOw0KICAgICsNCiAgICAr
CQlzd2l0Y2ggKHN5bV9nZXRfdHlwZShtZW51LT5zeW0pKSB7DQogICAgKwkJY2FzZSBTX0lOVDoN
CiAgICArCQkJaGVhZGluZyA9IGlucHV0Ym94X2luc3RydWN0aW9uc19pbnQ7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgU19IRVg6DQogICAgKwkJCWhlYWRpbmcgPSBpbnB1dGJveF9pbnN0
cnVjdGlvbnNfaGV4Ow0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFNfU1RSSU5HOg0KICAg
ICsJCQloZWFkaW5nID0gaW5wdXRib3hfaW5zdHJ1Y3Rpb25zX3N0cmluZzsNCiAgICArCQkJYnJl
YWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJaGVhZGluZyA9ICJJbnRlcm5hbCBuY29uZiBl
cnJvciEiOw0KICAgICsJCX0NCiAgICArCQlyZXMgPSBkaWFsb2dfaW5wdXRib3gobWFpbl93aW5k
b3csDQogICAgKwkJCQlwcm9tcHQgPyBwcm9tcHQgOiAiTWFpbiBNZW51IiwNCiAgICArCQkJCWhl
YWRpbmcsDQogICAgKwkJCQlzeW1fZ2V0X3N0cmluZ192YWx1ZShtZW51LT5zeW0pLA0KICAgICsJ
CQkJJmRpYWxvZ19pbnB1dF9yZXN1bHQsDQogICAgKwkJCQkmZGlhbG9nX2lucHV0X3Jlc3VsdF9s
ZW4pOw0KICAgICsJCXN3aXRjaCAocmVzKSB7DQogICAgKwkJY2FzZSAwOg0KICAgICsJCQlpZiAo
c3ltX3NldF9zdHJpbmdfdmFsdWUobWVudS0+c3ltLA0KICAgICsJCQkJCQlkaWFsb2dfaW5wdXRf
cmVzdWx0KSkNCiAgICArCQkJCXJldHVybjsNCiAgICArCQkJYnRuX2RpYWxvZyhtYWluX3dpbmRv
dywNCiAgICArCQkJCSJZb3UgaGF2ZSBtYWRlIGFuIGludmFsaWQgZW50cnkuIiwgMCk7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWNhc2UgMToNCiAgICArCQkJc2hvd19oZWxwKG1lbnUpOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9FWElUOg0KICAgICsJCQlyZXR1cm47DQogICAg
KwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBjb25mX2xvYWQo
dm9pZCkNCiAgICArew0KICAgICsJd2hpbGUgKDEpIHsNCiAgICArCQlpbnQgcmVzOw0KICAgICsJ
CXJlcyA9IGRpYWxvZ19pbnB1dGJveChtYWluX3dpbmRvdywNCiAgICArCQkJCU5VTEwsIGxvYWRf
Y29uZmlnX3RleHQsDQogICAgKwkJCQlmaWxlbmFtZSwNCiAgICArCQkJCSZkaWFsb2dfaW5wdXRf
cmVzdWx0LA0KICAgICsJCQkJJmRpYWxvZ19pbnB1dF9yZXN1bHRfbGVuKTsNCiAgICArCQlzd2l0
Y2ggKHJlcykgew0KICAgICsJCWNhc2UgMDoNCiAgICArCQkJaWYgKCFkaWFsb2dfaW5wdXRfcmVz
dWx0WzBdKQ0KICAgICsJCQkJcmV0dXJuOw0KICAgICsJCQlpZiAoIWNvbmZfcmVhZChkaWFsb2df
aW5wdXRfcmVzdWx0KSkgew0KICAgICsJCQkJc2V0X2NvbmZpZ19maWxlbmFtZShkaWFsb2dfaW5w
dXRfcmVzdWx0KTsNCiAgICArCQkJCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOw0KICAgICsJCQkJ
cmV0dXJuOw0KICAgICsJCQl9DQogICAgKwkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csICJGaWxl
IGRvZXMgbm90IGV4aXN0ISIsIDApOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIDE6DQog
ICAgKwkJCXNob3dfc2Nyb2xsX3dpbihtYWluX3dpbmRvdywNCiAgICArCQkJCQkiTG9hZCBBbHRl
cm5hdGUgQ29uZmlndXJhdGlvbiIsDQogICAgKwkJCQkJbG9hZF9jb25maWdfaGVscCk7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX0VYSVQ6DQogICAgKwkJCXJldHVybjsNCiAgICAr
CQl9DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGNvbmZfc2F2ZSh2
b2lkKQ0KICAgICt7DQogICAgKwl3aGlsZSAoMSkgew0KICAgICsJCWludCByZXM7DQogICAgKwkJ
cmVzID0gZGlhbG9nX2lucHV0Ym94KG1haW5fd2luZG93LA0KICAgICsJCQkJTlVMTCwgc2F2ZV9j
b25maWdfdGV4dCwNCiAgICArCQkJCWZpbGVuYW1lLA0KICAgICsJCQkJJmRpYWxvZ19pbnB1dF9y
ZXN1bHQsDQogICAgKwkJCQkmZGlhbG9nX2lucHV0X3Jlc3VsdF9sZW4pOw0KICAgICsJCXN3aXRj
aCAocmVzKSB7DQogICAgKwkJY2FzZSAwOg0KICAgICsJCQlpZiAoIWRpYWxvZ19pbnB1dF9yZXN1
bHRbMF0pDQogICAgKwkJCQlyZXR1cm47DQogICAgKwkJCXJlcyA9IGNvbmZfd3JpdGUoZGlhbG9n
X2lucHV0X3Jlc3VsdCk7DQogICAgKwkJCWlmICghcmVzKSB7DQogICAgKwkJCQlzZXRfY29uZmln
X2ZpbGVuYW1lKGRpYWxvZ19pbnB1dF9yZXN1bHQpOw0KICAgICsJCQkJcmV0dXJuOw0KICAgICsJ
CQl9DQogICAgKwkJCWJ0bl9kaWFsb2cobWFpbl93aW5kb3csICJDYW4ndCBjcmVhdGUgZmlsZSEi
LA0KICAgICsJCQkJMSwgIjxPSz4iKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAxOg0K
ICAgICsJCQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csDQogICAgKwkJCQkiU2F2ZSBBbHRl
cm5hdGUgQ29uZmlndXJhdGlvbiIsDQogICAgKwkJCQlzYXZlX2NvbmZpZ19oZWxwKTsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfRVhJVDoNCiAgICArCQkJcmV0dXJuOw0KICAgICsJ
CX0NCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgc2V0dXBfd2luZG93
cyh2b2lkKQ0KICAgICt7DQogICAgKwlpbnQgbGluZXMsIGNvbHVtbnM7DQogICAgKw0KICAgICsJ
Z2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7DQogICAgKw0KICAgICsJaWYgKG1haW5f
d2luZG93ICE9IE5VTEwpDQogICAgKwkJZGVsd2luKG1haW5fd2luZG93KTsNCiAgICArDQogICAg
KwkvKiBzZXQgdXAgdGhlIG1lbnUgYW5kIG1lbnUgd2luZG93ICovDQogICAgKwltYWluX3dpbmRv
dyA9IG5ld3dpbihsaW5lcy0yLCBjb2x1bW5zLTIsIDIsIDEpOw0KICAgICsJa2V5cGFkKG1haW5f
d2luZG93LCBUUlVFKTsNCiAgICArCW13aW5fbWF4X2xpbmVzID0gbGluZXMtNzsNCiAgICArCW13
aW5fbWF4X2NvbHMgPSBjb2x1bW5zLTY7DQogICAgKw0KICAgICsJLyogcGFuZWxzIG9yZGVyIGlz
IGZyb20gYm90dG9tIHRvIHRvcCAqLw0KICAgICsJbmV3X3BhbmVsKG1haW5fd2luZG93KTsNCiAg
ICArfQ0KICAgICsNCiAgICAraW50IG1haW4oaW50IGFjLCBjaGFyICoqYXYpDQogICAgK3sNCiAg
ICArCWludCBsaW5lcywgY29sdW1uczsNCiAgICArCWNoYXIgKm1vZGU7DQogICAgKw0KICAgICsJ
aWYgKGFjID4gMSAmJiBzdHJjbXAoYXZbMV0sICItcyIpID09IDApIHsNCiAgICArCQkvKiBTaWxl
bmNlIGNvbmZfcmVhZCgpIHVudGlsIHRoZSByZWFsIGNhbGxiYWNrIGlzIHNldCB1cCAqLw0KICAg
ICsJCWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soTlVMTCk7DQogICAgKwkJYXYrKzsNCiAgICAr
CX0NCiAgICArCWNvbmZfcGFyc2UoYXZbMV0pOw0KICAgICsJY29uZl9yZWFkKE5VTEwpOw0KICAg
ICsNCiAgICArCW1vZGUgPSBnZXRlbnYoIk5DT05GSUdfTU9ERSIpOw0KICAgICsJaWYgKG1vZGUp
IHsNCiAgICArCQlpZiAoIXN0cmNhc2VjbXAobW9kZSwgInNpbmdsZV9tZW51IikpDQogICAgKwkJ
CXNpbmdsZV9tZW51X21vZGUgPSAxOw0KICAgICsJfQ0KICAgICsNCiAgICArCS8qIEluaXRpYWxp
emUgY3Vyc2VzICovDQogICAgKwlpbml0c2NyKCk7DQogICAgKwkvKiBzZXQgY29sb3IgdGhlbWUg
Ki8NCiAgICArCXNldF9jb2xvcnMoKTsNCiAgICArDQogICAgKwljYnJlYWsoKTsNCiAgICArCW5v
ZWNobygpOw0KICAgICsJa2V5cGFkKHN0ZHNjciwgVFJVRSk7DQogICAgKwljdXJzX3NldCgwKTsN
CiAgICArDQogICAgKwlnZXRtYXh5eChzdGRzY3IsIGxpbmVzLCBjb2x1bW5zKTsNCiAgICArCWlm
IChjb2x1bW5zIDwgNzUgfHwgbGluZXMgPCAyMCkgew0KICAgICsJCWVuZHdpbigpOw0KICAgICsJ
CXByaW50ZigiWW91ciB0ZXJtaW5hbCBzaG91bGQgaGF2ZSBhdCAiDQogICAgKwkJCSJsZWFzdCAy
MCBsaW5lcyBhbmQgNzUgY29sdW1uc1xuIik7DQogICAgKwkJcmV0dXJuIDE7DQogICAgKwl9DQog
ICAgKw0KICAgICsJbm90aW1lb3V0KHN0ZHNjciwgRkFMU0UpOw0KICAgICsjaWYgTkNVUlNFU19S
RUVOVFJBTlQNCiAgICArCXNldF9lc2NkZWxheSgxKTsNCiAgICArI2Vsc2UNCiAgICArCUVTQ0RF
TEFZID0gMTsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsJLyogc2V0IGJ0bnMgbWVudSAqLw0K
ICAgICsJY3Vyc2VzX21lbnUgPSBuZXdfbWVudShjdXJzZXNfbWVudV9pdGVtcyk7DQogICAgKwlt
ZW51X29wdHNfb2ZmKGN1cnNlc19tZW51LCBPX1NIT1dERVNDKTsNCiAgICArCW1lbnVfb3B0c19v
bihjdXJzZXNfbWVudSwgT19TSE9XTUFUQ0gpOw0KICAgICsJbWVudV9vcHRzX29uKGN1cnNlc19t
ZW51LCBPX09ORVZBTFVFKTsNCiAgICArCW1lbnVfb3B0c19vbihjdXJzZXNfbWVudSwgT19OT05D
WUNMSUMpOw0KICAgICsJbWVudV9vcHRzX29uKGN1cnNlc19tZW51LCBPX0lHTk9SRUNBU0UpOw0K
ICAgICsJc2V0X21lbnVfbWFyayhjdXJzZXNfbWVudSwgIiAiKTsNCiAgICArCXNldF9tZW51X2Zv
cmUoY3Vyc2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0ZPUkVdKTsNCiAgICArCXNldF9t
ZW51X2JhY2soY3Vyc2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0JBQ0tdKTsNCiAgICAr
CXNldF9tZW51X2dyZXkoY3Vyc2VzX21lbnUsIGF0dHJpYnV0ZXNbTUFJTl9NRU5VX0dSRVldKTsN
CiAgICArDQogICAgKwlzZXRfY29uZmlnX2ZpbGVuYW1lKGNvbmZfZ2V0X2NvbmZpZ25hbWUoKSk7
DQogICAgKwlzZXR1cF93aW5kb3dzKCk7DQogICAgKw0KICAgICsJLyogY2hlY2sgZm9yIEtFWV9G
VU5DKDEpICovDQogICAgKwlpZiAoaGFzX2tleShLRVlfRigxKSkgPT0gRkFMU0UpIHsNCiAgICAr
CQlzaG93X3Njcm9sbF93aW4obWFpbl93aW5kb3csDQogICAgKwkJCQkiSW5zdHJ1Y3Rpb25zIiwN
CiAgICArCQkJCW1lbnVfbm9fZl9pbnN0cnVjdGlvbnMpOw0KICAgICsJfQ0KICAgICsNCiAgICAr
CWNvbmZfc2V0X21lc3NhZ2VfY2FsbGJhY2soY29uZl9tZXNzYWdlX2NhbGxiYWNrKTsNCiAgICAr
CS8qIGRvIHRoZSB3b3JrICovDQogICAgKwl3aGlsZSAoIWdsb2JhbF9leGl0KSB7DQogICAgKwkJ
Y29uZigmcm9vdG1lbnUpOw0KICAgICsJCWlmICghZ2xvYmFsX2V4aXQgJiYgZG9fZXhpdCgpID09
IDApDQogICAgKwkJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJLyogb2ssIHdlIGFyZSBkb25lICov
DQogICAgKwl1bnBvc3RfbWVudShjdXJzZXNfbWVudSk7DQogICAgKwlmcmVlX21lbnUoY3Vyc2Vz
X21lbnUpOw0KICAgICsJZGVsd2luKG1haW5fd2luZG93KTsNCiAgICArCWNsZWFyKCk7DQogICAg
KwlyZWZyZXNoKCk7DQogICAgKwllbmR3aW4oKTsNCiAgICArCXJldHVybiAwOw0KICAgICt9DQog
ICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9uY29uZi5ndWkuYyBiL3N1cHBvcnQva2Nv
bmZpZy9uY29uZi5ndWkuYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAw
MDAwMC4uNzdmNTI1YQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25m
aWcvbmNvbmYuZ3VpLmMNCiAgICBAQCAtMCwwICsxLDY2NCBAQA0KICAgICsvLyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIw
MDggTmlyIFR6YWNoYXIgPG5pci50emFjaGFyQGdtYWlsLmNvbT4NCiAgICArICoNCiAgICArICog
RGVyaXZlZCBmcm9tIG1lbnVjb25maWcuDQogICAgKyAqLw0KICAgICsjaW5jbHVkZSAibmNvbmYu
aCINCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsNCiAgICArLyogYSBsaXN0IG9mIGFsbCB0
aGUgZGlmZmVyZW50IHdpZGdldHMgd2UgdXNlICovDQogICAgK2F0dHJpYnV0ZXNfdCBhdHRyaWJ1
dGVzW0FUVFJfTUFYKzFdID0gezB9Ow0KICAgICsNCiAgICArLyogYXZhaWxhYmxlIGNvbG9yczoN
CiAgICArICAgQ09MT1JfQkxBQ0sgICAwDQogICAgKyAgIENPTE9SX1JFRCAgICAgMQ0KICAgICsg
ICBDT0xPUl9HUkVFTiAgIDINCiAgICArICAgQ09MT1JfWUVMTE9XICAzDQogICAgKyAgIENPTE9S
X0JMVUUgICAgNA0KICAgICsgICBDT0xPUl9NQUdFTlRBIDUNCiAgICArICAgQ09MT1JfQ1lBTiAg
ICA2DQogICAgKyAgIENPTE9SX1dISVRFICAgNw0KICAgICsgICAqLw0KICAgICtzdGF0aWMgdm9p
ZCBzZXRfbm9ybWFsX2NvbG9ycyh2b2lkKQ0KICAgICt7DQogICAgKwlpbml0X3BhaXIoTk9STUFM
LCAtMSwgLTEpOw0KICAgICsJaW5pdF9wYWlyKE1BSU5fSEVBRElORywgQ09MT1JfTUFHRU5UQSwg
LTEpOw0KICAgICsNCiAgICArCS8qIEZPUkUgaXMgZm9yIHRoZSBzZWxlY3RlZCBpdGVtICovDQog
ICAgKwlpbml0X3BhaXIoTUFJTl9NRU5VX0ZPUkUsIC0xLCAtMSk7DQogICAgKwkvKiBCQUNLIGZv
ciBhbGwgdGhlIHJlc3QgKi8NCiAgICArCWluaXRfcGFpcihNQUlOX01FTlVfQkFDSywgLTEsIC0x
KTsNCiAgICArCWluaXRfcGFpcihNQUlOX01FTlVfR1JFWSwgLTEsIC0xKTsNCiAgICArCWluaXRf
cGFpcihNQUlOX01FTlVfSEVBRElORywgQ09MT1JfR1JFRU4sIC0xKTsNCiAgICArCWluaXRfcGFp
cihNQUlOX01FTlVfQk9YLCBDT0xPUl9ZRUxMT1csIC0xKTsNCiAgICArDQogICAgKwlpbml0X3Bh
aXIoU0NST0xMV0lOX1RFWFQsIC0xLCAtMSk7DQogICAgKwlpbml0X3BhaXIoU0NST0xMV0lOX0hF
QURJTkcsIENPTE9SX0dSRUVOLCAtMSk7DQogICAgKwlpbml0X3BhaXIoU0NST0xMV0lOX0JPWCwg
Q09MT1JfWUVMTE9XLCAtMSk7DQogICAgKw0KICAgICsJaW5pdF9wYWlyKERJQUxPR19URVhULCAt
MSwgLTEpOw0KICAgICsJaW5pdF9wYWlyKERJQUxPR19CT1gsIENPTE9SX1lFTExPVywgLTEpOw0K
ICAgICsJaW5pdF9wYWlyKERJQUxPR19NRU5VX0JBQ0ssIENPTE9SX1lFTExPVywgLTEpOw0KICAg
ICsJaW5pdF9wYWlyKERJQUxPR19NRU5VX0ZPUkUsIENPTE9SX1JFRCwgLTEpOw0KICAgICsNCiAg
ICArCWluaXRfcGFpcihJTlBVVF9CT1gsIENPTE9SX1lFTExPVywgLTEpOw0KICAgICsJaW5pdF9w
YWlyKElOUFVUX0hFQURJTkcsIENPTE9SX0dSRUVOLCAtMSk7DQogICAgKwlpbml0X3BhaXIoSU5Q
VVRfVEVYVCwgLTEsIC0xKTsNCiAgICArCWluaXRfcGFpcihJTlBVVF9GSUVMRCwgLTEsIC0xKTsN
CiAgICArDQogICAgKwlpbml0X3BhaXIoRlVOQ1RJT05fSElHSExJR0hULCAtMSwgLTEpOw0KICAg
ICsJaW5pdF9wYWlyKEZVTkNUSU9OX1RFWFQsIENPTE9SX1lFTExPVywgLTEpOw0KICAgICt9DQog
ICAgKw0KICAgICsvKiBhdmFpbGFibGUgYXR0cmlidXRlczoNCiAgICArICAgQV9OT1JNQUwgICAg
ICAgIE5vcm1hbCBkaXNwbGF5IChubyBoaWdobGlnaHQpDQogICAgKyAgIEFfU1RBTkRPVVQgICAg
ICBCZXN0IGhpZ2hsaWdodGluZyBtb2RlIG9mIHRoZSB0ZXJtaW5hbC4NCiAgICArICAgQV9VTkRF
UkxJTkUgICAgIFVuZGVybGluaW5nDQogICAgKyAgIEFfUkVWRVJTRSAgICAgICBSZXZlcnNlIHZp
ZGVvDQogICAgKyAgIEFfQkxJTksgICAgICAgICBCbGlua2luZw0KICAgICsgICBBX0RJTSAgICAg
ICAgICAgSGFsZiBicmlnaHQNCiAgICArICAgQV9CT0xEICAgICAgICAgIEV4dHJhIGJyaWdodCBv
ciBib2xkDQogICAgKyAgIEFfUFJPVEVDVCAgICAgICBQcm90ZWN0ZWQgbW9kZQ0KICAgICsgICBB
X0lOVklTICAgICAgICAgSW52aXNpYmxlIG9yIGJsYW5rIG1vZGUNCiAgICArICAgQV9BTFRDSEFS
U0VUICAgIEFsdGVybmF0ZSBjaGFyYWN0ZXIgc2V0DQogICAgKyAgIEFfQ0hBUlRFWFQgICAgICBC
aXQtbWFzayB0byBleHRyYWN0IGEgY2hhcmFjdGVyDQogICAgKyAgIENPTE9SX1BBSVIobikgICBD
b2xvci1wYWlyIG51bWJlciBuDQogICAgKyAgICovDQogICAgK3N0YXRpYyB2b2lkIG5vcm1hbF9j
b2xvcl90aGVtZSh2b2lkKQ0KICAgICt7DQogICAgKwkvKiBhdXRvbWF0aWNhbGx5IGFkZCBjb2xv
ci4uLiAqLw0KICAgICsjZGVmaW5lIG1rYXR0cihuYW1lLCBhdHRyKSBkbyB7IFwNCiAgICArYXR0
cmlidXRlc1tuYW1lXSA9IGF0dHIgfCBDT0xPUl9QQUlSKG5hbWUpOyB9IHdoaWxlICgwKQ0KICAg
ICsJbWthdHRyKE5PUk1BTCwgTk9STUFMKTsNCiAgICArCW1rYXR0cihNQUlOX0hFQURJTkcsIEFf
Qk9MRCB8IEFfVU5ERVJMSU5FKTsNCiAgICArDQogICAgKwlta2F0dHIoTUFJTl9NRU5VX0ZPUkUs
IEFfUkVWRVJTRSk7DQogICAgKwlta2F0dHIoTUFJTl9NRU5VX0JBQ0ssIEFfTk9STUFMKTsNCiAg
ICArCW1rYXR0cihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOw0KICAgICsJbWthdHRyKE1BSU5f
TUVOVV9IRUFESU5HLCBBX0JPTEQpOw0KICAgICsJbWthdHRyKE1BSU5fTUVOVV9CT1gsIEFfTk9S
TUFMKTsNCiAgICArDQogICAgKwlta2F0dHIoU0NST0xMV0lOX1RFWFQsIEFfTk9STUFMKTsNCiAg
ICArCW1rYXR0cihTQ1JPTExXSU5fSEVBRElORywgQV9CT0xEKTsNCiAgICArCW1rYXR0cihTQ1JP
TExXSU5fQk9YLCBBX0JPTEQpOw0KICAgICsNCiAgICArCW1rYXR0cihESUFMT0dfVEVYVCwgQV9C
T0xEKTsNCiAgICArCW1rYXR0cihESUFMT0dfQk9YLCBBX0JPTEQpOw0KICAgICsJbWthdHRyKERJ
QUxPR19NRU5VX0ZPUkUsIEFfU1RBTkRPVVQpOw0KICAgICsJbWthdHRyKERJQUxPR19NRU5VX0JB
Q0ssIEFfTk9STUFMKTsNCiAgICArDQogICAgKwlta2F0dHIoSU5QVVRfQk9YLCBBX05PUk1BTCk7
DQogICAgKwlta2F0dHIoSU5QVVRfSEVBRElORywgQV9CT0xEKTsNCiAgICArCW1rYXR0cihJTlBV
VF9URVhULCBBX05PUk1BTCk7DQogICAgKwlta2F0dHIoSU5QVVRfRklFTEQsIEFfVU5ERVJMSU5F
KTsNCiAgICArDQogICAgKwlta2F0dHIoRlVOQ1RJT05fSElHSExJR0hULCBBX0JPTEQpOw0KICAg
ICsJbWthdHRyKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyB2b2lkIG5vX2NvbG9yc190aGVtZSh2b2lkKQ0KICAgICt7DQogICAgKwkvKiBhdXRv
bWF0aWNhbGx5IGFkZCBoaWdobGlnaHQsIG5vIGNvbG9yICovDQogICAgKyNkZWZpbmUgbWthdHRy
bihuYW1lLCBhdHRyKSB7IGF0dHJpYnV0ZXNbbmFtZV0gPSBhdHRyOyB9DQogICAgKw0KICAgICsJ
bWthdHRybihOT1JNQUwsIE5PUk1BTCk7DQogICAgKwlta2F0dHJuKE1BSU5fSEVBRElORywgQV9C
T0xEIHwgQV9VTkRFUkxJTkUpOw0KICAgICsNCiAgICArCW1rYXR0cm4oTUFJTl9NRU5VX0ZPUkUs
IEFfU1RBTkRPVVQpOw0KICAgICsJbWthdHRybihNQUlOX01FTlVfQkFDSywgQV9OT1JNQUwpOw0K
ICAgICsJbWthdHRybihNQUlOX01FTlVfR1JFWSwgQV9OT1JNQUwpOw0KICAgICsJbWthdHRybihN
QUlOX01FTlVfSEVBRElORywgQV9CT0xEKTsNCiAgICArCW1rYXR0cm4oTUFJTl9NRU5VX0JPWCwg
QV9OT1JNQUwpOw0KICAgICsNCiAgICArCW1rYXR0cm4oU0NST0xMV0lOX1RFWFQsIEFfTk9STUFM
KTsNCiAgICArCW1rYXR0cm4oU0NST0xMV0lOX0hFQURJTkcsIEFfQk9MRCk7DQogICAgKwlta2F0
dHJuKFNDUk9MTFdJTl9CT1gsIEFfQk9MRCk7DQogICAgKw0KICAgICsJbWthdHRybihESUFMT0df
VEVYVCwgQV9OT1JNQUwpOw0KICAgICsJbWthdHRybihESUFMT0dfQk9YLCBBX0JPTEQpOw0KICAg
ICsJbWthdHRybihESUFMT0dfTUVOVV9GT1JFLCBBX1NUQU5ET1VUKTsNCiAgICArCW1rYXR0cm4o
RElBTE9HX01FTlVfQkFDSywgQV9OT1JNQUwpOw0KICAgICsNCiAgICArCW1rYXR0cm4oSU5QVVRf
Qk9YLCBBX0JPTEQpOw0KICAgICsJbWthdHRybihJTlBVVF9IRUFESU5HLCBBX0JPTEQpOw0KICAg
ICsJbWthdHRybihJTlBVVF9URVhULCBBX05PUk1BTCk7DQogICAgKwlta2F0dHJuKElOUFVUX0ZJ
RUxELCBBX1VOREVSTElORSk7DQogICAgKw0KICAgICsJbWthdHRybihGVU5DVElPTl9ISUdITElH
SFQsIEFfQk9MRCk7DQogICAgKwlta2F0dHJuKEZVTkNUSU9OX1RFWFQsIEFfUkVWRVJTRSk7DQog
ICAgK30NCiAgICArDQogICAgK3ZvaWQgc2V0X2NvbG9ycyh2b2lkKQ0KICAgICt7DQogICAgKwlz
dGFydF9jb2xvcigpOw0KICAgICsJdXNlX2RlZmF1bHRfY29sb3JzKCk7DQogICAgKwlzZXRfbm9y
bWFsX2NvbG9ycygpOw0KICAgICsJaWYgKGhhc19jb2xvcnMoKSkgew0KICAgICsJCW5vcm1hbF9j
b2xvcl90aGVtZSgpOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQkvKiBnaXZlIGRlZmF1bHRzICov
DQogICAgKwkJbm9fY29sb3JzX3RoZW1lKCk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAg
Kw0KICAgICsvKiB0aGlzIGNoYW5nZXMgdGhlIHdpbmRvd3MgYXR0cmlidXRlcyAhISEgKi8NCiAg
ICArdm9pZCBwcmludF9pbl9taWRkbGUoV0lORE9XICp3aW4sDQogICAgKwkJaW50IHN0YXJ0eSwN
CiAgICArCQlpbnQgc3RhcnR4LA0KICAgICsJCWludCB3aWR0aCwNCiAgICArCQljb25zdCBjaGFy
ICpzdHJpbmcsDQogICAgKwkJY2h0eXBlIGNvbG9yKQ0KICAgICt7ICAgICAgaW50IGxlbmd0aCwg
eCwgeTsNCiAgICArCWZsb2F0IHRlbXA7DQogICAgKw0KICAgICsNCiAgICArCWlmICh3aW4gPT0g
TlVMTCkNCiAgICArCQl3aW4gPSBzdGRzY3I7DQogICAgKwlnZXR5eCh3aW4sIHksIHgpOw0KICAg
ICsJaWYgKHN0YXJ0eCAhPSAwKQ0KICAgICsJCXggPSBzdGFydHg7DQogICAgKwlpZiAoc3RhcnR5
ICE9IDApDQogICAgKwkJeSA9IHN0YXJ0eTsNCiAgICArCWlmICh3aWR0aCA9PSAwKQ0KICAgICsJ
CXdpZHRoID0gODA7DQogICAgKw0KICAgICsJbGVuZ3RoID0gc3RybGVuKHN0cmluZyk7DQogICAg
Kwl0ZW1wID0gKHdpZHRoIC0gbGVuZ3RoKSAvIDI7DQogICAgKwl4ID0gc3RhcnR4ICsgKGludCl0
ZW1wOw0KICAgICsJKHZvaWQpIHdhdHRyc2V0KHdpbiwgY29sb3IpOw0KICAgICsJbXZ3cHJpbnR3
KHdpbiwgeSwgeCwgIiVzIiwgc3RyaW5nKTsNCiAgICArCXJlZnJlc2goKTsNCiAgICArfQ0KICAg
ICsNCiAgICAraW50IGdldF9saW5lX25vKGNvbnN0IGNoYXIgKnRleHQpDQogICAgK3sNCiAgICAr
CWludCBpOw0KICAgICsJaW50IHRvdGFsID0gMTsNCiAgICArDQogICAgKwlpZiAoIXRleHQpDQog
ICAgKwkJcmV0dXJuIDA7DQogICAgKw0KICAgICsJZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAn
OyBpKyspDQogICAgKwkJaWYgKHRleHRbaV0gPT0gJ1xuJykNCiAgICArCQkJdG90YWwrKzsNCiAg
ICArCXJldHVybiB0b3RhbDsNCiAgICArfQ0KICAgICsNCiAgICArY29uc3QgY2hhciAqZ2V0X2xp
bmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVfbm8pDQogICAgK3sNCiAgICArCWludCBpOw0K
ICAgICsJaW50IGxpbmVzID0gMDsNCiAgICArDQogICAgKwlpZiAoIXRleHQpDQogICAgKwkJcmV0
dXJuIE5VTEw7DQogICAgKw0KICAgICsJZm9yIChpID0gMDsgdGV4dFtpXSAhPSAnXDAnICYmIGxp
bmVzIDwgbGluZV9ubzsgaSsrKQ0KICAgICsJCWlmICh0ZXh0W2ldID09ICdcbicpDQogICAgKwkJ
CWxpbmVzKys7DQogICAgKwlyZXR1cm4gdGV4dCtpOw0KICAgICt9DQogICAgKw0KICAgICtpbnQg
Z2V0X2xpbmVfbGVuZ3RoKGNvbnN0IGNoYXIgKmxpbmUpDQogICAgK3sNCiAgICArCWludCByZXMg
PSAwOw0KICAgICsJd2hpbGUgKCpsaW5lICE9ICdcMCcgJiYgKmxpbmUgIT0gJ1xuJykgew0KICAg
ICsJCWxpbmUrKzsNCiAgICArCQlyZXMrKzsNCiAgICArCX0NCiAgICArCXJldHVybiByZXM7DQog
ICAgK30NCiAgICArDQogICAgKy8qIHByaW50IGFsbCBsaW5lcyB0byB0aGUgd2luZG93LiAqLw0K
ICAgICt2b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KQ0KICAg
ICt7DQogICAgKwlpbnQgeCwgeTsNCiAgICArCWludCB0b3RhbF9saW5lcyA9IGdldF9saW5lX25v
KHRleHQpOw0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJZ2V0bWF4eXgod2luLCB5LCB4KTsN
CiAgICArCS8qIGRvIG5vdCBnbyBvdmVyIGVuZCBvZiBsaW5lICovDQogICAgKwl0b3RhbF9saW5l
cyA9IG1pbih0b3RhbF9saW5lcywgeSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgdG90YWxfbGlu
ZXM7IGkrKykgew0KICAgICsJCWNoYXIgdG1wW3grMTBdOw0KICAgICsJCWNvbnN0IGNoYXIgKmxp
bmUgPSBnZXRfbGluZSh0ZXh0LCBpKTsNCiAgICArCQlpbnQgbGVuID0gZ2V0X2xpbmVfbGVuZ3Ro
KGxpbmUpOw0KICAgICsJCXN0cm5jcHkodG1wLCBsaW5lLCBtaW4obGVuLCB4KSk7DQogICAgKwkJ
dG1wW2xlbl0gPSAnXDAnOw0KICAgICsJCW12d3ByaW50dyh3aW4sIGksIDAsICIlcyIsIHRtcCk7
DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qIGdldCB0aGUgbWVzc2FnZSwgYW5kIGJ1
dHRvbnMuDQogICAgKyAqIGVhY2ggYnV0dG9uIG11c3QgYmUgYSBjaGFyKg0KICAgICsgKiByZXR1
cm4gdGhlIHNlbGVjdGVkIGJ1dHRvbg0KICAgICsgKg0KICAgICsgKiB0aGlzIGRpYWxvZyBpcyB1
c2VkIGZvciAyIGRpZmZlcmVudCB0aGluZ3M6DQogICAgKyAqIDEpIHNob3cgYSB0ZXh0IGJveCwg
bm8gYnV0dG9ucy4NCiAgICArICogMikgc2hvdyBhIGRpYWxvZywgd2l0aCBob3Jpem9udGFsIGJ1
dHRvbnMNCiAgICArICovDQogICAgK2ludCBidG5fZGlhbG9nKFdJTkRPVyAqbWFpbl93aW5kb3cs
IGNvbnN0IGNoYXIgKm1zZywgaW50IGJ0bl9udW0sIC4uLikNCiAgICArew0KICAgICsJdmFfbGlz
dCBhcDsNCiAgICArCWNoYXIgKmJ0bjsNCiAgICArCWludCBidG5zX3dpZHRoID0gMDsNCiAgICAr
CWludCBtc2dfbGluZXMgPSAwOw0KICAgICsJaW50IG1zZ193aWR0aCA9IDA7DQogICAgKwlpbnQg
dG90YWxfd2lkdGg7DQogICAgKwlpbnQgd2luX3Jvd3MgPSAwOw0KICAgICsJV0lORE9XICp3aW47
DQogICAgKwlXSU5ET1cgKm1zZ193aW47DQogICAgKwlXSU5ET1cgKm1lbnVfd2luOw0KICAgICsJ
TUVOVSAqbWVudTsNCiAgICArCUlURU0gKmJ0bnNbYnRuX251bSsxXTsNCiAgICArCWludCBpLCB4
LCB5Ow0KICAgICsJaW50IHJlcyA9IC0xOw0KICAgICsNCiAgICArDQogICAgKwl2YV9zdGFydChh
cCwgYnRuX251bSk7DQogICAgKwlmb3IgKGkgPSAwOyBpIDwgYnRuX251bTsgaSsrKSB7DQogICAg
KwkJYnRuID0gdmFfYXJnKGFwLCBjaGFyICopOw0KICAgICsJCWJ0bnNbaV0gPSBuZXdfaXRlbShi
dG4sICIiKTsNCiAgICArCQlidG5zX3dpZHRoICs9IHN0cmxlbihidG4pKzE7DQogICAgKwl9DQog
ICAgKwl2YV9lbmQoYXApOw0KICAgICsJYnRuc1tidG5fbnVtXSA9IE5VTEw7DQogICAgKw0KICAg
ICsJLyogZmluZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLw0KICAgICsJbXNnX2xpbmVzID0g
Z2V0X2xpbmVfbm8obXNnKTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBtc2dfbGluZXM7IGkrKykg
ew0KICAgICsJCWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGluZShtc2csIGkpOw0KICAgICsJCWlu
dCBsZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7DQogICAgKwkJaWYgKG1zZ193aWR0aCA8IGxl
bikNCiAgICArCQkJbXNnX3dpZHRoID0gbGVuOw0KICAgICsJfQ0KICAgICsNCiAgICArCXRvdGFs
X3dpZHRoID0gbWF4KG1zZ193aWR0aCwgYnRuc193aWR0aCk7DQogICAgKwkvKiBwbGFjZSBkaWFs
b2cgaW4gbWlkZGxlIG9mIHNjcmVlbiAqLw0KICAgICsJeSA9IChnZXRtYXh5KHN0ZHNjciktKG1z
Z19saW5lcys0KSkvMjsNCiAgICArCXggPSAoZ2V0bWF4eChzdGRzY3IpLSh0b3RhbF93aWR0aCs0
KSkvMjsNCiAgICArDQogICAgKw0KICAgICsJLyogY3JlYXRlIHRoZSB3aW5kb3dzICovDQogICAg
KwlpZiAoYnRuX251bSA+IDApDQogICAgKwkJd2luX3Jvd3MgPSBtc2dfbGluZXMrNDsNCiAgICAr
CWVsc2UNCiAgICArCQl3aW5fcm93cyA9IG1zZ19saW5lcysyOw0KICAgICsNCiAgICArCXdpbiA9
IG5ld3dpbih3aW5fcm93cywgdG90YWxfd2lkdGgrNCwgeSwgeCk7DQogICAgKwlrZXlwYWQod2lu
LCBUUlVFKTsNCiAgICArCW1lbnVfd2luID0gZGVyd2luKHdpbiwgMSwgYnRuc193aWR0aCwgd2lu
X3Jvd3MtMiwNCiAgICArCQkJMSsodG90YWxfd2lkdGgrMi1idG5zX3dpZHRoKS8yKTsNCiAgICAr
CW1lbnUgPSBuZXdfbWVudShidG5zKTsNCiAgICArCW1zZ193aW4gPSBkZXJ3aW4od2luLCB3aW5f
cm93cy0yLCBtc2dfd2lkdGgsIDEsDQogICAgKwkJCTErKHRvdGFsX3dpZHRoKzItbXNnX3dpZHRo
KS8yKTsNCiAgICArDQogICAgKwlzZXRfbWVudV9mb3JlKG1lbnUsIGF0dHJpYnV0ZXNbRElBTE9H
X01FTlVfRk9SRV0pOw0KICAgICsJc2V0X21lbnVfYmFjayhtZW51LCBhdHRyaWJ1dGVzW0RJQUxP
R19NRU5VX0JBQ0tdKTsNCiAgICArDQogICAgKwkodm9pZCkgd2F0dHJzZXQod2luLCBhdHRyaWJ1
dGVzW0RJQUxPR19CT1hdKTsNCiAgICArCWJveCh3aW4sIDAsIDApOw0KICAgICsNCiAgICArCS8q
IHByaW50IG1lc3NhZ2UgKi8NCiAgICArCSh2b2lkKSB3YXR0cnNldChtc2dfd2luLCBhdHRyaWJ1
dGVzW0RJQUxPR19URVhUXSk7DQogICAgKwlmaWxsX3dpbmRvdyhtc2dfd2luLCBtc2cpOw0KICAg
ICsNCiAgICArCXNldF9tZW51X3dpbihtZW51LCB3aW4pOw0KICAgICsJc2V0X21lbnVfc3ViKG1l
bnUsIG1lbnVfd2luKTsNCiAgICArCXNldF9tZW51X2Zvcm1hdChtZW51LCAxLCBidG5fbnVtKTsN
CiAgICArCW1lbnVfb3B0c19vZmYobWVudSwgT19TSE9XREVTQyk7DQogICAgKwltZW51X29wdHNf
b2ZmKG1lbnUsIE9fU0hPV01BVENIKTsNCiAgICArCW1lbnVfb3B0c19vbihtZW51LCBPX09ORVZB
TFVFKTsNCiAgICArCW1lbnVfb3B0c19vbihtZW51LCBPX05PTkNZQ0xJQyk7DQogICAgKwlzZXRf
bWVudV9tYXJrKG1lbnUsICIiKTsNCiAgICArCXBvc3RfbWVudShtZW51KTsNCiAgICArDQogICAg
Kw0KICAgICsJdG91Y2h3aW4od2luKTsNCiAgICArCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93
aW5kb3cpOw0KICAgICsJd2hpbGUgKChyZXMgPSB3Z2V0Y2god2luKSkpIHsNCiAgICArCQlzd2l0
Y2ggKHJlcykgew0KICAgICsJCWNhc2UgS0VZX0xFRlQ6DQogICAgKwkJCW1lbnVfZHJpdmVyKG1l
bnUsIFJFUV9MRUZUX0lURU0pOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9SSUdI
VDoNCiAgICArCQkJbWVudV9kcml2ZXIobWVudSwgUkVRX1JJR0hUX0lURU0pOw0KICAgICsJCQli
cmVhazsNCiAgICArCQljYXNlIDEwOiAvKiBFTlRFUiAqLw0KICAgICsJCWNhc2UgMjc6IC8qIEVT
Q0FQRSAqLw0KICAgICsJCWNhc2UgJyAnOg0KICAgICsJCWNhc2UgS0VZX0YoRl9CQUNLKToNCiAg
ICArCQljYXNlIEtFWV9GKEZfRVhJVCk6DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICAr
CQl0b3VjaHdpbih3aW4pOw0KICAgICsJCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cp
Ow0KICAgICsNCiAgICArCQlpZiAocmVzID09IDEwIHx8IHJlcyA9PSAnICcpIHsNCiAgICArCQkJ
cmVzID0gaXRlbV9pbmRleChjdXJyZW50X2l0ZW0obWVudSkpOw0KICAgICsJCQlicmVhazsNCiAg
ICArCQl9IGVsc2UgaWYgKHJlcyA9PSAyNyB8fCByZXMgPT0gS0VZX0YoRl9CQUNLKSB8fA0KICAg
ICsJCQkJcmVzID09IEtFWV9GKEZfRVhJVCkpIHsNCiAgICArCQkJcmVzID0gS0VZX0VYSVQ7DQog
ICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwl1bnBvc3RfbWVu
dShtZW51KTsNCiAgICArCWZyZWVfbWVudShtZW51KTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBi
dG5fbnVtOyBpKyspDQogICAgKwkJZnJlZV9pdGVtKGJ0bnNbaV0pOw0KICAgICsNCiAgICArCWRl
bHdpbih3aW4pOw0KICAgICsJcmV0dXJuIHJlczsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGRp
YWxvZ19pbnB1dGJveChXSU5ET1cgKm1haW5fd2luZG93LA0KICAgICsJCWNvbnN0IGNoYXIgKnRp
dGxlLCBjb25zdCBjaGFyICpwcm9tcHQsDQogICAgKwkJY29uc3QgY2hhciAqaW5pdCwgY2hhciAq
KnJlc3VsdHAsIGludCAqcmVzdWx0X2xlbikNCiAgICArew0KICAgICsJaW50IHByb21wdF9saW5l
cyA9IDA7DQogICAgKwlpbnQgcHJvbXB0X3dpZHRoID0gMDsNCiAgICArCVdJTkRPVyAqd2luOw0K
ICAgICsJV0lORE9XICpwcm9tcHRfd2luOw0KICAgICsJV0lORE9XICpmb3JtX3dpbjsNCiAgICAr
CVBBTkVMICpwYW5lbDsNCiAgICArCWludCBpLCB4LCB5LCBsaW5lcywgY29sdW1ucywgd2luX2xp
bmVzLCB3aW5fY29sczsNCiAgICArCWludCByZXMgPSAtMTsNCiAgICArCWludCBjdXJzb3JfcG9z
aXRpb24gPSBzdHJsZW4oaW5pdCk7DQogICAgKwlpbnQgY3Vyc29yX2Zvcm1fd2luOw0KICAgICsJ
Y2hhciAqcmVzdWx0ID0gKnJlc3VsdHA7DQogICAgKw0KICAgICsJZ2V0bWF4eXgoc3Rkc2NyLCBs
aW5lcywgY29sdW1ucyk7DQogICAgKw0KICAgICsJaWYgKHN0cmxlbihpbml0KSsxID4gKnJlc3Vs
dF9sZW4pIHsNCiAgICArCQkqcmVzdWx0X2xlbiA9IHN0cmxlbihpbml0KSsxOw0KICAgICsJCSpy
ZXN1bHRwID0gcmVzdWx0ID0geHJlYWxsb2MocmVzdWx0LCAqcmVzdWx0X2xlbik7DQogICAgKwl9
DQogICAgKw0KICAgICsJLyogZmluZCB0aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLw0KICAgICsJ
cHJvbXB0X2xpbmVzID0gZ2V0X2xpbmVfbm8ocHJvbXB0KTsNCiAgICArCWZvciAoaSA9IDA7IGkg
PCBwcm9tcHRfbGluZXM7IGkrKykgew0KICAgICsJCWNvbnN0IGNoYXIgKmxpbmUgPSBnZXRfbGlu
ZShwcm9tcHQsIGkpOw0KICAgICsJCWludCBsZW4gPSBnZXRfbGluZV9sZW5ndGgobGluZSk7DQog
ICAgKwkJcHJvbXB0X3dpZHRoID0gbWF4KHByb21wdF93aWR0aCwgbGVuKTsNCiAgICArCX0NCiAg
ICArDQogICAgKwlpZiAodGl0bGUpDQogICAgKwkJcHJvbXB0X3dpZHRoID0gbWF4KHByb21wdF93
aWR0aCwgc3RybGVuKHRpdGxlKSk7DQogICAgKw0KICAgICsJd2luX2xpbmVzID0gbWluKHByb21w
dF9saW5lcys2LCBsaW5lcy0yKTsNCiAgICArCXdpbl9jb2xzID0gbWluKHByb21wdF93aWR0aCs3
LCBjb2x1bW5zLTIpOw0KICAgICsJcHJvbXB0X2xpbmVzID0gbWF4KHdpbl9saW5lcy02LCAwKTsN
CiAgICArCXByb21wdF93aWR0aCA9IG1heCh3aW5fY29scy03LCAwKTsNCiAgICArDQogICAgKwkv
KiBwbGFjZSBkaWFsb2cgaW4gbWlkZGxlIG9mIHNjcmVlbiAqLw0KICAgICsJeSA9IChsaW5lcy13
aW5fbGluZXMpLzI7DQogICAgKwl4ID0gKGNvbHVtbnMtd2luX2NvbHMpLzI7DQogICAgKw0KICAg
ICsJc3RybmNweShyZXN1bHQsIGluaXQsICpyZXN1bHRfbGVuKTsNCiAgICArDQogICAgKwkvKiBj
cmVhdGUgdGhlIHdpbmRvd3MgKi8NCiAgICArCXdpbiA9IG5ld3dpbih3aW5fbGluZXMsIHdpbl9j
b2xzLCB5LCB4KTsNCiAgICArCXByb21wdF93aW4gPSBkZXJ3aW4od2luLCBwcm9tcHRfbGluZXMr
MSwgcHJvbXB0X3dpZHRoLCAyLCAyKTsNCiAgICArCWZvcm1fd2luID0gZGVyd2luKHdpbiwgMSwg
cHJvbXB0X3dpZHRoLCBwcm9tcHRfbGluZXMrMywgMik7DQogICAgKwlrZXlwYWQoZm9ybV93aW4s
IFRSVUUpOw0KICAgICsNCiAgICArCSh2b2lkKSB3YXR0cnNldChmb3JtX3dpbiwgYXR0cmlidXRl
c1tJTlBVVF9GSUVMRF0pOw0KICAgICsNCiAgICArCSh2b2lkKSB3YXR0cnNldCh3aW4sIGF0dHJp
YnV0ZXNbSU5QVVRfQk9YXSk7DQogICAgKwlib3god2luLCAwLCAwKTsNCiAgICArCSh2b2lkKSB3
YXR0cnNldCh3aW4sIGF0dHJpYnV0ZXNbSU5QVVRfSEVBRElOR10pOw0KICAgICsJaWYgKHRpdGxl
KQ0KICAgICsJCW12d3ByaW50dyh3aW4sIDAsIDMsICIlcyIsIHRpdGxlKTsNCiAgICArDQogICAg
KwkvKiBwcmludCBtZXNzYWdlICovDQogICAgKwkodm9pZCkgd2F0dHJzZXQocHJvbXB0X3dpbiwg
YXR0cmlidXRlc1tJTlBVVF9URVhUXSk7DQogICAgKwlmaWxsX3dpbmRvdyhwcm9tcHRfd2luLCBw
cm9tcHQpOw0KICAgICsNCiAgICArCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwgIiUqcyIsIHBy
b21wdF93aWR0aCwgIiAiKTsNCiAgICArCWN1cnNvcl9mb3JtX3dpbiA9IG1pbihjdXJzb3JfcG9z
aXRpb24sIHByb21wdF93aWR0aC0xKTsNCiAgICArCW12d3ByaW50dyhmb3JtX3dpbiwgMCwgMCwg
IiVzIiwNCiAgICArCQkgIHJlc3VsdCArIGN1cnNvcl9wb3NpdGlvbi1jdXJzb3JfZm9ybV93aW4p
Ow0KICAgICsNCiAgICArCS8qIGNyZWF0ZSBwYW5lbHMgKi8NCiAgICArCXBhbmVsID0gbmV3X3Bh
bmVsKHdpbik7DQogICAgKw0KICAgICsJLyogc2hvdyB0aGUgY3Vyc29yICovDQogICAgKwljdXJz
X3NldCgxKTsNCiAgICArDQogICAgKwl0b3VjaHdpbih3aW4pOw0KICAgICsJcmVmcmVzaF9hbGxf
d2luZG93cyhtYWluX3dpbmRvdyk7DQogICAgKwl3aGlsZSAoKHJlcyA9IHdnZXRjaChmb3JtX3dp
bikpKSB7DQogICAgKwkJaW50IGxlbiA9IHN0cmxlbihyZXN1bHQpOw0KICAgICsJCXN3aXRjaCAo
cmVzKSB7DQogICAgKwkJY2FzZSAxMDogLyogRU5URVIgKi8NCiAgICArCQljYXNlIDI3OiAvKiBF
U0NBUEUgKi8NCiAgICArCQljYXNlIEtFWV9GKEZfSEVMUCk6DQogICAgKwkJY2FzZSBLRVlfRihG
X0VYSVQpOg0KICAgICsJCWNhc2UgS0VZX0YoRl9CQUNLKToNCiAgICArCQkJYnJlYWs7DQogICAg
KwkJY2FzZSA4OiAgIC8qIF5IICovDQogICAgKwkJY2FzZSAxMjc6IC8qIF4/ICovDQogICAgKwkJ
Y2FzZSBLRVlfQkFDS1NQQUNFOg0KICAgICsJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID4gMCkgew0K
ICAgICsJCQkJbWVtbW92ZSgmcmVzdWx0W2N1cnNvcl9wb3NpdGlvbi0xXSwNCiAgICArCQkJCQkJ
JnJlc3VsdFtjdXJzb3JfcG9zaXRpb25dLA0KICAgICsJCQkJCQlsZW4tY3Vyc29yX3Bvc2l0aW9u
KzEpOw0KICAgICsJCQkJY3Vyc29yX3Bvc2l0aW9uLS07DQogICAgKwkJCQljdXJzb3JfZm9ybV93
aW4tLTsNCiAgICArCQkJCWxlbi0tOw0KICAgICsJCQl9DQogICAgKwkJCWJyZWFrOw0KICAgICsJ
CWNhc2UgS0VZX0RDOg0KICAgICsJCQlpZiAoY3Vyc29yX3Bvc2l0aW9uID49IDAgJiYgY3Vyc29y
X3Bvc2l0aW9uIDwgbGVuKSB7DQogICAgKwkJCQltZW1tb3ZlKCZyZXN1bHRbY3Vyc29yX3Bvc2l0
aW9uXSwNCiAgICArCQkJCQkJJnJlc3VsdFtjdXJzb3JfcG9zaXRpb24rMV0sDQogICAgKwkJCQkJ
CWxlbi1jdXJzb3JfcG9zaXRpb24rMSk7DQogICAgKwkJCQlsZW4tLTsNCiAgICArCQkJfQ0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9VUDoNCiAgICArCQljYXNlIEtFWV9SSUdIVDoN
CiAgICArCQkJaWYgKGN1cnNvcl9wb3NpdGlvbiA8IGxlbikgew0KICAgICsJCQkJY3Vyc29yX3Bv
c2l0aW9uKys7DQogICAgKwkJCQljdXJzb3JfZm9ybV93aW4rKzsNCiAgICArCQkJfQ0KICAgICsJ
CQlicmVhazsNCiAgICArCQljYXNlIEtFWV9ET1dOOg0KICAgICsJCWNhc2UgS0VZX0xFRlQ6DQog
ICAgKwkJCWlmIChjdXJzb3JfcG9zaXRpb24gPiAwKSB7DQogICAgKwkJCQljdXJzb3JfcG9zaXRp
b24tLTsNCiAgICArCQkJCWN1cnNvcl9mb3JtX3dpbi0tOw0KICAgICsJCQl9DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgS0VZX0hPTUU6DQogICAgKwkJCWN1cnNvcl9wb3NpdGlvbiA9IDA7
DQogICAgKwkJCWN1cnNvcl9mb3JtX3dpbiA9IDA7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNh
c2UgS0VZX0VORDoNCiAgICArCQkJY3Vyc29yX3Bvc2l0aW9uID0gbGVuOw0KICAgICsJCQljdXJz
b3JfZm9ybV93aW4gPSBtaW4oY3Vyc29yX3Bvc2l0aW9uLCBwcm9tcHRfd2lkdGgtMSk7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCWRlZmF1bHQ6DQogICAgKwkJCWlmICgoaXNncmFwaChyZXMpIHx8
IGlzc3BhY2UocmVzKSkpIHsNCiAgICArCQkJCS8qIG9uZSBmb3IgbmV3IGNoYXIsIG9uZSBmb3Ig
J1wwJyAqLw0KICAgICsJCQkJaWYgKGxlbisyID4gKnJlc3VsdF9sZW4pIHsNCiAgICArCQkJCQkq
cmVzdWx0X2xlbiA9IGxlbisyOw0KICAgICsJCQkJCSpyZXN1bHRwID0gcmVzdWx0ID0gcmVhbGxv
YyhyZXN1bHQsDQogICAgKwkJCQkJCQkJKnJlc3VsdF9sZW4pOw0KICAgICsJCQkJfQ0KICAgICsJ
CQkJLyogaW5zZXJ0IHRoZSBjaGFyIGF0IHRoZSBwcm9wZXIgcG9zaXRpb24gKi8NCiAgICArCQkJ
CW1lbW1vdmUoJnJlc3VsdFtjdXJzb3JfcG9zaXRpb24rMV0sDQogICAgKwkJCQkJCSZyZXN1bHRb
Y3Vyc29yX3Bvc2l0aW9uXSwNCiAgICArCQkJCQkJbGVuLWN1cnNvcl9wb3NpdGlvbisxKTsNCiAg
ICArCQkJCXJlc3VsdFtjdXJzb3JfcG9zaXRpb25dID0gcmVzOw0KICAgICsJCQkJY3Vyc29yX3Bv
c2l0aW9uKys7DQogICAgKwkJCQljdXJzb3JfZm9ybV93aW4rKzsNCiAgICArCQkJCWxlbisrOw0K
ICAgICsJCQl9IGVsc2Ugew0KICAgICsJCQkJbXZwcmludHcoMCwgMCwgInVua25vd24ga2V5OiAl
ZFxuIiwgcmVzKTsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJ
aWYgKGN1cnNvcl9mb3JtX3dpbiA8IDApDQogICAgKwkJCWN1cnNvcl9mb3JtX3dpbiA9IDA7DQog
ICAgKwkJZWxzZSBpZiAoY3Vyc29yX2Zvcm1fd2luID4gcHJvbXB0X3dpZHRoLTEpDQogICAgKwkJ
CWN1cnNvcl9mb3JtX3dpbiA9IHByb21wdF93aWR0aC0xOw0KICAgICsNCiAgICArCQl3bW92ZShm
b3JtX3dpbiwgMCwgMCk7DQogICAgKwkJd2NscnRvZW9sKGZvcm1fd2luKTsNCiAgICArCQltdndw
cmludHcoZm9ybV93aW4sIDAsIDAsICIlKnMiLCBwcm9tcHRfd2lkdGgsICIgIik7DQogICAgKwkJ
bXZ3cHJpbnR3KGZvcm1fd2luLCAwLCAwLCAiJXMiLA0KICAgICsJCQlyZXN1bHQgKyBjdXJzb3Jf
cG9zaXRpb24tY3Vyc29yX2Zvcm1fd2luKTsNCiAgICArCQl3bW92ZShmb3JtX3dpbiwgMCwgY3Vy
c29yX2Zvcm1fd2luKTsNCiAgICArCQl0b3VjaHdpbih3aW4pOw0KICAgICsJCXJlZnJlc2hfYWxs
X3dpbmRvd3MobWFpbl93aW5kb3cpOw0KICAgICsNCiAgICArCQlpZiAocmVzID09IDEwKSB7DQog
ICAgKwkJCXJlcyA9IDA7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0gZWxzZSBpZiAocmVzID09
IDI3IHx8IHJlcyA9PSBLRVlfRihGX0JBQ0spIHx8DQogICAgKwkJCQlyZXMgPT0gS0VZX0YoRl9F
WElUKSkgew0KICAgICsJCQlyZXMgPSBLRVlfRVhJVDsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
fSBlbHNlIGlmIChyZXMgPT0gS0VZX0YoRl9IRUxQKSkgew0KICAgICsJCQlyZXMgPSAxOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJLyogaGlkZSB0aGUg
Y3Vyc29yICovDQogICAgKwljdXJzX3NldCgwKTsNCiAgICArCWRlbF9wYW5lbChwYW5lbCk7DQog
ICAgKwlkZWx3aW4ocHJvbXB0X3dpbik7DQogICAgKwlkZWx3aW4oZm9ybV93aW4pOw0KICAgICsJ
ZGVsd2luKHdpbik7DQogICAgKwlyZXR1cm4gcmVzOw0KICAgICt9DQogICAgKw0KICAgICsvKiBy
ZWZyZXNoIGFsbCB3aW5kb3dzIGluIHRoZSBjb3JyZWN0IG9yZGVyICovDQogICAgK3ZvaWQgcmVm
cmVzaF9hbGxfd2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93KQ0KICAgICt7DQogICAgKwl1cGRh
dGVfcGFuZWxzKCk7DQogICAgKwl0b3VjaHdpbihtYWluX3dpbmRvdyk7DQogICAgKwlyZWZyZXNo
KCk7DQogICAgK30NCiAgICArDQogICAgKy8qIGxheW1hbidzIHNjcm9sbGFibGUgd2luZG93Li4u
ICovDQogICAgK3ZvaWQgc2hvd19zY3JvbGxfd2luKFdJTkRPVyAqbWFpbl93aW5kb3csDQogICAg
KwkJY29uc3QgY2hhciAqdGl0bGUsDQogICAgKwkJY29uc3QgY2hhciAqdGV4dCkNCiAgICArew0K
ICAgICsJaW50IHJlczsNCiAgICArCWludCB0b3RhbF9saW5lcyA9IGdldF9saW5lX25vKHRleHQp
Ow0KICAgICsJaW50IHgsIHksIGxpbmVzLCBjb2x1bW5zOw0KICAgICsJaW50IHN0YXJ0X3ggPSAw
LCBzdGFydF95ID0gMDsNCiAgICArCWludCB0ZXh0X2xpbmVzID0gMCwgdGV4dF9jb2xzID0gMDsN
CiAgICArCWludCB0b3RhbF9jb2xzID0gMDsNCiAgICArCWludCB3aW5fY29scyA9IDA7DQogICAg
KwlpbnQgd2luX2xpbmVzID0gMDsNCiAgICArCWludCBpID0gMDsNCiAgICArCVdJTkRPVyAqd2lu
Ow0KICAgICsJV0lORE9XICpwYWQ7DQogICAgKwlQQU5FTCAqcGFuZWw7DQogICAgKw0KICAgICsJ
Z2V0bWF4eXgoc3Rkc2NyLCBsaW5lcywgY29sdW1ucyk7DQogICAgKw0KICAgICsJLyogZmluZCB0
aGUgd2lkZXN0IGxpbmUgb2YgbXNnOiAqLw0KICAgICsJdG90YWxfbGluZXMgPSBnZXRfbGluZV9u
byh0ZXh0KTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCB0b3RhbF9saW5lczsgaSsrKSB7DQogICAg
KwkJY29uc3QgY2hhciAqbGluZSA9IGdldF9saW5lKHRleHQsIGkpOw0KICAgICsJCWludCBsZW4g
PSBnZXRfbGluZV9sZW5ndGgobGluZSk7DQogICAgKwkJdG90YWxfY29scyA9IG1heCh0b3RhbF9j
b2xzLCBsZW4rMik7DQogICAgKwl9DQogICAgKw0KICAgICsJLyogY3JlYXRlIHRoZSBwYWQgKi8N
CiAgICArCXBhZCA9IG5ld3BhZCh0b3RhbF9saW5lcysxMCwgdG90YWxfY29scysxMCk7DQogICAg
Kwkodm9pZCkgd2F0dHJzZXQocGFkLCBhdHRyaWJ1dGVzW1NDUk9MTFdJTl9URVhUXSk7DQogICAg
KwlmaWxsX3dpbmRvdyhwYWQsIHRleHQpOw0KICAgICsNCiAgICArCXdpbl9saW5lcyA9IG1pbih0
b3RhbF9saW5lcys0LCBsaW5lcy0yKTsNCiAgICArCXdpbl9jb2xzID0gbWluKHRvdGFsX2NvbHMr
MiwgY29sdW1ucy0yKTsNCiAgICArCXRleHRfbGluZXMgPSBtYXgod2luX2xpbmVzLTQsIDApOw0K
ICAgICsJdGV4dF9jb2xzID0gbWF4KHdpbl9jb2xzLTIsIDApOw0KICAgICsNCiAgICArCS8qIHBs
YWNlIHdpbmRvdyBpbiBtaWRkbGUgb2Ygc2NyZWVuICovDQogICAgKwl5ID0gKGxpbmVzLXdpbl9s
aW5lcykvMjsNCiAgICArCXggPSAoY29sdW1ucy13aW5fY29scykvMjsNCiAgICArDQogICAgKwl3
aW4gPSBuZXd3aW4od2luX2xpbmVzLCB3aW5fY29scywgeSwgeCk7DQogICAgKwlrZXlwYWQod2lu
LCBUUlVFKTsNCiAgICArCS8qIHNob3cgdGhlIGhlbHAgaW4gdGhlIGhlbHAgd2luZG93LCBhbmQg
c2hvdyB0aGUgaGVscCBwYW5lbCAqLw0KICAgICsJKHZvaWQpIHdhdHRyc2V0KHdpbiwgYXR0cmli
dXRlc1tTQ1JPTExXSU5fQk9YXSk7DQogICAgKwlib3god2luLCAwLCAwKTsNCiAgICArCSh2b2lk
KSB3YXR0cnNldCh3aW4sIGF0dHJpYnV0ZXNbU0NST0xMV0lOX0hFQURJTkddKTsNCiAgICArCW12
d3ByaW50dyh3aW4sIDAsIDMsICIgJXMgIiwgdGl0bGUpOw0KICAgICsJcGFuZWwgPSBuZXdfcGFu
ZWwod2luKTsNCiAgICArDQogICAgKwkvKiBoYW5kbGUgc2Nyb2xsaW5nICovDQogICAgKwlkbyB7
DQogICAgKw0KICAgICsJCWNvcHl3aW4ocGFkLCB3aW4sIHN0YXJ0X3ksIHN0YXJ0X3gsIDIsIDIs
IHRleHRfbGluZXMsDQogICAgKwkJCQl0ZXh0X2NvbHMsIDApOw0KICAgICsJCXByaW50X2luX21p
ZGRsZSh3aW4sDQogICAgKwkJCQl0ZXh0X2xpbmVzKzIsDQogICAgKwkJCQkwLA0KICAgICsJCQkJ
dGV4dF9jb2xzLA0KICAgICsJCQkJIjxPSz4iLA0KICAgICsJCQkJYXR0cmlidXRlc1tESUFMT0df
TUVOVV9GT1JFXSk7DQogICAgKwkJd3JlZnJlc2god2luKTsNCiAgICArDQogICAgKwkJcmVzID0g
d2dldGNoKHdpbik7DQogICAgKwkJc3dpdGNoIChyZXMpIHsNCiAgICArCQljYXNlIEtFWV9OUEFH
RToNCiAgICArCQljYXNlICcgJzoNCiAgICArCQljYXNlICdkJzoNCiAgICArCQkJc3RhcnRfeSAr
PSB0ZXh0X2xpbmVzLTI7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX1BQQUdFOg0K
ICAgICsJCWNhc2UgJ3UnOg0KICAgICsJCQlzdGFydF95IC09IHRleHRfbGluZXMrMjsNCiAgICAr
CQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfSE9NRToNCiAgICArCQkJc3RhcnRfeSA9IDA7DQog
ICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX0VORDoNCiAgICArCQkJc3RhcnRfeSA9IHRv
dGFsX2xpbmVzLXRleHRfbGluZXM7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgS0VZX0RP
V046DQogICAgKwkJY2FzZSAnaic6DQogICAgKwkJCXN0YXJ0X3krKzsNCiAgICArCQkJYnJlYWs7
DQogICAgKwkJY2FzZSBLRVlfVVA6DQogICAgKwkJY2FzZSAnayc6DQogICAgKwkJCXN0YXJ0X3kt
LTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBLRVlfTEVGVDoNCiAgICArCQljYXNlICdo
JzoNCiAgICArCQkJc3RhcnRfeC0tOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIEtFWV9S
SUdIVDoNCiAgICArCQljYXNlICdsJzoNCiAgICArCQkJc3RhcnRfeCsrOw0KICAgICsJCQlicmVh
azsNCiAgICArCQl9DQogICAgKwkJaWYgKHJlcyA9PSAxMCB8fCByZXMgPT0gMjcgfHwgcmVzID09
ICdxJyB8fA0KICAgICsJCQlyZXMgPT0gS0VZX0YoRl9IRUxQKSB8fCByZXMgPT0gS0VZX0YoRl9C
QUNLKSB8fA0KICAgICsJCQlyZXMgPT0gS0VZX0YoRl9FWElUKSkNCiAgICArCQkJYnJlYWs7DQog
ICAgKwkJaWYgKHN0YXJ0X3kgPCAwKQ0KICAgICsJCQlzdGFydF95ID0gMDsNCiAgICArCQlpZiAo
c3RhcnRfeSA+PSB0b3RhbF9saW5lcy10ZXh0X2xpbmVzKQ0KICAgICsJCQlzdGFydF95ID0gdG90
YWxfbGluZXMtdGV4dF9saW5lczsNCiAgICArCQlpZiAoc3RhcnRfeCA8IDApDQogICAgKwkJCXN0
YXJ0X3ggPSAwOw0KICAgICsJCWlmIChzdGFydF94ID49IHRvdGFsX2NvbHMtdGV4dF9jb2xzKQ0K
ICAgICsJCQlzdGFydF94ID0gdG90YWxfY29scy10ZXh0X2NvbHM7DQogICAgKwl9IHdoaWxlIChy
ZXMpOw0KICAgICsNCiAgICArCWRlbF9wYW5lbChwYW5lbCk7DQogICAgKwlkZWx3aW4od2luKTsN
CiAgICArCXJlZnJlc2hfYWxsX3dpbmRvd3MobWFpbl93aW5kb3cpOw0KICAgICt9DQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9uY29uZi5oIGIvc3VwcG9ydC9rY29uZmlnL25jb25m
LmgNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmZhNTI0NWUN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL25jb25mLmgNCiAg
ICBAQCAtMCwwICsxLDkyIEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wICovDQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwOCBOaXIgVHphY2hhciA8
bmlyLnR6YWNoYXJAZ21haWwuY29tPg0KICAgICsgKg0KICAgICsgKiBEZXJpdmVkIGZyb20gbWVu
dWNvbmZpZy4NCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8Y3R5cGUuaD4NCiAgICAr
I2luY2x1ZGUgPGVycm5vLmg+DQogICAgKyNpbmNsdWRlIDxmY250bC5oPg0KICAgICsjaW5jbHVk
ZSA8bGltaXRzLmg+DQogICAgKyNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICArI2luY2x1ZGUgPHN0
ZGxpYi5oPg0KICAgICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKyNpbmNsdWRlIDx1bmlzdGQu
aD4NCiAgICArI2luY2x1ZGUgPG5jdXJzZXMuaD4NCiAgICArI2luY2x1ZGUgPG1lbnUuaD4NCiAg
ICArI2luY2x1ZGUgPHBhbmVsLmg+DQogICAgKyNpbmNsdWRlIDxmb3JtLmg+DQogICAgKw0KICAg
ICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgPHRpbWUuaD4NCiAgICArI2luY2x1
ZGUgPHN5cy90aW1lLmg+DQogICAgKw0KICAgICsjZGVmaW5lIG1heChhLCBiKSAoe1wNCiAgICAr
CQl0eXBlb2YoYSkgX2EgPSBhO1wNCiAgICArCQl0eXBlb2YoYikgX2IgPSBiO1wNCiAgICArCQlf
YSA+IF9iID8gX2EgOiBfYjsgfSkNCiAgICArDQogICAgKyNkZWZpbmUgbWluKGEsIGIpICh7XA0K
ICAgICsJCXR5cGVvZihhKSBfYSA9IGE7XA0KICAgICsJCXR5cGVvZihiKSBfYiA9IGI7XA0KICAg
ICsJCV9hIDwgX2IgPyBfYSA6IF9iOyB9KQ0KICAgICsNCiAgICArdHlwZWRlZiBlbnVtIHsNCiAg
ICArCU5PUk1BTCA9IDEsDQogICAgKwlNQUlOX0hFQURJTkcsDQogICAgKwlNQUlOX01FTlVfQk9Y
LA0KICAgICsJTUFJTl9NRU5VX0ZPUkUsDQogICAgKwlNQUlOX01FTlVfQkFDSywNCiAgICArCU1B
SU5fTUVOVV9HUkVZLA0KICAgICsJTUFJTl9NRU5VX0hFQURJTkcsDQogICAgKwlTQ1JPTExXSU5f
VEVYVCwNCiAgICArCVNDUk9MTFdJTl9IRUFESU5HLA0KICAgICsJU0NST0xMV0lOX0JPWCwNCiAg
ICArCURJQUxPR19URVhULA0KICAgICsJRElBTE9HX01FTlVfRk9SRSwNCiAgICArCURJQUxPR19N
RU5VX0JBQ0ssDQogICAgKwlESUFMT0dfQk9YLA0KICAgICsJSU5QVVRfQk9YLA0KICAgICsJSU5Q
VVRfSEVBRElORywNCiAgICArCUlOUFVUX1RFWFQsDQogICAgKwlJTlBVVF9GSUVMRCwNCiAgICAr
CUZVTkNUSU9OX1RFWFQsDQogICAgKwlGVU5DVElPTl9ISUdITElHSFQsDQogICAgKwlBVFRSX01B
WA0KICAgICt9IGF0dHJpYnV0ZXNfdDsNCiAgICArZXh0ZXJuIGF0dHJpYnV0ZXNfdCBhdHRyaWJ1
dGVzW107DQogICAgKw0KICAgICt0eXBlZGVmIGVudW0gew0KICAgICsJRl9IRUxQID0gMSwNCiAg
ICArCUZfU1lNQk9MID0gMiwNCiAgICArCUZfSU5TVFMgPSAzLA0KICAgICsJRl9DT05GID0gNCwN
CiAgICArCUZfQkFDSyA9IDUsDQogICAgKwlGX1NBVkUgPSA2LA0KICAgICsJRl9MT0FEID0gNywN
CiAgICArCUZfU0VBUkNIID0gOCwNCiAgICArCUZfRVhJVCA9IDksDQogICAgK30gZnVuY3Rpb25f
a2V5Ow0KICAgICsNCiAgICArdm9pZCBzZXRfY29sb3JzKHZvaWQpOw0KICAgICsNCiAgICArLyog
dGhpcyBjaGFuZ2VzIHRoZSB3aW5kb3dzIGF0dHJpYnV0ZXMgISEhICovDQogICAgK3ZvaWQgcHJp
bnRfaW5fbWlkZGxlKFdJTkRPVyAqd2luLA0KICAgICsJCWludCBzdGFydHksDQogICAgKwkJaW50
IHN0YXJ0eCwNCiAgICArCQlpbnQgd2lkdGgsDQogICAgKwkJY29uc3QgY2hhciAqc3RyaW5nLA0K
ICAgICsJCWNodHlwZSBjb2xvcik7DQogICAgK2ludCBnZXRfbGluZV9sZW5ndGgoY29uc3QgY2hh
ciAqbGluZSk7DQogICAgK2ludCBnZXRfbGluZV9ubyhjb25zdCBjaGFyICp0ZXh0KTsNCiAgICAr
Y29uc3QgY2hhciAqZ2V0X2xpbmUoY29uc3QgY2hhciAqdGV4dCwgaW50IGxpbmVfbm8pOw0KICAg
ICt2b2lkIGZpbGxfd2luZG93KFdJTkRPVyAqd2luLCBjb25zdCBjaGFyICp0ZXh0KTsNCiAgICAr
aW50IGJ0bl9kaWFsb2coV0lORE9XICptYWluX3dpbmRvdywgY29uc3QgY2hhciAqbXNnLCBpbnQg
YnRuX251bSwgLi4uKTsNCiAgICAraW50IGRpYWxvZ19pbnB1dGJveChXSU5ET1cgKm1haW5fd2lu
ZG93LA0KICAgICsJCWNvbnN0IGNoYXIgKnRpdGxlLCBjb25zdCBjaGFyICpwcm9tcHQsDQogICAg
KwkJY29uc3QgY2hhciAqaW5pdCwgY2hhciAqKnJlc3VsdHAsIGludCAqcmVzdWx0X2xlbik7DQog
ICAgK3ZvaWQgcmVmcmVzaF9hbGxfd2luZG93cyhXSU5ET1cgKm1haW5fd2luZG93KTsNCiAgICAr
dm9pZCBzaG93X3Njcm9sbF93aW4oV0lORE9XICptYWluX3dpbmRvdywNCiAgICArCQljb25zdCBj
aGFyICp0aXRsZSwNCiAgICArCQljb25zdCBjaGFyICp0ZXh0KTsNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL3BhcnNlci55IGIvc3VwcG9ydC9rY29uZmlnL3BhcnNlci55DQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi45NTcwMGY4DQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXJzZXIueQ0KICAgIEBAIC0w
LDAgKzEsNzMxIEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov
DQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBl
bEBsaW51eC1tNjhrLm9yZz4NCiAgICArICovDQogICAgKyV7DQogICAgKw0KICAgICsjaW5jbHVk
ZSA8Y3R5cGUuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGFyZy5oPg0KICAgICsjaW5jbHVkZSA8c3Rk
aW8uaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsjaW5jbHVkZSA8c3RyaW5nLmg+
DQogICAgKyNpbmNsdWRlIDxzdGRib29sLmg+DQogICAgKw0KICAgICsjaW5jbHVkZSAibGtjLmgi
DQogICAgKw0KICAgICsjZGVmaW5lIHByaW50ZChtYXNrLCBmbXQuLi4pIGlmIChjZGVidWcgJiAo
bWFzaykpIHByaW50ZihmbXQpDQogICAgKw0KICAgICsjZGVmaW5lIFBSSU5URAkJMHgwMDAxDQog
ICAgKyNkZWZpbmUgREVCVUdfUEFSU0UJMHgwMDAyDQogICAgKw0KICAgICtpbnQgY2RlYnVnID0g
UFJJTlREOw0KICAgICsNCiAgICArc3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICplcnIp
Ow0KICAgICtzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVyciwgLi4uKTsNCiAg
ICArc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAuLi4pOw0KICAgICtz
dGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBjaGFyICp0b2tlbm5hbWUsDQogICAgKwkJ
CSAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3Rva2VubmFtZSk7DQogICAgKw0KICAgICtzdHJ1Y3Qg
c3ltYm9sICpzeW1ib2xfaGFzaFtTWU1CT0xfSEFTSFNJWkVdOw0KICAgICsNCiAgICArc3RhdGlj
IHN0cnVjdCBtZW51ICpjdXJyZW50X21lbnUsICpjdXJyZW50X2VudHJ5Ow0KICAgICsNCiAgICAr
JX0NCiAgICArDQogICAgKyV1bmlvbg0KICAgICt7DQogICAgKwljaGFyICpzdHJpbmc7DQogICAg
KwlzdHJ1Y3Qgc3ltYm9sICpzeW1ib2w7DQogICAgKwlzdHJ1Y3QgZXhwciAqZXhwcjsNCiAgICAr
CXN0cnVjdCBtZW51ICptZW51Ow0KICAgICsJZW51bSBzeW1ib2xfdHlwZSB0eXBlOw0KICAgICsJ
ZW51bSB2YXJpYWJsZV9mbGF2b3IgZmxhdm9yOw0KICAgICt9DQogICAgKw0KICAgICsldG9rZW4g
PHN0cmluZz4gVF9IRUxQVEVYVA0KICAgICsldG9rZW4gPHN0cmluZz4gVF9XT1JEDQogICAgKyV0
b2tlbiA8c3RyaW5nPiBUX1dPUkRfUVVPVEUNCiAgICArJXRva2VuIFRfQUxMTk9DT05GSUdfWQ0K
ICAgICsldG9rZW4gVF9CT09MDQogICAgKyV0b2tlbiBUX0NIT0lDRQ0KICAgICsldG9rZW4gVF9D
TE9TRV9QQVJFTg0KICAgICsldG9rZW4gVF9DT0xPTl9FUVVBTA0KICAgICsldG9rZW4gVF9DT01N
RU5UDQogICAgKyV0b2tlbiBUX0NPTkZJRw0KICAgICsldG9rZW4gVF9ERUZBVUxUDQogICAgKyV0
b2tlbiBUX0RFRkNPTkZJR19MSVNUDQogICAgKyV0b2tlbiBUX0RFRl9CT09MDQogICAgKyV0b2tl
biBUX0RFRl9UUklTVEFURQ0KICAgICsldG9rZW4gVF9ERVBFTkRTDQogICAgKyV0b2tlbiBUX0VO
RENIT0lDRQ0KICAgICsldG9rZW4gVF9FTkRJRg0KICAgICsldG9rZW4gVF9FTkRNRU5VDQogICAg
KyV0b2tlbiBUX0hFTFANCiAgICArJXRva2VuIFRfSEVYDQogICAgKyV0b2tlbiBUX0lGDQogICAg
KyV0b2tlbiBUX0lNUExZDQogICAgKyV0b2tlbiBUX0lOVA0KICAgICsldG9rZW4gVF9NQUlOTUVO
VQ0KICAgICsldG9rZW4gVF9NRU5VDQogICAgKyV0b2tlbiBUX01FTlVDT05GSUcNCiAgICArJXRv
a2VuIFRfTU9EVUxFUw0KICAgICsldG9rZW4gVF9PTg0KICAgICsldG9rZW4gVF9PUEVOX1BBUkVO
DQogICAgKyV0b2tlbiBUX09QVElPTg0KICAgICsldG9rZW4gVF9PUFRJT05BTA0KICAgICsldG9r
ZW4gVF9QTFVTX0VRVUFMDQogICAgKyV0b2tlbiBUX1BST01QVA0KICAgICsldG9rZW4gVF9SQU5H
RQ0KICAgICsldG9rZW4gVF9TRUxFQ1QNCiAgICArJXRva2VuIFRfU09VUkNFDQogICAgKyV0b2tl
biBUX1NUUklORw0KICAgICsldG9rZW4gVF9UUklTVEFURQ0KICAgICsldG9rZW4gVF9WSVNJQkxF
DQogICAgKyV0b2tlbiBUX0VPTA0KICAgICsldG9rZW4gPHN0cmluZz4gVF9BU1NJR05fVkFMDQog
ICAgKw0KICAgICslbGVmdCBUX09SDQogICAgKyVsZWZ0IFRfQU5EDQogICAgKyVsZWZ0IFRfRVFV
QUwgVF9VTkVRVUFMDQogICAgKyVsZWZ0IFRfTEVTUyBUX0xFU1NfRVFVQUwgVF9HUkVBVEVSIFRf
R1JFQVRFUl9FUVVBTA0KICAgICslbm9uYXNzb2MgVF9OT1QNCiAgICArDQogICAgKyV0eXBlIDxz
dHJpbmc+IHByb21wdA0KICAgICsldHlwZSA8c3ltYm9sPiBub25jb25zdF9zeW1ib2wNCiAgICAr
JXR5cGUgPHN5bWJvbD4gc3ltYm9sDQogICAgKyV0eXBlIDx0eXBlPiB0eXBlIGxvZ2ljX3R5cGUg
ZGVmYXVsdA0KICAgICsldHlwZSA8ZXhwcj4gZXhwcg0KICAgICsldHlwZSA8ZXhwcj4gaWZfZXhw
cg0KICAgICsldHlwZSA8c3RyaW5nPiBlbmQNCiAgICArJXR5cGUgPG1lbnU+IGlmX2VudHJ5IG1l
bnVfZW50cnkgY2hvaWNlX2VudHJ5DQogICAgKyV0eXBlIDxzdHJpbmc+IHdvcmRfb3B0IGFzc2ln
bl92YWwNCiAgICArJXR5cGUgPGZsYXZvcj4gYXNzaWduX29wDQogICAgKw0KICAgICslZGVzdHJ1
Y3RvciB7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1l
bnQgZm9yIHRoaXMgZW50cnlcbiIsDQogICAgKwkJJCQtPmZpbGUtPm5hbWUsICQkLT5saW5lbm8p
Ow0KICAgICsJaWYgKGN1cnJlbnRfbWVudSA9PSAkJCkNCiAgICArCQltZW51X2VuZF9tZW51KCk7
DQogICAgK30gaWZfZW50cnkgbWVudV9lbnRyeSBjaG9pY2VfZW50cnkNCiAgICArDQogICAgKyUl
DQogICAgK2lucHV0OiBtYWlubWVudV9zdG10IHN0bXRfbGlzdCB8IHN0bXRfbGlzdDsNCiAgICAr
DQogICAgKy8qIG1haW5tZW51IGVudHJ5ICovDQogICAgKw0KICAgICttYWlubWVudV9zdG10OiBU
X01BSU5NRU5VIHByb21wdCBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF9wcm9tcHQoUF9N
RU5VLCAkMiwgTlVMTCk7DQogICAgK307DQogICAgKw0KICAgICtzdG10X2xpc3Q6DQogICAgKwkg
IC8qIGVtcHR5ICovDQogICAgKwl8IHN0bXRfbGlzdCBjb21tb25fc3RtdA0KICAgICsJfCBzdG10
X2xpc3QgY2hvaWNlX3N0bXQNCiAgICArCXwgc3RtdF9saXN0IG1lbnVfc3RtdA0KICAgICsJfCBz
dG10X2xpc3QgVF9XT1JEIGVycm9yIFRfRU9MCXsgemNvbmZfZXJyb3IoInVua25vd24gc3RhdGVt
ZW50IFwiJXNcIiIsICQyKTsgfQ0KICAgICsJfCBzdG10X2xpc3QgZXJyb3IgVF9FT0wJCXsgemNv
bmZfZXJyb3IoImludmFsaWQgc3RhdGVtZW50Iik7IH0NCiAgICArOw0KICAgICsNCiAgICArY29t
bW9uX3N0bXQ6DQogICAgKwkgIGlmX3N0bXQNCiAgICArCXwgY29tbWVudF9zdG10DQogICAgKwl8
IGNvbmZpZ19zdG10DQogICAgKwl8IG1lbnVjb25maWdfc3RtdA0KICAgICsJfCBzb3VyY2Vfc3Rt
dA0KICAgICsJfCBhc3NpZ25tZW50X3N0bXQNCiAgICArOw0KICAgICsNCiAgICArLyogY29uZmln
L21lbnVjb25maWcgZW50cnkgKi8NCiAgICArDQogICAgK2NvbmZpZ19lbnRyeV9zdGFydDogVF9D
T05GSUcgbm9uY29uc3Rfc3ltYm9sIFRfRU9MDQogICAgK3sNCiAgICArCSQyLT5mbGFncyB8PSBT
WU1CT0xfT1BUSU9OQUw7DQogICAgKwltZW51X2FkZF9lbnRyeSgkMik7DQogICAgKwlwcmludGQo
REVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZf
bGluZW5vKCksICQyLT5uYW1lKTsNCiAgICArfTsNCiAgICArDQogICAgK2NvbmZpZ19zdG10OiBj
b25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0DQogICAgK3sNCiAgICArCXByaW50
ZChERUJVR19QQVJTRSwgIiVzOiVkOmVuZGNvbmZpZ1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29u
Zl9saW5lbm8oKSk7DQogICAgK307DQogICAgKw0KICAgICttZW51Y29uZmlnX2VudHJ5X3N0YXJ0
OiBUX01FTlVDT05GSUcgbm9uY29uc3Rfc3ltYm9sIFRfRU9MDQogICAgK3sNCiAgICArCSQyLT5m
bGFncyB8PSBTWU1CT0xfT1BUSU9OQUw7DQogICAgKwltZW51X2FkZF9lbnRyeSgkMik7DQogICAg
KwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51Y29uZmlnICVzXG4iLCB6Y29uZl9jdXJu
YW1lKCksIHpjb25mX2xpbmVubygpLCAkMi0+bmFtZSk7DQogICAgK307DQogICAgKw0KICAgICtt
ZW51Y29uZmlnX3N0bXQ6IG1lbnVjb25maWdfZW50cnlfc3RhcnQgY29uZmlnX29wdGlvbl9saXN0
DQogICAgK3sNCiAgICArCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpDQogICAgKwkJY3VycmVu
dF9lbnRyeS0+cHJvbXB0LT50eXBlID0gUF9NRU5VOw0KICAgICsJZWxzZQ0KICAgICsJCXpjb25m
cHJpbnQoIndhcm5pbmc6IG1lbnVjb25maWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7DQog
ICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9Ow0KICAgICsNCiAgICArY29uZmlnX29wdGlv
bl9saXN0Og0KICAgICsJICAvKiBlbXB0eSAqLw0KICAgICsJfCBjb25maWdfb3B0aW9uX2xpc3Qg
Y29uZmlnX29wdGlvbg0KICAgICsJfCBjb25maWdfb3B0aW9uX2xpc3QgZGVwZW5kcw0KICAgICsJ
fCBjb25maWdfb3B0aW9uX2xpc3QgaGVscA0KICAgICs7DQogICAgKw0KICAgICtjb25maWdfb3B0
aW9uOiB0eXBlIHByb21wdF9zdG10X29wdCBUX0VPTA0KICAgICt7DQogICAgKwltZW51X3NldF90
eXBlKCQxKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnR5cGUoJXUpXG4iLA0K
ICAgICsJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksDQogICAgKwkJJDEpOw0KICAg
ICt9Ow0KICAgICsNCiAgICArY29uZmlnX29wdGlvbjogVF9QUk9NUFQgcHJvbXB0IGlmX2V4cHIg
VF9FT0wNCiAgICArew0KICAgICsJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAkMiwgJDMpOw0K
ICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6Y29uZl9jdXJuYW1l
KCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfTsNCiAgICArDQogICAgK2NvbmZpZ19vcHRpb246
IGRlZmF1bHQgZXhwciBpZl9leHByIFRfRU9MDQogICAgK3sNCiAgICArCW1lbnVfYWRkX2V4cHIo
UF9ERUZBVUxULCAkMiwgJDMpOw0KICAgICsJaWYgKCQxICE9IFNfVU5LTk9XTikNCiAgICArCQlt
ZW51X3NldF90eXBlKCQxKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1
bHQoJXUpXG4iLA0KICAgICsJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksDQogICAg
KwkJJDEpOw0KICAgICt9Ow0KICAgICsNCiAgICArY29uZmlnX29wdGlvbjogVF9TRUxFQ1Qgbm9u
Y29uc3Rfc3ltYm9sIGlmX2V4cHIgVF9FT0wNCiAgICArew0KICAgICsJbWVudV9hZGRfc3ltYm9s
KFBfU0VMRUNULCAkMiwgJDMpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6c2Vs
ZWN0XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfTsNCiAgICAr
DQogICAgK2NvbmZpZ19vcHRpb246IFRfSU1QTFkgbm9uY29uc3Rfc3ltYm9sIGlmX2V4cHIgVF9F
T0wNCiAgICArew0KICAgICsJbWVudV9hZGRfc3ltYm9sKFBfSU1QTFksICQyLCAkMyk7DQogICAg
KwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDppbXBseVxuIiwgemNvbmZfY3VybmFtZSgpLCB6
Y29uZl9saW5lbm8oKSk7DQogICAgK307DQogICAgKw0KICAgICtjb25maWdfb3B0aW9uOiBUX1JB
TkdFIHN5bWJvbCBzeW1ib2wgaWZfZXhwciBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF9l
eHByKFBfUkFOR0UsIGV4cHJfYWxsb2NfY29tcChFX1JBTkdFLCQyLCAkMyksICQ0KTsNCiAgICAr
CXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpj
b25mX2xpbmVubygpKTsNCiAgICArfTsNCiAgICArDQogICAgK2NvbmZpZ19vcHRpb246IFRfT1BU
SU9OIFRfTU9EVUxFUyBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF9vcHRpb25fbW9kdWxl
cygpOw0KICAgICt9Ow0KICAgICsNCiAgICArY29uZmlnX29wdGlvbjogVF9PUFRJT04gVF9ERUZD
T05GSUdfTElTVCBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF9vcHRpb25fZGVmY29uZmln
X2xpc3QoKTsNCiAgICArfTsNCiAgICArDQogICAgK2NvbmZpZ19vcHRpb246IFRfT1BUSU9OIFRf
QUxMTk9DT05GSUdfWSBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF9vcHRpb25fYWxsbm9j
b25maWdfeSgpOw0KICAgICt9Ow0KICAgICsNCiAgICArLyogY2hvaWNlIGVudHJ5ICovDQogICAg
Kw0KICAgICtjaG9pY2U6IFRfQ0hPSUNFIHdvcmRfb3B0IFRfRU9MDQogICAgK3sNCiAgICArCXN0
cnVjdCBzeW1ib2wgKnN5bSA9IHN5bV9sb29rdXAoJDIsIFNZTUJPTF9DSE9JQ0UpOw0KICAgICsJ
c3ltLT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7DQogICAgKwltZW51X2FkZF9lbnRyeShzeW0p
Ow0KICAgICsJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVMTCwgTlVMTCk7DQogICAgKwlmcmVl
KCQyKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmNob2ljZVxuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK307DQogICAgKw0KICAgICtjaG9pY2Vf
ZW50cnk6IGNob2ljZSBjaG9pY2Vfb3B0aW9uX2xpc3QNCiAgICArew0KICAgICsJJCQgPSBtZW51
X2FkZF9tZW51KCk7DQogICAgK307DQogICAgKw0KICAgICtjaG9pY2VfZW5kOiBlbmQNCiAgICAr
ew0KICAgICsJaWYgKHpjb25mX2VuZHRva2VuKCQxLCAiY2hvaWNlIikpIHsNCiAgICArCQltZW51
X2VuZF9tZW51KCk7DQogICAgKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY2hvaWNl
XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArCX0NCiAgICArfTsN
CiAgICArDQogICAgK2Nob2ljZV9zdG10OiBjaG9pY2VfZW50cnkgY2hvaWNlX2Jsb2NrIGNob2lj
ZV9lbmQNCiAgICArOw0KICAgICsNCiAgICArY2hvaWNlX29wdGlvbl9saXN0Og0KICAgICsJICAv
KiBlbXB0eSAqLw0KICAgICsJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgY2hvaWNlX29wdGlvbg0KICAg
ICsJfCBjaG9pY2Vfb3B0aW9uX2xpc3QgZGVwZW5kcw0KICAgICsJfCBjaG9pY2Vfb3B0aW9uX2xp
c3QgaGVscA0KICAgICs7DQogICAgKw0KICAgICtjaG9pY2Vfb3B0aW9uOiBUX1BST01QVCBwcm9t
cHQgaWZfZXhwciBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF9wcm9tcHQoUF9QUk9NUFQs
ICQyLCAkMyk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpwcm9tcHRcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9Ow0KICAgICsNCiAgICArY2hv
aWNlX29wdGlvbjogbG9naWNfdHlwZSBwcm9tcHRfc3RtdF9vcHQgVF9FT0wNCiAgICArew0KICAg
ICsJbWVudV9zZXRfdHlwZSgkMSk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0
eXBlKCV1KVxuIiwNCiAgICArCSAgICAgICB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
LCAkMSk7DQogICAgK307DQogICAgKw0KICAgICtjaG9pY2Vfb3B0aW9uOiBUX09QVElPTkFMIFRf
RU9MDQogICAgK3sNCiAgICArCWN1cnJlbnRfZW50cnktPnN5bS0+ZmxhZ3MgfD0gU1lNQk9MX09Q
VElPTkFMOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6b3B0aW9uYWxcbiIsIHpj
b25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9Ow0KICAgICsNCiAgICArY2hv
aWNlX29wdGlvbjogVF9ERUZBVUxUIG5vbmNvbnN0X3N5bWJvbCBpZl9leHByIFRfRU9MDQogICAg
K3sNCiAgICArCW1lbnVfYWRkX3N5bWJvbChQX0RFRkFVTFQsICQyLCAkMyk7DQogICAgKwlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLA0KICAgICsJICAgICAgIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9Ow0KICAgICsNCiAgICArdHlwZToNCiAg
ICArCSAgbG9naWNfdHlwZQ0KICAgICsJfCBUX0lOVAkJCXsgJCQgPSBTX0lOVDsgfQ0KICAgICsJ
fCBUX0hFWAkJCXsgJCQgPSBTX0hFWDsgfQ0KICAgICsJfCBUX1NUUklORwkJeyAkJCA9IFNfU1RS
SU5HOyB9DQogICAgKw0KICAgICtsb2dpY190eXBlOg0KICAgICsJICBUX0JPT0wJCXsgJCQgPSBT
X0JPT0xFQU47IH0NCiAgICArCXwgVF9UUklTVEFURQkJeyAkJCA9IFNfVFJJU1RBVEU7IH0NCiAg
ICArDQogICAgK2RlZmF1bHQ6DQogICAgKwkgIFRfREVGQVVMVAkJeyAkJCA9IFNfVU5LTk9XTjsg
fQ0KICAgICsJfCBUX0RFRl9CT09MCQl7ICQkID0gU19CT09MRUFOOyB9DQogICAgKwl8IFRfREVG
X1RSSVNUQVRFCXsgJCQgPSBTX1RSSVNUQVRFOyB9DQogICAgKw0KICAgICtjaG9pY2VfYmxvY2s6
DQogICAgKwkgIC8qIGVtcHR5ICovDQogICAgKwl8IGNob2ljZV9ibG9jayBjb21tb25fc3RtdA0K
ICAgICs7DQogICAgKw0KICAgICsvKiBpZiBlbnRyeSAqLw0KICAgICsNCiAgICAraWZfZW50cnk6
IFRfSUYgZXhwciBUX0VPTA0KICAgICt7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczol
ZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgKwltZW51X2Fk
ZF9lbnRyeShOVUxMKTsNCiAgICArCW1lbnVfYWRkX2RlcCgkMik7DQogICAgKwkkJCA9IG1lbnVf
YWRkX21lbnUoKTsNCiAgICArfTsNCiAgICArDQogICAgK2lmX2VuZDogZW5kDQogICAgK3sNCiAg
ICArCWlmICh6Y29uZl9lbmR0b2tlbigkMSwgImlmIikpIHsNCiAgICArCQltZW51X2VuZF9tZW51
KCk7DQogICAgKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kaWZcbiIsIHpjb25mX2N1
cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICsJfQ0KICAgICt9Ow0KICAgICsNCiAgICAr
aWZfc3RtdDogaWZfZW50cnkgc3RtdF9saXN0IGlmX2VuZA0KICAgICs7DQogICAgKw0KICAgICsv
KiBtZW51IGVudHJ5ICovDQogICAgKw0KICAgICttZW51OiBUX01FTlUgcHJvbXB0IFRfRU9MDQog
ICAgK3sNCiAgICArCW1lbnVfYWRkX2VudHJ5KE5VTEwpOw0KICAgICsJbWVudV9hZGRfcHJvbXB0
KFBfTUVOVSwgJDIsIE5VTEwpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVu
dVxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK307DQogICAgKw0K
ICAgICttZW51X2VudHJ5OiBtZW51IG1lbnVfb3B0aW9uX2xpc3QNCiAgICArew0KICAgICsJJCQg
PSBtZW51X2FkZF9tZW51KCk7DQogICAgK307DQogICAgKw0KICAgICttZW51X2VuZDogZW5kDQog
ICAgK3sNCiAgICArCWlmICh6Y29uZl9lbmR0b2tlbigkMSwgIm1lbnUiKSkgew0KICAgICsJCW1l
bnVfZW5kX21lbnUoKTsNCiAgICArCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRtZW51
XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArCX0NCiAgICArfTsN
CiAgICArDQogICAgK21lbnVfc3RtdDogbWVudV9lbnRyeSBzdG10X2xpc3QgbWVudV9lbmQNCiAg
ICArOw0KICAgICsNCiAgICArbWVudV9vcHRpb25fbGlzdDoNCiAgICArCSAgLyogZW1wdHkgKi8N
CiAgICArCXwgbWVudV9vcHRpb25fbGlzdCB2aXNpYmxlDQogICAgKwl8IG1lbnVfb3B0aW9uX2xp
c3QgZGVwZW5kcw0KICAgICs7DQogICAgKw0KICAgICtzb3VyY2Vfc3RtdDogVF9TT1VSQ0UgcHJv
bXB0IFRfRU9MDQogICAgK3sNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNvdXJj
ZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOw0KICAgICsJemNv
bmZfbmV4dGZpbGVzKCQyKTsNCiAgICArCWZyZWUoJDIpOw0KICAgICt9Ow0KICAgICsNCiAgICAr
LyogY29tbWVudCBlbnRyeSAqLw0KICAgICsNCiAgICArY29tbWVudDogVF9DT01NRU5UIHByb21w
dCBUX0VPTA0KICAgICt7DQogICAgKwltZW51X2FkZF9lbnRyeShOVUxMKTsNCiAgICArCW1lbnVf
YWRkX3Byb21wdChQX0NPTU1FTlQsICQyLCBOVUxMKTsNCiAgICArCXByaW50ZChERUJVR19QQVJT
RSwgIiVzOiVkOmNvbW1lbnRcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0K
ICAgICt9Ow0KICAgICsNCiAgICArY29tbWVudF9zdG10OiBjb21tZW50IGNvbW1lbnRfb3B0aW9u
X2xpc3QNCiAgICArOw0KICAgICsNCiAgICArY29tbWVudF9vcHRpb25fbGlzdDoNCiAgICArCSAg
LyogZW1wdHkgKi8NCiAgICArCXwgY29tbWVudF9vcHRpb25fbGlzdCBkZXBlbmRzDQogICAgKzsN
CiAgICArDQogICAgKy8qIGhlbHAgb3B0aW9uICovDQogICAgKw0KICAgICtoZWxwX3N0YXJ0OiBU
X0hFTFAgVF9FT0wNCiAgICArew0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6aGVs
cFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgKwl6Y29uZl9zdGFy
dGhlbHAoKTsNCiAgICArfTsNCiAgICArDQogICAgK2hlbHA6IGhlbHBfc3RhcnQgVF9IRUxQVEVY
VA0KICAgICt7DQogICAgKwlpZiAoY3VycmVudF9lbnRyeS0+aGVscCkgew0KICAgICsJCWZyZWUo
Y3VycmVudF9lbnRyeS0+aGVscCk7DQogICAgKwkJemNvbmZwcmludCgid2FybmluZzogJyVzJyBk
ZWZpbmVkIHdpdGggbW9yZSB0aGFuIG9uZSBoZWxwIHRleHQgLS0gb25seSB0aGUgbGFzdCBvbmUg
d2lsbCBiZSB1c2VkIiwNCiAgICArCQkJICAgY3VycmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8
Y2hvaWNlPiIpOw0KICAgICsJfQ0KICAgICsNCiAgICArCS8qIElzIHRoZSBoZWxwIHRleHQgZW1w
dHkgb3IgYWxsIHdoaXRlc3BhY2U/ICovDQogICAgKwlpZiAoJDJbc3Ryc3BuKCQyLCAiIFxmXG5c
clx0XHYiKV0gPT0gJ1wwJykNCiAgICArCQl6Y29uZnByaW50KCJ3YXJuaW5nOiAnJXMnIGRlZmlu
ZWQgd2l0aCBibGFuayBoZWxwIHRleHQiLA0KICAgICsJCQkgICBjdXJyZW50X2VudHJ5LT5zeW0t
Pm5hbWUgPzogIjxjaG9pY2U+Iik7DQogICAgKw0KICAgICsJY3VycmVudF9lbnRyeS0+aGVscCA9
ICQyOw0KICAgICt9Ow0KICAgICsNCiAgICArLyogZGVwZW5kcyBvcHRpb24gKi8NCiAgICArDQog
ICAgK2RlcGVuZHM6IFRfREVQRU5EUyBUX09OIGV4cHIgVF9FT0wNCiAgICArew0KICAgICsJbWVu
dV9hZGRfZGVwKCQzKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOmRlcGVuZHMg
b25cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9Ow0KICAgICsN
CiAgICArLyogdmlzaWJpbGl0eSBvcHRpb24gKi8NCiAgICArdmlzaWJsZTogVF9WSVNJQkxFIGlm
X2V4cHIgVF9FT0wNCiAgICArew0KICAgICsJbWVudV9hZGRfdmlzaWJpbGl0eSgkMik7DQogICAg
K307DQogICAgKw0KICAgICsvKiBwcm9tcHQgc3RhdGVtZW50ICovDQogICAgKw0KICAgICtwcm9t
cHRfc3RtdF9vcHQ6DQogICAgKwkgIC8qIGVtcHR5ICovDQogICAgKwl8IHByb21wdCBpZl9leHBy
DQogICAgK3sNCiAgICArCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgJDEsICQyKTsNCiAgICAr
fTsNCiAgICArDQogICAgK3Byb21wdDoJICBUX1dPUkQNCiAgICArCXwgVF9XT1JEX1FVT1RFDQog
ICAgKzsNCiAgICArDQogICAgK2VuZDoJICBUX0VORE1FTlUgVF9FT0wJeyAkJCA9ICJtZW51Ijsg
fQ0KICAgICsJfCBUX0VORENIT0lDRSBUX0VPTAl7ICQkID0gImNob2ljZSI7IH0NCiAgICArCXwg
VF9FTkRJRiBUX0VPTAkJeyAkJCA9ICJpZiI7IH0NCiAgICArOw0KICAgICsNCiAgICAraWZfZXhw
cjogIC8qIGVtcHR5ICovCQkJeyAkJCA9IE5VTEw7IH0NCiAgICArCXwgVF9JRiBleHByCQkJeyAk
JCA9ICQyOyB9DQogICAgKzsNCiAgICArDQogICAgK2V4cHI6CSAgc3ltYm9sCQkJCXsgJCQgPSBl
eHByX2FsbG9jX3N5bWJvbCgkMSk7IH0NCiAgICArCXwgc3ltYm9sIFRfTEVTUyBzeW1ib2wJCQl7
ICQkID0gZXhwcl9hbGxvY19jb21wKEVfTFRILCAkMSwgJDMpOyB9DQogICAgKwl8IHN5bWJvbCBU
X0xFU1NfRVFVQUwgc3ltYm9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfTEVRLCAkMSwgJDMp
OyB9DQogICAgKwl8IHN5bWJvbCBUX0dSRUFURVIgc3ltYm9sCQl7ICQkID0gZXhwcl9hbGxvY19j
b21wKEVfR1RILCAkMSwgJDMpOyB9DQogICAgKwl8IHN5bWJvbCBUX0dSRUFURVJfRVFVQUwgc3lt
Ym9sCQl7ICQkID0gZXhwcl9hbGxvY19jb21wKEVfR0VRLCAkMSwgJDMpOyB9DQogICAgKwl8IHN5
bWJvbCBUX0VRVUFMIHN5bWJvbAkJCXsgJCQgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgJDEs
ICQzKTsgfQ0KICAgICsJfCBzeW1ib2wgVF9VTkVRVUFMIHN5bWJvbAkJeyAkJCA9IGV4cHJfYWxs
b2NfY29tcChFX1VORVFVQUwsICQxLCAkMyk7IH0NCiAgICArCXwgVF9PUEVOX1BBUkVOIGV4cHIg
VF9DTE9TRV9QQVJFTgl7ICQkID0gJDI7IH0NCiAgICArCXwgVF9OT1QgZXhwcgkJCQl7ICQkID0g
ZXhwcl9hbGxvY19vbmUoRV9OT1QsICQyKTsgfQ0KICAgICsJfCBleHByIFRfT1IgZXhwcgkJCXsg
JCQgPSBleHByX2FsbG9jX3R3byhFX09SLCAkMSwgJDMpOyB9DQogICAgKwl8IGV4cHIgVF9BTkQg
ZXhwcgkJCXsgJCQgPSBleHByX2FsbG9jX3R3byhFX0FORCwgJDEsICQzKTsgfQ0KICAgICs7DQog
ICAgKw0KICAgICsvKiBGb3Igc3ltYm9sIGRlZmluaXRpb25zLCBzZWxlY3RzLCBldGMuLCB3aGVy
ZSBxdW90ZXMgYXJlIG5vdCBhY2NlcHRlZCAqLw0KICAgICtub25jb25zdF9zeW1ib2w6IFRfV09S
RCB7ICQkID0gc3ltX2xvb2t1cCgkMSwgMCk7IGZyZWUoJDEpOyB9Ow0KICAgICsNCiAgICArc3lt
Ym9sOgkgIG5vbmNvbnN0X3N5bWJvbA0KICAgICsJfCBUX1dPUkRfUVVPVEUJeyAkJCA9IHN5bV9s
b29rdXAoJDEsIFNZTUJPTF9DT05TVCk7IGZyZWUoJDEpOyB9DQogICAgKzsNCiAgICArDQogICAg
K3dvcmRfb3B0OiAvKiBlbXB0eSAqLwkJCXsgJCQgPSBOVUxMOyB9DQogICAgKwl8IFRfV09SRA0K
ICAgICsNCiAgICArLyogYXNzaWdubWVudCBzdGF0ZW1lbnQgKi8NCiAgICArDQogICAgK2Fzc2ln
bm1lbnRfc3RtdDogIFRfV09SRCBhc3NpZ25fb3AgYXNzaWduX3ZhbCBUX0VPTAl7IHZhcmlhYmxl
X2FkZCgkMSwgJDMsICQyKTsgZnJlZSgkMSk7IGZyZWUoJDMpOyB9DQogICAgKw0KICAgICthc3Np
Z25fb3A6DQogICAgKwkgIFRfRVFVQUwJeyAkJCA9IFZBUl9SRUNVUlNJVkU7IH0NCiAgICArCXwg
VF9DT0xPTl9FUVVBTAl7ICQkID0gVkFSX1NJTVBMRTsgfQ0KICAgICsJfCBUX1BMVVNfRVFVQUwJ
eyAkJCA9IFZBUl9BUFBFTkQ7IH0NCiAgICArOw0KICAgICsNCiAgICArYXNzaWduX3ZhbDoNCiAg
ICArCS8qIGVtcHR5ICovCQl7ICQkID0geHN0cmR1cCgiIik7IH07DQogICAgKwl8IFRfQVNTSUdO
X1ZBTA0KICAgICs7DQogICAgKw0KICAgICslJQ0KICAgICsNCiAgICArdm9pZCBjb25mX3BhcnNl
KGNvbnN0IGNoYXIgKm5hbWUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5bTsNCiAg
ICArCWludCBpOw0KICAgICsNCiAgICArCXpjb25mX2luaXRzY2FuKG5hbWUpOw0KICAgICsNCiAg
ICArCV9tZW51X2luaXQoKTsNCiAgICArDQogICAgKwlpZiAoZ2V0ZW52KCJaQ09ORl9ERUJVRyIp
KQ0KICAgICsJCXl5ZGVidWcgPSAxOw0KICAgICsJeXlwYXJzZSgpOw0KICAgICsNCiAgICArCS8q
IFZhcmlhYmxlcyBhcmUgZXhwYW5kZWQgaW4gdGhlIHBhcnNlIHBoYXNlLiBXZSBjYW4gZnJlZSB0
aGVtIGhlcmUuICovDQogICAgKwl2YXJpYWJsZV9hbGxfZGVsKCk7DQogICAgKw0KICAgICsJaWYg
KHl5bmVycnMpDQogICAgKwkJZXhpdCgxKTsNCiAgICArCWlmICghbW9kdWxlc19zeW0pDQogICAg
KwkJbW9kdWxlc19zeW0gPSBzeW1fZmluZCggIm4iICk7DQogICAgKw0KICAgICsJaWYgKCFtZW51
X2hhc19wcm9tcHQoJnJvb3RtZW51KSkgew0KICAgICsJCWN1cnJlbnRfZW50cnkgPSAmcm9vdG1l
bnU7DQogICAgKwkJbWVudV9hZGRfcHJvbXB0KFBfTUVOVSwgIk1haW4gbWVudSIsIE5VTEwpOw0K
ICAgICsJfQ0KICAgICsNCiAgICArCW1lbnVfZmluYWxpemUoJnJvb3RtZW51KTsNCiAgICArCWZv
cl9hbGxfc3ltYm9scyhpLCBzeW0pIHsNCiAgICArCQlpZiAoc3ltX2NoZWNrX2RlcHMoc3ltKSkN
CiAgICArCQkJeXluZXJycysrOw0KICAgICsJfQ0KICAgICsJaWYgKHl5bmVycnMpDQogICAgKwkJ
ZXhpdCgxKTsNCiAgICArCXN5bV9zZXRfY2hhbmdlX2NvdW50KDEpOw0KICAgICt9DQogICAgKw0K
ICAgICtzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBjaGFyICp0b2tlbm5hbWUsDQog
ICAgKwkJCSAgIGNvbnN0IGNoYXIgKmV4cGVjdGVkX3Rva2VubmFtZSkNCiAgICArew0KICAgICsJ
aWYgKHN0cmNtcCh0b2tlbm5hbWUsIGV4cGVjdGVkX3Rva2VubmFtZSkpIHsNCiAgICArCQl6Y29u
Zl9lcnJvcigidW5leHBlY3RlZCAnJXMnIHdpdGhpbiAlcyBibG9jayIsDQogICAgKwkJCSAgICB0
b2tlbm5hbWUsIGV4cGVjdGVkX3Rva2VubmFtZSk7DQogICAgKwkJeXluZXJycysrOw0KICAgICsJ
CXJldHVybiBmYWxzZTsNCiAgICArCX0NCiAgICArCWlmIChjdXJyZW50X21lbnUtPmZpbGUgIT0g
Y3VycmVudF9maWxlKSB7DQogICAgKwkJemNvbmZfZXJyb3IoIiclcycgaW4gZGlmZmVyZW50IGZp
bGUgdGhhbiAnJXMnIiwNCiAgICArCQkJICAgIHRva2VubmFtZSwgZXhwZWN0ZWRfdG9rZW5uYW1l
KTsNCiAgICArCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBsb2NhdGlvbiBvZiB0aGUgJyVzJ1xu
IiwNCiAgICArCQkJY3VycmVudF9tZW51LT5maWxlLT5uYW1lLCBjdXJyZW50X21lbnUtPmxpbmVu
bywNCiAgICArCQkJZXhwZWN0ZWRfdG9rZW5uYW1lKTsNCiAgICArCQl5eW5lcnJzKys7DQogICAg
KwkJcmV0dXJuIGZhbHNlOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIHRydWU7DQogICAgK30NCiAg
ICArDQogICAgK3N0YXRpYyB2b2lkIHpjb25mcHJpbnQoY29uc3QgY2hhciAqZXJyLCAuLi4pDQog
ICAgK3sNCiAgICArCXZhX2xpc3QgYXA7DQogICAgKw0KICAgICsJZnByaW50ZihzdGRlcnIsICIl
czolZDogIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgKwl2YV9zdGFy
dChhcCwgZXJyKTsNCiAgICArCXZmcHJpbnRmKHN0ZGVyciwgZXJyLCBhcCk7DQogICAgKwl2YV9l
bmQoYXApOw0KICAgICsJZnByaW50ZihzdGRlcnIsICJcbiIpOw0KICAgICt9DQogICAgKw0KICAg
ICtzdGF0aWMgdm9pZCB6Y29uZl9lcnJvcihjb25zdCBjaGFyICplcnIsIC4uLikNCiAgICArew0K
ICAgICsJdmFfbGlzdCBhcDsNCiAgICArDQogICAgKwl5eW5lcnJzKys7DQogICAgKwlmcHJpbnRm
KHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAg
ICArCXZhX3N0YXJ0KGFwLCBlcnIpOw0KICAgICsJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsN
CiAgICArCXZhX2VuZChhcCk7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7DQogICAgK30N
CiAgICArDQogICAgK3N0YXRpYyB2b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqZXJyKQ0KICAgICt7
DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6
Y29uZl9saW5lbm8oKSArIDEsIGVycik7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lk
IHByaW50X3F1b3RlZF9zdHJpbmcoRklMRSAqb3V0LCBjb25zdCBjaGFyICpzdHIpDQogICAgK3sN
CiAgICArCWNvbnN0IGNoYXIgKnA7DQogICAgKwlpbnQgbGVuOw0KICAgICsNCiAgICArCXB1dGMo
JyInLCBvdXQpOw0KICAgICsJd2hpbGUgKChwID0gc3RyY2hyKHN0ciwgJyInKSkpIHsNCiAgICAr
CQlsZW4gPSBwIC0gc3RyOw0KICAgICsJCWlmIChsZW4pDQogICAgKwkJCWZwcmludGYob3V0LCAi
JS4qcyIsIGxlbiwgc3RyKTsNCiAgICArCQlmcHV0cygiXFxcIiIsIG91dCk7DQogICAgKwkJc3Ry
ID0gcCArIDE7DQogICAgKwl9DQogICAgKwlmcHV0cyhzdHIsIG91dCk7DQogICAgKwlwdXRjKCci
Jywgb3V0KTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgcHJpbnRfc3ltYm9sKEZJ
TEUgKm91dCwgc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wg
KnN5bSA9IG1lbnUtPnN5bTsNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArDQog
ICAgKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKQ0KICAgICsJCWZwcmludGYob3V0LCAiXG5jaG9p
Y2VcbiIpOw0KICAgICsJZWxzZQ0KICAgICsJCWZwcmludGYob3V0LCAiXG5jb25maWcgJXNcbiIs
IHN5bS0+bmFtZSk7DQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJY2FzZSBTX0JP
T0xFQU46DQogICAgKwkJZnB1dHMoIiAgYm9vbFxuIiwgb3V0KTsNCiAgICArCQlicmVhazsNCiAg
ICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQlmcHV0cygiICB0cmlzdGF0ZVxuIiwgb3V0KTsN
CiAgICArCQlicmVhazsNCiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJZnB1dHMoIiAgc3Ry
aW5nXG4iLCBvdXQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX0lOVDoNCiAgICArCQlm
cHV0cygiICBpbnRlZ2VyXG4iLCBvdXQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX0hF
WDoNCiAgICArCQlmcHV0cygiICBoZXhcbiIsIG91dCk7DQogICAgKwkJYnJlYWs7DQogICAgKwlk
ZWZhdWx0Og0KICAgICsJCWZwdXRzKCIgID8/P1xuIiwgb3V0KTsNCiAgICArCQlicmVhazsNCiAg
ICArCX0NCiAgICArCWZvciAocHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5l
eHQpIHsNCiAgICArCQlpZiAocHJvcC0+bWVudSAhPSBtZW51KQ0KICAgICsJCQljb250aW51ZTsN
CiAgICArCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAgICArCQljYXNlIFBfUFJPTVBUOg0KICAg
ICsJCQlmcHV0cygiICBwcm9tcHQgIiwgb3V0KTsNCiAgICArCQkJcHJpbnRfcXVvdGVkX3N0cmlu
ZyhvdXQsIHByb3AtPnRleHQpOw0KICAgICsJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2li
bGUuZXhwcikpIHsNCiAgICArCQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsNCiAgICArCQkJCWV4cHJf
ZnByaW50KHByb3AtPnZpc2libGUuZXhwciwgb3V0KTsNCiAgICArCQkJfQ0KICAgICsJCQlmcHV0
YygnXG4nLCBvdXQpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfREVGQVVMVDoNCiAg
ICArCQkJZnB1dHMoICIgIGRlZmF1bHQgIiwgb3V0KTsNCiAgICArCQkJZXhwcl9mcHJpbnQocHJv
cC0+ZXhwciwgb3V0KTsNCiAgICArCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4
cHIpKSB7DQogICAgKwkJCQlmcHV0cygiIGlmICIsIG91dCk7DQogICAgKwkJCQlleHByX2Zwcmlu
dChwcm9wLT52aXNpYmxlLmV4cHIsIG91dCk7DQogICAgKwkJCX0NCiAgICArCQkJZnB1dGMoJ1xu
Jywgb3V0KTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBQX0NIT0lDRToNCiAgICArCQkJ
ZnB1dHMoIiAgI2Nob2ljZSB2YWx1ZVxuIiwgb3V0KTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
Y2FzZSBQX1NFTEVDVDoNCiAgICArCQkJZnB1dHMoICIgIHNlbGVjdCAiLCBvdXQpOw0KICAgICsJ
CQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOw0KICAgICsJCQlmcHV0YygnXG4nLCBvdXQp
Ow0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfSU1QTFk6DQogICAgKwkJCWZwdXRzKCAi
ICBpbXBseSAiLCBvdXQpOw0KICAgICsJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQpOw0K
ICAgICsJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFBf
UkFOR0U6DQogICAgKwkJCWZwdXRzKCAiICByYW5nZSAiLCBvdXQpOw0KICAgICsJCQlleHByX2Zw
cmludChwcm9wLT5leHByLCBvdXQpOw0KICAgICsJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgICsJ
CQlicmVhazsNCiAgICArCQljYXNlIFBfTUVOVToNCiAgICArCQkJZnB1dHMoICIgIG1lbnUgIiwg
b3V0KTsNCiAgICArCQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOw0KICAg
ICsJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfU1lN
Qk9MOg0KICAgICsJCQlmcHV0cyggIiAgc3ltYm9sICIsIG91dCk7DQogICAgKwkJCWZwcmludGYo
b3V0LCAiJXNcbiIsIHByb3AtPnN5bS0+bmFtZSk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWRl
ZmF1bHQ6DQogICAgKwkJCWZwcmludGYob3V0LCAiICB1bmtub3duIHByb3AgJWQhXG4iLCBwcm9w
LT50eXBlKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJaWYgKG1l
bnUtPmhlbHApIHsNCiAgICArCQlpbnQgbGVuID0gc3RybGVuKG1lbnUtPmhlbHApOw0KICAgICsJ
CXdoaWxlIChtZW51LT5oZWxwWy0tbGVuXSA9PSAnXG4nKQ0KICAgICsJCQltZW51LT5oZWxwW2xl
bl0gPSAwOw0KICAgICsJCWZwcmludGYob3V0LCAiICBoZWxwXG4lc1xuIiwgbWVudS0+aGVscCk7
DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgemNvbmZkdW1wKEZJTEUgKm91dCkN
CiAgICArew0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IHN5bWJv
bCAqc3ltOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAgKw0KICAgICsJbWVudSA9IHJv
b3RtZW51Lmxpc3Q7DQogICAgKwl3aGlsZSAobWVudSkgew0KICAgICsJCWlmICgoc3ltID0gbWVu
dS0+c3ltKSkNCiAgICArCQkJcHJpbnRfc3ltYm9sKG91dCwgbWVudSk7DQogICAgKwkJZWxzZSBp
ZiAoKHByb3AgPSBtZW51LT5wcm9tcHQpKSB7DQogICAgKwkJCXN3aXRjaCAocHJvcC0+dHlwZSkg
ew0KICAgICsJCQljYXNlIFBfQ09NTUVOVDoNCiAgICArCQkJCWZwdXRzKCJcbmNvbW1lbnQgIiwg
b3V0KTsNCiAgICArCQkJCXByaW50X3F1b3RlZF9zdHJpbmcob3V0LCBwcm9wLT50ZXh0KTsNCiAg
ICArCQkJCWZwdXRzKCJcbiIsIG91dCk7DQogICAgKwkJCQlicmVhazsNCiAgICArCQkJY2FzZSBQ
X01FTlU6DQogICAgKwkJCQlmcHV0cygiXG5tZW51ICIsIG91dCk7DQogICAgKwkJCQlwcmludF9x
dW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAgKwkJCQlmcHV0cygiXG4iLCBvdXQp
Ow0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCWRlZmF1bHQ6DQogICAgKwkJCQk7DQogICAgKwkJ
CX0NCiAgICArCQkJaWYgKCFleHByX2lzX3llcyhwcm9wLT52aXNpYmxlLmV4cHIpKSB7DQogICAg
KwkJCQlmcHV0cygiICBkZXBlbmRzICIsIG91dCk7DQogICAgKwkJCQlleHByX2ZwcmludChwcm9w
LT52aXNpYmxlLmV4cHIsIG91dCk7DQogICAgKwkJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAgICsJ
CQl9DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlpZiAobWVudS0+bGlzdCkNCiAgICArCQkJbWVu
dSA9IG1lbnUtPmxpc3Q7DQogICAgKwkJZWxzZSBpZiAobWVudS0+bmV4dCkNCiAgICArCQkJbWVu
dSA9IG1lbnUtPm5leHQ7DQogICAgKwkJZWxzZSB3aGlsZSAoKG1lbnUgPSBtZW51LT5wYXJlbnQp
KSB7DQogICAgKwkJCWlmIChtZW51LT5wcm9tcHQgJiYgbWVudS0+cHJvbXB0LT50eXBlID09IFBf
TUVOVSkNCiAgICArCQkJCWZwdXRzKCJcbmVuZG1lbnVcbiIsIG91dCk7DQogICAgKwkJCWlmICht
ZW51LT5uZXh0KSB7DQogICAgKwkJCQltZW51ID0gbWVudS0+bmV4dDsNCiAgICArCQkJCWJyZWFr
Ow0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsjaW5j
bHVkZSAidXRpbC5jIg0KICAgICsjaW5jbHVkZSAibWVudS5jIg0KICAgIGRpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wMS1rY29uZmlnLWtlcm5lbC10by11bmlrcmFmdC5wYXRj
aCBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0
LnBhdGNoDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5mMGQ2
M2I0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVz
LzAxLWtjb25maWcta2VybmVsLXRvLXVuaWtyYWZ0LnBhdGNoDQogICAgQEAgLTAsMCArMSw3NiBA
QA0KICAgICtkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZSBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvTWFrZWZpbGUNCiAgICAraW5kZXggM2YzMjdlMi4uN2I1MzJjNSAxMDA2
NDQNCiAgICArLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZQ0KICAgICsrKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlDQogICAgK0BAIC0xLDYgKzEsNiBAQA0KICAgICsg
IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsgIyA9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCiAgICArLSMgS2VybmVsIGNvbmZpZ3VyYXRpb24gdGFyZ2V0cw0KICAgICsrIyBVbmlr
cmFmdCBjb25maWd1cmF0aW9uIHRhcmdldHMNCiAgICArICMgVGhlc2UgdGFyZ2V0cyBhcmUgdXNl
ZCBmcm9tIHRvcC1sZXZlbCBtYWtlZmlsZQ0KICAgICsgDQogICAgKyBQSE9OWSArPSB4Y29uZmln
IGdjb25maWcgbWVudWNvbmZpZyBjb25maWcgbG9jYWxtb2Rjb25maWcgbG9jYWx5ZXNjb25maWcg
XA0KICAgICtkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZSBiL3N1
cHBvcnQva2NvbmZpZy5uZXcvZ2NvbmYuZ2xhZGUNCiAgICAraW5kZXggYWE0ODNjYi4uMDNlOTdk
NyAxMDA2NDQNCiAgICArLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9nY29uZi5nbGFkZQ0KICAg
ICsrKysgYi9zdXBwb3J0L2tjb25maWcubmV3L2djb25mLmdsYWRlDQogICAgK0BAIC00LDcgKzQs
NyBAQA0KICAgICsgDQogICAgKyA8d2lkZ2V0IGNsYXNzPSJHdGtXaW5kb3ciIGlkPSJ3aW5kb3cx
Ij4NCiAgICArICAgPHByb3BlcnR5IG5hbWU9InZpc2libGUiPlRydWU8L3Byb3BlcnR5Pg0KICAg
ICstICA8cHJvcGVydHkgbmFtZT0idGl0bGUiIHRyYW5zbGF0YWJsZT0ieWVzIj5HdGsgS2VybmVs
IENvbmZpZ3VyYXRvcjwvcHJvcGVydHk+DQogICAgKysgIDxwcm9wZXJ0eSBuYW1lPSJ0aXRsZSIg
dHJhbnNsYXRhYmxlPSJ5ZXMiPkd0ayBVbmlrcmFmdCBDb25maWd1cmF0b3I8L3Byb3BlcnR5Pg0K
ICAgICsgICA8cHJvcGVydHkgbmFtZT0idHlwZSI+R1RLX1dJTkRPV19UT1BMRVZFTDwvcHJvcGVy
dHk+DQogICAgKyAgIDxwcm9wZXJ0eSBuYW1lPSJ3aW5kb3dfcG9zaXRpb24iPkdUS19XSU5fUE9T
X05PTkU8L3Byb3BlcnR5Pg0KICAgICsgICA8cHJvcGVydHkgbmFtZT0ibW9kYWwiPkZhbHNlPC9w
cm9wZXJ0eT4NCiAgICArZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYyBi
L3N1cHBvcnQva2NvbmZpZy5uZXcvbWNvbmYuYw0KICAgICtpbmRleCA2OTQwOTFmLi41M2M0YTYy
IDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L21jb25mLmMNCiAgICArKysr
IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9tY29uZi5jDQogICAgK0BAIC0xNzUsOSArMTc1LDkgQEAg
bWVudV9pbnN0cnVjdGlvbnNbXSA9DQogICAgKyAJIkFycm93IGtleXMgbmF2aWdhdGUgdGhlIG1l
bnUuICAiDQogICAgKyAJIjxFbnRlcj4gc2VsZWN0cyBzdWJtZW51cyAtLS0+IChvciBlbXB0eSBz
dWJtZW51cyAtLS0tKS4gICINCiAgICArIAkiSGlnaGxpZ2h0ZWQgbGV0dGVycyBhcmUgaG90a2V5
cy4gICINCiAgICArLQkiUHJlc3NpbmcgPFk+IGluY2x1ZGVzLCA8Tj4gZXhjbHVkZXMsIDxNPiBt
b2R1bGFyaXplcyBmZWF0dXJlcy4gICINCiAgICArKwkiUHJlc3NpbmcgPFk+IHNlbGVjdHMgYSBm
ZWF0dXJlLCB3aGlsZSA8Tj4gd2lsbCBleGNsdWRlIGEgZmVhdHVyZS4gICINCiAgICArIAkiUHJl
c3MgPEVzYz48RXNjPiB0byBleGl0LCA8Pz4gZm9yIEhlbHAsIDwvPiBmb3IgU2VhcmNoLiAgIg0K
ICAgICstCSJMZWdlbmQ6IFsqXSBidWlsdC1pbiAgWyBdIGV4Y2x1ZGVkICA8TT4gbW9kdWxlICA8
ID4gbW9kdWxlIGNhcGFibGUiLA0KICAgICsrCSJMZWdlbmQ6IFsqXSBmZWF0dXJlIGlzIHNlbGVj
dGVkICBbIF0gZmVhdHVyZSBpcyBleGNsdWRlZCIsDQogICAgKyByYWRpb2xpc3RfaW5zdHJ1Y3Rp
b25zW10gPQ0KICAgICsgCSJVc2UgdGhlIGFycm93IGtleXMgdG8gbmF2aWdhdGUgdGhpcyB3aW5k
b3cgb3IgIg0KICAgICsgCSJwcmVzcyB0aGUgaG90a2V5IG9mIHRoZSBpdGVtIHlvdSB3aXNoIHRv
IHNlbGVjdCAiDQogICAgK0BAIC05NTcsNyArOTU3LDcgQEAgc3RhdGljIGludCBoYW5kbGVfZXhp
dCh2b2lkKQ0KICAgICsgCWlmIChjb25mX2dldF9jaGFuZ2VkKCkpDQogICAgKyAJCXJlcyA9IGRp
YWxvZ195ZXNubyhOVUxMLA0KICAgICsgCQkJCSAgICJEbyB5b3Ugd2lzaCB0byBzYXZlIHlvdXIg
bmV3IGNvbmZpZ3VyYXRpb24/XG4iDQogICAgKy0JCQkJICAgICAiKFByZXNzIDxFU0M+PEVTQz4g
dG8gY29udGludWUga2VybmVsIGNvbmZpZ3VyYXRpb24uKSIsDQogICAgKysJCQkJICAgICAiKFBy
ZXNzIDxFU0M+PEVTQz4gdG8gY29udGludWUgVW5pa3JhZnQgY29uZmlndXJhdGlvbi4pIiwNCiAg
ICArIAkJCQkgICA2LCA2MCk7DQogICAgKyAJZWxzZQ0KICAgICsgCQlyZXMgPSAtMTsNCiAgICAr
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbmNvbmYuYyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvbmNvbmYuYw0KICAgICtpbmRleCBjYmFmZTNiLi5kM2Q5MDhjIDEwMDY0NA0KICAgICst
LS0gYS9zdXBwb3J0L2tjb25maWcubmV3L25jb25mLmMNCiAgICArKysrIGIvc3VwcG9ydC9rY29u
ZmlnLm5ldy9uY29uZi5jDQogICAgK0BAIC0yOSw3ICsyOSw3IEBAIHN0YXRpYyBjb25zdCBjaGFy
IG5jb25mX2dsb2JhbF9oZWxwW10gPQ0KICAgICsgIk1lbnUgZW50cmllc1xuIg0KICAgICsgIi0t
LS0tLS0tLS0tLVxuIg0KICAgICsgIlRoaXMgaW50ZXJmYWNlIGxldHMgeW91IHNlbGVjdCBmZWF0
dXJlcyBhbmQgcGFyYW1ldGVycyBmb3IgdGhlIGtlcm5lbFxuIg0KICAgICstImJ1aWxkLiAgS2Vy
bmVsIGZlYXR1cmVzIGNhbiBlaXRoZXIgYmUgYnVpbHQtaW4sIG1vZHVsYXJpemVkLCBvciByZW1v
dmVkLlxuIg0KICAgICsrImJ1aWxkLiAgVW5pa3JhZnQgZmVhdHVyZXMgY2FuIGVpdGhlciBiZSBz
ZWxlY3RlZCBvciBkZXNlbGVjdGVkLlxuIg0KICAgICsgIlBhcmFtZXRlcnMgbXVzdCBiZSBlbnRl
cmVkIGFzIHRleHQgb3IgZGVjaW1hbCBvciBoZXhhZGVjaW1hbCBudW1iZXJzLlxuIg0KICAgICsg
IlxuIg0KICAgICsgIk1lbnUgZW50cmllcyBiZWdpbm5pbmcgd2l0aCBmb2xsb3dpbmcgYnJhY2Vz
IHJlcHJlc2VudCBmZWF0dXJlcyB0aGF0XG4iDQogICAgK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcubmV3L3Fjb25mLmNjIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9xY29uZi5jYw0KICAgICtp
bmRleCBjZTdmYzg3Li4wMDIxYWE2IDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0L2tjb25maWcu
bmV3L3Fjb25mLmNjDQogICAgKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcWNvbmYuY2MNCiAg
ICArQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGlubGluZSBRU3RyaW5nIHFnZXR0ZXh0KGNvbnN0
IGNoYXIqIHN0cikNCiAgICArIH0NCiAgICArIA0KICAgICsgQ29uZmlnU2V0dGluZ3M6OkNvbmZp
Z1NldHRpbmdzKCkNCiAgICArLQk6IFFTZXR0aW5ncygia2VybmVsLm9yZyIsICJxY29uZiIpDQog
ICAgKysJOiBRU2V0dGluZ3MoInVuaWtyYWZ0Lm9yZyIsICJxY29uZiIpDQogICAgKyB7DQogICAg
KyB9DQogICAgKyANCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDIt
aW1wb3J0LW1ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDItaW1wb3J0LW1h
a2VmaWxlLmJyDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5m
ZmUwYmE5DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRj
aGVzLzAyLWltcG9ydC1tYWtlZmlsZS5icg0KICAgIEBAIC0wLDAgKzEsNTkgQEANCiAgICArZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25m
aWcubmV3L01ha2VmaWxlLmJyDQogICAgK25ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgK2luZGV4
IDAwMDAwMDAuLjQxYzVjZTENCiAgICArLS0tIC9kZXYvbnVsbA0KICAgICsrKysgYi9zdXBwb3J0
L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgK0BAIC0wLDAgKzEsNTMgQEANCiAgICArK3Ny
YyA6PSAuDQogICAgKyt0b3Bfc3JjZGlyPS4uLy4uLw0KICAgICsrdG9wX2J1aWxkZGlyPS4uLy4u
Lw0KICAgICsrc3JjdHJlZSA6PSAuDQogICAgKytvYmogPz0gLg0KICAgICsrDQogICAgKytpbmNs
dWRlIE1ha2VmaWxlDQogICAgKysjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9v
LmgNCiAgICArKy1pbmNsdWRlICQob2JqKS8uZGVwZW5kDQogICAgKyskKG9iaikvLmRlcGVuZDog
JCh3aWxkY2FyZCAqLmggKi5jKQ0KICAgICsrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1Mp
ICQoSE9TVENGTEFHUykgLU1NICouYyA+ICRAIDI+L2Rldi9udWxsIHx8IDoNCiAgICArKw0KICAg
ICsrX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQ0K
ICAgICsraG9zdC1jc2luZ2xlIDo9ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3MpLCQoaWYgJCgk
KG0pLW9ianMpLCwkKG0pKSkNCiAgICArK2hvc3QtY211bHRpIDo9ICQoZm9yZWFjaCBtLCQoX19o
b3N0cHJvZ3MpLFwNCiAgICArKyAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYg
JCgkKG0pLW9ianMpLCQobSkpKSkNCiAgICArK2hvc3QtY3h4bXVsdGkgOj0gJChmb3JlYWNoIG0s
JChfX2hvc3Rwcm9ncyksXA0KICAgICsrICAgICAgICAgICAkKGlmICQoJChtKS1jeHhvYmpzKSwk
KG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQ0KICAgICsraG9zdC1jb2JqcyA6PSAkKGFkZHByZWZp
eCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktb2Jqcykp
KSkNCiAgICArK2hvc3QtY3h4b2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZv
cmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktY3h4b2JqcykpKSkNCiAgICArKw0KICAgICsr
SE9TVF9FWFRSQUNGTEFHUyArPSAtSSQob2JqKSAtRENPTkZJR189XCJcIg0KICAgICsrDQogICAg
KyskKGhvc3QtY3NpbmdsZSk6ICU6ICUuYw0KICAgICsrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFD
RkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkPCAtbyAkKG9iaikvJEANCiAg
ICArKw0KICAgICsrJChob3N0LWNtdWx0aSk6ICU6ICQoaG9zdC1jb2JqcykgJChob3N0LWNzaGxp
YikNCiAgICArKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQo
SE9TVENGTEFHU18kQCkgJChhZGRwcmVmaXggJChvYmopLywkKCQoQEYpLW9ianMpKSAkKEhPU1RM
T0FETElCRVNfJChARikpIC1vICQob2JqKS8kQA0KICAgICsrDQogICAgKyskKGhvc3QtY3h4bXVs
dGkpOiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAg
ICsrCSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENY
WEZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhv
YmpzKSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAgICArKw0KICAgICsr
JChvYmopLyUubzogJS5jDQogICAgKysJJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChI
T1NUQ0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAgKysNCiAgICAr
KyQob2JqKS8lLm86ICQob2JqKS8lLmMNCiAgICArKwkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZM
QUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICAr
Kw0KICAgICsrJChvYmopLyUubzogJS5jYw0KICAgICsrCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFD
RkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRADQog
ICAgKysNCiAgICArKyQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZA0KICAgICsrCSQoUSljYXQg
JDwgPiAkQA0KICAgICsrDQogICAgKytjbGVhbjoNCiAgICArKwkkKFEpcm0gLWYgJChhZGRwcmVm
aXggJChvYmopLywkKGNsZWFuLWZpbGVzKSkNCiAgICArK2Rpc3RjbGVhbjogY2xlYW4NCiAgICAr
KwkkKFEpcm0gLWYgJChhZGRwcmVmaXggJChvYmopLywkKGx4ZGlhbG9nKSAkKGNvbmYtb2Jqcykg
JChtY29uZi1vYmpzKSAkKGt4Z2V0dGV4dC1vYmpzKSBcDQogICAgKysJCSQoaG9zdHByb2dzLXkp
ICQocWNvbmYtY3h4b2JqcykgJChxY29uZi1vYmpzKSAkKGdjb25mLW9ianMpIFwNCiAgICArKwkJ
bWNvbmYgLmRlcGVuZCkNCiAgICArKw0KICAgICsrRk9SQ0U6DQogICAgKysuUEhPTlk6IEZPUkNF
IGNsZWFuIGRpc3RjbGVhbg0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcGF0Y2hl
cy8wMy1pbmNsdWRlLW1ha2VmaWxlLWhlbHBlci1mcm9tLWtlcm5lbCBiL3N1cHBvcnQva2NvbmZp
Zy9wYXRjaGVzLzAzLWluY2x1ZGUtbWFrZWZpbGUtaGVscGVyLWZyb20ta2VybmVsDQogICAgbmV3
IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4zNWM3OWY4DQogICAgLS0tIC9k
ZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzAzLWluY2x1ZGUtbWFr
ZWZpbGUtaGVscGVyLWZyb20ta2VybmVsDQogICAgQEAgLTAsMCArMSwxMDIgQEANCiAgICArZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBwb3J0L2tjb25m
aWcubmV3L01ha2VmaWxlLmJyDQogICAgK2luZGV4IDQxYzVjZTEuLjBmZGJlOWEgMTAwNjQ0DQog
ICAgKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICArKysrIGIvc3Vw
cG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICtAQCAtNCw2ICs0LDcgQEAgdG9wX2J1
aWxkZGlyPS4uLy4uLw0KICAgICsgc3JjdHJlZSA6PSAuDQogICAgKyBvYmogPz0gLg0KICAgICsg
DQogICAgKytpbmNsdWRlIE1ha2VmaWxlLnJ1bGVzDQogICAgKyBpbmNsdWRlIE1ha2VmaWxlDQog
ICAgKyAjSE9TVENGTEFHUys9LURpbmxpbmU9IiIgLWluY2x1ZGUgZm9vLmgNCiAgICArIC1pbmNs
dWRlICQob2JqKS8uZGVwZW5kDQogICAgK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3
L01ha2VmaWxlLnJ1bGVzIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5ydWxlcw0KICAg
ICtuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgICtpbmRleCAwMDAwMDAwLi43OGE5YzgxDQogICAg
Ky0tLSAvZGV2L251bGwNCiAgICArKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5y
dWxlcw0KICAgICtAQCAtMCwwICsxLDg0IEBADQogICAgKytrZWNobyA6PSBlY2hvDQogICAgKytj
b21tYSA6PSAsDQogICAgKysNCiAgICArKw0KICAgICsrZG90LXRhcmdldCA9ICQoZGlyICRAKS4k
KG5vdGRpciAkQCkNCiAgICArKw0KICAgICsrYW55LXByZXJlcSA9ICQoZmlsdGVyLW91dCAkKFBI
T05ZKSwkPykgJChmaWx0ZXItb3V0ICQoUEhPTlkpICQod2lsZGNhcmQgJF4pLCReKQ0KICAgICsr
DQogICAgKythcmctY2hlY2sgPSAkKGlmICQoc3RyaXAgJChjbWRfJEApKSwsMSkNCiAgICArKw0K
ICAgICsrbWFrZS1jbWQgPSAkKGNhbGwgZXNjc3EsJChzdWJzdCAkKHBvdW5kKSwkJChwb3VuZCks
JChzdWJzdCAkJCwkJCQkLCQoY21kXyQoMSkpKSkpDQogICAgKysNCiAgICArKyMgcHJpbnRpbmcg
Y29tbWFuZHMNCiAgICArK2NtZCA9IEBzZXQgLWU7ICQoZWNoby1jbWQpICQoY21kXyQoMSkpDQog
ICAgKysNCiAgICArK2RlcGZpbGUgPSAkKHN1YnN0ICQoY29tbWEpLF8sJChkb3QtdGFyZ2V0KS5k
KQ0KICAgICsrZGVwZmxhZ3MgPSAtV3AkKGNvbW1hKS1NRCQoY29tbWEpJChjYWxsIGRvdC10YXJn
ZXQpDQogICAgKysNCiAgICArK2NtZF9hbmRfZml4ZGVwID0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKysJJChjbWQpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKysJJChvYmop
L2ZpeGRlcCAkKGRlcGZpbGUpICRAICckKG1ha2UtY21kKScgPiAkKGRvdC10YXJnZXQpLmNtZDtc
DQogICAgKysJcm0gLWYgJChkZXBmaWxlKQ0KICAgICsrDQogICAgKytpZl9jaGFuZ2VkX2RlcCA9
ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSksJChjbWRfYW5kX2ZpeGRl
cCksQDopDQogICAgKysNCiAgICArK2RlZmluZSBtdWx0aV9kZXBlbmQNCiAgICArKyQoZm9yZWFj
aCBtLCAkKG5vdGRpciAkMSksIFwNCiAgICArKyAgICAkKGV2YWwgJChvYmopLyRtOiBcDQogICAg
KysgICAgJChhZGRwcmVmaXggJChvYmopLywgJChmb3JlYWNoIHMsICQzLCAkKCQobTolJChzdHJp
cCAkMik9JSQocykpKSkpKSkNCiAgICArK2VuZGVmDQogICAgKysNCiAgICArKyMjIw0KICAgICsr
IyBmaWxlY2hrIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGNvbnRlbnQgb2YgYSBnZW5lcmF0ZWQg
ZmlsZSBpcyB1cGRhdGVkLg0KICAgICsrIyBTYW1wbGUgdXNhZ2U6DQogICAgKysjDQogICAgKysj
IGZpbGVjaGtfc2FtcGxlID0gZWNobyAkKEtFUk5FTFJFTEVBU0UpDQogICAgKysjIHZlcnNpb24u
aDogRk9SQ0UNCiAgICArKyMgICAkKGNhbGwgZmlsZWNoayxzYW1wbGUpDQogICAgKysjDQogICAg
KysjIFRoZSBydWxlIGRlZmluZWQgc2hhbGwgd3JpdGUgdG8gc3Rkb3V0IHRoZSBjb250ZW50IG9m
IHRoZSBuZXcgZmlsZS4NCiAgICArKyMgVGhlIGV4aXN0aW5nIGZpbGUgd2lsbCBiZSBjb21wYXJl
ZCB3aXRoIHRoZSBuZXcgb25lLg0KICAgICsrIyAtIElmIG5vIGZpbGUgZXhpc3QgaXQgaXMgY3Jl
YXRlZA0KICAgICsrIyAtIElmIHRoZSBjb250ZW50IGRpZmZlciB0aGUgbmV3IGZpbGUgaXMgdXNl
ZA0KICAgICsrIyAtIElmIHRoZXkgYXJlIGVxdWFsIG5vIGNoYW5nZSwgYW5kIG5vIHRpbWVzdGFt
cCB1cGRhdGUNCiAgICArKyMgLSBzdGRpbiBpcyBwaXBlZCBpbiBmcm9tIHRoZSBmaXJzdCBwcmVy
ZXF1aXNpdGUgKCQ8KSBzbyBvbmUgaGFzDQogICAgKysjICAgdG8gc3BlY2lmeSBhIHZhbGlkIGZp
bGUgYXMgZmlyc3QgcHJlcmVxdWlzaXRlIChvZnRlbiB0aGUga2J1aWxkIGZpbGUpDQogICAgKytk
ZWZpbmUgZmlsZWNoaw0KICAgICsrCSQoUSlzZXQgLWU7ICAgICAgICAgICAgIFwNCiAgICArKwlt
a2RpciAtcCAkKGRpciAkQCk7ICAgICAgICAgXA0KICAgICsrCXsgJChmaWxlY2hrXyQoMSkpOyB9
ID4gJEAudG1wOyAgICAgIFwNCiAgICArKwlpZiBbIC1yICRAIF0gJiYgY21wIC1zICRAICRALnRt
cDsgdGhlbiAgXA0KICAgICsrCSAgICBybSAtZiAkQC50bXA7ICAgICAgICAgICBcDQogICAgKysJ
ZWxzZSAgICAgICAgICAgICAgICAgICAgXA0KICAgICsrCSAgICAkKGtlY2hvKSAnICBVUEQgICAg
ICRAJzsgICAgXA0KICAgICsrCSAgICBtdiAtZiAkQC50bXAgJEA7ICAgICAgICBcDQogICAgKysJ
ZmkNCiAgICArK2VuZGVmDQogICAgKysNCiAgICArKyMgRXhlY3V0ZSBjb21tYW5kIGlmIGNvbW1h
bmQgaGFzIGNoYW5nZWQgb3IgcHJlcmVxdWlzaXRlKHMpIGFyZSB1cGRhdGVkLg0KICAgICsraWZf
Y2hhbmdlZCA9ICQoaWYgJChzdHJpcCAkKGFueS1wcmVyZXEpICQoYXJnLWNoZWNrKSksCQlcDQog
ICAgKysJJChjbWQpO1wNCiAgICArKwlwcmludGYgJyVzXG4nICdjbWRfJEAgOj0gJChtYWtlLWNt
ZCknID4gJChkb3QtdGFyZ2V0KS5jbWQsIEA6KQ0KICAgICsrDQogICAgKysjIExFWA0KICAgICsr
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICArK3F1aWV0X2NtZF9mbGV4ID0gTEVYICRADQogICAg
KytjbWRfZmxleCA9ICQoTEVYKSAtbyRAIC1MICQ8DQogICAgKysNCiAgICArKyQob2JqKS8lLmxl
eC5jOiAkKHNyYykvJS5sIEZPUkNFDQogICAgKysJJChjYWxsIGlmX2NoYW5nZWQsZmxleCkNCiAg
ICArKw0KICAgICsrIyBZQUNDDQogICAgKysjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgICsrcXVp
ZXRfY21kX2Jpc29uID0gWUFDQyAgICAkQA0KICAgICsrY21kX2Jpc29uID0gJChZQUNDKSAtbyRA
IC10IC1sICQ8DQogICAgKysNCiAgICArKyQob2JqKS8lLnRhYi5jOiAkKHNyYykvJS55IEZPUkNF
DQogICAgKysJJChjYWxsIGlmX2NoYW5nZWQsYmlzb24pDQogICAgKysNCiAgICArK3F1aWV0X2Nt
ZF9iaXNvbl9oID0gWUFDQyAgICAkQA0KICAgICsrY21kX2Jpc29uX2ggPSAkKFlBQ0MpIC1vL2Rl
di9udWxsIC0tZGVmaW5lcz0kQCAtdCAtbCAkPA0KICAgICsrDQogICAgKyskKG9iaikvJS50YWIu
aDogJChzcmMpLyUueSBGT1JDRQ0KICAgICsrCSQoY2FsbCBpZl9jaGFuZ2VkLGJpc29uX2gpDQog
ICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmlj
LXJ1bGUgYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1ydWxlDQog
ICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4zZGUwY2IxDQogICAg
LS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA0LXJlbW92
ZS1nZW5lcmljLXJ1bGUNCiAgICBAQCAtMCwwICsxLDI2IEBADQogICAgK2RpZmYgLS1naXQgYS9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtl
ZmlsZS5icg0KICAgICtpbmRleCAwZmRiZTlhLi5jMTFmMjk3IDEwMDY0NA0KICAgICstLS0gYS9z
dXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgKysrKyBiL3N1cHBvcnQva2NvbmZp
Zy5uZXcvTWFrZWZpbGUuYnINCiAgICArQEAgLTMxLDE4ICszMSw2IEBAICQoaG9zdC1jbXVsdGkp
OiAlOiAkKGhvc3QtY29ianMpICQoaG9zdC1jc2hsaWIpDQogICAgKyAkKGhvc3QtY3h4bXVsdGkp
OiAlOiAkKGhvc3QtY3h4b2JqcykgJChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgICsg
CSQoSE9TVENYWCkgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQoSE9TVENYWEZM
QUdTXyRAKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykgJCgkKEBGKS1jeHhvYmpz
KSkgJChIT1NUTE9BRExJQkVTXyQoQEYpKSAtbyAkKG9iaikvJEANCiAgICArIA0KICAgICstJChv
YmopLyUubzogJS5jDQogICAgKy0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NU
Q0ZMQUdTKSAkKEhPU1RDRkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAgKy0NCiAgICArLSQo
b2JqKS8lLm86ICQob2JqKS8lLmMNCiAgICArLQkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdT
KSAkKEhPU1RDRkxBR1MpICQoSE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICArLQ0K
ICAgICstJChvYmopLyUubzogJS5jYw0KICAgICstCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJChARikpIC1jICQ8IC1vICRADQogICAg
Ky0NCiAgICArLSQob2JqKS8lOjogJChzcmMpLyVfc2hpcHBlZA0KICAgICstCSQoUSljYXQgJDwg
PiAkQA0KICAgICstDQogICAgKyBjbGVhbjoNCiAgICArIAkkKFEpcm0gLWYgJChhZGRwcmVmaXgg
JChvYmopLywkKGNsZWFuLWZpbGVzKSkNCiAgICArIGRpc3RjbGVhbjogY2xlYW4NCiAgICArZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvcGF0Y2hlcy8wNC1yZW1vdmUtZ2VuZXJpYy1y
dWxlIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXRjaGVzLzA0LXJlbW92ZS1nZW5lcmljLXJ1bGUN
CiAgICArbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICAraW5kZXggMDAwMDAwMC4uZTY5ZGUyOQ0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNS1hZGQtdW5pa3JhZnQt
Zml4ZGVwLWhlYWRlciBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA1LWFkZC11bmlrcmFmdC1m
aXhkZXAtaGVhZGVyDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li4zYjJjOGFlDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9w
YXRjaGVzLzA1LWFkZC11bmlrcmFmdC1maXhkZXAtaGVhZGVyDQogICAgQEAgLTAsMCArMSwxMiBA
QA0KICAgICtkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYyBiL3N1cHBv
cnQva2NvbmZpZy5uZXcvZml4ZGVwLmMNCiAgICAraW5kZXggZmFjYmQ2MC4uOTdhZmI3MCAxMDA2
NDQNCiAgICArLS0tIGEvc3VwcG9ydC9rY29uZmlnLm5ldy9maXhkZXAuYw0KICAgICsrKysgYi9z
dXBwb3J0L2tjb25maWcubmV3L2ZpeGRlcC5jDQogICAgK0BAIC0yNjksNiArMjY5LDcgQEAgc3Rh
dGljIGludCBpc19pZ25vcmVkX2ZpbGUoY29uc3QgY2hhciAqcywgaW50IGxlbikNCiAgICArIHsN
CiAgICArIAlyZXR1cm4gc3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNsdWRlL2dlbmVyYXRlZC9h
dXRvY29uZi5oIikgfHwNCiAgICArIAkgICAgICAgc3RyX2VuZHNfd2l0aChzLCBsZW4sICJpbmNs
dWRlL2dlbmVyYXRlZC9hdXRva3N5bXMuaCIpIHx8DQogICAgKysJICAgICAgIHN0cl9lbmRzX3dp
dGgocywgbGVuLCAiYnVpbGQvaW5jbHVkZS91ay9fY29uZmlnLmgiKSB8fA0KICAgICsgCSAgICAg
ICBzdHJfZW5kc193aXRoKHMsIGxlbiwgIi52ZXIiKTsNCiAgICArIH0NCiAgICArIA0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVs
ZXMgYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNi1yZW1vdmUtaW1wbGljaXQtcnVsZXMNCiAg
ICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjRlMTc5ZTgNCiAgICAt
LS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3BhdGNoZXMvMDYtcmVtb3Zl
LWltcGxpY2l0LXJ1bGVzDQogICAgQEAgLTAsMCArMSwxMyBAQA0KICAgICtkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5iciBiL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFr
ZWZpbGUuYnINCiAgICAraW5kZXggNThlNmU3NS4uYWZlOTRlZSAxMDA2NDQNCiAgICArLS0tIGEv
c3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICsrKysgYi9zdXBwb3J0L2tjb25m
aWcubmV3L01ha2VmaWxlLmJyDQogICAgK0BAIC00LDYgKzQsOCBAQCB0b3BfYnVpbGRkaXI9Li4v
Li4vDQogICAgKyBzcmN0cmVlIDo9IC4NCiAgICArIG9iaiA/PSAuDQogICAgKyANCiAgICArKy5T
VUZGSVhFUyA6DQogICAgKysNCiAgICArIGluY2x1ZGUgTWFrZWZpbGUucnVsZXMNCiAgICArIGlu
Y2x1ZGUgTWFrZWZpbGUNCiAgICArICNIT1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5jbHVkZSBm
b28uaA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wNy1pbXBvcnQt
aG9zdC10b29scy1ydWxlcyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA3LWltcG9ydC1ob3N0
LXRvb2xzLXJ1bGVzDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li5kMjRkYzk3DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9w
YXRjaGVzLzA3LWltcG9ydC1ob3N0LXRvb2xzLXJ1bGVzDQogICAgQEAgLTAsMCArMSwxNDIgQEAN
CiAgICArZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnIgYi9zdXBw
b3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgK2luZGV4IGFmZTk0ZWUuLjhlNjRhOWIg
MTAwNjQ0DQogICAgKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICAr
KysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9NYWtlZmlsZS5icg0KICAgICtAQCAtMTAsMjkgKzEw
LDQxIEBAIGluY2x1ZGUgTWFrZWZpbGUucnVsZXMNCiAgICArIGluY2x1ZGUgTWFrZWZpbGUNCiAg
ICArICNIT1NUQ0ZMQUdTKz0tRGlubGluZT0iIiAtaW5jbHVkZSBmb28uaA0KICAgICsgLWluY2x1
ZGUgJChvYmopLy5kZXBlbmQNCiAgICArLSQob2JqKS8uZGVwZW5kOiAkKHdpbGRjYXJkICouaCAq
LmMpDQogICAgKy0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAt
TU0gKi5jID4gJEAgMj4vZGV2L251bGwgfHwgOg0KICAgICsgDQogICAgKyBfX2hvc3Rwcm9ncyA6
PSAkKHNvcnQgJChob3N0cHJvZ3MteSkgJChob3N0cHJvZ3MtbSkpDQogICAgKy1ob3N0LWNzaW5n
bGUgOj0gJChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksJChpZiAkKCQobSktb2JqcyksLCQobSkp
KQ0KICAgICsraG9zdC1jc2hsaWIgOj0gJChzb3J0ICQoaG9zdGxpYnMteSkgJChob3N0bGlicy1t
KSkNCiAgICArK2hvc3QtY3h4c2hsaWIgOj0gJChzb3J0ICQoaG9zdGN4eGxpYnMteSkgJChob3N0
Y3h4bGlicy1tKSkNCiAgICArKw0KICAgICsrIyBDIGNvZGUNCiAgICArKyMgRXhlY3V0YWJsZXMg
Y29tcGlsZWQgZnJvbSBhIHNpbmdsZSAuYyBmaWxlDQogICAgKytob3N0LWNzaW5nbGU6PSAkKGZv
cmVhY2ggbSwkKF9faG9zdHByb2dzKSwgXA0KICAgICsrICAgICAgICAgICAgICQoaWYgJCgkKG0p
LW9ianMpJCgkKG0pLWN4eG9ianMpLCwkKG0pKSkNCiAgICArIGhvc3QtY211bHRpIDo9ICQoZm9y
ZWFjaCBtLCQoX19ob3N0cHJvZ3MpLFwNCiAgICArLSAgICAgICAgICAgJChpZiAkKCQobSktY3h4
b2JqcyksLCQoaWYgJCgkKG0pLW9ianMpLCQobSkpKSkNCiAgICArLWhvc3QtY3h4bXVsdGkgOj0g
JChmb3JlYWNoIG0sJChfX2hvc3Rwcm9ncyksXA0KICAgICstICAgICAgICAgICAkKGlmICQoJCht
KS1jeHhvYmpzKSwkKG0pLCQoaWYgJCgkKG0pLW9ianMpLCkpKQ0KICAgICstaG9zdC1jb2JqcyA6
PSAkKGFkZHByZWZpeCAkKG9iaikvLCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwk
KCQobSktb2JqcykpKSkNCiAgICArLWhvc3QtY3h4b2JqcyA6PSAkKGFkZHByZWZpeCAkKG9iaikv
LCQoc29ydCAkKGZvcmVhY2ggbSwkKF9faG9zdHByb2dzKSwkKCQobSktY3h4b2JqcykpKSkNCiAg
ICArKwkJICAgICAgICAgICAgJChpZiAkKCQobSktY3h4b2JqcyksLCQoaWYgJCgkKG0pLW9ianMp
LCQobSkpKSkNCiAgICArKyMgT2JqZWN0ICgubykgZmlsZXMgY29tcGlsZWQgZnJvbSAuYyBmaWxl
cw0KICAgICsraG9zdC1jb2JqcyAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQoX19ob3N0cHJvZ3Mp
LCQoJChtKS1vYmpzKSkpDQogICAgKysNCiAgICArKyMgQysrIGNvZGUNCiAgICArKyMgQysrIGV4
ZWN1dGFibGVzIGNvbXBpbGVkIGZyb20gYXQgbGVhc3Qgb25lIC5jYyBmaWxlDQogICAgKysjIGFu
ZCB6ZXJvIG9yIG1vcmUgLmMgZmlsZXMNCiAgICArKyBob3N0LWN4eG11bHRpICAgOj0gJChmb3Jl
YWNoIG0sJChfX2hvc3Rwcm9ncyksJChpZiAkKCQobSktY3h4b2JqcyksJChtKSkpDQogICAgKysj
IEMrKyBPYmplY3QgKC5vKSBmaWxlcyBjb21waWxlZCBmcm9tIC5jYyBmaWxlcw0KICAgICsraG9z
dC1jeHhvYmpzICAgIDo9ICQoc29ydCAkKGZvcmVhY2ggbSwkKGhvc3QtY3h4bXVsdGkpLCQoJCht
KS1jeHhvYmpzKSkpDQogICAgKysjT2JqZWN0ICgubykgZmlsZXMgdXNlZCBieSB0aGUgc2hhcmVk
IGxpYmFyaWVzDQogICAgKytob3N0LWNzaG9ianMgICAgOj0gJChzb3J0ICQoZm9yZWFjaCBtLCQo
aG9zdC1jc2hsaWIpLCQoJChtOi5zbz0tb2JqcykpKSkNCiAgICArK2hvc3QtY3h4c2hvYmpzICA6
PSAkKHNvcnQgJChmb3JlYWNoIG0sJChob3N0LWN4eHNobGliKSwkKCQobTouc289LW9ianMpKSkp
DQogICAgKysNCiAgICArKw0KICAgICsraG9zdC1jc2luZ2xlIDo9ICQoYWRkcHJlZml4ICQob2Jq
KS8sJChob3N0LWNzaW5nbGUpKQ0KICAgICsraG9zdC1jbXVsdGkgIDo9ICQoYWRkcHJlZml4ICQo
b2JqKS8sJChob3N0LWNtdWx0aSkpDQogICAgKytob3N0LWN4eG11bHRpICA6PSAkKGFkZHByZWZp
eCAkKG9iaikvLCQoaG9zdC1jeHhtdWx0aSkpDQogICAgKytob3N0LWNvYmpzIDo9ICQoYWRkcHJl
Zml4ICQob2JqKS8sJChob3N0LWNvYmpzKSkNCiAgICArK2hvc3QtY3h4b2JqcyA6PSAkKGFkZHBy
ZWZpeCAkKG9iaikvLCQoaG9zdC1jeHhvYmpzKSkNCiAgICArIGZpeGRlcC1vYmpzIDo9ICQob2Jq
KS9maXhkZXAubw0KICAgICsgDQogICAgKyBIT1NUX0VYVFJBQ0ZMQUdTICs9IC1JJChvYmopIC1E
Q09ORklHXz1cIlwiDQogICAgKyANCiAgICArLSQoaG9zdC1jc2luZ2xlKTogJTogJS5jDQogICAg
Ky0JJChIT1NUQ0MpICQoSE9TVF9FWFRSQUNGTEFHUykgJChIT1NUQ0ZMQUdTKSAkKEhPU1RDRkxB
R1NfJEApICQ8IC1vICQob2JqKS8kQA0KICAgICstDQogICAgKy0kKGhvc3QtY211bHRpKTogJTog
JChob3N0LWNvYmpzKSAkKGhvc3QtY3NobGliKQ0KICAgICstCSQoSE9TVENDKSAkKEhPU1RfRVhU
UkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyRAKSAkKGFkZHByZWZpeCAkKG9i
aikvLCQoJChARiktb2JqcykpICQoSE9TVExPQURMSUJFU18kKEBGKSkgLW8gJChvYmopLyRADQog
ICAgKyANCiAgICArLSQoaG9zdC1jeHhtdWx0aSk6ICU6ICQoaG9zdC1jeHhvYmpzKSAkKGhvc3Qt
Y29ianMpICQoaG9zdC1jc2hsaWIpDQogICAgKy0JJChIT1NUQ1hYKSAkKEhPU1RfRVhUUkFDRkxB
R1MpICQoSE9TVENGTEFHUykgJChIT1NUQ1hYRkxBR1NfJEApICQoYWRkcHJlZml4ICQob2JqKS8s
JCgkKEBGKS1vYmpzKSAkKCQoQEYpLWN4eG9ianMpKSAkKEhPU1RMT0FETElCRVNfJChARikpIC1v
ICQob2JqKS8kQA0KICAgICsgDQogICAgKyAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQ0K
ICAgICsgCSQoSE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NU
Q0ZMQUdTXyQoQEYpKSAkPCAtbyAkQA0KICAgICtAQCAtNDAsNiArNTIsODAgQEAgJChvYmopL2Zp
eGRlcDogJChmaXhkZXAtb2JqcykNCiAgICArICQoZml4ZGVwLW9ianMpOiAkKHNyYykvZml4ZGVw
LmMNCiAgICArIAkkKEhPU1RDQykgJChIT1NUX0VYVFJBQ0ZMQUdTKSAkKEhPU1RDRkxBR1MpICQo
SE9TVENGTEFHU18kKEBGKSkgLWMgJDwgLW8gJEANCiAgICArIA0KICAgICsrIyMjIyMNCiAgICAr
KyMgQ29tcGlsZSBwcm9ncmFtcyBvbiB0aGUgaG9zdA0KICAgICsrDQogICAgKysjIENyZWF0ZSBl
eGVjdXRhYmxlIGZyb20gYSBzaW5nbGUgLmMgZmlsZQ0KICAgICsrIyBob3N0LWNzaW5nbGUgLT4g
RXhlY3V0YWJsZQ0KICAgICsrcXVpZXRfY21kX2hvc3QtY3NpbmdsZSAJPSBIT1NUQ0MgICRADQog
ICAgKysgICAgICBjbWRfaG9zdC1jc2luZ2xlCT0gJChIT1NUQ0MpICQoaG9zdGNfZmxhZ3MpICQo
SE9TVExERkxBR1MpIC1vICRAICQ8IFwNCiAgICArKwkJJChIT1NUTERMSUJTKSAkKEhPU1RMRExJ
QlNfJChARikpDQogICAgKyskKGhvc3QtY3NpbmdsZSk6ICQob2JqKS8lOiAkKHNyYykvJS5jICQo
b2JqKS9maXhkZXAgRk9SQ0UNCiAgICArKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jc2lu
Z2xlKQ0KICAgICsrDQogICAgKysjIExpbmsgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiBsaXN0IG9m
IC5vIGZpbGVzLCBhbGwgcGxhaW4gYw0KICAgICsrIyBob3N0LWNtdWx0aSAtPiBleGVjdXRhYmxl
DQogICAgKytxdWlldF9jbWRfaG9zdC1jbXVsdGkJPSBIT1NUTEQgICRADQogICAgKysgICAgICBj
bWRfaG9zdC1jbXVsdGkJPSAkKEhPU1RDQykgJChob3N0Y19mbGFncykgLW8gJEAgXA0KICAgICsr
CQkJICAkKGFkZHByZWZpeCAkKG9iaikvLCQoJChARiktb2JqcykpIFwNCiAgICArKwkJCSAgJChI
T1NUX0xERkxBR1MpICQoSE9TVExETElCU18kKEBGKSkNCiAgICArKyQoaG9zdC1jbXVsdGkpOiAk
KG9iaikvZml4ZGVwIEZPUkNFDQogICAgKysJJChjYWxsIGlmX2NoYW5nZWQsaG9zdC1jbXVsdGkp
DQogICAgKyskKGNhbGwgbXVsdGlfZGVwZW5kLCQoaG9zdC1jbXVsdGkpLCAsIC1vYmpzKQ0KICAg
ICsrDQogICAgKysNCiAgICArKyMgQ3JlYXRlIC5vIGZpbGUgZnJvbSBhIHNpbmdsZSAuYyBmaWxl
DQogICAgKysjIGhvc3QtY29ianMgLT4gLm8NCiAgICArK3F1aWV0X2NtZF9ob3N0LWNvYmpzCT0g
SE9TVENDICAkQA0KICAgICsrICAgICAgY21kX2hvc3QtY29ianMJPSAkKEhPU1RDQykgJChob3N0
Y19mbGFncykgJChIT1NUQ0ZMQUdTXyQoQEYpKVwNCiAgICArKwkJCSAgLWMgLW8gJEAgJDwNCiAg
ICArKyQoZmlsdGVyLW91dCAlLnRhYi5vLCAkKGZpbHRlci1vdXQgJS5sZXgubywkKGhvc3QtY29i
anMpKSk6ICQob2JqKS8lLm86XA0KICAgICsrCQkkKHNyYykvJS5jICQob2JqKS9maXhkZXAgRk9S
Q0UNCiAgICArKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9zdC1jb2JqcykNCiAgICArKw0KICAg
ICsrJChmaWx0ZXIgJS5sZXgubywkKGhvc3QtY29ianMpKTogJChvYmopLyUubGV4Lm86ICAkKG9i
aikvJS5sZXguYyAkKG9iaikvZml4ZGVwIEZPUkNFDQogICAgKysJJChjYWxsIGlmX2NoYW5nZWRf
ZGVwLGhvc3QtY29ianMpDQogICAgKysNCiAgICArKyQoZmlsdGVyICUudGFiLm8sJChob3N0LWNv
YmpzKSk6ICQob2JqKS8lLnRhYi5vOiAgJChvYmopLyUudGFiLmMgJChvYmopL2ZpeGRlcCBGT1JD
RQ0KICAgICsrCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWNvYmpzKQ0KICAgICsrDQogICAg
KysjIExpbmsgYW4gZXhlY3V0YWJsZSBiYXNlZCBvbiBsaXN0IG9mIC5vIGZpbGVzLCBhIG1peHR1
cmUgb2YgLmMgYW5kIC5jYw0KICAgICsrIyBob3N0LWN4eG11bHRpIC0+IGV4ZWN1dGFibGUNCiAg
ICArK3F1aWV0X2NtZF9ob3N0LWN4eG11bHRpCT0gSE9TVExEICAkQA0KICAgICsrICAgICAgY21k
X2hvc3QtY3h4bXVsdGkJPSAkKEhPU1RDWFgpICQoSE9TVExERkxBR1MpIC1vICRAXA0KICAgICsr
CQkJICAkKGZvcmVhY2ggbyxvYmpzIGN4eG9ianMsXA0KICAgICsrCQkJICAkKGFkZHByZWZpeCAk
KG9iaikvLCQoJChARiktJChvKSkpKSBcDQogICAgKysJCQkgICQoSE9TVExETElCUykgJChIT1NU
TERMSUJTXyQoQEYpKQ0KICAgICsrJChob3N0LWN4eG11bHRpKTogRk9SQ0UNCiAgICArKwkkKGNh
bGwgaWZfY2hhbmdlZCxob3N0LWN4eG11bHRpKQ0KICAgICsrJChjYWxsIG11bHRpX2RlcGVuZCwk
KGhvc3QtY3h4bXVsdGkpLCAsIC1vYmpzIC1jeHhvYmpzKQ0KICAgICsrDQogICAgKysNCiAgICAr
KyMgQ3JlYXRlIC5vIGZpbGUgZnJvbSBhIHNpbmdsZSAuY2MgKEMrKykgZmlsZQ0KICAgICsrcXVp
ZXRfY21kX2hvc3QtY3h4b2Jqcwk9IEhPU1RDWFggJEANCiAgICArKyAgICAgIGNtZF9ob3N0LWN4
eG9ianMJPSAkKEhPU1RDWFgpICQoaG9zdGN4eF9mbGFncykgJChIT1NUQ1hYRkxBR1NfJChARikp
IFwNCiAgICArKwkJCSAgLWMgLW8gJEAgJDwNCiAgICArKyQoaG9zdC1jeHhvYmpzKTogJChvYmop
LyUubzogJChzcmMpLyUuY2MgRk9SQ0UNCiAgICArKwkkKGNhbGwgaWZfY2hhbmdlZF9kZXAsaG9z
dC1jeHhvYmpzKQ0KICAgICsrDQogICAgKysjIENvbXBpbGUgLmMgZmlsZSwgY3JlYXRlIHBvc2l0
aW9uIGluZGVwZW5kZW50IC5vIGZpbGUNCiAgICArKyMgaG9zdC1jc2hvYmpzIC0+IC5vDQogICAg
KytxdWlldF9jbWRfaG9zdC1jc2hvYmpzCT0gSE9TVENDICAtZlBJQyAkQA0KICAgICsrICAgICAg
Y21kX2hvc3QtY3Nob2Jqcwk9ICQoSE9TVENDKSAkKGhvc3RjX2ZsYWdzKSAtZlBJQyAtYyAtbyAk
QCAkPA0KICAgICsrJChob3N0LWNzaG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jIEZPUkNF
DQogICAgKysJJChjYWxsIGlmX2NoYW5nZWRfZGVwLGhvc3QtY3Nob2JqcykNCiAgICArKw0KICAg
ICsrIyBDb21waWxlIC5jIGZpbGUsIGNyZWF0ZSBwb3NpdGlvbiBpbmRlcGVuZGVudCAubyBmaWxl
DQogICAgKysjIE5vdGUgdGhhdCBwbHVnaW4gY2FwYWJsZSBnY2MgdmVyc2lvbnMgY2FuIGJlIGVp
dGhlciBDIG9yIEMrKyBiYXNlZA0KICAgICsrIyB0aGVyZWZvcmUgcGx1Z2luIHNvdXJjZSBmaWxl
cyBoYXZlIHRvIGJlIGNvbXBpbGFibGUgaW4gYm90aCBDIGFuZCBDKysgbW9kZS4NCiAgICArKyMg
VGhpcyBpcyB3aHkgYSBDKysgY29tcGlsZXIgaXMgaW52b2tlZCBvbiBhIC5jIGZpbGUuDQogICAg
KysjIGhvc3QtY3h4c2hvYmpzIC0+IC5vDQogICAgKytxdWlldF9jbWRfaG9zdC1jeHhzaG9ianMJ
PSBIT1NUQ1hYIC1mUElDICRADQogICAgKysgICAgICBjbWRfaG9zdC1jeHhzaG9ianMJPSAkKEhP
U1RDWFgpICQoaG9zdGN4eF9mbGFncykgLWZQSUMgLWMgLW8gJEAgJDwNCiAgICArKyQoaG9zdC1j
eHhzaG9ianMpOiAkKG9iaikvJS5vOiAkKHNyYykvJS5jICQob2JqKS9maXhkZXAgRk9SQ0UNCiAg
ICArKwlAZWNobyB0ZXN0LS0kQA0KICAgICsrCSQoY2FsbCBpZl9jaGFuZ2VkX2RlcCxob3N0LWN4
eHNob2JqcykNCiAgICArKw0KICAgICsgY2xlYW46DQogICAgKyAJJChRKXJtIC1mICQoYWRkcHJl
Zml4ICQob2JqKS8sJChjbGVhbi1maWxlcykpDQogICAgKyBkaXN0Y2xlYW46IGNsZWFuDQogICAg
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA4LWZpeGRlcC1hbmQtY29uZmln
LWZsYWcgYi9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8wOC1maXhkZXAtYW5kLWNvbmZpZy1mbGFn
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40YTNhMzU4DQog
ICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA4LWZp
eGRlcC1hbmQtY29uZmlnLWZsYWcNCiAgICBAQCAtMCwwICsxLDE5IEBADQogICAgK2RpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyIGIvc3VwcG9ydC9rY29uZmlnLm5l
dy9NYWtlZmlsZS5icg0KICAgICtpbmRleCAyOWRlZTVlLi45YzExMjkzIDEwMDY0NA0KICAgICst
LS0gYS9zdXBwb3J0L2tjb25maWcubmV3L01ha2VmaWxlLmJyDQogICAgKysrKyBiL3N1cHBvcnQv
a2NvbmZpZy5uZXcvTWFrZWZpbGUuYnINCiAgICArQEAgLTQyLDkgKzQyLDEzIEBAIGhvc3QtY29i
anMgOj0gJChhZGRwcmVmaXggJChvYmopLywkKGhvc3QtY29ianMpKQ0KICAgICsgaG9zdC1jeHhv
YmpzIDo9ICQoYWRkcHJlZml4ICQob2JqKS8sJChob3N0LWN4eG9ianMpKQ0KICAgICsgZml4ZGVw
LW9ianMgOj0gJChvYmopL2ZpeGRlcC5vDQogICAgKyANCiAgICArLUhPU1RfRVhUUkFDRkxBR1Mg
Kz0gLUkkKG9iaikgLURDT05GSUdfPVwiXCINCiAgICArK0hPU1RfRVhUUkFDRkxBR1MgKz0gLUkk
KHNyYykgLUkkKG9iaikgLURDT05GSUdfPVwiXCINCiAgICArIA0KICAgICsrX2hvc3RjX2ZsYWdz
ID0gJChIT1NUQ0ZMQUdTKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHU18kKGJhc2V0
YXJnZXQpLm8pDQogICAgKytfaG9zdGN4eF9mbGFncyA9ICQoSE9TVENYWEZMQUdTKSAkKEhPU1Rf
RVhUUkFDRkxBR1MpICQoSE9TVENYWEZMQUdTXyQoYmFzZXRhcmdldCkubykNCiAgICArIA0KICAg
ICsraG9zdGNfZmxhZ3MgICAgPSAtV3AsLU1ELCQoZGVwZmlsZSkgJChfaG9zdGNfZmxhZ3MpDQog
ICAgKytob3N0Y3h4X2ZsYWdzICA9IC1XcCwtTUQsJChkZXBmaWxlKSAkKF9ob3N0Y3h4X2ZsYWdz
KQ0KICAgICsgDQogICAgKyAkKG9iaikvZml4ZGVwOiAkKGZpeGRlcC1vYmpzKQ0KICAgICsgCSQo
SE9TVENDKSAkKEhPU1RfRVhUUkFDRkxBR1MpICQoSE9TVENGTEFHUykgJChIT1NUQ0ZMQUdTXyQo
QEYpKSAkPCAtbyAkQA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvcGF0Y2hlcy8w
OS1zdXBwb3J0LWdsb2ItaW4ta2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy9wYXRjaGVzLzA5LXN1
cHBvcnQtZ2xvYi1pbi1rY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMDAwMDAwLi4wMzU3YzIyDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQv
a2NvbmZpZy9wYXRjaGVzLzA5LXN1cHBvcnQtZ2xvYi1pbi1rY29uZmlnDQogICAgQEAgLTAsMCAr
MSw3MCBAQA0KICAgICtkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sIGIv
c3VwcG9ydC9rY29uZmlnLm5ldy9sZXhlci5sDQogICAgK2luZGV4IDYzNTRjOTAuLmM1YWNiMzIg
MTAwNjQ0DQogICAgKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGV4ZXIubA0KICAgICsrKysg
Yi9zdXBwb3J0L2tjb25maWcubmV3L2xleGVyLmwNCiAgICArQEAgLTgsNiArOCw3IEBADQogICAg
KyAlew0KICAgICsgDQogICAgKyAjaW5jbHVkZSA8YXNzZXJ0Lmg+DQogICAgKysjaW5jbHVkZSA8
Z2xvYi5oPg0KICAgICsgI2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgICsgI2luY2x1ZGUgPHN0ZGlv
Lmg+DQogICAgKyAjaW5jbHVkZSA8c3RkbGliLmg+DQogICAgK0BAIC00NDIsNiArNDQzLDMyIEBA
IHZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSkNCiAgICArIAljdXJyZW50X2Zp
bGUgPSBmaWxlOw0KICAgICsgfQ0KICAgICsgDQogICAgKyt2b2lkIHpjb25mX25leHRmaWxlcyhj
b25zdCBjaGFyICp3aWxkY2FyZCkNCiAgICArK3sNCiAgICArKwlnbG9iX3QgZyA9IHswfTsNCiAg
ICArKwljaGFyICoqdzsNCiAgICArKwlpbnQgaTsNCiAgICArKw0KICAgICsrCWlmIChnbG9iKHdp
bGRjYXJkLCAwLCBOVUxMLCAmZykgIT0gMCkgew0KICAgICsrCQlyZXR1cm47DQogICAgKysJfQ0K
ICAgICsrCWlmIChnLmdsX3BhdGh2ID09IE5VTEwpIHsNCiAgICArKwkJZ2xvYmZyZWUoJmcpOw0K
ICAgICsrCQlyZXR1cm47DQogICAgKysJfQ0KICAgICsrDQogICAgKysJLyogd29ya2luZyB0aHJv
dWdoIGZpbGVzIGJhY2t3YXJkcywgc2luY2UNCiAgICArKwkgKiB3ZSdyZSBmaXJzdCBwdXNoaW5n
IHRoZW0gb24gYSBzdGFjaw0KICAgICsrCSAqIGJlZm9yZSBhY3R1YWxseSBoYW5kbGluZyB0aGVt
Lg0KICAgICsrCSAqLw0KICAgICsrCWZvciAoaSA9IGcuZ2xfcGF0aGM7IGkgPiAwOyBpLS0pIHsN
CiAgICArKwkJdyA9ICZnLmdsX3BhdGh2W2kgLSAxXTsNCiAgICArKwkJemNvbmZfbmV4dGZpbGUo
KncpOw0KICAgICsrCX0NCiAgICArKw0KICAgICsrCWdsb2JmcmVlKCZnKTsNCiAgICArK30NCiAg
ICArKw0KICAgICsgc3RhdGljIHZvaWQgemNvbmZfZW5kZmlsZSh2b2lkKQ0KICAgICsgew0KICAg
ICsgCXN0cnVjdCBidWZmZXIgKnBhcmVudDsNCiAgICArZGlmZiAtLWdpdCBhL3N1cHBvcnQva2Nv
bmZpZy5uZXcvbGtjLmggYi9zdXBwb3J0L2tjb25maWcubmV3L2xrYy5oDQogICAgK2luZGV4IGNi
Yzc2NTguLjY5ZDJjNzcgMTAwNjQ0DQogICAgKy0tLSBhL3N1cHBvcnQva2NvbmZpZy5uZXcvbGtj
LmgNCiAgICArKysrIGIvc3VwcG9ydC9rY29uZmlnLm5ldy9sa2MuaA0KICAgICtAQCAtNDQsNiAr
NDQsNyBAQCB2b2lkIHpjb25mX3N0YXJ0aGVscCh2b2lkKTsNCiAgICArIEZJTEUgKnpjb25mX2Zv
cGVuKGNvbnN0IGNoYXIgKm5hbWUpOw0KICAgICsgdm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBj
aGFyICpuYW1lKTsNCiAgICArIHZvaWQgemNvbmZfbmV4dGZpbGUoY29uc3QgY2hhciAqbmFtZSk7
DQogICAgKyt2b2lkIHpjb25mX25leHRmaWxlcyhjb25zdCBjaGFyICpuYW1lKTsNCiAgICArIGlu
dCB6Y29uZl9saW5lbm8odm9pZCk7DQogICAgKyBjb25zdCBjaGFyICp6Y29uZl9jdXJuYW1lKHZv
aWQpOw0KICAgICsgDQogICAgK2RpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNl
ci55IGIvc3VwcG9ydC9rY29uZmlnLm5ldy9wYXJzZXIueQ0KICAgICtpbmRleCA2MDkzNmM3Li45
NTcwMGY4IDEwMDY0NA0KICAgICstLS0gYS9zdXBwb3J0L2tjb25maWcubmV3L3BhcnNlci55DQog
ICAgKysrKyBiL3N1cHBvcnQva2NvbmZpZy5uZXcvcGFyc2VyLnkNCiAgICArQEAgLTM2Niw3ICsz
NjYsNyBAQCBtZW51X29wdGlvbl9saXN0Og0KICAgICsgc291cmNlX3N0bXQ6IFRfU09VUkNFIHBy
b21wdCBUX0VPTA0KICAgICsgew0KICAgICsgCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnNv
dXJjZSAlc1xuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgJDIpOw0KICAgICst
CXpjb25mX25leHRmaWxlKCQyKTsNCiAgICArKwl6Y29uZl9uZXh0ZmlsZXMoJDIpOw0KICAgICsg
CWZyZWUoJDIpOw0KICAgICsgfTsNCiAgICArIA0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcvcHJlcHJvY2Vzcy5jIGIvc3VwcG9ydC9rY29uZmlnL3ByZXByb2Nlc3MuYw0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNTkyZGZiZg0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvcHJlcHJvY2Vzcy5jDQogICAgQEAg
LTAsMCArMSw1NzMgQEANCiAgICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN
CiAgICArLy8NCiAgICArLy8gQ29weXJpZ2h0IChDKSAyMDE4IE1hc2FoaXJvIFlhbWFkYSA8eWFt
YWRhLm1hc2FoaXJvQHNvY2lvbmV4dC5jb20+DQogICAgKw0KICAgICsjaW5jbHVkZSA8Y3R5cGUu
aD4NCiAgICArI2luY2x1ZGUgPHN0ZGFyZy5oPg0KICAgICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0K
ICAgICsjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICArI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICsj
aW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKw0KICAgICsjaW5jbHVkZSAibGlzdC5oIg0KICAgICsj
aW5jbHVkZSAibGtjLmgiDQogICAgKw0KICAgICsjZGVmaW5lIEFSUkFZX1NJWkUoYXJyKQkJKHNp
emVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSkNCiAgICArDQogICAgK3N0YXRpYyBjaGFyICpl
eHBhbmRfc3RyaW5nX3dpdGhfYXJncyhjb25zdCBjaGFyICppbiwgaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSk7DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChub3JldHVybikp
IHBwZXJyb3IoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pDQogICAgK3sNCiAgICArCXZhX2xpc3Qg
YXA7DQogICAgKw0KICAgICsJZnByaW50ZihzdGRlcnIsICIlczolZDogIiwgY3VycmVudF9maWxl
LT5uYW1lLCB5eWxpbmVubyk7DQogICAgKwl2YV9zdGFydChhcCwgZm9ybWF0KTsNCiAgICArCXZm
cHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7DQogICAgKwl2YV9lbmQoYXApOw0KICAgICsJZnBy
aW50ZihzdGRlcnIsICJcbiIpOw0KICAgICsNCiAgICArCWV4aXQoMSk7DQogICAgK30NCiAgICAr
DQogICAgKy8qDQogICAgKyAqIEVudmlyb25tZW50IHZhcmlhYmxlcw0KICAgICsgKi8NCiAgICAr
c3RhdGljIExJU1RfSEVBRChlbnZfbGlzdCk7DQogICAgKw0KICAgICtzdHJ1Y3QgZW52IHsNCiAg
ICArCWNoYXIgKm5hbWU7DQogICAgKwljaGFyICp2YWx1ZTsNCiAgICArCXN0cnVjdCBsaXN0X2hl
YWQgbm9kZTsNCiAgICArfTsNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGVudl9hZGQoY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpDQogICAgK3sNCiAgICArCXN0cnVjdCBlbnYg
KmU7DQogICAgKw0KICAgICsJZSA9IHhtYWxsb2Moc2l6ZW9mKCplKSk7DQogICAgKwllLT5uYW1l
ID0geHN0cmR1cChuYW1lKTsNCiAgICArCWUtPnZhbHVlID0geHN0cmR1cCh2YWx1ZSk7DQogICAg
Kw0KICAgICsJbGlzdF9hZGRfdGFpbCgmZS0+bm9kZSwgJmVudl9saXN0KTsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RhdGljIHZvaWQgZW52X2RlbChzdHJ1Y3QgZW52ICplKQ0KICAgICt7DQogICAg
KwlsaXN0X2RlbCgmZS0+bm9kZSk7DQogICAgKwlmcmVlKGUtPm5hbWUpOw0KICAgICsJZnJlZShl
LT52YWx1ZSk7DQogICAgKwlmcmVlKGUpOw0KICAgICt9DQogICAgKw0KICAgICsvKiBUaGUgcmV0
dXJuZWQgcG9pbnRlciBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZSAqLw0KICAgICtzdGF0aWMgY2hh
ciAqZW52X2V4cGFuZChjb25zdCBjaGFyICpuYW1lKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZW52
ICplOw0KICAgICsJY29uc3QgY2hhciAqdmFsdWU7DQogICAgKw0KICAgICsJaWYgKCEqbmFtZSkN
CiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArDQogICAgKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGUs
ICZlbnZfbGlzdCwgbm9kZSkgew0KICAgICsJCWlmICghc3RyY21wKG5hbWUsIGUtPm5hbWUpKQ0K
ICAgICsJCQlyZXR1cm4geHN0cmR1cChlLT52YWx1ZSk7DQogICAgKwl9DQogICAgKw0KICAgICsJ
dmFsdWUgPSBnZXRlbnYobmFtZSk7DQogICAgKwlpZiAoIXZhbHVlKQ0KICAgICsJCXJldHVybiBO
VUxMOw0KICAgICsNCiAgICArCS8qDQogICAgKwkgKiBXZSBuZWVkIHRvIHJlbWVtYmVyIGFsbCBy
ZWZlcmVuY2VkIGVudmlyb25tZW50IHZhcmlhYmxlcy4NCiAgICArCSAqIFRoZXkgd2lsbCBiZSB3
cml0dGVuIG91dCB0byBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYuY21kDQogICAgKwkgKi8NCiAg
ICArCWVudl9hZGQobmFtZSwgdmFsdWUpOw0KICAgICsNCiAgICArCXJldHVybiB4c3RyZHVwKHZh
bHVlKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBlbnZfd3JpdGVfZGVwKEZJTEUgKmYsIGNv
bnN0IGNoYXIgKmF1dG9jb25maWdfbmFtZSkNCiAgICArew0KICAgICsJc3RydWN0IGVudiAqZSwg
KnRtcDsNCiAgICArDQogICAgKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgdG1wLCAmZW52
X2xpc3QsIG5vZGUpIHsNCiAgICArCQlmcHJpbnRmKGYsICJpZm5lcSBcIiQoJXMpXCIgXCIlc1wi
XG4iLCBlLT5uYW1lLCBlLT52YWx1ZSk7DQogICAgKwkJZnByaW50ZihmLCAiJXM6IEZPUkNFXG4i
LCBhdXRvY29uZmlnX25hbWUpOw0KICAgICsJCWZwcmludGYoZiwgImVuZGlmXG4iKTsNCiAgICAr
CQllbnZfZGVsKGUpOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBC
dWlsdC1pbiBmdW5jdGlvbnMNCiAgICArICovDQogICAgK3N0cnVjdCBmdW5jdGlvbiB7DQogICAg
Kwljb25zdCBjaGFyICpuYW1lOw0KICAgICsJdW5zaWduZWQgaW50IG1pbl9hcmdzOw0KICAgICsJ
dW5zaWduZWQgaW50IG1heF9hcmdzOw0KICAgICsJY2hhciAqKCpmdW5jKShpbnQgYXJnYywgY2hh
ciAqYXJndltdKTsNCiAgICArfTsNCiAgICArDQogICAgK3N0YXRpYyBjaGFyICpkb19lcnJvcl9p
ZihpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwlpZiAoIXN0cmNtcChhcmd2
WzBdLCAieSIpKQ0KICAgICsJCXBwZXJyb3IoIiVzIiwgYXJndlsxXSk7DQogICAgKw0KICAgICsJ
cmV0dXJuIE5VTEw7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBjaGFyICpkb19maWxlbmFt
ZShpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwlyZXR1cm4geHN0cmR1cChj
dXJyZW50X2ZpbGUtPm5hbWUpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgY2hhciAqZG9f
aW5mbyhpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwlwcmludGYoIiVzXG4i
LCBhcmd2WzBdKTsNCiAgICArDQogICAgKwlyZXR1cm4geHN0cmR1cCgiIik7DQogICAgK30NCiAg
ICArDQogICAgK3N0YXRpYyBjaGFyICpkb19saW5lbm8oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkN
CiAgICArew0KICAgICsJY2hhciBidWZbMTZdOw0KICAgICsNCiAgICArCXNwcmludGYoYnVmLCAi
JWQiLCB5eWxpbmVubyk7DQogICAgKw0KICAgICsJcmV0dXJuIHhzdHJkdXAoYnVmKTsNCiAgICAr
fQ0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKmRvX3NoZWxsKGludCBhcmdjLCBjaGFyICphcmd2
W10pDQogICAgK3sNCiAgICArCUZJTEUgKnA7DQogICAgKwljaGFyIGJ1ZlsyNTZdOw0KICAgICsJ
Y2hhciAqY21kOw0KICAgICsJc2l6ZV90IG5yZWFkOw0KICAgICsJaW50IGk7DQogICAgKw0KICAg
ICsJY21kID0gYXJndlswXTsNCiAgICArDQogICAgKwlwID0gcG9wZW4oY21kLCAiciIpOw0KICAg
ICsJaWYgKCFwKSB7DQogICAgKwkJcGVycm9yKGNtZCk7DQogICAgKwkJZXhpdCgxKTsNCiAgICAr
CX0NCiAgICArDQogICAgKwlucmVhZCA9IGZyZWFkKGJ1ZiwgMSwgc2l6ZW9mKGJ1ZiksIHApOw0K
ICAgICsJaWYgKG5yZWFkID09IHNpemVvZihidWYpKQ0KICAgICsJCW5yZWFkLS07DQogICAgKw0K
ICAgICsJLyogcmVtb3ZlIHRyYWlsaW5nIG5ldyBsaW5lcyAqLw0KICAgICsJd2hpbGUgKG5yZWFk
ID4gMCAmJiBidWZbbnJlYWQgLSAxXSA9PSAnXG4nKQ0KICAgICsJCW5yZWFkLS07DQogICAgKw0K
ICAgICsJYnVmW25yZWFkXSA9IDA7DQogICAgKw0KICAgICsJLyogcmVwbGFjZSBhIG5ldyBsaW5l
IHdpdGggYSBzcGFjZSAqLw0KICAgICsJZm9yIChpID0gMDsgaSA8IG5yZWFkOyBpKyspIHsNCiAg
ICArCQlpZiAoYnVmW2ldID09ICdcbicpDQogICAgKwkJCWJ1ZltpXSA9ICcgJzsNCiAgICArCX0N
CiAgICArDQogICAgKwlpZiAocGNsb3NlKHApID09IC0xKSB7DQogICAgKwkJcGVycm9yKGNtZCk7
DQogICAgKwkJZXhpdCgxKTsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4geHN0cmR1cChi
dWYpOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgY2hhciAqZG9fd2FybmluZ19pZihpbnQg
YXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwlpZiAoIXN0cmNtcChhcmd2WzBdLCAi
eSIpKQ0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLA0KICAgICsJCQljdXJy
ZW50X2ZpbGUtPm5hbWUsIHl5bGluZW5vLCBhcmd2WzFdKTsNCiAgICArDQogICAgKwlyZXR1cm4g
eHN0cmR1cCgiIik7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZnVu
Y3Rpb24gZnVuY3Rpb25fdGFibGVbXSA9IHsNCiAgICArCS8qIE5hbWUJCU1JTglNQVgJRnVuY3Rp
b24gKi8NCiAgICArCXsgImVycm9yLWlmIiwJMiwJMiwJZG9fZXJyb3JfaWYgfSwNCiAgICArCXsg
ImZpbGVuYW1lIiwJMCwJMCwJZG9fZmlsZW5hbWUgfSwNCiAgICArCXsgImluZm8iLAkxLAkxLAlk
b19pbmZvIH0sDQogICAgKwl7ICJsaW5lbm8iLAkwLAkwLAlkb19saW5lbm8gfSwNCiAgICArCXsg
InNoZWxsIiwJMSwJMSwJZG9fc2hlbGwgfSwNCiAgICArCXsgIndhcm5pbmctaWYiLAkyLAkyLAlk
b193YXJuaW5nX2lmIH0sDQogICAgK307DQogICAgKw0KICAgICsjZGVmaW5lIEZVTkNUSU9OX01B
WF9BUkdTCQkxNg0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKmZ1bmN0aW9uX2V4cGFuZChjb25z
dCBjaGFyICpuYW1lLCBpbnQgYXJnYywgY2hhciAqYXJndltdKQ0KICAgICt7DQogICAgKwljb25z
dCBzdHJ1Y3QgZnVuY3Rpb24gKmY7DQogICAgKwlpbnQgaTsNCiAgICArDQogICAgKwlmb3IgKGkg
PSAwOyBpIDwgQVJSQVlfU0laRShmdW5jdGlvbl90YWJsZSk7IGkrKykgew0KICAgICsJCWYgPSAm
ZnVuY3Rpb25fdGFibGVbaV07DQogICAgKwkJaWYgKHN0cmNtcChmLT5uYW1lLCBuYW1lKSkNCiAg
ICArCQkJY29udGludWU7DQogICAgKw0KICAgICsJCWlmIChhcmdjIDwgZi0+bWluX2FyZ3MpDQog
ICAgKwkJCXBwZXJyb3IoInRvbyBmZXcgZnVuY3Rpb24gYXJndW1lbnRzIHBhc3NlZCB0byAnJXMn
IiwNCiAgICArCQkJCW5hbWUpOw0KICAgICsNCiAgICArCQlpZiAoYXJnYyA+IGYtPm1heF9hcmdz
KQ0KICAgICsJCQlwcGVycm9yKCJ0b28gbWFueSBmdW5jdGlvbiBhcmd1bWVudHMgcGFzc2VkIHRv
ICclcyciLA0KICAgICsJCQkJbmFtZSk7DQogICAgKw0KICAgICsJCXJldHVybiBmLT5mdW5jKGFy
Z2MsIGFyZ3YpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiBOVUxMOw0KICAgICt9DQog
ICAgKw0KICAgICsvKg0KICAgICsgKiBWYXJpYWJsZXMgKGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rp
b25zKQ0KICAgICsgKi8NCiAgICArc3RhdGljIExJU1RfSEVBRCh2YXJpYWJsZV9saXN0KTsNCiAg
ICArDQogICAgK3N0cnVjdCB2YXJpYWJsZSB7DQogICAgKwljaGFyICpuYW1lOw0KICAgICsJY2hh
ciAqdmFsdWU7DQogICAgKwllbnVtIHZhcmlhYmxlX2ZsYXZvciBmbGF2b3I7DQogICAgKwlpbnQg
ZXhwX2NvdW50Ow0KICAgICsJc3RydWN0IGxpc3RfaGVhZCBub2RlOw0KICAgICt9Ow0KICAgICsN
CiAgICArc3RhdGljIHN0cnVjdCB2YXJpYWJsZSAqdmFyaWFibGVfbG9va3VwKGNvbnN0IGNoYXIg
Km5hbWUpDQogICAgK3sNCiAgICArCXN0cnVjdCB2YXJpYWJsZSAqdjsNCiAgICArDQogICAgKwls
aXN0X2Zvcl9lYWNoX2VudHJ5KHYsICZ2YXJpYWJsZV9saXN0LCBub2RlKSB7DQogICAgKwkJaWYg
KCFzdHJjbXAobmFtZSwgdi0+bmFtZSkpDQogICAgKwkJCXJldHVybiB2Ow0KICAgICsJfQ0KICAg
ICsNCiAgICArCXJldHVybiBOVUxMOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgY2hhciAq
dmFyaWFibGVfZXhwYW5kKGNvbnN0IGNoYXIgKm5hbWUsIGludCBhcmdjLCBjaGFyICphcmd2W10p
DQogICAgK3sNCiAgICArCXN0cnVjdCB2YXJpYWJsZSAqdjsNCiAgICArCWNoYXIgKnJlczsNCiAg
ICArDQogICAgKwl2ID0gdmFyaWFibGVfbG9va3VwKG5hbWUpOw0KICAgICsJaWYgKCF2KQ0KICAg
ICsJCXJldHVybiBOVUxMOw0KICAgICsNCiAgICArCWlmIChhcmdjID09IDAgJiYgdi0+ZXhwX2Nv
dW50KQ0KICAgICsJCXBwZXJyb3IoIlJlY3Vyc2l2ZSB2YXJpYWJsZSAnJXMnIHJlZmVyZW5jZXMg
aXRzZWxmIChldmVudHVhbGx5KSIsDQogICAgKwkJCW5hbWUpOw0KICAgICsNCiAgICArCWlmICh2
LT5leHBfY291bnQgPiAxMDAwKQ0KICAgICsJCXBwZXJyb3IoIlRvbyBkZWVwIHJlY3Vyc2l2ZSBl
eHBhbnNpb24iKTsNCiAgICArDQogICAgKwl2LT5leHBfY291bnQrKzsNCiAgICArDQogICAgKwlp
ZiAodi0+Zmxhdm9yID09IFZBUl9SRUNVUlNJVkUpDQogICAgKwkJcmVzID0gZXhwYW5kX3N0cmlu
Z193aXRoX2FyZ3Modi0+dmFsdWUsIGFyZ2MsIGFyZ3YpOw0KICAgICsJZWxzZQ0KICAgICsJCXJl
cyA9IHhzdHJkdXAodi0+dmFsdWUpOw0KICAgICsNCiAgICArCXYtPmV4cF9jb3VudC0tOw0KICAg
ICsNCiAgICArCXJldHVybiByZXM7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgdmFyaWFibGVf
YWRkKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlLA0KICAgICsJCSAgZW51bSB2
YXJpYWJsZV9mbGF2b3IgZmxhdm9yKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgdmFyaWFibGUgKnY7
DQogICAgKwljaGFyICpuZXdfdmFsdWU7DQogICAgKwlib29sIGFwcGVuZCA9IGZhbHNlOw0KICAg
ICsNCiAgICArCXYgPSB2YXJpYWJsZV9sb29rdXAobmFtZSk7DQogICAgKwlpZiAodikgew0KICAg
ICsJCS8qIEZvciBkZWZpbmVkIHZhcmlhYmxlcywgKz0gaW5oZXJpdHMgdGhlIGV4aXN0aW5nIGZs
YXZvciAqLw0KICAgICsJCWlmIChmbGF2b3IgPT0gVkFSX0FQUEVORCkgew0KICAgICsJCQlmbGF2
b3IgPSB2LT5mbGF2b3I7DQogICAgKwkJCWFwcGVuZCA9IHRydWU7DQogICAgKwkJfSBlbHNlIHsN
CiAgICArCQkJZnJlZSh2LT52YWx1ZSk7DQogICAgKwkJfQ0KICAgICsJfSBlbHNlIHsNCiAgICAr
CQkvKiBGb3IgdW5kZWZpbmVkIHZhcmlhYmxlcywgKz0gYXNzdW1lcyB0aGUgcmVjdXJzaXZlIGZs
YXZvciAqLw0KICAgICsJCWlmIChmbGF2b3IgPT0gVkFSX0FQUEVORCkNCiAgICArCQkJZmxhdm9y
ID0gVkFSX1JFQ1VSU0lWRTsNCiAgICArDQogICAgKwkJdiA9IHhtYWxsb2Moc2l6ZW9mKCp2KSk7
DQogICAgKwkJdi0+bmFtZSA9IHhzdHJkdXAobmFtZSk7DQogICAgKwkJdi0+ZXhwX2NvdW50ID0g
MDsNCiAgICArCQlsaXN0X2FkZF90YWlsKCZ2LT5ub2RlLCAmdmFyaWFibGVfbGlzdCk7DQogICAg
Kwl9DQogICAgKw0KICAgICsJdi0+Zmxhdm9yID0gZmxhdm9yOw0KICAgICsNCiAgICArCWlmIChm
bGF2b3IgPT0gVkFSX1NJTVBMRSkNCiAgICArCQluZXdfdmFsdWUgPSBleHBhbmRfc3RyaW5nKHZh
bHVlKTsNCiAgICArCWVsc2UNCiAgICArCQluZXdfdmFsdWUgPSB4c3RyZHVwKHZhbHVlKTsNCiAg
ICArDQogICAgKwlpZiAoYXBwZW5kKSB7DQogICAgKwkJdi0+dmFsdWUgPSB4cmVhbGxvYyh2LT52
YWx1ZSwNCiAgICArCQkJCSAgICBzdHJsZW4odi0+dmFsdWUpICsgc3RybGVuKG5ld192YWx1ZSkg
KyAyKTsNCiAgICArCQlzdHJjYXQodi0+dmFsdWUsICIgIik7DQogICAgKwkJc3RyY2F0KHYtPnZh
bHVlLCBuZXdfdmFsdWUpOw0KICAgICsJCWZyZWUobmV3X3ZhbHVlKTsNCiAgICArCX0gZWxzZSB7
DQogICAgKwkJdi0+dmFsdWUgPSBuZXdfdmFsdWU7DQogICAgKwl9DQogICAgK30NCiAgICArDQog
ICAgK3N0YXRpYyB2b2lkIHZhcmlhYmxlX2RlbChzdHJ1Y3QgdmFyaWFibGUgKnYpDQogICAgK3sN
CiAgICArCWxpc3RfZGVsKCZ2LT5ub2RlKTsNCiAgICArCWZyZWUodi0+bmFtZSk7DQogICAgKwlm
cmVlKHYtPnZhbHVlKTsNCiAgICArCWZyZWUodik7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQg
dmFyaWFibGVfYWxsX2RlbCh2b2lkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgdmFyaWFibGUgKnYs
ICp0bXA7DQogICAgKw0KICAgICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHYsIHRtcCwgJnZh
cmlhYmxlX2xpc3QsIG5vZGUpDQogICAgKwkJdmFyaWFibGVfZGVsKHYpOw0KICAgICt9DQogICAg
Kw0KICAgICsvKg0KICAgICsgKiBFdmFsdWF0ZSBhIGNsYXVzZSB3aXRoIGFyZ3VtZW50cy4gIGFy
Z2MvYXJndiBhcmUgYXJndW1lbnRzIGZyb20gdGhlIHVwcGVyDQogICAgKyAqIGZ1bmN0aW9uIGNh
bGwuDQogICAgKyAqDQogICAgKyAqIFJldHVybmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHdoZW4g
ZG9uZQ0KICAgICsgKi8NCiAgICArc3RhdGljIGNoYXIgKmV2YWxfY2xhdXNlKGNvbnN0IGNoYXIg
KnN0ciwgc2l6ZV90IGxlbiwgaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkNCiAgICArew0KICAgICsJ
Y2hhciAqdG1wLCAqbmFtZSwgKnJlcywgKmVuZHB0ciwgKnByZXYsICpwOw0KICAgICsJaW50IG5l
d19hcmdjID0gMDsNCiAgICArCWNoYXIgKm5ld19hcmd2W0ZVTkNUSU9OX01BWF9BUkdTXTsNCiAg
ICArCWludCBuZXN0ID0gMDsNCiAgICArCWludCBpOw0KICAgICsJdW5zaWduZWQgbG9uZyBuOw0K
ICAgICsNCiAgICArCXRtcCA9IHhzdHJuZHVwKHN0ciwgbGVuKTsNCiAgICArDQogICAgKwkvKg0K
ICAgICsJICogSWYgdmFyaWFibGUgbmFtZSBpcyAnMScsICcyJywgZXRjLiAgSXQgaXMgZ2VuZXJh
bGx5IGFuIGFyZ3VtZW50DQogICAgKwkgKiBmcm9tIGEgdXNlci1mdW5jdGlvbiBjYWxsIChpLmUu
IGxvY2FsLXNjb3BlIHZhcmlhYmxlKS4gIElmIG5vdA0KICAgICsJICogYXZhaWxhYmxlLCB0aGVu
IGxvb2stdXAgZ2xvYmFsLXNjb3BlIHZhcmlhYmxlcy4NCiAgICArCSAqLw0KICAgICsJbiA9IHN0
cnRvdWwodG1wLCAmZW5kcHRyLCAxMCk7DQogICAgKwlpZiAoISplbmRwdHIgJiYgbiA+IDAgJiYg
biA8PSBhcmdjKSB7DQogICAgKwkJcmVzID0geHN0cmR1cChhcmd2W24gLSAxXSk7DQogICAgKwkJ
Z290byBmcmVlX3RtcDsNCiAgICArCX0NCiAgICArDQogICAgKwlwcmV2ID0gcCA9IHRtcDsNCiAg
ICArDQogICAgKwkvKg0KICAgICsJICogU3BsaXQgaW50byB0b2tlbnMNCiAgICArCSAqIFRoZSBm
dW5jdGlvbiBuYW1lIGFuZCBhcmd1bWVudHMgYXJlIHNlcGFyYXRlZCBieSBhIGNvbW1hLg0KICAg
ICsJICogRm9yIGV4YW1wbGUsIGlmIHRoZSBmdW5jdGlvbiBjYWxsIGlzIGxpa2UgdGhpczoNCiAg
ICArCSAqICAgJChmb28sJCh4KSwkKHkpKQ0KICAgICsJICoNCiAgICArCSAqIFRoZSBpbnB1dCBz
dHJpbmcgZm9yIHRoaXMgaGVscGVyIHNob3VsZCBiZToNCiAgICArCSAqICAgZm9vLCQoeCksJCh5
KQ0KICAgICsJICoNCiAgICArCSAqIGFuZCBzcGxpdCBpbnRvOg0KICAgICsJICogICBuZXdfYXJn
dlswXSA9ICdmb28nDQogICAgKwkgKiAgIG5ld19hcmd2WzFdID0gJyQoeCknDQogICAgKwkgKiAg
IG5ld19hcmd2WzJdID0gJyQoeSknDQogICAgKwkgKi8NCiAgICArCXdoaWxlICgqcCkgew0KICAg
ICsJCWlmIChuZXN0ID09IDAgJiYgKnAgPT0gJywnKSB7DQogICAgKwkJCSpwID0gMDsNCiAgICAr
CQkJaWYgKG5ld19hcmdjID49IEZVTkNUSU9OX01BWF9BUkdTKQ0KICAgICsJCQkJcHBlcnJvcigi
dG9vIG1hbnkgZnVuY3Rpb24gYXJndW1lbnRzIik7DQogICAgKwkJCW5ld19hcmd2W25ld19hcmdj
KytdID0gcHJldjsNCiAgICArCQkJcHJldiA9IHAgKyAxOw0KICAgICsJCX0gZWxzZSBpZiAoKnAg
PT0gJygnKSB7DQogICAgKwkJCW5lc3QrKzsNCiAgICArCQl9IGVsc2UgaWYgKCpwID09ICcpJykg
ew0KICAgICsJCQluZXN0LS07DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlwKys7DQogICAgKwl9
DQogICAgKwluZXdfYXJndltuZXdfYXJnYysrXSA9IHByZXY7DQogICAgKw0KICAgICsJLyoNCiAg
ICArCSAqIFNoaWZ0IGFyZ3VtZW50cw0KICAgICsJICogbmV3X2FyZ3ZbMF0gcmVwcmVzZW50cyBh
IGZ1bmN0aW9uIG5hbWUgb3IgYSB2YXJpYWJsZSBuYW1lLiAgUHV0IGl0DQogICAgKwkgKiBpbnRv
ICduYW1lJywgdGhlbiBzaGlmdCB0aGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzLiAgVGhpcyBzaW1w
bGlmaWVzDQogICAgKwkgKiAnY29uc3QnIGhhbmRsaW5nLg0KICAgICsJICovDQogICAgKwluYW1l
ID0gZXhwYW5kX3N0cmluZ193aXRoX2FyZ3MobmV3X2FyZ3ZbMF0sIGFyZ2MsIGFyZ3YpOw0KICAg
ICsJbmV3X2FyZ2MtLTsNCiAgICArCWZvciAoaSA9IDA7IGkgPCBuZXdfYXJnYzsgaSsrKQ0KICAg
ICsJCW5ld19hcmd2W2ldID0gZXhwYW5kX3N0cmluZ193aXRoX2FyZ3MobmV3X2FyZ3ZbaSArIDFd
LA0KICAgICsJCQkJCQkgICAgICBhcmdjLCBhcmd2KTsNCiAgICArDQogICAgKwkvKiBTZWFyY2gg
Zm9yIHZhcmlhYmxlcyAqLw0KICAgICsJcmVzID0gdmFyaWFibGVfZXhwYW5kKG5hbWUsIG5ld19h
cmdjLCBuZXdfYXJndik7DQogICAgKwlpZiAocmVzKQ0KICAgICsJCWdvdG8gZnJlZTsNCiAgICAr
DQogICAgKwkvKiBMb29rIGZvciBidWlsdC1pbiBmdW5jdGlvbnMgKi8NCiAgICArCXJlcyA9IGZ1
bmN0aW9uX2V4cGFuZChuYW1lLCBuZXdfYXJnYywgbmV3X2FyZ3YpOw0KICAgICsJaWYgKHJlcykN
CiAgICArCQlnb3RvIGZyZWU7DQogICAgKw0KICAgICsJLyogTGFzdCwgdHJ5IGVudmlyb25tZW50
IHZhcmlhYmxlICovDQogICAgKwlpZiAobmV3X2FyZ2MgPT0gMCkgew0KICAgICsJCXJlcyA9IGVu
dl9leHBhbmQobmFtZSk7DQogICAgKwkJaWYgKHJlcykNCiAgICArCQkJZ290byBmcmVlOw0KICAg
ICsJfQ0KICAgICsNCiAgICArCXJlcyA9IHhzdHJkdXAoIiIpOw0KICAgICtmcmVlOg0KICAgICsJ
Zm9yIChpID0gMDsgaSA8IG5ld19hcmdjOyBpKyspDQogICAgKwkJZnJlZShuZXdfYXJndltpXSk7
DQogICAgKwlmcmVlKG5hbWUpOw0KICAgICtmcmVlX3RtcDoNCiAgICArCWZyZWUodG1wKTsNCiAg
ICArDQogICAgKwlyZXR1cm4gcmVzOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBF
eHBhbmQgYSBzdHJpbmcgdGhhdCBmb2xsb3dzICckJw0KICAgICsgKg0KICAgICsgKiBGb3IgZXhh
bXBsZSwgaWYgdGhlIGlucHV0IHN0cmluZyBpcw0KICAgICsgKiAgICAgKCQoRk9PKSQoJChCQVIp
KSkkKEJBWikNCiAgICArICogdGhpcyBoZWxwZXIgZXZhbHVhdGVzDQogICAgKyAqICAgICAkKCQo
Rk9PKSQoJChCQVIpKSkNCiAgICArICogYW5kIHJldHVybnMgYSBuZXcgc3RyaW5nIGNvbnRhaW5p
bmcgdGhlIGV4cGFuc2lvbiAobm90ZSB0aGF0IHRoZSBzdHJpbmcgaXMNCiAgICArICogcmVjdXJz
aXZlbHkgZXhwYW5kZWQpLCBhbHNvIGFkdmFuY2luZyAnc3RyJyB0byBwb2ludCB0byB0aGUgbmV4
dCBjaGFyYWN0ZXINCiAgICArICogYWZ0ZXIgdGhlIGNvcnJlc3BvbmRpbmcgY2xvc2luZyBwYXJl
bnRoZXNpcywgaW4gdGhpcyBjYXNlLCAqc3RyIHdpbGwgYmUNCiAgICArICogICAgICQoQkFSKQ0K
ICAgICsgKi8NCiAgICArc3RhdGljIGNoYXIgKmV4cGFuZF9kb2xsYXJfd2l0aF9hcmdzKGNvbnN0
IGNoYXIgKipzdHIsIGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAgK3sNCiAgICArCWNvbnN0
IGNoYXIgKnAgPSAqc3RyOw0KICAgICsJY29uc3QgY2hhciAqcTsNCiAgICArCWludCBuZXN0ID0g
MDsNCiAgICArDQogICAgKwkvKg0KICAgICsJICogSW4gS2NvbmZpZywgdmFyaWFibGUvZnVuY3Rp
b24gcmVmZXJlbmNlcyBhbHdheXMgc3RhcnQgd2l0aCAiJCgiLg0KICAgICsJICogTmVpdGhlciBz
aW5nbGUtbGV0dGVyIHZhcmlhYmxlcyBhcyBpbiAkQSBub3IgY3VybHkgYnJhY2VzIGFzIGluICR7
Q0N9DQogICAgKwkgKiBhcmUgc3VwcG9ydGVkLiAgJyQnIG5vdCBmb2xsb3dlZCBieSAnKCcgbG9z
ZXMgaXRzIHNwZWNpYWwgbWVhbmluZy4NCiAgICArCSAqLw0KICAgICsJaWYgKCpwICE9ICcoJykg
ew0KICAgICsJCSpzdHIgPSBwOw0KICAgICsJCXJldHVybiB4c3RyZHVwKCIkIik7DQogICAgKwl9
DQogICAgKw0KICAgICsJcCsrOw0KICAgICsJcSA9IHA7DQogICAgKwl3aGlsZSAoKnEpIHsNCiAg
ICArCQlpZiAoKnEgPT0gJygnKSB7DQogICAgKwkJCW5lc3QrKzsNCiAgICArCQl9IGVsc2UgaWYg
KCpxID09ICcpJykgew0KICAgICsJCQlpZiAobmVzdC0tID09IDApDQogICAgKwkJCQlicmVhazsN
CiAgICArCQl9DQogICAgKwkJcSsrOw0KICAgICsJfQ0KICAgICsNCiAgICArCWlmICghKnEpDQog
ICAgKwkJcHBlcnJvcigidW50ZXJtaW5hdGVkIHJlZmVyZW5jZSB0byAnJXMnOiBtaXNzaW5nICcp
JyIsIHApOw0KICAgICsNCiAgICArCS8qIEFkdmFuY2UgJ3N0cicgdG8gYWZ0ZXIgdGhlIGV4cGFu
ZGVkIGluaXRpYWwgcG9ydGlvbiBvZiB0aGUgc3RyaW5nICovDQogICAgKwkqc3RyID0gcSArIDE7
DQogICAgKw0KICAgICsJcmV0dXJuIGV2YWxfY2xhdXNlKHAsIHEgLSBwLCBhcmdjLCBhcmd2KTsN
CiAgICArfQ0KICAgICsNCiAgICArY2hhciAqZXhwYW5kX2RvbGxhcihjb25zdCBjaGFyICoqc3Ry
KQ0KICAgICt7DQogICAgKwlyZXR1cm4gZXhwYW5kX2RvbGxhcl93aXRoX2FyZ3Moc3RyLCAwLCBO
VUxMKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIGNoYXIgKl9fZXhwYW5kX3N0cmluZyhj
b25zdCBjaGFyICoqc3RyLCBib29sICgqaXNfZW5kKShjaGFyIGMpLA0KICAgICsJCQkgICAgIGlu
dCBhcmdjLCBjaGFyICphcmd2W10pDQogICAgK3sNCiAgICArCWNvbnN0IGNoYXIgKmluLCAqcDsN
CiAgICArCWNoYXIgKmV4cGFuc2lvbiwgKm91dDsNCiAgICArCXNpemVfdCBpbl9sZW4sIG91dF9s
ZW47DQogICAgKw0KICAgICsJb3V0ID0geG1hbGxvYygxKTsNCiAgICArCSpvdXQgPSAwOw0KICAg
ICsJb3V0X2xlbiA9IDE7DQogICAgKw0KICAgICsJcCA9IGluID0gKnN0cjsNCiAgICArDQogICAg
Kwl3aGlsZSAoMSkgew0KICAgICsJCWlmICgqcCA9PSAnJCcpIHsNCiAgICArCQkJaW5fbGVuID0g
cCAtIGluOw0KICAgICsJCQlwKys7DQogICAgKwkJCWV4cGFuc2lvbiA9IGV4cGFuZF9kb2xsYXJf
d2l0aF9hcmdzKCZwLCBhcmdjLCBhcmd2KTsNCiAgICArCQkJb3V0X2xlbiArPSBpbl9sZW4gKyBz
dHJsZW4oZXhwYW5zaW9uKTsNCiAgICArCQkJb3V0ID0geHJlYWxsb2Mob3V0LCBvdXRfbGVuKTsN
CiAgICArCQkJc3RybmNhdChvdXQsIGluLCBpbl9sZW4pOw0KICAgICsJCQlzdHJjYXQob3V0LCBl
eHBhbnNpb24pOw0KICAgICsJCQlmcmVlKGV4cGFuc2lvbik7DQogICAgKwkJCWluID0gcDsNCiAg
ICArCQkJY29udGludWU7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlpZiAoaXNfZW5kKCpwKSkN
CiAgICArCQkJYnJlYWs7DQogICAgKw0KICAgICsJCXArKzsNCiAgICArCX0NCiAgICArDQogICAg
Kwlpbl9sZW4gPSBwIC0gaW47DQogICAgKwlvdXRfbGVuICs9IGluX2xlbjsNCiAgICArCW91dCA9
IHhyZWFsbG9jKG91dCwgb3V0X2xlbik7DQogICAgKwlzdHJuY2F0KG91dCwgaW4sIGluX2xlbik7
DQogICAgKw0KICAgICsJLyogQWR2YW5jZSAnc3RyJyB0byB0aGUgZW5kIGNoYXJhY3RlciAqLw0K
ICAgICsJKnN0ciA9IHA7DQogICAgKw0KICAgICsJcmV0dXJuIG91dDsNCiAgICArfQ0KICAgICsN
CiAgICArc3RhdGljIGJvb2wgaXNfZW5kX29mX3N0cihjaGFyIGMpDQogICAgK3sNCiAgICArCXJl
dHVybiAhYzsNCiAgICArfQ0KICAgICsNCiAgICArLyoNCiAgICArICogRXhwYW5kIHZhcmlhYmxl
cyBhbmQgZnVuY3Rpb25zIGluIHRoZSBnaXZlbiBzdHJpbmcuICBVbmRlZmluZWQgdmFyaWFibGVz
DQogICAgKyAqIGV4cGFuZCB0byBhbiBlbXB0eSBzdHJpbmcuDQogICAgKyAqIFRoZSByZXR1cm5l
ZCBzdHJpbmcgbXVzdCBiZSBmcmVlZCB3aGVuIGRvbmUuDQogICAgKyAqLw0KICAgICtzdGF0aWMg
Y2hhciAqZXhwYW5kX3N0cmluZ193aXRoX2FyZ3MoY29uc3QgY2hhciAqaW4sIGludCBhcmdjLCBj
aGFyICphcmd2W10pDQogICAgK3sNCiAgICArCXJldHVybiBfX2V4cGFuZF9zdHJpbmcoJmluLCBp
c19lbmRfb2Zfc3RyLCBhcmdjLCBhcmd2KTsNCiAgICArfQ0KICAgICsNCiAgICArY2hhciAqZXhw
YW5kX3N0cmluZyhjb25zdCBjaGFyICppbikNCiAgICArew0KICAgICsJcmV0dXJuIGV4cGFuZF9z
dHJpbmdfd2l0aF9hcmdzKGluLCAwLCBOVUxMKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGlj
IGJvb2wgaXNfZW5kX29mX3Rva2VuKGNoYXIgYykNCiAgICArew0KICAgICsJcmV0dXJuICEoaXNh
bG51bShjKSB8fCBjID09ICdfJyB8fCBjID09ICctJyk7DQogICAgK30NCiAgICArDQogICAgKy8q
DQogICAgKyAqIEV4cGFuZCB2YXJpYWJsZXMgaW4gYSB0b2tlbi4gIFRoZSBwYXJzaW5nIHN0b3Bz
IHdoZW4gYSB0b2tlbiBzZXBhcmF0ZXINCiAgICArICogKGluIG1vc3QgY2FzZXMsIGl0IGlzIGEg
d2hpdGVzcGFjZSkgaXMgZW5jb3VudGVyZWQuICAnc3RyJyBpcyB1cGRhdGVkIHRvDQogICAgKyAq
IHBvaW50IHRvIHRoZSBuZXh0IGNoYXJhY3Rlci4NCiAgICArICoNCiAgICArICogVGhlIHJldHVy
bmVkIHN0cmluZyBtdXN0IGJlIGZyZWVkIHdoZW4gZG9uZS4NCiAgICArICovDQogICAgK2NoYXIg
KmV4cGFuZF9vbmVfdG9rZW4oY29uc3QgY2hhciAqKnN0cikNCiAgICArew0KICAgICsJcmV0dXJu
IF9fZXhwYW5kX3N0cmluZyhzdHIsIGlzX2VuZF9vZl90b2tlbiwgMCwgTlVMTCk7DQogICAgK30N
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Fjb25mLWNmZy5zaCBiL3N1cHBvcnQv
a2NvbmZpZy9xY29uZi1jZmcuc2gNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDc1NQ0KICAgIGluZGV4
IDAwMDAwMDAuLjAyY2NjMGENCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9r
Y29uZmlnL3Fjb25mLWNmZy5zaA0KICAgIEBAIC0wLDAgKzEsMzIgQEANCiAgICArIyEvYmluL3No
DQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArDQogICAgK1BL
Rz0iUXQ1Q29yZSBRdDVHdWkgUXQ1V2lkZ2V0cyINCiAgICArUEtHMj0iUXRDb3JlIFF0R3VpIg0K
ICAgICsNCiAgICAraWYgWyAteiAiJChjb21tYW5kIC12IHBrZy1jb25maWcpIiBdOyB0aGVuDQog
ICAgKwllY2hvID4mMiAiKiINCiAgICArCWVjaG8gPiYyICIqICdtYWtlIHhjb25maWcnIHJlcXVp
cmVzICdwa2ctY29uZmlnJy4gUGxlYXNlIGluc3RhbGwgaXQuIg0KICAgICsJZWNobyA+JjIgIioi
DQogICAgKwlleGl0IDENCiAgICArZmkNCiAgICArDQogICAgK2lmIHBrZy1jb25maWcgLS1leGlz
dHMgJFBLRzsgdGhlbg0KICAgICsJZWNobyBjZmxhZ3M9XCItc3RkPWMrKzExIC1mUElDICQocGtn
LWNvbmZpZyAtLWNmbGFncyBRdDVDb3JlIFF0NUd1aSBRdDVXaWRnZXRzKVwiDQogICAgKwllY2hv
IGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cpXCINCiAgICArCWVjaG8gbW9jPVwiJChw
a2ctY29uZmlnIC0tdmFyaWFibGU9aG9zdF9iaW5zIFF0NUNvcmUpL21vY1wiDQogICAgKwlleGl0
IDANCiAgICArZmkNCiAgICArDQogICAgK2lmIHBrZy1jb25maWcgLS1leGlzdHMgJFBLRzI7IHRo
ZW4NCiAgICArCWVjaG8gY2ZsYWdzPVwiJChwa2ctY29uZmlnIC0tY2ZsYWdzICRQS0cyKVwiDQog
ICAgKwllY2hvIGxpYnM9XCIkKHBrZy1jb25maWcgLS1saWJzICRQS0cyKVwiDQogICAgKwllY2hv
IG1vYz1cIiQocGtnLWNvbmZpZyAtLXZhcmlhYmxlPW1vY19sb2NhdGlvbiBRdENvcmUpXCINCiAg
ICArCWV4aXQgMA0KICAgICtmaQ0KICAgICsNCiAgICArZWNobyA+JjIgIioiDQogICAgK2VjaG8g
PiYyICIqIENvdWxkIG5vdCBmaW5kIFF0IHZpYSBwa2ctY29uZmlnLiINCiAgICArZWNobyA+JjIg
IiogUGxlYXNlIGluc3RhbGwgZWl0aGVyIFF0IDQuOCBvciA1LnguIGFuZCBtYWtlIHN1cmUgaXQn
cyBpbiBQS0dfQ09ORklHX1BBVEgiDQogICAgK2VjaG8gPiYyICIqIg0KICAgICtleGl0IDENCiAg
ICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Fjb25mLmNjIGIvc3VwcG9ydC9rY29uZmln
L3Fjb25mLmNjDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4w
MDIxYWE2DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy9xY29u
Zi5jYw0KICAgIEBAIC0wLDAgKzEsMTg5NiBAQA0KICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4g
WmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQogICAgKyAqIENvcHlyaWdodCAoQykgMjAx
NSBCb3JpcyBCYXJidWxvdnNraSA8YmJhcmJ1bG92c2tpQGdtYWlsLmNvbT4NCiAgICArICovDQog
ICAgKw0KICAgICsjaW5jbHVkZSA8cWdsb2JhbC5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgPFFN
YWluV2luZG93Pg0KICAgICsjaW5jbHVkZSA8UUxpc3Q+DQogICAgKyNpbmNsdWRlIDxxdGV4dGJy
b3dzZXIuaD4NCiAgICArI2luY2x1ZGUgPFFBY3Rpb24+DQogICAgKyNpbmNsdWRlIDxRRmlsZURp
YWxvZz4NCiAgICArI2luY2x1ZGUgPFFNZW51Pg0KICAgICsNCiAgICArI2luY2x1ZGUgPHFhcHBs
aWNhdGlvbi5oPg0KICAgICsjaW5jbHVkZSA8cWRlc2t0b3B3aWRnZXQuaD4NCiAgICArI2luY2x1
ZGUgPHF0b29sYmFyLmg+DQogICAgKyNpbmNsdWRlIDxxbGF5b3V0Lmg+DQogICAgKyNpbmNsdWRl
IDxxc3BsaXR0ZXIuaD4NCiAgICArI2luY2x1ZGUgPHFsaW5lZWRpdC5oPg0KICAgICsjaW5jbHVk
ZSA8cWxhYmVsLmg+DQogICAgKyNpbmNsdWRlIDxxcHVzaGJ1dHRvbi5oPg0KICAgICsjaW5jbHVk
ZSA8cW1lbnViYXIuaD4NCiAgICArI2luY2x1ZGUgPHFtZXNzYWdlYm94Lmg+DQogICAgKyNpbmNs
dWRlIDxxcmVnZXhwLmg+DQogICAgKyNpbmNsdWRlIDxxZXZlbnQuaD4NCiAgICArDQogICAgKyNp
bmNsdWRlIDxzdGRsaWIuaD4NCiAgICArDQogICAgKyNpbmNsdWRlICJsa2MuaCINCiAgICArI2lu
Y2x1ZGUgInFjb25mLmgiDQogICAgKw0KICAgICsjaW5jbHVkZSAicWNvbmYubW9jIg0KICAgICsj
aW5jbHVkZSAiaW1hZ2VzLmgiDQogICAgKw0KICAgICsNCiAgICArc3RhdGljIFFBcHBsaWNhdGlv
biAqY29uZmlnQXBwOw0KICAgICtzdGF0aWMgQ29uZmlnU2V0dGluZ3MgKmNvbmZpZ1NldHRpbmdz
Ow0KICAgICsNCiAgICArUUFjdGlvbiAqQ29uZmlnTWFpbldpbmRvdzo6c2F2ZUFjdGlvbjsNCiAg
ICArDQogICAgK3N0YXRpYyBpbmxpbmUgUVN0cmluZyBxZ2V0dGV4dChjb25zdCBjaGFyKiBzdHIp
DQogICAgK3sNCiAgICArCXJldHVybiBRU3RyaW5nOjpmcm9tTG9jYWw4Qml0KHN0cik7DQogICAg
K30NCiAgICArDQogICAgK0NvbmZpZ1NldHRpbmdzOjpDb25maWdTZXR0aW5ncygpDQogICAgKwk6
IFFTZXR0aW5ncygidW5pa3JhZnQub3JnIiwgInFjb25mIikNCiAgICArew0KICAgICt9DQogICAg
Kw0KICAgICsvKioNCiAgICArICogUmVhZHMgYSBsaXN0IG9mIGludGVnZXIgdmFsdWVzIGZyb20g
dGhlIGFwcGxpY2F0aW9uIHNldHRpbmdzLg0KICAgICsgKi8NCiAgICArUUxpc3Q8aW50PiBDb25m
aWdTZXR0aW5nczo6cmVhZFNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgYm9vbCAqb2spDQogICAg
K3sNCiAgICArCVFMaXN0PGludD4gcmVzdWx0Ow0KICAgICsNCiAgICArCWlmIChjb250YWlucyhr
ZXkpKQ0KICAgICsJew0KICAgICsJCVFTdHJpbmdMaXN0IGVudHJ5TGlzdCA9IHZhbHVlKGtleSku
dG9TdHJpbmdMaXN0KCk7DQogICAgKwkJUVN0cmluZ0xpc3Q6Okl0ZXJhdG9yIGl0Ow0KICAgICsN
CiAgICArCQlmb3IgKGl0ID0gZW50cnlMaXN0LmJlZ2luKCk7IGl0ICE9IGVudHJ5TGlzdC5lbmQo
KTsgKytpdCkNCiAgICArCQkJcmVzdWx0LnB1c2hfYmFjaygoKml0KS50b0ludCgpKTsNCiAgICAr
DQogICAgKwkJKm9rID0gdHJ1ZTsNCiAgICArCX0NCiAgICArCWVsc2UNCiAgICArCQkqb2sgPSBm
YWxzZTsNCiAgICArDQogICAgKwlyZXR1cm4gcmVzdWx0Ow0KICAgICt9DQogICAgKw0KICAgICsv
KioNCiAgICArICogV3JpdGVzIGEgbGlzdCBvZiBpbnRlZ2VyIHZhbHVlcyB0byB0aGUgYXBwbGlj
YXRpb24gc2V0dGluZ3MuDQogICAgKyAqLw0KICAgICtib29sIENvbmZpZ1NldHRpbmdzOjp3cml0
ZVNpemVzKGNvbnN0IFFTdHJpbmcmIGtleSwgY29uc3QgUUxpc3Q8aW50PiYgdmFsdWUpDQogICAg
K3sNCiAgICArCVFTdHJpbmdMaXN0IHN0cmluZ0xpc3Q7DQogICAgKwlRTGlzdDxpbnQ+OjpDb25z
dEl0ZXJhdG9yIGl0Ow0KICAgICsNCiAgICArCWZvciAoaXQgPSB2YWx1ZS5iZWdpbigpOyBpdCAh
PSB2YWx1ZS5lbmQoKTsgKytpdCkNCiAgICArCQlzdHJpbmdMaXN0LnB1c2hfYmFjayhRU3RyaW5n
OjpudW1iZXIoKml0KSk7DQogICAgKwlzZXRWYWx1ZShrZXksIHN0cmluZ0xpc3QpOw0KICAgICsN
CiAgICArCXJldHVybiB0cnVlOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyoNCiAgICAr
ICogc2V0IHRoZSBuZXcgZGF0YQ0KICAgICsgKiBUT0RPIGNoZWNrIHRoZSB2YWx1ZQ0KICAgICsg
Ki8NCiAgICArdm9pZCBDb25maWdJdGVtOjpva1JlbmFtZShpbnQgY29sKQ0KICAgICt7DQogICAg
K30NCiAgICArDQogICAgKy8qDQogICAgKyAqIHVwZGF0ZSB0aGUgZGlzcGxheWVkIG9mIGEgbWVu
dSBlbnRyeQ0KICAgICsgKi8NCiAgICArdm9pZCBDb25maWdJdGVtOjp1cGRhdGVNZW51KHZvaWQp
DQogICAgK3sNCiAgICArCUNvbmZpZ0xpc3QqIGxpc3Q7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sKiBz
eW07DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlRU3RyaW5nIHByb21wdDsN
CiAgICArCWludCB0eXBlOw0KICAgICsJdHJpc3RhdGUgZXhwcjsNCiAgICArDQogICAgKwlsaXN0
ID0gbGlzdFZpZXcoKTsNCiAgICArCWlmIChnb1BhcmVudCkgew0KICAgICsJCXNldFBpeG1hcChw
cm9tcHRDb2xJZHgsIGxpc3QtPm1lbnVCYWNrUGl4KTsNCiAgICArCQlwcm9tcHQgPSAiLi4iOw0K
ICAgICsJCWdvdG8gc2V0X3Byb21wdDsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW0gPSBtZW51
LT5zeW07DQogICAgKwlwcm9wID0gbWVudS0+cHJvbXB0Ow0KICAgICsJcHJvbXB0ID0gcWdldHRl
eHQobWVudV9nZXRfcHJvbXB0KG1lbnUpKTsNCiAgICArDQogICAgKwlpZiAocHJvcCkgc3dpdGNo
IChwcm9wLT50eXBlKSB7DQogICAgKwljYXNlIFBfTUVOVToNCiAgICArCQlpZiAobGlzdC0+bW9k
ZSA9PSBzaW5nbGVNb2RlIHx8IGxpc3QtPm1vZGUgPT0gc3ltYm9sTW9kZSkgew0KICAgICsJCQkv
KiBhIG1lbnVjb25maWcgZW50cnkgaXMgZGlzcGxheWVkIGRpZmZlcmVudGx5DQogICAgKwkJCSAq
IGRlcGVuZGluZyB3aGV0aGVyIGl0J3MgYXQgdGhlIHZpZXcgcm9vdCBvciBhIGNoaWxkLg0KICAg
ICsJCQkgKi8NCiAgICArCQkJaWYgKHN5bSAmJiBsaXN0LT5yb290RW50cnkgPT0gbWVudSkNCiAg
ICArCQkJCWJyZWFrOw0KICAgICsJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBsaXN0LT5tZW51
UGl4KTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlpZiAoc3ltKQ0KICAgICsJCQkJYnJlYWs7
DQogICAgKwkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIFFJY29uKCkpOw0KICAgICsJCX0NCiAg
ICArCQlnb3RvIHNldF9wcm9tcHQ7DQogICAgKwljYXNlIFBfQ09NTUVOVDoNCiAgICArCQlzZXRQ
aXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsNCiAgICArCQlnb3RvIHNldF9wcm9tcHQ7DQog
ICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArCWlmICghc3ltKQ0KICAgICsJ
CWdvdG8gc2V0X3Byb21wdDsNCiAgICArDQogICAgKwlzZXRUZXh0KG5hbWVDb2xJZHgsIFFTdHJp
bmc6OmZyb21Mb2NhbDhCaXQoc3ltLT5uYW1lKSk7DQogICAgKw0KICAgICsJdHlwZSA9IHN5bV9n
ZXRfdHlwZShzeW0pOw0KICAgICsJc3dpdGNoICh0eXBlKSB7DQogICAgKwljYXNlIFNfQk9PTEVB
TjoNCiAgICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQljaGFyIGNoOw0KICAgICsNCiAgICAr
CQlpZiAoIXN5bV9pc19jaGFuZ2FibGUoc3ltKSAmJiBsaXN0LT5vcHRNb2RlID09IG5vcm1hbE9w
dCkgew0KICAgICsJCQlzZXRQaXhtYXAocHJvbXB0Q29sSWR4LCBRSWNvbigpKTsNCiAgICArCQkJ
c2V0VGV4dChub0NvbElkeCwgUVN0cmluZzo6bnVsbCk7DQogICAgKwkJCXNldFRleHQobW9kQ29s
SWR4LCBRU3RyaW5nOjpudWxsKTsNCiAgICArCQkJc2V0VGV4dCh5ZXNDb2xJZHgsIFFTdHJpbmc6
Om51bGwpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJZXhwciA9IHN5bV9nZXRf
dHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArCQlzd2l0Y2ggKGV4cHIpIHsNCiAgICArCQljYXNl
IHllczoNCiAgICArCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB0eXBlID09IFNf
Qk9PTEVBTikNCiAgICArCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPmNob2ljZVll
c1BpeCk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxp
c3QtPnN5bWJvbFllc1BpeCk7DQogICAgKwkJCXNldFRleHQoeWVzQ29sSWR4LCAiWSIpOw0KICAg
ICsJCQljaCA9ICdZJzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBtb2Q6DQogICAgKwkJ
CXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxpc3QtPnN5bWJvbE1vZFBpeCk7DQogICAgKwkJCXNl
dFRleHQobW9kQ29sSWR4LCAiTSIpOw0KICAgICsJCQljaCA9ICdNJzsNCiAgICArCQkJYnJlYWs7
DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAm
JiB0eXBlID09IFNfQk9PTEVBTikNCiAgICArCQkJCXNldFBpeG1hcChwcm9tcHRDb2xJZHgsIGxp
c3QtPmNob2ljZU5vUGl4KTsNCiAgICArCQkJZWxzZQ0KICAgICsJCQkJc2V0UGl4bWFwKHByb21w
dENvbElkeCwgbGlzdC0+c3ltYm9sTm9QaXgpOw0KICAgICsJCQlzZXRUZXh0KG5vQ29sSWR4LCAi
TiIpOw0KICAgICsJCQljaCA9ICdOJzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJ
CWlmIChleHByICE9IG5vKQ0KICAgICsJCQlzZXRUZXh0KG5vQ29sSWR4LCBzeW1fdHJpc3RhdGVf
d2l0aGluX3JhbmdlKHN5bSwgbm8pID8gIl8iIDogMCk7DQogICAgKwkJaWYgKGV4cHIgIT0gbW9k
KQ0KICAgICsJCQlzZXRUZXh0KG1vZENvbElkeCwgc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShz
eW0sIG1vZCkgPyAiXyIgOiAwKTsNCiAgICArCQlpZiAoZXhwciAhPSB5ZXMpDQogICAgKwkJCXNl
dFRleHQoeWVzQ29sSWR4LCBzeW1fdHJpc3RhdGVfd2l0aGluX3JhbmdlKHN5bSwgeWVzKSA/ICJf
IiA6IDApOw0KICAgICsNCiAgICArCQlzZXRUZXh0KGRhdGFDb2xJZHgsIFFDaGFyKGNoKSk7DQog
ICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJY2FzZSBTX0hFWDoNCiAgICAr
CWNhc2UgU19TVFJJTkc6DQogICAgKwkJY29uc3QgY2hhciogZGF0YTsNCiAgICArDQogICAgKwkJ
ZGF0YSA9IHN5bV9nZXRfc3RyaW5nX3ZhbHVlKHN5bSk7DQogICAgKw0KICAgICsJCXNldFRleHQo
ZGF0YUNvbElkeCwgZGF0YSk7DQogICAgKwkJaWYgKHR5cGUgPT0gU19TVFJJTkcpDQogICAgKwkJ
CXByb21wdCA9IFFTdHJpbmcoIiUxOiAlMiIpLmFyZyhwcm9tcHQpLmFyZyhkYXRhKTsNCiAgICAr
CQllbHNlDQogICAgKwkJCXByb21wdCA9IFFTdHJpbmcoIiglMikgJTEiKS5hcmcocHJvbXB0KS5h
cmcoZGF0YSk7DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgKwlpZiAoIXN5bV9oYXNfdmFs
dWUoc3ltKSAmJiB2aXNpYmxlKQ0KICAgICsJCXByb21wdCArPSAiIChORVcpIjsNCiAgICArc2V0
X3Byb21wdDoNCiAgICArCXNldFRleHQocHJvbXB0Q29sSWR4LCBwcm9tcHQpOw0KICAgICt9DQog
ICAgKw0KICAgICt2b2lkIENvbmZpZ0l0ZW06OnRlc3RVcGRhdGVNZW51KGJvb2wgdikNCiAgICAr
ew0KICAgICsJQ29uZmlnSXRlbSogaTsNCiAgICArDQogICAgKwl2aXNpYmxlID0gdjsNCiAgICAr
CWlmICghbWVudSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJc3ltX2NhbGNfdmFsdWUo
bWVudS0+c3ltKTsNCiAgICArCWlmIChtZW51LT5mbGFncyAmIE1FTlVfQ0hBTkdFRCkgew0KICAg
ICsJCS8qIHRoZSBtZW51IGVudHJ5IGNoYW5nZWQsIHNvIHVwZGF0ZSBhbGwgbGlzdCBpdGVtcyAq
Lw0KICAgICsJCW1lbnUtPmZsYWdzICY9IH5NRU5VX0NIQU5HRUQ7DQogICAgKwkJZm9yIChpID0g
KENvbmZpZ0l0ZW0qKW1lbnUtPmRhdGE7IGk7IGkgPSBpLT5uZXh0SXRlbSkNCiAgICArCQkJaS0+
dXBkYXRlTWVudSgpOw0KICAgICsJfSBlbHNlIGlmIChsaXN0VmlldygpLT51cGRhdGVBbGwpDQog
ICAgKwkJdXBkYXRlTWVudSgpOw0KICAgICt9DQogICAgKw0KICAgICsNCiAgICArLyoNCiAgICAr
ICogY29uc3RydWN0IGEgbWVudSBlbnRyeQ0KICAgICsgKi8NCiAgICArdm9pZCBDb25maWdJdGVt
Ojppbml0KHZvaWQpDQogICAgK3sNCiAgICArCWlmIChtZW51KSB7DQogICAgKwkJQ29uZmlnTGlz
dCogbGlzdCA9IGxpc3RWaWV3KCk7DQogICAgKwkJbmV4dEl0ZW0gPSAoQ29uZmlnSXRlbSopbWVu
dS0+ZGF0YTsNCiAgICArCQltZW51LT5kYXRhID0gdGhpczsNCiAgICArDQogICAgKwkJaWYgKGxp
c3QtPm1vZGUgIT0gZnVsbE1vZGUpDQogICAgKwkJCXNldEV4cGFuZGVkKHRydWUpOw0KICAgICsJ
CXN5bV9jYWxjX3ZhbHVlKG1lbnUtPnN5bSk7DQogICAgKwl9DQogICAgKwl1cGRhdGVNZW51KCk7
DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIGRlc3RydWN0IGEgbWVudSBlbnRyeQ0K
ICAgICsgKi8NCiAgICArQ29uZmlnSXRlbTo6fkNvbmZpZ0l0ZW0odm9pZCkNCiAgICArew0KICAg
ICsJaWYgKG1lbnUpIHsNCiAgICArCQlDb25maWdJdGVtKiogaXAgPSAoQ29uZmlnSXRlbSoqKSZt
ZW51LT5kYXRhOw0KICAgICsJCWZvciAoOyAqaXA7IGlwID0gJigqaXApLT5uZXh0SXRlbSkgew0K
ICAgICsJCQlpZiAoKmlwID09IHRoaXMpIHsNCiAgICArCQkJCSppcCA9IG5leHRJdGVtOw0KICAg
ICsJCQkJYnJlYWs7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAgK30NCiAgICAr
DQogICAgK0NvbmZpZ0xpbmVFZGl0OjpDb25maWdMaW5lRWRpdChDb25maWdWaWV3KiBwYXJlbnQp
DQogICAgKwk6IFBhcmVudChwYXJlbnQpDQogICAgK3sNCiAgICArCWNvbm5lY3QodGhpcywgU0lH
TkFMKGVkaXRpbmdGaW5pc2hlZCgpKSwgU0xPVChoaWRlKCkpKTsNCiAgICArfQ0KICAgICsNCiAg
ICArdm9pZCBDb25maWdMaW5lRWRpdDo6c2hvdyhDb25maWdJdGVtKiBpKQ0KICAgICt7DQogICAg
KwlpdGVtID0gaTsNCiAgICArCWlmIChzeW1fZ2V0X3N0cmluZ192YWx1ZShpdGVtLT5tZW51LT5z
eW0pKQ0KICAgICsJCXNldFRleHQoUVN0cmluZzo6ZnJvbUxvY2FsOEJpdChzeW1fZ2V0X3N0cmlu
Z192YWx1ZShpdGVtLT5tZW51LT5zeW0pKSk7DQogICAgKwllbHNlDQogICAgKwkJc2V0VGV4dChR
U3RyaW5nOjpudWxsKTsNCiAgICArCVBhcmVudDo6c2hvdygpOw0KICAgICsJc2V0Rm9jdXMoKTsN
CiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaW5lRWRpdDo6a2V5UHJlc3NFdmVudChR
S2V5RXZlbnQqIGUpDQogICAgK3sNCiAgICArCXN3aXRjaCAoZS0+a2V5KCkpIHsNCiAgICArCWNh
c2UgUXQ6OktleV9Fc2NhcGU6DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFF0OjpLZXlfUmV0
dXJuOg0KICAgICsJY2FzZSBRdDo6S2V5X0VudGVyOg0KICAgICsJCXN5bV9zZXRfc3RyaW5nX3Zh
bHVlKGl0ZW0tPm1lbnUtPnN5bSwgdGV4dCgpLnRvTGF0aW4xKCkpOw0KICAgICsJCXBhcmVudCgp
LT51cGRhdGVMaXN0KGl0ZW0pOw0KICAgICsJCWJyZWFrOw0KICAgICsJZGVmYXVsdDoNCiAgICAr
CQlQYXJlbnQ6OmtleVByZXNzRXZlbnQoZSk7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAg
ICsJZS0+YWNjZXB0KCk7DQogICAgKwlwYXJlbnQoKS0+bGlzdC0+c2V0Rm9jdXMoKTsNCiAgICAr
CWhpZGUoKTsNCiAgICArfQ0KICAgICsNCiAgICArQ29uZmlnTGlzdDo6Q29uZmlnTGlzdChDb25m
aWdWaWV3KiBwLCBjb25zdCBjaGFyICpuYW1lKQ0KICAgICsJOiBQYXJlbnQocCksDQogICAgKwkg
IHVwZGF0ZUFsbChmYWxzZSksDQogICAgKwkgIHN5bWJvbFllc1BpeCh4cG1fc3ltYm9sX3llcyks
IHN5bWJvbE1vZFBpeCh4cG1fc3ltYm9sX21vZCksIHN5bWJvbE5vUGl4KHhwbV9zeW1ib2xfbm8p
LA0KICAgICsJICBjaG9pY2VZZXNQaXgoeHBtX2Nob2ljZV95ZXMpLCBjaG9pY2VOb1BpeCh4cG1f
Y2hvaWNlX25vKSwNCiAgICArCSAgbWVudVBpeCh4cG1fbWVudSksIG1lbnVJbnZQaXgoeHBtX21l
bnVfaW52KSwgbWVudUJhY2tQaXgoeHBtX21lbnViYWNrKSwgdm9pZFBpeCh4cG1fdm9pZCksDQog
ICAgKwkgIHNob3dOYW1lKGZhbHNlKSwgc2hvd1JhbmdlKGZhbHNlKSwgc2hvd0RhdGEoZmFsc2Up
LCBtb2RlKHNpbmdsZU1vZGUpLCBvcHRNb2RlKG5vcm1hbE9wdCksDQogICAgKwkgIHJvb3RFbnRy
eSgwKSwgaGVhZGVyUG9wdXAoMCkNCiAgICArew0KICAgICsJaW50IGk7DQogICAgKw0KICAgICsJ
c2V0T2JqZWN0TmFtZShuYW1lKTsNCiAgICArCXNldFNvcnRpbmdFbmFibGVkKGZhbHNlKTsNCiAg
ICArCXNldFJvb3RJc0RlY29yYXRlZCh0cnVlKTsNCiAgICArDQogICAgKwlzZXRWZXJ0aWNhbFNj
cm9sbE1vZGUoU2Nyb2xsUGVyUGl4ZWwpOw0KICAgICsJc2V0SG9yaXpvbnRhbFNjcm9sbE1vZGUo
U2Nyb2xsUGVyUGl4ZWwpOw0KICAgICsNCiAgICArCXNldEhlYWRlckxhYmVscyhRU3RyaW5nTGlz
dCgpIDw8ICJPcHRpb24iIDw8ICJOYW1lIiA8PCAiTiIgPDwgIk0iIDw8ICJZIiA8PCAiVmFsdWUi
KTsNCiAgICArDQogICAgKwljb25uZWN0KHRoaXMsIFNJR05BTChpdGVtU2VsZWN0aW9uQ2hhbmdl
ZCh2b2lkKSksDQogICAgKwkJU0xPVCh1cGRhdGVTZWxlY3Rpb24odm9pZCkpKTsNCiAgICArDQog
ICAgKwlpZiAobmFtZSkgew0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5iZWdpbkdyb3VwKG5hbWUp
Ow0KICAgICsJCXNob3dOYW1lID0gY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd05hbWUiLCBm
YWxzZSkudG9Cb29sKCk7DQogICAgKwkJc2hvd1JhbmdlID0gY29uZmlnU2V0dGluZ3MtPnZhbHVl
KCIvc2hvd1JhbmdlIiwgZmFsc2UpLnRvQm9vbCgpOw0KICAgICsJCXNob3dEYXRhID0gY29uZmln
U2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RhdGEiLCBmYWxzZSkudG9Cb29sKCk7DQogICAgKwkJb3B0
TW9kZSA9IChlbnVtIG9wdGlvbk1vZGUpY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvb3B0aW9uTW9k
ZSIsIDApLnRvSW50KCk7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmVuZEdyb3VwKCk7DQogICAg
KwkJY29ubmVjdChjb25maWdBcHAsIFNJR05BTChhYm91dFRvUXVpdCgpKSwgU0xPVChzYXZlU2V0
dGluZ3MoKSkpOw0KICAgICsJfQ0KICAgICsNCiAgICArCWFkZENvbHVtbihwcm9tcHRDb2xJZHgp
Ow0KICAgICsNCiAgICArCXJlaW5pdCgpOw0KICAgICt9DQogICAgKw0KICAgICtib29sIENvbmZp
Z0xpc3Q6Om1lbnVTa2lwKHN0cnVjdCBtZW51ICptZW51KQ0KICAgICt7DQogICAgKwlpZiAob3B0
TW9kZSA9PSBub3JtYWxPcHQgJiYgbWVudV9pc192aXNpYmxlKG1lbnUpKQ0KICAgICsJCXJldHVy
biBmYWxzZTsNCiAgICArCWlmIChvcHRNb2RlID09IHByb21wdE9wdCAmJiBtZW51X2hhc19wcm9t
cHQobWVudSkpDQogICAgKwkJcmV0dXJuIGZhbHNlOw0KICAgICsJaWYgKG9wdE1vZGUgPT0gYWxs
T3B0KQ0KICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArCXJldHVybiB0cnVlOw0KICAgICt9DQog
ICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OnJlaW5pdCh2b2lkKQ0KICAgICt7DQogICAgKwly
ZW1vdmVDb2x1bW4oZGF0YUNvbElkeCk7DQogICAgKwlyZW1vdmVDb2x1bW4oeWVzQ29sSWR4KTsN
CiAgICArCXJlbW92ZUNvbHVtbihtb2RDb2xJZHgpOw0KICAgICsJcmVtb3ZlQ29sdW1uKG5vQ29s
SWR4KTsNCiAgICArCXJlbW92ZUNvbHVtbihuYW1lQ29sSWR4KTsNCiAgICArDQogICAgKwlpZiAo
c2hvd05hbWUpDQogICAgKwkJYWRkQ29sdW1uKG5hbWVDb2xJZHgpOw0KICAgICsJaWYgKHNob3dS
YW5nZSkgew0KICAgICsJCWFkZENvbHVtbihub0NvbElkeCk7DQogICAgKwkJYWRkQ29sdW1uKG1v
ZENvbElkeCk7DQogICAgKwkJYWRkQ29sdW1uKHllc0NvbElkeCk7DQogICAgKwl9DQogICAgKwlp
ZiAoc2hvd0RhdGEpDQogICAgKwkJYWRkQ29sdW1uKGRhdGFDb2xJZHgpOw0KICAgICsNCiAgICAr
CXVwZGF0ZUxpc3RBbGwoKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaXN0Ojpz
YXZlU2V0dGluZ3Modm9pZCkNCiAgICArew0KICAgICsJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0
eSgpKSB7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAob2JqZWN0TmFtZSgpKTsN
CiAgICArCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93TmFtZSIsIHNob3dOYW1lKTsN
CiAgICArCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9zaG93UmFuZ2UiLCBzaG93UmFuZ2Up
Ow0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dEYXRhIiwgc2hvd0RhdGEp
Ow0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL29wdGlvbk1vZGUiLCAoaW50KW9w
dE1vZGUpOw0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgICsJfQ0KICAg
ICt9DQogICAgKw0KICAgICtDb25maWdJdGVtKiBDb25maWdMaXN0OjpmaW5kQ29uZmlnSXRlbShz
dHJ1Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJQ29uZmlnSXRlbSogaXRlbSA9IChDb25m
aWdJdGVtKiltZW51LT5kYXRhOw0KICAgICsNCiAgICArCWZvciAoOyBpdGVtOyBpdGVtID0gaXRl
bS0+bmV4dEl0ZW0pIHsNCiAgICArCQlpZiAodGhpcyA9PSBpdGVtLT5saXN0VmlldygpKQ0KICAg
ICsJCQlicmVhazsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXR1cm4gaXRlbTsNCiAgICArfQ0K
ICAgICsNCiAgICArdm9pZCBDb25maWdMaXN0Ojp1cGRhdGVTZWxlY3Rpb24odm9pZCkNCiAgICAr
ew0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAgKwllbnVtIHByb3BfdHlwZSB0eXBlOw0K
ICAgICsNCiAgICArCWlmIChzZWxlY3RlZEl0ZW1zKCkuY291bnQoKSA9PSAwKQ0KICAgICsJCXJl
dHVybjsNCiAgICArDQogICAgKwlDb25maWdJdGVtKiBpdGVtID0gKENvbmZpZ0l0ZW0qKXNlbGVj
dGVkSXRlbXMoKS5maXJzdCgpOw0KICAgICsJaWYgKCFpdGVtKQ0KICAgICsJCXJldHVybjsNCiAg
ICArDQogICAgKwltZW51ID0gaXRlbS0+bWVudTsNCiAgICArCWVtaXQgbWVudUNoYW5nZWQobWVu
dSk7DQogICAgKwlpZiAoIW1lbnUpDQogICAgKwkJcmV0dXJuOw0KICAgICsJdHlwZSA9IG1lbnUt
PnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCWlmIChtb2Rl
ID09IG1lbnVNb2RlICYmIHR5cGUgPT0gUF9NRU5VKQ0KICAgICsJCWVtaXQgbWVudVNlbGVjdGVk
KG1lbnUpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZUxpc3Qo
Q29uZmlnSXRlbSogaXRlbSkNCiAgICArew0KICAgICsJQ29uZmlnSXRlbSogbGFzdCA9IDA7DQog
ICAgKw0KICAgICsJaWYgKCFyb290RW50cnkpIHsNCiAgICArCQlpZiAobW9kZSAhPSBsaXN0TW9k
ZSkNCiAgICArCQkJZ290byB1cGRhdGU7DQogICAgKwkJUVRyZWVXaWRnZXRJdGVtSXRlcmF0b3Ig
aXQodGhpcyk7DQogICAgKwkJQ29uZmlnSXRlbSogaXRlbTsNCiAgICArDQogICAgKwkJd2hpbGUg
KCppdCkgew0KICAgICsJCQlpdGVtID0gKENvbmZpZ0l0ZW0qKSgqaXQpOw0KICAgICsJCQlpZiAo
IWl0ZW0tPm1lbnUpDQogICAgKwkJCQljb250aW51ZTsNCiAgICArCQkJaXRlbS0+dGVzdFVwZGF0
ZU1lbnUobWVudV9pc192aXNpYmxlKGl0ZW0tPm1lbnUpKTsNCiAgICArDQogICAgKwkJCSsraXQ7
DQogICAgKwkJfQ0KICAgICsJCXJldHVybjsNCiAgICArCX0NCiAgICArDQogICAgKwlpZiAocm9v
dEVudHJ5ICE9ICZyb290bWVudSAmJiAobW9kZSA9PSBzaW5nbGVNb2RlIHx8DQogICAgKwkgICAg
KG1vZGUgPT0gc3ltYm9sTW9kZSAmJiByb290RW50cnktPnBhcmVudCAhPSAmcm9vdG1lbnUpKSkg
ew0KICAgICsJCWl0ZW0gPSAoQ29uZmlnSXRlbSAqKXRvcExldmVsSXRlbSgwKTsNCiAgICArCQlp
ZiAoIWl0ZW0pDQogICAgKwkJCWl0ZW0gPSBuZXcgQ29uZmlnSXRlbSh0aGlzLCAwLCB0cnVlKTsN
CiAgICArCQlsYXN0ID0gaXRlbTsNCiAgICArCX0NCiAgICArCWlmICgobW9kZSA9PSBzaW5nbGVN
b2RlIHx8IChtb2RlID09IHN5bWJvbE1vZGUgJiYgIShyb290RW50cnktPmZsYWdzICYgTUVOVV9S
T09UKSkpICYmDQogICAgKwkgICAgcm9vdEVudHJ5LT5zeW0gJiYgcm9vdEVudHJ5LT5wcm9tcHQp
IHsNCiAgICArCQlpdGVtID0gbGFzdCA/IGxhc3QtPm5leHRTaWJsaW5nKCkgOiBmaXJzdENoaWxk
KCk7DQogICAgKwkJaWYgKCFpdGVtKQ0KICAgICsJCQlpdGVtID0gbmV3IENvbmZpZ0l0ZW0odGhp
cywgbGFzdCwgcm9vdEVudHJ5LCB0cnVlKTsNCiAgICArCQllbHNlDQogICAgKwkJCWl0ZW0tPnRl
c3RVcGRhdGVNZW51KHRydWUpOw0KICAgICsNCiAgICArCQl1cGRhdGVNZW51TGlzdChpdGVtLCBy
b290RW50cnkpOw0KICAgICsJCXVwZGF0ZSgpOw0KICAgICsJCXJlc2l6ZUNvbHVtblRvQ29udGVu
dHMoMCk7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICt1cGRhdGU6DQogICAgKwl1cGRh
dGVNZW51TGlzdCh0aGlzLCByb290RW50cnkpOw0KICAgICsJdXBkYXRlKCk7DQogICAgKwlyZXNp
emVDb2x1bW5Ub0NvbnRlbnRzKDApOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xp
c3Q6OnNldFZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0sIHRyaXN0YXRlIHZhbCkNCiAgICArew0KICAg
ICsJc3RydWN0IHN5bWJvbCogc3ltOw0KICAgICsJaW50IHR5cGU7DQogICAgKwl0cmlzdGF0ZSBv
bGR2YWw7DQogICAgKw0KICAgICsJc3ltID0gaXRlbS0+bWVudSA/IGl0ZW0tPm1lbnUtPnN5bSA6
IDA7DQogICAgKwlpZiAoIXN5bSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJdHlwZSA9
IHN5bV9nZXRfdHlwZShzeW0pOw0KICAgICsJc3dpdGNoICh0eXBlKSB7DQogICAgKwljYXNlIFNf
Qk9PTEVBTjoNCiAgICArCWNhc2UgU19UUklTVEFURToNCiAgICArCQlvbGR2YWwgPSBzeW1fZ2V0
X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKw0KICAgICsJCWlmICghc3ltX3NldF90cmlzdGF0
ZV92YWx1ZShzeW0sIHZhbCkpDQogICAgKwkJCXJldHVybjsNCiAgICArCQlpZiAob2xkdmFsID09
IG5vICYmIGl0ZW0tPm1lbnUtPmxpc3QpDQogICAgKwkJCWl0ZW0tPnNldEV4cGFuZGVkKHRydWUp
Ow0KICAgICsJCXBhcmVudCgpLT51cGRhdGVMaXN0KGl0ZW0pOw0KICAgICsJCWJyZWFrOw0KICAg
ICsJfQ0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OmNoYW5nZVZhbHVlKENv
bmZpZ0l0ZW0qIGl0ZW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wqIHN5bTsNCiAgICAr
CXN0cnVjdCBtZW51KiBtZW51Ow0KICAgICsJaW50IHR5cGUsIG9sZGV4cHIsIG5ld2V4cHI7DQog
ICAgKw0KICAgICsJbWVudSA9IGl0ZW0tPm1lbnU7DQogICAgKwlpZiAoIW1lbnUpDQogICAgKwkJ
cmV0dXJuOw0KICAgICsJc3ltID0gbWVudS0+c3ltOw0KICAgICsJaWYgKCFzeW0pIHsNCiAgICAr
CQlpZiAoaXRlbS0+bWVudS0+bGlzdCkNCiAgICArCQkJaXRlbS0+c2V0RXhwYW5kZWQoIWl0ZW0t
PmlzRXhwYW5kZWQoKSk7DQogICAgKwkJcmV0dXJuOw0KICAgICsJfQ0KICAgICsNCiAgICArCXR5
cGUgPSBzeW1fZ2V0X3R5cGUoc3ltKTsNCiAgICArCXN3aXRjaCAodHlwZSkgew0KICAgICsJY2Fz
ZSBTX0JPT0xFQU46DQogICAgKwljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJb2xkZXhwciA9IHN5
bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArCQluZXdleHByID0gc3ltX3RvZ2dsZV90
cmlzdGF0ZV92YWx1ZShzeW0pOw0KICAgICsJCWlmIChpdGVtLT5tZW51LT5saXN0KSB7DQogICAg
KwkJCWlmIChvbGRleHByID09IG5ld2V4cHIpDQogICAgKwkJCQlpdGVtLT5zZXRFeHBhbmRlZCgh
aXRlbS0+aXNFeHBhbmRlZCgpKTsNCiAgICArCQkJZWxzZSBpZiAob2xkZXhwciA9PSBubykNCiAg
ICArCQkJCWl0ZW0tPnNldEV4cGFuZGVkKHRydWUpOw0KICAgICsJCX0NCiAgICArCQlpZiAob2xk
ZXhwciAhPSBuZXdleHByKQ0KICAgICsJCQlwYXJlbnQoKS0+dXBkYXRlTGlzdChpdGVtKTsNCiAg
ICArCQlicmVhazsNCiAgICArCWNhc2UgU19JTlQ6DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJ
Y2FzZSBTX1NUUklORzoNCiAgICArCQlwYXJlbnQoKS0+bGluZUVkaXQtPnNob3coaXRlbSk7DQog
ICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTGlz
dDo6c2V0Um9vdE1lbnUoc3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCWVudW0gcHJv
cF90eXBlIHR5cGU7DQogICAgKw0KICAgICsJaWYgKHJvb3RFbnRyeSA9PSBtZW51KQ0KICAgICsJ
CXJldHVybjsNCiAgICArCXR5cGUgPSBtZW51ICYmIG1lbnUtPnByb21wdCA/IG1lbnUtPnByb21w
dC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCWlmICh0eXBlICE9IFBfTUVOVSkNCiAgICArCQly
ZXR1cm47DQogICAgKwl1cGRhdGVNZW51TGlzdCh0aGlzLCAwKTsNCiAgICArCXJvb3RFbnRyeSA9
IG1lbnU7DQogICAgKwl1cGRhdGVMaXN0QWxsKCk7DQogICAgKwlpZiAoY3VycmVudEl0ZW0oKSkg
ew0KICAgICsJCWN1cnJlbnRJdGVtKCktPnNldFNlbGVjdGVkKGhhc0ZvY3VzKCkpOw0KICAgICsJ
CXNjcm9sbFRvSXRlbShjdXJyZW50SXRlbSgpKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAg
ICArdm9pZCBDb25maWdMaXN0OjpzZXRQYXJlbnRNZW51KHZvaWQpDQogICAgK3sNCiAgICArCUNv
bmZpZ0l0ZW0qIGl0ZW07DQogICAgKwlzdHJ1Y3QgbWVudSAqb2xkcm9vdDsNCiAgICArDQogICAg
KwlvbGRyb290ID0gcm9vdEVudHJ5Ow0KICAgICsJaWYgKHJvb3RFbnRyeSA9PSAmcm9vdG1lbnUp
DQogICAgKwkJcmV0dXJuOw0KICAgICsJc2V0Um9vdE1lbnUobWVudV9nZXRfcGFyZW50X21lbnUo
cm9vdEVudHJ5LT5wYXJlbnQpKTsNCiAgICArDQogICAgKwlRVHJlZVdpZGdldEl0ZW1JdGVyYXRv
ciBpdCh0aGlzKTsNCiAgICArCXdoaWxlICgqaXQpIHsNCiAgICArCQlpdGVtID0gKENvbmZpZ0l0
ZW0gKikoKml0KTsNCiAgICArCQlpZiAoaXRlbS0+bWVudSA9PSBvbGRyb290KSB7DQogICAgKwkJ
CXNldEN1cnJlbnRJdGVtKGl0ZW0pOw0KICAgICsJCQlzY3JvbGxUb0l0ZW0oaXRlbSk7DQogICAg
KwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArDQogICAgKwkJKytpdDsNCiAgICArCX0NCiAgICAr
fQ0KICAgICsNCiAgICArLyoNCiAgICArICogdXBkYXRlIGFsbCB0aGUgY2hpbGRyZW4gb2YgYSBt
ZW51IGVudHJ5DQogICAgKyAqICAgcmVtb3Zlcy9hZGRzIHRoZSBlbnRyaWVzIGZyb20gdGhlIHBh
cmVudCB3aWRnZXQgYXMgbmVjZXNzYXJ5DQogICAgKyAqDQogICAgKyAqIHBhcmVudDogZWl0aGVy
IHRoZSBtZW51IGxpc3Qgd2lkZ2V0IG9yIGEgbWVudSBlbnRyeSB3aWRnZXQNCiAgICArICogbWVu
dTogZW50cnkgdG8gYmUgdXBkYXRlZA0KICAgICsgKi8NCiAgICArdm9pZCBDb25maWdMaXN0Ojp1
cGRhdGVNZW51TGlzdChDb25maWdJdGVtICpwYXJlbnQsIHN0cnVjdCBtZW51KiBtZW51KQ0KICAg
ICt7DQogICAgKwlzdHJ1Y3QgbWVudSogY2hpbGQ7DQogICAgKwlDb25maWdJdGVtKiBpdGVtOw0K
ICAgICsJQ29uZmlnSXRlbSogbGFzdDsNCiAgICArCWJvb2wgdmlzaWJsZTsNCiAgICArCWVudW0g
cHJvcF90eXBlIHR5cGU7DQogICAgKw0KICAgICsJaWYgKCFtZW51KSB7DQogICAgKwkJd2hpbGUg
KHBhcmVudC0+Y2hpbGRDb3VudCgpID4gMCkNCiAgICArCQl7DQogICAgKwkJCWRlbGV0ZSBwYXJl
bnQtPnRha2VDaGlsZCgwKTsNCiAgICArCQl9DQogICAgKw0KICAgICsJCXJldHVybjsNCiAgICAr
CX0NCiAgICArDQogICAgKwlsYXN0ID0gcGFyZW50LT5maXJzdENoaWxkKCk7DQogICAgKwlpZiAo
bGFzdCAmJiAhbGFzdC0+Z29QYXJlbnQpDQogICAgKwkJbGFzdCA9IDA7DQogICAgKwlmb3IgKGNo
aWxkID0gbWVudS0+bGlzdDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQpIHsNCiAgICArCQlp
dGVtID0gbGFzdCA/IGxhc3QtPm5leHRTaWJsaW5nKCkgOiBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsN
CiAgICArCQl0eXBlID0gY2hpbGQtPnByb21wdCA/IGNoaWxkLT5wcm9tcHQtPnR5cGUgOiBQX1VO
S05PV047DQogICAgKw0KICAgICsJCXN3aXRjaCAobW9kZSkgew0KICAgICsJCWNhc2UgbWVudU1v
ZGU6DQogICAgKwkJCWlmICghKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkpDQogICAgKwkJCQln
b3RvIGhpZGU7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2Ugc3ltYm9sTW9kZToNCiAgICAr
CQkJaWYgKGNoaWxkLT5mbGFncyAmIE1FTlVfUk9PVCkNCiAgICArCQkJCWdvdG8gaGlkZTsNCiAg
ICArCQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0K
ICAgICsNCiAgICArCQl2aXNpYmxlID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsNCiAgICArCQlp
ZiAoIW1lbnVTa2lwKGNoaWxkKSkgew0KICAgICsJCQlpZiAoIWNoaWxkLT5zeW0gJiYgIWNoaWxk
LT5saXN0ICYmICFjaGlsZC0+cHJvbXB0KQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWlm
ICghaXRlbSB8fCBpdGVtLT5tZW51ICE9IGNoaWxkKQ0KICAgICsJCQkJaXRlbSA9IG5ldyBDb25m
aWdJdGVtKHBhcmVudCwgbGFzdCwgY2hpbGQsIHZpc2libGUpOw0KICAgICsJCQllbHNlDQogICAg
KwkJCQlpdGVtLT50ZXN0VXBkYXRlTWVudSh2aXNpYmxlKTsNCiAgICArDQogICAgKwkJCWlmICht
b2RlID09IGZ1bGxNb2RlIHx8IG1vZGUgPT0gbWVudU1vZGUgfHwgdHlwZSAhPSBQX01FTlUpDQog
ICAgKwkJCQl1cGRhdGVNZW51TGlzdChpdGVtLCBjaGlsZCk7DQogICAgKwkJCWVsc2UNCiAgICAr
CQkJCXVwZGF0ZU1lbnVMaXN0KGl0ZW0sIDApOw0KICAgICsJCQlsYXN0ID0gaXRlbTsNCiAgICAr
CQkJY29udGludWU7DQogICAgKwkJfQ0KICAgICsJaGlkZToNCiAgICArCQlpZiAoaXRlbSAmJiBp
dGVtLT5tZW51ID09IGNoaWxkKSB7DQogICAgKwkJCWxhc3QgPSBwYXJlbnQtPmZpcnN0Q2hpbGQo
KTsNCiAgICArCQkJaWYgKGxhc3QgPT0gaXRlbSkNCiAgICArCQkJCWxhc3QgPSAwOw0KICAgICsJ
CQllbHNlIHdoaWxlIChsYXN0LT5uZXh0U2libGluZygpICE9IGl0ZW0pDQogICAgKwkJCQlsYXN0
ID0gbGFzdC0+bmV4dFNpYmxpbmcoKTsNCiAgICArCQkJZGVsZXRlIGl0ZW07DQogICAgKwkJfQ0K
ICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OnVwZGF0ZU1lbnVM
aXN0KENvbmZpZ0xpc3QgKnBhcmVudCwgc3RydWN0IG1lbnUqIG1lbnUpDQogICAgK3sNCiAgICAr
CXN0cnVjdCBtZW51KiBjaGlsZDsNCiAgICArCUNvbmZpZ0l0ZW0qIGl0ZW07DQogICAgKwlDb25m
aWdJdGVtKiBsYXN0Ow0KICAgICsJYm9vbCB2aXNpYmxlOw0KICAgICsJZW51bSBwcm9wX3R5cGUg
dHlwZTsNCiAgICArDQogICAgKwlpZiAoIW1lbnUpIHsNCiAgICArCQl3aGlsZSAocGFyZW50LT50
b3BMZXZlbEl0ZW1Db3VudCgpID4gMCkNCiAgICArCQl7DQogICAgKwkJCWRlbGV0ZSBwYXJlbnQt
PnRha2VUb3BMZXZlbEl0ZW0oMCk7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQlyZXR1cm47DQog
ICAgKwl9DQogICAgKw0KICAgICsJbGFzdCA9IChDb25maWdJdGVtKilwYXJlbnQtPnRvcExldmVs
SXRlbSgwKTsNCiAgICArCWlmIChsYXN0ICYmICFsYXN0LT5nb1BhcmVudCkNCiAgICArCQlsYXN0
ID0gMDsNCiAgICArCWZvciAoY2hpbGQgPSBtZW51LT5saXN0OyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dCkgew0KICAgICsJCWl0ZW0gPSBsYXN0ID8gbGFzdC0+bmV4dFNpYmxpbmcoKSA6IChD
b25maWdJdGVtKilwYXJlbnQtPnRvcExldmVsSXRlbSgwKTsNCiAgICArCQl0eXBlID0gY2hpbGQt
PnByb21wdCA/IGNoaWxkLT5wcm9tcHQtPnR5cGUgOiBQX1VOS05PV047DQogICAgKw0KICAgICsJ
CXN3aXRjaCAobW9kZSkgew0KICAgICsJCWNhc2UgbWVudU1vZGU6DQogICAgKwkJCWlmICghKGNo
aWxkLT5mbGFncyAmIE1FTlVfUk9PVCkpDQogICAgKwkJCQlnb3RvIGhpZGU7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2Ugc3ltYm9sTW9kZToNCiAgICArCQkJaWYgKGNoaWxkLT5mbGFncyAm
IE1FTlVfUk9PVCkNCiAgICArCQkJCWdvdG8gaGlkZTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJ
ZGVmYXVsdDoNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQl2aXNpYmxl
ID0gbWVudV9pc192aXNpYmxlKGNoaWxkKTsNCiAgICArCQlpZiAoIW1lbnVTa2lwKGNoaWxkKSkg
ew0KICAgICsJCQlpZiAoIWNoaWxkLT5zeW0gJiYgIWNoaWxkLT5saXN0ICYmICFjaGlsZC0+cHJv
bXB0KQ0KICAgICsJCQkJY29udGludWU7DQogICAgKwkJCWlmICghaXRlbSB8fCBpdGVtLT5tZW51
ICE9IGNoaWxkKQ0KICAgICsJCQkJaXRlbSA9IG5ldyBDb25maWdJdGVtKHBhcmVudCwgbGFzdCwg
Y2hpbGQsIHZpc2libGUpOw0KICAgICsJCQllbHNlDQogICAgKwkJCQlpdGVtLT50ZXN0VXBkYXRl
TWVudSh2aXNpYmxlKTsNCiAgICArDQogICAgKwkJCWlmIChtb2RlID09IGZ1bGxNb2RlIHx8IG1v
ZGUgPT0gbWVudU1vZGUgfHwgdHlwZSAhPSBQX01FTlUpDQogICAgKwkJCQl1cGRhdGVNZW51TGlz
dChpdGVtLCBjaGlsZCk7DQogICAgKwkJCWVsc2UNCiAgICArCQkJCXVwZGF0ZU1lbnVMaXN0KGl0
ZW0sIDApOw0KICAgICsJCQlsYXN0ID0gaXRlbTsNCiAgICArCQkJY29udGludWU7DQogICAgKwkJ
fQ0KICAgICsJaGlkZToNCiAgICArCQlpZiAoaXRlbSAmJiBpdGVtLT5tZW51ID09IGNoaWxkKSB7
DQogICAgKwkJCWxhc3QgPSAoQ29uZmlnSXRlbSopcGFyZW50LT50b3BMZXZlbEl0ZW0oMCk7DQog
ICAgKwkJCWlmIChsYXN0ID09IGl0ZW0pDQogICAgKwkJCQlsYXN0ID0gMDsNCiAgICArCQkJZWxz
ZSB3aGlsZSAobGFzdC0+bmV4dFNpYmxpbmcoKSAhPSBpdGVtKQ0KICAgICsJCQkJbGFzdCA9IGxh
c3QtPm5leHRTaWJsaW5nKCk7DQogICAgKwkJCWRlbGV0ZSBpdGVtOw0KICAgICsJCX0NCiAgICAr
CX0NCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaXN0OjprZXlQcmVzc0V2ZW50KFFL
ZXlFdmVudCogZXYpDQogICAgK3sNCiAgICArCVFUcmVlV2lkZ2V0SXRlbSogaSA9IGN1cnJlbnRJ
dGVtKCk7DQogICAgKwlDb25maWdJdGVtKiBpdGVtOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7
DQogICAgKwllbnVtIHByb3BfdHlwZSB0eXBlOw0KICAgICsNCiAgICArCWlmIChldi0+a2V5KCkg
PT0gUXQ6OktleV9Fc2NhcGUgJiYgbW9kZSAhPSBmdWxsTW9kZSAmJiBtb2RlICE9IGxpc3RNb2Rl
KSB7DQogICAgKwkJZW1pdCBwYXJlbnRTZWxlY3RlZCgpOw0KICAgICsJCWV2LT5hY2NlcHQoKTsN
CiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKCFpKSB7DQogICAgKwkJ
UGFyZW50OjprZXlQcmVzc0V2ZW50KGV2KTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAg
KwlpdGVtID0gKENvbmZpZ0l0ZW0qKWk7DQogICAgKw0KICAgICsJc3dpdGNoIChldi0+a2V5KCkp
IHsNCiAgICArCWNhc2UgUXQ6OktleV9SZXR1cm46DQogICAgKwljYXNlIFF0OjpLZXlfRW50ZXI6
DQogICAgKwkJaWYgKGl0ZW0tPmdvUGFyZW50KSB7DQogICAgKwkJCWVtaXQgcGFyZW50U2VsZWN0
ZWQoKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCW1lbnUgPSBpdGVtLT5tZW51
Ow0KICAgICsJCWlmICghbWVudSkNCiAgICArCQkJYnJlYWs7DQogICAgKwkJdHlwZSA9IG1lbnUt
PnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCQlpZiAodHlw
ZSA9PSBQX01FTlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYNCiAgICArCQkgICAgbW9kZSAhPSBm
dWxsTW9kZSAmJiBtb2RlICE9IG1lbnVNb2RlKSB7DQogICAgKwkJCWVtaXQgbWVudVNlbGVjdGVk
KG1lbnUpOw0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwljYXNlIFF0OjpLZXlfU3Bh
Y2U6DQogICAgKwkJY2hhbmdlVmFsdWUoaXRlbSk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNl
IFF0OjpLZXlfTjoNCiAgICArCQlzZXRWYWx1ZShpdGVtLCBubyk7DQogICAgKwkJYnJlYWs7DQog
ICAgKwljYXNlIFF0OjpLZXlfTToNCiAgICArCQlzZXRWYWx1ZShpdGVtLCBtb2QpOw0KICAgICsJ
CWJyZWFrOw0KICAgICsJY2FzZSBRdDo6S2V5X1k6DQogICAgKwkJc2V0VmFsdWUoaXRlbSwgeWVz
KTsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJUGFyZW50OjprZXlQcmVz
c0V2ZW50KGV2KTsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKwlldi0+YWNjZXB0KCk7
DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VQcmVzc0V2ZW50KFFN
b3VzZUV2ZW50KiBlKQ0KICAgICt7DQogICAgKwkvL1FQb2ludCBwKGNvbnRlbnRzVG9WaWV3cG9y
dChlLT5wb3MoKSkpOw0KICAgICsJLy9wcmludGYoImNvbnRlbnRzTW91c2VQcmVzc0V2ZW50OiAl
ZCwlZFxuIiwgcC54KCksIHAueSgpKTsNCiAgICArCVBhcmVudDo6bW91c2VQcmVzc0V2ZW50KGUp
Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlUmVsZWFzZUV2ZW50
KFFNb3VzZUV2ZW50KiBlKQ0KICAgICt7DQogICAgKwlRUG9pbnQgcCA9IGUtPnBvcygpOw0KICAg
ICsJQ29uZmlnSXRlbSogaXRlbSA9IChDb25maWdJdGVtKilpdGVtQXQocCk7DQogICAgKwlzdHJ1
Y3QgbWVudSAqbWVudTsNCiAgICArCWVudW0gcHJvcF90eXBlIHB0eXBlOw0KICAgICsJUUljb24g
aWNvbjsNCiAgICArCWludCBpZHgsIHg7DQogICAgKw0KICAgICsJaWYgKCFpdGVtKQ0KICAgICsJ
CWdvdG8gc2tpcDsNCiAgICArDQogICAgKwltZW51ID0gaXRlbS0+bWVudTsNCiAgICArCXggPSBo
ZWFkZXIoKS0+b2Zmc2V0KCkgKyBwLngoKTsNCiAgICArCWlkeCA9IGhlYWRlcigpLT5sb2dpY2Fs
SW5kZXhBdCh4KTsNCiAgICArCXN3aXRjaCAoaWR4KSB7DQogICAgKwljYXNlIHByb21wdENvbElk
eDoNCiAgICArCQlpY29uID0gaXRlbS0+cGl4bWFwKHByb21wdENvbElkeCk7DQogICAgKwkJaWYg
KCFpY29uLmlzTnVsbCgpKSB7DQogICAgKwkJCWludCBvZmYgPSBoZWFkZXIoKS0+c2VjdGlvblBv
c2l0aW9uKDApICsgdmlzdWFsUmVjdChpbmRleEF0KHApKS54KCkgKyA0OyAvLyA0IGlzIEhhcmRj
b2RlZCBpbWFnZSBvZmZzZXQuIFRoZXJlIG1pZ2h0IGJlIGEgd2F5IHRvIGRvIGl0IHByb3Blcmx5
Lg0KICAgICsJCQlpZiAoeCA+PSBvZmYgJiYgeCA8IG9mZiArIGljb24uYXZhaWxhYmxlU2l6ZXMo
KS5maXJzdCgpLndpZHRoKCkpIHsNCiAgICArCQkJCWlmIChpdGVtLT5nb1BhcmVudCkgew0KICAg
ICsJCQkJCWVtaXQgcGFyZW50U2VsZWN0ZWQoKTsNCiAgICArCQkJCQlicmVhazsNCiAgICArCQkJ
CX0gZWxzZSBpZiAoIW1lbnUpDQogICAgKwkJCQkJYnJlYWs7DQogICAgKwkJCQlwdHlwZSA9IG1l
bnUtPnByb21wdCA/IG1lbnUtPnByb21wdC0+dHlwZSA6IFBfVU5LTk9XTjsNCiAgICArCQkJCWlm
IChwdHlwZSA9PSBQX01FTlUgJiYgcm9vdEVudHJ5ICE9IG1lbnUgJiYNCiAgICArCQkJCSAgICBt
b2RlICE9IGZ1bGxNb2RlICYmIG1vZGUgIT0gbWVudU1vZGUpDQogICAgKwkJCQkJZW1pdCBtZW51
U2VsZWN0ZWQobWVudSk7DQogICAgKwkJCQllbHNlDQogICAgKwkJCQkJY2hhbmdlVmFsdWUoaXRl
bSk7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIG5vQ29s
SWR4Og0KICAgICsJCXNldFZhbHVlKGl0ZW0sIG5vKTsNCiAgICArCQlicmVhazsNCiAgICArCWNh
c2UgbW9kQ29sSWR4Og0KICAgICsJCXNldFZhbHVlKGl0ZW0sIG1vZCk7DQogICAgKwkJYnJlYWs7
DQogICAgKwljYXNlIHllc0NvbElkeDoNCiAgICArCQlzZXRWYWx1ZShpdGVtLCB5ZXMpOw0KICAg
ICsJCWJyZWFrOw0KICAgICsJY2FzZSBkYXRhQ29sSWR4Og0KICAgICsJCWNoYW5nZVZhbHVlKGl0
ZW0pOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArc2tpcDoNCiAgICArCS8v
cHJpbnRmKCJjb250ZW50c01vdXNlUmVsZWFzZUV2ZW50OiAlZCwlZFxuIiwgcC54KCksIHAueSgp
KTsNCiAgICArCVBhcmVudDo6bW91c2VSZWxlYXNlRXZlbnQoZSk7DQogICAgK30NCiAgICArDQog
ICAgK3ZvaWQgQ29uZmlnTGlzdDo6bW91c2VNb3ZlRXZlbnQoUU1vdXNlRXZlbnQqIGUpDQogICAg
K3sNCiAgICArCS8vUVBvaW50IHAoY29udGVudHNUb1ZpZXdwb3J0KGUtPnBvcygpKSk7DQogICAg
KwkvL3ByaW50ZigiY29udGVudHNNb3VzZU1vdmVFdmVudDogJWQsJWRcbiIsIHAueCgpLCBwLnko
KSk7DQogICAgKwlQYXJlbnQ6Om1vdXNlTW92ZUV2ZW50KGUpOw0KICAgICt9DQogICAgKw0KICAg
ICt2b2lkIENvbmZpZ0xpc3Q6Om1vdXNlRG91YmxlQ2xpY2tFdmVudChRTW91c2VFdmVudCogZSkN
CiAgICArew0KICAgICsJUVBvaW50IHAgPSBlLT5wb3MoKTsgLy8gVE9ETzogQ2hlY2sgaWYgdGhp
cyB3b3Jrcyh3YXMgY29udGVudHNUb1ZpZXdwb3J0KS4NCiAgICArCUNvbmZpZ0l0ZW0qIGl0ZW0g
PSAoQ29uZmlnSXRlbSopaXRlbUF0KHApOw0KICAgICsJc3RydWN0IG1lbnUgKm1lbnU7DQogICAg
KwllbnVtIHByb3BfdHlwZSBwdHlwZTsNCiAgICArDQogICAgKwlpZiAoIWl0ZW0pDQogICAgKwkJ
Z290byBza2lwOw0KICAgICsJaWYgKGl0ZW0tPmdvUGFyZW50KSB7DQogICAgKwkJZW1pdCBwYXJl
bnRTZWxlY3RlZCgpOw0KICAgICsJCWdvdG8gc2tpcDsNCiAgICArCX0NCiAgICArCW1lbnUgPSBp
dGVtLT5tZW51Ow0KICAgICsJaWYgKCFtZW51KQ0KICAgICsJCWdvdG8gc2tpcDsNCiAgICArCXB0
eXBlID0gbWVudS0+cHJvbXB0ID8gbWVudS0+cHJvbXB0LT50eXBlIDogUF9VTktOT1dOOw0KICAg
ICsJaWYgKHB0eXBlID09IFBfTUVOVSAmJiAobW9kZSA9PSBzaW5nbGVNb2RlIHx8IG1vZGUgPT0g
c3ltYm9sTW9kZSkpDQogICAgKwkJZW1pdCBtZW51U2VsZWN0ZWQobWVudSk7DQogICAgKwllbHNl
IGlmIChtZW51LT5zeW0pDQogICAgKwkJY2hhbmdlVmFsdWUoaXRlbSk7DQogICAgKw0KICAgICtz
a2lwOg0KICAgICsJLy9wcmludGYoImNvbnRlbnRzTW91c2VEb3VibGVDbGlja0V2ZW50OiAlZCwl
ZFxuIiwgcC54KCksIHAueSgpKTsNCiAgICArCVBhcmVudDo6bW91c2VEb3VibGVDbGlja0V2ZW50
KGUpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0xpc3Q6OmZvY3VzSW5FdmVudChR
Rm9jdXNFdmVudCAqZSkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKm1lbnUgPSBOVUxMOw0K
ICAgICsNCiAgICArCVBhcmVudDo6Zm9jdXNJbkV2ZW50KGUpOw0KICAgICsNCiAgICArCUNvbmZp
Z0l0ZW0qIGl0ZW0gPSAoQ29uZmlnSXRlbSAqKWN1cnJlbnRJdGVtKCk7DQogICAgKwlpZiAoaXRl
bSkgew0KICAgICsJCWl0ZW0tPnNldFNlbGVjdGVkKHRydWUpOw0KICAgICsJCW1lbnUgPSBpdGVt
LT5tZW51Ow0KICAgICsJfQ0KICAgICsJZW1pdCBnb3RGb2N1cyhtZW51KTsNCiAgICArfQ0KICAg
ICsNCiAgICArdm9pZCBDb25maWdMaXN0Ojpjb250ZXh0TWVudUV2ZW50KFFDb250ZXh0TWVudUV2
ZW50ICplKQ0KICAgICt7DQogICAgKwlpZiAoZS0+eSgpIDw9IGhlYWRlcigpLT5nZW9tZXRyeSgp
LmJvdHRvbSgpKSB7DQogICAgKwkJaWYgKCFoZWFkZXJQb3B1cCkgew0KICAgICsJCQlRQWN0aW9u
ICphY3Rpb247DQogICAgKw0KICAgICsJCQloZWFkZXJQb3B1cCA9IG5ldyBRTWVudSh0aGlzKTsN
CiAgICArCQkJYWN0aW9uID0gbmV3IFFBY3Rpb24oIlNob3cgTmFtZSIsIHRoaXMpOw0KICAgICsJ
CQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJCQkgIGNvbm5lY3QoYWN0aW9u
LCBTSUdOQUwodG9nZ2xlZChib29sKSksDQogICAgKwkJCQkgIHBhcmVudCgpLCBTTE9UKHNldFNo
b3dOYW1lKGJvb2wpKSk7DQogICAgKwkJCSAgY29ubmVjdChwYXJlbnQoKSwgU0lHTkFMKHNob3dO
YW1lQ2hhbmdlZChib29sKSksDQogICAgKwkJCQkgIGFjdGlvbiwgU0xPVChzZXRPbihib29sKSkp
Ow0KICAgICsJCQkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93TmFtZSk7DQogICAgKwkJCSAgaGVh
ZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rpb24pOw0KICAgICsJCQlhY3Rpb24gPSBuZXcgUUFjdGlv
bigiU2hvdyBSYW5nZSIsIHRoaXMpOw0KICAgICsJCQkgIGFjdGlvbi0+c2V0Q2hlY2thYmxlKHRy
dWUpOw0KICAgICsJCQkgIGNvbm5lY3QoYWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29sKSksDQog
ICAgKwkJCQkgIHBhcmVudCgpLCBTTE9UKHNldFNob3dSYW5nZShib29sKSkpOw0KICAgICsJCQkg
IGNvbm5lY3QocGFyZW50KCksIFNJR05BTChzaG93UmFuZ2VDaGFuZ2VkKGJvb2wpKSwNCiAgICAr
CQkJCSAgYWN0aW9uLCBTTE9UKHNldE9uKGJvb2wpKSk7DQogICAgKwkJCSAgYWN0aW9uLT5zZXRD
aGVja2VkKHNob3dSYW5nZSk7DQogICAgKwkJCSAgaGVhZGVyUG9wdXAtPmFkZEFjdGlvbihhY3Rp
b24pOw0KICAgICsJCQlhY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBEYXRhIiwgdGhpcyk7DQog
ICAgKwkJCSAgYWN0aW9uLT5zZXRDaGVja2FibGUodHJ1ZSk7DQogICAgKwkJCSAgY29ubmVjdChh
Y3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwNCiAgICArCQkJCSAgcGFyZW50KCksIFNMT1Qo
c2V0U2hvd0RhdGEoYm9vbCkpKTsNCiAgICArCQkJICBjb25uZWN0KHBhcmVudCgpLCBTSUdOQUwo
c2hvd0RhdGFDaGFuZ2VkKGJvb2wpKSwNCiAgICArCQkJCSAgYWN0aW9uLCBTTE9UKHNldE9uKGJv
b2wpKSk7DQogICAgKwkJCSAgYWN0aW9uLT5zZXRDaGVja2VkKHNob3dEYXRhKTsNCiAgICArCQkJ
ICBoZWFkZXJQb3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7DQogICAgKwkJfQ0KICAgICsJCWhlYWRl
clBvcHVwLT5leGVjKGUtPmdsb2JhbFBvcygpKTsNCiAgICArCQllLT5hY2NlcHQoKTsNCiAgICAr
CX0gZWxzZQ0KICAgICsJCWUtPmlnbm9yZSgpOw0KICAgICt9DQogICAgKw0KICAgICtDb25maWdW
aWV3KkNvbmZpZ1ZpZXc6OnZpZXdMaXN0Ow0KICAgICtRQWN0aW9uICpDb25maWdWaWV3OjpzaG93
Tm9ybWFsQWN0aW9uOw0KICAgICtRQWN0aW9uICpDb25maWdWaWV3OjpzaG93QWxsQWN0aW9uOw0K
ICAgICtRQWN0aW9uICpDb25maWdWaWV3OjpzaG93UHJvbXB0QWN0aW9uOw0KICAgICsNCiAgICAr
Q29uZmlnVmlldzo6Q29uZmlnVmlldyhRV2lkZ2V0KiBwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUp
DQogICAgKwk6IFBhcmVudChwYXJlbnQpDQogICAgK3sNCiAgICArCXNldE9iamVjdE5hbWUobmFt
ZSk7DQogICAgKwlRVkJveExheW91dCAqdmVydGljYWxMYXlvdXQgPSBuZXcgUVZCb3hMYXlvdXQo
dGhpcyk7DQogICAgKwl2ZXJ0aWNhbExheW91dC0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAs
IDApOw0KICAgICsNCiAgICArCWxpc3QgPSBuZXcgQ29uZmlnTGlzdCh0aGlzKTsNCiAgICArCXZl
cnRpY2FsTGF5b3V0LT5hZGRXaWRnZXQobGlzdCk7DQogICAgKwlsaW5lRWRpdCA9IG5ldyBDb25m
aWdMaW5lRWRpdCh0aGlzKTsNCiAgICArCWxpbmVFZGl0LT5oaWRlKCk7DQogICAgKwl2ZXJ0aWNh
bExheW91dC0+YWRkV2lkZ2V0KGxpbmVFZGl0KTsNCiAgICArDQogICAgKwl0aGlzLT5uZXh0Vmll
dyA9IHZpZXdMaXN0Ow0KICAgICsJdmlld0xpc3QgPSB0aGlzOw0KICAgICt9DQogICAgKw0KICAg
ICtDb25maWdWaWV3Ojp+Q29uZmlnVmlldyh2b2lkKQ0KICAgICt7DQogICAgKwlDb25maWdWaWV3
KiogdnA7DQogICAgKw0KICAgICsJZm9yICh2cCA9ICZ2aWV3TGlzdDsgKnZwOyB2cCA9ICYoKnZw
KS0+bmV4dFZpZXcpIHsNCiAgICArCQlpZiAoKnZwID09IHRoaXMpIHsNCiAgICArCQkJKnZwID0g
bmV4dFZpZXc7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArfQ0KICAg
ICsNCiAgICArdm9pZCBDb25maWdWaWV3OjpzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKmFjdCkNCiAg
ICArew0KICAgICsJaWYgKGFjdCA9PSBzaG93Tm9ybWFsQWN0aW9uKQ0KICAgICsJCWxpc3QtPm9w
dE1vZGUgPSBub3JtYWxPcHQ7DQogICAgKwllbHNlIGlmIChhY3QgPT0gc2hvd0FsbEFjdGlvbikN
CiAgICArCQlsaXN0LT5vcHRNb2RlID0gYWxsT3B0Ow0KICAgICsJZWxzZQ0KICAgICsJCWxpc3Qt
Pm9wdE1vZGUgPSBwcm9tcHRPcHQ7DQogICAgKw0KICAgICsJbGlzdC0+dXBkYXRlTGlzdEFsbCgp
Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ1ZpZXc6OnNldFNob3dOYW1lKGJvb2wg
YikNCiAgICArew0KICAgICsJaWYgKGxpc3QtPnNob3dOYW1lICE9IGIpIHsNCiAgICArCQlsaXN0
LT5zaG93TmFtZSA9IGI7DQogICAgKwkJbGlzdC0+cmVpbml0KCk7DQogICAgKwkJZW1pdCBzaG93
TmFtZUNoYW5nZWQoYik7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmln
Vmlldzo6c2V0U2hvd1JhbmdlKGJvb2wgYikNCiAgICArew0KICAgICsJaWYgKGxpc3QtPnNob3dS
YW5nZSAhPSBiKSB7DQogICAgKwkJbGlzdC0+c2hvd1JhbmdlID0gYjsNCiAgICArCQlsaXN0LT5y
ZWluaXQoKTsNCiAgICArCQllbWl0IHNob3dSYW5nZUNoYW5nZWQoYik7DQogICAgKwl9DQogICAg
K30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnVmlldzo6c2V0U2hvd0RhdGEoYm9vbCBiKQ0KICAg
ICt7DQogICAgKwlpZiAobGlzdC0+c2hvd0RhdGEgIT0gYikgew0KICAgICsJCWxpc3QtPnNob3dE
YXRhID0gYjsNCiAgICArCQlsaXN0LT5yZWluaXQoKTsNCiAgICArCQllbWl0IHNob3dEYXRhQ2hh
bmdlZChiKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdMaXN0Ojpz
ZXRBbGxPcGVuKGJvb2wgb3BlbikNCiAgICArew0KICAgICsJUVRyZWVXaWRnZXRJdGVtSXRlcmF0
b3IgaXQodGhpcyk7DQogICAgKw0KICAgICsJd2hpbGUgKCppdCkgew0KICAgICsJCSgqaXQpLT5z
ZXRFeHBhbmRlZChvcGVuKTsNCiAgICArDQogICAgKwkJKytpdDsNCiAgICArCX0NCiAgICArfQ0K
ICAgICsNCiAgICArdm9pZCBDb25maWdWaWV3Ojp1cGRhdGVMaXN0KENvbmZpZ0l0ZW0qIGl0ZW0p
DQogICAgK3sNCiAgICArCUNvbmZpZ1ZpZXcqIHY7DQogICAgKw0KICAgICsJZm9yICh2ID0gdmll
d0xpc3Q7IHY7IHYgPSB2LT5uZXh0VmlldykNCiAgICArCQl2LT5saXN0LT51cGRhdGVMaXN0KGl0
ZW0pOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ1ZpZXc6OnVwZGF0ZUxpc3RBbGwo
dm9pZCkNCiAgICArew0KICAgICsJQ29uZmlnVmlldyogdjsNCiAgICArDQogICAgKwlmb3IgKHYg
PSB2aWV3TGlzdDsgdjsgdiA9IHYtPm5leHRWaWV3KQ0KICAgICsJCXYtPmxpc3QtPnVwZGF0ZUxp
c3RBbGwoKTsNCiAgICArfQ0KICAgICsNCiAgICArQ29uZmlnSW5mb1ZpZXc6OkNvbmZpZ0luZm9W
aWV3KFFXaWRnZXQqIHBhcmVudCwgY29uc3QgY2hhciAqbmFtZSkNCiAgICArCTogUGFyZW50KHBh
cmVudCksIHN5bSgwKSwgX21lbnUoMCkNCiAgICArew0KICAgICsJc2V0T2JqZWN0TmFtZShuYW1l
KTsNCiAgICArDQogICAgKw0KICAgICsJaWYgKCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7DQog
ICAgKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAob2JqZWN0TmFtZSgpKTsNCiAgICArCQlz
ZXRTaG93RGVidWcoY29uZmlnU2V0dGluZ3MtPnZhbHVlKCIvc2hvd0RlYnVnIiwgZmFsc2UpLnRv
Qm9vbCgpKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsNCiAgICArCQljb25u
ZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCBTTE9UKHNhdmVTZXR0aW5ncygp
KSk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnSW5mb1ZpZXc6OnNh
dmVTZXR0aW5ncyh2b2lkKQ0KICAgICt7DQogICAgKwlpZiAoIW9iamVjdE5hbWUoKS5pc0VtcHR5
KCkpIHsNCiAgICArCQljb25maWdTZXR0aW5ncy0+YmVnaW5Hcm91cChvYmplY3ROYW1lKCkpOw0K
ICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3Nob3dEZWJ1ZyIsIHNob3dEZWJ1Zygp
KTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+ZW5kR3JvdXAoKTsNCiAgICArCX0NCiAgICArfQ0K
ICAgICsNCiAgICArdm9pZCBDb25maWdJbmZvVmlldzo6c2V0U2hvd0RlYnVnKGJvb2wgYikNCiAg
ICArew0KICAgICsJaWYgKF9zaG93RGVidWcgIT0gYikgew0KICAgICsJCV9zaG93RGVidWcgPSBi
Ow0KICAgICsJCWlmIChfbWVudSkNCiAgICArCQkJbWVudUluZm8oKTsNCiAgICArCQllbHNlIGlm
IChzeW0pDQogICAgKwkJCXN5bWJvbEluZm8oKTsNCiAgICArCQllbWl0IHNob3dEZWJ1Z0NoYW5n
ZWQoYik7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnSW5mb1ZpZXc6
OnNldEluZm8oc3RydWN0IG1lbnUgKm0pDQogICAgK3sNCiAgICArCWlmIChfbWVudSA9PSBtKQ0K
ICAgICsJCXJldHVybjsNCiAgICArCV9tZW51ID0gbTsNCiAgICArCXN5bSA9IE5VTEw7DQogICAg
KwlpZiAoIV9tZW51KQ0KICAgICsJCWNsZWFyKCk7DQogICAgKwllbHNlDQogICAgKwkJbWVudUlu
Zm8oKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdJbmZvVmlldzo6c3ltYm9sSW5m
byh2b2lkKQ0KICAgICt7DQogICAgKwlRU3RyaW5nIHN0cjsNCiAgICArDQogICAgKwlzdHIgKz0g
IjxiaWc+U3ltYm9sOiA8Yj4iOw0KICAgICsJc3RyICs9IHByaW50X2ZpbHRlcihzeW0tPm5hbWUp
Ow0KICAgICsJc3RyICs9ICI8L2I+PC9iaWc+PGJyPjxicj52YWx1ZTogIjsNCiAgICArCXN0ciAr
PSBwcmludF9maWx0ZXIoc3ltX2dldF9zdHJpbmdfdmFsdWUoc3ltKSk7DQogICAgKwlzdHIgKz0g
Ijxicj52aXNpYmlsaXR5OiAiOw0KICAgICsJc3RyICs9IHN5bS0+dmlzaWJsZSA9PSB5ZXMgPyAi
eSIgOiBzeW0tPnZpc2libGUgPT0gbW9kID8gIm0iIDogIm4iOw0KICAgICsJc3RyICs9ICI8YnI+
IjsNCiAgICArCXN0ciArPSBkZWJ1Z19pbmZvKHN5bSk7DQogICAgKw0KICAgICsJc2V0VGV4dChz
dHIpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0luZm9WaWV3OjptZW51SW5mbyh2
b2lkKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sKiBzeW07DQogICAgKwlRU3RyaW5nIGhl
YWQsIGRlYnVnLCBoZWxwOw0KICAgICsNCiAgICArCXN5bSA9IF9tZW51LT5zeW07DQogICAgKwlp
ZiAoc3ltKSB7DQogICAgKwkJaWYgKF9tZW51LT5wcm9tcHQpIHsNCiAgICArCQkJaGVhZCArPSAi
PGJpZz48Yj4iOw0KICAgICsJCQloZWFkICs9IHByaW50X2ZpbHRlcihfbWVudS0+cHJvbXB0LT50
ZXh0KTsNCiAgICArCQkJaGVhZCArPSAiPC9iPjwvYmlnPiI7DQogICAgKwkJCWlmIChzeW0tPm5h
bWUpIHsNCiAgICArCQkJCWhlYWQgKz0gIiAoIjsNCiAgICArCQkJCWlmIChzaG93RGVidWcoKSkN
CiAgICArCQkJCQloZWFkICs9IFFTdHJpbmcoKS5zcHJpbnRmKCI8YSBocmVmPVwicyVwXCI+Iiwg
c3ltKTsNCiAgICArCQkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFtZSk7DQogICAgKwkJ
CQlpZiAoc2hvd0RlYnVnKCkpDQogICAgKwkJCQkJaGVhZCArPSAiPC9hPiI7DQogICAgKwkJCQlo
ZWFkICs9ICIpIjsNCiAgICArCQkJfQ0KICAgICsJCX0gZWxzZSBpZiAoc3ltLT5uYW1lKSB7DQog
ICAgKwkJCWhlYWQgKz0gIjxiaWc+PGI+IjsNCiAgICArCQkJaWYgKHNob3dEZWJ1ZygpKQ0KICAg
ICsJCQkJaGVhZCArPSBRU3RyaW5nKCkuc3ByaW50ZigiPGEgaHJlZj1cInMlcFwiPiIsIHN5bSk7
DQogICAgKwkJCWhlYWQgKz0gcHJpbnRfZmlsdGVyKHN5bS0+bmFtZSk7DQogICAgKwkJCWlmIChz
aG93RGVidWcoKSkNCiAgICArCQkJCWhlYWQgKz0gIjwvYT4iOw0KICAgICsJCQloZWFkICs9ICI8
L2I+PC9iaWc+IjsNCiAgICArCQl9DQogICAgKwkJaGVhZCArPSAiPGJyPjxicj4iOw0KICAgICsN
CiAgICArCQlpZiAoc2hvd0RlYnVnKCkpDQogICAgKwkJCWRlYnVnID0gZGVidWdfaW5mbyhzeW0p
Ow0KICAgICsNCiAgICArCQlzdHJ1Y3QgZ3N0ciBoZWxwX2dzdHIgPSBzdHJfbmV3KCk7DQogICAg
KwkJbWVudV9nZXRfZXh0X2hlbHAoX21lbnUsICZoZWxwX2dzdHIpOw0KICAgICsJCWhlbHAgPSBw
cmludF9maWx0ZXIoc3RyX2dldCgmaGVscF9nc3RyKSk7DQogICAgKwkJc3RyX2ZyZWUoJmhlbHBf
Z3N0cik7DQogICAgKwl9IGVsc2UgaWYgKF9tZW51LT5wcm9tcHQpIHsNCiAgICArCQloZWFkICs9
ICI8YmlnPjxiPiI7DQogICAgKwkJaGVhZCArPSBwcmludF9maWx0ZXIoX21lbnUtPnByb21wdC0+
dGV4dCk7DQogICAgKwkJaGVhZCArPSAiPC9iPjwvYmlnPjxicj48YnI+IjsNCiAgICArCQlpZiAo
c2hvd0RlYnVnKCkpIHsNCiAgICArCQkJaWYgKF9tZW51LT5wcm9tcHQtPnZpc2libGUuZXhwcikg
ew0KICAgICsJCQkJZGVidWcgKz0gIiZuYnNwOyZuYnNwO2RlcDogIjsNCiAgICArCQkJCWV4cHJf
cHJpbnQoX21lbnUtPnByb21wdC0+dmlzaWJsZS5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1
ZywgRV9OT05FKTsNCiAgICArCQkJCWRlYnVnICs9ICI8YnI+PGJyPiI7DQogICAgKwkJCX0NCiAg
ICArCQl9DQogICAgKwl9DQogICAgKwlpZiAoc2hvd0RlYnVnKCkpDQogICAgKwkJZGVidWcgKz0g
UVN0cmluZygpLnNwcmludGYoImRlZmluZWQgYXQgJXM6JWQ8YnI+PGJyPiIsIF9tZW51LT5maWxl
LT5uYW1lLCBfbWVudS0+bGluZW5vKTsNCiAgICArDQogICAgKwlzZXRUZXh0KGhlYWQgKyBkZWJ1
ZyArIGhlbHApOw0KICAgICt9DQogICAgKw0KICAgICtRU3RyaW5nIENvbmZpZ0luZm9WaWV3Ojpk
ZWJ1Z19pbmZvKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJUVN0cmluZyBkZWJ1
ZzsNCiAgICArDQogICAgKwlkZWJ1ZyArPSAidHlwZTogIjsNCiAgICArCWRlYnVnICs9IHByaW50
X2ZpbHRlcihzeW1fdHlwZV9uYW1lKHN5bS0+dHlwZSkpOw0KICAgICsJaWYgKHN5bV9pc19jaG9p
Y2Uoc3ltKSkNCiAgICArCQlkZWJ1ZyArPSAiIChjaG9pY2UpIjsNCiAgICArCWRlYnVnICs9ICI8
YnI+IjsNCiAgICArCWlmIChzeW0tPnJldl9kZXAuZXhwcikgew0KICAgICsJCWRlYnVnICs9ICJy
ZXZlcnNlIGRlcDogIjsNCiAgICArCQlleHByX3ByaW50KHN5bS0+cmV2X2RlcC5leHByLCBleHBy
X3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsNCiAgICArCQlkZWJ1ZyArPSAiPGJyPiI7DQog
ICAgKwl9DQogICAgKwlmb3IgKHN0cnVjdCBwcm9wZXJ0eSAqcHJvcCA9IHN5bS0+cHJvcDsgcHJv
cDsgcHJvcCA9IHByb3AtPm5leHQpIHsNCiAgICArCQlzd2l0Y2ggKHByb3AtPnR5cGUpIHsNCiAg
ICArCQljYXNlIFBfUFJPTVBUOg0KICAgICsJCWNhc2UgUF9NRU5VOg0KICAgICsJCQlkZWJ1ZyAr
PSBRU3RyaW5nKCkuc3ByaW50ZigicHJvbXB0OiA8YSBocmVmPVwibSVwXCI+IiwgcHJvcC0+bWVu
dSk7DQogICAgKwkJCWRlYnVnICs9IHByaW50X2ZpbHRlcihwcm9wLT50ZXh0KTsNCiAgICArCQkJ
ZGVidWcgKz0gIjwvYT48YnI+IjsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSBQX0RFRkFV
TFQ6DQogICAgKwkJY2FzZSBQX1NFTEVDVDoNCiAgICArCQljYXNlIFBfUkFOR0U6DQogICAgKwkJ
CWRlYnVnICs9IHByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50eXBlKTsNCiAgICArCQkJZGVidWcg
Kz0gIjogIjsNCiAgICArCQkJZXhwcl9wcmludChwcm9wLT5leHByLCBleHByX3ByaW50X2hlbHAs
ICZkZWJ1ZywgRV9OT05FKTsNCiAgICArCQkJZGVidWcgKz0gIjxicj4iOw0KICAgICsJCQlicmVh
azsNCiAgICArCQljYXNlIFBfQ0hPSUNFOg0KICAgICsJCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0p
KSB7DQogICAgKwkJCQlkZWJ1ZyArPSAiY2hvaWNlOiAiOw0KICAgICsJCQkJZXhwcl9wcmludChw
cm9wLT5leHByLCBleHByX3ByaW50X2hlbHAsICZkZWJ1ZywgRV9OT05FKTsNCiAgICArCQkJCWRl
YnVnICs9ICI8YnI+IjsNCiAgICArCQkJfQ0KICAgICsJCQlicmVhazsNCiAgICArCQlkZWZhdWx0
Og0KICAgICsJCQlkZWJ1ZyArPSAidW5rbm93biBwcm9wZXJ0eTogIjsNCiAgICArCQkJZGVidWcg
Kz0gcHJvcF9nZXRfdHlwZV9uYW1lKHByb3AtPnR5cGUpOw0KICAgICsJCQlkZWJ1ZyArPSAiPGJy
PiI7DQogICAgKwkJfQ0KICAgICsJCWlmIChwcm9wLT52aXNpYmxlLmV4cHIpIHsNCiAgICArCQkJ
ZGVidWcgKz0gIiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO2RlcDogIjsNCiAgICArCQkJZXhwcl9w
cmludChwcm9wLT52aXNpYmxlLmV4cHIsIGV4cHJfcHJpbnRfaGVscCwgJmRlYnVnLCBFX05PTkUp
Ow0KICAgICsJCQlkZWJ1ZyArPSAiPGJyPiI7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsJZGVi
dWcgKz0gIjxicj4iOw0KICAgICsNCiAgICArCXJldHVybiBkZWJ1ZzsNCiAgICArfQ0KICAgICsN
CiAgICArUVN0cmluZyBDb25maWdJbmZvVmlldzo6cHJpbnRfZmlsdGVyKGNvbnN0IFFTdHJpbmcg
JnN0cikNCiAgICArew0KICAgICsJUVJlZ0V4cCByZSgiWzw+JlwiXFxuXSIpOw0KICAgICsJUVN0
cmluZyByZXMgPSBzdHI7DQogICAgKwlmb3IgKGludCBpID0gMDsgKGkgPSByZXMuaW5kZXhPZihy
ZSwgaSkpID49IDA7KSB7DQogICAgKwkJc3dpdGNoIChyZXNbaV0udG9MYXRpbjEoKSkgew0KICAg
ICsJCWNhc2UgJzwnOg0KICAgICsJCQlyZXMucmVwbGFjZShpLCAxLCAiJmx0OyIpOw0KICAgICsJ
CQlpICs9IDQ7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgJz4nOg0KICAgICsJCQlyZXMu
cmVwbGFjZShpLCAxLCAiJmd0OyIpOw0KICAgICsJCQlpICs9IDQ7DQogICAgKwkJCWJyZWFrOw0K
ICAgICsJCWNhc2UgJyYnOg0KICAgICsJCQlyZXMucmVwbGFjZShpLCAxLCAiJmFtcDsiKTsNCiAg
ICArCQkJaSArPSA1Ow0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlICciJzoNCiAgICArCQkJ
cmVzLnJlcGxhY2UoaSwgMSwgIiZxdW90OyIpOw0KICAgICsJCQlpICs9IDY7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgJ1xuJzoNCiAgICArCQkJcmVzLnJlcGxhY2UoaSwgMSwgIjxicj4i
KTsNCiAgICArCQkJaSArPSA0Ow0KICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwl9DQog
ICAgKwlyZXR1cm4gcmVzOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ0luZm9WaWV3
OjpleHByX3ByaW50X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBj
aGFyICpzdHIpDQogICAgK3sNCiAgICArCVFTdHJpbmcqIHRleHQgPSByZWludGVycHJldF9jYXN0
PFFTdHJpbmcqPihkYXRhKTsNCiAgICArCVFTdHJpbmcgc3RyMiA9IHByaW50X2ZpbHRlcihzdHIp
Ow0KICAgICsNCiAgICArCWlmIChzeW0gJiYgc3ltLT5uYW1lICYmICEoc3ltLT5mbGFncyAmIFNZ
TUJPTF9DT05TVCkpIHsNCiAgICArCQkqdGV4dCArPSBRU3RyaW5nKCkuc3ByaW50ZigiPGEgaHJl
Zj1cInMlcFwiPiIsIHN5bSk7DQogICAgKwkJKnRleHQgKz0gc3RyMjsNCiAgICArCQkqdGV4dCAr
PSAiPC9hPiI7DQogICAgKwl9IGVsc2UNCiAgICArCQkqdGV4dCArPSBzdHIyOw0KICAgICt9DQog
ICAgKw0KICAgICtRTWVudSogQ29uZmlnSW5mb1ZpZXc6OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1l
bnUoY29uc3QgUVBvaW50ICYgcG9zKQ0KICAgICt7DQogICAgKwlRTWVudSogcG9wdXAgPSBQYXJl
bnQ6OmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUocG9zKTsNCiAgICArCVFBY3Rpb24qIGFjdGlv
biA9IG5ldyBRQWN0aW9uKCJTaG93IERlYnVnIEluZm8iLCBwb3B1cCk7DQogICAgKwkgIGFjdGlv
bi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJICBjb25uZWN0KGFjdGlvbiwgU0lHTkFMKHRv
Z2dsZWQoYm9vbCkpLCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOw0KICAgICsJICBjb25uZWN0
KHRoaXMsIFNJR05BTChzaG93RGVidWdDaGFuZ2VkKGJvb2wpKSwgYWN0aW9uLCBTTE9UKHNldE9u
KGJvb2wpKSk7DQogICAgKwkgIGFjdGlvbi0+c2V0Q2hlY2tlZChzaG93RGVidWcoKSk7DQogICAg
Kwlwb3B1cC0+YWRkU2VwYXJhdG9yKCk7DQogICAgKwlwb3B1cC0+YWRkQWN0aW9uKGFjdGlvbik7
DQogICAgKwlyZXR1cm4gcG9wdXA7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnSW5m
b1ZpZXc6OmNvbnRleHRNZW51RXZlbnQoUUNvbnRleHRNZW51RXZlbnQgKmUpDQogICAgK3sNCiAg
ICArCVBhcmVudDo6Y29udGV4dE1lbnVFdmVudChlKTsNCiAgICArfQ0KICAgICsNCiAgICArQ29u
ZmlnU2VhcmNoV2luZG93OjpDb25maWdTZWFyY2hXaW5kb3coQ29uZmlnTWFpbldpbmRvdyogcGFy
ZW50LCBjb25zdCBjaGFyICpuYW1lKQ0KICAgICsJOiBQYXJlbnQocGFyZW50KSwgcmVzdWx0KE5V
TEwpDQogICAgK3sNCiAgICArCXNldE9iamVjdE5hbWUobmFtZSk7DQogICAgKwlzZXRXaW5kb3dU
aXRsZSgiU2VhcmNoIENvbmZpZyIpOw0KICAgICsNCiAgICArCVFWQm94TGF5b3V0KiBsYXlvdXQx
ID0gbmV3IFFWQm94TGF5b3V0KHRoaXMpOw0KICAgICsJbGF5b3V0MS0+c2V0Q29udGVudHNNYXJn
aW5zKDExLCAxMSwgMTEsIDExKTsNCiAgICArCWxheW91dDEtPnNldFNwYWNpbmcoNik7DQogICAg
KwlRSEJveExheW91dCogbGF5b3V0MiA9IG5ldyBRSEJveExheW91dCgwKTsNCiAgICArCWxheW91
dDItPnNldENvbnRlbnRzTWFyZ2lucygwLCAwLCAwLCAwKTsNCiAgICArCWxheW91dDItPnNldFNw
YWNpbmcoNik7DQogICAgKwlsYXlvdXQyLT5hZGRXaWRnZXQobmV3IFFMYWJlbCgiRmluZDoiLCB0
aGlzKSk7DQogICAgKwllZGl0RmllbGQgPSBuZXcgUUxpbmVFZGl0KHRoaXMpOw0KICAgICsJY29u
bmVjdChlZGl0RmllbGQsIFNJR05BTChyZXR1cm5QcmVzc2VkKCkpLCBTTE9UKHNlYXJjaCgpKSk7
DQogICAgKwlsYXlvdXQyLT5hZGRXaWRnZXQoZWRpdEZpZWxkKTsNCiAgICArCXNlYXJjaEJ1dHRv
biA9IG5ldyBRUHVzaEJ1dHRvbigiU2VhcmNoIiwgdGhpcyk7DQogICAgKwlzZWFyY2hCdXR0b24t
PnNldEF1dG9EZWZhdWx0KGZhbHNlKTsNCiAgICArCWNvbm5lY3Qoc2VhcmNoQnV0dG9uLCBTSUdO
QUwoY2xpY2tlZCgpKSwgU0xPVChzZWFyY2goKSkpOw0KICAgICsJbGF5b3V0Mi0+YWRkV2lkZ2V0
KHNlYXJjaEJ1dHRvbik7DQogICAgKwlsYXlvdXQxLT5hZGRMYXlvdXQobGF5b3V0Mik7DQogICAg
Kw0KICAgICsJc3BsaXQgPSBuZXcgUVNwbGl0dGVyKHRoaXMpOw0KICAgICsJc3BsaXQtPnNldE9y
aWVudGF0aW9uKFF0OjpWZXJ0aWNhbCk7DQogICAgKwlsaXN0ID0gbmV3IENvbmZpZ1ZpZXcoc3Bs
aXQsIG5hbWUpOw0KICAgICsJbGlzdC0+bGlzdC0+bW9kZSA9IGxpc3RNb2RlOw0KICAgICsJaW5m
byA9IG5ldyBDb25maWdJbmZvVmlldyhzcGxpdCwgbmFtZSk7DQogICAgKwljb25uZWN0KGxpc3Qt
Pmxpc3QsIFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJaW5mbywg
U0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgKwljb25uZWN0KGxpc3QtPmxpc3Qs
IFNJR05BTChtZW51Q2hhbmdlZChzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJcGFyZW50LCBTTE9U
KHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICopKSk7DQogICAgKw0KICAgICsJbGF5b3V0MS0+YWRk
V2lkZ2V0KHNwbGl0KTsNCiAgICArDQogICAgKwlpZiAobmFtZSkgew0KICAgICsJCVFWYXJpYW50
IHgsIHk7DQogICAgKwkJaW50IHdpZHRoLCBoZWlnaHQ7DQogICAgKwkJYm9vbCBvazsNCiAgICAr
DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAobmFtZSk7DQogICAgKwkJd2lkdGgg
PSBjb25maWdTZXR0aW5ncy0+dmFsdWUoIi93aW5kb3cgd2lkdGgiLCBwYXJlbnQtPndpZHRoKCkg
LyAyKS50b0ludCgpOw0KICAgICsJCWhlaWdodCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dp
bmRvdyBoZWlnaHQiLCBwYXJlbnQtPmhlaWdodCgpIC8gMikudG9JbnQoKTsNCiAgICArCQlyZXNp
emUod2lkdGgsIGhlaWdodCk7DQogICAgKwkJeCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dp
bmRvdyB4Iik7DQogICAgKwkJeSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB5Iik7
DQogICAgKwkJaWYgKCh4LmlzVmFsaWQoKSkmJih5LmlzVmFsaWQoKSkpDQogICAgKwkJCW1vdmUo
eC50b0ludCgpLCB5LnRvSW50KCkpOw0KICAgICsJCVFMaXN0PGludD4gc2l6ZXMgPSBjb25maWdT
ZXR0aW5ncy0+cmVhZFNpemVzKCIvc3BsaXQiLCAmb2spOw0KICAgICsJCWlmIChvaykNCiAgICAr
CQkJc3BsaXQtPnNldFNpemVzKHNpemVzKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+ZW5kR3Jv
dXAoKTsNCiAgICArCQljb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGFib3V0VG9RdWl0KCkpLCBT
TE9UKHNhdmVTZXR0aW5ncygpKSk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQg
Q29uZmlnU2VhcmNoV2luZG93OjpzYXZlU2V0dGluZ3Modm9pZCkNCiAgICArew0KICAgICsJaWYg
KCFvYmplY3ROYW1lKCkuaXNFbXB0eSgpKSB7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPmJlZ2lu
R3JvdXAob2JqZWN0TmFtZSgpKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi93
aW5kb3cgeCIsIHBvcygpLngoKSk7DQogICAgKwkJY29uZmlnU2V0dGluZ3MtPnNldFZhbHVlKCIv
d2luZG93IHkiLCBwb3MoKS55KCkpOw0KICAgICsJCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgi
L3dpbmRvdyB3aWR0aCIsIHNpemUoKS53aWR0aCgpKTsNCiAgICArCQljb25maWdTZXR0aW5ncy0+
c2V0VmFsdWUoIi93aW5kb3cgaGVpZ2h0Iiwgc2l6ZSgpLmhlaWdodCgpKTsNCiAgICArCQljb25m
aWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0Iiwgc3BsaXQtPnNpemVzKCkpOw0KICAgICsJ
CWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAg
ICt2b2lkIENvbmZpZ1NlYXJjaFdpbmRvdzo6c2VhcmNoKHZvaWQpDQogICAgK3sNCiAgICArCXN0
cnVjdCBzeW1ib2wgKipwOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJQ29u
ZmlnSXRlbSAqbGFzdEl0ZW0gPSBOVUxMOw0KICAgICsNCiAgICArCWZyZWUocmVzdWx0KTsNCiAg
ICArCWxpc3QtPmxpc3QtPmNsZWFyKCk7DQogICAgKwlpbmZvLT5jbGVhcigpOw0KICAgICsNCiAg
ICArCXJlc3VsdCA9IHN5bV9yZV9zZWFyY2goZWRpdEZpZWxkLT50ZXh0KCkudG9MYXRpbjEoKSk7
DQogICAgKwlpZiAoIXJlc3VsdCkNCiAgICArCQlyZXR1cm47DQogICAgKwlmb3IgKHAgPSByZXN1
bHQ7ICpwOyBwKyspIHsNCiAgICArCQlmb3JfYWxsX3Byb21wdHMoKCpwKSwgcHJvcCkNCiAgICAr
CQkJbGFzdEl0ZW0gPSBuZXcgQ29uZmlnSXRlbShsaXN0LT5saXN0LCBsYXN0SXRlbSwgcHJvcC0+
bWVudSwNCiAgICArCQkJCQkJICBtZW51X2lzX3Zpc2libGUocHJvcC0+bWVudSkpOw0KICAgICsJ
fQ0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBDb25zdHJ1Y3QgdGhlIGNvbXBsZXRl
IGNvbmZpZyB3aWRnZXQNCiAgICArICovDQogICAgK0NvbmZpZ01haW5XaW5kb3c6OkNvbmZpZ01h
aW5XaW5kb3codm9pZCkNCiAgICArCTogc2VhcmNoV2luZG93KDApDQogICAgK3sNCiAgICArCVFN
ZW51QmFyKiBtZW51Ow0KICAgICsJYm9vbCBvayA9IHRydWU7DQogICAgKwlRVmFyaWFudCB4LCB5
Ow0KICAgICsJaW50IHdpZHRoLCBoZWlnaHQ7DQogICAgKwljaGFyIHRpdGxlWzI1Nl07DQogICAg
Kw0KICAgICsJUURlc2t0b3BXaWRnZXQgKmQgPSBjb25maWdBcHAtPmRlc2t0b3AoKTsNCiAgICAr
CXNucHJpbnRmKHRpdGxlLCBzaXplb2YodGl0bGUpLCAiJXMlcyIsDQogICAgKwkJcm9vdG1lbnUu
cHJvbXB0LT50ZXh0LA0KICAgICsJCSIiDQogICAgKwkJKTsNCiAgICArCXNldFdpbmRvd1RpdGxl
KHRpdGxlKTsNCiAgICArDQogICAgKwl3aWR0aCA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dp
bmRvdyB3aWR0aCIsIGQtPndpZHRoKCkgLSA2NCkudG9JbnQoKTsNCiAgICArCWhlaWdodCA9IGNv
bmZpZ1NldHRpbmdzLT52YWx1ZSgiL3dpbmRvdyBoZWlnaHQiLCBkLT5oZWlnaHQoKSAtIDY0KS50
b0ludCgpOw0KICAgICsJcmVzaXplKHdpZHRoLCBoZWlnaHQpOw0KICAgICsJeCA9IGNvbmZpZ1Nl
dHRpbmdzLT52YWx1ZSgiL3dpbmRvdyB4Iik7DQogICAgKwl5ID0gY29uZmlnU2V0dGluZ3MtPnZh
bHVlKCIvd2luZG93IHkiKTsNCiAgICArCWlmICgoeC5pc1ZhbGlkKCkpJiYoeS5pc1ZhbGlkKCkp
KQ0KICAgICsJCW1vdmUoeC50b0ludCgpLCB5LnRvSW50KCkpOw0KICAgICsNCiAgICArCXNwbGl0
MSA9IG5ldyBRU3BsaXR0ZXIodGhpcyk7DQogICAgKwlzcGxpdDEtPnNldE9yaWVudGF0aW9uKFF0
OjpIb3Jpem9udGFsKTsNCiAgICArCXNldENlbnRyYWxXaWRnZXQoc3BsaXQxKTsNCiAgICArDQog
ICAgKwltZW51VmlldyA9IG5ldyBDb25maWdWaWV3KHNwbGl0MSwgIm1lbnUiKTsNCiAgICArCW1l
bnVMaXN0ID0gbWVudVZpZXctPmxpc3Q7DQogICAgKw0KICAgICsJc3BsaXQyID0gbmV3IFFTcGxp
dHRlcihzcGxpdDEpOw0KICAgICsJc3BsaXQyLT5zZXRPcmllbnRhdGlvbihRdDo6VmVydGljYWwp
Ow0KICAgICsNCiAgICArCS8vIGNyZWF0ZSBjb25maWcgdHJlZQ0KICAgICsJY29uZmlnVmlldyA9
IG5ldyBDb25maWdWaWV3KHNwbGl0MiwgImNvbmZpZyIpOw0KICAgICsJY29uZmlnTGlzdCA9IGNv
bmZpZ1ZpZXctPmxpc3Q7DQogICAgKw0KICAgICsJaGVscFRleHQgPSBuZXcgQ29uZmlnSW5mb1Zp
ZXcoc3BsaXQyLCAiaGVscCIpOw0KICAgICsNCiAgICArCXNldFRhYk9yZGVyKGNvbmZpZ0xpc3Qs
IGhlbHBUZXh0KTsNCiAgICArCWNvbmZpZ0xpc3QtPnNldEZvY3VzKCk7DQogICAgKw0KICAgICsJ
bWVudSA9IG1lbnVCYXIoKTsNCiAgICArCXRvb2xCYXIgPSBuZXcgUVRvb2xCYXIoIlRvb2xzIiwg
dGhpcyk7DQogICAgKwlhZGRUb29sQmFyKHRvb2xCYXIpOw0KICAgICsNCiAgICArCWJhY2tBY3Rp
b24gPSBuZXcgUUFjdGlvbihRUGl4bWFwKHhwbV9iYWNrKSwgIkJhY2siLCB0aGlzKTsNCiAgICAr
CSAgY29ubmVjdChiYWNrQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChnb0Jh
Y2soKSkpOw0KICAgICsJICBiYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsNCiAgICArCVFB
Y3Rpb24gKnF1aXRBY3Rpb24gPSBuZXcgUUFjdGlvbigiJlF1aXQiLCB0aGlzKTsNCiAgICArCXF1
aXRBY3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6OktleV9RKTsNCiAgICArCSAgY29u
bmVjdChxdWl0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChjbG9zZSgpKSk7
DQogICAgKwlRQWN0aW9uICpsb2FkQWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fbG9h
ZCksICImTG9hZCIsIHRoaXMpOw0KICAgICsJbG9hZEFjdGlvbi0+c2V0U2hvcnRjdXQoUXQ6OkNU
UkwgKyBRdDo6S2V5X0wpOw0KICAgICsJICBjb25uZWN0KGxvYWRBY3Rpb24sIFNJR05BTCh0cmln
Z2VyZWQoYm9vbCkpLCBTTE9UKGxvYWRDb25maWcoKSkpOw0KICAgICsJc2F2ZUFjdGlvbiA9IG5l
dyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NhdmUpLCAiJlNhdmUiLCB0aGlzKTsNCiAgICArCXNhdmVB
Y3Rpb24tPnNldFNob3J0Y3V0KFF0OjpDVFJMICsgUXQ6OktleV9TKTsNCiAgICArCSAgY29ubmVj
dChzYXZlQWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzYXZlQ29uZmlnKCkp
KTsNCiAgICArCWNvbmZfc2V0X2NoYW5nZWRfY2FsbGJhY2soY29uZl9jaGFuZ2VkKTsNCiAgICAr
CS8vIFNldCBzYXZlQWN0aW9uJ3MgaW5pdGlhbCBzdGF0ZQ0KICAgICsJY29uZl9jaGFuZ2VkKCk7
DQogICAgKwljb25maWduYW1lID0geHN0cmR1cChjb25mX2dldF9jb25maWduYW1lKCkpOw0KICAg
ICsNCiAgICArCVFBY3Rpb24gKnNhdmVBc0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJTYXZlICZBcy4u
LiIsIHRoaXMpOw0KICAgICsJICBjb25uZWN0KHNhdmVBc0FjdGlvbiwgU0lHTkFMKHRyaWdnZXJl
ZChib29sKSksIFNMT1Qoc2F2ZUNvbmZpZ0FzKCkpKTsNCiAgICArCVFBY3Rpb24gKnNlYXJjaEFj
dGlvbiA9IG5ldyBRQWN0aW9uKCImRmluZCIsIHRoaXMpOw0KICAgICsJc2VhcmNoQWN0aW9uLT5z
ZXRTaG9ydGN1dChRdDo6Q1RSTCArIFF0OjpLZXlfRik7DQogICAgKwkgIGNvbm5lY3Qoc2VhcmNo
QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzZWFyY2hDb25maWcoKSkpOw0K
ICAgICsJc2luZ2xlVmlld0FjdGlvbiA9IG5ldyBRQWN0aW9uKFFQaXhtYXAoeHBtX3NpbmdsZV92
aWV3KSwgIlNpbmdsZSBWaWV3IiwgdGhpcyk7DQogICAgKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRD
aGVja2FibGUodHJ1ZSk7DQogICAgKwkgIGNvbm5lY3Qoc2luZ2xlVmlld0FjdGlvbiwgU0lHTkFM
KHRyaWdnZXJlZChib29sKSksIFNMT1Qoc2hvd1NpbmdsZVZpZXcoKSkpOw0KICAgICsJc3BsaXRW
aWV3QWN0aW9uID0gbmV3IFFBY3Rpb24oUVBpeG1hcCh4cG1fc3BsaXRfdmlldyksICJTcGxpdCBW
aWV3IiwgdGhpcyk7DQogICAgKwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsN
CiAgICArCSAgY29ubmVjdChzcGxpdFZpZXdBY3Rpb24sIFNJR05BTCh0cmlnZ2VyZWQoYm9vbCkp
LCBTTE9UKHNob3dTcGxpdFZpZXcoKSkpOw0KICAgICsJZnVsbFZpZXdBY3Rpb24gPSBuZXcgUUFj
dGlvbihRUGl4bWFwKHhwbV90cmVlX3ZpZXcpLCAiRnVsbCBWaWV3IiwgdGhpcyk7DQogICAgKwlm
dWxsVmlld0FjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJICBjb25uZWN0KGZ1bGxW
aWV3QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93RnVsbFZpZXcoKSkp
Ow0KICAgICsNCiAgICArCVFBY3Rpb24gKnNob3dOYW1lQWN0aW9uID0gbmV3IFFBY3Rpb24oIlNo
b3cgTmFtZSIsIHRoaXMpOw0KICAgICsJICBzaG93TmFtZUFjdGlvbi0+c2V0Q2hlY2thYmxlKHRy
dWUpOw0KICAgICsJICBjb25uZWN0KHNob3dOYW1lQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChib29s
KSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd05hbWUoYm9vbCkpKTsNCiAgICArCSAgc2hvd05h
bWVBY3Rpb24tPnNldENoZWNrZWQoY29uZmlnVmlldy0+c2hvd05hbWUoKSk7DQogICAgKwlRQWN0
aW9uICpzaG93UmFuZ2VBY3Rpb24gPSBuZXcgUUFjdGlvbigiU2hvdyBSYW5nZSIsIHRoaXMpOw0K
ICAgICsJICBzaG93UmFuZ2VBY3Rpb24tPnNldENoZWNrYWJsZSh0cnVlKTsNCiAgICArCSAgY29u
bmVjdChzaG93UmFuZ2VBY3Rpb24sIFNJR05BTCh0b2dnbGVkKGJvb2wpKSwgY29uZmlnVmlldywg
U0xPVChzZXRTaG93UmFuZ2UoYm9vbCkpKTsNCiAgICArCVFBY3Rpb24gKnNob3dEYXRhQWN0aW9u
ID0gbmV3IFFBY3Rpb24oIlNob3cgRGF0YSIsIHRoaXMpOw0KICAgICsJICBzaG93RGF0YUFjdGlv
bi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAgICsJICBjb25uZWN0KHNob3dEYXRhQWN0aW9uLCBT
SUdOQUwodG9nZ2xlZChib29sKSksIGNvbmZpZ1ZpZXcsIFNMT1Qoc2V0U2hvd0RhdGEoYm9vbCkp
KTsNCiAgICArDQogICAgKwlRQWN0aW9uR3JvdXAgKm9wdEdyb3VwID0gbmV3IFFBY3Rpb25Hcm91
cCh0aGlzKTsNCiAgICArCW9wdEdyb3VwLT5zZXRFeGNsdXNpdmUodHJ1ZSk7DQogICAgKwljb25u
ZWN0KG9wdEdyb3VwLCBTSUdOQUwodHJpZ2dlcmVkKFFBY3Rpb24qKSksIGNvbmZpZ1ZpZXcsDQog
ICAgKwkJU0xPVChzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKikpKTsNCiAgICArCWNvbm5lY3Qob3B0
R3JvdXAsIFNJR05BTCh0cmlnZ2VyZWQoUUFjdGlvbiAqKSksIG1lbnVWaWV3LA0KICAgICsJCVNM
T1Qoc2V0T3B0aW9uTW9kZShRQWN0aW9uICopKSk7DQogICAgKw0KICAgICsJY29uZmlnVmlldy0+
c2hvd05vcm1hbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IE5vcm1hbCBPcHRpb25zIiwgb3B0
R3JvdXApOw0KICAgICsJY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJT
aG93IEFsbCBPcHRpb25zIiwgb3B0R3JvdXApOw0KICAgICsJY29uZmlnVmlldy0+c2hvd1Byb21w
dEFjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IFByb21wdCBPcHRpb25zIiwgb3B0R3JvdXApOw0K
ICAgICsJY29uZmlnVmlldy0+c2hvd05vcm1hbEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0K
ICAgICsJY29uZmlnVmlldy0+c2hvd0FsbEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAg
ICsJY29uZmlnVmlldy0+c2hvd1Byb21wdEFjdGlvbi0+c2V0Q2hlY2thYmxlKHRydWUpOw0KICAg
ICsNCiAgICArCVFBY3Rpb24gKnNob3dEZWJ1Z0FjdGlvbiA9IG5ldyBRQWN0aW9uKCJTaG93IERl
YnVnIEluZm8iLCB0aGlzKTsNCiAgICArCSAgc2hvd0RlYnVnQWN0aW9uLT5zZXRDaGVja2FibGUo
dHJ1ZSk7DQogICAgKwkgIGNvbm5lY3Qoc2hvd0RlYnVnQWN0aW9uLCBTSUdOQUwodG9nZ2xlZChi
b29sKSksIGhlbHBUZXh0LCBTTE9UKHNldFNob3dEZWJ1Zyhib29sKSkpOw0KICAgICsJICBzaG93
RGVidWdBY3Rpb24tPnNldENoZWNrZWQoaGVscFRleHQtPnNob3dEZWJ1ZygpKTsNCiAgICArDQog
ICAgKwlRQWN0aW9uICpzaG93SW50cm9BY3Rpb24gPSBuZXcgUUFjdGlvbigiSW50cm9kdWN0aW9u
IiwgdGhpcyk7DQogICAgKwkgIGNvbm5lY3Qoc2hvd0ludHJvQWN0aW9uLCBTSUdOQUwodHJpZ2dl
cmVkKGJvb2wpKSwgU0xPVChzaG93SW50cm8oKSkpOw0KICAgICsJUUFjdGlvbiAqc2hvd0Fib3V0
QWN0aW9uID0gbmV3IFFBY3Rpb24oIkFib3V0IiwgdGhpcyk7DQogICAgKwkgIGNvbm5lY3Qoc2hv
d0Fib3V0QWN0aW9uLCBTSUdOQUwodHJpZ2dlcmVkKGJvb2wpKSwgU0xPVChzaG93QWJvdXQoKSkp
Ow0KICAgICsNCiAgICArCS8vIGluaXQgdG9vbCBiYXINCiAgICArCXRvb2xCYXItPmFkZEFjdGlv
bihiYWNrQWN0aW9uKTsNCiAgICArCXRvb2xCYXItPmFkZFNlcGFyYXRvcigpOw0KICAgICsJdG9v
bEJhci0+YWRkQWN0aW9uKGxvYWRBY3Rpb24pOw0KICAgICsJdG9vbEJhci0+YWRkQWN0aW9uKHNh
dmVBY3Rpb24pOw0KICAgICsJdG9vbEJhci0+YWRkU2VwYXJhdG9yKCk7DQogICAgKwl0b29sQmFy
LT5hZGRBY3Rpb24oc2luZ2xlVmlld0FjdGlvbik7DQogICAgKwl0b29sQmFyLT5hZGRBY3Rpb24o
c3BsaXRWaWV3QWN0aW9uKTsNCiAgICArCXRvb2xCYXItPmFkZEFjdGlvbihmdWxsVmlld0FjdGlv
bik7DQogICAgKw0KICAgICsJLy8gY3JlYXRlIGNvbmZpZyBtZW51DQogICAgKwlRTWVudSogY29u
ZmlnID0gbWVudS0+YWRkTWVudSgiJkZpbGUiKTsNCiAgICArCWNvbmZpZy0+YWRkQWN0aW9uKGxv
YWRBY3Rpb24pOw0KICAgICsJY29uZmlnLT5hZGRBY3Rpb24oc2F2ZUFjdGlvbik7DQogICAgKwlj
b25maWctPmFkZEFjdGlvbihzYXZlQXNBY3Rpb24pOw0KICAgICsJY29uZmlnLT5hZGRTZXBhcmF0
b3IoKTsNCiAgICArCWNvbmZpZy0+YWRkQWN0aW9uKHF1aXRBY3Rpb24pOw0KICAgICsNCiAgICAr
CS8vIGNyZWF0ZSBlZGl0IG1lbnUNCiAgICArCVFNZW51KiBlZGl0TWVudSA9IG1lbnUtPmFkZE1l
bnUoIiZFZGl0Iik7DQogICAgKwllZGl0TWVudS0+YWRkQWN0aW9uKHNlYXJjaEFjdGlvbik7DQog
ICAgKw0KICAgICsJLy8gY3JlYXRlIG9wdGlvbnMgbWVudQ0KICAgICsJUU1lbnUqIG9wdGlvbk1l
bnUgPSBtZW51LT5hZGRNZW51KCImT3B0aW9uIik7DQogICAgKwlvcHRpb25NZW51LT5hZGRBY3Rp
b24oc2hvd05hbWVBY3Rpb24pOw0KICAgICsJb3B0aW9uTWVudS0+YWRkQWN0aW9uKHNob3dSYW5n
ZUFjdGlvbik7DQogICAgKwlvcHRpb25NZW51LT5hZGRBY3Rpb24oc2hvd0RhdGFBY3Rpb24pOw0K
ICAgICsJb3B0aW9uTWVudS0+YWRkU2VwYXJhdG9yKCk7DQogICAgKwlvcHRpb25NZW51LT5hZGRB
Y3Rpb25zKG9wdEdyb3VwLT5hY3Rpb25zKCkpOw0KICAgICsJb3B0aW9uTWVudS0+YWRkU2VwYXJh
dG9yKCk7DQogICAgKwlvcHRpb25NZW51LT5hZGRBY3Rpb24oc2hvd0RlYnVnQWN0aW9uKTsNCiAg
ICArDQogICAgKwkvLyBjcmVhdGUgaGVscCBtZW51DQogICAgKwltZW51LT5hZGRTZXBhcmF0b3Io
KTsNCiAgICArCVFNZW51KiBoZWxwTWVudSA9IG1lbnUtPmFkZE1lbnUoIiZIZWxwIik7DQogICAg
KwloZWxwTWVudS0+YWRkQWN0aW9uKHNob3dJbnRyb0FjdGlvbik7DQogICAgKwloZWxwTWVudS0+
YWRkQWN0aW9uKHNob3dBYm91dEFjdGlvbik7DQogICAgKw0KICAgICsJY29ubmVjdChjb25maWdM
aXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0KICAgICsJCWhlbHBUZXh0
LCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsNCiAgICArCWNvbm5lY3QoY29uZmlnTGlz
dCwgU0lHTkFMKG1lbnVTZWxlY3RlZChzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJU0xPVChjaGFu
Z2VNZW51KHN0cnVjdCBtZW51ICopKSk7DQogICAgKwljb25uZWN0KGNvbmZpZ0xpc3QsIFNJR05B
TChwYXJlbnRTZWxlY3RlZCgpKSwNCiAgICArCQlTTE9UKGdvQmFjaygpKSk7DQogICAgKwljb25u
ZWN0KG1lbnVMaXN0LCBTSUdOQUwobWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKikpLA0KICAgICsJ
CWhlbHBUZXh0LCBTTE9UKHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsNCiAgICArCWNvbm5lY3Qo
bWVudUxpc3QsIFNJR05BTChtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKikpLA0KICAgICsJCVNM
T1QoY2hhbmdlTWVudShzdHJ1Y3QgbWVudSAqKSkpOw0KICAgICsNCiAgICArCWNvbm5lY3QoY29u
ZmlnTGlzdCwgU0lHTkFMKGdvdEZvY3VzKHN0cnVjdCBtZW51ICopKSwNCiAgICArCQloZWxwVGV4
dCwgU0xPVChzZXRJbmZvKHN0cnVjdCBtZW51ICopKSk7DQogICAgKwljb25uZWN0KG1lbnVMaXN0
LCBTSUdOQUwoZ290Rm9jdXMoc3RydWN0IG1lbnUgKikpLA0KICAgICsJCWhlbHBUZXh0LCBTTE9U
KHNldEluZm8oc3RydWN0IG1lbnUgKikpKTsNCiAgICArCWNvbm5lY3QobWVudUxpc3QsIFNJR05B
TChnb3RGb2N1cyhzdHJ1Y3QgbWVudSAqKSksDQogICAgKwkJU0xPVChsaXN0Rm9jdXNDaGFuZ2Vk
KHZvaWQpKSk7DQogICAgKwljb25uZWN0KGhlbHBUZXh0LCBTSUdOQUwobWVudVNlbGVjdGVkKHN0
cnVjdCBtZW51ICopKSwNCiAgICArCQlTTE9UKHNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICopKSk7
DQogICAgKw0KICAgICsJUVN0cmluZyBsaXN0TW9kZSA9IGNvbmZpZ1NldHRpbmdzLT52YWx1ZSgi
L2xpc3RNb2RlIiwgInN5bWJvbCIpLnRvU3RyaW5nKCk7DQogICAgKwlpZiAobGlzdE1vZGUgPT0g
InNpbmdsZSIpDQogICAgKwkJc2hvd1NpbmdsZVZpZXcoKTsNCiAgICArCWVsc2UgaWYgKGxpc3RN
b2RlID09ICJmdWxsIikNCiAgICArCQlzaG93RnVsbFZpZXcoKTsNCiAgICArCWVsc2UgLyppZiAo
bGlzdE1vZGUgPT0gInNwbGl0IikqLw0KICAgICsJCXNob3dTcGxpdFZpZXcoKTsNCiAgICArDQog
ICAgKwkvLyBVSSBzZXR1cCBkb25lLCByZXN0b3JlIHNwbGl0dGVyIHBvc2l0aW9ucw0KICAgICsJ
UUxpc3Q8aW50PiBzaXplcyA9IGNvbmZpZ1NldHRpbmdzLT5yZWFkU2l6ZXMoIi9zcGxpdDEiLCAm
b2spOw0KICAgICsJaWYgKG9rKQ0KICAgICsJCXNwbGl0MS0+c2V0U2l6ZXMoc2l6ZXMpOw0KICAg
ICsNCiAgICArCXNpemVzID0gY29uZmlnU2V0dGluZ3MtPnJlYWRTaXplcygiL3NwbGl0MiIsICZv
ayk7DQogICAgKwlpZiAob2spDQogICAgKwkJc3BsaXQyLT5zZXRTaXplcyhzaXplcyk7DQogICAg
K30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6bG9hZENvbmZpZyh2b2lkKQ0K
ICAgICt7DQogICAgKwlRU3RyaW5nIHN0cjsNCiAgICArCVFCeXRlQXJyYXkgYmE7DQogICAgKwlj
b25zdCBjaGFyICpuYW1lOw0KICAgICsNCiAgICArCXN0ciA9IFFGaWxlRGlhbG9nOjpnZXRPcGVu
RmlsZU5hbWUodGhpcywgIiIsIGNvbmZpZ25hbWUpOw0KICAgICsJaWYgKHN0ci5pc051bGwoKSkN
CiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJYmEgPSBzdHIudG9Mb2NhbDhCaXQoKTsNCiAg
ICArCW5hbWUgPSBiYS5kYXRhKCk7DQogICAgKw0KICAgICsJaWYgKGNvbmZfcmVhZChuYW1lKSkN
CiAgICArCQlRTWVzc2FnZUJveDo6aW5mb3JtYXRpb24odGhpcywgInFjb25mIiwgIlVuYWJsZSB0
byBsb2FkIGNvbmZpZ3VyYXRpb24hIik7DQogICAgKw0KICAgICsJZnJlZShjb25maWduYW1lKTsN
CiAgICArCWNvbmZpZ25hbWUgPSB4c3RyZHVwKG5hbWUpOw0KICAgICsNCiAgICArCUNvbmZpZ1Zp
ZXc6OnVwZGF0ZUxpc3RBbGwoKTsNCiAgICArfQ0KICAgICsNCiAgICArYm9vbCBDb25maWdNYWlu
V2luZG93OjpzYXZlQ29uZmlnKHZvaWQpDQogICAgK3sNCiAgICArCWlmIChjb25mX3dyaXRlKGNv
bmZpZ25hbWUpKSB7DQogICAgKwkJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29u
ZiIsICJVbmFibGUgdG8gc2F2ZSBjb25maWd1cmF0aW9uISIpOw0KICAgICsJCXJldHVybiBmYWxz
ZTsNCiAgICArCX0NCiAgICArCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7DQogICAgKw0KICAgICsJ
cmV0dXJuIHRydWU7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6
c2F2ZUNvbmZpZ0FzKHZvaWQpDQogICAgK3sNCiAgICArCVFTdHJpbmcgc3RyOw0KICAgICsJUUJ5
dGVBcnJheSBiYTsNCiAgICArCWNvbnN0IGNoYXIgKm5hbWU7DQogICAgKw0KICAgICsJc3RyID0g
UUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSh0aGlzLCAiIiwgY29uZmlnbmFtZSk7DQogICAg
KwlpZiAoc3RyLmlzTnVsbCgpKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAgKwliYSA9IHN0
ci50b0xvY2FsOEJpdCgpOw0KICAgICsJbmFtZSA9IGJhLmRhdGEoKTsNCiAgICArDQogICAgKwlp
ZiAoY29uZl93cml0ZShuYW1lKSkgew0KICAgICsJCVFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0
aGlzLCAicWNvbmYiLCAiVW5hYmxlIHRvIHNhdmUgY29uZmlndXJhdGlvbiEiKTsNCiAgICArCX0N
CiAgICArCWNvbmZfd3JpdGVfYXV0b2NvbmYoMCk7DQogICAgKw0KICAgICsJZnJlZShjb25maWdu
YW1lKTsNCiAgICArCWNvbmZpZ25hbWUgPSB4c3RyZHVwKG5hbWUpOw0KICAgICt9DQogICAgKw0K
ICAgICt2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNlYXJjaENvbmZpZyh2b2lkKQ0KICAgICt7DQog
ICAgKwlpZiAoIXNlYXJjaFdpbmRvdykNCiAgICArCQlzZWFyY2hXaW5kb3cgPSBuZXcgQ29uZmln
U2VhcmNoV2luZG93KHRoaXMsICJzZWFyY2giKTsNCiAgICArCXNlYXJjaFdpbmRvdy0+c2hvdygp
Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIENvbmZpZ01haW5XaW5kb3c6OmNoYW5nZU1lbnUo
c3RydWN0IG1lbnUgKm1lbnUpDQogICAgK3sNCiAgICArCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51
KG1lbnUpOw0KICAgICsJaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeS0+cGFyZW50ID09ICZyb290
bWVudSkNCiAgICArCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNlKTsNCiAgICArCWVsc2UN
CiAgICArCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOw0KICAgICt9DQogICAgKw0KICAg
ICt2b2lkIENvbmZpZ01haW5XaW5kb3c6OnNldE1lbnVMaW5rKHN0cnVjdCBtZW51ICptZW51KQ0K
ICAgICt7DQogICAgKwlzdHJ1Y3QgbWVudSAqcGFyZW50Ow0KICAgICsJQ29uZmlnTGlzdCogbGlz
dCA9IE5VTEw7DQogICAgKwlDb25maWdJdGVtKiBpdGVtOw0KICAgICsNCiAgICArCWlmIChjb25m
aWdMaXN0LT5tZW51U2tpcChtZW51KSkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJc3dp
dGNoIChjb25maWdMaXN0LT5tb2RlKSB7DQogICAgKwljYXNlIHNpbmdsZU1vZGU6DQogICAgKwkJ
bGlzdCA9IGNvbmZpZ0xpc3Q7DQogICAgKwkJcGFyZW50ID0gbWVudV9nZXRfcGFyZW50X21lbnUo
bWVudSk7DQogICAgKwkJaWYgKCFwYXJlbnQpDQogICAgKwkJCXJldHVybjsNCiAgICArCQlsaXN0
LT5zZXRSb290TWVudShwYXJlbnQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBzeW1ib2xN
b2RlOg0KICAgICsJCWlmIChtZW51LT5mbGFncyAmIE1FTlVfUk9PVCkgew0KICAgICsJCQljb25m
aWdMaXN0LT5zZXRSb290TWVudShtZW51KTsNCiAgICArCQkJY29uZmlnTGlzdC0+Y2xlYXJTZWxl
Y3Rpb24oKTsNCiAgICArCQkJbGlzdCA9IG1lbnVMaXN0Ow0KICAgICsJCX0gZWxzZSB7DQogICAg
KwkJCWxpc3QgPSBjb25maWdMaXN0Ow0KICAgICsJCQlwYXJlbnQgPSBtZW51X2dldF9wYXJlbnRf
bWVudShtZW51LT5wYXJlbnQpOw0KICAgICsJCQlpZiAoIXBhcmVudCkNCiAgICArCQkJCXJldHVy
bjsNCiAgICArCQkJaXRlbSA9IG1lbnVMaXN0LT5maW5kQ29uZmlnSXRlbShwYXJlbnQpOw0KICAg
ICsJCQlpZiAoaXRlbSkgew0KICAgICsJCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7DQogICAg
KwkJCQltZW51TGlzdC0+c2Nyb2xsVG9JdGVtKGl0ZW0pOw0KICAgICsJCQl9DQogICAgKwkJCWxp
c3QtPnNldFJvb3RNZW51KHBhcmVudCk7DQogICAgKwkJfQ0KICAgICsJCWJyZWFrOw0KICAgICsJ
Y2FzZSBmdWxsTW9kZToNCiAgICArCQlsaXN0ID0gY29uZmlnTGlzdDsNCiAgICArCQlicmVhazsN
CiAgICArCWRlZmF1bHQ6DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgKw0KICAgICsJaWYg
KGxpc3QpIHsNCiAgICArCQlpdGVtID0gbGlzdC0+ZmluZENvbmZpZ0l0ZW0obWVudSk7DQogICAg
KwkJaWYgKGl0ZW0pIHsNCiAgICArCQkJaXRlbS0+c2V0U2VsZWN0ZWQodHJ1ZSk7DQogICAgKwkJ
CWxpc3QtPnNjcm9sbFRvSXRlbShpdGVtKTsNCiAgICArCQkJbGlzdC0+c2V0Rm9jdXMoKTsNCiAg
ICArCQl9DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRv
dzo6bGlzdEZvY3VzQ2hhbmdlZCh2b2lkKQ0KICAgICt7DQogICAgKwlpZiAobWVudUxpc3QtPm1v
ZGUgPT0gbWVudU1vZGUpDQogICAgKwkJY29uZmlnTGlzdC0+Y2xlYXJTZWxlY3Rpb24oKTsNCiAg
ICArfQ0KICAgICsNCiAgICArdm9pZCBDb25maWdNYWluV2luZG93Ojpnb0JhY2sodm9pZCkNCiAg
ICArew0KICAgICsJQ29uZmlnSXRlbSogaXRlbSwgKm9sZFNlbGVjdGlvbjsNCiAgICArDQogICAg
Kwljb25maWdMaXN0LT5zZXRQYXJlbnRNZW51KCk7DQogICAgKwlpZiAoY29uZmlnTGlzdC0+cm9v
dEVudHJ5ID09ICZyb290bWVudSkNCiAgICArCQliYWNrQWN0aW9uLT5zZXRFbmFibGVkKGZhbHNl
KTsNCiAgICArDQogICAgKwlpZiAobWVudUxpc3QtPnNlbGVjdGVkSXRlbXMoKS5jb3VudCgpID09
IDApDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAgICArCWl0ZW0gPSAoQ29uZmlnSXRlbSopbWVu
dUxpc3QtPnNlbGVjdGVkSXRlbXMoKS5maXJzdCgpOw0KICAgICsJb2xkU2VsZWN0aW9uID0gaXRl
bTsNCiAgICArCXdoaWxlIChpdGVtKSB7DQogICAgKwkJaWYgKGl0ZW0tPm1lbnUgPT0gY29uZmln
TGlzdC0+cm9vdEVudHJ5KSB7DQogICAgKwkJCW9sZFNlbGVjdGlvbi0+c2V0U2VsZWN0ZWQoZmFs
c2UpOw0KICAgICsJCQlpdGVtLT5zZXRTZWxlY3RlZCh0cnVlKTsNCiAgICArCQkJYnJlYWs7DQog
ICAgKwkJfQ0KICAgICsJCWl0ZW0gPSAoQ29uZmlnSXRlbSopaXRlbS0+cGFyZW50KCk7DQogICAg
Kwl9DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd1Npbmds
ZVZpZXcodm9pZCkNCiAgICArew0KICAgICsJc2luZ2xlVmlld0FjdGlvbi0+c2V0RW5hYmxlZChm
YWxzZSk7DQogICAgKwlzaW5nbGVWaWV3QWN0aW9uLT5zZXRDaGVja2VkKHRydWUpOw0KICAgICsJ
c3BsaXRWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRydWUpOw0KICAgICsJc3BsaXRWaWV3QWN0aW9u
LT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArCWZ1bGxWaWV3QWN0aW9uLT5zZXRFbmFibGVkKHRy
dWUpOw0KICAgICsJZnVsbFZpZXdBY3Rpb24tPnNldENoZWNrZWQoZmFsc2UpOw0KICAgICsNCiAg
ICArCW1lbnVWaWV3LT5oaWRlKCk7DQogICAgKwltZW51TGlzdC0+c2V0Um9vdE1lbnUoMCk7DQog
ICAgKwljb25maWdMaXN0LT5tb2RlID0gc2luZ2xlTW9kZTsNCiAgICArCWlmIChjb25maWdMaXN0
LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQ0KICAgICsJCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RB
bGwoKTsNCiAgICArCWVsc2UNCiAgICArCQljb25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1l
bnUpOw0KICAgICsJY29uZmlnTGlzdC0+c2V0Rm9jdXMoKTsNCiAgICArfQ0KICAgICsNCiAgICAr
dm9pZCBDb25maWdNYWluV2luZG93OjpzaG93U3BsaXRWaWV3KHZvaWQpDQogICAgK3sNCiAgICAr
CXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7DQogICAgKwlzaW5nbGVWaWV3QWN0
aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArCXNwbGl0Vmlld0FjdGlvbi0+c2V0RW5hYmxl
ZChmYWxzZSk7DQogICAgKwlzcGxpdFZpZXdBY3Rpb24tPnNldENoZWNrZWQodHJ1ZSk7DQogICAg
KwlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZCh0cnVlKTsNCiAgICArCWZ1bGxWaWV3QWN0aW9u
LT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArDQogICAgKwljb25maWdMaXN0LT5tb2RlID0gc3lt
Ym9sTW9kZTsNCiAgICArCWlmIChjb25maWdMaXN0LT5yb290RW50cnkgPT0gJnJvb3RtZW51KQ0K
ICAgICsJCWNvbmZpZ0xpc3QtPnVwZGF0ZUxpc3RBbGwoKTsNCiAgICArCWVsc2UNCiAgICArCQlj
b25maWdMaXN0LT5zZXRSb290TWVudSgmcm9vdG1lbnUpOw0KICAgICsJY29uZmlnTGlzdC0+c2V0
QWxsT3Blbih0cnVlKTsNCiAgICArCWNvbmZpZ0FwcC0+cHJvY2Vzc0V2ZW50cygpOw0KICAgICsJ
bWVudUxpc3QtPm1vZGUgPSBtZW51TW9kZTsNCiAgICArCW1lbnVMaXN0LT5zZXRSb290TWVudSgm
cm9vdG1lbnUpOw0KICAgICsJbWVudUxpc3QtPnNldEFsbE9wZW4odHJ1ZSk7DQogICAgKwltZW51
Vmlldy0+c2hvdygpOw0KICAgICsJbWVudUxpc3QtPnNldEZvY3VzKCk7DQogICAgK30NCiAgICAr
DQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Z1bGxWaWV3KHZvaWQpDQogICAgK3sN
CiAgICArCXNpbmdsZVZpZXdBY3Rpb24tPnNldEVuYWJsZWQodHJ1ZSk7DQogICAgKwlzaW5nbGVW
aWV3QWN0aW9uLT5zZXRDaGVja2VkKGZhbHNlKTsNCiAgICArCXNwbGl0Vmlld0FjdGlvbi0+c2V0
RW5hYmxlZCh0cnVlKTsNCiAgICArCXNwbGl0Vmlld0FjdGlvbi0+c2V0Q2hlY2tlZChmYWxzZSk7
DQogICAgKwlmdWxsVmlld0FjdGlvbi0+c2V0RW5hYmxlZChmYWxzZSk7DQogICAgKwlmdWxsVmll
d0FjdGlvbi0+c2V0Q2hlY2tlZCh0cnVlKTsNCiAgICArDQogICAgKwltZW51Vmlldy0+aGlkZSgp
Ow0KICAgICsJbWVudUxpc3QtPnNldFJvb3RNZW51KDApOw0KICAgICsJY29uZmlnTGlzdC0+bW9k
ZSA9IGZ1bGxNb2RlOw0KICAgICsJaWYgKGNvbmZpZ0xpc3QtPnJvb3RFbnRyeSA9PSAmcm9vdG1l
bnUpDQogICAgKwkJY29uZmlnTGlzdC0+dXBkYXRlTGlzdEFsbCgpOw0KICAgICsJZWxzZQ0KICAg
ICsJCWNvbmZpZ0xpc3QtPnNldFJvb3RNZW51KCZyb290bWVudSk7DQogICAgKwljb25maWdMaXN0
LT5zZXRGb2N1cygpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsgKiBhc2sgZm9yIHNh
dmluZyBjb25maWd1cmF0aW9uIGJlZm9yZSBxdWl0dGluZw0KICAgICsgKiBUT0RPIGFzayBvbmx5
IHdoZW4gc29tZXRoaW5nIGNoYW5nZWQNCiAgICArICovDQogICAgK3ZvaWQgQ29uZmlnTWFpbldp
bmRvdzo6Y2xvc2VFdmVudChRQ2xvc2VFdmVudCogZSkNCiAgICArew0KICAgICsJaWYgKCFjb25m
X2dldF9jaGFuZ2VkKCkpIHsNCiAgICArCQllLT5hY2NlcHQoKTsNCiAgICArCQlyZXR1cm47DQog
ICAgKwl9DQogICAgKwlRTWVzc2FnZUJveCBtYigicWNvbmYiLCAiU2F2ZSBjb25maWd1cmF0aW9u
PyIsIFFNZXNzYWdlQm94OjpXYXJuaW5nLA0KICAgICsJCQlRTWVzc2FnZUJveDo6WWVzIHwgUU1l
c3NhZ2VCb3g6OkRlZmF1bHQsIFFNZXNzYWdlQm94OjpObywgUU1lc3NhZ2VCb3g6OkNhbmNlbCB8
IFFNZXNzYWdlQm94OjpFc2NhcGUpOw0KICAgICsJbWIuc2V0QnV0dG9uVGV4dChRTWVzc2FnZUJv
eDo6WWVzLCAiJlNhdmUgQ2hhbmdlcyIpOw0KICAgICsJbWIuc2V0QnV0dG9uVGV4dChRTWVzc2Fn
ZUJveDo6Tm8sICImRGlzY2FyZCBDaGFuZ2VzIik7DQogICAgKwltYi5zZXRCdXR0b25UZXh0KFFN
ZXNzYWdlQm94OjpDYW5jZWwsICJDYW5jZWwgRXhpdCIpOw0KICAgICsJc3dpdGNoIChtYi5leGVj
KCkpIHsNCiAgICArCWNhc2UgUU1lc3NhZ2VCb3g6OlllczoNCiAgICArCQlpZiAoc2F2ZUNvbmZp
ZygpKQ0KICAgICsJCQllLT5hY2NlcHQoKTsNCiAgICArCQllbHNlDQogICAgKwkJCWUtPmlnbm9y
ZSgpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBRTWVzc2FnZUJveDo6Tm86DQogICAgKwkJ
ZS0+YWNjZXB0KCk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFFNZXNzYWdlQm94OjpDYW5j
ZWw6DQogICAgKwkJZS0+aWdub3JlKCk7DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgK30N
CiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0ludHJvKHZvaWQpDQogICAg
K3sNCiAgICArCXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9ICJXZWxjb21lIHRvIHRoZSBxY29u
ZiBncmFwaGljYWwgY29uZmlndXJhdGlvbiB0b29sLlxuXG4iDQogICAgKwkJIkZvciBlYWNoIG9w
dGlvbiwgYSBibGFuayBib3ggaW5kaWNhdGVzIHRoZSBmZWF0dXJlIGlzIGRpc2FibGVkLCBhIGNo
ZWNrXG4iDQogICAgKwkJImluZGljYXRlcyBpdCBpcyBlbmFibGVkLCBhbmQgYSBkb3QgaW5kaWNh
dGVzIHRoYXQgaXQgaXMgdG8gYmUgY29tcGlsZWRcbiINCiAgICArCQkiYXMgYSBtb2R1bGUuICBD
bGlja2luZyBvbiB0aGUgYm94IHdpbGwgY3ljbGUgdGhyb3VnaCB0aGUgdGhyZWUgc3RhdGVzLlxu
XG4iDQogICAgKwkJIklmIHlvdSBkbyBub3Qgc2VlIGFuIG9wdGlvbiAoZS5nLiwgYSBkZXZpY2Ug
ZHJpdmVyKSB0aGF0IHlvdSBiZWxpZXZlXG4iDQogICAgKwkJInNob3VsZCBiZSBwcmVzZW50LCB0
cnkgdHVybmluZyBvbiBTaG93IEFsbCBPcHRpb25zIHVuZGVyIHRoZSBPcHRpb25zIG1lbnUuXG4i
DQogICAgKwkJIkFsdGhvdWdoIHRoZXJlIGlzIG5vIGNyb3NzIHJlZmVyZW5jZSB5ZXQgdG8gaGVs
cCB5b3UgZmlndXJlIG91dCB3aGF0IG90aGVyXG4iDQogICAgKwkJIm9wdGlvbnMgbXVzdCBiZSBl
bmFibGVkIHRvIHN1cHBvcnQgdGhlIG9wdGlvbiB5b3UgYXJlIGludGVyZXN0ZWQgaW4sIHlvdSBj
YW5cbiINCiAgICArCQkic3RpbGwgdmlldyB0aGUgaGVscCBvZiBhIGdyYXllZC1vdXQgb3B0aW9u
LlxuXG4iDQogICAgKwkJIlRvZ2dsaW5nIFNob3cgRGVidWcgSW5mbyB1bmRlciB0aGUgT3B0aW9u
cyBtZW51IHdpbGwgc2hvdyB0aGUgZGVwZW5kZW5jaWVzLFxuIg0KICAgICsJCSJ3aGljaCB5b3Ug
Y2FuIHRoZW4gbWF0Y2ggYnkgZXhhbWluaW5nIG90aGVyIG9wdGlvbnMuXG5cbiI7DQogICAgKw0K
ICAgICsJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7DQogICAg
K30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2hvd0Fib3V0KHZvaWQpDQog
ICAgK3sNCiAgICArCXN0YXRpYyBjb25zdCBRU3RyaW5nIHN0ciA9ICJxY29uZiBpcyBDb3B5cmln
aHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+LlxuIg0KICAg
ICsJCSJDb3B5cmlnaHQgKEMpIDIwMTUgQm9yaXMgQmFyYnVsb3Zza2kgPGJiYXJidWxvdnNraUBn
bWFpbC5jb20+LlxuXG4iDQogICAgKwkJIkJ1ZyByZXBvcnRzIGFuZCBmZWF0dXJlIHJlcXVlc3Qg
Y2FuIGFsc28gYmUgZW50ZXJlZCBhdCBodHRwOi8vYnVnemlsbGEua2VybmVsLm9yZy9cbiI7DQog
ICAgKw0KICAgICsJUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRoaXMsICJxY29uZiIsIHN0cik7
DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmlnTWFpbldpbmRvdzo6c2F2ZVNldHRpbmdz
KHZvaWQpDQogICAgK3sNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB4
IiwgcG9zKCkueCgpKTsNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB5
IiwgcG9zKCkueSgpKTsNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgiL3dpbmRvdyB3
aWR0aCIsIHNpemUoKS53aWR0aCgpKTsNCiAgICArCWNvbmZpZ1NldHRpbmdzLT5zZXRWYWx1ZSgi
L3dpbmRvdyBoZWlnaHQiLCBzaXplKCkuaGVpZ2h0KCkpOw0KICAgICsNCiAgICArCVFTdHJpbmcg
ZW50cnk7DQogICAgKwlzd2l0Y2goY29uZmlnTGlzdC0+bW9kZSkgew0KICAgICsJY2FzZSBzaW5n
bGVNb2RlIDoNCiAgICArCQllbnRyeSA9ICJzaW5nbGUiOw0KICAgICsJCWJyZWFrOw0KICAgICsN
CiAgICArCWNhc2Ugc3ltYm9sTW9kZSA6DQogICAgKwkJZW50cnkgPSAic3BsaXQiOw0KICAgICsJ
CWJyZWFrOw0KICAgICsNCiAgICArCWNhc2UgZnVsbE1vZGUgOg0KICAgICsJCWVudHJ5ID0gImZ1
bGwiOw0KICAgICsJCWJyZWFrOw0KICAgICsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJYnJlYWs7
DQogICAgKwl9DQogICAgKwljb25maWdTZXR0aW5ncy0+c2V0VmFsdWUoIi9saXN0TW9kZSIsIGVu
dHJ5KTsNCiAgICArDQogICAgKwljb25maWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3NwbGl0MSIs
IHNwbGl0MS0+c2l6ZXMoKSk7DQogICAgKwljb25maWdTZXR0aW5ncy0+d3JpdGVTaXplcygiL3Nw
bGl0MiIsIHNwbGl0Mi0+c2l6ZXMoKSk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgQ29uZmln
TWFpbldpbmRvdzo6Y29uZl9jaGFuZ2VkKHZvaWQpDQogICAgK3sNCiAgICArCWlmIChzYXZlQWN0
aW9uKQ0KICAgICsJCXNhdmVBY3Rpb24tPnNldEVuYWJsZWQoY29uZl9nZXRfY2hhbmdlZCgpKTsN
CiAgICArfQ0KICAgICsNCiAgICArdm9pZCBmaXh1cF9yb290bWVudShzdHJ1Y3QgbWVudSAqbWVu
dSkNCiAgICArew0KICAgICsJc3RydWN0IG1lbnUgKmNoaWxkOw0KICAgICsJc3RhdGljIGludCBt
ZW51X2NudCA9IDA7DQogICAgKw0KICAgICsJbWVudS0+ZmxhZ3MgfD0gTUVOVV9ST09UOw0KICAg
ICsJZm9yIChjaGlsZCA9IG1lbnUtPmxpc3Q7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KSB7
DQogICAgKwkJaWYgKGNoaWxkLT5wcm9tcHQgJiYgY2hpbGQtPnByb21wdC0+dHlwZSA9PSBQX01F
TlUpIHsNCiAgICArCQkJbWVudV9jbnQrKzsNCiAgICArCQkJZml4dXBfcm9vdG1lbnUoY2hpbGQp
Ow0KICAgICsJCQltZW51X2NudC0tOw0KICAgICsJCX0gZWxzZSBpZiAoIW1lbnVfY250KQ0KICAg
ICsJCQlmaXh1cF9yb290bWVudShjaGlsZCk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZTsNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHVz
YWdlKHZvaWQpDQogICAgK3sNCiAgICArCXByaW50ZigiJXMgWy1zXSA8Y29uZmlnPlxuIiwgcHJv
Z25hbWUpOw0KICAgICsJZXhpdCgwKTsNCiAgICArfQ0KICAgICsNCiAgICAraW50IG1haW4oaW50
IGFjLCBjaGFyKiogYXYpDQogICAgK3sNCiAgICArCUNvbmZpZ01haW5XaW5kb3cqIHY7DQogICAg
Kwljb25zdCBjaGFyICpuYW1lOw0KICAgICsNCiAgICArCXByb2duYW1lID0gYXZbMF07DQogICAg
Kwljb25maWdBcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFjLCBhdik7DQogICAgKwlpZiAoYWMgPiAx
ICYmIGF2WzFdWzBdID09ICctJykgew0KICAgICsJCXN3aXRjaCAoYXZbMV1bMV0pIHsNCiAgICAr
CQljYXNlICdzJzoNCiAgICArCQkJY29uZl9zZXRfbWVzc2FnZV9jYWxsYmFjayhOVUxMKTsNCiAg
ICArCQkJYnJlYWs7DQogICAgKwkJY2FzZSAnaCc6DQogICAgKwkJY2FzZSAnPyc6DQogICAgKwkJ
CXVzYWdlKCk7DQogICAgKwkJfQ0KICAgICsJCW5hbWUgPSBhdlsyXTsNCiAgICArCX0gZWxzZQ0K
ICAgICsJCW5hbWUgPSBhdlsxXTsNCiAgICArCWlmICghbmFtZSkNCiAgICArCQl1c2FnZSgpOw0K
ICAgICsNCiAgICArCWNvbmZfcGFyc2UobmFtZSk7DQogICAgKwlmaXh1cF9yb290bWVudSgmcm9v
dG1lbnUpOw0KICAgICsJY29uZl9yZWFkKE5VTEwpOw0KICAgICsJLy96Y29uZmR1bXAoc3Rkb3V0
KTsNCiAgICArDQogICAgKwljb25maWdTZXR0aW5ncyA9IG5ldyBDb25maWdTZXR0aW5ncygpOw0K
ICAgICsJY29uZmlnU2V0dGluZ3MtPmJlZ2luR3JvdXAoIi9rY29uZmlnL3Fjb25mIik7DQogICAg
Kwl2ID0gbmV3IENvbmZpZ01haW5XaW5kb3coKTsNCiAgICArDQogICAgKwkvL3pjb25mZHVtcChz
dGRvdXQpOw0KICAgICsJY29uZmlnQXBwLT5jb25uZWN0KGNvbmZpZ0FwcCwgU0lHTkFMKGxhc3RX
aW5kb3dDbG9zZWQoKSksIFNMT1QocXVpdCgpKSk7DQogICAgKwljb25maWdBcHAtPmNvbm5lY3Qo
Y29uZmlnQXBwLCBTSUdOQUwoYWJvdXRUb1F1aXQoKSksIHYsIFNMT1Qoc2F2ZVNldHRpbmdzKCkp
KTsNCiAgICArCXYtPnNob3coKTsNCiAgICArCWNvbmZpZ0FwcC0+ZXhlYygpOw0KICAgICsNCiAg
ICArCWNvbmZpZ1NldHRpbmdzLT5lbmRHcm91cCgpOw0KICAgICsJZGVsZXRlIGNvbmZpZ1NldHRp
bmdzOw0KICAgICsJZGVsZXRlIHY7DQogICAgKwlkZWxldGUgY29uZmlnQXBwOw0KICAgICsNCiAg
ICArCXJldHVybiAwOw0KICAgICt9DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9x
Y29uZi5oIGIvc3VwcG9ydC9rY29uZmlnL3Fjb25mLmgNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLjQ1YmZlOWINCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnL3Fjb25mLmgNCiAgICBAQCAtMCwwICsxLDMzMSBAQA0KICAgICsv
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KICAgICsvKg0KICAgICsgKiBD
b3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+DQog
ICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPFFUZXh0QnJvd3Nlcj4NCiAgICArI2luY2x1
ZGUgPFFUcmVlV2lkZ2V0Pg0KICAgICsjaW5jbHVkZSA8UU1haW5XaW5kb3c+DQogICAgKyNpbmNs
dWRlIDxRSGVhZGVyVmlldz4NCiAgICArI2luY2x1ZGUgPHFzZXR0aW5ncy5oPg0KICAgICsjaW5j
bHVkZSA8UVB1c2hCdXR0b24+DQogICAgKyNpbmNsdWRlIDxRU2V0dGluZ3M+DQogICAgKyNpbmNs
dWRlIDxRTGluZUVkaXQ+DQogICAgKyNpbmNsdWRlIDxRU3BsaXR0ZXI+DQogICAgKyNpbmNsdWRl
IDxRQ2hlY2tCb3g+DQogICAgKyNpbmNsdWRlIDxRRGlhbG9nPg0KICAgICsjaW5jbHVkZSAiZXhw
ci5oIg0KICAgICsNCiAgICArY2xhc3MgQ29uZmlnVmlldzsNCiAgICArY2xhc3MgQ29uZmlnTGlz
dDsNCiAgICArY2xhc3MgQ29uZmlnSXRlbTsNCiAgICArY2xhc3MgQ29uZmlnTGluZUVkaXQ7DQog
ICAgK2NsYXNzIENvbmZpZ01haW5XaW5kb3c7DQogICAgKw0KICAgICtjbGFzcyBDb25maWdTZXR0
aW5ncyA6IHB1YmxpYyBRU2V0dGluZ3Mgew0KICAgICtwdWJsaWM6DQogICAgKwlDb25maWdTZXR0
aW5ncygpOw0KICAgICsJUUxpc3Q8aW50PiByZWFkU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBi
b29sICpvayk7DQogICAgKwlib29sIHdyaXRlU2l6ZXMoY29uc3QgUVN0cmluZyYga2V5LCBjb25z
dCBRTGlzdDxpbnQ+JiB2YWx1ZSk7DQogICAgK307DQogICAgKw0KICAgICtlbnVtIGNvbElkeCB7
DQogICAgKwlwcm9tcHRDb2xJZHgsIG5hbWVDb2xJZHgsIG5vQ29sSWR4LCBtb2RDb2xJZHgsIHll
c0NvbElkeCwgZGF0YUNvbElkeCwgY29sTnINCiAgICArfTsNCiAgICArZW51bSBsaXN0TW9kZSB7
DQogICAgKwlzaW5nbGVNb2RlLCBtZW51TW9kZSwgc3ltYm9sTW9kZSwgZnVsbE1vZGUsIGxpc3RN
b2RlDQogICAgK307DQogICAgK2VudW0gb3B0aW9uTW9kZSB7DQogICAgKwlub3JtYWxPcHQgPSAw
LCBhbGxPcHQsIHByb21wdE9wdA0KICAgICt9Ow0KICAgICsNCiAgICArY2xhc3MgQ29uZmlnTGlz
dCA6IHB1YmxpYyBRVHJlZVdpZGdldCB7DQogICAgKwlRX09CSkVDVA0KICAgICsJdHlwZWRlZiBj
bGFzcyBRVHJlZVdpZGdldCBQYXJlbnQ7DQogICAgK3B1YmxpYzoNCiAgICArCUNvbmZpZ0xpc3Qo
Q29uZmlnVmlldyogcCwgY29uc3QgY2hhciAqbmFtZSA9IDApOw0KICAgICsJdm9pZCByZWluaXQo
dm9pZCk7DQogICAgKwlDb25maWdWaWV3KiBwYXJlbnQodm9pZCkgY29uc3QNCiAgICArCXsNCiAg
ICArCQlyZXR1cm4gKENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50KCk7DQogICAgKwl9DQogICAg
KwlDb25maWdJdGVtKiBmaW5kQ29uZmlnSXRlbShzdHJ1Y3QgbWVudSAqKTsNCiAgICArDQogICAg
K3Byb3RlY3RlZDoNCiAgICArCXZvaWQga2V5UHJlc3NFdmVudChRS2V5RXZlbnQgKmUpOw0KICAg
ICsJdm9pZCBtb3VzZVByZXNzRXZlbnQoUU1vdXNlRXZlbnQgKmUpOw0KICAgICsJdm9pZCBtb3Vz
ZVJlbGVhc2VFdmVudChRTW91c2VFdmVudCAqZSk7DQogICAgKwl2b2lkIG1vdXNlTW92ZUV2ZW50
KFFNb3VzZUV2ZW50ICplKTsNCiAgICArCXZvaWQgbW91c2VEb3VibGVDbGlja0V2ZW50KFFNb3Vz
ZUV2ZW50ICplKTsNCiAgICArCXZvaWQgZm9jdXNJbkV2ZW50KFFGb2N1c0V2ZW50ICplKTsNCiAg
ICArCXZvaWQgY29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVFdmVudCAqZSk7DQogICAgKw0K
ICAgICtwdWJsaWMgc2xvdHM6DQogICAgKwl2b2lkIHNldFJvb3RNZW51KHN0cnVjdCBtZW51ICpt
ZW51KTsNCiAgICArDQogICAgKwl2b2lkIHVwZGF0ZUxpc3QoQ29uZmlnSXRlbSAqaXRlbSk7DQog
ICAgKwl2b2lkIHNldFZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0sIHRyaXN0YXRlIHZhbCk7DQogICAg
Kwl2b2lkIGNoYW5nZVZhbHVlKENvbmZpZ0l0ZW0qIGl0ZW0pOw0KICAgICsJdm9pZCB1cGRhdGVT
ZWxlY3Rpb24odm9pZCk7DQogICAgKwl2b2lkIHNhdmVTZXR0aW5ncyh2b2lkKTsNCiAgICArc2ln
bmFsczoNCiAgICArCXZvaWQgbWVudUNoYW5nZWQoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICsJ
dm9pZCBtZW51U2VsZWN0ZWQoc3RydWN0IG1lbnUgKm1lbnUpOw0KICAgICsJdm9pZCBwYXJlbnRT
ZWxlY3RlZCh2b2lkKTsNCiAgICArCXZvaWQgZ290Rm9jdXMoc3RydWN0IG1lbnUgKik7DQogICAg
Kw0KICAgICtwdWJsaWM6DQogICAgKwl2b2lkIHVwZGF0ZUxpc3RBbGwodm9pZCkNCiAgICArCXsN
CiAgICArCQl1cGRhdGVBbGwgPSB0cnVlOw0KICAgICsJCXVwZGF0ZUxpc3QoTlVMTCk7DQogICAg
KwkJdXBkYXRlQWxsID0gZmFsc2U7DQogICAgKwl9DQogICAgKwlDb25maWdMaXN0KiBsaXN0Vmll
dygpDQogICAgKwl7DQogICAgKwkJcmV0dXJuIHRoaXM7DQogICAgKwl9DQogICAgKwlDb25maWdJ
dGVtKiBmaXJzdENoaWxkKCkgY29uc3QNCiAgICArCXsNCiAgICArCQlyZXR1cm4gKENvbmZpZ0l0
ZW0gKiljaGlsZHJlbigpLmZpcnN0KCk7DQogICAgKwl9DQogICAgKwl2b2lkIGFkZENvbHVtbihj
b2xJZHggaWR4KQ0KICAgICsJew0KICAgICsJCXNob3dDb2x1bW4oaWR4KTsNCiAgICArCX0NCiAg
ICArCXZvaWQgcmVtb3ZlQ29sdW1uKGNvbElkeCBpZHgpDQogICAgKwl7DQogICAgKwkJaGlkZUNv
bHVtbihpZHgpOw0KICAgICsJfQ0KICAgICsJdm9pZCBzZXRBbGxPcGVuKGJvb2wgb3Blbik7DQog
ICAgKwl2b2lkIHNldFBhcmVudE1lbnUodm9pZCk7DQogICAgKw0KICAgICsJYm9vbCBtZW51U2tp
cChzdHJ1Y3QgbWVudSAqKTsNCiAgICArDQogICAgKwl2b2lkIHVwZGF0ZU1lbnVMaXN0KENvbmZp
Z0l0ZW0gKnBhcmVudCwgc3RydWN0IG1lbnUqKTsNCiAgICArCXZvaWQgdXBkYXRlTWVudUxpc3Qo
Q29uZmlnTGlzdCAqcGFyZW50LCBzdHJ1Y3QgbWVudSopOw0KICAgICsNCiAgICArCWJvb2wgdXBk
YXRlQWxsOw0KICAgICsNCiAgICArCVFQaXhtYXAgc3ltYm9sWWVzUGl4LCBzeW1ib2xNb2RQaXgs
IHN5bWJvbE5vUGl4Ow0KICAgICsJUVBpeG1hcCBjaG9pY2VZZXNQaXgsIGNob2ljZU5vUGl4Ow0K
ICAgICsJUVBpeG1hcCBtZW51UGl4LCBtZW51SW52UGl4LCBtZW51QmFja1BpeCwgdm9pZFBpeDsN
CiAgICArDQogICAgKwlib29sIHNob3dOYW1lLCBzaG93UmFuZ2UsIHNob3dEYXRhOw0KICAgICsJ
ZW51bSBsaXN0TW9kZSBtb2RlOw0KICAgICsJZW51bSBvcHRpb25Nb2RlIG9wdE1vZGU7DQogICAg
KwlzdHJ1Y3QgbWVudSAqcm9vdEVudHJ5Ow0KICAgICsJUVBhbGV0dGUgZGlzYWJsZWRDb2xvckdy
b3VwOw0KICAgICsJUVBhbGV0dGUgaW5hY3RpdmVkQ29sb3JHcm91cDsNCiAgICArCVFNZW51KiBo
ZWFkZXJQb3B1cDsNCiAgICArfTsNCiAgICArDQogICAgK2NsYXNzIENvbmZpZ0l0ZW0gOiBwdWJs
aWMgUVRyZWVXaWRnZXRJdGVtIHsNCiAgICArCXR5cGVkZWYgY2xhc3MgUVRyZWVXaWRnZXRJdGVt
IFBhcmVudDsNCiAgICArcHVibGljOg0KICAgICsJQ29uZmlnSXRlbShDb25maWdMaXN0ICpwYXJl
bnQsIENvbmZpZ0l0ZW0gKmFmdGVyLCBzdHJ1Y3QgbWVudSAqbSwgYm9vbCB2KQ0KICAgICsJOiBQ
YXJlbnQocGFyZW50LCBhZnRlciksIG5leHRJdGVtKDApLCBtZW51KG0pLCB2aXNpYmxlKHYpLCBn
b1BhcmVudChmYWxzZSkNCiAgICArCXsNCiAgICArCQlpbml0KCk7DQogICAgKwl9DQogICAgKwlD
b25maWdJdGVtKENvbmZpZ0l0ZW0gKnBhcmVudCwgQ29uZmlnSXRlbSAqYWZ0ZXIsIHN0cnVjdCBt
ZW51ICptLCBib29sIHYpDQogICAgKwk6IFBhcmVudChwYXJlbnQsIGFmdGVyKSwgbmV4dEl0ZW0o
MCksIG1lbnUobSksIHZpc2libGUodiksIGdvUGFyZW50KGZhbHNlKQ0KICAgICsJew0KICAgICsJ
CWluaXQoKTsNCiAgICArCX0NCiAgICArCUNvbmZpZ0l0ZW0oQ29uZmlnTGlzdCAqcGFyZW50LCBD
b25maWdJdGVtICphZnRlciwgYm9vbCB2KQ0KICAgICsJOiBQYXJlbnQocGFyZW50LCBhZnRlciks
IG5leHRJdGVtKDApLCBtZW51KDApLCB2aXNpYmxlKHYpLCBnb1BhcmVudCh0cnVlKQ0KICAgICsJ
ew0KICAgICsJCWluaXQoKTsNCiAgICArCX0NCiAgICArCX5Db25maWdJdGVtKHZvaWQpOw0KICAg
ICsJdm9pZCBpbml0KHZvaWQpOw0KICAgICsJdm9pZCBva1JlbmFtZShpbnQgY29sKTsNCiAgICAr
CXZvaWQgdXBkYXRlTWVudSh2b2lkKTsNCiAgICArCXZvaWQgdGVzdFVwZGF0ZU1lbnUoYm9vbCB2
KTsNCiAgICArCUNvbmZpZ0xpc3QqIGxpc3RWaWV3KCkgY29uc3QNCiAgICArCXsNCiAgICArCQly
ZXR1cm4gKENvbmZpZ0xpc3QqKVBhcmVudDo6dHJlZVdpZGdldCgpOw0KICAgICsJfQ0KICAgICsJ
Q29uZmlnSXRlbSogZmlyc3RDaGlsZCgpIGNvbnN0DQogICAgKwl7DQogICAgKwkJcmV0dXJuIChD
b25maWdJdGVtICopUGFyZW50OjpjaGlsZCgwKTsNCiAgICArCX0NCiAgICArCUNvbmZpZ0l0ZW0q
IG5leHRTaWJsaW5nKCkNCiAgICArCXsNCiAgICArCQlDb25maWdJdGVtICpyZXQgPSBOVUxMOw0K
ICAgICsJCUNvbmZpZ0l0ZW0gKl9wYXJlbnQgPSAoQ29uZmlnSXRlbSAqKXBhcmVudCgpOw0KICAg
ICsNCiAgICArCQlpZihfcGFyZW50KSB7DQogICAgKwkJCXJldCA9IChDb25maWdJdGVtICopX3Bh
cmVudC0+Y2hpbGQoX3BhcmVudC0+aW5kZXhPZkNoaWxkKHRoaXMpKzEpOw0KICAgICsJCX0gZWxz
ZSB7DQogICAgKwkJCVFUcmVlV2lkZ2V0ICpfdHJlZVdpZGdldCA9IHRyZWVXaWRnZXQoKTsNCiAg
ICArCQkJcmV0ID0gKENvbmZpZ0l0ZW0gKilfdHJlZVdpZGdldC0+dG9wTGV2ZWxJdGVtKF90cmVl
V2lkZ2V0LT5pbmRleE9mVG9wTGV2ZWxJdGVtKHRoaXMpKzEpOw0KICAgICsJCX0NCiAgICArDQog
ICAgKwkJcmV0dXJuIHJldDsNCiAgICArCX0NCiAgICArCXZvaWQgc2V0VGV4dChjb2xJZHggaWR4
LCBjb25zdCBRU3RyaW5nJiB0ZXh0KQ0KICAgICsJew0KICAgICsJCVBhcmVudDo6c2V0VGV4dChp
ZHgsIHRleHQpOw0KICAgICsJfQ0KICAgICsJUVN0cmluZyB0ZXh0KGNvbElkeCBpZHgpIGNvbnN0
DQogICAgKwl7DQogICAgKwkJcmV0dXJuIFBhcmVudDo6dGV4dChpZHgpOw0KICAgICsJfQ0KICAg
ICsJdm9pZCBzZXRQaXhtYXAoY29sSWR4IGlkeCwgY29uc3QgUUljb24gJmljb24pDQogICAgKwl7
DQogICAgKwkJUGFyZW50OjpzZXRJY29uKGlkeCwgaWNvbik7DQogICAgKwl9DQogICAgKwljb25z
dCBRSWNvbiBwaXhtYXAoY29sSWR4IGlkeCkgY29uc3QNCiAgICArCXsNCiAgICArCQlyZXR1cm4g
aWNvbihpZHgpOw0KICAgICsJfQ0KICAgICsJLy8gVE9ETzogSW1wbGVtZW50IHBhaW50Q2VsbA0K
ICAgICsNCiAgICArCUNvbmZpZ0l0ZW0qIG5leHRJdGVtOw0KICAgICsJc3RydWN0IG1lbnUgKm1l
bnU7DQogICAgKwlib29sIHZpc2libGU7DQogICAgKwlib29sIGdvUGFyZW50Ow0KICAgICt9Ow0K
ICAgICsNCiAgICArY2xhc3MgQ29uZmlnTGluZUVkaXQgOiBwdWJsaWMgUUxpbmVFZGl0IHsNCiAg
ICArCVFfT0JKRUNUDQogICAgKwl0eXBlZGVmIGNsYXNzIFFMaW5lRWRpdCBQYXJlbnQ7DQogICAg
K3B1YmxpYzoNCiAgICArCUNvbmZpZ0xpbmVFZGl0KENvbmZpZ1ZpZXcqIHBhcmVudCk7DQogICAg
KwlDb25maWdWaWV3KiBwYXJlbnQodm9pZCkgY29uc3QNCiAgICArCXsNCiAgICArCQlyZXR1cm4g
KENvbmZpZ1ZpZXcqKVBhcmVudDo6cGFyZW50KCk7DQogICAgKwl9DQogICAgKwl2b2lkIHNob3co
Q29uZmlnSXRlbSAqaSk7DQogICAgKwl2b2lkIGtleVByZXNzRXZlbnQoUUtleUV2ZW50ICplKTsN
CiAgICArDQogICAgK3B1YmxpYzoNCiAgICArCUNvbmZpZ0l0ZW0gKml0ZW07DQogICAgK307DQog
ICAgKw0KICAgICtjbGFzcyBDb25maWdWaWV3IDogcHVibGljIFFXaWRnZXQgew0KICAgICsJUV9P
QkpFQ1QNCiAgICArCXR5cGVkZWYgY2xhc3MgUVdpZGdldCBQYXJlbnQ7DQogICAgK3B1YmxpYzoN
CiAgICArCUNvbmZpZ1ZpZXcoUVdpZGdldCogcGFyZW50LCBjb25zdCBjaGFyICpuYW1lID0gMCk7
DQogICAgKwl+Q29uZmlnVmlldyh2b2lkKTsNCiAgICArCXN0YXRpYyB2b2lkIHVwZGF0ZUxpc3Qo
Q29uZmlnSXRlbSogaXRlbSk7DQogICAgKwlzdGF0aWMgdm9pZCB1cGRhdGVMaXN0QWxsKHZvaWQp
Ow0KICAgICsNCiAgICArCWJvb2wgc2hvd05hbWUodm9pZCkgY29uc3QgeyByZXR1cm4gbGlzdC0+
c2hvd05hbWU7IH0NCiAgICArCWJvb2wgc2hvd1JhbmdlKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGxp
c3QtPnNob3dSYW5nZTsgfQ0KICAgICsJYm9vbCBzaG93RGF0YSh2b2lkKSBjb25zdCB7IHJldHVy
biBsaXN0LT5zaG93RGF0YTsgfQ0KICAgICtwdWJsaWMgc2xvdHM6DQogICAgKwl2b2lkIHNldFNo
b3dOYW1lKGJvb2wpOw0KICAgICsJdm9pZCBzZXRTaG93UmFuZ2UoYm9vbCk7DQogICAgKwl2b2lk
IHNldFNob3dEYXRhKGJvb2wpOw0KICAgICsJdm9pZCBzZXRPcHRpb25Nb2RlKFFBY3Rpb24gKik7
DQogICAgK3NpZ25hbHM6DQogICAgKwl2b2lkIHNob3dOYW1lQ2hhbmdlZChib29sKTsNCiAgICAr
CXZvaWQgc2hvd1JhbmdlQ2hhbmdlZChib29sKTsNCiAgICArCXZvaWQgc2hvd0RhdGFDaGFuZ2Vk
KGJvb2wpOw0KICAgICtwdWJsaWM6DQogICAgKwlDb25maWdMaXN0KiBsaXN0Ow0KICAgICsJQ29u
ZmlnTGluZUVkaXQqIGxpbmVFZGl0Ow0KICAgICsNCiAgICArCXN0YXRpYyBDb25maWdWaWV3KiB2
aWV3TGlzdDsNCiAgICArCUNvbmZpZ1ZpZXcqIG5leHRWaWV3Ow0KICAgICsNCiAgICArCXN0YXRp
YyBRQWN0aW9uICpzaG93Tm9ybWFsQWN0aW9uOw0KICAgICsJc3RhdGljIFFBY3Rpb24gKnNob3dB
bGxBY3Rpb247DQogICAgKwlzdGF0aWMgUUFjdGlvbiAqc2hvd1Byb21wdEFjdGlvbjsNCiAgICAr
fTsNCiAgICArDQogICAgK2NsYXNzIENvbmZpZ0luZm9WaWV3IDogcHVibGljIFFUZXh0QnJvd3Nl
ciB7DQogICAgKwlRX09CSkVDVA0KICAgICsJdHlwZWRlZiBjbGFzcyBRVGV4dEJyb3dzZXIgUGFy
ZW50Ow0KICAgICtwdWJsaWM6DQogICAgKwlDb25maWdJbmZvVmlldyhRV2lkZ2V0KiBwYXJlbnQs
IGNvbnN0IGNoYXIgKm5hbWUgPSAwKTsNCiAgICArCWJvb2wgc2hvd0RlYnVnKHZvaWQpIGNvbnN0
IHsgcmV0dXJuIF9zaG93RGVidWc7IH0NCiAgICArDQogICAgK3B1YmxpYyBzbG90czoNCiAgICAr
CXZvaWQgc2V0SW5mbyhzdHJ1Y3QgbWVudSAqbWVudSk7DQogICAgKwl2b2lkIHNhdmVTZXR0aW5n
cyh2b2lkKTsNCiAgICArCXZvaWQgc2V0U2hvd0RlYnVnKGJvb2wpOw0KICAgICsNCiAgICArc2ln
bmFsczoNCiAgICArCXZvaWQgc2hvd0RlYnVnQ2hhbmdlZChib29sKTsNCiAgICArCXZvaWQgbWVu
dVNlbGVjdGVkKHN0cnVjdCBtZW51ICopOw0KICAgICsNCiAgICArcHJvdGVjdGVkOg0KICAgICsJ
dm9pZCBzeW1ib2xJbmZvKHZvaWQpOw0KICAgICsJdm9pZCBtZW51SW5mbyh2b2lkKTsNCiAgICAr
CVFTdHJpbmcgZGVidWdfaW5mbyhzdHJ1Y3Qgc3ltYm9sICpzeW0pOw0KICAgICsJc3RhdGljIFFT
dHJpbmcgcHJpbnRfZmlsdGVyKGNvbnN0IFFTdHJpbmcgJnN0cik7DQogICAgKwlzdGF0aWMgdm9p
ZCBleHByX3ByaW50X2hlbHAodm9pZCAqZGF0YSwgc3RydWN0IHN5bWJvbCAqc3ltLCBjb25zdCBj
aGFyICpzdHIpOw0KICAgICsJUU1lbnUgKmNyZWF0ZVN0YW5kYXJkQ29udGV4dE1lbnUoY29uc3Qg
UVBvaW50ICYgcG9zKTsNCiAgICArCXZvaWQgY29udGV4dE1lbnVFdmVudChRQ29udGV4dE1lbnVF
dmVudCAqZSk7DQogICAgKw0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJc3RydWN0
IG1lbnUgKl9tZW51Ow0KICAgICsJYm9vbCBfc2hvd0RlYnVnOw0KICAgICt9Ow0KICAgICsNCiAg
ICArY2xhc3MgQ29uZmlnU2VhcmNoV2luZG93IDogcHVibGljIFFEaWFsb2cgew0KICAgICsJUV9P
QkpFQ1QNCiAgICArCXR5cGVkZWYgY2xhc3MgUURpYWxvZyBQYXJlbnQ7DQogICAgK3B1YmxpYzoN
CiAgICArCUNvbmZpZ1NlYXJjaFdpbmRvdyhDb25maWdNYWluV2luZG93KiBwYXJlbnQsIGNvbnN0
IGNoYXIgKm5hbWUgPSAwKTsNCiAgICArDQogICAgK3B1YmxpYyBzbG90czoNCiAgICArCXZvaWQg
c2F2ZVNldHRpbmdzKHZvaWQpOw0KICAgICsJdm9pZCBzZWFyY2godm9pZCk7DQogICAgKw0KICAg
ICtwcm90ZWN0ZWQ6DQogICAgKwlRTGluZUVkaXQqIGVkaXRGaWVsZDsNCiAgICArCVFQdXNoQnV0
dG9uKiBzZWFyY2hCdXR0b247DQogICAgKwlRU3BsaXR0ZXIqIHNwbGl0Ow0KICAgICsJQ29uZmln
VmlldyogbGlzdDsNCiAgICArCUNvbmZpZ0luZm9WaWV3KiBpbmZvOw0KICAgICsNCiAgICArCXN0
cnVjdCBzeW1ib2wgKipyZXN1bHQ7DQogICAgK307DQogICAgKw0KICAgICtjbGFzcyBDb25maWdN
YWluV2luZG93IDogcHVibGljIFFNYWluV2luZG93IHsNCiAgICArCVFfT0JKRUNUDQogICAgKw0K
ICAgICsJY2hhciAqY29uZmlnbmFtZTsNCiAgICArCXN0YXRpYyBRQWN0aW9uICpzYXZlQWN0aW9u
Ow0KICAgICsJc3RhdGljIHZvaWQgY29uZl9jaGFuZ2VkKHZvaWQpOw0KICAgICtwdWJsaWM6DQog
ICAgKwlDb25maWdNYWluV2luZG93KHZvaWQpOw0KICAgICtwdWJsaWMgc2xvdHM6DQogICAgKwl2
b2lkIGNoYW5nZU1lbnUoc3RydWN0IG1lbnUgKik7DQogICAgKwl2b2lkIHNldE1lbnVMaW5rKHN0
cnVjdCBtZW51ICopOw0KICAgICsJdm9pZCBsaXN0Rm9jdXNDaGFuZ2VkKHZvaWQpOw0KICAgICsJ
dm9pZCBnb0JhY2sodm9pZCk7DQogICAgKwl2b2lkIGxvYWRDb25maWcodm9pZCk7DQogICAgKwli
b29sIHNhdmVDb25maWcodm9pZCk7DQogICAgKwl2b2lkIHNhdmVDb25maWdBcyh2b2lkKTsNCiAg
ICArCXZvaWQgc2VhcmNoQ29uZmlnKHZvaWQpOw0KICAgICsJdm9pZCBzaG93U2luZ2xlVmlldyh2
b2lkKTsNCiAgICArCXZvaWQgc2hvd1NwbGl0Vmlldyh2b2lkKTsNCiAgICArCXZvaWQgc2hvd0Z1
bGxWaWV3KHZvaWQpOw0KICAgICsJdm9pZCBzaG93SW50cm8odm9pZCk7DQogICAgKwl2b2lkIHNo
b3dBYm91dCh2b2lkKTsNCiAgICArCXZvaWQgc2F2ZVNldHRpbmdzKHZvaWQpOw0KICAgICsNCiAg
ICArcHJvdGVjdGVkOg0KICAgICsJdm9pZCBjbG9zZUV2ZW50KFFDbG9zZUV2ZW50ICplKTsNCiAg
ICArDQogICAgKwlDb25maWdTZWFyY2hXaW5kb3cgKnNlYXJjaFdpbmRvdzsNCiAgICArCUNvbmZp
Z1ZpZXcgKm1lbnVWaWV3Ow0KICAgICsJQ29uZmlnTGlzdCAqbWVudUxpc3Q7DQogICAgKwlDb25m
aWdWaWV3ICpjb25maWdWaWV3Ow0KICAgICsJQ29uZmlnTGlzdCAqY29uZmlnTGlzdDsNCiAgICAr
CUNvbmZpZ0luZm9WaWV3ICpoZWxwVGV4dDsNCiAgICArCVFUb29sQmFyICp0b29sQmFyOw0KICAg
ICsJUUFjdGlvbiAqYmFja0FjdGlvbjsNCiAgICArCVFBY3Rpb24gKnNpbmdsZVZpZXdBY3Rpb247
DQogICAgKwlRQWN0aW9uICpzcGxpdFZpZXdBY3Rpb247DQogICAgKwlRQWN0aW9uICpmdWxsVmll
d0FjdGlvbjsNCiAgICArCVFTcGxpdHRlciAqc3BsaXQxOw0KICAgICsJUVNwbGl0dGVyICpzcGxp
dDI7DQogICAgK307DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5l
X2NvbmZpZy5wbCBiL3N1cHBvcnQva2NvbmZpZy9zdHJlYW1saW5lX2NvbmZpZy5wbA0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNzU1DQogICAgaW5kZXggMDAwMDAwMC4uMDhkNzZkNw0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvc3RyZWFtbGluZV9jb25maWcucGwN
CiAgICBAQCAtMCwwICsxLDY4MiBAQA0KICAgICsjIS91c3IvYmluL2VudiBwZXJsDQogICAgKyMg
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArIw0KICAgICsjIENvcHlyaWdo
dCAyMDA1LTIwMDkgLSBTdGV2ZW4gUm9zdGVkdA0KICAgICsjDQogICAgKyMgIEl0J3Mgc2ltcGxl
IGVub3VnaCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHdvcmtzLg0KICAgICsjICBJZiBub3QsIHRo
ZW4geW91IGNhbiBhc2sgbWUgYXQgc3RyaXBjb25maWdAZ29vZG1pcy5vcmcNCiAgICArIw0KICAg
ICsjIFdoYXQgaXQgZG9lcz8NCiAgICArIw0KICAgICsjICAgSWYgeW91IGhhdmUgaW5zdGFsbGVk
IGEgTGludXgga2VybmVsIGZyb20gYSBkaXN0cmlidXRpb24NCiAgICArIyAgIHRoYXQgdHVybnMg
b24gd2F5IHRvbyBtYW55IG1vZHVsZXMgdGhhbiB5b3UgbmVlZCwgYW5kDQogICAgKyMgICB5b3Ug
b25seSB3YW50IHRoZSBtb2R1bGVzIHlvdSB1c2UsIHRoZW4gdGhpcyBwcm9ncmFtDQogICAgKyMg
ICBpcyBwZXJmZWN0IGZvciB5b3UuDQogICAgKyMNCiAgICArIyAgIEl0IGdpdmVzIHlvdSB0aGUg
YWJpbGl0eSB0byB0dXJuIG9mZiBhbGwgdGhlIG1vZHVsZXMgdGhhdCBhcmUNCiAgICArIyAgIG5v
dCBsb2FkZWQgb24geW91ciBzeXN0ZW0uDQogICAgKyMNCiAgICArIyBIb3d0bzoNCiAgICArIw0K
ICAgICsjICAxLiBCb290IHVwIHRoZSBrZXJuZWwgdGhhdCB5b3Ugd2FudCB0byBzdHJlYW0gbGlu
ZSB0aGUgY29uZmlnIG9uLg0KICAgICsjICAyLiBDaGFuZ2UgZGlyZWN0b3J5IHRvIHRoZSBkaXJl
Y3RvcnkgaG9sZGluZyB0aGUgc291cmNlIG9mIHRoZQ0KICAgICsjICAgICAgIGtlcm5lbCB0aGF0
IHlvdSBqdXN0IGJvb3RlZC4NCiAgICArIyAgMy4gQ29weSB0aGUgY29uZmlndXJhdG9uIGZpbGUg
dG8gdGhpcyBkaXJlY3RvcnkgYXMgLmNvbmZpZw0KICAgICsjICA0LiBIYXZlIGFsbCB5b3VyIGRl
dmljZXMgdGhhdCB5b3UgbmVlZCBtb2R1bGVzIGZvciBjb25uZWN0ZWQgYW5kDQogICAgKyMgICAg
ICBvcGVyYXRpb25hbCAobWFrZSBzdXJlIHRoYXQgdGhlaXIgY29ycmVzcG9uZGluZyBtb2R1bGVz
IGFyZSBsb2FkZWQpDQogICAgKyMgIDUuIFJ1biB0aGlzIHNjcmlwdCByZWRpcmVjdGluZyB0aGUg
b3V0cHV0IHRvIHNvbWUgb3RoZXIgZmlsZQ0KICAgICsjICAgICAgIGxpa2UgY29uZmlnX3N0cmlw
Lg0KICAgICsjICA2LiBCYWNrIHVwIHlvdXIgb2xkIGNvbmZpZyAoaWYgeW91IHdhbnQgdG9vKS4N
CiAgICArIyAgNy4gY29weSB0aGUgY29uZmlnX3N0cmlwIGZpbGUgdG8gLmNvbmZpZw0KICAgICsj
ICA4LiBSdW4gIm1ha2Ugb2xkY29uZmlnIg0KICAgICsjDQogICAgKyMgIE5vdyB5b3VyIGtlcm5l
bCBpcyByZWFkeSB0byBiZSBidWlsdCB3aXRoIG9ubHkgdGhlIG1vZHVsZXMgdGhhdA0KICAgICsj
ICBhcmUgbG9hZGVkLg0KICAgICsjDQogICAgKyMgSGVyZSdzIHdoYXQgSSBkaWQgd2l0aCBteSBE
ZWJpYW4gZGlzdHJpYnV0aW9uLg0KICAgICsjDQogICAgKyMgICAgY2QgL3Vzci9zcmMvbGludXgt
Mi42LjEwDQogICAgKyMgICAgY3AgL2Jvb3QvY29uZmlnLTIuNi4xMC0xLTY4Ni1zbXAgLmNvbmZp
Zw0KICAgICsjICAgIH4vYmluL3N0cmVhbWxpbmVfY29uZmlnID4gY29uZmlnX3N0cmlwDQogICAg
KyMgICAgbXYgLmNvbmZpZyBjb25maWdfc2F2DQogICAgKyMgICAgbXYgY29uZmlnX3N0cmlwIC5j
b25maWcNCiAgICArIyAgICBtYWtlIG9sZGNvbmZpZw0KICAgICsjDQogICAgK3VzZSB3YXJuaW5n
czsNCiAgICArdXNlIHN0cmljdDsNCiAgICArdXNlIEdldG9wdDo6TG9uZzsNCiAgICArDQogICAg
KyMgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMT0NBTE1PRENPTkZJR19ERUJVRyB0byBn
ZXQNCiAgICArIyBkZWJ1ZyBvdXRwdXQuDQogICAgK215ICRkZWJ1Z3ByaW50ID0gMDsNCiAgICAr
JGRlYnVncHJpbnQgPSAxIGlmIChkZWZpbmVkKCRFTlZ7TE9DQUxNT0RDT05GSUdfREVCVUd9KSk7
DQogICAgKw0KICAgICtzdWIgZHByaW50IHsNCiAgICArICAgIHJldHVybiBpZiAoISRkZWJ1Z3By
aW50KTsNCiAgICArICAgIHByaW50IFNUREVSUiBAXzsNCiAgICArfQ0KICAgICsNCiAgICArbXkg
JGNvbmZpZyA9ICIuY29uZmlnIjsNCiAgICArDQogICAgK215ICR1bmFtZSA9IGB1bmFtZSAtcmA7
DQogICAgK2Nob21wICR1bmFtZTsNCiAgICArDQogICAgK215IEBzZWFyY2hjb25maWdzID0gKA0K
ICAgICsJew0KICAgICsJICAgICJmaWxlIiA9PiAiLmNvbmZpZyIsDQogICAgKwkgICAgImV4ZWMi
ID0+ICJjYXQiLA0KICAgICsJfSwNCiAgICArCXsNCiAgICArCSAgICAiZmlsZSIgPT4gIi9wcm9j
L2NvbmZpZy5neiIsDQogICAgKwkgICAgImV4ZWMiID0+ICJ6Y2F0IiwNCiAgICArCX0sDQogICAg
Kwl7DQogICAgKwkgICAgImZpbGUiID0+ICIvYm9vdC9jb25maWctJHVuYW1lIiwNCiAgICArCSAg
ICAiZXhlYyIgPT4gImNhdCIsDQogICAgKwl9LA0KICAgICsJew0KICAgICsJICAgICJmaWxlIiA9
PiAiL2Jvb3Qvdm1saW51ei0kdW5hbWUiLA0KICAgICsJICAgICJleGVjIiA9PiAic2NyaXB0cy9l
eHRyYWN0LWlrY29uZmlnIiwNCiAgICArCSAgICAidGVzdCIgPT4gInNjcmlwdHMvZXh0cmFjdC1p
a2NvbmZpZyIsDQogICAgKwl9LA0KICAgICsJew0KICAgICsJICAgICJmaWxlIiA9PiAidm1saW51
eCIsDQogICAgKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAg
ICsJICAgICJ0ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICArCX0sDQog
ICAgKwl7DQogICAgKwkgICAgImZpbGUiID0+ICIvbGliL21vZHVsZXMvJHVuYW1lL2tlcm5lbC9r
ZXJuZWwvY29uZmlncy5rbyIsDQogICAgKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3Qt
aWtjb25maWciLA0KICAgICsJICAgICJ0ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmln
IiwNCiAgICArCX0sDQogICAgKwl7DQogICAgKwkgICAgImZpbGUiID0+ICJrZXJuZWwvY29uZmln
cy5rbyIsDQogICAgKwkgICAgImV4ZWMiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0K
ICAgICsJICAgICJ0ZXN0IiA9PiAic2NyaXB0cy9leHRyYWN0LWlrY29uZmlnIiwNCiAgICArCX0s
DQogICAgKwl7DQogICAgKwkgICAgImZpbGUiID0+ICJrZXJuZWwvY29uZmlncy5vIiwNCiAgICAr
CSAgICAiZXhlYyIgPT4gInNjcmlwdHMvZXh0cmFjdC1pa2NvbmZpZyIsDQogICAgKwkgICAgInRl
c3QiID0+ICJzY3JpcHRzL2V4dHJhY3QtaWtjb25maWciLA0KICAgICsJfSwNCiAgICArKTsNCiAg
ICArDQogICAgK3N1YiByZWFkX2NvbmZpZyB7DQogICAgKyAgICBmb3JlYWNoIG15ICRjb25mIChA
c2VhcmNoY29uZmlncykgew0KICAgICsJbXkgJGZpbGUgPSAkY29uZi0+eyJmaWxlIn07DQogICAg
Kw0KICAgICsJbmV4dCBpZiAoICEgLWYgIiRmaWxlIik7DQogICAgKw0KICAgICsJaWYgKGRlZmlu
ZWQoJGNvbmYtPnsidGVzdCJ9KSkgew0KICAgICsJICAgIGAkY29uZi0+eyJ0ZXN0In0gJGNvbmYt
PnsiZmlsZSJ9IDI+L2Rldi9udWxsYDsNCiAgICArCSAgICBuZXh0IGlmICgkPyk7DQogICAgKwl9
DQogICAgKw0KICAgICsJbXkgJGV4ZWMgPSAkY29uZi0+eyJleGVjIn07DQogICAgKw0KICAgICsJ
cHJpbnQgU1RERVJSICJ1c2luZyBjb25maWc6ICckZmlsZSdcbiI7DQogICAgKw0KICAgICsJb3Bl
bihteSAkaW5maWxlLCAnLXwnLCAiJGV4ZWMgJGZpbGUiKSB8fCBkaWUgIkZhaWxlZCB0byBydW4g
JGV4ZWMgJGZpbGUiOw0KICAgICsJbXkgQHggPSA8JGluZmlsZT47DQogICAgKwljbG9zZSAkaW5m
aWxlOw0KICAgICsJcmV0dXJuIEB4Ow0KICAgICsgICAgfQ0KICAgICsgICAgZGllICJObyBjb25m
aWcgZmlsZSBmb3VuZCI7DQogICAgK30NCiAgICArDQogICAgK215IEBjb25maWdfZmlsZSA9IHJl
YWRfY29uZmlnOw0KICAgICsNCiAgICArIyBQYXJzZSBvcHRpb25zDQogICAgK215ICRsb2NhbG1v
ZGNvbmZpZyA9IDA7DQogICAgK215ICRsb2NhbHllc2NvbmZpZyA9IDA7DQogICAgKw0KICAgICtH
ZXRPcHRpb25zKCJsb2NhbG1vZGNvbmZpZyIgPT4gXCRsb2NhbG1vZGNvbmZpZywNCiAgICArCSAg
ICJsb2NhbHllc2NvbmZpZyIgPT4gXCRsb2NhbHllc2NvbmZpZyk7DQogICAgKw0KICAgICsjIEdl
dCB0aGUgYnVpbGQgc291cmNlIGFuZCB0b3AgbGV2ZWwgS2NvbmZpZyBmaWxlIChwYXNzZWQgaW4p
DQogICAgK215ICRrc291cmNlID0gKCRBUkdWWzBdID8gJEFSR1ZbMF0gOiAnLicpOw0KICAgICtt
eSAka2NvbmZpZyA9ICRBUkdWWzFdOw0KICAgICtteSAkbHNtb2RfZmlsZSA9ICRFTlZ7J0xTTU9E
J307DQogICAgKw0KICAgICtteSBAbWFrZWZpbGVzID0gYGZpbmQgJGtzb3VyY2UgLW5hbWUgTWFr
ZWZpbGUgLW9yIC1uYW1lIEtidWlsZCAyPi9kZXYvbnVsbGA7DQogICAgK2Nob21wIEBtYWtlZmls
ZXM7DQogICAgKw0KICAgICtteSAlZGVwZW5kczsNCiAgICArbXkgJXNlbGVjdHM7DQogICAgK215
ICVwcm9tcHRzOw0KICAgICtteSAlb2JqZWN0czsNCiAgICArbXkgJHZhcjsNCiAgICArbXkgJGlm
bGV2ZWwgPSAwOw0KICAgICtteSBAaWZkZXBzOw0KICAgICsNCiAgICArIyBwcmV2ZW50IHJlY3Vy
c2lvbg0KICAgICtteSAlcmVhZF9rY29uZmlnczsNCiAgICArDQogICAgK3N1YiByZWFkX2tjb25m
aWcgew0KICAgICsgICAgbXkgKCRrY29uZmlnKSA9IEBfOw0KICAgICsNCiAgICArICAgIG15ICRz
dGF0ZSA9ICJOT05FIjsNCiAgICArICAgIG15ICRjb25maWc7DQogICAgKw0KICAgICsgICAgbXkg
JGNvbnQgPSAwOw0KICAgICsgICAgbXkgJGxpbmU7DQogICAgKw0KICAgICsgICAgbXkgJHNvdXJj
ZSA9ICIka3NvdXJjZS8ka2NvbmZpZyI7DQogICAgKyAgICBteSAkbGFzdF9zb3VyY2UgPSAiIjsN
CiAgICArDQogICAgKyAgICAjIENoZWNrIGZvciBhbnkgZW52aXJvbm1lbnQgdmFyaWFibGVzIHVz
ZWQNCiAgICArICAgIHdoaWxlICgkc291cmNlID1+IC9cJFwoKFx3KylcKS8gJiYgJGxhc3Rfc291
cmNlIG5lICRzb3VyY2UpIHsNCiAgICArCW15ICRlbnYgPSAkMTsNCiAgICArCSRsYXN0X3NvdXJj
ZSA9ICRzb3VyY2U7DQogICAgKwkkc291cmNlID1+IHMvXCRcKCRlbnZcKS8kRU5WeyRlbnZ9LzsN
CiAgICArICAgIH0NCiAgICArDQogICAgKyAgICBvcGVuKG15ICRraW5maWxlLCAnPCcsICRzb3Vy
Y2UpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAka2NvbmZpZyI7DQogICAgKyAgICB3aGlsZSAoPCRraW5m
aWxlPikgew0KICAgICsJY2hvbXA7DQogICAgKw0KICAgICsJIyBNYWtlIHN1cmUgdGhhdCBsaW5l
cyBlbmRpbmcgd2l0aCBcIGNvbnRpbnVlDQogICAgKwlpZiAoJGNvbnQpIHsNCiAgICArCSAgICAk
XyA9ICRsaW5lIC4gIiAiIC4gJF87DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKHMvXFwkLy8p
IHsNCiAgICArCSAgICAkY29udCA9IDE7DQogICAgKwkgICAgJGxpbmUgPSAkXzsNCiAgICArCSAg
ICBuZXh0Ow0KICAgICsJfQ0KICAgICsNCiAgICArCSRjb250ID0gMDsNCiAgICArDQogICAgKwkj
IGNvbGxlY3QgYW55IEtjb25maWcgc291cmNlcw0KICAgICsJaWYgKC9ec291cmNlXHMrIj8oW14i
XSspLykgew0KICAgICsJICAgIG15ICRrY29uZmlnID0gJDE7DQogICAgKwkgICAgIyBwcmV2ZW50
IHJlYWRpbmcgdHdpY2UuDQogICAgKwkgICAgaWYgKCFkZWZpbmVkKCRyZWFkX2tjb25maWdzeyRr
Y29uZmlnfSkpIHsNCiAgICArCQkkcmVhZF9rY29uZmlnc3ska2NvbmZpZ30gPSAxOw0KICAgICsJ
CXJlYWRfa2NvbmZpZygka2NvbmZpZyk7DQogICAgKwkgICAgfQ0KICAgICsJICAgIG5leHQ7DQog
ICAgKwl9DQogICAgKw0KICAgICsJIyBjb25maWdzIGZvdW5kDQogICAgKwlpZiAoL15ccyoobWVu
dSk/Y29uZmlnXHMrKFxTKylccyokLykgew0KICAgICsJICAgICRzdGF0ZSA9ICJORVciOw0KICAg
ICsJICAgICRjb25maWcgPSAkMjsNCiAgICArDQogICAgKwkgICAgIyBBZGQgZGVwZW5kcyBmb3Ig
J2lmJyBuZXN0aW5nDQogICAgKwkgICAgZm9yIChteSAkaSA9IDA7ICRpIDwgJGlmbGV2ZWw7ICRp
KyspIHsNCiAgICArCQlpZiAoJGkpIHsNCiAgICArCQkgICAgJGRlcGVuZHN7JGNvbmZpZ30gLj0g
IiAiIC4gJGlmZGVwc1skaV07DQogICAgKwkJfSBlbHNlIHsNCiAgICArCQkgICAgJGRlcGVuZHN7
JGNvbmZpZ30gPSAkaWZkZXBzWyRpXTsNCiAgICArCQl9DQogICAgKwkJJHN0YXRlID0gIkRFUCI7
DQogICAgKwkgICAgfQ0KICAgICsNCiAgICArCSMgY29sbGVjdCB0aGUgZGVwZW5kcyBmb3IgdGhl
IGNvbmZpZw0KICAgICsJfSBlbHNpZiAoJHN0YXRlIGVxICJORVciICYmIC9eXHMqZGVwZW5kc1xz
K29uXHMrKC4qKSQvKSB7DQogICAgKwkgICAgJHN0YXRlID0gIkRFUCI7DQogICAgKwkgICAgJGRl
cGVuZHN7JGNvbmZpZ30gPSAkMTsNCiAgICArCX0gZWxzaWYgKCRzdGF0ZSBlcSAiREVQIiAmJiAv
XlxzKmRlcGVuZHNccytvblxzKyguKikkLykgew0KICAgICsJICAgICRkZXBlbmRzeyRjb25maWd9
IC49ICIgIiAuICQxOw0KICAgICsJfSBlbHNpZiAoJHN0YXRlIGVxICJERVAiICYmIC9eXHMqZGVm
KF8oYm9vbHx0cmlzdGF0ZSl8YXVsdClccysoXFMuKikkLykgew0KICAgICsJICAgIG15ICRkZXAg
PSAkMzsNCiAgICArCSAgICBpZiAoJGRlcCAhfiAvXlxzKih5fG18bilccyokLykgew0KICAgICsJ
CSRkZXAgPX4gcy8uKlxzaWZccysvLzsNCiAgICArCQkkZGVwZW5kc3skY29uZmlnfSAuPSAiICIg
LiAkZGVwOw0KICAgICsJCWRwcmludCAiQWRkZWQgZGVmYXVsdCBkZXBlbmRzICRkZXAgdG8gJGNv
bmZpZ1xuIjsNCiAgICArCSAgICB9DQogICAgKw0KICAgICsJIyBHZXQgdGhlIGNvbmZpZ3MgdGhh
dCBzZWxlY3QgdGhpcyBjb25maWcNCiAgICArCX0gZWxzaWYgKCRzdGF0ZSBuZSAiTk9ORSIgJiYg
L15ccypzZWxlY3RccysoXFMrKS8pIHsNCiAgICArCSAgICBteSAkY29uZiA9ICQxOw0KICAgICsJ
ICAgIGlmIChkZWZpbmVkKCRzZWxlY3RzeyRjb25mfSkpIHsNCiAgICArCQkkc2VsZWN0c3skY29u
Zn0gLj0gIiAiIC4gJGNvbmZpZzsNCiAgICArCSAgICB9IGVsc2Ugew0KICAgICsJCSRzZWxlY3Rz
eyRjb25mfSA9ICRjb25maWc7DQogICAgKwkgICAgfQ0KICAgICsNCiAgICArCSMgY29uZmlncyB3
aXRob3V0IHByb21wdHMgbXVzdCBiZSBzZWxlY3RlZA0KICAgICsJfSBlbHNpZiAoJHN0YXRlIG5l
ICJOT05FIiAmJiAvXlxzKih0cmlzdGF0ZVxzK1xTfHByb21wdFxiKS8pIHsNCiAgICArCSAgICAj
IG5vdGUgaWYgdGhlIGNvbmZpZyBoYXMgYSBwcm9tcHQNCiAgICArCSAgICAkcHJvbXB0c3skY29u
ZmlnfSA9IDE7DQogICAgKw0KICAgICsJIyBDaGVjayBmb3IgaWYgc3RhdGVtZW50cw0KICAgICsJ
fSBlbHNpZiAoL15pZlxzKyguKlxTKVxzKiQvKSB7DQogICAgKwkgICAgbXkgJGRlcHMgPSAkMTsN
CiAgICArCSAgICAjIHJlbW92ZSBiZWdpbm5pbmcgYW5kIGVuZGluZyBub24gdGV4dA0KICAgICsJ
ICAgICRkZXBzID1+IHMvXlteYS16QS1aMC05X10qLy87DQogICAgKwkgICAgJGRlcHMgPX4gcy9b
XmEtekEtWjAtOV9dKiQvLzsNCiAgICArDQogICAgKwkgICAgbXkgQGRlcHMgPSBzcGxpdCAvW15h
LXpBLVowLTlfXSsvLCAkZGVwczsNCiAgICArDQogICAgKwkgICAgJGlmZGVwc1skaWZsZXZlbCsr
XSA9IGpvaW4gJzonLCBAZGVwczsNCiAgICArDQogICAgKwl9IGVsc2lmICgvXmVuZGlmLykgew0K
ICAgICsNCiAgICArCSAgICAkaWZsZXZlbC0tIGlmICgkaWZsZXZlbCk7DQogICAgKw0KICAgICsJ
IyBzdG9wIG9uICJoZWxwIiBhbmQga2V5d29yZHMgdGhhdCBlbmQgYSBtZW51IGVudHJ5DQogICAg
Kwl9IGVsc2lmICgvXlxzKigtLS0pP2hlbHAoLS0tKT9ccyokLyB8fCAvXihjb21tZW50fGNob2lj
ZXxtZW51KVxiLykgew0KICAgICsJICAgICRzdGF0ZSA9ICJOT05FIjsNCiAgICArCX0NCiAgICAr
ICAgIH0NCiAgICArICAgIGNsb3NlKCRraW5maWxlKTsNCiAgICArfQ0KICAgICsNCiAgICAraWYg
KCRrY29uZmlnKSB7DQogICAgKyAgICByZWFkX2tjb25maWcoJGtjb25maWcpOw0KICAgICt9DQog
ICAgKw0KICAgICsjIE1ha2VmaWxlcyBjYW4gdXNlIHZhcmlhYmxlcyB0byBkZWZpbmUgdGhlaXIg
ZGVwZW5kZW5jaWVzDQogICAgK3N1YiBjb252ZXJ0X3ZhcnMgew0KICAgICsgICAgbXkgKCRsaW5l
LCAldmFycykgPSBAXzsNCiAgICArDQogICAgKyAgICBteSAkcHJvY2VzcyA9ICIiOw0KICAgICsN
CiAgICArICAgIHdoaWxlICgkbGluZSA9fiBzL14oLio/KShcJFwoKC4qPylcKSkvLykgew0KICAg
ICsJbXkgJHN0YXJ0ID0gJDE7DQogICAgKwlteSAkdmFyaWFibGUgPSAkMjsNCiAgICArCW15ICR2
YXIgPSAkMzsNCiAgICArDQogICAgKwlpZiAoZGVmaW5lZCgkdmFyc3skdmFyfSkpIHsNCiAgICAr
CSAgICAkcHJvY2VzcyAuPSAkc3RhcnQgLiAkdmFyc3skdmFyfTsNCiAgICArCX0gZWxzZSB7DQog
ICAgKwkgICAgJHByb2Nlc3MgLj0gJHN0YXJ0IC4gJHZhcmlhYmxlOw0KICAgICsJfQ0KICAgICsg
ICAgfQ0KICAgICsNCiAgICArICAgICRwcm9jZXNzIC49ICRsaW5lOw0KICAgICsNCiAgICArICAg
IHJldHVybiAkcHJvY2VzczsNCiAgICArfQ0KICAgICsNCiAgICArIyBSZWFkIGFsbCBNYWtlZmls
ZXMgdG8gbWFwIHRoZSBjb25maWdzIHRvIHRoZSBvYmplY3RzDQogICAgK2ZvcmVhY2ggbXkgJG1h
a2VmaWxlIChAbWFrZWZpbGVzKSB7DQogICAgKw0KICAgICsgICAgbXkgJGxpbmUgPSAiIjsNCiAg
ICArICAgIG15ICVtYWtlX3ZhcnM7DQogICAgKw0KICAgICsgICAgb3BlbihteSAkaW5maWxlLCAn
PCcsICRtYWtlZmlsZSkgfHwgZGllICJDYW4ndCBvcGVuICRtYWtlZmlsZSI7DQogICAgKyAgICB3
aGlsZSAoPCRpbmZpbGU+KSB7DQogICAgKwkjIGlmIHRoaXMgbGluZSBlbmRzIHdpdGggYSBiYWNr
c2xhc2gsIGNvbnRpbnVlDQogICAgKwljaG9tcDsNCiAgICArCWlmICgvXiguKilcXCQvKSB7DQog
ICAgKwkgICAgJGxpbmUgLj0gJDE7DQogICAgKwkgICAgbmV4dDsNCiAgICArCX0NCiAgICArDQog
ICAgKwkkbGluZSAuPSAkXzsNCiAgICArCSRfID0gJGxpbmU7DQogICAgKwkkbGluZSA9ICIiOw0K
ICAgICsNCiAgICArCW15ICRvYmpzOw0KICAgICsNCiAgICArCSMgQ29udmVydCB2YXJpYWJsZXMg
aW4gYSBsaW5lIChjb3VsZCBkZWZpbmUgY29uZmlncykNCiAgICArCSRfID0gY29udmVydF92YXJz
KCRfLCAlbWFrZV92YXJzKTsNCiAgICArDQogICAgKwkjIGNvbGxlY3Qgb2JqZWN0cyBhZnRlciBv
YmotJChDT05GSUdfRk9PX0JBUikNCiAgICArCWlmICgvb2JqLVwkXCgoQ09ORklHX1teXCldKilc
KVxzKlsrOl0/PVxzKiguKikvKSB7DQogICAgKwkgICAgJHZhciA9ICQxOw0KICAgICsJICAgICRv
YmpzID0gJDI7DQogICAgKw0KICAgICsJIyBjaGVjayBpZiB2YXJpYWJsZXMgYXJlIHNldA0KICAg
ICsJfSBlbHNpZiAoL15ccyooXFMrKVxzKls6XT89XHMqKC4qXFMpLykgew0KICAgICsJICAgICRt
YWtlX3ZhcnN7JDF9ID0gJDI7DQogICAgKwl9DQogICAgKwlpZiAoZGVmaW5lZCgkb2JqcykpIHsN
CiAgICArCSAgICBmb3JlYWNoIG15ICRvYmogKHNwbGl0IC9ccysvLCRvYmpzKSB7DQogICAgKwkJ
JG9iaiA9fiBzLy0vXy9nOw0KICAgICsJCWlmICgkb2JqID1+IC8oLiopXC5vJC8pIHsNCiAgICAr
CQkgICAgIyBPYmplY3RzIG1heSBiZSBlbmFibGVkIGJ5IG1vcmUgdGhhbiBvbmUgY29uZmlnLg0K
ICAgICsJCSAgICAjIFN0b3JlIGNvbmZpZ3MgaW4gYW4gYXJyYXkuDQogICAgKwkJICAgIG15IEBh
cnI7DQogICAgKw0KICAgICsJCSAgICBpZiAoZGVmaW5lZCgkb2JqZWN0c3skMX0pKSB7DQogICAg
KwkJCUBhcnIgPSBAeyRvYmplY3RzeyQxfX07DQogICAgKwkJICAgIH0NCiAgICArDQogICAgKwkJ
ICAgICRhcnJbJCNhcnIrMV0gPSAkdmFyOw0KICAgICsNCiAgICArCQkgICAgIyBUaGUgb2JqZWN0
cyBoYXZlIGEgaGFzaCBtYXBwaW5nIHRvIGEgcmVmZXJlbmNlDQogICAgKwkJICAgICMgb2YgYW4g
YXJyYXkgb2YgY29uZmlncy4NCiAgICArCQkgICAgJG9iamVjdHN7JDF9ID0gXEBhcnI7DQogICAg
KwkJfQ0KICAgICsJICAgIH0NCiAgICArCX0NCiAgICArICAgIH0NCiAgICArICAgIGNsb3NlKCRp
bmZpbGUpOw0KICAgICt9DQogICAgKw0KICAgICtteSAlbW9kdWxlczsNCiAgICArbXkgJGxpbmZp
bGU7DQogICAgKw0KICAgICtpZiAoZGVmaW5lZCgkbHNtb2RfZmlsZSkpIHsNCiAgICArICAgIGlm
ICggISAtZiAkbHNtb2RfZmlsZSkgew0KICAgICsJaWYgKCAtZiAkRU5WeydvYmp0cmVlJ30uIi8i
LiRsc21vZF9maWxlKSB7DQogICAgKwkgICAgJGxzbW9kX2ZpbGUgPSAkRU5WeydvYmp0cmVlJ30u
Ii8iLiRsc21vZF9maWxlOw0KICAgICsJfSBlbHNlIHsNCiAgICArCQlkaWUgIiRsc21vZF9maWxl
IG5vdCBmb3VuZCI7DQogICAgKwl9DQogICAgKyAgICB9DQogICAgKw0KICAgICsgICAgbXkgJG90
eXBlID0gKCAteCAkbHNtb2RfZmlsZSkgPyAnLXwnIDogJzwnOw0KICAgICsgICAgb3BlbigkbGlu
ZmlsZSwgJG90eXBlLCAkbHNtb2RfZmlsZSk7DQogICAgKw0KICAgICt9IGVsc2Ugew0KICAgICsN
CiAgICArICAgICMgc2VlIHdoYXQgbW9kdWxlcyBhcmUgbG9hZGVkIG9uIHRoaXMgc3lzdGVtDQog
ICAgKyAgICBteSAkbHNtb2Q7DQogICAgKw0KICAgICsgICAgZm9yZWFjaCBteSAkZGlyICggKCIv
c2JpbiIsICIvYmluIiwgIi91c3Ivc2JpbiIsICIvdXNyL2JpbiIpICkgew0KICAgICsJaWYgKCAt
eCAiJGRpci9sc21vZCIgKSB7DQogICAgKwkgICAgJGxzbW9kID0gIiRkaXIvbHNtb2QiOw0KICAg
ICsJICAgIGxhc3Q7DQogICAgKwl9DQogICAgK30NCiAgICArICAgIGlmICghZGVmaW5lZCgkbHNt
b2QpKSB7DQogICAgKwkjIHRyeSBqdXN0IHRoZSBwYXRoDQogICAgKwkkbHNtb2QgPSAibHNtb2Qi
Ow0KICAgICsgICAgfQ0KICAgICsNCiAgICArICAgIG9wZW4oJGxpbmZpbGUsICctfCcsICRsc21v
ZCkgfHwgZGllICJDYW4gbm90IGNhbGwgbHNtb2Qgd2l0aCAkbHNtb2QiOw0KICAgICt9DQogICAg
Kw0KICAgICt3aGlsZSAoPCRsaW5maWxlPikgew0KICAgICsJbmV4dCBpZiAoL15Nb2R1bGUvKTsg
ICMgU2tpcCB0aGUgZmlyc3QgbGluZS4NCiAgICArCWlmICgvXihcUyspLykgew0KICAgICsJCSRt
b2R1bGVzeyQxfSA9IDE7DQogICAgKwl9DQogICAgK30NCiAgICArY2xvc2UgKCRsaW5maWxlKTsN
CiAgICArDQogICAgKyMgYWRkIHRvIHRoZSBjb25maWdzIGhhc2ggYWxsIGNvbmZpZ3MgdGhhdCBh
cmUgbmVlZGVkIHRvIGVuYWJsZQ0KICAgICsjIGEgbG9hZGVkIG1vZHVsZS4gVGhpcyBpcyBhIGRp
cmVjdCBvYmotJHtDT05GSUdfRk9PfSArPSBiYXIubw0KICAgICsjIHdoZXJlIHdlIGtub3cgd2Ug
bmVlZCBiYXIubyBzbyB3ZSBhZGQgRk9PIHRvIHRoZSBsaXN0Lg0KICAgICtteSAlY29uZmlnczsN
CiAgICArZm9yZWFjaCBteSAkbW9kdWxlIChrZXlzKCVtb2R1bGVzKSkgew0KICAgICsgICAgaWYg
KGRlZmluZWQoJG9iamVjdHN7JG1vZHVsZX0pKSB7DQogICAgKwlteSBAYXJyID0gQHskb2JqZWN0
c3skbW9kdWxlfX07DQogICAgKwlmb3JlYWNoIG15ICRjb25mIChAYXJyKSB7DQogICAgKwkgICAg
JGNvbmZpZ3N7JGNvbmZ9ID0gJG1vZHVsZTsNCiAgICArCSAgICBkcHJpbnQgIiRjb25mIGFkZGVk
IGJ5IGRpcmVjdCAoJG1vZHVsZSlcbiI7DQogICAgKwkgICAgaWYgKCRkZWJ1Z3ByaW50KSB7DQog
ICAgKwkJbXkgJGM9JGNvbmY7DQogICAgKwkJJGMgPX4gcy9eQ09ORklHXy8vOw0KICAgICsJCWlm
IChkZWZpbmVkKCRkZXBlbmRzeyRjfSkpIHsNCiAgICArCQkgICAgZHByaW50ICIgZGVwcyA9ICRk
ZXBlbmRzeyRjfVxuIjsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCSAgICBkcHJpbnQgIiBubyBk
ZXBzXG4iOw0KICAgICsJCX0NCiAgICArCSAgICB9DQogICAgKwl9DQogICAgKyAgICB9IGVsc2Ug
ew0KICAgICsJIyBNb3N0IGxpa2VseSwgc29tZW9uZSBoYXMgYSBjdXN0b20gKGJpbmFyeT8pIG1v
ZHVsZSBsb2FkZWQuDQogICAgKwlwcmludCBTVERFUlIgIiRtb2R1bGUgY29uZmlnIG5vdCBmb3Vu
ZCEhXG4iOw0KICAgICsgICAgfQ0KICAgICt9DQogICAgKw0KICAgICsjIFJlYWQgdGhlIGN1cnJl
bnQgY29uZmlnLCBhbmQgc2VlIHdoYXQgaXMgZW5hYmxlZC4gV2Ugd2FudCB0bw0KICAgICsjIGln
bm9yZSBjb25maWdzIHRoYXQgd2Ugd291bGQgbm90IGVuYWJsZSBhbnl3YXkuDQogICAgKw0KICAg
ICtteSAlb3JpZ19jb25maWdzOw0KICAgICtteSAkdmFsaWQgPSAiQS1aYS16XzAtOSI7DQogICAg
Kw0KICAgICtmb3JlYWNoIG15ICRsaW5lIChAY29uZmlnX2ZpbGUpIHsNCiAgICArICAgICRfID0g
JGxpbmU7DQogICAgKw0KICAgICsgICAgaWYgKC8oQ09ORklHX1skdmFsaWRdKik9KG18eSkvKSB7
DQogICAgKwkkb3JpZ19jb25maWdzeyQxfSA9ICQyOw0KICAgICsgICAgfQ0KICAgICt9DQogICAg
Kw0KICAgICtteSAkcmVwZWF0ID0gMTsNCiAgICArDQogICAgK215ICRkZXBjb25maWc7DQogICAg
Kw0KICAgICsjDQogICAgKyMgTm90ZSwgd2UgZG8gbm90IGNhcmUgYWJvdXQgb3BlcmFuZHMgKGxp
a2U6ICYmLCB8fCwgISkgd2Ugd2FudCB0byBhZGQgYW55DQogICAgKyMgY29uZmlnIHRoYXQgaXMg
aW4gdGhlIGRlcGVuZCBsaXN0IG9mIGFub3RoZXIgY29uZmlnLiBUaGlzIHNjcmlwdCBkb2VzDQog
ICAgKyMgbm90IGVuYWJsZSBjb25maWdzIHRoYXQgYXJlIG5vdCBhbHJlYWR5IGVuYWJsZWQuIElm
IHdlIGNvbWUgYWNyb3NzIGENCiAgICArIyBjb25maWcgQSB0aGF0IGRlcGVuZHMgb24gIUIsIHdl
IGNhbiBzdGlsbCBhZGQgQiB0byB0aGUgbGlzdCBvZiBkZXBlbmRzDQogICAgKyMgdG8ga2VlcCBv
bi4gSWYgQSB3YXMgb24gaW4gdGhlIG9yaWdpbmFsIGNvbmZpZywgQiB3b3VsZCBub3QgaGF2ZSBi
ZWVuDQogICAgKyMgYW5kIEIgd291bGQgbm90IGJlIHR1cm5lZCBvbiBieSB0aGlzIHNjcmlwdC4N
CiAgICArIw0KICAgICtzdWIgcGFyc2VfY29uZmlnX2RlcGVuZHMNCiAgICArew0KICAgICsgICAg
bXkgKCRwKSA9IEBfOw0KICAgICsNCiAgICArICAgIHdoaWxlICgkcCA9fiAvWyR2YWxpZF0vKSB7
DQogICAgKw0KICAgICsJaWYgKCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSspLykgew0KICAg
ICsJICAgIG15ICRjb25mID0gIkNPTkZJR18iIC4gJDE7DQogICAgKw0KICAgICsJICAgICRwID1+
IHMvXlteJHZhbGlkXSpbJHZhbGlkXSsvLzsNCiAgICArDQogICAgKwkgICAgIyBXZSBvbmx5IG5l
ZWQgdG8gcHJvY2VzcyBpZiB0aGUgZGVwZW5kIGNvbmZpZyBpcyBhIG1vZHVsZQ0KICAgICsJICAg
IGlmICghZGVmaW5lZCgkb3JpZ19jb25maWdzeyRjb25mfSkgfHwgJG9yaWdfY29uZmlnc3skY29u
Zn0gZXEgInkiKSB7DQogICAgKwkJbmV4dDsNCiAgICArCSAgICB9DQogICAgKw0KICAgICsJICAg
IGlmICghZGVmaW5lZCgkY29uZmlnc3skY29uZn0pKSB7DQogICAgKwkJIyBXZSBtdXN0IG1ha2Ug
c3VyZSB0aGF0IHRoaXMgY29uZmlnIGhhcyBpdHMNCiAgICArCQkjIGRlcGVuZGVuY2llcyBtZXQu
DQogICAgKwkJJHJlcGVhdCA9IDE7ICMgZG8gYWdhaW4NCiAgICArCQlkcHJpbnQgIiRjb25mIHNl
bGVjdGVkIGJ5IGRlcGVuZCAkZGVwY29uZmlnXG4iOw0KICAgICsJCSRjb25maWdzeyRjb25mfSA9
IDE7DQogICAgKwkgICAgfQ0KICAgICsJfSBlbHNlIHsNCiAgICArCSAgICBkaWUgInRoaXMgc2hv
dWxkIG5ldmVyIGhhcHBlbiI7DQogICAgKwl9DQogICAgKyAgICB9DQogICAgK30NCiAgICArDQog
ICAgKyMgU2VsZWN0IGlzIHRyZWF0ZWQgYSBiaXQgZGlmZmVyZW50bHkgdGhhbiBkZXBlbmRzLiBX
ZSBjYWxsIHRoaXMNCiAgICArIyB3aGVuIGEgY29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIHJlcXVp
cmVzIGFub3RoZXIgY29uZmlnIHRvIGJlDQogICAgKyMgc2VsZWN0ZWQuIFdlIHVzZSB0byBqdXN0
IHNlbGVjdCBhbGwgY29uZmlncyB0aGF0IHNlbGVjdGVkIHRoaXMNCiAgICArIyBjb25maWcsIGJ1
dCBmb3VuZCB0aGF0IHRoYXQgY2FuIGJhbGxvb24gaW50byBlbmFibGluZyBodW5kcmVkcw0KICAg
ICsjIG9mIGNvbmZpZ3MgdGhhdCB3ZSBkbyBub3QgY2FyZSBhYm91dC4NCiAgICArIw0KICAgICsj
IFRoZSBpZGVhIGlzIHdlIGxvb2sgYXQgYWxsIHRoZSBjb25maWdzIHRoYXQgc2VsZWN0IGl0LiBJ
ZiBvbmUNCiAgICArIyBpcyBhbHJlYWR5IGluIG91ciBsaXN0IG9mIGNvbmZpZ3MgdG8gZW5hYmxl
LCB0aGVuIHRoZXJlJ3Mgbm90aGluZw0KICAgICsjIGVsc2UgdG8gZG8uIElmIHRoZXJlIGlzbid0
LCB3ZSBwaWNrIHRoZSBmaXJzdCBjb25maWcgdGhhdCB3YXMNCiAgICArIyBlbmFibGVkIGluIHRo
ZSBvcmlnbmFsIGNvbmZpZyBhbmQgdXNlIHRoYXQuDQogICAgK3N1YiBwYXJzZV9jb25maWdfc2Vs
ZWN0cw0KICAgICt7DQogICAgKyAgICBteSAoJGNvbmZpZywgJHApID0gQF87DQogICAgKw0KICAg
ICsgICAgbXkgJG5leHRfY29uZmlnOw0KICAgICsNCiAgICArICAgIHdoaWxlICgkcCA9fiAvWyR2
YWxpZF0vKSB7DQogICAgKw0KICAgICsJaWYgKCRwID1+IC9eW14kdmFsaWRdKihbJHZhbGlkXSsp
Lykgew0KICAgICsJICAgIG15ICRjb25mID0gIkNPTkZJR18iIC4gJDE7DQogICAgKw0KICAgICsJ
ICAgICRwID1+IHMvXlteJHZhbGlkXSpbJHZhbGlkXSsvLzsNCiAgICArDQogICAgKwkgICAgIyBN
YWtlIHN1cmUgdGhhdCB0aGlzIGNvbmZpZyBleGlzdHMgaW4gdGhlIGN1cnJlbnQgLmNvbmZpZyBm
aWxlDQogICAgKwkgICAgaWYgKCFkZWZpbmVkKCRvcmlnX2NvbmZpZ3N7JGNvbmZ9KSkgew0KICAg
ICsJCWRwcmludCAiJGNvbmYgbm90IHNldCBmb3IgJGNvbmZpZyBzZWxlY3RcbiI7DQogICAgKwkJ
bmV4dDsNCiAgICArCSAgICB9DQogICAgKw0KICAgICsJICAgICMgQ2hlY2sgaWYgc29tZXRoaW5n
IG90aGVyIHRoYW4gYSBtb2R1bGUgc2VsZWN0cyB0aGlzIGNvbmZpZw0KICAgICsJICAgIGlmIChk
ZWZpbmVkKCRvcmlnX2NvbmZpZ3N7JGNvbmZ9KSAmJiAkb3JpZ19jb25maWdzeyRjb25mfSBuZSAi
bSIpIHsNCiAgICArCQlkcHJpbnQgIiRjb25mIChub24gbW9kdWxlKSBzZWxlY3RzIGNvbmZpZywg
d2UgYXJlIGdvb2RcbiI7DQogICAgKwkJIyB3ZSBhcmUgZ29vZCB3aXRoIHRoaXMNCiAgICArCQly
ZXR1cm47DQogICAgKwkgICAgfQ0KICAgICsJICAgIGlmIChkZWZpbmVkKCRjb25maWdzeyRjb25m
fSkpIHsNCiAgICArCQlkcHJpbnQgIiRjb25mIHNlbGVjdHMgJGNvbmZpZyBzbyB3ZSBhcmUgZ29v
ZFxuIjsNCiAgICArCQkjIEEgc2V0IGNvbmZpZyBzZWxlY3RzIHRoaXMgY29uZmlnLCB3ZSBhcmUg
Z29vZA0KICAgICsJCXJldHVybjsNCiAgICArCSAgICB9DQogICAgKwkgICAgIyBTZXQgdGhpcyBj
b25maWcgdG8gYmUgc2VsZWN0ZWQNCiAgICArCSAgICBpZiAoIWRlZmluZWQoJG5leHRfY29uZmln
KSkgew0KICAgICsJCSRuZXh0X2NvbmZpZyA9ICRjb25mOw0KICAgICsJICAgIH0NCiAgICArCX0g
ZWxzZSB7DQogICAgKwkgICAgZGllICJ0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4iOw0KICAgICsJ
fQ0KICAgICsgICAgfQ0KICAgICsNCiAgICArICAgICMgSWYgbm8gcG9zc2libGUgY29uZmlnIHNl
bGVjdGVkIHRoaXMsIHRoZW4gc29tZXRoaW5nIGhhcHBlbmVkLg0KICAgICsgICAgaWYgKCFkZWZp
bmVkKCRuZXh0X2NvbmZpZykpIHsNCiAgICArCXByaW50IFNUREVSUiAiV0FSTklORzogJGNvbmZp
ZyBpcyByZXF1aXJlZCwgYnV0IG5vdGhpbmcgaW4gdGhlXG4iOw0KICAgICsJcHJpbnQgU1RERVJS
ICIgIGN1cnJlbnQgY29uZmlnIHNlbGVjdHMgaXQuXG4iOw0KICAgICsJcmV0dXJuOw0KICAgICsg
ICAgfQ0KICAgICsNCiAgICArICAgICMgSWYgd2UgYXJlIGhlcmUsIHRoZW4gd2UgZm91bmQgbm8g
Y29uZmlnIHRoYXQgaXMgc2V0IGFuZA0KICAgICsgICAgIyBzZWxlY3RzIHRoaXMgY29uZmlnLiBS
ZXBlYXQuDQogICAgKyAgICAkcmVwZWF0ID0gMTsNCiAgICArICAgICMgTWFrZSB0aGlzIGNvbmZp
ZyBuZWVkIHRvIGJlIHNlbGVjdGVkDQogICAgKyAgICAkY29uZmlnc3skbmV4dF9jb25maWd9ID0g
MTsNCiAgICArICAgIGRwcmludCAiJG5leHRfY29uZmlnIHNlbGVjdGVkIGJ5IHNlbGVjdCAkY29u
ZmlnXG4iOw0KICAgICt9DQogICAgKw0KICAgICtteSAlcHJvY2Vzc19zZWxlY3RzOw0KICAgICsN
CiAgICArIyBsb29wIHRocm91Z2ggYWxsIGNvbmZpZ3MsIHNlbGVjdCB0aGVpciBkZXBlbmRlbmNp
ZXMuDQogICAgK3N1YiBsb29wX2RlcGVuZCB7DQogICAgKyAgICAkcmVwZWF0ID0gMTsNCiAgICAr
DQogICAgKyAgICB3aGlsZSAoJHJlcGVhdCkgew0KICAgICsJJHJlcGVhdCA9IDA7DQogICAgKw0K
ICAgICsgICAgICBmb3Jsb29wOg0KICAgICsJZm9yZWFjaCBteSAkY29uZmlnIChrZXlzICVjb25m
aWdzKSB7DQogICAgKw0KICAgICsJICAgICMgSWYgdGhpcyBjb25maWcgaXMgbm90IGEgbW9kdWxl
LCB3ZSBkbyBub3QgbmVlZCB0byBwcm9jZXNzIGl0DQogICAgKwkgICAgaWYgKGRlZmluZWQoJG9y
aWdfY29uZmlnc3skY29uZmlnfSkgJiYgJG9yaWdfY29uZmlnc3skY29uZmlnfSBuZSAibSIpIHsN
CiAgICArCQluZXh0IGZvcmxvb3A7DQogICAgKwkgICAgfQ0KICAgICsNCiAgICArCSAgICAkY29u
ZmlnID1+IHMvXkNPTkZJR18vLzsNCiAgICArCSAgICAkZGVwY29uZmlnID0gJGNvbmZpZzsNCiAg
ICArDQogICAgKwkgICAgaWYgKGRlZmluZWQoJGRlcGVuZHN7JGNvbmZpZ30pKSB7DQogICAgKwkJ
IyBUaGlzIGNvbmZpZyBoYXMgZGVwZW5kZW5jaWVzLiBNYWtlIHN1cmUgdGhleSBhcmUgYWxzbyBp
bmNsdWRlZA0KICAgICsJCXBhcnNlX2NvbmZpZ19kZXBlbmRzICRkZXBlbmRzeyRjb25maWd9Ow0K
ICAgICsJICAgIH0NCiAgICArDQogICAgKwkgICAgIyBJZiB0aGUgY29uZmlnIGhhcyBubyBwcm9t
cHQsIHRoZW4gd2UgbmVlZCB0byBjaGVjayBpZiBhIGNvbmZpZw0KICAgICsJICAgICMgdGhhdCBp
cyBlbmFibGVkIHNlbGVjdGVkIGl0LiBPciBpZiB3ZSBuZWVkIHRvIGVuYWJsZSBvbmUuDQogICAg
KwkgICAgaWYgKCFkZWZpbmVkKCRwcm9tcHRzeyRjb25maWd9KSAmJiBkZWZpbmVkKCRzZWxlY3Rz
eyRjb25maWd9KSkgew0KICAgICsJCSRwcm9jZXNzX3NlbGVjdHN7JGNvbmZpZ30gPSAxOw0KICAg
ICsJICAgIH0NCiAgICArCX0NCiAgICArICAgIH0NCiAgICArfQ0KICAgICsNCiAgICArc3ViIGxv
b3Bfc2VsZWN0IHsNCiAgICArDQogICAgKyAgICBmb3JlYWNoIG15ICRjb25maWcgKGtleXMgJXBy
b2Nlc3Nfc2VsZWN0cykgew0KICAgICsJJGNvbmZpZyA9fiBzL15DT05GSUdfLy87DQogICAgKw0K
ICAgICsJZHByaW50ICJQcm9jZXNzIHNlbGVjdCAkY29uZmlnXG4iOw0KICAgICsNCiAgICArCSMg
Y29uZmlnIGhhcyBubyBwcm9tcHQgYW5kIG11c3QgYmUgc2VsZWN0ZWQuDQogICAgKwlwYXJzZV9j
b25maWdfc2VsZWN0cyAkY29uZmlnLCAkc2VsZWN0c3skY29uZmlnfTsNCiAgICArICAgIH0NCiAg
ICArfQ0KICAgICsNCiAgICArd2hpbGUgKCRyZXBlYXQpIHsNCiAgICArICAgICMgR2V0IHRoZSBm
aXJzdCBzZXQgb2YgY29uZmlncyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzLg0KICAgICsgICAgbG9v
cF9kZXBlbmQ7DQogICAgKw0KICAgICsgICAgJHJlcGVhdCA9IDA7DQogICAgKw0KICAgICsgICAg
IyBOb3cgd2UgbmVlZCB0byBzZWUgaWYgd2UgaGF2ZSB0byBjaGVjayBzZWxlY3RzOw0KICAgICsg
ICAgbG9vcF9zZWxlY3Q7DQogICAgK30NCiAgICArDQogICAgK215ICVzZXRjb25maWdzOw0KICAg
ICsNCiAgICArIyBGaW5hbGx5LCByZWFkIHRoZSAuY29uZmlnIGZpbGUgYW5kIHR1cm4gb2ZmIGFu
eSBtb2R1bGUgZW5hYmxlZCB0aGF0DQogICAgKyMgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb24g
dG8ga2VlcCBlbmFibGVkLg0KICAgICtmb3JlYWNoIG15ICRsaW5lIChAY29uZmlnX2ZpbGUpIHsN
CiAgICArICAgICRfID0gJGxpbmU7DQogICAgKw0KICAgICsgICAgaWYgKC9DT05GSUdfSUtDT05G
SUcvKSB7DQogICAgKwlpZiAoLyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQvKSB7DQogICAg
KwkgICAgIyBlbmFibGUgSUtDT05GSUcgYXQgbGVhc3QgYXMgYSBtb2R1bGUNCiAgICArCSAgICBw
cmludCAiQ09ORklHX0lLQ09ORklHPW1cbiI7DQogICAgKwkgICAgIyBkb24ndCBhc2sgYWJvdXQg
UFJPQw0KICAgICsJICAgIHByaW50ICIjIENPTkZJR19JS0NPTkZJR19QUk9DIGlzIG5vdCBzZXRc
biI7DQogICAgKwl9IGVsc2Ugew0KICAgICsJICAgIHByaW50Ow0KICAgICsJfQ0KICAgICsJbmV4
dDsNCiAgICArICAgIH0NCiAgICArDQogICAgKyAgICBpZiAoL0NPTkZJR19NT0RVTEVfU0lHX0tF
WT0iKC4rKSIvKSB7DQogICAgKyAgICAgICAgbXkgJG9yaWdfY2VydCA9ICQxOw0KICAgICsgICAg
ICAgIG15ICRkZWZhdWx0X2NlcnQgPSAiY2VydHMvc2lnbmluZ19rZXkucGVtIjsNCiAgICArDQog
ICAgKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBsb2dpYyBpbiB0aGlzIHNjcmlwdCBzdGlsbCBt
YXRjaGVzIHRoZSBvbmUgaW4gS2NvbmZpZw0KICAgICsgICAgICAgIGlmICghZGVmaW5lZCgkZGVw
ZW5kc3siTU9EVUxFX1NJR19LRVkifSkgfHwNCiAgICArICAgICAgICAgICAgJGRlcGVuZHN7Ik1P
RFVMRV9TSUdfS0VZIn0gIX4gLyJcUSRkZWZhdWx0X2NlcnRcRSIvKSB7DQogICAgKyAgICAgICAg
ICAgIHByaW50IFNUREVSUiAiV0FSTklORzogTU9EVUxFX1NJR19LRVkgYXNzZXJ0aW9uIGZhaWx1
cmUsICIsDQogICAgKyAgICAgICAgICAgICAgICAidXBkYXRlIG5lZWRlZCB0byAiLCBfX0ZJTEVf
XywgIiBsaW5lICIsIF9fTElORV9fLCAiXG4iOw0KICAgICsgICAgICAgICAgICBwcmludDsNCiAg
ICArICAgICAgICB9IGVsc2lmICgkb3JpZ19jZXJ0IG5lICRkZWZhdWx0X2NlcnQgJiYgISAtZiAk
b3JpZ19jZXJ0KSB7DQogICAgKyAgICAgICAgICAgIHByaW50IFNUREVSUiAiTW9kdWxlIHNpZ25h
dHVyZSB2ZXJpZmljYXRpb24gZW5hYmxlZCBidXQgIiwNCiAgICArICAgICAgICAgICAgICAgICJt
b2R1bGUgc2lnbmluZyBrZXkgXCIkb3JpZ19jZXJ0XCIgbm90IGZvdW5kLiBSZXNldHRpbmcgIiwN
CiAgICArICAgICAgICAgICAgICAgICJzaWduaW5nIGtleSB0byBkZWZhdWx0IHZhbHVlLlxuIjsN
CiAgICArICAgICAgICAgICAgcHJpbnQgIkNPTkZJR19NT0RVTEVfU0lHX0tFWT1cIiRkZWZhdWx0
X2NlcnRcIlxuIjsNCiAgICArICAgICAgICB9IGVsc2Ugew0KICAgICsgICAgICAgICAgICBwcmlu
dDsNCiAgICArICAgICAgICB9DQogICAgKyAgICAgICAgbmV4dDsNCiAgICArICAgIH0NCiAgICAr
DQogICAgKyAgICBpZiAoL0NPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlTPSIoLispIi8pIHsNCiAg
ICArICAgICAgICBteSAkb3JpZ19rZXlzID0gJDE7DQogICAgKw0KICAgICsgICAgICAgIGlmICgh
IC1mICRvcmlnX2tleXMpIHsNCiAgICArICAgICAgICAgICAgcHJpbnQgU1RERVJSICJTeXN0ZW0g
a2V5cmluZyBlbmFibGVkIGJ1dCBrZXlzIFwiJG9yaWdfa2V5c1wiICIsDQogICAgKyAgICAgICAg
ICAgICAgICAibm90IGZvdW5kLiBSZXNldHRpbmcga2V5cyB0byBkZWZhdWx0IHZhbHVlLlxuIjsN
CiAgICArICAgICAgICAgICAgcHJpbnQgIkNPTkZJR19TWVNURU1fVFJVU1RFRF9LRVlTPVwiXCJc
biI7DQogICAgKyAgICAgICAgfSBlbHNlIHsNCiAgICArICAgICAgICAgICAgcHJpbnQ7DQogICAg
KyAgICAgICAgfQ0KICAgICsgICAgICAgIG5leHQ7DQogICAgKyAgICB9DQogICAgKw0KICAgICsg
ICAgaWYgKC9eKENPTkZJRy4qKT0obXx5KS8pIHsNCiAgICArCWlmIChkZWZpbmVkKCRjb25maWdz
eyQxfSkpIHsNCiAgICArCSAgICBpZiAoJGxvY2FseWVzY29uZmlnKSB7DQogICAgKwkgICAgICAg
ICRzZXRjb25maWdzeyQxfSA9ICd5JzsNCiAgICArCQlwcmludCAiJDE9eVxuIjsNCiAgICArCQlu
ZXh0Ow0KICAgICsJICAgIH0gZWxzZSB7DQogICAgKwkgICAgICAgICRzZXRjb25maWdzeyQxfSA9
ICQyOw0KICAgICsJICAgIH0NCiAgICArCX0gZWxzaWYgKCQyIGVxICJtIikgew0KICAgICsJICAg
IHByaW50ICIjICQxIGlzIG5vdCBzZXRcbiI7DQogICAgKwkgICAgbmV4dDsNCiAgICArCX0NCiAg
ICArICAgIH0NCiAgICArICAgIHByaW50Ow0KICAgICt9DQogICAgKw0KICAgICsjIEludGVncml0
eSBjaGVjaywgbWFrZSBzdXJlIGFsbCBtb2R1bGVzIHRoYXQgd2Ugd2FudCBlbmFibGVkIGRvDQog
ICAgKyMgaW5kZWVkIGhhdmUgdGhlaXIgY29uZmlncyBzZXQuDQogICAgK2xvb3A6DQogICAgK2Zv
cmVhY2ggbXkgJG1vZHVsZSAoa2V5cyglbW9kdWxlcykpIHsNCiAgICArICAgIGlmIChkZWZpbmVk
KCRvYmplY3RzeyRtb2R1bGV9KSkgew0KICAgICsJbXkgQGFyciA9IEB7JG9iamVjdHN7JG1vZHVs
ZX19Ow0KICAgICsJZm9yZWFjaCBteSAkY29uZiAoQGFycikgew0KICAgICsJICAgIGlmIChkZWZp
bmVkKCRzZXRjb25maWdzeyRjb25mfSkpIHsNCiAgICArCQluZXh0IGxvb3A7DQogICAgKwkgICAg
fQ0KICAgICsJfQ0KICAgICsJcHJpbnQgU1RERVJSICJtb2R1bGUgJG1vZHVsZSBkaWQgbm90IGhh
dmUgY29uZmlncyI7DQogICAgKwlmb3JlYWNoIG15ICRjb25mIChAYXJyKSB7DQogICAgKwkgICAg
cHJpbnQgU1RERVJSICIgIiAsICRjb25mOw0KICAgICsJfQ0KICAgICsJcHJpbnQgU1RERVJSICJc
biI7DQogICAgKyAgICB9DQogICAgK30NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
L3N5bWJvbC5jIGIvc3VwcG9ydC9rY29uZmlnL3N5bWJvbC5jDQogICAgbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4xZjkyNjZkDQogICAgLS0tIC9kZXYvbnVsbA0KICAg
ICsrKyBiL3N1cHBvcnQva2NvbmZpZy9zeW1ib2wuYw0KICAgIEBAIC0wLDAgKzEsMTMzMSBAQA0K
ICAgICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsvKg0KICAgICsg
KiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+
DQogICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPGN0eXBlLmg+DQogICAgKyNpbmNsdWRl
IDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSA8cmVn
ZXguaD4NCiAgICArI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+DQogICAgKw0KICAgICsjaW5jbHVk
ZSAibGtjLmgiDQogICAgKw0KICAgICtzdHJ1Y3Qgc3ltYm9sIHN5bWJvbF95ZXMgPSB7DQogICAg
KwkubmFtZSA9ICJ5IiwNCiAgICArCS5jdXJyID0geyAieSIsIHllcyB9LA0KICAgICsJLmZsYWdz
ID0gU1lNQk9MX0NPTlNUfFNZTUJPTF9WQUxJRCwNCiAgICArfSwgc3ltYm9sX21vZCA9IHsNCiAg
ICArCS5uYW1lID0gIm0iLA0KICAgICsJLmN1cnIgPSB7ICJtIiwgbW9kIH0sDQogICAgKwkuZmxh
Z3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELA0KICAgICt9LCBzeW1ib2xfbm8gPSB7DQog
ICAgKwkubmFtZSA9ICJuIiwNCiAgICArCS5jdXJyID0geyAibiIsIG5vIH0sDQogICAgKwkuZmxh
Z3MgPSBTWU1CT0xfQ09OU1R8U1lNQk9MX1ZBTElELA0KICAgICt9LCBzeW1ib2xfZW1wdHkgPSB7
DQogICAgKwkubmFtZSA9ICIiLA0KICAgICsJLmN1cnIgPSB7ICIiLCBubyB9LA0KICAgICsJLmZs
YWdzID0gU1lNQk9MX1ZBTElELA0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IHN5bWJvbCAq
c3ltX2RlZmNvbmZpZ19saXN0Ow0KICAgICtzdHJ1Y3Qgc3ltYm9sICptb2R1bGVzX3N5bTsNCiAg
ICArdHJpc3RhdGUgbW9kdWxlc192YWw7DQogICAgKw0KICAgICtlbnVtIHN5bWJvbF90eXBlIHN5
bV9nZXRfdHlwZShzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCWVudW0gc3ltYm9s
X3R5cGUgdHlwZSA9IHN5bS0+dHlwZTsNCiAgICArDQogICAgKwlpZiAodHlwZSA9PSBTX1RSSVNU
QVRFKSB7DQogICAgKwkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiBzeW0tPnZpc2li
bGUgPT0geWVzKQ0KICAgICsJCQl0eXBlID0gU19CT09MRUFOOw0KICAgICsJCWVsc2UgaWYgKG1v
ZHVsZXNfdmFsID09IG5vKQ0KICAgICsJCQl0eXBlID0gU19CT09MRUFOOw0KICAgICsJfQ0KICAg
ICsJcmV0dXJuIHR5cGU7DQogICAgK30NCiAgICArDQogICAgK2NvbnN0IGNoYXIgKnN5bV90eXBl
X25hbWUoZW51bSBzeW1ib2xfdHlwZSB0eXBlKQ0KICAgICt7DQogICAgKwlzd2l0Y2ggKHR5cGUp
IHsNCiAgICArCWNhc2UgU19CT09MRUFOOg0KICAgICsJCXJldHVybiAiYm9vbCI7DQogICAgKwlj
YXNlIFNfVFJJU1RBVEU6DQogICAgKwkJcmV0dXJuICJ0cmlzdGF0ZSI7DQogICAgKwljYXNlIFNf
SU5UOg0KICAgICsJCXJldHVybiAiaW50ZWdlciI7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJ
CXJldHVybiAiaGV4IjsNCiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJcmV0dXJuICJzdHJp
bmciOw0KICAgICsJY2FzZSBTX1VOS05PV046DQogICAgKwkJcmV0dXJuICJ1bmtub3duIjsNCiAg
ICArCX0NCiAgICArCXJldHVybiAiPz8/IjsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHBy
b3BlcnR5ICpzeW1fZ2V0X2Nob2ljZV9wcm9wKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0K
ICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsNCiAgICArCWZvcl9hbGxfY2hvaWNl
cyhzeW0sIHByb3ApDQogICAgKwkJcmV0dXJuIHByb3A7DQogICAgKwlyZXR1cm4gTlVMTDsNCiAg
ICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBwcm9wZXJ0eSAqc3ltX2dldF9kZWZhdWx0
X3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkg
KnByb3A7DQogICAgKw0KICAgICsJZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHByb3ApIHsNCiAgICAr
CQlwcm9wLT52aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIp
Ow0KICAgICsJCWlmIChwcm9wLT52aXNpYmxlLnRyaSAhPSBubykNCiAgICArCQkJcmV0dXJuIHBy
b3A7DQogICAgKwl9DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICArc3Ry
dWN0IHByb3BlcnR5ICpzeW1fZ2V0X3JhbmdlX3Byb3Aoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAg
ICt7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKw0KICAgICsJZm9yX2FsbF9w
cm9wZXJ0aWVzKHN5bSwgcHJvcCwgUF9SQU5HRSkgew0KICAgICsJCXByb3AtPnZpc2libGUudHJp
ID0gZXhwcl9jYWxjX3ZhbHVlKHByb3AtPnZpc2libGUuZXhwcik7DQogICAgKwkJaWYgKHByb3At
PnZpc2libGUudHJpICE9IG5vKQ0KICAgICsJCQlyZXR1cm4gcHJvcDsNCiAgICArCX0NCiAgICAr
CXJldHVybiBOVUxMOw0KICAgICt9DQogICAgKw0KICAgICtzdGF0aWMgbG9uZyBsb25nIHN5bV9n
ZXRfcmFuZ2VfdmFsKHN0cnVjdCBzeW1ib2wgKnN5bSwgaW50IGJhc2UpDQogICAgK3sNCiAgICAr
CXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJ
Y2FzZSBTX0lOVDoNCiAgICArCQliYXNlID0gMTA7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNl
IFNfSEVYOg0KICAgICsJCWJhc2UgPSAxNjsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6
DQogICAgKwkJYnJlYWs7DQogICAgKwl9DQogICAgKwlyZXR1cm4gc3RydG9sbChzeW0tPmN1cnIu
dmFsLCBOVUxMLCBiYXNlKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgc3ltX3Zh
bGlkYXRlX3JhbmdlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0IHBy
b3BlcnR5ICpwcm9wOw0KICAgICsJaW50IGJhc2U7DQogICAgKwlsb25nIGxvbmcgdmFsLCB2YWwy
Ow0KICAgICsJY2hhciBzdHJbNjRdOw0KICAgICsNCiAgICArCXN3aXRjaCAoc3ltLT50eXBlKSB7
DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJCWJhc2UgPSAxMDsNCiAgICArCQlicmVhazsNCiAg
ICArCWNhc2UgU19IRVg6DQogICAgKwkJYmFzZSA9IDE2Ow0KICAgICsJCWJyZWFrOw0KICAgICsJ
ZGVmYXVsdDoNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKwlwcm9wID0gc3ltX2dldF9y
YW5nZV9wcm9wKHN5bSk7DQogICAgKwlpZiAoIXByb3ApDQogICAgKwkJcmV0dXJuOw0KICAgICsJ
dmFsID0gc3RydG9sbChzeW0tPmN1cnIudmFsLCBOVUxMLCBiYXNlKTsNCiAgICArCXZhbDIgPSBz
eW1fZ2V0X3JhbmdlX3ZhbChwcm9wLT5leHByLT5sZWZ0LnN5bSwgYmFzZSk7DQogICAgKwlpZiAo
dmFsID49IHZhbDIpIHsNCiAgICArCQl2YWwyID0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhw
ci0+cmlnaHQuc3ltLCBiYXNlKTsNCiAgICArCQlpZiAodmFsIDw9IHZhbDIpDQogICAgKwkJCXJl
dHVybjsNCiAgICArCX0NCiAgICArCWlmIChzeW0tPnR5cGUgPT0gU19JTlQpDQogICAgKwkJc3By
aW50ZihzdHIsICIlbGxkIiwgdmFsMik7DQogICAgKwllbHNlDQogICAgKwkJc3ByaW50ZihzdHIs
ICIweCVsbHgiLCB2YWwyKTsNCiAgICArCXN5bS0+Y3Vyci52YWwgPSB4c3RyZHVwKHN0cik7DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHN5bV9zZXRfY2hhbmdlZChzdHJ1Y3Qgc3lt
Ym9sICpzeW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArDQog
ICAgKwlzeW0tPmZsYWdzIHw9IFNZTUJPTF9DSEFOR0VEOw0KICAgICsJZm9yIChwcm9wID0gc3lt
LT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgICsJCWlmIChwcm9wLT5tZW51
KQ0KICAgICsJCQlwcm9wLT5tZW51LT5mbGFncyB8PSBNRU5VX0NIQU5HRUQ7DQogICAgKwl9DQog
ICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHN5bV9zZXRfYWxsX2NoYW5nZWQodm9pZCkN
CiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0KICAgICsJaW50IGk7DQogICAgKw0K
ICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkNCiAgICArCQlzeW1fc2V0X2NoYW5nZWQoc3lt
KTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgc3ltX2NhbGNfdmlzaWJpbGl0eShz
dHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsN
CiAgICArCXN0cnVjdCBzeW1ib2wgKmNob2ljZV9zeW0gPSBOVUxMOw0KICAgICsJdHJpc3RhdGUg
dHJpOw0KICAgICsNCiAgICArCS8qIGFueSBwcm9tcHQgdmlzaWJsZT8gKi8NCiAgICArCXRyaSA9
IG5vOw0KICAgICsNCiAgICArCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpDQogICAgKwkJ
Y2hvaWNlX3N5bSA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKHN5bSkpOw0K
ICAgICsNCiAgICArCWZvcl9hbGxfcHJvbXB0cyhzeW0sIHByb3ApIHsNCiAgICArCQlwcm9wLT52
aXNpYmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgICsJ
CS8qDQogICAgKwkJICogVHJpc3RhdGUgY2hvaWNlX3ZhbHVlcyB3aXRoIHZpc2liaWxpdHkgJ21v
ZCcgYXJlDQogICAgKwkJICogbm90IHZpc2libGUgaWYgdGhlIGNvcnJlc3BvbmRpbmcgY2hvaWNl
J3MgdmFsdWUgaXMNCiAgICArCQkgKiAneWVzJy4NCiAgICArCQkgKi8NCiAgICArCQlpZiAoY2hv
aWNlX3N5bSAmJiBzeW0tPnR5cGUgPT0gU19UUklTVEFURSAmJg0KICAgICsJCSAgICBwcm9wLT52
aXNpYmxlLnRyaSA9PSBtb2QgJiYgY2hvaWNlX3N5bS0+Y3Vyci50cmkgPT0geWVzKQ0KICAgICsJ
CQlwcm9wLT52aXNpYmxlLnRyaSA9IG5vOw0KICAgICsNCiAgICArCQl0cmkgPSBFWFBSX09SKHRy
aSwgcHJvcC0+dmlzaWJsZS50cmkpOw0KICAgICsJfQ0KICAgICsJaWYgKHRyaSA9PSBtb2QgJiYg
KHN5bS0+dHlwZSAhPSBTX1RSSVNUQVRFIHx8IG1vZHVsZXNfdmFsID09IG5vKSkNCiAgICArCQl0
cmkgPSB5ZXM7DQogICAgKwlpZiAoc3ltLT52aXNpYmxlICE9IHRyaSkgew0KICAgICsJCXN5bS0+
dmlzaWJsZSA9IHRyaTsNCiAgICArCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICArCX0NCiAg
ICArCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpDQogICAgKwkJcmV0dXJuOw0KICAgICsJ
LyogZGVmYXVsdGluZyB0byAieWVzIiBpZiBubyBleHBsaWNpdCAiZGVwZW5kcyBvbiIgYXJlIGdp
dmVuICovDQogICAgKwl0cmkgPSB5ZXM7DQogICAgKwlpZiAoc3ltLT5kaXJfZGVwLmV4cHIpDQog
ICAgKwkJdHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+ZGlyX2RlcC5leHByKTsNCiAgICArCWlm
ICh0cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikNCiAgICArCQl0
cmkgPSB5ZXM7DQogICAgKwlpZiAoc3ltLT5kaXJfZGVwLnRyaSAhPSB0cmkpIHsNCiAgICArCQlz
eW0tPmRpcl9kZXAudHJpID0gdHJpOw0KICAgICsJCXN5bV9zZXRfY2hhbmdlZChzeW0pOw0KICAg
ICsJfQ0KICAgICsJdHJpID0gbm87DQogICAgKwlpZiAoc3ltLT5yZXZfZGVwLmV4cHIpDQogICAg
KwkJdHJpID0gZXhwcl9jYWxjX3ZhbHVlKHN5bS0+cmV2X2RlcC5leHByKTsNCiAgICArCWlmICh0
cmkgPT0gbW9kICYmIHN5bV9nZXRfdHlwZShzeW0pID09IFNfQk9PTEVBTikNCiAgICArCQl0cmkg
PSB5ZXM7DQogICAgKwlpZiAoc3ltLT5yZXZfZGVwLnRyaSAhPSB0cmkpIHsNCiAgICArCQlzeW0t
PnJldl9kZXAudHJpID0gdHJpOw0KICAgICsJCXN5bV9zZXRfY2hhbmdlZChzeW0pOw0KICAgICsJ
fQ0KICAgICsJdHJpID0gbm87DQogICAgKwlpZiAoc3ltLT5pbXBsaWVkLmV4cHIgJiYgc3ltLT5k
aXJfZGVwLnRyaSAhPSBubykNCiAgICArCQl0cmkgPSBleHByX2NhbGNfdmFsdWUoc3ltLT5pbXBs
aWVkLmV4cHIpOw0KICAgICsJaWYgKHRyaSA9PSBtb2QgJiYgc3ltX2dldF90eXBlKHN5bSkgPT0g
U19CT09MRUFOKQ0KICAgICsJCXRyaSA9IHllczsNCiAgICArCWlmIChzeW0tPmltcGxpZWQudHJp
ICE9IHRyaSkgew0KICAgICsJCXN5bS0+aW1wbGllZC50cmkgPSB0cmk7DQogICAgKwkJc3ltX3Nl
dF9jaGFuZ2VkKHN5bSk7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAq
IEZpbmQgdGhlIGRlZmF1bHQgc3ltYm9sIGZvciBhIGNob2ljZS4NCiAgICArICogRmlyc3QgdHJ5
IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIGNob2ljZSBzeW1ib2wNCiAgICArICogTmV4dCBs
b2NhdGUgdGhlIGZpcnN0IHZpc2libGUgY2hvaWNlIHZhbHVlDQogICAgKyAqIFJldHVybiBOVUxM
IGlmIG5vbmUgd2FzIGZvdW5kDQogICAgKyAqLw0KICAgICtzdHJ1Y3Qgc3ltYm9sICpzeW1fY2hv
aWNlX2RlZmF1bHQoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3lt
Ym9sICpkZWZfc3ltOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0
IGV4cHIgKmU7DQogICAgKw0KICAgICsJLyogYW55IG9mIHRoZSBkZWZhdWx0cyB2aXNpYmxlPyAq
Lw0KICAgICsJZm9yX2FsbF9kZWZhdWx0cyhzeW0sIHByb3ApIHsNCiAgICArCQlwcm9wLT52aXNp
YmxlLnRyaSA9IGV4cHJfY2FsY192YWx1ZShwcm9wLT52aXNpYmxlLmV4cHIpOw0KICAgICsJCWlm
IChwcm9wLT52aXNpYmxlLnRyaSA9PSBubykNCiAgICArCQkJY29udGludWU7DQogICAgKwkJZGVm
X3N5bSA9IHByb3BfZ2V0X3N5bWJvbChwcm9wKTsNCiAgICArCQlpZiAoZGVmX3N5bS0+dmlzaWJs
ZSAhPSBubykNCiAgICArCQkJcmV0dXJuIGRlZl9zeW07DQogICAgKwl9DQogICAgKw0KICAgICsJ
LyoganVzdCBnZXQgdGhlIGZpcnN0IHZpc2libGUgdmFsdWUgKi8NCiAgICArCXByb3AgPSBzeW1f
Z2V0X2Nob2ljZV9wcm9wKHN5bSk7DQogICAgKwlleHByX2xpc3RfZm9yX2VhY2hfc3ltKHByb3At
PmV4cHIsIGUsIGRlZl9zeW0pDQogICAgKwkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8pDQog
ICAgKwkJCXJldHVybiBkZWZfc3ltOw0KICAgICsNCiAgICArCS8qIGZhaWxlZCB0byBsb2NhdGUg
YW55IGRlZmF1bHRzICovDQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAgICAr
c3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jYWxjX2Nob2ljZShzdHJ1Y3Qgc3ltYm9sICpzeW0p
DQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKmRlZl9zeW07DQogICAgKwlzdHJ1Y3QgcHJv
cGVydHkgKnByb3A7DQogICAgKwlzdHJ1Y3QgZXhwciAqZTsNCiAgICArCWludCBmbGFnczsNCiAg
ICArDQogICAgKwkvKiBmaXJzdCBjYWxjdWxhdGUgYWxsIGNob2ljZSB2YWx1ZXMnIHZpc2liaWxp
dGllcyAqLw0KICAgICsJZmxhZ3MgPSBzeW0tPmZsYWdzOw0KICAgICsJcHJvcCA9IHN5bV9nZXRf
Y2hvaWNlX3Byb3Aoc3ltKTsNCiAgICArCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+ZXhw
ciwgZSwgZGVmX3N5bSkgew0KICAgICsJCXN5bV9jYWxjX3Zpc2liaWxpdHkoZGVmX3N5bSk7DQog
ICAgKwkJaWYgKGRlZl9zeW0tPnZpc2libGUgIT0gbm8pDQogICAgKwkJCWZsYWdzICY9IGRlZl9z
eW0tPmZsYWdzOw0KICAgICsJfQ0KICAgICsNCiAgICArCXN5bS0+ZmxhZ3MgJj0gZmxhZ3MgfCB+
U1lNQk9MX0RFRl9VU0VSOw0KICAgICsNCiAgICArCS8qIGlzIHRoZSB1c2VyIGNob2ljZSB2aXNp
YmxlPyAqLw0KICAgICsJZGVmX3N5bSA9IHN5bS0+ZGVmW1NfREVGX1VTRVJdLnZhbDsNCiAgICAr
CWlmIChkZWZfc3ltICYmIGRlZl9zeW0tPnZpc2libGUgIT0gbm8pDQogICAgKwkJcmV0dXJuIGRl
Zl9zeW07DQogICAgKw0KICAgICsJZGVmX3N5bSA9IHN5bV9jaG9pY2VfZGVmYXVsdChzeW0pOw0K
ICAgICsNCiAgICArCWlmIChkZWZfc3ltID09IE5VTEwpDQogICAgKwkJLyogbm8gY2hvaWNlPyBy
ZXNldCB0cmlzdGF0ZSB2YWx1ZSAqLw0KICAgICsJCXN5bS0+Y3Vyci50cmkgPSBubzsNCiAgICAr
DQogICAgKwlyZXR1cm4gZGVmX3N5bTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQg
c3ltX3dhcm5fdW5tZXRfZGVwKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3Ry
dWN0IGdzdHIgZ3MgPSBzdHJfbmV3KCk7DQogICAgKw0KICAgICsJc3RyX3ByaW50ZigmZ3MsDQog
ICAgKwkJICAgIlxuV0FSTklORzogdW5tZXQgZGlyZWN0IGRlcGVuZGVuY2llcyBkZXRlY3RlZCBm
b3IgJXNcbiIsDQogICAgKwkJICAgc3ltLT5uYW1lKTsNCiAgICArCXN0cl9wcmludGYoJmdzLA0K
ICAgICsJCSAgICIgIERlcGVuZHMgb24gWyVjXTogIiwNCiAgICArCQkgICBzeW0tPmRpcl9kZXAu
dHJpID09IG1vZCA/ICdtJyA6ICduJyk7DQogICAgKwlleHByX2dzdHJfcHJpbnQoc3ltLT5kaXJf
ZGVwLmV4cHIsICZncyk7DQogICAgKwlzdHJfcHJpbnRmKCZncywgIlxuIik7DQogICAgKw0KICAg
ICsJZXhwcl9nc3RyX3ByaW50X3JldmRlcChzeW0tPnJldl9kZXAuZXhwciwgJmdzLCB5ZXMsDQog
ICAgKwkJCSAgICAgICAiICBTZWxlY3RlZCBieSBbeV06XG4iKTsNCiAgICArCWV4cHJfZ3N0cl9w
cmludF9yZXZkZXAoc3ltLT5yZXZfZGVwLmV4cHIsICZncywgbW9kLA0KICAgICsJCQkgICAgICAg
IiAgU2VsZWN0ZWQgYnkgW21dOlxuIik7DQogICAgKw0KICAgICsJZnB1dHMoc3RyX2dldCgmZ3Mp
LCBzdGRlcnIpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIHN5bV9jYWxjX3ZhbHVlKHN0cnVj
dCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbF92YWx1ZSBuZXd2YWws
IG9sZHZhbDsNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBleHBy
ICplOw0KICAgICsNCiAgICArCWlmICghc3ltKQ0KICAgICsJCXJldHVybjsNCiAgICArDQogICAg
KwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9WQUxJRCkNCiAgICArCQlyZXR1cm47DQogICAgKw0K
ICAgICsJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJg0KICAgICsJICAgIHN5bS0+Zmxh
Z3MgJiBTWU1CT0xfTkVFRF9TRVRfQ0hPSUNFX1ZBTFVFUykgew0KICAgICsJCXN5bS0+ZmxhZ3Mg
Jj0gflNZTUJPTF9ORUVEX1NFVF9DSE9JQ0VfVkFMVUVTOw0KICAgICsJCXByb3AgPSBzeW1fZ2V0
X2Nob2ljZV9wcm9wKHN5bSk7DQogICAgKwkJc3ltX2NhbGNfdmFsdWUocHJvcF9nZXRfc3ltYm9s
KHByb3ApKTsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW0tPmZsYWdzIHw9IFNZTUJPTF9WQUxJ
RDsNCiAgICArDQogICAgKwlvbGR2YWwgPSBzeW0tPmN1cnI7DQogICAgKw0KICAgICsJc3dpdGNo
IChzeW0tPnR5cGUpIHsNCiAgICArCWNhc2UgU19JTlQ6DQogICAgKwljYXNlIFNfSEVYOg0KICAg
ICsJY2FzZSBTX1NUUklORzoNCiAgICArCQluZXd2YWwgPSBzeW1ib2xfZW1wdHkuY3VycjsNCiAg
ICArCQlicmVhazsNCiAgICArCWNhc2UgU19CT09MRUFOOg0KICAgICsJY2FzZSBTX1RSSVNUQVRF
Og0KICAgICsJCW5ld3ZhbCA9IHN5bWJvbF9uby5jdXJyOw0KICAgICsJCWJyZWFrOw0KICAgICsJ
ZGVmYXVsdDoNCiAgICArCQlzeW0tPmN1cnIudmFsID0gc3ltLT5uYW1lOw0KICAgICsJCXN5bS0+
Y3Vyci50cmkgPSBubzsNCiAgICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKwlzeW0tPmZsYWdz
ICY9IH5TWU1CT0xfV1JJVEU7DQogICAgKw0KICAgICsJc3ltX2NhbGNfdmlzaWJpbGl0eShzeW0p
Ow0KICAgICsNCiAgICArCWlmIChzeW0tPnZpc2libGUgIT0gbm8pDQogICAgKwkJc3ltLT5mbGFn
cyB8PSBTWU1CT0xfV1JJVEU7DQogICAgKw0KICAgICsJLyogc2V0IGRlZmF1bHQgaWYgcmVjdXJz
aXZlbHkgY2FsbGVkICovDQogICAgKwlzeW0tPmN1cnIgPSBuZXd2YWw7DQogICAgKw0KICAgICsJ
c3dpdGNoIChzeW1fZ2V0X3R5cGUoc3ltKSkgew0KICAgICsJY2FzZSBTX0JPT0xFQU46DQogICAg
KwljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAm
JiBzeW0tPnZpc2libGUgPT0geWVzKSB7DQogICAgKwkJCXByb3AgPSBzeW1fZ2V0X2Nob2ljZV9w
cm9wKHN5bSk7DQogICAgKwkJCW5ld3ZhbC50cmkgPSAocHJvcF9nZXRfc3ltYm9sKHByb3ApLT5j
dXJyLnZhbCA9PSBzeW0pID8geWVzIDogbm87DQogICAgKwkJfSBlbHNlIHsNCiAgICArCQkJaWYg
KHN5bS0+dmlzaWJsZSAhPSBubykgew0KICAgICsJCQkJLyogaWYgdGhlIHN5bWJvbCBpcyB2aXNp
YmxlIHVzZSB0aGUgdXNlciB2YWx1ZQ0KICAgICsJCQkJICogaWYgYXZhaWxhYmxlLCBvdGhlcndp
c2UgdHJ5IHRoZSBkZWZhdWx0IHZhbHVlDQogICAgKwkJCQkgKi8NCiAgICArCQkJCWlmIChzeW1f
aGFzX3ZhbHVlKHN5bSkpIHsNCiAgICArCQkJCQluZXd2YWwudHJpID0gRVhQUl9BTkQoc3ltLT5k
ZWZbU19ERUZfVVNFUl0udHJpLA0KICAgICsJCQkJCQkJICAgICAgc3ltLT52aXNpYmxlKTsNCiAg
ICArCQkJCQlnb3RvIGNhbGNfbmV3dmFsOw0KICAgICsJCQkJfQ0KICAgICsJCQl9DQogICAgKwkJ
CWlmIChzeW0tPnJldl9kZXAudHJpICE9IG5vKQ0KICAgICsJCQkJc3ltLT5mbGFncyB8PSBTWU1C
T0xfV1JJVEU7DQogICAgKwkJCWlmICghc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJCQlw
cm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsNCiAgICArCQkJCWlmIChwcm9wKSB7DQog
ICAgKwkJCQkJbmV3dmFsLnRyaSA9IEVYUFJfQU5EKGV4cHJfY2FsY192YWx1ZShwcm9wLT5leHBy
KSwNCiAgICArCQkJCQkJCSAgICAgIHByb3AtPnZpc2libGUudHJpKTsNCiAgICArCQkJCQlpZiAo
bmV3dmFsLnRyaSAhPSBubykNCiAgICArCQkJCQkJc3ltLT5mbGFncyB8PSBTWU1CT0xfV1JJVEU7
DQogICAgKwkJCQl9DQogICAgKwkJCQlpZiAoc3ltLT5pbXBsaWVkLnRyaSAhPSBubykgew0KICAg
ICsJCQkJCXN5bS0+ZmxhZ3MgfD0gU1lNQk9MX1dSSVRFOw0KICAgICsJCQkJCW5ld3ZhbC50cmkg
PSBFWFBSX09SKG5ld3ZhbC50cmksIHN5bS0+aW1wbGllZC50cmkpOw0KICAgICsJCQkJfQ0KICAg
ICsJCQl9DQogICAgKwkJY2FsY19uZXd2YWw6DQogICAgKwkJCWlmIChzeW0tPmRpcl9kZXAudHJp
IDwgc3ltLT5yZXZfZGVwLnRyaSkNCiAgICArCQkJCXN5bV93YXJuX3VubWV0X2RlcChzeW0pOw0K
ICAgICsJCQluZXd2YWwudHJpID0gRVhQUl9PUihuZXd2YWwudHJpLCBzeW0tPnJldl9kZXAudHJp
KTsNCiAgICArCQl9DQogICAgKwkJaWYgKG5ld3ZhbC50cmkgPT0gbW9kICYmDQogICAgKwkJICAg
IChzeW1fZ2V0X3R5cGUoc3ltKSA9PSBTX0JPT0xFQU4gfHwgc3ltLT5pbXBsaWVkLnRyaSA9PSB5
ZXMpKQ0KICAgICsJCQluZXd2YWwudHJpID0geWVzOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2Fz
ZSBTX1NUUklORzoNCiAgICArCWNhc2UgU19IRVg6DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJ
CWlmIChzeW0tPnZpc2libGUgIT0gbm8gJiYgc3ltX2hhc192YWx1ZShzeW0pKSB7DQogICAgKwkJ
CW5ld3ZhbC52YWwgPSBzeW0tPmRlZltTX0RFRl9VU0VSXS52YWw7DQogICAgKwkJCWJyZWFrOw0K
ICAgICsJCX0NCiAgICArCQlwcm9wID0gc3ltX2dldF9kZWZhdWx0X3Byb3Aoc3ltKTsNCiAgICAr
CQlpZiAocHJvcCkgew0KICAgICsJCQlzdHJ1Y3Qgc3ltYm9sICpkcyA9IHByb3BfZ2V0X3N5bWJv
bChwcm9wKTsNCiAgICArCQkJaWYgKGRzKSB7DQogICAgKwkJCQlzeW0tPmZsYWdzIHw9IFNZTUJP
TF9XUklURTsNCiAgICArCQkJCXN5bV9jYWxjX3ZhbHVlKGRzKTsNCiAgICArCQkJCW5ld3ZhbC52
YWwgPSBkcy0+Y3Vyci52YWw7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwkJYnJlYWs7DQog
ICAgKwlkZWZhdWx0Og0KICAgICsJCTsNCiAgICArCX0NCiAgICArDQogICAgKwlzeW0tPmN1cnIg
PSBuZXd2YWw7DQogICAgKwlpZiAoc3ltX2lzX2Nob2ljZShzeW0pICYmIG5ld3ZhbC50cmkgPT0g
eWVzKQ0KICAgICsJCXN5bS0+Y3Vyci52YWwgPSBzeW1fY2FsY19jaG9pY2Uoc3ltKTsNCiAgICAr
CXN5bV92YWxpZGF0ZV9yYW5nZShzeW0pOw0KICAgICsNCiAgICArCWlmIChtZW1jbXAoJm9sZHZh
bCwgJnN5bS0+Y3Vyciwgc2l6ZW9mKG9sZHZhbCkpKSB7DQogICAgKwkJc3ltX3NldF9jaGFuZ2Vk
KHN5bSk7DQogICAgKwkJaWYgKG1vZHVsZXNfc3ltID09IHN5bSkgew0KICAgICsJCQlzeW1fc2V0
X2FsbF9jaGFuZ2VkKCk7DQogICAgKwkJCW1vZHVsZXNfdmFsID0gbW9kdWxlc19zeW0tPmN1cnIu
dHJpOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoc3ltX2lzX2Nob2ljZShz
eW0pKSB7DQogICAgKwkJc3RydWN0IHN5bWJvbCAqY2hvaWNlX3N5bTsNCiAgICArDQogICAgKwkJ
cHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltKTsNCiAgICArCQlleHByX2xpc3RfZm9yX2Vh
Y2hfc3ltKHByb3AtPmV4cHIsIGUsIGNob2ljZV9zeW0pIHsNCiAgICArCQkJaWYgKChzeW0tPmZs
YWdzICYgU1lNQk9MX1dSSVRFKSAmJg0KICAgICsJCQkgICAgY2hvaWNlX3N5bS0+dmlzaWJsZSAh
PSBubykNCiAgICArCQkJCWNob2ljZV9zeW0tPmZsYWdzIHw9IFNZTUJPTF9XUklURTsNCiAgICAr
CQkJaWYgKHN5bS0+ZmxhZ3MgJiBTWU1CT0xfQ0hBTkdFRCkNCiAgICArCQkJCXN5bV9zZXRfY2hh
bmdlZChjaG9pY2Vfc3ltKTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJaWYgKHN5
bS0+ZmxhZ3MgJiBTWU1CT0xfTk9fV1JJVEUpDQogICAgKwkJc3ltLT5mbGFncyAmPSB+U1lNQk9M
X1dSSVRFOw0KICAgICsNCiAgICArCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX05FRURfU0VUX0NI
T0lDRV9WQUxVRVMpDQogICAgKwkJc2V0X2FsbF9jaG9pY2VfdmFsdWVzKHN5bSk7DQogICAgK30N
CiAgICArDQogICAgK3ZvaWQgc3ltX2NsZWFyX2FsbF92YWxpZCh2b2lkKQ0KICAgICt7DQogICAg
KwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAgKwlpbnQgaTsNCiAgICArDQogICAgKwlmb3JfYWxs
X3N5bWJvbHMoaSwgc3ltKQ0KICAgICsJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9WQUxJRDsNCiAg
ICArCXN5bV9hZGRfY2hhbmdlX2NvdW50KDEpOw0KICAgICsJc3ltX2NhbGNfdmFsdWUobW9kdWxl
c19zeW0pOw0KICAgICt9DQogICAgKw0KICAgICtib29sIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFu
Z2Uoc3RydWN0IHN5bWJvbCAqc3ltLCB0cmlzdGF0ZSB2YWwpDQogICAgK3sNCiAgICArCWludCB0
eXBlID0gc3ltX2dldF90eXBlKHN5bSk7DQogICAgKw0KICAgICsJaWYgKHN5bS0+dmlzaWJsZSA9
PSBubykNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKw0KICAgICsJaWYgKHR5cGUgIT0gU19C
T09MRUFOICYmIHR5cGUgIT0gU19UUklTVEFURSkNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAg
Kw0KICAgICsJaWYgKHR5cGUgPT0gU19CT09MRUFOICYmIHZhbCA9PSBtb2QpDQogICAgKwkJcmV0
dXJuIGZhbHNlOw0KICAgICsJaWYgKHN5bS0+dmlzaWJsZSA8PSBzeW0tPnJldl9kZXAudHJpKQ0K
ICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArCWlmIChzeW0tPmltcGxpZWQudHJpID09IHllcyAm
JiB2YWwgPT0gbW9kKQ0KICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArCWlmIChzeW1faXNfY2hv
aWNlX3ZhbHVlKHN5bSkgJiYgc3ltLT52aXNpYmxlID09IHllcykNCiAgICArCQlyZXR1cm4gdmFs
ID09IHllczsNCiAgICArCXJldHVybiB2YWwgPj0gc3ltLT5yZXZfZGVwLnRyaSAmJiB2YWwgPD0g
c3ltLT52aXNpYmxlOw0KICAgICt9DQogICAgKw0KICAgICtib29sIHN5bV9zZXRfdHJpc3RhdGVf
dmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltLCB0cmlzdGF0ZSB2YWwpDQogICAgK3sNCiAgICArCXRy
aXN0YXRlIG9sZHZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICArDQogICAg
KwlpZiAob2xkdmFsICE9IHZhbCAmJiAhc3ltX3RyaXN0YXRlX3dpdGhpbl9yYW5nZShzeW0sIHZh
bCkpDQogICAgKwkJcmV0dXJuIGZhbHNlOw0KICAgICsNCiAgICArCWlmICghKHN5bS0+ZmxhZ3Mg
JiBTWU1CT0xfREVGX1VTRVIpKSB7DQogICAgKwkJc3ltLT5mbGFncyB8PSBTWU1CT0xfREVGX1VT
RVI7DQogICAgKwkJc3ltX3NldF9jaGFuZ2VkKHN5bSk7DQogICAgKwl9DQogICAgKwkvKg0KICAg
ICsJICogc2V0dGluZyBhIGNob2ljZSB2YWx1ZSBhbHNvIHJlc2V0cyB0aGUgbmV3IGZsYWcgb2Yg
dGhlIGNob2ljZQ0KICAgICsJICogc3ltYm9sIGFuZCBhbGwgb3RoZXIgY2hvaWNlIHZhbHVlcy4N
CiAgICArCSAqLw0KICAgICsJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSAmJiB2YWwgPT0g
eWVzKSB7DQogICAgKwkJc3RydWN0IHN5bWJvbCAqY3MgPSBwcm9wX2dldF9zeW1ib2woc3ltX2dl
dF9jaG9pY2VfcHJvcChzeW0pKTsNCiAgICArCQlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAg
KwkJc3RydWN0IGV4cHIgKmU7DQogICAgKw0KICAgICsJCWNzLT5kZWZbU19ERUZfVVNFUl0udmFs
ID0gc3ltOw0KICAgICsJCWNzLT5mbGFncyB8PSBTWU1CT0xfREVGX1VTRVI7DQogICAgKwkJcHJv
cCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY3MpOw0KICAgICsJCWZvciAoZSA9IHByb3AtPmV4cHI7
IGU7IGUgPSBlLT5sZWZ0LmV4cHIpIHsNCiAgICArCQkJaWYgKGUtPnJpZ2h0LnN5bS0+dmlzaWJs
ZSAhPSBubykNCiAgICArCQkJCWUtPnJpZ2h0LnN5bS0+ZmxhZ3MgfD0gU1lNQk9MX0RFRl9VU0VS
Ow0KICAgICsJCX0NCiAgICArCX0NCiAgICArDQogICAgKwlzeW0tPmRlZltTX0RFRl9VU0VSXS50
cmkgPSB2YWw7DQogICAgKwlpZiAob2xkdmFsICE9IHZhbCkNCiAgICArCQlzeW1fY2xlYXJfYWxs
X3ZhbGlkKCk7DQogICAgKw0KICAgICsJcmV0dXJuIHRydWU7DQogICAgK30NCiAgICArDQogICAg
K3RyaXN0YXRlIHN5bV90b2dnbGVfdHJpc3RhdGVfdmFsdWUoc3RydWN0IHN5bWJvbCAqc3ltKQ0K
ICAgICt7DQogICAgKwl0cmlzdGF0ZSBvbGR2YWwsIG5ld3ZhbDsNCiAgICArDQogICAgKwlvbGR2
YWwgPSBuZXd2YWwgPSBzeW1fZ2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSk7DQogICAgKwlkbyB7DQog
ICAgKwkJc3dpdGNoIChuZXd2YWwpIHsNCiAgICArCQljYXNlIG5vOg0KICAgICsJCQluZXd2YWwg
PSBtb2Q7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgbW9kOg0KICAgICsJCQluZXd2YWwg
PSB5ZXM7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgeWVzOg0KICAgICsJCQluZXd2YWwg
PSBubzsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsJCWlmIChzeW1fc2V0X3RyaXN0
YXRlX3ZhbHVlKHN5bSwgbmV3dmFsKSkNCiAgICArCQkJYnJlYWs7DQogICAgKwl9IHdoaWxlIChv
bGR2YWwgIT0gbmV3dmFsKTsNCiAgICArCXJldHVybiBuZXd2YWw7DQogICAgK30NCiAgICArDQog
ICAgK2Jvb2wgc3ltX3N0cmluZ192YWxpZChzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIg
KnN0cikNCiAgICArew0KICAgICsJc2lnbmVkIGNoYXIgY2g7DQogICAgKw0KICAgICsJc3dpdGNo
IChzeW0tPnR5cGUpIHsNCiAgICArCWNhc2UgU19TVFJJTkc6DQogICAgKwkJcmV0dXJuIHRydWU7
DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJCWNoID0gKnN0cisrOw0KICAgICsJCWlmIChjaCA9
PSAnLScpDQogICAgKwkJCWNoID0gKnN0cisrOw0KICAgICsJCWlmICghaXNkaWdpdChjaCkpDQog
ICAgKwkJCXJldHVybiBmYWxzZTsNCiAgICArCQlpZiAoY2ggPT0gJzAnICYmICpzdHIgIT0gMCkN
CiAgICArCQkJcmV0dXJuIGZhbHNlOw0KICAgICsJCXdoaWxlICgoY2ggPSAqc3RyKyspKSB7DQog
ICAgKwkJCWlmICghaXNkaWdpdChjaCkpDQogICAgKwkJCQlyZXR1cm4gZmFsc2U7DQogICAgKwkJ
fQ0KICAgICsJCXJldHVybiB0cnVlOw0KICAgICsJY2FzZSBTX0hFWDoNCiAgICArCQlpZiAoc3Ry
WzBdID09ICcwJyAmJiAoc3RyWzFdID09ICd4JyB8fCBzdHJbMV0gPT0gJ1gnKSkNCiAgICArCQkJ
c3RyICs9IDI7DQogICAgKwkJY2ggPSAqc3RyKys7DQogICAgKwkJZG8gew0KICAgICsJCQlpZiAo
IWlzeGRpZ2l0KGNoKSkNCiAgICArCQkJCXJldHVybiBmYWxzZTsNCiAgICArCQl9IHdoaWxlICgo
Y2ggPSAqc3RyKyspKTsNCiAgICArCQlyZXR1cm4gdHJ1ZTsNCiAgICArCWNhc2UgU19CT09MRUFO
Og0KICAgICsJY2FzZSBTX1RSSVNUQVRFOg0KICAgICsJCXN3aXRjaCAoc3RyWzBdKSB7DQogICAg
KwkJY2FzZSAneSc6IGNhc2UgJ1knOg0KICAgICsJCWNhc2UgJ20nOiBjYXNlICdNJzoNCiAgICAr
CQljYXNlICduJzogY2FzZSAnTic6DQogICAgKwkJCXJldHVybiB0cnVlOw0KICAgICsJCX0NCiAg
ICArCQlyZXR1cm4gZmFsc2U7DQogICAgKwlkZWZhdWx0Og0KICAgICsJCXJldHVybiBmYWxzZTsN
CiAgICArCX0NCiAgICArfQ0KICAgICsNCiAgICArYm9vbCBzeW1fc3RyaW5nX3dpdGhpbl9yYW5n
ZShzdHJ1Y3Qgc3ltYm9sICpzeW0sIGNvbnN0IGNoYXIgKnN0cikNCiAgICArew0KICAgICsJc3Ry
dWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJbG9uZyBsb25nIHZhbDsNCiAgICArDQogICAgKwlz
d2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJY2FzZSBTX1NUUklORzoNCiAgICArCQlyZXR1cm4g
c3ltX3N0cmluZ192YWxpZChzeW0sIHN0cik7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJCWlm
ICghc3ltX3N0cmluZ192YWxpZChzeW0sIHN0cikpDQogICAgKwkJCXJldHVybiBmYWxzZTsNCiAg
ICArCQlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7DQogICAgKwkJaWYgKCFwcm9wKQ0K
ICAgICsJCQlyZXR1cm4gdHJ1ZTsNCiAgICArCQl2YWwgPSBzdHJ0b2xsKHN0ciwgTlVMTCwgMTAp
Ow0KICAgICsJCXJldHVybiB2YWwgPj0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVm
dC5zeW0sIDEwKSAmJg0KICAgICsJCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJv
cC0+ZXhwci0+cmlnaHQuc3ltLCAxMCk7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCWlmICgh
c3ltX3N0cmluZ192YWxpZChzeW0sIHN0cikpDQogICAgKwkJCXJldHVybiBmYWxzZTsNCiAgICAr
CQlwcm9wID0gc3ltX2dldF9yYW5nZV9wcm9wKHN5bSk7DQogICAgKwkJaWYgKCFwcm9wKQ0KICAg
ICsJCQlyZXR1cm4gdHJ1ZTsNCiAgICArCQl2YWwgPSBzdHJ0b2xsKHN0ciwgTlVMTCwgMTYpOw0K
ICAgICsJCXJldHVybiB2YWwgPj0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+ZXhwci0+bGVmdC5z
eW0sIDE2KSAmJg0KICAgICsJCSAgICAgICB2YWwgPD0gc3ltX2dldF9yYW5nZV92YWwocHJvcC0+
ZXhwci0+cmlnaHQuc3ltLCAxNik7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICArCWNhc2Ug
U19UUklTVEFURToNCiAgICArCQlzd2l0Y2ggKHN0clswXSkgew0KICAgICsJCWNhc2UgJ3knOiBj
YXNlICdZJzoNCiAgICArCQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCB5
ZXMpOw0KICAgICsJCWNhc2UgJ20nOiBjYXNlICdNJzoNCiAgICArCQkJcmV0dXJuIHN5bV90cmlz
dGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBtb2QpOw0KICAgICsJCWNhc2UgJ24nOiBjYXNlICdOJzoN
CiAgICArCQkJcmV0dXJuIHN5bV90cmlzdGF0ZV93aXRoaW5fcmFuZ2Uoc3ltLCBubyk7DQogICAg
KwkJfQ0KICAgICsJCXJldHVybiBmYWxzZTsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJcmV0dXJu
IGZhbHNlOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICtib29sIHN5bV9zZXRfc3RyaW5n
X3ZhbHVlKHN0cnVjdCBzeW1ib2wgKnN5bSwgY29uc3QgY2hhciAqbmV3dmFsKQ0KICAgICt7DQog
ICAgKwljb25zdCBjaGFyICpvbGR2YWw7DQogICAgKwljaGFyICp2YWw7DQogICAgKwlpbnQgc2l6
ZTsNCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkgew0KICAgICsJY2FzZSBTX0JPT0xF
QU46DQogICAgKwljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJc3dpdGNoIChuZXd2YWxbMF0pIHsN
CiAgICArCQljYXNlICd5JzogY2FzZSAnWSc6DQogICAgKwkJCXJldHVybiBzeW1fc2V0X3RyaXN0
YXRlX3ZhbHVlKHN5bSwgeWVzKTsNCiAgICArCQljYXNlICdtJzogY2FzZSAnTSc6DQogICAgKwkJ
CXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwgbW9kKTsNCiAgICArCQljYXNlICdu
JzogY2FzZSAnTic6DQogICAgKwkJCXJldHVybiBzeW1fc2V0X3RyaXN0YXRlX3ZhbHVlKHN5bSwg
bm8pOw0KICAgICsJCX0NCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKwlkZWZhdWx0Og0KICAg
ICsJCTsNCiAgICArCX0NCiAgICArDQogICAgKwlpZiAoIXN5bV9zdHJpbmdfd2l0aGluX3Jhbmdl
KHN5bSwgbmV3dmFsKSkNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKw0KICAgICsJaWYgKCEo
c3ltLT5mbGFncyAmIFNZTUJPTF9ERUZfVVNFUikpIHsNCiAgICArCQlzeW0tPmZsYWdzIHw9IFNZ
TUJPTF9ERUZfVVNFUjsNCiAgICArCQlzeW1fc2V0X2NoYW5nZWQoc3ltKTsNCiAgICArCX0NCiAg
ICArDQogICAgKwlvbGR2YWwgPSBzeW0tPmRlZltTX0RFRl9VU0VSXS52YWw7DQogICAgKwlzaXpl
ID0gc3RybGVuKG5ld3ZhbCkgKyAxOw0KICAgICsJaWYgKHN5bS0+dHlwZSA9PSBTX0hFWCAmJiAo
bmV3dmFsWzBdICE9ICcwJyB8fCAobmV3dmFsWzFdICE9ICd4JyAmJiBuZXd2YWxbMV0gIT0gJ1gn
KSkpIHsNCiAgICArCQlzaXplICs9IDI7DQogICAgKwkJc3ltLT5kZWZbU19ERUZfVVNFUl0udmFs
ID0gdmFsID0geG1hbGxvYyhzaXplKTsNCiAgICArCQkqdmFsKysgPSAnMCc7DQogICAgKwkJKnZh
bCsrID0gJ3gnOw0KICAgICsJfSBlbHNlIGlmICghb2xkdmFsIHx8IHN0cmNtcChvbGR2YWwsIG5l
d3ZhbCkpDQogICAgKwkJc3ltLT5kZWZbU19ERUZfVVNFUl0udmFsID0gdmFsID0geG1hbGxvYyhz
aXplKTsNCiAgICArCWVsc2UNCiAgICArCQlyZXR1cm4gdHJ1ZTsNCiAgICArDQogICAgKwlzdHJj
cHkodmFsLCBuZXd2YWwpOw0KICAgICsJZnJlZSgodm9pZCAqKW9sZHZhbCk7DQogICAgKwlzeW1f
Y2xlYXJfYWxsX3ZhbGlkKCk7DQogICAgKw0KICAgICsJcmV0dXJuIHRydWU7DQogICAgK30NCiAg
ICArDQogICAgKy8qDQogICAgKyAqIEZpbmQgdGhlIGRlZmF1bHQgdmFsdWUgYXNzb2NpYXRlZCB0
byBhIHN5bWJvbC4NCiAgICArICogRm9yIHRyaXN0YXRlIHN5bWJvbCBoYW5kbGUgdGhlIG1vZHVs
ZXM9biBjYXNlDQogICAgKyAqIGluIHdoaWNoIGNhc2UgIm0iIGJlY29tZXMgInkiLg0KICAgICsg
KiBJZiB0aGUgc3ltYm9sIGRvZXMgbm90IGhhdmUgYW55IGRlZmF1bHQgdGhlbiBmYWxsYmFjaw0K
ICAgICsgKiB0byB0aGUgZml4ZWQgZGVmYXVsdCB2YWx1ZXMuDQogICAgKyAqLw0KICAgICtjb25z
dCBjaGFyICpzeW1fZ2V0X3N0cmluZ19kZWZhdWx0KHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICAr
ew0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IHN5bWJvbCAqZHM7
DQogICAgKwljb25zdCBjaGFyICpzdHI7DQogICAgKwl0cmlzdGF0ZSB2YWw7DQogICAgKw0KICAg
ICsJc3ltX2NhbGNfdmlzaWJpbGl0eShzeW0pOw0KICAgICsJc3ltX2NhbGNfdmFsdWUobW9kdWxl
c19zeW0pOw0KICAgICsJdmFsID0gc3ltYm9sX25vLmN1cnIudHJpOw0KICAgICsJc3RyID0gc3lt
Ym9sX2VtcHR5LmN1cnIudmFsOw0KICAgICsNCiAgICArCS8qIElmIHN5bWJvbCBoYXMgYSBkZWZh
dWx0IHZhbHVlIGxvb2sgaXQgdXAgKi8NCiAgICArCXByb3AgPSBzeW1fZ2V0X2RlZmF1bHRfcHJv
cChzeW0pOw0KICAgICsJaWYgKHByb3AgIT0gTlVMTCkgew0KICAgICsJCXN3aXRjaCAoc3ltLT50
eXBlKSB7DQogICAgKwkJY2FzZSBTX0JPT0xFQU46DQogICAgKwkJY2FzZSBTX1RSSVNUQVRFOg0K
ICAgICsJCQkvKiBUaGUgdmlzaWJpbGl0eSBtYXkgbGltaXQgdGhlIHZhbHVlIGZyb20geWVzID0+
IG1vZCAqLw0KICAgICsJCQl2YWwgPSBFWFBSX0FORChleHByX2NhbGNfdmFsdWUocHJvcC0+ZXhw
ciksIHByb3AtPnZpc2libGUudHJpKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoN
CiAgICArCQkJLyoNCiAgICArCQkJICogVGhlIGZvbGxvd2luZyBmYWlscyB0byBoYW5kbGUgdGhl
IHNpdHVhdGlvbg0KICAgICsJCQkgKiB3aGVyZSBhIGRlZmF1bHQgdmFsdWUgaXMgZnVydGhlciBs
aW1pdGVkIGJ5DQogICAgKwkJCSAqIHRoZSB2YWxpZCByYW5nZS4NCiAgICArCQkJICovDQogICAg
KwkJCWRzID0gcHJvcF9nZXRfc3ltYm9sKHByb3ApOw0KICAgICsJCQlpZiAoZHMgIT0gTlVMTCkg
ew0KICAgICsJCQkJc3ltX2NhbGNfdmFsdWUoZHMpOw0KICAgICsJCQkJc3RyID0gKGNvbnN0IGNo
YXIgKilkcy0+Y3Vyci52YWw7DQogICAgKwkJCX0NCiAgICArCQl9DQogICAgKwl9DQogICAgKw0K
ICAgICsJLyogSGFuZGxlIHNlbGVjdCBzdGF0ZW1lbnRzICovDQogICAgKwl2YWwgPSBFWFBSX09S
KHZhbCwgc3ltLT5yZXZfZGVwLnRyaSk7DQogICAgKw0KICAgICsJLyogdHJhbnNwb3NlIG1vZCB0
byB5ZXMgaWYgbW9kdWxlcyBhcmUgbm90IGVuYWJsZWQgKi8NCiAgICArCWlmICh2YWwgPT0gbW9k
KQ0KICAgICsJCWlmICghc3ltX2lzX2Nob2ljZV92YWx1ZShzeW0pICYmIG1vZHVsZXNfc3ltLT5j
dXJyLnRyaSA9PSBubykNCiAgICArCQkJdmFsID0geWVzOw0KICAgICsNCiAgICArCS8qIHRyYW5z
cG9zZSBtb2QgdG8geWVzIGlmIHR5cGUgaXMgYm9vbCAqLw0KICAgICsJaWYgKHN5bS0+dHlwZSA9
PSBTX0JPT0xFQU4gJiYgdmFsID09IG1vZCkNCiAgICArCQl2YWwgPSB5ZXM7DQogICAgKw0KICAg
ICsJLyogYWRqdXN0IHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoaXMgc3ltYm9sIGlzIGltcGxpZWQg
YnkgYW5vdGhlciAqLw0KICAgICsJaWYgKHZhbCA8IHN5bS0+aW1wbGllZC50cmkpDQogICAgKwkJ
dmFsID0gc3ltLT5pbXBsaWVkLnRyaTsNCiAgICArDQogICAgKwlzd2l0Y2ggKHN5bS0+dHlwZSkg
ew0KICAgICsJY2FzZSBTX0JPT0xFQU46DQogICAgKwljYXNlIFNfVFJJU1RBVEU6DQogICAgKwkJ
c3dpdGNoICh2YWwpIHsNCiAgICArCQljYXNlIG5vOiByZXR1cm4gIm4iOw0KICAgICsJCWNhc2Ug
bW9kOiByZXR1cm4gIm0iOw0KICAgICsJCWNhc2UgeWVzOiByZXR1cm4gInkiOw0KICAgICsJCX0N
CiAgICArCWNhc2UgU19JTlQ6DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCXJldHVybiBzdHI7
DQogICAgKwljYXNlIFNfU1RSSU5HOg0KICAgICsJCXJldHVybiBzdHI7DQogICAgKwljYXNlIFNf
VU5LTk9XTjoNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArCXJldHVybiAiIjsNCiAgICAr
fQ0KICAgICsNCiAgICArY29uc3QgY2hhciAqc3ltX2dldF9zdHJpbmdfdmFsdWUoc3RydWN0IHN5
bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwl0cmlzdGF0ZSB2YWw7DQogICAgKw0KICAgICsJc3dp
dGNoIChzeW0tPnR5cGUpIHsNCiAgICArCWNhc2UgU19CT09MRUFOOg0KICAgICsJY2FzZSBTX1RS
SVNUQVRFOg0KICAgICsJCXZhbCA9IHN5bV9nZXRfdHJpc3RhdGVfdmFsdWUoc3ltKTsNCiAgICAr
CQlzd2l0Y2ggKHZhbCkgew0KICAgICsJCWNhc2Ugbm86DQogICAgKwkJCXJldHVybiAibiI7DQog
ICAgKwkJY2FzZSBtb2Q6DQogICAgKwkJCXN5bV9jYWxjX3ZhbHVlKG1vZHVsZXNfc3ltKTsNCiAg
ICArCQkJcmV0dXJuIChtb2R1bGVzX3N5bS0+Y3Vyci50cmkgPT0gbm8pID8gIm4iIDogIm0iOw0K
ICAgICsJCWNhc2UgeWVzOg0KICAgICsJCQlyZXR1cm4gInkiOw0KICAgICsJCX0NCiAgICArCQli
cmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAgKwkJOw0KICAgICsJfQ0KICAgICsJcmV0dXJuIChj
b25zdCBjaGFyICopc3ltLT5jdXJyLnZhbDsNCiAgICArfQ0KICAgICsNCiAgICArYm9vbCBzeW1f
aXNfY2hhbmdhYmxlKHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0KICAgICsJcmV0dXJuIHN5
bS0+dmlzaWJsZSA+IHN5bS0+cmV2X2RlcC50cmk7DQogICAgK30NCiAgICArDQogICAgK3N0YXRp
YyB1bnNpZ25lZCBzdHJoYXNoKGNvbnN0IGNoYXIgKnMpDQogICAgK3sNCiAgICArCS8qIGZudjMy
IGhhc2ggKi8NCiAgICArCXVuc2lnbmVkIGhhc2ggPSAyMTY2MTM2MjYxVTsNCiAgICArCWZvciAo
OyAqczsgcysrKQ0KICAgICsJCWhhc2ggPSAoaGFzaCBeICpzKSAqIDB4MDEwMDAxOTM7DQogICAg
KwlyZXR1cm4gaGFzaDsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHN5bWJvbCAqc3ltX2xv
b2t1cChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpDQogICAgK3sNCiAgICArCXN0cnVjdCBz
eW1ib2wgKnN5bWJvbDsNCiAgICArCWNoYXIgKm5ld19uYW1lOw0KICAgICsJaW50IGhhc2g7DQog
ICAgKw0KICAgICsJaWYgKG5hbWUpIHsNCiAgICArCQlpZiAobmFtZVswXSAmJiAhbmFtZVsxXSkg
ew0KICAgICsJCQlzd2l0Y2ggKG5hbWVbMF0pIHsNCiAgICArCQkJY2FzZSAneSc6IHJldHVybiAm
c3ltYm9sX3llczsNCiAgICArCQkJY2FzZSAnbSc6IHJldHVybiAmc3ltYm9sX21vZDsNCiAgICAr
CQkJY2FzZSAnbic6IHJldHVybiAmc3ltYm9sX25vOw0KICAgICsJCQl9DQogICAgKwkJfQ0KICAg
ICsJCWhhc2ggPSBzdHJoYXNoKG5hbWUpICUgU1lNQk9MX0hBU0hTSVpFOw0KICAgICsNCiAgICAr
CQlmb3IgKHN5bWJvbCA9IHN5bWJvbF9oYXNoW2hhc2hdOyBzeW1ib2w7IHN5bWJvbCA9IHN5bWJv
bC0+bmV4dCkgew0KICAgICsJCQlpZiAoc3ltYm9sLT5uYW1lICYmDQogICAgKwkJCSAgICAhc3Ry
Y21wKHN5bWJvbC0+bmFtZSwgbmFtZSkgJiYNCiAgICArCQkJICAgIChmbGFncyA/IHN5bWJvbC0+
ZmxhZ3MgJiBmbGFncw0KICAgICsJCQkJICAgOiAhKHN5bWJvbC0+ZmxhZ3MgJiAoU1lNQk9MX0NP
TlNUfFNZTUJPTF9DSE9JQ0UpKSkpDQogICAgKwkJCQlyZXR1cm4gc3ltYm9sOw0KICAgICsJCX0N
CiAgICArCQluZXdfbmFtZSA9IHhzdHJkdXAobmFtZSk7DQogICAgKwl9IGVsc2Ugew0KICAgICsJ
CW5ld19uYW1lID0gTlVMTDsNCiAgICArCQloYXNoID0gMDsNCiAgICArCX0NCiAgICArDQogICAg
KwlzeW1ib2wgPSB4bWFsbG9jKHNpemVvZigqc3ltYm9sKSk7DQogICAgKwltZW1zZXQoc3ltYm9s
LCAwLCBzaXplb2YoKnN5bWJvbCkpOw0KICAgICsJc3ltYm9sLT5uYW1lID0gbmV3X25hbWU7DQog
ICAgKwlzeW1ib2wtPnR5cGUgPSBTX1VOS05PV047DQogICAgKwlzeW1ib2wtPmZsYWdzIHw9IGZs
YWdzOw0KICAgICsNCiAgICArCXN5bWJvbC0+bmV4dCA9IHN5bWJvbF9oYXNoW2hhc2hdOw0KICAg
ICsJc3ltYm9sX2hhc2hbaGFzaF0gPSBzeW1ib2w7DQogICAgKw0KICAgICsJcmV0dXJuIHN5bWJv
bDsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHN5bWJvbCAqc3ltX2ZpbmQoY29uc3QgY2hh
ciAqbmFtZSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltYm9sID0gTlVMTDsNCiAg
ICArCWludCBoYXNoID0gMDsNCiAgICArDQogICAgKwlpZiAoIW5hbWUpDQogICAgKwkJcmV0dXJu
IE5VTEw7DQogICAgKw0KICAgICsJaWYgKG5hbWVbMF0gJiYgIW5hbWVbMV0pIHsNCiAgICArCQlz
d2l0Y2ggKG5hbWVbMF0pIHsNCiAgICArCQljYXNlICd5JzogcmV0dXJuICZzeW1ib2xfeWVzOw0K
ICAgICsJCWNhc2UgJ20nOiByZXR1cm4gJnN5bWJvbF9tb2Q7DQogICAgKwkJY2FzZSAnbic6IHJl
dHVybiAmc3ltYm9sX25vOw0KICAgICsJCX0NCiAgICArCX0NCiAgICArCWhhc2ggPSBzdHJoYXNo
KG5hbWUpICUgU1lNQk9MX0hBU0hTSVpFOw0KICAgICsNCiAgICArCWZvciAoc3ltYm9sID0gc3lt
Ym9sX2hhc2hbaGFzaF07IHN5bWJvbDsgc3ltYm9sID0gc3ltYm9sLT5uZXh0KSB7DQogICAgKwkJ
aWYgKHN5bWJvbC0+bmFtZSAmJg0KICAgICsJCSAgICAhc3RyY21wKHN5bWJvbC0+bmFtZSwgbmFt
ZSkgJiYNCiAgICArCQkgICAgIShzeW1ib2wtPmZsYWdzICYgU1lNQk9MX0NPTlNUKSkNCiAgICAr
CQkJCWJyZWFrOw0KICAgICsJfQ0KICAgICsNCiAgICArCXJldHVybiBzeW1ib2w7DQogICAgK30N
CiAgICArDQogICAgK2NvbnN0IGNoYXIgKnN5bV9lc2NhcGVfc3RyaW5nX3ZhbHVlKGNvbnN0IGNo
YXIgKmluKQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICpwOw0KICAgICsJc2l6ZV90IHJlc2xl
bjsNCiAgICArCWNoYXIgKnJlczsNCiAgICArCXNpemVfdCBsOw0KICAgICsNCiAgICArCXJlc2xl
biA9IHN0cmxlbihpbikgKyBzdHJsZW4oIlwiXCIiKSArIDE7DQogICAgKw0KICAgICsJcCA9IGlu
Ow0KICAgICsJZm9yICg7Oykgew0KICAgICsJCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7DQogICAg
KwkJcCArPSBsOw0KICAgICsNCiAgICArCQlpZiAocFswXSA9PSAnXDAnKQ0KICAgICsJCQlicmVh
azsNCiAgICArDQogICAgKwkJcmVzbGVuKys7DQogICAgKwkJcCsrOw0KICAgICsJfQ0KICAgICsN
CiAgICArCXJlcyA9IHhtYWxsb2MocmVzbGVuKTsNCiAgICArCXJlc1swXSA9ICdcMCc7DQogICAg
Kw0KICAgICsJc3RyY2F0KHJlcywgIlwiIik7DQogICAgKw0KICAgICsJcCA9IGluOw0KICAgICsJ
Zm9yICg7Oykgew0KICAgICsJCWwgPSBzdHJjc3BuKHAsICJcIlxcIik7DQogICAgKwkJc3RybmNh
dChyZXMsIHAsIGwpOw0KICAgICsJCXAgKz0gbDsNCiAgICArDQogICAgKwkJaWYgKHBbMF0gPT0g
J1wwJykNCiAgICArCQkJYnJlYWs7DQogICAgKw0KICAgICsJCXN0cmNhdChyZXMsICJcXCIpOw0K
ICAgICsJCXN0cm5jYXQocmVzLCBwKyssIDEpOw0KICAgICsJfQ0KICAgICsNCiAgICArCXN0cmNh
dChyZXMsICJcIiIpOw0KICAgICsJcmV0dXJuIHJlczsNCiAgICArfQ0KICAgICsNCiAgICArc3Ry
dWN0IHN5bV9tYXRjaCB7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sCSpzeW07DQogICAgKwlvZmZfdAkJ
c28sIGVvOw0KICAgICt9Ow0KICAgICsNCiAgICArLyogQ29tcGFyZSBtYXRjaGVkIHN5bWJvbHMg
YXMgdGh1czoNCiAgICArICogLSBmaXJzdCwgc3ltYm9scyB0aGF0IG1hdGNoIGV4YWN0bHkNCiAg
ICArICogLSB0aGVuLCBhbHBoYWJldGljYWwgc29ydA0KICAgICsgKi8NCiAgICArc3RhdGljIGlu
dCBzeW1fcmVsX2NvbXAoY29uc3Qgdm9pZCAqc3ltMSwgY29uc3Qgdm9pZCAqc3ltMikNCiAgICAr
ew0KICAgICsJY29uc3Qgc3RydWN0IHN5bV9tYXRjaCAqczEgPSBzeW0xOw0KICAgICsJY29uc3Qg
c3RydWN0IHN5bV9tYXRjaCAqczIgPSBzeW0yOw0KICAgICsJaW50IGV4YWN0MSwgZXhhY3QyOw0K
ICAgICsNCiAgICArCS8qIEV4YWN0IG1hdGNoOg0KICAgICsJICogLSBpZiBtYXRjaGVkIGxlbmd0
aCBvbiBzeW1ib2wgczEgaXMgdGhlIGxlbmd0aCBvZiB0aGF0IHN5bWJvbCwNCiAgICArCSAqICAg
dGhlbiB0aGlzIHN5bWJvbCBzaG91bGQgY29tZSBmaXJzdDsNCiAgICArCSAqIC0gaWYgbWF0Y2hl
ZCBsZW5ndGggb24gc3ltYm9sIHMyIGlzIHRoZSBsZW5ndGggb2YgdGhhdCBzeW1ib2wsDQogICAg
KwkgKiAgIHRoZW4gdGhpcyBzeW1ib2wgc2hvdWxkIGNvbWUgZmlyc3QuDQogICAgKwkgKiBOb3Rl
OiBzaW5jZSB0aGUgc2VhcmNoIGNhbiBiZSBhIHJlZ2V4cCwgYm90aCBzeW1ib2xzIG1heSBtYXRj
aA0KICAgICsJICogZXhhY3RseTsgaWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgY2FuJ3QgZGVjaWRl
IHdoaWNoIGNvbWVzIGZpcnN0LA0KICAgICsJICogYW5kIHdlIGZhbGxiYWNrIHRvIHNvcnRpbmcg
YWxwaGFiZXRpY2FsbHkuDQogICAgKwkgKi8NCiAgICArCWV4YWN0MSA9IChzMS0+ZW8gLSBzMS0+
c28pID09IHN0cmxlbihzMS0+c3ltLT5uYW1lKTsNCiAgICArCWV4YWN0MiA9IChzMi0+ZW8gLSBz
Mi0+c28pID09IHN0cmxlbihzMi0+c3ltLT5uYW1lKTsNCiAgICArCWlmIChleGFjdDEgJiYgIWV4
YWN0MikNCiAgICArCQlyZXR1cm4gLTE7DQogICAgKwlpZiAoIWV4YWN0MSAmJiBleGFjdDIpDQog
ICAgKwkJcmV0dXJuIDE7DQogICAgKw0KICAgICsJLyogQXMgYSBmYWxsYmFjaywgc29ydCBzeW1i
b2xzIGFscGhhYmV0aWNhbGx5ICovDQogICAgKwlyZXR1cm4gc3RyY21wKHMxLT5zeW0tPm5hbWUs
IHMyLT5zeW0tPm5hbWUpOw0KICAgICt9DQogICAgKw0KICAgICtzdHJ1Y3Qgc3ltYm9sICoqc3lt
X3JlX3NlYXJjaChjb25zdCBjaGFyICpwYXR0ZXJuKQ0KICAgICt7DQogICAgKwlzdHJ1Y3Qgc3lt
Ym9sICpzeW0sICoqc3ltX2FyciA9IE5VTEw7DQogICAgKwlzdHJ1Y3Qgc3ltX21hdGNoICpzeW1f
bWF0Y2hfYXJyID0gTlVMTDsNCiAgICArCWludCBpLCBjbnQsIHNpemU7DQogICAgKwlyZWdleF90
IHJlOw0KICAgICsJcmVnbWF0Y2hfdCBtYXRjaFsxXTsNCiAgICArDQogICAgKwljbnQgPSBzaXpl
ID0gMDsNCiAgICArCS8qIFNraXAgaWYgZW1wdHkgKi8NCiAgICArCWlmIChzdHJsZW4ocGF0dGVy
bikgPT0gMCkNCiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArCWlmIChyZWdjb21wKCZyZSwgcGF0
dGVybiwgUkVHX0VYVEVOREVEfFJFR19JQ0FTRSkpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAg
Kw0KICAgICsJZm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgICsJCWlmIChzeW0tPmZsYWdz
ICYgU1lNQk9MX0NPTlNUIHx8ICFzeW0tPm5hbWUpDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJ
CWlmIChyZWdleGVjKCZyZSwgc3ltLT5uYW1lLCAxLCBtYXRjaCwgMCkpDQogICAgKwkJCWNvbnRp
bnVlOw0KICAgICsJCWlmIChjbnQgPj0gc2l6ZSkgew0KICAgICsJCQl2b2lkICp0bXA7DQogICAg
KwkJCXNpemUgKz0gMTY7DQogICAgKwkJCXRtcCA9IHJlYWxsb2Moc3ltX21hdGNoX2Fyciwgc2l6
ZSAqIHNpemVvZihzdHJ1Y3Qgc3ltX21hdGNoKSk7DQogICAgKwkJCWlmICghdG1wKQ0KICAgICsJ
CQkJZ290byBzeW1fcmVfc2VhcmNoX2ZyZWU7DQogICAgKwkJCXN5bV9tYXRjaF9hcnIgPSB0bXA7
DQogICAgKwkJfQ0KICAgICsJCXN5bV9jYWxjX3ZhbHVlKHN5bSk7DQogICAgKwkJLyogQXMgcmVn
ZXhlYyByZXR1cm5lZCAwLCB3ZSBrbm93IHdlIGhhdmUgYSBtYXRjaCwgc28NCiAgICArCQkgKiB3
ZSBjYW4gdXNlIG1hdGNoWzBdLnJtX1tzZV1vIHdpdGhvdXQgZnVydGhlciBjaGVja3MNCiAgICAr
CQkgKi8NCiAgICArCQlzeW1fbWF0Y2hfYXJyW2NudF0uc28gPSBtYXRjaFswXS5ybV9zbzsNCiAg
ICArCQlzeW1fbWF0Y2hfYXJyW2NudF0uZW8gPSBtYXRjaFswXS5ybV9lbzsNCiAgICArCQlzeW1f
bWF0Y2hfYXJyW2NudCsrXS5zeW0gPSBzeW07DQogICAgKwl9DQogICAgKwlpZiAoc3ltX21hdGNo
X2Fycikgew0KICAgICsJCXFzb3J0KHN5bV9tYXRjaF9hcnIsIGNudCwgc2l6ZW9mKHN0cnVjdCBz
eW1fbWF0Y2gpLCBzeW1fcmVsX2NvbXApOw0KICAgICsJCXN5bV9hcnIgPSBtYWxsb2MoKGNudCsx
KSAqIHNpemVvZihzdHJ1Y3Qgc3ltYm9sICopKTsNCiAgICArCQlpZiAoIXN5bV9hcnIpDQogICAg
KwkJCWdvdG8gc3ltX3JlX3NlYXJjaF9mcmVlOw0KICAgICsJCWZvciAoaSA9IDA7IGkgPCBjbnQ7
IGkrKykNCiAgICArCQkJc3ltX2FycltpXSA9IHN5bV9tYXRjaF9hcnJbaV0uc3ltOw0KICAgICsJ
CXN5bV9hcnJbY250XSA9IE5VTEw7DQogICAgKwl9DQogICAgK3N5bV9yZV9zZWFyY2hfZnJlZToN
CiAgICArCS8qIHN5bV9tYXRjaF9hcnIgY2FuIGJlIE5VTEwgaWYgbm8gbWF0Y2gsIGJ1dCBmcmVl
KE5VTEwpIGlzIE9LICovDQogICAgKwlmcmVlKHN5bV9tYXRjaF9hcnIpOw0KICAgICsJcmVnZnJl
ZSgmcmUpOw0KICAgICsNCiAgICArCXJldHVybiBzeW1fYXJyOw0KICAgICt9DQogICAgKw0KICAg
ICsvKg0KICAgICsgKiBXaGVuIHdlIGNoZWNrIGZvciByZWN1cnNpdmUgZGVwZW5kZW5jaWVzIHdl
IHVzZSBhIHN0YWNrIHRvIHNhdmUNCiAgICArICogY3VycmVudCBzdGF0ZSBzbyB3ZSBjYW4gcHJp
bnQgb3V0IHJlbGV2YW50IGluZm8gdG8gdXNlci4NCiAgICArICogVGhlIGVudHJpZXMgYXJlIGxv
Y2F0ZWQgb24gdGhlIGNhbGwgc3RhY2sgc28gbm8gbmVlZCB0byBmcmVlIG1lbW9yeS4NCiAgICAr
ICogTm90ZSBpbnNlcnQoKSByZW1vdmUoKSBtdXN0IGFsd2F5cyBtYXRjaCB0byBwcm9wZXJseSBj
bGVhciB0aGUgc3RhY2suDQogICAgKyAqLw0KICAgICtzdGF0aWMgc3RydWN0IGRlcF9zdGFjayB7
DQogICAgKwlzdHJ1Y3QgZGVwX3N0YWNrICpwcmV2LCAqbmV4dDsNCiAgICArCXN0cnVjdCBzeW1i
b2wgKnN5bTsNCiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBleHBy
ICoqZXhwcjsNCiAgICArfSAqY2hlY2tfdG9wOw0KICAgICsNCiAgICArc3RhdGljIHZvaWQgZGVw
X3N0YWNrX2luc2VydChzdHJ1Y3QgZGVwX3N0YWNrICpzdGFjaywgc3RydWN0IHN5bWJvbCAqc3lt
KQ0KICAgICt7DQogICAgKwltZW1zZXQoc3RhY2ssIDAsIHNpemVvZigqc3RhY2spKTsNCiAgICAr
CWlmIChjaGVja190b3ApDQogICAgKwkJY2hlY2tfdG9wLT5uZXh0ID0gc3RhY2s7DQogICAgKwlz
dGFjay0+cHJldiA9IGNoZWNrX3RvcDsNCiAgICArCXN0YWNrLT5zeW0gPSBzeW07DQogICAgKwlj
aGVja190b3AgPSBzdGFjazsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgZGVwX3N0
YWNrX3JlbW92ZSh2b2lkKQ0KICAgICt7DQogICAgKwljaGVja190b3AgPSBjaGVja190b3AtPnBy
ZXY7DQogICAgKwlpZiAoY2hlY2tfdG9wKQ0KICAgICsJCWNoZWNrX3RvcC0+bmV4dCA9IE5VTEw7
DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIENhbGxlZCB3aGVuIHdlIGhhdmUgZGV0
ZWN0ZWQgYSByZWN1cnNpdmUgZGVwZW5kZW5jeS4NCiAgICArICogY2hlY2tfdG9wIHBvaW50IHRv
IHRoZSB0b3Agb2YgdGhlIHN0YWN0IHNvIHdlIHVzZQ0KICAgICsgKiB0aGUgLT5wcmV2IHBvaW50
ZXIgdG8gbG9jYXRlIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLg0KICAgICsgKi8NCiAgICArc3Rh
dGljIHZvaWQgc3ltX2NoZWNrX3ByaW50X3JlY3Vyc2l2ZShzdHJ1Y3Qgc3ltYm9sICpsYXN0X3N5
bSkNCiAgICArew0KICAgICsJc3RydWN0IGRlcF9zdGFjayAqc3RhY2s7DQogICAgKwlzdHJ1Y3Qg
c3ltYm9sICpzeW0sICpuZXh0X3N5bTsNCiAgICArCXN0cnVjdCBtZW51ICptZW51ID0gTlVMTDsN
CiAgICArCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsNCiAgICArCXN0cnVjdCBkZXBfc3RhY2sgY3Zf
c3RhY2s7DQogICAgKw0KICAgICsJaWYgKHN5bV9pc19jaG9pY2VfdmFsdWUobGFzdF9zeW0pKSB7
DQogICAgKwkJZGVwX3N0YWNrX2luc2VydCgmY3Zfc3RhY2ssIGxhc3Rfc3ltKTsNCiAgICArCQls
YXN0X3N5bSA9IHByb3BfZ2V0X3N5bWJvbChzeW1fZ2V0X2Nob2ljZV9wcm9wKGxhc3Rfc3ltKSk7
DQogICAgKwl9DQogICAgKw0KICAgICsJZm9yIChzdGFjayA9IGNoZWNrX3RvcDsgc3RhY2sgIT0g
TlVMTDsgc3RhY2sgPSBzdGFjay0+cHJldikNCiAgICArCQlpZiAoc3RhY2stPnN5bSA9PSBsYXN0
X3N5bSkNCiAgICArCQkJYnJlYWs7DQogICAgKwlpZiAoIXN0YWNrKSB7DQogICAgKwkJZnByaW50
ZihzdGRlcnIsICJ1bmV4cGVjdGVkIHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVycm9yXG4iKTsNCiAg
ICArCQlyZXR1cm47DQogICAgKwl9DQogICAgKw0KICAgICsJZm9yICg7IHN0YWNrOyBzdGFjayA9
IHN0YWNrLT5uZXh0KSB7DQogICAgKwkJc3ltID0gc3RhY2stPnN5bTsNCiAgICArCQluZXh0X3N5
bSA9IHN0YWNrLT5uZXh0ID8gc3RhY2stPm5leHQtPnN5bSA6IGxhc3Rfc3ltOw0KICAgICsJCXBy
b3AgPSBzdGFjay0+cHJvcDsNCiAgICArCQlpZiAocHJvcCA9PSBOVUxMKQ0KICAgICsJCQlwcm9w
ID0gc3RhY2stPnN5bS0+cHJvcDsNCiAgICArDQogICAgKwkJLyogZm9yIGNob2ljZSB2YWx1ZXMg
ZmluZCB0aGUgbWVudSBlbnRyeSAodXNlZCBiZWxvdykgKi8NCiAgICArCQlpZiAoc3ltX2lzX2No
b2ljZShzeW0pIHx8IHN5bV9pc19jaG9pY2VfdmFsdWUoc3ltKSkgew0KICAgICsJCQlmb3IgKHBy
b3AgPSBzeW0tPnByb3A7IHByb3A7IHByb3AgPSBwcm9wLT5uZXh0KSB7DQogICAgKwkJCQltZW51
ID0gcHJvcC0+bWVudTsNCiAgICArCQkJCWlmIChwcm9wLT5tZW51KQ0KICAgICsJCQkJCWJyZWFr
Ow0KICAgICsJCQl9DQogICAgKwkJfQ0KICAgICsJCWlmIChzdGFjay0+c3ltID09IGxhc3Rfc3lt
KQ0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOmVycm9yOiByZWN1cnNpdmUgZGVwZW5k
ZW5jeSBkZXRlY3RlZCFcbiIsDQogICAgKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5l
bm8pOw0KICAgICsNCiAgICArCQlpZiAoc3ltX2lzX2Nob2ljZShzeW0pKSB7DQogICAgKwkJCWZw
cmludGYoc3RkZXJyLCAiJXM6JWQ6XHRjaG9pY2UgJXMgY29udGFpbnMgc3ltYm9sICVzXG4iLA0K
ICAgICsJCQkJbWVudS0+ZmlsZS0+bmFtZSwgbWVudS0+bGluZW5vLA0KICAgICsJCQkJc3ltLT5u
YW1lID8gc3ltLT5uYW1lIDogIjxjaG9pY2U+IiwNCiAgICArCQkJCW5leHRfc3ltLT5uYW1lID8g
bmV4dF9zeW0tPm5hbWUgOiAiPGNob2ljZT4iKTsNCiAgICArCQl9IGVsc2UgaWYgKHN5bV9pc19j
aG9pY2VfdmFsdWUoc3ltKSkgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3lt
Ym9sICVzIGlzIHBhcnQgb2YgY2hvaWNlICVzXG4iLA0KICAgICsJCQkJbWVudS0+ZmlsZS0+bmFt
ZSwgbWVudS0+bGluZW5vLA0KICAgICsJCQkJc3ltLT5uYW1lID8gc3ltLT5uYW1lIDogIjxjaG9p
Y2U+IiwNCiAgICArCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2lj
ZT4iKTsNCiAgICArCQl9IGVsc2UgaWYgKHN0YWNrLT5leHByID09ICZzeW0tPmRpcl9kZXAuZXhw
cikgew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzIGRlcGVuZHMg
b24gJXNcbiIsDQogICAgKwkJCQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sDQogICAg
KwkJCQlzeW0tPm5hbWUgPyBzeW0tPm5hbWUgOiAiPGNob2ljZT4iLA0KICAgICsJCQkJbmV4dF9z
eW0tPm5hbWUgPyBuZXh0X3N5bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOw0KICAgICsJCX0gZWxzZSBp
ZiAoc3RhY2stPmV4cHIgPT0gJnN5bS0+cmV2X2RlcC5leHByKSB7DQogICAgKwkJCWZwcmludGYo
c3RkZXJyLCAiJXM6JWQ6XHRzeW1ib2wgJXMgaXMgc2VsZWN0ZWQgYnkgJXNcbiIsDQogICAgKwkJ
CQlwcm9wLT5maWxlLT5uYW1lLCBwcm9wLT5saW5lbm8sDQogICAgKwkJCQlzeW0tPm5hbWUgPyBz
eW0tPm5hbWUgOiAiPGNob2ljZT4iLA0KICAgICsJCQkJbmV4dF9zeW0tPm5hbWUgPyBuZXh0X3N5
bS0+bmFtZSA6ICI8Y2hvaWNlPiIpOw0KICAgICsJCX0gZWxzZSBpZiAoc3RhY2stPmV4cHIgPT0g
JnN5bS0+aW1wbGllZC5leHByKSB7DQogICAgKwkJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6XHRz
eW1ib2wgJXMgaXMgaW1wbGllZCBieSAlc1xuIiwNCiAgICArCQkJCXByb3AtPmZpbGUtPm5hbWUs
IHByb3AtPmxpbmVubywNCiAgICArCQkJCXN5bS0+bmFtZSA/IHN5bS0+bmFtZSA6ICI8Y2hvaWNl
PiIsDQogICAgKwkJCQluZXh0X3N5bS0+bmFtZSA/IG5leHRfc3ltLT5uYW1lIDogIjxjaG9pY2U+
Iik7DQogICAgKwkJfSBlbHNlIGlmIChzdGFjay0+ZXhwcikgew0KICAgICsJCQlmcHJpbnRmKHN0
ZGVyciwgIiVzOiVkOlx0c3ltYm9sICVzICVzIHZhbHVlIGNvbnRhaW5zICVzXG4iLA0KICAgICsJ
CQkJcHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLA0KICAgICsJCQkJc3ltLT5uYW1lID8g
c3ltLT5uYW1lIDogIjxjaG9pY2U+IiwNCiAgICArCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9w
LT50eXBlKSwNCiAgICArCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNo
b2ljZT4iKTsNCiAgICArCQl9IGVsc2Ugew0KICAgICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiVk
Olx0c3ltYm9sICVzICVzIGlzIHZpc2libGUgZGVwZW5kaW5nIG9uICVzXG4iLA0KICAgICsJCQkJ
cHJvcC0+ZmlsZS0+bmFtZSwgcHJvcC0+bGluZW5vLA0KICAgICsJCQkJc3ltLT5uYW1lID8gc3lt
LT5uYW1lIDogIjxjaG9pY2U+IiwNCiAgICArCQkJCXByb3BfZ2V0X3R5cGVfbmFtZShwcm9wLT50
eXBlKSwNCiAgICArCQkJCW5leHRfc3ltLT5uYW1lID8gbmV4dF9zeW0tPm5hbWUgOiAiPGNob2lj
ZT4iKTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKw0KICAgICsJZnByaW50ZihzdGRlcnIsDQog
ICAgKwkJIkZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1lbnRhdGlvbi9rYnVpbGQva2Nv
bmZpZy1sYW5ndWFnZS50eHRcbiINCiAgICArCQkic3Vic2VjdGlvbiBcIktjb25maWcgcmVjdXJz
aXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnNcIlxuIg0KICAgICsJCSJcbiIpOw0KICAgICsNCiAg
ICArCWlmIChjaGVja190b3AgPT0gJmN2X3N0YWNrKQ0KICAgICsJCWRlcF9zdGFja19yZW1vdmUo
KTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19l
eHByX2RlcHMoc3RydWN0IGV4cHIgKmUpDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5
bTsNCiAgICArDQogICAgKwlpZiAoIWUpDQogICAgKwkJcmV0dXJuIE5VTEw7DQogICAgKwlzd2l0
Y2ggKGUtPnR5cGUpIHsNCiAgICArCWNhc2UgRV9PUjoNCiAgICArCWNhc2UgRV9BTkQ6DQogICAg
KwkJc3ltID0gc3ltX2NoZWNrX2V4cHJfZGVwcyhlLT5sZWZ0LmV4cHIpOw0KICAgICsJCWlmIChz
eW0pDQogICAgKwkJCXJldHVybiBzeW07DQogICAgKwkJcmV0dXJuIHN5bV9jaGVja19leHByX2Rl
cHMoZS0+cmlnaHQuZXhwcik7DQogICAgKwljYXNlIEVfTk9UOg0KICAgICsJCXJldHVybiBzeW1f
Y2hlY2tfZXhwcl9kZXBzKGUtPmxlZnQuZXhwcik7DQogICAgKwljYXNlIEVfRVFVQUw6DQogICAg
KwljYXNlIEVfR0VROg0KICAgICsJY2FzZSBFX0dUSDoNCiAgICArCWNhc2UgRV9MRVE6DQogICAg
KwljYXNlIEVfTFRIOg0KICAgICsJY2FzZSBFX1VORVFVQUw6DQogICAgKwkJc3ltID0gc3ltX2No
ZWNrX2RlcHMoZS0+bGVmdC5zeW0pOw0KICAgICsJCWlmIChzeW0pDQogICAgKwkJCXJldHVybiBz
eW07DQogICAgKwkJcmV0dXJuIHN5bV9jaGVja19kZXBzKGUtPnJpZ2h0LnN5bSk7DQogICAgKwlj
YXNlIEVfU1lNQk9MOg0KICAgICsJCXJldHVybiBzeW1fY2hlY2tfZGVwcyhlLT5sZWZ0LnN5bSk7
DQogICAgKwlkZWZhdWx0Og0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJZnByaW50Zihz
dGRlcnIsICJPb3BzISBIb3cgdG8gY2hlY2sgJWQ/XG4iLCBlLT50eXBlKTsNCiAgICArCXJldHVy
biBOVUxMOw0KICAgICt9DQogICAgKw0KICAgICsvKiByZXR1cm4gTlVMTCB3aGVuIGRlcGVuZGVu
Y2llcyBhcmUgT0sgKi8NCiAgICArc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bV9jaGVja19zeW1f
ZGVwcyhzdHJ1Y3Qgc3ltYm9sICpzeW0pDQogICAgK3sNCiAgICArCXN0cnVjdCBzeW1ib2wgKnN5
bTI7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlzdHJ1Y3QgZGVwX3N0YWNr
IHN0YWNrOw0KICAgICsNCiAgICArCWRlcF9zdGFja19pbnNlcnQoJnN0YWNrLCBzeW0pOw0KICAg
ICsNCiAgICArCXN0YWNrLmV4cHIgPSAmc3ltLT5kaXJfZGVwLmV4cHI7DQogICAgKwlzeW0yID0g
c3ltX2NoZWNrX2V4cHJfZGVwcyhzeW0tPmRpcl9kZXAuZXhwcik7DQogICAgKwlpZiAoc3ltMikN
CiAgICArCQlnb3RvIG91dDsNCiAgICArDQogICAgKwlzdGFjay5leHByID0gJnN5bS0+cmV2X2Rl
cC5leHByOw0KICAgICsJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMoc3ltLT5yZXZfZGVwLmV4
cHIpOw0KICAgICsJaWYgKHN5bTIpDQogICAgKwkJZ290byBvdXQ7DQogICAgKw0KICAgICsJc3Rh
Y2suZXhwciA9ICZzeW0tPmltcGxpZWQuZXhwcjsNCiAgICArCXN5bTIgPSBzeW1fY2hlY2tfZXhw
cl9kZXBzKHN5bS0+aW1wbGllZC5leHByKTsNCiAgICArCWlmIChzeW0yKQ0KICAgICsJCWdvdG8g
b3V0Ow0KICAgICsNCiAgICArCXN0YWNrLmV4cHIgPSBOVUxMOw0KICAgICsNCiAgICArCWZvciAo
cHJvcCA9IHN5bS0+cHJvcDsgcHJvcDsgcHJvcCA9IHByb3AtPm5leHQpIHsNCiAgICArCQlpZiAo
cHJvcC0+dHlwZSA9PSBQX0NIT0lDRSB8fCBwcm9wLT50eXBlID09IFBfU0VMRUNUIHx8DQogICAg
KwkJICAgIHByb3AtPnR5cGUgPT0gUF9JTVBMWSkNCiAgICArCQkJY29udGludWU7DQogICAgKwkJ
c3RhY2sucHJvcCA9IHByb3A7DQogICAgKwkJc3ltMiA9IHN5bV9jaGVja19leHByX2RlcHMocHJv
cC0+dmlzaWJsZS5leHByKTsNCiAgICArCQlpZiAoc3ltMikNCiAgICArCQkJYnJlYWs7DQogICAg
KwkJaWYgKHByb3AtPnR5cGUgIT0gUF9ERUZBVUxUIHx8IHN5bV9pc19jaG9pY2Uoc3ltKSkNCiAg
ICArCQkJY29udGludWU7DQogICAgKwkJc3RhY2suZXhwciA9ICZwcm9wLT5leHByOw0KICAgICsJ
CXN5bTIgPSBzeW1fY2hlY2tfZXhwcl9kZXBzKHByb3AtPmV4cHIpOw0KICAgICsJCWlmIChzeW0y
KQ0KICAgICsJCQlicmVhazsNCiAgICArCQlzdGFjay5leHByID0gTlVMTDsNCiAgICArCX0NCiAg
ICArDQogICAgK291dDoNCiAgICArCWRlcF9zdGFja19yZW1vdmUoKTsNCiAgICArDQogICAgKwly
ZXR1cm4gc3ltMjsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5
bV9jaGVja19jaG9pY2VfZGVwcyhzdHJ1Y3Qgc3ltYm9sICpjaG9pY2UpDQogICAgK3sNCiAgICAr
CXN0cnVjdCBzeW1ib2wgKnN5bSwgKnN5bTI7DQogICAgKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7
DQogICAgKwlzdHJ1Y3QgZXhwciAqZTsNCiAgICArCXN0cnVjdCBkZXBfc3RhY2sgc3RhY2s7DQog
ICAgKw0KICAgICsJZGVwX3N0YWNrX2luc2VydCgmc3RhY2ssIGNob2ljZSk7DQogICAgKw0KICAg
ICsJcHJvcCA9IHN5bV9nZXRfY2hvaWNlX3Byb3AoY2hvaWNlKTsNCiAgICArCWV4cHJfbGlzdF9m
b3JfZWFjaF9zeW0ocHJvcC0+ZXhwciwgZSwgc3ltKQ0KICAgICsJCXN5bS0+ZmxhZ3MgfD0gKFNZ
TUJPTF9DSEVDSyB8IFNZTUJPTF9DSEVDS0VEKTsNCiAgICArDQogICAgKwljaG9pY2UtPmZsYWdz
IHw9IChTWU1CT0xfQ0hFQ0sgfCBTWU1CT0xfQ0hFQ0tFRCk7DQogICAgKwlzeW0yID0gc3ltX2No
ZWNrX3N5bV9kZXBzKGNob2ljZSk7DQogICAgKwljaG9pY2UtPmZsYWdzICY9IH5TWU1CT0xfQ0hF
Q0s7DQogICAgKwlpZiAoc3ltMikNCiAgICArCQlnb3RvIG91dDsNCiAgICArDQogICAgKwlleHBy
X2xpc3RfZm9yX2VhY2hfc3ltKHByb3AtPmV4cHIsIGUsIHN5bSkgew0KICAgICsJCXN5bTIgPSBz
eW1fY2hlY2tfc3ltX2RlcHMoc3ltKTsNCiAgICArCQlpZiAoc3ltMikNCiAgICArCQkJYnJlYWs7
DQogICAgKwl9DQogICAgK291dDoNCiAgICArCWV4cHJfbGlzdF9mb3JfZWFjaF9zeW0ocHJvcC0+
ZXhwciwgZSwgc3ltKQ0KICAgICsJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsNCiAgICAr
DQogICAgKwlpZiAoc3ltMiAmJiBzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bTIpICYmDQogICAgKwkg
ICAgcHJvcF9nZXRfc3ltYm9sKHN5bV9nZXRfY2hvaWNlX3Byb3Aoc3ltMikpID09IGNob2ljZSkN
CiAgICArCQlzeW0yID0gY2hvaWNlOw0KICAgICsNCiAgICArCWRlcF9zdGFja19yZW1vdmUoKTsN
CiAgICArDQogICAgKwlyZXR1cm4gc3ltMjsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHN5
bWJvbCAqc3ltX2NoZWNrX2RlcHMoc3RydWN0IHN5bWJvbCAqc3ltKQ0KICAgICt7DQogICAgKwlz
dHJ1Y3Qgc3ltYm9sICpzeW0yOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsN
CiAgICArCWlmIChzeW0tPmZsYWdzICYgU1lNQk9MX0NIRUNLKSB7DQogICAgKwkJc3ltX2NoZWNr
X3ByaW50X3JlY3Vyc2l2ZShzeW0pOw0KICAgICsJCXJldHVybiBzeW07DQogICAgKwl9DQogICAg
KwlpZiAoc3ltLT5mbGFncyAmIFNZTUJPTF9DSEVDS0VEKQ0KICAgICsJCXJldHVybiBOVUxMOw0K
ICAgICsNCiAgICArCWlmIChzeW1faXNfY2hvaWNlX3ZhbHVlKHN5bSkpIHsNCiAgICArCQlzdHJ1
Y3QgZGVwX3N0YWNrIHN0YWNrOw0KICAgICsNCiAgICArCQkvKiBmb3IgY2hvaWNlIGdyb3VwcyBz
dGFydCB0aGUgY2hlY2sgd2l0aCBtYWluIGNob2ljZSBzeW1ib2wgKi8NCiAgICArCQlkZXBfc3Rh
Y2tfaW5zZXJ0KCZzdGFjaywgc3ltKTsNCiAgICArCQlwcm9wID0gc3ltX2dldF9jaG9pY2VfcHJv
cChzeW0pOw0KICAgICsJCXN5bTIgPSBzeW1fY2hlY2tfZGVwcyhwcm9wX2dldF9zeW1ib2wocHJv
cCkpOw0KICAgICsJCWRlcF9zdGFja19yZW1vdmUoKTsNCiAgICArCX0gZWxzZSBpZiAoc3ltX2lz
X2Nob2ljZShzeW0pKSB7DQogICAgKwkJc3ltMiA9IHN5bV9jaGVja19jaG9pY2VfZGVwcyhzeW0p
Ow0KICAgICsJfSBlbHNlIHsNCiAgICArCQlzeW0tPmZsYWdzIHw9IChTWU1CT0xfQ0hFQ0sgfCBT
WU1CT0xfQ0hFQ0tFRCk7DQogICAgKwkJc3ltMiA9IHN5bV9jaGVja19zeW1fZGVwcyhzeW0pOw0K
ICAgICsJCXN5bS0+ZmxhZ3MgJj0gflNZTUJPTF9DSEVDSzsNCiAgICArCX0NCiAgICArDQogICAg
KwlyZXR1cm4gc3ltMjsNCiAgICArfQ0KICAgICsNCiAgICArc3RydWN0IHByb3BlcnR5ICpwcm9w
X2FsbG9jKGVudW0gcHJvcF90eXBlIHR5cGUsIHN0cnVjdCBzeW1ib2wgKnN5bSkNCiAgICArew0K
ICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICoqcHJv
cHA7DQogICAgKw0KICAgICsJcHJvcCA9IHhtYWxsb2Moc2l6ZW9mKCpwcm9wKSk7DQogICAgKwlt
ZW1zZXQocHJvcCwgMCwgc2l6ZW9mKCpwcm9wKSk7DQogICAgKwlwcm9wLT50eXBlID0gdHlwZTsN
CiAgICArCXByb3AtPnN5bSA9IHN5bTsNCiAgICArCXByb3AtPmZpbGUgPSBjdXJyZW50X2ZpbGU7
DQogICAgKwlwcm9wLT5saW5lbm8gPSB6Y29uZl9saW5lbm8oKTsNCiAgICArDQogICAgKwkvKiBh
cHBlbmQgcHJvcGVydHkgdG8gdGhlIHByb3AgbGlzdCBvZiBzeW1ib2wgKi8NCiAgICArCWlmIChz
eW0pIHsNCiAgICArCQlmb3IgKHByb3BwID0gJnN5bS0+cHJvcDsgKnByb3BwOyBwcm9wcCA9ICYo
KnByb3BwKS0+bmV4dCkNCiAgICArCQkJOw0KICAgICsJCSpwcm9wcCA9IHByb3A7DQogICAgKwl9
DQogICAgKw0KICAgICsJcmV0dXJuIHByb3A7DQogICAgK30NCiAgICArDQogICAgK3N0cnVjdCBz
eW1ib2wgKnByb3BfZ2V0X3N5bWJvbChzdHJ1Y3QgcHJvcGVydHkgKnByb3ApDQogICAgK3sNCiAg
ICArCWlmIChwcm9wLT5leHByICYmIChwcm9wLT5leHByLT50eXBlID09IEVfU1lNQk9MIHx8DQog
ICAgKwkJCSAgIHByb3AtPmV4cHItPnR5cGUgPT0gRV9MSVNUKSkNCiAgICArCQlyZXR1cm4gcHJv
cC0+ZXhwci0+bGVmdC5zeW07DQogICAgKwlyZXR1cm4gTlVMTDsNCiAgICArfQ0KICAgICsNCiAg
ICArY29uc3QgY2hhciAqcHJvcF9nZXRfdHlwZV9uYW1lKGVudW0gcHJvcF90eXBlIHR5cGUpDQog
ICAgK3sNCiAgICArCXN3aXRjaCAodHlwZSkgew0KICAgICsJY2FzZSBQX1BST01QVDoNCiAgICAr
CQlyZXR1cm4gInByb21wdCI7DQogICAgKwljYXNlIFBfQ09NTUVOVDoNCiAgICArCQlyZXR1cm4g
ImNvbW1lbnQiOw0KICAgICsJY2FzZSBQX01FTlU6DQogICAgKwkJcmV0dXJuICJtZW51IjsNCiAg
ICArCWNhc2UgUF9ERUZBVUxUOg0KICAgICsJCXJldHVybiAiZGVmYXVsdCI7DQogICAgKwljYXNl
IFBfQ0hPSUNFOg0KICAgICsJCXJldHVybiAiY2hvaWNlIjsNCiAgICArCWNhc2UgUF9TRUxFQ1Q6
DQogICAgKwkJcmV0dXJuICJzZWxlY3QiOw0KICAgICsJY2FzZSBQX0lNUExZOg0KICAgICsJCXJl
dHVybiAiaW1wbHkiOw0KICAgICsJY2FzZSBQX1JBTkdFOg0KICAgICsJCXJldHVybiAicmFuZ2Ui
Ow0KICAgICsJY2FzZSBQX1NZTUJPTDoNCiAgICArCQlyZXR1cm4gInN5bWJvbCI7DQogICAgKwlj
YXNlIFBfVU5LTk9XTjoNCiAgICArCQlicmVhazsNCiAgICArCX0NCiAgICArCXJldHVybiAidW5r
bm93biI7DQogICAgK30NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1
dG9fc3VibWVudS9LY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9L
Y29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5iMjA3
NjFlDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9h
dXRvX3N1Ym1lbnUvS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNTIgQEANCiAgICArIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArY29uZmlnIEENCiAgICArCWJv
b2wgIkEiDQogICAgKwlkZWZhdWx0IHkNCiAgICArDQogICAgK2NvbmZpZyBBMA0KICAgICsJYm9v
bCAiQTAiDQogICAgKwlkZXBlbmRzIG9uIEENCiAgICArCWRlZmF1bHQgeQ0KICAgICsJaGVscA0K
ICAgICsJICBUaGlzIGRlcGVuZHMgb24gQSwgc28gc2hvdWxkIGJlIGEgc3VibWVudSBvZiBBLg0K
ICAgICsNCiAgICArY29uZmlnIEEwXzANCiAgICArCWJvb2wgIkExXzAiDQogICAgKwlkZXBlbmRz
IG9uIEEwDQogICAgKwloZWxwDQogICAgKwkgIFN1Ym1lbnVzIGFyZSBjcmVhdGVkIHJlY3Vyc2l2
ZWx5Lg0KICAgICsJICBUaGlzIHNob3VsZCBiZSBhIHN1Ym1lbnUgb2YgQTAuDQogICAgKw0KICAg
ICtjb25maWcgQTENCiAgICArCWJvb2wgIkExIg0KICAgICsJZGVwZW5kcyBvbiBBDQogICAgKwlk
ZWZhdWx0IHkNCiAgICArCWhlbHANCiAgICArCSAgVGhpcyBzaG91bGQgbGluZSB1cCB3aXRoIEEw
Lg0KICAgICsNCiAgICArY2hvaWNlDQogICAgKwlwcm9tcHQgImNob2ljZSINCiAgICArCWRlcGVu
ZHMgb24gQTENCiAgICArCWhlbHANCiAgICArCSAgQ2hvaWNlIHNob3VsZCBiZWNvbWUgYSBzdWJt
ZW51IGFzIHdlbGwuDQogICAgKw0KICAgICtjb25maWcgQTFfMA0KICAgICsJYm9vbCAiQTFfMCIN
CiAgICArDQogICAgK2NvbmZpZyBBMV8xDQogICAgKwlib29sICJBMV8xIg0KICAgICsNCiAgICAr
ZW5kY2hvaWNlDQogICAgKw0KICAgICtjb25maWcgQg0KICAgICsJYm9vbCAiQiINCiAgICArCWhl
bHANCiAgICArCSAgVGhpcyBpcyBpbmRlcGVuZGVudCBvZiBBLg0KICAgICsNCiAgICArY29uZmln
IEMNCiAgICArCWJvb2wgIkMiDQogICAgKwlkZXBlbmRzIG9uIEENCiAgICArCWhlbHANCiAgICAr
CSAgVGhpcyBkZXBlbmRzIG9uIEEsIGJ1dCBub3QgYSBjb25zZWN1dGl2ZSBpdGVtLCBzbyBjYW4v
c2hvdWxkIG5vdA0KICAgICsJICBiZSBhIHN1Ym1lbnUuDQogICAgZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25m
aWcvdGVzdHMvYXV0b19zdWJtZW51L19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICBpbmRleCAwMDAwMDAwLi4yNWFiZDkyDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsr
KyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9hdXRvX3N1Ym1lbnUvX19pbml0X18ucHkNCiAgICBA
QCAtMCwwICsxLDEzIEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN
CiAgICArIiIiDQogICAgK0NyZWF0ZSBzdWJtZW51IGZvciBzeW1ib2xzIHRoYXQgZGVwZW5kIG9u
IHRoZSBwcmVjZWRpbmcgb25lLg0KICAgICsNCiAgICArSWYgYSBzeW1ib2xzIGhhcyBkZXBlbmRl
bmN5IG9uIHRoZSBwcmVjZWRpbmcgc3ltYm9sLCB0aGUgbWVudSBlbnRyeQ0KICAgICtzaG91bGQg
YmVjb21lIHRoZSBzdWJtZW51IG9mIHRoZSBwcmVjZWRpbmcgb25lLCBhbmQgZGlzcGxheWVkIHdp
dGgNCiAgICArZGVlcGVyIGluZGVudGF0aW9uLg0KICAgICsiIiINCiAgICArDQogICAgKw0KICAg
ICtkZWYgdGVzdChjb25mKToNCiAgICArICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09
IDANCiAgICArICAgIGFzc2VydCBjb25mLnN0ZG91dF9jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0
JykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2F1dG9fc3VibWVudS9l
eHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvYXV0b19zdWJtZW51L2V4cGVj
dGVkX3N0ZG91dA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
YmY1MjM2Zg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVz
dHMvYXV0b19zdWJtZW51L2V4cGVjdGVkX3N0ZG91dA0KICAgIEBAIC0wLDAgKzEsMTAgQEANCiAg
ICArQSAoQSkgW1kvbi8/XSAoTkVXKSANCiAgICArICBBMCAoQTApIFtZL24vP10gKE5FVykgDQog
ICAgKyAgICBBMV8wIChBMF8wKSBbTi95Lz9dIChORVcpIA0KICAgICsgIEExIChBMSkgW1kvbi8/
XSAoTkVXKSANCiAgICArICAgIGNob2ljZQ0KICAgICsgICAgPiAxLiBBMV8wIChBMV8wKSAoTkVX
KQ0KICAgICsgICAgICAyLiBBMV8xIChBMV8xKSAoTkVXKQ0KICAgICsgICAgY2hvaWNlWzEtMj9d
OiANCiAgICArQiAoQikgW04veS8/XSAoTkVXKSANCiAgICArQyAoQykgW04veS8/XSAoTkVXKSAN
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9LY29uZmlnIGIv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9LY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5hNDEyMjA1DQogICAgLS0tIC9kZXYvbnVsbA0KICAg
ICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvS2NvbmZpZw0KICAgIEBAIC0wLDAg
KzEsNTYgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsN
CiAgICArY29uZmlnIE1PRFVMRVMNCiAgICArCWJvb2wgIkVuYWJsZSBsb2FkYWJsZSBtb2R1bGUg
c3VwcG9ydCINCiAgICArCW9wdGlvbiBtb2R1bGVzDQogICAgKwlkZWZhdWx0IHkNCiAgICArDQog
ICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0ICJib29sZWFuIGNob2ljZSINCiAgICArCWRlZmF1bHQg
Qk9PTF9DSE9JQ0UxDQogICAgKw0KICAgICtjb25maWcgQk9PTF9DSE9JQ0UwDQogICAgKwlib29s
ICJjaG9pY2UgMCINCiAgICArDQogICAgK2NvbmZpZyBCT09MX0NIT0lDRTENCiAgICArCWJvb2wg
ImNob2ljZSAxIg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgKw0KICAgICtjaG9pY2UNCiAg
ICArCXByb21wdCAib3B0aW9uYWwgYm9vbGVhbiBjaG9pY2UiDQogICAgKwlvcHRpb25hbA0KICAg
ICsJZGVmYXVsdCBPUFRfQk9PTF9DSE9JQ0UxDQogICAgKw0KICAgICtjb25maWcgT1BUX0JPT0xf
Q0hPSUNFMA0KICAgICsJYm9vbCAiY2hvaWNlIDAiDQogICAgKw0KICAgICtjb25maWcgT1BUX0JP
T0xfQ0hPSUNFMQ0KICAgICsJYm9vbCAiY2hvaWNlIDEiDQogICAgKw0KICAgICtlbmRjaG9pY2UN
CiAgICArDQogICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0ICJ0cmlzdGF0ZSBjaG9pY2UiDQogICAg
KwlkZWZhdWx0IFRSSV9DSE9JQ0UxDQogICAgKw0KICAgICtjb25maWcgVFJJX0NIT0lDRTANCiAg
ICArCXRyaXN0YXRlICJjaG9pY2UgMCINCiAgICArDQogICAgK2NvbmZpZyBUUklfQ0hPSUNFMQ0K
ICAgICsJdHJpc3RhdGUgImNob2ljZSAxIg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgKw0K
ICAgICtjaG9pY2UNCiAgICArCXByb21wdCAib3B0aW9uYWwgdHJpc3RhdGUgY2hvaWNlIg0KICAg
ICsJb3B0aW9uYWwNCiAgICArCWRlZmF1bHQgT1BUX1RSSV9DSE9JQ0UxDQogICAgKw0KICAgICtj
b25maWcgT1BUX1RSSV9DSE9JQ0UwDQogICAgKwl0cmlzdGF0ZSAiY2hvaWNlIDAiDQogICAgKw0K
ICAgICtjb25maWcgT1BUX1RSSV9DSE9JQ0UxDQogICAgKwl0cmlzdGF0ZSAiY2hvaWNlIDEiDQog
ICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Nob2ljZS9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvX19p
bml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjQz
MThmY2UNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2Nob2ljZS9fX2luaXRfXy5weQ0KICAgIEBAIC0wLDAgKzEsNDEgQEANCiAgICArIyBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsiIiINCiAgICArQmFzaWMgY2hvaWNlIHRl
c3RzLg0KICAgICsNCiAgICArVGhlIGhhbmRsaW5nIG9mICdjaG9pY2UnIGlzIGEgYml0IGNvbXBs
aWNhdGVkIHBhcnQgaW4gS2NvbmZpZy4NCiAgICArDQogICAgK1RoZSBiZWhhdmlvciBvZiAneScg
Y2hvaWNlIGlzIGludHVpdGl2ZS4gIElmIGNob2ljZSB2YWx1ZXMgYXJlIHRyaXN0YXRlLA0KICAg
ICt0aGUgY2hvaWNlIGNhbiBiZSAnbScgd2hlcmUgZWFjaCB2YWx1ZSBjYW4gYmUgZW5hYmxlZCBp
bmRlcGVuZGVudGx5Lg0KICAgICtBbHNvLCBpZiBhIGNob2ljZSBpcyBtYXJrZWQgYXMgJ29wdGlv
bmFsJywgdGhlIHdob2xlIGNob2ljZSBjYW4gYmUNCiAgICAraW52aXNpYmxlLg0KICAgICsiIiIN
CiAgICArDQogICAgKw0KICAgICtkZWYgdGVzdF9vbGRhc2swKGNvbmYpOg0KICAgICsgICAgYXNz
ZXJ0IGNvbmYub2xkYXNrY29uZmlnKCkgPT0gMA0KICAgICsgICAgYXNzZXJ0IGNvbmYuc3Rkb3V0
X2NvbnRhaW5zKCdvbGRhc2swX2V4cGVjdGVkX3N0ZG91dCcpDQogICAgKw0KICAgICsNCiAgICAr
ZGVmIHRlc3Rfb2xkYXNrMShjb25mKToNCiAgICArICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZp
Zygnb2xkYXNrMV9jb25maWcnKSA9PSAwDQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRvdXRfY29u
dGFpbnMoJ29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0JykNCiAgICArDQogICAgKw0KICAgICtkZWYg
dGVzdF9hbGx5ZXMoY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5hbGx5ZXNjb25maWcoKSA9
PSAwDQogICAgKyAgICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbHllc19leHBlY3Rl
ZF9jb25maWcnKQ0KICAgICsNCiAgICArDQogICAgK2RlZiB0ZXN0X2FsbG1vZChjb25mKToNCiAg
ICArICAgIGFzc2VydCBjb25mLmFsbG1vZGNvbmZpZygpID09IDANCiAgICArICAgIGFzc2VydCBj
b25mLmNvbmZpZ19jb250YWlucygnYWxsbW9kX2V4cGVjdGVkX2NvbmZpZycpDQogICAgKw0KICAg
ICsNCiAgICArZGVmIHRlc3RfYWxsbm8oY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5hbGxu
b2NvbmZpZygpID09IDANCiAgICArICAgIGFzc2VydCBjb25mLmNvbmZpZ19jb250YWlucygnYWxs
bm9fZXhwZWN0ZWRfY29uZmlnJykNCiAgICArDQogICAgKw0KICAgICtkZWYgdGVzdF9hbGxkZWYo
Y29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5hbGxkZWZjb25maWcoKSA9PSAwDQogICAgKyAg
ICBhc3NlcnQgY29uZi5jb25maWdfY29udGFpbnMoJ2FsbGRlZl9leHBlY3RlZF9jb25maWcnKQ0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBl
Y3RlZF9jb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbGRlZl9leHBlY3Rl
ZF9jb25maWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjdh
NzU0YmYNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2Nob2ljZS9hbGxkZWZfZXhwZWN0ZWRfY29uZmlnDQogICAgQEAgLTAsMCArMSw1IEBADQogICAg
K0NPTkZJR19NT0RVTEVTPXkNCiAgICArIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQN
CiAgICArQ09ORklHX0JPT0xfQ0hPSUNFMT15DQogICAgKyMgQ09ORklHX1RSSV9DSE9JQ0UwIGlz
IG5vdCBzZXQNCiAgICArIyBDT05GSUdfVFJJX0NIT0lDRTEgaXMgbm90IHNldA0KICAgIGRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25m
aWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG1vZF9leHBlY3RlZF9jb25maWcN
CiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmYxZjVkY2QNCiAg
ICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9h
bGxtb2RfZXhwZWN0ZWRfY29uZmlnDQogICAgQEAgLTAsMCArMSw5IEBADQogICAgK0NPTkZJR19N
T0RVTEVTPXkNCiAgICArIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQNCiAgICArQ09O
RklHX0JPT0xfQ0hPSUNFMT15DQogICAgKyMgQ09ORklHX09QVF9CT09MX0NIT0lDRTAgaXMgbm90
IHNldA0KICAgICtDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMT15DQogICAgK0NPTkZJR19UUklfQ0hP
SUNFMD1tDQogICAgK0NPTkZJR19UUklfQ0hPSUNFMT1tDQogICAgK0NPTkZJR19PUFRfVFJJX0NI
T0lDRTA9bQ0KICAgICtDT05GSUdfT1BUX1RSSV9DSE9JQ0UxPW0NCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9hbGxub19leHBlY3RlZF9jb25maWcgYi9zdXBw
b3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVjdGVkX2NvbmZpZw0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYjg4ZWU3YQ0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL2FsbG5vX2V4cGVj
dGVkX2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNSBAQA0KICAgICsjIENPTkZJR19NT0RVTEVTIGlz
IG5vdCBzZXQNCiAgICArIyBDT05GSUdfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQNCiAgICArQ09O
RklHX0JPT0xfQ0hPSUNFMT15DQogICAgKyMgQ09ORklHX1RSSV9DSE9JQ0UwIGlzIG5vdCBzZXQN
CiAgICArQ09ORklHX1RSSV9DSE9JQ0UxPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2Nob2ljZS9hbGx5ZXNfZXhwZWN0ZWRfY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5lNWEwNjJhDQogICAgLS0tIC9kZXYvbnVsbA0KICAg
ICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2UvYWxseWVzX2V4cGVjdGVkX2NvbmZp
Zw0KICAgIEBAIC0wLDAgKzEsOSBAQA0KICAgICtDT05GSUdfTU9EVUxFUz15DQogICAgKyMgQ09O
RklHX0JPT0xfQ0hPSUNFMCBpcyBub3Qgc2V0DQogICAgK0NPTkZJR19CT09MX0NIT0lDRTE9eQ0K
ICAgICsjIENPTkZJR19PUFRfQk9PTF9DSE9JQ0UwIGlzIG5vdCBzZXQNCiAgICArQ09ORklHX09Q
VF9CT09MX0NIT0lDRTE9eQ0KICAgICsjIENPTkZJR19UUklfQ0hPSUNFMCBpcyBub3Qgc2V0DQog
ICAgK0NPTkZJR19UUklfQ0hPSUNFMT15DQogICAgKyMgQ09ORklHX09QVF9UUklfQ0hPSUNFMCBp
cyBub3Qgc2V0DQogICAgK0NPTkZJR19PUFRfVFJJX0NIT0lDRTE9eQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazBfZXhwZWN0ZWRfc3Rkb3V0IGIv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2swX2V4cGVjdGVkX3N0ZG91dA0KICAg
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYjI1MWJiYQ0KICAgIC0t
LSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFz
azBfZXhwZWN0ZWRfc3Rkb3V0DQogICAgQEAgLTAsMCArMSwxMCBAQA0KICAgICtFbmFibGUgbG9h
ZGFibGUgbW9kdWxlIHN1cHBvcnQgKE1PRFVMRVMpIFtZL24vP10gKE5FVykgDQogICAgK2Jvb2xl
YW4gY2hvaWNlDQogICAgKyAgMS4gY2hvaWNlIDAgKEJPT0xfQ0hPSUNFMCkgKE5FVykNCiAgICAr
PiAyLiBjaG9pY2UgMSAoQk9PTF9DSE9JQ0UxKSAoTkVXKQ0KICAgICtjaG9pY2VbMS0yP106IA0K
ICAgICtvcHRpb25hbCBib29sZWFuIGNob2ljZSBbTi95Lz9dIChORVcpIA0KICAgICt0cmlzdGF0
ZSBjaG9pY2UgW00veS8/XSAoTkVXKSANCiAgICArICBjaG9pY2UgMCAoVFJJX0NIT0lDRTApIFtO
L20vP10gKE5FVykgDQogICAgKyAgY2hvaWNlIDEgKFRSSV9DSE9JQ0UxKSBbTi9tLz9dIChORVcp
IA0KICAgICtvcHRpb25hbCB0cmlzdGF0ZSBjaG9pY2UgW04vbS95Lz9dIChORVcpIA0KICAgIGRp
ZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmlnIGIv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZS9vbGRhc2sxX2NvbmZpZw0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYjY3YmZlMw0KICAgIC0tLSAvZGV2L251
bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfY29uZmln
DQogICAgQEAgLTAsMCArMSwyIEBADQogICAgKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldA0K
ICAgICtDT05GSUdfT1BUX0JPT0xfQ0hPSUNFMD15DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tj
b25maWcvdGVzdHMvY2hvaWNlL29sZGFzazFfZXhwZWN0ZWRfc3Rkb3V0DQogICAgbmV3IGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5jMjEyNWU5DQogICAgLS0tIC9kZXYvbnVs
bA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2Uvb2xkYXNrMV9leHBlY3Rl
ZF9zdGRvdXQNCiAgICBAQCAtMCwwICsxLDE1IEBADQogICAgK0VuYWJsZSBsb2FkYWJsZSBtb2R1
bGUgc3VwcG9ydCAoTU9EVUxFUykgW04veS8/XSANCiAgICArYm9vbGVhbiBjaG9pY2UNCiAgICAr
ICAxLiBjaG9pY2UgMCAoQk9PTF9DSE9JQ0UwKSAoTkVXKQ0KICAgICs+IDIuIGNob2ljZSAxIChC
T09MX0NIT0lDRTEpIChORVcpDQogICAgK2Nob2ljZVsxLTI/XTogDQogICAgK29wdGlvbmFsIGJv
b2xlYW4gY2hvaWNlIFtZL24vP10gKE5FVykgDQogICAgK29wdGlvbmFsIGJvb2xlYW4gY2hvaWNl
DQogICAgKz4gMS4gY2hvaWNlIDAgKE9QVF9CT09MX0NIT0lDRTApDQogICAgKyAgMi4gY2hvaWNl
IDEgKE9QVF9CT09MX0NIT0lDRTEpIChORVcpDQogICAgK2Nob2ljZVsxLTI/XTogDQogICAgK3Ry
aXN0YXRlIGNob2ljZQ0KICAgICsgIDEuIGNob2ljZSAwIChUUklfQ0hPSUNFMCkgKE5FVykNCiAg
ICArPiAyLiBjaG9pY2UgMSAoVFJJX0NIT0lDRTEpIChORVcpDQogICAgK2Nob2ljZVsxLTI/XTog
DQogICAgK29wdGlvbmFsIHRyaXN0YXRlIGNob2ljZSBbTi95Lz9dIA0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvS2NvbmZpZyBi
L3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9LY29uZmlnDQog
ICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi43MTA2YzI2DQogICAg
LS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFs
dWVfd2l0aF9tX2RlcC9LY29uZmlnDQogICAgQEAgLTAsMCArMSwyMSBAQA0KICAgICsjIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKw0KICAgICtjb25maWcgTU9EVUxFUw0K
ICAgICsJZGVmX2Jvb2wgeQ0KICAgICsJb3B0aW9uIG1vZHVsZXMNCiAgICArDQogICAgK2NvbmZp
ZyBERVANCiAgICArCXRyaXN0YXRlDQogICAgKwlkZWZhdWx0IG0NCiAgICArDQogICAgK2Nob2lj
ZQ0KICAgICsJcHJvbXB0ICJUcmlzdGF0ZSBDaG9pY2UiDQogICAgKw0KICAgICtjb25maWcgQ0hP
SUNFMA0KICAgICsJdHJpc3RhdGUgIkNob2ljZSAwIg0KICAgICsNCiAgICArY29uZmlnIENIT0lD
RTENCiAgICArCXRyaXN0YXRlICJDaG9pY2UgMSINCiAgICArCWRlcGVuZHMgb24gREVQDQogICAg
Kw0KICAgICtlbmRjaG9pY2UNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4wNzViNGUwDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9f
X2luaXRfXy5weQ0KICAgIEBAIC0wLDAgKzEsMTYgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogR1BMLTIuMA0KICAgICsiIiINCiAgICArSGlkZSB0cmlzdGF0ZSBjaG9pY2UgdmFs
dWVzIHdpdGggbW9kIGRlcGVuZGVuY3kgaW4geSBjaG9pY2UuDQogICAgKw0KICAgICtJZiB0cmlz
dGF0ZSBjaG9pY2UgdmFsdWVzIGRlcGVuZCBvbiBzeW1ib2xzIHNldCB0byAnbScsIHRoZXkgc2hv
dWxkIGJlDQogICAgK2hpZGRlbiB3aGVuIHRoZSBjaG9pY2UgY29udGFpbmluZyB0aGVtIGlzIGNo
YW5nZWQgZnJvbSAnbScgdG8gJ3knDQogICAgKyhpLmUuIGV4Y2x1c2l2ZSBjaG9pY2UpLg0KICAg
ICsNCiAgICArUmVsYXRlZCBMaW51eCBjb21taXQ6IGZhNjRlNWY2YTM1ZWZkNWU3N2Q2MzkxMjVk
OTczMDc3Y2E1MDYwNzQNCiAgICArIiIiDQogICAgKw0KICAgICsNCiAgICArZGVmIHRlc3QoY29u
Zik6DQogICAgKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoJ2NvbmZpZycsICd5JykgPT0g
MA0KICAgICsgICAgYXNzZXJ0IGNvbmYuY29uZmlnX2NvbnRhaW5zKCdleHBlY3RlZF9jb25maWcn
KQ0KICAgICsgICAgYXNzZXJ0IGNvbmYuc3Rkb3V0X2NvbnRhaW5zKCdleHBlY3RlZF9zdGRvdXQn
KQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dp
dGhfbV9kZXAvY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRo
X21fZGVwL2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MC4uM2ExMjZiNw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvY29uZmlnDQogICAgQEAgLTAsMCArMSwyIEBA
DQogICAgK0NPTkZJR19DSE9JQ0UwPW0NCiAgICArQ09ORklHX0NIT0lDRTE9bQ0KICAgIGRpZmYg
LS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhw
ZWN0ZWRfY29uZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21f
ZGVwL2V4cGVjdGVkX2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
MDAwMDAwMC4uNGQwN2I0NA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tj
b25maWcvdGVzdHMvY2hvaWNlX3ZhbHVlX3dpdGhfbV9kZXAvZXhwZWN0ZWRfY29uZmlnDQogICAg
QEAgLTAsMCArMSwzIEBADQogICAgK0NPTkZJR19NT0RVTEVTPXkNCiAgICArQ09ORklHX0RFUD1t
DQogICAgK0NPTkZJR19DSE9JQ0UwPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
L3Rlc3RzL2Nob2ljZV92YWx1ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9jaG9pY2VfdmFsdWVfd2l0aF9tX2RlcC9leHBlY3RlZF9zdGRvdXQNCiAg
ICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjJiNTBhYjYNCiAgICAt
LS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Nob2ljZV92YWx1
ZV93aXRoX21fZGVwL2V4cGVjdGVkX3N0ZG91dA0KICAgIEBAIC0wLDAgKzEsNCBAQA0KICAgICtU
cmlzdGF0ZSBDaG9pY2UgW00veS8/XSB5DQogICAgK1RyaXN0YXRlIENob2ljZQ0KICAgICs+IDEu
IENob2ljZSAwIChDSE9JQ0UwKQ0KICAgICtjaG9pY2VbMV06IDENCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL2NvbmZ0ZXN0LnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2NvbmZ0ZXN0LnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li4wMzQ1ZWY2DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90
ZXN0cy9jb25mdGVzdC5weQ0KICAgIEBAIC0wLDAgKzEsMjkxIEBADQogICAgKyMgU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArIw0KICAgICsjIENvcHlyaWdodCAoQykgMjAx
OCBNYXNhaGlybyBZYW1hZGEgPHlhbWFkYS5tYXNhaGlyb0Bzb2Npb25leHQuY29tPg0KICAgICsj
DQogICAgKw0KICAgICsiIiINCiAgICArS2NvbmZpZyB1bml0IHRlc3RpbmcgZnJhbWV3b3JrLg0K
ICAgICsNCiAgICArVGhpcyBwcm92aWRlcyBmaXh0dXJlIGZ1bmN0aW9ucyBjb21tb25seSB1c2Vk
IGZyb20gdGVzdCBmaWxlcy4NCiAgICArIiIiDQogICAgKw0KICAgICtpbXBvcnQgb3MNCiAgICAr
aW1wb3J0IHB5dGVzdA0KICAgICtpbXBvcnQgc2h1dGlsDQogICAgK2ltcG9ydCBzdWJwcm9jZXNz
DQogICAgK2ltcG9ydCB0ZW1wZmlsZQ0KICAgICsNCiAgICArQ09ORl9QQVRIID0gb3MucGF0aC5h
YnNwYXRoKG9zLnBhdGguam9pbignc2NyaXB0cycsICdrY29uZmlnJywgJ2NvbmYnKSkNCiAgICAr
DQogICAgKw0KICAgICtjbGFzcyBDb25mOg0KICAgICsgICAgIiIiS2NvbmZpZyBydW5uZXIgYW5k
IHJlc3VsdCBjaGVja2VyLg0KICAgICsNCiAgICArICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgbWV0
aG9kcyB0byBydW4gdGV4dC1iYXNlZCBpbnRlcmZhY2Ugb2YgS2NvbmZpZw0KICAgICsgICAgKHNj
cmlwdHMva2NvbmZpZy9jb25mKSBhbmQgcmV0cmlldmUgdGhlIHJlc3VsdGVkIGNvbmZpZ3VyYXRp
b24sDQogICAgKyAgICBzdGRvdXQsIGFuZCBzdGRlcnIuICBJdCBhbHNvIHByb3ZpZGVzIG1ldGhv
ZHMgdG8gY29tcGFyZSB0aG9zZQ0KICAgICsgICAgcmVzdWx0cyB3aXRoIGV4cGVjdGF0aW9ucy4N
CiAgICArICAgICIiIg0KICAgICsNCiAgICArICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXF1ZXN0
KToNCiAgICArICAgICAgICAiIiJDcmVhdGUgYSBuZXcgQ29uZiBpbnN0YW5jZS4NCiAgICArDQog
ICAgKyAgICAgICAgcmVxdWVzdDogb2JqZWN0IHRvIGludHJvc3BlY3QgdGhlIHJlcXVlc3Rpbmcg
dGVzdCBtb2R1bGUNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICAjIHRoZSBkaXJlY3Rv
cnkgb2YgdGhlIHRlc3QgYmVpbmcgcnVuDQogICAgKyAgICAgICAgc2VsZi5fdGVzdF9kaXIgPSBv
cy5wYXRoLmRpcm5hbWUoc3RyKHJlcXVlc3QuZnNwYXRoKSkNCiAgICArDQogICAgKyAgICAjIHJ1
bm5lcnMNCiAgICArICAgIGRlZiBfcnVuX2NvbmYoc2VsZiwgbW9kZSwgZG90X2NvbmZpZz1Ob25l
LCBvdXRfZmlsZT0nLmNvbmZpZycsDQogICAgKyAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZl
PUZhbHNlLCBpbl9rZXlzPU5vbmUsIGV4dHJhX2Vudj17fSk6DQogICAgKyAgICAgICAgIiIiUnVu
IHRleHQtYmFzZWQgS2NvbmZpZyBleGVjdXRhYmxlIGFuZCBzYXZlIHRoZSByZXN1bHQuDQogICAg
Kw0KICAgICsgICAgICAgIG1vZGU6IGlucHV0IG1vZGUgb3B0aW9uICgtLW9sZGFza2NvbmZpZywg
LS1kZWZjb25maWc9PGZpbGU+IGV0Yy4pDQogICAgKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZp
ZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlDQogICAgKyAgICAgICAgb3V0X2Zp
bGU6IGZpbGUgbmFtZSB0byBjb250YWluIHRoZSBvdXRwdXQgY29uZmlnIGRhdGENCiAgICArICAg
ICAgICBpbnRlcmFjdGl2ZTogZmxhZyB0byBzcGVjaWZ5IHRoZSBpbnRlcmFjdGl2ZSBtb2RlDQog
ICAgKyAgICAgICAgaW5fa2V5czoga2V5IGlucHV0cyBmb3IgaW50ZXJhY3RpdmUgbW9kZXMNCiAg
ICArICAgICAgICBleHRyYV9lbnY6IGFkZGl0aW9uYWwgZW52aXJvbm1lbnRzDQogICAgKyAgICAg
ICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAg
ICsgICAgICAgICIiIg0KICAgICsgICAgICAgIGNvbW1hbmQgPSBbQ09ORl9QQVRILCBtb2RlLCAn
S2NvbmZpZyddDQogICAgKw0KICAgICsgICAgICAgICMgT3ZlcnJpZGUgJ3NyY3RyZWUnIGVudmly
b25tZW50IHRvIG1ha2UgdGhlIHRlc3QgYXMgdGhlIHRvcCBkaXJlY3RvcnkNCiAgICArICAgICAg
ICBleHRyYV9lbnZbJ3NyY3RyZWUnXSA9IHNlbGYuX3Rlc3RfZGlyDQogICAgKw0KICAgICsgICAg
ICAgICMgUnVuIEtjb25maWcgaW4gYSB0ZW1wb3JhcnkgZGlyZWN0b3J5Lg0KICAgICsgICAgICAg
ICMgVGhpcyBkaXJlY3RvcnkgaXMgYXV0b21hdGljYWxseSByZW1vdmVkIHdoZW4gZG9uZS4NCiAg
ICArICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRlbXBfZGly
Og0KICAgICsNCiAgICArICAgICAgICAgICAgIyBpZiAuY29uZmlnIGlzIGdpdmVuLCBjb3B5IGl0
IHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeQ0KICAgICsgICAgICAgICAgICBpZiBkb3RfY29uZmln
Og0KICAgICsgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGguam9pbihzZWxm
Ll90ZXN0X2RpciwgZG90X2NvbmZpZyksDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3MucGF0aC5qb2luKHRlbXBfZGlyLCAnLmNvbmZpZycpKQ0KICAgICsNCiAgICArICAg
ICAgICAgICAgcHMgPSBzdWJwcm9jZXNzLlBvcGVuKGNvbW1hbmQsDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLA0KICAg
ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQ
RSwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD10ZW1wX2RpciwN
CiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1kaWN0KG9zLmVudmly
b24sICoqZXh0cmFfZW52KSkNCiAgICArDQogICAgKyAgICAgICAgICAgICMgSWYgaW5wdXQga2V5
IHNlcXVlbmNlIGlzIGdpdmVuLCBmZWVkIGl0IHRvIHN0ZGluLg0KICAgICsgICAgICAgICAgICBp
ZiBpbl9rZXlzOg0KICAgICsgICAgICAgICAgICAgICAgcHMuc3RkaW4ud3JpdGUoaW5fa2V5cy5l
bmNvZGUoJ3V0Zi04JykpDQogICAgKw0KICAgICsgICAgICAgICAgICB3aGlsZSBwcy5wb2xsKCkg
aXMgTm9uZToNCiAgICArICAgICAgICAgICAgICAgICMgRm9yIGludGVyYWN0aXZlIG1vZGVzIHN1
Y2ggYXMgb2xkYXNrY29uZmlnLCBvbGRjb25maWcsDQogICAgKyAgICAgICAgICAgICAgICAjIHNl
bmQgJ0VudGVyJyBrZXkgdW50aWwgdGhlIHByb2dyYW0gZmluaXNoZXMuDQogICAgKyAgICAgICAg
ICAgICAgICBpZiBpbnRlcmFjdGl2ZToNCiAgICArICAgICAgICAgICAgICAgICAgICBwcy5zdGRp
bi53cml0ZShiJ1xuJykNCiAgICArDQogICAgKyAgICAgICAgICAgIHNlbGYucmV0Y29kZSA9IHBz
LnJldHVybmNvZGUNCiAgICArICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBwcy5zdGRvdXQucmVh
ZCgpLmRlY29kZSgpDQogICAgKyAgICAgICAgICAgIHNlbGYuc3RkZXJyID0gcHMuc3RkZXJyLnJl
YWQoKS5kZWNvZGUoKQ0KICAgICsNCiAgICArICAgICAgICAgICAgIyBSZXRyaWV2ZSB0aGUgcmVz
dWx0ZWQgY29uZmlnIGRhdGEgb25seSB3aGVuIC5jb25maWcgaXMgc3VwcG9zZWQNCiAgICArICAg
ICAgICAgICAgIyB0byBleGlzdC4gIElmIHRoZSBjb21tYW5kIGZhaWxzLCB0aGUgLmNvbmZpZyBk
b2VzIG5vdCBleGlzdC4NCiAgICArICAgICAgICAgICAgIyAnbGlzdG5ld2NvbmZpZycgZG9lcyBu
b3QgcHJvZHVjZSAuY29uZmlnIGluIHRoZSBmaXJzdCBwbGFjZS4NCiAgICArICAgICAgICAgICAg
aWYgc2VsZi5yZXRjb2RlID09IDAgYW5kIG91dF9maWxlOg0KICAgICsgICAgICAgICAgICAgICAg
d2l0aCBvcGVuKG9zLnBhdGguam9pbih0ZW1wX2Rpciwgb3V0X2ZpbGUpKSBhcyBmOg0KICAgICsg
ICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnID0gZi5yZWFkKCkNCiAgICArICAgICAgICAg
ICAgZWxzZToNCiAgICArICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnID0gTm9uZQ0KICAgICsN
CiAgICArICAgICAgICAjIExvZ2dpbmc6DQogICAgKyAgICAgICAgIyBQeXRlc3QgY2FwdHVyZXMg
dGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBieSBkZWZhdWx0LiAgSW4gZmFpbHVyZQ0KICAgICsg
ICAgICAgICMgb2YgdGVzdHMsIHRoZSBjYXB0dXJlZCBsb2cgd2lsbCBiZSBkaXNwbGF5ZWQuICBU
aGlzIHdpbGwgYmUgdXNlZnVsIHRvDQogICAgKyAgICAgICAgIyBmaWd1cmUgb3V0IHdoYXQgaGFz
IGhhcHBlbmVkLg0KICAgICsNCiAgICArICAgICAgICBwcmludCgiW2NvbW1hbmRdXG57fVxuIi5m
b3JtYXQoJyAnLmpvaW4oY29tbWFuZCkpKQ0KICAgICsNCiAgICArICAgICAgICBwcmludCgiW3Jl
dGNvZGVdXG57fVxuIi5mb3JtYXQoc2VsZi5yZXRjb2RlKSkNCiAgICArDQogICAgKyAgICAgICAg
cHJpbnQoIltzdGRvdXRdIikNCiAgICArICAgICAgICBwcmludChzZWxmLnN0ZG91dCkNCiAgICAr
DQogICAgKyAgICAgICAgcHJpbnQoIltzdGRlcnJdIikNCiAgICArICAgICAgICBwcmludChzZWxm
LnN0ZGVycikNCiAgICArDQogICAgKyAgICAgICAgaWYgc2VsZi5jb25maWcgaXMgbm90IE5vbmU6
DQogICAgKyAgICAgICAgICAgIHByaW50KCJbb3V0cHV0IGZvciAne30nXSIuZm9ybWF0KG91dF9m
aWxlKSkNCiAgICArICAgICAgICAgICAgcHJpbnQoc2VsZi5jb25maWcpDQogICAgKw0KICAgICsg
ICAgICAgIHJldHVybiBzZWxmLnJldGNvZGUNCiAgICArDQogICAgKyAgICBkZWYgb2xkYXNrY29u
ZmlnKHNlbGYsIGRvdF9jb25maWc9Tm9uZSwgaW5fa2V5cz1Ob25lKToNCiAgICArICAgICAgICAi
IiJSdW4gb2xkYXNrY29uZmlnLg0KICAgICsNCiAgICArICAgICAgICBkb3RfY29uZmlnOiAuY29u
ZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2UgKG9wdGlvbmFsKQ0KICAgICsg
ICAgICAgIGluX2tleToga2V5IGlucHV0cyAob3B0aW9uYWwpDQogICAgKyAgICAgICAgcmV0dXJu
Y29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgICsgICAgICAg
ICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1vbGRhc2tjb25maWcn
LCBkb3RfY29uZmlnPWRvdF9jb25maWcsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludGVyYWN0aXZlPVRydWUsIGluX2tleXM9aW5fa2V5cykNCiAgICArDQogICAgKyAgICBk
ZWYgb2xkY29uZmlnKHNlbGYsIGRvdF9jb25maWc9Tm9uZSwgaW5fa2V5cz1Ob25lKToNCiAgICAr
ICAgICAgICAiIiJSdW4gb2xkY29uZmlnLg0KICAgICsNCiAgICArICAgICAgICBkb3RfY29uZmln
OiAuY29uZmlnIGZpbGUgdG8gdXNlIGZvciBjb25maWd1cmF0aW9uIGJhc2UgKG9wdGlvbmFsKQ0K
ICAgICsgICAgICAgIGluX2tleToga2V5IGlucHV0cyAob3B0aW9uYWwpDQogICAgKyAgICAgICAg
cmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgICsg
ICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9ydW5fY29uZignLS1vbGRjb25m
aWcnLCBkb3RfY29uZmlnPWRvdF9jb25maWcsDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludGVyYWN0aXZlPVRydWUsIGluX2tleXM9aW5fa2V5cykNCiAgICArDQogICAgKyAg
ICBkZWYgb2xkZGVmY29uZmlnKHNlbGYsIGRvdF9jb25maWc9Tm9uZSk6DQogICAgKyAgICAgICAg
IiIiUnVuIG9sZGRlZmNvbmZpZy4NCiAgICArDQogICAgKyAgICAgICAgZG90X2NvbmZpZzogLmNv
bmZpZyBmaWxlIHRvIHVzZSBmb3IgY29uZmlndXJhdGlvbiBiYXNlIChvcHRpb25hbCkNCiAgICAr
ICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxl
DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl9jb25mKCct
LW9sZGRlZmNvbmZpZycsIGRvdF9jb25maWc9ZG90X2NvbmZpZykNCiAgICArDQogICAgKyAgICBk
ZWYgZGVmY29uZmlnKHNlbGYsIGRlZmNvbmZpZyk6DQogICAgKyAgICAgICAgIiIiUnVuIGRlZmNv
bmZpZy4NCiAgICArDQogICAgKyAgICAgICAgZGVmY29uZmlnOiBkZWZjb25maWcgZmlsZSBmb3Ig
aW5wdXQNCiAgICArICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZp
ZyBleGVjdXRhYmxlDQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgZGVmY29uZmlnX3Bh
dGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fdGVzdF9kaXIsIGRlZmNvbmZpZykNCiAgICArICAgICAg
ICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tZGVmY29uZmlnPXt9Jy5mb3JtYXQoZGVmY29uZmln
X3BhdGgpKQ0KICAgICsNCiAgICArICAgIGRlZiBfYWxsY29uZmlnKHNlbGYsIG1vZGUsIGFsbF9j
b25maWcpOg0KICAgICsgICAgICAgIGlmIGFsbF9jb25maWc6DQogICAgKyAgICAgICAgICAgIGFs
bF9jb25maWdfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl90ZXN0X2RpciwgYWxsX2NvbmZpZykN
CiAgICArICAgICAgICAgICAgZXh0cmFfZW52ID0geydLQ09ORklHX0FMTENPTkZJRyc6IGFsbF9j
b25maWdfcGF0aH0NCiAgICArICAgICAgICBlbHNlOg0KICAgICsgICAgICAgICAgICBleHRyYV9l
bnYgPSB7fQ0KICAgICsNCiAgICArICAgICAgICByZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0te31j
b25maWcnLmZvcm1hdChtb2RlKSwgZXh0cmFfZW52PWV4dHJhX2VudikNCiAgICArDQogICAgKyAg
ICBkZWYgYWxseWVzY29uZmlnKHNlbGYsIGFsbF9jb25maWc9Tm9uZSk6DQogICAgKyAgICAgICAg
IiIiUnVuIGFsbHllc2NvbmZpZy4NCiAgICArDQogICAgKyAgICAgICAgYWxsX2NvbmZpZzogZnJh
Z21lbnQgY29uZmlnIGZpbGUgZm9yIEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkNCiAgICAr
ICAgICAgICByZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxl
DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsbGNvbmZpZygn
YWxseWVzJywgYWxsX2NvbmZpZykNCiAgICArDQogICAgKyAgICBkZWYgYWxsbW9kY29uZmlnKHNl
bGYsIGFsbF9jb25maWc9Tm9uZSk6DQogICAgKyAgICAgICAgIiIiUnVuIGFsbG1vZGNvbmZpZy4N
CiAgICArDQogICAgKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29uZmlnIGZpbGUgZm9y
IEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkNCiAgICArICAgICAgICByZXR1cm5jb2RlOiBl
eGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlDQogICAgKyAgICAgICAgIiIiDQog
ICAgKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxsbW9kJywgYWxsX2NvbmZpZykN
CiAgICArDQogICAgKyAgICBkZWYgYWxsbm9jb25maWcoc2VsZiwgYWxsX2NvbmZpZz1Ob25lKToN
CiAgICArICAgICAgICAiIiJSdW4gYWxsbm9jb25maWcuDQogICAgKw0KICAgICsgICAgICAgIGFs
bF9jb25maWc6IGZyYWdtZW50IGNvbmZpZyBmaWxlIGZvciBLQ09ORklHX0FMTENPTkZJRyAob3B0
aW9uYWwpDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2YgdGhlIEtjb25m
aWcgZXhlY3V0YWJsZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxm
Ll9hbGxjb25maWcoJ2FsbG5vJywgYWxsX2NvbmZpZykNCiAgICArDQogICAgKyAgICBkZWYgYWxs
ZGVmY29uZmlnKHNlbGYsIGFsbF9jb25maWc9Tm9uZSk6DQogICAgKyAgICAgICAgIiIiUnVuIGFs
bGRlZmNvbmZpZy4NCiAgICArDQogICAgKyAgICAgICAgYWxsX2NvbmZpZzogZnJhZ21lbnQgY29u
ZmlnIGZpbGUgZm9yIEtDT05GSUdfQUxMQ09ORklHIChvcHRpb25hbCkNCiAgICArICAgICAgICBy
ZXR1cm5jb2RlOiBleGl0IHN0YXR1cyBvZiB0aGUgS2NvbmZpZyBleGVjdXRhYmxlDQogICAgKyAg
ICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYuX2FsbGNvbmZpZygnYWxsZGVmJywg
YWxsX2NvbmZpZykNCiAgICArDQogICAgKyAgICBkZWYgcmFuZGNvbmZpZyhzZWxmLCBhbGxfY29u
ZmlnPU5vbmUpOg0KICAgICsgICAgICAgICIiIlJ1biByYW5kY29uZmlnLg0KICAgICsNCiAgICAr
ICAgICAgICBhbGxfY29uZmlnOiBmcmFnbWVudCBjb25maWcgZmlsZSBmb3IgS0NPTkZJR19BTExD
T05GSUcgKG9wdGlvbmFsKQ0KICAgICsgICAgICAgIHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9m
IHRoZSBLY29uZmlnIGV4ZWN1dGFibGUNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBy
ZXR1cm4gc2VsZi5fYWxsY29uZmlnKCdyYW5kJywgYWxsX2NvbmZpZykNCiAgICArDQogICAgKyAg
ICBkZWYgc2F2ZWRlZmNvbmZpZyhzZWxmLCBkb3RfY29uZmlnKToNCiAgICArICAgICAgICAiIiJS
dW4gc2F2ZWRlZmNvbmZpZy4NCiAgICArDQogICAgKyAgICAgICAgZG90X2NvbmZpZzogLmNvbmZp
ZyBmaWxlIGZvciBpbnB1dA0KICAgICsgICAgICAgIHJldHVybmNvZGU6IGV4aXQgc3RhdHVzIG9m
IHRoZSBLY29uZmlnIGV4ZWN1dGFibGUNCiAgICArICAgICAgICAiIiINCiAgICArICAgICAgICBy
ZXR1cm4gc2VsZi5fcnVuX2NvbmYoJy0tc2F2ZWRlZmNvbmZpZycsIG91dF9maWxlPSdkZWZjb25m
aWcnKQ0KICAgICsNCiAgICArICAgIGRlZiBsaXN0bmV3Y29uZmlnKHNlbGYsIGRvdF9jb25maWc9
Tm9uZSk6DQogICAgKyAgICAgICAgIiIiUnVuIGxpc3RuZXdjb25maWcuDQogICAgKw0KICAgICsg
ICAgICAgIGRvdF9jb25maWc6IC5jb25maWcgZmlsZSB0byB1c2UgZm9yIGNvbmZpZ3VyYXRpb24g
YmFzZSAob3B0aW9uYWwpDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogZXhpdCBzdGF0dXMgb2Yg
dGhlIEtjb25maWcgZXhlY3V0YWJsZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJl
dHVybiBzZWxmLl9ydW5fY29uZignLS1saXN0bmV3Y29uZmlnJywgZG90X2NvbmZpZz1kb3RfY29u
ZmlnLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZmlsZT1Ob25lKQ0K
ICAgICsNCiAgICArICAgICMgY2hlY2tlcnMNCiAgICArICAgIGRlZiBfcmVhZF9hbmRfY29tcGFy
ZShzZWxmLCBjb21wYXJlLCBleHBlY3RlZCk6DQogICAgKyAgICAgICAgIiIiQ29tcGFyZSB0aGUg
cmVzdWx0IHdpdGggZXhwZWN0YXRpb24uDQogICAgKw0KICAgICsgICAgICAgIGNvbXBhcmU6IGZ1
bmN0aW9uIHRvIGNvbXBhcmUgdGhlIHJlc3VsdCB3aXRoIGV4cGVjdGF0aW9uDQogICAgKyAgICAg
ICAgZXhwZWN0ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQ0KICAgICsg
ICAgICAgICIiIg0KICAgICsgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fdGVz
dF9kaXIsIGV4cGVjdGVkKSkgYXMgZjoNCiAgICArICAgICAgICAgICAgZXhwZWN0ZWRfZGF0YSA9
IGYucmVhZCgpDQogICAgKyAgICAgICAgcmV0dXJuIGNvbXBhcmUoc2VsZiwgZXhwZWN0ZWRfZGF0
YSkNCiAgICArDQogICAgKyAgICBkZWYgX2NvbnRhaW5zKHNlbGYsIGF0dHIsIGV4cGVjdGVkKToN
CiAgICArICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9hbmRfY29tcGFyZSgNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHMsIGU6IGdldGF0dHIocywgYXR0
cikuZmluZChlKSA+PSAwLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBleHBlY3RlZCkNCiAgICArDQogICAgKyAgICBkZWYgX21hdGNoZXMoc2VsZiwgYXR0ciwgZXhw
ZWN0ZWQpOg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FuZF9jb21wYXJlKGxhbWJk
YSBzLCBlOiBnZXRhdHRyKHMsIGF0dHIpID09IGUsDQogICAgKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpDQogICAgKw0KICAgICsgICAgZGVmIGNvbmZpZ19j
b250YWlucyhzZWxmLCBleHBlY3RlZCk6DQogICAgKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0
ZWQgY29uZmlndXJhdGlvbiBjb250YWlucyBleHBlY3RlZCBkYXRhLg0KICAgICsNCiAgICArICAg
ICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBleHBlY3RlZCBkYXRhDQogICAg
KyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgY29udGFpbnMgdGhlIGV4cGVjdGVk
IGRhdGEsIEZhbHNlIG90aGVyd2lzZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJl
dHVybiBzZWxmLl9jb250YWlucygnY29uZmlnJywgZXhwZWN0ZWQpDQogICAgKw0KICAgICsgICAg
ZGVmIGNvbmZpZ19tYXRjaGVzKHNlbGYsIGV4cGVjdGVkKToNCiAgICArICAgICAgICAiIiJDaGVj
ayBpZiByZXN1bHRlZCBjb25maWd1cmF0aW9uIGV4YWN0bHkgbWF0Y2hlcyBleHBlY3RlZCBkYXRh
Lg0KICAgICsNCiAgICArICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBl
eHBlY3RlZCBkYXRhDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQgbWF0
Y2hlcyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNlDQogICAgKyAgICAgICAgIiIi
DQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoZXMoJ2NvbmZpZycsIGV4cGVjdGVkKQ0K
ICAgICsNCiAgICArICAgIGRlZiBzdGRvdXRfY29udGFpbnMoc2VsZiwgZXhwZWN0ZWQpOg0KICAg
ICsgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZG91dCBjb250YWlucyBleHBlY3RlZCBk
YXRhLg0KICAgICsNCiAgICArICAgICAgICBleHBlY3RlZDogZmlsZSB0aGF0IGNvbnRhaW5zIHRo
ZSBleHBlY3RlZCBkYXRhDQogICAgKyAgICAgICAgcmV0dXJuY29kZTogVHJ1ZSBpZiByZXN1bHQg
Y29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNlIG90aGVyd2lzZQ0KICAgICsgICAgICAg
ICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9jb250YWlucygnc3Rkb3V0JywgZXhwZWN0
ZWQpDQogICAgKw0KICAgICsgICAgZGVmIHN0ZG91dF9tYXRjaGVzKHNlbGYsIGV4cGVjdGVkKToN
CiAgICArICAgICAgICAiIiJDaGVjayBpZiByZXN1bHRlZCBzdGRvdXQgZXhhY3RseSBtYXRjaGVz
IGV4cGVjdGVkIGRhdGEuDQogICAgKw0KICAgICsgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRoYXQg
Y29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGENCiAgICArICAgICAgICByZXR1cm5jb2RlOiBUcnVl
IGlmIHJlc3VsdCBtYXRjaGVzIHRoZSBleHBlY3RlZCBkYXRhLCBGYWxzZSBvdGhlcndpc2UNCiAg
ICArICAgICAgICAiIiINCiAgICArICAgICAgICByZXR1cm4gc2VsZi5fbWF0Y2hlcygnc3Rkb3V0
JywgZXhwZWN0ZWQpDQogICAgKw0KICAgICsgICAgZGVmIHN0ZGVycl9jb250YWlucyhzZWxmLCBl
eHBlY3RlZCk6DQogICAgKyAgICAgICAgIiIiQ2hlY2sgaWYgcmVzdWx0ZWQgc3RkZXJyIGNvbnRh
aW5zIGV4cGVjdGVkIGRhdGEuDQogICAgKw0KICAgICsgICAgICAgIGV4cGVjdGVkOiBmaWxlIHRo
YXQgY29udGFpbnMgdGhlIGV4cGVjdGVkIGRhdGENCiAgICArICAgICAgICByZXR1cm5jb2RlOiBU
cnVlIGlmIHJlc3VsdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YSwgRmFsc2Ugb3RoZXJ3aXNl
DQogICAgKyAgICAgICAgIiIiDQogICAgKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRhaW5zKCdz
dGRlcnInLCBleHBlY3RlZCkNCiAgICArDQogICAgKyAgICBkZWYgc3RkZXJyX21hdGNoZXMoc2Vs
ZiwgZXhwZWN0ZWQpOg0KICAgICsgICAgICAgICIiIkNoZWNrIGlmIHJlc3VsdGVkIHN0ZGVyciBl
eGFjdGx5IG1hdGNoZXMgZXhwZWN0ZWQgZGF0YS4NCiAgICArDQogICAgKyAgICAgICAgZXhwZWN0
ZWQ6IGZpbGUgdGhhdCBjb250YWlucyB0aGUgZXhwZWN0ZWQgZGF0YQ0KICAgICsgICAgICAgIHJl
dHVybmNvZGU6IFRydWUgaWYgcmVzdWx0IG1hdGNoZXMgdGhlIGV4cGVjdGVkIGRhdGEsIEZhbHNl
IG90aGVyd2lzZQ0KICAgICsgICAgICAgICIiIg0KICAgICsgICAgICAgIHJldHVybiBzZWxmLl9t
YXRjaGVzKCdzdGRlcnInLCBleHBlY3RlZCkNCiAgICArDQogICAgKw0KICAgICtAcHl0ZXN0LmZp
eHR1cmUoc2NvcGU9Im1vZHVsZSIpDQogICAgK2RlZiBjb25mKHJlcXVlc3QpOg0KICAgICsgICAg
IiIiQ3JlYXRlIGEgQ29uZiBpbnN0YW5jZSBhbmQgcHJvdmlkZSBpdCB0byB0ZXN0IGZ1bmN0aW9u
cy4iIiINCiAgICArICAgIHJldHVybiBDb25mKHJlcXVlc3QpDQogICAgZGlmZiAtLWdpdCBhL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9LY29uZmlnIGIvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcNCiAgICBuZXcgZmlsZSBtb2Rl
IDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmViZGIzZmYNCiAgICAtLS0gL2Rldi9udWxsDQog
ICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfZGVwL0tjb25maWcN
CiAgICBAQCAtMCwwICsxLDYzIEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ
TC0yLjANCiAgICArDQogICAgKyMgZGVwZW5kcyBvbiBpdHNlbGYNCiAgICArDQogICAgK2NvbmZp
ZyBBDQogICAgKwlib29sICJBIg0KICAgICsJZGVwZW5kcyBvbiBBDQogICAgKw0KICAgICsjIHNl
bGVjdCBpdHNlbGYNCiAgICArDQogICAgK2NvbmZpZyBCDQogICAgKwlib29sDQogICAgKwlzZWxl
Y3QgQg0KICAgICsNCiAgICArIyBkZXBlbmRzIG9uIGVhY2ggb3RoZXINCiAgICArDQogICAgK2Nv
bmZpZyBDMQ0KICAgICsJYm9vbCAiQzEiDQogICAgKwlkZXBlbmRzIG9uIEMyDQogICAgKw0KICAg
ICtjb25maWcgQzINCiAgICArCWJvb2wgIkMyIg0KICAgICsJZGVwZW5kcyBvbiBDMQ0KICAgICsN
CiAgICArIyBkZXBlbmRzIG9uIGFuZCBzZWxlY3QNCiAgICArDQogICAgK2NvbmZpZyBEMQ0KICAg
ICsJYm9vbCAiRDEiDQogICAgKwlkZXBlbmRzIG9uIEQyDQogICAgKwlzZWxlY3QgRDINCiAgICAr
DQogICAgK2NvbmZpZyBEMg0KICAgICsJYm9vbA0KICAgICsNCiAgICArIyBkZXBlbmRzIG9uIGFu
ZCBpbXBseQ0KICAgICsNCiAgICArY29uZmlnIEUxDQogICAgKwlib29sICJFMSINCiAgICArCWRl
cGVuZHMgb24gRTINCiAgICArCWltcGx5IEUyDQogICAgKw0KICAgICtjb25maWcgRTINCiAgICAr
CWJvb2wgIkUyIg0KICAgICsNCiAgICArIyBwcm9wZXJ0eQ0KICAgICsNCiAgICArY29uZmlnIEYx
DQogICAgKwlib29sICJGMSINCiAgICArCWRlZmF1bHQgRjINCiAgICArDQogICAgK2NvbmZpZyBG
Mg0KICAgICsJYm9vbCAiRjIiDQogICAgKwlkZXBlbmRzIG9uIEYxDQogICAgKw0KICAgICsjIG1l
bnUNCiAgICArDQogICAgK21lbnUgIm1lbnUgZGVwZW5kaW5nIG9uIGl0cyBjb250ZW50Ig0KICAg
ICsJZGVwZW5kcyBvbiBHDQogICAgKw0KICAgICtjb25maWcgRw0KICAgICsJYm9vbCAiRyINCiAg
ICArDQogICAgK2VuZG1lbnUNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L2Vycl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vy
cl9yZWN1cnNpdmVfZGVwL19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi41ZjM4MjFiDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9fX2luaXRfXy5weQ0KICAgIEBA
IC0wLDAgKzEsMTAgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K
ICAgICsiIiINCiAgICArRGV0ZWN0IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGVycm9yLg0KICAgICsN
CiAgICArUmVjdXJzaXZlIGRlcGVuZGVuY3kgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3Iu
DQogICAgKyIiIg0KICAgICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQg
Y29uZi5vbGRhc2tjb25maWcoKSA9PSAxDQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29u
dGFpbnMoJ2V4cGVjdGVkX3N0ZGVycicpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25m
aWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9kZXAvZXhwZWN0ZWRfc3RkZXJyDQogICAgbmV3IGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi44NDY3OWIxDQogICAgLS0tIC9kZXYvbnVs
bA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2RlcC9leHBl
Y3RlZF9zdGRlcnINCiAgICBAQCAtMCwwICsxLDM4IEBADQogICAgK0tjb25maWc6MTE6ZXJyb3I6
IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQ0KICAgICtLY29uZmlnOjExOglzeW1ib2wg
QiBpcyBzZWxlY3RlZCBieSBCDQogICAgK0ZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1l
bnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICArc3Vic2VjdGlvbiAiS2Nv
bmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAgICArDQogICAgK0tjb25m
aWc6NTplcnJvcjogcmVjdXJzaXZlIGRlcGVuZGVuY3kgZGV0ZWN0ZWQhDQogICAgK0tjb25maWc6
NToJc3ltYm9sIEEgZGVwZW5kcyBvbiBBDQogICAgK0ZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8g
RG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICArc3Vic2VjdGlv
biAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAgICArDQogICAg
K0tjb25maWc6MTc6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQ0KICAgICtL
Y29uZmlnOjE3OglzeW1ib2wgQzEgZGVwZW5kcyBvbiBDMg0KICAgICtLY29uZmlnOjIxOglzeW1i
b2wgQzIgZGVwZW5kcyBvbiBDMQ0KICAgICtGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3Vt
ZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgK3N1YnNlY3Rpb24gIktj
b25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgKw0KICAgICtLY29u
ZmlnOjMyOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCENCiAgICArS2NvbmZp
ZzozMjoJc3ltYm9sIEQyIGlzIHNlbGVjdGVkIGJ5IEQxDQogICAgK0tjb25maWc6Mjc6CXN5bWJv
bCBEMSBkZXBlbmRzIG9uIEQyDQogICAgK0ZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8gRG9jdW1l
bnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICArc3Vic2VjdGlvbiAiS2Nv
bmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAgICArDQogICAgK0tjb25m
aWc6Mzc6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQ0KICAgICtLY29uZmln
OjM3OglzeW1ib2wgRTEgZGVwZW5kcyBvbiBFMg0KICAgICtLY29uZmlnOjQyOglzeW1ib2wgRTIg
aXMgaW1wbGllZCBieSBFMQ0KICAgICtGb3IgYSByZXNvbHV0aW9uIHJlZmVyIHRvIERvY3VtZW50
YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgK3N1YnNlY3Rpb24gIktjb25m
aWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAgKw0KICAgICtLY29uZmln
OjYwOmVycm9yOiByZWN1cnNpdmUgZGVwZW5kZW5jeSBkZXRlY3RlZCENCiAgICArS2NvbmZpZzo2
MDoJc3ltYm9sIEcgZGVwZW5kcyBvbiBHDQogICAgK0ZvciBhIHJlc29sdXRpb24gcmVmZXIgdG8g
RG9jdW1lbnRhdGlvbi9rYnVpbGQva2NvbmZpZy1sYW5ndWFnZS50eHQNCiAgICArc3Vic2VjdGlv
biAiS2NvbmZpZyByZWN1cnNpdmUgZGVwZW5kZW5jeSBsaW1pdGF0aW9ucyINCiAgICArDQogICAg
K0tjb25maWc6NTE6ZXJyb3I6IHJlY3Vyc2l2ZSBkZXBlbmRlbmN5IGRldGVjdGVkIQ0KICAgICtL
Y29uZmlnOjUxOglzeW1ib2wgRjIgZGVwZW5kcyBvbiBGMQ0KICAgICtLY29uZmlnOjQ5OglzeW1i
b2wgRjEgZGVmYXVsdCB2YWx1ZSBjb250YWlucyBGMg0KICAgICtGb3IgYSByZXNvbHV0aW9uIHJl
ZmVyIHRvIERvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0DQogICAgK3N1
YnNlY3Rpb24gIktjb25maWcgcmVjdXJzaXZlIGRlcGVuZGVuY3kgbGltaXRhdGlvbnMiDQogICAg
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29u
ZmlnIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcNCiAg
ICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmM2ZjRhZGUNCiAgICAt
LS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNp
dmVfaW5jL0tjb25maWcNCiAgICBAQCAtMCwwICsxLDIgQEANCiAgICArIyBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQogICAgK3NvdXJjZSAiS2NvbmZpZy5pbmMxIg0KICAg
IGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvS2Nv
bmZpZy5pbmMxIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25m
aWcuaW5jMQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMDFj
YmYwZA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMv
ZXJyX3JlY3Vyc2l2ZV9pbmMvS2NvbmZpZy5pbmMxDQogICAgQEAgLTAsMCArMSw1IEBADQogICAg
KyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KICAgICsNCiAgICArDQog
ICAgKw0KICAgICtzb3VyY2UgIktjb25maWcuaW5jMiINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMiBiL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9LY29uZmlnLmluYzINCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjgyMzUxMDcNCiAgICAtLS0gL2Rldi9u
dWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tj
b25maWcuaW5jMg0KICAgIEBAIC0wLDAgKzEsNCBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBHUEwtMi4wLW9ubHkNCiAgICArDQogICAgKw0KICAgICtzb3VyY2UgIktjb25maWcu
aW5jMyINCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2Vycl9yZWN1cnNp
dmVfaW5jL0tjb25maWcuaW5jMyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZl
X2luYy9LY29uZmlnLmluYzMNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAw
MDAwMDAuLmM2ZjRhZGUNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL2Vycl9yZWN1cnNpdmVfaW5jL0tjb25maWcuaW5jMw0KICAgIEBAIC0wLDAgKzEs
MiBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkNCiAgICAr
c291cmNlICJLY29uZmlnLmluYzEiDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90
ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0
cy9lcnJfcmVjdXJzaXZlX2luYy9fX2luaXRfXy5weQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0
DQogICAgaW5kZXggMDAwMDAwMC4uMjdhYTE4OQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysg
Yi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMvX19pbml0X18ucHkNCiAg
ICBAQCAtMCwwICsxLDExIEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y
LjANCiAgICArIiIiDQogICAgK0RldGVjdCByZWN1cnNpdmUgaW5jbHVzaW9uIGVycm9yLg0KICAg
ICsNCiAgICArSWYgcmVjdXJzaXZlIGluY2x1c2lvbiBpcyBkZXRlY3RlZCwgaXQgc2hvdWxkIGZh
aWwgd2l0aCBlcnJvciBtZXNzYWdlcy4NCiAgICArIiIiDQogICAgKw0KICAgICsNCiAgICArZGVm
IHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25maWcoKSAhPSAwDQog
ICAgKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZGVycicpDQog
ICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9l
eHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvZXJyX3JlY3Vyc2l2ZV9pbmMv
ZXhwZWN0ZWRfc3RkZXJyDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAw
MDAwLi5iMDcwYTMxDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9lcnJfcmVjdXJzaXZlX2luYy9leHBlY3RlZF9zdGRlcnINCiAgICBAQCAtMCwwICsx
LDYgQEANCiAgICArUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC4NCiAgICArSW5jbHVzaW9u
IHBhdGg6DQogICAgKyAgY3VycmVudCBmaWxlIDogS2NvbmZpZy5pbmMxDQogICAgKyAgaW5jbHVk
ZWQgZnJvbTogS2NvbmZpZy5pbmMzOjINCiAgICArICBpbmNsdWRlZCBmcm9tOiBLY29uZmlnLmlu
YzI6NA0KICAgICsgIGluY2x1ZGVkIGZyb206IEtjb25maWcuaW5jMTo1DQogICAgZGlmZiAtLWdp
dCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZyBiL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvS2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAw
NjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNTY5OGE0MA0KICAgIC0tLSAvZGV2L251bGwNCiAgICAr
KysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL0tjb25maWcNCiAgICBAQCAt
MCwwICsxLDI1IEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAg
ICArDQogICAgK2NvbmZpZyBNT0RVTEVTDQogICAgKwlkZWZfYm9vbCB5DQogICAgKwlvcHRpb24g
bW9kdWxlcw0KICAgICsNCiAgICArY2hvaWNlDQogICAgKwlwcm9tcHQgIkNob2ljZSINCiAgICAr
DQogICAgK2NvbmZpZyBDSE9JQ0VfVkFMMA0KICAgICsJdHJpc3RhdGUgIkNob2ljZSAwIg0KICAg
ICsNCiAgICArY29uZmlnIENIT0lWRV9WQUwxDQogICAgKwl0cmlzdGF0ZSAiQ2hvaWNlIDEiDQog
ICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICArDQogICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0ICJB
bm90aGVyIGNob2ljZSINCiAgICArCWRlcGVuZHMgb24gQ0hPSUNFX1ZBTDANCiAgICArDQogICAg
K2NvbmZpZyBEVU1NWQ0KICAgICsJYm9vbCAiZHVtbXkiDQogICAgKw0KICAgICtlbmRjaG9pY2UN
CiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9fX2lu
aXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9pbnRlcl9jaG9pY2UvX19pbml0X18ucHkN
CiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmZmZWE2YjENCiAg
ICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL2ludGVyX2No
b2ljZS9fX2luaXRfXy5weQ0KICAgIEBAIC0wLDAgKzEsMTUgQEANCiAgICArIyBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsiIiINCiAgICArRG8gbm90IGFmZmVjdCB1c2Vy
LWFzc2lnbmVkIGNob2ljZSB2YWx1ZSBieSBhbm90aGVyIGNob2ljZS4NCiAgICArDQogICAgK0hh
bmRsaW5nIG9mIHN0YXRlIGZsYWdzIGZvciBjaG9pY2VzIGlzIGNvbXBsZWNhdGVkLiAgSW4gb2xk
IGRheXMsDQogICAgK3RoZSBkZWZjb25maWcgcmVzdWx0IG9mIGEgY2hvaWNlIGNvdWxkIGJlIGFm
ZmVjdGVkIGJ5IGFub3RoZXIgY2hvaWNlDQogICAgK2lmIHRob3NlIGNob2ljZXMgaW50ZXJhY3Qg
YnkgJ2RlcGVuZHMgb24nLCAnc2VsZWN0JywgZXRjLg0KICAgICsNCiAgICArUmVsYXRlZCBMaW51
eCBjb21taXQ6IGZiZTk4YmI5ZWQzZGFlMjNlMzIwYzZiMTEzZTM1ZjEyOTUzOGQxNGENCiAgICAr
IiIiDQogICAgKw0KICAgICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQg
Y29uZi5kZWZjb25maWcoJ2RlZmNvbmZpZycpID09IDANCiAgICArICAgIGFzc2VydCBjb25mLmNv
bmZpZ19jb250YWlucygnZXhwZWN0ZWRfY29uZmlnJykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9kZWZjb25maWcgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uMTYyYzQxNA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9z
dXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2RlZmNvbmZpZw0KICAgIEBAIC0wLDAg
KzEgQEANCiAgICArQ09ORklHX0NIT0lDRV9WQUwwPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL2ludGVyX2Nob2ljZS9leHBlY3RlZF9jb25maWcgYi9zdXBwb3J0L2tj
b25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2NvbmZpZw0KICAgIG5ldyBmaWxlIG1v
ZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNWRjZWVmYg0KICAgIC0tLSAvZGV2L251bGwN
CiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvaW50ZXJfY2hvaWNlL2V4cGVjdGVkX2Nv
bmZpZw0KICAgIEBAIC0wLDAgKzEsNCBAQA0KICAgICtDT05GSUdfTU9EVUxFUz15DQogICAgK0NP
TkZJR19DSE9JQ0VfVkFMMD15DQogICAgKyMgQ09ORklHX0NIT0lWRV9WQUwxIGlzIG5vdCBzZXQN
CiAgICArQ09ORklHX0RVTU1ZPXkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9u
ZXdfY2hvaWNlX3dpdGhfZGVwL0tjb25maWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAg
IGluZGV4IDAwMDAwMDAuLjEyNzczMWMNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvS2NvbmZpZw0KICAgIEBAIC0w
LDAgKzEsMzkgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAg
ICsNCiAgICArY29uZmlnIEENCiAgICArCWJvb2wgIkEiDQogICAgKwloZWxwDQogICAgKwkgIFRo
aXMgaXMgYSBuZXcgc3ltYm9sLg0KICAgICsNCiAgICArY2hvaWNlDQogICAgKwlwcm9tcHQgIkNo
b2ljZSA/Ig0KICAgICsJZGVwZW5kcyBvbiBBDQogICAgKwloZWxwDQogICAgKwkgICJkZXBlbmRz
IG9uIEEiIGhhcyBiZWVuIG5ld2x5IGFkZGVkLg0KICAgICsNCiAgICArY29uZmlnIENIT0lDRV9C
DQogICAgKwlib29sICJDaG9pY2UgQiINCiAgICArDQogICAgK2NvbmZpZyBDSE9JQ0VfQw0KICAg
ICsJYm9vbCAiQ2hvaWNlIEMiDQogICAgKwloZWxwDQogICAgKwkgIFRoaXMgaXMgYSBuZXcgc3lt
Ym9sLCBzbyBzaG91bGQgYmUgYXNrZWQuDQogICAgKw0KICAgICtlbmRjaG9pY2UNCiAgICArDQog
ICAgK2Nob2ljZQ0KICAgICsJcHJvbXB0ICJDaG9pY2UyID8iDQogICAgKw0KICAgICtjb25maWcg
Q0hPSUNFX0QNCiAgICArCWJvb2wgIkNob2ljZSBEIg0KICAgICsNCiAgICArY29uZmlnIENIT0lD
RV9FDQogICAgKwlib29sICJDaG9pY2UgRSINCiAgICArDQogICAgK2NvbmZpZyBDSE9JQ0VfRg0K
ICAgICsJYm9vbCAiQ2hvaWNlIEYiDQogICAgKwlkZXBlbmRzIG9uIEENCiAgICArCWhlbHANCiAg
ICArCSAgVGhpcyBpcyBhIG5ldyBzeW1ib2wsIHNvIHNob3VsZCBiZSBhc2tlZC4NCiAgICArDQog
ICAgK2VuZGNob2ljZQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvbmV3
X2Nob2ljZV93aXRoX2RlcC9fX2luaXRfXy5weSBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdf
Y2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi5mZTlkMzIyDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL19faW5pdF9fLnB5DQogICAg
QEAgLTAsMCArMSwxNSBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w
DQogICAgKyIiIg0KICAgICtBc2sgbmV3IGNob2ljZSB2YWx1ZXMgd2hlbiB0aGV5IGJlY29tZSB2
aXNpYmxlLg0KICAgICsNCiAgICArSWYgbmV3IGNob2ljZSB2YWx1ZXMgYXJlIGFkZGVkIHdpdGgg
bmV3IGRlcGVuZGVuY3ksIGFuZCB0aGV5IGJlY29tZQ0KICAgICt2aXNpYmxlIGR1cmluZyB1c2Vy
IGNvbmZpZ3VyYXRpb24sIG9sZGNvbmZpZyBzaG91bGQgcmVjb2duaXplIHRoZW0NCiAgICArYXMg
KE5FVyksIGFuZCBhc2sgdGhlIHVzZXIgZm9yIGNob2ljZS4NCiAgICArDQogICAgK1JlbGF0ZWQg
TGludXggY29tbWl0OiA1ZDA5NTk4ZDQ4OGYwODFlM2JlMjNmODg1ZWQ2NWNiYmUyZDA3M2I1DQog
ICAgKyIiIg0KICAgICsNCiAgICArDQogICAgK2RlZiB0ZXN0KGNvbmYpOg0KICAgICsgICAgYXNz
ZXJ0IGNvbmYub2xkY29uZmlnKCdjb25maWcnLCAneScpID09IDANCiAgICArICAgIGFzc2VydCBj
b25mLnN0ZG91dF9jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0JykNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnIGIvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL25ld19jaG9pY2Vfd2l0aF9kZXAvY29uZmlnDQogICAgbmV3IGZpbGUg
bW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40N2VmOTVkDQogICAgLS0tIC9kZXYvbnVs
bA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2Nv
bmZpZw0KICAgIEBAIC0wLDAgKzEsMyBAQA0KICAgICtDT05GSUdfQ0hPSUNFX0I9eQ0KICAgICsj
IENPTkZJR19DSE9JQ0VfRCBpcyBub3Qgc2V0DQogICAgK0NPTkZJR19DSE9JQ0VfRT15DQogICAg
ZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVwL2V4
cGVjdGVkX3N0ZG91dCBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9uZXdfY2hvaWNlX3dpdGhfZGVw
L2V4cGVjdGVkX3N0ZG91dA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAw
MDAwMC4uNzRkYzBiYw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25m
aWcvdGVzdHMvbmV3X2Nob2ljZV93aXRoX2RlcC9leHBlY3RlZF9zdGRvdXQNCiAgICBAQCAtMCww
ICsxLDEwIEBADQogICAgK0EgKEEpIFtOL3kvP10gKE5FVykgeQ0KICAgICsgIENob2ljZSA/DQog
ICAgKyAgPiAxLiBDaG9pY2UgQiAoQ0hPSUNFX0IpDQogICAgKyAgICAyLiBDaG9pY2UgQyAoQ0hP
SUNFX0MpIChORVcpDQogICAgKyAgY2hvaWNlWzEtMj9dOiANCiAgICArQ2hvaWNlMiA/DQogICAg
KyAgMS4gQ2hvaWNlIEQgKENIT0lDRV9EKQ0KICAgICs+IDIuIENob2ljZSBFIChDSE9JQ0VfRSkN
CiAgICArICAzLiBDaG9pY2UgRiAoQ0hPSUNFX0YpIChORVcpDQogICAgK2Nob2ljZVsxLTM/XTog
DQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBf
dW5tZXQvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5t
ZXQvS2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
NDc2N2FhYg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVz
dHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L0tjb25maWcNCiAgICBAQCAtMCwwICsxLDE2IEBADQog
ICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICArDQogICAgK2NvbmZp
ZyBBDQogICAgKwlib29sICJBIg0KICAgICsNCiAgICArY2hvaWNlDQogICAgKwlwcm9tcHQgIkNo
b2ljZSA/Ig0KICAgICsJZGVwZW5kcyBvbiBBDQogICAgKw0KICAgICtjb25maWcgQ0hPSUNFX0IN
CiAgICArCWJvb2wgIkNob2ljZSBCIg0KICAgICsNCiAgICArY29uZmlnIENIT0lDRV9DDQogICAg
Kwlib29sICJDaG9pY2UgQyINCiAgICArDQogICAgK2VuZGNob2ljZQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5
IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9fX2luaXRfXy5w
eQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZmZkNDY5ZA0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3Jp
dGVfaWZfZGVwX3VubWV0L19faW5pdF9fLnB5DQogICAgQEAgLTAsMCArMSwyMCBAQA0KICAgICsj
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKyIiIg0KICAgICtEbyBub3Qg
d3JpdGUgY2hvaWNlIHZhbHVlcyB0byAuY29uZmlnIGlmIHRoZSBkZXBlbmRlbmN5IGlzIHVubWV0
Lg0KICAgICsNCiAgICArIiMgQ09ORklHXy4uLiBpcyBub3Qgc2V0IiBzaG91bGQgbm90IGJlIHdy
aXR0ZW4gaW50byB0aGUgLmNvbmZpZyBmaWxlDQogICAgK2ZvciBzeW1ib2xzIHdpdGggdW5tZXQg
ZGVwZW5kZW5jeS4NCiAgICArDQogICAgK1RoaXMgd2FzIG5vdCB3b3JraW5nIGNvcnJlY3RseSBm
b3IgY2hvaWNlIHZhbHVlcyBiZWNhdXNlIGNob2ljZSBuZWVkcw0KICAgICthIGJpdCBkaWZmZXJl
bnQgc3ltYm9sIGNvbXB1dGF0aW9uLg0KICAgICsNCiAgICArVGhpcyBjaGVja3MgdGhhdCBubyB1
bm5lZWRlZCAiIyBDT0ZJR18uLi4gaXMgbm90IHNldCIgaXMgY29udGFpbmVkIGluDQogICAgK3Ro
ZSAuY29uZmlnIGZpbGUuDQogICAgKw0KICAgICtSZWxhdGVkIExpbnV4IGNvbW1pdDogY2I2N2Fi
MmNkMmI4YWJkOTY1MDI5MmM5ODZjNzk5MDFlMzA3M2E1OQ0KICAgICsiIiINCiAgICArDQogICAg
Kw0KICAgICtkZWYgdGVzdChjb25mKToNCiAgICArICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZp
ZygnY29uZmlnJywgJ24nKSA9PSAwDQogICAgKyAgICBhc3NlcnQgY29uZi5jb25maWdfbWF0Y2hl
cygnZXhwZWN0ZWRfY29uZmlnJykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL25vX3dyaXRlX2lmX2RlcF91bm1ldC9jb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMv
bm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQog
ICAgaW5kZXggMDAwMDAwMC4uYWJkMjgwZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9z
dXBwb3J0L2tjb25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2NvbmZpZw0KICAgIEBA
IC0wLDAgKzEgQEANCiAgICArQ09ORklHX0E9eQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcvdGVzdHMvbm9fd3JpdGVfaWZfZGVwX3VubWV0L2V4cGVjdGVkX2NvbmZpZyBiL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9pZl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnDQog
ICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi40NzMyMjg4DQogICAg
LS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9ub193cml0ZV9p
Zl9kZXBfdW5tZXQvZXhwZWN0ZWRfY29uZmlnDQogICAgQEAgLTAsMCArMSw1IEBADQogICAgKyMN
CiAgICArIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmaWxlOyBETyBOT1QgRURJVC4NCiAgICAr
IyBNYWluIG1lbnUNCiAgICArIw0KICAgICsjIENPTkZJR19BIGlzIG5vdCBzZXQNCiAgICBkaWZm
IC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL0tj
b25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvS2Nv
bmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYmFhMzI4
OA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJl
cHJvY2Vzcy9idWlsdGluX2Z1bmMvS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsMjcgQEANCiAgICAr
IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KICAgICsNCiAgICArIyAnaW5mbycg
cHJpbnRzIHRoZSBhcmd1bWVudCB0byBzdGRvdXQuDQogICAgKyQoaW5mbyxoZWxsbyB3b3JsZCAw
KQ0KICAgICsNCiAgICArIyAnd2FybmluZy1pZicsIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB5
LCBzZW5kcyB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvIHN0ZGVyciwNCiAgICArIyBhbmQgdGhlIG1l
c3NhZ2UgaXMgcHJlZml4ZWQgd2l0aCB0aGUgY3VycmVudCBmaWxlIG5hbWUgYW5kIGxpbmUgbnVt
YmVyLg0KICAgICskKHdhcm5pbmctaWYseSxoZWxsbyB3b3JsZCAxKQ0KICAgICsNCiAgICArIyAn
ZXJyb3ItaWYnIGlzIHNpbWlsYXIsIGJ1dCBpdCB0ZXJtaW5hdGVzIHRoZSBwYXJzaW5nIGltbWVk
aWF0ZWx5Lg0KICAgICsjIFRoZSBmb2xsb3dpbmcgaXMganVzdCBuby1vcCBzaW5jZSB0aGUgZmly
c3QgYXJndW1lbnQgaXMgbm90IHkuDQogICAgKyQoZXJyb3ItaWYsbix0aGlzIHNob3VsZCBub3Qg
YmUgcHJpbnRlZCkNCiAgICArDQogICAgKyMgU2hvcnRoYW5kDQogICAgK3dhcm5pbmcgPSAkKHdh
cm5pbmctaWYseSwkKDEpKQ0KICAgICsNCiAgICArIyAnc2hlbGwnIGV4ZWN1dGVzIGEgY29tbWFu
ZCwgYW5kIHJldHVybnMgaXRzIHN0ZG91dC4NCiAgICArJCh3YXJuaW5nLCQoc2hlbGwsZWNobyBo
ZWxsbyB3b3JsZCAzKSkNCiAgICArDQogICAgKyMgRXZlcnkgbmV3bGluZSBpbiB0aGUgb3V0cHV0
IGlzIHJlcGxhY2VkIHdpdGggYSBzcGFjZSwNCiAgICArIyBidXQgYW55IHRyYWlsaW5nIG5ld2xp
bmVzIGFyZSBkZWxldGVkLg0KICAgICskKHdhcm5pbmcsJChzaGVsbCxwcmludGYgJ2hlbGxvXG53
b3JsZFxuXG40XG5cblxuJykpDQogICAgKw0KICAgICsjICdmaWxlbmFtZScgaXMgZXhwYW5kZWQg
dG8gdGhlIGN1cnJlbnRseSBwYXJzZWQgZmlsZSBuYW1lLA0KICAgICsjICdsaW5lbm8nIHRvIHRo
ZSBsaW5lIG51bWJlci4NCiAgICArJCh3YXJuaW5nLGZpbGVuYW1lPSQoZmlsZW5hbWUpKQ0KICAg
ICskKHdhcm5pbmcsbGluZW5vPSQobGluZW5vKSkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5IGIvc3VwcG9y
dC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL19faW5pdF9fLnB5DQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4yZTUzYmEwDQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1
aWx0aW5fZnVuYy9fX2luaXRfXy5weQ0KICAgIEBAIC0wLDAgKzEsOSBAQA0KICAgICsjIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKyIiIg0KICAgICtCdWlsdC1pbiBmdW5j
dGlvbiB0ZXN0cy4NCiAgICArIiIiDQogICAgKw0KICAgICtkZWYgdGVzdChjb25mKToNCiAgICAr
ICAgIGFzc2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDANCiAgICArICAgIGFzc2VydCBjb25m
LnN0ZG91dF9jb250YWlucygnZXhwZWN0ZWRfc3Rkb3V0JykNCiAgICArICAgIGFzc2VydCBjb25m
LnN0ZGVycl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBw
b3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJy
IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvYnVpbHRpbl9mdW5jL2V4cGVjdGVk
X3N0ZGVycg0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMzNl
YTljYQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMv
cHJlcHJvY2Vzcy9idWlsdGluX2Z1bmMvZXhwZWN0ZWRfc3RkZXJyDQogICAgQEAgLTAsMCArMSw1
IEBADQogICAgK0tjb25maWc6ODogaGVsbG8gd29ybGQgMQ0KICAgICtLY29uZmlnOjE4OiBoZWxs
byB3b3JsZCAzDQogICAgK0tjb25maWc6MjI6IGhlbGxvIHdvcmxkICA0DQogICAgK0tjb25maWc6
MjY6IGZpbGVuYW1lPUtjb25maWcNCiAgICArS2NvbmZpZzoyNzogbGluZW5vPTI3DQogICAgZGlm
ZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9l
eHBlY3RlZF9zdGRvdXQgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9idWlsdGlu
X2Z1bmMvZXhwZWN0ZWRfc3Rkb3V0DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRl
eCAwMDAwMDAwLi44MmRlM2E3DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQv
a2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2J1aWx0aW5fZnVuYy9leHBlY3RlZF9zdGRvdXQNCiAg
ICBAQCAtMCwwICsxIEBADQogICAgK2hlbGxvIHdvcmxkIDANCiAgICBkaWZmIC0tZ2l0IGEvc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL0tjb25maWcg
Yi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2Nv
bmZpZw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNjgzODk5
Nw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHJl
cHJvY2Vzcy9jaXJjdWxhcl9leHBhbnNpb24vS2NvbmZpZw0KICAgIEBAIC0wLDAgKzEsNSBAQA0K
ICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKw0KICAgICtYID0g
JChZKQ0KICAgICtZID0gJChYKQ0KICAgICskKGluZm8gJChYKSkNCiAgICBkaWZmIC0tZ2l0IGEv
c3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL19faW5p
dF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5z
aW9uL19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAw
MDAwLi40MTliZGEzDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9fX2luaXRfXy5weQ0KICAgIEBA
IC0wLDAgKzEsMTEgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0K
ICAgICsiIiINCiAgICArRGV0ZWN0IGNpcmN1bGFyIHZhcmlhYmxlIGV4cGFuc2lvbi4NCiAgICAr
DQogICAgK0lmIGEgcmVjdXJzaXZlbHkgZXhwYW5kZWQgdmFyaWFibGUgcmVmZXJlbmNlcyBpdHNl
bGYgKGV2ZW50dWFsbHkpLA0KICAgICtpdCBzaG91bGQgZmFpbCB3aXRoIGFuIGVycm9yIG1lc3Nh
Z2UuDQogICAgKyIiIg0KICAgICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3Nl
cnQgY29uZi5vbGRhc2tjb25maWcoKSAhPSAwDQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRlcnJf
bWF0Y2hlcygnZXhwZWN0ZWRfc3RkZXJyJykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29u
ZmlnL3Rlc3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVyciBi
L3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2NpcmN1bGFyX2V4cGFuc2lvbi9leHBl
Y3RlZF9zdGRlcnINCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAu
LmNkZTY4ZmENCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL3ByZXByb2Nlc3MvY2lyY3VsYXJfZXhwYW5zaW9uL2V4cGVjdGVkX3N0ZGVycg0KICAgIEBA
IC0wLDAgKzEgQEANCiAgICArS2NvbmZpZzo1OiBSZWN1cnNpdmUgdmFyaWFibGUgJ1gnIHJlZmVy
ZW5jZXMgaXRzZWxmIChldmVudHVhbGx5KQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25m
aWcvdGVzdHMvcHJlcHJvY2Vzcy9lc2NhcGUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0
cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi40ZTNmNDQ0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9LY29uZmlnDQogICAgQEAgLTAs
MCArMSw0NCBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAg
Kw0KICAgICsjIFNob3J0aGFuZA0KICAgICt3YXJuaW5nID0gJCh3YXJuaW5nLWlmLHksJCgxKSkN
CiAgICArDQogICAgKyMgWW91IGNhbiBub3QgcGFzcyBjb21tYXMgZGlyZWN0bHkgdG8gYSBmdW5j
dGlvbiBzaW5jZSB0aGV5IGFyZSB0cmVhdGVkIGFzDQogICAgKyMgZGVsaW1pdGVycy4gWW91IGNh
biB1c2UgdGhlIGZvbGxvd2luZyB0cmljayB0byBkbyBzby4NCiAgICArY29tbWEgICA6PSAsDQog
ICAgKyQod2FybmluZyxoZWxsbyQoY29tbWEpIHdvcmxkKQ0KICAgICsNCiAgICArIyBMaWtlIE1h
a2UsIHNpbmdsZSBxdW90ZXMsIGRvdWJsZSBxdW90ZXMsIHNwYWNlcyBhcmUgdHJlYXRlZCB2ZXJi
YXRpbS4NCiAgICArIyBUaGUgZm9sbG93aW5nIHByaW50cyB0aGUgdGV4dCBhcy1pcy4NCiAgICAr
JCh3YXJuaW5nLCAgJyAiICciICAgJyAnJycgIiciKQ0KICAgICsNCiAgICArIyBVbmxpa2UgTWFr
ZSwgJyQnIGhhcyBzcGVjaWFsIG1lYW5pbmcgb25seSB3aGVuIGl0IGlzIGZvbGxvd2VkIGJ5ICco
Jy4NCiAgICArIyBObyBuZWVkIHRvIGVzY2FwZSAnJCcgaXRzZWxmLg0KICAgICskKHdhcm5pbmcs
JCkNCiAgICArJCh3YXJuaW5nLCQkKQ0KICAgICskIDo9IDENCiAgICArJCh3YXJuaW5nLCQoJCkp
DQogICAgKw0KICAgICsjIFlvdSBuZWVkIGEgdHJpY2sgdG8gZXNjYXBlICckJyBmb2xsb3dlZCBi
eSAnKCcNCiAgICArIyBUaGUgZm9sbG93aW5nIHNob3VsZCBwcmludCAiJChYKSIuIEl0IHNob3Vs
ZCBub3QgYmUgZXhwYW5kZWQgZnVydGhlci4NCiAgICArZG9sbGFyIDo9ICQNCiAgICArJCh3YXJu
aW5nLCQoZG9sbGFyKShYKSkNCiAgICArDQogICAgKyMgWW91IG5lZWQgYSB0cmljayB0byB0cmVh
dCB1bmJhbGFuY2VkIHBhcmVudGhlc2VzLg0KICAgICsjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHBy
aW50ICIoIi4NCiAgICArbGVmdF9wYXJlbiA6PSAoDQogICAgKyQod2FybmluZywkKGxlZnRfcGFy
ZW4pKQ0KICAgICsNCiAgICArIyBBIHNpbXBsZSBleHBhbmRlZCBzaG91bGQgbm90IGJlIGV4cGFu
ZGVkIG11bHRpcGxlIHRpbWVzLg0KICAgICsjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByaW50ICIk
KFgpIi4gSXQgc2hvdWxkIG5vdCBiZSBleHBhbmRlZCBmdXJ0aGVyLg0KICAgICtZIDo9ICQoZG9s
bGFyKShYKQ0KICAgICskKHdhcm5pbmcsJChZKSkNCiAgICArDQogICAgKyMgVGhlIGZvbGxvd2lu
ZyBzaG91bGQgcHJpbnQgIiQoWCkiIGFzIHdlbGwuDQogICAgK1kgPSAkKGRvbGxhcikoWCkNCiAg
ICArJCh3YXJuaW5nLCQoWSkpDQogICAgKw0KICAgICsjIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHBy
aW50ICIkKCIuDQogICAgKyMgSXQgc2hvdWxkIG5vdCBiZSBlbWl0ICJ1bnRlcm1pbmF0ZWQgcmVm
ZXJlbmNlIiBlcnJvci4NCiAgICArdW50ZXJtaW5hdGVkIDo9ICQoZG9sbGFyKSgNCiAgICArJCh3
YXJuaW5nLCQodW50ZXJtaW5hdGVkKSkNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmln
L3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rl
c3RzL3ByZXByb2Nlc3MvZXNjYXBlL19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICBpbmRleCAwMDAwMDAwLi43ZWU4ZTc0DQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsr
KyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9jZXNzL2VzY2FwZS9fX2luaXRfXy5weQ0K
ICAgIEBAIC0wLDAgKzEsOCBAQA0KICAgICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt
Mi4wDQogICAgKyIiIg0KICAgICtFc2NhcGUgc2VxdWVuY2UgdGVzdHMuDQogICAgKyIiIg0KICAg
ICsNCiAgICArZGVmIHRlc3QoY29uZik6DQogICAgKyAgICBhc3NlcnQgY29uZi5vbGRhc2tjb25m
aWcoKSA9PSAwDQogICAgKyAgICBhc3NlcnQgY29uZi5zdGRlcnJfbWF0Y2hlcygnZXhwZWN0ZWRf
c3RkZXJyJykNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nl
c3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVyciBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9wcmVwcm9j
ZXNzL2VzY2FwZS9leHBlY3RlZF9zdGRlcnINCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAg
IGluZGV4IDAwMDAwMDAuLjFjMDA5NTcNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3Vw
cG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvZXNjYXBlL2V4cGVjdGVkX3N0ZGVycg0KICAg
IEBAIC0wLDAgKzEsMTAgQEANCiAgICArS2NvbmZpZzo5OiBoZWxsbywgd29ybGQNCiAgICArS2Nv
bmZpZzoxMzogICAnICIgJyIgICAnICcnJyAiJyINCiAgICArS2NvbmZpZzoxNzogJA0KICAgICtL
Y29uZmlnOjE4OiAkJA0KICAgICtLY29uZmlnOjIwOiAxDQogICAgK0tjb25maWc6MjU6ICQoWCkN
CiAgICArS2NvbmZpZzozMDogKA0KICAgICtLY29uZmlnOjM1OiAkKFgpDQogICAgK0tjb25maWc6
Mzk6ICQoWCkNCiAgICArS2NvbmZpZzo0NDogJCgNCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9r
Y29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZyBiL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL0tjb25maWcNCiAgICBuZXcgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjljZTJmOTUNCiAgICAtLS0gL2Rldi9udWxsDQogICAg
KysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvS2NvbmZpZw0K
ICAgIEBAIC0wLDAgKzEsNTMgQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMA0KICAgICsNCiAgICArIyBTaG9ydGhhbmQNCiAgICArd2FybmluZyA9ICQod2FybmluZy1p
Zix5LCQoMSkpDQogICAgKw0KICAgICsjIFNpbXBseSBleHBhbmRlZCB2YXJpYWJsZS4NCiAgICAr
WCA6PSAxDQogICAgK1NJTVBMRSA6PSAkKFgpDQogICAgK1ggOj0gMg0KICAgICskKHdhcm5pbmcs
U0lNUExFID0gJChTSU1QTEUpKQ0KICAgICsNCiAgICArIyBSZWN1cnNpdmVseSBleHBhbmRlZCB2
YXJpYWJsZS4NCiAgICArWCA6PSAxDQogICAgK1JFQ1VSU0lWRSA9ICQoWCkNCiAgICArWCA6PSAy
DQogICAgKyQod2FybmluZyxSRUNVUlNJVkUgPSAkKFJFQ1VSU0lWRSkpDQogICAgKw0KICAgICsj
IEFwcGVuZCBzb21ldGhpbmcgdG8gYSBzaW1wbHkgZXhwYW5kZWQgdmFyaWFibGUuDQogICAgK1kg
Oj0gMw0KICAgICtTSU1QTEUgKz0gJChZKQ0KICAgICtZIDo9IDQNCiAgICArJCh3YXJuaW5nLFNJ
TVBMRSA9ICQoU0lNUExFKSkNCiAgICArDQogICAgKyMgQXBwZW5kIHNvbWV0aGluZyB0byBhIHJl
Y3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlhYmxlLg0KICAgICtZIDo9IDMNCiAgICArUkVDVVJTSVZF
ICs9ICQoWSkNCiAgICArWSA6PSA0DQogICAgKyQod2FybmluZyxSRUNVUlNJVkUgPSAkKFJFQ1VS
U0lWRSkpDQogICAgKw0KICAgICsjIFVzZSArPSBvcGVyYXRvciB0byBhbiB1bmRlZmluZWQgdmFy
aWFibGUuDQogICAgKyMgVGhpcyB3b3JrcyBhcyBhIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkIHZhcmlh
YmxlLg0KICAgICtZIDo9IDMNCiAgICArVU5ERUZJTkVEX1ZBUklBQkxFICs9ICQoWSkNCiAgICAr
WSA6PSA0DQogICAgKyQod2FybmluZyxVTkRFRklORURfVkFSSUFCTEUgPSAkKFVOREVGSU5FRF9W
QVJJQUJMRSkpDQogICAgKw0KICAgICsjIFlvdSBjYW4gdXNlIHZhcmlhYmxlIHJlZmVyZW5jZXMg
Zm9yIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIGFzc2lnbm1lbnQgc3RhdGVtZW50Lg0KICAgICtYIDo9
IEENCiAgICArWSA6PSBCDQogICAgKyQoWCkkKFkpIDo9IDUNCiAgICArJCh3YXJuaW5nLEFCID0g
JChBQikpDQogICAgKw0KICAgICsjIFVzZXItZGVmaW5lZCBmdW5jdGlvbi4NCiAgICArZ3JlZXRp
bmcgPSAkKDEpLCBteSBuYW1lIGlzICQoMikuDQogICAgKyQod2FybmluZywkKGdyZWV0aW5nLEhl
bGxvLEpvaG4pKQ0KICAgICsNCiAgICArIyBUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBub3Qg
Y2hlY2tlZCBmb3IgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4NCiAgICArIyBJZiBzb21lIGFyZ3Vt
ZW50cyBhcmUgb3B0aW9uYWwsIGl0IGlzIHVzZWZ1bCB0byBwYXNzIGZld2VyIHBhcmFtZXRlcnMu
DQogICAgKyMgJCgyKSB3aWxsIGJlIGJsYW5rIGluIHRoaXMgY2FzZS4NCiAgICArJCh3YXJuaW5n
LCQoZ3JlZXRpbmcsSGVsbG8pKQ0KICAgICsNCiAgICArIyBVbnJlZmVyZW5jZWQgcGFyYW1ldGVy
cyBhcmUganVzdCBpZ25vcmVkLg0KICAgICskKHdhcm5pbmcsJChncmVldGluZyxIZWxsbyxKb2hu
LGlnbm9yZWQsaWdub3JlZCkpDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy90ZXN0
cy9wcmVwcm9jZXNzL3ZhcmlhYmxlL19faW5pdF9fLnB5IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAuLmU4OGIxNzANCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysr
IGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFyaWFibGUvX19pbml0X18ucHkN
CiAgICBAQCAtMCwwICsxLDggQEANCiAgICArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM
LTIuMA0KICAgICsiIiINCiAgICArVmFyaWFibGUgYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbiB0
ZXN0cy4NCiAgICArIiIiDQogICAgKw0KICAgICtkZWYgdGVzdChjb25mKToNCiAgICArICAgIGFz
c2VydCBjb25mLm9sZGFza2NvbmZpZygpID09IDANCiAgICArICAgIGFzc2VydCBjb25mLnN0ZGVy
cl9tYXRjaGVzKCdleHBlY3RlZF9zdGRlcnInKQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBlY3RlZF9zdGRlcnIgYi9zdXBwb3J0
L2tjb25maWcvdGVzdHMvcHJlcHJvY2Vzcy92YXJpYWJsZS9leHBlY3RlZF9zdGRlcnINCiAgICBu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmE0ODQxYzMNCiAgICAtLS0g
L2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3ByZXByb2Nlc3MvdmFy
aWFibGUvZXhwZWN0ZWRfc3RkZXJyDQogICAgQEAgLTAsMCArMSw5IEBADQogICAgK0tjb25maWc6
MTA6IFNJTVBMRSA9IDENCiAgICArS2NvbmZpZzoxNjogUkVDVVJTSVZFID0gMg0KICAgICtLY29u
ZmlnOjIyOiBTSU1QTEUgPSAxIDMNCiAgICArS2NvbmZpZzoyODogUkVDVVJTSVZFID0gMiA0DQog
ICAgK0tjb25maWc6MzU6IFVOREVGSU5FRF9WQVJJQUJMRSA9IDQNCiAgICArS2NvbmZpZzo0MTog
QUIgPSA1DQogICAgK0tjb25maWc6NDU6IEhlbGxvLCBteSBuYW1lIGlzIEpvaG4uDQogICAgK0tj
b25maWc6NTA6IEhlbGxvLCBteSBuYW1lIGlzIC4NCiAgICArS2NvbmZpZzo1MzogSGVsbG8sIG15
IG5hbWUgaXMgSm9obi4NCiAgICBkaWZmIC0tZ2l0IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3B5
dGVzdC5pbmkgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHl0ZXN0LmluaQ0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uODVkN2NlOA0KICAgIC0tLSAvZGV2L251
bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcHl0ZXN0LmluaQ0KICAgIEBAIC0w
LDAgKzEsNyBAQA0KICAgICtbcHl0ZXN0XQ0KICAgICthZGRvcHRzID0gLS12ZXJib3NlDQogICAg
Kw0KICAgICsjIFB5dGVzdCByZXF1aXJlcyB0aGF0IHRlc3QgZmlsZXMgaGF2ZSB1bmlxdWUgbmFt
ZXMsIGJlY2F1c2UgcHl0ZXN0IGltcG9ydHMNCiAgICArIyB0aGVtIGFzIHRvcC1sZXZlbCBtb2R1
bGVzLiAgSXQgaXMgc2lsbHkgdG8gcHJlZml4IG9yIHN1ZmZpeCBhIHRlc3QgZmlsZSB3aXRoDQog
ICAgKyMgdGhlIGRpcmVjdG9yeSBuYW1lIHRoYXQgY29udGFpbnMgaXQuICBVc2UgX19pbml0X18u
cHkgZm9yIGFsbCB0ZXN0IGZpbGVzLg0KICAgICtweXRob25fZmlsZXMgPSBfX2luaXRfXy5weQ0K
ICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNl
L0tjb25maWcgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL0tjb25m
aWcNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjgzNTBkZTcN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRf
bmVzdGVkX2Nob2ljZS9LY29uZmlnDQogICAgQEAgLTAsMCArMSwzNSBAQA0KICAgICsjIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQogICAgKw0KICAgICtjaG9pY2UNCiAgICArCXBy
b21wdCAiY2hvaWNlIg0KICAgICsNCiAgICArY29uZmlnIEENCiAgICArCWJvb2wgIkEiDQogICAg
Kw0KICAgICtjb25maWcgQg0KICAgICsJYm9vbCAiQiINCiAgICArDQogICAgK2lmIEINCiAgICAr
Y2hvaWNlDQogICAgKwlwcm9tcHQgInN1YiBjaG9pY2UiDQogICAgKw0KICAgICtjb25maWcgQw0K
ICAgICsJYm9vbCAiQyINCiAgICArDQogICAgK2NvbmZpZyBEDQogICAgKwlib29sICJEIg0KICAg
ICsNCiAgICAraWYgRA0KICAgICtjaG9pY2UNCiAgICArCXByb21wdCAic3Vic3ViIGNob2ljZSIN
CiAgICArDQogICAgK2NvbmZpZyBFDQogICAgKwlib29sICJFIg0KICAgICsNCiAgICArZW5kY2hv
aWNlDQogICAgK2VuZGlmICMgRA0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgK2VuZGlmICMg
Qg0KICAgICsNCiAgICArZW5kY2hvaWNlDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZp
Zy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18ucHkgYi9zdXBwb3J0L2tjb25maWcv
dGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL19faW5pdF9fLnB5DQogICAgbmV3IGZpbGUgbW9kZSAx
MDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi45ZTRiMmRiDQogICAgLS0tIC9kZXYvbnVsbA0KICAg
ICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvX19pbml0X18u
cHkNCiAgICBAQCAtMCwwICsxLDE3IEBADQogICAgKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEdQTC0yLjANCiAgICArIiIiDQogICAgK1NldCByYW5kb20gdmFsdWVzIHJlY3Vyc2l2ZWx5IGlu
IG5lc3RlZCBjaG9pY2VzLg0KICAgICsNCiAgICArS2NvbmZpZyBjYW4gY3JlYXRlIGEgY2hvaWNl
LWluLWNob2ljZSBzdHJ1Y3R1cmUgYnkgdXNpbmcgJ2lmJyBzdGF0ZW1lbnQuDQogICAgK3JhbmRj
b25maWcgc2hvdWxkIGNvcnJlY3RseSBzZXQgcmFuZG9tIGNob2ljZSB2YWx1ZXMuDQogICAgKw0K
ICAgICtSZWxhdGVkIExpbnV4IGNvbW1pdDogM2I5YTE5ZTA4OTYwZTVjZGFkNTI1Mzk5ODYzNzY1
M2U1OTJhM2MyOQ0KICAgICsiIiINCiAgICArDQogICAgKw0KICAgICtkZWYgdGVzdChjb25mKToN
CiAgICArICAgIGZvciBpIGluIHJhbmdlKDIwKToNCiAgICArICAgICAgICBhc3NlcnQgY29uZi5y
YW5kY29uZmlnKCkgPT0gMA0KICAgICsgICAgICAgIGFzc2VydCAoY29uZi5jb25maWdfY29udGFp
bnMoJ2V4cGVjdGVkX3N0ZG91dDAnKSBvcg0KICAgICsgICAgICAgICAgICAgICAgY29uZi5jb25m
aWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dDEnKSBvcg0KICAgICsgICAgICAgICAgICAgICAg
Y29uZi5jb25maWdfY29udGFpbnMoJ2V4cGVjdGVkX3N0ZG91dDInKSkNCiAgICBkaWZmIC0tZ2l0
IGEvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRv
dXQwIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3RzL3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9z
dGRvdXQwDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4wNTQ1
MGYzDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3N1cHBvcnQva2NvbmZpZy90ZXN0cy9y
YW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MA0KICAgIEBAIC0wLDAgKzEsMiBAQA0K
ICAgICtDT05GSUdfQT15DQogICAgKyMgQ09ORklHX0IgaXMgbm90IHNldA0KICAgIGRpZmYgLS1n
aXQgYS9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVkX3N0
ZG91dDEgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0ZWRfY2hvaWNlL2V4cGVjdGVk
X3N0ZG91dDENCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjM3
YWIyOTUNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3Rlc3Rz
L3JhbmRfbmVzdGVkX2Nob2ljZS9leHBlY3RlZF9zdGRvdXQxDQogICAgQEAgLTAsMCArMSw0IEBA
DQogICAgKyMgQ09ORklHX0EgaXMgbm90IHNldA0KICAgICtDT05GSUdfQj15DQogICAgK0NPTkZJ
R19DPXkNCiAgICArIyBDT05GSUdfRCBpcyBub3Qgc2V0DQogICAgZGlmZiAtLWdpdCBhL3N1cHBv
cnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0MiBiL3N1
cHBvcnQva2NvbmZpZy90ZXN0cy9yYW5kX25lc3RlZF9jaG9pY2UvZXhwZWN0ZWRfc3Rkb3V0Mg0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uODQ5ZmY0Nw0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdGVzdHMvcmFuZF9uZXN0
ZWRfY2hvaWNlL2V4cGVjdGVkX3N0ZG91dDINCiAgICBAQCAtMCwwICsxLDUgQEANCiAgICArIyBD
T05GSUdfQSBpcyBub3Qgc2V0DQogICAgK0NPTkZJR19CPXkNCiAgICArIyBDT05GSUdfQyBpcyBu
b3Qgc2V0DQogICAgK0NPTkZJR19EPXkNCiAgICArQ09ORklHX0U9eQ0KICAgIGRpZmYgLS1naXQg
YS9zdXBwb3J0L2tjb25maWcvdXRpbC5jIGIvc3VwcG9ydC9rY29uZmlnL3V0aWwuYw0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMjk1ODUzOQ0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9zdXBwb3J0L2tjb25maWcvdXRpbC5jDQogICAgQEAgLTAsMCAr
MSwxMjkgQEANCiAgICArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAgICAr
LyoNCiAgICArICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgUm9tYW4gWmlwcGVsIDx6aXBwZWxA
bGludXgtbTY4ay5vcmc+DQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwMi0yMDA1IFNhbSBSYXZu
Ym9yZyA8c2FtQHJhdm5ib3JnLm9yZz4NCiAgICArICovDQogICAgKw0KICAgICsjaW5jbHVkZSA8
c3RkYXJnLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmlu
Zy5oPg0KICAgICsjaW5jbHVkZSAibGtjLmgiDQogICAgKw0KICAgICsvKiBmaWxlIGFscmVhZHkg
cHJlc2VudCBpbiBsaXN0PyBJZiBub3QgYWRkIGl0ICovDQogICAgK3N0cnVjdCBmaWxlICpmaWxl
X2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQ0KICAgICt7DQogICAgKwlzdHJ1Y3QgZmlsZSAqZmls
ZTsNCiAgICArDQogICAgKwlmb3IgKGZpbGUgPSBmaWxlX2xpc3Q7IGZpbGU7IGZpbGUgPSBmaWxl
LT5uZXh0KSB7DQogICAgKwkJaWYgKCFzdHJjbXAobmFtZSwgZmlsZS0+bmFtZSkpIHsNCiAgICAr
CQkJcmV0dXJuIGZpbGU7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCWZpbGUgPSB4
bWFsbG9jKHNpemVvZigqZmlsZSkpOw0KICAgICsJbWVtc2V0KGZpbGUsIDAsIHNpemVvZigqZmls
ZSkpOw0KICAgICsJZmlsZS0+bmFtZSA9IHhzdHJkdXAobmFtZSk7DQogICAgKwlmaWxlLT5uZXh0
ID0gZmlsZV9saXN0Ow0KICAgICsJZmlsZV9saXN0ID0gZmlsZTsNCiAgICArCXJldHVybiBmaWxl
Ow0KICAgICt9DQogICAgKw0KICAgICsvKiBBbGxvY2F0ZSBpbml0aWFsIGdyb3dhYmxlIHN0cmlu
ZyAqLw0KICAgICtzdHJ1Y3QgZ3N0ciBzdHJfbmV3KHZvaWQpDQogICAgK3sNCiAgICArCXN0cnVj
dCBnc3RyIGdzOw0KICAgICsJZ3MucyA9IHhtYWxsb2Moc2l6ZW9mKGNoYXIpICogNjQpOw0KICAg
ICsJZ3MubGVuID0gNjQ7DQogICAgKwlncy5tYXhfd2lkdGggPSAwOw0KICAgICsJc3RyY3B5KGdz
LnMsICJcMCIpOw0KICAgICsJcmV0dXJuIGdzOw0KICAgICt9DQogICAgKw0KICAgICsvKiBGcmVl
IHN0b3JhZ2UgZm9yIGdyb3dhYmxlIHN0cmluZyAqLw0KICAgICt2b2lkIHN0cl9mcmVlKHN0cnVj
dCBnc3RyICpncykNCiAgICArew0KICAgICsJaWYgKGdzLT5zKQ0KICAgICsJCWZyZWUoZ3MtPnMp
Ow0KICAgICsJZ3MtPnMgPSBOVUxMOw0KICAgICsJZ3MtPmxlbiA9IDA7DQogICAgK30NCiAgICAr
DQogICAgKy8qIEFwcGVuZCB0byBncm93YWJsZSBzdHJpbmcgKi8NCiAgICArdm9pZCBzdHJfYXBw
ZW5kKHN0cnVjdCBnc3RyICpncywgY29uc3QgY2hhciAqcykNCiAgICArew0KICAgICsJc2l6ZV90
IGw7DQogICAgKwlpZiAocykgew0KICAgICsJCWwgPSBzdHJsZW4oZ3MtPnMpICsgc3RybGVuKHMp
ICsgMTsNCiAgICArCQlpZiAobCA+IGdzLT5sZW4pIHsNCiAgICArCQkJZ3MtPnMgPSB4cmVhbGxv
Yyhncy0+cywgbCk7DQogICAgKwkJCWdzLT5sZW4gPSBsOw0KICAgICsJCX0NCiAgICArCQlzdHJj
YXQoZ3MtPnMsIHMpOw0KICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKiBBcHBlbmQgcHJp
bnRmIGZvcm1hdHRlZCBzdHJpbmcgdG8gZ3Jvd2FibGUgc3RyaW5nICovDQogICAgK3ZvaWQgc3Ry
X3ByaW50ZihzdHJ1Y3QgZ3N0ciAqZ3MsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQ0KICAgICt7DQog
ICAgKwl2YV9saXN0IGFwOw0KICAgICsJY2hhciBzWzEwMDAwXTsgLyogYmlnIGVub3VnaC4uLiAq
Lw0KICAgICsJdmFfc3RhcnQoYXAsIGZtdCk7DQogICAgKwl2c25wcmludGYocywgc2l6ZW9mKHMp
LCBmbXQsIGFwKTsNCiAgICArCXN0cl9hcHBlbmQoZ3MsIHMpOw0KICAgICsJdmFfZW5kKGFwKTsN
CiAgICArfQ0KICAgICsNCiAgICArLyogUmV0cmlldmUgdmFsdWUgb2YgZ3Jvd2FibGUgc3RyaW5n
ICovDQogICAgK2NvbnN0IGNoYXIgKnN0cl9nZXQoc3RydWN0IGdzdHIgKmdzKQ0KICAgICt7DQog
ICAgKwlyZXR1cm4gZ3MtPnM7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgKnhtYWxsb2Moc2l6
ZV90IHNpemUpDQogICAgK3sNCiAgICArCXZvaWQgKnAgPSBtYWxsb2Moc2l6ZSk7DQogICAgKwlp
ZiAocCkNCiAgICArCQlyZXR1cm4gcDsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1l
bW9yeS5cbiIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCAqeGNh
bGxvYyhzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplKQ0KICAgICt7DQogICAgKwl2b2lkICpwID0g
Y2FsbG9jKG5tZW1iLCBzaXplKTsNCiAgICArCWlmIChwKQ0KICAgICsJCXJldHVybiBwOw0KICAg
ICsJZnByaW50ZihzdGRlcnIsICJPdXQgb2YgbWVtb3J5LlxuIik7DQogICAgKwlleGl0KDEpOw0K
ICAgICt9DQogICAgKw0KICAgICt2b2lkICp4cmVhbGxvYyh2b2lkICpwLCBzaXplX3Qgc2l6ZSkN
CiAgICArew0KICAgICsJcCA9IHJlYWxsb2MocCwgc2l6ZSk7DQogICAgKwlpZiAocCkNCiAgICAr
CQlyZXR1cm4gcDsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5cbiIpOw0K
ICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgICsNCiAgICArY2hhciAqeHN0cmR1cChjb25zdCBj
aGFyICpzKQ0KICAgICt7DQogICAgKwljaGFyICpwOw0KICAgICsNCiAgICArCXAgPSBzdHJkdXAo
cyk7DQogICAgKwlpZiAocCkNCiAgICArCQlyZXR1cm4gcDsNCiAgICArCWZwcmludGYoc3RkZXJy
LCAiT3V0IG9mIG1lbW9yeS5cbiIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgICsNCiAg
ICArY2hhciAqeHN0cm5kdXAoY29uc3QgY2hhciAqcywgc2l6ZV90IG4pDQogICAgK3sNCiAgICAr
CWNoYXIgKnA7DQogICAgKw0KICAgICsJcCA9IHN0cm5kdXAocywgbik7DQogICAgKwlpZiAocCkN
CiAgICArCQlyZXR1cm4gcDsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiT3V0IG9mIG1lbW9yeS5c
biIpOw0KICAgICsJZXhpdCgxKTsNCiAgICArfQ0KICAgIGRpZmYgLS1naXQgYS9zdXBwb3J0L2tj
b25maWcvemNvbmYubGV4LmMgYi9zdXBwb3J0L2tjb25maWcvemNvbmYubGV4LmMNCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmIyNTg3NzYNCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvc3VwcG9ydC9rY29uZmlnL3pjb25mLmxleC5jDQogICAgQEAgLTAs
MCArMSwyODIwIEBADQogICAgKw0KICAgICsjZGVmaW5lICBZWV9JTlRfQUxJR05FRCBzaG9ydCBp
bnQNCiAgICArDQogICAgKy8qIEEgbGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICov
DQogICAgKw0KICAgICsjZGVmaW5lIEZMRVhfU0NBTk5FUg0KICAgICsjZGVmaW5lIFlZX0ZMRVhf
TUFKT1JfVkVSU0lPTiAyDQogICAgKyNkZWZpbmUgWVlfRkxFWF9NSU5PUl9WRVJTSU9OIDYNCiAg
ICArI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMQ0KICAgICsjaWYgWVlfRkxFWF9T
VUJNSU5PUl9WRVJTSU9OID4gMA0KICAgICsjZGVmaW5lIEZMRVhfQkVUQQ0KICAgICsjZW5kaWYN
CiAgICArDQogICAgKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9y
IGNvbXBpbGVyLXNwZWNpZmljIGlzc3Vlcy4gKi8NCiAgICArDQogICAgKy8qIGJlZ2luIHN0YW5k
YXJkIEMgaGVhZGVycy4gKi8NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyNpbmNsdWRl
IDxzdHJpbmcuaD4NCiAgICArI2luY2x1ZGUgPGVycm5vLmg+DQogICAgKyNpbmNsdWRlIDxzdGRs
aWIuaD4NCiAgICArDQogICAgKy8qIGVuZCBzdGFuZGFyZCBDIGhlYWRlcnMuICovDQogICAgKw0K
ICAgICsvKiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLw0KICAgICsNCiAgICArI2lm
bmRlZiBGTEVYSU5UX0gNCiAgICArI2RlZmluZSBGTEVYSU5UX0gNCiAgICArDQogICAgKy8qIEM5
OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBu
b3QuICovDQogICAgKw0KICAgICsjaWYgZGVmaW5lZCAoX19TVERDX1ZFUlNJT05fXykgJiYgX19T
VERDX1ZFUlNJT05fXyA+PSAxOTk5MDFMDQogICAgKw0KICAgICsvKiBDOTkgc2F5cyB0byBkZWZp
bmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLA0KICAgICsg
KiBpZiB5b3Ugd2FudCB0aGUgbGltaXQgKG1heC9taW4pIG1hY3JvcyBmb3IgaW50IHR5cGVzLiAN
CiAgICArICovDQogICAgKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUw0KICAgICsjZGVmaW5l
IF9fU1REQ19MSU1JVF9NQUNST1MgMQ0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpbmNsdWRl
IDxpbnR0eXBlcy5oPg0KICAgICt0eXBlZGVmIGludDhfdCBmbGV4X2ludDhfdDsNCiAgICArdHlw
ZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsNCiAgICArdHlwZWRlZiBpbnQxNl90IGZsZXhfaW50
MTZfdDsNCiAgICArdHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90Ow0KICAgICt0eXBlZGVm
IGludDMyX3QgZmxleF9pbnQzMl90Ow0KICAgICt0eXBlZGVmIHVpbnQzMl90IGZsZXhfdWludDMy
X3Q7DQogICAgKyNlbHNlDQogICAgK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7DQog
ICAgK3R5cGVkZWYgc2hvcnQgaW50IGZsZXhfaW50MTZfdDsNCiAgICArdHlwZWRlZiBpbnQgZmxl
eF9pbnQzMl90Ow0KICAgICt0eXBlZGVmIHVuc2lnbmVkIGNoYXIgZmxleF91aW50OF90OyANCiAg
ICArdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgZmxleF91aW50MTZfdDsNCiAgICArdHlwZWRl
ZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsNCiAgICArDQogICAgKy8qIExpbWl0cyBvZiBp
bnRlZ3JhbCB0eXBlcy4gKi8NCiAgICArI2lmbmRlZiBJTlQ4X01JTg0KICAgICsjZGVmaW5lIElO
VDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIElO
VDE2X01JTg0KICAgICsjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0zMjc2Ny0xKQ0K
ICAgICsjZW5kaWYNCiAgICArI2lmbmRlZiBJTlQzMl9NSU4NCiAgICArI2RlZmluZSBJTlQzMl9N
SU4gICAgICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQ0KICAgICsjZW5kaWYNCiAgICArI2lmbmRl
ZiBJTlQ4X01BWA0KICAgICsjZGVmaW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykNCiAg
ICArI2VuZGlmDQogICAgKyNpZm5kZWYgSU5UMTZfTUFYDQogICAgKyNkZWZpbmUgSU5UMTZfTUFY
ICAgICAgICAgICAgICAoMzI3NjcpDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIElOVDMyX01B
WA0KICAgICsjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcpDQogICAg
KyNlbmRpZg0KICAgICsjaWZuZGVmIFVJTlQ4X01BWA0KICAgICsjZGVmaW5lIFVJTlQ4X01BWCAg
ICAgICAgICAgICAgKDI1NVUpDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIFVJTlQxNl9NQVgN
CiAgICArI2RlZmluZSBVSU5UMTZfTUFYICAgICAgICAgICAgICg2NTUzNVUpDQogICAgKyNlbmRp
Zg0KICAgICsjaWZuZGVmIFVJTlQzMl9NQVgNCiAgICArI2RlZmluZSBVSU5UMzJfTUFYICAgICAg
ICAgICAgICg0Mjk0OTY3Mjk1VSkNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjZW5kaWYgLyog
ISBDOTkgKi8NCiAgICArDQogICAgKyNlbmRpZiAvKiAhIEZMRVhJTlRfSCAqLw0KICAgICsNCiAg
ICArLyogVE9ETzogdGhpcyBpcyBhbHdheXMgZGVmaW5lZCwgc28gaW5saW5lIGl0ICovDQogICAg
KyNkZWZpbmUgeXljb25zdCBjb25zdA0KICAgICsNCiAgICArI2lmIGRlZmluZWQoX19HTlVDX18p
ICYmIF9fR05VQ19fID49IDMNCiAgICArI2RlZmluZSB5eW5vcmV0dXJuIF9fYXR0cmlidXRlX18o
KF9fbm9yZXR1cm5fXykpDQogICAgKyNlbHNlDQogICAgKyNkZWZpbmUgeXlub3JldHVybg0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKy8qIFJldHVybmVkIHVwb24gZW5kLW9mLWZpbGUuICovDQog
ICAgKyNkZWZpbmUgWVlfTlVMTCAwDQogICAgKw0KICAgICsvKiBQcm9tb3RlcyBhIHBvc3NpYmx5
IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZA0KICAgICsgKiBp
bnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMg
bmVnYXRpdmUsDQogICAgKyAqIHdlIHdhbnQgdG8gaW5zdGVhZCB0cmVhdCBpdCBhcyBhbiA4LWJp
dCB1bnNpZ25lZCBjaGFyLCBoZW5jZSB0aGUNCiAgICArICogZG91YmxlIGNhc3QuDQogICAgKyAq
Lw0KICAgICsjZGVmaW5lIFlZX1NDX1RPX1VJKGMpICgodW5zaWduZWQgaW50KSAodW5zaWduZWQg
Y2hhcikgYykNCiAgICArDQogICAgKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAgVGhpcyBt
YWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwNCiAgICArICogYnV0IHdlIGRv
IGl0IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNz
DQogICAgKyAqIGRlZmluaXRpb24gb2YgQkVHSU4uDQogICAgKyAqLw0KICAgICsjZGVmaW5lIEJF
R0lOICh5eV9zdGFydCkgPSAxICsgMiAqDQogICAgKw0KICAgICsvKiBUcmFuc2xhdGUgdGhlIGN1
cnJlbnQgc3RhcnQgc3RhdGUgaW50byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZA0K
ICAgICsgKiB0byBCRUdJTiB0byByZXR1cm4gdG8gdGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxp
YXMgaXMgZm9yIGxleA0KICAgICsgKiBjb21wYXRpYmlsaXR5Lg0KICAgICsgKi8NCiAgICArI2Rl
ZmluZSBZWV9TVEFSVCAoKCh5eV9zdGFydCkgLSAxKSAvIDIpDQogICAgKyNkZWZpbmUgWVlTVEFU
RSBZWV9TVEFSVA0KICAgICsNCiAgICArLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2Yg
YSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8NCiAgICArI2RlZmluZSBZWV9TVEFURV9FT0Yoc3RhdGUp
IChZWV9FTkRfT0ZfQlVGRkVSICsgc3RhdGUgKyAxKQ0KICAgICsNCiAgICArLyogU3BlY2lhbCBh
Y3Rpb24gbWVhbmluZyAic3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8NCiAgICArI2Rl
ZmluZSBZWV9ORVdfRklMRSB5eXJlc3RhcnQoeXlpbiAgKQ0KICAgICsNCiAgICArI2RlZmluZSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgMA0KICAgICsNCiAgICArLyogU2l6ZSBvZiBkZWZhdWx0IGlu
cHV0IGJ1ZmZlci4gKi8NCiAgICArI2lmbmRlZiBZWV9CVUZfU0laRQ0KICAgICsjaWZkZWYgX19p
YTY0X18NCiAgICArLyogT24gSUEtNjQsIHRoZSBidWZmZXIgc2l6ZSBpcyAxNmssIG5vdCA4ay4N
CiAgICArICogTW9yZW92ZXIsIFlZX0JVRl9TSVpFIGlzIDIqWVlfUkVBRF9CVUZfU0laRSBpbiB0
aGUgZ2VuZXJhbCBjYXNlLg0KICAgICsgKiBEaXR0byBmb3IgdGhlIF9faWE2NF9fIGNhc2UgYWNj
b3JkaW5nbHkuDQogICAgKyAqLw0KICAgICsjZGVmaW5lIFlZX0JVRl9TSVpFIDMyNzY4DQogICAg
KyNlbHNlDQogICAgKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQNCiAgICArI2VuZGlmIC8qIF9f
aWE2NF9fICovDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogVGhlIHN0YXRlIGJ1ZiBtdXN0
IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFjdGVyIGluIHRoZSBt
YWluIGJ1ZmZlci4NCiAgICArICovDQogICAgKyNkZWZpbmUgWVlfU1RBVEVfQlVGX1NJWkUgICAo
KFlZX0JVRl9TSVpFICsgMikgKiBzaXplb2YoeXlfc3RhdGVfdHlwZSkpDQogICAgKw0KICAgICsj
aWZuZGVmIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRFDQogICAgKyNkZWZpbmUgWVlfVFlQRURF
Rl9ZWV9CVUZGRVJfU1RBVEUNCiAgICArdHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZ
WV9CVUZGRVJfU1RBVEU7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmbmRlZiBZWV9UWVBF
REVGX1lZX1NJWkVfVA0KICAgICsjZGVmaW5lIFlZX1RZUEVERUZfWVlfU0laRV9UDQogICAgK3R5
cGVkZWYgc2l6ZV90IHl5X3NpemVfdDsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICtleHRlcm4g
aW50IHl5bGVuZzsNCiAgICArDQogICAgK2V4dGVybiBGSUxFICp5eWluLCAqeXlvdXQ7DQogICAg
Kw0KICAgICsjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwDQogICAgKyNkZWZpbmUgRU9C
X0FDVF9FTkRfT0ZfRklMRSAxDQogICAgKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDINCiAg
ICArDQogICAgKyAgICAvKiBOb3RlOiBXZSBzcGVjaWZpY2FsbHkgb21pdCB0aGUgdGVzdCBmb3Ig
eXlfcnVsZV9jYW5fbWF0Y2hfZW9sIGJlY2F1c2UgaXQgcmVxdWlyZXMNCiAgICArICAgICAqICAg
ICAgIGFjY2VzcyB0byB0aGUgbG9jYWwgdmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5eWxlc3MoKSBp
cyBhIG1hY3JvLCBpdCB3b3VsZCBicmVhaw0KICAgICsgICAgICogICAgICAgZXhpc3Rpbmcgc2Nh
bm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VUU0lERSB5eWxleC4NCiAgICArICAgICAq
ICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRvIG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJ
IHRyaWVkIHRoYXQsIGFuZCBzYXcNCiAgICArICAgICAqICAgICAgIGEgNSUgcGVyZm9ybWFuY2Ug
aGl0IGluIGEgbm9uLXl5bGluZW5vIHNjYW5uZXIsIGJlY2F1c2UgeXlfYWN0IGlzDQogICAgKyAg
ICAgKiAgICAgICBub3JtYWxseSBkZWNsYXJlZCBhcyBhIHJlZ2lzdGVyIHZhcmlhYmxlLS0gc28g
aXQgaXMgbm90IHdvcnRoIGl0Lg0KICAgICsgICAgICovDQogICAgKyAgICAjZGVmaW5lICBZWV9M
RVNTX0xJTkVOTyhuKSBcDQogICAgKyAgICAgICAgICAgIGRvIHsgXA0KICAgICsgICAgICAgICAg
ICAgICAgaW50IHl5bDtcDQogICAgKyAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwg
PCB5eWxlbmc7ICsreXlsIClcDQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgKCB5eXRleHRb
eXlsXSA9PSAnXG4nIClcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87
XA0KICAgICsgICAgICAgICAgICB9d2hpbGUoMCkNCiAgICArICAgICNkZWZpbmUgWVlfTElORU5P
X1JFV0lORF9UTyhkc3QpIFwNCiAgICArICAgICAgICAgICAgZG8ge1wNCiAgICArICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIgKnA7XA0KICAgICsgICAgICAgICAgICAgICAgZm9yICggcCA9IHl5
X2NwLTE7IHAgPj0gKGRzdCk7IC0tcClcDQogICAgKyAgICAgICAgICAgICAgICAgICAgaWYgKCAq
cCA9PSAnXG4nIClcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XA0K
ICAgICsgICAgICAgICAgICB9d2hpbGUoMCkNCiAgICArICAgIA0KICAgICsvKiBSZXR1cm4gYWxs
IGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFjdGVycyBiYWNrIHRvIHRoZSBpbnB1dCBz
dHJlYW0uICovDQogICAgKyNkZWZpbmUgeXlsZXNzKG4pIFwNCiAgICArCWRvIFwNCiAgICArCQl7
IFwNCiAgICArCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwNCiAg
ICArICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXA0KICAgICsgICAgICAgIFlZ
X0xFU1NfTElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wNCiAgICArCQkqeXlfY3AgPSAoeXlfaG9s
ZF9jaGFyKTsgXA0KICAgICsJCVlZX1JFU1RPUkVfWVlfTU9SRV9PRkZTRVQgXA0KICAgICsJCSh5
eV9jX2J1Zl9wKSA9IHl5X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9B
REo7IFwNCiAgICArCQlZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWlu
ICovIFwNCiAgICArCQl9IFwNCiAgICArCXdoaWxlICggMCApDQogICAgKw0KICAgICsjZGVmaW5l
IHVucHV0KGMpIHl5dW5wdXQoIGMsICh5eXRleHRfcHRyKSAgKQ0KICAgICsNCiAgICArI2lmbmRl
ZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFDQogICAgKyNkZWZpbmUgWVlfU1RSVUNUX1lZX0JV
RkZFUl9TVEFURQ0KICAgICtzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlDQogICAgKwl7DQogICAgKwlG
SUxFICp5eV9pbnB1dF9maWxlOw0KICAgICsNCiAgICArCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlu
cHV0IGJ1ZmZlciAqLw0KICAgICsJY2hhciAqeXlfYnVmX3BvczsJCS8qIGN1cnJlbnQgcG9zaXRp
b24gaW4gaW5wdXQgYnVmZmVyICovDQogICAgKw0KICAgICsJLyogU2l6ZSBvZiBpbnB1dCBidWZm
ZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CDQogICAgKwkgKiBjaGFyYWN0
ZXJzLg0KICAgICsJICovDQogICAgKwlpbnQgeXlfYnVmX3NpemU7DQogICAgKw0KICAgICsJLyog
TnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBF
T0INCiAgICArCSAqIGNoYXJhY3RlcnMuDQogICAgKwkgKi8NCiAgICArCWludCB5eV9uX2NoYXJz
Ow0KICAgICsNCiAgICArCS8qIFdoZXRoZXIgd2UgIm93biIgdGhlIGJ1ZmZlciAtIGkuZS4sIHdl
IGtub3cgd2UgY3JlYXRlZCBpdCwNCiAgICArCSAqIGFuZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdy
b3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvDQogICAgKwkgKiBkZWxldGUgaXQuDQogICAg
KwkgKi8NCiAgICArCWludCB5eV9pc19vdXJfYnVmZmVyOw0KICAgICsNCiAgICArCS8qIFdoZXRo
ZXIgdGhpcyBpcyBhbiAiaW50ZXJhY3RpdmUiIGlucHV0IHNvdXJjZTsgaWYgc28sIGFuZA0KICAg
ICsJICogaWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNl
IGdldGMoKQ0KICAgICsJICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3Rv
cCBmZXRjaGluZyBpbnB1dCBhZnRlcg0KICAgICsJICogZWFjaCBuZXdsaW5lLg0KICAgICsJICov
DQogICAgKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7DQogICAgKw0KICAgICsJLyogV2hldGhlciB3
ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lLg0KICAgICsJ
ICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4dCBtYXRjaCwgb3Ro
ZXJ3aXNlDQogICAgKwkgKiBub3QuDQogICAgKwkgKi8NCiAgICArCWludCB5eV9hdF9ib2w7DQog
ICAgKw0KICAgICsgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8N
CiAgICArICAgIGludCB5eV9ic19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8NCiAg
ICArDQogICAgKwkvKiBXaGV0aGVyIHRvIHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hl
biB3ZSByZWFjaCB0aGUNCiAgICArCSAqIGVuZCBvZiBpdC4NCiAgICArCSAqLw0KICAgICsJaW50
IHl5X2ZpbGxfYnVmZmVyOw0KICAgICsNCiAgICArCWludCB5eV9idWZmZXJfc3RhdHVzOw0KICAg
ICsNCiAgICArI2RlZmluZSBZWV9CVUZGRVJfTkVXIDANCiAgICArI2RlZmluZSBZWV9CVUZGRVJf
Tk9STUFMIDENCiAgICArCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0
aWxsIHNvbWUgdGV4dCB0byBwcm9jZXNzDQogICAgKwkgKiB0aGVuIHdlIG1hcmsgdGhlIGJ1ZmZl
ciBhcyBZWV9FT0ZfUEVORElORywgdG8gaW5kaWNhdGUgdGhhdCB3ZQ0KICAgICsJICogc2hvdWxk
bid0IHRyeSByZWFkaW5nIGZyb20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0
DQogICAgKwkgKiBzdGlsbCBoYXZlIGEgYnVuY2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gs
IGJlY2F1c2Ugb2YNCiAgICArCSAqIHBvc3NpYmxlIGJhY2tpbmctdXAuDQogICAgKwkgKg0KICAg
ICsJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hhbmdlIHRoZSBzdGF0dXMg
dG8gIm5ldyINCiAgICArCSAqICh2aWEgeXlyZXN0YXJ0KCkpLCBzbyB0aGF0IHRoZSB1c2VyIGNh
biBjb250aW51ZSBzY2FubmluZyBieQ0KICAgICsJICoganVzdCBwb2ludGluZyB5eWluIGF0IGEg
bmV3IGlucHV0IGZpbGUuDQogICAgKwkgKi8NCiAgICArI2RlZmluZSBZWV9CVUZGRVJfRU9GX1BF
TkRJTkcgMg0KICAgICsNCiAgICArCX07DQogICAgKyNlbmRpZiAvKiAhWVlfU1RSVUNUX1lZX0JV
RkZFUl9TVEFURSAqLw0KICAgICsNCiAgICArLyogU3RhY2sgb2YgaW5wdXQgYnVmZmVycy4gKi8N
CiAgICArc3RhdGljIHNpemVfdCB5eV9idWZmZXJfc3RhY2tfdG9wID0gMDsgLyoqPCBpbmRleCBv
ZiB0b3Agb2Ygc3RhY2suICovDQogICAgK3N0YXRpYyBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX21h
eCA9IDA7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovDQogICAgK3N0YXRpYyBZWV9CVUZGRVJf
U1RBVEUgKiB5eV9idWZmZXJfc3RhY2sgPSBOVUxMOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAq
Lw0KICAgICsNCiAgICArLyogV2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIg
c3RhdGVzIGluIGNhc2UgaW4gdGhlDQogICAgKyAqIGZ1dHVyZSB3ZSB3YW50IHRvIHB1dCB0aGUg
YnVmZmVyIHN0YXRlcyBpbiBhIG1vcmUgZ2VuZXJhbA0KICAgICsgKiAic2Nhbm5lciBzdGF0ZSIu
DQogICAgKyAqDQogICAgKyAqIFJldHVybnMgdGhlIHRvcCBvZiB0aGUgc3RhY2ssIG9yIE5VTEwu
DQogICAgKyAqLw0KICAgICsjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggKHl5X2J1ZmZlcl9z
dGFjaykgXA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgID8gKHl5X2J1ZmZlcl9zdGFj
aylbKHl5X2J1ZmZlcl9zdGFja190b3ApXSBcDQogICAgKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBOVUxMKQ0KICAgICsNCiAgICArLyogU2FtZSBhcyBwcmV2aW91cyBtYWNybywgYnV0IHVz
ZWZ1bCB3aGVuIHdlIGtub3cgdGhhdCB0aGUgYnVmZmVyIHN0YWNrIGlzIG5vdA0KICAgICsgKiBO
VUxMIG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4NCiAg
ICArICovDQogICAgKyNkZWZpbmUgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFICh5eV9idWZmZXJf
c3RhY2spWyh5eV9idWZmZXJfc3RhY2tfdG9wKV0NCiAgICArDQogICAgKy8qIHl5X2hvbGRfY2hh
ciBob2xkcyB0aGUgY2hhcmFjdGVyIGxvc3Qgd2hlbiB5eXRleHQgaXMgZm9ybWVkLiAqLw0KICAg
ICtzdGF0aWMgY2hhciB5eV9ob2xkX2NoYXI7DQogICAgK3N0YXRpYyBpbnQgeXlfbl9jaGFyczsJ
CS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlYWQgaW50byB5eV9jaF9idWYgKi8NCiAgICAraW50
IHl5bGVuZzsNCiAgICArDQogICAgKy8qIFBvaW50cyB0byBjdXJyZW50IGNoYXJhY3RlciBpbiBi
dWZmZXIuICovDQogICAgK3N0YXRpYyBjaGFyICp5eV9jX2J1Zl9wID0gTlVMTDsNCiAgICArc3Rh
dGljIGludCB5eV9pbml0ID0gMDsJCS8qIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplICov
DQogICAgK3N0YXRpYyBpbnQgeXlfc3RhcnQgPSAwOwkvKiBzdGFydCBzdGF0ZSBudW1iZXIgKi8N
CiAgICArDQogICAgKy8qIEZsYWcgd2hpY2ggaXMgdXNlZCB0byBhbGxvdyB5eXdyYXAoKSdzIHRv
IGRvIGJ1ZmZlciBzd2l0Y2hlcw0KICAgICsgKiBpbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSBmcmVz
aCB5eWluLiAgQSBiaXQgb2YgYSBoYWNrIC4uLg0KICAgICsgKi8NCiAgICArc3RhdGljIGludCB5
eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9lb2Y7DQogICAgKw0KICAgICt2b2lkIHl5cmVzdGFydCAo
RklMRSAqaW5wdXRfZmlsZSAgKTsNCiAgICArdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyIChZWV9C
VUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsNCiAgICArWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0
ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgICk7DQogICAgK3ZvaWQgeXlfZGVsZXRlX2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgICk7DQogICAgK3ZvaWQgeXlfZmx1c2hfYnVmZmVyIChZ
WV9CVUZGRVJfU1RBVEUgYiAgKTsNCiAgICArdm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9C
VUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAgKTsNCiAgICArdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUg
KHZvaWQgKTsNCiAgICArDQogICAgK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAo
dm9pZCApOw0KICAgICtzdGF0aWMgdm9pZCB5eV9sb2FkX2J1ZmZlcl9zdGF0ZSAodm9pZCApOw0K
ICAgICtzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAq
ZmlsZSAgKTsNCiAgICArDQogICAgKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1
ZmZlcihZWV9DVVJSRU5UX0JVRkZFUiApDQogICAgKw0KICAgICtZWV9CVUZGRVJfU1RBVEUgeXlf
c2Nhbl9idWZmZXIgKGNoYXIgKmJhc2UseXlfc2l6ZV90IHNpemUgICk7DQogICAgK1lZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgICk7DQogICAgK1lZ
X0JVRkZFUl9TVEFURSB5eV9zY2FuX2J5dGVzICh5eWNvbnN0IGNoYXIgKmJ5dGVzLGludCBsZW4g
ICk7DQogICAgKw0KICAgICt2b2lkICp5eWFsbG9jICh5eV9zaXplX3QgICk7DQogICAgK3ZvaWQg
Knl5cmVhbGxvYyAodm9pZCAqLHl5X3NpemVfdCAgKTsNCiAgICArdm9pZCB5eWZyZWUgKHZvaWQg
KiAgKTsNCiAgICArDQogICAgKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVmZmVy
DQogICAgKw0KICAgICsjZGVmaW5lIHl5X3NldF9pbnRlcmFjdGl2ZShpc19pbnRlcmFjdGl2ZSkg
XA0KICAgICsJeyBcDQogICAgKwlpZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXA0KICAgICsg
ICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsgXA0KICAgICsJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRSA9ICAgIFwNCiAgICArICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWlu
LFlZX0JVRl9TSVpFICk7IFwNCiAgICArCX0gXA0KICAgICsJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlzX2ludGVyYWN0aXZlOyBcDQogICAgKwl9DQogICAg
Kw0KICAgICsjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcDQogICAgKwl7IFwNCiAgICArCWlm
ICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wNCiAgICArICAgICAgICB5eWVuc3VyZV9idWZmZXJf
c3RhY2sgKCk7IFwNCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAgICBcDQogICAg
KyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSApOyBcDQogICAg
Kwl9IFwNCiAgICArCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRfYm9s
OyBcDQogICAgKwl9DQogICAgKw0KICAgICsjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2F0X2JvbCkNCiAgICArDQogICAgKy8qIEJlZ2luIHVzZXIgc2Vj
dDMgKi8NCiAgICArDQogICAgKyNkZWZpbmUgeXl3cmFwKCkgKC8qQ09OU1RDT05EKi8xKQ0KICAg
ICsjZGVmaW5lIFlZX1NLSVBfWVlXUkFQDQogICAgKw0KICAgICt0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgWVlfQ0hBUjsNCiAgICArDQogICAgK0ZJTEUgKnl5aW4gPSBOVUxMLCAqeXlvdXQgPSBOVUxM
Ow0KICAgICsNCiAgICArdHlwZWRlZiBpbnQgeXlfc3RhdGVfdHlwZTsNCiAgICArDQogICAgK2V4
dGVybiBpbnQgeXlsaW5lbm87DQogICAgKw0KICAgICtpbnQgeXlsaW5lbm8gPSAxOw0KICAgICsN
CiAgICArZXh0ZXJuIGNoYXIgKnl5dGV4dDsNCiAgICArI2lmZGVmIHl5dGV4dF9wdHINCiAgICAr
I3VuZGVmIHl5dGV4dF9wdHINCiAgICArI2VuZGlmDQogICAgKyNkZWZpbmUgeXl0ZXh0X3B0ciB5
eXRleHQNCiAgICArDQogICAgK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbXVsy
MV0gPQ0KICAgICsgICAgew0KICAgICsgICAgew0KICAgICsgICAgICAgIDAsICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAgIDAsDQogICAgKyAgICAgICAg
MCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwN
CiAgICArICAgICAgICAwDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAg
ICAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE0LCAgIDE0LCAgIDE3LCAgIDE0LCAgIDE0LCAg
IDE0LA0KICAgICsgICAgICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQsICAgMTQs
ICAgMTQsICAgMTQsICAgMTQsDQogICAgKyAgICAgICAxNA0KICAgICsgICAgfSwNCiAgICArDQog
ICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNCwgICAxNCwg
ICAxNywgICAxNCwgICAxNCwgICAxNCwNCiAgICArICAgICAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0
LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LCAgIDE0LA0KICAgICsgICAgICAgMTQNCiAg
ICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgMTgsICAgMTks
ICAgMjAsICAgMTgsICAgMTgsICAgMTgsICAgMjEsICAgMTgsICAgMTgsDQogICAgKw0KICAgICsg
ICAgICAgMTgsICAgMTgsICAgMjIsICAgMjMsICAgMTgsICAgMjQsICAgMTgsICAgMjUsICAgMTgs
ICAgMTgsDQogICAgKyAgICAgICAxOA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQog
ICAgKyAgICAgICAxMywgICAxOCwgICAxOSwgICAyMCwgICAxOCwgICAxOCwgICAxOCwgICAyMSwg
ICAxOCwgICAxOCwNCiAgICArICAgICAgIDE4LCAgIDE4LCAgIDIyLCAgIDIzLCAgIDE4LCAgIDI0
LCAgIDE4LCAgIDI1LCAgIDE4LCAgIDE4LA0KICAgICsgICAgICAgMTgNCiAgICArICAgIH0sDQog
ICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgMjYsICAgMjcsICAgMjgsICAgMjYs
ICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsDQogICAgKyAgICAgICAyNiwgICAyNiwgICAy
NiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwgICAyNiwNCiAgICArICAgICAg
IDI2DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDI2
LCAgIDI3LCAgIDI4LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LCAgIDI2LA0KICAgICsg
ICAgICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYsICAgMjYs
ICAgMjYsDQogICAgKw0KICAgICsgICAgICAgMjYNCiAgICArICAgIH0sDQogICAgKw0KICAgICsg
ICAgew0KICAgICsgICAgICAgMTMsICAgMjksICAgMjksICAgMzAsICAgMjksICAgMzEsICAgMjks
ICAgMzIsICAgMjksICAgMzEsDQogICAgKyAgICAgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAy
OSwgICAyOSwgICAyOSwgICAyOSwgICAyOSwgICAzMywNCiAgICArICAgICAgIDI5DQogICAgKyAg
ICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDI5LCAgIDI5LCAgIDMw
LCAgIDI5LCAgIDMxLCAgIDI5LCAgIDMyLCAgIDI5LCAgIDMxLA0KICAgICsgICAgICAgMjksICAg
MjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMjksICAgMzMsDQogICAg
KyAgICAgICAyOQ0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAx
MywgICAzNCwgICAzNSwgICAzNiwgICAzNywgICAzOCwgICAzOSwgICA0MCwgICA0MSwgICAzOCwN
CiAgICArICAgICAgIDQyLCAgIDQzLCAgIDM0LCAgIDQ0LCAgIDQ0LCAgIDM0LCAgIDQ1LCAgIDQ2
LCAgIDQ3LCAgIDQ4LA0KICAgICsgICAgICAgNDkNCiAgICArDQogICAgKyAgICB9LA0KICAgICsN
CiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDM3LCAgIDM4
LCAgIDM5LCAgIDQwLCAgIDQxLCAgIDM4LA0KICAgICsgICAgICAgNDIsICAgNDMsICAgMzQsICAg
NDQsICAgNDQsICAgMzQsICAgNDUsICAgNDYsICAgNDcsICAgNDgsDQogICAgKyAgICAgICA0OQ0K
ICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA1MCwgICA1
MSwgICA1MiwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwNCiAgICArICAgICAg
IDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUwLCAgIDUw
LA0KICAgICsgICAgICAgNTANCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsg
ICAgICAgMTMsICAgNTAsICAgNTEsICAgNTIsICAgNTAsICAgNTAsICAgNTAsICAgNTAsICAgNTAs
ICAgNTAsDQogICAgKyAgICAgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1MCwgICA1
MCwgICA1MCwgICA1MCwgICA1MCwNCiAgICArICAgICAgIDUwDQogICAgKyAgICB9LA0KICAgICsN
CiAgICArICAgIHsNCiAgICArICAgICAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEz
LCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLA0KICAgICsNCiAgICArICAgICAgLTEzLCAgLTEzLCAg
LTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLCAgLTEzLA0KICAgICsgICAg
ICAtMTMNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAt
MTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsICAtMTQsDQogICAg
KyAgICAgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0xNCwgIC0x
NCwgIC0xNCwNCiAgICArICAgICAgLTE0DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsN
CiAgICArICAgICAgIDEzLCAgLTE1LCAgIDUzLCAgIDU0LCAgLTE1LCAgLTE1LCAgIDU1LCAgLTE1
LCAgLTE1LCAgLTE1LA0KICAgICsgICAgICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsICAt
MTUsICAtMTUsICAtMTUsICAtMTUsICAtMTUsDQogICAgKyAgICAgIC0xNQ0KICAgICsgICAgfSwN
CiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC0xNiwgIC0xNiwgIC0xNiwgIC0x
NiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwgIC0xNiwNCiAgICArICAgICAgLTE2LCAgLTE2LCAg
LTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LCAgLTE2LA0KICAgICsNCiAg
ICArICAgICAgLTE2DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAg
IDEzLCAgIDU2LCAgIDU2LCAgIDU3LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2
LA0KICAgICsgICAgICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAgNTYsICAg
NTYsICAgNTYsICAgNTYsDQogICAgKyAgICAgICA1Ng0KICAgICsgICAgfSwNCiAgICArDQogICAg
KyAgICB7DQogICAgKyAgICAgICAxMywgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0xOCwgIC0x
OCwgIC0xOCwgIC0xOCwgIC0xOCwNCiAgICArICAgICAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAg
LTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LCAgLTE4LA0KICAgICsgICAgICAtMTgNCiAgICAr
ICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtMTksICAgNTgsICAt
MTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksICAtMTksDQogICAgKyAgICAgIC0xOSwg
IC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwgIC0xOSwNCiAg
ICArICAgICAgLTE5DQogICAgKw0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAg
KyAgICAgICAxMywgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0yMCwgIC0y
MCwgIC0yMCwNCiAgICArICAgICAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAgLTIwLCAg
LTIwLCAgLTIwLCAgLTIwLCAgLTIwLA0KICAgICsgICAgICAtMjANCiAgICArICAgIH0sDQogICAg
Kw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtMjEsICAtMjEsICAtMjEsICAtMjEsICAt
MjEsICAtMjEsICAgNTksICAtMjEsICAtMjEsDQogICAgKyAgICAgIC0yMSwgIC0yMSwgIC0yMSwg
ICA1OSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwgIC0yMSwNCiAgICArICAgICAgLTIx
DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTIyLCAg
LTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLCAgLTIyLA0KICAgICsgICAg
ICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAtMjIsICAgNjAsICAtMjIsICAt
MjIsDQogICAgKyAgICAgIC0yMg0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAg
KyAgICAgICAxMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywgICA1OSwgIC0y
MywgIC0yMywNCiAgICArDQogICAgKyAgICAgIC0yMywgIC0yMywgIC0yMywgICA2MSwgIC0yMywg
IC0yMywgIC0yMywgIC0yMywgIC0yMywgIC0yMywNCiAgICArICAgICAgLTIzDQogICAgKyAgICB9
LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTI0LCAgLTI0LCAgLTI0LCAg
LTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LCAgLTI0LA0KICAgICsgICAgICAtMjQsICAtMjQs
ICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAtMjQsICAgNjIsICAtMjQsICAtMjQsDQogICAgKyAg
ICAgIC0yNA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywg
IC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwgIC0yNSwNCiAg
ICArICAgICAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAgLTI1LCAg
LTI1LCAgLTI1LA0KICAgICsgICAgICAtMjUNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAg
ew0KICAgICsgICAgICAgMTMsICAgNjMsICAgNjMsICAtMjYsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsICAgNjMsDQogICAgKyAgICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywNCiAgICArDQogICAgKyAgICAgICA2Mw0KICAg
ICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC0yNywgICA2NCwg
ICA2NSwgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywgIC0yNywNCiAgICArICAgICAgLTI3
LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LCAgLTI3LA0K
ICAgICsgICAgICAtMjcNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAg
ICAgMTMsICAgNjYsICAtMjgsICAtMjgsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAg
NjYsDQogICAgKyAgICAgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2Niwg
ICA2NiwgICA2NiwgICA2NiwNCiAgICArICAgICAgIDY2DQogICAgKyAgICB9LA0KICAgICsNCiAg
ICArICAgIHsNCiAgICArICAgICAgIDEzLCAgIDY3LCAgIDY3LCAgIDY4LCAgIDY3LCAgLTI5LCAg
IDY3LCAgLTI5LCAgIDY3LCAgLTI5LA0KICAgICsgICAgICAgNjcsICAgNjcsICAgNjcsICAgNjcs
ICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAgNjcsICAtMjksDQogICAgKyAgICAgICA2Nw0KICAg
ICsNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtMzAs
ICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsICAtMzAsDQogICAgKyAg
ICAgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwgIC0zMCwg
IC0zMCwNCiAgICArICAgICAgLTMwDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAg
ICArICAgICAgIDEzLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAgLTMxLCAg
LTMxLCAgLTMxLA0KICAgICsgICAgICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEsICAtMzEs
ICAtMzEsICAtMzEsICAtMzEsICAtMzEsDQogICAgKyAgICAgIC0zMQ0KICAgICsgICAgfSwNCiAg
ICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgICA2OSwgICA2OSwgIC0zMiwgICA2OSwg
ICA2OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwNCiAgICArICAgICAgIDY5LCAgIDY5LCAgIDY5
LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LA0KICAgICsgICAgICAg
NjkNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNzAs
ICAgNzAsICAgNzEsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsDQogICAgKw0K
ICAgICsgICAgICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAsICAgNzAs
ICAgNzAsICAgNzAsDQogICAgKyAgICAgICA3MA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAg
ICB7DQogICAgKyAgICAgICAxMywgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwgIC0zNCwg
IC0zNCwgIC0zNCwgIC0zNCwNCiAgICArICAgICAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0
LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LCAgLTM0LA0KICAgICsgICAgICAtMzQNCiAgICArICAg
IH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtMzUsICAgNzIsICAtMzUs
ICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsICAtMzUsDQogICAgKyAgICAgIC0zNSwgIC0z
NSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwgIC0zNSwNCiAgICAr
ICAgICAgLTM1DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEz
LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LCAgLTM2LA0K
ICAgICsgICAgICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYsICAtMzYs
ICAtMzYsICAtMzYsDQogICAgKw0KICAgICsgICAgICAtMzYNCiAgICArICAgIH0sDQogICAgKw0K
ICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtMzcsICAtMzcsICAtMzcsICAtMzcsICAtMzcs
ICAtMzcsICAtMzcsICAtMzcsICAtMzcsDQogICAgKyAgICAgIC0zNywgIC0zNywgIC0zNywgIC0z
NywgIC0zNywgIC0zNywgIC0zNywgICA3MywgIC0zNywgIC0zNywNCiAgICArICAgICAgLTM3DQog
ICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTM4LCAgLTM4
LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LCAgLTM4LA0KICAgICsgICAgICAt
MzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgsICAtMzgs
DQogICAgKyAgICAgIC0zOA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAg
ICAgICAxMywgICA3NCwgICA3NCwgIC0zOSwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwg
ICA3NCwNCiAgICArICAgICAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0
LCAgIDc0LCAgIDc0LCAgIDc0LA0KICAgICsgICAgICAgNzQNCiAgICArDQogICAgKyAgICB9LA0K
ICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTQwLCAgLTQwLCAgLTQwLCAgLTQw
LCAgLTQwLCAgLTQwLCAgIDc1LCAgLTQwLCAgLTQwLA0KICAgICsgICAgICAtNDAsICAtNDAsICAt
NDAsICAgNzUsICAgNzUsICAtNDAsICAtNDAsICAtNDAsICAtNDAsICAtNDAsDQogICAgKyAgICAg
IC00MA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC00
MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgIC00MSwgICA3NiwgIC00MSwNCiAgICAr
ICAgICAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQxLCAgLTQx
LCAgLTQxLA0KICAgICsgICAgICAtNDENCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0K
ICAgICsgICAgICAgMTMsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIsICAtNDIs
ICAtNDIsICAtNDIsDQogICAgKyAgICAgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwgIC00
MiwgIC00MiwgIC00MiwgIC00MiwgIC00MiwNCiAgICArICAgICAgLTQyDQogICAgKyAgICB9LA0K
ICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQz
LCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLA0KICAgICsNCiAgICArICAgICAgLTQzLCAg
LTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLCAgLTQzLA0KICAg
ICsgICAgICAtNDMNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAg
MTMsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAtNDQsICAgNzUsICAtNDQsICAtNDQs
DQogICAgKyAgICAgIC00NCwgIC00NCwgIC00NCwgICA3NywgICA3NywgIC00NCwgIC00NCwgIC00
NCwgIC00NCwgIC00NCwNCiAgICArICAgICAgLTQ0DQogICAgKyAgICB9LA0KICAgICsNCiAgICAr
ICAgIHsNCiAgICArICAgICAgIDEzLCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1LCAgLTQ1
LCAgLTQ1LCAgLTQ1LCAgLTQ1LA0KICAgICsgICAgICAtNDUsICAtNDUsICAtNDUsICAtNDUsICAt
NDUsICAtNDUsICAtNDUsICAgNzgsICAtNDUsICAtNDUsDQogICAgKyAgICAgIC00NQ0KICAgICsg
ICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC00NiwgIC00NiwgIC00
NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwgIC00NiwNCiAgICArICAgICAgLTQ2LCAg
LTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LCAgLTQ2LA0KICAg
ICsNCiAgICArICAgICAgLTQ2DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICAr
ICAgICAgIDEzLCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3LCAgLTQ3
LCAgLTQ3LA0KICAgICsgICAgICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAtNDcsICAt
NDcsICAgNzksICAtNDcsICAtNDcsDQogICAgKyAgICAgIC00Nw0KICAgICsgICAgfSwNCiAgICAr
DQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC00OCwgIC00OCwgICA4MCwgIC00OCwgIC00
OCwgIC00OCwgIC00OCwgIC00OCwgIC00OCwNCiAgICArICAgICAgLTQ4LCAgLTQ4LCAgLTQ4LCAg
LTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LCAgLTQ4LA0KICAgICsgICAgICAtNDgN
CiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtNDksICAt
NDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksICAtNDksDQogICAgKyAgICAg
IC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00OSwgIC00
OSwNCiAgICArICAgICAgIDgxDQogICAgKw0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7
DQogICAgKyAgICAgICAxMywgICA4MiwgICA4MywgIC01MCwgICA4MiwgICA4MiwgICA4MiwgICA4
MiwgICA4MiwgICA4MiwNCiAgICArICAgICAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAg
IDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLA0KICAgICsgICAgICAgODINCiAgICArICAgIH0s
DQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtNTEsICAtNTEsICAtNTEsICAt
NTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsICAtNTEsDQogICAgKyAgICAgIC01MSwgIC01MSwg
IC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwgIC01MSwNCiAgICArICAg
ICAgLTUxDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAg
LTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLCAgLTUyLA0KICAg
ICsgICAgICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAtNTIsICAt
NTIsICAtNTIsDQogICAgKyAgICAgIC01Mg0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7
DQogICAgKyAgICAgICAxMywgIC01MywgICA1MywgICA1NCwgIC01MywgIC01MywgICA1NSwgIC01
MywgIC01MywgIC01MywNCiAgICArDQogICAgKyAgICAgIC01MywgIC01MywgIC01MywgIC01Mywg
IC01MywgIC01MywgIC01MywgIC01MywgIC01MywgIC01MywNCiAgICArICAgICAgLTUzDQogICAg
KyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTU0LCAgLTU0LCAg
LTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LCAgLTU0LA0KICAgICsgICAgICAtNTQs
ICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsICAtNTQsDQog
ICAgKyAgICAgIC01NA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAg
ICAxMywgICA1NiwgICA1NiwgICA1NywgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1
NiwNCiAgICArICAgICAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAgIDU2LCAg
IDU2LCAgIDU2LCAgIDU2LA0KICAgICsgICAgICAgNTYNCiAgICArICAgIH0sDQogICAgKw0KICAg
ICsgICAgew0KICAgICsgICAgICAgMTMsICAgNTYsICAgNTYsICAgNTcsICAgNTYsICAgNTYsICAg
NTYsICAgNTYsICAgNTYsICAgNTYsDQogICAgKyAgICAgICA1NiwgICA1NiwgICA1NiwgICA1Niwg
ICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwgICA1NiwNCiAgICArDQogICAgKyAgICAgICA1
Ng0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC01Nywg
IC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywgIC01NywNCiAgICArICAg
ICAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAgLTU3LCAg
LTU3LA0KICAgICsgICAgICAtNTcNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAg
ICsgICAgICAgMTMsICAtNTgsICAgNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAtNTgsICAt
NTgsICAtNTgsDQogICAgKyAgICAgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwgIC01OCwg
IC01OCwgIC01OCwgIC01OCwgIC01OCwNCiAgICArICAgICAgLTU4DQogICAgKyAgICB9LA0KICAg
ICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTU5LCAgLTU5LCAgLTU5LCAgLTU5LCAg
LTU5LCAgLTU5LCAgIDU5LCAgLTU5LCAgLTU5LA0KICAgICsgICAgICAtNTksICAtNTksICAtNTks
ICAgNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksICAtNTksDQogICAgKyAgICAgIC01
OQ0KICAgICsNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMs
ICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsICAtNjAsDQog
ICAgKyAgICAgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwgIC02MCwg
IC02MCwgIC02MCwNCiAgICArICAgICAgLTYwDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAg
IHsNCiAgICArICAgICAgIDEzLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAgLTYxLCAg
IDU5LCAgLTYxLCAgLTYxLA0KICAgICsgICAgICAtNjEsICAtNjEsICAtNjEsICAgNjEsICAtNjEs
ICAtNjEsICAtNjEsICAtNjEsICAtNjEsICAtNjEsDQogICAgKyAgICAgIC02MQ0KICAgICsgICAg
fSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC02MiwgIC02MiwgIC02Miwg
IC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwgIC02MiwNCiAgICArICAgICAgLTYyLCAgLTYy
LCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLCAgLTYyLA0KICAgICsg
ICAgICAtNjINCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMs
ICAgNjMsICAgNjMsICAtNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsDQog
ICAgKw0KICAgICsgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
ICAgNjMsICAgNjMsICAgNjMsDQogICAgKyAgICAgICA2Mw0KICAgICsgICAgfSwNCiAgICArDQog
ICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC02NCwgICA2NCwgICA2NSwgIC02NCwgIC02NCwg
IC02NCwgIC02NCwgIC02NCwgIC02NCwNCiAgICArICAgICAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0
LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LCAgLTY0LA0KICAgICsgICAgICAtNjQNCiAg
ICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNjYsICAtNjUs
ICAtNjUsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsICAgNjYsDQogICAgKyAgICAgICA2
NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwgICA2NiwN
CiAgICArICAgICAgIDY2DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAg
ICAgIDEzLCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAgLTY2LCAg
LTY2LA0KICAgICsgICAgICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYsICAtNjYs
ICAtNjYsICAtNjYsICAtNjYsDQogICAgKw0KICAgICsgICAgICAtNjYNCiAgICArICAgIH0sDQog
ICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAgNjcsICAgNjcsICAgNjgsICAgNjcs
ICAtNjcsICAgNjcsICAtNjcsICAgNjcsICAtNjcsDQogICAgKyAgICAgICA2NywgICA2NywgICA2
NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgICA2NywgIC02NywNCiAgICArICAgICAg
IDY3DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTY4
LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LCAgLTY4LA0KICAgICsg
ICAgICAtNjgsICAtNjgsICAtNjgsICAtNjgsICAtNjgsICAtNjgsICAtNjgsICAtNjgsICAtNjgs
ICAtNjgsDQogICAgKyAgICAgIC02OA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQog
ICAgKyAgICAgICAxMywgICA2OSwgICA2OSwgIC02OSwgICA2OSwgICA2OSwgICA2OSwgICA2OSwg
ICA2OSwgICA2OSwNCiAgICArICAgICAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5
LCAgIDY5LCAgIDY5LCAgIDY5LCAgIDY5LA0KICAgICsgICAgICAgNjkNCiAgICArDQogICAgKyAg
ICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTcwLCAgLTcwLCAgIDcx
LCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLCAgLTcwLA0KICAgICsgICAgICAtNzAsICAt
NzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsICAtNzAsDQogICAg
KyAgICAgIC03MA0KICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAx
MywgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwgIC03MSwN
CiAgICArICAgICAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcxLCAgLTcx
LCAgLTcxLCAgLTcxLA0KICAgICsgICAgICAtNzENCiAgICArICAgIH0sDQogICAgKw0KICAgICsg
ICAgew0KICAgICsgICAgICAgMTMsICAtNzIsICAgNzIsICAtNzIsICAtNzIsICAtNzIsICAtNzIs
ICAtNzIsICAtNzIsICAtNzIsDQogICAgKyAgICAgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03
MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwgIC03MiwNCiAgICArICAgICAgLTcyDQogICAgKyAg
ICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTczLCAgLTczLCAgLTcz
LCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLA0KICAgICsNCiAgICArICAgICAg
LTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTczLCAgLTcz
LA0KICAgICsgICAgICAtNzMNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsg
ICAgICAgMTMsICAgNzQsICAgNzQsICAtNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQsICAgNzQs
ICAgNzQsDQogICAgKyAgICAgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwgICA3
NCwgICA3NCwgICA3NCwgICA3NCwNCiAgICArICAgICAgIDc0DQogICAgKyAgICB9LA0KICAgICsN
CiAgICArICAgIHsNCiAgICArICAgICAgIDEzLCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1LCAgLTc1
LCAgLTc1LCAgIDc1LCAgLTc1LCAgLTc1LA0KICAgICsgICAgICAtNzUsICAtNzUsICAtNzUsICAg
NzUsICAgNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsICAtNzUsDQogICAgKyAgICAgIC03NQ0K
ICAgICsgICAgfSwNCiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC03NiwgIC03
NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwgIC03NiwNCiAgICArICAgICAg
LTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2LCAgLTc2
LA0KICAgICsNCiAgICArICAgICAgLTc2DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsN
CiAgICArICAgICAgIDEzLCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgLTc3LCAgIDc1
LCAgLTc3LCAgLTc3LA0KICAgICsgICAgICAtNzcsICAtNzcsICAtNzcsICAgNzcsICAgNzcsICAt
NzcsICAtNzcsICAtNzcsICAtNzcsICAtNzcsDQogICAgKyAgICAgIC03Nw0KICAgICsgICAgfSwN
CiAgICArDQogICAgKyAgICB7DQogICAgKyAgICAgICAxMywgIC03OCwgIC03OCwgIC03OCwgIC03
OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwgIC03OCwNCiAgICArICAgICAgLTc4LCAgLTc4LCAg
LTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LCAgLTc4LA0KICAgICsgICAg
ICAtNzgNCiAgICArICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAt
NzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksICAtNzksDQogICAg
KyAgICAgIC03OSwgIC03OSwgIC03OSwgIC03OSwgIC03OSwgIC03OSwgIC03OSwgIC03OSwgIC03
OSwgIC03OSwNCiAgICArICAgICAgLTc5DQogICAgKw0KICAgICsgICAgfSwNCiAgICArDQogICAg
KyAgICB7DQogICAgKyAgICAgICAxMywgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04MCwgIC04
MCwgIC04MCwgIC04MCwgIC04MCwNCiAgICArICAgICAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAg
LTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLCAgLTgwLA0KICAgICsgICAgICAtODANCiAgICAr
ICAgIH0sDQogICAgKw0KICAgICsgICAgew0KICAgICsgICAgICAgMTMsICAtODEsICAtODEsICAt
ODEsICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsICAtODEsDQogICAgKyAgICAgIC04MSwg
IC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwgIC04MSwNCiAg
ICArICAgICAgLTgxDQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIHsNCiAgICArICAgICAg
IDEzLCAgIDgyLCAgIDgzLCAgLTgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgyLCAgIDgy
LA0KICAgICsgICAgICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAgODIsICAg
ODIsICAgODIsICAgODIsDQogICAgKyAgICAgICA4Mg0KICAgICsgICAgfSwNCiAgICArDQogICAg
KyAgICB7DQogICAgKyAgICAgICAxMywgICA4MywgICA4MywgIC04MywgICA4MywgICA4MywgICA4
MywgICA4MywgICA4MywgICA4MywNCiAgICArDQogICAgKyAgICAgICA4MywgICA4MywgICA4Mywg
ICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywNCiAgICArICAgICAgIDgz
DQogICAgKyAgICB9LA0KICAgICsNCiAgICArICAgIH0gOw0KICAgICsNCiAgICArc3RhdGljIHl5
X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRlICh2b2lkICk7DQogICAgK3N0YXRpYyB5
eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0
ZSAgKTsNCiAgICArc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHZvaWQgKTsNCiAgICAr
c3RhdGljIHZvaWQgeXlub3JldHVybiB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cg
ICk7DQogICAgKw0KICAgICsvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJl
ZW4gbWF0Y2hlZCBhbmQgYmVmb3JlIHRoZQ0KICAgICsgKiBjb3JyZXNwb25kaW5nIGFjdGlvbiAt
IHNldHMgdXAgeXl0ZXh0Lg0KICAgICsgKi8NCiAgICArI2RlZmluZSBZWV9ET19CRUZPUkVfQUNU
SU9OIFwNCiAgICArCSh5eXRleHRfcHRyKSA9IHl5X2JwOyBcDQogICAgKwl5eWxlbmcgPSAoaW50
KSAoeXlfY3AgLSB5eV9icCk7IFwNCiAgICArCSh5eV9ob2xkX2NoYXIpID0gKnl5X2NwOyBcDQog
ICAgKwkqeXlfY3AgPSAnXDAnOyBcDQogICAgKwkoeXlfY19idWZfcCkgPSB5eV9jcDsNCiAgICAr
DQogICAgKyNkZWZpbmUgWVlfTlVNX1JVTEVTIDQ3DQogICAgKyNkZWZpbmUgWVlfRU5EX09GX0JV
RkZFUiA0OA0KICAgICsvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlzIHNjYW5uZXIs
DQogICAgKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLw0KICAgICtzdHJ1Y3Qg
eXlfdHJhbnNfaW5mbw0KICAgICsJew0KICAgICsJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsNCiAg
ICArCWZsZXhfaW50MzJfdCB5eV9ueHQ7DQogICAgKwl9Ow0KICAgICtzdGF0aWMgeXljb25zdCBm
bGV4X2ludDE2X3QgeXlfYWNjZXB0Wzg0XSA9DQogICAgKyAgICB7ICAgMCwNCiAgICArICAgICAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LA0KICAgICsgICAgICAgIDAsICAgIDAsICAgNDgsICAgIDUsICAgIDQsICAgIDIsICAgIDMsICAg
MTIsICAgMTEsICAgMTMsDQogICAgKyAgICAgICAgNywgICAxMiwgICAgNiwgICAxMiwgICAgOCwg
ICA0NiwgICA0MywgICA0NSwgICAzOCwgICA0MiwNCiAgICArICAgICAgIDQxLCAgIDM2LCAgIDQw
LCAgIDM1LCAgIDM0LCAgIDI5LCAgIDIxLCAgIDI4LCAgIDMyLCAgIDMxLA0KICAgICsgICAgICAg
MzUsICAgMTksICAgMjAsICAgMzAsICAgMjYsICAgMjIsICAgMjcsICAgMzUsICAgMzUsICAgMTQs
DQogICAgKyAgICAgICAxNiwgICAxNSwgICAgNCwgICAgMiwgICAgMywgICAgMywgICAgMSwgICAx
MSwgICAgNywgICAxMCwNCiAgICArICAgICAgICA2LCAgICA5LCAgIDQ2LCAgIDQzLCAgIDQ1LCAg
IDQ0LCAgIDM4LCAgIDM3LCAgIDM2LCAgIDQwLA0KICAgICsgICAgICAgMzksICAgMzQsICAgMjMs
ICAgMzIsICAgMzEsICAgMTcsICAgMzAsICAgMjQsICAgMjUsICAgMzMsDQogICAgKyAgICAgICAx
OCwgICAxNCwgICAxNA0KICAgICsgICAgfSA7DQogICAgKw0KICAgICtzdGF0aWMgeXljb25zdCBZ
WV9DSEFSIHl5X2VjWzI1Nl0gPQ0KICAgICsgICAgeyAgIDAsDQogICAgKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMiwgICAgMywNCiAgICAr
ICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLA0KICAgICsgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgKyAgICAgICAgMSwgICAgMiwgICAgNCwgICAgNSwg
ICAgNiwgICAgNywgICAgMSwgICAgOCwgICAgOSwgICAxMCwNCiAgICArICAgICAgIDExLCAgICAx
LCAgIDEyLCAgICAxLCAgIDEzLCAgIDE0LCAgIDE0LCAgIDEzLCAgIDEzLCAgIDEzLA0KICAgICsg
ICAgICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTUsICAgIDEs
ICAgMTYsDQogICAgKyAgICAgICAxNywgICAxOCwgICAgMSwgICAgMSwgICAxMywgICAxMywgICAx
MywgICAxMywgICAxMywgICAxMywNCiAgICArICAgICAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAg
IDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLA0KICAgICsgICAgICAgMTMsICAgMTMs
ICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsICAgMTMsDQogICAgKyAg
ICAgICAgMSwgICAxOSwgICAgMSwgICAgMSwgICAxMywgICAgMSwgICAxMywgICAxMywgICAxMywg
ICAxMywNCiAgICArDQogICAgKyAgICAgICAxMywgICAxMywgICAxMywgICAxMywgICAxMywgICAx
MywgICAxMywgICAxMywgICAxMywgICAxMywNCiAgICArICAgICAgIDEzLCAgIDEzLCAgIDEzLCAg
IDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLCAgIDEzLA0KICAgICsgICAgICAgMTMs
ICAgMTMsICAgIDEsICAgMjAsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQog
ICAgKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwNCiAgICArICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLA0KICAgICsgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAg
ICArICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLA0KICAgICsgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICArDQogICAgKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwNCiAgICArICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLA0KICAgICsgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsDQogICAgKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwNCiAgICArICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LA0KICAgICsgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDENCiAgICArICAgIH0gOw0K
ICAgICsNCiAgICArLyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRj
aCBlb2wuICovDQogICAgK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9t
YXRjaF9lb2xbNDhdID0NCiAgICArICAgIHsgICAwLA0KICAgICsxLCAxLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAxLCAwLCAwLCAwLCAwLCANCiAgICArICAgIDAsIDAsIDAs
IDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDEsIDAsIDEsIA0KICAg
ICsgICAgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMCwgICAgIH07DQogICAgKw0KICAgICtleHRlcm4g
aW50IHl5X2ZsZXhfZGVidWc7DQogICAgK2ludCB5eV9mbGV4X2RlYnVnID0gMDsNCiAgICArDQog
ICAgKy8qIFRoZSBpbnRlbnQgYmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNh
dGNoDQogICAgKyAqIGFueSB1c2VzIG9mIFJFSkVDVCB3aGljaCBmbGV4IG1pc3NlZC4NCiAgICAr
ICovDQogICAgKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91c2VkX2J1dF9ub3RfZGV0ZWN0ZWQNCiAg
ICArI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkDQogICAgKyNk
ZWZpbmUgWVlfTU9SRV9BREogMA0KICAgICsjZGVmaW5lIFlZX1JFU1RPUkVfWVlfTU9SRV9PRkZT
RVQNCiAgICArY2hhciAqeXl0ZXh0Ow0KICAgICsNCiAgICArLyoNCiAgICArICogQ29weXJpZ2h0
IChDKSAyMDAyIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPg0KICAgICsgKiBS
ZWxlYXNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwgdjIuMC4NCiAgICArICovDQog
ICAgKw0KICAgICsjaW5jbHVkZSA8YXNzZXJ0Lmg+DQogICAgKyNpbmNsdWRlIDxsaW1pdHMuaD4N
CiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgKyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICAr
I2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5jbHVkZSA8dW5pc3RkLmg+DQogICAgKw0KICAg
ICsjaW5jbHVkZSAibGtjLmgiDQogICAgKw0KICAgICsjZGVmaW5lIFNUQVJUX1NUUlNJWkUJMTYN
CiAgICArDQogICAgK3N0YXRpYyBzdHJ1Y3Qgew0KICAgICsJc3RydWN0IGZpbGUgKmZpbGU7DQog
ICAgKwlpbnQgbGluZW5vOw0KICAgICt9IGN1cnJlbnRfcG9zOw0KICAgICsNCiAgICArc3RhdGlj
IGNoYXIgKnRleHQ7DQogICAgK3N0YXRpYyBpbnQgdGV4dF9zaXplLCB0ZXh0X2FzaXplOw0KICAg
ICsNCiAgICArc3RydWN0IGJ1ZmZlciB7DQogICAgKwlzdHJ1Y3QgYnVmZmVyICpwYXJlbnQ7DQog
ICAgKwlZWV9CVUZGRVJfU1RBVEUgc3RhdGU7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3Qg
YnVmZmVyICpjdXJyZW50X2J1ZjsNCiAgICArDQogICAgK3N0YXRpYyBpbnQgbGFzdF90cywgZmly
c3RfdHM7DQogICAgKw0KICAgICtzdGF0aWMgY2hhciAqZXhwYW5kX3Rva2VuKGNvbnN0IGNoYXIg
KmluLCBzaXplX3Qgbik7DQogICAgK3N0YXRpYyB2b2lkIGFwcGVuZF9leHBhbmRlZF9zdHJpbmco
Y29uc3QgY2hhciAqaW4pOw0KICAgICtzdGF0aWMgdm9pZCB6Y29uZl9lbmRoZWxwKHZvaWQpOw0K
ICAgICtzdGF0aWMgdm9pZCB6Y29uZl9lbmRmaWxlKHZvaWQpOw0KICAgICsNCiAgICArc3RhdGlj
IHZvaWQgbmV3X3N0cmluZyh2b2lkKQ0KICAgICt7DQogICAgKwl0ZXh0ID0geG1hbGxvYyhTVEFS
VF9TVFJTSVpFKTsNCiAgICArCXRleHRfYXNpemUgPSBTVEFSVF9TVFJTSVpFOw0KICAgICsJdGV4
dF9zaXplID0gMDsNCiAgICArCSp0ZXh0ID0gMDsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGlj
IHZvaWQgYXBwZW5kX3N0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBzaXplKQ0KICAgICt7DQog
ICAgKwlpbnQgbmV3X3NpemUgPSB0ZXh0X3NpemUgKyBzaXplICsgMTsNCiAgICArCWlmIChuZXdf
c2l6ZSA+IHRleHRfYXNpemUpIHsNCiAgICArCQluZXdfc2l6ZSArPSBTVEFSVF9TVFJTSVpFIC0g
MTsNCiAgICArCQluZXdfc2l6ZSAmPSAtU1RBUlRfU1RSU0laRTsNCiAgICArCQl0ZXh0ID0geHJl
YWxsb2ModGV4dCwgbmV3X3NpemUpOw0KICAgICsJCXRleHRfYXNpemUgPSBuZXdfc2l6ZTsNCiAg
ICArCX0NCiAgICArCW1lbWNweSh0ZXh0ICsgdGV4dF9zaXplLCBzdHIsIHNpemUpOw0KICAgICsJ
dGV4dF9zaXplICs9IHNpemU7DQogICAgKwl0ZXh0W3RleHRfc2l6ZV0gPSAwOw0KICAgICt9DQog
ICAgKw0KICAgICtzdGF0aWMgdm9pZCBhbGxvY19zdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQg
c2l6ZSkNCiAgICArew0KICAgICsJdGV4dCA9IHhtYWxsb2Moc2l6ZSArIDEpOw0KICAgICsJbWVt
Y3B5KHRleHQsIHN0ciwgc2l6ZSk7DQogICAgKwl0ZXh0W3NpemVdID0gMDsNCiAgICArfQ0KICAg
ICsNCiAgICArc3RhdGljIHZvaWQgd2Fybl9pZ25vcmVkX2NoYXJhY3RlcihjaGFyIGNocikNCiAg
ICArew0KICAgICsJZnByaW50ZihzdGRlcnIsDQogICAgKwkgICAgICAgICIlczolZDp3YXJuaW5n
OiBpZ25vcmluZyB1bnN1cHBvcnRlZCBjaGFyYWN0ZXIgJyVjJ1xuIiwNCiAgICArCSAgICAgICAg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwgY2hyKTsNCiAgICArfQ0KICAgICsNCiAg
ICArI2RlZmluZSBJTklUSUFMIDANCiAgICArI2RlZmluZSBDT01NQU5EIDENCiAgICArI2RlZmlu
ZSBIRUxQIDINCiAgICArI2RlZmluZSBTVFJJTkcgMw0KICAgICsjZGVmaW5lIFBBUkFNIDQNCiAg
ICArI2RlZmluZSBBU1NJR05fVkFMIDUNCiAgICArDQogICAgKyNpZm5kZWYgWVlfTk9fVU5JU1RE
X0gNCiAgICArLyogU3BlY2lhbCBjYXNlIGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24t
QU5TSS4gV2UgaW5jbHVkZSBpdCB3YXkNCiAgICArICogZG93biBoZXJlIGJlY2F1c2Ugd2Ugd2Fu
dCB0aGUgdXNlcidzIHNlY3Rpb24gMSB0byBoYXZlIGJlZW4gc2Nhbm5lZCBmaXJzdC4NCiAgICAr
ICogVGhlIHVzZXIgaGFzIGEgY2hhbmNlIHRvIG92ZXJyaWRlIGl0IHdpdGggYW4gb3B0aW9uLg0K
ICAgICsgKi8NCiAgICArI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICsjZW5kaWYNCiAgICArDQog
ICAgKyNpZm5kZWYgWVlfRVhUUkFfVFlQRQ0KICAgICsjZGVmaW5lIFlZX0VYVFJBX1RZUEUgdm9p
ZCAqDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMg
KHZvaWQgKTsNCiAgICArDQogICAgKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4NCiAg
ICArICAgVGhlc2UgYXJlIG1hZGUgdmlzaWJsZSB0byBub24tcmVlbnRyYW50IHNjYW5uZXJzIGZv
ciBjb252ZW5pZW5jZS4gKi8NCiAgICArDQogICAgK2ludCB5eWxleF9kZXN0cm95ICh2b2lkICk7
DQogICAgKw0KICAgICtpbnQgeXlnZXRfZGVidWcgKHZvaWQgKTsNCiAgICArDQogICAgK3ZvaWQg
eXlzZXRfZGVidWcgKGludCBkZWJ1Z19mbGFnICApOw0KICAgICsNCiAgICArWVlfRVhUUkFfVFlQ
RSB5eWdldF9leHRyYSAodm9pZCApOw0KICAgICsNCiAgICArdm9pZCB5eXNldF9leHRyYSAoWVlf
RVhUUkFfVFlQRSB1c2VyX2RlZmluZWQgICk7DQogICAgKw0KICAgICtGSUxFICp5eWdldF9pbiAo
dm9pZCApOw0KICAgICsNCiAgICArdm9pZCB5eXNldF9pbiAgKEZJTEUgKiBfaW5fc3RyICApOw0K
ICAgICsNCiAgICArRklMRSAqeXlnZXRfb3V0ICh2b2lkICk7DQogICAgKw0KICAgICt2b2lkIHl5
c2V0X291dCAgKEZJTEUgKiBfb3V0X3N0ciAgKTsNCiAgICArDQogICAgKwkJCWludCB5eWdldF9s
ZW5nICh2b2lkICk7DQogICAgKw0KICAgICtjaGFyICp5eWdldF90ZXh0ICh2b2lkICk7DQogICAg
Kw0KICAgICtpbnQgeXlnZXRfbGluZW5vICh2b2lkICk7DQogICAgKw0KICAgICt2b2lkIHl5c2V0
X2xpbmVubyAoaW50IF9saW5lX251bWJlciAgKTsNCiAgICArDQogICAgKy8qIE1hY3JvcyBhZnRl
ciB0aGlzIHBvaW50IGNhbiBhbGwgYmUgb3ZlcnJpZGRlbiBieSB1c2VyIGRlZmluaXRpb25zIGlu
DQogICAgKyAqIHNlY3Rpb24gMS4NCiAgICArICovDQogICAgKw0KICAgICsjaWZuZGVmIFlZX1NL
SVBfWVlXUkFQDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KICAgICtleHRlcm4gIkMiIGludCB5
eXdyYXAgKHZvaWQgKTsNCiAgICArI2Vsc2UNCiAgICArZXh0ZXJuIGludCB5eXdyYXAgKHZvaWQg
KTsNCiAgICArI2VuZGlmDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmbmRlZiBZWV9OT19V
TlBVVA0KICAgICsgICAgDQogICAgKyAgICBzdGF0aWMgdm9pZCB5eXVucHV0IChpbnQgYyxjaGFy
ICpidWZfcHRyICApOw0KICAgICsgICAgDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmbmRl
ZiB5eXRleHRfcHRyDQogICAgK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5
Y29uc3QgY2hhciAqLGludCApOw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBZWV9O
RUVEX1NUUkxFTg0KICAgICtzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIg
KiApOw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZm5kZWYgWVlfTk9fSU5QVVQNCiAgICAr
DQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KICAgICtzdGF0aWMgaW50IHl5aW5wdXQgKHZvaWQg
KTsNCiAgICArI2Vsc2UNCiAgICArc3RhdGljIGludCBpbnB1dCAodm9pZCApOw0KICAgICsjZW5k
aWYNCiAgICArDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogQW1vdW50IG9mIHN0dWZmIHRv
IHNsdXJwIHVwIHdpdGggZWFjaCByZWFkLiAqLw0KICAgICsjaWZuZGVmIFlZX1JFQURfQlVGX1NJ
WkUNCiAgICArI2lmZGVmIF9faWE2NF9fDQogICAgKy8qIE9uIElBLTY0LCB0aGUgYnVmZmVyIHNp
emUgaXMgMTZrLCBub3QgOGsgKi8NCiAgICArI2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDE2Mzg0
DQogICAgKyNlbHNlDQogICAgKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyDQogICAgKyNl
bmRpZiAvKiBfX2lhNjRfXyAqLw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIENvcHkgd2hh
dGV2ZXIgdGhlIGxhc3QgcnVsZSBtYXRjaGVkIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuICovDQog
ICAgKyNpZm5kZWYgRUNITw0KICAgICsvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0
IHNpbmNlIHRoZSBzdHJpbmcgbWlnaHQgY29udGFpbiBOVUwncywNCiAgICArICogd2Ugbm93IHVz
ZSBmd3JpdGUoKS4NCiAgICArICovDQogICAgKyNkZWZpbmUgRUNITyBkbyB7IGlmIChmd3JpdGUo
IHl5dGV4dCwgKHNpemVfdCkgeXlsZW5nLCAxLCB5eW91dCApKSB7fSB9IHdoaWxlICgwKQ0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJi
dWYiLiAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwNCiAgICArICogaXMg
cmV0dXJuZWQgaW4gInJlc3VsdCIuDQogICAgKyAqLw0KICAgICsjaWZuZGVmIFlZX0lOUFVUDQog
ICAgKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkgXA0KICAgICsJZXJybm89
MDsgXA0KICAgICsJd2hpbGUgKCAocmVzdWx0ID0gKGludCkgcmVhZCggZmlsZW5vKHl5aW4pLCBi
dWYsIG1heF9zaXplICkpIDwgMCApIFwNCiAgICArCXsgXA0KICAgICsJCWlmKCBlcnJubyAhPSBF
SU5UUikgXA0KICAgICsJCXsgXA0KICAgICsJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZs
ZXggc2Nhbm5lciBmYWlsZWQiICk7IFwNCiAgICArCQkJYnJlYWs7IFwNCiAgICArCQl9IFwNCiAg
ICArCQllcnJubz0wOyBcDQogICAgKwkJY2xlYXJlcnIoeXlpbik7IFwNCiAgICArCX1cDQogICAg
K1wNCiAgICArDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogTm8gc2VtaS1jb2xvbiBhZnRl
ciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRlKCk7IiAtDQog
ICAgKyAqIHdlIGRvbid0IHdhbnQgYW4gZXh0cmEgJzsnIGFmdGVyIHRoZSAicmV0dXJuIiBiZWNh
dXNlIHRoYXQgd2lsbCBjYXVzZQ0KICAgICsgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFpbiBh
Ym91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLg0KICAgICsgKi8NCiAgICArI2lmbmRlZiB5eXRl
cm1pbmF0ZQ0KICAgICsjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwNCiAgICAr
I2VuZGlmDQogICAgKw0KICAgICsvKiBOdW1iZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1j
b25kaXRpb24gc3RhY2sgZ3Jvd3MuICovDQogICAgKyNpZm5kZWYgWVlfU1RBUlRfU1RBQ0tfSU5D
Ug0KICAgICsjZGVmaW5lIFlZX1NUQVJUX1NUQUNLX0lOQ1IgMjUNCiAgICArI2VuZGlmDQogICAg
Kw0KICAgICsvKiBSZXBvcnQgYSBmYXRhbCBlcnJvci4gKi8NCiAgICArI2lmbmRlZiBZWV9GQVRB
TF9FUlJPUg0KICAgICsjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3Io
IG1zZyApDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0
aW9uIHN0cnVjdHVyZXMgYW5kIHByb3RvdHlwZXMgKi8NCiAgICArDQogICAgKy8qIERlZmF1bHQg
ZGVjbGFyYXRpb24gb2YgZ2VuZXJhdGVkIHNjYW5uZXIgLSBhIGRlZmluZSBzbyB0aGUgdXNlciBj
YW4NCiAgICArICogZWFzaWx5IGFkZCBwYXJhbWV0ZXJzLg0KICAgICsgKi8NCiAgICArI2lmbmRl
ZiBZWV9ERUNMDQogICAgKyNkZWZpbmUgWVlfREVDTF9JU19PVVJTIDENCiAgICArDQogICAgK2V4
dGVybiBpbnQgeXlsZXggKHZvaWQpOw0KICAgICsNCiAgICArI2RlZmluZSBZWV9ERUNMIGludCB5
eWxleCAodm9pZCkNCiAgICArI2VuZGlmIC8qICFZWV9ERUNMICovDQogICAgKw0KICAgICsvKiBD
b2RlIGV4ZWN1dGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQg
YW5kIHl5bGVuZw0KICAgICsgKiBoYXZlIGJlZW4gc2V0IHVwLg0KICAgICsgKi8NCiAgICArI2lm
bmRlZiBZWV9VU0VSX0FDVElPTg0KICAgICsjZGVmaW5lIFlZX1VTRVJfQUNUSU9ODQogICAgKyNl
bmRpZg0KICAgICsNCiAgICArLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVs
ZS4gKi8NCiAgICArI2lmbmRlZiBZWV9CUkVBSw0KICAgICsjZGVmaW5lIFlZX0JSRUFLIC8qTElO
VEVEKi9icmVhazsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjZGVmaW5lIFlZX1JVTEVfU0VU
VVAgXA0KICAgICsJWVlfVVNFUl9BQ1RJT04NCiAgICArDQogICAgKy8qKiBUaGUgbWFpbiBzY2Fu
bmVyIGZ1bmN0aW9uIHdoaWNoIGRvZXMgYWxsIHRoZSB3b3JrLg0KICAgICsgKi8NCiAgICArWVlf
REVDTA0KICAgICt7DQogICAgKwl5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7DQogICAg
KwljaGFyICp5eV9jcCwgKnl5X2JwOw0KICAgICsJaW50IHl5X2FjdDsNCiAgICArICAgIA0KICAg
ICsJaWYgKCAhKHl5X2luaXQpICkNCiAgICArCQl7DQogICAgKwkJKHl5X2luaXQpID0gMTsNCiAg
ICArDQogICAgKyNpZmRlZiBZWV9VU0VSX0lOSVQNCiAgICArCQlZWV9VU0VSX0lOSVQ7DQogICAg
KyNlbmRpZg0KICAgICsNCiAgICArCQlpZiAoICEgKHl5X3N0YXJ0KSApDQogICAgKwkJCSh5eV9z
dGFydCkgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLw0KICAgICsNCiAgICArCQlpZiAoICEg
eXlpbiApDQogICAgKwkJCXl5aW4gPSBzdGRpbjsNCiAgICArDQogICAgKwkJaWYgKCAhIHl5b3V0
ICkNCiAgICArCQkJeXlvdXQgPSBzdGRvdXQ7DQogICAgKw0KICAgICsJCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUiApIHsNCiAgICArCQkJeXllbnN1cmVfYnVmZmVyX3N0YWNrICgpOw0KICAgICsJ
CQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQ0KICAgICsJCQkJeXlfY3JlYXRlX2J1ZmZlcih5
eWluLFlZX0JVRl9TSVpFICk7DQogICAgKwkJfQ0KICAgICsNCiAgICArCQl5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSggKTsNCiAgICArCQl9DQogICAgKw0KICAgICsJew0KICAgICsNCiAgICArCWludCBz
dHIgPSAwOw0KICAgICsJaW50IHRzLCBpOw0KICAgICsNCiAgICArCXdoaWxlICggLypDT05TVENP
TkQqLzEgKQkJLyogbG9vcHMgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZCAqLw0KICAgICsJ
CXsNCiAgICArCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsNCiAgICArDQogICAgKwkJLyogU3VwcG9y
dCBvZiB5eXRleHQuICovDQogICAgKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7DQogICAgKw0K
ICAgICsJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRpb24gaW4geXlfY2hfYnVmIG9mIHRo
ZSBzdGFydCBvZg0KICAgICsJCSAqIHRoZSBjdXJyZW50IHJ1bi4NCiAgICArCQkgKi8NCiAgICAr
CQl5eV9icCA9IHl5X2NwOw0KICAgICsNCiAgICArCQl5eV9jdXJyZW50X3N0YXRlID0gKHl5X3N0
YXJ0KTsNCiAgICAreXlfbWF0Y2g6DQogICAgKwkJd2hpbGUgKCAoeXlfY3VycmVudF9zdGF0ZSA9
IHl5X254dFt5eV9jdXJyZW50X3N0YXRlXVsgeXlfZWNbWVlfU0NfVE9fVUkoKnl5X2NwKV0gIF0p
ID4gMCApDQogICAgKwkJCSsreXlfY3A7DQogICAgKw0KICAgICsJCXl5X2N1cnJlbnRfc3RhdGUg
PSAteXlfY3VycmVudF9zdGF0ZTsNCiAgICArDQogICAgK3l5X2ZpbmRfYWN0aW9uOg0KICAgICsJ
CXl5X2FjdCA9IHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXTsNCiAgICArDQogICAgKwkJWVlf
RE9fQkVGT1JFX0FDVElPTjsNCiAgICArDQogICAgKwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5EX09G
X0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApDQogICAgKwkJCXsNCiAg
ICArCQkJaW50IHl5bDsNCiAgICArCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5
bCApDQogICAgKwkJCQlpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKQ0KICAgICsJCQkJCQ0KICAg
ICsgICAgeXlsaW5lbm8rKzsNCiAgICArOw0KICAgICsJCQl9DQogICAgKw0KICAgICtkb19hY3Rp
b246CS8qIFRoaXMgbGFiZWwgaXMgdXNlZCBvbmx5IHRvIGFjY2VzcyBFT0YgYWN0aW9ucy4gKi8N
CiAgICArDQogICAgKwkJc3dpdGNoICggeXlfYWN0ICkNCiAgICArCXsgLyogYmVnaW5uaW5nIG9m
IGFjdGlvbiBzd2l0Y2ggKi8NCiAgICArY2FzZSAxOg0KICAgICsvKiBydWxlIDEgY2FuIG1hdGNo
IGVvbCAqLw0KICAgICtjYXNlIDI6DQogICAgKy8qIHJ1bGUgMiBjYW4gbWF0Y2ggZW9sICovDQog
ICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJcmV0dXJuIFRfRU9MOw0KICAgICt9DQog
ICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDM6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArDQog
ICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDQ6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0K
ICAgICsJQkVHSU4oQ09NTUFORCk7DQogICAgK30NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2Ug
NToNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7DQogICAgKwl1bnB1dCh5eXRleHRbMF0pOw0K
ICAgICsJQkVHSU4oQ09NTUFORCk7DQogICAgK30NCiAgICArCVlZX0JSRUFLDQogICAgKw0KICAg
ICtjYXNlIDY6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJCWNvbnN0IHN0cnVj
dCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoeXl0ZXh0LCB5eWxlbmcpOw0KICAgICsJ
CWN1cnJlbnRfcG9zLmZpbGUgPSBjdXJyZW50X2ZpbGU7DQogICAgKwkJY3VycmVudF9wb3MubGlu
ZW5vID0geXlsaW5lbm87DQogICAgKwkJaWYgKGlkICYmIGlkLT5mbGFncyAmIFRGX0NPTU1BTkQp
IHsNCiAgICArCQkJQkVHSU4oUEFSQU0pOw0KICAgICsJCQl5eWx2YWwuaWQgPSBpZDsNCiAgICAr
CQkJcmV0dXJuIGlkLT50b2tlbjsNCiAgICArCQl9DQogICAgKwkJYWxsb2Nfc3RyaW5nKHl5dGV4
dCwgeXlsZW5nKTsNCiAgICArCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICArCQlyZXR1cm4g
VF9WQVJJQUJMRTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgNzoNCiAgICAr
WVlfUlVMRV9TRVRVUA0KICAgICt7DQogICAgKwkJLyogdGhpcyB0b2tlbiBpbmNsdWRlcyBhdCBs
ZWFzdCBvbmUgJyQnICovDQogICAgKwkJeXlsdmFsLnN0cmluZyA9IGV4cGFuZF90b2tlbih5eXRl
eHQsIHl5bGVuZyk7DQogICAgKwkJaWYgKHN0cmxlbih5eWx2YWwuc3RyaW5nKSkNCiAgICArCQkJ
cmV0dXJuIFRfVkFSSUFCTEU7DQogICAgKwkJZnJlZSh5eWx2YWwuc3RyaW5nKTsNCiAgICArCX0N
CiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgODoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7
IEJFR0lOKEFTU0lHTl9WQUwpOyB5eWx2YWwuZmxhdm9yID0gVkFSX1JFQ1VSU0lWRTsgcmV0dXJu
IFRfQVNTSUdOOyB9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDk6DQogICAgK1lZX1JVTEVf
U0VUVVANCiAgICAreyBCRUdJTihBU1NJR05fVkFMKTsgeXlsdmFsLmZsYXZvciA9IFZBUl9TSU1Q
TEU7IHJldHVybiBUX0FTU0lHTjsgfQ0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAxMDoNCiAg
ICArWVlfUlVMRV9TRVRVUA0KICAgICt7IEJFR0lOKEFTU0lHTl9WQUwpOyB5eWx2YWwuZmxhdm9y
ID0gVkFSX0FQUEVORDsgcmV0dXJuIFRfQVNTSUdOOyB9DQogICAgKwlZWV9CUkVBSw0KICAgICtj
YXNlIDExOg0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgKw0KICAgICsJWVlfQlJFQUsNCiAgICAr
Y2FzZSAxMjoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt3YXJuX2lnbm9yZWRfY2hhcmFjdGVy
KCp5eXRleHQpOw0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAxMzoNCiAgICArLyogcnVsZSAx
MyBjYW4gbWF0Y2ggZW9sICovDQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJCUJF
R0lOKElOSVRJQUwpOw0KICAgICsJCXJldHVybiBUX0VPTDsNCiAgICArCX0NCiAgICArCVlZX0JS
RUFLDQogICAgKw0KICAgICtjYXNlIDE0Og0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3sNCiAg
ICArCQlhbGxvY19zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0KICAgICsJCXl5bHZhbC5zdHJpbmcg
PSB0ZXh0Ow0KICAgICsJCXJldHVybiBUX0FTU0lHTl9WQUw7DQogICAgKwl9DQogICAgKwlZWV9C
UkVBSw0KICAgICtjYXNlIDE1Og0KICAgICsvKiBydWxlIDE1IGNhbiBtYXRjaCBlb2wgKi8NCiAg
ICArWVlfUlVMRV9TRVRVUA0KICAgICt7IEJFR0lOKElOSVRJQUwpOyByZXR1cm4gVF9FT0w7IH0N
CiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMTY6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICAr
DQogICAgKwlZWV9CUkVBSw0KICAgICsNCiAgICArY2FzZSAxNzoNCiAgICArWVlfUlVMRV9TRVRV
UA0KICAgICtyZXR1cm4gVF9BTkQ7DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDE4Og0KICAg
ICtZWV9SVUxFX1NFVFVQDQogICAgK3JldHVybiBUX09SOw0KICAgICsJWVlfQlJFQUsNCiAgICAr
Y2FzZSAxOToNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICtyZXR1cm4gVF9PUEVOX1BBUkVOOw0K
ICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAyMDoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICty
ZXR1cm4gVF9DTE9TRV9QQVJFTjsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjE6DQogICAg
K1lZX1JVTEVfU0VUVVANCiAgICArcmV0dXJuIFRfTk9UOw0KICAgICsJWVlfQlJFQUsNCiAgICAr
Y2FzZSAyMjoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICtyZXR1cm4gVF9FUVVBTDsNCiAgICAr
CVlZX0JSRUFLDQogICAgK2Nhc2UgMjM6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArcmV0dXJu
IFRfVU5FUVVBTDsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjQ6DQogICAgK1lZX1JVTEVf
U0VUVVANCiAgICArcmV0dXJuIFRfTEVTU19FUVVBTDsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nh
c2UgMjU6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArcmV0dXJuIFRfR1JFQVRFUl9FUVVBTDsN
CiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjY6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICAr
cmV0dXJuIFRfTEVTUzsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjc6DQogICAgK1lZX1JV
TEVfU0VUVVANCiAgICArcmV0dXJuIFRfR1JFQVRFUjsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nh
c2UgMjg6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJCXN0ciA9IHl5dGV4dFsw
XTsNCiAgICArCQluZXdfc3RyaW5nKCk7DQogICAgKwkJQkVHSU4oU1RSSU5HKTsNCiAgICArCX0N
CiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMjk6DQogICAgKy8qIHJ1bGUgMjkgY2FuIG1hdGNo
IGVvbCAqLw0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK0JFR0lOKElOSVRJQUwpOyByZXR1cm4g
VF9FT0w7DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDMwOg0KICAgICtZWV9SVUxFX1NFVFVQ
DQogICAgK3sNCiAgICArCQljb25zdCBzdHJ1Y3Qga2NvbmZfaWQgKmlkID0ga2NvbmZfaWRfbG9v
a3VwKHl5dGV4dCwgeXlsZW5nKTsNCiAgICArCQlpZiAoaWQgJiYgaWQtPmZsYWdzICYgVEZfUEFS
QU0pIHsNCiAgICArCQkJeXlsdmFsLmlkID0gaWQ7DQogICAgKwkJCXJldHVybiBpZC0+dG9rZW47
DQogICAgKwkJfQ0KICAgICsJCWFsbG9jX3N0cmluZyh5eXRleHQsIHl5bGVuZyk7DQogICAgKwkJ
eXlsdmFsLnN0cmluZyA9IHRleHQ7DQogICAgKwkJcmV0dXJuIFRfV09SRDsNCiAgICArCX0NCiAg
ICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMzE6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0K
ICAgICsJCS8qIHRoaXMgdG9rZW4gaW5jbHVkZXMgYXQgbGVhc3Qgb25lICckJyAqLw0KICAgICsJ
CXl5bHZhbC5zdHJpbmcgPSBleHBhbmRfdG9rZW4oeXl0ZXh0LCB5eWxlbmcpOw0KICAgICsJCWlm
IChzdHJsZW4oeXlsdmFsLnN0cmluZykpDQogICAgKwkJCXJldHVybiBUX1dPUkQ7DQogICAgKwkJ
ZnJlZSh5eWx2YWwuc3RyaW5nKTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2Ug
MzI6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArLyogY29tbWVudCAqLw0KICAgICsJWVlfQlJF
QUsNCiAgICArY2FzZSAzMzoNCiAgICArLyogcnVsZSAzMyBjYW4gbWF0Y2ggZW9sICovDQogICAg
K1lZX1JVTEVfU0VUVVANCiAgICArOw0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAzNDoNCiAg
ICArWVlfUlVMRV9TRVRVUA0KICAgICsNCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMzU6DQog
ICAgK1lZX1JVTEVfU0VUVVANCiAgICArd2Fybl9pZ25vcmVkX2NoYXJhY3RlcigqeXl0ZXh0KTsN
CiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgWVlfU1RBVEVfRU9GKFBBUkFNKToNCiAgICArew0K
ICAgICsJCUJFR0lOKElOSVRJQUwpOw0KICAgICsJfQ0KICAgICsJWVlfQlJFQUsNCiAgICArDQog
ICAgK2Nhc2UgMzY6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArYXBwZW5kX2V4cGFuZGVkX3N0
cmluZyh5eXRleHQpOw0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSAzNzoNCiAgICArLyogcnVs
ZSAzNyBjYW4gbWF0Y2ggZW9sICovDQogICAgKyp5eV9jcCA9ICh5eV9ob2xkX2NoYXIpOyAvKiB1
bmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQgKi8NCiAgICArWVlfTElORU5PX1JFV0lO
RF9UTyh5eV9jcCAtIDEpOw0KICAgICsoeXlfY19idWZfcCkgPSB5eV9jcCAtPSAxOw0KICAgICtZ
WV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovDQogICAgK1lZX1JV
TEVfU0VUVVANCiAgICArew0KICAgICsJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0K
ICAgICsJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAgICsJCXJldHVybiBUX1dPUkRfUVVPVEU7
DQogICAgKwl9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDM4Og0KICAgICtZWV9SVUxFX1NF
VFVQDQogICAgK3sNCiAgICArCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCwgeXlsZW5nKTsNCiAgICAr
CX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgMzk6DQogICAgKy8qIHJ1bGUgMzkgY2FuIG1h
dGNoIGVvbCAqLw0KICAgICsqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyogdW5kbyBlZmZlY3Rz
IG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovDQogICAgK1lZX0xJTkVOT19SRVdJTkRfVE8oeXlfY3Ag
LSAxKTsNCiAgICArKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsNCiAgICArWVlfRE9fQkVGT1JF
X0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLw0KICAgICtZWV9SVUxFX1NFVFVQDQog
ICAgK3sNCiAgICArCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOw0KICAg
ICsJCXl5bHZhbC5zdHJpbmcgPSB0ZXh0Ow0KICAgICsJCXJldHVybiBUX1dPUkRfUVVPVEU7DQog
ICAgKwl9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDQwOg0KICAgICtZWV9SVUxFX1NFVFVQ
DQogICAgK3sNCiAgICArCQlhcHBlbmRfc3RyaW5nKHl5dGV4dCArIDEsIHl5bGVuZyAtIDEpOw0K
ICAgICsJfQ0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSA0MToNCiAgICArWVlfUlVMRV9TRVRV
UA0KICAgICt7DQogICAgKwkJaWYgKHN0ciA9PSB5eXRleHRbMF0pIHsNCiAgICArCQkJQkVHSU4o
UEFSQU0pOw0KICAgICsJCQl5eWx2YWwuc3RyaW5nID0gdGV4dDsNCiAgICArCQkJcmV0dXJuIFRf
V09SRF9RVU9URTsNCiAgICArCQl9IGVsc2UNCiAgICArCQkJYXBwZW5kX3N0cmluZyh5eXRleHQs
IDEpOw0KICAgICsJfQ0KICAgICsJWVlfQlJFQUsNCiAgICArY2FzZSA0MjoNCiAgICArLyogcnVs
ZSA0MiBjYW4gbWF0Y2ggZW9sICovDQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJ
CWZwcmludGYoc3RkZXJyLA0KICAgICsJCQkiJXM6JWQ6d2FybmluZzogbXVsdGktbGluZSBzdHJp
bmdzIG5vdCBzdXBwb3J0ZWRcbiIsDQogICAgKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCkpOw0KICAgICsJCUJFR0lOKElOSVRJQUwpOw0KICAgICsJCXJldHVybiBUX0VPTDsNCiAg
ICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgWVlfU1RBVEVfRU9GKFNUUklORyk6DQog
ICAgK3sNCiAgICArCQlCRUdJTihJTklUSUFMKTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQog
ICAgKw0KICAgICtjYXNlIDQzOg0KICAgICtZWV9SVUxFX1NFVFVQDQogICAgK3sNCiAgICArCQl0
cyA9IDA7DQogICAgKwkJZm9yIChpID0gMDsgaSA8IHl5bGVuZzsgaSsrKSB7DQogICAgKwkJCWlm
ICh5eXRleHRbaV0gPT0gJ1x0JykNCiAgICArCQkJCXRzID0gKHRzICYgfjcpICsgODsNCiAgICAr
CQkJZWxzZQ0KICAgICsJCQkJdHMrKzsNCiAgICArCQl9DQogICAgKwkJbGFzdF90cyA9IHRzOw0K
ICAgICsJCWlmIChmaXJzdF90cykgew0KICAgICsJCQlpZiAodHMgPCBmaXJzdF90cykgew0KICAg
ICsJCQkJemNvbmZfZW5kaGVscCgpOw0KICAgICsJCQkJcmV0dXJuIFRfSEVMUFRFWFQ7DQogICAg
KwkJCX0NCiAgICArCQkJdHMgLT0gZmlyc3RfdHM7DQogICAgKwkJCXdoaWxlICh0cyA+IDgpIHsN
CiAgICArCQkJCWFwcGVuZF9zdHJpbmcoIiAgICAgICAgIiwgOCk7DQogICAgKwkJCQl0cyAtPSA4
Ow0KICAgICsJCQl9DQogICAgKwkJCWFwcGVuZF9zdHJpbmcoIiAgICAgICAgIiwgdHMpOw0KICAg
ICsJCX0NCiAgICArCX0NCiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgNDQ6DQogICAgKy8qIHJ1
bGUgNDQgY2FuIG1hdGNoIGVvbCAqLw0KICAgICsqeXlfY3AgPSAoeXlfaG9sZF9jaGFyKTsgLyog
dW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovDQogICAgK1lZX0xJTkVOT19SRVdJ
TkRfVE8oeXlfY3AgLSAxKTsNCiAgICArKHl5X2NfYnVmX3ApID0geXlfY3AgLT0gMTsNCiAgICAr
WVlfRE9fQkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLw0KICAgICtZWV9S
VUxFX1NFVFVQDQogICAgK3sNCiAgICArCQl6Y29uZl9lbmRoZWxwKCk7DQogICAgKwkJcmV0dXJu
IFRfSEVMUFRFWFQ7DQogICAgKwl9DQogICAgKwlZWV9CUkVBSw0KICAgICtjYXNlIDQ1Og0KICAg
ICsvKiBydWxlIDQ1IGNhbiBtYXRjaCBlb2wgKi8NCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICt7
DQogICAgKwkJYXBwZW5kX3N0cmluZygiXG4iLCAxKTsNCiAgICArCX0NCiAgICArCVlZX0JSRUFL
DQogICAgK2Nhc2UgNDY6DQogICAgK1lZX1JVTEVfU0VUVVANCiAgICArew0KICAgICsJCXdoaWxl
ICh5eWxlbmcpIHsNCiAgICArCQkJaWYgKCh5eXRleHRbeXlsZW5nLTFdICE9ICcgJykgJiYgKHl5
dGV4dFt5eWxlbmctMV0gIT0gJ1x0JykpDQogICAgKwkJCQlicmVhazsNCiAgICArCQkJeXlsZW5n
LS07DQogICAgKwkJfQ0KICAgICsJCWFwcGVuZF9zdHJpbmcoeXl0ZXh0LCB5eWxlbmcpOw0KICAg
ICsJCWlmICghZmlyc3RfdHMpDQogICAgKwkJCWZpcnN0X3RzID0gbGFzdF90czsNCiAgICArCX0N
CiAgICArCVlZX0JSRUFLDQogICAgK2Nhc2UgWVlfU1RBVEVfRU9GKEhFTFApOg0KICAgICt7DQog
ICAgKwkJemNvbmZfZW5kaGVscCgpOw0KICAgICsJCXJldHVybiBUX0hFTFBURVhUOw0KICAgICsJ
fQ0KICAgICsJWVlfQlJFQUsNCiAgICArDQogICAgK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwp
Og0KICAgICtjYXNlIFlZX1NUQVRFX0VPRihDT01NQU5EKToNCiAgICArY2FzZSBZWV9TVEFURV9F
T0YoQVNTSUdOX1ZBTCk6DQogICAgK3sNCiAgICArCWlmIChjdXJyZW50X2ZpbGUpIHsNCiAgICAr
CQl6Y29uZl9lbmRmaWxlKCk7DQogICAgKwkJcmV0dXJuIFRfRU9MOw0KICAgICsJfQ0KICAgICsJ
ZmNsb3NlKHl5aW4pOw0KICAgICsJeXl0ZXJtaW5hdGUoKTsNCiAgICArfQ0KICAgICsJWVlfQlJF
QUsNCiAgICArY2FzZSA0NzoNCiAgICArWVlfUlVMRV9TRVRVUA0KICAgICtZWV9GQVRBTF9FUlJP
UiggImZsZXggc2Nhbm5lciBqYW1tZWQiICk7DQogICAgKwlZWV9CUkVBSw0KICAgICsNCiAgICAr
CWNhc2UgWVlfRU5EX09GX0JVRkZFUjoNCiAgICArCQl7DQogICAgKwkJLyogQW1vdW50IG9mIHRl
eHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hhci4gKi8NCiAgICArCQlpbnQgeXlf
YW1vdW50X29mX21hdGNoZWRfdGV4dCA9IChpbnQpICh5eV9jcCAtICh5eXRleHRfcHRyKSkgLSAx
Ow0KICAgICsNCiAgICArCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JFRk9SRV9BQ1RJ
T04uICovDQogICAgKwkJKnl5X2NwID0gKHl5X2hvbGRfY2hhcik7DQogICAgKwkJWVlfUkVTVE9S
RV9ZWV9NT1JFX09GRlNFVA0KICAgICsNCiAgICArCQlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZGRVJfTkVXICkNCiAgICArCQkJew0KICAg
ICsJCQkvKiBXZSdyZSBzY2FubmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MN
CiAgICArCQkJICogcG9zc2libGUgdGhhdCB0aGlzIGhhcHBlbmVkIGJlY2F1c2UgdGhlIHVzZXIN
CiAgICArCQkJICoganVzdCBwb2ludGVkIHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQN
CiAgICArCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVuIHdlIGhhdmUgdG8gYXNzdXJlDQogICAg
KwkJCSAqIGNvbnNpc3RlbmN5IGJldHdlZW4gWVlfQ1VSUkVOVF9CVUZGRVIgYW5kIG91cg0KICAg
ICsJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxhY2UgdG8gZG8gc28sIGJlY2F1
c2UNCiAgICArCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0aGFuIHBvc3Np
Ymx5IGENCiAgICArCQkJICogYmFjay11cCkgdGhhdCB3aWxsIG1hdGNoIGZvciB0aGUgbmV3IGlu
cHV0IHNvdXJjZS4NCiAgICArCQkJICovDQogICAgKwkJCSh5eV9uX2NoYXJzKSA9IFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsNCiAgICArCQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9pbnB1dF9maWxlID0geXlpbjsNCiAgICArCQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsNCiAgICArCQkJfQ0K
ICAgICsNCiAgICArCQkvKiBOb3RlIHRoYXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8
PSIgdG8gdGhlIHBvc2l0aW9uDQogICAgKwkJICogb2YgdGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVm
ZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwNCiAgICArCQkgKiBhbHJlYWR5IGhhdmUgYmVlbiBp
bmNyZW1lbnRlZCBwYXN0IHRoZSBOVUwgY2hhcmFjdGVyDQogICAgKwkJICogKHNpbmNlIGFsbCBz
dGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlDQogICAgKwkJICogZW5kLW9mLWJ1
ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QNCiAgICArCQkgKiBpbiBp
bnB1dCgpLg0KICAgICsJCSAqLw0KICAgICsJCWlmICggKHl5X2NfYnVmX3ApIDw9ICZZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkNCiAgICArCQkJeyAv
KiBUaGlzIHdhcyByZWFsbHkgYSBOVUwuICovDQogICAgKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4
dF9zdGF0ZTsNCiAgICArDQogICAgKwkJCSh5eV9jX2J1Zl9wKSA9ICh5eXRleHRfcHRyKSArIHl5
X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7DQogICAgKw0KICAgICsJCQl5eV9jdXJyZW50X3N0YXRl
ID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsNCiAgICArDQogICAgKwkJCS8qIE9rYXksIHdl
J3JlIG5vdyBwb3NpdGlvbmVkIHRvIG1ha2UgdGhlIE5VTA0KICAgICsJCQkgKiB0cmFuc2l0aW9u
LiAgV2UgY291bGRuJ3QgaGF2ZQ0KICAgICsJCQkgKiB5eV9nZXRfcHJldmlvdXNfc3RhdGUoKSBn
byBhaGVhZCBhbmQgZG8gaXQNCiAgICArCQkJICogZm9yIHVzIGJlY2F1c2UgaXQgZG9lc24ndCBr
bm93IGhvdyB0byBkZWFsDQogICAgKwkJCSAqIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIGphbW1p
bmcgKGFuZCB3ZSBkb24ndA0KICAgICsJCQkgKiB3YW50IHRvIGJ1aWxkIGphbW1pbmcgaW50byBp
dCBiZWNhdXNlIHRoZW4gaXQNCiAgICArCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkpLg0KICAg
ICsJCQkgKi8NCiAgICArDQogICAgKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5z
KCB5eV9jdXJyZW50X3N0YXRlICk7DQogICAgKw0KICAgICsJCQl5eV9icCA9ICh5eXRleHRfcHRy
KSArIFlZX01PUkVfQURKOw0KICAgICsNCiAgICArCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkNCiAg
ICArCQkJCXsNCiAgICArCQkJCS8qIENvbnN1bWUgdGhlIE5VTC4gKi8NCiAgICArCQkJCXl5X2Nw
ID0gKysoeXlfY19idWZfcCk7DQogICAgKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbmV4dF9z
dGF0ZTsNCiAgICArCQkJCWdvdG8geXlfbWF0Y2g7DQogICAgKwkJCQl9DQogICAgKw0KICAgICsJ
CQllbHNlDQogICAgKwkJCQl7DQogICAgKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsNCiAgICAr
CQkJCWdvdG8geXlfZmluZF9hY3Rpb247DQogICAgKwkJCQl9DQogICAgKwkJCX0NCiAgICArDQog
ICAgKwkJZWxzZSBzd2l0Y2ggKCB5eV9nZXRfbmV4dF9idWZmZXIoICApICkNCiAgICArCQkJew0K
ICAgICsJCQljYXNlIEVPQl9BQ1RfRU5EX09GX0ZJTEU6DQogICAgKwkJCQl7DQogICAgKwkJCQko
eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDA7DQogICAgKw0KICAgICsJCQkJaWYgKCB5
eXdyYXAoICkgKQ0KICAgICsJCQkJCXsNCiAgICArCQkJCQkvKiBOb3RlOiBiZWNhdXNlIHdlJ3Zl
IHRha2VuIGNhcmUgaW4NCiAgICArCQkJCQkgKiB5eV9nZXRfbmV4dF9idWZmZXIoKSB0byBoYXZl
IHNldCB1cA0KICAgICsJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXANCiAgICArCQkJ
CQkgKiB5eV9jX2J1Zl9wIHNvIHRoYXQgaWYgc29tZSB0b3RhbA0KICAgICsJCQkJCSAqIGhvc2Vy
IChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bw0KICAgICsJCQkJCSAqIGNhbGwgdGhlIHNjYW5u
ZXIgYWZ0ZXIgd2UgcmV0dXJuIHRoZQ0KICAgICsJCQkJCSAqIFlZX05VTEwsIGl0J2xsIHN0aWxs
IHdvcmsgLSBhbm90aGVyDQogICAgKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4N
CiAgICArCQkJCQkgKi8NCiAgICArCQkJCQkoeXlfY19idWZfcCkgPSAoeXl0ZXh0X3B0cikgKyBZ
WV9NT1JFX0FESjsNCiAgICArDQogICAgKwkJCQkJeXlfYWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NU
QVJUKTsNCiAgICArCQkJCQlnb3RvIGRvX2FjdGlvbjsNCiAgICArCQkJCQl9DQogICAgKw0KICAg
ICsJCQkJZWxzZQ0KICAgICsJCQkJCXsNCiAgICArCQkJCQlpZiAoICEgKHl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZikgKQ0KICAgICsJCQkJCQlZWV9ORVdfRklMRTsNCiAgICArCQkJCQl9DQog
ICAgKwkJCQlicmVhazsNCiAgICArCQkJCX0NCiAgICArDQogICAgKwkJCWNhc2UgRU9CX0FDVF9D
T05USU5VRV9TQ0FOOg0KICAgICsJCQkJKHl5X2NfYnVmX3ApID0NCiAgICArCQkJCQkoeXl0ZXh0
X3B0cikgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0Ow0KICAgICsNCiAgICArCQkJCXl5X2N1
cnJlbnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoICApOw0KICAgICsNCiAgICArCQkJ
CXl5X2NwID0gKHl5X2NfYnVmX3ApOw0KICAgICsJCQkJeXlfYnAgPSAoeXl0ZXh0X3B0cikgKyBZ
WV9NT1JFX0FESjsNCiAgICArCQkJCWdvdG8geXlfbWF0Y2g7DQogICAgKw0KICAgICsJCQljYXNl
IEVPQl9BQ1RfTEFTVF9NQVRDSDoNCiAgICArCQkJCSh5eV9jX2J1Zl9wKSA9DQogICAgKwkJCQkm
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXTsNCiAgICAr
DQogICAgKwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCAgKTsN
CiAgICArDQogICAgKwkJCQl5eV9jcCA9ICh5eV9jX2J1Zl9wKTsNCiAgICArCQkJCXl5X2JwID0g
KHl5dGV4dF9wdHIpICsgWVlfTU9SRV9BREo7DQogICAgKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9u
Ow0KICAgICsJCQl9DQogICAgKwkJYnJlYWs7DQogICAgKwkJfQ0KICAgICsNCiAgICArCWRlZmF1
bHQ6DQogICAgKwkJWVlfRkFUQUxfRVJST1IoDQogICAgKwkJCSJmYXRhbCBmbGV4IHNjYW5uZXIg
aW50ZXJuYWwgZXJyb3ItLW5vIGFjdGlvbiBmb3VuZCIgKTsNCiAgICArCX0gLyogZW5kIG9mIGFj
dGlvbiBzd2l0Y2ggKi8NCiAgICArCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8N
CiAgICArCX0gLyogZW5kIG9mIHVzZXIncyBkZWNsYXJhdGlvbnMgKi8NCiAgICArfSAvKiBlbmQg
b2YgeXlsZXggKi8NCiAgICArDQogICAgKy8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byBy
ZWFkIGluIGEgbmV3IGJ1ZmZlcg0KICAgICsgKg0KICAgICsgKiBSZXR1cm5zIGEgY29kZSByZXBy
ZXNlbnRpbmcgYW4gYWN0aW9uOg0KICAgICsgKglFT0JfQUNUX0xBU1RfTUFUQ0ggLQ0KICAgICsg
KglFT0JfQUNUX0NPTlRJTlVFX1NDQU4gLSBjb250aW51ZSBzY2FubmluZyBmcm9tIGN1cnJlbnQg
cG9zaXRpb24NCiAgICArICoJRU9CX0FDVF9FTkRfT0ZfRklMRSAtIGVuZCBvZiBmaWxlDQogICAg
KyAqLw0KICAgICtzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAodm9pZCkNCiAgICArew0K
ICAgICsgICAgCWNoYXIgKmRlc3QgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
ZjsNCiAgICArCWNoYXIgKnNvdXJjZSA9ICh5eXRleHRfcHRyKTsNCiAgICArCWludCBudW1iZXJf
dG9fbW92ZSwgaTsNCiAgICArCWludCByZXRfdmFsOw0KICAgICsNCiAgICArCWlmICggKHl5X2Nf
YnVmX3ApID4gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5eV9uX2NoYXJz
KSArIDFdICkNCiAgICArCQlZWV9GQVRBTF9FUlJPUigNCiAgICArCQkiZmF0YWwgZmxleCBzY2Fu
bmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsNCiAgICArDQogICAg
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0gMCApDQog
ICAgKwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVP
Ri4gKi8NCiAgICArCQlpZiAoICh5eV9jX2J1Zl9wKSAtICh5eXRleHRfcHRyKSAtIFlZX01PUkVf
QURKID09IDEgKQ0KICAgICsJCQl7DQogICAgKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hh
cmFjdGVyLCB0aGUgRU9CLCBzbw0KICAgICsJCQkgKiB0cmVhdCB0aGlzIGFzIGEgZmluYWwgRU9G
Lg0KICAgICsJCQkgKi8NCiAgICArCQkJcmV0dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7DQogICAg
KwkJCX0NCiAgICArDQogICAgKwkJZWxzZQ0KICAgICsJCQl7DQogICAgKwkJCS8qIFdlIG1hdGNo
ZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0DQogICAgKwkJCSAqIHByb2Nlc3Mg
aXQuDQogICAgKwkJCSAqLw0KICAgICsJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOw0KICAg
ICsJCQl9DQogICAgKwkJfQ0KICAgICsNCiAgICArCS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4g
Ki8NCiAgICArDQogICAgKwkvKiBGaXJzdCBtb3ZlIGxhc3QgY2hhcnMgdG8gc3RhcnQgb2YgYnVm
ZmVyLiAqLw0KICAgICsJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoKHl5X2NfYnVmX3ApIC0gKHl5
dGV4dF9wdHIpIC0gMSk7DQogICAgKw0KICAgICsJZm9yICggaSA9IDA7IGkgPCBudW1iZXJfdG9f
bW92ZTsgKytpICkNCiAgICArCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsNCiAgICArDQogICAg
KwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9C
VUZGRVJfRU9GX1BFTkRJTkcgKQ0KICAgICsJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5v
dCBndWFyYW50ZWVkIHRvIHJldHVybiBhbiBFT0YsDQogICAgKwkJICoganVzdCBmb3JjZSBhbiBF
T0YNCiAgICArCQkgKi8NCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hh
cnMgPSAoeXlfbl9jaGFycykgPSAwOw0KICAgICsNCiAgICArCWVsc2UNCiAgICArCQl7DQogICAg
KwkJCWludCBudW1fdG9fcmVhZCA9DQogICAgKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7DQogICAgKw0KICAgICsJCXdoaWxlICgg
bnVtX3RvX3JlYWQgPD0gMCApDQogICAgKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBi
dWZmZXIgLSBncm93IGl0LiAqLw0KICAgICsNCiAgICArCQkJLyoganVzdCBhIHNob3J0ZXIgbmFt
ZSBmb3IgdGhlIGN1cnJlbnQgYnVmZmVyICovDQogICAgKwkJCVlZX0JVRkZFUl9TVEFURSBiID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFOw0KICAgICsNCiAgICArCQkJaW50IHl5X2NfYnVmX3Bf
b2Zmc2V0ID0NCiAgICArCQkJCShpbnQpICgoeXlfY19idWZfcCkgLSBiLT55eV9jaF9idWYpOw0K
ICAgICsNCiAgICArCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkNCiAgICArCQkJCXsNCiAg
ICArCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsNCiAgICArDQogICAgKwkJ
CQlpZiAoIG5ld19zaXplIDw9IDAgKQ0KICAgICsJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5
X2J1Zl9zaXplIC8gODsNCiAgICArCQkJCWVsc2UNCiAgICArCQkJCQliLT55eV9idWZfc2l6ZSAq
PSAyOw0KICAgICsNCiAgICArCQkJCWItPnl5X2NoX2J1ZiA9IChjaGFyICopDQogICAgKwkJCQkJ
LyogSW5jbHVkZSByb29tIGluIGZvciAyIEVPQiBjaGFycy4gKi8NCiAgICArCQkJCQl5eXJlYWxs
b2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAgKTsNCiAgICArCQkJ
CX0NCiAgICArCQkJZWxzZQ0KICAgICsJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qgb3du
IGl0LiAqLw0KICAgICsJCQkJYi0+eXlfY2hfYnVmID0gTlVMTDsNCiAgICArDQogICAgKwkJCWlm
ICggISBiLT55eV9jaF9idWYgKQ0KICAgICsJCQkJWVlfRkFUQUxfRVJST1IoDQogICAgKwkJCQki
ZmF0YWwgZXJyb3IgLSBzY2FubmVyIGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsNCiAgICArDQog
ICAgKwkJCSh5eV9jX2J1Zl9wKSA9ICZiLT55eV9jaF9idWZbeXlfY19idWZfcF9vZmZzZXRdOw0K
ICAgICsNCiAgICArCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9zaXplIC0NCiAgICArCQkJCQkJbnVtYmVyX3RvX21vdmUgLSAxOw0KICAgICsNCiAgICAr
CQkJfQ0KICAgICsNCiAgICArCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSAp
DQogICAgKwkJCW51bV90b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsNCiAgICArDQogICAgKwkJ
LyogUmVhZCBpbiBtb3JlIGRhdGEuICovDQogICAgKwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVyX3RvX21vdmVdKSwNCiAgICArCQkJKHl5X25f
Y2hhcnMpLCBudW1fdG9fcmVhZCApOw0KICAgICsNCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7DQogICAgKwkJfQ0KICAgICsNCiAgICAr
CWlmICggKHl5X25fY2hhcnMpID09IDAgKQ0KICAgICsJCXsNCiAgICArCQlpZiAoIG51bWJlcl90
b19tb3ZlID09IFlZX01PUkVfQURKICkNCiAgICArCQkJew0KICAgICsJCQlyZXRfdmFsID0gRU9C
X0FDVF9FTkRfT0ZfRklMRTsNCiAgICArCQkJeXlyZXN0YXJ0KHl5aW4gICk7DQogICAgKwkJCX0N
CiAgICArDQogICAgKwkJZWxzZQ0KICAgICsJCQl7DQogICAgKwkJCXJldF92YWwgPSBFT0JfQUNU
X0xBU1RfTUFUQ0g7DQogICAgKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVy
X3N0YXR1cyA9DQogICAgKwkJCQlZWV9CVUZGRVJfRU9GX1BFTkRJTkc7DQogICAgKwkJCX0NCiAg
ICArCQl9DQogICAgKw0KICAgICsJZWxzZQ0KICAgICsJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJ
TlVFX1NDQU47DQogICAgKw0KICAgICsJaWYgKCgoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92
ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7DQogICAgKwkJLyog
RXh0ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4g
Ki8NCiAgICArCQlpbnQgbmV3X3NpemUgPSAoeXlfbl9jaGFycykgKyBudW1iZXJfdG9fbW92ZSAr
ICgoeXlfbl9jaGFycykgPj4gMSk7DQogICAgKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgICk7DQogICAgKwkJaWYgKCAhIFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICkNCiAgICArCQkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7DQogICAgKwl9DQog
ICAgKw0KICAgICsJKHl5X25fY2hhcnMpICs9IG51bWJlcl90b19tb3ZlOw0KICAgICsJWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbKHl5X25fY2hhcnMpXSA9IFlZX0VORF9PRl9C
VUZGRVJfQ0hBUjsNCiAgICArCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWyh5
eV9uX2NoYXJzKSArIDFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOw0KICAgICsNCiAgICArCSh5
eXRleHRfcHRyKSA9ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsNCiAg
ICArDQogICAgKwlyZXR1cm4gcmV0X3ZhbDsNCiAgICArfQ0KICAgICsNCiAgICArLyogeXlfZ2V0
X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0aGUgRU9CIGNoYXIg
d2FzIHJlYWNoZWQgKi8NCiAgICArDQogICAgKyAgICBzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9n
ZXRfcHJldmlvdXNfc3RhdGUgKHZvaWQpDQogICAgK3sNCiAgICArCXl5X3N0YXRlX3R5cGUgeXlf
Y3VycmVudF9zdGF0ZTsNCiAgICArCWNoYXIgKnl5X2NwOw0KICAgICsgICAgDQogICAgKwl5eV9j
dXJyZW50X3N0YXRlID0gKHl5X3N0YXJ0KTsNCiAgICArDQogICAgKwlmb3IgKCB5eV9jcCA9ICh5
eXRleHRfcHRyKSArIFlZX01PUkVfQURKOyB5eV9jcCA8ICh5eV9jX2J1Zl9wKTsgKyt5eV9jcCAp
DQogICAgKwkJew0KICAgICsJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfY3VycmVudF9z
dGF0ZV1bKCp5eV9jcCA/IHl5X2VjW1lZX1NDX1RPX1VJKCp5eV9jcCldIDogMSldOw0KICAgICsJ
CX0NCiAgICArDQogICAgKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsNCiAgICArfQ0KICAgICsN
CiAgICArLyogeXlfdHJ5X05VTF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0
aGUgTlVMIGNoYXJhY3Rlcg0KICAgICsgKg0KICAgICsgKiBzeW5vcHNpcw0KICAgICsgKgluZXh0
X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVudF9zdGF0ZSApOw0KICAgICsgKi8NCiAg
ICArICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxfdHJhbnMgICh5eV9zdGF0ZV90
eXBlIHl5X2N1cnJlbnRfc3RhdGUgKQ0KICAgICt7DQogICAgKwlpbnQgeXlfaXNfamFtOw0KICAg
ICsgICAgDQogICAgKwl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2N1cnJlbnRfc3RhdGVd
WzFdOw0KICAgICsJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPD0gMCk7DQogICAgKw0K
ICAgICsJCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsNCiAgICArfQ0K
ICAgICsNCiAgICArI2lmbmRlZiBZWV9OT19VTlBVVA0KICAgICsNCiAgICArICAgIHN0YXRpYyB2
b2lkIHl5dW5wdXQgKGludCBjLCBjaGFyICogeXlfYnAgKQ0KICAgICt7DQogICAgKwljaGFyICp5
eV9jcDsNCiAgICArICAgIA0KICAgICsgICAgeXlfY3AgPSAoeXlfY19idWZfcCk7DQogICAgKw0K
ICAgICsJLyogdW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0ICovDQogICAgKwkqeXlf
Y3AgPSAoeXlfaG9sZF9jaGFyKTsNCiAgICArDQogICAgKwlpZiAoIHl5X2NwIDwgWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKyAyICkNCiAgICArCQl7IC8qIG5lZWQgdG8gc2hp
ZnQgdGhpbmdzIHVwIHRvIG1ha2Ugcm9vbSAqLw0KICAgICsJCS8qICsyIGZvciBFT0IgY2hhcnMu
ICovDQogICAgKwkJaW50IG51bWJlcl90b19tb3ZlID0gKHl5X25fY2hhcnMpICsgMjsNCiAgICAr
CQljaGFyICpkZXN0ID0gJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmWw0KICAg
ICsJCQkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgKyAyXTsNCiAgICAr
CQljaGFyICpzb3VyY2UgPQ0KICAgICsJCQkJJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlf
Y2hfYnVmW251bWJlcl90b19tb3ZlXTsNCiAgICArDQogICAgKwkJd2hpbGUgKCBzb3VyY2UgPiBZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApDQogICAgKwkJCSotLWRlc3QgPSAq
LS1zb3VyY2U7DQogICAgKw0KICAgICsJCXl5X2NwICs9IChpbnQpIChkZXN0IC0gc291cmNlKTsN
CiAgICArCQl5eV9icCArPSAoaW50KSAoZGVzdCAtIHNvdXJjZSk7DQogICAgKwkJWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0NCiAgICArCQkJKHl5X25fY2hhcnMpID0gKGlu
dCkgWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZTsNCiAgICArDQogICAgKwkJ
aWYgKCB5eV9jcCA8IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmICsgMiApDQog
ICAgKwkJCVlZX0ZBVEFMX0VSUk9SKCAiZmxleCBzY2FubmVyIHB1c2gtYmFjayBvdmVyZmxvdyIg
KTsNCiAgICArCQl9DQogICAgKw0KICAgICsJKi0teXlfY3AgPSAoY2hhcikgYzsNCiAgICArDQog
ICAgKyAgICBpZiAoIGMgPT0gJ1xuJyApew0KICAgICsgICAgICAgIC0teXlsaW5lbm87DQogICAg
KyAgICB9DQogICAgKw0KICAgICsJKHl5dGV4dF9wdHIpID0geXlfYnA7DQogICAgKwkoeXlfaG9s
ZF9jaGFyKSA9ICp5eV9jcDsNCiAgICArCSh5eV9jX2J1Zl9wKSA9IHl5X2NwOw0KICAgICt9DQog
ICAgKw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZm5kZWYgWVlfTk9fSU5QVVQNCiAgICAr
I2lmZGVmIF9fY3BsdXNwbHVzDQogICAgKyAgICBzdGF0aWMgaW50IHl5aW5wdXQgKHZvaWQpDQog
ICAgKyNlbHNlDQogICAgKyAgICBzdGF0aWMgaW50IGlucHV0ICAodm9pZCkNCiAgICArI2VuZGlm
DQogICAgKw0KICAgICt7DQogICAgKwlpbnQgYzsNCiAgICArICAgIA0KICAgICsJKih5eV9jX2J1
Zl9wKSA9ICh5eV9ob2xkX2NoYXIpOw0KICAgICsNCiAgICArCWlmICggKih5eV9jX2J1Zl9wKSA9
PSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQ0KICAgICsJCXsNCiAgICArCQkvKiB5eV9jX2J1Zl9w
IG5vdyBwb2ludHMgdG8gdGhlIGNoYXJhY3RlciB3ZSB3YW50IHRvIHJldHVybi4NCiAgICArCQkg
KiBJZiB0aGlzIG9jY3VycyAqYmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBh
DQogICAgKwkJICogdmFsaWQgTlVMOyBpZiBub3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2Yg
dGhlIGJ1ZmZlci4NCiAgICArCQkgKi8NCiAgICArCQlpZiAoICh5eV9jX2J1Zl9wKSA8ICZZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlsoeXlfbl9jaGFycyldICkNCiAgICArCQkJ
LyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLw0KICAgICsJCQkqKHl5X2NfYnVmX3ApID0gJ1ww
JzsNCiAgICArDQogICAgKwkJZWxzZQ0KICAgICsJCQl7IC8qIG5lZWQgbW9yZSBpbnB1dCAqLw0K
ICAgICsJCQlpbnQgb2Zmc2V0ID0gKHl5X2NfYnVmX3ApIC0gKHl5dGV4dF9wdHIpOw0KICAgICsJ
CQkrKyh5eV9jX2J1Zl9wKTsNCiAgICArDQogICAgKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1
ZmZlciggICkgKQ0KICAgICsJCQkJew0KICAgICsJCQkJY2FzZSBFT0JfQUNUX0xBU1RfTUFUQ0g6
DQogICAgKwkJCQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQ0KICAgICsJCQkJ
CSAqIHNlZXMgdGhhdCB3ZSd2ZSBhY2N1bXVsYXRlZCBhDQogICAgKwkJCQkJICogdG9rZW4gYW5k
IGZsYWdzIHRoYXQgd2UgbmVlZCB0bw0KICAgICsJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9r
ZW4gYmVmb3JlDQogICAgKwkJCQkJICogcHJvY2VlZGluZy4gIEJ1dCBmb3IgaW5wdXQoKSwNCiAg
ICArCQkJCQkgKiB0aGVyZSdzIG5vIG1hdGNoaW5nIHRvIGNvbnNpZGVyLg0KICAgICsJCQkJCSAq
IFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSA0KICAgICsJCQkJCSAqIHRvIEVPQl9B
Q1RfRU5EX09GX0ZJTEUuDQogICAgKwkJCQkJICovDQogICAgKw0KICAgICsJCQkJCS8qIFJlc2V0
IGJ1ZmZlciBzdGF0dXMuICovDQogICAgKwkJCQkJeXlyZXN0YXJ0KHl5aW4gKTsNCiAgICArDQog
ICAgKwkJCQkJLypGQUxMVEhST1VHSCovDQogICAgKw0KICAgICsJCQkJY2FzZSBFT0JfQUNUX0VO
RF9PRl9GSUxFOg0KICAgICsJCQkJCXsNCiAgICArCQkJCQlpZiAoIHl5d3JhcCggKSApDQogICAg
KwkJCQkJCXJldHVybiAwOw0KICAgICsNCiAgICArCQkJCQlpZiAoICEgKHl5X2RpZF9idWZmZXJf
c3dpdGNoX29uX2VvZikgKQ0KICAgICsJCQkJCQlZWV9ORVdfRklMRTsNCiAgICArI2lmZGVmIF9f
Y3BsdXNwbHVzDQogICAgKwkJCQkJcmV0dXJuIHl5aW5wdXQoKTsNCiAgICArI2Vsc2UNCiAgICAr
CQkJCQlyZXR1cm4gaW5wdXQoKTsNCiAgICArI2VuZGlmDQogICAgKwkJCQkJfQ0KICAgICsNCiAg
ICArCQkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOg0KICAgICsJCQkJCSh5eV9jX2J1Zl9w
KSA9ICh5eXRleHRfcHRyKSArIG9mZnNldDsNCiAgICArCQkJCQlicmVhazsNCiAgICArCQkJCX0N
CiAgICArCQkJfQ0KICAgICsJCX0NCiAgICArDQogICAgKwljID0gKih1bnNpZ25lZCBjaGFyICop
ICh5eV9jX2J1Zl9wKTsJLyogY2FzdCBmb3IgOC1iaXQgY2hhcidzICovDQogICAgKwkqKHl5X2Nf
YnVmX3ApID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0ZXh0ICovDQogICAgKwkoeXlfaG9sZF9jaGFy
KSA9ICorKyh5eV9jX2J1Zl9wKTsNCiAgICArDQogICAgKwlpZiAoIGMgPT0gJ1xuJyApDQogICAg
KwkJDQogICAgKyAgICB5eWxpbmVubysrOw0KICAgICs7DQogICAgKw0KICAgICsJcmV0dXJuIGM7
DQogICAgK30NCiAgICArI2VuZGlmCS8qIGlmbmRlZiBZWV9OT19JTlBVVCAqLw0KICAgICsNCiAg
ICArLyoqIEltbWVkaWF0ZWx5IHN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBzdHJlYW0uDQog
ICAgKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFtLg0KICAgICsgKiANCiAg
ICArICogQG5vdGUgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXNldCB0aGUgc3RhcnQgY29uZGl0
aW9uIHRvIEBjIElOSVRJQUwgLg0KICAgICsgKi8NCiAgICArICAgIHZvaWQgeXlyZXN0YXJ0ICAo
RklMRSAqIGlucHV0X2ZpbGUgKQ0KICAgICt7DQogICAgKyAgICANCiAgICArCWlmICggISBZWV9D
VVJSRU5UX0JVRkZFUiApew0KICAgICsgICAgICAgIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsN
CiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPQ0KICAgICsgICAgICAgICAgICB5eV9j
cmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgKTsNCiAgICArCX0NCiAgICArDQogICAgKwl5
eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9maWxlICk7DQogICAgKwl5eV9s
b2FkX2J1ZmZlcl9zdGF0ZSggKTsNCiAgICArfQ0KICAgICsNCiAgICArLyoqIFN3aXRjaCB0byBh
IGRpZmZlcmVudCBpbnB1dCBidWZmZXIuDQogICAgKyAqIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBu
ZXcgaW5wdXQgYnVmZmVyLg0KICAgICsgKiANCiAgICArICovDQogICAgKyAgICB2b2lkIHl5X3N3
aXRjaF90b19idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIG5ld19idWZmZXIgKQ0KICAgICt7DQog
ICAgKyAgICANCiAgICArCS8qIFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhp
cyBlbnRpcmUgZnVuY3Rpb24gYm9keQ0KICAgICsJICogd2l0aA0KICAgICsJICoJCXl5cG9wX2J1
ZmZlcl9zdGF0ZSgpOw0KICAgICsJICoJCXl5cHVzaF9idWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7
DQogICAgKyAgICAgKi8NCiAgICArCXl5ZW5zdXJlX2J1ZmZlcl9zdGFjayAoKTsNCiAgICArCWlm
ICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApDQogICAgKwkJcmV0dXJuOw0KICAg
ICsNCiAgICArCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQ0KICAgICsJCXsNCiAgICArCQkvKiBG
bHVzaCBvdXQgaW5mb3JtYXRpb24gZm9yIG9sZCBidWZmZXIuICovDQogICAgKwkJKih5eV9jX2J1
Zl9wKSA9ICh5eV9ob2xkX2NoYXIpOw0KICAgICsJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYnVmX3BvcyA9ICh5eV9jX2J1Zl9wKTsNCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X25fY2hhcnMgPSAoeXlfbl9jaGFycyk7DQogICAgKwkJfQ0KICAgICsNCiAgICArCVlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7DQogICAgKwl5eV9sb2FkX2J1ZmZl
cl9zdGF0ZSggKTsNCiAgICArDQogICAgKwkvKiBXZSBkb24ndCBhY3R1YWxseSBrbm93IHdoZXRo
ZXIgd2UgZGlkIHRoaXMgc3dpdGNoIGR1cmluZw0KICAgICsJICogRU9GICh5eXdyYXAoKSkgcHJv
Y2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFnDQogICAgKwkgKiBpcyBsb29rZWQg
YXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUNCiAgICArCSAqIHRv
IGdvIGFoZWFkIGFuZCBhbHdheXMgc2V0IGl0Lg0KICAgICsJICovDQogICAgKwkoeXlfZGlkX2J1
ZmZlcl9zd2l0Y2hfb25fZW9mKSA9IDE7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lk
IHl5X2xvYWRfYnVmZmVyX3N0YXRlICAodm9pZCkNCiAgICArew0KICAgICsgICAgCSh5eV9uX2No
YXJzKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsNCiAgICArCSh5eXRl
eHRfcHRyKSA9ICh5eV9jX2J1Zl9wKSA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvczsNCiAgICArCXl5aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2Zp
bGU7DQogICAgKwkoeXlfaG9sZF9jaGFyKSA9ICooeXlfY19idWZfcCk7DQogICAgK30NCiAgICAr
DQogICAgKy8qKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhbiBpbnB1dCBidWZmZXIgc3RhdGUu
DQogICAgKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFibGUgc3RyZWFtLg0KICAgICsgKiBAcGFyYW0g
c2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVzLiBXaGVuIGluIGRvdWJ0LCB1
c2UgQGMgWVlfQlVGX1NJWkUuDQogICAgKyAqIA0KICAgICsgKiBAcmV0dXJuIHRoZSBhbGxvY2F0
ZWQgYnVmZmVyIHN0YXRlLg0KICAgICsgKi8NCiAgICArICAgIFlZX0JVRkZFUl9TVEFURSB5eV9j
cmVhdGVfYnVmZmVyICAoRklMRSAqIGZpbGUsIGludCAgc2l6ZSApDQogICAgK3sNCiAgICArCVlZ
X0JVRkZFUl9TVEFURSBiOw0KICAgICsgICAgDQogICAgKwliID0gKFlZX0JVRkZFUl9TVEFURSkg
eXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsNCiAgICArCWlmICgg
ISBiICkNCiAgICArCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eV9jcmVhdGVfYnVmZmVyKCkiICk7DQogICAgKw0KICAgICsJYi0+eXlfYnVmX3NpemUgPSAoeXlf
c2l6ZV90KXNpemU7DQogICAgKw0KICAgICsJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNoYXJh
Y3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQ0KICAgICsJICogd2UgbmVl
ZCB0byBwdXQgaW4gMiBlbmQtb2YtYnVmZmVyIGNoYXJhY3RlcnMuDQogICAgKwkgKi8NCiAgICAr
CWItPnl5X2NoX2J1ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICApOw0K
ICAgICsJaWYgKCAhIGItPnl5X2NoX2J1ZiApDQogICAgKwkJWVlfRkFUQUxfRVJST1IoICJvdXQg
b2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOw0KICAgICsNCiAgICAr
CWItPnl5X2lzX291cl9idWZmZXIgPSAxOw0KICAgICsNCiAgICArCXl5X2luaXRfYnVmZmVyKGIs
ZmlsZSApOw0KICAgICsNCiAgICArCXJldHVybiBiOw0KICAgICt9DQogICAgKw0KICAgICsvKiog
RGVzdHJveSB0aGUgYnVmZmVyLg0KICAgICsgKiBAcGFyYW0gYiBhIGJ1ZmZlciBjcmVhdGVkIHdp
dGggeXlfY3JlYXRlX2J1ZmZlcigpDQogICAgKyAqIA0KICAgICsgKi8NCiAgICArICAgIHZvaWQg
eXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkNCiAgICArew0KICAgICsgICAg
DQogICAgKwlpZiAoICEgYiApDQogICAgKwkJcmV0dXJuOw0KICAgICsNCiAgICArCWlmICggYiA9
PSBZWV9DVVJSRU5UX0JVRkZFUiApIC8qIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBwb3AgaGVyZS4g
Ki8NCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVGRkVSX1NUQVRFKSAw
Ow0KICAgICsNCiAgICArCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApDQogICAgKwkJeXlmcmVl
KCh2b2lkICopIGItPnl5X2NoX2J1ZiAgKTsNCiAgICArDQogICAgKwl5eWZyZWUoKHZvaWQgKikg
YiAgKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXpl
cyBhIGJ1ZmZlci4NCiAgICArICogVGhpcyBmdW5jdGlvbiBpcyBzb21ldGltZXMgY2FsbGVkIG1v
cmUgdGhhbiBvbmNlIG9uIHRoZSBzYW1lIGJ1ZmZlciwNCiAgICArICogc3VjaCBhcyBkdXJpbmcg
YSB5eXJlc3RhcnQoKSBvciBhdCBFT0YuDQogICAgKyAqLw0KICAgICsgICAgc3RhdGljIHZvaWQg
eXlfaW5pdF9idWZmZXIgIChZWV9CVUZGRVJfU1RBVEUgIGIsIEZJTEUgKiBmaWxlICkNCiAgICAr
DQogICAgK3sNCiAgICArCWludCBvZXJybm8gPSBlcnJubzsNCiAgICArICAgIA0KICAgICsJeXlf
Zmx1c2hfYnVmZmVyKGIgKTsNCiAgICArDQogICAgKwliLT55eV9pbnB1dF9maWxlID0gZmlsZTsN
CiAgICArCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsNCiAgICArDQogICAgKyAgICAvKiBJZiBiIGlz
IHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2JhYmx5Xw0K
ICAgICsgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4
dF9idWZmZXIuDQogICAgKyAgICAgKiBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gcmVz
ZXQgdGhlIGxpbmVubyBvciBjb2x1bW4uDQogICAgKyAgICAgKi8NCiAgICArICAgIGlmIChiICE9
IFlZX0NVUlJFTlRfQlVGRkVSKXsNCiAgICArICAgICAgICBiLT55eV9ic19saW5lbm8gPSAxOw0K
ICAgICsgICAgICAgIGItPnl5X2JzX2NvbHVtbiA9IDA7DQogICAgKyAgICB9DQogICAgKw0KICAg
ICsgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsNCiAgICArICAgIA0KICAgICsJZXJy
bm8gPSBvZXJybm87DQogICAgK30NCiAgICArDQogICAgKy8qKiBEaXNjYXJkIGFsbCBidWZmZXJl
ZCBjaGFyYWN0ZXJzLiBPbiB0aGUgbmV4dCBzY2FuLCBZWV9JTlBVVCB3aWxsIGJlIGNhbGxlZC4N
CiAgICArICogQHBhcmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5
IEBjIFlZX0NVUlJFTlRfQlVGRkVSLg0KICAgICsgKiANCiAgICArICovDQogICAgKyAgICB2b2lk
IHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICkNCiAgICArew0KICAgICsgICAg
CWlmICggISBiICkNCiAgICArCQlyZXR1cm47DQogICAgKw0KICAgICsJYi0+eXlfbl9jaGFycyA9
IDA7DQogICAgKw0KICAgICsJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hh
cmFjdGVycy4gIFRoZSBmaXJzdCBjYXVzZXMNCiAgICArCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUg
ZW5kLW9mLWJ1ZmZlciBzdGF0ZS4gIFRoZSBzZWNvbmQgY2F1c2VzDQogICAgKwkgKiBhIGphbSBp
biB0aGF0IHN0YXRlLg0KICAgICsJICovDQogICAgKwliLT55eV9jaF9idWZbMF0gPSBZWV9FTkRf
T0ZfQlVGRkVSX0NIQVI7DQogICAgKwliLT55eV9jaF9idWZbMV0gPSBZWV9FTkRfT0ZfQlVGRkVS
X0NIQVI7DQogICAgKw0KICAgICsJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9idWZbMF07DQog
ICAgKw0KICAgICsJYi0+eXlfYXRfYm9sID0gMTsNCiAgICArCWItPnl5X2J1ZmZlcl9zdGF0dXMg
PSBZWV9CVUZGRVJfTkVXOw0KICAgICsNCiAgICArCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZF
UiApDQogICAgKwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoICk7DQogICAgK30NCiAgICArDQogICAg
Ky8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBvbnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBi
ZWNvbWVzDQogICAgKyAqICB0aGUgY3VycmVudCBzdGF0ZS4gVGhpcyBmdW5jdGlvbiB3aWxsIGFs
bG9jYXRlIHRoZSBzdGFjaw0KICAgICsgKiAgaWYgbmVjZXNzYXJ5Lg0KICAgICsgKiAgQHBhcmFt
IG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4NCiAgICArICogIA0KICAgICsgKi8NCiAgICArdm9p
ZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciApDQogICAg
K3sNCiAgICArICAgIAlpZiAobmV3X2J1ZmZlciA9PSBOVUxMKQ0KICAgICsJCXJldHVybjsNCiAg
ICArDQogICAgKwl5eWVuc3VyZV9idWZmZXJfc3RhY2soKTsNCiAgICArDQogICAgKwkvKiBUaGlz
IGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRjaF90b19idWZmZXIuICovDQogICAgKwlpZiAo
IFlZX0NVUlJFTlRfQlVGRkVSICkNCiAgICArCQl7DQogICAgKwkJLyogRmx1c2ggb3V0IGluZm9y
bWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLw0KICAgICsJCSooeXlfY19idWZfcCkgPSAoeXlfaG9s
ZF9jaGFyKTsNCiAgICArCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3MgPSAo
eXlfY19idWZfcCk7DQogICAgKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJz
ID0gKHl5X25fY2hhcnMpOw0KICAgICsJCX0NCiAgICArDQogICAgKwkvKiBPbmx5IHB1c2ggaWYg
dG9wIGV4aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8NCiAgICArCWlmIChZWV9DVVJS
RU5UX0JVRkZFUikNCiAgICArCQkoeXlfYnVmZmVyX3N0YWNrX3RvcCkrKzsNCiAgICArCVlZX0NV
UlJFTlRfQlVGRkVSX0xWQUxVRSA9IG5ld19idWZmZXI7DQogICAgKw0KICAgICsJLyogY29waWVk
IGZyb20geXlfc3dpdGNoX3RvX2J1ZmZlci4gKi8NCiAgICArCXl5X2xvYWRfYnVmZmVyX3N0YXRl
KCApOw0KICAgICsJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAxOw0KICAgICt9DQog
ICAgKw0KICAgICsvKiogUmVtb3ZlcyBhbmQgZGVsZXRlcyB0aGUgdG9wIG9mIHRoZSBzdGFjaywg
aWYgcHJlc2VudC4NCiAgICArICogIFRoZSBuZXh0IGVsZW1lbnQgYmVjb21lcyB0aGUgbmV3IHRv
cC4NCiAgICArICogIA0KICAgICsgKi8NCiAgICArdm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHZv
aWQpDQogICAgK3sNCiAgICArICAgIAlpZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQ0KICAgICsJCXJl
dHVybjsNCiAgICArDQogICAgKwl5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSICk7
DQogICAgKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBOVUxMOw0KICAgICsJaWYgKCh5eV9i
dWZmZXJfc3RhY2tfdG9wKSA+IDApDQogICAgKwkJLS0oeXlfYnVmZmVyX3N0YWNrX3RvcCk7DQog
ICAgKw0KICAgICsJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7DQogICAgKwkJeXlfbG9hZF9idWZm
ZXJfc3RhdGUoICk7DQogICAgKwkJKHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZikgPSAxOw0K
ICAgICsJfQ0KICAgICt9DQogICAgKw0KICAgICsvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0
IGRvZXMgbm90IGV4aXN0Lg0KICAgICsgKiAgR3VhcmFudGVlcyBzcGFjZSBmb3IgYXQgbGVhc3Qg
b25lIHB1c2guDQogICAgKyAqLw0KICAgICtzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHZvaWQpDQogICAgK3sNCiAgICArCWludCBudW1fdG9fYWxsb2M7DQogICAgKyAgICANCiAg
ICArCWlmICghKHl5X2J1ZmZlcl9zdGFjaykpIHsNCiAgICArDQogICAgKwkJLyogRmlyc3QgYWxs
b2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5jZSB3ZSBkb24ndCBrbm93IGlmIHRo
aXMNCiAgICArCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2suIFdlIHVzZSAyIGlu
c3RlYWQgb2YgMSB0byBhdm9pZCBhbg0KICAgICsJCSAqIGltbWVkaWF0ZSByZWFsbG9jIG9uIHRo
ZSBuZXh0IGNhbGwuDQogICAgKyAgICAgICAgICovDQogICAgKyAgICAgIG51bV90b19hbGxvYyA9
IDE7IC8qIEFmdGVyIGFsbCB0aGF0IHRhbGssIHRoaXMgd2FzIHNldCB0byAxIGFueXdheXMuLi4g
Ki8NCiAgICArCQkoeXlfYnVmZmVyX3N0YWNrKSA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiop
eXlhbGxvYw0KICAgICsJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1
ZmZlcl9zdGF0ZSopDQogICAgKwkJCQkJCQkJKTsNCiAgICArCQlpZiAoICEgKHl5X2J1ZmZlcl9z
dGFjaykgKQ0KICAgICsJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBp
biB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsNCiAgICArDQogICAgKwkJbWVtc2V0KCh5eV9i
dWZmZXJfc3RhY2spLCAwLCBudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9z
dGF0ZSopKTsNCiAgICArDQogICAgKwkJKHl5X2J1ZmZlcl9zdGFja19tYXgpID0gbnVtX3RvX2Fs
bG9jOw0KICAgICsJCSh5eV9idWZmZXJfc3RhY2tfdG9wKSA9IDA7DQogICAgKwkJcmV0dXJuOw0K
ICAgICsJfQ0KICAgICsNCiAgICArCWlmICgoeXlfYnVmZmVyX3N0YWNrX3RvcCkgPj0gKCh5eV9i
dWZmZXJfc3RhY2tfbWF4KSkgLSAxKXsNCiAgICArDQogICAgKwkJLyogSW5jcmVhc2UgdGhlIGJ1
ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2guICovDQogICAgKwkJeXlfc2l6ZV90
IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsNCiAgICArDQogICAgKwkJ
bnVtX3RvX2FsbG9jID0gKHl5X2J1ZmZlcl9zdGFja19tYXgpICsgZ3Jvd19zaXplOw0KICAgICsJ
CSh5eV9idWZmZXJfc3RhY2spID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MN
CiAgICArCQkJCQkJCQkoKHl5X2J1ZmZlcl9zdGFjayksDQogICAgKwkJCQkJCQkJbnVtX3RvX2Fs
bG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQ0KICAgICsJCQkJCQkJCSk7DQog
ICAgKwkJaWYgKCAhICh5eV9idWZmZXJfc3RhY2spICkNCiAgICArCQkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVmZmVyX3N0YWNrKCkiICk7DQog
ICAgKw0KICAgICsJCS8qIHplcm8gb25seSB0aGUgbmV3IHNsb3RzLiovDQogICAgKwkJbWVtc2V0
KCh5eV9idWZmZXJfc3RhY2spICsgKHl5X2J1ZmZlcl9zdGFja19tYXgpLCAwLCBncm93X3NpemUg
KiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopKTsNCiAgICArCQkoeXlfYnVmZmVyX3N0
YWNrX21heCkgPSBudW1fdG9fYWxsb2M7DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKy8q
KiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGlyZWN0bHkgZnJvbSBhIHVz
ZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuDQogICAgKyAqIEBwYXJhbSBiYXNlIHRoZSBj
aGFyYWN0ZXIgYnVmZmVyDQogICAgKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGluIGJ5dGVzIG9m
IHRoZSBjaGFyYWN0ZXIgYnVmZmVyDQogICAgKyAqIA0KICAgICsgKiBAcmV0dXJuIHRoZSBuZXds
eSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4NCiAgICArICovDQogICAgK1lZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX2J1ZmZlciAgKGNoYXIgKiBiYXNlLCB5eV9zaXplX3QgIHNpemUgKQ0K
ICAgICt7DQogICAgKwlZWV9CVUZGRVJfU1RBVEUgYjsNCiAgICArICAgIA0KICAgICsJaWYgKCBz
aXplIDwgMiB8fA0KICAgICsJICAgICBiYXNlW3NpemUtMl0gIT0gWVlfRU5EX09GX0JVRkZFUl9D
SEFSIHx8DQogICAgKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVIg
KQ0KICAgICsJCS8qIFRoZXkgZm9yZ290IHRvIGxlYXZlIHJvb20gZm9yIHRoZSBFT0Incy4gKi8N
CiAgICArCQlyZXR1cm4gTlVMTDsNCiAgICArDQogICAgKwliID0gKFlZX0JVRkZFUl9TVEFURSkg
eXlhbGxvYyhzaXplb2YoIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKSAgKTsNCiAgICArCWlmICgg
ISBiICkNCiAgICArCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5
eV9zY2FuX2J1ZmZlcigpIiApOw0KICAgICsNCiAgICArCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAt
IDI7CS8qICItIDIiIHRvIHRha2UgY2FyZSBvZiBFT0IncyAqLw0KICAgICsJYi0+eXlfYnVmX3Bv
cyA9IGItPnl5X2NoX2J1ZiA9IGJhc2U7DQogICAgKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsN
CiAgICArCWItPnl5X2lucHV0X2ZpbGUgPSBOVUxMOw0KICAgICsJYi0+eXlfbl9jaGFycyA9IGIt
Pnl5X2J1Zl9zaXplOw0KICAgICsJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOw0KICAgICsJYi0+
eXlfYXRfYm9sID0gMTsNCiAgICArCWItPnl5X2ZpbGxfYnVmZmVyID0gMDsNCiAgICArCWItPnl5
X2J1ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOw0KICAgICsNCiAgICArCXl5X3N3aXRjaF90
b19idWZmZXIoYiAgKTsNCiAgICArDQogICAgKwlyZXR1cm4gYjsNCiAgICArfQ0KICAgICsNCiAg
ICArLyoqIFNldHVwIHRoZSBpbnB1dCBidWZmZXIgc3RhdGUgdG8gc2NhbiBhIHN0cmluZy4gVGhl
IG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwNCiAgICArICogc2NhbiBmcm9tIGEgQGUgY29weSBv
ZiBAYSBzdHIuDQogICAgKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB0
byBzY2FuDQogICAgKyAqIA0KICAgICsgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVm
ZmVyIHN0YXRlIG9iamVjdC4NCiAgICArICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRl
cyB0aGF0IG1heSBjb250YWluIE5VTCB2YWx1ZXMsIHRoZW4gdXNlDQogICAgKyAqICAgICAgIHl5
X3NjYW5fYnl0ZXMoKSBpbnN0ZWFkLg0KICAgICsgKi8NCiAgICArWVlfQlVGRkVSX1NUQVRFIHl5
X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciApDQogICAgK3sNCiAgICArICAgIA0K
ICAgICsJcmV0dXJuIHl5X3NjYW5fYnl0ZXMoeXlzdHIsKGludCkgc3RybGVuKHl5c3RyKSApOw0K
ICAgICt9DQogICAgKw0KICAgICsvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBz
Y2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxleCgpIHdpbGwNCiAgICAr
ICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBieXRlcy4NCiAgICArICogQHBhcmFtIHl5Ynl0
ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4NCiAgICArICogQHBhcmFtIF95eWJ5dGVzX2xlbiB0
aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBAYSBieXRlcy4N
CiAgICArICogDQogICAgKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0Lg0KICAgICsgKi8NCiAgICArWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMg
ICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiApDQogICAgK3sNCiAg
ICArCVlZX0JVRkZFUl9TVEFURSBiOw0KICAgICsJY2hhciAqYnVmOw0KICAgICsJeXlfc2l6ZV90
IG47DQogICAgKwlpbnQgaTsNCiAgICArICAgIA0KICAgICsJLyogR2V0IG1lbW9yeSBmb3IgZnVs
bCBidWZmZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovDQogICAgKwlu
ID0gKHl5X3NpemVfdCkgKF95eWJ5dGVzX2xlbiArIDIpOw0KICAgICsJYnVmID0gKGNoYXIgKikg
eXlhbGxvYyhuICApOw0KICAgICsJaWYgKCAhIGJ1ZiApDQogICAgKwkJWVlfRkFUQUxfRVJST1Io
ICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9ieXRlcygpIiApOw0KICAgICsNCiAg
ICArCWZvciAoIGkgPSAwOyBpIDwgX3l5Ynl0ZXNfbGVuOyArK2kgKQ0KICAgICsJCWJ1ZltpXSA9
IHl5Ynl0ZXNbaV07DQogICAgKw0KICAgICsJYnVmW195eWJ5dGVzX2xlbl0gPSBidWZbX3l5Ynl0
ZXNfbGVuKzFdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOw0KICAgICsNCiAgICArCWIgPSB5eV9z
Y2FuX2J1ZmZlcihidWYsbiApOw0KICAgICsJaWYgKCAhIGIgKQ0KICAgICsJCVlZX0ZBVEFMX0VS
Uk9SKCAiYmFkIGJ1ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7DQogICAgKw0KICAgICsJLyog
SXQncyBva2F5IHRvIGdyb3cgZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBp
dA0KICAgICsJICogYXdheSB3aGVuIHdlJ3JlIGRvbmUuDQogICAgKwkgKi8NCiAgICArCWItPnl5
X2lzX291cl9idWZmZXIgPSAxOw0KICAgICsNCiAgICArCXJldHVybiBiOw0KICAgICt9DQogICAg
Kw0KICAgICsjaWZuZGVmIFlZX0VYSVRfRkFJTFVSRQ0KICAgICsjZGVmaW5lIFlZX0VYSVRfRkFJ
TFVSRSAyDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArc3RhdGljIHZvaWQgeXlub3JldHVybiB5
eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyKiBtc2cgKQ0KICAgICt7DQogICAgKwkJCSh2b2lk
KSBmcHJpbnRmKCBzdGRlcnIsICIlc1xuIiwgbXNnICk7DQogICAgKwlleGl0KCBZWV9FWElUX0ZB
SUxVUkUgKTsNCiAgICArfQ0KICAgICsNCiAgICArLyogUmVkZWZpbmUgeXlsZXNzKCkgc28gaXQg
d29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovDQogICAgKw0KICAgICsjdW5kZWYgeXlsZXNzDQog
ICAgKyNkZWZpbmUgeXlsZXNzKG4pIFwNCiAgICArCWRvIFwNCiAgICArCQl7IFwNCiAgICArCQkv
KiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwNCiAgICArICAgICAgICBp
bnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXA0KICAgICsgICAgICAgIFlZX0xFU1NfTElORU5P
KHl5bGVzc19tYWNyb19hcmcpO1wNCiAgICArCQl5eXRleHRbeXlsZW5nXSA9ICh5eV9ob2xkX2No
YXIpOyBcDQogICAgKwkJKHl5X2NfYnVmX3ApID0geXl0ZXh0ICsgeXlsZXNzX21hY3JvX2FyZzsg
XA0KICAgICsJCSh5eV9ob2xkX2NoYXIpID0gKih5eV9jX2J1Zl9wKTsgXA0KICAgICsJCSooeXlf
Y19idWZfcCkgPSAnXDAnOyBcDQogICAgKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2FyZzsgXA0K
ICAgICsJCX0gXA0KICAgICsJd2hpbGUgKCAwICkNCiAgICArDQogICAgKy8qIEFjY2Vzc29yICBt
ZXRob2RzIChnZXQvc2V0IGZ1bmN0aW9ucykgdG8gc3RydWN0IG1lbWJlcnMuICovDQogICAgKw0K
ICAgICsvKiogR2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLg0KICAgICsgKiANCiAgICArICov
DQogICAgK2ludCB5eWdldF9saW5lbm8gICh2b2lkKQ0KICAgICt7DQogICAgKyAgICANCiAgICAr
ICAgIHJldHVybiB5eWxpbmVubzsNCiAgICArfQ0KICAgICsNCiAgICArLyoqIEdldCB0aGUgaW5w
dXQgc3RyZWFtLg0KICAgICsgKiANCiAgICArICovDQogICAgK0ZJTEUgKnl5Z2V0X2luICAodm9p
ZCkNCiAgICArew0KICAgICsgICAgICAgIHJldHVybiB5eWluOw0KICAgICt9DQogICAgKw0KICAg
ICsvKiogR2V0IHRoZSBvdXRwdXQgc3RyZWFtLg0KICAgICsgKiANCiAgICArICovDQogICAgK0ZJ
TEUgKnl5Z2V0X291dCAgKHZvaWQpDQogICAgK3sNCiAgICArICAgICAgICByZXR1cm4geXlvdXQ7
DQogICAgK30NCiAgICArDQogICAgKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVudCB0
b2tlbi4NCiAgICArICogDQogICAgKyAqLw0KICAgICtpbnQgeXlnZXRfbGVuZyAgKHZvaWQpDQog
ICAgK3sNCiAgICArICAgICAgICByZXR1cm4geXlsZW5nOw0KICAgICt9DQogICAgKw0KICAgICsv
KiogR2V0IHRoZSBjdXJyZW50IHRva2VuLg0KICAgICsgKiANCiAgICArICovDQogICAgKw0KICAg
ICtjaGFyICp5eWdldF90ZXh0ICAodm9pZCkNCiAgICArew0KICAgICsgICAgICAgIHJldHVybiB5
eXRleHQ7DQogICAgK30NCiAgICArDQogICAgKy8qKiBTZXQgdGhlIGN1cnJlbnQgbGluZSBudW1i
ZXIuDQogICAgKyAqIEBwYXJhbSBfbGluZV9udW1iZXIgbGluZSBudW1iZXINCiAgICArICogDQog
ICAgKyAqLw0KICAgICt2b2lkIHl5c2V0X2xpbmVubyAoaW50ICBfbGluZV9udW1iZXIgKQ0KICAg
ICt7DQogICAgKyAgICANCiAgICArICAgIHl5bGluZW5vID0gX2xpbmVfbnVtYmVyOw0KICAgICt9
DQogICAgKw0KICAgICsvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlz
Y2FyZCB0aGUgY3VycmVudA0KICAgICsgKiBpbnB1dCBidWZmZXIuDQogICAgKyAqIEBwYXJhbSBf
aW5fc3RyIEEgcmVhZGFibGUgc3RyZWFtLg0KICAgICsgKiANCiAgICArICogQHNlZSB5eV9zd2l0
Y2hfdG9fYnVmZmVyDQogICAgKyAqLw0KICAgICt2b2lkIHl5c2V0X2luIChGSUxFICogIF9pbl9z
dHIgKQ0KICAgICt7DQogICAgKyAgICAgICAgeXlpbiA9IF9pbl9zdHIgOw0KICAgICt9DQogICAg
Kw0KICAgICt2b2lkIHl5c2V0X291dCAoRklMRSAqICBfb3V0X3N0ciApDQogICAgK3sNCiAgICAr
ICAgICAgICB5eW91dCA9IF9vdXRfc3RyIDsNCiAgICArfQ0KICAgICsNCiAgICAraW50IHl5Z2V0
X2RlYnVnICAodm9pZCkNCiAgICArew0KICAgICsgICAgICAgIHJldHVybiB5eV9mbGV4X2RlYnVn
Ow0KICAgICt9DQogICAgKw0KICAgICt2b2lkIHl5c2V0X2RlYnVnIChpbnQgIF9iZGVidWcgKQ0K
ICAgICt7DQogICAgKyAgICAgICAgeXlfZmxleF9kZWJ1ZyA9IF9iZGVidWcgOw0KICAgICt9DQog
ICAgKw0KICAgICtzdGF0aWMgaW50IHl5X2luaXRfZ2xvYmFscyAodm9pZCkNCiAgICArew0KICAg
ICsgICAgICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFzIGZvciB0aGUgbm9uLXJl
ZW50cmFudCBzY2FubmVyLg0KICAgICsgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJv
bSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuDQogICAgKyAgICAgKi8N
CiAgICArDQogICAgKyAgICAvKiBXZSBkbyBub3QgdG91Y2ggeXlsaW5lbm8gdW5sZXNzIHRoZSBv
cHRpb24gaXMgZW5hYmxlZC4gKi8NCiAgICArICAgIHl5bGluZW5vID0gIDE7DQogICAgKyAgICAN
CiAgICArICAgICh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsNCiAgICArICAgICh5eV9idWZmZXJf
c3RhY2tfdG9wKSA9IDA7DQogICAgKyAgICAoeXlfYnVmZmVyX3N0YWNrX21heCkgPSAwOw0KICAg
ICsgICAgKHl5X2NfYnVmX3ApID0gTlVMTDsNCiAgICArICAgICh5eV9pbml0KSA9IDA7DQogICAg
KyAgICAoeXlfc3RhcnQpID0gMDsNCiAgICArDQogICAgKy8qIERlZmluZWQgaW4gbWFpbi5jICov
DQogICAgKyNpZmRlZiBZWV9TVERJTklUDQogICAgKyAgICB5eWluID0gc3RkaW47DQogICAgKyAg
ICB5eW91dCA9IHN0ZG91dDsNCiAgICArI2Vsc2UNCiAgICArICAgIHl5aW4gPSBOVUxMOw0KICAg
ICsgICAgeXlvdXQgPSBOVUxMOw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyAgICAvKiBGb3Ig
ZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVk
IGJ5DQogICAgKyAgICAgKiB5eWxleF9pbml0KCkNCiAgICArICAgICAqLw0KICAgICsgICAgcmV0
dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKy8qIHl5bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGgg
cmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNjYW5uZXJzLiAqLw0KICAgICtpbnQgeXlsZXhf
ZGVzdHJveSAgKHZvaWQpDQogICAgK3sNCiAgICArICAgIA0KICAgICsgICAgLyogUG9wIHRoZSBi
dWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAqLw0KICAgICsJd2hpbGUoWVlf
Q1VSUkVOVF9CVUZGRVIpew0KICAgICsJCXl5X2RlbGV0ZV9idWZmZXIoWVlfQ1VSUkVOVF9CVUZG
RVIgICk7DQogICAgKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gTlVMTDsNCiAgICArCQl5
eXBvcF9idWZmZXJfc3RhdGUoKTsNCiAgICArCX0NCiAgICArDQogICAgKwkvKiBEZXN0cm95IHRo
ZSBzdGFjayBpdHNlbGYuICovDQogICAgKwl5eWZyZWUoKHl5X2J1ZmZlcl9zdGFjaykgKTsNCiAg
ICArCSh5eV9idWZmZXJfc3RhY2spID0gTlVMTDsNCiAgICArDQogICAgKyAgICAvKiBSZXNldCB0
aGUgZ2xvYmFscy4gVGhpcyBpcyBpbXBvcnRhbnQgaW4gYSBub24tcmVlbnRyYW50IHNjYW5uZXIg
c28gdGhlIG5leHQgdGltZQ0KICAgICsgICAgICogeXlsZXgoKSBpcyBjYWxsZWQsIGluaXRpYWxp
emF0aW9uIHdpbGwgb2NjdXIuICovDQogICAgKyAgICB5eV9pbml0X2dsb2JhbHMoICk7DQogICAg
Kw0KICAgICsgICAgcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAqIElu
dGVybmFsIHV0aWxpdHkgcm91dGluZXMuDQogICAgKyAqLw0KICAgICsNCiAgICArI2lmbmRlZiB5
eXRleHRfcHRyDQogICAgK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5
Y29uc3QgY2hhciAqIHMyLCBpbnQgbiApDQogICAgK3sNCiAgICArCQkNCiAgICArCWludCBpOw0K
ICAgICsJZm9yICggaSA9IDA7IGkgPCBuOyArK2kgKQ0KICAgICsJCXMxW2ldID0gczJbaV07DQog
ICAgK30NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWZkZWYgWVlfTkVFRF9TVFJMRU4NCiAg
ICArc3RhdGljIGludCB5eV9mbGV4X3N0cmxlbiAoeXljb25zdCBjaGFyICogcyApDQogICAgK3sN
CiAgICArCWludCBuOw0KICAgICsJZm9yICggbiA9IDA7IHNbbl07ICsrbiApDQogICAgKwkJOw0K
ICAgICsNCiAgICArCXJldHVybiBuOw0KICAgICt9DQogICAgKyNlbmRpZg0KICAgICsNCiAgICAr
dm9pZCAqeXlhbGxvYyAoeXlfc2l6ZV90ICBzaXplICkNCiAgICArew0KICAgICsJCQlyZXR1cm4g
bWFsbG9jKHNpemUpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkICp5eXJlYWxsb2MgICh2b2lk
ICogcHRyLCB5eV9zaXplX3QgIHNpemUgKQ0KICAgICt7DQogICAgKwkJDQogICAgKwkvKiBUaGUg
Y2FzdCB0byAoY2hhciAqKSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoDQogICAg
KwkgKiBpbXBsZW1lbnRhdGlvbnMgdGhhdCB1c2UgY2hhciogZ2VuZXJpYyBwb2ludGVycywgYW5k
IHRob3NlDQogICAgKwkgKiB0aGF0IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29y
a3Mgd2l0aCB0aGUgbGF0dGVyDQogICAgKwkgKiBiZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysg
YWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9tDQogICAgKwkgKiBhbnkgcG9pbnRlciB0eXBl
IHRvIHZvaWQqLCBhbmQgZGVhbCB3aXRoIGFyZ3VtZW50IGNvbnZlcnNpb25zDQogICAgKwkgKiBh
cyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4NCiAgICArCSAqLw0KICAgICsJcmV0dXJuIHJl
YWxsb2MocHRyLCBzaXplKTsNCiAgICArfQ0KICAgICsNCiAgICArdm9pZCB5eWZyZWUgKHZvaWQg
KiBwdHIgKQ0KICAgICt7DQogICAgKwkJCWZyZWUoIChjaGFyICopIHB0ciApOwkvKiBzZWUgeXly
ZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8NCiAgICArfQ0KICAgICsNCiAgICArI2RlZmlu
ZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyINCiAgICArDQogICAgK3N0YXRpYyBjaGFyICpleHBh
bmRfdG9rZW4oY29uc3QgY2hhciAqaW4sIHNpemVfdCBuKQ0KICAgICt7DQogICAgKwljaGFyICpv
dXQ7DQogICAgKwlpbnQgYzsNCiAgICArCWNoYXIgYzI7DQogICAgKwljb25zdCBjaGFyICpyZXN0
LCAqZW5kOw0KICAgICsNCiAgICArCW5ld19zdHJpbmcoKTsNCiAgICArCWFwcGVuZF9zdHJpbmco
aW4sIG4pOw0KICAgICsNCiAgICArCS8qIGdldCB0aGUgd2hvbGUgbGluZSBiZWNhdXNlIHdlIGRv
IG5vdCBrbm93IHRoZSBlbmQgb2YgdG9rZW4uICovDQogICAgKwl3aGlsZSAoKGMgPSBpbnB1dCgp
KSAhPSBFT0YpIHsNCiAgICArCQlpZiAoYyA9PSAnXG4nKSB7DQogICAgKwkJCXVucHV0KGMpOw0K
ICAgICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwkJYzIgPSBjOw0KICAgICsJCWFwcGVuZF9z
dHJpbmcoJmMyLCAxKTsNCiAgICArCX0NCiAgICArDQogICAgKwlyZXN0ID0gdGV4dDsNCiAgICAr
CW91dCA9IGV4cGFuZF9vbmVfdG9rZW4oJnJlc3QpOw0KICAgICsNCiAgICArCS8qIHB1c2ggYmFj
ayB1bnVzZWQgY2hhcmFjdGVycyB0byB0aGUgaW5wdXQgc3RyZWFtICovDQogICAgKwllbmQgPSBy
ZXN0ICsgc3RybGVuKHJlc3QpOw0KICAgICsJd2hpbGUgKGVuZCA+IHJlc3QpDQogICAgKwkJdW5w
dXQoKi0tZW5kKTsNCiAgICArDQogICAgKwlmcmVlKHRleHQpOw0KICAgICsNCiAgICArCXJldHVy
biBvdXQ7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lkIGFwcGVuZF9leHBhbmRlZF9z
dHJpbmcoY29uc3QgY2hhciAqc3RyKQ0KICAgICt7DQogICAgKwljb25zdCBjaGFyICplbmQ7DQog
ICAgKwljaGFyICpyZXM7DQogICAgKw0KICAgICsJc3RyKys7DQogICAgKw0KICAgICsJcmVzID0g
ZXhwYW5kX2RvbGxhcigmc3RyKTsNCiAgICArDQogICAgKwkvKiBwdXNoIGJhY2sgdW51c2VkIGNo
YXJhY3RlcnMgdG8gdGhlIGlucHV0IHN0cmVhbSAqLw0KICAgICsJZW5kID0gc3RyICsgc3RybGVu
KHN0cik7DQogICAgKwl3aGlsZSAoZW5kID4gc3RyKQ0KICAgICsJCXVucHV0KCotLWVuZCk7DQog
ICAgKw0KICAgICsJYXBwZW5kX3N0cmluZyhyZXMsIHN0cmxlbihyZXMpKTsNCiAgICArDQogICAg
KwlmcmVlKHJlcyk7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgemNvbmZfc3RhcnRoZWxwKHZv
aWQpDQogICAgK3sNCiAgICArCW5ld19zdHJpbmcoKTsNCiAgICArCWxhc3RfdHMgPSBmaXJzdF90
cyA9IDA7DQogICAgKwlCRUdJTihIRUxQKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZv
aWQgemNvbmZfZW5kaGVscCh2b2lkKQ0KICAgICt7DQogICAgKwl5eWx2YWwuc3RyaW5nID0gdGV4
dDsNCiAgICArCUJFR0lOKElOSVRJQUwpOw0KICAgICt9DQogICAgKw0KICAgICsvKg0KICAgICsg
KiBUcnkgdG8gb3BlbiBzcGVjaWZpZWQgZmlsZSB3aXRoIGZvbGxvd2luZyBuYW1lczoNCiAgICAr
ICogLi9uYW1lDQogICAgKyAqICQoc3JjdHJlZSkvbmFtZQ0KICAgICsgKiBUaGUgbGF0dGVyIGlz
IHVzZWQgd2hlbiBzcmN0cmVlIGlzIHNlcGFyYXRlIGZyb20gb2JqdHJlZQ0KICAgICsgKiB3aGVu
IGNvbXBpbGluZyB0aGUga2VybmVsLg0KICAgICsgKiBSZXR1cm4gTlVMTCBpZiBmaWxlIGlzIG5v
dCBmb3VuZC4NCiAgICArICovDQogICAgK0ZJTEUgKnpjb25mX2ZvcGVuKGNvbnN0IGNoYXIgKm5h
bWUpDQogICAgK3sNCiAgICArCWNoYXIgKmVudiwgZnVsbG5hbWVbUEFUSF9NQVgrMV07DQogICAg
KwlGSUxFICpmOw0KICAgICsNCiAgICArCWYgPSBmb3BlbihuYW1lLCAiciIpOw0KICAgICsJaWYg
KCFmICYmIG5hbWUgIT0gTlVMTCAmJiBuYW1lWzBdICE9ICcvJykgew0KICAgICsJCWVudiA9IGdl
dGVudihTUkNUUkVFKTsNCiAgICArCQlpZiAoZW52KSB7DQogICAgKwkJCXNwcmludGYoZnVsbG5h
bWUsICIlcy8lcyIsIGVudiwgbmFtZSk7DQogICAgKwkJCWYgPSBmb3BlbihmdWxsbmFtZSwgInIi
KTsNCiAgICArCQl9DQogICAgKwl9DQogICAgKwlyZXR1cm4gZjsNCiAgICArfQ0KICAgICsNCiAg
ICArdm9pZCB6Y29uZl9pbml0c2Nhbihjb25zdCBjaGFyICpuYW1lKQ0KICAgICt7DQogICAgKwl5
eWluID0gemNvbmZfZm9wZW4obmFtZSk7DQogICAgKwlpZiAoIXl5aW4pIHsNCiAgICArCQlmcHJp
bnRmKHN0ZGVyciwgImNhbid0IGZpbmQgZmlsZSAlc1xuIiwgbmFtZSk7DQogICAgKwkJZXhpdCgx
KTsNCiAgICArCX0NCiAgICArDQogICAgKwljdXJyZW50X2J1ZiA9IHhtYWxsb2Moc2l6ZW9mKCpj
dXJyZW50X2J1ZikpOw0KICAgICsJbWVtc2V0KGN1cnJlbnRfYnVmLCAwLCBzaXplb2YoKmN1cnJl
bnRfYnVmKSk7DQogICAgKw0KICAgICsJY3VycmVudF9maWxlID0gZmlsZV9sb29rdXAobmFtZSk7
DQogICAgKwl5eWxpbmVubyA9IDE7DQogICAgK30NCiAgICArDQogICAgK3ZvaWQgemNvbmZfbmV4
dGZpbGUoY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0KICAgICsJc3RydWN0IGZpbGUgKml0ZXI7
DQogICAgKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGZpbGVfbG9va3VwKG5hbWUpOw0KICAgICsJc3Ry
dWN0IGJ1ZmZlciAqYnVmID0geG1hbGxvYyhzaXplb2YoKmJ1ZikpOw0KICAgICsJbWVtc2V0KGJ1
ZiwgMCwgc2l6ZW9mKCpidWYpKTsNCiAgICArDQogICAgKwljdXJyZW50X2J1Zi0+c3RhdGUgPSBZ
WV9DVVJSRU5UX0JVRkZFUjsNCiAgICArCXl5aW4gPSB6Y29uZl9mb3BlbihmaWxlLT5uYW1lKTsN
CiAgICArCWlmICgheXlpbikgew0KICAgICsJCWZwcmludGYoc3RkZXJyLCAiJXM6JWQ6IGNhbid0
IG9wZW4gZmlsZSBcIiVzXCJcbiIsDQogICAgKwkJCXpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCksIGZpbGUtPm5hbWUpOw0KICAgICsJCWV4aXQoMSk7DQogICAgKwl9DQogICAgKwl5eV9z
d2l0Y2hfdG9fYnVmZmVyKHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSkpOw0KICAg
ICsJYnVmLT5wYXJlbnQgPSBjdXJyZW50X2J1ZjsNCiAgICArCWN1cnJlbnRfYnVmID0gYnVmOw0K
ICAgICsNCiAgICArCWN1cnJlbnRfZmlsZS0+bGluZW5vID0geXlsaW5lbm87DQogICAgKwlmaWxl
LT5wYXJlbnQgPSBjdXJyZW50X2ZpbGU7DQogICAgKw0KICAgICsJZm9yIChpdGVyID0gY3VycmVu
dF9maWxlOyBpdGVyOyBpdGVyID0gaXRlci0+cGFyZW50KSB7DQogICAgKwkJaWYgKCFzdHJjbXAo
aXRlci0+bmFtZSwgZmlsZS0+bmFtZSkpIHsNCiAgICArCQkJZnByaW50ZihzdGRlcnIsDQogICAg
KwkJCQkiUmVjdXJzaXZlIGluY2x1c2lvbiBkZXRlY3RlZC5cbiINCiAgICArCQkJCSJJbmNsdXNp
b24gcGF0aDpcbiINCiAgICArCQkJCSIgIGN1cnJlbnQgZmlsZSA6ICVzXG4iLCBmaWxlLT5uYW1l
KTsNCiAgICArCQkJaXRlciA9IGZpbGU7DQogICAgKwkJCWRvIHsNCiAgICArCQkJCWl0ZXIgPSBp
dGVyLT5wYXJlbnQ7DQogICAgKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgaW5jbHVkZWQgZnJvbTog
JXM6JWRcbiIsDQogICAgKwkJCQkJaXRlci0+bmFtZSwgaXRlci0+bGluZW5vIC0gMSk7DQogICAg
KwkJCX0gd2hpbGUgKHN0cmNtcChpdGVyLT5uYW1lLCBmaWxlLT5uYW1lKSk7DQogICAgKwkJCWV4
aXQoMSk7DQogICAgKwkJfQ0KICAgICsJfQ0KICAgICsNCiAgICArCXl5bGluZW5vID0gMTsNCiAg
ICArCWN1cnJlbnRfZmlsZSA9IGZpbGU7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lk
IHpjb25mX2VuZGZpbGUodm9pZCkNCiAgICArew0KICAgICsJc3RydWN0IGJ1ZmZlciAqcGFyZW50
Ow0KICAgICsNCiAgICArCWN1cnJlbnRfZmlsZSA9IGN1cnJlbnRfZmlsZS0+cGFyZW50Ow0KICAg
ICsJaWYgKGN1cnJlbnRfZmlsZSkNCiAgICArCQl5eWxpbmVubyA9IGN1cnJlbnRfZmlsZS0+bGlu
ZW5vOw0KICAgICsNCiAgICArCXBhcmVudCA9IGN1cnJlbnRfYnVmLT5wYXJlbnQ7DQogICAgKwlp
ZiAocGFyZW50KSB7DQogICAgKwkJZmNsb3NlKHl5aW4pOw0KICAgICsJCXl5X2RlbGV0ZV9idWZm
ZXIoWVlfQ1VSUkVOVF9CVUZGRVIpOw0KICAgICsJCXl5X3N3aXRjaF90b19idWZmZXIocGFyZW50
LT5zdGF0ZSk7DQogICAgKwl9DQogICAgKwlmcmVlKGN1cnJlbnRfYnVmKTsNCiAgICArCWN1cnJl
bnRfYnVmID0gcGFyZW50Ow0KICAgICt9DQogICAgKw0KICAgICtpbnQgemNvbmZfbGluZW5vKHZv
aWQpDQogICAgK3sNCiAgICArCXJldHVybiBjdXJyZW50X3Bvcy5saW5lbm87DQogICAgK30NCiAg
ICArDQogICAgK2NvbnN0IGNoYXIgKnpjb25mX2N1cm5hbWUodm9pZCkNCiAgICArew0KICAgICsJ
cmV0dXJuIGN1cnJlbnRfcG9zLmZpbGUgPyBjdXJyZW50X3Bvcy5maWxlLT5uYW1lIDogIjxub25l
PiI7DQogICAgK30NCiAgICArDQogICAgZGlmZiAtLWdpdCBhL3N1cHBvcnQva2NvbmZpZy96Y29u
Zi50YWIuYyBiL3N1cHBvcnQva2NvbmZpZy96Y29uZi50YWIuYw0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZDFjZmJjYg0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9zdXBwb3J0L2tjb25maWcvemNvbmYudGFiLmMNCiAgICBAQCAtMCwwICsxLDI1MDQg
QEANCiAgICArLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDMuMC40LiAgKi8N
CiAgICArDQogICAgKy8qIEJpc29uIGltcGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2Vy
cyBpbiBDDQogICAgKw0KICAgICsgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODktMTk5MCwgMjAw
MC0yMDE1IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KICAgICsNCiAgICArICAgVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkNCiAgICArICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiAgICArICAgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCiAgICArICAg
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiAgICArDQogICAgKyAgIFRoaXMg
cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LA0KICAgICsgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZg0KICAgICsgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQogICAgKyAgIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQogICAgKw0KICAgICsgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KICAg
ICsgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu
dS5vcmcvbGljZW5zZXMvPi4gICovDQogICAgKw0KICAgICsvKiBBcyBhIHNwZWNpYWwgZXhjZXB0
aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMNCiAgICArICAg
cGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBhbmQgZGlzdHJpYnV0ZSB0
aGF0IHdvcmsNCiAgICArICAgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHNvIGxvbmcgYXMg
dGhhdCB3b3JrIGlzbid0IGl0c2VsZiBhDQogICAgKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcg
dGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mDQogICAgKyAgIGFzIGEg
cGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUNCiAgICArICAgdGhlIHBhcnNlciBza2VsZXRvbiBpdHNlbGYsIHlvdSBtYXkgKGF0IHlv
dXIgb3B0aW9uKSByZW1vdmUgdGhpcw0KICAgICsgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2gg
d2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcNCiAgICArICAgQmlzb24g
b3V0cHV0IGZpbGVzIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMN
CiAgICArICAgTGljZW5zZSB3aXRob3V0IHRoaXMgc3BlY2lhbCBleGNlcHRpb24uDQogICAgKw0K
ICAgICsgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9uIHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uIGluDQogICAgKyAgIHZlcnNpb24gMi4yIG9mIEJpc29uLiAgKi8NCiAg
ICArDQogICAgKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRlbiBieSBSaWNoYXJk
IFN0YWxsbWFuLCBieQ0KICAgICsgICBzaW1wbGlmeWluZyB0aGUgb3JpZ2luYWwgc28tY2FsbGVk
ICJzZW1hbnRpYyIgcGFyc2VyLiAgKi8NCiAgICArDQogICAgKy8qIEFsbCBzeW1ib2xzIGRlZmlu
ZWQgYmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkDQogICAgKyAgIGlu
ZnJpbmdpbmcgb24gdXNlciBuYW1lIHNwYWNlLiAgVGhpcyBzaG91bGQgYmUgZG9uZSBldmVuIGZv
ciBsb2NhbA0KICAgICsgICB2YXJpYWJsZXMsIGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4
cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLg0KICAgICsgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJs
ZSBleGNlcHRpb25zIHdpdGhpbiBpbmNsdWRlIGZpbGVzIHRvDQogICAgKyAgIGRlZmluZSBuZWNl
c3NhcnkgbGlicmFyeSBzeW1ib2xzOyB0aGV5IGFyZSBub3RlZCAiSU5GUklOR0VTIE9ODQogICAg
KyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLw0KICAgICsNCiAgICArLyogSWRlbnRpZnkg
Qmlzb24gb3V0cHV0LiAgKi8NCiAgICArI2RlZmluZSBZWUJJU09OIDENCiAgICArDQogICAgKy8q
IEJpc29uIHZlcnNpb24uICAqLw0KICAgICsjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMy4wLjQi
DQogICAgKw0KICAgICsvKiBTa2VsZXRvbiBuYW1lLiAgKi8NCiAgICArI2RlZmluZSBZWVNLRUxF
VE9OX05BTUUgInlhY2MuYyINCiAgICArDQogICAgKy8qIFB1cmUgcGFyc2Vycy4gICovDQogICAg
KyNkZWZpbmUgWVlQVVJFIDANCiAgICArDQogICAgKy8qIFB1c2ggcGFyc2Vycy4gICovDQogICAg
KyNkZWZpbmUgWVlQVVNIIDANCiAgICArDQogICAgKy8qIFB1bGwgcGFyc2Vycy4gICovDQogICAg
KyNkZWZpbmUgWVlQVUxMIDENCiAgICArDQogICAgKw0KICAgICsNCiAgICArDQogICAgKy8qIENv
cHkgdGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLw0KICAgICsNCiAgICAr
DQogICAgKy8qDQogICAgKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb21hbiBaaXBwZWwgPHppcHBl
bEBsaW51eC1tNjhrLm9yZz4NCiAgICArICogUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgR1BMIHYyLjAuDQogICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPGN0eXBlLmg+
DQogICAgKyNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAg
KyNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICsjaW5j
bHVkZSA8c3RkYm9vbC5oPg0KICAgICsNCiAgICArI2luY2x1ZGUgImxrYy5oIg0KICAgICsNCiAg
ICArI2RlZmluZSBwcmludGQobWFzaywgZm10Li4uKSBpZiAoY2RlYnVnICYgKG1hc2spKSBwcmlu
dGYoZm10KQ0KICAgICsNCiAgICArI2RlZmluZSBQUklOVEQJCTB4MDAwMQ0KICAgICsjZGVmaW5l
IERFQlVHX1BBUlNFCTB4MDAwMg0KICAgICsNCiAgICAraW50IGNkZWJ1ZyA9IFBSSU5URDsNCiAg
ICArDQogICAgK2ludCB5eWxleCh2b2lkKTsNCiAgICArc3RhdGljIHZvaWQgeXllcnJvcihjb25z
dCBjaGFyICplcnIpOw0KICAgICtzdGF0aWMgdm9pZCB6Y29uZnByaW50KGNvbnN0IGNoYXIgKmVy
ciwgLi4uKTsNCiAgICArc3RhdGljIHZvaWQgemNvbmZfZXJyb3IoY29uc3QgY2hhciAqZXJyLCAu
Li4pOw0KICAgICtzdGF0aWMgYm9vbCB6Y29uZl9lbmR0b2tlbihjb25zdCBzdHJ1Y3Qga2NvbmZf
aWQgKmlkLCBpbnQgc3RhcnR0b2tlbiwgaW50IGVuZHRva2VuKTsNCiAgICArDQogICAgK3N0cnVj
dCBzeW1ib2wgKnN5bWJvbF9oYXNoW1NZTUJPTF9IQVNIU0laRV07DQogICAgKw0KICAgICtzdGF0
aWMgc3RydWN0IG1lbnUgKmN1cnJlbnRfbWVudSwgKmN1cnJlbnRfZW50cnk7DQogICAgKw0KICAg
ICsNCiAgICArDQogICAgKw0KICAgICsjIGlmbmRlZiBZWV9OVUxMUFRSDQogICAgKyMgIGlmIGRl
ZmluZWQgX19jcGx1c3BsdXMgJiYgMjAxMTAzTCA8PSBfX2NwbHVzcGx1cw0KICAgICsjICAgZGVm
aW5lIFlZX05VTExQVFIgbnVsbHB0cg0KICAgICsjICBlbHNlDQogICAgKyMgICBkZWZpbmUgWVlf
TlVMTFBUUiAwDQogICAgKyMgIGVuZGlmDQogICAgKyMgZW5kaWYNCiAgICArDQogICAgKy8qIEVu
YWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMuICAqLw0KICAgICsjaWZkZWYgWVlFUlJPUl9W
RVJCT1NFDQogICAgKyMgdW5kZWYgWVlFUlJPUl9WRVJCT1NFDQogICAgKyMgZGVmaW5lIFlZRVJS
T1JfVkVSQk9TRSAxDQogICAgKyNlbHNlDQogICAgKyMgZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAw
DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArDQogICAgKy8qIERlYnVnIHRyYWNlcy4gICovDQog
ICAgKyNpZm5kZWYgWVlERUJVRw0KICAgICsjIGRlZmluZSBZWURFQlVHIDENCiAgICArI2VuZGlm
DQogICAgKyNpZiBZWURFQlVHDQogICAgK2V4dGVybiBpbnQgeXlkZWJ1ZzsNCiAgICArI2VuZGlm
DQogICAgKw0KICAgICsvKiBUb2tlbiB0eXBlLiAgKi8NCiAgICArI2lmbmRlZiBZWVRPS0VOVFlQ
RQ0KICAgICsjIGRlZmluZSBZWVRPS0VOVFlQRQ0KICAgICsgIGVudW0geXl0b2tlbnR5cGUNCiAg
ICArICB7DQogICAgKyAgICBUX01BSU5NRU5VID0gMjU4LA0KICAgICsgICAgVF9NRU5VID0gMjU5
LA0KICAgICsgICAgVF9FTkRNRU5VID0gMjYwLA0KICAgICsgICAgVF9TT1VSQ0UgPSAyNjEsDQog
ICAgKyAgICBUX0NIT0lDRSA9IDI2MiwNCiAgICArICAgIFRfRU5EQ0hPSUNFID0gMjYzLA0KICAg
ICsgICAgVF9DT01NRU5UID0gMjY0LA0KICAgICsgICAgVF9DT05GSUcgPSAyNjUsDQogICAgKyAg
ICBUX01FTlVDT05GSUcgPSAyNjYsDQogICAgKyAgICBUX0hFTFAgPSAyNjcsDQogICAgKyAgICBU
X0hFTFBURVhUID0gMjY4LA0KICAgICsgICAgVF9JRiA9IDI2OSwNCiAgICArICAgIFRfRU5ESUYg
PSAyNzAsDQogICAgKyAgICBUX0RFUEVORFMgPSAyNzEsDQogICAgKyAgICBUX09QVElPTkFMID0g
MjcyLA0KICAgICsgICAgVF9QUk9NUFQgPSAyNzMsDQogICAgKyAgICBUX1RZUEUgPSAyNzQsDQog
ICAgKyAgICBUX0RFRkFVTFQgPSAyNzUsDQogICAgKyAgICBUX1NFTEVDVCA9IDI3NiwNCiAgICAr
ICAgIFRfSU1QTFkgPSAyNzcsDQogICAgKyAgICBUX1JBTkdFID0gMjc4LA0KICAgICsgICAgVF9W
SVNJQkxFID0gMjc5LA0KICAgICsgICAgVF9PUFRJT04gPSAyODAsDQogICAgKyAgICBUX09OID0g
MjgxLA0KICAgICsgICAgVF9XT1JEID0gMjgyLA0KICAgICsgICAgVF9XT1JEX1FVT1RFID0gMjgz
LA0KICAgICsgICAgVF9VTkVRVUFMID0gMjg0LA0KICAgICsgICAgVF9MRVNTID0gMjg1LA0KICAg
ICsgICAgVF9MRVNTX0VRVUFMID0gMjg2LA0KICAgICsgICAgVF9HUkVBVEVSID0gMjg3LA0KICAg
ICsgICAgVF9HUkVBVEVSX0VRVUFMID0gMjg4LA0KICAgICsgICAgVF9DTE9TRV9QQVJFTiA9IDI4
OSwNCiAgICArICAgIFRfT1BFTl9QQVJFTiA9IDI5MCwNCiAgICArICAgIFRfRU9MID0gMjkxLA0K
ICAgICsgICAgVF9WQVJJQUJMRSA9IDI5MiwNCiAgICArICAgIFRfQVNTSUdOID0gMjkzLA0KICAg
ICsgICAgVF9BU1NJR05fVkFMID0gMjk0LA0KICAgICsgICAgVF9PUiA9IDI5NSwNCiAgICArICAg
IFRfQU5EID0gMjk2LA0KICAgICsgICAgVF9FUVVBTCA9IDI5NywNCiAgICArICAgIFRfTk9UID0g
Mjk4DQogICAgKyAgfTsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiBWYWx1ZSB0eXBlLiAg
Ki8NCiAgICArI2lmICEgZGVmaW5lZCBZWVNUWVBFICYmICEgZGVmaW5lZCBZWVNUWVBFX0lTX0RF
Q0xBUkVEDQogICAgKw0KICAgICt1bmlvbiBZWVNUWVBFDQogICAgK3sNCiAgICArDQogICAgKw0K
ICAgICsJY2hhciAqc3RyaW5nOw0KICAgICsJc3RydWN0IGZpbGUgKmZpbGU7DQogICAgKwlzdHJ1
Y3Qgc3ltYm9sICpzeW1ib2w7DQogICAgKwlzdHJ1Y3QgZXhwciAqZXhwcjsNCiAgICArCXN0cnVj
dCBtZW51ICptZW51Ow0KICAgICsJY29uc3Qgc3RydWN0IGtjb25mX2lkICppZDsNCiAgICArCWVu
dW0gdmFyaWFibGVfZmxhdm9yIGZsYXZvcjsNCiAgICArDQogICAgKw0KICAgICt9Ow0KICAgICsN
CiAgICArdHlwZWRlZiB1bmlvbiBZWVNUWVBFIFlZU1RZUEU7DQogICAgKyMgZGVmaW5lIFlZU1RZ
UEVfSVNfVFJJVklBTCAxDQogICAgKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQ0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKw0KICAgICtleHRlcm4gWVlTVFlQRSB5eWx2YWw7DQogICAg
Kw0KICAgICtpbnQgeXlwYXJzZSAodm9pZCk7DQogICAgKw0KICAgICsNCiAgICArDQogICAgKy8q
IENvcHkgdGhlIHNlY29uZCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8NCiAgICArDQog
ICAgKw0KICAgICsvKiBJbmNsdWRlIGtjb25mX2lkLmMgaGVyZSBzbyBpdCBjYW4gc2VlIHRoZSB0
b2tlbiBjb25zdGFudHMuICovDQogICAgKyNpbmNsdWRlICJrY29uZl9pZC5jIg0KICAgICsNCiAg
ICArDQogICAgKw0KICAgICsjaWZkZWYgc2hvcnQNCiAgICArIyB1bmRlZiBzaG9ydA0KICAgICsj
ZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBZWVRZUEVfVUlOVDgNCiAgICArdHlwZWRlZiBZWVRZ
UEVfVUlOVDggeXl0eXBlX3VpbnQ4Ow0KICAgICsjZWxzZQ0KICAgICt0eXBlZGVmIHVuc2lnbmVk
IGNoYXIgeXl0eXBlX3VpbnQ4Ow0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBZWVRZ
UEVfSU5UOA0KICAgICt0eXBlZGVmIFlZVFlQRV9JTlQ4IHl5dHlwZV9pbnQ4Ow0KICAgICsjZWxz
ZQ0KICAgICt0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4Ow0KICAgICsjZW5kaWYNCiAg
ICArDQogICAgKyNpZmRlZiBZWVRZUEVfVUlOVDE2DQogICAgK3R5cGVkZWYgWVlUWVBFX1VJTlQx
NiB5eXR5cGVfdWludDE2Ow0KICAgICsjZWxzZQ0KICAgICt0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCB5eXR5cGVfdWludDE2Ow0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBZWVRZ
UEVfSU5UMTYNCiAgICArdHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2Ow0KICAgICsj
ZWxzZQ0KICAgICt0eXBlZGVmIHNob3J0IGludCB5eXR5cGVfaW50MTY7DQogICAgKyNlbmRpZg0K
ICAgICsNCiAgICArI2lmbmRlZiBZWVNJWkVfVA0KICAgICsjIGlmZGVmIF9fU0laRV9UWVBFX18N
CiAgICArIyAgZGVmaW5lIFlZU0laRV9UIF9fU0laRV9UWVBFX18NCiAgICArIyBlbGlmIGRlZmlu
ZWQgc2l6ZV90DQogICAgKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QNCiAgICArIyBlbGlmICEg
ZGVmaW5lZCBZWVNJWkVfVA0KICAgICsjICBpbmNsdWRlIDxzdGRkZWYuaD4gLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgICsjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90DQog
ICAgKyMgZWxzZQ0KICAgICsjICBkZWZpbmUgWVlTSVpFX1QgdW5zaWduZWQgaW50DQogICAgKyMg
ZW5kaWYNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgo
WVlTSVpFX1QpIC0xKQ0KICAgICsNCiAgICArI2lmbmRlZiBZWV8NCiAgICArIyBpZiBkZWZpbmVk
IFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMNCiAgICArIyAgaWYgRU5BQkxFX05MUw0KICAg
ICsjICAgaW5jbHVkZSA8bGliaW50bC5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNF
ICovDQogICAgKyMgICBkZWZpbmUgWVlfKE1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRpbWUi
LCBNc2dpZCkNCiAgICArIyAgZW5kaWYNCiAgICArIyBlbmRpZg0KICAgICsjIGlmbmRlZiBZWV8N
CiAgICArIyAgZGVmaW5lIFlZXyhNc2dpZCkgTXNnaWQNCiAgICArIyBlbmRpZg0KICAgICsjZW5k
aWYNCiAgICArDQogICAgKyNpZm5kZWYgWVlfQVRUUklCVVRFDQogICAgKyMgaWYgKGRlZmluZWQg
X19HTlVDX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwN
CiAgICArICAgICAgJiYgKDIgPCBfX0dOVUNfXyB8fCAoX19HTlVDX18gPT0gMiAmJiA5NiA8PSBf
X0dOVUNfTUlOT1JfXykpKSAgXA0KICAgICsgICAgIHx8IGRlZmluZWQgX19TVU5QUk9fQyAmJiAw
eDUxMTAgPD0gX19TVU5QUk9fQw0KICAgICsjICBkZWZpbmUgWVlfQVRUUklCVVRFKFNwZWMpIF9f
YXR0cmlidXRlX18oU3BlYykNCiAgICArIyBlbHNlDQogICAgKyMgIGRlZmluZSBZWV9BVFRSSUJV
VEUoU3BlYykgLyogZW1wdHkgKi8NCiAgICArIyBlbmRpZg0KICAgICsjZW5kaWYNCiAgICArDQog
ICAgKyNpZm5kZWYgWVlfQVRUUklCVVRFX1BVUkUNCiAgICArIyBkZWZpbmUgWVlfQVRUUklCVVRF
X1BVUkUgICBZWV9BVFRSSUJVVEUgKChfX3B1cmVfXykpDQogICAgKyNlbmRpZg0KICAgICsNCiAg
ICArI2lmbmRlZiBZWV9BVFRSSUJVVEVfVU5VU0VEDQogICAgKyMgZGVmaW5lIFlZX0FUVFJJQlVU
RV9VTlVTRUQgWVlfQVRUUklCVVRFICgoX191bnVzZWRfXykpDQogICAgKyNlbmRpZg0KICAgICsN
CiAgICArI2lmICFkZWZpbmVkIF9Ob3JldHVybiBcDQogICAgKyAgICAgJiYgKCFkZWZpbmVkIF9f
U1REQ19WRVJTSU9OX18gfHwgX19TVERDX1ZFUlNJT05fXyA8IDIwMTExMikNCiAgICArIyBpZiBk
ZWZpbmVkIF9NU0NfVkVSICYmIDEyMDAgPD0gX01TQ19WRVINCiAgICArIyAgZGVmaW5lIF9Ob3Jl
dHVybiBfX2RlY2xzcGVjIChub3JldHVybikNCiAgICArIyBlbHNlDQogICAgKyMgIGRlZmluZSBf
Tm9yZXR1cm4gWVlfQVRUUklCVVRFICgoX19ub3JldHVybl9fKSkNCiAgICArIyBlbmRpZg0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKy8qIFN1cHByZXNzIHVudXNlZC12YXJpYWJsZSB3YXJuaW5n
cyBieSAidXNpbmciIEUuICAqLw0KICAgICsjaWYgISBkZWZpbmVkIGxpbnQgfHwgZGVmaW5lZCBf
X0dOVUNfXw0KICAgICsjIGRlZmluZSBZWVVTRShFKSAoKHZvaWQpIChFKSkNCiAgICArI2Vsc2UN
CiAgICArIyBkZWZpbmUgWVlVU0UoRSkgLyogZW1wdHkgKi8NCiAgICArI2VuZGlmDQogICAgKw0K
ICAgICsjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiA0MDcgPD0gX19HTlVDX18gKiAxMDAgKyBfX0dO
VUNfTUlOT1JfXw0KICAgICsvKiBTdXBwcmVzcyBhbiBpbmNvcnJlY3QgZGlhZ25vc3RpYyBhYm91
dCB5eWx2YWwgYmVpbmcgdW5pbml0aWFsaXplZC4gICovDQogICAgKyMgZGVmaW5lIFlZX0lHTk9S
RV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lOIFwNCiAgICArICAgIF9QcmFnbWEgKCJHQ0MgZGlh
Z25vc3RpYyBwdXNoIikgXA0KICAgICsgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9zdGljIGlnbm9y
ZWQgXCItV3VuaW5pdGlhbGl6ZWRcIiIpXA0KICAgICsgICAgX1ByYWdtYSAoIkdDQyBkaWFnbm9z
dGljIGlnbm9yZWQgXCItV21heWJlLXVuaW5pdGlhbGl6ZWRcIiIpDQogICAgKyMgZGVmaW5lIFlZ
X0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORCBcDQogICAgKyAgICBfUHJhZ21hICgiR0ND
IGRpYWdub3N0aWMgcG9wIikNCiAgICArI2Vsc2UNCiAgICArIyBkZWZpbmUgWVlfSU5JVElBTF9W
QUxVRShWYWx1ZSkgVmFsdWUNCiAgICArI2VuZGlmDQogICAgKyNpZm5kZWYgWVlfSUdOT1JFX01B
WUJFX1VOSU5JVElBTElaRURfQkVHSU4NCiAgICArIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VO
SU5JVElBTElaRURfQkVHSU4NCiAgICArIyBkZWZpbmUgWVlfSUdOT1JFX01BWUJFX1VOSU5JVElB
TElaRURfRU5EDQogICAgKyNlbmRpZg0KICAgICsjaWZuZGVmIFlZX0lOSVRJQUxfVkFMVUUNCiAg
ICArIyBkZWZpbmUgWVlfSU5JVElBTF9WQUxVRShWYWx1ZSkgLyogTm90aGluZy4gKi8NCiAgICAr
I2VuZGlmDQogICAgKw0KICAgICsNCiAgICArI2lmICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZ
RVJST1JfVkVSQk9TRQ0KICAgICsNCiAgICArLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9jYSBv
ciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLw0KICAgICsNCiAgICAr
IyBpZmRlZiBZWVNUQUNLX1VTRV9BTExPQ0ENCiAgICArIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NB
DQogICAgKyMgICBpZmRlZiBfX0dOVUNfXw0KICAgICsjICAgIGRlZmluZSBZWVNUQUNLX0FMTE9D
IF9fYnVpbHRpbl9hbGxvY2ENCiAgICArIyAgIGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJH
X0lOQ1INCiAgICArIyAgICBpbmNsdWRlIDxhbGxvY2EuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLw0KICAgICsjICAgZWxpZiBkZWZpbmVkIF9BSVgNCiAgICArIyAgICBkZWZp
bmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQ0KICAgICsjICAgZWxpZiBkZWZpbmVkIF9NU0NfVkVS
DQogICAgKyMgICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUg
U1BBQ0UgKi8NCiAgICArIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2ENCiAgICArIyAgIGVsc2UN
CiAgICArIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2ENCiAgICArIyAgICBpZiAhIGRl
ZmluZWQgX0FMTE9DQV9IICYmICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MNCiAgICArIyAgICAgaW5j
bHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8NCiAgICAr
ICAgICAgLyogVXNlIEVYSVRfU1VDQ0VTUyBhcyBhIHdpdG5lc3MgZm9yIHN0ZGxpYi5oLiAgKi8N
CiAgICArIyAgICAgaWZuZGVmIEVYSVRfU1VDQ0VTUw0KICAgICsjICAgICAgZGVmaW5lIEVYSVRf
U1VDQ0VTUyAwDQogICAgKyMgICAgIGVuZGlmDQogICAgKyMgICAgZW5kaWYNCiAgICArIyAgIGVu
ZGlmDQogICAgKyMgIGVuZGlmDQogICAgKyMgZW5kaWYNCiAgICArDQogICAgKyMgaWZkZWYgWVlT
VEFDS19BTExPQw0KICAgICsgICAvKiBQYWNpZnkgR0NDJ3MgJ2VtcHR5IGlmLWJvZHknIHdhcm5p
bmcuICAqLw0KICAgICsjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAq
LzsgfSB3aGlsZSAoMCkNCiAgICArIyAgaWZuZGVmIFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQ0KICAg
ICsgICAgLyogVGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRo
ZSBib3R0b20gb2YgdGhlIHN0YWNrLA0KICAgICsgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBi
ZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQ0KICAgICsgICAg
ICAgaW52b2tlIGFsbG9jYSAoTikgaWYgTiBleGNlZWRzIDQwOTYuICBVc2UgYSBzbGlnaHRseSBz
bWFsbGVyIG51bWJlcg0KICAgICsgICAgICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFs
bG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sgc2xvdHMuICAqLw0KICAgICsjICAgZGVmaW5lIFlZU1RB
Q0tfQUxMT0NfTUFYSU1VTSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLw0KICAgICsj
ICBlbmRpZg0KICAgICsjIGVsc2UNCiAgICArIyAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxM
T0MNCiAgICArIyAgZGVmaW5lIFlZU1RBQ0tfRlJFRSBZWUZSRUUNCiAgICArIyAgaWZuZGVmIFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTQ0KICAgICsjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSBZWVNJWkVfTUFYSU1VTQ0KICAgICsjICBlbmRpZg0KICAgICsjICBpZiAoZGVmaW5lZCBfX2Nw
bHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwNCiAgICArICAgICAgICYmICEgKChk
ZWZpbmVkIFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcDQogICAgKyAgICAgICAgICAgICAm
JiAoZGVmaW5lZCBZWUZSRUUgfHwgZGVmaW5lZCBmcmVlKSkpDQogICAgKyMgICBpbmNsdWRlIDxz
dGRsaWIuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgICsjICAgaWZu
ZGVmIEVYSVRfU1VDQ0VTUw0KICAgICsjICAgIGRlZmluZSBFWElUX1NVQ0NFU1MgMA0KICAgICsj
ICAgZW5kaWYNCiAgICArIyAgZW5kaWYNCiAgICArIyAgaWZuZGVmIFlZTUFMTE9DDQogICAgKyMg
ICBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jDQogICAgKyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYm
ICEgZGVmaW5lZCBFWElUX1NVQ0NFU1MNCiAgICArdm9pZCAqbWFsbG9jIChZWVNJWkVfVCk7IC8q
IElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8NCiAgICArIyAgIGVuZGlmDQogICAgKyMg
IGVuZGlmDQogICAgKyMgIGlmbmRlZiBZWUZSRUUNCiAgICArIyAgIGRlZmluZSBZWUZSRUUgZnJl
ZQ0KICAgICsjICAgaWYgISBkZWZpbmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUw0K
ICAgICt2b2lkIGZyZWUgKHZvaWQgKik7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0Ug
Ki8NCiAgICArIyAgIGVuZGlmDQogICAgKyMgIGVuZGlmDQogICAgKyMgZW5kaWYNCiAgICArI2Vu
ZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLw0KICAgICsN
CiAgICArDQogICAgKyNpZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXA0KICAgICsgICAgICYmICgh
IGRlZmluZWQgX19jcGx1c3BsdXMgXA0KICAgICsgICAgICAgICB8fCAoZGVmaW5lZCBZWVNUWVBF
X0lTX1RSSVZJQUwgJiYgWVlTVFlQRV9JU19UUklWSUFMKSkpDQogICAgKw0KICAgICsvKiBBIHR5
cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sgbWVtYmVyLiAgKi8NCiAg
ICArdW5pb24geXlhbGxvYw0KICAgICt7DQogICAgKyAgeXl0eXBlX2ludDE2IHl5c3NfYWxsb2M7
DQogICAgKyAgWVlTVFlQRSB5eXZzX2FsbG9jOw0KICAgICt9Ow0KICAgICsNCiAgICArLyogVGhl
IHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdlZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRo
ZSBuZXh0LiAgKi8NCiAgICArIyBkZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1
bmlvbiB5eWFsbG9jKSAtIDEpDQogICAgKw0KICAgICsvKiBUaGUgc2l6ZSBvZiBhbiBhcnJheSBs
YXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgNCiAgICArICAgTiBl
bGVtZW50cy4gICovDQogICAgKyMgZGVmaW5lIFlZU1RBQ0tfQllURVMoTikgXA0KICAgICsgICAg
ICgoTikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXA0KICAg
ICsgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pDQogICAgKw0KICAgICsjIGRlZmluZSBZWUNP
UFlfTkVFREVEIDENCiAgICArDQogICAgKy8qIFJlbG9jYXRlIFNUQUNLIGZyb20gaXRzIG9sZCBs
b2NhdGlvbiB0byB0aGUgbmV3IG9uZS4gIFRoZQ0KICAgICsgICBsb2NhbCB2YXJpYWJsZXMgWVlT
SVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5ldyBudW1iZXIgb2YNCiAgICAr
ICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQgWVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlv
biBvZiB0aGUNCiAgICArICAgc3RhY2suICBBZHZhbmNlIFlZUFRSIHRvIGEgcHJvcGVybHkgYWxp
Z25lZCBsb2NhdGlvbiBmb3IgdGhlIG5leHQNCiAgICArICAgc3RhY2suICAqLw0KICAgICsjIGRl
ZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrX2FsbG9jLCBTdGFjaykgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcDQogICAgKyAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XA0KICAgICsgICAgICAgIFlZU0laRV9UIHl5bmV3Ynl0ZXM7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgICAgWVlDT1BZICgmeXlwdHItPlN0
YWNrX2FsbG9jLCBTdGFjaywgeXlzaXplKTsgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAg
ICAgICBTdGFjayA9ICZ5eXB0ci0+U3RhY2tfYWxsb2M7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXA0KICAgICsgICAgICAgIHl5bmV3Ynl0ZXMgPSB5eXN0YWNrc2l6ZSAqIHNp
emVvZiAoKlN0YWNrKSArIFlZU1RBQ0tfR0FQX01BWElNVU07IFwNCiAgICArICAgICAgICB5eXB0
ciArPSB5eW5ld2J5dGVzIC8gc2l6ZW9mICgqeXlwdHIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXA0KICAgICsgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICB3aGlsZSAoMCkNCiAgICArDQog
ICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmIGRlZmluZWQgWVlDT1BZX05FRURFRCAmJiBZWUNP
UFlfTkVFREVEDQogICAgKy8qIENvcHkgQ09VTlQgb2JqZWN0cyBmcm9tIFNSQyB0byBEU1QuICBU
aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbw0KICAgICsgICBub3Qgb3ZlcmxhcC4gICovDQog
ICAgKyMgaWZuZGVmIFlZQ09QWQ0KICAgICsjICBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBf
X0dOVUNfXw0KICAgICsjICAgZGVmaW5lIFlZQ09QWShEc3QsIFNyYywgQ291bnQpIFwNCiAgICAr
ICAgICAgX19idWlsdGluX21lbWNweSAoRHN0LCBTcmMsIChDb3VudCkgKiBzaXplb2YgKCooU3Jj
KSkpDQogICAgKyMgIGVsc2UNCiAgICArIyAgIGRlZmluZSBZWUNPUFkoRHN0LCBTcmMsIENvdW50
KSAgICAgICAgICAgICAgXA0KICAgICsgICAgICBkbyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcDQogICAgKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwNCiAgICArICAgICAgICAgIFlZU0laRV9UIHl5aTsgICAgICAgICAgICAg
ICAgICAgICAgICAgXA0KICAgICsgICAgICAgICAgZm9yICh5eWkgPSAwOyB5eWkgPCAoQ291bnQp
OyB5eWkrKykgICBcDQogICAgKyAgICAgICAgICAgIChEc3QpW3l5aV0gPSAoU3JjKVt5eWldOyAg
ICAgICAgICAgIFwNCiAgICArICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXA0KICAgICsgICAgICB3aGlsZSAoMCkNCiAgICArIyAgZW5kaWYNCiAgICArIyBl
bmRpZg0KICAgICsjZW5kaWYgLyogIVlZQ09QWV9ORUVERUQgKi8NCiAgICArDQogICAgKy8qIFlZ
RklOQUwgLS0gU3RhdGUgbnVtYmVyIG9mIHRoZSB0ZXJtaW5hdGlvbiBzdGF0ZS4gICovDQogICAg
KyNkZWZpbmUgWVlGSU5BTCAgMTENCiAgICArLyogWVlMQVNUIC0tIExhc3QgaW5kZXggaW4gWVlU
QUJMRS4gICovDQogICAgKyNkZWZpbmUgWVlMQVNUICAgMzMyDQogICAgKw0KICAgICsvKiBZWU5U
T0tFTlMgLS0gTnVtYmVyIG9mIHRlcm1pbmFscy4gICovDQogICAgKyNkZWZpbmUgWVlOVE9LRU5T
ICA0NA0KICAgICsvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovDQogICAg
KyNkZWZpbmUgWVlOTlRTICA1Mw0KICAgICsvKiBZWU5SVUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMu
ICAqLw0KICAgICsjZGVmaW5lIFlZTlJVTEVTICAxMjkNCiAgICArLyogWVlOU1RBVEVTIC0tIE51
bWJlciBvZiBzdGF0ZXMuICAqLw0KICAgICsjZGVmaW5lIFlZTlNUQVRFUyAgMjExDQogICAgKw0K
ICAgICsvKiBZWVRSQU5TTEFURVtZWVhdIC0tIFN5bWJvbCBudW1iZXIgY29ycmVzcG9uZGluZyB0
byBZWVggYXMgcmV0dXJuZWQNCiAgICArICAgYnkgeXlsZXgsIHdpdGggb3V0LW9mLWJvdW5kcyBj
aGVja2luZy4gICovDQogICAgKyNkZWZpbmUgWVlVTkRFRlRPSyAgMg0KICAgICsjZGVmaW5lIFlZ
TUFYVVRPSyAgIDI5OA0KICAgICsNCiAgICArI2RlZmluZSBZWVRSQU5TTEFURShZWVgpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICgodW5z
aWduZWQgaW50KSAoWVlYKSA8PSBZWU1BWFVUT0sgPyB5eXRyYW5zbGF0ZVtZWVhdIDogWVlVTkRF
RlRPSykNCiAgICArDQogICAgKy8qIFlZVFJBTlNMQVRFW1RPS0VOLU5VTV0gLS0gU3ltYm9sIG51
bWJlciBjb3JyZXNwb25kaW5nIHRvIFRPS0VOLU5VTQ0KICAgICsgICBhcyByZXR1cm5lZCBieSB5
eWxleCwgd2l0aG91dCBvdXQtb2YtYm91bmRzIGNoZWNraW5nLiAgKi8NCiAgICArc3RhdGljIGNv
bnN0IHl5dHlwZV91aW50OCB5eXRyYW5zbGF0ZVtdID0NCiAgICArew0KICAgICsgICAgICAgMCwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQog
ICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwNCiAgICAr
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0KICAgICsgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLA0K
ICAgICsgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsDQogICAgKyAgICAgICA1
LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LA0KICAgICsgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwNCiAgICArICAgICAgMjUsICAgIDI2LCAgICAy
NywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAgMzQsDQogICAg
KyAgICAgIDM1LCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0
MiwgICAgNDMNCiAgICArfTsNCiAgICArDQogICAgKyNpZiBZWURFQlVHDQogICAgKyAgLyogWVlS
TElORVtZWU5dIC0tIFNvdXJjZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5l
ZC4gICovDQogICAgK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9DQogICAg
K3sNCiAgICArICAgICAgIDAsICAgMTE0LCAgIDExNCwgICAxMTQsICAgMTE2LCAgIDExNiwgICAx
MjAsICAgMTI1LCAgIDEyNywgICAxMjgsDQogICAgKyAgICAgMTI5LCAgIDEzMCwgICAxMzEsICAg
MTMyLCAgIDEzNiwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLA0KICAgICsgICAg
IDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDQsICAgMTQ1LCAgIDE0NiwgICAxNDcsICAg
MTQ4LCAgIDE0OSwNCiAgICArICAgICAxNTAsICAgMTU0LCAgIDE1NSwgICAxNjEsICAgMTY4LCAg
IDE3MywgICAxODAsICAgMTg5LCAgIDE5MSwgICAxOTIsDQogICAgKyAgICAgMTkzLCAgIDE5NCwg
ICAxOTUsICAgMTk2LCAgIDE5OSwgICAyMDcsICAgMjEzLCAgIDIyMywgICAyMjksICAgMjM1LA0K
ICAgICsgICAgIDI0MSwgICAyNDQsICAgMjQ2LCAgIDI1OSwgICAyNjAsICAgMjY1LCAgIDI3NSwg
ICAyODAsICAgMjg4LCAgIDI5MSwNCiAgICArICAgICAyOTMsICAgMjk0LCAgIDI5NSwgICAyOTYs
ICAgMjk3LCAgIDMwMCwgICAzMDYsICAgMzE3LCAgIDMyMywgICAzMzMsDQogICAgKyAgICAgMzM1
LCAgIDM0MCwgICAzNDgsICAgMzU2LCAgIDM1OSwgICAzNjEsICAgMzYyLCAgIDM2MywgICAzNjgs
ICAgMzc1LA0KICAgICsgICAgIDM4MCwgICAzODgsICAgMzkxLCAgIDM5MywgICAzOTQsICAgMzk1
LCAgIDM5OCwgICA0MDcsICAgNDE0LCAgIDQxOSwNCiAgICArICAgICA0MjUsICAgNDQzLCAgIDQ0
NSwgICA0NDYsICAgNDQ3LCAgIDQ1MCwgICA0NTgsICAgNDYwLCAgIDQ2MSwgICA0NjQsDQogICAg
KyAgICAgNDcxLCAgIDQ3MywgICA0NzgsICAgNDc5LCAgIDQ4MiwgICA0ODMsICAgNDg0LCAgIDQ4
OCwgICA0ODksICAgNDkyLA0KICAgICsgICAgIDQ5MywgICA0OTYsICAgNDk3LCAgIDQ5OCwgICA0
OTksICAgNTAwLCAgIDUwMSwgICA1MDIsICAgNTAzLCAgIDUwNCwNCiAgICArICAgICA1MDUsICAg
NTA2LCAgIDUxMCwgICA1MTIsICAgNTEzLCAgIDUxNiwgICA1MTcsICAgNTIxLCAgIDUyNCwgICA1
MjUNCiAgICArfTsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWYgWVlERUJVRyB8fCBZWUVS
Uk9SX1ZFUkJPU0UgfHwgMA0KICAgICsvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBu
YW1lIG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4NCiAgICArICAgRmlyc3QsIHRoZSB0ZXJtaW5h
bHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8NCiAgICAr
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHl5dG5hbWVbXSA9DQogICAgK3sNCiAgICArICAiJGVu
ZCIsICJlcnJvciIsICIkdW5kZWZpbmVkIiwgIlRfTUFJTk1FTlUiLCAiVF9NRU5VIiwgIlRfRU5E
TUVOVSIsDQogICAgKyAgIlRfU09VUkNFIiwgIlRfQ0hPSUNFIiwgIlRfRU5EQ0hPSUNFIiwgIlRf
Q09NTUVOVCIsICJUX0NPTkZJRyIsDQogICAgKyAgIlRfTUVOVUNPTkZJRyIsICJUX0hFTFAiLCAi
VF9IRUxQVEVYVCIsICJUX0lGIiwgIlRfRU5ESUYiLCAiVF9ERVBFTkRTIiwNCiAgICArICAiVF9P
UFRJT05BTCIsICJUX1BST01QVCIsICJUX1RZUEUiLCAiVF9ERUZBVUxUIiwgIlRfU0VMRUNUIiwg
IlRfSU1QTFkiLA0KICAgICsgICJUX1JBTkdFIiwgIlRfVklTSUJMRSIsICJUX09QVElPTiIsICJU
X09OIiwgIlRfV09SRCIsICJUX1dPUkRfUVVPVEUiLA0KICAgICsgICJUX1VORVFVQUwiLCAiVF9M
RVNTIiwgIlRfTEVTU19FUVVBTCIsICJUX0dSRUFURVIiLCAiVF9HUkVBVEVSX0VRVUFMIiwNCiAg
ICArICAiVF9DTE9TRV9QQVJFTiIsICJUX09QRU5fUEFSRU4iLCAiVF9FT0wiLCAiVF9WQVJJQUJM
RSIsICJUX0FTU0lHTiIsDQogICAgKyAgIlRfQVNTSUdOX1ZBTCIsICJUX09SIiwgIlRfQU5EIiwg
IlRfRVFVQUwiLCAiVF9OT1QiLCAiJGFjY2VwdCIsICJpbnB1dCIsDQogICAgKyAgInN0YXJ0Iiwg
Im1haW5tZW51X3N0bXQiLCAic3RtdF9saXN0IiwgIm9wdGlvbl9uYW1lIiwgImNvbW1vbl9zdG10
IiwNCiAgICArICAib3B0aW9uX2Vycm9yIiwgImNvbmZpZ19lbnRyeV9zdGFydCIsICJjb25maWdf
c3RtdCIsDQogICAgKyAgIm1lbnVjb25maWdfZW50cnlfc3RhcnQiLCAibWVudWNvbmZpZ19zdG10
IiwgImNvbmZpZ19vcHRpb25fbGlzdCIsDQogICAgKyAgImNvbmZpZ19vcHRpb24iLCAic3ltYm9s
X29wdGlvbiIsICJzeW1ib2xfb3B0aW9uX2xpc3QiLA0KICAgICsgICJzeW1ib2xfb3B0aW9uX2Fy
ZyIsICJjaG9pY2UiLCAiY2hvaWNlX2VudHJ5IiwgImNob2ljZV9lbmQiLA0KICAgICsgICJjaG9p
Y2Vfc3RtdCIsICJjaG9pY2Vfb3B0aW9uX2xpc3QiLCAiY2hvaWNlX29wdGlvbiIsICJjaG9pY2Vf
YmxvY2siLA0KICAgICsgICJpZl9lbnRyeSIsICJpZl9lbmQiLCAiaWZfc3RtdCIsICJpZl9ibG9j
ayIsICJtZW51IiwgIm1lbnVfZW50cnkiLA0KICAgICsgICJtZW51X2VuZCIsICJtZW51X3N0bXQi
LCAibWVudV9ibG9jayIsICJzb3VyY2Vfc3RtdCIsICJjb21tZW50IiwNCiAgICArICAiY29tbWVu
dF9zdG10IiwgImhlbHBfc3RhcnQiLCAiaGVscCIsICJkZXBlbmRzX2xpc3QiLCAiZGVwZW5kcyIs
DQogICAgKyAgInZpc2liaWxpdHlfbGlzdCIsICJ2aXNpYmxlIiwgInByb21wdF9zdG10X29wdCIs
ICJwcm9tcHQiLCAiZW5kIiwgIm5sIiwNCiAgICArICAiaWZfZXhwciIsICJleHByIiwgIm5vbmNv
bnN0X3N5bWJvbCIsICJzeW1ib2wiLCAid29yZF9vcHQiLA0KICAgICsgICJhc3NpZ25tZW50X3N0
bXQiLCAiYXNzaWduX3ZhbCIsIFlZX05VTExQVFINCiAgICArfTsNCiAgICArI2VuZGlmDQogICAg
Kw0KICAgICsjIGlmZGVmIFlZUFJJTlQNCiAgICArLyogWVlUT0tOVU1bTlVNXSAtLSAoRXh0ZXJu
YWwpIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvIHRoZQ0KICAgICsgICAoaW50ZXJuYWwp
IHN5bWJvbCBudW1iZXIgTlVNICh3aGljaCBtdXN0IGJlIHRoYXQgb2YgYSB0b2tlbikuICAqLw0K
ICAgICtzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQxNiB5eXRva251bVtdID0NCiAgICArew0KICAg
ICsgICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAy
NjIsICAgMjYzLCAgIDI2NCwNCiAgICArICAgICAyNjUsICAgMjY2LCAgIDI2NywgICAyNjgsICAg
MjY5LCAgIDI3MCwgICAyNzEsICAgMjcyLCAgIDI3MywgICAyNzQsDQogICAgKyAgICAgMjc1LCAg
IDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwgICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAg
Mjg0LA0KICAgICsgICAgIDI4NSwgICAyODYsICAgMjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAg
IDI5MSwgICAyOTIsICAgMjkzLCAgIDI5NCwNCiAgICArICAgICAyOTUsICAgMjk2LCAgIDI5Nywg
ICAyOTgNCiAgICArfTsNCiAgICArIyBlbmRpZg0KICAgICsNCiAgICArI2RlZmluZSBZWVBBQ1Rf
TklORiAtOTINCiAgICArDQogICAgKyNkZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoWXlz
dGF0ZSkgXA0KICAgICsgICghISgoWXlzdGF0ZSkgPT0gKC05MikpKQ0KICAgICsNCiAgICArI2Rl
ZmluZSBZWVRBQkxFX05JTkYgLTg5DQogICAgKw0KICAgICsjZGVmaW5lIHl5dGFibGVfdmFsdWVf
aXNfZXJyb3IoWXl0YWJsZV92YWx1ZSkgXA0KICAgICsgIDANCiAgICArDQogICAgKyAgLyogWVlQ
QUNUW1NUQVRFLU5VTV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmli
aW5nDQogICAgKyAgICAgU1RBVEUtTlVNLiAgKi8NCiAgICArc3RhdGljIGNvbnN0IHl5dHlwZV9p
bnQxNiB5eXBhY3RbXSA9DQogICAgK3sNCiAgICArICAgICAgMjEsICAgIDM4LCAgIC05MiwgICAg
IDQsICAgLTkyLCAgIC05MiwgICAxNTcsICAgIDIzLCAgIC05MiwgICAtOTIsDQogICAgKyAgICAg
LTE5LCAgIC05MiwgICAxOTEsICAgLTE2LCAgICAzOCwgICAtMTMsICAgIDM4LCAgICAgNiwgICAg
MjQsICAgIDM4LA0KICAgICsgICAgICA0OCwgICAgNDgsICAgIDM0LCAgICA0MywgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICArICAgICAtOTIsICAgLTkyLCAg
IC05MiwgICAgOTYsICAgLTkyLCAgICA0NCwgICAxMTEsICAgLTkyLCAgIC05MiwgICAtOTIsDQog
ICAgKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwgICAtOTIsICAgLTkyLA0KICAgICsgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgICA4MywNCiAgICArICAgICAtOTIs
ICAgIDg5LCAgIC05MiwgICAxMTYsICAgLTkyLCAgIDEzMywgICAtOTIsICAgMTM0LCAgIDE0Niwg
ICAtOTIsDQogICAgKyAgICAgIDM0LCAgICAzNCwgICAxMTMsICAgLTkyLCAgICA3MywgICAtOTIs
ICAgMTUwLCAgICA2MiwgICAxNTEsICAgIDMxLA0KICAgICsgICAgIDEyMywgICAyNTgsICAgMjkz
LCAgIDI4MiwgICAgLTIsICAgMjgyLCAgIDIyNSwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICAr
ICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAgMzAsICAgLTkyLCAgIC05MiwgICAgMzQsICAgIDM0
LCAgICA2NSwgICAgNjUsDQogICAgKyAgICAgIDY1LCAgICA2NSwgICAgNjUsICAgIDY1LCAgIC05
MiwgICAtOTIsICAgMTUyLCAgIC05MiwgICAxNTMsICAgMTU0LA0KICAgICsgICAgIDExMCwgICAg
MzgsICAgIDM4LCAgICAzNCwgICAgNDgsICAgIDQ4LCAgICA2NSwgICAtOTIsICAgMjAyLCAgIC05
MiwNCiAgICArICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAyMDMsICAgLTkyLCAgIC05MiwgICAx
ODEsICAgIDM4LCAgICAzOCwgICAgNDgsDQogICAgKyAgICAgLTkyLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLA0KICAgICsgICAg
IC05MiwgICAtOTIsICAgLTkyLCAgIDIwNSwgICAtOTIsICAgIDgwLCAgIC05MiwgICAtOTIsICAg
LTkyLCAgIC05MiwNCiAgICArICAgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAg
IC05MiwgICAxNzksICAgLTkyLCAgIC05MiwgICAtOTIsDQogICAgKyAgICAgLTkyLCAgIC05Miwg
ICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgICAzNCwgICAyMDUsICAgMTg1LA0K
ICAgICsgICAgIDIwNSwgICAtMTEsICAgMjA1LCAgIDIwNSwgICAgNjUsICAgIDM2LCAgIDE4Niwg
ICAtOTIsICAgLTkyLCAgIDIwNSwNCiAgICArICAgICAxODcsICAgMjA1LCAgICAzNCwgICAtOTIs
ICAgMTE1LCAgIDE4OCwgICAtOTIsICAgLTkyLCAgIDIwMSwgICAyMTQsDQogICAgKyAgICAgMjE1
LCAgIDIwNSwgICAxOTYsICAgLTkyLCAgIC05MiwgICAyMTcsICAgLTkyLCAgIDIxOCwgICAgODEs
ICAgLTkyLA0KICAgICsgICAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAyMTksICAgIDM4
LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICArICAgICAtOTINCiAgICArfTsNCiAg
ICArDQogICAgKyAgLyogWVlERUZBQ1RbU1RBVEUtTlVNXSAtLSBEZWZhdWx0IHJlZHVjdGlvbiBu
dW1iZXIgaW4gc3RhdGUgU1RBVEUtTlVNLg0KICAgICsgICAgIFBlcmZvcm1lZCB3aGVuIFlZVEFC
TEUgZG9lcyBub3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBkby4gIFplcm8NCiAgICArICAg
ICBtZWFucyB0aGUgZGVmYXVsdCBpcyBhbiBlcnJvci4gICovDQogICAgK3N0YXRpYyBjb25zdCB5
eXR5cGVfdWludDggeXlkZWZhY3RbXSA9DQogICAgK3sNCiAgICArICAgICAgIDcsICAgICAwLCAg
IDEwNywgICAgIDAsICAgICAzLCAgICAgNywgICAgIDAsICAgICA3LCAgIDEwMiwgICAxMDMsDQog
ICAgKyAgICAgICAwLCAgICAgMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
IDEyNSwgICAgIDAsICAgICAwLA0KICAgICsgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTUsICAgIDIwLCAgICAxNiwgICAgMTcsICAgIDIyLCAgICAxOCwNCiAgICArICAgICAgMTks
ICAgIDIxLCAgICAyMywgICAgIDAsICAgIDI0LCAgICAgMCwgICAgIDAsICAgICA4LCAgICAzNywg
ICAgMjcsDQogICAgKyAgICAgIDM3LCAgICAyOCwgICAgNTksICAgIDY5LCAgICAgOSwgICAgNzQs
ICAgIDI1LCAgICA5NiwgICAgODIsICAgIDEwLA0KICAgICsgICAgICAyOSwgICAgOTEsICAgIDI2
LCAgICAxMSwgICAgMzAsICAgMTA4LCAgICAgMiwgICAgIDYsICAgIDE0LCAgICAgMCwNCiAgICAr
ICAgICAxMDQsICAgICAwLCAgIDEyNiwgICAgIDAsICAgMTA1LCAgICAgMCwgICAxMjIsICAgICAw
LCAgICAgMCwgICAxMjQsDQogICAgKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgMTIzLCAgIDEx
MSwgICAxMDYsICAgICAwLCAgIDEyOCwgICAgIDAsICAgICAwLA0KICAgICsgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgOTEsICAgICAwLCAgICAgMCwgICAgNzgsICAgIDg2LCAgICA1
NSwNCiAgICArICAgICAgODcsICAgIDMzLCAgICAzNSwgICAgIDAsICAgMTE5LCAgICA3MSwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsDQogICAgKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAxMiwgICAxMjksICAgICAwLCAgICAxMywgICAgIDAsICAgICAwLA0KICAgICsgICAg
ICAgMCwgICAgIDAsICAgMTAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgNTEsICAg
ICAwLCAgICA0MywNCiAgICArICAgICAgNDIsICAgIDM4LCAgICAzOSwgICAgIDAsICAgIDQxLCAg
ICA0MCwgICAgIDAsICAgICAwLCAgIDEwMCwgICAgIDAsDQogICAgKyAgICAgIDYzLCAgICA2NCwg
ICAgNjAsICAgIDYyLCAgICA2MSwgICAgNzAsICAgIDU4LCAgICA1NywgICAgNzUsICAgIDc3LA0K
ICAgICsgICAgICA3MywgICAgNzYsICAgIDcyLCAgIDEwOSwgICAgOTgsICAgICAwLCAgICA5Nywg
ICAgODMsICAgIDg1LCAgICA4MSwNCiAgICArICAgICAgODQsICAgIDgwLCAgICA5MywgICAgOTQs
ICAgIDkyLCAgIDExOCwgICAxMjAsICAgMTIxLCAgIDExNywgICAxMTIsDQogICAgKyAgICAgMTEz
LCAgIDExNCwgICAxMTUsICAgMTE2LCAgIDEyNywgICAgMzIsICAgIDg5LCAgICAgMCwgICAxMDks
ICAgICAwLA0KICAgICsgICAgIDEwOSwgICAxMDksICAgMTA5LCAgIDEwOSwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgOTAsICAgIDY3LCAgIDEwOSwNCiAgICArICAgICAgIDAsICAgMTA5LCAgICAg
MCwgICAgOTksICAgICAwLCAgICAgMCwgICAgNDQsICAgMTAxLCAgICAgMCwgICAgIDAsDQogICAg
KyAgICAgICAwLCAgIDEwOSwgICAgNTMsICAgIDUwLCAgICAzMSwgICAgIDAsICAgIDY2LCAgICAg
MCwgICAxMTAsICAgIDk1LA0KICAgICsgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAg
IDAsICAgICAwLCAgICA1MiwgICAgNjUsICAgIDY4LCAgICA0OSwNCiAgICArICAgICAgNTQNCiAg
ICArfTsNCiAgICArDQogICAgKyAgLyogWVlQR09UT1tOVEVSTS1OVU1dLiAgKi8NCiAgICArc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3RvW10gPQ0KICAgICt7DQogICAgKyAgICAgLTky
LCAgIC05MiwgICAyNDksICAgLTkyLCAgIDI1MiwgICAtOTIsICAgIC05LCAgIC02NywgICAtOTIs
ICAgLTkyLA0KICAgICsgICAgIC05MiwgICAtOTIsICAgMjIwLCAgIC05MiwgICAtOTIsICAgLTky
LCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwNCiAgICArICAgICAgMzUsICAgLTkyLCAgIC05
MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsDQogICAg
KyAgICAgLTkyLCAgIDEwMCwgICAtOTIsICAgLTkyLCAgIC05MiwgICAtOTIsICAgLTkyLCAgIDE3
NywgICAxOTUsICAgLTY1LA0KICAgICsgICAgIC05MiwgICAtOTIsICAgMTM3LCAgICAtMSwgICAg
MjYsICAgLTkyLCAgIDE0MSwgICAtNjksICAgLTE1LCAgIC05MSwNCiAgICArICAgICAtOTIsICAg
LTkyLCAgIC05Mg0KICAgICt9Ow0KICAgICsNCiAgICArICAvKiBZWURFRkdPVE9bTlRFUk0tTlVN
XS4gICovDQogICAgK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXlkZWZnb3RvW10gPQ0KICAg
ICt7DQogICAgKyAgICAgIC0xLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgMzYsICAg
IDM3LCAgIDEyMCwgICAgMzgsICAgIDM5LA0KICAgICsgICAgICA0MCwgICAgNDEsICAgIDc5LCAg
IDEyMSwgICAxMjIsICAgMTc1LCAgIDIwNiwgICAgNDIsICAgIDQzLCAgIDEzNiwNCiAgICArICAg
ICAgNDQsICAgIDgxLCAgIDEzMiwgICAgODIsICAgIDQ1LCAgIDE0MCwgICAgNDYsICAgIDgzLCAg
ICA0NywgICAgNDgsDQogICAgKyAgICAgMTQ5LCAgICA0OSwgICAgODUsICAgIDUwLCAgICA1MSwg
ICAgNTIsICAgMTIzLCAgIDEyNCwgICAgODYsICAgMTI1LA0KICAgICsgICAgICA4NCwgICAxNDYs
ICAgMTY5LCAgIDE3MCwgICAgNTMsICAgICA3LCAgIDE4MywgICAgNzIsICAgIDczLCAgICA3NCwN
CiAgICArICAgICAgNjMsICAgIDU0LCAgIDEwNg0KICAgICt9Ow0KICAgICsNCiAgICArICAvKiBZ
WVRBQkxFW1lZUEFDVFtTVEFURS1OVU1dXSAtLSBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5V
TS4gIElmDQogICAgKyAgICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQgdG9rZW4uICBJZiBuZWdhdGl2
ZSwgcmVkdWNlIHRoZSBydWxlIHdob3NlDQogICAgKyAgICAgbnVtYmVyIGlzIHRoZSBvcHBvc2l0
ZS4gIElmIFlZVEFCTEVfTklORiwgc3ludGF4IGVycm9yLiAgKi8NCiAgICArc3RhdGljIGNvbnN0
IHl5dHlwZV9pbnQxNiB5eXRhYmxlW10gPQ0KICAgICt7DQogICAgKyAgICAgIDEwLCAgICA5Mywg
ICAgOTQsICAgMTgyLCAgICAxMSwgICAgNjcsICAgIDY4LCAgIDE1OCwgICAxNTksICAgMTYwLA0K
ICAgICsgICAgIDE2MSwgICAxNjIsICAgMTYzLCAgICA1OSwgICAxMzEsICAgIDYxLCAgIDEzNCwg
ICAgNTcsICAgIDY1LCAgIDE1MywNCiAgICArICAgICAgNTgsICAgMTU0LCAgIDE0MywgICAgNjAs
ICAgICAxLCAgIDE3NCwgICAgIDEsICAgMTU2LCAgIDE1NywgICAgOTYsDQogICAgKyAgICAgIDk3
LCAgIC0zNCwgICAxMDgsICAgIDYyLCAgIDE0NCwgICAtMzQsICAgLTM0LCAgIC0zNCwgICAtMzQs
ICAgLTM0LA0KICAgICsgICAgIC0zNCwgICAtMzQsICAgLTM0LCAgIDEwOSwgICAxNzEsICAgLTM0
LCAgIC0zNCwgICAxMTAsICAgLTM0LCAgIDExMSwNCiAgICArICAgICAxMTIsICAgMTEzLCAgIDEx
NCwgICAxMTUsICAgMTE2LCAgIC0zNCwgICAxMTcsICAgICAyLCAgIDExOCwgICAgNTUsDQogICAg
KyAgICAgIDY0LCAgICA2NiwgICAgNjksICAgMTkyLCAgIDE1NSwgICAgIDgsICAgICA5LCAgIDEx
OSwgICAtMzQsICAgIDcwLA0KICAgICsgICAgICA5NiwgICAgOTcsICAgMTkzLCAgIDEzNSwgICAx
MzgsICAgIDY2LCAgIDE0NywgICAgNzEsICAgMTUzLCAgICA3NSwNCiAgICArICAgICAxNTQsICAg
MTA4LCAgICA3NywgICAxOTEsICAgLTc5LCAgIC03OSwgICAtNzksICAgLTc5LCAgIC03OSwgICAt
NzksDQogICAgKyAgICAgLTc5LCAgIC03OSwgICAgNjYsICAgIDY5LCAgIC03OSwgICAtNzksICAg
MTEwLCAgICA3NiwgICAxODQsICAgMTcyLA0KICAgICsgICAgIDE3MywgICAxMDUsICAgIDk4LCAg
ICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMTgsICAgMTM3LCAgIDE0MiwNCiAgICArICAg
ICAxNjgsICAgMTUxLCAgICA3OCwgICAxOTgsICAgMTgxLCAgIDEwMywgICAxNTIsICAgLTc5LCAg
IDEzOSwgICAgODcsDQogICAgKyAgICAgMTQ4LCAgICA5NiwgICAgOTcsICAgLTM2LCAgIDEwOCwg
ICAgODgsICAgMTc5LCAgIC0zNiwgICAtMzYsICAgLTM2LA0KICAgICsgICAgIC0zNiwgICAtMzYs
ICAgLTM2LCAgIC0zNiwgICAtMzYsICAgMTA5LCAgIDE2NywgICAtMzYsICAgLTM2LCAgIDExMCwN
CiAgICArICAgICAtMzYsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAgIDExNSwgICAxMTYs
ICAgLTM2LCAgIDExNywgICAgOTUsDQogICAgKyAgICAgMTE4LCAgIDE5OSwgICAgODksICAgIDk2
LCAgICA5NywgICAgOTYsICAgIDk3LCAgICAtNSwgICAgMTMsICAgMTE5LA0KICAgICsgICAgIC0z
NiwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIx
LCAgICA5MCwNCiAgICArICAgICAgOTEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAy
NiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsDQogICAgKyAgICAgIDMxLCAgICAzMiwgICAg
OTIsICAgMTQxLCAgICAzMywgICAxNTAsICAgMTA0LCAgIDEwNywgICAxNjQsICAgMTY1LA0KICAg
ICsgICAgIDE2NiwgICAgLTQsICAgIDEzLCAgICAzNCwgICAgMzUsICAgIDE0LCAgICAxNSwgICAg
MTYsICAgIDE3LCAgICAxOCwNCiAgICArICAgICAgMTksICAgIDIwLCAgICAyMSwgICAxNzYsICAg
MjEwLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsDQogICAgKyAgICAgIDI3LCAg
ICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgMTc3LCAgIDE3OCwgICAgMzMsICAg
MTgyLA0KICAgICsgICAgICA5NywgICAxODYsICAgMTk0LCAgIDE5NiwgICAyMDAsICAgLTg4LCAg
IDEwOCwgICAgMzQsICAgIDM1LCAgIC04OCwNCiAgICArICAgICAtODgsICAgLTg4LCAgIC04OCwg
ICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgMjAxLCAgIDIwNSwgICAtODgsDQogICAgKyAg
ICAgLTg4LCAgIDExMCwgICAtODgsICAgLTg4LCAgIC04OCwgICAtODgsICAgLTg4LCAgIC04OCwg
ICAtODgsICAgLTg4LA0KICAgICsgICAgIDIwMiwgICAyMDMsICAgMTE4LCAgIDIwNywgICAyMDgs
ICAgMjA5LCAgICA1NiwgICAgMTIsICAgMTMzLCAgIDEwOCwNCiAgICArICAgICAgODAsICAgMTUy
LCAgIC04OCwgICAtNTYsICAgLTU2LCAgIDE4MCwgICAtNTYsICAgLTU2LCAgIC01NiwgICAtNTYs
DQogICAgKyAgICAgMTA5LCAgICAgMCwgICAtNTYsICAgLTU2LCAgIDExMCwgICAxMjYsICAgMTI3
LCAgIDEyOCwgICAxMjksICAgMTQ1LA0KICAgICsgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgMTE4LCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywNCiAgICArICAgICAg
MTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgMTMwLCAgIC01NiwgICAgMjIsICAgIDIzLCAgICAx
NSwgICAgMTYsDQogICAgKyAgICAgICAwLCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAg
IDAsICAgICAwLCAgICAyMiwgICAgMjMsICAgMTg1LA0KICAgICsgICAgICAgMCwgICAxODcsICAg
MTg4LCAgIDE4OSwgICAxOTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDM0LCAgICAzNSwNCiAg
ICArICAgICAxOTUsICAgICAwLCAgIDE5NywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMzQsDQogICAgKyAgICAgIDM1LCAgICAgMCwgICAyMDQNCiAgICArfTsN
CiAgICArDQogICAgK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXljaGVja1tdID0NCiAgICAr
ew0KICAgICsgICAgICAgMSwgICAgNzAsICAgIDcxLCAgICAxNCwgICAgIDAsICAgIDIwLCAgICAy
MSwgICAgOTgsICAgIDk5LCAgIDEwMCwNCiAgICArICAgICAxMDEsICAgMTAyLCAgIDEwMywgICAg
MTQsICAgIDgxLCAgICAxNiwgICAgODEsICAgIDM2LCAgICAxOSwgICAgODYsDQogICAgKyAgICAg
IDM2LCAgICA4NiwgICAgMjQsICAgIDM2LCAgICAgMywgICAxMTYsICAgICAzLCAgICA5NiwgICAg
OTcsICAgIDQwLA0KICAgICsgICAgICA0MSwgICAgIDAsICAgICAxLCAgICAyNywgICAgMzYsICAg
ICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwNCiAgICArICAgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgMTEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsDQog
ICAgKyAgICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAg
ICAzNiwgICAgMjcsICAgIDM2LA0KICAgICsgICAgICAzNiwgICAgMjcsICAgIDI4LCAgICAyNywg
ICAgMzQsICAgIDI3LCAgICAyOCwgICAgMzYsICAgIDM3LCAgICAzNSwNCiAgICArICAgICAgNDAs
ICAgIDQxLCAgICAzNiwgICAgODIsICAgIDgzLCAgICAyNywgICAgODUsICAgIDQzLCAgIDE0NSwg
ICAgMzYsDQogICAgKyAgICAgMTQ1LCAgICAgMSwgICAgMzgsICAgMTc0LCAgICAgNCwgICAgIDUs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LA0KICAgICsgICAgICAxMCwgICAgMTEsICAgIDI3
LCAgICAyOCwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgIDEsICAgMTY3LCAgIDExNCwNCiAgICAr
ICAgICAxMTUsICAgIDM5LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDI3
LCAgICA4MiwgICAgODMsDQogICAgKyAgICAgMTExLCAgICA4NSwgICAgIDEsICAgMTgyLCAgIDEy
OSwgICAgNDIsICAgIDM2LCAgICAzNywgICAgODMsICAgIDM2LA0KICAgICsgICAgICA4NSwgICAg
NDAsICAgIDQxLCAgICAgMCwgICAgIDEsICAgIDM2LCAgIDEyNywgICAgIDQsICAgICA1LCAgICAg
NiwNCiAgICArICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAg
MjYsICAgIDE0LCAgICAxNSwgICAgMTYsDQogICAgKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAg
IDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDM2LA0KICAgICsgICAg
ICAyNywgICAgMzYsICAgIDM2LCAgICA0MCwgICAgNDEsICAgIDQwLCAgICA0MSwgICAgIDAsICAg
ICAxLCAgICAzNiwNCiAgICArICAgICAgMzcsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMzYsDQogICAgKyAgICAgIDM2LCAgICAxNCwg
ICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLA0K
ICAgICsgICAgICAyMywgICAgMjQsICAgIDM2LCAgICA4MywgICAgMjcsICAgIDg1LCAgICAzNiwg
ICAgMzYsICAgIDM2LCAgICAzNiwNCiAgICArICAgICAgMzYsICAgICAwLCAgICAgMSwgICAgMzYs
ICAgIDM3LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsDQogICAgKyAgICAgICA5
LCAgICAxMCwgICAgMTEsICAgICAxLCAgIDIwNSwgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LA0KICAgICsgICAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0
LCAgICAxMywgICAgMzYsICAgIDI3LCAgICAxNCwNCiAgICArICAgICAgNDEsICAgIDM2LCAgICAz
NiwgICAgMzYsICAgIDM2LCAgICAgMCwgICAgIDEsICAgIDM2LCAgICAzNywgICAgIDQsDQogICAg
KyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAz
NiwgICAgNDIsICAgIDE0LA0KICAgICsgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwNCiAgICArICAgICAgMzYsICAg
IDM2LCAgICAyNywgICAgMzYsICAgIDM2LCAgICAzNiwgICAgIDcsICAgICA1LCAgICA4MSwgICAg
IDEsDQogICAgKyAgICAgIDQwLCAgICAzNiwgICAgMzcsICAgICA1LCAgICAgNiwgICAxMjgsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLA0KICAgICsgICAgICAxMiwgICAgLTEsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICA4NCwNCiAgICArICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyNywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsDQogICAgKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAzNiwg
ICAgMzcsICAgIDE0LCAgICAxNSwgICAgIDUsICAgICA2LA0KICAgICsgICAgICAtMSwgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgMTEsICAgIC0xLCAgICAtMSwgICAgMTQsICAgIDE1LCAgIDE2OCwN
CiAgICArICAgICAgLTEsICAgMTcwLCAgIDE3MSwgICAxNzIsICAgMTczLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzNiwgICAgMzcsDQogICAgKyAgICAgMTc5LCAgICAtMSwgICAxODEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LA0KICAgICsgICAgICAz
NywgICAgLTEsICAgMTkxDQogICAgK307DQogICAgKw0KICAgICsgIC8qIFlZU1RPU1tTVEFURS1O
VU1dIC0tIFRoZSAoaW50ZXJuYWwgbnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nDQogICAgKyAgICAg
c3ltYm9sIG9mIHN0YXRlIFNUQVRFLU5VTS4gICovDQogICAgK3N0YXRpYyBjb25zdCB5eXR5cGVf
dWludDggeXlzdG9zW10gPQ0KICAgICt7DQogICAgKyAgICAgICAwLCAgICAgMywgICAgMzYsICAg
IDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA4OSwgICAgMjcsICAgIDI4LA0KICAgICsgICAg
ICA4NywgICAgIDAsICAgIDQ4LCAgICAgMSwgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAg
ICA4LCAgICAgOSwNCiAgICArICAgICAgMTAsICAgIDExLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsDQogICAgKyAgICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI3LCAgICAzNiwgICAgMzcsICAgIDQ5LCAgICA1MCwgICAgNTIsICAgIDUzLA0K
ICAgICsgICAgICA1NCwgICAgNTUsICAgIDYxLCAgICA2MiwgICAgNjQsICAgIDY4LCAgICA3MCwg
ICAgNzIsICAgIDczLCAgICA3NSwNCiAgICArICAgICAgNzcsICAgIDc4LCAgICA3OSwgICAgODgs
ICAgIDk1LCAgICAzNiwgICAgNDYsICAgIDM2LCAgICAzNiwgICAgODcsDQogICAgKyAgICAgIDM2
LCAgICA4NywgICAgMjcsICAgIDk0LCAgICAzNiwgICAgODcsICAgIDI3LCAgICA5MiwgICAgOTIs
ICAgIDI4LA0KICAgICsgICAgICAzNSwgICAgNDMsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDM2
LCAgICAgMSwgICAgMzgsICAgICAxLCAgICA1NiwNCiAgICArICAgICAgNTYsICAgIDY1LCAgICA2
NywgICAgNzEsICAgIDg0LCAgICA3NiwgICAgODIsICAgIDM2LCAgICAzNiwgICAgMzYsDQogICAg
KyAgICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDkxLCAgICA5MSwgICAgMzYsICAgIDQwLCAgICA0
MSwgICAgMjksICAgIDMwLA0KICAgICsgICAgICAzMSwgICAgMzIsICAgIDMzLCAgICA0MiwgICAg
MzYsICAgIDM5LCAgICA5NiwgICAgMzYsICAgICAxLCAgICAxMiwNCiAgICArICAgICAgMTYsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI1LCAgICAyNywgICAg
MzYsDQogICAgKyAgICAgIDUxLCAgICA1NywgICAgNTgsICAgIDgwLCAgICA4MSwgICAgODMsICAg
IDE3LCAgICAxOCwgICAgMTksICAgIDIwLA0KICAgICsgICAgICAzNiwgICAgNTEsICAgIDY2LCAg
ICA4MSwgICAgODMsICAgIDUwLCAgICA2MywgICAgODgsICAgIDUwLCAgICA2NCwNCiAgICArICAg
ICAgNjksICAgIDc1LCAgICA4OCwgICAgMjQsICAgIDM2LCAgICA4MiwgICAgODUsICAgIDUwLCAg
ICA2NCwgICAgNzQsDQogICAgKyAgICAgIDc1LCAgICA4OCwgICAgMzYsICAgIDUxLCAgICA4Mywg
ICAgMzQsICAgIDkxLCAgICA5MSwgICAgOTMsICAgIDkzLA0KICAgICsgICAgICA5MywgICAgOTMs
ICAgIDkzLCAgICA5MywgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMjYsICAgIDg3LCAgICA4NiwN
CiAgICArICAgICAgODcsICAgIDkxLCAgICA5MiwgICAgOTIsICAgIDkzLCAgICA1OSwgICAgIDEs
ICAgIDEzLCAgICAzNiwgICAgODcsDQogICAgKyAgICAgIDg2LCAgICA5MiwgICAgMTQsICAgIDkw
LCAgICA5MSwgICAgOTAsICAgIDM2LCAgICA5MCwgICAgOTAsICAgIDkwLA0KICAgICsgICAgICA5
MCwgICAgOTMsICAgIDI3LCAgICAzNiwgICAgMzYsICAgIDkwLCAgICAzNiwgICAgOTAsICAgIDkx
LCAgICAzNiwNCiAgICArICAgICAgMzYsICAgIDM2LCAgICAzNiwgICAgMzYsICAgIDkwLCAgICA0
MiwgICAgNjAsICAgIDM2LCAgICAzNiwgICAgMzYsDQogICAgKyAgICAgIDg3DQogICAgK307DQog
ICAgKw0KICAgICsgIC8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0
IHJ1bGUgWVlOIGRlcml2ZXMuICAqLw0KICAgICtzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5
cjFbXSA9DQogICAgK3sNCiAgICArICAgICAgIDAsICAgIDQ0LCAgICA0NSwgICAgNDUsICAgIDQ2
LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0OCwgICAgNDgsDQogICAgKyAgICAgIDQ4LCAgICA0
OCwgICAgNDgsICAgIDQ4LCAgICA0OCwgICAgNDksICAgIDQ5LCAgICA0OSwgICAgNDksICAgIDQ5
LA0KICAgICsgICAgICA0OSwgICAgNDksICAgIDQ5LCAgICA0OSwgICAgNTAsICAgIDUwLCAgICA1
MCwgICAgNTAsICAgIDUwLCAgICA1MCwNCiAgICArICAgICAgNTAsICAgIDUxLCAgICA1MSwgICAg
NTIsICAgIDUzLCAgICA1NCwgICAgNTUsICAgIDU2LCAgICA1NiwgICAgNTYsDQogICAgKyAgICAg
IDU2LCAgICA1NiwgICAgNTYsICAgIDU2LCAgICA1NywgICAgNTcsICAgIDU3LCAgICA1NywgICAg
NTcsICAgIDU3LA0KICAgICsgICAgICA1OCwgICAgNTksICAgIDU5LCAgICA2MCwgICAgNjAsICAg
IDYxLCAgICA2MiwgICAgNjMsICAgIDY0LCAgICA2NSwNCiAgICArICAgICAgNjUsICAgIDY1LCAg
ICA2NSwgICAgNjUsICAgIDY1LCAgICA2NiwgICAgNjYsICAgIDY2LCAgICA2NiwgICAgNjcsDQog
ICAgKyAgICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzEsICAgIDcxLCAg
ICA3MSwgICAgNzIsICAgIDczLA0KICAgICsgICAgICA3NCwgICAgNzUsICAgIDc2LCAgICA3Niwg
ICAgNzYsICAgIDc2LCAgICA3NywgICAgNzgsICAgIDc5LCAgICA4MCwNCiAgICArICAgICAgODEs
ICAgIDgyLCAgICA4MiwgICAgODIsICAgIDgyLCAgICA4MywgICAgODQsICAgIDg0LCAgICA4NCwg
ICAgODUsDQogICAgKyAgICAgIDg2LCAgICA4NiwgICAgODcsICAgIDg3LCAgICA4OCwgICAgODgs
ICAgIDg4LCAgICA4OSwgICAgODksICAgIDkwLA0KICAgICsgICAgICA5MCwgICAgOTEsICAgIDkx
LCAgICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwgICAgOTEsICAgIDkxLCAgICA5MSwNCiAgICAr
ICAgICAgOTEsICAgIDkxLCAgICA5MiwgICAgOTMsICAgIDkzLCAgICA5NCwgICAgOTQsICAgIDk1
LCAgICA5NiwgICAgOTYNCiAgICArfTsNCiAgICArDQogICAgKyAgLyogWVlSMltZWU5dIC0tIE51
bWJlciBvZiBzeW1ib2xzIG9uIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLw0K
ICAgICtzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9DQogICAgK3sNCiAgICArICAg
ICAgIDAsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAgMSwgICAgIDMsICAgICAwLCAg
ICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDQsICAgICA0LCAgICAgMywg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLA0KICAgICsgICAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwN
CiAgICArICAgICAgIDEsICAgICAzLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIs
ICAgICAwLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMywgICAgIDQsICAgICA0LCAgICAgNCwgICAgIDQsICAgICA1LA0KICAgICsgICAgICAg
MywgICAgIDAsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAz
LCAgICAgMCwNCiAgICArICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
NCwgICAgIDMsICAgICAyLCAgICAgNCwgICAgIDAsDQogICAgKyAgICAgICAyLCAgICAgMywgICAg
IDEsICAgICAzLCAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAzLA0KICAg
ICsgICAgICAgMSwgICAgIDMsICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywgICAg
IDMsICAgICAyLCAgICAgMiwNCiAgICArICAgICAgIDIsICAgICAwLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgNCwgICAgIDAsICAgICAyLCAgICAgMiwgICAgIDIsDQogICAgKyAgICAgICAwLCAg
ICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDIsICAg
ICAwLA0KICAgICsgICAgICAgMiwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAg
ICAgMywgICAgIDMsICAgICAzLCAgICAgMiwNCiAgICArICAgICAgIDMsICAgICAzLCAgICAgMSwg
ICAgIDEsICAgICAxLCAgICAgMCwgICAgIDEsICAgICA0LCAgICAgMCwgICAgIDENCiAgICArfTsN
CiAgICArDQogICAgKw0KICAgICsjZGVmaW5lIHl5ZXJyb2sgICAgICAgICAoeXllcnJzdGF0dXMg
PSAwKQ0KICAgICsjZGVmaW5lIHl5Y2xlYXJpbiAgICAgICAoeXljaGFyID0gWVlFTVBUWSkNCiAg
ICArI2RlZmluZSBZWUVNUFRZICAgICAgICAgKC0yKQ0KICAgICsjZGVmaW5lIFlZRU9GICAgICAg
ICAgICAwDQogICAgKw0KICAgICsjZGVmaW5lIFlZQUNDRVBUICAgICAgICBnb3RvIHl5YWNjZXB0
bGFiDQogICAgKyNkZWZpbmUgWVlBQk9SVCAgICAgICAgIGdvdG8geXlhYm9ydGxhYg0KICAgICsj
ZGVmaW5lIFlZRVJST1IgICAgICAgICBnb3RvIHl5ZXJyb3JsYWINCiAgICArDQogICAgKw0KICAg
ICsjZGVmaW5lIFlZUkVDT1ZFUklORygpICAoISF5eWVycnN0YXR1cykNCiAgICArDQogICAgKyNk
ZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcDQogICAgK2RvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAg
KyAgICAgIHl5Y2hhciA9IChUb2tlbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcDQogICAgKyAgICAgIHl5bHZhbCA9IChWYWx1ZSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIFlZUE9QU1RBQ0sgKHl5bGVuKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICAgIHl5c3Rh
dGUgPSAqeXlzc3A7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQog
ICAgKyAgICAgIGdvdG8geXliYWNrdXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcDQogICAgKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgZWxzZSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgICB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
DQogICAgKyAgICAgIHl5ZXJyb3IgKFlZXygic3ludGF4IGVycm9yOiBjYW5ub3QgYmFjayB1cCIp
KTsgXA0KICAgICsgICAgICBZWUVSUk9SOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICt3aGlsZSAoMCkNCiAgICAr
DQogICAgKy8qIEVycm9yIHRva2VuIG51bWJlciAqLw0KICAgICsjZGVmaW5lIFlZVEVSUk9SICAg
ICAgICAxDQogICAgKyNkZWZpbmUgWVlFUlJDT0RFICAgICAgIDI1Ng0KICAgICsNCiAgICArDQog
ICAgKw0KICAgICsvKiBFbmFibGUgZGVidWdnaW5nIGlmIHJlcXVlc3RlZC4gICovDQogICAgKyNp
ZiBZWURFQlVHDQogICAgKw0KICAgICsjIGlmbmRlZiBZWUZQUklOVEYNCiAgICArIyAgaW5jbHVk
ZSA8c3RkaW8uaD4gLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLw0KICAgICsjICBk
ZWZpbmUgWVlGUFJJTlRGIGZwcmludGYNCiAgICArIyBlbmRpZg0KICAgICsNCiAgICArIyBkZWZp
bmUgWVlEUFJJTlRGKEFyZ3MpICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICtkbyB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgaWYgKHl5
ZGVidWcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgIFlZRlBS
SU5URiBBcmdzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICt9IHdoaWxlICgw
KQ0KICAgICsNCiAgICArLyogVGhpcyBtYWNybyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29t
cGF0aWJpbGl0eS4gKi8NCiAgICArI2lmbmRlZiBZWV9MT0NBVElPTl9QUklOVA0KICAgICsjIGRl
ZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2MpICgodm9pZCkgMCkNCiAgICArI2VuZGlm
DQogICAgKw0KICAgICsNCiAgICArIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBl
LCBWYWx1ZSwgTG9jYXRpb24pICAgICAgICAgICAgICAgICAgICBcDQogICAgK2RvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXA0KICAgICsgIGlmICh5eWRlYnVnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
DQogICAgKyAgICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgICB5eV9zeW1ib2xfcHJpbnQgKHN0
ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAr
ICAgICAgICAgICAgICAgICAgVHlwZSwgVmFsdWUpOyBcDQogICAgKyAgICAgIFlZRlBSSU5URiAo
c3RkZXJyLCAiXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XA0KICAgICsgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArfSB3aGlsZSAoMCkNCiAgICArDQogICAg
Kw0KICAgICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAg
K3wgUHJpbnQgdGhpcyBzeW1ib2wncyB2YWx1ZSBvbiBZWU9VVFBVVC4gIHwNCiAgICArYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgICsNCiAgICArc3RhdGlj
IHZvaWQNCiAgICAreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5
dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwKQ0KICAgICt7DQogICAgKyAgRklM
RSAqeXlvID0geXlvdXRwdXQ7DQogICAgKyAgWVlVU0UgKHl5byk7DQogICAgKyAgaWYgKCF5eXZh
bHVlcCkNCiAgICArICAgIHJldHVybjsNCiAgICArIyBpZmRlZiBZWVBSSU5UDQogICAgKyAgaWYg
KHl5dHlwZSA8IFlZTlRPS0VOUykNCiAgICArICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251
bVt5eXR5cGVdLCAqeXl2YWx1ZXApOw0KICAgICsjIGVuZGlmDQogICAgKyAgWVlVU0UgKHl5dHlw
ZSk7DQogICAgK30NCiAgICArDQogICAgKw0KICAgICsvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLg0KICAgICt8IFByaW50IHRoaXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfA0KICAg
ICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgICsNCiAgICArc3RhdGlj
IHZvaWQNCiAgICAreXlfc3ltYm9sX3ByaW50IChGSUxFICp5eW91dHB1dCwgaW50IHl5dHlwZSwg
WVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwKQ0KICAgICt7DQogICAgKyAgWVlGUFJJTlRG
ICh5eW91dHB1dCwgIiVzICVzICgiLA0KICAgICsgICAgICAgICAgICAgeXl0eXBlIDwgWVlOVE9L
RU5TID8gInRva2VuIiA6ICJudGVybSIsIHl5dG5hbWVbeXl0eXBlXSk7DQogICAgKw0KICAgICsg
IHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXApOw0KICAg
ICsgIFlZRlBSSU5URiAoeXlvdXRwdXQsICIpIik7DQogICAgK30NCiAgICArDQogICAgKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLg0KICAgICt8IHl5X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBm
cm9tIGl0cyBCT1RUT00gdXAgdG8gaXRzIHwNCiAgICArfCBUT1AgKGluY2x1ZGVkKS4gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQogICAgK2AtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLw0KICAgICsNCiAgICArc3RhdGljIHZvaWQNCiAgICAreXlfc3RhY2tfcHJpbnQgKHl5
dHlwZV9pbnQxNiAqeXlib3R0b20sIHl5dHlwZV9pbnQxNiAqeXl0b3ApDQogICAgK3sNCiAgICAr
ICBZWUZQUklOVEYgKHN0ZGVyciwgIlN0YWNrIG5vdyIpOw0KICAgICsgIGZvciAoOyB5eWJvdHRv
bSA8PSB5eXRvcDsgeXlib3R0b20rKykNCiAgICArICAgIHsNCiAgICArICAgICAgaW50IHl5Ym90
ID0gKnl5Ym90dG9tOw0KICAgICsgICAgICBZWUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsIHl5Ym90
KTsNCiAgICArICAgIH0NCiAgICArICBZWUZQUklOVEYgKHN0ZGVyciwgIlxuIik7DQogICAgK30N
CiAgICArDQogICAgKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcDQogICAgK2RvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAgaWYgKHl5ZGVidWcp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAg
KyAgICB5eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcDQogICAgK30gd2hpbGUgKDApDQogICAgKw0KICAgICsNCiAgICArLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAgK3wgUmVwb3J0
IHRoYXQgdGhlIFlZUlVMRSBpcyBnb2luZyB0byBiZSByZWR1Y2VkLiAgfA0KICAgICtgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICArDQogICAg
K3N0YXRpYyB2b2lkDQogICAgK3l5X3JlZHVjZV9wcmludCAoeXl0eXBlX2ludDE2ICp5eXNzcCwg
WVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUpDQogICAgK3sNCiAgICArICB1bnNpZ25lZCBsb25n
IGludCB5eWxubyA9IHl5cmxpbmVbeXlydWxlXTsNCiAgICArICBpbnQgeXlucmhzID0geXlyMlt5
eXJ1bGVdOw0KICAgICsgIGludCB5eWk7DQogICAgKyAgWVlGUFJJTlRGIChzdGRlcnIsICJSZWR1
Y2luZyBzdGFjayBieSBydWxlICVkIChsaW5lICVsdSk6XG4iLA0KICAgICsgICAgICAgICAgICAg
eXlydWxlIC0gMSwgeXlsbm8pOw0KICAgICsgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVjZWQu
ICAqLw0KICAgICsgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkrKykNCiAgICArICAg
IHsNCiAgICArICAgICAgWVlGUFJJTlRGIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsN
CiAgICArICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIsDQogICAgKyAgICAgICAgICAgICAg
ICAgICAgICAgeXlzdG9zW3l5c3NwW3l5aSArIDEgLSB5eW5yaHNdXSwNCiAgICArICAgICAgICAg
ICAgICAgICAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkNCiAgICArICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQogICAgKyAgICAgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiXG4iKTsNCiAgICArICAgIH0NCiAgICArfQ0KICAgICsNCiAgICAr
IyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpICAgICAgICAgIFwNCiAgICArZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICBpZiAoeXlkZWJ1ZykgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgIHl5X3JlZHVjZV9wcmludCAoeXlzc3As
IHl5dnNwLCBSdWxlKTsgXA0KICAgICt9IHdoaWxlICgwKQ0KICAgICsNCiAgICArLyogTm9uemVy
byBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlzIGxlZnQgdW5pbml0aWFsaXplZCBzbyB0
aGF0DQogICAgKyAgIG11bHRpcGxlIHBhcnNlcnMgY2FuIGNvZXhpc3QuICAqLw0KICAgICtpbnQg
eXlkZWJ1ZzsNCiAgICArI2Vsc2UgLyogIVlZREVCVUcgKi8NCiAgICArIyBkZWZpbmUgWVlEUFJJ
TlRGKEFyZ3MpDQogICAgKyMgZGVmaW5lIFlZX1NZTUJPTF9QUklOVChUaXRsZSwgVHlwZSwgVmFs
dWUsIExvY2F0aW9uKQ0KICAgICsjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkN
CiAgICArIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpDQogICAgKyNlbmRpZiAvKiAhWVlE
RUJVRyAqLw0KICAgICsNCiAgICArDQogICAgKy8qIFlZSU5JVERFUFRIIC0tIGluaXRpYWwgc2l6
ZSBvZiB0aGUgcGFyc2VyJ3Mgc3RhY2tzLiAgKi8NCiAgICArI2lmbmRlZiBZWUlOSVRERVBUSA0K
ICAgICsjIGRlZmluZSBZWUlOSVRERVBUSCAyMDANCiAgICArI2VuZGlmDQogICAgKw0KICAgICsv
KiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNhbiBncm93IHRvIChlZmZl
Y3RpdmUgb25seQ0KICAgICsgICBpZiB0aGUgYnVpbHQtaW4gc3RhY2sgZXh0ZW5zaW9uIG1ldGhv
ZCBpcyB1c2VkKS4NCiAgICArDQogICAgKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxh
cmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmDQogICAgKyAgIFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSA8IFlZU1RBQ0tfQllURVMgKFlZTUFYREVQVEgpDQogICAgKyAgIGV2YWx1YXRlZCB3
aXRoIGluZmluaXRlLXByZWNpc2lvbiBpbnRlZ2VyIGFyaXRobWV0aWMuICAqLw0KICAgICsNCiAg
ICArI2lmbmRlZiBZWU1BWERFUFRIDQogICAgKyMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDANCiAg
ICArI2VuZGlmDQogICAgKw0KICAgICsNCiAgICArI2lmIFlZRVJST1JfVkVSQk9TRQ0KICAgICsN
CiAgICArIyBpZm5kZWYgeXlzdHJsZW4NCiAgICArIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYg
ZGVmaW5lZCBfU1RSSU5HX0gNCiAgICArIyAgIGRlZmluZSB5eXN0cmxlbiBzdHJsZW4NCiAgICAr
IyAgZWxzZQ0KICAgICsvKiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovDQogICAgK3N0
YXRpYyBZWVNJWkVfVA0KICAgICt5eXN0cmxlbiAoY29uc3QgY2hhciAqeXlzdHIpDQogICAgK3sN
CiAgICArICBZWVNJWkVfVCB5eWxlbjsNCiAgICArICBmb3IgKHl5bGVuID0gMDsgeXlzdHJbeXls
ZW5dOyB5eWxlbisrKQ0KICAgICsgICAgY29udGludWU7DQogICAgKyAgcmV0dXJuIHl5bGVuOw0K
ICAgICt9DQogICAgKyMgIGVuZGlmDQogICAgKyMgZW5kaWYNCiAgICArDQogICAgKyMgaWZuZGVm
IHl5c3RwY3B5DQogICAgKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklO
R19IICYmIGRlZmluZWQgX0dOVV9TT1VSQ0UNCiAgICArIyAgIGRlZmluZSB5eXN0cGNweSBzdHBj
cHkNCiAgICArIyAgZWxzZQ0KICAgICsvKiBDb3B5IFlZU1JDIHRvIFlZREVTVCwgcmV0dXJuaW5n
IHRoZSBhZGRyZXNzIG9mIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGluDQogICAgKyAgIFlZREVTVC4g
ICovDQogICAgK3N0YXRpYyBjaGFyICoNCiAgICAreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29u
c3QgY2hhciAqeXlzcmMpDQogICAgK3sNCiAgICArICBjaGFyICp5eWQgPSB5eWRlc3Q7DQogICAg
KyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7DQogICAgKw0KICAgICsgIHdoaWxlICgoKnl5ZCsr
ID0gKnl5cysrKSAhPSAnXDAnKQ0KICAgICsgICAgY29udGludWU7DQogICAgKw0KICAgICsgIHJl
dHVybiB5eWQgLSAxOw0KICAgICt9DQogICAgKyMgIGVuZGlmDQogICAgKyMgZW5kaWYNCiAgICAr
DQogICAgKyMgaWZuZGVmIHl5dG5hbWVycg0KICAgICsvKiBDb3B5IHRvIFlZUkVTIHRoZSBjb250
ZW50cyBvZiBZWVNUUiBhZnRlciBzdHJpcHBpbmcgYXdheSB1bm5lY2Vzc2FyeQ0KICAgICsgICBx
dW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJyb3Iu
ICBUaGUNCiAgICArICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3RpbmcgaXMgdW5uZWNl
c3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcNCiAgICArICAgY29udGFpbnMgYW4gYXBvc3Ryb3BoZSwg
YSBjb21tYSwgb3IgYmFja3NsYXNoIChvdGhlciB0aGFuDQogICAgKyAgIGJhY2tzbGFzaC1iYWNr
c2xhc2gpLiAgWVlTVFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMNCiAgICAr
ICAgbnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQg
dGhlIHJlc3VsdA0KICAgICsgICB3b3VsZCBoYXZlIGJlZW4uICAqLw0KICAgICtzdGF0aWMgWVlT
SVpFX1QNCiAgICAreXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpDQog
ICAgK3sNCiAgICArICBpZiAoKnl5c3RyID09ICciJykNCiAgICArICAgIHsNCiAgICArICAgICAg
WVlTSVpFX1QgeXluID0gMDsNCiAgICArICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7DQog
ICAgKw0KICAgICsgICAgICBmb3IgKDs7KQ0KICAgICsgICAgICAgIHN3aXRjaCAoKisreXlwKQ0K
ICAgICsgICAgICAgICAgew0KICAgICsgICAgICAgICAgY2FzZSAnXCcnOg0KICAgICsgICAgICAg
ICAgY2FzZSAnLCc6DQogICAgKyAgICAgICAgICAgIGdvdG8gZG9fbm90X3N0cmlwX3F1b3RlczsN
CiAgICArDQogICAgKyAgICAgICAgICBjYXNlICdcXCc6DQogICAgKyAgICAgICAgICAgIGlmICgq
Kyt5eXAgIT0gJ1xcJykNCiAgICArICAgICAgICAgICAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90
ZXM7DQogICAgKyAgICAgICAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovDQogICAgKyAgICAgICAg
ICBkZWZhdWx0Og0KICAgICsgICAgICAgICAgICBpZiAoeXlyZXMpDQogICAgKyAgICAgICAgICAg
ICAgeXlyZXNbeXluXSA9ICp5eXA7DQogICAgKyAgICAgICAgICAgIHl5bisrOw0KICAgICsgICAg
ICAgICAgICBicmVhazsNCiAgICArDQogICAgKyAgICAgICAgICBjYXNlICciJzoNCiAgICArICAg
ICAgICAgICAgaWYgKHl5cmVzKQ0KICAgICsgICAgICAgICAgICAgIHl5cmVzW3l5bl0gPSAnXDAn
Ow0KICAgICsgICAgICAgICAgICByZXR1cm4geXluOw0KICAgICsgICAgICAgICAgfQ0KICAgICsg
ICAgZG9fbm90X3N0cmlwX3F1b3RlczogOw0KICAgICsgICAgfQ0KICAgICsNCiAgICArICBpZiAo
ISB5eXJlcykNCiAgICArICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOw0KICAgICsNCiAgICAr
ICByZXR1cm4geXlzdHBjcHkgKHl5cmVzLCB5eXN0cikgLSB5eXJlczsNCiAgICArfQ0KICAgICsj
IGVuZGlmDQogICAgKw0KICAgICsvKiBDb3B5IGludG8gKllZTVNHLCB3aGljaCBpcyBvZiBzaXpl
ICpZWU1TR19BTExPQywgYW4gZXJyb3IgbWVzc2FnZQ0KICAgICsgICBhYm91dCB0aGUgdW5leHBl
Y3RlZCB0b2tlbiBZWVRPS0VOIGZvciB0aGUgc3RhdGUgc3RhY2sgd2hvc2UgdG9wIGlzDQogICAg
KyAgIFlZU1NQLg0KICAgICsNCiAgICArICAgUmV0dXJuIDAgaWYgKllZTVNHIHdhcyBzdWNjZXNz
ZnVsbHkgd3JpdHRlbi4gIFJldHVybiAxIGlmICpZWU1TRyBpcw0KICAgICsgICBub3QgbGFyZ2Ug
ZW5vdWdoIHRvIGhvbGQgdGhlIG1lc3NhZ2UuICBJbiB0aGF0IGNhc2UsIGFsc28gc2V0DQogICAg
KyAgICpZWU1TR19BTExPQyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLiAgUmV0dXJu
IDIgaWYgdGhlDQogICAgKyAgIHJlcXVpcmVkIG51bWJlciBvZiBieXRlcyBpcyB0b28gbGFyZ2Ug
dG8gc3RvcmUuICAqLw0KICAgICtzdGF0aWMgaW50DQogICAgK3l5c3ludGF4X2Vycm9yIChZWVNJ
WkVfVCAqeXltc2dfYWxsb2MsIGNoYXIgKip5eW1zZywNCiAgICArICAgICAgICAgICAgICAgIHl5
dHlwZV9pbnQxNiAqeXlzc3AsIGludCB5eXRva2VuKQ0KICAgICt7DQogICAgKyAgWVlTSVpFX1Qg
eXlzaXplMCA9IHl5dG5hbWVyciAoWVlfTlVMTFBUUiwgeXl0bmFtZVt5eXRva2VuXSk7DQogICAg
KyAgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsNCiAgICArICBlbnVtIHsgWVlFUlJPUl9WRVJC
T1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsNCiAgICArICAvKiBJbnRlcm5hdGlvbmFsaXplZCBmb3Jt
YXQgc3RyaW5nLiAqLw0KICAgICsgIGNvbnN0IGNoYXIgKnl5Zm9ybWF0ID0gWVlfTlVMTFBUUjsN
CiAgICArICAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICovDQogICAgKyAgY2hhciBjb25zdCAq
eXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07DQogICAgKyAgLyogTnVtYmVyIG9m
IHJlcG9ydGVkIHRva2VucyAob25lIGZvciB0aGUgInVuZXhwZWN0ZWQiLCBvbmUgcGVyDQogICAg
KyAgICAgImV4cGVjdGVkIikuICovDQogICAgKyAgaW50IHl5Y291bnQgPSAwOw0KICAgICsNCiAg
ICArICAvKiBUaGVyZSBhcmUgbWFueSBwb3NzaWJpbGl0aWVzIGhlcmUgdG8gY29uc2lkZXI6DQog
ICAgKyAgICAgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVm
YXVsdCBhY3Rpb24sIHRoZW4NCiAgICArICAgICAgIHRoZSBvbmx5IHdheSB0aGlzIGZ1bmN0aW9u
IHdhcyBpbnZva2VkIGlzIGlmIHRoZSBkZWZhdWx0IGFjdGlvbg0KICAgICsgICAgICAgaXMgYW4g
ZXJyb3IgYWN0aW9uLiAgSW4gdGhhdCBjYXNlLCBkb24ndCBjaGVjayBmb3IgZXhwZWN0ZWQNCiAg
ICArICAgICAgIHRva2VucyBiZWNhdXNlIHRoZXJlIGFyZSBub25lLg0KICAgICsgICAgIC0gVGhl
IG9ubHkgd2F5IHRoZXJlIGNhbiBiZSBubyBsb29rYWhlYWQgcHJlc2VudCAoaW4geXljaGFyKSBp
cyBpZg0KICAgICsgICAgICAgdGhpcyBzdGF0ZSBpcyBhIGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBh
IGRlZmF1bHQgYWN0aW9uLiAgVGh1cywNCiAgICArICAgICAgIGRldGVjdGluZyB0aGUgYWJzZW5j
ZSBvZiBhIGxvb2thaGVhZCBpcyBzdWZmaWNpZW50IHRvIGRldGVybWluZQ0KICAgICsgICAgICAg
dGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVkIG9yIGV4cGVjdGVkIHRva2VuIHRvIHJlcG9ydC4g
IEluIHRoYXQNCiAgICArICAgICAgIGNhc2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXgg
ZXJyb3IiLg0KICAgICsgICAgIC0gRG9uJ3QgYXNzdW1lIHRoZXJlIGlzbid0IGEgbG9va2FoZWFk
IGp1c3QgYmVjYXVzZSB0aGlzIHN0YXRlIGlzIGENCiAgICArICAgICAgIGNvbnNpc3RlbnQgc3Rh
dGUgd2l0aCBhIGRlZmF1bHQgYWN0aW9uLiAgVGhlcmUgbWlnaHQgaGF2ZSBiZWVuIGENCiAgICAr
ICAgICAgIHByZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRo
IGEgbm9uLWRlZmF1bHQNCiAgICArICAgICAgIGFjdGlvbiwgb3IgdXNlciBzZW1hbnRpYyBhY3Rp
b24gdGhhdCBtYW5pcHVsYXRlZCB5eWNoYXIuDQogICAgKyAgICAgLSBPZiBjb3Vyc2UsIHRoZSBl
eHBlY3RlZCB0b2tlbiBsaXN0IGRlcGVuZHMgb24gc3RhdGVzIHRvIGhhdmUNCiAgICArICAgICAg
IGNvcnJlY3QgbG9va2FoZWFkIGluZm9ybWF0aW9uLCBhbmQgaXQgZGVwZW5kcyBvbiB0aGUgcGFy
c2VyIG5vdA0KICAgICsgICAgICAgdG8gcGVyZm9ybSBleHRyYSByZWR1Y3Rpb25zIGFmdGVyIGZl
dGNoaW5nIGEgbG9va2FoZWFkIGZyb20gdGhlDQogICAgKyAgICAgICBzY2FubmVyIGFuZCBiZWZv
cmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVycm9yLiAgVGh1cywgc3RhdGUgbWVyZ2luZw0KICAgICsg
ICAgICAgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVmYXVsdCByZWR1Y3Rpb25zIGNvcnJ1cHQg
dGhlIGV4cGVjdGVkDQogICAgKyAgICAgICB0b2tlbiBsaXN0LiAgSG93ZXZlciwgdGhlIGxpc3Qg
aXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgNCiAgICArICAgICAgIG9uZSBleGNlcHRp
b246IGl0IHdpbGwgc3RpbGwgY29udGFpbiBhbnkgdG9rZW4gdGhhdCB3aWxsIG5vdCBiZQ0KICAg
ICsgICAgICAgYWNjZXB0ZWQgZHVlIHRvIGFuIGVycm9yIGFjdGlvbiBpbiBhIGxhdGVyIHN0YXRl
Lg0KICAgICsgICovDQogICAgKyAgaWYgKHl5dG9rZW4gIT0gWVlFTVBUWSkNCiAgICArICAgIHsN
CiAgICArICAgICAgaW50IHl5biA9IHl5cGFjdFsqeXlzc3BdOw0KICAgICsgICAgICB5eWFyZ1t5
eWNvdW50KytdID0geXl0bmFtZVt5eXRva2VuXTsNCiAgICArICAgICAgaWYgKCF5eXBhY3RfdmFs
dWVfaXNfZGVmYXVsdCAoeXluKSkNCiAgICArICAgICAgICB7DQogICAgKyAgICAgICAgICAvKiBT
dGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGlu
DQogICAgKyAgICAgICAgICAgICBZWUNIRUNLLiAgSW4gb3RoZXIgd29yZHMsIHNraXAgdGhlIGZp
cnN0IC1ZWU4gYWN0aW9ucyBmb3INCiAgICArICAgICAgICAgICAgIHRoaXMgc3RhdGUgYmVjYXVz
ZSB0aGV5IGFyZSBkZWZhdWx0IGFjdGlvbnMuICAqLw0KICAgICsgICAgICAgICAgaW50IHl5eGJl
Z2luID0geXluIDwgMCA/IC15eW4gOiAwOw0KICAgICsgICAgICAgICAgLyogU3RheSB3aXRoaW4g
Ym91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS4gICovDQogICAgKyAgICAgICAgICBp
bnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biArIDE7DQogICAgKyAgICAgICAgICBpbnQgeXl4
ZW5kID0geXljaGVja2xpbSA8IFlZTlRPS0VOUyA/IHl5Y2hlY2tsaW0gOiBZWU5UT0tFTlM7DQog
ICAgKyAgICAgICAgICBpbnQgeXl4Ow0KICAgICsNCiAgICArICAgICAgICAgIGZvciAoeXl4ID0g
eXl4YmVnaW47IHl5eCA8IHl5eGVuZDsgKyt5eXgpDQogICAgKyAgICAgICAgICAgIGlmICh5eWNo
ZWNrW3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUg0KICAgICsgICAgICAgICAg
ICAgICAgJiYgIXl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5dGFibGVbeXl4ICsgeXluXSkpDQog
ICAgKyAgICAgICAgICAgICAgew0KICAgICsgICAgICAgICAgICAgICAgaWYgKHl5Y291bnQgPT0g
WVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkNCiAgICArICAgICAgICAgICAgICAgICAgew0K
ICAgICsgICAgICAgICAgICAgICAgICAgIHl5Y291bnQgPSAxOw0KICAgICsgICAgICAgICAgICAg
ICAgICAgIHl5c2l6ZSA9IHl5c2l6ZTA7DQogICAgKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQogICAgKyAgICAgICAgICAgICAgICAgIH0NCiAgICArICAgICAgICAgICAgICAgIHl5YXJnW3l5
Y291bnQrK10gPSB5eXRuYW1lW3l5eF07DQogICAgKyAgICAgICAgICAgICAgICB7DQogICAgKyAg
ICAgICAgICAgICAgICAgIFlZU0laRV9UIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKFlZ
X05VTExQVFIsIHl5dG5hbWVbeXl4XSk7DQogICAgKyAgICAgICAgICAgICAgICAgIGlmICghICh5
eXNpemUgPD0geXlzaXplMQ0KICAgICsgICAgICAgICAgICAgICAgICAgICAgICAgJiYgeXlzaXpl
MSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQ0KICAgICsgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAyOw0KICAgICsgICAgICAgICAgICAgICAgICB5eXNpemUgPSB5eXNpemUxOw0KICAgICsg
ICAgICAgICAgICAgICAgfQ0KICAgICsgICAgICAgICAgICAgIH0NCiAgICArICAgICAgICB9DQog
ICAgKyAgICB9DQogICAgKw0KICAgICsgIHN3aXRjaCAoeXljb3VudCkNCiAgICArICAgIHsNCiAg
ICArIyBkZWZpbmUgWVlDQVNFXyhOLCBTKSAgICAgICAgICAgICAgICAgICAgICBcDQogICAgKyAg
ICAgIGNhc2UgTjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICsgICAgICAg
IHl5Zm9ybWF0ID0gUzsgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICArICAgICAgYnJlYWsN
CiAgICArICAgICAgWVlDQVNFXygwLCBZWV8oInN5bnRheCBlcnJvciIpKTsNCiAgICArICAgICAg
WVlDQVNFXygxLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcyIpKTsNCiAgICArICAg
ICAgWVlDQVNFXygyLCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5n
ICVzIikpOw0KICAgICsgICAgICBZWUNBU0VfKDMsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVj
dGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKSk7DQogICAgKyAgICAgIFlZQ0FTRV8oNCwgWVlf
KCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIp
KTsNCiAgICArICAgICAgWVlDQVNFXyg1LCBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAl
cywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVzIikpOw0KICAgICsjIHVuZGVmIFlZQ0FT
RV8NCiAgICArICAgIH0NCiAgICArDQogICAgKyAgew0KICAgICsgICAgWVlTSVpFX1QgeXlzaXpl
MSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7DQogICAgKyAgICBpZiAoISAoeXlzaXpl
IDw9IHl5c2l6ZTEgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQ0KICAgICsg
ICAgICByZXR1cm4gMjsNCiAgICArICAgIHl5c2l6ZSA9IHl5c2l6ZTE7DQogICAgKyAgfQ0KICAg
ICsNCiAgICArICBpZiAoKnl5bXNnX2FsbG9jIDwgeXlzaXplKQ0KICAgICsgICAgew0KICAgICsg
ICAgICAqeXltc2dfYWxsb2MgPSAyICogeXlzaXplOw0KICAgICsgICAgICBpZiAoISAoeXlzaXpl
IDw9ICp5eW1zZ19hbGxvYw0KICAgICsgICAgICAgICAgICAgJiYgKnl5bXNnX2FsbG9jIDw9IFlZ
U1RBQ0tfQUxMT0NfTUFYSU1VTSkpDQogICAgKyAgICAgICAgKnl5bXNnX2FsbG9jID0gWVlTVEFD
S19BTExPQ19NQVhJTVVNOw0KICAgICsgICAgICByZXR1cm4gMTsNCiAgICArICAgIH0NCiAgICAr
DQogICAgKyAgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBpbmZyaW5nZXMgb24gdGhlIHVzZXIn
cyBuYW1lIHNwYWNlLg0KICAgICsgICAgIERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2
ZW4gaWYgdGhlIHRyYW5zbGF0aW9uDQogICAgKyAgICAgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0
aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8NCiAgICArICB7DQogICAgKyAgICBjaGFyICp5
eXAgPSAqeXltc2c7DQogICAgKyAgICBpbnQgeXlpID0gMDsNCiAgICArICAgIHdoaWxlICgoKnl5
cCA9ICp5eWZvcm1hdCkgIT0gJ1wwJykNCiAgICArICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5
Zm9ybWF0WzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQ0KICAgICsgICAgICAgIHsNCiAgICAr
ICAgICAgICAgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsNCiAgICArICAg
ICAgICAgIHl5Zm9ybWF0ICs9IDI7DQogICAgKyAgICAgICAgfQ0KICAgICsgICAgICBlbHNlDQog
ICAgKyAgICAgICAgew0KICAgICsgICAgICAgICAgeXlwKys7DQogICAgKyAgICAgICAgICB5eWZv
cm1hdCsrOw0KICAgICsgICAgICAgIH0NCiAgICArICB9DQogICAgKyAgcmV0dXJuIDA7DQogICAg
K30NCiAgICArI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLw0KICAgICsNCiAgICArLyotLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICArfCBSZWxl
YXNlIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwNCiAgICArYC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICArDQogICAg
K3N0YXRpYyB2b2lkDQogICAgK3l5ZGVzdHJ1Y3QgKGNvbnN0IGNoYXIgKnl5bXNnLCBpbnQgeXl0
eXBlLCBZWVNUWVBFICp5eXZhbHVlcCkNCiAgICArew0KICAgICsgIFlZVVNFICh5eXZhbHVlcCk7
DQogICAgKyAgaWYgKCF5eW1zZykNCiAgICArICAgIHl5bXNnID0gIkRlbGV0aW5nIjsNCiAgICAr
ICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7
DQogICAgKw0KICAgICsgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0JFR0lODQogICAg
KyAgc3dpdGNoICh5eXR5cGUpDQogICAgKyAgICB7DQogICAgKyAgICAgICAgICBjYXNlIDYyOiAv
KiBjaG9pY2VfZW50cnkgICovDQogICAgKw0KICAgICsgICAgICB7DQogICAgKwlmcHJpbnRmKHN0
ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsDQog
ICAgKwkJKCgqeXl2YWx1ZXApLm1lbnUpLT5maWxlLT5uYW1lLCAoKCp5eXZhbHVlcCkubWVudSkt
PmxpbmVubyk7DQogICAgKwlpZiAoY3VycmVudF9tZW51ID09ICgoKnl5dmFsdWVwKS5tZW51KSkN
CiAgICArCQltZW51X2VuZF9tZW51KCk7DQogICAgK30NCiAgICArDQogICAgKyAgICAgICAgYnJl
YWs7DQogICAgKw0KICAgICsgICAgY2FzZSA2ODogLyogaWZfZW50cnkgICovDQogICAgKw0KICAg
ICsgICAgICB7DQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiBtaXNzaW5nIGVuZCBzdGF0
ZW1lbnQgZm9yIHRoaXMgZW50cnlcbiIsDQogICAgKwkJKCgqeXl2YWx1ZXApLm1lbnUpLT5maWxl
LT5uYW1lLCAoKCp5eXZhbHVlcCkubWVudSktPmxpbmVubyk7DQogICAgKwlpZiAoY3VycmVudF9t
ZW51ID09ICgoKnl5dmFsdWVwKS5tZW51KSkNCiAgICArCQltZW51X2VuZF9tZW51KCk7DQogICAg
K30NCiAgICArDQogICAgKyAgICAgICAgYnJlYWs7DQogICAgKw0KICAgICsgICAgY2FzZSA3Mzog
LyogbWVudV9lbnRyeSAgKi8NCiAgICArDQogICAgKyAgICAgIHsNCiAgICArCWZwcmludGYoc3Rk
ZXJyLCAiJXM6JWQ6IG1pc3NpbmcgZW5kIHN0YXRlbWVudCBmb3IgdGhpcyBlbnRyeVxuIiwNCiAg
ICArCQkoKCp5eXZhbHVlcCkubWVudSktPmZpbGUtPm5hbWUsICgoKnl5dmFsdWVwKS5tZW51KS0+
bGluZW5vKTsNCiAgICArCWlmIChjdXJyZW50X21lbnUgPT0gKCgqeXl2YWx1ZXApLm1lbnUpKQ0K
ICAgICsJCW1lbnVfZW5kX21lbnUoKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgICAgICBicmVh
azsNCiAgICArDQogICAgKw0KICAgICsgICAgICBkZWZhdWx0Og0KICAgICsgICAgICAgIGJyZWFr
Ow0KICAgICsgICAgfQ0KICAgICsgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORA0K
ICAgICt9DQogICAgKw0KICAgICsNCiAgICArDQogICAgKw0KICAgICsvKiBUaGUgbG9va2FoZWFk
IHN5bWJvbC4gICovDQogICAgK2ludCB5eWNoYXI7DQogICAgKw0KICAgICsvKiBUaGUgc2VtYW50
aWMgdmFsdWUgb2YgdGhlIGxvb2thaGVhZCBzeW1ib2wuICAqLw0KICAgICtZWVNUWVBFIHl5bHZh
bDsNCiAgICArLyogTnVtYmVyIG9mIHN5bnRheCBlcnJvcnMgc28gZmFyLiAgKi8NCiAgICAraW50
IHl5bmVycnM7DQogICAgKw0KICAgICsNCiAgICArLyotLS0tLS0tLS0tLg0KICAgICt8IHl5cGFy
c2UuICB8DQogICAgK2AtLS0tLS0tLS0tKi8NCiAgICArDQogICAgK2ludA0KICAgICt5eXBhcnNl
ICh2b2lkKQ0KICAgICt7DQogICAgKyAgICBpbnQgeXlzdGF0ZTsNCiAgICArICAgIC8qIE51bWJl
ciBvZiB0b2tlbnMgdG8gc2hpZnQgYmVmb3JlIGVycm9yIG1lc3NhZ2VzIGVuYWJsZWQuICAqLw0K
ICAgICsgICAgaW50IHl5ZXJyc3RhdHVzOw0KICAgICsNCiAgICArICAgIC8qIFRoZSBzdGFja3Mg
YW5kIHRoZWlyIHRvb2xzOg0KICAgICsgICAgICAgJ3l5c3MnOiByZWxhdGVkIHRvIHN0YXRlcy4N
CiAgICArICAgICAgICd5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMuDQogICAgKw0K
ICAgICsgICAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJvdWdoIHNlcGFyYXRlIHBvaW50ZXJz
LCB0byBhbGxvdyB5eW92ZXJmbG93DQogICAgKyAgICAgICB0byByZWFsbG9jYXRlIHRoZW0gZWxz
ZXdoZXJlLiAgKi8NCiAgICArDQogICAgKyAgICAvKiBUaGUgc3RhdGUgc3RhY2suICAqLw0KICAg
ICsgICAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsNCiAgICArICAgIHl5dHlwZV9p
bnQxNiAqeXlzczsNCiAgICArICAgIHl5dHlwZV9pbnQxNiAqeXlzc3A7DQogICAgKw0KICAgICsg
ICAgLyogVGhlIHNlbWFudGljIHZhbHVlIHN0YWNrLiAgKi8NCiAgICArICAgIFlZU1RZUEUgeXl2
c2FbWVlJTklUREVQVEhdOw0KICAgICsgICAgWVlTVFlQRSAqeXl2czsNCiAgICArICAgIFlZU1RZ
UEUgKnl5dnNwOw0KICAgICsNCiAgICArICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOw0KICAgICsN
CiAgICArICBpbnQgeXluOw0KICAgICsgIGludCB5eXJlc3VsdDsNCiAgICArICAvKiBMb29rYWhl
YWQgdG9rZW4gYXMgYW4gaW50ZXJuYWwgKHRyYW5zbGF0ZWQpIHRva2VuIG51bWJlci4gICovDQog
ICAgKyAgaW50IHl5dG9rZW4gPSAwOw0KICAgICsgIC8qIFRoZSB2YXJpYWJsZXMgdXNlZCB0byBy
ZXR1cm4gc2VtYW50aWMgdmFsdWUgYW5kIGxvY2F0aW9uIGZyb20gdGhlDQogICAgKyAgICAgYWN0
aW9uIHJvdXRpbmVzLiAgKi8NCiAgICArICBZWVNUWVBFIHl5dmFsOw0KICAgICsNCiAgICArI2lm
IFlZRVJST1JfVkVSQk9TRQ0KICAgICsgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFu
ZCBpdHMgYWxsb2NhdGVkIHNpemUuICAqLw0KICAgICsgIGNoYXIgeXltc2didWZbMTI4XTsNCiAg
ICArICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOw0KICAgICsgIFlZU0laRV9UIHl5bXNnX2FsbG9j
ID0gc2l6ZW9mIHl5bXNnYnVmOw0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNkZWZpbmUgWVlQ
T1BTVEFDSyhOKSAgICh5eXZzcCAtPSAoTiksIHl5c3NwIC09IChOKSkNCiAgICArDQogICAgKyAg
LyogVGhlIG51bWJlciBvZiBzeW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4N
CiAgICArICAgICBLZWVwIHRvIHplcm8gd2hlbiBubyBzeW1ib2wgc2hvdWxkIGJlIHBvcHBlZC4g
ICovDQogICAgKyAgaW50IHl5bGVuID0gMDsNCiAgICArDQogICAgKyAgeXlzc3AgPSB5eXNzID0g
eXlzc2E7DQogICAgKyAgeXl2c3AgPSB5eXZzID0geXl2c2E7DQogICAgKyAgeXlzdGFja3NpemUg
PSBZWUlOSVRERVBUSDsNCiAgICArDQogICAgKyAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhcnRp
bmcgcGFyc2VcbiIpKTsNCiAgICArDQogICAgKyAgeXlzdGF0ZSA9IDA7DQogICAgKyAgeXllcnJz
dGF0dXMgPSAwOw0KICAgICsgIHl5bmVycnMgPSAwOw0KICAgICsgIHl5Y2hhciA9IFlZRU1QVFk7
IC8qIENhdXNlIGEgdG9rZW4gdG8gYmUgcmVhZC4gICovDQogICAgKyAgZ290byB5eXNldHN0YXRl
Ow0KICAgICsNCiAgICArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0uDQogICAgK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0
YXRlLCB3aGljaCBpcyBmb3VuZCBpbiB5eXN0YXRlLiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICArIHl5
bmV3c3RhdGU6DQogICAgKyAgLyogSW4gYWxsIGNhc2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhl
IHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MNCiAgICArICAgICBoYXZlIGp1c3QgYmVlbiBwdXNo
ZWQuICBTbyBwdXNoaW5nIGEgc3RhdGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8NCiAgICAr
ICB5eXNzcCsrOw0KICAgICsNCiAgICArIHl5c2V0c3RhdGU6DQogICAgKyAgKnl5c3NwID0geXlz
dGF0ZTsNCiAgICArDQogICAgKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3Ap
DQogICAgKyAgICB7DQogICAgKyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2Yg
dGhlIHRocmVlIHN0YWNrcywgaW4gZWxlbWVudHMuICAqLw0KICAgICsgICAgICBZWVNJWkVfVCB5
eXNpemUgPSB5eXNzcCAtIHl5c3MgKyAxOw0KICAgICsNCiAgICArI2lmZGVmIHl5b3ZlcmZsb3cN
CiAgICArICAgICAgew0KICAgICsgICAgICAgIC8qIEdpdmUgdXNlciBhIGNoYW5jZSB0byByZWFs
bG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YNCiAgICArICAgICAgICAgICB0aGVzZSBz
byB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvDQogICAgKyAgICAg
ICAgICAgbWVtb3J5LiAgKi8NCiAgICArICAgICAgICBZWVNUWVBFICp5eXZzMSA9IHl5dnM7DQog
ICAgKyAgICAgICAgeXl0eXBlX2ludDE2ICp5eXNzMSA9IHl5c3M7DQogICAgKw0KICAgICsgICAg
ICAgIC8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxvd2VkIGJ5IHRoZSBzaXpl
IG9mIHRoZQ0KICAgICsgICAgICAgICAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGluIGJ5
dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGENCiAgICArICAgICAgICAgICBjb25kaXRpb25hbCBhcm91
bmQganVzdCB0aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0DQogICAgKyAgICAgICAg
ICAgYmUgdW5kZWZpbmVkIGlmIHl5b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovDQogICAgKyAgICAg
ICAgeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVzdGVkIiksDQogICAgKyAgICAgICAgICAg
ICAgICAgICAgJnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksDQogICAgKyAgICAgICAg
ICAgICAgICAgICAgJnl5dnMxLCB5eXNpemUgKiBzaXplb2YgKCp5eXZzcCksDQogICAgKyAgICAg
ICAgICAgICAgICAgICAgJnl5c3RhY2tzaXplKTsNCiAgICArDQogICAgKyAgICAgICAgeXlzcyA9
IHl5c3MxOw0KICAgICsgICAgICAgIHl5dnMgPSB5eXZzMTsNCiAgICArICAgICAgfQ0KICAgICsj
ZWxzZSAvKiBubyB5eW92ZXJmbG93ICovDQogICAgKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUN
CiAgICArICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsNCiAgICArIyBlbHNlDQogICAgKyAgICAg
IC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXkuICAqLw0KICAgICsgICAgICBpZiAoWVlN
QVhERVBUSCA8PSB5eXN0YWNrc2l6ZSkNCiAgICArICAgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFi
Ow0KICAgICsgICAgICB5eXN0YWNrc2l6ZSAqPSAyOw0KICAgICsgICAgICBpZiAoWVlNQVhERVBU
SCA8IHl5c3RhY2tzaXplKQ0KICAgICsgICAgICAgIHl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsN
CiAgICArDQogICAgKyAgICAgIHsNCiAgICArICAgICAgICB5eXR5cGVfaW50MTYgKnl5c3MxID0g
eXlzczsNCiAgICArICAgICAgICB1bmlvbiB5eWFsbG9jICp5eXB0ciA9DQogICAgKyAgICAgICAg
ICAodW5pb24geXlhbGxvYyAqKSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNr
c2l6ZSkpOw0KICAgICsgICAgICAgIGlmICghIHl5cHRyKQ0KICAgICsgICAgICAgICAgZ290byB5
eWV4aGF1c3RlZGxhYjsNCiAgICArICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXNzX2FsbG9j
LCB5eXNzKTsNCiAgICArICAgICAgICBZWVNUQUNLX1JFTE9DQVRFICh5eXZzX2FsbG9jLCB5eXZz
KTsNCiAgICArIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQ0KICAgICsgICAgICAgIGlmICh5eXNz
MSAhPSB5eXNzYSkNCiAgICArICAgICAgICAgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOw0KICAgICsg
ICAgICB9DQogICAgKyMgZW5kaWYNCiAgICArI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8NCiAg
ICArDQogICAgKyAgICAgIHl5c3NwID0geXlzcyArIHl5c2l6ZSAtIDE7DQogICAgKyAgICAgIHl5
dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7DQogICAgKw0KICAgICsgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNlZCB0byAlbHVcbiIsDQogICAgKyAgICAgICAgICAg
ICAgICAgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsNCiAgICArDQogICAgKyAg
ICAgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQ0KICAgICsgICAgICAgIFlZ
QUJPUlQ7DQogICAgKyAgICB9DQogICAgKw0KICAgICsgIFlZRFBSSU5URiAoKHN0ZGVyciwgIkVu
dGVyaW5nIHN0YXRlICVkXG4iLCB5eXN0YXRlKSk7DQogICAgKw0KICAgICsgIGlmICh5eXN0YXRl
ID09IFlZRklOQUwpDQogICAgKyAgICBZWUFDQ0VQVDsNCiAgICArDQogICAgKyAgZ290byB5eWJh
Y2t1cDsNCiAgICArDQogICAgKy8qLS0tLS0tLS0tLS0uDQogICAgK3wgeXliYWNrdXAuICB8DQog
ICAgK2AtLS0tLS0tLS0tLSovDQogICAgK3l5YmFja3VwOg0KICAgICsNCiAgICArICAvKiBEbyBh
cHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRoZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhDQog
ICAgKyAgICAgbG9va2FoZWFkIHRva2VuIGlmIHdlIG5lZWQgb25lIGFuZCBkb24ndCBhbHJlYWR5
IGhhdmUgb25lLiAgKi8NCiAgICArDQogICAgKyAgLyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0
IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxvb2thaGVhZCB0b2tlbi4gICovDQogICAgKyAg
eXluID0geXlwYWN0W3l5c3RhdGVdOw0KICAgICsgIGlmICh5eXBhY3RfdmFsdWVfaXNfZGVmYXVs
dCAoeXluKSkNCiAgICArICAgIGdvdG8geXlkZWZhdWx0Ow0KICAgICsNCiAgICArICAvKiBOb3Qg
a25vd24gPT4gZ2V0IGEgbG9va2FoZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUu
ICAqLw0KICAgICsNCiAgICArICAvKiBZWUNIQVIgaXMgZWl0aGVyIFlZRU1QVFkgb3IgWVlFT0Yg
b3IgYSB2YWxpZCBsb29rYWhlYWQgc3ltYm9sLiAgKi8NCiAgICArICBpZiAoeXljaGFyID09IFlZ
RU1QVFkpDQogICAgKyAgICB7DQogICAgKyAgICAgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlJlYWRp
bmcgYSB0b2tlbjogIikpOw0KICAgICsgICAgICB5eWNoYXIgPSB5eWxleCAoKTsNCiAgICArICAg
IH0NCiAgICArDQogICAgKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikNCiAgICArICAgIHsNCiAgICAr
ICAgICAgeXljaGFyID0geXl0b2tlbiA9IFlZRU9GOw0KICAgICsgICAgICBZWURQUklOVEYgKChz
dGRlcnIsICJOb3cgYXQgZW5kIG9mIGlucHV0LlxuIikpOw0KICAgICsgICAgfQ0KICAgICsgIGVs
c2UNCiAgICArICAgIHsNCiAgICArICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIp
Ow0KICAgICsgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0b2tlbiwg
Jnl5bHZhbCwgJnl5bGxvYyk7DQogICAgKyAgICB9DQogICAgKw0KICAgICsgIC8qIElmIHRoZSBw
cm9wZXIgYWN0aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bw0K
ICAgICsgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovDQogICAgKyAg
eXluICs9IHl5dG9rZW47DQogICAgKyAgaWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5
Y2hlY2tbeXluXSAhPSB5eXRva2VuKQ0KICAgICsgICAgZ290byB5eWRlZmF1bHQ7DQogICAgKyAg
eXluID0geXl0YWJsZVt5eW5dOw0KICAgICsgIGlmICh5eW4gPD0gMCkNCiAgICArICAgIHsNCiAg
ICArICAgICAgaWYgKHl5dGFibGVfdmFsdWVfaXNfZXJyb3IgKHl5bikpDQogICAgKyAgICAgICAg
Z290byB5eWVycmxhYjsNCiAgICArICAgICAgeXluID0gLXl5bjsNCiAgICArICAgICAgZ290byB5
eXJlZHVjZTsNCiAgICArICAgIH0NCiAgICArDQogICAgKyAgLyogQ291bnQgdG9rZW5zIHNoaWZ0
ZWQgc2luY2UgZXJyb3I7IGFmdGVyIHRocmVlLCB0dXJuIG9mZiBlcnJvcg0KICAgICsgICAgIHN0
YXR1cy4gICovDQogICAgKyAgaWYgKHl5ZXJyc3RhdHVzKQ0KICAgICsgICAgeXllcnJzdGF0dXMt
LTsNCiAgICArDQogICAgKyAgLyogU2hpZnQgdGhlIGxvb2thaGVhZCB0b2tlbi4gICovDQogICAg
KyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9j
KTsNCiAgICArDQogICAgKyAgLyogRGlzY2FyZCB0aGUgc2hpZnRlZCB0b2tlbi4gICovDQogICAg
KyAgeXljaGFyID0gWVlFTVBUWTsNCiAgICArDQogICAgKyAgeXlzdGF0ZSA9IHl5bjsNCiAgICAr
ICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9CRUdJTg0KICAgICsgICorK3l5dnNwID0g
eXlsdmFsOw0KICAgICsgIFlZX0lHTk9SRV9NQVlCRV9VTklOSVRJQUxJWkVEX0VORA0KICAgICsN
CiAgICArICBnb3RvIHl5bmV3c3RhdGU7DQogICAgKw0KICAgICsNCiAgICArLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4NCiAgICAr
fCB5eWRlZmF1bHQgLS0gZG8gdGhlIGRlZmF1bHQgYWN0aW9uIGZvciB0aGUgY3VycmVudCBzdGF0
ZS4gIHwNCiAgICArYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tKi8NCiAgICAreXlkZWZhdWx0Og0KICAgICsgIHl5biA9IHl5ZGVmYWN0
W3l5c3RhdGVdOw0KICAgICsgIGlmICh5eW4gPT0gMCkNCiAgICArICAgIGdvdG8geXllcnJsYWI7
DQogICAgKyAgZ290byB5eXJlZHVjZTsNCiAgICArDQogICAgKw0KICAgICsvKi0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9uLiAg
fA0KICAgICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICAgICt5eXJlZHVjZToN
CiAgICArICAvKiB5eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAq
Lw0KICAgICsgIHl5bGVuID0geXlyMlt5eW5dOw0KICAgICsNCiAgICArICAvKiBJZiBZWUxFTiBp
cyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoNCiAg
ICArICAgICAnJCQgPSAkMScuDQogICAgKw0KICAgICsgICAgIE90aGVyd2lzZSwgdGhlIGZvbGxv
d2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4NCiAgICArICAgICBUaGlzIGJlaGF2aW9y
IGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24NCiAgICArICAgICB1c2VycyBzaG91bGQgbm90IHJl
bHkgdXBvbiBpdC4gIEFzc2lnbmluZyB0byBZWVZBTA0KICAgICsgICAgIHVuY29uZGl0aW9uYWxs
eSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQ0KICAgICsg
ICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFsaXplZC4gICov
DQogICAgKyAgeXl2YWwgPSB5eXZzcFsxLXl5bGVuXTsNCiAgICArDQogICAgKw0KICAgICsgIFlZ
X1JFRFVDRV9QUklOVCAoeXluKTsNCiAgICArICBzd2l0Y2ggKHl5bikNCiAgICArICAgIHsNCiAg
ICArICAgICAgICBjYXNlIDY6DQogICAgKw0KICAgICsgICAgew0KICAgICsJbWVudV9hZGRfcHJv
bXB0KFBfTUVOVSwgKHl5dnNwWy0xXS5zdHJpbmcpLCBOVUxMKTsNCiAgICArfQ0KICAgICsNCiAg
ICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDExOg0KICAgICsNCiAgICArICAgIHsg
emNvbmZfZXJyb3IoInVuZXhwZWN0ZWQgZW5kIHN0YXRlbWVudCIpOyB9DQogICAgKw0KICAgICsg
ICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTI6DQogICAgKw0KICAgICsgICAgeyB6Y29u
Zl9lcnJvcigidW5rbm93biBzdGF0ZW1lbnQgXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsg
fQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDEzOg0KICAgICsN
CiAgICArICAgIHsNCiAgICArCXpjb25mX2Vycm9yKCJ1bmV4cGVjdGVkIG9wdGlvbiBcIiVzXCIi
LCAoeXl2c3BbLTJdLmlkKS0+bmFtZSk7DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsN
CiAgICArDQogICAgKyAgY2FzZSAxNDoNCiAgICArDQogICAgKyAgICB7IHpjb25mX2Vycm9yKCJp
bnZhbGlkIHN0YXRlbWVudCIpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAg
ICsgIGNhc2UgMzE6DQogICAgKw0KICAgICsgICAgeyB6Y29uZl9lcnJvcigidW5rbm93biBvcHRp
b24gXCIlc1wiIiwgKHl5dnNwWy0yXS5zdHJpbmcpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFr
Ow0KICAgICsNCiAgICArICBjYXNlIDMyOg0KICAgICsNCiAgICArICAgIHsgemNvbmZfZXJyb3Io
ImludmFsaWQgb3B0aW9uIik7IH0NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAg
KyAgY2FzZSAzMzoNCiAgICArDQogICAgKyAgICB7DQogICAgKwkoeXl2c3BbLTFdLnN5bWJvbCkt
PmZsYWdzIHw9IFNZTUJPTF9PUFRJT05BTDsNCiAgICArCW1lbnVfYWRkX2VudHJ5KCh5eXZzcFst
MV0uc3ltYm9sKSk7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpjb25maWcgJXNc
biIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFstMV0uc3ltYm9sKS0+
bmFtZSk7DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2Fz
ZSAzNDoNCiAgICArDQogICAgKyAgICB7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczol
ZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9
DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMzU6DQogICAgKw0K
ICAgICsgICAgew0KICAgICsJKHl5dnNwWy0xXS5zeW1ib2wpLT5mbGFncyB8PSBTWU1CT0xfT1BU
SU9OQUw7DQogICAgKwltZW51X2FkZF9lbnRyeSgoeXl2c3BbLTFdLnN5bWJvbCkpOw0KICAgICsJ
cHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6bWVudWNvbmZpZyAlc1xuIiwgemNvbmZfY3VybmFt
ZSgpLCB6Y29uZl9saW5lbm8oKSwgKHl5dnNwWy0xXS5zeW1ib2wpLT5uYW1lKTsNCiAgICArfQ0K
ICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDM2Og0KICAgICsNCiAg
ICArICAgIHsNCiAgICArCWlmIChjdXJyZW50X2VudHJ5LT5wcm9tcHQpDQogICAgKwkJY3VycmVu
dF9lbnRyeS0+cHJvbXB0LT50eXBlID0gUF9NRU5VOw0KICAgICsJZWxzZQ0KICAgICsJCXpjb25m
cHJpbnQoIndhcm5pbmc6IG1lbnVjb25maWcgc3RhdGVtZW50IHdpdGhvdXQgcHJvbXB0Iik7DQog
ICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDplbmRjb25maWdcbiIsIHpjb25mX2N1cm5h
bWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQog
ICAgKw0KICAgICsgIGNhc2UgNDQ6DQogICAgKw0KICAgICsgICAgew0KICAgICsJbWVudV9zZXRf
dHlwZSgoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAi
JXM6JWQ6dHlwZSgldSlcbiIsDQogICAgKwkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8o
KSwNCiAgICArCQkoeXl2c3BbLTJdLmlkKS0+c3R5cGUpOw0KICAgICt9DQogICAgKw0KICAgICsg
ICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgNDU6DQogICAgKw0KICAgICsgICAgew0KICAg
ICsJbWVudV9hZGRfcHJvbXB0KFBfUFJPTVBULCAoeXl2c3BbLTJdLnN0cmluZyksICh5eXZzcFst
MV0uZXhwcikpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6cHJvbXB0XG4iLCB6
Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfQ0KICAgICsNCiAgICArICAg
IGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDQ2Og0KICAgICsNCiAgICArICAgIHsNCiAgICAr
CW1lbnVfYWRkX2V4cHIoUF9ERUZBVUxULCAoeXl2c3BbLTJdLmV4cHIpLCAoeXl2c3BbLTFdLmV4
cHIpKTsNCiAgICArCWlmICgoeXl2c3BbLTNdLmlkKS0+c3R5cGUgIT0gU19VTktOT1dOKQ0KICAg
ICsJCW1lbnVfc2V0X3R5cGUoKHl5dnNwWy0zXS5pZCktPnN0eXBlKTsNCiAgICArCXByaW50ZChE
RUJVR19QQVJTRSwgIiVzOiVkOmRlZmF1bHQoJXUpXG4iLA0KICAgICsJCXpjb25mX2N1cm5hbWUo
KSwgemNvbmZfbGluZW5vKCksDQogICAgKwkJKHl5dnNwWy0zXS5pZCktPnN0eXBlKTsNCiAgICAr
fQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDQ3Og0KICAgICsN
CiAgICArICAgIHsNCiAgICArCW1lbnVfYWRkX3N5bWJvbChQX1NFTEVDVCwgKHl5dnNwWy0yXS5z
eW1ib2wpLCAoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVz
OiVkOnNlbGVjdFxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK30N
CiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA0ODoNCiAgICArDQog
ICAgKyAgICB7DQogICAgKwltZW51X2FkZF9zeW1ib2woUF9JTVBMWSwgKHl5dnNwWy0yXS5zeW1i
b2wpLCAoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVk
OmltcGx5XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfQ0KICAg
ICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDQ5Og0KICAgICsNCiAgICAr
ICAgIHsNCiAgICArCW1lbnVfYWRkX2V4cHIoUF9SQU5HRSwgZXhwcl9hbGxvY19jb21wKEVfUkFO
R0UsKHl5dnNwWy0zXS5zeW1ib2wpLCAoeXl2c3BbLTJdLnN5bWJvbCkpLCAoeXl2c3BbLTFdLmV4
cHIpKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnJhbmdlXG4iLCB6Y29uZl9j
dXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFr
Ow0KICAgICsNCiAgICArICBjYXNlIDUyOg0KICAgICsNCiAgICArICAgIHsNCiAgICArCWNvbnN0
IHN0cnVjdCBrY29uZl9pZCAqaWQgPSBrY29uZl9pZF9sb29rdXAoKHl5dnNwWy0xXS5zdHJpbmcp
LCBzdHJsZW4oKHl5dnNwWy0xXS5zdHJpbmcpKSk7DQogICAgKwlpZiAoaWQgJiYgaWQtPmZsYWdz
ICYgVEZfT1BUSU9OKSB7DQogICAgKwkJbWVudV9hZGRfb3B0aW9uKGlkLT50b2tlbiwgKHl5dnNw
WzBdLnN0cmluZykpOw0KICAgICsJCWZyZWUoKHl5dnNwWzBdLnN0cmluZykpOw0KICAgICsJfQ0K
ICAgICsJZWxzZQ0KICAgICsJCXpjb25mcHJpbnQoIndhcm5pbmc6IGlnbm9yaW5nIHVua25vd24g
b3B0aW9uICVzIiwgKHl5dnNwWy0xXS5zdHJpbmcpKTsNCiAgICArCWZyZWUoKHl5dnNwWy0xXS5z
dHJpbmcpKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBj
YXNlIDUzOg0KICAgICsNCiAgICArICAgIHsgKHl5dmFsLnN0cmluZykgPSBOVUxMOyB9DQogICAg
Kw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgNTQ6DQogICAgKw0KICAgICsg
ICAgeyAoeXl2YWwuc3RyaW5nKSA9ICh5eXZzcFswXS5zdHJpbmcpOyB9DQogICAgKw0KICAgICsg
ICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgNTU6DQogICAgKw0KICAgICsgICAgew0KICAg
ICsJc3RydWN0IHN5bWJvbCAqc3ltID0gc3ltX2xvb2t1cCgoeXl2c3BbLTFdLnN0cmluZyksIFNZ
TUJPTF9DSE9JQ0UpOw0KICAgICsJc3ltLT5mbGFncyB8PSBTWU1CT0xfTk9fV1JJVEU7DQogICAg
KwltZW51X2FkZF9lbnRyeShzeW0pOw0KICAgICsJbWVudV9hZGRfZXhwcihQX0NIT0lDRSwgTlVM
TCwgTlVMTCk7DQogICAgKwlmcmVlKCh5eXZzcFstMV0uc3RyaW5nKSk7DQogICAgKwlwcmludGQo
REVCVUdfUEFSU0UsICIlczolZDpjaG9pY2VcbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGlu
ZW5vKCkpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNh
c2UgNTY6DQogICAgKw0KICAgICsgICAgew0KICAgICsJKHl5dmFsLm1lbnUpID0gbWVudV9hZGRf
bWVudSgpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNh
c2UgNTc6DQogICAgKw0KICAgICsgICAgew0KICAgICsJaWYgKHpjb25mX2VuZHRva2VuKCh5eXZz
cFswXS5pZCksIFRfQ0hPSUNFLCBUX0VORENIT0lDRSkpIHsNCiAgICArCQltZW51X2VuZF9tZW51
KCk7DQogICAgKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kY2hvaWNlXG4iLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArCX0NCiAgICArfQ0KICAgICsNCiAg
ICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDY1Og0KICAgICsNCiAgICArICAgIHsN
CiAgICArCW1lbnVfYWRkX3Byb21wdChQX1BST01QVCwgKHl5dnNwWy0yXS5zdHJpbmcpLCAoeXl2
c3BbLTFdLmV4cHIpKTsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOnByb21wdFxu
IiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK30NCiAgICArDQogICAg
KyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA2NjoNCiAgICArDQogICAgKyAgICB7DQog
ICAgKwlpZiAoKHl5dnNwWy0yXS5pZCktPnN0eXBlID09IFNfQk9PTEVBTiB8fCAoeXl2c3BbLTJd
LmlkKS0+c3R5cGUgPT0gU19UUklTVEFURSkgew0KICAgICsJCW1lbnVfc2V0X3R5cGUoKHl5dnNw
Wy0yXS5pZCktPnN0eXBlKTsNCiAgICArCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDp0eXBl
KCV1KVxuIiwNCiAgICArCQkJemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSwNCiAgICAr
CQkJKHl5dnNwWy0yXS5pZCktPnN0eXBlKTsNCiAgICArCX0gZWxzZQ0KICAgICsJCVlZRVJST1I7
DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA2NzoN
CiAgICArDQogICAgKyAgICB7DQogICAgKwljdXJyZW50X2VudHJ5LT5zeW0tPmZsYWdzIHw9IFNZ
TUJPTF9PUFRJT05BTDsNCiAgICArCXByaW50ZChERUJVR19QQVJTRSwgIiVzOiVkOm9wdGlvbmFs
XG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArfQ0KICAgICsNCiAg
ICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDY4Og0KICAgICsNCiAgICArICAgIHsN
CiAgICArCWlmICgoeXl2c3BbLTNdLmlkKS0+c3R5cGUgPT0gU19VTktOT1dOKSB7DQogICAgKwkJ
bWVudV9hZGRfc3ltYm9sKFBfREVGQVVMVCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbLTFd
LmV4cHIpKTsNCiAgICArCQlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpkZWZhdWx0XG4iLA0K
ICAgICsJCQl6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArCX0gZWxzZQ0K
ICAgICsJCVlZRVJST1I7DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQog
ICAgKyAgY2FzZSA3MToNCiAgICArDQogICAgKyAgICB7DQogICAgKwlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDppZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAg
KwltZW51X2FkZF9lbnRyeShOVUxMKTsNCiAgICArCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4
cHIpKTsNCiAgICArCSh5eXZhbC5tZW51KSA9IG1lbnVfYWRkX21lbnUoKTsNCiAgICArfQ0KICAg
ICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDcyOg0KICAgICsNCiAgICAr
ICAgIHsNCiAgICArCWlmICh6Y29uZl9lbmR0b2tlbigoeXl2c3BbMF0uaWQpLCBUX0lGLCBUX0VO
RElGKSkgew0KICAgICsJCW1lbnVfZW5kX21lbnUoKTsNCiAgICArCQlwcmludGQoREVCVUdfUEFS
U0UsICIlczolZDplbmRpZlxuIiwgemNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQog
ICAgKwl9DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2Fz
ZSA3ODoNCiAgICArDQogICAgKyAgICB7DQogICAgKwltZW51X2FkZF9lbnRyeShOVUxMKTsNCiAg
ICArCW1lbnVfYWRkX3Byb21wdChQX01FTlUsICh5eXZzcFstMV0uc3RyaW5nKSwgTlVMTCk7DQog
ICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDptZW51XG4iLCB6Y29uZl9jdXJuYW1lKCks
IHpjb25mX2xpbmVubygpKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsN
CiAgICArICBjYXNlIDc5Og0KICAgICsNCiAgICArICAgIHsNCiAgICArCSh5eXZhbC5tZW51KSA9
IG1lbnVfYWRkX21lbnUoKTsNCiAgICArfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsN
CiAgICArICBjYXNlIDgwOg0KICAgICsNCiAgICArICAgIHsNCiAgICArCWlmICh6Y29uZl9lbmR0
b2tlbigoeXl2c3BbMF0uaWQpLCBUX01FTlUsIFRfRU5ETUVOVSkpIHsNCiAgICArCQltZW51X2Vu
ZF9tZW51KCk7DQogICAgKwkJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6ZW5kbWVudVxuIiwg
emNvbmZfY3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgKwl9DQogICAgK30NCiAgICAr
DQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSA4NjoNCiAgICArDQogICAgKyAg
ICB7DQogICAgKwlwcmludGQoREVCVUdfUEFSU0UsICIlczolZDpzb3VyY2UgJXNcbiIsIHpjb25m
X2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCksICh5eXZzcFstMV0uc3RyaW5nKSk7DQogICAgKwl6
Y29uZl9uZXh0ZmlsZSgoeXl2c3BbLTFdLnN0cmluZykpOw0KICAgICsJZnJlZSgoeXl2c3BbLTFd
LnN0cmluZykpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsg
IGNhc2UgODc6DQogICAgKw0KICAgICsgICAgew0KICAgICsJbWVudV9hZGRfZW50cnkoTlVMTCk7
DQogICAgKwltZW51X2FkZF9wcm9tcHQoUF9DT01NRU5ULCAoeXl2c3BbLTFdLnN0cmluZyksIE5V
TEwpOw0KICAgICsJcHJpbnRkKERFQlVHX1BBUlNFLCAiJXM6JWQ6Y29tbWVudFxuIiwgemNvbmZf
Y3VybmFtZSgpLCB6Y29uZl9saW5lbm8oKSk7DQogICAgK30NCiAgICArDQogICAgKyAgICBicmVh
azsNCiAgICArDQogICAgKyAgY2FzZSA4OToNCiAgICArDQogICAgKyAgICB7DQogICAgKwlwcmlu
dGQoREVCVUdfUEFSU0UsICIlczolZDpoZWxwXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xp
bmVubygpKTsNCiAgICArCXpjb25mX3N0YXJ0aGVscCgpOw0KICAgICt9DQogICAgKw0KICAgICsg
ICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgOTA6DQogICAgKw0KICAgICsgICAgew0KICAg
ICsJaWYgKGN1cnJlbnRfZW50cnktPmhlbHApIHsNCiAgICArCQlmcmVlKGN1cnJlbnRfZW50cnkt
PmhlbHApOw0KICAgICsJCXpjb25mcHJpbnQoIndhcm5pbmc6ICclcycgZGVmaW5lZCB3aXRoIG1v
cmUgdGhhbiBvbmUgaGVscCB0ZXh0IC0tIG9ubHkgdGhlIGxhc3Qgb25lIHdpbGwgYmUgdXNlZCIs
DQogICAgKwkJCSAgIGN1cnJlbnRfZW50cnktPnN5bS0+bmFtZSA/OiAiPGNob2ljZT4iKTsNCiAg
ICArCX0NCiAgICArDQogICAgKwkvKiBJcyB0aGUgaGVscCB0ZXh0IGVtcHR5IG9yIGFsbCB3aGl0
ZXNwYWNlPyAqLw0KICAgICsJaWYgKCh5eXZzcFswXS5zdHJpbmcpW3N0cnNwbigoeXl2c3BbMF0u
c3RyaW5nKSwgIiBcZlxuXHJcdFx2IildID09ICdcMCcpDQogICAgKwkJemNvbmZwcmludCgid2Fy
bmluZzogJyVzJyBkZWZpbmVkIHdpdGggYmxhbmsgaGVscCB0ZXh0IiwNCiAgICArCQkJICAgY3Vy
cmVudF9lbnRyeS0+c3ltLT5uYW1lID86ICI8Y2hvaWNlPiIpOw0KICAgICsNCiAgICArCWN1cnJl
bnRfZW50cnktPmhlbHAgPSAoeXl2c3BbMF0uc3RyaW5nKTsNCiAgICArfQ0KICAgICsNCiAgICAr
ICAgIGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDk1Og0KICAgICsNCiAgICArICAgIHsNCiAg
ICArCW1lbnVfYWRkX2RlcCgoeXl2c3BbLTFdLmV4cHIpKTsNCiAgICArCXByaW50ZChERUJVR19Q
QVJTRSwgIiVzOiVkOmRlcGVuZHMgb25cbiIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5v
KCkpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2Ug
OTk6DQogICAgKw0KICAgICsgICAgew0KICAgICsJbWVudV9hZGRfdmlzaWJpbGl0eSgoeXl2c3Bb
MF0uZXhwcikpOw0KICAgICt9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsg
IGNhc2UgMTAxOg0KICAgICsNCiAgICArICAgIHsNCiAgICArCW1lbnVfYWRkX3Byb21wdChQX1BS
T01QVCwgKHl5dnNwWy0xXS5zdHJpbmcpLCAoeXl2c3BbMF0uZXhwcikpOw0KICAgICt9DQogICAg
Kw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTA0Og0KICAgICsNCiAgICAr
ICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0uaWQpOyB9DQogICAgKw0KICAgICsgICAgYnJl
YWs7DQogICAgKw0KICAgICsgIGNhc2UgMTA1Og0KICAgICsNCiAgICArICAgIHsgKHl5dmFsLmlk
KSA9ICh5eXZzcFstMV0uaWQpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAg
ICsgIGNhc2UgMTA2Og0KICAgICsNCiAgICArICAgIHsgKHl5dmFsLmlkKSA9ICh5eXZzcFstMV0u
aWQpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTA5Og0K
ICAgICsNCiAgICArICAgIHsgKHl5dmFsLmV4cHIpID0gTlVMTDsgfQ0KICAgICsNCiAgICArICAg
IGJyZWFrOw0KICAgICsNCiAgICArICBjYXNlIDExMDoNCiAgICArDQogICAgKyAgICB7ICh5eXZh
bC5leHByKSA9ICh5eXZzcFswXS5leHByKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAg
ICsNCiAgICArICBjYXNlIDExMToNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9IGV4
cHJfYWxsb2Nfc3ltYm9sKCh5eXZzcFswXS5zeW1ib2wpKTsgfQ0KICAgICsNCiAgICArICAgIGJy
ZWFrOw0KICAgICsNCiAgICArICBjYXNlIDExMjoNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5l
eHByKSA9IGV4cHJfYWxsb2NfY29tcChFX0xUSCwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3Bb
MF0uc3ltYm9sKSk7IH0NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2Fz
ZSAxMTM6DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAo
RV9MRVEsICh5eXZzcFstMl0uc3ltYm9sKSwgKHl5dnNwWzBdLnN5bWJvbCkpOyB9DQogICAgKw0K
ICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTE0Og0KICAgICsNCiAgICArICAg
IHsgKHl5dmFsLmV4cHIpID0gZXhwcl9hbGxvY19jb21wKEVfR1RILCAoeXl2c3BbLTJdLnN5bWJv
bCksICh5eXZzcFswXS5zeW1ib2wpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsN
CiAgICArICBjYXNlIDExNToNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJf
YWxsb2NfY29tcChFX0dFUSwgKHl5dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7
IH0NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxMTY6DQogICAg
Kw0KICAgICsgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9FUVVBTCwgKHl5
dnNwWy0yXS5zeW1ib2wpLCAoeXl2c3BbMF0uc3ltYm9sKSk7IH0NCiAgICArDQogICAgKyAgICBi
cmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxMTc6DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwu
ZXhwcikgPSBleHByX2FsbG9jX2NvbXAoRV9VTkVRVUFMLCAoeXl2c3BbLTJdLnN5bWJvbCksICh5
eXZzcFswXS5zeW1ib2wpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICAr
ICBjYXNlIDExODoNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9ICh5eXZzcFstMV0u
ZXhwcik7IH0NCiAgICArDQogICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxMTk6
DQogICAgKw0KICAgICsgICAgeyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX29uZShFX05PVCwg
KHl5dnNwWzBdLmV4cHIpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICAr
ICBjYXNlIDEyMDoNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5leHByKSA9IGV4cHJfYWxsb2Nf
dHdvKEVfT1IsICh5eXZzcFstMl0uZXhwciksICh5eXZzcFswXS5leHByKSk7IH0NCiAgICArDQog
ICAgKyAgICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxMjE6DQogICAgKw0KICAgICsgICAg
eyAoeXl2YWwuZXhwcikgPSBleHByX2FsbG9jX3R3byhFX0FORCwgKHl5dnNwWy0yXS5leHByKSwg
KHl5dnNwWzBdLmV4cHIpKTsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICAr
ICBjYXNlIDEyMjoNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5zeW1ib2wpID0gc3ltX2xvb2t1
cCgoeXl2c3BbMF0uc3RyaW5nKSwgMCk7IGZyZWUoKHl5dnNwWzBdLnN0cmluZykpOyB9DQogICAg
Kw0KICAgICsgICAgYnJlYWs7DQogICAgKw0KICAgICsgIGNhc2UgMTI0Og0KICAgICsNCiAgICAr
ICAgIHsgKHl5dmFsLnN5bWJvbCkgPSBzeW1fbG9va3VwKCh5eXZzcFswXS5zdHJpbmcpLCBTWU1C
T0xfQ09OU1QpOyBmcmVlKCh5eXZzcFswXS5zdHJpbmcpKTsgfQ0KICAgICsNCiAgICArICAgIGJy
ZWFrOw0KICAgICsNCiAgICArICBjYXNlIDEyNToNCiAgICArDQogICAgKyAgICB7ICh5eXZhbC5z
dHJpbmcpID0gTlVMTDsgfQ0KICAgICsNCiAgICArICAgIGJyZWFrOw0KICAgICsNCiAgICArICBj
YXNlIDEyNzoNCiAgICArDQogICAgKyAgICB7IHZhcmlhYmxlX2FkZCgoeXl2c3BbLTNdLnN0cmlu
ZyksICh5eXZzcFstMV0uc3RyaW5nKSwgKHl5dnNwWy0yXS5mbGF2b3IpKTsgZnJlZSgoeXl2c3Bb
LTNdLnN0cmluZykpOyBmcmVlKCh5eXZzcFstMV0uc3RyaW5nKSk7IH0NCiAgICArDQogICAgKyAg
ICBicmVhazsNCiAgICArDQogICAgKyAgY2FzZSAxMjg6DQogICAgKw0KICAgICsgICAgeyAoeXl2
YWwuc3RyaW5nKSA9IHhzdHJkdXAoIiIpOyB9DQogICAgKw0KICAgICsgICAgYnJlYWs7DQogICAg
Kw0KICAgICsNCiAgICArDQogICAgKyAgICAgIGRlZmF1bHQ6IGJyZWFrOw0KICAgICsgICAgfQ0K
ICAgICsgIC8qIFVzZXIgc2VtYW50aWMgYWN0aW9ucyBzb21ldGltZXMgYWx0ZXIgeXljaGFyLCBh
bmQgdGhhdCByZXF1aXJlcw0KICAgICsgICAgIHRoYXQgeXl0b2tlbiBiZSB1cGRhdGVkIHdpdGgg
dGhlIG5ldyB0cmFuc2xhdGlvbi4gIFdlIHRha2UgdGhlDQogICAgKyAgICAgYXBwcm9hY2ggb2Yg
dHJhbnNsYXRpbmcgaW1tZWRpYXRlbHkgYmVmb3JlIGV2ZXJ5IHVzZSBvZiB5eXRva2VuLg0KICAg
ICsgICAgIE9uZSBhbHRlcm5hdGl2ZSBpcyB0cmFuc2xhdGluZyBoZXJlIGFmdGVyIGV2ZXJ5IHNl
bWFudGljIGFjdGlvbiwNCiAgICArICAgICBidXQgdGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBt
aXNzZWQgaWYgdGhlIHNlbWFudGljIGFjdGlvbiBpbnZva2VzDQogICAgKyAgICAgWVlBQk9SVCwg
WVlBQ0NFUFQsIG9yIFlZRVJST1IgaW1tZWRpYXRlbHkgYWZ0ZXIgYWx0ZXJpbmcgeXljaGFyIG9y
DQogICAgKyAgICAgaWYgaXQgaW52b2tlcyBZWUJBQ0tVUC4gIEluIHRoZSBjYXNlIG9mIFlZQUJP
UlQgb3IgWVlBQ0NFUFQsIGFuDQogICAgKyAgICAgaW5jb3JyZWN0IGRlc3RydWN0b3IgbWlnaHQg
dGhlbiBiZSBpbnZva2VkIGltbWVkaWF0ZWx5LiAgSW4gdGhlDQogICAgKyAgICAgY2FzZSBvZiBZ
WUVSUk9SIG9yIFlZQkFDS1VQLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxlYWQN
CiAgICArICAgICB0byBhbiBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBjYWxsIG9yIHZlcmJvc2Ugc3lu
dGF4IGVycm9yIG1lc3NhZ2UNCiAgICArICAgICBiZWZvcmUgdGhlIGxvb2thaGVhZCBpcyB0cmFu
c2xhdGVkLiAgKi8NCiAgICArICBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9IiwgeXlyMVt5eW5d
LCAmeXl2YWwsICZ5eWxvYyk7DQogICAgKw0KICAgICsgIFlZUE9QU1RBQ0sgKHl5bGVuKTsNCiAg
ICArICB5eWxlbiA9IDA7DQogICAgKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsNCiAg
ICArDQogICAgKyAgKisreXl2c3AgPSB5eXZhbDsNCiAgICArDQogICAgKyAgLyogTm93ICdzaGlm
dCcgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUNCiAg
ICArICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQgYmFjayB0
byBhbmQgdGhlIHJ1bGUNCiAgICArICAgICBudW1iZXIgcmVkdWNlZCBieS4gICovDQogICAgKw0K
ICAgICsgIHl5biA9IHl5cjFbeXluXTsNCiAgICArDQogICAgKyAgeXlzdGF0ZSA9IHl5cGdvdG9b
eXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsNCiAgICArICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5
c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hlY2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQ0KICAgICsgICAg
eXlzdGF0ZSA9IHl5dGFibGVbeXlzdGF0ZV07DQogICAgKyAgZWxzZQ0KICAgICsgICAgeXlzdGF0
ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOw0KICAgICsNCiAgICArICBnb3RvIHl5bmV3
c3RhdGU7DQogICAgKw0KICAgICsNCiAgICArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4NCiAgICArfCB5eWVycmxhYiAtLSBoZXJlIG9uIGRldGVjdGluZyBlcnJvci4g
IHwNCiAgICArYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAr
eXllcnJsYWI6DQogICAgKyAgLyogTWFrZSBzdXJlIHdlIGhhdmUgbGF0ZXN0IGxvb2thaGVhZCB0
cmFuc2xhdGlvbi4gIFNlZSBjb21tZW50cyBhdA0KICAgICsgICAgIHVzZXIgc2VtYW50aWMgYWN0
aW9ucyBmb3Igd2h5IHRoaXMgaXMgbmVjZXNzYXJ5LiAgKi8NCiAgICArICB5eXRva2VuID0geXlj
aGFyID09IFlZRU1QVFkgPyBZWUVNUFRZIDogWVlUUkFOU0xBVEUgKHl5Y2hhcik7DQogICAgKw0K
ICAgICsgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVwb3J0
IHRoaXMgZXJyb3IuICAqLw0KICAgICsgIGlmICgheXllcnJzdGF0dXMpDQogICAgKyAgICB7DQog
ICAgKyAgICAgICsreXluZXJyczsNCiAgICArI2lmICEgWVlFUlJPUl9WRVJCT1NFDQogICAgKyAg
ICAgIHl5ZXJyb3IgKFlZXygic3ludGF4IGVycm9yIikpOw0KICAgICsjZWxzZQ0KICAgICsjIGRl
ZmluZSBZWVNZTlRBWF9FUlJPUiB5eXN5bnRheF9lcnJvciAoJnl5bXNnX2FsbG9jLCAmeXltc2cs
IFwNCiAgICArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5c3NwLCB5
eXRva2VuKQ0KICAgICsgICAgICB7DQogICAgKyAgICAgICAgY2hhciBjb25zdCAqeXltc2dwID0g
WVlfKCJzeW50YXggZXJyb3IiKTsNCiAgICArICAgICAgICBpbnQgeXlzeW50YXhfZXJyb3Jfc3Rh
dHVzOw0KICAgICsgICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IFlZU1lOVEFYX0VSUk9S
Ow0KICAgICsgICAgICAgIGlmICh5eXN5bnRheF9lcnJvcl9zdGF0dXMgPT0gMCkNCiAgICArICAg
ICAgICAgIHl5bXNncCA9IHl5bXNnOw0KICAgICsgICAgICAgIGVsc2UgaWYgKHl5c3ludGF4X2Vy
cm9yX3N0YXR1cyA9PSAxKQ0KICAgICsgICAgICAgICAgew0KICAgICsgICAgICAgICAgICBpZiAo
eXltc2cgIT0geXltc2didWYpDQogICAgKyAgICAgICAgICAgICAgWVlTVEFDS19GUkVFICh5eW1z
Zyk7DQogICAgKyAgICAgICAgICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlt
c2dfYWxsb2MpOw0KICAgICsgICAgICAgICAgICBpZiAoIXl5bXNnKQ0KICAgICsgICAgICAgICAg
ICAgIHsNCiAgICArICAgICAgICAgICAgICAgIHl5bXNnID0geXltc2didWY7DQogICAgKyAgICAg
ICAgICAgICAgICB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsNCiAgICArICAgICAgICAg
ICAgICAgIHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9IDI7DQogICAgKyAgICAgICAgICAgICAgfQ0K
ICAgICsgICAgICAgICAgICBlbHNlDQogICAgKyAgICAgICAgICAgICAgew0KICAgICsgICAgICAg
ICAgICAgICAgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7DQogICAgKyAg
ICAgICAgICAgICAgICB5eW1zZ3AgPSB5eW1zZzsNCiAgICArICAgICAgICAgICAgICB9DQogICAg
KyAgICAgICAgICB9DQogICAgKyAgICAgICAgeXllcnJvciAoeXltc2dwKTsNCiAgICArICAgICAg
ICBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDIpDQogICAgKyAgICAgICAgICBnb3RvIHl5
ZXhoYXVzdGVkbGFiOw0KICAgICsgICAgICB9DQogICAgKyMgdW5kZWYgWVlTWU5UQVhfRVJST1IN
CiAgICArI2VuZGlmDQogICAgKyAgICB9DQogICAgKw0KICAgICsNCiAgICArDQogICAgKyAgaWYg
KHl5ZXJyc3RhdHVzID09IDMpDQogICAgKyAgICB7DQogICAgKyAgICAgIC8qIElmIGp1c3QgdHJp
ZWQgYW5kIGZhaWxlZCB0byByZXVzZSBsb29rYWhlYWQgdG9rZW4gYWZ0ZXIgYW4NCiAgICArICAg
ICAgICAgZXJyb3IsIGRpc2NhcmQgaXQuICAqLw0KICAgICsNCiAgICArICAgICAgaWYgKHl5Y2hh
ciA8PSBZWUVPRikNCiAgICArICAgICAgICB7DQogICAgKyAgICAgICAgICAvKiBSZXR1cm4gZmFp
bHVyZSBpZiBhdCBlbmQgb2YgaW5wdXQuICAqLw0KICAgICsgICAgICAgICAgaWYgKHl5Y2hhciA9
PSBZWUVPRikNCiAgICArICAgICAgICAgICAgWVlBQk9SVDsNCiAgICArICAgICAgICB9DQogICAg
KyAgICAgIGVsc2UNCiAgICArICAgICAgICB7DQogICAgKyAgICAgICAgICB5eWRlc3RydWN0ICgi
RXJyb3I6IGRpc2NhcmRpbmciLA0KICAgICsgICAgICAgICAgICAgICAgICAgICAgeXl0b2tlbiwg
Jnl5bHZhbCk7DQogICAgKyAgICAgICAgICB5eWNoYXIgPSBZWUVNUFRZOw0KICAgICsgICAgICAg
IH0NCiAgICArICAgIH0NCiAgICArDQogICAgKyAgLyogRWxzZSB3aWxsIHRyeSB0byByZXVzZSBs
b29rYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhlIGVycm9yDQogICAgKyAgICAgdG9rZW4u
ICAqLw0KICAgICsgIGdvdG8geXllcnJsYWIxOw0KICAgICsNCiAgICArDQogICAgKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IHl5
ZXJyb3JsYWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwNCiAgICAr
YC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQog
ICAgK3l5ZXJyb3JsYWI6DQogICAgKw0KICAgICsgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBH
Q0Mgd2hlbiB0aGUgdXNlciBjb2RlIG5ldmVyIGludm9rZXMNCiAgICArICAgICBZWUVSUk9SIGFu
ZCB0aGUgbGFiZWwgeXllcnJvcmxhYiB0aGVyZWZvcmUgbmV2ZXIgYXBwZWFycyBpbiB1c2VyDQog
ICAgKyAgICAgY29kZS4gICovDQogICAgKyAgaWYgKC8qQ09OU1RDT05EKi8gMCkNCiAgICArICAg
ICBnb3RvIHl5ZXJyb3JsYWI7DQogICAgKw0KICAgICsgIC8qIERvIG5vdCByZWNsYWltIHRoZSBz
eW1ib2xzIG9mIHRoZSBydWxlIHdob3NlIGFjdGlvbiB0cmlnZ2VyZWQNCiAgICArICAgICB0aGlz
IFlZRVJST1IuICAqLw0KICAgICsgIFlZUE9QU1RBQ0sgKHl5bGVuKTsNCiAgICArICB5eWxlbiA9
IDA7DQogICAgKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsNCiAgICArICB5eXN0YXRl
ID0gKnl5c3NwOw0KICAgICsgIGdvdG8geXllcnJsYWIxOw0KICAgICsNCiAgICArDQogICAgKy8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS4NCiAgICArfCB5eWVycmxhYjEgLS0gY29tbW9uIGNvZGUgZm9yIGJvdGggc3ludGF4IGVy
cm9yIGFuZCBZWUVSUk9SLiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogICAgK3l5ZXJybGFiMToNCiAgICAr
ICB5eWVycnN0YXR1cyA9IDM7ICAgICAgLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVt
ZW50cyB0aGlzLiAgKi8NCiAgICArDQogICAgKyAgZm9yICg7OykNCiAgICArICAgIHsNCiAgICAr
ICAgICAgeXluID0geXlwYWN0W3l5c3RhdGVdOw0KICAgICsgICAgICBpZiAoIXl5cGFjdF92YWx1
ZV9pc19kZWZhdWx0ICh5eW4pKQ0KICAgICsgICAgICAgIHsNCiAgICArICAgICAgICAgIHl5biAr
PSBZWVRFUlJPUjsNCiAgICArICAgICAgICAgIGlmICgwIDw9IHl5biAmJiB5eW4gPD0gWVlMQVNU
ICYmIHl5Y2hlY2tbeXluXSA9PSBZWVRFUlJPUikNCiAgICArICAgICAgICAgICAgew0KICAgICsg
ICAgICAgICAgICAgIHl5biA9IHl5dGFibGVbeXluXTsNCiAgICArICAgICAgICAgICAgICBpZiAo
MCA8IHl5bikNCiAgICArICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICsgICAgICAgICAgICB9
DQogICAgKyAgICAgICAgfQ0KICAgICsNCiAgICArICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0
YXRlIGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLw0KICAgICsg
ICAgICBpZiAoeXlzc3AgPT0geXlzcykNCiAgICArICAgICAgICBZWUFCT1JUOw0KICAgICsNCiAg
ICArDQogICAgKyAgICAgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsDQogICAgKyAgICAg
ICAgICAgICAgICAgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3ApOw0KICAgICsgICAgICBZWVBPUFNU
QUNLICgxKTsNCiAgICArICAgICAgeXlzdGF0ZSA9ICp5eXNzcDsNCiAgICArICAgICAgWVlfU1RB
Q0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsNCiAgICArICAgIH0NCiAgICArDQogICAgKyAgWVlfSUdO
T1JFX01BWUJFX1VOSU5JVElBTElaRURfQkVHSU4NCiAgICArICAqKyt5eXZzcCA9IHl5bHZhbDsN
CiAgICArICBZWV9JR05PUkVfTUFZQkVfVU5JTklUSUFMSVpFRF9FTkQNCiAgICArDQogICAgKw0K
ICAgICsgIC8qIFNoaWZ0IHRoZSBlcnJvciB0b2tlbi4gICovDQogICAgKyAgWVlfU1lNQk9MX1BS
SU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXluXSwgeXl2c3AsIHl5bHNwKTsNCiAgICArDQogICAg
KyAgeXlzdGF0ZSA9IHl5bjsNCiAgICArICBnb3RvIHl5bmV3c3RhdGU7DQogICAgKw0KICAgICsN
CiAgICArLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IHl5
YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8DQogICAgK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgICAreXlhY2NlcHRsYWI6DQogICAgKyAgeXly
ZXN1bHQgPSAwOw0KICAgICsgIGdvdG8geXlyZXR1cm47DQogICAgKw0KICAgICsvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLg0KICAgICt8IHl5YWJvcnRsYWIgLS0gWVlBQk9S
VCBjb21lcyBoZXJlLiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0qLw0KICAgICt5eWFib3J0bGFiOg0KICAgICsgIHl5cmVzdWx0ID0gMTsNCiAgICArICBnb3Rv
IHl5cmV0dXJuOw0KICAgICsNCiAgICArI2lmICFkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJP
Ul9WRVJCT1NFDQogICAgKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4NCiAgICArfCB5eWV4aGF1c3RlZGxhYiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBj
b21lcyBoZXJlLiAgfA0KICAgICtgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSovDQogICAgK3l5ZXhoYXVzdGVkbGFiOg0KICAgICsgIHl5ZXJyb3IgKFlZ
XygibWVtb3J5IGV4aGF1c3RlZCIpKTsNCiAgICArICB5eXJlc3VsdCA9IDI7DQogICAgKyAgLyog
RmFsbCB0aHJvdWdoLiAgKi8NCiAgICArI2VuZGlmDQogICAgKw0KICAgICt5eXJldHVybjoNCiAg
ICArICBpZiAoeXljaGFyICE9IFlZRU1QVFkpDQogICAgKyAgICB7DQogICAgKyAgICAgIC8qIE1h
a2Ugc3VyZSB3ZSBoYXZlIGxhdGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uICBTZWUgY29tbWVu
dHMgYXQNCiAgICArICAgICAgICAgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBp
cyBuZWNlc3NhcnkuICAqLw0KICAgICsgICAgICB5eXRva2VuID0gWVlUUkFOU0xBVEUgKHl5Y2hh
cik7DQogICAgKyAgICAgIHl5ZGVzdHJ1Y3QgKCJDbGVhbnVwOiBkaXNjYXJkaW5nIGxvb2thaGVh
ZCIsDQogICAgKyAgICAgICAgICAgICAgICAgIHl5dG9rZW4sICZ5eWx2YWwpOw0KICAgICsgICAg
fQ0KICAgICsgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdob3Nl
IGFjdGlvbiB0cmlnZ2VyZWQNCiAgICArICAgICB0aGlzIFlZQUJPUlQgb3IgWVlBQ0NFUFQuICAq
Lw0KICAgICsgIFlZUE9QU1RBQ0sgKHl5bGVuKTsNCiAgICArICBZWV9TVEFDS19QUklOVCAoeXlz
cywgeXlzc3ApOw0KICAgICsgIHdoaWxlICh5eXNzcCAhPSB5eXNzKQ0KICAgICsgICAgew0KICAg
ICsgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9wcGluZyIsDQogICAgKyAgICAgICAgICAg
ICAgICAgIHl5c3Rvc1sqeXlzc3BdLCB5eXZzcCk7DQogICAgKyAgICAgIFlZUE9QU1RBQ0sgKDEp
Ow0KICAgICsgICAgfQ0KICAgICsjaWZuZGVmIHl5b3ZlcmZsb3cNCiAgICArICBpZiAoeXlzcyAh
PSB5eXNzYSkNCiAgICArICAgIFlZU1RBQ0tfRlJFRSAoeXlzcyk7DQogICAgKyNlbmRpZg0KICAg
ICsjaWYgWVlFUlJPUl9WRVJCT1NFDQogICAgKyAgaWYgKHl5bXNnICE9IHl5bXNnYnVmKQ0KICAg
ICsgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7DQogICAgKyNlbmRpZg0KICAgICsgIHJldHVybiB5
eXJlc3VsdDsNCiAgICArfQ0KICAgICsNCiAgICArDQogICAgKw0KICAgICt2b2lkIGNvbmZfcGFy
c2UoY29uc3QgY2hhciAqbmFtZSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltOw0K
ICAgICsJaW50IGk7DQogICAgKw0KICAgICsJemNvbmZfaW5pdHNjYW4obmFtZSk7DQogICAgKw0K
ICAgICsJX21lbnVfaW5pdCgpOw0KICAgICsNCiAgICArCWlmIChnZXRlbnYoIlpDT05GX0RFQlVH
IikpDQogICAgKwkJeXlkZWJ1ZyA9IDE7DQogICAgKwl5eXBhcnNlKCk7DQogICAgKw0KICAgICsJ
LyogVmFyaWFibGVzIGFyZSBleHBhbmRlZCBpbiB0aGUgcGFyc2UgcGhhc2UuIFdlIGNhbiBmcmVl
IHRoZW0gaGVyZS4gKi8NCiAgICArCXZhcmlhYmxlX2FsbF9kZWwoKTsNCiAgICArDQogICAgKwlp
ZiAoeXluZXJycykNCiAgICArCQlleGl0KDEpOw0KICAgICsJaWYgKCFtb2R1bGVzX3N5bSkNCiAg
ICArCQltb2R1bGVzX3N5bSA9IHN5bV9maW5kKCAibiIgKTsNCiAgICArDQogICAgKwlpZiAoIW1l
bnVfaGFzX3Byb21wdCgmcm9vdG1lbnUpKSB7DQogICAgKwkJY3VycmVudF9lbnRyeSA9ICZyb290
bWVudTsNCiAgICArCQltZW51X2FkZF9wcm9tcHQoUF9NRU5VLCAiTWFpbiBtZW51IiwgTlVMTCk7
DQogICAgKwl9DQogICAgKw0KICAgICsJbWVudV9maW5hbGl6ZSgmcm9vdG1lbnUpOw0KICAgICsJ
Zm9yX2FsbF9zeW1ib2xzKGksIHN5bSkgew0KICAgICsJCWlmIChzeW1fY2hlY2tfZGVwcyhzeW0p
KQ0KICAgICsJCQl5eW5lcnJzKys7DQogICAgKwl9DQogICAgKwlpZiAoeXluZXJycykNCiAgICAr
CQlleGl0KDEpOw0KICAgICsJc3ltX3NldF9jaGFuZ2VfY291bnQoMSk7DQogICAgK30NCiAgICAr
DQogICAgK3N0YXRpYyBjb25zdCBjaGFyICp6Y29uZl90b2tlbm5hbWUoaW50IHRva2VuKQ0KICAg
ICt7DQogICAgKwlzd2l0Y2ggKHRva2VuKSB7DQogICAgKwljYXNlIFRfTUVOVToJCXJldHVybiAi
bWVudSI7DQogICAgKwljYXNlIFRfRU5ETUVOVToJCXJldHVybiAiZW5kbWVudSI7DQogICAgKwlj
YXNlIFRfQ0hPSUNFOgkJcmV0dXJuICJjaG9pY2UiOw0KICAgICsJY2FzZSBUX0VORENIT0lDRToJ
cmV0dXJuICJlbmRjaG9pY2UiOw0KICAgICsJY2FzZSBUX0lGOgkJcmV0dXJuICJpZiI7DQogICAg
KwljYXNlIFRfRU5ESUY6CQlyZXR1cm4gImVuZGlmIjsNCiAgICArCWNhc2UgVF9ERVBFTkRTOgkJ
cmV0dXJuICJkZXBlbmRzIjsNCiAgICArCWNhc2UgVF9WSVNJQkxFOgkJcmV0dXJuICJ2aXNpYmxl
IjsNCiAgICArCX0NCiAgICArCXJldHVybiAiPHRva2VuPiI7DQogICAgK30NCiAgICArDQogICAg
K3N0YXRpYyBib29sIHpjb25mX2VuZHRva2VuKGNvbnN0IHN0cnVjdCBrY29uZl9pZCAqaWQsIGlu
dCBzdGFydHRva2VuLCBpbnQgZW5kdG9rZW4pDQogICAgK3sNCiAgICArCWlmIChpZC0+dG9rZW4g
IT0gZW5kdG9rZW4pIHsNCiAgICArCQl6Y29uZl9lcnJvcigidW5leHBlY3RlZCAnJXMnIHdpdGhp
biAlcyBibG9jayIsDQogICAgKwkJCWlkLT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tl
bikpOw0KICAgICsJCXl5bmVycnMrKzsNCiAgICArCQlyZXR1cm4gZmFsc2U7DQogICAgKwl9DQog
ICAgKwlpZiAoY3VycmVudF9tZW51LT5maWxlICE9IGN1cnJlbnRfZmlsZSkgew0KICAgICsJCXpj
b25mX2Vycm9yKCInJXMnIGluIGRpZmZlcmVudCBmaWxlIHRoYW4gJyVzJyIsDQogICAgKwkJCWlk
LT5uYW1lLCB6Y29uZl90b2tlbm5hbWUoc3RhcnR0b2tlbikpOw0KICAgICsJCWZwcmludGYoc3Rk
ZXJyLCAiJXM6JWQ6IGxvY2F0aW9uIG9mIHRoZSAnJXMnXG4iLA0KICAgICsJCQljdXJyZW50X21l
bnUtPmZpbGUtPm5hbWUsIGN1cnJlbnRfbWVudS0+bGluZW5vLA0KICAgICsJCQl6Y29uZl90b2tl
bm5hbWUoc3RhcnR0b2tlbikpOw0KICAgICsJCXl5bmVycnMrKzsNCiAgICArCQlyZXR1cm4gZmFs
c2U7DQogICAgKwl9DQogICAgKwlyZXR1cm4gdHJ1ZTsNCiAgICArfQ0KICAgICsNCiAgICArc3Rh
dGljIHZvaWQgemNvbmZwcmludChjb25zdCBjaGFyICplcnIsIC4uLikNCiAgICArew0KICAgICsJ
dmFfbGlzdCBhcDsNCiAgICArDQogICAgKwlmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAiLCB6Y29u
Zl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygpKTsNCiAgICArCXZhX3N0YXJ0KGFwLCBlcnIpOw0K
ICAgICsJdmZwcmludGYoc3RkZXJyLCBlcnIsIGFwKTsNCiAgICArCXZhX2VuZChhcCk7DQogICAg
KwlmcHJpbnRmKHN0ZGVyciwgIlxuIik7DQogICAgK30NCiAgICArDQogICAgK3N0YXRpYyB2b2lk
IHpjb25mX2Vycm9yKGNvbnN0IGNoYXIgKmVyciwgLi4uKQ0KICAgICt7DQogICAgKwl2YV9saXN0
IGFwOw0KICAgICsNCiAgICArCXl5bmVycnMrKzsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiJXM6
JWQ6ICIsIHpjb25mX2N1cm5hbWUoKSwgemNvbmZfbGluZW5vKCkpOw0KICAgICsJdmFfc3RhcnQo
YXAsIGVycik7DQogICAgKwl2ZnByaW50ZihzdGRlcnIsIGVyciwgYXApOw0KICAgICsJdmFfZW5k
KGFwKTsNCiAgICArCWZwcmludGYoc3RkZXJyLCAiXG4iKTsNCiAgICArfQ0KICAgICsNCiAgICAr
c3RhdGljIHZvaWQgeXllcnJvcihjb25zdCBjaGFyICplcnIpDQogICAgK3sNCiAgICArCWZwcmlu
dGYoc3RkZXJyLCAiJXM6JWQ6ICVzXG4iLCB6Y29uZl9jdXJuYW1lKCksIHpjb25mX2xpbmVubygp
ICsgMSwgZXJyKTsNCiAgICArfQ0KICAgICsNCiAgICArc3RhdGljIHZvaWQgcHJpbnRfcXVvdGVk
X3N0cmluZyhGSUxFICpvdXQsIGNvbnN0IGNoYXIgKnN0cikNCiAgICArew0KICAgICsJY29uc3Qg
Y2hhciAqcDsNCiAgICArCWludCBsZW47DQogICAgKw0KICAgICsJcHV0YygnIicsIG91dCk7DQog
ICAgKwl3aGlsZSAoKHAgPSBzdHJjaHIoc3RyLCAnIicpKSkgew0KICAgICsJCWxlbiA9IHAgLSBz
dHI7DQogICAgKwkJaWYgKGxlbikNCiAgICArCQkJZnByaW50ZihvdXQsICIlLipzIiwgbGVuLCBz
dHIpOw0KICAgICsJCWZwdXRzKCJcXFwiIiwgb3V0KTsNCiAgICArCQlzdHIgPSBwICsgMTsNCiAg
ICArCX0NCiAgICArCWZwdXRzKHN0ciwgb3V0KTsNCiAgICArCXB1dGMoJyInLCBvdXQpOw0KICAg
ICt9DQogICAgKw0KICAgICtzdGF0aWMgdm9pZCBwcmludF9zeW1ib2woRklMRSAqb3V0LCBzdHJ1
Y3QgbWVudSAqbWVudSkNCiAgICArew0KICAgICsJc3RydWN0IHN5bWJvbCAqc3ltID0gbWVudS0+
c3ltOw0KICAgICsJc3RydWN0IHByb3BlcnR5ICpwcm9wOw0KICAgICsNCiAgICArCWlmIChzeW1f
aXNfY2hvaWNlKHN5bSkpDQogICAgKwkJZnByaW50ZihvdXQsICJcbmNob2ljZVxuIik7DQogICAg
KwllbHNlDQogICAgKwkJZnByaW50ZihvdXQsICJcbmNvbmZpZyAlc1xuIiwgc3ltLT5uYW1lKTsN
CiAgICArCXN3aXRjaCAoc3ltLT50eXBlKSB7DQogICAgKwljYXNlIFNfQk9PTEVBTjoNCiAgICAr
CQlmcHV0cygiICBib29sXG4iLCBvdXQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJY2FzZSBTX1RS
SVNUQVRFOg0KICAgICsJCWZwdXRzKCIgIHRyaXN0YXRlXG4iLCBvdXQpOw0KICAgICsJCWJyZWFr
Ow0KICAgICsJY2FzZSBTX1NUUklORzoNCiAgICArCQlmcHV0cygiICBzdHJpbmdcbiIsIG91dCk7
DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSU5UOg0KICAgICsJCWZwdXRzKCIgIGludGVn
ZXJcbiIsIG91dCk7DQogICAgKwkJYnJlYWs7DQogICAgKwljYXNlIFNfSEVYOg0KICAgICsJCWZw
dXRzKCIgIGhleFxuIiwgb3V0KTsNCiAgICArCQlicmVhazsNCiAgICArCWRlZmF1bHQ6DQogICAg
KwkJZnB1dHMoIiAgPz8/XG4iLCBvdXQpOw0KICAgICsJCWJyZWFrOw0KICAgICsJfQ0KICAgICsJ
Zm9yIChwcm9wID0gc3ltLT5wcm9wOyBwcm9wOyBwcm9wID0gcHJvcC0+bmV4dCkgew0KICAgICsJ
CWlmIChwcm9wLT5tZW51ICE9IG1lbnUpDQogICAgKwkJCWNvbnRpbnVlOw0KICAgICsJCXN3aXRj
aCAocHJvcC0+dHlwZSkgew0KICAgICsJCWNhc2UgUF9QUk9NUFQ6DQogICAgKwkJCWZwdXRzKCIg
IHByb21wdCAiLCBvdXQpOw0KICAgICsJCQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+
dGV4dCk7DQogICAgKwkJCWlmICghZXhwcl9pc195ZXMocHJvcC0+dmlzaWJsZS5leHByKSkgew0K
ICAgICsJCQkJZnB1dHMoIiBpZiAiLCBvdXQpOw0KICAgICsJCQkJZXhwcl9mcHJpbnQocHJvcC0+
dmlzaWJsZS5leHByLCBvdXQpOw0KICAgICsJCQl9DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7
DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgUF9ERUZBVUxUOg0KICAgICsJCQlmcHV0cygg
IiAgZGVmYXVsdCAiLCBvdXQpOw0KICAgICsJCQlleHByX2ZwcmludChwcm9wLT5leHByLCBvdXQp
Ow0KICAgICsJCQlpZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAgICAr
CQkJCWZwdXRzKCIgaWYgIiwgb3V0KTsNCiAgICArCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2li
bGUuZXhwciwgb3V0KTsNCiAgICArCQkJfQ0KICAgICsJCQlmcHV0YygnXG4nLCBvdXQpOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfQ0hPSUNFOg0KICAgICsJCQlmcHV0cygiICAjY2hv
aWNlIHZhbHVlXG4iLCBvdXQpOw0KICAgICsJCQlicmVhazsNCiAgICArCQljYXNlIFBfU0VMRUNU
Og0KICAgICsJCQlmcHV0cyggIiAgc2VsZWN0ICIsIG91dCk7DQogICAgKwkJCWV4cHJfZnByaW50
KHByb3AtPmV4cHIsIG91dCk7DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJy
ZWFrOw0KICAgICsJCWNhc2UgUF9JTVBMWToNCiAgICArCQkJZnB1dHMoICIgIGltcGx5ICIsIG91
dCk7DQogICAgKwkJCWV4cHJfZnByaW50KHByb3AtPmV4cHIsIG91dCk7DQogICAgKwkJCWZwdXRj
KCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgUF9SQU5HRToNCiAgICAr
CQkJZnB1dHMoICIgIHJhbmdlICIsIG91dCk7DQogICAgKwkJCWV4cHJfZnByaW50KHByb3AtPmV4
cHIsIG91dCk7DQogICAgKwkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAg
ICsJCWNhc2UgUF9NRU5VOg0KICAgICsJCQlmcHV0cyggIiAgbWVudSAiLCBvdXQpOw0KICAgICsJ
CQlwcmludF9xdW90ZWRfc3RyaW5nKG91dCwgcHJvcC0+dGV4dCk7DQogICAgKwkJCWZwdXRjKCdc
bicsIG91dCk7DQogICAgKwkJCWJyZWFrOw0KICAgICsJCWNhc2UgUF9TWU1CT0w6DQogICAgKwkJ
CWZwdXRzKCAiICBzeW1ib2wgIiwgb3V0KTsNCiAgICArCQkJZnByaW50ZihvdXQsICIlc1xuIiwg
cHJvcC0+c3ltLT5uYW1lKTsNCiAgICArCQkJYnJlYWs7DQogICAgKwkJZGVmYXVsdDoNCiAgICAr
CQkJZnByaW50ZihvdXQsICIgIHVua25vd24gcHJvcCAlZCFcbiIsIHByb3AtPnR5cGUpOw0KICAg
ICsJCQlicmVhazsNCiAgICArCQl9DQogICAgKwl9DQogICAgKwlpZiAobWVudS0+aGVscCkgew0K
ICAgICsJCWludCBsZW4gPSBzdHJsZW4obWVudS0+aGVscCk7DQogICAgKwkJd2hpbGUgKG1lbnUt
PmhlbHBbLS1sZW5dID09ICdcbicpDQogICAgKwkJCW1lbnUtPmhlbHBbbGVuXSA9IDA7DQogICAg
KwkJZnByaW50ZihvdXQsICIgIGhlbHBcbiVzXG4iLCBtZW51LT5oZWxwKTsNCiAgICArCX0NCiAg
ICArfQ0KICAgICsNCiAgICArdm9pZCB6Y29uZmR1bXAoRklMRSAqb3V0KQ0KICAgICt7DQogICAg
KwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7DQogICAgKwlzdHJ1Y3Qgc3ltYm9sICpzeW07DQogICAg
KwlzdHJ1Y3QgbWVudSAqbWVudTsNCiAgICArDQogICAgKwltZW51ID0gcm9vdG1lbnUubGlzdDsN
CiAgICArCXdoaWxlIChtZW51KSB7DQogICAgKwkJaWYgKChzeW0gPSBtZW51LT5zeW0pKQ0KICAg
ICsJCQlwcmludF9zeW1ib2wob3V0LCBtZW51KTsNCiAgICArCQllbHNlIGlmICgocHJvcCA9IG1l
bnUtPnByb21wdCkpIHsNCiAgICArCQkJc3dpdGNoIChwcm9wLT50eXBlKSB7DQogICAgKwkJCWNh
c2UgUF9DT01NRU5UOg0KICAgICsJCQkJZnB1dHMoIlxuY29tbWVudCAiLCBvdXQpOw0KICAgICsJ
CQkJcHJpbnRfcXVvdGVkX3N0cmluZyhvdXQsIHByb3AtPnRleHQpOw0KICAgICsJCQkJZnB1dHMo
IlxuIiwgb3V0KTsNCiAgICArCQkJCWJyZWFrOw0KICAgICsJCQljYXNlIFBfTUVOVToNCiAgICAr
CQkJCWZwdXRzKCJcbm1lbnUgIiwgb3V0KTsNCiAgICArCQkJCXByaW50X3F1b3RlZF9zdHJpbmco
b3V0LCBwcm9wLT50ZXh0KTsNCiAgICArCQkJCWZwdXRzKCJcbiIsIG91dCk7DQogICAgKwkJCQli
cmVhazsNCiAgICArCQkJZGVmYXVsdDoNCiAgICArCQkJCTsNCiAgICArCQkJfQ0KICAgICsJCQlp
ZiAoIWV4cHJfaXNfeWVzKHByb3AtPnZpc2libGUuZXhwcikpIHsNCiAgICArCQkJCWZwdXRzKCIg
IGRlcGVuZHMgIiwgb3V0KTsNCiAgICArCQkJCWV4cHJfZnByaW50KHByb3AtPnZpc2libGUuZXhw
ciwgb3V0KTsNCiAgICArCQkJCWZwdXRjKCdcbicsIG91dCk7DQogICAgKwkJCX0NCiAgICArCQl9
DQogICAgKw0KICAgICsJCWlmIChtZW51LT5saXN0KQ0KICAgICsJCQltZW51ID0gbWVudS0+bGlz
dDsNCiAgICArCQllbHNlIGlmIChtZW51LT5uZXh0KQ0KICAgICsJCQltZW51ID0gbWVudS0+bmV4
dDsNCiAgICArCQllbHNlIHdoaWxlICgobWVudSA9IG1lbnUtPnBhcmVudCkpIHsNCiAgICArCQkJ
aWYgKG1lbnUtPnByb21wdCAmJiBtZW51LT5wcm9tcHQtPnR5cGUgPT0gUF9NRU5VKQ0KICAgICsJ
CQkJZnB1dHMoIlxuZW5kbWVudVxuIiwgb3V0KTsNCiAgICArCQkJaWYgKG1lbnUtPm5leHQpIHsN
CiAgICArCQkJCW1lbnUgPSBtZW51LT5uZXh0Ow0KICAgICsJCQkJYnJlYWs7DQogICAgKwkJCX0N
CiAgICArCQl9DQogICAgKwl9DQogICAgK30NCiAgICArDQogICAgKyNpbmNsdWRlICJ6Y29uZi5s
ZXguYyINCiAgICArI2luY2x1ZGUgInV0aWwuYyINCiAgICArI2luY2x1ZGUgImNvbmZkYXRhLmMi
DQogICAgKyNpbmNsdWRlICJleHByLmMiDQogICAgKyNpbmNsdWRlICJzeW1ib2wuYyINCiAgICAr
I2luY2x1ZGUgIm1lbnUuYyINCiAgICArI2luY2x1ZGUgInByZXByb2Nlc3MuYyINCiAgICAtLSAN
CiAgICAyLjcuNA0KICAgIA0KICAgIA0KICAgIA0KICAgIF9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0K
ICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8a-00068v-KU; Thu, 19 Sep 2019 15:14:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8Z-00068q-5w
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:27 +0000
X-Inumbo-ID: 2a23efb7-daf0-11e9-9661-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 2a23efb7-daf0-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 15:14:25 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A271D28;
 Thu, 19 Sep 2019 08:14:25 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0574E3F575;
 Thu, 19 Sep 2019 08:14:23 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:05 +0800
Message-Id: <20190919151412.51000-1-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [UNIKRAFT PATCH v4 0/7] Implement Arm64 timer APIs
 for scheduler(series#4)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Kaly Xin <Kaly.Xin@arm.com>, Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Jia He <justin.he@arm.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q3VycmVudGx5LCB0aGUgdGltZXIgbGlicmFyeSBvbmx5IHByb3ZpZGVzIHNvbWUgc2ltcGxlIGZ1
bmN0aW9ucyBmb3IKdW5pa3JhZnQgdG8gcHJpbnQgdGltZXN0YW1wLiBCdXQgaXQncyBub3QgZW5v
dWdoIGZvciBzY2hlZHVsZXIuIEluCnRoaXMgc2VyaWVzLCB3ZSBpbXBsZW1lbnRlZCBnZW5lcmlj
X3RpbWVyX2NwdV9ibG9jayBhbmQgdGltZXIgaW50ZXJydXB0CmZvciBzY2hlZHVsZXIgdG8gc2xl
ZXAgYW5kIHdha2V1cC4KCkNoYW5nZXM6CnY0OiBhZGRyZXNzIGNvbW1lbnRzIGZyb20gU2FudGlh
Z28sIEp1bGllbiAmIFNoYXJhbi4KICAgIGFkZCBhc3NlcnQgZm9yIG5zX3RvX3RpY2tzLCB0aWNr
c190b19ucwogICAgcmV2ZXJ0IHNvbWUgaW5jb3JyZWN0IGFkZHJlc3NpbmcgaW4gdjMgKHBhdGNo
IDA1KQogICAgYWRkIGlzYiBhZnRlciB3cml0dGluZyB0aGUgc3lzIHJlZwogICAgc3BsaXQgYXJj
aCBzcGVjaWZpYyBjb2RlcyBpbnRvIGFybS9hcm02NCwgbWFrZSBhIHN0dWIgZm9yIGFybQp2Mzog
QWRkcmVzc2VkIG1vc3Qgb2YgdGhlIGNvbW1lbnRzIGZyb20gSnVsaWVuCiAgICBkcm9wIHBhdGNo
MSB0byBnZXQgcmlkIG9mIG5vcCgpCiAgICByZXdyaXRlIGNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCkK
ICAgIGFkZCBpc2IoKSBhZnRlciB3cml0aW5nIHN5cyByZWdpc3RlcnMKICAgIHJlbW92ZSBjb3Vu
dGVyX21pbmlfZGVsdGEKICAgIHJld3JpdGUgZ2VuZXJpY190aW1lcl9jcHVfYmxvY2soKSBhcyBw
ZXIgbWluaW9zIGltcGxlbWVudGF0aW9uCiAgICByZW1vdmUgMiB1bm5lY2Vzc2FyeSBnZW5lcmlj
X3RpbWVyX21hc2tfaXJxKCkKICAgIG5ld2x5IGFkZCBwYXRjaDcgdG8gbW92ZSB0aW1lLmMgdG8g
dGltZV9hcm02NC5jCnYyOiBubyBmdW5jdGlvbmFsIGNoYW5nZXMKICAgIHJlYmFzZSBkdWUgdG8g
dGhlIGNoYW5nZXMgb2Ygc2VyaWVzIGxpYm9mdyBhbmQgZ2ljLXYyIGlycS4KCkppYSBIZSAoNik6
CiAgcGxhdC9jb21tb246IENhbGN1bGF0ZSBzaGlmdCBmYWN0b3JzIGZvciBjb3ZlcnNpb24gYmV0
d2VlbiBucyBhbmQgdGljawogIHBsYXQvY29tbW9uOiBSZWNvcmQgYm9vdF90aWNrcyBhdCB2ZXJ5
IGJlZ2lubmluZwogIHBsYXQvY29tbW9uOiBTaGFyZSBhcmNoX3RpbWVyIGZkdCBub2RlIGFtb25n
IGZ1bmN0aW9ucwogIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3RlciBJUlEgZm9yIGFyY2hf
dGltZXIKICBwbGF0L2NvbW1vbjogSW1wbGVtZW50IGdlbmVyaWNfdGltZXJfY3B1X2Jsb2NrX3Vu
dGlsCiAgcGxhdC9jb21tb246IFNwbGl0IGFyY2ggc3BlY2lmaWMgY29kZXMgZnJvbSB0aW1lLmMg
dG8gYXJteyw2NH0vdGltZS5oCgpXZWkgQ2hlbiAoMSk6CiAgcGxhdC9jb21tb246IFJlbmFtZSBy
ZWFkX3ZpcnR1YWxfY291bnQgdG8gZ2VuZXJpY190aW1lcl9nZXRfdGlja3MKCiBwbGF0L2NvbW1v
bi9hcm0vdGltZS5jICAgICAgICAgICAgICAgfCAzMDAgKysrKysrKysrKysrKysrKysrLS0tLS0t
LS0tCiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm0vdGltZS5oICAgfCAgNjkgKysrKysrCiBw
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90aW1lLmggfCAxMTggKysrKysrKysrKysKIHBs
YXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaCAgICAgICB8ICAgNSArCiBwbGF0L2RyaXZlcnMv
Z2ljL2dpYy12Mi5jICAgICAgICAgICAgfCAgIDIgKy0KIHBsYXQvZHJpdmVycy9pbmNsdWRlL2dp
Yy9naWMtdjIuaCAgICB8ICAgMiArLQogcGxhdC9kcml2ZXJzL2luY2x1ZGUvb2Z3L2dpY19mZHQu
aCAgIHwgICAyICstCiA3IGZpbGVzIGNoYW5nZWQsIDM5OSBpbnNlcnRpb25zKCspLCA5OSBkZWxl
dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm0v
dGltZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQv
dGltZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vdGltZS5o
CgotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:33 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8f-00069V-M0; Thu, 19 Sep 2019 15:14:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8e-00069K-2w
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:32 +0000
X-Inumbo-ID: 2c545686-daf0-11e9-9661-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 2c545686-daf0-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 15:14:28 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 079D91570;
 Thu, 19 Sep 2019 08:14:28 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 04B693F575;
 Thu, 19 Sep 2019 08:14:25 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:06 +0800
Message-Id: <20190919151412.51000-2-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919151412.51000-1-justin.he@arm.com>
References: <20190919151412.51000-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v4 1/7] plat/common: Calculate shift
 factors for coversion between ns and tick
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Jia He <justin.he@arm.com>, Wei Chen <wei.chen@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Kaly Xin <Kaly.Xin@arm.com>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgaGFkIHNoaWZ0IGZhY3RvciBmb3IgY292ZXJ0aW5nIGNvdW50ZXIgdGlja3MgdG8gbnMsIGJ1
dCBpdCdzIG5vdAplbm91Z2guIFNvbWV0aW1lLCB3ZSBuZWVkIHRvIGNvdmVydCBucyB0byB0aWNr
cy4gRm9yIGV4YW1wbGUsIHdlJ2xsCnRyYW5zZmVyIHNsZWVwKG5zKSB0byBjb3VudGVyIHRpY2tz
LiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBzaGlmdCBmYWN0b3IsCnRoZSBjb252ZXJzaW9uIGFjY3Vy
YWN5IHdpbGwgYmUgbG93ZXIuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgQ2hlbiA8d2VpLmNoZW5AYXJt
LmNvbT4KU2lnbmVkLW9mZi1ieTogSmlhbnlvbmcgV3UgPGppYW55b25nLnd1QGFybS5jb20+ClNp
Z25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogcGxhdC9jb21tb24v
YXJtL3RpbWUuYyB8IDExOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
LQogMSBmaWxlIGNoYW5nZWQsIDkzIGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQoKZGlm
ZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5j
CmluZGV4IDFiMzA5MDMuLjAyMTU5MzIgMTAwNjQ0Ci0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1l
LmMKKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwpAQCAtNDcsMjEgKzQ3LDg5IEBACiBzdGF0
aWMgdWludDY0X3QgYm9vdF90aWNrczsKIHN0YXRpYyB1aW50MzJfdCBjb3VudGVyX2ZyZXE7CiAK
LS8qCi0gKiBTaGlmdCBmYWN0b3IgZm9yIGNvdW50ZXIgc2NhbGluZyBtdWx0aXBsaWVyOyByZWZl
cnJlZCB0byBhcyBTIGluIHRoZQotICogZm9sbG93aW5nIGNvbW1lbnRzLgotICovCi1zdGF0aWMg
dWludDhfdCBjb3VudGVyX3NoaWZ0OwogCi0vKiBNdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIGNv
dW50ZXIgdGlja3MgdG8gbnNlY3MuICgwLlMpIGZpeGVkIHBvaW50LiAqLworLyogU2hpZnQgZmFj
dG9yIGZvciBjb252ZXJ0aW5nIHRpY2tzIHRvIG5zICovCitzdGF0aWMgdWludDhfdCBjb3VudGVy
X3NoaWZ0X3RvX25zOworCisvKiBTaGlmdCBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgbnMgdG8gdGlj
a3MgKi8KK3N0YXRpYyB1aW50OF90IGNvdW50ZXJfc2hpZnRfdG9fdGljazsKKworLyogTXVsdGlw
bGllciBmb3IgY29udmVydGluZyBjb3VudGVyIHRpY2tzIHRvIG5zZWNzICovCiBzdGF0aWMgdWlu
dDMyX3QgbnNfcGVyX3RpY2s7CiAKKy8qIE11bHRpcGxpZXIgZm9yIGNvbnZlcnRpbmcgbnNlY3Mg
dG8gY291bnRlciB0aWNrcyAqLworc3RhdGljIHVpbnQzMl90IHRpY2tfcGVyX25zOworCisvKgor
ICogVGhlIG1heGltdW0gdGltZSByYW5nZSBpbiBzZWNvbmRzIHdoaWNoIGNhbiBiZSBjb252ZXJ0
ZWQgYnkgbXVsdGlwbGllcgorICogYW5kIHNoaWZ0IGZhY3RvcnMuIFRoaXMgd2lsbCBndWFyYW50
ZWUgdGhlIGNvbnZlcnRlZCB2YWx1ZSBub3QgdG8gZXhjZWVkCisgKiA2NC1iaXQgdW5zaWduZWQg
aW50ZWdlci4gSW5jcmVhc2UgdGhlIHRpbWUgcmFuZ2Ugd2lsbCByZWR1Y2UgdGhlIGFjY3VyYWN5
CisgKiBvZiBjb252ZXJzaW9uLCBiZWNhdXNlIHdlIHdpbGwgZ2V0IHNtYWxsZXIgbXVsdGlwbGll
ciBhbmQgc2hpZnQgZmFjdG9ycy4KKyAqIEluIHRoaXMgY2FzZSwgd2Ugc2VsZWN0ZWQgMzYwMHMg
YXMgdGhlIHRpbWUgcmFuZ2UuCisgKi8KKyNkZWZpbmUgX19NQVhfQ09OVkVSVF9TRUNTCSgzNjAw
VUwpCisjZGVmaW5lIF9fTUFYX0NPTlZFUlRfTlMJKDM2MDBVTCpOU0VDX1BFUl9TRUMpCitzdGF0
aWMgdWludDY0X3QgbWF4X2NvbnZlcnRfdGlja3M7CisKIC8qIEhvdyBtYW55IG5hbm9zZWNvbmRz
IHBlciBzZWNvbmQgKi8KICNkZWZpbmUgTlNFQ19QRVJfU0VDIHVrYXJjaF90aW1lX3NlY190b19u
c2VjKDEpCiAKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgdGlja3NfdG9fbnModWludDY0X3QgdGlj
a3MpCiB7Ci0JcmV0dXJuIChuc19wZXJfdGljayAqIHRpY2tzKSA+PiBjb3VudGVyX3NoaWZ0Owor
CVVLX0FTU0VSVCh0aWNrcyA8PSBtYXhfY29udmVydF90aWNrcyk7CisKKwlyZXR1cm4gKG5zX3Bl
cl90aWNrICogdGlja3MpID4+IGNvdW50ZXJfc2hpZnRfdG9fbnM7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdWludDY0X3QgbnNfdG9fdGlja3ModWludDY0X3QgbnMpCit7CisJVUtfQVNTRVJUKG5zIDw9
IF9fTUFYX0NPTlZFUlRfTlMpOworCisJcmV0dXJuICh0aWNrX3Blcl9ucyAqIG5zKSA+PiBjb3Vu
dGVyX3NoaWZ0X3RvX3RpY2s7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgbXVsdGlwbGllci9zaGlm
dCBmYWN0b3JzIGZvciBzY2FsZWQgbWF0aC4KKyAqLworc3RhdGljIHZvaWQgY2FsY3VsYXRlX211
bHRfc2hpZnQodWludDMyX3QgKm11bHQsIHVpbnQ4X3QgKnNoaWZ0LAorCQl1aW50NjRfdCBmcm9t
LCB1aW50NjRfdCB0bykKK3sKKwl1aW50NjRfdCB0bXA7CisJdWludDMyX3Qgc2Z0LCBzZnRhY2Mg
PSAzMjsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzaGlmdCBmYWN0b3Igd2hpY2ggaXMgbGlt
aXRpbmcgdGhlIGNvbnZlcnNpb24KKwkgKiByYW5nZToKKwkgKi8KKwl0bXAgPSAoKHVpbnQ2NF90
KV9fTUFYX0NPTlZFUlRfU0VDUyAqIGZyb20pID4+IDMyOworCXdoaWxlICh0bXApIHsKKwkJdG1w
ID4+PSAxOworCQlzZnRhY2MtLTsKKwl9CisKKworCS8qCisJICogQ2FsY3VsYXRlIHNoaWZ0IGZh
Y3RvciAoUykgYW5kIHNjYWxpbmcgbXVsdGlwbGllciAoTSkuCisJICoKKwkgKiAoUykgbmVlZHMg
dG8gYmUgdGhlIGxhcmdlc3Qgc2hpZnQgZmFjdG9yICg8PSBtYXhfc2hpZnQpIHdoZXJlCisJICog
dGhlIHJlc3VsdCBvZiB0aGUgTSBjYWxjdWxhdGlvbiBiZWxvdyBmaXRzIGludG8gdWludDMyX3QK
KwkgKiB3aXRob3V0IHRydW5jYXRpb24uCisJICoKKwkgKiBtdWx0aXBsaWVyID0gKHRhcmdldCA8
PCBzaGlmdCkgLyBzb3VyY2UKKwkgKi8KKwlmb3IgKHNmdCA9IDMyOyBzZnQgPiAwOyBzZnQtLSkg
eworCQl0bXAgPSAodWludDY0X3QpIHRvIDw8IHNmdDsKKworCQkvKiBFbnN1cmluZyB3ZSByb3Vu
ZCB0byBuZWFyZXN0IHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJCSAqIG11bHRpcGxpZXIKKwkJICov
CisJCXRtcCArPSBmcm9tIC8gMjsKKwkJdG1wIC89IGZyb207CisJCWlmICgodG1wID4+IHNmdGFj
YykgPT0gMCkKKwkJCWJyZWFrOworCX0KKwkqbXVsdCA9IHRtcDsKKwkqc2hpZnQgPSBzZnQ7CiB9
CiAKIC8qCkBAIC0xNDUsMjkgKzIxMywyOSBAQCBzdGF0aWMgX191NjQgIGdlbmVyaWNfdGltZXJf
ZXBvY2hvZmZzZXQodm9pZCkKIAogc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkK
IHsKKwljb3VudGVyX2ZyZXEgPSBnZXRfY291bnRlcl9mcmVxdWVuY3koKTsKKwogCS8qCi0JICog
Q2FsY3VsYXRlIGNvdW50ZXIgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIuCi0J
ICoKLQkgKiBjb3VudGVyX3NoaWZ0IChTKSBuZWVkcyB0byBiZSB0aGUgbGFyZ2VzdCAoPD0zMikg
c2hpZnQgZmFjdG9yIHdoZXJlCi0JICogdGhlIHJlc3VsdCBvZiB0aGUgbnNfcGVyX3RpY2sgY2Fs
Y3VsYXRpb24gYmVsb3cgZml0cyBpbnRvIHVpbnQzMl90Ci0JICogd2l0aG91dCB0cnVuY2F0aW9u
LiBOb3RlIHRoYXQgd2UgZGlzYWxsb3cgYW4gUyBvZiB6ZXJvIHRvIGVuc3VyZQotCSAqIHRoZSBs
b29wIGFsd2F5cyB0ZXJtaW5hdGVzLgotCSAqCi0JICogKDAuUykgbnNfcGVyX3RpY2sgPSBOU0VD
X1BFUl9TRUMgKFMuUykgLyBjb3VudGVyX2ZyZXEgKFMuMCkKKwkgKiBDYWxjdWxhdGUgdGhlIHNo
aWZ0IGZhY3RvciBhbmQgc2NhbGluZyBtdWx0aXBsaWVyIGZvcgorCSAqIGNvbnZlcnRpbmcgdGlj
a3MgdG8gbnMuCiAJICovCi0JdWludDY0X3QgdG1wOworCWNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZu
c19wZXJfdGljaywgJmNvdW50ZXJfc2hpZnRfdG9fbnMsCisJCQkJY291bnRlcl9mcmVxLCBOU0VD
X1BFUl9TRUMpOwogCi0JY291bnRlcl9mcmVxID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KCk7Ci0J
Y291bnRlcl9zaGlmdCA9IDMyOwotCWRvIHsKLQkJdG1wID0gKE5TRUNfUEVSX1NFQyA8PCBjb3Vu
dGVyX3NoaWZ0KSAvIGNvdW50ZXJfZnJlcTsKLQkJaWYgKCh0bXAgJiAweEZGRkZGRkZGMDAwMDAw
MDBMKSA9PSAwTCkKLQkJCW5zX3Blcl90aWNrID0gKHVpbnQzMl90KXRtcDsKLQkJZWxzZQotCQkJ
Y291bnRlcl9zaGlmdC0tOwotCX0gd2hpbGUgKGNvdW50ZXJfc2hpZnQgPiAwICYmIG5zX3Blcl90
aWNrID09IDBMKTsKKwkvKiBXZSBkaXNhbGxvdyB6ZXJvIG5zX3Blcl90aWNrICovCiAJVUtfQlVH
T04oIW5zX3Blcl90aWNrKTsKIAorCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzaGlmdCBmYWN0b3Ig
YW5kIHNjYWxpbmcgbXVsdGlwbGllciBmb3IKKwkgKiBjb252ZXJ0aW5nIG5zIHRvIHRpY2tzLgor
CSAqLworCWNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZ0aWNrX3Blcl9ucywgJmNvdW50ZXJfc2hpZnRf
dG9fdGljaywKKwkJCQlOU0VDX1BFUl9TRUMsIGNvdW50ZXJfZnJlcSk7CisKKwkvKiBXZSBkaXNh
bGxvdyB6ZXJvIG5zX3Blcl90aWNrICovCisJVUtfQlVHT04oIXRpY2tfcGVyX25zKTsKKworCW1h
eF9jb252ZXJ0X3RpY2tzID0gX19NQVhfQ09OVkVSVF9TRUNTKmNvdW50ZXJfZnJlcTsKIAkvKgog
CSAqIE1vbm90b25pYyB0aW1lIGJlZ2lucyBhdCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNv
dW50ZXIKIAkgKiBiZWZvcmUgY2FsaWJyYXRpb24pLgotLSAKMi4xNy4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8g-00069t-Ni; Thu, 19 Sep 2019 15:14:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8f-00069T-QM
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:33 +0000
X-Inumbo-ID: 2dc8d582-daf0-11e9-b299-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2dc8d582-daf0-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 15:14:30 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5EC5C1597;
 Thu, 19 Sep 2019 08:14:30 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 5F0713F575;
 Thu, 19 Sep 2019 08:14:28 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:07 +0800
Message-Id: <20190919151412.51000-3-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919151412.51000-1-justin.he@arm.com>
References: <20190919151412.51000-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v4 2/7] plat/common: Rename
 read_virtual_count to generic_timer_get_ticks
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Jia He <justin.he@arm.com>, Wei Chen <wei.chen@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Kaly Xin <Kaly.Xin@arm.com>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5jb20+CgpSZW5hbWUgdG8gZ2VuZXJpY190aW1l
cl9nZXRfdGlja3Mgd291bGQgYmUgZ29vZCBmb3IgdW5pZmluZwp0aGUgcHJlZml4IG9mIHRoZSBn
ZW5lcmljIHRpbWVyIGZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hl
bkBhcm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNv
bT4KU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2Nv
bW1vbi9hcm0vdGltZS5jIHwgMTAgKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0
aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGlt
ZS5jIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwppbmRleCAwMjE1OTMyLi44MTI3NDU0IDEwMDY0
NAotLS0gYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCisrKyBiL3BsYXQvY29tbW9uL2FybS90aW1l
LmMKQEAgLTE3OSw3ICsxNzksNyBAQCBlbmRub2ZyZXE6CiAgKiB0aGUgdHdvIHJlYWQgdmFsdWVz
LiBJZiBiaXRbMzJdIGlzIGRpZmZlcmVudCwga2VlcCB0aGUgZmlyc3QgdmFsdWUsCiAgKiBvdGhl
cndpc2Uga2VlcCB0aGUgc2Vjb25kIHZhbHVlLgogICovCi1zdGF0aWMgdWludDY0X3QgcmVhZF92
aXJ0dWFsX2NvdW50KHZvaWQpCitzdGF0aWMgdWludDY0X3QgZ2VuZXJpY190aW1lcl9nZXRfdGlj
a3Modm9pZCkKIHsKICAgICB1aW50NjRfdCB2YWxfMXN0LCB2YWxfMm5kOwogCkBAIC0xODgsNyAr
MTg4LDcgQEAgc3RhdGljIHVpbnQ2NF90IHJlYWRfdmlydHVhbF9jb3VudCh2b2lkKQogICAgIHJl
dHVybiAoKCh2YWxfMXN0IF4gdmFsXzJuZCkgPj4gMzIpICYgMSkgPyB2YWxfMXN0IDogdmFsXzJu
ZDsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90IHJlYWRfdmlydHVhbF9jb3VudCh2
b2lkKQorc3RhdGljIGlubGluZSB1aW50NjRfdCBnZW5lcmljX3RpbWVyX2dldF90aWNrcyh2b2lk
KQogewogCXJldHVybiBTWVNSRUdfUkVBRDY0KGNudHZjdF9lbDApOwogfQpAQCAtMjAwLDEzICsy
MDAsMTMgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByZWFkX3ZpcnR1YWxfY291bnQodm9pZCkK
ICAqLwogc3RhdGljIF9fbnNlYyBnZW5lcmljX3RpbWVyX21vbm90b25pYyh2b2lkKQogewotCXJl
dHVybiAoX19uc2VjKXRpY2tzX3RvX25zKHJlYWRfdmlydHVhbF9jb3VudCgpIC0gYm9vdF90aWNr
cyk7CisJcmV0dXJuIChfX25zZWMpdGlja3NfdG9fbnMoZ2VuZXJpY190aW1lcl9nZXRfdGlja3Mo
KSAtIGJvb3RfdGlja3MpOwogfQogCiAvKgogICogUmV0dXJuIGVwb2NoIG9mZnNldCAod2FsbCB0
aW1lIG9mZnNldCB0byBtb25vdG9uaWMgY2xvY2sgc3RhcnQpLgogICovCi1zdGF0aWMgX191NjQg
IGdlbmVyaWNfdGltZXJfZXBvY2hvZmZzZXQodm9pZCkKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmlj
X3RpbWVyX2Vwb2Nob2Zmc2V0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDAsNyArMjQw
LDcgQEAgc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkKIAkgKiBNb25vdG9uaWMg
dGltZSBiZWdpbnMgYXQgYm9vdF90aWNrcyAoZmlyc3QgcmVhZCBvZiBjb3VudGVyCiAJICogYmVm
b3JlIGNhbGlicmF0aW9uKS4KIAkgKi8KLQlib290X3RpY2tzID0gcmVhZF92aXJ0dWFsX2NvdW50
KCk7CisJYm9vdF90aWNrcyA9IGdlbmVyaWNfdGltZXJfZ2V0X3RpY2tzKCk7CiAKIAlyZXR1cm4g
MDsKIH0KLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8k-0006Ah-Py; Thu, 19 Sep 2019 15:14:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8j-0006AP-53
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:37 +0000
X-Inumbo-ID: 2eb5628c-daf0-11e9-9661-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 2eb5628c-daf0-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 15:14:33 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BF17415A2;
 Thu, 19 Sep 2019 08:14:32 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id B5E5A3F575;
 Thu, 19 Sep 2019 08:14:30 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:08 +0800
Message-Id: <20190919151412.51000-4-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919151412.51000-1-justin.he@arm.com>
References: <20190919151412.51000-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v4 3/7] plat/common: Record
 boot_ticks at very beginning
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Jia He <justin.he@arm.com>, Wei Chen <wei.chen@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Kaly Xin <Kaly.Xin@arm.com>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBvc2l0aW9uIG9mIHJlY29yZGluZyBib290X3RpY2tzIGlzIGEgbGl0dGxlIGxhdGVyLiBX
ZSBtb3ZlZAppdCB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgcGxhdGZvcm0gY2FsbCB0aW1lciBp
bml0aWFsaXphdGlvbgpmdW5jdGlvbi4KClNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hl
bkBhcm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNv
bT4KU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2Nv
bW1vbi9hcm0vdGltZS5jIHwgMTEgKysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2Vy
dGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vYXJtL3Rp
bWUuYyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMKaW5kZXggODEyNzQ1NC4uOThiMzc2NCAxMDA2
NDQKLS0tIGEvcGxhdC9jb21tb24vYXJtL3RpbWUuYworKysgYi9wbGF0L2NvbW1vbi9hcm0vdGlt
ZS5jCkBAIC0yMzYsMTEgKzIzNiw2IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY190aW1lcl9pbml0KHZv
aWQpCiAJVUtfQlVHT04oIXRpY2tfcGVyX25zKTsKIAogCW1heF9jb252ZXJ0X3RpY2tzID0gX19N
QVhfQ09OVkVSVF9TRUNTKmNvdW50ZXJfZnJlcTsKLQkvKgotCSAqIE1vbm90b25pYyB0aW1lIGJl
Z2lucyBhdCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNvdW50ZXIKLQkgKiBiZWZvcmUgY2Fs
aWJyYXRpb24pLgotCSAqLwotCWJvb3RfdGlja3MgPSBnZW5lcmljX3RpbWVyX2dldF90aWNrcygp
OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODMsNiArMjc4LDEyIEBAIHZvaWQgdWtwbGF0X3RpbWVf
aW5pdCh2b2lkKQogewogCWludCByYzsKIAorCS8qCisJICogTW9ub3RvbmljIHRpbWUgYmVnaW5z
IGF0IGJvb3RfdGlja3MgKGZpcnN0IHJlYWQgb2YgY291bnRlcgorCSAqIGJlZm9yZSBjYWxpYnJh
dGlvbikuCisJICovCisJYm9vdF90aWNrcyA9IGdlbmVyaWNfdGltZXJfZ2V0X3RpY2tzKCk7CisK
IAlyYyA9IHVrcGxhdF9pcnFfcmVnaXN0ZXIoMCwgdGltZXJfaGFuZGxlciwgTlVMTCk7CiAJaWYg
KHJjIDwgMCkKIAkJVUtfQ1JBU0goIkZhaWxlZCB0byByZWdpc3RlciB0aW1lciBpbnRlcnJ1cHQg
aGFuZGxlclxuIik7Ci0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8l-0006B8-RU; Thu, 19 Sep 2019 15:14:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8k-0006Af-Og
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:38 +0000
X-Inumbo-ID: 30a6bdf0-daf0-11e9-b299-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 30a6bdf0-daf0-11e9-b299-bc764e2007e4;
 Thu, 19 Sep 2019 15:14:35 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3DB9C15BF;
 Thu, 19 Sep 2019 08:14:35 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 268FD3F575;
 Thu, 19 Sep 2019 08:14:32 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:09 +0800
Message-Id: <20190919151412.51000-5-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919151412.51000-1-justin.he@arm.com>
References: <20190919151412.51000-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v4 4/7] plat/common: Share
 arch_timer fdt node among functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Jia He <justin.he@arm.com>, Wei Chen <wei.chen@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Kaly Xin <Kaly.Xin@arm.com>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2V2ZXJhbCBmdW5jdGlvbiB3aWxsIHVzZSB0aGUgYXJjaF90aW1lciBmZHQgbm9kZSB0byBnZXQg
aW5mb3JtYXRpb24KZnJvbSBkZXZpY2UgdHJlZS4gV2UgZmluZCBpdCBvbmNlLCBhbmQgc2hhcmUg
aXQgYW1vbmcgZnVuY3Rpb25zLiB0aGlzCndpbGwgYXZvaWQgZmluZCBhcmNoX3RpbWVyIGZkdCBl
dmVyeXdoZXJlLgoKU2lnbmVkLW9mZi1ieTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5jb20+ClNp
Z25lZC1vZmYtYnk6IEppYW55b25nIFd1IDxqaWFueW9uZy53dUBhcm0uY29tPgpTaWduZWQtb2Zm
LWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2FybS90aW1l
LmMgfCA1OSArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmls
ZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwppbmRleCA5
OGIzNzY0Li45NzUyMWM1IDEwMDY0NAotLS0gYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCisrKyBi
L3BsYXQvY29tbW9uL2FybS90aW1lLmMKQEAgLTMzLDYgKzMzLDcgQEAKICAqLwogI2luY2x1ZGUg
PHN0ZGxpYi5oPgogI2luY2x1ZGUgPGxpYmZkdC5oPgorI2luY2x1ZGUgPG9mdy9mZHQuaD4KICNp
bmNsdWRlIDx1ay9hc3NlcnQuaD4KICNpbmNsdWRlIDx1ay9wbGF0L3RpbWUuaD4KICNpbmNsdWRl
IDx1ay9wbGF0L2lycS5oPgpAQCAtNDQsNiArNDUsMTIgQEAKICAqIHBvcnRhYmxlIHdheSB0byBo
YW5kb3ZlciB0aGUgRFRCIGVudHJ5IHBvaW50IHRvIGNvbW1vbiBwbGF0Zm9ybSBjb2RlICovCiAj
aW5jbHVkZSA8a3ZtL2NvbmZpZy5oPgogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyY2hf
dGltZXJfbGlzdFtdID0geworCSJhcm0sYXJtdjgtdGltZXIiLAorCSJhcm0sYXJtdjctdGltZXIi
LAorCU5VTEwKK307CisKIHN0YXRpYyB1aW50NjRfdCBib290X3RpY2tzOwogc3RhdGljIHVpbnQz
Ml90IGNvdW50ZXJfZnJlcTsKIApAQCAtMTMyLDQxICsxMzksMjYgQEAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlX211bHRfc2hpZnQodWludDMyX3QgKm11bHQsIHVpbnQ4X3QgKnNoaWZ0LAogCSpzaGlm
dCA9IHNmdDsKIH0KIAotLyoKLSAqIE9uIGEgZmV3IHBsYXRmb3JtcyB0aGUgZnJlcXVlbmN5IGlz
IG5vdCBjb25maWd1cmVkIGNvcnJlY3RseQotICogYnkgdGhlIGZpcm13YXJlLiBBIHByb3BlcnR5
IGluIHRoZSBEVCAoY2xvY2stZnJlcXVlbmN5KSBoYXMKLSAqIGJlZW4gaW50cm9kdWNlZCB0byB3
b3JrYXJvdW5kIHRob3NlIGZpcm13YXJlLiBTbywgd2Ugd2lsbCB0cnkKLSAqIHRvIGdldCBjbG9j
ay1mcmVxdWVuY3kgZnJvbSBEVCBmaXJzdCwgaWYgZmFpbGVkIHdlIHdpbGwgcmVhZAotICogdGhl
IHJlZ2lzdGVyIGRpcmVjdGx5LgotICovCi1zdGF0aWMgdWludDMyX3QgZ2V0X2NvdW50ZXJfZnJl
cXVlbmN5KHZvaWQpCitzdGF0aWMgdWludDMyX3QgZ2VuZXJpY190aW1lcl9nZXRfZnJlcXVlbmN5
KGludCBmZHRfdGltZXIpCiB7Ci0JaW50IGZkdF9hcmNodGltZXIsIGxlbjsKKwlpbnQgbGVuOwog
CWNvbnN0IHVpbnQ2NF90ICpmZHRfZnJlcTsKIAotCS8qIFRyeSB0byBmaW5kIGFybSxhcm12OC10
aW1lciBmaXJzdCAqLwotCWZkdF9hcmNodGltZXIgPSBmZHRfbm9kZV9vZmZzZXRfYnlfY29tcGF0
aWJsZShfbGlia3ZtcGxhdF9jZmcuZHRiLAotCQkJCQkJLTEsICJhcm0sYXJtdjgtdGltZXIiKTsK
LQkvKiBJZiBmYWlsZWQsIHRyeSB0byBmaW5kIGFybSxhcm12Ny10aW1lciAqLwotCWlmIChmZHRf
YXJjaHRpbWVyIDwgMCkKLQkJZmR0X2FyY2h0aW1lciA9IGZkdF9ub2RlX29mZnNldF9ieV9jb21w
YXRpYmxlKAotCQkJCQkJCV9saWJrdm1wbGF0X2NmZy5kdGIsCi0JCQkJCQkJLTEsICJhcm0sYXJt
djctdGltZXIiKTsKLQkvKiBEVCBkb2Vzbid0IHByb3ZpZGUgYXJjaCB0aW1lciBpbmZvcm1hdGlv
biAqLwotCWlmIChmZHRfYXJjaHRpbWVyIDwgMCkKLQkJZ290byBlbmRub2ZyZXE7Ci0KKwkvKgor
CSAqIE9uIGEgZmV3IHBsYXRmb3JtcyB0aGUgZnJlcXVlbmN5IGlzIG5vdCBjb25maWd1cmVkIGNv
cnJlY3RseQorCSAqIGJ5IHRoZSBmaXJtd2FyZS4gQSBwcm9wZXJ0eSBpbiB0aGUgRFQgKGNsb2Nr
LWZyZXF1ZW5jeSkgaGFzCisJICogYmVlbiBpbnRyb2R1Y2VkIHRvIHdvcmthcm91bmQgdGhvc2Ug
ZmlybXdhcmUuCisJICovCiAJZmR0X2ZyZXEgPSBmZHRfZ2V0cHJvcChfbGlia3ZtcGxhdF9jZmcu
ZHRiLAotCQkJZmR0X2FyY2h0aW1lciwgImNsb2NrLWZyZXF1ZW5jeSIsICZsZW4pOworCQkJZmR0
X3RpbWVyLCAiY2xvY2stZnJlcXVlbmN5IiwgJmxlbik7CiAJaWYgKCFmZHRfZnJlcSB8fCAobGVu
IDw9IDApKSB7CiAJCXVrX3ByX2luZm8oIk5vIGNsb2NrLWZyZXF1ZW5jeSBmb3VuZCwgcmVhZGlu
ZyBmcm9tIHJlZ2lzdGVyIGRpcmVjdGx5LlxuIik7Ci0JCWdvdG8gZW5kbm9mcmVxOworCisJCS8q
IE5vIHdvcmthcm91bmQsIGdldCBmcm9tIHJlZ2lzdGVyIGRpcmVjdGx5ICovCisJCXJldHVybiBT
WVNSRUdfUkVBRDMyKGNudGZycV9lbDApOwogCX0KIAogCXJldHVybiBmZHQzMl90b19jcHUoZmR0
X2ZyZXFbMF0pOwotCi1lbmRub2ZyZXE6Ci0JcmV0dXJuIFNZU1JFR19SRUFEMzIoY250ZnJxX2Vs
MCk7CiB9CiAKICNpZmRlZiBDT05GSUdfQVJNNjRfRVJSQVRVTV84NTg5MjEKQEAgLTIxMSw5ICsy
MDMsMTAgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyaWNfdGltZXJfZXBvY2hvZmZzZXQodm9pZCkK
IAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkKK3N0
YXRpYyBpbnQgZ2VuZXJpY190aW1lcl9pbml0KGludCBmZHRfdGltZXIpCiB7Ci0JY291bnRlcl9m
cmVxID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KCk7CisJLyogR2V0IGNvdW50ZXIgZnJlcXVlbmN5
IGZyb20gRFRCIG9yIHJlZ2lzdGVyICovCisJY291bnRlcl9mcmVxID0gZ2VuZXJpY190aW1lcl9n
ZXRfZnJlcXVlbmN5KGZkdF90aW1lcik7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUgc2hpZnQg
ZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIgZm9yCkBAIC0yNzYsNyArMjY5LDcgQEAgc3Rh
dGljIGludCB0aW1lcl9oYW5kbGVyKHZvaWQgKmFyZyBfX3VudXNlZCkKIC8qIG11c3QgYmUgY2Fs
bGVkIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCiB2b2lkIHVrcGxhdF90aW1lX2lu
aXQodm9pZCkKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBmZHRfdGltZXI7CiAKIAkvKgogCSAqIE1v
bm90b25pYyB0aW1lIGJlZ2lucyBhdCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNvdW50ZXIK
QEAgLTI4NCwxMSArMjc3LDE3IEBAIHZvaWQgdWtwbGF0X3RpbWVfaW5pdCh2b2lkKQogCSAqLwog
CWJvb3RfdGlja3MgPSBnZW5lcmljX3RpbWVyX2dldF90aWNrcygpOwogCisJLyogQ3VycmVudGx5
LCB3ZSBvbmx5IHN1cHBvcnQgMSB0aW1lciBwZXIgc3lzdGVtICovCisJZmR0X3RpbWVyID0gZmR0
X25vZGVfb2Zmc2V0X2J5X2NvbXBhdGlibGVfbGlzdChfbGlia3ZtcGxhdF9jZmcuZHRiLAorCQkJ
CS0xLCBhcmNoX3RpbWVyX2xpc3QpOworCWlmIChmZHRfdGltZXIgPCAwKQorCQlVS19DUkFTSCgi
Q291bGQgbm90IGZpbmQgYXJjaCB0aW1lciFcbiIpOworCiAJcmMgPSB1a3BsYXRfaXJxX3JlZ2lz
dGVyKDAsIHRpbWVyX2hhbmRsZXIsIE5VTEwpOwogCWlmIChyYyA8IDApCiAJCVVLX0NSQVNIKCJG
YWlsZWQgdG8gcmVnaXN0ZXIgdGltZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOwogCi0JcmMgPSBn
ZW5lcmljX3RpbWVyX2luaXQoKTsKKwlyYyA9IGdlbmVyaWNfdGltZXJfaW5pdChmZHRfdGltZXIp
OwogCWlmIChyYyA8IDApCiAJCVVLX0NSQVNIKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGF0Zm9y
bSB0aW1lXG4iKTsKIH0KLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8p-0006CG-TB; Thu, 19 Sep 2019 15:14:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8o-0006Bn-3q
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:42 +0000
X-Inumbo-ID: 330c24eb-daf0-11e9-9661-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 330c24eb-daf0-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 15:14:40 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EC6EA1682;
 Thu, 19 Sep 2019 08:14:39 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id ECD6E3F575;
 Thu, 19 Sep 2019 08:14:37 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:11 +0800
Message-Id: <20190919151412.51000-7-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919151412.51000-1-justin.he@arm.com>
References: <20190919151412.51000-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v4 6/7] plat/common: Implement
 generic_timer_cpu_block_until
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Jia He <justin.he@arm.com>, Wei Chen <wei.chen@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Kaly Xin <Kaly.Xin@arm.com>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgd2hlbiBzeXN0ZW0gZW50ZXIgc2xlZXAgYW5kIG5l
ZWQgd2FrZXVwCmluIGEgc3BlY2lmaWMgdGltZS4gRm9yIG5zX3RvX3RpY2tzIHByZWNpc2lvbiwg
d2UgbGltaXRlZCB0aGUgbWF4CnNsZWVwIHRpbWUgdG8gMzYwMCBzZWNvbmRzLgoKU2lnbmVkLW9m
Zi1ieTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5jb20+ClNpZ25lZC1vZmYtYnk6IEppYW55b25n
IFd1IDxqaWFueW9uZy53dUBhcm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5o
ZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2FybS90aW1lLmMgfCA0NSArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzOSBpbnNlcnRp
b25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FybS90aW1l
LmMgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCmluZGV4IGFhOWJkNDIuLjhmMjc4Y2IgMTAwNjQ0
Ci0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMKKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUu
YwpAQCAtMjU2LDYgKzI1Niw0MyBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJpY190aW1lcl9lcG9j
aG9mZnNldCh2b2lkKQogCXJldHVybiAwOwogfQogCisvKgorICogUmV0dXJucyBlYXJseSBpZiBh
bnkgaW50ZXJydXB0cyBhcmUgc2VydmljZWQsIG9yIGlmIHRoZSByZXF1ZXN0ZWQgZGVsYXkgaXMK
KyAqIHRvbyBzaG9ydC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB3
aWxsIGVuYWJsZSBpbnRlcnJ1cHRzCisgKiAiYXRvbWljYWxseSIgZHVyaW5nIGlkbGUgbG9vcC4K
KyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9ubHkgZnJvbSB0aGUgc2NoZWR1
bGVyLiBJdCB3aWxsIHNjcmV3CisgKiB5b3VyIHN5c3RlbSBpZiB5b3UgZG8gb3RoZXJ3aXNlLiBB
bmQsIHRoZXJlIGlzIG5vIHJlYXNvbiB5b3UKKyAqIGFjdHVhbGx5IHdhbnQgdG8gdXNlIGl0IGFu
eXdoZXJlIGVsc2UuIFRISVMgSVMgTk9UIEEgWUlFTEQgb3IgYW55CisgKiBraW5kIG9mIG11dGV4
X2xvY2suIEl0IHdpbGwgc2ltcGx5IGhhbHQgdGhlIGNwdSwgbm90IGFsbG93aW5nIGFueQorICog
b3RoZXIgdGhyZWFkIHRvIGV4ZWN1dGUuCisgKi8KK3N0YXRpYyB2b2lkIGdlbmVyaWNfdGltZXJf
Y3B1X2Jsb2NrX3VudGlsKHVpbnQ2NF90IHVudGlsX25zKQoreworCXVpbnQ2NF90IG5vd19ucywg
dW50aWxfdGlja3M7CisKKwlVS19BU1NFUlQodWtwbGF0X2xjcHVfaXJxc19kaXNhYmxlZCgpKTsK
KworCS8qIFJlY29yZCBjdXJyZW50IG5zIGFuZCB1bnRpbF90aWNrcyBmb3IgdGltZXIgKi8KKwlu
b3dfbnMgPSB1a3BsYXRfbW9ub3RvbmljX2Nsb2NrKCk7CisJdW50aWxfdGlja3MgPSBnZW5lcmlj
X3RpbWVyX2dldF90aWNrcygpCisJCQkJKyBuc190b190aWNrcyh1bnRpbF9ucyAtIG5vd19ucyk7
CisKKwlpZiAobm93X25zIDwgdW50aWxfbnMpIHsKKwkJZ2VuZXJpY190aW1lcl91cGRhdGVfY29t
cGFyZSh1bnRpbF90aWNrcyk7CisJCWdlbmVyaWNfdGltZXJfZW5hYmxlKCk7CisJCWdlbmVyaWNf
dGltZXJfdW5tYXNrX2lycSgpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid2ZpIik7CisJCWdl
bmVyaWNfdGltZXJfbWFza19pcnEoKTsKKworCQkvKiBHaXZlIHRoZSBJUlEgaGFuZGxlciBhIGNo
YW5jZSB0byBoYW5kbGUgd2hhdGV2ZXIgd29rZQorCQkgKiB1cyB1cAorCQkgKi8KKwkJdWtwbGF0
X2xjcHVfZW5hYmxlX2lycSgpOworCQl1a3BsYXRfbGNwdV9kaXNhYmxlX2lycSgpOworCX0KK30K
Kwogc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQoaW50IGZkdF90aW1lcikKIHsKIAkvKiBH
ZXQgY291bnRlciBmcmVxdWVuY3kgZnJvbSBEVEIgb3IgcmVnaXN0ZXIgKi8KQEAgLTI5MCw3ICsz
MjcsNyBAQCBzdGF0aWMgaW50IGdlbmVyaWNfdGltZXJfaXJxX2hhbmRsZXIodm9pZCAqYXJnIF9f
dW51c2VkKQogewogCS8qCiAJICogV2UganVzdCBtYXNrIHRoZSBJUlEgaGVyZSwgdGhlIHNjaGVk
dWxlciB3aWxsIGNhbGwKLQkgKiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaywgYW5kIHRoZW4gdW5t
YXNrIHRoZSBJUlEuCisJICogZ2VuZXJpY190aW1lcl9jcHVfYmxvY2tfdW50aWwsIGFuZCB0aGVu
IHVubWFzayB0aGUgSVJRLgogCSAqLwogCWdlbmVyaWNfdGltZXJfbWFza19pcnEoKTsKIApAQCAt
MzAyLDEyICszMzksOCBAQCB1bnNpZ25lZCBsb25nIHNjaGVkX2hhdmVfcGVuZGluZ19ldmVudHM7
CiAKIHZvaWQgdGltZV9ibG9ja191bnRpbChfX3Nuc2VjIHVudGlsKQogewotCS8qCi0JICogVE9E
TzoKLQkgKiBBcyB3ZSBoYXZlbid0IHN1cHBvcnQgaW50ZXJydXB0IG9uIEFybSwgc28gd2UganVz
dAotCSAqIHVzZSBidXN5IHBvbGxpbmcgZm9yIG5vdy4KLQkgKi8KIAl3aGlsZSAoKF9fc25zZWMp
IHVrcGxhdF9tb25vdG9uaWNfY2xvY2soKSA8IHVudGlsKSB7CisJCWdlbmVyaWNfdGltZXJfY3B1
X2Jsb2NrX3VudGlsKHVudGlsKTsKIAkJaWYgKF9fdWtfdGVzdF9hbmRfY2xlYXJfYml0KDAsICZz
Y2hlZF9oYXZlX3BlbmRpbmdfZXZlbnRzKSkKIAkJCWJyZWFrOwogCX0KLS0gCjIuMTcuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8q-0006Cf-Uo; Thu, 19 Sep 2019 15:14:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8p-0006CA-O9
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:43 +0000
X-Inumbo-ID: 320ef306-daf0-11e9-978d-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 320ef306-daf0-11e9-978d-bc764e2007e4;
 Thu, 19 Sep 2019 15:14:37 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 95BB81650;
 Thu, 19 Sep 2019 08:14:37 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 952223F575;
 Thu, 19 Sep 2019 08:14:35 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:10 +0800
Message-Id: <20190919151412.51000-6-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919151412.51000-1-justin.he@arm.com>
References: <20190919151412.51000-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v4 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Jia He <justin.he@arm.com>, Wei Chen <wei.chen@arm.com>,
 Jianyong Wu <jianyong.wu@arm.com>, Kaly Xin <Kaly.Xin@arm.com>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q3VycmVudGx5LCBpbiB1bmlrcmFmdCwgdGhlIHRpbWVyIGludGVycnVwdCBoYXNuJ3QgYmVlbgp1
c2VkIHRvIHVwZGF0ZSB0aWNrcyBwZXJpb2RpY2FsbHkuIFdlIGp1c3QgbWFzayBpdCBpbgpJUlEg
aGFuZGxlciwgYW5kIHdhaXQgZm9yIHNsZWVwIGZ1bmN0aW9uIHRvIHNldCBuZXcKbWF0Y2ggY291
bnRlciBhbmQgdW5tYXNrIElSUS4KClNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hlbkBh
cm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNvbT4K
U2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2NvbW1v
bi9hcm0vdGltZS5jICAgICAgICAgICAgIHwgMTEyICsrKysrKysrKysrKysrKysrKysrKysrKy0t
LS0tCiBwbGF0L2RyaXZlcnMvZ2ljL2dpYy12Mi5jICAgICAgICAgIHwgICAyICstCiBwbGF0L2Ry
aXZlcnMvaW5jbHVkZS9naWMvZ2ljLXYyLmggIHwgICAyICstCiBwbGF0L2RyaXZlcnMvaW5jbHVk
ZS9vZncvZ2ljX2ZkdC5oIHwgICAyICstCiA0IGZpbGVzIGNoYW5nZWQsIDk5IGluc2VydGlvbnMo
KyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMg
Yi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCmluZGV4IDk3NTIxYzUuLmFhOWJkNDIgMTAwNjQ0Ci0t
LSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMKKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwpA
QCAtMzYsOSArMzYsMTggQEAKICNpbmNsdWRlIDxvZncvZmR0Lmg+CiAjaW5jbHVkZSA8dWsvYXNz
ZXJ0Lmg+CiAjaW5jbHVkZSA8dWsvcGxhdC90aW1lLmg+CisjaW5jbHVkZSA8dWsvcGxhdC9sY3B1
Lmg+CiAjaW5jbHVkZSA8dWsvcGxhdC9pcnEuaD4KICNpbmNsdWRlIDx1ay9iaXRvcHMuaD4KICNp
bmNsdWRlIDxjcHUuaD4KKyNpbmNsdWRlIDxvZncvZ2ljX2ZkdC5oPgorI2luY2x1ZGUgPGlycS5o
PgorI2luY2x1ZGUgPGdpYy9naWMtdjIuaD4KKworLyogQml0cyBkZWZpbml0aW9uIG9mIGNudHZf
Y3RsX2VsMCByZWdpc3RlciAqLworI2RlZmluZSBHVF9USU1FUl9FTkFCTEUgICAgICAgIDB4MDEK
KyNkZWZpbmUgR1RfVElNRVJfTUFTS19JUlEgICAgICAweDAyCisjZGVmaW5lIEdUX1RJTUVSX0lS
UV9TVEFUVVMgICAgMHgwNAogCiAvKiBUT0RPOiBGb3Igbm93IHRoaXMgZmlsZSBpcyBLVk0gZGVw
ZW5kZW50LiBBcyBzb29uIGFzIHdlIGhhdmUgbW9yZQogICogQXJtIHBsYXRmb3JtcyB0aGF0IGFy
ZSB1c2luZyB0aGlzIGZpbGUsIHdlIG5lZWQgdG8gaW50cm9kdWNlIGEKQEAgLTEzOSw2ICsxNDgs
NTAgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlX211bHRfc2hpZnQodWludDMyX3QgKm11bHQsIHVp
bnQ4X3QgKnNoaWZ0LAogCSpzaGlmdCA9IHNmdDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGdl
bmVyaWNfdGltZXJfZW5hYmxlKHZvaWQpCit7CisJU1lTUkVHX1dSSVRFMzIoY250dl9jdGxfZWww
LAorCQkgICAgICAgU1lTUkVHX1JFQUQzMihjbnR2X2N0bF9lbDApIHwgR1RfVElNRVJfRU5BQkxF
KTsKKworCS8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8K
Kwlpc2IoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfZGlzYWJsZSh2
b2lkKQoreworCVNZU1JFR19XUklURTMyKGNudHZfY3RsX2VsMCwKKwkJU1lTUkVHX1JFQUQzMihj
bnR2X2N0bF9lbDApICYgfkdUX1RJTUVSX0VOQUJMRSk7CisKKwkvKiBFbnN1cmUgdGhlIHdyaXRl
IG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxlICovCisJaXNiKCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBnZW5lcmljX3RpbWVyX21hc2tfaXJxKHZvaWQpCit7CisJU1lTUkVHX1dSSVRFMzIo
Y250dl9jdGxfZWwwLAorCQlTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkgfCBHVF9USU1FUl9N
QVNLX0lSUSk7CisKKwkvKiBFbnN1cmUgdGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNp
YmxlICovCisJaXNiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX3RpbWVyX3Vu
bWFza19pcnEodm9pZCkKK3sKKwlTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsCisJCVNZU1JF
R19SRUFEMzIoY250dl9jdGxfZWwwKSAmICh+R1RfVElNRVJfTUFTS19JUlEpKTsKKworCS8qIEVu
c3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KKwlpc2IoKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfdXBkYXRlX2NvbXBhcmUodWludDY0
X3QgbmV3X3ZhbCkKK3sKKwlTWVNSRUdfV1JJVEU2NChjbnR2X2N2YWxfZWwwLCBuZXdfdmFsKTsK
KworCS8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KKwlp
c2IoKTsKK30KKwogc3RhdGljIHVpbnQzMl90IGdlbmVyaWNfdGltZXJfZ2V0X2ZyZXF1ZW5jeShp
bnQgZmR0X3RpbWVyKQogewogCWludCBsZW47CkBAIC0yMzMsMTYgKzI4NiwyOCBAQCBzdGF0aWMg
aW50IGdlbmVyaWNfdGltZXJfaW5pdChpbnQgZmR0X3RpbWVyKQogCXJldHVybiAwOwogfQogCitz
dGF0aWMgaW50IGdlbmVyaWNfdGltZXJfaXJxX2hhbmRsZXIodm9pZCAqYXJnIF9fdW51c2VkKQor
eworCS8qCisJICogV2UganVzdCBtYXNrIHRoZSBJUlEgaGVyZSwgdGhlIHNjaGVkdWxlciB3aWxs
IGNhbGwKKwkgKiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaywgYW5kIHRoZW4gdW5tYXNrIHRoZSBJ
UlEuCisJICovCisJZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpOworCisJLyogWWVzLCB3ZSBoYW5k
bGVkIHRoZSBpcnEuICovCisJcmV0dXJuIDE7Cit9CisKIHVuc2lnbmVkIGxvbmcgc2NoZWRfaGF2
ZV9wZW5kaW5nX2V2ZW50czsKIAogdm9pZCB0aW1lX2Jsb2NrX3VudGlsKF9fc25zZWMgdW50aWwp
CiB7CisJLyoKKwkgKiBUT0RPOgorCSAqIEFzIHdlIGhhdmVuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHQg
b24gQXJtLCBzbyB3ZSBqdXN0CisJICogdXNlIGJ1c3kgcG9sbGluZyBmb3Igbm93LgorCSAqLwog
CXdoaWxlICgoX19zbnNlYykgdWtwbGF0X21vbm90b25pY19jbG9jaygpIDwgdW50aWwpIHsKLQkJ
LyoKLQkJICogVE9ETzoKLQkJICogQXMgd2UgaGF2ZW4ndCBzdXBwb3J0IGludGVycnVwdCBvbiBB
cm0sIHNvIHdlIGp1c3QKLQkJICogdXNlIGJ1c3kgcG9sbGluZyBmb3Igbm93LgotCQkgKi8KIAkJ
aWYgKF9fdWtfdGVzdF9hbmRfY2xlYXJfYml0KDAsICZzY2hlZF9oYXZlX3BlbmRpbmdfZXZlbnRz
KSkKIAkJCWJyZWFrOwogCX0KQEAgLTI2MCwxNiArMzI1LDEyIEBAIF9fbnNlYyB1a3BsYXRfd2Fs
bF9jbG9jayh2b2lkKQogCXJldHVybiBnZW5lcmljX3RpbWVyX21vbm90b25pYygpICsgZ2VuZXJp
Y190aW1lcl9lcG9jaG9mZnNldCgpOwogfQogCi1zdGF0aWMgaW50IHRpbWVyX2hhbmRsZXIodm9p
ZCAqYXJnIF9fdW51c2VkKQotewotCS8qIFllcywgd2UgaGFuZGxlZCB0aGUgaXJxLiAqLwotCXJl
dHVybiAxOwotfQotCiAvKiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5h
YmxlZCAqLwogdm9pZCB1a3BsYXRfdGltZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJjLCBmZHRfdGlt
ZXI7CisJaW50IHJjLCBpcnEsIGZkdF90aW1lcjsKKwl1aW50MzJfdCBpcnFfdHlwZSwgaHdpcnE7
CisJdWludDMyX3QgdHJpZ2dlcl90eXBlOwogCiAJLyoKIAkgKiBNb25vdG9uaWMgdGltZSBiZWdp
bnMgYXQgYm9vdF90aWNrcyAoZmlyc3QgcmVhZCBvZiBjb3VudGVyCkBAIC0yODMsMTEgKzM0NCwz
MCBAQCB2b2lkIHVrcGxhdF90aW1lX2luaXQodm9pZCkKIAlpZiAoZmR0X3RpbWVyIDwgMCkKIAkJ
VUtfQ1JBU0goIkNvdWxkIG5vdCBmaW5kIGFyY2ggdGltZXIhXG4iKTsKIAotCXJjID0gdWtwbGF0
X2lycV9yZWdpc3RlcigwLCB0aW1lcl9oYW5kbGVyLCBOVUxMKTsKLQlpZiAocmMgPCAwKQotCQlV
S19DUkFTSCgiRmFpbGVkIHRvIHJlZ2lzdGVyIHRpbWVyIGludGVycnVwdCBoYW5kbGVyXG4iKTsK
LQogCXJjID0gZ2VuZXJpY190aW1lcl9pbml0KGZkdF90aW1lcik7CiAJaWYgKHJjIDwgMCkKIAkJ
VUtfQ1JBU0goIkZhaWxlZCB0byBpbml0aWFsaXplIHBsYXRmb3JtIHRpbWVcbiIpOworCisJcmMg
PSBnaWNfZ2V0X2lycV9mcm9tX2R0YihfbGlia3ZtcGxhdF9jZmcuZHRiLCBmZHRfdGltZXIsIDIs
CisJCQkmaXJxX3R5cGUsICZod2lycSwgJnRyaWdnZXJfdHlwZSk7CisJaWYgKHJjIDwgMCkKKwkJ
VUtfQ1JBU0goIkZhaWxlZCB0byBmaW5kIElSUSBudW1iZXIgZnJvbSBEVEJcbiIpOworCisJaXJx
ID0gZ2ljX2lycV90cmFuc2xhdGUoaXJxX3R5cGUsIGh3aXJxKTsKKwlpZiAoaXJxIDwgMCB8fCBp
cnEgPj0gX19NQVhfSVJRKQorCQlVS19DUkFTSCgiRmFpbGVkIHRvIHRyYW5zbGF0ZSBJUlEgbnVt
YmVyLCB0eXBlPSV1LCBod2lycT0ldVxuIiwKKwkJCWlycV90eXBlLCBod2lycSk7CisKKwlyYyA9
IHVrcGxhdF9pcnFfcmVnaXN0ZXIoaXJxLCBnZW5lcmljX3RpbWVyX2lycV9oYW5kbGVyLCBOVUxM
KTsKKwlpZiAocmMgPCAwKQorCQlVS19DUkFTSCgiRmFpbGVkIHRvIHJlZ2lzdGVyIHRpbWVyIGlu
dGVycnVwdCBoYW5kbGVyXG4iKTsKKworCS8qCisJICogTWFzayBJUlEgYmVmb3JlIHNjaGVkdWxl
ciBzdGFydCB3b3JraW5nLiBPdGhlcndpc2Ugd2Ugd2lsbCBnZXQKKwkgKiB1bmV4cGVjdGVkIHRp
bWVyIGludGVycnVwdHMgd2hlbiBzeXN0ZW0gaXMgYm9vdGluZy4KKwkgKi8KKwlnZW5lcmljX3Rp
bWVyX21hc2tfaXJxKCk7CisKKwkvKiBFbmFibGUgdGltZXIgKi8KKwlnZW5lcmljX3RpbWVyX2Vu
YWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEvcGxhdC9kcml2ZXJzL2dpYy9naWMtdjIuYyBiL3BsYXQv
ZHJpdmVycy9naWMvZ2ljLXYyLmMKaW5kZXggNjg3NzE0ZS4uYzAxYzkyZiAxMDA2NDQKLS0tIGEv
cGxhdC9kcml2ZXJzL2dpYy9naWMtdjIuYworKysgYi9wbGF0L2RyaXZlcnMvZ2ljL2dpYy12Mi5j
CkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBnaWNfc2V0X2lycV90eXBlKHVpbnQzMl90IGlycSwg
aW50IHRyaWdnZXIpCiAJd3JpdGVfZ2ljZDMyKEdJQ0RfSUNGR1IoaXJxKSwgdmFsKTsKIH0KIAot
dWludDMyX3QgZ2ljX2lycV90cmFuc2xhdGUodWludDMyX3QgdHlwZSwgdWludDMyX3QgaHdfaXJx
KQoraW50MzJfdCBnaWNfaXJxX3RyYW5zbGF0ZSh1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBod19p
cnEpCiB7CiAJdWludDMyX3QgaXJxOwogCmRpZmYgLS1naXQgYS9wbGF0L2RyaXZlcnMvaW5jbHVk
ZS9naWMvZ2ljLXYyLmggYi9wbGF0L2RyaXZlcnMvaW5jbHVkZS9naWMvZ2ljLXYyLmgKaW5kZXgg
MjRkYTFlYi4uYzI4YjdhNyAxMDA2NDQKLS0tIGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUvZ2ljL2dp
Yy12Mi5oCisrKyBiL3BsYXQvZHJpdmVycy9pbmNsdWRlL2dpYy9naWMtdjIuaApAQCAtMzY1LDcg
KzM2NSw3IEBAIGludCBnaWNfaXNfaXJxX2FjdGl2ZSh1aW50MzJfdCBpcnEpOwogdm9pZCBnaWNf
c2V0X2lycV90eXBlKHVpbnQzMl90IGlycSwgaW50IHRyaWdnZXIpOwogCiAvKiBUcmFuc2xhdGUg
dG8gaHdpcnEgYWNjb3JkaW5nIHRvIHR5cGUgZS5nLiBQUEkgU1BJIFNHSSAqLwotdWludDMyX3Qg
Z2ljX2lycV90cmFuc2xhdGUodWludDMyX3QgdHlwZSwgdWludDMyX3QgaHdfaXJxKTsKK2ludCBn
aWNfaXJxX3RyYW5zbGF0ZSh1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBod19pcnEpOwogCiAvKiBI
YW5kbGUgSVJRIGVudHJ5ICovCiB2b2lkIGdpY19oYW5kbGVfaXJxKHZvaWQpOwpkaWZmIC0tZ2l0
IGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUvb2Z3L2dpY19mZHQuaCBiL3BsYXQvZHJpdmVycy9pbmNs
dWRlL29mdy9naWNfZmR0LmgKaW5kZXggZTgxYmMyOC4uZTU1NTg5MiAxMDA2NDQKLS0tIGEvcGxh
dC9kcml2ZXJzL2luY2x1ZGUvb2Z3L2dpY19mZHQuaAorKysgYi9wbGF0L2RyaXZlcnMvaW5jbHVk
ZS9vZncvZ2ljX2ZkdC5oCkBAIC00Nyw1ICs0Nyw1IEBACiAgKi8KIGludCBnaWNfZ2V0X2lycV9m
cm9tX2R0Yihjb25zdCB2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBpbnQgaW5kZXgsCiAJCQl1
aW50MzJfdCAqaXJxX3R5cGUsIHVpbnQzMl90ICpod2lycSwKLQkJCXVpbnQzMl90ICp0cmlnZ2Vy
X3R5cGUpCisJCQl1aW50MzJfdCAqdHJpZ2dlcl90eXBlKTsKICNlbmRpZiAvKiBfX1BMQVRfRFJW
X0dJQ19GRFRfSF9fICovCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 19 15:14:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 19 Sep 2019 15:14:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iAy8v-0006Dm-1Q; Thu, 19 Sep 2019 15:14:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=a+aH=XO=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iAy8t-0006DQ-3c
 for minios-devel@lists.xenproject.org; Thu, 19 Sep 2019 15:14:47 +0000
X-Inumbo-ID: 34a142f4-daf0-11e9-9661-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id 34a142f4-daf0-11e9-9661-12813bfff9fa;
 Thu, 19 Sep 2019 15:14:42 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id EAE681688;
 Thu, 19 Sep 2019 08:14:41 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 4EFCB3F575;
 Thu, 19 Sep 2019 08:14:40 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
 Santiago Pagani <Santiago.Pagani@neclab.eu>
Date: Thu, 19 Sep 2019 23:14:12 +0800
Message-Id: <20190919151412.51000-8-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190919151412.51000-1-justin.he@arm.com>
References: <20190919151412.51000-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v4 7/7] plat/common: Split arch
 specific codes from time.c to arm{, 64}/time.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Kaly Xin <Kaly.Xin@arm.com>, Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Julien Grall <julien.grall@arm.com>, Sharan.Santhanam@neclab.eu,
 Jia He <justin.he@arm.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHByZXZpb3VzIHRpbWUuYyBpcyBmb3IgYXJtNjQgb25seSwgc28gc3BsaXQgYXJjaCBzcGVj
aWZpYyBjb2RlcyBmcm9tCnRpbWUuYyB0byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuCgpTaWduZWQt
b2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2FybS90
aW1lLmMgICAgICAgICAgICAgICB8ICA3NyArLS0tLS0tLS0tLS0tLS0tLQogcGxhdC9jb21tb24v
aW5jbHVkZS9hcm0vYXJtL3RpbWUuaCAgIHwgIDY5ICsrKysrKysrKysrKysrKysKIHBsYXQvY29t
bW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUuaCB8IDExOCArKysrKysrKysrKysrKysrKysrKysr
KysrKysKIHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaCAgICAgICB8ICAgNSArKwogNCBm
aWxlcyBjaGFuZ2VkLCAxOTQgaW5zZXJ0aW9ucygrKSwgNzUgZGVsZXRpb25zKC0pCiBjcmVhdGUg
bW9kZSAxMDA2NDQgcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtL3RpbWUuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUuaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaAoKZGlmZiAtLWdpdCBhL3Bs
YXQvY29tbW9uL2FybS90aW1lLmMgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCmluZGV4IDhmMjc4
Y2IuLjcyMmE5YjAgMTAwNjQ0Ci0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMKKysrIGIvcGxh
dC9jb21tb24vYXJtL3RpbWUuYwpAQCAtNDMsMTEgKzQzLDcgQEAKICNpbmNsdWRlIDxvZncvZ2lj
X2ZkdC5oPgogI2luY2x1ZGUgPGlycS5oPgogI2luY2x1ZGUgPGdpYy9naWMtdjIuaD4KLQotLyog
Qml0cyBkZWZpbml0aW9uIG9mIGNudHZfY3RsX2VsMCByZWdpc3RlciAqLwotI2RlZmluZSBHVF9U
SU1FUl9FTkFCTEUgICAgICAgIDB4MDEKLSNkZWZpbmUgR1RfVElNRVJfTUFTS19JUlEgICAgICAw
eDAyCi0jZGVmaW5lIEdUX1RJTUVSX0lSUV9TVEFUVVMgICAgMHgwNAorI2luY2x1ZGUgPGFybS90
aW1lLmg+CiAKIC8qIFRPRE86IEZvciBub3cgdGhpcyBmaWxlIGlzIEtWTSBkZXBlbmRlbnQuIEFz
IHNvb24gYXMgd2UgaGF2ZSBtb3JlCiAgKiBBcm0gcGxhdGZvcm1zIHRoYXQgYXJlIHVzaW5nIHRo
aXMgZmlsZSwgd2UgbmVlZCB0byBpbnRyb2R1Y2UgYQpAQCAtMTQ4LDUwICsxNDQsNiBAQCBzdGF0
aWMgdm9pZCBjYWxjdWxhdGVfbXVsdF9zaGlmdCh1aW50MzJfdCAqbXVsdCwgdWludDhfdCAqc2hp
ZnQsCiAJKnNoaWZ0ID0gc2Z0OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1l
cl9lbmFibGUodm9pZCkKLXsKLQlTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsCi0JCSAgICAg
ICBTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkgfCBHVF9USU1FUl9FTkFCTEUpOwotCi0JLyog
RW5zdXJlIHRoZSB3cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAqLwotCWlzYigpOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl9kaXNhYmxlKHZvaWQpCi17Ci0J
U1lTUkVHX1dSSVRFMzIoY250dl9jdGxfZWwwLAotCQlTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2Vs
MCkgJiB+R1RfVElNRVJfRU5BQkxFKTsKLQotCS8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJl
Z2lzdGVyIGlzIHZpc2libGUgKi8KLQlpc2IoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdl
bmVyaWNfdGltZXJfbWFza19pcnEodm9pZCkKLXsKLQlTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9l
bDAsCi0JCVNZU1JFR19SRUFEMzIoY250dl9jdGxfZWwwKSB8IEdUX1RJTUVSX01BU0tfSVJRKTsK
LQotCS8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KLQlp
c2IoKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfdW5tYXNrX2lycSh2
b2lkKQotewotCVNZU1JFR19XUklURTMyKGNudHZfY3RsX2VsMCwKLQkJU1lTUkVHX1JFQUQzMihj
bnR2X2N0bF9lbDApICYgKH5HVF9USU1FUl9NQVNLX0lSUSkpOwotCi0JLyogRW5zdXJlIHRoZSB3
cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAqLwotCWlzYigpOwotfQotCi1zdGF0aWMg
aW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl91cGRhdGVfY29tcGFyZSh1aW50NjRfdCBuZXdfdmFs
KQotewotCVNZU1JFR19XUklURTY0KGNudHZfY3ZhbF9lbDAsIG5ld192YWwpOwotCi0JLyogRW5z
dXJlIHRoZSB3cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAqLwotCWlzYigpOwotfQot
CiBzdGF0aWMgdWludDMyX3QgZ2VuZXJpY190aW1lcl9nZXRfZnJlcXVlbmN5KGludCBmZHRfdGlt
ZXIpCiB7CiAJaW50IGxlbjsKQEAgLTIwOCwzNyArMTYwLDEyIEBAIHN0YXRpYyB1aW50MzJfdCBn
ZW5lcmljX3RpbWVyX2dldF9mcmVxdWVuY3koaW50IGZkdF90aW1lcikKIAkJdWtfcHJfaW5mbygi
Tm8gY2xvY2stZnJlcXVlbmN5IGZvdW5kLCByZWFkaW5nIGZyb20gcmVnaXN0ZXIgZGlyZWN0bHku
XG4iKTsKIAogCQkvKiBObyB3b3JrYXJvdW5kLCBnZXQgZnJvbSByZWdpc3RlciBkaXJlY3RseSAq
LwotCQlyZXR1cm4gU1lTUkVHX1JFQUQzMihjbnRmcnFfZWwwKTsKKwkJcmV0dXJuIHJlYWRfZnJl
cV9mcm9tX3N5c3JlZygpOwogCX0KIAogCXJldHVybiBmZHQzMl90b19jcHUoZmR0X2ZyZXFbMF0p
OwogfQogCi0jaWZkZWYgQ09ORklHX0FSTTY0X0VSUkFUVU1fODU4OTIxCi0vKgotICogVGhlIGVy
cmF0YSAjODU4OTIxIGRlc2NyaWJlcyB0aGF0IENvcnRleC1BNzMgKHIwcDAgLSByMHAyKSBjb3Vu
dGVyCi0gKiByZWFkIGNhbiByZXR1cm4gYSB3cm9uZyB2YWx1ZSB3aGVuIHRoZSBjb3VudGVyIGNy
b3NzZXMgYSAzMmJpdCBib3VuZGFyeS4KLSAqIEJ1dCBuZXdlciBDb3J0ZXgtQTczIGFyZSBub3Qg
YWZmZWN0ZWQuCi0gKgotICogVGhlIHdvcmthcm91bmQgaW52b2x2ZXMgcGVyZm9ybWluZyB0aGUg
cmVhZCB0d2ljZSwgY29tcGFyZSBiaXRbMzJdIG9mCi0gKiB0aGUgdHdvIHJlYWQgdmFsdWVzLiBJ
ZiBiaXRbMzJdIGlzIGRpZmZlcmVudCwga2VlcCB0aGUgZmlyc3QgdmFsdWUsCi0gKiBvdGhlcndp
c2Uga2VlcCB0aGUgc2Vjb25kIHZhbHVlLgotICovCi1zdGF0aWMgdWludDY0X3QgZ2VuZXJpY190
aW1lcl9nZXRfdGlja3Modm9pZCkKLXsKLSAgICB1aW50NjRfdCB2YWxfMXN0LCB2YWxfMm5kOwot
Ci0gICAgdmFsXzFzdCA9IFNZU1JFR19SRUFENjQoY250dmN0X2VsMCk7Ci0gICAgdmFsXzJuZCA9
IFNZU1JFR19SRUFENjQoY250dmN0X2VsMCk7Ci0gICAgcmV0dXJuICgoKHZhbF8xc3QgXiB2YWxf
Mm5kKSA+PiAzMikgJiAxKSA/IHZhbF8xc3QgOiB2YWxfMm5kOwotfQotI2Vsc2UKLXN0YXRpYyBp
bmxpbmUgdWludDY0X3QgZ2VuZXJpY190aW1lcl9nZXRfdGlja3Modm9pZCkKLXsKLQlyZXR1cm4g
U1lTUkVHX1JFQUQ2NChjbnR2Y3RfZWwwKTsKLX0KLSNlbmRpZgotCiAvKgogICogbW9ub3Rvbmlj
X2Nsb2NrKCk6IHJldHVybnMgIyBvZiBuYW5vc2Vjb25kcyBwYXNzZWQgc2luY2UKICAqIGdlbmVy
aWNfdGltZXJfdGltZV9pbml0KCkKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJt
L2FybS90aW1lLmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm0vdGltZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0ZjcyZWIKLS0tIC9kZXYvbnVsbAorKysgYi9w
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm0vdGltZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBBdXRob3JzOiBX
ZWkgQ2hlbiA8V2VpLkNoZW5AYXJtLmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIEFy
bSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICog
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBC
RSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworI2lmbmRlZiBVS19QTEFU
X0NPTU1PTl9BUk1fVElNRV9ICisjZGVmaW5lIFVLX1BMQVRfQ09NTU9OX0FSTV9USU1FX0gKKwor
I2luY2x1ZGUgPHVrL2Fzc2VydC5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1l
cl9lbmFibGUodm9pZCkKK3sKKwlVS19DUkFTSCgiVW5zdXBwb3J0ZWQgeWV0XG4iKTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfZGlzYWJsZSh2b2lkKQoreworCVVLX0NS
QVNIKCJVbnN1cHBvcnRlZCB5ZXRcbiIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJp
Y190aW1lcl9tYXNrX2lycSh2b2lkKQoreworCVVLX0NSQVNIKCJVbnN1cHBvcnRlZCB5ZXRcbiIp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl91bm1hc2tfaXJxKHZvaWQp
Cit7CisJVUtfQ1JBU0goIlVuc3VwcG9ydGVkIHlldFxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUg
dm9pZCBnZW5lcmljX3RpbWVyX3VwZGF0ZV9jb21wYXJlKHVpbnQ2NF90IG5ld192YWwpCit7CisJ
VUtfQ1JBU0goIlVuc3VwcG9ydGVkIHlldFxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDY0
X3QgZ2VuZXJpY190aW1lcl9nZXRfdGlja3Modm9pZCkKK3sKKwlVS19DUkFTSCgiVW5zdXBwb3J0
ZWQgeWV0XG4iKTsKK30KKyNlbmRpZgorCmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9pbmNsdWRl
L2FybS9hcm02NC90aW1lLmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90aW1lLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhjMTE1OAotLS0gL2Rldi9udWxs
CisrKyBiL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUuaApAQCAtMCwwICsxLDEx
OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAq
IEF1dGhvcnM6IFdlaSBDaGVuIDxXZWkuQ2hlbkBhcm0uY29tPgorICoKKyAqIENvcHlyaWdodCAo
YykgMjAxOSwgQXJtIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJ
QlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURF
UiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisjaWZu
ZGVmIFVLX1BMQVRfQ09NTU9OX0FSTTY0X1RJTUVfSAorI2RlZmluZSBVS19QTEFUX0NPTU1PTl9B
Uk02NF9USU1FX0gKKworI2luY2x1ZGUgPHVrL3BsYXQvbGNwdS5oPgorI2luY2x1ZGUgPGNwdS5o
PgorCisvKiBCaXRzIGRlZmluaXRpb24gb2YgY250dl9jdGxfZWwwIHJlZ2lzdGVyICovCisjZGVm
aW5lIEdUX1RJTUVSX0VOQUJMRSAgICAgICAgMHgwMQorI2RlZmluZSBHVF9USU1FUl9NQVNLX0lS
USAgICAgIDB4MDIKKyNkZWZpbmUgR1RfVElNRVJfSVJRX1NUQVRVUyAgICAweDA0CisKKyNkZWZp
bmUgIGNudHZfY3RsX2dldCgpICBTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkKKyNkZWZpbmUg
IGNudHZfY3RsX3NldCh2YWwpIFNZU1JFR19XUklURTMyKGNudHZfY3RsX2VsMCwgdmFsKQorCitz
dGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl9lbmFibGUodm9pZCkKK3sKKwljbnR2X2N0
bF9zZXQoY250dl9jdGxfZ2V0KCkgfCBHVF9USU1FUl9FTkFCTEUpOworCisJLyogRW5zdXJlIHRo
ZSB3cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAqLworCWlzYigpOworfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl9kaXNhYmxlKHZvaWQpCit7CisJY250dl9jdGxf
c2V0KGNudHZfY3RsX2dldCgpICYgKH5HVF9USU1FUl9FTkFCTEUpKTsKKworCS8qIEVuc3VyZSB0
aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KKwlpc2IoKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfbWFza19pcnEodm9pZCkKK3sKKwljbnR2X2N0
bF9zZXQoY250dl9jdGxfZ2V0KCkgfCBHVF9USU1FUl9NQVNLX0lSUSk7CisKKwkvKiBFbnN1cmUg
dGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxlICovCisJaXNiKCk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX3RpbWVyX3VubWFza19pcnEodm9pZCkKK3sKKwljbnR2
X2N0bF9zZXQoY250dl9jdGxfZ2V0KCkgJiAofkdUX1RJTUVSX01BU0tfSVJRKSk7CisKKwkvKiBF
bnN1cmUgdGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxlICovCisJaXNiKCk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX3RpbWVyX3VwZGF0ZV9jb21wYXJlKHVpbnQ2
NF90IG5ld192YWwpCit7CisJU1lTUkVHX1dSSVRFNjQoY250dl9jdmFsX2VsMCwgbmV3X3ZhbCk7
CisKKwkvKiBFbnN1cmUgdGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxlICovCisJ
aXNiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgcmVhZF9mcmVxX2Zyb21fc3lzcmVn
KHZvaWQpCit7CisJcmV0dXJuIFNZU1JFR19SRUFEMzIoY250ZnJxX2VsMCk7Cit9CisKKyNpZmRl
ZiBDT05GSUdfQVJNNjRfRVJSQVRVTV84NTg5MjEKKy8qCisgKiBUaGUgZXJyYXRhICM4NTg5MjEg
ZGVzY3JpYmVzIHRoYXQgQ29ydGV4LUE3MyAocjBwMCAtIHIwcDIpIGNvdW50ZXIKKyAqIHJlYWQg
Y2FuIHJldHVybiBhIHdyb25nIHZhbHVlIHdoZW4gdGhlIGNvdW50ZXIgY3Jvc3NlcyBhIDMyYml0
IGJvdW5kYXJ5LgorICogQnV0IG5ld2VyIENvcnRleC1BNzMgYXJlIG5vdCBhZmZlY3RlZC4KKyAq
CisgKiBUaGUgd29ya2Fyb3VuZCBpbnZvbHZlcyBwZXJmb3JtaW5nIHRoZSByZWFkIHR3aWNlLCBj
b21wYXJlIGJpdFszMl0gb2YKKyAqIHRoZSB0d28gcmVhZCB2YWx1ZXMuIElmIGJpdFszMl0gaXMg
ZGlmZmVyZW50LCBrZWVwIHRoZSBmaXJzdCB2YWx1ZSwKKyAqIG90aGVyd2lzZSBrZWVwIHRoZSBz
ZWNvbmQgdmFsdWUuCisgKi8KK3N0YXRpYyB1aW50NjRfdCBnZW5lcmljX3RpbWVyX2dldF90aWNr
cyh2b2lkKQoreworCXVpbnQ2NF90IHZhbF8xc3QsIHZhbF8ybmQ7CisKKwl2YWxfMXN0ID0gU1lT
UkVHX1JFQUQ2NChjbnR2Y3RfZWwwKTsKKwl2YWxfMm5kID0gU1lTUkVHX1JFQUQ2NChjbnR2Y3Rf
ZWwwKTsKKwlyZXR1cm4gKCgodmFsXzFzdCBeIHZhbF8ybmQpID4+IDMyKSAmIDEpID8gdmFsXzFz
dCA6IHZhbF8ybmQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB1aW50NjRfdCBnZW5lcmljX3Rp
bWVyX2dldF90aWNrcyh2b2lkKQoreworCXJldHVybiBTWVNSRUdfUkVBRDY0KGNudHZjdF9lbDAp
OworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBVS19QTEFUX0NPTU1PTl9BUk02NF9USU1FX0ggKi8K
ZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaCBiL3BsYXQvY29tbW9u
L2luY2x1ZGUvYXJtL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
Zjg2ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vdGltZS5o
CkBAIC0wLDAgKzEsNSBAQAorI2lmZGVmIENPTkZJR19BUkNIX0FSTV82NAorI2luY2x1ZGUgPGFy
bS9hcm02NC90aW1lLmg+CisjZWxzZQorI2luY2x1ZGUgPGFybS9hcm0vdGltZS5oPgorI2VuZGlm
Ci0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 07:33:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 07:33:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBDPZ-0005fB-6k; Fri, 20 Sep 2019 07:33:01 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=5eEG=XP=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iBDPX-0005f6-LH
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 07:32:59 +0000
X-Inumbo-ID: dd5140cf-db78-11e9-9685-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id dd5140cf-db78-11e9-9685-12813bfff9fa;
 Fri, 20 Sep 2019 07:32:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4A82FF2027;
 Fri, 20 Sep 2019 09:32:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (neclab.eu)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UK8QT1Xo6wu7; Fri, 20 Sep 2019 09:32:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 5891CF2003
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 09:32:53 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 09:32:53 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 20 Sep 2019 09:32:52
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v2 1/2] lib/ukmmap: Introduce
 mmap and related functions library skeleton
Thread-Index: AQHVbs2bv/4TYSK4R068uEoCVBQ73ac0LZ0A
Date: Fri, 20 Sep 2019 07:32:52 +0000
Message-ID: <E355E0B3-F01C-4E15-B2FE-005F6B3D8896@neclab.eu>
References: <20190919093511.14256-1-Charalampos.Mainas@neclab.eu>
 <20190919093511.14256-2-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190919093511.14256-2-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <0B04CA6409AACB4991BBD8E3113B5AA5@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/2] lib/ukmmap: Introduce
 mmap and related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNCkFzIHlvdSBwcm9iYWJseSBzYXcsIHllc3RlcmRheSB3ZSB1cGdy
YWRlZCBVbmlrcmFmdCdzIGJ1aWxkIHN5c3RlbS4gT25lIG9mIHRoZSByZXN1bHRzIGlzIHRoYXQg
bGliL0NvbmZpZy51ayBpcyBub3cgc2ltcGxlciBidXQgZGlmZmVyZW50IGZyb20gd2hhdCBpdCB1
c2VkIHRvIGJlLCBhbmQgc28gdGhpcyBwYXRjaCBubyBsb25nZXIgY2xlYW5seSBhcHBsaWVzLiBT
byBteSBhcG9sb2dpZXMgZm9yIHRoaXMsIGJ1dCB5b3Ugd291bGQgbWluZCBwbGVhc2Ugc2VuZGlu
ZyBhIHYyIHRoYXQgY2xlYW5seSBhcHBsaWVzIHRvIHN0YWdpbmc/DQoNClRoYW5rcywNCg0KLS0g
RmVsaXBlDQoNCu+7v09uIDE5LjA5LjE5LCAxMTozNSwgIk1pbmlvcy1kZXZlbCBvbiBiZWhhbGYg
b2YgQ2hhcmFsYW1wb3MgTWFpbmFzIiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJv
amVjdC5vcmcgb24gYmVoYWxmIG9mIENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+IHdyb3Rl
Og0KDQogICAgU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5N
YWluYXNAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBsaWIvQ29uZmlnLnVrICAgICAgICAgICAg
fCAxICsNCiAgICAgbGliL01ha2VmaWxlLnVrICAgICAgICAgIHwgMSArDQogICAgIGxpYi91a21t
YXAvQ29uZmlnLnVrICAgICB8IDUgKysrKysNCiAgICAgbGliL3VrbW1hcC9NYWtlZmlsZS51ayAg
IHwgMSArDQogICAgIGxpYi91a21tYXAvZXhwb3J0c3ltcy51ayB8IDEgKw0KICAgICA1IGZpbGVz
IGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3Vr
bW1hcC9Db25maWcudWsNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a21tYXAvTWFrZWZp
bGUudWsNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a21tYXAvZXhwb3J0c3ltcy51aw0K
ICAgIA0KICAgIGRpZmYgLS1naXQgYS9saWIvQ29uZmlnLnVrIGIvbGliL0NvbmZpZy51aw0KICAg
IGluZGV4IGYwZDYyMDU0Li42Njc2ZDAzYiAxMDA2NDQNCiAgICAtLS0gYS9saWIvQ29uZmlnLnVr
DQogICAgKysrIGIvbGliL0NvbmZpZy51aw0KICAgIEBAIC01NCwzICs1NCw0IEBAIHNvdXJjZSAi
bGliL3VrOXAvQ29uZmlnLnVrIg0KICAgICBzb3VyY2UgImxpYi9wb3NpeC1saWJkbC9Db25maWcu
dWsiDQogICAgIHNvdXJjZSAibGliL3VrbGlicGFyYW0vQ29uZmlnLnVrIg0KICAgICBzb3VyY2Ug
ImxpYi91a3RpbWUvQ29uZmlnLnVrIg0KICAgICtzb3VyY2UgImxpYi91a21tYXAvQ29uZmlnLnVr
Ig0KICAgIGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUudWsgYi9saWIvTWFrZWZpbGUudWsNCiAg
ICBpbmRleCBhMTY5NzE5OC4uMmNhOTk3M2YgMTAwNjQ0DQogICAgLS0tIGEvbGliL01ha2VmaWxl
LnVrDQogICAgKysrIGIvbGliL01ha2VmaWxlLnVrDQogICAgQEAgLTMxLDMgKzMxLDQgQEAgJChl
dmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWs5cCkpDQogICAg
ICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3Bvc2l4LWxp
YmRsKSkNCiAgICAgJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9s
aWIvdWtsaWJwYXJhbSkpDQogICAgICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdf
VUtfQkFTRSkvbGliL3VrdGltZSkpDQogICAgKyQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChD
T05GSUdfVUtfQkFTRSkvbGliL3VrbW1hcCkpDQogICAgZGlmZiAtLWdpdCBhL2xpYi91a21tYXAv
Q29uZmlnLnVrIGIvbGliL3VrbW1hcC9Db25maWcudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgIGluZGV4IDAwMDAwMDAwLi5mNzUyZGE4NQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICAr
KysgYi9saWIvdWttbWFwL0NvbmZpZy51aw0KICAgIEBAIC0wLDAgKzEsNSBAQA0KICAgICtjb25m
aWcgTElCVUtNTUFQDQogICAgKwlib29sICJ1a21tYXA6IG1tYXAgc3lzdGVtIGNhbGwiDQogICAg
KwlkZWZhdWx0IG4NCiAgICArCXNlbGVjdCBMSUJVS0FMTE9DDQogICAgKwlzZWxlY3QgTElCTkVX
TElCQw0KICAgIGRpZmYgLS1naXQgYS9saWIvdWttbWFwL01ha2VmaWxlLnVrIGIvbGliL3VrbW1h
cC9NYWtlZmlsZS51aw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MDAuLjhhYzNhYjNjDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL2xpYi91a21tYXAvTWFr
ZWZpbGUudWsNCiAgICBAQCAtMCwwICsxIEBADQogICAgKyQoZXZhbCAkKGNhbGwgYWRkbGliX3Ms
bGlidWttbWFwLCQoQ09ORklHX0xJQlVLTU1BUCkpKQ0KICAgIGRpZmYgLS1naXQgYS9saWIvdWtt
bWFwL2V4cG9ydHN5bXMudWsgYi9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsNCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAwLi42MjFlOTRmMA0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsNCiAgICBAQCAtMCwwICsx
IEBADQogICAgK25vbmUNCiAgICAtLSANCiAgICAyLjE3LjENCiAgICANCiAgICANCiAgICBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KICAgIE1pbmlvcy1k
ZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcN
CiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 08:00:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 08:00:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBDpm-0000HZ-5Q; Fri, 20 Sep 2019 08:00:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBDpk-0008Vj-Kc
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 08:00:04 +0000
X-Inumbo-ID: a60ca082-db7c-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a60ca082-db7c-11e9-b299-bc764e2007e4;
 Fri, 20 Sep 2019 08:00:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B89D5F2036;
 Fri, 20 Sep 2019 10:00:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 0yZ1S9RXF1iW; Fri, 20 Sep 2019 10:00:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 949CBC00FB
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 09:43:05 +0200 (CEST)
Received: from titania.office.hd (192.168.24.89) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 09:43:05 +0200
Received: from titania.office.hd ([192.168.126.13]) by titania.office.hd
 ([192.168.126.13]) with mapi id 15.01.1713.009; Fri, 20 Sep 2019 09:43:05
 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: Felipe Huici <Felipe.Huici@neclab.eu>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v2 1/2] lib/ukmmap: Introduce
 mmap and related functions library skeleton
Thread-Index: AQHVbs2PcVOse1jl4UmB5xjvigGr8qc0DBYAgAAj3SA=
Date: Fri, 20 Sep 2019 07:43:05 +0000
Message-ID: <dcbd54ef792644539cb7026071ef82c3@neclab.eu>
References: <20190919093511.14256-1-Charalampos.Mainas@neclab.eu>
 <20190919093511.14256-2-Charalampos.Mainas@neclab.eu>,
 <E355E0B3-F01C-4E15-B2FE-005F6B3D8896@neclab.eu>
In-Reply-To: <E355E0B3-F01C-4E15-B2FE-005F6B3D8896@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-originating-ip: [192.168.24.96]
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/2] lib/ukmmap: Introduce
 mmap and related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============2975554829555345582=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============2975554829555345582==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_dcbd54ef792644539cb7026071ef82c3neclabeu_"

--_000_dcbd54ef792644539cb7026071ef82c3neclabeu_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SGV5IEZlbGlwZSwNCg0KDQpTdXJlLCBubyBwcm9ibGVtLiBJIHdpbGwgcHJlcGFyZSBhIHYzDQoN
Cg0KVGhhbmsgeW91LA0KDQpDaGFyYWxhbXBvcyBNYWluYXMNCg0KDQpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXw0KRnJvbTogRmVsaXBlIEh1aWNpDQpTZW50OiBGcmlkYXksIFNlcHRl
bWJlciAyMCwgMjAxOSA5OjMyIEFNDQpUbzogQ2hhcmFsYW1wb3MgTWFpbmFzOyBtaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNClN1YmplY3Q6IFJlOiBbTWluaW9zLWRldmVsXSBbVU5J
S1JBRlQgUEFUQ0ggdjIgMS8yXSBsaWIvdWttbWFwOiBJbnRyb2R1Y2UgbW1hcCBhbmQgcmVsYXRl
ZCBmdW5jdGlvbnMgbGlicmFyeSBza2VsZXRvbg0KDQpIaSBDaGFyYWxhbXBvcywNCg0KQXMgeW91
IHByb2JhYmx5IHNhdywgeWVzdGVyZGF5IHdlIHVwZ3JhZGVkIFVuaWtyYWZ0J3MgYnVpbGQgc3lz
dGVtLiBPbmUgb2YgdGhlIHJlc3VsdHMgaXMgdGhhdCBsaWIvQ29uZmlnLnVrIGlzIG5vdyBzaW1w
bGVyIGJ1dCBkaWZmZXJlbnQgZnJvbSB3aGF0IGl0IHVzZWQgdG8gYmUsIGFuZCBzbyB0aGlzIHBh
dGNoIG5vIGxvbmdlciBjbGVhbmx5IGFwcGxpZXMuIFNvIG15IGFwb2xvZ2llcyBmb3IgdGhpcywg
YnV0IHlvdSB3b3VsZCBtaW5kIHBsZWFzZSBzZW5kaW5nIGEgdjIgdGhhdCBjbGVhbmx5IGFwcGxp
ZXMgdG8gc3RhZ2luZz8NCg0KVGhhbmtzLA0KDQotLSBGZWxpcGUNCg0K77u/T24gMTkuMDkuMTks
IDExOjM1LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBDaGFyYWxhbXBvcyBNYWluYXMiIDxt
aW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBvbiBiZWhhbGYgb2YgQ2hh
cmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBTaWduZWQtb2ZmLWJ5OiBD
aGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+DQogICAgLS0t
DQogICAgIGxpYi9Db25maWcudWsgICAgICAgICAgICB8IDEgKw0KICAgICBsaWIvTWFrZWZpbGUu
dWsgICAgICAgICAgfCAxICsNCiAgICAgbGliL3VrbW1hcC9Db25maWcudWsgICAgIHwgNSArKysr
Kw0KICAgICBsaWIvdWttbWFwL01ha2VmaWxlLnVrICAgfCAxICsNCiAgICAgbGliL3VrbW1hcC9l
eHBvcnRzeW1zLnVrIHwgMSArDQogICAgIDUgZmlsZXMgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCsp
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL0NvbmZpZy51aw0KICAgICBjcmVh
dGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9NYWtlZmlsZS51aw0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrDQoNCiAgICBkaWZmIC0tZ2l0IGEvbGliL0Nv
bmZpZy51ayBiL2xpYi9Db25maWcudWsNCiAgICBpbmRleCBmMGQ2MjA1NC4uNjY3NmQwM2IgMTAw
NjQ0DQogICAgLS0tIGEvbGliL0NvbmZpZy51aw0KICAgICsrKyBiL2xpYi9Db25maWcudWsNCiAg
ICBAQCAtNTQsMyArNTQsNCBAQCBzb3VyY2UgImxpYi91azlwL0NvbmZpZy51ayINCiAgICAgc291
cmNlICJsaWIvcG9zaXgtbGliZGwvQ29uZmlnLnVrIg0KICAgICBzb3VyY2UgImxpYi91a2xpYnBh
cmFtL0NvbmZpZy51ayINCiAgICAgc291cmNlICJsaWIvdWt0aW1lL0NvbmZpZy51ayINCiAgICAr
c291cmNlICJsaWIvdWttbWFwL0NvbmZpZy51ayINCiAgICBkaWZmIC0tZ2l0IGEvbGliL01ha2Vm
aWxlLnVrIGIvbGliL01ha2VmaWxlLnVrDQogICAgaW5kZXggYTE2OTcxOTguLjJjYTk5NzNmIDEw
MDY0NA0KICAgIC0tLSBhL2xpYi9NYWtlZmlsZS51aw0KICAgICsrKyBiL2xpYi9NYWtlZmlsZS51
aw0KICAgIEBAIC0zMSwzICszMSw0IEBAICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05G
SUdfVUtfQkFTRSkvbGliL3VrOXApKQ0KICAgICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQo
Q09ORklHX1VLX0JBU0UpL2xpYi9wb3NpeC1saWJkbCkpDQogICAgICQoZXZhbCAkKGNhbGwgX2lt
cG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrbGlicGFyYW0pKQ0KICAgICAkKGV2YWwg
JChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a3RpbWUpKQ0KICAgICsk
KGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a21tYXApKQ0K
ICAgIGRpZmYgLS1naXQgYS9saWIvdWttbWFwL0NvbmZpZy51ayBiL2xpYi91a21tYXAvQ29uZmln
LnVrDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwMC4uZjc1MmRh
ODUNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvbGliL3VrbW1hcC9Db25maWcudWsNCiAg
ICBAQCAtMCwwICsxLDUgQEANCiAgICArY29uZmlnIExJQlVLTU1BUA0KICAgICsgICBib29sICJ1
a21tYXA6IG1tYXAgc3lzdGVtIGNhbGwiDQogICAgKyAgIGRlZmF1bHQgbg0KICAgICsgICBzZWxl
Y3QgTElCVUtBTExPQw0KICAgICsgICBzZWxlY3QgTElCTkVXTElCQw0KICAgIGRpZmYgLS1naXQg
YS9saWIvdWttbWFwL01ha2VmaWxlLnVrIGIvbGliL3VrbW1hcC9NYWtlZmlsZS51aw0KICAgIG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMDAuLjhhYzNhYjNjDQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL2xpYi91a21tYXAvTWFrZWZpbGUudWsNCiAgICBAQCAtMCww
ICsxIEBADQogICAgKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWttbWFwLCQoQ09ORklHX0xJ
QlVLTU1BUCkpKQ0KICAgIGRpZmYgLS1naXQgYS9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsgYi9s
aWIvdWttbWFwL2V4cG9ydHN5bXMudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGlu
ZGV4IDAwMDAwMDAwLi42MjFlOTRmMA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWIv
dWttbWFwL2V4cG9ydHN5bXMudWsNCiAgICBAQCAtMCwwICsxIEBADQogICAgK25vbmUNCiAgICAt
LQ0KICAgIDIuMTcuMQ0KDQoNCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCg==

--_000_dcbd54ef792644539cb7026071ef82c3neclabeu_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc3R5bGU9
ImRpc3BsYXk6bm9uZTsiPjwhLS0gUCB7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MDt9IC0t
Pjwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keSBkaXI9Imx0ciI+DQo8ZGl2IGlkPSJkaXZ0YWdkZWZh
dWx0d3JhcHBlciIgc3R5bGU9ImZvbnQtc2l6ZToxMnB0O2NvbG9yOiMwMDAwMDA7Zm9udC1mYW1p
bHk6Q2FsaWJyaSxIZWx2ZXRpY2Esc2Fucy1zZXJpZjsiIGRpcj0ibHRyIj4NCjxwPkhleSBGZWxp
cGUsPC9wPg0KPHA+PGJyPg0KPC9wPg0KPHA+U3VyZSwgbm8gcHJvYmxlbS4gSSB3aWxsIHByZXBh
cmUgYSB2MyA8YnI+DQo8L3A+DQo8cD48YnI+DQo8L3A+DQo8cD5UaGFuayB5b3UsPC9wPg0KPHA+
Q2hhcmFsYW1wb3MgTWFpbmFzPGJyPg0KPC9wPg0KPGJyPg0KPGJyPg0KPGRpdiBzdHlsZT0iY29s
b3I6IHJnYigwLCAwLCAwKTsiPg0KPGRpdj4NCjxociB0YWJpbmRleD0iLTEiIHN0eWxlPSJkaXNw
bGF5OmlubGluZS1ibG9jazsgd2lkdGg6OTglIj4NCjxkaXYgaWQ9InhfZGl2UnBseUZ3ZE1zZyIg
ZGlyPSJsdHIiPjxmb250IHN0eWxlPSJmb250LXNpemU6MTFwdCIgZmFjZT0iQ2FsaWJyaSwgc2Fu
cy1zZXJpZiIgY29sb3I9IiMwMDAwMDAiPjxiPkZyb206PC9iPiBGZWxpcGUgSHVpY2k8YnI+DQo8
Yj5TZW50OjwvYj4gRnJpZGF5LCBTZXB0ZW1iZXIgMjAsIDIwMTkgOTozMiBBTTxicj4NCjxiPlRv
OjwvYj4gQ2hhcmFsYW1wb3MgTWFpbmFzOyBtaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmc8YnI+DQo8Yj5TdWJqZWN0OjwvYj4gUmU6IFtNaW5pb3MtZGV2ZWxdIFtVTklLUkFGVCBQQVRD
SCB2MiAxLzJdIGxpYi91a21tYXA6IEludHJvZHVjZSBtbWFwIGFuZCByZWxhdGVkIGZ1bmN0aW9u
cyBsaWJyYXJ5IHNrZWxldG9uPC9mb250Pg0KPGRpdj4mbmJzcDs8L2Rpdj4NCjwvZGl2Pg0KPC9k
aXY+DQo8Zm9udCBzaXplPSIyIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEwcHQ7Ij4NCjxkaXYg
Y2xhc3M9IlBsYWluVGV4dCI+SGkgQ2hhcmFsYW1wb3MsPGJyPg0KPGJyPg0KQXMgeW91IHByb2Jh
Ymx5IHNhdywgeWVzdGVyZGF5IHdlIHVwZ3JhZGVkIFVuaWtyYWZ0J3MgYnVpbGQgc3lzdGVtLiBP
bmUgb2YgdGhlIHJlc3VsdHMgaXMgdGhhdCBsaWIvQ29uZmlnLnVrIGlzIG5vdyBzaW1wbGVyIGJ1
dCBkaWZmZXJlbnQgZnJvbSB3aGF0IGl0IHVzZWQgdG8gYmUsIGFuZCBzbyB0aGlzIHBhdGNoIG5v
IGxvbmdlciBjbGVhbmx5IGFwcGxpZXMuIFNvIG15IGFwb2xvZ2llcyBmb3IgdGhpcywgYnV0IHlv
dSB3b3VsZCBtaW5kIHBsZWFzZQ0KIHNlbmRpbmcgYSB2MiB0aGF0IGNsZWFubHkgYXBwbGllcyB0
byBzdGFnaW5nPzxicj4NCjxicj4NClRoYW5rcyw8YnI+DQo8YnI+DQotLSBGZWxpcGU8YnI+DQo8
YnI+DQrvu79PbiAxOS4wOS4xOSwgMTE6MzUsICZxdW90O01pbmlvcy1kZXZlbCBvbiBiZWhhbGYg
b2YgQ2hhcmFsYW1wb3MgTWFpbmFzJnF1b3Q7ICZsdDttaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0
cy54ZW5wcm9qZWN0Lm9yZyBvbiBiZWhhbGYgb2YgQ2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5l
dSZndDsgd3JvdGU6PGJyPg0KPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IFNpZ25lZC1vZmYtYnk6
IENoYXJhbGFtcG9zIE1haW5hcyAmbHQ7Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldSZndDs8
YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgLS0tPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
IGxpYi9Db25maWcudWsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCAxICYjNDM7PGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7
Jm5ic3A7IGxpYi9NYWtlZmlsZS51ayZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyB8IDEgJiM0Mzs8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJz
cDsgbGliL3VrbW1hcC9Db25maWcudWsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgfCA1ICYjNDM7
JiM0MzsmIzQzOyYjNDM7JiM0Mzs8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgbGliL3Vr
bW1hcC9NYWtlZmlsZS51ayZuYnNwOyZuYnNwOyB8IDEgJiM0Mzs8YnI+DQombmJzcDsmbmJzcDsm
bmJzcDsmbmJzcDsgbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrIHwgMSAmIzQzOzxicj4NCiZuYnNw
OyZuYnNwOyZuYnNwOyZuYnNwOyA1IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygmIzQzOyk8
YnI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a21t
YXAvQ29uZmlnLnVrPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IGNyZWF0ZSBtb2RlIDEw
MDY0NCBsaWIvdWttbWFwL01ha2VmaWxlLnVrPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL2V4cG9ydHN5bXMudWs8YnI+DQombmJzcDsm
bmJzcDsmbmJzcDsgPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IGRpZmYgLS1naXQgYS9saWIvQ29u
ZmlnLnVrIGIvbGliL0NvbmZpZy51azxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBpbmRleCBmMGQ2
MjA1NC4uNjY3NmQwM2IgMTAwNjQ0PGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IC0tLSBhL2xpYi9D
b25maWcudWs8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgJiM0MzsmIzQzOyYjNDM7IGIvbGliL0Nv
bmZpZy51azxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBAQCAtNTQsMyAmIzQzOzU0LDQgQEAgc291
cmNlICZxdW90O2xpYi91azlwL0NvbmZpZy51ayZxdW90Ozxicj4NCiZuYnNwOyZuYnNwOyZuYnNw
OyZuYnNwOyBzb3VyY2UgJnF1b3Q7bGliL3Bvc2l4LWxpYmRsL0NvbmZpZy51ayZxdW90Ozxicj4N
CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBzb3VyY2UgJnF1b3Q7bGliL3VrbGlicGFyYW0vQ29u
ZmlnLnVrJnF1b3Q7PGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHNvdXJjZSAmcXVvdDts
aWIvdWt0aW1lL0NvbmZpZy51ayZxdW90Ozxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyAmIzQzO3Nv
dXJjZSAmcXVvdDtsaWIvdWttbWFwL0NvbmZpZy51ayZxdW90Ozxicj4NCiZuYnNwOyZuYnNwOyZu
YnNwOyBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnVrIGIvbGliL01ha2VmaWxlLnVrPGJyPg0K
Jm5ic3A7Jm5ic3A7Jm5ic3A7IGluZGV4IGExNjk3MTk4Li4yY2E5OTczZiAxMDA2NDQ8YnI+DQom
bmJzcDsmbmJzcDsmbmJzcDsgLS0tIGEvbGliL01ha2VmaWxlLnVrPGJyPg0KJm5ic3A7Jm5ic3A7
Jm5ic3A7ICYjNDM7JiM0MzsmIzQzOyBiL2xpYi9NYWtlZmlsZS51azxicj4NCiZuYnNwOyZuYnNw
OyZuYnNwOyBAQCAtMzEsMyAmIzQzOzMxLDQgQEAgJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwk
KENPTkZJR19VS19CQVNFKS9saWIvdWs5cCkpPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7
ICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3Bvc2l4LWxp
YmRsKSk8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgJChldmFsICQoY2FsbCBfaW1wb3J0
X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWtsaWJwYXJhbSkpPGJyPg0KJm5ic3A7Jm5ic3A7
Jm5ic3A7Jm5ic3A7ICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkv
bGliL3VrdGltZSkpPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7ICYjNDM7JChldmFsICQoY2FsbCBf
aW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWttbWFwKSk8YnI+DQombmJzcDsmbmJz
cDsmbmJzcDsgZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvQ29uZmlnLnVrIGIvbGliL3VrbW1hcC9D
b25maWcudWs8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgbmV3IGZpbGUgbW9kZSAxMDA2NDQ8YnI+
DQombmJzcDsmbmJzcDsmbmJzcDsgaW5kZXggMDAwMDAwMDAuLmY3NTJkYTg1PGJyPg0KJm5ic3A7
Jm5ic3A7Jm5ic3A7IC0tLSAvZGV2L251bGw8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgJiM0Mzsm
IzQzOyYjNDM7IGIvbGliL3VrbW1hcC9Db25maWcudWs8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsg
QEAgLTAsMCAmIzQzOzEsNSBAQDxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyAmIzQzO2NvbmZpZyBM
SUJVS01NQVA8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgJiM0MzsmbmJzcDsmbmJzcDsgYm9vbCAm
cXVvdDt1a21tYXA6IG1tYXAgc3lzdGVtIGNhbGwmcXVvdDs8YnI+DQombmJzcDsmbmJzcDsmbmJz
cDsgJiM0MzsmbmJzcDsmbmJzcDsgZGVmYXVsdCBuPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7ICYj
NDM7Jm5ic3A7Jm5ic3A7IHNlbGVjdCBMSUJVS0FMTE9DPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7
ICYjNDM7Jm5ic3A7Jm5ic3A7IHNlbGVjdCBMSUJORVdMSUJDPGJyPg0KJm5ic3A7Jm5ic3A7Jm5i
c3A7IGRpZmYgLS1naXQgYS9saWIvdWttbWFwL01ha2VmaWxlLnVrIGIvbGliL3VrbW1hcC9NYWtl
ZmlsZS51azxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBuZXcgZmlsZSBtb2RlIDEwMDY0NDxicj4N
CiZuYnNwOyZuYnNwOyZuYnNwOyBpbmRleCAwMDAwMDAwMC4uOGFjM2FiM2M8YnI+DQombmJzcDsm
bmJzcDsmbmJzcDsgLS0tIC9kZXYvbnVsbDxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyAmIzQzOyYj
NDM7JiM0MzsgYi9saWIvdWttbWFwL01ha2VmaWxlLnVrPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7
IEBAIC0wLDAgJiM0MzsxIEBAPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7ICYjNDM7JChldmFsICQo
Y2FsbCBhZGRsaWJfcyxsaWJ1a21tYXAsJChDT05GSUdfTElCVUtNTUFQKSkpPGJyPg0KJm5ic3A7
Jm5ic3A7Jm5ic3A7IGRpZmYgLS1naXQgYS9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsgYi9saWIv
dWttbWFwL2V4cG9ydHN5bXMudWs8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQ8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgaW5kZXggMDAwMDAwMDAuLjYyMWU5NGYw
PGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IC0tLSAvZGV2L251bGw8YnI+DQombmJzcDsmbmJzcDsm
bmJzcDsgJiM0MzsmIzQzOyYjNDM7IGIvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrPGJyPg0KJm5i
c3A7Jm5ic3A7Jm5ic3A7IEBAIC0wLDAgJiM0MzsxIEBAPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7
ICYjNDM7bm9uZTxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyAtLSA8YnI+DQombmJzcDsmbmJzcDsm
bmJzcDsgMi4xNy4xPGJyPg0KJm5ic3A7Jm5ic3A7Jm5ic3A7IDxicj4NCiZuYnNwOyZuYnNwOyZu
YnNwOyA8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX188YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdDxicj4NCiZuYnNwOyZuYnNwOyZuYnNwOyBNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmc8YnI+DQombmJzcDsmbmJzcDsmbmJzcDsgPGEgaHJlZj0iaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbCIgaWQ9IkxQ
bG5rMzQ5MzQ4IiBwcmV2aWV3cmVtb3ZlZD0idHJ1ZSI+DQpodHRwczovL2xpc3RzLnhlbnByb2pl
Y3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsPC9hPjxicj4NCjxicj4NCjwvZGl2
Pg0KPC9zcGFuPjwvZm9udD48L2Rpdj4NCjwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0K

--_000_dcbd54ef792644539cb7026071ef82c3neclabeu_--


--===============2975554829555345582==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============2975554829555345582==--


From minios-devel-bounces@lists.xenproject.org Fri Sep 20 08:38:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 08:38:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBER4-0004CJ-QB; Fri, 20 Sep 2019 08:38:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBER4-0004C9-5W
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 08:38:38 +0000
X-Inumbo-ID: 095c8738-db82-11e9-b76c-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 095c8738-db82-11e9-b76c-bc764e2007e4;
 Fri, 20 Sep 2019 08:38:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id CA46F1056F2;
 Fri, 20 Sep 2019 10:38:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id PbskymJPs3wO; Fri, 20 Sep 2019 10:38:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id A36E71056DB
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 10:38:35 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 10:38:34 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 10:38:18 +0200
Message-ID: <20190920083819.9148-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190920083819.9148-1-Charalampos.Mainas@neclab.eu>
References: <20190920083819.9148-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 1/2] lib/ukmmap: Introduce mmap
 and related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi9NYWtlZmlsZS51ayAgICAgICAgICB8IDEgKwogbGliL3VrbW1hcC9D
b25maWcudWsgICAgIHwgNSArKysrKwogbGliL3VrbW1hcC9NYWtlZmlsZS51ayAgIHwgMSArCiBs
aWIvdWttbWFwL2V4cG9ydHN5bXMudWsgfCAxICsKIDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRp
b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9Db25maWcudWsKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWIvdWttbWFwL01ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3VrbW1hcC9leHBvcnRzeW1zLnVrCgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnVrIGIvbGli
L01ha2VmaWxlLnVrCmluZGV4IGExNjk3MTk4Li4yY2E5OTczZiAxMDA2NDQKLS0tIGEvbGliL01h
a2VmaWxlLnVrCisrKyBiL2xpYi9NYWtlZmlsZS51awpAQCAtMzEsMyArMzEsNCBAQCAkKGV2YWwg
JChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91azlwKSkKICQoZXZhbCAk
KGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3Bvc2l4LWxpYmRsKSkKICQo
ZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrbGlicGFyYW0p
KQogJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWt0aW1l
KSkKKyQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrbW1h
cCkpCmRpZmYgLS1naXQgYS9saWIvdWttbWFwL0NvbmZpZy51ayBiL2xpYi91a21tYXAvQ29uZmln
LnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5mNzUyZGE4NQotLS0gL2Rl
di9udWxsCisrKyBiL2xpYi91a21tYXAvQ29uZmlnLnVrCkBAIC0wLDAgKzEsNSBAQAorY29uZmln
IExJQlVLTU1BUAorCWJvb2wgInVrbW1hcDogbW1hcCBzeXN0ZW0gY2FsbCIKKwlkZWZhdWx0IG4K
KwlzZWxlY3QgTElCVUtBTExPQworCXNlbGVjdCBMSUJORVdMSUJDCmRpZmYgLS1naXQgYS9saWIv
dWttbWFwL01ha2VmaWxlLnVrIGIvbGliL3VrbW1hcC9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMC4uOGFjM2FiM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWIv
dWttbWFwL01ha2VmaWxlLnVrCkBAIC0wLDAgKzEgQEAKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3Ms
bGlidWttbWFwLCQoQ09ORklHX0xJQlVLTU1BUCkpKQpkaWZmIC0tZ2l0IGEvbGliL3VrbW1hcC9l
eHBvcnRzeW1zLnVrIGIvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwLi42MjFlOTRmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi91a21t
YXAvZXhwb3J0c3ltcy51awpAQCAtMCwwICsxIEBACitub25lCi0tIAoyLjE3LjEKCgpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFp
bGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 08:38:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 08:38:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBER4-0004CO-SO; Fri, 20 Sep 2019 08:38:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBER4-0004CE-Ct
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 08:38:38 +0000
X-Inumbo-ID: 08af054a-db82-11e9-9686-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 08af054a-db82-11e9-9686-12813bfff9fa;
 Fri, 20 Sep 2019 08:38:35 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 980351056F1;
 Fri, 20 Sep 2019 10:38:34 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 4jFyLs518VWm; Fri, 20 Sep 2019 10:38:34 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 6F32B1056F0
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 10:38:34 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 10:38:34 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 10:38:17 +0200
Message-ID: <20190920083819.9148-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 0/2] lib/ukmmap: Remove mmap from
 newlib glue code and create a new internal library (libukmmap) for mmap
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW50cm9kdWNpbmcgYSBuZXcgaW50ZXJuYWwgbGlicmFyeSB3aGljaCBpbXBsZW1lbnRzIG1tYXAg
cmVsYXRlZApvcGVyYXRpb25zLiBGb3IgdGhlIHRpbWUgYmVpbmcgbW1hcCBpcyBub3QgZnVsbHkg
aW1wbGVtZW50ZWQuIEl0IGlzIGp1c3QKYSB0cmljayB0aGF0IHdvcmtzIGZvciBHbywgYnV0IGl0
IG5lZWRzIHRvIGJlIHJldmlzaXRlZCBpbiB0aGUgZnV0dXJlLgpUaGlzIGltcGxlbWVudGF0aW9u
IGRvZXMgbm90IGNyZWF0ZSBhbnkgbmV3IG1hcHBpbmcsIGl0IGp1c3QgYWxsb2NhdGVzCm1lbW9y
eSBhbmQga2VlcHMgdHJhY2sgb2YgYW55IG1lbW9yeSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYWxs
b2NhdGVkCmluIGEgcHJldmlvdXMgY2FsbC4gSWYgdGhlIHBhcmFtZXRlcnMgZG8gbm90IG1hdGNo
IHRoZSBvbmVzIHRoYXQgR28KdXNlcyB0aGVuIDAgaXMgcmV0dXJuZWQgKHVuaW1wbGVtZW50ZWQp
LgoKRGlmZmVyZW5jZXMgd2l0aCB2MjoKLSBUaGUgdjIgb2YgdGhlIHNlcmllcyBkaWQgbm90IGFw
cGx5IGNsZWFubHkgb24gdGhlIHN0YWdpbmcgYnJhbmNoCgpEaWZmZXJlbmNlcyB3aXRoIHYxOgot
IEFkZCBQQVRDSCBpbiBzdWJqZWN0IGxpbmUKCkNoYXJhbGFtcG9zIE1haW5hcyAoMik6CiAgSW50
cm9kdWNlIG1tYXAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGxpYnJhcnkgc2tlbGV0b24KICBtbWFw
IHRyaWNrIGZvciBHbwoKIGxpYi9NYWtlZmlsZS51ayAgICAgICAgICB8ICAgMSArCiBsaWIvdWtt
bWFwL0NvbmZpZy51ayAgICAgfCAgIDUgKysKIGxpYi91a21tYXAvTWFrZWZpbGUudWsgICB8ICAg
MyArCiBsaWIvdWttbWFwL2V4cG9ydHN5bXMudWsgfCAgIDIgKwogbGliL3VrbW1hcC9tbWFwLmMg
ICAgICAgIHwgMTY2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNSBm
aWxlcyBjaGFuZ2VkLCAxNzcgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91
a21tYXAvQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9NYWtlZmlsZS51
awogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi91a21tYXAvZXhwb3J0c3ltcy51awogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGxpYi91a21tYXAvbW1hcC5jCgotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 08:38:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 08:38:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBER9-0004DZ-U2; Fri, 20 Sep 2019 08:38:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBER9-0004DQ-5V
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 08:38:43 +0000
X-Inumbo-ID: 097d51fc-db82-11e9-a337-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 097d51fc-db82-11e9-a337-bc764e2007e4;
 Fri, 20 Sep 2019 08:38:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 1340D1056DB;
 Fri, 20 Sep 2019 10:38:36 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id yNRsXWzyeyTq; Fri, 20 Sep 2019 10:38:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id AAFA21056EF
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 10:38:35 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 10:38:34 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 10:38:19 +0200
Message-ID: <20190920083819.9148-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190920083819.9148-1-Charalampos.Mainas@neclab.eu>
References: <20190920083819.9148-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 2/2] lib/ukmmap: mmap trick for Go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi91a21tYXAvTWFrZWZpbGUudWsgICB8ICAgMiArCiBsaWIvdWttbWFw
L2V4cG9ydHN5bXMudWsgfCAgIDMgKy0KIGxpYi91a21tYXAvbW1hcC5jICAgICAgICB8IDE2NiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MTcwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
dWttbWFwL21tYXAuYwoKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvTWFrZWZpbGUudWsgYi9saWIv
dWttbWFwL01ha2VmaWxlLnVrCmluZGV4IDhhYzNhYjNjLi43MWZmNDMyZiAxMDA2NDQKLS0tIGEv
bGliL3VrbW1hcC9NYWtlZmlsZS51aworKysgYi9saWIvdWttbWFwL01ha2VmaWxlLnVrCkBAIC0x
ICsxLDMgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWttbWFwLCQoQ09ORklHX0xJQlVL
TU1BUCkpKQorCitMSUJVS01NQVBfU1JDUy15ICs9ICQoTElCVUtNTUFQX0JBU0UpL21tYXAuYwpk
aWZmIC0tZ2l0IGEvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrIGIvbGliL3VrbW1hcC9leHBvcnRz
eW1zLnVrCmluZGV4IDYyMWU5NGYwLi5hMzFjNjM2YiAxMDA2NDQKLS0tIGEvbGliL3VrbW1hcC9l
eHBvcnRzeW1zLnVrCisrKyBiL2xpYi91a21tYXAvZXhwb3J0c3ltcy51awpAQCAtMSArMSwyIEBA
Ci1ub25lCittbWFwCittdW5tYXAKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvbW1hcC5jIGIvbGli
L3VrbW1hcC9tbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjRlMjRm
Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrbW1hcC9tbWFwLmMKQEAgLTAsMCArMSwxNjYg
QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKgor
ICogQXV0aG9yczogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFi
LmV1PgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVD
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1B
WSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1
ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dWsvYWxsb2MuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworc3RydWN0IG1tYXBfYWRkciB7CisJdm9pZCAqYmVnaW47CisJdm9pZCAqZW5kOworCXN0
cnVjdCBtbWFwX2FkZHIgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IG1tYXBfYWRkciAqbW1h
cF9hZGRyOworCisvKioKKyAqIFRoaXMgaXMgbm90IGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBv
ZiBtbWFwLiBJdCBpcyBqdXN0IGEgdHJpY2sgdGhhdCB3b3JrcworICogZm9yIEdvIGJ1dCBpdCBu
ZWVkcyB0byBiZSByZXZpc2l0ZWQuIEluc3RlYWQgb2YgbWFwcGluZywgaXQgYWxsb2NhdGVzIGxl
bgorICogYnl0ZXMgb2YgbWVtb3J5IGFuZCBzdG9yZXMgdGhlIGJlZ2lubmluaWcgYW5kIHRoZSBl
bmQgb2YgdGhhdCBtZW1vcnkgY2h1bmsKKyAqIGluIHN0cnVjdCBtbWFwX2FkZHIuIEF0IGZpcnN0
IGl0IGNoZWNrcyBpZiBhZGRyIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBtZW1vcnkKKyAqIGNodW5r
cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gYSBwcmV2aW91cyBjYWxsIG9mIG1tYXAuIElm
IHRoYXQgaXMgdGhlCisgKiBjYXNlIGFkZHIgaXMgdGhlIHJldHVybiB2YWx1ZS4gT3RoZXJ3aXNl
IGEgbmV3IG1lbW9yeSBibG9jayBpcyBhbGxvY2F0ZWQgYW5kCisgKiB0aGUgcmV0dXJuIHZhbHVl
IGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5pZyBvZiB0aGF0IGJsb2NrLgorICoKKyAqIEdv
IHVzZXMgbW1hcCBhbHdheXMgd2l0aDoKKyAqIEBwcm90ICAgPQllaXRoZXIgUFJPVF9OT05FIG9y
IFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICogQGZsYWdzICA9CWFzIE1BUF9BTk9OfE1BUF9QUklW
QVRFLCBvciBNQVBfRklYRUR8TUFQX0FOT058TUFQX1BSSVZBVEUKKyAqCQlvciBNQVBfTk9SRVNF
UlZFfE1BUF9BTk9OfE1BUF9QUklWQVRFCisgKiBAZmlsZGVzID0JLTEKKyAqIEBvZmYgICAgPQkw
CisgKgorICovCisKK3ZvaWQgKm1tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3Qs
CisJCWludCBmbGFncywgaW50IGZpbGRlcywgb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBtbWFwX2Fk
ZHIgKnRtcCA9IG1tYXBfYWRkciwgKmxhc3QgPSBOVUxMLCAqbmV3ID0gTlVMTDsKKworCWlmICgh
bGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKHZvaWQgKikgLTE7CisJfQorCisJ
LyogQ2hlY2sgaWYgcGFyYW1ldGVycyBtYXRjaCB0aGUgb25lcyB0aGF0IGdvIHVzZQorCSAqIE90
aGVyd2lzZSByZXR1cm4gMCAodW5pbXBsZW1lbnRlZCBtbWFwKQorCSAqLworCWlmIChmaWxkZXMg
IT0gLTEgfHwgb2ZmKQorCQlyZXR1cm4gMDsKKwlpZiAoIShwcm90ICYgKFBST1RfUkVBRHxQUk9U
X1dSSVRFKSkgJiYgKHByb3QgIT0gMCkpCisJCXJldHVybiAwOworCWlmICghKGZsYWdzICYgKE1B
UF9BTk9OfE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX0ZJWEVEfE1BUF9BTk9O
fE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX05PUkVTRVJWRXxNQVBfQU5PTnxN
QVBfUFJJVkFURSkpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICh0bXApIHsKKwkJaWYgKGFkZHIp
IHsKKwkJCWlmIChhZGRyID49IHRtcC0+YmVnaW4gJiYgYWRkciA8IHRtcC0+ZW5kKQorCQkJCXJl
dHVybiBhZGRyOworCQl9CisJCWxhc3QgPSB0bXA7CisJCXRtcCA9IHRtcC0+bmV4dDsKKwl9CisJ
dm9pZCAqbWVtID0gdWtfbWFsbG9jKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGxlbik7CisKKwlp
ZiAoIW1lbSkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICh2b2lkICopIC0xOworCX0K
KwluZXcgPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKHN0cnVjdCBt
bWFwX2FkZHIpKTsKKwluZXctPmJlZ2luID0gbWVtOworCW5ldy0+ZW5kID0gbWVtICsgbGVuOwor
CW5ldy0+bmV4dCA9IE5VTEw7CisJaWYgKCFtbWFwX2FkZHIpCisJCW1tYXBfYWRkciA9IG5ldzsK
KwllbHNlCisJCWxhc3QtPm5leHQgPSBuZXc7CisJcmV0dXJuIG1lbTsKK30KKworLyoKKyAqIG11
bm1hcCBmcmVlcyBsZW4gYnl0ZXMgb3MgbWVtb3J5IHN0YXJ0aW5nIGZyb20gYWRkci4KKyAqIGFk
ZHIgbmVlZHMgdG8gYmUgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGJsb2NrIHRoYXQgaGFzIGJlZW4g
YWxsb2NhdGVkIGZyb20KKyAqIG1tYXAuIElmIGxlbiBoYXMgdGhlIHNhbWUgdmFsdWUgd2l0aCB0
aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgaGFzCisgKiBiZWVuIGFsbG9jYXRlZCBm
cm9tIG1tYXAgdGhlIHN0cnVjdCBtbWFwX2FkZHIgY291bnRlcnBhcnQgaXMgZGVzdHJveWVkLgor
ICogT3RoZXJ3aXNlIHRoZSBpbml0aWFsIG1lbW9yeSBibG9jayBpcyByZXBsYWNlZCBieSBhIHNt
YWxsZXIgb25lLgorICovCisKK2ludCBtdW5tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbikKK3sK
KwlzdHJ1Y3QgbW1hcF9hZGRyICp0bXAgPSBtbWFwX2FkZHIsICpwcmV2ID0gTlVMTDsKKwlzaXpl
X3QgcmVtYWluX21lbTsKKworCWlmICghbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1
cm4gLTE7CisJfQorCWlmICghYWRkcikKKwkJcmV0dXJuIDA7CisJd2hpbGUgKHRtcCkgeworCQlp
ZiAoYWRkciAhPSB0bXAtPmJlZ2luKSB7CisJCQlpZiAodG1wLT5lbmQgPiBhZGRyICsgbGVuKSB7
CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmVtYWluX21l
bSA9IHRtcC0+ZW5kIC0gYWRkciAtIGxlbjsKKwkJCWlmIChyZW1haW5fbWVtKSB7CisKKwkJCQl2
b2lkICptZW0gPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwKKwkJCQkJCXJlbWFp
bl9tZW0pOworCQkJCWlmICghbWVtKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlyZXR1
cm4gLTE7CisJCQkJfQorCQkJCW1lbWNweShtZW0sIGFkZHIrbGVuLCByZW1haW5fbWVtKTsKKwkJ
CQl0bXAtPmJlZ2luID0gbWVtOworCQkJfSBlbHNlIHsKKworCQkJCWlmICghcHJldikKKwkJCQkJ
bW1hcF9hZGRyID0gdG1wLT5uZXh0OworCQkJCWVsc2UKKwkJCQkJcHJldi0+bmV4dCA9IHRtcC0+
bmV4dDsKKwkJCQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIHRtcCk7CisJCQl9CisJ
CQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGFkZHIpOworCQkJcmV0dXJuIDA7CisJ
CX0KKwkJcHJldiA9IHRtcDsKKwkJdG1wID0gdG1wLT5uZXh0OworCX0KKwkvKiB1bmltcGxlbWVu
dGVkIG11bm1hcCAqLworCXJldHVybiAwOworfQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 11:56:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 11:56:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBHWf-00025W-RA; Fri, 20 Sep 2019 11:56:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=p3oF=XP=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iBHWd-00025R-U3
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 11:56:35 +0000
X-Inumbo-ID: aef6819c-db9d-11e9-b299-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.89]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id aef6819c-db9d-11e9-b299-bc764e2007e4;
 Fri, 20 Sep 2019 11:56:31 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ILSJyH6ZJ1mNBNASziGOmf8DL4PFpxb+0vbt7vZ5NnIjKPoaZjXplRWJwgQb+uYiy1iYzTZjadGdfsOJkVP1Sg527FnB2cTSFNAplnzdJP/80CoHElqcX/0Yiwk5HtmYcl/veIwZeTdNhvhpZGlPo0Lp4yqNUdVYrcCI2J2bRVNVDoeGp0iIRvDEmfQGemmlvpdJ1GrbwLGlfo0E/UgroLNEpTWkXEFZwK7xRlC2IZy5WLgSSpGc46A39UvgcbyFklxDb0jjGPg24te58hhGLl1I2WnWe/jqU49OlMLdUajaB9SnLYreDlwkSBuFo2QjWShXCvH+7pvwyujV50qWvw==
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=x8Mjrr7dTFUTJkshn8sO4dd/Q+0yY07ijrQBIGP9Kkc=;
 b=Yf9FVjJkw1JTfSpFaeE7FqXWGadej2KDLPBcjax4tnAqpAzTQRLqb23kXuAWnbM1sGjWli66mGcocViE2WAb9qzjdwz8eRasylvqH+R9E0TsZbmU9Onl7Iqm5xiL2N5cESf5pSao3exHQVPJvdxVmKUP22+j6n6ManSkCy+cMeXcw9NH8SE7HiBSJFZ7HhRsb3y/Xv8iMgKNNbT6noRSjSQ8X5svvr3KjdW2BmMIZGlzpPFHb62H0jYBi7WJtPl0xJRXi1QcfQdIWp9DpYj82WEyO4d5vrX//dcYXBj1ZGV5cax4/AFqheQ7/2dy2eLHkUHHKM9VP3QhMkjtqfXUXw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5003.eurprd01.prod.exchangelabs.com (20.177.210.87) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Fri, 20 Sep
 2019 11:56:28 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Fri, 20 Sep 2019
 11:56:28 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT PATCH v3] lib/vfscore: Add anonymous pipe
Thread-Index: AQHVbtuf+quN3AWHRkOCLOZ+JreH+6c0dyUA
Date: Fri, 20 Sep 2019 11:56:28 +0000
Message-ID: <f5f30375-b19f-a271-a31b-07b3eb4ea40b@stud.acs.upb.ro>
References: <20190919111545.7610-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190919111545.7610-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR1PR01CA0020.eurprd01.prod.exchangelabs.com
 (2603:10a6:102::33) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: e4026ac3-f883-463a-03f8-08d73dc191ff
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7025125)(7027125)(7023125)(5600167)(711020)(4605104)(1401327)(2017052603328)(7193020);
 SRVR:PR1PR01MB5003; 
x-ms-traffictypediagnostic: PR1PR01MB5003:
x-microsoft-antispam-prvs: <PR1PR01MB5003D343766A3639FB21D33FA6880@PR1PR01MB5003.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:7691;
x-forefront-prvs: 0166B75B74
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(376002)(396003)(39830400003)(136003)(366004)(51914003)(199004)(189003)(6486002)(86362001)(66556008)(8936002)(6246003)(8676002)(14454004)(386003)(31696002)(5660300002)(14444005)(6506007)(256004)(186003)(6512007)(53546011)(54896002)(236005)(3846002)(76176011)(7736002)(30864003)(6116002)(66066001)(2616005)(476003)(11346002)(85202003)(6436002)(2906002)(4326008)(446003)(486006)(81166006)(81156014)(99286004)(2501003)(102836004)(26005)(508600001)(110136005)(25786009)(229853002)(316002)(786003)(85182001)(66476007)(66946007)(71200400001)(52116002)(71190400001)(31686004)(64756008)(66446008);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5003;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: hW1WoiQPWIgKi/i1678SqtkMm7Z2NLNmFxrXuQjniIHlM2EhnKXHDC2TPGs9ca47E+CFBp5sD59cBjYej1tQzFne2kDe5rP37DnGFZ0PmJODDd9bsY+yMNatgwLO9AHzZfTqZEvxwyMZSvK+1YLwByesKFJDch7WYWej9EHioDxIwR14bf1oaSzbt0HfrvcKhxFYKDyRqKN7Q7EBkD9iosoIoc+DOTuuTMtPWTDnobfzIO7D6BvA+QyHjsO/AHHLqNP/djl3yXzmMrSXdg00L4YLOlPVMrXWmAWzUbZxeaOOS0wES7OmDTMqtIPVUap4mrIFyEHqHeahNDZhbF+khVL4Pd8NBSDWpipye2Mm54X2yYiAXam3zgk+0ShQcAfJfKTCGszt3qK0BK6qJCOy9apw/qPvExMjAaBxN4u6oFA=
x-ms-exchange-transport-forked: True
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: e4026ac3-f883-463a-03f8-08d73dc191ff
X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2019 11:56:28.6104 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: dlaIGWAK7D/Bhki/Y8wJYKtj2fwvKrcOe+/XE1sxeqZv7WzJnRWIHGdkDsI8v9kolrGGCrXDmOl874cw+Mb+70GPwOr9cAh/bLIqYSsQ1EIIT5vJwtJQg1TpM/iN+T3V
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5003
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3] lib/vfscore: Add anonymous
 pipe
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Bogdan Lascu <lascu.bogdan96@gmail.com>
Content-Type: multipart/mixed; boundary="===============1508772477050758552=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============1508772477050758552==
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_f5f30375b19fa271a31b07b3eb4ea40bstudacsupbro_"

--_000_f5f30375b19fa271a31b07b3eb4ea40bstudacsupbro_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64

SGV5IENvc3RpbiwNCg0KVGhhbmtzIGZvciB0aGUgcGF0Y2guIEkgaGF2ZSBsZWZ0IHR3byBjb21t
ZW50cyBpbmxpbmUgdGhhdCBtYXkgYmUgdXNlZnVsIGZvciBmdXR1cmUgcmV2aXNpb24gb2YgdGhl
IHBpcGUgY29kZS4NCg0KUmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRy
ZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz48bWFpbHRvOnZsYWRfYW5kcmVpLmJhZG9pdUBzdHVk
LmFjcy51cGIucm8+DQoNClZsYWQNCg0KUFM6IEJlZm9yZSB1cHN0cmVhbWluZyB0aGlzIHBhdGNo
LCB3ZSBuZWVkIGFub3RoZXIgcGF0Y2ggdG8gcmVtb3ZlIHRoZSBwaXBlIHN0dWIgZnJvbSBuZXds
aWIuDQoNCk9uIDE5LjA5LjIwMTkgMTQ6MTUsIENvc3RpbiBMdXB1IHdyb3RlOg0KDQpGcm9tOiBC
b2dkYW4gTGFzY3UgPGxhc2N1LmJvZ2Rhbjk2QGdtYWlsLmNvbT48bWFpbHRvOmxhc2N1LmJvZ2Rh
bjk2QGdtYWlsLmNvbT4NCg0KVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGFub255bW91cyBw
aXBlcy4gVGhlIHVuZGVybHlpbmcgYnVmZmVyIGlzIGEgcmluZw0KYnVmZmVyIHdob3NlIHNpemUg
bXVzdCBiZSBhIHBvd2VyIG9mIDIuIFRoZSBjcmVhdGluZyBvZiBpdHMgZmlsZSBkZXNjcmlwdG9y
cw0KZm9sbG93cyBjbG9zZWx5IHRoZSBpbXBsZW1lbnRhdGlvbiBmb3Igc29ja2V0cyBpbiBsd2lw
IGdsdWUgY29kZS4NCg0KU2lnbmVkLW9mZi1ieTogQm9nZGFuIExhc2N1IDxsYXNjdS5ib2dkYW45
NkBnbWFpbC5jb20+PG1haWx0bzpsYXNjdS5ib2dkYW45NkBnbWFpbC5jb20+DQpTaWduZWQtb2Zm
LWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPjxtYWlsdG86Y29zdGluLmx1
cHVAY3MucHViLnJvPg0KLS0tDQogbGliL3Zmc2NvcmUvQ29uZmlnLnVrICAgICB8ICAxMiArLQ0K
IGxpYi92ZnNjb3JlL01ha2VmaWxlLnVrICAgfCAgIDIgKw0KIGxpYi92ZnNjb3JlL2V4cG9ydHN5
bXMudWsgfCAgIDEgKw0KIGxpYi92ZnNjb3JlL3BpcGUuYyAgICAgICAgfCA1NzMgKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiA0IGZpbGVzIGNoYW5nZWQsIDU4NyBpbnNl
cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi92ZnNjb3Jl
L3BpcGUuYw0KDQpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvQ29uZmlnLnVrIGIvbGliL3Zmc2Nv
cmUvQ29uZmlnLnVrDQppbmRleCA2Y2Y2YzYzYS4uNWRlYjdkMDQgMTAwNjQ0DQotLS0gYS9saWIv
dmZzY29yZS9Db25maWcudWsNCisrKyBiL2xpYi92ZnNjb3JlL0NvbmZpZy51aw0KQEAgLTEsNiAr
MSwxNiBAQA0KLWNvbmZpZyBMSUJWRlNDT1JFDQorbWVudWNvbmZpZyBMSUJWRlNDT1JFDQogICAg
ICAgIGJvb2wgInZmc2NvcmU6IFZGUyBDb3JlIEludGVyZmFjZSINCiAgICAgICAgZGVmYXVsdCBu
DQogICAgICAgIHNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQw0KICAgICAgICBzZWxlY3Qg
TElCVUtERUJVRw0KICAgICAgICBzZWxlY3QgTElCVUtMT0NLDQorDQoraWYgTElCVkZTQ09SRQ0K
Kw0KK2NvbmZpZyBMSUJWRlNDT1JFX1BJUEVfU0laRV9PUkRFUg0KKyAgICAgICBpbnQgIlBpcGUg
c2l6ZSBvcmRlciINCisgICAgICAgZGVmYXVsdCAxNg0KKyAgICAgICBoZWxwDQorICAgICAgICAg
ICAgICAgVGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciBmb3IgYW5vbnltb3VzIHBpcGVz
IGlzIDJeb3JkZXIuDQorDQorZW5kaWYNCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9NYWtlZmls
ZS51ayBiL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrDQppbmRleCA3OTg3OGYyNi4uZTM2YzkyMTcg
MTAwNjQ0DQotLS0gYS9saWIvdmZzY29yZS9NYWtlZmlsZS51aw0KKysrIGIvbGliL3Zmc2NvcmUv
TWFrZWZpbGUudWsNCkBAIC0xNCw2ICsxNCw4IEBAIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElC
VkZTQ09SRV9CQVNFKS90YXNrLmMNCiBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVf
QkFTRSkvbG9va3VwLmMNCiBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkv
Zm9wcy5jDQogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL3N1YnJfdWlv
LmMNCitMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvcGlwZS5jDQorTElC
VkZTQ09SRV9QSVBFX0ZMQUdTLXkgKz0gLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUNCiBMSUJWRlND
T1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvZXh0cmEubGQNCg0KDQpkaWZmIC0tZ2l0
IGEvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51ayBiL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsN
CmluZGV4IDQ2MTU2MDk4Li43MDM5MjcyMSAxMDA2NDQNCi0tLSBhL2xpYi92ZnNjb3JlL2V4cG9y
dHN5bXMudWsNCisrKyBiL2xpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsNCkBAIC0xMDksMyArMTA5
LDQgQEAgdm5fc2V0dGltZXMNCiB2bl9zdGF0DQogdm5fdW5sb2NrDQogdmZzX2J1c3kNCitwaXBl
DQpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvcGlwZS5jIGIvbGliL3Zmc2NvcmUvcGlwZS5jDQpu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAuLjRjNTYxMzA0DQotLS0gL2Rldi9u
dWxsDQorKysgYi9saWIvdmZzY29yZS9waXBlLmMNCkBAIC0wLDAgKzEsNTczIEBADQorLyogU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLw0KKy8qDQorICogQXV0aG9yczog
Qm9nZGFuLUdlb3JnZSBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29tPjxtYWlsdG86bGFz
Y3UuYm9nZGFuOTZAZ21haWwuY29tPg0KKyAqICAgICAgICAgIENvc3RpbiBMdXB1IDxjb3N0aW4u
bHVwdUBjcy5wdWIucm8+PG1haWx0bzpjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQorICoNCisgKiBD
b3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBB
bGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQor
ICogYXJlIG1ldDoNCisgKg0KKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0DQorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQorICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cw0K
KyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tDQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCisgKg0KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0K
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUNCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KKyAqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUNCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MNCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUNCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCisgKg0KKyAqIFRI
SVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuDQor
ICovDQorDQorI2luY2x1ZGUgPHVrL2NvbmZpZy5oPg0KKyNpbmNsdWRlIDxzdGRpby5oPg0KKyNp
bmNsdWRlIDxzdHJpbmcuaD4NCisjaW5jbHVkZSA8dmZzY29yZS9maWxlLmg+DQorI2luY2x1ZGUg
PHZmc2NvcmUvZnMuaD4NCisjaW5jbHVkZSA8dmZzY29yZS9tb3VudC5oPg0KKyNpbmNsdWRlIDx2
ZnNjb3JlL3Zub2RlLmg+DQorI2luY2x1ZGUgPHVrL3dhaXQuaD4NCisjaW5jbHVkZSA8c3lzL2lv
Y3RsLmg+DQorDQorLyogV2UgdXNlIHRoZSBkZWZhdWx0IHNpemUgaW4gTGludXgga2VybmVsICov
DQorI2RlZmluZSBQSVBFX01BWF9TSVpFICAoMSA8PCBDT05GSUdfTElCVkZTQ09SRV9QSVBFX1NJ
WkVfT1JERVIpDQorDQorc3RydWN0IHBpcGVfYnVmIHsNCisgICAgICAgLyogVGhlIGJ1ZmZlciAq
Lw0KKyAgICAgICBjaGFyICpkYXRhOw0KKyAgICAgICAvKiBUaGUgYnVmZmVyIGNhcGFjaXR5LCBh
bHdheXMgYSBwb3dlciBvZiAyICovDQorICAgICAgIHVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7DQor
ICAgICAgIC8qIFByb2R1Y2VyIGluZGV4ICovDQorICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvZDsN
CisgICAgICAgLyogQ29uc3VtZXIgaW5kZXggKi8NCisgICAgICAgdW5zaWduZWQgbG9uZyBjb25z
Ow0KKw0KKyAgICAgICAvKiBSZWFkIGxvY2sgKi8NCisgICAgICAgc3RydWN0IHVrX211dGV4IHJk
bG9jazsNCisgICAgICAgLyogV3JpdGUgbG9jayAqLw0KKyAgICAgICBzdHJ1Y3QgdWtfbXV0ZXgg
d3Jsb2NrOw0KKw0KKyAgICAgICAvKiBSZWFkZXJzIHF1ZXVlICovDQorICAgICAgIHN0cnVjdCB1
a193YWl0cSByZHdxOw0KKyAgICAgICAvKiBXcml0ZXJzIHF1ZXVlICovDQorICAgICAgIHN0cnVj
dCB1a193YWl0cSB3cndxOw0KK307DQorDQorI2RlZmluZSBQSVBFX0JVRl9JRFgoYnVmLCBuKSAg
ICAoKG4pICYgKChidWYpLT5jYXBhY2l0eSAtIDEpKQ0KKyNkZWZpbmUgUElQRV9CVUZfUFJPRF9J
RFgoYnVmKSAgUElQRV9CVUZfSURYKChidWYpLCAoYnVmKS0+cHJvZCkNCisjZGVmaW5lIFBJUEVf
QlVGX0NPTlNfSURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgoYnVmKSwgKGJ1ZiktPmNvbnMpDQorDQor
c3RydWN0IHBpcGVfZmlsZSB7DQorICAgICAgIC8qIFBpcGUgYnVmZmVyICovDQorICAgICAgIHN0
cnVjdCBwaXBlX2J1ZiAqYnVmOw0KKyAgICAgICAvKiBXcml0ZSByZWZlcmVuY2UgY291bnQgKi8N
CisgICAgICAgaW50IHdfcmVmY291bnQ7DQorICAgICAgIC8qIFJlYWQgcmVmZXJlbmNlIGNvdW50
ICovDQorICAgICAgIGludCByX3JlZmNvdW50Ow0KKyAgICAgICAvKiBGbGFncyAqLw0KKyAgICAg
ICBpbnQgZmxhZ3M7DQorfTsNCisNCisNCitzdGF0aWMgc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1
Zl9hbGxvYyhpbnQgY2FwYWNpdHkpDQorew0KKyAgICAgICBzdHJ1Y3QgcGlwZV9idWYgKnBpcGVf
YnVmOw0KKw0KKyAgICAgICBVS19BU1NFUlQoUE9XRVJfT0ZfMihjYXBhY2l0eSkpOw0KKw0KKyAg
ICAgICBwaXBlX2J1ZiA9IG1hbGxvYyhzaXplb2YoKnBpcGVfYnVmKSk7DQorICAgICAgIGlmICgh
cGlwZV9idWYpDQorICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQorDQorICAgICAgIHBpcGVf
YnVmLT5kYXRhID0gbWFsbG9jKGNhcGFjaXR5KTsNCisgICAgICAgaWYgKCFwaXBlX2J1Zi0+ZGF0
YSkgew0KKyAgICAgICAgICAgICAgIGZyZWUocGlwZV9idWYpOw0KKyAgICAgICAgICAgICAgIHJl
dHVybiBOVUxMOw0KKyAgICAgICB9DQorDQorICAgICAgIHBpcGVfYnVmLT5jYXBhY2l0eSA9IGNh
cGFjaXR5Ow0KKyAgICAgICBwaXBlX2J1Zi0+Y29ucyA9IDA7DQorICAgICAgIHBpcGVfYnVmLT5w
cm9kID0gMDsNCisgICAgICAgdWtfbXV0ZXhfaW5pdCgmcGlwZV9idWYtPnJkbG9jayk7DQorICAg
ICAgIHVrX211dGV4X2luaXQoJnBpcGVfYnVmLT53cmxvY2spOw0KKyAgICAgICB1a193YWl0cV9p
bml0KCZwaXBlX2J1Zi0+cmR3cSk7DQorICAgICAgIHVrX3dhaXRxX2luaXQoJnBpcGVfYnVmLT53
cndxKTsNCisNCisgICAgICAgcmV0dXJuIHBpcGVfYnVmOw0KK30NCisNCit2b2lkIHBpcGVfYnVm
X2ZyZWUoc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikNCit7DQorICAgICAgIGZyZWUocGlwZV9i
dWYtPmRhdGEpOw0KKyAgICAgICBmcmVlKHBpcGVfYnVmKTsNCit9DQorDQorc3RhdGljIHVuc2ln
bmVkIGxvbmcgcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShjb25zdCBzdHJ1Y3QgcGlwZV9idWYgKnBp
cGVfYnVmKQ0KK3sNCisgICAgICAgcmV0dXJuIHBpcGVfYnVmLT5wcm9kIC0gcGlwZV9idWYtPmNv
bnM7DQorfQ0KKw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBpcGVfYnVmX2dldF9mcmVlX3NwYWNl
KHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQorew0KKyAgICAgICByZXR1cm4gcGlwZV9idWYt
PmNhcGFjaXR5IC0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7DQorfQ0KKw0KK3N0
YXRpYyBpbnQgcGlwZV9idWZfY2FuX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQor
ew0KKyAgICAgICByZXR1cm4gcGlwZV9idWZfZ2V0X2ZyZWVfc3BhY2UocGlwZV9idWYpID4gMDsN
Cit9DQorDQorc3RhdGljIGludCBwaXBlX2J1Zl9jYW5fcmVhZChzdHJ1Y3QgcGlwZV9idWYgKnBp
cGVfYnVmKQ0KK3sNCisgICAgICAgcmV0dXJuIHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9i
dWYpID4gMDsNCit9DQorDQorc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfd3JpdGUoc3Ry
dWN0IHBpcGVfYnVmICpwaXBlX2J1ZiwNCisgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgKmlv
dmVjLCBzaXplX3QgaW92ZWNfb2ZmKQ0KK3sNCisgICAgICAgdW5zaWduZWQgbG9uZyBwcm9kX2lk
eCwgdG9fd3JpdGU7DQorICAgICAgIHZvaWQgKmlvdmVjX2RhdGEgPSBpb3ZlYy0+aW92X2Jhc2Ug
KyBpb3ZlY19vZmY7DQorICAgICAgIHNpemVfdCBpb3ZfbGVuID0gaW92ZWMtPmlvdl9sZW4gLSBp
b3ZlY19vZmY7DQorDQorICAgICAgIHByb2RfaWR4ID0gUElQRV9CVUZfUFJPRF9JRFgocGlwZV9i
dWYpOw0KKyAgICAgICB0b193cml0ZSA9IE1JTihwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShwaXBl
X2J1ZiksIGlvdl9sZW4pOw0KKyAgICAgICBpZiAodG9fd3JpdGUgPT0gMCkNCisgICAgICAgICAg
ICAgICBnb3RvIG91dDsNCisNCisgICAgICAgLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCisgICAg
ICAgaWYgKHByb2RfaWR4ICsgdG9fd3JpdGUgPD0gcGlwZV9idWYtPmNhcGFjaXR5KQ0KKyAgICAg
ICAgICAgICAgIG1lbWNweShwaXBlX2J1Zi0+ZGF0YSArIHByb2RfaWR4LCBpb3ZlY19kYXRhLCB0
b193cml0ZSk7DQorDQorICAgICAgIGVsc2Ugew0KKyAgICAgICAgICAgICAgIGludCBmaXJzdF9j
b3B5X2J5dGVzLCBzZWNvbmRfY29weV9ieXRlczsNCisNCisgICAgICAgICAgICAgICAvKiBDb3B5
IHRoZSBmaXJzdCBwYXJ0ICovDQorICAgICAgICAgICAgICAgZmlyc3RfY29weV9ieXRlcyA9IHBp
cGVfYnVmLT5jYXBhY2l0eSAtIHByb2RfaWR4Ow0KKyAgICAgICAgICAgICAgIG1lbWNweShwaXBl
X2J1Zi0+ZGF0YSArIHByb2RfaWR4LA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
b3ZlY19kYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9jb3B5X2J5
dGVzKTsNCisNCisgICAgICAgICAgICAgICAvKiBDb3B5IHRoZSBzZWNvbmQgcGFydCAqLw0KKyAg
ICAgICAgICAgICAgIHNlY29uZF9jb3B5X2J5dGVzID0gcHJvZF9pZHggKyB0b193cml0ZSAtIHBp
cGVfYnVmLT5jYXBhY2l0eTsNCisgICAgICAgICAgICAgICBtZW1jcHkocGlwZV9idWYtPmRhdGEs
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvdmVjX2RhdGEgKyBmaXJzdF9jb3B5
X2J5dGVzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRfY29weV9ieXRl
cyk7DQorICAgICAgIH0NCisNCisgICAgICAgLyogVXBkYXRlIHByb2R1Y2VyICovDQorICAgICAg
IHBpcGVfYnVmLT5wcm9kICs9IHRvX3dyaXRlOw0KKw0KK291dDoNCisgICAgICAgcmV0dXJuIHRv
X3dyaXRlOw0KK30NCisNCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9yZWFkKHN0cnVj
dCBwaXBlX2J1ZiAqcGlwZV9idWYsDQorICAgICAgICAgICAgICAgc3RydWN0IGlvdmVjICppb3Zl
Yywgc2l6ZV90IGlvdmVjX29mZikNCit7DQorICAgICAgIHVuc2lnbmVkIGxvbmcgY29uc19pZHgs
IHRvX3JlYWQ7DQorICAgICAgIHZvaWQgKmlvdmVjX2RhdGEgPSBpb3ZlYy0+aW92X2Jhc2UgKyBp
b3ZlY19vZmY7DQorICAgICAgIHNpemVfdCBpb3ZfbGVuID0gaW92ZWMtPmlvdl9sZW4gLSBpb3Zl
Y19vZmY7DQorDQorICAgICAgIGNvbnNfaWR4ID0gUElQRV9CVUZfQ09OU19JRFgocGlwZV9idWYp
Ow0KKyAgICAgICB0b19yZWFkID0gTUlOKHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9idWYp
LCBpb3ZfbGVuKTsNCisgICAgICAgaWYgKHRvX3JlYWQgPT0gMCkNCisgICAgICAgICAgICAgICBn
b3RvIG91dDsNCisNCisgICAgICAgLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCisgICAgICAgaWYg
KGNvbnNfaWR4ICsgdG9fcmVhZCA8PSBwaXBlX2J1Zi0+Y2FwYWNpdHkpDQorICAgICAgICAgICAg
ICAgbWVtY3B5KGlvdmVjX2RhdGEsIHBpcGVfYnVmLT5kYXRhICsgY29uc19pZHgsIHRvX3JlYWQp
Ow0KKw0KKyAgICAgICBlbHNlIHsNCisgICAgICAgICAgICAgICBpbnQgZmlyc3RfY29weV9ieXRl
czsNCisgICAgICAgICAgICAgICBpbnQgc2Vjb25kX2NvcHlfYnl0ZXM7DQorDQorICAgICAgICAg
ICAgICAgLyogQ29weSB0aGUgZmlyc3QgcGFydCAqLw0KKyAgICAgICAgICAgICAgIGZpcnN0X2Nv
cHlfYnl0ZXMgPSBwaXBlX2J1Zi0+Y2FwYWNpdHkgLSBwaXBlX2J1Zi0+Y29uczsNCisgICAgICAg
ICAgICAgICBtZW1jcHkoaW92ZWNfZGF0YSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGlwZV9idWYtPmRhdGEgKyBjb25zX2lkeCwNCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmlyc3RfY29weV9ieXRlcyk7DQorDQorICAgICAgICAgICAgICAgLyogQ29weSB0aGUg
c2Vjb25kIHBhcnQgKi8NCisgICAgICAgICAgICAgICBzZWNvbmRfY29weV9ieXRlcyA9IGNvbnNf
aWR4ICsgdG9fcmVhZCAtIHBpcGVfYnVmLT5jYXBhY2l0eTsNCisgICAgICAgICAgICAgICBtZW1j
cHkoaW92ZWNfZGF0YSArIGZpcnN0X2NvcHlfYnl0ZXMsDQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBpcGVfYnVmLT5kYXRhLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWNvbmRfY29weV9ieXRlcyk7DQorICAgICAgIH0NCisNCisgICAgICAgLyogVXBkYXRlIGNv
bnN1bWVyICovDQorICAgICAgIHBpcGVfYnVmLT5jb25zICs9IHRvX3JlYWQ7DQorDQorb3V0Og0K
KyAgICAgICByZXR1cm4gdG9fcmVhZDsNCit9DQorDQorc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9m
aWxlX2FsbG9jKGludCBjYXBhY2l0eSwgaW50IGZsYWdzKQ0KK3sNCisgICAgICAgc3RydWN0IHBp
cGVfZmlsZSAqcGlwZV9maWxlOw0KKw0KKyAgICAgICBwaXBlX2ZpbGUgPSBtYWxsb2Moc2l6ZW9m
KCpwaXBlX2ZpbGUpKTsNCisgICAgICAgaWYgKCFwaXBlX2ZpbGUpDQorICAgICAgICAgICAgICAg
cmV0dXJuIE5VTEw7DQorDQorICAgICAgIHBpcGVfZmlsZS0+YnVmID0gcGlwZV9idWZfYWxsb2Mo
Y2FwYWNpdHkpOw0KKyAgICAgICBpZiAoIXBpcGVfZmlsZS0+YnVmKSB7DQorICAgICAgICAgICAg
ICAgZnJlZShwaXBlX2ZpbGUpOw0KKyAgICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICAg
ICB9DQorDQorICAgICAgIHBpcGVfZmlsZS0+d19yZWZjb3VudCA9IDE7DQorICAgICAgIHBpcGVf
ZmlsZS0+cl9yZWZjb3VudCA9IDE7DQorICAgICAgIHBpcGVfZmlsZS0+ZmxhZ3MgPSBmbGFnczsN
CisNCisgICAgICAgcmV0dXJuIHBpcGVfZmlsZTsNCit9DQorDQordm9pZCBwaXBlX2ZpbGVfZnJl
ZShzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUpDQorew0KKyAgICAgICBwaXBlX2J1Zl9mcmVl
KHBpcGVfZmlsZS0+YnVmKTsNCisgICAgICAgZnJlZShwaXBlX2ZpbGUpOw0KK30NCisNCitzdGF0
aWMgaW50IHBpcGVfd3JpdGUoc3RydWN0IHZub2RlICp2bm9kZSwNCisgICAgICAgICAgICAgICBz
dHJ1Y3QgdWlvICpidWYsIGludCBpb2ZsYWcgX191bnVzZWQpDQorew0KKyAgICAgICBzdHJ1Y3Qg
cGlwZV9maWxlICpwaXBlX2ZpbGUgPSB2bm9kZS0+dl9kYXRhOw0KKyAgICAgICBzdHJ1Y3QgcGlw
ZV9idWYgKnBpcGVfYnVmID0gcGlwZV9maWxlLT5idWY7DQorICAgICAgIGJvb2wgbm9uYmxvY2tp
bmcgPSBmYWxzZTsgLyogVE9ETyBoYW5kbGUgbm9uYmxvY2tpbmcgKi8NCg0KSW4gdGhpcyBjYXNl
IGV2ZW4gdGhvdWdoIHdlIHN1cHBvcnQgbm9uLWJsb2NraW5nIHdlIGFsd2F5cyBoYXZlIHRoZSB2
YWx1ZSBzZXQgdG8gZmFsc2UuDQoNCg0KKyAgICAgICBib29sIGRhdGFfYXZhaWxhYmxlID0gdHJ1
ZTsNCisgICAgICAgaW50IHVpb19pZHggPSAwOw0KKw0KKyAgICAgICBpZiAoIXBpcGVfZmlsZS0+
cl9yZWZjb3VudCkgew0KKyAgICAgICAgICAgICAgIC8qIFRPRE8gYmVmb3JlIHJldHVybmluZyB0
aGUgZXJyb3IsIHNlbmQgYSBTSUdQSVBFIHNpZ25hbCAqLw0KKyAgICAgICAgICAgICAgIHJldHVy
biAtRVBJUEU7DQorICAgICAgIH0NCisNCisgICAgICAgdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYt
PndybG9jayk7DQorICAgICAgIHdoaWxlIChkYXRhX2F2YWlsYWJsZSAmJiB1aW9faWR4IDwgYnVm
LT51aW9faW92Y250KSB7DQorICAgICAgICAgICAgICAgc3RydWN0IGlvdmVjICppb3ZlYyA9ICZi
dWYtPnVpb19pb3ZbdWlvX2lkeF07DQorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvZmYg
PSAwOw0KKw0KKyAgICAgICAgICAgICAgIHdoaWxlIChvZmYgPCBpb3ZlYy0+aW92X2xlbikgew0K
KyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB3cml0dGVuX2J5dGVzOw0KKw0K
KyAgICAgICAgICAgICAgICAgICAgICAgd3JpdHRlbl9ieXRlcyA9IHBpcGVfYnVmX3dyaXRlKHBp
cGVfYnVmLCBpb3ZlYywgb2ZmKTsNCisgICAgICAgICAgICAgICAgICAgICAgIGlmICh3cml0dGVu
X2J5dGVzID09IDApIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTm8gZGF0
YSAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm9uYmxvY2tpbmcpIHsN
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2F2YWlsYWJsZSA9
IGZhbHNlOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K
Kw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdhaXQgdW50aWwgZGF0YSBhdmFpbGFibGUg
Ki8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIXBpcGVf
YnVmX2Nhbl93cml0ZShwaXBlX2J1ZikpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVrX211dGV4X3VubG9jaygmcGlwZV9idWYtPndybG9jayk7DQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1a193YWl0cV93
YWl0X2V2ZW50KCZwaXBlX2J1Zi0+d3J3cSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZV9idWZfY2FuX3dyaXRlKHBpcGVfYnVmKSk7
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1a19tdXRl
eF9sb2NrKCZwaXBlX2J1Zi0+d3Jsb2NrKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIFVwZGF0ZSBieXRlcyB3cml0dGVuX2J5dGVzLiAqLw0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBidWYtPnVpb19yZXNpZCAtPSB3cml0dGVuX2J5dGVzOw0KKw0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvZmYgKz0gd3JpdHRlbl9ieXRlczsNCisNCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FrZSBzb21lIHJlYWRlcnMgKi8NCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWtfd2FpdHFfd2FrZV91cCgmcGlwZV9idWYtPnJk
d3EpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgIH0NCisNCisg
ICAgICAgICAgICAgICB1aW9faWR4Kys7DQorICAgICAgIH0NCisgICAgICAgdWtfbXV0ZXhfdW5s
b2NrKCZwaXBlX2J1Zi0+d3Jsb2NrKTsNCisNCisgICAgICAgcmV0dXJuIDA7DQorfQ0KKw0KK3N0
YXRpYyBpbnQgcGlwZV9yZWFkKHN0cnVjdCB2bm9kZSAqdm5vZGUsDQorICAgICAgICAgICAgICAg
c3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxlLA0KKyAgICAgICAgICAgICAgIHN0cnVj
dCB1aW8gKmJ1ZiwgaW50IGlvZmxhZyBfX3VudXNlZCkNCit7DQorICAgICAgIHN0cnVjdCBwaXBl
X2ZpbGUgKnBpcGVfZmlsZSA9IHZub2RlLT52X2RhdGE7DQorICAgICAgIHN0cnVjdCBwaXBlX2J1
ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUtPmJ1ZjsNCisgICAgICAgYm9vbCBub25ibG9ja2luZyA9
ICh2ZnNjb3JlX2ZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsNCisgICAgICAgYm9vbCBkYXRh
X2F2YWlsYWJsZSA9IHRydWU7DQorICAgICAgIGludCB1aW9faWR4ID0gMDsNCisNCisgICAgICAg
dWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPnJkbG9jayk7DQorICAgICAgIGlmIChub25ibG9ja2lu
ZyAmJiAhcGlwZV9idWZfY2FuX3JlYWQocGlwZV9idWYpKSB7DQorICAgICAgICAgICAgICAgdWtf
bXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsNCisgICAgICAgICAgICAgICByZXR1cm4g
RUFHQUlOOw0KKyAgICAgICB9DQorDQorICAgICAgIHdoaWxlIChkYXRhX2F2YWlsYWJsZSAmJiB1
aW9faWR4IDwgYnVmLT51aW9faW92Y250KSB7DQorICAgICAgICAgICAgICAgc3RydWN0IGlvdmVj
ICppb3ZlYyA9ICZidWYtPnVpb19pb3ZbdWlvX2lkeF07DQorICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBvZmYgPSAwOw0KKw0KKyAgICAgICAgICAgICAgIHdoaWxlIChvZmYgPCBpb3ZlYy0+
aW92X2xlbikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyByZWFkX2J5
dGVzOw0KKw0KKyAgICAgICAgICAgICAgICAgICAgICAgcmVhZF9ieXRlcyA9IHBpcGVfYnVmX3Jl
YWQocGlwZV9idWYsIGlvdmVjLCBvZmYpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJl
YWRfYnl0ZXMgPT0gMCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBObyBk
YXRhICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChub25ibG9ja2luZykg
ew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYXZhaWxhYmxl
ID0gZmFsc2U7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
DQorDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2FpdCB1bnRpbCBkYXRhIGF2YWlsYWJs
ZSAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICghcGlw
ZV9idWZfY2FuX3JlYWQocGlwZV9idWYpKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT5yZGxvY2spOw0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWtfd2FpdHFf
d2FpdF9ldmVudCgmcGlwZV9idWYtPnJkd3EsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVfYnVmKSk7
DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1a19tdXRl
eF9sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8qIFVwZGF0ZSBieXRlcyByZWFkICovDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJ1Zi0+dWlvX3Jlc2lkIC09IHJlYWRfYnl0ZXM7DQorDQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9mZiArPSByZWFkX2J5dGVzOw0KKw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvKiB3YWtlIHNvbWUgd3JpdGVycyAqLw0KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1a193YWl0cV93YWtlX3VwKCZwaXBlX2J1Zi0+d3J3cSk7DQorICAgICAgICAg
ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgIHVp
b19pZHgrKzsNCisgICAgICAgfQ0KKyAgICAgICB1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT5y
ZGxvY2spOw0KKw0KKyAgICAgICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBwaXBlX2Ns
b3NlKHN0cnVjdCB2bm9kZSAqdm5vZGUsDQorICAgICAgICAgICAgICAgc3RydWN0IHZmc2NvcmVf
ZmlsZSAqdmZzY29yZV9maWxlKQ0KK3sNCisgICAgICAgc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9m
aWxlID0gdm5vZGUtPnZfZGF0YTsNCisNCisgICAgICAgVUtfQVNTRVJUKHZmc2NvcmVfZmlsZS0+
Zl9kZW50cnktPmRfdm5vZGUgPT0gdm5vZGUpOw0KKyAgICAgICBVS19BU1NFUlQodm5vZGUtPnZf
cmVmY250ID09IDEpOw0KKw0KKyAgICAgICBpZiAodmZzY29yZV9maWxlLT5mX2ZsYWdzICYgVUtf
RlJFQUQpDQorICAgICAgICAgICAgICAgcGlwZV9maWxlLT5yX3JlZmNvdW50LS07DQoNClNob3Vs
ZG4ndCB3ZSBoYXZlIGEgbG9jayBvbiBwaXBlX2ZpbGUgaW4gb3JkZXIgdG8gYXZvaWQgcmFjZSBj
b25kaXRpb25zPw0KDQoNCisNCisgICAgICAgaWYgKHZmc2NvcmVfZmlsZS0+Zl9mbGFncyAmIFVL
X0ZXUklURSkNCisgICAgICAgICAgICAgICBwaXBlX2ZpbGUtPndfcmVmY291bnQtLTsNCisNCisg
ICAgICAgaWYgKCFwaXBlX2ZpbGUtPnJfcmVmY291bnQgJiYgIXBpcGVfZmlsZS0+d19yZWZjb3Vu
dCkNCisgICAgICAgICAgICAgICBwaXBlX2ZpbGVfZnJlZShwaXBlX2ZpbGUpOw0KKw0KKyAgICAg
ICByZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBwaXBlX3NlZWsoc3RydWN0IHZub2RlICp2
bm9kZSBfX3VudXNlZCwNCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2ZnNjb3JlX2Zp
bGUgKnZmc2NvcmVfZmlsZSBfX3VudXNlZCwNCisgICAgICAgICAgICAgICAgICAgICAgIG9mZl90
IG9mZjEgX191bnVzZWQsIG9mZl90IG9mZjIgX191bnVzZWQpDQorew0KKyAgICAgICBlcnJubyA9
IEVTUElQRTsNCisgICAgICAgcmV0dXJuIC0xOw0KK30NCisNCitzdGF0aWMgaW50IHBpcGVfaW9j
dGwoc3RydWN0IHZub2RlICp2bm9kZSwNCisgICAgICAgICAgICAgICBzdHJ1Y3QgdmZzY29yZV9m
aWxlICp2ZnNjb3JlX2ZpbGUgX191bnVzZWQsDQorICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBjb20sIHZvaWQgKmRhdGEpDQorew0KKyAgICAgICBzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2Zp
bGUgPSB2bm9kZS0+dl9kYXRhOw0KKyAgICAgICBzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmID0g
cGlwZV9maWxlLT5idWY7DQorDQorICAgICAgIHN3aXRjaCAoY29tKSB7DQorICAgICAgIGNhc2Ug
RklPTlJFQUQ6DQorICAgICAgICAgICAgICAgdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPnJkbG9j
ayk7DQorICAgICAgICAgICAgICAgKigoaW50ICopIGRhdGEpID0gcGlwZV9idWZfZ2V0X2F2YWls
YWJsZShwaXBlX2J1Zik7DQorICAgICAgICAgICAgICAgdWtfbXV0ZXhfdW5sb2NrKCZwaXBlX2J1
Zi0+cmRsb2NrKTsNCisgICAgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgZGVmYXVsdDoN
CisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCisgICAgICAgfQ0KK30NCisNCisjZGVm
aW5lIHBpcGVfb3BlbiAgICAgICAgKCh2bm9wX29wZW5fdCkgdmZzY29yZV92b3BfZWludmFsKQ0K
KyNkZWZpbmUgcGlwZV9mc3luYyAgICAgICAoKHZub3BfZnN5bmNfdCkgdmZzY29yZV92b3BfbnVs
bG9wKQ0KKyNkZWZpbmUgcGlwZV9yZWFkZGlyICAgICAoKHZub3BfcmVhZGRpcl90KSB2ZnNjb3Jl
X3ZvcF9laW52YWwpDQorI2RlZmluZSBwaXBlX2xvb2t1cCAgICAgICgodm5vcF9sb29rdXBfdCkg
dmZzY29yZV92b3BfZWludmFsKQ0KKyNkZWZpbmUgcGlwZV9jcmVhdGUgICAgICAoKHZub3BfY3Jl
YXRlX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCisjZGVmaW5lIHBpcGVfcmVtb3ZlICAgICAgKCh2
bm9wX3JlbW92ZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQorI2RlZmluZSBwaXBlX3JlbmFtZSAg
ICAgICgodm5vcF9yZW5hbWVfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KKyNkZWZpbmUgcGlwZV9t
a2RpciAgICAgICAoKHZub3BfbWtkaXJfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KKyNkZWZpbmUg
cGlwZV9ybWRpciAgICAgICAoKHZub3Bfcm1kaXJfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KKyNk
ZWZpbmUgcGlwZV9nZXRhdHRyICAgICAoKHZub3BfZ2V0YXR0cl90KSB2ZnNjb3JlX3ZvcF9laW52
YWwpDQorI2RlZmluZSBwaXBlX3NldGF0dHIgICAgICgodm5vcF9zZXRhdHRyX3QpIHZmc2NvcmVf
dm9wX251bGxvcCkNCisjZGVmaW5lIHBpcGVfaW5hY3RpdmUgICAgKCh2bm9wX2luYWN0aXZlX3Qp
IHZmc2NvcmVfdm9wX2VpbnZhbCkNCisjZGVmaW5lIHBpcGVfdHJ1bmNhdGUgICAgKCh2bm9wX3Ry
dW5jYXRlX3QpIHZmc2NvcmVfdm9wX251bGxvcCkNCisjZGVmaW5lIHBpcGVfbGluayAgICAgICAg
KCh2bm9wX2xpbmtfdCkgdmZzY29yZV92b3BfZXBlcm0pDQorI2RlZmluZSBwaXBlX2NhY2hlICAg
ICAgICgodm5vcF9jYWNoZV90KSBOVUxMKQ0KKyNkZWZpbmUgcGlwZV9yZWFkbGluayAgICAoKHZu
b3BfcmVhZGxpbmtfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KKyNkZWZpbmUgcGlwZV9zeW1saW5r
ICAgICAoKHZub3Bfc3ltbGlua190KSB2ZnNjb3JlX3ZvcF9lcGVybSkNCisjZGVmaW5lIHBpcGVf
ZmFsbG9jYXRlICAgKCh2bm9wX2ZhbGxvY2F0ZV90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApDQorDQor
c3RhdGljIHN0cnVjdCB2bm9wcyBwaXBlX3Zub3BzID0gew0KKyAgICAgICAudm9wX29wZW4gICAg
ICA9IHBpcGVfb3BlbiwNCisgICAgICAgLnZvcF9jbG9zZSAgICAgPSBwaXBlX2Nsb3NlLA0KKyAg
ICAgICAudm9wX3JlYWQgICAgICA9IHBpcGVfcmVhZCwNCisgICAgICAgLnZvcF93cml0ZSAgICAg
PSBwaXBlX3dyaXRlLA0KKyAgICAgICAudm9wX3NlZWsgICAgICA9IHBpcGVfc2VlaywNCisgICAg
ICAgLnZvcF9pb2N0bCAgICAgPSBwaXBlX2lvY3RsLA0KKyAgICAgICAudm9wX2ZzeW5jICAgICA9
IHBpcGVfZnN5bmMsDQorICAgICAgIC52b3BfcmVhZGRpciAgID0gcGlwZV9yZWFkZGlyLA0KKyAg
ICAgICAudm9wX2xvb2t1cCAgICA9IHBpcGVfbG9va3VwLA0KKyAgICAgICAudm9wX2NyZWF0ZSAg
ICA9IHBpcGVfY3JlYXRlLA0KKyAgICAgICAudm9wX3JlbW92ZSAgICA9IHBpcGVfcmVtb3ZlLA0K
KyAgICAgICAudm9wX3JlbmFtZSAgICA9IHBpcGVfcmVuYW1lLA0KKyAgICAgICAudm9wX21rZGly
ICAgICA9IHBpcGVfbWtkaXIsDQorICAgICAgIC52b3Bfcm1kaXIgICAgID0gcGlwZV9ybWRpciwN
CisgICAgICAgLnZvcF9nZXRhdHRyICAgPSBwaXBlX2dldGF0dHIsDQorICAgICAgIC52b3Bfc2V0
YXR0ciAgID0gcGlwZV9zZXRhdHRyLA0KKyAgICAgICAudm9wX2luYWN0aXZlICA9IHBpcGVfaW5h
Y3RpdmUsDQorICAgICAgIC52b3BfdHJ1bmNhdGUgID0gcGlwZV90cnVuY2F0ZSwNCisgICAgICAg
LnZvcF9saW5rICAgICAgPSBwaXBlX2xpbmssDQorICAgICAgIC52b3BfY2FjaGUgICAgID0gcGlw
ZV9jYWNoZSwNCisgICAgICAgLnZvcF9mYWxsb2NhdGUgPSBwaXBlX2ZhbGxvY2F0ZSwNCisgICAg
ICAgLnZvcF9yZWFkbGluayAgPSBwaXBlX3JlYWRsaW5rLA0KKyAgICAgICAudm9wX3N5bWxpbmsg
ICA9IHBpcGVfc3ltbGluaw0KK307DQorDQorI2RlZmluZSBwaXBlX3ZnZXQgICgodmZzb3Bfdmdl
dF90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApDQorDQorc3RhdGljIHN0cnVjdCB2ZnNvcHMgcGlwZV92
ZnNvcHMgPSB7DQorICAgICAgIC52ZnNfdmdldCA9IHBpcGVfdmdldCwNCisgICAgICAgLnZmc192
bm9wcyA9ICZwaXBlX3Zub3BzDQorfTsNCisNCitzdGF0aWMgdWludDY0X3QgcF9pbm9kZTsNCisN
CisvKg0KKyAqIEJvZ3VzIG1vdW50IHBvaW50IHVzZWQgYnkgYWxsIHNvY2tldHMNCisgKi8NCitz
dGF0aWMgc3RydWN0IG1vdW50IHBfbW91bnQgPSB7DQorICAgICAgIC5tX29wID0gJnBpcGVfdmZz
b3BzDQorfTsNCisNCitzdGF0aWMgaW50IHBpcGVfZmRfYWxsb2Moc3RydWN0IHBpcGVfZmlsZSAq
cGlwZV9maWxlLCBpbnQgZmxhZ3MpDQorew0KKyAgICAgICBpbnQgcmV0ID0gMDsNCisgICAgICAg
aW50IHZmc19mZDsNCisgICAgICAgc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzX2ZpbGUgPSBOVUxM
Ow0KKyAgICAgICBzdHJ1Y3QgZGVudHJ5ICpwX2RlbnRyeTsNCisgICAgICAgc3RydWN0IHZub2Rl
ICpwX3Zub2RlOw0KKw0KKyAgICAgICAvKiBSZXNlcnZlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIg
Ki8NCisgICAgICAgdmZzX2ZkID0gdmZzY29yZV9hbGxvY19mZCgpOw0KKyAgICAgICBpZiAodmZz
X2ZkIDwgMCkgew0KKyAgICAgICAgICAgICAgIHJldCA9IC1FTkZJTEU7DQorICAgICAgICAgICAg
ICAgZ290byBFUlJfRVhJVDsNCisgICAgICAgfQ0KKw0KKyAgICAgICAvKiBBbGxvY2F0ZSBmaWxl
LCBkZW50cnksIGFuZCB2bm9kZSAqLw0KKyAgICAgICB2ZnNfZmlsZSA9IGNhbGxvYygxLCBzaXpl
b2YoKnZmc19maWxlKSk7DQorICAgICAgIGlmICghdmZzX2ZpbGUpIHsNCisgICAgICAgICAgICAg
ICByZXQgPSAtRU5PTUVNOw0KKyAgICAgICAgICAgICAgIGdvdG8gRVJSX01BTExPQ19WRlNfRklM
RTsNCisgICAgICAgfQ0KKw0KKyAgICAgICByZXQgPSB2ZnNjb3JlX3ZnZXQoJnBfbW91bnQsIHBf
aW5vZGUrKywgJnBfdm5vZGUpOw0KKyAgICAgICBVS19BU1NFUlQocmV0ID09IDApOyAvKiB3ZSBz
aG91bGQgbm90IGZpbmQgaXQgaW4gY2FjaGUgKi8NCisNCisgICAgICAgaWYgKCFwX3Zub2RlKSB7
DQorICAgICAgICAgICAgICAgcmV0ID0gLUVOT01FTTsNCisgICAgICAgICAgICAgICBnb3RvIEVS
Ul9BTExPQ19WTk9ERTsNCisgICAgICAgfQ0KKw0KKyAgICAgICB1a19tdXRleF91bmxvY2soJnBf
dm5vZGUtPnZfbG9jayk7DQorDQorICAgICAgIHBfZGVudHJ5ID0gZGVudHJ5X2FsbG9jKE5VTEws
IHBfdm5vZGUsICIvIik7DQorICAgICAgIGlmICghcF9kZW50cnkpIHsNCisgICAgICAgICAgICAg
ICByZXQgPSAtRU5PTUVNOw0KKyAgICAgICAgICAgICAgIGdvdG8gRVJSX0FMTE9DX0RFTlRSWTsN
CisgICAgICAgfQ0KKw0KKyAgICAgICAvKiBGaWxsIG91dCBuZWNlc3NhcnkgZmllbGRzLiAqLw0K
KyAgICAgICB2ZnNfZmlsZS0+ZmQgPSB2ZnNfZmQ7DQorICAgICAgIHZmc19maWxlLT5mX2ZsYWdz
ID0gZmxhZ3M7DQorICAgICAgIHZmc19maWxlLT5mX2NvdW50ID0gMTsNCisgICAgICAgdmZzX2Zp
bGUtPmZfZGF0YSA9IHBpcGVfZmlsZTsNCisgICAgICAgdmZzX2ZpbGUtPmZfZGVudHJ5ID0gcF9k
ZW50cnk7DQorICAgICAgIHZmc19maWxlLT5mX3Zmc19mbGFncyA9IFVLX1ZGU0NPUkVfTk9QT1M7
DQorDQorICAgICAgIHBfdm5vZGUtPnZfZGF0YSA9IHBpcGVfZmlsZTsNCisgICAgICAgcF92bm9k
ZS0+dl90eXBlID0gVkZJRk87DQorDQorICAgICAgIC8qIEFzc2lnbiB0aGUgZmlsZSBkZXNjcmlw
dG9ycyB0byB0aGUgY29ycmVzcG9uZGluZyB2ZnNfZmlsZS4gKi8NCisgICAgICAgcmV0ID0gdmZz
Y29yZV9pbnN0YWxsX2ZkKHZmc19mZCwgdmZzX2ZpbGUpOw0KKyAgICAgICBpZiAocmV0KQ0KKyAg
ICAgICAgICAgICAgIGdvdG8gRVJSX1ZGU19JTlNUQUxMOw0KKw0KKyAgICAgICAvKiBPbmx5IHRo
ZSBkZW50cnkgc2hvdWxkIGhvbGQgYSByZWZlcmVuY2U7IHJlbGVhc2Ugb3VycyAqLw0KKyAgICAg
ICB2cmVsZShwX3Zub2RlKTsNCisNCisgICAgICAgcmV0dXJuIHZmc19mZDsNCisNCitFUlJfVkZT
X0lOU1RBTEw6DQorICAgICAgIGRyZWxlKHBfZGVudHJ5KTsNCitFUlJfQUxMT0NfREVOVFJZOg0K
KyAgICAgICB2cmVsZShwX3Zub2RlKTsNCitFUlJfQUxMT0NfVk5PREU6DQorICAgICAgIGZyZWUo
dmZzX2ZpbGUpOw0KK0VSUl9NQUxMT0NfVkZTX0ZJTEU6DQorICAgICAgIHZmc2NvcmVfcHV0X2Zk
KHZmc19mZCk7DQorRVJSX0VYSVQ6DQorICAgICAgIFVLX0FTU0VSVChyZXQgPCAwKTsNCisgICAg
ICAgcmV0dXJuIHJldDsNCit9DQorDQoraW50IHBpcGUoaW50IHBpcGVmZFsyXSkNCit7DQorICAg
ICAgIGludCByZXQgPSAwOw0KKyAgICAgICBpbnQgcl9mZCwgd19mZDsNCisgICAgICAgc3RydWN0
IHBpcGVfZmlsZSAqcGlwZV9maWxlOw0KKw0KKyAgICAgICAvKiBBbGxvY2F0ZSBwaXBlIGludGVy
bmFsIHN0cnVjdHVyZS4gKi8NCisgICAgICAgcGlwZV9maWxlID0gcGlwZV9maWxlX2FsbG9jKFBJ
UEVfTUFYX1NJWkUsIDApOw0KKyAgICAgICBpZiAoIXBpcGVfZmlsZSkgew0KKyAgICAgICAgICAg
ICAgIHJldCA9IC1FTk9NRU07DQorICAgICAgICAgICAgICAgZ290byBFUlJfRVhJVDsNCisgICAg
ICAgfQ0KKw0KKyAgICAgICByX2ZkID0gcGlwZV9mZF9hbGxvYyhwaXBlX2ZpbGUsIFVLX0ZSRUFE
KTsNCisgICAgICAgaWYgKHJfZmQgPCAwKQ0KKyAgICAgICAgICAgICAgIGdvdG8gRVJSX1ZGU19J
TlNUQUxMOw0KKw0KKyAgICAgICB3X2ZkID0gcGlwZV9mZF9hbGxvYyhwaXBlX2ZpbGUsIFVLX0ZX
UklURSk7DQorICAgICAgIGlmICh3X2ZkIDwgMCkNCisgICAgICAgICAgICAgICBnb3RvIEVSUl9X
X0ZEOw0KKw0KKyAgICAgICAvKiBGaWxsIHBpcGVmZCBmaWVsZHMuICovDQorICAgICAgIHBpcGVm
ZFswXSA9IHJfZmQ7DQorICAgICAgIHBpcGVmZFsxXSA9IHdfZmQ7DQorDQorICAgICAgIHJldHVy
biByZXQ7DQorDQorRVJSX1dfRkQ6DQorICAgICAgIHZmc2NvcmVfcHV0X2ZkKHJfZmQpOw0KK0VS
Ul9WRlNfSU5TVEFMTDoNCisgICAgICAgcGlwZV9maWxlX2ZyZWUocGlwZV9maWxlKTsNCitFUlJf
RVhJVDoNCisgICAgICAgVUtfQVNTRVJUKHJldCA8IDApOw0KKyAgICAgICByZXR1cm4gcmV0Ow0K
K30NCg0K

--_000_f5f30375b19fa271a31b07b3eb4ea40bstudacsupbro_
Content-Type: text/html; charset="utf-8"
Content-ID: <055E61A96C200A40BAC4B678CBA7C3E8@eurprd01.prod.exchangelabs.com>
Content-Transfer-Encoding: base64

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0i
dGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4NCjwvaGVhZD4NCjxib2R5IHRleHQ9IiMwMDAwMDAi
IGJnY29sb3I9IiNGRkZGRkYiPg0KPHA+PGZvbnQgc2l6ZT0iLTEiPkhleSBDb3N0aW4sPC9mb250
PjwvcD4NCjxwPjxmb250IHNpemU9Ii0xIj5UaGFua3MgZm9yIHRoZSBwYXRjaC4gSSBoYXZlIGxl
ZnQgdHdvIGNvbW1lbnRzIGlubGluZSB0aGF0IG1heSBiZSB1c2VmdWwgZm9yIGZ1dHVyZSByZXZp
c2lvbiBvZiB0aGUgcGlwZSBjb2RlLjxicj4NCjwvZm9udD48L3A+DQo8cHJlIGNsYXNzPSJtb3ot
cXVvdGUtcHJlIiB3cmFwPSIiPlJldmlld2VkLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUJPGEgY2xh
c3M9Im1vei10eHQtbGluay1yZmMyMzk2RSIgaHJlZj0ibWFpbHRvOnZsYWRfYW5kcmVpLmJhZG9p
dUBzdHVkLmFjcy51cGIucm8iPiZsdDt2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJv
Jmd0OzwvYT48L3ByZT4NCjxwPjxmb250IHNpemU9Ii0xIj5WbGFkPC9mb250PjwvcD4NCjxwPjxm
b250IHNpemU9Ii0xIj5QUzogQmVmb3JlIHVwc3RyZWFtaW5nIHRoaXMgcGF0Y2gsIHdlIG5lZWQg
YW5vdGhlciBwYXRjaCB0byByZW1vdmUgdGhlIHBpcGUgc3R1YiBmcm9tIG5ld2xpYi48YnI+DQo8
L2ZvbnQ+PC9wPg0KPGRpdiBjbGFzcz0ibW96LWNpdGUtcHJlZml4Ij5PbiAxOS4wOS4yMDE5IDE0
OjE1LCBDb3N0aW4gTHVwdSB3cm90ZTo8YnI+DQo8L2Rpdj4NCjxibG9ja3F1b3RlIHR5cGU9ImNp
dGUiIGNpdGU9Im1pZDoyMDE5MDkxOTExMTU0NS43NjEwLTEtY29zdGluLmx1cHVAY3MucHViLnJv
Ij4NCjxwcmUgY2xhc3M9Im1vei1xdW90ZS1wcmUiIHdyYXA9IiI+RnJvbTogQm9nZGFuIExhc2N1
IDxhIGNsYXNzPSJtb3otdHh0LWxpbmstcmZjMjM5NkUiIGhyZWY9Im1haWx0bzpsYXNjdS5ib2dk
YW45NkBnbWFpbC5jb20iPiZsdDtsYXNjdS5ib2dkYW45NkBnbWFpbC5jb20mZ3Q7PC9hPg0KDQpU
aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYW5vbnltb3VzIHBpcGVzLiBUaGUgdW5kZXJseWlu
ZyBidWZmZXIgaXMgYSByaW5nDQpidWZmZXIgd2hvc2Ugc2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2Yg
Mi4gVGhlIGNyZWF0aW5nIG9mIGl0cyBmaWxlIGRlc2NyaXB0b3JzDQpmb2xsb3dzIGNsb3NlbHkg
dGhlIGltcGxlbWVudGF0aW9uIGZvciBzb2NrZXRzIGluIGx3aXAgZ2x1ZSBjb2RlLg0KDQpTaWdu
ZWQtb2ZmLWJ5OiBCb2dkYW4gTGFzY3UgPGEgY2xhc3M9Im1vei10eHQtbGluay1yZmMyMzk2RSIg
aHJlZj0ibWFpbHRvOmxhc2N1LmJvZ2Rhbjk2QGdtYWlsLmNvbSI+Jmx0O2xhc2N1LmJvZ2Rhbjk2
QGdtYWlsLmNvbSZndDs8L2E+DQpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8YSBjbGFzcz0i
bW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJtYWlsdG86Y29zdGluLmx1cHVAY3MucHViLnJv
Ij4mbHQ7Y29zdGluLmx1cHVAY3MucHViLnJvJmd0OzwvYT4NCi0tLQ0KIGxpYi92ZnNjb3JlL0Nv
bmZpZy51ayAgICAgfCAgMTIgJiM0MzstDQogbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsgICB8ICAg
MiAmIzQzOw0KIGxpYi92ZnNjb3JlL2V4cG9ydHN5bXMudWsgfCAgIDEgJiM0MzsNCiBsaWIvdmZz
Y29yZS9waXBlLmMgICAgICAgIHwgNTczICYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYj
NDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQz
OyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0Mzsm
IzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsmIzQzOyYjNDM7JiM0MzsNCiA0IGZpbGVzIGNo
YW5nZWQsIDU4NyBpbnNlcnRpb25zKCYjNDM7KSwgMSBkZWxldGlvbigtKQ0KIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBsaWIvdmZzY29yZS9waXBlLmMNCg0KZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL0Nv
bmZpZy51ayBiL2xpYi92ZnNjb3JlL0NvbmZpZy51aw0KaW5kZXggNmNmNmM2M2EuLjVkZWI3ZDA0
IDEwMDY0NA0KLS0tIGEvbGliL3Zmc2NvcmUvQ29uZmlnLnVrDQomIzQzOyYjNDM7JiM0MzsgYi9s
aWIvdmZzY29yZS9Db25maWcudWsNCkBAIC0xLDYgJiM0MzsxLDE2IEBADQotY29uZmlnIExJQlZG
U0NPUkUNCiYjNDM7bWVudWNvbmZpZyBMSUJWRlNDT1JFDQogCWJvb2wgJnF1b3Q7dmZzY29yZTog
VkZTIENvcmUgSW50ZXJmYWNlJnF1b3Q7DQogCWRlZmF1bHQgbg0KIAlzZWxlY3QgTElCTk9MSUJD
IGlmICFIQVZFX0xJQkMNCiAJc2VsZWN0IExJQlVLREVCVUcNCiAJc2VsZWN0IExJQlVLTE9DSw0K
JiM0MzsNCiYjNDM7aWYgTElCVkZTQ09SRQ0KJiM0MzsNCiYjNDM7Y29uZmlnIExJQlZGU0NPUkVf
UElQRV9TSVpFX09SREVSDQomIzQzOwlpbnQgJnF1b3Q7UGlwZSBzaXplIG9yZGVyJnF1b3Q7DQom
IzQzOwlkZWZhdWx0IDE2DQomIzQzOwloZWxwDQomIzQzOwkJVGhlIHNpemUgb2YgdGhlIGludGVy
bmFsIGJ1ZmZlciBmb3IgYW5vbnltb3VzIHBpcGVzIGlzIDJeb3JkZXIuDQomIzQzOw0KJiM0Mztl
bmRpZg0KZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrIGIvbGliL3Zmc2NvcmUv
TWFrZWZpbGUudWsNCmluZGV4IDc5ODc4ZjI2Li5lMzZjOTIxNyAxMDA2NDQNCi0tLSBhL2xpYi92
ZnNjb3JlL01ha2VmaWxlLnVrDQomIzQzOyYjNDM7JiM0MzsgYi9saWIvdmZzY29yZS9NYWtlZmls
ZS51aw0KQEAgLTE0LDYgJiM0MzsxNCw4IEBAIExJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJ
QlZGU0NPUkVfQkFTRSkvdGFzay5jDQogTElCVkZTQ09SRV9TUkNTLXkgJiM0Mzs9ICQoTElCVkZT
Q09SRV9CQVNFKS9sb29rdXAuYw0KIExJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJQlZGU0NP
UkVfQkFTRSkvZm9wcy5jDQogTElCVkZTQ09SRV9TUkNTLXkgJiM0Mzs9ICQoTElCVkZTQ09SRV9C
QVNFKS9zdWJyX3Vpby5jDQomIzQzO0xJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJQlZGU0NP
UkVfQkFTRSkvcGlwZS5jDQomIzQzO0xJQlZGU0NPUkVfUElQRV9GTEFHUy15ICYjNDM7PSAtV25v
LWNhc3QtZnVuY3Rpb24tdHlwZQ0KIExJQlZGU0NPUkVfU1JDUy15ICYjNDM7PSAkKExJQlZGU0NP
UkVfQkFTRSkvZXh0cmEubGQNCiANCiANCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9leHBvcnRz
eW1zLnVrIGIvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51aw0KaW5kZXggNDYxNTYwOTguLjcwMzky
NzIxIDEwMDY0NA0KLS0tIGEvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51aw0KJiM0MzsmIzQzOyYj
NDM7IGIvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51aw0KQEAgLTEwOSwzICYjNDM7MTA5LDQgQEAg
dm5fc2V0dGltZXMNCiB2bl9zdGF0DQogdm5fdW5sb2NrDQogdmZzX2J1c3kNCiYjNDM7cGlwZQ0K
ZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL3BpcGUuYyBiL2xpYi92ZnNjb3JlL3BpcGUuYw0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwLi40YzU2MTMwNA0KLS0tIC9kZXYvbnVs
bA0KJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Zmc2NvcmUvcGlwZS5jDQpAQCAtMCwwICYjNDM7MSw1
NzMgQEANCiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLw0K
JiM0MzsvKg0KJiM0MzsgKiBBdXRob3JzOiBCb2dkYW4tR2VvcmdlIExhc2N1IDxhIGNsYXNzPSJt
b3otdHh0LWxpbmstcmZjMjM5NkUiIGhyZWY9Im1haWx0bzpsYXNjdS5ib2dkYW45NkBnbWFpbC5j
b20iPiZsdDtsYXNjdS5ib2dkYW45NkBnbWFpbC5jb20mZ3Q7PC9hPg0KJiM0MzsgKiAgICAgICAg
ICBDb3N0aW4gTHVwdSA8YSBjbGFzcz0ibW96LXR4dC1saW5rLXJmYzIzOTZFIiBocmVmPSJtYWls
dG86Y29zdGluLmx1cHVAY3MucHViLnJvIj4mbHQ7Y29zdGluLmx1cHVAY3MucHViLnJvJmd0Ozwv
YT4NCiYjNDM7ICoNCiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0
ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiYjNDM7ICoNCiYjNDM7
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0DQomIzQzOyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KJiM0MzsgKiBhcmUgbWV0Og0KJiM0Mzsg
Kg0KJiM0MzsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodA0KJiM0MzsgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQomIzQzOyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
DQomIzQzOyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiYjNDM7ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCiYjNDM7ICog
My4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVz
IG9mIGl0cw0KJiM0MzsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KJiM0MzsgKiAgICB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KJiM0MzsgKg0KJiM0
MzsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICZxdW90O0FTIElTJnF1b3Q7DQomIzQzOyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUNCiYjNDM7ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCiYjNDM7ICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQ0K
JiM0MzsgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SDQomIzQzOyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQomIzQzOyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUw0KJiM0MzsgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KJiM0MzsgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0K
JiM0MzsgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KJiM0MzsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4NCiYjNDM7ICoNCiYjNDM7ICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQg
T1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4NCiYjNDM7ICovDQomIzQzOw0KJiM0MzsjaW5jbHVkZSAm
bHQ7dWsvY29uZmlnLmgmZ3Q7DQomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0Ow0KJiM0Mzsj
aW5jbHVkZSAmbHQ7c3RyaW5nLmgmZ3Q7DQomIzQzOyNpbmNsdWRlICZsdDt2ZnNjb3JlL2ZpbGUu
aCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0O3Zmc2NvcmUvZnMuaCZndDsNCiYjNDM7I2luY2x1ZGUg
Jmx0O3Zmc2NvcmUvbW91bnQuaCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0O3Zmc2NvcmUvdm5vZGUu
aCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0O3VrL3dhaXQuaCZndDsNCiYjNDM7I2luY2x1ZGUgJmx0
O3N5cy9pb2N0bC5oJmd0Ow0KJiM0MzsNCiYjNDM7LyogV2UgdXNlIHRoZSBkZWZhdWx0IHNpemUg
aW4gTGludXgga2VybmVsICovDQomIzQzOyNkZWZpbmUgUElQRV9NQVhfU0laRQkoMSAmbHQ7Jmx0
OyBDT05GSUdfTElCVkZTQ09SRV9QSVBFX1NJWkVfT1JERVIpDQomIzQzOw0KJiM0MztzdHJ1Y3Qg
cGlwZV9idWYgew0KJiM0MzsJLyogVGhlIGJ1ZmZlciAqLw0KJiM0MzsJY2hhciAqZGF0YTsNCiYj
NDM7CS8qIFRoZSBidWZmZXIgY2FwYWNpdHksIGFsd2F5cyBhIHBvd2VyIG9mIDIgKi8NCiYjNDM7
CXVuc2lnbmVkIGxvbmcgY2FwYWNpdHk7DQomIzQzOwkvKiBQcm9kdWNlciBpbmRleCAqLw0KJiM0
MzsJdW5zaWduZWQgbG9uZyBwcm9kOw0KJiM0MzsJLyogQ29uc3VtZXIgaW5kZXggKi8NCiYjNDM7
CXVuc2lnbmVkIGxvbmcgY29uczsNCiYjNDM7DQomIzQzOwkvKiBSZWFkIGxvY2sgKi8NCiYjNDM7
CXN0cnVjdCB1a19tdXRleCByZGxvY2s7DQomIzQzOwkvKiBXcml0ZSBsb2NrICovDQomIzQzOwlz
dHJ1Y3QgdWtfbXV0ZXggd3Jsb2NrOw0KJiM0MzsNCiYjNDM7CS8qIFJlYWRlcnMgcXVldWUgKi8N
CiYjNDM7CXN0cnVjdCB1a193YWl0cSByZHdxOw0KJiM0MzsJLyogV3JpdGVycyBxdWV1ZSAqLw0K
JiM0MzsJc3RydWN0IHVrX3dhaXRxIHdyd3E7DQomIzQzO307DQomIzQzOw0KJiM0MzsjZGVmaW5l
IFBJUEVfQlVGX0lEWChidWYsIG4pICAgICgobikgJmFtcDsgKChidWYpLSZndDtjYXBhY2l0eSAt
IDEpKQ0KJiM0MzsjZGVmaW5lIFBJUEVfQlVGX1BST0RfSURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgo
YnVmKSwgKGJ1ZiktJmd0O3Byb2QpDQomIzQzOyNkZWZpbmUgUElQRV9CVUZfQ09OU19JRFgoYnVm
KSAgUElQRV9CVUZfSURYKChidWYpLCAoYnVmKS0mZ3Q7Y29ucykNCiYjNDM7DQomIzQzO3N0cnVj
dCBwaXBlX2ZpbGUgew0KJiM0MzsJLyogUGlwZSBidWZmZXIgKi8NCiYjNDM7CXN0cnVjdCBwaXBl
X2J1ZiAqYnVmOw0KJiM0MzsJLyogV3JpdGUgcmVmZXJlbmNlIGNvdW50ICovDQomIzQzOwlpbnQg
d19yZWZjb3VudDsNCiYjNDM7CS8qIFJlYWQgcmVmZXJlbmNlIGNvdW50ICovDQomIzQzOwlpbnQg
cl9yZWZjb3VudDsNCiYjNDM7CS8qIEZsYWdzICovDQomIzQzOwlpbnQgZmxhZ3M7DQomIzQzO307
DQomIzQzOw0KJiM0MzsNCiYjNDM7c3RhdGljIHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWZfYWxs
b2MoaW50IGNhcGFjaXR5KQ0KJiM0Mzt7DQomIzQzOwlzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVm
Ow0KJiM0MzsNCiYjNDM7CVVLX0FTU0VSVChQT1dFUl9PRl8yKGNhcGFjaXR5KSk7DQomIzQzOw0K
JiM0MzsJcGlwZV9idWYgPSBtYWxsb2Moc2l6ZW9mKCpwaXBlX2J1ZikpOw0KJiM0MzsJaWYgKCFw
aXBlX2J1ZikNCiYjNDM7CQlyZXR1cm4gTlVMTDsNCiYjNDM7DQomIzQzOwlwaXBlX2J1Zi0mZ3Q7
ZGF0YSA9IG1hbGxvYyhjYXBhY2l0eSk7DQomIzQzOwlpZiAoIXBpcGVfYnVmLSZndDtkYXRhKSB7
DQomIzQzOwkJZnJlZShwaXBlX2J1Zik7DQomIzQzOwkJcmV0dXJuIE5VTEw7DQomIzQzOwl9DQom
IzQzOw0KJiM0MzsJcGlwZV9idWYtJmd0O2NhcGFjaXR5ID0gY2FwYWNpdHk7DQomIzQzOwlwaXBl
X2J1Zi0mZ3Q7Y29ucyA9IDA7DQomIzQzOwlwaXBlX2J1Zi0mZ3Q7cHJvZCA9IDA7DQomIzQzOwl1
a19tdXRleF9pbml0KCZhbXA7cGlwZV9idWYtJmd0O3JkbG9jayk7DQomIzQzOwl1a19tdXRleF9p
bml0KCZhbXA7cGlwZV9idWYtJmd0O3dybG9jayk7DQomIzQzOwl1a193YWl0cV9pbml0KCZhbXA7
cGlwZV9idWYtJmd0O3Jkd3EpOw0KJiM0MzsJdWtfd2FpdHFfaW5pdCgmYW1wO3BpcGVfYnVmLSZn
dDt3cndxKTsNCiYjNDM7DQomIzQzOwlyZXR1cm4gcGlwZV9idWY7DQomIzQzO30NCiYjNDM7DQom
IzQzO3ZvaWQgcGlwZV9idWZfZnJlZShzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmKQ0KJiM0Mzt7
DQomIzQzOwlmcmVlKHBpcGVfYnVmLSZndDtkYXRhKTsNCiYjNDM7CWZyZWUocGlwZV9idWYpOw0K
JiM0Mzt9DQomIzQzOw0KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9nZXRfYXZh
aWxhYmxlKGNvbnN0IHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQomIzQzO3sNCiYjNDM7CXJl
dHVybiBwaXBlX2J1Zi0mZ3Q7cHJvZCAtIHBpcGVfYnVmLSZndDtjb25zOw0KJiM0Mzt9DQomIzQz
Ow0KJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShzdHJ1
Y3QgcGlwZV9idWYgKnBpcGVfYnVmKQ0KJiM0Mzt7DQomIzQzOwlyZXR1cm4gcGlwZV9idWYtJmd0
O2NhcGFjaXR5IC0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7DQomIzQzO30NCiYj
NDM7DQomIzQzO3N0YXRpYyBpbnQgcGlwZV9idWZfY2FuX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAq
cGlwZV9idWYpDQomIzQzO3sNCiYjNDM7CXJldHVybiBwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShw
aXBlX2J1ZikgJmd0OyAwOw0KJiM0Mzt9DQomIzQzOw0KJiM0MztzdGF0aWMgaW50IHBpcGVfYnVm
X2Nhbl9yZWFkKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpDQomIzQzO3sNCiYjNDM7CXJldHVy
biBwaXBlX2J1Zl9nZXRfYXZhaWxhYmxlKHBpcGVfYnVmKSAmZ3Q7IDA7DQomIzQzO30NCiYjNDM7
DQomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHBpcGVfYnVmX3dyaXRlKHN0cnVjdCBwaXBlX2J1
ZiAqcGlwZV9idWYsDQomIzQzOwkJc3RydWN0IGlvdmVjICppb3ZlYywgc2l6ZV90IGlvdmVjX29m
ZikNCiYjNDM7ew0KJiM0MzsJdW5zaWduZWQgbG9uZyBwcm9kX2lkeCwgdG9fd3JpdGU7DQomIzQz
Owl2b2lkICppb3ZlY19kYXRhID0gaW92ZWMtJmd0O2lvdl9iYXNlICYjNDM7IGlvdmVjX29mZjsN
CiYjNDM7CXNpemVfdCBpb3ZfbGVuID0gaW92ZWMtJmd0O2lvdl9sZW4gLSBpb3ZlY19vZmY7DQom
IzQzOw0KJiM0MzsJcHJvZF9pZHggPSBQSVBFX0JVRl9QUk9EX0lEWChwaXBlX2J1Zik7DQomIzQz
Owl0b193cml0ZSA9IE1JTihwaXBlX2J1Zl9nZXRfZnJlZV9zcGFjZShwaXBlX2J1ZiksIGlvdl9s
ZW4pOw0KJiM0MzsJaWYgKHRvX3dyaXRlID09IDApDQomIzQzOwkJZ290byBvdXQ7DQomIzQzOw0K
JiM0MzsJLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCiYjNDM7CWlmIChwcm9kX2lkeCAmIzQzOyB0
b193cml0ZSAmbHQ7PSBwaXBlX2J1Zi0mZ3Q7Y2FwYWNpdHkpDQomIzQzOwkJbWVtY3B5KHBpcGVf
YnVmLSZndDtkYXRhICYjNDM7IHByb2RfaWR4LCBpb3ZlY19kYXRhLCB0b193cml0ZSk7DQomIzQz
Ow0KJiM0MzsJZWxzZSB7DQomIzQzOwkJaW50IGZpcnN0X2NvcHlfYnl0ZXMsIHNlY29uZF9jb3B5
X2J5dGVzOw0KJiM0MzsNCiYjNDM7CQkvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0ICovDQomIzQzOwkJ
Zmlyc3RfY29weV9ieXRlcyA9IHBpcGVfYnVmLSZndDtjYXBhY2l0eSAtIHByb2RfaWR4Ow0KJiM0
MzsJCW1lbWNweShwaXBlX2J1Zi0mZ3Q7ZGF0YSAmIzQzOyBwcm9kX2lkeCwNCiYjNDM7CQkJCWlv
dmVjX2RhdGEsDQomIzQzOwkJCQlmaXJzdF9jb3B5X2J5dGVzKTsNCiYjNDM7DQomIzQzOwkJLyog
Q29weSB0aGUgc2Vjb25kIHBhcnQgKi8NCiYjNDM7CQlzZWNvbmRfY29weV9ieXRlcyA9IHByb2Rf
aWR4ICYjNDM7IHRvX3dyaXRlIC0gcGlwZV9idWYtJmd0O2NhcGFjaXR5Ow0KJiM0MzsJCW1lbWNw
eShwaXBlX2J1Zi0mZ3Q7ZGF0YSwNCiYjNDM7CQkJCWlvdmVjX2RhdGEgJiM0MzsgZmlyc3RfY29w
eV9ieXRlcywNCiYjNDM7CQkJCXNlY29uZF9jb3B5X2J5dGVzKTsNCiYjNDM7CX0NCiYjNDM7DQom
IzQzOwkvKiBVcGRhdGUgcHJvZHVjZXIgKi8NCiYjNDM7CXBpcGVfYnVmLSZndDtwcm9kICYjNDM7
PSB0b193cml0ZTsNCiYjNDM7DQomIzQzO291dDoNCiYjNDM7CXJldHVybiB0b193cml0ZTsNCiYj
NDM7fQ0KJiM0MzsNCiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfcmVhZChzdHJ1
Y3QgcGlwZV9idWYgKnBpcGVfYnVmLA0KJiM0MzsJCXN0cnVjdCBpb3ZlYyAqaW92ZWMsIHNpemVf
dCBpb3ZlY19vZmYpDQomIzQzO3sNCiYjNDM7CXVuc2lnbmVkIGxvbmcgY29uc19pZHgsIHRvX3Jl
YWQ7DQomIzQzOwl2b2lkICppb3ZlY19kYXRhID0gaW92ZWMtJmd0O2lvdl9iYXNlICYjNDM7IGlv
dmVjX29mZjsNCiYjNDM7CXNpemVfdCBpb3ZfbGVuID0gaW92ZWMtJmd0O2lvdl9sZW4gLSBpb3Zl
Y19vZmY7DQomIzQzOw0KJiM0MzsJY29uc19pZHggPSBQSVBFX0JVRl9DT05TX0lEWChwaXBlX2J1
Zik7DQomIzQzOwl0b19yZWFkID0gTUlOKHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9idWYp
LCBpb3ZfbGVuKTsNCiYjNDM7CWlmICh0b19yZWFkID09IDApDQomIzQzOwkJZ290byBvdXQ7DQom
IzQzOw0KJiM0MzsJLyogQ29weSBpbiBvbmUgcGllY2UgKi8NCiYjNDM7CWlmIChjb25zX2lkeCAm
IzQzOyB0b19yZWFkICZsdDs9IHBpcGVfYnVmLSZndDtjYXBhY2l0eSkNCiYjNDM7CQltZW1jcHko
aW92ZWNfZGF0YSwgcGlwZV9idWYtJmd0O2RhdGEgJiM0MzsgY29uc19pZHgsIHRvX3JlYWQpOw0K
JiM0MzsNCiYjNDM7CWVsc2Ugew0KJiM0MzsJCWludCBmaXJzdF9jb3B5X2J5dGVzOw0KJiM0MzsJ
CWludCBzZWNvbmRfY29weV9ieXRlczsNCiYjNDM7DQomIzQzOwkJLyogQ29weSB0aGUgZmlyc3Qg
cGFydCAqLw0KJiM0MzsJCWZpcnN0X2NvcHlfYnl0ZXMgPSBwaXBlX2J1Zi0mZ3Q7Y2FwYWNpdHkg
LSBwaXBlX2J1Zi0mZ3Q7Y29uczsNCiYjNDM7CQltZW1jcHkoaW92ZWNfZGF0YSwNCiYjNDM7CQkJ
CXBpcGVfYnVmLSZndDtkYXRhICYjNDM7IGNvbnNfaWR4LA0KJiM0MzsJCQkJZmlyc3RfY29weV9i
eXRlcyk7DQomIzQzOw0KJiM0MzsJCS8qIENvcHkgdGhlIHNlY29uZCBwYXJ0ICovDQomIzQzOwkJ
c2Vjb25kX2NvcHlfYnl0ZXMgPSBjb25zX2lkeCAmIzQzOyB0b19yZWFkIC0gcGlwZV9idWYtJmd0
O2NhcGFjaXR5Ow0KJiM0MzsJCW1lbWNweShpb3ZlY19kYXRhICYjNDM7IGZpcnN0X2NvcHlfYnl0
ZXMsDQomIzQzOwkJCQlwaXBlX2J1Zi0mZ3Q7ZGF0YSwNCiYjNDM7CQkJCXNlY29uZF9jb3B5X2J5
dGVzKTsNCiYjNDM7CX0NCiYjNDM7DQomIzQzOwkvKiBVcGRhdGUgY29uc3VtZXIgKi8NCiYjNDM7
CXBpcGVfYnVmLSZndDtjb25zICYjNDM7PSB0b19yZWFkOw0KJiM0MzsNCiYjNDM7b3V0Og0KJiM0
MzsJcmV0dXJuIHRvX3JlYWQ7DQomIzQzO30NCiYjNDM7DQomIzQzO3N0cnVjdCBwaXBlX2ZpbGUg
KnBpcGVfZmlsZV9hbGxvYyhpbnQgY2FwYWNpdHksIGludCBmbGFncykNCiYjNDM7ew0KJiM0MzsJ
c3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlOw0KJiM0MzsNCiYjNDM7CXBpcGVfZmlsZSA9IG1h
bGxvYyhzaXplb2YoKnBpcGVfZmlsZSkpOw0KJiM0MzsJaWYgKCFwaXBlX2ZpbGUpDQomIzQzOwkJ
cmV0dXJuIE5VTEw7DQomIzQzOw0KJiM0MzsJcGlwZV9maWxlLSZndDtidWYgPSBwaXBlX2J1Zl9h
bGxvYyhjYXBhY2l0eSk7DQomIzQzOwlpZiAoIXBpcGVfZmlsZS0mZ3Q7YnVmKSB7DQomIzQzOwkJ
ZnJlZShwaXBlX2ZpbGUpOw0KJiM0MzsJCXJldHVybiBOVUxMOw0KJiM0MzsJfQ0KJiM0MzsNCiYj
NDM7CXBpcGVfZmlsZS0mZ3Q7d19yZWZjb3VudCA9IDE7DQomIzQzOwlwaXBlX2ZpbGUtJmd0O3Jf
cmVmY291bnQgPSAxOw0KJiM0MzsJcGlwZV9maWxlLSZndDtmbGFncyA9IGZsYWdzOw0KJiM0MzsN
CiYjNDM7CXJldHVybiBwaXBlX2ZpbGU7DQomIzQzO30NCiYjNDM7DQomIzQzO3ZvaWQgcGlwZV9m
aWxlX2ZyZWUoc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlKQ0KJiM0Mzt7DQomIzQzOwlwaXBl
X2J1Zl9mcmVlKHBpcGVfZmlsZS0mZ3Q7YnVmKTsNCiYjNDM7CWZyZWUocGlwZV9maWxlKTsNCiYj
NDM7fQ0KJiM0MzsNCiYjNDM7c3RhdGljIGludCBwaXBlX3dyaXRlKHN0cnVjdCB2bm9kZSAqdm5v
ZGUsDQomIzQzOwkJc3RydWN0IHVpbyAqYnVmLCBpbnQgaW9mbGFnIF9fdW51c2VkKQ0KJiM0Mzt7
DQomIzQzOwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUgPSB2bm9kZS0mZ3Q7dl9kYXRhOw0K
JiM0MzsJc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZiA9IHBpcGVfZmlsZS0mZ3Q7YnVmOw0KJiM0
MzsJYm9vbCBub25ibG9ja2luZyA9IGZhbHNlOyAvKiBUT0RPIGhhbmRsZSBub25ibG9ja2luZyAq
LzwvcHJlPg0KPC9ibG9ja3F1b3RlPg0KPGZvbnQgc2l6ZT0iLTIiPjxmb250IHNpemU9Ii0xIj5J
biB0aGlzIGNhc2UgZXZlbiB0aG91Z2ggd2Ugc3VwcG9ydCBub24tYmxvY2tpbmcgd2UgYWx3YXlz
IGhhdmUgdGhlIHZhbHVlIHNldCB0byBmYWxzZS48L2ZvbnQ+PC9mb250Pjxicj4NCjxibG9ja3F1
b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDoyMDE5MDkxOTExMTU0NS43NjEwLTEtY29zdGluLmx1
cHVAY3MucHViLnJvIj4NCjxwcmUgY2xhc3M9Im1vei1xdW90ZS1wcmUiIHdyYXA9IiI+DQomIzQz
Owlib29sIGRhdGFfYXZhaWxhYmxlID0gdHJ1ZTsNCiYjNDM7CWludCB1aW9faWR4ID0gMDsNCiYj
NDM7DQomIzQzOwlpZiAoIXBpcGVfZmlsZS0mZ3Q7cl9yZWZjb3VudCkgew0KJiM0MzsJCS8qIFRP
RE8gYmVmb3JlIHJldHVybmluZyB0aGUgZXJyb3IsIHNlbmQgYSBTSUdQSVBFIHNpZ25hbCAqLw0K
JiM0MzsJCXJldHVybiAtRVBJUEU7DQomIzQzOwl9DQomIzQzOw0KJiM0MzsJdWtfbXV0ZXhfbG9j
aygmYW1wO3BpcGVfYnVmLSZndDt3cmxvY2spOw0KJiM0MzsJd2hpbGUgKGRhdGFfYXZhaWxhYmxl
ICZhbXA7JmFtcDsgdWlvX2lkeCAmbHQ7IGJ1Zi0mZ3Q7dWlvX2lvdmNudCkgew0KJiM0MzsJCXN0
cnVjdCBpb3ZlYyAqaW92ZWMgPSAmYW1wO2J1Zi0mZ3Q7dWlvX2lvdlt1aW9faWR4XTsNCiYjNDM7
CQl1bnNpZ25lZCBsb25nIG9mZiA9IDA7DQomIzQzOw0KJiM0MzsJCXdoaWxlIChvZmYgJmx0OyBp
b3ZlYy0mZ3Q7aW92X2xlbikgew0KJiM0MzsJCQl1bnNpZ25lZCBsb25nIHdyaXR0ZW5fYnl0ZXM7
DQomIzQzOw0KJiM0MzsJCQl3cml0dGVuX2J5dGVzID0gcGlwZV9idWZfd3JpdGUocGlwZV9idWYs
IGlvdmVjLCBvZmYpOw0KJiM0MzsJCQlpZiAod3JpdHRlbl9ieXRlcyA9PSAwKSB7DQomIzQzOwkJ
CQkvKiBObyBkYXRhICovDQomIzQzOwkJCQlpZiAobm9uYmxvY2tpbmcpIHsNCiYjNDM7CQkJCQlk
YXRhX2F2YWlsYWJsZSA9IGZhbHNlOw0KJiM0MzsJCQkJCWJyZWFrOw0KJiM0MzsNCiYjNDM7CQkJ
CX0gZWxzZSB7DQomIzQzOwkJCQkJLyogV2FpdCB1bnRpbCBkYXRhIGF2YWlsYWJsZSAqLw0KJiM0
MzsJCQkJCXdoaWxlICghcGlwZV9idWZfY2FuX3dyaXRlKHBpcGVfYnVmKSkgew0KJiM0MzsJCQkJ
CQl1a19tdXRleF91bmxvY2soJmFtcDtwaXBlX2J1Zi0mZ3Q7d3Jsb2NrKTsNCiYjNDM7CQkJCQkJ
dWtfd2FpdHFfd2FpdF9ldmVudCgmYW1wO3BpcGVfYnVmLSZndDt3cndxLA0KJiM0MzsJCQkJCQkJ
cGlwZV9idWZfY2FuX3dyaXRlKHBpcGVfYnVmKSk7DQomIzQzOwkJCQkJCXVrX211dGV4X2xvY2so
JmFtcDtwaXBlX2J1Zi0mZ3Q7d3Jsb2NrKTsNCiYjNDM7CQkJCQl9DQomIzQzOwkJCQl9DQomIzQz
Ow0KJiM0MzsJCQl9IGVsc2Ugew0KJiM0MzsJCQkJLyogVXBkYXRlIGJ5dGVzIHdyaXR0ZW5fYnl0
ZXMuICovDQomIzQzOwkJCQlidWYtJmd0O3Vpb19yZXNpZCAtPSB3cml0dGVuX2J5dGVzOw0KJiM0
MzsNCiYjNDM7CQkJCW9mZiAmIzQzOz0gd3JpdHRlbl9ieXRlczsNCiYjNDM7DQomIzQzOwkJCQkv
KiB3YWtlIHNvbWUgcmVhZGVycyAqLw0KJiM0MzsJCQkJdWtfd2FpdHFfd2FrZV91cCgmYW1wO3Bp
cGVfYnVmLSZndDtyZHdxKTsNCiYjNDM7CQkJfQ0KJiM0MzsJCX0NCiYjNDM7DQomIzQzOwkJdWlv
X2lkeCYjNDM7JiM0Mzs7DQomIzQzOwl9DQomIzQzOwl1a19tdXRleF91bmxvY2soJmFtcDtwaXBl
X2J1Zi0mZ3Q7d3Jsb2NrKTsNCiYjNDM7DQomIzQzOwlyZXR1cm4gMDsNCiYjNDM7fQ0KJiM0MzsN
CiYjNDM7c3RhdGljIGludCBwaXBlX3JlYWQoc3RydWN0IHZub2RlICp2bm9kZSwNCiYjNDM7CQlz
dHJ1Y3QgdmZzY29yZV9maWxlICp2ZnNjb3JlX2ZpbGUsDQomIzQzOwkJc3RydWN0IHVpbyAqYnVm
LCBpbnQgaW9mbGFnIF9fdW51c2VkKQ0KJiM0Mzt7DQomIzQzOwlzdHJ1Y3QgcGlwZV9maWxlICpw
aXBlX2ZpbGUgPSB2bm9kZS0mZ3Q7dl9kYXRhOw0KJiM0MzsJc3RydWN0IHBpcGVfYnVmICpwaXBl
X2J1ZiA9IHBpcGVfZmlsZS0mZ3Q7YnVmOw0KJiM0MzsJYm9vbCBub25ibG9ja2luZyA9ICh2ZnNj
b3JlX2ZpbGUtJmd0O2ZfZmxhZ3MgJmFtcDsgT19OT05CTE9DSyk7DQomIzQzOwlib29sIGRhdGFf
YXZhaWxhYmxlID0gdHJ1ZTsNCiYjNDM7CWludCB1aW9faWR4ID0gMDsNCiYjNDM7DQomIzQzOwl1
a19tdXRleF9sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3JkbG9jayk7DQomIzQzOwlpZiAobm9uYmxv
Y2tpbmcgJmFtcDsmYW1wOyAhcGlwZV9idWZfY2FuX3JlYWQocGlwZV9idWYpKSB7DQomIzQzOwkJ
dWtfbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3JkbG9jayk7DQomIzQzOwkJcmV0dXJu
IEVBR0FJTjsNCiYjNDM7CX0NCiYjNDM7DQomIzQzOwl3aGlsZSAoZGF0YV9hdmFpbGFibGUgJmFt
cDsmYW1wOyB1aW9faWR4ICZsdDsgYnVmLSZndDt1aW9faW92Y250KSB7DQomIzQzOwkJc3RydWN0
IGlvdmVjICppb3ZlYyA9ICZhbXA7YnVmLSZndDt1aW9faW92W3Vpb19pZHhdOw0KJiM0MzsJCXVu
c2lnbmVkIGxvbmcgb2ZmID0gMDsNCiYjNDM7DQomIzQzOwkJd2hpbGUgKG9mZiAmbHQ7IGlvdmVj
LSZndDtpb3ZfbGVuKSB7DQomIzQzOwkJCXVuc2lnbmVkIGxvbmcgcmVhZF9ieXRlczsNCiYjNDM7
DQomIzQzOwkJCXJlYWRfYnl0ZXMgPSBwaXBlX2J1Zl9yZWFkKHBpcGVfYnVmLCBpb3ZlYywgb2Zm
KTsNCiYjNDM7CQkJaWYgKHJlYWRfYnl0ZXMgPT0gMCkgew0KJiM0MzsJCQkJLyogTm8gZGF0YSAq
Lw0KJiM0MzsJCQkJaWYgKG5vbmJsb2NraW5nKSB7DQomIzQzOwkJCQkJZGF0YV9hdmFpbGFibGUg
PSBmYWxzZTsNCiYjNDM7CQkJCQlicmVhazsNCiYjNDM7DQomIzQzOwkJCQl9IGVsc2Ugew0KJiM0
MzsJCQkJCS8qIFdhaXQgdW50aWwgZGF0YSBhdmFpbGFibGUgKi8NCiYjNDM7CQkJCQl3aGlsZSAo
IXBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVfYnVmKSkgew0KJiM0MzsJCQkJCQl1a19tdXRleF91bmxv
Y2soJmFtcDtwaXBlX2J1Zi0mZ3Q7cmRsb2NrKTsNCiYjNDM7CQkJCQkJdWtfd2FpdHFfd2FpdF9l
dmVudCgmYW1wO3BpcGVfYnVmLSZndDtyZHdxLA0KJiM0MzsJCQkJCQkJcGlwZV9idWZfY2FuX3Jl
YWQocGlwZV9idWYpKTsNCiYjNDM7CQkJCQkJdWtfbXV0ZXhfbG9jaygmYW1wO3BpcGVfYnVmLSZn
dDtyZGxvY2spOw0KJiM0MzsJCQkJCX0NCiYjNDM7CQkJCX0NCiYjNDM7DQomIzQzOwkJCX0gZWxz
ZSB7DQomIzQzOwkJCQkvKiBVcGRhdGUgYnl0ZXMgcmVhZCAqLw0KJiM0MzsJCQkJYnVmLSZndDt1
aW9fcmVzaWQgLT0gcmVhZF9ieXRlczsNCiYjNDM7DQomIzQzOwkJCQlvZmYgJiM0Mzs9IHJlYWRf
Ynl0ZXM7DQomIzQzOw0KJiM0MzsJCQkJLyogd2FrZSBzb21lIHdyaXRlcnMgKi8NCiYjNDM7CQkJ
CXVrX3dhaXRxX3dha2VfdXAoJmFtcDtwaXBlX2J1Zi0mZ3Q7d3J3cSk7DQomIzQzOwkJCX0NCiYj
NDM7CQl9DQomIzQzOw0KJiM0MzsJCXVpb19pZHgmIzQzOyYjNDM7Ow0KJiM0MzsJfQ0KJiM0MzsJ
dWtfbXV0ZXhfdW5sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3JkbG9jayk7DQomIzQzOw0KJiM0MzsJ
cmV0dXJuIDA7DQomIzQzO30NCiYjNDM7DQomIzQzO3N0YXRpYyBpbnQgcGlwZV9jbG9zZShzdHJ1
Y3Qgdm5vZGUgKnZub2RlLA0KJiM0MzsJCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZmls
ZSkNCiYjNDM7ew0KJiM0MzsJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlID0gdm5vZGUtJmd0
O3ZfZGF0YTsNCiYjNDM7DQomIzQzOwlVS19BU1NFUlQodmZzY29yZV9maWxlLSZndDtmX2RlbnRy
eS0mZ3Q7ZF92bm9kZSA9PSB2bm9kZSk7DQomIzQzOwlVS19BU1NFUlQodm5vZGUtJmd0O3ZfcmVm
Y250ID09IDEpOw0KJiM0MzsNCiYjNDM7CWlmICh2ZnNjb3JlX2ZpbGUtJmd0O2ZfZmxhZ3MgJmFt
cDsgVUtfRlJFQUQpDQomIzQzOwkJcGlwZV9maWxlLSZndDtyX3JlZmNvdW50LS07PC9wcmU+DQo8
L2Jsb2NrcXVvdGU+DQo8Zm9udCBzaXplPSItMSI+U2hvdWxkbid0IHdlIGhhdmUgYSBsb2NrIG9u
IHBpcGVfZmlsZSBpbiBvcmRlciB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnM/PC9mb250Pjxicj4N
CjxibG9ja3F1b3RlIHR5cGU9ImNpdGUiIGNpdGU9Im1pZDoyMDE5MDkxOTExMTU0NS43NjEwLTEt
Y29zdGluLmx1cHVAY3MucHViLnJvIj4NCjxwcmUgY2xhc3M9Im1vei1xdW90ZS1wcmUiIHdyYXA9
IiI+DQomIzQzOw0KJiM0MzsJaWYgKHZmc2NvcmVfZmlsZS0mZ3Q7Zl9mbGFncyAmYW1wOyBVS19G
V1JJVEUpDQomIzQzOwkJcGlwZV9maWxlLSZndDt3X3JlZmNvdW50LS07DQomIzQzOw0KJiM0MzsJ
aWYgKCFwaXBlX2ZpbGUtJmd0O3JfcmVmY291bnQgJmFtcDsmYW1wOyAhcGlwZV9maWxlLSZndDt3
X3JlZmNvdW50KQ0KJiM0MzsJCXBpcGVfZmlsZV9mcmVlKHBpcGVfZmlsZSk7DQomIzQzOw0KJiM0
MzsJcmV0dXJuIDA7DQomIzQzO30NCiYjNDM7DQomIzQzO3N0YXRpYyBpbnQgcGlwZV9zZWVrKHN0
cnVjdCB2bm9kZSAqdm5vZGUgX191bnVzZWQsDQomIzQzOwkJCXN0cnVjdCB2ZnNjb3JlX2ZpbGUg
KnZmc2NvcmVfZmlsZSBfX3VudXNlZCwNCiYjNDM7CQkJb2ZmX3Qgb2ZmMSBfX3VudXNlZCwgb2Zm
X3Qgb2ZmMiBfX3VudXNlZCkNCiYjNDM7ew0KJiM0MzsJZXJybm8gPSBFU1BJUEU7DQomIzQzOwly
ZXR1cm4gLTE7DQomIzQzO30NCiYjNDM7DQomIzQzO3N0YXRpYyBpbnQgcGlwZV9pb2N0bChzdHJ1
Y3Qgdm5vZGUgKnZub2RlLA0KJiM0MzsJCXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc2NvcmVfZmls
ZSBfX3VudXNlZCwNCiYjNDM7CQl1bnNpZ25lZCBsb25nIGNvbSwgdm9pZCAqZGF0YSkNCiYjNDM7
ew0KJiM0MzsJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlID0gdm5vZGUtJmd0O3ZfZGF0YTsN
CiYjNDM7CXN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUtJmd0O2J1ZjsNCiYj
NDM7DQomIzQzOwlzd2l0Y2ggKGNvbSkgew0KJiM0MzsJY2FzZSBGSU9OUkVBRDoNCiYjNDM7CQl1
a19tdXRleF9sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3JkbG9jayk7DQomIzQzOwkJKigoaW50ICop
IGRhdGEpID0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7DQomIzQzOwkJdWtfbXV0
ZXhfdW5sb2NrKCZhbXA7cGlwZV9idWYtJmd0O3JkbG9jayk7DQomIzQzOwkJcmV0dXJuIDA7DQom
IzQzOwlkZWZhdWx0Og0KJiM0MzsJCXJldHVybiAtRUlOVkFMOw0KJiM0MzsJfQ0KJiM0Mzt9DQom
IzQzOw0KJiM0MzsjZGVmaW5lIHBpcGVfb3BlbiAgICAgICAgKCh2bm9wX29wZW5fdCkgdmZzY29y
ZV92b3BfZWludmFsKQ0KJiM0MzsjZGVmaW5lIHBpcGVfZnN5bmMgICAgICAgKCh2bm9wX2ZzeW5j
X3QpIHZmc2NvcmVfdm9wX251bGxvcCkNCiYjNDM7I2RlZmluZSBwaXBlX3JlYWRkaXIgICAgICgo
dm5vcF9yZWFkZGlyX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCiYjNDM7I2RlZmluZSBwaXBlX2xv
b2t1cCAgICAgICgodm5vcF9sb29rdXBfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KJiM0MzsjZGVm
aW5lIHBpcGVfY3JlYXRlICAgICAgKCh2bm9wX2NyZWF0ZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwp
DQomIzQzOyNkZWZpbmUgcGlwZV9yZW1vdmUgICAgICAoKHZub3BfcmVtb3ZlX3QpIHZmc2NvcmVf
dm9wX2VpbnZhbCkNCiYjNDM7I2RlZmluZSBwaXBlX3JlbmFtZSAgICAgICgodm5vcF9yZW5hbWVf
dCkgdmZzY29yZV92b3BfZWludmFsKQ0KJiM0MzsjZGVmaW5lIHBpcGVfbWtkaXIgICAgICAgKCh2
bm9wX21rZGlyX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkNCiYjNDM7I2RlZmluZSBwaXBlX3JtZGly
ICAgICAgICgodm5vcF9ybWRpcl90KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQomIzQzOyNkZWZpbmUg
cGlwZV9nZXRhdHRyICAgICAoKHZub3BfZ2V0YXR0cl90KSB2ZnNjb3JlX3ZvcF9laW52YWwpDQom
IzQzOyNkZWZpbmUgcGlwZV9zZXRhdHRyICAgICAoKHZub3Bfc2V0YXR0cl90KSB2ZnNjb3JlX3Zv
cF9udWxsb3ApDQomIzQzOyNkZWZpbmUgcGlwZV9pbmFjdGl2ZSAgICAoKHZub3BfaW5hY3RpdmVf
dCkgdmZzY29yZV92b3BfZWludmFsKQ0KJiM0MzsjZGVmaW5lIHBpcGVfdHJ1bmNhdGUgICAgKCh2
bm9wX3RydW5jYXRlX3QpIHZmc2NvcmVfdm9wX251bGxvcCkNCiYjNDM7I2RlZmluZSBwaXBlX2xp
bmsgICAgICAgICgodm5vcF9saW5rX3QpIHZmc2NvcmVfdm9wX2VwZXJtKQ0KJiM0MzsjZGVmaW5l
IHBpcGVfY2FjaGUgICAgICAgKCh2bm9wX2NhY2hlX3QpIE5VTEwpDQomIzQzOyNkZWZpbmUgcGlw
ZV9yZWFkbGluayAgICAoKHZub3BfcmVhZGxpbmtfdCkgdmZzY29yZV92b3BfZWludmFsKQ0KJiM0
MzsjZGVmaW5lIHBpcGVfc3ltbGluayAgICAgKCh2bm9wX3N5bWxpbmtfdCkgdmZzY29yZV92b3Bf
ZXBlcm0pDQomIzQzOyNkZWZpbmUgcGlwZV9mYWxsb2NhdGUgICAoKHZub3BfZmFsbG9jYXRlX3Qp
IHZmc2NvcmVfdm9wX251bGxvcCkNCiYjNDM7DQomIzQzO3N0YXRpYyBzdHJ1Y3Qgdm5vcHMgcGlw
ZV92bm9wcyA9IHsNCiYjNDM7CS52b3Bfb3BlbiAgICAgID0gcGlwZV9vcGVuLA0KJiM0MzsJLnZv
cF9jbG9zZSAgICAgPSBwaXBlX2Nsb3NlLA0KJiM0MzsJLnZvcF9yZWFkICAgICAgPSBwaXBlX3Jl
YWQsDQomIzQzOwkudm9wX3dyaXRlICAgICA9IHBpcGVfd3JpdGUsDQomIzQzOwkudm9wX3NlZWsg
ICAgICA9IHBpcGVfc2VlaywNCiYjNDM7CS52b3BfaW9jdGwgICAgID0gcGlwZV9pb2N0bCwNCiYj
NDM7CS52b3BfZnN5bmMgICAgID0gcGlwZV9mc3luYywNCiYjNDM7CS52b3BfcmVhZGRpciAgID0g
cGlwZV9yZWFkZGlyLA0KJiM0MzsJLnZvcF9sb29rdXAgICAgPSBwaXBlX2xvb2t1cCwNCiYjNDM7
CS52b3BfY3JlYXRlICAgID0gcGlwZV9jcmVhdGUsDQomIzQzOwkudm9wX3JlbW92ZSAgICA9IHBp
cGVfcmVtb3ZlLA0KJiM0MzsJLnZvcF9yZW5hbWUgICAgPSBwaXBlX3JlbmFtZSwNCiYjNDM7CS52
b3BfbWtkaXIgICAgID0gcGlwZV9ta2RpciwNCiYjNDM7CS52b3Bfcm1kaXIgICAgID0gcGlwZV9y
bWRpciwNCiYjNDM7CS52b3BfZ2V0YXR0ciAgID0gcGlwZV9nZXRhdHRyLA0KJiM0MzsJLnZvcF9z
ZXRhdHRyICAgPSBwaXBlX3NldGF0dHIsDQomIzQzOwkudm9wX2luYWN0aXZlICA9IHBpcGVfaW5h
Y3RpdmUsDQomIzQzOwkudm9wX3RydW5jYXRlICA9IHBpcGVfdHJ1bmNhdGUsDQomIzQzOwkudm9w
X2xpbmsgICAgICA9IHBpcGVfbGluaywNCiYjNDM7CS52b3BfY2FjaGUgICAgID0gcGlwZV9jYWNo
ZSwNCiYjNDM7CS52b3BfZmFsbG9jYXRlID0gcGlwZV9mYWxsb2NhdGUsDQomIzQzOwkudm9wX3Jl
YWRsaW5rICA9IHBpcGVfcmVhZGxpbmssDQomIzQzOwkudm9wX3N5bWxpbmsgICA9IHBpcGVfc3lt
bGluaw0KJiM0Mzt9Ow0KJiM0MzsNCiYjNDM7I2RlZmluZSBwaXBlX3ZnZXQgICgodmZzb3Bfdmdl
dF90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApDQomIzQzOw0KJiM0MztzdGF0aWMgc3RydWN0IHZmc29w
cyBwaXBlX3Zmc29wcyA9IHsNCiYjNDM7CS52ZnNfdmdldCA9IHBpcGVfdmdldCwNCiYjNDM7CS52
ZnNfdm5vcHMgPSAmYW1wO3BpcGVfdm5vcHMNCiYjNDM7fTsNCiYjNDM7DQomIzQzO3N0YXRpYyB1
aW50NjRfdCBwX2lub2RlOw0KJiM0MzsNCiYjNDM7LyoNCiYjNDM7ICogQm9ndXMgbW91bnQgcG9p
bnQgdXNlZCBieSBhbGwgc29ja2V0cw0KJiM0MzsgKi8NCiYjNDM7c3RhdGljIHN0cnVjdCBtb3Vu
dCBwX21vdW50ID0gew0KJiM0MzsJLm1fb3AgPSAmYW1wO3BpcGVfdmZzb3BzDQomIzQzO307DQom
IzQzOw0KJiM0MztzdGF0aWMgaW50IHBpcGVfZmRfYWxsb2Moc3RydWN0IHBpcGVfZmlsZSAqcGlw
ZV9maWxlLCBpbnQgZmxhZ3MpDQomIzQzO3sNCiYjNDM7CWludCByZXQgPSAwOw0KJiM0MzsJaW50
IHZmc19mZDsNCiYjNDM7CXN0cnVjdCB2ZnNjb3JlX2ZpbGUgKnZmc19maWxlID0gTlVMTDsNCiYj
NDM7CXN0cnVjdCBkZW50cnkgKnBfZGVudHJ5Ow0KJiM0MzsJc3RydWN0IHZub2RlICpwX3Zub2Rl
Ow0KJiM0MzsNCiYjNDM7CS8qIFJlc2VydmUgZmlsZSBkZXNjcmlwdG9yIG51bWJlciAqLw0KJiM0
MzsJdmZzX2ZkID0gdmZzY29yZV9hbGxvY19mZCgpOw0KJiM0MzsJaWYgKHZmc19mZCAmbHQ7IDAp
IHsNCiYjNDM7CQlyZXQgPSAtRU5GSUxFOw0KJiM0MzsJCWdvdG8gRVJSX0VYSVQ7DQomIzQzOwl9
DQomIzQzOw0KJiM0MzsJLyogQWxsb2NhdGUgZmlsZSwgZGVudHJ5LCBhbmQgdm5vZGUgKi8NCiYj
NDM7CXZmc19maWxlID0gY2FsbG9jKDEsIHNpemVvZigqdmZzX2ZpbGUpKTsNCiYjNDM7CWlmICgh
dmZzX2ZpbGUpIHsNCiYjNDM7CQlyZXQgPSAtRU5PTUVNOw0KJiM0MzsJCWdvdG8gRVJSX01BTExP
Q19WRlNfRklMRTsNCiYjNDM7CX0NCiYjNDM7DQomIzQzOwlyZXQgPSB2ZnNjb3JlX3ZnZXQoJmFt
cDtwX21vdW50LCBwX2lub2RlJiM0MzsmIzQzOywgJmFtcDtwX3Zub2RlKTsNCiYjNDM7CVVLX0FT
U0VSVChyZXQgPT0gMCk7IC8qIHdlIHNob3VsZCBub3QgZmluZCBpdCBpbiBjYWNoZSAqLw0KJiM0
MzsNCiYjNDM7CWlmICghcF92bm9kZSkgew0KJiM0MzsJCXJldCA9IC1FTk9NRU07DQomIzQzOwkJ
Z290byBFUlJfQUxMT0NfVk5PREU7DQomIzQzOwl9DQomIzQzOw0KJiM0MzsJdWtfbXV0ZXhfdW5s
b2NrKCZhbXA7cF92bm9kZS0mZ3Q7dl9sb2NrKTsNCiYjNDM7DQomIzQzOwlwX2RlbnRyeSA9IGRl
bnRyeV9hbGxvYyhOVUxMLCBwX3Zub2RlLCAmcXVvdDsvJnF1b3Q7KTsNCiYjNDM7CWlmICghcF9k
ZW50cnkpIHsNCiYjNDM7CQlyZXQgPSAtRU5PTUVNOw0KJiM0MzsJCWdvdG8gRVJSX0FMTE9DX0RF
TlRSWTsNCiYjNDM7CX0NCiYjNDM7DQomIzQzOwkvKiBGaWxsIG91dCBuZWNlc3NhcnkgZmllbGRz
LiAqLw0KJiM0MzsJdmZzX2ZpbGUtJmd0O2ZkID0gdmZzX2ZkOw0KJiM0MzsJdmZzX2ZpbGUtJmd0
O2ZfZmxhZ3MgPSBmbGFnczsNCiYjNDM7CXZmc19maWxlLSZndDtmX2NvdW50ID0gMTsNCiYjNDM7
CXZmc19maWxlLSZndDtmX2RhdGEgPSBwaXBlX2ZpbGU7DQomIzQzOwl2ZnNfZmlsZS0mZ3Q7Zl9k
ZW50cnkgPSBwX2RlbnRyeTsNCiYjNDM7CXZmc19maWxlLSZndDtmX3Zmc19mbGFncyA9IFVLX1ZG
U0NPUkVfTk9QT1M7DQomIzQzOw0KJiM0MzsJcF92bm9kZS0mZ3Q7dl9kYXRhID0gcGlwZV9maWxl
Ow0KJiM0MzsJcF92bm9kZS0mZ3Q7dl90eXBlID0gVkZJRk87DQomIzQzOw0KJiM0MzsJLyogQXNz
aWduIHRoZSBmaWxlIGRlc2NyaXB0b3JzIHRvIHRoZSBjb3JyZXNwb25kaW5nIHZmc19maWxlLiAq
Lw0KJiM0MzsJcmV0ID0gdmZzY29yZV9pbnN0YWxsX2ZkKHZmc19mZCwgdmZzX2ZpbGUpOw0KJiM0
MzsJaWYgKHJldCkNCiYjNDM7CQlnb3RvIEVSUl9WRlNfSU5TVEFMTDsNCiYjNDM7DQomIzQzOwkv
KiBPbmx5IHRoZSBkZW50cnkgc2hvdWxkIGhvbGQgYSByZWZlcmVuY2U7IHJlbGVhc2Ugb3VycyAq
Lw0KJiM0MzsJdnJlbGUocF92bm9kZSk7DQomIzQzOw0KJiM0MzsJcmV0dXJuIHZmc19mZDsNCiYj
NDM7DQomIzQzO0VSUl9WRlNfSU5TVEFMTDoNCiYjNDM7CWRyZWxlKHBfZGVudHJ5KTsNCiYjNDM7
RVJSX0FMTE9DX0RFTlRSWToNCiYjNDM7CXZyZWxlKHBfdm5vZGUpOw0KJiM0MztFUlJfQUxMT0Nf
Vk5PREU6DQomIzQzOwlmcmVlKHZmc19maWxlKTsNCiYjNDM7RVJSX01BTExPQ19WRlNfRklMRToN
CiYjNDM7CXZmc2NvcmVfcHV0X2ZkKHZmc19mZCk7DQomIzQzO0VSUl9FWElUOg0KJiM0MzsJVUtf
QVNTRVJUKHJldCAmbHQ7IDApOw0KJiM0MzsJcmV0dXJuIHJldDsNCiYjNDM7fQ0KJiM0MzsNCiYj
NDM7aW50IHBpcGUoaW50IHBpcGVmZFsyXSkNCiYjNDM7ew0KJiM0MzsJaW50IHJldCA9IDA7DQom
IzQzOwlpbnQgcl9mZCwgd19mZDsNCiYjNDM7CXN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZTsN
CiYjNDM7DQomIzQzOwkvKiBBbGxvY2F0ZSBwaXBlIGludGVybmFsIHN0cnVjdHVyZS4gKi8NCiYj
NDM7CXBpcGVfZmlsZSA9IHBpcGVfZmlsZV9hbGxvYyhQSVBFX01BWF9TSVpFLCAwKTsNCiYjNDM7
CWlmICghcGlwZV9maWxlKSB7DQomIzQzOwkJcmV0ID0gLUVOT01FTTsNCiYjNDM7CQlnb3RvIEVS
Ul9FWElUOw0KJiM0MzsJfQ0KJiM0MzsNCiYjNDM7CXJfZmQgPSBwaXBlX2ZkX2FsbG9jKHBpcGVf
ZmlsZSwgVUtfRlJFQUQpOw0KJiM0MzsJaWYgKHJfZmQgJmx0OyAwKQ0KJiM0MzsJCWdvdG8gRVJS
X1ZGU19JTlNUQUxMOw0KJiM0MzsNCiYjNDM7CXdfZmQgPSBwaXBlX2ZkX2FsbG9jKHBpcGVfZmls
ZSwgVUtfRldSSVRFKTsNCiYjNDM7CWlmICh3X2ZkICZsdDsgMCkNCiYjNDM7CQlnb3RvIEVSUl9X
X0ZEOw0KJiM0MzsNCiYjNDM7CS8qIEZpbGwgcGlwZWZkIGZpZWxkcy4gKi8NCiYjNDM7CXBpcGVm
ZFswXSA9IHJfZmQ7DQomIzQzOwlwaXBlZmRbMV0gPSB3X2ZkOw0KJiM0MzsNCiYjNDM7CXJldHVy
biByZXQ7DQomIzQzOw0KJiM0MztFUlJfV19GRDoNCiYjNDM7CXZmc2NvcmVfcHV0X2ZkKHJfZmQp
Ow0KJiM0MztFUlJfVkZTX0lOU1RBTEw6DQomIzQzOwlwaXBlX2ZpbGVfZnJlZShwaXBlX2ZpbGUp
Ow0KJiM0MztFUlJfRVhJVDoNCiYjNDM7CVVLX0FTU0VSVChyZXQgJmx0OyAwKTsNCiYjNDM7CXJl
dHVybiByZXQ7DQomIzQzO30NCjwvcHJlPg0KPC9ibG9ja3F1b3RlPg0KPC9ib2R5Pg0KPC9odG1s
Pg0K

--_000_f5f30375b19fa271a31b07b3eb4ea40bstudacsupbro_--


--===============1508772477050758552==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============1508772477050758552==--


From minios-devel-bounces@lists.xenproject.org Fri Sep 20 14:38:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 14:38:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBK2p-0003rs-8E; Fri, 20 Sep 2019 14:37:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ku6N=XP=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iBK2o-0003ri-5m
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 14:37:58 +0000
X-Inumbo-ID: 3ace84ce-dbb4-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 3ace84ce-dbb4-11e9-978d-bc764e2007e4;
 Fri, 20 Sep 2019 14:37:54 +0000 (UTC)
IronPort-SDR: VG596wgjtNcuYkM/cUXOdbTiGX8/FV2E0uB6lpJLQG6gTtngyaqn1CxcAqNAFcUjB4qKSimj+w
 lvHaRoBRZU2Q==
IronPort-PHdr: =?us-ascii?q?9a23=3A94nhFhQQ44agiKM5RWIFVY0Zc9psv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6yYh2N2/xhgRfzUJnB7Loc0qyK6vumAzZLvsnJ8ChbNsAVDV?=
 =?us-ascii?q?ld0YRetjdjKfbNMVf8Iv/uYn5yN+V5f3ghwUuGN1NIEt31fVzYry76xzcTHh?=
 =?us-ascii?q?LiKVg9fbytScbdgMutyu+95YDYbRlWizqhe7NyKwi9oRnMusUMjoZuN6g8xg?=
 =?us-ascii?q?HXrndWdOhbx2FlLk+Xkxrg+8u85pFu/zlOt/4768JMTaD2dLkkQLJFCzgrL3?=
 =?us-ascii?q?o779DxuxnZSguP6HocUmEInRdNHgPI8hL0UIrvvyXjruZy1zWUMsPwTbAvRD?=
 =?us-ascii?q?St9LxrRwPyiCcGLDE27mfagdFtga1BoRKhoxt/w5PIYIyQKfFzcL/Rcc8cSG?=
 =?us-ascii?q?FcWMtaSi5PDZ6mb4YXD+QPI/tWoYf+qVUJthayGRWgCfnzxjJSmnP6was32P?=
 =?us-ascii?q?khHwHc2wwgGsoDvWrTrNXuKKcSUOa1x7TOwzXed/NWxCr25Y/UfRAmuvGMQb?=
 =?us-ascii?q?NwcczLxUkrCgPFlkiQpJf5MDOOzOgNq3Wb4PF6WeK1jG4qsgd8qSWsyMc0ko?=
 =?us-ascii?q?TFm40Yxk3e+Sh6wIs5P8O0RFB5bNK+HpZcrzyWOoRrTs84QGxluDw2xqMItJ?=
 =?us-ascii?q?O1ZiQG1ZsqywDZZveaaYaH+AjjW/yUITpggXJlf6+wiAiq/Ei7z+38StG00F?=
 =?us-ascii?q?FXripZitXMtm4C1xjU6sWfVPt9+12u2TeL1wzJ9u5EOlo4lbLGK5E62LIwjJ?=
 =?us-ascii?q?0TvVzCHi/whkr2kLebelgr9+S18ejqYbXrqoWCO4NqiAzyKKojltS6AesiMw?=
 =?us-ascii?q?gOW2ab+f671L3m5UD2XLJKjuYqkqnYtpDWP8AbprOhAw9IyYss9w2/Ay2+0N?=
 =?us-ascii?q?QFhnYLNkhFeBWfg4jzJ17OOOz4Deu4g1m0lTdrxvbGPrzmApXWN3TMjanufa?=
 =?us-ascii?q?hj5E5Y0wczydFf54lICrEaOv7yVVH+tNrCAh8+KQy0zP7tCM9h2YMGRWKPHq?=
 =?us-ascii?q?iZPbvMsV+M/O0gPvGDa5UTuDngMfgq+f/ugWUillAHYKap2poXaG2jE/R9P0?=
 =?us-ascii?q?WZfGfjjs0bHmgWpQoyVvHqiEWZXjJJfXayWPF02jZuDYOgDIDYA4ygnrGF9C?=
 =?us-ascii?q?O6BYFNIHBLDBaLC3i7WZ+DXqInbzmOI8kptiEcSPD1QIg6yRCo8gvn06dPJf?=
 =?us-ascii?q?GS4jAS84jkgosmr9bPnA0/oGQnR/+W1HuAGjl5?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AdAwAQ44RdXQPjVY1lHQEBBQEHBQG?=
 =?us-ascii?q?BZ4NeIBIqjR6jRwkBAQE6AQIBAYQ/gy44EwIDCQEBBQEBAQEBBQQBBhoWBYV?=
 =?us-ascii?q?qgjoig25PVS2DIoIPrUaFTIM2gUmBNIcwhjE/hGGFEYR0IgSWQpZLB4IlZQS?=
 =?us-ascii?q?UFSeCJpcAo1mFMTiBeTMag19QEBSBIwGOcj0BATGBBgEBjjYBAQ?=
X-IPAS-Result: =?us-ascii?q?A2AdAwAQ44RdXQPjVY1lHQEBBQEHBQGBZ4NeIBIqjR6jR?=
 =?us-ascii?q?wkBAQE6AQIBAYQ/gy44EwIDCQEBBQEBAQEBBQQBBhoWBYVqgjoig25PVS2DI?=
 =?us-ascii?q?oIPrUaFTIM2gUmBNIcwhjE/hGGFEYR0IgSWQpZLB4IlZQSUFSeCJpcAo1mFM?=
 =?us-ascii?q?TiBeTMag19QEBSBIwGOcj0BATGBBgEBjjYBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,528,1559509200"; 
   d="scan'208";a="4847820"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 20 Sep 2019 17:37:53 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 187831A600B5;
 Fri, 20 Sep 2019 17:37:53 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id VYodcWq_zHUn; Fri, 20 Sep 2019 17:37:53 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id F1A391A60128;
 Fri, 20 Sep 2019 17:37:52 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id acHBcnu8YF5L; Fri, 20 Sep 2019 17:37:52 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id D4A5A1A600B5;
 Fri, 20 Sep 2019 17:37:52 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Fri, 20 Sep 2019 17:37:43 +0300
Message-Id: <20190920143743.11614-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] file.c: Remove pipe()
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

cGlwZSgpIGlzIGltcGxlbWVudGVkIGluIHRoZSBrZXJuZWwgbm93LgoKU2lnbmVkLW9mZi1ieTog
Q29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBmaWxlLmMgfCA2IC0tLS0t
LQogMSBmaWxlIGNoYW5nZWQsIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZmlsZS5jIGIv
ZmlsZS5jCmluZGV4IDdkNzhmNzkuLjZkZjQ3OWIgMTAwNjQ0Ci0tLSBhL2ZpbGUuYworKysgYi9m
aWxlLmMKQEAgLTExNCwxMiArMTE0LDYgQEAgaW50IHV0aW1lcyhjb25zdCBjaGFyICpmaWxlbmFt
ZSBfX3VudXNlZCwKIAlyZXR1cm4gMDsKIH0KIAotaW50IHBpcGUoaW50IHBpcGVmZFsyXSBfX3Vu
dXNlZCkKLXsKLQllcnJubyA9IEVGQVVMVDsKLQlyZXR1cm4gLTE7Ci19Ci0KIGNoYXIgKnJlYWxw
YXRoKGNvbnN0IGNoYXIgKnJlc3RyaWN0IGZpbGVfbmFtZSwgY2hhciAqcmVzdHJpY3QgcmVzb2x2
ZWRfbmFtZSkKIHsKIAlyZXR1cm4gMDsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 14:39:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 14:39:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBK4Y-000419-Ew; Fri, 20 Sep 2019 14:39:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=p3oF=XP=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iBK4X-000414-33
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 14:39:45 +0000
X-Inumbo-ID: 7b357676-dbb4-11e9-978d-bc764e2007e4
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.53]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7b357676-dbb4-11e9-978d-bc764e2007e4;
 Fri, 20 Sep 2019 14:39:42 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=QcpdRLFerrvsf5JQV5gmJYEBZ1Xzcx4SdU9LGsSTyZm8kpjtnwiuF3HBbdOuuKfiRXAXxBpVfmscs+J1IcXTe/va6GiBzimD8F1L+LrsWhYlosAFaIYafIFB8pmEyL+PiKHGHWsquMHrtqPNTYIfRb15AKKBX+eD2jKx6S4Y9wlFUQ0nl4hOkQU2l8qI2YSBevdvkFtFQXSnRetP1CKXd4U0f22vHjRc0mEY0bPa02LrpiCC7qjE/+aMb9Y3+tLyysgEkc3yVIbTSKx1dHu2WDMvHFoeIRKtfwUAPdXuuFPjLNcj1vv9fec7512Fj8pUU7c7GMFc0Hrt48addypdOg==
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=7ZlbROhdvXokQKq+mjHOwFBSaaL17+HJ4hvK9OWD5e8=;
 b=mAAlUp++AL+WsMDzxaTYI2k0dQcnIcoSiJ9SUcoNz8F62zSfJy4T+d5vH4VPyuH321Gq5eaXaQrK/A6JRROOkEzmpwfJahUHJ3ybUXBx6IuN238ecvbTPm0GA6ZFXYsoC5B032o7Qpyw1AbIUBd42ve+Bt+PIVoBvIdCq1c/8s3eK9xGI7TqEuNYCT4JPz+BE3vk5YHdDFi2UMvN3UgWe5KnPD5Icn/AB/ls9n7IqVA5QJEuLRAJqwdPQ/M9YUXs8hEo3Fj8QKOkS8+s7WKoI2QWYtfPH2RYlHHarZV7h6RjjrG9S1LhFu6xZX74kjsmxrc/QyFV0ATY9t183A3HWQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB5227.eurprd01.prod.exchangelabs.com (20.177.210.85) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.23; Fri, 20 Sep
 2019 14:39:19 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::90a8:4546:a916:35e9%7]) with mapi id 15.20.2263.023; Fri, 20 Sep 2019
 14:39:19 +0000
From: =?utf-8?B?VmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIp?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: Costin Lupu <costin.lupu@cs.pub.ro>, "minios-devel@lists.xen.org"
 <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/NEWLIB PATCH] file.c: Remove pipe() function
Thread-Index: AQHVb8D+kRbFFvk4yEazsdo+n+AJOac0otsA
Date: Fri, 20 Sep 2019 14:39:19 +0000
Message-ID: <db577d3e-e8f3-4305-6d3c-e1c6806e3d31@stud.acs.upb.ro>
References: <20190920143743.11614-1-costin.lupu@cs.pub.ro>
In-Reply-To: <20190920143743.11614-1-costin.lupu@cs.pub.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: PR0P264CA0124.FRAP264.PROD.OUTLOOK.COM
 (2603:10a6:100:1a::16) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-originating-ip: [141.85.233.104]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 97644e00-1e81-4503-b019-08d73dd851fa
x-microsoft-antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(7021145)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(7022145)(4603075)(4627221)(201702281549075)(8990200)(7048125)(7024125)(7025125)(7027125)(7023125)(2017052603328)(7193020);
 SRVR:PR1PR01MB5227; 
x-ms-traffictypediagnostic: PR1PR01MB5227:
x-microsoft-antispam-prvs: <PR1PR01MB5227BB3AE2F88008B90EAC8BA6880@PR1PR01MB5227.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:3631;
x-forefront-prvs: 0166B75B74
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(346002)(396003)(366004)(39830400003)(136003)(376002)(189003)(199004)(386003)(2906002)(2616005)(66066001)(305945005)(5660300002)(110136005)(31696002)(486006)(446003)(6512007)(64756008)(66946007)(71200400001)(6116002)(81156014)(99286004)(8936002)(31686004)(8676002)(85202003)(66476007)(81166006)(66556008)(229853002)(6436002)(6486002)(186003)(6246003)(26005)(11346002)(66446008)(71190400001)(25786009)(786003)(102836004)(14454004)(52116002)(85182001)(7736002)(76176011)(476003)(2501003)(508600001)(6506007)(3846002)(4744005)(86362001)(316002)(256004)(53546011);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB5227;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:0; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam-message-info: T9oSaJEUzmu2VBEoOwhh1KE9LSit8GKL1l5B7vQCM3EojnSr/xkRuRbSw87hOVXJlyFf8rXGpJ/mfYcjQB1ZZQQGEQf4NKqW5ij8SEuWatSoVbcYiDGFmYt+jnOU7CGGayH5L+SFMtDDzWHZy05N5OozKQNatqFkio4DQwfYSQwcOCMHpM3Oauku6xa8kUoxn/DfuR/07um9W2KtNDMbmyC6TVV1HBi+g3OIBRjvkL7jBkVapA0BStghPTr1ytDnv2QCjl62aZxLrXLlnYvKfeMp1gFFTnMkTru4yXrVQZ7q0EIWc05ZJA4xCwZwwG8ue0ByaC7OlHUTBGRxno7VmorlPKzEOZ6gN9QrjojRM2e90zV22YDchSDhvQIvlNrmJjmScgCQpAb3O5gLxMqMEmJX6c+uGk7WcpjZCrisgDc=
x-ms-exchange-transport-forked: True
Content-ID: <B06EF4CDF12F8843A9D140E57309C93C@eurprd01.prod.exchangelabs.com>
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 97644e00-1e81-4503-b019-08d73dd851fa
X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Sep 2019 14:39:19.5377 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: nzFnpAecbQC+zBGjaea/aFMr+pcaTkaGDjE73xneLEZhai3nDJtKzNUJInp5pgg8wU1TfaL5G2tMVbHhS3TMVexfHu5txADBU2FDgx2ZqW6cmS3BnCOpRfNcRCkd/0yt
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB5227
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH] file.c: Remove pipe()
 function
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIENvc3RpbiENCg0KUmV2aWV3ZWQtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdQk8dmxhZF9h
bmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4NCg0KT24gMjAuMDkuMjAxOSAxNzozNywgQ29z
dGluIEx1cHUgd3JvdGU6DQo+IHBpcGUoKSBpcyBpbXBsZW1lbnRlZCBpbiB0aGUga2VybmVsIG5v
dy4NCj4NCj4gU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5y
bz4NCj4gLS0tDQo+ICAgZmlsZS5jIHwgNiAtLS0tLS0NCj4gICAxIGZpbGUgY2hhbmdlZCwgNiBk
ZWxldGlvbnMoLSkNCj4NCj4gZGlmZiAtLWdpdCBhL2ZpbGUuYyBiL2ZpbGUuYw0KPiBpbmRleCA3
ZDc4Zjc5Li42ZGY0NzliIDEwMDY0NA0KPiAtLS0gYS9maWxlLmMNCj4gKysrIGIvZmlsZS5jDQo+
IEBAIC0xMTQsMTIgKzExNCw2IEBAIGludCB1dGltZXMoY29uc3QgY2hhciAqZmlsZW5hbWUgX191
bnVzZWQsDQo+ICAgCXJldHVybiAwOw0KPiAgIH0NCj4gICANCj4gLWludCBwaXBlKGludCBwaXBl
ZmRbMl0gX191bnVzZWQpDQo+IC17DQo+IC0JZXJybm8gPSBFRkFVTFQ7DQo+IC0JcmV0dXJuIC0x
Ow0KPiAtfQ0KPiAtDQo+ICAgY2hhciAqcmVhbHBhdGgoY29uc3QgY2hhciAqcmVzdHJpY3QgZmls
ZV9uYW1lLCBjaGFyICpyZXN0cmljdCByZXNvbHZlZF9uYW1lKQ0KPiAgIHsNCj4gICAJcmV0dXJu
IDA7DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 14:54:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 14:54:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKIo-00064J-UP; Fri, 20 Sep 2019 14:54:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ku6N=XP=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iBKIn-00064A-Ut
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 14:54:29 +0000
X-Inumbo-ID: 8a650178-dbb6-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 8a650178-dbb6-11e9-a337-bc764e2007e4;
 Fri, 20 Sep 2019 14:54:26 +0000 (UTC)
IronPort-SDR: MvNXSjXQDtFcSdSuGgL+uHO2biAXgE6Ho1Ruqx+L0xTtPbziyndxg2sOwvH4MhHouBcQHGTpPe
 Cs8UrizgkDHg==
IronPort-PHdr: =?us-ascii?q?9a23=3AEfn5ChQ270vK8UOLjLr4nsrz2dpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa67ZRaBt8tkgFKBZ4jH8fUM07OQ7/m7HzZaqsbZ+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvHdEZetayGB0KVmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ91cXDJdDIyic4QPDvIBPedGoIn7u1sOtga1CQ21CO/y1jNEmnr60Ksn2O?=
 =?us-ascii?q?ojDA7GxhQtEc8QvnTarNv7N6kcXu66w6bK0TrNYOhb2Svk6IXSbhwtvf+BUL?=
 =?us-ascii?q?B2fMHMyUcvDQTFjlCIpIH7ODOVzfgNs2md7+F9U+yvlnYnqxxsqTWo2sgsjZ?=
 =?us-ascii?q?LJhp4UylDC7yl5xJs1JcWlSENgfdGkC4FctzmHN4RtWM8iWWZotT88x7Ybt5?=
 =?us-ascii?q?C7ey0Kx44mxx7Zc/GGfJaH4hT7VOaLJjd4hmxqd66jhxqo9kig0OL8W8+p21?=
 =?us-ascii?q?hJtipIisTAu38Q2xDJ6cWKSuFx8lm/1TuNzQze5PlILV07mKbGMZIswb49mo?=
 =?us-ascii?q?ANvUnNECL6glj6gLOZe0gi5+Om8f7oYq/8qZ+ZL4J0jwb+PbkwlcGnGuQ4Nx?=
 =?us-ascii?q?QOX3Cc+eShyL3v5U35T6tOjv0xiqTZrpXaKt4apq69GQNazp0j5wynDze7y9?=
 =?us-ascii?q?sUh2MHLFVddBKGiYjmJU3OLejlAfqwnligijRmyvDcMrH/HJnALGLPnbn5cb?=
 =?us-ascii?q?Z48UFcyQ4zzd5F55JTD7EMOO78WkjqtNzEDx85NRa4w+L6CNVly4MTQn6AAr?=
 =?us-ascii?q?SDPKPKrF+H/fgjI/OLZIMNojbyN+Al5+LyjX8+gVIdebOm3YALZ3ClBPhpOE?=
 =?us-ascii?q?KZYXXxjdgbF2cHugszQffliF2HSzFTZnKyU7gg6TE8DYKsFZ3DSZy1gLydwC?=
 =?us-ascii?q?e7GYVbZmVHClCKEHfocJ6EV+4RZy2MPM9ujDgEWKOlS48gzhGuqBT6x6BoL+?=
 =?us-ascii?q?XK/C0Ur5Xj1MJ65+fLjxE96SR0D9iB02GKV2x0gGcISCUr069nu0N9zEqM0b?=
 =?us-ascii?q?JmjPxZD9Bc/OlGXRo9NZ7d0ux3EMvyWh7cftiUUlqpWMmpASorQtIs298BeF?=
 =?us-ascii?q?xxG8+ljkOL4y3/Pbscm/miApAu/6Pr9dPdAOdA/DaZhPdw1RhuFtVLPGGRj6?=
 =?us-ascii?q?hz7QXSQYTAn0KYio6xabkQmifG7yGe1WDIpkYOFEY6VKTDXHcEI0fbs9n9zk?=
 =?us-ascii?q?fDVKO1T6QqNE1G08HIYv9Pa9voik4DSPr9NdD2Z2Oqh3z2FRuOgLSWY9y5VX?=
 =?us-ascii?q?8a2XD2D1MYkgZb2WueKEBqDSC6v2PYSjhzDU/HaFiq6fR07mm8GBxnhzqWZl?=
 =?us-ascii?q?FsguLmsiUeguaRHrZKhuoJ?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2APAACm54RdXQPjVY1lGQEBAQEBAQE?=
 =?us-ascii?q?BAQEBAQcBAQEBAQGBVQIBAQEBAQsBgXOBFwNQIBIqhCKIfIghfohpjzsUgWc?=
 =?us-ascii?q?JAQEBJgsJAQIBAYFLgi9FAoMsNgcOAgMJAQEFAQEBAQEFBAEGGhYFhV4Mgjo?=
 =?us-ascii?q?pAYJmAQEBAQMBASEERwsQCxUDAgImAgIhBgEbFAYBDAYCAQGCU0sBgWoDIQu?=
 =?us-ascii?q?sA38zhUyCSA1igUmBDCgBimqCdj+BESeCNjU+ghpHAQSBIwQQCxyDC4JYBIx?=
 =?us-ascii?q?NICSIEoEflV0tQQeCJWUEhhyFFINSSVWDeyGCNi9DhlmDfyeKf44agTyGV4I?=
 =?us-ascii?q?IiySFMSgGggMzGnOCbAlHEBSBVwMXiGOCZoJcPQEBMQGBBQEBi2IHgk0BAQ?=
X-IPAS-Result: =?us-ascii?q?A2APAACm54RdXQPjVY1lGQEBAQEBAQEBAQEBAQcBAQEBA?=
 =?us-ascii?q?QGBVQIBAQEBAQsBgXOBFwNQIBIqhCKIfIghfohpjzsUgWcJAQEBJgsJAQIBA?=
 =?us-ascii?q?YFLgi9FAoMsNgcOAgMJAQEFAQEBAQEFBAEGGhYFhV4MgjopAYJmAQEBAQMBA?=
 =?us-ascii?q?SEERwsQCxUDAgImAgIhBgEbFAYBDAYCAQGCU0sBgWoDIQusA38zhUyCSA1ig?=
 =?us-ascii?q?UmBDCgBimqCdj+BESeCNjU+ghpHAQSBIwQQCxyDC4JYBIxNICSIEoEflV0tQ?=
 =?us-ascii?q?QeCJWUEhhyFFINSSVWDeyGCNi9DhlmDfyeKf44agTyGV4IIiySFMSgGggMzG?=
 =?us-ascii?q?nOCbAlHEBSBVwMXiGOCZoJcPQEBMQGBBQEBi2IHgk0BAQ?=
X-IronPort-AV: E=Sophos;i="5.64,528,1559509200"; 
   d="scan'208";a="4847848"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 20 Sep 2019 17:54:24 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 713041A600B5;
 Fri, 20 Sep 2019 17:54:24 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id aDR7Pf52nMkJ; Fri, 20 Sep 2019 17:54:24 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 5559D1A60128;
 Fri, 20 Sep 2019 17:54:24 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id tmqnQM2DDsV1; Fri, 20 Sep 2019 17:54:24 +0300 (EEST)
Received: from [172.19.9.91] (unknown [141.85.233.104])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 367FA1A600B5;
 Fri, 20 Sep 2019 17:54:24 +0300 (EEST)
To: =?UTF-8?Q?Vlad-Andrei_B=c4=82DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
References: <20190919111545.7610-1-costin.lupu@cs.pub.ro>
 <f5f30375-b19f-a271-a31b-07b3eb4ea40b@stud.acs.upb.ro>
From: Costin Lupu <costin.lupu@cs.pub.ro>
Message-ID: <e340af97-ff85-460d-c172-0dfb4fd8c12f@cs.pub.ro>
Date: Fri, 20 Sep 2019 17:54:23 +0300
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <f5f30375-b19f-a271-a31b-07b3eb4ea40b@stud.acs.upb.ro>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3] lib/vfscore: Add anonymous
 pipe
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Bogdan Lascu <lascu.bogdan96@gmail.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGZvciB0aGUgcmV2aWV3LCBWbGFkISBJJ3ZlIGp1c3Qgc2VudCB0aGUgbmV3bGliIHBh
dGNoLiBGb3IgeW91cgpvdGhlciBjb21tZW50cyBwbGVhc2Ugc2VlIGlubGluZS4KCk9uIDkvMjAv
MTkgMjo1NiBQTSwgVmxhZC1BbmRyZWkgQsSCRE9JVSAoNzg2OTIpIHdyb3RlOgo+IEhleSBDb3N0
aW4sCj4gCj4gVGhhbmtzIGZvciB0aGUgcGF0Y2guIEkgaGF2ZSBsZWZ0IHR3byBjb21tZW50cyBp
bmxpbmUgdGhhdCBtYXkgYmUgdXNlZnVsCj4gZm9yIGZ1dHVyZSByZXZpc2lvbiBvZiB0aGUgcGlw
ZSBjb2RlLgo+IAo+IFJldmlld2VkLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUJPHZsYWRfYW5kcmVp
LmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Cj4gCj4gVmxhZAo+IAo+IFBTOiBCZWZvcmUgdXBzdHJl
YW1pbmcgdGhpcyBwYXRjaCwgd2UgbmVlZCBhbm90aGVyIHBhdGNoIHRvIHJlbW92ZSB0aGUKPiBw
aXBlIHN0dWIgZnJvbSBuZXdsaWIuCj4gCj4gT24gMTkuMDkuMjAxOSAxNDoxNSwgQ29zdGluIEx1
cHUgd3JvdGU6Cj4+IEZyb206IEJvZ2RhbiBMYXNjdSA8bGFzY3UuYm9nZGFuOTZAZ21haWwuY29t
Pgo+Pgo+PiBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgYW5vbnltb3VzIHBpcGVzLiBUaGUg
dW5kZXJseWluZyBidWZmZXIgaXMgYSByaW5nCj4+IGJ1ZmZlciB3aG9zZSBzaXplIG11c3QgYmUg
YSBwb3dlciBvZiAyLiBUaGUgY3JlYXRpbmcgb2YgaXRzIGZpbGUgZGVzY3JpcHRvcnMKPj4gZm9s
bG93cyBjbG9zZWx5IHRoZSBpbXBsZW1lbnRhdGlvbiBmb3Igc29ja2V0cyBpbiBsd2lwIGdsdWUg
Y29kZS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogQm9nZGFuIExhc2N1IDxsYXNjdS5ib2dkYW45NkBn
bWFpbC5jb20+Cj4+IFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5w
dWIucm8+Cj4+IC0tLQo+PiAgbGliL3Zmc2NvcmUvQ29uZmlnLnVrICAgICB8ICAxMiArLQo+PiAg
bGliL3Zmc2NvcmUvTWFrZWZpbGUudWsgICB8ICAgMiArCj4+ICBsaWIvdmZzY29yZS9leHBvcnRz
eW1zLnVrIHwgICAxICsKPj4gIGxpYi92ZnNjb3JlL3BpcGUuYyAgICAgICAgfCA1NzMgKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gIDQgZmlsZXMgY2hhbmdlZCwgNTg3
IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
dmZzY29yZS9waXBlLmMKPj4KPj4gZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL0NvbmZpZy51ayBi
L2xpYi92ZnNjb3JlL0NvbmZpZy51awo+PiBpbmRleCA2Y2Y2YzYzYS4uNWRlYjdkMDQgMTAwNjQ0
Cj4+IC0tLSBhL2xpYi92ZnNjb3JlL0NvbmZpZy51awo+PiArKysgYi9saWIvdmZzY29yZS9Db25m
aWcudWsKPj4gQEAgLTEsNiArMSwxNiBAQAo+PiAtY29uZmlnIExJQlZGU0NPUkUKPj4gK21lbnVj
b25maWcgTElCVkZTQ09SRQo+PiAgCWJvb2wgInZmc2NvcmU6IFZGUyBDb3JlIEludGVyZmFjZSIK
Pj4gIAlkZWZhdWx0IG4KPj4gIAlzZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKPj4gIAlz
ZWxlY3QgTElCVUtERUJVRwo+PiAgCXNlbGVjdCBMSUJVS0xPQ0sKPj4gKwo+PiAraWYgTElCVkZT
Q09SRQo+PiArCj4+ICtjb25maWcgTElCVkZTQ09SRV9QSVBFX1NJWkVfT1JERVIKPj4gKwlpbnQg
IlBpcGUgc2l6ZSBvcmRlciIKPj4gKwlkZWZhdWx0IDE2Cj4+ICsJaGVscAo+PiArCQlUaGUgc2l6
ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIGZvciBhbm9ueW1vdXMgcGlwZXMgaXMgMl5vcmRlci4K
Pj4gKwo+PiArZW5kaWYKPj4gZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrIGIv
bGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKPj4gaW5kZXggNzk4NzhmMjYuLmUzNmM5MjE3IDEwMDY0
NAo+PiAtLS0gYS9saWIvdmZzY29yZS9NYWtlZmlsZS51awo+PiArKysgYi9saWIvdmZzY29yZS9N
YWtlZmlsZS51awo+PiBAQCAtMTQsNiArMTQsOCBAQCBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJ
QlZGU0NPUkVfQkFTRSkvdGFzay5jCj4+ICBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NP
UkVfQkFTRSkvbG9va3VwLmMKPj4gIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9C
QVNFKS9mb3BzLmMKPj4gIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9z
dWJyX3Vpby5jCj4+ICtMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvcGlw
ZS5jCj4+ICtMSUJWRlNDT1JFX1BJUEVfRkxBR1MteSArPSAtV25vLWNhc3QtZnVuY3Rpb24tdHlw
ZQo+PiAgTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2V4dHJhLmxkCj4+
ICAKPj4gIAo+PiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvZXhwb3J0c3ltcy51ayBiL2xpYi92
ZnNjb3JlL2V4cG9ydHN5bXMudWsKPj4gaW5kZXggNDYxNTYwOTguLjcwMzkyNzIxIDEwMDY0NAo+
PiAtLS0gYS9saWIvdmZzY29yZS9leHBvcnRzeW1zLnVrCj4+ICsrKyBiL2xpYi92ZnNjb3JlL2V4
cG9ydHN5bXMudWsKPj4gQEAgLTEwOSwzICsxMDksNCBAQCB2bl9zZXR0aW1lcwo+PiAgdm5fc3Rh
dAo+PiAgdm5fdW5sb2NrCj4+ICB2ZnNfYnVzeQo+PiArcGlwZQo+PiBkaWZmIC0tZ2l0IGEvbGli
L3Zmc2NvcmUvcGlwZS5jIGIvbGliL3Zmc2NvcmUvcGlwZS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAw
NjQ0Cj4+IGluZGV4IDAwMDAwMDAwLi40YzU2MTMwNAo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBi
L2xpYi92ZnNjb3JlL3BpcGUuYwo+PiBAQCAtMCwwICsxLDU3MyBAQAo+PiArLyogU1BEWC1MaWNl
bnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLwo+PiArLyoKPj4gKyAqIEF1dGhvcnM6IEJv
Z2Rhbi1HZW9yZ2UgTGFzY3UgPGxhc2N1LmJvZ2Rhbjk2QGdtYWlsLmNvbT4KPj4gKyAqICAgICAg
ICAgIENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Cj4+ICsgKgo+PiArICogQ29w
eXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPj4gKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwo+PiArICogYXJlIG1ldDoKPj4gKyAqCj4+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+PiArICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgo+
PiArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKPj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPj4gKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCj4+ICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCj4+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+PiArICogICAgdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPj4gKyAq
Cj4+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPj4gKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKPj4gKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCj4+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4+ICsgKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCj4+ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+PiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4+ICsgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgo+PiArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKPj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
Cj4+ICsgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KPj4gKyAqCj4+ICsgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+PiArICov
Cj4+ICsKPj4gKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KPj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+
PiArI2luY2x1ZGUgPHN0cmluZy5oPgo+PiArI2luY2x1ZGUgPHZmc2NvcmUvZmlsZS5oPgo+PiAr
I2luY2x1ZGUgPHZmc2NvcmUvZnMuaD4KPj4gKyNpbmNsdWRlIDx2ZnNjb3JlL21vdW50Lmg+Cj4+
ICsjaW5jbHVkZSA8dmZzY29yZS92bm9kZS5oPgo+PiArI2luY2x1ZGUgPHVrL3dhaXQuaD4KPj4g
KyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KPj4gKwo+PiArLyogV2UgdXNlIHRoZSBkZWZhdWx0IHNp
emUgaW4gTGludXgga2VybmVsICovCj4+ICsjZGVmaW5lIFBJUEVfTUFYX1NJWkUJKDEgPDwgQ09O
RklHX0xJQlZGU0NPUkVfUElQRV9TSVpFX09SREVSKQo+PiArCj4+ICtzdHJ1Y3QgcGlwZV9idWYg
ewo+PiArCS8qIFRoZSBidWZmZXIgKi8KPj4gKwljaGFyICpkYXRhOwo+PiArCS8qIFRoZSBidWZm
ZXIgY2FwYWNpdHksIGFsd2F5cyBhIHBvd2VyIG9mIDIgKi8KPj4gKwl1bnNpZ25lZCBsb25nIGNh
cGFjaXR5Owo+PiArCS8qIFByb2R1Y2VyIGluZGV4ICovCj4+ICsJdW5zaWduZWQgbG9uZyBwcm9k
Owo+PiArCS8qIENvbnN1bWVyIGluZGV4ICovCj4+ICsJdW5zaWduZWQgbG9uZyBjb25zOwo+PiAr
Cj4+ICsJLyogUmVhZCBsb2NrICovCj4+ICsJc3RydWN0IHVrX211dGV4IHJkbG9jazsKPj4gKwkv
KiBXcml0ZSBsb2NrICovCj4+ICsJc3RydWN0IHVrX211dGV4IHdybG9jazsKPj4gKwo+PiArCS8q
IFJlYWRlcnMgcXVldWUgKi8KPj4gKwlzdHJ1Y3QgdWtfd2FpdHEgcmR3cTsKPj4gKwkvKiBXcml0
ZXJzIHF1ZXVlICovCj4+ICsJc3RydWN0IHVrX3dhaXRxIHdyd3E7Cj4+ICt9Owo+PiArCj4+ICsj
ZGVmaW5lIFBJUEVfQlVGX0lEWChidWYsIG4pICAgICgobikgJiAoKGJ1ZiktPmNhcGFjaXR5IC0g
MSkpCj4+ICsjZGVmaW5lIFBJUEVfQlVGX1BST0RfSURYKGJ1ZikgIFBJUEVfQlVGX0lEWCgoYnVm
KSwgKGJ1ZiktPnByb2QpCj4+ICsjZGVmaW5lIFBJUEVfQlVGX0NPTlNfSURYKGJ1ZikgIFBJUEVf
QlVGX0lEWCgoYnVmKSwgKGJ1ZiktPmNvbnMpCj4+ICsKPj4gK3N0cnVjdCBwaXBlX2ZpbGUgewo+
PiArCS8qIFBpcGUgYnVmZmVyICovCj4+ICsJc3RydWN0IHBpcGVfYnVmICpidWY7Cj4+ICsJLyog
V3JpdGUgcmVmZXJlbmNlIGNvdW50ICovCj4+ICsJaW50IHdfcmVmY291bnQ7Cj4+ICsJLyogUmVh
ZCByZWZlcmVuY2UgY291bnQgKi8KPj4gKwlpbnQgcl9yZWZjb3VudDsKPj4gKwkvKiBGbGFncyAq
Lwo+PiArCWludCBmbGFnczsKPj4gK307Cj4+ICsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBwaXBl
X2J1ZiAqcGlwZV9idWZfYWxsb2MoaW50IGNhcGFjaXR5KQo+PiArewo+PiArCXN0cnVjdCBwaXBl
X2J1ZiAqcGlwZV9idWY7Cj4+ICsKPj4gKwlVS19BU1NFUlQoUE9XRVJfT0ZfMihjYXBhY2l0eSkp
Owo+PiArCj4+ICsJcGlwZV9idWYgPSBtYWxsb2Moc2l6ZW9mKCpwaXBlX2J1ZikpOwo+PiArCWlm
ICghcGlwZV9idWYpCj4+ICsJCXJldHVybiBOVUxMOwo+PiArCj4+ICsJcGlwZV9idWYtPmRhdGEg
PSBtYWxsb2MoY2FwYWNpdHkpOwo+PiArCWlmICghcGlwZV9idWYtPmRhdGEpIHsKPj4gKwkJZnJl
ZShwaXBlX2J1Zik7Cj4+ICsJCXJldHVybiBOVUxMOwo+PiArCX0KPj4gKwo+PiArCXBpcGVfYnVm
LT5jYXBhY2l0eSA9IGNhcGFjaXR5Owo+PiArCXBpcGVfYnVmLT5jb25zID0gMDsKPj4gKwlwaXBl
X2J1Zi0+cHJvZCA9IDA7Cj4+ICsJdWtfbXV0ZXhfaW5pdCgmcGlwZV9idWYtPnJkbG9jayk7Cj4+
ICsJdWtfbXV0ZXhfaW5pdCgmcGlwZV9idWYtPndybG9jayk7Cj4+ICsJdWtfd2FpdHFfaW5pdCgm
cGlwZV9idWYtPnJkd3EpOwo+PiArCXVrX3dhaXRxX2luaXQoJnBpcGVfYnVmLT53cndxKTsKPj4g
Kwo+PiArCXJldHVybiBwaXBlX2J1ZjsKPj4gK30KPj4gKwo+PiArdm9pZCBwaXBlX2J1Zl9mcmVl
KHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYpCj4+ICt7Cj4+ICsJZnJlZShwaXBlX2J1Zi0+ZGF0
YSk7Cj4+ICsJZnJlZShwaXBlX2J1Zik7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1bnNpZ25lZCBs
b25nIHBpcGVfYnVmX2dldF9hdmFpbGFibGUoY29uc3Qgc3RydWN0IHBpcGVfYnVmICpwaXBlX2J1
ZikKPj4gK3sKPj4gKwlyZXR1cm4gcGlwZV9idWYtPnByb2QgLSBwaXBlX2J1Zi0+Y29uczsKPj4g
K30KPj4gKwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfZ2V0X2ZyZWVfc3BhY2Uo
c3RydWN0IHBpcGVfYnVmICpwaXBlX2J1ZikKPj4gK3sKPj4gKwlyZXR1cm4gcGlwZV9idWYtPmNh
cGFjaXR5IC0gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShwaXBlX2J1Zik7Cj4+ICt9Cj4+ICsKPj4g
K3N0YXRpYyBpbnQgcGlwZV9idWZfY2FuX3dyaXRlKHN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYp
Cj4+ICt7Cj4+ICsJcmV0dXJuIHBpcGVfYnVmX2dldF9mcmVlX3NwYWNlKHBpcGVfYnVmKSA+IDA7
Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcGlwZV9idWZfY2FuX3JlYWQoc3RydWN0IHBpcGVf
YnVmICpwaXBlX2J1ZikKPj4gK3sKPj4gKwlyZXR1cm4gcGlwZV9idWZfZ2V0X2F2YWlsYWJsZShw
aXBlX2J1ZikgPiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgbG9uZyBwaXBlX2J1
Zl93cml0ZShzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVmLAo+PiArCQlzdHJ1Y3QgaW92ZWMgKmlv
dmVjLCBzaXplX3QgaW92ZWNfb2ZmKQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgcHJvZF9pZHgs
IHRvX3dyaXRlOwo+PiArCXZvaWQgKmlvdmVjX2RhdGEgPSBpb3ZlYy0+aW92X2Jhc2UgKyBpb3Zl
Y19vZmY7Cj4+ICsJc2l6ZV90IGlvdl9sZW4gPSBpb3ZlYy0+aW92X2xlbiAtIGlvdmVjX29mZjsK
Pj4gKwo+PiArCXByb2RfaWR4ID0gUElQRV9CVUZfUFJPRF9JRFgocGlwZV9idWYpOwo+PiArCXRv
X3dyaXRlID0gTUlOKHBpcGVfYnVmX2dldF9mcmVlX3NwYWNlKHBpcGVfYnVmKSwgaW92X2xlbik7
Cj4+ICsJaWYgKHRvX3dyaXRlID09IDApCj4+ICsJCWdvdG8gb3V0Owo+PiArCj4+ICsJLyogQ29w
eSBpbiBvbmUgcGllY2UgKi8KPj4gKwlpZiAocHJvZF9pZHggKyB0b193cml0ZSA8PSBwaXBlX2J1
Zi0+Y2FwYWNpdHkpCj4+ICsJCW1lbWNweShwaXBlX2J1Zi0+ZGF0YSArIHByb2RfaWR4LCBpb3Zl
Y19kYXRhLCB0b193cml0ZSk7Cj4+ICsKPj4gKwllbHNlIHsKPj4gKwkJaW50IGZpcnN0X2NvcHlf
Ynl0ZXMsIHNlY29uZF9jb3B5X2J5dGVzOwo+PiArCj4+ICsJCS8qIENvcHkgdGhlIGZpcnN0IHBh
cnQgKi8KPj4gKwkJZmlyc3RfY29weV9ieXRlcyA9IHBpcGVfYnVmLT5jYXBhY2l0eSAtIHByb2Rf
aWR4Owo+PiArCQltZW1jcHkocGlwZV9idWYtPmRhdGEgKyBwcm9kX2lkeCwKPj4gKwkJCQlpb3Zl
Y19kYXRhLAo+PiArCQkJCWZpcnN0X2NvcHlfYnl0ZXMpOwo+PiArCj4+ICsJCS8qIENvcHkgdGhl
IHNlY29uZCBwYXJ0ICovCj4+ICsJCXNlY29uZF9jb3B5X2J5dGVzID0gcHJvZF9pZHggKyB0b193
cml0ZSAtIHBpcGVfYnVmLT5jYXBhY2l0eTsKPj4gKwkJbWVtY3B5KHBpcGVfYnVmLT5kYXRhLAo+
PiArCQkJCWlvdmVjX2RhdGEgKyBmaXJzdF9jb3B5X2J5dGVzLAo+PiArCQkJCXNlY29uZF9jb3B5
X2J5dGVzKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBVcGRhdGUgcHJvZHVjZXIgKi8KPj4gKwlwaXBl
X2J1Zi0+cHJvZCArPSB0b193cml0ZTsKPj4gKwo+PiArb3V0Ogo+PiArCXJldHVybiB0b193cml0
ZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgcGlwZV9idWZfcmVhZChzdHJ1
Y3QgcGlwZV9idWYgKnBpcGVfYnVmLAo+PiArCQlzdHJ1Y3QgaW92ZWMgKmlvdmVjLCBzaXplX3Qg
aW92ZWNfb2ZmKQo+PiArewo+PiArCXVuc2lnbmVkIGxvbmcgY29uc19pZHgsIHRvX3JlYWQ7Cj4+
ICsJdm9pZCAqaW92ZWNfZGF0YSA9IGlvdmVjLT5pb3ZfYmFzZSArIGlvdmVjX29mZjsKPj4gKwlz
aXplX3QgaW92X2xlbiA9IGlvdmVjLT5pb3ZfbGVuIC0gaW92ZWNfb2ZmOwo+PiArCj4+ICsJY29u
c19pZHggPSBQSVBFX0JVRl9DT05TX0lEWChwaXBlX2J1Zik7Cj4+ICsJdG9fcmVhZCA9IE1JTihw
aXBlX2J1Zl9nZXRfYXZhaWxhYmxlKHBpcGVfYnVmKSwgaW92X2xlbik7Cj4+ICsJaWYgKHRvX3Jl
YWQgPT0gMCkKPj4gKwkJZ290byBvdXQ7Cj4+ICsKPj4gKwkvKiBDb3B5IGluIG9uZSBwaWVjZSAq
Lwo+PiArCWlmIChjb25zX2lkeCArIHRvX3JlYWQgPD0gcGlwZV9idWYtPmNhcGFjaXR5KQo+PiAr
CQltZW1jcHkoaW92ZWNfZGF0YSwgcGlwZV9idWYtPmRhdGEgKyBjb25zX2lkeCwgdG9fcmVhZCk7
Cj4+ICsKPj4gKwllbHNlIHsKPj4gKwkJaW50IGZpcnN0X2NvcHlfYnl0ZXM7Cj4+ICsJCWludCBz
ZWNvbmRfY29weV9ieXRlczsKPj4gKwo+PiArCQkvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0ICovCj4+
ICsJCWZpcnN0X2NvcHlfYnl0ZXMgPSBwaXBlX2J1Zi0+Y2FwYWNpdHkgLSBwaXBlX2J1Zi0+Y29u
czsKPj4gKwkJbWVtY3B5KGlvdmVjX2RhdGEsCj4+ICsJCQkJcGlwZV9idWYtPmRhdGEgKyBjb25z
X2lkeCwKPj4gKwkJCQlmaXJzdF9jb3B5X2J5dGVzKTsKPj4gKwo+PiArCQkvKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCAqLwo+PiArCQlzZWNvbmRfY29weV9ieXRlcyA9IGNvbnNfaWR4ICsgdG9fcmVh
ZCAtIHBpcGVfYnVmLT5jYXBhY2l0eTsKPj4gKwkJbWVtY3B5KGlvdmVjX2RhdGEgKyBmaXJzdF9j
b3B5X2J5dGVzLAo+PiArCQkJCXBpcGVfYnVmLT5kYXRhLAo+PiArCQkJCXNlY29uZF9jb3B5X2J5
dGVzKTsKPj4gKwl9Cj4+ICsKPj4gKwkvKiBVcGRhdGUgY29uc3VtZXIgKi8KPj4gKwlwaXBlX2J1
Zi0+Y29ucyArPSB0b19yZWFkOwo+PiArCj4+ICtvdXQ6Cj4+ICsJcmV0dXJuIHRvX3JlYWQ7Cj4+
ICt9Cj4+ICsKPj4gK3N0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZV9hbGxvYyhpbnQgY2FwYWNp
dHksIGludCBmbGFncykKPj4gK3sKPj4gKwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGU7Cj4+
ICsKPj4gKwlwaXBlX2ZpbGUgPSBtYWxsb2Moc2l6ZW9mKCpwaXBlX2ZpbGUpKTsKPj4gKwlpZiAo
IXBpcGVfZmlsZSkKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsKPj4gKwlwaXBlX2ZpbGUtPmJ1ZiA9
IHBpcGVfYnVmX2FsbG9jKGNhcGFjaXR5KTsKPj4gKwlpZiAoIXBpcGVfZmlsZS0+YnVmKSB7Cj4+
ICsJCWZyZWUocGlwZV9maWxlKTsKPj4gKwkJcmV0dXJuIE5VTEw7Cj4+ICsJfQo+PiArCj4+ICsJ
cGlwZV9maWxlLT53X3JlZmNvdW50ID0gMTsKPj4gKwlwaXBlX2ZpbGUtPnJfcmVmY291bnQgPSAx
Owo+PiArCXBpcGVfZmlsZS0+ZmxhZ3MgPSBmbGFnczsKPj4gKwo+PiArCXJldHVybiBwaXBlX2Zp
bGU7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgcGlwZV9maWxlX2ZyZWUoc3RydWN0IHBpcGVfZmlsZSAq
cGlwZV9maWxlKQo+PiArewo+PiArCXBpcGVfYnVmX2ZyZWUocGlwZV9maWxlLT5idWYpOwo+PiAr
CWZyZWUocGlwZV9maWxlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBwaXBlX3dyaXRlKHN0
cnVjdCB2bm9kZSAqdm5vZGUsCj4+ICsJCXN0cnVjdCB1aW8gKmJ1ZiwgaW50IGlvZmxhZyBfX3Vu
dXNlZCkKPj4gK3sKPj4gKwlzdHJ1Y3QgcGlwZV9maWxlICpwaXBlX2ZpbGUgPSB2bm9kZS0+dl9k
YXRhOwo+PiArCXN0cnVjdCBwaXBlX2J1ZiAqcGlwZV9idWYgPSBwaXBlX2ZpbGUtPmJ1ZjsKPj4g
Kwlib29sIG5vbmJsb2NraW5nID0gZmFsc2U7IC8qIFRPRE8gaGFuZGxlIG5vbmJsb2NraW5nICov
Cj4gSW4gdGhpcyBjYXNlIGV2ZW4gdGhvdWdoIHdlIHN1cHBvcnQgbm9uLWJsb2NraW5nIHdlIGFs
d2F5cyBoYXZlIHRoZQo+IHZhbHVlIHNldCB0byBmYWxzZS4KClJpZ2h0LiBUaGlzIHBpcGUgaW1w
bGVtZW50YXRpb24gZG9lcyBzdXBwb3J0IG5vbi1ibG9ja2luZyB3cml0ZSwgYnV0IEkKZGlkbid0
IGtub3cgd2hlcmUgdG8gdGFrZSB0aGlzIGluZm9ybWF0aW9uIGZyb20uIEZvciByZWFkIG9wZXJh
dGlvbnMgaXQKaXMgc2V0IGluIHRoZSB2ZnNjb3JlIGZpbGUgZmxhZ3MsIGJ1dCBmb3Igd3JpdGUg
b3BlcmF0aW9ucyBJIGNvdWxkbid0CmZpbmQgYW55dGhpbmcuIElmIGFueW9uZSB3b3VsZCBmaW5k
IG91dCBob3cgaXQgc2hvdWxkIGJlIGRvbmUgdGhlbiBpdApzaG91bGRuJ3QgYmUgYSBwcm9ibGVt
IHRvIGp1c3Qgc2VuZCBhIHBhdGNoLgoKPj4gKwlib29sIGRhdGFfYXZhaWxhYmxlID0gdHJ1ZTsK
Pj4gKwlpbnQgdWlvX2lkeCA9IDA7Cj4+ICsKPj4gKwlpZiAoIXBpcGVfZmlsZS0+cl9yZWZjb3Vu
dCkgewo+PiArCQkvKiBUT0RPIGJlZm9yZSByZXR1cm5pbmcgdGhlIGVycm9yLCBzZW5kIGEgU0lH
UElQRSBzaWduYWwgKi8KPj4gKwkJcmV0dXJuIC1FUElQRTsKPj4gKwl9Cj4+ICsKPj4gKwl1a19t
dXRleF9sb2NrKCZwaXBlX2J1Zi0+d3Jsb2NrKTsKPj4gKwl3aGlsZSAoZGF0YV9hdmFpbGFibGUg
JiYgdWlvX2lkeCA8IGJ1Zi0+dWlvX2lvdmNudCkgewo+PiArCQlzdHJ1Y3QgaW92ZWMgKmlvdmVj
ID0gJmJ1Zi0+dWlvX2lvdlt1aW9faWR4XTsKPj4gKwkJdW5zaWduZWQgbG9uZyBvZmYgPSAwOwo+
PiArCj4+ICsJCXdoaWxlIChvZmYgPCBpb3ZlYy0+aW92X2xlbikgewo+PiArCQkJdW5zaWduZWQg
bG9uZyB3cml0dGVuX2J5dGVzOwo+PiArCj4+ICsJCQl3cml0dGVuX2J5dGVzID0gcGlwZV9idWZf
d3JpdGUocGlwZV9idWYsIGlvdmVjLCBvZmYpOwo+PiArCQkJaWYgKHdyaXR0ZW5fYnl0ZXMgPT0g
MCkgewo+PiArCQkJCS8qIE5vIGRhdGEgKi8KPj4gKwkJCQlpZiAobm9uYmxvY2tpbmcpIHsKPj4g
KwkJCQkJZGF0YV9hdmFpbGFibGUgPSBmYWxzZTsKPj4gKwkJCQkJYnJlYWs7Cj4+ICsKPj4gKwkJ
CQl9IGVsc2Ugewo+PiArCQkJCQkvKiBXYWl0IHVudGlsIGRhdGEgYXZhaWxhYmxlICovCj4+ICsJ
CQkJCXdoaWxlICghcGlwZV9idWZfY2FuX3dyaXRlKHBpcGVfYnVmKSkgewo+PiArCQkJCQkJdWtf
bXV0ZXhfdW5sb2NrKCZwaXBlX2J1Zi0+d3Jsb2NrKTsKPj4gKwkJCQkJCXVrX3dhaXRxX3dhaXRf
ZXZlbnQoJnBpcGVfYnVmLT53cndxLAo+PiArCQkJCQkJCXBpcGVfYnVmX2Nhbl93cml0ZShwaXBl
X2J1ZikpOwo+PiArCQkJCQkJdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPndybG9jayk7Cj4+ICsJ
CQkJCX0KPj4gKwkJCQl9Cj4+ICsKPj4gKwkJCX0gZWxzZSB7Cj4+ICsJCQkJLyogVXBkYXRlIGJ5
dGVzIHdyaXR0ZW5fYnl0ZXMuICovCj4+ICsJCQkJYnVmLT51aW9fcmVzaWQgLT0gd3JpdHRlbl9i
eXRlczsKPj4gKwo+PiArCQkJCW9mZiArPSB3cml0dGVuX2J5dGVzOwo+PiArCj4+ICsJCQkJLyog
d2FrZSBzb21lIHJlYWRlcnMgKi8KPj4gKwkJCQl1a193YWl0cV93YWtlX3VwKCZwaXBlX2J1Zi0+
cmR3cSk7Cj4+ICsJCQl9Cj4+ICsJCX0KPj4gKwo+PiArCQl1aW9faWR4Kys7Cj4+ICsJfQo+PiAr
CXVrX211dGV4X3VubG9jaygmcGlwZV9idWYtPndybG9jayk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsK
Pj4gK30KPj4gKwo+PiArc3RhdGljIGludCBwaXBlX3JlYWQoc3RydWN0IHZub2RlICp2bm9kZSwK
Pj4gKwkJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxlLAo+PiArCQlzdHJ1Y3QgdWlv
ICpidWYsIGludCBpb2ZsYWcgX191bnVzZWQpCj4+ICt7Cj4+ICsJc3RydWN0IHBpcGVfZmlsZSAq
cGlwZV9maWxlID0gdm5vZGUtPnZfZGF0YTsKPj4gKwlzdHJ1Y3QgcGlwZV9idWYgKnBpcGVfYnVm
ID0gcGlwZV9maWxlLT5idWY7Cj4+ICsJYm9vbCBub25ibG9ja2luZyA9ICh2ZnNjb3JlX2ZpbGUt
PmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKPj4gKwlib29sIGRhdGFfYXZhaWxhYmxlID0gdHJ1ZTsK
Pj4gKwlpbnQgdWlvX2lkeCA9IDA7Cj4+ICsKPj4gKwl1a19tdXRleF9sb2NrKCZwaXBlX2J1Zi0+
cmRsb2NrKTsKPj4gKwlpZiAobm9uYmxvY2tpbmcgJiYgIXBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVf
YnVmKSkgewo+PiArCQl1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT5yZGxvY2spOwo+PiArCQly
ZXR1cm4gRUFHQUlOOwo+PiArCX0KPj4gKwo+PiArCXdoaWxlIChkYXRhX2F2YWlsYWJsZSAmJiB1
aW9faWR4IDwgYnVmLT51aW9faW92Y250KSB7Cj4+ICsJCXN0cnVjdCBpb3ZlYyAqaW92ZWMgPSAm
YnVmLT51aW9faW92W3Vpb19pZHhdOwo+PiArCQl1bnNpZ25lZCBsb25nIG9mZiA9IDA7Cj4+ICsK
Pj4gKwkJd2hpbGUgKG9mZiA8IGlvdmVjLT5pb3ZfbGVuKSB7Cj4+ICsJCQl1bnNpZ25lZCBsb25n
IHJlYWRfYnl0ZXM7Cj4+ICsKPj4gKwkJCXJlYWRfYnl0ZXMgPSBwaXBlX2J1Zl9yZWFkKHBpcGVf
YnVmLCBpb3ZlYywgb2ZmKTsKPj4gKwkJCWlmIChyZWFkX2J5dGVzID09IDApIHsKPj4gKwkJCQkv
KiBObyBkYXRhICovCj4+ICsJCQkJaWYgKG5vbmJsb2NraW5nKSB7Cj4+ICsJCQkJCWRhdGFfYXZh
aWxhYmxlID0gZmFsc2U7Cj4+ICsJCQkJCWJyZWFrOwo+PiArCj4+ICsJCQkJfSBlbHNlIHsKPj4g
KwkJCQkJLyogV2FpdCB1bnRpbCBkYXRhIGF2YWlsYWJsZSAqLwo+PiArCQkJCQl3aGlsZSAoIXBp
cGVfYnVmX2Nhbl9yZWFkKHBpcGVfYnVmKSkgewo+PiArCQkJCQkJdWtfbXV0ZXhfdW5sb2NrKCZw
aXBlX2J1Zi0+cmRsb2NrKTsKPj4gKwkJCQkJCXVrX3dhaXRxX3dhaXRfZXZlbnQoJnBpcGVfYnVm
LT5yZHdxLAo+PiArCQkJCQkJCXBpcGVfYnVmX2Nhbl9yZWFkKHBpcGVfYnVmKSk7Cj4+ICsJCQkJ
CQl1a19tdXRleF9sb2NrKCZwaXBlX2J1Zi0+cmRsb2NrKTsKPj4gKwkJCQkJfQo+PiArCQkJCX0K
Pj4gKwo+PiArCQkJfSBlbHNlIHsKPj4gKwkJCQkvKiBVcGRhdGUgYnl0ZXMgcmVhZCAqLwo+PiAr
CQkJCWJ1Zi0+dWlvX3Jlc2lkIC09IHJlYWRfYnl0ZXM7Cj4+ICsKPj4gKwkJCQlvZmYgKz0gcmVh
ZF9ieXRlczsKPj4gKwo+PiArCQkJCS8qIHdha2Ugc29tZSB3cml0ZXJzICovCj4+ICsJCQkJdWtf
d2FpdHFfd2FrZV91cCgmcGlwZV9idWYtPndyd3EpOwo+PiArCQkJfQo+PiArCQl9Cj4+ICsKPj4g
KwkJdWlvX2lkeCsrOwo+PiArCX0KPj4gKwl1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT5yZGxv
Y2spOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgcGlwZV9j
bG9zZShzdHJ1Y3Qgdm5vZGUgKnZub2RlLAo+PiArCQlzdHJ1Y3QgdmZzY29yZV9maWxlICp2ZnNj
b3JlX2ZpbGUpCj4+ICt7Cj4+ICsJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlID0gdm5vZGUt
PnZfZGF0YTsKPj4gKwo+PiArCVVLX0FTU0VSVCh2ZnNjb3JlX2ZpbGUtPmZfZGVudHJ5LT5kX3Zu
b2RlID09IHZub2RlKTsKPj4gKwlVS19BU1NFUlQodm5vZGUtPnZfcmVmY250ID09IDEpOwo+PiAr
Cj4+ICsJaWYgKHZmc2NvcmVfZmlsZS0+Zl9mbGFncyAmIFVLX0ZSRUFEKQo+PiArCQlwaXBlX2Zp
bGUtPnJfcmVmY291bnQtLTsKPiBTaG91bGRuJ3Qgd2UgaGF2ZSBhIGxvY2sgb24gcGlwZV9maWxl
IGluIG9yZGVyIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucz8KCkluIGRlZWQsIHdlIGNvdWxkIGhh
dmUgYSByYWNlIHdpdGggd3JpdGUgb3BlcmF0aW9ucywgZm9yIGV4YW1wbGUuCkhvd2V2ZXIsIHZm
c2NvcmUgdGFrZXMgY2FyZSBvZiB0aGF0IChvciBhdCBsZWFzdCB0aGF0J3Mgd2hhdCBJCnVuZGVy
c3Rvb2QgOi1EKTogZXZlcnkgdGltZSBhbiBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLCB0aGUgbG9j
ayBvbiB0aGUKdm5vZGUgaXMgdGFrZW4sIHNvIHZmc2NvcmUgdGFrZXMgY2FyZSBvZiBpdC4KCj4+
ICsKPj4gKwlpZiAodmZzY29yZV9maWxlLT5mX2ZsYWdzICYgVUtfRldSSVRFKQo+PiArCQlwaXBl
X2ZpbGUtPndfcmVmY291bnQtLTsKPj4gKwo+PiArCWlmICghcGlwZV9maWxlLT5yX3JlZmNvdW50
ICYmICFwaXBlX2ZpbGUtPndfcmVmY291bnQpCj4+ICsJCXBpcGVfZmlsZV9mcmVlKHBpcGVfZmls
ZSk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBwaXBlX3Nl
ZWsoc3RydWN0IHZub2RlICp2bm9kZSBfX3VudXNlZCwKPj4gKwkJCXN0cnVjdCB2ZnNjb3JlX2Zp
bGUgKnZmc2NvcmVfZmlsZSBfX3VudXNlZCwKPj4gKwkJCW9mZl90IG9mZjEgX191bnVzZWQsIG9m
Zl90IG9mZjIgX191bnVzZWQpCj4+ICt7Cj4+ICsJZXJybm8gPSBFU1BJUEU7Cj4+ICsJcmV0dXJu
IC0xOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHBpcGVfaW9jdGwoc3RydWN0IHZub2RlICp2
bm9kZSwKPj4gKwkJc3RydWN0IHZmc2NvcmVfZmlsZSAqdmZzY29yZV9maWxlIF9fdW51c2VkLAo+
PiArCQl1bnNpZ25lZCBsb25nIGNvbSwgdm9pZCAqZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgcGlw
ZV9maWxlICpwaXBlX2ZpbGUgPSB2bm9kZS0+dl9kYXRhOwo+PiArCXN0cnVjdCBwaXBlX2J1ZiAq
cGlwZV9idWYgPSBwaXBlX2ZpbGUtPmJ1ZjsKPj4gKwo+PiArCXN3aXRjaCAoY29tKSB7Cj4+ICsJ
Y2FzZSBGSU9OUkVBRDoKPj4gKwkJdWtfbXV0ZXhfbG9jaygmcGlwZV9idWYtPnJkbG9jayk7Cj4+
ICsJCSooKGludCAqKSBkYXRhKSA9IHBpcGVfYnVmX2dldF9hdmFpbGFibGUocGlwZV9idWYpOwo+
PiArCQl1a19tdXRleF91bmxvY2soJnBpcGVfYnVmLT5yZGxvY2spOwo+PiArCQlyZXR1cm4gMDsK
Pj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4g
KyNkZWZpbmUgcGlwZV9vcGVuICAgICAgICAoKHZub3Bfb3Blbl90KSB2ZnNjb3JlX3ZvcF9laW52
YWwpCj4+ICsjZGVmaW5lIHBpcGVfZnN5bmMgICAgICAgKCh2bm9wX2ZzeW5jX3QpIHZmc2NvcmVf
dm9wX251bGxvcCkKPj4gKyNkZWZpbmUgcGlwZV9yZWFkZGlyICAgICAoKHZub3BfcmVhZGRpcl90
KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfbG9va3VwICAgICAgKCh2bm9w
X2xvb2t1cF90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfY3JlYXRlICAg
ICAgKCh2bm9wX2NyZWF0ZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVf
cmVtb3ZlICAgICAgKCh2bm9wX3JlbW92ZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwpCj4+ICsjZGVm
aW5lIHBpcGVfcmVuYW1lICAgICAgKCh2bm9wX3JlbmFtZV90KSB2ZnNjb3JlX3ZvcF9laW52YWwp
Cj4+ICsjZGVmaW5lIHBpcGVfbWtkaXIgICAgICAgKCh2bm9wX21rZGlyX3QpIHZmc2NvcmVfdm9w
X2VpbnZhbCkKPj4gKyNkZWZpbmUgcGlwZV9ybWRpciAgICAgICAoKHZub3Bfcm1kaXJfdCkgdmZz
Y29yZV92b3BfZWludmFsKQo+PiArI2RlZmluZSBwaXBlX2dldGF0dHIgICAgICgodm5vcF9nZXRh
dHRyX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKPj4gKyNkZWZpbmUgcGlwZV9zZXRhdHRyICAgICAo
KHZub3Bfc2V0YXR0cl90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApCj4+ICsjZGVmaW5lIHBpcGVfaW5h
Y3RpdmUgICAgKCh2bm9wX2luYWN0aXZlX3QpIHZmc2NvcmVfdm9wX2VpbnZhbCkKPj4gKyNkZWZp
bmUgcGlwZV90cnVuY2F0ZSAgICAoKHZub3BfdHJ1bmNhdGVfdCkgdmZzY29yZV92b3BfbnVsbG9w
KQo+PiArI2RlZmluZSBwaXBlX2xpbmsgICAgICAgICgodm5vcF9saW5rX3QpIHZmc2NvcmVfdm9w
X2VwZXJtKQo+PiArI2RlZmluZSBwaXBlX2NhY2hlICAgICAgICgodm5vcF9jYWNoZV90KSBOVUxM
KQo+PiArI2RlZmluZSBwaXBlX3JlYWRsaW5rICAgICgodm5vcF9yZWFkbGlua190KSB2ZnNjb3Jl
X3ZvcF9laW52YWwpCj4+ICsjZGVmaW5lIHBpcGVfc3ltbGluayAgICAgKCh2bm9wX3N5bWxpbmtf
dCkgdmZzY29yZV92b3BfZXBlcm0pCj4+ICsjZGVmaW5lIHBpcGVfZmFsbG9jYXRlICAgKCh2bm9w
X2ZhbGxvY2F0ZV90KSB2ZnNjb3JlX3ZvcF9udWxsb3ApCj4+ICsKPj4gK3N0YXRpYyBzdHJ1Y3Qg
dm5vcHMgcGlwZV92bm9wcyA9IHsKPj4gKwkudm9wX29wZW4gICAgICA9IHBpcGVfb3BlbiwKPj4g
Kwkudm9wX2Nsb3NlICAgICA9IHBpcGVfY2xvc2UsCj4+ICsJLnZvcF9yZWFkICAgICAgPSBwaXBl
X3JlYWQsCj4+ICsJLnZvcF93cml0ZSAgICAgPSBwaXBlX3dyaXRlLAo+PiArCS52b3Bfc2VlayAg
ICAgID0gcGlwZV9zZWVrLAo+PiArCS52b3BfaW9jdGwgICAgID0gcGlwZV9pb2N0bCwKPj4gKwku
dm9wX2ZzeW5jICAgICA9IHBpcGVfZnN5bmMsCj4+ICsJLnZvcF9yZWFkZGlyICAgPSBwaXBlX3Jl
YWRkaXIsCj4+ICsJLnZvcF9sb29rdXAgICAgPSBwaXBlX2xvb2t1cCwKPj4gKwkudm9wX2NyZWF0
ZSAgICA9IHBpcGVfY3JlYXRlLAo+PiArCS52b3BfcmVtb3ZlICAgID0gcGlwZV9yZW1vdmUsCj4+
ICsJLnZvcF9yZW5hbWUgICAgPSBwaXBlX3JlbmFtZSwKPj4gKwkudm9wX21rZGlyICAgICA9IHBp
cGVfbWtkaXIsCj4+ICsJLnZvcF9ybWRpciAgICAgPSBwaXBlX3JtZGlyLAo+PiArCS52b3BfZ2V0
YXR0ciAgID0gcGlwZV9nZXRhdHRyLAo+PiArCS52b3Bfc2V0YXR0ciAgID0gcGlwZV9zZXRhdHRy
LAo+PiArCS52b3BfaW5hY3RpdmUgID0gcGlwZV9pbmFjdGl2ZSwKPj4gKwkudm9wX3RydW5jYXRl
ICA9IHBpcGVfdHJ1bmNhdGUsCj4+ICsJLnZvcF9saW5rICAgICAgPSBwaXBlX2xpbmssCj4+ICsJ
LnZvcF9jYWNoZSAgICAgPSBwaXBlX2NhY2hlLAo+PiArCS52b3BfZmFsbG9jYXRlID0gcGlwZV9m
YWxsb2NhdGUsCj4+ICsJLnZvcF9yZWFkbGluayAgPSBwaXBlX3JlYWRsaW5rLAo+PiArCS52b3Bf
c3ltbGluayAgID0gcGlwZV9zeW1saW5rCj4+ICt9Owo+PiArCj4+ICsjZGVmaW5lIHBpcGVfdmdl
dCAgKCh2ZnNvcF92Z2V0X3QpIHZmc2NvcmVfdm9wX251bGxvcCkKPj4gKwo+PiArc3RhdGljIHN0
cnVjdCB2ZnNvcHMgcGlwZV92ZnNvcHMgPSB7Cj4+ICsJLnZmc192Z2V0ID0gcGlwZV92Z2V0LAo+
PiArCS52ZnNfdm5vcHMgPSAmcGlwZV92bm9wcwo+PiArfTsKPj4gKwo+PiArc3RhdGljIHVpbnQ2
NF90IHBfaW5vZGU7Cj4+ICsKPj4gKy8qCj4+ICsgKiBCb2d1cyBtb3VudCBwb2ludCB1c2VkIGJ5
IGFsbCBzb2NrZXRzCj4+ICsgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgbW91bnQgcF9tb3VudCA9IHsK
Pj4gKwkubV9vcCA9ICZwaXBlX3Zmc29wcwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGludCBwaXBl
X2ZkX2FsbG9jKHN0cnVjdCBwaXBlX2ZpbGUgKnBpcGVfZmlsZSwgaW50IGZsYWdzKQo+PiArewo+
PiArCWludCByZXQgPSAwOwo+PiArCWludCB2ZnNfZmQ7Cj4+ICsJc3RydWN0IHZmc2NvcmVfZmls
ZSAqdmZzX2ZpbGUgPSBOVUxMOwo+PiArCXN0cnVjdCBkZW50cnkgKnBfZGVudHJ5Owo+PiArCXN0
cnVjdCB2bm9kZSAqcF92bm9kZTsKPj4gKwo+PiArCS8qIFJlc2VydmUgZmlsZSBkZXNjcmlwdG9y
IG51bWJlciAqLwo+PiArCXZmc19mZCA9IHZmc2NvcmVfYWxsb2NfZmQoKTsKPj4gKwlpZiAodmZz
X2ZkIDwgMCkgewo+PiArCQlyZXQgPSAtRU5GSUxFOwo+PiArCQlnb3RvIEVSUl9FWElUOwo+PiAr
CX0KPj4gKwo+PiArCS8qIEFsbG9jYXRlIGZpbGUsIGRlbnRyeSwgYW5kIHZub2RlICovCj4+ICsJ
dmZzX2ZpbGUgPSBjYWxsb2MoMSwgc2l6ZW9mKCp2ZnNfZmlsZSkpOwo+PiArCWlmICghdmZzX2Zp
bGUpIHsKPj4gKwkJcmV0ID0gLUVOT01FTTsKPj4gKwkJZ290byBFUlJfTUFMTE9DX1ZGU19GSUxF
Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IHZmc2NvcmVfdmdldCgmcF9tb3VudCwgcF9pbm9kZSsr
LCAmcF92bm9kZSk7Cj4+ICsJVUtfQVNTRVJUKHJldCA9PSAwKTsgLyogd2Ugc2hvdWxkIG5vdCBm
aW5kIGl0IGluIGNhY2hlICovCj4+ICsKPj4gKwlpZiAoIXBfdm5vZGUpIHsKPj4gKwkJcmV0ID0g
LUVOT01FTTsKPj4gKwkJZ290byBFUlJfQUxMT0NfVk5PREU7Cj4+ICsJfQo+PiArCj4+ICsJdWtf
bXV0ZXhfdW5sb2NrKCZwX3Zub2RlLT52X2xvY2spOwo+PiArCj4+ICsJcF9kZW50cnkgPSBkZW50
cnlfYWxsb2MoTlVMTCwgcF92bm9kZSwgIi8iKTsKPj4gKwlpZiAoIXBfZGVudHJ5KSB7Cj4+ICsJ
CXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gRVJSX0FMTE9DX0RFTlRSWTsKPj4gKwl9Cj4+ICsK
Pj4gKwkvKiBGaWxsIG91dCBuZWNlc3NhcnkgZmllbGRzLiAqLwo+PiArCXZmc19maWxlLT5mZCA9
IHZmc19mZDsKPj4gKwl2ZnNfZmlsZS0+Zl9mbGFncyA9IGZsYWdzOwo+PiArCXZmc19maWxlLT5m
X2NvdW50ID0gMTsKPj4gKwl2ZnNfZmlsZS0+Zl9kYXRhID0gcGlwZV9maWxlOwo+PiArCXZmc19m
aWxlLT5mX2RlbnRyeSA9IHBfZGVudHJ5Owo+PiArCXZmc19maWxlLT5mX3Zmc19mbGFncyA9IFVL
X1ZGU0NPUkVfTk9QT1M7Cj4+ICsKPj4gKwlwX3Zub2RlLT52X2RhdGEgPSBwaXBlX2ZpbGU7Cj4+
ICsJcF92bm9kZS0+dl90eXBlID0gVkZJRk87Cj4+ICsKPj4gKwkvKiBBc3NpZ24gdGhlIGZpbGUg
ZGVzY3JpcHRvcnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmZzX2ZpbGUuICovCj4+ICsJcmV0ID0g
dmZzY29yZV9pbnN0YWxsX2ZkKHZmc19mZCwgdmZzX2ZpbGUpOwo+PiArCWlmIChyZXQpCj4+ICsJ
CWdvdG8gRVJSX1ZGU19JTlNUQUxMOwo+PiArCj4+ICsJLyogT25seSB0aGUgZGVudHJ5IHNob3Vs
ZCBob2xkIGEgcmVmZXJlbmNlOyByZWxlYXNlIG91cnMgKi8KPj4gKwl2cmVsZShwX3Zub2RlKTsK
Pj4gKwo+PiArCXJldHVybiB2ZnNfZmQ7Cj4+ICsKPj4gK0VSUl9WRlNfSU5TVEFMTDoKPj4gKwlk
cmVsZShwX2RlbnRyeSk7Cj4+ICtFUlJfQUxMT0NfREVOVFJZOgo+PiArCXZyZWxlKHBfdm5vZGUp
Owo+PiArRVJSX0FMTE9DX1ZOT0RFOgo+PiArCWZyZWUodmZzX2ZpbGUpOwo+PiArRVJSX01BTExP
Q19WRlNfRklMRToKPj4gKwl2ZnNjb3JlX3B1dF9mZCh2ZnNfZmQpOwo+PiArRVJSX0VYSVQ6Cj4+
ICsJVUtfQVNTRVJUKHJldCA8IDApOwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK2lu
dCBwaXBlKGludCBwaXBlZmRbMl0pCj4+ICt7Cj4+ICsJaW50IHJldCA9IDA7Cj4+ICsJaW50IHJf
ZmQsIHdfZmQ7Cj4+ICsJc3RydWN0IHBpcGVfZmlsZSAqcGlwZV9maWxlOwo+PiArCj4+ICsJLyog
QWxsb2NhdGUgcGlwZSBpbnRlcm5hbCBzdHJ1Y3R1cmUuICovCj4+ICsJcGlwZV9maWxlID0gcGlw
ZV9maWxlX2FsbG9jKFBJUEVfTUFYX1NJWkUsIDApOwo+PiArCWlmICghcGlwZV9maWxlKSB7Cj4+
ICsJCXJldCA9IC1FTk9NRU07Cj4+ICsJCWdvdG8gRVJSX0VYSVQ7Cj4+ICsJfQo+PiArCj4+ICsJ
cl9mZCA9IHBpcGVfZmRfYWxsb2MocGlwZV9maWxlLCBVS19GUkVBRCk7Cj4+ICsJaWYgKHJfZmQg
PCAwKQo+PiArCQlnb3RvIEVSUl9WRlNfSU5TVEFMTDsKPj4gKwo+PiArCXdfZmQgPSBwaXBlX2Zk
X2FsbG9jKHBpcGVfZmlsZSwgVUtfRldSSVRFKTsKPj4gKwlpZiAod19mZCA8IDApCj4+ICsJCWdv
dG8gRVJSX1dfRkQ7Cj4+ICsKPj4gKwkvKiBGaWxsIHBpcGVmZCBmaWVsZHMuICovCj4+ICsJcGlw
ZWZkWzBdID0gcl9mZDsKPj4gKwlwaXBlZmRbMV0gPSB3X2ZkOwo+PiArCj4+ICsJcmV0dXJuIHJl
dDsKPj4gKwo+PiArRVJSX1dfRkQ6Cj4+ICsJdmZzY29yZV9wdXRfZmQocl9mZCk7Cj4+ICtFUlJf
VkZTX0lOU1RBTEw6Cj4+ICsJcGlwZV9maWxlX2ZyZWUocGlwZV9maWxlKTsKPj4gK0VSUl9FWElU
Ogo+PiArCVVLX0FTU0VSVChyZXQgPCAwKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+IAo+IF9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdAo+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwo+IGh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwK
PiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:00:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:00:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKOk-0006zr-PO; Fri, 20 Sep 2019 15:00:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=5eEG=XP=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iBKOj-0006zf-OB
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 15:00:37 +0000
X-Inumbo-ID: 6648e3da-dbb7-11e9-a337-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6648e3da-dbb7-11e9-a337-bc764e2007e4;
 Fri, 20 Sep 2019 15:00:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 0C9641056E8;
 Fri, 20 Sep 2019 17:00:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 71vUB7yMIbAX; Fri, 20 Sep 2019 17:00:34 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id D2C451056DF
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 17:00:34 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:00:34 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 20 Sep 2019 17:00:34
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v3 1/2] lib/ukmmap: Introduce
 mmap and related functions library skeleton
Thread-Index: AQHVb47X953Z77JZrUW3VC4tEU5Egac0qS+A
Date: Fri, 20 Sep 2019 15:00:34 +0000
Message-ID: <C00AD706-B465-41E3-AF23-FCC5B3100D66@neclab.eu>
References: <20190920083819.9148-1-Charalampos.Mainas@neclab.eu>
 <20190920083819.9148-2-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190920083819.9148-2-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <B1F49164DDC15943B6A2EFF6783C482F@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 1/2] lib/ukmmap: Introduce
 mmap and related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmxhbXBvcywNCg0KSSBub3RpY2UgdGhhdCB0aGlzIG5ldyBpbnRlcm5hbCBsaWJyYXJ5
IHNldHMgYSBkZXBlbmRlbmN5IHRvIG5ld2xpYiwgYW5kIGV4dGVybmFsIGxpYnJhcnkuIFdlIGhh
dmUgYSBwb2xpY3kgdG8gaGF2ZSB0aGUgVW5pa3JhZnQgcmVwbyB0byBiZSBzZWxmLWNvbnRhaW5l
ZCwgaS5lLiwgbm8gZXh0ZXJuYWwgZGVwZW5kZW5jaWVzLiBUaGlzIG1lYW5zIGJ1aWxkaW5nIGFn
YWluc3Qgbm9ibGljLCB3aGljaCBJIGd1ZXNzIGluIHlvdXIgY2FzZSB3b3VsZCBicmVhayBiZWNh
dXNlIGl0J3MgbWlzc2luZyB0aGluZ3MgbGlrZSBzeXMvbW1hcC5oLiBIYXZpbmcgc2FpZCB0aGF0
LCB3b3VsZCB5b3UgbWluZCBhZGRpbmcgdGhpcyB0byBub2JsaWMgc28gdGhhdCB3ZSBjYW4gcmVt
b3ZlIHRoZSBkZXBlbmRlbmN5IG9uIG5ld2xpYj8NCg0KVGhhbmtzLA0KDQotLSBGZWxpcGUNCg0K
77u/T24gMjAuMDkuMTksIDEwOjM4LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBDaGFyYWxh
bXBvcyBNYWluYXMiIDxtaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBv
biBiZWhhbGYgb2YgQ2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBT
aWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNs
YWIuZXU+DQogICAgLS0tDQogICAgIGxpYi9NYWtlZmlsZS51ayAgICAgICAgICB8IDEgKw0KICAg
ICBsaWIvdWttbWFwL0NvbmZpZy51ayAgICAgfCA1ICsrKysrDQogICAgIGxpYi91a21tYXAvTWFr
ZWZpbGUudWsgICB8IDEgKw0KICAgICBsaWIvdWttbWFwL2V4cG9ydHN5bXMudWsgfCAxICsNCiAg
ICAgNCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IGxpYi91a21tYXAvQ29uZmlnLnVrDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWtt
bWFwL01ha2VmaWxlLnVrDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL2V4cG9y
dHN5bXMudWsNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnVrIGIvbGliL01h
a2VmaWxlLnVrDQogICAgaW5kZXggYTE2OTcxOTguLjJjYTk5NzNmIDEwMDY0NA0KICAgIC0tLSBh
L2xpYi9NYWtlZmlsZS51aw0KICAgICsrKyBiL2xpYi9NYWtlZmlsZS51aw0KICAgIEBAIC0zMSwz
ICszMSw0IEBAICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGli
L3VrOXApKQ0KICAgICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0Up
L2xpYi9wb3NpeC1saWJkbCkpDQogICAgICQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05G
SUdfVUtfQkFTRSkvbGliL3VrbGlicGFyYW0pKQ0KICAgICAkKGV2YWwgJChjYWxsIF9pbXBvcnRf
bGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a3RpbWUpKQ0KICAgICskKGV2YWwgJChjYWxsIF9p
bXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91a21tYXApKQ0KICAgIGRpZmYgLS1naXQg
YS9saWIvdWttbWFwL0NvbmZpZy51ayBiL2xpYi91a21tYXAvQ29uZmlnLnVrDQogICAgbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwMC4uZjc1MmRhODUNCiAgICAtLS0gL2Rl
di9udWxsDQogICAgKysrIGIvbGliL3VrbW1hcC9Db25maWcudWsNCiAgICBAQCAtMCwwICsxLDUg
QEANCiAgICArY29uZmlnIExJQlVLTU1BUA0KICAgICsJYm9vbCAidWttbWFwOiBtbWFwIHN5c3Rl
bSBjYWxsIg0KICAgICsJZGVmYXVsdCBuDQogICAgKwlzZWxlY3QgTElCVUtBTExPQw0KICAgICsJ
c2VsZWN0IExJQk5FV0xJQkMNCiAgICBkaWZmIC0tZ2l0IGEvbGliL3VrbW1hcC9NYWtlZmlsZS51
ayBiL2xpYi91a21tYXAvTWFrZWZpbGUudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAg
IGluZGV4IDAwMDAwMDAwLi44YWMzYWIzYw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9s
aWIvdWttbWFwL01ha2VmaWxlLnVrDQogICAgQEAgLTAsMCArMSBAQA0KICAgICskKGV2YWwgJChj
YWxsIGFkZGxpYl9zLGxpYnVrbW1hcCwkKENPTkZJR19MSUJVS01NQVApKSkNCiAgICBkaWZmIC0t
Z2l0IGEvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrIGIvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVr
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwMC4uNjIxZTk0ZjAN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrDQog
ICAgQEAgLTAsMCArMSBAQA0KICAgICtub25lDQogICAgLS0gDQogICAgMi4xNy4xDQogICAgDQog
ICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18N
CiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:17:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:17:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKec-0000BH-1V; Fri, 20 Sep 2019 15:17:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBKea-0000B0-Po
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 15:17:00 +0000
X-Inumbo-ID: b071a27e-dbb9-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b071a27e-dbb9-11e9-b76c-bc764e2007e4;
 Fri, 20 Sep 2019 15:16:59 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 28725F2002;
 Fri, 20 Sep 2019 17:16:58 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id wBSvMC5AQziQ; Fri, 20 Sep 2019 17:16:58 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id F0478F2001
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 17:16:55 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:16:55 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 17:16:42 +0200
Message-ID: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 0/4] Introduce inittab in Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgdGFibGUgb2YgaW5pdCBmdW5jdGlvbiB0byBz
ZXR1cCB0aGUgZGlmZmVyZW50IApsaWJyYXJ5L3BsYXRmb3JtcyBpbiBVbmlrcmFmdC4gV2UgaGF2
ZSBjbGFzc2lmaWVkIHRoZSBib290IGludG8gdGhlIGZvbGxvd2luZwpzdGFnZXM6Ci0gRWFybHkg
aW5pdGlhbGl6YXRpb24KLSBQbGF0Zm9ybSBpbml0aWFsaXphdGlvbgotIExpYnJhcnkgaW5pdGlh
bGl6YXRpb24KLSBSb290ZnMgaW5pdGlhbGl6YXRpb24KLSBTeXN0ZW0gY29uZmlndXJhdGlvbiBp
bml0aWFsaXphdGlvbgotIExhdGUgaW5pdGlhbGl6YXRpb24KCldpdGhpbiB0aGUgZWFjaCBzdGFn
ZSB0aGUgZGV2ZWxvcGVyIGNhbiBwcmlvcml0aXplIHRoZSBpbml0IGZ1bmN0aW9uIHRvIG1haW50
YWluCmEgY2VydGFpbiBvcmRlciBvZiBleGVjdXRpb24gYmV0d2VlbiB0aGUgZnVuY3Rpb24uCgpU
aGUgb3JkZXIgb2YgYm9vdCBpbiBVbmlrcmFmdCB3b3VsZCBiZQoxKSBTeXN0ZW0gY29uc3RydWN0
b3IgLSBSZWdpc3RlciAKMikgaW5pdCB0YWJsZQozKSBVbmlrcmFmdCBhcHBsaWNhdGlvbiBiYW5u
ZXIuCjQpIEFwcGxpY2F0aW9uIGNvbnN0cnVjdG9yIHRhYmxlLgoKU2hhcmFuIFNhbnRoYW5hbSAo
Myk6CiAgaW5jbHVkZS91azogSW50cm9kdWNlIGluaXQgdGFibGUKICBwbGF0Lyo6IFN1cHBvcnQg
LnVrX2luaXR0YWJfIHNlY3Rpb24KICBsaWIvdWtib290OiBJdGVyYXRlIHRocm91Z2ggdGhlIGlu
aXR0YWIKClNpbW9uIEt1ZW56ZXIgKDEpOgogIGxpYi91a2Jvb3Q6IEFwcGxpY2F0aW9uIGNvbnN0
cnVjdG9ycyByaWdodCBiZWZvcmUgY2FsbGluZyBhcHBsaWNhdGlvbgoKIGluY2x1ZGUvdWsvaW5p
dC5oICAgICAgICAgICAgICAgIHwgNzEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwogbGliL3VrYm9vdC9Db25maWcudWsgICAgICAgICAgICAgfCAgMSArCiBsaWIvdWti
b290L2Jvb3QuYyAgICAgICAgICAgICAgICB8IDY3ICsrKysrKysrKysrKysrKysrKysrKysrKysr
LS0tLS0tLS0tLS0KIHBsYXQvY29tbW9uL2luY2x1ZGUvY29tbW9uLmxkcy5oIHwgIDggKysrKysK
IHBsYXQva3ZtL2FybS9saW5rNjQubGRzLlMgICAgICAgIHwgIDIgKysKIHBsYXQva3ZtL3g4Ni9s
aW5rNjQubGRzLlMgICAgICAgIHwgIDIgKysKIHBsYXQvbGludXh1L2FybS9saW5rLmxkcy5TICAg
ICAgIHwgIDIgKysKIHBsYXQvbGludXh1L3g4Ni9saW5rNjQubGRzLlMgICAgIHwgIDIgKysKIHBs
YXQveGVuL2FybS9saW5rMzIubGRzLlMgICAgICAgIHwgIDIgKysKIHBsYXQveGVuL3g4Ni9saW5r
NjQubGRzLlMgICAgICAgIHwgIDIgKysKIDEwIGZpbGVzIGNoYW5nZWQsIDE0MCBpbnNlcnRpb25z
KCspLCAxOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VrL2luaXQu
aAoKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:17:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:17:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKef-0000By-3A; Fri, 20 Sep 2019 15:17:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBKee-0000Bj-0F
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 15:17:04 +0000
X-Inumbo-ID: b181b1b9-dbb9-11e9-9593-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b181b1b9-dbb9-11e9-9593-12813bfff9fa;
 Fri, 20 Sep 2019 15:17:01 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 30C00F2003;
 Fri, 20 Sep 2019 17:17:00 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Lx9X425Q-_z0; Fri, 20 Sep 2019 17:17:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0754AF2001
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 17:16:58 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:16:55 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 17:16:43 +0200
Message-ID: <1568992606-11440-2-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
References: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 1/4] lib/ukboot: Application
 constructors right before calling application
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+CgpwcmVpbml0IGFu
ZCBpbml0IHRhYmxlcyBhcmUgcGFydCBvZiBwb3J0ZWQgbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlv
bnMuClNpbmNlIHRoZXkgYXJlIG9yaWdpbmFsbHkgcnVuIGluIHVzZXIgc3BhY2Ugb24gTGludXgg
b3IgQlNELCB0aGV5CmV4cGVjdCBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgbGF5ZXJzLiBUaGUg
Y29uc3RydWN0b3IgZnVuY3Rpb25zCmxpc3RlZCBpbiB0aG9zZSB0YWJsZXMgY291bGQgY3JlYXRl
IHRocmVhZHMsIGFsbG9jYXRlIG1lbW9yeSwgb3IKaW50ZXJhY3Qgd2l0aCB0aGUgVkZTLCBldGMu
ClRoaXMgcGF0Y2ggbW92ZXMgY2FsbGluZyB0aG9zZSBjb25zdHJ1Y3RvcnMgYXQgdGhlIGxhdGVz
dCBwb3NzaWJsZSBwb2ludC4KClNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1
ZW56ZXJAbmVjbGFiLmV1PgotLS0KIGxpYi91a2Jvb3QvYm9vdC5jIHwgNTIgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDMwIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi91a2Jv
b3QvYm9vdC5jIGIvbGliL3VrYm9vdC9ib290LmMKaW5kZXggM2I4ZDY0MS4uN2ZiMDkwOCAxMDA2
NDQKLS0tIGEvbGliL3VrYm9vdC9ib290LmMKKysrIGIvbGliL3VrYm9vdC9ib290LmMKQEAgLTgy
LDI4ICs4Miw2IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJnKQogCWlu
dCByZXQ7CiAJc3RydWN0IHRocmVhZF9tYWluX2FyZyAqdG1hID0gYXJnOwogCi0JdWtfcHJfaW5m
bygiUHJlLWluaXQgdGFibGUgYXQgJXAgLSAlcFxuIiwKLQkJICAgX19wcmVpbml0X2FycmF5X3N0
YXJ0LCAmX19wcmVpbml0X2FycmF5X2VuZCk7Ci0JdWtfY3Rvcl9mb3JlYWNoKF9fcHJlaW5pdF9h
cnJheV9zdGFydCwgX19wcmVpbml0X2FycmF5X2VuZCwgaSkgewotCQlpZiAoX19wcmVpbml0X2Fy
cmF5X3N0YXJ0W2ldKSB7Ci0JCQl1a19wcl9kZWJ1ZygiQ2FsbCBwcmUtaW5pdCBjb25zdHJ1Y3Rv
ciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5cbiIsCi0JCQkJICAgIGksICZfX3ByZWluaXRfYXJy
YXlfc3RhcnRbaV0sCi0JCQkJICAgIF9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSk7Ci0JCQlfX3By
ZWluaXRfYXJyYXlfc3RhcnRbaV0oKTsKLQkJfQotCX0KLQotCXVrX3ByX2luZm8oIkNvbnN0cnVj
dG9yIHRhYmxlIGF0ICVwIC0gJXBcbiIsCi0JCQlfX2luaXRfYXJyYXlfc3RhcnQsICZfX2luaXRf
YXJyYXlfZW5kKTsKLQl1a19jdG9yX2ZvcmVhY2goX19pbml0X2FycmF5X3N0YXJ0LCBfX2luaXRf
YXJyYXlfZW5kLCBpKSB7Ci0JCWlmIChfX2luaXRfYXJyYXlfc3RhcnRbaV0pIHsKLQkJCXVrX3By
X2RlYnVnKCJDYWxsIGNvbnN0cnVjdG9yIChlbnRyeSAlZCAoJXApOiAlcCgpKS4uLlxuIiwKLQkJ
CQkJaSwgJl9faW5pdF9hcnJheV9zdGFydFtpXSwKLQkJCQkJX19pbml0X2FycmF5X3N0YXJ0W2ld
KTsKLQkJCV9faW5pdF9hcnJheV9zdGFydFtpXSgpOwotCQl9Ci0JfQotCiAjaWZkZWYgQ09ORklH
X0xJQlVLQlVTCiAJdWtfcHJfaW5mbygiSW5pdGlhbGl6ZSBidXMgaGFuZGxlcnMuLi5cbiIpOwog
CXVrX2J1c19pbml0X2FsbCh1a19hbGxvY19nZXRfZGVmYXVsdCgpKTsKQEAgLTEyOSw2ICsxMDcs
MzYgQEAgc3RhdGljIHZvaWQgbWFpbl90aHJlYWRfZnVuYyh2b2lkICphcmcpCiAJcHJpbnRmKCIl
MzVzXG4iLAogCSAgICAgICBTVFJJTkdJRlkoVUtfQ09ERU5BTUUpICIgIiBTVFJJTkdJRlkoVUtf
RlVMTFZFUlNJT04pKTsKICNlbmRpZgorCS8qCisJICogQXBwbGljYXRpb24KKwkgKgorCSAqIFdl
IGFyZSBjYWxsaW5nIHRoZSBhcHBsaWNhdGlvbiBjb25zdHJ1Y3RvcnMgcmlnaHQgYmVmb3JlIGNh
bGxpbmcKKwkgKiB0aGUgYXBwbGljYXRpb24ncyBtYWluKCkuIEFsbCBvZiBvdXIgVW5pa3JhZnQg
c3lzdGVtcywgVkZTLAorCSAqIG5ldHdvcmtpbmcgc3RhY2sgaXMgaW5pdGlhbGl6ZWQgYXQgdGhp
cyBwb2ludC4gVGhpcyB3YXkgd2UgY2xvc2VseQorCSAqIG1pbWljIHdoYXQgYSByZWd1bGFyIHVz
ZXIgYXBwbGljYXRpb24gKGUuZy4sIEJTRCwgTGludXgpIHdvdWxkIGV4cGVjdAorCSAqIGZyb20g
aXRzIE9TIGJlaW5nIGluaXRpYWxpemVkLgorCSAqLworCXVrX3ByX2luZm8oIlByZS1pbml0IHRh
YmxlIGF0ICVwIC0gJXBcbiIsCisJCSAgIF9fcHJlaW5pdF9hcnJheV9zdGFydCwgJl9fcHJlaW5p
dF9hcnJheV9lbmQpOworCXVrX2N0b3JfZm9yZWFjaChfX3ByZWluaXRfYXJyYXlfc3RhcnQsIF9f
cHJlaW5pdF9hcnJheV9lbmQsIGkpIHsKKwkJaWYgKF9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSkg
eworCQkJdWtfcHJfZGVidWcoIkNhbGwgcHJlLWluaXQgY29uc3RydWN0b3IgKGVudHJ5ICVkICgl
cCk6ICVwKCkpLi4uXG4iLAorCQkJCSAgICBpLCAmX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldLAor
CQkJCSAgICBfX3ByZWluaXRfYXJyYXlfc3RhcnRbaV0pOworCQkJX19wcmVpbml0X2FycmF5X3N0
YXJ0W2ldKCk7CisJCX0KKwl9CisKKwl1a19wcl9pbmZvKCJDb25zdHJ1Y3RvciB0YWJsZSBhdCAl
cCAtICVwXG4iLAorCQkJX19pbml0X2FycmF5X3N0YXJ0LCAmX19pbml0X2FycmF5X2VuZCk7CisJ
dWtfY3Rvcl9mb3JlYWNoKF9faW5pdF9hcnJheV9zdGFydCwgX19pbml0X2FycmF5X2VuZCwgaSkg
eworCQlpZiAoX19pbml0X2FycmF5X3N0YXJ0W2ldKSB7CisJCQl1a19wcl9kZWJ1ZygiQ2FsbCBj
b25zdHJ1Y3RvciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5cbiIsCisJCQkJCWksICZfX2luaXRf
YXJyYXlfc3RhcnRbaV0sCisJCQkJCV9faW5pdF9hcnJheV9zdGFydFtpXSk7CisJCQlfX2luaXRf
YXJyYXlfc3RhcnRbaV0oKTsKKwkJfQorCX0KIAogCXVrX3ByX2luZm8oIkNhbGxpbmcgbWFpbigl
ZCwgWyIsIHRtYS0+YXJnYyk7CiAJZm9yIChpID0gMDsgaSA8IHRtYS0+YXJnYzsgKytpKSB7Ci0t
IAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:17:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:17:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKeh-0000Cn-4b; Fri, 20 Sep 2019 15:17:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBKef-0000CL-QF
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 15:17:05 +0000
X-Inumbo-ID: b2a7dcac-dbb9-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b2a7dcac-dbb9-11e9-978d-bc764e2007e4;
 Fri, 20 Sep 2019 15:17:03 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 3C282F2002;
 Fri, 20 Sep 2019 17:17:02 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 8HuahEDr_i2p; Fri, 20 Sep 2019 17:17:02 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 12D70F2001
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 17:17:00 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:16:56 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 17:16:44 +0200
Message-ID: <1568992606-11440-3-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
References: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 2/4] include/uk: Introduce init table
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGludGVyZmFjZSBmb3IgdGhlIGluaXR0YWIuIFRoZSBw
YXRjaCBwcm92aWRlcwppbXBsZW1lbnRhdGlvbiB0byBncm91cCB0aGUgaW5pdCBmdW5jdGlvbiBp
bnRvIHRoZSByZXNwZWN0aXZlIGxpbmtlcgpzZWN0aW9uLgoKU2lnbmVkLW9mZi1ieTogU2hhcmFu
IFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogaW5jbHVkZS91ay9p
bml0LmggICAgfCA2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiBsaWIvdWtib290L0NvbmZpZy51ayB8ICAxICsKIDIgZmlsZXMgY2hhbmdlZCwg
NjYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWsvaW5pdC5oCgpk
aWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9pbml0LmggYi9pbmNsdWRlL3VrL2luaXQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWNiNmVmCi0tLSAvZGV2L251bGwKKysrIGIv
aW5jbHVkZS91ay9pbml0LmgKQEAgLTAsMCArMSw2NSBAQAorI2lmbmRlZiBfVUtfSU5JVF9ICisj
ZGVmaW5lIF9VS19JTklUX0gKKworI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVr
L2Vzc2VudGlhbHMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRp
ZgorCit0eXBlZGVmIGludCAoKnVrX2luaXRfdCkodm9pZCk7CisKKyNkZWZpbmUgSU5JVFRBQl9T
VFJfVkFSKGxpYm5hbWUsIGZuLCBiYXNlLCBwcmlvKSBsaWJuYW1lICMjIGZuICMjIGJhc2UgIyMg
cHJpbworI2RlZmluZSBJTklUVEFCX1NFQ1RJT04oYmFzZSwgcHJpbykgIC51a19pbml0dGFiXyAj
IyBiYXNlICMjIHByaW8KKyNkZWZpbmUgSU5JVFRBQl9TRUNUSU9OX05BTUUobmFtZSkgU1RSSU5H
SUZZKG5hbWUpCisKKyNkZWZpbmUgX19pbml0dGFiKGxpYm5hbWUsIGZuLCBiYXNlLCBwcmlvKQkJ
CQlcCisJc3RhdGljICBjb25zdCBfX3VzZWQgX19zZWN0aW9uKElOSVRUQUJfU0VDVElPTl9OQU1F
KAkJXAorCQkJCQlJTklUVEFCX1NFQ1RJT04oYmFzZSwgcHJpbykpCVwKKwkJCQkgICAgICApCQkJ
CQlcCisJCXVrX2luaXRfdCBJTklUVEFCX1NUUl9WQVIobGlibmFtZSwgZm4sIGJhc2UsIHByaW8p
ID0gZm4KKworLyoqCisgKiBEZWZpbmUgYSBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLiBBdCB0aGlz
IHBvaW50IGluIHRpbWUgc29tZSBwbGF0Zm9ybQorICogY29tcG9uZW50IG1heSBub3QgYmUgaW5p
dGlhbGl6ZWQsIHNvIGl0IHdpc2UgdG8gaW5pdGlhbGl6ZXMgdGhvc2UgY29tcG9uZW50CisgKiB0
byBpbml0aWFsaXplZC4KKyAqLworI2RlZmluZSB1a19lYXJseV9pbml0Y2FsbF9wcmlvKGZuLCBw
cmlvKSAgX19pbml0dGFiKExJQk5BTUUsIGZuLCAxLCBwcmlvKQorLyoqCisgKiBEZWZpbmUgYSBz
dGFnZSBmb3IgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uIFBsYXRmb3JtIGF0IHRoaXMgcG9pbnQg
cmVhZAorICogYWxsIHRoZSBkZXZpY2UgYW5kIGRldmljZSBhcmUgaW5pdGlhbGl6ZWQuCisgKi8K
KyNkZWZpbmUgdWtfcGxhdF9pbml0Y2FsbF9wcmlvKGZuLCBwcmlvKSAgX19pbml0dGFiKExJQk5B
TUUsIGZuLCAyLCBwcmlvKQorLyoqCisgKiBEZWZpbmUgYSBzdGFnZSBmb3IgcGVyZm9ybWluZyBs
aWJyYXJ5IGluaXRpYWxpemF0aW9uLiBUaGlzIGxpYnJhcnkKKyAqIGluaXRpYWxpemF0aW9uIGlz
IHBlcmZvcm1lZCBhZnRlciB0aGUgcGxhdGZvcm0gaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4K
KyAqLworI2RlZmluZSB1a19saWJfaW5pdGNhbGxfcHJpbyhmbiwgcHJpbykJX19pbml0dGFiKExJ
Qk5BTUUsIGZuLCAzLCBwcmlvKQorLyoqCisgKiBEZWZpbmUgYSBzdGFnZSBmb3IgZmlsZXN5c3Rl
bSBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSB1a19yb290ZnNfaW5pdGNhbGxfcHJpbyhm
biwgcHJpbykgX19pbml0dGFiKExJQk5BTUUsIGZuLCA0LCBwcmlvKQorLyoqCisgKiBEZWZpbmUg
YSBzdGFnZSBmb3IgZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKi8KKyNkZWZpbmUgdWtfc3lzX2lu
aXRjYWxsX3ByaW8oZm4sIHByaW8pIF9faW5pdHRhYihMSUJOQU1FLCBmbiwgNSwgcHJpbykKKy8q
KgorICogRGVmaW5lIGEgc3RhZ2UgZm9yIGFwcGxpY2F0aW9uIHByZS1pbml0aWFsaXphdGlvbgor
ICovCisjZGVmaW5lIHVrX2xhdGVfaW5pdGNhbGxfcHJpbyhmbiwgcHJpbykgIF9faW5pdHRhYihM
SUJOQU1FLCBmbiwgNiwgcHJpbykKKworLyoqCisgKiBTaW1pbGFyIGludGVyZmFjZSB3aXRob3V0
IHByaW9yaXR5LgorICovCisjZGVmaW5lIHVrX2Vhcmx5X2luaXRjYWxsKGZuKSAgICAgdWtfZWFy
bHlfaW5pdGNhbGxfcHJpbyhmbiwgOSkKKyNkZWZpbmUgdWtfcGxhdF9pbml0Y2FsbChmbikgICAg
ICB1a19wbGF0X2luaXRjYWxsX3ByaW8oZm4sIDkpCisjZGVmaW5lIHVrX2xpYl9pbml0Y2FsbChm
bikgICAgICAgdWtfbGliX2luaXRjYWxsX3ByaW8oZm4sIDkpCisjZGVmaW5lIHVrX3Jvb3Rmc19p
bml0Y2FsbChmbikgICAgdWtfcm9vdGZzX2luaXRjYWxsX3ByaW8oZm4sIDkpCisjZGVmaW5lIHVr
X3N5c19pbml0Y2FsbChmbikgICAgICAgdWtfc3lzX2luaXRjYWxsX3ByaW8oZm4sIDkpCisjZGVm
aW5lIHVrX2xhdGVfaW5pdGNhbGwoZm4pICAgICAgdWtfbGF0ZV9pbml0Y2FsbF9wcmlvKGZuLCA5
KQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLworI2Vu
ZGlmIC8qIF9VS19JTklUX0ggKi8KZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvQ29uZmlnLnVrIGIv
bGliL3VrYm9vdC9Db25maWcudWsKaW5kZXggODQxYTg3Ni4uNGViZDY1MCAxMDA2NDQKLS0tIGEv
bGliL3VrYm9vdC9Db25maWcudWsKKysrIGIvbGliL3VrYm9vdC9Db25maWcudWsKQEAgLTIxLDQg
KzIxLDUgQEAgaWYgTElCVUtCT09UCiAJYm9vbCAiSW5pdGlhbGl6ZSB1a2FsbG9jYmJ1ZGR5IGFz
IGFsbG9jYXRvciIKIAlkZWZhdWx0IHkKIAlzZWxlY3QgTElCVUtBTExPQ0JCVUREWQorCiBlbmRp
ZgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:17:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:17:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKem-0000E2-6Z; Fri, 20 Sep 2019 15:17:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBKek-0000Dk-RA
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 15:17:10 +0000
X-Inumbo-ID: b3e921d4-dbb9-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b3e921d4-dbb9-11e9-978d-bc764e2007e4;
 Fri, 20 Sep 2019 15:17:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5423EF2002;
 Fri, 20 Sep 2019 17:17:04 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 4zOAAIGK5uDp; Fri, 20 Sep 2019 17:17:04 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 21489F2001
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 17:17:02 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:16:56 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 17:16:45 +0200
Message-ID: <1568992606-11440-4-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
References: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 3/4] plat/*: Support .uk_inittab_
 section
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBsYXRmb3JtIGxpbmtlciBzY3JpcHQgY3JlYXRlIGEgc2luZ2xlIHNlY3Rpb24gdGhhdCBh
Y2N1bXVsYXRlIGFsbAp0aGUgaW5pdCBmdW5jdGlvbiBiZWxvbmdpbmcgdG8gYSBzcGVjaWZpYyBz
ZWN0aW9uLgoKU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5h
bUBuZWNsYWIuZXU+Ci0tLQogcGxhdC9jb21tb24vaW5jbHVkZS9jb21tb24ubGRzLmggfCA4ICsr
KysrKysrCiBwbGF0L2t2bS9hcm0vbGluazY0Lmxkcy5TICAgICAgICB8IDIgKysKIHBsYXQva3Zt
L3g4Ni9saW5rNjQubGRzLlMgICAgICAgIHwgMiArKwogcGxhdC9saW51eHUvYXJtL2xpbmsubGRz
LlMgICAgICAgfCAyICsrCiBwbGF0L2xpbnV4dS94ODYvbGluazY0Lmxkcy5TICAgICB8IDIgKysK
IHBsYXQveGVuL2FybS9saW5rMzIubGRzLlMgICAgICAgIHwgMiArKwogcGxhdC94ZW4veDg2L2xp
bms2NC5sZHMuUyAgICAgICAgfCAyICsrCiA3IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMo
KykKCmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2NvbW1vbi5sZHMuaCBiL3BsYXQv
Y29tbW9uL2luY2x1ZGUvY29tbW9uLmxkcy5oCmluZGV4IGIwNmRkOTYuLjk1OGJlMWUgMTAwNjQ0
Ci0tLSBhL3BsYXQvY29tbW9uL2luY2x1ZGUvY29tbW9uLmxkcy5oCisrKyBiL3BsYXQvY29tbW9u
L2luY2x1ZGUvY29tbW9uLmxkcy5oCkBAIC05NCw2ICs5NCwxNCBAQAogCX0JCQkJCQkJCVwKIAl1
a19jdG9ydGFiX2VuZCA9IC47CiAKKyNkZWZpbmUgSU5JVFRBQl9TRUNUSU9OCQkJCQkJCVwKKwl1
a19pbml0dGFiX3N0YXJ0ID0gLjsJCQkJCQlcCisJLnVrX2luaXR0YWIgOgkJCQkJCQlcCisJewkJ
CQkJCQkJXAorCQlLRUVQKCooU09SVF9CWV9OQU1FKC51a19pbml0dGFiX1sxLTZdWzAtOV0pKSkJ
CVwKKwl9CQkJCQkJCQlcCisJdWtfaW5pdHRhYl9lbmQgPSAuOworCiAjZGVmaW5lIFRMU19TRUNU
SU9OUwkJCQkJCQlcCiAJLiA9IEFMSUdOKDB4OCk7CQkJCQkJCVwKIAlfdGxzX3N0YXJ0ID0gLjsJ
CQkJCQkJXApkaWZmIC0tZ2l0IGEvcGxhdC9rdm0vYXJtL2xpbms2NC5sZHMuUyBiL3BsYXQva3Zt
L2FybS9saW5rNjQubGRzLlMKaW5kZXggYjA3YTg5Ny4uOGZlM2FkOCAxMDA2NDQKLS0tIGEvcGxh
dC9rdm0vYXJtL2xpbms2NC5sZHMuUworKysgYi9wbGF0L2t2bS9hcm0vbGluazY0Lmxkcy5TCkBA
IC03Myw2ICs3Myw4IEBAIFNFQ1RJT05TIHsKIAogCUNUT1JUQUJfU0VDVElPTgogCisJSU5JVFRB
Ql9TRUNUSU9OCisKIAkvKiBSZWFkLW9ubHkgZGF0YSAqLwogCS4gPSBBTElHTihfX1BBR0VfU0la
RSk7CiAJX3JvZGF0YSA9IC47CmRpZmYgLS1naXQgYS9wbGF0L2t2bS94ODYvbGluazY0Lmxkcy5T
IGIvcGxhdC9rdm0veDg2L2xpbms2NC5sZHMuUwppbmRleCA2MTAzZmMyLi4xZjY2MTA0IDEwMDY0
NAotLS0gYS9wbGF0L2t2bS94ODYvbGluazY0Lmxkcy5TCisrKyBiL3BsYXQva3ZtL3g4Ni9saW5r
NjQubGRzLlMKQEAgLTQ4LDYgKzQ4LDggQEAgU0VDVElPTlMKIAogCUNUT1JUQUJfU0VDVElPTgog
CisJSU5JVFRBQl9TRUNUSU9OCisKIAkvKiBSZWFkLW9ubHkgZGF0YSAqLwogCS4gPSBBTElHTihf
X1BBR0VfU0laRSk7CiAJX3JvZGF0YSA9IC47CmRpZmYgLS1naXQgYS9wbGF0L2xpbnV4dS9hcm0v
bGluay5sZHMuUyBiL3BsYXQvbGludXh1L2FybS9saW5rLmxkcy5TCmluZGV4IDVjOWE0ZjMuLmYy
MGNjN2MgMTAwNjQ0Ci0tLSBhL3BsYXQvbGludXh1L2FybS9saW5rLmxkcy5TCisrKyBiL3BsYXQv
bGludXh1L2FybS9saW5rLmxkcy5TCkBAIC0zLDUgKzMsNyBAQAogU0VDVElPTlMKIHsKIAlDVE9S
VEFCX1NFQ1RJT04KKworCUlOSVRUQUJfU0VDVElPTgogfQogSU5TRVJUIEJFRk9SRSAucm9kYXRh
CmRpZmYgLS1naXQgYS9wbGF0L2xpbnV4dS94ODYvbGluazY0Lmxkcy5TIGIvcGxhdC9saW51eHUv
eDg2L2xpbms2NC5sZHMuUwppbmRleCBhNmE1NmFkLi44MDEyMDA4IDEwMDY0NAotLS0gYS9wbGF0
L2xpbnV4dS94ODYvbGluazY0Lmxkcy5TCisrKyBiL3BsYXQvbGludXh1L3g4Ni9saW5rNjQubGRz
LlMKQEAgLTUsNiArNSw4IEBAIFNFQ1RJT05TCiAJRVhDRVBUSU9OX1NFQ1RJT05TCiAKIAlDVE9S
VEFCX1NFQ1RJT04KKworCUlOSVRUQUJfU0VDVElPTgogfQogSU5TRVJUIEJFRk9SRSAucm9kYXRh
CiAKZGlmZiAtLWdpdCBhL3BsYXQveGVuL2FybS9saW5rMzIubGRzLlMgYi9wbGF0L3hlbi9hcm0v
bGluazMyLmxkcy5TCmluZGV4IDM3MzdkMWMuLjMwYzI5YWIgMTAwNjQ0Ci0tLSBhL3BsYXQveGVu
L2FybS9saW5rMzIubGRzLlMKKysrIGIvcGxhdC94ZW4vYXJtL2xpbmszMi5sZHMuUwpAQCAtNTMs
NiArNTMsOCBAQCBTRUNUSU9OUwogCiAJQ1RPUlRBQl9TRUNUSU9OCiAKKwlJTklUVEFCX1NFQ1RJ
T04KKwogCS8qIFJlYWQtb25seSBkYXRhICovCiAJX3JvZGF0YSA9IC47CiAJLnJvZGF0YSA6CmRp
ZmYgLS1naXQgYS9wbGF0L3hlbi94ODYvbGluazY0Lmxkcy5TIGIvcGxhdC94ZW4veDg2L2xpbms2
NC5sZHMuUwppbmRleCBmN2U1M2ZlLi4zZTE2YjNiIDEwMDY0NAotLS0gYS9wbGF0L3hlbi94ODYv
bGluazY0Lmxkcy5TCisrKyBiL3BsYXQveGVuL3g4Ni9saW5rNjQubGRzLlMKQEAgLTQ2LDYgKzQ2
LDggQEAgU0VDVElPTlMKIAogCUNUT1JUQUJfU0VDVElPTgogCisJSU5JVFRBQl9TRUNUSU9OCisK
IAlfcm9kYXRhID0gLjsKIAkucm9kYXRhIDogewogCQkqKC5yb2RhdGEpCi0tIAoyLjcuNAoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:17:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:17:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKer-0000F0-8D; Fri, 20 Sep 2019 15:17:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBKep-0000En-Qx
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 15:17:15 +0000
X-Inumbo-ID: b51cb502-dbb9-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id b51cb502-dbb9-11e9-b299-bc764e2007e4;
 Fri, 20 Sep 2019 15:17:07 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 563FBF2002;
 Fri, 20 Sep 2019 17:17:06 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id G8jWjiLCmuko; Fri, 20 Sep 2019 17:17:06 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3024AF2001
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 17:17:04 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:16:56 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 17:16:46 +0200
Message-ID: <1568992606-11440-5-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
References: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 4/4] lib/ukboot: Iterate through the
 inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN1cHBvcnQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBpbml0dGFiIGFuZCBjYWxsIHRoZSBp
bml0IGZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5z
YW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIGluY2x1ZGUvdWsvaW5pdC5oIHwgIDYgKysrKysrCiBs
aWIvdWtib290L2Jvb3QuYyB8IDIxICsrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFu
Z2VkLCAyNyBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9pbml0LmggYi9p
bmNsdWRlL3VrL2luaXQuaAppbmRleCA5MWNiNmVmLi40NjZjOTU2IDEwMDY0NAotLS0gYS9pbmNs
dWRlL3VrL2luaXQuaAorKysgYi9pbmNsdWRlL3VrL2luaXQuaApAQCAtNTksNiArNTksMTIgQEAg
dHlwZWRlZiBpbnQgKCp1a19pbml0X3QpKHZvaWQpOwogI2RlZmluZSB1a19zeXNfaW5pdGNhbGwo
Zm4pICAgICAgIHVrX3N5c19pbml0Y2FsbF9wcmlvKGZuLCA5KQogI2RlZmluZSB1a19sYXRlX2lu
aXRjYWxsKGZuKSAgICAgIHVrX2xhdGVfaW5pdGNhbGxfcHJpbyhmbiwgOSkKIAorZXh0ZXJuIGNv
bnN0IHVrX2luaXRfdCB1a19pbml0dGFiX3N0YXJ0W107CitleHRlcm4gY29uc3QgdWtfaW5pdF90
IHVrX2luaXR0YWJfZW5kOworCisjZGVmaW5lIHVrX2luaXR0YWJfZm9yZWFjaChpbml0X3N0YXJ0
LCBpbml0X2VuZCwgaXRyKQkJXAorCWZvciAoaXRyID0gREVDT05TVCh1a19pbml0X3QqLCBpbml0
X3N0YXJ0KTsgaXRyIDwgJmluaXRfZW5kOyBpdHIrKykKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9
CiAjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KZGlmZiAtLWdpdCBhL2xpYi91a2Jvb3QvYm9vdC5j
IGIvbGliL3VrYm9vdC9ib290LmMKaW5kZXggN2ZiMDkwOC4uNzA0NGQxYiAxMDA2NDQKLS0tIGEv
bGliL3VrYm9vdC9ib290LmMKKysrIGIvbGliL3VrYm9vdC9ib290LmMKQEAgLTU2LDYgKzU2LDcg
QEAKICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+CiAjaW5jbHVkZSA8dWsvcHJpbnQuaD4KICNp
bmNsdWRlIDx1ay9jdG9ycy5oPgorI2luY2x1ZGUgPHVrL2luaXQuaD4KICNpbmNsdWRlIDx1ay9h
cmdwYXJzZS5oPgogI2lmIENPTkZJR19MSUJVS0JVUwogI2luY2x1ZGUgPHVrL2J1cy5oPgpAQCAt
ODEsNiArODIsMjAgQEAgc3RhdGljIHZvaWQgbWFpbl90aHJlYWRfZnVuYyh2b2lkICphcmcpCiAJ
aW50IGk7CiAJaW50IHJldDsKIAlzdHJ1Y3QgdGhyZWFkX21haW5fYXJnICp0bWEgPSBhcmc7CisJ
dWtfaW5pdF90ICppdHI7CisKKwkvKioKKwkgKiBSdW4gaW5pdCB0YWJsZQorCSAqLworCXVrX3By
X2luZm8oIkluaXQgVGFibGUgQCAlcCAtICVwXG4iLCAmdWtfaW5pdHRhYl9zdGFydFswXSwKKwkJ
ICAgJnVrX2luaXR0YWJfZW5kKTsKKwl1a19pbml0dGFiX2ZvcmVhY2godWtfaW5pdHRhYl9zdGFy
dCwgdWtfaW5pdHRhYl9lbmQsIGl0cikgeworCQlyZXQgPSAoKml0cikoKTsKKwkJaWYgKHJldCA8
IDApIHsKKwkJCXJldCA9IFVLUExBVF9DUkFTSDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0KIAog
I2lmZGVmIENPTkZJR19MSUJVS0JVUwogCXVrX3ByX2luZm8oIkluaXRpYWxpemUgYnVzIGhhbmRs
ZXJzLi4uXG4iKTsKQEAgLTE0OSw2ICsxNjQsOCBAQCBzdGF0aWMgdm9pZCBtYWluX3RocmVhZF9m
dW5jKHZvaWQgKmFyZykKIAlyZXQgPSBtYWluKHRtYS0+YXJnYywgdG1hLT5hcmd2KTsKIAl1a19w
cl9pbmZvKCJtYWluIHJldHVybmVkICVkLCBoYWx0aW5nIHN5c3RlbVxuIiwgcmV0KTsKIAlyZXQg
PSAocmV0ICE9IDApID8gVUtQTEFUX0NSQVNIIDogVUtQTEFUX0hBTFQ7CisKK2V4aXQ6CiAJdWtw
bGF0X3Rlcm1pbmF0ZShyZXQpOyAvKiBkb2VzIG5vdCByZXR1cm4gKi8KIH0KIApAQCAtMjM5LDYg
KzI1NiwxMCBAQCB2b2lkIHVrcGxhdF9lbnRyeShpbnQgYXJnYywgY2hhciAqYXJndltdKQogCX0K
ICNlbmRpZgogCisvKioKKyAqIEFkZGluZyB0aGUgaW5pdCB0YWJsZS4KKyAqLworCiAjaWYgQ09O
RklHX0xJQlVLQUxMT0MKIAl1a19wcl9pbmZvKCJJbml0aWFsaXplIElSUSBzdWJzeXN0ZW0uLi5c
biIpOwogCXJjID0gdWtwbGF0X2lycV9pbml0KGEpOwotLSAKMi43LjQKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:20:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:20:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBKhy-00017a-Rt; Fri, 20 Sep 2019 15:20:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBKhx-00017M-3I
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 15:20:29 +0000
X-Inumbo-ID: 2cd6f530-dbba-11e9-9593-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 2cd6f530-dbba-11e9-9593-12813bfff9fa;
 Fri, 20 Sep 2019 15:20:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 2F1411056DF;
 Fri, 20 Sep 2019 17:20:27 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id PQGOF5qa-GAK; Fri, 20 Sep 2019 17:20:27 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 058BD1056DB
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 17:20:27 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:20:26 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 17:20:20 +0200
Message-ID: <1568992820-11871-1-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH] plat/kvm: Missing header for
 STACK_SIZE_PAGE_ORDER
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGVudHJ5IGNvZGUgaW4gYWFyY2g2NCByZXF1aXJlcyBDT05GSUdfU1RBQ0tfU0laRV9QQUdF
X09SREVSLiBUaGUKcGF0Y2ggaW5jbHVkZXMgY29uZmlnLmggd2hlcmUgdGhlIGNvbmZpZ3VyYXRp
b24gaXMgZGVmaW5lZC4KClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5z
YW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIGluY2x1ZGUvdWsvYXJjaC9saW1pdHMuaCB8IDEgKwog
MSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9h
cmNoL2xpbWl0cy5oIGIvaW5jbHVkZS91ay9hcmNoL2xpbWl0cy5oCmluZGV4IGIxMWJmN2QuLjlm
YTNjNjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWsvYXJjaC9saW1pdHMuaAorKysgYi9pbmNsdWRl
L3VrL2FyY2gvbGltaXRzLmgKQEAgLTM2LDYgKzM2LDcgQEAKICNpZm5kZWYgX19VS0FSQ0hfTElN
SVRTX0hfXwogI2RlZmluZSBfX1VLQVJDSF9MSU1JVFNfSF9fCiAKKyNpbmNsdWRlIDx1ay9jb25m
aWcuaD4KICNpbmNsdWRlIDx1ay9hc20vbGltaXRzLmg+CiAKICNkZWZpbmUgU1RBQ0tfTUFTS19U
T1AgICAgICAgICAgICh+KF9fU1RBQ0tfU0laRSAtIDEpKQotLSAKMi43LjQKCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:45:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:45:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBL6A-0003zU-QV; Fri, 20 Sep 2019 15:45:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBL68-0003zP-Pr
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 15:45:28 +0000
X-Inumbo-ID: aa94a168-dbbd-11e9-b76c-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id aa94a168-dbbd-11e9-b76c-bc764e2007e4;
 Fri, 20 Sep 2019 15:45:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id A04821056EC;
 Fri, 20 Sep 2019 17:45:26 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 6yzpDR4aLqv1; Fri, 20 Sep 2019 17:45:26 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 7EF211056DF
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 17:45:26 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:45:26 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 17:45:03 +0200
Message-ID: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 0/4] lib/ukmmap: Remove mmap from
 newlib glue code and create a new internal library (libukmmap) for mmap
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SW50cm9kdWNpbmcgYSBuZXcgaW50ZXJuYWwgbGlicmFyeSB3aGljaCBpbXBsZW1lbnRzIG1tYXAg
cmVsYXRlZApvcGVyYXRpb25zLiBGb3IgdGhlIHRpbWUgYmVpbmcgbW1hcCBpcyBub3QgZnVsbHkg
aW1wbGVtZW50ZWQuIEl0IGlzIGp1c3QKYSB0cmljayB0aGF0IHdvcmtzIGZvciBHbywgYnV0IGl0
IG5lZWRzIHRvIGJlIHJldmlzaXRlZCBpbiB0aGUgZnV0dXJlLgpUaGlzIGltcGxlbWVudGF0aW9u
IGRvZXMgbm90IGNyZWF0ZSBhbnkgbmV3IG1hcHBpbmcsIGl0IGp1c3QgYWxsb2NhdGVzCm1lbW9y
eSBhbmQga2VlcHMgdHJhY2sgb2YgYW55IG1lbW9yeSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gYWxs
b2NhdGVkCmluIGEgcHJldmlvdXMgY2FsbC4gSWYgdGhlIHBhcmFtZXRlcnMgZG8gbm90IG1hdGNo
IHRoZSBvbmVzIHRoYXQgR28KdXNlcyB0aGVuIDAgaXMgcmV0dXJuZWQgKHVuaW1wbGVtZW50ZWQp
LgoKRGlmZmVyZW5jZXMgd2l0aCB2MzoKLSBSZW1vdmUgbmV3bGliIGRlcGVkZW5jeQoKRGlmZmVy
ZW5jZXMgd2l0aCB2MjoKLSBUaGUgdjIgb2YgdGhlIHNlcmllcyBkaWQgbm90IGFwcGx5IGNsZWFu
bHkgb24gdGhlIHN0YWdpbmcgYnJhbmNoCgpEaWZmZXJlbmNlcyB3aXRoIHYxOgotIEFkZCBQQVRD
SCBpbiBzdWJqZWN0IGxpbmUKCkNoYXJhbGFtcG9zIE1haW5hcyAoNCk6CiAgc3lzL21tYW4uaDog
SW1wb3J0IGZyb20gbXVzbAogIHN5cy9tbWFuLmg6IEFkYXB0IHRvIHVuaWtyYWZ0CiAgSW50cm9k
dWNlIG1tYXAgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIGxpYnJhcnkgc2tlbGV0b24KICBtbWFwIHRy
aWNrIGZvciBHbwoKIGxpYi9NYWtlZmlsZS51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDEgKwogbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL21tYW4uaCB8IDE0
OSArKysrKysrKysrKysrKysrKysKIGxpYi91a21tYXAvQ29uZmlnLnVrICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDUgKwogbGliL3VrbW1hcC9NYWtlZmlsZS51ayAgICAgICAgICAgICAgICAg
ICAgICB8ICAgMyArCiBsaWIvdWttbWFwL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgICAg
IHwgICAyICsKIGxpYi91a21tYXAvbW1hcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAx
NjYgKysrKysrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgMzI2IGluc2VydGlvbnMo
KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbm9saWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9z
eXMvbW1hbi5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9Db25maWcudWsKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBsaWIvdWttbWFwL01ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliL3VrbW1hcC9leHBvcnRzeW1zLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9t
bWFwLmMKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:45:33 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:45:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBL6D-0003zt-SA; Fri, 20 Sep 2019 15:45:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBL6B-0003za-Sm
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 15:45:31 +0000
X-Inumbo-ID: ab7e1619-dbbd-11e9-9594-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ab7e1619-dbbd-11e9-9594-12813bfff9fa;
 Fri, 20 Sep 2019 15:45:30 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id DA634F2002;
 Fri, 20 Sep 2019 17:45:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 6h4T6bAbDD6A; Fri, 20 Sep 2019 17:45:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B5DA3F2001
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 17:45:26 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:45:26 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 17:45:04 +0200
Message-ID: <20190920154507.28709-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 1/4] sys/mman.h: Import from musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGFrZW4gZnJvbSBtdXNsIGFzIGlzLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFz
IDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIGxpYi9ub2xpYmMvbXVzbC1pbXBv
cnRlZC9pbmNsdWRlL3N5cy9tbWFuLmggfCAxNDggKysrKysrKysrKysrKysrKysrKysKIDEgZmls
ZSBjaGFuZ2VkLCAxNDggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9ub2xp
YmMvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3N5cy9tbWFuLmgKCmRpZmYgLS1naXQgYS9saWIvbm9s
aWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMvbW1hbi5oIGIvbGliL25vbGliYy9tdXNsLWlt
cG9ydGVkL2luY2x1ZGUvc3lzL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMC4uZDA3NjFiMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvbm9saWJjL211c2wtaW1wb3J0
ZWQvaW5jbHVkZS9zeXMvbW1hbi5oCkBAIC0wLDAgKzEsMTQ4IEBACisjaWZuZGVmCV9TWVNfTU1B
Tl9ICisjZGVmaW5lCV9TWVNfTU1BTl9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIg
eworI2VuZGlmCisKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCisjZGVmaW5lIF9fTkVFRF9tb2Rl
X3QKKyNkZWZpbmUgX19ORUVEX3NpemVfdAorI2RlZmluZSBfX05FRURfb2ZmX3QKKworI2lmIGRl
ZmluZWQoX0dOVV9TT1VSQ0UpCisjZGVmaW5lIF9fTkVFRF9zc2l6ZV90CisjZW5kaWYKKworI2lu
Y2x1ZGUgPGJpdHMvYWxsdHlwZXMuaD4KKworI2RlZmluZSBNQVBfRkFJTEVEICgodm9pZCAqKSAt
MSkKKworI2RlZmluZSBNQVBfU0hBUkVEICAgICAweDAxCisjZGVmaW5lIE1BUF9QUklWQVRFICAg
IDB4MDIKKyNkZWZpbmUgTUFQX1NIQVJFRF9WQUxJREFURSAweDAzCisjZGVmaW5lIE1BUF9UWVBF
ICAgICAgIDB4MGYKKyNkZWZpbmUgTUFQX0ZJWEVEICAgICAgMHgxMAorI2RlZmluZSBNQVBfQU5P
TiAgICAgICAweDIwCisjZGVmaW5lIE1BUF9BTk9OWU1PVVMgIE1BUF9BTk9OCisjZGVmaW5lIE1B
UF9OT1JFU0VSVkUgIDB4NDAwMAorI2RlZmluZSBNQVBfR1JPV1NET1dOICAweDAxMDAKKyNkZWZp
bmUgTUFQX0RFTllXUklURSAgMHgwODAwCisjZGVmaW5lIE1BUF9FWEVDVVRBQkxFIDB4MTAwMAor
I2RlZmluZSBNQVBfTE9DS0VEICAgICAweDIwMDAKKyNkZWZpbmUgTUFQX1BPUFVMQVRFICAgMHg4
MDAwCisjZGVmaW5lIE1BUF9OT05CTE9DSyAgIDB4MTAwMDAKKyNkZWZpbmUgTUFQX1NUQUNLICAg
ICAgMHgyMDAwMAorI2RlZmluZSBNQVBfSFVHRVRMQiAgICAweDQwMDAwCisjZGVmaW5lIE1BUF9T
WU5DICAgICAgIDB4ODAwMDAKKyNkZWZpbmUgTUFQX0ZJWEVEX05PUkVQTEFDRSAweDEwMDAwMAor
I2RlZmluZSBNQVBfRklMRSAgICAgICAwCisKKyNkZWZpbmUgTUFQX0hVR0VfU0hJRlQgMjYKKyNk
ZWZpbmUgTUFQX0hVR0VfTUFTSyAgMHgzZgorI2RlZmluZSBNQVBfSFVHRV82NEtCICAoMTYgPDwg
MjYpCisjZGVmaW5lIE1BUF9IVUdFXzUxMktCICgxOSA8PCAyNikKKyNkZWZpbmUgTUFQX0hVR0Vf
MU1CICAgKDIwIDw8IDI2KQorI2RlZmluZSBNQVBfSFVHRV8yTUIgICAoMjEgPDwgMjYpCisjZGVm
aW5lIE1BUF9IVUdFXzhNQiAgICgyMyA8PCAyNikKKyNkZWZpbmUgTUFQX0hVR0VfMTZNQiAgKDI0
IDw8IDI2KQorI2RlZmluZSBNQVBfSFVHRV8zMk1CICAoMjUgPDwgMjYpCisjZGVmaW5lIE1BUF9I
VUdFXzI1Nk1CICgyOCA8PCAyNikKKyNkZWZpbmUgTUFQX0hVR0VfNTEyTUIgKDI5IDw8IDI2KQor
I2RlZmluZSBNQVBfSFVHRV8xR0IgICAoMzAgPDwgMjYpCisjZGVmaW5lIE1BUF9IVUdFXzJHQiAg
ICgzMSA8PCAyNikKKyNkZWZpbmUgTUFQX0hVR0VfMTZHQiAgKDM0VSA8PCAyNikKKworI2RlZmlu
ZSBQUk9UX05PTkUgICAgICAwCisjZGVmaW5lIFBST1RfUkVBRCAgICAgIDEKKyNkZWZpbmUgUFJP
VF9XUklURSAgICAgMgorI2RlZmluZSBQUk9UX0VYRUMgICAgICA0CisjZGVmaW5lIFBST1RfR1JP
V1NET1dOIDB4MDEwMDAwMDAKKyNkZWZpbmUgUFJPVF9HUk9XU1VQICAgMHgwMjAwMDAwMAorCisj
ZGVmaW5lIE1TX0FTWU5DICAgICAgIDEKKyNkZWZpbmUgTVNfSU5WQUxJREFURSAgMgorI2RlZmlu
ZSBNU19TWU5DICAgICAgICA0CisKKyNkZWZpbmUgTUNMX0NVUlJFTlQgICAgMQorI2RlZmluZSBN
Q0xfRlVUVVJFICAgICAyCisjZGVmaW5lIE1DTF9PTkZBVUxUICAgIDQKKworI2RlZmluZSBQT1NJ
WF9NQURWX05PUk1BTCAgICAgMAorI2RlZmluZSBQT1NJWF9NQURWX1JBTkRPTSAgICAgMQorI2Rl
ZmluZSBQT1NJWF9NQURWX1NFUVVFTlRJQUwgMgorI2RlZmluZSBQT1NJWF9NQURWX1dJTExORUVE
ICAgMworI2RlZmluZSBQT1NJWF9NQURWX0RPTlRORUVEICAgNAorCisjaWYgZGVmaW5lZChfR05V
X1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKKyNkZWZpbmUgTUFEVl9OT1JNQUwgICAg
ICAwCisjZGVmaW5lIE1BRFZfUkFORE9NICAgICAgMQorI2RlZmluZSBNQURWX1NFUVVFTlRJQUwg
IDIKKyNkZWZpbmUgTUFEVl9XSUxMTkVFRCAgICAzCisjZGVmaW5lIE1BRFZfRE9OVE5FRUQgICAg
NAorI2RlZmluZSBNQURWX0ZSRUUgICAgICAgIDgKKyNkZWZpbmUgTUFEVl9SRU1PVkUgICAgICA5
CisjZGVmaW5lIE1BRFZfRE9OVEZPUksgICAgMTAKKyNkZWZpbmUgTUFEVl9ET0ZPUksgICAgICAx
MQorI2RlZmluZSBNQURWX01FUkdFQUJMRSAgIDEyCisjZGVmaW5lIE1BRFZfVU5NRVJHRUFCTEUg
MTMKKyNkZWZpbmUgTUFEVl9IVUdFUEFHRSAgICAxNAorI2RlZmluZSBNQURWX05PSFVHRVBBR0Ug
IDE1CisjZGVmaW5lIE1BRFZfRE9OVERVTVAgICAgMTYKKyNkZWZpbmUgTUFEVl9ET0RVTVAgICAg
ICAxNworI2RlZmluZSBNQURWX1dJUEVPTkZPUksgIDE4CisjZGVmaW5lIE1BRFZfS0VFUE9ORk9S
SyAgMTkKKyNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAxMDAKKyNkZWZpbmUgTUFEVl9TT0ZUX09G
RkxJTkUgMTAxCisjZW5kaWYKKworI2lmZGVmIF9HTlVfU09VUkNFCisjZGVmaW5lIE1SRU1BUF9N
QVlNT1ZFIDEKKyNkZWZpbmUgTVJFTUFQX0ZJWEVEIDIKKworI2RlZmluZSBNTE9DS19PTkZBVUxU
IDB4MDEKKworI2RlZmluZSBNRkRfQ0xPRVhFQyAweDAwMDFVCisjZGVmaW5lIE1GRF9BTExPV19T
RUFMSU5HIDB4MDAwMlUKKyNkZWZpbmUgTUZEX0hVR0VUTEIgMHgwMDA0VQorI2VuZGlmCisKKyNp
bmNsdWRlIDxiaXRzL21tYW4uaD4KKwordm9pZCAqbW1hcCAodm9pZCAqLCBzaXplX3QsIGludCwg
aW50LCBpbnQsIG9mZl90KTsKK2ludCBtdW5tYXAgKHZvaWQgKiwgc2l6ZV90KTsKKworaW50IG1w
cm90ZWN0ICh2b2lkICosIHNpemVfdCwgaW50KTsKK2ludCBtc3luYyAodm9pZCAqLCBzaXplX3Qs
IGludCk7CisKK2ludCBwb3NpeF9tYWR2aXNlICh2b2lkICosIHNpemVfdCwgaW50KTsKKworaW50
IG1sb2NrIChjb25zdCB2b2lkICosIHNpemVfdCk7CitpbnQgbXVubG9jayAoY29uc3Qgdm9pZCAq
LCBzaXplX3QpOworaW50IG1sb2NrYWxsIChpbnQpOworaW50IG11bmxvY2thbGwgKHZvaWQpOwor
CisjaWZkZWYgX0dOVV9TT1VSQ0UKK3ZvaWQgKm1yZW1hcCAodm9pZCAqLCBzaXplX3QsIHNpemVf
dCwgaW50LCAuLi4pOworaW50IHJlbWFwX2ZpbGVfcGFnZXMgKHZvaWQgKiwgc2l6ZV90LCBpbnQs
IHNpemVfdCwgaW50KTsKK2ludCBtZW1mZF9jcmVhdGUgKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQp
OworaW50IG1sb2NrMiAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkKTsKKyNlbmRpZgor
CisjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKK2ludCBt
YWR2aXNlICh2b2lkICosIHNpemVfdCwgaW50KTsKK2ludCBtaW5jb3JlICh2b2lkICosIHNpemVf
dCwgdW5zaWduZWQgY2hhciAqKTsKKyNlbmRpZgorCitpbnQgc2htX29wZW4gKGNvbnN0IGNoYXIg
KiwgaW50LCBtb2RlX3QpOworaW50IHNobV91bmxpbmsgKGNvbnN0IGNoYXIgKik7CisKKyNpZiBk
ZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpCisjZGVm
aW5lIG1tYXA2NCBtbWFwCisjZGVmaW5lIG9mZjY0X3Qgb2ZmX3QKKyNlbmRpZgorCisjaWZkZWYg
X19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:45:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:45:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBL6E-00040H-Tp; Fri, 20 Sep 2019 15:45:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBL6D-0003zo-KO
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 15:45:33 +0000
X-Inumbo-ID: ad28edb2-dbbd-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id ad28edb2-dbbd-11e9-b299-bc764e2007e4;
 Fri, 20 Sep 2019 15:45:31 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E6DD7F2003;
 Fri, 20 Sep 2019 17:45:30 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 3cKNpzTJHRrn; Fri, 20 Sep 2019 17:45:30 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id BDB5EF2001
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 17:45:28 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:45:26 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 17:45:05 +0200
Message-ID: <20190920154507.28709-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 2/4] sys/mman.h: Adapt to unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3N5cy9tbWFuLmgg
fCA3ICsrKystLS0KIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL21t
YW4uaCBiL2xpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3N5cy9tbWFuLmgKaW5kZXgg
ZDA3NjFiMTguLjhhNDI4NDAzIDEwMDY0NAotLS0gYS9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQv
aW5jbHVkZS9zeXMvbW1hbi5oCisrKyBiL2xpYi9ub2xpYmMvbXVzbC1pbXBvcnRlZC9pbmNsdWRl
L3N5cy9tbWFuLmgKQEAgLTQsNyArNCw3IEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaW5j
bHVkZSA8ZmVhdHVyZXMuaD4KKy8qIFRPRE86ICNpbmNsdWRlIDxmZWF0dXJlcy5oPiAqLwogCiAj
ZGVmaW5lIF9fTkVFRF9tb2RlX3QKICNkZWZpbmUgX19ORUVEX3NpemVfdApAQCAtMTQsNyArMTQs
OCBAQCBleHRlcm4gIkMiIHsKICNkZWZpbmUgX19ORUVEX3NzaXplX3QKICNlbmRpZgogCi0jaW5j
bHVkZSA8Yml0cy9hbGx0eXBlcy5oPgorI2luY2x1ZGUgPG5vbGliYy1pbnRlcm5hbC9zaGFyZWRk
ZWZzLmg+CisvKiBUT0RPOiAjaW5jbHVkZSA8Yml0cy9hbGx0eXBlcy5oPiAqLwogCiAjZGVmaW5l
IE1BUF9GQUlMRUQgKCh2b2lkICopIC0xKQogCkBAIC0xMDcsNyArMTA4LDcgQEAgZXh0ZXJuICJD
IiB7CiAjZGVmaW5lIE1GRF9IVUdFVExCIDB4MDAwNFUKICNlbmRpZgogCi0jaW5jbHVkZSA8Yml0
cy9tbWFuLmg+CisvKiBUT0RPOiAjaW5jbHVkZSA8Yml0cy9tbWFuLmg+ICovCiAKIHZvaWQgKm1t
YXAgKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCk7CiBpbnQgbXVubWFwICh2
b2lkICosIHNpemVfdCk7Ci0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:45:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:45:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBL6I-00041V-VO; Fri, 20 Sep 2019 15:45:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBL6G-00040o-Sc
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 15:45:36 +0000
X-Inumbo-ID: ae623698-dbbd-11e9-9594-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ae623698-dbbd-11e9-9594-12813bfff9fa;
 Fri, 20 Sep 2019 15:45:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0178CF2002;
 Fri, 20 Sep 2019 17:45:33 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2JSSXvCW-nld; Fri, 20 Sep 2019 17:45:32 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id CBE79F2001
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 17:45:30 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:45:26 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 17:45:06 +0200
Message-ID: <20190920154507.28709-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 3/4] lib/ukmmap: Introduce mmap
 and related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi9NYWtlZmlsZS51ayAgICAgICAgICB8IDEgKwogbGliL3VrbW1hcC9D
b25maWcudWsgICAgIHwgNSArKysrKwogbGliL3VrbW1hcC9NYWtlZmlsZS51ayAgIHwgMSArCiBs
aWIvdWttbWFwL2V4cG9ydHN5bXMudWsgfCAxICsKIDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRp
b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9Db25maWcudWsKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWIvdWttbWFwL01ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
L3VrbW1hcC9leHBvcnRzeW1zLnVrCgpkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnVrIGIvbGli
L01ha2VmaWxlLnVrCmluZGV4IGExNjk3MTk4Li4yY2E5OTczZiAxMDA2NDQKLS0tIGEvbGliL01h
a2VmaWxlLnVrCisrKyBiL2xpYi9NYWtlZmlsZS51awpAQCAtMzEsMyArMzEsNCBAQCAkKGV2YWwg
JChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91azlwKSkKICQoZXZhbCAk
KGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3Bvc2l4LWxpYmRsKSkKICQo
ZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrbGlicGFyYW0p
KQogJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWt0aW1l
KSkKKyQoZXZhbCAkKGNhbGwgX2ltcG9ydF9saWIsJChDT05GSUdfVUtfQkFTRSkvbGliL3VrbW1h
cCkpCmRpZmYgLS1naXQgYS9saWIvdWttbWFwL0NvbmZpZy51ayBiL2xpYi91a21tYXAvQ29uZmln
LnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi41NzM5NWYyMAotLS0gL2Rl
di9udWxsCisrKyBiL2xpYi91a21tYXAvQ29uZmlnLnVrCkBAIC0wLDAgKzEsNSBAQAorY29uZmln
IExJQlVLTU1BUAorCWJvb2wgInVrbW1hcDogbW1hcCBzeXN0ZW0gY2FsbCIKKwlkZWZhdWx0IG4K
KwlzZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKKwlzZWxlY3QgTElCVUtBTExPQwpkaWZm
IC0tZ2l0IGEvbGliL3VrbW1hcC9NYWtlZmlsZS51ayBiL2xpYi91a21tYXAvTWFrZWZpbGUudWsK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjhhYzNhYjNjCi0tLSAvZGV2L251
bGwKKysrIGIvbGliL3VrbW1hcC9NYWtlZmlsZS51awpAQCAtMCwwICsxIEBACiskKGV2YWwgJChj
YWxsIGFkZGxpYl9zLGxpYnVrbW1hcCwkKENPTkZJR19MSUJVS01NQVApKSkKZGlmZiAtLWdpdCBh
L2xpYi91a21tYXAvZXhwb3J0c3ltcy51ayBiL2xpYi91a21tYXAvZXhwb3J0c3ltcy51awpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNjIxZTk0ZjAKLS0tIC9kZXYvbnVsbAor
KysgYi9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsKQEAgLTAsMCArMSBAQAorbm9uZQotLSAKMi4x
Ny4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:45:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:45:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBL6O-00042P-19; Fri, 20 Sep 2019 15:45:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=1oxl=XP=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iBL6L-000425-So
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 15:45:41 +0000
X-Inumbo-ID: afa385e8-dbbd-11e9-9594-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id afa385e8-dbbd-11e9-9594-12813bfff9fa;
 Fri, 20 Sep 2019 15:45:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 1DCA2F2002;
 Fri, 20 Sep 2019 17:45:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id jKBy2AzbMk4X; Fri, 20 Sep 2019 17:45:34 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DAEFCF2001
 for <minios-devel@lists.xenproject.org>; Fri, 20 Sep 2019 17:45:32 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:45:26 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Fri, 20 Sep 2019 17:45:07 +0200
Message-ID: <20190920154507.28709-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 4/4] lib/ukmmap: mmap trick for Go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIGxpYi91a21tYXAvTWFrZWZpbGUudWsgICB8ICAgMiArCiBsaWIvdWttbWFw
L2V4cG9ydHN5bXMudWsgfCAgIDMgKy0KIGxpYi91a21tYXAvbW1hcC5jICAgICAgICB8IDE2NiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwg
MTcwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
dWttbWFwL21tYXAuYwoKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvTWFrZWZpbGUudWsgYi9saWIv
dWttbWFwL01ha2VmaWxlLnVrCmluZGV4IDhhYzNhYjNjLi43MWZmNDMyZiAxMDA2NDQKLS0tIGEv
bGliL3VrbW1hcC9NYWtlZmlsZS51aworKysgYi9saWIvdWttbWFwL01ha2VmaWxlLnVrCkBAIC0x
ICsxLDMgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWttbWFwLCQoQ09ORklHX0xJQlVL
TU1BUCkpKQorCitMSUJVS01NQVBfU1JDUy15ICs9ICQoTElCVUtNTUFQX0JBU0UpL21tYXAuYwpk
aWZmIC0tZ2l0IGEvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrIGIvbGliL3VrbW1hcC9leHBvcnRz
eW1zLnVrCmluZGV4IDYyMWU5NGYwLi5hMzFjNjM2YiAxMDA2NDQKLS0tIGEvbGliL3VrbW1hcC9l
eHBvcnRzeW1zLnVrCisrKyBiL2xpYi91a21tYXAvZXhwb3J0c3ltcy51awpAQCAtMSArMSwyIEBA
Ci1ub25lCittbWFwCittdW5tYXAKZGlmZiAtLWdpdCBhL2xpYi91a21tYXAvbW1hcC5jIGIvbGli
L3VrbW1hcC9tbWFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjRlMjRm
Mzc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL3VrbW1hcC9tbWFwLmMKQEAgLTAsMCArMSwxNjYg
QEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKgor
ICogQXV0aG9yczogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFi
LmV1PgorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVD
IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRP
UlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1B
WSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1
ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8dWsvYWxsb2MuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKworc3RydWN0IG1tYXBfYWRkciB7CisJdm9pZCAqYmVnaW47CisJdm9pZCAqZW5kOworCXN0
cnVjdCBtbWFwX2FkZHIgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IG1tYXBfYWRkciAqbW1h
cF9hZGRyOworCisvKioKKyAqIFRoaXMgaXMgbm90IGEgY29ycmVjdCBpbXBsZW1lbnRhdGlvbiBv
ZiBtbWFwLiBJdCBpcyBqdXN0IGEgdHJpY2sgdGhhdCB3b3JrcworICogZm9yIEdvIGJ1dCBpdCBu
ZWVkcyB0byBiZSByZXZpc2l0ZWQuIEluc3RlYWQgb2YgbWFwcGluZywgaXQgYWxsb2NhdGVzIGxl
bgorICogYnl0ZXMgb2YgbWVtb3J5IGFuZCBzdG9yZXMgdGhlIGJlZ2lubmluaWcgYW5kIHRoZSBl
bmQgb2YgdGhhdCBtZW1vcnkgY2h1bmsKKyAqIGluIHN0cnVjdCBtbWFwX2FkZHIuIEF0IGZpcnN0
IGl0IGNoZWNrcyBpZiBhZGRyIGJlbG9uZ3MgdG8gb25lIG9mIHRoZSBtZW1vcnkKKyAqIGNodW5r
cyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4gYSBwcmV2aW91cyBjYWxsIG9mIG1tYXAuIElm
IHRoYXQgaXMgdGhlCisgKiBjYXNlIGFkZHIgaXMgdGhlIHJldHVybiB2YWx1ZS4gT3RoZXJ3aXNl
IGEgbmV3IG1lbW9yeSBibG9jayBpcyBhbGxvY2F0ZWQgYW5kCisgKiB0aGUgcmV0dXJuIHZhbHVl
IGlzIGEgcG9pbnRlciB0byB0aGUgYmVnaW5uaW5pZyBvZiB0aGF0IGJsb2NrLgorICoKKyAqIEdv
IHVzZXMgbW1hcCBhbHdheXMgd2l0aDoKKyAqIEBwcm90ICAgPQllaXRoZXIgUFJPVF9OT05FIG9y
IFBST1RfUkVBRHxQUk9UX1dSSVRFLAorICogQGZsYWdzICA9CWFzIE1BUF9BTk9OfE1BUF9QUklW
QVRFLCBvciBNQVBfRklYRUR8TUFQX0FOT058TUFQX1BSSVZBVEUKKyAqCQlvciBNQVBfTk9SRVNF
UlZFfE1BUF9BTk9OfE1BUF9QUklWQVRFCisgKiBAZmlsZGVzID0JLTEKKyAqIEBvZmYgICAgPQkw
CisgKgorICovCisKK3ZvaWQgKm1tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3Qs
CisJCWludCBmbGFncywgaW50IGZpbGRlcywgb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBtbWFwX2Fk
ZHIgKnRtcCA9IG1tYXBfYWRkciwgKmxhc3QgPSBOVUxMLCAqbmV3ID0gTlVMTDsKKworCWlmICgh
bGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKHZvaWQgKikgLTE7CisJfQorCisJ
LyogQ2hlY2sgaWYgcGFyYW1ldGVycyBtYXRjaCB0aGUgb25lcyB0aGF0IGdvIHVzZQorCSAqIE90
aGVyd2lzZSByZXR1cm4gMCAodW5pbXBsZW1lbnRlZCBtbWFwKQorCSAqLworCWlmIChmaWxkZXMg
IT0gLTEgfHwgb2ZmKQorCQlyZXR1cm4gMDsKKwlpZiAoIShwcm90ICYgKFBST1RfUkVBRHxQUk9U
X1dSSVRFKSkgJiYgKHByb3QgIT0gMCkpCisJCXJldHVybiAwOworCWlmICghKGZsYWdzICYgKE1B
UF9BTk9OfE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX0ZJWEVEfE1BUF9BTk9O
fE1BUF9QUklWQVRFKSkgJiYKKwkJCSEoZmxhZ3MgJiAoTUFQX05PUkVTRVJWRXxNQVBfQU5PTnxN
QVBfUFJJVkFURSkpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICh0bXApIHsKKwkJaWYgKGFkZHIp
IHsKKwkJCWlmIChhZGRyID49IHRtcC0+YmVnaW4gJiYgYWRkciA8IHRtcC0+ZW5kKQorCQkJCXJl
dHVybiBhZGRyOworCQl9CisJCWxhc3QgPSB0bXA7CisJCXRtcCA9IHRtcC0+bmV4dDsKKwl9CisJ
dm9pZCAqbWVtID0gdWtfbWFsbG9jKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGxlbik7CisKKwlp
ZiAoIW1lbSkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICh2b2lkICopIC0xOworCX0K
KwluZXcgPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKHN0cnVjdCBt
bWFwX2FkZHIpKTsKKwluZXctPmJlZ2luID0gbWVtOworCW5ldy0+ZW5kID0gbWVtICsgbGVuOwor
CW5ldy0+bmV4dCA9IE5VTEw7CisJaWYgKCFtbWFwX2FkZHIpCisJCW1tYXBfYWRkciA9IG5ldzsK
KwllbHNlCisJCWxhc3QtPm5leHQgPSBuZXc7CisJcmV0dXJuIG1lbTsKK30KKworLyoKKyAqIG11
bm1hcCBmcmVlcyBsZW4gYnl0ZXMgb3MgbWVtb3J5IHN0YXJ0aW5nIGZyb20gYWRkci4KKyAqIGFk
ZHIgbmVlZHMgdG8gYmUgYSBwb2ludGVyIHRvIGEgbWVtb3J5IGJsb2NrIHRoYXQgaGFzIGJlZW4g
YWxsb2NhdGVkIGZyb20KKyAqIG1tYXAuIElmIGxlbiBoYXMgdGhlIHNhbWUgdmFsdWUgd2l0aCB0
aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgaGFzCisgKiBiZWVuIGFsbG9jYXRlZCBm
cm9tIG1tYXAgdGhlIHN0cnVjdCBtbWFwX2FkZHIgY291bnRlcnBhcnQgaXMgZGVzdHJveWVkLgor
ICogT3RoZXJ3aXNlIHRoZSBpbml0aWFsIG1lbW9yeSBibG9jayBpcyByZXBsYWNlZCBieSBhIHNt
YWxsZXIgb25lLgorICovCisKK2ludCBtdW5tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbikKK3sK
KwlzdHJ1Y3QgbW1hcF9hZGRyICp0bXAgPSBtbWFwX2FkZHIsICpwcmV2ID0gTlVMTDsKKwlzaXpl
X3QgcmVtYWluX21lbTsKKworCWlmICghbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1
cm4gLTE7CisJfQorCWlmICghYWRkcikKKwkJcmV0dXJuIDA7CisJd2hpbGUgKHRtcCkgeworCQlp
ZiAoYWRkciAhPSB0bXAtPmJlZ2luKSB7CisJCQlpZiAodG1wLT5lbmQgPiBhZGRyICsgbGVuKSB7
CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJcmVtYWluX21l
bSA9IHRtcC0+ZW5kIC0gYWRkciAtIGxlbjsKKwkJCWlmIChyZW1haW5fbWVtKSB7CisKKwkJCQl2
b2lkICptZW0gPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwKKwkJCQkJCXJlbWFp
bl9tZW0pOworCQkJCWlmICghbWVtKSB7CisJCQkJCWVycm5vID0gRU5PTUVNOworCQkJCQlyZXR1
cm4gLTE7CisJCQkJfQorCQkJCW1lbWNweShtZW0sIGFkZHIrbGVuLCByZW1haW5fbWVtKTsKKwkJ
CQl0bXAtPmJlZ2luID0gbWVtOworCQkJfSBlbHNlIHsKKworCQkJCWlmICghcHJldikKKwkJCQkJ
bW1hcF9hZGRyID0gdG1wLT5uZXh0OworCQkJCWVsc2UKKwkJCQkJcHJldi0+bmV4dCA9IHRtcC0+
bmV4dDsKKwkJCQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIHRtcCk7CisJCQl9CisJ
CQl1a19mcmVlKHVrX2FsbG9jX2dldF9kZWZhdWx0KCksIGFkZHIpOworCQkJcmV0dXJuIDA7CisJ
CX0KKwkJcHJldiA9IHRtcDsKKwkJdG1wID0gdG1wLT5uZXh0OworCX0KKwkvKiB1bmltcGxlbWVu
dGVkIG11bm1hcCAqLworCXJldHVybiAwOworfQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 15:51:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 15:51:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBLBh-0004wq-JW; Fri, 20 Sep 2019 15:51:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBLBh-0004wj-96
 for minios-devel@lists.xenproject.org; Fri, 20 Sep 2019 15:51:13 +0000
X-Inumbo-ID: 77204520-dbbe-11e9-9595-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 77204520-dbbe-11e9-9595-12813bfff9fa;
 Fri, 20 Sep 2019 15:51:10 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id A3FAB1056F2;
 Fri, 20 Sep 2019 17:51:09 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 1lb-iiOmkS6p; Fri, 20 Sep 2019 17:51:09 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 6CD261056F0;
 Fri, 20 Sep 2019 17:51:09 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 17:51:09 +0200
To: Julien Grall <julien.grall@arm.com>, "Justin He (Arm Technology China)"
 <Justin.He@arm.com>, Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
 <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
Date: Fri, 20 Sep 2019 17:51:08 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDkvMTkvMTkgMTo1NyBQTSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+IEhpLAo+Cj4gT24gMTcv
MDkvMjAxOSAxMjo1NSwgU2hhcmFuIFNhbnRoYW5hbSB3cm90ZToKPj4gSGVsbG8sCj4+Cj4+IE9u
IDkvMTcvMTkgMTI6NDQgUE0sIEp1bGllbiBHcmFsbCB3cm90ZToKPj4+IEhpLAo+Pj4KPj4+IE9u
IDkvMTcvMTkgMTE6MDggQU0sIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4+Pj4KPj4+PiBPbiA5
LzE3LzE5IDExOjE3IEFNLCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4+Pj4+Cj4+Pj4+Cj4+Pj4+IE9u
IDkvMTcvMTkgOTo0NCBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6
Cj4+Pj4+PiBIaSBKdWxpZW4KPj4+Pj4KPj4+Pj4gSGksCj4+Pj4+Cj4+Pj4+Pj4gLS0tLS1Pcmln
aW5hbCBNZXNzYWdlLS0tLS0KPj4+Pj4+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFs
bEBhcm0uY29tPgo+Pj4+Pj4+IFNlbnQ6IDIwMTnlubQ55pyIMTfml6UgMTY6MzkKPj4+Pj4+PiBU
bzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsg
U2FudGlhZ28KPj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+OyAKPj4+
Pj4+PiBtaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7Cj4+Pj4+Pj4gU2ltb24gS3Vl
bnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+OyBTaGFyYW4gU2FudGhhbmFtCj4+Pj4+Pj4g
PFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1Pgo+Pj4+Pj4+IENjOiBLYWx5IFhpbiAoQXJtIFRl
Y2hub2xvZ3kgQ2hpbmEpIDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpIENoZW4gCj4+Pj4+Pj4gKEFy
bQo+Pj4+Pj4+IFRlY2hub2xvZ3kgQ2hpbmEpIDxXZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcg
V3UgKEFybSBUZWNobm9sb2d5Cj4+Pj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsg
bmQgPG5kQGFybS5jb20+Cj4+Pj4+Pj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSHYzIDUv
N10gcGxhdC9jb21tb246IEZpbmQgYW5kIAo+Pj4+Pj4+IHJlZ2lzdGVyIElSUQo+Pj4+Pj4+IGZv
ciBhcmNoX3RpbWVyCj4+Pj4+Pj4KPj4+Pj4+PiBPbiA5LzE3LzE5IDg6MDEgQU0sIEp1c3RpbiBI
ZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOgo+Pj4+Pj4+PiBIaSBKdWxpZW4gKHdlbGNv
bWUgYmFjayBmcm9tIGhvbGlkYXkg8J+YiiApCj4+Pj4+Pj4KPj4+Pj4+PiBIaSwKPj4+Pj4+Pgo+
Pj4+Pj4+IFRoYW5rcyA6KS4KPj4+Pj4+Pgo+Pj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl
LS0tLS0KPj4+Pj4+Pj4+IEZyb206IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+
Cj4+Pj4+Pj4+PiBTZW50OiAyMDE55bm0OeaciDE35pelIDM6NTMKPj4+Pj4+Pj4+IFRvOiBKdXN0
aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+OyAKPj4+Pj4+
Pj4+IFNhbnRpYWdvCj4+Pj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+
OyAKPj4+Pj4+Pj4+IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsKPj4+Pj4+Pj4+
IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PjsgU2hhcmFuIFNhbnRoYW5h
bQo+Pj4+Pj4+Pj4gPFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1Pgo+Pj4+Pj4+Pj4gQ2M6IEth
bHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hl
bgo+Pj4+Pj4+IChBcm0KPj4+Pj4+Pj4+IFRlY2hub2xvZ3kgQ2hpbmEpIDxXZWkuQ2hlbkBhcm0u
Y29tPjsgSmlhbnlvbmcgV3UgKEFybQo+Pj4+Pj4+IFRlY2hub2xvZ3kKPj4+Pj4+Pj4+IENoaW5h
KSA8SmlhbnlvbmcuV3VAYXJtLmNvbT4KPj4+Pj4+Pj4+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQg
UEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCAKPj4+Pj4+Pj4+IHJlZ2lzdGVyCj4+
Pj4+Pj4gSVJRCj4+Pj4+Pj4+PiBmb3IgYXJjaF90aW1lcgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IE9u
IDkvMTYvMTkgODo1MiBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6
Cj4+Pj4+Pj4+Pj4gSGnCoCBTYW50aWFnbwo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEhpIGFsbCwKPj4+
Pj4+Pj4+Cj4+Pj4+Pj4+PiBAU2FudGlhZ28sIGl0IGlzIHF1aXRlIGRpZmZpY3VsdCB0byBmb2xs
b3cgdGhlIHRocmVhZCB3aGVuIHlvdSAKPj4+Pj4+Pj4+IHN0YXJ0Cj4+Pj4+Pj4+PiB5b3VyIGFu
c3dlciB3aXRoICJDT01NRU5UIi4gTWF5IEkgYXNrIHlvdSB0byBjb25maWd1cmUgeW91ciAKPj4+
Pj4+Pj4+IGUtbWFpbAo+Pj4+Pj4+Pj4gY2xpZW50IHRvIHF1b3RlIHByb3Blcmx5IChpLmUgPik/
Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gRnVydGhlcm1vcmUsIGRpc2NsYWltZXIgZm9vdGVyIHNob3Vs
ZCBiZSBhdm9pZGVkIG9uIHRoZSAKPj4+Pj4+Pj4+IG1haWxpbmcgbGlzdC4KPj4+Pj4+Pj4+IFlv
dSBhcmUgYmFzaWNhbGx5IHNheWluZyB0aGlzIGlzIGNvbmZpZGVudGlhbCBidXQgeW91IHNlbmQg
dG8gCj4+Pj4+Pj4+PiBldmVyeW9uZQo+Pj4+Pj4+Pj4gKG1haWxpbmcgbGlzdCBhcmUgYXJjaGl2
ZWQpLi4uCj4+Pj4+Pj4+IE9LCj4+Pj4+Pj4KPj4+Pj4+PiBJdCB3YXNuJ3QgZGlyZWN0ZWQgdG8g
eW91IDspLgo+Pj4+Pj4+Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gWy4uLl0KPj4+Pj4+Pj4+Cj4+Pj4+
Pj4+Pj4+IENPTU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRv
IGhlcmU/IE5vdCAKPj4+Pj4+Pj4+Pj4gZXZlbgo+Pj4+Pj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/
IEFzIHRoZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUgY291bnRlcgo+Pj4+Pj4+Pj4g
b3ZlcmZsb3dzCj4+Pj4+Pj4+Pj4+IHdlIHdvdWxkIGdldCBhIG5ldyBpbnRlcnJ1cHQgb3RoZXJ3
aXNlIChhbHRob3VnaCB0aGUgCj4+Pj4+Pj4+Pj4+IG92ZXJmbG93IGNvdWxkCj4+Pj4+Pj4+Pj4+
IGhhcHBlbiBpbiBhIHZlcnkgdmVyeSBsb25nIHRpbWUsIHJpZ2h0PykKPj4+Pj4+Pj4+Pgo+Pj4+
Pj4+Pj4+IEluIHByZXZpb3VzIHZlcnNpb24sIHdlIGFkZGVkIGEgZ2VuZXJpY190aW1lcl9tYXNr
X2lycSgpIGluCj4+Pj4+Pj4+Pj4gZ2VuZXJpY190aW1lcl9pcnFfaGFuZGxlci4gQnV0IGFzIHBl
ciB0aGUgc3VnZ2VzdGlvbiBbMV0gZnJvbSAKPj4+Pj4+Pj4+PiBKdWxpZW4sCj4+Pj4+Pj4gd2UK
Pj4+Pj4+Pj4+PiByZW1vdmVkIGl0LiBCZXNpZGVzLCB3ZSByZWZlcnJlZCB0byB0aGUgbWluaW9z
IGxvZ2ljIGF0IFsyXSwgCj4+Pj4+Pj4+Pj4gaXQgb25seSBjYWxsZWQKPj4+Pj4+Pj4+PiB1bm1h
c2sgYW5kIG1hc2sgaW4gYmxvY2tfZG9tYWluICh3aGljaCBpcyBlcXVpdmFsZW50IHRvIAo+Pj4+
Pj4+Pj4+IHVuaWtyYWZ0J3MKPj4+Pj4+Pj4+PiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykKPj4+
Pj4+Pj4+Cj4+Pj4+Pj4+PiBMb29raW5nIGF0IG15IGNvbW1lbnRzIGFnYWluLCBJIGFtIG5vdCBz
dXJlIHdoZXJlIEkgc3VnZ2VzdGVkIHRvCj4+Pj4+Pj4gcmVtb3ZlCj4+Pj4+Pj4+PiBnZW5lcmlj
X3RpbWVyX21hc2tfaXJxKCkuLi4gQ2FuIHlvdSBleHBhbmQgaXQ/Cj4+Pj4+Pj4+IE9rYXkuLi4g
c29ycnkgZm9yIG15IG1pc3Rha2VzLiBJIHdpbGwgYWRkIAo+Pj4+Pj4+PiBnZW5lcmljX3RpbWVy
X21hc2tfaXJxKCkgYmFjay4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBGV0lXLCB0aGUgdHdvIG1haW4g
Y29tbWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb25zIHdlcmU6Cj4+Pj4+Pj4+PiDCoMKgwqDC
oMKgIDEpIGlzYigpIHNob3VsZCBiZSBhZGRlZCBhZnRlciB1cGRhdGluZyB0aGUgc3lzdGVtIAo+
Pj4+Pj4+Pj4gcmVnaXN0ZXIgdG8KPj4+Pj4+Pj4+IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gc3lz
dGVtIGlzIHN5bmNocm9uaXplZAo+Pj4+Pj4+Pj4gwqDCoMKgwqDCoCAyKSBUaGlzIGlzIGNvbW1v
biBjb2RlIGJldHdlZW4gYXJtMzIgYW5kIGFybTY0LiBCdXQgdGhlIAo+Pj4+Pj4+Pj4gc3lzdGVt
Cj4+Pj4+Pj4+PiByZWdpc3RlciBuYW1lIGFyZSBhcm02NC4uLiBBY2Nlc3NlcyBzaG91bGQgYmUg
c3R1YiBpbiAKPj4+Pj4+Pj4+IGFyY2gtc3BlY2lmaWMKPj4+Pj4+Pj4+IGhlYWRlciBzbyB0aGUg
Y29kZSBjYW4gd29yayBmb3IgYm90aCBhcm0zMiBhbmQgYXJtNjQuCj4+Pj4+Pj4+IEkgcmVuYW1l
ZCBwbGF0L2NvbW1vbi9hcm0vdGltZS5jIHRvIHBsYXQvY29tbW9uL2FybS90aW1lX2FybTY0LmMK
Pj4+Pj4+Pj4gU2VlbXMgdGhhdCBpcyBub3QgZW5vdWdoIGZvciB5b3U/wqAgSWYgbm8sIEkgaGF2
ZSBubyBvYmplY3Rpb25zIAo+Pj4+Pj4+PiB0byBtYWtlCj4+Pj4+Pj4+IGEgc3R1YsKgIGZvciBh
cm0zMi4KPj4+Pj4+Pgo+Pj4+Pj4+IFdlbGwsIHRoZSBvbmx5IGJpdHMgYXJtNjQgc3BlY2lmaWNz
IGluIHRoaXMgZmlsZSBhcmUgdGhlIGFjY2VzcyAKPj4+Pj4+PiB0byB0aGUKPj4+Pj4+PiBzeXN0
ZW0gcmVnaXN0ZXJzLiBTbyByZW5hbWluZyB0byB0aW1lX2FybTY0LmMgc2VlbXMgYSBiaXQgCj4+
Pj4+Pj4gb3ZlcmtpbGwuLi4KPj4+Pj4+Pgo+Pj4+Pj4+IElmIHRoZXJlIGFyZSBwbGFuIHRvIG1h
a2UgYXJtMzIgYSBjb3JyZWN0IHBvcnQgb24gVW5pa3JhZnQsIHRoZW4KPj4+Pj4+PiBzcGxpdHRp
bmcgdGhlIGNvZGUgd291bGQgYmUgdGhlIGJlc3QuIElmIHRoZXJlIGFyZSBubyBwbGFuIHRvIAo+
Pj4+Pj4+IGdldCBhcm0zMiwKPj4+Pj4+PiB0aGVuIG1heWJlIHlvdSBzaG91bGQgdGhpbmsgb2Yg
a2lsbGluZyBpdCBjb21wbGV0ZWx5Lgo+Pj4+Pj4KPj4+Pj4+IEFybTMyIHhlbiBwbGF0IGlzIGlu
aXRpYWxseSBzdXBwb3J0ZWQgYnV0IG5vIG9uZcKgIGhhcyB0b3VjaGVkIAo+Pj4+Pj4gdGhhdCBm
b3IgYSBsb25nCj4+Pj4+PiB0aW1lLiBDdXJyZW50bHkgbGV04oCZcyBmb2N1cyBvbiBhcm02NCBr
dm0gcGxhdCBvbmx5LiBJZiB0aGUgCj4+Pj4+PiByZXF1aXJlbWVudHMgY2hhbmdlcywKPj4+Pj4+
IHdlIGNhbiBzdXBwb3J0IGFybTMyIGFkZGl0aW9uYWxseS4gV2hhdCBkbyB5b3UgdGhpbmsgYWJv
dXQgaXQ/Cj4+Pj4+Cj4+Pj4+IEkgYW0gbm90IGFza2luZyB0byBpbXBsZW1lbnQgYXJtMzIsIEkg
YW0gb25seSBzdWdnZXN0aW5nIHRvIHRyeSB0byAKPj4+Pj4gc3BsaXQgdGhlIGNvZGUgcmF0aGVy
IHRoYW4gdHJ5aW5nIHRvIG1peCBjb21tb24gY29kZSB2cyBhcmNoIAo+Pj4+PiBzcGVjaWZpYyBj
b2RlIGluIHBsYXQvY29tbW9uL2FybS4gVGhhdCBkaXJlY3RvcnkgaW4gcGFydGljdWxhciBpcyAK
Pj4+Pj4gbG9va2luZyBtZXNzaWVyIGFuZCBtZXNzaWVyIGFzIG5ldyBzZXJpZXMgYXJlIHBvc3Rl
ZC4KPj4+Pgo+Pj4+IEkgYWdyZWUgd2l0aCBKdWxpZW4gaXQgaXMgYmV0dGVyIHRvIHNwbGl0IHRo
ZSBhcm0zMiBjb2RlIGZyb20gdGhlIAo+Pj4+IGFybTY0IGNvZGUuIE15IHN1Z2dlc3Rpb24gd291
bGQgYmUKPj4+Pgo+Pj4+IHBsYXQvY29tbW9uL2FybSBmb3IgMzItYml0IGNvZGUKPj4+Pgo+Pj4+
IHBsYXQvY29tbW9uL2FybTY0IGZvciB0aGUgNjQtYml0Lgo+Pj4KPj4+IFdlbGwgeW91IGNhbiBz
aGFyZSBhIGxvdCBvZiBjb2RlIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQuIElmIHdlIAo+Pj4g
dGFrZSB0aGUgZXhhbXBsZSBvZiB0aGUgYXJjaCB0aW1lciwgdGhlIG9ubHkgZGlmZmVyZW5jZSBp
cyB0aGUgd2F5IAo+Pj4gdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMgKGkuZS4gc3lzdGVtIHJlZ2lz
dGVycyB2cyBjby1wcm9jZXNzb3IgCj4+PiByZWdpc3RlcnMpLgo+Pgo+PiBTaW5jZSBpdCBpcyBw
cmltYXJpbHkgYWJvdXQgdGhlIGNvIHByb2Nlc3NvciBhbmQgc3lzdGVtIHJlZ2lzdGVyLiBIb3cg
Cj4+IGFib3V0IHB1c2hpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgcmVzcGVjdGl2ZSBo
ZWFkZXIuCj4KPiBGb3IgdGhlIHRpbWVyIHRoaXMgaXMgbW9zdGx5IHN5c3RlbSByZWdpc3Rlciwg
YnV0IHRoZXJlIGFyZS93aWxsIGJlIAo+IHNwZWNpZmljIGFybTY0L2FybTMyIGNvZGUgKHN1Y2gg
YXMgYXNzZW1ibHkgZmlsZSkuIFNvIEkgd291bGQgCj4gcmVjb21tZW5kIHRvIGNyZWF0ZSBhIGRp
cmVjdG9yeSB0cmVlIHRoYXQgYWxsb3dzIHN1Y2ggc3BsaXQuCgpJIGFncmVlLgoKPgo+Pgo+PiBw
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS90aW1lLmgKPj4KPj4gwqDCoMKgwqAgVGhlIGhlYWRlciBp
bmNsdWRlcyBhcmNoIHNwZWNpZmljIGhlYWRlciBmaWxlcy4KPj4KPj4gcGxhdC9jb21tb24vaW5j
bHVkZS9hcm0vYXJtNjQvdGltZS5oCj4+Cj4+IMKgwqDCoCBQcm92aWRlcyBhIGFyY2hpdGVjdHVy
ZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmb3IgcmVhZGluZyAKPj4gc3lzdGVtIHJlZ2lzdGVy
cyB3aGlsZSBwcm92aWRpbmcgYSBtYWNybyBkZWZpbml0aW9uIGZvciByZWFkaW5nIAo+PiByZWdp
c3RlciBsaWtlOgo+Pgo+PiDCoMKgI2RlZmluZcKgIGVsMF9jbnR2X2N0bF9nZXTCoCBTWVNSRUdf
UkVBRDMyKGNudHZfY3RsX2VsMCkKPj4KPj4gwqDCoCNkZWZpbmXCoCBlbDBfY250dl9jdGxfc2V0
KHZhbCnCoCAoY250dl9jdGxfZWwwLCB2YWwpCj4KPiBUaGVyZSBhcmUgZG96ZW5zIG9mIHN5c3Rl
bSByZWdpc3RlcnMsIHNvIEkgYW0gbm90IHN1cmUgeW91IHdvdWxkIHdhbnQgCj4gdG8gY3JlYXRl
IGhlbHBlciBmb3IgZXZlcnkgb2YgdGhlbS4gSXQgd291bGQgYmUgYmVzdCBpZiB5b3UgZmluZCBh
IHdheSAKPiB0byBhYnN0cmFjdCB0aGlzLgoKSSBhZ3JlZSB3ZSBjb3VsZCBhYnN0cmFjdCBpdCBt
b3JlIHVzaW5nIHRoZSBBQXJjaDY0IHN5c3RlbSByZWdpc3RlciBuYW1lLgoKI2RlZmluZSBlbDBf
Z2V0KHJlZykgU1lTUkVHX1JFQUQoICMjIHJlZyAjIyApCgoKPgo+IEZvciBpbnN0YW5jZSwgb24g
WGVuLCB3ZSBjaG9zZSB0byB1c2UgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIG9mIHRoZSAKPiBBQXJj
aDY0IHN5c3RlbSByZWdpc3RlciBuYW1lLiBGb3IgQUFyY2gzMiwgdGhleSB3aWxsIGJlIGFsaWFz
ZWQgdG8gdGhlIAo+IEFBcmNoNjQgb25lLgoKV2UgY291bGQgYWRvcHQgdGhlIHNhbWUgc2NoZW1l
LgoKCj4gT24gYSBzaWRlIG5vdGUsIHRoZXJlIGFyZSBubyBzdWNoIDMyLWJpdCBzeXN0ZW0gcmVn
aXN0ZXIuIFRoZXkgYXJlIAo+IGFsd2F5cyA2NC1iaXQsIGl0IGp1c3QgaGFwcGVucyB0aGF0IHNv
bWUgb2YgdGhlbSBoYXZlIHRoZSB0b3AgMzIgYml0cyAKPiBSRVMwIChpLmUuIHJlc2VydmVkKS4g
SSBoYXZlIGZvdW5kIG11bHRpcGxlIGlzc3VlcyBpbiBYZW4gYmVjYXVzZSBzb21lIAo+IGJpdHMg
ZW5kZWQgdXAgdG8gYmUgZGVmaW5lZCBpbiBuZXdlciByZXZpc2lvbiBvZiB0aGUgc3BlYyAob3Ig
ZXZlbiAKPiByZXRyb2FjdGl2ZWx5KS4KPgo+IEdDQyBkb2VzIG5vdCBzZWVtIHRvIGNhcmUgbXVj
aCBpZiB5b3UgcGFzcyBhIDMyLWJpdCB2YWx1ZSBmb3Igc3lzdGVtIAo+IHJlZ2lzdGVyLiBCdXQg
Q2xhbmcgd2lsbCBjb21wbGFpbiBsb3VkbHkgYWJvdXQgaXQuCj4KPiBJIG5vdGljZWQgdGhhdCB5
b3UgaGF2ZSBsaW1pdGVkIHVzZSBvZiBTWVNSRUdfKiBoZWxwZXJzIHNvIGZhci4gU28gaXQgCj4g
bWlnaHQgYmUgYmVzdCB0byBmaXggaXQgbm90IHJhdGhlciBsYXRlciB0byBhdm9pZCBhbnkgc3Ry
dWdnbGUuCj4KPiBDaGVlcnMsCj4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 16:20:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 16:20:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBLeG-0000dX-8f; Fri, 20 Sep 2019 16:20:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBLeF-0000dC-Ff
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 16:20:43 +0000
X-Inumbo-ID: 96c058f8-dbc2-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 96c058f8-dbc2-11e9-b299-bc764e2007e4;
 Fri, 20 Sep 2019 16:20:41 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id C6C281056E8;
 Fri, 20 Sep 2019 18:20:40 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id L-HQf_SilYxG; Fri, 20 Sep 2019 18:20:40 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 9F37D1055EF
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 18:20:40 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 18:20:40 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 18:20:32 +0200
Message-ID: <1568996434-14751-1-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 0/2] Introduce to inittab to solo5
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBhdGNoIGFkZCBzdXBwb3J0IGZvciBpbml0dGFiIGluIHRoZSBzb2xvNSBwbGF0Zm9ybS4g
SXQgYWxzbyBmaXhlcyB0aGUgbGlua2VyIHNjcmlwdCB0bwp1c2UgdGhlIGN0b3IgdmFyaWFibGVz
LgoKU2hhcmFuIFNhbnRoYW5hbSAoMik6CiAgc29sbzUvbGRzOiBVc2UgdGhlIGNvcnJlY3QgY3Rv
ciB2YXJpYWJsZQogIHNvbG81OiBBZGQgaW5pdHRhYiBzZWN0aW9uCgogbGluazY0LmxkcyB8IDkg
KysrKysrKystCiAxIGZpbGUgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p
CgotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 16:20:47 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 16:20:47 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBLeJ-0000eE-AH; Fri, 20 Sep 2019 16:20:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBLeI-0000dw-4u
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 16:20:46 +0000
X-Inumbo-ID: 9812ea0e-dbc2-11e9-9597-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9812ea0e-dbc2-11e9-9597-12813bfff9fa;
 Fri, 20 Sep 2019 16:20:44 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 01AE5F2002;
 Fri, 20 Sep 2019 18:20:43 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id b6RpVEKBw6bZ; Fri, 20 Sep 2019 18:20:42 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D001CF2001
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 18:20:40 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 18:20:40 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 18:20:33 +0200
Message-ID: <1568996434-14751-2-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1568996434-14751-1-git-send-email-sharan.santhanam@neclab.eu>
References: <1568996434-14751-1-git-send-email-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 1/2] solo5/lds: Use the correct ctor
 variable
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogbGluazY0LmxkcyB8IDMgKystCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25z
KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbGluazY0LmxkcyBiL2xpbms2NC5sZHMK
aW5kZXggMGMxNTFiNy4uMjI1ZjU3ZCAxMDA2NDQKLS0tIGEvbGluazY0LmxkcworKysgYi9saW5r
NjQubGRzCkBAIC02Myw4ICs2Myw5IEBAIFNFQ1RJT05TIHsKICAgICAudWtfY3RvcnRhYiA6CiAg
ICAgewogICAgICAgICAgICAgS0VFUCgqKFNPUlRfQllfTkFNRSgudWtfY3RvcnRhYlswLTddKSkp
Ci0gICAgICAgICAgICBMT05HKDApCiAgICAgfQorICAgIHVrX2N0b3J0YWJfZW5kID0gLjsKKwog
CiAgICAgLiA9IEFMSUdOKDB4MTAwMCk7CiAgICAgLyogUmVhZC1vbmx5IGRhdGEgKi8KLS0gCjIu
Ny40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 16:20:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 16:20:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBLeL-0000f0-Bo; Fri, 20 Sep 2019 16:20:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=gqFl=XP=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iBLeK-0000en-EF
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 16:20:48 +0000
X-Inumbo-ID: 9946f80c-dbc2-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9946f80c-dbc2-11e9-b299-bc764e2007e4;
 Fri, 20 Sep 2019 16:20:45 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 10F00F2003;
 Fri, 20 Sep 2019 18:20:45 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 6x0P_RyrinAJ; Fri, 20 Sep 2019 18:20:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DA78EF2001
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 18:20:42 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 18:20:40 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 20 Sep 2019 18:20:34 +0200
Message-ID: <1568996434-14751-3-git-send-email-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.7.4
In-Reply-To: <1568996434-14751-1-git-send-email-sharan.santhanam@neclab.eu>
References: <1568996434-14751-1-git-send-email-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH 2/2] solo5: Add inittab section
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIu
ZXU+Ci0tLQogbGluazY0LmxkcyB8IDYgKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRp
b25zKCspCgpkaWZmIC0tZ2l0IGEvbGluazY0LmxkcyBiL2xpbms2NC5sZHMKaW5kZXggMjI1ZjU3
ZC4uMTVhNWNjYSAxMDA2NDQKLS0tIGEvbGluazY0LmxkcworKysgYi9saW5rNjQubGRzCkBAIC02
Niw2ICs2NiwxMiBAQCBTRUNUSU9OUyB7CiAgICAgfQogICAgIHVrX2N0b3J0YWJfZW5kID0gLjsK
IAorCXVrX2luaXR0YWJfc3RhcnQgPSAuOworCS51a19pbml0dGFiIDoKKwl7CisJCUtFRVAoKihT
T1JUX0JZX05BTUUoLnVrX2luaXR0YWJfWzEtNl1bMC05XSkpKQorCX0KKwl1a19pbml0dGFiX2Vu
ZCA9IC47CiAKICAgICAuID0gQUxJR04oMHgxMDAwKTsKICAgICAvKiBSZWFkLW9ubHkgZGF0YSAq
LwotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 20 20:38:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 20 Sep 2019 20:38:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iBPfN-0004v5-PQ; Fri, 20 Sep 2019 20:38:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=5eEG=XP=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iBPfM-0004uq-RR
 for minios-devel@lists.xen.org; Fri, 20 Sep 2019 20:38:08 +0000
X-Inumbo-ID: 8c7e629e-dbe6-11e9-95a1-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 8c7e629e-dbe6-11e9-95a1-12813bfff9fa;
 Fri, 20 Sep 2019 20:38:06 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 6F2581056F0;
 Fri, 20 Sep 2019 22:38:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id bGsTJiZ_S1Zx; Fri, 20 Sep 2019 22:38:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4C8DC1056DF
 for <minios-devel@lists.xen.org>; Fri, 20 Sep 2019 22:38:05 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 20 Sep
 2019 22:38:04 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 20 Sep 2019 22:38:04
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH] plat/kvm: Missing header for
 STACK_SIZE_PAGE_ORDER
Thread-Index: AQHVb8b2bxv8WYRVdkqCRi7qpZvtbqc1BwwA
Date: Fri, 20 Sep 2019 20:38:04 +0000
Message-ID: <FEAF6F03-19AE-4793-9B0C-E6F98E21F086@neclab.eu>
References: <1568992820-11871-1-git-send-email-sharan.santhanam@neclab.eu>
In-Reply-To: <1568992820-11871-1-git-send-email-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <E71582A5BCF2D34F937D06B3E08C8E22@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] plat/kvm: Missing header for
 STACK_SIZE_PAGE_ORDER
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLA0KDQpUaGlzIHBhdGNoIGxvb2tzIGdvb2QsIHRoYW5rcy4NCg0KLS0gRmVsaXBl
DQoNClJldmlld2VkLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQoN
Cu+7v09uIDIwLjA5LjE5LCAxNzoyMCwgIk1pbmlvcy1kZXZlbCBvbiBiZWhhbGYgb2YgU2hhcmFu
IFNhbnRoYW5hbSIgPG1pbmlvcy1kZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIG9u
IGJlaGFsZiBvZiBTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBUaGUg
ZW50cnkgY29kZSBpbiBhYXJjaDY0IHJlcXVpcmVzIENPTkZJR19TVEFDS19TSVpFX1BBR0VfT1JE
RVIuIFRoZQ0KICAgIHBhdGNoIGluY2x1ZGVzIGNvbmZpZy5oIHdoZXJlIHRoZSBjb25maWd1cmF0
aW9uIGlzIGRlZmluZWQuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5h
bSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+DQogICAgLS0tDQogICAgIGluY2x1ZGUvdWsv
YXJjaC9saW1pdHMuaCB8IDEgKw0KICAgICAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKykN
CiAgICANCiAgICBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9hcmNoL2xpbWl0cy5oIGIvaW5jbHVk
ZS91ay9hcmNoL2xpbWl0cy5oDQogICAgaW5kZXggYjExYmY3ZC4uOWZhM2M2OSAxMDA2NDQNCiAg
ICAtLS0gYS9pbmNsdWRlL3VrL2FyY2gvbGltaXRzLmgNCiAgICArKysgYi9pbmNsdWRlL3VrL2Fy
Y2gvbGltaXRzLmgNCiAgICBAQCAtMzYsNiArMzYsNyBAQA0KICAgICAjaWZuZGVmIF9fVUtBUkNI
X0xJTUlUU19IX18NCiAgICAgI2RlZmluZSBfX1VLQVJDSF9MSU1JVFNfSF9fDQogICAgIA0KICAg
ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+DQogICAgICNpbmNsdWRlIDx1ay9hc20vbGltaXRzLmg+
DQogICAgIA0KICAgICAjZGVmaW5lIFNUQUNLX01BU0tfVE9QICAgICAgICAgICAofihfX1NUQUNL
X1NJWkUgLSAxKSkNCiAgICAtLSANCiAgICAyLjcuNA0KICAgIA0KICAgIA0KICAgIF9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAg
IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWwNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 06:48:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 06:48:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCI9R-0005X9-SE; Mon, 23 Sep 2019 06:48:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v1wY=XS=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCI9R-0005X4-1X
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 06:48:49 +0000
X-Inumbo-ID: 302b3582-ddce-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 302b3582-ddce-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 06:48:46 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E96F6F2013;
 Mon, 23 Sep 2019 08:48:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 53MZnIwaWLaO; Mon, 23 Sep 2019 08:48:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B7607F2012
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 08:48:42 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 08:48:42 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Mon, 23 Sep 2019 08:48:42
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v4 1/4] sys/mman.h: Import from
 musl
Thread-Index: AQHVb8p8RmuGumfUoEaB+1jD4YUuAqc41kmA
Date: Mon, 23 Sep 2019 06:48:42 +0000
Message-ID: <3F26ED0C-657F-4F34-9BA3-F49B2B925176@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
 <20190920154507.28709-2-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190920154507.28709-2-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <D73FD98022F36B4DB15C6B01D4B911D3@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v4 1/4] sys/mman.h: Import from
 musl
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNClRoYW5rcyBmb3IgdGhpcyBwYXRjaCBzZXJpZXMsIHRoaXMgcGF0
Y2ggbG9va3MgZ29vZC4NCg0KLS0gRmVsaXBlDQoNClJldmlld2VkLWJ5OiBGZWxpcGUgSHVpY2kg
PGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQoNCu+7v09uIDIwLjA5LjE5LCAxNzo0NSwgIk1pbmlv
cy1kZXZlbCBvbiBiZWhhbGYgb2YgQ2hhcmFsYW1wb3MgTWFpbmFzIiA8bWluaW9zLWRldmVsLWJv
dW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9mIENoYXJhbGFtcG9zLk1haW5h
c0BuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAgVGFrZW4gZnJvbSBtdXNsIGFzIGlzLg0KICAgIA0K
ICAgIFNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFz
QG5lY2xhYi5ldT4NCiAgICAtLS0NCiAgICAgbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1
ZGUvc3lzL21tYW4uaCB8IDE0OCArKysrKysrKysrKysrKysrKysrKw0KICAgICAxIGZpbGUgY2hh
bmdlZCwgMTQ4IGluc2VydGlvbnMoKykNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9ub2xp
YmMvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3N5cy9tbWFuLmgNCiAgICANCiAgICBkaWZmIC0tZ2l0
IGEvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL21tYW4uaCBiL2xpYi9ub2xp
YmMvbXVzbC1pbXBvcnRlZC9pbmNsdWRlL3N5cy9tbWFuLmgNCiAgICBuZXcgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDAwMDAwMDAwLi5kMDc2MWIxOA0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMvbW1hbi5oDQogICAg
QEAgLTAsMCArMSwxNDggQEANCiAgICArI2lmbmRlZglfU1lTX01NQU5fSA0KICAgICsjZGVmaW5l
CV9TWVNfTU1BTl9IDQogICAgKyNpZmRlZiBfX2NwbHVzcGx1cw0KICAgICtleHRlcm4gIkMiIHsN
CiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaW5jbHVkZSA8ZmVhdHVyZXMuaD4NCiAgICArDQog
ICAgKyNkZWZpbmUgX19ORUVEX21vZGVfdA0KICAgICsjZGVmaW5lIF9fTkVFRF9zaXplX3QNCiAg
ICArI2RlZmluZSBfX05FRURfb2ZmX3QNCiAgICArDQogICAgKyNpZiBkZWZpbmVkKF9HTlVfU09V
UkNFKQ0KICAgICsjZGVmaW5lIF9fTkVFRF9zc2l6ZV90DQogICAgKyNlbmRpZg0KICAgICsNCiAg
ICArI2luY2x1ZGUgPGJpdHMvYWxsdHlwZXMuaD4NCiAgICArDQogICAgKyNkZWZpbmUgTUFQX0ZB
SUxFRCAoKHZvaWQgKikgLTEpDQogICAgKw0KICAgICsjZGVmaW5lIE1BUF9TSEFSRUQgICAgIDB4
MDENCiAgICArI2RlZmluZSBNQVBfUFJJVkFURSAgICAweDAyDQogICAgKyNkZWZpbmUgTUFQX1NI
QVJFRF9WQUxJREFURSAweDAzDQogICAgKyNkZWZpbmUgTUFQX1RZUEUgICAgICAgMHgwZg0KICAg
ICsjZGVmaW5lIE1BUF9GSVhFRCAgICAgIDB4MTANCiAgICArI2RlZmluZSBNQVBfQU5PTiAgICAg
ICAweDIwDQogICAgKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAgTUFQX0FOT04NCiAgICArI2RlZmlu
ZSBNQVBfTk9SRVNFUlZFICAweDQwMDANCiAgICArI2RlZmluZSBNQVBfR1JPV1NET1dOICAweDAx
MDANCiAgICArI2RlZmluZSBNQVBfREVOWVdSSVRFICAweDA4MDANCiAgICArI2RlZmluZSBNQVBf
RVhFQ1VUQUJMRSAweDEwMDANCiAgICArI2RlZmluZSBNQVBfTE9DS0VEICAgICAweDIwMDANCiAg
ICArI2RlZmluZSBNQVBfUE9QVUxBVEUgICAweDgwMDANCiAgICArI2RlZmluZSBNQVBfTk9OQkxP
Q0sgICAweDEwMDAwDQogICAgKyNkZWZpbmUgTUFQX1NUQUNLICAgICAgMHgyMDAwMA0KICAgICsj
ZGVmaW5lIE1BUF9IVUdFVExCICAgIDB4NDAwMDANCiAgICArI2RlZmluZSBNQVBfU1lOQyAgICAg
ICAweDgwMDAwDQogICAgKyNkZWZpbmUgTUFQX0ZJWEVEX05PUkVQTEFDRSAweDEwMDAwMA0KICAg
ICsjZGVmaW5lIE1BUF9GSUxFICAgICAgIDANCiAgICArDQogICAgKyNkZWZpbmUgTUFQX0hVR0Vf
U0hJRlQgMjYNCiAgICArI2RlZmluZSBNQVBfSFVHRV9NQVNLICAweDNmDQogICAgKyNkZWZpbmUg
TUFQX0hVR0VfNjRLQiAgKDE2IDw8IDI2KQ0KICAgICsjZGVmaW5lIE1BUF9IVUdFXzUxMktCICgx
OSA8PCAyNikNCiAgICArI2RlZmluZSBNQVBfSFVHRV8xTUIgICAoMjAgPDwgMjYpDQogICAgKyNk
ZWZpbmUgTUFQX0hVR0VfMk1CICAgKDIxIDw8IDI2KQ0KICAgICsjZGVmaW5lIE1BUF9IVUdFXzhN
QiAgICgyMyA8PCAyNikNCiAgICArI2RlZmluZSBNQVBfSFVHRV8xNk1CICAoMjQgPDwgMjYpDQog
ICAgKyNkZWZpbmUgTUFQX0hVR0VfMzJNQiAgKDI1IDw8IDI2KQ0KICAgICsjZGVmaW5lIE1BUF9I
VUdFXzI1Nk1CICgyOCA8PCAyNikNCiAgICArI2RlZmluZSBNQVBfSFVHRV81MTJNQiAoMjkgPDwg
MjYpDQogICAgKyNkZWZpbmUgTUFQX0hVR0VfMUdCICAgKDMwIDw8IDI2KQ0KICAgICsjZGVmaW5l
IE1BUF9IVUdFXzJHQiAgICgzMSA8PCAyNikNCiAgICArI2RlZmluZSBNQVBfSFVHRV8xNkdCICAo
MzRVIDw8IDI2KQ0KICAgICsNCiAgICArI2RlZmluZSBQUk9UX05PTkUgICAgICAwDQogICAgKyNk
ZWZpbmUgUFJPVF9SRUFEICAgICAgMQ0KICAgICsjZGVmaW5lIFBST1RfV1JJVEUgICAgIDINCiAg
ICArI2RlZmluZSBQUk9UX0VYRUMgICAgICA0DQogICAgKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04g
MHgwMTAwMDAwMA0KICAgICsjZGVmaW5lIFBST1RfR1JPV1NVUCAgIDB4MDIwMDAwMDANCiAgICAr
DQogICAgKyNkZWZpbmUgTVNfQVNZTkMgICAgICAgMQ0KICAgICsjZGVmaW5lIE1TX0lOVkFMSURB
VEUgIDINCiAgICArI2RlZmluZSBNU19TWU5DICAgICAgICA0DQogICAgKw0KICAgICsjZGVmaW5l
IE1DTF9DVVJSRU5UICAgIDENCiAgICArI2RlZmluZSBNQ0xfRlVUVVJFICAgICAyDQogICAgKyNk
ZWZpbmUgTUNMX09ORkFVTFQgICAgNA0KICAgICsNCiAgICArI2RlZmluZSBQT1NJWF9NQURWX05P
Uk1BTCAgICAgMA0KICAgICsjZGVmaW5lIFBPU0lYX01BRFZfUkFORE9NICAgICAxDQogICAgKyNk
ZWZpbmUgUE9TSVhfTUFEVl9TRVFVRU5USUFMIDINCiAgICArI2RlZmluZSBQT1NJWF9NQURWX1dJ
TExORUVEICAgMw0KICAgICsjZGVmaW5lIFBPU0lYX01BRFZfRE9OVE5FRUQgICA0DQogICAgKw0K
ICAgICsjaWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkNCiAg
ICArI2RlZmluZSBNQURWX05PUk1BTCAgICAgIDANCiAgICArI2RlZmluZSBNQURWX1JBTkRPTSAg
ICAgIDENCiAgICArI2RlZmluZSBNQURWX1NFUVVFTlRJQUwgIDINCiAgICArI2RlZmluZSBNQURW
X1dJTExORUVEICAgIDMNCiAgICArI2RlZmluZSBNQURWX0RPTlRORUVEICAgIDQNCiAgICArI2Rl
ZmluZSBNQURWX0ZSRUUgICAgICAgIDgNCiAgICArI2RlZmluZSBNQURWX1JFTU9WRSAgICAgIDkN
CiAgICArI2RlZmluZSBNQURWX0RPTlRGT1JLICAgIDEwDQogICAgKyNkZWZpbmUgTUFEVl9ET0ZP
UksgICAgICAxMQ0KICAgICsjZGVmaW5lIE1BRFZfTUVSR0VBQkxFICAgMTINCiAgICArI2RlZmlu
ZSBNQURWX1VOTUVSR0VBQkxFIDEzDQogICAgKyNkZWZpbmUgTUFEVl9IVUdFUEFHRSAgICAxNA0K
ICAgICsjZGVmaW5lIE1BRFZfTk9IVUdFUEFHRSAgMTUNCiAgICArI2RlZmluZSBNQURWX0RPTlRE
VU1QICAgIDE2DQogICAgKyNkZWZpbmUgTUFEVl9ET0RVTVAgICAgICAxNw0KICAgICsjZGVmaW5l
IE1BRFZfV0lQRU9ORk9SSyAgMTgNCiAgICArI2RlZmluZSBNQURWX0tFRVBPTkZPUksgIDE5DQog
ICAgKyNkZWZpbmUgTUFEVl9IV1BPSVNPTiAgICAxMDANCiAgICArI2RlZmluZSBNQURWX1NPRlRf
T0ZGTElORSAxMDENCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWZkZWYgX0dOVV9TT1VSQ0UN
CiAgICArI2RlZmluZSBNUkVNQVBfTUFZTU9WRSAxDQogICAgKyNkZWZpbmUgTVJFTUFQX0ZJWEVE
IDINCiAgICArDQogICAgKyNkZWZpbmUgTUxPQ0tfT05GQVVMVCAweDAxDQogICAgKw0KICAgICsj
ZGVmaW5lIE1GRF9DTE9FWEVDIDB4MDAwMVUNCiAgICArI2RlZmluZSBNRkRfQUxMT1dfU0VBTElO
RyAweDAwMDJVDQogICAgKyNkZWZpbmUgTUZEX0hVR0VUTEIgMHgwMDA0VQ0KICAgICsjZW5kaWYN
CiAgICArDQogICAgKyNpbmNsdWRlIDxiaXRzL21tYW4uaD4NCiAgICArDQogICAgK3ZvaWQgKm1t
YXAgKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBvZmZfdCk7DQogICAgK2ludCBtdW5t
YXAgKHZvaWQgKiwgc2l6ZV90KTsNCiAgICArDQogICAgK2ludCBtcHJvdGVjdCAodm9pZCAqLCBz
aXplX3QsIGludCk7DQogICAgK2ludCBtc3luYyAodm9pZCAqLCBzaXplX3QsIGludCk7DQogICAg
Kw0KICAgICtpbnQgcG9zaXhfbWFkdmlzZSAodm9pZCAqLCBzaXplX3QsIGludCk7DQogICAgKw0K
ICAgICtpbnQgbWxvY2sgKGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCiAgICAraW50IG11bmxvY2sg
KGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsNCiAgICAraW50IG1sb2NrYWxsIChpbnQpOw0KICAgICtp
bnQgbXVubG9ja2FsbCAodm9pZCk7DQogICAgKw0KICAgICsjaWZkZWYgX0dOVV9TT1VSQ0UNCiAg
ICArdm9pZCAqbXJlbWFwICh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBpbnQsIC4uLik7DQogICAg
K2ludCByZW1hcF9maWxlX3BhZ2VzICh2b2lkICosIHNpemVfdCwgaW50LCBzaXplX3QsIGludCk7
DQogICAgK2ludCBtZW1mZF9jcmVhdGUgKGNvbnN0IGNoYXIgKiwgdW5zaWduZWQpOw0KICAgICtp
bnQgbWxvY2syIChjb25zdCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQpOw0KICAgICsjZW5kaWYN
CiAgICArDQogICAgKyNpZiBkZWZpbmVkKF9HTlVfU09VUkNFKSB8fCBkZWZpbmVkKF9CU0RfU09V
UkNFKQ0KICAgICtpbnQgbWFkdmlzZSAodm9pZCAqLCBzaXplX3QsIGludCk7DQogICAgK2ludCBt
aW5jb3JlICh2b2lkICosIHNpemVfdCwgdW5zaWduZWQgY2hhciAqKTsNCiAgICArI2VuZGlmDQog
ICAgKw0KICAgICtpbnQgc2htX29wZW4gKGNvbnN0IGNoYXIgKiwgaW50LCBtb2RlX3QpOw0KICAg
ICtpbnQgc2htX3VubGluayAoY29uc3QgY2hhciAqKTsNCiAgICArDQogICAgKyNpZiBkZWZpbmVk
KF9MQVJHRUZJTEU2NF9TT1VSQ0UpIHx8IGRlZmluZWQoX0dOVV9TT1VSQ0UpDQogICAgKyNkZWZp
bmUgbW1hcDY0IG1tYXANCiAgICArI2RlZmluZSBvZmY2NF90IG9mZl90DQogICAgKyNlbmRpZg0K
ICAgICsNCiAgICArI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgK30NCiAgICArI2VuZGlmDQogICAg
KyNlbmRpZg0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KICAgIF9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwN
Cg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 07:13:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 07:13:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCIXm-0007xd-8J; Mon, 23 Sep 2019 07:13:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v1wY=XS=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCIXl-0007xY-HW
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 07:13:57 +0000
X-Inumbo-ID: b3270fa8-ddd1-11e9-95f2-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id b3270fa8-ddd1-11e9-95f2-12813bfff9fa;
 Mon, 23 Sep 2019 07:13:54 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 1F654F2013;
 Mon, 23 Sep 2019 09:13:53 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 8VNTxXzFdqAE; Mon, 23 Sep 2019 09:13:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D22A0F2012
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 09:13:50 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 09:13:50 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Mon, 23 Sep 2019 09:13:50
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v4 2/4] sys/mman.h: Adapt to
 unikraft
Thread-Index: AQHVb8p64zEtjHQRbEaFwFja5L1ru6c43U+A
Date: Mon, 23 Sep 2019 07:13:50 +0000
Message-ID: <DB80EA24-D3E1-4C26-9865-E6C740139B00@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
 <20190920154507.28709-3-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190920154507.28709-3-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <38140D8E1F18634F83DC906C2A179E25@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v4 2/4] sys/mman.h: Adapt to
 unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNClRoaXMgcGF0Y2ggbG9va3MgZ29vZCwgSSdsbCByZW1vdmUgdGhl
IFRPRE9zIG9uIHVwc3RyZWFtaW5nIHNpbmNlIG5vbGliYyB3aWxsIG5ldmVyIHN1cHBvcnQgbXVz
bC1pbnRlcm5hbCBoZWFkZXJzLg0KDQotLSBGZWxpcGUNCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBI
dWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCu+7vw0KDQpPbiAyMC4wOS4xOSwgMTc6NDUs
ICJNaW5pb3MtZGV2ZWwgb24gYmVoYWxmIG9mIENoYXJhbGFtcG9zIE1haW5hcyIgPG1pbmlvcy1k
ZXZlbC1ib3VuY2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIG9uIGJlaGFsZiBvZiBDaGFyYWxhbXBv
cy5NYWluYXNAbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFNpZ25lZC1vZmYtYnk6IENoYXJhbGFt
cG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAgICAg
bGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL21tYW4uaCB8IDcgKysrKy0tLQ0K
ICAgICAxIGZpbGUgY2hhbmdlZCwgNCBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQ0KICAg
IA0KICAgIGRpZmYgLS1naXQgYS9saWIvbm9saWJjL211c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMv
bW1hbi5oIGIvbGliL25vbGliYy9tdXNsLWltcG9ydGVkL2luY2x1ZGUvc3lzL21tYW4uaA0KICAg
IGluZGV4IGQwNzYxYjE4Li44YTQyODQwMyAxMDA2NDQNCiAgICAtLS0gYS9saWIvbm9saWJjL211
c2wtaW1wb3J0ZWQvaW5jbHVkZS9zeXMvbW1hbi5oDQogICAgKysrIGIvbGliL25vbGliYy9tdXNs
LWltcG9ydGVkL2luY2x1ZGUvc3lzL21tYW4uaA0KICAgIEBAIC00LDcgKzQsNyBAQA0KICAgICBl
eHRlcm4gIkMiIHsNCiAgICAgI2VuZGlmDQogICAgIA0KICAgIC0jaW5jbHVkZSA8ZmVhdHVyZXMu
aD4NCiAgICArLyogVE9ETzogI2luY2x1ZGUgPGZlYXR1cmVzLmg+ICovDQogICAgIA0KICAgICAj
ZGVmaW5lIF9fTkVFRF9tb2RlX3QNCiAgICAgI2RlZmluZSBfX05FRURfc2l6ZV90DQogICAgQEAg
LTE0LDcgKzE0LDggQEAgZXh0ZXJuICJDIiB7DQogICAgICNkZWZpbmUgX19ORUVEX3NzaXplX3QN
CiAgICAgI2VuZGlmDQogICAgIA0KICAgIC0jaW5jbHVkZSA8Yml0cy9hbGx0eXBlcy5oPg0KICAg
ICsjaW5jbHVkZSA8bm9saWJjLWludGVybmFsL3NoYXJlZGRlZnMuaD4NCiAgICArLyogVE9ETzog
I2luY2x1ZGUgPGJpdHMvYWxsdHlwZXMuaD4gKi8NCiAgICAgDQogICAgICNkZWZpbmUgTUFQX0ZB
SUxFRCAoKHZvaWQgKikgLTEpDQogICAgIA0KICAgIEBAIC0xMDcsNyArMTA4LDcgQEAgZXh0ZXJu
ICJDIiB7DQogICAgICNkZWZpbmUgTUZEX0hVR0VUTEIgMHgwMDA0VQ0KICAgICAjZW5kaWYNCiAg
ICAgDQogICAgLSNpbmNsdWRlIDxiaXRzL21tYW4uaD4NCiAgICArLyogVE9ETzogI2luY2x1ZGUg
PGJpdHMvbW1hbi5oPiAqLw0KICAgICANCiAgICAgdm9pZCAqbW1hcCAodm9pZCAqLCBzaXplX3Qs
IGludCwgaW50LCBpbnQsIG9mZl90KTsNCiAgICAgaW50IG11bm1hcCAodm9pZCAqLCBzaXplX3Qp
Ow0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KICAgIF9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCg0KX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 07:14:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 07:14:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCIYK-0007yS-B7; Mon, 23 Sep 2019 07:14:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v1wY=XS=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCIYI-0007yN-Nj
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 07:14:30 +0000
X-Inumbo-ID: c6f0c6dc-ddd1-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id c6f0c6dc-ddd1-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 07:14:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 858CF105162;
 Mon, 23 Sep 2019 09:14:26 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id siipv4pqF8Oj; Mon, 23 Sep 2019 09:14:26 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 61F52105026
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 09:14:26 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 09:14:26 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Mon, 23 Sep 2019 09:14:26
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v4 3/4] lib/ukmmap: Introduce
 mmap and related functions library skeleton
Thread-Index: AQHVb8p8RBazZXYnNE6JwHFSytzMg6c43XqA
Date: Mon, 23 Sep 2019 07:14:25 +0000
Message-ID: <84FF507F-965A-4964-9B78-979BBE3198E2@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
 <20190920154507.28709-4-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190920154507.28709-4-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <4847AEBB3943204DBB38AE976FAB45CB@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v4 3/4] lib/ukmmap: Introduce
 mmap and related functions library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNClRoaXMgcGF0Y2ggbG9va3MgZ29vZC4NCg0KLS0gRmVsaXBlDQoN
ClJldmlld2VkLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQrvu78N
Ck9uIDIwLjA5LjE5LCAxNzo0NSwgIk1pbmlvcy1kZXZlbCBvbiBiZWhhbGYgb2YgQ2hhcmFsYW1w
b3MgTWFpbmFzIiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24g
YmVoYWxmIG9mIENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAgU2ln
bmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFi
LmV1Pg0KICAgIC0tLQ0KICAgICBsaWIvTWFrZWZpbGUudWsgICAgICAgICAgfCAxICsNCiAgICAg
bGliL3VrbW1hcC9Db25maWcudWsgICAgIHwgNSArKysrKw0KICAgICBsaWIvdWttbWFwL01ha2Vm
aWxlLnVrICAgfCAxICsNCiAgICAgbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrIHwgMSArDQogICAg
IDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBsaWIvdWttbWFwL0NvbmZpZy51aw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1h
cC9NYWtlZmlsZS51aw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3VrbW1hcC9leHBvcnRz
eW1zLnVrDQogICAgDQogICAgZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZS51ayBiL2xpYi9NYWtl
ZmlsZS51aw0KICAgIGluZGV4IGExNjk3MTk4Li4yY2E5OTczZiAxMDA2NDQNCiAgICAtLS0gYS9s
aWIvTWFrZWZpbGUudWsNCiAgICArKysgYi9saWIvTWFrZWZpbGUudWsNCiAgICBAQCAtMzEsMyAr
MzEsNCBAQCAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklHX1VLX0JBU0UpL2xpYi91
azlwKSkNCiAgICAgJChldmFsICQoY2FsbCBfaW1wb3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9s
aWIvcG9zaXgtbGliZGwpKQ0KICAgICAkKGV2YWwgJChjYWxsIF9pbXBvcnRfbGliLCQoQ09ORklH
X1VLX0JBU0UpL2xpYi91a2xpYnBhcmFtKSkNCiAgICAgJChldmFsICQoY2FsbCBfaW1wb3J0X2xp
YiwkKENPTkZJR19VS19CQVNFKS9saWIvdWt0aW1lKSkNCiAgICArJChldmFsICQoY2FsbCBfaW1w
b3J0X2xpYiwkKENPTkZJR19VS19CQVNFKS9saWIvdWttbWFwKSkNCiAgICBkaWZmIC0tZ2l0IGEv
bGliL3VrbW1hcC9Db25maWcudWsgYi9saWIvdWttbWFwL0NvbmZpZy51aw0KICAgIG5ldyBmaWxl
IG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMDAuLjU3Mzk1ZjIwDQogICAgLS0tIC9kZXYv
bnVsbA0KICAgICsrKyBiL2xpYi91a21tYXAvQ29uZmlnLnVrDQogICAgQEAgLTAsMCArMSw1IEBA
DQogICAgK2NvbmZpZyBMSUJVS01NQVANCiAgICArCWJvb2wgInVrbW1hcDogbW1hcCBzeXN0ZW0g
Y2FsbCINCiAgICArCWRlZmF1bHQgbg0KICAgICsJc2VsZWN0IExJQk5PTElCQyBpZiAhSEFWRV9M
SUJDDQogICAgKwlzZWxlY3QgTElCVUtBTExPQw0KICAgIGRpZmYgLS1naXQgYS9saWIvdWttbWFw
L01ha2VmaWxlLnVrIGIvbGliL3VrbW1hcC9NYWtlZmlsZS51aw0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMDAuLjhhYzNhYjNjDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL2xpYi91a21tYXAvTWFrZWZpbGUudWsNCiAgICBAQCAtMCwwICsxIEBADQogICAg
KyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidWttbWFwLCQoQ09ORklHX0xJQlVLTU1BUCkpKQ0K
ICAgIGRpZmYgLS1naXQgYS9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsgYi9saWIvdWttbWFwL2V4
cG9ydHN5bXMudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAw
Li42MjFlOTRmMA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWIvdWttbWFwL2V4cG9y
dHN5bXMudWsNCiAgICBAQCAtMCwwICsxIEBADQogICAgK25vbmUNCiAgICAtLSANCiAgICAyLjE3
LjENCiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 07:14:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 07:14:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCIYg-0007zu-DP; Mon, 23 Sep 2019 07:14:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v1wY=XS=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCIYf-0007zo-FS
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 07:14:53 +0000
X-Inumbo-ID: d5a600de-ddd1-11e9-95f2-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id d5a600de-ddd1-11e9-95f2-12813bfff9fa;
 Mon, 23 Sep 2019 07:14:52 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 27934105162;
 Mon, 23 Sep 2019 09:14:51 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id BIMC1c4Z7nUJ; Mon, 23 Sep 2019 09:14:51 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 01D07105026
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 09:14:51 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 09:14:50 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Mon, 23 Sep 2019 09:14:50
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v4 4/4] lib/ukmmap: mmap trick
 for Go
Thread-Index: AQHVb8p+VhnGMS7870iEd1AixH9Fqqc43ZgA
Date: Mon, 23 Sep 2019 07:14:50 +0000
Message-ID: <F45CF9BB-468A-4CA1-8FA9-947C7B5CE074@neclab.eu>
References: <20190920154507.28709-1-Charalampos.Mainas@neclab.eu>
 <20190920154507.28709-5-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190920154507.28709-5-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <F98D962602E4F146A4ED9601DCB233B1@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v4 4/4] lib/ukmmap: mmap trick
 for Go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNClRoYW5rcyBmb3IgdGhpcyBwYXRjaCBzZXJpZXMsIHRoaXMgcGF0
Y2ggbG9va3MgZ29vZC4NCg0KLS0gRmVsaXBlDQoNClJldmlld2VkLWJ5OiBGZWxpcGUgSHVpY2kg
PGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQoNCu+7v09uIDIwLjA5LjE5LCAxNzo0NSwgIk1pbmlv
cy1kZXZlbCBvbiBiZWhhbGYgb2YgQ2hhcmFsYW1wb3MgTWFpbmFzIiA8bWluaW9zLWRldmVsLWJv
dW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9mIENoYXJhbGFtcG9zLk1haW5h
c0BuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAgU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFp
bmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBsaWIvdWtt
bWFwL01ha2VmaWxlLnVrICAgfCAgIDIgKw0KICAgICBsaWIvdWttbWFwL2V4cG9ydHN5bXMudWsg
fCAgIDMgKy0NCiAgICAgbGliL3VrbW1hcC9tbWFwLmMgICAgICAgIHwgMTY2ICsrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KICAgICAzIGZpbGVzIGNoYW5nZWQsIDE3MCBp
bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIv
dWttbWFwL21tYXAuYw0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9saWIvdWttbWFwL01ha2VmaWxl
LnVrIGIvbGliL3VrbW1hcC9NYWtlZmlsZS51aw0KICAgIGluZGV4IDhhYzNhYjNjLi43MWZmNDMy
ZiAxMDA2NDQNCiAgICAtLS0gYS9saWIvdWttbWFwL01ha2VmaWxlLnVrDQogICAgKysrIGIvbGli
L3VrbW1hcC9NYWtlZmlsZS51aw0KICAgIEBAIC0xICsxLDMgQEANCiAgICAgJChldmFsICQoY2Fs
bCBhZGRsaWJfcyxsaWJ1a21tYXAsJChDT05GSUdfTElCVUtNTUFQKSkpDQogICAgKw0KICAgICtM
SUJVS01NQVBfU1JDUy15ICs9ICQoTElCVUtNTUFQX0JBU0UpL21tYXAuYw0KICAgIGRpZmYgLS1n
aXQgYS9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsgYi9saWIvdWttbWFwL2V4cG9ydHN5bXMudWsN
CiAgICBpbmRleCA2MjFlOTRmMC4uYTMxYzYzNmIgMTAwNjQ0DQogICAgLS0tIGEvbGliL3VrbW1h
cC9leHBvcnRzeW1zLnVrDQogICAgKysrIGIvbGliL3VrbW1hcC9leHBvcnRzeW1zLnVrDQogICAg
QEAgLTEgKzEsMiBAQA0KICAgIC1ub25lDQogICAgK21tYXANCiAgICArbXVubWFwDQogICAgZGlm
ZiAtLWdpdCBhL2xpYi91a21tYXAvbW1hcC5jIGIvbGliL3VrbW1hcC9tbWFwLmMNCiAgICBuZXcg
ZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAwLi40ZTI0ZjM3OQ0KICAgIC0tLSAv
ZGV2L251bGwNCiAgICArKysgYi9saWIvdWttbWFwL21tYXAuYw0KICAgIEBAIC0wLDAgKzEsMTY2
IEBADQogICAgKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8NCiAg
ICArLyoNCiAgICArICoNCiAgICArICogQXV0aG9yczogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFy
YWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1Pg0KICAgICsgKg0KICAgICsgKg0KICAgICsgKiBDb3B5
cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLg0KICAgICsgKg0KICAgICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAgICArICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zDQogICAgKyAqIGFyZSBtZXQ6DQogICAgKyAqDQogICAgKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4NCiAgICArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICArICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICAg
ICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBj
b3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzDQogICAgKyAqICAgIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tDQogICAgKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uDQogICAgKyAqDQogICAgKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KICAg
ICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFDQogICAgKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQogICAgKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBP
UiBDT05UUklCVVRPUlMgQkUNCiAgICArICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KICAgICsgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
Rg0KICAgICsgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCiAgICArICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCiAgICAr
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkNCiAgICArICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUNCiAgICArICogUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgKyAqDQogICAgKyAqIFRISVMgSEVBREVSIE1B
WSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuDQogICAgKyAqLw0KICAg
ICsNCiAgICArI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQogICAgKyNpbmNsdWRlIDx1ay9hbGxvYy5o
Pg0KICAgICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgKw0KICAgICtzdHJ1Y3QgbW1hcF9hZGRy
IHsNCiAgICArCXZvaWQgKmJlZ2luOw0KICAgICsJdm9pZCAqZW5kOw0KICAgICsJc3RydWN0IG1t
YXBfYWRkciAqbmV4dDsNCiAgICArfTsNCiAgICArDQogICAgK3N0YXRpYyBzdHJ1Y3QgbW1hcF9h
ZGRyICptbWFwX2FkZHI7DQogICAgKw0KICAgICsvKioNCiAgICArICogVGhpcyBpcyBub3QgYSBj
b3JyZWN0IGltcGxlbWVudGF0aW9uIG9mIG1tYXAuIEl0IGlzIGp1c3QgYSB0cmljayB0aGF0IHdv
cmtzDQogICAgKyAqIGZvciBHbyBidXQgaXQgbmVlZHMgdG8gYmUgcmV2aXNpdGVkLiBJbnN0ZWFk
IG9mIG1hcHBpbmcsIGl0IGFsbG9jYXRlcyBsZW4NCiAgICArICogYnl0ZXMgb2YgbWVtb3J5IGFu
ZCBzdG9yZXMgdGhlIGJlZ2lubmluaWcgYW5kIHRoZSBlbmQgb2YgdGhhdCBtZW1vcnkgY2h1bmsN
CiAgICArICogaW4gc3RydWN0IG1tYXBfYWRkci4gQXQgZmlyc3QgaXQgY2hlY2tzIGlmIGFkZHIg
YmVsb25ncyB0byBvbmUgb2YgdGhlIG1lbW9yeQ0KICAgICsgKiBjaHVua3MgdGhhdCBoYXZlIGJl
ZW4gYWxsb2NhdGVkIGluIGEgcHJldmlvdXMgY2FsbCBvZiBtbWFwLiBJZiB0aGF0IGlzIHRoZQ0K
ICAgICsgKiBjYXNlIGFkZHIgaXMgdGhlIHJldHVybiB2YWx1ZS4gT3RoZXJ3aXNlIGEgbmV3IG1l
bW9yeSBibG9jayBpcyBhbGxvY2F0ZWQgYW5kDQogICAgKyAqIHRoZSByZXR1cm4gdmFsdWUgaXMg
YSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmlnIG9mIHRoYXQgYmxvY2suDQogICAgKyAqDQogICAg
KyAqIEdvIHVzZXMgbW1hcCBhbHdheXMgd2l0aDoNCiAgICArICogQHByb3QgICA9CWVpdGhlciBQ
Uk9UX05PTkUgb3IgUFJPVF9SRUFEfFBST1RfV1JJVEUsDQogICAgKyAqIEBmbGFncyAgPQlhcyBN
QVBfQU5PTnxNQVBfUFJJVkFURSwgb3IgTUFQX0ZJWEVEfE1BUF9BTk9OfE1BUF9QUklWQVRFDQog
ICAgKyAqCQlvciBNQVBfTk9SRVNFUlZFfE1BUF9BTk9OfE1BUF9QUklWQVRFDQogICAgKyAqIEBm
aWxkZXMgPQktMQ0KICAgICsgKiBAb2ZmICAgID0JMA0KICAgICsgKg0KICAgICsgKi8NCiAgICAr
DQogICAgK3ZvaWQgKm1tYXAodm9pZCAqYWRkciwgc2l6ZV90IGxlbiwgaW50IHByb3QsDQogICAg
KwkJaW50IGZsYWdzLCBpbnQgZmlsZGVzLCBvZmZfdCBvZmYpDQogICAgK3sNCiAgICArCXN0cnVj
dCBtbWFwX2FkZHIgKnRtcCA9IG1tYXBfYWRkciwgKmxhc3QgPSBOVUxMLCAqbmV3ID0gTlVMTDsN
CiAgICArDQogICAgKwlpZiAoIWxlbikgew0KICAgICsJCWVycm5vID0gRUlOVkFMOw0KICAgICsJ
CXJldHVybiAodm9pZCAqKSAtMTsNCiAgICArCX0NCiAgICArDQogICAgKwkvKiBDaGVjayBpZiBw
YXJhbWV0ZXJzIG1hdGNoIHRoZSBvbmVzIHRoYXQgZ28gdXNlDQogICAgKwkgKiBPdGhlcndpc2Ug
cmV0dXJuIDAgKHVuaW1wbGVtZW50ZWQgbW1hcCkNCiAgICArCSAqLw0KICAgICsJaWYgKGZpbGRl
cyAhPSAtMSB8fCBvZmYpDQogICAgKwkJcmV0dXJuIDA7DQogICAgKwlpZiAoIShwcm90ICYgKFBS
T1RfUkVBRHxQUk9UX1dSSVRFKSkgJiYgKHByb3QgIT0gMCkpDQogICAgKwkJcmV0dXJuIDA7DQog
ICAgKwlpZiAoIShmbGFncyAmIChNQVBfQU5PTnxNQVBfUFJJVkFURSkpICYmDQogICAgKwkJCSEo
ZmxhZ3MgJiAoTUFQX0ZJWEVEfE1BUF9BTk9OfE1BUF9QUklWQVRFKSkgJiYNCiAgICArCQkJIShm
bGFncyAmIChNQVBfTk9SRVNFUlZFfE1BUF9BTk9OfE1BUF9QUklWQVRFKSkpDQogICAgKwkJcmV0
dXJuIDA7DQogICAgKw0KICAgICsJd2hpbGUgKHRtcCkgew0KICAgICsJCWlmIChhZGRyKSB7DQog
ICAgKwkJCWlmIChhZGRyID49IHRtcC0+YmVnaW4gJiYgYWRkciA8IHRtcC0+ZW5kKQ0KICAgICsJ
CQkJcmV0dXJuIGFkZHI7DQogICAgKwkJfQ0KICAgICsJCWxhc3QgPSB0bXA7DQogICAgKwkJdG1w
ID0gdG1wLT5uZXh0Ow0KICAgICsJfQ0KICAgICsJdm9pZCAqbWVtID0gdWtfbWFsbG9jKHVrX2Fs
bG9jX2dldF9kZWZhdWx0KCksIGxlbik7DQogICAgKw0KICAgICsJaWYgKCFtZW0pIHsNCiAgICAr
CQllcnJubyA9IEVOT01FTTsNCiAgICArCQlyZXR1cm4gKHZvaWQgKikgLTE7DQogICAgKwl9DQog
ICAgKwluZXcgPSB1a19tYWxsb2ModWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgc2l6ZW9mKHN0cnVj
dCBtbWFwX2FkZHIpKTsNCiAgICArCW5ldy0+YmVnaW4gPSBtZW07DQogICAgKwluZXctPmVuZCA9
IG1lbSArIGxlbjsNCiAgICArCW5ldy0+bmV4dCA9IE5VTEw7DQogICAgKwlpZiAoIW1tYXBfYWRk
cikNCiAgICArCQltbWFwX2FkZHIgPSBuZXc7DQogICAgKwllbHNlDQogICAgKwkJbGFzdC0+bmV4
dCA9IG5ldzsNCiAgICArCXJldHVybiBtZW07DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAg
KyAqIG11bm1hcCBmcmVlcyBsZW4gYnl0ZXMgb3MgbWVtb3J5IHN0YXJ0aW5nIGZyb20gYWRkci4N
CiAgICArICogYWRkciBuZWVkcyB0byBiZSBhIHBvaW50ZXIgdG8gYSBtZW1vcnkgYmxvY2sgdGhh
dCBoYXMgYmVlbiBhbGxvY2F0ZWQgZnJvbQ0KICAgICsgKiBtbWFwLiBJZiBsZW4gaGFzIHRoZSBz
YW1lIHZhbHVlIHdpdGggdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBibG9jayB0aGF0IGhhcw0KICAg
ICsgKiBiZWVuIGFsbG9jYXRlZCBmcm9tIG1tYXAgdGhlIHN0cnVjdCBtbWFwX2FkZHIgY291bnRl
cnBhcnQgaXMgZGVzdHJveWVkLg0KICAgICsgKiBPdGhlcndpc2UgdGhlIGluaXRpYWwgbWVtb3J5
IGJsb2NrIGlzIHJlcGxhY2VkIGJ5IGEgc21hbGxlciBvbmUuDQogICAgKyAqLw0KICAgICsNCiAg
ICAraW50IG11bm1hcCh2b2lkICphZGRyLCBzaXplX3QgbGVuKQ0KICAgICt7DQogICAgKwlzdHJ1
Y3QgbW1hcF9hZGRyICp0bXAgPSBtbWFwX2FkZHIsICpwcmV2ID0gTlVMTDsNCiAgICArCXNpemVf
dCByZW1haW5fbWVtOw0KICAgICsNCiAgICArCWlmICghbGVuKSB7DQogICAgKwkJZXJybm8gPSBF
SU5WQUw7DQogICAgKwkJcmV0dXJuIC0xOw0KICAgICsJfQ0KICAgICsJaWYgKCFhZGRyKQ0KICAg
ICsJCXJldHVybiAwOw0KICAgICsJd2hpbGUgKHRtcCkgew0KICAgICsJCWlmIChhZGRyICE9IHRt
cC0+YmVnaW4pIHsNCiAgICArCQkJaWYgKHRtcC0+ZW5kID4gYWRkciArIGxlbikgew0KICAgICsJ
CQkJZXJybm8gPSBFSU5WQUw7DQogICAgKwkJCQlyZXR1cm4gLTE7DQogICAgKwkJCX0NCiAgICAr
CQkJcmVtYWluX21lbSA9IHRtcC0+ZW5kIC0gYWRkciAtIGxlbjsNCiAgICArCQkJaWYgKHJlbWFp
bl9tZW0pIHsNCiAgICArDQogICAgKwkJCQl2b2lkICptZW0gPSB1a19tYWxsb2ModWtfYWxsb2Nf
Z2V0X2RlZmF1bHQoKSwNCiAgICArCQkJCQkJcmVtYWluX21lbSk7DQogICAgKwkJCQlpZiAoIW1l
bSkgew0KICAgICsJCQkJCWVycm5vID0gRU5PTUVNOw0KICAgICsJCQkJCXJldHVybiAtMTsNCiAg
ICArCQkJCX0NCiAgICArCQkJCW1lbWNweShtZW0sIGFkZHIrbGVuLCByZW1haW5fbWVtKTsNCiAg
ICArCQkJCXRtcC0+YmVnaW4gPSBtZW07DQogICAgKwkJCX0gZWxzZSB7DQogICAgKw0KICAgICsJ
CQkJaWYgKCFwcmV2KQ0KICAgICsJCQkJCW1tYXBfYWRkciA9IHRtcC0+bmV4dDsNCiAgICArCQkJ
CWVsc2UNCiAgICArCQkJCQlwcmV2LT5uZXh0ID0gdG1wLT5uZXh0Ow0KICAgICsJCQkJdWtfZnJl
ZSh1a19hbGxvY19nZXRfZGVmYXVsdCgpLCB0bXApOw0KICAgICsJCQl9DQogICAgKwkJCXVrX2Zy
ZWUodWtfYWxsb2NfZ2V0X2RlZmF1bHQoKSwgYWRkcik7DQogICAgKwkJCXJldHVybiAwOw0KICAg
ICsJCX0NCiAgICArCQlwcmV2ID0gdG1wOw0KICAgICsJCXRtcCA9IHRtcC0+bmV4dDsNCiAgICAr
CX0NCiAgICArCS8qIHVuaW1wbGVtZW50ZWQgbXVubWFwICovDQogICAgKwlyZXR1cm4gMDsNCiAg
ICArfQ0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KICAgIF9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAgTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZw0KICAgIGh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWwNCg0K
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 07:18:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 07:18:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCIcI-00083u-PA; Mon, 23 Sep 2019 07:18:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v1wY=XS=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCIcH-00083p-9A
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 07:18:37 +0000
X-Inumbo-ID: 5b4097a4-ddd2-11e9-b76c-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 5b4097a4-ddd2-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 07:18:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 5AE82105162;
 Mon, 23 Sep 2019 09:18:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Db1G-8DJ72QH; Mon, 23 Sep 2019 09:18:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 38E96105026
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 09:18:35 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 09:18:34 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Mon, 23 Sep 2019 09:18:34
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/NEWLIB PATCH v2] Remove mmap from
 newlib glue code and create a new internal library (libukmmap) for mmap
Thread-Index: AQHVbs1ZHCnbzFBrKEiqZZSzkyXIAac44J0A
Date: Mon, 23 Sep 2019 07:18:34 +0000
Message-ID: <B322680C-61D2-4CBB-AD99-8483C90DE71B@neclab.eu>
References: <20190919093325.13502-1-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190919093325.13502-1-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <CB18BB4D7FCA7048881C1D7A0DEF0E93@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/NEWLIB PATCH v2] Remove mmap from
 newlib glue code and create a new internal library (libukmmap) for mmap
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNClRoaXMgcGF0Y2ggbG9va3MgZ29vZCwgSSdsbCBjbGVhbiB1cCB0
aGUgY29tbWl0IG1lc3NhZ2Ugb24gdXBzdHJlYW0gKCJwbGVhc2UgaWdub3JlLi4uIiwgInBsZWFz
ZSByZXZpZXcuLi4iIGFyZSBpbnRlcm5hbCBub3RlcyBhbmQgZG9uJ3QgYmVsb25nIGluIHRoZSBj
b21taXQgbWVzc2FnZSkuDQoNClRoYW5rcywNCg0KLS0gRmVsaXBlDQoNClJldmlld2VkLWJ5OiBG
ZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQoNCu+7v09uIDE5LjA5LjE5LCAx
MTozMywgIk1pbmlvcy1kZXZlbCBvbiBiZWhhbGYgb2YgQ2hhcmFsYW1wb3MgTWFpbmFzIiA8bWlu
aW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9mIENoYXJh
bGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAgUGxlYXNlIGlnbm9yZSBmaXJz
dCB2ZXJzaW9uLiBDaGFuZ2VzIHNpbmNlIGxhc3QgdmVyc2lvbjoNCiAgICAgLSBBZGQgUEFUQ0gg
aW4gc3ViamVjdCBsaW5lIA0KICAgIA0KICAgIFBsZWFzZSByZXZpZXcgdGhpcyBwYXRjaCB3aXRo
IGxpYi91a21tYXAgcGF0Y2ggc2VyaWVzLg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IENoYXJh
bGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAg
ICAgZmlsZS5jIHwgMTIgLS0tLS0tLS0tLS0tDQogICAgIDEgZmlsZSBjaGFuZ2VkLCAxMiBkZWxl
dGlvbnMoLSkNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvZmlsZS5jIGIvZmlsZS5jDQogICAgaW5k
ZXggMDA2ZjE5MS4uZGE0NGUzNyAxMDA2NDQNCiAgICAtLS0gYS9maWxlLmMNCiAgICArKysgYi9m
aWxlLmMNCiAgICBAQCAtNTQsMTggKzU0LDYgQEAgZXh0ZXJuIGludCBlcnJubzsNCiAgICAgI2Rl
ZmluZSBTVERPVVRfRklMRU5PICAgMSAgICAgICAvKiBzdGFuZGFyZCBvdXRwdXQgZmlsZSBkZXNj
cmlwdG9yICovDQogICAgICNkZWZpbmUgU1RERVJSX0ZJTEVOTyAgIDIgICAgICAgLyogc3RhbmRh
cmQgZXJyb3IgZmlsZSBkZXNjcmlwdG9yICovDQogICAgIA0KICAgIC0jaW5jbHVkZSA8c3lzL21t
YW4uaD4NCiAgICAtdm9pZCAqbW1hcCh2b2lkICphZGRyIF9fdW51c2VkLCBzaXplX3QgbGVuIF9f
dW51c2VkLCBpbnQgcHJvdCBfX3VudXNlZCwNCiAgICAtCQlpbnQgZmxhZ3MgX191bnVzZWQsIGlu
dCBmaWxkZXMgX191bnVzZWQsIG9mZl90IG9mZiBfX3VudXNlZCkNCiAgICAtew0KICAgIC0JcmV0
dXJuIDA7DQogICAgLX0NCiAgICAtDQogICAgLWludCBtdW5tYXAodm9pZCAqYWRkciBfX3VudXNl
ZCwgc2l6ZV90IGxlbiBfX3VudXNlZCkNCiAgICAtew0KICAgIC0JcmV0dXJuIDA7DQogICAgLX0N
CiAgICAtDQogICAgICNpZiAhQ09ORklHX0xXSVBfU09DS0VUDQogICAgIGludCBwb2xsKHN0cnVj
dCBwb2xsZmQgX3BmZFtdIF9fdW51c2VkLCBuZmRzX3QgX25mZHMgX191bnVzZWQsDQogICAgIAkJ
aW50IF90aW1lb3V0IF9fdW51c2VkKQ0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0K
ICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAg
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 08:41:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 08:41:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCJuI-0007V3-AX; Mon, 23 Sep 2019 08:41:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=iYbJ=XS=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCJuH-0007Uy-1h
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 08:41:17 +0000
X-Inumbo-ID: e6ce6fc1-dddd-11e9-95f6-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id e6ce6fc1-dddd-11e9-95f6-12813bfff9fa;
 Mon, 23 Sep 2019 08:41:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 21B171055B4;
 Mon, 23 Sep 2019 10:41:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Qz4s_URtdecA; Mon, 23 Sep 2019 10:41:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id EF7281055B3
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 10:41:13 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 10:41:13 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, <minios-devel@lists.xen.org>
References: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
 <1568992606-11440-3-git-send-email-sharan.santhanam@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <b9623336-3eab-b06f-6afa-5dc52ea95eff@neclab.eu>
Date: Mon, 23 Sep 2019 10:41:13 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <1568992606-11440-3-git-send-email-sharan.santhanam@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/4] include/uk: Introduce init
 table
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGV5LAoKdGhpcyBwYXRjaCBsb29rcyBnb29kIHNvIGZhci4gSXQgc2VlbXMgdGhhdCB5b3UgZm9y
Z290IHRvIGFkZCBhIGxpY2Vuc2UgCmhlYWRlciA7LSkKClRoYW5rcywKClNpbW9uCgpPbiAyMC4w
OS4xOSAxNzoxNiwgU2hhcmFuIFNhbnRoYW5hbSB3cm90ZToKPiBUaGUgcGF0Y2ggaW50cm9kdWNl
cyB0aGUgaW50ZXJmYWNlIGZvciB0aGUgaW5pdHRhYi4gVGhlIHBhdGNoIHByb3ZpZGVzCj4gaW1w
bGVtZW50YXRpb24gdG8gZ3JvdXAgdGhlIGluaXQgZnVuY3Rpb24gaW50byB0aGUgcmVzcGVjdGl2
ZSBsaW5rZXIKPiBzZWN0aW9uLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0g
PHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pgo+IC0tLQo+ICAgaW5jbHVkZS91ay9pbml0Lmgg
ICAgfCA2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCj4gICBsaWIvdWtib290L0NvbmZpZy51ayB8ICAxICsKPiAgIDIgZmlsZXMgY2hhbmdlZCwg
NjYgaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWsvaW5pdC5o
Cj4gCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWsvaW5pdC5oIGIvaW5jbHVkZS91ay9pbml0LmgK
PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjkxY2I2ZWYKPiAtLS0gL2Rl
di9udWxsCj4gKysrIGIvaW5jbHVkZS91ay9pbml0LmgKPiBAQCAtMCwwICsxLDY1IEBACj4gKyNp
Zm5kZWYgX1VLX0lOSVRfSAo+ICsjZGVmaW5lIF9VS19JTklUX0gKPiArCj4gKyNpbmNsdWRlIDx1
ay9jb25maWcuaD4KPiArI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KPiArCj4gKyNpZmRlZiBf
X2NwbHVzcGx1cwo+ICtleHRlcm4gIkMiIHsKPiArI2VuZGlmCj4gKwo+ICt0eXBlZGVmIGludCAo
KnVrX2luaXRfdCkodm9pZCk7Cj4gKwo+ICsjZGVmaW5lIElOSVRUQUJfU1RSX1ZBUihsaWJuYW1l
LCBmbiwgYmFzZSwgcHJpbykgbGlibmFtZSAjIyBmbiAjIyBiYXNlICMjIHByaW8KPiArI2RlZmlu
ZSBJTklUVEFCX1NFQ1RJT04oYmFzZSwgcHJpbykgIC51a19pbml0dGFiXyAjIyBiYXNlICMjIHBy
aW8KPiArI2RlZmluZSBJTklUVEFCX1NFQ1RJT05fTkFNRShuYW1lKSBTVFJJTkdJRlkobmFtZSkK
PiArCj4gKyNkZWZpbmUgX19pbml0dGFiKGxpYm5hbWUsIGZuLCBiYXNlLCBwcmlvKQkJCQlcCj4g
KwlzdGF0aWMgIGNvbnN0IF9fdXNlZCBfX3NlY3Rpb24oSU5JVFRBQl9TRUNUSU9OX05BTUUoCQlc
Cj4gKwkJCQkJSU5JVFRBQl9TRUNUSU9OKGJhc2UsIHByaW8pKQlcCj4gKwkJCQkgICAgICApCQkJ
CQlcCj4gKwkJdWtfaW5pdF90IElOSVRUQUJfU1RSX1ZBUihsaWJuYW1lLCBmbiwgYmFzZSwgcHJp
bykgPSBmbgo+ICsKPiArLyoqCj4gKyAqIERlZmluZSBhIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24u
IEF0IHRoaXMgcG9pbnQgaW4gdGltZSBzb21lIHBsYXRmb3JtCj4gKyAqIGNvbXBvbmVudCBtYXkg
bm90IGJlIGluaXRpYWxpemVkLCBzbyBpdCB3aXNlIHRvIGluaXRpYWxpemVzIHRob3NlIGNvbXBv
bmVudAo+ICsgKiB0byBpbml0aWFsaXplZC4KPiArICovCj4gKyNkZWZpbmUgdWtfZWFybHlfaW5p
dGNhbGxfcHJpbyhmbiwgcHJpbykgIF9faW5pdHRhYihMSUJOQU1FLCBmbiwgMSwgcHJpbykKPiAr
LyoqCj4gKyAqIERlZmluZSBhIHN0YWdlIGZvciBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbi4gUGxh
dGZvcm0gYXQgdGhpcyBwb2ludCByZWFkCj4gKyAqIGFsbCB0aGUgZGV2aWNlIGFuZCBkZXZpY2Ug
YXJlIGluaXRpYWxpemVkLgo+ICsgKi8KPiArI2RlZmluZSB1a19wbGF0X2luaXRjYWxsX3ByaW8o
Zm4sIHByaW8pICBfX2luaXR0YWIoTElCTkFNRSwgZm4sIDIsIHByaW8pCj4gKy8qKgo+ICsgKiBE
ZWZpbmUgYSBzdGFnZSBmb3IgcGVyZm9ybWluZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLiBUaGlz
IGxpYnJhcnkKPiArICogaW5pdGlhbGl6YXRpb24gaXMgcGVyZm9ybWVkIGFmdGVyIHRoZSBwbGF0
Zm9ybSBpcyBjb21wbGV0ZWx5IGluaXRpYWxpemVkLgo+ICsgKi8KPiArI2RlZmluZSB1a19saWJf
aW5pdGNhbGxfcHJpbyhmbiwgcHJpbykJX19pbml0dGFiKExJQk5BTUUsIGZuLCAzLCBwcmlvKQo+
ICsvKioKPiArICogRGVmaW5lIGEgc3RhZ2UgZm9yIGZpbGVzeXN0ZW0gaW5pdGlhbGl6YXRpb24u
Cj4gKyAqLwo+ICsjZGVmaW5lIHVrX3Jvb3Rmc19pbml0Y2FsbF9wcmlvKGZuLCBwcmlvKSBfX2lu
aXR0YWIoTElCTkFNRSwgZm4sIDQsIHByaW8pCj4gKy8qKgo+ICsgKiBEZWZpbmUgYSBzdGFnZSBm
b3IgZGV2aWNlIGluaXRpYWxpemF0aW9uCj4gKyAqLwo+ICsjZGVmaW5lIHVrX3N5c19pbml0Y2Fs
bF9wcmlvKGZuLCBwcmlvKSBfX2luaXR0YWIoTElCTkFNRSwgZm4sIDUsIHByaW8pCj4gKy8qKgo+
ICsgKiBEZWZpbmUgYSBzdGFnZSBmb3IgYXBwbGljYXRpb24gcHJlLWluaXRpYWxpemF0aW9uCj4g
KyAqLwo+ICsjZGVmaW5lIHVrX2xhdGVfaW5pdGNhbGxfcHJpbyhmbiwgcHJpbykgIF9faW5pdHRh
YihMSUJOQU1FLCBmbiwgNiwgcHJpbykKPiArCj4gKy8qKgo+ICsgKiBTaW1pbGFyIGludGVyZmFj
ZSB3aXRob3V0IHByaW9yaXR5Lgo+ICsgKi8KPiArI2RlZmluZSB1a19lYXJseV9pbml0Y2FsbChm
bikgICAgIHVrX2Vhcmx5X2luaXRjYWxsX3ByaW8oZm4sIDkpCj4gKyNkZWZpbmUgdWtfcGxhdF9p
bml0Y2FsbChmbikgICAgICB1a19wbGF0X2luaXRjYWxsX3ByaW8oZm4sIDkpCj4gKyNkZWZpbmUg
dWtfbGliX2luaXRjYWxsKGZuKSAgICAgICB1a19saWJfaW5pdGNhbGxfcHJpbyhmbiwgOSkKPiAr
I2RlZmluZSB1a19yb290ZnNfaW5pdGNhbGwoZm4pICAgIHVrX3Jvb3Rmc19pbml0Y2FsbF9wcmlv
KGZuLCA5KQo+ICsjZGVmaW5lIHVrX3N5c19pbml0Y2FsbChmbikgICAgICAgdWtfc3lzX2luaXRj
YWxsX3ByaW8oZm4sIDkpCj4gKyNkZWZpbmUgdWtfbGF0ZV9pbml0Y2FsbChmbikgICAgICB1a19s
YXRlX2luaXRjYWxsX3ByaW8oZm4sIDkpCj4gKwo+ICsjaWZkZWYgX19jcGx1c3BsdXMKPiArfQo+
ICsjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KPiArI2VuZGlmIC8qIF9VS19JTklUX0ggKi8KPiBk
aWZmIC0tZ2l0IGEvbGliL3VrYm9vdC9Db25maWcudWsgYi9saWIvdWtib290L0NvbmZpZy51awo+
IGluZGV4IDg0MWE4NzYuLjRlYmQ2NTAgMTAwNjQ0Cj4gLS0tIGEvbGliL3VrYm9vdC9Db25maWcu
dWsKPiArKysgYi9saWIvdWtib290L0NvbmZpZy51awo+IEBAIC0yMSw0ICsyMSw1IEBAIGlmIExJ
QlVLQk9PVAo+ICAgCWJvb2wgIkluaXRpYWxpemUgdWthbGxvY2JidWRkeSBhcyBhbGxvY2F0b3Ii
Cj4gICAJZGVmYXVsdCB5Cj4gICAJc2VsZWN0IExJQlVLQUxMT0NCQlVERFkKPiArCj4gICBlbmRp
Zgo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 08:43:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 08:43:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCJwS-0007XE-HX; Mon, 23 Sep 2019 08:43:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=iYbJ=XS=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCJwQ-0007X9-VU
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 08:43:30 +0000
X-Inumbo-ID: 367c5816-ddde-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 367c5816-ddde-11e9-b299-bc764e2007e4;
 Mon, 23 Sep 2019 08:43:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8BD9BF2013;
 Mon, 23 Sep 2019 10:43:27 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id dtLOV8Wd0iy4; Mon, 23 Sep 2019 10:43:27 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 53707F2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 10:43:25 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 10:43:25 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, <minios-devel@lists.xen.org>
References: <1568992606-11440-1-git-send-email-sharan.santhanam@neclab.eu>
 <1568992606-11440-5-git-send-email-sharan.santhanam@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <d0f9e862-ed2b-24f8-8e91-ac9db3091eff@neclab.eu>
Date: Mon, 23 Sep 2019 10:43:24 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <1568992606-11440-5-git-send-email-sharan.santhanam@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 4/4] lib/ukboot: Iterate through
 the inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

CgpPbiAyMC4wOS4xOSAxNzoxNiwgU2hhcmFuIFNhbnRoYW5hbSB3cm90ZToKPiBBZGQgc3VwcG9y
dCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGluaXR0YWIgYW5kIGNhbGwgdGhlIGluaXQgZnVuY3Rp
b25zLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFu
YW1AbmVjbGFiLmV1Pgo+IC0tLQo+ICAgaW5jbHVkZS91ay9pbml0LmggfCAgNiArKysrKysKPiAg
IGxpYi91a2Jvb3QvYm9vdC5jIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCj4gICAyIGZpbGVz
IGNoYW5nZWQsIDI3IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9p
bml0LmggYi9pbmNsdWRlL3VrL2luaXQuaAo+IGluZGV4IDkxY2I2ZWYuLjQ2NmM5NTYgMTAwNjQ0
Cj4gLS0tIGEvaW5jbHVkZS91ay9pbml0LmgKPiArKysgYi9pbmNsdWRlL3VrL2luaXQuaAo+IEBA
IC01OSw2ICs1OSwxMiBAQCB0eXBlZGVmIGludCAoKnVrX2luaXRfdCkodm9pZCk7Cj4gICAjZGVm
aW5lIHVrX3N5c19pbml0Y2FsbChmbikgICAgICAgdWtfc3lzX2luaXRjYWxsX3ByaW8oZm4sIDkp
Cj4gICAjZGVmaW5lIHVrX2xhdGVfaW5pdGNhbGwoZm4pICAgICAgdWtfbGF0ZV9pbml0Y2FsbF9w
cmlvKGZuLCA5KQo+ICAgCj4gK2V4dGVybiBjb25zdCB1a19pbml0X3QgdWtfaW5pdHRhYl9zdGFy
dFtdOwo+ICtleHRlcm4gY29uc3QgdWtfaW5pdF90IHVrX2luaXR0YWJfZW5kOwo+ICsKPiArI2Rl
ZmluZSB1a19pbml0dGFiX2ZvcmVhY2goaW5pdF9zdGFydCwgaW5pdF9lbmQsIGl0cikJCVwKPiAr
CWZvciAoaXRyID0gREVDT05TVCh1a19pbml0X3QqLCBpbml0X3N0YXJ0KTsgaXRyIDwgJmluaXRf
ZW5kOyBpdHIrKykKPiArCj4gICAjaWZkZWYgX19jcGx1c3BsdXMKPiAgIH0KPiAgICNlbmRpZiAv
KiBfX2NwbHVzcGx1cyAqLwo+IGRpZmYgLS1naXQgYS9saWIvdWtib290L2Jvb3QuYyBiL2xpYi91
a2Jvb3QvYm9vdC5jCj4gaW5kZXggN2ZiMDkwOC4uNzA0NGQxYiAxMDA2NDQKPiAtLS0gYS9saWIv
dWtib290L2Jvb3QuYwo+ICsrKyBiL2xpYi91a2Jvb3QvYm9vdC5jCj4gQEAgLTU2LDYgKzU2LDcg
QEAKPiAgICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4gICAjaW5jbHVkZSA8dWsvcHJpbnQu
aD4KPiAgICNpbmNsdWRlIDx1ay9jdG9ycy5oPgo+ICsjaW5jbHVkZSA8dWsvaW5pdC5oPgo+ICAg
I2luY2x1ZGUgPHVrL2FyZ3BhcnNlLmg+Cj4gICAjaWYgQ09ORklHX0xJQlVLQlVTCj4gICAjaW5j
bHVkZSA8dWsvYnVzLmg+Cj4gQEAgLTgxLDYgKzgyLDIwIEBAIHN0YXRpYyB2b2lkIG1haW5fdGhy
ZWFkX2Z1bmModm9pZCAqYXJnKQo+ICAgCWludCBpOwo+ICAgCWludCByZXQ7Cj4gICAJc3RydWN0
IHRocmVhZF9tYWluX2FyZyAqdG1hID0gYXJnOwo+ICsJdWtfaW5pdF90ICppdHI7Cj4gKwo+ICsJ
LyoqCj4gKwkgKiBSdW4gaW5pdCB0YWJsZQo+ICsJICovCj4gKwl1a19wcl9pbmZvKCJJbml0IFRh
YmxlIEAgJXAgLSAlcFxuIiwgJnVrX2luaXR0YWJfc3RhcnRbMF0sCj4gKwkJICAgJnVrX2luaXR0
YWJfZW5kKTsKPiArCXVrX2luaXR0YWJfZm9yZWFjaCh1a19pbml0dGFiX3N0YXJ0LCB1a19pbml0
dGFiX2VuZCwgaXRyKSB7Cj4gKwkJcmV0ID0gKCppdHIpKCk7Cj4gKwkJaWYgKHJldCA8IDApIHsK
Ckh1bSwgY291bGQgeW91IGFkZCBhbiBlcnJvciBvciBkZWJ1ZyBtZXNzYWdlIGluIHRoZSBmb3Jt
IG9mOgoiSW5pdCBmdW5jdGlvbiAlcCByZXR1cm5lZCB3aXRoIGVycm9yICVkXG4iCkp1c3QgZm9y
IHRoZSBjYXNlIHRoYXQgc29tZSBpbml0IGZ1bmN0aW9ucyBtYXkgbm90IHByaW50IHRoZSBlcnJv
ciBjYXNlIApwcm9wZXJseS4gVGhlbiB0aGlzIGNvdWxkIGJlIHN0aWxsIGRlYnVnZ2VkIGJ5IGNv
bnNvbGUgbWVzc2FnZXMuCgo+ICsJCQlyZXQgPSBVS1BMQVRfQ1JBU0g7Cj4gKwkJCWdvdG8gZXhp
dDsKPiArCQl9Cj4gKwl9Cj4gICAKPiAgICNpZmRlZiBDT05GSUdfTElCVUtCVVMKPiAgIAl1a19w
cl9pbmZvKCJJbml0aWFsaXplIGJ1cyBoYW5kbGVycy4uLlxuIik7Cj4gQEAgLTE0OSw2ICsxNjQs
OCBAQCBzdGF0aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKPiAgIAlyZXQgPSBt
YWluKHRtYS0+YXJnYywgdG1hLT5hcmd2KTsKPiAgIAl1a19wcl9pbmZvKCJtYWluIHJldHVybmVk
ICVkLCBoYWx0aW5nIHN5c3RlbVxuIiwgcmV0KTsKPiAgIAlyZXQgPSAocmV0ICE9IDApID8gVUtQ
TEFUX0NSQVNIIDogVUtQTEFUX0hBTFQ7Cj4gKwo+ICtleGl0Ogo+ICAgCXVrcGxhdF90ZXJtaW5h
dGUocmV0KTsgLyogZG9lcyBub3QgcmV0dXJuICovCj4gICB9Cj4gICAKPiBAQCAtMjM5LDYgKzI1
NiwxMCBAQCB2b2lkIHVrcGxhdF9lbnRyeShpbnQgYXJnYywgY2hhciAqYXJndltdKQo+ICAgCX0K
PiAgICNlbmRpZgo+ICAgCj4gKy8qKgo+ICsgKiBBZGRpbmcgdGhlIGluaXQgdGFibGUuCj4gKyAq
Lwo+ICsKPiAgICNpZiBDT05GSUdfTElCVUtBTExPQwo+ICAgCXVrX3ByX2luZm8oIkluaXRpYWxp
emUgSVJRIHN1YnN5c3RlbS4uLlxuIik7Cj4gICAJcmMgPSB1a3BsYXRfaXJxX2luaXQoYSk7Cj4g
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:47:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:47:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwP-0004Wl-LY; Mon, 23 Sep 2019 09:47:33 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKwO-0004Wb-Dg
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:47:32 +0000
X-Inumbo-ID: 27957e1e-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 27957e1e-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:29 +0000 (UTC)
IronPort-SDR: VpRcRmc4258wyi4XOMRSaMP62UHBoX5UD24m1At6GE02scartfLBtrTzRTu/OJc2V3CSaD5O2M
 wuh6HIL2NxlQ==
IronPort-PHdr: =?us-ascii?q?9a23=3A2F9APhYLiPCioDgecEDXtOj/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZrs6zbnLW6fgltlLVR4KTs6sC17ON9fqwEjVQqdbZ6TZeKcYKD0?=
 =?us-ascii?q?dEwewt3CUYSPafDkP6KPO4JwcbJ+9lEGFfwnegLEJOE9z/bVCB6le77DoVBw?=
 =?us-ascii?q?mtfVEtfre9FYHdldm42P6v8JPPfQpImCC9YbRvJxmqsAndrMYbjZZsJ6or1B?=
 =?us-ascii?q?fEoXREd/lVyGh1IV6fgwvw6t2/8ZJ+7Shcoe4t+9JFXa7nY6k2ULtUASg8PW?=
 =?us-ascii?q?so/sPrrx7DTQWO5nsYTGoblwdDDhbG4h/nQJr/qzP2ueVh1iaUO832Vq00Vi?=
 =?us-ascii?q?+576h3Uh/oiTwIOCA//WrKl8F/lqNboBampxxi347ZZZyeOfRicq/Be94RWG?=
 =?us-ascii?q?xMVdtTWSNcGIOxd4sBAfQcM+hWrIfzoEADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsoTav3t8hhp?=
 =?us-ascii?q?TGi44I0FzJ9iV0zJwrKdGmSkN3e9CpHINNuyyVKod6WMAvTmFytCokxLALt4?=
 =?us-ascii?q?S3cDUFxZg5wRPUduaJfJKS4h35UeacOTJ4hHV4d72hnxuy6k2gyvHkVsmzzV?=
 =?us-ascii?q?ZKsjJJktnSuXAJ0Bze8taHSv5n8Ueg3TaDzRzc6vpeLUAsiKrUMIQtwqQ3lp?=
 =?us-ascii?q?YLsETDGDH5mFnugaOLeUgo5/Kk5ufnb7n8uJOQKY15hhvwP6g2n8ywG+U4Mg?=
 =?us-ascii?q?wAX2iB/uS80aXu8lH+QLVRkv02k6/ZvIreJcQGvq65HhRY3Zo46xqlFzemzc?=
 =?us-ascii?q?8XkWMdLFJCYB6HlZTmO0nSIPDkCveym1GskDZtx/DHOb3hGYzBIWXdn7f/Y7?=
 =?us-ascii?q?l971VRyA4yzdBE+5JUEasNIf3tVU/3rtDYCQU5MwOsyeb9FNp9zp8eWX6IAq?=
 =?us-ascii?q?KBPqPdr1uI5uM3I+aSfoMVuCv9K/k56P7vlnI5n0EScrWt3ZQNc3+0BOppI1?=
 =?us-ascii?q?iBa3r2ntgBCXsKvhY5TOHyll2CVSRcaGuqUK0m4DE0FZimApnCRoy3m7OOxj?=
 =?us-ascii?q?q0HppXZmBbEV2MCmvod5iZVPsWci2dPtRhniYZVbi5UIAtzwuutAipg4Zge+?=
 =?us-ascii?q?/V/Cwfrtfv2cZ448XXlAou7npkAsLb1HuCHE9umWZdbDgtwKF56Whg0krLha?=
 =?us-ascii?q?N/mOBZE5pX+utUegwhc4bBxapgDIahCUr6Yt6VRQP+EZ2dCjYrQ4dpzg=3D?=
 =?us-ascii?q?=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2COAQDWk4hdjAPjVY1lHQEBBQEMBQG?=
 =?us-ascii?q?BZ4MLUyASKo0eiR2aHwkBAQEpEQECAQGEP4M5OBMCAwkBAQUBAQEBAQUEARM?=
 =?us-ascii?q?BAQEmhV0Mgjoig2MLT4QkAYIOrF+FTIMygUiBNIcwhjE/gRGCXYYEhRYElkK?=
 =?us-ascii?q?WSgeCJWUEhhyFFIhlJ4I2cpV9j1aZMjgggVkzGnOCbAlHEBSBIwE2DgmHV4N?=
 =?us-ascii?q?yglw9AQExgQYBAY1lAQE?=
X-IPAS-Result: =?us-ascii?q?A2COAQDWk4hdjAPjVY1lHQEBBQEMBQGBZ4MLUyASKo0ei?=
 =?us-ascii?q?R2aHwkBAQEpEQECAQGEP4M5OBMCAwkBAQUBAQEBAQUEARMBAQEmhV0Mgjoig?=
 =?us-ascii?q?2MLT4QkAYIOrF+FTIMygUiBNIcwhjE/gRGCXYYEhRYElkKWSgeCJWUEhhyFF?=
 =?us-ascii?q?IhlJ4I2cpV9j1aZMjgggVkzGnOCbAlHEBSBIwE2DgmHV4Nyglw9AQExgQYBA?=
 =?us-ascii?q?Y1lAQE?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854254"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:26 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id D3B241A602F1;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id FECNAjMNl3SH; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B67E01A602E8;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 4ErHrEE64QZH; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 97EF71A602E4;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:01 +0300
Message-Id: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 00/13] Port Python 3 on
 Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgYXJlIHRoZSBwYXRjaGVzIG5lZWRlZCBmb3IgcG9ydGluZyBQeXRob24gMyBvbiBVbmlr
cmFmdC4gVG8gcHV0IGl0CnNpbXBsZSwgdGhlIHN1bW1hcnkgd291bGQgc291bmQgbGlrZSB0aGlz
OgotIFRoZSBmaXJzdCAzIHBhdGNoZXMgYXJlIHF1aXRlIGNvbW1vbi4KLSBUaGUgbmV4dCA1IGFk
ZCBhbmQgY3VzdG9taXplIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmVlZGVkIGJ5IHRoZSBQeXRob24K
ICBpbnRlcnByZXRlci4gVGhlc2UgZmlsZXMgYXJlIGNoYW5nZWQgaW4gb3JkZXIgdG8gcnVuIG9u
IFVuaWtyYWZ0LgotIFRoZSBuZXh0IDIgYWRkIGEgYml0IG1vcmUgZ2x1ZSBjb2RlLgotIFRoZSBu
ZXh0IHBhdGNoIGFkZHMgYSBtYWtlIHRhcmdldCBmb3IgY3JlYXRpbmcgUHl0aG9uIGVudmlyb25t
ZW50cyB3aGljaCB3aWxsCiAgYmUgbmVlZGVkIGZvciB0ZXN0aW5nLgotIFRoZSBsYXN0IG9uZSBh
ZGRzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgcnVubmluZyB0aGUgbWFpbigpIGZ1bmN0
aW9uCiAgZnJvbSB0aGUgZXh0ZXJuYWwgbGlicmFyeSwgd2hpY2ggd291bGQgc2ltcGxpZnkgdGhl
IGNyZWF0aW9uIG9mIGFuIGFwcC4KCkJlc2lkZXMgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0sIGFs
bCB0aGUgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHNlbnQgb24KdGhlIG1haWxpbmcg
bGlzdC4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gUmVtb3ZlIGV4cG9ydHN5bXMudWsKLSBTcGxpdCBp
bnRvIDIgbGlicywgY29yZSBhbmQgZXh0ZW5zaW9ucywgYmVjYXVzZSB0aGV5IGFyZSB1c2luZyBk
aWZmZXJlbnQgY29tcGlsaW5nIGZsYWdzCi0gRW5hYmxlIG1vcmUgZXh0ZW5zaW9uczogU1NMLCBV
VUlELCB6bGliLCBkZWNpbWFsIG9wZXJhdGlvbnMgd2l0aCBsaWJtcGRlYywgWE1MIHBhcnNpbmcg
d2l0aCBFeHBhdAoKQ29zdGluIEx1cHUgKDMpOgogIE1ha2VmaWxlLnVrOiBBZGQgcnVsZSBmb3Ig
Y3JlYXRpbmcgcm9vdCBmaWxlc3lzdGVtCiAgUHJvdmlkZSBtYWluKCkgZnVuY3Rpb24gaWYgY29u
ZmlndXJlZCB0byBkbyBzbwogIENvbmZpZy51azogQWRkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBm
b3IgZXh0ZW5zaW9ucwoKVmxhZC1BbmRyZWkgQmFkb2l1ICgxMCk6CiAgQWRkIE1ha2VmaWxlLnVr
CiAgcGF0Y2hlczogRml4IGJ1aWxkIGlzc3VlcwogIHB5Y29uZmlnLmg6IEludHJvZHVjZSBmaWxl
CiAgcHljb25maWcuaDogRGlzYWJsZSBmZWF0dXJlcyB0aGF0IGFyZSBub3QgYXZhaWFibGUgb24g
VW5pa3JhZnQKICBfc3lzY29uZmlnZGF0YS5weTogSW50cm9kdWNlIGZpbGUKICBfc3lzY29uZmln
ZGF0YS5weTogRGlzYWJsZSBmZWF0dXJlcyB0aGF0IGFyZSBub3QgYXZhaWFibGUgb24gVW5pa3Jh
ZnQKICBBZGQgbW9kdWxlc19jb25maWcuYwogIEFkZCBzdHVicy5jIGZvciBzdHViYmVkIGZ1bmN0
aW9ucwogIEFkZCBpbml0LmMgZm9yIGluaXRpYWxpemF0aW9uCiAgUkVBRE1FLm1kOiBVcGRhdGUg
d2l0aCBpbmZvIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nCgogQ29uZmlnLnVrICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1NiArCiBNYWtlZmlsZS51ayAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDg4ICsrKysrCiBSRUFETUUubWQgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQyICstCiBfc3lzY29uZmlnZGF0YS5w
eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzA3ICsrKysrKysrCiBpbmNsdWRlL3B5
Y29uZmlnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNTg5ICsrKysrKysrKysrKysr
KysrCiBpbml0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ2
ICsKIG1haW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDgg
KwogbW9kdWxlc19jb25maWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMyOCAr
KysrCiAuLi4xLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVDVkUucGF0Y2ggfCAgIDI2
ICsKIHBhdGNoZXMvMDAwMi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBhdGNoICAgICB8ICAgMzAg
Kwogc3R1YnMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0NSAr
CiAxMSBmaWxlcyBjaGFuZ2VkLCAzMzYyIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBfc3lzY29u
ZmlnZGF0YS5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvcHljb25maWcuaAogY3JlYXRl
IG1vZGUgMTAwNjQ0IGluaXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG1haW4uYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IG1vZHVsZXNfY29uZmlnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAw
MDEtVW5kZWZpbmUtSEFWRV9GT1JLLWFuZC1IQVZFX0VYRUNWRS5wYXRjaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IHBhdGNoZXMvMDAwMi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBhdGNoCiBjcmVhdGUg
bW9kZSAxMDA2NDQgc3R1YnMuYwoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:47:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:47:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwU-0004Xe-NB; Mon, 23 Sep 2019 09:47:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKwT-0004XM-9R
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:47:37 +0000
X-Inumbo-ID: 27d45684-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 27d45684-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:29 +0000 (UTC)
IronPort-SDR: qJ9/g8Kddd6I+NWGOg5EDV0sheWNf1+tr1IKgw7v8SHjhBzStBfTe3HgFbp/WLLX4aiTb96Zdt
 LGmuAJjdSXmQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AgYbVtBHsKnhNt88l9qijnZ1GYnF86YWxBRYc79?=
 =?us-ascii?q?8ds5kLTJ7ypM+wAkXT6L1XgUPTWs2DsrQY0rGQ6fCrADxIoc7Y9ixbKtoUD1?=
 =?us-ascii?q?5NoP5VtjRoONSCB0z/IayiRA0BN+MGamVY+WqmO1NeAsf0ag6aiHSz6TkPBk?=
 =?us-ascii?q?e3blItdaz6FYHIksu4yf259YHNbAVUnjq9Zq55IAmroQnLucQanIVvJrwvxh?=
 =?us-ascii?q?bKrXdEZudbzn5sKV6Pghrw/Mi98IN9/yhKp/4t68tMWrjmcqolSrBVEC4oOH?=
 =?us-ascii?q?0v6s3xshnDQwqP5n8CXWgTjxFFHQvL4gzkU5noqif1ufZz1yecPc3tULA7Qi?=
 =?us-ascii?q?+i4LtxSB/pkygIKTg0+3zKh8NqjaJbpBWhpwFjw4PRfYqYOuZycr/bcNgHQ2?=
 =?us-ascii?q?dKQ8RfWDFbAo6kb4UBEfcPM+hboYf6pVQOowCzCRWwCO711jNFnGP60bE83u?=
 =?us-ascii?q?88EQ/GxgsgH9cWvXnKq9X1L7sSUeGzzKLVyzvDcutW2Srg44XPbh8hpuqMXa?=
 =?us-ascii?q?5xccrX00UvEx7Fjk2NqYH+IzyVzf4Bs3CG7+V7T+6vkWknphh3rzOyxckskp?=
 =?us-ascii?q?HEip8ax1zZ7yl0w4Y4KcemREJlY9OoCpVduzmHO4Z5X88uWWJltSYgxrEYt5?=
 =?us-ascii?q?O2cjIGxIkoyhLBbfGMbpKG7Qj5VOmLJDd1nHdleLWiiBms6UWg0ej8VtWs0F?=
 =?us-ascii?q?ZNsypFjsHAtnAT2BzX7ciKUuV9/kK71jaO0wDf8P1LIVsumarDNp4u2aQ8lo?=
 =?us-ascii?q?AUsUjbHy/2nlv5jLOOe0k59eWk9v7rb7bmq5OGKYN4lAPzPr4gl8CnBOQ3KA?=
 =?us-ascii?q?kOX2yV+eSm073j+FX0T6lNjv0tjqnZsZbaKd4fpq6kGw9Vz50u5AqkDzu8yN?=
 =?us-ascii?q?QYgGIIIEhfeBKAl4TpIU3BIOjkDfejhFShiDJrx/HAPr3gBZXNNWHPn6r/cr?=
 =?us-ascii?q?Zj9UFczBE+zdRe55JPFrEBO+j/W0Dvu9zeFBM5NBa0w+n/AtVnyoweQX6PAr?=
 =?us-ascii?q?OeMK7Kv1+H+OYvI+iUZIALojr9K+Ul5//ygn84glIde7em0ocTaH+iBftqOV?=
 =?us-ascii?q?uWYWf0iNcbDWgKphY+TPDtiFCaTz5TY2y9UL8k6T4hDoKpEJ3DSZ6sgLCbxy?=
 =?us-ascii?q?i0BIBZZmdHClCRCnrobJmEW+oRZy6IOMBujicEWaK8S485zh6irhX6y700Zt?=
 =?us-ascii?q?bTrygZs5Pkz5156vPekTk29CdoFIKN3mfLSHt7zU0SQDpj96dkvU17gnOeyb?=
 =?us-ascii?q?Uw1/dfDsBS4bVNTx8nHZXHifRnAZboXVSSLZ+yVF+6T4D+UnkKRdUrzopWbg?=
 =?us-ascii?q?=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AEAADWk4hdjAPjVY1lGwEBAQEDAQE?=
 =?us-ascii?q?BDAMBAQGBUwYBAQELAYNdIBIqjD5giB+ZIoF7CQEBAToBAgEBhD8Cgzc0CQ4?=
 =?us-ascii?q?CAwkBAQUBAQEBAQUEARMBAQEmhWmCOiKCbgEDA3kQHAMBAh0STwgZgyKCD6o?=
 =?us-ascii?q?6giWFTIMygUiBNAGHL4YxP4RhhRGFFgSWQpZKB4IlZQSUFSeZJakIITeBWTM?=
 =?us-ascii?q?ag19QEBSBWg4JjiU9AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2AEAADWk4hdjAPjVY1lGwEBAQEDAQEBDAMBAQGBUwYBA?=
 =?us-ascii?q?QELAYNdIBIqjD5giB+ZIoF7CQEBAToBAgEBhD8Cgzc0CQ4CAwkBAQUBAQEBA?=
 =?us-ascii?q?QUEARMBAQEmhWmCOiKCbgEDA3kQHAMBAh0STwgZgyKCD6o6giWFTIMygUiBN?=
 =?us-ascii?q?AGHL4YxP4RhhRGFFgSWQpZKB4IlZQSUFSeZJakIITeBWTMag19QEBSBWg4Jj?=
 =?us-ascii?q?iU9AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854256"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id F1F701A602E5;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id aSoqtZOa5Tq7; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id D4E871A602F2;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id Xad3kacpJwsk; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id B72451A602EE;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:03 +0300
Message-Id: <20190923094714.21759-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 02/13] patches: Fix build
 issues
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKKiBVbmRlZmluZSBIQVZFX0ZPUksgYW5kIEhBVkVfRVhFQ1YKKiBGaXggY2FzdCBmb3Ig
cHRocmVhZF90CgpTaWduZWQtb2ZmLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVp
LmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Ci0tLQogLi4uMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5k
LUhBVkVfRVhFQ1ZFLnBhdGNoIHwgMjYgKysrKysrKysrKysrKysrKwogcGF0Y2hlcy8wMDAyLUFk
ZC1jYXN0LWZvci1wdGhyZWFkX3QucGF0Y2ggICAgIHwgMzAgKysrKysrKysrKysrKysrKysrKwog
MiBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0
Y2hlcy8wMDAxLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVDVkUucGF0Y2gKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9yLXB0aHJlYWRfdC5wYXRjaAoK
ZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5kLUhBVkVfRVhF
Q1ZFLnBhdGNoIGIvcGF0Y2hlcy8wMDAxLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVD
VkUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhNDk0ZgotLS0g
L2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5kLUhBVkVf
RVhFQ1ZFLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb20gNDdlNTdiYzQ2Y2FiM2M5MmY0MTM3
YmYxODM1MzRkNTkzZWJlYTIxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWQt
QW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KK0RhdGU6
IE1vbiwgMiBTZXAgMjAxOSAwNDoyMzozMCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvMV0gVW5k
ZWZpbmUgSEFWRV9GT1JLIGFuZCBIQVZFX0VYRUNWRQorCitTaWduZWQtb2ZmLWJ5OiBWbGFkLUFu
ZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CistLS0KKyBN
b2R1bGVzL3Bvc2l4bW9kdWxlLmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25z
KC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgYi9Nb2R1bGVzL3Bvc2l4
bW9kdWxlLmMKK2luZGV4IGI3NThlNzYuLmFlZDllMjIgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL3Bv
c2l4bW9kdWxlLmMKKysrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYworQEAgLTE3NSw4ICsxNzUs
NiBAQCBjb3JyZXNwb25kaW5nIFVuaXggbWFudWFsIGVudHJpZXMgZm9yIG1vcmUgaW5mb3JtYXRp
b24gb24gY2FsbHMuIik7CisgI2RlZmluZSBmc3luYyBfY29tbWl0CisgI2Vsc2UKKyAvKiBVbml4
IGZ1bmN0aW9ucyB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3QgY2hlY2sgZm9yICov
CistI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQorLSNkZWZpbmUgSEFWRV9GT1JLICAgICAgIDEK
KyAjaWYgZGVmaW5lZChfX1VTTENfXykgJiYgZGVmaW5lZChfX1NDT19WRVJTSU9OX18pICAgICAg
IC8qIFNDTyBVREsgQ29tcGlsZXIgKi8KKyAjZGVmaW5lIEhBVkVfRk9SSzEgICAgICAxCisgI2Vu
ZGlmCistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9y
LXB0aHJlYWRfdC5wYXRjaCBiL3BhdGNoZXMvMDAwMi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBh
dGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxN2FjMTUKLS0tIC9kZXYv
bnVsbAorKysgYi9wYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9yLXB0aHJlYWRfdC5wYXRjaApAQCAt
MCwwICsxLDMwIEBACitGcm9tIDcxMGYzOTc4YTlhMTA2OTA4ODJmMjg3NTdkM2Y0YTk1YzE3ZjRm
NmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZs
YWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CitEYXRlOiBNb24sIDIgU2VwIDIwMTkg
MDQ6Mjc6NDYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIEFkZCBjYXN0IGZvciBwdGhyZWFk
X3QKKworU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgorLS0tCisgUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggfCA1ICsr
KysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvUHl0
aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAoraW5kZXggZjc5
ZjliOS4uY2JmMTE0YSAxMDA2NDQKKy0tLSBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCisrKysg
Yi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorQEAgLTI1OCw3ICsyNTgsMTIgQEAgUHlUaHJlYWRf
Z2V0X3RocmVhZF9pZGVudCh2b2lkKQorICAgICBpZiAoIWluaXRpYWxpemVkKQorICAgICAgICAg
UHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKKyAgICAgdGhyZWFkaWQgPSBwdGhyZWFkX3NlbGYoKTsK
KysKKysjaWYgU0laRU9GX1BUSFJFQURfVCA8PSBTSVpFT0ZfTE9ORworICAgICByZXR1cm4gKHVu
c2lnbmVkIGxvbmcpIHRocmVhZGlkOworKyNlbHNlCisrICAgIHJldHVybiAodW5zaWduZWQgbG9u
ZykgKih1bnNpZ25lZCBsb25nICopICZ0aHJlYWRpZDsKKysjZW5kaWYKKyB9CisgCisgdm9pZAor
LS0gCisyLjIwLjEKKwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:47:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:47:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwZ-0004Ya-Py; Mon, 23 Sep 2019 09:47:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKwY-0004YK-9N
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:47:42 +0000
X-Inumbo-ID: 29e327e8-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 29e327e8-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:32 +0000 (UTC)
IronPort-SDR: dIXLR1mfrNqHvx1DlQp1GXGomEPLuVNHIjayyHEE8Ljlo6k3t7y29jOIhGab2KlsVR6+3GLtLw
 teG3QHxu2HLA==
IronPort-PHdr: =?us-ascii?q?9a23=3AAsDpNB+qemilGf9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B20OkcTK2v8tzYMVDF4r011RmVBN6dsaIP0rqe8/i5HzBZu9DZ6DFKWacPfi?=
 =?us-ascii?q?dNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV?=
 =?us-ascii?q?3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sAvcutMIjYZhJao91x?=
 =?us-ascii?q?jEqWZMd+hK2G9kP12ekwvi6suq4JJv7yFcsO89+sBdVqn3Y742RqFCAjQ8NG?=
 =?us-ascii?q?A16szrtR3dQgaK+3ARTGYYnAdWDgbc9B31UYv/vSX8tupmxSmVJtb2QqwuWT?=
 =?us-ascii?q?Sj9KhkVhnlgzoaOjEj8WHXjstwjL9HoB+kuhdyzZLYbJ2TOfFjeK7WYNEUSn?=
 =?us-ascii?q?dbXstJVyJPHJ6yYYUMAeQGP+lYoZLwq0cSoRakGQWhHv/jxiNOi3Tr3aM6ye?=
 =?us-ascii?q?MhEQTe0QE+GNIOq2jUrNTzNKwPV+610bHIzSjeZP5RxTj975PIcgwgofGKR7?=
 =?us-ascii?q?5wddfRyVEyFw7eklqQspbpPyuI1usWqWSb9e1gWPuphmU6qA9xuiCiytojh4?=
 =?us-ascii?q?XUnI4YyVDJ+T9nzIorJ9C0UkB2bca5HJZfqi2WLYh7T8M4T212tis3xKcKtY?=
 =?us-ascii?q?O0cSQUzpks2gTRZOadc4eS5xLuTOORITBli317YL+/nBOy8VS4yu37S8m0zE?=
 =?us-ascii?q?5GripbndnIsXAAzwLT6s2dRft8+ketwyqA1xvJ5uFcPEA7jrDXK4QmwrIol5?=
 =?us-ascii?q?oTt1rMHjPulUnrg6Kaa18o9+uo5uj9fLnquJ2RO5V6hw3mN6QhgM2/AeA2Mg?=
 =?us-ascii?q?gUWGib/Pyx26Hk/U3iXLVKj/s2nrPdsJDHPcQbu7W0DBNO0oo58xa/Eiyp3M?=
 =?us-ascii?q?4CnXkANF5FYg6Ij5D1O1HSJ/D1FfK/g1WqkDdqwPDGJaTtDYjTIXjdjrjhea?=
 =?us-ascii?q?1w60pdyAoo0dBf/IhYC74fL/L1QEPxs8bYDhAhOQyu3+nnEMl91p8ZWW+XDK?=
 =?us-ascii?q?+WLqfSsV6Q5u0xOeWMZJIVuDfhJPgk/PPui2E2lkMZfaazxpQbcm63Hul+KU?=
 =?us-ascii?q?WDfXXsmssBEXsNvgcmUuzqjEeNXiNLaHmoWaIz+ys7B5ynDYvZXY+imqGO3C?=
 =?us-ascii?q?C6Hp1LfW1GEUyMEWr1eImeQfgDdDmSLtV8kjwcTretUZUh1Rb9/DP9nr9mKO?=
 =?us-ascii?q?vT4WgUuIzu0PBx5vbPjlci+DoyCN6SgE+XSGQhtWQTWz4wlIRiuVE1nlyEyr?=
 =?us-ascii?q?R5hbpcCMROz/hSFB8nP9jGyLopWJjJRgvdc4LRGx6dSdK8DGRpQw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4NeIBIqjR6IH5sdCQEBAToBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQ?=
 =?us-ascii?q?BEwEBASaFaYI6IoJvAwN5ECAfBwtXGYMigg+sX4h+gUiBNIcwhjE/g3VshRG?=
 =?us-ascii?q?FFgSWQpZKB4IlZQSUFSeZJS2oWzgggVkzGoNfUBAUgWgejhA9AQExAYEFAQG?=
 =?us-ascii?q?NZQEB?=
X-IPAS-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQwEAQGBZ4NeIBIqj?=
 =?us-ascii?q?R6IH5sdCQEBAToBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQBEwEBASaFaYI6I?=
 =?us-ascii?q?oJvAwN5ECAfBwtXGYMigg+sX4h+gUiBNIcwhjE/g3VshRGFFgSWQpZKB4IlZ?=
 =?us-ascii?q?QSUFSeZJS2oWzgggVkzGoNfUBAUgWgejhA9AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854260"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 452681A602EF;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id hv6PdlaiRkvY; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 271451A602F6;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id fYTVcFcxIPWy; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 0966B1A602E5;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:07 +0300
Message-Id: <20190923094714.21759-7-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 06/13] _sysconfigdata.py:
 Disable features that are not avaiable on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIF9zeXNjb25maWdkYXRhLnB5IHwgOCArKysrLS0tLQogMSBmaWxl
IGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9f
c3lzY29uZmlnZGF0YS5weSBiL19zeXNjb25maWdkYXRhLnB5CmluZGV4IDE5MzU0Y2EuLmJkNTc1
YTggMTAwNjQ0Ci0tLSBhL19zeXNjb25maWdkYXRhLnB5CisrKyBiL19zeXNjb25maWdkYXRhLnB5
CkBAIC0xNTksNyArMTU5LDcgQEAgYnVpbGRfdGltZV92YXJzID0geydBQklGTEFHUyc6ICdtJywK
ICAnSEFWRV9FUkYnOiAxLAogICdIQVZFX0VSRkMnOiAxLAogICdIQVZFX0VSUk5PX0gnOiAxLAot
ICdIQVZFX0VYRUNWJzogMSwKKyAnSEFWRV9FWEVDVic6IDAsCiAgJ0hBVkVfRVhQTTEnOiAxLAog
ICdIQVZFX0ZBQ0NFU1NBVCc6IDEsCiAgJ0hBVkVfRkNIRElSJzogMSwKQEAgLTE3MCwxMSArMTcw
LDExIEBAIGJ1aWxkX3RpbWVfdmFycyA9IHsnQUJJRkxBR1MnOiAnbScsCiAgJ0hBVkVfRkNOVExf
SCc6IDEsCiAgJ0hBVkVfRkRBVEFTWU5DJzogMSwKICAnSEFWRV9GRE9QRU5ESVInOiAxLAotICdI
QVZFX0ZFWEVDVkUnOiAxLAorICdIQVZFX0ZFWEVDVkUnOiAwLAogICdIQVZFX0ZJTklURSc6IDEs
CiAgJ0hBVkVfRkxPQ0snOiAxLAotICdIQVZFX0ZPUksnOiAxLAotICdIQVZFX0ZPUktQVFknOiAx
LAorICdIQVZFX0ZPUksnOiAwLAorICdIQVZFX0ZPUktQVFknOiAwLAogICdIQVZFX0ZQQVRIQ09O
Ric6IDEsCiAgJ0hBVkVfRlNFRUs2NCc6IDAsCiAgJ0hBVkVfRlNFRUtPJzogMSwKLS0gCjIuMjAu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:47:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:47:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwe-0004a0-S1; Mon, 23 Sep 2019 09:47:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKwd-0004Zo-9S
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:47:47 +0000
X-Inumbo-ID: 29f5268c-dde7-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 29f5268c-dde7-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:32 +0000 (UTC)
IronPort-SDR: SgTEgvPkzhi6AjsvT7FapldwtFtSEjsI9yXvXT9szGeZZvR4ydNwKylccQwgUIIWyIQoiOOfl5
 Uoi9kUUrx6GQ==
IronPort-PHdr: =?us-ascii?q?9a23=3A8al4RBYS20geekFP5OtDMo//LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZrs+5bnLW6fgltlLVR4KTs6sC17ON9fqwEjVQqdbZ6TZeKcYKD0?=
 =?us-ascii?q?dEwewt3CUYSPafDkP6KPO4JwcbJ+9lEGFfwnegLEJOE9z/bVCB6le77DoVBw?=
 =?us-ascii?q?mtfVEtfre9FYHdldm42P6v8JPPfQpImCC9YbRvJxmqsAndrMYbjZZsJ6or1B?=
 =?us-ascii?q?fEoXREd/lVyGh1IV6fgwvw6t2/8ZJ+7Shcoe4t+9JFXa7nY6k2ULtUASg8PW?=
 =?us-ascii?q?so/sPrrx7DTQWO5nsYTGoblwdDDhbG4h/nQJr/qzP2ueVh1iaUO832Vq00Vi?=
 =?us-ascii?q?+576h3Uh/oiTwIOCA//WrKl8F/lqNboBampxxi347ZZZyeOfRicq/Be94RWG?=
 =?us-ascii?q?xMVdtTWSNcGIOxd4sBAfQcM+hWrIfzoFkBrRWlCAWwGO/i0CNEi2Xq0aEm1e?=
 =?us-ascii?q?kqDAHI3BYnH9ILqHnZstL1NLwOUeC0yqnD0DPNb+5O2Tfg9YPFdQwuofaXXb?=
 =?us-ascii?q?JscMrRz1MjFwfYjlWItIzoJC+a1v8Xv2iD8upvTviji3QgqwxopDWk28Qiip?=
 =?us-ascii?q?HRi44IxV3I6D91zYU1KNGiVkJ3f9ypHIFeui2CKod7Td4uT3trtSs60LEKp5?=
 =?us-ascii?q?C2cSYQxJg6yBPTdfqKeJWS7B35TuaeOzJ4iWpgeLK4mhm971Ctyvb5VsmoyF?=
 =?us-ascii?q?ZKqTdFksXUunANyRPT7s+HR+Nj/kekwzmP1gTT5vtYLkAvj6bbM4MhzaUqmp?=
 =?us-ascii?q?oJtkTPBi72mEPog6+Kbkgo5+el5/n9brjlppKQLZF4hh/8P6g0lMGzGeE4PR?=
 =?us-ascii?q?IPX2if9+S8zrrj/UjhTbpWif02ibXZsJHcJcgBoq65HhdV0ps45hmjFDeqys?=
 =?us-ascii?q?wYnWQcI15fYhKHiJDlO0vSL/DgEfe/n1OsnS9ux/DHOL3hA5LNLmPanLj8Y7?=
 =?us-ascii?q?l99VBTyA4owNBb5pJUEa0BIOnpVk7+qtPYCAU1Mwuuw+boEN99zJ8RWXqTAq?=
 =?us-ascii?q?+FN6PfqVGI6fwrI+mNfI8apizxK/g45/7vkXA5mEQQfa+30pQLbHC3BO9pL1?=
 =?us-ascii?q?+Hbnrxmt0BC3sFvhIiTOz2j12PSSBTZ3KoUK0h/j40EoSmAprZRo+zgbyNxj?=
 =?us-ascii?q?y0EYdLaWBBC1CMDGzld56YW/cRdS2eONVunSAfVbS7Vo8hzQqhuBXgy7pgfa?=
 =?us-ascii?q?Lo/XgdtJTi08Mw6+DNmBUa8T1vE9/bw2yLCWZukTAmXTgziYt4ulB8zB+nzL?=
 =?us-ascii?q?Bly6hTEsdP5vUPVhoiKLbX1KpiFtq0QAWXLYTBc0qvXtjzWWJ5ddk22dJbO0?=
 =?us-ascii?q?s=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AgAADWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBVQUBAQsBgXOBF1MgEiqNHogffpgkFIFnCQEBASkRAQIBAYFLgnQCgzc?=
 =?us-ascii?q?2Bw4CAwkBAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmCV0sBgg6?=
 =?us-ascii?q?sX4VMgzKBSIE0AYcvgzuCdj+BEYJdhHwUdIUWBI0RiBKBH5ZKB4IlZQSGHIk?=
 =?us-ascii?q?vhEongmVDlX2pCCgMJIFZMxpzgmwJRxAUgVoOCYtJglw9AQExAYEFAQGLEYJ?=
 =?us-ascii?q?UAQE?=
X-IPAS-Result: =?us-ascii?q?A2AgAADWk4hdjAPjVY1lHAEBAQQBAQwEAQGBVQUBAQsBg?=
 =?us-ascii?q?XOBF1MgEiqNHogffpgkFIFnCQEBASkRAQIBAYFLgnQCgzc2Bw4CAwkBAQUBA?=
 =?us-ascii?q?QEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmCV0sBgg6sX4VMgzKBSIE0A?=
 =?us-ascii?q?YcvgzuCdj+BEYJdhHwUdIUWBI0RiBKBH5ZKB4IlZQSGHIkvhEongmVDlX2pC?=
 =?us-ascii?q?CgMJIFZMxpzgmwJRxAUgVoOCYtJglw9AQExAYEFAQGLEYJUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854262"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 639171A602F6;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id vZ-qOkmKiOCz; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 489391A602F2;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 5fX1Ee4-v_eL; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 287A71A602F8;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:09 +0300
Message-Id: <20190923094714.21759-9-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 08/13] Add stubs.c for
 stubbed functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKV2UgYWRkIHRoZSBzdHVicyBuZWVkZWQgd2hlbiAiZm9ya2luZyIgcHJvY2Vzc2VzLgoK
U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3Mu
cHViLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgIDEgKwogc3R1YnMuYyAgICAgfCA0NSArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwg
NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN0dWJzLmMKCmRpZmYgLS1naXQg
YS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDQ4MzI0MTcuLjRkNjdmNmMgMTAwNjQ0
Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC05OCw2ICs5OCw3IEBAIExJ
QlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0lOQ0xVREVTLXkp
CiBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9JTkNMVURF
Uy15KQogCiBMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbW9kdWxlc19j
b25maWcuY3x1bmlrcmFmdAorTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04zX0JBU0Up
L3N0dWJzLmN8dW5pa3JhZnQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgUHl0aG9uIGNv
cmUKZGlmZiAtLWdpdCBhL3N0dWJzLmMgYi9zdHVicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUzOTA3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9zdHVicy5jCkBAIC0wLDAg
KzEsNDUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8q
CisgKiBBdXRob3JzOiBCYWRvaXUgVmxhZC1BbmRyZWkgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVk
LmFjcy51cGIucm8+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0
ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisK
K3ZvaWQgUHlPU19CZWZvcmVGb3JrKHZvaWQpCit7Cit9CisKK3ZvaWQgUHlPU19BZnRlckZvcmtf
UGFyZW50KHZvaWQpCit7Cit9CisKK3ZvaWQgUHlPU19BZnRlckZvcmtfQ2hpbGQodm9pZCkKK3sK
K30KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:47:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:47:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwj-0004b0-U3; Mon, 23 Sep 2019 09:47:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKwi-0004ah-9j
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:47:52 +0000
X-Inumbo-ID: 2a6c1b34-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2a6c1b34-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:33 +0000 (UTC)
IronPort-SDR: Alg25YudMf3IV1pT9WcuGH9HkvOpxve0tfcjDVlAJPESuXgyQrs67+cQ0WOM/9kzKFEuiNCz+J
 Uhj5HZLemWkQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AVJ0rRR8y03L/wP9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B21OscTK2v8tzYMVDF4r011RmVBN6dsaIP0rqe8/i5HzBZu9DZ6DFKWacPfi?=
 =?us-ascii?q?dNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV?=
 =?us-ascii?q?3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sAvcutMIjYZhJao91x?=
 =?us-ascii?q?jEqWZMd+hK2G9kP12ekwvi6suq4JJv7yFcsO89+sBdVqn3Y742RqFCAjQ8NG?=
 =?us-ascii?q?A16szrtR3dQgaK+3ARTGYYnAdWDgbc9B31UYv/vSX8tupmxSmVJtb2QqwuWT?=
 =?us-ascii?q?Sj9KhkVhnlgzoaOjEj8WHXjstwjL9HoB+kuhdyzZLYbJ2TOfFjeK7WYNEUSn?=
 =?us-ascii?q?dbXstJVyJPHJ6yYYUMAeQGP+lYoZLwq0cSoRakGQWhHv/jxiNOi3Tr3aM6ye?=
 =?us-ascii?q?MhEQTe0QE+GNIOq2jUrNTzNKwPV+610bHIzSjeZP5RxTj975PIcgwgofGKR7?=
 =?us-ascii?q?5wddfRyVEyFw7eklqQspbpPyuI1usWqWSb9e1gWPuphmU6pQ9xpT2vyd0tio?=
 =?us-ascii?q?nPno8a0U7L9SJhwIkrI920UlJ0YdmhEJZWqiqUNJN2T9s/T2xnpSo20L4LtJ?=
 =?us-ascii?q?6hcCQU1pgqxQTTZvKff4SV7R/vSfydLDR4iX5/Zr6yiRi//VK9xuDzSMW51k?=
 =?us-ascii?q?tBoDBfndnWrH8N0gTe6s2ASvRg4EiswS2P1wXP6uFcJkA0iLbbJ4YhwrEukp?=
 =?us-ascii?q?oTtlzOHjHzmErsja+Wcl8o9fSz6+j9erXmu4STO5VuigH5Kqgum8q/DvokMg?=
 =?us-ascii?q?UWQmSW9vmw2Kfg8ED5WrlGkOM6n6vDvJ3UPcgbo7S2Aw5R0oYt8Ra/CDKm3c?=
 =?us-ascii?q?wEknkAN1JFZBOHj47zN1HKPfD4Feq/jk+wnzdw3fzGJqDhDY7XInjZl7ftZa?=
 =?us-ascii?q?x95FJEyAov0dBf4IpZCrQAIPL1W0/xs8fYAgYkPAOq3eboFtF925gaWWKOGa?=
 =?us-ascii?q?+ZLLjSvUWH5+0xJemAfogVuCzyK/I9/f7hkWc5mUMBfamuxZYXZm63HvBnI0?=
 =?us-ascii?q?WBf3XgmNcBEXoLvgUiTeznk1uCXiBPaHa2Ra0z/Ss3B5y7DY3bXICinKSB3D?=
 =?us-ascii?q?unHp1Rfm1GFFSMHm31eIqcQfgMbj+dItV/nTwFT7SuUJUu2gyptA/71rpqNf?=
 =?us-ascii?q?HU+jEFtZ3+ztR6/fHclQoo+TxpF8SSyHuBT3tznjBAezhj2aF5oEtmj1uOz6?=
 =?us-ascii?q?V8q/hZDsBIoeNEVEE9L5GP4fZ9DoXZXRndf9HBbEu+X53yCjYqUtM3hdsTe1?=
 =?us-ascii?q?tVEM7klg3JmTCtVexG34eXDYA5p/qPl0P6INxwni7L?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BBAADWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBVgQBAQsBgwpTIBIqjR6IH5k2gWcJAQEBKREBAgEBhD8Cgzc3Bg4CAwk?=
 =?us-ascii?q?BAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxfhDcBgRS?=
 =?us-ascii?q?DMoFIgTQBhy+DO4J2P4ERh1mGHgSVPoEElkoHgiVlBIYcjXkngyiRXIQhLah?=
 =?us-ascii?q?bNyGBWTMag18JRxAUgVoOCYNPglaFJIJcPQEBMQGBBQEBjWUBAQ?=
X-IPAS-Result: =?us-ascii?q?A2BBAADWk4hdjAPjVY1lHAEBAQQBAQwEAQGBVgQBAQsBg?=
 =?us-ascii?q?wpTIBIqjR6IH5k2gWcJAQEBKREBAgEBhD8Cgzc3Bg4CAwkBAQUBAQEBAQUEA?=
 =?us-ascii?q?RMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxfhDcBgRSDMoFIgTQBhy+DO?=
 =?us-ascii?q?4J2P4ERh1mGHgSVPoEElkoHgiVlBIYcjXkngyiRXIQhLahbNyGBWTMag18JR?=
 =?us-ascii?q?xAUgVoOCYNPglaFJIJcPQEBMQGBBQEBjWUBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854261"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 5657E1A602EE;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 6D93u9u-sO8v; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3CB211A602E4;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 5tu7-au_HQuP; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 1998B1A602E8;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:08 +0300
Message-Id: <20190923094714.21759-8-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 07/13] Add
 modules_config.c
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKVGhpcyBmaWxlIGlzIGNvcGllZCBmcm9tIGEgJy4vTW9kdWxlcy9jb25maWcuYycgb2Yg
YSBMaW51eCBidWlsZCBhbmQgaXQgY29udGFpbnMKdGhlIG1vZHVsZXMgaW5pdCBmdW5jdGlvbnMg
YW5kIHRoZWlyIHJlZ2lzdHJhdGlvbiBhcyBQeXRob24gZXh0ZW5zaW9ucy4gV2UKY29tbWVudGVk
IHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCB5
ZXQuIFRoZXkKc2hvdWxkIGJlIGVuYWJsZWQgYmFjayB3aGVuIHdlIHdpbGwgYWRkIHN1cHBvcnQg
Zm9yIHRoZW0gYnkgcG9ydGluZyB0aGUKdW5kZXJseWluZyBuYXRpdmUgbGlicmFyaWVzLgoKU2ln
bmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPgotLS0KIE1ha2VmaWxlLnVrICAgICAgfCAgIDIgKwogbW9kdWxlc19jb25maWcuYyB8IDMy
OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxl
cyBjaGFuZ2VkLCAzMzAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZXNf
Y29uZmlnLmMKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDk1
MTE5ZDcuLjQ4MzI0MTcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVr
CkBAIC05Nyw2ICs5Nyw4IEBAIExJQlBZVEhPTjNfQ09NTU9OX0NYWEZMQUdTLXkgKz0gJChMSUJQ
WVRIT04zX0NPTU1PTl9ERUZJTkVTLXkpCiBMSUJQWVRIT04zX0NJTkNMVURFUy15ICAgKz0gJChM
SUJQWVRIT04zX0NPTU1PTl9JTkNMVURFUy15KQogTElCUFlUSE9OM19DWFhJTkNMVURFUy15ICs9
ICQoTElCUFlUSE9OM19DT01NT05fSU5DTFVERVMteSkKIAorTElCUFlUSE9OM19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX0JBU0UpL21vZHVsZXNfY29uZmlnLmN8dW5pa3JhZnQKKwogIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKICMgUHl0aG9uIGNvcmUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRp
ZmYgLS1naXQgYS9tb2R1bGVzX2NvbmZpZy5jIGIvbW9kdWxlc19jb25maWcuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmQ2MDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9k
dWxlc19jb25maWcuYwpAQCAtMCwwICsxLDMyOCBAQAorLyogR2VuZXJhdGVkIGF1dG9tYXRpY2Fs
bHkgZnJvbSAuL01vZHVsZXMvY29uZmlnLmMuaW4gYnkgbWFrZXNldHVwLiAqLworLyogLSotIEMg
LSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDb3B5
cmlnaHQgKGMpIDIwMDAsIEJlT3Blbi5jb20uCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMCwgQ29y
cG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzLgorQ29weXJpZ2h0IChj
KSAxOTkwLTE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4KK0FsbCByaWdodHMg
cmVzZXJ2ZWQuCisKK1NlZSB0aGUgZmlsZSAiTWlzYy9DT1BZUklHSFQiIGZvciBpbmZvcm1hdGlv
biBvbiB1c2FnZSBhbmQKK3JlZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgYW5kIGZvciBhIERJ
U0NMQUlNRVIgT0YgQUxMIFdBUlJBTlRJRVMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1vZHVsZSBjb25m
aWd1cmF0aW9uICovCisKKy8qICEhISAhISEgISEhIFRoaXMgZmlsZSBpcyBlZGl0ZWQgYnkgdGhl
IG1ha2VzZXR1cCBzY3JpcHQgISEhICEhISAhISEgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgorICAgU2VlIGNyZWF0ZV9idWlsdGluKCkg
aW4gaW1wb3J0LmMuICovCisKKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlICJQeXRo
b24uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X3Bvc2l4KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUlu
aXRfZXJybm8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9wd2Qodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fc3JlKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X2NvZGVjcyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X193ZWFrcmVmKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2Z1bmN0b29scyh2b2lkKTsKK2V4dGVybiBQeU9iamVj
dCogUHlJbml0X19vcGVyYXRvcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19jb2xs
ZWN0aW9ucyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19hYmModm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9pdGVydG9vbHModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9hdGV4aXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2lnbmFsKHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0YXQodm9pZCk7CitleHRlcm4gUHlPYmplY3Qq
IFB5SW5pdF90aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3RocmVhZCh2b2lk
KTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19sb2NhbGUodm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9faW8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF96aXBpbXBvcnQo
dm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mYXVsdGhhbmRsZXIodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2VtYWxsb2Modm9pZCk7CitleHRlcm4gUHlPYmplY3Qq
IFB5SW5pdF9fc3ltdGFibGUodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF94eHN1YnR5
cGUodm9pZCk7CisKKy8qIFVuaWtyYWZ0IE1hcmtlciBzdGFydCAqLworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2FiYyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X2FycmF5KHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2FzeW5jaW8odm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9hdGV4aXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9hdWRpb29w
KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfYmluYXNjaWkodm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fYmlzZWN0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X2JsYWtlMih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19iejIodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9jbWF0aCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0
X19jb2RlY3Modm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY29sbGVjdGlvbnModm9p
ZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY29udGV4dHZhcnModm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fY3J5cHQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9f
Y3N2KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2N0eXBlc190ZXN0KHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2N0eXBlcyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X19jdXJzZXNfcGFuZWwodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY3Vy
c2VzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfY3VzdG9tMih2b2lkKTsKK2V4dGVy
biBQeU9iamVjdCogUHlJbml0X2N1c3RvbTModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5p
dF9jdXN0b200KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfY3VzdG9tKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2RhdGV0aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2RibSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19kZWNpbWFsKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2VsZW1lbnR0cmVlKHZvaWQpOworZXh0ZXJu
IFB5T2JqZWN0KiBQeUluaXRfZXJybm8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9m
YXVsdGhhbmRsZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mY250bCh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X19mdW5jdG9vbHModm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9nYyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X2dycCh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X19oYXNobGliKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2hlYXBxKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2ltcCh2b2lk
KTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19pbyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X2l0ZXJ0b29scyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19qc29uKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2xvY2FsZSh2b2lkKTsKK2V4dGVybiBQeU9i
amVjdCogUHlJbml0X19sc3Byb2Yodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fbHpt
YSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X21hdGgodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9fbWQ1KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbW1hcCh2
b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19tdWx0aWJ5dGVjb2RlYyh2b2lkKTsKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X19tdWx0aXByb2Nlc3Npbmcodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9uaXModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3Bjb2Rl
KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX29wZXJhdG9yKHZvaWQpOworZXh0ZXJu
IFB5T2JqZWN0KiBQeUluaXRfb3NzYXVkaW9kZXYodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9fb3ZlcmxhcHBlZCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3BhcnNlcih2
b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19waWNrbGUodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9fcG9zaXhzdWJwcm9jZXNzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfcHdkKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3F1ZXVlKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3JhbmRvbSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X3JlYWRsaW5lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfcmVzb3VyY2Uo
dm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2Nwcm94eSh2b2lkKTsKK2V4dGVybiBQ
eU9iamVjdCogUHlJbml0X3NlbGVjdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19z
aGExKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTI1Nih2b2lkKTsKK2V4dGVy
biBQeU9iamVjdCogUHlJbml0X19zaGEzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X3NoYTUxMih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zaWduYWwodm9pZCk7Citl
eHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc29ja2V0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfc3B3ZCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zc2wodm9pZCk7Citl
eHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RhdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJ
bml0X19zdHJpbmcodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RydWN0KHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfc3VibGlzdCh2b2lkKTsKK2V4dGVybiBQeU9iamVj
dCogUHlJbml0X19zeW10YWJsZSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3N5c2xv
Zyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3Rlcm1pb3Modm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fdGVzdGJ1ZmZlcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJ
bml0X190ZXN0Y2FwaSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X190aHJlYWQodm9p
ZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF90aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX3RraW50ZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2Vt
YWxsb2Modm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF91bmljb2RlZGF0YSh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X191dWlkKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfX3dlYWtyZWYodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fd2luYXBpKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfeHhsaW1pdGVkKHZvaWQpOworZXh0ZXJuIFB5
T2JqZWN0KiBQeUluaXRfeHhzdWJ0eXBlKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X3h4dGVzdGZ1enoodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF94eCh2b2lkKTsKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X3ppcGltcG9ydCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfTElC
WkxJQgorZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfemxpYih2b2lkKTsKKyNlbmRpZgorLyogVW5p
a3JhZnQgTWFya2VyIGVuZCAqLworLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCisKK2V4
dGVybiBQeU9iamVjdCogUHlNYXJzaGFsX0luaXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9faW1wKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZ2Modm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fYXN0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBfUHlXYXJu
aW5nc19Jbml0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0cmluZyh2b2lkKTsK
Kworc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7CisKKyAgICB7InBvc2l4
IiwgUHlJbml0X3Bvc2l4fSwKKyAgICB7ImVycm5vIiwgUHlJbml0X2Vycm5vfSwKKyAgICB7InB3
ZCIsIFB5SW5pdF9wd2R9LAorICAgIHsiX3NyZSIsIFB5SW5pdF9fc3JlfSwKKyAgICB7Il9jb2Rl
Y3MiLCBQeUluaXRfX2NvZGVjc30sCisgICAgeyJfd2Vha3JlZiIsIFB5SW5pdF9fd2Vha3JlZn0s
CisgICAgeyJfZnVuY3Rvb2xzIiwgUHlJbml0X19mdW5jdG9vbHN9LAorICAgIHsiX29wZXJhdG9y
IiwgUHlJbml0X19vcGVyYXRvcn0sCisgICAgeyJfY29sbGVjdGlvbnMiLCBQeUluaXRfX2NvbGxl
Y3Rpb25zfSwKKyAgICB7Il9hYmMiLCBQeUluaXRfX2FiY30sCisgICAgeyJpdGVydG9vbHMiLCBQ
eUluaXRfaXRlcnRvb2xzfSwKKyAgICB7ImF0ZXhpdCIsIFB5SW5pdF9hdGV4aXR9LAorICAgIHsi
X3NpZ25hbCIsIFB5SW5pdF9fc2lnbmFsfSwKKyAgICB7Il9zdGF0IiwgUHlJbml0X19zdGF0fSwK
KyAgICB7InRpbWUiLCBQeUluaXRfdGltZX0sCisgICAgeyJfdGhyZWFkIiwgUHlJbml0X190aHJl
YWR9LAorICAgIHsiX2xvY2FsZSIsIFB5SW5pdF9fbG9jYWxlfSwKKyAgICB7Il9pbyIsIFB5SW5p
dF9faW99LAorICAgIHsiemlwaW1wb3J0IiwgUHlJbml0X3ppcGltcG9ydH0sCisgICAgeyJmYXVs
dGhhbmRsZXIiLCBQeUluaXRfZmF1bHRoYW5kbGVyfSwKKyAgICB7Il90cmFjZW1hbGxvYyIsIFB5
SW5pdF9fdHJhY2VtYWxsb2N9LAorICAgIHsiX3N5bXRhYmxlIiwgUHlJbml0X19zeW10YWJsZX0s
CisgICAgeyJ4eHN1YnR5cGUiLCBQeUluaXRfeHhzdWJ0eXBlfSwKKworLyogLS0gQURETU9EVUxF
IE1BUktFUiAyIC0tICovCisKKyAgICAvKiBUaGlzIG1vZHVsZSBsaXZlcyBpbiBtYXJzaGFsLmMg
Ki8KKyAgICB7Im1hcnNoYWwiLCBQeU1hcnNoYWxfSW5pdH0sCisKKyAgICAvKiBUaGlzIGxpdmVz
IGluIGltcG9ydC5jICovCisgICAgeyJfaW1wIiwgUHlJbml0X19pbXB9LAorCisgICAgLyogVGhp
cyBsaXZlcyBpbiBQeXRob24vUHl0aG9uLWFzdC5jICovCisgICAgeyJfYXN0IiwgUHlJbml0X19h
c3R9LAorCisgICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9k
dWxlX25hbWVzICovCisgICAgeyJidWlsdGlucyIsIE5VTEx9LAorICAgIHsic3lzIiwgTlVMTH0s
CisKKyAgICAvKiBUaGlzIGxpdmVzIGluIGdjbW9kdWxlLmMgKi8KKyAgICB7ImdjIiwgUHlJbml0
X2djfSwKKworICAgIC8qIFRoaXMgbGl2ZXMgaW4gX3dhcm5pbmdzLmMgKi8KKyAgICB7Il93YXJu
aW5ncyIsIF9QeVdhcm5pbmdzX0luaXR9LAorCisgICAgLyogVGhpcyBsaXZlcyBpbiBPYmplY3Rz
L3VuaWNvZGVvYmplY3QuYyAqLworICAgIHsiX3N0cmluZyIsIFB5SW5pdF9fc3RyaW5nfSwKKwor
CisvKiBVbmlrcmFmdCBNYXJrZXIgc3RhcnQgKi8KKyAgICB7Il9hYmMiLCBQeUluaXRfX2FiY30s
CisgICAgeyJhcnJheSIsIFB5SW5pdF9hcnJheX0sCisgICAgeyJfYXN5bmNpbyIsIFB5SW5pdF9f
YXN5bmNpb30sCisgICAgeyJhdGV4aXQiLCBQeUluaXRfYXRleGl0fSwKKy8qIGF1ZGlvIHsiYXVk
aW9vcCIsIFB5SW5pdF9hdWRpb29wfSwgKi8KKyAgICB7ImJpbmFzY2lpIiwgUHlJbml0X2JpbmFz
Y2lpfSwKKyAgICB7Il9iaXNlY3QiLCBQeUluaXRfX2Jpc2VjdH0sCisjaWZkZWYgQ09ORklHX0xJ
QklOVEVMX0lOVFJJTlNJQ1MKKyAgICB7Il9ibGFrZTIiLCBQeUluaXRfX2JsYWtlMn0sCisjZW5k
aWYKKy8vICAgIHsiX2J6MiIsIFB5SW5pdF9fYnoyfSwKKyAgICB7ImNtYXRoIiwgUHlJbml0X2Nt
YXRofSwKKyAgICB7Il9jb2RlY3MiLCBQeUluaXRfX2NvZGVjc30sCisgICAgeyJfY29sbGVjdGlv
bnMiLCBQeUluaXRfX2NvbGxlY3Rpb25zfSwKKyAgICB7Il9jb250ZXh0dmFycyIsIFB5SW5pdF9f
Y29udGV4dHZhcnN9LAorLy9UT0RPICAgIHsiX2NyeXB0IiwgUHlJbml0X19jcnlwdH0sCisgICAg
eyJfY3N2IiwgUHlJbml0X19jc3Z9LAorI2lmIENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9D
VFlQRVMKKy8vICAgIHsiX2N0eXBlc190ZXN0IiwgUHlJbml0X19jdHlwZXNfdGVzdH0sCisgICAg
eyJfY3R5cGVzIiwgUHlJbml0X19jdHlwZXN9LAorI2VuZGlmCisvKiAgICB7Il9jdXJzZXNfcGFu
ZWwiLCBQeUluaXRfX2N1cnNlc19wYW5lbH0sICovCisvL1RPRE8gICAgeyJfY3Vyc2VzIiwgUHlJ
bml0X19jdXJzZXN9LCBldmFsdWF0ZSB0byBgUHlJbml0KGNoYXIsIGxvbmcgZG91YmxlIF9fcmVz
dHJpY3QsIHNob3J0LC4uLikoc2hvcnQpJworLyogRG9jIHsiY3VzdG9tIiwgUHlJbml0X2N1c3Rv
bX0sICAgKi8KKy8qIERvYyB7ImN1c3RvbTIiLCBQeUluaXRfY3VzdG9tMn0sICovCisvKiBEb2Mg
eyJjdXN0b20zIiwgUHlJbml0X2N1c3RvbTN9LCAqLworLyogRG9jIHsiY3VzdG9tNCIsIFB5SW5p
dF9jdXN0b200fSwgKi8KKyAgICB7Il9kYXRldGltZSIsIFB5SW5pdF9fZGF0ZXRpbWV9LAorLy8g
ICAgeyJfZGJtIiwgUHlJbml0X19kYm19LAorI2lmIENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lP
Tl9MSUJNUERFQworICAgIHsiX2RlY2ltYWwiLCBQeUluaXRfX2RlY2ltYWx9LAorI2VuZGlmCisj
aWYgQ09ORklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX0VYUEFUCisgICAgeyJfZWxlbWVudHRyZWUi
LCBQeUluaXRfX2VsZW1lbnR0cmVlfSwKKyNlbmRpZgorICAgIHsiZXJybm8iLCBQeUluaXRfZXJy
bm99LAorICAgIHsiZmF1bHRoYW5kbGVyIiwgUHlJbml0X2ZhdWx0aGFuZGxlcn0sCisgICAgeyJm
Y250bCIsIFB5SW5pdF9mY250bH0sCisgICAgeyJfZnVuY3Rvb2xzIiwgUHlJbml0X19mdW5jdG9v
bHN9LAorICAgIHsiZ2MiLCBQeUluaXRfZ2N9LAorLy9UT0RPIGVuYWJsZSAgICB7ImdycCIsIFB5
SW5pdF9ncnB9LAorICAgIHsiX2hhc2hsaWIiLCBQeUluaXRfX2hhc2hsaWJ9LAorICAgIHsiX2hl
YXBxIiwgUHlJbml0X19oZWFwcX0sCisgICAgeyJfaW1wIiwgUHlJbml0X19pbXB9LAorICAgIHsi
X2lvIiwgUHlJbml0X19pb30sCisgICAgeyJpdGVydG9vbHMiLCBQeUluaXRfaXRlcnRvb2xzfSwK
KyAgICB7Il9qc29uIiwgUHlJbml0X19qc29ufSwKKyAgICB7Il9sb2NhbGUiLCBQeUluaXRfX2xv
Y2FsZX0sCisgICAgeyJfbHNwcm9mIiwgUHlJbml0X19sc3Byb2Z9LAorLy8gICAgeyJfbHptYSIs
IFB5SW5pdF9fbHptYX0sCisgICAgeyJtYXRoIiwgUHlJbml0X21hdGh9LAorICAgIHsiX21kNSIs
IFB5SW5pdF9fbWQ1fSwKKy8vVE9ETyBlbmFibGUgICAgeyJtbWFwIiwgUHlJbml0X21tYXB9LAor
ICAgIHsiX211bHRpYnl0ZWNvZGVjIiwgUHlJbml0X19tdWx0aWJ5dGVjb2RlY30sCisvKiAgICB7
Il9tdWx0aXByb2Nlc3NpbmciLCBQeUluaXRfX211bHRpcHJvY2Vzc2luZ30sKi8KKy8qICAgIHsi
bmlzIiwgUHlJbml0X25pc30sKi8KKyAgICB7Il9vcGNvZGUiLCBQeUluaXRfX29wY29kZX0sCisg
ICAgeyJfb3BlcmF0b3IiLCBQeUluaXRfX29wZXJhdG9yfSwKKy8qIGF1ZGlvIHsib3NzYXVkaW9k
ZXYiLCBQeUluaXRfb3NzYXVkaW9kZXZ9LCAqLworLyogV2luZG93cyB7Il9vdmVybGFwcGVkIiwg
UHlJbml0X19vdmVybGFwcGVkfSwgKi8KKyAgICB7InBhcnNlciIsIFB5SW5pdF9wYXJzZXJ9LAor
ICAgIHsiX3BpY2tsZSIsIFB5SW5pdF9fcGlja2xlfSwKKyAgICB7Il9wb3NpeHN1YnByb2Nlc3Mi
LCBQeUluaXRfX3Bvc2l4c3VicHJvY2Vzc30sCisgICAgeyJwd2QiLCBQeUluaXRfcHdkfSwKKyAg
ICB7Il9xdWV1ZSIsIFB5SW5pdF9fcXVldWV9LAorICAgIHsiX3JhbmRvbSIsIFB5SW5pdF9fcmFu
ZG9tfSwKKy8vICAgIHsicmVhZGxpbmUiLCBQeUluaXRfcmVhZGxpbmV9LAorICAgIHsicmVzb3Vy
Y2UiLCBQeUluaXRfcmVzb3VyY2V9LAorLyogaU9TIHsiX3NjcHJveHkiLCBQeUluaXRfX3NjcHJv
eHl9LCAqLworICAgIHsic2VsZWN0IiwgUHlJbml0X3NlbGVjdH0sCisgICAgeyJfc2hhMSIsIFB5
SW5pdF9fc2hhMX0sCisgICAgeyJfc2hhMjU2IiwgUHlJbml0X19zaGEyNTZ9LAorICAgIHsiX3No
YTMiLCBQeUluaXRfX3NoYTN9LAorICAgIHsiX3NoYTUxMiIsIFB5SW5pdF9fc2hhNTEyfSwKKyAg
ICB7Il9zaWduYWwiLCBQeUluaXRfX3NpZ25hbH0sCisgICAgeyJfc29ja2V0IiwgUHlJbml0X19z
b2NrZXR9LAorLy9UT0RPIGVuYWJsZSAgICB7InNwd2QiLCBQeUluaXRfc3B3ZH0sCisjaWYgQ09O
RklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX1NRTElURQorICAgIHsic3FsaXRlIiwgUHlJbml0X19z
cWxpdGUzfSwKKyNlbmRpZgorI2lmIENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9TU0wKKyAg
ICB7Il9zc2wiLCBQeUluaXRfX3NzbH0sCisjZW5kaWYKKyAgICB7Il9zdGF0IiwgUHlJbml0X19z
dGF0fSwKKyAgICB7Il9zdHJpbmciLCBQeUluaXRfX3N0cmluZ30sCisgICAgeyJfc3RydWN0Iiwg
UHlJbml0X19zdHJ1Y3R9LAorLyogRG9jIHsic3VibGlzdCIsIFB5SW5pdF9zdWJsaXN0fSwgKi8K
KyAgICB7Il9zeW10YWJsZSIsIFB5SW5pdF9fc3ltdGFibGV9LAorICAgIHsic3lzbG9nIiwgUHlJ
bml0X3N5c2xvZ30sCisvLyAgICB7InRlcm1pb3MiLCBQeUluaXRfdGVybWlvc30sCisgICAgeyJf
dGVzdGJ1ZmZlciIsIFB5SW5pdF9fdGVzdGJ1ZmZlcn0sCisgICAgeyJfdGVzdGNhcGkiLCBQeUlu
aXRfX3Rlc3RjYXBpfSwKKyAgICB7Il90aHJlYWQiLCBQeUluaXRfX3RocmVhZH0sCisgICAgeyJ0
aW1lIiwgUHlJbml0X3RpbWV9LAorLy8gICAgeyJfdGtpbnRlciIsIFB5SW5pdF9fdGtpbnRlcn0s
CisgICAgeyJfdHJhY2VtYWxsb2MiLCBQeUluaXRfX3RyYWNlbWFsbG9jfSwKKyAgICB7InVuaWNv
ZGVkYXRhIiwgUHlJbml0X3VuaWNvZGVkYXRhfSwKKyNpZiBDT05GSUdfTElCUFlUSE9OM19FWFRF
TlNJT05fVVVJRAorICAgIHsiX3V1aWQiLCBQeUluaXRfX3V1aWR9LAorI2VuZGlmCisgICAgeyJf
d2Vha3JlZiIsIFB5SW5pdF9fd2Vha3JlZn0sCisvKiBXaW5kb3dzIHsiX3dpbmFwaSIsIFB5SW5p
dF9fd2luYXBpfSwgKi8KKyAgICB7Inh4bGltaXRlZCIsIFB5SW5pdF94eGxpbWl0ZWR9LAorICAg
IHsieHhzdWJ0eXBlIiwgUHlJbml0X3h4c3VidHlwZX0sCisgICAgeyJfeHh0ZXN0ZnV6eiIsIFB5
SW5pdF9feHh0ZXN0ZnV6en0sCisgICAgeyJ4eCIsIFB5SW5pdF94eH0sCisgICAgeyJ6aXBpbXBv
cnQiLCBQeUluaXRfemlwaW1wb3J0fSwKKyNpZiBDT05GSUdfTElCUFlUSE9OM19FWFRFTlNJT05f
WkxJQgorICAgIHsiemxpYiIsIFB5SW5pdF96bGlifSwKKyNlbmRpZgorLyogVW5pa3JhZnQgTWFy
a2VyIGVuZCAqLworCisgICAgLyogU2VudGluZWwgKi8KKyAgICB7MCwgMH0KK307CisKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:47:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:47:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwp-0004cL-0n; Mon, 23 Sep 2019 09:47:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKwn-0004c5-9w
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:47:57 +0000
X-Inumbo-ID: 2b2cfbba-dde7-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2b2cfbba-dde7-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:34 +0000 (UTC)
IronPort-SDR: KnXsHixe3AIU5qXUv6QOzswOr8WKBl/x9fTUDexB3BBFjq1mMxMjahdmasrsqKe4qgzo2obPTQ
 b9BEcU0TTEmQ==
IronPort-PHdr: =?us-ascii?q?9a23=3APqlhMxyOfHGu1qjXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2ukVIJqq85mqBkHD//Il1AaPAdyAragUwLOG++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMn4dvKak9xg?=
 =?us-ascii?q?bKr3BVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y6XQds4YS2?=
 =?us-ascii?q?VcRMZcTyxPDJ2hYYUBDOQPOuRXr4fmqlcSsRezHxWgCfnzxjNUgHL9wK000/?=
 =?us-ascii?q?4mEQHDxAEtAdUOsG/IrNX0MqcZTOa7zLTQzTXecvhb3ivy6I/TchA9oPGMW6?=
 =?us-ascii?q?h8cc7MyUk3CgPIlUmfqZf/MzONy+QCqHKX7/BnVe+2jWMstgJ/oiC3y8sxhY?=
 =?us-ascii?q?TFm5gZx1PE+Clj3oo5O9+1RFR1bNK8DZdduDyWO5F1T84iWW1kpig3x7MctZ?=
 =?us-ascii?q?KmcyUG1pIqzAPFZfOdaYiH+BfjWf6UITd/mX1qZqqyhw238Ui80u38UdS00E?=
 =?us-ascii?q?pSoipFjNbMsncN2gTN6siCUPR9/0Oh1SyT2ADI8O1EOV00mrHBJ547xb48jp?=
 =?us-ascii?q?sTsULdES/qgEj6kaCbelg+9uWr6+nreKvqqoGeOoNuhAzyKqEulda+AeQ8PA?=
 =?us-ascii?q?gORW+b+eGk2bL/+k35W6lKjvwwkqXDtJDaONwbprOiDgBJyYYv8Q6/Dyq939?=
 =?us-ascii?q?gCh3kHK0pJeAibgIjxJ1HOPPf4AO+6g1StljdrxvfGPqb4DprQMHfDjqnufb?=
 =?us-ascii?q?Jm5k5YyQoz1sxf54lOBrAOPv3zXFX9tNvCDh82Kwa02froCM1h1oMCXmKCGq?=
 =?us-ascii?q?GZP73WsV+J/uIgPfOAZI8IuDb8N/cl5uXjjXknllABeammx4AYZGqmEfR7O0?=
 =?us-ascii?q?+Ze2bjgs8dEWcWuQozVPLqiFmYXjFOf3m9RaQ86SwhCI24DIfPXJuij6ac0y?=
 =?us-ascii?q?e8H51We3tLCkuQEXf1aoqIQe0DZz6JIsN7jzwETaOuR5U71RGp50fGzO9iL+?=
 =?us-ascii?q?zV/TZduZ/92dxd4+zIiQp05TFyScOH3DKjVWZxy0gPXCM32uhbvFRgggOI1r?=
 =?us-ascii?q?NkgvoeEcFL+ttCSUEiKJSa1essWIO6YR7IYtrcEAXued6hGzxkFt8=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4MLUyASKo0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQ?=
 =?us-ascii?q?BEwEBASaFXQyCOiKCbwMDeRA/ElcZgyIBgg6sX4VMgzKBSIE0hzCGMT+DdWy?=
 =?us-ascii?q?FEYR0IgSWQpZKB4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBaB4Yixy?=
 =?us-ascii?q?CXD0BATGBBgEBjWUBAQ?=
X-IPAS-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQwEAQGBZ4MLUyASK?=
 =?us-ascii?q?o0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQBEwEBASaFXQyCO?=
 =?us-ascii?q?iKCbwMDeRA/ElcZgyIBgg6sX4VMgzKBSIE0hzCGMT+DdWyFEYR0IgSWQpZKB?=
 =?us-ascii?q?4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBaB4YixyCXD0BATGBBgEBj?=
 =?us-ascii?q?WUBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854263"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9C82B1A602F1;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id SaoiMQVjI04E; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 626831A602EF;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id fX9pR_4bpEqz; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 46BB21A602F1;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:11 +0300
Message-Id: <20190923094714.21759-11-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 10/13] Makefile.uk: Add
 rule for creating root filesystem
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIFB5dGhvbiBpbnRlcnByZXRlciBuZWVkcyBhIGZpbGVzeXN0ZW0gd2hlcmUgdG8ga2VlcCBp
dHMgbGlicmFyaWVzLiBUaGlzCnBhdGNoIGNyZWF0ZXMgYSBQeXRob24gdmlydHVhbCBlbnZpcm9u
bWVudCBhbmQgaW5zdGFsbHMgdGhlIFB5dGhvbiAzIHN0YW5kYXJkCmxpYnJhcnkgaW4gL2xpYi9w
eXRob24zLjcgZGlyZWN0b3J5LiBGb3IgY3JlYXRpbmcgdGhlIGZpbGVzeXN0ZW0gdGhlIGZvbGxv
d2luZwpjb21tYW5kIGhhcyB0byBiZSBydW46CgokIG1ha2UgcHl0aG9uLXJvb3RmcyBwYXRoPTxk
aXJlY3Rvcnk+CgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUg
Y2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFr
ZWZpbGUudWsKaW5kZXggZGM2ZTRhZC4uOGJjM2FjZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsK
KysrIGIvTWFrZWZpbGUudWsKQEAgLTQ2NCwzICs0NjQsMjQgQEAgTElCUFlUSE9OM19QUkVQQVJF
RF9ERVBTID0gXAogJChMSUJQWVRIT04zX0JVSUxEKS8ucHJlcGFyZWQ6ICQoTElCUFlUSE9OM19Q
UkVQQVJFRF9ERVBTKQogCiBVS19QUkVQQVJFICs9ICQoTElCUFlUSE9OM19CVUlMRCkvLnByZXBh
cmVkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJvb3QgZmlsZXN5c3RlbQorIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKworIyBCdWlsZCByb290IGZpbGVzeXN0ZW0gZm9yIFB5dGhvbiBp
bnRlcnByZXRlcgorUFlUSE9OX1JPT1RGUyA9ICQoQVBQX0JBU0UpLyQocGF0aCkKKworIyBDcmVh
dGUgdmlydHVhbCBlbnZpcm9ubWVudAorJChQWVRIT05fUk9PVEZTKS8ua2VlcDoKKwlweXRob24z
IC1tIHZlbnYgJChQWVRIT05fUk9PVEZTKSAmJiB0b3VjaCAkQAorCisjIENvbmZpZ3VyZSBvcmln
aW4KKyQoTElCUFlUSE9OM19TUkMpL2NvbmZpZy5zdGF0dXM6CisJY2QgJChMSUJQWVRIT04zX1NS
QykgJiYgLi9jb25maWd1cmUgLS1wcmVmaXg9JChzaGVsbCByZWFscGF0aCAkKEFQUF9CQVNFKS8k
KHBhdGgpKQorCisjIEluc3RhbGwgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgaW50byB2aXJ0dWFs
IGVudmlyb25tZW50CisuUEhPTlk6IHB5dGhvbi1yb290ZnMKK3B5dGhvbi1yb290ZnM6ICQoUFlU
SE9OX1JPT1RGUykvLmtlZXAgJChMSUJQWVRIT04zX1NSQykvY29uZmlnLnN0YXR1cworCWNkICQo
TElCUFlUSE9OM19TUkMpICYmIG1ha2UgbGliaW5zdGFsbAorCWNwICQoTElCUFlUSE9OM19CQVNF
KS9fc3lzY29uZmlnZGF0YS5weSAkKFBZVEhPTl9ST09URlMpL2xpYi9weXRob24zLjcvCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwu-0004d9-2S; Mon, 23 Sep 2019 09:48:04 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKws-0004cx-8s
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:02 +0000
X-Inumbo-ID: 2ad9894e-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2ad9894e-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:34 +0000 (UTC)
IronPort-SDR: 4IYIjG3lr8dv7mK2O0dYRA8S4wQY0BoJJ5wlDyiersjNDkUyM5ADgJIFszBcR1L4MvT9cs64lx
 Sk6ZqD5jFRVg==
IronPort-PHdr: =?us-ascii?q?9a23=3AiTuigx8dH7N/Ff9uRHKM819IXTAuvvDOBiVQ1K?=
 =?us-ascii?q?B20OkcTK2v8tzYMVDF4r011RmVBN6dsaIP0rqe8/i5HzBZu9DZ6DFKWacPfi?=
 =?us-ascii?q?dNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV?=
 =?us-ascii?q?3wOgVvO+v6BJPZgdip2OCu4Z3TZBhDiCagbb9oIxi6sAvcutMIjYZhJao91x?=
 =?us-ascii?q?jEqWZMd+hK2G9kP12ekwvi6suq4JJv7yFcsO89+sBdVqn3Y742RqFCAjQ8NG?=
 =?us-ascii?q?A16szrtR3dQgaK+3ARTGYYnAdWDgbc9B31UYv/vSX8tupmxSmVJtb2QqwuWT?=
 =?us-ascii?q?Sj9KhkVhnlgzoaOjEj8WHXjstwjL9HoB+kuhdyzZLYbJ2TOfFjeK7WYNEUSn?=
 =?us-ascii?q?dbXstJVyJPHJ6yYYUMAeQGP+lYoZLwq0cSoRakGQWhHv/jxiNOi3Tr3aM6ye?=
 =?us-ascii?q?MhEQTe0QE+GNIOq2jUrNTzNKwPV+610bHIzSjeZP5RxTj975PIcgwgofGKR7?=
 =?us-ascii?q?5wddfRyVEyFw7eklqQspbpPyuI1usWqWSb9e1gWPuphmU6qA9xuiCiytojh4?=
 =?us-ascii?q?XUnI4YyVDJ+T9nzIorJ9C0UkB2bca5HJZfqi2WLYh7T8M4T212tis3xKcKtY?=
 =?us-ascii?q?O0cSQUzpks2gTRZOadc4eS5xLuTOORITBli317YL+/nBOy8VS4yu37S8m0zE?=
 =?us-ascii?q?5GripbndnIsXAAzwLT6s2dRft8+ketwyqA1xvJ5uFcPEA7jrDXK4QmwrIol5?=
 =?us-ascii?q?oTt1rMHjPulUnrg6Kaa18o9+uo5uj9fLnquJ2RO5V6hw3mN6QhgM2/AeA2Mg?=
 =?us-ascii?q?gUWGib/Pyx26Hk/U3iXLVKj/s2nrPdsJDHPcQbu7W0DBNO0oo58xa/Eiyp3M?=
 =?us-ascii?q?4CnXkANF5FYg6Ij5D1O1HSJ/D1FfK/g1WqkDdqwPDGJaTtDYjTIXjdjrjhea?=
 =?us-ascii?q?1w60pdyAoo0dBf/IhYC74fL/L1QEPxs8bYDhAhOQyu3+nnEMl91p8ZWW+XDK?=
 =?us-ascii?q?+WLqfSsV6Q5u0xOeWMZJIVuDfhJPgk/PPui2E2lkMZfaazxpQbcm63Hul+KU?=
 =?us-ascii?q?WDfXXsmssBEXsNvgcmUuzqjEeNXiNLaHmoWaIz+ys7B5ynDYvZXY+imqGO3C?=
 =?us-ascii?q?C6Hp1LfW1GEUyMEWr1eImeQfgDdDmSLtV8kjwcTretUZUh1Rb9/DP9nr9mKO?=
 =?us-ascii?q?vT4WgUuIzu0PBx5vbPjlci+DoyCN6SgE+XSGQhtWQTWz4wlIRiuVE1nlyEyr?=
 =?us-ascii?q?R5hbpcCMROz/hSFB8nP9jGyLopWJjJRgvdc4LRGx6dSdK8DGRpQw=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4F0gWogEiqNHogfmx0JAQEBOgECAQGEPwKDNzgTAgMJAQEFAQEBAQE?=
 =?us-ascii?q?FBAETAQEBJoVpgjoigm8DA3kQIB8SVxmCV0uCD6xfiH6BSIE0hzCGMT+BEYJ?=
 =?us-ascii?q?kbIonBIxxiVGWSgeCJWUElBUnmSWpCDgggVkzGoNfUBAUgVcCAQ4JFY4QPQE?=
 =?us-ascii?q?BMQGBBQEBjWUBAQ?=
X-IPAS-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQwEAQGBZ4F0gWogE?=
 =?us-ascii?q?iqNHogfmx0JAQEBOgECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAETAQEBJoVpg?=
 =?us-ascii?q?joigm8DA3kQIB8SVxmCV0uCD6xfiH6BSIE0hzCGMT+BEYJkbIonBIxxiVGWS?=
 =?us-ascii?q?geCJWUElBUnmSWpCDgggVkzGoNfUBAUgVcCAQ4JFY4QPQEBMQGBBQEBjWUBA?=
 =?us-ascii?q?Q?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854258"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2C0301A602E4;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id OAefUkg0avdr; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 077801A602F1;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id TM3Wbqyhkprw; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id D75901A602E8;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:05 +0300
Message-Id: <20190923094714.21759-5-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 04/13] pyconfig.h:
 Disable features that are not avaiable on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU29tZSBvZiB0aGVzZSBmZWF0dXJlcyBoYXZlIHRvIGVuYWJsZWQgYmFjayB3aGVuIHdl
IHdpbGwgc3VwcG9ydCB0aGVtLgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4g
THVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGluY2x1ZGUvcHljb25maWcuaCB8IDE5
OCArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj
aGFuZ2VkLCAxMDAgaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
aW5jbHVkZS9weWNvbmZpZy5oIGIvaW5jbHVkZS9weWNvbmZpZy5oCmluZGV4IDFlNGVmOGEuLjQw
NDk0ZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHljb25maWcuaAorKysgYi9pbmNsdWRlL3B5Y29u
ZmlnLmgKQEAgLTQyLDcgKzQyLDcgQEAKIC8qICN1bmRlZiBHRVRUSU1FT0ZEQVlfTk9fVFogKi8K
IAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhY2NlcHQ0JyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9BQ0NFUFQ0IDEKKy8qICNkZWZpbmUgSEFWRV9BQ0NFUFQ0IDEgKi8KIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhY29zaCcgZnVuY3Rpb24uICovCiAjZGVm
aW5lIEhBVkVfQUNPU0ggMQpAQCAtMTE1LDEzICsxMTUsMTMgQEAKICNkZWZpbmUgSEFWRV9DSE9X
TiAxCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Nocm9vdCcgZnVuY3Rpb24uICovCi0j
ZGVmaW5lIEhBVkVfQ0hST09UIDEKKy8qICNkZWZpbmUgSEFWRV9DSFJPT1QgMSAqLwogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb2NrJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUg
SEFWRV9DTE9DSyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0
cmVzJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9DTE9DS19HRVRSRVMgMQorLyogI2RlZmlu
ZSBIQVZFX0NMT0NLX0dFVFJFUyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElN
RSAxCkBAIC0xNDIsNyArMTQyLDcgQEAKICNkZWZpbmUgSEFWRV9DT1BZU0lHTiAxCiAKIC8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y3J5cHQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVm
aW5lIEhBVkVfQ1JZUFRfSCAxCisvKiAjZGVmaW5lIEhBVkVfQ1JZUFRfSCAxICovCiAKIC8qIERl
ZmluZSBpZiB5b3UgaGF2ZSB0aGUgY3J5cHRfcigpIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZF
X0NSWVBUX1IgMQpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9ERUVQQklORCcsIGFuZCB0byAwIGlmIHlvdQog
ICAgZG9uJ3QuICovCi0jZGVmaW5lIEhBVkVfREVDTF9SVExEX0RFRVBCSU5EIDEKKyNkZWZpbmUg
SEFWRV9ERUNMX1JUTERfREVFUEJJTkQgMAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfR0xPQkFMJywgYW5kIHRvIDAgaWYgeW91CiAgICBkb24n
dC4gKi8KQEAgLTI3MiwxNiArMjcyLDE2IEBACiAjZGVmaW5lIEhBVkVfRFVQMyAxCiAKIC8qIERl
ZmluZWQgd2hlbiBhbnkgZHluYW1pYyBtb2R1bGUgbG9hZGluZyBpcyBlbmFibGVkLiAqLwotI2Rl
ZmluZSBIQVZFX0RZTkFNSUNfTE9BRElORyAxCisvKiAjZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FE
SU5HIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlbmRpYW4uaD4gaGVh
ZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQogCiAvKiBEZWZpbmUgaWYgeW91
IGhhdmUgdGhlICdlcG9sbCcgZnVuY3Rpb25zLiAqLwotI2RlZmluZSBIQVZFX0VQT0xMIDEKKy8v
I2RlZmluZSBIQVZFX0VQT0xMIDEKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGxf
Y3JlYXRlMScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVBPTExfQ1JFQVRFMSAxCisvLyNk
ZWZpbmUgSEFWRV9FUE9MTF9DUkVBVEUxIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBlcmYnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0VSRiAxCkBAIC0yOTMsNyArMjkz
LDcgQEAKICNkZWZpbmUgSEFWRV9FUlJOT19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBleGVjdicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVhFQ1YgMQorLy8jZGVm
aW5lIEhBVkVfRVhFQ1YgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV4cG0x
JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9FWFBNMSAxCkBAIC0zMDgsMTMgKzMwOCwxMyBA
QAogI2RlZmluZSBIQVZFX0ZDSE1PRCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZmNobW9kYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZDSE1PREFUIDEKKy8qICNk
ZWZpbmUgSEFWRV9GQ0hNT0RBVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZmNob3duJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9GQ0hPV04gMQogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZjaG93bmF0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUg
SEFWRV9GQ0hPV05BVCAxCisvKiAjZGVmaW5lIEhBVkVfRkNIT1dOQVQgMSAqLwogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmlu
ZSBIQVZFX0ZDTlRMX0ggMQpAQCAtMzI2LDE5ICszMjYsMTkgQEAKICNkZWZpbmUgSEFWRV9GRE9Q
RU5ESVIgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZleGVjdmUnIGZ1bmN0
aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZFWEVDVkUgMQorLyojZGVmaW5lIEhBVkVfRkVYRUNWRSAx
ICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmluaXRlJyBmdW5jdGlvbi4g
Ki8KICNkZWZpbmUgSEFWRV9GSU5JVEUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGZsb2NrJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GTE9DSyAxCisvKiAjZGVmaW5l
IEhBVkVfRkxPQ0sgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsn
IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZPUksgMQorLyogI2RlZmluZSBIQVZFX0ZPUksg
MSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmtwdHknIGZ1bmN0aW9u
LiAqLwotI2RlZmluZSBIQVZFX0ZPUktQVFkgMQorLyogI2RlZmluZSBIQVZFX0ZPUktQVFkgMSAq
LwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZwYXRoY29uZicgZnVuY3Rpb24u
ICovCiAjZGVmaW5lIEhBVkVfRlBBVEhDT05GIDEKQEAgLTM3MSwxMyArMzcxLDEzIEBACiAjZGVm
aW5lIEhBVkVfRlRSVU5DQVRFIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBm
dXRpbWVucycgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRlVUSU1FTlMgMQorLyogI2RlZmlu
ZSBIQVZFX0ZVVElNRU5TIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBm
dXRpbWVzJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVVRJTUVTIDEKKy8qICNkZWZpbmUg
SEFWRV9GVVRJTUVTIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdXRp
bWVzYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZVVElNRVNBVCAxCisvKiAjZGVmaW5l
IEhBVkVfRlVUSU1FU0FUIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBn
YWlfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dBSV9TVFJFUlJPUiAxCkBA
IC00MDIsMTMgKzQwMiwxMyBAQAogI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEKIAogLyogRGVm
aW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQoKSwgYW5kIGZ1
bmxvY2tmaWxlKCkgKi8KLSNkZWZpbmUgSEFWRV9HRVRDX1VOTE9DS0VEIDEKKy8qICNkZWZpbmUg
SEFWRV9HRVRDX1VOTE9DS0VEIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRlbnRyb3B5JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRFTlRST1BZIDEKKy8q
ICNkZWZpbmUgSEFWRV9HRVRFTlRST1BZIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBnZXRncm91cGxpc3QnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVEdST1VQ
TElTVCAxCisvKiAjZGVmaW5lIEhBVkVfR0VUR1JPVVBMSVNUIDEgKi8KIAogLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBnZXRncm91cHMnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZF
X0dFVEdST1VQUyAxCkBAIC00MjksMTAgKzQyOSwxMCBAQAogI2RlZmluZSBIQVZFX0dFVEhPU1RC
WU5BTUVfUl82X0FSRyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aXRp
bWVyJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRJVElNRVIgMQorLyogI2RlZmluZSBI
QVZFX0dFVElUSU1FUiAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0
bG9hZGF2ZycgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUTE9BREFWRyAxCisvKiAjZGVm
aW5lIEhBVkVfR0VUTE9BREFWRyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0bG9naW4nIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dFVExPR0lOIDEKQEAgLTQ1
MCwxMyArNDUwLDEzIEBACiAjZGVmaW5lIEhBVkVfR0VUUEdJRCAxCiAKIC8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGdycCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VU
UEdSUCAxCisvKiAjZGVmaW5lIEhBVkVfR0VUUEdSUCAxICovCiAKIC8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgZ2V0cGlkJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9HRVRQSUQg
MQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHByaW9yaXR5JyBmdW5jdGlv
bi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQUklPUklUWSAxCisvKiAjZGVmaW5lIEhBVkVfR0VUUFJJ
T1JJVFkgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3ZW50JyBm
dW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9HRVRQV0VOVCAxCkBAIC00NjUsNyArNDY1LDcgQEAK
ICNkZWZpbmUgSEFWRV9HRVRSQU5ET00gMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgTGludXgg
Z2V0cmFuZG9tKCkgc3lzY2FsbCBpcyBhdmFpbGFibGUgKi8KLSNkZWZpbmUgSEFWRV9HRVRSQU5E
T01fU1lTQ0FMTCAxCisvKiAjZGVmaW5lIEhBVkVfR0VUUkFORE9NX1NZU0NBTEwgMSAqLwogCiAv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJlc2dpZCcgZnVuY3Rpb24uICovCiAj
ZGVmaW5lIEhBVkVfR0VUUkVTR0lEIDEKQEAgLTQ5Niw3ICs0OTYsNyBAQAogI2RlZmluZSBIQVZF
X0dSUF9IIDEKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaHN0cmVycm9yJyBmdW5jdGlv
bi4gKi8KLSNkZWZpbmUgSEFWRV9IU1RSRVJST1IgMQorLyogI2RlZmluZSBIQVZFX0hTVFJFUlJP
UiAxICovCiAKIC8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxlNjR0b2goKSAqLwogI2RlZmlu
ZSBIQVZFX0hUT0xFNjQgMQpAQCAtNTA4LDcgKzUwOCw3IEBACiAvKiAjdW5kZWYgSEFWRV9JRUVF
RlBfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcg
ZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSUZfTkFNRUlOREVYIDEKKy8vI2RlZmluZSBIQVZF
X0lGX05BTUVJTkRFWCAxCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2luZXRfYXRvbicg
ZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfSU5FVF9BVE9OIDEKQEAgLTU2OCw3ICs1NjgsNyBA
QAogLyogI3VuZGVmIEhBVkVfTElCSUVFRSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPGxpYmludGwuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTElCSU5UTF9I
IDEKKy8qICNkZWZpbmUgSEFWRV9MSUJJTlRMX0ggMSAqLwogCiAvKiBEZWZpbmUgaWYgeW91IGhh
dmUgdGhlIHJlYWRsaW5lIGxpYnJhcnkgKC1scmVhZGxpbmUpLiAqLwogLyogI3VuZGVmIEhBVkVf
TElCUkVBRExJTkUgKi8KQEAgLTU4NiwzNCArNTg2LDM0IEBACiAjZGVmaW5lIEhBVkVfTElOSyAx
CiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlua2F0JyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9MSU5LQVQgMQorLyogI2RlZmluZSBIQVZFX0xJTktBVCAxICovCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL2JjbS5oPiBoZWFkZXIgZmls
ZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fQkNNX0ggMQorLy8jZGVmaW5lIEhBVkVfTElO
VVhfQ0FOX0JDTV9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9j
YW4uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTElOVVhfQ0FOX0ggMQorLy8jZGVm
aW5lIEhBVkVfTElOVVhfQ0FOX0ggMQogCiAvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHVzaW5nIExp
bnV4IDMuNiBvciBsYXRlci4gKi8KLSNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fUkFXX0ZEX0ZSQU1F
UyAxCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fUkFXX0ZEX0ZSQU1FUyAxCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL3Jhdy5oPiBoZWFkZXIgZmlsZS4gKi8K
LSNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fUkFXX0ggMQorLy8jZGVmaW5lIEhBVkVfTElOVVhfQ0FO
X1JBV19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5r
Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0xJTlVYX05FVExJTktfSCAxCisvLyNk
ZWZpbmUgSEFWRV9MSU5VWF9ORVRMSU5LX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPGxpbnV4L3JhbmRvbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU5V
WF9SQU5ET01fSCAxCisvKiAjZGVmaW5lIEhBVkVfTElOVVhfUkFORE9NX0ggMSAqLwogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3RpcGMuaD4gaGVhZGVyIGZpbGUuICov
Ci0jZGVmaW5lIEhBVkVfTElOVVhfVElQQ19IIDEKKy8vI2RlZmluZSBIQVZFX0xJTlVYX1RJUENf
SCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvdm1fc29ja2V0cy5o
PiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0ggMQorLy8j
ZGVmaW5lIEhBVkVfTElOVVhfVk1fU09DS0VUU19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBsb2NrZicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTE9DS0YgMQorLyog
I2RlZmluZSBIQVZFX0xPQ0tGIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBsb2cxcCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfTE9HMVAgMQpAQCAtNjI4LDcgKzYy
OCw3IEBACiAjZGVmaW5lIEhBVkVfTFNUQVQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGx1dGltZXMnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0xVVElNRVMgMQorLyog
I2RlZmluZSBIQVZFX0xVVElNRVMgMSAqLwogCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0
aGUgbWFrZWRldiBtYWNyby4gKi8KICNkZWZpbmUgSEFWRV9NQUtFREVWIDEKQEAgLTY0MywyOCAr
NjQzLDI4IEBACiAjZGVmaW5lIEhBVkVfTUVNUkNIUiAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgbWtkaXJhdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUtESVJBVCAx
CisvKiAjZGVmaW5lIEhBVkVfTUtESVJBVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgbWtmaWZvJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NS0ZJRk8gMQorLyog
I2RlZmluZSBIQVZFX01LRklGTyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgbWtmaWZvYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01LRklGT0FUIDEKKy8qICNk
ZWZpbmUgSEFWRV9NS0ZJRk9BVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgbWtub2QnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX01LTk9EIDEKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta25vZGF0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFW
RV9NS05PREFUIDEKKy8qICNkZWZpbmUgSEFWRV9NS05PREFUIDEgKi8KIAogLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBta3RpbWUnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX01L
VElNRSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcgZnVuY3Rpb24u
ICovCi0jZGVmaW5lIEhBVkVfTU1BUCAxCisvKiAjZGVmaW5lIEhBVkVfTU1BUCAxICovCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXJlbWFwJyBmdW5jdGlvbi4gKi8KLSNkZWZp
bmUgSEFWRV9NUkVNQVAgMQorLyogI2RlZmluZSBIQVZFX01SRU1BUCAxICovCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmN1cnNlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZp
bmUgSEFWRV9OQ1VSU0VTX0ggMQpAQCAtNjczLDcgKzY3Myw3IEBACiAvKiAjdW5kZWYgSEFWRV9O
RElSX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRwYWNrZXQvcGFj
a2V0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX05FVFBBQ0tFVF9QQUNLRVRfSCAx
CisvLyNkZWZpbmUgSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9O
RVRfSUZfSCAxCkBAIC02OTQsMjIgKzY5NCwyMiBAQAogI2RlZmluZSBIQVZFX1BBVVNFIDEKIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwaXBlMicgZnVuY3Rpb24uICovCi0jZGVm
aW5lIEhBVkVfUElQRTIgMQorLyogI2RlZmluZSBIQVZFX1BJUEUyIDEgKi8KIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwbG9jaycgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFW
RV9QTE9DSyAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvbGwnIGZ1bmN0
aW9uLiAqLwotI2RlZmluZSBIQVZFX1BPTEwgMQorLy8jZGVmaW5lIEhBVkVfUE9MTCAxCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNk
ZWZpbmUgSEFWRV9QT0xMX0ggMQorLy8jZGVmaW5lIEhBVkVfUE9MTF9IIDEKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWR2aXNlJyBmdW5jdGlvbi4gKi8KLSNkZWZp
bmUgSEFWRV9QT1NJWF9GQURWSVNFIDEKKy8qICNkZWZpbmUgSEFWRV9QT1NJWF9GQURWSVNFIDEg
Ki8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWxsb2NhdGUnIGZ1
bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BPU0lYX0ZBTExPQ0FURSAxCisvKiAjZGVmaW5lIEhB
VkVfUE9TSVhfRkFMTE9DQVRFIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBwb3NpeF9zcGF3bicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfUE9TSVhfU1BBV04gMQpA
QCAtNzIxLDEwICs3MjEsMTAgQEAKICNkZWZpbmUgSEFWRV9QUkVBRFYgMQogCiAvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByZWFkdjInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZF
X1BSRUFEVjIgMQorLyogI2RlZmluZSBIQVZFX1BSRUFEVjIgMSAqLwogCiAvKiBEZWZpbmUgaWYg
eW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuICovCi0jZGVmaW5lIEhBVkVfUFJMSU1J
VCAxCisvKiAjZGVmaW5lIEhBVkVfUFJMSU1JVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1BS
T0NFU1NfSCAqLwpAQCAtNzM2LDcgKzczNiw3IEBACiAvKiAjdW5kZWYgSEFWRV9QVEhSRUFEX0RF
U1RSVUNUT1IgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkX2dl
dGNwdWNsb2NraWQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BUSFJFQURfR0VUQ1BVQ0xP
Q0tJRCAxCisvKiAjZGVmaW5lIEhBVkVfUFRIUkVBRF9HRVRDUFVDTE9DS0lEIDEgKi8KIAogLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdGhyZWFkLmg+IGhlYWRlciBmaWxlLiAqLwog
I2RlZmluZSBIQVZFX1BUSFJFQURfSCAxCkBAIC03NDUsMTAgKzc0NSwxMCBAQAogLyogI3VuZGVm
IEhBVkVfUFRIUkVBRF9JTklUICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
cHRocmVhZF9raWxsJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QVEhSRUFEX0tJTEwgMQor
LyogI2RlZmluZSBIQVZFX1BUSFJFQURfS0lMTCAxIFRPRE8gKi8KIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkX3NpZ21hc2snIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBI
QVZFX1BUSFJFQURfU0lHTUFTSyAxCisvKiAjZGVmaW5lIEhBVkVfUFRIUkVBRF9TSUdNQVNLIDEg
Ki8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdHkuaD4gaGVhZGVyIGZpbGUu
ICovCiAjZGVmaW5lIEhBVkVfUFRZX0ggMQpAQCAtNzYzLDIyICs3NjMsMjIgQEAKICNkZWZpbmUg
SEFWRV9QV1JJVEVWIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwd3JpdGV2
MicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUFdSSVRFVjIgMQorLyogI2RlZmluZSBIQVZF
X1BXUklURVYyIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkbGlu
aycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfUkVBRExJTksgMQogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRsaW5rYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZF
X1JFQURMSU5LQVQgMQorLyogI2RlZmluZSBIQVZFX1JFQURMSU5LQVQgMSAqLwogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWR2JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFW
RV9SRUFEViAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhbHBhdGgnIGZ1
bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1JFQUxQQVRIIDEKKy8qICNkZWZpbmUgSEFWRV9SRUFM
UEFUSCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1
bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1JFTkFNRUFUIDEKKy8qICNkZWZpbmUgSEFWRV9SRU5B
TUVBVCAxICovCiAKIC8qIERlZmluZSBpZiByZWFkbGluZSBzdXBwb3J0cyBhcHBlbmRfaGlzdG9y
eSAqLwogLyogI3VuZGVmIEhBVkVfUkxfQVBQRU5EX0hJU1RPUlkgKi8KQEAgLTgyMCwxMCArODIw
LDEwIEBACiAjZGVmaW5lIEhBVkVfU0NIRURfU0VUQUZGSU5JVFkgMQogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHBhcmFtJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUg
SEFWRV9TQ0hFRF9TRVRQQVJBTSAxCisvKiAjZGVmaW5lIEhBVkVfU0NIRURfU0VUUEFSQU0gMSAq
LwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHNjaGVkdWxlcicg
ZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSIDEKKy8qICNkZWZp
bmUgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHNlbV9nZXR2YWx1ZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU0VNX0dF
VFZBTFVFIDEKQEAgLTgzOCw3ICs4MzgsNyBAQAogI2RlZmluZSBIQVZFX1NFTV9VTkxJTksgMQog
CiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbmRmaWxlJyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9TRU5ERklMRSAxCisvKiAjZGVmaW5lIEhBVkVfU0VOREZJTEUgMSAqLwog
CiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGVnaWQnIGZ1bmN0aW9uLiAqLwog
I2RlZmluZSBIQVZFX1NFVEVHSUQgMQpAQCAtODU2LDcgKzg1Niw3IEBACiAjZGVmaW5lIEhBVkVf
U0VUSE9TVE5BTUUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGl0aW1l
cicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUSVRJTUVSIDEKKy8qICNkZWZpbmUgSEFW
RV9TRVRJVElNRVIgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGxv
Y2FsZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKQEAgLTg2OCwxMyAr
ODY4LDEzIEBACiAjZGVmaW5lIEhBVkVfU0VUUEdSUCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgc2V0cHJpb3JpdHknIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFBS
SU9SSVRZIDEKKy8qICNkZWZpbmUgSEFWRV9TRVRQUklPUklUWSAxICovCiAKIC8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZF
X1NFVFJFR0lEIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXNnaWQn
IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFJFU0dJRCAxCisvKiAjZGVmaW5lIEhBVkVf
U0VUUkVTR0lEIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXN1
aWQnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NFVFJFU1VJRCAxCkBAIC04OTUsNDAgKzg5
NSw0MCBAQAogI2RlZmluZSBIQVZFX1NIQURPV19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBzaWdhY3Rpb24nIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR0FDVElP
TiAxCisvLyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHNpZ2FsdHN0YWNrJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdBTFRT
VEFDSyAxCisvLyNkZWZpbmUgSEFWRV9TSUdBTFRTVEFDSyAxCiAKIC8qIERlZmluZSB0byAxIGlm
IGBzaV9iYW5kJyBpcyBhIG1lbWJlciBvZiBgc2lnaW5mb190Jy4gKi8KLSNkZWZpbmUgSEFWRV9T
SUdJTkZPX1RfU0lfQkFORCAxCisvLyNkZWZpbmUgSEFWRV9TSUdJTkZPX1RfU0lfQkFORCAxCiAK
IC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnaW50ZXJydXB0JyBmdW5jdGlvbi4g
Ki8KLSNkZWZpbmUgSEFWRV9TSUdJTlRFUlJVUFQgMQorLy8jZGVmaW5lIEhBVkVfU0lHSU5URVJS
VVBUIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVy
IGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQorLyogI2RlZmluZSBIQVZFX1NJR05B
TF9IIDEgKi8gLy8gVE9ETwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3Bl
bmRpbmcnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR1BFTkRJTkcgMQorLyogI2RlZmlu
ZSBIQVZFX1NJR1BFTkRJTkcgMSAqLyAvLyBUT0RPCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgc2lncmVsc2UnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR1JFTFNFIDEK
Ky8qICNkZWZpbmUgSEFWRV9TSUdSRUxTRSAxICovIC8vVE9ETwogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHNpZ3RpbWVkd2FpdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVf
U0lHVElNRURXQUlUIDEKKy8qICNkZWZpbmUgSEFWRV9TSUdUSU1FRFdBSVQgMSAqLy8vIHRvZG8K
IAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWd3YWl0JyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9TSUdXQUlUIDEKKy8vI2RlZmluZSBIQVZFX1NJR1dBSVQgMQogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3dhaXRpbmZvJyBmdW5jdGlvbi4gKi8KLSNk
ZWZpbmUgSEFWRV9TSUdXQUlUSU5GTyAxCisvLyNkZWZpbmUgSEFWRV9TSUdXQUlUSU5GTyAxCiAK
IC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLwot
I2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKKy8vI2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKIAogLyog
c3RydWN0IHNvY2thZGRyX2FsZyAobGludXgvaWZfYWxnLmgpICovCi0jZGVmaW5lIEhBVkVfU09D
S0FERFJfQUxHIDEKKy8vI2RlZmluZSBIQVZFX1NPQ0tBRERSX0FMRyAxCiAKIC8qIERlZmluZSBp
ZiBzb2NrYWRkciBoYXMgc2FfbGVuIG1lbWJlciAqLwogLyogI3VuZGVmIEhBVkVfU09DS0FERFJf
U0FfTEVOICovCkBAIC05NjUsNyArOTY1LDcgQEAKICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCiAK
IC8qIEhhcyBzdGRhdG9taWMuaCB3aXRoIGF0b21pY19pbnQgKi8KLSNkZWZpbmUgSEFWRV9TVERf
QVRPTUlDIDEKKy8vI2RlZmluZSBIQVZFX1NURF9BVE9NSUMgMQogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU1RSRFVQ
IDEKQEAgLTk4Myw3ICs5ODMsNyBAQAogLyogI3VuZGVmIEhBVkVfU1RSTENQWSAqLwogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCi0j
ZGVmaW5lIEhBVkVfU1RST1BUU19IIDEKKy8qICNkZWZpbmUgSEFWRV9TVFJPUFRTX0ggMSAqLwog
CiAvKiBEZWZpbmUgdG8gMSBpZiBgcHdfZ2Vjb3MnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcGFz
c3dkJy4gKi8KICNkZWZpbmUgSEFWRV9TVFJVQ1RfUEFTU1dEX1BXX0dFQ09TIDEKQEAgLTEwMTAs
MTMgKzEwMTAsMTMgQEAKICNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9SREVWIDEKIAogLyog
RGVmaW5lIHRvIDEgaWYgYHRtX3pvbmUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdG0nLiAqLwot
I2RlZmluZSBIQVZFX1NUUlVDVF9UTV9UTV9aT05FIDEKKy8qICNkZWZpbmUgSEFWRV9TVFJVQ1Rf
VE1fVE1fWk9ORSAxICovCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3N5bWxpbmsnIGZ1
bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NZTUxJTksgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgYHN5bWxpbmthdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1lNTElO
S0FUIDEKKy8qICNkZWZpbmUgSEFWRV9TWU1MSU5LQVQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHN5bmMnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NZTkMgMQpA
QCAtMTA0NCw3ICsxMDQ0LDcgQEAKIC8qICN1bmRlZiBIQVZFX1NZU19FTkRJQU5fSCAqLwogCiAv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lcG9sbC5oPiBoZWFkZXIgZmlsZS4g
Ki8KLSNkZWZpbmUgSEFWRV9TWVNfRVBPTExfSCAxCisvKiAjZGVmaW5lIEhBVkVfU1lTX0VQT0xM
X0ggMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9ldmVudC5oPiBo
ZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1NZU19FVkVOVF9IICovCkBAIC0xMDc4LDcg
KzEwNzgsNyBAQAogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFW
RV9TWVNfUE9MTF9IIDEKKy8vI2RlZmluZSBIQVZFX1NZU19QT0xMX0ggMQogCiAvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yYW5kb20uaD4gaGVhZGVyIGZpbGUuICovCiAjZGVm
aW5lIEhBVkVfU1lTX1JBTkRPTV9IIDEKQEAgLTEwOTAsNyArMTA5MCw3IEBACiAjZGVmaW5lIEhB
VkVfU1lTX1NFTEVDVF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv
c2VuZGZpbGUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTkRGSUxFX0gg
MQorLyogI2RlZmluZSBIQVZFX1NZU19TRU5ERklMRV9IIDEgKi8KIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBI
QVZFX1NZU19TT0NLRVRfSCAxCkBAIC0xMTkxLDcgKzExOTEsNyBAQAogI2RlZmluZSBIQVZFX1VO
SVNURF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmxpbmthdCcgZnVu
Y3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVU5MSU5LQVQgMQorLyogI2RlZmluZSBIQVZFX1VOTElO
S0FUIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bnNldGVudicgZnVu
Y3Rpb24uICovCiAjZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAK
IC8qICN1bmRlZiBIQVZFX1VUSUxfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHV0aW1lbnNhdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVVRJTUVOU0FUIDEKKy8q
ICNkZWZpbmUgSEFWRV9VVElNRU5TQVQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHV0aW1lcycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfVVRJTUVTIDEKQEAgLTEy
MjAsMTMgKzEyMjAsMTUgQEAKIC8qICN1bmRlZiBIQVZFX1VVSURfRU5DX0JFICovCiAKIC8qIERl
ZmluZSBpZiB1dWlkX2dlbmVyYXRlX3RpbWVfc2FmZSgpIGV4aXN0cy4gKi8KLSNkZWZpbmUgSEFW
RV9VVUlEX0dFTkVSQVRFX1RJTUVfU0FGRSAxCisvKiAjdW5kZWYgSEFWRV9VVUlEX0dFTkVSQVRF
X1RJTUVfU0FGRSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV1aWQuaD4g
aGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9VVUlEX0ggKi8KKyNpZiBDT05GSUdfTElC
VVVJRAorI2RlZmluZSBIQVZFX1VVSURfSCAxCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDx1dWlkL3V1aWQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVf
VVVJRF9VVUlEX0ggMQorLyogI3VuZGVmIEhBVkVfVVVJRF9VVUlEX0ggKi8KIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0MycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVf
V0FJVDMgMQpAQCAtMTIzNSw3ICsxMjM3LDcgQEAKICNkZWZpbmUgSEFWRV9XQUlUNCAxCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdGlkJyBmdW5jdGlvbi4gKi8KLSNkZWZp
bmUgSEFWRV9XQUlUSUQgMQorLyogI2RlZmluZSBIQVZFX1dBSVRJRCAxICovCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdHBpZCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhB
VkVfV0FJVFBJRCAxCkBAIC0xMjYzLDEwICsxMjY1LDEwIEBACiAjZGVmaW5lIEhBVkVfV1JJVEVW
IDEKIAogLyogRGVmaW5lIGlmIGxpYnNzbCBoYXMgWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9ob3N0
IGFuZCByZWxhdGVkIGZ1bmN0aW9uICovCi0jZGVmaW5lIEhBVkVfWDUwOV9WRVJJRllfUEFSQU1f
U0VUMV9IT1NUIDEKKy8qICN1bmRlZiBIQVZFX1g1MDlfVkVSSUZZX1BBUkFNX1NFVDFfSE9TVCAq
LwogCiAvKiBEZWZpbmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHkgKi8KLSNk
ZWZpbmUgSEFWRV9aTElCX0NPUFkgMQorLyogI3VuZGVmIEhBVkVfWkxJQl9DT1BZICovCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2dldHB0eScgZnVuY3Rpb24uICovCiAvKiAj
dW5kZWYgSEFWRV9fR0VUUFRZICovCkBAIC0xMzA3LDcgKzEzMDksNyBAQAogLyogI3VuZGVmIFBP
U0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQgKi8KIAogLyogRGVmaW5lIGlmIHB0aHJlYWRfa2V5
X3QgaXMgY29tcGF0aWJsZSB3aXRoIGludC4gKi8KLSNkZWZpbmUgUFRIUkVBRF9LRVlfVF9JU19D
T01QQVRJQkxFX1dJVEhfSU5UIDEKKy8qICNkZWZpbmUgUFRIUkVBRF9LRVlfVF9JU19DT01QQVRJ
QkxFX1dJVEhfSU5UIDEgKi8KIAogLyogRGVmaW5lZCBpZiBQVEhSRUFEX1NDT1BFX1NZU1RFTSBz
dXBwb3J0ZWQuICovCiAjZGVmaW5lIFBUSFJFQURfU1lTVEVNX1NDSEVEX1NVUFBPUlRFRCAxCkBA
IC0xMzE2LDcgKzEzMTgsNyBAQAogLyogI3VuZGVmIFBZTE9OR19CSVRTX0lOX0RJR0lUICovCiAK
IC8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBjb2VyY2UgdGhlIEMgbG9jYWxlIHRvIGEgVVRGLTgg
YmFzZWQgbG9jYWxlICovCi0jZGVmaW5lIFBZX0NPRVJDRV9DX0xPQ0FMRSAxCisvKiAjZGVmaW5l
IFBZX0NPRVJDRV9DX0xPQ0FMRSAxICovIC8vVE9ETwogCiAvKiBEZWZpbmUgdG8gcHJpbnRmIGZv
cm1hdCBtb2RpZmllciBmb3IgUHlfc3NpemVfdCAqLwogI2RlZmluZSBQWV9GT1JNQVRfU0laRV9U
ICJ6IgpAQCAtMTMzMiw3ICsxMzM0LDcgQEAKIC8qICN1bmRlZiBQeV9ERUJVRyAqLwogCiAvKiBE
ZWZpbmVkIGlmIFB5dGhvbiBpcyBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5LiAqLwotLyogI3Vu
ZGVmIFB5X0VOQUJMRV9TSEFSRUQgKi8KKyN1bmRlZiBQeV9FTkFCTEVfU0hBUkVECiAKIC8qIERl
ZmluZSBoYXNoIGFsZ29yaXRobSBmb3Igc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldy4gU2lwSGFz
aDI0OiAxLCBGTlY6IDIsCiAgICBleHRlcm5hbGx5IGRlZmluZWQ6IDAgKi8KQEAgLTEzNzgsNyAr
MTM4MCw3IEBACiAjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX0tFWV9UIDQKIAogLyogVGhlIHNpemUg
b2YgYHB0aHJlYWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSNkZWZpbmUgU0laRU9G
X1BUSFJFQURfVCA4CisjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QgMTYKIAogLyogVGhlIHNpemUg
b2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfU0hP
UlQgMgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:09 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKwz-0004dw-5O; Mon, 23 Sep 2019 09:48:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKwx-0004dj-9g
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:07 +0000
X-Inumbo-ID: 2bbb3574-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2bbb3574-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:35 +0000 (UTC)
IronPort-SDR: 4aUhFuMWiBhq1O5ugMHPXEVAn5wLp0f1Ap3F/lGkksdOJqmqw5tB2QkzhUmV0cU+8QTctOXhSl
 QkjQSYYRR6YA==
IronPort-PHdr: =?us-ascii?q?9a23=3ALfAvAhIrO98dFINCitmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfLf3xwZ3uMQTl6Ol3ixeRBMOHsqkC0bqd6vCoGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF8JqsyxR?=
 =?us-ascii?q?fFv3hFcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWG?=
 =?us-ascii?q?hPUdtLVyFZAo2ycZYBAeQCM+hfrYb9qUADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsrDavwcIshZ?=
 =?us-ascii?q?PIhoIT0l3E7SV4wJo1Jd2/Tk53e9mkEIFftyycKoB4QdsiTnl1tCs117EKo5?=
 =?us-ascii?q?22cSgQxJg52RLSaeaLfoaQ7h7+W+udPC10iXFldb6lmRq//0atxvfhWsS7zl?=
 =?us-ascii?q?pHqDdOnMPWuXAXzRPT79CKSv56/ki8xzmCzxvT6uRYIUAskqrbNoIhzqYwlp?=
 =?us-ascii?q?UNtUTDGTf7mFvzjKCMd0Uk/vKk5Pj8Yrn8vp+cKpR7hhvkMqQpgsC/AOI4PR?=
 =?us-ascii?q?YSX2WD5Oix26Dv8Vf6TbhKlPE6jLfVvZLAKckVvqK5BhVa0ocn6xaxFTem19?=
 =?us-ascii?q?EYkGEbI1JCYxKHk4npO1fULPD8EPe/m0msnSx3yPDdJLHhGojNIWPZnLf7er?=
 =?us-ascii?q?Zx81RcxxYrzdBD+5JUDakMIPfyWk/3tdzYCQQ5PxWpzOn5FtVyyIceVHmLAq?=
 =?us-ascii?q?+YK6PSrUSI6vggIuaSYo8ZojH9K+Iq5/T2l382hUcdfbW13ZsQcH24EOppI0?=
 =?us-ascii?q?GYYXr0nNgNC2cKvhc/TOP2iV2PSjhTaGiuUKI4/D40E5iqApneRoq1mryOwD?=
 =?us-ascii?q?+7HoFKZmBBEl2MD3PoeJ+ZVPgUci2SJNJukiYaWrigUYMuzguhuxL9y7pmM+?=
 =?us-ascii?q?rZ4TYYtY7+1Ndo/eHcjw099SduA8SAy2GCVHt4nnkPR2x+4KcqpE17y1CYlK?=
 =?us-ascii?q?R1nfFcPdhS/O9SFBc3M9jb1eMpJcr1X1fqecyVSVDuZsi+HHllRdUq394IJU?=
 =?us-ascii?q?JgA8iKhQuFxzegRaUSwe/YTKco+77RiiCib/12zGzLgfEs?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AVAADWk4hdjAPjVY1lGwEBAQEDAQE?=
 =?us-ascii?q?BDAMBAQGBVgMBAQELAYFzgRdTIBIqjR6IH36YOIFnCQEBATMHAQIBAYFLgnQ?=
 =?us-ascii?q?Cgzc3Bg4CAwkBAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DAxpfECAfElcZgld?=
 =?us-ascii?q?LAYIOC6xUhUyDMoFIgTQBhy+DO4J2P4ERgl2DOxkEgSQUhWgiBI0RiBKBH5Z?=
 =?us-ascii?q?KB4IlZQSGHIkvhEongmVDlX0ZqG83IYFZMxpzgmwJRxAUgWg2iDaCZoJcPQE?=
 =?us-ascii?q?BMQGBBQEBixGCVAEB?=
X-IPAS-Result: =?us-ascii?q?A2AVAADWk4hdjAPjVY1lGwEBAQEDAQEBDAMBAQGBVgMBA?=
 =?us-ascii?q?QELAYFzgRdTIBIqjR6IH36YOIFnCQEBATMHAQIBAYFLgnQCgzc3Bg4CAwkBA?=
 =?us-ascii?q?QUBAQEBAQUEARMBAQEmhV0Mgjoigm8DAxpfECAfElcZgldLAYIOC6xUhUyDM?=
 =?us-ascii?q?oFIgTQBhy+DO4J2P4ERgl2DOxkEgSQUhWgiBI0RiBKBH5ZKB4IlZQSGHIkvh?=
 =?us-ascii?q?EongmVDlX0ZqG83IYFZMxpzgmwJRxAUgWg2iDaCZoJcPQEBMQGBBQEBixGCV?=
 =?us-ascii?q?AEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854255"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:26 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id E54231A602E5;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id w1Dbr50-TgXO; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id C906A1A602E4;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id BzDmY_BljphM; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id A696D1A602E5;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:02 +0300
Message-Id: <20190923094714.21759-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 01/13] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgNDYyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0NjIgaW5z
ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCgpkaWZmIC0tZ2l0IGEv
TWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45NTExOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUudWsKQEAgLTAsMCArMSw0
NjIgQEAKKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyMKKyMgIHB5
dGhvbjMgTWFrZWZpbGUudWsKKyMKKyMgIEF1dGhvcnM6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KKyMgICAgICAgICAgIENvc3RpbiBMdXB1
IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZl
cnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjCisjICAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyAgICAgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyAg
VEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4K
KyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnB5dGhvbjMs
JChDT05GSUdfTElCUFlUSE9OMykpKQorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJweXRob24z
X2NvcmUsJChDT05GSUdfTElCUFlUSE9OMykpKQorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJw
eXRob24zX2V4dGVuc2lvbnMsJChDT05GSUdfTElCUFlUSE9OMykpKQorCisjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworIyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCUFlUSE9O
M19WRVJTSU9OPTMuNworTElCUFlUSE9OM19SRVZJU0lPTj00CitMSUJQWVRIT04zX1ZFUlNJT05f
TE9ORz0kKExJQlBZVEhPTjNfVkVSU0lPTikuJChMSUJQWVRIT04zX1JFVklTSU9OKQorTElCUFlU
SE9OM19CQVNFTkFNRT1QeXRob24tJChMSUJQWVRIT04zX1ZFUlNJT05fTE9ORykKK0xJQlBZVEhP
TjNfVVJMPWh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8kKExJQlBZVEhPTjNfVkVS
U0lPTl9MT05HKS8kKExJQlBZVEhPTjNfQkFTRU5BTUUpLnRnegorTElCUFlUSE9OM19QQVRDSERJ
Uj0kKExJQlBZVEhPTjNfQkFTRSkvcGF0Y2hlcworJChldmFsICQoY2FsbCBmZXRjaCxsaWJweXRo
b24zLCQoTElCUFlUSE9OM19VUkwpKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gsbGlicHl0aG9uMywk
KExJQlBZVEhPTjNfUEFUQ0hESVIpLCQoTElCUFlUSE9OM19CQVNFTkFNRSkpKQorCisjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIworIyBIZWxwZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElC
UFlUSE9OM19TUkMgPSAkKExJQlBZVEhPTjNfT1JJR0lOKS8kKExJQlBZVEhPTjNfQkFTRU5BTUUp
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnkgaW5jbHVkZXMKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCitMSUJQWVRIT04zX0dMT0JBTF9JTkNMVURFUy15ICs9IC1JJChMSUJQ
WVRIT04zX0JBU0UpL2luY2x1ZGUKK0xJQlBZVEhPTjNfR0xPQkFMX0lOQ0xVREVTLXkgKz0gLUkk
KExJQlBZVEhPTjNfU1JDKQorTElCUFlUSE9OM19HTE9CQUxfSU5DTFVERVMteSArPSAtSSQoTElC
UFlUSE9OM19TUkMpL0luY2x1ZGUKK0NJTkNMVURFUy15ICAgKz0gJChMSUJQWVRIT04zX0dMT0JB
TF9JTkNMVURFUy15KQorQ1hYSU5DTFVERVMteSArPSAkKExJQlBZVEhPTjNfR0xPQkFMX0lOQ0xV
REVTLXkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbW1vbiBmbGFncworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgU3VwcHJlc3NlZCBmbGFncworU1VQUFJFU1NfRkxBR1MgKz0g
LVduby11bnVzZWQtcGFyYW1ldGVyIFwKKwktV25vLXVudXNlZC12YXJpYWJsZSAtV25vLXVudXNl
ZC12YWx1ZSAtV25vLXVudXNlZC1mdW5jdGlvbiBcCisJLVduby1taXNzaW5nLWZpZWxkLWluaXRp
YWxpemVycyAtV25vLWltcGxpY2l0LWZhbGx0aHJvdWdoIFwKKwktV25vLWNhc3QtZnVuY3Rpb24t
dHlwZSAtV25vLXN0cmluZ29wLXRydW5jYXRpb24gXAorCS1Xbm8tY2hhci1zdWJzY3JpcHRzIC1X
bm8tc2lnbi1jb21wYXJlCitMSUJQWVRIT04zX1NVUFJFU1NfQ0ZMQUdTLXkgICArPSAkKFNVUFBS
RVNTX0ZMQUdTKSAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgLVduby1pbnQtdG8tcG9pbnRlci1j
YXN0CitMSUJQWVRIT04zX1NVUFJFU1NfQ1hYRkxBR1MteSArPSAkKFNVUFBSRVNTX0ZMQUdTKQor
CisjIENvbW1vbiBmbGFncworTElCUFlUSE9OM19DT01NT05fRkxBR1MteSAgICArPSAtZndyYXB2
CitMSUJQWVRIT04zX0NPTU1PTl9DRkxBR1MteSAgICs9ICQoTElCUFlUSE9OM19DT01NT05fRkxB
R1MteSkKK0xJQlBZVEhPTjNfQ09NTU9OX0NYWEZMQUdTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1P
Tl9GTEFHUy15KQorCisjIENvbW1vbiBwcmVwcm9jZXNzaW5nIHN5bWJvbHMKK0xJQlBZVEhPTjNf
Q09NTU9OX0RFRklORVMteSAgKz0gLUROREVCVUcKK0xJQlBZVEhPTjNfQ09NTU9OX0NGTEFHUy15
ICAgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9ERUZJTkVTLXkpCitMSUJQWVRIT04zX0NPTU1PTl9D
WFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19DT01NT05fREVGSU5FUy15KQorCisjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBHbHVlIGNvZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElu
Y2x1ZGUgcGF0aHMKK0xJQlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09N
TU9OX0lOQ0xVREVTLXkpCitMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04z
X0NPTU1PTl9JTkNMVURFUy15KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQeXRob24g
Y29yZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW5jbHVkZSBwYXRocworTElCUFlUSE9O
M19DT1JFX0NPTU1PTl9JTkNMVURFUy15ICs9ICQoTElCUFlUSE9OM19DT01NT05fSU5DTFVERVMt
eSkKK0xJQlBZVEhPTjNfQ09SRV9DSU5DTFVERVMteSAgICs9ICQoTElCUFlUSE9OM19DT1JFX0NP
TU1PTl9JTkNMVURFUy15KQorTElCUFlUSE9OM19DT1JFX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQ
WVRIT04zX0NPUkVfQ09NTU9OX0lOQ0xVREVTLXkpCisKKyMgU3VwcmVzc2VkIGZsYWdzCitMSUJQ
WVRIT04zX0NPUkVfQ0ZMQUdTLXkgICArPSAkKExJQlBZVEhPTjNfU1VQUkVTU19DRkxBR1MteSkK
K0xJQlBZVEhPTjNfQ09SRV9DWFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19TVVBSRVNTX0NYWEZM
QUdTLXkpCisKKyMgUHJlcHJvY2Vzc2luZyBzeW1ib2xzCitMSUJQWVRIT04zX0NPUkVfREVGSU5F
Uy15ICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMteSkgLURQeV9CVUlMRF9DT1JFIC1E
UHlfQlVJTERfQ09SRV9CVUlMVElOCitMSUJQWVRIT04zX0NPUkVfQ0ZMQUdTLXkgICArPSAkKExJ
QlBZVEhPTjNfQ09SRV9ERUZJTkVTLXkpCitMSUJQWVRIT04zX0NPUkVfQ1hYRkxBR1MteSArPSAk
KExJQlBZVEhPTjNfQ09SRV9ERUZJTkVTLXkpCisKKyNMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL1Byb2dyYW1zL3B5dGhvbi5jCisKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFyc2VyL2FjY2VsZXIuYworTElCUFlUSE9OM19D
T1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvYml0c2V0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFyc2VyL2ZpcnN0c2V0cy5jCitM
SUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9ncmFtbWFy
MS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9n
cmFtbWFyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFy
c2VyL2xpc3Rub2RlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvUGFyc2VyL21ldGFncmFtbWFyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvUGFyc2VyL215cmVhZGxpbmUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvbm9kZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15
ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9wYXJzZXIuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvcGFyc2V0b2suYworI0xJQlBZVEhPTjNf
Q09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFyc2VyL3BhcnNldG9rX3BnZW4uYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvcGdlbi5j
CisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvcGdl
bm1haW4uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJz
ZXIvcHJpbnRncmFtbWFyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvUGFyc2VyL3Rva2VuaXplci5jCisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9QYXJzZXIvdG9rZW5pemVyX3BnZW4uYworCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvYWJzdHJhY3QuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2FjY3UuYworTElCUFlU
SE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2Jvb2xvYmplY3Qu
YworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2J5
dGVhcnJheW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL09iamVjdHMvYnl0ZXNvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NhbGwuYworTElCUFlUSE9OM19DT1JF
X1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NhcHN1bGUuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NlbGxvYmplY3QuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NsYXNz
b2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2Jq
ZWN0cy9jb2Rlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9kZXNjcm9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvZGljdG9iamVjdC5jCitMSUJQWVRI
T04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvZW51bW9iamVjdC5j
CitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvZXhj
ZXB0aW9ucy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09i
amVjdHMvZmlsZW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL09iamVjdHMvZmxvYXRvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9mdW5jb2JqZWN0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9nZW5vYmplY3QuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2l0ZXJv
YmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmpl
Y3RzL2xpc3RvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9PYmplY3RzL2xvbmdvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9PYmplY3RzL21lbW9yeW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9tb2R1bGVvYmplY3Qu
YworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL25h
bWVzcGFjZW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL09iamVjdHMvb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvT2JqZWN0cy9vYm1hbGxvYy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL09iamVjdHMvb2RpY3RvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9zZXRvYmplY3QuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3NsaWNl
b2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2Jq
ZWN0cy9zdHJ1Y3RzZXEuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9PYmplY3RzL3R1cGxlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChM
SUJQWVRIT04zX1NSQykvT2JqZWN0cy90eXBlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy91bmljb2RlY3R5cGUuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3VuaWNvZGVvYmplY3Qu
YworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3dl
YWtyZWZvYmplY3QuYworCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1B5dGhvbi9hc2RsLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvUHl0aG9uL2FzdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL1B5dGhvbi9hc3Rfb3B0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvUHl0aG9uL2FzdF91bnBhcnNlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2JsdGlubW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09S
RV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2Jvb3RzdHJhcF9oYXNoLmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2NldmFsLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2NvZGVj
cy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9j
b21waWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0
aG9uL2NvbnRleHQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vZHRvYS5jCisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9QeXRob24vZHVwMi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL1B5dGhvbi9keW5hbWljX2Fubm90YXRpb25zLmMKKyNMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9keW5sb2FkX2RsLmMKKyNMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9keW5sb2FkX3NobGliLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2R5bmxv
YWRfc3R1Yi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5
dGhvbi9lcnJvcnMuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vZmlsZXV0aWxzLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2Zyb3plbi5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9mcm96ZW5tYWluLmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2Z1dHVyZS5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9nZXRhcmdzLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2dldGNv
bXBpbGVyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0
aG9uL2dldGNvcHlyaWdodC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL1B5dGhvbi9nZXRvcHQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9QeXRob24vZ2V0cGxhdGZvcm0uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vZ2V0dmVyc2lvbi5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9ncmFtaW5pdC5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9oYW10LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2ltcG9ydC5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9pbXBvcnRkbC5j
CitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9tYXJz
aGFsLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9u
L21vZHN1cHBvcnQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vbXlzbnByaW50Zi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL1B5dGhvbi9teXN0cnRvdWwuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9QeXRob24vcGF0aGNvbmZpZy5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9wZWVwaG9sZS5jCitMSUJQWVRIT04zX0NP
UkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9weWFyZW5hLmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5Y3R5cGUuYworTElC
UFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHlmcGUuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHloYXNo
LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5
bGlmZWN5Y2xlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
UHl0aG9uL3B5bWF0aC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1B5dGhvbi9weXN0YXRlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvUHl0aG9uL3B5c3RyY21wLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChM
SUJQWVRIT04zX1NSQykvUHl0aG9uL3B5c3RyaGV4LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5c3RydG9kLmMKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL1B5dGhvbi1hc3QuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHl0aG9ucnVuLmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5dGltZS5j
CisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vc3Ry
ZHVwLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9u
L3N0cnVjdG1lbWJlci5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1B5dGhvbi9zeW10YWJsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL1B5dGhvbi9zeXNtb2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NZU01PRFVMRV9G
TEFHUy15ICs9IC1EQUJJRkxBR1M9JyJtIicgLURNVUxUSUFSQ0g9XCJ4ODZfNjQtbGludXgtZ251
XCIKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3Ro
cmVhZC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhv
bi90cmFjZWJhY2suYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vX3dhcm5pbmdzLmMKKworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL19hYmMuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCitMSUJQWVRI
T04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2NvbGxlY3Rpb25z
bW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9k
dWxlcy9lcnJub21vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKK0xJQlBZVEhPTjNf
Q09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9nY21vZHVsZS5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvZ2V0YnVpbGRp
bmZvLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9nZXRwYXRoLmMKK0xJQlBZVEhPTjNfQ09SRV9HRVRQQVRIX0ZMQUdTLXkgKz0gLURQWVRIT05Q
QVRIPSciL2xpYi9weXRob24kKExJQlBZVEhPTjNfVkVSU0lPTikiJyBcCisJLURQUkVGSVg9JyIi
JyBcCisJLURFWEVDX1BSRUZJWD0nIiInIFwKKwktRFZFUlNJT049JyIkKExJQlBZVEhPTjNfVkVS
U0lPTikiJyBcCisJLURWUEFUSD0nIiInCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvaGFzaHRhYmxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2lvL2J5dGVzaW8uYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19pby9m
aWxlaW8uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19pby9pb2Jhc2UuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19pby9zdHJpbmdpby5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2lvL3RleHRpby5jCitMSUJQWVRI
T04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvaXRlcnRvb2xzbW9k
dWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fbG9jYWxlbW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9tYWluLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fbWF0aC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX29wZXJhdG9yLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCitMSUJQWVRIT04zX0NP
UkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvcHdkbW9kdWxlLmMKK0xJQlBZ
VEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9zaWduYWxtb2R1
bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVz
L19zcmUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19zdGF0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvdGltZW1vZHVsZS5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3RyYWNlbWFsbG9jLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fd2Vh
a3JlZi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMveHhzdWJ0eXBlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvTW9kdWxlcy96aXBpbXBvcnQuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQeXRo
b24gZXh0ZW5zaW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW5jbHVkZSBwYXRocwor
TElCUFlUSE9OM19FWFRFTlNJT05TX0NPTU1PTl9JTkNMVURFUy15ICs9ICQoTElCUFlUSE9OM19D
T01NT05fSU5DTFVERVMteSkKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19DSU5DTFVERVMteSAgICs9
ICQoTElCUFlUSE9OM19FWFRFTlNJT05TX0NPTU1PTl9JTkNMVURFUy15KQorTElCUFlUSE9OM19F
WFRFTlNJT05TX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ09NTU9O
X0lOQ0xVREVTLXkpCisKKyMgU3VwcmVzc2VkIGZsYWdzCitMSUJQWVRIT04zX0VYVEVOU0lPTlNf
Q0ZMQUdTLXkgICArPSAkKExJQlBZVEhPTjNfU1VQUkVTU19DRkxBR1MteSkKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19DWFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19TVVBSRVNTX0NYWEZMQUdTLXkp
CisKKyMgUHJlcHJvY2Vzc2luZyBzeW1ib2xzCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfREVGSU5F
Uy15ICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMteSkgLURQeV9CVUlMRF9FWFRFTlNJ
T05TCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ0ZMQUdTLXkgICArPSAkKExJQlBZVEhPTjNfRVhU
RU5TSU9OU19ERUZJTkVTLXkpCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ1hYRkxBR1MteSArPSAk
KExJQlBZVEhPTjNfRVhURU5TSU9OU19ERUZJTkVTLXkpCisKK0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9hcnJheW1vZHVsZS5jCitMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2Fz
eW5jaW9tb2R1bGUuYworIyBBdWRpbzogTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2F1ZGlvb3AuYworTElCUFlUSE9OM19FWFRFTlNJT05T
X1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2JpbmFzY2lpLmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmlzZWN0
bW9kdWxlLmMKK2lmZXEgKCQoQ09ORklHX0xJQklOVEVMX0lOVFJJTlNJQ1MpLHkpCitMSUJQWVRI
T04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2JsYWtl
Mi9ibGFrZTJiX2ltcGwuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL19ibGFrZTIvYmxha2UybW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmxha2UyL2JsYWtl
MnNfaW1wbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL01vZHVsZXMvX2JsYWtlMi9pbXBsL2JsYWtlMmIuYworI0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmxha2UyL2ltcGwvYmxha2Uy
Yi1yZWYuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9Nb2R1bGVzL19ibGFrZTIvaW1wbC9ibGFrZTJzLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2JsYWtlMi9pbXBsL2JsYWtlMnMt
cmVmLmMKK2VuZGlmCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19iejJtb2R1bGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKK0xJ
QlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9j
amtjb2RlY3MvX2NvZGVjc19oay5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCitMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvY2pr
Y29kZWNzL19jb2RlY3NfanAuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9jamtjb2RlY3Mv
X2NvZGVjc190dy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9jbWF0aG1vZHVsZS5j
CitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMvX2NvbnRleHR2YXJzbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3N2LmMKK2lmZXEg
KCQoQ09ORklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX0NUWVBFUykseSkKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2NhbGxi
YWNrcy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15
ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYworTElCUFlUSE9O
M19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMv
X2N0eXBlcy5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMKKyNMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9kYXJ3aW4vZGxm
Y25fc2ltcGxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYworI0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZm
aV9tc3ZjL3ByZXBfY2lmLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy90eXBlcy5jCisjTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlw
ZXMvbGliZmZpX21zdmMvd2luMzIuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMKKyNMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0
eXBlcy9saWJmZmlfb3N4L3Bvd2VycGMvcHBjLWZmaV9kYXJ3aW4uYworI0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZm
aV9vc3gvdHlwZXMuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCisjTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19j
dHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaV9kYXJ3aW4uYworTElCUFlUSE9OM19FWFRFTlNJ
T05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMvbWFsbG9jX2Ns
b3N1cmUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCitlbmRpZgorI0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKKyNM
SUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMv
X2N1cnNlc19wYW5lbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RibW1vZHVsZS5jCitpZmVx
ICgkKENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9MSUJNUERFQykseSkKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19DSU5DTFVERVMteSArPSAtSSQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2Rl
Y2ltYWwvbGlibXBkZWMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19DRkxBR1MteSAgICArPSAtRENP
TkZJR182NCAtREFOU0kKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCitMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMv
YmFzZWFyaXRoLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9jb25zdGFudHMuYworTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFsL2xp
Ym1wZGVjL2NvbnRleHQuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2NvbnZvbHV0ZS5jCitMSUJQWVRI
T04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2lt
YWwvbGlibXBkZWMvY3J0LmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9kaWZyYWRpeDIuYworTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNp
bWFsL2xpYm1wZGVjL2ZudC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvZm91cnN0ZXAuYworTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNp
bWFsL2xpYm1wZGVjL2lvLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tZW1vcnkuYworTElCUFlUSE9O
M19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFs
L2xpYm1wZGVjL21wZGVjaW1hbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbnVtYmVydGhlb3J5LmMK
K0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fZGVjaW1hbC9saWJtcGRlYy9zaXhzdGVwLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy90cmFuc3Bv
c2UuYworZW5kaWYKK2lmZXEgKCQoQ09ORklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX0VYUEFUKSx5
KQorTElCUFlUSE9OM19FWFRFTlNJT05TX0NJTkNMVURFUy15ICs9IC1JJChMSUJQWVRIT04zX1NS
QykvTW9kdWxlcy9leHBhdAorTElCUFlUSE9OM19FWFRFTlNJT05TX0NGTEFHUy15ICAgICs9IC1E
SEFWRV9FWFBBVF9DT05GSUdfSD0xIC1EWE1MX1BPT1JfRU5UUk9QWT0xIC1EVVNFX1BZRVhQQVRf
Q0FQSQorTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL19lbGVtZW50dHJlZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvZXhwYXQvbG9hZGxpYnJhcnkuYworTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2V4cGF0L3htbHBh
cnNlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9leHBhdC94bWxyb2xlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9leHBhdC94bWx0b2suYworTElCUFlUSE9OM19FWFRF
TlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2V4cGF0L3htbHRva19p
bXBsLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9leHBhdC94bWx0b2tfbnMuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3B5ZXhwYXQuYworZW5kaWYKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9mY250bG1vZHVs
ZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL19nZGJtbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvZ2V0YWRkcmluZm8uYworI0xJQlBZVEhPTjNfRVhURU5T
SU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9nZXRuYW1laW5mby5jCisj
IFRPRE8gZW5hYmxlIExJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9ncnBtb2R1bGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MtJChD
T05GSUdfTElCUFlUSE9OM19FWFRFTlNJT05fU1NMKSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19oYXNob3BlbnNzbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fanNvbi5jCitMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2xzcHJvZi5j
CisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19sem1hbW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9tYXRobW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9tZDVtb2R1bGUuYworIyBUT0RPIGVu
YWJsZSBMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvbW1hcG1vZHVsZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMK
KyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9uaXNtb2R1bGUuYworTElCUFlUSE9O
M19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19vcGNvZGUu
YworIyBBdWRpbzogTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKKyMgV2luZG93czogTElCUFlUSE9OM19FWFRFTlNJ
T05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL292ZXJsYXBwZWQuYworTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3Bh
cnNlcm1vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3BpY2tsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCitMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3F1ZXVlbW9k
dWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKKyMgVE9ETyBlbmFibGUgTElCUFlUSE9OM19FWFRFTlNJ
T05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3JlYWRsaW5lLmMKK0xJQlBZ
VEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9yZXNv
dXJjZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvcm90YXRpbmd0cmVlLmMKKyMgaU9TOiBMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NjcHJveHkuYworTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3NlbGVjdG1vZHVs
ZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvc2hhMW1vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NoYTMva2NwL0tlY2Nha0hh
c2guYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9fc2hhMy9rY3AvS2VjY2FrUC0xNjAwLWlucGxhY2UzMkJJLmMKKyNMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NoYTMva2Nw
L0tlY2Nha1AtMTYwMC1vcHQ2NC5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zaGEzL2tjcC9LZWNjYWtTcG9uZ2UuYworTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zaGEz
L3NoYTNtb2R1bGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKyMgVE9ETyBl
bmFibGUgTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL3Nwd2Rtb2R1bGUuYworaWZlcSAoJChDT05GSUdfTElCUFlUSE9OM19FWFRFTlNJT05f
U1FMSVRFKSx5KQorTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCitMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3Nx
bGl0ZS9jdXJzb3IuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvbWljcm9wcm90b2NvbHMuYworTElCUFlUSE9OM19FWFRF
TlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxl
LmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9k
dWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvcm93LmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fc3FsaXRl
L3N0YXRlbWVudC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKK2VuZGlmCitMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy0kKENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9TU0wpICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3NzbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3N0cnVjdC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKKyNMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvdGVy
bWlvcy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvX3Rlc3RidWZmZXIuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCitMSUJQWVRIT04zX0VY
VEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3Rlc3RpbXBvcnRt
dWx0aXBsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL01vZHVsZXMvX3Rlc3RtdWx0aXBoYXNlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvdGthcHBpbml0LmMKKyNMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3RraW50ZXIu
YworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL3VuaWNvZGVkYXRhLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLSQoQ09ORklHX0xJ
QlBZVEhPTjNfRVhURU5TSU9OX1VVSUQpICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3V1
aWRtb2R1bGUuYworIyBXaW5kb3dzOiBMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3dpbmFwaS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMveHhsaW1pdGVkLmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy94eG1vZHVs
ZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvX3h4dGVzdGZ1enovZnV6emVyLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9feHh0ZXN0ZnV6ei9feHh0ZXN0ZnV6ei5jCitM
SUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy0kKENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9a
TElCKSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3psaWJtb2R1bGUuYworCisjTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9NaXNjL2NvdmVyaXR5
X21vZGVsLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJlcGFyZSBydWxlcworIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBDdXN0b21pemUgY29uZmlnOiBjb25maWd1cmUgc3Rh
Y2sgc2l6ZQorJChBUFBfQkFTRSkvLmNvbmZpZy5vcmlnOiAkKEFQUF9CQVNFKS8uY29uZmlnCisJ
JChjYWxsIHZlcmJvc2VfY21kLENPTkZJRyxsaWJweXRob24zOiAkKG5vdGRpciAkQCksIFwKKwkJ
Y3AgJChBUFBfQkFTRSkvLmNvbmZpZyAkQCAmJiBcCisJCXNlZCAtaSAncy9eQ09ORklHX1NUQUNL
X1NJWkVfUEFHRV9PUkRFUj0uKiQkL0NPTkZJR19TVEFDS19TSVpFX1BBR0VfT1JERVI9MTAvZycg
JChBUFBfQkFTRSkvLmNvbmZpZykKKworTElCUFlUSE9OM19QUkVQQVJFRF9ERVBTID0gXAorCSQo
QVBQX0JBU0UpLy5jb25maWcub3JpZyBcCisKKyQoTElCUFlUSE9OM19CVUlMRCkvLnByZXBhcmVk
OiAkKExJQlBZVEhPTjNfUFJFUEFSRURfREVQUykKKworVUtfUFJFUEFSRSArPSAkKExJQlBZVEhP
TjNfQlVJTEQpLy5wcmVwYXJlZAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKx4-0004ez-8K; Mon, 23 Sep 2019 09:48:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKx2-0004ek-9X
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:12 +0000
X-Inumbo-ID: 2bf5653c-dde7-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2bf5653c-dde7-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:35 +0000 (UTC)
IronPort-SDR: Q2VhQJGoiHdHa2kZOjJ5DNoGGDdotBPFPfY+LNmgdHc/E/IL/VmYkEReUETPaQVcxmNHa56YX7
 9NQ6Mkqeku3Q==
IronPort-PHdr: =?us-ascii?q?9a23=3A0f3YlRERZZsOS1OwCRpH1J1GYnF86YWxBRYc79?=
 =?us-ascii?q?8ds5kLTJ7yoc+wAkXT6L1XgUPTWs2DsrQY0rGQ6fCrADxIoc7Y9ixbKtoUD1?=
 =?us-ascii?q?5NoP5VtjRoONSCB0z/IayiRA0BN+MGamVY+WqmO1NeAsf0ag6aiHSz6TkPBk?=
 =?us-ascii?q?e3blItdaz6FYHIksu4yf259YHNbAVUnjq9Zq55IAmroQnLucQanIVvJrwvxh?=
 =?us-ascii?q?bKrXdEZudbzn5sKV6Pghrw/Mi98IN9/yhKp/4t68tMWrjmcqolSrBVEC4oOH?=
 =?us-ascii?q?0v6s3xshnDQwqP5n8CXWgTjxFFHQvL4gzkU5noqif1ufZz1yecPc3tULA7Qi?=
 =?us-ascii?q?+i4LtxSB/pkygIKTg0+3zKh8NqjaJbpBWhpwFjw4PRfYqYOuZycr/bcNgHQ2?=
 =?us-ascii?q?dKQ8RfWDFbAo6kb4UBEfcPM+hboYf6pVQOowCzCRWwCO711jNFnGP60bE83u?=
 =?us-ascii?q?88EQ/GxgsgH9cWvXnKq9X1L7sSUeGzzKLVyzvDcutW2Srg44XPbh8hpuqMXa?=
 =?us-ascii?q?5xccrX00UvEx7Fjk2NqYH+IzyVzf4Bs3CG7+V7T+6vkWknphh3rzOyyMksjY?=
 =?us-ascii?q?zJiZgUylDC7Sh52Jw1KsOiRE56Z96pFoZbuSKCN4ZuX88vTHxktDw5x7AGo5?=
 =?us-ascii?q?K3YjYGxZY9yxPRc/CLboeF7g/5WOuSITp0nmxpdbyxihqo7EStxfPwW8+p21?=
 =?us-ascii?q?hQtCVFiMPDtnUV2hzW7ciIV+Vy81+62TaKywDT8uZEIV0olabDK54u3Lowlp?=
 =?us-ascii?q?0LvETdGy/5gkT2jKuMeko44eik8fznYqj9qZOGLY90jRnyMqUomsOhHeQ1Kh?=
 =?us-ascii?q?UCUmeG9eim17Du/Vf1TKtUgvA0iKXUvojWJcEBqa64Bw9V3Jwj6xG6Dzq+zN?=
 =?us-ascii?q?sYmmIHLE5EeBKBlYTpP0zOIOjlDfqkn1usiy1nx+jbPrL6GJnNNH/DnK/7fb?=
 =?us-ascii?q?lh805c1BYzzddH6pJRC7EBJvPzWkjqtNDBExA2LRK0zPjjCNhm0oMeWHmPAr?=
 =?us-ascii?q?OCMK/Ivl6H+OQvL/OLZI8Ptzb3M+Il6OL2jX8lhV8derGk3ZUJZ3C8H/RmO1?=
 =?us-ascii?q?uWbWDsgtccEGcFogs+QffsiFKcTTFTY2y9ULkm6j4lFYKsFZ3DSZy1gLydwC?=
 =?us-ascii?q?e7GYVbZn5CCl+WDHjnb5+LW/ERZyKIPMBhkyYIWqO7RIA80hGutRL6xqF8Lu?=
 =?us-ascii?q?rI5y0XqIjv28Jp6O3Ijx0y6CR0AN+H32GXSGEn1l8PEjo32qF4uglxx0mO1Y?=
 =?us-ascii?q?B8gudEDppD6vUPVR01ZrDGyOkvINfpRgPHNvOUUEvuFt6hGi0wSJQ13scTS0?=
 =?us-ascii?q?1mXc2/hFbZ2Hz5UPcui7WXCclsoern1H/rKpMlxg=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CRAQDWk4hdjAPjVY1lHQEBBQEMBQG?=
 =?us-ascii?q?BZ4MLUyASKo0eiB+bHQkBAQEpEQECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAE?=
 =?us-ascii?q?TAQEBJoVdDII6IoJvAwMaXxAgHxJXGYMiAYIOrF+FTIMygUiBNIcwhjE/gRG?=
 =?us-ascii?q?DUIoFIgSNIYkhlkoHgiVlBIYcjXkngyiVfS2jI4U4OCCBWTMaUoMNCUcQFIF?=
 =?us-ascii?q?aDgmBQIRliAA9AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2CRAQDWk4hdjAPjVY1lHQEBBQEMBQGBZ4MLUyASKo0ei?=
 =?us-ascii?q?B+bHQkBAQEpEQECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAETAQEBJoVdDII6I?=
 =?us-ascii?q?oJvAwMaXxAgHxJXGYMiAYIOrF+FTIMygUiBNIcwhjE/gRGDUIoFIgSNIYkhl?=
 =?us-ascii?q?koHgiVlBIYcjXkngyiVfS2jI4U4OCCBWTMaUoMNCUcQFIFaDgmBQIRliAA9A?=
 =?us-ascii?q?QExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854259"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3E43E1A602EE;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id nXzFI6fvHYnl; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 1ADC21A602EF;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id ca5Lj1US23jq; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id EA2731A602E4;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:06 +0300
Message-Id: <20190923094714.21759-6-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 05/13] _sysconfigdata.py:
 Introduce file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKX3N5c2NvbmZpZ2RhdGEucHkgY29udGFpbnMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGRh
dGEgdXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIgYXQKcnVudGltZS4gVGhpcyBwYXRjaCBhZGRzIHRo
ZSBzbGlnaHRseSBjaGFuZ2VkIGZpbGUgZ2VuZXJhdGVkIGJ5IGEgLi9jb25maWd1cmUKcnVuLgoK
U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3Mu
cHViLnJvPgotLS0KIF9zeXNjb25maWdkYXRhLnB5IHwgNzA3ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA3MDcgaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IF9zeXNjb25maWdkYXRhLnB5CgpkaWZmIC0tZ2l0IGEv
X3N5c2NvbmZpZ2RhdGEucHkgYi9fc3lzY29uZmlnZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xOTM1NGNhCi0tLSAvZGV2L251bGwKKysrIGIvX3N5c2NvbmZpZ2Rh
dGEucHkKQEAgLTAsMCArMSw3MDcgQEAKKyMgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGVk
IGFuZCB1c2VkIGJ5IHRoZSBzeXNjb25maWcgbW9kdWxlCitidWlsZF90aW1lX3ZhcnMgPSB7J0FC
SUZMQUdTJzogJ20nLAorICdBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQnOiAwLAorICdBSVhfR0VO
VUlORV9DUExVU1BMVVMnOiAwLAorICdBTkRST0lEX0FQSV9MRVZFTCc6IDAsCisgJ0FSJzogJ2Fy
JywKKyAnQVJGTEFHUyc6ICdyY3MnLAorICdCQVNFQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3Vs
dCAtV3NpZ24tY29tcGFyZScsCisgJ0JBU0VDUFBGTEFHUyc6ICcnLAorICdCQVNFTU9ETElCUyc6
ICcnLAorICdCSU5ESVInOiAnL3Vzci9sb2NhbC9iaW4nLAorICdCSU5MSUJERVNUJzogJy91c3Iv
bG9jYWwvbGliL3B5dGhvbjMuNycsCisgJ0JMRExJQlJBUlknOiAnbGlicHl0aG9uMy43bS5hJywK
KyAnQkxEU0hBUkVEJzogJ2djYyAtcHRocmVhZCAtc2hhcmVkJywKKyAnQlVJTERFWEUnOiAnJywK
KyAnQlVJTERQWVRIT04nOiAncHl0aG9uJywKKyAnQlVJTERfR05VX1RZUEUnOiAneDg2XzY0LXBj
LWxpbnV4LWdudScsCisgJ0JZVEVTVFJfREVQUyc6ICdcXCcsCisgJ0NDJzogJ2djYyAtcHRocmVh
ZCcsCisgJ0NDU0hBUkVEJzogJy1mUElDJywKKyAnQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3Vs
dCAtV3NpZ24tY29tcGFyZSAtRE5ERUJVRyAtZyAtZndyYXB2IC1PMyAtV2FsbCcsCisgJ0NGTEFH
U0ZPUlNIQVJFRCc6ICcnLAorICdDRkxBR1NfQUxJQVNJTkcnOiAnJywKKyAnQ0ZMQUdTX05PRElT
VCc6ICcnLAorICdDT05GSUdGSUxFUyc6ICdjb25maWd1cmUgY29uZmlndXJlLmFjIGFjY29uZmln
LmggcHljb25maWcuaC5pbiAnCisgICAgICAgICAgICAgICAgJ01ha2VmaWxlLnByZS5pbicsCisg
J0NPTkZJR1VSRV9DRkxBR1MnOiAnJywKKyAnQ09ORklHVVJFX0NGTEFHU19OT0RJU1QnOiAnLXN0
ZD1jOTkgLVdleHRyYSAtV25vLXVudXNlZC1yZXN1bHQgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICctV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzICcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUgJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uJywKKyAnQ09O
RklHVVJFX0NQUEZMQUdTJzogJycsCisgJ0NPTkZJR1VSRV9MREZMQUdTJzogJycsCisgJ0NPTkZJ
R1VSRV9MREZMQUdTX05PRElTVCc6ICcnLAorICdDT05GSUdfQVJHUyc6ICcnLAorICdDT05GSU5D
TFVERURJUic6ICcvdXNyL2xvY2FsL2luY2x1ZGUnLAorICdDT05GSU5DTFVERVBZJzogJy91c3Iv
bG9jYWwvaW5jbHVkZS9weXRob24zLjdtJywKKyAnQ09SRVBZVEhPTlBBVEgnOiAnJywKKyAnQ09W
RVJBR0VfSU5GTyc6ICcnLAorICdDT1ZFUkFHRV9SRVBPUlQnOiAnJywKKyAnQ09WRVJBR0VfUkVQ
T1JUX09QVElPTlMnOiAnLS1uby1icmFuY2gtY292ZXJhZ2UgLS10aXRsZSAiQ1B5dGhvbiBsY292
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwb3J0IicsCisgJ0NQUEZMQUdTJzog
Jy1JLiAtSS4vSW5jbHVkZScsCisgJ0NYWCc6ICdnKysgLXB0aHJlYWQnLAorICdERVNURElSUyc6
ICcvdXNyL2xvY2FsIC91c3IvbG9jYWwvbGliIC91c3IvbG9jYWwvbGliL3B5dGhvbjMuNyAnCisg
ICAgICAgICAgICAgJy91c3IvbG9jYWwvbGliL3B5dGhvbjMuNy9saWItZHlubG9hZCcsCisgJ0RF
U1RMSUInOiAnL3Vzci9sb2NhbC9saWIvcHl0aG9uMy43JywKKyAnREVTVFBBVEgnOiAnJywKKyAn
REVTVFNIQVJFRCc6ICcvdXNyL2xvY2FsL2xpYi9weXRob24zLjcvbGliLWR5bmxvYWQnLAorICdE
RkxBR1MnOiAnJywKKyAnRElSTU9ERSc6IDc1NSwKKyAnRElTVCc6ICdSRUFETUUucnN0IENoYW5n
ZUxvZyBjb25maWd1cmUgY29uZmlndXJlLmFjIGFjY29uZmlnLmggcHljb25maWcuaC5pbiAnCisg
ICAgICAgICAnTWFrZWZpbGUucHJlLmluIEluY2x1ZGUgTGliIE1pc2MgRXh0LWR1bW15JywKKyAn
RElTVERJUlMnOiAnSW5jbHVkZSBMaWIgTWlzYyBFeHQtZHVtbXknLAorICdESVNURklMRVMnOiAn
UkVBRE1FLnJzdCBDaGFuZ2VMb2cgY29uZmlndXJlIGNvbmZpZ3VyZS5hYyBhY2NvbmZpZy5oICcK
KyAgICAgICAgICAgICAgJ3B5Y29uZmlnLmguaW4gTWFrZWZpbGUucHJlLmluJywKKyAnRExJTkNM
RElSJzogJy4nLAorICdETExMSUJSQVJZJzogJycsCisgJ0RPVUJMRV9JU19BUk1fTUlYRURfRU5E
SUFOX0lFRUU3NTQnOiAwLAorICdET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0JzogMCwKKyAn
RE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NCc6IDEsCisgJ0RUUkFDRSc6ICcnLAorICdE
VFJBQ0VfREVQUyc6ICdcXCcsCisgJ0RUUkFDRV9IRUFERVJTJzogJycsCisgJ0RUUkFDRV9PQkpT
JzogJycsCisgJ0RZTkxPQURGSUxFJzogJ2R5bmxvYWRfc2hsaWIubycsCisgJ0VOQUJMRV9JUFY2
JzogMSwKKyAnRU5TVVJFUElQJzogJ3VwZ3JhZGUnLAorICdFWEUnOiAnJywKKyAnRVhFTU9ERSc6
IDc1NSwKKyAnRVhUUkFURVNUT1BUUyc6ICcnLAorICdFWFRSQV9DRkxBR1MnOiAnJywKKyAnRVhU
X1NVRkZJWCc6ICcuY3B5dGhvbi0zN20teDg2XzY0LWxpbnV4LWdudS5zbycsCisgJ0ZJTEVNT0RF
JzogNjQ0LAorICdGTE9DS19ORUVEU19MSUJCU0QnOiAwLAorICdHRVRQR1JQX0hBVkVfQVJHJzog
MCwKKyAnR0VUVElNRU9GREFZX05PX1RaJzogMCwKKyAnR0lUQlJBTkNIJzogJycsCisgJ0dJVFRB
Ryc6ICcnLAorICdHSVRWRVJTSU9OJzogJycsCisgJ0dOVUxEJzogJ3llcycsCisgJ0hBVkVfQUND
RVBUNCc6IDEsCisgJ0hBVkVfQUNPU0gnOiAxLAorICdIQVZFX0FERFJJTkZPJzogMSwKKyAnSEFW
RV9BTEFSTSc6IDEsCisgJ0hBVkVfQUxJR05FRF9SRVFVSVJFRCc6IDAsCisgJ0hBVkVfQUxMT0NB
X0gnOiAxLAorICdIQVZFX0FMVFpPTkUnOiAwLAorICdIQVZFX0FTSU5IJzogMSwKKyAnSEFWRV9B
U01fVFlQRVNfSCc6IDEsCisgJ0hBVkVfQVRBTkgnOiAxLAorICdIQVZFX0JJTkRfVEVYVERPTUFJ
Tl9DT0RFU0VUJzogMSwKKyAnSEFWRV9CTFVFVE9PVEhfQkxVRVRPT1RIX0gnOiAwLAorICdIQVZF
X0JMVUVUT09USF9IJzogMCwKKyAnSEFWRV9CUk9LRU5fTUJTVE9XQ1MnOiAwLAorICdIQVZFX0JS
T0tFTl9OSUNFJzogMCwKKyAnSEFWRV9CUk9LRU5fUElQRV9CVUYnOiAwLAorICdIQVZFX0JST0tF
Tl9QT0xMJzogMCwKKyAnSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUyc6IDAsCisgJ0hBVkVf
QlJPS0VOX1BUSFJFQURfU0lHTUFTSyc6IDAsCisgJ0hBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRSc6
IDAsCisgJ0hBVkVfQlJPS0VOX1VOU0VURU5WJzogMCwKKyAnSEFWRV9CVUlMVElOX0FUT01JQyc6
IDEsCisgJ0hBVkVfQ0hGTEFHUyc6IDAsCisgJ0hBVkVfQ0hPV04nOiAxLAorICdIQVZFX0NIUk9P
VCc6IDEsCisgJ0hBVkVfQ0xPQ0snOiAxLAorICdIQVZFX0NMT0NLX0dFVFJFUyc6IDEsCisgJ0hB
VkVfQ0xPQ0tfR0VUVElNRSc6IDEsCisgJ0hBVkVfQ0xPQ0tfU0VUVElNRSc6IDEsCisgJ0hBVkVf
Q09NUFVURURfR09UT1MnOiAxLAorICdIQVZFX0NPTkZTVFInOiAxLAorICdIQVZFX0NPTklPX0gn
OiAwLAorICdIQVZFX0NPUFlTSUdOJzogMSwKKyAnSEFWRV9DUllQVF9IJzogMSwKKyAnSEFWRV9D
UllQVF9SJzogMSwKKyAnSEFWRV9DVEVSTUlEJzogMSwKKyAnSEFWRV9DVEVSTUlEX1InOiAwLAor
ICdIQVZFX0NVUlNFU19GSUxURVInOiAxLAorICdIQVZFX0NVUlNFU19IJzogMSwKKyAnSEFWRV9D
VVJTRVNfSEFTX0tFWSc6IDEsCisgJ0hBVkVfQ1VSU0VTX0lNTUVET0snOiAxLAorICdIQVZFX0NV
UlNFU19JU19QQUQnOiAxLAorICdIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQnOiAxLAorICdI
QVZFX0NVUlNFU19SRVNJWkVURVJNJzogMSwKKyAnSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0nOiAx
LAorICdIQVZFX0NVUlNFU19TWU5DT0snOiAxLAorICdIQVZFX0NVUlNFU19UWVBFQUhFQUQnOiAx
LAorICdIQVZFX0NVUlNFU19VU0VfRU5WJzogMSwKKyAnSEFWRV9DVVJTRVNfV0NIR0FUJzogMSwK
KyAnSEFWRV9ERUNMX0lTRklOSVRFJzogMSwKKyAnSEFWRV9ERUNMX0lTSU5GJzogMSwKKyAnSEFW
RV9ERUNMX0lTTkFOJzogMSwKKyAnSEFWRV9ERUNMX1JUTERfREVFUEJJTkQnOiAxLAorICdIQVZF
X0RFQ0xfUlRMRF9HTE9CQUwnOiAxLAorICdIQVZFX0RFQ0xfUlRMRF9MQVpZJzogMSwKKyAnSEFW
RV9ERUNMX1JUTERfTE9DQUwnOiAxLAorICdIQVZFX0RFQ0xfUlRMRF9NRU1CRVInOiAwLAorICdI
QVZFX0RFQ0xfUlRMRF9OT0RFTEVURSc6IDEsCisgJ0hBVkVfREVDTF9SVExEX05PTE9BRCc6IDEs
CisgJ0hBVkVfREVDTF9SVExEX05PVyc6IDEsCisgJ0hBVkVfREVDTF9UWk5BTUUnOiAwLAorICdI
QVZFX0RFVklDRV9NQUNST1MnOiAxLAorICdIQVZFX0RFVl9QVEMnOiAwLAorICdIQVZFX0RFVl9Q
VE1YJzogMSwKKyAnSEFWRV9ESVJFQ1RfSCc6IDAsCisgJ0hBVkVfRElSRU5UX0RfVFlQRSc6IDEs
CisgJ0hBVkVfRElSRU5UX0gnOiAxLAorICdIQVZFX0RJUkZEJzogMSwKKyAnSEFWRV9ETEZDTl9I
JzogMSwKKyAnSEFWRV9ETE9QRU4nOiAxLAorICdIQVZFX0RVUDInOiAxLAorICdIQVZFX0RVUDMn
OiAxLAorICdIQVZFX0RZTkFNSUNfTE9BRElORyc6IDEsCisgJ0hBVkVfRU5ESUFOX0gnOiAxLAor
ICdIQVZFX0VQT0xMJzogMSwKKyAnSEFWRV9FUE9MTF9DUkVBVEUxJzogMSwKKyAnSEFWRV9FUkYn
OiAxLAorICdIQVZFX0VSRkMnOiAxLAorICdIQVZFX0VSUk5PX0gnOiAxLAorICdIQVZFX0VYRUNW
JzogMSwKKyAnSEFWRV9FWFBNMSc6IDEsCisgJ0hBVkVfRkFDQ0VTU0FUJzogMSwKKyAnSEFWRV9G
Q0hESVInOiAxLAorICdIQVZFX0ZDSE1PRCc6IDEsCisgJ0hBVkVfRkNITU9EQVQnOiAxLAorICdI
QVZFX0ZDSE9XTic6IDEsCisgJ0hBVkVfRkNIT1dOQVQnOiAxLAorICdIQVZFX0ZDTlRMX0gnOiAx
LAorICdIQVZFX0ZEQVRBU1lOQyc6IDEsCisgJ0hBVkVfRkRPUEVORElSJzogMSwKKyAnSEFWRV9G
RVhFQ1ZFJzogMSwKKyAnSEFWRV9GSU5JVEUnOiAxLAorICdIQVZFX0ZMT0NLJzogMSwKKyAnSEFW
RV9GT1JLJzogMSwKKyAnSEFWRV9GT1JLUFRZJzogMSwKKyAnSEFWRV9GUEFUSENPTkYnOiAxLAor
ICdIQVZFX0ZTRUVLNjQnOiAwLAorICdIQVZFX0ZTRUVLTyc6IDEsCisgJ0hBVkVfRlNUQVRBVCc6
IDEsCisgJ0hBVkVfRlNUQVRWRlMnOiAxLAorICdIQVZFX0ZTWU5DJzogMSwKKyAnSEFWRV9GVEVM
TDY0JzogMCwKKyAnSEFWRV9GVEVMTE8nOiAxLAorICdIQVZFX0ZUSU1FJzogMSwKKyAnSEFWRV9G
VFJVTkNBVEUnOiAxLAorICdIQVZFX0ZVVElNRU5TJzogMSwKKyAnSEFWRV9GVVRJTUVTJzogMSwK
KyAnSEFWRV9GVVRJTUVTQVQnOiAxLAorICdIQVZFX0dBSV9TVFJFUlJPUic6IDEsCisgJ0hBVkVf
R0FNTUEnOiAxLAorICdIQVZFX0dDQ19BU01fRk9SX01DNjg4ODEnOiAwLAorICdIQVZFX0dDQ19B
U01fRk9SX1g2NCc6IDEsCisgJ0hBVkVfR0NDX0FTTV9GT1JfWDg3JzogMSwKKyAnSEFWRV9HQ0Nf
VUlOVDEyOF9UJzogMSwKKyAnSEFWRV9HRVRBRERSSU5GTyc6IDEsCisgJ0hBVkVfR0VUQ19VTkxP
Q0tFRCc6IDEsCisgJ0hBVkVfR0VURU5UUk9QWSc6IDEsCisgJ0hBVkVfR0VUR1JPVVBMSVNUJzog
MSwKKyAnSEFWRV9HRVRHUk9VUFMnOiAxLAorICdIQVZFX0dFVEhPU1RCWU5BTUUnOiAwLAorICdI
QVZFX0dFVEhPU1RCWU5BTUVfUic6IDEsCisgJ0hBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHJzog
MCwKKyAnSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9BUkcnOiAwLAorICdIQVZFX0dFVEhPU1RCWU5B
TUVfUl82X0FSRyc6IDEsCisgJ0hBVkVfR0VUSVRJTUVSJzogMSwKKyAnSEFWRV9HRVRMT0FEQVZH
JzogMSwKKyAnSEFWRV9HRVRMT0dJTic6IDEsCisgJ0hBVkVfR0VUTkFNRUlORk8nOiAxLAorICdI
QVZFX0dFVFBBR0VTSVpFJzogMSwKKyAnSEFWRV9HRVRQRUVSTkFNRSc6IDEsCisgJ0hBVkVfR0VU
UEdJRCc6IDEsCisgJ0hBVkVfR0VUUEdSUCc6IDEsCisgJ0hBVkVfR0VUUElEJzogMSwKKyAnSEFW
RV9HRVRQUklPUklUWSc6IDEsCisgJ0hBVkVfR0VUUFdFTlQnOiAxLAorICdIQVZFX0dFVFJBTkRP
TSc6IDEsCisgJ0hBVkVfR0VUUkFORE9NX1NZU0NBTEwnOiAxLAorICdIQVZFX0dFVFJFU0dJRCc6
IDEsCisgJ0hBVkVfR0VUUkVTVUlEJzogMSwKKyAnSEFWRV9HRVRTSUQnOiAxLAorICdIQVZFX0dF
VFNQRU5UJzogMSwKKyAnSEFWRV9HRVRTUE5BTSc6IDEsCisgJ0hBVkVfR0VUVElNRU9GREFZJzog
MSwKKyAnSEFWRV9HRVRXRCc6IDEsCisgJ0hBVkVfR0xJQkNfTUVNTU9WRV9CVUcnOiAwLAorICdI
QVZFX0dSUF9IJzogMSwKKyAnSEFWRV9IU1RSRVJST1InOiAxLAorICdIQVZFX0hUT0xFNjQnOiAx
LAorICdIQVZFX0hZUE9UJzogMSwKKyAnSEFWRV9JRUVFRlBfSCc6IDAsCisgJ0hBVkVfSUZfTkFN
RUlOREVYJzogMSwKKyAnSEFWRV9JTkVUX0FUT04nOiAxLAorICdIQVZFX0lORVRfUFRPTic6IDEs
CisgJ0hBVkVfSU5JVEdST1VQUyc6IDEsCisgJ0hBVkVfSU5UVFlQRVNfSCc6IDEsCisgJ0hBVkVf
SU9fSCc6IDAsCisgJ0hBVkVfSVBBX1BVUkVfQ09OU1RfQlVHJzogMCwKKyAnSEFWRV9LSUxMJzog
MSwKKyAnSEFWRV9LSUxMUEcnOiAxLAorICdIQVZFX0tRVUVVRSc6IDAsCisgJ0hBVkVfTEFOR0lO
Rk9fSCc6IDEsCisgJ0hBVkVfTEFSR0VGSUxFX1NVUFBPUlQnOiAwLAorICdIQVZFX0xDSEZMQUdT
JzogMCwKKyAnSEFWRV9MQ0hNT0QnOiAwLAorICdIQVZFX0xDSE9XTic6IDEsCisgJ0hBVkVfTEdB
TU1BJzogMSwKKyAnSEFWRV9MSUJETCc6IDEsCisgJ0hBVkVfTElCRExEJzogMCwKKyAnSEFWRV9M
SUJJRUVFJzogMCwKKyAnSEFWRV9MSUJJTlRMX0gnOiAxLAorICdIQVZFX0xJQlJFQURMSU5FJzog
MCwKKyAnSEFWRV9MSUJSRVNPTFYnOiAwLAorICdIQVZFX0xJQlNFTkRGSUxFJzogMCwKKyAnSEFW
RV9MSUJVVElMX0gnOiAwLAorICdIQVZFX0xJTksnOiAxLAorICdIQVZFX0xJTktBVCc6IDEsCisg
J0hBVkVfTElOVVhfQ0FOX0JDTV9IJzogMSwKKyAnSEFWRV9MSU5VWF9DQU5fSCc6IDEsCisgJ0hB
VkVfTElOVVhfQ0FOX1JBV19GRF9GUkFNRVMnOiAxLAorICdIQVZFX0xJTlVYX0NBTl9SQVdfSCc6
IDEsCisgJ0hBVkVfTElOVVhfTkVUTElOS19IJzogMSwKKyAnSEFWRV9MSU5VWF9SQU5ET01fSCc6
IDEsCisgJ0hBVkVfTElOVVhfVElQQ19IJzogMSwKKyAnSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0gn
OiAxLAorICdIQVZFX0xPQ0tGJzogMSwKKyAnSEFWRV9MT0cxUCc6IDEsCisgJ0hBVkVfTE9HMic6
IDEsCisgJ0hBVkVfTE9OR19ET1VCTEUnOiAxLAorICdIQVZFX0xTVEFUJzogMSwKKyAnSEFWRV9M
VVRJTUVTJzogMSwKKyAnSEFWRV9NQUtFREVWJzogMSwKKyAnSEFWRV9NQlJUT1dDJzogMSwKKyAn
SEFWRV9NRU1PUllfSCc6IDEsCisgJ0hBVkVfTUVNUkNIUic6IDEsCisgJ0hBVkVfTUtESVJBVCc6
IDEsCisgJ0hBVkVfTUtGSUZPJzogMSwKKyAnSEFWRV9NS0ZJRk9BVCc6IDEsCisgJ0hBVkVfTUtO
T0QnOiAxLAorICdIQVZFX01LTk9EQVQnOiAxLAorICdIQVZFX01LVElNRSc6IDEsCisgJ0hBVkVf
TU1BUCc6IDEsCisgJ0hBVkVfTVJFTUFQJzogMSwKKyAnSEFWRV9OQ1VSU0VTX0gnOiAxLAorICdI
QVZFX05ESVJfSCc6IDAsCisgJ0hBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IJzogMSwKKyAnSEFWRV9O
RVRfSUZfSCc6IDEsCisgJ0hBVkVfTklDRSc6IDEsCisgJ0hBVkVfT1BFTkFUJzogMSwKKyAnSEFW
RV9PUEVOUFRZJzogMSwKKyAnSEFWRV9QQVRIQ09ORic6IDEsCisgJ0hBVkVfUEFVU0UnOiAxLAor
ICdIQVZFX1BJUEUyJzogMSwKKyAnSEFWRV9QTE9DSyc6IDAsCisgJ0hBVkVfUE9MTCc6IDEsCisg
J0hBVkVfUE9MTF9IJzogMSwKKyAnSEFWRV9QT1NJWF9GQURWSVNFJzogMSwKKyAnSEFWRV9QT1NJ
WF9GQUxMT0NBVEUnOiAxLAorICdIQVZFX1BPU0lYX1NQQVdOJzogMSwKKyAnSEFWRV9QUkVBRCc6
IDEsCisgJ0hBVkVfUFJFQURWJzogMSwKKyAnSEFWRV9QUkVBRFYyJzogMSwKKyAnSEFWRV9QUkxJ
TUlUJzogMSwKKyAnSEFWRV9QUk9DRVNTX0gnOiAwLAorICdIQVZFX1BST1RPVFlQRVMnOiAxLAor
ICdIQVZFX1BUSFJFQURfREVTVFJVQ1RPUic6IDAsCisgJ0hBVkVfUFRIUkVBRF9HRVRDUFVDTE9D
S0lEJzogMSwKKyAnSEFWRV9QVEhSRUFEX0gnOiAxLAorICdIQVZFX1BUSFJFQURfSU5JVCc6IDAs
CisgJ0hBVkVfUFRIUkVBRF9LSUxMJzogMSwKKyAnSEFWRV9QVEhSRUFEX1NJR01BU0snOiAxLAor
ICdIQVZFX1BUWV9IJzogMSwKKyAnSEFWRV9QVVRFTlYnOiAxLAorICdIQVZFX1BXUklURSc6IDEs
CisgJ0hBVkVfUFdSSVRFVic6IDEsCisgJ0hBVkVfUFdSSVRFVjInOiAxLAorICdIQVZFX1JFQURM
SU5LJzogMSwKKyAnSEFWRV9SRUFETElOS0FUJzogMSwKKyAnSEFWRV9SRUFEVic6IDEsCisgJ0hB
VkVfUkVBTFBBVEgnOiAxLAorICdIQVZFX1JFTkFNRUFUJzogMSwKKyAnSEFWRV9STF9BUFBFTkRf
SElTVE9SWSc6IDAsCisgJ0hBVkVfUkxfQ0FUQ0hfU0lHTkFMJzogMCwKKyAnSEFWRV9STF9DT01Q
TEVUSU9OX0FQUEVORF9DSEFSQUNURVInOiAwLAorICdIQVZFX1JMX0NPTVBMRVRJT05fRElTUExB
WV9NQVRDSEVTX0hPT0snOiAwLAorICdIQVZFX1JMX0NPTVBMRVRJT05fTUFUQ0hFUyc6IDAsCisg
J0hBVkVfUkxfQ09NUExFVElPTl9TVVBQUkVTU19BUFBFTkQnOiAwLAorICdIQVZFX1JMX1BSRV9J
TlBVVF9IT09LJzogMCwKKyAnSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwnOiAwLAorICdIQVZFX1JP
VU5EJzogMSwKKyAnSEFWRV9TQ0hFRF9HRVRfUFJJT1JJVFlfTUFYJzogMSwKKyAnSEFWRV9TQ0hF
RF9IJzogMSwKKyAnSEFWRV9TQ0hFRF9SUl9HRVRfSU5URVJWQUwnOiAxLAorICdIQVZFX1NDSEVE
X1NFVEFGRklOSVRZJzogMSwKKyAnSEFWRV9TQ0hFRF9TRVRQQVJBTSc6IDEsCisgJ0hBVkVfU0NI
RURfU0VUU0NIRURVTEVSJzogMSwKKyAnSEFWRV9TRU1fR0VUVkFMVUUnOiAxLAorICdIQVZFX1NF
TV9PUEVOJzogMSwKKyAnSEFWRV9TRU1fVElNRURXQUlUJzogMSwKKyAnSEFWRV9TRU1fVU5MSU5L
JzogMSwKKyAnSEFWRV9TRU5ERklMRSc6IDEsCisgJ0hBVkVfU0VURUdJRCc6IDEsCisgJ0hBVkVf
U0VURVVJRCc6IDEsCisgJ0hBVkVfU0VUR0lEJzogMSwKKyAnSEFWRV9TRVRHUk9VUFMnOiAxLAor
ICdIQVZFX1NFVEhPU1ROQU1FJzogMSwKKyAnSEFWRV9TRVRJVElNRVInOiAxLAorICdIQVZFX1NF
VExPQ0FMRSc6IDEsCisgJ0hBVkVfU0VUUEdJRCc6IDEsCisgJ0hBVkVfU0VUUEdSUCc6IDEsCisg
J0hBVkVfU0VUUFJJT1JJVFknOiAxLAorICdIQVZFX1NFVFJFR0lEJzogMSwKKyAnSEFWRV9TRVRS
RVNHSUQnOiAxLAorICdIQVZFX1NFVFJFU1VJRCc6IDEsCisgJ0hBVkVfU0VUUkVVSUQnOiAxLAor
ICdIQVZFX1NFVFNJRCc6IDEsCisgJ0hBVkVfU0VUVUlEJzogMSwKKyAnSEFWRV9TRVRWQlVGJzog
MSwKKyAnSEFWRV9TSEFET1dfSCc6IDEsCisgJ0hBVkVfU0lHQUNUSU9OJzogMSwKKyAnSEFWRV9T
SUdBTFRTVEFDSyc6IDEsCisgJ0hBVkVfU0lHSU5GT19UX1NJX0JBTkQnOiAxLAorICdIQVZFX1NJ
R0lOVEVSUlVQVCc6IDEsCisgJ0hBVkVfU0lHTkFMX0gnOiAxLAorICdIQVZFX1NJR1BFTkRJTkcn
OiAxLAorICdIQVZFX1NJR1JFTFNFJzogMSwKKyAnSEFWRV9TSUdUSU1FRFdBSVQnOiAxLAorICdI
QVZFX1NJR1dBSVQnOiAxLAorICdIQVZFX1NJR1dBSVRJTkZPJzogMSwKKyAnSEFWRV9TTlBSSU5U
Ric6IDEsCisgJ0hBVkVfU09DS0FERFJfQUxHJzogMSwKKyAnSEFWRV9TT0NLQUREUl9TQV9MRU4n
OiAwLAorICdIQVZFX1NPQ0tBRERSX1NUT1JBR0UnOiAxLAorICdIQVZFX1NPQ0tFVFBBSVInOiAx
LAorICdIQVZFX1NQQVdOX0gnOiAxLAorICdIQVZFX1NTSVpFX1QnOiAxLAorICdIQVZFX1NUQVRW
RlMnOiAxLAorICdIQVZFX1NUQVRfVFZfTlNFQyc6IDEsCisgJ0hBVkVfU1RBVF9UVl9OU0VDMic6
IDAsCisgJ0hBVkVfU1REQVJHX1BST1RPVFlQRVMnOiAxLAorICdIQVZFX1NURElOVF9IJzogMSwK
KyAnSEFWRV9TVERMSUJfSCc6IDEsCisgJ0hBVkVfU1REX0FUT01JQyc6IDEsCisgJ0hBVkVfU1RS
RFVQJzogMSwKKyAnSEFWRV9TVFJGVElNRSc6IDEsCisgJ0hBVkVfU1RSSU5HU19IJzogMSwKKyAn
SEFWRV9TVFJJTkdfSCc6IDEsCisgJ0hBVkVfU1RSTENQWSc6IDAsCisgJ0hBVkVfU1RST1BUU19I
JzogMSwKKyAnSEFWRV9TVFJVQ1RfUEFTU1dEX1BXX0dFQ09TJzogMSwKKyAnSEFWRV9TVFJVQ1Rf
UEFTU1dEX1BXX1BBU1NXRCc6IDEsCisgJ0hBVkVfU1RSVUNUX1NUQVRfU1RfQklSVEhUSU1FJzog
MCwKKyAnSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFJzogMSwKKyAnSEFWRV9TVFJVQ1RfU1RB
VF9TVF9CTE9DS1MnOiAxLAorICdIQVZFX1NUUlVDVF9TVEFUX1NUX0ZMQUdTJzogMCwKKyAnSEFW
RV9TVFJVQ1RfU1RBVF9TVF9HRU4nOiAwLAorICdIQVZFX1NUUlVDVF9TVEFUX1NUX1JERVYnOiAx
LAorICdIQVZFX1NUUlVDVF9UTV9UTV9aT05FJzogMSwKKyAnSEFWRV9TWU1MSU5LJzogMSwKKyAn
SEFWRV9TWU1MSU5LQVQnOiAxLAorICdIQVZFX1NZTkMnOiAxLAorICdIQVZFX1NZU0NPTkYnOiAx
LAorICdIQVZFX1NZU0VYSVRTX0gnOiAxLAorICdIQVZFX1NZU19BVURJT0lPX0gnOiAwLAorICdI
QVZFX1NZU19CU0RUVFlfSCc6IDAsCisgJ0hBVkVfU1lTX0RFVlBPTExfSCc6IDAsCisgJ0hBVkVf
U1lTX0RJUl9IJzogMCwKKyAnSEFWRV9TWVNfRU5ESUFOX0gnOiAwLAorICdIQVZFX1NZU19FUE9M
TF9IJzogMSwKKyAnSEFWRV9TWVNfRVZFTlRfSCc6IDAsCisgJ0hBVkVfU1lTX0ZJTEVfSCc6IDEs
CisgJ0hBVkVfU1lTX0lPQ1RMX0gnOiAxLAorICdIQVZFX1NZU19LRVJOX0NPTlRST0xfSCc6IDAs
CisgJ0hBVkVfU1lTX0xPQURBVkdfSCc6IDAsCisgJ0hBVkVfU1lTX0xPQ0tfSCc6IDAsCisgJ0hB
VkVfU1lTX01LREVWX0gnOiAwLAorICdIQVZFX1NZU19NT0RFTV9IJzogMCwKKyAnSEFWRV9TWVNf
TkRJUl9IJzogMCwKKyAnSEFWRV9TWVNfUEFSQU1fSCc6IDEsCisgJ0hBVkVfU1lTX1BPTExfSCc6
IDEsCisgJ0hBVkVfU1lTX1JBTkRPTV9IJzogMSwKKyAnSEFWRV9TWVNfUkVTT1VSQ0VfSCc6IDEs
CisgJ0hBVkVfU1lTX1NFTEVDVF9IJzogMSwKKyAnSEFWRV9TWVNfU0VOREZJTEVfSCc6IDEsCisg
J0hBVkVfU1lTX1NPQ0tFVF9IJzogMSwKKyAnSEFWRV9TWVNfU1RBVFZGU19IJzogMSwKKyAnSEFW
RV9TWVNfU1RBVF9IJzogMSwKKyAnSEFWRV9TWVNfU1lTQ0FMTF9IJzogMSwKKyAnSEFWRV9TWVNf
U1lTTUFDUk9TX0gnOiAxLAorICdIQVZFX1NZU19TWVNfRE9NQUlOX0gnOiAwLAorICdIQVZFX1NZ
U19URVJNSU9fSCc6IDAsCisgJ0hBVkVfU1lTX1RJTUVTX0gnOiAxLAorICdIQVZFX1NZU19USU1F
X0gnOiAxLAorICdIQVZFX1NZU19UWVBFU19IJzogMSwKKyAnSEFWRV9TWVNfVUlPX0gnOiAxLAor
ICdIQVZFX1NZU19VTl9IJzogMSwKKyAnSEFWRV9TWVNfVVRTTkFNRV9IJzogMSwKKyAnSEFWRV9T
WVNfV0FJVF9IJzogMSwKKyAnSEFWRV9TWVNfWEFUVFJfSCc6IDEsCisgJ0hBVkVfVENHRVRQR1JQ
JzogMSwKKyAnSEFWRV9UQ1NFVFBHUlAnOiAxLAorICdIQVZFX1RFTVBOQU0nOiAxLAorICdIQVZF
X1RFUk1JT1NfSCc6IDEsCisgJ0hBVkVfVEVSTV9IJzogMSwKKyAnSEFWRV9UR0FNTUEnOiAxLAor
ICdIQVZFX1RJTUVHTSc6IDEsCisgJ0hBVkVfVElNRVMnOiAxLAorICdIQVZFX1RNUEZJTEUnOiAx
LAorICdIQVZFX1RNUE5BTSc6IDEsCisgJ0hBVkVfVE1QTkFNX1InOiAxLAorICdIQVZFX1RNX1pP
TkUnOiAxLAorICdIQVZFX1RSVU5DQVRFJzogMSwKKyAnSEFWRV9UWk5BTUUnOiAwLAorICdIQVZF
X1VDUzRfVENMJzogMCwKKyAnSEFWRV9VTkFNRSc6IDEsCisgJ0hBVkVfVU5JU1REX0gnOiAxLAor
ICdIQVZFX1VOTElOS0FUJzogMSwKKyAnSEFWRV9VTlNFVEVOVic6IDEsCisgJ0hBVkVfVVNBQkxF
X1dDSEFSX1QnOiAwLAorICdIQVZFX1VUSUxfSCc6IDAsCisgJ0hBVkVfVVRJTUVOU0FUJzogMSwK
KyAnSEFWRV9VVElNRVMnOiAxLAorICdIQVZFX1VUSU1FX0gnOiAxLAorICdIQVZFX1VVSURfQ1JF
QVRFJzogMCwKKyAnSEFWRV9VVUlEX0VOQ19CRSc6IDAsCisgJ0hBVkVfVVVJRF9HRU5FUkFURV9U
SU1FX1NBRkUnOiAxLAorICdIQVZFX1VVSURfSCc6IDAsCisgJ0hBVkVfVVVJRF9VVUlEX0gnOiAx
LAorICdIQVZFX1dBSVQzJzogMSwKKyAnSEFWRV9XQUlUNCc6IDEsCisgJ0hBVkVfV0FJVElEJzog
MSwKKyAnSEFWRV9XQUlUUElEJzogMSwKKyAnSEFWRV9XQ0hBUl9IJzogMSwKKyAnSEFWRV9XQ1ND
T0xMJzogMSwKKyAnSEFWRV9XQ1NGVElNRSc6IDEsCisgJ0hBVkVfV0NTWEZSTSc6IDEsCisgJ0hB
VkVfV01FTUNNUCc6IDEsCisgJ0hBVkVfV09SS0lOR19UWlNFVCc6IDEsCisgJ0hBVkVfV1JJVEVW
JzogMSwKKyAnSEFWRV9YNTA5X1ZFUklGWV9QQVJBTV9TRVQxX0hPU1QnOiAxLAorICdIQVZFX1pM
SUJfQ09QWSc6IDEsCisgJ0hBVkVfX0dFVFBUWSc6IDAsCisgJ0hPU1RfR05VX1RZUEUnOiAneDg2
XzY0LXBjLWxpbnV4LWdudScsCisgJ0lOQ0xESVJTVE9NQUtFJzogJy91c3IvbG9jYWwvaW5jbHVk
ZSAvdXNyL2xvY2FsL2luY2x1ZGUgJworICAgICAgICAgICAgICAgICAgICcvdXNyL2xvY2FsL2lu
Y2x1ZGUvcHl0aG9uMy43bSAnCisgICAgICAgICAgICAgICAgICAgJy91c3IvbG9jYWwvaW5jbHVk
ZS9weXRob24zLjdtJywKKyAnSU5DTFVERURJUic6ICcvdXNyL2xvY2FsL2luY2x1ZGUnLAorICdJ
TkNMVURFUFknOiAnL3Vzci9sb2NhbC9pbmNsdWRlL3B5dGhvbjMuN20nLAorICdJTlNUQUxMJzog
Jy91c3IvYmluL2luc3RhbGwgLWMnLAorICdJTlNUQUxMX0RBVEEnOiAnL3Vzci9iaW4vaW5zdGFs
bCAtYyAtbSA2NDQnLAorICdJTlNUQUxMX1BST0dSQU0nOiAnL3Vzci9iaW4vaW5zdGFsbCAtYycs
CisgJ0lOU1RBTExfU0NSSVBUJzogJy91c3IvYmluL2luc3RhbGwgLWMnLAorICdJTlNUQUxMX1NI
QVJFRCc6ICcvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDU1NScsCisgJ0lOU1RTT05BTUUnOiAnbGli
cHl0aG9uMy43bS5hJywKKyAnSU9fSCc6ICdNb2R1bGVzL19pby9faW9tb2R1bGUuaCcsCisgJ0lP
X09CSlMnOiAnXFwnLAorICdMRENYWFNIQVJFRCc6ICdnKysgLXB0aHJlYWQgLXNoYXJlZCcsCisg
J0xERkxBR1MnOiAnJywKKyAnTERGTEFHU19OT0RJU1QnOiAnJywKKyAnTERMQVNUJzogJycsCisg
J0xETElCUkFSWSc6ICdsaWJweXRob24zLjdtLmEnLAorICdMRExJQlJBUllESVInOiAnJywKKyAn
TERTSEFSRUQnOiAnZ2NjIC1wdGhyZWFkIC1zaGFyZWQnLAorICdMRFZFUlNJT04nOiAnMy43bScs
CisgJ0xJQkMnOiAnJywKKyAnTElCREVTVCc6ICcvdXNyL2xvY2FsL2xpYi9weXRob24zLjcnLAor
ICdMSUJESVInOiAnL3Vzci9sb2NhbC9saWInLAorICdMSUJGRklfSU5DTFVERURJUic6ICcnLAor
ICdMSUJNJzogJy1sbScsCisgJ0xJQk9CSkRJUic6ICdQeXRob24vJywKKyAnTElCT0JKUyc6ICcn
LAorICdMSUJQQyc6ICcvdXNyL2xvY2FsL2xpYi9wa2djb25maWcnLAorICdMSUJQTCc6ICcvdXNy
L2xvY2FsL2xpYi9weXRob24zLjcvY29uZmlnLTMuN20teDg2XzY0LWxpbnV4LWdudScsCisgJ0xJ
QlJBUlknOiAnbGlicHl0aG9uMy43bS5hJywKKyAnTElCUkFSWV9PQkpTJzogJ1xcJywKKyAnTElC
UkFSWV9PQkpTX09NSVRfRlJPWkVOJzogJ1xcJywKKyAnTElCUyc6ICctbGNyeXB0IC1scHRocmVh
ZCAtbGRsICAtbHV0aWwnLAorICdMSUJTVUJESVJTJzogJ3RraW50ZXIgdGtpbnRlci90ZXN0IHRr
aW50ZXIvdGVzdC90ZXN0X3RraW50ZXIgXFwnLAorICdMSU5LQ0MnOiAnZ2NjIC1wdGhyZWFkJywK
KyAnTElOS0ZPUlNIQVJFRCc6ICctWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMnLAorICdMSVBPXzMy
QklUX0ZMQUdTJzogJycsCisgJ0xMVk1fUFJPRl9FUlInOiAnbm8nLAorICdMTFZNX1BST0ZfRklM
RSc6ICcnLAorICdMTFZNX1BST0ZfTUVSR0VSJzogJ3RydWUnLAorICdMTic6ICdsbicsCisgJ0xP
Q0FMTU9ETElCUyc6ICcnLAorICdMT0cxUF9EUk9QU19aRVJPX1NJR04nOiAwLAorICdNQUNIREVQ
JzogJ2xpbnV4JywKKyAnTUFDSERFUF9PQkpTJzogJycsCisgJ01BQ0hERVNUTElCJzogJy91c3Iv
bG9jYWwvbGliL3B5dGhvbjMuNycsCisgJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCc6ICcnLAor
ICdNQUlOQ0MnOiAnZ2NjIC1wdGhyZWFkJywKKyAnTUFKT1JfSU5fTUtERVYnOiAwLAorICdNQUpP
Ul9JTl9TWVNNQUNST1MnOiAxLAorICdNQUtFU0VUVVAnOiAnLi9Nb2R1bGVzL21ha2VzZXR1cCcs
CisgJ01BTkRJUic6ICcvdXNyL2xvY2FsL3NoYXJlL21hbicsCisgJ01LRElSX1AnOiAnL2Jpbi9t
a2RpciAtcCcsCisgJ01PREJVSUxUX05BTUVTJzogJ3Bvc2l4ICBlcnJubyAgcHdkICBfc3JlICBf
Y29kZWNzICBfd2Vha3JlZiAgX2Z1bmN0b29scyAgJworICAgICAgICAgICAgICAgICAgICdfb3Bl
cmF0b3IgIF9jb2xsZWN0aW9ucyAgX2FiYyAgaXRlcnRvb2xzICBhdGV4aXQgIF9zaWduYWwgICcK
KyAgICAgICAgICAgICAgICAgICAnX3N0YXQgIHRpbWUgIF90aHJlYWQgIF9sb2NhbGUgIF9pbyAg
emlwaW1wb3J0ICAnCisgICAgICAgICAgICAgICAgICAgJ2ZhdWx0aGFuZGxlciAgX3RyYWNlbWFs
bG9jICBfc3ltdGFibGUgIHh4c3VidHlwZScsCisgJ01PRERJU0FCTEVEX05BTUVTJzogJycsCisg
J01PRExJQlMnOiAnJywKKyAnTU9ET0JKUyc6ICdNb2R1bGVzL3Bvc2l4bW9kdWxlLm8gIE1vZHVs
ZXMvZXJybm9tb2R1bGUubyAgJworICAgICAgICAgICAgJ01vZHVsZXMvcHdkbW9kdWxlLm8gIE1v
ZHVsZXMvX3NyZS5vICBNb2R1bGVzL19jb2RlY3Ntb2R1bGUubyAgJworICAgICAgICAgICAgJ01v
ZHVsZXMvX3dlYWtyZWYubyAgTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLm8gICcKKyAgICAgICAg
ICAgICdNb2R1bGVzL19vcGVyYXRvci5vICBNb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5vICAn
CisgICAgICAgICAgICAnTW9kdWxlcy9fYWJjLm8gIE1vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLm8g
ICcKKyAgICAgICAgICAgICdNb2R1bGVzL2F0ZXhpdG1vZHVsZS5vICBNb2R1bGVzL3NpZ25hbG1v
ZHVsZS5vICBNb2R1bGVzL19zdGF0Lm8gICcKKyAgICAgICAgICAgICdNb2R1bGVzL3RpbWVtb2R1
bGUubyAgTW9kdWxlcy9fdGhyZWFkbW9kdWxlLm8gICcKKyAgICAgICAgICAgICdNb2R1bGVzL19s
b2NhbGVtb2R1bGUubyAgTW9kdWxlcy9faW9tb2R1bGUubyBNb2R1bGVzL2lvYmFzZS5vICcKKyAg
ICAgICAgICAgICdNb2R1bGVzL2ZpbGVpby5vIE1vZHVsZXMvYnl0ZXNpby5vIE1vZHVsZXMvYnVm
ZmVyZWRpby5vICcKKyAgICAgICAgICAgICdNb2R1bGVzL3RleHRpby5vIE1vZHVsZXMvc3RyaW5n
aW8ubyAgTW9kdWxlcy96aXBpbXBvcnQubyAgJworICAgICAgICAgICAgJ01vZHVsZXMvZmF1bHRo
YW5kbGVyLm8gIE1vZHVsZXMvX3RyYWNlbWFsbG9jLm8gJworICAgICAgICAgICAgJ01vZHVsZXMv
aGFzaHRhYmxlLm8gIE1vZHVsZXMvc3ltdGFibGVtb2R1bGUubyAgJworICAgICAgICAgICAgJ01v
ZHVsZXMveHhzdWJ0eXBlLm8nLAorICdNT0RVTEVfT0JKUyc6ICdcXCcsCisgJ01VTFRJQVJDSCc6
ICd4ODZfNjQtbGludXgtZ251JywKKyAnTVVMVElBUkNIX0NQUEZMQUdTJzogJy1ETVVMVElBUkNI
PVxcIng4Nl82NC1saW51eC1nbnVcXCInLAorICdNVldERUxDSF9JU19FWFBSRVNTSU9OJzogMSwK
KyAnTk9fQVNfTkVFREVEJzogJy1XbCwtLW5vLWFzLW5lZWRlZCcsCisgJ09CSkVDVF9PQkpTJzog
J1xcJywKKyAnT1BFTlNTTF9JTkNMVURFUyc6ICcnLAorICdPUEVOU1NMX0xERkxBR1MnOiAnJywK
KyAnT1BFTlNTTF9MSUJTJzogJy1sc3NsIC1sY3J5cHRvJywKKyAnT1BUJzogJy1ETkRFQlVHIC1n
IC1md3JhcHYgLU8zIC1XYWxsJywKKyAnT1RIRVJfTElCVE9PTF9PUFQnOiAnJywKKyAnUEFDS0FH
RV9CVUdSRVBPUlQnOiAwLAorICdQQUNLQUdFX05BTUUnOiAwLAorICdQQUNLQUdFX1NUUklORyc6
IDAsCisgJ1BBQ0tBR0VfVEFSTkFNRSc6IDAsCisgJ1BBQ0tBR0VfVVJMJzogMCwKKyAnUEFDS0FH
RV9WRVJTSU9OJzogMCwKKyAnUEFSU0VSX0hFQURFUlMnOiAnXFwnLAorICdQQVJTRVJfT0JKUyc6
ICdcXCBQYXJzZXIvbXlyZWFkbGluZS5vIFBhcnNlci9wYXJzZXRvay5vIFBhcnNlci90b2tlbml6
ZXIubycsCisgJ1BHRU4nOiAnUGFyc2VyL3BnZW4nLAorICdQR0VOT0JKUyc6ICdcXCBcXCcsCisg
J1BHT0JKUyc6ICdcXCcsCisgJ1BHT19QUk9GX0dFTl9GTEFHJzogJy1mcHJvZmlsZS1nZW5lcmF0
ZScsCisgJ1BHT19QUk9GX1VTRV9GTEFHJzogJy1mcHJvZmlsZS11c2UgLWZwcm9maWxlLWNvcnJl
Y3Rpb24nLAorICdQT0JKUyc6ICdcXCcsCisgJ1BPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQn
OiAwLAorICdQUk9GSUxFX1RBU0snOiAnLW0gdGVzdC5yZWdydGVzdCAtLXBnbycsCisgJ1BUSFJF
QURfS0VZX1RfSVNfQ09NUEFUSUJMRV9XSVRIX0lOVCc6IDEsCisgJ1BUSFJFQURfU1lTVEVNX1ND
SEVEX1NVUFBPUlRFRCc6IDEsCisgJ1BVUklGWSc6ICcnLAorICdQWTNMSUJSQVJZJzogJycsCisg
J1BZTE9OR19CSVRTX0lOX0RJR0lUJzogMCwKKyAnUFlUSE9OJzogJ3B5dGhvbicsCisgJ1BZVEhP
TkZSQU1FV09SSyc6ICcnLAorICdQWVRIT05GUkFNRVdPUktESVInOiAnbm8tZnJhbWV3b3JrJywK
KyAnUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUic6ICcnLAorICdQWVRIT05GUkFNRVdPUktQUkVG
SVgnOiAnJywKKyAnUFlUSE9OUEFUSCc6ICcnLAorICdQWVRIT05fRk9SX0JVSUxEJzogJy4vcHl0
aG9uIC1FJywKKyAnUFlUSE9OX0ZPUl9SRUdFTic6ICdweXRob24zLjcnLAorICdQWVRIT05fSEVB
REVSUyc6ICdcXCcsCisgJ1BZVEhPTl9PQkpTJzogJ1xcJywKKyAnUFlfQlVJTFRJTl9NT0RVTEVf
Q0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3VsdCAtV3NpZ24tY29tcGFyZSAtRE5ERUJVRyAtZyAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtc3RkPWM5
OSAtV2V4dHJhICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXJl
c3VsdCAtV25vLXVudXNlZC1wYXJhbWV0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV25vLWNhc3QtZnVuY3Rpb24tdHlwZSAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1JLiAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICctSS4vSW5jbHVkZSAtRFB5X0JVSUxEX0NPUkVf
QlVJTFRJTicsCisgJ1BZX0NGTEFHUyc6ICctV25vLXVudXNlZC1yZXN1bHQgLVdzaWduLWNvbXBh
cmUgLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgLVdhbGwnLAorICdQWV9DRkxBR1NfTk9ESVNUJzog
Jy1zdGQ9Yzk5IC1XZXh0cmEgLVduby11bnVzZWQtcmVzdWx0ICcKKyAgICAgICAgICAgICAgICAg
ICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVy
cyAnCisgICAgICAgICAgICAgICAgICAgICAnLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUgJworICAg
ICAgICAgICAgICAgICAgICAgJy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24n
LAorICdQWV9DT0VSQ0VfQ19MT0NBTEUnOiAxLAorICdQWV9DT1JFX0NGTEFHUyc6ICctV25vLXVu
dXNlZC1yZXN1bHQgLVdzaWduLWNvbXBhcmUgLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgJworICAg
ICAgICAgICAgICAgICAgICctV2FsbCAtc3RkPWM5OSAtV2V4dHJhIC1Xbm8tdW51c2VkLXJlc3Vs
dCAnCisgICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW1pc3Np
bmctZmllbGQtaW5pdGlhbGl6ZXJzICcKKyAgICAgICAgICAgICAgICAgICAnLVduby1jYXN0LWZ1
bmN0aW9uLXR5cGUgJworICAgICAgICAgICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0
aW9uLWRlY2xhcmF0aW9uIC1JLiAtSS4vSW5jbHVkZSAnCisgICAgICAgICAgICAgICAgICAgJy1E
UHlfQlVJTERfQ09SRScsCisgJ1BZX0NPUkVfTERGTEFHUyc6ICcnLAorICdQWV9DUFBGTEFHUyc6
ICctSS4gLUkuL0luY2x1ZGUnLAorICdQWV9GT1JNQVRfU0laRV9UJzogJyJ6IicsCisgJ1BZX0xE
RkxBR1MnOiAnJywKKyAnUFlfTERGTEFHU19OT0RJU1QnOiAnJywKKyAnUFlfU1NMX0RFRkFVTFRf
Q0lQSEVSUyc6IDEsCisgJ1BZX1NTTF9ERUZBVUxUX0NJUEhFUl9TVFJJTkcnOiAwLAorICdQWV9T
VERNT0RVTEVfQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3VsdCAtV3NpZ24tY29tcGFyZSAtRE5E
RUJVRyAtZyAtZndyYXB2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctTzMgLVdhbGwgLXN0
ZD1jOTkgLVdleHRyYSAtV25vLXVudXNlZC1yZXN1bHQgJworICAgICAgICAgICAgICAgICAgICAg
ICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJz
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctV25vLWNhc3QtZnVuY3Rpb24tdHlwZSAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAnLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJh
dGlvbiAtSS4gLUkuL0luY2x1ZGUnLAorICdQeV9ERUJVRyc6IDAsCisgJ1B5X0VOQUJMRV9TSEFS
RUQnOiAwLAorICdQeV9IQVNIX0FMR09SSVRITSc6IDAsCisgJ1FVSUNLVEVTVE9QVFMnOiAnLXgg
dGVzdF9zdWJwcm9jZXNzIHRlc3RfaW8gdGVzdF9saWIydG8zIFxcJywKKyAnUkVBREVMRic6ICdy
ZWFkZWxmJywKKyAnUkVTU1JDRElSJzogJ01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrJywKKyAnUkVU
U0lHVFlQRSc6ICd2b2lkJywKKyAnUlVOU0hBUkVEJzogJycsCisgJ1NDUklQVERJUic6ICcvdXNy
L2xvY2FsL2xpYicsCisgJ1NFVFBHUlBfSEFWRV9BUkcnOiAwLAorICdTR0lfQUJJJzogJ0BTR0lf
QUJJQCcsCisgJ1NIRUxMJzogJy9iaW4vc2gnLAorICdTSExJQlMnOiAnLWxjcnlwdCAtbHB0aHJl
YWQgLWxkbCAgLWx1dGlsJywKKyAnU0hMSUJfU1VGRklYJzogJy5zbycsCisgJ1NJR05FRF9SSUdI
VF9TSElGVF9aRVJPX0ZJTExTJzogMCwKKyAnU0lURVBBVEgnOiAnJywKKyAnU0laRU9GX0RPVUJM
RSc6IDgsCisgJ1NJWkVPRl9GTE9BVCc6IDQsCisgJ1NJWkVPRl9GUE9TX1QnOiAxNiwKKyAnU0la
RU9GX0lOVCc6IDQsCisgJ1NJWkVPRl9MT05HJzogOCwKKyAnU0laRU9GX0xPTkdfRE9VQkxFJzog
MTYsCisgJ1NJWkVPRl9MT05HX0xPTkcnOiA4LAorICdTSVpFT0ZfT0ZGX1QnOiA4LAorICdTSVpF
T0ZfUElEX1QnOiA0LAorICdTSVpFT0ZfUFRIUkVBRF9LRVlfVCc6IDQsCisgJ1NJWkVPRl9QVEhS
RUFEX1QnOiA4LAorICdTSVpFT0ZfU0hPUlQnOiAyLAorICdTSVpFT0ZfU0laRV9UJzogOCwKKyAn
U0laRU9GX1RJTUVfVCc6IDgsCisgJ1NJWkVPRl9VSU5UUFRSX1QnOiA4LAorICdTSVpFT0ZfVk9J
RF9QJzogOCwKKyAnU0laRU9GX1dDSEFSX1QnOiA0LAorICdTSVpFT0ZfX0JPT0wnOiAxLAorICdT
T0FCSSc6ICdjcHl0aG9uLTM3bS14ODZfNjQtbGludXgtZ251JywKKyAnU1JDRElSUyc6ICdQYXJz
ZXIgT2JqZWN0cyBQeXRob24gTW9kdWxlcyBNb2R1bGVzL19pbyBQcm9ncmFtcycsCisgJ1NSQ19H
REJfSE9PS1MnOiAnLi9Ub29scy9nZGIvbGlicHl0aG9uLnB5JywKKyAnU1REQ19IRUFERVJTJzog
MSwKKyAnU1RSSUNUX1NZU1ZfQ1VSU0VTJzogIi8qIERvbid0IHVzZSBuY3Vyc2VzIGV4dGVuc2lv
bnMgKi8iLAorICdTVFJJUEZMQUcnOiAnLXMnLAorICdTVUJESVJTJzogJycsCisgJ1NVQkRJUlNU
T08nOiAnSW5jbHVkZSBMaWIgTWlzYycsCisgJ1NZU0xJQlMnOiAnLWxtJywKKyAnU1lTX1NFTEVD
VF9XSVRIX1NZU19USU1FJzogMSwKKyAnVEFOSF9QUkVTRVJWRVNfWkVST19TSUdOJzogMSwKKyAn
VENMVEtfSU5DTFVERVMnOiAnJywKKyAnVENMVEtfTElCUyc6ICcnLAorICdURVNUT1BUUyc6ICcn
LAorICdURVNUUEFUSCc6ICcnLAorICdURVNUUFlUSE9OJzogJy4vcHl0aG9uJywKKyAnVEVTVFBZ
VEhPTk9QVFMnOiAnJywKKyAnVEVTVFJVTk5FUic6ICcuL3B5dGhvbiAuL1Rvb2xzL3NjcmlwdHMv
cnVuX3Rlc3RzLnB5JywKKyAnVEVTVFRJTUVPVVQnOiAxMjAwLAorICdUSU1FTU9EVUxFX0xJQic6
IDAsCisgJ1RJTUVfV0lUSF9TWVNfVElNRSc6IDEsCisgJ1RNX0lOX1NZU19USU1FJzogMCwKKyAn
VU5JQ09ERV9ERVBTJzogJ1xcJywKKyAnVU5JVkVSU0FMU0RLJzogJycsCisgJ1VQREFURV9GSUxF
JzogJ3B5dGhvbjMuNyAuL1Rvb2xzL3NjcmlwdHMvdXBkYXRlX2ZpbGUucHknLAorICdVU0VfQ09N
UFVURURfR09UT1MnOiAwLAorICdWRVJTSU9OJzogJzMuNycsCisgJ1dJTkRPV19IQVNfRkxBR1Mn
OiAxLAorICdXSVRIX0RPQ19TVFJJTkdTJzogMSwKKyAnV0lUSF9EVFJBQ0UnOiAwLAorICdXSVRI
X0RZTEQnOiAwLAorICdXSVRIX0xJQklOVEwnOiAwLAorICdXSVRIX05FWFRfRlJBTUVXT1JLJzog
MCwKKyAnV0lUSF9QWU1BTExPQyc6IDEsCisgJ1dJVEhfVkFMR1JJTkQnOiAwLAorICdYODdfRE9V
QkxFX1JPVU5ESU5HJzogMCwKKyAnWE1MTElCU1VCRElSUyc6ICd4bWwgeG1sL2RvbSB4bWwvZXRy
ZWUgeG1sL3BhcnNlcnMgeG1sL3NheCcsCisgJ2Fic19idWlsZGRpcic6ICcnLAorICdhYnNfc3Jj
ZGlyJzogJycsCisgJ2RhdGFyb290ZGlyJzogJy91c3IvbG9jYWwvc2hhcmUnLAorICdleGVjX3By
ZWZpeCc6ICcvdXNyL2xvY2FsJywKKyAncHJlZml4JzogJy91c3IvbG9jYWwnLAorICdzcmNkaXIn
OiAnLid9Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKx9-0004fr-A3; Mon, 23 Sep 2019 09:48:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKx7-0004fa-A3
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:17 +0000
X-Inumbo-ID: 2c6295e4-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2c6295e4-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:36 +0000 (UTC)
IronPort-SDR: XQV6BqismlhchcNVv8Wic27PNHiIcG9nk7RpSjBf/Htk1sfDQNBtLjP6UOjou8OyU30K67wwuP
 veNkcbbgYrqw==
IronPort-PHdr: =?us-ascii?q?9a23=3AVi3g/BFqv3+YKbAF+R8R1Z1GYnF86YWxBRYc79?=
 =?us-ascii?q?8ds5kLTJ7ypM+wAkXT6L1XgUPTWs2DsrQY0rGQ6fCrADxIoc7Y9ixbKtoUD1?=
 =?us-ascii?q?5NoP5VtjRoONSCB0z/IayiRA0BN+MGamVY+WqmO1NeAsf0ag6aiHSz6TkPBk?=
 =?us-ascii?q?e3blItdaz6FYHIksu4yf259YHNbAVUnjq9Zq55IAmroQnLucQanIVvJrwvxh?=
 =?us-ascii?q?bKrXdEZudbzn5sKV6Pghrw/Mi98IN9/yhKp/4t68tMWrjmcqolSrBVEC4oOH?=
 =?us-ascii?q?0v6s3xshnDQwqP5n8CXWgTjxFFHQvL4gzkU5noqif1ufZz1yecPc3tULA7Qi?=
 =?us-ascii?q?+i4LtxSB/pkygIKTg0+3zKh8NqjaJbpBWhpwFjw4PRfYqYOuZycr/bcNgHQ2?=
 =?us-ascii?q?dKQ8RfWDFbAo6kb4UBEfcPM+hboYf6pVQOowCzCRWwCO711jNFnGP60bE83u?=
 =?us-ascii?q?88EQ/GxgsgH9cWvXnKq9X1L7sSUeGzzKLVyzvDcutW2Srg44XPbh8hpuqMXa?=
 =?us-ascii?q?5xccrX00UvEx7Fjk2NqYH+IzyVzf4Bs3CG7+V7T+6vkWknphh3rzOyxckskp?=
 =?us-ascii?q?HEip8ax1zZ7yl0w4Y4KcemREJlY9OoCpVduzmHO4Z5X88uWWJltSYgxrEYt5?=
 =?us-ascii?q?O2cjIGxIkoyhLBbfGMbpKG7Qj5VOmLJDd1nHdleLWiiBms6UWg0ej8VtWs0F?=
 =?us-ascii?q?ZNsypFjsHAtnAT2BzX7ciKUuV9/kK71jaO0wDf8P1LIVsumarDNp4u2aQ8lo?=
 =?us-ascii?q?AUsUjbHy/2nlv5jLOOe0k59eWk9v7rb7bmq5OGKYN4lAPzPr4gl8CnBOQ3KA?=
 =?us-ascii?q?kOX2yV+eSm073j+FX0T6lNjv0tjqnZsZbaKd4fpq6kGw9Vz50u5AqkDzu8yN?=
 =?us-ascii?q?QYgGIIIEhfeBKAl4TpIU3BIOjkDfejhFShiDJrx/HAPr3gBZXNNWHPn6r/cr?=
 =?us-ascii?q?Zj9UFczBE+zdRe55JPFrEBO+j/W0Dvu9zeFBM5NBa0w+n/AtVnyoweQX6PAr?=
 =?us-ascii?q?OeMK7Kv1+H+OYvI+iUZIALojr9K+Ul5//ygn84glIde7em0ocTaH+iBftqOV?=
 =?us-ascii?q?uWYWf0iNcbDWgKphY+TPDtiFCaTz5TY2y9UL8k6T4hDoKpEJ3DSZ6sgLCbxy?=
 =?us-ascii?q?i0BIBZZmdHClCRCnrobJmEW+oRZy6IOMBujicEWaK8S485zh6irhX6y700Zt?=
 =?us-ascii?q?bTrygZs5Pkz5156vPekTk29CdoFIKN3mfLSHt7zU0SQDpj96dkvU17gnOeyb?=
 =?us-ascii?q?Uw1/dfDsBS4bVNTx8nHZXHifRnAZboXVSSLZ+yVF+6T4D+UnkKRdUrzopWbg?=
 =?us-ascii?q?=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BfAADWk4hdjAPjVY1lHQEBBQEMBQG?=
 =?us-ascii?q?BVgUBCwGDClMgEiqNHqM8CQEBASkRAQIBAYQ/AoM3NwYOAgMJAQEFAQEBAQE?=
 =?us-ascii?q?FBAETAQEBJoVdDII6IoJvAwN5ED8SVxmDIgGCDqxfhUyDMoFIgTQBhy+GMT+?=
 =?us-ascii?q?JcoUWBJZClkoHgiVlBIYcjXkngyiVfakINyGBWTMag18JRxAUgWiLUoJcPQE?=
 =?us-ascii?q?BMYEGAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2BfAADWk4hdjAPjVY1lHQEBBQEMBQGBVgUBCwGDClMgE?=
 =?us-ascii?q?iqNHqM8CQEBASkRAQIBAYQ/AoM3NwYOAgMJAQEFAQEBAQEFBAETAQEBJoVdD?=
 =?us-ascii?q?II6IoJvAwN5ED8SVxmDIgGCDqxfhUyDMoFIgTQBhy+GMT+JcoUWBJZClkoHg?=
 =?us-ascii?q?iVlBIYcjXkngyiVfakINyGBWTMag18JRxAUgWiLUoJcPQEBMYEGAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854265"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id CE7D11A602E4;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id evQZ7oi-pSrc; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 9AE6E1A602EE;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id Zx1EElSbmE1h; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 530731A602E8;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:12 +0300
Message-Id: <20190923094714.21759-12-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 11/13] Provide main()
 function if configured to do so
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29tZXRpbWVzIGFsbCB5b3Ugd2FudCB0byBydW4gaXMgdGhlIFB5dGhvbiBzaGVsbC4gSW4gdGhp
cyBjYXNlIHlvdSBjYW4gdGljayB0aGUKb3B0aW9uIGluIG1lbnVjb25maWcgc28gdGhhdCB0aGUg
bGlicmFyeSB0byBwcm92aWRlIHRoZSBtYWluKCkgZnVuY3Rpb24gZm9yIHlvdS4KClNpZ25lZC1v
ZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0tLQogQ29uZmlnLnVr
ICAgfCA0ICsrKysKIE1ha2VmaWxlLnVrIHwgMSArCiBtYWluLmMgICAgICB8IDggKysrKysrKysK
IDMgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1h
aW4uYwoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awppbmRleCAzZGEzZmZiLi44
MGE1NTdhIDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBAIC0zMSw0ICsz
MSw4IEBAIGNvbmZpZyBMSUJQWVRIT04zX1RNUERJUgogCXN0cmluZyAiVGVtcCBkaXJlY3Rvcnkg
bG9jYXRpb24iCiAJZGVmYXVsdCAiL3RtcCIKIAorY29uZmlnIExJQlBZVEhPTjNfTUFJTl9GVU5D
VElPTgorCWJvb2wgIlByb3ZpZGUgbWFpbiBmdW5jdGlvbiIKKwlkZWZhdWx0IG4KKwogZW5kaWYK
ZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggOGJjM2FjZC4uYmUy
ZmYyMyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTEwMCw2
ICsxMDAsNyBAQCBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1P
Tl9JTkNMVURFUy15KQogTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04zX0JBU0UpL2lu
aXQuY3x1bmlrcmFmdAogTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04zX0JBU0UpL21v
ZHVsZXNfY29uZmlnLmN8dW5pa3JhZnQKIExJQlBZVEhPTjNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19CQVNFKS9zdHVicy5jfHVuaWtyYWZ0CitMSUJQWVRIT04zX1NSQ1MtJChDT05GSUdfTElCUFlU
SE9OM19NQUlOX0ZVTkNUSU9OKSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbWFpbi5jfHVuaWtyYWZ0
CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFB5dGhvbiBjb3JlCmRpZmYgLS1naXQgYS9t
YWluLmMgYi9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5ZGYy
YwotLS0gL2Rldi9udWxsCisrKyBiL21haW4uYwpAQCAtMCwwICsxLDggQEAKKyNkZWZpbmUgUHlf
QlVJTERfQ09SRQorI2luY2x1ZGUgPFB5dGhvbi5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQoreworCXJldHVybiBfUHlfVW5peE1haW4oYXJnYywgYXJndik7Cit9CisKLS0g
CjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKxD-0004gn-Cq; Mon, 23 Sep 2019 09:48:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKxC-0004gb-A7
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:22 +0000
X-Inumbo-ID: 2d700a52-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2d700a52-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:38 +0000 (UTC)
IronPort-SDR: O8q8A01kQUK7P/GhhDX8QPyNvsrfkG8XOmm1/1xZhl/d6G2Z6vmogGUCjDExjQ9/On9JDuzu60
 bLP25XKVS3bQ==
IronPort-PHdr: =?us-ascii?q?9a23=3A1+zSlRcSXWvt6nt+gVmUtAVmlGMj4u6mDksu8p?=
 =?us-ascii?q?Mizoh2WeGdxcW5Zx7h7PlgxGXEQZ/co6odzbaP6Oa6CSdZsd7B6ClELMUWEU?=
 =?us-ascii?q?ddyI0/pE8JOIa9E0r1LfrnPWQRPf9pcxtbxUy9KlVfA83kZlff8TWY5D8WHQ?=
 =?us-ascii?q?jjZ0IufrymUoHdgN6q2O+s5pbdfxtHhCanYbN1MR66sRjdutMZjId/JKs90A?=
 =?us-ascii?q?XFr3hHd+hLxm5jOFafkwrh6suq85Nv7jpct+g9+8JcVKnxYrg1Q6FfADk6KW?=
 =?us-ascii?q?4++dfltQPETQuB53scVnsZnx9VCAXb7x/0Q4n8vDLiuuVyxCeVM8v2TaspWT?=
 =?us-ascii?q?u59KdkVAXoiCYcODEn9mzcl9F9g7haoBKloBx/3pLUbYSIP/dwYq/RYdUXTn?=
 =?us-ascii?q?dHU81MVSJOH5m8YpMPAeQfIOhWoYrzqVwMohuwHgSgGP/jxyVUinLswaE2z+?=
 =?us-ascii?q?IsGhzG0gw6GNIOtWzZocvyNKcJTeC1za/IxijFYfNLwTf99ZXDfxc9rvGLRr?=
 =?us-ascii?q?JwbcvRyU81GwPBk1WQsZHlMiiJ2eQWqWSb9/dgWvm1h249rAF8uz6izdovhI?=
 =?us-ascii?q?nRno8Z11/J+ThjzIs2JdC0UlB3bcCmHZdKuSyWL5Z6T8w/T21yuys3yqcKtY?=
 =?us-ascii?q?C1cSUE0pgr2hHSZ+KBfoOV+BzsTvyRLi19hH99fbK/gAu9/la4x+3nU8m0zE?=
 =?us-ascii?q?5Kri1YktnQrnwN1wLc6syASvZl4Eeh3CyA1wHX6u1ePU80jrDXK4Y8wrErjJ?=
 =?us-ascii?q?YTq0PDEjf3mEXwkqCWal0p9vWn5uj6eLnrpZ+RO5Vqhg3gMKkigMKyDfw9Mg?=
 =?us-ascii?q?cUXmib/eq81Kfk/U38WLhFkvo2krLFsJDbI8QXvKq5AxJN0oY+8BuwEyym3M?=
 =?us-ascii?q?4AnXkaN11JYgiHj4/xN1HUPP/4Feu/g0irkDpzwvDGP7vhApTKLnjYibvuYK?=
 =?us-ascii?q?hy61BCxwo31t1f45NUCqodIPLoQEPwu8LXDhkjPwyz2ebnB8131pkCVmKXHq?=
 =?us-ascii?q?+ZLKTSvEeG5u0xJ+mMZZcVtyjnJ/gl+v7ujGM2mV4GcKmvw5QYdHS4Ee59LE?=
 =?us-ascii?q?mDf3Xsn88LEX0WsQomUOzqlFqCXCZNZ3a2Ra0z+yk0B5igDYjeXICinr2B0D?=
 =?us-ascii?q?2gEZJMe29GDVGMEWrzeoWfR/cMdT+dLtV7nTMYTritUZIh1Qm1uwPg0bpnKb?=
 =?us-ascii?q?mcxipNsJPl1d9uouHeixw23Th1FNiGlXGASSdzhGxbaSUx2fVUpldhy1HL9b?=
 =?us-ascii?q?VgnrQMHttI+/JPFAMnLYP0xPc8E834HBjGKITaAG26S8mrVGliBuk6xMUDNh?=
 =?us-ascii?q?5w?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4MLUyASKo0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQ?=
 =?us-ascii?q?BEwEBASaFXQyCOiKCbwMDeRA/ElcZgyIBgg6sX4VMgzKBSIE0hzCGMT+BEYN?=
 =?us-ascii?q?QhRGFFgSWQpZKB4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBWg4JFRi?=
 =?us-ascii?q?LHIJcPQEBMYEGAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2ATAQDWk4hdjAPjVY1lHAEBAQQBAQwEAQGBZ4MLUyASK?=
 =?us-ascii?q?o0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQBEwEBASaFXQyCO?=
 =?us-ascii?q?iKCbwMDeRA/ElcZgyIBgg6sX4VMgzKBSIE0hzCGMT+BEYNQhRGFFgSWQpZKB?=
 =?us-ascii?q?4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBWg4JFRiLHIJcPQEBMYEGA?=
 =?us-ascii?q?QGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854266"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id CF51C1A602E8;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id E0WZOe7HXNUI; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id A7C151A602F2;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id gAa74VM7qJC6; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 730311A602F8;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:13 +0300
Message-Id: <20190923094714.21759-13-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 12/13] Config.uk: Add
 configuration options for extensions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgY3VycmVudGx5IGNvbmZpZ3VyZSB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IFhNTCBwYXJz
aW5nIHdpdGggRXhwYXQgbGliLApkZWNpbWFsIG9wZXJhdGlvbnMgd2l0aCBsaWJtcGRlYywgU1NM
LCBVVUlEIGFuZCB6bGliLiBTcWxpdGUgd2lsbCBiZQphdXRvbWF0aWNhbGx5IHN1cHBvcnRlZCB3
aGVuIHRoZSBleHRlcm5hbCBsaWJyYXJ5IHdpbGwgYmUgcmVsZWFzZWQuCgpTaWduZWQtb2ZmLWJ5
OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayB8IDM5
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs
IDM5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5k
ZXggODBhNTU3YS4uNmViYWI0NSAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBiL0NvbmZpZy51
awpAQCAtMzUsNCArMzUsNDMgQEAgY29uZmlnIExJQlBZVEhPTjNfTUFJTl9GVU5DVElPTgogCWJv
b2wgIlByb3ZpZGUgbWFpbiBmdW5jdGlvbiIKIAlkZWZhdWx0IG4KIAorCittZW51Y29uZmlnIExJ
QlBZVEhPTjNfRVhURU5TSU9OUworCWJvb2wgIkV4dGVuc2lvbnMiCisJZGVmYXVsdCBuCisKK2lm
IExJQlBZVEhPTjNfRVhURU5TSU9OUworY29uZmlnIExJQlBZVEhPTjNfRVhURU5TSU9OX0VYUEFU
CisJYm9vbCAiRXhwYXQgWE1MIHBhcnNlciIKKwlkZWZhdWx0IHkKK2lmIExJQkZGSQorI2NvbmZp
ZyBMSUJQWVRIT04zX0VYVEVOU0lPTl9DVFlQRVMKKyMJYm9vbCAiY3R5cGVzIgorIwlkZWZhdWx0
IHkKK2VuZGlmCitjb25maWcgTElCUFlUSE9OM19FWFRFTlNJT05fTElCTVBERUMKKwlib29sICJE
ZWNpbWFsIG9wZXJhdGlvbnMgd2l0aCBsaWJtcGRlYyIKKwlkZWZhdWx0IHkKK2lmIExJQlNRTElU
RQorY29uZmlnIExJQlBZVEhPTjNfRVhURU5TSU9OX1NRTElURQorCWJvb2wgInNxbGl0ZSIKKwlk
ZWZhdWx0IHkKK2VuZGlmCitpZiBMSUJTU0wKK2NvbmZpZyBMSUJQWVRIT04zX0VYVEVOU0lPTl9T
U0wKKwlib29sICJTU0wiCisJZGVmYXVsdCB5CitlbmRpZgoraWYgTElCVVVJRAorY29uZmlnIExJ
QlBZVEhPTjNfRVhURU5TSU9OX1VVSUQKKwlib29sICJVVUlEIgorCWRlZmF1bHQgeQorZW5kaWYK
K2lmIExJQlpMSUIKK2NvbmZpZyBMSUJQWVRIT04zX0VYVEVOU0lPTl9aTElCCisJYm9vbCAiemxp
YiIKKwlkZWZhdWx0IHkKK2VuZGlmCitlbmRpZgorCiBlbmRpZgotLSAKMi4yMC4xCgoKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKxH-0004i2-NX; Mon, 23 Sep 2019 09:48:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKxH-0004hp-AP
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:27 +0000
X-Inumbo-ID: 2d74f4cc-dde7-11e9-978d-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2d74f4cc-dde7-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:38 +0000 (UTC)
IronPort-SDR: KHaxO+TQEnO+c2C5x+ltRjAkVAWpSI6dZ5nWvJiJxfS1I6RkWQD/FuvvrOJjfl/YDnVD+bEnSt
 bb+tpFENAFXw==
IronPort-PHdr: =?us-ascii?q?9a23=3AwOeHYRNoQWlvaG9tqRgl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0I//4rarrMEGX3/hxlliBBdydt6sfzbCG+PmwESxYuNDd6SpEKMQNHz?=
 =?us-ascii?q?Y+yuwu1zQ6B8CEDUCpZNXLVAcdWPp4aVl+4nugOlJUEsutL3fbo3m18CJAUk?=
 =?us-ascii?q?6nbVk9Kev6AJPdgNqq3O6u5ZLTfx9IhD2gar9uMRm6twrcutQYjId4NKo8yR?=
 =?us-ascii?q?TFrmZLdu9LwW9kOU+fkwzz68ut4pJv6Thct+4k+8VdTaj0YqM0QKBCAj87KW?=
 =?us-ascii?q?41/srrtRfCTQuL+HQRV3gdnwRLDQbY8hz0R4/9vSTmuOVz3imaJtD2QqsvWT?=
 =?us-ascii?q?u+9adrSQTnhzkBOjUk7WzYkM1wjKZcoBK8uxxyxpPfbY+JOPZieK7WYNUXTn?=
 =?us-ascii?q?dDUMlMTSxMGoOyYZUSAeQPPuhWqIvyp1UVoBeiGQWhHv/jxyVUinPq26Axzu?=
 =?us-ascii?q?QvERvB3AwlB98DrnPUrM7pNKcTV+C+0a/GzSjbb/NLxDzw75THchc6ofGQXL?=
 =?us-ascii?q?Jwd9DdyU0yFwPdk1WdspDqPyiP2uQVrmiU9PBsVfioi2M+rQx6vzuhxt80h4?=
 =?us-ascii?q?XUiY8Z10rI+CZ5zYovO9G0Vkx2bcSqHZdIqi2XOJZ6TtkhTmxooio21LMLtJ?=
 =?us-ascii?q?ChcCQXx5kr2RjSYOGdfYeS+BLsTuORLC99hHJiZb2wmQ6/8VOlyu3gTsm010?=
 =?us-ascii?q?tKrjZdntnMqH8N0xvT59CZSvt45Eih2DKP2xrP5eFfO0w0jbfbJIU7zr4qkZ?=
 =?us-ascii?q?ofqUXDHinol0XqlKKaa0op9vWy5+nkYrjqvIGQO5F2hw3kPKkigsm/Dv45Mg?=
 =?us-ascii?q?gKUWib4+O81Lj78ELlR7VKleE2kqjfsJzAIcQbu7a5AxJO34k/8BazFS+m0M?=
 =?us-ascii?q?kDknUdNlJFfwqLj5L1NFHWPPD4EfC/jkypkDdqwfDGP7rhAo7UInfejrjhY6?=
 =?us-ascii?q?hy60pHxQo3zNBf/I5UCqobLPP8REDxssbUDhgjMwy72+znEsly1psCWWKTBa?=
 =?us-ascii?q?+UKK3SvkGM5uIuO+mDepUZuDbgK/gk+/HujGQ0mVkDcqa12ZsYcmu3Eu54LE?=
 =?us-ascii?q?WEeXDsmMsOEX8WvgoiS+znkEOCUTpJaHmvR60z/Dc7B5+8DYjdR4ChmqeO0z?=
 =?us-ascii?q?2mEZ1RZ2BGF0uBEWz0d4WZRvgAcjidLdN6kjAeSLihU5Qu2Qu0tA/9mPJbKb?=
 =?us-ascii?q?/R+ysZsomm2NVr6un7kRAp6ScyH8mblWaXQDJahGQNEhQxx7x+pwRZ10+emf?=
 =?us-ascii?q?xzhOdEFNoV4+5RTy8xLtjE0uY8EdekCVGJRcuAVFvzGobuOjo2VN9km9I=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ANAADWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBUwcBAQsBgXOBF1MgEiqMPmCIH36YJBSBZwkBAQEpEQECAQGBS4J0AoM?=
 =?us-ascii?q?3NAkOAgMJAQEFAQEBAQEFBAETAQEBJoVdDII6IoJvAwN5ECAfElcZgldLAYI?=
 =?us-ascii?q?OrF+FTIMygUiBNAGHL4M7gnY/gRGCXYR8FIYKBI0RiBKBH5ZKB4IlZQSGHIk?=
 =?us-ascii?q?vhEongmVDlX2pCCE3gVkzGnOCbAlHEBSBWg4Ji0mCXD0BATEBgQUBAYsRglQ?=
 =?us-ascii?q?BAQ?=
X-IPAS-Result: =?us-ascii?q?A2ANAADWk4hdjAPjVY1lHAEBAQQBAQwEAQGBUwcBAQsBg?=
 =?us-ascii?q?XOBF1MgEiqMPmCIH36YJBSBZwkBAQEpEQECAQGBS4J0AoM3NAkOAgMJAQEFA?=
 =?us-ascii?q?QEBAQEFBAETAQEBJoVdDII6IoJvAwN5ECAfElcZgldLAYIOrF+FTIMygUiBN?=
 =?us-ascii?q?AGHL4M7gnY/gRGCXYR8FIYKBI0RiBKBH5ZKB4IlZQSGHIkvhEongmVDlX2pC?=
 =?us-ascii?q?CE3gVkzGnOCbAlHEBSBWg4Ji0mCXD0BATEBgQUBAYsRglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854264"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id A9B971A602F6;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id y597vHZTos2Y; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 5AC7B1A602E4;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id W9AJuwcgfZaL; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 391101A602E5;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:10 +0300
Message-Id: <20190923094714.21759-10-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 09/13] Add init.c for
 initialization
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKVGhpcyBwYXRjaCBzZXRzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUg
bmVlZGVkIGR1cmluZyBydW50aW1lIGZvcgp0aGUgaW50ZXByZXRlci4KClNpZ25lZC1vZmYtYnk6
IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4K
U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBD
b25maWcudWsgICB8IDEzICsrKysrKysrKysrKysKIE1ha2VmaWxlLnVrIHwgIDEgKwogaW5pdC5j
ICAgICAgfCA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
CiAzIGZpbGVzIGNoYW5nZWQsIDYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp
bml0LmMKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggZjgwMWEwYy4u
M2RhM2ZmYiAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBiL0NvbmZpZy51awpAQCAtMTgsNCAr
MTgsMTcgQEAgbWVudWNvbmZpZyBMSUJQWVRIT04zCiAJc2VsZWN0IExXSVBfSVBWNgogCiBpZiBM
SUJQWVRIT04zCisKK2NvbmZpZyBMSUJQWVRIT04zX1BZVEhPTkhPTUUKKwlzdHJpbmcgIlB5dGhv
biBob21lIGRpcmVjdG9yeSIKKwlkZWZhdWx0ICIvbGliL3B5dGhvbjMuNyIKKworY29uZmlnIExJ
QlBZVEhPTjNfUFlUSE9OUEFUSAorCXN0cmluZyAiUHl0aG9uIHBhdGgiCisJZGVmYXVsdCAiL2xp
Yi9weXRob24zLjciCisKK2NvbmZpZyBMSUJQWVRIT04zX1RNUERJUgorCXN0cmluZyAiVGVtcCBk
aXJlY3RvcnkgbG9jYXRpb24iCisJZGVmYXVsdCAiL3RtcCIKKwogZW5kaWYKZGlmZiAtLWdpdCBh
L01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggNGQ2N2Y2Yy4uZGM2ZTRhZCAxMDA2NDQK
LS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTk3LDYgKzk3LDcgQEAgTElC
UFlUSE9OM19DT01NT05fQ1hYRkxBR1MteSArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMt
eSkKIExJQlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0lOQ0xV
REVTLXkpCiBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9J
TkNMVURFUy15KQogCitMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvaW5p
dC5jfHVuaWtyYWZ0CiBMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbW9k
dWxlc19jb25maWcuY3x1bmlrcmFmdAogTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X0JBU0UpL3N0dWJzLmN8dW5pa3JhZnQKIApkaWZmIC0tZ2l0IGEvaW5pdC5jIGIvaW5pdC5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDYyNzkKLS0tIC9kZXYvbnVsbAor
KysgYi9pbml0LmMKQEAgLTAsMCArMSw0NiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IEJhZG9pdSBWbGFkLUFuZHJlaSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdo
dCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVE
IElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVr
L2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordm9pZCBfX2NvbnN0cnVjdG9y
IHB5dGhvbl9pbml0KHZvaWQpCit7CisJc2V0ZW52KCJQWVRIT05IT01FIiwgQ09ORklHX0xJQlBZ
VEhPTjNfUFlUSE9OSE9NRSwgMCk7CisJc2V0ZW52KCJQWVRIT05QQVRIIiwgQ09ORklHX0xJQlBZ
VEhPTjNfUFlUSE9OUEFUSCwgMCk7CisJc2V0ZW52KCJQWVRIT05VU0VSQkFTRSIsICJzaXRlLXBh
Y2thZ2VzIiwgMCk7CisJc2V0ZW52KCJUTVBESVIiLCBDT05GSUdfTElCUFlUSE9OM19UTVBESVIs
IDApOworCXNldGVudigiX1BZVEhPTl9TWVNDT05GSUdEQVRBX05BTUUiLCAiX3N5c2NvbmZpZ2Rh
dGEiLCAwKTsKK30KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKxM-0004jY-PX; Mon, 23 Sep 2019 09:48:32 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKxM-0004jM-A0
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:32 +0000
X-Inumbo-ID: 2e3a72b0-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2e3a72b0-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:39 +0000 (UTC)
IronPort-SDR: u4BLBvO0GfwpltCNvOeRvX5WrAgDCAUEUvijFl3Swssb4Sxws00HQPwH0B5TFZtDzgl16v2P5M
 kqydf746KQZQ==
IronPort-PHdr: =?us-ascii?q?9a23=3ASx+j8hQm3MP3ZgV4MlItW5a2qdpsv+yvbD5Q0Y?=
 =?us-ascii?q?Iujvd0So/mwa6zZxeN2/xhgRfzUJnB7Loc0qyK6vumAzxLuMbJ8ChbNsAVDV?=
 =?us-ascii?q?ld0YRetjdjKfbNMVf8Iv/uYn5yN+V5f3ghwUuGN1NIEt31fVzYry76xzcTHh?=
 =?us-ascii?q?LiKVg9fbytScbdgMutyu+95YDYbRlWizqhe7NyKwi9oRnMusUMjoZuN6g8xg?=
 =?us-ascii?q?HXrnZLdOha2GBlLk+Xkxrg+8u85pFu/zlOt/4768JMTaD2dLkkQLJFCzgrL3?=
 =?us-ascii?q?o779DxuxnZSguP6HocUmEInRdNHgPI8hL0UIrvvyXjruZy1zWUMsPwTbAvRD?=
 =?us-ascii?q?St9LxrRwPyiCcGLDE27mfagdFtga1BoRKhoxt/w5PIYIyQKfFzcL/Rcc8cSG?=
 =?us-ascii?q?FcWMtaSi5PDZ6mb4YXD+QPI/tWoYf+qVUJrxS+CxKhCP/zxjJSmnP7x7E23/?=
 =?us-ascii?q?gnHArb3AIgBdUOsHHModjrM6cSSvy1zKjOzT7eaf1WxC/96JXVeR0mvf6MWq?=
 =?us-ascii?q?lwcdbQyUkpDQ/FikiQqZT4Pz6OyusNqHKX7/J9Ve20kWInsQZxryGpy8wxiY?=
 =?us-ascii?q?fJnpoYxk3L+Clk2oo4Jt21RFRlbdK6EpZcrS+XO5NrTs4tXm1koiU3x70ctZ?=
 =?us-ascii?q?KlciUHxo4rywPQZvCZdYWD/wjtW/yLIThigXJoYLe/hxGv/ke+0uD8Tcy00E?=
 =?us-ascii?q?pSripCj9nMqmgB1xzN5ciDTftw5lmh2TOV2ADS7uFIO1w7lbHBJ545374/jY?=
 =?us-ascii?q?AfsV7EHiPumUX2irGZdlk89+S15Onrf6/qq5ycOoNulA3yLKYjltaxDOggNw?=
 =?us-ascii?q?gBRWmb+eCy1L35+k35Ra1HgeExkqnCrJDaJMIbqrS9Aw9IyoYj9g2yACu90N?=
 =?us-ascii?q?gChXkHMUlKdAidj4juI13OOuz3De+jg1Swlzdm3/XGPrznApXMKXjDi67tcq?=
 =?us-ascii?q?tj5E5C1gUzyctS55ZVCrEaPPLzQVX9tdPGAR8/KQC0xPznCNpl3IMERW2PGr?=
 =?us-ascii?q?OZML/VsVKQ6OIgPe2MZI4NuDnjMfQl5+PujX4lll8cZqSp24UYZ2y8Hvt8OE?=
 =?us-ascii?q?qVe2TjgsoZG2cQogU+VPDqiEGFUTNLeXayW7gz6SwjB428C4fMW5qtj6KA3C?=
 =?us-ascii?q?uhBZJZfH1JCleNEXf1bIiEQOsMaD+PLcN7iDMLSaOhR5U81RG2rwD20aBnLu?=
 =?us-ascii?q?2HshEf4Jfi0tly/KjfmA8/8RRwDt+ByCedQmcymXkHFBEs26Uqiktm1laFmY?=
 =?us-ascii?q?xlm+EQQddU/O9IVEE+KIbB5+dhTcjvUETbeYHaGx6dXty6DGRpHZoKyNgUbh?=
 =?us-ascii?q?MlFg=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AWAADWk4hdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBVAYBAQsBgwpTIBIqjR6IH5kigXsJAQEBKREBAgEBhD8Cgzc1CA4CAwk?=
 =?us-ascii?q?BAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxfhUyDMoF?=
 =?us-ascii?q?IgTQBhy+GMT+BEYJkbIonBJZClVxuB4IlZQSGHIUUiGUngjZyhlmPJIpRhQW?=
 =?us-ascii?q?ZMiIBNYFZMxqDXwlHEBSBWg4JFYdChk49AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2AWAADWk4hdjAPjVY1lHAEBAQQBAQwEAQGBVAYBAQsBg?=
 =?us-ascii?q?wpTIBIqjR6IH5kigXsJAQEBKREBAgEBhD8Cgzc1CA4CAwkBAQUBAQEBAQUEA?=
 =?us-ascii?q?RMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxfhUyDMoFIgTQBhy+GMT+BE?=
 =?us-ascii?q?YJkbIonBJZClVxuB4IlZQSGHIUUiGUngjZyhlmPJIpRhQWZMiIBNYFZMxqDX?=
 =?us-ascii?q?wlHEBSBWg4JFYdChk49AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854267"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id EAA801A602E4;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id csTZMD4XJRcZ; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id D235A1A602EF;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id RusfKGx8Dc8b; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 8E3061A602E5;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:14 +0300
Message-Id: <20190923094714.21759-14-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 13/13] README.md: Update
 with info about building and running
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIFJFQURNRS5tZCB8IDQyICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDMg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IGM5
NTQ0ZDEuLmQyYjQ4NjggMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAg
LTEsNyArMSw0MyBAQAotcHl0aG9uMyBmb3IgVW5pa3JhZnQKLT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KKyMgcHl0aG9uMyBmb3IgVW5pa3JhZnQKIFRoaXMgaXMgdGhlIHBvcnQgb2Yg
cHl0aG9uMyBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4KIAorIyMgQnVpbGQKK1B5
dGhvbiAzIGludGVycHJldGVyIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMsIHRo
YXQgbmVlZCB0byBiZSBhZGRlZCB0byBgTWFrZWZpbGVgIGluIHRoaXMgb3JkZXI6CisqIGBwdGhy
ZWFkc2AsIGUuZy4gYHB0aHJlYWQtZW1iZWRkZWRgCisqIGBsaWJjYCwgZS5nLiBgbmV3bGliYAor
KiBuZXR3b3JrIHN0YWNrLCBlLmcuIGBsd2lwYAorKiBhIFNJTUQgbGlicmFyeSwgZS5nLiBgaW50
ZWwtaW50cmluc2ljc2AKKyogb3B0aW9uYWwgZXh0ZW5zaW9uczogYG9wZW5zc2xgLCBgemxpYmAs
IGBsaWJ1dWlkYCwgZXRjCisKKyMjIFJvb3QgZmlsZXN5c3RlbQorIyMjIENyZWF0aW5nIHRoZSBm
aWxlc3lzdGVtCitQeXRob24gMyBpbnRlcnByZXRlciBuZWVkcyBhIGZpbGVzeXN0ZW0gd2hpY2gg
c2hvdWxkIGNvbnRhaW4gaXRzIHN0YW5kYXJkIGxpYnJhcnkuIFRoZXJlZm9yZSwgdGhlIGZpbGVz
eXN0ZW0gbmVlZHMgdG8gYmUgY3JlYXRlZCBiZWZvcmUgcnVubmluZyB0aGUgVk0uIFlvdSBjYW4g
ZG8gdGhpcyBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworYGBgYmFzaAorbWFr
ZSBweXRob24tcm9vdGZzIHBhdGg9PHNvbWUgZGlyZWN0b3J5PgorYGBgCisKK0l0IHdpbGwgY3Jl
YXRlIHRoZSBmaWxlc3lzdGVtIGluIHRoZSBkaXJlY3RvcnkgeW91IGNob29zZSwgYnkgZmlyc3Qg
Y3JlYXRpbmcgYSB2aXJ0dWFsIFB5dGhvbiBlbnZpcm9ubWVudC4gQWZ0ZXIgdGhhdCBpdCB3aWxs
IGluc3RhbGwgdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGludG8gaXQuIEZvciB0aGlzIHNl
Y29uZCBzdGVwLCB0aGUgb3JpZ2luYWwgY29kZSBuZWVkcyB0byBiZSBjb25maWd1cmVkIGFuZCBi
dWlsZCB3aXRoIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBwcm92aWRlZCByb290IGRpcmVjdG9yeS4g
VGhlc2UgdHdvIHN0ZXBzIGFyZSBleGVjdXRlZCB0cmFuc3BhcmVudGx5LCBhbGwgeW91IGhhdmUg
dG8gZG8gaXMganVzdCBydW5uaW5nIHRoZSBhYm92ZSBgbWFrZWAgY29tbWFuZC4KKworIyMjIFVz
aW5nIHRoZSBmaWxlc3lzdGVtCitNb3VudGluZyB0aGUgZmlsZXN5c3RlbSBpcyBhIHRyYW5zcGFy
ZW50IG9wZXJhdGlvbi4gQWxsIHlvdSBoYXZlIHRvIGRvIGlzIHRvIHByb3ZpZGUgdGhlIHJpZ2h0
IFFlbXUgcGFyYW1ldGVycyBpbiBvcmRlciBmb3IgVW5pa3JhZnQgdG8gbW91bnQgdGhlIGZpbGVz
eXN0ZW0uIFdlIHdpbGwgdXNlIHRoZSA5cGZzIHN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zIGFuZCBm
b3IgdGhpcyB5b3Ugd2lsbCBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisK
K2BgYGJhc2gKKy1mc2RldiBsb2NhbCxpZD1teWlkLHBhdGg9PHNvbWUgZGlyZWN0b3J5PixzZWN1
cml0eV9tb2RlbD1ub25lIFwKKy1kZXZpY2UgdmlydGlvLTlwLXBjaSxmc2Rldj1teWlkLG1vdW50
X3RhZz10ZXN0LGRpc2FibGUtbW9kZXJuPW9uLGRpc2FibGUtbGVnYWN5PW9mZgorYGBgCisKKyMj
IFJ1bm5pbmcgbW9kZXMKK05leHQgc3RlcCBpcyB0byBwaWNrIGEgcnVubmluZyBtb2RlLiBXZSBj
dXJyZW50bHkgc3VwcG9ydCAzIHJ1bm5pbmcgbW9kZXM6CisKKzEuICoqUHl0aG9uIHNoZWxsKiou
IE5vIGV4dHJhIHBhcmFtZXRlcnMgYXJlIG5lZWRlZAorMi4gKipQeXRob24gc2NyaXB0KiouIFlv
dSBjYW4gdXNlIGFueSBmaWxlIGF2YWlsYWJsZSBpbiB0aGUgcm9vdCBmaWxlc3lzdGVtLiBZb3Ug
c2hvdWxkIHVzZSBRZW11J3MgYC1hcHBlbmRgIG9wdGlvbiB0byBwYXNzIHBhcmFtZXRlciB0byBQ
eXRob24gaW50ZXJwcmV0ZXIsIGUuZy4gYC1hcHBlbmQgIi1mIDxzb21lIGZpbGUgaW4gcm9vdGZz
PiJgCiszLiAqKlB5dGhvbiB1bml0IHRlc3RpbmcqKi4gV2l0aCB0aGlzIG1vZGUgeW91IGNhbiBj
aGVjayB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29tcGxldGVseSBzdXBwb3J0ZWQgYnkgdGhlIFB5
dGhvbiAzIHBvcnQuIFRoZSB1bml0IHRlc3RpbmcgbW9kZSBpdHNlbGYgZG9lcyBzdXBwb3J0IHNl
dmVyYWwgbW9kZXM6CisgICAgKiAqKlJ1bm5pbmcgYWxsIHRoZSB0ZXN0cyoqLiBZb3UgaGF2ZSB0
byB1c2UgdGhlIGZvbGxvd2luZyBRZW11IHBhcmFtZXRlcnM6IGAtYXBwZW5kICItQiAtYyAnZnJv
bSB0ZXN0IGltcG9ydCBhdXRvdGVzdCciYAorICAgICogQ2hlY2sgdGhlIHN1cHBvcnRlZCBvcHRp
b25zIG9mIHRoZSB0ZXN0IHNjcmlwdCwgZS5nLiBgLWFwcGVuZCAiLUIgLWMgJ2Zyb20gdGVzdCBp
bXBvcnQgYXV0b3Rlc3QnIC1oYC4KKyAgICAgICAqIEZvciBleGFtcGxlLCB5b3UgY2FuIHJ1biBv
bmx5IG9uZSB1bml0IHRlc3Qgd2l0aCB2ZXJib3NpdHkgdXNpbmcgYC1hcHBlbmQgIi1CIC1jICdm
cm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0JyAtdiB0ZXN0X2RpY3QiYC4KKyAgICAgICAqIE9yIHlv
dSBjYW4gcnVuIG9ubHkgdGhlIHRlc3RzIGxpc3RlZCBpbiBhIGZpbGUgdXNpbmcgYC1hcHBlbmQg
Ii1CIC1jICdmcm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0JyAtZiA8ZmlsZSBpbiByb290ZnM+ImAu
CisKKyMjIEZ1cnRoZXIgaW5mb3JtYXRpb24KIFBsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5t
ZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCiBzdWJkaXJlY3Rv
cnkgb2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KLS0gCjIuMjAuMQoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:48:37 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:48:37 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCKxR-0004ks-RW; Mon, 23 Sep 2019 09:48:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCKxR-0004kj-AR
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:48:37 +0000
X-Inumbo-ID: 2e0d800c-dde7-11e9-a337-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id 2e0d800c-dde7-11e9-a337-bc764e2007e4;
 Mon, 23 Sep 2019 09:47:39 +0000 (UTC)
IronPort-SDR: ITPkvGBEg+akgKi3Vv4P29fToYsC50617jmP3vxdPgX/ookVEtwaQucSHb06LLH7iUXQdNh2oR
 wpsG/hhAi/1w==
IronPort-PHdr: =?us-ascii?q?9a23=3AlK4VjBbXv0vUFSZ7UfbDkiT/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZrs+5bnLW6fgltlLVR4KTs6sC17ON9fqwEjVQqdbZ6TZeKcYKD0?=
 =?us-ascii?q?dEwewt3CUYSPafDkP6KPO4JwcbJ+9lEGFfwnegLEJOE9z/bVCB6le77DoVBw?=
 =?us-ascii?q?mtfVEtfre9FYHdldm42P6v8JPPfQpImCC9YbRvJxmqsAndrMYbjZZsJ6or1B?=
 =?us-ascii?q?fEoXREd/lVyGh1IV6fgwvw6t2/8ZJ+7Shcoe4t+9JFXa7nY6k2ULtUASg8PW?=
 =?us-ascii?q?so/sPrrx7DTQWO5nsYTGoblwdDDhbG4h/nQJr/qzP2ueVh1iaUO832Vq00Vi?=
 =?us-ascii?q?+576h3Uh/oiTwIOCA//WrKl8F/lqNboBampxxi347ZZZyeOfRicq/Be94RWG?=
 =?us-ascii?q?xMVdtTWSNcGIOxd4sBAfQcM+hWrIfzoFkBrRWlCAWwGO/i0CNEi2Xq0aEm1e?=
 =?us-ascii?q?kqDAHI3BYnH9ILqHnZstL1NLwOUeC0yqnD0DPNb+5O2Tfg9YPFdQwuofaXXb?=
 =?us-ascii?q?JscMrRz1MjFwfYjlWItIzoJC+a1v8Xv2iD8upvTviji3QgqwxopDWk28Qiip?=
 =?us-ascii?q?HRi44IxV3I6D91zYU1KNGiVkJ3f9ypHIFeui2CKod7Td4uT3trtSs60LEKp5?=
 =?us-ascii?q?C2cSYQxJg6yBPTdfqKeJWS7B35TuaeOzJ4iWpgeLK4mhm971Ctyvb5VsmoyF?=
 =?us-ascii?q?ZKqTdFksXUunANyRPT7s+HR+Nj/kekwzmP1gTT5vtYLkAvj6bbM4MhzaUqmp?=
 =?us-ascii?q?oJtkTPBi72mEPog6+Kbkgo5+el5/n9brjlppKQLZF4hh/8P6g0lMGzGeE4PR?=
 =?us-ascii?q?IPX2if9+S8zrrj/UjhTbpWif02ibXZsJHcJcgBoq65HhdV0ps45hmjFDeqys?=
 =?us-ascii?q?wYnWQcI15fYhKHiJDlO0vSL/DgEfe/n1OsnS9ux/DHOL3hA5LNLmPanLj8Y7?=
 =?us-ascii?q?l99VBTyA4owNBb5pJUEa0BIOnpVk7+qtPYCAU1Mwuuw+boEN99zJ8RWXqTAq?=
 =?us-ascii?q?+FN6PfqVGI6fwrI+mNfI8apizxK/g45/7vkXA5mEQQfa+30pQLbHC3BO9pL1?=
 =?us-ascii?q?+Hbnrxmt0BC3sFvhIiTOz2j12PSSBTZ3KoUK0h/j40EoSmAprZRo+zgbyNxj?=
 =?us-ascii?q?y0EYdLaWBBC1CMDGzld56YW/cRdS2eONVunSAfVbS7Vo8hzQqhuBXgy7pgfa?=
 =?us-ascii?q?Lo/XgdtJTi08Mw6+DNmBUa8T1vE9/bw2yLCWZukTAmXTgziYt4ulB8zB+nzL?=
 =?us-ascii?q?Bly6hTEsdP5vUPVhoiKLbX1KpiFtq0QAWXLYTBc0qvXtjzWWJ5ddk22dJbO0?=
 =?us-ascii?q?s=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BbAADWk4hdjAPjVY1lGwEBAQEDAQE?=
 =?us-ascii?q?BDAMBAQGBZ4F0gRdTIBIqjR6IH36aHwkBAQEpEQECAQGEPwKDNzgTAgMJAQE?=
 =?us-ascii?q?FAQEBAQEFBAETAQEBJoVdDII6IoJvAwMaAV4QIB8SVxmCV0sBgg6sX4VMgzJ?=
 =?us-ascii?q?Jf4E0hzCGMT+BEYJdc4oFIgSVI4EflkoHgiVlBIYchRSIZSeDKJV9o1eFMTg?=
 =?us-ascii?q?ggVkzGnOCbAlHEBSBVwIBDgmBBAEHNIRliAA9AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2BbAADWk4hdjAPjVY1lGwEBAQEDAQEBDAMBAQGBZ4F0g?=
 =?us-ascii?q?RdTIBIqjR6IH36aHwkBAQEpEQECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAETA?=
 =?us-ascii?q?QEBJoVdDII6IoJvAwMaAV4QIB8SVxmCV0sBgg6sX4VMgzJJf4E0hzCGMT+BE?=
 =?us-ascii?q?YJdc4oFIgSVI4EflkoHgiVlBIYchRSIZSeDKJV9o1eFMTgggVkzGnOCbAlHE?=
 =?us-ascii?q?BSBVwIBDgmBBAEHNIRliAA9AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854257"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:47:27 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 21D2D1A602F2;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id eFUaR9BJL5_I; Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 0678A1A602EE;
 Mon, 23 Sep 2019 12:47:27 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id rQH2bjttjfiR; Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id C4F5F1A602EF;
 Mon, 23 Sep 2019 12:47:26 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:47:04 +0300
Message-Id: <20190923094714.21759-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
References: <20190923094714.21759-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v2 03/13] pyconfig.h:
 Introduce file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKcHljb25maWcuaCBpcyBnZW5lcmF0ZWQgd2hlbiBydW5uaW5nIC4vY29uZmlndXJlIGFu
ZCBpdCBjb250YWlucyB0aGUgZmVhdHVyZXMKdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBidWls
ZCBtYWNoaW5lLiBUaGlzIGlzIGNvcGllZCBmcm9tIGEgbG9jYWwgYnVpbGQuCgpTaWduZWQtb2Zm
LWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIu
cm8+ClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0t
LQogaW5jbHVkZS9weWNvbmZpZy5oIHwgMTU4NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDE1ODcgaW5zZXJ0aW9ucygrKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvcHljb25maWcuaAoKZGlmZiAtLWdpdCBhL2luY2x1ZGUv
cHljb25maWcuaCBiL2luY2x1ZGUvcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xZTRlZjhhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9weWNvbmZpZy5o
CkBAIC0wLDAgKzEsMTU4NyBAQAorLyogcHljb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIHB5Y29u
ZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qIHB5Y29uZmlnLmguaW4uICBHZW5lcmF0ZWQg
ZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKworI2lmbmRlZiBQeV9QWUNP
TkZJR19ICisjZGVmaW5lIFB5X1BZQ09ORklHX0gKKworCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcg
dW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisvKiAjdW5kZWYgQUNfQVBQTEVf
VU5JVkVSU0FMX0JVSUxEICovCisKKy8qIERlZmluZSBmb3IgQUlYIGlmIHlvdXIgY29tcGlsZXIg
aXMgYSBnZW51aW5lIElCTSB4bEMveGxDX3IgYW5kIHlvdSB3YW50CisgICBzdXBwb3J0IGZvciBB
SVggQysrIHNoYXJlZCBleHRlbnNpb24gbW9kdWxlcy4gKi8KKy8qICN1bmRlZiBBSVhfR0VOVUlO
RV9DUExVU1BMVVMgKi8KKworLyogVGhlIEFuZHJvaWQgQVBJIGxldmVsLiAqLworLyogI3VuZGVm
IEFORFJPSURfQVBJX0xFVkVMICovCisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJp
dCBJRUVFIDc1NCBiaW5hcnkgZm9ybWF0LCBzdG9yZWQgaW4gQVJNCisgICBtaXhlZC1lbmRpYW4g
b3JkZXIgKGJ5dGUgb3JkZXIgNDU2NzAxMjMpICovCisvKiAjdW5kZWYgRE9VQkxFX0lTX0FSTV9N
SVhFRF9FTkRJQU5fSUVFRTc1NCAqLworCisvKiBEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1i
aXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25p
ZmljYW50IGJ5dGUgZmlyc3QgKi8KKy8qICN1bmRlZiBET1VCTEVfSVNfQklHX0VORElBTl9JRUVF
NzU0ICovCisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJpdCBJRUVFIDc1NCBiaW5h
cnkgZm9ybWF0LCBzdG9yZWQgd2l0aCB0aGUKKyAgIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmly
c3QgKi8KKyNkZWZpbmUgRE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NCAxCisKKy8qIERl
ZmluZSBpZiAtLWVuYWJsZS1pcHY2IGlzIHNwZWNpZmllZCAqLworI2RlZmluZSBFTkFCTEVfSVBW
NiAxCisKKy8qIERlZmluZSBpZiBmbG9jayBuZWVkcyB0byBiZSBsaW5rZWQgd2l0aCBic2QgbGli
cmFyeS4gKi8KKy8qICN1bmRlZiBGTE9DS19ORUVEU19MSUJCU0QgKi8KKworLyogRGVmaW5lIGlm
IGdldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBnZXRwZ3JwKDApLiAqLworLyogI3VuZGVmIEdF
VFBHUlBfSEFWRV9BUkcgKi8KKworLyogRGVmaW5lIGlmIGdldHRpbWVvZmRheSgpIGRvZXMgbm90
IGhhdmUgc2Vjb25kICh0aW1lem9uZSkgYXJndW1lbnQgVGhpcyBpcworICAgdGhlIGNhc2Ugb24g
TW90b3JvbGEgVjQgKFI0MFY0LjIpICovCisvKiAjdW5kZWYgR0VUVElNRU9GREFZX05PX1RaICov
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWNjZXB0NCcgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfQUNDRVBUNCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgYWNvc2gnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FDT1NIIDEKKworLyogc3RydWN0
IGFkZHJpbmZvIChuZXRkYi5oKSAqLworI2RlZmluZSBIQVZFX0FERFJJTkZPIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfQUxBUk0gMQorCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVp
cmVkICovCisvKiAjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVEICovCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX0FMTE9DQV9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgeW91ciB0aW1lLmggZGVmaW5lcyBh
bHR6b25lLiAqLworLyogI3VuZGVmIEhBVkVfQUxUWk9ORSAqLworCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGFzaW5oJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BU0lOSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNtL3R5cGVzLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX0FTTV9UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQVRBTkggMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Ymx1ZXRvb3RoL2JsdWV0b290aC5oPiBo
ZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0JMVUVUT09USF9CTFVFVE9PVEhfSCAqLwor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJsdWV0b290aC5oPiBoZWFkZXIgZmls
ZS4gKi8KKy8qICN1bmRlZiBIQVZFX0JMVUVUT09USF9IICovCisKKy8qIERlZmluZSBpZiBtYnN0
b3djcyhOVUxMLCAidGV4dCIsIDApIGRvZXMgbm90IHJldHVybiB0aGUgbnVtYmVyIG9mIHdpZGUK
KyAgIGNoYXJzIHRoYXQgd291bGQgYmUgY29udmVydGVkLiAqLworLyogI3VuZGVmIEhBVkVfQlJP
S0VOX01CU1RPV0NTICovCisKKy8qIERlZmluZSBpZiBuaWNlKCkgcmV0dXJucyBzdWNjZXNzL2Zh
aWx1cmUgaW5zdGVhZCBvZiB0aGUgbmV3IHByaW9yaXR5LiAqLworLyogI3VuZGVmIEhBVkVfQlJP
S0VOX05JQ0UgKi8KKworLyogRGVmaW5lIGlmIHRoZSBzeXN0ZW0gcmVwb3J0cyBhbiBpbnZhbGlk
IFBJUEVfQlVGIHZhbHVlLiAqLworLyogI3VuZGVmIEhBVkVfQlJPS0VOX1BJUEVfQlVGICovCisK
Ky8qIERlZmluZSBpZiBwb2xsKCkgc2V0cyBlcnJubyBvbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRv
cnMuICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fUE9MTCAqLworCisvKiBEZWZpbmUgaWYgdGhl
IFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW0gKi8KKy8qICN1bmRl
ZiBIQVZFX0JST0tFTl9QT1NJWF9TRU1BUEhPUkVTICovCisKKy8qIERlZmluZSBpZiBwdGhyZWFk
X3NpZ21hc2soKSBkb2VzIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtLiAqLworLyogI3VuZGVmIEhB
VkVfQlJPS0VOX1BUSFJFQURfU0lHTUFTSyAqLworCisvKiBkZWZpbmUgdG8gMSBpZiB5b3VyIHNl
bV9nZXR2YWx1ZSBpcyBicm9rZW4uICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZB
TFVFICovCisKKy8qIERlZmluZSBpZiBgdW5zZXRlbnZgIGRvZXMgbm90IHJldHVybiBhbiBpbnQu
ICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fVU5TRVRFTlYgKi8KKworLyogSGFzIGJ1aWx0aW4g
YXRvbWljcyAqLworI2RlZmluZSBIQVZFX0JVSUxUSU5fQVRPTUlDIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlICdjaGZsYWdzJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZF
X0NIRkxBR1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaG93bicgZnVu
Y3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0hPV04gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdjaHJvb3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NIUk9PVCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2snIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX0NMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9ja19nZXRy
ZXMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NMT0NLX0dFVFJFUyAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgY2xvY2tfc2V0dGltZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0xPQ0tfU0VUVElN
RSAxCisKKy8qIERlZmluZSBpZiB0aGUgQyBjb21waWxlciBzdXBwb3J0cyBjb21wdXRlZCBnb3Rv
cy4gKi8KKyNkZWZpbmUgSEFWRV9DT01QVVRFRF9HT1RPUyAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgY29uZnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ09ORlNU
UiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y29uaW8uaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9DT05JT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgY29weXNpZ24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NPUFlTSUdO
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdC5oPiBoZWFkZXIgZmls
ZS4gKi8KKyNkZWZpbmUgSEFWRV9DUllQVF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSBjcnlwdF9yKCkgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ1JZUFRfUiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3Rlcm1pZCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfQ1RFUk1JRCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2N0ZXJtaWRfcicg
ZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DVEVSTUlEX1IgKi8KKworLyogRGVmaW5lIGlm
IHlvdSBoYXZlIHRoZSAnZmlsdGVyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNf
RklMVEVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjdXJzZXMuaD4gaGVh
ZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQ1VSU0VTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91
IGhhdmUgdGhlICdoYXNfa2V5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfSEFT
X0tFWSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ltbWVkb2snIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX0NVUlNFU19JTU1FRE9LIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZl
IHRoZSAnaXNfcGFkJyBmdW5jdGlvbiBvciBtYWNyby4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNf
SVNfUEFEIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaXNfdGVybV9yZXNpemVkJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfSVNfVEVSTV9SRVNJWkVEIDEKKworLyog
RGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXpldGVybScgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdy
ZXNpemVfdGVybScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ1VSU0VTX1JFU0laRV9URVJN
IDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc3luY29rJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9DVVJTRVNfU1lOQ09LIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAn
dHlwZWFoZWFkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfVFlQRUFIRUFEIDEK
KworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndXNlX2VudicgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfQ1VSU0VTX1VTRV9FTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3
Y2hnYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NVUlNFU19XQ0hHQVQgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGlzZmluaXRlJywgYW5k
IHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0lTRklOSVRFIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBpc2luZics
IGFuZCB0byAwIGlmIHlvdSBkb24ndC4KKyAgICovCisjZGVmaW5lIEhBVkVfREVDTF9JU0lORiAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgaXNuYW4n
LCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCisgICAqLworI2RlZmluZSBIQVZFX0RFQ0xfSVNOQU4g
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERf
REVFUEJJTkQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RF
Q0xfUlRMRF9ERUVQQklORCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNs
YXJhdGlvbiBvZiBgUlRMRF9HTE9CQUwnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLwor
I2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9HTE9CQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTEFaWScsIGFuZCB0byAwIGlmIHlvdQorICAg
ZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9SVExEX0xBWlkgMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTE9DQUwnLCBhbmQgdG8gMCBp
ZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9MT0NBTCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9NRU1CRVIn
LCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9N
RU1CRVIgMAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2Yg
YFJUTERfTk9ERUxFVEUnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBI
QVZFX0RFQ0xfUlRMRF9OT0RFTEVURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9OT0xPQUQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0
LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9OT0xPQUQgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTk9XJywgYW5kIHRvIDAgaWYgeW91
CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1JUTERfTk9XIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB0em5hbWUnLCBhbmQgdG8gMCBp
ZiB5b3UgZG9uJ3QuCisgICAqLworLyogI3VuZGVmIEhBVkVfREVDTF9UWk5BTUUgKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRldmljZSBtYWNyb3MuICovCisjZGVmaW5lIEhB
VkVfREVWSUNFX01BQ1JPUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAvZGV2
L3B0YyBkZXZpY2UgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0RFVl9QVEMgKi8KKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIC9kZXYvcHRteCBkZXZpY2UgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9ERVZfUFRNWCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGly
ZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfRElSRUNUX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgdGhlIGRpcmVudCBzdHJ1Y3R1cmUgaGFzIGEgZF90eXBlIGZpZWxkICov
CisjZGVmaW5lIEhBVkVfRElSRU5UX0RfVFlQRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAg
ICovCisjZGVmaW5lIEhBVkVfRElSRU5UX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhl
ICdkaXJmZCcgZnVuY3Rpb24gb3IgbWFjcm8uICovCisjZGVmaW5lIEhBVkVfRElSRkQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwor
I2RlZmluZSBIQVZFX0RMRkNOX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGRsb3BlbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRExPUEVOIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9E
VVAyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAzJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9EVVAzIDEKKworLyogRGVmaW5lZCB3aGVuIGFueSBkeW5hbWljIG1v
ZHVsZSBsb2FkaW5nIGlzIGVuYWJsZWQuICovCisjZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FESU5H
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlbmRpYW4uaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdlcG9sbCcgZnVuY3Rpb25zLiAqLworI2RlZmluZSBIQVZFX0VQT0xMIDEKKworLyogRGVm
aW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGxfY3JlYXRlMScgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfRVBPTExfQ1JFQVRFMSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZXJmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FUkYgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGVyZmMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0VSRkMgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAq
LworI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGV4ZWN2JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FWEVDViAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhwbTEnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0VYUE0xIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmYWNjZXNzYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZBQ0NFU1NBVCAxCisKKy8qIERlZmluZSBpZiB5b3Ug
aGF2ZSB0aGUgJ2ZjaGRpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNIRElSIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2htb2QnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0ZDSE1PRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNo
bW9kYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDSE1PREFUIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2hvd24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0ZDSE9XTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNob3duYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDSE9XTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05U
TF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZmRhdGFzeW5jJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9GREFUQVNZTkMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGZkb3BlbmRpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkRPUEVORElSIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZXhlY3ZlJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GRVhFQ1ZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBmaW5pdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZJTklURSAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmxvY2snIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0ZMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9GT1JLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBmb3JrcHR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GT1JLUFRZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcGF0aGNvbmYnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0ZQQVRIQ09ORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZnNlZWs2NCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GU0VFSzY0ICovCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnNlZWtvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9GU0VFS08gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZzdGF0YXQn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZTVEFUQVQgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGZzdGF0dmZzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GU1RB
VFZGUyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZzeW5jJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GU1lOQyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZnRlbGw2NCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GVEVMTDY0ICovCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRlbGxvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9GVEVMTE8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ0aW1lJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgZnRydW5jYXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVFJVTkNB
VEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1dGltZW5zJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9GVVRJTUVOUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgZnV0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRlVUSU1FUyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnV0aW1lc2F0JyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GVVRJTUVTQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGdhaV9zdHJlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0FJX1NUUkVSUk9S
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnYW1tYScgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfR0FNTUEgMQorCisvKiBEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5s
aW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCBtYzY4ODgxIGZwY3IgKi8KKy8qICN1bmRlZiBI
QVZFX0dDQ19BU01fRk9SX01DNjg4ODEgKi8KKworLyogRGVmaW5lIGlmIHdlIGNhbiB1c2UgeDY0
IGdjYyBpbmxpbmUgYXNzZW1ibGVyICovCisjZGVmaW5lIEhBVkVfR0NDX0FTTV9GT1JfWDY0IDEK
KworLyogRGVmaW5lIGlmIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFu
ZCBzZXQgeDg3IGNvbnRyb2wgd29yZAorICAgKi8KKyNkZWZpbmUgSEFWRV9HQ0NfQVNNX0ZPUl9Y
ODcgMQorCisvKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBwcm92aWRlcyBfX3VpbnQxMjhfdCAq
LworI2RlZmluZSBIQVZFX0dDQ19VSU5UMTI4X1QgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlIGdldGFkZHJpbmZvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEK
KworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQo
KSwgYW5kIGZ1bmxvY2tmaWxlKCkgKi8KKyNkZWZpbmUgSEFWRV9HRVRDX1VOTE9DS0VEIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRlbnRyb3B5JyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9HRVRFTlRST1BZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBnZXRncm91cGxpc3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEdST1VQTElT
VCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Z3JvdXBzJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRHUk9VUFMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYGdldGhvc3RieW5hbWUnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfR0VU
SE9TVEJZTkFNRSAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBzb21lIHZlcnNpb24g
b2YgZ2V0aG9zdGJ5bmFtZV9yKCkgKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMQor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgMy1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX0FSRyAqLwor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNS1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81X0FSRyAqLwor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNi1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNl9BUkcgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGl0aW1lcicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfR0VUSVRJTUVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRsb2FkYXZnJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRMT0FEQVZHIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRsb2dpbicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfR0VUTE9HSU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGdldG5hbWVpbmZvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisK
Ky8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2dldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0cGVlcm5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBFRVJOQU1FIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwZ2lkJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9HRVRQR0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRwZ3JwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQR1JQIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX0dFVFBJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHJpb3Jp
dHknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBSSU9SSVRZIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwd2VudCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfR0VUUFdFTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0cmFuZG9tKCkgZnVuY3Rp
b24gaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEhBVkVfR0VUUkFORE9NIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgYXZhaWxhYmxlICovCisj
ZGVmaW5lIEhBVkVfR0VUUkFORE9NX1NZU0NBTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYGdldHJlc2dpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUkVTR0lE
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRyZXN1aWQnIGZ1bmN0aW9u
LiAqLworI2RlZmluZSBIQVZFX0dFVFJFU1VJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgZ2V0c2lkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRTSUQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNwZW50JyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9HRVRTUEVOVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
Z2V0c3BuYW0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFNQTkFNIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0d2QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFdEIDEKKworLyogRGVmaW5l
IGlmIGdsaWJjIGhhcyBpbmNvcnJlY3QgX0ZPUlRJRllfU09VUkNFIHdyYXBwZXJzIGZvciBtZW1t
b3ZlIGFuZAorICAgYmNvcHkuICovCisvKiAjdW5kZWYgSEFWRV9HTElCQ19NRU1NT1ZFX0JVRyAq
LworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdycC5oPiBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9HUlBfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2hz
dHJlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSFNUUkVSUk9SIDEKKworLyogRGVm
aW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpICovCisjZGVmaW5lIEhBVkVfSFRPTEU2NCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaHlwb3QnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX0hZUE9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxp
ZWVlZnAuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9JRUVFRlBfSCAqLworCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfSUZfTkFNRUlOREVYIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSAnaW5ldF9hdG9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FUT04gMQorCisv
KiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbmV0X3B0b24nIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX0lORVRfUFRPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5p
dGdyb3VwcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU5JVEdST1VQUyAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9JT19IICovCisKKy8qIERl
ZmluZSBpZiBnY2MgaGFzIHRoZSBpcGEtcHVyZS1jb25zdCBidWcuICovCisvKiAjdW5kZWYgSEFW
RV9JUEFfUFVSRV9DT05TVF9CVUcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBraWxsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9LSUxMIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBraWxscGcnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0tJ
TExQRyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2txdWV1ZScgZnVuY3Rpb25zLiAq
LworLyogI3VuZGVmIEhBVkVfS1FVRVVFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8bGFuZ2luZm8uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTEFOR0lORk9f
SCAxCisKKy8qIERlZmluZWQgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCB3aGVuIGFuIG9m
Zl90IGlzIGJpZ2dlciB0aGFuIGEgbG9uZworICAgYW5kIGxvbmcgbG9uZyBpcyBhdmFpbGFibGUg
YW5kIGF0IGxlYXN0IGFzIGJpZyBhcyBhbiBvZmZfdC4gWW91IG1heSBuZWVkIHRvCisgICBhZGQg
c29tZSBmbGFncyBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29tcGlsYXRpb24gdG8gZW5hYmxlIHRo
aXMgbW9kZS4gKEZvcgorICAgU29sYXJpcyBhbmQgTGludXgsIHRoZSBuZWNlc3NhcnkgZGVmaW5l
cyBhcmUgYWxyZWFkeSBkZWZpbmVkLikgKi8KKy8qICN1bmRlZiBIQVZFX0xBUkdFRklMRV9TVVBQ
T1JUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAnbGNoZmxhZ3MnIGZ1bmN0
aW9uLiAqLworLyogI3VuZGVmIEhBVkVfTENIRkxBR1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBsY2htb2QnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfTENITU9E
ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGNob3duJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9MQ0hPV04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGxnYW1tYScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTEdBTU1BIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCisjZGVmaW5l
IEhBVkVfTElCREwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsZCcgbGli
cmFyeSAoLWxkbGQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCRExEICovCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgaWVlZScgbGlicmFyeSAoLWxpZWVlKS4gKi8KKy8qICN1bmRl
ZiBIQVZFX0xJQklFRUUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJp
bnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJQklOVExfSCAxCisKKy8qIERl
ZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVhZGxpbmUgbGlicmFyeSAoLWxyZWFkbGluZSkuICovCisv
KiAjdW5kZWYgSEFWRV9MSUJSRUFETElORSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHJlc29sdicgbGlicmFyeSAoLWxyZXNvbHYpLiAqLworLyogI3VuZGVmIEhBVkVfTElC
UkVTT0xWICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VuZGZpbGUnIGxp
YnJhcnkgKC1sc2VuZGZpbGUpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU0VOREZJTEUgKi8KKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJ1dGlsLmg+IGhlYWRlciBmaWxlLiAq
LworLyogI3VuZGVmIEhBVkVfTElCVVRJTF9IICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0
aGUgJ2xpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xJTksgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpbmthdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
TElOS0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9jYW4vYmNt
Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9CQ01fSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuLmg+IGhlYWRlciBmaWxlLiAq
LworI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9IIDEKKworLyogRGVmaW5lIGlmIGNvbXBpbGluZyB1
c2luZyBMaW51eCAzLjYgb3IgbGF0ZXIuICovCisjZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19G
RF9GUkFNRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi9y
YXcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19IIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5rLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX05FVExJTktfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8bGludXgvcmFuZG9tLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmlu
ZSBIQVZFX0xJTlVYX1JBTkRPTV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxsaW51eC90aXBjLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX1RJUENf
SCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvdm1fc29ja2V0cy5o
PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0ggMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2tmJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9MT0NLRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMXAn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xPRzFQIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBsb2cyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MT0cyIDEKKwor
LyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBkb3VibGUuICovCisjZGVm
aW5lIEhBVkVfTE9OR19ET1VCTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGxzdGF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MU1RBVCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgbHV0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
TFVUSU1FUyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBtYWtlZGV2IG1hY3Jv
LiAqLworI2RlZmluZSBIQVZFX01BS0VERVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYG1icnRvd2MnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01CUlRPV0MgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8K
KyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgbWVtcmNocicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTUVNUkNIUiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtkaXJhdCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfTUtESVJBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtmaWZv
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS0ZJRk8gMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYG1rZmlmb2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS0ZJ
Rk9BVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtub2QnIGZ1bmN0aW9u
LiAqLworI2RlZmluZSBIQVZFX01LTk9EIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBta25vZGF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS05PREFUIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta3RpbWUnIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX01LVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcg
ZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTU1BUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgbXJlbWFwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfTkNVUlNFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxuZGlyLmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4gKi8KKy8q
ICN1bmRlZiBIQVZFX05ESVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PG5ldHBhY2tldC9wYWNrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUUEFD
S0VUX1BBQ0tFVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYu
aD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5pY2UnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX05J
Q0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW5hdCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfT1BFTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBvcGVucHR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOUFRZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwYXRoY29uZicgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfUEFUSENPTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBh
dXNlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QQVVTRSAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BJUEUy
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwbG9jaycgZnVuY3Rpb24uICov
CisvKiAjdW5kZWYgSEFWRV9QTE9DSyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHBvbGwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BPTEwgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWR2
aXNlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9GQURWSVNFIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWxsb2NhdGUnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX1BPU0lYX0ZBTExPQ0FURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgcG9zaXhfc3Bhd24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BPU0lYX1NQ
QVdOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfUFJFQUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHByZWFkdicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFJFQURWIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZHYyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9QUkVBRFYyIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVu
Y3Rpb25zLiAqLworI2RlZmluZSBIQVZFX1BSTElNSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9Q
Uk9DRVNTX0ggKi8KKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rp
b24gcHJvdG90eXBlICovCisjZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxCisKKy8qIERlZmluZWQg
Zm9yIFNvbGFyaXMgMi42IGJ1ZyBpbiBwdGhyZWFkIGhlYWRlci4gKi8KKy8qICN1bmRlZiBIQVZF
X1BUSFJFQURfREVTVFJVQ1RPUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFRIUkVB
RF9HRVRDUFVDTE9DS0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdGhy
ZWFkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHRocmVhZF9pbml0JyBmdW5jdGlvbi4gKi8KKy8q
ICN1bmRlZiBIQVZFX1BUSFJFQURfSU5JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHB0aHJlYWRfa2lsbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFRIUkVBRF9L
SUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkX3NpZ21hc2sn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfU0lHTUFTSyAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX1BUWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXRlbnYnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BVVEVOViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgcHdyaXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QV1JJVEUgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB3cml0ZXYnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX1BXUklURVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHB3cml0ZXYyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QV1JJVEVWMiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGxpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX1JFQURMSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFk
bGlua2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUFETElOS0FUIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkdicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfUkVBRFYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWxwYXRoJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUFMUEFUSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFTkFN
RUFUIDEKKworLyogRGVmaW5lIGlmIHJlYWRsaW5lIHN1cHBvcnRzIGFwcGVuZF9oaXN0b3J5ICov
CisvKiAjdW5kZWYgSEFWRV9STF9BUFBFTkRfSElTVE9SWSAqLworCisvKiBEZWZpbmUgaWYgeW91
IGNhbiB0dXJuIG9mZiByZWFkbGluZSdzIHNpZ25hbCBoYW5kbGluZy4gKi8KKy8qICN1bmRlZiBI
QVZFX1JMX0NBVENIX1NJR05BTCAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUg
Mi4yICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX0FQUEVORF9DSEFSQUNURVIgKi8K
KworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHJlYWRsaW5lIDQuMCAqLworLyogI3VuZGVmIEhBVkVf
UkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSyAqLworCisvKiBEZWZpbmUgaWYgeW91
IGhhdmUgcmVhZGxpbmUgNC4yICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX01BVENI
RVMgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHJsX2NvbXBsZXRpb25fc3VwcHJlc3NfYXBw
ZW5kICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX1NVUFBSRVNTX0FQUEVORCAqLwor
CisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4wICovCisvKiAjdW5kZWYgSEFWRV9S
TF9QUkVfSU5QVVRfSE9PSyAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4w
ICovCisvKiAjdW5kZWYgSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwgKi8KKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGByb3VuZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUk9V
TkQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX2dldF9wcmlvcml0
eV9tYXgnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0dFVF9QUklPUklUWV9NQVgg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNjaGVkLmg+IGhlYWRlciBmaWxl
LiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNjaGVkX3JyX2dldF9pbnRlcnZhbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0NIRURfUlJfR0VUX0lOVEVSVkFMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBzY2hlZF9zZXRhZmZpbml0eScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0NIRURfU0VU
QUZGSU5JVFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHBh
cmFtJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TQ0hFRF9TRVRQQVJBTSAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2NoZWRfc2V0c2NoZWR1bGVyJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHNlbV9nZXR2YWx1ZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0VNX0dFVFZBTFVFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW1fb3Bl
bicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VNX09QRU4gMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHNlbV90aW1lZHdhaXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX1NFTV9USU1FRFdBSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
bV91bmxpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTV9VTkxJTksgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbmRmaWxlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TRU5ERklMRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0
ZWdpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VURUdJRCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZXVpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0VURVVJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0Z2lkJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRHSUQgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdzZXRncm91cHMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVEdST1VQUyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0aG9zdG5hbWUnIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX1NFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBzZXRpdGltZXInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVElUSU1FUiAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNldHBnaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFBHSUQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHBncnAnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NFVFBHUlAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
dHByaW9yaXR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRQUklPUklUWSAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NFVFJFR0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBz
ZXRyZXNnaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFJFU0dJRCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TRVRSRVNVSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
dHJldWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRSRVVJRCAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0c2lkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFW
RV9TRVRTSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHVpZCcgZnVu
Y3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUVUlEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBzZXR2YnVmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaGFkb3cuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU0hBRE9XX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdhbHRzdGFjaycgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfU0lHQUxUU1RBQ0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgc2lf
YmFuZCcgaXMgYSBtZW1iZXIgb2YgYHNpZ2luZm9fdCcuICovCisjZGVmaW5lIEhBVkVfU0lHSU5G
T19UX1NJX0JBTkQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2ludGVy
cnVwdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm
aW5lIEhBVkVfU0lHTkFMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNp
Z3BlbmRpbmcnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NJR1BFTkRJTkcgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3JlbHNlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TSUdSRUxTRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2ln
dGltZWR3YWl0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdUSU1FRFdBSVQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3dhaXQnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NJR1dBSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNp
Z3dhaXRpbmZvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdXQUlUSU5GTyAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NOUFJJTlRGIDEKKworLyogc3RydWN0IHNvY2thZGRyX2FsZyAobGludXgvaWZf
YWxnLmgpICovCisjZGVmaW5lIEhBVkVfU09DS0FERFJfQUxHIDEKKworLyogRGVmaW5lIGlmIHNv
Y2thZGRyIGhhcyBzYV9sZW4gbWVtYmVyICovCisvKiAjdW5kZWYgSEFWRV9TT0NLQUREUl9TQV9M
RU4gKi8KKworLyogc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKHN5cy9zb2NrZXQuaCkgKi8KKyNk
ZWZpbmUgSEFWRV9TT0NLQUREUl9TVE9SQUdFIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSAnc29ja2V0cGFpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU09DS0VUUEFJUiAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Bhd24uaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1BBV05fSCAxCisKKy8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHBy
b3ZpZGVzIHNzaXplX3QgKi8KKyNkZWZpbmUgSEFWRV9TU0laRV9UIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0dmZzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9T
VEFUVkZTIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHN0cnVjdCBzdGF0LnN0X210aW0udHZf
bnNlYyAqLworI2RlZmluZSBIQVZFX1NUQVRfVFZfTlNFQyAxCisKKy8qIERlZmluZSBpZiB5b3Ug
aGF2ZSBzdHJ1Y3Qgc3RhdC5zdF9tdGltZW5zZWMgKi8KKy8qICN1bmRlZiBIQVZFX1NUQVRfVFZf
TlNFQzIgKi8KKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgdmFyaWFibGUg
bGVuZ3RoIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGUuZy4KKyAgIHZvaWQgZnByaW50ZihGSUxFICos
IGNoYXIgKiwgLi4uKTspICphbmQqIDxzdGRhcmcuaD4gKi8KKyNkZWZpbmUgSEFWRV9TVERBUkdf
UFJPVE9UWVBFUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfU1RETElCX0ggMQorCisvKiBIYXMgc3RkYXRvbWljLmggd2l0aCBhdG9taWNfaW50ICovCisj
ZGVmaW5lIEhBVkVfU1REX0FUT01JQyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmZ0aW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9TVFJGVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5n
cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3Ry
bGNweScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJMQ1BZICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Ryb3B0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVFJPUFRTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgcHdfZ2Vjb3MnIGlzIGEg
bWVtYmVyIG9mIGBzdHJ1Y3QgcGFzc3dkJy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUEFTU1dE
X1BXX0dFQ09TIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHB3X3Bhc3N3ZCcgaXMgYSBtZW1iZXIg
b2YgYHN0cnVjdCBwYXNzd2QnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9QQVNTV0RfUFdfUEFT
U1dEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHN0X2JpcnRodGltZScgaXMgYSBtZW1iZXIgb2Yg
YHN0cnVjdCBzdGF0Jy4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElN
RSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RfYmxrc2l6ZScgaXMgYSBtZW1iZXIgb2YgYHN0
cnVjdCBzdGF0Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgYHN0X2Jsb2NrcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0
Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiBgc3RfZmxhZ3MnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCisvKiAj
dW5kZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9GTEFHUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBg
c3RfZ2VuJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworLyogI3VuZGVmIEhBVkVf
U1RSVUNUX1NUQVRfU1RfR0VOICovCisKKy8qIERlZmluZSB0byAxIGlmIGBzdF9yZGV2JyBpcyBh
IG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NU
X1JERVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdG1fem9uZScgaXMgYSBtZW1iZXIgb2YgYHN0
cnVjdCB0bScuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUgMQorCisvKiBEZWZp
bmUgaWYgeW91IGhhdmUgdGhlICdzeW1saW5rJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9T
WU1MSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW1saW5rYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NZTUxJTktBVCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgc3luYycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1lOQyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3lzY29uZicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfU1lTQ09ORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3lzZXhpdHMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTRVhJVFNfSCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2F1ZGlvaW8uaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfQVVESU9JT19IICovCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL2JzZHR0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRl
ZiBIQVZFX1NZU19CU0RUVFlfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHN5cy9kZXZwb2xsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0RFVlBP
TExfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9kaXIuaD4gaGVh
ZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgorICAgKi8KKy8qICN1bmRlZiBIQVZFX1NZ
U19ESVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lbmRpYW4u
aD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfRU5ESUFOX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZXBvbGwuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1lTX0VQT0xMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy9ldmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19F
VkVOVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4g
aGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmlu
ZSBIQVZFX1NZU19JT0NUTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
eXMva2Vybl9jb250cm9sLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0tF
Uk5fQ09OVFJPTF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2xv
YWRhdmcuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTE9BREFWR19IICov
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2xvY2suaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTE9DS19IICovCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL21rZGV2Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhB
VkVfU1lTX01LREVWX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv
bW9kZW0uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTU9ERU1fSCAqLwor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9uZGlyLmg+IGhlYWRlciBmaWxl
LCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAgICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTkRJUl9I
ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRl
ciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmFu
ZG9tLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19SQU5ET01fSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxl
LiAqLworI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZF
X1NZU19TRUxFQ1RfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Nl
bmRmaWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TRU5ERklMRV9IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL3N0YXR2ZnMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfU1lTX1NUQVRWRlNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lz
L3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N5c2NhbGwuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1lTX1NZU0NBTExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8c3lzL3N5c21hY3Jvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfU1lTTUFDUk9TX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5
cy9zeXNfZG9tYWluLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1NZU19E
T01BSU5fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90ZXJtaW8u
aD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfVEVSTUlPX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1F
X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfVUlPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5o
PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVU5fSCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm
aW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3hhdHRyLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19YQVRUUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGB0Y2dldHBncnAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RDR0VU
UEdSUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGNzZXRwZ3JwJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9UQ1NFVFBHUlAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgYHRlbXBuYW0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RFTVBOQU0g
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDx0ZXJtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RFUk1fSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGdhbW1hJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9UR0FNTUEgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHRpbWVnbScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVElNRUdNIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
VElNRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRtcGZpbGUnIGZ1bmN0
aW9uLiAqLworI2RlZmluZSBIQVZFX1RNUEZJTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHRtcG5hbScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVE1QTkFNIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0bXBuYW1fcicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfVE1QTkFNX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIGBzdHJ1Y3Qg
dG0nIGhhcyBgdG1fem9uZScuIERlcHJlY2F0ZWQsIHVzZQorICAgYEhBVkVfU1RSVUNUX1RNX1RN
X1pPTkUnIGluc3RlYWQuICovCisjZGVmaW5lIEhBVkVfVE1fWk9ORSAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X1RSVU5DQVRFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGRvbid0IGhhdmUgYHRtX3pvbmUn
IGJ1dCBkbyBoYXZlIHRoZSBleHRlcm5hbCBhcnJheQorICAgYHR6bmFtZScuICovCisvKiAjdW5k
ZWYgSEFWRV9UWk5BTUUgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGNsIGFuZCBU
Q0xfVVRGX01BWD09NiAqLworLyogI3VuZGVmIEhBVkVfVUNTNF9UQ0wgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
VU5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgdW5saW5rYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOTElO
S0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bnNldGVudicgZnVuY3Rp
b24uICovCisjZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
YSB1c2VhYmxlIHdjaGFyX3QgdHlwZSBkZWZpbmVkIGluIHdjaGFyLmg7IHVzZWFibGUgbWVhbnMK
KyAgIHdjaGFyX3QgbXVzdCBiZSBhbiB1bnNpZ25lZCB0eXBlIHdpdGggYXQgbGVhc3QgMTYgYml0
cy4gKHNlZQorICAgSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgpLiAqLworLyogI3VuZGVmIEhBVkVf
VVNBQkxFX1dDSEFSX1QgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dGls
Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVRJTF9IICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRpbWVuc2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9VVElNRU5TQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1l
cycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVVRJTUVTIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9V
VElNRV9IIDEKKworLyogRGVmaW5lIGlmIHV1aWRfY3JlYXRlKCkgZXhpc3RzLiAqLworLyogI3Vu
ZGVmIEhBVkVfVVVJRF9DUkVBVEUgKi8KKworLyogRGVmaW5lIGlmIHV1aWRfZW5jX2JlKCkgZXhp
c3RzLiAqLworLyogI3VuZGVmIEhBVkVfVVVJRF9FTkNfQkUgKi8KKworLyogRGVmaW5lIGlmIHV1
aWRfZ2VuZXJhdGVfdGltZV9zYWZlKCkgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1VVSURfR0VO
RVJBVEVfVElNRV9TQUZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dWlk
Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVVJRF9IICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXVpZC91dWlkLmg+IGhlYWRlciBmaWxlLiAqLworI2Rl
ZmluZSBIQVZFX1VVSURfVVVJRF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGB3YWl0MycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV0FJVDMgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdhaXQ0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9X
QUlUNCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdGlkJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9XQUlUSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHdhaXRwaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dBSVRQSUQgMQorCisv
KiBEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIGEgd2NoYXIuaCBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGB3Y3Njb2xsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XQ1NDT0xMIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3NmdGltZScgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfV0NTRlRJTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdj
c3hmcm0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dDU1hGUk0gMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdtZW1jbXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X1dNRU1DTVAgMQorCisvKiBEZWZpbmUgaWYgdHpzZXQoKSBhY3R1YWxseSBzd2l0Y2hlcyB0aGUg
bG9jYWwgdGltZXpvbmUgaW4gYSBtZWFuaW5nZnVsIHdheS4KKyAgICovCisjZGVmaW5lIEhBVkVf
V09SS0lOR19UWlNFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd3JpdGV2
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XUklURVYgMQorCisvKiBEZWZpbmUgaWYgbGli
c3NsIGhhcyBYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3QgYW5kIHJlbGF0ZWQgZnVuY3Rpb24g
Ki8KKyNkZWZpbmUgSEFWRV9YNTA5X1ZFUklGWV9QQVJBTV9TRVQxX0hPU1QgMQorCisvKiBEZWZp
bmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHkgKi8KKyNkZWZpbmUgSEFWRV9a
TElCX0NPUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nZXRwdHknIGZ1
bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfX0dFVFBUWSAqLworCisvKiBEZWZpbmUgaWYgbG9n
MXAoLTAuKSBpcyAwLiByYXRoZXIgdGhhbiAtMC4gKi8KKy8qICN1bmRlZiBMT0cxUF9EUk9QU19a
RVJPX1NJR04gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYG1ham9yJywgYG1pbm9yJywgYW5kIGBt
YWtlZGV2JyBhcmUgZGVjbGFyZWQgaW4gPG1rZGV2Lmg+LgorICAgKi8KKy8qICN1bmRlZiBNQUpP
Ul9JTl9NS0RFViAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgbWFqb3InLCBgbWlub3InLCBhbmQg
YG1ha2VkZXYnIGFyZSBkZWNsYXJlZCBpbgorICAgPHN5c21hY3Jvcy5oPi4gKi8KKyNkZWZpbmUg
TUFKT1JfSU5fU1lTTUFDUk9TIDEKKworLyogRGVmaW5lIGlmIG12d2RlbGNoIGluIGN1cnNlcy5o
IGlzIGFuIGV4cHJlc3Npb24uICovCisjZGVmaW5lIE1WV0RFTENIX0lTX0VYUFJFU1NJT04gMQor
CisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFj
a2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKy8qICN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVCAqLwor
CisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisvKiAjdW5k
ZWYgUEFDS0FHRV9OQU1FICovCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJz
aW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qICN1bmRlZiBQQUNLQUdFX1NUUklORyAqLworCisv
KiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICov
CisvKiAjdW5kZWYgUEFDS0FHRV9UQVJOQU1FICovCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBw
YWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisvKiAjdW5kZWYgUEFDS0FHRV9VUkwgKi8KKworLyog
RGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qICN1bmRlZiBQQUNL
QUdFX1ZFUlNJT04gKi8KKworLyogRGVmaW5lIGlmIFBPU0lYIHNlbWFwaG9yZXMgYXJlbid0IGVu
YWJsZWQgb24geW91ciBzeXN0ZW0gKi8KKy8qICN1bmRlZiBQT1NJWF9TRU1BUEhPUkVTX05PVF9F
TkFCTEVEICovCisKKy8qIERlZmluZSBpZiBwdGhyZWFkX2tleV90IGlzIGNvbXBhdGlibGUgd2l0
aCBpbnQuICovCisjZGVmaW5lIFBUSFJFQURfS0VZX1RfSVNfQ09NUEFUSUJMRV9XSVRIX0lOVCAx
CisKKy8qIERlZmluZWQgaWYgUFRIUkVBRF9TQ09QRV9TWVNURU0gc3VwcG9ydGVkLiAqLworI2Rl
ZmluZSBQVEhSRUFEX1NZU1RFTV9TQ0hFRF9TVVBQT1JURUQgMQorCisvKiBEZWZpbmUgYXMgdGhl
IHByZWZlcnJlZCBzaXplIGluIGJpdHMgb2YgbG9uZyBkaWdpdHMgKi8KKy8qICN1bmRlZiBQWUxP
TkdfQklUU19JTl9ESUdJVCAqLworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gY29lcmNlIHRo
ZSBDIGxvY2FsZSB0byBhIFVURi04IGJhc2VkIGxvY2FsZSAqLworI2RlZmluZSBQWV9DT0VSQ0Vf
Q19MT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gcHJpbnRmIGZvcm1hdCBtb2RpZmllciBmb3IgUHlf
c3NpemVfdCAqLworI2RlZmluZSBQWV9GT1JNQVRfU0laRV9UICJ6IgorCisvKiBEZWZhdWx0IGNp
cGhlciBzdWl0ZXMgbGlzdCBmb3Igc3NsIG1vZHVsZS4gMTogUHl0aG9uJ3MgcHJlZmVycmVkIHNl
bGVjdGlvbiwKKyAgIDI6IGxlYXZlIE9wZW5TU0wgZGVmYXVsdHMgdW50b3VjaGVkLCAwOiBjdXN0
b20gc3RyaW5nICovCisjZGVmaW5lIFBZX1NTTF9ERUZBVUxUX0NJUEhFUlMgMQorCisvKiBDaXBo
ZXIgc3VpdGUgc3RyaW5nIGZvciBQWV9TU0xfREVGQVVMVF9DSVBIRVJTPTAgKi8KKy8qICN1bmRl
ZiBQWV9TU0xfREVGQVVMVF9DSVBIRVJfU1RSSU5HICovCisKKy8qIERlZmluZSBpZiB5b3Ugd2Fu
dCB0byBidWlsZCBhbiBpbnRlcnByZXRlciB3aXRoIG1hbnkgcnVuLXRpbWUgY2hlY2tzLiAqLwor
LyogI3VuZGVmIFB5X0RFQlVHICovCisKKy8qIERlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFz
IGEgc2hhcmVkIGxpYnJhcnkuICovCisvKiAjdW5kZWYgUHlfRU5BQkxFX1NIQVJFRCAqLworCisv
KiBEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcuIFNp
cEhhc2gyNDogMSwgRk5WOiAyLAorICAgZXh0ZXJuYWxseSBkZWZpbmVkOiAwICovCisvKiAjdW5k
ZWYgUHlfSEFTSF9BTEdPUklUSE0gKi8KKworLyogYXNzdW1lIEM4OSBzZW1hbnRpY3MgdGhhdCBS
RVRTSUdUWVBFIGlzIGFsd2F5cyB2b2lkICovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisv
KiBEZWZpbmUgaWYgc2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIHNldHBncnAoMCwgMCkuICov
CisvKiAjdW5kZWYgU0VUUEdSUF9IQVZFX0FSRyAqLworCisvKiBEZWZpbmUgaWYgaT4+aiBmb3Ig
c2lnbmVkIGludCBpIGRvZXMgbm90IGV4dGVuZCB0aGUgc2lnbiBiaXQgd2hlbiBpIDwgMCAqLwor
LyogI3VuZGVmIFNJR05FRF9SSUdIVF9TSElGVF9aRVJPX0ZJTExTICovCisKKy8qIFRoZSBzaXpl
IG9mIGBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9E
T1VCTEUgOAorCisvKiBUaGUgc2l6ZSBvZiBgZmxvYXQnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9GTE9BVCA0CisKKy8qIFRoZSBzaXplIG9mIGBmcG9zX3QnLCBh
cyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9GUE9TX1QgMTYKKworLyog
VGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0la
RU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9m
LiAqLworI2RlZmluZSBTSVpFT0ZfTE9ORyA4CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGRvdWJs
ZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxF
IDE2CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorCisvKiBUaGUgc2l6ZSBvZiBgb2ZmX3Qn
LCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9PRkZfVCA4CisKKy8q
IFRoZSBzaXplIG9mIGBwaWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUg
U0laRU9GX1BJRF9UIDQKKworLyogVGhlIHNpemUgb2YgYHB0aHJlYWRfa2V5X3QnLCBhcyBjb21w
dXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX0tFWV9UIDQKKworLyog
VGhlIHNpemUgb2YgYHB0aHJlYWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZp
bmUgU0laRU9GX1BUSFJFQURfVCA4CisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1
dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NIT1JUIDIKKworLyogVGhlIHNpemUg
b2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NJ
WkVfVCA4CisKKy8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9USU1FX1QgOAorCisvKiBUaGUgc2l6ZSBvZiBgdWludHB0cl90
JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVUlOVFBUUl9UIDgK
KworLyogVGhlIHNpemUgb2YgYHZvaWQgKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNk
ZWZpbmUgU0laRU9GX1ZPSURfUCA4CisKKy8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29t
cHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCA0CisKKy8qIFRoZSBz
aXplIG9mIGBfQm9vbCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9G
X19CT09MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIg
ZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSBpZiB5b3UgY2Fu
IHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy9zZWxlY3QuaD4gYW5kIDxzeXMvdGltZS5oPgorICAg
KHdoaWNoIHlvdSBjYW4ndCBvbiBTQ08gT0RUIDMuMCkuICovCisjZGVmaW5lIFNZU19TRUxFQ1Rf
V0lUSF9TWVNfVElNRSAxCisKKy8qIERlZmluZSBpZiB0YW5oKC0wLikgaXMgLTAuLCBvciBpZiBw
bGF0Zm9ybSBkb2Vzbid0IGhhdmUgc2lnbmVkIHplcm9zICovCisjZGVmaW5lIFRBTkhfUFJFU0VS
VkVTX1pFUk9fU0lHTiAxCisKKy8qIExpYnJhcnkgbmVlZGVkIGJ5IHRpbWVtb2R1bGUuYzogbGli
cnQgbWF5IGJlIG5lZWRlZCBmb3IgY2xvY2tfZ2V0dGltZSgpICovCisvKiAjdW5kZWYgVElNRU1P
RFVMRV9MSUIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBi
b3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNf
VElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgPHN5cy90aW1lLmg+IGRlY2xhcmVzIGBz
dHJ1Y3QgdG0nLiAqLworLyogI3VuZGVmIFRNX0lOX1NZU19USU1FICovCisKKy8qIERlZmluZSBp
ZiB5b3Ugd2FudCB0byB1c2UgY29tcHV0ZWQgZ290b3MgaW4gY2V2YWwuYy4gKi8KKy8qICN1bmRl
ZiBVU0VfQ09NUFVURURfR09UT1MgKi8KKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMs
IEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyBkZWZpbmUgX0FMTF9TT1VSQ0Ug
MQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUg
dGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIGRlZmluZSBfR05VX1NPVVJDRSAxCisj
ZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNp
Zm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIGRlZmluZSBfUE9TSVhfUFRIUkVBRF9T
RU1BTlRJQ1MgMQorI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAg
Ki8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEKKyNl
bmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5k
ZWYgX19FWFRFTlNJT05TX18KKyMgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyNlbmRpZgorCisK
Ky8qIERlZmluZSBpZiBXSU5ET1cgaW4gY3Vyc2VzLmggb2ZmZXJzIGEgZmllbGQgX2ZsYWdzLiAq
LworI2RlZmluZSBXSU5ET1dfSEFTX0ZMQUdTIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGRv
Y3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLworI2RlZmluZSBXSVRI
X0RPQ19TVFJJTkdTIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgaW4gRFRy
YWNlIHN1cHBvcnQgKi8KKy8qICN1bmRlZiBXSVRIX0RUUkFDRSAqLworCisvKiBEZWZpbmUgaWYg
eW91IHdhbnQgdG8gdXNlIHRoZSBuZXctc3R5bGUgKE9wZW5zdGVwLCBSaGFwc29keSwgTWFjT1Mp
IGR5bmFtaWMKKyAgIGxpbmtlciAoZHlsZCkgaW5zdGVhZCBvZiB0aGUgb2xkLXN0eWxlIChOZXh0
U3RlcCkgZHluYW1pYyBsaW5rZXIgKHJsZCkuCisgICBEeWxkIGlzIG5lY2Vzc2FyeSB0byBzdXBw
b3J0IGZyYW1ld29ya3MuICovCisvKiAjdW5kZWYgV0lUSF9EWUxEICovCisKKy8qIERlZmluZSB0
byAxIGlmIGxpYmludGwgaXMgbmVlZGVkIGZvciBsb2NhbGUgZnVuY3Rpb25zLiAqLworLyogI3Vu
ZGVmIFdJVEhfTElCSU5UTCAqLworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gcHJvZHVjZSBh
biBPcGVuU3RlcC9SaGFwc29keSBmcmFtZXdvcmsgKHNoYXJlZAorICAgbGlicmFyeSBwbHVzIGFj
Y2Vzc29yeSBmaWxlcykuICovCisvKiAjdW5kZWYgV0lUSF9ORVhUX0ZSQU1FV09SSyAqLworCisv
KiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBpbiBQeXRob24tc3BlY2lmaWMgbWFsbG9j
cyAqLworI2RlZmluZSBXSVRIX1BZTUFMTE9DIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHB5
bWFsbG9jIHRvIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCAqLworLyog
I3VuZGVmIFdJVEhfVkFMR1JJTkQgKi8KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAx
IGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZp
Y2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4g
Ki8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9f
QklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNl
CisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAq
LworIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSBpZiBhcml0aG1ldGljIGlzIHN1YmplY3Qg
dG8geDg3LXN0eWxlIGRvdWJsZSByb3VuZGluZyBpc3N1ZSAqLworLyogI3VuZGVmIFg4N19ET1VC
TEVfUk9VTkRJTkcgKi8KKworLyogRGVmaW5lIG9uIE9wZW5CU0QgdG8gYWN0aXZhdGUgYWxsIGxp
YnJhcnkgZmVhdHVyZXMgKi8KKy8qICN1bmRlZiBfQlNEX1NPVVJDRSAqLworCisvKiBEZWZpbmUg
b24gRGFyd2luIHRvIGFjdGl2YXRlIGFsbCBsaWJyYXJ5IGZlYXR1cmVzICovCisjZGVmaW5lIF9E
QVJXSU5fQ19TT1VSQ0UgMQorCisvKiBUaGlzIG11c3QgYmUgc2V0IHRvIDY0IG9uIHNvbWUgc3lz
dGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0LiAqLworI2RlZmluZSBfRklMRV9PRkZT
RVRfQklUUyA2NAorCisvKiBEZWZpbmUgb24gTGludXggdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkg
ZmVhdHVyZXMgKi8KKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorCisvKiBEZWZpbmUgdG8gaW5jbHVk
ZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MgKi8KKy8qICN1bmRlZiBfSU5DTFVERV9fU1REQ19BMV9T
T1VSQ0UgKi8KKworLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gc29tZSBzeXN0ZW1zIHRvIGVu
YWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQuICovCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEK
KworLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gQUlYIHN5c3RlbXMgdG8gZW5hYmxlIGxhcmdl
IGZpbGUgc3VwcG9ydC4gKi8KKy8qICN1bmRlZiBfTEFSR0VfRklMRVMgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgb24gTUlOSVguICovCisvKiAjdW5kZWYgX01JTklYICovCisKKy8qIERlZmluZSBv
biBOZXRCU0QgdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkgZmVhdHVyZXMgKi8KKyNkZWZpbmUgX05F
VEJTRF9TT1VSQ0UgMQorCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHBy
b3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLwor
LyogI3VuZGVmIF9QT1NJWF8xX1NPVVJDRSAqLworCisvKiBEZWZpbmUgdG8gYWN0aXZhdGUgZmVh
dHVyZXMgZnJvbSBJRUVFIFN0ZHMgMTAwMy4xLTIwMDggKi8KKyNkZWZpbmUgX1BPU0lYX0NfU09V
UkNFIDIwMDgwOUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9y
IGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisvKiAjdW5kZWYgX1BPU0lYX1NP
VVJDRSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcywgYW5kIHlvdXIg
c3lzdGVtIGRvZXMgbm90IGRlZmluZSB0aGF0LiAqLworLyogI3VuZGVmIF9QT1NJWF9USFJFQURT
ICovCisKKy8qIGZyYW1ld29yayBuYW1lICovCisjZGVmaW5lIF9QWVRIT05GUkFNRVdPUksgIiIK
KworLyogRGVmaW5lIHRvIGZvcmNlIHVzZSBvZiB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywg
YW5kIG90aGVyIGZ1bmN0aW9ucyAqLworLyogI3VuZGVmIF9SRUVOVFJBTlQgKi8KKworLyogRGVm
aW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cyAqLwor
I2RlZmluZSBfWE9QRU5fU09VUkNFIDcwMAorCisvKiBEZWZpbmUgdG8gYWN0aXZhdGUgVW5peDk1
LWFuZC1lYXJsaWVyIGZlYXR1cmVzICovCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQg
MQorCisvKiBEZWZpbmUgb24gRnJlZUJTRCB0byBhY3RpdmF0ZSBhbGwgbGlicmFyeSBmZWF0dXJl
cyAqLworI2RlZmluZSBfX0JTRF9WSVNJQkxFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdHlwZSBg
Y2hhcicgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCisjaWZuZGVm
IF9fQ0hBUl9VTlNJR05FRF9fCisvKiAjIHVuZGVmIF9fQ0hBUl9VTlNJR05FRF9fICovCisjZW5k
aWYKKworLyogRGVmaW5lIHRvICdsb25nJyBpZiA8dGltZS5oPiBkb2Vzbid0IGRlZmluZS4gKi8K
Ky8qICN1bmRlZiBjbG9ja190ICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRv
ZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIERl
ZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3Vu
ZGVmIGdpZF90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMg
bm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBtb2RlX3QgKi8KKworLyogRGVmaW5lIHRvIGBsb25n
IGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgb2Zm
X3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVm
aW5lLiAqLworLyogI3VuZGVmIHBpZF90ICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiB0aGUg
a2V5d29yZCBkb2VzIG5vdCB3b3JrLiAqLworLyogI3VuZGVmIHNpZ25lZCAqLworCisvKiBEZWZp
bmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICov
CisvKiAjdW5kZWYgc2l6ZV90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3NvY2tl
dC5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc29ja2xlbl90ICovCisKKy8qIERl
ZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3Vu
ZGVmIHVpZF90ICovCisKKworLyogRGVmaW5lIHRoZSBtYWNyb3MgbmVlZGVkIGlmIG9uIGEgVW5p
eFdhcmUgNy54IHN5c3RlbS4gKi8KKyNpZiBkZWZpbmVkKF9fVVNMQ19fKSAmJiBkZWZpbmVkKF9f
U0NPX1ZFUlNJT05fXykKKyNkZWZpbmUgU1RSSUNUX1NZU1ZfQ1VSU0VTIC8qIERvbid0IHVzZSBu
Y3Vyc2VzIGV4dGVuc2lvbnMgKi8KKyNlbmRpZgorCisjZW5kaWYgLypQeV9QWUNPTkZJR19IKi8K
KwotLSAKMi4yMC4xCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7W-0005nJ-A0; Mon, 23 Sep 2019 09:59:02 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7U-0005nE-Il
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:00 +0000
X-Inumbo-ID: c335a05a-dde8-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id c335a05a-dde8-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 09:58:59 +0000 (UTC)
IronPort-SDR: 65Xtp7NlB3CqBGdaLt0nwNQQwE+c1IELDJauEorWVMX/em9G6QO3VZi6goQm/UBhiMhl78EK3J
 USz8lVIiTnEQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AVNqp/Ra3Gny38lXSaQ0ewdj/LSx+4OfEezUN45?=
 =?us-ascii?q?9isYplN5qZrs6zbnLW6fgltlLVR4KTs6sC17ON9fqwEjZYqdbZ6TZeKcYKD0?=
 =?us-ascii?q?dEwewt3CUYSPafDkP6KPO4JwcbJ+9lEGFfwnegLEJOE9z/bVCB6le77DoVBw?=
 =?us-ascii?q?mtfVEtfre9FYHdldm42P6v8JPPfQpImCC9YbRvJxmqsAndrMYbjZZsJ6or1B?=
 =?us-ascii?q?fEoXREd/pKyWh1IV6fgwvw6t2/8ZJ+7Shcoe4t+9JFXa7nY6k2ULtUASg8PW?=
 =?us-ascii?q?so/sPrrx7DTQWO5nsYTGoblwdDDhbG4h/nQJr/qzP2ueVh1iaUO832Vq00Vi?=
 =?us-ascii?q?+576h3Uh/oiTwIOCA//WrKl8F/lqNboBampxxi347ZZZyeOfRicq/Be94RWG?=
 =?us-ascii?q?xMVdtTWSNcGIOxd4sBAfQcM+hWrIfzoEADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsoTav3t8hhp?=
 =?us-ascii?q?TGi44I0FzJ9iV0zJwrKdGmSkN3e9CpHINNuyyVKod6WMAvTmFytCokxLALt4?=
 =?us-ascii?q?S3cDUFxZg5wRPUduaJfJKS4h35UeacOTJ4hHV4d72hnxuy6k2gyvHkVsmzzV?=
 =?us-ascii?q?ZKsjJJktnSuXAJ0Bze8taHSv5n8Ueg3TaDzRzc6vpeLUAsiKrUMIQtwqQ3lp?=
 =?us-ascii?q?YLsETDGDH5mFnugaOLeUgo5/Kk5ufnb7n8uJOQKY15hhvwP6g2n8ywG+U4Mg?=
 =?us-ascii?q?wAX2iB/uS80aXu8lH+QLVRkv02k6/ZvIreJcQGvq65HhRY3Zo46xqlFzemzc?=
 =?us-ascii?q?8XkWMdLFJCYB6HlZTmO0nSIPDkCveym1GskDZtx/DHOb3hGYzBIWXdn7f/Y7?=
 =?us-ascii?q?l971VRyA4yzdBE+5JUEasNIf3tVU/3rtDYCQU5MwOsyeb9FNp9zp8eWX6IAq?=
 =?us-ascii?q?KBPqPdr1uI5uM3I+aSfoMVuCv9K/k56P7vlnI5n0EScrWt3ZQNc3+0BOppI1?=
 =?us-ascii?q?iBa3r2ntgBCXsKvhY5TOHyll2CVSRcaGuqUK0m4DE0FZimApnCRoy3m7OOxj?=
 =?us-ascii?q?q0HppXZmBbEV2MCmvod5iZVPsWci2dPtRhniYZVbi5UIAtzwuutAipg4Zge+?=
 =?us-ascii?q?/V/Cwfrtfv2cZ448XXlAou7npkAsLb1HuCHE9umWZdbDgtwKF56Whg0krLha?=
 =?us-ascii?q?N/mOBZE5pX+utUegwhc4bBxapgDIahCUr6Yt6VRQP+EZ2dCjYrQ4dpzg=3D?=
 =?us-ascii?q?=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2COAQAwlohdjAPjVY1lHQEBBQEMBQG?=
 =?us-ascii?q?BZ4MLUyASKo0eiR2aHwkBAQEpEQECAQGEP4M5OBMCAwkBAQUBAQEBAQUEARM?=
 =?us-ascii?q?BAQEmhV0Mgjoig2MLT4QkAYIOrHKFTIMygUiBNIcwhjE/gRGCXYYEhRYElkK?=
 =?us-ascii?q?WSgeCJWUEhhyFFIhlJ4I2cpV9j1aZMjgggVkzGnOCbAlHEBSBIwE2DgmHV4N?=
 =?us-ascii?q?yglw9AQExgQYBAY1lAQE?=
X-IPAS-Result: =?us-ascii?q?A2COAQAwlohdjAPjVY1lHQEBBQEMBQGBZ4MLUyASKo0ei?=
 =?us-ascii?q?R2aHwkBAQEpEQECAQGEP4M5OBMCAwkBAQUBAQEBAQUEARMBAQEmhV0Mgjoig?=
 =?us-ascii?q?2MLT4QkAYIOrHKFTIMygUiBNIcwhjE/gRGCXYYEhRYElkKWSgeCJWUEhhyFF?=
 =?us-ascii?q?IhlJ4I2cpV9j1aZMjgggVkzGnOCbAlHEBSBIwE2DgmHV4Nyglw9AQExgQYBA?=
 =?us-ascii?q?Y1lAQE?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854318"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 4AC041A602F6;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 7QSrl2omb-CK; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 2E1131A602EE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id y22wq8wY58LK; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 0D8651A602E4;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:38 +0300
Message-Id: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 00/14] Port Python 3 on
 Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgYXJlIHRoZSBwYXRjaGVzIG5lZWRlZCBmb3IgcG9ydGluZyBQeXRob24gMyBvbiBVbmlr
cmFmdC4gVG8gcHV0IGl0CnNpbXBsZSwgdGhlIHN1bW1hcnkgd291bGQgc291bmQgbGlrZSB0aGlz
OgotIFRoZSBmaXJzdCAzIHBhdGNoZXMgYXJlIHF1aXRlIGNvbW1vbi4KLSBUaGUgbmV4dCA1IGFk
ZCBhbmQgY3VzdG9taXplIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmVlZGVkIGJ5IHRoZSBQeXRob24K
ICBpbnRlcnByZXRlci4gVGhlc2UgZmlsZXMgYXJlIGNoYW5nZWQgaW4gb3JkZXIgdG8gcnVuIG9u
IFVuaWtyYWZ0LgotIFRoZSBuZXh0IDIgYWRkIGEgYml0IG1vcmUgZ2x1ZSBjb2RlLgotIFRoZSBu
ZXh0IHBhdGNoIGFkZHMgYSBtYWtlIHRhcmdldCBmb3IgY3JlYXRpbmcgUHl0aG9uIGVudmlyb25t
ZW50cyB3aGljaCB3aWxsCiAgYmUgbmVlZGVkIGZvciB0ZXN0aW5nLgotIFRoZSBsYXN0IG9uZSBh
ZGRzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgcnVubmluZyB0aGUgbWFpbigpIGZ1bmN0
aW9uCiAgZnJvbSB0aGUgZXh0ZXJuYWwgbGlicmFyeSwgd2hpY2ggd291bGQgc2ltcGxpZnkgdGhl
IGNyZWF0aW9uIG9mIGFuIGFwcC4KCkJlc2lkZXMgbW91bnRpbmcgdGhlIGZpbGVzeXN0ZW0sIGFs
bCB0aGUgb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHNlbnQgb24KdGhlIG1haWxpbmcg
bGlzdC4KCkNoYW5nZXMgc2luY2UgdjI6Ci0gQnJpbmcgYmFjayBwYXRjaCAxCgpDaGFuZ2VzIHNp
bmNlIHYxOgotIFJlbW92ZSBleHBvcnRzeW1zLnVrCi0gU3BsaXQgaW50byAyIGxpYnMsIGNvcmUg
YW5kIGV4dGVuc2lvbnMsIGJlY2F1c2UgdGhleSBhcmUgdXNpbmcgZGlmZmVyZW50IGNvbXBpbGlu
ZyBmbGFncwotIEVuYWJsZSBtb3JlIGV4dGVuc2lvbnM6IFNTTCwgVVVJRCwgemxpYiwgZGVjaW1h
bCBvcGVyYXRpb25zIHdpdGggbGlibXBkZWMsIFhNTCBwYXJzaW5nIHdpdGggRXhwYXQKCkNvc3Rp
biBMdXB1ICgzKToKICBNYWtlZmlsZS51azogQWRkIHJ1bGUgZm9yIGNyZWF0aW5nIHJvb3QgZmls
ZXN5c3RlbQogIFByb3ZpZGUgbWFpbigpIGZ1bmN0aW9uIGlmIGNvbmZpZ3VyZWQgdG8gZG8gc28K
ICBDb25maWcudWs6IEFkZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGV4dGVuc2lvbnMKClZs
YWQtQW5kcmVpIEJhZG9pdSAoMTEpOgogIEludHJvZHVjZSBsaWJyYXJ5IHNrZWxldG9uCiAgQWRk
IE1ha2VmaWxlLnVrCiAgcGF0Y2hlczogRml4IGJ1aWxkIGlzc3VlcwogIHB5Y29uZmlnLmg6IElu
dHJvZHVjZSBmaWxlCiAgcHljb25maWcuaDogRGlzYWJsZSBmZWF0dXJlcyB0aGF0IGFyZSBub3Qg
YXZhaWFibGUgb24gVW5pa3JhZnQKICBfc3lzY29uZmlnZGF0YS5weTogSW50cm9kdWNlIGZpbGUK
ICBfc3lzY29uZmlnZGF0YS5weTogRGlzYWJsZSBmZWF0dXJlcyB0aGF0IGFyZSBub3QgYXZhaWFi
bGUgb24gVW5pa3JhZnQKICBBZGQgbW9kdWxlc19jb25maWcuYwogIEFkZCBzdHVicy5jIGZvciBz
dHViYmVkIGZ1bmN0aW9ucwogIEFkZCBpbml0LmMgZm9yIGluaXRpYWxpemF0aW9uCiAgUkVBRE1F
Lm1kOiBVcGRhdGUgd2l0aCBpbmZvIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nCgogLmdpdGln
bm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNyArCiBDT0RJTkdf
U1RZTEUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsKIENPTlRSSUJV
VElORy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKwogQ09QWUlORy5t
ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArCiBDb25maWcudWsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDc3ICsKIE1BSU5UQUlORVJT
Lm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKwogTWFrZWZpbGUudWsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ4OCArKysrKwogUkVBRE1FLm1k
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0MyArCiBfc3lzY29uZmln
ZGF0YS5weSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNzA3ICsrKysrKysrCiBpbmNs
dWRlL3B5Y29uZmlnLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNTg5ICsrKysrKysr
KysrKysrKysrCiBpbml0LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDQ2ICsKIG1haW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDggKwogbW9kdWxlc19jb25maWcuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDMyOCArKysrCiAuLi4xLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVDVkUucGF0Y2gg
fCAgIDI2ICsKIHBhdGNoZXMvMDAwMi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBhdGNoICAgICB8
ICAgMzAgKwogc3R1YnMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICA0NSArCiAxNiBmaWxlcyBjaGFuZ2VkLCAzNDczIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCiBj
cmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09Q
WUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0
IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBSRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBfc3lzY29uZmlnZGF0YS5w
eQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvcHljb25maWcuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IGluaXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IG1haW4uYwogY3JlYXRlIG1vZGUgMTAwNjQ0
IG1vZHVsZXNfY29uZmlnLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDEtVW5kZWZp
bmUtSEFWRV9GT1JLLWFuZC1IQVZFX0VYRUNWRS5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBh
dGNoZXMvMDAwMi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2
NDQgc3R1YnMuYwoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:05 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:05 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7Z-0005nk-BY; Mon, 23 Sep 2019 09:59:05 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7X-0005nc-Uw
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:03 +0000
X-Inumbo-ID: c3d7090e-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c3d7090e-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:00 +0000 (UTC)
IronPort-SDR: F9TqNBS9GFsjT4OVbZ2jgc0sCXIF0eRjBZoUvFnllOrSgzh0uyM53oQmO2YmKxshrnpLsUsivk
 +ANaUxvZ7uxA==
IronPort-PHdr: =?us-ascii?q?9a23=3AIrh9VBzyDOJp2c3XCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2ukVIJqq85mqBkHD//Il1AaPAdyAragUwLCO++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMn4dvKak9xg?=
 =?us-ascii?q?XVrnBVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y6XQds4YS2?=
 =?us-ascii?q?VcRMZcTyxPDJ2hYYUBDOQPOuRXr4fmqlcSsRezHxWgCfnzxjNUgHL9wK000/?=
 =?us-ascii?q?4mEQHDxAEtAdUOsG/IrNX0MqcZTOa7zLTQzTXecvhb3ivy6I/TchA9oPGMW6?=
 =?us-ascii?q?h8cc7MyUk3CgPIlUmfqZf/MzONy+QCqHKX7/BnVe+2jWMstgJ/oiC3y8sxhY?=
 =?us-ascii?q?TFm5gZx1PE+Clj3oo5O9+1RFR1bNK8DZdduDyWO5F1T84iWW1kpig3x7MctZ?=
 =?us-ascii?q?KmcyUG1pIqzAPFZfOdaYiH+BfjWf6UITd/mX1qZqqyhw238Ui80u38UdS00E?=
 =?us-ascii?q?pSoipFjNbMsncN2gTN6siCUPR9/0Oh1SyT2ADI8O1EOV00mrHBJ547xb48jp?=
 =?us-ascii?q?sTsULdES/qgEj6kaCbelg+9uWr6+nreKvqqoGeOoNuhAzyKqEulda+AeQ8PA?=
 =?us-ascii?q?gORW+b+eGk2bL/+k35W6lKjvwwkqXDtJDaONwbprOiDgBJyYYv8Q6/Dyq939?=
 =?us-ascii?q?gCh3kHK0pJeAibgIjxJ1HOPPf4AO+6g1StljdrxvfGPqb4DprQMHfDjqnufb?=
 =?us-ascii?q?Jm5k5YyQoz1sxf54lOBrAOPv3zXFX9tNvCDh82Kwa02froCM1h1oMCXmKCGq?=
 =?us-ascii?q?GZP73WsV+J/uIgPfOAZI8IuDb8N/cl5uXjjXknllABeammx4AYZGqmEfR7O0?=
 =?us-ascii?q?+Ze2bjgs8dEWcWuQozVPLqiFmYXjFOf3m9RaQ86SwhCI24DIfPXJuij6ac0y?=
 =?us-ascii?q?e8H51We3tLCkuQEXf1aoqIQe0DZz6JIsN7jzwETaOuR5U71RGp50fGzO9iL+?=
 =?us-ascii?q?zV/TZduZ/92dxd4+zIiQp05TFyScOH3DKjVWZxy0gPXCM32uhbvFRgggOI1r?=
 =?us-ascii?q?NkgvoeEcFL+ttCSUEiKJSa1essWIO6YR7IYtrcEAXued6hGzxkFt8=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AOAAAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBUwcBAQsBgXOBF1MgEiqMPmCIH485iWkUgWcJAQEBJgMRAQIBAYFLgnQ?=
 =?us-ascii?q?Cgzc0CQ4CAwkBAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8CAQMBeBAgHxIoLxm?=
 =?us-ascii?q?CV0sBgg6scoVMgzKBSIE0AYcvgzuCdj+DboR8FIYKBIxxIIgSgR+WSgeCJWU?=
 =?us-ascii?q?EhhyIZkmESieCNi9DhlmEJYp/qQghN4FZMxpzgmwJRxAUgWiHYINyglw9AQE?=
 =?us-ascii?q?xAYEFAQGLEYJUAQE?=
X-IPAS-Result: =?us-ascii?q?A2AOAAAwlohdjAPjVY1lHAEBAQQBAQwEAQGBUwcBAQsBg?=
 =?us-ascii?q?XOBF1MgEiqMPmCIH485iWkUgWcJAQEBJgMRAQIBAYFLgnQCgzc0CQ4CAwkBA?=
 =?us-ascii?q?QUBAQEBAQUEARMBAQEmhV0Mgjoigm8CAQMBeBAgHxIoLxmCV0sBgg6scoVMg?=
 =?us-ascii?q?zKBSIE0AYcvgzuCdj+DboR8FIYKBIxxIIgSgR+WSgeCJWUEhhyIZkmESieCN?=
 =?us-ascii?q?i9DhlmEJYp/qQghN4FZMxpzgmwJRxAUgWiHYINyglw9AQExAYEFAQGLEYJUA?=
 =?us-ascii?q?QE?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854319"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 526131A602E8;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 0nIWPjyaM-zO; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 3A0C71A602F2;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 1H-4JPbmbmtv; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 1CD171A602E5;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:39 +0300
Message-Id: <20190923095852.21872-2-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 01/14] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKV2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGds
dWUgY29kZS4KClNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWku
YmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rp
bi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysr
KysrKysrKysrKysrKysKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5t
ZCB8ICA0ICsrKysKIENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogQ29uZmlnLnVrICAgICAgIHwgMjEgKysrKysrKysrKysrKysrKysr
KysrCiBNQUlOVEFJTkVSUy5tZCAgfCAxMiArKysrKysrKysrKysKIFJFQURNRS5tZCAgICAgICB8
ICA3ICsrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMTE0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBt
b2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1k
CiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQg
Q09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAw
NjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCgpkaWZmIC0t
Z2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNzVkMmZkMwotLS0gL2Rldi9udWxsCisrKyBiLy5naXRpZ25vcmUKQEAgLTAsMCAr
MSwyNyBAQAorKi5kZXBlbmQKKyoubworKi5hCisqLmQKKyouc28KKyoub3JpZworKi5yZWoKKyou
YmFrCisqLnN3cAorKn4KKywqCitcIypcIworLlwjKgorXCNfKlwjCisuXCNfKgorIS5naXRpZ25v
cmUKKy4qCisKKyMgZ251IGdsb2JhbCBmaWxlcworR1BBVEgKK0dSVEFHUworR1NZTVMKK0dUQUdT
CisKKyMgY3Njb3BlIGZpbGVzCitjc2NvcGUuKgorbmNzY29wZS4qCmRpZmYgLS1naXQgYS9DT0RJ
TkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZTEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNTczMDA0MQotLS0gL2Rldi9udWxsCisrKyBiL0NPRElOR19TVFlMRS5tZApAQCAt
MCwwICsxLDQgQEAKK0NvZGluZyBTdHlsZQorPT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0
byB0aGUgYENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0
b3J5LgpkaWZmIC0tZ2l0IGEvQ09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0ZjZhYzYKLS0tIC9kZXYvbnVsbAorKysg
Yi9DT05UUklCVVRJTkcubWQKQEAgLTAsMCArMSw0IEBACitDb250cmlidXRpbmcgdG8gVW5pa3Jh
ZnQKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05U
UklCVVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAt
LWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjk1M2U1NmQKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0wLDAg
KzEsMzkgQEAKK0xpY2Vuc2UKKz09PT09PT0KKworVW5pa3JhZnQgcHl0aG9uMyB3cmFwcGVycwor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHJlcG9zaXRvcnkgY29u
dGFpbnMgd3JhcHBlciBjb2RlIHRvIGJ1aWxkICRsaWJuYW1lIHdpdGggVW5pa3JhZnQuCitFYWNo
IEMgY29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBzaG91bGQgZGVjbGFyZSB3aG8gaXMgdGhl
Citjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25zIHRo
ZSBjb2RlIGlzCitsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0
aGUgZm9sbG93aW5nIGNvcHlyaWdodAorbm90aWNlIHdpbGwgYXBwbHk6CisKKwlDb3B5cmlnaHQg
KGMpIFllYXIsIEluc3RpdHV0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisJUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisJYXJlIG1ldDoKKworCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisJICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCTIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorCSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisJMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworCSAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisJICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorCUFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKwlJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorCUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKwlMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisJQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKwlTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKwlJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorCUNPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisJQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKKwlQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwpkaWZm
IC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmY4MDFhMGMKLS0tIC9kZXYvbnVsbAorKysgYi9Db25maWcudWsKQEAgLTAsMCAr
MSwyMSBAQAorbWVudWNvbmZpZyBMSUJQWVRIT04zCisJYm9vbCAiUHl0aG9uIDMiCisJZGVmYXVs
dCBuCisJc2VsZWN0IExJQk5PTElCQyBpZiAhSEFWRV9MSUJDCisJc2VsZWN0IExJQk5FV0xJQkNf
V0FOVF9JT19DOTlfRk9STUFUUyBpZiBMSUJORVdMSUJDCisJc2VsZWN0IExJQk5FV0xJQkNfTElO
VVhfRVJSTk9fRVhURU5TSU9OUyBpZiBMSUJORVdMSUJDCisJc2VsZWN0IExJQlVLREVCVUcKKwlz
ZWxlY3QgTElCVUtBTExPQworCXNlbGVjdCBMSUJVS1NDSEVECisJc2VsZWN0IFVLVU5JU1RECisJ
c2VsZWN0IFVLU1lTSU5GTworCXNlbGVjdCBQT1NJWF9MSUJETAorCXNlbGVjdCBMSUJTWVNDQUxM
X1NISU0KKwlzZWxlY3QgTElCVkZTQ09SRQorCXNlbGVjdCBMSUJQVEhSRUFEX0VNQkVEREVECisJ
c2VsZWN0IExJQkxXSVAKKwlzZWxlY3QgTFdJUF9ESENQCisJc2VsZWN0IExXSVBfSVBWNgorCitp
ZiBMSUJQWVRIT04zCitlbmRpZgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJ
TkVSUy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGIyZmIxCi0tLSAv
ZGV2L251bGwKKysrIGIvTUFJTlRBSU5FUlMubWQKQEAgLTAsMCArMSwxMiBAQAorTWFpbnRhaW5l
cnMgTGlzdAorPT09PT09PT09PT09PT09PQorCitGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhp
cyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4KK3RoZSBt
YWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCisKKwlMSUIkbGlibmFtZWNhcHMtVU5JS1JBRlQKKwlN
OglWbGFkIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KKwlNOglD
b3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgorCU06CUZlbGlwZSBIdWljaSA8ZmVs
aXBlLmh1aWNpQG5lY2xhYi5ldT4KKwlMOgltaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZworCUY6
ICoKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jOTU0NGQxCi0tLSAvZGV2L251bGwKKysrIGIvUkVBRE1FLm1kCkBA
IC0wLDAgKzEsNyBAQAorcHl0aG9uMyBmb3IgVW5pa3JhZnQKKz09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHBvcnQgb2YgcHl0aG9uMyBmb3IgVW5pa3JhZnQgYXMg
ZXh0ZXJuYWwgbGlicmFyeS4KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBhcyB3
ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2AKK3N1YmRpcmVjdG9yeSBvZiB0
aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5LgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7a-0005oA-D0; Mon, 23 Sep 2019 09:59:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7Z-0005nn-Ey
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:05 +0000
X-Inumbo-ID: c4218722-dde8-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id c4218722-dde8-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 09:59:00 +0000 (UTC)
IronPort-SDR: xCt9zLo4iYk0uCyF5kyQgwIMcrEJ3sTM6CWPbb/SAGF7ON2ldGNySja4A8JN08Xv+1f8co34Np
 m2tq/FCzfREQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AUU2CERxEzgIdMsrXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2ukVIJqq85mqBkHD//Il1AaPAdyAragUwLCO++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMn4dvKak9xg?=
 =?us-ascii?q?XVrnBVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y6XQds4YS2?=
 =?us-ascii?q?VcRMZcTyxPDJ2hYYUBDOQPOuRXr4fmqlcSsRezHxWgCfnzxjNUgHL9wK000/?=
 =?us-ascii?q?4mEQHDxAEtAdUOsG/IrNX0MqcZTOa7zLTQzTXecvhb3ivy6I/TchA9oPGMW6?=
 =?us-ascii?q?h8cc7MyUk3CgPIlUmfqZf/MzONy+QCqHKX7/BnVe+2jWMstgJ/oiC3y8sxhY?=
 =?us-ascii?q?TFm5gZx1PE+Clj3oo5O9+1RFR1bNK8DZdduDyWO5F1T84iWW1kpig3x7MctZ?=
 =?us-ascii?q?KmcyUG1pIqzAPFZfOdaYiH+BfjWf6UITd/mX1qZqqyhw238Ui80u38UdS00E?=
 =?us-ascii?q?pSoipFjNbMsncN2gTN6siCUPR9/0Oh1SyT2ADI8O1EOV00mrHBJ547xb48jp?=
 =?us-ascii?q?sTsULdES/qgEj6kaCbelg+9uWr6+nreKvqqoGeOoNuhAzyKqEulda+AeQ8PA?=
 =?us-ascii?q?gORW+b+eGk2bL/+k35W6lKjvwwkqXDtJDaONwbprOiDgBJyYYv8Q6/Dyq939?=
 =?us-ascii?q?gCh3kHK0pJeAibgIjxJ1HOPPf4AO+6g1StljdrxvfGPqb4DprQMHfDjqnufb?=
 =?us-ascii?q?Jm5k5YyQoz1sxf54lOBrAOPv3zXFX9tNvCDh82Kwa02froCM1h1oMCXmKCGq?=
 =?us-ascii?q?GZP73WsV+J/uIgPfOAZI8IuDb8N/cl5uXjjXknllABeammx4AYZGqmEfR7O0?=
 =?us-ascii?q?+Ze2bjgs8dEWcWuQozVPLqiFmYXjFOf3m9RaQ86SwhCI24DIfPXJuij6ac0y?=
 =?us-ascii?q?e8H51We3tLCkuQEXf1aoqIQe0DZz6JIsN7jzwETaOuR5U71RGp50fGzO9iL+?=
 =?us-ascii?q?zV/TZduZ/92dxd4+zIiQp05TFyScOH3DKjVWZxy0gPXCM32uhbvFRgggOI1r?=
 =?us-ascii?q?NkgvoeEcFL+ttCSUEiKJSa1essWIO6YR7IYtrcEAXued6hGzxkFt8=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AEAAAwlohdjAPjVY1lGwEBAQEDAQE?=
 =?us-ascii?q?BDAMBAQGBUwYBAQELAYNdIBIqjD5giB+ZIoF7CQEBAToBAgEBhD8Cgzc0CQ4?=
 =?us-ascii?q?CAwkBAQUBAQEBAQUEARMBAQEmhWmCOiKCbgEDA3kQHAMBAh0STwgZgyKCD6p?=
 =?us-ascii?q?NgiWFTIMygUiBNAGHL4YxP4RhhRGFFgSWQpZKB4IlZQSUFSeZJakIITeBWTM?=
 =?us-ascii?q?ag19QEBSBWg4JjiU9AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2AEAAAwlohdjAPjVY1lGwEBAQEDAQEBDAMBAQGBUwYBA?=
 =?us-ascii?q?QELAYNdIBIqjD5giB+ZIoF7CQEBAToBAgEBhD8Cgzc0CQ4CAwkBAQUBAQEBA?=
 =?us-ascii?q?QUEARMBAQEmhWmCOiKCbgEDA3kQHAMBAh0STwgZgyKCD6pNgiWFTIMygUiBN?=
 =?us-ascii?q?AGHL4YxP4RhhRGFFgSWQpZKB4IlZQSUFSeZJakIITeBWTMag19QEBSBWg4Jj?=
 =?us-ascii?q?iU9AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854320"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 611E21A602E8;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id EnmqXVnWEonU; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 48EA51A602E5;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id uohiuyWcPvNC; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 329591A602EF;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:41 +0300
Message-Id: <20190923095852.21872-4-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 03/14] patches: Fix build
 issues
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKKiBVbmRlZmluZSBIQVZFX0ZPUksgYW5kIEhBVkVfRVhFQ1YKKiBGaXggY2FzdCBmb3Ig
cHRocmVhZF90CgpTaWduZWQtb2ZmLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVp
LmJhZG9pdUBzdHVkLmFjcy51cGIucm8+Ci0tLQogLi4uMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5k
LUhBVkVfRVhFQ1ZFLnBhdGNoIHwgMjYgKysrKysrKysrKysrKysrKwogcGF0Y2hlcy8wMDAyLUFk
ZC1jYXN0LWZvci1wdGhyZWFkX3QucGF0Y2ggICAgIHwgMzAgKysrKysrKysrKysrKysrKysrKwog
MiBmaWxlcyBjaGFuZ2VkLCA1NiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0
Y2hlcy8wMDAxLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVDVkUucGF0Y2gKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9yLXB0aHJlYWRfdC5wYXRjaAoK
ZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5kLUhBVkVfRVhF
Q1ZFLnBhdGNoIGIvcGF0Y2hlcy8wMDAxLVVuZGVmaW5lLUhBVkVfRk9SSy1hbmQtSEFWRV9FWEVD
VkUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhNDk0ZgotLS0g
L2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwMS1VbmRlZmluZS1IQVZFX0ZPUkstYW5kLUhBVkVf
RVhFQ1ZFLnBhdGNoCkBAIC0wLDAgKzEsMjYgQEAKK0Zyb20gNDdlNTdiYzQ2Y2FiM2M5MmY0MTM3
YmYxODM1MzRkNTkzZWJlYTIxMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWQt
QW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KK0RhdGU6
IE1vbiwgMiBTZXAgMjAxOSAwNDoyMzozMCArMDMwMAorU3ViamVjdDogW1BBVENIIDEvMV0gVW5k
ZWZpbmUgSEFWRV9GT1JLIGFuZCBIQVZFX0VYRUNWRQorCitTaWduZWQtb2ZmLWJ5OiBWbGFkLUFu
ZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CistLS0KKyBN
b2R1bGVzL3Bvc2l4bW9kdWxlLmMgfCAyIC0tCisgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25z
KC0pCisKK2RpZmYgLS1naXQgYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgYi9Nb2R1bGVzL3Bvc2l4
bW9kdWxlLmMKK2luZGV4IGI3NThlNzYuLmFlZDllMjIgMTAwNjQ0CistLS0gYS9Nb2R1bGVzL3Bv
c2l4bW9kdWxlLmMKKysrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYworQEAgLTE3NSw4ICsxNzUs
NiBAQCBjb3JyZXNwb25kaW5nIFVuaXggbWFudWFsIGVudHJpZXMgZm9yIG1vcmUgaW5mb3JtYXRp
b24gb24gY2FsbHMuIik7CisgI2RlZmluZSBmc3luYyBfY29tbWl0CisgI2Vsc2UKKyAvKiBVbml4
IGZ1bmN0aW9ucyB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXNuJ3QgY2hlY2sgZm9yICov
CistI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQorLSNkZWZpbmUgSEFWRV9GT1JLICAgICAgIDEK
KyAjaWYgZGVmaW5lZChfX1VTTENfXykgJiYgZGVmaW5lZChfX1NDT19WRVJTSU9OX18pICAgICAg
IC8qIFNDTyBVREsgQ29tcGlsZXIgKi8KKyAjZGVmaW5lIEhBVkVfRk9SSzEgICAgICAxCisgI2Vu
ZGlmCistLSAKKzIuMjAuMQorCmRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9y
LXB0aHJlYWRfdC5wYXRjaCBiL3BhdGNoZXMvMDAwMi1BZGQtY2FzdC1mb3ItcHRocmVhZF90LnBh
dGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxN2FjMTUKLS0tIC9kZXYv
bnVsbAorKysgYi9wYXRjaGVzLzAwMDItQWRkLWNhc3QtZm9yLXB0aHJlYWRfdC5wYXRjaApAQCAt
MCwwICsxLDMwIEBACitGcm9tIDcxMGYzOTc4YTlhMTA2OTA4ODJmMjg3NTdkM2Y0YTk1YzE3ZjRm
NmEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZs
YWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CitEYXRlOiBNb24sIDIgU2VwIDIwMTkg
MDQ6Mjc6NDYgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIEFkZCBjYXN0IGZvciBwdGhyZWFk
X3QKKworU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgorLS0tCisgUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggfCA1ICsr
KysrCisgMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKQorCitkaWZmIC0tZ2l0IGEvUHl0
aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAoraW5kZXggZjc5
ZjliOS4uY2JmMTE0YSAxMDA2NDQKKy0tLSBhL1B5dGhvbi90aHJlYWRfcHRocmVhZC5oCisrKysg
Yi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorQEAgLTI1OCw3ICsyNTgsMTIgQEAgUHlUaHJlYWRf
Z2V0X3RocmVhZF9pZGVudCh2b2lkKQorICAgICBpZiAoIWluaXRpYWxpemVkKQorICAgICAgICAg
UHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKKyAgICAgdGhyZWFkaWQgPSBwdGhyZWFkX3NlbGYoKTsK
KysKKysjaWYgU0laRU9GX1BUSFJFQURfVCA8PSBTSVpFT0ZfTE9ORworICAgICByZXR1cm4gKHVu
c2lnbmVkIGxvbmcpIHRocmVhZGlkOworKyNlbHNlCisrICAgIHJldHVybiAodW5zaWduZWQgbG9u
ZykgKih1bnNpZ25lZCBsb25nICopICZ0aHJlYWRpZDsKKysjZW5kaWYKKyB9CisgCisgdm9pZAor
LS0gCisyLjIwLjEKKwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7e-0005ox-Ed; Mon, 23 Sep 2019 09:59:10 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7c-0005ok-V5
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:08 +0000
X-Inumbo-ID: c61867bc-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c61867bc-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:03 +0000 (UTC)
IronPort-SDR: lJRndSqCxWtxY3U4s+EYOlynGCyEo5IdSo+i16fQEBAuBfs2LVEdp3S4E3Y8EXDIe0n77Ak4wa
 GiPjcgMMzGzA==
IronPort-PHdr: =?us-ascii?q?9a23=3A0iXNUxMVG2ytDR0mlsMl6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0I//4rarrMEGX3/hxlliBBdydt6sfzbCG+Pq4ESxYuNDd6SpEKMQNHz?=
 =?us-ascii?q?Y+yuwu1zQ6B8CEDUCpZNXLVAcdWPp4aVl+4nugOlJUEsutL3fbo3m18CJAUk?=
 =?us-ascii?q?6nbVk9Kev6AJPdgNqq3O6u5ZLTfx9IhD2gar9uMRm6twrcutQYjId4NKo8yR?=
 =?us-ascii?q?TFrmVUd+9LwW9kOU+fkwzz68ut4pJv6Thct+4k+8VdTaj0YqM0QKBCAj87KW?=
 =?us-ascii?q?41/srrtRfCTQuL+HQRV3gdnwRLDQbY8hz0R4/9vSTmuOVz3imaJtD2QqsvWT?=
 =?us-ascii?q?u+9adrSQTnhzkBOjUk7WzYkM1wjKZcoBK8uxxyxpPfbY+JOPZieK7WYNUXTn?=
 =?us-ascii?q?dDUMlMTSxMGoOyYZUSAeQPPuhWqIvyp1UVoBeiGQWhHv/jxyVUinPq26Axzu?=
 =?us-ascii?q?QvERvB3AwlB98DrnPUrM7pNKcTV+C+0a/GzSjbb/NLxDzw75THchc6ofGQXL?=
 =?us-ascii?q?Jwd9DdyU0yFwPdk1WdspDqPyiP2uQVrmiU9PBsVfioi2M+rQx6vzuhxt80h4?=
 =?us-ascii?q?XUiY8Z10rI+CZ5zYovO9G0Vkx2bcSqHZdIqi2XOJZ6TtkhTmxooio21LMLtJ?=
 =?us-ascii?q?ChcCQXx5kr2RjSYOGdfYeS+BLsTuORLC99hHJiZb2wmQ6/8VOlyu3gTsm010?=
 =?us-ascii?q?tKrjZdntnMqH8N0xvT59CZSvt45Eih2DKP2xrP5eFfO0w0jbfbJIU7zr4qkZ?=
 =?us-ascii?q?ofqUXDHinol0XqlKKaa0op9vWy5+nkYrjqvIGQO5F2hw3kPKkigsm/Dv45Mg?=
 =?us-ascii?q?gKUWib4+O81Lj78ELlR7VKleE2kqjfsJzAIcQbu7a5AxJO34k/8BazFS+m0M?=
 =?us-ascii?q?kDknUdNlJFfwqLj5L1NFHWPPD4EfC/jkypkDdqwfDGP7rhAo7UInfejrjhY6?=
 =?us-ascii?q?hy60pHxQo3zNBf/I5UCqobLPP8REDxssbUDhgjMwy72+znEsly1psCWWKTBa?=
 =?us-ascii?q?+UKK3SvkGM5uIuO+mDepUZuDbgK/gk+/HujGQ0mVkDcqa12ZsYcmu3Eu54LE?=
 =?us-ascii?q?WEeXDsmMsOEX8WvgoiS+znkEOCUTpJaHmvR60z/Dc7B5+8DYjdR4ChmqeO0z?=
 =?us-ascii?q?2mEZ1RZ2BGF0uBEWz0d4WZRvgAcjidLdN6kjAeSLihU5Qu2Qu0tA/9mPJbKb?=
 =?us-ascii?q?/R+ysZsomm2NVr6un7kRAp6ScyH8mblWaXQDJahGQNEhQxx7x+pwRZ10+emf?=
 =?us-ascii?q?xzhOdEFNoV4+5RTy8xLtjE0uY8EdekCVGJRcuAVFvzGobuOjo2VN9km9I=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4NeIBIqjR6IH5sdCQEBAToBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQ?=
 =?us-ascii?q?BEwEBASaFaYI6IoJvAwN5ECAfBwtXGYMigg+scoh+gUiBNIcwhjE/g3VshRG?=
 =?us-ascii?q?FFgSWQpZKB4IlZQSUFSeZJS2oWzgggVkzGoNfUBAUgWgejhA9AQExAYEFAQG?=
 =?us-ascii?q?NZQEB?=
X-IPAS-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQwEAQGBZ4NeIBIqj?=
 =?us-ascii?q?R6IH5sdCQEBAToBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQBEwEBASaFaYI6I?=
 =?us-ascii?q?oJvAwN5ECAfBwtXGYMigg+scoh+gUiBNIcwhjE/g3VshRGFFgSWQpZKB4IlZ?=
 =?us-ascii?q?QSUFSeZJS2oWzgggVkzGoNfUBAUgWgejhA9AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854325"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B56ED1A602F1;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id VXq0DnmTKX5v; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 94F931A602E5;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id wmfQiywIYlFG; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 750EC1A602E8;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:45 +0300
Message-Id: <20190923095852.21872-8-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 07/14] _sysconfigdata.py:
 Disable features that are not avaiable on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIF9zeXNjb25maWdkYXRhLnB5IHwgOCArKysrLS0tLQogMSBmaWxl
IGNoYW5nZWQsIDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9f
c3lzY29uZmlnZGF0YS5weSBiL19zeXNjb25maWdkYXRhLnB5CmluZGV4IDE5MzU0Y2EuLmJkNTc1
YTggMTAwNjQ0Ci0tLSBhL19zeXNjb25maWdkYXRhLnB5CisrKyBiL19zeXNjb25maWdkYXRhLnB5
CkBAIC0xNTksNyArMTU5LDcgQEAgYnVpbGRfdGltZV92YXJzID0geydBQklGTEFHUyc6ICdtJywK
ICAnSEFWRV9FUkYnOiAxLAogICdIQVZFX0VSRkMnOiAxLAogICdIQVZFX0VSUk5PX0gnOiAxLAot
ICdIQVZFX0VYRUNWJzogMSwKKyAnSEFWRV9FWEVDVic6IDAsCiAgJ0hBVkVfRVhQTTEnOiAxLAog
ICdIQVZFX0ZBQ0NFU1NBVCc6IDEsCiAgJ0hBVkVfRkNIRElSJzogMSwKQEAgLTE3MCwxMSArMTcw
LDExIEBAIGJ1aWxkX3RpbWVfdmFycyA9IHsnQUJJRkxBR1MnOiAnbScsCiAgJ0hBVkVfRkNOVExf
SCc6IDEsCiAgJ0hBVkVfRkRBVEFTWU5DJzogMSwKICAnSEFWRV9GRE9QRU5ESVInOiAxLAotICdI
QVZFX0ZFWEVDVkUnOiAxLAorICdIQVZFX0ZFWEVDVkUnOiAwLAogICdIQVZFX0ZJTklURSc6IDEs
CiAgJ0hBVkVfRkxPQ0snOiAxLAotICdIQVZFX0ZPUksnOiAxLAotICdIQVZFX0ZPUktQVFknOiAx
LAorICdIQVZFX0ZPUksnOiAwLAorICdIQVZFX0ZPUktQVFknOiAwLAogICdIQVZFX0ZQQVRIQ09O
Ric6IDEsCiAgJ0hBVkVfRlNFRUs2NCc6IDAsCiAgJ0hBVkVfRlNFRUtPJzogMSwKLS0gCjIuMjAu
MQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7f-0005pX-Hm; Mon, 23 Sep 2019 09:59:11 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7e-0005ov-FA
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:10 +0000
X-Inumbo-ID: c4cec5b8-dde8-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id c4cec5b8-dde8-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 09:59:01 +0000 (UTC)
IronPort-SDR: wXVCG7uOQ2IxAG4oRoF0cx8ZNOXU7A8bItl/2WgYlfWgg1d5pLt8a9/gwOvfVEuxY3WAYugF9W
 CWmIHB1bBjeQ==
IronPort-PHdr: =?us-ascii?q?9a23=3A3NQythUbXebMrtEG9D740WAhbAHV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbReEt8tkgFKBZ4jH8fUM07OQ7/m7HzZQqszZ+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvHdFeOtayX10KVmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQe3Ce/z1jNFnGP60Lcm3+?=
 =?us-ascii?q?g9FwzNwQwuH8gJsHTRtNj4KqASUfupzKnJyzXIcvVY2Srl6IjVbxsspu2DXb?=
 =?us-ascii?q?VrccrNyEkvERnJjlGNqYz9IjOYzfgCs3OB4+p4SOKgkHQrqxt2ojW2wMonl4?=
 =?us-ascii?q?rHhpoNx1zZ+ih13Zw5KN64RUJhf9KoDplduzuUOoduX88vTHxktDw5x7AGo5?=
 =?us-ascii?q?K3YiYHxZo9yxLCZPGLbY6F6Q/5WumLOzd3nndldaq6hxa17Eev1PXxVtKx0F?=
 =?us-ascii?q?ZWtipFlcTMtmwV2xzT9MeHTvx981+/2TaKzQ/T6+VELVoomqrAMZIh2qMwmY?=
 =?us-ascii?q?EJvUTZGS/6gET2jKmIeUU44uWk9uvqbqj8qpKfN4J4kB/yProsl8ClD+k0Kg?=
 =?us-ascii?q?0OUHKa+eS42r3j50r5QLBSg/IqlanZq4zaJcUdpqKjBw9Vz54j6wukAji6y9?=
 =?us-ascii?q?QUh2EHLE9edx6dlYjpPEnCIOrkAvenn1SsjDBryujDPr3gBJXNL3/DkKz4cb?=
 =?us-ascii?q?lg9UFc1hQ8zdRE6pJQC7EBO+7zWlTruN3XEBA5NRa4w+H9CNVyzokeQ36AAr?=
 =?us-ascii?q?eFMKPOtl+F/uwvLPeIZI8UoDbyNeIp5/7zjX84hVAdfLKk3Z0JZ3+kGvRpOV?=
 =?us-ascii?q?6WbWDyjdccCW0KpBYxTPT2iF2eVj5ef2iyX6Ym6T4mEI2pF4HDSZ23gLOf3S?=
 =?us-ascii?q?e3BIZZaXpbBVCLEHfoap6JW+wQaCKPP8BtiCYLWqS6S4M7yBGurBT1x6B9Lu?=
 =?us-ascii?q?rTqWUkssfm1d504PaWmRws+DhcC8WGz3rLX2xy2GQSSGwYxqd69Gd60UuC1+?=
 =?us-ascii?q?BcnuRFXYhY4OhVUwF8MYPE0sRxEJbqRwiHZNDfGwXuecmvHTxkFoF5+NQJeU?=
 =?us-ascii?q?soQ9g=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4F0gWogEiqNHogfmx0JAQEBOgECAQGEPwKDNzgTAgMJAQEFAQEBAQE?=
 =?us-ascii?q?FBAETAQEBJoVpgjoigm8DA3kQIB8SVxmCV0uCD6xyiH6BSIE0hzCGMT+BEYJ?=
 =?us-ascii?q?kbIonBIxxiVGWSgeCJWUElBUnmSWpCDgggVkzGoNfUBAUgVcCAQ4JFY4QPQE?=
 =?us-ascii?q?BMQGBBQEBjWUBAQ?=
X-IPAS-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQwEAQGBZ4F0gWogE?=
 =?us-ascii?q?iqNHogfmx0JAQEBOgECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAETAQEBJoVpg?=
 =?us-ascii?q?joigm8DA3kQIB8SVxmCV0uCD6xyiH6BSIE0hzCGMT+BEYJkbIonBIxxiVGWS?=
 =?us-ascii?q?geCJWUElBUnmSWpCDgggVkzGoNfUBAUgVcCAQ4JFY4QPQEBMQGBBQEBjWUBA?=
 =?us-ascii?q?Q?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854323"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 95FF61A602EE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id HKkWOvjbImtS; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 7AFDA1A602EF;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 0dQKA46sIayd; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 58C201A602EE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:43 +0300
Message-Id: <20190923095852.21872-6-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 05/14] pyconfig.h:
 Disable features that are not avaiable on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU29tZSBvZiB0aGVzZSBmZWF0dXJlcyBoYXZlIHRvIGVuYWJsZWQgYmFjayB3aGVuIHdl
IHdpbGwgc3VwcG9ydCB0aGVtLgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4g
THVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIGluY2x1ZGUvcHljb25maWcuaCB8IDE5
OCArKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBj
aGFuZ2VkLCAxMDAgaW5zZXJ0aW9ucygrKSwgOTggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
aW5jbHVkZS9weWNvbmZpZy5oIGIvaW5jbHVkZS9weWNvbmZpZy5oCmluZGV4IDFlNGVmOGEuLjQw
NDk0ZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcHljb25maWcuaAorKysgYi9pbmNsdWRlL3B5Y29u
ZmlnLmgKQEAgLTQyLDcgKzQyLDcgQEAKIC8qICN1bmRlZiBHRVRUSU1FT0ZEQVlfTk9fVFogKi8K
IAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhY2NlcHQ0JyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9BQ0NFUFQ0IDEKKy8qICNkZWZpbmUgSEFWRV9BQ0NFUFQ0IDEgKi8KIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhY29zaCcgZnVuY3Rpb24uICovCiAjZGVm
aW5lIEhBVkVfQUNPU0ggMQpAQCAtMTE1LDEzICsxMTUsMTMgQEAKICNkZWZpbmUgSEFWRV9DSE9X
TiAxCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Nocm9vdCcgZnVuY3Rpb24uICovCi0j
ZGVmaW5lIEhBVkVfQ0hST09UIDEKKy8qICNkZWZpbmUgSEFWRV9DSFJPT1QgMSAqLwogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb2NrJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUg
SEFWRV9DTE9DSyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0
cmVzJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9DTE9DS19HRVRSRVMgMQorLyogI2RlZmlu
ZSBIQVZFX0NMT0NLX0dFVFJFUyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElN
RSAxCkBAIC0xNDIsNyArMTQyLDcgQEAKICNkZWZpbmUgSEFWRV9DT1BZU0lHTiAxCiAKIC8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y3J5cHQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVm
aW5lIEhBVkVfQ1JZUFRfSCAxCisvKiAjZGVmaW5lIEhBVkVfQ1JZUFRfSCAxICovCiAKIC8qIERl
ZmluZSBpZiB5b3UgaGF2ZSB0aGUgY3J5cHRfcigpIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZF
X0NSWVBUX1IgMQpAQCAtMjAzLDcgKzIwMyw3IEBACiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9ERUVQQklORCcsIGFuZCB0byAwIGlmIHlvdQog
ICAgZG9uJ3QuICovCi0jZGVmaW5lIEhBVkVfREVDTF9SVExEX0RFRVBCSU5EIDEKKyNkZWZpbmUg
SEFWRV9ERUNMX1JUTERfREVFUEJJTkQgMAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfR0xPQkFMJywgYW5kIHRvIDAgaWYgeW91CiAgICBkb24n
dC4gKi8KQEAgLTI3MiwxNiArMjcyLDE2IEBACiAjZGVmaW5lIEhBVkVfRFVQMyAxCiAKIC8qIERl
ZmluZWQgd2hlbiBhbnkgZHluYW1pYyBtb2R1bGUgbG9hZGluZyBpcyBlbmFibGVkLiAqLwotI2Rl
ZmluZSBIQVZFX0RZTkFNSUNfTE9BRElORyAxCisvKiAjZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FE
SU5HIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlbmRpYW4uaD4gaGVh
ZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQogCiAvKiBEZWZpbmUgaWYgeW91
IGhhdmUgdGhlICdlcG9sbCcgZnVuY3Rpb25zLiAqLwotI2RlZmluZSBIQVZFX0VQT0xMIDEKKy8v
I2RlZmluZSBIQVZFX0VQT0xMIDEKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGxf
Y3JlYXRlMScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVBPTExfQ1JFQVRFMSAxCisvLyNk
ZWZpbmUgSEFWRV9FUE9MTF9DUkVBVEUxIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBlcmYnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0VSRiAxCkBAIC0yOTMsNyArMjkz
LDcgQEAKICNkZWZpbmUgSEFWRV9FUlJOT19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBleGVjdicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVhFQ1YgMQorLy8jZGVm
aW5lIEhBVkVfRVhFQ1YgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV4cG0x
JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9FWFBNMSAxCkBAIC0zMDgsMTMgKzMwOCwxMyBA
QAogI2RlZmluZSBIQVZFX0ZDSE1PRCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZmNobW9kYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZDSE1PREFUIDEKKy8qICNk
ZWZpbmUgSEFWRV9GQ0hNT0RBVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZmNob3duJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9GQ0hPV04gMQogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZjaG93bmF0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUg
SEFWRV9GQ0hPV05BVCAxCisvKiAjZGVmaW5lIEhBVkVfRkNIT1dOQVQgMSAqLwogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmlu
ZSBIQVZFX0ZDTlRMX0ggMQpAQCAtMzI2LDE5ICszMjYsMTkgQEAKICNkZWZpbmUgSEFWRV9GRE9Q
RU5ESVIgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZleGVjdmUnIGZ1bmN0
aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZFWEVDVkUgMQorLyojZGVmaW5lIEhBVkVfRkVYRUNWRSAx
ICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmluaXRlJyBmdW5jdGlvbi4g
Ki8KICNkZWZpbmUgSEFWRV9GSU5JVEUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGZsb2NrJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GTE9DSyAxCisvKiAjZGVmaW5l
IEhBVkVfRkxPQ0sgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsn
IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZPUksgMQorLyogI2RlZmluZSBIQVZFX0ZPUksg
MSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmtwdHknIGZ1bmN0aW9u
LiAqLwotI2RlZmluZSBIQVZFX0ZPUktQVFkgMQorLyogI2RlZmluZSBIQVZFX0ZPUktQVFkgMSAq
LwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZwYXRoY29uZicgZnVuY3Rpb24u
ICovCiAjZGVmaW5lIEhBVkVfRlBBVEhDT05GIDEKQEAgLTM3MSwxMyArMzcxLDEzIEBACiAjZGVm
aW5lIEhBVkVfRlRSVU5DQVRFIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBm
dXRpbWVucycgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRlVUSU1FTlMgMQorLyogI2RlZmlu
ZSBIQVZFX0ZVVElNRU5TIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBm
dXRpbWVzJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVVRJTUVTIDEKKy8qICNkZWZpbmUg
SEFWRV9GVVRJTUVTIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdXRp
bWVzYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZVVElNRVNBVCAxCisvKiAjZGVmaW5l
IEhBVkVfRlVUSU1FU0FUIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBn
YWlfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dBSV9TVFJFUlJPUiAxCkBA
IC00MDIsMTMgKzQwMiwxMyBAQAogI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEKIAogLyogRGVm
aW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQoKSwgYW5kIGZ1
bmxvY2tmaWxlKCkgKi8KLSNkZWZpbmUgSEFWRV9HRVRDX1VOTE9DS0VEIDEKKy8qICNkZWZpbmUg
SEFWRV9HRVRDX1VOTE9DS0VEIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRlbnRyb3B5JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRFTlRST1BZIDEKKy8q
ICNkZWZpbmUgSEFWRV9HRVRFTlRST1BZIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBnZXRncm91cGxpc3QnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVEdST1VQ
TElTVCAxCisvKiAjZGVmaW5lIEhBVkVfR0VUR1JPVVBMSVNUIDEgKi8KIAogLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBnZXRncm91cHMnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZF
X0dFVEdST1VQUyAxCkBAIC00MjksMTAgKzQyOSwxMCBAQAogI2RlZmluZSBIQVZFX0dFVEhPU1RC
WU5BTUVfUl82X0FSRyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aXRp
bWVyJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRJVElNRVIgMQorLyogI2RlZmluZSBI
QVZFX0dFVElUSU1FUiAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0
bG9hZGF2ZycgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUTE9BREFWRyAxCisvKiAjZGVm
aW5lIEhBVkVfR0VUTE9BREFWRyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0bG9naW4nIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0dFVExPR0lOIDEKQEAgLTQ1
MCwxMyArNDUwLDEzIEBACiAjZGVmaW5lIEhBVkVfR0VUUEdJRCAxCiAKIC8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgZ2V0cGdycCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VU
UEdSUCAxCisvKiAjZGVmaW5lIEhBVkVfR0VUUEdSUCAxICovCiAKIC8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgZ2V0cGlkJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9HRVRQSUQg
MQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHByaW9yaXR5JyBmdW5jdGlv
bi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRQUklPUklUWSAxCisvKiAjZGVmaW5lIEhBVkVfR0VUUFJJ
T1JJVFkgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHB3ZW50JyBm
dW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9HRVRQV0VOVCAxCkBAIC00NjUsNyArNDY1LDcgQEAK
ICNkZWZpbmUgSEFWRV9HRVRSQU5ET00gMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgTGludXgg
Z2V0cmFuZG9tKCkgc3lzY2FsbCBpcyBhdmFpbGFibGUgKi8KLSNkZWZpbmUgSEFWRV9HRVRSQU5E
T01fU1lTQ0FMTCAxCisvKiAjZGVmaW5lIEhBVkVfR0VUUkFORE9NX1NZU0NBTEwgMSAqLwogCiAv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHJlc2dpZCcgZnVuY3Rpb24uICovCiAj
ZGVmaW5lIEhBVkVfR0VUUkVTR0lEIDEKQEAgLTQ5Niw3ICs0OTYsNyBAQAogI2RlZmluZSBIQVZF
X0dSUF9IIDEKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaHN0cmVycm9yJyBmdW5jdGlv
bi4gKi8KLSNkZWZpbmUgSEFWRV9IU1RSRVJST1IgMQorLyogI2RlZmluZSBIQVZFX0hTVFJFUlJP
UiAxICovCiAKIC8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxlNjR0b2goKSAqLwogI2RlZmlu
ZSBIQVZFX0hUT0xFNjQgMQpAQCAtNTA4LDcgKzUwOCw3IEBACiAvKiAjdW5kZWYgSEFWRV9JRUVF
RlBfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcg
ZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfSUZfTkFNRUlOREVYIDEKKy8vI2RlZmluZSBIQVZF
X0lGX05BTUVJTkRFWCAxCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2luZXRfYXRvbicg
ZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfSU5FVF9BVE9OIDEKQEAgLTU2OCw3ICs1NjgsNyBA
QAogLyogI3VuZGVmIEhBVkVfTElCSUVFRSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPGxpYmludGwuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTElCSU5UTF9I
IDEKKy8qICNkZWZpbmUgSEFWRV9MSUJJTlRMX0ggMSAqLwogCiAvKiBEZWZpbmUgaWYgeW91IGhh
dmUgdGhlIHJlYWRsaW5lIGxpYnJhcnkgKC1scmVhZGxpbmUpLiAqLwogLyogI3VuZGVmIEhBVkVf
TElCUkVBRExJTkUgKi8KQEAgLTU4NiwzNCArNTg2LDM0IEBACiAjZGVmaW5lIEhBVkVfTElOSyAx
CiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlua2F0JyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9MSU5LQVQgMQorLyogI2RlZmluZSBIQVZFX0xJTktBVCAxICovCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL2JjbS5oPiBoZWFkZXIgZmls
ZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fQkNNX0ggMQorLy8jZGVmaW5lIEhBVkVfTElO
VVhfQ0FOX0JDTV9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9j
YW4uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfTElOVVhfQ0FOX0ggMQorLy8jZGVm
aW5lIEhBVkVfTElOVVhfQ0FOX0ggMQogCiAvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHVzaW5nIExp
bnV4IDMuNiBvciBsYXRlci4gKi8KLSNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fUkFXX0ZEX0ZSQU1F
UyAxCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fUkFXX0ZEX0ZSQU1FUyAxCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL3Jhdy5oPiBoZWFkZXIgZmlsZS4gKi8K
LSNkZWZpbmUgSEFWRV9MSU5VWF9DQU5fUkFXX0ggMQorLy8jZGVmaW5lIEhBVkVfTElOVVhfQ0FO
X1JBV19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5r
Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0xJTlVYX05FVExJTktfSCAxCisvLyNk
ZWZpbmUgSEFWRV9MSU5VWF9ORVRMSU5LX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPGxpbnV4L3JhbmRvbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU5V
WF9SQU5ET01fSCAxCisvKiAjZGVmaW5lIEhBVkVfTElOVVhfUkFORE9NX0ggMSAqLwogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3RpcGMuaD4gaGVhZGVyIGZpbGUuICov
Ci0jZGVmaW5lIEhBVkVfTElOVVhfVElQQ19IIDEKKy8vI2RlZmluZSBIQVZFX0xJTlVYX1RJUENf
SCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvdm1fc29ja2V0cy5o
PiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0ggMQorLy8j
ZGVmaW5lIEhBVkVfTElOVVhfVk1fU09DS0VUU19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBsb2NrZicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTE9DS0YgMQorLyog
I2RlZmluZSBIQVZFX0xPQ0tGIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBsb2cxcCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfTE9HMVAgMQpAQCAtNjI4LDcgKzYy
OCw3IEBACiAjZGVmaW5lIEhBVkVfTFNUQVQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGx1dGltZXMnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0xVVElNRVMgMQorLyog
I2RlZmluZSBIQVZFX0xVVElNRVMgMSAqLwogCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0
aGUgbWFrZWRldiBtYWNyby4gKi8KICNkZWZpbmUgSEFWRV9NQUtFREVWIDEKQEAgLTY0MywyOCAr
NjQzLDI4IEBACiAjZGVmaW5lIEhBVkVfTUVNUkNIUiAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgbWtkaXJhdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUtESVJBVCAx
CisvKiAjZGVmaW5lIEhBVkVfTUtESVJBVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgbWtmaWZvJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NS0ZJRk8gMQorLyog
I2RlZmluZSBIQVZFX01LRklGTyAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgbWtmaWZvYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01LRklGT0FUIDEKKy8qICNk
ZWZpbmUgSEFWRV9NS0ZJRk9BVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgbWtub2QnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX01LTk9EIDEKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta25vZGF0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFW
RV9NS05PREFUIDEKKy8qICNkZWZpbmUgSEFWRV9NS05PREFUIDEgKi8KIAogLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBta3RpbWUnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX01L
VElNRSAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcgZnVuY3Rpb24u
ICovCi0jZGVmaW5lIEhBVkVfTU1BUCAxCisvKiAjZGVmaW5lIEhBVkVfTU1BUCAxICovCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXJlbWFwJyBmdW5jdGlvbi4gKi8KLSNkZWZp
bmUgSEFWRV9NUkVNQVAgMQorLyogI2RlZmluZSBIQVZFX01SRU1BUCAxICovCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmN1cnNlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZp
bmUgSEFWRV9OQ1VSU0VTX0ggMQpAQCAtNjczLDcgKzY3Myw3IEBACiAvKiAjdW5kZWYgSEFWRV9O
RElSX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRwYWNrZXQvcGFj
a2V0Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX05FVFBBQ0tFVF9QQUNLRVRfSCAx
CisvLyNkZWZpbmUgSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZi5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9O
RVRfSUZfSCAxCkBAIC02OTQsMjIgKzY5NCwyMiBAQAogI2RlZmluZSBIQVZFX1BBVVNFIDEKIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwaXBlMicgZnVuY3Rpb24uICovCi0jZGVm
aW5lIEhBVkVfUElQRTIgMQorLyogI2RlZmluZSBIQVZFX1BJUEUyIDEgKi8KIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwbG9jaycgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFW
RV9QTE9DSyAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBvbGwnIGZ1bmN0
aW9uLiAqLwotI2RlZmluZSBIQVZFX1BPTEwgMQorLy8jZGVmaW5lIEhBVkVfUE9MTCAxCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNk
ZWZpbmUgSEFWRV9QT0xMX0ggMQorLy8jZGVmaW5lIEhBVkVfUE9MTF9IIDEKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWR2aXNlJyBmdW5jdGlvbi4gKi8KLSNkZWZp
bmUgSEFWRV9QT1NJWF9GQURWSVNFIDEKKy8qICNkZWZpbmUgSEFWRV9QT1NJWF9GQURWSVNFIDEg
Ki8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWxsb2NhdGUnIGZ1
bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BPU0lYX0ZBTExPQ0FURSAxCisvKiAjZGVmaW5lIEhB
VkVfUE9TSVhfRkFMTE9DQVRFIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBwb3NpeF9zcGF3bicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfUE9TSVhfU1BBV04gMQpA
QCAtNzIxLDEwICs3MjEsMTAgQEAKICNkZWZpbmUgSEFWRV9QUkVBRFYgMQogCiAvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHByZWFkdjInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZF
X1BSRUFEVjIgMQorLyogI2RlZmluZSBIQVZFX1BSRUFEVjIgMSAqLwogCiAvKiBEZWZpbmUgaWYg
eW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuICovCi0jZGVmaW5lIEhBVkVfUFJMSU1J
VCAxCisvKiAjZGVmaW5lIEhBVkVfUFJMSU1JVCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1BS
T0NFU1NfSCAqLwpAQCAtNzM2LDcgKzczNiw3IEBACiAvKiAjdW5kZWYgSEFWRV9QVEhSRUFEX0RF
U1RSVUNUT1IgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkX2dl
dGNwdWNsb2NraWQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BUSFJFQURfR0VUQ1BVQ0xP
Q0tJRCAxCisvKiAjZGVmaW5lIEhBVkVfUFRIUkVBRF9HRVRDUFVDTE9DS0lEIDEgKi8KIAogLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdGhyZWFkLmg+IGhlYWRlciBmaWxlLiAqLwog
I2RlZmluZSBIQVZFX1BUSFJFQURfSCAxCkBAIC03NDUsMTAgKzc0NSwxMCBAQAogLyogI3VuZGVm
IEhBVkVfUFRIUkVBRF9JTklUICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
cHRocmVhZF9raWxsJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9QVEhSRUFEX0tJTEwgMQor
LyogI2RlZmluZSBIQVZFX1BUSFJFQURfS0lMTCAxIFRPRE8gKi8KIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkX3NpZ21hc2snIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBI
QVZFX1BUSFJFQURfU0lHTUFTSyAxCisvKiAjZGVmaW5lIEhBVkVfUFRIUkVBRF9TSUdNQVNLIDEg
Ki8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdHkuaD4gaGVhZGVyIGZpbGUu
ICovCiAjZGVmaW5lIEhBVkVfUFRZX0ggMQpAQCAtNzYzLDIyICs3NjMsMjIgQEAKICNkZWZpbmUg
SEFWRV9QV1JJVEVWIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwd3JpdGV2
MicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUFdSSVRFVjIgMQorLyogI2RlZmluZSBIQVZF
X1BXUklURVYyIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkbGlu
aycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfUkVBRExJTksgMQogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWRsaW5rYXQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZF
X1JFQURMSU5LQVQgMQorLyogI2RlZmluZSBIQVZFX1JFQURMSU5LQVQgMSAqLwogCiAvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWR2JyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFW
RV9SRUFEViAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhbHBhdGgnIGZ1
bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1JFQUxQQVRIIDEKKy8qICNkZWZpbmUgSEFWRV9SRUFM
UEFUSCAxICovCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1
bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1JFTkFNRUFUIDEKKy8qICNkZWZpbmUgSEFWRV9SRU5B
TUVBVCAxICovCiAKIC8qIERlZmluZSBpZiByZWFkbGluZSBzdXBwb3J0cyBhcHBlbmRfaGlzdG9y
eSAqLwogLyogI3VuZGVmIEhBVkVfUkxfQVBQRU5EX0hJU1RPUlkgKi8KQEAgLTgyMCwxMCArODIw
LDEwIEBACiAjZGVmaW5lIEhBVkVfU0NIRURfU0VUQUZGSU5JVFkgMQogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHBhcmFtJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUg
SEFWRV9TQ0hFRF9TRVRQQVJBTSAxCisvKiAjZGVmaW5lIEhBVkVfU0NIRURfU0VUUEFSQU0gMSAq
LwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHNjaGVkdWxlcicg
ZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0NIRURfU0VUU0NIRURVTEVSIDEKKy8qICNkZWZp
bmUgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHNlbV9nZXR2YWx1ZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU0VNX0dF
VFZBTFVFIDEKQEAgLTgzOCw3ICs4MzgsNyBAQAogI2RlZmluZSBIQVZFX1NFTV9VTkxJTksgMQog
CiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbmRmaWxlJyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9TRU5ERklMRSAxCisvKiAjZGVmaW5lIEhBVkVfU0VOREZJTEUgMSAqLwog
CiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGVnaWQnIGZ1bmN0aW9uLiAqLwog
I2RlZmluZSBIQVZFX1NFVEVHSUQgMQpAQCAtODU2LDcgKzg1Niw3IEBACiAjZGVmaW5lIEhBVkVf
U0VUSE9TVE5BTUUgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGl0aW1l
cicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUSVRJTUVSIDEKKy8qICNkZWZpbmUgSEFW
RV9TRVRJVElNRVIgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGxv
Y2FsZScgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKQEAgLTg2OCwxMyAr
ODY4LDEzIEBACiAjZGVmaW5lIEhBVkVfU0VUUEdSUCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgc2V0cHJpb3JpdHknIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFBS
SU9SSVRZIDEKKy8qICNkZWZpbmUgSEFWRV9TRVRQUklPUklUWSAxICovCiAKIC8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZF
X1NFVFJFR0lEIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXNnaWQn
IGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFJFU0dJRCAxCisvKiAjZGVmaW5lIEhBVkVf
U0VUUkVTR0lEIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRyZXN1
aWQnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NFVFJFU1VJRCAxCkBAIC04OTUsNDAgKzg5
NSw0MCBAQAogI2RlZmluZSBIQVZFX1NIQURPV19IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBzaWdhY3Rpb24nIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR0FDVElP
TiAxCisvLyNkZWZpbmUgSEFWRV9TSUdBQ1RJT04gMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHNpZ2FsdHN0YWNrJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TSUdBTFRT
VEFDSyAxCisvLyNkZWZpbmUgSEFWRV9TSUdBTFRTVEFDSyAxCiAKIC8qIERlZmluZSB0byAxIGlm
IGBzaV9iYW5kJyBpcyBhIG1lbWJlciBvZiBgc2lnaW5mb190Jy4gKi8KLSNkZWZpbmUgSEFWRV9T
SUdJTkZPX1RfU0lfQkFORCAxCisvLyNkZWZpbmUgSEFWRV9TSUdJTkZPX1RfU0lfQkFORCAxCiAK
IC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lnaW50ZXJydXB0JyBmdW5jdGlvbi4g
Ki8KLSNkZWZpbmUgSEFWRV9TSUdJTlRFUlJVUFQgMQorLy8jZGVmaW5lIEhBVkVfU0lHSU5URVJS
VVBUIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVy
IGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU0lHTkFMX0ggMQorLyogI2RlZmluZSBIQVZFX1NJR05B
TF9IIDEgKi8gLy8gVE9ETwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3Bl
bmRpbmcnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR1BFTkRJTkcgMQorLyogI2RlZmlu
ZSBIQVZFX1NJR1BFTkRJTkcgMSAqLyAvLyBUT0RPCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgc2lncmVsc2UnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR1JFTFNFIDEK
Ky8qICNkZWZpbmUgSEFWRV9TSUdSRUxTRSAxICovIC8vVE9ETwogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHNpZ3RpbWVkd2FpdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVf
U0lHVElNRURXQUlUIDEKKy8qICNkZWZpbmUgSEFWRV9TSUdUSU1FRFdBSVQgMSAqLy8vIHRvZG8K
IAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWd3YWl0JyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9TSUdXQUlUIDEKKy8vI2RlZmluZSBIQVZFX1NJR1dBSVQgMQogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3dhaXRpbmZvJyBmdW5jdGlvbi4gKi8KLSNk
ZWZpbmUgSEFWRV9TSUdXQUlUSU5GTyAxCisvLyNkZWZpbmUgSEFWRV9TSUdXQUlUSU5GTyAxCiAK
IC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLwot
I2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKKy8vI2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKIAogLyog
c3RydWN0IHNvY2thZGRyX2FsZyAobGludXgvaWZfYWxnLmgpICovCi0jZGVmaW5lIEhBVkVfU09D
S0FERFJfQUxHIDEKKy8vI2RlZmluZSBIQVZFX1NPQ0tBRERSX0FMRyAxCiAKIC8qIERlZmluZSBp
ZiBzb2NrYWRkciBoYXMgc2FfbGVuIG1lbWJlciAqLwogLyogI3VuZGVmIEhBVkVfU09DS0FERFJf
U0FfTEVOICovCkBAIC05NjUsNyArOTY1LDcgQEAKICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCiAK
IC8qIEhhcyBzdGRhdG9taWMuaCB3aXRoIGF0b21pY19pbnQgKi8KLSNkZWZpbmUgSEFWRV9TVERf
QVRPTUlDIDEKKy8vI2RlZmluZSBIQVZFX1NURF9BVE9NSUMgMQogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU1RSRFVQ
IDEKQEAgLTk4Myw3ICs5ODMsNyBAQAogLyogI3VuZGVmIEhBVkVfU1RSTENQWSAqLwogCiAvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cm9wdHMuaD4gaGVhZGVyIGZpbGUuICovCi0j
ZGVmaW5lIEhBVkVfU1RST1BUU19IIDEKKy8qICNkZWZpbmUgSEFWRV9TVFJPUFRTX0ggMSAqLwog
CiAvKiBEZWZpbmUgdG8gMSBpZiBgcHdfZ2Vjb3MnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcGFz
c3dkJy4gKi8KICNkZWZpbmUgSEFWRV9TVFJVQ1RfUEFTU1dEX1BXX0dFQ09TIDEKQEAgLTEwMTAs
MTMgKzEwMTAsMTMgQEAKICNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9SREVWIDEKIAogLyog
RGVmaW5lIHRvIDEgaWYgYHRtX3pvbmUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdG0nLiAqLwot
I2RlZmluZSBIQVZFX1NUUlVDVF9UTV9UTV9aT05FIDEKKy8qICNkZWZpbmUgSEFWRV9TVFJVQ1Rf
VE1fVE1fWk9ORSAxICovCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3N5bWxpbmsnIGZ1
bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NZTUxJTksgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgYHN5bWxpbmthdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1lNTElO
S0FUIDEKKy8qICNkZWZpbmUgSEFWRV9TWU1MSU5LQVQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHN5bmMnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NZTkMgMQpA
QCAtMTA0NCw3ICsxMDQ0LDcgQEAKIC8qICN1bmRlZiBIQVZFX1NZU19FTkRJQU5fSCAqLwogCiAv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lcG9sbC5oPiBoZWFkZXIgZmlsZS4g
Ki8KLSNkZWZpbmUgSEFWRV9TWVNfRVBPTExfSCAxCisvKiAjZGVmaW5lIEhBVkVfU1lTX0VQT0xM
X0ggMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9ldmVudC5oPiBo
ZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1NZU19FVkVOVF9IICovCkBAIC0xMDc4LDcg
KzEwNzgsNyBAQAogI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFW
RV9TWVNfUE9MTF9IIDEKKy8vI2RlZmluZSBIQVZFX1NZU19QT0xMX0ggMQogCiAvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yYW5kb20uaD4gaGVhZGVyIGZpbGUuICovCiAjZGVm
aW5lIEhBVkVfU1lTX1JBTkRPTV9IIDEKQEAgLTEwOTAsNyArMTA5MCw3IEBACiAjZGVmaW5lIEhB
VkVfU1lTX1NFTEVDVF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv
c2VuZGZpbGUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTkRGSUxFX0gg
MQorLyogI2RlZmluZSBIQVZFX1NZU19TRU5ERklMRV9IIDEgKi8KIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBI
QVZFX1NZU19TT0NLRVRfSCAxCkBAIC0xMTkxLDcgKzExOTEsNyBAQAogI2RlZmluZSBIQVZFX1VO
SVNURF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmxpbmthdCcgZnVu
Y3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVU5MSU5LQVQgMQorLyogI2RlZmluZSBIQVZFX1VOTElO
S0FUIDEgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bnNldGVudicgZnVu
Y3Rpb24uICovCiAjZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQpAQCAtMTIwNSw3ICsxMjA1LDcgQEAK
IC8qICN1bmRlZiBIQVZFX1VUSUxfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHV0aW1lbnNhdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVVRJTUVOU0FUIDEKKy8q
ICNkZWZpbmUgSEFWRV9VVElNRU5TQVQgMSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHV0aW1lcycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfVVRJTUVTIDEKQEAgLTEy
MjAsMTMgKzEyMjAsMTUgQEAKIC8qICN1bmRlZiBIQVZFX1VVSURfRU5DX0JFICovCiAKIC8qIERl
ZmluZSBpZiB1dWlkX2dlbmVyYXRlX3RpbWVfc2FmZSgpIGV4aXN0cy4gKi8KLSNkZWZpbmUgSEFW
RV9VVUlEX0dFTkVSQVRFX1RJTUVfU0FGRSAxCisvKiAjdW5kZWYgSEFWRV9VVUlEX0dFTkVSQVRF
X1RJTUVfU0FGRSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHV1aWQuaD4g
aGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9VVUlEX0ggKi8KKyNpZiBDT05GSUdfTElC
VVVJRAorI2RlZmluZSBIQVZFX1VVSURfSCAxCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDx1dWlkL3V1aWQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVf
VVVJRF9VVUlEX0ggMQorLyogI3VuZGVmIEhBVkVfVVVJRF9VVUlEX0ggKi8KIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0MycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVf
V0FJVDMgMQpAQCAtMTIzNSw3ICsxMjM3LDcgQEAKICNkZWZpbmUgSEFWRV9XQUlUNCAxCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdGlkJyBmdW5jdGlvbi4gKi8KLSNkZWZp
bmUgSEFWRV9XQUlUSUQgMQorLyogI2RlZmluZSBIQVZFX1dBSVRJRCAxICovCiAKIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdHBpZCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhB
VkVfV0FJVFBJRCAxCkBAIC0xMjYzLDEwICsxMjY1LDEwIEBACiAjZGVmaW5lIEhBVkVfV1JJVEVW
IDEKIAogLyogRGVmaW5lIGlmIGxpYnNzbCBoYXMgWDUwOV9WRVJJRllfUEFSQU1fc2V0MV9ob3N0
IGFuZCByZWxhdGVkIGZ1bmN0aW9uICovCi0jZGVmaW5lIEhBVkVfWDUwOV9WRVJJRllfUEFSQU1f
U0VUMV9IT1NUIDEKKy8qICN1bmRlZiBIQVZFX1g1MDlfVkVSSUZZX1BBUkFNX1NFVDFfSE9TVCAq
LwogCiAvKiBEZWZpbmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHkgKi8KLSNk
ZWZpbmUgSEFWRV9aTElCX0NPUFkgMQorLyogI3VuZGVmIEhBVkVfWkxJQl9DT1BZICovCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgX2dldHB0eScgZnVuY3Rpb24uICovCiAvKiAj
dW5kZWYgSEFWRV9fR0VUUFRZICovCkBAIC0xMzA3LDcgKzEzMDksNyBAQAogLyogI3VuZGVmIFBP
U0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQgKi8KIAogLyogRGVmaW5lIGlmIHB0aHJlYWRfa2V5
X3QgaXMgY29tcGF0aWJsZSB3aXRoIGludC4gKi8KLSNkZWZpbmUgUFRIUkVBRF9LRVlfVF9JU19D
T01QQVRJQkxFX1dJVEhfSU5UIDEKKy8qICNkZWZpbmUgUFRIUkVBRF9LRVlfVF9JU19DT01QQVRJ
QkxFX1dJVEhfSU5UIDEgKi8KIAogLyogRGVmaW5lZCBpZiBQVEhSRUFEX1NDT1BFX1NZU1RFTSBz
dXBwb3J0ZWQuICovCiAjZGVmaW5lIFBUSFJFQURfU1lTVEVNX1NDSEVEX1NVUFBPUlRFRCAxCkBA
IC0xMzE2LDcgKzEzMTgsNyBAQAogLyogI3VuZGVmIFBZTE9OR19CSVRTX0lOX0RJR0lUICovCiAK
IC8qIERlZmluZSBpZiB5b3Ugd2FudCB0byBjb2VyY2UgdGhlIEMgbG9jYWxlIHRvIGEgVVRGLTgg
YmFzZWQgbG9jYWxlICovCi0jZGVmaW5lIFBZX0NPRVJDRV9DX0xPQ0FMRSAxCisvKiAjZGVmaW5l
IFBZX0NPRVJDRV9DX0xPQ0FMRSAxICovIC8vVE9ETwogCiAvKiBEZWZpbmUgdG8gcHJpbnRmIGZv
cm1hdCBtb2RpZmllciBmb3IgUHlfc3NpemVfdCAqLwogI2RlZmluZSBQWV9GT1JNQVRfU0laRV9U
ICJ6IgpAQCAtMTMzMiw3ICsxMzM0LDcgQEAKIC8qICN1bmRlZiBQeV9ERUJVRyAqLwogCiAvKiBE
ZWZpbmVkIGlmIFB5dGhvbiBpcyBidWlsdCBhcyBhIHNoYXJlZCBsaWJyYXJ5LiAqLwotLyogI3Vu
ZGVmIFB5X0VOQUJMRV9TSEFSRUQgKi8KKyN1bmRlZiBQeV9FTkFCTEVfU0hBUkVECiAKIC8qIERl
ZmluZSBoYXNoIGFsZ29yaXRobSBmb3Igc3RyLCBieXRlcyBhbmQgbWVtb3J5dmlldy4gU2lwSGFz
aDI0OiAxLCBGTlY6IDIsCiAgICBleHRlcm5hbGx5IGRlZmluZWQ6IDAgKi8KQEAgLTEzNzgsNyAr
MTM4MCw3IEBACiAjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX0tFWV9UIDQKIAogLyogVGhlIHNpemUg
b2YgYHB0aHJlYWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KLSNkZWZpbmUgU0laRU9G
X1BUSFJFQURfVCA4CisjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX1QgMTYKIAogLyogVGhlIHNpemUg
b2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfU0hP
UlQgMgotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7j-0005qb-JV; Mon, 23 Sep 2019 09:59:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7h-0005qB-Vo
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:14 +0000
X-Inumbo-ID: c61867bd-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c61867bd-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:04 +0000 (UTC)
IronPort-SDR: 22Uh2ygMaD8Xy4ma9sIb/1IBRmZOMaJYT7ugYSpK7Zl0yGVAWYTj7MK7M7wgw9JmCc38X+KTOk
 LJgwq3MNtMng==
IronPort-PHdr: =?us-ascii?q?9a23=3AbcAoCxOFaTl3QC9DA04l6mtUPXoX/o7sNwtQ0K?=
 =?us-ascii?q?IMzox0I//4rarrMEGX3/hxlliBBdydt6sfzbCG+Pq4ESxYuNDd6SpEKMQNHz?=
 =?us-ascii?q?Y+yuwu1zQ6B8CEDUCpZNXLVAcdWPp4aVl+4nugOlJUEsutL3fbo3m18CJAUk?=
 =?us-ascii?q?6nbVk9Kev6AJPdgNqq3O6u5ZLTfx9IhD2gar9uMRm6twrcutQYjId4NKo8yR?=
 =?us-ascii?q?TFrmVUd+9LwW9kOU+fkwzz68ut4pJv6Thct+4k+8VdTaj0YqM0QKBCAj87KW?=
 =?us-ascii?q?41/srrtRfCTQuL+HQRV3gdnwRLDQbY8hz0R4/9vSTmuOVz3imaJtD2QqsvWT?=
 =?us-ascii?q?u+9adrSQTnhzkBOjUk7WzYkM1wjKZcoBK8uxxyxpPfbY+JOPZieK7WYNUXTn?=
 =?us-ascii?q?dDUMlMTSxMGoOyYZUSAeQPPuhWqIvyp1UVoBeiGQWhHv/jxyVUinPq26Axzu?=
 =?us-ascii?q?QvERvB3AwlB98DrnPUrM7pNKcTV+C+0a/GzSjbb/NLxDzw75THchc6ofGQXL?=
 =?us-ascii?q?Jwd9DdyU0yFwPdk1WdspDqPyiP2uQVrmiU9PBsVfioi2M+rQx6vzuhxt80h4?=
 =?us-ascii?q?XUiY8Z10rI+CZ5zYovO9G0Vkx2bcSqHZdIqi2XOJZ6TtkhTmxooio21LMLtJ?=
 =?us-ascii?q?ChcCQXx5kr2RjSYOGdfYeS+BLsTuORLC99hHJiZb2wmQ6/8VOlyu3gTsm010?=
 =?us-ascii?q?tKrjZdntnMqH8N0xvT59CZSvt45Eih2DKP2xrP5eFfO0w0jbfbJIU7zr4qkZ?=
 =?us-ascii?q?ofqUXDHinol0XqlKKaa0op9vWy5+nkYrjqvIGQO5F2hw3kPKkigsm/Dv45Mg?=
 =?us-ascii?q?gKUWib4+O81Lj78ELlR7VKleE2kqjfsJzAIcQbu7a5AxJO34k/8BazFS+m0M?=
 =?us-ascii?q?kDknUdNlJFfwqLj5L1NFHWPPD4EfC/jkypkDdqwfDGP7rhAo7UInfejrjhY6?=
 =?us-ascii?q?hy60pHxQo3zNBf/I5UCqobLPP8REDxssbUDhgjMwy72+znEsly1psCWWKTBa?=
 =?us-ascii?q?+UKK3SvkGM5uIuO+mDepUZuDbgK/gk+/HujGQ0mVkDcqa12ZsYcmu3Eu54LE?=
 =?us-ascii?q?WEeXDsmMsOEX8WvgoiS+znkEOCUTpJaHmvR60z/Dc7B5+8DYjdR4ChmqeO0z?=
 =?us-ascii?q?2mEZ1RZ2BGF0uBEWz0d4WZRvgAcjidLdN6kjAeSLihU5Qu2Qu0tA/9mPJbKb?=
 =?us-ascii?q?/R+ysZsomm2NVr6un7kRAp6ScyH8mblWaXQDJahGQNEhQxx7x+pwRZ10+emf?=
 =?us-ascii?q?xzhOdEFNoV4+5RTy8xLtjE0uY8EdekCVGJRcuAVFvzGobuOjo2VN9km9I=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4MLUyASKo0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQ?=
 =?us-ascii?q?BEwEBASaFXQyCOiKCbwMDeRA/ElcZgyIBgg6scoVMgzKBSIE0hzCGMT+DdWy?=
 =?us-ascii?q?FEYR0IgSWQpZKB4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBaB4Yixy?=
 =?us-ascii?q?CXD0BATGBBgEBjWUBAQ?=
X-IPAS-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQwEAQGBZ4MLUyASK?=
 =?us-ascii?q?o0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQBEwEBASaFXQyCO?=
 =?us-ascii?q?iKCbwMDeRA/ElcZgyIBgg6scoVMgzKBSIE0hzCGMT+DdWyFEYR0IgSWQpZKB?=
 =?us-ascii?q?4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBaB4YixyCXD0BATGBBgEBj?=
 =?us-ascii?q?WUBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854329"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id E1BD41A602F6;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id ipRpVsXdXojA; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id C84491A602EF;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 6Go_fWEdlEyC; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id AD2241A602EE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:49 +0300
Message-Id: <20190923095852.21872-12-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 11/14] Makefile.uk: Add
 rule for creating root filesystem
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIFB5dGhvbiBpbnRlcnByZXRlciBuZWVkcyBhIGZpbGVzeXN0ZW0gd2hlcmUgdG8ga2VlcCBp
dHMgbGlicmFyaWVzLiBUaGlzCnBhdGNoIGNyZWF0ZXMgYSBQeXRob24gdmlydHVhbCBlbnZpcm9u
bWVudCBhbmQgaW5zdGFsbHMgdGhlIFB5dGhvbiAzIHN0YW5kYXJkCmxpYnJhcnkgaW4gL2xpYi9w
eXRob24zLjcgZGlyZWN0b3J5LiBGb3IgY3JlYXRpbmcgdGhlIGZpbGVzeXN0ZW0gdGhlIGZvbGxv
d2luZwpjb21tYW5kIGhhcyB0byBiZSBydW46CgokIG1ha2UgcHl0aG9uLXJvb3RmcyBwYXRoPTxk
aXJlY3Rvcnk+CgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUg
Y2hhbmdlZCwgMjEgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFr
ZWZpbGUudWsKaW5kZXggZGM2ZTRhZC4uOGJjM2FjZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsK
KysrIGIvTWFrZWZpbGUudWsKQEAgLTQ2NCwzICs0NjQsMjQgQEAgTElCUFlUSE9OM19QUkVQQVJF
RF9ERVBTID0gXAogJChMSUJQWVRIT04zX0JVSUxEKS8ucHJlcGFyZWQ6ICQoTElCUFlUSE9OM19Q
UkVQQVJFRF9ERVBTKQogCiBVS19QUkVQQVJFICs9ICQoTElCUFlUSE9OM19CVUlMRCkvLnByZXBh
cmVkCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFJvb3QgZmlsZXN5c3RlbQorIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKworIyBCdWlsZCByb290IGZpbGVzeXN0ZW0gZm9yIFB5dGhvbiBp
bnRlcnByZXRlcgorUFlUSE9OX1JPT1RGUyA9ICQoQVBQX0JBU0UpLyQocGF0aCkKKworIyBDcmVh
dGUgdmlydHVhbCBlbnZpcm9ubWVudAorJChQWVRIT05fUk9PVEZTKS8ua2VlcDoKKwlweXRob24z
IC1tIHZlbnYgJChQWVRIT05fUk9PVEZTKSAmJiB0b3VjaCAkQAorCisjIENvbmZpZ3VyZSBvcmln
aW4KKyQoTElCUFlUSE9OM19TUkMpL2NvbmZpZy5zdGF0dXM6CisJY2QgJChMSUJQWVRIT04zX1NS
QykgJiYgLi9jb25maWd1cmUgLS1wcmVmaXg9JChzaGVsbCByZWFscGF0aCAkKEFQUF9CQVNFKS8k
KHBhdGgpKQorCisjIEluc3RhbGwgUHl0aG9uIHN0YW5kYXJkIGxpYnJhcnkgaW50byB2aXJ0dWFs
IGVudmlyb25tZW50CisuUEhPTlk6IHB5dGhvbi1yb290ZnMKK3B5dGhvbi1yb290ZnM6ICQoUFlU
SE9OX1JPT1RGUykvLmtlZXAgJChMSUJQWVRIT04zX1NSQykvY29uZmlnLnN0YXR1cworCWNkICQo
TElCUFlUSE9OM19TUkMpICYmIG1ha2UgbGliaW5zdGFsbAorCWNwICQoTElCUFlUSE9OM19CQVNF
KS9fc3lzY29uZmlnZGF0YS5weSAkKFBZVEhPTl9ST09URlMpL2xpYi9weXRob24zLjcvCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7k-0005r8-MD; Mon, 23 Sep 2019 09:59:16 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7j-0005qV-FB
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:15 +0000
X-Inumbo-ID: c5fb317e-dde8-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id c5fb317e-dde8-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 09:59:03 +0000 (UTC)
IronPort-SDR: 7PSUX7UvBb7XTW3tvCitf6kKDrhSaiht/phodxbnh6/JdvsfIdaZVA5znOX7YnXrqoJrJTLWdc
 9qxl3oR//N9Q==
IronPort-PHdr: =?us-ascii?q?9a23=3AqNeZPBJ2bSkUp/yLw9mcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfLf3xwZ3uMQTl6Ol3ixeRBMOHsqkC0bqd6fioGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF8JqsyxR?=
 =?us-ascii?q?fFvGdEcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWG?=
 =?us-ascii?q?hPUdtLVyFZAo2ycZYBAeQCM+hfrYb9qUADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsrDavwcIshZ?=
 =?us-ascii?q?PIhoIT0l3E7SV4wJo1Jd2/Tk53e9mkEIFftyycKoB4QdsiTnl1tCs117EKo5?=
 =?us-ascii?q?22cSgQxJg52RLSaeaLfoaQ7h7+W+udPC10iXFldb6lmRq//0atxvfhWsS7zl?=
 =?us-ascii?q?pHqDdOnMPWuXAXzRPT79CKSv56/ki8xzmCzxvT6uRYIUAskqrbNoIhzqYwlp?=
 =?us-ascii?q?UNtUTDGTf7mFvzjKCMd0Uk/vKk5Pj8Yrn8vp+cKpR7hhvkMqQpgsC/AOI4PR?=
 =?us-ascii?q?YSX2WD5Oix26Dv8Vf6TbhKlPE6jLfVvZLAKckVvqK5BhVa0ocn6xaxFTem19?=
 =?us-ascii?q?EYkGEbI1JCYxKHk4npO1fULPD8EPe/m0msnSx3yPDdJLHhGojNIWPZnLf7er?=
 =?us-ascii?q?Zx81RcxxYrzdBD+5JUDakMIPfyWk/3tdzYCQQ5PxWpzOn5FtVyyIceVHmLAq?=
 =?us-ascii?q?+YK6PSrUSI6vggIuaSYo8ZojH9K+Iq5/T2l382hUcdfbW13ZsQcH24EOppI0?=
 =?us-ascii?q?GYYXr0nNgNC2cKvhc/TOP2iV2PSjhTaGiuUKI4/D40E5iqApneRoq1mryOwD?=
 =?us-ascii?q?+7HoFKZmBBEl2MD3PoeJ+ZVPgUci2SJNJukiYaWrigUYMuzguhuxL9y7pmM+?=
 =?us-ascii?q?rZ4TYYtY7+1Ndo/eHcjw099SduA8SAy2GCVHt4nnkPR2x+4KcqpE17y1CYlK?=
 =?us-ascii?q?R1nfFcPdhS/O9SFBc3M9jb1eMpJcr1X1fqecyVSVDuZsi+HHllRdUq394IJU?=
 =?us-ascii?q?JgA8iKhQuFxzegRaUSwe/YTKco+77RiiCib/12zGzLgfEs?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AVAAAwlohdjAPjVY1lGwEBAQEDAQE?=
 =?us-ascii?q?BDAMBAQGBVgMBAQELAYFzgRdTIBIqjR6IH36YOIFnCQEBATMHAQIBAYFLgnQ?=
 =?us-ascii?q?Cgzc3Bg4CAwkBAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DAxpfECAfElcZgld?=
 =?us-ascii?q?LAYIOC6xnhUyDMoFIgTQBhy+DO4J2P4ERgl2DOxkEgSQUhWgiBI0RiBKBH5Z?=
 =?us-ascii?q?KB4IlZQSGHIkvhEongmVDlX0ZqG83IYFZMxpzgmwJRxAUgWg2iDaCZoJcPQE?=
 =?us-ascii?q?BMQGBBQEBixGCVAEB?=
X-IPAS-Result: =?us-ascii?q?A2AVAAAwlohdjAPjVY1lGwEBAQEDAQEBDAMBAQGBVgMBA?=
 =?us-ascii?q?QELAYFzgRdTIBIqjR6IH36YOIFnCQEBATMHAQIBAYFLgnQCgzc3Bg4CAwkBA?=
 =?us-ascii?q?QUBAQEBAQUEARMBAQEmhV0Mgjoigm8DAxpfECAfElcZgldLAYIOC6xnhUyDM?=
 =?us-ascii?q?oFIgTQBhy+DO4J2P4ERgl2DOxkEgSQUhWgiBI0RiBKBH5ZKB4IlZQSGHIkvh?=
 =?us-ascii?q?EongmVDlX0ZqG83IYFZMxpzgmwJRxAUgWg2iDaCZoJcPQEBMQGBBQEBixGCV?=
 =?us-ascii?q?AEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854321"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 613281A602EF;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id 9Pq4-3tiWMjg; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 42B2B1A602E4;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id x0W7A0Fi3z8K; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 2AC191A602E8;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:40 +0300
Message-Id: <20190923095852.21872-3-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 02/14] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgNDYyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0NjIgaW5z
ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCgpkaWZmIC0tZ2l0IGEv
TWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45NTExOWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUudWsKQEAgLTAsMCArMSw0
NjIgQEAKKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyMKKyMgIHB5
dGhvbjMgTWFrZWZpbGUudWsKKyMKKyMgIEF1dGhvcnM6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KKyMgICAgICAgICAgIENvc3RpbiBMdXB1
IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZl
cnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjCisjICAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyAgICAgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyAg
VEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4K
KyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnB5dGhvbjMs
JChDT05GSUdfTElCUFlUSE9OMykpKQorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJweXRob24z
X2NvcmUsJChDT05GSUdfTElCUFlUSE9OMykpKQorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJw
eXRob24zX2V4dGVuc2lvbnMsJChDT05GSUdfTElCUFlUSE9OMykpKQorCisjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworIyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCUFlUSE9O
M19WRVJTSU9OPTMuNworTElCUFlUSE9OM19SRVZJU0lPTj00CitMSUJQWVRIT04zX1ZFUlNJT05f
TE9ORz0kKExJQlBZVEhPTjNfVkVSU0lPTikuJChMSUJQWVRIT04zX1JFVklTSU9OKQorTElCUFlU
SE9OM19CQVNFTkFNRT1QeXRob24tJChMSUJQWVRIT04zX1ZFUlNJT05fTE9ORykKK0xJQlBZVEhP
TjNfVVJMPWh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi8kKExJQlBZVEhPTjNfVkVS
U0lPTl9MT05HKS8kKExJQlBZVEhPTjNfQkFTRU5BTUUpLnRnegorTElCUFlUSE9OM19QQVRDSERJ
Uj0kKExJQlBZVEhPTjNfQkFTRSkvcGF0Y2hlcworJChldmFsICQoY2FsbCBmZXRjaCxsaWJweXRo
b24zLCQoTElCUFlUSE9OM19VUkwpKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gsbGlicHl0aG9uMywk
KExJQlBZVEhPTjNfUEFUQ0hESVIpLCQoTElCUFlUSE9OM19CQVNFTkFNRSkpKQorCisjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIworIyBIZWxwZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElC
UFlUSE9OM19TUkMgPSAkKExJQlBZVEhPTjNfT1JJR0lOKS8kKExJQlBZVEhPTjNfQkFTRU5BTUUp
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnkgaW5jbHVkZXMKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCitMSUJQWVRIT04zX0dMT0JBTF9JTkNMVURFUy15ICs9IC1JJChMSUJQ
WVRIT04zX0JBU0UpL2luY2x1ZGUKK0xJQlBZVEhPTjNfR0xPQkFMX0lOQ0xVREVTLXkgKz0gLUkk
KExJQlBZVEhPTjNfU1JDKQorTElCUFlUSE9OM19HTE9CQUxfSU5DTFVERVMteSArPSAtSSQoTElC
UFlUSE9OM19TUkMpL0luY2x1ZGUKK0NJTkNMVURFUy15ICAgKz0gJChMSUJQWVRIT04zX0dMT0JB
TF9JTkNMVURFUy15KQorQ1hYSU5DTFVERVMteSArPSAkKExJQlBZVEhPTjNfR0xPQkFMX0lOQ0xV
REVTLXkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbW1vbiBmbGFncworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgU3VwcHJlc3NlZCBmbGFncworU1VQUFJFU1NfRkxBR1MgKz0g
LVduby11bnVzZWQtcGFyYW1ldGVyIFwKKwktV25vLXVudXNlZC12YXJpYWJsZSAtV25vLXVudXNl
ZC12YWx1ZSAtV25vLXVudXNlZC1mdW5jdGlvbiBcCisJLVduby1taXNzaW5nLWZpZWxkLWluaXRp
YWxpemVycyAtV25vLWltcGxpY2l0LWZhbGx0aHJvdWdoIFwKKwktV25vLWNhc3QtZnVuY3Rpb24t
dHlwZSAtV25vLXN0cmluZ29wLXRydW5jYXRpb24gXAorCS1Xbm8tY2hhci1zdWJzY3JpcHRzIC1X
bm8tc2lnbi1jb21wYXJlCitMSUJQWVRIT04zX1NVUFJFU1NfQ0ZMQUdTLXkgICArPSAkKFNVUFBS
RVNTX0ZMQUdTKSAtV25vLXBvaW50ZXItdG8taW50LWNhc3QgLVduby1pbnQtdG8tcG9pbnRlci1j
YXN0CitMSUJQWVRIT04zX1NVUFJFU1NfQ1hYRkxBR1MteSArPSAkKFNVUFBSRVNTX0ZMQUdTKQor
CisjIENvbW1vbiBmbGFncworTElCUFlUSE9OM19DT01NT05fRkxBR1MteSAgICArPSAtZndyYXB2
CitMSUJQWVRIT04zX0NPTU1PTl9DRkxBR1MteSAgICs9ICQoTElCUFlUSE9OM19DT01NT05fRkxB
R1MteSkKK0xJQlBZVEhPTjNfQ09NTU9OX0NYWEZMQUdTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1P
Tl9GTEFHUy15KQorCisjIENvbW1vbiBwcmVwcm9jZXNzaW5nIHN5bWJvbHMKK0xJQlBZVEhPTjNf
Q09NTU9OX0RFRklORVMteSAgKz0gLUROREVCVUcKK0xJQlBZVEhPTjNfQ09NTU9OX0NGTEFHUy15
ICAgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9ERUZJTkVTLXkpCitMSUJQWVRIT04zX0NPTU1PTl9D
WFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19DT01NT05fREVGSU5FUy15KQorCisjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBHbHVlIGNvZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElu
Y2x1ZGUgcGF0aHMKK0xJQlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09N
TU9OX0lOQ0xVREVTLXkpCitMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04z
X0NPTU1PTl9JTkNMVURFUy15KQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQeXRob24g
Y29yZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW5jbHVkZSBwYXRocworTElCUFlUSE9O
M19DT1JFX0NPTU1PTl9JTkNMVURFUy15ICs9ICQoTElCUFlUSE9OM19DT01NT05fSU5DTFVERVMt
eSkKK0xJQlBZVEhPTjNfQ09SRV9DSU5DTFVERVMteSAgICs9ICQoTElCUFlUSE9OM19DT1JFX0NP
TU1PTl9JTkNMVURFUy15KQorTElCUFlUSE9OM19DT1JFX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQ
WVRIT04zX0NPUkVfQ09NTU9OX0lOQ0xVREVTLXkpCisKKyMgU3VwcmVzc2VkIGZsYWdzCitMSUJQ
WVRIT04zX0NPUkVfQ0ZMQUdTLXkgICArPSAkKExJQlBZVEhPTjNfU1VQUkVTU19DRkxBR1MteSkK
K0xJQlBZVEhPTjNfQ09SRV9DWFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19TVVBSRVNTX0NYWEZM
QUdTLXkpCisKKyMgUHJlcHJvY2Vzc2luZyBzeW1ib2xzCitMSUJQWVRIT04zX0NPUkVfREVGSU5F
Uy15ICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMteSkgLURQeV9CVUlMRF9DT1JFIC1E
UHlfQlVJTERfQ09SRV9CVUlMVElOCitMSUJQWVRIT04zX0NPUkVfQ0ZMQUdTLXkgICArPSAkKExJ
QlBZVEhPTjNfQ09SRV9ERUZJTkVTLXkpCitMSUJQWVRIT04zX0NPUkVfQ1hYRkxBR1MteSArPSAk
KExJQlBZVEhPTjNfQ09SRV9ERUZJTkVTLXkpCisKKyNMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL1Byb2dyYW1zL3B5dGhvbi5jCisKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFyc2VyL2FjY2VsZXIuYworTElCUFlUSE9OM19D
T1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvYml0c2V0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFyc2VyL2ZpcnN0c2V0cy5jCitM
SUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9ncmFtbWFy
MS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9n
cmFtbWFyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFy
c2VyL2xpc3Rub2RlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvUGFyc2VyL21ldGFncmFtbWFyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvUGFyc2VyL215cmVhZGxpbmUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvbm9kZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15
ICs9ICQoTElCUFlUSE9OM19TUkMpL1BhcnNlci9wYXJzZXIuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvcGFyc2V0b2suYworI0xJQlBZVEhPTjNf
Q09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUGFyc2VyL3BhcnNldG9rX3BnZW4uYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvcGdlbi5j
CisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJzZXIvcGdl
bm1haW4uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QYXJz
ZXIvcHJpbnRncmFtbWFyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvUGFyc2VyL3Rva2VuaXplci5jCisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9QYXJzZXIvdG9rZW5pemVyX3BnZW4uYworCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvYWJzdHJhY3QuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2FjY3UuYworTElCUFlU
SE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2Jvb2xvYmplY3Qu
YworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2J5
dGVhcnJheW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL09iamVjdHMvYnl0ZXNvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NhbGwuYworTElCUFlUSE9OM19DT1JF
X1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NhcHN1bGUuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NlbGxvYmplY3QuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2NsYXNz
b2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2Jq
ZWN0cy9jb2Rlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvT2JqZWN0cy9jb21wbGV4b2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9kZXNjcm9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvZGljdG9iamVjdC5jCitMSUJQWVRI
T04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvZW51bW9iamVjdC5j
CitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvZXhj
ZXB0aW9ucy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09i
amVjdHMvZmlsZW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL09iamVjdHMvZmxvYXRvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9mdW5jb2JqZWN0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9nZW5vYmplY3QuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL2l0ZXJv
YmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmpl
Y3RzL2xpc3RvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9PYmplY3RzL2xvbmdvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9PYmplY3RzL21lbW9yeW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9tb2R1bGVvYmplY3Qu
YworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL25h
bWVzcGFjZW9iamVjdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL09iamVjdHMvb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvT2JqZWN0cy9vYm1hbGxvYy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL09iamVjdHMvb2RpY3RvYmplY3QuYworTElCUFlUSE9OM19DT1JFX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy9zZXRvYmplY3QuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3NsaWNl
b2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2Jq
ZWN0cy9zdHJ1Y3RzZXEuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9PYmplY3RzL3R1cGxlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChM
SUJQWVRIT04zX1NSQykvT2JqZWN0cy90eXBlb2JqZWN0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvT2JqZWN0cy91bmljb2RlY3R5cGUuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3VuaWNvZGVvYmplY3Qu
YworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9PYmplY3RzL3dl
YWtyZWZvYmplY3QuYworCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1B5dGhvbi9hc2RsLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvUHl0aG9uL2FzdC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL1B5dGhvbi9hc3Rfb3B0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvUHl0aG9uL2FzdF91bnBhcnNlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2JsdGlubW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09S
RV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2Jvb3RzdHJhcF9oYXNoLmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2NldmFsLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2NvZGVj
cy5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9j
b21waWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0
aG9uL2NvbnRleHQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vZHRvYS5jCisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9QeXRob24vZHVwMi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL1B5dGhvbi9keW5hbWljX2Fubm90YXRpb25zLmMKKyNMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9keW5sb2FkX2RsLmMKKyNMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9keW5sb2FkX3NobGliLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2R5bmxv
YWRfc3R1Yi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5
dGhvbi9lcnJvcnMuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vZmlsZXV0aWxzLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2Zyb3plbi5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9mcm96ZW5tYWluLmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2Z1dHVyZS5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9nZXRhcmdzLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2dldGNv
bXBpbGVyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0
aG9uL2dldGNvcHlyaWdodC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL1B5dGhvbi9nZXRvcHQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9QeXRob24vZ2V0cGxhdGZvcm0uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vZ2V0dmVyc2lvbi5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9ncmFtaW5pdC5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9oYW10LmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL2ltcG9ydC5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9pbXBvcnRkbC5j
CitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9tYXJz
aGFsLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9u
L21vZHN1cHBvcnQuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vbXlzbnByaW50Zi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL1B5dGhvbi9teXN0cnRvdWwuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9QeXRob24vcGF0aGNvbmZpZy5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9wZWVwaG9sZS5jCitMSUJQWVRIT04zX0NP
UkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhvbi9weWFyZW5hLmMKK0xJQlBZVEhP
TjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5Y3R5cGUuYworTElC
UFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHlmcGUuYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHloYXNo
LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5
bGlmZWN5Y2xlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
UHl0aG9uL3B5bWF0aC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1B5dGhvbi9weXN0YXRlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvUHl0aG9uL3B5c3RyY21wLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChM
SUJQWVRIT04zX1NSQykvUHl0aG9uL3B5c3RyaGV4LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5c3RydG9kLmMKK0xJQlBZVEhPTjNfQ09SRV9T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL1B5dGhvbi1hc3QuYworTElCUFlUSE9O
M19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vcHl0aG9ucnVuLmMKK0xJ
QlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3B5dGltZS5j
CisjTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9QeXRob24vc3Ry
ZHVwLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9u
L3N0cnVjdG1lbWJlci5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL1B5dGhvbi9zeW10YWJsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL1B5dGhvbi9zeXNtb2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NZU01PRFVMRV9G
TEFHUy15ICs9IC1EQUJJRkxBR1M9JyJtIicgLURNVUxUSUFSQ0g9XCJ4ODZfNjQtbGludXgtZ251
XCIKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvUHl0aG9uL3Ro
cmVhZC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL1B5dGhv
bi90cmFjZWJhY2suYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9QeXRob24vX3dhcm5pbmdzLmMKKworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL19hYmMuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2NvZGVjc21vZHVsZS5jCitMSUJQWVRI
T04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2NvbGxlY3Rpb25z
bW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9k
dWxlcy9lcnJub21vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKK0xJQlBZVEhPTjNf
Q09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9nY21vZHVsZS5jCitMSUJQ
WVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvZ2V0YnVpbGRp
bmZvLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9nZXRwYXRoLmMKK0xJQlBZVEhPTjNfQ09SRV9HRVRQQVRIX0ZMQUdTLXkgKz0gLURQWVRIT05Q
QVRIPSciL2xpYi9weXRob24kKExJQlBZVEhPTjNfVkVSU0lPTikiJyBcCisJLURQUkVGSVg9JyIi
JyBcCisJLURFWEVDX1BSRUZJWD0nIiInIFwKKwktRFZFUlNJT049JyIkKExJQlBZVEhPTjNfVkVS
U0lPTikiJyBcCisJLURWUEFUSD0nIiInCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvaGFzaHRhYmxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2lvL2J5dGVzaW8uYwor
TElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19pby9m
aWxlaW8uYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19pby9pb2Jhc2UuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19pby9zdHJpbmdpby5jCitMSUJQWVRIT04zX0NPUkVf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2lvL3RleHRpby5jCitMSUJQWVRI
T04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvaXRlcnRvb2xzbW9k
dWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fbG9jYWxlbW9kdWxlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9tYWluLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fbWF0aC5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX29wZXJhdG9yLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCitMSUJQWVRIT04zX0NP
UkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvcHdkbW9kdWxlLmMKK0xJQlBZ
VEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9zaWduYWxtb2R1
bGUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVz
L19zcmUuYworTElCUFlUSE9OM19DT1JFX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19zdGF0LmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jCitMSUJQWVRIT04zX0NPUkVfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvdGltZW1vZHVsZS5jCitMSUJQWVRIT04z
X0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3RyYWNlbWFsbG9jLmMK
K0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fd2Vh
a3JlZi5jCitMSUJQWVRIT04zX0NPUkVfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMveHhzdWJ0eXBlLmMKK0xJQlBZVEhPTjNfQ09SRV9TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NS
QykvTW9kdWxlcy96aXBpbXBvcnQuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQeXRo
b24gZXh0ZW5zaW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSW5jbHVkZSBwYXRocwor
TElCUFlUSE9OM19FWFRFTlNJT05TX0NPTU1PTl9JTkNMVURFUy15ICs9ICQoTElCUFlUSE9OM19D
T01NT05fSU5DTFVERVMteSkKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19DSU5DTFVERVMteSAgICs9
ICQoTElCUFlUSE9OM19FWFRFTlNJT05TX0NPTU1PTl9JTkNMVURFUy15KQorTElCUFlUSE9OM19F
WFRFTlNJT05TX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ09NTU9O
X0lOQ0xVREVTLXkpCisKKyMgU3VwcmVzc2VkIGZsYWdzCitMSUJQWVRIT04zX0VYVEVOU0lPTlNf
Q0ZMQUdTLXkgICArPSAkKExJQlBZVEhPTjNfU1VQUkVTU19DRkxBR1MteSkKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19DWFhGTEFHUy15ICs9ICQoTElCUFlUSE9OM19TVVBSRVNTX0NYWEZMQUdTLXkp
CisKKyMgUHJlcHJvY2Vzc2luZyBzeW1ib2xzCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfREVGSU5F
Uy15ICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMteSkgLURQeV9CVUlMRF9FWFRFTlNJ
T05TCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ0ZMQUdTLXkgICArPSAkKExJQlBZVEhPTjNfRVhU
RU5TSU9OU19ERUZJTkVTLXkpCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfQ1hYRkxBR1MteSArPSAk
KExJQlBZVEhPTjNfRVhURU5TSU9OU19ERUZJTkVTLXkpCisKK0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9hcnJheW1vZHVsZS5jCitMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2Fz
eW5jaW9tb2R1bGUuYworIyBBdWRpbzogTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2F1ZGlvb3AuYworTElCUFlUSE9OM19FWFRFTlNJT05T
X1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2JpbmFzY2lpLmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmlzZWN0
bW9kdWxlLmMKK2lmZXEgKCQoQ09ORklHX0xJQklOVEVMX0lOVFJJTlNJQ1MpLHkpCitMSUJQWVRI
T04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2JsYWtl
Mi9ibGFrZTJiX2ltcGwuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL19ibGFrZTIvYmxha2UybW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmxha2UyL2JsYWtl
MnNfaW1wbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL01vZHVsZXMvX2JsYWtlMi9pbXBsL2JsYWtlMmIuYworI0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fYmxha2UyL2ltcGwvYmxha2Uy
Yi1yZWYuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9Nb2R1bGVzL19ibGFrZTIvaW1wbC9ibGFrZTJzLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2JsYWtlMi9pbXBsL2JsYWtlMnMt
cmVmLmMKK2VuZGlmCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19iejJtb2R1bGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKK0xJ
QlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9j
amtjb2RlY3MvX2NvZGVjc19oay5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jCitMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvY2pr
Y29kZWNzL19jb2RlY3NfanAuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9jamtjb2RlY3Mv
X2NvZGVjc190dy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9jbWF0aG1vZHVsZS5j
CitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMvX2NvbnRleHR2YXJzbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3N2LmMKK2lmZXEg
KCQoQ09ORklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX0NUWVBFUykseSkKK0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2NhbGxi
YWNrcy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15
ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYworTElCUFlUSE9O
M19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMv
X2N0eXBlcy5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMKKyNMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9kYXJ3aW4vZGxm
Y25fc2ltcGxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYworI0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZm
aV9tc3ZjL3ByZXBfY2lmLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy90eXBlcy5jCisjTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlw
ZXMvbGliZmZpX21zdmMvd2luMzIuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gvZmZpLmMKKyNMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2N0
eXBlcy9saWJmZmlfb3N4L3Bvd2VycGMvcHBjLWZmaV9kYXJ3aW4uYworI0xJQlBZVEhPTjNfRVhU
RU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZm
aV9vc3gvdHlwZXMuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCisjTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19j
dHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaV9kYXJ3aW4uYworTElCUFlUSE9OM19FWFRFTlNJ
T05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19jdHlwZXMvbWFsbG9jX2Ns
b3N1cmUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JD
KS9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCitlbmRpZgorI0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMKKyNM
SUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMv
X2N1cnNlc19wYW5lbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlU
SE9OM19TUkMpL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RibW1vZHVsZS5jCitpZmVx
ICgkKENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9MSUJNUERFQykseSkKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19DSU5DTFVERVMteSArPSAtSSQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2Rl
Y2ltYWwvbGlibXBkZWMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19DRkxBR1MteSAgICArPSAtRENP
TkZJR182NCAtREFOU0kKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRI
T04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCitMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMv
YmFzZWFyaXRoLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9jb25zdGFudHMuYworTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFsL2xp
Ym1wZGVjL2NvbnRleHQuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZ
VEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2NvbnZvbHV0ZS5jCitMSUJQWVRI
T04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2lt
YWwvbGlibXBkZWMvY3J0LmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9kaWZyYWRpeDIuYworTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNp
bWFsL2xpYm1wZGVjL2ZudC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvZm91cnN0ZXAuYworTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNp
bWFsL2xpYm1wZGVjL2lvLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tZW1vcnkuYworTElCUFlUSE9O
M19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19kZWNpbWFs
L2xpYm1wZGVjL21wZGVjaW1hbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbnVtYmVydGhlb3J5LmMK
K0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxl
cy9fZGVjaW1hbC9saWJtcGRlYy9zaXhzdGVwLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNT
LXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy90cmFuc3Bv
c2UuYworZW5kaWYKK2lmZXEgKCQoQ09ORklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX0VYUEFUKSx5
KQorTElCUFlUSE9OM19FWFRFTlNJT05TX0NJTkNMVURFUy15ICs9IC1JJChMSUJQWVRIT04zX1NS
QykvTW9kdWxlcy9leHBhdAorTElCUFlUSE9OM19FWFRFTlNJT05TX0NGTEFHUy15ICAgICs9IC1E
SEFWRV9FWFBBVF9DT05GSUdfSD0xIC1EWE1MX1BPT1JfRU5UUk9QWT0xIC1EVVNFX1BZRVhQQVRf
Q0FQSQorTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL19lbGVtZW50dHJlZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvZXhwYXQvbG9hZGxpYnJhcnkuYworTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2V4cGF0L3htbHBh
cnNlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9leHBhdC94bWxyb2xlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9leHBhdC94bWx0b2suYworTElCUFlUSE9OM19FWFRF
TlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL2V4cGF0L3htbHRva19p
bXBsLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9leHBhdC94bWx0b2tfbnMuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSAr
PSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3B5ZXhwYXQuYworZW5kaWYKK0xJQlBZVEhPTjNf
RVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9mY250bG1vZHVs
ZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL19nZGJtbW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvZ2V0YWRkcmluZm8uYworI0xJQlBZVEhPTjNfRVhURU5T
SU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9nZXRuYW1laW5mby5jCisj
IFRPRE8gZW5hYmxlIExJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X1NSQykvTW9kdWxlcy9ncnBtb2R1bGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MtJChD
T05GSUdfTElCUFlUSE9OM19FWFRFTlNJT05fU1NMKSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19oYXNob3BlbnNzbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9O
U19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fanNvbi5jCitMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX2xzcHJvZi5j
CisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL19sem1hbW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQ
WVRIT04zX1NSQykvTW9kdWxlcy9tYXRobW9kdWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9tZDVtb2R1bGUuYworIyBUT0RPIGVu
YWJsZSBMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvbW1hcG1vZHVsZS5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJ
QlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMK
KyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVs
ZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19T
UkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9uaXNtb2R1bGUuYworTElCUFlUSE9O
M19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19vcGNvZGUu
YworIyBBdWRpbzogTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKKyMgV2luZG93czogTElCUFlUSE9OM19FWFRFTlNJ
T05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL292ZXJsYXBwZWQuYworTElC
UFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3Bh
cnNlcm1vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3BpY2tsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9
ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCitMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3F1ZXVlbW9k
dWxlLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9fcmFuZG9tbW9kdWxlLmMKKyMgVE9ETyBlbmFibGUgTElCUFlUSE9OM19FWFRFTlNJ
T05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3JlYWRsaW5lLmMKK0xJQlBZ
VEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9yZXNv
dXJjZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvcm90YXRpbmd0cmVlLmMKKyMgaU9TOiBMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NjcHJveHkuYworTElCUFlUSE9OM19F
WFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3NlbGVjdG1vZHVs
ZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvc2hhMW1vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElC
UFlUSE9OM19TUkMpL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NoYTMva2NwL0tlY2Nha0hh
c2guYworI0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykv
TW9kdWxlcy9fc2hhMy9rY3AvS2VjY2FrUC0xNjAwLWlucGxhY2UzMkJJLmMKKyNMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3NoYTMva2Nw
L0tlY2Nha1AtMTYwMC1vcHQ2NC5jCisjTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zaGEzL2tjcC9LZWNjYWtTcG9uZ2UuYworTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zaGEz
L3NoYTNtb2R1bGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKyMgVE9ETyBl
bmFibGUgTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9N
b2R1bGVzL3Nwd2Rtb2R1bGUuYworaWZlcSAoJChDT05GSUdfTElCUFlUSE9OM19FWFRFTlNJT05f
U1FMSVRFKSx5KQorTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNf
U1JDKS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1Mt
eSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCitMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3Nx
bGl0ZS9jdXJzb3IuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhP
TjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvbWljcm9wcm90b2NvbHMuYworTElCUFlUSE9OM19FWFRF
TlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxl
LmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9k
dWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NS
Q1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL19zcWxpdGUvcm93LmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9fc3FsaXRl
L3N0YXRlbWVudC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKK2VuZGlmCitMSUJQWVRIT04zX0VYVEVOU0lP
TlNfU1JDUy0kKENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9TU0wpICs9ICQoTElCUFlUSE9O
M19TUkMpL01vZHVsZXMvX3NzbC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3N0cnVjdC5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKKyNMSUJQ
WVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvdGVy
bWlvcy5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMp
L01vZHVsZXMvX3Rlc3RidWZmZXIuYworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAk
KExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCitMSUJQWVRIT04zX0VY
VEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3Rlc3RpbXBvcnRt
dWx0aXBsZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19T
UkMpL01vZHVsZXMvX3Rlc3RtdWx0aXBoYXNlLmMKKyNMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JD
Uy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvdGthcHBpbml0LmMKKyNMSUJQWVRIT04z
X0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3RraW50ZXIu
YworTElCUFlUSE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1
bGVzL3VuaWNvZGVkYXRhLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLSQoQ09ORklHX0xJ
QlBZVEhPTjNfRVhURU5TSU9OX1VVSUQpICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3V1
aWRtb2R1bGUuYworIyBXaW5kb3dzOiBMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQo
TElCUFlUSE9OM19TUkMpL01vZHVsZXMvX3dpbmFwaS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNf
U1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01vZHVsZXMveHhsaW1pdGVkLmMKK0xJQlBZVEhP
TjNfRVhURU5TSU9OU19TUkNTLXkgKz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy94eG1vZHVs
ZS5jCitMSUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy15ICs9ICQoTElCUFlUSE9OM19TUkMpL01v
ZHVsZXMvX3h4dGVzdGZ1enovZnV6emVyLmMKK0xJQlBZVEhPTjNfRVhURU5TSU9OU19TUkNTLXkg
Kz0gJChMSUJQWVRIT04zX1NSQykvTW9kdWxlcy9feHh0ZXN0ZnV6ei9feHh0ZXN0ZnV6ei5jCitM
SUJQWVRIT04zX0VYVEVOU0lPTlNfU1JDUy0kKENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9a
TElCKSArPSAkKExJQlBZVEhPTjNfU1JDKS9Nb2R1bGVzL3psaWJtb2R1bGUuYworCisjTElCUFlU
SE9OM19FWFRFTlNJT05TX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfU1JDKS9NaXNjL2NvdmVyaXR5
X21vZGVsLmMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJlcGFyZSBydWxlcworIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyBDdXN0b21pemUgY29uZmlnOiBjb25maWd1cmUgc3Rh
Y2sgc2l6ZQorJChBUFBfQkFTRSkvLmNvbmZpZy5vcmlnOiAkKEFQUF9CQVNFKS8uY29uZmlnCisJ
JChjYWxsIHZlcmJvc2VfY21kLENPTkZJRyxsaWJweXRob24zOiAkKG5vdGRpciAkQCksIFwKKwkJ
Y3AgJChBUFBfQkFTRSkvLmNvbmZpZyAkQCAmJiBcCisJCXNlZCAtaSAncy9eQ09ORklHX1NUQUNL
X1NJWkVfUEFHRV9PUkRFUj0uKiQkL0NPTkZJR19TVEFDS19TSVpFX1BBR0VfT1JERVI9MTAvZycg
JChBUFBfQkFTRSkvLmNvbmZpZykKKworTElCUFlUSE9OM19QUkVQQVJFRF9ERVBTID0gXAorCSQo
QVBQX0JBU0UpLy5jb25maWcub3JpZyBcCisKKyQoTElCUFlUSE9OM19CVUlMRCkvLnByZXBhcmVk
OiAkKExJQlBZVEhPTjNfUFJFUEFSRURfREVQUykKKworVUtfUFJFUEFSRSArPSAkKExJQlBZVEhP
TjNfQlVJTEQpLy5wcmVwYXJlZAotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7o-0005sF-PY; Mon, 23 Sep 2019 09:59:20 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7m-0005rr-VZ
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:19 +0000
X-Inumbo-ID: c4e49c62-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c4e49c62-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:02 +0000 (UTC)
IronPort-SDR: nPI7UAYJFnJ5RtLhkHJ66NPUON60J27rfCZoXk537coXlPq4f6BEDi/PYFT43rDV5NRgtwn783
 GZFjJwu0y0GQ==
IronPort-PHdr: =?us-ascii?q?9a23=3AvSbU7xUA8d2Iwlt7wCW56J6NbXzV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbRKEt8tkgFKBZ4jH8fUM07OQ7/m7HzZQqszZ+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvHdFeOtayX10KVmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQe3Ce/z1jNFnGP60Lcm3+?=
 =?us-ascii?q?g9FwzNwQwuH8gJsHTRtNj4KqASUfupzKnJyzXIcvVY2Srl6IjVbxsspu2DXb?=
 =?us-ascii?q?VrccrNyEkvERnJjlGNqYz9IjOYzfgCs3OB4+p4SOKgkHQrqxt2ojW2wMonl4?=
 =?us-ascii?q?fHhoUQyl/e9CV5xp44JcWiSEFle9KkEZ1QuieHPIV1WsMvW3xktSknxrEcup?=
 =?us-ascii?q?O2fDIGxIo5yxPdcfCKfZCE7g/sWeqMOzt1h3JodKihixu8/0Ws0PDwW8aq3F?=
 =?us-ascii?q?tMsyFLiMPDtmoX2BzW8sWHT/x98Vq/1juXzADT7/1EIVgzlarGN54t2r4wmY?=
 =?us-ascii?q?QXsUTEBiL2hkD2g7WXdkUg4OSn9//nbq/+pp+BLIB4kBv+MqM2lsy+B+Q3LB?=
 =?us-ascii?q?QOUnCG9emzybHv5070TbVQgvEojKXUsorWKMoDqq68GQBV04Ij6xilDzeh1d?=
 =?us-ascii?q?QVhWUILFVeeBKbjojpPUvCIPTlDfennlShiytkx+vcMr35H5XCNWLPkK3mfb?=
 =?us-ascii?q?pl8U5T1BIzzcxD55JTErwBJfPzWknwtNzfFR81KhG7zPj5CNpj0oMTQmaPAq?=
 =?us-ascii?q?6CMKPOql+E/O0uLPeKZIMPvzb9Mfcl7eb0jXAlgV8dYbWp3ZwPZXC2APtmJ0?=
 =?us-ascii?q?SZYWLyjdsbEWcKows+Q/DriFCZVz5ceWq9X6Ym6T4gEo6pE5rDTJi3gLOdxC?=
 =?us-ascii?q?e7AoFWZmdeB1CSFXfnbZiLVO8WZyKUP8BhiCILVbm7R4A6zx6hqQj6y7t6Lu?=
 =?us-ascii?q?fP4S0YqY/j28Vv6+LJiR4y7iZ4D9mF026WVW10hGQIFHcK2/V6oEp8zUzG3a?=
 =?us-ascii?q?VmjvhwEd1I++gPQgo8c5nGwL9UEdf3DynGZcuITh6CX827SWU6ScktwtlIZ1?=
 =?us-ascii?q?tlBv2plVbbwiDsGbhDxO/DP4A97q+Jhyu5HM160XuTjKQ=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2CRAQAwlohdjAPjVY1lHQEBBQEMBQG?=
 =?us-ascii?q?BZ4MLUyASKo0eiB+bHQkBAQEpEQECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAE?=
 =?us-ascii?q?TAQEBJoVdDII6IoJvAwMaXxAgHxJXGYMiAYIOrHKFTIMygUiBNIcwhjE/gRG?=
 =?us-ascii?q?DUIoFIgSNIYkhlkoHgiVlBIYcjXkngyiVfS2jI4U4OCCBWTMaUoMNCUcQFIF?=
 =?us-ascii?q?aDgmBQIRliAA9AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2CRAQAwlohdjAPjVY1lHQEBBQEMBQGBZ4MLUyASKo0ei?=
 =?us-ascii?q?B+bHQkBAQEpEQECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAETAQEBJoVdDII6I?=
 =?us-ascii?q?oJvAwMaXxAgHxJXGYMiAYIOrHKFTIMygUiBNIcwhjE/gRGDUIoFIgSNIYkhl?=
 =?us-ascii?q?koHgiVlBIYcjXkngyiVfS2jI4U4OCCBWTMaUoMNCUcQFIFaDgmBQIRliAA9A?=
 =?us-ascii?q?QExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854324"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id A05A41A602EE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id NnFFhE2x5TMn; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 858CF1A602F2;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id tT0GzRzuZUQo; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 6BE9C1A602E5;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:44 +0300
Message-Id: <20190923095852.21872-7-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 06/14] _sysconfigdata.py:
 Introduce file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKX3N5c2NvbmZpZ2RhdGEucHkgY29udGFpbnMgYWxsIHRoZSBjb25maWd1cmF0aW9uIGRh
dGEgdXNlZCBieSB0aGUgaW50ZXJwcmV0ZXIgYXQKcnVudGltZS4gVGhpcyBwYXRjaCBhZGRzIHRo
ZSBzbGlnaHRseSBjaGFuZ2VkIGZpbGUgZ2VuZXJhdGVkIGJ5IGEgLi9jb25maWd1cmUKcnVuLgoK
U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3Mu
cHViLnJvPgotLS0KIF9zeXNjb25maWdkYXRhLnB5IHwgNzA3ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA3MDcgaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IF9zeXNjb25maWdkYXRhLnB5CgpkaWZmIC0tZ2l0IGEv
X3N5c2NvbmZpZ2RhdGEucHkgYi9fc3lzY29uZmlnZGF0YS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xOTM1NGNhCi0tLSAvZGV2L251bGwKKysrIGIvX3N5c2NvbmZpZ2Rh
dGEucHkKQEAgLTAsMCArMSw3MDcgQEAKKyMgc3lzdGVtIGNvbmZpZ3VyYXRpb24gZ2VuZXJhdGVk
IGFuZCB1c2VkIGJ5IHRoZSBzeXNjb25maWcgbW9kdWxlCitidWlsZF90aW1lX3ZhcnMgPSB7J0FC
SUZMQUdTJzogJ20nLAorICdBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQnOiAwLAorICdBSVhfR0VO
VUlORV9DUExVU1BMVVMnOiAwLAorICdBTkRST0lEX0FQSV9MRVZFTCc6IDAsCisgJ0FSJzogJ2Fy
JywKKyAnQVJGTEFHUyc6ICdyY3MnLAorICdCQVNFQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3Vs
dCAtV3NpZ24tY29tcGFyZScsCisgJ0JBU0VDUFBGTEFHUyc6ICcnLAorICdCQVNFTU9ETElCUyc6
ICcnLAorICdCSU5ESVInOiAnL3Vzci9sb2NhbC9iaW4nLAorICdCSU5MSUJERVNUJzogJy91c3Iv
bG9jYWwvbGliL3B5dGhvbjMuNycsCisgJ0JMRExJQlJBUlknOiAnbGlicHl0aG9uMy43bS5hJywK
KyAnQkxEU0hBUkVEJzogJ2djYyAtcHRocmVhZCAtc2hhcmVkJywKKyAnQlVJTERFWEUnOiAnJywK
KyAnQlVJTERQWVRIT04nOiAncHl0aG9uJywKKyAnQlVJTERfR05VX1RZUEUnOiAneDg2XzY0LXBj
LWxpbnV4LWdudScsCisgJ0JZVEVTVFJfREVQUyc6ICdcXCcsCisgJ0NDJzogJ2djYyAtcHRocmVh
ZCcsCisgJ0NDU0hBUkVEJzogJy1mUElDJywKKyAnQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3Vs
dCAtV3NpZ24tY29tcGFyZSAtRE5ERUJVRyAtZyAtZndyYXB2IC1PMyAtV2FsbCcsCisgJ0NGTEFH
U0ZPUlNIQVJFRCc6ICcnLAorICdDRkxBR1NfQUxJQVNJTkcnOiAnJywKKyAnQ0ZMQUdTX05PRElT
VCc6ICcnLAorICdDT05GSUdGSUxFUyc6ICdjb25maWd1cmUgY29uZmlndXJlLmFjIGFjY29uZmln
LmggcHljb25maWcuaC5pbiAnCisgICAgICAgICAgICAgICAgJ01ha2VmaWxlLnByZS5pbicsCisg
J0NPTkZJR1VSRV9DRkxBR1MnOiAnJywKKyAnQ09ORklHVVJFX0NGTEFHU19OT0RJU1QnOiAnLXN0
ZD1jOTkgLVdleHRyYSAtV25vLXVudXNlZC1yZXN1bHQgJworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICctV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzICcKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUgJworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uJywKKyAnQ09O
RklHVVJFX0NQUEZMQUdTJzogJycsCisgJ0NPTkZJR1VSRV9MREZMQUdTJzogJycsCisgJ0NPTkZJ
R1VSRV9MREZMQUdTX05PRElTVCc6ICcnLAorICdDT05GSUdfQVJHUyc6ICcnLAorICdDT05GSU5D
TFVERURJUic6ICcvdXNyL2xvY2FsL2luY2x1ZGUnLAorICdDT05GSU5DTFVERVBZJzogJy91c3Iv
bG9jYWwvaW5jbHVkZS9weXRob24zLjdtJywKKyAnQ09SRVBZVEhPTlBBVEgnOiAnJywKKyAnQ09W
RVJBR0VfSU5GTyc6ICcnLAorICdDT1ZFUkFHRV9SRVBPUlQnOiAnJywKKyAnQ09WRVJBR0VfUkVQ
T1JUX09QVElPTlMnOiAnLS1uby1icmFuY2gtY292ZXJhZ2UgLS10aXRsZSAiQ1B5dGhvbiBsY292
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVwb3J0IicsCisgJ0NQUEZMQUdTJzog
Jy1JLiAtSS4vSW5jbHVkZScsCisgJ0NYWCc6ICdnKysgLXB0aHJlYWQnLAorICdERVNURElSUyc6
ICcvdXNyL2xvY2FsIC91c3IvbG9jYWwvbGliIC91c3IvbG9jYWwvbGliL3B5dGhvbjMuNyAnCisg
ICAgICAgICAgICAgJy91c3IvbG9jYWwvbGliL3B5dGhvbjMuNy9saWItZHlubG9hZCcsCisgJ0RF
U1RMSUInOiAnL3Vzci9sb2NhbC9saWIvcHl0aG9uMy43JywKKyAnREVTVFBBVEgnOiAnJywKKyAn
REVTVFNIQVJFRCc6ICcvdXNyL2xvY2FsL2xpYi9weXRob24zLjcvbGliLWR5bmxvYWQnLAorICdE
RkxBR1MnOiAnJywKKyAnRElSTU9ERSc6IDc1NSwKKyAnRElTVCc6ICdSRUFETUUucnN0IENoYW5n
ZUxvZyBjb25maWd1cmUgY29uZmlndXJlLmFjIGFjY29uZmlnLmggcHljb25maWcuaC5pbiAnCisg
ICAgICAgICAnTWFrZWZpbGUucHJlLmluIEluY2x1ZGUgTGliIE1pc2MgRXh0LWR1bW15JywKKyAn
RElTVERJUlMnOiAnSW5jbHVkZSBMaWIgTWlzYyBFeHQtZHVtbXknLAorICdESVNURklMRVMnOiAn
UkVBRE1FLnJzdCBDaGFuZ2VMb2cgY29uZmlndXJlIGNvbmZpZ3VyZS5hYyBhY2NvbmZpZy5oICcK
KyAgICAgICAgICAgICAgJ3B5Y29uZmlnLmguaW4gTWFrZWZpbGUucHJlLmluJywKKyAnRExJTkNM
RElSJzogJy4nLAorICdETExMSUJSQVJZJzogJycsCisgJ0RPVUJMRV9JU19BUk1fTUlYRURfRU5E
SUFOX0lFRUU3NTQnOiAwLAorICdET1VCTEVfSVNfQklHX0VORElBTl9JRUVFNzU0JzogMCwKKyAn
RE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NCc6IDEsCisgJ0RUUkFDRSc6ICcnLAorICdE
VFJBQ0VfREVQUyc6ICdcXCcsCisgJ0RUUkFDRV9IRUFERVJTJzogJycsCisgJ0RUUkFDRV9PQkpT
JzogJycsCisgJ0RZTkxPQURGSUxFJzogJ2R5bmxvYWRfc2hsaWIubycsCisgJ0VOQUJMRV9JUFY2
JzogMSwKKyAnRU5TVVJFUElQJzogJ3VwZ3JhZGUnLAorICdFWEUnOiAnJywKKyAnRVhFTU9ERSc6
IDc1NSwKKyAnRVhUUkFURVNUT1BUUyc6ICcnLAorICdFWFRSQV9DRkxBR1MnOiAnJywKKyAnRVhU
X1NVRkZJWCc6ICcuY3B5dGhvbi0zN20teDg2XzY0LWxpbnV4LWdudS5zbycsCisgJ0ZJTEVNT0RF
JzogNjQ0LAorICdGTE9DS19ORUVEU19MSUJCU0QnOiAwLAorICdHRVRQR1JQX0hBVkVfQVJHJzog
MCwKKyAnR0VUVElNRU9GREFZX05PX1RaJzogMCwKKyAnR0lUQlJBTkNIJzogJycsCisgJ0dJVFRB
Ryc6ICcnLAorICdHSVRWRVJTSU9OJzogJycsCisgJ0dOVUxEJzogJ3llcycsCisgJ0hBVkVfQUND
RVBUNCc6IDEsCisgJ0hBVkVfQUNPU0gnOiAxLAorICdIQVZFX0FERFJJTkZPJzogMSwKKyAnSEFW
RV9BTEFSTSc6IDEsCisgJ0hBVkVfQUxJR05FRF9SRVFVSVJFRCc6IDAsCisgJ0hBVkVfQUxMT0NB
X0gnOiAxLAorICdIQVZFX0FMVFpPTkUnOiAwLAorICdIQVZFX0FTSU5IJzogMSwKKyAnSEFWRV9B
U01fVFlQRVNfSCc6IDEsCisgJ0hBVkVfQVRBTkgnOiAxLAorICdIQVZFX0JJTkRfVEVYVERPTUFJ
Tl9DT0RFU0VUJzogMSwKKyAnSEFWRV9CTFVFVE9PVEhfQkxVRVRPT1RIX0gnOiAwLAorICdIQVZF
X0JMVUVUT09USF9IJzogMCwKKyAnSEFWRV9CUk9LRU5fTUJTVE9XQ1MnOiAwLAorICdIQVZFX0JS
T0tFTl9OSUNFJzogMCwKKyAnSEFWRV9CUk9LRU5fUElQRV9CVUYnOiAwLAorICdIQVZFX0JST0tF
Tl9QT0xMJzogMCwKKyAnSEFWRV9CUk9LRU5fUE9TSVhfU0VNQVBIT1JFUyc6IDAsCisgJ0hBVkVf
QlJPS0VOX1BUSFJFQURfU0lHTUFTSyc6IDAsCisgJ0hBVkVfQlJPS0VOX1NFTV9HRVRWQUxVRSc6
IDAsCisgJ0hBVkVfQlJPS0VOX1VOU0VURU5WJzogMCwKKyAnSEFWRV9CVUlMVElOX0FUT01JQyc6
IDEsCisgJ0hBVkVfQ0hGTEFHUyc6IDAsCisgJ0hBVkVfQ0hPV04nOiAxLAorICdIQVZFX0NIUk9P
VCc6IDEsCisgJ0hBVkVfQ0xPQ0snOiAxLAorICdIQVZFX0NMT0NLX0dFVFJFUyc6IDEsCisgJ0hB
VkVfQ0xPQ0tfR0VUVElNRSc6IDEsCisgJ0hBVkVfQ0xPQ0tfU0VUVElNRSc6IDEsCisgJ0hBVkVf
Q09NUFVURURfR09UT1MnOiAxLAorICdIQVZFX0NPTkZTVFInOiAxLAorICdIQVZFX0NPTklPX0gn
OiAwLAorICdIQVZFX0NPUFlTSUdOJzogMSwKKyAnSEFWRV9DUllQVF9IJzogMSwKKyAnSEFWRV9D
UllQVF9SJzogMSwKKyAnSEFWRV9DVEVSTUlEJzogMSwKKyAnSEFWRV9DVEVSTUlEX1InOiAwLAor
ICdIQVZFX0NVUlNFU19GSUxURVInOiAxLAorICdIQVZFX0NVUlNFU19IJzogMSwKKyAnSEFWRV9D
VVJTRVNfSEFTX0tFWSc6IDEsCisgJ0hBVkVfQ1VSU0VTX0lNTUVET0snOiAxLAorICdIQVZFX0NV
UlNFU19JU19QQUQnOiAxLAorICdIQVZFX0NVUlNFU19JU19URVJNX1JFU0laRUQnOiAxLAorICdI
QVZFX0NVUlNFU19SRVNJWkVURVJNJzogMSwKKyAnSEFWRV9DVVJTRVNfUkVTSVpFX1RFUk0nOiAx
LAorICdIQVZFX0NVUlNFU19TWU5DT0snOiAxLAorICdIQVZFX0NVUlNFU19UWVBFQUhFQUQnOiAx
LAorICdIQVZFX0NVUlNFU19VU0VfRU5WJzogMSwKKyAnSEFWRV9DVVJTRVNfV0NIR0FUJzogMSwK
KyAnSEFWRV9ERUNMX0lTRklOSVRFJzogMSwKKyAnSEFWRV9ERUNMX0lTSU5GJzogMSwKKyAnSEFW
RV9ERUNMX0lTTkFOJzogMSwKKyAnSEFWRV9ERUNMX1JUTERfREVFUEJJTkQnOiAxLAorICdIQVZF
X0RFQ0xfUlRMRF9HTE9CQUwnOiAxLAorICdIQVZFX0RFQ0xfUlRMRF9MQVpZJzogMSwKKyAnSEFW
RV9ERUNMX1JUTERfTE9DQUwnOiAxLAorICdIQVZFX0RFQ0xfUlRMRF9NRU1CRVInOiAwLAorICdI
QVZFX0RFQ0xfUlRMRF9OT0RFTEVURSc6IDEsCisgJ0hBVkVfREVDTF9SVExEX05PTE9BRCc6IDEs
CisgJ0hBVkVfREVDTF9SVExEX05PVyc6IDEsCisgJ0hBVkVfREVDTF9UWk5BTUUnOiAwLAorICdI
QVZFX0RFVklDRV9NQUNST1MnOiAxLAorICdIQVZFX0RFVl9QVEMnOiAwLAorICdIQVZFX0RFVl9Q
VE1YJzogMSwKKyAnSEFWRV9ESVJFQ1RfSCc6IDAsCisgJ0hBVkVfRElSRU5UX0RfVFlQRSc6IDEs
CisgJ0hBVkVfRElSRU5UX0gnOiAxLAorICdIQVZFX0RJUkZEJzogMSwKKyAnSEFWRV9ETEZDTl9I
JzogMSwKKyAnSEFWRV9ETE9QRU4nOiAxLAorICdIQVZFX0RVUDInOiAxLAorICdIQVZFX0RVUDMn
OiAxLAorICdIQVZFX0RZTkFNSUNfTE9BRElORyc6IDEsCisgJ0hBVkVfRU5ESUFOX0gnOiAxLAor
ICdIQVZFX0VQT0xMJzogMSwKKyAnSEFWRV9FUE9MTF9DUkVBVEUxJzogMSwKKyAnSEFWRV9FUkYn
OiAxLAorICdIQVZFX0VSRkMnOiAxLAorICdIQVZFX0VSUk5PX0gnOiAxLAorICdIQVZFX0VYRUNW
JzogMSwKKyAnSEFWRV9FWFBNMSc6IDEsCisgJ0hBVkVfRkFDQ0VTU0FUJzogMSwKKyAnSEFWRV9G
Q0hESVInOiAxLAorICdIQVZFX0ZDSE1PRCc6IDEsCisgJ0hBVkVfRkNITU9EQVQnOiAxLAorICdI
QVZFX0ZDSE9XTic6IDEsCisgJ0hBVkVfRkNIT1dOQVQnOiAxLAorICdIQVZFX0ZDTlRMX0gnOiAx
LAorICdIQVZFX0ZEQVRBU1lOQyc6IDEsCisgJ0hBVkVfRkRPUEVORElSJzogMSwKKyAnSEFWRV9G
RVhFQ1ZFJzogMSwKKyAnSEFWRV9GSU5JVEUnOiAxLAorICdIQVZFX0ZMT0NLJzogMSwKKyAnSEFW
RV9GT1JLJzogMSwKKyAnSEFWRV9GT1JLUFRZJzogMSwKKyAnSEFWRV9GUEFUSENPTkYnOiAxLAor
ICdIQVZFX0ZTRUVLNjQnOiAwLAorICdIQVZFX0ZTRUVLTyc6IDEsCisgJ0hBVkVfRlNUQVRBVCc6
IDEsCisgJ0hBVkVfRlNUQVRWRlMnOiAxLAorICdIQVZFX0ZTWU5DJzogMSwKKyAnSEFWRV9GVEVM
TDY0JzogMCwKKyAnSEFWRV9GVEVMTE8nOiAxLAorICdIQVZFX0ZUSU1FJzogMSwKKyAnSEFWRV9G
VFJVTkNBVEUnOiAxLAorICdIQVZFX0ZVVElNRU5TJzogMSwKKyAnSEFWRV9GVVRJTUVTJzogMSwK
KyAnSEFWRV9GVVRJTUVTQVQnOiAxLAorICdIQVZFX0dBSV9TVFJFUlJPUic6IDEsCisgJ0hBVkVf
R0FNTUEnOiAxLAorICdIQVZFX0dDQ19BU01fRk9SX01DNjg4ODEnOiAwLAorICdIQVZFX0dDQ19B
U01fRk9SX1g2NCc6IDEsCisgJ0hBVkVfR0NDX0FTTV9GT1JfWDg3JzogMSwKKyAnSEFWRV9HQ0Nf
VUlOVDEyOF9UJzogMSwKKyAnSEFWRV9HRVRBRERSSU5GTyc6IDEsCisgJ0hBVkVfR0VUQ19VTkxP
Q0tFRCc6IDEsCisgJ0hBVkVfR0VURU5UUk9QWSc6IDEsCisgJ0hBVkVfR0VUR1JPVVBMSVNUJzog
MSwKKyAnSEFWRV9HRVRHUk9VUFMnOiAxLAorICdIQVZFX0dFVEhPU1RCWU5BTUUnOiAwLAorICdI
QVZFX0dFVEhPU1RCWU5BTUVfUic6IDEsCisgJ0hBVkVfR0VUSE9TVEJZTkFNRV9SXzNfQVJHJzog
MCwKKyAnSEFWRV9HRVRIT1NUQllOQU1FX1JfNV9BUkcnOiAwLAorICdIQVZFX0dFVEhPU1RCWU5B
TUVfUl82X0FSRyc6IDEsCisgJ0hBVkVfR0VUSVRJTUVSJzogMSwKKyAnSEFWRV9HRVRMT0FEQVZH
JzogMSwKKyAnSEFWRV9HRVRMT0dJTic6IDEsCisgJ0hBVkVfR0VUTkFNRUlORk8nOiAxLAorICdI
QVZFX0dFVFBBR0VTSVpFJzogMSwKKyAnSEFWRV9HRVRQRUVSTkFNRSc6IDEsCisgJ0hBVkVfR0VU
UEdJRCc6IDEsCisgJ0hBVkVfR0VUUEdSUCc6IDEsCisgJ0hBVkVfR0VUUElEJzogMSwKKyAnSEFW
RV9HRVRQUklPUklUWSc6IDEsCisgJ0hBVkVfR0VUUFdFTlQnOiAxLAorICdIQVZFX0dFVFJBTkRP
TSc6IDEsCisgJ0hBVkVfR0VUUkFORE9NX1NZU0NBTEwnOiAxLAorICdIQVZFX0dFVFJFU0dJRCc6
IDEsCisgJ0hBVkVfR0VUUkVTVUlEJzogMSwKKyAnSEFWRV9HRVRTSUQnOiAxLAorICdIQVZFX0dF
VFNQRU5UJzogMSwKKyAnSEFWRV9HRVRTUE5BTSc6IDEsCisgJ0hBVkVfR0VUVElNRU9GREFZJzog
MSwKKyAnSEFWRV9HRVRXRCc6IDEsCisgJ0hBVkVfR0xJQkNfTUVNTU9WRV9CVUcnOiAwLAorICdI
QVZFX0dSUF9IJzogMSwKKyAnSEFWRV9IU1RSRVJST1InOiAxLAorICdIQVZFX0hUT0xFNjQnOiAx
LAorICdIQVZFX0hZUE9UJzogMSwKKyAnSEFWRV9JRUVFRlBfSCc6IDAsCisgJ0hBVkVfSUZfTkFN
RUlOREVYJzogMSwKKyAnSEFWRV9JTkVUX0FUT04nOiAxLAorICdIQVZFX0lORVRfUFRPTic6IDEs
CisgJ0hBVkVfSU5JVEdST1VQUyc6IDEsCisgJ0hBVkVfSU5UVFlQRVNfSCc6IDEsCisgJ0hBVkVf
SU9fSCc6IDAsCisgJ0hBVkVfSVBBX1BVUkVfQ09OU1RfQlVHJzogMCwKKyAnSEFWRV9LSUxMJzog
MSwKKyAnSEFWRV9LSUxMUEcnOiAxLAorICdIQVZFX0tRVUVVRSc6IDAsCisgJ0hBVkVfTEFOR0lO
Rk9fSCc6IDEsCisgJ0hBVkVfTEFSR0VGSUxFX1NVUFBPUlQnOiAwLAorICdIQVZFX0xDSEZMQUdT
JzogMCwKKyAnSEFWRV9MQ0hNT0QnOiAwLAorICdIQVZFX0xDSE9XTic6IDEsCisgJ0hBVkVfTEdB
TU1BJzogMSwKKyAnSEFWRV9MSUJETCc6IDEsCisgJ0hBVkVfTElCRExEJzogMCwKKyAnSEFWRV9M
SUJJRUVFJzogMCwKKyAnSEFWRV9MSUJJTlRMX0gnOiAxLAorICdIQVZFX0xJQlJFQURMSU5FJzog
MCwKKyAnSEFWRV9MSUJSRVNPTFYnOiAwLAorICdIQVZFX0xJQlNFTkRGSUxFJzogMCwKKyAnSEFW
RV9MSUJVVElMX0gnOiAwLAorICdIQVZFX0xJTksnOiAxLAorICdIQVZFX0xJTktBVCc6IDEsCisg
J0hBVkVfTElOVVhfQ0FOX0JDTV9IJzogMSwKKyAnSEFWRV9MSU5VWF9DQU5fSCc6IDEsCisgJ0hB
VkVfTElOVVhfQ0FOX1JBV19GRF9GUkFNRVMnOiAxLAorICdIQVZFX0xJTlVYX0NBTl9SQVdfSCc6
IDEsCisgJ0hBVkVfTElOVVhfTkVUTElOS19IJzogMSwKKyAnSEFWRV9MSU5VWF9SQU5ET01fSCc6
IDEsCisgJ0hBVkVfTElOVVhfVElQQ19IJzogMSwKKyAnSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0gn
OiAxLAorICdIQVZFX0xPQ0tGJzogMSwKKyAnSEFWRV9MT0cxUCc6IDEsCisgJ0hBVkVfTE9HMic6
IDEsCisgJ0hBVkVfTE9OR19ET1VCTEUnOiAxLAorICdIQVZFX0xTVEFUJzogMSwKKyAnSEFWRV9M
VVRJTUVTJzogMSwKKyAnSEFWRV9NQUtFREVWJzogMSwKKyAnSEFWRV9NQlJUT1dDJzogMSwKKyAn
SEFWRV9NRU1PUllfSCc6IDEsCisgJ0hBVkVfTUVNUkNIUic6IDEsCisgJ0hBVkVfTUtESVJBVCc6
IDEsCisgJ0hBVkVfTUtGSUZPJzogMSwKKyAnSEFWRV9NS0ZJRk9BVCc6IDEsCisgJ0hBVkVfTUtO
T0QnOiAxLAorICdIQVZFX01LTk9EQVQnOiAxLAorICdIQVZFX01LVElNRSc6IDEsCisgJ0hBVkVf
TU1BUCc6IDEsCisgJ0hBVkVfTVJFTUFQJzogMSwKKyAnSEFWRV9OQ1VSU0VTX0gnOiAxLAorICdI
QVZFX05ESVJfSCc6IDAsCisgJ0hBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IJzogMSwKKyAnSEFWRV9O
RVRfSUZfSCc6IDEsCisgJ0hBVkVfTklDRSc6IDEsCisgJ0hBVkVfT1BFTkFUJzogMSwKKyAnSEFW
RV9PUEVOUFRZJzogMSwKKyAnSEFWRV9QQVRIQ09ORic6IDEsCisgJ0hBVkVfUEFVU0UnOiAxLAor
ICdIQVZFX1BJUEUyJzogMSwKKyAnSEFWRV9QTE9DSyc6IDAsCisgJ0hBVkVfUE9MTCc6IDEsCisg
J0hBVkVfUE9MTF9IJzogMSwKKyAnSEFWRV9QT1NJWF9GQURWSVNFJzogMSwKKyAnSEFWRV9QT1NJ
WF9GQUxMT0NBVEUnOiAxLAorICdIQVZFX1BPU0lYX1NQQVdOJzogMSwKKyAnSEFWRV9QUkVBRCc6
IDEsCisgJ0hBVkVfUFJFQURWJzogMSwKKyAnSEFWRV9QUkVBRFYyJzogMSwKKyAnSEFWRV9QUkxJ
TUlUJzogMSwKKyAnSEFWRV9QUk9DRVNTX0gnOiAwLAorICdIQVZFX1BST1RPVFlQRVMnOiAxLAor
ICdIQVZFX1BUSFJFQURfREVTVFJVQ1RPUic6IDAsCisgJ0hBVkVfUFRIUkVBRF9HRVRDUFVDTE9D
S0lEJzogMSwKKyAnSEFWRV9QVEhSRUFEX0gnOiAxLAorICdIQVZFX1BUSFJFQURfSU5JVCc6IDAs
CisgJ0hBVkVfUFRIUkVBRF9LSUxMJzogMSwKKyAnSEFWRV9QVEhSRUFEX1NJR01BU0snOiAxLAor
ICdIQVZFX1BUWV9IJzogMSwKKyAnSEFWRV9QVVRFTlYnOiAxLAorICdIQVZFX1BXUklURSc6IDEs
CisgJ0hBVkVfUFdSSVRFVic6IDEsCisgJ0hBVkVfUFdSSVRFVjInOiAxLAorICdIQVZFX1JFQURM
SU5LJzogMSwKKyAnSEFWRV9SRUFETElOS0FUJzogMSwKKyAnSEFWRV9SRUFEVic6IDEsCisgJ0hB
VkVfUkVBTFBBVEgnOiAxLAorICdIQVZFX1JFTkFNRUFUJzogMSwKKyAnSEFWRV9STF9BUFBFTkRf
SElTVE9SWSc6IDAsCisgJ0hBVkVfUkxfQ0FUQ0hfU0lHTkFMJzogMCwKKyAnSEFWRV9STF9DT01Q
TEVUSU9OX0FQUEVORF9DSEFSQUNURVInOiAwLAorICdIQVZFX1JMX0NPTVBMRVRJT05fRElTUExB
WV9NQVRDSEVTX0hPT0snOiAwLAorICdIQVZFX1JMX0NPTVBMRVRJT05fTUFUQ0hFUyc6IDAsCisg
J0hBVkVfUkxfQ09NUExFVElPTl9TVVBQUkVTU19BUFBFTkQnOiAwLAorICdIQVZFX1JMX1BSRV9J
TlBVVF9IT09LJzogMCwKKyAnSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwnOiAwLAorICdIQVZFX1JP
VU5EJzogMSwKKyAnSEFWRV9TQ0hFRF9HRVRfUFJJT1JJVFlfTUFYJzogMSwKKyAnSEFWRV9TQ0hF
RF9IJzogMSwKKyAnSEFWRV9TQ0hFRF9SUl9HRVRfSU5URVJWQUwnOiAxLAorICdIQVZFX1NDSEVE
X1NFVEFGRklOSVRZJzogMSwKKyAnSEFWRV9TQ0hFRF9TRVRQQVJBTSc6IDEsCisgJ0hBVkVfU0NI
RURfU0VUU0NIRURVTEVSJzogMSwKKyAnSEFWRV9TRU1fR0VUVkFMVUUnOiAxLAorICdIQVZFX1NF
TV9PUEVOJzogMSwKKyAnSEFWRV9TRU1fVElNRURXQUlUJzogMSwKKyAnSEFWRV9TRU1fVU5MSU5L
JzogMSwKKyAnSEFWRV9TRU5ERklMRSc6IDEsCisgJ0hBVkVfU0VURUdJRCc6IDEsCisgJ0hBVkVf
U0VURVVJRCc6IDEsCisgJ0hBVkVfU0VUR0lEJzogMSwKKyAnSEFWRV9TRVRHUk9VUFMnOiAxLAor
ICdIQVZFX1NFVEhPU1ROQU1FJzogMSwKKyAnSEFWRV9TRVRJVElNRVInOiAxLAorICdIQVZFX1NF
VExPQ0FMRSc6IDEsCisgJ0hBVkVfU0VUUEdJRCc6IDEsCisgJ0hBVkVfU0VUUEdSUCc6IDEsCisg
J0hBVkVfU0VUUFJJT1JJVFknOiAxLAorICdIQVZFX1NFVFJFR0lEJzogMSwKKyAnSEFWRV9TRVRS
RVNHSUQnOiAxLAorICdIQVZFX1NFVFJFU1VJRCc6IDEsCisgJ0hBVkVfU0VUUkVVSUQnOiAxLAor
ICdIQVZFX1NFVFNJRCc6IDEsCisgJ0hBVkVfU0VUVUlEJzogMSwKKyAnSEFWRV9TRVRWQlVGJzog
MSwKKyAnSEFWRV9TSEFET1dfSCc6IDEsCisgJ0hBVkVfU0lHQUNUSU9OJzogMSwKKyAnSEFWRV9T
SUdBTFRTVEFDSyc6IDEsCisgJ0hBVkVfU0lHSU5GT19UX1NJX0JBTkQnOiAxLAorICdIQVZFX1NJ
R0lOVEVSUlVQVCc6IDEsCisgJ0hBVkVfU0lHTkFMX0gnOiAxLAorICdIQVZFX1NJR1BFTkRJTkcn
OiAxLAorICdIQVZFX1NJR1JFTFNFJzogMSwKKyAnSEFWRV9TSUdUSU1FRFdBSVQnOiAxLAorICdI
QVZFX1NJR1dBSVQnOiAxLAorICdIQVZFX1NJR1dBSVRJTkZPJzogMSwKKyAnSEFWRV9TTlBSSU5U
Ric6IDEsCisgJ0hBVkVfU09DS0FERFJfQUxHJzogMSwKKyAnSEFWRV9TT0NLQUREUl9TQV9MRU4n
OiAwLAorICdIQVZFX1NPQ0tBRERSX1NUT1JBR0UnOiAxLAorICdIQVZFX1NPQ0tFVFBBSVInOiAx
LAorICdIQVZFX1NQQVdOX0gnOiAxLAorICdIQVZFX1NTSVpFX1QnOiAxLAorICdIQVZFX1NUQVRW
RlMnOiAxLAorICdIQVZFX1NUQVRfVFZfTlNFQyc6IDEsCisgJ0hBVkVfU1RBVF9UVl9OU0VDMic6
IDAsCisgJ0hBVkVfU1REQVJHX1BST1RPVFlQRVMnOiAxLAorICdIQVZFX1NURElOVF9IJzogMSwK
KyAnSEFWRV9TVERMSUJfSCc6IDEsCisgJ0hBVkVfU1REX0FUT01JQyc6IDEsCisgJ0hBVkVfU1RS
RFVQJzogMSwKKyAnSEFWRV9TVFJGVElNRSc6IDEsCisgJ0hBVkVfU1RSSU5HU19IJzogMSwKKyAn
SEFWRV9TVFJJTkdfSCc6IDEsCisgJ0hBVkVfU1RSTENQWSc6IDAsCisgJ0hBVkVfU1RST1BUU19I
JzogMSwKKyAnSEFWRV9TVFJVQ1RfUEFTU1dEX1BXX0dFQ09TJzogMSwKKyAnSEFWRV9TVFJVQ1Rf
UEFTU1dEX1BXX1BBU1NXRCc6IDEsCisgJ0hBVkVfU1RSVUNUX1NUQVRfU1RfQklSVEhUSU1FJzog
MCwKKyAnSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFJzogMSwKKyAnSEFWRV9TVFJVQ1RfU1RB
VF9TVF9CTE9DS1MnOiAxLAorICdIQVZFX1NUUlVDVF9TVEFUX1NUX0ZMQUdTJzogMCwKKyAnSEFW
RV9TVFJVQ1RfU1RBVF9TVF9HRU4nOiAwLAorICdIQVZFX1NUUlVDVF9TVEFUX1NUX1JERVYnOiAx
LAorICdIQVZFX1NUUlVDVF9UTV9UTV9aT05FJzogMSwKKyAnSEFWRV9TWU1MSU5LJzogMSwKKyAn
SEFWRV9TWU1MSU5LQVQnOiAxLAorICdIQVZFX1NZTkMnOiAxLAorICdIQVZFX1NZU0NPTkYnOiAx
LAorICdIQVZFX1NZU0VYSVRTX0gnOiAxLAorICdIQVZFX1NZU19BVURJT0lPX0gnOiAwLAorICdI
QVZFX1NZU19CU0RUVFlfSCc6IDAsCisgJ0hBVkVfU1lTX0RFVlBPTExfSCc6IDAsCisgJ0hBVkVf
U1lTX0RJUl9IJzogMCwKKyAnSEFWRV9TWVNfRU5ESUFOX0gnOiAwLAorICdIQVZFX1NZU19FUE9M
TF9IJzogMSwKKyAnSEFWRV9TWVNfRVZFTlRfSCc6IDAsCisgJ0hBVkVfU1lTX0ZJTEVfSCc6IDEs
CisgJ0hBVkVfU1lTX0lPQ1RMX0gnOiAxLAorICdIQVZFX1NZU19LRVJOX0NPTlRST0xfSCc6IDAs
CisgJ0hBVkVfU1lTX0xPQURBVkdfSCc6IDAsCisgJ0hBVkVfU1lTX0xPQ0tfSCc6IDAsCisgJ0hB
VkVfU1lTX01LREVWX0gnOiAwLAorICdIQVZFX1NZU19NT0RFTV9IJzogMCwKKyAnSEFWRV9TWVNf
TkRJUl9IJzogMCwKKyAnSEFWRV9TWVNfUEFSQU1fSCc6IDEsCisgJ0hBVkVfU1lTX1BPTExfSCc6
IDEsCisgJ0hBVkVfU1lTX1JBTkRPTV9IJzogMSwKKyAnSEFWRV9TWVNfUkVTT1VSQ0VfSCc6IDEs
CisgJ0hBVkVfU1lTX1NFTEVDVF9IJzogMSwKKyAnSEFWRV9TWVNfU0VOREZJTEVfSCc6IDEsCisg
J0hBVkVfU1lTX1NPQ0tFVF9IJzogMSwKKyAnSEFWRV9TWVNfU1RBVFZGU19IJzogMSwKKyAnSEFW
RV9TWVNfU1RBVF9IJzogMSwKKyAnSEFWRV9TWVNfU1lTQ0FMTF9IJzogMSwKKyAnSEFWRV9TWVNf
U1lTTUFDUk9TX0gnOiAxLAorICdIQVZFX1NZU19TWVNfRE9NQUlOX0gnOiAwLAorICdIQVZFX1NZ
U19URVJNSU9fSCc6IDAsCisgJ0hBVkVfU1lTX1RJTUVTX0gnOiAxLAorICdIQVZFX1NZU19USU1F
X0gnOiAxLAorICdIQVZFX1NZU19UWVBFU19IJzogMSwKKyAnSEFWRV9TWVNfVUlPX0gnOiAxLAor
ICdIQVZFX1NZU19VTl9IJzogMSwKKyAnSEFWRV9TWVNfVVRTTkFNRV9IJzogMSwKKyAnSEFWRV9T
WVNfV0FJVF9IJzogMSwKKyAnSEFWRV9TWVNfWEFUVFJfSCc6IDEsCisgJ0hBVkVfVENHRVRQR1JQ
JzogMSwKKyAnSEFWRV9UQ1NFVFBHUlAnOiAxLAorICdIQVZFX1RFTVBOQU0nOiAxLAorICdIQVZF
X1RFUk1JT1NfSCc6IDEsCisgJ0hBVkVfVEVSTV9IJzogMSwKKyAnSEFWRV9UR0FNTUEnOiAxLAor
ICdIQVZFX1RJTUVHTSc6IDEsCisgJ0hBVkVfVElNRVMnOiAxLAorICdIQVZFX1RNUEZJTEUnOiAx
LAorICdIQVZFX1RNUE5BTSc6IDEsCisgJ0hBVkVfVE1QTkFNX1InOiAxLAorICdIQVZFX1RNX1pP
TkUnOiAxLAorICdIQVZFX1RSVU5DQVRFJzogMSwKKyAnSEFWRV9UWk5BTUUnOiAwLAorICdIQVZF
X1VDUzRfVENMJzogMCwKKyAnSEFWRV9VTkFNRSc6IDEsCisgJ0hBVkVfVU5JU1REX0gnOiAxLAor
ICdIQVZFX1VOTElOS0FUJzogMSwKKyAnSEFWRV9VTlNFVEVOVic6IDEsCisgJ0hBVkVfVVNBQkxF
X1dDSEFSX1QnOiAwLAorICdIQVZFX1VUSUxfSCc6IDAsCisgJ0hBVkVfVVRJTUVOU0FUJzogMSwK
KyAnSEFWRV9VVElNRVMnOiAxLAorICdIQVZFX1VUSU1FX0gnOiAxLAorICdIQVZFX1VVSURfQ1JF
QVRFJzogMCwKKyAnSEFWRV9VVUlEX0VOQ19CRSc6IDAsCisgJ0hBVkVfVVVJRF9HRU5FUkFURV9U
SU1FX1NBRkUnOiAxLAorICdIQVZFX1VVSURfSCc6IDAsCisgJ0hBVkVfVVVJRF9VVUlEX0gnOiAx
LAorICdIQVZFX1dBSVQzJzogMSwKKyAnSEFWRV9XQUlUNCc6IDEsCisgJ0hBVkVfV0FJVElEJzog
MSwKKyAnSEFWRV9XQUlUUElEJzogMSwKKyAnSEFWRV9XQ0hBUl9IJzogMSwKKyAnSEFWRV9XQ1ND
T0xMJzogMSwKKyAnSEFWRV9XQ1NGVElNRSc6IDEsCisgJ0hBVkVfV0NTWEZSTSc6IDEsCisgJ0hB
VkVfV01FTUNNUCc6IDEsCisgJ0hBVkVfV09SS0lOR19UWlNFVCc6IDEsCisgJ0hBVkVfV1JJVEVW
JzogMSwKKyAnSEFWRV9YNTA5X1ZFUklGWV9QQVJBTV9TRVQxX0hPU1QnOiAxLAorICdIQVZFX1pM
SUJfQ09QWSc6IDEsCisgJ0hBVkVfX0dFVFBUWSc6IDAsCisgJ0hPU1RfR05VX1RZUEUnOiAneDg2
XzY0LXBjLWxpbnV4LWdudScsCisgJ0lOQ0xESVJTVE9NQUtFJzogJy91c3IvbG9jYWwvaW5jbHVk
ZSAvdXNyL2xvY2FsL2luY2x1ZGUgJworICAgICAgICAgICAgICAgICAgICcvdXNyL2xvY2FsL2lu
Y2x1ZGUvcHl0aG9uMy43bSAnCisgICAgICAgICAgICAgICAgICAgJy91c3IvbG9jYWwvaW5jbHVk
ZS9weXRob24zLjdtJywKKyAnSU5DTFVERURJUic6ICcvdXNyL2xvY2FsL2luY2x1ZGUnLAorICdJ
TkNMVURFUFknOiAnL3Vzci9sb2NhbC9pbmNsdWRlL3B5dGhvbjMuN20nLAorICdJTlNUQUxMJzog
Jy91c3IvYmluL2luc3RhbGwgLWMnLAorICdJTlNUQUxMX0RBVEEnOiAnL3Vzci9iaW4vaW5zdGFs
bCAtYyAtbSA2NDQnLAorICdJTlNUQUxMX1BST0dSQU0nOiAnL3Vzci9iaW4vaW5zdGFsbCAtYycs
CisgJ0lOU1RBTExfU0NSSVBUJzogJy91c3IvYmluL2luc3RhbGwgLWMnLAorICdJTlNUQUxMX1NI
QVJFRCc6ICcvdXNyL2Jpbi9pbnN0YWxsIC1jIC1tIDU1NScsCisgJ0lOU1RTT05BTUUnOiAnbGli
cHl0aG9uMy43bS5hJywKKyAnSU9fSCc6ICdNb2R1bGVzL19pby9faW9tb2R1bGUuaCcsCisgJ0lP
X09CSlMnOiAnXFwnLAorICdMRENYWFNIQVJFRCc6ICdnKysgLXB0aHJlYWQgLXNoYXJlZCcsCisg
J0xERkxBR1MnOiAnJywKKyAnTERGTEFHU19OT0RJU1QnOiAnJywKKyAnTERMQVNUJzogJycsCisg
J0xETElCUkFSWSc6ICdsaWJweXRob24zLjdtLmEnLAorICdMRExJQlJBUllESVInOiAnJywKKyAn
TERTSEFSRUQnOiAnZ2NjIC1wdGhyZWFkIC1zaGFyZWQnLAorICdMRFZFUlNJT04nOiAnMy43bScs
CisgJ0xJQkMnOiAnJywKKyAnTElCREVTVCc6ICcvdXNyL2xvY2FsL2xpYi9weXRob24zLjcnLAor
ICdMSUJESVInOiAnL3Vzci9sb2NhbC9saWInLAorICdMSUJGRklfSU5DTFVERURJUic6ICcnLAor
ICdMSUJNJzogJy1sbScsCisgJ0xJQk9CSkRJUic6ICdQeXRob24vJywKKyAnTElCT0JKUyc6ICcn
LAorICdMSUJQQyc6ICcvdXNyL2xvY2FsL2xpYi9wa2djb25maWcnLAorICdMSUJQTCc6ICcvdXNy
L2xvY2FsL2xpYi9weXRob24zLjcvY29uZmlnLTMuN20teDg2XzY0LWxpbnV4LWdudScsCisgJ0xJ
QlJBUlknOiAnbGlicHl0aG9uMy43bS5hJywKKyAnTElCUkFSWV9PQkpTJzogJ1xcJywKKyAnTElC
UkFSWV9PQkpTX09NSVRfRlJPWkVOJzogJ1xcJywKKyAnTElCUyc6ICctbGNyeXB0IC1scHRocmVh
ZCAtbGRsICAtbHV0aWwnLAorICdMSUJTVUJESVJTJzogJ3RraW50ZXIgdGtpbnRlci90ZXN0IHRr
aW50ZXIvdGVzdC90ZXN0X3RraW50ZXIgXFwnLAorICdMSU5LQ0MnOiAnZ2NjIC1wdGhyZWFkJywK
KyAnTElOS0ZPUlNIQVJFRCc6ICctWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMnLAorICdMSVBPXzMy
QklUX0ZMQUdTJzogJycsCisgJ0xMVk1fUFJPRl9FUlInOiAnbm8nLAorICdMTFZNX1BST0ZfRklM
RSc6ICcnLAorICdMTFZNX1BST0ZfTUVSR0VSJzogJ3RydWUnLAorICdMTic6ICdsbicsCisgJ0xP
Q0FMTU9ETElCUyc6ICcnLAorICdMT0cxUF9EUk9QU19aRVJPX1NJR04nOiAwLAorICdNQUNIREVQ
JzogJ2xpbnV4JywKKyAnTUFDSERFUF9PQkpTJzogJycsCisgJ01BQ0hERVNUTElCJzogJy91c3Iv
bG9jYWwvbGliL3B5dGhvbjMuNycsCisgJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCc6ICcnLAor
ICdNQUlOQ0MnOiAnZ2NjIC1wdGhyZWFkJywKKyAnTUFKT1JfSU5fTUtERVYnOiAwLAorICdNQUpP
Ul9JTl9TWVNNQUNST1MnOiAxLAorICdNQUtFU0VUVVAnOiAnLi9Nb2R1bGVzL21ha2VzZXR1cCcs
CisgJ01BTkRJUic6ICcvdXNyL2xvY2FsL3NoYXJlL21hbicsCisgJ01LRElSX1AnOiAnL2Jpbi9t
a2RpciAtcCcsCisgJ01PREJVSUxUX05BTUVTJzogJ3Bvc2l4ICBlcnJubyAgcHdkICBfc3JlICBf
Y29kZWNzICBfd2Vha3JlZiAgX2Z1bmN0b29scyAgJworICAgICAgICAgICAgICAgICAgICdfb3Bl
cmF0b3IgIF9jb2xsZWN0aW9ucyAgX2FiYyAgaXRlcnRvb2xzICBhdGV4aXQgIF9zaWduYWwgICcK
KyAgICAgICAgICAgICAgICAgICAnX3N0YXQgIHRpbWUgIF90aHJlYWQgIF9sb2NhbGUgIF9pbyAg
emlwaW1wb3J0ICAnCisgICAgICAgICAgICAgICAgICAgJ2ZhdWx0aGFuZGxlciAgX3RyYWNlbWFs
bG9jICBfc3ltdGFibGUgIHh4c3VidHlwZScsCisgJ01PRERJU0FCTEVEX05BTUVTJzogJycsCisg
J01PRExJQlMnOiAnJywKKyAnTU9ET0JKUyc6ICdNb2R1bGVzL3Bvc2l4bW9kdWxlLm8gIE1vZHVs
ZXMvZXJybm9tb2R1bGUubyAgJworICAgICAgICAgICAgJ01vZHVsZXMvcHdkbW9kdWxlLm8gIE1v
ZHVsZXMvX3NyZS5vICBNb2R1bGVzL19jb2RlY3Ntb2R1bGUubyAgJworICAgICAgICAgICAgJ01v
ZHVsZXMvX3dlYWtyZWYubyAgTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLm8gICcKKyAgICAgICAg
ICAgICdNb2R1bGVzL19vcGVyYXRvci5vICBNb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5vICAn
CisgICAgICAgICAgICAnTW9kdWxlcy9fYWJjLm8gIE1vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLm8g
ICcKKyAgICAgICAgICAgICdNb2R1bGVzL2F0ZXhpdG1vZHVsZS5vICBNb2R1bGVzL3NpZ25hbG1v
ZHVsZS5vICBNb2R1bGVzL19zdGF0Lm8gICcKKyAgICAgICAgICAgICdNb2R1bGVzL3RpbWVtb2R1
bGUubyAgTW9kdWxlcy9fdGhyZWFkbW9kdWxlLm8gICcKKyAgICAgICAgICAgICdNb2R1bGVzL19s
b2NhbGVtb2R1bGUubyAgTW9kdWxlcy9faW9tb2R1bGUubyBNb2R1bGVzL2lvYmFzZS5vICcKKyAg
ICAgICAgICAgICdNb2R1bGVzL2ZpbGVpby5vIE1vZHVsZXMvYnl0ZXNpby5vIE1vZHVsZXMvYnVm
ZmVyZWRpby5vICcKKyAgICAgICAgICAgICdNb2R1bGVzL3RleHRpby5vIE1vZHVsZXMvc3RyaW5n
aW8ubyAgTW9kdWxlcy96aXBpbXBvcnQubyAgJworICAgICAgICAgICAgJ01vZHVsZXMvZmF1bHRo
YW5kbGVyLm8gIE1vZHVsZXMvX3RyYWNlbWFsbG9jLm8gJworICAgICAgICAgICAgJ01vZHVsZXMv
aGFzaHRhYmxlLm8gIE1vZHVsZXMvc3ltdGFibGVtb2R1bGUubyAgJworICAgICAgICAgICAgJ01v
ZHVsZXMveHhzdWJ0eXBlLm8nLAorICdNT0RVTEVfT0JKUyc6ICdcXCcsCisgJ01VTFRJQVJDSCc6
ICd4ODZfNjQtbGludXgtZ251JywKKyAnTVVMVElBUkNIX0NQUEZMQUdTJzogJy1ETVVMVElBUkNI
PVxcIng4Nl82NC1saW51eC1nbnVcXCInLAorICdNVldERUxDSF9JU19FWFBSRVNTSU9OJzogMSwK
KyAnTk9fQVNfTkVFREVEJzogJy1XbCwtLW5vLWFzLW5lZWRlZCcsCisgJ09CSkVDVF9PQkpTJzog
J1xcJywKKyAnT1BFTlNTTF9JTkNMVURFUyc6ICcnLAorICdPUEVOU1NMX0xERkxBR1MnOiAnJywK
KyAnT1BFTlNTTF9MSUJTJzogJy1sc3NsIC1sY3J5cHRvJywKKyAnT1BUJzogJy1ETkRFQlVHIC1n
IC1md3JhcHYgLU8zIC1XYWxsJywKKyAnT1RIRVJfTElCVE9PTF9PUFQnOiAnJywKKyAnUEFDS0FH
RV9CVUdSRVBPUlQnOiAwLAorICdQQUNLQUdFX05BTUUnOiAwLAorICdQQUNLQUdFX1NUUklORyc6
IDAsCisgJ1BBQ0tBR0VfVEFSTkFNRSc6IDAsCisgJ1BBQ0tBR0VfVVJMJzogMCwKKyAnUEFDS0FH
RV9WRVJTSU9OJzogMCwKKyAnUEFSU0VSX0hFQURFUlMnOiAnXFwnLAorICdQQVJTRVJfT0JKUyc6
ICdcXCBQYXJzZXIvbXlyZWFkbGluZS5vIFBhcnNlci9wYXJzZXRvay5vIFBhcnNlci90b2tlbml6
ZXIubycsCisgJ1BHRU4nOiAnUGFyc2VyL3BnZW4nLAorICdQR0VOT0JKUyc6ICdcXCBcXCcsCisg
J1BHT0JKUyc6ICdcXCcsCisgJ1BHT19QUk9GX0dFTl9GTEFHJzogJy1mcHJvZmlsZS1nZW5lcmF0
ZScsCisgJ1BHT19QUk9GX1VTRV9GTEFHJzogJy1mcHJvZmlsZS11c2UgLWZwcm9maWxlLWNvcnJl
Y3Rpb24nLAorICdQT0JKUyc6ICdcXCcsCisgJ1BPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQn
OiAwLAorICdQUk9GSUxFX1RBU0snOiAnLW0gdGVzdC5yZWdydGVzdCAtLXBnbycsCisgJ1BUSFJF
QURfS0VZX1RfSVNfQ09NUEFUSUJMRV9XSVRIX0lOVCc6IDEsCisgJ1BUSFJFQURfU1lTVEVNX1ND
SEVEX1NVUFBPUlRFRCc6IDEsCisgJ1BVUklGWSc6ICcnLAorICdQWTNMSUJSQVJZJzogJycsCisg
J1BZTE9OR19CSVRTX0lOX0RJR0lUJzogMCwKKyAnUFlUSE9OJzogJ3B5dGhvbicsCisgJ1BZVEhP
TkZSQU1FV09SSyc6ICcnLAorICdQWVRIT05GUkFNRVdPUktESVInOiAnbm8tZnJhbWV3b3JrJywK
KyAnUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUic6ICcnLAorICdQWVRIT05GUkFNRVdPUktQUkVG
SVgnOiAnJywKKyAnUFlUSE9OUEFUSCc6ICcnLAorICdQWVRIT05fRk9SX0JVSUxEJzogJy4vcHl0
aG9uIC1FJywKKyAnUFlUSE9OX0ZPUl9SRUdFTic6ICdweXRob24zLjcnLAorICdQWVRIT05fSEVB
REVSUyc6ICdcXCcsCisgJ1BZVEhPTl9PQkpTJzogJ1xcJywKKyAnUFlfQlVJTFRJTl9NT0RVTEVf
Q0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3VsdCAtV3NpZ24tY29tcGFyZSAtRE5ERUJVRyAtZyAn
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctZndyYXB2IC1PMyAtV2FsbCAtc3RkPWM5
OSAtV2V4dHJhICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXJl
c3VsdCAtV25vLXVudXNlZC1wYXJhbWV0ZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV25vLWNhc3QtZnVuY3Rpb24tdHlwZSAnCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIC1JLiAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICctSS4vSW5jbHVkZSAtRFB5X0JVSUxEX0NPUkVf
QlVJTFRJTicsCisgJ1BZX0NGTEFHUyc6ICctV25vLXVudXNlZC1yZXN1bHQgLVdzaWduLWNvbXBh
cmUgLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgLVdhbGwnLAorICdQWV9DRkxBR1NfTk9ESVNUJzog
Jy1zdGQ9Yzk5IC1XZXh0cmEgLVduby11bnVzZWQtcmVzdWx0ICcKKyAgICAgICAgICAgICAgICAg
ICAgICctV25vLXVudXNlZC1wYXJhbWV0ZXIgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVy
cyAnCisgICAgICAgICAgICAgICAgICAgICAnLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUgJworICAg
ICAgICAgICAgICAgICAgICAgJy1XZXJyb3I9aW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24n
LAorICdQWV9DT0VSQ0VfQ19MT0NBTEUnOiAxLAorICdQWV9DT1JFX0NGTEFHUyc6ICctV25vLXVu
dXNlZC1yZXN1bHQgLVdzaWduLWNvbXBhcmUgLUROREVCVUcgLWcgLWZ3cmFwdiAtTzMgJworICAg
ICAgICAgICAgICAgICAgICctV2FsbCAtc3RkPWM5OSAtV2V4dHJhIC1Xbm8tdW51c2VkLXJlc3Vs
dCAnCisgICAgICAgICAgICAgICAgICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW1pc3Np
bmctZmllbGQtaW5pdGlhbGl6ZXJzICcKKyAgICAgICAgICAgICAgICAgICAnLVduby1jYXN0LWZ1
bmN0aW9uLXR5cGUgJworICAgICAgICAgICAgICAgICAgICctV2Vycm9yPWltcGxpY2l0LWZ1bmN0
aW9uLWRlY2xhcmF0aW9uIC1JLiAtSS4vSW5jbHVkZSAnCisgICAgICAgICAgICAgICAgICAgJy1E
UHlfQlVJTERfQ09SRScsCisgJ1BZX0NPUkVfTERGTEFHUyc6ICcnLAorICdQWV9DUFBGTEFHUyc6
ICctSS4gLUkuL0luY2x1ZGUnLAorICdQWV9GT1JNQVRfU0laRV9UJzogJyJ6IicsCisgJ1BZX0xE
RkxBR1MnOiAnJywKKyAnUFlfTERGTEFHU19OT0RJU1QnOiAnJywKKyAnUFlfU1NMX0RFRkFVTFRf
Q0lQSEVSUyc6IDEsCisgJ1BZX1NTTF9ERUZBVUxUX0NJUEhFUl9TVFJJTkcnOiAwLAorICdQWV9T
VERNT0RVTEVfQ0ZMQUdTJzogJy1Xbm8tdW51c2VkLXJlc3VsdCAtV3NpZ24tY29tcGFyZSAtRE5E
RUJVRyAtZyAtZndyYXB2ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctTzMgLVdhbGwgLXN0
ZD1jOTkgLVdleHRyYSAtV25vLXVudXNlZC1yZXN1bHQgJworICAgICAgICAgICAgICAgICAgICAg
ICAgJy1Xbm8tdW51c2VkLXBhcmFtZXRlciAtV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJz
ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICctV25vLWNhc3QtZnVuY3Rpb24tdHlwZSAnCisg
ICAgICAgICAgICAgICAgICAgICAgICAnLVdlcnJvcj1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJh
dGlvbiAtSS4gLUkuL0luY2x1ZGUnLAorICdQeV9ERUJVRyc6IDAsCisgJ1B5X0VOQUJMRV9TSEFS
RUQnOiAwLAorICdQeV9IQVNIX0FMR09SSVRITSc6IDAsCisgJ1FVSUNLVEVTVE9QVFMnOiAnLXgg
dGVzdF9zdWJwcm9jZXNzIHRlc3RfaW8gdGVzdF9saWIydG8zIFxcJywKKyAnUkVBREVMRic6ICdy
ZWFkZWxmJywKKyAnUkVTU1JDRElSJzogJ01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrJywKKyAnUkVU
U0lHVFlQRSc6ICd2b2lkJywKKyAnUlVOU0hBUkVEJzogJycsCisgJ1NDUklQVERJUic6ICcvdXNy
L2xvY2FsL2xpYicsCisgJ1NFVFBHUlBfSEFWRV9BUkcnOiAwLAorICdTR0lfQUJJJzogJ0BTR0lf
QUJJQCcsCisgJ1NIRUxMJzogJy9iaW4vc2gnLAorICdTSExJQlMnOiAnLWxjcnlwdCAtbHB0aHJl
YWQgLWxkbCAgLWx1dGlsJywKKyAnU0hMSUJfU1VGRklYJzogJy5zbycsCisgJ1NJR05FRF9SSUdI
VF9TSElGVF9aRVJPX0ZJTExTJzogMCwKKyAnU0lURVBBVEgnOiAnJywKKyAnU0laRU9GX0RPVUJM
RSc6IDgsCisgJ1NJWkVPRl9GTE9BVCc6IDQsCisgJ1NJWkVPRl9GUE9TX1QnOiAxNiwKKyAnU0la
RU9GX0lOVCc6IDQsCisgJ1NJWkVPRl9MT05HJzogOCwKKyAnU0laRU9GX0xPTkdfRE9VQkxFJzog
MTYsCisgJ1NJWkVPRl9MT05HX0xPTkcnOiA4LAorICdTSVpFT0ZfT0ZGX1QnOiA4LAorICdTSVpF
T0ZfUElEX1QnOiA0LAorICdTSVpFT0ZfUFRIUkVBRF9LRVlfVCc6IDQsCisgJ1NJWkVPRl9QVEhS
RUFEX1QnOiA4LAorICdTSVpFT0ZfU0hPUlQnOiAyLAorICdTSVpFT0ZfU0laRV9UJzogOCwKKyAn
U0laRU9GX1RJTUVfVCc6IDgsCisgJ1NJWkVPRl9VSU5UUFRSX1QnOiA4LAorICdTSVpFT0ZfVk9J
RF9QJzogOCwKKyAnU0laRU9GX1dDSEFSX1QnOiA0LAorICdTSVpFT0ZfX0JPT0wnOiAxLAorICdT
T0FCSSc6ICdjcHl0aG9uLTM3bS14ODZfNjQtbGludXgtZ251JywKKyAnU1JDRElSUyc6ICdQYXJz
ZXIgT2JqZWN0cyBQeXRob24gTW9kdWxlcyBNb2R1bGVzL19pbyBQcm9ncmFtcycsCisgJ1NSQ19H
REJfSE9PS1MnOiAnLi9Ub29scy9nZGIvbGlicHl0aG9uLnB5JywKKyAnU1REQ19IRUFERVJTJzog
MSwKKyAnU1RSSUNUX1NZU1ZfQ1VSU0VTJzogIi8qIERvbid0IHVzZSBuY3Vyc2VzIGV4dGVuc2lv
bnMgKi8iLAorICdTVFJJUEZMQUcnOiAnLXMnLAorICdTVUJESVJTJzogJycsCisgJ1NVQkRJUlNU
T08nOiAnSW5jbHVkZSBMaWIgTWlzYycsCisgJ1NZU0xJQlMnOiAnLWxtJywKKyAnU1lTX1NFTEVD
VF9XSVRIX1NZU19USU1FJzogMSwKKyAnVEFOSF9QUkVTRVJWRVNfWkVST19TSUdOJzogMSwKKyAn
VENMVEtfSU5DTFVERVMnOiAnJywKKyAnVENMVEtfTElCUyc6ICcnLAorICdURVNUT1BUUyc6ICcn
LAorICdURVNUUEFUSCc6ICcnLAorICdURVNUUFlUSE9OJzogJy4vcHl0aG9uJywKKyAnVEVTVFBZ
VEhPTk9QVFMnOiAnJywKKyAnVEVTVFJVTk5FUic6ICcuL3B5dGhvbiAuL1Rvb2xzL3NjcmlwdHMv
cnVuX3Rlc3RzLnB5JywKKyAnVEVTVFRJTUVPVVQnOiAxMjAwLAorICdUSU1FTU9EVUxFX0xJQic6
IDAsCisgJ1RJTUVfV0lUSF9TWVNfVElNRSc6IDEsCisgJ1RNX0lOX1NZU19USU1FJzogMCwKKyAn
VU5JQ09ERV9ERVBTJzogJ1xcJywKKyAnVU5JVkVSU0FMU0RLJzogJycsCisgJ1VQREFURV9GSUxF
JzogJ3B5dGhvbjMuNyAuL1Rvb2xzL3NjcmlwdHMvdXBkYXRlX2ZpbGUucHknLAorICdVU0VfQ09N
UFVURURfR09UT1MnOiAwLAorICdWRVJTSU9OJzogJzMuNycsCisgJ1dJTkRPV19IQVNfRkxBR1Mn
OiAxLAorICdXSVRIX0RPQ19TVFJJTkdTJzogMSwKKyAnV0lUSF9EVFJBQ0UnOiAwLAorICdXSVRI
X0RZTEQnOiAwLAorICdXSVRIX0xJQklOVEwnOiAwLAorICdXSVRIX05FWFRfRlJBTUVXT1JLJzog
MCwKKyAnV0lUSF9QWU1BTExPQyc6IDEsCisgJ1dJVEhfVkFMR1JJTkQnOiAwLAorICdYODdfRE9V
QkxFX1JPVU5ESU5HJzogMCwKKyAnWE1MTElCU1VCRElSUyc6ICd4bWwgeG1sL2RvbSB4bWwvZXRy
ZWUgeG1sL3BhcnNlcnMgeG1sL3NheCcsCisgJ2Fic19idWlsZGRpcic6ICcnLAorICdhYnNfc3Jj
ZGlyJzogJycsCisgJ2RhdGFyb290ZGlyJzogJy91c3IvbG9jYWwvc2hhcmUnLAorICdleGVjX3By
ZWZpeCc6ICcvdXNyL2xvY2FsJywKKyAncHJlZml4JzogJy91c3IvbG9jYWwnLAorICdzcmNkaXIn
OiAnLid9Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:21 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:21 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7p-0005si-R8; Mon, 23 Sep 2019 09:59:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7o-0005s8-FO
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:20 +0000
X-Inumbo-ID: c753e8a4-dde8-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id c753e8a4-dde8-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 09:59:06 +0000 (UTC)
IronPort-SDR: PxSn7GTqLpwdMd7E5GE0wImdwyFQWIv6bcO9voiE0KAYkZ85NNSDHxrbSq3gIPDqtU4/aL+HhL
 cUiQ+UxZy4TQ==
IronPort-PHdr: =?us-ascii?q?9a23=3ATUD9ihWtuiYWYpe0MgbU2s8X7rLV8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbReEt8tkgFKBZ4jH8fUM07OQ7/m7HzZQqszZ+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvHdFeOtayX10KVmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQe3Ce/z1jNFnGP60Lcm3+?=
 =?us-ascii?q?g9FwzNwQwuH8gJsHTRtNj4KqASUfupzKnJyzXIcvVY2Srl6IjVbxsspu2DXb?=
 =?us-ascii?q?VrccrNyEkvERnJjlGNqYz9IjOYzfgCs3OB4+p4SOKgkHQrqxt2ojW2wMonl4?=
 =?us-ascii?q?rHhpoNx1zZ+ih13Zw5KN64RUJhf9KoDplduzuUOoduX88vTHxktDw5x7AGo5?=
 =?us-ascii?q?K3YiYHxZo9yxLCZPGLbY6F6Q/5WumLOzd3nndldaq6hxa17Eev1PXxVtKx0F?=
 =?us-ascii?q?ZWtipFlcTMtmwV2xzT9MeHTvx981+/2TaKzQ/T6+VELVoomqrAMZIh2qMwmY?=
 =?us-ascii?q?EJvUTZGS/6gET2jKmIeUU44uWk9uvqbqj8qpKfN4J4kB/yProsl8ClD+k0Kg?=
 =?us-ascii?q?0OUHKa+eS42r3j50r5QLBSg/IqlanZq4zaJcUdpqKjBw9Vz54j6wukAji6y9?=
 =?us-ascii?q?QUh2EHLE9edx6dlYjpPEnCIOrkAvenn1SsjDBryujDPr3gBJXNL3/DkKz4cb?=
 =?us-ascii?q?lg9UFc1hQ8zdRE6pJQC7EBO+7zWlTruN3XEBA5NRa4w+H9CNVyzokeQ36AAr?=
 =?us-ascii?q?eFMKPOtl+F/uwvLPeIZI8UoDbyNeIp5/7zjX84hVAdfLKk3Z0JZ3+kGvRpOV?=
 =?us-ascii?q?6WbWDyjdccCW0KpBYxTPT2iF2eVj5ef2iyX6Ym6T4mEI2pF4HDSZ23gLOf3S?=
 =?us-ascii?q?e3BIZZaXpbBVCLEHfoap6JW+wQaCKPP8BtiCYLWqS6S4M7yBGurBT1x6B9Lu?=
 =?us-ascii?q?rTqWUkssfm1d504PaWmRws+DhcC8WGz3rLX2xy2GQSSGwYxqd69Gd60UuC1+?=
 =?us-ascii?q?BcnuRFXYhY4OhVUwF8MYPE0sRxEJbqRwiHZNDfGwXuecmvHTxkFoF5+NQJeU?=
 =?us-ascii?q?soQ9g=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BfAAAwlohdjAPjVY1lHQEBBQEMBQG?=
 =?us-ascii?q?BVgUBCwGDClMgEiqNHqM8CQEBASkRAQIBAYQ/AoM3NwYOAgMJAQEFAQEBAQE?=
 =?us-ascii?q?FBAETAQEBJoVdDII6IoJvAwN5ED8SVxmDIgGCDqxyhUyDMoFIgTQBhy+GMT+?=
 =?us-ascii?q?JcoUWBJZClkoHgiVlBIYcjXkngyiVfakINyGBWTMag18JRxAUgWiLUoJcPQE?=
 =?us-ascii?q?BMYEGAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2BfAAAwlohdjAPjVY1lHQEBBQEMBQGBVgUBCwGDClMgE?=
 =?us-ascii?q?iqNHqM8CQEBASkRAQIBAYQ/AoM3NwYOAgMJAQEFAQEBAQEFBAETAQEBJoVdD?=
 =?us-ascii?q?II6IoJvAwN5ED8SVxmDIgGCDqxyhUyDMoFIgTQBhy+GMT+JcoUWBJZClkoHg?=
 =?us-ascii?q?iVlBIYcjXkngyiVfakINyGBWTMag18JRxAUgWiLUoJcPQEBMYEGAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854330"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:59 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id F10001A602EF;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id RlBQlULtBott; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id D60021A602EE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id MQhWvsXT3z0g; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id BA8CE1A602E5;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:50 +0300
Message-Id: <20190923095852.21872-13-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 12/14] Provide main()
 function if configured to do so
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29tZXRpbWVzIGFsbCB5b3Ugd2FudCB0byBydW4gaXMgdGhlIFB5dGhvbiBzaGVsbC4gSW4gdGhp
cyBjYXNlIHlvdSBjYW4gdGljayB0aGUKb3B0aW9uIGluIG1lbnVjb25maWcgc28gdGhhdCB0aGUg
bGlicmFyeSB0byBwcm92aWRlIHRoZSBtYWluKCkgZnVuY3Rpb24gZm9yIHlvdS4KClNpZ25lZC1v
ZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0tLQogQ29uZmlnLnVr
ICAgfCA0ICsrKysKIE1ha2VmaWxlLnVrIHwgMSArCiBtYWluLmMgICAgICB8IDggKysrKysrKysK
IDMgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1h
aW4uYwoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awppbmRleCAzZGEzZmZiLi44
MGE1NTdhIDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBAIC0zMSw0ICsz
MSw4IEBAIGNvbmZpZyBMSUJQWVRIT04zX1RNUERJUgogCXN0cmluZyAiVGVtcCBkaXJlY3Rvcnkg
bG9jYXRpb24iCiAJZGVmYXVsdCAiL3RtcCIKIAorY29uZmlnIExJQlBZVEhPTjNfTUFJTl9GVU5D
VElPTgorCWJvb2wgIlByb3ZpZGUgbWFpbiBmdW5jdGlvbiIKKwlkZWZhdWx0IG4KKwogZW5kaWYK
ZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggOGJjM2FjZC4uYmUy
ZmYyMyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTEwMCw2
ICsxMDAsNyBAQCBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1P
Tl9JTkNMVURFUy15KQogTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04zX0JBU0UpL2lu
aXQuY3x1bmlrcmFmdAogTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04zX0JBU0UpL21v
ZHVsZXNfY29uZmlnLmN8dW5pa3JhZnQKIExJQlBZVEhPTjNfU1JDUy15ICs9ICQoTElCUFlUSE9O
M19CQVNFKS9zdHVicy5jfHVuaWtyYWZ0CitMSUJQWVRIT04zX1NSQ1MtJChDT05GSUdfTElCUFlU
SE9OM19NQUlOX0ZVTkNUSU9OKSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbWFpbi5jfHVuaWtyYWZ0
CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFB5dGhvbiBjb3JlCmRpZmYgLS1naXQgYS9t
YWluLmMgYi9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5ZGYy
YwotLS0gL2Rldi9udWxsCisrKyBiL21haW4uYwpAQCAtMCwwICsxLDggQEAKKyNkZWZpbmUgUHlf
QlVJTERfQ09SRQorI2luY2x1ZGUgPFB5dGhvbi5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQoreworCXJldHVybiBfUHlfVW5peE1haW4oYXJnYywgYXJndik7Cit9CisKLS0g
CjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7t-0005tt-Tk; Mon, 23 Sep 2019 09:59:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7s-0005tP-1Y
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:24 +0000
X-Inumbo-ID: c7223dc2-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c7223dc2-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:05 +0000 (UTC)
IronPort-SDR: MeAr01S6e3JKcGhPiauogdDjrjkmRstvdgzzfcRlU9YH7yb1dT5aiDF2dGXn89ogo+oeJ9J07R
 VVnKsAd426iw==
IronPort-PHdr: =?us-ascii?q?9a23=3AH3iYIBwPCc8ZBIPXCy+O+j09IxM/srCxBDY+r6?=
 =?us-ascii?q?Qd2ukVIJqq85mqBkHD//Il1AaPAdyAragUwLCO++C4ACpcuMzH6ChDOLV3FD?=
 =?us-ascii?q?Y9wf0MmAIhBMPXQWbaF9XNKxIAIcJZSVV+9Gu6O0UGUOz3ZlnVv2HgpWVKQk?=
 =?us-ascii?q?a3OgV6PPn6FZDPhMqrye+y54fTYwJVjzahfL9+Nhq7oRjfu8UMn4dvKak9xg?=
 =?us-ascii?q?XVrnBVf+ha2X5kKUickhrh+Mu85oJv/zhVt/k868NOTKL2crgiQ7dFFjomKW?=
 =?us-ascii?q?c15MPqtRnHUwSC42YXX3sVnBRVHQXL9Qn2UZjtvCT0sOp9wzSaMtbtTb8oQz?=
 =?us-ascii?q?Si7rxkRwHuhSwaKjM26mDXish3jKJGvBKsogF0zoDIbI2JMvd1Y6XQds4YS2?=
 =?us-ascii?q?VcRMZcTyxPDJ2hYYUBDOQPOuRXr4fmqlcSsRezHxWgCfnzxjNUgHL9wK000/?=
 =?us-ascii?q?4mEQHDxAEtAdUOsG/IrNX0MqcZTOa7zLTQzTXecvhb3ivy6I/TchA9oPGMW6?=
 =?us-ascii?q?h8cc7MyUk3CgPIlUmfqZf/MzONy+QCqHKX7/BnVe+2jWMstgJ/oiC3y8sxhY?=
 =?us-ascii?q?TFm5gZx1PE+Clj3oo5O9+1RFR1bNK8DZdduDyWO5F1T84iWW1kpig3x7MctZ?=
 =?us-ascii?q?KmcyUG1pIqzAPFZfOdaYiH+BfjWf6UITd/mX1qZqqyhw238Ui80u38UdS00E?=
 =?us-ascii?q?pSoipFjNbMsncN2gTN6siCUPR9/0Oh1SyT2ADI8O1EOV00mrHBJ547xb48jp?=
 =?us-ascii?q?sTsULdES/qgEj6kaCbelg+9uWr6+nreKvqqoGeOoNuhAzyKqEulda+AeQ8PA?=
 =?us-ascii?q?gORW+b+eGk2bL/+k35W6lKjvwwkqXDtJDaONwbprOiDgBJyYYv8Q6/Dyq939?=
 =?us-ascii?q?gCh3kHK0pJeAibgIjxJ1HOPPf4AO+6g1StljdrxvfGPqb4DprQMHfDjqnufb?=
 =?us-ascii?q?Jm5k5YyQoz1sxf54lOBrAOPv3zXFX9tNvCDh82Kwa02froCM1h1oMCXmKCGq?=
 =?us-ascii?q?GZP73WsV+J/uIgPfOAZI8IuDb8N/cl5uXjjXknllABeammx4AYZGqmEfR7O0?=
 =?us-ascii?q?+Ze2bjgs8dEWcWuQozVPLqiFmYXjFOf3m9RaQ86SwhCI24DIfPXJuij6ac0y?=
 =?us-ascii?q?e8H51We3tLCkuQEXf1aoqIQe0DZz6JIsN7jzwETaOuR5U71RGp50fGzO9iL+?=
 =?us-ascii?q?zV/TZduZ/92dxd4+zIiQp05TFyScOH3DKjVWZxy0gPXCM32uhbvFRgggOI1r?=
 =?us-ascii?q?NkgvoeEcFL+ttCSUEiKJSa1essWIO6YR7IYtrcEAXued6hGzxkFt8=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ANAAAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBUwcBAQsBgXOBF1MgEiqMPmCIH36YJBSBZwkBAQEpEQECAQGBS4J0AoM?=
 =?us-ascii?q?3NAkOAgMJAQEFAQEBAQEFBAETAQEBJoVdDII6IoJvAwN5ECAfElcZgldLAYI?=
 =?us-ascii?q?OrHKFTIMygUiBNAGHL4M7gnY/gRGCXYR8FIYKBI0RiBKBH5ZKB4IlZQSGHIk?=
 =?us-ascii?q?vhEongmVDlX2pCCE3gVkzGnOCbAlHEBSBWg4Ji0mCXD0BATEBgQUBAYsRglQ?=
 =?us-ascii?q?BAQ?=
X-IPAS-Result: =?us-ascii?q?A2ANAAAwlohdjAPjVY1lHAEBAQQBAQwEAQGBUwcBAQsBg?=
 =?us-ascii?q?XOBF1MgEiqMPmCIH36YJBSBZwkBAQEpEQECAQGBS4J0AoM3NAkOAgMJAQEFA?=
 =?us-ascii?q?QEBAQEFBAETAQEBJoVdDII6IoJvAwN5ECAfElcZgldLAYIOrHKFTIMygUiBN?=
 =?us-ascii?q?AGHL4M7gnY/gRGCXYR8FIYKBI0RiBKBH5ZKB4IlZQSGHIkvhEongmVDlX2pC?=
 =?us-ascii?q?CE3gVkzGnOCbAlHEBSBWg4Ji0mCXD0BATEBgQUBAYsRglQBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854328"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id D04121A602FB;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id gLb2qs2nRz-Z; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B9AFF1A602F6;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id xuU0hzdAIAxm; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id A0C451A602EF;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:48 +0300
Message-Id: <20190923095852.21872-11-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 10/14] Add init.c for
 initialization
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKVGhpcyBwYXRjaCBzZXRzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdGhhdCBhcmUg
bmVlZGVkIGR1cmluZyBydW50aW1lIGZvcgp0aGUgaW50ZXByZXRlci4KClNpZ25lZC1vZmYtYnk6
IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4K
U2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBD
b25maWcudWsgICB8IDEzICsrKysrKysrKysrKysKIE1ha2VmaWxlLnVrIHwgIDEgKwogaW5pdC5j
ICAgICAgfCA0NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
CiAzIGZpbGVzIGNoYW5nZWQsIDYwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp
bml0LmMKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5kZXggZjgwMWEwYy4u
M2RhM2ZmYiAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBiL0NvbmZpZy51awpAQCAtMTgsNCAr
MTgsMTcgQEAgbWVudWNvbmZpZyBMSUJQWVRIT04zCiAJc2VsZWN0IExXSVBfSVBWNgogCiBpZiBM
SUJQWVRIT04zCisKK2NvbmZpZyBMSUJQWVRIT04zX1BZVEhPTkhPTUUKKwlzdHJpbmcgIlB5dGhv
biBob21lIGRpcmVjdG9yeSIKKwlkZWZhdWx0ICIvbGliL3B5dGhvbjMuNyIKKworY29uZmlnIExJ
QlBZVEhPTjNfUFlUSE9OUEFUSAorCXN0cmluZyAiUHl0aG9uIHBhdGgiCisJZGVmYXVsdCAiL2xp
Yi9weXRob24zLjciCisKK2NvbmZpZyBMSUJQWVRIT04zX1RNUERJUgorCXN0cmluZyAiVGVtcCBk
aXJlY3RvcnkgbG9jYXRpb24iCisJZGVmYXVsdCAiL3RtcCIKKwogZW5kaWYKZGlmZiAtLWdpdCBh
L01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggNGQ2N2Y2Yy4uZGM2ZTRhZCAxMDA2NDQK
LS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTk3LDYgKzk3LDcgQEAgTElC
UFlUSE9OM19DT01NT05fQ1hYRkxBR1MteSArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0RFRklORVMt
eSkKIExJQlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0lOQ0xV
REVTLXkpCiBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9J
TkNMVURFUy15KQogCitMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvaW5p
dC5jfHVuaWtyYWZ0CiBMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbW9k
dWxlc19jb25maWcuY3x1bmlrcmFmdAogTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04z
X0JBU0UpL3N0dWJzLmN8dW5pa3JhZnQKIApkaWZmIC0tZ2l0IGEvaW5pdC5jIGIvaW5pdC5jCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMDYyNzkKLS0tIC9kZXYvbnVsbAor
KysgYi9pbml0LmMKQEAgLTAsMCArMSw0NiBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6
IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IEJhZG9pdSBWbGFkLUFuZHJlaSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdo
dCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVE
IElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUgPHVr
L2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordm9pZCBfX2NvbnN0cnVjdG9y
IHB5dGhvbl9pbml0KHZvaWQpCit7CisJc2V0ZW52KCJQWVRIT05IT01FIiwgQ09ORklHX0xJQlBZ
VEhPTjNfUFlUSE9OSE9NRSwgMCk7CisJc2V0ZW52KCJQWVRIT05QQVRIIiwgQ09ORklHX0xJQlBZ
VEhPTjNfUFlUSE9OUEFUSCwgMCk7CisJc2V0ZW52KCJQWVRIT05VU0VSQkFTRSIsICJzaXRlLXBh
Y2thZ2VzIiwgMCk7CisJc2V0ZW52KCJUTVBESVIiLCBDT05GSUdfTElCUFlUSE9OM19UTVBESVIs
IDApOworCXNldGVudigiX1BZVEhPTl9TWVNDT05GSUdEQVRBX05BTUUiLCAiX3N5c2NvbmZpZ2Rh
dGEiLCAwKTsKK30KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7u-0005uI-VN; Mon, 23 Sep 2019 09:59:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7t-0005th-Fa
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:25 +0000
X-Inumbo-ID: c7f6d4e2-dde8-11e9-b76c-bc764e2007e4
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTP
 id c7f6d4e2-dde8-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 09:59:07 +0000 (UTC)
IronPort-SDR: dVPBossJVYfWcZvFGC/pAZyklNPagR1YjPzIcUWJ3ZmwXdXLa9LLepcBvsQUxPF/7w+9e6ol3n
 G/IM7xeksFzw==
IronPort-PHdr: =?us-ascii?q?9a23=3AfB8GdBXSRYvVHo93oYkYxmvaZo3V8LGtZVwlr6?=
 =?us-ascii?q?E/grcLSJyIuqrYbROGt8tkgFKBZ4jH8fUM07OQ7/m7HzZQqszZ+DBaKdoQDk?=
 =?us-ascii?q?VD0Z1X1yUbQ+e9QXXhK/DrayFoVO9jb3RCu0+BDE5OBczlbEfTqHDhpRQbGx?=
 =?us-ascii?q?H4KBYnbr+tQt2agMu4zf299IPOaAtUmjW9falyLBKrpgnNq8Uam4RvJrs/xx?=
 =?us-ascii?q?fTvHdFeOtayX10KVmOmxrw+tq88IRs/ihNpf4t7dJMXbn/c68lUbFWETMqPn?=
 =?us-ascii?q?wv6sb2rxfDVwyP5nUdUmUSjBVFBhXO4Q/5UJnsrCb0r/Jx1yaGM8L4S7A0Qi?=
 =?us-ascii?q?mi4LxwSBD0kicHNiU2/3/Rh8dtka9UuhOhpxh4w47JfIGYMed1c63Bcd8GQ2?=
 =?us-ascii?q?dKQ8BcXDFDDIyhdYsCF+oPM/hFoYfzpFUAqhmxBQe3Ce/z1jNFnGP60Lcm3+?=
 =?us-ascii?q?g9FwzNwQwuH8gJsHTRtNj4KqASUfupzKnJyzXIcvVY2Srl6IjVbxsspu2DXb?=
 =?us-ascii?q?VrccrNyEkvERnJjlGNqYz9IjOYzfgCs3OB4+p4SOKgkHQrqxt2ojW2wMonl4?=
 =?us-ascii?q?fHhoUQyl/e9CV5xp44KsamR058ed6rDp1QuzuGOItxR8MvRXxjtiUiyrAepJ?=
 =?us-ascii?q?K2czUGxI4kyhPfcfCLbZaE7xD5WOufOTt0mX1odK+lixux8UWs0PPwW8e63V?=
 =?us-ascii?q?pQsyZIncfAu3YQ3BLJ8MeHUOFy/kK51DaK0ADc9/9LLFgvlareN54h2rkwlo?=
 =?us-ascii?q?cPsUjbHi/5hkH2jKiOe0U6/+in8eXnYrH8qpCALI94kBn+Mrk1lcClG+Q4NR?=
 =?us-ascii?q?ACX2md+euiyL3u5VD1TbpXgvEskaTUsIrWKdoFqqO7GQNY3J4v6xOlADen1N?=
 =?us-ascii?q?QYk2MHLFVAeB+fk4fpPErOIOz5Dfe5mVislCprx+jbPrD6HprNNWLPkK/8fb?=
 =?us-ascii?q?lm8UJc0g0zwchF551IErEBPO7zWkjpudzdDx85NQ20w+H8CNlky4wRR3yPDb?=
 =?us-ascii?q?GdMK7JtV+I5/kvI/WXZIMPtzfyNf4l6+TpjX8jll8XZbOp0ocPaHCkAvRmJF?=
 =?us-ascii?q?2UYXTyjdcFEGcKphQxQPbqiF2fUD5ce3eyUrk65j4lFI2mCZ3MSZu3jLOfwS?=
 =?us-ascii?q?exBodWaXxeClCQDXfocJ2JW+kIaC2IP8BuiiYLVb68RI87yx6utRX2xKF9Ie?=
 =?us-ascii?q?XJ/S0YtI/j2cNu5+3PiBE96CZ4AN6B3GGWVW10g3sISCQs0KBlpkwugmuEhK?=
 =?us-ascii?q?15hf1fDplf6u1EVi8+NIXA1KpqBta0XRjOLfmTT1PzadK9HTA3BvYs28JGN0?=
 =?us-ascii?q?16AMmjiFbHwjK3K7QO0aSWDtou9fSPjDDKO89hxiOeh+EahF48T54XOA=3D?=
 =?us-ascii?q?=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BBAAAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBVgQBAQsBgwpTIBIqjR6IH5k2gWcJAQEBKREBAgEBhD8Cgzc3Bg4CAwk?=
 =?us-ascii?q?BAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxyhDcBgRS?=
 =?us-ascii?q?DMoFIgTQBhy+DO4J2P4ERh1mGHgSVPoEElkoHgiVlBIYcjXkngyiRXIQhLah?=
 =?us-ascii?q?bNyGBWTMag18JRxAUgVoOCYNPglaFJIJcPQEBMQGBBQEBjWUBAQ?=
X-IPAS-Result: =?us-ascii?q?A2BBAAAwlohdjAPjVY1lHAEBAQQBAQwEAQGBVgQBAQsBg?=
 =?us-ascii?q?wpTIBIqjR6IH5k2gWcJAQEBKREBAgEBhD8Cgzc3Bg4CAwkBAQUBAQEBAQUEA?=
 =?us-ascii?q?RMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxyhDcBgRSDMoFIgTQBhy+DO?=
 =?us-ascii?q?4J2P4ERh1mGHgSVPoEElkoHgiVlBIYcjXkngyiRXIQhLahbNyGBWTMag18JR?=
 =?us-ascii?q?xAUgVoOCYNPglaFJIJcPQEBMQGBBQEBjWUBAQ?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854327"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id BFA4B1A602E4;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id RL9wvnwXopMx; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id A6B8C1A602E8;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id trYtb92-3Dlv; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 82BC51A602F1;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:46 +0300
Message-Id: <20190923095852.21872-9-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 08/14] Add
 modules_config.c
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKVGhpcyBmaWxlIGlzIGNvcGllZCBmcm9tIGEgJy4vTW9kdWxlcy9jb25maWcuYycgb2Yg
YSBMaW51eCBidWlsZCBhbmQgaXQgY29udGFpbnMKdGhlIG1vZHVsZXMgaW5pdCBmdW5jdGlvbnMg
YW5kIHRoZWlyIHJlZ2lzdHJhdGlvbiBhcyBQeXRob24gZXh0ZW5zaW9ucy4gV2UKY29tbWVudGVk
IHRoZSByZWdpc3RyYXRpb24gb2YgdGhlIG1vZHVsZXMgdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCB5
ZXQuIFRoZXkKc2hvdWxkIGJlIGVuYWJsZWQgYmFjayB3aGVuIHdlIHdpbGwgYWRkIHN1cHBvcnQg
Zm9yIHRoZW0gYnkgcG9ydGluZyB0aGUKdW5kZXJseWluZyBuYXRpdmUgbGlicmFyaWVzLgoKU2ln
bmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5h
Y3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHVi
LnJvPgotLS0KIE1ha2VmaWxlLnVrICAgICAgfCAgIDIgKwogbW9kdWxlc19jb25maWcuYyB8IDMy
OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxl
cyBjaGFuZ2VkLCAzMzAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IG1vZHVsZXNf
Y29uZmlnLmMKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDk1
MTE5ZDcuLjQ4MzI0MTcgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVr
CkBAIC05Nyw2ICs5Nyw4IEBAIExJQlBZVEhPTjNfQ09NTU9OX0NYWEZMQUdTLXkgKz0gJChMSUJQ
WVRIT04zX0NPTU1PTl9ERUZJTkVTLXkpCiBMSUJQWVRIT04zX0NJTkNMVURFUy15ICAgKz0gJChM
SUJQWVRIT04zX0NPTU1PTl9JTkNMVURFUy15KQogTElCUFlUSE9OM19DWFhJTkNMVURFUy15ICs9
ICQoTElCUFlUSE9OM19DT01NT05fSU5DTFVERVMteSkKIAorTElCUFlUSE9OM19TUkNTLXkgKz0g
JChMSUJQWVRIT04zX0JBU0UpL21vZHVsZXNfY29uZmlnLmN8dW5pa3JhZnQKKwogIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKICMgUHl0aG9uIGNvcmUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRp
ZmYgLS1naXQgYS9tb2R1bGVzX2NvbmZpZy5jIGIvbW9kdWxlc19jb25maWcuYwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmQ2MDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9k
dWxlc19jb25maWcuYwpAQCAtMCwwICsxLDMyOCBAQAorLyogR2VuZXJhdGVkIGF1dG9tYXRpY2Fs
bHkgZnJvbSAuL01vZHVsZXMvY29uZmlnLmMuaW4gYnkgbWFrZXNldHVwLiAqLworLyogLSotIEMg
LSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDb3B5
cmlnaHQgKGMpIDIwMDAsIEJlT3Blbi5jb20uCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMCwgQ29y
cG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzLgorQ29weXJpZ2h0IChj
KSAxOTkwLTE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bS4KK0FsbCByaWdodHMg
cmVzZXJ2ZWQuCisKK1NlZSB0aGUgZmlsZSAiTWlzYy9DT1BZUklHSFQiIGZvciBpbmZvcm1hdGlv
biBvbiB1c2FnZSBhbmQKK3JlZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlsZSwgYW5kIGZvciBhIERJ
U0NMQUlNRVIgT0YgQUxMIFdBUlJBTlRJRVMuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1vZHVsZSBjb25m
aWd1cmF0aW9uICovCisKKy8qICEhISAhISEgISEhIFRoaXMgZmlsZSBpcyBlZGl0ZWQgYnkgdGhl
IG1ha2VzZXR1cCBzY3JpcHQgISEhICEhISAhISEgKi8KKworLyogVGhpcyBmaWxlIGNvbnRhaW5z
IHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgorICAgU2VlIGNyZWF0ZV9idWlsdGluKCkg
aW4gaW1wb3J0LmMuICovCisKKyNpbmNsdWRlIDx1ay9jb25maWcuaD4KKyNpbmNsdWRlICJQeXRo
b24uaCIKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X3Bvc2l4KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUlu
aXRfZXJybm8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9wd2Qodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fc3JlKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X2NvZGVjcyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X193ZWFrcmVmKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2Z1bmN0b29scyh2b2lkKTsKK2V4dGVybiBQeU9iamVj
dCogUHlJbml0X19vcGVyYXRvcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19jb2xs
ZWN0aW9ucyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19hYmModm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9pdGVydG9vbHModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9hdGV4aXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2lnbmFsKHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0YXQodm9pZCk7CitleHRlcm4gUHlPYmplY3Qq
IFB5SW5pdF90aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3RocmVhZCh2b2lk
KTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19sb2NhbGUodm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9faW8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF96aXBpbXBvcnQo
dm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mYXVsdGhhbmRsZXIodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2VtYWxsb2Modm9pZCk7CitleHRlcm4gUHlPYmplY3Qq
IFB5SW5pdF9fc3ltdGFibGUodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF94eHN1YnR5
cGUodm9pZCk7CisKKy8qIFVuaWtyYWZ0IE1hcmtlciBzdGFydCAqLworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2FiYyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X2FycmF5KHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2FzeW5jaW8odm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9hdGV4aXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9hdWRpb29w
KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfYmluYXNjaWkodm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fYmlzZWN0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X2JsYWtlMih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19iejIodm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9jbWF0aCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0
X19jb2RlY3Modm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY29sbGVjdGlvbnModm9p
ZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY29udGV4dHZhcnModm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fY3J5cHQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9f
Y3N2KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2N0eXBlc190ZXN0KHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2N0eXBlcyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X19jdXJzZXNfcGFuZWwodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fY3Vy
c2VzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfY3VzdG9tMih2b2lkKTsKK2V4dGVy
biBQeU9iamVjdCogUHlJbml0X2N1c3RvbTModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5p
dF9jdXN0b200KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfY3VzdG9tKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2RhdGV0aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2RibSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19kZWNpbWFsKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2VsZW1lbnR0cmVlKHZvaWQpOworZXh0ZXJu
IFB5T2JqZWN0KiBQeUluaXRfZXJybm8odm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9m
YXVsdGhhbmRsZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9mY250bCh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X19mdW5jdG9vbHModm9pZCk7CitleHRlcm4gUHlPYmpl
Y3QqIFB5SW5pdF9nYyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X2dycCh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X19oYXNobGliKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX2hlYXBxKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2ltcCh2b2lk
KTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19pbyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X2l0ZXJ0b29scyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19qc29uKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX2xvY2FsZSh2b2lkKTsKK2V4dGVybiBQeU9i
amVjdCogUHlJbml0X19sc3Byb2Yodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fbHpt
YSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X21hdGgodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9fbWQ1KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfbW1hcCh2
b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19tdWx0aWJ5dGVjb2RlYyh2b2lkKTsKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X19tdWx0aXByb2Nlc3Npbmcodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9uaXModm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3Bjb2Rl
KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX29wZXJhdG9yKHZvaWQpOworZXh0ZXJu
IFB5T2JqZWN0KiBQeUluaXRfb3NzYXVkaW9kZXYodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9fb3ZlcmxhcHBlZCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3BhcnNlcih2
b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19waWNrbGUodm9pZCk7CitleHRlcm4gUHlP
YmplY3QqIFB5SW5pdF9fcG9zaXhzdWJwcm9jZXNzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfcHdkKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3F1ZXVlKHZvaWQpOwor
ZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3JhbmRvbSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCog
UHlJbml0X3JlYWRsaW5lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfcmVzb3VyY2Uo
dm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2Nwcm94eSh2b2lkKTsKK2V4dGVybiBQ
eU9iamVjdCogUHlJbml0X3NlbGVjdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19z
aGExKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3NoYTI1Nih2b2lkKTsKK2V4dGVy
biBQeU9iamVjdCogUHlJbml0X19zaGEzKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X3NoYTUxMih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zaWduYWwodm9pZCk7Citl
eHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc29ja2V0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfc3B3ZCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X19zc2wodm9pZCk7Citl
eHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RhdCh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJ
bml0X19zdHJpbmcodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RydWN0KHZvaWQp
OworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfc3VibGlzdCh2b2lkKTsKK2V4dGVybiBQeU9iamVj
dCogUHlJbml0X19zeW10YWJsZSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3N5c2xv
Zyh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X3Rlcm1pb3Modm9pZCk7CitleHRlcm4g
UHlPYmplY3QqIFB5SW5pdF9fdGVzdGJ1ZmZlcih2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJ
bml0X190ZXN0Y2FwaSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCogUHlJbml0X190aHJlYWQodm9p
ZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF90aW1lKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0
KiBQeUluaXRfX3RraW50ZXIodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fdHJhY2Vt
YWxsb2Modm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF91bmljb2RlZGF0YSh2b2lkKTsK
K2V4dGVybiBQeU9iamVjdCogUHlJbml0X191dWlkKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQ
eUluaXRfX3dlYWtyZWYodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fd2luYXBpKHZv
aWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfeHhsaW1pdGVkKHZvaWQpOworZXh0ZXJuIFB5
T2JqZWN0KiBQeUluaXRfeHhzdWJ0eXBlKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRf
X3h4dGVzdGZ1enoodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF94eCh2b2lkKTsKK2V4
dGVybiBQeU9iamVjdCogUHlJbml0X3ppcGltcG9ydCh2b2lkKTsKKyNpZmRlZiBDT05GSUdfTElC
WkxJQgorZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfemxpYih2b2lkKTsKKyNlbmRpZgorLyogVW5p
a3JhZnQgTWFya2VyIGVuZCAqLworLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCisKK2V4
dGVybiBQeU9iamVjdCogUHlNYXJzaGFsX0luaXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5
SW5pdF9faW1wKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZ2Modm9pZCk7CitleHRl
cm4gUHlPYmplY3QqIFB5SW5pdF9fYXN0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBfUHlXYXJu
aW5nc19Jbml0KHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0cmluZyh2b2lkKTsK
Kworc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7CisKKyAgICB7InBvc2l4
IiwgUHlJbml0X3Bvc2l4fSwKKyAgICB7ImVycm5vIiwgUHlJbml0X2Vycm5vfSwKKyAgICB7InB3
ZCIsIFB5SW5pdF9wd2R9LAorICAgIHsiX3NyZSIsIFB5SW5pdF9fc3JlfSwKKyAgICB7Il9jb2Rl
Y3MiLCBQeUluaXRfX2NvZGVjc30sCisgICAgeyJfd2Vha3JlZiIsIFB5SW5pdF9fd2Vha3JlZn0s
CisgICAgeyJfZnVuY3Rvb2xzIiwgUHlJbml0X19mdW5jdG9vbHN9LAorICAgIHsiX29wZXJhdG9y
IiwgUHlJbml0X19vcGVyYXRvcn0sCisgICAgeyJfY29sbGVjdGlvbnMiLCBQeUluaXRfX2NvbGxl
Y3Rpb25zfSwKKyAgICB7Il9hYmMiLCBQeUluaXRfX2FiY30sCisgICAgeyJpdGVydG9vbHMiLCBQ
eUluaXRfaXRlcnRvb2xzfSwKKyAgICB7ImF0ZXhpdCIsIFB5SW5pdF9hdGV4aXR9LAorICAgIHsi
X3NpZ25hbCIsIFB5SW5pdF9fc2lnbmFsfSwKKyAgICB7Il9zdGF0IiwgUHlJbml0X19zdGF0fSwK
KyAgICB7InRpbWUiLCBQeUluaXRfdGltZX0sCisgICAgeyJfdGhyZWFkIiwgUHlJbml0X190aHJl
YWR9LAorICAgIHsiX2xvY2FsZSIsIFB5SW5pdF9fbG9jYWxlfSwKKyAgICB7Il9pbyIsIFB5SW5p
dF9faW99LAorICAgIHsiemlwaW1wb3J0IiwgUHlJbml0X3ppcGltcG9ydH0sCisgICAgeyJmYXVs
dGhhbmRsZXIiLCBQeUluaXRfZmF1bHRoYW5kbGVyfSwKKyAgICB7Il90cmFjZW1hbGxvYyIsIFB5
SW5pdF9fdHJhY2VtYWxsb2N9LAorICAgIHsiX3N5bXRhYmxlIiwgUHlJbml0X19zeW10YWJsZX0s
CisgICAgeyJ4eHN1YnR5cGUiLCBQeUluaXRfeHhzdWJ0eXBlfSwKKworLyogLS0gQURETU9EVUxF
IE1BUktFUiAyIC0tICovCisKKyAgICAvKiBUaGlzIG1vZHVsZSBsaXZlcyBpbiBtYXJzaGFsLmMg
Ki8KKyAgICB7Im1hcnNoYWwiLCBQeU1hcnNoYWxfSW5pdH0sCisKKyAgICAvKiBUaGlzIGxpdmVz
IGluIGltcG9ydC5jICovCisgICAgeyJfaW1wIiwgUHlJbml0X19pbXB9LAorCisgICAgLyogVGhp
cyBsaXZlcyBpbiBQeXRob24vUHl0aG9uLWFzdC5jICovCisgICAgeyJfYXN0IiwgUHlJbml0X19h
c3R9LAorCisgICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9k
dWxlX25hbWVzICovCisgICAgeyJidWlsdGlucyIsIE5VTEx9LAorICAgIHsic3lzIiwgTlVMTH0s
CisKKyAgICAvKiBUaGlzIGxpdmVzIGluIGdjbW9kdWxlLmMgKi8KKyAgICB7ImdjIiwgUHlJbml0
X2djfSwKKworICAgIC8qIFRoaXMgbGl2ZXMgaW4gX3dhcm5pbmdzLmMgKi8KKyAgICB7Il93YXJu
aW5ncyIsIF9QeVdhcm5pbmdzX0luaXR9LAorCisgICAgLyogVGhpcyBsaXZlcyBpbiBPYmplY3Rz
L3VuaWNvZGVvYmplY3QuYyAqLworICAgIHsiX3N0cmluZyIsIFB5SW5pdF9fc3RyaW5nfSwKKwor
CisvKiBVbmlrcmFmdCBNYXJrZXIgc3RhcnQgKi8KKyAgICB7Il9hYmMiLCBQeUluaXRfX2FiY30s
CisgICAgeyJhcnJheSIsIFB5SW5pdF9hcnJheX0sCisgICAgeyJfYXN5bmNpbyIsIFB5SW5pdF9f
YXN5bmNpb30sCisgICAgeyJhdGV4aXQiLCBQeUluaXRfYXRleGl0fSwKKy8qIGF1ZGlvIHsiYXVk
aW9vcCIsIFB5SW5pdF9hdWRpb29wfSwgKi8KKyAgICB7ImJpbmFzY2lpIiwgUHlJbml0X2JpbmFz
Y2lpfSwKKyAgICB7Il9iaXNlY3QiLCBQeUluaXRfX2Jpc2VjdH0sCisjaWZkZWYgQ09ORklHX0xJ
QklOVEVMX0lOVFJJTlNJQ1MKKyAgICB7Il9ibGFrZTIiLCBQeUluaXRfX2JsYWtlMn0sCisjZW5k
aWYKKy8vICAgIHsiX2J6MiIsIFB5SW5pdF9fYnoyfSwKKyAgICB7ImNtYXRoIiwgUHlJbml0X2Nt
YXRofSwKKyAgICB7Il9jb2RlY3MiLCBQeUluaXRfX2NvZGVjc30sCisgICAgeyJfY29sbGVjdGlv
bnMiLCBQeUluaXRfX2NvbGxlY3Rpb25zfSwKKyAgICB7Il9jb250ZXh0dmFycyIsIFB5SW5pdF9f
Y29udGV4dHZhcnN9LAorLy9UT0RPICAgIHsiX2NyeXB0IiwgUHlJbml0X19jcnlwdH0sCisgICAg
eyJfY3N2IiwgUHlJbml0X19jc3Z9LAorI2lmIENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9D
VFlQRVMKKy8vICAgIHsiX2N0eXBlc190ZXN0IiwgUHlJbml0X19jdHlwZXNfdGVzdH0sCisgICAg
eyJfY3R5cGVzIiwgUHlJbml0X19jdHlwZXN9LAorI2VuZGlmCisvKiAgICB7Il9jdXJzZXNfcGFu
ZWwiLCBQeUluaXRfX2N1cnNlc19wYW5lbH0sICovCisvL1RPRE8gICAgeyJfY3Vyc2VzIiwgUHlJ
bml0X19jdXJzZXN9LCBldmFsdWF0ZSB0byBgUHlJbml0KGNoYXIsIGxvbmcgZG91YmxlIF9fcmVz
dHJpY3QsIHNob3J0LC4uLikoc2hvcnQpJworLyogRG9jIHsiY3VzdG9tIiwgUHlJbml0X2N1c3Rv
bX0sICAgKi8KKy8qIERvYyB7ImN1c3RvbTIiLCBQeUluaXRfY3VzdG9tMn0sICovCisvKiBEb2Mg
eyJjdXN0b20zIiwgUHlJbml0X2N1c3RvbTN9LCAqLworLyogRG9jIHsiY3VzdG9tNCIsIFB5SW5p
dF9jdXN0b200fSwgKi8KKyAgICB7Il9kYXRldGltZSIsIFB5SW5pdF9fZGF0ZXRpbWV9LAorLy8g
ICAgeyJfZGJtIiwgUHlJbml0X19kYm19LAorI2lmIENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lP
Tl9MSUJNUERFQworICAgIHsiX2RlY2ltYWwiLCBQeUluaXRfX2RlY2ltYWx9LAorI2VuZGlmCisj
aWYgQ09ORklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX0VYUEFUCisgICAgeyJfZWxlbWVudHRyZWUi
LCBQeUluaXRfX2VsZW1lbnR0cmVlfSwKKyNlbmRpZgorICAgIHsiZXJybm8iLCBQeUluaXRfZXJy
bm99LAorICAgIHsiZmF1bHRoYW5kbGVyIiwgUHlJbml0X2ZhdWx0aGFuZGxlcn0sCisgICAgeyJm
Y250bCIsIFB5SW5pdF9mY250bH0sCisgICAgeyJfZnVuY3Rvb2xzIiwgUHlJbml0X19mdW5jdG9v
bHN9LAorICAgIHsiZ2MiLCBQeUluaXRfZ2N9LAorLy9UT0RPIGVuYWJsZSAgICB7ImdycCIsIFB5
SW5pdF9ncnB9LAorICAgIHsiX2hhc2hsaWIiLCBQeUluaXRfX2hhc2hsaWJ9LAorICAgIHsiX2hl
YXBxIiwgUHlJbml0X19oZWFwcX0sCisgICAgeyJfaW1wIiwgUHlJbml0X19pbXB9LAorICAgIHsi
X2lvIiwgUHlJbml0X19pb30sCisgICAgeyJpdGVydG9vbHMiLCBQeUluaXRfaXRlcnRvb2xzfSwK
KyAgICB7Il9qc29uIiwgUHlJbml0X19qc29ufSwKKyAgICB7Il9sb2NhbGUiLCBQeUluaXRfX2xv
Y2FsZX0sCisgICAgeyJfbHNwcm9mIiwgUHlJbml0X19sc3Byb2Z9LAorLy8gICAgeyJfbHptYSIs
IFB5SW5pdF9fbHptYX0sCisgICAgeyJtYXRoIiwgUHlJbml0X21hdGh9LAorICAgIHsiX21kNSIs
IFB5SW5pdF9fbWQ1fSwKKy8vVE9ETyBlbmFibGUgICAgeyJtbWFwIiwgUHlJbml0X21tYXB9LAor
ICAgIHsiX211bHRpYnl0ZWNvZGVjIiwgUHlJbml0X19tdWx0aWJ5dGVjb2RlY30sCisvKiAgICB7
Il9tdWx0aXByb2Nlc3NpbmciLCBQeUluaXRfX211bHRpcHJvY2Vzc2luZ30sKi8KKy8qICAgIHsi
bmlzIiwgUHlJbml0X25pc30sKi8KKyAgICB7Il9vcGNvZGUiLCBQeUluaXRfX29wY29kZX0sCisg
ICAgeyJfb3BlcmF0b3IiLCBQeUluaXRfX29wZXJhdG9yfSwKKy8qIGF1ZGlvIHsib3NzYXVkaW9k
ZXYiLCBQeUluaXRfb3NzYXVkaW9kZXZ9LCAqLworLyogV2luZG93cyB7Il9vdmVybGFwcGVkIiwg
UHlJbml0X19vdmVybGFwcGVkfSwgKi8KKyAgICB7InBhcnNlciIsIFB5SW5pdF9wYXJzZXJ9LAor
ICAgIHsiX3BpY2tsZSIsIFB5SW5pdF9fcGlja2xlfSwKKyAgICB7Il9wb3NpeHN1YnByb2Nlc3Mi
LCBQeUluaXRfX3Bvc2l4c3VicHJvY2Vzc30sCisgICAgeyJwd2QiLCBQeUluaXRfcHdkfSwKKyAg
ICB7Il9xdWV1ZSIsIFB5SW5pdF9fcXVldWV9LAorICAgIHsiX3JhbmRvbSIsIFB5SW5pdF9fcmFu
ZG9tfSwKKy8vICAgIHsicmVhZGxpbmUiLCBQeUluaXRfcmVhZGxpbmV9LAorICAgIHsicmVzb3Vy
Y2UiLCBQeUluaXRfcmVzb3VyY2V9LAorLyogaU9TIHsiX3NjcHJveHkiLCBQeUluaXRfX3NjcHJv
eHl9LCAqLworICAgIHsic2VsZWN0IiwgUHlJbml0X3NlbGVjdH0sCisgICAgeyJfc2hhMSIsIFB5
SW5pdF9fc2hhMX0sCisgICAgeyJfc2hhMjU2IiwgUHlJbml0X19zaGEyNTZ9LAorICAgIHsiX3No
YTMiLCBQeUluaXRfX3NoYTN9LAorICAgIHsiX3NoYTUxMiIsIFB5SW5pdF9fc2hhNTEyfSwKKyAg
ICB7Il9zaWduYWwiLCBQeUluaXRfX3NpZ25hbH0sCisgICAgeyJfc29ja2V0IiwgUHlJbml0X19z
b2NrZXR9LAorLy9UT0RPIGVuYWJsZSAgICB7InNwd2QiLCBQeUluaXRfc3B3ZH0sCisjaWYgQ09O
RklHX0xJQlBZVEhPTjNfRVhURU5TSU9OX1NRTElURQorICAgIHsic3FsaXRlIiwgUHlJbml0X19z
cWxpdGUzfSwKKyNlbmRpZgorI2lmIENPTkZJR19MSUJQWVRIT04zX0VYVEVOU0lPTl9TU0wKKyAg
ICB7Il9zc2wiLCBQeUluaXRfX3NzbH0sCisjZW5kaWYKKyAgICB7Il9zdGF0IiwgUHlJbml0X19z
dGF0fSwKKyAgICB7Il9zdHJpbmciLCBQeUluaXRfX3N0cmluZ30sCisgICAgeyJfc3RydWN0Iiwg
UHlJbml0X19zdHJ1Y3R9LAorLyogRG9jIHsic3VibGlzdCIsIFB5SW5pdF9zdWJsaXN0fSwgKi8K
KyAgICB7Il9zeW10YWJsZSIsIFB5SW5pdF9fc3ltdGFibGV9LAorICAgIHsic3lzbG9nIiwgUHlJ
bml0X3N5c2xvZ30sCisvLyAgICB7InRlcm1pb3MiLCBQeUluaXRfdGVybWlvc30sCisgICAgeyJf
dGVzdGJ1ZmZlciIsIFB5SW5pdF9fdGVzdGJ1ZmZlcn0sCisgICAgeyJfdGVzdGNhcGkiLCBQeUlu
aXRfX3Rlc3RjYXBpfSwKKyAgICB7Il90aHJlYWQiLCBQeUluaXRfX3RocmVhZH0sCisgICAgeyJ0
aW1lIiwgUHlJbml0X3RpbWV9LAorLy8gICAgeyJfdGtpbnRlciIsIFB5SW5pdF9fdGtpbnRlcn0s
CisgICAgeyJfdHJhY2VtYWxsb2MiLCBQeUluaXRfX3RyYWNlbWFsbG9jfSwKKyAgICB7InVuaWNv
ZGVkYXRhIiwgUHlJbml0X3VuaWNvZGVkYXRhfSwKKyNpZiBDT05GSUdfTElCUFlUSE9OM19FWFRF
TlNJT05fVVVJRAorICAgIHsiX3V1aWQiLCBQeUluaXRfX3V1aWR9LAorI2VuZGlmCisgICAgeyJf
d2Vha3JlZiIsIFB5SW5pdF9fd2Vha3JlZn0sCisvKiBXaW5kb3dzIHsiX3dpbmFwaSIsIFB5SW5p
dF9fd2luYXBpfSwgKi8KKyAgICB7Inh4bGltaXRlZCIsIFB5SW5pdF94eGxpbWl0ZWR9LAorICAg
IHsieHhzdWJ0eXBlIiwgUHlJbml0X3h4c3VidHlwZX0sCisgICAgeyJfeHh0ZXN0ZnV6eiIsIFB5
SW5pdF9feHh0ZXN0ZnV6en0sCisgICAgeyJ4eCIsIFB5SW5pdF94eH0sCisgICAgeyJ6aXBpbXBv
cnQiLCBQeUluaXRfemlwaW1wb3J0fSwKKyNpZiBDT05GSUdfTElCUFlUSE9OM19FWFRFTlNJT05f
WkxJQgorICAgIHsiemxpYiIsIFB5SW5pdF96bGlifSwKKyNlbmRpZgorLyogVW5pa3JhZnQgTWFy
a2VyIGVuZCAqLworCisgICAgLyogU2VudGluZWwgKi8KKyAgICB7MCwgMH0KK307CisKKworI2lm
ZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL7z-0005vO-12; Mon, 23 Sep 2019 09:59:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL7x-0005ux-1E
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:29 +0000
X-Inumbo-ID: c76c18ac-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c76c18ac-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:06 +0000 (UTC)
IronPort-SDR: vkGmbQPDC7MFmQdtSxXSDFh6P5tWgASTq4Ev+BnhrQ8NYq1l7Dxmigizame9Z3uR8TbGOAHpTG
 LJdgyYk30VAw==
IronPort-PHdr: =?us-ascii?q?9a23=3Asz2fJRf6GbM+EckOIY068AktlGMj4u6mDksu8p?=
 =?us-ascii?q?Mizoh2WeGdxcW5Zx7h7PlgxGXEQZ/co6odzbaP6Oa6CSdaud7B6ClELMUWEU?=
 =?us-ascii?q?ddyI0/pE8JOIa9E0r1LfrnPWQRPf9pcxtbxUy9KlVfA83kZlff8TWY5D8WHQ?=
 =?us-ascii?q?jjZ0IufrymUoHdgN6q2O+s5pbdfxtHhCanYbN1MR66sRjdutMZjId/JKs90A?=
 =?us-ascii?q?XFr3hHd+hI2W9jOFafkwrh6suq85Nv7jpct+g9+8JcVKnxYrg1Q6FfADk6KW?=
 =?us-ascii?q?4++dfltQPETQuB53scVnsZnx9VCAXb7x/0Q4n8vDLiuuVyxCeVM8v2TaspWT?=
 =?us-ascii?q?u59KdkVAXoiCYcODEn9mzcl9F9g7haoBKloBx/3pLUbYSIP/dwYq/RYdUXTn?=
 =?us-ascii?q?dHU81MVSJOH5m8YpMPAeQfIOhWoYrzqVwMohuwHgSgGP/jxyVUinLswaE2z+?=
 =?us-ascii?q?IsGhzG0gw6GNIOtWzZocvyNKcJTeC1za/IxijFYfNLwTf99ZXDfxc9rvGLRr?=
 =?us-ascii?q?JwbcvRyU81GwPBk1WQsZHlMiiJ2eQWqWSb9/dgWvm1h249rAF8uz6izdovhI?=
 =?us-ascii?q?nRno8Z11/J+ThjzIs2JdC0UlB3bcCmHZdKuSyWL5Z6T8w/T21yuys3yqcKtY?=
 =?us-ascii?q?C1cSUE0pgr2hHSZ+KBfoOV+BzsTvyRLi19hH99fbK/gAu9/la4x+3nU8m0zE?=
 =?us-ascii?q?5Kri1YktnQrnwN1wLc6syASvZl4Eeh3CyA1wHX6u1ePU80jrDXK4Y8wrErjJ?=
 =?us-ascii?q?YTq0PDEjf3mEXwkqCWal0p9vWn5uj6eLnrpZ+RO5Vqhg3gMKkigMKyDfw9Mg?=
 =?us-ascii?q?cUXmib/eq81Kfk/U38WLhFkvo2krLFsJDbI8QXvKq5AxJN0oY+8BuwEyym3M?=
 =?us-ascii?q?4AnXkaN11JYgiHj4/xN1HUPP/4Feu/g0irkDpzwvDGP7vhApTKLnjYibvuYK?=
 =?us-ascii?q?hy61BCxwo31t1f45NUCqodIPLoQEPwu8LXDhkjPwyz2ebnB8131pkCVmKXHq?=
 =?us-ascii?q?+ZLKTSvEeG5u0xJ+mMZZcVtyjnJ/gl+v7ujGM2mV4GcKmvw5QYdHS4Ee59LE?=
 =?us-ascii?q?mDf3Xsn88LEX0WsQomUOzqlFqCXCZNZ3a2Ra0z+yk0B5igDYjeXICinr2B0D?=
 =?us-ascii?q?2gEZJMe29GDVGMEWrzeoWfR/cMdT+dLtV7nTMYTritUZIh1Qm1uwPg0bpnKb?=
 =?us-ascii?q?mcxipNsJPl1d9uouHeixw23Th1FNiGlXGASSdzhGxbaSUx2fVUpldhy1HL9b?=
 =?us-ascii?q?VgnrQMHttI+/JPFAMnLYP0xPc8E834HBjGKITaAG26S8mrVGliBuk6xMUDNh?=
 =?us-ascii?q?5w?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBZ4MLUyASKo0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQ?=
 =?us-ascii?q?BEwEBASaFXQyCOiKCbwMDeRA/ElcZgyIBgg6scoVMgzKBSIE0hzCGMT+BEYN?=
 =?us-ascii?q?QhRGFFgSWQpZKB4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBWg4JFRi?=
 =?us-ascii?q?LHIJcPQEBMYEGAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2ATAQAwlohdjAPjVY1lHAEBAQQBAQwEAQGBZ4MLUyASK?=
 =?us-ascii?q?o0eozwJAQEBKREBAgEBhD8Cgzc4EwIDCQEBBQEBAQEBBQQBEwEBASaFXQyCO?=
 =?us-ascii?q?iKCbwMDeRA/ElcZgyIBgg6scoVMgzKBSIE0hzCGMT+BEYNQhRGFFgSWQpZKB?=
 =?us-ascii?q?4IlZQSGHI15J4MolX0ZqG84IIFZMxqDXwlHEBSBWg4JFRiLHIJcPQEBMYEGA?=
 =?us-ascii?q?QGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854331"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:59 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 0AD341A602E8;
 Mon, 23 Sep 2019 12:58:59 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id XRtBTKMyYosH; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id E57C51A602E5;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id WuBOClngQhP1; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id C86101A602E8;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:51 +0300
Message-Id: <20190923095852.21872-14-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 13/14] Config.uk: Add
 configuration options for extensions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgY3VycmVudGx5IGNvbmZpZ3VyZSB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnM6IFhNTCBwYXJz
aW5nIHdpdGggRXhwYXQgbGliLApkZWNpbWFsIG9wZXJhdGlvbnMgd2l0aCBsaWJtcGRlYywgU1NM
LCBVVUlEIGFuZCB6bGliLiBTcWxpdGUgd2lsbCBiZQphdXRvbWF0aWNhbGx5IHN1cHBvcnRlZCB3
aGVuIHRoZSBleHRlcm5hbCBsaWJyYXJ5IHdpbGwgYmUgcmVsZWFzZWQuCgpTaWduZWQtb2ZmLWJ5
OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayB8IDM5
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQs
IDM5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsKaW5k
ZXggODBhNTU3YS4uNmViYWI0NSAxMDA2NDQKLS0tIGEvQ29uZmlnLnVrCisrKyBiL0NvbmZpZy51
awpAQCAtMzUsNCArMzUsNDMgQEAgY29uZmlnIExJQlBZVEhPTjNfTUFJTl9GVU5DVElPTgogCWJv
b2wgIlByb3ZpZGUgbWFpbiBmdW5jdGlvbiIKIAlkZWZhdWx0IG4KIAorCittZW51Y29uZmlnIExJ
QlBZVEhPTjNfRVhURU5TSU9OUworCWJvb2wgIkV4dGVuc2lvbnMiCisJZGVmYXVsdCBuCisKK2lm
IExJQlBZVEhPTjNfRVhURU5TSU9OUworY29uZmlnIExJQlBZVEhPTjNfRVhURU5TSU9OX0VYUEFU
CisJYm9vbCAiRXhwYXQgWE1MIHBhcnNlciIKKwlkZWZhdWx0IHkKK2lmIExJQkZGSQorI2NvbmZp
ZyBMSUJQWVRIT04zX0VYVEVOU0lPTl9DVFlQRVMKKyMJYm9vbCAiY3R5cGVzIgorIwlkZWZhdWx0
IHkKK2VuZGlmCitjb25maWcgTElCUFlUSE9OM19FWFRFTlNJT05fTElCTVBERUMKKwlib29sICJE
ZWNpbWFsIG9wZXJhdGlvbnMgd2l0aCBsaWJtcGRlYyIKKwlkZWZhdWx0IHkKK2lmIExJQlNRTElU
RQorY29uZmlnIExJQlBZVEhPTjNfRVhURU5TSU9OX1NRTElURQorCWJvb2wgInNxbGl0ZSIKKwlk
ZWZhdWx0IHkKK2VuZGlmCitpZiBMSUJTU0wKK2NvbmZpZyBMSUJQWVRIT04zX0VYVEVOU0lPTl9T
U0wKKwlib29sICJTU0wiCisJZGVmYXVsdCB5CitlbmRpZgoraWYgTElCVVVJRAorY29uZmlnIExJ
QlBZVEhPTjNfRVhURU5TSU9OX1VVSUQKKwlib29sICJVVUlEIgorCWRlZmF1bHQgeQorZW5kaWYK
K2lmIExJQlpMSUIKK2NvbmZpZyBMSUJQWVRIT04zX0VYVEVOU0lPTl9aTElCCisJYm9vbCAiemxp
YiIKKwlkZWZhdWx0IHkKK2VuZGlmCitlbmRpZgorCiBlbmRpZgotLSAKMi4yMC4xCgoKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL84-0005wR-3v; Mon, 23 Sep 2019 09:59:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL82-0005w9-1W
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:34 +0000
X-Inumbo-ID: c7223dc3-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c7223dc3-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:06 +0000 (UTC)
IronPort-SDR: ibZZapW3T9G7M9SQtpTQ8HvhJjbHe0Erx8LRdtNTHZ/7nVzeiE6XNpjExFgb0EA3l02xOL4QyM
 uR/T8AZum9/g==
IronPort-PHdr: =?us-ascii?q?9a23=3AFfP6+BfQMBSR1xTBxxucjHISlGMj4u6mDksu8p?=
 =?us-ascii?q?Mizoh2WeGdxcW5Zx7h7PlgxGXEQZ/co6odzbaP6Oa6CSdaud7B6ClELMUWEU?=
 =?us-ascii?q?ddyI0/pE8JOIa9E0r1LfrnPWQRPf9pcxtbxUy9KlVfA83kZlff8TWY5D8WHQ?=
 =?us-ascii?q?jjZ0IufrymUoHdgN6q2O+s5pbdfxtHhCanYbN1MR66sRjdutMZjId/JKs90A?=
 =?us-ascii?q?XFr3hHd+hI2W9jOFafkwrh6suq85Nv7jpct+g9+8JcVKnxYrg1Q6FfADk6KW?=
 =?us-ascii?q?4++dfltQPETQuB53scVnsZnx9VCAXb7x/0Q4n8vDLiuuVyxCeVM8v2TaspWT?=
 =?us-ascii?q?u59KdkVAXoiCYcODEn9mzcl9F9g7haoBKloBx/3pLUbYSIP/dwYq/RYdUXTn?=
 =?us-ascii?q?dHU81MVSJOH5m8YpMPAeQfIOhWoYrzqVwMohuwHgSgGP/jxyVUinLswaE2z+?=
 =?us-ascii?q?IsGhzG0gw6GNIOtWzZocvyNKcJTeC1za/IxijFYfNLwTf99ZXDfxc9rvGLRr?=
 =?us-ascii?q?JwbcvRyU81GwPBk1WQsZHlMiiJ2eQWqWSb9/dgWvm1h249rAF8uz6izdovhI?=
 =?us-ascii?q?nRno8Z11/J+ThjzIs2JdC0UlB3bcCmHZdKuSyWL5Z6T8w/T21yuys3yqcKtY?=
 =?us-ascii?q?C1cSUE0pgr2hHSZ+KBfoOV+BzsTvyRLi19hH99fbK/gAu9/la4x+3nU8m0zE?=
 =?us-ascii?q?5Kri1YktnQrnwN1wLc6syASvZl4Eeh3CyA1wHX6u1ePU80jrDXK4Y8wrErjJ?=
 =?us-ascii?q?YTq0PDEjf3mEXwkqCWal0p9vWn5uj6eLnrpZ+RO5Vqhg3gMKkigMKyDfw9Mg?=
 =?us-ascii?q?cUXmib/eq81Kfk/U38WLhFkvo2krLFsJDbI8QXvKq5AxJN0oY+8BuwEyym3M?=
 =?us-ascii?q?4AnXkaN11JYgiHj4/xN1HUPP/4Feu/g0irkDpzwvDGP7vhApTKLnjYibvuYK?=
 =?us-ascii?q?hy61BCxwo31t1f45NUCqodIPLoQEPwu8LXDhkjPwyz2ebnB8131pkCVmKXHq?=
 =?us-ascii?q?+ZLKTSvEeG5u0xJ+mMZZcVtyjnJ/gl+v7ujGM2mV4GcKmvw5QYdHS4Ee59LE?=
 =?us-ascii?q?mDf3Xsn88LEX0WsQomUOzqlFqCXCZNZ3a2Ra0z+yk0B5igDYjeXICinr2B0D?=
 =?us-ascii?q?2gEZJMe29GDVGMEWrzeoWfR/cMdT+dLtV7nTMYTritUZIh1Qm1uwPg0bpnKb?=
 =?us-ascii?q?mcxipNsJPl1d9uouHeixw23Th1FNiGlXGASSdzhGxbaSUx2fVUpldhy1HL9b?=
 =?us-ascii?q?VgnrQMHttI+/JPFAMnLYP0xPc8E834HBjGKITaAG26S8mrVGliBuk6xMUDNh?=
 =?us-ascii?q?5w?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AgAAAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBVQUBAQsBgXOBF1MgEiqNHogffpgkFIFnCQEBASkRAQIBAYFLgnQCgzc?=
 =?us-ascii?q?2Bw4CAwkBAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmCV0sBgg6?=
 =?us-ascii?q?scoVMgzKBSIE0AYcvgzuCdj+BEYJdhHwUdIUWBI0RiBKBH5ZKB4IlZQSGHIk?=
 =?us-ascii?q?vhEongmVDlX2pCCgMJIFZMxpzgmwJRxAUgVoOCYtJglw9AQExAYEFAQGLEYJ?=
 =?us-ascii?q?UAQE?=
X-IPAS-Result: =?us-ascii?q?A2AgAAAwlohdjAPjVY1lHAEBAQQBAQwEAQGBVQUBAQsBg?=
 =?us-ascii?q?XOBF1MgEiqNHogffpgkFIFnCQEBASkRAQIBAYFLgnQCgzc2Bw4CAwkBAQUBA?=
 =?us-ascii?q?QEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmCV0sBgg6scoVMgzKBSIE0A?=
 =?us-ascii?q?YcvgzuCdj+BEYJdhHwUdIUWBI0RiBKBH5ZKB4IlZQSGHIkvhEongmVDlX2pC?=
 =?us-ascii?q?CgMJIFZMxpzgmwJRxAUgVoOCYtJglw9AQExAYEFAQGLEYJUAQE?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854326"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id CC7731A602F8;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id lBeR9U_shlPW; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id B05181A602F2;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id 9Ul9yW2BDC3U; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 92D201A602E4;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:47 +0300
Message-Id: <20190923095852.21872-10-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 09/14] Add stubs.c for
 stubbed functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKV2UgYWRkIHRoZSBzdHVicyBuZWVkZWQgd2hlbiAiZm9ya2luZyIgcHJvY2Vzc2VzLgoK
U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3Mu
cHViLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgIDEgKwogc3R1YnMuYyAgICAgfCA0NSArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwg
NDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHN0dWJzLmMKCmRpZmYgLS1naXQg
YS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDQ4MzI0MTcuLjRkNjdmNmMgMTAwNjQ0
Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC05OCw2ICs5OCw3IEBAIExJ
QlBZVEhPTjNfQ0lOQ0xVREVTLXkgICArPSAkKExJQlBZVEhPTjNfQ09NTU9OX0lOQ0xVREVTLXkp
CiBMSUJQWVRIT04zX0NYWElOQ0xVREVTLXkgKz0gJChMSUJQWVRIT04zX0NPTU1PTl9JTkNMVURF
Uy15KQogCiBMSUJQWVRIT04zX1NSQ1MteSArPSAkKExJQlBZVEhPTjNfQkFTRSkvbW9kdWxlc19j
b25maWcuY3x1bmlrcmFmdAorTElCUFlUSE9OM19TUkNTLXkgKz0gJChMSUJQWVRIT04zX0JBU0Up
L3N0dWJzLmN8dW5pa3JhZnQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgUHl0aG9uIGNv
cmUKZGlmZiAtLWdpdCBhL3N0dWJzLmMgYi9zdHVicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmUzOTA3OTIKLS0tIC9kZXYvbnVsbAorKysgYi9zdHVicy5jCkBAIC0wLDAg
KzEsNDUgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8q
CisgKiBBdXRob3JzOiBCYWRvaXUgVmxhZC1BbmRyZWkgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVk
LmFjcy51cGIucm8+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0
ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJB
UyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhF
QURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisK
K3ZvaWQgUHlPU19CZWZvcmVGb3JrKHZvaWQpCit7Cit9CisKK3ZvaWQgUHlPU19BZnRlckZvcmtf
UGFyZW50KHZvaWQpCit7Cit9CisKK3ZvaWQgUHlPU19BZnRlckZvcmtfQ2hpbGQodm9pZCkKK3sK
K30KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL88-0005xC-5g; Mon, 23 Sep 2019 09:59:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL87-0005x0-1y
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:39 +0000
X-Inumbo-ID: c8140d6e-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c8140d6e-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:07 +0000 (UTC)
IronPort-SDR: McSkXH398KbFdLoGY7GERmn6eQ2yUG8tci/oV1KtQ+CNYdeMLFQD7NNSfKSIsWC8tnYEmsnqQJ
 TEmnszg0HDiQ==
IronPort-PHdr: =?us-ascii?q?9a23=3ASRpPeRG3nrvbjQ/AOP0dxp1GYnF86YWxBRYc79?=
 =?us-ascii?q?8ds5kLTJ7ypM+wAkXT6L1XgUPTWs2DsrQY0rGQ6fCrAzRIoc7Y9ixbKtoUD1?=
 =?us-ascii?q?5NoP5VtjRoONSCB0z/IayiRA0BN+MGamVY+WqmO1NeAsf0ag6aiHSz6TkPBk?=
 =?us-ascii?q?e3blItdaz6FYHIksu4yf259YHNbAVUnjq9Zq55IAmroQnLucQanIVvJrwvxh?=
 =?us-ascii?q?bKrXdEZfhazn5sKV6Pghrw/Mi98IN9/yhKp/4t68tMWrjmcqolSrBVEC4oOH?=
 =?us-ascii?q?0v6s3xshnDQwqP5n8CXWgTjxFFHQvL4gzkU5noqif1ufZz1yecPc3tULA7Qi?=
 =?us-ascii?q?+i4LtxSB/pkygIKTg0+3zKh8NqjaJbpBWhpwFjw4PRfYqYOuZycr/bcNgHQ2?=
 =?us-ascii?q?dKQ8RfWDFbAo6kb4UBEfcPM+hboYf6pVQOowCzCRWwCO711jNFnGP60bE83u?=
 =?us-ascii?q?88EQ/GxgsgH9cWvXnKq9X1L7sSUeGzzKLVyzvDcutW2Srg44XPbh8hpuqMXa?=
 =?us-ascii?q?5xccrX00UvEx7Fjk2NqYH+IzyVzf4Bs3CG7+V7T+6vkWknphh3rzOyxckskp?=
 =?us-ascii?q?HEip8ax1zZ7yl0w4Y4KcemREJlY9OoCpVduzmHO4Z5X88uWWJltSYgxrEYt5?=
 =?us-ascii?q?O2cjIGxIkoyhLBbfGMbpKG7Qj5VOmLJDd1nHdleLWiiBms6UWg0ej8VtWs0F?=
 =?us-ascii?q?ZNsypFjsHAtnAT2BzX7ciKUuV9/kK71jaO0wDf8P1LIVsumarDNp4u2aQ8lo?=
 =?us-ascii?q?AUsUjbHy/2nlv5jLOOe0k59eWk9v7rb7bmq5OGKYN4lAPzPr4gl8CnBOQ3KA?=
 =?us-ascii?q?kOX2yV+eSm073j+FX0T6lNjv0tjqnZsZbaKd4fpq6kGw9Vz50u5AqkDzu8yN?=
 =?us-ascii?q?QYgGIIIEhfeBKAl4TpIU3BIOjkDfejhFShiDJrx/HAPr3gBZXNNWHPn6r/cr?=
 =?us-ascii?q?Zj9UFczBE+zdRe55JPFrEBO+j/W0Dvu9zeFBM5NBa0w+n/AtVnyoweQX6PAr?=
 =?us-ascii?q?OeMK7Kv1+H+OYvI+iUZIALojr9K+Ul5//ygn84glIde7em0ocTaH+iBftqOV?=
 =?us-ascii?q?uWYWf0iNcbDWgKphY+TPDtiFCaTz5TY2y9UL8k6T4hDoKpEJ3DSZ6sgLCbxy?=
 =?us-ascii?q?i0BIBZZmdHClCRCnrobJmEW+oRZy6IOMBujicEWaK8S485zh6irhX6y700Zt?=
 =?us-ascii?q?bTrygZs5Pkz5156vPekTk29CdoFIKN3mfLSHt7zU0SQDpj96dkvU17gnOeyb?=
 =?us-ascii?q?Uw1/dfDsBS4bVNTx8nHZXHifRnAZboXVSSLZ+yVF+6T4D+UnkKRdUrzopWbg?=
 =?us-ascii?q?=3D=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2AWAAAwlohdjAPjVY1lHAEBAQQBAQw?=
 =?us-ascii?q?EAQGBVAYBAQsBgwpTIBIqjR6IH5kigXsJAQEBKREBAgEBhD8Cgzc1CA4CAwk?=
 =?us-ascii?q?BAQUBAQEBAQUEARMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxyhUyDMoF?=
 =?us-ascii?q?IgTQBhy+GMT+BEYJkbIonBJZClVxuB4IlZQSGHIUUiGUngjZyhlmPJIpRhQW?=
 =?us-ascii?q?ZMiIBNYFZMxqDXwlHEBSBWg4JFYdChk49AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2AWAAAwlohdjAPjVY1lHAEBAQQBAQwEAQGBVAYBAQsBg?=
 =?us-ascii?q?wpTIBIqjR6IH5kigXsJAQEBKREBAgEBhD8Cgzc1CA4CAwkBAQUBAQEBAQUEA?=
 =?us-ascii?q?RMBAQEmhV0Mgjoigm8DA3kQIB8SVxmDIgGCDqxyhUyDMoFIgTQBhy+GMT+BE?=
 =?us-ascii?q?YJkbIonBJZClVxuB4IlZQSGHIUUiGUngjZyhlmPJIpRhQWZMiIBNYFZMxqDX?=
 =?us-ascii?q?wlHEBSBWg4JFYdChk49AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854332"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:59 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 157B81A602E4;
 Mon, 23 Sep 2019 12:58:59 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id wpoqIliNGdzw; Mon, 23 Sep 2019 12:58:59 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id F29711A602FE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id VK_1QckDVQYm; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id D87401A602F2;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:52 +0300
Message-Id: <20190923095852.21872-15-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 14/14] README.md: Update
 with info about building and running
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKU2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRv
aXVAc3R1ZC5hY3MudXBiLnJvPgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgotLS0KIFJFQURNRS5tZCB8IDQyICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDM5IGluc2VydGlvbnMoKyksIDMg
ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IGM5
NTQ0ZDEuLmQyYjQ4NjggMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAg
LTEsNyArMSw0MyBAQAotcHl0aG9uMyBmb3IgVW5pa3JhZnQKLT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0KKyMgcHl0aG9uMyBmb3IgVW5pa3JhZnQKIFRoaXMgaXMgdGhlIHBvcnQgb2Yg
cHl0aG9uMyBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4KIAorIyMgQnVpbGQKK1B5
dGhvbiAzIGludGVycHJldGVyIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMsIHRo
YXQgbmVlZCB0byBiZSBhZGRlZCB0byBgTWFrZWZpbGVgIGluIHRoaXMgb3JkZXI6CisqIGBwdGhy
ZWFkc2AsIGUuZy4gYHB0aHJlYWQtZW1iZWRkZWRgCisqIGBsaWJjYCwgZS5nLiBgbmV3bGliYAor
KiBuZXR3b3JrIHN0YWNrLCBlLmcuIGBsd2lwYAorKiBhIFNJTUQgbGlicmFyeSwgZS5nLiBgaW50
ZWwtaW50cmluc2ljc2AKKyogb3B0aW9uYWwgZXh0ZW5zaW9uczogYG9wZW5zc2xgLCBgemxpYmAs
IGBsaWJ1dWlkYCwgZXRjCisKKyMjIFJvb3QgZmlsZXN5c3RlbQorIyMjIENyZWF0aW5nIHRoZSBm
aWxlc3lzdGVtCitQeXRob24gMyBpbnRlcnByZXRlciBuZWVkcyBhIGZpbGVzeXN0ZW0gd2hpY2gg
c2hvdWxkIGNvbnRhaW4gaXRzIHN0YW5kYXJkIGxpYnJhcnkuIFRoZXJlZm9yZSwgdGhlIGZpbGVz
eXN0ZW0gbmVlZHMgdG8gYmUgY3JlYXRlZCBiZWZvcmUgcnVubmluZyB0aGUgVk0uIFlvdSBjYW4g
ZG8gdGhpcyBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmcgY29tbWFuZDoKKworYGBgYmFzaAorbWFr
ZSBweXRob24tcm9vdGZzIHBhdGg9PHNvbWUgZGlyZWN0b3J5PgorYGBgCisKK0l0IHdpbGwgY3Jl
YXRlIHRoZSBmaWxlc3lzdGVtIGluIHRoZSBkaXJlY3RvcnkgeW91IGNob29zZSwgYnkgZmlyc3Qg
Y3JlYXRpbmcgYSB2aXJ0dWFsIFB5dGhvbiBlbnZpcm9ubWVudC4gQWZ0ZXIgdGhhdCBpdCB3aWxs
IGluc3RhbGwgdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGludG8gaXQuIEZvciB0aGlzIHNl
Y29uZCBzdGVwLCB0aGUgb3JpZ2luYWwgY29kZSBuZWVkcyB0byBiZSBjb25maWd1cmVkIGFuZCBi
dWlsZCB3aXRoIHBhdGhzIHJlbGF0aXZlIHRvIHRoZSBwcm92aWRlZCByb290IGRpcmVjdG9yeS4g
VGhlc2UgdHdvIHN0ZXBzIGFyZSBleGVjdXRlZCB0cmFuc3BhcmVudGx5LCBhbGwgeW91IGhhdmUg
dG8gZG8gaXMganVzdCBydW5uaW5nIHRoZSBhYm92ZSBgbWFrZWAgY29tbWFuZC4KKworIyMjIFVz
aW5nIHRoZSBmaWxlc3lzdGVtCitNb3VudGluZyB0aGUgZmlsZXN5c3RlbSBpcyBhIHRyYW5zcGFy
ZW50IG9wZXJhdGlvbi4gQWxsIHlvdSBoYXZlIHRvIGRvIGlzIHRvIHByb3ZpZGUgdGhlIHJpZ2h0
IFFlbXUgcGFyYW1ldGVycyBpbiBvcmRlciBmb3IgVW5pa3JhZnQgdG8gbW91bnQgdGhlIGZpbGVz
eXN0ZW0uIFdlIHdpbGwgdXNlIHRoZSA5cGZzIHN1cHBvcnQgZm9yIGZpbGVzeXN0ZW1zIGFuZCBm
b3IgdGhpcyB5b3Ugd2lsbCBuZWVkIHRvIHVzZSB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisK
K2BgYGJhc2gKKy1mc2RldiBsb2NhbCxpZD1teWlkLHBhdGg9PHNvbWUgZGlyZWN0b3J5PixzZWN1
cml0eV9tb2RlbD1ub25lIFwKKy1kZXZpY2UgdmlydGlvLTlwLXBjaSxmc2Rldj1teWlkLG1vdW50
X3RhZz10ZXN0LGRpc2FibGUtbW9kZXJuPW9uLGRpc2FibGUtbGVnYWN5PW9mZgorYGBgCisKKyMj
IFJ1bm5pbmcgbW9kZXMKK05leHQgc3RlcCBpcyB0byBwaWNrIGEgcnVubmluZyBtb2RlLiBXZSBj
dXJyZW50bHkgc3VwcG9ydCAzIHJ1bm5pbmcgbW9kZXM6CisKKzEuICoqUHl0aG9uIHNoZWxsKiou
IE5vIGV4dHJhIHBhcmFtZXRlcnMgYXJlIG5lZWRlZAorMi4gKipQeXRob24gc2NyaXB0KiouIFlv
dSBjYW4gdXNlIGFueSBmaWxlIGF2YWlsYWJsZSBpbiB0aGUgcm9vdCBmaWxlc3lzdGVtLiBZb3Ug
c2hvdWxkIHVzZSBRZW11J3MgYC1hcHBlbmRgIG9wdGlvbiB0byBwYXNzIHBhcmFtZXRlciB0byBQ
eXRob24gaW50ZXJwcmV0ZXIsIGUuZy4gYC1hcHBlbmQgIi1mIDxzb21lIGZpbGUgaW4gcm9vdGZz
PiJgCiszLiAqKlB5dGhvbiB1bml0IHRlc3RpbmcqKi4gV2l0aCB0aGlzIG1vZGUgeW91IGNhbiBj
aGVjayB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgY29tcGxldGVseSBzdXBwb3J0ZWQgYnkgdGhlIFB5
dGhvbiAzIHBvcnQuIFRoZSB1bml0IHRlc3RpbmcgbW9kZSBpdHNlbGYgZG9lcyBzdXBwb3J0IHNl
dmVyYWwgbW9kZXM6CisgICAgKiAqKlJ1bm5pbmcgYWxsIHRoZSB0ZXN0cyoqLiBZb3UgaGF2ZSB0
byB1c2UgdGhlIGZvbGxvd2luZyBRZW11IHBhcmFtZXRlcnM6IGAtYXBwZW5kICItQiAtYyAnZnJv
bSB0ZXN0IGltcG9ydCBhdXRvdGVzdCciYAorICAgICogQ2hlY2sgdGhlIHN1cHBvcnRlZCBvcHRp
b25zIG9mIHRoZSB0ZXN0IHNjcmlwdCwgZS5nLiBgLWFwcGVuZCAiLUIgLWMgJ2Zyb20gdGVzdCBp
bXBvcnQgYXV0b3Rlc3QnIC1oYC4KKyAgICAgICAqIEZvciBleGFtcGxlLCB5b3UgY2FuIHJ1biBv
bmx5IG9uZSB1bml0IHRlc3Qgd2l0aCB2ZXJib3NpdHkgdXNpbmcgYC1hcHBlbmQgIi1CIC1jICdm
cm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0JyAtdiB0ZXN0X2RpY3QiYC4KKyAgICAgICAqIE9yIHlv
dSBjYW4gcnVuIG9ubHkgdGhlIHRlc3RzIGxpc3RlZCBpbiBhIGZpbGUgdXNpbmcgYC1hcHBlbmQg
Ii1CIC1jICdmcm9tIHRlc3QgaW1wb3J0IGF1dG90ZXN0JyAtZiA8ZmlsZSBpbiByb290ZnM+ImAu
CisKKyMjIEZ1cnRoZXIgaW5mb3JtYXRpb24KIFBsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5t
ZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCiBzdWJkaXJlY3Rv
cnkgb2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KLS0gCjIuMjAuMQoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 09:59:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 09:59:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCL8D-0005xz-7S; Mon, 23 Sep 2019 09:59:45 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Ns+P=XS=cs.pub.ro=costin.lupu@srs-us1.protection.inumbo.net>)
 id 1iCL8C-0005xr-2J
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 09:59:44 +0000
X-Inumbo-ID: c8319942-dde8-11e9-95fc-12813bfff9fa
Received: from vesa.cs.pub.ro (unknown [141.85.227.187])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTP
 id c8319942-dde8-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 09:59:07 +0000 (UTC)
IronPort-SDR: y/IPfwHBC+5DyoQ/R7N4gKSJEpq1mBJFChm5e4A7VbTa2vHXaOiGXkGrj4SR2nHp27ozV2V/4g
 wa+DQCXf+q1g==
IronPort-PHdr: =?us-ascii?q?9a23=3AuUzglBI7Dm3aeFpecNmcpTZWNBhigK39O0sv0r?=
 =?us-ascii?q?FitYgfKf/xwZ3uMQTl6Ol3ixeRBMOHsqkC0bqd6fioGTRZp8rY6jZaKN0Efi?=
 =?us-ascii?q?RGoP1epxYnDs+BBB+zB9/RRAt+Iv5/UkR49WqwK0lfFZW2TVTTpnqv8WxaQU?=
 =?us-ascii?q?2nZkJ6KevvB4Hdkdm82fys9J3PeQVIgye2ba9vIBmsogjdq8cbjZF8JqsyxR?=
 =?us-ascii?q?fFvGdEcPlSyW90OF6fhRnx6tqu8JJ57yhcp/ct/NNcXKvneKg1UaZWByk8PW?=
 =?us-ascii?q?Av483ruxjDTQ+R6XYZT24bjBlGDRXb4R/jRpv+vTf0ueR72CmBIM35Vqs0Vi?=
 =?us-ascii?q?i476dqUxDnliEKPCMk/W7Ni8xwiKVboA+9pxF63oXZbp2ZOOZ4c6jAe94RWG?=
 =?us-ascii?q?hPUdtLVyFZAo2ycZYBAeQCM+hfrYb9qUADoQeiCQS2GO/i0CNEimPw0KYn0+?=
 =?us-ascii?q?ohCwbG3Ak4Et8Qt3TUt8n1NKYUUeuoyqfI0C3Db+5L0jr69IfIdQshoe2NXb?=
 =?us-ascii?q?J2a8bRzVQvFxvYjliLtYPlJCmZ1vwQs2eA9eZgT+WvhnchpgpsoTav3t8hhp?=
 =?us-ascii?q?TGi44I0FzJ9iV0zJwrKdGmSkN3e9CpHINNuyyVKod6WMAvTmFytCokxLALt4?=
 =?us-ascii?q?S3cDUFxZg5wRPUduaJfJKS4h35UeacOTJ4hHV4d72hnxuy6k2gyvHkVsmzzV?=
 =?us-ascii?q?ZKsjJJktnSuXAJ0Bze8taHSv5n8Ueg3TaDzRzc6vpeLUAsiKrUMIQtwqQ3lp?=
 =?us-ascii?q?YLsETDGDH5mFnugaOLeUgo5/Kk5ufnb7n8uJOQKY15hhvwP6g2n8ywG+U4Mg?=
 =?us-ascii?q?wAX2iB/uS80aXu8lH+QLVRkv02k6/ZvIreJcQGvq65HhRY3Zo46xqlFzemzc?=
 =?us-ascii?q?8XkWMdLFJCYB6HlZTmO0nSIPDkCveym1GskDZtx/DHOb3hGYzBIWXdn7f/Y7?=
 =?us-ascii?q?l971VRyA4yzdBE+5JUEasNIf3tVU/3rtDYCQU5MwOsyeb9FNp9zp8eWX6IAq?=
 =?us-ascii?q?KBPqPdr1uI5uM3I+aSfoMVuCv9K/k56P7vlnI5n0EScrWt3ZQNc3+0BOppI1?=
 =?us-ascii?q?iBa3r2ntgBCXsKvhY5TOHyll2CVSRcaGuqUK0m4DE0FZimApnCRoy3m7OOxj?=
 =?us-ascii?q?q0HppXZmBbEV2MCmvod5iZVPsWci2dPtRhniYZVbi5UIAtzwuutAipg4Zge+?=
 =?us-ascii?q?/V/Cwfrtfv2cZ448XXlAou7npkAsLb1HuCHE9umWZdbDgtwKF56Whg0krLha?=
 =?us-ascii?q?N/mOBZE5pX+utUegwhc4bBxapgDIahCUr6Yt6VRQP+EZ2dCjYrQ4dpzg=3D?=
 =?us-ascii?q?=3D?=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: =?us-ascii?q?A2BbAAAwlohdjAPjVY1lGwEBAQEDAQE?=
 =?us-ascii?q?BDAMBAQGBZ4F0gRdTIBIqjR6IH36aHwkBAQEpEQECAQGEPwKDNzgTAgMJAQE?=
 =?us-ascii?q?FAQEBAQEFBAETAQEBJoVdDII6IoJvAwMaAV4QIB8SVxmCV0sBgg6scoVMgzJ?=
 =?us-ascii?q?Jf4E0hzCGMT+BEYJdc4oFIgSVI4EflkoHgiVlBIYchRSIZSeDKJV9o1eFMTg?=
 =?us-ascii?q?ggVkzGnOCbAlHEBSBVwIBDgmBBAEHNIRliAA9AQExAYEFAQGNZQEB?=
X-IPAS-Result: =?us-ascii?q?A2BbAAAwlohdjAPjVY1lGwEBAQEDAQEBDAMBAQGBZ4F0g?=
 =?us-ascii?q?RdTIBIqjR6IH36aHwkBAQEpEQECAQGEPwKDNzgTAgMJAQEFAQEBAQEFBAETA?=
 =?us-ascii?q?QEBJoVdDII6IoJvAwMaAV4QIB8SVxmCV0sBgg6scoVMgzJJf4E0hzCGMT+BE?=
 =?us-ascii?q?YJdc4oFIgSVI4EflkoHgiVlBIYchRSIZSeDKJV9o1eFMTgggVkzGnOCbAlHE?=
 =?us-ascii?q?BSBVwIBDgmBBAEHNIRliAA9AQExAYEFAQGNZQEB?=
X-IronPort-AV: E=Sophos;i="5.64,539,1559509200"; 
   d="scan'208";a="4854322"
Received: from mail.cs.pub.ro (HELO vmail.cs.pub.ro) ([141.85.227.3])
 by vesa.cs.pub.ro with ESMTP; 23 Sep 2019 12:58:58 +0300
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 8DFBD1A602EE;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10032)
 with ESMTP id t9jB2i_CM9wR; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from localhost (localhost [127.0.0.1])
 by vmail.cs.pub.ro (Postfix) with ESMTP id 6A0351A602E4;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
X-Virus-Scanned: amavisd-new at cs.pub.ro
Received: from vmail.cs.pub.ro ([127.0.0.1])
 by localhost (vmail.cs.pub.ro [127.0.0.1]) (amavisd-new, port 10026)
 with ESMTP id hdcYDfsDknj5; Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
Received: from wolfprec.precis.pub.ro (unknown [141.85.233.142])
 by vmail.cs.pub.ro (Postfix) with ESMTPSA id 3936E1A602F1;
 Mon, 23 Sep 2019 12:58:58 +0300 (EEST)
From: Costin Lupu <costin.lupu@cs.pub.ro>
To: minios-devel@lists.xen.org
Date: Mon, 23 Sep 2019 12:58:42 +0300
Message-Id: <20190923095852.21872-5-costin.lupu@cs.pub.ro>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
References: <20190923095852.21872-1-costin.lupu@cs.pub.ro>
Subject: [Minios-devel] [UNIKRAFT/PYTHON3 PATCH v3 04/14] pyconfig.h:
 Introduce file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, vlad_andrei.badoiu@stud.acs.upb.ro
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBi
LnJvPgoKcHljb25maWcuaCBpcyBnZW5lcmF0ZWQgd2hlbiBydW5uaW5nIC4vY29uZmlndXJlIGFu
ZCBpdCBjb250YWlucyB0aGUgZmVhdHVyZXMKdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBidWls
ZCBtYWNoaW5lLiBUaGlzIGlzIGNvcGllZCBmcm9tIGEgbG9jYWwgYnVpbGQuCgpTaWduZWQtb2Zm
LWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIu
cm8+ClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0t
LQogaW5jbHVkZS9weWNvbmZpZy5oIHwgMTU4NyArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDE1ODcgaW5zZXJ0aW9ucygrKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvcHljb25maWcuaAoKZGlmZiAtLWdpdCBhL2luY2x1ZGUv
cHljb25maWcuaCBiL2luY2x1ZGUvcHljb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xZTRlZjhhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9weWNvbmZpZy5o
CkBAIC0wLDAgKzEsMTU4NyBAQAorLyogcHljb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIHB5Y29u
ZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qIHB5Y29uZmlnLmguaW4uICBHZW5lcmF0ZWQg
ZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKworI2lmbmRlZiBQeV9QWUNP
TkZJR19ICisjZGVmaW5lIFB5X1BZQ09ORklHX0gKKworCisvKiBEZWZpbmUgaWYgYnVpbGRpbmcg
dW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisvKiAjdW5kZWYgQUNfQVBQTEVf
VU5JVkVSU0FMX0JVSUxEICovCisKKy8qIERlZmluZSBmb3IgQUlYIGlmIHlvdXIgY29tcGlsZXIg
aXMgYSBnZW51aW5lIElCTSB4bEMveGxDX3IgYW5kIHlvdSB3YW50CisgICBzdXBwb3J0IGZvciBB
SVggQysrIHNoYXJlZCBleHRlbnNpb24gbW9kdWxlcy4gKi8KKy8qICN1bmRlZiBBSVhfR0VOVUlO
RV9DUExVU1BMVVMgKi8KKworLyogVGhlIEFuZHJvaWQgQVBJIGxldmVsLiAqLworLyogI3VuZGVm
IEFORFJPSURfQVBJX0xFVkVMICovCisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJp
dCBJRUVFIDc1NCBiaW5hcnkgZm9ybWF0LCBzdG9yZWQgaW4gQVJNCisgICBtaXhlZC1lbmRpYW4g
b3JkZXIgKGJ5dGUgb3JkZXIgNDU2NzAxMjMpICovCisvKiAjdW5kZWYgRE9VQkxFX0lTX0FSTV9N
SVhFRF9FTkRJQU5fSUVFRTc1NCAqLworCisvKiBEZWZpbmUgaWYgQyBkb3VibGVzIGFyZSA2NC1i
aXQgSUVFRSA3NTQgYmluYXJ5IGZvcm1hdCwgc3RvcmVkIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25p
ZmljYW50IGJ5dGUgZmlyc3QgKi8KKy8qICN1bmRlZiBET1VCTEVfSVNfQklHX0VORElBTl9JRUVF
NzU0ICovCisKKy8qIERlZmluZSBpZiBDIGRvdWJsZXMgYXJlIDY0LWJpdCBJRUVFIDc1NCBiaW5h
cnkgZm9ybWF0LCBzdG9yZWQgd2l0aCB0aGUKKyAgIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgZmly
c3QgKi8KKyNkZWZpbmUgRE9VQkxFX0lTX0xJVFRMRV9FTkRJQU5fSUVFRTc1NCAxCisKKy8qIERl
ZmluZSBpZiAtLWVuYWJsZS1pcHY2IGlzIHNwZWNpZmllZCAqLworI2RlZmluZSBFTkFCTEVfSVBW
NiAxCisKKy8qIERlZmluZSBpZiBmbG9jayBuZWVkcyB0byBiZSBsaW5rZWQgd2l0aCBic2QgbGli
cmFyeS4gKi8KKy8qICN1bmRlZiBGTE9DS19ORUVEU19MSUJCU0QgKi8KKworLyogRGVmaW5lIGlm
IGdldHBncnAoKSBtdXN0IGJlIGNhbGxlZCBhcyBnZXRwZ3JwKDApLiAqLworLyogI3VuZGVmIEdF
VFBHUlBfSEFWRV9BUkcgKi8KKworLyogRGVmaW5lIGlmIGdldHRpbWVvZmRheSgpIGRvZXMgbm90
IGhhdmUgc2Vjb25kICh0aW1lem9uZSkgYXJndW1lbnQgVGhpcyBpcworICAgdGhlIGNhc2Ugb24g
TW90b3JvbGEgVjQgKFI0MFY0LjIpICovCisvKiAjdW5kZWYgR0VUVElNRU9GREFZX05PX1RaICov
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWNjZXB0NCcgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfQUNDRVBUNCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgYWNvc2gnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FDT1NIIDEKKworLyogc3RydWN0
IGFkZHJpbmZvIChuZXRkYi5oKSAqLworI2RlZmluZSBIQVZFX0FERFJJTkZPIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfQUxBUk0gMQorCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVp
cmVkICovCisvKiAjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVEICovCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX0FMTE9DQV9IIDEKKworLyogRGVmaW5lIHRoaXMgaWYgeW91ciB0aW1lLmggZGVmaW5lcyBh
bHR6b25lLiAqLworLyogI3VuZGVmIEhBVkVfQUxUWk9ORSAqLworCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGFzaW5oJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9BU0lOSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNtL3R5cGVzLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX0FTTV9UWVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQVRBTkggMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Ymx1ZXRvb3RoL2JsdWV0b290aC5oPiBo
ZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0JMVUVUT09USF9CTFVFVE9PVEhfSCAqLwor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGJsdWV0b290aC5oPiBoZWFkZXIgZmls
ZS4gKi8KKy8qICN1bmRlZiBIQVZFX0JMVUVUT09USF9IICovCisKKy8qIERlZmluZSBpZiBtYnN0
b3djcyhOVUxMLCAidGV4dCIsIDApIGRvZXMgbm90IHJldHVybiB0aGUgbnVtYmVyIG9mIHdpZGUK
KyAgIGNoYXJzIHRoYXQgd291bGQgYmUgY29udmVydGVkLiAqLworLyogI3VuZGVmIEhBVkVfQlJP
S0VOX01CU1RPV0NTICovCisKKy8qIERlZmluZSBpZiBuaWNlKCkgcmV0dXJucyBzdWNjZXNzL2Zh
aWx1cmUgaW5zdGVhZCBvZiB0aGUgbmV3IHByaW9yaXR5LiAqLworLyogI3VuZGVmIEhBVkVfQlJP
S0VOX05JQ0UgKi8KKworLyogRGVmaW5lIGlmIHRoZSBzeXN0ZW0gcmVwb3J0cyBhbiBpbnZhbGlk
IFBJUEVfQlVGIHZhbHVlLiAqLworLyogI3VuZGVmIEhBVkVfQlJPS0VOX1BJUEVfQlVGICovCisK
Ky8qIERlZmluZSBpZiBwb2xsKCkgc2V0cyBlcnJubyBvbiBpbnZhbGlkIGZpbGUgZGVzY3JpcHRv
cnMuICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fUE9MTCAqLworCisvKiBEZWZpbmUgaWYgdGhl
IFBvc2l4IHNlbWFwaG9yZXMgZG8gbm90IHdvcmsgb24geW91ciBzeXN0ZW0gKi8KKy8qICN1bmRl
ZiBIQVZFX0JST0tFTl9QT1NJWF9TRU1BUEhPUkVTICovCisKKy8qIERlZmluZSBpZiBwdGhyZWFk
X3NpZ21hc2soKSBkb2VzIG5vdCB3b3JrIG9uIHlvdXIgc3lzdGVtLiAqLworLyogI3VuZGVmIEhB
VkVfQlJPS0VOX1BUSFJFQURfU0lHTUFTSyAqLworCisvKiBkZWZpbmUgdG8gMSBpZiB5b3VyIHNl
bV9nZXR2YWx1ZSBpcyBicm9rZW4uICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fU0VNX0dFVFZB
TFVFICovCisKKy8qIERlZmluZSBpZiBgdW5zZXRlbnZgIGRvZXMgbm90IHJldHVybiBhbiBpbnQu
ICovCisvKiAjdW5kZWYgSEFWRV9CUk9LRU5fVU5TRVRFTlYgKi8KKworLyogSGFzIGJ1aWx0aW4g
YXRvbWljcyAqLworI2RlZmluZSBIQVZFX0JVSUxUSU5fQVRPTUlDIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlICdjaGZsYWdzJyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZF
X0NIRkxBR1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaG93bicgZnVu
Y3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0hPV04gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdjaHJvb3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NIUk9PVCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2snIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX0NMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjbG9ja19nZXRy
ZXMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NMT0NLX0dFVFJFUyAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgY2xvY2tfc2V0dGltZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ0xPQ0tfU0VUVElN
RSAxCisKKy8qIERlZmluZSBpZiB0aGUgQyBjb21waWxlciBzdXBwb3J0cyBjb21wdXRlZCBnb3Rv
cy4gKi8KKyNkZWZpbmUgSEFWRV9DT01QVVRFRF9HT1RPUyAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgY29uZnN0cicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ09ORlNU
UiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y29uaW8uaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9DT05JT19IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgY29weXNpZ24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NPUFlTSUdO
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnlwdC5oPiBoZWFkZXIgZmls
ZS4gKi8KKyNkZWZpbmUgSEFWRV9DUllQVF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSBjcnlwdF9yKCkgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ1JZUFRfUiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3Rlcm1pZCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfQ1RFUk1JRCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2N0ZXJtaWRfcicg
ZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DVEVSTUlEX1IgKi8KKworLyogRGVmaW5lIGlm
IHlvdSBoYXZlIHRoZSAnZmlsdGVyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNf
RklMVEVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjdXJzZXMuaD4gaGVh
ZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQ1VSU0VTX0ggMQorCisvKiBEZWZpbmUgaWYgeW91
IGhhdmUgdGhlICdoYXNfa2V5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfSEFT
X0tFWSAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ltbWVkb2snIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX0NVUlNFU19JTU1FRE9LIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZl
IHRoZSAnaXNfcGFkJyBmdW5jdGlvbiBvciBtYWNyby4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNf
SVNfUEFEIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnaXNfdGVybV9yZXNpemVkJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfSVNfVEVSTV9SRVNJWkVEIDEKKworLyog
RGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncmVzaXpldGVybScgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfQ1VSU0VTX1JFU0laRVRFUk0gMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdy
ZXNpemVfdGVybScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfQ1VSU0VTX1JFU0laRV9URVJN
IDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnc3luY29rJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9DVVJTRVNfU1lOQ09LIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAn
dHlwZWFoZWFkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DVVJTRVNfVFlQRUFIRUFEIDEK
KworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAndXNlX2VudicgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfQ1VSU0VTX1VTRV9FTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICd3
Y2hnYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0NVUlNFU19XQ0hHQVQgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGlzZmluaXRlJywgYW5k
IHRvIDAgaWYgeW91CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX0lTRklOSVRFIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGBpc2luZics
IGFuZCB0byAwIGlmIHlvdSBkb24ndC4KKyAgICovCisjZGVmaW5lIEhBVkVfREVDTF9JU0lORiAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgaXNuYW4n
LCBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuCisgICAqLworI2RlZmluZSBIQVZFX0RFQ0xfSVNOQU4g
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERf
REVFUEJJTkQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RF
Q0xfUlRMRF9ERUVQQklORCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNs
YXJhdGlvbiBvZiBgUlRMRF9HTE9CQUwnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLwor
I2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9HTE9CQUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTEFaWScsIGFuZCB0byAwIGlmIHlvdQorICAg
ZG9uJ3QuICovCisjZGVmaW5lIEhBVkVfREVDTF9SVExEX0xBWlkgMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTE9DQUwnLCBhbmQgdG8gMCBp
ZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9MT0NBTCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9NRU1CRVIn
LCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9N
RU1CRVIgMAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2Yg
YFJUTERfTk9ERUxFVEUnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0LiAqLworI2RlZmluZSBI
QVZFX0RFQ0xfUlRMRF9OT0RFTEVURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBkZWNsYXJhdGlvbiBvZiBgUlRMRF9OT0xPQUQnLCBhbmQgdG8gMCBpZiB5b3UKKyAgIGRvbid0
LiAqLworI2RlZmluZSBIQVZFX0RFQ0xfUlRMRF9OT0xPQUQgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYFJUTERfTk9XJywgYW5kIHRvIDAgaWYgeW91
CisgICBkb24ndC4gKi8KKyNkZWZpbmUgSEFWRV9ERUNMX1JUTERfTk9XIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGB0em5hbWUnLCBhbmQgdG8gMCBp
ZiB5b3UgZG9uJ3QuCisgICAqLworLyogI3VuZGVmIEhBVkVfREVDTF9UWk5BTUUgKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGRldmljZSBtYWNyb3MuICovCisjZGVmaW5lIEhB
VkVfREVWSUNFX01BQ1JPUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAvZGV2
L3B0YyBkZXZpY2UgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX0RFVl9QVEMgKi8KKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIC9kZXYvcHRteCBkZXZpY2UgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9ERVZfUFRNWCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGly
ZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfRElSRUNUX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgdGhlIGRpcmVudCBzdHJ1Y3R1cmUgaGFzIGEgZF90eXBlIGZpZWxkICov
CisjZGVmaW5lIEhBVkVfRElSRU5UX0RfVFlQRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAg
ICovCisjZGVmaW5lIEhBVkVfRElSRU5UX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhl
ICdkaXJmZCcgZnVuY3Rpb24gb3IgbWFjcm8uICovCisjZGVmaW5lIEhBVkVfRElSRkQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwor
I2RlZmluZSBIQVZFX0RMRkNOX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGRsb3BlbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRExPUEVOIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9E
VVAyIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkdXAzJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9EVVAzIDEKKworLyogRGVmaW5lZCB3aGVuIGFueSBkeW5hbWljIG1v
ZHVsZSBsb2FkaW5nIGlzIGVuYWJsZWQuICovCisjZGVmaW5lIEhBVkVfRFlOQU1JQ19MT0FESU5H
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlbmRpYW4uaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfRU5ESUFOX0ggMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdlcG9sbCcgZnVuY3Rpb25zLiAqLworI2RlZmluZSBIQVZFX0VQT0xMIDEKKworLyogRGVm
aW5lIGlmIHlvdSBoYXZlIHRoZSAnZXBvbGxfY3JlYXRlMScgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfRVBPTExfQ1JFQVRFMSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZXJmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FUkYgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGVyZmMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0VSRkMgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAq
LworI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGV4ZWN2JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FWEVDViAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXhwbTEnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0VYUE0xIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmYWNjZXNzYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZBQ0NFU1NBVCAxCisKKy8qIERlZmluZSBpZiB5b3Ug
aGF2ZSB0aGUgJ2ZjaGRpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNIRElSIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2htb2QnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0ZDSE1PRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNo
bW9kYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDSE1PREFUIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2hvd24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0ZDSE9XTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmNob3duYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZDSE9XTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9GQ05U
TF9IIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAnZmRhdGFzeW5jJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9GREFUQVNZTkMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGZkb3BlbmRpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkRPUEVORElSIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmZXhlY3ZlJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GRVhFQ1ZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBmaW5pdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZJTklURSAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmxvY2snIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X0ZMT0NLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9GT1JLIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBmb3JrcHR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GT1JLUFRZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmcGF0aGNvbmYnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0ZQQVRIQ09ORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZnNlZWs2NCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GU0VFSzY0ICovCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnNlZWtvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9GU0VFS08gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZzdGF0YXQn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0ZTVEFUQVQgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGZzdGF0dmZzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GU1RB
VFZGUyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2ZzeW5jJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GU1lOQyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZnRlbGw2NCcgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9GVEVMTDY0ICovCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnRlbGxvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9GVEVMTE8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ0aW1lJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgZnRydW5jYXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GVFJVTkNB
VEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1dGltZW5zJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9GVVRJTUVOUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgZnV0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRlVUSU1FUyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnV0aW1lc2F0JyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9GVVRJTUVTQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGdhaV9zdHJlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0FJX1NUUkVSUk9S
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnYW1tYScgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfR0FNTUEgMQorCisvKiBEZWZpbmUgaWYgd2UgY2FuIHVzZSBnY2MgaW5s
aW5lIGFzc2VtYmxlciB0byBnZXQgYW5kIHNldCBtYzY4ODgxIGZwY3IgKi8KKy8qICN1bmRlZiBI
QVZFX0dDQ19BU01fRk9SX01DNjg4ODEgKi8KKworLyogRGVmaW5lIGlmIHdlIGNhbiB1c2UgeDY0
IGdjYyBpbmxpbmUgYXNzZW1ibGVyICovCisjZGVmaW5lIEhBVkVfR0NDX0FTTV9GT1JfWDY0IDEK
KworLyogRGVmaW5lIGlmIHdlIGNhbiB1c2UgZ2NjIGlubGluZSBhc3NlbWJsZXIgdG8gZ2V0IGFu
ZCBzZXQgeDg3IGNvbnRyb2wgd29yZAorICAgKi8KKyNkZWZpbmUgSEFWRV9HQ0NfQVNNX0ZPUl9Y
ODcgMQorCisvKiBEZWZpbmUgaWYgeW91ciBjb21waWxlciBwcm92aWRlcyBfX3VpbnQxMjhfdCAq
LworI2RlZmluZSBIQVZFX0dDQ19VSU5UMTI4X1QgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlIGdldGFkZHJpbmZvIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEK
KworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgZmxvY2tmaWxlKCksIGdldGNfdW5sb2NrZWQo
KSwgYW5kIGZ1bmxvY2tmaWxlKCkgKi8KKyNkZWZpbmUgSEFWRV9HRVRDX1VOTE9DS0VEIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRlbnRyb3B5JyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9HRVRFTlRST1BZIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBnZXRncm91cGxpc3QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVEdST1VQTElT
VCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Z3JvdXBzJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRHUk9VUFMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYGdldGhvc3RieW5hbWUnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfR0VU
SE9TVEJZTkFNRSAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBzb21lIHZlcnNpb24g
b2YgZ2V0aG9zdGJ5bmFtZV9yKCkgKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1IgMQor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgMy1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl8zX0FSRyAqLwor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNS1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKy8qICN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUVfUl81X0FSRyAqLwor
CisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSB0aGUgNi1hcmcgdmVyc2lvbiBvZiBnZXRob3N0
YnluYW1lX3IoKS4gKi8KKyNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FX1JfNl9BUkcgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGl0aW1lcicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfR0VUSVRJTUVSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRsb2FkYXZnJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRMT0FEQVZHIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRsb2dpbicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfR0VUTE9HSU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGdldG5hbWVpbmZvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVROQU1FSU5GTyAxCisK
Ky8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2dldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0cGVlcm5hbWUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBFRVJOQU1FIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwZ2lkJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9HRVRQR0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBnZXRwZ3JwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRQR1JQIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX0dFVFBJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cHJpb3Jp
dHknIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFBSSU9SSVRZIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRwd2VudCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfR0VUUFdFTlQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgZ2V0cmFuZG9tKCkgZnVuY3Rp
b24gaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEhBVkVfR0VUUkFORE9NIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgdGhlIExpbnV4IGdldHJhbmRvbSgpIHN5c2NhbGwgaXMgYXZhaWxhYmxlICovCisj
ZGVmaW5lIEhBVkVfR0VUUkFORE9NX1NZU0NBTEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYGdldHJlc2dpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUUkVTR0lE
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRyZXN1aWQnIGZ1bmN0aW9u
LiAqLworI2RlZmluZSBIQVZFX0dFVFJFU1VJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgZ2V0c2lkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9HRVRTSUQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHNwZW50JyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9HRVRTUEVOVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
Z2V0c3BuYW0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFNQTkFNIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXR0aW1lb2ZkYXknIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX0dFVFRJTUVPRkRBWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZ2V0d2QnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0dFVFdEIDEKKworLyogRGVmaW5l
IGlmIGdsaWJjIGhhcyBpbmNvcnJlY3QgX0ZPUlRJRllfU09VUkNFIHdyYXBwZXJzIGZvciBtZW1t
b3ZlIGFuZAorICAgYmNvcHkuICovCisvKiAjdW5kZWYgSEFWRV9HTElCQ19NRU1NT1ZFX0JVRyAq
LworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdycC5oPiBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9HUlBfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2hz
dHJlcnJvcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSFNUUkVSUk9SIDEKKworLyogRGVm
aW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpICovCisjZGVmaW5lIEhBVkVfSFRPTEU2NCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaHlwb3QnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX0hZUE9UIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxp
ZWVlZnAuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9JRUVFRlBfSCAqLworCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcgZnVuY3Rpb24uICov
CisjZGVmaW5lIEhBVkVfSUZfTkFNRUlOREVYIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSAnaW5ldF9hdG9uJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTkVUX0FUT04gMQorCisv
KiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdpbmV0X3B0b24nIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX0lORVRfUFRPTiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5p
dGdyb3VwcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU5JVEdST1VQUyAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8aW8uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9JT19IICovCisKKy8qIERl
ZmluZSBpZiBnY2MgaGFzIHRoZSBpcGEtcHVyZS1jb25zdCBidWcuICovCisvKiAjdW5kZWYgSEFW
RV9JUEFfUFVSRV9DT05TVF9CVUcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBraWxsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9LSUxMIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBraWxscGcnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0tJ
TExQRyAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2txdWV1ZScgZnVuY3Rpb25zLiAq
LworLyogI3VuZGVmIEhBVkVfS1FVRVVFICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8bGFuZ2luZm8uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTEFOR0lORk9f
SCAxCisKKy8qIERlZmluZWQgdG8gZW5hYmxlIGxhcmdlIGZpbGUgc3VwcG9ydCB3aGVuIGFuIG9m
Zl90IGlzIGJpZ2dlciB0aGFuIGEgbG9uZworICAgYW5kIGxvbmcgbG9uZyBpcyBhdmFpbGFibGUg
YW5kIGF0IGxlYXN0IGFzIGJpZyBhcyBhbiBvZmZfdC4gWW91IG1heSBuZWVkIHRvCisgICBhZGQg
c29tZSBmbGFncyBmb3IgY29uZmlndXJhdGlvbiBhbmQgY29tcGlsYXRpb24gdG8gZW5hYmxlIHRo
aXMgbW9kZS4gKEZvcgorICAgU29sYXJpcyBhbmQgTGludXgsIHRoZSBuZWNlc3NhcnkgZGVmaW5l
cyBhcmUgYWxyZWFkeSBkZWZpbmVkLikgKi8KKy8qICN1bmRlZiBIQVZFX0xBUkdFRklMRV9TVVBQ
T1JUICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSAnbGNoZmxhZ3MnIGZ1bmN0
aW9uLiAqLworLyogI3VuZGVmIEhBVkVfTENIRkxBR1MgKi8KKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBsY2htb2QnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfTENITU9E
ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGNob3duJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9MQ0hPV04gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGxnYW1tYScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTEdBTU1BIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCisjZGVmaW5l
IEhBVkVfTElCREwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsZCcgbGli
cmFyeSAoLWxkbGQpLiAqLworLyogI3VuZGVmIEhBVkVfTElCRExEICovCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgaWVlZScgbGlicmFyeSAoLWxpZWVlKS4gKi8KKy8qICN1bmRl
ZiBIQVZFX0xJQklFRUUgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJp
bnRsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJQklOVExfSCAxCisKKy8qIERl
ZmluZSBpZiB5b3UgaGF2ZSB0aGUgcmVhZGxpbmUgbGlicmFyeSAoLWxyZWFkbGluZSkuICovCisv
KiAjdW5kZWYgSEFWRV9MSUJSRUFETElORSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHJlc29sdicgbGlicmFyeSAoLWxyZXNvbHYpLiAqLworLyogI3VuZGVmIEhBVkVfTElC
UkVTT0xWICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2VuZGZpbGUnIGxp
YnJhcnkgKC1sc2VuZGZpbGUpLiAqLworLyogI3VuZGVmIEhBVkVfTElCU0VOREZJTEUgKi8KKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaWJ1dGlsLmg+IGhlYWRlciBmaWxlLiAq
LworLyogI3VuZGVmIEhBVkVfTElCVVRJTF9IICovCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0
aGUgJ2xpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xJTksgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxpbmthdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
TElOS0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9jYW4vYmNt
Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9CQ01fSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuLmg+IGhlYWRlciBmaWxlLiAq
LworI2RlZmluZSBIQVZFX0xJTlVYX0NBTl9IIDEKKworLyogRGVmaW5lIGlmIGNvbXBpbGluZyB1
c2luZyBMaW51eCAzLjYgb3IgbGF0ZXIuICovCisjZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19G
RF9GUkFNRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi9y
YXcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTElOVVhfQ0FOX1JBV19IIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5rLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX05FVExJTktfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8bGludXgvcmFuZG9tLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmlu
ZSBIQVZFX0xJTlVYX1JBTkRPTV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxsaW51eC90aXBjLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0xJTlVYX1RJUENf
SCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvdm1fc29ja2V0cy5o
PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9MSU5VWF9WTV9TT0NLRVRTX0ggMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2tmJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9MT0NLRiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMXAn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0xPRzFQIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBsb2cyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MT0cyIDEKKwor
LyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBkb3VibGUuICovCisjZGVm
aW5lIEhBVkVfTE9OR19ET1VCTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGxzdGF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MU1RBVCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgbHV0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
TFVUSU1FUyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBtYWtlZGV2IG1hY3Jv
LiAqLworI2RlZmluZSBIQVZFX01BS0VERVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYG1icnRvd2MnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01CUlRPV0MgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8K
KyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgbWVtcmNocicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTUVNUkNIUiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtkaXJhdCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfTUtESVJBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtmaWZv
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS0ZJRk8gMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYG1rZmlmb2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS0ZJ
Rk9BVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtub2QnIGZ1bmN0aW9u
LiAqLworI2RlZmluZSBIQVZFX01LTk9EIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBta25vZGF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS05PREFUIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta3RpbWUnIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX01LVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcg
ZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTU1BUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgbXJlbWFwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5jdXJzZXMuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfTkNVUlNFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxuZGlyLmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4gKi8KKy8q
ICN1bmRlZiBIQVZFX05ESVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PG5ldHBhY2tldC9wYWNrZXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUUEFD
S0VUX1BBQ0tFVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWYu
aD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG5pY2UnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX05J
Q0UgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW5hdCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfT1BFTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBvcGVucHR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOUFRZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwYXRoY29uZicgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfUEFUSENPTkYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBh
dXNlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QQVVTRSAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BJUEUy
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwbG9jaycgZnVuY3Rpb24uICov
CisvKiAjdW5kZWYgSEFWRV9QTE9DSyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHBvbGwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BPTEwgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvbGwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWR2
aXNlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QT1NJWF9GQURWSVNFIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb3NpeF9mYWxsb2NhdGUnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX1BPU0lYX0ZBTExPQ0FURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgcG9zaXhfc3Bhd24nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BPU0lYX1NQ
QVdOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfUFJFQUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHByZWFkdicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFJFQURWIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZHYyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9QUkVBRFYyIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSAncHJsaW1pdCcgZnVu
Y3Rpb25zLiAqLworI2RlZmluZSBIQVZFX1BSTElNSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9Q
Uk9DRVNTX0ggKi8KKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgZnVuY3Rp
b24gcHJvdG90eXBlICovCisjZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxCisKKy8qIERlZmluZWQg
Zm9yIFNvbGFyaXMgMi42IGJ1ZyBpbiBwdGhyZWFkIGhlYWRlci4gKi8KKy8qICN1bmRlZiBIQVZF
X1BUSFJFQURfREVTVFJVQ1RPUiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFRIUkVB
RF9HRVRDUFVDTE9DS0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwdGhy
ZWFkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHRocmVhZF9pbml0JyBmdW5jdGlvbi4gKi8KKy8q
ICN1bmRlZiBIQVZFX1BUSFJFQURfSU5JVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHB0aHJlYWRfa2lsbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUFRIUkVBRF9L
SUxMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdGhyZWFkX3NpZ21hc2sn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BUSFJFQURfU0lHTUFTSyAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHR5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX1BUWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwdXRlbnYnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1BVVEVOViAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgcHdyaXRlJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QV1JJVEUgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHB3cml0ZXYnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX1BXUklURVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHB3cml0ZXYyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9QV1JJVEVWMiAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGxpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX1JFQURMSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFk
bGlua2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUFETElOS0FUIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkdicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfUkVBRFYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlYWxwYXRoJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9SRUFMUEFUSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1JFTkFN
RUFUIDEKKworLyogRGVmaW5lIGlmIHJlYWRsaW5lIHN1cHBvcnRzIGFwcGVuZF9oaXN0b3J5ICov
CisvKiAjdW5kZWYgSEFWRV9STF9BUFBFTkRfSElTVE9SWSAqLworCisvKiBEZWZpbmUgaWYgeW91
IGNhbiB0dXJuIG9mZiByZWFkbGluZSdzIHNpZ25hbCBoYW5kbGluZy4gKi8KKy8qICN1bmRlZiBI
QVZFX1JMX0NBVENIX1NJR05BTCAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUg
Mi4yICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX0FQUEVORF9DSEFSQUNURVIgKi8K
KworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHJlYWRsaW5lIDQuMCAqLworLyogI3VuZGVmIEhBVkVf
UkxfQ09NUExFVElPTl9ESVNQTEFZX01BVENIRVNfSE9PSyAqLworCisvKiBEZWZpbmUgaWYgeW91
IGhhdmUgcmVhZGxpbmUgNC4yICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX01BVENI
RVMgKi8KKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHJsX2NvbXBsZXRpb25fc3VwcHJlc3NfYXBw
ZW5kICovCisvKiAjdW5kZWYgSEFWRV9STF9DT01QTEVUSU9OX1NVUFBSRVNTX0FQUEVORCAqLwor
CisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4wICovCisvKiAjdW5kZWYgSEFWRV9S
TF9QUkVfSU5QVVRfSE9PSyAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmVhZGxpbmUgNC4w
ICovCisvKiAjdW5kZWYgSEFWRV9STF9SRVNJWkVfVEVSTUlOQUwgKi8KKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGByb3VuZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUk9V
TkQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX2dldF9wcmlvcml0
eV9tYXgnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0dFVF9QUklPUklUWV9NQVgg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNjaGVkLmg+IGhlYWRlciBmaWxl
LiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNjaGVkX3JyX2dldF9pbnRlcnZhbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0NIRURfUlJfR0VUX0lOVEVSVkFMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBzY2hlZF9zZXRhZmZpbml0eScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0NIRURfU0VU
QUZGSU5JVFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNjaGVkX3NldHBh
cmFtJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TQ0hFRF9TRVRQQVJBTSAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2NoZWRfc2V0c2NoZWR1bGVyJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9TQ0hFRF9TRVRTQ0hFRFVMRVIgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHNlbV9nZXR2YWx1ZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0VNX0dFVFZBTFVFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW1fb3Bl
bicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VNX09QRU4gMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHNlbV90aW1lZHdhaXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX1NFTV9USU1FRFdBSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
bV91bmxpbmsnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFTV9VTkxJTksgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbmRmaWxlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TRU5ERklMRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0
ZWdpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VURUdJRCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZXVpZCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0VURVVJRCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0Z2lkJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRHSUQgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
dGhlICdzZXRncm91cHMnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVEdST1VQUyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0aG9zdG5hbWUnIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX1NFVEhPU1ROQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBzZXRpdGltZXInIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVElUSU1FUiAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0bG9jYWxlJyBmdW5jdGlvbi4g
Ki8KKyNkZWZpbmUgSEFWRV9TRVRMT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNldHBnaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFBHSUQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHBncnAnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NFVFBHUlAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
dHByaW9yaXR5JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRQUklPUklUWSAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVnaWQnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NFVFJFR0lEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBz
ZXRyZXNnaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NFVFJFU0dJRCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0cmVzdWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TRVRSRVNVSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNl
dHJldWlkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRSRVVJRCAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0c2lkJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFW
RV9TRVRTSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldHVpZCcgZnVu
Y3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0VUVUlEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBzZXR2YnVmJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRWQlVGIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaGFkb3cuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU0hBRE9XX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHNpZ2FjdGlvbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHQUNUSU9OIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdhbHRzdGFjaycgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfU0lHQUxUU1RBQ0sgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgc2lf
YmFuZCcgaXMgYSBtZW1iZXIgb2YgYHNpZ2luZm9fdCcuICovCisjZGVmaW5lIEhBVkVfU0lHSU5G
T19UX1NJX0JBTkQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ2ludGVy
cnVwdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm
aW5lIEhBVkVfU0lHTkFMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNp
Z3BlbmRpbmcnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NJR1BFTkRJTkcgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3JlbHNlJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9TSUdSRUxTRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2ln
dGltZWR3YWl0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdUSU1FRFdBSVQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3dhaXQnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NJR1dBSVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNp
Z3dhaXRpbmZvJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TSUdXQUlUSU5GTyAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc25wcmludGYnIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NOUFJJTlRGIDEKKworLyogc3RydWN0IHNvY2thZGRyX2FsZyAobGludXgvaWZf
YWxnLmgpICovCisjZGVmaW5lIEhBVkVfU09DS0FERFJfQUxHIDEKKworLyogRGVmaW5lIGlmIHNv
Y2thZGRyIGhhcyBzYV9sZW4gbWVtYmVyICovCisvKiAjdW5kZWYgSEFWRV9TT0NLQUREUl9TQV9M
RU4gKi8KKworLyogc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKHN5cy9zb2NrZXQuaCkgKi8KKyNk
ZWZpbmUgSEFWRV9TT0NLQUREUl9TVE9SQUdFIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRo
ZSAnc29ja2V0cGFpcicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU09DS0VUUEFJUiAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Bhd24uaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1BBV05fSCAxCisKKy8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHBy
b3ZpZGVzIHNzaXplX3QgKi8KKyNkZWZpbmUgSEFWRV9TU0laRV9UIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBzdGF0dmZzJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9T
VEFUVkZTIDEKKworLyogRGVmaW5lIGlmIHlvdSBoYXZlIHN0cnVjdCBzdGF0LnN0X210aW0udHZf
bnNlYyAqLworI2RlZmluZSBIQVZFX1NUQVRfVFZfTlNFQyAxCisKKy8qIERlZmluZSBpZiB5b3Ug
aGF2ZSBzdHJ1Y3Qgc3RhdC5zdF9tdGltZW5zZWMgKi8KKy8qICN1bmRlZiBIQVZFX1NUQVRfVFZf
TlNFQzIgKi8KKworLyogRGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgc3VwcG9ydHMgdmFyaWFibGUg
bGVuZ3RoIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGUuZy4KKyAgIHZvaWQgZnByaW50ZihGSUxFICos
IGNoYXIgKiwgLi4uKTspICphbmQqIDxzdGRhcmcuaD4gKi8KKyNkZWZpbmUgSEFWRV9TVERBUkdf
UFJPVE9UWVBFUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfU1RETElCX0ggMQorCisvKiBIYXMgc3RkYXRvbWljLmggd2l0aCBhdG9taWNfaW50ICovCisj
ZGVmaW5lIEhBVkVfU1REX0FUT01JQyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TVFJEVVAgMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmZ0aW1lJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9TVFJGVElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5n
cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3Ry
bGNweScgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9TVFJMQ1BZICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Ryb3B0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVFJPUFRTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgcHdfZ2Vjb3MnIGlzIGEg
bWVtYmVyIG9mIGBzdHJ1Y3QgcGFzc3dkJy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUEFTU1dE
X1BXX0dFQ09TIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHB3X3Bhc3N3ZCcgaXMgYSBtZW1iZXIg
b2YgYHN0cnVjdCBwYXNzd2QnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9QQVNTV0RfUFdfUEFT
U1dEIDEKKworLyogRGVmaW5lIHRvIDEgaWYgYHN0X2JpcnRodGltZScgaXMgYSBtZW1iZXIgb2Yg
YHN0cnVjdCBzdGF0Jy4gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElN
RSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgc3RfYmxrc2l6ZScgaXMgYSBtZW1iZXIgb2YgYHN0
cnVjdCBzdGF0Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTEtTSVpFIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgYHN0X2Jsb2NrcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0
Jy4gKi8KKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9CTE9DS1MgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiBgc3RfZmxhZ3MnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdCcuICovCisvKiAj
dW5kZWYgSEFWRV9TVFJVQ1RfU1RBVF9TVF9GTEFHUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBg
c3RfZ2VuJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworLyogI3VuZGVmIEhBVkVf
U1RSVUNUX1NUQVRfU1RfR0VOICovCisKKy8qIERlZmluZSB0byAxIGlmIGBzdF9yZGV2JyBpcyBh
IG1lbWJlciBvZiBgc3RydWN0IHN0YXQnLiAqLworI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NU
X1JERVYgMQorCisvKiBEZWZpbmUgdG8gMSBpZiBgdG1fem9uZScgaXMgYSBtZW1iZXIgb2YgYHN0
cnVjdCB0bScuICovCisjZGVmaW5lIEhBVkVfU1RSVUNUX1RNX1RNX1pPTkUgMQorCisvKiBEZWZp
bmUgaWYgeW91IGhhdmUgdGhlICdzeW1saW5rJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9T
WU1MSU5LIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW1saW5rYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NZTUxJTktBVCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgc3luYycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1lOQyAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3lzY29uZicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfU1lTQ09ORiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3lzZXhpdHMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTRVhJVFNfSCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2F1ZGlvaW8uaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfQVVESU9JT19IICovCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL2JzZHR0eS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRl
ZiBIQVZFX1NZU19CU0RUVFlfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHN5cy9kZXZwb2xsLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0RFVlBP
TExfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9kaXIuaD4gaGVh
ZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLgorICAgKi8KKy8qICN1bmRlZiBIQVZFX1NZ
U19ESVJfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lbmRpYW4u
aD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfRU5ESUFOX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZXBvbGwuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1lTX0VQT0xMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy9ldmVudC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX1NZU19F
VkVOVF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4g
aGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2lvY3RsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmlu
ZSBIQVZFX1NZU19JT0NUTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
eXMva2Vybl9jb250cm9sLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX0tF
Uk5fQ09OVFJPTF9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2xv
YWRhdmcuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTE9BREFWR19IICov
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2xvY2suaD4gaGVhZGVyIGZp
bGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTE9DS19IICovCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL21rZGV2Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhB
VkVfU1lTX01LREVWX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv
bW9kZW0uaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTU9ERU1fSCAqLwor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9uZGlyLmg+IGhlYWRlciBmaWxl
LCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAgICovCisvKiAjdW5kZWYgSEFWRV9TWVNfTkRJUl9I
ICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRl
ciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcmFu
ZG9tLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19SQU5ET01fSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Jlc291cmNlLmg+IGhlYWRlciBmaWxl
LiAqLworI2RlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDxzeXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZF
X1NZU19TRUxFQ1RfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Nl
bmRmaWxlLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TRU5ERklMRV9IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL3N0YXR2ZnMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfU1lTX1NUQVRWRlNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lz
L3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N5c2NhbGwuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1lTX1NZU0NBTExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8c3lzL3N5c21hY3Jvcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfU1lTTUFDUk9TX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5
cy9zeXNfZG9tYWluLmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfU1lTX1NZU19E
T01BSU5fSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90ZXJtaW8u
aD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfVEVSTUlPX0ggKi8KKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19USU1F
X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Vpby5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TWVNfVUlPX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy91bi5o
PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVU5fSCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm
aW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3hhdHRyLmg+IGhlYWRlciBm
aWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19YQVRUUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGB0Y2dldHBncnAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RDR0VU
UEdSUCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGNzZXRwZ3JwJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9UQ1NFVFBHUlAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgYHRlbXBuYW0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1RFTVBOQU0g
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHRlcm1pb3MuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfVEVSTUlPU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDx0ZXJtLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1RFUk1fSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGdhbW1hJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9UR0FNTUEgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YHRpbWVnbScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVElNRUdNIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0aW1lcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
VElNRVMgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRtcGZpbGUnIGZ1bmN0
aW9uLiAqLworI2RlZmluZSBIQVZFX1RNUEZJTEUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgYHRtcG5hbScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVE1QTkFNIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0bXBuYW1fcicgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfVE1QTkFNX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIGBzdHJ1Y3Qg
dG0nIGhhcyBgdG1fem9uZScuIERlcHJlY2F0ZWQsIHVzZQorICAgYEhBVkVfU1RSVUNUX1RNX1RN
X1pPTkUnIGluc3RlYWQuICovCisjZGVmaW5lIEhBVkVfVE1fWk9ORSAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgdHJ1bmNhdGUnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X1RSVU5DQVRFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGRvbid0IGhhdmUgYHRtX3pvbmUn
IGJ1dCBkbyBoYXZlIHRoZSBleHRlcm5hbCBhcnJheQorICAgYHR6bmFtZScuICovCisvKiAjdW5k
ZWYgSEFWRV9UWk5BTUUgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGNsIGFuZCBU
Q0xfVVRGX01BWD09NiAqLworLyogI3VuZGVmIEhBVkVfVUNTNF9UQ0wgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmFtZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
VU5BTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgdW5saW5rYXQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOTElO
S0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bnNldGVudicgZnVuY3Rp
b24uICovCisjZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUg
YSB1c2VhYmxlIHdjaGFyX3QgdHlwZSBkZWZpbmVkIGluIHdjaGFyLmg7IHVzZWFibGUgbWVhbnMK
KyAgIHdjaGFyX3QgbXVzdCBiZSBhbiB1bnNpZ25lZCB0eXBlIHdpdGggYXQgbGVhc3QgMTYgYml0
cy4gKHNlZQorICAgSW5jbHVkZS91bmljb2Rlb2JqZWN0LmgpLiAqLworLyogI3VuZGVmIEhBVkVf
VVNBQkxFX1dDSEFSX1QgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dGls
Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVRJTF9IICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdXRpbWVuc2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9VVElNRU5TQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1l
cycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfVVRJTUVTIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9V
VElNRV9IIDEKKworLyogRGVmaW5lIGlmIHV1aWRfY3JlYXRlKCkgZXhpc3RzLiAqLworLyogI3Vu
ZGVmIEhBVkVfVVVJRF9DUkVBVEUgKi8KKworLyogRGVmaW5lIGlmIHV1aWRfZW5jX2JlKCkgZXhp
c3RzLiAqLworLyogI3VuZGVmIEhBVkVfVVVJRF9FTkNfQkUgKi8KKworLyogRGVmaW5lIGlmIHV1
aWRfZ2VuZXJhdGVfdGltZV9zYWZlKCkgZXhpc3RzLiAqLworI2RlZmluZSBIQVZFX1VVSURfR0VO
RVJBVEVfVElNRV9TQUZFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1dWlk
Lmg+IGhlYWRlciBmaWxlLiAqLworLyogI3VuZGVmIEhBVkVfVVVJRF9IICovCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXVpZC91dWlkLmg+IGhlYWRlciBmaWxlLiAqLworI2Rl
ZmluZSBIQVZFX1VVSURfVVVJRF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGB3YWl0MycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfV0FJVDMgMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdhaXQ0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9X
QUlUNCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdGlkJyBmdW5jdGlv
bi4gKi8KKyNkZWZpbmUgSEFWRV9XQUlUSUQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHdhaXRwaWQnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dBSVRQSUQgMQorCisv
KiBEZWZpbmUgaWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIGEgd2NoYXIuaCBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9XQ0hBUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGB3Y3Njb2xsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XQ1NDT0xMIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3Y3NmdGltZScgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfV0NTRlRJTUUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdj
c3hmcm0nIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1dDU1hGUk0gMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdtZW1jbXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZF
X1dNRU1DTVAgMQorCisvKiBEZWZpbmUgaWYgdHpzZXQoKSBhY3R1YWxseSBzd2l0Y2hlcyB0aGUg
bG9jYWwgdGltZXpvbmUgaW4gYSBtZWFuaW5nZnVsIHdheS4KKyAgICovCisjZGVmaW5lIEhBVkVf
V09SS0lOR19UWlNFVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd3JpdGV2
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9XUklURVYgMQorCisvKiBEZWZpbmUgaWYgbGli
c3NsIGhhcyBYNTA5X1ZFUklGWV9QQVJBTV9zZXQxX2hvc3QgYW5kIHJlbGF0ZWQgZnVuY3Rpb24g
Ki8KKyNkZWZpbmUgSEFWRV9YNTA5X1ZFUklGWV9QQVJBTV9TRVQxX0hPU1QgMQorCisvKiBEZWZp
bmUgaWYgdGhlIHpsaWIgbGlicmFyeSBoYXMgaW5mbGF0ZUNvcHkgKi8KKyNkZWZpbmUgSEFWRV9a
TElCX0NPUFkgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYF9nZXRwdHknIGZ1
bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfX0dFVFBUWSAqLworCisvKiBEZWZpbmUgaWYgbG9n
MXAoLTAuKSBpcyAwLiByYXRoZXIgdGhhbiAtMC4gKi8KKy8qICN1bmRlZiBMT0cxUF9EUk9QU19a
RVJPX1NJR04gKi8KKworLyogRGVmaW5lIHRvIDEgaWYgYG1ham9yJywgYG1pbm9yJywgYW5kIGBt
YWtlZGV2JyBhcmUgZGVjbGFyZWQgaW4gPG1rZGV2Lmg+LgorICAgKi8KKy8qICN1bmRlZiBNQUpP
Ul9JTl9NS0RFViAqLworCisvKiBEZWZpbmUgdG8gMSBpZiBgbWFqb3InLCBgbWlub3InLCBhbmQg
YG1ha2VkZXYnIGFyZSBkZWNsYXJlZCBpbgorICAgPHN5c21hY3Jvcy5oPi4gKi8KKyNkZWZpbmUg
TUFKT1JfSU5fU1lTTUFDUk9TIDEKKworLyogRGVmaW5lIGlmIG12d2RlbGNoIGluIGN1cnNlcy5o
IGlzIGFuIGV4cHJlc3Npb24uICovCisjZGVmaW5lIE1WV0RFTENIX0lTX0VYUFJFU1NJT04gMQor
CisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFj
a2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKy8qICN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVCAqLwor
CisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisvKiAjdW5k
ZWYgUEFDS0FHRV9OQU1FICovCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJz
aW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qICN1bmRlZiBQQUNLQUdFX1NUUklORyAqLworCisv
KiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICov
CisvKiAjdW5kZWYgUEFDS0FHRV9UQVJOQU1FICovCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBw
YWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisvKiAjdW5kZWYgUEFDS0FHRV9VUkwgKi8KKworLyog
RGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KKy8qICN1bmRlZiBQQUNL
QUdFX1ZFUlNJT04gKi8KKworLyogRGVmaW5lIGlmIFBPU0lYIHNlbWFwaG9yZXMgYXJlbid0IGVu
YWJsZWQgb24geW91ciBzeXN0ZW0gKi8KKy8qICN1bmRlZiBQT1NJWF9TRU1BUEhPUkVTX05PVF9F
TkFCTEVEICovCisKKy8qIERlZmluZSBpZiBwdGhyZWFkX2tleV90IGlzIGNvbXBhdGlibGUgd2l0
aCBpbnQuICovCisjZGVmaW5lIFBUSFJFQURfS0VZX1RfSVNfQ09NUEFUSUJMRV9XSVRIX0lOVCAx
CisKKy8qIERlZmluZWQgaWYgUFRIUkVBRF9TQ09QRV9TWVNURU0gc3VwcG9ydGVkLiAqLworI2Rl
ZmluZSBQVEhSRUFEX1NZU1RFTV9TQ0hFRF9TVVBQT1JURUQgMQorCisvKiBEZWZpbmUgYXMgdGhl
IHByZWZlcnJlZCBzaXplIGluIGJpdHMgb2YgbG9uZyBkaWdpdHMgKi8KKy8qICN1bmRlZiBQWUxP
TkdfQklUU19JTl9ESUdJVCAqLworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gY29lcmNlIHRo
ZSBDIGxvY2FsZSB0byBhIFVURi04IGJhc2VkIGxvY2FsZSAqLworI2RlZmluZSBQWV9DT0VSQ0Vf
Q19MT0NBTEUgMQorCisvKiBEZWZpbmUgdG8gcHJpbnRmIGZvcm1hdCBtb2RpZmllciBmb3IgUHlf
c3NpemVfdCAqLworI2RlZmluZSBQWV9GT1JNQVRfU0laRV9UICJ6IgorCisvKiBEZWZhdWx0IGNp
cGhlciBzdWl0ZXMgbGlzdCBmb3Igc3NsIG1vZHVsZS4gMTogUHl0aG9uJ3MgcHJlZmVycmVkIHNl
bGVjdGlvbiwKKyAgIDI6IGxlYXZlIE9wZW5TU0wgZGVmYXVsdHMgdW50b3VjaGVkLCAwOiBjdXN0
b20gc3RyaW5nICovCisjZGVmaW5lIFBZX1NTTF9ERUZBVUxUX0NJUEhFUlMgMQorCisvKiBDaXBo
ZXIgc3VpdGUgc3RyaW5nIGZvciBQWV9TU0xfREVGQVVMVF9DSVBIRVJTPTAgKi8KKy8qICN1bmRl
ZiBQWV9TU0xfREVGQVVMVF9DSVBIRVJfU1RSSU5HICovCisKKy8qIERlZmluZSBpZiB5b3Ugd2Fu
dCB0byBidWlsZCBhbiBpbnRlcnByZXRlciB3aXRoIG1hbnkgcnVuLXRpbWUgY2hlY2tzLiAqLwor
LyogI3VuZGVmIFB5X0RFQlVHICovCisKKy8qIERlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFz
IGEgc2hhcmVkIGxpYnJhcnkuICovCisvKiAjdW5kZWYgUHlfRU5BQkxFX1NIQVJFRCAqLworCisv
KiBEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcuIFNp
cEhhc2gyNDogMSwgRk5WOiAyLAorICAgZXh0ZXJuYWxseSBkZWZpbmVkOiAwICovCisvKiAjdW5k
ZWYgUHlfSEFTSF9BTEdPUklUSE0gKi8KKworLyogYXNzdW1lIEM4OSBzZW1hbnRpY3MgdGhhdCBS
RVRTSUdUWVBFIGlzIGFsd2F5cyB2b2lkICovCisjZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorCisv
KiBEZWZpbmUgaWYgc2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIHNldHBncnAoMCwgMCkuICov
CisvKiAjdW5kZWYgU0VUUEdSUF9IQVZFX0FSRyAqLworCisvKiBEZWZpbmUgaWYgaT4+aiBmb3Ig
c2lnbmVkIGludCBpIGRvZXMgbm90IGV4dGVuZCB0aGUgc2lnbiBiaXQgd2hlbiBpIDwgMCAqLwor
LyogI3VuZGVmIFNJR05FRF9SSUdIVF9TSElGVF9aRVJPX0ZJTExTICovCisKKy8qIFRoZSBzaXpl
IG9mIGBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9E
T1VCTEUgOAorCisvKiBUaGUgc2l6ZSBvZiBgZmxvYXQnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9GTE9BVCA0CisKKy8qIFRoZSBzaXplIG9mIGBmcG9zX3QnLCBh
cyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9GUE9TX1QgMTYKKworLyog
VGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0la
RU9GX0lOVCA0CisKKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9m
LiAqLworI2RlZmluZSBTSVpFT0ZfTE9ORyA4CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGRvdWJs
ZScsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxF
IDE2CisKKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgOAorCisvKiBUaGUgc2l6ZSBvZiBgb2ZmX3Qn
LCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9PRkZfVCA4CisKKy8q
IFRoZSBzaXplIG9mIGBwaWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUg
U0laRU9GX1BJRF9UIDQKKworLyogVGhlIHNpemUgb2YgYHB0aHJlYWRfa2V5X3QnLCBhcyBjb21w
dXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9QVEhSRUFEX0tFWV9UIDQKKworLyog
VGhlIHNpemUgb2YgYHB0aHJlYWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZp
bmUgU0laRU9GX1BUSFJFQURfVCA4CisKKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1
dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NIT1JUIDIKKworLyogVGhlIHNpemUg
b2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1NJ
WkVfVCA4CisKKy8qIFRoZSBzaXplIG9mIGB0aW1lX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2Yu
ICovCisjZGVmaW5lIFNJWkVPRl9USU1FX1QgOAorCisvKiBUaGUgc2l6ZSBvZiBgdWludHB0cl90
JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfVUlOVFBUUl9UIDgK
KworLyogVGhlIHNpemUgb2YgYHZvaWQgKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNk
ZWZpbmUgU0laRU9GX1ZPSURfUCA4CisKKy8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29t
cHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCA0CisKKy8qIFRoZSBz
aXplIG9mIGBfQm9vbCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9G
X19CT09MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIg
ZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVBREVSUyAxCisKKy8qIERlZmluZSBpZiB5b3UgY2Fu
IHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy9zZWxlY3QuaD4gYW5kIDxzeXMvdGltZS5oPgorICAg
KHdoaWNoIHlvdSBjYW4ndCBvbiBTQ08gT0RUIDMuMCkuICovCisjZGVmaW5lIFNZU19TRUxFQ1Rf
V0lUSF9TWVNfVElNRSAxCisKKy8qIERlZmluZSBpZiB0YW5oKC0wLikgaXMgLTAuLCBvciBpZiBw
bGF0Zm9ybSBkb2Vzbid0IGhhdmUgc2lnbmVkIHplcm9zICovCisjZGVmaW5lIFRBTkhfUFJFU0VS
VkVTX1pFUk9fU0lHTiAxCisKKy8qIExpYnJhcnkgbmVlZGVkIGJ5IHRpbWVtb2R1bGUuYzogbGli
cnQgbWF5IGJlIG5lZWRlZCBmb3IgY2xvY2tfZ2V0dGltZSgpICovCisvKiAjdW5kZWYgVElNRU1P
RFVMRV9MSUIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBi
b3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCisjZGVmaW5lIFRJTUVfV0lUSF9TWVNf
VElNRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdXIgPHN5cy90aW1lLmg+IGRlY2xhcmVzIGBz
dHJ1Y3QgdG0nLiAqLworLyogI3VuZGVmIFRNX0lOX1NZU19USU1FICovCisKKy8qIERlZmluZSBp
ZiB5b3Ugd2FudCB0byB1c2UgY29tcHV0ZWQgZ290b3MgaW4gY2V2YWwuYy4gKi8KKy8qICN1bmRl
ZiBVU0VfQ09NUFVURURfR09UT1MgKi8KKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlYIDMs
IEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyBkZWZpbmUgX0FMTF9TT1VSQ0Ug
MQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhhdmUg
dGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIGRlZmluZSBfR05VX1NPVVJDRSAxCisj
ZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNp
Zm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIGRlZmluZSBfUE9TSVhfUFRIUkVBRF9T
RU1BTlRJQ1MgMQorI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9wLiAg
Ki8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEKKyNl
bmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNpZm5k
ZWYgX19FWFRFTlNJT05TX18KKyMgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyNlbmRpZgorCisK
Ky8qIERlZmluZSBpZiBXSU5ET1cgaW4gY3Vyc2VzLmggb2ZmZXJzIGEgZmllbGQgX2ZsYWdzLiAq
LworI2RlZmluZSBXSU5ET1dfSEFTX0ZMQUdTIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGRv
Y3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLworI2RlZmluZSBXSVRI
X0RPQ19TVFJJTkdTIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgaW4gRFRy
YWNlIHN1cHBvcnQgKi8KKy8qICN1bmRlZiBXSVRIX0RUUkFDRSAqLworCisvKiBEZWZpbmUgaWYg
eW91IHdhbnQgdG8gdXNlIHRoZSBuZXctc3R5bGUgKE9wZW5zdGVwLCBSaGFwc29keSwgTWFjT1Mp
IGR5bmFtaWMKKyAgIGxpbmtlciAoZHlsZCkgaW5zdGVhZCBvZiB0aGUgb2xkLXN0eWxlIChOZXh0
U3RlcCkgZHluYW1pYyBsaW5rZXIgKHJsZCkuCisgICBEeWxkIGlzIG5lY2Vzc2FyeSB0byBzdXBw
b3J0IGZyYW1ld29ya3MuICovCisvKiAjdW5kZWYgV0lUSF9EWUxEICovCisKKy8qIERlZmluZSB0
byAxIGlmIGxpYmludGwgaXMgbmVlZGVkIGZvciBsb2NhbGUgZnVuY3Rpb25zLiAqLworLyogI3Vu
ZGVmIFdJVEhfTElCSU5UTCAqLworCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gcHJvZHVjZSBh
biBPcGVuU3RlcC9SaGFwc29keSBmcmFtZXdvcmsgKHNoYXJlZAorICAgbGlicmFyeSBwbHVzIGFj
Y2Vzc29yeSBmaWxlcykuICovCisvKiAjdW5kZWYgV0lUSF9ORVhUX0ZSQU1FV09SSyAqLworCisv
KiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBpbiBQeXRob24tc3BlY2lmaWMgbWFsbG9j
cyAqLworI2RlZmluZSBXSVRIX1BZTUFMTE9DIDEKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHB5
bWFsbG9jIHRvIGJlIGRpc2FibGVkIHdoZW4gcnVubmluZyB1bmRlciB2YWxncmluZCAqLworLyog
I3VuZGVmIFdJVEhfVkFMR1JJTkQgKi8KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAx
IGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZp
Y2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4g
Ki8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9f
QklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNl
CisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAq
LworIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSBpZiBhcml0aG1ldGljIGlzIHN1YmplY3Qg
dG8geDg3LXN0eWxlIGRvdWJsZSByb3VuZGluZyBpc3N1ZSAqLworLyogI3VuZGVmIFg4N19ET1VC
TEVfUk9VTkRJTkcgKi8KKworLyogRGVmaW5lIG9uIE9wZW5CU0QgdG8gYWN0aXZhdGUgYWxsIGxp
YnJhcnkgZmVhdHVyZXMgKi8KKy8qICN1bmRlZiBfQlNEX1NPVVJDRSAqLworCisvKiBEZWZpbmUg
b24gRGFyd2luIHRvIGFjdGl2YXRlIGFsbCBsaWJyYXJ5IGZlYXR1cmVzICovCisjZGVmaW5lIF9E
QVJXSU5fQ19TT1VSQ0UgMQorCisvKiBUaGlzIG11c3QgYmUgc2V0IHRvIDY0IG9uIHNvbWUgc3lz
dGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0LiAqLworI2RlZmluZSBfRklMRV9PRkZT
RVRfQklUUyA2NAorCisvKiBEZWZpbmUgb24gTGludXggdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkg
ZmVhdHVyZXMgKi8KKyNkZWZpbmUgX0dOVV9TT1VSQ0UgMQorCisvKiBEZWZpbmUgdG8gaW5jbHVk
ZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MgKi8KKy8qICN1bmRlZiBfSU5DTFVERV9fU1REQ19BMV9T
T1VSQ0UgKi8KKworLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gc29tZSBzeXN0ZW1zIHRvIGVu
YWJsZSBsYXJnZSBmaWxlIHN1cHBvcnQuICovCisjZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDEK
KworLyogVGhpcyBtdXN0IGJlIGRlZmluZWQgb24gQUlYIHN5c3RlbXMgdG8gZW5hYmxlIGxhcmdl
IGZpbGUgc3VwcG9ydC4gKi8KKy8qICN1bmRlZiBfTEFSR0VfRklMRVMgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgb24gTUlOSVguICovCisvKiAjdW5kZWYgX01JTklYICovCisKKy8qIERlZmluZSBv
biBOZXRCU0QgdG8gYWN0aXZhdGUgYWxsIGxpYnJhcnkgZmVhdHVyZXMgKi8KKyNkZWZpbmUgX05F
VEJTRF9TT1VSQ0UgMQorCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHBy
b3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLwor
LyogI3VuZGVmIF9QT1NJWF8xX1NPVVJDRSAqLworCisvKiBEZWZpbmUgdG8gYWN0aXZhdGUgZmVh
dHVyZXMgZnJvbSBJRUVFIFN0ZHMgMTAwMy4xLTIwMDggKi8KKyNkZWZpbmUgX1BPU0lYX0NfU09V
UkNFIDIwMDgwOUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9y
IGBzdGF0JyBhbmQgb3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisvKiAjdW5kZWYgX1BPU0lYX1NP
VVJDRSAqLworCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgUE9TSVggdGhyZWFkcywgYW5kIHlvdXIg
c3lzdGVtIGRvZXMgbm90IGRlZmluZSB0aGF0LiAqLworLyogI3VuZGVmIF9QT1NJWF9USFJFQURT
ICovCisKKy8qIGZyYW1ld29yayBuYW1lICovCisjZGVmaW5lIF9QWVRIT05GUkFNRVdPUksgIiIK
KworLyogRGVmaW5lIHRvIGZvcmNlIHVzZSBvZiB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywg
YW5kIG90aGVyIGZ1bmN0aW9ucyAqLworLyogI3VuZGVmIF9SRUVOVFJBTlQgKi8KKworLyogRGVm
aW5lIHRvIHRoZSBsZXZlbCBvZiBYL09wZW4gdGhhdCB5b3VyIHN5c3RlbSBzdXBwb3J0cyAqLwor
I2RlZmluZSBfWE9QRU5fU09VUkNFIDcwMAorCisvKiBEZWZpbmUgdG8gYWN0aXZhdGUgVW5peDk1
LWFuZC1lYXJsaWVyIGZlYXR1cmVzICovCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQg
MQorCisvKiBEZWZpbmUgb24gRnJlZUJTRCB0byBhY3RpdmF0ZSBhbGwgbGlicmFyeSBmZWF0dXJl
cyAqLworI2RlZmluZSBfX0JTRF9WSVNJQkxFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdHlwZSBg
Y2hhcicgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCisjaWZuZGVm
IF9fQ0hBUl9VTlNJR05FRF9fCisvKiAjIHVuZGVmIF9fQ0hBUl9VTlNJR05FRF9fICovCisjZW5k
aWYKKworLyogRGVmaW5lIHRvICdsb25nJyBpZiA8dGltZS5oPiBkb2Vzbid0IGRlZmluZS4gKi8K
Ky8qICN1bmRlZiBjbG9ja190ICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiBgY29uc3QnIGRv
ZXMgbm90IGNvbmZvcm0gdG8gQU5TSSBDLiAqLworLyogI3VuZGVmIGNvbnN0ICovCisKKy8qIERl
ZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3Vu
ZGVmIGdpZF90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMg
bm90IGRlZmluZS4gKi8KKy8qICN1bmRlZiBtb2RlX3QgKi8KKworLyogRGVmaW5lIHRvIGBsb25n
IGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgb2Zm
X3QgKi8KKworLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVm
aW5lLiAqLworLyogI3VuZGVmIHBpZF90ICovCisKKy8qIERlZmluZSB0byBlbXB0eSBpZiB0aGUg
a2V5d29yZCBkb2VzIG5vdCB3b3JrLiAqLworLyogI3VuZGVmIHNpZ25lZCAqLworCisvKiBEZWZp
bmUgdG8gYHVuc2lnbmVkIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICov
CisvKiAjdW5kZWYgc2l6ZV90ICovCisKKy8qIERlZmluZSB0byBgaW50JyBpZiA8c3lzL3NvY2tl
dC5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiAjdW5kZWYgc29ja2xlbl90ICovCisKKy8qIERl
ZmluZSB0byBgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXNuJ3QgZGVmaW5lLiAqLworLyogI3Vu
ZGVmIHVpZF90ICovCisKKworLyogRGVmaW5lIHRoZSBtYWNyb3MgbmVlZGVkIGlmIG9uIGEgVW5p
eFdhcmUgNy54IHN5c3RlbS4gKi8KKyNpZiBkZWZpbmVkKF9fVVNMQ19fKSAmJiBkZWZpbmVkKF9f
U0NPX1ZFUlNJT05fXykKKyNkZWZpbmUgU1RSSUNUX1NZU1ZfQ1VSU0VTIC8qIERvbid0IHVzZSBu
Y3Vyc2VzIGV4dGVuc2lvbnMgKi8KKyNlbmRpZgorCisjZW5kaWYgLypQeV9QWUNPTkZJR19IKi8K
KwotLSAKMi4yMC4xCgoKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 12:10:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 12:10:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCNAZ-0001mi-9w; Mon, 23 Sep 2019 12:10:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ZR6B=XS=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCNAY-0001md-B4
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 12:10:18 +0000
X-Inumbo-ID: 192b35c8-ddfb-11e9-95fc-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 192b35c8-ddfb-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 12:10:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id CD6331055DA;
 Mon, 23 Sep 2019 14:10:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UiZ18NU4g-fD; Mon, 23 Sep 2019 14:10:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id AADDE1055B2
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 14:10:14 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 14:10:14 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Mon, 23 Sep 2019 14:09:48 +0200
Message-ID: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/4] Introduce inittab in Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2l0aGluIHRoZSBlYWNoIHN0YWdlIHRoZSBkZXZlbG9wZXIgY2FuIHByaW9yaXRpemUgdGhlIGlu
aXQgZnVuY3Rpb24gdG8gbWFpbnRhaW4KYSBjZXJ0YWluIG9yZGVyIG9mIGV4ZWN1dGlvbiBiZXR3
ZWVuIHRoZSBmdW5jdGlvbi4KClRoZSBvcmRlciBvZiBib290IGluIFVuaWtyYWZ0IHdvdWxkIGJl
CjEpIFN5c3RlbSBjb25zdHJ1Y3RvciAtIFJlZ2lzdGVyIAoyKSBpbml0IHRhYmxlCjMpIFVuaWty
YWZ0IGFwcGxpY2F0aW9uIGJhbm5lci4KNCkgQXBwbGljYXRpb24gY29uc3RydWN0b3IgdGFibGUu
CgpDaGFuZ2VzIHNpbmNlIHYxOgotIEluY2x1ZGUgbGljZW5zZSBpbiBpbml0LmgKLSBBZGQgZXJy
b3IgbWVzc2FnZQoKClNoYXJhbiBTYW50aGFuYW0gKDMpOgogIGluY2x1ZGUvdWs6IEludHJvZHVj
ZSBpbml0IHRhYmxlCiAgcGxhdC8qOiBTdXBwb3J0IC51a19pbml0dGFiXyBzZWN0aW9uCiAgbGli
L3VrYm9vdDogSXRlcmF0ZSB0aHJvdWdoIHRoZSBpbml0dGFiCgpTaW1vbiBLdWVuemVyICgxKToK
ICBsaWIvdWtib290OiBBcHBsaWNhdGlvbiBjb25zdHJ1Y3RvcnMgcmlnaHQgYmVmb3JlIGNhbGxp
bmcgYXBwbGljYXRpb24KCiBpbmNsdWRlL3VrL2luaXQuaCAgICAgICAgICAgICAgICB8IDEwNCAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi91a2Jvb3QvYm9vdC5j
ICAgICAgICAgICAgICAgIHwgIDY5ICsrKysrKysrKysrKysrKysrKystLS0tLS0tCiBwbGF0L2Nv
bW1vbi9pbmNsdWRlL2NvbW1vbi5sZHMuaCB8ICAgOCArKysKIHBsYXQva3ZtL2FybS9saW5rNjQu
bGRzLlMgICAgICAgIHwgICAyICsKIHBsYXQva3ZtL3g4Ni9saW5rNjQubGRzLlMgICAgICAgIHwg
ICAyICsKIHBsYXQvbGludXh1L2FybS9saW5rLmxkcy5TICAgICAgIHwgICAyICsKIHBsYXQvbGlu
dXh1L3g4Ni9saW5rNjQubGRzLlMgICAgIHwgICAyICsKIHBsYXQveGVuL2FybS9saW5rMzIubGRz
LlMgICAgICAgIHwgICAyICsKIHBsYXQveGVuL3g4Ni9saW5rNjQubGRzLlMgICAgICAgIHwgICAy
ICsKIDkgZmlsZXMgY2hhbmdlZCwgMTc0IGluc2VydGlvbnMoKyksIDE5IGRlbGV0aW9ucygtKQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdWsvaW5pdC5oCgotLSAKMi43LjQKCgpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFp
bGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 12:10:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 12:10:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCNAc-0001n9-BX; Mon, 23 Sep 2019 12:10:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ZR6B=XS=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCNAb-0001n2-SH
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 12:10:21 +0000
X-Inumbo-ID: 1c60e16e-ddfb-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1c60e16e-ddfb-11e9-b299-bc764e2007e4;
 Mon, 23 Sep 2019 12:10:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 27351F2015;
 Mon, 23 Sep 2019 14:10:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id R9NF_Xxxf2Qg; Mon, 23 Sep 2019 14:10:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EB736F2012
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 14:10:16 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 14:10:14 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Mon, 23 Sep 2019 14:09:50 +0200
Message-ID: <20190923120952.25938-3-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 2/4] include/uk: Introduce init
 table
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBhdGNoIGludHJvZHVjZXMgdGhlIGludGVyZmFjZSBmb3IgdGhlIGluaXR0YWIuIFRoZSBw
YXRjaCBwcm92aWRlcwppbXBsZW1lbnRhdGlvbiB0byBncm91cCB0aGUgaW5pdCBmdW5jdGlvbiBp
bnRvIHRoZSByZXNwZWN0aXZlIGxpbmtlcgpzZWN0aW9uLgoKU2lnbmVkLW9mZi1ieTogU2hhcmFu
IFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogaW5jbHVkZS91ay9p
bml0LmggfCA5OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgOTggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IGluY2x1ZGUvdWsvaW5pdC5oCgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9pbml0Lmgg
Yi9pbmNsdWRlL3VrL2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
ZWE0MTI3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91ay9pbml0LmgKQEAgLTAsMCArMSw5
OCBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAq
IEF1dGhvcnM6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pgor
ICoKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBF
WFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworI2lmbmRlZiBfVUtfSU5JVF9I
CisjZGVmaW5lIF9VS19JTklUX0gKKworI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgorI2luY2x1ZGUg
PHVrL2Vzc2VudGlhbHMuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNl
bmRpZgorCit0eXBlZGVmIGludCAoKnVrX2luaXRfdCkodm9pZCk7CisKKyNkZWZpbmUgSU5JVFRB
Ql9TVFJfVkFSKGxpYm5hbWUsIGZuLCBiYXNlLCBwcmlvKSBsaWJuYW1lICMjIGZuICMjIGJhc2Ug
IyMgcHJpbworI2RlZmluZSBJTklUVEFCX1NFQ1RJT04oYmFzZSwgcHJpbykgIC51a19pbml0dGFi
XyAjIyBiYXNlICMjIHByaW8KKyNkZWZpbmUgSU5JVFRBQl9TRUNUSU9OX05BTUUobmFtZSkgU1RS
SU5HSUZZKG5hbWUpCisKKyNkZWZpbmUgX19pbml0dGFiKGxpYm5hbWUsIGZuLCBiYXNlLCBwcmlv
KQkJCQlcCisJc3RhdGljICBjb25zdCBfX3VzZWQgX19zZWN0aW9uKElOSVRUQUJfU0VDVElPTl9O
QU1FKAkJXAorCQkJCQlJTklUVEFCX1NFQ1RJT04oYmFzZSwgcHJpbykpCVwKKwkJCQkgICAgICAp
CQkJCQlcCisJCXVrX2luaXRfdCBJTklUVEFCX1NUUl9WQVIobGlibmFtZSwgZm4sIGJhc2UsIHBy
aW8pID0gZm4KKworLyoqCisgKiBEZWZpbmUgYSBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLiBBdCB0
aGlzIHBvaW50IGluIHRpbWUgc29tZSBwbGF0Zm9ybQorICogY29tcG9uZW50IG1heSBub3QgYmUg
aW5pdGlhbGl6ZWQsIHNvIGl0IHdpc2UgdG8gaW5pdGlhbGl6ZXMgdGhvc2UgY29tcG9uZW50Cisg
KiB0byBpbml0aWFsaXplZC4KKyAqLworI2RlZmluZSB1a19lYXJseV9pbml0Y2FsbF9wcmlvKGZu
LCBwcmlvKSAgX19pbml0dGFiKExJQk5BTUUsIGZuLCAxLCBwcmlvKQorLyoqCisgKiBEZWZpbmUg
YSBzdGFnZSBmb3IgcGxhdGZvcm0gaW5pdGlhbGl6YXRpb24uIFBsYXRmb3JtIGF0IHRoaXMgcG9p
bnQgcmVhZAorICogYWxsIHRoZSBkZXZpY2UgYW5kIGRldmljZSBhcmUgaW5pdGlhbGl6ZWQuCisg
Ki8KKyNkZWZpbmUgdWtfcGxhdF9pbml0Y2FsbF9wcmlvKGZuLCBwcmlvKSAgX19pbml0dGFiKExJ
Qk5BTUUsIGZuLCAyLCBwcmlvKQorLyoqCisgKiBEZWZpbmUgYSBzdGFnZSBmb3IgcGVyZm9ybWlu
ZyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLiBUaGlzIGxpYnJhcnkKKyAqIGluaXRpYWxpemF0aW9u
IGlzIHBlcmZvcm1lZCBhZnRlciB0aGUgcGxhdGZvcm0gaXMgY29tcGxldGVseSBpbml0aWFsaXpl
ZC4KKyAqLworI2RlZmluZSB1a19saWJfaW5pdGNhbGxfcHJpbyhmbiwgcHJpbykJX19pbml0dGFi
KExJQk5BTUUsIGZuLCAzLCBwcmlvKQorLyoqCisgKiBEZWZpbmUgYSBzdGFnZSBmb3IgZmlsZXN5
c3RlbSBpbml0aWFsaXphdGlvbi4KKyAqLworI2RlZmluZSB1a19yb290ZnNfaW5pdGNhbGxfcHJp
byhmbiwgcHJpbykgX19pbml0dGFiKExJQk5BTUUsIGZuLCA0LCBwcmlvKQorLyoqCisgKiBEZWZp
bmUgYSBzdGFnZSBmb3IgZGV2aWNlIGluaXRpYWxpemF0aW9uCisgKi8KKyNkZWZpbmUgdWtfc3lz
X2luaXRjYWxsX3ByaW8oZm4sIHByaW8pIF9faW5pdHRhYihMSUJOQU1FLCBmbiwgNSwgcHJpbykK
Ky8qKgorICogRGVmaW5lIGEgc3RhZ2UgZm9yIGFwcGxpY2F0aW9uIHByZS1pbml0aWFsaXphdGlv
bgorICovCisjZGVmaW5lIHVrX2xhdGVfaW5pdGNhbGxfcHJpbyhmbiwgcHJpbykgIF9faW5pdHRh
YihMSUJOQU1FLCBmbiwgNiwgcHJpbykKKworLyoqCisgKiBTaW1pbGFyIGludGVyZmFjZSB3aXRo
b3V0IHByaW9yaXR5LgorICovCisjZGVmaW5lIHVrX2Vhcmx5X2luaXRjYWxsKGZuKSAgICAgdWtf
ZWFybHlfaW5pdGNhbGxfcHJpbyhmbiwgOSkKKyNkZWZpbmUgdWtfcGxhdF9pbml0Y2FsbChmbikg
ICAgICB1a19wbGF0X2luaXRjYWxsX3ByaW8oZm4sIDkpCisjZGVmaW5lIHVrX2xpYl9pbml0Y2Fs
bChmbikgICAgICAgdWtfbGliX2luaXRjYWxsX3ByaW8oZm4sIDkpCisjZGVmaW5lIHVrX3Jvb3Rm
c19pbml0Y2FsbChmbikgICAgdWtfcm9vdGZzX2luaXRjYWxsX3ByaW8oZm4sIDkpCisjZGVmaW5l
IHVrX3N5c19pbml0Y2FsbChmbikgICAgICAgdWtfc3lzX2luaXRjYWxsX3ByaW8oZm4sIDkpCisj
ZGVmaW5lIHVrX2xhdGVfaW5pdGNhbGwoZm4pICAgICAgdWtfbGF0ZV9pbml0Y2FsbF9wcmlvKGZu
LCA5KQorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwor
I2VuZGlmIC8qIF9VS19JTklUX0ggKi8KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 12:10:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 12:10:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCNAe-0001nh-DA; Mon, 23 Sep 2019 12:10:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ZR6B=XS=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCNAd-0001nV-BH
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 12:10:23 +0000
X-Inumbo-ID: 1b2dcc9e-ddfb-11e9-95fc-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1b2dcc9e-ddfb-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 12:10:18 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 15FB5F2013;
 Mon, 23 Sep 2019 14:10:17 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Rg3M-Qwt8MtW; Mon, 23 Sep 2019 14:10:16 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E1677F2012
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 14:10:14 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 14:10:14 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Mon, 23 Sep 2019 14:09:49 +0200
Message-ID: <20190923120952.25938-2-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/4] lib/ukboot: Application
 constructors right before calling application
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+CgpwcmVpbml0IGFu
ZCBpbml0IHRhYmxlcyBhcmUgcGFydCBvZiBwb3J0ZWQgbGlicmFyaWVzIGFuZCBhcHBsaWNhdGlv
bnMuClNpbmNlIHRoZXkgYXJlIG9yaWdpbmFsbHkgcnVuIGluIHVzZXIgc3BhY2Ugb24gTGludXgg
b3IgQlNELCB0aGV5CmV4cGVjdCBmdWxseSBpbml0aWFsaXplZCBrZXJuZWwgbGF5ZXJzLiBUaGUg
Y29uc3RydWN0b3IgZnVuY3Rpb25zCmxpc3RlZCBpbiB0aG9zZSB0YWJsZXMgY291bGQgY3JlYXRl
IHRocmVhZHMsIGFsbG9jYXRlIG1lbW9yeSwgb3IKaW50ZXJhY3Qgd2l0aCB0aGUgVkZTLCBldGMu
ClRoaXMgcGF0Y2ggbW92ZXMgY2FsbGluZyB0aG9zZSBjb25zdHJ1Y3RvcnMgYXQgdGhlIGxhdGVz
dCBwb3NzaWJsZSBwb2ludC4KClNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1
ZW56ZXJAbmVjbGFiLmV1PgotLS0KIGxpYi91a2Jvb3QvYm9vdC5jIHwgNTIgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDMwIGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi91a2Jv
b3QvYm9vdC5jIGIvbGliL3VrYm9vdC9ib290LmMKaW5kZXggM2I4ZDY0MS4uN2ZiMDkwOCAxMDA2
NDQKLS0tIGEvbGliL3VrYm9vdC9ib290LmMKKysrIGIvbGliL3VrYm9vdC9ib290LmMKQEAgLTgy
LDI4ICs4Miw2IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJnKQogCWlu
dCByZXQ7CiAJc3RydWN0IHRocmVhZF9tYWluX2FyZyAqdG1hID0gYXJnOwogCi0JdWtfcHJfaW5m
bygiUHJlLWluaXQgdGFibGUgYXQgJXAgLSAlcFxuIiwKLQkJICAgX19wcmVpbml0X2FycmF5X3N0
YXJ0LCAmX19wcmVpbml0X2FycmF5X2VuZCk7Ci0JdWtfY3Rvcl9mb3JlYWNoKF9fcHJlaW5pdF9h
cnJheV9zdGFydCwgX19wcmVpbml0X2FycmF5X2VuZCwgaSkgewotCQlpZiAoX19wcmVpbml0X2Fy
cmF5X3N0YXJ0W2ldKSB7Ci0JCQl1a19wcl9kZWJ1ZygiQ2FsbCBwcmUtaW5pdCBjb25zdHJ1Y3Rv
ciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5cbiIsCi0JCQkJICAgIGksICZfX3ByZWluaXRfYXJy
YXlfc3RhcnRbaV0sCi0JCQkJICAgIF9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSk7Ci0JCQlfX3By
ZWluaXRfYXJyYXlfc3RhcnRbaV0oKTsKLQkJfQotCX0KLQotCXVrX3ByX2luZm8oIkNvbnN0cnVj
dG9yIHRhYmxlIGF0ICVwIC0gJXBcbiIsCi0JCQlfX2luaXRfYXJyYXlfc3RhcnQsICZfX2luaXRf
YXJyYXlfZW5kKTsKLQl1a19jdG9yX2ZvcmVhY2goX19pbml0X2FycmF5X3N0YXJ0LCBfX2luaXRf
YXJyYXlfZW5kLCBpKSB7Ci0JCWlmIChfX2luaXRfYXJyYXlfc3RhcnRbaV0pIHsKLQkJCXVrX3By
X2RlYnVnKCJDYWxsIGNvbnN0cnVjdG9yIChlbnRyeSAlZCAoJXApOiAlcCgpKS4uLlxuIiwKLQkJ
CQkJaSwgJl9faW5pdF9hcnJheV9zdGFydFtpXSwKLQkJCQkJX19pbml0X2FycmF5X3N0YXJ0W2ld
KTsKLQkJCV9faW5pdF9hcnJheV9zdGFydFtpXSgpOwotCQl9Ci0JfQotCiAjaWZkZWYgQ09ORklH
X0xJQlVLQlVTCiAJdWtfcHJfaW5mbygiSW5pdGlhbGl6ZSBidXMgaGFuZGxlcnMuLi5cbiIpOwog
CXVrX2J1c19pbml0X2FsbCh1a19hbGxvY19nZXRfZGVmYXVsdCgpKTsKQEAgLTEyOSw2ICsxMDcs
MzYgQEAgc3RhdGljIHZvaWQgbWFpbl90aHJlYWRfZnVuYyh2b2lkICphcmcpCiAJcHJpbnRmKCIl
MzVzXG4iLAogCSAgICAgICBTVFJJTkdJRlkoVUtfQ09ERU5BTUUpICIgIiBTVFJJTkdJRlkoVUtf
RlVMTFZFUlNJT04pKTsKICNlbmRpZgorCS8qCisJICogQXBwbGljYXRpb24KKwkgKgorCSAqIFdl
IGFyZSBjYWxsaW5nIHRoZSBhcHBsaWNhdGlvbiBjb25zdHJ1Y3RvcnMgcmlnaHQgYmVmb3JlIGNh
bGxpbmcKKwkgKiB0aGUgYXBwbGljYXRpb24ncyBtYWluKCkuIEFsbCBvZiBvdXIgVW5pa3JhZnQg
c3lzdGVtcywgVkZTLAorCSAqIG5ldHdvcmtpbmcgc3RhY2sgaXMgaW5pdGlhbGl6ZWQgYXQgdGhp
cyBwb2ludC4gVGhpcyB3YXkgd2UgY2xvc2VseQorCSAqIG1pbWljIHdoYXQgYSByZWd1bGFyIHVz
ZXIgYXBwbGljYXRpb24gKGUuZy4sIEJTRCwgTGludXgpIHdvdWxkIGV4cGVjdAorCSAqIGZyb20g
aXRzIE9TIGJlaW5nIGluaXRpYWxpemVkLgorCSAqLworCXVrX3ByX2luZm8oIlByZS1pbml0IHRh
YmxlIGF0ICVwIC0gJXBcbiIsCisJCSAgIF9fcHJlaW5pdF9hcnJheV9zdGFydCwgJl9fcHJlaW5p
dF9hcnJheV9lbmQpOworCXVrX2N0b3JfZm9yZWFjaChfX3ByZWluaXRfYXJyYXlfc3RhcnQsIF9f
cHJlaW5pdF9hcnJheV9lbmQsIGkpIHsKKwkJaWYgKF9fcHJlaW5pdF9hcnJheV9zdGFydFtpXSkg
eworCQkJdWtfcHJfZGVidWcoIkNhbGwgcHJlLWluaXQgY29uc3RydWN0b3IgKGVudHJ5ICVkICgl
cCk6ICVwKCkpLi4uXG4iLAorCQkJCSAgICBpLCAmX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldLAor
CQkJCSAgICBfX3ByZWluaXRfYXJyYXlfc3RhcnRbaV0pOworCQkJX19wcmVpbml0X2FycmF5X3N0
YXJ0W2ldKCk7CisJCX0KKwl9CisKKwl1a19wcl9pbmZvKCJDb25zdHJ1Y3RvciB0YWJsZSBhdCAl
cCAtICVwXG4iLAorCQkJX19pbml0X2FycmF5X3N0YXJ0LCAmX19pbml0X2FycmF5X2VuZCk7CisJ
dWtfY3Rvcl9mb3JlYWNoKF9faW5pdF9hcnJheV9zdGFydCwgX19pbml0X2FycmF5X2VuZCwgaSkg
eworCQlpZiAoX19pbml0X2FycmF5X3N0YXJ0W2ldKSB7CisJCQl1a19wcl9kZWJ1ZygiQ2FsbCBj
b25zdHJ1Y3RvciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5cbiIsCisJCQkJCWksICZfX2luaXRf
YXJyYXlfc3RhcnRbaV0sCisJCQkJCV9faW5pdF9hcnJheV9zdGFydFtpXSk7CisJCQlfX2luaXRf
YXJyYXlfc3RhcnRbaV0oKTsKKwkJfQorCX0KIAogCXVrX3ByX2luZm8oIkNhbGxpbmcgbWFpbigl
ZCwgWyIsIHRtYS0+YXJnYyk7CiAJZm9yIChpID0gMDsgaSA8IHRtYS0+YXJnYzsgKytpKSB7Ci0t
IAoyLjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 12:10:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 12:10:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCNAj-0001oU-Ew; Mon, 23 Sep 2019 12:10:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ZR6B=XS=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCNAi-0001oJ-B2
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 12:10:28 +0000
X-Inumbo-ID: 1d174f31-ddfb-11e9-95fc-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1d174f31-ddfb-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 12:10:22 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 28B33F2013;
 Mon, 23 Sep 2019 14:10:21 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id RIDm4QTH_evV; Mon, 23 Sep 2019 14:10:21 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 01113F2012
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 14:10:19 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 14:10:15 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Mon, 23 Sep 2019 14:09:51 +0200
Message-ID: <20190923120952.25938-4-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 3/4] plat/*: Support .uk_inittab_
 section
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBsYXRmb3JtIGxpbmtlciBzY3JpcHQgY3JlYXRlIGEgc2luZ2xlIHNlY3Rpb24gdGhhdCBh
Y2N1bXVsYXRlIGFsbAp0aGUgaW5pdCBmdW5jdGlvbiBiZWxvbmdpbmcgdG8gYSBzcGVjaWZpYyBz
ZWN0aW9uLgoKU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5h
bUBuZWNsYWIuZXU+Ci0tLQogcGxhdC9jb21tb24vaW5jbHVkZS9jb21tb24ubGRzLmggfCA4ICsr
KysrKysrCiBwbGF0L2t2bS9hcm0vbGluazY0Lmxkcy5TICAgICAgICB8IDIgKysKIHBsYXQva3Zt
L3g4Ni9saW5rNjQubGRzLlMgICAgICAgIHwgMiArKwogcGxhdC9saW51eHUvYXJtL2xpbmsubGRz
LlMgICAgICAgfCAyICsrCiBwbGF0L2xpbnV4dS94ODYvbGluazY0Lmxkcy5TICAgICB8IDIgKysK
IHBsYXQveGVuL2FybS9saW5rMzIubGRzLlMgICAgICAgIHwgMiArKwogcGxhdC94ZW4veDg2L2xp
bms2NC5sZHMuUyAgICAgICAgfCAyICsrCiA3IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMo
KykKCmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2NvbW1vbi5sZHMuaCBiL3BsYXQv
Y29tbW9uL2luY2x1ZGUvY29tbW9uLmxkcy5oCmluZGV4IGIwNmRkOTYuLjk1OGJlMWUgMTAwNjQ0
Ci0tLSBhL3BsYXQvY29tbW9uL2luY2x1ZGUvY29tbW9uLmxkcy5oCisrKyBiL3BsYXQvY29tbW9u
L2luY2x1ZGUvY29tbW9uLmxkcy5oCkBAIC05NCw2ICs5NCwxNCBAQAogCX0JCQkJCQkJCVwKIAl1
a19jdG9ydGFiX2VuZCA9IC47CiAKKyNkZWZpbmUgSU5JVFRBQl9TRUNUSU9OCQkJCQkJCVwKKwl1
a19pbml0dGFiX3N0YXJ0ID0gLjsJCQkJCQlcCisJLnVrX2luaXR0YWIgOgkJCQkJCQlcCisJewkJ
CQkJCQkJXAorCQlLRUVQKCooU09SVF9CWV9OQU1FKC51a19pbml0dGFiX1sxLTZdWzAtOV0pKSkJ
CVwKKwl9CQkJCQkJCQlcCisJdWtfaW5pdHRhYl9lbmQgPSAuOworCiAjZGVmaW5lIFRMU19TRUNU
SU9OUwkJCQkJCQlcCiAJLiA9IEFMSUdOKDB4OCk7CQkJCQkJCVwKIAlfdGxzX3N0YXJ0ID0gLjsJ
CQkJCQkJXApkaWZmIC0tZ2l0IGEvcGxhdC9rdm0vYXJtL2xpbms2NC5sZHMuUyBiL3BsYXQva3Zt
L2FybS9saW5rNjQubGRzLlMKaW5kZXggYjA3YTg5Ny4uOGZlM2FkOCAxMDA2NDQKLS0tIGEvcGxh
dC9rdm0vYXJtL2xpbms2NC5sZHMuUworKysgYi9wbGF0L2t2bS9hcm0vbGluazY0Lmxkcy5TCkBA
IC03Myw2ICs3Myw4IEBAIFNFQ1RJT05TIHsKIAogCUNUT1JUQUJfU0VDVElPTgogCisJSU5JVFRB
Ql9TRUNUSU9OCisKIAkvKiBSZWFkLW9ubHkgZGF0YSAqLwogCS4gPSBBTElHTihfX1BBR0VfU0la
RSk7CiAJX3JvZGF0YSA9IC47CmRpZmYgLS1naXQgYS9wbGF0L2t2bS94ODYvbGluazY0Lmxkcy5T
IGIvcGxhdC9rdm0veDg2L2xpbms2NC5sZHMuUwppbmRleCA2MTAzZmMyLi4xZjY2MTA0IDEwMDY0
NAotLS0gYS9wbGF0L2t2bS94ODYvbGluazY0Lmxkcy5TCisrKyBiL3BsYXQva3ZtL3g4Ni9saW5r
NjQubGRzLlMKQEAgLTQ4LDYgKzQ4LDggQEAgU0VDVElPTlMKIAogCUNUT1JUQUJfU0VDVElPTgog
CisJSU5JVFRBQl9TRUNUSU9OCisKIAkvKiBSZWFkLW9ubHkgZGF0YSAqLwogCS4gPSBBTElHTihf
X1BBR0VfU0laRSk7CiAJX3JvZGF0YSA9IC47CmRpZmYgLS1naXQgYS9wbGF0L2xpbnV4dS9hcm0v
bGluay5sZHMuUyBiL3BsYXQvbGludXh1L2FybS9saW5rLmxkcy5TCmluZGV4IDVjOWE0ZjMuLmYy
MGNjN2MgMTAwNjQ0Ci0tLSBhL3BsYXQvbGludXh1L2FybS9saW5rLmxkcy5TCisrKyBiL3BsYXQv
bGludXh1L2FybS9saW5rLmxkcy5TCkBAIC0zLDUgKzMsNyBAQAogU0VDVElPTlMKIHsKIAlDVE9S
VEFCX1NFQ1RJT04KKworCUlOSVRUQUJfU0VDVElPTgogfQogSU5TRVJUIEJFRk9SRSAucm9kYXRh
CmRpZmYgLS1naXQgYS9wbGF0L2xpbnV4dS94ODYvbGluazY0Lmxkcy5TIGIvcGxhdC9saW51eHUv
eDg2L2xpbms2NC5sZHMuUwppbmRleCBhNmE1NmFkLi44MDEyMDA4IDEwMDY0NAotLS0gYS9wbGF0
L2xpbnV4dS94ODYvbGluazY0Lmxkcy5TCisrKyBiL3BsYXQvbGludXh1L3g4Ni9saW5rNjQubGRz
LlMKQEAgLTUsNiArNSw4IEBAIFNFQ1RJT05TCiAJRVhDRVBUSU9OX1NFQ1RJT05TCiAKIAlDVE9S
VEFCX1NFQ1RJT04KKworCUlOSVRUQUJfU0VDVElPTgogfQogSU5TRVJUIEJFRk9SRSAucm9kYXRh
CiAKZGlmZiAtLWdpdCBhL3BsYXQveGVuL2FybS9saW5rMzIubGRzLlMgYi9wbGF0L3hlbi9hcm0v
bGluazMyLmxkcy5TCmluZGV4IDM3MzdkMWMuLjMwYzI5YWIgMTAwNjQ0Ci0tLSBhL3BsYXQveGVu
L2FybS9saW5rMzIubGRzLlMKKysrIGIvcGxhdC94ZW4vYXJtL2xpbmszMi5sZHMuUwpAQCAtNTMs
NiArNTMsOCBAQCBTRUNUSU9OUwogCiAJQ1RPUlRBQl9TRUNUSU9OCiAKKwlJTklUVEFCX1NFQ1RJ
T04KKwogCS8qIFJlYWQtb25seSBkYXRhICovCiAJX3JvZGF0YSA9IC47CiAJLnJvZGF0YSA6CmRp
ZmYgLS1naXQgYS9wbGF0L3hlbi94ODYvbGluazY0Lmxkcy5TIGIvcGxhdC94ZW4veDg2L2xpbms2
NC5sZHMuUwppbmRleCBmN2U1M2ZlLi4zZTE2YjNiIDEwMDY0NAotLS0gYS9wbGF0L3hlbi94ODYv
bGluazY0Lmxkcy5TCisrKyBiL3BsYXQveGVuL3g4Ni9saW5rNjQubGRzLlMKQEAgLTQ2LDYgKzQ2
LDggQEAgU0VDVElPTlMKIAogCUNUT1JUQUJfU0VDVElPTgogCisJSU5JVFRBQl9TRUNUSU9OCisK
IAlfcm9kYXRhID0gLjsKIAkucm9kYXRhIDogewogCQkqKC5yb2RhdGEpCi0tIAoyLjcuNAoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 12:10:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 12:10:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCNAo-0001pK-Gd; Mon, 23 Sep 2019 12:10:34 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ZR6B=XS=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCNAn-0001p8-Cn
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 12:10:33 +0000
X-Inumbo-ID: 1ecb62ee-ddfb-11e9-95fc-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 1ecb62ee-ddfb-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 12:10:24 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 349D3F2013;
 Mon, 23 Sep 2019 14:10:23 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id sgi_4v8Nauzm; Mon, 23 Sep 2019 14:10:23 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0E206F2012
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 14:10:21 +0200 (CEST)
Received: from N-1309.office.hd (192.168.24.96) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 14:10:15 +0200
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
To: <minios-devel@lists.xenproject.org>
Date: Mon, 23 Sep 2019 14:09:52 +0200
Message-ID: <20190923120952.25938-5-sharan.santhanam@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2 4/4] lib/ukboot: Iterate through
 the inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: simon.kuenzer@neclab.eu, Sharan Santhanam <sharan.santhanam@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHN1cHBvcnQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBpbml0dGFiIGFuZCBjYWxsIHRoZSBp
bml0IGZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5z
YW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIGluY2x1ZGUvdWsvaW5pdC5oIHwgIDYgKysrKysrCiBs
aWIvdWtib290L2Jvb3QuYyB8IDIzICsrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNo
YW5nZWQsIDI5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VrL2luaXQuaCBi
L2luY2x1ZGUvdWsvaW5pdC5oCmluZGV4IGJlYTQxMjcuLjhiN2E4YWEgMTAwNjQ0Ci0tLSBhL2lu
Y2x1ZGUvdWsvaW5pdC5oCisrKyBiL2luY2x1ZGUvdWsvaW5pdC5oCkBAIC05Miw2ICs5MiwxMiBA
QCB0eXBlZGVmIGludCAoKnVrX2luaXRfdCkodm9pZCk7CiAjZGVmaW5lIHVrX3N5c19pbml0Y2Fs
bChmbikgICAgICAgdWtfc3lzX2luaXRjYWxsX3ByaW8oZm4sIDkpCiAjZGVmaW5lIHVrX2xhdGVf
aW5pdGNhbGwoZm4pICAgICAgdWtfbGF0ZV9pbml0Y2FsbF9wcmlvKGZuLCA5KQogCitleHRlcm4g
Y29uc3QgdWtfaW5pdF90IHVrX2luaXR0YWJfc3RhcnRbXTsKK2V4dGVybiBjb25zdCB1a19pbml0
X3QgdWtfaW5pdHRhYl9lbmQ7CisKKyNkZWZpbmUgdWtfaW5pdHRhYl9mb3JlYWNoKGluaXRfc3Rh
cnQsIGluaXRfZW5kLCBpdHIpCQlcCisJZm9yIChpdHIgPSBERUNPTlNUKHVrX2luaXRfdCosIGlu
aXRfc3RhcnQpOyBpdHIgPCAmaW5pdF9lbmQ7IGl0cisrKQorCiAjaWZkZWYgX19jcGx1c3BsdXMK
IH0KICNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLwpkaWZmIC0tZ2l0IGEvbGliL3VrYm9vdC9ib290
LmMgYi9saWIvdWtib290L2Jvb3QuYwppbmRleCA3ZmIwOTA4Li5mNjE1NmVlIDEwMDY0NAotLS0g
YS9saWIvdWtib290L2Jvb3QuYworKysgYi9saWIvdWtib290L2Jvb3QuYwpAQCAtNTYsNiArNTYs
NyBAQAogI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KICNpbmNsdWRlIDx1ay9wcmludC5oPgog
I2luY2x1ZGUgPHVrL2N0b3JzLmg+CisjaW5jbHVkZSA8dWsvaW5pdC5oPgogI2luY2x1ZGUgPHVr
L2FyZ3BhcnNlLmg+CiAjaWYgQ09ORklHX0xJQlVLQlVTCiAjaW5jbHVkZSA8dWsvYnVzLmg+CkBA
IC04MSw2ICs4MiwyMiBAQCBzdGF0aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykK
IAlpbnQgaTsKIAlpbnQgcmV0OwogCXN0cnVjdCB0aHJlYWRfbWFpbl9hcmcgKnRtYSA9IGFyZzsK
Kwl1a19pbml0X3QgKml0cjsKKworCS8qKgorCSAqIFJ1biBpbml0IHRhYmxlCisJICovCisJdWtf
cHJfaW5mbygiSW5pdCBUYWJsZSBAICVwIC0gJXBcbiIsICZ1a19pbml0dGFiX3N0YXJ0WzBdLAor
CQkgICAmdWtfaW5pdHRhYl9lbmQpOworCXVrX2luaXR0YWJfZm9yZWFjaCh1a19pbml0dGFiX3N0
YXJ0LCB1a19pbml0dGFiX2VuZCwgaXRyKSB7CisJCXJldCA9ICgqaXRyKSgpOworCQlpZiAocmV0
IDwgMCkgeworCQkJdWtfcHJfZXJyKCJJbml0IGZ1bmN0aW9uIGF0ICVwIHJldHVybmVkIGVycm9y
ICVkXG4iLAorCQkJCSAgaXRyLCByZXQpOworCQkJcmV0ID0gVUtQTEFUX0NSQVNIOworCQkJZ290
byBleGl0OworCQl9CisJfQogCiAjaWZkZWYgQ09ORklHX0xJQlVLQlVTCiAJdWtfcHJfaW5mbygi
SW5pdGlhbGl6ZSBidXMgaGFuZGxlcnMuLi5cbiIpOwpAQCAtMTQ5LDYgKzE2Niw4IEBAIHN0YXRp
YyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJnKQogCXJldCA9IG1haW4odG1hLT5hcmdj
LCB0bWEtPmFyZ3YpOwogCXVrX3ByX2luZm8oIm1haW4gcmV0dXJuZWQgJWQsIGhhbHRpbmcgc3lz
dGVtXG4iLCByZXQpOwogCXJldCA9IChyZXQgIT0gMCkgPyBVS1BMQVRfQ1JBU0ggOiBVS1BMQVRf
SEFMVDsKKworZXhpdDoKIAl1a3BsYXRfdGVybWluYXRlKHJldCk7IC8qIGRvZXMgbm90IHJldHVy
biAqLwogfQogCkBAIC0yMzksNiArMjU4LDEwIEBAIHZvaWQgdWtwbGF0X2VudHJ5KGludCBhcmdj
LCBjaGFyICphcmd2W10pCiAJfQogI2VuZGlmCiAKKy8qKgorICogQWRkaW5nIHRoZSBpbml0IHRh
YmxlLgorICovCisKICNpZiBDT05GSUdfTElCVUtBTExPQwogCXVrX3ByX2luZm8oIkluaXRpYWxp
emUgSVJRIHN1YnN5c3RlbS4uLlxuIik7CiAJcmMgPSB1a3BsYXRfaXJxX2luaXQoYSk7Ci0tIAoy
LjcuNAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:05:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:05:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCO1t-0006wB-1p; Mon, 23 Sep 2019 13:05:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ZR6B=XS=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCO1s-0006w5-9V
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 13:05:24 +0000
X-Inumbo-ID: ccb7eccc-de02-11e9-95fc-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id ccb7eccc-de02-11e9-95fc-12813bfff9fa;
 Mon, 23 Sep 2019 13:05:22 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 75AE71055B5;
 Mon, 23 Sep 2019 15:05:21 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id qMvcRGzY3W4k; Mon, 23 Sep 2019 15:05:21 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4E76A1055B4
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 15:05:21 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:05:21 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
 <20190917093833.29868-2-felipe.huici@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <4b3ceda9-22a4-7aa8-d1ba-318a68e46fbe@neclab.eu>
Date: Mon, 23 Sep 2019 15:05:20 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190917093833.29868-2-felipe.huici@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 1/3] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gRmVsaXBlLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lLiBUaGVyZSBpcyBhIGNoZWNrcGF0
Y2ggZXJyb3Igd2l0aCBhIHNwYWNlLiBXZSBjYW4gCmZpeCBpdCB3aGlsZSB1cHN0cmVhbWluZyB0
aGUgcGF0Y2guCgpSZXZpZXdlZC1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5h
bUBuZWNsYWIuZXU+CgpUaGFua3MgJiBSZWdhcmRzCgpTaGFyYW4KCk9uIDkvMTcvMTkgMTE6Mzgg
QU0sIEZlbGlwZSBIdWljaSB3cm90ZToKPiBXZSB1c2UgdGhlIEJTRC0zLUNsYXVzZSBsaWNlbnNl
IGZvciB0aGlzIGxpYnJhcnkgZ2x1ZSBjb2RlLgo+Cj4gU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1
aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgLmdpdGlnbm9yZSAgICAgIHwg
MjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBDT0RJTkdfU1RZTEUubWQgfCAgNCAr
KysrCj4gICBDT05UUklCVVRJTkcubWQgfCAgNCArKysrCj4gICBDT1BZSU5HLm1kICAgICAgfCAz
OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgQ29uZmlnLnVrICAg
ICAgIHwgIDUgKysrKysKPiAgIE1BSU5UQUlORVJTLm1kICB8IDEwICsrKysrKysrKysKPiAgIFJF
QURNRS5tZCAgICAgICB8IDE2ICsrKysrKysrKysrKysrKysKPiAgIDcgZmlsZXMgY2hhbmdlZCwg
MTA0IGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCj4gICBj
cmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg
Q09OVFJJQlVUSU5HLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAo+ICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlO
RVJTLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCj4KPiBkaWZmIC0tZ2l0IGEv
LmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAw
MDAwMDAuLjc1ZDJmZDMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvLmdpdGlnbm9yZQo+IEBAIC0w
LDAgKzEsMjcgQEAKPiArKi5kZXBlbmQKPiArKi5vCj4gKyouYQo+ICsqLmQKPiArKi5zbwo+ICsq
Lm9yaWcKPiArKi5yZWoKPiArKi5iYWsKPiArKi5zd3AKPiArKn4KPiArLCoKPiArXCMqXCMKPiAr
LlwjKgo+ICtcI18qXCMKPiArLlwjXyoKPiArIS5naXRpZ25vcmUKPiArLioKPiArCj4gKyMgZ251
IGdsb2JhbCBmaWxlcwo+ICtHUEFUSAo+ICtHUlRBR1MKPiArR1NZTVMKPiArR1RBR1MKPiArCj4g
KyMgY3Njb3BlIGZpbGVzCj4gK2NzY29wZS4qCj4gK25jc2NvcGUuKgo+IGRpZmYgLS1naXQgYS9D
T0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZTEUubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+
IGluZGV4IDAwMDAwMDAuLjU3MzAwNDEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvQ09ESU5HX1NU
WUxFLm1kCj4gQEAgLTAsMCArMSw0IEBACj4gK0NvZGluZyBTdHlsZQo+ICs9PT09PT09PT09PT0K
PiArCj4gK1BsZWFzZSByZWZlciB0byB0aGUgYENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUg
bWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lgo+IGRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcubWQg
Yi9DT05UUklCVVRJTkcubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu
LjVmNTVlY2EKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvQ09OVFJJQlVUSU5HLm1kCj4gQEAgLTAs
MCArMSw0IEBACj4gK0NvbnRyaWJ1dGluZyB0byBVbmlrcmFmdAo+ICs9PT09PT09PT09PT09PT09
PT09PT09PQo+ICsKPiArUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09OVFJJQlVUSU5HLm1kYCBmaWxl
IGluIHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCj4gZGlmZiAtLWdpdCBhL0NPUFlJTkcu
bWQgYi9DT1BZSU5HLm1kCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4y
NGNmN2MxCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL0NPUFlJTkcubWQKPiBAQCAtMCwwICsxLDM4
IEBACj4gK0xpY2Vuc2UKPiArPT09PT09PQo+ICsKPiArVW5pa3JhZnQgYXh0bHMgd3JhcHBlcnMK
PiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gKwo+ICtUaGlzIHJlcG9zaXRvcnkgY29udGFp
bnMgd3JhcHBlciBjb2RlIHRvIGJ1aWxkIGxpYnV1aWQgd2l0aCBVbmlrcmFmdC4KPiArRWFjaCBD
IGNvZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRoZQo+
ICtjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25zIHRo
ZSBjb2RlIGlzCj4gK2xpY2Vuc2VkLiBJZiBzdWNoIGEgbGljZW5jZSBub3RlIGlzIG1pc3Npbmcs
IHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0Cj4gK25vdGljZSB3aWxsIGFwcGx5Ogo+ICsKPiArCUNv
cHlyaWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCj4gKwo+ICsJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKwltb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKPiArCWFyZSBt
ZXQ6Cj4gKwo+ICsJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiArCTIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKwkgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCj4gKwkgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ICsJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cwo+ICsJICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KPiArCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCj4gKwo+ICsJVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCj4gKwlBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Cj4gKwlJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQo+ICsJQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQo+ICsJTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
Ugo+ICsJQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKPiArCVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwo+ICsJSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
PiArCUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCj4gKwlBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQo+ICsJUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCj4gZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awo+IG5l
dyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMDg0YjZlYQo+IC0tLSAvZGV2L251
bGwKPiArKysgYi9Db25maWcudWsKPiBAQCAtMCwwICsxLDUgQEAKPiArY29uZmlnIExJQkFYVExT
Cj4gKwkgICBib29sICJheFRMUyAtIEVtYmVkZGVkIFNTTCIKPiArCSAgIGRlZmF1bHQgbgo+ICsJ
ICAgc2VsZWN0IExJQk5FV0xJQkMKPiArCSAgIHNlbGVjdCBMSUJMV0lQCj4gZGlmZiAtLWdpdCBh
L01BSU5UQUlORVJTLm1kIGIvTUFJTlRBSU5FUlMubWQKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+
IGluZGV4IDAwMDAwMDAuLjZhMmYwZTIKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvTUFJTlRBSU5F
UlMubWQKPiBAQCAtMCwwICsxLDEwIEBACj4gK01haW50YWluZXJzIExpc3QKPiArPT09PT09PT09
PT09PT09PQo+ICsKPiArRm9yIG5vdGVzIG9uIGhvdyB0byByZWFkIHRoaXMgaW5mb3JtYXRpb24s
IHBsZWFzZSByZWZlciB0byBgTUFJTlRBSU5FUlMubWRgIGluCj4gK3RoZSBtYWluIFVuaWtyYWZ0
IHJlcG9zaXRvcnkuCj4gKwo+ICsJQVhUTFMtVU5JS1JBRlQKPiArCU06CUZlbGlwZSBIdWljaSA8
ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KPiArCUw6CW1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3Jn
Cj4gKwlGOiAqCj4gZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZAo+IG5ldyBmaWxl
IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZDEyNzg2Ywo+IC0tLSAvZGV2L251bGwKPiAr
KysgYi9SRUFETUUubWQKPiBAQCAtMCwwICsxLDE2IEBACj4gK2F4dGxzIGZvciBVbmlrcmFmdAo+
ICs9PT09PT09PT09PT09PT09PT09Cj4gK1RoaXMgaXMgdGhlIHBvcnQgb2YgYXh0bHMgZm9yIFVu
aWtyYWZ0IGFzIGV4dGVybmFsIGxpYnJhcnkuIFlvdSB3aWxsCj4gK25lZWQgbHdpcCB0byBtYWtl
IGl0IHdvcmsuCj4gKwo+ICtUbyBydW4gc3NsdGVzdC5jIGFzIGEgdW5pdCB0ZXN0LCB5b3UnbGwg
bmVlZCBwdGhyZWFkIHN1cHBvcnQsIGUuZy4sCj4gK2FkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8g
dGhlIExJQlMgdmFyaWFibGUgaW4gdGhlIE1ha2VmaWxlOgo+ICsKPiArICAgLi4uJChVS19MSUJT
KS9sd2lwOiQoVUtfTElCUykvcHRocmVhZC1lbWJlZGRlZDoKPiArICAgICAgJChVS19MSUJTKS9u
ZXdsaWI6JChVS19MSUJTKS9heHRscy4uLgo+ICsKPiArTm90ZSB0aGF0IHlvdSdsbCBuZWVkIGEg
ZmlsZXN5c3RlbSBpbiBwbGFjZSBhbmQgdGhlIGNlcnRpZmljYXRlIGZpbGVzIGZvcgo+ICthbGwg
dGVzdHMgdG8gcGFzcy4KPiArCj4gK1BsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAgYXMg
d2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCj4gK3N1YmRpcmVjdG9yeSBv
ZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5LgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOVe-0001Ob-Cv; Mon, 23 Sep 2019 13:36:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOVd-0001OK-2l
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:09 +0000
X-Inumbo-ID: 1638d092-de07-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1638d092-de07-11e9-b299-bc764e2007e4;
 Mon, 23 Sep 2019 13:36:03 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id C4DCE1055B4;
 Mon, 23 Sep 2019 15:36:02 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id GCP40PtBoZ0C; Mon, 23 Sep 2019 15:36:02 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id A1E49105530
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:36:02 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:02 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:35 +0200
Message-ID: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 00/14] port libgo on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgYXJlIHRoZSBwYXRjaGVzIG5lZWRlZCBmb3IgcG9ydGluZyBsaWJnbyBvbiBVbmlrcmFm
dC4KQSBzaW1wbGUgc3VtbWFyeToKLVRoZSBmaXJzdCAyIHBhdGNoZXMgYXJlIHF1aXRlIGNvbW1v
bgotVGhlIG5leHQgMiBwYXRjaGVzIHBvcnQgdHdvIGxpYnJhcmllcyB0aGF0IGFyZSBuZWVkZWQu
Ci1UaGUgbmV4dCA1IHBhdGNoZXMgYWRkIHNvbWUgY29uZmlndXJhdGlvbiBmaWxlcywgcGF0Y2hl
cyBhbmQgcnVsZXMKIHRvIGJ1aWxkIHRoZSBnbyBwYWNrYWdlcyBhbmQgcnVudGltZS4KLVRoZSBu
ZXh0IDMgcGF0Y2hlcyB1cGRhdGUgY29uZmlnIGZpbGVzIHRvIGRlY3JlYXNlIHN0dWJzLgotVGhl
IG5leHQgcGF0Y2ggY2hhbmdlcyBsb2NraW5nIGZyb20gZnV0ZXggdG8gc2VtYXBob3Jlcy4KLVRo
ZSBsYXN0IHBhdGNoIGFkZHMgZ2x1ZSBjb2RlIGFuZCByZXF1aXJlZCBzdHVicy4KCkNoYXJhbGFt
cG9zIE1haW5hcyAoMTIpOgogIEludHJvZHVjZSBsaWJyYXJ5IHNrZWxldG9uCiAgQWRkIE1ha2Vm
aWxlLnVrCiAgUG9ydCBsaWJiYWNrdHJhY2UgbGlicmFyeQogIFBvcnQgbGliZmZpIGxpYnJhcnkK
ICBsaWJnbzogSW50cm9kdWNlIGxpYnJhcnkgcG9ydAogIGxpYmdvOiBBZGQgcGF0Y2hlcyB0byBl
bmFibGUgcnVudGltZQogIGxpYmdvOiBXYWl0IGZvciBwYXRjaGVzIHRvIGJlIGFwcGxpZWQgYW5k
IHVwZGF0ZSBsaWJyYXJ5IGRlcGVkZW5jaWVzCiAgbGliZ286IFVwZGF0ZSBjb25maWcuaAogIGxp
YmdvOiBVcGRhdGUgbGliY2FsbHMuZ28KICBsaWJnbzogVXBkYXRlIHBhY2thZ2VzLnVrCiAgbGli
Z286IFVzZSBzZW1hcGhvcmVzIGluc3RlYWQgb2YgZnV0ZXhlcwogIGxpYmdvOiBBZGQgZ2x1ZSBj
b2RlIGFuZCBzdHVicwoKQ29zdGluIEx1cHUgKDIpOgogIGxpYmdvOiBBZGQgcnVsZXMgZm9yIGJ1
aWxkaW5nIHJ1bnRpbWUgR28gcGFja2FnZXMKICBsaWJnbzogQWRkIHBhdGNoZXMgdG8gYnVpbGQg
dGhlIGxpYnJhcnkKCiAuZ2l0aWdub3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDI3ICsKIENPRElOR19TVFlMRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgIDQgKwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAgNCArCiBDT1BZSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDM5ICsKIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgNDIgKwogTUFJTlRBSU5FUlMubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAxMSArCiBNYWtlZmlsZS51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
MjI4ICsKIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDcgKwogZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg
MSArCiBsaWJiYWNrdHJhY2UvZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgICAgICAgfCAgICA2
ICsKIGxpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQuaCAgICB8ICAgNjYg
KwogbGliYmFja3RyYWNlL2luY2x1ZGUvY29uZmlnLmggICAgICAgICAgICAgICAgIHwgIDEzNSAr
CiBsaWJmZmkvZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICsK
IGxpYmZmaS9pbmNsdWRlL2ZmaS5oICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1MDkgKwog
bGliZmZpL2luY2x1ZGUvZmZpY29uZmlnLmggICAgICAgICAgICAgICAgICAgIHwgIDIwNiArCiBs
aWJnby9nZW5lcmF0ZWQvZXBvbGwuZ28gICAgICAgICAgICAgICAgICAgICAgfCAgICA2ICsKIGxp
YmdvL2dlbmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5oICAgICAgICAgICAgICB8ICA0MTUgKwogbGli
Z28vZ2VuZXJhdGVkL2luY2x1ZGUvcnVudGltZS5pbmMgICAgICAgICAgIHwgIDk4OCArKwogbGli
Z28vZ2VuZXJhdGVkL2xpYmNhbGxzLmdvICAgICAgICAgICAgICAgICAgIHwgMzA3OSArKysrKysK
IGxpYmdvL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28gICAgICAgICAgICB8IDYyMTkgKysr
KysrKysrKysKIGxpYmdvL2dlbmVyYXRlZC9zaWd0YWIuZ28gICAgICAgICAgICAgICAgICAgICB8
ICAgNzEgKwogbGliZ28vZ2VuZXJhdGVkL3N5c2NhbGxfYXJjaC5nbyAgICAgICAgICAgICAgIHwg
ICAgMyArCiBsaWJnby9nZW5lcmF0ZWQvc3lzaW5mby5nbyAgICAgICAgICAgICAgICAgICAgfCA5
MjgyICsrKysrKysrKysrKysrKysrCiBsaWJnby9nZW5lcmF0ZWQvdmVyc2lvbi5nbyAgICAgICAg
ICAgICAgICAgICAgfCAgIDc3ICsKIGxpYmdvL2dsdWUuYyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAxOTkgKwogbGliZ28vaW5jbHVkZS9tbV9tYWxsb2MuaCAgICAgICAgICAg
ICAgICAgICAgIHwgICAgMAogbGliZ28vcGFja2FnZXMudWsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgIDk4MSArKwogLi4uLXVud2luZC1oZWFkZXItaW5zdGVhZC1vZi1zeXN0ZW0tb25l
LnBhdGNoIHwgICAyNSArCiBwYXRjaGVzLzAwMDItbGliZ28tTm8tZnV0ZXgtdG9uaWdodC5wYXRj
aCAgICAgfCAgIDI1ICsKIHBhdGNoZXMvMDAwMy1saWJnby1EaXNhYmxlLWJhY2t0cmFjaW5nLnBh
dGNoICB8ICAgMjggKwogLi4uMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1zaXplLnBh
dGNoIHwgICAyNyArCiAuLi4vMDAwNS1saWJnby1Vc2Utb3VyLWNvbnRleHQtbG9naWMucGF0Y2gg
ICAgfCAgIDU3ICsKIC4uLmdvLVVzZS1zZW1hcGhvcmVzLWluc3RlYWQtb2YtZnV0ZXhlcy5wYXRj
aCB8ICAxMzEgKwogMzMgZmlsZXMgY2hhbmdlZCwgMjI5MTkgaW5zZXJ0aW9ucygrKQogY3JlYXRl
IG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUu
bWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBDT1BZSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAx
MDA2NDQgTUFJTlRBSU5FUlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMu
dWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvZXhwb3J0c3ltcy51awogY3JlYXRl
IG1vZGUgMTAwNjQ0IGxpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQuaAog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmJhY2t0cmFjZS9pbmNsdWRlL2NvbmZpZy5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgbGliZmZpL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJm
ZmkvaW5jbHVkZS9mZmkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9pbmNsdWRlL2ZmaWNv
bmZpZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ28vZ2VuZXJhdGVkL2Vwb2xsLmdvCiBjcmVh
dGUgbW9kZSAxMDA2NDQgbGliZ28vZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmgKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWJnby9nZW5lcmF0ZWQvaW5jbHVkZS9ydW50aW1lLmluYwogY3JlYXRlIG1v
ZGUgMTAwNjQ0IGxpYmdvL2dlbmVyYXRlZC9saWJjYWxscy5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0
IGxpYmdvL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28KIGNyZWF0ZSBtb2RlIDEwMDY0NCBs
aWJnby9nZW5lcmF0ZWQvc2lndGFiLmdvCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ28vZ2VuZXJh
dGVkL3N5c2NhbGxfYXJjaC5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdvL2dlbmVyYXRlZC9z
eXNpbmZvLmdvCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ28vZ2VuZXJhdGVkL3ZlcnNpb24uZ28K
IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnby9nbHVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJn
by9pbmNsdWRlL21tX21hbGxvYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ28vcGFja2FnZXMu
dWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDEtbGliZ28tVXNlLWdjYy1vd24tdW53
aW5kLWhlYWRlci1pbnN0ZWFkLW9mLXN5c3RlbS1vbmUucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBwYXRjaGVzLzAwMDItbGliZ28tTm8tZnV0ZXgtdG9uaWdodC5wYXRjaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IHBhdGNoZXMvMDAwMy1saWJnby1EaXNhYmxlLWJhY2t0cmFjaW5nLnBhdGNoCiBjcmVh
dGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1z
aXplLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDA1LWxpYmdvLVVzZS1vdXIt
Y29udGV4dC1sb2dpYy5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwNi1saWJn
by1Vc2Utc2VtYXBob3Jlcy1pbnN0ZWFkLW9mLWZ1dGV4ZXMucGF0Y2gKCi0tIAoyLjE3LjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOVj-0001PO-Ej; Mon, 23 Sep 2019 13:36:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOVi-0001PD-3h
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:14 +0000
X-Inumbo-ID: 18df49de-de07-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 18df49de-de07-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 13:36:08 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 22A39F2013;
 Mon, 23 Sep 2019 15:36:07 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 0z08U6Qt0eJy; Mon, 23 Sep 2019 15:36:06 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DEA57F2012;
 Mon, 23 Sep 2019 15:36:02 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:02 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:36 +0200
Message-ID: <20190923133544.26927-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 01/14] Introduce library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <charalampos.mainas@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgoK
V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFz
QG5lY2xhYi5ldT4KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysr
KysKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysK
IENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogQ29uZmlnLnVrICAgICAgIHwgMTAgKysrKysrKysrKwogTUFJTlRBSU5FUlMubWQgIHwg
MTEgKysrKysrKysrKysKIFJFQURNRS5tZCAgICAgICB8ICA3ICsrKysrKysKIGV4cG9ydHN5bXMu
dWsgICB8ICAxICsKIDggZmlsZXMgY2hhbmdlZCwgMTAzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBt
b2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1k
CiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQg
Q09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAw
NjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgUkVBRE1FLm1kCiBjcmVhdGUg
bW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0
aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJmZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjcgQEAKKyouZGVwZW5kCisqLm8K
KyouYQorKi5kCisqLnNvCisqLm9yaWcKKyoucmVqCisqLmJhaworKi5zd3AKKyp+CissKgorXCMq
XCMKKy5cIyoKK1wjXypcIworLlwjXyoKKyEuZ2l0aWdub3JlCisuKgorCisjIGdudSBnbG9iYWwg
ZmlsZXMKK0dQQVRICitHUlRBR1MKK0dTWU1TCitHVEFHUworCisjIGNzY29wZSBmaWxlcworY3Nj
b3BlLioKK25jc2NvcGUuKgpkaWZmIC0tZ2l0IGEvQ09ESU5HX1NUWUxFLm1kIGIvQ09ESU5HX1NU
WUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzAwNDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQKQEAgLTAsMCArMSw0IEBACitDb2RpbmcgU3R5
bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT0RJTkdfU1RZTEUubWRg
IGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPTlRS
SUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4xNGY2YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0w
LDAgKzEsNCBAQAorQ29udHJpYnV0aW5nIHRvIFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09
PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09OVFJJQlVUSU5HLm1kYCBmaWxlIGluIHRo
ZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9DT1BZSU5HLm1kIGIvQ09Q
WUlORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ5ZjNhCi0tLSAv
ZGV2L251bGwKKysrIGIvQ09QWUlORy5tZApAQCAtMCwwICsxLDM5IEBACitMaWNlbnNlCis9PT09
PT09CisKK1VuaWtyYWZ0IGdjYyB3cmFwcGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCitUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMgd3JhcHBlciBjb2RlIHRvIGJ1aWxk
IGdjYyB3aXRoIFVuaWtyYWZ0LgorRWFjaCBDIGNvZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkg
c2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRoZQorY29weXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGlj
aCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGUgY29kZSBpcworbGljZW5zZWQuIElmIHN1Y2ggYSBs
aWNlbmNlIG5vdGUgaXMgbWlzc2luZywgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQKK25vdGljZSB3
aWxsIGFwcGx5OgorCisJQ29weXJpZ2h0IChjKSBZZWFyLCBJbnN0aXR1dGlvbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworCWFyZSBtZXQ6CisKKwkxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorCTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJ
UyIKKwlBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFCisJTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisJSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisJUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yM2FiNDkzCi0tLSAvZGV2L251bGwK
KysrIGIvQ29uZmlnLnVrCkBAIC0wLDAgKzEsMTAgQEAKK21lbnVjb25maWcgTElCR0NDCisJYm9v
bCAiZ2NjIC0gR05VIENvbXBpbGVyIENvbGxlY3Rpb24gbGlicmFyaWVzIgorCWRlZmF1bHQgbgor
CXNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQworCXNlbGVjdCBMSUJVS0RFQlVHCisJc2Vs
ZWN0IExJQlVLQUxMT0MKKwlzZWxlY3QgTElCUFRIUkVBRF9FTUJFRERFRAorCitpZiBMSUJHQ0MK
K2VuZGlmCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUy5tZCBiL01BSU5UQUlORVJTLm1kCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMzhiMzAKLS0tIC9kZXYvbnVsbAorKysg
Yi9NQUlOVEFJTkVSUy5tZApAQCAtMCwwICsxLDExIEBACitNYWludGFpbmVycyBMaXN0Cis9PT09
PT09PT09PT09PT09CisKK0ZvciBub3RlcyBvbiBob3cgdG8gcmVhZCB0aGlzIGluZm9ybWF0aW9u
LCBwbGVhc2UgcmVmZXIgdG8gYE1BSU5UQUlORVJTLm1kYCBpbgordGhlIG1haW4gVW5pa3JhZnQg
cmVwb3NpdG9yeS4KKworCUxJQkdDQy1VTklLUkFGVAorCU06CUNvc3RpbiBMdXB1IDxjb3N0aW4u
bHVwdUBjcy5wdWIucm8+CisJTToJRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1
PgorCUw6CW1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnCisJRjogKgpkaWZmIC0tZ2l0IGEvUkVB
RE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVj
ZTY2NzcKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw3IEBACitnY2Mg
Zm9yIFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGlzIHRo
ZSBwb3J0IG9mIGdjYyBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4KKworUGxlYXNl
IHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBhcyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGlu
IHRoZSBgZG9jL2AKK3N1YmRpcmVjdG9yeSBvZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5
LgpkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg2YzNmMwotLS0gL2Rldi9udWxsCisrKyBiL2V4cG9y
dHN5bXMudWsKQEAgLTAsMCArMSBAQAorbm9uZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
LS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOVo-0001QA-GZ; Mon, 23 Sep 2019 13:36:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOVn-0001Py-47
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:19 +0000
X-Inumbo-ID: 1b231766-de07-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1b231766-de07-11e9-b299-bc764e2007e4;
 Mon, 23 Sep 2019 13:36:11 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 19939F2013;
 Mon, 23 Sep 2019 15:36:11 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id RoouVp7dsaBv; Mon, 23 Sep 2019 15:36:11 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E6624F2012;
 Mon, 23 Sep 2019 15:36:06 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:02 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:37 +0200
Message-ID: <20190923133544.26927-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 02/14] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <charalampos.mainas@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgoK
R0NDIGlzIGEgc3VpdGUgb2YgbXVsdGlwbGUgbGlicmFyaWVzLiBJbiB0aGlzIHBhdGNoIHdlIGlu
dHJvZHVjZSBvbmx5IHRoZSBiYXNpYwpjb250ZW50cyBmb3IgdGhlIE1ha2VmaWxlLgoKU2lnbmVk
LW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1
PgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0K
IE1ha2VmaWxlLnVrIHwgNjMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2MyBpbnNlcnRpb25zKCspCiBjcmVhdGUg
bW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2Vm
aWxlLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNWFiYTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9NYWtlZmlsZS51awpAQCAtMCwwICsxLDYzIEBACisjICBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisjCisjICBnY2MgTWFrZWZpbGUudWsKKyMKKyMg
IEF1dGhvcnM6IENoYXJhbGFtcG9zIE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFzQG5lY2xhYi5l
dT4KKyMgICAgICAgICAgIENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CisjCisj
ICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uCisj
ICAgICAgICAgICAgICAgIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0
CisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMKKyMgIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xk
ZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjICAgICB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisj
CisjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkg
V0FZLgorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IHJlZ2lzdHJhdGlv
bgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZ2Nj
LCQoQ09ORklHX0xJQkdDQykpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPcmlnaW5h
bCBzb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCR0NDX1ZFUlNJT049Ny4zLjAK
K0xJQkdDQ19VUkw9aHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvZ2NjL2djYy0kKExJQkdDQ19WRVJT
SU9OKS9nY2MtJChMSUJHQ0NfVkVSU0lPTikudGFyLmd6CitMSUJHQ0NfUEFUQ0hESVI9JChMSUJH
Q0NfQkFTRSkvcGF0Y2hlcworTElCR0NDX1NVQkRJUj1nY2MtJChMSUJHQ0NfVkVSU0lPTikKKyQo
ZXZhbCAkKGNhbGwgZmV0Y2gsbGliZ2NjLCQoTElCR0NDX1VSTCkpKQorJChldmFsICQoY2FsbCBw
YXRjaCxsaWJnY2MsJChMSUJHQ0NfUEFUQ0hESVIpLCQoTElCR0NDX1NVQkRJUikpKQorCisjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworIyBIZWxwZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
TElCR0NDX0VYVFJBQ1RFRCA9ICQoTElCR0NDX09SSUdJTikvZ2NjLSQoTElCR0NDX1ZFUlNJT04p
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnkgaW5jbHVkZXMKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCitDSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSAgICs9IC1JJChMSUJH
Q0NfQkFTRSkvaW5jbHVkZQorQ1hYSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSArPSAtSSQoTElC
R0NDX0JBU0UpL2luY2x1ZGUKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOVt-0001R7-IP; Mon, 23 Sep 2019 13:36:25 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOVs-0001Qp-38
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:24 +0000
X-Inumbo-ID: 1d90a504-de07-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1d90a504-de07-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 13:36:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2C308F2013;
 Mon, 23 Sep 2019 15:36:15 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 3T_1A7yUrqDb; Mon, 23 Sep 2019 15:36:15 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 00A2BF2012;
 Mon, 23 Sep 2019 15:36:11 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:02 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:38 +0200
Message-ID: <20190923133544.26927-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 03/14] Port libbacktrace library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <charalampos.mainas@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgoK
VGhpcyBwb3J0IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGNvbmZpZy5oIGFuZCBiYWNrdHJhY2Ut
c3VwcG9ydGVkLmggaGVhZGVycy4KQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGdl
bmVyYXRlIHRoZW0gZHVyaW5nIHRoZSBidWlsZC4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9z
IE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFzQG5lY2xhYi5ldT4KU2lnbmVkLW9mZi1ieTogQ29z
dGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBDb25maWcudWsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKysKIE1ha2VmaWxlLnVrICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAyOSArKysrKwogbGliYmFja3RyYWNlL2V4cG9ydHN5bXMu
dWsgICAgICAgICAgICAgICAgIHwgICA2ICsKIGxpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFj
ZS1zdXBwb3J0ZWQuaCB8ICA2NiArKysrKysrKysrCiBsaWJiYWNrdHJhY2UvaW5jbHVkZS9jb25m
aWcuaCAgICAgICAgICAgICAgfCAxMzUgKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNo
YW5nZWQsIDI0MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYmFja3RyYWNl
L2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvaW5jbHVkZS9i
YWNrdHJhY2Utc3VwcG9ydGVkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvaW5j
bHVkZS9jb25maWcuaAoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awppbmRleCAy
M2FiNDkzLi40ZmMxMzExIDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBA
IC03LDQgKzcsMTEgQEAgbWVudWNvbmZpZyBMSUJHQ0MKIAlzZWxlY3QgTElCUFRIUkVBRF9FTUJF
RERFRAogCiBpZiBMSUJHQ0MKKworY29uZmlnIExJQkJBQ0tUUkFDRQorCWJvb2wgImxpYmJhY2t0
cmFjZSBsaWJyYXJ5IgorCWRlZmF1bHQgbgoraWYgTElCQkFDS1RSQUNFCitlbmRpZgorCiBlbmRp
ZgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awppbmRleCAyMjVhYmE0Li40
OWI2MDY5IDEwMDY0NAotLS0gYS9NYWtlZmlsZS51aworKysgYi9NYWtlZmlsZS51awpAQCAtNDAs
NiArNDAsNyBAQAogIyBMaWJyYXJ5IHJlZ2lzdHJhdGlvbgogIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZ2NjLCQoQ09ORklHX0xJQkdDQykpKQorJChl
dmFsICQoY2FsbCBhZGRsaWJfcyxsaWJiYWNrdHJhY2UsJChDT05GSUdfTElCQkFDS1RSQUNFKSkp
CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIE9yaWdpbmFsIHNvdXJjZXMKQEAgLTU1LDkg
KzU2LDM3IEBAICQoZXZhbCAkKGNhbGwgcGF0Y2gsbGliZ2NjLCQoTElCR0NDX1BBVENIRElSKSwk
KExJQkdDQ19TVUJESVIpKSkKICMgSGVscGVycwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIExJ
QkdDQ19FWFRSQUNURUQgPSAkKExJQkdDQ19PUklHSU4pL2djYy0kKExJQkdDQ19WRVJTSU9OKQor
TElCQkFDS1RSQUNFX0VYVFJBQ1RFRCA9ICQoTElCR0NDX0VYVFJBQ1RFRCkvbGliYmFja3RyYWNl
CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIExpYnJhcnkgaW5jbHVkZXMKICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCiBDSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSAgICs9IC1JJChMSUJH
Q0NfQkFTRSkvaW5jbHVkZQogQ1hYSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSArPSAtSSQoTElC
R0NDX0JBU0UpL2luY2x1ZGUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYmFja3Ry
YWNlIGNvZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJCQUNLVFJBQ0VfQ0lOQ0xVREVT
LXkgPSAtSSQoTElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlIFwKKwktSSQoTElCR0ND
X0VYVFJBQ1RFRCkvaW5jbHVkZSAtSSQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkKKworTElCQkFD
S1RSQUNFX0NGTEFHUy15ICs9IC1ESEFWRV9DT05GSUdfSCBcCisJLWZ1bndpbmQtdGFibGVzIFwK
KwktVyAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdzdHJpY3QtcHJvdG90eXBlcyAtV21pc3Npbmct
cHJvdG90eXBlcyBcCisJLVdvbGQtc3R5bGUtZGVmaW5pdGlvbiAtV21pc3NpbmctZm9ybWF0LWF0
dHJpYnV0ZSAtV2Nhc3QtcXVhbAorCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RS
QUNFX0VYVFJBQ1RFRCkvYXRvbWljLmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJCQUNL
VFJBQ0VfRVhUUkFDVEVEKS9kd2FyZi5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFD
S1RSQUNFX0VYVFJBQ1RFRCkvZmlsZWxpbmUuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJ
QkJBQ0tUUkFDRV9FWFRSQUNURUQpL3Bvc2l4LmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChM
SUJCQUNLVFJBQ0VfRVhUUkFDVEVEKS9wcmludC5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQo
TElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvc29ydC5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQo
TElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvc3RhdGUuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAk
KExJQkJBQ0tUUkFDRV9FWFRSQUNURUQpL2JhY2t0cmFjZS5jCitMSUJCQUNLVFJBQ0VfU1JDUy15
ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvc2ltcGxlLmMKK0xJQkJBQ0tUUkFDRV9TUkNT
LXkgKz0gJChMSUJCQUNLVFJBQ0VfRVhUUkFDVEVEKS9lbGYuYworTElCQkFDS1RSQUNFX1NSQ1Mt
eSArPSAkKExJQkJBQ0tUUkFDRV9FWFRSQUNURUQpL21tYXBpby5jCitMSUJCQUNLVFJBQ0VfU1JD
Uy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvbW1hcC5jCisKK0xJQkJBQ0tUUkFDRV9F
WFBPUlRTID0gJChMSUJHQ0NfQkFTRSkvbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsKKwpkaWZm
IC0tZ2l0IGEvbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsgYi9saWJiYWNrdHJhY2UvZXhwb3J0
c3ltcy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYzZTg2Ci0tLSAv
ZGV2L251bGwKKysrIGIvbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsKQEAgLTAsMCArMSw2IEBA
CitiYWNrdHJhY2VfY3JlYXRlX3N0YXRlCitiYWNrdHJhY2VfZnVsbAorYmFja3RyYWNlX3BjaW5m
bworYmFja3RyYWNlX3ByaW50CitiYWNrdHJhY2Vfc2ltcGxlCitiYWNrdHJhY2Vfc3ltaW5mbwpk
aWZmIC0tZ2l0IGEvbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oIGIv
bGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwM2E5OGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJiYWNr
dHJhY2UvaW5jbHVkZS9iYWNrdHJhY2Utc3VwcG9ydGVkLmgKQEAgLTAsMCArMSw2NiBAQAorLyog
YmFja3RyYWNlLXN1cHBvcnRlZC5oLmluIC0tIFdoZXRoZXIgc3RhY2sgYmFja3RyYWNlIGlzIHN1
cHBvcnRlZC4KKyAgIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLgorICAgV3JpdHRlbiBieSBJYW4gTGFuY2UgVGF5bG9yLCBHb29nbGUuCisKK1Jl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKDEpIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
CisgICAgKDIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICAgdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgIGRpc3RyaWJ1dGlvbi4K
KworICAgICgzKSBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0bworICAg
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0CisgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVT
UyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HCitJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgKi8KKworLyogVGhlIGZpbGUgYmFja3RyYWNlLXN1cHBv
cnRlZC5oLmluIGlzIHVzZWQgYnkgY29uZmlndXJlIHRvIGdlbmVyYXRlCisgICB0aGUgZmlsZSBi
YWNrdHJhY2Utc3VwcG9ydGVkLmguICBUaGUgZmlsZSBiYWNrdHJhY2Utc3VwcG9ydGVkLmggbWF5
CisgICBiZSAjaW5jbHVkZSdkIHRvIHNlZSB3aGV0aGVyIHRoZSBiYWNrdHJhY2UgbGlicmFyeSB3
aWxsIGJlIGFibGUgdG8KKyAgIGdldCBhIGJhY2t0cmFjZSBhbmQgcHJvZHVjZSBzeW1ib2xpYyBp
bmZvcm1hdGlvbi4gICovCisKKworLyogQkFDS1RSQUNFX1NVUFBPUlRFRCB3aWxsIGJlICNkZWZp
bmUnZCBhcyAxIGlmIHRoZSBiYWNrdHJhY2UgbGlicmFyeQorICAgc2hvdWxkIHdvcmssIDAgaWYg
aXQgd2lsbCBub3QuICBMaWJyYXJpZXMgbWF5ICNpbmNsdWRlIHRoaXMgdG8gbWFrZQorICAgb3Ro
ZXIgYXJyYW5nZW1lbnRzLiAgKi8KKworI2RlZmluZSBCQUNLVFJBQ0VfU1VQUE9SVEVEIDEKKwor
LyogQkFDS1RSQUNFX1VTRVNfTUFMTE9DIHdpbGwgYmUgI2RlZmluZSdkIGFzIDEgaWYgdGhlIGJh
Y2t0cmFjZQorICAgbGlicmFyeSB3aWxsIGNhbGwgbWFsbG9jIGFzIGl0IHdvcmtzLCAwIGlmIGl0
IHdpbGwgY2FsbCBtbWFwCisgICBpbnN0ZWFkLiAgVGhpcyBtYXkgYmUgdXNlZCB0byBkZXRlcm1p
bmUgd2hldGhlciBpdCBpcyBzYWZlIHRvIGNhbGwKKyAgIHRoZSBiYWNrdHJhY2UgZnVuY3Rpb25z
IGZyb20gYSBzaWduYWwgaGFuZGxlci4gIEluIGdlbmVyYWwgdGhpcworICAgb25seSBhcHBsaWVz
IHRvIGNhbGxzIGxpa2UgYmFja3RyYWNlIGFuZCBiYWNrdHJhY2VfcGNpbmZvLiAgSXQgZG9lcwor
ICAgbm90IGFwcGx5IHRvIGJhY2t0cmFjZV9zaW1wbGUsIHdoaWNoIG5ldmVyIGNhbGxzIG1hbGxv
Yy4gIEl0IGRvZXMKKyAgIG5vdCBhcHBseSB0byBiYWNrdHJhY2VfcHJpbnQsIHdoaWNoIGFsd2F5
cyBjYWxscyBmcHJpbnRmIGFuZAorICAgdGhlcmVmb3JlIG1hbGxvYy4gICovCisKKyNkZWZpbmUg
QkFDS1RSQUNFX1VTRVNfTUFMTE9DIDAKKworLyogQkFDS1RSQUNFX1NVUFBPUlRTX1RIUkVBRFMg
d2lsbCBiZSAjZGVmaW5lJ2QgYXMgMSBpZiB0aGUgYmFja3RyYWNlCisgICBsaWJyYXJ5IGlzIGNv
bmZpZ3VyZWQgd2l0aCB0aHJlYWRpbmcgc3VwcG9ydCwgMCBpZiBub3QuICBJZiB0aGlzIGlzCisg
ICAwLCB0aGUgdGhyZWFkZWQgcGFyYW1ldGVyIHRvIGJhY2t0cmFjZV9jcmVhdGVfc3RhdGUgbXVz
dCBiZSBwYXNzZWQKKyAgIGFzIDAuICAqLworCisjZGVmaW5lIEJBQ0tUUkFDRV9TVVBQT1JUU19U
SFJFQURTIDEKKworLyogQkFDS1RSQUNFX1NVUFBPUlRTX0RBVEEgd2lsbCBiZSAjZGVmaW5lZCdk
IGFzIDEgaWYgdGhlIGJhY2t0cmFjZV9zeW1pbmZvCisgICB3aWxsIHdvcmsgZm9yIHZhcmlhYmxl
cy4gIEl0IHdpbGwgYWx3YXlzIHdvcmsgZm9yIGZ1bmN0aW9ucy4gICovCisKKyNkZWZpbmUgQkFD
S1RSQUNFX1NVUFBPUlRTX0RBVEEgMQpkaWZmIC0tZ2l0IGEvbGliYmFja3RyYWNlL2luY2x1ZGUv
Y29uZmlnLmggYi9saWJiYWNrdHJhY2UvaW5jbHVkZS9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41MDg2ZjRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYmFja3Ry
YWNlL2luY2x1ZGUvY29uZmlnLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qIGNvbmZpZy5oLiAgR2Vu
ZXJhdGVkIGZyb20gY29uZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qIGNvbmZpZy5oLmlu
LiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBF
TEYgc2l6ZTogMzIgb3IgNjQgKi8KKyNkZWZpbmUgQkFDS1RSQUNFX0VMRl9TSVpFIDY0CisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBfX2F0b21pYyBmdW5jdGlvbnMgKi8KKyNkZWZp
bmUgSEFWRV9BVE9NSUNfRlVOQ1RJT05TIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGRlY2xhcmF0aW9uIG9mIGBzdHJubGVuJywgYW5kIHRvIDAgaWYgeW91CisgICBkb24ndC4g
Ki8KKyNkZWZpbmUgSEFWRV9ERUNMX1NUUk5MRU4gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0RMRkNOX0gg
MQorCisvKiBEZWZpbmUgaWYgZGxfaXRlcmF0ZV9waGRyIGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZp
bmUgSEFWRV9ETF9JVEVSQVRFX1BIRFIgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgZmNudGwgZnVuY3Rpb24gKi8KKyNkZWZpbmUgSEFWRV9GQ05UTCAxCisKKy8qIERlZmluZSBp
ZiBnZXRleGVjbmFtZSBpcyBhdmFpbGFibGUuICovCisvKiAjdW5kZWYgSEFWRV9HRVRFWEVDTkFN
RSAqLworCisvKiBEZWZpbmUgaWYgX1Vud2luZF9HZXRJUEluZm8gaXMgYXZhaWxhYmxlLiAqLwor
I2RlZmluZSBIQVZFX0dFVElQSU5GTyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGluay5oPiBoZWFkZXIgZmlsZS4g
Ki8KKyNkZWZpbmUgSEFWRV9MSU5LX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAq
LworI2RlZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0gg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgX19zeW5jIGZ1bmN0aW9ucyAqLwor
I2RlZmluZSBIQVZFX1NZTkNfRlVOQ1RJT05TIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxzeXMvbW1hbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfTU1B
Tl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9IIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfU1lTX1RZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0
ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VTklTVERfSCAxCisKKy8qIERlZmlu
ZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxl
ZCBsaWJyYXJpZXMuCisgICAqLworI2RlZmluZSBMVF9PQkpESVIgIi5saWJzLyIKKworLyogRGVm
aW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hv
dWxkIGJlIHNlbnQuICovCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIiCisKKy8qIERlZmlu
ZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9O
QU1FICJwYWNrYWdlLXVudXNlZCIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZl
cnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1NUUklORyAicGFja2Fn
ZS11bnVzZWQgdmVyc2lvbi11bnVzZWQiCisKKy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBz
aG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJs
aWJiYWNrdHJhY2UiCisKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2th
Z2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIiCisKKy8qIERlZmluZSB0byB0aGUgdmVyc2lv
biBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAidmVyc2lvbi11
bnVzZWQiCisKKy8qIFRoZSBzaXplIG9mIGBjaGFyJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAq
LworLyogI3VuZGVmIFNJWkVPRl9DSEFSICovCisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBj
b21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX0lOVCAqLworCisvKiBUaGUg
c2l6ZSBvZiBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qICN1bmRlZiBTSVpF
T0ZfTE9ORyAqLworCisvKiBUaGUgc2l6ZSBvZiBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXpl
b2YuICovCisvKiAjdW5kZWYgU0laRU9GX1NIT1JUICovCisKKy8qIFRoZSBzaXplIG9mIGB2b2lk
IConLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX1ZPSURfUCAq
LworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4g
Ki8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gQUlY
IDMsIEludGVyaXguICAqLworI2lmbmRlZiBfQUxMX1NPVVJDRQorIyBkZWZpbmUgX0FMTF9TT1VS
Q0UgMQorI2VuZGlmCisvKiBFbmFibGUgR05VIGV4dGVuc2lvbnMgb24gc3lzdGVtcyB0aGF0IGhh
dmUgdGhlbS4gICovCisjaWZuZGVmIF9HTlVfU09VUkNFCisjIGRlZmluZSBfR05VX1NPVVJDRSAx
CisjZW5kaWYKKy8qIEVuYWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8K
KyNpZm5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjIGRlZmluZSBfUE9TSVhfUFRIUkVB
RF9TRU1BTlRJQ1MgMQorI2VuZGlmCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBIUCBOb25TdG9w
LiAgKi8KKyNpZm5kZWYgX1RBTkRFTV9TT1VSQ0UKKyMgZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEK
KyNlbmRpZgorLyogRW5hYmxlIGdlbmVyYWwgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8KKyNp
Zm5kZWYgX19FWFRFTlNJT05TX18KKyMgZGVmaW5lIF9fRVhURU5TSU9OU19fIDEKKyNlbmRpZgor
CisKKy8qIERlZmluZSB0byAxIGlmIG9uIE1JTklYLiAqLworLyogI3VuZGVmIF9NSU5JWCAqLwor
CisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBm
ZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworLyogI3VuZGVmIF9QT1NJ
WF8xX1NPVVJDRSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBm
b3IgYHN0YXQnIGFuZCBvdGhlciB0aGluZ3MgdG8gd29yay4gKi8KKy8qICN1bmRlZiBfUE9TSVhf
U09VUkNFICovCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:26 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:26 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOVu-0001Rd-Lt; Mon, 23 Sep 2019 13:36:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOVs-0001R0-Rv
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:24 +0000
X-Inumbo-ID: 200c1aac-de07-11e9-95fd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 200c1aac-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:36:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 438BAF2013;
 Mon, 23 Sep 2019 15:36:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id cjIB0H4YZmKL; Mon, 23 Sep 2019 15:36:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 0F357F2012;
 Mon, 23 Sep 2019 15:36:15 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:03 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:39 +0200
Message-ID: <20190923133544.26927-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 04/14] Port libffi library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <charalampos.mainas@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgoK
VGhpcyBwb3J0IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGZmaS5oIGFuZCBmZmljb25maWcuaCBo
ZWFkZXJzLiBBbm90aGVyIG9wdGlvbgp3b3VsZCBoYXZlIGJlZW4gdG8gZ2VuZXJhdGUgdGhlbSBk
dXJpbmcgdGhlIGJ1aWxkLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFy
YWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29z
dGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayAgICAgICAgICAgICAgICAgIHwgICA2
ICsKIE1ha2VmaWxlLnVrICAgICAgICAgICAgICAgIHwgIDI2ICsrCiBsaWJmZmkvZXhwb3J0c3lt
cy51ayAgICAgICB8ICAyMSArKwogbGliZmZpL2luY2x1ZGUvZmZpLmggICAgICAgfCA1MDkgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliZmZpL2luY2x1ZGUvZmZpY29u
ZmlnLmggfCAyMDYgKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDc2OCBpbnNlcnRp
b25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZmZpL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWJmZmkvaW5jbHVkZS9mZmkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZm
aS9pbmNsdWRlL2ZmaWNvbmZpZy5oCgpkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVr
CmluZGV4IDRmYzEzMTEuLmFjZTA3MmIgMTAwNjQ0Ci0tLSBhL0NvbmZpZy51aworKysgYi9Db25m
aWcudWsKQEAgLTE0LDQgKzE0LDEwIEBAIGNvbmZpZyBMSUJCQUNLVFJBQ0UKIGlmIExJQkJBQ0tU
UkFDRQogZW5kaWYKIAorY29uZmlnIExJQkZGSQorCWJvb2wgImxpYmZmaSAtIEEgUG9ydGFibGUg
Rm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgTGlicmFyeSIKKwlkZWZhdWx0IG4KK2lmIExJQkZG
SQorZW5kaWYKKwogZW5kaWYKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsK
aW5kZXggNDliNjA2OS4uMTFmNWEyMyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFr
ZWZpbGUudWsKQEAgLTQwLDcgKzQwLDkgQEAKICMgTGlicmFyeSByZWdpc3RyYXRpb24KICMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCiAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmdjYywkKENPTkZJ
R19MSUJHQ0MpKSkKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZ28sJChDT05GSUdfTElCR08p
KSkKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliYmFja3RyYWNlLCQoQ09ORklHX0xJQkJBQ0tU
UkFDRSkpKQorJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJmZmksJChDT05GSUdfTElCRkZJKSkp
CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIE9yaWdpbmFsIHNvdXJjZXMKQEAgLTU2LDcg
KzU4LDkgQEAgJChldmFsICQoY2FsbCBwYXRjaCxsaWJnY2MsJChMSUJHQ0NfUEFUQ0hESVIpLCQo
TElCR0NDX1NVQkRJUikpKQogIyBIZWxwZXJzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogTElC
R0NDX0VYVFJBQ1RFRCA9ICQoTElCR0NDX09SSUdJTikvZ2NjLSQoTElCR0NDX1ZFUlNJT04pCitM
SUJHT19FWFRSQUNURUQgPSAkKExJQkdDQ19FWFRSQUNURUQpL2xpYmdvCiBMSUJCQUNLVFJBQ0Vf
RVhUUkFDVEVEID0gJChMSUJHQ0NfRVhUUkFDVEVEKS9saWJiYWNrdHJhY2UKK0xJQkZGSV9FWFRS
QUNURUQgPSAkKExJQkdDQ19FWFRSQUNURUQpL2xpYmZmaQogCiAjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIwogIyBMaWJyYXJ5IGluY2x1ZGVzCkBAIC05MCwzICs5NCwyNSBAQCBMSUJCQUNLVFJBQ0Vf
U1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvbW1hcC5jCiAKIExJQkJBQ0tUUkFD
RV9FWFBPUlRTID0gJChMSUJHQ0NfQkFTRSkvbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsKIAor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliZmZpIGNvZGUKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCitMSUJGRklfQ09NTU9OX0NJTkNMVURFUy15ID0gLUkkKExJQkdDQ19CQVNFKS9saWJm
ZmkvaW5jbHVkZSBcCisJLUkkKExJQkdDQ19FWFRSQUNURUQpL2luY2x1ZGUgLUkkKExJQkZGSV9F
WFRSQUNURUQpL2luY2x1ZGUKK0xJQkZGSV9DT01NT05fQ0lOQ0xVREVTLSQoQ09ORklHX0FSQ0hf
WDg2XzY0KSArPSAtSSQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3g4NgorTElCRkZJX0FTSU5DTFVE
RVMteSA9ICQoTElCRkZJX0NPTU1PTl9DSU5DTFVERVMteSkKK0xJQkZGSV9DSU5DTFVERVMteSAg
PSAkKExJQkZGSV9DT01NT05fQ0lOQ0xVREVTLXkpCisKK0xJQkZGSV9DRkxBR1MteSArPSAtREhB
VkVfQ09ORklHX0ggLWZleGNlcHRpb25zIC1XYWxsIFwKKwktV25vLXNpZ24tY29tcGFyZSAtV25v
LXVudXNlZC1wYXJhbWV0ZXIgLVduby1lbXB0eS1ib2R5IC1Xbm8taW1wbGljaXQtZmFsbHRocm91
Z2gKKworTElCRkZJX1NSQ1MteSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy9jbG9zdXJlcy5j
CitMSUJGRklfU1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL2phdmFfcmF3X2FwaS5j
CitMSUJGRklfU1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3ByZXBfY2lmLmMKK0xJ
QkZGSV9TUkNTLXkgKz0gJChMSUJGRklfRVhUUkFDVEVEKS9zcmMvcmF3X2FwaS5jCitMSUJGRklf
U1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3R5cGVzLmMKK0xJQkZGSV9TUkNTLSQo
Q09ORklHX0FSQ0hfWDg2XzY0KSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy94ODYvZmZpNjQu
YworTElCRkZJX1NSQ1MtJChDT05GSUdfQVJDSF9YODZfNjQpICs9ICQoTElCRkZJX0VYVFJBQ1RF
RCkvc3JjL3g4Ni91bml4NjQuUworCitMSUJGRklfRVhQT1JUUyA9ICQoTElCR0NDX0JBU0UpL2xp
YmZmaS9leHBvcnRzeW1zLnVrCisKZGlmZiAtLWdpdCBhL2xpYmZmaS9leHBvcnRzeW1zLnVrIGIv
bGliZmZpL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Yzc2NDBhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmZmaS9leHBvcnRzeW1zLnVrCkBAIC0wLDAg
KzEsMjEgQEAKK2ZmaV9jYWxsCitmZmlfY2FsbF9nbworZmZpX3ByZXBfY2lmCitmZmlfcHJlcF9j
aWZfdmFyCitmZmlfcHJlcF9nb19jbG9zdXJlCitmZmlfdHlwZV9jb21wbGV4X2RvdWJsZQorZmZp
X3R5cGVfY29tcGxleF9mbG9hdAorZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlCitmZmlfdHlw
ZV9kb3VibGUKK2ZmaV90eXBlX2Zsb2F0CitmZmlfdHlwZV9sb25nZG91YmxlCitmZmlfdHlwZV9w
b2ludGVyCitmZmlfdHlwZV9zaW50MTYKK2ZmaV90eXBlX3NpbnQzMgorZmZpX3R5cGVfc2ludDY0
CitmZmlfdHlwZV9zaW50OAorZmZpX3R5cGVfdWludDE2CitmZmlfdHlwZV91aW50MzIKK2ZmaV90
eXBlX3VpbnQ2NAorZmZpX3R5cGVfdWludDgKK2ZmaV90eXBlX3ZvaWQKZGlmZiAtLWdpdCBhL2xp
YmZmaS9pbmNsdWRlL2ZmaS5oIGIvbGliZmZpL2luY2x1ZGUvZmZpLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNWU5YzFkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmZmaS9p
bmNsdWRlL2ZmaS5oCkBAIC0wLDAgKzEsNTA5IEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotQy0qLQorICAgbGli
ZmZpIDMuOTk5OTkgLSBDb3B5cmlnaHQgKGMpIDIwMTEsIDIwMTQgQW50aG9ueSBHcmVlbgorICAg
ICAgICAgICAgICAgICAgICAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDAzLCAyMDA3LCAyMDA4IFJl
ZCBIYXQsIEluYy4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj
aGFyZ2UsIHRvIGFueSBwZXJzb24KKyAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy
ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgICBmaWxlcyAodGhlIGBgU29mdHdhcmUn
JyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQKKyAgIHJlc3RyaWN0aW9uLCBpbmNs
dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LAorICAgbW9k
aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg
Y29waWVzCisgICBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t
IHRoZSBTb2Z0d2FyZSBpcworICAgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k
IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUKKyAgIGluY2x1ZGVkIGluIGFsbCBjb3Bp
ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09G
VFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI
RSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM
QUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgor
ICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisv
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisgICBUaGUgYmFzaWMgQVBJIGlzIGRlc2NyaWJlZCBpbiB0aGUgUkVBRE1F
IGZpbGUuCisKKyAgIFRoZSByYXcgQVBJIGlzIGRlc2lnbmVkIHRvIGJ5cGFzcyBzb21lIG9mIHRo
ZSBhcmd1bWVudCBwYWNraW5nCisgICBhbmQgdW5wYWNraW5nIG9uIGFyY2hpdGVjdHVyZXMgZm9y
IHdoaWNoIGl0IGNhbiBiZSBhdm9pZGVkLgorCisgICBUaGUgY2xvc3VyZSBBUEkgYWxsb3dzIGlu
dGVycHJldGVkIGZ1bmN0aW9ucyB0byBiZSBwYWNrYWdlZCB1cAorICAgaW5zaWRlIGEgQyBmdW5j
dGlvbiBwb2ludGVyLCBzbyB0aGF0IHRoZXkgY2FuIGJlIGNhbGxlZCBhcyBDIGZ1bmN0aW9ucywK
KyAgIHdpdGggbm8gdW5kZXJzdGFuZGluZyBvbiB0aGUgY2xpZW50IHNpZGUgdGhhdCB0aGV5IGFy
ZSBpbnRlcnByZXRlZC4KKyAgIEl0IGNhbiBhbHNvIGJlIHVzZWQgaW4gb3RoZXIgY2FzZXMgaW4g
d2hpY2ggaXQgaXMgbmVjZXNzYXJ5IHRvIHBhY2thZ2UKKyAgIHVwIGEgdXNlciBzcGVjaWZpZWQg
cGFyYW1ldGVyIGFuZCBhIGZ1bmN0aW9uIHBvaW50ZXIgYXMgYSBzaW5nbGUKKyAgIGZ1bmN0aW9u
IHBvaW50ZXIuCisKKyAgIFRoZSBjbG9zdXJlIEFQSSBtdXN0IGJlIGltcGxlbWVudGVkIGluIG9y
ZGVyIHRvIGdldCBpdHMgZnVuY3Rpb25hbGl0eSwKKyAgIGUuZy4gZm9yIHVzZSBieSBnaWouICBS
b3V0aW5lcyBhcmUgcHJvdmlkZWQgdG8gZW11bGF0ZSB0aGUgcmF3IEFQSQorICAgaWYgdGhlIHVu
ZGVybHlpbmcgcGxhdGZvcm0gZG9lc24ndCBhbGxvdyBmYXN0ZXIgaW1wbGVtZW50YXRpb24uCisK
KyAgIE1vcmUgZGV0YWlscyBvbiB0aGUgcmF3IGFuZCBjbG91cmUgQVBJIGNhbiBiZSBmb3VuZCBp
bjoKKworICAgaHR0cDovL2djYy5nbnUub3JnL21sL2phdmEvMTk5OS1xMy9tc2cwMDEzOC5odG1s
CisKKyAgIGFuZAorCisgICBodHRwOi8vZ2NjLmdudS5vcmcvbWwvamF2YS8xOTk5LXEzL21zZzAw
MTc0Lmh0bWwKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElCRkZJX0gKKyNkZWZpbmUg
TElCRkZJX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisv
KiBTcGVjaWZ5IHdoaWNoIGFyY2hpdGVjdHVyZSBsaWJmZmkgaXMgY29uZmlndXJlZCBmb3IuICov
CisjaWZuZGVmIFg4Nl82NAorI2RlZmluZSBYODZfNjQKKyNlbmRpZgorCisvKiAtLS0tIFN5c3Rl
bSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworCisjaW5jbHVkZSA8ZmZpdGFyZ2V0Lmg+CisKKyNpZm5kZWYgTElCRkZJX0FTTQor
CisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19jbGFuZ19fKQorI2RlZmluZSBf
X2F0dHJpYnV0ZV9fKFgpCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUg
PGxpbWl0cy5oPgorCisvKiBMT05HX0xPTkdfTUFYIGlzIG5vdCBhbHdheXMgZGVmaW5lZCAobm90
IGlmIFNUUklDVF9BTlNJLCBmb3IgZXhhbXBsZSkuCisgICBCdXQgd2UgY2FuIGZpbmQgaXQgZWl0
aGVyIHVuZGVyIHRoZSBjb3JyZWN0IEFOU0kgbmFtZSwgb3IgdW5kZXIgR05VCisgICBDJ3MgaW50
ZXJuYWwgbmFtZS4gICovCisKKyNkZWZpbmUgRkZJXzY0X0JJVF9NQVggOTIyMzM3MjAzNjg1NDc3
NTgwNworCisjaWZkZWYgTE9OR19MT05HX01BWAorIyBkZWZpbmUgRkZJX0xPTkdfTE9OR19NQVgg
TE9OR19MT05HX01BWAorI2Vsc2UKKyMgaWZkZWYgTExPTkdfTUFYCisjICBkZWZpbmUgRkZJX0xP
TkdfTE9OR19NQVggTExPTkdfTUFYCisjICBpZmRlZiBfQUlYNTIgLyogb3IgbmV3ZXIgaGFzIEM5
OSBMTE9OR19NQVggKi8KKyMgICB1bmRlZiBGRklfNjRfQklUX01BWAorIyAgIGRlZmluZSBGRklf
NjRfQklUX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyMgIGVuZGlmIC8qIF9BSVg1MiBvciBu
ZXdlciAqLworIyBlbHNlCisjICBpZmRlZiBfX0dOVUNfXworIyAgIGRlZmluZSBGRklfTE9OR19M
T05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworIyAgZW5kaWYKKyMgIGlmZGVmIF9BSVggLyogQUlY
IDUuMSBhbmQgZWFybGllciBoYXZlIExPTkdMT05HX01BWCAqLworIyAgIGlmbmRlZiBfX1BQQzY0
X18KKyMgICAgaWYgZGVmaW5lZCAoX19JQk1DX18pIHx8IGRlZmluZWQgKF9fSUJNQ1BQX18pCisj
ICAgICBkZWZpbmUgRkZJX0xPTkdfTE9OR19NQVggTE9OR0xPTkdfTUFYCisjICAgIGVuZGlmCisj
ICAgZW5kaWYgLyogX19QUEM2NF9fICovCisjICAgdW5kZWYgIEZGSV82NF9CSVRfTUFYCisjICAg
ZGVmaW5lIEZGSV82NF9CSVRfTUFYIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAorIyAgZW5kaWYKKyMg
ZW5kaWYKKyNlbmRpZgorCisvKiBUaGUgY2xvc3VyZSBjb2RlIGFzc3VtZXMgdGhhdCB0aGlzIHdv
cmtzIG9uIHBvaW50ZXJzLCBpLmUuIGEgc2l6ZV90CSovCisvKiBjYW4gaG9sZCBhIHBvaW50ZXIu
CQkJCQkJCSovCisKK3R5cGVkZWYgc3RydWN0IF9mZmlfdHlwZQoreworICBzaXplX3Qgc2l6ZTsK
KyAgdW5zaWduZWQgc2hvcnQgYWxpZ25tZW50OworICB1bnNpZ25lZCBzaG9ydCB0eXBlOworICBz
dHJ1Y3QgX2ZmaV90eXBlICoqZWxlbWVudHM7Cit9IGZmaV90eXBlOworCisjaWZuZGVmIExJQkZG
SV9ISURFX0JBU0lDX1RZUEVTCisjaWYgU0NIQVJfTUFYID09IDEyNworIyBkZWZpbmUgZmZpX3R5
cGVfdWNoYXIgICAgICAgICAgICAgICAgZmZpX3R5cGVfdWludDgKKyMgZGVmaW5lIGZmaV90eXBl
X3NjaGFyICAgICAgICAgICAgICAgIGZmaV90eXBlX3NpbnQ4CisjZWxzZQorICNlcnJvciAiY2hh
ciBzaXplIG5vdCBzdXBwb3J0ZWQiCisjZW5kaWYKKworI2lmIFNIUlRfTUFYID09IDMyNzY3Cisj
IGRlZmluZSBmZmlfdHlwZV91c2hvcnQgICAgICAgZmZpX3R5cGVfdWludDE2CisjIGRlZmluZSBm
ZmlfdHlwZV9zc2hvcnQgICAgICAgZmZpX3R5cGVfc2ludDE2CisjZWxpZiBTSFJUX01BWCA9PSAy
MTQ3NDgzNjQ3CisjIGRlZmluZSBmZmlfdHlwZV91c2hvcnQgICAgICAgZmZpX3R5cGVfdWludDMy
CisjIGRlZmluZSBmZmlfdHlwZV9zc2hvcnQgICAgICAgZmZpX3R5cGVfc2ludDMyCisjZWxzZQor
ICNlcnJvciAic2hvcnQgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKyNpZiBJTlRfTUFY
ID09IDMyNzY3CisjIGRlZmluZSBmZmlfdHlwZV91aW50ICAgICAgICAgZmZpX3R5cGVfdWludDE2
CisjIGRlZmluZSBmZmlfdHlwZV9zaW50ICAgICAgICAgZmZpX3R5cGVfc2ludDE2CisjZWxpZiBJ
TlRfTUFYID09IDIxNDc0ODM2NDcKKyMgZGVmaW5lIGZmaV90eXBlX3VpbnQgICAgICAgICBmZmlf
dHlwZV91aW50MzIKKyMgZGVmaW5lIGZmaV90eXBlX3NpbnQgICAgICAgICBmZmlfdHlwZV9zaW50
MzIKKyNlbGlmIElOVF9NQVggPT0gOTIyMzM3MjAzNjg1NDc3NTgwNworIyBkZWZpbmUgZmZpX3R5
cGVfdWludCAgICAgICAgIGZmaV90eXBlX3VpbnQ2NAorIyBkZWZpbmUgZmZpX3R5cGVfc2ludCAg
ICAgICAgIGZmaV90eXBlX3NpbnQ2NAorI2Vsc2UKKyAjZXJyb3IgImludCBzaXplIG5vdCBzdXBw
b3J0ZWQiCisjZW5kaWYKKworI2lmIExPTkdfTUFYID09IDIxNDc0ODM2NDcKKyMgaWYgRkZJX0xP
TkdfTE9OR19NQVggIT0gRkZJXzY0X0JJVF9NQVgKKyAjZXJyb3IgIm5vIDY0LWJpdCBkYXRhIHR5
cGUgc3VwcG9ydGVkIgorIyBlbmRpZgorI2VsaWYgTE9OR19NQVggIT0gRkZJXzY0X0JJVF9NQVgK
KyAjZXJyb3IgImxvbmcgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKyNpZiBMT05HX01B
WCA9PSAyMTQ3NDgzNjQ3CisjIGRlZmluZSBmZmlfdHlwZV91bG9uZyAgICAgICAgZmZpX3R5cGVf
dWludDMyCisjIGRlZmluZSBmZmlfdHlwZV9zbG9uZyAgICAgICAgZmZpX3R5cGVfc2ludDMyCisj
ZWxpZiBMT05HX01BWCA9PSBGRklfNjRfQklUX01BWAorIyBkZWZpbmUgZmZpX3R5cGVfdWxvbmcg
ICAgICAgIGZmaV90eXBlX3VpbnQ2NAorIyBkZWZpbmUgZmZpX3R5cGVfc2xvbmcgICAgICAgIGZm
aV90eXBlX3NpbnQ2NAorI2Vsc2UKKyAjZXJyb3IgImxvbmcgc2l6ZSBub3Qgc3VwcG9ydGVkIgor
I2VuZGlmCisKKy8qIE5lZWQgbWluaW1hbCBkZWNvcmF0aW9ucyBmb3IgRExMcyB0byB3b3JrcyBv
biBXaW5kb3dzLiAqLworLyogR0NDIGhhcyBhdXRvaW1wb3J0IGFuZCBhdXRvZXhwb3J0LiAgUmVs
eSBvbiBMaWJ0b29sIHRvICovCisvKiBoZWxwIE1TVkMgZXhwb3J0IGZyb20gYSBETEwsIGJ1dCBh
bHdheXMgZGVjbGFyZSBkYXRhICAgKi8KKy8qIHRvIGJlIGltcG9ydGVkIGZvciBNU1ZDIGNsaWVu
dHMuICBUaGlzIGNvc3RzIGFuIGV4dHJhICAqLworLyogaW5kaXJlY3Rpb24gZm9yIE1TVkMgY2xp
ZW50cyB1c2luZyB0aGUgc3RhdGljIHZlcnNpb24gICovCisvKiBvZiB0aGUgbGlicmFyeSwgYnV0
IGRvbid0IHdvcnJ5IGFib3V0IHRoYXQuICBCZXNpZGVzLCAgKi8KKy8qIGFzIGEgd29ya2Fyb3Vu
ZCwgdGhleSBjYW4gZGVmaW5lIEZGSV9CVUlMRElORyBpZiB0aGV5ICAqLworLyogKmtub3cqIHRo
ZXkgYXJlIGdvaW5nIHRvIGxpbmsgd2l0aCB0aGUgc3RhdGljIGxpYnJhcnkuICovCisjaWYgZGVm
aW5lZCBfTVNDX1ZFUiAmJiAhZGVmaW5lZCBGRklfQlVJTERJTkcKKyNkZWZpbmUgRkZJX0VYVEVS
TiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCisjZWxzZQorI2RlZmluZSBGRklfRVhURVJO
IGV4dGVybgorI2VuZGlmCisKKy8qIFRoZXNlIGFyZSBkZWZpbmVkIGluIHR5cGVzLmMgKi8KK0ZG
SV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfdm9pZDsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZp
X3R5cGVfdWludDg7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3NpbnQ4OworRkZJX0VY
VEVSTiBmZmlfdHlwZSBmZmlfdHlwZV91aW50MTY7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90
eXBlX3NpbnQxNjsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfdWludDMyOworRkZJX0VY
VEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9zaW50MzI7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90
eXBlX3VpbnQ2NDsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfc2ludDY0OworRkZJX0VY
VEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9mbG9hdDsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5
cGVfZG91YmxlOworRkZJX0VYVEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9wb2ludGVyOworCisjaWYg
MQorRkZJX0VYVEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9sb25nZG91YmxlOworI2Vsc2UKKyNkZWZp
bmUgZmZpX3R5cGVfbG9uZ2RvdWJsZSBmZmlfdHlwZV9kb3VibGUKKyNlbmRpZgorCisjaWZkZWYg
RkZJX1RBUkdFVF9IQVNfQ09NUExFWF9UWVBFCitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBl
X2NvbXBsZXhfZmxvYXQ7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX2NvbXBsZXhfZG91
YmxlOworI2lmIDEKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfY29tcGxleF9sb25nZG91
YmxlOworI2Vsc2UKKyNkZWZpbmUgZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlIGZmaV90eXBl
X2NvbXBsZXhfZG91YmxlCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8qIExJQkZGSV9ISURFX0JB
U0lDX1RZUEVTICovCisKK3R5cGVkZWYgZW51bSB7CisgIEZGSV9PSyA9IDAsCisgIEZGSV9CQURf
VFlQRURFRiwKKyAgRkZJX0JBRF9BQkkKK30gZmZpX3N0YXR1czsKKwordHlwZWRlZiB1bnNpZ25l
ZCBGRklfVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICBmZmlfYWJpIGFiaTsKKyAgdW5zaWdu
ZWQgbmFyZ3M7CisgIGZmaV90eXBlICoqYXJnX3R5cGVzOworICBmZmlfdHlwZSAqcnR5cGU7Cisg
IHVuc2lnbmVkIGJ5dGVzOworICB1bnNpZ25lZCBmbGFnczsKKyNpZmRlZiBGRklfRVhUUkFfQ0lG
X0ZJRUxEUworICBGRklfRVhUUkFfQ0lGX0ZJRUxEUzsKKyNlbmRpZgorfSBmZmlfY2lmOworCisj
aWYgMAorLyogVXNlZCB0byBhZGp1c3Qgc2l6ZS9hbGlnbm1lbnQgb2YgZmZpIHR5cGVzLiAgKi8K
K3ZvaWQgZmZpX3ByZXBfdHlwZXMgKGZmaV9hYmkgYWJpKTsKKyNlbmRpZgorCisvKiBVc2VkIGlu
dGVybmFsbHksIGJ1dCBvdmVycmlkZGVuIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyAqLworZmZpX3N0
YXR1cyBmZmlfcHJlcF9jaWZfY29yZShmZmlfY2lmICpjaWYsCisJCQkgICAgIGZmaV9hYmkgYWJp
LAorCQkJICAgICB1bnNpZ25lZCBpbnQgaXN2YXJpYWRpYywKKwkJCSAgICAgdW5zaWduZWQgaW50
IG5maXhlZGFyZ3MsCisJCQkgICAgIHVuc2lnbmVkIGludCBudG90YWxhcmdzLAorCQkJICAgICBm
ZmlfdHlwZSAqcnR5cGUsCisJCQkgICAgIGZmaV90eXBlICoqYXR5cGVzKTsKKworLyogLS0tLSBE
ZWZpbml0aW9ucyBmb3IgdGhlIHJhdyBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KKworI2lmbmRlZiBGRklfU0laRU9GX0FSRworIyBpZiBMT05HX01BWCA9PSAy
MTQ3NDgzNjQ3CisjICBkZWZpbmUgRkZJX1NJWkVPRl9BUkcgICAgICAgIDQKKyMgZWxpZiBMT05H
X01BWCA9PSBGRklfNjRfQklUX01BWAorIyAgZGVmaW5lIEZGSV9TSVpFT0ZfQVJHICAgICAgICA4
CisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBGRklfU0laRU9GX0pBVkFfUkFXCisjICBkZWZp
bmUgRkZJX1NJWkVPRl9KQVZBX1JBVyBGRklfU0laRU9GX0FSRworI2VuZGlmCisKK3R5cGVkZWYg
dW5pb24geworICBmZmlfc2FyZyAgc2ludDsKKyAgZmZpX2FyZyAgIHVpbnQ7CisgIGZsb2F0CSAg
ICBmbHQ7CisgIGNoYXIgICAgICBkYXRhW0ZGSV9TSVpFT0ZfQVJHXTsKKyAgdm9pZCogICAgIHB0
cjsKK30gZmZpX3JhdzsKKworI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNCAmJiBGRklfU0la
RU9GX0FSRyA9PSA4CisvKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBtaXBzNjQvbjMyIEFC
SSAoYW5kIHBlcmhhcHMgb3RoZXJzKSB3aGVyZQorICAgc2l6ZW9mKHZvaWQgKikgaXMgNCBhbmQg
RkZJX1NJWkVPRl9BUkcgaXMgOC4gICovCit0eXBlZGVmIHVuaW9uIHsKKyAgc2lnbmVkIGludAlz
aW50OworICB1bnNpZ25lZCBpbnQJdWludDsKKyAgZmxvYXQJCWZsdDsKKyAgY2hhcgkJZGF0YVtG
RklfU0laRU9GX0pBVkFfUkFXXTsKKyAgdm9pZCoJCXB0cjsKK30gZmZpX2phdmFfcmF3OworI2Vs
c2UKK3R5cGVkZWYgZmZpX3JhdyBmZmlfamF2YV9yYXc7CisjZW5kaWYKKworCit2b2lkIGZmaV9y
YXdfY2FsbCAoZmZpX2NpZiAqY2lmLAorCQkgICB2b2lkICgqZm4pKHZvaWQpLAorCQkgICB2b2lk
ICpydmFsdWUsCisJCSAgIGZmaV9yYXcgKmF2YWx1ZSk7CisKK3ZvaWQgZmZpX3B0cmFycmF5X3Rv
X3JhdyAoZmZpX2NpZiAqY2lmLCB2b2lkICoqYXJncywgZmZpX3JhdyAqcmF3KTsKK3ZvaWQgZmZp
X3Jhd190b19wdHJhcnJheSAoZmZpX2NpZiAqY2lmLCBmZmlfcmF3ICpyYXcsIHZvaWQgKiphcmdz
KTsKK3NpemVfdCBmZmlfcmF3X3NpemUgKGZmaV9jaWYgKmNpZik7CisKKy8qIFRoaXMgaXMgYW5h
bG9nb3VzIHRvIHRoZSByYXcgQVBJLCBleGNlcHQgaXQgdXNlcyBKYXZhIHBhcmFtZXRlcgkqLwor
LyogcGFja2luZywgZXZlbiBvbiA2NC1iaXQgbWFjaGluZXMuICBJLmUuIG9uIDY0LWJpdCBtYWNo
aW5lcwkJKi8KKy8qIGxvbmdzIGFuZCBkb3VibGVzIGFyZSBmb2xsb3dlZCBieSBhbiBlbXB0eSA2
NC1iaXQgd29yZC4JCSovCisKK3ZvaWQgZmZpX2phdmFfcmF3X2NhbGwgKGZmaV9jaWYgKmNpZiwK
KwkJCXZvaWQgKCpmbikodm9pZCksCisJCQl2b2lkICpydmFsdWUsCisJCQlmZmlfamF2YV9yYXcg
KmF2YWx1ZSk7CisKK3ZvaWQgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3IChmZmlfY2lmICpjaWYs
IHZvaWQgKiphcmdzLCBmZmlfamF2YV9yYXcgKnJhdyk7Cit2b2lkIGZmaV9qYXZhX3Jhd190b19w
dHJhcnJheSAoZmZpX2NpZiAqY2lmLCBmZmlfamF2YV9yYXcgKnJhdywgdm9pZCAqKmFyZ3MpOwor
c2l6ZV90IGZmaV9qYXZhX3Jhd19zaXplIChmZmlfY2lmICpjaWYpOworCisvKiAtLS0tIERlZmlu
aXRpb25zIGZvciBjbG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLworCisjaWYgRkZJX0NMT1NVUkVTCisKKyNpZmRlZiBfTVNDX1ZFUgorX19kZWNsc3Bl
YyhhbGlnbig4KSkKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworI2lmIDAKKyAgdm9pZCAqdHJh
bXBvbGluZV90YWJsZTsKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJsZV9lbnRyeTsKKyNlbHNlCisg
IGNoYXIgdHJhbXBbRkZJX1RSQU1QT0xJTkVfU0laRV07CisjZW5kaWYKKyAgZmZpX2NpZiAgICpj
aWY7CisgIHZvaWQgICAgICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopOworICB2
b2lkICAgICAgKnVzZXJfZGF0YTsKKyNpZmRlZiBfX0dOVUNfXworfSBmZmlfY2xvc3VyZSBfX2F0
dHJpYnV0ZV9fKChhbGlnbmVkICg4KSkpOworI2Vsc2UKK30gZmZpX2Nsb3N1cmU7CisjIGlmZGVm
IF9fc2dpCisjICBwcmFnbWEgcGFjayAwCisjIGVuZGlmCisjZW5kaWYKKwordm9pZCAqZmZpX2Ns
b3N1cmVfYWxsb2MgKHNpemVfdCBzaXplLCB2b2lkICoqY29kZSk7Cit2b2lkIGZmaV9jbG9zdXJl
X2ZyZWUgKHZvaWQgKik7CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmUgKGZmaV9jbG9z
dXJlKiwKKwkJICBmZmlfY2lmICosCisJCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9p
ZCoqLHZvaWQqKSwKKwkJICB2b2lkICp1c2VyX2RhdGEpOworCitmZmlfc3RhdHVzCitmZmlfcHJl
cF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUqLAorCQkgICAgICBmZmlfY2lmICosCisJCSAgICAg
IHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCisJCSAgICAgIHZvaWQg
KnVzZXJfZGF0YSwKKwkJICAgICAgdm9pZCpjb2RlbG9jKTsKKworI2lmZGVmIF9fc2dpCisjIHBy
YWdtYSBwYWNrIDgKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworI2lmIDAKKyAgdm9pZCAqdHJh
bXBvbGluZV90YWJsZTsKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJsZV9lbnRyeTsKKyNlbHNlCisg
IGNoYXIgdHJhbXBbRkZJX1RSQU1QT0xJTkVfU0laRV07CisjZW5kaWYKKyAgZmZpX2NpZiAgICpj
aWY7CisKKyNpZiAhRkZJX05BVElWRV9SQVdfQVBJCisKKyAgLyogaWYgdGhpcyBpcyBlbmFibGVk
LCB0aGVuIGEgcmF3IGNsb3N1cmUgaGFzIHRoZSBzYW1lIGxheW91dCAKKyAgICAgYXMgYSByZWd1
bGFyIGNsb3N1cmUuICBXZSB1c2UgdGhpcyB0byBpbnN0YWxsIGFuIGludGVybWVkaWF0ZSAKKyAg
ICAgaGFuZGxlciB0byBkbyB0aGUgdHJhbnNhbHRpb24sIHZvaWQqKiAtPiBmZmlfcmF3Ki4gKi8K
KworICB2b2lkICAgICAoKnRyYW5zbGF0ZV9hcmdzKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9p
ZCopOworICB2b2lkICAgICAgKnRoaXNfY2xvc3VyZTsKKworI2VuZGlmCisKKyAgdm9pZCAgICAg
KCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKTsKKyAgdm9pZCAgICAgICp1c2Vy
X2RhdGE7CisKK30gZmZpX3Jhd19jbG9zdXJlOworCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgMAor
ICB2b2lkICp0cmFtcG9saW5lX3RhYmxlOworICB2b2lkICp0cmFtcG9saW5lX3RhYmxlX2VudHJ5
OworI2Vsc2UKKyAgY2hhciB0cmFtcFtGRklfVFJBTVBPTElORV9TSVpFXTsKKyNlbmRpZgorCisg
IGZmaV9jaWYgICAqY2lmOworCisjaWYgIUZGSV9OQVRJVkVfUkFXX0FQSQorCisgIC8qIGlmIHRo
aXMgaXMgZW5hYmxlZCwgdGhlbiBhIHJhdyBjbG9zdXJlIGhhcyB0aGUgc2FtZSBsYXlvdXQgCisg
ICAgIGFzIGEgcmVndWxhciBjbG9zdXJlLiAgV2UgdXNlIHRoaXMgdG8gaW5zdGFsbCBhbiBpbnRl
cm1lZGlhdGUgCisgICAgIGhhbmRsZXIgdG8gZG8gdGhlIHRyYW5zYWx0aW9uLCB2b2lkKiogLT4g
ZmZpX3JhdyouICovCisKKyAgdm9pZCAgICAgKCp0cmFuc2xhdGVfYXJncykoZmZpX2NpZiosdm9p
ZCosdm9pZCoqLHZvaWQqKTsKKyAgdm9pZCAgICAgICp0aGlzX2Nsb3N1cmU7CisKKyNlbmRpZgor
CisgIHZvaWQgICAgICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKTsK
KyAgdm9pZCAgICAgICp1c2VyX2RhdGE7CisKK30gZmZpX2phdmFfcmF3X2Nsb3N1cmU7CisKK2Zm
aV9zdGF0dXMKK2ZmaV9wcmVwX3Jhd19jbG9zdXJlIChmZmlfcmF3X2Nsb3N1cmUqLAorCQkgICAg
ICBmZmlfY2lmICpjaWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9y
YXcqLHZvaWQqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworZmZpX3N0YXR1cworZmZp
X3ByZXBfcmF3X2Nsb3N1cmVfbG9jIChmZmlfcmF3X2Nsb3N1cmUqLAorCQkJICBmZmlfY2lmICpj
aWYsCisJCQkgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwKKwkJ
CSAgdm9pZCAqdXNlcl9kYXRhLAorCQkJICB2b2lkICpjb2RlbG9jKTsKKworZmZpX3N0YXR1cwor
ZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSAoZmZpX2phdmFfcmF3X2Nsb3N1cmUqLAorCQkgICAg
ICAgICAgIGZmaV9jaWYgKmNpZiwKKwkJICAgICAgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2
b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwKKwkJICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEp
OworCitmZmlfc3RhdHVzCitmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyAoZmZpX2phdmFf
cmF3X2Nsb3N1cmUqLAorCQkJICAgICAgIGZmaV9jaWYgKmNpZiwKKwkJCSAgICAgICB2b2lkICgq
ZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwKKwkJCSAgICAgICB2b2lk
ICp1c2VyX2RhdGEsCisJCQkgICAgICAgdm9pZCAqY29kZWxvYyk7CisKKyNlbmRpZiAvKiBGRklf
Q0xPU1VSRVMgKi8KKworI2lmIEZGSV9HT19DTE9TVVJFUworCit0eXBlZGVmIHN0cnVjdCB7Cisg
IHZvaWQgICAgICAqdHJhbXA7CisgIGZmaV9jaWYgICAqY2lmOworICB2b2lkICAgICAoKmZ1biko
ZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKTsKK30gZmZpX2dvX2Nsb3N1cmU7CisKK2ZmaV9z
dGF0dXMgZmZpX3ByZXBfZ29fY2xvc3VyZSAoZmZpX2dvX2Nsb3N1cmUqLCBmZmlfY2lmICosCisJ
CQkJdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSk7CisKK3ZvaWQgZmZp
X2NhbGxfZ28gKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLAor
CQkgIHZvaWQgKiphdmFsdWUsIHZvaWQgKmNsb3N1cmUpOworCisjZW5kaWYgLyogRkZJX0dPX0NM
T1NVUkVTICovCisKKy8qIC0tLS0gUHVibGljIGludGVyZmFjZSBkZWZpbml0aW9uIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2ZmaV9zdGF0dXMgZmZpX3ByZXBf
Y2lmKGZmaV9jaWYgKmNpZiwKKwkJCWZmaV9hYmkgYWJpLAorCQkJdW5zaWduZWQgaW50IG5hcmdz
LAorCQkJZmZpX3R5cGUgKnJ0eXBlLAorCQkJZmZpX3R5cGUgKiphdHlwZXMpOworCitmZmlfc3Rh
dHVzIGZmaV9wcmVwX2NpZl92YXIoZmZpX2NpZiAqY2lmLAorCQkJICAgIGZmaV9hYmkgYWJpLAor
CQkJICAgIHVuc2lnbmVkIGludCBuZml4ZWRhcmdzLAorCQkJICAgIHVuc2lnbmVkIGludCBudG90
YWxhcmdzLAorCQkJICAgIGZmaV90eXBlICpydHlwZSwKKwkJCSAgICBmZmlfdHlwZSAqKmF0eXBl
cyk7CisKK3ZvaWQgZmZpX2NhbGwoZmZpX2NpZiAqY2lmLAorCSAgICAgIHZvaWQgKCpmbikodm9p
ZCksCisJICAgICAgdm9pZCAqcnZhbHVlLAorCSAgICAgIHZvaWQgKiphdmFsdWUpOworCisvKiBV
c2VmdWwgZm9yIGVsaW1pbmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzICovCisjZGVmaW5lIEZGSV9G
TihmKSAoKHZvaWQgKCopKHZvaWQpKWYpCisKKy8qIC0tLS0gRGVmaW5pdGlvbnMgc2hhcmVkIHdp
dGggYXNzZW1ibHkgY29kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRp
ZgorCisvKiBJZiB0aGVzZSBjaGFuZ2UsIHVwZGF0ZSBzcmMvbWlwcy9mZml0YXJnZXQuaC4gKi8K
KyNkZWZpbmUgRkZJX1RZUEVfVk9JRCAgICAgICAwICAgIAorI2RlZmluZSBGRklfVFlQRV9JTlQg
ICAgICAgIDEKKyNkZWZpbmUgRkZJX1RZUEVfRkxPQVQgICAgICAyICAgIAorI2RlZmluZSBGRklf
VFlQRV9ET1VCTEUgICAgIDMKKyNpZiAxCisjZGVmaW5lIEZGSV9UWVBFX0xPTkdET1VCTEUgNAor
I2Vsc2UKKyNkZWZpbmUgRkZJX1RZUEVfTE9OR0RPVUJMRSBGRklfVFlQRV9ET1VCTEUKKyNlbmRp
ZgorI2RlZmluZSBGRklfVFlQRV9VSU5UOCAgICAgIDUgICAKKyNkZWZpbmUgRkZJX1RZUEVfU0lO
VDggICAgICA2CisjZGVmaW5lIEZGSV9UWVBFX1VJTlQxNiAgICAgNyAKKyNkZWZpbmUgRkZJX1RZ
UEVfU0lOVDE2ICAgICA4CisjZGVmaW5lIEZGSV9UWVBFX1VJTlQzMiAgICAgOQorI2RlZmluZSBG
RklfVFlQRV9TSU5UMzIgICAgIDEwCisjZGVmaW5lIEZGSV9UWVBFX1VJTlQ2NCAgICAgMTEKKyNk
ZWZpbmUgRkZJX1RZUEVfU0lOVDY0ICAgICAxMgorI2RlZmluZSBGRklfVFlQRV9TVFJVQ1QgICAg
IDEzCisjZGVmaW5lIEZGSV9UWVBFX1BPSU5URVIgICAgMTQKKyNkZWZpbmUgRkZJX1RZUEVfQ09N
UExFWCAgICAxNQorCisvKiBUaGlzIHNob3VsZCBhbHdheXMgcmVmZXIgdG8gdGhlIGxhc3QgdHlw
ZSBjb2RlIChmb3Igc2FuaXR5IGNoZWNrcykgKi8KKy8qID8/PyBJZGVhbGx5LCBhbnl3YXkuICBU
aGVyZSBhcmUgYXNzZW1ibHkgZmlsZXMgdGhhdCBzdGlsbCBkZXBlbmQKKyAgIG9uIHRoaXMgbm90
IGluY2x1ZGluZyBDT01QTEVYLiAgKi8KKyNpZmRlZiBGRklfVEFSR0VUX0hBU19DT01QTEVYX1RZ
UEUKKyMgZGVmaW5lIEZGSV9UWVBFX0xBU1QgICAgICBGRklfVFlQRV9DT01QTEVYCisjZWxzZQor
IyBkZWZpbmUgRkZJX1RZUEVfTEFTVCAgICAgIEZGSV9UWVBFX1BPSU5URVIKKyNlbmRpZgorCisj
aWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmZm
aS9pbmNsdWRlL2ZmaWNvbmZpZy5oIGIvbGliZmZpL2luY2x1ZGUvZmZpY29uZmlnLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYzZjEyYwotLS0gL2Rldi9udWxsCisrKyBi
L2xpYmZmaS9pbmNsdWRlL2ZmaWNvbmZpZy5oCkBAIC0wLDAgKzEsMjA2IEBACisvKiBmZmljb25m
aWcuaC4gIEdlbmVyYXRlZCBmcm9tIGZmaWNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisv
KiBmZmljb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVh
ZGVyLiAgKi8KKworLyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVs
cGVyIG1hY3JvKSAqLworLyogI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAqLworCisv
KiBEZWZpbmUgdG8gb25lIG9mIGBfZ2V0YjY3JywgYEdFVEI2NycsIGBnZXRiNjcnIGZvciBDcmF5
LTIgYW5kIENyYXktWU1QCisgICBzeXN0ZW1zLiBUaGlzIGZ1bmN0aW9uIGlzIHJlcXVpcmVkIGZv
ciBgYWxsb2NhLmMnIHN1cHBvcnQgb24gdGhvc2Ugc3lzdGVtcy4KKyAgICovCisvKiAjdW5kZWYg
Q1JBWV9TVEFDS1NFR19FTkQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgdXNpbmcgYGFsbG9jYS5j
Jy4gKi8KKy8qICN1bmRlZiBDX0FMTE9DQSAqLworCisvKiBEZWZpbmUgdG8gdGhlIGZsYWdzIG5l
ZWRlZCBmb3IgdGhlIC5zZWN0aW9uIC5laF9mcmFtZSBkaXJlY3RpdmUuICovCisjZGVmaW5lIEVI
X0ZSQU1FX0ZMQUdTICJhIgorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3Ugd2FudCBleHRyYSBkZWJ1
Z2dpbmcuICovCisvKiAjdW5kZWYgRkZJX0RFQlVHICovCisKKy8qIENhbm5vdCB1c2UgUFJPVF9F
WEVDIG9uIHRoaXMgdGFyZ2V0LCBzbywgd2UgcmV2ZXJ0IHRvIGFsdGVybmF0aXZlIG1lYW5zICov
CisvKiAjdW5kZWYgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSAqLworCisvKiBEZWZpbmUgdGhp
cyBpZiB5b3Ugd2FudCB0byBlbmFibGUgcGF4IGVtdWxhdGVkIHRyYW1wb2xpbmVzICovCisvKiAj
dW5kZWYgRkZJX01NQVBfRVhFQ19FTVVUUkFNUF9QQVggKi8KKworLyogQ2Fubm90IHVzZSBtYWxs
b2Mgb24gdGhpcyB0YXJnZXQsIHNvLCB3ZSByZXZlcnQgdG8gYWx0ZXJuYXRpdmUgbWVhbnMgKi8K
Ky8qICN1bmRlZiBGRklfTU1BUF9FWEVDX1dSSVQgKi8KKworLyogRGVmaW5lIHRoaXMgaWYgeW91
IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIHRoZSByYXcgQVBJLiAqLworLyogI3VuZGVmIEZGSV9O
T19SQVdfQVBJICovCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0
IGZvciBhZ2dyZWdhdGUgdHlwZXMuICovCisvKiAjdW5kZWYgRkZJX05PX1NUUlVDVFMgKi8KKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYGFsbG9jYScsIGFzIGEgZnVuY3Rpb24gb3IgbWFj
cm8uICovCisjZGVmaW5lIEhBVkVfQUxMT0NBIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgPGFsbG9jYS5oPiBhbmQgaXQgc2hvdWxkIGJlIHVzZWQgKG5vdCBvbiBVbHRyaXgpLgorICAg
Ki8KKyNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxl
ciBzdXBwb3J0cyAuY2ZpXyogZGlyZWN0aXZlcy4gKi8KKyNkZWZpbmUgSEFWRV9BU19DRklfUFNF
VURPX09QIDEKKworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5yZWdpc3Rl
ci4gKi8KKy8qICN1bmRlZiBIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCAqLworCisvKiBEZWZp
bmUgaWYgdGhlIGNvbXBpbGVyIHVzZXMgemFyY2ggZmVhdHVyZXMuICovCisvKiAjdW5kZWYgSEFW
RV9BU19TMzkwX1pBUkNIICovCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBhbmQgbGlu
a2VyIHN1cHBvcnQgdW5hbGlnbmVkIFBDIHJlbGF0aXZlIHJlbG9jcy4KKyAgICovCisvKiAjdW5k
ZWYgSEFWRV9BU19TUEFSQ19VQV9QQ1JFTCAqLworCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJs
ZXIgc3VwcG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9BU19YODZf
NjRfVU5XSU5EX1NFQ1RJT05fVFlQRSAxCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBz
dXBwb3J0cyBQQyByZWxhdGl2ZSByZWxvY3MuICovCisjZGVmaW5lIEhBVkVfQVNfWDg2X1BDUkVM
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmls
ZS4gKi8KKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKKworLyogRGVmaW5lIGlmIF9fYXR0cmlidXRl
X18oKHZpc2liaWxpdHkoImhpZGRlbiIpKSkgaXMgc3VwcG9ydGVkLiAqLworI2RlZmluZSBIQVZF
X0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfSU5UVFlQ
RVNfSCAxCisKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbG9uZyBkb3VibGUgdHlwZSBhbmQg
aXQgaXMgYmlnZ2VyIHRoYW4gYSBkb3VibGUgKi8KKyNkZWZpbmUgSEFWRV9MT05HX0RPVUJMRSAx
CisKKy8qIERlZmluZSBpZiB5b3Ugc3VwcG9ydCBtb3JlIHRoYW4gb25lIHNpemUgb2YgdGhlIGxv
bmcgZG91YmxlIHR5cGUgKi8KKy8qICN1bmRlZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgKi8K
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1jcHknIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX01FTUNQWSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta29zdGVtcCcgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfTUtPU1RFTVAgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1t
YXAnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX01NQVAgMQorCisvKiBEZWZpbmUgaWYgbW1h
cCB3aXRoIE1BUF9BTk9OKFlNT1VTKSB3b3Jrcy4gKi8KKyNkZWZpbmUgSEFWRV9NTUFQX0FOT04g
MQorCisvKiBEZWZpbmUgaWYgbW1hcCBvZiAvZGV2L3plcm8gd29ya3MuICovCisjZGVmaW5lIEhB
VkVfTU1BUF9ERVZfWkVSTyAxCisKKy8qIERlZmluZSBpZiByZWFkLW9ubHkgbW1hcCBvZiBhIHBs
YWluIGZpbGUgd29ya3MuICovCisjZGVmaW5lIEhBVkVfTU1BUF9GSUxFIDEKKworLyogRGVmaW5l
IGlmIC5laF9mcmFtZSBzZWN0aW9ucyBzaG91bGQgYmUgcmVhZC1vbmx5LiAqLworI2RlZmluZSBI
QVZFX1JPX0VIX0ZSQU1FIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRp
bnQuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVERMSUJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Ry
aW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TVFJJTkdTX0ggMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNk
ZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3lzL21tYW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19U
WVBFU19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVh
ZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gdGhl
IHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFy
aWVzLgorICAgKi8KKyNkZWZpbmUgTFRfT0JKRElSICIubGlicy8iCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdXIgQyBjb21waWxlciBkb2Vzbid0IGFjY2VwdCAtYyBhbmQgLW8gdG9nZXRoZXIuICov
CisvKiAjdW5kZWYgTk9fTUlOVVNfQ19NSU5VU19PICovCisKKy8qIE5hbWUgb2YgcGFja2FnZSAq
LworI2RlZmluZSBQQUNLQUdFICJsaWJmZmkiCisKKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3
aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI2Rl
ZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiaHR0cDovL2dpdGh1Yi5jb20vYXRncmVlbi9saWJmZmkv
aXNzdWVzIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICov
CisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAibGliZmZpIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwg
bmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfU1RS
SU5HICJsaWJmZmkgMy45OTk5OSIKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0
IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgImxpYmZm
aSIKKworLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8KKyNk
ZWZpbmUgUEFDS0FHRV9VUkwgIiIKKworLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMg
cGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIzLjk5OTk5IgorCisvKiBUaGUg
c2l6ZSBvZiBgZG91YmxlJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpF
T0ZfRE9VQkxFIDgKKworLyogVGhlIHNpemUgb2YgYGxvbmcgZG91YmxlJywgYXMgY29tcHV0ZWQg
Ynkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfTE9OR19ET1VCTEUgMTYKKworLyogVGhlIHNp
emUgb2YgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9G
X1NJWkVfVCA4CisKKy8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFsbG9jYSwg
ZGVmaW5lIGlmIHlvdSBrbm93IHRoZQorICAgZGlyZWN0aW9uIG9mIHN0YWNrIGdyb3d0aCBmb3Ig
eW91ciBzeXN0ZW07IG90aGVyd2lzZSBpdCB3aWxsIGJlCisgICBhdXRvbWF0aWNhbGx5IGRlZHVj
ZWQgYXQgcnVudGltZS4KKwlTVEFDS19ESVJFQ1RJT04gPiAwID0+IGdyb3dzIHRvd2FyZCBoaWdo
ZXIgYWRkcmVzc2VzCisJU1RBQ0tfRElSRUNUSU9OIDwgMCA9PiBncm93cyB0b3dhcmQgbG93ZXIg
YWRkcmVzc2VzCisJU1RBQ0tfRElSRUNUSU9OID0gMCA9PiBkaXJlY3Rpb24gb2YgZ3Jvd3RoIHVu
a25vd24gKi8KKy8qICN1bmRlZiBTVEFDS19ESVJFQ1RJT04gKi8KKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNURENfSEVB
REVSUyAxCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBhcmUgdXNpbmcgUHVyaWZ5IGFuZCB3YW50
IHRvIHN1cHByZXNzIHNwdXJpb3VzIG1lc3NhZ2VzLgorICAgKi8KKy8qICN1bmRlZiBVU0lOR19Q
VVJJRlkgKi8KKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworI2RlZmluZSBWRVJT
SU9OICIzLjk5OTk5IgorCisvKiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBw
cm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3QKKyAgIHNpZ25pZmljYW50IGJ5dGUg
Zmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwpLiAqLworI2lmIGRl
ZmluZWQgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxECisjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFO
X18KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2Vsc2UKKyMgaWZuZGVm
IFdPUkRTX0JJR0VORElBTgorLyogIyAgdW5kZWYgV09SRFNfQklHRU5ESUFOICovCisjIGVuZGlm
CisjZW5kaWYKKworCisjaWZkZWYgSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUKKyNp
ZmRlZiBMSUJGRklfQVNNCisjZGVmaW5lIEZGSV9ISURERU4obmFtZSkgLmhpZGRlbiBuYW1lCisj
ZWxzZQorI2RlZmluZSBGRklfSElEREVOIF9fYXR0cmlidXRlX18gKCh2aXNpYmlsaXR5ICgiaGlk
ZGVuIikpKQorI2VuZGlmCisjZWxzZQorI2lmZGVmIExJQkZGSV9BU00KKyNkZWZpbmUgRkZJX0hJ
RERFTihuYW1lKQorI2Vsc2UKKyNkZWZpbmUgRkZJX0hJRERFTgorI2VuZGlmCisjZW5kaWYKKwot
LSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOVx-0001SP-Nm; Mon, 23 Sep 2019 13:36:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOVx-0001SC-3V
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:29 +0000
X-Inumbo-ID: 23b10258-de07-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 23b10258-de07-11e9-978d-bc764e2007e4;
 Mon, 23 Sep 2019 13:36:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5F23BF2013;
 Mon, 23 Sep 2019 15:36:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id zZTsF0mk5kzD; Mon, 23 Sep 2019 15:36:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3001AF2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:36:23 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:04 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:43 +0200
Message-ID: <20190923133544.26927-9-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 08/14] libgo: Add patches to
 enable runtime
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <charalampos.mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgoK
bGliZ28gdXNlcyBiYWNrdHJhY2tpbmcgYnV0IGl0IGxlYWRzIHRvIHBhZ2UgZmF1bHRzLiBGb3Ig
dGhlIHRpbWUgYmVpbmcKaXQgaXMgZGlzYWJsZWQgYnV0IGl0IHNob3VsZCBiZSByZXZpc2l0ZWQg
aW4gdGhlIGZ1dHVyZS4KClRoZSBzZWNvbmQgcGF0Y2ggZGVjcmVhc2VzIHRoZSBhbW91bnQgb2Yg
bWVtb3J5IG1hcHMsIGNhdXNlIGl0IHdhcwpleGNlZWRpbmcgMUcuCgpBdCBsYXN0IEdvIHVzZXMg
Y29udGV4dCBzd2l0Y2hpbmcgdG8gbWFuYWdlIGdvcm91dGluZXMuIFRoaXMgcGF0Y2ggYWRkCnNv
bWUgY2hhbmdlcyB0byB0aGUgd2F5IGNvbnRleHRzIGFyZSBoYW5kbGVkIHNvIHRoZXkgY2FuIGJl
IGNvbXBhdGlibGUKd2l0aCB0aHJlYWRpbmcgaW4gVW5pa3JhZnQuCgpTaWduZWQtb2ZmLWJ5OiBD
aGFyYWxhbXBvcyBNYWluYXMgPGNoYXJhbGFtcG9zLm1haW5hc0BuZWNsYWIuZXU+Ci0tLQogTWFr
ZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIgKy0KIHBhdGNo
ZXMvMDAwMy1saWJnby1EaXNhYmxlLWJhY2t0cmFjaW5nLnBhdGNoICB8IDI4ICsrKysrKysrKwog
Li4uMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1zaXplLnBhdGNoIHwgMjcgKysrKysr
KysrCiAuLi4vMDAwNS1saWJnby1Vc2Utb3VyLWNvbnRleHQtbG9naWMucGF0Y2ggICAgfCA1NyAr
KysrKysrKysrKysrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQsIDExMyBpbnNlcnRpb25zKCspLCAx
IGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAzLWxpYmdvLURpc2Fi
bGUtYmFja3RyYWNpbmcucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDQtbGli
Z28tUmVkdWNlLW1heGltdW0tbWVtb3J5LXNpemUucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBw
YXRjaGVzLzAwMDUtbGliZ28tVXNlLW91ci1jb250ZXh0LWxvZ2ljLnBhdGNoCgpkaWZmIC0tZ2l0
IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awppbmRleCA3ZGY3NzVkLi45MjQ1NDQ4IDEwMDY0
NAotLS0gYS9NYWtlZmlsZS51aworKysgYi9NYWtlZmlsZS51awpAQCAtMTMyLDcgKzEzMiw3IEBA
IExJQkdPX0NJTkNMVURFUy15ICA9ICQoTElCR09fQ09NTU9OX0lOQ0xVREVTLXkpCiAKIExJQkdP
X0NGTEFHUy15ICs9IC1ESEFWRV9DT05GSUdfSCAtRF9JTkNMVURFX01BTExPQ19IXyBcCiAJLWZl
eGNlcHRpb25zIC1mbm9uLWNhbGwtZXhjZXB0aW9ucyAtZnBsYW45LWV4dGVuc2lvbnMgLWZzcGxp
dC1zdGFjayBcCi0JLVdhbGwgLVdleHRyYSAtV3dyaXRlLXN0cmluZ3MgLVdjYXN0LXF1YWwgXAor
CS1XYWxsIC1XZXh0cmEgLVd3cml0ZS1zdHJpbmdzIC1XY2FzdC1xdWFsIC1Xbm8tdW51c2VkLWZ1
bmN0aW9uIFwKIAktbWlubGluZS1hbGwtc3RyaW5nb3BzIFwKIAktRF9HTlVfU09VUkNFIC1EX0xB
UkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCBcCiAJLWZuby1zcGxpdC1zdGFj
awpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy8wMDAzLWxpYmdvLURpc2FibGUtYmFja3RyYWNpbmcucGF0
Y2ggYi9wYXRjaGVzLzAwMDMtbGliZ28tRGlzYWJsZS1iYWNrdHJhY2luZy5wYXRjaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTk0MzYzCi0tLSAvZGV2L251bGwKKysrIGIv
cGF0Y2hlcy8wMDAzLWxpYmdvLURpc2FibGUtYmFja3RyYWNpbmcucGF0Y2gKQEAgLTAsMCArMSwy
OCBAQAorRnJvbSAxNzNiMDdkYjNiODVkNTY1ZDY1MGU5MzY4MTMyZTMxMTYxN2VhM2YxIE1vbiBT
ZXAgMTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXBAZ21haWwu
Y29tPgorRGF0ZTogV2VkLCAyMSBBdWcgMjAxOSAxNzowMzoyNSArMDMwMAorU3ViamVjdDogW1BB
VENIIDEvM10gbGliZ286IERpc2FibGUgYmFja3RyYWNpbmcKKworU2lnbmVkLW9mZi1ieTogQ2hh
cmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgorLS0tCisgbGli
Z28vcnVudGltZS9nby1jYWxsZXJzLmMgfCA0ICsrLS0KKyAxIGZpbGUgY2hhbmdlZCwgMiBpbnNl
cnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ28vcnVudGltZS9n
by1jYWxsZXJzLmMgYi9saWJnby9ydW50aW1lL2dvLWNhbGxlcnMuYworaW5kZXggMGMxYzYwMzE0
Li5hODBiYzU2ZjUgMTAwNjQ0CistLS0gYS9saWJnby9ydW50aW1lL2dvLWNhbGxlcnMuYworKysr
IGIvbGliZ28vcnVudGltZS9nby1jYWxsZXJzLmMKK0BAIC0xNjcsOCArMTY3LDggQEAgcnVudGlt
ZV9jYWxsZXJzIChpbnQzMiBza2lwLCBMb2NhdGlvbiAqbG9jYnVmLCBpbnQzMiBtLCBib29sIGtl
ZXBfdGh1bmtzKQorICAgZGF0YS5tYXggPSBtOworICAgZGF0YS5rZWVwX3RodW5rcyA9IGtlZXBf
dGh1bmtzOworICAgcnVudGltZV94YWRkICgmcnVudGltZV9pbl9jYWxsZXJzLCAxKTsKKy0gIGJh
Y2t0cmFjZV9mdWxsIChfX2dvX2dldF9iYWNrdHJhY2Vfc3RhdGUgKCksIDAsIGNhbGxiYWNrLCBl
cnJvcl9jYWxsYmFjaywKKy0JCSAgJmRhdGEpOworKy8vICBiYWNrdHJhY2VfZnVsbCAoX19nb19n
ZXRfYmFja3RyYWNlX3N0YXRlICgpLCAwLCBjYWxsYmFjaywgZXJyb3JfY2FsbGJhY2ssCisrLy8J
CSAgJmRhdGEpOworICAgcnVudGltZV94YWRkICgmcnVudGltZV9pbl9jYWxsZXJzLCAtMSk7Cisg
ICByZXR1cm4gZGF0YS5pbmRleDsKKyB9CistLQorMi4yMC4xCisKZGlmZiAtLWdpdCBhL3BhdGNo
ZXMvMDAwNC1saWJnby1SZWR1Y2UtbWF4aW11bS1tZW1vcnktc2l6ZS5wYXRjaCBiL3BhdGNoZXMv
MDAwNC1saWJnby1SZWR1Y2UtbWF4aW11bS1tZW1vcnktc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmJmNGVhCi0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2hl
cy8wMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1zaXplLnBhdGNoCkBAIC0wLDAgKzEs
MjcgQEAKK0Zyb20gY2FhZWY3MzllY2Y0ZTg3Yjk5OTQ3NDdjYmU2YzdlNjI3Yzg2NzhkOSBNb24g
U2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwQGdtYWls
LmNvbT4KK0RhdGU6IFdlZCwgMjEgQXVnIDIwMTkgMTc6MDM6NDkgKzAzMDAKK1N1YmplY3Q6IFtQ
QVRDSCAyLzNdIGxpYmdvOiBSZWR1Y2UgbWF4aW11bSBtZW1vcnkgc2l6ZQorCitTaWduZWQtb2Zm
LWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPGNoYXJhbGFtcG9zLm1haW5hc0BuZWNsYWIuZXU+Cist
LS0KKyBsaWJnby9ydW50aW1lL21hbGxvYy5nb2MgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAy
IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKKworZGlmZiAtLWdpdCBhL2xpYmdvL3J1bnRp
bWUvbWFsbG9jLmdvYyBiL2xpYmdvL3J1bnRpbWUvbWFsbG9jLmdvYworaW5kZXggMjMyMjEwZmM0
Li4yMTFiODQ3NDggMTAwNjQ0CistLS0gYS9saWJnby9ydW50aW1lL21hbGxvYy5nb2MKKysrKyBi
L2xpYmdvL3J1bnRpbWUvbWFsbG9jLmdvYworQEAgLTQ0OCw3ICs0NDgsOCBAQCBydW50aW1lX21h
bGxvY2luaXQodm9pZCkKKyAJCS8vIGJ1dCBpdCBoYXJkbHkgbWF0dGVyczogZTAgMDAgaXMgbm90
IHZhbGlkIFVURi04IGVpdGhlci4KKyAJCS8vCisgCQkvLyBJZiB0aGlzIGZhaWxzIHdlIGZhbGwg
YmFjayB0byB0aGUgMzIgYml0IG1lbW9yeSBtZWNoYW5pc20KKy0JCWFyZW5hX3NpemUgPSBNYXhN
ZW07CisrCQkvL2FyZW5hX3NpemUgPSBNYXhNZW07CisrCQlhcmVuYV9zaXplID0gMTA0ODU3NjAw
OworIAkJYml0bWFwX3NpemUgPSBhcmVuYV9zaXplIC8gKHNpemVvZih2b2lkKikqOC80KTsKKyAJ
CXNwYW5zX3NpemUgPSBhcmVuYV9zaXplIC8gUGFnZVNpemUgKiBzaXplb2YocnVudGltZV9taGVh
cC5zcGFuc1swXSk7CisgCQlzcGFuc19zaXplID0gUk9VTkQoc3BhbnNfc2l6ZSwgUGFnZVNpemUp
OworLS0KKzIuMjAuMQorCmRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDUtbGliZ28tVXNlLW91ci1j
b250ZXh0LWxvZ2ljLnBhdGNoIGIvcGF0Y2hlcy8wMDA1LWxpYmdvLVVzZS1vdXItY29udGV4dC1s
b2dpYy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzkwNThmCi0t
LSAvZGV2L251bGwKKysrIGIvcGF0Y2hlcy8wMDA1LWxpYmdvLVVzZS1vdXItY29udGV4dC1sb2dp
Yy5wYXRjaApAQCAtMCwwICsxLDU3IEBACitGcm9tIDhlMjJkZWRmMmRmNzI1ZDI1NjIzNWQ5YmQy
MmZiOTdmMjkwZmQxMmQgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9tOiBDb3N0aW4gTHVw
dSA8Y29zdGluLmx1cEBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIxIEF1ZyAyMDE5IDE3OjA0OjEz
ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMy8zXSBsaWJnbzogVXNlIG91ciBjb250ZXh0IGxvZ2lj
CisKK1NpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFz
QG5lY2xhYi5ldT4KKy0tLQorIGxpYmdvL3J1bnRpbWUvcHJvYy5jIHwgMTIgKysrKysrKysrLS0t
CisgMSBmaWxlIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKKworZGlm
ZiAtLWdpdCBhL2xpYmdvL3J1bnRpbWUvcHJvYy5jIGIvbGliZ28vcnVudGltZS9wcm9jLmMKK2lu
ZGV4IDA2YTljMmFkNi4uZThhNDMyNzJlIDEwMDY0NAorLS0tIGEvbGliZ28vcnVudGltZS9wcm9j
LmMKKysrKyBiL2xpYmdvL3J1bnRpbWUvcHJvYy5jCitAQCAtNDMsNiArNDMsMTAgQEAgZXh0ZXJu
IHZvaWQgX19zcGxpdHN0YWNrX2Jsb2NrX3NpZ25hbHNfY29udGV4dCAodm9pZCAqY29udGV4dFsx
MF0sIGludCAqLAorCisgI2VuZGlmCisKKytleHRlcm4gc2l6ZV90IGdldF9zdGFja19zaXplKCk7
CisrZXh0ZXJuIHZvaWQgbWFrZWNvbnRleHQxKHVjb250ZXh0X3QgKiwgdm9pZCAqLCBpbnQpOwor
K2V4dGVybiB2b2lkICphbGxvY19zdGFjaygpOworKworICNpZm5kZWYgUFRIUkVBRF9TVEFDS19N
SU4KKyAjIGRlZmluZSBQVEhSRUFEX1NUQUNLX01JTiA4MTkyCisgI2VuZGlmCitAQCAtODMxLDcg
KzgzNSw3IEBAIG1ha2VHQ29udGV4dChHKiBncCwgYnl0ZSogc3AsIHVpbnRwdHIgc3BzaXplKSB7
CisgCWdldGNvbnRleHQodWMpOworIAl1Yy0+dWNfc3RhY2suc3Nfc3AgPSBzcDsKKyAJdWMtPnVj
X3N0YWNrLnNzX3NpemUgPSAoc2l6ZV90KXNwc2l6ZTsKKy0JbWFrZWNvbnRleHQodWMsIGtpY2tv
ZmYsIDApOworKwltYWtlY29udGV4dDEodWMsIGtpY2tvZmYsIDApOworIH0KKworIC8vIENyZWF0
ZSBhIG5ldyBtLiAgSXQgd2lsbCBzdGFydCBvZmYgd2l0aCBhIGNhbGwgdG8gZm4sIG9yIGVsc2Ug
dGhlIHNjaGVkdWxlci4KK0BAIC0xMzQ4LDcgKzEzNTIsOCBAQCBydW50aW1lX21hbGcoYm9vbCBh
bGxvY2F0ZXN0YWNrLCBib29sIHNpZ25hbHN0YWNrLCBieXRlKiogcmV0X3N0YWNrLCB1aW50cHRy
KiByZQorIAl9CisgCW5ld2cgPSBhbGxvY2coKTsKKyAJaWYoYWxsb2NhdGVzdGFjaykgeworLQkJ
c3RhY2tzaXplID0gU3RhY2tNaW47CisrCQkvL3N0YWNrc2l6ZSA9IFN0YWNrTWluOworKwkJc3Rh
Y2tzaXplID0gZ2V0X3N0YWNrX3NpemUoKTsKKyAJCWlmKHNpZ25hbHN0YWNrKSB7CisgCQkJc3Rh
Y2tzaXplID0gMzIgKiAxMDI0OyAvLyBPUyBYIHdhbnRzID49IDhLLCBHTlUvTGludXggPj0gMksK
KyAjaWZkZWYgU0lHU1RLU1oKK0BAIC0xMzcyLDcgKzEzNzcsOCBAQCBydW50aW1lX21hbGcoYm9v
bCBhbGxvY2F0ZXN0YWNrLCBib29sIHNpZ25hbHN0YWNrLCBieXRlKiogcmV0X3N0YWNrLCB1aW50
cHRyKiByZQorICAgICAgICAgICAgICAgICAvLyAzMi1iaXQgbW9kZSwgdGhlIEdvIGFsbG9jYXRp
b24gc3BhY2UgaXMgYWxsIG9mCisgICAgICAgICAgICAgICAgIC8vIG1lbW9yeSBhbnlob3cuCisg
CQlpZihzaXplb2Yodm9pZCopID09IDgpIHsKKy0JCQl2b2lkICpwID0gcnVudGltZV9TeXNBbGxv
YyhzdGFja3NpemUsICZtc3RhdHMoKS0+b3RoZXJfc3lzKTsKKysJCQkvL3ZvaWQgKnAgPSBydW50
aW1lX1N5c0FsbG9jKHN0YWNrc2l6ZSwgJm1zdGF0cygpLT5vdGhlcl9zeXMpOworKwkJCXZvaWQg
KnAgPSBhbGxvY19zdGFjaygpOworIAkJCWlmKHAgPT0gbmlsKQorIAkJCQlydW50aW1lX3Rocm93
KCJydW50aW1lOiBjYW5ub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBnb3JvdXRpbmUgc3RhY2siKTsK
KyAJCQkqcmV0X3N0YWNrID0gKGJ5dGUqKXA7CistLQorMi4yMC4xCisKLS0gCjIuMTcuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOVy-0001Sz-QP; Mon, 23 Sep 2019 13:36:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOVx-0001SS-RP
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:29 +0000
X-Inumbo-ID: 21bfe7a3-de07-11e9-95fd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 21bfe7a3-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:36:24 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4A081F2014;
 Mon, 23 Sep 2019 15:36:23 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id EiCFfhAe3aA8; Mon, 23 Sep 2019 15:36:23 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 20F12F2012;
 Mon, 23 Sep 2019 15:36:19 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:03 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:40 +0200
Message-ID: <20190923133544.26927-6-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 05/14] libgo: Introduce library
 port
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <charalampos.mainas@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgoK
VGhpcyBwb3J0IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGNvbmZpZy5oIGFuZCBydW50aW1lLmlu
YyBoZWFkZXJzLgpBbm90aGVyIG9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gZ2VuZXJhdGUgdGhl
bSBkdXJpbmcgdGhlIGJ1aWxkLgoKVGhlIG1tX21hbGxvYy5oIGlzIGp1c3QgYSBtb2NrIGhlYWRl
ciBuZWVkZWQgYnkgdGhlIGJ1aWxkLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFz
IDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVw
dSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDEwICsKIE1ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgIHwg
IDk3ICsrKwogbGliZ28vZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmggICAgfCA0MTUgKysrKysr
KysrKysrCiBsaWJnby9nZW5lcmF0ZWQvaW5jbHVkZS9ydW50aW1lLmluYyB8IDk4OCArKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiBsaWJnby9pbmNsdWRlL21tX21hbGxvYy5oICAgICAgICAg
ICB8ICAgMAogNSBmaWxlcyBjaGFuZ2VkLCAxNTEwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBsaWJnby9nZW5lcmF0ZWQvaW5jbHVkZS9jb25maWcuaAogY3JlYXRlIG1vZGUgMTAw
NjQ0IGxpYmdvL2dlbmVyYXRlZC9pbmNsdWRlL3J1bnRpbWUuaW5jCiBjcmVhdGUgbW9kZSAxMDA2
NDQgbGliZ28vaW5jbHVkZS9tbV9tYWxsb2MuaAoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0Nv
bmZpZy51awppbmRleCBhY2UwNzJiLi5lZGI2YTAwIDEwMDY0NAotLS0gYS9Db25maWcudWsKKysr
IGIvQ29uZmlnLnVrCkBAIC04LDYgKzgsMTYgQEAgbWVudWNvbmZpZyBMSUJHQ0MKIAogaWYgTElC
R0NDCiAKK2NvbmZpZyBMSUJHTworCWJvb2wgImxpYmdvIC0gUnVudGltZSBzdXBwb3J0IGxpYnJh
cnkgZm9yIHRoZSBHbyBwcm9ncmFtbWluZyBsYW5ndWFnZSIKKwlkZWZhdWx0IG4KKwlzZWxlY3Qg
TElCTFdJUAorCXNlbGVjdCBMSUJVQ09OVEVYVAorCXNlbGVjdCBMSUJCQUNLVFJBQ0UKKwlzZWxl
Y3QgTElCRkZJCitpZiBMSUJHTworZW5kaWYKKwogY29uZmlnIExJQkJBQ0tUUkFDRQogCWJvb2wg
ImxpYmJhY2t0cmFjZSBsaWJyYXJ5IgogCWRlZmF1bHQgbgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUu
dWsgYi9NYWtlZmlsZS51awppbmRleCAxMWY1YTIzLi41OTAyNGFlIDEwMDY0NAotLS0gYS9NYWtl
ZmlsZS51aworKysgYi9NYWtlZmlsZS51awpAQCAtMTE2LDMgKzExNiwxMDAgQEAgTElCRkZJX1NS
Q1MtJChDT05GSUdfQVJDSF9YODZfNjQpICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3g4Ni91
bml4NjQuUwogCiBMSUJGRklfRVhQT1JUUyA9ICQoTElCR0NDX0JBU0UpL2xpYmZmaS9leHBvcnRz
eW1zLnVrCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGxpYmdvIGNvZGUKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCitMSUJHT19DT01NT05fSU5DTFVERVMteSA9IC1JJChMSUJHQ0NfQkFT
RSkvbGliZ28vaW5jbHVkZSAtSSQoTElCR0NDX0JBU0UpL2xpYmdvL2dlbmVyYXRlZC9pbmNsdWRl
IFwKKwktSSQoTElCR09fRVhUUkFDVEVEKSAtSSQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lIFwK
KwktSSQoTElCR0NDX0VYVFJBQ1RFRCkvbGliZmZpL2luY2x1ZGUgLUkkKExJQkdDQ19CQVNFKS9s
aWJmZmkvaW5jbHVkZSBcCisJLUkkKExJQkdDQ19FWFRSQUNURUQpL2xpYmdjYyBcCisJLUkkKExJ
QkJBQ0tUUkFDRV9FWFRSQUNURUQpIFwKKwktSSQoTElCR0NDX0VYVFJBQ1RFRCkvZ2NjL2luY2x1
ZGUKK0xJQkdPX0NPTU1PTl9JTkNMVURFUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0gLUkkKExJ
QkZGSV9FWFRSQUNURUQpL3NyYy94ODYKK0xJQkdPX0NPTU1PTl9JTkNMVURFUy0kKENPTkZJR19B
UkNIX1g4Nl82NCkgKz0gLUkkKExJQkdDQ19FWFRSQUNURUQpL2djYy9jb25maWcvaTM4NgorTElC
R09fQVNJTkNMVURFUy15ID0gJChMSUJHT19DT01NT05fSU5DTFVERVMteSkKK0xJQkdPX0NJTkNM
VURFUy15ICA9ICQoTElCR09fQ09NTU9OX0lOQ0xVREVTLXkpCisKK0xJQkdPX0NGTEFHUy15ICs9
IC1ESEFWRV9DT05GSUdfSCAtRF9JTkNMVURFX01BTExPQ19IXyBcCisJLWZleGNlcHRpb25zIC1m
bm9uLWNhbGwtZXhjZXB0aW9ucyAtZnBsYW45LWV4dGVuc2lvbnMgLWZzcGxpdC1zdGFjayBcCisJ
LVdhbGwgLVdleHRyYSAtV3dyaXRlLXN0cmluZ3MgLVdjYXN0LXF1YWwgXAorCS1taW5saW5lLWFs
bC1zdHJpbmdvcHMgXAorCS1EX0dOVV9TT1VSQ0UgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxF
X09GRlNFVF9CSVRTPTY0IFwKKwktZm5vLXNwbGl0LXN0YWNrCitMSUJHT19DRkxBR1MteSArPSAt
V25vLWNhc3QtcXVhbCAtV25vLXVudXNlZC12YWx1ZQorCitMSUJHT19TUkNTLXkgKz0gJChMSUJH
T19FWFRSQUNURUQpL2dvL2J5dGVzL2luZGV4Ynl0ZS5jfGJ5dGVzCitMSUJHT19TUkNTLXkgKz0g
JChMSUJHT19FWFRSQUNURUQpL2dvL2xvZy9zeXNsb2cvc3lzbG9nX2MuYworTElCR09fU1JDUy15
ICs9ICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWZsZWN0L21ha2VmdW5jX2ZmaV9jLmMKK0xJQkdP
X1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9pbnRlcm5hbC9hdG9taWMv
YXRvbWljLmN8cnVudGltZS5pbnRlcm5hbAorTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9nby9zdHJpbmdzL2luZGV4Ynl0ZS5jfHN0cmluZ3MKK0xJQkdPX1NSQ1MteSArPSAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vc3luYy9hdG9taWMvYXRvbWljLmN8c3luYworTElCR09fU1JDUy15
ICs9ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2Nsb25lX2xpbnV4LmMKK0xJQkdPX1NS
Q1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJuby5jCitMSUJHT19TUkNT
LXkgKz0gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc2lnbmFtZS5jCitMSUJHT19TUkNT
LXkgKz0gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvd2FpdC5jCitMSUJHT19TUkNTLXkg
Kz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvYWVzaGFzaC5jCitMSUJHT19TUkNTLXkgKz0g
JChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZW52X3Bvc2l4LmMKK0xJQkdPX1NSQ1MteSArPSAk
KExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nZXRuY3B1LWxpbnV4LmMKK0xJQkdPX1NSQ1MteSAr
PSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1hc3NlcnQuYworTElCR09fU1JDUy15ICs9
ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLWJyZWFrcG9pbnQuYworTElCR09fU1JDUy15
ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLWNhbGxlci5jCitMSUJHT19TUkNTLXkg
Kz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tY2FsbGVycy5jCitMSUJHT19TUkNTLXkg
Kz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tY2Rpdi5jCitMSUJHT19TUkNTLXkgKz0g
JChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tY2dvLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJ
QkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1jb25zdHJ1Y3QtbWFwLmMKK0xJQkdPX1NSQ1MteSAr
PSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1mZmkuYworTElCR09fU1JDUy15ICs9ICQo
TElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLWZpZWxkdHJhY2suYworTElCR09fU1JDUy15ICs9
ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLW1hdGhlcnIuYworTElCR09fU1JDUy15ICs9
ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLW1lbWNsci5jCitMSUJHT19TUkNTLXkgKz0g
JChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tbWVtY21wLmMKK0xJQkdPX1NSQ1MteSArPSAk
KExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1tZW1lcXVhbC5jCitMSUJHT19TUkNTLXkgKz0g
JChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tbWVtbW92ZS5jCitMSUJHT19TUkNTLXkgKz0g
JChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tbmFub3RpbWUuYworTElCR09fU1JDUy15ICs9
ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLW5ldy5jCitMSUJHT19TUkNTLXkgKz0gJChM
SUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tbm9zeXMuYworTElCR09fU1JDUy15ICs9ICQoTElC
R09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLW5vdy5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19F
WFRSQUNURUQpL3J1bnRpbWUvZ28tcmVmbGVjdC1jYWxsLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJ
QkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1ydW50aW1lLWVycm9yLmMKK0xJQkdPX1NSQ1MteSAr
PSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1zZXRlbnYuYworTElCR09fU1JDUy15ICs9
ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLXNpZ25hbC5jCitMSUJHT19TUkNTLXkgKz0g
JChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tc3Ryc2xpY2UuYworTElCR09fU1JDUy15ICs9
ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLXR5cGVkZXNjLWVxdWFsLmMKK0xJQkdPX1NS
Q1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby11bnNhZmUtbmV3YXJyYXkuYwor
TElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLXVuc2FmZS1uZXcu
YworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLXVuc2FmZS1w
b2ludGVyLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby11
bnNldGVudi5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28t
dW53aW5kLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby12
YXJhcmdzLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9oZWFw
ZHVtcC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvbWNhY2hl
LmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9tY2VudHJhbC5j
CitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvbWVtLmMKK0xJQkdP
X1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9tZml4YWxsb2MuYworTElCR09f
U1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL21nYzAuYworTElCR09fU1JDUy15
ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL21oZWFwLmMKK0xJQkdPX1NSQ1MteSArPSAk
KExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9tc2l6ZS5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJH
T19FWFRSQUNURUQpL3J1bnRpbWUvcGFuaWMuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhU
UkFDVEVEKS9ydW50aW1lL3BhcmZvci5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNU
RUQpL3J1bnRpbWUvcHJpbnQuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9y
dW50aW1lL3Byb2MuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1l
L3J1bnRpbWVfYy5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUv
dGhyZWFkLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS90aHJl
YWQtbGludXguYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL3lp
ZWxkLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1tYWlu
LmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvc3lzaW5mby5jCitMSUJHT19T
UkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL21hbGxvYy5jICMgZ2VuZXJhdGVkCisKKyMgR2Vu
ZXJhdGUgZ28yYyB0b29sCiskKExJQkdPX0JVSUxEKS9nb2MyYzogJChMSUJHQ0NfQlVJTEQpLy5v
cmlnaW4KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR0VOLGxpYmdvOiAkKG5vdGRpciAkQCksIFwKKwkJ
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIGdjYyAtbyAkQCAkKExJQkdPX0VYVFJBQ1RFRCkvcnVu
dGltZS9nb2MyYy5jKQorCisjIEdlbmVyYXRlIG1hbGxvYy5jCiskKExJQkdPX0VYVFJBQ1RFRCkv
bWFsbG9jLmM6ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL21hbGxvYy5nb2MgJChMSUJHT19C
VUlMRCkvZ29jMmMKKwkkKGNhbGwgdmVyYm9zZV9jbWQsR0VOLGxpYmdvOiAkKG5vdGRpciAkQCks
IFwKKwkJY2QgJChMSUJHT19FWFRSQUNURUQpICYmICQoTElCR09fQlVJTEQpL2dvYzJjICQ8ID4g
JEApCisKK1VLX1BSRVBBUkUgKz0gJChMSUJHT19CVUlMRCkvZ29jMmMgJChMSUJHT19FWFRSQUNU
RUQpL21hbGxvYy5jCisKZGlmZiAtLWdpdCBhL2xpYmdvL2dlbmVyYXRlZC9pbmNsdWRlL2NvbmZp
Zy5oIGIvbGliZ28vZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uN2M0NzNmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvL2dlbmVy
YXRlZC9pbmNsdWRlL2NvbmZpZy5oCkBAIC0wLDAgKzEsNDE1IEBACisvKiBjb25maWcuaC4gIEdl
bmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcuaC5p
bi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyog
RGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAqLwor
LyogI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAqLworCisvKiBEZWZpbmUgdG8gdGhl
IGZsYWdzIG5lZWRlZCBmb3IgdGhlIC5zZWN0aW9uIC5laF9mcmFtZSBkaXJlY3RpdmUuICovCisj
ZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTICJhdyIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBhY2NlcHQ0JyBmdW5jdGlvbi4gKi8KKy8vI2RlZmluZSBIQVZFX0FDQ0VQVDQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjb3NsJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9BQ09TTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNpbmwn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FTSU5MIDEKKworLyogRGVmaW5lIGlmIHlvdXIg
YXNzZW1ibGVyIHN1cHBvcnRzIEdOVSBjb21kYXQgZ3JvdXAgc3ludGF4LiAqLworI2RlZmluZSBI
QVZFX0FTX0NPTURBVF9HQVMgMQorCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9y
dHMgdW53aW5kIHNlY3Rpb24gdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9BU19YODZfNjRfVU5XSU5E
X1NFQ1RJT05fVFlQRSAxCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBB
RVMgaW5zdHJ1Y3Rpb25zLiAqLworLy8jZGVmaW5lIEhBVkVfQVNfWDg2X0FFUyAxCisKKy8qIERl
ZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBQQyByZWxhdGl2ZSByZWxvY3MuICovCisj
ZGVmaW5lIEhBVkVfQVNfWDg2X1BDUkVMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBhdGFuMmwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FUQU4yTCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXRhbmwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBI
QVZFX0FUQU5MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb3NsJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DT1NMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbF9pdGVyYXRlX3BoZHInIGZ1bmN0
aW9uLiAqLworI2RlZmluZSBIQVZFX0RMX0lURVJBVEVfUEhEUiAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgZHVwMycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRFVQMyAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXBvbGxfY3JlYXRlMScgZnVuY3Rp
b24uICovCisvLyNkZWZpbmUgSEFWRV9FUE9MTF9DUkVBVEUxIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGBleHBsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FWFBMIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBleHBtMWwnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX0VYUE0xTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
ZmFjY2Vzc2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GQUNDRVNTQVQgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZhbGxvY2F0ZScgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfRkFMTE9DQVRFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBm
Y2htb2RhdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNITU9EQVQgMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZjaG93bmF0JyBmdW5jdGlvbi4gKi8KKy8vI2RlZmlu
ZSBIQVZFX0ZDSE9XTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmdXRp
bWVzYXQnIGZ1bmN0aW9uLiAqLworLy8jZGVmaW5lIEhBVkVfRlVUSU1FU0FUIDEKKworLyogRGVm
aW5lIGlmIF9VbndpbmRfR2V0SVBJbmZvIGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgSEFWRV9H
RVRJUElORk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHhhdHRyJyBm
dW5jdGlvbi4gKi8KKy8vI2RlZmluZSBIQVZFX0dFVFhBVFRSIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X2FkZF93YXRjaCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfSU5PVElGWV9BRERfV0FUQ0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYGlub3RpZnlfaW5pdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU5PVElGWV9JTklU
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X2luaXQxJyBmdW5j
dGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTk9USUZZX0lOSVQxIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X3JtX3dhdGNoJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUg
SEFWRV9JTk9USUZZX1JNX1dBVENIIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsZGV4cGwnIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX0xERVhQTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
bGludXgvZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9MSU5VWF9FVEhF
Ul9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvZmlsdGVyLmg+
IGhlYWRlciBmaWxlLiAqLworLy8jZGVmaW5lIEhBVkVfTElOVVhfRklMVEVSX0ggMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2ZzLmg+IGhlYWRlciBmaWxlLiAqLwor
Ly8jZGVmaW5lIEhBVkVfTElOVVhfRlNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8bGludXgvaWZfYWRkci5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX0xJ
TlVYX0lGX0FERFJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgv
aWZfZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9JRl9FVEhF
Ul9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9pZl90dW4uaD4g
aGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9JRl9UVU5fSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvbmV0bGluay5oPiBoZWFkZXIgZmlsZS4g
Ki8KKy8vI2RlZmluZSBIQVZFX0xJTlVYX05FVExJTktfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8bGludXgvcHRyYWNlLmg+IGhlYWRlciBmaWxlLiAqLworLy8jZGVmaW5l
IEhBVkVfTElOVVhfUFRSQUNFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PGxpbnV4L3JlYm9vdC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX0xJTlVYX1JF
Qk9PVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9ydG5ldGxp
bmsuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9SVE5FVExJTktfSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlzdHhhdHRyJyBmdW5jdGlvbi4g
Ki8KKy8vI2RlZmluZSBIQVZFX0xJU1RYQVRUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHRoZSBz
eXN0ZW0gaGFzIHRoZSB0eXBlIGBsb2ZmX3QnLiAqLworI2RlZmluZSBIQVZFX0xPRkZfVCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMTBsJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9MT0cxMEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxv
ZzFwbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBsb2dsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9MT0dM
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYXRoZXJyJyBmdW5jdGlvbi4g
Ki8KKy8qICN1bmRlZiBIQVZFX01BVEhFUlIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0gg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1pbmNvcmUnIGZ1bmN0aW9uLiAq
LworLy8jZGVmaW5lIEhBVkVfTUlOQ09SRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSBgbWtkaXJhdCcgZnVuY3Rpb24uICovCisvLyNkZWZpbmUgSEFWRV9NS0RJUkFUIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta25vZGF0JyBmdW5jdGlvbi4gKi8KKy8v
I2RlZmluZSBIQVZFX01LTk9EQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PG5ldGluZXQvaWNtcDYuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9ORVRJTkVU
X0lDTVA2X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWZf
ZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lGX0VUSEVS
X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW5fc3lzdC5o
PiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX05FVElORVRfSU5fU1lTVF9IICovCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcC5oPiBoZWFkZXIgZmls
ZS4gKi8KKy8vI2RlZmluZSBIQVZFX05FVElORVRfSVBfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcF9tcm91dGUuaD4gaGVhZGVyIGZpbGUuICovCisvKiAj
dW5kZWYgSEFWRV9ORVRJTkVUX0lQX01ST1VURV9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8bmV0cGFja2V0L3BhY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmlu
ZSBIQVZFX05FVFBBQ0tFVF9QQUNLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8bmV0L2lmX2FycC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX05FVF9J
Rl9BUlBfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2lmLmg+IGhl
YWRlciBmaWxlLiAqLworLy8jZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9yb3V0ZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmlu
ZSBIQVZFX05FVF9ST1VURV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMg
dGhlIHR5cGUgYG9mZjY0X3QnLiAqLworI2RlZmluZSBIQVZFX09GRjY0X1QgMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW42NCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfT1BFTjY0IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBvcGVuYXQnIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX09QRU5BVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLworLy8jZGVmaW5lIEhBVkVfUElQRTIgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvcnQuaD4gaGVhZGVyIGZpbGUuICov
CisvKiAjdW5kZWYgSEFWRV9QT1JUX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGByZW1vdmV4YXR0cicgZnVuY3Rpb24uICovCisvLyNkZWZpbmUgSEFWRV9SRU1PVkVYQVRU
UiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1bmN0aW9u
LiAqLworLy8jZGVmaW5lIEhBVkVfUkVOQU1FQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHNjaGVkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NDSEVEX0gg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNlbWFwaG9yZS5oPiBoZWFkZXIg
ZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TRU1BUEhPUkVfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgc2VtX3RpbWVkd2FpdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
U0VNX1RJTUVEV0FJVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0ZW52
JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRFTlYgMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHNldHhhdHRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRY
QVRUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lubCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfU0lOTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgc3BsaWNlJyBmdW5jdGlvbi4gKi8KKy8vI2RlZmluZSBIQVZFX1NQTElDRSAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLworI2Rl
ZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
dGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLworI2Rl
ZmluZSBIQVZFX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgYHN0cnNpZ25hbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSU0lHTkFMIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgPG1hdGguaD4gZGVmaW5lcyBzdHJ1Y3QgZXhjZXB0aW9uICovCisv
KiAjdW5kZWYgSEFWRV9TVFJVQ1RfRVhDRVBUSU9OICovCisKKy8qIERlZmluZSB0byAxIGlmIHRo
ZSBjb21waWxlciBwcm92aWRlcyB0aGUgX19zeW5jX2FkZF9hbmRfZmV0Y2ggZnVuY3Rpb24gZm9y
CisgICB1aW50NjQgKi8KKyNkZWZpbmUgSEFWRV9TWU5DX0FERF9BTkRfRkVUQ0hfOCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBwcm92aWRlcyB0aGUgX19zeW5jX2Jvb2xfY29t
cGFyZV9hbmRfc3dhcAorICAgZnVuY3Rpb24gZm9yIHVpbnQzMiAqLworI2RlZmluZSBIQVZFX1NZ
TkNfQk9PTF9DT01QQVJFX0FORF9TV0FQXzQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgY29t
cGlsZXIgcHJvdmlkZXMgdGhlIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAKKyAgIGZ1bmN0
aW9uIGZvciB1aW50NjQgKi8KKyNkZWZpbmUgSEFWRV9TWU5DX0JPT0xfQ09NUEFSRV9BTkRfU1dB
UF84IDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBfX3N5
bmNfZmV0Y2hfYW5kX2FkZCBmdW5jdGlvbiBmb3IKKyAgIHVpbnQzMiAqLworI2RlZmluZSBIQVZF
X1NZTkNfRkVUQ0hfQU5EX0FERF80IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBzeW5jX2ZpbGVfcmFuZ2UnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NZTkNfRklMRV9S
QU5HRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzY2FsbC5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNDQUxMX0ggMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHN5cy9lcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBI
QVZFX1NZU19FUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv
ZXZlbnQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfRVZFTlRfSCAqLwor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBmaWxl
LiAqLworLy8jZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8c3lzL2lub3RpZnkuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFW
RV9TWVNfSU5PVElGWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMv
bW1hbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9IIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW91bnQuaD4gaGVhZGVyIGZpbGUuICov
CisjZGVmaW5lIEhBVkVfU1lTX01PVU5UX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy9wcmN0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfUFJD
VExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3B0cmFjZS5oPiBo
ZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfUFRSQUNFX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisjZGVm
aW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NLRVRf
SCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXRmcy5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVEZTX0ggMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9z
eXNjYWxsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TWVNDQUxMX0ggMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zeXNpbmZvLmg+IGhlYWRlciBm
aWxlLiAqLworLy8jZGVmaW5lIEhBVkVfU1lTX1NZU0lORk9fSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWV4Lmg+IGhlYWRlciBmaWxlLiAqLworLy8jZGVmaW5l
IEhBVkVfU1lTX1RJTUVYX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5
cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3VzZXIuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1lTX1VTRVJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lT
X1VUU05BTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Zmcy5o
PiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX1NZU19WRlNfSCAxCisKKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGFubCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVf
VEFOTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGVlJyBmdW5jdGlvbi4g
Ki8KKy8vI2RlZmluZSBIQVZFX1RFRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9IIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmxpbmthdCcgZnVuY3Rpb24uICovCisv
LyNkZWZpbmUgSEFWRV9VTkxJTktBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgdW5zZXRlbnYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOU0VURU5WIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bnNoYXJlJyBmdW5jdGlvbi4gKi8KKy8vI2Rl
ZmluZSBIQVZFX1VOU0hBUkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVz
dGF0Lmg+IGhlYWRlciBmaWxlIGFuZCBpdCB3b3Jrcy4gKi8KKy8qICN1bmRlZiBIQVZFX1VTVEFU
X0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGltZW5zYXQnIGZ1bmN0
aW9uLiAqLworLy8jZGVmaW5lIEhBVkVfVVRJTUVOU0FUIDEKKworLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9VVElN
RV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0NCcgZnVuY3Rpb24u
ICovCisjZGVmaW5lIEhBVkVfV0FJVDQgMQorCisvKiBEZWZpbmUgaWYgdGhlIGxpbmtlciBzdXBw
b3J0IHNwbGl0IHN0YWNrIGFkanVzdG1lbnRzICovCisvKiAjdW5kZWYgTElOS0VSX1NVUFBPUlRT
X1NQTElUX1NUQUNLICovCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGlj
aCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI2RlZmluZSBM
VF9PQkpESVIgIi5saWJzLyIKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisvKiAjdW5kZWYgUEFD
S0FHRSAqLworCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9y
IHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdSRVBP
UlQgIiIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLwor
I2RlZmluZSBQQUNLQUdFX05BTUUgInBhY2thZ2UtdW51c2VkIgorCisvKiBEZWZpbmUgdG8gdGhl
IGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tB
R0VfU1RSSU5HICJwYWNrYWdlLXVudXNlZCB2ZXJzaW9uLXVudXNlZCIKKworLyogRGVmaW5lIHRv
IHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQ
QUNLQUdFX1RBUk5BTUUgImxpYmdvIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3Ig
dGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1VSTCAiIgorCisvKiBEZWZpbmUgdG8g
dGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04g
InZlcnNpb24tdW51c2VkIgorCisvKiBEZWZpbmUgaWYgc2V0Y29udGV4dCBjbG9iYmVycyBUTFMg
dmFyaWFibGVzICovCisvKiAjdW5kZWYgU0VUQ09OVEVYVF9DTE9CQkVSU19UTFMgKi8KKworLyog
VGhlIHNpemUgb2YgYHZvaWQgKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUg
U0laRU9GX1ZPSURfUCA4CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMg
aGVhZGVyIGZpbGVzLiAqLworI2RlZmluZSBTVERDX0hFQURFUlMgMQorCisvKiBEZWZpbmUgaWYg
d2UncmUgdG8gdXNlIGxpYmZmaS4gKi8KKyNkZWZpbmUgVVNFX0xJQkZGSSAxCisKKy8qIERlZmlu
ZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZzcGxpdC1zdGFjayAqLworLy8jZGVmaW5lIFVT
SU5HX1NQTElUX1NUQUNLIDEKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLworLyog
I3VuZGVmIFZFUlNJT04gKi8KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlv
dXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBi
eXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNp
ZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VO
RElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlm
bmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAqLworIyBl
bmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byBgbG9uZyBpbnQnIGlmIDxzeXMvdHlwZXMuaD4g
ZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIG9mZl90ICovCmRpZmYgLS1naXQgYS9saWJn
by9nZW5lcmF0ZWQvaW5jbHVkZS9ydW50aW1lLmluYyBiL2xpYmdvL2dlbmVyYXRlZC9pbmNsdWRl
L3J1bnRpbWUuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjZlNDEK
LS0tIC9kZXYvbnVsbAorKysgYi9saWJnby9nZW5lcmF0ZWQvaW5jbHVkZS9ydW50aW1lLmluYwpA
QCAtMCwwICsxLDk4OCBAQAorI2RlZmluZSBoYXNoUmFuZG9tQnl0ZXMgMTI4CisjZGVmaW5lIG1h
eEFsaWduIDgKKyNkZWZpbmUgaGNoYW5TaXplIDk2CisjZGVmaW5lIG51bUJ1Y2tldHMgMTAyNAor
I2RlZmluZSBsb2dTaXplIDEzMTA3MgorI2RlZmluZSBhc3NvYyA0CisjZGVmaW5lIG1heENQVVBy
b2ZTdGFjayA2NAorI2RlZmluZSBidWNrZXRDbnRCaXRzIDMKKyNkZWZpbmUgYnVja2V0Q250IDgK
KyNkZWZpbmUgbWF4S2V5U2l6ZSAxMjgKKyNkZWZpbmUgbWF4VmFsdWVTaXplIDEyOAorI2RlZmlu
ZSBkYXRhT2Zmc2V0IDgKKyNkZWZpbmUgZW1wdHkgMAorI2RlZmluZSBldmFjdWF0ZWRFbXB0eSAx
CisjZGVmaW5lIGV2YWN1YXRlZFggMgorI2RlZmluZSBldmFjdWF0ZWRZIDMKKyNkZWZpbmUgbWlu
VG9wSGFzaCA0CisjZGVmaW5lIGl0ZXJhdG9yIDEKKyNkZWZpbmUgb2xkSXRlcmF0b3IgMgorI2Rl
ZmluZSBoYXNoV3JpdGluZyA0CisjZGVmaW5lIHNhbWVTaXplR3JvdyA4CisjZGVmaW5lIG5vQ2hl
Y2sgMTg0NDY3NDQwNzM3MDk1NTE2MTUKKyNkZWZpbmUgbWF4WmVybyAxMDI0CisjZGVmaW5lIGFk
ZHJCaXRzIDQ4CisjZGVmaW5lIGNudEJpdHMgMTkKKyNkZWZpbmUgbXV0ZXhfdW5sb2NrZWQgMAor
I2RlZmluZSBtdXRleF9sb2NrZWQgMQorI2RlZmluZSBtdXRleF9zbGVlcGluZyAyCisjZGVmaW5l
IGFjdGl2ZV9zcGluIDQKKyNkZWZpbmUgYWN0aXZlX3NwaW5fY250IDMwCisjZGVmaW5lIHBhc3Np
dmVfc3BpbiAxCisjZGVmaW5lIG1lbVByb2ZpbGUgMQorI2RlZmluZSBibG9ja1Byb2ZpbGUgMgor
I2RlZmluZSBtdXRleFByb2ZpbGUgMworI2RlZmluZSBidWNrSGFzaFNpemUgMTc5OTk5CisjZGVm
aW5lIG1heFN0YWNrIDMyCisjZGVmaW5lIHBkUmVhZHkgMQorI2RlZmluZSBwZFdhaXQgMgorI2Rl
ZmluZSBwb2xsQmxvY2tTaXplIDQwOTYKKyNkZWZpbmUgZnJlZXplU3RvcFdhaXQgMjE0NzQ4MzY0
NworI2RlZmluZSBmb3JjZVByZWVtcHROUyAxMDAwMDAwMAorI2RlZmluZSB0cmFjZWJhY2tDcmFz
aCAxCisjZGVmaW5lIHRyYWNlYmFja0FsbCAyCisjZGVmaW5lIHRyYWNlYmFja1NoaWZ0IDIKKyNk
ZWZpbmUgY2FzZVJlY3YgMQorI2RlZmluZSBjYXNlU2VuZCAyCisjZGVmaW5lIGNhc2VEZWZhdWx0
IDMKKyNkZWZpbmUgJHNpbmtjb25zdDAgMAorI2RlZmluZSBzZWxlY3RTZW5kIDEKKyNkZWZpbmUg
c2VsZWN0UmVjdiAyCisjZGVmaW5lIHNlbGVjdERlZmF1bHQgMworI2RlZmluZSBzZW1UYWJTaXpl
IDI1MQorI2RlZmluZSBzZW1hQmxvY2tQcm9maWxlIDEKKyNkZWZpbmUgc2VtYU11dGV4UHJvZmls
ZSAyCisjZGVmaW5lIHNpZ0lkbGUgMAorI2RlZmluZSBzaWdSZWNlaXZpbmcgMQorI2RlZmluZSBz
aWdTZW5kaW5nIDIKKyNkZWZpbmUgc21hbGxTaXplRGl2IDgKKyNkZWZpbmUgc21hbGxTaXplTWF4
IDEwMjQKKyNkZWZpbmUgbGFyZ2VTaXplRGl2IDEyOAorI2RlZmluZSB0bXBTdHJpbmdCdWZTaXpl
IDMyCisjZGVmaW5lIG1heFVpbnQgMTg0NDY3NDQwNzM3MDk1NTE2MTUKKyNkZWZpbmUgbWF4SW50
IDkyMjMzNzIwMzY4NTQ3NzU4MDcKKyNkZWZpbmUgZ2NNYXJrV29ya2VyRGVkaWNhdGVkTW9kZSAw
CisjZGVmaW5lIGdjTWFya1dvcmtlckZyYWN0aW9uYWxNb2RlIDEKKyNkZWZpbmUgZ2NNYXJrV29y
a2VySWRsZU1vZGUgMgorI2RlZmluZSB0cmFjZUV2Tm9uZSAwCisjZGVmaW5lIHRyYWNlRXZCYXRj
aCAxCisjZGVmaW5lIHRyYWNlRXZGcmVxdWVuY3kgMgorI2RlZmluZSB0cmFjZUV2U3RhY2sgMwor
I2RlZmluZSB0cmFjZUV2R29tYXhwcm9jcyA0CisjZGVmaW5lIHRyYWNlRXZQcm9jU3RhcnQgNQor
I2RlZmluZSB0cmFjZUV2UHJvY1N0b3AgNgorI2RlZmluZSB0cmFjZUV2R0NTdGFydCA3CisjZGVm
aW5lIHRyYWNlRXZHQ0RvbmUgOAorI2RlZmluZSB0cmFjZUV2R0NTY2FuU3RhcnQgOQorI2RlZmlu
ZSB0cmFjZUV2R0NTY2FuRG9uZSAxMAorI2RlZmluZSB0cmFjZUV2R0NTd2VlcFN0YXJ0IDExCisj
ZGVmaW5lIHRyYWNlRXZHQ1N3ZWVwRG9uZSAxMgorI2RlZmluZSB0cmFjZUV2R29DcmVhdGUgMTMK
KyNkZWZpbmUgdHJhY2VFdkdvU3RhcnQgMTQKKyNkZWZpbmUgdHJhY2VFdkdvRW5kIDE1CisjZGVm
aW5lIHRyYWNlRXZHb1N0b3AgMTYKKyNkZWZpbmUgdHJhY2VFdkdvU2NoZWQgMTcKKyNkZWZpbmUg
dHJhY2VFdkdvUHJlZW1wdCAxOAorI2RlZmluZSB0cmFjZUV2R29TbGVlcCAxOQorI2RlZmluZSB0
cmFjZUV2R29CbG9jayAyMAorI2RlZmluZSB0cmFjZUV2R29VbmJsb2NrIDIxCisjZGVmaW5lIHRy
YWNlRXZHb0Jsb2NrU2VuZCAyMgorI2RlZmluZSB0cmFjZUV2R29CbG9ja1JlY3YgMjMKKyNkZWZp
bmUgdHJhY2VFdkdvQmxvY2tTZWxlY3QgMjQKKyNkZWZpbmUgdHJhY2VFdkdvQmxvY2tTeW5jIDI1
CisjZGVmaW5lIHRyYWNlRXZHb0Jsb2NrQ29uZCAyNgorI2RlZmluZSB0cmFjZUV2R29CbG9ja05l
dCAyNworI2RlZmluZSB0cmFjZUV2R29TeXNDYWxsIDI4CisjZGVmaW5lIHRyYWNlRXZHb1N5c0V4
aXQgMjkKKyNkZWZpbmUgdHJhY2VFdkdvU3lzQmxvY2sgMzAKKyNkZWZpbmUgdHJhY2VFdkdvV2Fp
dGluZyAzMQorI2RlZmluZSB0cmFjZUV2R29JblN5c2NhbGwgMzIKKyNkZWZpbmUgdHJhY2VFdkhl
YXBBbGxvYyAzMworI2RlZmluZSB0cmFjZUV2TmV4dEdDIDM0CisjZGVmaW5lIHRyYWNlRXZUaW1l
ckdvcm91dGluZSAzNQorI2RlZmluZSB0cmFjZUV2RnV0aWxlV2FrZXVwIDM2CisjZGVmaW5lIHRy
YWNlRXZTdHJpbmcgMzcKKyNkZWZpbmUgdHJhY2VFdkdvU3RhcnRMb2NhbCAzOAorI2RlZmluZSB0
cmFjZUV2R29VbmJsb2NrTG9jYWwgMzkKKyNkZWZpbmUgdHJhY2VFdkdvU3lzRXhpdExvY2FsIDQw
CisjZGVmaW5lIHRyYWNlRXZHb1N0YXJ0TGFiZWwgNDEKKyNkZWZpbmUgdHJhY2VFdkdvQmxvY2tH
QyA0MgorI2RlZmluZSB0cmFjZUV2Q291bnQgNDMKKyNkZWZpbmUgdHJhY2VUaWNrRGl2IDY0Cisj
ZGVmaW5lIHRyYWNlU3RhY2tTaXplIDEyOAorI2RlZmluZSB0cmFjZUJ5dGVzUGVyTnVtYmVyIDEw
CisjZGVmaW5lIHRyYWNlQXJnQ291bnRTaGlmdCA2CisjZGVmaW5lIHRyYWNlRnV0aWxlV2FrZXVw
IDEyOAorI2RlZmluZSBraW5kQm9vbCAxCisjZGVmaW5lIGtpbmRJbnQgMgorI2RlZmluZSBraW5k
SW50OCAzCisjZGVmaW5lIGtpbmRJbnQxNiA0CisjZGVmaW5lIGtpbmRJbnQzMiA1CisjZGVmaW5l
IGtpbmRJbnQ2NCA2CisjZGVmaW5lIGtpbmRVaW50IDcKKyNkZWZpbmUga2luZFVpbnQ4IDgKKyNk
ZWZpbmUga2luZFVpbnQxNiA5CisjZGVmaW5lIGtpbmRVaW50MzIgMTAKKyNkZWZpbmUga2luZFVp
bnQ2NCAxMQorI2RlZmluZSBraW5kVWludHB0ciAxMgorI2RlZmluZSBraW5kRmxvYXQzMiAxMwor
I2RlZmluZSBraW5kRmxvYXQ2NCAxNAorI2RlZmluZSBraW5kQ29tcGxleDY0IDE1CisjZGVmaW5l
IGtpbmRDb21wbGV4MTI4IDE2CisjZGVmaW5lIGtpbmRBcnJheSAxNworI2RlZmluZSBraW5kQ2hh
biAxOAorI2RlZmluZSBraW5kRnVuYyAxOQorI2RlZmluZSBraW5kSW50ZXJmYWNlIDIwCisjZGVm
aW5lIGtpbmRNYXAgMjEKKyNkZWZpbmUga2luZFB0ciAyMgorI2RlZmluZSBraW5kU2xpY2UgMjMK
KyNkZWZpbmUga2luZFN0cmluZyAyNAorI2RlZmluZSBraW5kU3RydWN0IDI1CisjZGVmaW5lIGtp
bmRVbnNhZmVQb2ludGVyIDI2CisjZGVmaW5lIGtpbmREaXJlY3RJZmFjZSAzMgorI2RlZmluZSBr
aW5kR0NQcm9nIDY0CisjZGVmaW5lIGtpbmROb1BvaW50ZXJzIDEyOAorI2RlZmluZSBraW5kTWFz
ayAzMQorI2RlZmluZSBydW5lRXJyb3IgNjU1MzMKKyNkZWZpbmUgcnVuZVNlbGYgMTI4CisjZGVm
aW5lIG1heFJ1bmUgMTExNDExMQorI2RlZmluZSBzdXJyb2dhdGVNaW4gNTUyOTYKKyNkZWZpbmUg
c3Vycm9nYXRlTWF4IDU3MzQzCisjZGVmaW5lIHQxIDAKKyNkZWZpbmUgdHggMTI4CisjZGVmaW5l
IHQyIDE5MgorI2RlZmluZSB0MyAyMjQKKyNkZWZpbmUgdDQgMjQwCisjZGVmaW5lIHQ1IDI0OAor
I2RlZmluZSBtYXNreCA2MworI2RlZmluZSBtYXNrMiAzMQorI2RlZmluZSBtYXNrMyAxNQorI2Rl
ZmluZSBtYXNrNCA3CisjZGVmaW5lIHJ1bmUxTWF4IDEyNworI2RlZmluZSBydW5lMk1heCAyMDQ3
CisjZGVmaW5lIHJ1bmUzTWF4IDY1NTM1CisjZGVmaW5lIGxvY2IgMTI4CisjZGVmaW5lIGhpY2Ig
MTkxCisKK3N0cnVjdCBzdWRvZzsKKworc3RydWN0IHdhaXRxIHsKKwlzdHJ1Y3Qgc3Vkb2cqIGZp
cnN0OworCXN0cnVjdCBzdWRvZyogbGFzdDsKK307CisKK3N0cnVjdCBjcHVwcm9mRW50cnkgewor
CXVpbnRwdHJfdCBjb3VudDsKKwlpbnQ2NF90IGRlcHRoOworCXVpbnRwdHJfdCBzdGFja1s2NF07
Cit9OworCitzdHJ1Y3QgVHlwZUFzc2VydGlvbkVycm9yIHsKKwlTdHJpbmcgaW50ZXJmYWNlU3Ry
aW5nOworCVN0cmluZyBjb25jcmV0ZVN0cmluZzsKKwlTdHJpbmcgYXNzZXJ0ZWRTdHJpbmc7CisJ
U3RyaW5nIG1pc3NpbmdNZXRob2Q7Cit9OworCitzdHJ1Y3QgZXJyb3JDU3RyaW5nIHsKKwl1aW50
cHRyX3QgY3N0cjsKK307CisKK3N0cnVjdCBibWFwIHsKKwl1aW50OF90IHRvcGhhc2hbOF07Cit9
OworCitzdHJ1Y3QgaGl0ZXIgeworCXZvaWQqIGtleTsKKwl2b2lkKiB2YWx1ZTsKKwl2b2lkKiB0
OworCXZvaWQqIGg7CisJdm9pZCogYnVja2V0czsKKwlzdHJ1Y3QgYm1hcCogYnB0cjsKKwlTbGlj
ZSogb3ZlcmZsb3dbMl07CisJdWludHB0cl90IHN0YXJ0QnVja2V0OworCXVpbnQ4X3Qgb2Zmc2V0
OworCV9Cb29sIHdyYXBwZWQ7CisJdWludDhfdCBCOworCXVpbnQ4X3QgaTsKKwl1aW50cHRyX3Qg
YnVja2V0OworCXVpbnRwdHJfdCBjaGVja0J1Y2tldDsKK307CisKK3N0cnVjdCBtbGluazsKKwor
c3RydWN0IG1jYWNoZWxpc3QgeworCXN0cnVjdCBtbGluayogbGlzdDsKKwl1aW50MzJfdCBubGlz
dDsKK307CisKK3N0cnVjdCBtc3BhbjsKKworc3RydWN0IG1jYWNoZSB7CisJaW50MzJfdCBuZXh0
X3NhbXBsZTsKKwl1aW50cHRyX3QgbG9jYWxfY2FjaGVhbGxvYzsKKwl2b2lkKiB0aW55OworCXVp
bnRwdHJfdCB0aW55c2l6ZTsKKwlzdHJ1Y3QgbXNwYW4qIGFsbG9jWzY3XTsKKwlzdHJ1Y3QgbWNh
Y2hlbGlzdCBmcmVlWzY3XTsKKwl1aW50cHRyX3QgbG9jYWxfbmxvb2t1cDsKKwl1aW50cHRyX3Qg
bG9jYWxfbGFyZ2VmcmVlOworCXVpbnRwdHJfdCBsb2NhbF9ubGFyZ2VmcmVlOworCXVpbnRwdHJf
dCBsb2NhbF9uc21hbGxmcmVlWzY3XTsKK307CisKK3N0cnVjdCBtdHlwZXMgeworCXVpbnQ4X3Qg
Y29tcHJlc3Npb247CisJdWludHB0cl90IGRhdGE7Cit9OworCitzdHJ1Y3Qgc3BlY2lhbCB7CisJ
c3RydWN0IHNwZWNpYWwqIG5leHQ7CisJdWludDE2X3Qgb2Zmc2V0OworCXVpbnQ4X3Qga2luZDsK
K307CisKK3N0cnVjdCBtbGluayB7CisJc3RydWN0IG1saW5rKiBuZXh0OworfTsKKworc3RydWN0
IGJ1Y2tldCB7CisJc3RydWN0IGJ1Y2tldCogbmV4dDsKKwlzdHJ1Y3QgYnVja2V0KiBhbGxuZXh0
OworCWludDY0X3QgdHlwOworCXVpbnRwdHJfdCBoYXNoOworCXVpbnRwdHJfdCBzaXplOworCXVp
bnRwdHJfdCBuc3RrOworfTsKKworc3RydWN0IG1lbVJlY29yZCB7CisJdWludHB0cl90IGFsbG9j
czsKKwl1aW50cHRyX3QgZnJlZXM7CisJdWludHB0cl90IGFsbG9jX2J5dGVzOworCXVpbnRwdHJf
dCBmcmVlX2J5dGVzOworCXVpbnRwdHJfdCBwcmV2X2FsbG9jczsKKwl1aW50cHRyX3QgcHJldl9m
cmVlczsKKwl1aW50cHRyX3QgcHJldl9hbGxvY19ieXRlczsKKwl1aW50cHRyX3QgcHJldl9mcmVl
X2J5dGVzOworCXVpbnRwdHJfdCByZWNlbnRfYWxsb2NzOworCXVpbnRwdHJfdCByZWNlbnRfZnJl
ZXM7CisJdWludHB0cl90IHJlY2VudF9hbGxvY19ieXRlczsKKwl1aW50cHRyX3QgcmVjZW50X2Zy
ZWVfYnl0ZXM7Cit9OworCitzdHJ1Y3QgYmxvY2tSZWNvcmQgeworCWludDY0X3QgY291bnQ7CisJ
aW50NjRfdCBjeWNsZXM7Cit9OworCitzdHJ1Y3QgU3RhY2tSZWNvcmQgeworCXVpbnRwdHJfdCBT
dGFjazBbMzJdOworfTsKKworc3RydWN0IE1lbVByb2ZpbGVSZWNvcmQgeworCWludDY0X3QgQWxs
b2NCeXRlczsKKwlpbnQ2NF90IEZyZWVCeXRlczsKKwlpbnQ2NF90IEFsbG9jT2JqZWN0czsKKwlp
bnQ2NF90IEZyZWVPYmplY3RzOworCXVpbnRwdHJfdCBTdGFjazBbMzJdOworfTsKKworc3RydWN0
IG1zdGF0cyB7CisJdWludDY0X3QgYWxsb2M7CisJdWludDY0X3QgdG90YWxfYWxsb2M7CisJdWlu
dDY0X3Qgc3lzOworCXVpbnQ2NF90IG5sb29rdXA7CisJdWludDY0X3Qgbm1hbGxvYzsKKwl1aW50
NjRfdCBuZnJlZTsKKwl1aW50NjRfdCBoZWFwX2FsbG9jOworCXVpbnQ2NF90IGhlYXBfc3lzOwor
CXVpbnQ2NF90IGhlYXBfaWRsZTsKKwl1aW50NjRfdCBoZWFwX2ludXNlOworCXVpbnQ2NF90IGhl
YXBfcmVsZWFzZWQ7CisJdWludDY0X3QgaGVhcF9vYmplY3RzOworCXVpbnQ2NF90IHN0YWNrc19p
bnVzZTsKKwl1aW50NjRfdCBzdGFja3Nfc3lzOworCXVpbnQ2NF90IG1zcGFuX2ludXNlOworCXVp
bnQ2NF90IG1zcGFuX3N5czsKKwl1aW50NjRfdCBtY2FjaGVfaW51c2U7CisJdWludDY0X3QgbWNh
Y2hlX3N5czsKKwl1aW50NjRfdCBidWNraGFzaF9zeXM7CisJdWludDY0X3QgZ2Nfc3lzOworCXVp
bnQ2NF90IG90aGVyX3N5czsKKwl1aW50NjRfdCBuZXh0X2djOworCXVpbnQ2NF90IGxhc3RfZ2M7
CisJdWludDY0X3QgcGF1c2VfdG90YWxfbnM7CisJdWludDY0X3QgcGF1c2VfbnNbMjU2XTsKKwl1
aW50NjRfdCBwYXVzZV9lbmRbMjU2XTsKKwl1aW50MzJfdCBudW1nYzsKKwl1aW50MzJfdCBudW1m
b3JjZWRnYzsKKwlkb3VibGUgZ2NfY3B1X2ZyYWN0aW9uOworCV9Cb29sIGVuYWJsZWdjOworCV9C
b29sIGRlYnVnZ2M7CisJc3RydWN0IHsKKwl1aW50MzJfdCBzaXplOworCXVpbnQ2NF90IG5tYWxs
b2M7CisJdWludDY0X3QgbmZyZWU7CisJfSBieV9zaXplWzY3XTsKKwl1aW50NjRfdCB0aW55YWxs
b2NzOworCXVpbnQ2NF90IGdjX3RyaWdnZXI7CisJdWludDY0X3QgaGVhcF9saXZlOworCXVpbnQ2
NF90IGhlYXBfc2NhbjsKKwl1aW50NjRfdCBoZWFwX21hcmtlZDsKK307CisKK3N0cnVjdCBNZW1T
dGF0cyB7CisJdWludDY0X3QgQWxsb2M7CisJdWludDY0X3QgVG90YWxBbGxvYzsKKwl1aW50NjRf
dCBTeXM7CisJdWludDY0X3QgTG9va3VwczsKKwl1aW50NjRfdCBNYWxsb2NzOworCXVpbnQ2NF90
IEZyZWVzOworCXVpbnQ2NF90IEhlYXBBbGxvYzsKKwl1aW50NjRfdCBIZWFwU3lzOworCXVpbnQ2
NF90IEhlYXBJZGxlOworCXVpbnQ2NF90IEhlYXBJbnVzZTsKKwl1aW50NjRfdCBIZWFwUmVsZWFz
ZWQ7CisJdWludDY0X3QgSGVhcE9iamVjdHM7CisJdWludDY0X3QgU3RhY2tJbnVzZTsKKwl1aW50
NjRfdCBTdGFja1N5czsKKwl1aW50NjRfdCBNU3BhbkludXNlOworCXVpbnQ2NF90IE1TcGFuU3lz
OworCXVpbnQ2NF90IE1DYWNoZUludXNlOworCXVpbnQ2NF90IE1DYWNoZVN5czsKKwl1aW50NjRf
dCBCdWNrSGFzaFN5czsKKwl1aW50NjRfdCBHQ1N5czsKKwl1aW50NjRfdCBPdGhlclN5czsKKwl1
aW50NjRfdCBOZXh0R0M7CisJdWludDY0X3QgTGFzdEdDOworCXVpbnQ2NF90IFBhdXNlVG90YWxO
czsKKwl1aW50NjRfdCBQYXVzZU5zWzI1Nl07CisJdWludDY0X3QgUGF1c2VFbmRbMjU2XTsKKwl1
aW50MzJfdCBOdW1HQzsKKwl1aW50MzJfdCBOdW1Gb3JjZWRHQzsKKwlkb3VibGUgR0NDUFVGcmFj
dGlvbjsKKwlfQm9vbCBFbmFibGVHQzsKKwlfQm9vbCBEZWJ1Z0dDOworCXN0cnVjdCB7CisJdWlu
dDMyX3QgU2l6ZTsKKwl1aW50NjRfdCBNYWxsb2NzOworCXVpbnQ2NF90IEZyZWVzOworCX0gQnlT
aXplWzYxXTsKK307CisKK3N0cnVjdCBtT1MgeworCXVpbnQ4X3QgdW51c2VkOworfTsKKworc3Ry
dWN0IHJhbmRvbU9yZGVyIHsKKwl1aW50MzJfdCBjb3VudDsKKwlTbGljZSBjb3ByaW1lczsKK307
CisKK3N0cnVjdCByYW5kb21FbnVtIHsKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IGNvdW50Owor
CXVpbnQzMl90IHBvczsKKwl1aW50MzJfdCBpbmM7Cit9OworCitzdHJ1Y3QgZGJnVmFyIHsKKwlT
dHJpbmcgbmFtZTsKKwlpbnQzMl90KiB2YWx1ZTsKK307CisKK3N0cnVjdCBkZWJ1Z1ZhcnMgewor
CWludDMyX3QgYWxsb2NmcmVldHJhY2U7CisJaW50MzJfdCBjZ29jaGVjazsKKwlpbnQzMl90IGVm
ZW5jZTsKKwlpbnQzMl90IGdjY2hlY2ttYXJrOworCWludDMyX3QgZ2NwYWNlcnRyYWNlOworCWlu
dDMyX3QgZ2NzaHJpbmtzdGFja29mZjsKKwlpbnQzMl90IGdjc3RhY2tiYXJyaWVyb2ZmOworCWlu
dDMyX3QgZ2NzdGFja2JhcnJpZXJhbGw7CisJaW50MzJfdCBnY3Jlc2NhbnN0YWNrczsKKwlpbnQz
Ml90IGdjc3RvcHRoZXdvcmxkOworCWludDMyX3QgZ2N0cmFjZTsKKwlpbnQzMl90IGludmFsaWRw
dHI7CisJaW50MzJfdCBzYnJrOworCWludDMyX3Qgc2NhdmVuZ2U7CisJaW50MzJfdCBzY2hlZGRl
dGFpbDsKKwlpbnQzMl90IHNjaGVkdHJhY2U7CisJaW50MzJfdCB3YnNoYWRvdzsKK307CisKK3N0
cnVjdCBtdXRleCB7CisJdWludHB0cl90IGtleTsKK307CisKK3N0cnVjdCBub3RlIHsKKwl1aW50
cHRyX3Qga2V5OworfTsKKworc3RydWN0IGZ1bmN2YWwgeworCXVpbnRwdHJfdCBmbjsKK307CisK
K3N0cnVjdCBpZmFjZSB7CisJdm9pZCogdGFiOworCXZvaWQqIGRhdGE7Cit9OworCitzdHJ1Y3Qg
ZWZhY2UgeworCXZvaWQqIF90eXBlOworCXZvaWQqIGRhdGE7Cit9OworCitzdHJ1Y3QgZzsKKwor
c3RydWN0IGhjaGFuOworCitzdHJ1Y3Qgc3Vkb2cgeworCXN0cnVjdCBnKiBnOworCXVpbnQzMl90
KiBzZWxlY3Rkb25lOworCXN0cnVjdCBzdWRvZyogbmV4dDsKKwlzdHJ1Y3Qgc3Vkb2cqIHByZXY7
CisJdm9pZCogZWxlbTsKKwlpbnQ2NF90IGFjcXVpcmV0aW1lOworCWludDY0X3QgcmVsZWFzZXRp
bWU7CisJdWludDMyX3QgdGlja2V0OworCXN0cnVjdCBzdWRvZyogd2FpdGxpbms7CisJc3RydWN0
IGhjaGFuKiBjOworfTsKKworc3RydWN0IGdjc3RhdHMgeworCXVpbnQ2NF90IG5oYW5kb2ZmOwor
CXVpbnQ2NF90IG5oYW5kb2ZmY250OworCXVpbnQ2NF90IG5wcm9jeWllbGQ7CisJdWludDY0X3Qg
bm9zeWllbGQ7CisJdWludDY0X3QgbnNsZWVwOworfTsKKworc3RydWN0IF9wYW5pYzsKKworc3Ry
dWN0IF9kZWZlcjsKKworc3RydWN0IG07CisKK3N0cnVjdCB0cmFjZWJhY2tnOworCitzdHJ1Y3Qg
ZyB7CisJc3RydWN0IF9wYW5pYyogX3BhbmljOworCXN0cnVjdCBfZGVmZXIqIF9kZWZlcjsKKwlz
dHJ1Y3QgbSogbTsKKwl1aW50cHRyX3Qgc3lzY2FsbHNwOworCXVpbnRwdHJfdCBzeXNjYWxscGM7
CisJdm9pZCogcGFyYW07CisJdWludDMyX3QgYXRvbWljc3RhdHVzOworCWludDY0X3QgZ29pZDsK
KwlpbnQ2NF90IHdhaXRzaW5jZTsKKwlTdHJpbmcgd2FpdHJlYXNvbjsKKwl1aW50NjRfdCBzY2hl
ZGxpbms7CisJX0Jvb2wgcHJlZW1wdDsKKwlfQm9vbCBwYW5pY29uZmF1bHQ7CisJX0Jvb2wgcHJl
ZW1wdHNjYW47CisJX0Jvb2wgZ2NzY2FuZG9uZTsKKwlfQm9vbCBnY3NjYW52YWxpZDsKKwlfQm9v
bCB0aHJvd3NwbGl0OworCWludDhfdCByYWNlaWdub3JlOworCV9Cb29sIHN5c2Jsb2NrdHJhY2Vk
OworCWludDY0X3Qgc3lzZXhpdHRpY2tzOworCXVpbnQ2NF90IHRyYWNlc2VxOworCXVpbnQ2NF90
IHRyYWNlbGFzdHA7CisJc3RydWN0IG0qIGxvY2tlZG07CisJdWludDMyX3Qgc2lnOworCVNsaWNl
IHdyaXRlYnVmOworCXVpbnRwdHJfdCBzaWdjb2RlMDsKKwl1aW50cHRyX3Qgc2lnY29kZTE7CisJ
dWludHB0cl90IHNpZ3BjOworCXVpbnRwdHJfdCBnb3BjOworCXVpbnRwdHJfdCBzdGFydHBjOwor
CXN0cnVjdCBzdWRvZyogd2FpdGluZzsKKwlpbnQzMl90IGdjUmVzY2FuOworCWludDY0X3QgZ2NB
c3Npc3RCeXRlczsKKwl2b2lkKiBleGNlcHRpb247CisJX0Jvb2wgaXNmb3JlaWduOworCXZvaWQq
IGdjc3RhY2s7CisJdWludHB0cl90IGdjc3RhY2tzaXplOworCXZvaWQqIGdjbmV4dHNlZ21lbnQ7
CisJdm9pZCogZ2NuZXh0c3A7CisJdm9pZCogZ2Npbml0aWFsc3A7CisJdm9pZCogZ2NyZWdzWzEy
Ml07CisJdm9pZCogZW50cnk7CisJX0Jvb2wgZnJvbWdvZ287CisJX0Jvb2wgaXNzeXN0ZW07CisJ
X0Jvb2wgaXNiYWNrZ3JvdW5kOworCXN0cnVjdCB0cmFjZWJhY2tnKiB0cmFjZWJhY2s7CisJdm9p
ZCogY29udGV4dFsxMjJdOworCXZvaWQqIHN0YWNrY29udGV4dFsxMF07Cit9OworCitzdHJ1Y3Qg
cCB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJaW50MzJfdCBpZDsKKwl1aW50MzJfdCBzdGF0dXM7
CisJdWludDY0X3QgbGluazsKKwl1aW50MzJfdCBzY2hlZHRpY2s7CisJdWludDMyX3Qgc3lzY2Fs
bHRpY2s7CisJdWludDY0X3QgbTsKKwlzdHJ1Y3QgbWNhY2hlKiBtY2FjaGU7CisJU2xpY2UgZGVm
ZXJwb29sOworCXN0cnVjdCBfZGVmZXIqIGRlZmVycG9vbGJ1ZlszMl07CisJdWludDY0X3QgZ29p
ZGNhY2hlOworCXVpbnQ2NF90IGdvaWRjYWNoZWVuZDsKKwl1aW50MzJfdCBydW5xaGVhZDsKKwl1
aW50MzJfdCBydW5xdGFpbDsKKwl1aW50NjRfdCBydW5xWzI1Nl07CisJdWludDY0X3QgcnVubmV4
dDsKKwlzdHJ1Y3QgZyogZ2ZyZWU7CisJaW50MzJfdCBnZnJlZWNudDsKKwlTbGljZSBzdWRvZ2Nh
Y2hlOworCXN0cnVjdCBzdWRvZyogc3Vkb2didWZbMTI4XTsKKwl1aW50NjRfdCB0cmFjZWJ1ZjsK
KwlpbnQ2NF90IGdjQXNzaXN0VGltZTsKKwl1aW50NjRfdCBnY0JnTWFya1dvcmtlcjsKKwlpbnQ2
NF90IGdjTWFya1dvcmtlck1vZGU7CisJdWludDMyX3QgcnVuU2FmZVBvaW50Rm47CisJdWludDhf
dCBwYWRbNjRdOworfTsKKworc3RydWN0IHNjaGVkdCB7CisJdWludDY0X3QgZ29pZGdlbjsKKwl1
aW50NjRfdCBsYXN0cG9sbDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl1aW50NjRfdCBtaWRsZTsK
KwlpbnQzMl90IG5taWRsZTsKKwlpbnQzMl90IG5taWRsZWxvY2tlZDsKKwlpbnQzMl90IG1jb3Vu
dDsKKwlpbnQzMl90IG1heG1jb3VudDsKKwl1aW50MzJfdCBuZ3N5czsKKwl1aW50NjRfdCBwaWRs
ZTsKKwl1aW50MzJfdCBucGlkbGU7CisJdWludDMyX3Qgbm1zcGlubmluZzsKKwl1aW50NjRfdCBy
dW5xaGVhZDsKKwl1aW50NjRfdCBydW5xdGFpbDsKKwlpbnQzMl90IHJ1bnFzaXplOworCXN0cnVj
dCBtdXRleCBnZmxvY2s7CisJc3RydWN0IGcqIGdmcmVlOworCWludDMyX3QgbmdmcmVlOworCXN0
cnVjdCBtdXRleCBzdWRvZ2xvY2s7CisJc3RydWN0IHN1ZG9nKiBzdWRvZ2NhY2hlOworCXN0cnVj
dCBtdXRleCBkZWZlcmxvY2s7CisJc3RydWN0IF9kZWZlciogZGVmZXJwb29sOworCXVpbnQzMl90
IGdjd2FpdGluZzsKKwlpbnQzMl90IHN0b3B3YWl0OworCXN0cnVjdCBub3RlIHN0b3Bub3RlOwor
CXVpbnQzMl90IHN5c21vbndhaXQ7CisJc3RydWN0IG5vdGUgc3lzbW9ubm90ZTsKKwlGdW5jVmFs
KiBzYWZlUG9pbnRGbjsKKwlpbnQzMl90IHNhZmVQb2ludFdhaXQ7CisJc3RydWN0IG5vdGUgc2Fm
ZVBvaW50Tm90ZTsKKwlpbnQzMl90IHByb2ZpbGVoejsKKwlpbnQ2NF90IHByb2NyZXNpemV0aW1l
OworCWludDY0X3QgdG90YWx0aW1lOworfTsKKworc3RydWN0IGxmbm9kZSB7CisJdWludDY0X3Qg
bmV4dDsKKwl1aW50cHRyX3QgcHVzaGNudDsKK307CisKK3N0cnVjdCBmb3JjZWdjc3RhdGUgewor
CXN0cnVjdCBtdXRleCBsb2NrOworCXN0cnVjdCBnKiBnOworCXVpbnQzMl90IGlkbGU7Cit9Owor
CitzdHJ1Y3QgX2RlZmVyIHsKKwlzdHJ1Y3QgX2RlZmVyKiBsaW5rOworCV9Cb29sKiBmcmFtZTsK
KwlzdHJ1Y3QgX3BhbmljKiBfcGFuaWM7CisJdWludHB0cl90IHBmbjsKKwl2b2lkKiBhcmc7CisJ
dWludHB0cl90IHJldGFkZHI7CisJX0Jvb2wgbWFrZWZ1bmNjYW5yZWNvdmVyOworCV9Cb29sIHNw
ZWNpYWw7Cit9OworCitzdHJ1Y3QgX3BhbmljIHsKKwlzdHJ1Y3QgX3BhbmljKiBsaW5rOworCUVm
YWNlIGFyZzsKKwlfQm9vbCByZWNvdmVyZWQ7CisJX0Jvb2wgaXNmb3JlaWduOworfTsKKworc3Ry
dWN0IHNpZ3NldCB7CisJdWludDY0X3QgX192YWxbMTZdOworfTsKKworc3RydWN0IHNjYXNlIHsK
Kwl2b2lkKiBlbGVtOworCXN0cnVjdCBoY2hhbiogYzsKKwl1aW50cHRyX3QgcGM7CisJdWludDE2
X3Qga2luZDsKKwl1aW50MTZfdCBpbmRleDsKKwlfQm9vbCogcmVjZWl2ZWRwOworCWludDY0X3Qg
cmVsZWFzZXRpbWU7Cit9OworCitzdHJ1Y3QgcnVudGltZVNlbGVjdCB7CisJaW50NjRfdCBkaXI7
CisJdm9pZCogdHlwOworCXN0cnVjdCBoY2hhbiogY2g7CisJdm9pZCogdmFsOworfTsKKworc3Ry
dWN0IHNlbWFSb290IHsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3Qgc3Vkb2cqIGhlYWQ7
CisJc3RydWN0IHN1ZG9nKiB0YWlsOworCXVpbnQzMl90IG53YWl0OworfTsKKworc3RydWN0IG5v
dGlmeUxpc3QgeworCXVpbnQzMl90IHdhaXQ7CisJdWludDMyX3Qgbm90aWZ5OworCXN0cnVjdCBt
dXRleCBsb2NrOworCXN0cnVjdCBzdWRvZyogaGVhZDsKKwlzdHJ1Y3Qgc3Vkb2cqIHRhaWw7Cit9
OworCitzdHJ1Y3Qgc2lnVGFiVCB7CisJaW50MzJfdCBmbGFnczsKKwlTdHJpbmcgbmFtZTsKK307
CisKK3N0cnVjdCBfc2lnaW5mb190OworCitzdHJ1Y3Qgc2lnY3R4dCB7CisJc3RydWN0IF9zaWdp
bmZvX3QqIGluZm87CisJdm9pZCogY3R4dDsKK307CisKK3N0cnVjdCBkaXZNYWdpYyB7CisJdWlu
dDhfdCBzaGlmdDsKKwl1aW50OF90IHNoaWZ0MjsKKwl1aW50MTZfdCBtdWw7CisJdWludDE2X3Qg
YmFzZU1hc2s7Cit9OworCitzdHJ1Y3Qgc2xpY2UgeworCXZvaWQqIGFycmF5OworCWludDY0X3Qg
bGVuOworCWludDY0X3QgY2FwOworfTsKKworc3RydWN0IHN0cmluZ1N0cnVjdCB7CisJdm9pZCog
c3RyOworCWludDY0X3QgbGVuOworfTsKKworc3RydWN0IHN0cmluZ1N0cnVjdERXQVJGIHsKKwl1
aW50OF90KiBzdHI7CisJaW50NjRfdCBsZW47Cit9OworCitzdHJ1Y3QgRnJhbWVzIHsKKwlTbGlj
ZSBjYWxsZXJzOworCXVpbnRwdHJfdCBsYXN0OworCWludDY0X3QgbGFzdENvdW50OworfTsKKwor
c3RydWN0IEZ1bmM7CisKK3N0cnVjdCBGcmFtZSB7CisJdWludHB0cl90IFBDOworCXN0cnVjdCBG
dW5jKiBGdW5jOworCVN0cmluZyBGdW5jdGlvbjsKKwlTdHJpbmcgRmlsZTsKKwlpbnQ2NF90IExp
bmU7CisJdWludHB0cl90IEVudHJ5OworfTsKKworc3RydWN0IEZ1bmMgeworCVN0cmluZyBuYW1l
OworCXVpbnRwdHJfdCBlbnRyeTsKK307CisKK3N0cnVjdCB0aW1lciB7CisJaW50NjRfdCBpOwor
CWludDY0X3Qgd2hlbjsKKwlpbnQ2NF90IHBlcmlvZDsKKwlGdW5jVmFsKiBmOworCUVmYWNlIGFy
ZzsKKwl1aW50cHRyX3Qgc2VxOworfTsKKworc3RydWN0IHRyYWNlRnJhbWUgeworCXVpbnQ2NF90
IGZ1bmNJRDsKKwl1aW50NjRfdCBmaWxlSUQ7CisJdWludDY0X3QgbGluZTsKK307CisKK3N0cnVj
dCB0cmFjZUFsbG9jIHsKKwl1aW50NjRfdCBoZWFkOworCXVpbnRwdHJfdCBvZmY7Cit9OworCitz
dHJ1Y3QgdHJhY2VBbGxvY0Jsb2NrIHsKKwl1aW50NjRfdCBuZXh0OworCXVpbnQ4X3QgZGF0YVs2
NTUyOF07Cit9OworCitzdHJ1Y3QgbG9jYXRpb24geworCXVpbnRwdHJfdCBwYzsKKwlTdHJpbmcg
ZmlsZW5hbWU7CisJU3RyaW5nIGZ1bmN0aW9uOworCWludDY0X3QgbGluZW5vOworfTsKKworc3Ry
dWN0IG1ldGhvZCB7CisJU3RyaW5nKiBuYW1lOworCVN0cmluZyogcGtnUGF0aDsKKwl2b2lkKiBt
dHlwOworCXZvaWQqIHR5cDsKKwl2b2lkKiB0Zm47Cit9OworCitzdHJ1Y3QgdW5jb21tb250eXBl
IHsKKwlTdHJpbmcqIG5hbWU7CisJU3RyaW5nKiBwa2dQYXRoOworCVNsaWNlIG1ldGhvZHM7Cit9
OworCitzdHJ1Y3QgaW1ldGhvZCB7CisJU3RyaW5nKiBuYW1lOworCVN0cmluZyogcGtnUGF0aDsK
Kwl2b2lkKiB0eXA7Cit9OworCitzdHJ1Y3Qgc3RydWN0ZmllbGQgeworCVN0cmluZyogbmFtZTsK
KwlTdHJpbmcqIHBrZ1BhdGg7CisJdm9pZCogdHlwOworCVN0cmluZyogdGFnOworCXVpbnRwdHJf
dCBvZmZzZXQ7Cit9OworCitzdHJ1Y3QgdGltZXZhbCB7CisJaW50NjRfdCB0dl9zZWM7CisJaW50
NjRfdCB0dl91c2VjOworfTsKKworc3RydWN0IHRpbWVzcGVjIHsKKwlpbnQ2NF90IHR2X3NlYzsK
KwlpbnQ2NF90IHR2X25zZWM7Cit9OworCitzdHJ1Y3QgZXBvbGxldmVudCB7CisJdWludDMyX3Qg
ZXZlbnRzOworCXVpbnQ4X3QgZGF0YVs4XTsKK307CisKK3N0cnVjdCBzZW10IHsKKwlpbnQ4X3Qg
X19zaXplWzMyXTsKKwlpbnQ2NF90IEdvZHVtcF8wX2FsaWduWzBdOworfTsKKworc3RydWN0IGhj
aGFuIHsKKwl1aW50NjRfdCBxY291bnQ7CisJdWludDY0X3QgZGF0YXFzaXo7CisJdm9pZCogYnVm
OworCXVpbnQxNl90IGVsZW1zaXplOworCXVpbnQzMl90IGNsb3NlZDsKKwl2b2lkKiBlbGVtdHlw
ZTsKKwl1aW50NjRfdCBzZW5keDsKKwl1aW50NjRfdCByZWN2eDsKKwlzdHJ1Y3Qgd2FpdHEgcmVj
dnE7CisJc3RydWN0IHdhaXRxIHNlbmRxOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3Ry
dWN0IGNwdVByb2ZpbGUgeworCV9Cb29sIG9uOworCXN0cnVjdCBub3RlIHdhaXQ7CisJdWludHB0
cl90IGNvdW50OworCXVpbnRwdHJfdCBldmljdHM7CisJdWludHB0cl90IGxvc3Q7CisJc3RydWN0
IHsKKwlzdHJ1Y3QgY3B1cHJvZkVudHJ5IGVudHJ5WzRdOworCX0gaGFzaFsxMDI0XTsKKwl1aW50
cHRyX3QgbG9nWzY1NTM2XVsyXTsKKwlpbnQ2NF90IG5sb2c7CisJaW50MzJfdCB0b2dnbGU7CisJ
dWludDMyX3QgaGFuZG9mZjsKKwl1aW50MzJfdCB3dG9nZ2xlOworCV9Cb29sIHdob2xkaW5nOwor
CV9Cb29sIGZsdXNoaW5nOworCV9Cb29sIGVvZFNlbnQ7Cit9OworCitzdHJ1Y3QgbXNwYW4gewor
CXN0cnVjdCBtc3BhbiogbmV4dDsKKwlzdHJ1Y3QgbXNwYW4qIHByZXY7CisJdWludHB0cl90IHN0
YXJ0OworCXVpbnRwdHJfdCBucGFnZXM7CisJc3RydWN0IG1saW5rKiBmcmVlbGlzdDsKKwl1aW50
MzJfdCBzd2VlcGdlbjsKKwl1aW50MTZfdCByZWY7CisJdWludDhfdCBzaXplY2xhc3M7CisJX0Jv
b2wgaW5jYWNoZTsKKwl1aW50OF90IHN0YXRlOworCXVpbnQ4X3QgbmVlZHplcm87CisJdWludHB0
cl90IGVsZW1zaXplOworCWludDY0X3QgdW51c2Vkc2luY2U7CisJdWludHB0cl90IG5wcmVsZWFz
ZWQ7CisJdWludHB0cl90IGxpbWl0OworCXN0cnVjdCBtdHlwZXMgdHlwZXM7CisJc3RydWN0IG11
dGV4IHNwZWNpYWxsb2NrOworCXN0cnVjdCBzcGVjaWFsKiBzcGVjaWFsczsKKwlzdHJ1Y3QgbWxp
bmsqIGZyZWVidWY7Cit9OworCitzdHJ1Y3QgcG9sbERlc2MgeworCXN0cnVjdCBwb2xsRGVzYyog
bGluazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl1aW50cHRyX3QgZmQ7CisJX0Jvb2wgY2xvc2lu
ZzsKKwl1aW50cHRyX3Qgc2VxOworCXVpbnRwdHJfdCByZzsKKwlzdHJ1Y3QgdGltZXIgcnQ7CisJ
aW50NjRfdCByZDsKKwl1aW50cHRyX3Qgd2c7CisJc3RydWN0IHRpbWVyIHd0OworCWludDY0X3Qg
d2Q7CisJdWludDMyX3QgdXNlcjsKK307CisKK3N0cnVjdCBwb2xsQ2FjaGUgeworCXN0cnVjdCBt
dXRleCBsb2NrOworCXN0cnVjdCBwb2xsRGVzYyogZmlyc3Q7Cit9OworCitzdHJ1Y3QgbSB7CisJ
c3RydWN0IGcqIGcwOworCXVpbnQ2NF90IHByb2NpZDsKKwlzdHJ1Y3QgZyogZ3NpZ25hbDsKKwlz
dHJ1Y3Qgc2lnc2V0IHNpZ21hc2s7CisJdWludHB0cl90IG1zdGFydGZuOworCXN0cnVjdCBnKiBj
dXJnOworCXVpbnQ2NF90IGNhdWdodHNpZzsKKwl1aW50NjRfdCBwOworCXVpbnQ2NF90IG5leHRw
OworCWludDMyX3QgaWQ7CisJaW50MzJfdCBtYWxsb2Npbmc7CisJaW50MzJfdCB0aHJvd2luZzsK
KwlTdHJpbmcgcHJlZW1wdG9mZjsKKwlpbnQzMl90IGxvY2tzOworCWludDMyX3Qgc29mdGZsb2F0
OworCWludDMyX3QgZHlpbmc7CisJaW50MzJfdCBwcm9maWxlaHo7CisJaW50MzJfdCBoZWxwZ2M7
CisJX0Jvb2wgc3Bpbm5pbmc7CisJX0Jvb2wgYmxvY2tlZDsKKwlfQm9vbCBpbndiOworCV9Cb29s
IG5ld1NpZ3N0YWNrOworCWludDhfdCBwcmludGxvY2s7CisJdWludDMyX3QgZmFzdHJhbmQ7CisJ
dWludDY0X3QgbmNnb2NhbGw7CisJaW50MzJfdCBuY2dvOworCXN0cnVjdCBub3RlIHBhcms7CisJ
c3RydWN0IG0qIGFsbGxpbms7CisJdWludDY0X3Qgc2NoZWRsaW5rOworCXN0cnVjdCBtY2FjaGUq
IG1jYWNoZTsKKwlzdHJ1Y3QgZyogbG9ja2VkZzsKKwlzdHJ1Y3QgbG9jYXRpb24gY3JlYXRlc3Rh
Y2tbMzJdOworCXVpbnQzMl90IGxvY2tlZDsKKwl1aW50cHRyX3QgbmV4dHdhaXRtOworCXN0cnVj
dCBnY3N0YXRzIGdjc3RhdHM7CisJX0Jvb2wgbmVlZGV4dHJhbTsKKwl1aW50OF90IHRyYWNlYmFj
azsKKwl2b2lkKiB3YWl0dW5sb2NrZjsKKwl2b2lkKiB3YWl0bG9jazsKKwl1aW50OF90IHdhaXR0
cmFjZWV2OworCWludDY0X3Qgd2FpdHRyYWNlc2tpcDsKKwlfQm9vbCBzdGFydGluZ3RyYWNlOwor
CXVpbnQzMl90IHN5c2NhbGx0aWNrOworCXN0cnVjdCBtT1MgbW9zOworCXZvaWQqIGdzaWduYWxz
dGFjazsKKwl1aW50cHRyX3QgZ3NpZ25hbHN0YWNrc2l6ZTsKKwlfQm9vbCBkcm9wZXh0cmFtOwor
CWludDMyX3QgZ2Npbmc7Cit9OworCitzdHJ1Y3QgaHNlbGVjdCB7CisJdWludDE2X3QgdGNhc2U7
CisJdWludDE2X3QgbmNhc2U7CisJdWludDE2X3QqIHBvbGxvcmRlcjsKKwl1aW50MTZfdCogbG9j
a29yZGVyOworCXN0cnVjdCBzY2FzZSBzY2FzZVsxXTsKK307CisKK3N0cnVjdCB0cmFjZUJ1Zkhl
YWRlciB7CisJdWludDY0X3QgbGluazsKKwl1aW50NjRfdCBsYXN0VGlja3M7CisJaW50NjRfdCBw
b3M7CisJc3RydWN0IGxvY2F0aW9uIHN0a1sxMjhdOworfTsKKworc3RydWN0IHRyYWNlU3RhY2tU
YWJsZSB7CisJc3RydWN0IG11dGV4IGxvY2s7CisJdWludDMyX3Qgc2VxOworCXN0cnVjdCB0cmFj
ZUFsbG9jIG1lbTsKKwl1aW50NjRfdCB0YWJbODE5Ml07Cit9OworCitzdHJ1Y3QgdHJhY2VTdGFj
ayB7CisJdWludDY0X3QgbGluazsKKwl1aW50cHRyX3QgaGFzaDsKKwl1aW50MzJfdCBpZDsKKwlp
bnQ2NF90IG47CisJc3RydWN0IGxvY2F0aW9uIHN0a1swXTsKK307CisKK3N0cnVjdCB0cmFjZWJh
Y2tnIHsKKwlzdHJ1Y3QgZyogZ3A7CisJc3RydWN0IGxvY2F0aW9uIGxvY2J1ZlsxMDBdOworCWlu
dDY0X3QgYzsKK307CisjZGVmaW5lIF9HaWRsZSAwCisjZGVmaW5lIF9HcnVubmFibGUgMQorI2Rl
ZmluZSBfR3J1bm5pbmcgMgorI2RlZmluZSBfR3N5c2NhbGwgMworI2RlZmluZSBfR3dhaXRpbmcg
NAorI2RlZmluZSBfR21vcmlidW5kX3VudXNlZCA1CisjZGVmaW5lIF9HZGVhZCA2CisjZGVmaW5l
IF9HZW5xdWV1ZV91bnVzZWQgNworI2RlZmluZSBfR2NvcHlzdGFjayA4CisjZGVmaW5lIF9Hc2Nh
biA0MDk2CisjZGVmaW5lIF9Hc2NhbnJ1bm5hYmxlIDQwOTcKKyNkZWZpbmUgX0dzY2FucnVubmlu
ZyA0MDk4CisjZGVmaW5lIF9Hc2NhbnN5c2NhbGwgNDA5OQorI2RlZmluZSBfR3NjYW53YWl0aW5n
IDQxMDAKKyNkZWZpbmUgX1BpZGxlIDAKKyNkZWZpbmUgX1BydW5uaW5nIDEKKyNkZWZpbmUgX1Bz
eXNjYWxsIDIKKyNkZWZpbmUgX1BnY3N0b3AgMworI2RlZmluZSBfUGRlYWQgNAorI2RlZmluZSBf
UGFnZVNoaWZ0IDEzCisjZGVmaW5lIF9NYXhHb21heHByb2NzIDI1NgorI2RlZmluZSBfTWF4U21h
bGxTaXplIDMyNzY4CisjZGVmaW5lIF9NYXhNZW0gNTQ5NzU1ODEzODg3CisjZGVmaW5lIF9NYXhH
Y3Byb2MgMzIKKyNkZWZpbmUgX0xvY2tFeHRlcm5hbCAxCisjZGVmaW5lIF9Mb2NrSW50ZXJuYWwg
MgorI2RlZmluZSBfU2lnTm90aWZ5IDEKKyNkZWZpbmUgX1NpZ0tpbGwgMgorI2RlZmluZSBfU2ln
VGhyb3cgNAorI2RlZmluZSBfU2lnUGFuaWMgOAorI2RlZmluZSBfU2lnRGVmYXVsdCAxNgorI2Rl
ZmluZSBfU2lnSGFuZGxpbmcgMzIKKyNkZWZpbmUgX1NpZ0dvRXhpdCA2NAorI2RlZmluZSBfU2ln
U2V0U3RhY2sgMTI4CisjZGVmaW5lIF9TaWdVbmJsb2NrIDI1NgorI2RlZmluZSBfVHJhY2VSdW50
aW1lRnJhbWVzIDEKKyNkZWZpbmUgX1RyYWNlVHJhcCAyCisjZGVmaW5lIF9UcmFjZUp1bXBTdGFj
ayA0CisjZGVmaW5lIF9UcmFjZWJhY2tNYXhGcmFtZXMgMTAwCisjZGVmaW5lIF9NSGVhcE1hcF9U
b3RhbEJpdHMgMzkKKyNkZWZpbmUgX051bVNpemVDbGFzc2VzIDY3CmRpZmYgLS1naXQgYS9saWJn
by9pbmNsdWRlL21tX21hbGxvYy5oIGIvbGliZ28vaW5jbHVkZS9tbV9tYWxsb2MuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tIAoyLjE3LjEKCgoKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOW3-0001UJ-T9; Mon, 23 Sep 2019 13:36:35 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOW2-0001U2-RT
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:34 +0000
X-Inumbo-ID: 24e7fc08-de07-11e9-95fd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 24e7fc08-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:36:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 67133F2014;
 Mon, 23 Sep 2019 15:36:27 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 92LUWcP83Jw9; Mon, 23 Sep 2019 15:36:27 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3EE20F2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:36:25 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:04 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:44 +0200
Message-ID: <20190923133544.26927-10-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 09/14] libgo: Wait for patches
 to be applied and update library depedencies
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGF0Y2hlcyBzaG91bGQgYmUgYXBwbGllZCBiZWZvcmUgc3RhcnRpbmcgYnVpbGRpbmcgZ28gcGFj
a2FnZXMuClVwZGF0ZSBkZXBlZGVuY2llcyBvbiBsaWJyYXJ5J3MgY29uZmlnIGZpbGUuCgpTaWdu
ZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIu
ZXU+Ci0tLQogQ29uZmlnLnVrICAgfCAxMSArKysrKysrKysrLQogTWFrZWZpbGUudWsgfCAgOCAr
KysrLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxNCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awppbmRleCBlZGI2YTAwLi5kNTc5
MmE1IDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmlnLnVrCkBAIC00LDcgKzQsMTMg
QEAgbWVudWNvbmZpZyBMSUJHQ0MKIAlzZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKIAlz
ZWxlY3QgTElCVUtERUJVRwogCXNlbGVjdCBMSUJVS0FMTE9DCi0Jc2VsZWN0IExJQlBUSFJFQURf
RU1CRURERUQKKwlzZWxlY3QgTElCVU5XSU5ECisJc2VsZWN0IExJQkNPTVBJTEVSX1JUCisJc2Vs
ZWN0IExJQkNYWAorCXNlbGVjdCBMSUJDWFhBQkkKKwlzZWxlY3QgTElCTkVXTElCCisJc2VsZWN0
IExJQlVLTU1BUAorCXNlbGVjdCBVS1NZU0lORk8KIAogaWYgTElCR0NDCiAKQEAgLTE1LDYgKzIx
LDggQEAgY29uZmlnIExJQkdPCiAJc2VsZWN0IExJQlVDT05URVhUCiAJc2VsZWN0IExJQkJBQ0tU
UkFDRQogCXNlbGVjdCBMSUJGRkkKKwlzZWxlY3QgVUtVTklTVEQKKwlzZWxlY3QgTElCU1lTQ0FM
TF9TSElNCiBpZiBMSUJHTwogZW5kaWYKIApAQCAtMjcsNiArMzUsNyBAQCBlbmRpZgogY29uZmln
IExJQkZGSQogCWJvb2wgImxpYmZmaSAtIEEgUG9ydGFibGUgRm9yZWlnbiBGdW5jdGlvbiBJbnRl
cmZhY2UgTGlicmFyeSIKIAlkZWZhdWx0IG4KKwlzZWxlY3QgTElCUFRIUkVBRF9FTUJFRERFRAog
aWYgTElCRkZJCiBlbmRpZgogCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVr
CmluZGV4IDkyNDU0NDguLjliY2E4ZmEgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01h
a2VmaWxlLnVrCkBAIC0xMzEsMTEgKzEzMSwxMCBAQCBMSUJHT19BU0lOQ0xVREVTLXkgPSAkKExJ
QkdPX0NPTU1PTl9JTkNMVURFUy15KQogTElCR09fQ0lOQ0xVREVTLXkgID0gJChMSUJHT19DT01N
T05fSU5DTFVERVMteSkKIAogTElCR09fQ0ZMQUdTLXkgKz0gLURIQVZFX0NPTkZJR19IIC1EX0lO
Q0xVREVfTUFMTE9DX0hfIFwKLQktZmV4Y2VwdGlvbnMgLWZub24tY2FsbC1leGNlcHRpb25zIC1m
cGxhbjktZXh0ZW5zaW9ucyAtZnNwbGl0LXN0YWNrIFwKKwktZmV4Y2VwdGlvbnMgLWZub24tY2Fs
bC1leGNlcHRpb25zIC1mcGxhbjktZXh0ZW5zaW9ucyAtZm5vLXNwbGl0LXN0YWNrIFwKIAktV2Fs
bCAtV2V4dHJhIC1Xd3JpdGUtc3RyaW5ncyAtV2Nhc3QtcXVhbCAtV25vLXVudXNlZC1mdW5jdGlv
biBcCiAJLW1pbmxpbmUtYWxsLXN0cmluZ29wcyBcCi0JLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJ
TEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgXAotCS1mbm8tc3BsaXQtc3RhY2sKKwkt
RF9HTlVfU09VUkNFIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NAog
TElCR09fQ0ZMQUdTLXkgKz0gLVduby1jYXN0LXF1YWwgLVduby11bnVzZWQtdmFsdWUKIAogTElC
R09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9pbmRleGJ5dGUuY3xieXRl
cwpAQCAtMjAyLDcgKzIwMSw3IEBAIExJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkv
c3lzaW5mby5jCiBMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL21hbGxvYy5jICMg
Z2VuZXJhdGVkCiAKICMgR2VuZXJhdGUgZ28yYyB0b29sCi0kKExJQkdPX0JVSUxEKS9nb2MyYzog
JChMSUJHQ0NfQlVJTEQpLy5vcmlnaW4KKyQoTElCR09fQlVJTEQpL2dvYzJjOiAkKExJQkdDQ19C
VUlMRCkvLnBhdGNoZWQKIAkkKGNhbGwgdmVyYm9zZV9jbWQsR0VOLGxpYmdvOiAkKG5vdGRpciAk
QCksIFwKIAkJY2QgJChMSUJHT19FWFRSQUNURUQpICYmIGdjYyAtbyAkQCAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nb2MyYy5jKQogCkBAIC0yMjQsMyArMjIzLDQgQEAgTElCR09fR09GTEFH
UyA9ICQoTElCR09fR09GTEFHUy15KQogCiBpbmNsdWRlICQoTElCR0NDX0JBU0UpL2xpYmdvL3Bh
Y2thZ2VzLnVrCiAKK0xJQkdPX0VYUE9SVFMgPSAkKExJQkdDQ19CQVNFKS9saWJnby9leHBvcnRz
eW1zLnVrCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:36:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:36:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOW8-0001VF-Up; Mon, 23 Sep 2019 13:36:40 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOW7-0001V6-SE
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:39 +0000
X-Inumbo-ID: 276d905a-de07-11e9-95fd-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 276d905a-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:36:32 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 9FDA11055B4;
 Mon, 23 Sep 2019 15:36:31 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id K3rfINFLg5re; Mon, 23 Sep 2019 15:36:31 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 7C2DD105530;
 Mon, 23 Sep 2019 15:36:31 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:03 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:42 +0200
Message-ID: <20190923133544.26927-8-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 07/14] libgo: Add patches to
 build the library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KCmxpYmdvIGV4cGVjdHMg
YSB1bndpbmQuaCBoZWFkZXIgYWx0aG91Z2ggaXQgY29tZXMgd2l0aCBpdHMgb3duIGhlYWRlciwK
dW53aW5kLWdlbmVyaWMuaCwgc28gd2Ugd2lsbCBiZSB1c2luZyB0aGF0IG9uZSBpbnN0ZWFkLgoK
VGhlIHNlY29uZCBwYXRjaCBzaG91bGQgYmUgYWxzbyB1cHN0cmVhbWVkIHNpbmNlIGl0IHNlZW1z
IHRvIHJlbW92ZSBhbgp1bm5lY2Vzc2FyeSBpbmNsdWRlIGRpcmVjdGl2ZS4KClNpZ25lZC1vZmYt
Ynk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0tLQogLi4uLXVud2luZC1o
ZWFkZXItaW5zdGVhZC1vZi1zeXN0ZW0tb25lLnBhdGNoIHwgMjUgKysrKysrKysrKysrKysrKysr
KwogcGF0Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0Y2ggICAgIHwgMjUgKysr
KysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspCiBjcmVh
dGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLWxpYmdvLVVzZS1nY2Mtb3duLXVud2luZC1oZWFk
ZXItaW5zdGVhZC1vZi1zeXN0ZW0tb25lLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hl
cy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0Y2gKCmRpZmYgLS1naXQgYS9wYXRjaGVz
LzAwMDEtbGliZ28tVXNlLWdjYy1vd24tdW53aW5kLWhlYWRlci1pbnN0ZWFkLW9mLXN5c3RlbS1v
bmUucGF0Y2ggYi9wYXRjaGVzLzAwMDEtbGliZ28tVXNlLWdjYy1vd24tdW53aW5kLWhlYWRlci1p
bnN0ZWFkLW9mLXN5c3RlbS1vbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2VjMDliYwotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwMS1saWJnby1Vc2Ut
Z2NjLW93bi11bndpbmQtaGVhZGVyLWluc3RlYWQtb2Ytc3lzdGVtLW9uZS5wYXRjaApAQCAtMCww
ICsxLDI1IEBACitGcm9tIDU5NmIzYjMzZTcyYzVjNjRjYjdlYWQ0YWVlMjk4Mzg2OTAwOGFkNDQg
TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitEYXRlOiBGcmksIDE2IEF1ZyAyMDE5IDIzOjEzOjAz
ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBsaWJnbzogVXNlIGdjYyBvd24gdW53aW5kIGhl
YWRlciBpbnN0ZWFkIG9mIHN5c3RlbSBvbmUKKworU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUg
PGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KKy0tLQorIGxpYmdvL3J1bnRpbWUvZ28tdW53aW5kLmMg
fCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisK
K2RpZmYgLS1naXQgYS9saWJnby9ydW50aW1lL2dvLXVud2luZC5jIGIvbGliZ28vcnVudGltZS9n
by11bndpbmQuYworaW5kZXggNGM5ZmI0OWM5Li45MDdiYTAzMzYgMTAwNjQ0CistLS0gYS9saWJn
by9ydW50aW1lL2dvLXVud2luZC5jCisrKysgYi9saWJnby9ydW50aW1lL2dvLXVud2luZC5jCitA
QCAtOSw3ICs5LDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5o
PgorCistI2luY2x1ZGUgInVud2luZC5oIgorKyNpbmNsdWRlICJ1bndpbmQtZ2VuZXJpYy5oIgor
ICNkZWZpbmUgTk9fU0laRV9PRl9FTkNPREVEX1ZBTFVFCisgI2luY2x1ZGUgInVud2luZC1wZS5o
IgorCistLQorMi4yMC4xCisKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMi1saWJnby1Oby1mdXRl
eC10b25pZ2h0LnBhdGNoIGIvcGF0Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0
Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MmU0NwotLS0gL2Rldi9u
dWxsCisrKyBiL3BhdGNoZXMvMDAwMi1saWJnby1Oby1mdXRleC10b25pZ2h0LnBhdGNoCkBAIC0w
LDAgKzEsMjUgQEAKK0Zyb20gNWVhOWQ3NjA2MGIwMzQ3MDAyNDY4MTU5ZmM1MGI4ZjgxYmM3MjZi
MSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVw
QGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTYgQXVnIDIwMTkgMjM6MTQ6MzQgKzAyMDAKK1N1Ympl
Y3Q6IFtQQVRDSCAyLzJdIGxpYmdvOiBObyBmdXRleCB0b25pZ2h0CisKK1NpZ25lZC1vZmYtYnk6
IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CistLS0KKyBsaWJnby9ydW50aW1l
L3RocmVhZC1saW51eC5jIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkKKwor
ZGlmZiAtLWdpdCBhL2xpYmdvL3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMgYi9saWJnby9ydW50aW1l
L3RocmVhZC1saW51eC5jCitpbmRleCA4MWFkMGY5YzkuLmZkNWEzMTE4MiAxMDA2NDQKKy0tLSBh
L2xpYmdvL3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMKKysrKyBiL2xpYmdvL3J1bnRpbWUvdGhyZWFk
LWxpbnV4LmMKK0BAIC05LDcgKzksNiBAQAorCisgI2luY2x1ZGUgPHVuaXN0ZC5oPgorICNpbmNs
dWRlIDxzeXNjYWxsLmg+CistI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisKKyB2b2lkCisgcnVu
dGltZV9vc2luaXQodm9pZCkKKy0tCisyLjIwLjEKKwotLSAKMi4xNy4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:39:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:39:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOYl-0001cz-HP; Mon, 23 Sep 2019 13:39:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOWC-0001W4-Rv
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:36:45 +0000
X-Inumbo-ID: 280a7eb0-de07-11e9-95fd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 280a7eb0-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:36:33 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 76C91F2013;
 Mon, 23 Sep 2019 15:36:32 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id E5sCUv3EkCRM; Mon, 23 Sep 2019 15:36:31 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 4CDBDF2012;
 Mon, 23 Sep 2019 15:36:27 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:36:03 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:35:41 +0200
Message-ID: <20190923133544.26927-7-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
X-Mailman-Approved-At: Mon, 23 Sep 2019 13:39:22 +0000
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 06/14] libgo: Add rules for
 building runtime Go packages
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KClRoZSBwYWNrYWdlcy51
ayBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgY2FwdHVyaW5nIHRoZSBidWlsZGluZyBjb21tYW5kcyBm
cm9tIHRoZQpvdXRwdXQgb2YgdGhlIG9yaWdpbmFsIGxpYmdvIGJ1aWxkLiBUaGlzIHBhdGNoIGFs
c28gYWRkcyB0aGUgZ2VuZXJhdGVkIC5nbwpmaWxlcyBuZWVkZWQgZm9yIHRoZSBidWlsZCBvZiBw
YWNrYWdlcy4KClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIu
cm8+Ci0tLQogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogbGli
Z28vZ2VuZXJhdGVkL2Vwb2xsLmdvICAgICAgICAgICB8ICAgIDYgKwogbGliZ28vZ2VuZXJhdGVk
L2xpYmNhbGxzLmdvICAgICAgICB8IDM0ODAgKysrKysrKysrKysKIGxpYmdvL2dlbmVyYXRlZC9y
dW50aW1lX3N5c2luZm8uZ28gfCA2MjE5ICsrKysrKysrKysrKysrKysrKysKIGxpYmdvL2dlbmVy
YXRlZC9zaWd0YWIuZ28gICAgICAgICAgfCAgIDcxICsKIGxpYmdvL2dlbmVyYXRlZC9zeXNjYWxs
X2FyY2guZ28gICAgfCAgICAzICsKIGxpYmdvL2dlbmVyYXRlZC9zeXNpbmZvLmdvICAgICAgICAg
fCA5MjgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYmdvL2dlbmVyYXRlZC92ZXJz
aW9uLmdvICAgICAgICAgfCAgIDc3ICsKIGxpYmdvL3BhY2thZ2VzLnVrICAgICAgICAgICAgICAg
ICAgfCAgOTgxICsrKwogOSBmaWxlcyBjaGFuZ2VkLCAyMDEzMCBpbnNlcnRpb25zKCspCiBjcmVh
dGUgbW9kZSAxMDA2NDQgbGliZ28vZ2VuZXJhdGVkL2Vwb2xsLmdvCiBjcmVhdGUgbW9kZSAxMDA2
NDQgbGliZ28vZ2VuZXJhdGVkL2xpYmNhbGxzLmdvCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ28v
Z2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdvL2dl
bmVyYXRlZC9zaWd0YWIuZ28KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnby9nZW5lcmF0ZWQvc3lz
Y2FsbF9hcmNoLmdvCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ28vZ2VuZXJhdGVkL3N5c2luZm8u
Z28KIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnby9nZW5lcmF0ZWQvdmVyc2lvbi5nbwogY3JlYXRl
IG1vZGUgMTAwNjQ0IGxpYmdvL3BhY2thZ2VzLnVrCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsg
Yi9NYWtlZmlsZS51awppbmRleCA1OTAyNGFlLi43ZGY3NzVkIDEwMDY0NAotLS0gYS9NYWtlZmls
ZS51aworKysgYi9NYWtlZmlsZS51awpAQCAtMjEzLDMgKzIxMywxNCBAQCAkKExJQkdPX0VYVFJB
Q1RFRCkvbWFsbG9jLmM6ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL21hbGxvYy5nb2MgJChM
SUJHT19CVUlMRAogCiBVS19QUkVQQVJFICs9ICQoTElCR09fQlVJTEQpL2dvYzJjICQoTElCR09f
RVhUUkFDVEVEKS9tYWxsb2MuYwogCisjIEdvIHBhY2thZ2VzCitMSUJHT19HT0ZMQUdTLXkgKz0g
LW1pbmxpbmUtYWxsLXN0cmluZ29wcyAtZm5vLXNwbGl0LXN0YWNrCitMSUJHT19HT0ZMQUdTLSQo
Q09ORklHX0RFQlVHX1NZTUJPTFNfTFZMMCkgKz0gLWcwCitMSUJHT19HT0ZMQUdTLSQoQ09ORklH
X0RFQlVHX1NZTUJPTFNfTFZMMSkgKz0gLWcxCitMSUJHT19HT0ZMQUdTLSQoQ09ORklHX0RFQlVH
X1NZTUJPTFNfTFZMMikgKz0gLWcyCitMSUJHT19HT0ZMQUdTLSQoQ09ORklHX0RFQlVHX1NZTUJP
TFNfTFZMMykgKz0gLWczCitMSUJHT19HT0ZMQUdTLXkgKz0gLUkkKExJQkdPX0JVSUxEKQorTElC
R09fR09GTEFHUyA9ICQoTElCR09fR09GTEFHUy15KQorCitpbmNsdWRlICQoTElCR0NDX0JBU0Up
L2xpYmdvL3BhY2thZ2VzLnVrCisKZGlmZiAtLWdpdCBhL2xpYmdvL2dlbmVyYXRlZC9lcG9sbC5n
byBiL2xpYmdvL2dlbmVyYXRlZC9lcG9sbC5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iNzEzZGU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ28vZ2VuZXJhdGVkL2Vwb2xs
LmdvCkBAIC0wLDAgKzEsNiBAQAorcGFja2FnZSBzeXNjYWxsCit0eXBlIEVwb2xsRXZlbnQgc3Ry
dWN0IHsKKwlFdmVudHMgdWludDMyCisJRmQgaW50MzIKKwlQYWQgWzRdYnl0ZQorfQpkaWZmIC0t
Z2l0IGEvbGliZ28vZ2VuZXJhdGVkL2xpYmNhbGxzLmdvIGIvbGliZ28vZ2VuZXJhdGVkL2xpYmNh
bGxzLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NjU2NDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9saWJnby9nZW5lcmF0ZWQvbGliY2FsbHMuZ28KQEAgLTAsMCArMSwzNDgw
IEBACisvLyBUaGlzIGZpbGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IG1rc3lzY2Fs
bC5hd2sKKworcGFja2FnZSBzeXNjYWxsCisKK2ltcG9ydCAidW5zYWZlIgorCisvLyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBzdHJlcnJvcl9yL3N0cmVycm9yX3IKKy8vZXh0
ZXJuIHN0cmVycm9yX3IKK2Z1bmMgY19zdHJlcnJvcl9yKGVycm51bSBfQ19pbnQsIGIgKmJ5dGUs
IGxlbiBTaXplX3QpICpieXRlCitmdW5jIHN0cmVycm9yX3IoZXJybnVtIGludCwgYiBbXWJ5dGUp
IChlcnJzdHIgKmJ5dGUpIHsKKwl2YXIgX3AyICpieXRlCisJaWYgbGVuKGIpID4gMCB7CisJCV9w
MiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJmJbMF0pKQorCX0gZWxzZSB7CisJCV9wMiA9ICgq
Ynl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJX3IgOj0gY19zdHJlcnJvcl9yKF9D
X2ludChlcnJudW0pLCBfcDIsIFNpemVfdChsZW4oYikpKQorCWVycnN0ciA9ICgqYnl0ZSkoX3Ip
CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJh
d19wcmN0bC9wcmN0bAorLy9leHRlcm4gcHJjdGwKK2Z1bmMgY19wcmN0bChvcHRpb24gX0NfaW50
LCBhcmcyIF9DX2xvbmcsIGFyZzMgX0NfbG9uZywgYXJnNCBfQ19sb25nLCBhcmc1IF9DX2xvbmcp
IF9DX2ludAorZnVuYyByYXdfcHJjdGwob3B0aW9uIGludCwgYXJnMiBpbnQsIGFyZzMgaW50LCBh
cmc0IGludCwgYXJnNSBpbnQpIChyZXQgaW50LCBlcnIgRXJybm8pIHsKKwlfciA6PSBjX3ByY3Rs
KF9DX2ludChvcHRpb24pLCBfQ19sb25nKGFyZzIpLCBfQ19sb25nKGFyZzMpLCBfQ19sb25nKGFy
ZzQpLCBfQ19sb25nKGFyZzUpKQorCXJldCA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubwor
CXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJ
CXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQor
CXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdf
Zm9yay9mb3JrCisvL2V4dGVybiBmb3JrCitmdW5jIGNfZm9yaygpIFBpZF90CitmdW5jIHJhd19m
b3JrKCkgKHBpZCBQaWRfdCwgZXJyIEVycm5vKSB7CisJX3IgOj0gY19mb3JrKCkKKwlwaWQgPSAo
UGlkX3QpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfZ2V0cGlkL2dldHBpZAorLy9leHRlcm4gZ2V0
cGlkCitmdW5jIGNfZ2V0cGlkKCkgUGlkX3QKK2Z1bmMgcmF3X2dldHBpZCgpIChwaWQgUGlkX3Qp
IHsKKwlfciA6PSBjX2dldHBpZCgpCisJcGlkID0gKFBpZF90KShfcikKKwlyZXR1cm4KK30KKwor
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2dldHBwaWQvZ2V0cHBp
ZAorLy9leHRlcm4gZ2V0cHBpZAorZnVuYyBjX2dldHBwaWQoKSBQaWRfdAorZnVuYyByYXdfZ2V0
cHBpZCgpIChwaWQgUGlkX3QpIHsKKwlfciA6PSBjX2dldHBwaWQoKQorCXBpZCA9IChQaWRfdCko
X3IpCisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IHJhd19zZXRzaWQvc2V0c2lkCisvL2V4dGVybiBzZXRzaWQKK2Z1bmMgY19zZXRzaWQoKSBQaWRf
dAorZnVuYyByYXdfc2V0c2lkKCkgKGVyciBFcnJubykgeworCV9yIDo9IGNfc2V0c2lkKCkKKwl2
YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5v
ID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQll
cnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgcmF3X3NldHBnaWQvc2V0cGdpZAorLy9leHRlcm4gc2V0cGdpZAorZnVuYyBj
X3NldHBnaWQocGlkIFBpZF90LCBwZ2lkIFBpZF90KSBfQ19pbnQKK2Z1bmMgcmF3X3NldHBnaWQo
cGlkIGludCwgcGdpZCBpbnQpIChlcnIgRXJybm8pIHsKKwlfciA6PSBjX3NldHBnaWQoUGlkX3Qo
cGlkKSwgUGlkX3QocGdpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19jaHJvb3QvY2hyb290CisvL2V4
dGVybiBjaHJvb3QKK2Z1bmMgY19jaHJvb3QocGF0aCAqYnl0ZSkgX0NfaW50CitmdW5jIHJhd19j
aHJvb3QocGF0aCAqYnl0ZSkgKGVyciBFcnJubykgeworCV9yIDo9IGNfY2hyb290KHBhdGgpCisJ
dmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJu
byA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIHJhd19jaGRpci9jaGRpcgorLy9leHRlcm4gY2hkaXIKK2Z1bmMgY19jaGRp
cihwYXRoICpieXRlKSBfQ19pbnQKK2Z1bmMgcmF3X2NoZGlyKHBhdGggKmJ5dGUpIChlcnIgRXJy
bm8pIHsKKwlfciA6PSBjX2NoZGlyKHBhdGgpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8g
Oj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8g
PSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9
CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19mY250bC9fX2dv
X2ZjbnRsCisvL2V4dGVybiBfX2dvX2ZjbnRsCitmdW5jIGNfX19nb19mY250bChmZCBfQ19pbnQs
IGNtZCBfQ19pbnQsIGFyZyBfQ19pbnQpIF9DX2ludAorZnVuYyByYXdfZmNudGwoZmQgaW50LCBj
bWQgaW50LCBhcmcgaW50KSAodmFsIGludCwgZXJyIEVycm5vKSB7CisJX3IgOj0gY19fX2dvX2Zj
bnRsKF9DX2ludChmZCksIF9DX2ludChjbWQpLCBfQ19pbnQoYXJnKSkKKwl2YWwgPSAoaW50KShf
cikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJ
CWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgcmF3X2Nsb3NlL2Nsb3NlCisvL2V4dGVybiBjbG9zZQorZnVuYyBj
X2Nsb3NlKGZkIF9DX2ludCkgX0NfaW50CitmdW5jIHJhd19jbG9zZShmZCBpbnQpIChlcnIgRXJy
bm8pIHsKKwlfciA6PSBjX2Nsb3NlKF9DX2ludChmZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0
RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0
RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19pb2N0
bC9fX2dvX2lvY3RsCisvL2V4dGVybiBfX2dvX2lvY3RsCitmdW5jIGNfX19nb19pb2N0bChmZCBf
Q19pbnQsIGNtZCBfQ19pbnQsIHZhbCBfQ19pbnQpIF9DX2ludAorZnVuYyByYXdfaW9jdGwoZmQg
aW50LCBjbWQgdWludHB0ciwgdmFsIGludCkgKHJ2YWwgaW50LCBlcnIgRXJybm8pIHsKKwlfciA6
PSBjX19fZ29faW9jdGwoX0NfaW50KGZkKSwgX0NfaW50KGNtZCksIF9DX2ludCh2YWwpKQorCXJ2
YWwgPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
aWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2lvY3RsX3B0ci9fX2dvX2lvY3RsX3B0
cgorLy9leHRlcm4gX19nb19pb2N0bF9wdHIKK2Z1bmMgY19fX2dvX2lvY3RsX3B0cihmZCBfQ19p
bnQsIGNtZCBfQ19pbnQsIHZhbCB1bnNhZmUuUG9pbnRlcikgX0NfaW50CitmdW5jIHJhd19pb2N0
bF9wdHIoZmQgaW50LCBjbWQgdWludHB0ciwgdmFsIHVuc2FmZS5Qb2ludGVyKSAocnZhbCBpbnQs
IGVyciBFcnJubykgeworCV9yIDo9IGNfX19nb19pb2N0bF9wdHIoX0NfaW50KGZkKSwgX0NfaW50
KGNtZCksIHVuc2FmZS5Qb2ludGVyKHZhbCkpCisJcnZhbCA9IChpbnQpKF9yKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciByYXdfZXhlY3ZlL2V4ZWN2ZQorLy9leHRlcm4gZXhlY3ZlCitmdW5jIGNfZXhlY3ZlKGFy
Z3YwICpieXRlLCBhcmd2ICoqYnl0ZSwgZW52diAqKmJ5dGUpIF9DX2ludAorZnVuYyByYXdfZXhl
Y3ZlKGFyZ3YwICpieXRlLCBhcmd2ICoqYnl0ZSwgZW52diAqKmJ5dGUpIChlcnIgRXJybm8pIHsK
KwlfciA6PSBjX2V4ZWN2ZShhcmd2MCwgYXJndiwgZW52dikKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwly
ZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X3dy
aXRlL3dyaXRlCisvL2V4dGVybiB3cml0ZQorZnVuYyBjX3dyaXRlKGZkIF9DX2ludCwgYnVmICpi
eXRlLCBjb3VudCBTaXplX3QpIFNzaXplX3QKK2Z1bmMgcmF3X3dyaXRlKGZkIGludCwgYnVmICpi
eXRlLCBjb3VudCBpbnQpIChlcnIgRXJybm8pIHsKKwlfciA6PSBjX3dyaXRlKF9DX2ludChmZCks
IGJ1ZiwgU2l6ZV90KGNvdW50KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxz
ZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUK
Kwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2V4aXQvX2V4aXQKKy8vZXh0
ZXJuIF9leGl0CitmdW5jIGNfX2V4aXQoc3RhdHVzIF9DX2ludCkgCitmdW5jIHJhd19leGl0KHN0
YXR1cyBpbnQpIHsKKwljX19leGl0KF9DX2ludChzdGF0dXMpKQorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfZHVwMi9kdXAyCisvL2V4dGVybiBkdXAyCitm
dW5jIGNfZHVwMihvbGRmZCBfQ19pbnQsIG5ld2ZkIF9DX2ludCkgX0NfaW50CitmdW5jIHJhd19k
dXAyKG9sZGZkIGludCwgbmV3ZmQgaW50KSAoZXJyIEVycm5vKSB7CisJX3IgOj0gY19kdXAyKF9D
X2ludChvbGRmZCksIF9DX2ludChuZXdmZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8g
Oj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8g
PSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9
CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19raWxsL2tpbGwK
Ky8vZXh0ZXJuIGtpbGwKK2Z1bmMgY19raWxsKHBpZCBQaWRfdCwgc2lnIF9DX2ludCkgX0NfaW50
CitmdW5jIHJhd19raWxsKHBpZCBQaWRfdCwgc2lnIFNpZ25hbCkgKGVyciBFcnJubykgeworCV9y
IDo9IGNfa2lsbChQaWRfdChwaWQpLCBfQ19pbnQoc2lnKSkKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwly
ZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X3Nl
dGdyb3Vwcy9zZXRncm91cHMKKy8vZXh0ZXJuIHNldGdyb3VwcworZnVuYyBjX3NldGdyb3Vwcyhz
aXplIFNpemVfdCwgbGlzdCAqR2lkX3QpIF9DX2ludAorZnVuYyByYXdfc2V0Z3JvdXBzKHNpemUg
aW50LCBsaXN0IHVuc2FmZS5Qb2ludGVyKSAoZXJyIEVycm5vKSB7CisJX3IgOj0gY19zZXRncm91
cHMoU2l6ZV90KHNpemUpLCAoKkdpZF90KShsaXN0KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRF
cnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRF
cnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1
cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgT3BlbmF0L19f
Z29fb3BlbmF0CisvL2V4dGVybiBfX2dvX29wZW5hdAorZnVuYyBjX19fZ29fb3BlbmF0KGRpcmZk
IF9DX2ludCwgcGF0aCAqYnl0ZSwgZmxhZ3MgX0NfaW50LCBtb2RlIE1vZGVfdCkgX0NfaW50Citm
dW5jIE9wZW5hdChkaXJmZCBpbnQsIHBhdGggc3RyaW5nLCBmbGFncyBpbnQsIG1vZGUgdWludDMy
KSAoZmQgaW50LCBlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRl
UHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50
ZXJzeXNjYWxsKCkKKwlfciA6PSBjX19fZ29fb3BlbmF0KF9DX2ludChkaXJmZCksIF9wMiwgX0Nf
aW50KGZsYWdzKSwgTW9kZV90KG1vZGUpKQorCWZkID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVy
cm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5v
KCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7
CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBmdXRpbWVzYXQvZnV0aW1lc2F0CisvL2V4dGVybiBmdXRpbWVzYXQK
K2Z1bmMgY19mdXRpbWVzYXQoZGlyZmQgX0NfaW50LCBwYXRoICpieXRlLCB0aW1lcyAqWzJdVGlt
ZXZhbCkgX0NfaW50CitmdW5jIGZ1dGltZXNhdChkaXJmZCBpbnQsIHBhdGggKmJ5dGUsIHRpbWVz
ICpbMl1UaW1ldmFsKSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2Z1
dGltZXNhdChfQ19pbnQoZGlyZmQpLCBwYXRoLCB0aW1lcykKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJy
ID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIHB0cmFjZS9wdHJhY2UKKy8vZXh0ZXJuIHB0cmFjZQorZnVuYyBjX3B0cmFjZShy
ZXF1ZXN0IF9DX2ludCwgcGlkIFBpZF90LCBhZGRyICpieXRlLCBkYXRhICpieXRlKSBfQ19sb25n
CitmdW5jIHB0cmFjZShyZXF1ZXN0IGludCwgcGlkIGludCwgYWRkciB1aW50cHRyLCBkYXRhIHVp
bnRwdHIpIChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfcHRyYWNlKF9D
X2ludChyZXF1ZXN0KSwgUGlkX3QocGlkKSwgKCpieXRlKSh1bnNhZmUuUG9pbnRlcihhZGRyKSks
ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoZGF0YSkpKQorCXZhciBlcnJubyBFcnJubworCXNldEVy
cm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVy
cm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBl
cnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgcmF3X3B0cmFjZS9wdHJhY2UKK2Z1bmMgcmF3X3B0cmFjZShyZXF1ZXN0IGludCwgcGlk
IGludCwgYWRkciAqYnl0ZSwgZGF0YSAqYnl0ZSkgKGVyciBFcnJubykgeworCV9yIDo9IGNfcHRy
YWNlKF9DX2ludChyZXF1ZXN0KSwgUGlkX3QocGlkKSwgYWRkciwgZGF0YSkKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgcmVib290L3JlYm9vdAorLy9leHRlcm4gcmVib290CitmdW5jIGNfcmVib290KG1hZ2ljMSBf
Q191aW50LCBtYWdpYzIgX0NfdWludCwgY21kIF9DX2ludCwgYXJnICpieXRlKSBfQ19pbnQKK2Z1
bmMgcmVib290KG1hZ2ljMSB1aW50LCBtYWdpYzIgdWludCwgY21kIGludCwgYXJnIHN0cmluZykg
KGVyciBlcnJvcikgeworCXZhciBfcDQgKmJ5dGUKKwlfcDQsIGVyciA9IEJ5dGVQdHJGcm9tU3Ry
aW5nKGFyZykKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgp
CisJX3IgOj0gY19yZWJvb3QoX0NfdWludChtYWdpYzEpLCBfQ191aW50KG1hZ2ljMiksIF9DX2lu
dChjbWQpLCBfcDQpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4
aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBhY2NlcHQ0L2FjY2Vw
dDQKKy8vZXh0ZXJuIGFjY2VwdDQKK2Z1bmMgY19hY2NlcHQ0KGZkIF9DX2ludCwgc2EgKlJhd1Nv
Y2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCwgZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgYWNj
ZXB0NChmZCBpbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVuX3QsIGZsYWdzIGlu
dCkgKG5mZCBpbnQsIGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19hY2Nl
cHQ0KF9DX2ludChmZCksIHNhLCBsZW4sIF9DX2ludChmbGFncykpCisJbmZkID0gKGludCkoX3Ip
CisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQll
cnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkK
KwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBBY2N0L2FjY3QKKy8vZXh0ZXJuIGFjY3QK
K2Z1bmMgY19hY2N0KHBhdGggKmJ5dGUpIF9DX2ludAorZnVuYyBBY2N0KHBhdGggc3RyaW5nKSAo
ZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJp
bmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgp
CisJX3IgOj0gY19hY2N0KF9wMSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxz
ZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUK
Kwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJ
cmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEFkanRp
bWV4L2FkanRpbWV4CisvL2V4dGVybiBhZGp0aW1leAorZnVuYyBjX2FkanRpbWV4KGJ1ZiAqVGlt
ZXgpIF9DX2ludAorZnVuYyBBZGp0aW1leChidWYgKlRpbWV4KSAoc3RhdGUgaW50LCBlcnIgZXJy
b3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfYWRqdGltZXgoYnVmKQorCXN0YXRlID0g
KGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8
IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRz
eXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQor
CisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBEdXAzL2R1cDMKKy8vZXh0
ZXJuIGR1cDMKK2Z1bmMgY19kdXAzKG9sZGZkIF9DX2ludCwgbmV3ZmQgX0NfaW50LCBmbGFncyBf
Q19pbnQpIF9DX2ludAorZnVuYyBEdXAzKG9sZGZkIGludCwgbmV3ZmQgaW50LCBmbGFncyBpbnQp
IChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2R1cDMoX0NfaW50KG9sZGZkKSwgX0NfaW50KG5ld2Zk
KSwgX0NfaW50KGZsYWdzKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQor
CWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9
CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmFjY2Vzc2F0L2ZhY2Nlc3NhdAorLy9l
eHRlcm4gZmFjY2Vzc2F0CitmdW5jIGNfZmFjY2Vzc2F0KGRpcmZkIF9DX2ludCwgcGF0aG5hbWUg
KmJ5dGUsIG1vZGUgX0NfaW50LCBmbGFncyBfQ19pbnQpIF9DX2ludAorZnVuYyBGYWNjZXNzYXQo
ZGlyZmQgaW50LCBwYXRoIHN0cmluZywgbW9kZSB1aW50MzIsIGZsYWdzIGludCkgKGVyciBlcnJv
cikgeworCXZhciBfcDIgKmJ5dGUKKwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgp
CisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9
IGNfZmFjY2Vzc2F0KF9DX2ludChkaXJmZCksIF9wMiwgX0NfaW50KG1vZGUpLCBfQ19pbnQoZmxh
Z3MpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsK
KwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2Fs
bCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmFsbG9jYXRlL2ZhbGxvY2F0ZQor
Ly9leHRlcm4gZmFsbG9jYXRlCitmdW5jIGNfZmFsbG9jYXRlKGZkIF9DX2ludCwgbW9kZSBfQ19p
bnQsIG9mZnNldCBPZmZzZXRfdCwgbGVuIE9mZnNldF90KSBfQ19pbnQKK2Z1bmMgRmFsbG9jYXRl
KGZkIGludCwgbW9kZSB1aW50MzIsIG9mZiBpbnQ2NCwgbGVuIGludDY0KSAoZXJyIGVycm9yKSB7
CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2ZhbGxvY2F0ZShfQ19pbnQoZmQpLCBfQ19pbnQo
bW9kZSksIE9mZnNldF90KG9mZiksIE9mZnNldF90KGxlbikpCisJdmFyIGVycm5vIEVycm5vCisJ
c2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJ
c2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVy
ciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBGY2htb2RhdC9mY2htb2RhdAorLy9leHRlcm4gZmNobW9kYXQKK2Z1bmMgY19m
Y2htb2RhdChkaXJmZCBfQ19pbnQsIHBhdGhuYW1lICpieXRlLCBtb2RlIE1vZGVfdCwgZmxhZ3Mg
X0NfaW50KSBfQ19pbnQKK2Z1bmMgRmNobW9kYXQoZGlyZmQgaW50LCBwYXRoIHN0cmluZywgbW9k
ZSB1aW50MzIsIGZsYWdzIGludCkgKGVyciBlcnJvcikgeworCXZhciBfcDIgKmJ5dGUKKwlfcDIs
IGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVy
bgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfZmNobW9kYXQoX0NfaW50KGRpcmZkKSwg
X3AyLCBNb2RlX3QobW9kZSksIF9DX2ludChmbGFncykpCisJdmFyIGVycm5vIEVycm5vCisJc2V0
RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0
RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9
IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBGY2hvd25hdC9mY2hvd25hdAorLy9leHRlcm4gZmNob3duYXQKK2Z1bmMgY19mY2hv
d25hdChkaXJmZCBfQ19pbnQsIHBhdGggKmJ5dGUsIG93bmVyIFVpZF90LCBncm91cCBHaWRfdCwg
ZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgRmNob3duYXQoZGlyZmQgaW50LCBwYXRoIHN0cmlu
ZywgdWlkIGludCwgZ2lkIGludCwgZmxhZ3MgaW50KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMiAq
Ynl0ZQorCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmls
IHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19mY2hvd25hdChfQ19p
bnQoZGlyZmQpLCBfcDIsIFVpZF90KHVpZCksIEdpZF90KGdpZCksIF9DX2ludChmbGFncykpCisJ
dmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJu
byA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlp
ZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGbG9jay9mbG9jaworLy9leHRlcm4gZmxvY2sK
K2Z1bmMgY19mbG9jayhmZCBfQ19pbnQsIGhvdyBfQ19pbnQpIF9DX2ludAorZnVuYyBGbG9jayhm
ZCBpbnQsIGhvdyBpbnQpIChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNf
ZmxvY2soX0NfaW50KGZkKSwgX0NfaW50KGhvdykpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJy
bm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJy
bm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBGc3RhdGZzL2ZzdGF0ZnMKKy8vZXh0ZXJuIGZzdGF0ZnMKK2Z1bmMgY19mc3RhdGZzKGZk
IF9DX2ludCwgYnVmICpTdGF0ZnNfdCkgX0NfaW50CitmdW5jIEZzdGF0ZnMoZmQgaW50LCBidWYg
KlN0YXRmc190KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2ZzdGF0
ZnMoX0NfaW50KGZkKSwgYnVmKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNl
CisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQor
CX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwly
ZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0eGF0
dHIvZ2V0eGF0dHIKKy8vZXh0ZXJuIGdldHhhdHRyCitmdW5jIGNfZ2V0eGF0dHIocGF0aCAqYnl0
ZSwgYXR0ciAqYnl0ZSwgYnVmICpieXRlLCBjb3VudCBTaXplX3QpIFNzaXplX3QKK2Z1bmMgR2V0
eGF0dHIocGF0aCBzdHJpbmcsIGF0dHIgc3RyaW5nLCBkZXN0IFtdYnl0ZSkgKHN6IGludCwgZXJy
IGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmco
cGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCXZhciBfcDIgKmJ5dGUKKwlf
cDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKGF0dHIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJl
dHVybgorCX0KKwl2YXIgX3AzICpieXRlCisJaWYgbGVuKGRlc3QpID4gMCB7CisJCV9wMyA9ICgq
Ynl0ZSkodW5zYWZlLlBvaW50ZXIoJmRlc3RbMF0pKQorCX0gZWxzZSB7CisJCV9wMyA9ICgqYnl0
ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBj
X2dldHhhdHRyKF9wMSwgX3AyLCBfcDMsIFNpemVfdChsZW4oZGVzdCkpKQorCXN6ID0gKGludCko
X3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgewor
CQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxs
KCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBJbm90aWZ5QWRkV2F0Y2gvaW5vdGlm
eV9hZGRfd2F0Y2gKKy8vZXh0ZXJuIGlub3RpZnlfYWRkX3dhdGNoCitmdW5jIGNfaW5vdGlmeV9h
ZGRfd2F0Y2goZmQgX0NfaW50LCBwYXRobmFtZSAqYnl0ZSwgbWFzayB1aW50MzIpIF9DX2ludAor
ZnVuYyBJbm90aWZ5QWRkV2F0Y2goZmQgaW50LCBwYXRobmFtZSBzdHJpbmcsIG1hc2sgdWludDMy
KSAod2F0Y2hkZXNjIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJy
ID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aG5hbWUpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVy
bgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfaW5vdGlmeV9hZGRfd2F0Y2goX0NfaW50
KGZkKSwgX3AyLCB1aW50MzIobWFzaykpCisJd2F0Y2hkZXNjID0gKGludCkoX3IpCisJdmFyIGVy
cm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdl
dEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRF
cnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBJbm90aWZ5SW5pdC9pbm90aWZ5X2luaXQKKy8vZXh0ZXJu
IGlub3RpZnlfaW5pdAorZnVuYyBjX2lub3RpZnlfaW5pdCgpIF9DX2ludAorZnVuYyBJbm90aWZ5
SW5pdCgpIChmZCBpbnQsIGVyciBlcnJvcikgeworCV9yIDo9IGNfaW5vdGlmeV9pbml0KCkKKwlm
ZCA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYg
X3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlp
ZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBJbm90aWZ5SW5pdDEvaW5vdGlmeV9pbml0MQor
Ly9leHRlcm4gaW5vdGlmeV9pbml0MQorZnVuYyBjX2lub3RpZnlfaW5pdDEoZmxhZ3MgX0NfaW50
KSBfQ19pbnQKK2Z1bmMgSW5vdGlmeUluaXQxKGZsYWdzIGludCkgKGZkIGludCwgZXJyIGVycm9y
KSB7CisJX3IgOj0gY19pbm90aWZ5X2luaXQxKF9DX2ludChmbGFncykpCisJZmQgPSAoaW50KShf
cikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJ
CWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgSW5vdGlmeVJtV2F0Y2gvaW5vdGlmeV9ybV93YXRjaAorLy9leHRl
cm4gaW5vdGlmeV9ybV93YXRjaAorZnVuYyBjX2lub3RpZnlfcm1fd2F0Y2goZmQgX0NfaW50LCB3
ZCB1aW50MzIpIF9DX2ludAorZnVuYyBJbm90aWZ5Um1XYXRjaChmZCBpbnQsIHdhdGNoZGVzYyB1
aW50MzIpIChzdWNjZXNzIGludCwgZXJyIGVycm9yKSB7CisJX3IgOj0gY19pbm90aWZ5X3JtX3dh
dGNoKF9DX2ludChmZCksIHVpbnQzMih3YXRjaGRlc2MpKQorCXN1Y2Nlc3MgPSAoaW50KShfcikK
Kwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVy
cm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgS2xvZ2N0bC9rbG9nY3RsCisvL2V4dGVybiBrbG9nY3RsCitmdW5jIGNf
a2xvZ2N0bCh0eXAgX0NfaW50LCBidWZwICpieXRlLCBsZW4gX0NfaW50KSBfQ19pbnQKK2Z1bmMg
S2xvZ2N0bCh0eXAgaW50LCBidWYgW11ieXRlKSAobiBpbnQsIGVyciBlcnJvcikgeworCXZhciBf
cDIgKmJ5dGUKKwlpZiBsZW4oYnVmKSA+IDAgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2lu
dGVyKCZidWZbMF0pKQorCX0gZWxzZSB7CisJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIo
Jl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2tsb2djdGwoX0NfaW50KHR5
cCksIF9wMiwgX0NfaW50KGxlbihidWYpKSkKKwluID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVy
cm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5v
KCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7
CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBMaXN0eGF0dHIvbGlzdHhhdHRyCisvL2V4dGVybiBsaXN0eGF0dHIK
K2Z1bmMgY19saXN0eGF0dHIocGF0aCAqYnl0ZSwgbGlzdCAqYnl0ZSwgc2l6ZSBTaXplX3QpIFNz
aXplX3QKK2Z1bmMgTGlzdHhhdHRyKHBhdGggc3RyaW5nLCBkZXN0IFtdYnl0ZSkgKHN6IGludCwg
ZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJp
bmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCXZhciBfcDIgKmJ5dGUK
KwlpZiBsZW4oZGVzdCkgPiAwIHsKKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmZGVz
dFswXSkpCisJfSBlbHNlIHsKKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8p
KQorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbGlzdHhhdHRyKF9wMSwgX3AyLCBTaXpl
X3QobGVuKGRlc3QpKSkKKwlzeiA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVy
cm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVy
cm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBl
cnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgTWtkaXJhdC9ta2RpcmF0CisvL2V4dGVybiBta2RpcmF0CitmdW5jIGNfbWtkaXJhdChk
aXJmZCBfQ19pbnQsIHBhdGggKmJ5dGUsIG1vZGUgTW9kZV90KSBfQ19pbnQKK2Z1bmMgTWtkaXJh
dChkaXJmZCBpbnQsIHBhdGggc3RyaW5nLCBtb2RlIHVpbnQzMikgKGVyciBlcnJvcikgeworCXZh
ciBfcDIgKmJ5dGUKKwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJy
ICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbWtkaXJh
dChfQ19pbnQoZGlyZmQpLCBfcDIsIE1vZGVfdChtb2RlKSkKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJy
ID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIE1rbm9kYXQvbWtub2RhdAorLy9leHRlcm4gbWtub2RhdAorZnVuYyBjX21rbm9k
YXQoZGlyZmQgX0NfaW50LCBwYXRoICpieXRlLCBtb2RlIE1vZGVfdCwgZGV2IF9kZXZfdCkgX0Nf
aW50CitmdW5jIE1rbm9kYXQoZGlyZmQgaW50LCBwYXRoIHN0cmluZywgbW9kZSB1aW50MzIsIGRl
diBpbnQpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJz
eXNjYWxsKCkKKwlfciA6PSBjX21rbm9kYXQoX0NfaW50KGRpcmZkKSwgX3AyLCBNb2RlX3QobW9k
ZSksIF9kZXZfdChkZXYpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJ
aWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0K
KwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1
cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcGlwZTIvcGlw
ZTIKKy8vZXh0ZXJuIHBpcGUyCitmdW5jIGNfcGlwZTIocCAqWzJdX0NfaW50LCBmbGFncyBfQ19p
bnQpIF9DX2ludAorZnVuYyBwaXBlMihwICpbMl1fQ19pbnQsIGZsYWdzIGludCkgKGVyciBlcnJv
cikgeworCV9yIDo9IGNfcGlwZTIocCwgX0NfaW50KGZsYWdzKSkKKwl2YXIgZXJybm8gRXJybm8K
KwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQor
CQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0K
KwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUGl2
b3RSb290L3Bpdm90X3Jvb3QKKy8vZXh0ZXJuIHBpdm90X3Jvb3QKK2Z1bmMgY19waXZvdF9yb290
KG5ld3Jvb3QgKmJ5dGUsIHB1dG9sZCAqYnl0ZSkgX0NfaW50CitmdW5jIFBpdm90Um9vdChuZXdy
b290IHN0cmluZywgcHV0b2xkIHN0cmluZykgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUK
KwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKG5ld3Jvb3QpCisJaWYgZXJyICE9IG5pbCB7
CisJCXJldHVybgorCX0KKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0
cmluZyhwdXRvbGQpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2Nh
bGwoKQorCV9yIDo9IGNfcGl2b3Rfcm9vdChfcDEsIF9wMikKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJy
ID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIFJlbW92ZXhhdHRyL3JlbW92ZXhhdHRyCisvL2V4dGVybiByZW1vdmV4YXR0cgor
ZnVuYyBjX3JlbW92ZXhhdHRyKHBhdGggKmJ5dGUsIG5hbWUgKmJ5dGUpIF9DX2ludAorZnVuYyBS
ZW1vdmV4YXR0cihwYXRoIHN0cmluZywgYXR0ciBzdHJpbmcpIChlcnIgZXJyb3IpIHsKKwl2YXIg
X3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAh
PSBuaWwgeworCQlyZXR1cm4KKwl9CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0ZVB0
ckZyb21TdHJpbmcoYXR0cikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVy
c3lzY2FsbCgpCisJX3IgOj0gY19yZW1vdmV4YXR0cihfcDEsIF9wMikKKwl2YXIgZXJybm8gRXJy
bm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8o
KQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIFJlbmFtZWF0L3JlbmFtZWF0CisvL2V4dGVybiByZW5hbWVhdAorZnVu
YyBjX3JlbmFtZWF0KG9sZGRpcmZkIF9DX2ludCwgb2xkcGF0aCAqYnl0ZSwgbmV3ZGlyZmQgX0Nf
aW50LCBuZXdwYXRoICpieXRlKSBfQ19pbnQKK2Z1bmMgUmVuYW1lYXQob2xkZGlyZmQgaW50LCBv
bGRwYXRoIHN0cmluZywgbmV3ZGlyZmQgaW50LCBuZXdwYXRoIHN0cmluZykgKGVyciBlcnJvcikg
eworCXZhciBfcDIgKmJ5dGUKKwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKG9sZHBhdGgp
CisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwl2YXIgX3A0ICpieXRlCisJX3A0LCBl
cnIgPSBCeXRlUHRyRnJvbVN0cmluZyhuZXdwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1
cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3JlbmFtZWF0KF9DX2ludChvbGRkaXJm
ZCksIF9wMiwgX0NfaW50KG5ld2RpcmZkKSwgX3A0KQorCXZhciBlcnJubyBFcnJubworCXNldEVy
cm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVy
cm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBl
cnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3Igc2VuZGZpbGUvc2VuZGZpbGU2NAorLy9leHRlcm4gc2VuZGZpbGU2NAorZnVuYyBjX3Nl
bmRmaWxlNjQob3V0ZmQgX0NfaW50LCBpbmZkIF9DX2ludCwgb2Zmc2V0ICpPZmZzZXRfdCwgY291
bnQgU2l6ZV90KSBTc2l6ZV90CitmdW5jIHNlbmRmaWxlKG91dGZkIGludCwgaW5mZCBpbnQsIG9m
ZnNldCAqT2Zmc2V0X3QsIGNvdW50IGludCkgKHdyaXR0ZW4gaW50LCBlcnIgZXJyb3IpIHsKKwlF
bnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfc2VuZGZpbGU2NChfQ19pbnQob3V0ZmQpLCBfQ19pbnQo
aW5mZCksIG9mZnNldCwgU2l6ZV90KGNvdW50KSkKKwl3cml0dGVuID0gKGludCkoX3IpCisJdmFy
IGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9
IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRmc2dpZC9zZXRmc2dpZAorLy9leHRlcm4gc2V0
ZnNnaWQKK2Z1bmMgY19zZXRmc2dpZChnaWQgR2lkX3QpIF9DX2ludAorZnVuYyBTZXRmc2dpZChn
aWQgaW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3NldGZzZ2lk
KEdpZF90KGdpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4
aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRmc3VpZC9zZXRm
c3VpZAorLy9leHRlcm4gc2V0ZnN1aWQKK2Z1bmMgY19zZXRmc3VpZCh1aWQgVWlkX3QpIF9DX2lu
dAorZnVuYyBTZXRmc3VpZCh1aWQgaW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkK
KwlfciA6PSBjX3NldGZzdWlkKFVpZF90KHVpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJy
bm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJy
bm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBTZXRyZXNnaWQvc2V0cmVzZ2lkCisvL2V4dGVybiBzZXRyZXNnaWQKK2Z1bmMgY19zZXRy
ZXNnaWQocmdpZCBHaWRfdCwgZWdpZCBHaWRfdCwgc2dpZCBHaWRfdCkgX0NfaW50CitmdW5jIFNl
dHJlc2dpZChyZ2lkIGludCwgZWdpZCBpbnQsIHNnaWQgaW50KSAoZXJyIGVycm9yKSB7CisJX3Ig
Oj0gY19zZXRyZXNnaWQoR2lkX3QocmdpZCksIEdpZF90KGVnaWQpLCBHaWRfdChzZ2lkKSkKKwl2
YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5v
ID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQll
cnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgU2V0cmVzdWlkL3NldHJlc3VpZAorLy9leHRlcm4gc2V0cmVzdWlkCitmdW5j
IGNfc2V0cmVzdWlkKHJ1aWQgVWlkX3QsIGV1aWQgVWlkX3QsIHN1aWQgVWlkX3QpIF9DX2ludAor
ZnVuYyBTZXRyZXN1aWQocnVpZCBpbnQsIGVndWlkIGludCwgc3VpZCBpbnQpIChlcnIgZXJyb3Ip
IHsKKwlfciA6PSBjX3NldHJlc3VpZChVaWRfdChydWlkKSwgVWlkX3QoZWd1aWQpLCBVaWRfdChz
dWlkKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7
CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJy
bm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0eGF0dHIvc2V0eGF0dHIKKy8vZXh0ZXJuIHNldHhhdHRy
CitmdW5jIGNfc2V0eGF0dHIocGF0aCAqYnl0ZSwgbmFtZSAqYnl0ZSwgdmFsdWUgKmJ5dGUsIHNp
emUgU2l6ZV90LCBmbGFncyBfQ19pbnQpIF9DX2ludAorZnVuYyBTZXR4YXR0cihwYXRoIHN0cmlu
ZywgYXR0ciBzdHJpbmcsIGRhdGEgW11ieXRlLCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsKKwl2
YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVy
ciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0
ZVB0ckZyb21TdHJpbmcoYXR0cikKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCXZh
ciBfcDMgKmJ5dGUKKwlpZiBsZW4oZGF0YSkgPiAwIHsKKwkJX3AzID0gKCpieXRlKSh1bnNhZmUu
UG9pbnRlcigmZGF0YVswXSkpCisJfSBlbHNlIHsKKwkJX3AzID0gKCpieXRlKSh1bnNhZmUuUG9p
bnRlcigmX3plcm8pKQorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfc2V0eGF0dHIoX3Ax
LCBfcDIsIF9wMywgU2l6ZV90KGxlbihkYXRhKSksIF9DX2ludChmbGFncykpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBzcGxpY2Uvc3BsaWNlCisvL2V4dGVybiBzcGxpY2UKK2Z1bmMg
Y19zcGxpY2UocmZkIF9DX2ludCwgcm9mZiAqX2xvZmZfdCwgd2ZkIF9DX2ludCwgd29mZiAqX2xv
ZmZfdCwgbGVuIFNpemVfdCwgZmxhZ3MgX0NfdWludCkgU3NpemVfdAorZnVuYyBzcGxpY2UocmZk
IGludCwgcm9mZiAqX2xvZmZfdCwgd2ZkIGludCwgd29mZiAqX2xvZmZfdCwgbGVuIGludCwgZmxh
Z3MgaW50KSAobiBpbnQ2NCwgZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBj
X3NwbGljZShfQ19pbnQocmZkKSwgcm9mZiwgX0NfaW50KHdmZCksIHdvZmYsIFNpemVfdChsZW4p
LCBfQ191aW50KGZsYWdzKSkKKwluID0gKGludDY0KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJy
ID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIFN0YXRmcy9zdGF0ZnMKKy8vZXh0ZXJuIHN0YXRmcworZnVuYyBjX3N0YXRmcyhw
YXRoICpieXRlLCBidWYgKlN0YXRmc190KSBfQ19pbnQKK2Z1bmMgU3RhdGZzKHBhdGggc3RyaW5n
LCBidWYgKlN0YXRmc190KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJy
ID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJ
fQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19zdGF0ZnMoX3AxLCBidWYpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBTeW5jRmlsZVJhbmdlL3N5bmNfZmlsZV9yYW5nZQorLy9leHRl
cm4gc3luY19maWxlX3JhbmdlCitmdW5jIGNfc3luY19maWxlX3JhbmdlKGZkIF9DX2ludCwgb2Zm
IE9mZnNldF90LCBuIE9mZnNldF90LCBmbGFncyBfQ191aW50KSBfQ19pbnQKK2Z1bmMgU3luY0Zp
bGVSYW5nZShmZCBpbnQsIG9mZiBpbnQ2NCwgbiBpbnQ2NCwgZmxhZ3MgaW50KSAoZXJyIGVycm9y
KSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3N5bmNfZmlsZV9yYW5nZShfQ19pbnQoZmQp
LCBPZmZzZXRfdChvZmYpLCBPZmZzZXRfdChuKSwgX0NfdWludChmbGFncykpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBTeXNpbmZvL3N5c2luZm8KKy8vZXh0ZXJuIHN5c2luZm8KK2Z1
bmMgY19zeXNpbmZvKGluZm8gKlN5c2luZm9fdCkgX0NfaW50CitmdW5jIFN5c2luZm8oaW5mbyAq
U3lzaW5mb190KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19zeXNpbmZvKGluZm8pCisJdmFyIGVy
cm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdl
dEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0g
ZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIFRlZS90ZWUKKy8vZXh0ZXJuIHRlZQorZnVuYyBjX3RlZShyZmQgX0NfaW50LCB3ZmQg
X0NfaW50LCBsZW4gU2l6ZV90LCBmbGFncyBfQ191aW50KSBTc2l6ZV90CitmdW5jIFRlZShyZmQg
aW50LCB3ZmQgaW50LCBsZW4gaW50LCBmbGFncyBpbnQpIChuIGludDY0LCBlcnIgZXJyb3IpIHsK
KwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfdGVlKF9DX2ludChyZmQpLCBfQ19pbnQod2ZkKSwg
U2l6ZV90KGxlbiksIF9DX3VpbnQoZmxhZ3MpKQorCW4gPSAoaW50NjQpKF9yKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJy
bm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgdW5saW5rYXQvdW5saW5rYXQKKy8vZXh0ZXJuIHVubGlua2F0
CitmdW5jIGNfdW5saW5rYXQoZGlyZmQgX0NfaW50LCBwYXRoICpieXRlLCBmbGFncyBfQ19pbnQp
IF9DX2ludAorZnVuYyB1bmxpbmthdChkaXJmZCBpbnQsIHBhdGggc3RyaW5nLCBmbGFncyBpbnQp
IChlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0
cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxs
KCkKKwlfciA6PSBjX3VubGlua2F0KF9DX2ludChkaXJmZCksIF9wMiwgX0NfaW50KGZsYWdzKSkK
Kwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVy
cm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQor
CWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFVubW91bnQvdW1vdW50MgorLy9leHRlcm4g
dW1vdW50MgorZnVuYyBjX3Vtb3VudDIodGFyZ2V0ICpieXRlLCBmbGFncyBfQ19pbnQpIF9DX2lu
dAorZnVuYyBVbm1vdW50KHRhcmdldCBzdHJpbmcsIGZsYWdzIGludCkgKGVyciBlcnJvcikgewor
CXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHRhcmdldCkKKwlp
ZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY191
bW91bnQyKF9wMSwgX0NfaW50KGZsYWdzKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6
PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9
IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8K
Kwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IFVuc2hhcmUvdW5zaGFyZQorLy9leHRlcm4gdW5zaGFyZQorZnVuYyBjX3Vuc2hhcmUoZmxhZ3Mg
X0NfaW50KSBfQ19pbnQKK2Z1bmMgVW5zaGFyZShmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsKKwlF
bnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfdW5zaGFyZShfQ19pbnQoZmxhZ3MpKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJy
bm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgSW9wZXJtL2lvcGVybQorLy9leHRlcm4gaW9wZXJtCitmdW5j
IGNfaW9wZXJtKGZyb20gX0NfbG9uZywgbnVtIF9DX2xvbmcsIG9uIF9DX2ludCkgX0NfaW50Citm
dW5jIElvcGVybShmcm9tIGludCwgbnVtIGludCwgb24gaW50KSAoZXJyIGVycm9yKSB7CisJRW50
ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2lvcGVybShfQ19sb25nKGZyb20pLCBfQ19sb25nKG51bSks
IF9DX2ludChvbikpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4
aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBJb3BsL2lvcGwKKy8v
ZXh0ZXJuIGlvcGwKK2Z1bmMgY19pb3BsKGxldmVsIF9DX2ludCkgX0NfaW50CitmdW5jIElvcGwo
bGV2ZWwgaW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2lvcGwo
X0NfaW50KGxldmVsKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
RXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJu
Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFVzdGF0L3VzdGF0
CisvL2V4dGVybiB1c3RhdAorZnVuYyBjX3VzdGF0KGRldiBfZGV2X3QsIHVidWYgKlVzdGF0X3Qp
IF9DX2ludAorZnVuYyBVc3RhdChkZXYgaW50LCB1YnVmICpVc3RhdF90KSAoZXJyIGVycm9yKSB7
CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3VzdGF0KF9kZXZfdChkZXYpLCB1YnVmKQorCXZh
ciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8g
PSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYg
c2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgdXRpbWVuc2F0L3V0aW1lbnNhdAorLy9leHRlcm4g
dXRpbWVuc2F0CitmdW5jIGNfdXRpbWVuc2F0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgdGlt
ZXMgKlsyXVRpbWVzcGVjLCBmbGFncyBfQ19pbnQpIF9DX2ludAorZnVuYyB1dGltZW5zYXQoZGly
ZmQgaW50LCBwYXRoIHN0cmluZywgdGltZXMgKlsyXVRpbWVzcGVjLCBmbGFncyBpbnQpIChlcnIg
ZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhw
YXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlf
ciA6PSBjX3V0aW1lbnNhdChfQ19pbnQoZGlyZmQpLCBfcDIsIHRpbWVzLCBfQ19pbnQoZmxhZ3Mp
KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJ
ZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgp
CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcGlwZS9waXBlCisvL2V4dGVybiBwaXBl
CitmdW5jIGNfcGlwZShwICpbMl1fQ19pbnQpIF9DX2ludAorZnVuYyBwaXBlKHAgKlsyXV9DX2lu
dCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNfcGlwZShwKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciB1dGltZXMv
dXRpbWVzCisvL2V4dGVybiB1dGltZXMKK2Z1bmMgY191dGltZXMocGF0aCAqYnl0ZSwgdGltZXMg
KlsyXVRpbWV2YWwpIF9DX2ludAorZnVuYyB1dGltZXMocGF0aCBzdHJpbmcsIHRpbWVzICpbMl1U
aW1ldmFsKSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0
ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVy
c3lzY2FsbCgpCisJX3IgOj0gY191dGltZXMoX3AxLCB0aW1lcykKKwl2YXIgZXJybm8gRXJybm8K
KwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQor
CQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIGdldGN3ZC9nZXRjd2QKKy8vZXh0ZXJuIGdldGN3ZAorZnVuYyBjX2dldGN3
ZChidWYgKmJ5dGUsIHNpemUgU2l6ZV90KSAqYnl0ZQorZnVuYyBnZXRjd2QoYnVmICpieXRlLCBz
aXplIFNpemVfdCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19nZXRj
d2QoYnVmLCBTaXplX3Qoc2l6ZSkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFs
c2UKKwlpZiBfciA9PSBuaWwgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBn
ZXRncm91cHMvZ2V0Z3JvdXBzCisvL2V4dGVybiBnZXRncm91cHMKK2Z1bmMgY19nZXRncm91cHMo
c2l6ZSBfQ19pbnQsIGxpc3QgKkdpZF90KSBfQ19pbnQKK2Z1bmMgZ2V0Z3JvdXBzKHNpemUgaW50
LCBsaXN0ICpHaWRfdCkgKG5uIGludCwgZXJyIGVycm9yKSB7CisJX3IgOj0gY19nZXRncm91cHMo
X0NfaW50KHNpemUpLCBsaXN0KQorCW5uID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJ
c2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJ
c2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJ
cmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHNldGdy
b3Vwcy9zZXRncm91cHMKK2Z1bmMgc2V0Z3JvdXBzKG4gaW50LCBsaXN0ICpHaWRfdCkgKGVyciBl
cnJvcikgeworCV9yIDo9IGNfc2V0Z3JvdXBzKFNpemVfdChuKSwgbGlzdCkKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgTWtmaWZvL21rZmlmbworLy9leHRlcm4gbWtmaWZvCitmdW5jIGNfbWtmaWZvKHBhdGggKmJ5
dGUsIG1vZGUgTW9kZV90KSBfQ19pbnQKK2Z1bmMgTWtmaWZvKHBhdGggc3RyaW5nLCBtb2RlIHVp
bnQzMikgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJG
cm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5
c2NhbGwoKQorCV9yIDo9IGNfbWtmaWZvKF9wMSwgTW9kZV90KG1vZGUpKQorCXZhciBlcnJubyBF
cnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJu
bygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgU2VsZWN0L3NlbGVjdAorLy9leHRlcm4gc2VsZWN0CitmdW5jIGNf
c2VsZWN0KG5mZCBfQ19pbnQsIHIgKkZkU2V0LCB3ICpGZFNldCwgZSAqRmRTZXQsIHRpbWVvdXQg
KlRpbWV2YWwpIF9DX2ludAorZnVuYyBTZWxlY3QobmZkIGludCwgciAqRmRTZXQsIHcgKkZkU2V0
LCBlICpGZFNldCwgdGltZW91dCAqVGltZXZhbCkgKG4gaW50LCBlcnIgZXJyb3IpIHsKKwlFbnRl
cnN5c2NhbGwoKQorCV9yIDo9IGNfc2VsZWN0KF9DX2ludChuZmQpLCByLCB3LCBlLCB0aW1lb3V0
KQorCW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQor
CWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9
CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEFjY2Vzcy9h
Y2Nlc3MKKy8vZXh0ZXJuIGFjY2VzcworZnVuYyBjX2FjY2VzcyhwYXRoICpieXRlLCBtb2RlIF9D
X2ludCkgX0NfaW50CitmdW5jIEFjY2VzcyhwYXRoIHN0cmluZywgbW9kZSB1aW50MzIpIChlcnIg
ZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhw
YXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlf
ciA6PSBjX2FjY2VzcyhfcDEsIF9DX2ludChtb2RlKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRF
cnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRF
cnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0g
ZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIENoZGlyL2NoZGlyCitmdW5jIENoZGlyKHBhdGggc3RyaW5nKSAoZXJyIGVycm9yKSB7
CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlp
ZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19j
aGRpcihfcDEpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8
IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRz
eXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQor
CisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBDaG1vZC9jaG1vZAorLy9l
eHRlcm4gY2htb2QKK2Z1bmMgY19jaG1vZChwYXRoICpieXRlLCBtb2RlIE1vZGVfdCkgX0NfaW50
CitmdW5jIENobW9kKHBhdGggc3RyaW5nLCBtb2RlIHVpbnQzMikgKGVyciBlcnJvcikgeworCXZh
ciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJy
ICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfY2htb2Qo
X3AxLCBNb2RlX3QobW9kZSkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBDaG93bi9j
aG93bgorLy9leHRlcm4gY2hvd24KK2Z1bmMgY19jaG93bihwYXRoICpieXRlLCB1aWQgVWlkX3Qs
IGdpZCBHaWRfdCkgX0NfaW50CitmdW5jIENob3duKHBhdGggc3RyaW5nLCB1aWQgaW50LCBnaWQg
aW50KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZy
b21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lz
Y2FsbCgpCisJX3IgOj0gY19jaG93bihfcDEsIFVpZF90KHVpZCksIEdpZF90KGdpZCkpCisJdmFy
IGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9
IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBDaHJvb3QvY2hyb290CitmdW5jIENocm9vdChwYXRo
IHN0cmluZykgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQ
dHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRl
cnN5c2NhbGwoKQorCV9yIDo9IGNfY2hyb290KF9wMSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRF
cnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRF
cnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0g
ZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIENsb3NlL2Nsb3NlCitmdW5jIENsb3NlKGZkIGludCkgKGVyciBlcnJvcikgeworCUVu
dGVyc3lzY2FsbCgpCisJX3IgOj0gY19jbG9zZShfQ19pbnQoZmQpKQorCXZhciBlcnJubyBFcnJu
bworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygp
CisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgQ3JlYXQvY3JlYXQKKy8vZXh0ZXJuIGNyZWF0CitmdW5jIGNfY3JlYXQo
cGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3QpIF9DX2ludAorZnVuYyBDcmVhdChwYXRoIHN0cmluZywg
bW9kZSB1aW50MzIpIChmZCBpbnQsIGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEs
IGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVy
bgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfY3JlYXQoX3AxLCBNb2RlX3QobW9kZSkp
CisJZmQgPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQor
CWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9
CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIER1cC9kdXAK
Ky8vZXh0ZXJuIGR1cAorZnVuYyBjX2R1cChvbGRmZCBfQ19pbnQpIF9DX2ludAorZnVuYyBEdXAo
b2xkZmQgaW50KSAoZmQgaW50LCBlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2R1cChfQ19pbnQob2xk
ZmQpKQorCWZkID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFs
c2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVl
CisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8v
IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIER1cDIvZHVwMgorZnVuYyBEdXAy
KG9sZGZkIGludCwgbmV3ZmQgaW50KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19kdXAyKF9DX2lu
dChvbGRmZCksIF9DX2ludChuZXdmZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisK
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEV4aXQvZXhpdAorLy9leHRl
cm4gZXhpdAorZnVuYyBjX2V4aXQoY29kZSBfQ19pbnQpIAorZnVuYyBFeGl0KGNvZGUgaW50KSB7
CisJRW50ZXJzeXNjYWxsKCkKKwljX2V4aXQoX0NfaW50KGNvZGUpKQorCUV4aXRzeXNjYWxsKCkK
K30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmNoZGlyL2ZjaGRp
cgorLy9leHRlcm4gZmNoZGlyCitmdW5jIGNfZmNoZGlyKGZkIF9DX2ludCkgX0NfaW50CitmdW5j
IEZjaGRpcihmZCBpbnQpIChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNf
ZmNoZGlyKF9DX2ludChmZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGY2htb2Qv
ZmNobW9kCisvL2V4dGVybiBmY2htb2QKK2Z1bmMgY19mY2htb2QoZmQgX0NfaW50LCBtb2RlIE1v
ZGVfdCkgX0NfaW50CitmdW5jIEZjaG1vZChmZCBpbnQsIG1vZGUgdWludDMyKSAoZXJyIGVycm9y
KSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2ZjaG1vZChfQ19pbnQoZmQpLCBNb2RlX3Qo
bW9kZSkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAg
eworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNj
YWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGY2hvd24vZmNob3duCisvL2V4
dGVybiBmY2hvd24KK2Z1bmMgY19mY2hvd24oZmQgX0NfaW50LCB1aWQgVWlkX3QsIGdpZCBHaWRf
dCkgX0NfaW50CitmdW5jIEZjaG93bihmZCBpbnQsIHVpZCBpbnQsIGdpZCBpbnQpIChlcnIgZXJy
b3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfZmNob3duKF9DX2ludChmZCksIFVpZF90
KHVpZCksIEdpZF90KGdpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBmY250bC9f
X2dvX2ZjbnRsCitmdW5jIGZjbnRsKGZkIGludCwgY21kIGludCwgYXJnIGludCkgKHZhbCBpbnQs
IGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19fX2dvX2ZjbnRsKF9DX2lu
dChmZCksIF9DX2ludChjbWQpLCBfQ19pbnQoYXJnKSkKKwl2YWwgPSAoaW50KShfcikKKwl2YXIg
ZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0g
R2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNl
dEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZjbnRsRmxvY2svX19nb19mY250bF9mbG9jaworLy9l
eHRlcm4gX19nb19mY250bF9mbG9jaworZnVuYyBjX19fZ29fZmNudGxfZmxvY2soZmQgX0NfaW50
LCBjbWQgX0NfaW50LCBhcmcgKkZsb2NrX3QpIF9DX2ludAorZnVuYyBGY250bEZsb2NrKGZkIHVp
bnRwdHIsIGNtZCBpbnQsIGxrICpGbG9ja190KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxs
KCkKKwlfciA6PSBjX19fZ29fZmNudGxfZmxvY2soX0NfaW50KGZkKSwgX0NfaW50KGNtZCksIGxr
KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJ
ZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgp
CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmRhdGFzeW5jL2ZkYXRhc3luYworLy9l
eHRlcm4gZmRhdGFzeW5jCitmdW5jIGNfZmRhdGFzeW5jKGZkIF9DX2ludCkgX0NfaW50CitmdW5j
IEZkYXRhc3luYyhmZCBpbnQpIChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9
IGNfZmRhdGFzeW5jKF9DX2ludChmZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBG
c3luYy9mc3luYworLy9leHRlcm4gZnN5bmMKK2Z1bmMgY19mc3luYyhmZCBfQ19pbnQpIF9DX2lu
dAorZnVuYyBGc3luYyhmZCBpbnQpIChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9y
IDo9IGNfZnN5bmMoX0NfaW50KGZkKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBm
YWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRy
dWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9
CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdl
dGVnaWQvZ2V0ZWdpZAorLy9leHRlcm4gZ2V0ZWdpZAorZnVuYyBjX2dldGVnaWQoKSBHaWRfdAor
ZnVuYyBHZXRlZ2lkKCkgKGVnaWQgaW50KSB7CisJX3IgOj0gY19nZXRlZ2lkKCkKKwllZ2lkID0g
KGludCkoX3IpCisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIEdldGV1aWQvZ2V0ZXVpZAorLy9leHRlcm4gZ2V0ZXVpZAorZnVuYyBjX2dldGV1aWQo
KSBVaWRfdAorZnVuYyBHZXRldWlkKCkgKGV1aWQgaW50KSB7CisJX3IgOj0gY19nZXRldWlkKCkK
KwlldWlkID0gKGludCkoX3IpCisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIEdldGdpZC9nZXRnaWQKKy8vZXh0ZXJuIGdldGdpZAorZnVuYyBjX2dl
dGdpZCgpIEdpZF90CitmdW5jIEdldGdpZCgpIChnaWQgaW50KSB7CisJX3IgOj0gY19nZXRnaWQo
KQorCWdpZCA9IChpbnQpKF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBHZXRwZ2lkL2dldHBnaWQKKy8vZXh0ZXJuIGdldHBnaWQKK2Z1bmMg
Y19nZXRwZ2lkKHBpZCBQaWRfdCkgUGlkX3QKK2Z1bmMgR2V0cGdpZChwaWQgaW50KSAocGdpZCBp
bnQsIGVyciBlcnJvcikgeworCV9yIDo9IGNfZ2V0cGdpZChQaWRfdChwaWQpKQorCXBnaWQgPSAo
aW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwg
MCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0
RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cGdycC9nZXRwZ3JwCisvL2V4dGVybiBnZXRwZ3Jw
CitmdW5jIGNfZ2V0cGdycCgpIFBpZF90CitmdW5jIEdldHBncnAoKSAocGlkIGludCkgeworCV9y
IDo9IGNfZ2V0cGdycCgpCisJcGlkID0gKGludCkoX3IpCisJcmV0dXJuCit9CisKKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdldHBpZC9nZXRwaWQKK2Z1bmMgR2V0cGlk
KCkgKHBpZCBpbnQpIHsKKwlfciA6PSBjX2dldHBpZCgpCisJcGlkID0gKGludCkoX3IpCisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdldHBwaWQv
Z2V0cHBpZAorZnVuYyBHZXRwcGlkKCkgKHBwaWQgaW50KSB7CisJX3IgOj0gY19nZXRwcGlkKCkK
KwlwcGlkID0gKGludCkoX3IpCisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIEdldHByaW9yaXR5L2dldHByaW9yaXR5CisvL2V4dGVybiBnZXRwcmlv
cml0eQorZnVuYyBjX2dldHByaW9yaXR5KHdoaWNoIF9DX2ludCwgd2hvIF9DX2ludCkgX0NfaW50
CitmdW5jIEdldHByaW9yaXR5KHdoaWNoIGludCwgd2hvIGludCkgKHByaW8gaW50LCBlcnIgZXJy
b3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfZ2V0cHJpb3JpdHkoX0NfaW50KHdoaWNo
KSwgX0NfaW50KHdobykpCisJcHJpbyA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgR2V0cnVzYWdlL2dldHJ1c2FnZQorLy9leHRlcm4gZ2V0cnVzYWdlCitmdW5jIGNf
Z2V0cnVzYWdlKHdobyBfQ19pbnQsIHJ1c2FnZSAqUnVzYWdlKSBfQ19pbnQKK2Z1bmMgR2V0cnVz
YWdlKHdobyBpbnQsIHJ1c2FnZSAqUnVzYWdlKSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19nZXRy
dXNhZ2UoX0NfaW50KHdobyksIHJ1c2FnZSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6
PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9
IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30K
KworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgZ2V0dGltZW9mZGF5L2dl
dHRpbWVvZmRheQorLy9leHRlcm4gZ2V0dGltZW9mZGF5CitmdW5jIGNfZ2V0dGltZW9mZGF5KHR2
ICpUaW1ldmFsLCB0eiAqYnl0ZSkgX0NfaW50CitmdW5jIGdldHRpbWVvZmRheSh0diAqVGltZXZh
bCwgdHogKmJ5dGUpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2dldHRpbWVvZmRheSh0diwgdHop
CisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQll
cnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIEdldHVpZC9nZXR1aWQKKy8vZXh0ZXJuIGdldHVpZAorZnVuYyBjX2dl
dHVpZCgpIFVpZF90CitmdW5jIEdldHVpZCgpICh1aWQgaW50KSB7CisJX3IgOj0gY19nZXR1aWQo
KQorCXVpZCA9IChpbnQpKF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBLaWxsL2tpbGwKK2Z1bmMgS2lsbChwaWQgaW50LCBzaWcgU2lnbmFs
KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19raWxsKFBpZF90KHBpZCksIF9DX2ludChzaWcpKQor
CXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJy
bm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJ
CWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCB3cmFwcGVyIGZvciBMY2hvd24vbGNob3duCisvL2V4dGVybiBsY2hvd24KK2Z1bmMgY19sY2hv
d24ocGF0aCAqYnl0ZSwgdWlkIFVpZF90LCBnaWQgR2lkX3QpIF9DX2ludAorZnVuYyBMY2hvd24o
cGF0aCBzdHJpbmcsIHVpZCBpbnQsIGdpZCBpbnQpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpi
eXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwg
eworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2xjaG93bihfcDEsIFVp
ZF90KHVpZCksIEdpZF90KGdpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFs
c2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVl
CisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQor
CXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBMaW5r
L2xpbmsKKy8vZXh0ZXJuIGxpbmsKK2Z1bmMgY19saW5rKG9sZHBhdGggKmJ5dGUsIG5ld3BhdGgg
KmJ5dGUpIF9DX2ludAorZnVuYyBMaW5rKG9sZHBhdGggc3RyaW5nLCBuZXdwYXRoIHN0cmluZykg
KGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3Ry
aW5nKG9sZHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwl2YXIgX3AyICpi
eXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhuZXdwYXRoKQorCWlmIGVyciAhPSBu
aWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2xpbmsoX3AxLCBf
cDIpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgewor
CQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxs
KCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNa2Rpci9ta2RpcgorLy9leHRlcm4g
bWtkaXIKK2Z1bmMgY19ta2RpcihwYXRoICpieXRlLCBtb2RlIE1vZGVfdCkgX0NfaW50CitmdW5j
IE1rZGlyKHBhdGggc3RyaW5nLCBtb2RlIHVpbnQzMikgKGVyciBlcnJvcikgeworCXZhciBfcDEg
KmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5p
bCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbWtkaXIoX3AxLCBN
b2RlX3QobW9kZSkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4
aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNa25vZC9ta25vZAor
Ly9leHRlcm4gbWtub2QKK2Z1bmMgY19ta25vZChwYXRoICpieXRlLCBtb2RlIE1vZGVfdCwgZGV2
IF9kZXZfdCkgX0NfaW50CitmdW5jIE1rbm9kKHBhdGggc3RyaW5nLCBtb2RlIHVpbnQzMiwgZGV2
IGludCkgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJG
cm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5
c2NhbGwoKQorCV9yIDo9IGNfbWtub2QoX3AxLCBNb2RlX3QobW9kZSksIF9kZXZfdChkZXYpKQor
CXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJy
bm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJ
aWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTW91bnQvbW91bnQKKy8vZXh0ZXJuIG1vdW50
CitmdW5jIGNfbW91bnQoc291cmNlICpieXRlLCB0YXJnZXQgKmJ5dGUsIGZzdHlwZSAqYnl0ZSwg
ZmxhZ3MgX0NfbG9uZywgZGF0YSAqYnl0ZSkgX0NfaW50CitmdW5jIE1vdW50KHNvdXJjZSBzdHJp
bmcsIHRhcmdldCBzdHJpbmcsIGZzdHlwZSBzdHJpbmcsIGZsYWdzIHVpbnRwdHIsIGRhdGEgc3Ry
aW5nKSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZy
b21TdHJpbmcoc291cmNlKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJdmFyIF9w
MiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcodGFyZ2V0KQorCWlmIGVyciAh
PSBuaWwgeworCQlyZXR1cm4KKwl9CisJdmFyIF9wMyAqYnl0ZQorCV9wMywgZXJyID0gQnl0ZVB0
ckZyb21TdHJpbmcoZnN0eXBlKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJdmFy
IF9wNSAqYnl0ZQorCV9wNSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcoZGF0YSkKKwlpZiBlcnIg
IT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19tb3VudChf
cDEsIF9wMiwgX3AzLCBfQ19sb25nKGZsYWdzKSwgX3A1KQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgTmFub3NsZWVwL25hbm9zbGVlcAorLy9leHRlcm4gbmFub3NsZWVwCitmdW5jIGNf
bmFub3NsZWVwKHRpbWUgKlRpbWVzcGVjLCBsZWZ0b3ZlciAqVGltZXNwZWMpIF9DX2ludAorZnVu
YyBOYW5vc2xlZXAodGltZSAqVGltZXNwZWMsIGxlZnRvdmVyICpUaW1lc3BlYykgKGVyciBlcnJv
cikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19uYW5vc2xlZXAodGltZSwgbGVmdG92ZXIp
CisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQll
cnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkK
KwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBQYXVzZS9wYXVzZQorLy9leHRlcm4gcGF1
c2UKK2Z1bmMgY19wYXVzZSgpIF9DX2ludAorZnVuYyBQYXVzZSgpIChlcnIgZXJyb3IpIHsKKwlF
bnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfcGF1c2UoKQorCXZhciBlcnJubyBFcnJubworCXNldEVy
cm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVy
cm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBl
cnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgcmVhZC9yZWFkCisvL2V4dGVybiByZWFkCitmdW5jIGNfcmVhZChmZCBfQ19pbnQsIGJ1
ZiAqYnl0ZSwgY291bnQgU2l6ZV90KSBTc2l6ZV90CitmdW5jIHJlYWQoZmQgaW50LCBwIFtdYnl0
ZSkgKG4gaW50LCBlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJaWYgbGVuKHApID4gMCB7
CisJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJnBbMF0pKQorCX0gZWxzZSB7CisJCV9w
MiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkK
KwlfciA6PSBjX3JlYWQoX0NfaW50KGZkKSwgX3AyLCBTaXplX3QobGVuKHApKSkKKwluID0gKGlu
dCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAg
eworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNj
YWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByZWFkbGVuL3JlYWQKK2Z1bmMg
cmVhZGxlbihmZCBpbnQsIHAgKmJ5dGUsIG5wIGludCkgKG4gaW50LCBlcnIgZXJyb3IpIHsKKwlF
bnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfcmVhZChfQ19pbnQoZmQpLCBwLCBTaXplX3QobnApKQor
CW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
RXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJu
Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFJlYWRsaW5rL3Jl
YWRsaW5rCisvL2V4dGVybiByZWFkbGluaworZnVuYyBjX3JlYWRsaW5rKHBhdGggKmJ5dGUsIGJ1
ZiAqYnl0ZSwgYnVmc2l6IFNpemVfdCkgU3NpemVfdAorZnVuYyBSZWFkbGluayhwYXRoIHN0cmlu
ZywgYnVmIFtdYnl0ZSkgKG4gaW50LCBlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3Ax
LCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1
cm4KKwl9CisJdmFyIF9wMiAqYnl0ZQorCWlmIGxlbihidWYpID4gMCB7CisJCV9wMiA9ICgqYnl0
ZSkodW5zYWZlLlBvaW50ZXIoJmJ1ZlswXSkpCisJfSBlbHNlIHsKKwkJX3AyID0gKCpieXRlKSh1
bnNhZmUuUG9pbnRlcigmX3plcm8pKQorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfcmVh
ZGxpbmsoX3AxLCBfcDIsIFNpemVfdChsZW4oYnVmKSkpCisJbiA9IChpbnQpKF9yKQorCXZhciBl
cnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBH
ZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0
RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUmVuYW1lL3JlbmFtZQorLy9leHRlcm4gcmVuYW1lCitm
dW5jIGNfcmVuYW1lKG9sZHBhdGggKmJ5dGUsIG5ld3BhdGggKmJ5dGUpIF9DX2ludAorZnVuYyBS
ZW5hbWUob2xkcGF0aCBzdHJpbmcsIG5ld3BhdGggc3RyaW5nKSAoZXJyIGVycm9yKSB7CisJdmFy
IF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcob2xkcGF0aCkKKwlpZiBl
cnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCXZhciBfcDIgKmJ5dGUKKwlfcDIsIGVyciA9IEJ5
dGVQdHJGcm9tU3RyaW5nKG5ld3BhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0K
KwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfcmVuYW1lKF9wMSwgX3AyKQorCXZhciBlcnJubyBF
cnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJu
bygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgUm1kaXIvcm1kaXIKKy8vZXh0ZXJuIHJtZGlyCitmdW5jIGNfcm1k
aXIocGF0aCAqYnl0ZSkgX0NfaW50CitmdW5jIFJtZGlyKHBhdGggc3RyaW5nKSAoZXJyIGVycm9y
KSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkK
KwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0g
Y19ybWRpcihfcDEpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4
aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRkb21haW5uYW1l
L3NldGRvbWFpbm5hbWUKKy8vZXh0ZXJuIHNldGRvbWFpbm5hbWUKK2Z1bmMgY19zZXRkb21haW5u
YW1lKG5hbWUgKmJ5dGUsIGxlbiBTaXplX3QpIF9DX2ludAorZnVuYyBTZXRkb21haW5uYW1lKHAg
W11ieXRlKSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCWlmIGxlbihwKSA+IDAgewor
CQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkKKwl9IGVsc2UgeworCQlfcDEg
PSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVyc3lzY2FsbCgpCisJ
X3IgOj0gY19zZXRkb21haW5uYW1lKF9wMSwgU2l6ZV90KGxlbihwKSkpCisJdmFyIGVycm5vIEVy
cm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5v
KCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7
CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBTZXRob3N0bmFtZS9zZXRob3N0bmFtZQorLy9leHRlcm4gc2V0aG9z
dG5hbWUKK2Z1bmMgY19zZXRob3N0bmFtZShuYW1lICpieXRlLCBsZW4gU2l6ZV90KSBfQ19pbnQK
K2Z1bmMgU2V0aG9zdG5hbWUocCBbXWJ5dGUpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRl
CisJaWYgbGVuKHApID4gMCB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJnBbMF0p
KQorCX0gZWxzZSB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9
CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3NldGhvc3RuYW1lKF9wMSwgU2l6ZV90KGxlbihw
KSkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgewor
CQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxs
KCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRnaWQvc2V0Z2lkCisvL2V4dGVy
biBzZXRnaWQKK2Z1bmMgY19zZXRnaWQoZ2lkIEdpZF90KSBfQ19pbnQKK2Z1bmMgU2V0Z2lkKGdp
ZCBpbnQpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX3NldGdpZChHaWRfdChnaWQpKQorCXZhciBl
cnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBH
ZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9
IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBTZXRyZWdpZC9zZXRyZWdpZAorLy9leHRlcm4gc2V0cmVnaWQKK2Z1bmMgY19zZXRy
ZWdpZChyZ2lkIEdpZF90LCBlZ2lkIEdpZF90KSBfQ19pbnQKK2Z1bmMgU2V0cmVnaWQocmdpZCBp
bnQsIGVnaWQgaW50KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19zZXRyZWdpZChHaWRfdChyZ2lk
KSwgR2lkX3QoZWdpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlp
ZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQor
CWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldHBnaWQvc2V0cGdpZAorZnVuYyBTZXRw
Z2lkKHBpZCBpbnQsIHBnaWQgaW50KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19zZXRwZ2lkKFBp
ZF90KHBpZCksIFBpZF90KHBnaWQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZh
bHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1
ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRwcmlvcml0eS9zZXRwcmlv
cml0eQorLy9leHRlcm4gc2V0cHJpb3JpdHkKK2Z1bmMgY19zZXRwcmlvcml0eSh3aGljaCBfQ19p
bnQsIHdobyBfQ19pbnQsIHByaW8gX0NfaW50KSBfQ19pbnQKK2Z1bmMgU2V0cHJpb3JpdHkod2hp
Y2ggaW50LCB3aG8gaW50LCBwcmlvIGludCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgp
CisJX3IgOj0gY19zZXRwcmlvcml0eShfQ19pbnQod2hpY2gpLCBfQ19pbnQod2hvKSwgX0NfaW50
KHByaW8pKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAw
IHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lz
Y2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKwor
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmV1aWQvc2V0cmV1aWQK
Ky8vZXh0ZXJuIHNldHJldWlkCitmdW5jIGNfc2V0cmV1aWQocnVpZCBVaWRfdCwgZXVpZCBVaWRf
dCkgX0NfaW50CitmdW5jIFNldHJldWlkKHJ1aWQgaW50LCBldWlkIGludCkgKGVyciBlcnJvcikg
eworCV9yIDo9IGNfc2V0cmV1aWQoVWlkX3QocnVpZCksIFVpZF90KGV1aWQpKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBTZXRzaWQvc2V0c2lkCitmdW5jIFNldHNpZCgpIChwaWQgaW50LCBlcnIgZXJyb3IpIHsK
KwlfciA6PSBjX3NldHNpZCgpCisJcGlkID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJ
c2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJ
c2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJ
cmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHNldHRp
bWVvZmRheS9zZXR0aW1lb2ZkYXkKKy8vZXh0ZXJuIHNldHRpbWVvZmRheQorZnVuYyBjX3NldHRp
bWVvZmRheSh0diAqVGltZXZhbCwgdHogKmJ5dGUpIF9DX2ludAorZnVuYyBzZXR0aW1lb2ZkYXko
dHYgKlRpbWV2YWwsIHR6ICpieXRlKSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19zZXR0aW1lb2Zk
YXkodHYsIHR6KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXR1aWQvc2V0dWlkCisvL2V4dGVybiBzZXR1aWQK
K2Z1bmMgY19zZXR1aWQodWlkIFVpZF90KSBfQ19pbnQKK2Z1bmMgU2V0dWlkKHVpZCBpbnQpIChl
cnIgZXJyb3IpIHsKKwlfciA6PSBjX3NldHVpZChVaWRfdCh1aWQpKQorCXZhciBlcnJubyBFcnJu
bworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygp
CisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBT
eW1saW5rL3N5bWxpbmsKKy8vZXh0ZXJuIHN5bWxpbmsKK2Z1bmMgY19zeW1saW5rKG9sZHBhdGgg
KmJ5dGUsIG5ld3BhdGggKmJ5dGUpIF9DX2ludAorZnVuYyBTeW1saW5rKG9sZHBhdGggc3RyaW5n
LCBuZXdwYXRoIHN0cmluZykgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVy
ciA9IEJ5dGVQdHJGcm9tU3RyaW5nKG9sZHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVy
bgorCX0KKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhuZXdw
YXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlf
ciA6PSBjX3N5bWxpbmsoX3AxLCBfcDIpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBT
eW5jL3N5bmMKKy8vZXh0ZXJuIHN5bmMKK2Z1bmMgY19zeW5jKCkgCitmdW5jIFN5bmMoKSB7CisJ
RW50ZXJzeXNjYWxsKCkKKwljX3N5bmMoKQorCUV4aXRzeXNjYWxsKCkKK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVGltZS90aW1lCisvL2V4dGVybiB0aW1lCitm
dW5jIGNfdGltZSh0ICpUaW1lX3QpIFRpbWVfdAorZnVuYyBUaW1lKHQgKlRpbWVfdCkgKHR0IFRp
bWVfdCwgZXJyIGVycm9yKSB7CisJX3IgOj0gY190aW1lKHQpCisJdHQgPSAoVGltZV90KShfcikK
Kwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVy
cm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgVGltZXMvdGltZXMKKy8vZXh0ZXJuIHRpbWVzCitmdW5jIGNfdGltZXMo
dG1zICpUbXMpIF9jbG9ja190CitmdW5jIFRpbWVzKHRtcyAqVG1zKSAodGlja3MgdWludHB0ciwg
ZXJyIGVycm9yKSB7CisJX3IgOj0gY190aW1lcyh0bXMpCisJdGlja3MgPSAodWludHB0cikoX3Ip
CisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQll
cnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIFVtYXNrL3VtYXNrCisvL2V4dGVybiB1bWFzaworZnVuYyBjX3VtYXNr
KG1hc2sgTW9kZV90KSBNb2RlX3QKK2Z1bmMgVW1hc2sobWFzayBpbnQpIChvbGRtYXNrIGludCkg
eworCV9yIDo9IGNfdW1hc2soTW9kZV90KG1hc2spKQorCW9sZG1hc2sgPSAoaW50KShfcikKKwly
ZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVW5saW5r
L3VubGluaworLy9leHRlcm4gdW5saW5rCitmdW5jIGNfdW5saW5rKHBhdGggKmJ5dGUpIF9DX2lu
dAorZnVuYyBVbmxpbmsocGF0aCBzdHJpbmcpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRl
CisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgewor
CQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3VubGluayhfcDEpCisJdmFy
IGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9
IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBVdGltZS91dGltZQorLy9leHRlcm4gdXRpbWUKK2Z1
bmMgY191dGltZShwYXRoICpieXRlLCBidWYgKlV0aW1idWYpIF9DX2ludAorZnVuYyBVdGltZShw
YXRoIHN0cmluZywgYnVmICpVdGltYnVmKSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQor
CV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJ
cmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY191dGltZShfcDEsIGJ1ZikKKwl2
YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5v
ID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlm
IHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHdyaXRlL3dyaXRlCitmdW5jIHdyaXRlKGZkIGlu
dCwgcCBbXWJ5dGUpIChuIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCWlmIGxl
bihwKSA+IDAgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkKKwl9IGVs
c2UgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVy
c3lzY2FsbCgpCisJX3IgOj0gY193cml0ZShfQ19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4ocCkp
KQorCW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQor
CWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9
CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHdyaXRlbGVu
L3dyaXRlCitmdW5jIHdyaXRlbGVuKGZkIGludCwgcCAqYnl0ZSwgbnAgaW50KSAobiBpbnQsIGVy
ciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY193cml0ZShfQ19pbnQoZmQpLCBw
LCBTaXplX3QobnApKQorCW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJu
byA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJu
byA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJy
bm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIG11bm1hcC9tdW5tYXAKKy8vZXh0ZXJuIG11bm1hcAorZnVuYyBjX211bm1hcChhZGRyICpi
eXRlLCBsZW5ndGggU2l6ZV90KSBfQ19pbnQKK2Z1bmMgbXVubWFwKGFkZHIgdWludHB0ciwgbGVu
Z3RoIHVpbnRwdHIpIChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbXVu
bWFwKCgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoYWRkcikpLCBTaXplX3QobGVuZ3RoKSkKKwl2YXIg
ZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0g
R2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNl
dEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE1hZHZpc2UvbWFkdmlzZQorLy9leHRlcm4gbWFkdmlz
ZQorZnVuYyBjX21hZHZpc2UoYWRkciAqYnl0ZSwgbGVuIFNpemVfdCwgYWR2aWNlIF9DX2ludCkg
X0NfaW50CitmdW5jIE1hZHZpc2UoYiBbXWJ5dGUsIGFkdmljZSBpbnQpIChlcnIgZXJyb3IpIHsK
Kwl2YXIgX3AxICpieXRlCisJaWYgbGVuKGIpID4gMCB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZl
LlBvaW50ZXIoJmJbMF0pKQorCX0gZWxzZSB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50
ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX21hZHZpc2UoX3AxLCBT
aXplX3QobGVuKGIpKSwgX0NfaW50KGFkdmljZSkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJy
bm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJy
bm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBNcHJvdGVjdC9tcHJvdGVjdAorLy9leHRlcm4gbXByb3RlY3QKK2Z1bmMgY19tcHJvdGVj
dChhZGRyICpieXRlLCBsZW4gU2l6ZV90LCBwcm90IF9DX2ludCkgX0NfaW50CitmdW5jIE1wcm90
ZWN0KGIgW11ieXRlLCBwcm90IGludCkgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlp
ZiBsZW4oYikgPiAwIHsKKwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkpCisJ
fSBlbHNlIHsKKwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQorCX0KKwlF
bnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbXByb3RlY3QoX3AxLCBTaXplX3QobGVuKGIpKSwgX0Nf
aW50KHByb3QpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0
c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30K
KworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTWxvY2svbWxvY2sKKy8v
ZXh0ZXJuIG1sb2NrCitmdW5jIGNfbWxvY2soYWRkciAqYnl0ZSwgbGVuIFNpemVfdCkgX0NfaW50
CitmdW5jIE1sb2NrKGIgW11ieXRlKSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCWlm
IGxlbihiKSA+IDAgeworCQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZiWzBdKSkKKwl9
IGVsc2UgeworCQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVu
dGVyc3lzY2FsbCgpCisJX3IgOj0gY19tbG9jayhfcDEsIFNpemVfdChsZW4oYikpKQorCXZhciBl
cnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBH
ZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0
RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTXVubG9jay9tdW5sb2NrCisvL2V4dGVybiBtdW5sb2Nr
CitmdW5jIGNfbXVubG9jayhhZGRyICpieXRlLCBsZW4gU2l6ZV90KSBfQ19pbnQKK2Z1bmMgTXVu
bG9jayhiIFtdYnl0ZSkgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlpZiBsZW4oYikg
PiAwIHsKKwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkpCisJfSBlbHNlIHsK
KwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQorCX0KKwlFbnRlcnN5c2Nh
bGwoKQorCV9yIDo9IGNfbXVubG9jayhfcDEsIFNpemVfdChsZW4oYikpKQorCXZhciBlcnJubyBF
cnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJu
bygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgTWxvY2thbGwvbWxvY2thbGwKKy8vZXh0ZXJuIG1sb2NrYWxsCitm
dW5jIGNfbWxvY2thbGwoZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgTWxvY2thbGwoZmxhZ3Mg
aW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX21sb2NrYWxsKF9D
X2ludChmbGFncykpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4
aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNdW5sb2NrYWxsL211
bmxvY2thbGwKKy8vZXh0ZXJuIG11bmxvY2thbGwKK2Z1bmMgY19tdW5sb2NrYWxsKCkgX0NfaW50
CitmdW5jIE11bmxvY2thbGwoKSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6
PSBjX211bmxvY2thbGwoKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJ
aWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0K
KwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1
cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVGNnZXRhdHRy
L3RjZ2V0YXR0cgorLy9leHRlcm4gdGNnZXRhdHRyCitmdW5jIGNfdGNnZXRhdHRyKGZkIF9DX2lu
dCwgcCAqVGVybWlvcykgX0NfaW50CitmdW5jIFRjZ2V0YXR0cihmZCBpbnQsIHAgKlRlcm1pb3Mp
IChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX3RjZ2V0YXR0cihfQ19pbnQoZmQpLCBwKQorCXZhciBl
cnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBH
ZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9
IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBUY3NldGF0dHIvdGNzZXRhdHRyCisvL2V4dGVybiB0Y3NldGF0dHIKK2Z1bmMgY190
Y3NldGF0dHIoZmQgX0NfaW50LCBhY3Rpb25zIF9DX2ludCwgcCAqVGVybWlvcykgX0NfaW50Citm
dW5jIFRjc2V0YXR0cihmZCBpbnQsIGFjdGlvbnMgaW50LCBwICpUZXJtaW9zKSAoZXJyIGVycm9y
KSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3Rjc2V0YXR0cihfQ19pbnQoZmQpLCBfQ19p
bnQoYWN0aW9ucyksIHApCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlp
ZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQor
CUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVy
bgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBzeXNjb25mL3N5
c2NvbmYKKy8vZXh0ZXJuIHN5c2NvbmYKK2Z1bmMgY19zeXNjb25mKG5hbWUgX0NfaW50KSBfQ19s
b25nCitmdW5jIHN5c2NvbmYobmFtZSBpbnQpIChyZXQgaW50NjQsIGVyciBlcnJvcikgeworCUVu
dGVyc3lzY2FsbCgpCisJX3IgOj0gY19zeXNjb25mKF9DX2ludChuYW1lKSkKKwlyZXQgPSAoaW50
NjQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAw
IHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lz
Y2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKwor
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRnN0YXQvZnN0YXQ2NAorLy9l
eHRlcm4gZnN0YXQ2NAorZnVuYyBjX2ZzdGF0NjQoZmQgX0NfaW50LCBzdGF0ICpTdGF0X3QpIF9D
X2ludAorZnVuYyBGc3RhdChmZCBpbnQsIHN0YXQgKlN0YXRfdCkgKGVyciBlcnJvcikgeworCUVu
dGVyc3lzY2FsbCgpCisJX3IgOj0gY19mc3RhdDY0KF9DX2ludChmZCksIHN0YXQpCisJdmFyIGVy
cm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdl
dEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRF
cnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGdHJ1bmNhdGUvZnRydW5jYXRlNjQKKy8vZXh0ZXJuIGZ0
cnVuY2F0ZTY0CitmdW5jIGNfZnRydW5jYXRlNjQoZmQgX0NfaW50LCBsZW5ndGggT2Zmc2V0X3Qp
IF9DX2ludAorZnVuYyBGdHJ1bmNhdGUoZmQgaW50LCBsZW5ndGggaW50NjQpIChlcnIgZXJyb3Ip
IHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfZnRydW5jYXRlNjQoX0NfaW50KGZkKSwgT2Zm
c2V0X3QobGVuZ3RoKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
RXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJu
Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdldHJsaW1pdC9n
ZXRybGltaXQ2NAorLy9leHRlcm4gZ2V0cmxpbWl0NjQKK2Z1bmMgY19nZXRybGltaXQ2NChyZXNv
dXJjZSBfQ19pbnQsIHJsaW0gKlJsaW1pdCkgX0NfaW50CitmdW5jIEdldHJsaW1pdChyZXNvdXJj
ZSBpbnQsIHJsaW0gKlJsaW1pdCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNfZ2V0cmxpbWl0NjQo
X0NfaW50KHJlc291cmNlKSwgcmxpbSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBm
YWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRy
dWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKwor
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTHN0YXQvbHN0YXQ2NAorLy9l
eHRlcm4gbHN0YXQ2NAorZnVuYyBjX2xzdGF0NjQocGF0aCAqYnl0ZSwgc3RhdCAqU3RhdF90KSBf
Q19pbnQKK2Z1bmMgTHN0YXQocGF0aCBzdHJpbmcsIHN0YXQgKlN0YXRfdCkgKGVyciBlcnJvcikg
eworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJ
aWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNf
bHN0YXQ2NChfcDEsIHN0YXQpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBtbWFwL21t
YXA2NAorLy9leHRlcm4gbW1hcDY0CitmdW5jIGNfbW1hcDY0KGFkZHIgKmJ5dGUsIGxlbmd0aCBT
aXplX3QsIHByb3QgX0NfaW50LCBmbGFncyBfQ19pbnQsIGZkIF9DX2ludCwgb2Zmc2V0IE9mZnNl
dF90KSAqYnl0ZQorZnVuYyBtbWFwKGFkZHIgdWludHB0ciwgbGVuZ3RoIHVpbnRwdHIsIHByb3Qg
aW50LCBmbGFncyBpbnQsIGZkIGludCwgb2Zmc2V0IGludDY0KSAoeGFkZHIgdWludHB0ciwgZXJy
IGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX21tYXA2NCgoKmJ5dGUpKHVuc2Fm
ZS5Qb2ludGVyKGFkZHIpKSwgU2l6ZV90KGxlbmd0aCksIF9DX2ludChwcm90KSwgX0NfaW50KGZs
YWdzKSwgX0NfaW50KGZkKSwgT2Zmc2V0X3Qob2Zmc2V0KSkKKwl4YWRkciA9ICh1aW50cHRyKSh1
bnNhZmUuUG9pbnRlcihfcikpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA9PSBuaWwgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVl
CisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQor
CXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBPcGVu
L19fZ29fb3BlbjY0CisvL2V4dGVybiBfX2dvX29wZW42NAorZnVuYyBjX19fZ29fb3BlbjY0KHBh
dGggKmJ5dGUsIG1vZGUgX0NfaW50LCBwZXJtIE1vZGVfdCkgX0NfaW50CitmdW5jIE9wZW4ocGF0
aCBzdHJpbmcsIG1vZGUgaW50LCBwZXJtIHVpbnQzMikgKGZkIGludCwgZXJyIGVycm9yKSB7CisJ
dmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBl
cnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19fX2dv
X29wZW42NChfcDEsIF9DX2ludChtb2RlKSwgTW9kZV90KHBlcm0pKQorCWZkID0gKGludCkoX3Ip
CisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQll
cnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkK
KwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBQcmVhZC9wcmVhZDY0CisvL2V4dGVybiBw
cmVhZDY0CitmdW5jIGNfcHJlYWQ2NChmZCBfQ19pbnQsIGJ1ZiAqYnl0ZSwgY291bnQgU2l6ZV90
LCBvZmZzZXQgT2Zmc2V0X3QpIFNzaXplX3QKK2Z1bmMgUHJlYWQoZmQgaW50LCBwIFtdYnl0ZSwg
b2Zmc2V0IGludDY0KSAobiBpbnQsIGVyciBlcnJvcikgeworCXZhciBfcDIgKmJ5dGUKKwlpZiBs
ZW4ocCkgPiAwIHsKKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmcFswXSkpCisJfSBl
bHNlIHsKKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQorCX0KKwlFbnRl
cnN5c2NhbGwoKQorCV9yIDo9IGNfcHJlYWQ2NChfQ19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4o
cCkpLCBPZmZzZXRfdChvZmZzZXQpKQorCW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8K
KwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQor
CQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIFB3cml0ZS9wd3JpdGU2NAorLy9leHRlcm4gcHdyaXRlNjQKK2Z1bmMgY19w
d3JpdGU2NChmZCBfQ19pbnQsIGJ1ZiAqYnl0ZSwgY291bnQgU2l6ZV90LCBvZmZzZXQgT2Zmc2V0
X3QpIFNzaXplX3QKK2Z1bmMgUHdyaXRlKGZkIGludCwgcCBbXWJ5dGUsIG9mZnNldCBpbnQ2NCkg
KG4gaW50LCBlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJaWYgbGVuKHApID4gMCB7CisJ
CV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJnBbMF0pKQorCX0gZWxzZSB7CisJCV9wMiA9
ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlf
ciA6PSBjX3B3cml0ZTY0KF9DX2ludChmZCksIF9wMiwgU2l6ZV90KGxlbihwKSksIE9mZnNldF90
KG9mZnNldCkpCisJbiA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9
IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0g
dHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubwor
CX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Ig
U2Vlay9sc2VlazY0CisvL2V4dGVybiBsc2VlazY0CitmdW5jIGNfbHNlZWs2NChmZCBfQ19pbnQs
IG9mZnNldCBPZmZzZXRfdCwgd2hlbmNlIF9DX2ludCkgT2Zmc2V0X3QKK2Z1bmMgU2VlayhmZCBp
bnQsIG9mZnNldCBpbnQ2NCwgd2hlbmNlIGludCkgKG9mZiBpbnQ2NCwgZXJyIGVycm9yKSB7CisJ
RW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2xzZWVrNjQoX0NfaW50KGZkKSwgT2Zmc2V0X3Qob2Zm
c2V0KSwgX0NfaW50KHdoZW5jZSkpCisJb2ZmID0gKGludDY0KShfcikKKwl2YXIgZXJybm8gRXJy
bm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8o
KQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIFNldHJsaW1pdC9zZXRybGltaXQ2NAorLy9leHRlcm4gc2V0cmxpbWl0
NjQKK2Z1bmMgY19zZXRybGltaXQ2NChyZXNvdXJjZSBpbnQsIHJsaW0gKlJsaW1pdCkgX0NfaW50
CitmdW5jIFNldHJsaW1pdChyZXNvdXJjZSBpbnQsIHJsaW0gKlJsaW1pdCkgKGVyciBlcnJvcikg
eworCV9yIDo9IGNfc2V0cmxpbWl0NjQoaW50KHJlc291cmNlKSwgcmxpbSkKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgU3RhdC9zdGF0NjQKKy8vZXh0ZXJuIHN0YXQ2NAorZnVuYyBjX3N0YXQ2NChwYXRoICpieXRl
LCBzdGF0ICpTdGF0X3QpIF9DX2ludAorZnVuYyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0
X3QpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJv
bVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNj
YWxsKCkKKwlfciA6PSBjX3N0YXQ2NChfcDEsIHN0YXQpCisJdmFyIGVycm5vIEVycm5vCisJc2V0
RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0
RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9
IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBUcnVuY2F0ZS90cnVuY2F0ZTY0CisvL2V4dGVybiB0cnVuY2F0ZTY0CitmdW5jIGNf
dHJ1bmNhdGU2NChwYXRoICpieXRlLCBsZW5ndGggT2Zmc2V0X3QpIF9DX2ludAorZnVuYyBUcnVu
Y2F0ZShwYXRoIHN0cmluZywgbGVuZ3RoIGludDY0KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAq
Ynl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmls
IHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY190cnVuY2F0ZTY0KF9w
MSwgT2Zmc2V0X3QobGVuZ3RoKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxz
ZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUK
Kwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJ
cmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFVuYW1l
L3VuYW1lCisvL2V4dGVybiB1bmFtZQorZnVuYyBjX3VuYW1lKGJ1ZiAqVXRzbmFtZSkgX0NfaW50
CitmdW5jIFVuYW1lKGJ1ZiAqVXRzbmFtZSkgKGVyciBlcnJvcikgeworCV9yIDo9IGNfdW5hbWUo
YnVmKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsK
KwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciB3YWl0NC93YWl0NAorLy9leHRlcm4gd2FpdDQKK2Z1bmMgY193
YWl0NChwaWQgUGlkX3QsIHN0YXR1cyAqX0NfaW50LCBvcHRpb25zIF9DX2ludCwgcnVzYWdlICpS
dXNhZ2UpIFBpZF90CitmdW5jIHdhaXQ0KHBpZCBQaWRfdCwgc3RhdHVzICpfQ19pbnQsIG9wdGlv
bnMgaW50LCBydXNhZ2UgKlJ1c2FnZSkgKHdwaWQgUGlkX3QsIGVyciBlcnJvcikgeworCUVudGVy
c3lzY2FsbCgpCisJX3IgOj0gY193YWl0NChQaWRfdChwaWQpLCBzdGF0dXMsIF9DX2ludChvcHRp
b25zKSwgcnVzYWdlKQorCXdwaWQgPSAoUGlkX3QpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgYWNjZXB0L2FjY2VwdAorLy9leHRlcm4gYWNjZXB0CitmdW5jIGNfYWNjZXB0KGZk
IF9DX2ludCwgc2EgKlJhd1NvY2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCkgX0NfaW50CitmdW5j
IGFjY2VwdChmZCBpbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVuX3QpIChuZmQg
aW50LCBlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfYWNjZXB0KF9DX2lu
dChmZCksIHNhLCBsZW4pCisJbmZkID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0
RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0
RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9
IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBnZXRzb2NrbmFtZS9nZXRzb2NrbmFtZQorLy9leHRlcm4gZ2V0c29ja25hbWUKK2Z1
bmMgY19nZXRzb2NrbmFtZShmZCBfQ19pbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2Nr
bGVuX3QpIF9DX2ludAorZnVuYyBnZXRzb2NrbmFtZShmZCBpbnQsIHNhICpSYXdTb2NrYWRkckFu
eSwgbGVuICpTb2NrbGVuX3QpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2dldHNvY2tuYW1lKF9D
X2ludChmZCksIHNhLCBsZW4pCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGdldHBlZXJuYW1lL2dldHBlZXJuYW1l
CisvL2V4dGVybiBnZXRwZWVybmFtZQorZnVuYyBjX2dldHBlZXJuYW1lKGZkIF9DX2ludCwgc2Eg
KlJhd1NvY2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCkgX0NfaW50CitmdW5jIGdldHBlZXJuYW1l
KGZkIGludCwgc2EgKlJhd1NvY2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCkgKGVyciBlcnJvcikg
eworCV9yIDo9IGNfZ2V0cGVlcm5hbWUoX0NfaW50KGZkKSwgc2EsIGxlbikKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3Igc2V0c29ja29wdC9zZXRzb2Nrb3B0CisvL2V4dGVybiBzZXRzb2Nrb3B0CitmdW5jIGNfc2V0
c29ja29wdChzIF9DX2ludCwgbGV2ZWwgX0NfaW50LCBvcHRuYW1lIF9DX2ludCwgdmFsICpieXRl
LCB2YWxsZW4gU29ja2xlbl90KSBfQ19pbnQKK2Z1bmMgc2V0c29ja29wdChzIGludCwgbGV2ZWwg
aW50LCBuYW1lIGludCwgdmFsIHVuc2FmZS5Qb2ludGVyLCB2YWxsZW4gU29ja2xlbl90KSAoZXJy
IGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3NldHNvY2tvcHQoX0NfaW50KHMp
LCBfQ19pbnQobGV2ZWwpLCBfQ19pbnQobmFtZSksICgqYnl0ZSkodmFsKSwgU29ja2xlbl90KHZh
bGxlbikpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAg
eworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNj
YWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByZWN2ZnJvbS9yZWN2ZnJvbQor
Ly9leHRlcm4gcmVjdmZyb20KK2Z1bmMgY19yZWN2ZnJvbShmZCBfQ19pbnQsIGJ1ZiAqYnl0ZSwg
bGVuIFNpemVfdCwgZmxhZ3MgX0NfaW50LCBmcm9tICpSYXdTb2NrYWRkckFueSwgZnJvbWxlbiAq
U29ja2xlbl90KSBTc2l6ZV90CitmdW5jIHJlY3Zmcm9tKGZkIGludCwgcCBbXWJ5dGUsIGZsYWdz
IGludCwgZnJvbSAqUmF3U29ja2FkZHJBbnksIGZyb21sZW4gKlNvY2tsZW5fdCkgKG4gaW50LCBl
cnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJaWYgbGVuKHApID4gMCB7CisJCV9wMiA9ICgq
Ynl0ZSkodW5zYWZlLlBvaW50ZXIoJnBbMF0pKQorCX0gZWxzZSB7CisJCV9wMiA9ICgqYnl0ZSko
dW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3Jl
Y3Zmcm9tKF9DX2ludChmZCksIF9wMiwgU2l6ZV90KGxlbihwKSksIF9DX2ludChmbGFncyksIGZy
b20sIGZyb21sZW4pCisJbiA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5v
ID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgTGlzdGVuL2xpc3RlbgorLy9leHRlcm4gbGlzdGVuCitmdW5jIGNfbGlzdGVuKGZkIF9DX2lu
dCwgbiBfQ19pbnQpIF9DX2ludAorZnVuYyBMaXN0ZW4oZmQgaW50LCBuIGludCkgKGVyciBlcnJv
cikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19saXN0ZW4oX0NfaW50KGZkKSwgX0NfaW50
KG4pKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsK
KwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2Fs
bCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2h1dGRvd24vc2h1dGRvd24KKy8v
ZXh0ZXJuIHNodXRkb3duCitmdW5jIGNfc2h1dGRvd24oZmQgX0NfaW50LCBob3cgX0NfaW50KSBf
Q19pbnQKK2Z1bmMgU2h1dGRvd24oZmQgaW50LCBob3cgaW50KSAoZXJyIGVycm9yKSB7CisJRW50
ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3NodXRkb3duKF9DX2ludChmZCksIF9DX2ludChob3cpKQor
CXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJy
bm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJ
aWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRXBvbGxDcmVhdGUvZXBvbGxfY3JlYXRlCisv
L2V4dGVybiBlcG9sbF9jcmVhdGUKK2Z1bmMgY19lcG9sbF9jcmVhdGUoc2l6ZSBfQ19pbnQpIF9D
X2ludAorZnVuYyBFcG9sbENyZWF0ZShzaXplIGludCkgKGZkIGludCwgZXJyIGVycm9yKSB7CisJ
X3IgOj0gY19lcG9sbF9jcmVhdGUoX0NfaW50KHNpemUpKQorCWZkID0gKGludCkoX3IpCisJdmFy
IGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9
IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJy
ID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIEVwb2xsQ3JlYXRlMS9lcG9sbF9jcmVhdGUxCisvL2V4dGVybiBlcG9sbF9jcmVh
dGUxCitmdW5jIGNfZXBvbGxfY3JlYXRlMShmbGFncyBfQ19pbnQpIF9DX2ludAorZnVuYyBFcG9s
bENyZWF0ZTEoZmxhZ3MgaW50KSAoZmQgaW50LCBlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2Vwb2xs
X2NyZWF0ZTEoX0NfaW50KGZsYWdzKSkKKwlmZCA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJu
bworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygp
CisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBF
cG9sbEN0bC9lcG9sbF9jdGwKKy8vZXh0ZXJuIGVwb2xsX2N0bAorZnVuYyBjX2Vwb2xsX2N0bChl
cGZkIF9DX2ludCwgb3AgX0NfaW50LCBmZCBfQ19pbnQsIGV2ZW50ICpFcG9sbEV2ZW50KSBfQ19p
bnQKK2Z1bmMgRXBvbGxDdGwoZXBmZCBpbnQsIG9wIGludCwgZmQgaW50LCBldmVudCAqRXBvbGxF
dmVudCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNfZXBvbGxfY3RsKF9DX2ludChlcGZkKSwgX0Nf
aW50KG9wKSwgX0NfaW50KGZkKSwgZXZlbnQpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8g
Oj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8g
PSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9
CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEVwb2xsV2FpdC9lcG9s
bF93YWl0CisvL2V4dGVybiBlcG9sbF93YWl0CitmdW5jIGNfZXBvbGxfd2FpdChlcGZkIF9DX2lu
dCwgZXZlbnRzICpFcG9sbEV2ZW50LCBtYXhldmVudHMgX0NfaW50LCB0aW1lb3V0IF9DX2ludCkg
X0NfaW50CitmdW5jIEVwb2xsV2FpdChlcGZkIGludCwgZXZlbnRzIFtdRXBvbGxFdmVudCwgbXNl
YyBpbnQpIChuIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqRXBvbGxFdmVudAorCWlmIGxl
bihldmVudHMpID4gMCB7CisJCV9wMiA9ICgqRXBvbGxFdmVudCkodW5zYWZlLlBvaW50ZXIoJmV2
ZW50c1swXSkpCisJfSBlbHNlIHsKKwkJX3AyID0gKCpFcG9sbEV2ZW50KSh1bnNhZmUuUG9pbnRl
cigmX3plcm8pKQorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfZXBvbGxfd2FpdChfQ19p
bnQoZXBmZCksIF9wMiwgX0NfaW50KGxlbihldmVudHMpKSwgX0NfaW50KG1zZWMpKQorCW4gPSAo
aW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwg
MCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5
c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisK
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGJpbmQvYmluZAorLy9leHRl
cm4gYmluZAorZnVuYyBjX2JpbmQoZmQgX0NfaW50LCBzYSAqUmF3U29ja2FkZHJBbnksIGxlbiBT
b2NrbGVuX3QpIF9DX2ludAorZnVuYyBiaW5kKGZkIGludCwgc2EgKlJhd1NvY2thZGRyQW55LCBs
ZW4gU29ja2xlbl90KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2Jp
bmQoX0NfaW50KGZkKSwgc2EsIFNvY2tsZW5fdChsZW4pKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgY29ubmVjdC9jb25uZWN0CisvL2V4dGVybiBjb25uZWN0CitmdW5jIGNfY29ubmVj
dChzIF9DX2ludCwgYWRkciAqUmF3U29ja2FkZHJBbnksIGFkZHJsZW4gU29ja2xlbl90KSBfQ19p
bnQKK2Z1bmMgY29ubmVjdChzIGludCwgYWRkciAqUmF3U29ja2FkZHJBbnksIGFkZHJsZW4gU29j
a2xlbl90KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2Nvbm5lY3Qo
X0NfaW50KHMpLCBhZGRyLCBTb2NrbGVuX3QoYWRkcmxlbikpCisJdmFyIGVycm5vIEVycm5vCisJ
c2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJ
c2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVy
ciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBzb2NrZXQvc29ja2V0CisvL2V4dGVybiBzb2NrZXQKK2Z1bmMgY19zb2NrZXQo
ZG9tYWluIF9DX2ludCwgdHlwIF9DX2ludCwgcHJvdG9jb2wgX0NfaW50KSBfQ19pbnQKK2Z1bmMg
c29ja2V0KGRvbWFpbiBpbnQsIHR5cCBpbnQsIHByb3RvIGludCkgKGZkIGludCwgZXJyIGVycm9y
KSB7CisJX3IgOj0gY19zb2NrZXQoX0NfaW50KGRvbWFpbiksIF9DX2ludCh0eXApLCBfQ19pbnQo
cHJvdG8pKQorCWZkID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisK
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHNvY2tldHBhaXIvc29ja2V0
cGFpcgorLy9leHRlcm4gc29ja2V0cGFpcgorZnVuYyBjX3NvY2tldHBhaXIoZG9tYWluIF9DX2lu
dCwgdHlwIF9DX2ludCwgcHJvdG9jb2wgX0NfaW50LCBmZCAqWzJdX0NfaW50KSBfQ19pbnQKK2Z1
bmMgc29ja2V0cGFpcihkb21haW4gaW50LCB0eXAgaW50LCBwcm90byBpbnQsIGZkICpbMl1fQ19p
bnQpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX3NvY2tldHBhaXIoX0NfaW50KGRvbWFpbiksIF9D
X2ludCh0eXApLCBfQ19pbnQocHJvdG8pLCBmZCkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJu
byA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJu
byA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4K
K30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgZ2V0c29ja29wdC9n
ZXRzb2Nrb3B0CisvL2V4dGVybiBnZXRzb2Nrb3B0CitmdW5jIGNfZ2V0c29ja29wdChzIF9DX2lu
dCwgbGV2ZWwgX0NfaW50LCBuYW1lIF9DX2ludCwgdmFsICpieXRlLCB2YWxsZW4gKlNvY2tsZW5f
dCkgX0NfaW50CitmdW5jIGdldHNvY2tvcHQocyBpbnQsIGxldmVsIGludCwgbmFtZSBpbnQsIHZh
bCB1bnNhZmUuUG9pbnRlciwgdmFsbGVuICpTb2NrbGVuX3QpIChlcnIgZXJyb3IpIHsKKwlFbnRl
cnN5c2NhbGwoKQorCV9yIDo9IGNfZ2V0c29ja29wdChfQ19pbnQocyksIF9DX2ludChsZXZlbCks
IF9DX2ludChuYW1lKSwgKCpieXRlKSh2YWwpLCB2YWxsZW4pCisJdmFyIGVycm5vIEVycm5vCisJ
c2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJ
c2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVy
ciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBzZW5kdG8vc2VuZHRvCisvL2V4dGVybiBzZW5kdG8KK2Z1bmMgY19zZW5kdG8o
cyBfQ19pbnQsIGJ1ZiAqYnl0ZSwgbGVuIFNpemVfdCwgZmxhZ3MgX0NfaW50LCB0byAqUmF3U29j
a2FkZHJBbnksIHRvbGVuIFNvY2tsZW5fdCkgU3NpemVfdAorZnVuYyBzZW5kdG8ocyBpbnQsIGJ1
ZiBbXWJ5dGUsIGZsYWdzIGludCwgdG8gKlJhd1NvY2thZGRyQW55LCB0b2xlbiBTb2NrbGVuX3Qp
IChlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJaWYgbGVuKGJ1ZikgPiAwIHsKKwkJX3Ay
ID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYnVmWzBdKSkKKwl9IGVsc2UgeworCQlfcDIgPSAo
KmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3Ig
Oj0gY19zZW5kdG8oX0NfaW50KHMpLCBfcDIsIFNpemVfdChsZW4oYnVmKSksIF9DX2ludChmbGFn
cyksIHRvLCBTb2NrbGVuX3QodG9sZW4pKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9
IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0g
dHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubwor
CX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Ig
cmVjdm1zZy9yZWN2bXNnCisvL2V4dGVybiByZWN2bXNnCitmdW5jIGNfcmVjdm1zZyhzIF9DX2lu
dCwgbXNnICpNc2doZHIsIGZsYWdzIF9DX2ludCkgU3NpemVfdAorZnVuYyByZWN2bXNnKHMgaW50
LCBtc2cgKk1zZ2hkciwgZmxhZ3MgaW50KSAobiBpbnQsIGVyciBlcnJvcikgeworCUVudGVyc3lz
Y2FsbCgpCisJX3IgOj0gY19yZWN2bXNnKF9DX2ludChzKSwgbXNnLCBfQ19pbnQoZmxhZ3MpKQor
CW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
RXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJu
Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHNlbmRtc2cvc2Vu
ZG1zZworLy9leHRlcm4gc2VuZG1zZworZnVuYyBjX3NlbmRtc2cocyBfQ19pbnQsIG1zZyAqTXNn
aGRyLCBmbGFncyBfQ19pbnQpIFNzaXplX3QKK2Z1bmMgc2VuZG1zZyhzIGludCwgbXNnICpNc2do
ZHIsIGZsYWdzIGludCkgKG4gaW50LCBlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9y
IDo9IGNfc2VuZG1zZyhfQ19pbnQocyksIG1zZywgX0NfaW50KGZsYWdzKSkKKwluID0gKGludCko
X3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgewor
CQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxs
KCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCmRpZmYg
LS1naXQgYS9saWJnby9nZW5lcmF0ZWQvcnVudGltZV9zeXNpbmZvLmdvIGIvbGliZ28vZ2VuZXJh
dGVkL3J1bnRpbWVfc3lzaW5mby5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li42NzcwMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ28vZ2VuZXJhdGVkL3J1bnRpbWVfc3lz
aW5mby5nbwpAQCAtMCwwICsxLDYyMTkgQEAKK3BhY2thZ2UgcnVudGltZQordHlwZSBfcHRyZGlm
Zl90IGludDY0Cit0eXBlIF9zaXplX3QgdWludDY0Cit0eXBlIF93Y2hhcl90IGludDMyCit0eXBl
IF9fX3VfY2hhciB1aW50OAordHlwZSBfX191X3Nob3J0IHVpbnQxNgordHlwZSBfX191X2ludCB1
aW50MzIKK3R5cGUgX19fdV9sb25nIHVpbnQ2NAordHlwZSBfX19pbnQ4X3QgaW50OAordHlwZSBf
X191aW50OF90IHVpbnQ4Cit0eXBlIF9fX2ludDE2X3QgaW50MTYKK3R5cGUgX19fdWludDE2X3Qg
dWludDE2Cit0eXBlIF9fX2ludDMyX3QgaW50MzIKK3R5cGUgX19fdWludDMyX3QgdWludDMyCit0
eXBlIF9fX2ludDY0X3QgaW50NjQKK3R5cGUgX19fdWludDY0X3QgdWludDY0Cit0eXBlIF9fX2lu
dF9sZWFzdDhfdCBpbnQ4Cit0eXBlIF9fX3VpbnRfbGVhc3Q4X3QgdWludDgKK3R5cGUgX19faW50
X2xlYXN0MTZfdCBpbnQxNgordHlwZSBfX191aW50X2xlYXN0MTZfdCB1aW50MTYKK3R5cGUgX19f
aW50X2xlYXN0MzJfdCBpbnQzMgordHlwZSBfX191aW50X2xlYXN0MzJfdCB1aW50MzIKK3R5cGUg
X19faW50X2xlYXN0NjRfdCBpbnQ2NAordHlwZSBfX191aW50X2xlYXN0NjRfdCB1aW50NjQKK3R5
cGUgX19fcXVhZF90IGludDY0Cit0eXBlIF9fX3VfcXVhZF90IHVpbnQ2NAordHlwZSBfX19pbnRt
YXhfdCBpbnQ2NAordHlwZSBfX191aW50bWF4X3QgdWludDY0Cit0eXBlIF9fX2Rldl90IHVpbnQ2
NAordHlwZSBfX191aWRfdCB1aW50MzIKK3R5cGUgX19fZ2lkX3QgdWludDMyCit0eXBlIF9fX2lu
b190IHVpbnQ2NAordHlwZSBfX19pbm82NF90IHVpbnQ2NAordHlwZSBfX19tb2RlX3QgdWludDMy
Cit0eXBlIF9fX25saW5rX3QgdWludDY0Cit0eXBlIF9fX29mZl90IGludDY0Cit0eXBlIF9fX29m
ZjY0X3QgaW50NjQKK3R5cGUgX19fcGlkX3QgaW50MzIKK3R5cGUgX19fZnNpZF90IHN0cnVjdCB7
IF9fdmFsIFsxKzFdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX19mc2lkX3QgPSA4Cit0eXBlIF9f
X2Nsb2NrX3QgaW50NjQKK3R5cGUgX19fcmxpbV90IHVpbnQ2NAordHlwZSBfX19ybGltNjRfdCB1
aW50NjQKK3R5cGUgX19faWRfdCB1aW50MzIKK3R5cGUgX19fdGltZV90IGludDY0Cit0eXBlIF9f
X3VzZWNvbmRzX3QgdWludDMyCit0eXBlIF9fX3N1c2Vjb25kc190IGludDY0Cit0eXBlIF9fX2Rh
ZGRyX3QgaW50MzIKK3R5cGUgX19fa2V5X3QgaW50MzIKK3R5cGUgX19fY2xvY2tpZF90IGludDMy
Cit0eXBlIF9fX3RpbWVyX3QgKmJ5dGUKK3R5cGUgX19fYmxrc2l6ZV90IGludDY0Cit0eXBlIF9f
X2Jsa2NudF90IGludDY0Cit0eXBlIF9fX2Jsa2NudDY0X3QgaW50NjQKK3R5cGUgX19fZnNibGtj
bnRfdCB1aW50NjQKK3R5cGUgX19fZnNibGtjbnQ2NF90IHVpbnQ2NAordHlwZSBfX19mc2ZpbGNu
dF90IHVpbnQ2NAordHlwZSBfX19mc2ZpbGNudDY0X3QgdWludDY0Cit0eXBlIF9fX2Zzd29yZF90
IGludDY0Cit0eXBlIF9fX3NzaXplX3QgaW50NjQKK3R5cGUgX19fc3lzY2FsbF9zbG9uZ190IGlu
dDY0Cit0eXBlIF9fX3N5c2NhbGxfdWxvbmdfdCB1aW50NjQKK3R5cGUgX19fbG9mZl90IGludDY0
Cit0eXBlIF9fX2NhZGRyX3QgKmludDgKK3R5cGUgX19faW50cHRyX3QgaW50NjQKK3R5cGUgX19f
c29ja2xlbl90IHVpbnQzMgordHlwZSBfX19zaWdfYXRvbWljX3QgaW50MzIKK3R5cGUgX3VfY2hh
ciB1aW50OAordHlwZSBfdV9zaG9ydCB1aW50MTYKK3R5cGUgX3VfaW50IHVpbnQzMgordHlwZSBf
dV9sb25nIHVpbnQ2NAordHlwZSBfcXVhZF90IGludDY0Cit0eXBlIF91X3F1YWRfdCB1aW50NjQK
K3R5cGUgX2ZzaWRfdCBzdHJ1Y3QgeyBfX3ZhbCBbMSsxXWludDMyOyB9Citjb25zdCBfc2l6ZW9m
X2ZzaWRfdCA9IDgKK3R5cGUgX2xvZmZfdCBpbnQ2NAordHlwZSBfaW5vX3QgdWludDY0Cit0eXBl
IF9pbm82NF90IHVpbnQ2NAordHlwZSBfZGV2X3QgdWludDY0Cit0eXBlIF9naWRfdCB1aW50MzIK
K3R5cGUgX21vZGVfdCB1aW50MzIKK3R5cGUgX25saW5rX3QgdWludDY0Cit0eXBlIF91aWRfdCB1
aW50MzIKK3R5cGUgX29mZl90IGludDY0Cit0eXBlIF9vZmY2NF90IGludDY0Cit0eXBlIF9waWRf
dCBpbnQzMgordHlwZSBfaWRfdCB1aW50MzIKK3R5cGUgX3NzaXplX3QgaW50NjQKK3R5cGUgX2Rh
ZGRyX3QgaW50MzIKK3R5cGUgX2NhZGRyX3QgKmludDgKK3R5cGUgX2tleV90IGludDMyCit0eXBl
IF9jbG9ja190IGludDY0Cit0eXBlIF9jbG9ja2lkX3QgaW50MzIKK3R5cGUgX3RpbWVfdCBpbnQ2
NAordHlwZSBfdGltZXJfdCAqYnl0ZQordHlwZSBfdXNlY29uZHNfdCB1aW50MzIKK3R5cGUgX3N1
c2Vjb25kc190IGludDY0Cit0eXBlIF91bG9uZyB1aW50NjQKK3R5cGUgX3VzaG9ydCB1aW50MTYK
K3R5cGUgX3VpbnQgdWludDMyCit0eXBlIF9pbnQ4X3QgaW50OAordHlwZSBfaW50MTZfdCBpbnQx
NgordHlwZSBfaW50MzJfdCBpbnQzMgordHlwZSBfaW50NjRfdCBpbnQ2NAordHlwZSBfdV9pbnQ4
X3QgdWludDgKK3R5cGUgX3VfaW50MTZfdCB1aW50MTYKK3R5cGUgX3VfaW50MzJfdCB1aW50MzIK
K3R5cGUgX3VfaW50NjRfdCB1aW50NjQKK3R5cGUgX3JlZ2lzdGVyX3QgaW50NjQKK3R5cGUgX19f
c2lnc2V0X3Qgc3RydWN0IHsgX192YWwgWzE1KzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9mX19f
c2lnc2V0X3QgPSAxMjgKK3R5cGUgX3NpZ3NldF90IHN0cnVjdCB7IF9fdmFsIFsxNSsxXXVpbnQ2
NDsgfQorY29uc3QgX3NpemVvZl9zaWdzZXRfdCA9IDEyOAorY29uc3QgX3NpemVvZl90aW1ldmFs
ID0gMTYKK2NvbnN0IF9zaXplb2ZfdGltZXNwZWMgPSAxNgordHlwZSBfX19mZF9tYXNrIGludDY0
Cit0eXBlIF9mZF9zZXQgc3RydWN0IHsgZmRzX2JpdHMgWzE1KzFdaW50NjQ7IH0KK2NvbnN0IF9z
aXplb2ZfZmRfc2V0ID0gMTI4Cit0eXBlIF9mZF9tYXNrIGludDY0Cit0eXBlIF9ibGtzaXplX3Qg
aW50NjQKK3R5cGUgX2Jsa2NudF90IGludDY0Cit0eXBlIF9mc2Jsa2NudF90IHVpbnQ2NAordHlw
ZSBfZnNmaWxjbnRfdCB1aW50NjQKK3R5cGUgX2Jsa2NudDY0X3QgaW50NjQKK3R5cGUgX2ZzYmxr
Y250NjRfdCB1aW50NjQKK3R5cGUgX2ZzZmlsY250NjRfdCB1aW50NjQKK3R5cGUgX19fcHRocmVh
ZF9yd2xvY2tfYXJjaF90IHN0cnVjdCB7IF9fcmVhZGVycyB1aW50MzI7IF9fd3JpdGVycyB1aW50
MzI7IF9fd3JwaGFzZV9mdXRleCB1aW50MzI7IF9fd3JpdGVyc19mdXRleCB1aW50MzI7IF9fcGFk
MyB1aW50MzI7IF9fcGFkNCB1aW50MzI7IF9fY3VyX3dyaXRlciBpbnQzMjsgX19zaGFyZWQgaW50
MzI7IF9fcndlbGlzaW9uIGludDg7IF9fcGFkMSBbNisxXXVpbnQ4OyBfX3BhZDIgdWludDY0OyBf
X2ZsYWdzIHVpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfX19w
dGhyZWFkX3J3bG9ja19hcmNoX3QgPSA1NgordHlwZSBfX19wdGhyZWFkX2ludGVybmFsX2xpc3Qg
c3RydWN0IHsgX19wcmV2ICpfX19wdGhyZWFkX2ludGVybmFsX2xpc3Q7IF9fbmV4dCAqX19fcHRo
cmVhZF9pbnRlcm5hbF9saXN0OyB9Citjb25zdCBfc2l6ZW9mX19fcHRocmVhZF9pbnRlcm5hbF9s
aXN0ID0gMTYKK3R5cGUgX19fcHRocmVhZF9saXN0X3Qgc3RydWN0IHsgX19wcmV2ICpfX19wdGhy
ZWFkX2ludGVybmFsX2xpc3Q7IF9fbmV4dCAqX19fcHRocmVhZF9pbnRlcm5hbF9saXN0OyB9Citj
b25zdCBfc2l6ZW9mX19fcHRocmVhZF9saXN0X3QgPSAxNgordHlwZSBfX19wdGhyZWFkX211dGV4
X3Mgc3RydWN0IHsgX19sb2NrIGludDMyOyBfX2NvdW50IHVpbnQzMjsgX19vd25lciBpbnQzMjsg
X19udXNlcnMgdWludDMyOyBfX2tpbmQgaW50MzI7IF9fc3BpbnMgaW50MTY7IF9fZWxpc2lvbiBp
bnQxNjsgX19saXN0IF9fX3B0aHJlYWRfbGlzdF90OyB9Citjb25zdCBfc2l6ZW9mX19fcHRocmVh
ZF9tdXRleF9zID0gNDAKK3R5cGUgX19fcHRocmVhZF9jb25kX3Mgc3RydWN0IHsgX193c2VxIHVp
bnQ2NDsgX19nMV9zdGFydCB1aW50NjQ7IF9fZ19yZWZzIFsxKzFddWludDMyOyBfX2dfc2l6ZSBb
MSsxXXVpbnQzMjsgX19nMV9vcmlnX3NpemUgdWludDMyOyBfX3dyZWZzIHVpbnQzMjsgX19nX3Np
Z25hbHMgWzErMV11aW50MzI7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6
ZW9mX19fcHRocmVhZF9jb25kX3MgPSA0OAordHlwZSBfcHRocmVhZF90IHVpbnQ2NAordHlwZSBf
cHRocmVhZF9tdXRleGF0dHJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMrMV1pbnQ4OyBHb2R1bXBfMF9h
bGlnbiBbMF1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX211dGV4YXR0cl90ID0gNAor
dHlwZSBfcHRocmVhZF9jb25kYXR0cl90IHN0cnVjdCB7IF9fc2l6ZSBbMysxXWludDg7IEdvZHVt
cF8wX2FsaWduIFswXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfY29uZGF0dHJfdCA9
IDQKK3R5cGUgX3B0aHJlYWRfa2V5X3QgdWludDMyCit0eXBlIF9wdGhyZWFkX29uY2VfdCBpbnQz
MgordHlwZSBfcHRocmVhZF9hdHRyX3Qgc3RydWN0IHsgX19zaXplIFs1NSsxXWludDg7IEdvZHVt
cF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfYXR0cl90ID0gNTYK
K3R5cGUgX3B0aHJlYWRfbXV0ZXhfdCBzdHJ1Y3QgeyBfX2RhdGEgX19fcHRocmVhZF9tdXRleF9z
OyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfbXV0ZXhfdCA9IDQwCit0eXBlIF9wdGhyZWFkX2Nv
bmRfdCBzdHJ1Y3QgeyBfX2RhdGEgX19fcHRocmVhZF9jb25kX3M7IH0KK2NvbnN0IF9zaXplb2Zf
cHRocmVhZF9jb25kX3QgPSA0OAordHlwZSBfcHRocmVhZF9yd2xvY2tfdCBzdHJ1Y3QgeyBfX2Rh
dGEgX19fcHRocmVhZF9yd2xvY2tfYXJjaF90OyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfcnds
b2NrX3QgPSA1NgordHlwZSBfcHRocmVhZF9yd2xvY2thdHRyX3Qgc3RydWN0IHsgX19zaXplIFs3
KzFdaW50ODsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVh
ZF9yd2xvY2thdHRyX3QgPSA4Cit0eXBlIF9wdGhyZWFkX3NwaW5sb2NrX3QgaW50MzIKK3R5cGUg
X3B0aHJlYWRfYmFycmllcl90IHN0cnVjdCB7IF9fc2l6ZSBbMzErMV1pbnQ4OyBHb2R1bXBfMF9h
bGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX2JhcnJpZXJfdCA9IDMyCit0
eXBlIF9wdGhyZWFkX2JhcnJpZXJhdHRyX3Qgc3RydWN0IHsgX19zaXplIFszKzFdaW50ODsgR29k
dW1wXzBfYWxpZ24gWzBdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9iYXJyaWVyYXR0
cl90ID0gNAordHlwZSBfZGlyZW50IHN0cnVjdCB7IGRfaW5vIHVpbnQ2NDsgZF9vZmYgaW50NjQ7
IGRfcmVjbGVuIHVpbnQxNjsgZF90eXBlIHVpbnQ4OyBkX25hbWUgWzI1NSsxXWludDg7IEdvZHVt
cF8wX3BhZCBbNV1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX2RpcmVudCA9IDI4MAordHlwZSBfZGly
ZW50NjQgc3RydWN0IHsgZF9pbm8gdWludDY0OyBkX29mZiBpbnQ2NDsgZF9yZWNsZW4gdWludDE2
OyBkX3R5cGUgdWludDg7IGRfbmFtZSBbMjU1KzFdaW50ODsgR29kdW1wXzBfcGFkIFs1XWJ5dGU7
IH0KK2NvbnN0IF9zaXplb2ZfZGlyZW50NjQgPSAyODAKK3R5cGUgX0RJUiBzdHJ1Y3QgeyB9Cit0
eXBlIF9lcnJvcl90IGludDMyCit0eXBlIF9mbG9jayBzdHJ1Y3QgeyBsX3R5cGUgaW50MTY7IGxf
d2hlbmNlIGludDE2OyBsX3N0YXJ0IGludDY0OyBsX2xlbiBpbnQ2NDsgbF9waWQgaW50MzI7IEdv
ZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX2Zsb2NrID0gMzIKK3R5cGUgX2Zs
b2NrNjQgc3RydWN0IHsgbF90eXBlIGludDE2OyBsX3doZW5jZSBpbnQxNjsgbF9zdGFydCBpbnQ2
NDsgbF9sZW4gaW50NjQ7IGxfcGlkIGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29u
c3QgX3NpemVvZl9mbG9jazY0ID0gMzIKK3R5cGUgX2lvdmVjIHN0cnVjdCB7IGlvdl9iYXNlICpi
eXRlOyBpb3ZfbGVuIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9pb3ZlYyA9IDE2Cit0eXBlIF9m
X293bmVyX2V4IHN0cnVjdCB7IF90eXBlIHVpbnQzMjsgcGlkIGludDMyOyB9Citjb25zdCBfc2l6
ZW9mX2Zfb3duZXJfZXggPSA4Cit0eXBlIF9maWxlX2hhbmRsZSBzdHJ1Y3QgeyBoYW5kbGVfYnl0
ZXMgdWludDMyOyBoYW5kbGVfdHlwZSBpbnQzMjsgZl9oYW5kbGUgWzBddWludDg7IH0KK2NvbnN0
IF9zaXplb2ZfZmlsZV9oYW5kbGUgPSA4Cit0eXBlIF9zdGF0IHN0cnVjdCB7IHN0X2RldiB1aW50
NjQ7IHN0X2lubyB1aW50NjQ7IHN0X25saW5rIHVpbnQ2NDsgc3RfbW9kZSB1aW50MzI7IHN0X3Vp
ZCB1aW50MzI7IHN0X2dpZCB1aW50MzI7IF9fcGFkMCBpbnQzMjsgc3RfcmRldiB1aW50NjQ7IHN0
X3NpemUgaW50NjQ7IHN0X2Jsa3NpemUgaW50NjQ7IHN0X2Jsb2NrcyBpbnQ2NDsgc3RfYXRpbSB0
aW1lc3BlYzsgc3RfbXRpbSB0aW1lc3BlYzsgc3RfY3RpbSB0aW1lc3BlYzsgX19nbGliY19yZXNl
cnZlZCBbMisxXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3N0YXQgPSAxNDQKK3R5cGUgX3N0YXQ2
NCBzdHJ1Y3QgeyBzdF9kZXYgdWludDY0OyBzdF9pbm8gdWludDY0OyBzdF9ubGluayB1aW50NjQ7
IHN0X21vZGUgdWludDMyOyBzdF91aWQgdWludDMyOyBzdF9naWQgdWludDMyOyBfX3BhZDAgaW50
MzI7IHN0X3JkZXYgdWludDY0OyBzdF9zaXplIGludDY0OyBzdF9ibGtzaXplIGludDY0OyBzdF9i
bG9ja3MgaW50NjQ7IHN0X2F0aW0gdGltZXNwZWM7IHN0X210aW0gdGltZXNwZWM7IHN0X2N0aW0g
dGltZXNwZWM7IF9fZ2xpYmNfcmVzZXJ2ZWQgWzIrMV1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9z
dGF0NjQgPSAxNDQKK3R5cGUgX3N0YWNrX3Qgc3RydWN0IHsgc3Nfc3AgKmJ5dGU7IHNzX2ZsYWdz
IGludDMyOyBzc19zaXplIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zdGFja190ID0gMjQKK3R5
cGUgX2dyZWdfdCBpbnQ2NAordHlwZSBfZ3JlZ3NldF90IFsyMisxXWludDY0Cit0eXBlIF9fbGli
Y19mcHhyZWcgc3RydWN0IHsgc2lnbmlmaWNhbmQgWzMrMV11aW50MTY7IGV4cG9uZW50IHVpbnQx
NjsgX19nbGliY19yZXNlcnZlZDEgWzIrMV11aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfX2xpYmNf
ZnB4cmVnID0gMTYKK3R5cGUgX19saWJjX3htbXJlZyBzdHJ1Y3QgeyBlbGVtZW50IFszKzFddWlu
dDMyOyB9Citjb25zdCBfc2l6ZW9mX19saWJjX3htbXJlZyA9IDE2Cit0eXBlIF9fbGliY19mcHN0
YXRlIHN0cnVjdCB7IGN3ZCB1aW50MTY7IHN3ZCB1aW50MTY7IGZ0dyB1aW50MTY7IGZvcCB1aW50
MTY7IHJpcCB1aW50NjQ7IHJkcCB1aW50NjQ7IG14Y3NyIHVpbnQzMjsgbXhjcl9tYXNrIHVpbnQz
MjsgX3N0IFs3KzFdX19saWJjX2ZweHJlZzsgX3htbSBbMTUrMV1fX2xpYmNfeG1tcmVnOyBfX2ds
aWJjX3Jlc2VydmVkMSBbMjMrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX2xpYmNfZnBzdGF0
ZSA9IDUxMgordHlwZSBfZnByZWdzZXRfdCAqX19saWJjX2Zwc3RhdGUKK3R5cGUgX21jb250ZXh0
X3Qgc3RydWN0IHsgZ3JlZ3MgX2dyZWdzZXRfdDsgZnByZWdzIF9mcHJlZ3NldF90OyBfX3Jlc2Vy
dmVkMSBbNysxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9tY29udGV4dF90ID0gMjU2Cit0eXBl
IF91Y29udGV4dF90IHN0cnVjdCB7IHVjX2ZsYWdzIHVpbnQ2NDsgdWNfbGluayAqX3Vjb250ZXh0
X3Q7IHVjX3N0YWNrIF9zdGFja190OyB1Y19tY29udGV4dCBfbWNvbnRleHRfdDsgdWNfc2lnbWFz
ayBfc2lnc2V0X3Q7IF9fZnByZWdzX21lbSBfX2xpYmNfZnBzdGF0ZTsgX19zc3AgWzMrMV11aW50
NjQ7IH0KK2NvbnN0IF9zaXplb2ZfdWNvbnRleHRfdCA9IDk2OAordHlwZSBfdWludDhfdCB1aW50
OAordHlwZSBfdWludDE2X3QgdWludDE2Cit0eXBlIF91aW50MzJfdCB1aW50MzIKK3R5cGUgX3Vp
bnQ2NF90IHVpbnQ2NAordHlwZSBfc29ja2xlbl90IHVpbnQzMgordHlwZSBfc2FfZmFtaWx5X3Qg
dWludDE2Cit0eXBlIF9zb2NrYWRkciBzdHJ1Y3QgeyBzYV9mYW1pbHkgdWludDE2OyBzYV9kYXRh
IFsxMysxXWludDg7IH0KK2NvbnN0IF9zaXplb2Zfc29ja2FkZHIgPSAxNgordHlwZSBfc29ja2Fk
ZHJfc3RvcmFnZSBzdHJ1Y3QgeyBzc19mYW1pbHkgdWludDE2OyBfX3NzX3BhZGRpbmcgWzExNysx
XWludDg7IF9fc3NfYWxpZ24gdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3NvY2thZGRyX3N0b3Jh
Z2UgPSAxMjgKK3R5cGUgX21zZ2hkciBzdHJ1Y3QgeyBtc2dfbmFtZSAqYnl0ZTsgbXNnX25hbWVs
ZW4gdWludDMyOyBtc2dfaW92ICpfaW92ZWM7IG1zZ19pb3ZsZW4gdWludDY0OyBtc2dfY29udHJv
bCAqYnl0ZTsgbXNnX2NvbnRyb2xsZW4gdWludDY0OyBtc2dfZmxhZ3MgaW50MzI7IEdvZHVtcF8w
X3BhZCBbNF1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX21zZ2hkciA9IDU2Cit0eXBlIF9jbXNnaGRy
IHN0cnVjdCB7IGNtc2dfbGVuIHVpbnQ2NDsgY21zZ19sZXZlbCBpbnQzMjsgY21zZ190eXBlIGlu
dDMyOyBfX2Ntc2dfZGF0YSBbMF11aW50ODsgfQorY29uc3QgX3NpemVvZl9jbXNnaGRyID0gMTYK
K3R5cGUgX3VjcmVkIHN0cnVjdCB7IHBpZCBpbnQzMjsgdWlkIHVpbnQzMjsgZ2lkIHVpbnQzMjsg
fQorY29uc3QgX3NpemVvZl91Y3JlZCA9IDEyCit0eXBlIF9saW5nZXIgc3RydWN0IHsgbF9vbm9m
ZiBpbnQzMjsgbF9saW5nZXIgaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbGluZ2VyID0gOAordHlw
ZSBfb3NvY2thZGRyIHN0cnVjdCB7IHNhX2ZhbWlseSB1aW50MTY7IHNhX2RhdGEgWzEzKzFddWlu
dDg7IH0KK2NvbnN0IF9zaXplb2Zfb3NvY2thZGRyID0gMTYKK3R5cGUgX19fU09DS0FERFJfQVJH
IHN0cnVjdCB7IF9fc29ja2FkZHJfXyAqX3NvY2thZGRyOyB9Citjb25zdCBfc2l6ZW9mX19fU09D
S0FERFJfQVJHID0gOAordHlwZSBfX19DT05TVF9TT0NLQUREUl9BUkcgc3RydWN0IHsgX19zb2Nr
YWRkcl9fICpfc29ja2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfX19DT05TVF9TT0NLQUREUl9BUkcg
PSA4Cit0eXBlIF9tbXNnaGRyIHN0cnVjdCB7IG1zZ19oZHIgX21zZ2hkcjsgbXNnX2xlbiB1aW50
MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX21tc2doZHIgPSA2NAor
dHlwZSBfaW5fYWRkcl90IHVpbnQzMgordHlwZSBfaW5fYWRkciBzdHJ1Y3QgeyBzX2FkZHIgdWlu
dDMyOyB9Citjb25zdCBfc2l6ZW9mX2luX2FkZHIgPSA0Cit0eXBlIF9pcF9vcHRzIHN0cnVjdCB7
IGlwX2RzdCBfaW5fYWRkcjsgaXBfb3B0cyBbMzkrMV1pbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2lw
X29wdHMgPSA0NAordHlwZSBfaXBfbXJlcW4gc3RydWN0IHsgaW1yX211bHRpYWRkciBfaW5fYWRk
cjsgaW1yX2FkZHJlc3MgX2luX2FkZHI7IGltcl9pZmluZGV4IGludDMyOyB9Citjb25zdCBfc2l6
ZW9mX2lwX21yZXFuID0gMTIKK3R5cGUgX2luX3BrdGluZm8gc3RydWN0IHsgaXBpX2lmaW5kZXgg
aW50MzI7IGlwaV9zcGVjX2RzdCBfaW5fYWRkcjsgaXBpX2FkZHIgX2luX2FkZHI7IH0KK2NvbnN0
IF9zaXplb2ZfaW5fcGt0aW5mbyA9IDEyCit0eXBlIF9pbl9wb3J0X3QgdWludDE2Cit0eXBlIF9z
b2NrYWRkcl9pbiBzdHJ1Y3QgeyBzaW5fZmFtaWx5IHVpbnQxNjsgc2luX3BvcnQgdWludDE2OyBz
aW5fYWRkciBfaW5fYWRkcjsgc2luX3plcm8gWzcrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9z
b2NrYWRkcl9pbiA9IDE2Cit0eXBlIF9pcF9tcmVxIHN0cnVjdCB7IGltcl9tdWx0aWFkZHIgX2lu
X2FkZHI7IGltcl9pbnRlcmZhY2UgX2luX2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfaXBfbXJlcSA9
IDgKK3R5cGUgX2lwX21yZXFfc291cmNlIHN0cnVjdCB7IGltcl9tdWx0aWFkZHIgX2luX2FkZHI7
IGltcl9pbnRlcmZhY2UgX2luX2FkZHI7IGltcl9zb3VyY2VhZGRyIF9pbl9hZGRyOyB9Citjb25z
dCBfc2l6ZW9mX2lwX21yZXFfc291cmNlID0gMTIKK2NvbnN0IF9zaXplb2ZfaXB2Nl9tcmVxID0g
MjAKK3R5cGUgX2dyb3VwX3JlcSBzdHJ1Y3QgeyBncl9pbnRlcmZhY2UgdWludDMyOyBncl9ncm91
cCBfc29ja2FkZHJfc3RvcmFnZTsgfQorY29uc3QgX3NpemVvZl9ncm91cF9yZXEgPSAxMzYKK3R5
cGUgX2dyb3VwX3NvdXJjZV9yZXEgc3RydWN0IHsgZ3NyX2ludGVyZmFjZSB1aW50MzI7IGdzcl9n
cm91cCBfc29ja2FkZHJfc3RvcmFnZTsgZ3NyX3NvdXJjZSBfc29ja2FkZHJfc3RvcmFnZTsgfQor
Y29uc3QgX3NpemVvZl9ncm91cF9zb3VyY2VfcmVxID0gMjY0Cit0eXBlIF9pcF9tc2ZpbHRlciBz
dHJ1Y3QgeyBpbXNmX211bHRpYWRkciBfaW5fYWRkcjsgaW1zZl9pbnRlcmZhY2UgX2luX2FkZHI7
IGltc2ZfZm1vZGUgdWludDMyOyBpbXNmX251bXNyYyB1aW50MzI7IGltc2Zfc2xpc3QgWzArMV1f
aW5fYWRkcjsgfQorY29uc3QgX3NpemVvZl9pcF9tc2ZpbHRlciA9IDIwCit0eXBlIF9ncm91cF9m
aWx0ZXIgc3RydWN0IHsgZ2ZfaW50ZXJmYWNlIHVpbnQzMjsgZ2ZfZ3JvdXAgX3NvY2thZGRyX3N0
b3JhZ2U7IGdmX2Ztb2RlIHVpbnQzMjsgZ2ZfbnVtc3JjIHVpbnQzMjsgZ2Zfc2xpc3QgWzArMV1f
c29ja2FkZHJfc3RvcmFnZTsgfQorY29uc3QgX3NpemVvZl9ncm91cF9maWx0ZXIgPSAyNzIKK2Nv
bnN0IF9zaXplb2ZfaW42X3BrdGluZm8gPSAyMAorY29uc3QgX3NpemVvZl9pcDZfbXR1aW5mbyA9
IDMyCit0eXBlIF9pbnRfbGVhc3Q4X3QgaW50OAordHlwZSBfaW50X2xlYXN0MTZfdCBpbnQxNgor
dHlwZSBfaW50X2xlYXN0MzJfdCBpbnQzMgordHlwZSBfaW50X2xlYXN0NjRfdCBpbnQ2NAordHlw
ZSBfdWludF9sZWFzdDhfdCB1aW50OAordHlwZSBfdWludF9sZWFzdDE2X3QgdWludDE2Cit0eXBl
IF91aW50X2xlYXN0MzJfdCB1aW50MzIKK3R5cGUgX3VpbnRfbGVhc3Q2NF90IHVpbnQ2NAordHlw
ZSBfaW50X2Zhc3Q4X3QgaW50OAordHlwZSBfaW50X2Zhc3QxNl90IGludDY0Cit0eXBlIF9pbnRf
ZmFzdDMyX3QgaW50NjQKK3R5cGUgX2ludF9mYXN0NjRfdCBpbnQ2NAordHlwZSBfdWludF9mYXN0
OF90IHVpbnQ4Cit0eXBlIF91aW50X2Zhc3QxNl90IHVpbnQ2NAordHlwZSBfdWludF9mYXN0MzJf
dCB1aW50NjQKK3R5cGUgX3VpbnRfZmFzdDY0X3QgdWludDY0Cit0eXBlIF9pbnRwdHJfdCBpbnQ2
NAordHlwZSBfdWludHB0cl90IHVpbnQ2NAordHlwZSBfaW50bWF4X3QgaW50NjQKK3R5cGUgX3Vp
bnRtYXhfdCB1aW50NjQKK3R5cGUgX3RjcF9zZXEgdWludDMyCit0eXBlIF90Y3BoZHIgc3RydWN0
IHsgdGhfc3BvcnQgdWludDE2OyB0aF9kcG9ydCB1aW50MTY7IHRoX3NlcSB1aW50MzI7IHRoX2Fj
ayB1aW50MzI7IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB0aF9mbGFncyB1aW50ODsgdGhfd2luIHVp
bnQxNjsgdGhfc3VtIHVpbnQxNjsgdGhfdXJwIHVpbnQxNjsgR29kdW1wXzFfYWxpZ24gWzBdaW50
MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGNwaGRyID0gMjAKK3R5cGUgX3RjcF9pbmZvIHN0cnVjdCB7
IHRjcGlfc3RhdGUgdWludDg7IHRjcGlfY2Ffc3RhdGUgdWludDg7IHRjcGlfcmV0cmFuc21pdHMg
dWludDg7IHRjcGlfcHJvYmVzIHVpbnQ4OyB0Y3BpX2JhY2tvZmYgdWludDg7IHRjcGlfb3B0aW9u
cyB1aW50ODsgdGNwaV9ydG8gdWludDMyOyB0Y3BpX2F0byB1aW50MzI7IHRjcGlfc25kX21zcyB1
aW50MzI7IHRjcGlfcmN2X21zcyB1aW50MzI7IHRjcGlfdW5hY2tlZCB1aW50MzI7IHRjcGlfc2Fj
a2VkIHVpbnQzMjsgdGNwaV9sb3N0IHVpbnQzMjsgdGNwaV9yZXRyYW5zIHVpbnQzMjsgdGNwaV9m
YWNrZXRzIHVpbnQzMjsgdGNwaV9sYXN0X2RhdGFfc2VudCB1aW50MzI7IHRjcGlfbGFzdF9hY2tf
c2VudCB1aW50MzI7IHRjcGlfbGFzdF9kYXRhX3JlY3YgdWludDMyOyB0Y3BpX2xhc3RfYWNrX3Jl
Y3YgdWludDMyOyB0Y3BpX3BtdHUgdWludDMyOyB0Y3BpX3Jjdl9zc3RocmVzaCB1aW50MzI7IHRj
cGlfcnR0IHVpbnQzMjsgdGNwaV9ydHR2YXIgdWludDMyOyB0Y3BpX3NuZF9zc3RocmVzaCB1aW50
MzI7IHRjcGlfc25kX2N3bmQgdWludDMyOyB0Y3BpX2Fkdm1zcyB1aW50MzI7IHRjcGlfcmVvcmRl
cmluZyB1aW50MzI7IHRjcGlfcmN2X3J0dCB1aW50MzI7IHRjcGlfcmN2X3NwYWNlIHVpbnQzMjsg
dGNwaV90b3RhbF9yZXRyYW5zIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl90Y3BfaW5mbyA9IDEw
NAordHlwZSBfdGNwX21kNXNpZyBzdHJ1Y3QgeyB0Y3BtX2FkZHIgX3NvY2thZGRyX3N0b3JhZ2U7
IHRjcG1fZmxhZ3MgdWludDg7IHRjcG1fcHJlZml4bGVuIHVpbnQ4OyB0Y3BtX2tleWxlbiB1aW50
MTY7IF9fdGNwbV9wYWQgdWludDMyOyB0Y3BtX2tleSBbNzkrMV11aW50ODsgfQorY29uc3QgX3Np
emVvZl90Y3BfbWQ1c2lnID0gMjE2Cit0eXBlIF90Y3BfcmVwYWlyX29wdCBzdHJ1Y3QgeyBvcHRf
Y29kZSB1aW50MzI7IG9wdF92YWwgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3RjcF9yZXBhaXJf
b3B0ID0gOAordHlwZSBfdGNwX2Nvb2tpZV90cmFuc2FjdGlvbnMgc3RydWN0IHsgdGNwY3RfZmxh
Z3MgdWludDE2OyBfX3RjcGN0X3BhZDEgdWludDg7IHRjcGN0X2Nvb2tpZV9kZXNpcmVkIHVpbnQ4
OyB0Y3BjdF9zX2RhdGFfZGVzaXJlZCB1aW50MTY7IHRjcGN0X3VzZWQgdWludDE2OyB0Y3BjdF92
YWx1ZSBbNTM1KzFddWludDg7IH0KK2NvbnN0IF9zaXplb2ZfdGNwX2Nvb2tpZV90cmFuc2FjdGlv
bnMgPSA1NDQKK3R5cGUgX3RjcF9yZXBhaXJfd2luZG93IHN0cnVjdCB7IHNuZF93bDEgdWludDMy
OyBzbmRfd25kIHVpbnQzMjsgbWF4X3dpbmRvdyB1aW50MzI7IHJjdl93bmQgdWludDMyOyByY3Zf
d3VwIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl90Y3BfcmVwYWlyX3dpbmRvdyA9IDIwCit0eXBl
IF90aW1lc3RhbXAgc3RydWN0IHsgbGVuIHVpbnQ4OyBwdHIgdWludDg7IGRhdGEgWzgrMV11aW50
MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGltZXN0YW1wID0gNDAKK3R5cGUgX2lwaGRyIHN0cnVjdCB7
IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB0b3MgdWludDg7IHRvdF9sZW4gdWludDE2OyBpZCB1aW50
MTY7IGZyYWdfb2ZmIHVpbnQxNjsgdHRsIHVpbnQ4OyBwcm90b2NvbCB1aW50ODsgY2hlY2sgdWlu
dDE2OyBzYWRkciB1aW50MzI7IGRhZGRyIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pcGhkciA9
IDIwCit0eXBlIF9pcCBzdHJ1Y3QgeyBHb2R1bXBfMF9wYWQgWzFdYnl0ZTsgaXBfdG9zIHVpbnQ4
OyBpcF9sZW4gdWludDE2OyBpcF9pZCB1aW50MTY7IGlwX29mZiB1aW50MTY7IGlwX3R0bCB1aW50
ODsgaXBfcCB1aW50ODsgaXBfc3VtIHVpbnQxNjsgaXBfc3JjIF9pbl9hZGRyOyBpcF9kc3QgX2lu
X2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfaXAgPSAyMAordHlwZSBfaXBfdGltZXN0YW1wIHN0cnVj
dCB7IGlwdF9jb2RlIHVpbnQ4OyBpcHRfbGVuIHVpbnQ4OyBpcHRfcHRyIHVpbnQ4OyBkYXRhIFs4
KzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lwX3RpbWVzdGFtcCA9IDQwCit0eXBlIF9fX3M4
IGludDgKK3R5cGUgX19fdTggdWludDgKK3R5cGUgX19fczE2IGludDE2Cit0eXBlIF9fX3UxNiB1
aW50MTYKK3R5cGUgX19fczMyIGludDMyCit0eXBlIF9fX3UzMiB1aW50MzIKK3R5cGUgX19fczY0
IGludDY0Cit0eXBlIF9fX3U2NCB1aW50NjQKK3R5cGUgX19fa2VybmVsX2ZkX3NldCBzdHJ1Y3Qg
eyBmZHNfYml0cyBbMTUrMV11aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfX19rZXJuZWxfZmRfc2V0
ID0gMTI4Cit0eXBlIF9fX2tlcm5lbF9zaWdoYW5kbGVyX3QgZnVuYyhpbnQzMikKK3R5cGUgX19f
a2VybmVsX2tleV90IGludDMyCit0eXBlIF9fX2tlcm5lbF9tcWRfdCBpbnQzMgordHlwZSBfX19r
ZXJuZWxfb2xkX3VpZF90IHVpbnQxNgordHlwZSBfX19rZXJuZWxfb2xkX2dpZF90IHVpbnQxNgor
dHlwZSBfX19rZXJuZWxfb2xkX2Rldl90IHVpbnQ2NAordHlwZSBfX19rZXJuZWxfbG9uZ190IGlu
dDY0Cit0eXBlIF9fX2tlcm5lbF91bG9uZ190IHVpbnQ2NAordHlwZSBfX19rZXJuZWxfaW5vX3Qg
dWludDY0Cit0eXBlIF9fX2tlcm5lbF9tb2RlX3QgdWludDMyCit0eXBlIF9fX2tlcm5lbF9waWRf
dCBpbnQzMgordHlwZSBfX19rZXJuZWxfaXBjX3BpZF90IGludDMyCit0eXBlIF9fX2tlcm5lbF91
aWRfdCB1aW50MzIKK3R5cGUgX19fa2VybmVsX2dpZF90IHVpbnQzMgordHlwZSBfX19rZXJuZWxf
c3VzZWNvbmRzX3QgaW50NjQKK3R5cGUgX19fa2VybmVsX2RhZGRyX3QgaW50MzIKK3R5cGUgX19f
a2VybmVsX3VpZDMyX3QgdWludDMyCit0eXBlIF9fX2tlcm5lbF9naWQzMl90IHVpbnQzMgordHlw
ZSBfX19rZXJuZWxfc2l6ZV90IHVpbnQ2NAordHlwZSBfX19rZXJuZWxfc3NpemVfdCBpbnQ2NAor
dHlwZSBfX19rZXJuZWxfcHRyZGlmZl90IGludDY0Cit0eXBlIF9fX2tlcm5lbF9mc2lkX3Qgc3Ry
dWN0IHsgdmFsIFsxKzFdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX19rZXJuZWxfZnNpZF90ID0g
OAordHlwZSBfX19rZXJuZWxfb2ZmX3QgaW50NjQKK3R5cGUgX19fa2VybmVsX2xvZmZfdCBpbnQ2
NAordHlwZSBfX19rZXJuZWxfdGltZV90IGludDY0Cit0eXBlIF9fX2tlcm5lbF90aW1lNjRfdCBp
bnQ2NAordHlwZSBfX19rZXJuZWxfY2xvY2tfdCBpbnQ2NAordHlwZSBfX19rZXJuZWxfdGltZXJf
dCBpbnQzMgordHlwZSBfX19rZXJuZWxfY2xvY2tpZF90IGludDMyCit0eXBlIF9fX2tlcm5lbF9j
YWRkcl90ICppbnQ4Cit0eXBlIF9fX2tlcm5lbF91aWQxNl90IHVpbnQxNgordHlwZSBfX19rZXJu
ZWxfZ2lkMTZfdCB1aW50MTYKK3R5cGUgX19fbGUxNiB1aW50MTYKK3R5cGUgX19fYmUxNiB1aW50
MTYKK3R5cGUgX19fbGUzMiB1aW50MzIKK3R5cGUgX19fYmUzMiB1aW50MzIKK3R5cGUgX19fbGU2
NCB1aW50NjQKK3R5cGUgX19fYmU2NCB1aW50NjQKK3R5cGUgX19fc3VtMTYgdWludDE2Cit0eXBl
IF9fX3dzdW0gdWludDMyCit0eXBlIF9fX3BvbGxfdCB1aW50MzIKK3R5cGUgX2V0aGhkciBzdHJ1
Y3QgeyBoX2Rlc3QgWzUrMV11aW50ODsgaF9zb3VyY2UgWzUrMV11aW50ODsgaF9wcm90byB1aW50
MTY7IH0KK2NvbnN0IF9zaXplb2ZfZXRoaGRyID0gMTQKK3R5cGUgX2V0aGVyX2FkZHIgc3RydWN0
IHsgZXRoZXJfYWRkcl9vY3RldCBbNSsxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2V0aGVyX2Fk
ZHIgPSA2Cit0eXBlIF9ldGhlcl9oZWFkZXIgc3RydWN0IHsgZXRoZXJfZGhvc3QgWzUrMV11aW50
ODsgZXRoZXJfc2hvc3QgWzUrMV11aW50ODsgZXRoZXJfdHlwZSB1aW50MTY7IH0KK2NvbnN0IF9z
aXplb2ZfZXRoZXJfaGVhZGVyID0gMTQKK3R5cGUgX2FycGhkciBzdHJ1Y3QgeyBhcl9ocmQgdWlu
dDE2OyBhcl9wcm8gdWludDE2OyBhcl9obG4gdWludDg7IGFyX3BsbiB1aW50ODsgYXJfb3AgdWlu
dDE2OyB9Citjb25zdCBfc2l6ZW9mX2FycGhkciA9IDgKK3R5cGUgX2FycHJlcSBzdHJ1Y3QgeyBh
cnBfcGEgX3NvY2thZGRyOyBhcnBfaGEgX3NvY2thZGRyOyBhcnBfZmxhZ3MgaW50MzI7IGFycF9u
ZXRtYXNrIF9zb2NrYWRkcjsgYXJwX2RldiBbMTUrMV1pbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2Fy
cHJlcSA9IDY4Cit0eXBlIF9hcnByZXFfb2xkIHN0cnVjdCB7IGFycF9wYSBfc29ja2FkZHI7IGFy
cF9oYSBfc29ja2FkZHI7IGFycF9mbGFncyBpbnQzMjsgYXJwX25ldG1hc2sgX3NvY2thZGRyOyB9
Citjb25zdCBfc2l6ZW9mX2FycHJlcV9vbGQgPSA1MgordHlwZSBfYXJwZF9yZXF1ZXN0IHN0cnVj
dCB7IHJlcSB1aW50MTY7IGlwIHVpbnQzMjsgZGV2IHVpbnQ2NDsgc3RhbXAgdWludDY0OyB1cGRh
dGVkIHVpbnQ2NDsgaGEgWzYrMV11aW50ODsgR29kdW1wXzBfcGFkIFsxXWJ5dGU7IH0KK2NvbnN0
IF9zaXplb2ZfYXJwZF9yZXF1ZXN0ID0gNDAKK3R5cGUgX2V0aGVyX2FycCBzdHJ1Y3QgeyBlYV9o
ZHIgX2FycGhkcjsgYXJwX3NoYSBbNSsxXXVpbnQ4OyBhcnBfc3BhIFszKzFddWludDg7IGFycF90
aGEgWzUrMV11aW50ODsgYXJwX3RwYSBbMysxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2V0aGVy
X2FycCA9IDI4Cit0eXBlIF9zaWdfYXRvbWljX3QgaW50MzIKK3R5cGUgX3NpZ3ZhbCBzdHJ1Y3Qg
eyBzaXZhbF9pbnQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyBHb2R1bXBfMV9hbGlnbiBb
MF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zaWd2YWwgPSA4Cit0eXBlIF9fX3NpZ3ZhbF90IHN0
cnVjdCB7IHNpdmFsX2ludCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IEdvZHVtcF8xX2Fs
aWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX19fc2lndmFsX3QgPSA4Cit0eXBlIF9zaWdp
bmZvX3Qgc3RydWN0IHsgc2lfc2lnbm8gaW50MzI7IHNpX2Vycm5vIGludDMyOyBzaV9jb2RlIGlu
dDMyOyBfX3BhZDAgaW50MzI7IF9zaWZpZWxkcyBzdHJ1Y3QgeyBfcGFkIFsyNysxXWludDMyOyBH
b2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfTsgfQorY29uc3QgX3NpemVvZl9zaWdpbmZvX3QgPSAx
MjgKK3R5cGUgX3NpZ3ZhbF90IHN0cnVjdCB7IHNpdmFsX2ludCBpbnQzMjsgR29kdW1wXzBfcGFk
IFs0XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3NpZ3Zh
bF90ID0gOAordHlwZSBfc2lnZXZlbnQgc3RydWN0IHsgc2lnZXZfdmFsdWUgX19fc2lndmFsX3Q7
IHNpZ2V2X3NpZ25vIGludDMyOyBzaWdldl9ub3RpZnkgaW50MzI7IF9zaWdldl91biBzdHJ1Y3Qg
eyBfcGFkIFsxMSsxXWludDMyOyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfTsgfQorY29uc3Qg
X3NpemVvZl9zaWdldmVudCA9IDY0Cit0eXBlIF9zaWdldmVudF90IHN0cnVjdCB7IHNpZ2V2X3Zh
bHVlIF9fX3NpZ3ZhbF90OyBzaWdldl9zaWdubyBpbnQzMjsgc2lnZXZfbm90aWZ5IGludDMyOyBf
c2lnZXZfdW4gc3RydWN0IHsgX3BhZCBbMTErMV1pbnQzMjsgR29kdW1wXzBfYWxpZ24gWzBdaW50
NjQ7IH07IH0KK2NvbnN0IF9zaXplb2Zfc2lnZXZlbnRfdCA9IDY0Cit0eXBlIF9fX3NpZ2hhbmRs
ZXJfdCBmdW5jKGludDMyKQordHlwZSBfc2lnaGFuZGxlcl90IGZ1bmMoaW50MzIpCit0eXBlIF9z
aWdfdCBmdW5jKGludDMyKQordHlwZSBfc2lnYWN0aW9uIHN0cnVjdCB7IF9fc2lnYWN0aW9uX2hh
bmRsZXIgc3RydWN0IHsgc2FfaGFuZGxlciBfX19zaWdoYW5kbGVyX3Q7IH07IHNhX21hc2sgX19f
c2lnc2V0X3Q7IHNhX2ZsYWdzIGludDMyOyBzYV9yZXN0b3JlciBmdW5jKCk7IH0KK2NvbnN0IF9z
aXplb2Zfc2lnYWN0aW9uID0gMTUyCit0eXBlIF9fZnB4X3N3X2J5dGVzIHN0cnVjdCB7IG1hZ2lj
MSB1aW50MzI7IGV4dGVuZGVkX3NpemUgdWludDMyOyB4c3RhdGVfYnYgdWludDY0OyB4c3RhdGVf
c2l6ZSB1aW50MzI7IF9fZ2xpYmNfcmVzZXJ2ZWQxIFs2KzFddWludDMyOyB9Citjb25zdCBfc2l6
ZW9mX19mcHhfc3dfYnl0ZXMgPSA0OAordHlwZSBfX2ZwcmVnIHN0cnVjdCB7IHNpZ25pZmljYW5k
IFszKzFddWludDE2OyBleHBvbmVudCB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfX2ZwcmVnID0g
MTAKK3R5cGUgX19mcHhyZWcgc3RydWN0IHsgc2lnbmlmaWNhbmQgWzMrMV11aW50MTY7IGV4cG9u
ZW50IHVpbnQxNjsgX19nbGliY19yZXNlcnZlZDEgWzIrMV11aW50MTY7IH0KK2NvbnN0IF9zaXpl
b2ZfX2ZweHJlZyA9IDE2Cit0eXBlIF9feG1tcmVnIHN0cnVjdCB7IGVsZW1lbnQgWzMrMV11aW50
MzI7IH0KK2NvbnN0IF9zaXplb2ZfX3htbXJlZyA9IDE2Cit0eXBlIF9fZnBzdGF0ZSBzdHJ1Y3Qg
eyBjd2QgdWludDE2OyBzd2QgdWludDE2OyBmdHcgdWludDE2OyBmb3AgdWludDE2OyByaXAgdWlu
dDY0OyByZHAgdWludDY0OyBteGNzciB1aW50MzI7IG14Y3JfbWFzayB1aW50MzI7IF9zdCBbNysx
XV9fZnB4cmVnOyBfeG1tIFsxNSsxXV9feG1tcmVnOyBfX2dsaWJjX3Jlc2VydmVkMSBbMjMrMV11
aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX2Zwc3RhdGUgPSA1MTIKK3R5cGUgX3NpZ2NvbnRleHQg
c3RydWN0IHsgcjggdWludDY0OyByOSB1aW50NjQ7IHIxMCB1aW50NjQ7IHIxMSB1aW50NjQ7IHIx
MiB1aW50NjQ7IHIxMyB1aW50NjQ7IHIxNCB1aW50NjQ7IHIxNSB1aW50NjQ7IHJkaSB1aW50NjQ7
IHJzaSB1aW50NjQ7IHJicCB1aW50NjQ7IHJieCB1aW50NjQ7IHJkeCB1aW50NjQ7IHJheCB1aW50
NjQ7IHJjeCB1aW50NjQ7IHJzcCB1aW50NjQ7IHJpcCB1aW50NjQ7IGVmbGFncyB1aW50NjQ7IGNz
IHVpbnQxNjsgZ3MgdWludDE2OyBmcyB1aW50MTY7IF9fcGFkMCB1aW50MTY7IGVyciB1aW50NjQ7
IHRyYXBubyB1aW50NjQ7IG9sZG1hc2sgdWludDY0OyBjcjIgdWludDY0OyBmcHN0YXRlICpfX2Zw
c3RhdGU7IF9fcmVzZXJ2ZWQxIFs3KzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3NpZ2NvbnRl
eHQgPSAyNTYKK3R5cGUgX194c2F2ZV9oZHIgc3RydWN0IHsgeHN0YXRlX2J2IHVpbnQ2NDsgX19n
bGliY19yZXNlcnZlZDEgWzErMV11aW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQyIFs0KzFddWludDY0
OyB9Citjb25zdCBfc2l6ZW9mX194c2F2ZV9oZHIgPSA2NAordHlwZSBfX3ltbWhfc3RhdGUgc3Ry
dWN0IHsgeW1taF9zcGFjZSBbNjMrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX3ltbWhfc3Rh
dGUgPSAyNTYKK3R5cGUgX194c3RhdGUgc3RydWN0IHsgZnBzdGF0ZSBfX2Zwc3RhdGU7IHhzdGF0
ZV9oZHIgX194c2F2ZV9oZHI7IHltbWggX195bW1oX3N0YXRlOyB9Citjb25zdCBfc2l6ZW9mX194
c3RhdGUgPSA4MzIKK3R5cGUgX3NpZ3N0YWNrIHN0cnVjdCB7IHNzX3NwICpieXRlOyBzc19vbnN0
YWNrIGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9zaWdzdGFj
ayA9IDE2Cit0eXBlIF93aW5zaXplIHN0cnVjdCB7IHdzX3JvdyB1aW50MTY7IHdzX2NvbCB1aW50
MTY7IHdzX3hwaXhlbCB1aW50MTY7IHdzX3lwaXhlbCB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2Zf
d2luc2l6ZSA9IDgKK3R5cGUgX3Rlcm1pbyBzdHJ1Y3QgeyBjX2lmbGFnIHVpbnQxNjsgY19vZmxh
ZyB1aW50MTY7IGNfY2ZsYWcgdWludDE2OyBjX2xmbGFnIHVpbnQxNjsgY19saW5lIHVpbnQ4OyBj
X2NjIFs3KzFddWludDg7IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX3Rl
cm1pbyA9IDE4Cit0eXBlIF9jY190IHVpbnQ4Cit0eXBlIF9zcGVlZF90IHVpbnQzMgordHlwZSBf
dGNmbGFnX3QgdWludDMyCit0eXBlIF90ZXJtaW9zIHN0cnVjdCB7IGNfaWZsYWcgdWludDMyOyBj
X29mbGFnIHVpbnQzMjsgY19jZmxhZyB1aW50MzI7IGNfbGZsYWcgdWludDMyOyBjX2xpbmUgdWlu
dDg7IGNfY2MgWzMxKzFddWludDg7IGNfaXNwZWVkIHVpbnQzMjsgY19vc3BlZWQgdWludDMyOyB9
Citjb25zdCBfc2l6ZW9mX3Rlcm1pb3MgPSA2MAorY29uc3QgX3NpemVvZl9lcG9sbF9kYXRhID0g
OAorY29uc3QgX3NpemVvZl9lcG9sbF9kYXRhX3QgPSA4Citjb25zdCBfc2l6ZW9mX2Vwb2xsX2V2
ZW50ID0gMTIKK3R5cGUgX3ByY3RsX21tX21hcCBzdHJ1Y3QgeyBzdGFydF9jb2RlIHVpbnQ2NDsg
ZW5kX2NvZGUgdWludDY0OyBzdGFydF9kYXRhIHVpbnQ2NDsgZW5kX2RhdGEgdWludDY0OyBzdGFy
dF9icmsgdWludDY0OyBicmsgdWludDY0OyBzdGFydF9zdGFjayB1aW50NjQ7IGFyZ19zdGFydCB1
aW50NjQ7IGFyZ19lbmQgdWludDY0OyBlbnZfc3RhcnQgdWludDY0OyBlbnZfZW5kIHVpbnQ2NDsg
YXV4diAqdWludDY0OyBhdXh2X3NpemUgdWludDMyOyBleGVfZmQgdWludDMyOyB9Citjb25zdCBf
c2l6ZW9mX3ByY3RsX21tX21hcCA9IDEwNAordHlwZSBfX19wdHJhY2VfcGVla3NpZ2luZm9fYXJn
cyBzdHJ1Y3QgeyBvZmYgdWludDY0OyBmbGFncyB1aW50MzI7IG5yIGludDMyOyB9Citjb25zdCBf
c2l6ZW9mX19fcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3MgPSAxNgordHlwZSBfX19wdHJhY2Vfc2Vj
Y29tcF9tZXRhZGF0YSBzdHJ1Y3QgeyBmaWx0ZXJfb2ZmIHVpbnQ2NDsgZmxhZ3MgdWludDY0OyB9
Citjb25zdCBfc2l6ZW9mX19fcHRyYWNlX3NlY2NvbXBfbWV0YWRhdGEgPSAxNgordHlwZSBfcmxp
bV90IHVpbnQ2NAordHlwZSBfcmxpbTY0X3QgdWludDY0Cit0eXBlIF9ybGltaXQgc3RydWN0IHsg
cmxpbV9jdXIgdWludDY0OyBybGltX21heCB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcmxpbWl0
ID0gMTYKK3R5cGUgX3JsaW1pdDY0IHN0cnVjdCB7IHJsaW1fY3VyIHVpbnQ2NDsgcmxpbV9tYXgg
dWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3JsaW1pdDY0ID0gMTYKK3R5cGUgX3J1c2FnZSBzdHJ1
Y3QgeyBydV91dGltZSB0aW1ldmFsOyBydV9zdGltZSB0aW1ldmFsOyBydV9tYXhyc3MgaW50NjQ7
IHJ1X2l4cnNzIGludDY0OyBydV9pZHJzcyBpbnQ2NDsgcnVfaXNyc3MgaW50NjQ7IHJ1X21pbmZs
dCBpbnQ2NDsgcnVfbWFqZmx0IGludDY0OyBydV9uc3dhcCBpbnQ2NDsgcnVfaW5ibG9jayBpbnQ2
NDsgcnVfb3VibG9jayBpbnQ2NDsgcnVfbXNnc25kIGludDY0OyBydV9tc2dyY3YgaW50NjQ7IHJ1
X25zaWduYWxzIGludDY0OyBydV9udmNzdyBpbnQ2NDsgcnVfbml2Y3N3IGludDY0OyB9Citjb25z
dCBfc2l6ZW9mX3J1c2FnZSA9IDE0NAordHlwZSBfX19ybGltaXRfcmVzb3VyY2VfdCB1aW50MzIK
K3R5cGUgX19fcnVzYWdlX3dob190IGludDMyCit0eXBlIF9fX3ByaW9yaXR5X3doaWNoX3QgdWlu
dDMyCit0eXBlIF9zdGF0eF90aW1lc3RhbXAgc3RydWN0IHsgdHZfc2VjIGludDY0OyB0dl9uc2Vj
IHVpbnQzMjsgX19zdGF0eF90aW1lc3RhbXBfcGFkMSBbMCsxXWludDMyOyB9Citjb25zdCBfc2l6
ZW9mX3N0YXR4X3RpbWVzdGFtcCA9IDE2Cit0eXBlIF9zdGF0eCBzdHJ1Y3QgeyBzdHhfbWFzayB1
aW50MzI7IHN0eF9ibGtzaXplIHVpbnQzMjsgc3R4X2F0dHJpYnV0ZXMgdWludDY0OyBzdHhfbmxp
bmsgdWludDMyOyBzdHhfdWlkIHVpbnQzMjsgc3R4X2dpZCB1aW50MzI7IHN0eF9tb2RlIHVpbnQx
NjsgX19zdGF0eF9wYWQxIFswKzFddWludDE2OyBzdHhfaW5vIHVpbnQ2NDsgc3R4X3NpemUgdWlu
dDY0OyBzdHhfYmxvY2tzIHVpbnQ2NDsgc3R4X2F0dHJpYnV0ZXNfbWFzayB1aW50NjQ7IHN0eF9h
dGltZSBfc3RhdHhfdGltZXN0YW1wOyBzdHhfYnRpbWUgX3N0YXR4X3RpbWVzdGFtcDsgc3R4X2N0
aW1lIF9zdGF0eF90aW1lc3RhbXA7IHN0eF9tdGltZSBfc3RhdHhfdGltZXN0YW1wOyBzdHhfcmRl
dl9tYWpvciB1aW50MzI7IHN0eF9yZGV2X21pbm9yIHVpbnQzMjsgc3R4X2Rldl9tYWpvciB1aW50
MzI7IHN0eF9kZXZfbWlub3IgdWludDMyOyBfX3N0YXR4X3BhZDIgWzEzKzFddWludDY0OyB9Citj
b25zdCBfc2l6ZW9mX3N0YXR4ID0gMjU2Cit0eXBlIF90aW1lem9uZSBzdHJ1Y3QgeyB0el9taW51
dGVzd2VzdCBpbnQzMjsgdHpfZHN0dGltZSBpbnQzMjsgfQorY29uc3QgX3NpemVvZl90aW1lem9u
ZSA9IDgKK3R5cGUgX19fdGltZXpvbmVfcHRyX3QgKl90aW1lem9uZQordHlwZSBfaXRpbWVydmFs
IHN0cnVjdCB7IGl0X2ludGVydmFsIHRpbWV2YWw7IGl0X3ZhbHVlIHRpbWV2YWw7IH0KK2NvbnN0
IF9zaXplb2ZfaXRpbWVydmFsID0gMzIKK3R5cGUgX19faXRpbWVyX3doaWNoX3QgdWludDMyCit0
eXBlIF90bXMgc3RydWN0IHsgdG1zX3V0aW1lIGludDY0OyB0bXNfc3RpbWUgaW50NjQ7IHRtc19j
dXRpbWUgaW50NjQ7IHRtc19jc3RpbWUgaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfdG1zID0gMzIK
K3R5cGUgX2lkdHlwZV90IHVpbnQzMgordHlwZSBfc29ja2FkZHJfdW4gc3RydWN0IHsgc3VuX2Zh
bWlseSB1aW50MTY7IHN1bl9wYXRoIFsxMDcrMV1pbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3NvY2th
ZGRyX3VuID0gMTEwCit0eXBlIF9fX2xvY2FsZV9zdHJ1Y3Qgc3RydWN0IHsgX19sb2NhbGVzIFsx
MisxXSpfX19sb2NhbGVfZGF0YTsgX19jdHlwZV9iICp1aW50MTY7IF9fY3R5cGVfdG9sb3dlciAq
aW50MzI7IF9fY3R5cGVfdG91cHBlciAqaW50MzI7IF9fbmFtZXMgWzEyKzFdKmludDg7IH0KK2Nv
bnN0IF9zaXplb2ZfX19sb2NhbGVfc3RydWN0ID0gMjMyCit0eXBlIF9fX2xvY2FsZV90ICpfX19s
b2NhbGVfc3RydWN0Cit0eXBlIF9sb2NhbGVfdCAqX19fbG9jYWxlX3N0cnVjdAordHlwZSBfdXNl
cl9mcHJlZ3Nfc3RydWN0IHN0cnVjdCB7IGN3ZCB1aW50MTY7IHN3ZCB1aW50MTY7IGZ0dyB1aW50
MTY7IGZvcCB1aW50MTY7IHJpcCB1aW50NjQ7IHJkcCB1aW50NjQ7IG14Y3NyIHVpbnQzMjsgbXhj
cl9tYXNrIHVpbnQzMjsgc3Rfc3BhY2UgWzMxKzFddWludDMyOyB4bW1fc3BhY2UgWzYzKzFddWlu
dDMyOyBwYWRkaW5nIFsyMysxXXVpbnQzMjsgfQorY29uc3QgX3NpemVvZl91c2VyX2ZwcmVnc19z
dHJ1Y3QgPSA1MTIKK3R5cGUgX3VzZXJfcmVnc19zdHJ1Y3Qgc3RydWN0IHsgcjE1IHVpbnQ2NDsg
cjE0IHVpbnQ2NDsgcjEzIHVpbnQ2NDsgcjEyIHVpbnQ2NDsgcmJwIHVpbnQ2NDsgcmJ4IHVpbnQ2
NDsgcjExIHVpbnQ2NDsgcjEwIHVpbnQ2NDsgcjkgdWludDY0OyByOCB1aW50NjQ7IHJheCB1aW50
NjQ7IHJjeCB1aW50NjQ7IHJkeCB1aW50NjQ7IHJzaSB1aW50NjQ7IHJkaSB1aW50NjQ7IG9yaWdf
cmF4IHVpbnQ2NDsgcmlwIHVpbnQ2NDsgY3MgdWludDY0OyBlZmxhZ3MgdWludDY0OyByc3AgdWlu
dDY0OyBzcyB1aW50NjQ7IGZzX2Jhc2UgdWludDY0OyBnc19iYXNlIHVpbnQ2NDsgZHMgdWludDY0
OyBlcyB1aW50NjQ7IGZzIHVpbnQ2NDsgZ3MgdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3VzZXJf
cmVnc19zdHJ1Y3QgPSAyMTYKK3R5cGUgX3VzZXIgc3RydWN0IHsgcmVncyBfdXNlcl9yZWdzX3N0
cnVjdDsgdV9mcHZhbGlkIGludDMyOyBpMzg3IF91c2VyX2ZwcmVnc19zdHJ1Y3Q7IHVfdHNpemUg
dWludDY0OyB1X2RzaXplIHVpbnQ2NDsgdV9zc2l6ZSB1aW50NjQ7IHN0YXJ0X2NvZGUgdWludDY0
OyBzdGFydF9zdGFjayB1aW50NjQ7IHNpZ25hbCBpbnQ2NDsgcmVzZXJ2ZWQgaW50MzI7IEdvZHVt
cF8wX3BhZCBbNF1ieXRlOyB1X2FyMCAqX3VzZXJfcmVnc19zdHJ1Y3Q7IHVfZnBzdGF0ZSAqX3Vz
ZXJfZnByZWdzX3N0cnVjdDsgbWFnaWMgdWludDY0OyB1X2NvbW0gWzMxKzFdaW50ODsgdV9kZWJ1
Z3JlZyBbNysxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl91c2VyID0gOTEyCit0eXBlIF91dHNu
YW1lIHN0cnVjdCB7IHN5c25hbWUgWzY0KzFdaW50ODsgbm9kZW5hbWUgWzY0KzFdaW50ODsgcmVs
ZWFzZSBbNjQrMV1pbnQ4OyB2ZXJzaW9uIFs2NCsxXWludDg7IG1hY2hpbmUgWzY0KzFdaW50ODsg
ZG9tYWlubmFtZSBbNjQrMV1pbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3V0c25hbWUgPSAzOTAKK3R5
cGUgX3RpbWV4IHN0cnVjdCB7IG1vZGVzIHVpbnQzMjsgb2Zmc2V0IGludDY0OyBmcmVxIGludDY0
OyBtYXhlcnJvciBpbnQ2NDsgZXN0ZXJyb3IgaW50NjQ7IHN0YXR1cyBpbnQzMjsgY29uc3RhbnQg
aW50NjQ7IHByZWNpc2lvbiBpbnQ2NDsgdG9sZXJhbmNlIGludDY0OyB0aW1lIHRpbWV2YWw7IHRp
Y2sgaW50NjQ7IHBwc2ZyZXEgaW50NjQ7IGppdHRlciBpbnQ2NDsgc2hpZnQgaW50MzI7IHN0YWJp
bCBpbnQ2NDsgaml0Y250IGludDY0OyBjYWxjbnQgaW50NjQ7IGVycmNudCBpbnQ2NDsgc3RiY250
IGludDY0OyB0YWkgaW50MzI7IEdvZHVtcF8wIGludDMyOyBHb2R1bXBfMSBpbnQzMjsgR29kdW1w
XzIgaW50MzI7IEdvZHVtcF8zIGludDMyOyBHb2R1bXBfNCBpbnQzMjsgR29kdW1wXzUgaW50MzI7
IEdvZHVtcF82IGludDMyOyBHb2R1bXBfNyBpbnQzMjsgR29kdW1wXzggaW50MzI7IEdvZHVtcF85
IGludDMyOyBHb2R1bXBfMTAgaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGltZXggPSAyMDgKK3R5
cGUgX3RtIHN0cnVjdCB7IHRtX3NlYyBpbnQzMjsgdG1fbWluIGludDMyOyB0bV9ob3VyIGludDMy
OyB0bV9tZGF5IGludDMyOyB0bV9tb24gaW50MzI7IHRtX3llYXIgaW50MzI7IHRtX3dkYXkgaW50
MzI7IHRtX3lkYXkgaW50MzI7IHRtX2lzZHN0IGludDMyOyB0bV9nbXRvZmYgaW50NjQ7IHRtX3pv
bmUgKmludDg7IH0KK2NvbnN0IF9zaXplb2ZfdG0gPSA1NgordHlwZSBfaXRpbWVyc3BlYyBzdHJ1
Y3QgeyBpdF9pbnRlcnZhbCB0aW1lc3BlYzsgaXRfdmFsdWUgdGltZXNwZWM7IH0KK2NvbnN0IF9z
aXplb2ZfaXRpbWVyc3BlYyA9IDMyCit0eXBlIF9ycGNlbnQgc3RydWN0IHsgcl9uYW1lICppbnQ4
OyByX2FsaWFzZXMgKippbnQ4OyByX251bWJlciBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7
IH0KK2NvbnN0IF9zaXplb2ZfcnBjZW50ID0gMjQKK3R5cGUgX25ldGVudCBzdHJ1Y3QgeyBuX25h
bWUgKmludDg7IG5fYWxpYXNlcyAqKmludDg7IG5fYWRkcnR5cGUgaW50MzI7IG5fbmV0IHVpbnQz
MjsgfQorY29uc3QgX3NpemVvZl9uZXRlbnQgPSAyNAordHlwZSBfaG9zdGVudCBzdHJ1Y3QgeyBo
X25hbWUgKmludDg7IGhfYWxpYXNlcyAqKmludDg7IGhfYWRkcnR5cGUgaW50MzI7IGhfbGVuZ3Ro
IGludDMyOyBoX2FkZHJfbGlzdCAqKmludDg7IH0KK2NvbnN0IF9zaXplb2ZfaG9zdGVudCA9IDMy
Cit0eXBlIF9zZXJ2ZW50IHN0cnVjdCB7IHNfbmFtZSAqaW50ODsgc19hbGlhc2VzICoqaW50ODsg
c19wb3J0IGludDMyOyBzX3Byb3RvICppbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3NlcnZlbnQgPSAz
MgordHlwZSBfcHJvdG9lbnQgc3RydWN0IHsgcF9uYW1lICppbnQ4OyBwX2FsaWFzZXMgKippbnQ4
OyBwX3Byb3RvIGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9w
cm90b2VudCA9IDI0Cit0eXBlIF9hZGRyaW5mbyBzdHJ1Y3QgeyBhaV9mbGFncyBpbnQzMjsgYWlf
ZmFtaWx5IGludDMyOyBhaV9zb2NrdHlwZSBpbnQzMjsgYWlfcHJvdG9jb2wgaW50MzI7IGFpX2Fk
ZHJsZW4gdWludDMyOyBhaV9hZGRyICpfc29ja2FkZHI7IGFpX2Nhbm9ubmFtZSAqaW50ODsgYWlf
bmV4dCAqX2FkZHJpbmZvOyB9Citjb25zdCBfc2l6ZW9mX2FkZHJpbmZvID0gNDgKK3R5cGUgX2dh
aWNiIHN0cnVjdCB7IGFyX25hbWUgKmludDg7IGFyX3NlcnZpY2UgKmludDg7IGFyX3JlcXVlc3Qg
Kl9hZGRyaW5mbzsgYXJfcmVzdWx0ICpfYWRkcmluZm87IF9fcmV0dXJuIGludDMyOyBfX2dsaWJj
X3Jlc2VydmVkIFs0KzFdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfZ2FpY2IgPSA1NgordHlwZSBf
cGFzc3dkIHN0cnVjdCB7IHB3X25hbWUgKmludDg7IHB3X3Bhc3N3ZCAqaW50ODsgcHdfdWlkIHVp
bnQzMjsgcHdfZ2lkIHVpbnQzMjsgcHdfZ2Vjb3MgKmludDg7IHB3X2RpciAqaW50ODsgcHdfc2hl
bGwgKmludDg7IH0KK2NvbnN0IF9zaXplb2ZfcGFzc3dkID0gNDgKK3R5cGUgX0ZJTEUgc3RydWN0
IHsgfQordHlwZSBfZ3JvdXAgc3RydWN0IHsgZ3JfbmFtZSAqaW50ODsgZ3JfcGFzc3dkICppbnQ4
OyBncl9naWQgdWludDMyOyBncl9tZW0gKippbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2dyb3VwID0g
MzIKK3R5cGUgX3NvY2tfZmlsdGVyIHN0cnVjdCB7IGNvZGUgdWludDE2OyBqdCB1aW50ODsgamYg
dWludDg7IGsgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3NvY2tfZmlsdGVyID0gOAordHlwZSBf
c29ja19mcHJvZyBzdHJ1Y3QgeyBsZW4gdWludDE2OyBmaWx0ZXIgKl9zb2NrX2ZpbHRlcjsgfQor
Y29uc3QgX3NpemVvZl9zb2NrX2Zwcm9nID0gMTYKK3R5cGUgX3N5c2luZm8gc3RydWN0IHsgdXB0
aW1lIGludDY0OyBsb2FkcyBbMisxXXVpbnQ2NDsgdG90YWxyYW0gdWludDY0OyBmcmVlcmFtIHVp
bnQ2NDsgc2hhcmVkcmFtIHVpbnQ2NDsgYnVmZmVycmFtIHVpbnQ2NDsgdG90YWxzd2FwIHVpbnQ2
NDsgZnJlZXN3YXAgdWludDY0OyBwcm9jcyB1aW50MTY7IHBhZCB1aW50MTY7IHRvdGFsaGlnaCB1
aW50NjQ7IGZyZWVoaWdoIHVpbnQ2NDsgbWVtX3VuaXQgdWludDMyOyBfZiBbMF1pbnQ4OyBHb2R1
bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9zeXNpbmZvID0gMTEyCit0eXBlIF9f
X2tlcm5lbF9zYV9mYW1pbHlfdCB1aW50MTYKK3R5cGUgX19fa2VybmVsX3NvY2thZGRyX3N0b3Jh
Z2Ugc3RydWN0IHsgc3NfZmFtaWx5IHVpbnQxNjsgX19kYXRhIFsxMjUrMV1pbnQ4OyBHb2R1bXBf
MF9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9fX2tlcm5lbF9zb2NrYWRkcl9zdG9y
YWdlID0gMTI4Cit0eXBlIF9zb2NrYWRkcl9ubCBzdHJ1Y3QgeyBubF9mYW1pbHkgdWludDE2OyBu
bF9wYWQgdWludDE2OyBubF9waWQgdWludDMyOyBubF9ncm91cHMgdWludDMyOyB9Citjb25zdCBf
c2l6ZW9mX3NvY2thZGRyX25sID0gMTIKK3R5cGUgX25sbXNnaGRyIHN0cnVjdCB7IG5sbXNnX2xl
biB1aW50MzI7IG5sbXNnX3R5cGUgdWludDE2OyBubG1zZ19mbGFncyB1aW50MTY7IG5sbXNnX3Nl
cSB1aW50MzI7IG5sbXNnX3BpZCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zfbmxtc2doZHIgPSAx
NgordHlwZSBfbmxtc2dlcnIgc3RydWN0IHsgZXJyb3IgaW50MzI7IG1zZyBfbmxtc2doZHI7IH0K
K2NvbnN0IF9zaXplb2Zfbmxtc2dlcnIgPSAyMAordHlwZSBfbmxfcGt0aW5mbyBzdHJ1Y3QgeyBn
cm91cCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmxfcGt0aW5mbyA9IDQKK3R5cGUgX25sX21t
YXBfcmVxIHN0cnVjdCB7IG5tX2Jsb2NrX3NpemUgdWludDMyOyBubV9ibG9ja19uciB1aW50MzI7
IG5tX2ZyYW1lX3NpemUgdWludDMyOyBubV9mcmFtZV9uciB1aW50MzI7IH0KK2NvbnN0IF9zaXpl
b2ZfbmxfbW1hcF9yZXEgPSAxNgordHlwZSBfbmxfbW1hcF9oZHIgc3RydWN0IHsgbm1fc3RhdHVz
IHVpbnQzMjsgbm1fbGVuIHVpbnQzMjsgbm1fZ3JvdXAgdWludDMyOyBubV9waWQgdWludDMyOyBu
bV91aWQgdWludDMyOyBubV9naWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25sX21tYXBfaGRy
ID0gMjQKK3R5cGUgX25sYXR0ciBzdHJ1Y3QgeyBubGFfbGVuIHVpbnQxNjsgbmxhX3R5cGUgdWlu
dDE2OyB9Citjb25zdCBfc2l6ZW9mX25sYXR0ciA9IDQKK3R5cGUgX25sYV9iaXRmaWVsZDMyIHN0
cnVjdCB7IHZhbHVlIHVpbnQzMjsgc2VsZWN0b3IgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25s
YV9iaXRmaWVsZDMyID0gOAordHlwZSBfaWZhZGRybXNnIHN0cnVjdCB7IGlmYV9mYW1pbHkgdWlu
dDg7IGlmYV9wcmVmaXhsZW4gdWludDg7IGlmYV9mbGFncyB1aW50ODsgaWZhX3Njb3BlIHVpbnQ4
OyBpZmFfaW5kZXggdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmYWRkcm1zZyA9IDgKK3R5cGUg
X2lmYV9jYWNoZWluZm8gc3RydWN0IHsgaWZhX3ByZWZlcmVkIHVpbnQzMjsgaWZhX3ZhbGlkIHVp
bnQzMjsgY3N0YW1wIHVpbnQzMjsgdHN0YW1wIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmFf
Y2FjaGVpbmZvID0gMTYKK3R5cGUgX3R1bl9waSBzdHJ1Y3QgeyBmbGFncyB1aW50MTY7IHByb3Rv
IHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl90dW5fcGkgPSA0Cit0eXBlIF90dW5fZmlsdGVyIHN0
cnVjdCB7IGZsYWdzIHVpbnQxNjsgY291bnQgdWludDE2OyBhZGRyIFswXVs1KzFddWludDg7IH0K
K2NvbnN0IF9zaXplb2ZfdHVuX2ZpbHRlciA9IDQKK3R5cGUgX3B0cmFjZV9wZWVrc2lnaW5mb19h
cmdzIHN0cnVjdCB7IG9mZiB1aW50NjQ7IGZsYWdzIHVpbnQzMjsgbnIgaW50MzI7IH0KK2NvbnN0
IF9zaXplb2ZfcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3MgPSAxNgordHlwZSBfc2VjY29tcF9tZXRh
ZGF0YSBzdHJ1Y3QgeyBmaWx0ZXJfb2ZmIHVpbnQ2NDsgZmxhZ3MgdWludDY0OyB9Citjb25zdCBf
c2l6ZW9mX3NlY2NvbXBfbWV0YWRhdGEgPSAxNgordHlwZSBfcHRfcmVncyBzdHJ1Y3QgeyByMTUg
dWludDY0OyByMTQgdWludDY0OyByMTMgdWludDY0OyByMTIgdWludDY0OyByYnAgdWludDY0OyBy
YnggdWludDY0OyByMTEgdWludDY0OyByMTAgdWludDY0OyByOSB1aW50NjQ7IHI4IHVpbnQ2NDsg
cmF4IHVpbnQ2NDsgcmN4IHVpbnQ2NDsgcmR4IHVpbnQ2NDsgcnNpIHVpbnQ2NDsgcmRpIHVpbnQ2
NDsgb3JpZ19yYXggdWludDY0OyByaXAgdWludDY0OyBjcyB1aW50NjQ7IGVmbGFncyB1aW50NjQ7
IHJzcCB1aW50NjQ7IHNzIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9wdF9yZWdzID0gMTY4Cit0
eXBlIF9ydG5sX2xpbmtfc3RhdHMgc3RydWN0IHsgcnhfcGFja2V0cyB1aW50MzI7IHR4X3BhY2tl
dHMgdWludDMyOyByeF9ieXRlcyB1aW50MzI7IHR4X2J5dGVzIHVpbnQzMjsgcnhfZXJyb3JzIHVp
bnQzMjsgdHhfZXJyb3JzIHVpbnQzMjsgcnhfZHJvcHBlZCB1aW50MzI7IHR4X2Ryb3BwZWQgdWlu
dDMyOyBtdWx0aWNhc3QgdWludDMyOyBjb2xsaXNpb25zIHVpbnQzMjsgcnhfbGVuZ3RoX2Vycm9y
cyB1aW50MzI7IHJ4X292ZXJfZXJyb3JzIHVpbnQzMjsgcnhfY3JjX2Vycm9ycyB1aW50MzI7IHJ4
X2ZyYW1lX2Vycm9ycyB1aW50MzI7IHJ4X2ZpZm9fZXJyb3JzIHVpbnQzMjsgcnhfbWlzc2VkX2Vy
cm9ycyB1aW50MzI7IHR4X2Fib3J0ZWRfZXJyb3JzIHVpbnQzMjsgdHhfY2Fycmllcl9lcnJvcnMg
dWludDMyOyB0eF9maWZvX2Vycm9ycyB1aW50MzI7IHR4X2hlYXJ0YmVhdF9lcnJvcnMgdWludDMy
OyB0eF93aW5kb3dfZXJyb3JzIHVpbnQzMjsgcnhfY29tcHJlc3NlZCB1aW50MzI7IHR4X2NvbXBy
ZXNzZWQgdWludDMyOyByeF9ub2hhbmRsZXIgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3J0bmxf
bGlua19zdGF0cyA9IDk2Cit0eXBlIF9ydG5sX2xpbmtfc3RhdHM2NCBzdHJ1Y3QgeyByeF9wYWNr
ZXRzIHVpbnQ2NDsgdHhfcGFja2V0cyB1aW50NjQ7IHJ4X2J5dGVzIHVpbnQ2NDsgdHhfYnl0ZXMg
dWludDY0OyByeF9lcnJvcnMgdWludDY0OyB0eF9lcnJvcnMgdWludDY0OyByeF9kcm9wcGVkIHVp
bnQ2NDsgdHhfZHJvcHBlZCB1aW50NjQ7IG11bHRpY2FzdCB1aW50NjQ7IGNvbGxpc2lvbnMgdWlu
dDY0OyByeF9sZW5ndGhfZXJyb3JzIHVpbnQ2NDsgcnhfb3Zlcl9lcnJvcnMgdWludDY0OyByeF9j
cmNfZXJyb3JzIHVpbnQ2NDsgcnhfZnJhbWVfZXJyb3JzIHVpbnQ2NDsgcnhfZmlmb19lcnJvcnMg
dWludDY0OyByeF9taXNzZWRfZXJyb3JzIHVpbnQ2NDsgdHhfYWJvcnRlZF9lcnJvcnMgdWludDY0
OyB0eF9jYXJyaWVyX2Vycm9ycyB1aW50NjQ7IHR4X2ZpZm9fZXJyb3JzIHVpbnQ2NDsgdHhfaGVh
cnRiZWF0X2Vycm9ycyB1aW50NjQ7IHR4X3dpbmRvd19lcnJvcnMgdWludDY0OyByeF9jb21wcmVz
c2VkIHVpbnQ2NDsgdHhfY29tcHJlc3NlZCB1aW50NjQ7IHJ4X25vaGFuZGxlciB1aW50NjQ7IH0K
K2NvbnN0IF9zaXplb2ZfcnRubF9saW5rX3N0YXRzNjQgPSAxOTIKK3R5cGUgX3J0bmxfbGlua19p
Zm1hcCBzdHJ1Y3QgeyBtZW1fc3RhcnQgdWludDY0OyBtZW1fZW5kIHVpbnQ2NDsgYmFzZV9hZGRy
IHVpbnQ2NDsgaXJxIHVpbnQxNjsgZG1hIHVpbnQ4OyBwb3J0IHVpbnQ4OyBHb2R1bXBfMF9wYWQg
WzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9ydG5sX2xpbmtfaWZtYXAgPSAzMgordHlwZSBfaWZs
YV9icmlkZ2VfaWQgc3RydWN0IHsgcHJpbyBbMSsxXXVpbnQ4OyBhZGRyIFs1KzFddWludDg7IH0K
K2NvbnN0IF9zaXplb2ZfaWZsYV9icmlkZ2VfaWQgPSA4Cit0eXBlIF9pZmxhX2NhY2hlaW5mbyBz
dHJ1Y3QgeyBtYXhfcmVhc21fbGVuIHVpbnQzMjsgdHN0YW1wIHVpbnQzMjsgcmVhY2hhYmxlX3Rp
bWUgdWludDMyOyByZXRyYW5zX3RpbWUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfY2Fj
aGVpbmZvID0gMTYKK3R5cGUgX2lmbGFfdmxhbl9mbGFncyBzdHJ1Y3QgeyBmbGFncyB1aW50MzI7
IG1hc2sgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmxhbl9mbGFncyA9IDgKK3R5cGUg
X2lmbGFfdmxhbl9xb3NfbWFwcGluZyBzdHJ1Y3QgeyBmcm9tIHVpbnQzMjsgdG8gdWludDMyOyB9
Citjb25zdCBfc2l6ZW9mX2lmbGFfdmxhbl9xb3NfbWFwcGluZyA9IDgKK3R5cGUgX2lmbGFfdnhs
YW5fcG9ydF9yYW5nZSBzdHJ1Y3QgeyBsb3cgdWludDE2OyBoaWdoIHVpbnQxNjsgfQorY29uc3Qg
X3NpemVvZl9pZmxhX3Z4bGFuX3BvcnRfcmFuZ2UgPSA0Cit0eXBlIF9pZmxhX3ZmX21hYyBzdHJ1
Y3QgeyB2ZiB1aW50MzI7IG1hYyBbMzErMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9pZmxhX3Zm
X21hYyA9IDM2Cit0eXBlIF9pZmxhX3ZmX3ZsYW4gc3RydWN0IHsgdmYgdWludDMyOyB2bGFuIHVp
bnQzMjsgcW9zIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3ZsYW4gPSAxMgordHlw
ZSBfaWZsYV92Zl92bGFuX2luZm8gc3RydWN0IHsgdmYgdWludDMyOyB2bGFuIHVpbnQzMjsgcW9z
IHVpbnQzMjsgdmxhbl9wcm90byB1aW50MTY7IEdvZHVtcF8wX3BhZCBbMl1ieXRlOyB9Citjb25z
dCBfc2l6ZW9mX2lmbGFfdmZfdmxhbl9pbmZvID0gMTYKK3R5cGUgX2lmbGFfdmZfdHhfcmF0ZSBz
dHJ1Y3QgeyB2ZiB1aW50MzI7IHJhdGUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZf
dHhfcmF0ZSA9IDgKK3R5cGUgX2lmbGFfdmZfcmF0ZSBzdHJ1Y3QgeyB2ZiB1aW50MzI7IG1pbl90
eF9yYXRlIHVpbnQzMjsgbWF4X3R4X3JhdGUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFf
dmZfcmF0ZSA9IDEyCit0eXBlIF9pZmxhX3ZmX3Nwb29mY2hrIHN0cnVjdCB7IHZmIHVpbnQzMjsg
c2V0dGluZyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9zcG9vZmNoayA9IDgKK3R5
cGUgX2lmbGFfdmZfZ3VpZCBzdHJ1Y3QgeyB2ZiB1aW50MzI7IGd1aWQgdWludDY0OyB9Citjb25z
dCBfc2l6ZW9mX2lmbGFfdmZfZ3VpZCA9IDE2Cit0eXBlIF9pZmxhX3ZmX2xpbmtfc3RhdGUgc3Ry
dWN0IHsgdmYgdWludDMyOyBsaW5rX3N0YXRlIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxh
X3ZmX2xpbmtfc3RhdGUgPSA4Cit0eXBlIF9pZmxhX3ZmX3Jzc19xdWVyeV9lbiBzdHJ1Y3QgeyB2
ZiB1aW50MzI7IHNldHRpbmcgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZfcnNzX3F1
ZXJ5X2VuID0gOAordHlwZSBfaWZsYV92Zl90cnVzdCBzdHJ1Y3QgeyB2ZiB1aW50MzI7IHNldHRp
bmcgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZfdHJ1c3QgPSA4Cit0eXBlIF9pZmxh
X3BvcnRfdnNpIHN0cnVjdCB7IHZzaV9tZ3JfaWQgdWludDg7IHZzaV90eXBlX2lkIFsyKzFddWlu
dDg7IHZzaV90eXBlX3ZlcnNpb24gdWludDg7IHBhZCBbMisxXXVpbnQ4OyB9Citjb25zdCBfc2l6
ZW9mX2lmbGFfcG9ydF92c2kgPSA4Cit0eXBlIF9pZl9zdGF0c19tc2cgc3RydWN0IHsgZmFtaWx5
IHVpbnQ4OyBwYWQxIHVpbnQ4OyBwYWQyIHVpbnQxNjsgaWZpbmRleCB1aW50MzI7IGZpbHRlcl9t
YXNrIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZl9zdGF0c19tc2cgPSAxMgordHlwZSBfaWZs
YV9ybW5ldF9mbGFncyBzdHJ1Y3QgeyBmbGFncyB1aW50MzI7IG1hc2sgdWludDMyOyB9Citjb25z
dCBfc2l6ZW9mX2lmbGFfcm1uZXRfZmxhZ3MgPSA4Cit0eXBlIF9uZG1zZyBzdHJ1Y3QgeyBuZG1f
ZmFtaWx5IHVpbnQ4OyBuZG1fcGFkMSB1aW50ODsgbmRtX3BhZDIgdWludDE2OyBuZG1faWZpbmRl
eCBpbnQzMjsgbmRtX3N0YXRlIHVpbnQxNjsgbmRtX2ZsYWdzIHVpbnQ4OyBuZG1fdHlwZSB1aW50
ODsgfQorY29uc3QgX3NpemVvZl9uZG1zZyA9IDEyCit0eXBlIF9uZGFfY2FjaGVpbmZvIHN0cnVj
dCB7IG5kbV9jb25maXJtZWQgdWludDMyOyBuZG1fdXNlZCB1aW50MzI7IG5kbV91cGRhdGVkIHVp
bnQzMjsgbmRtX3JlZmNudCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmRhX2NhY2hlaW5mbyA9
IDE2Cit0eXBlIF9uZHRfc3RhdHMgc3RydWN0IHsgbmR0c19hbGxvY3MgdWludDY0OyBuZHRzX2Rl
c3Ryb3lzIHVpbnQ2NDsgbmR0c19oYXNoX2dyb3dzIHVpbnQ2NDsgbmR0c19yZXNfZmFpbGVkIHVp
bnQ2NDsgbmR0c19sb29rdXBzIHVpbnQ2NDsgbmR0c19oaXRzIHVpbnQ2NDsgbmR0c19yY3ZfcHJv
YmVzX21jYXN0IHVpbnQ2NDsgbmR0c19yY3ZfcHJvYmVzX3VjYXN0IHVpbnQ2NDsgbmR0c19wZXJp
b2RpY19nY19ydW5zIHVpbnQ2NDsgbmR0c19mb3JjZWRfZ2NfcnVucyB1aW50NjQ7IG5kdHNfdGFi
bGVfZnVsbHMgdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX25kdF9zdGF0cyA9IDg4Cit0eXBlIF9u
ZHRtc2cgc3RydWN0IHsgbmR0bV9mYW1pbHkgdWludDg7IG5kdG1fcGFkMSB1aW50ODsgbmR0bV9w
YWQyIHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl9uZHRtc2cgPSA0Cit0eXBlIF9uZHRfY29uZmln
IHN0cnVjdCB7IG5kdGNfa2V5X2xlbiB1aW50MTY7IG5kdGNfZW50cnlfc2l6ZSB1aW50MTY7IG5k
dGNfZW50cmllcyB1aW50MzI7IG5kdGNfbGFzdF9mbHVzaCB1aW50MzI7IG5kdGNfbGFzdF9yYW5k
IHVpbnQzMjsgbmR0Y19oYXNoX3JuZCB1aW50MzI7IG5kdGNfaGFzaF9tYXNrIHVpbnQzMjsgbmR0
Y19oYXNoX2NoYWluX2djIHVpbnQzMjsgbmR0Y19wcm94eV9xbGVuIHVpbnQzMjsgfQorY29uc3Qg
X3NpemVvZl9uZHRfY29uZmlnID0gMzIKK3R5cGUgX3J0YXR0ciBzdHJ1Y3QgeyBydGFfbGVuIHVp
bnQxNjsgcnRhX3R5cGUgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX3J0YXR0ciA9IDQKK3R5cGUg
X3J0bXNnIHN0cnVjdCB7IHJ0bV9mYW1pbHkgdWludDg7IHJ0bV9kc3RfbGVuIHVpbnQ4OyBydG1f
c3JjX2xlbiB1aW50ODsgcnRtX3RvcyB1aW50ODsgcnRtX3RhYmxlIHVpbnQ4OyBydG1fcHJvdG9j
b2wgdWludDg7IHJ0bV9zY29wZSB1aW50ODsgcnRtX3R5cGUgdWludDg7IHJ0bV9mbGFncyB1aW50
MzI7IH0KK2NvbnN0IF9zaXplb2ZfcnRtc2cgPSAxMgordHlwZSBfcnRuZXh0aG9wIHN0cnVjdCB7
IHJ0bmhfbGVuIHVpbnQxNjsgcnRuaF9mbGFncyB1aW50ODsgcnRuaF9ob3BzIHVpbnQ4OyBydG5o
X2lmaW5kZXggaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcnRuZXh0aG9wID0gOAordHlwZSBfcnR2
aWEgc3RydWN0IHsgcnR2aWFfZmFtaWx5IHVpbnQxNjsgcnR2aWFfYWRkciBbMF11aW50ODsgfQor
Y29uc3QgX3NpemVvZl9ydHZpYSA9IDIKK3R5cGUgX3J0YV9jYWNoZWluZm8gc3RydWN0IHsgcnRh
X2NsbnRyZWYgdWludDMyOyBydGFfbGFzdHVzZSB1aW50MzI7IHJ0YV9leHBpcmVzIGludDMyOyBy
dGFfZXJyb3IgdWludDMyOyBydGFfdXNlZCB1aW50MzI7IHJ0YV9pZCB1aW50MzI7IHJ0YV90cyB1
aW50MzI7IHJ0YV90c2FnZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcnRhX2NhY2hlaW5mbyA9
IDMyCit0eXBlIF9ydGFfc2Vzc2lvbiBzdHJ1Y3QgeyBwcm90byB1aW50ODsgcGFkMSB1aW50ODsg
cGFkMiB1aW50MTY7IHUgc3RydWN0IHsgcG9ydHMgc3RydWN0IHsgc3BvcnQgdWludDE2OyBkcG9y
dCB1aW50MTY7IH07IEdvZHVtcF8wX2FsaWduIFswXWludDMyOyB9OyB9Citjb25zdCBfc2l6ZW9m
X3J0YV9zZXNzaW9uID0gOAordHlwZSBfcnRhX21mY19zdGF0cyBzdHJ1Y3QgeyBtZmNzX3BhY2tl
dHMgdWludDY0OyBtZmNzX2J5dGVzIHVpbnQ2NDsgbWZjc193cm9uZ19pZiB1aW50NjQ7IH0KK2Nv
bnN0IF9zaXplb2ZfcnRhX21mY19zdGF0cyA9IDI0Cit0eXBlIF9ydGdlbm1zZyBzdHJ1Y3QgeyBy
dGdlbl9mYW1pbHkgdWludDg7IH0KK2NvbnN0IF9zaXplb2ZfcnRnZW5tc2cgPSAxCit0eXBlIF9p
ZmluZm9tc2cgc3RydWN0IHsgaWZpX2ZhbWlseSB1aW50ODsgX19pZmlfcGFkIHVpbnQ4OyBpZmlf
dHlwZSB1aW50MTY7IGlmaV9pbmRleCBpbnQzMjsgaWZpX2ZsYWdzIHVpbnQzMjsgaWZpX2NoYW5n
ZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZpbmZvbXNnID0gMTYKK3R5cGUgX3ByZWZpeG1z
ZyBzdHJ1Y3QgeyBwcmVmaXhfZmFtaWx5IHVpbnQ4OyBwcmVmaXhfcGFkMSB1aW50ODsgcHJlZml4
X3BhZDIgdWludDE2OyBwcmVmaXhfaWZpbmRleCBpbnQzMjsgcHJlZml4X3R5cGUgdWludDg7IHBy
ZWZpeF9sZW4gdWludDg7IHByZWZpeF9mbGFncyB1aW50ODsgcHJlZml4X3BhZDMgdWludDg7IH0K
K2NvbnN0IF9zaXplb2ZfcHJlZml4bXNnID0gMTIKK3R5cGUgX3ByZWZpeF9jYWNoZWluZm8gc3Ry
dWN0IHsgcHJlZmVycmVkX3RpbWUgdWludDMyOyB2YWxpZF90aW1lIHVpbnQzMjsgfQorY29uc3Qg
X3NpemVvZl9wcmVmaXhfY2FjaGVpbmZvID0gOAordHlwZSBfdGNtc2cgc3RydWN0IHsgdGNtX2Zh
bWlseSB1aW50ODsgdGNtX19wYWQxIHVpbnQ4OyB0Y21fX3BhZDIgdWludDE2OyB0Y21faWZpbmRl
eCBpbnQzMjsgdGNtX2hhbmRsZSB1aW50MzI7IHRjbV9wYXJlbnQgdWludDMyOyB0Y21faW5mbyB1
aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGNtc2cgPSAyMAordHlwZSBfbmR1c2Vyb3B0bXNnIHN0
cnVjdCB7IG5kdXNlcm9wdF9mYW1pbHkgdWludDg7IG5kdXNlcm9wdF9wYWQxIHVpbnQ4OyBuZHVz
ZXJvcHRfb3B0c19sZW4gdWludDE2OyBuZHVzZXJvcHRfaWZpbmRleCBpbnQzMjsgbmR1c2Vyb3B0
X2ljbXBfdHlwZSB1aW50ODsgbmR1c2Vyb3B0X2ljbXBfY29kZSB1aW50ODsgbmR1c2Vyb3B0X3Bh
ZDIgdWludDE2OyBuZHVzZXJvcHRfcGFkMyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmR1c2Vy
b3B0bXNnID0gMTYKK3R5cGUgX3RjYW1zZyBzdHJ1Y3QgeyB0Y2FfZmFtaWx5IHVpbnQ4OyB0Y2Ff
X3BhZDEgdWludDg7IHRjYV9fcGFkMiB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfdGNhbXNnID0g
NAordHlwZSBfaWZfbmFtZWluZGV4IHN0cnVjdCB7IGlmX2luZGV4IHVpbnQzMjsgaWZfbmFtZSAq
aW50ODsgfQorY29uc3QgX3NpemVvZl9pZl9uYW1laW5kZXggPSAxNgordHlwZSBfaWZhZGRyIHN0
cnVjdCB7IGlmYV9hZGRyIF9zb2NrYWRkcjsgaWZhX2lmdSBzdHJ1Y3QgeyBpZnVfYnJvYWRhZGRy
IF9zb2NrYWRkcjsgfTsgaWZhX2lmcCAqX2lmYWNlOyBpZmFfbmV4dCAqX2lmYWRkcjsgfQorY29u
c3QgX3NpemVvZl9pZmFkZHIgPSA0OAordHlwZSBfaWZtYXAgc3RydWN0IHsgbWVtX3N0YXJ0IHVp
bnQ2NDsgbWVtX2VuZCB1aW50NjQ7IGJhc2VfYWRkciB1aW50MTY7IGlycSB1aW50ODsgZG1hIHVp
bnQ4OyBwb3J0IHVpbnQ4OyBHb2R1bXBfMF9wYWQgWzNdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9p
Zm1hcCA9IDI0Cit0eXBlIF9pZnJlcSBzdHJ1Y3QgeyBpZnJfaWZybiBzdHJ1Y3QgeyBpZnJuX25h
bWUgWzE1KzFdaW50ODsgfTsgaWZyX2lmcnUgc3RydWN0IHsgaWZydV9hZGRyIF9zb2NrYWRkcjsg
R29kdW1wXzBfcGFkIFs4XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0OyB9OyB9Citjb25z
dCBfc2l6ZW9mX2lmcmVxID0gNDAKK3R5cGUgX2lmY29uZiBzdHJ1Y3QgeyBpZmNfbGVuIGludDMy
OyBpZmNfaWZjdSBzdHJ1Y3QgeyBpZmN1X2J1ZiBfX19jYWRkcl90OyB9OyB9Citjb25zdCBfc2l6
ZW9mX2lmY29uZiA9IDE2Cit0eXBlIF9ydGVudHJ5IHN0cnVjdCB7IHJ0X3BhZDEgdWludDY0OyBy
dF9kc3QgX3NvY2thZGRyOyBydF9nYXRld2F5IF9zb2NrYWRkcjsgcnRfZ2VubWFzayBfc29ja2Fk
ZHI7IHJ0X2ZsYWdzIHVpbnQxNjsgcnRfcGFkMiBpbnQxNjsgcnRfcGFkMyB1aW50NjQ7IHJ0X3Rv
cyB1aW50ODsgcnRfY2xhc3MgdWludDg7IHJ0X3BhZDQgWzIrMV1pbnQxNjsgcnRfbWV0cmljIGlu
dDE2OyBydF9kZXYgKmludDg7IHJ0X210dSB1aW50NjQ7IHJ0X3dpbmRvdyB1aW50NjQ7IHJ0X2ly
dHQgdWludDE2OyBHb2R1bXBfMF9wYWQgWzZdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9ydGVudHJ5
ID0gMTIwCitjb25zdCBfc2l6ZW9mX2luNl9ydG1zZyA9IDgwCit0eXBlIF9zb2NrYWRkcl9sbCBz
dHJ1Y3QgeyBzbGxfZmFtaWx5IHVpbnQxNjsgc2xsX3Byb3RvY29sIHVpbnQxNjsgc2xsX2lmaW5k
ZXggaW50MzI7IHNsbF9oYXR5cGUgdWludDE2OyBzbGxfcGt0dHlwZSB1aW50ODsgc2xsX2hhbGVu
IHVpbnQ4OyBzbGxfYWRkciBbNysxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3NvY2thZGRyX2xs
ID0gMjAKK3R5cGUgX3BhY2tldF9tcmVxIHN0cnVjdCB7IG1yX2lmaW5kZXggaW50MzI7IG1yX3R5
cGUgdWludDE2OyBtcl9hbGVuIHVpbnQxNjsgbXJfYWRkcmVzcyBbNysxXXVpbnQ4OyB9Citjb25z
dCBfc2l6ZW9mX3BhY2tldF9tcmVxID0gMTYKK3R5cGUgX3N0YXRmcyBzdHJ1Y3QgeyBmX3R5cGUg
aW50NjQ7IGZfYnNpemUgaW50NjQ7IGZfYmxvY2tzIHVpbnQ2NDsgZl9iZnJlZSB1aW50NjQ7IGZf
YmF2YWlsIHVpbnQ2NDsgZl9maWxlcyB1aW50NjQ7IGZfZmZyZWUgdWludDY0OyBmX2ZzaWQgX19f
ZnNpZF90OyBmX25hbWVsZW4gaW50NjQ7IGZfZnJzaXplIGludDY0OyBmX2ZsYWdzIGludDY0OyBm
X3NwYXJlIFszKzFdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2Zfc3RhdGZzID0gMTIwCit0eXBlIF9z
dGF0ZnM2NCBzdHJ1Y3QgeyBmX3R5cGUgaW50NjQ7IGZfYnNpemUgaW50NjQ7IGZfYmxvY2tzIHVp
bnQ2NDsgZl9iZnJlZSB1aW50NjQ7IGZfYmF2YWlsIHVpbnQ2NDsgZl9maWxlcyB1aW50NjQ7IGZf
ZmZyZWUgdWludDY0OyBmX2ZzaWQgX19fZnNpZF90OyBmX25hbWVsZW4gaW50NjQ7IGZfZnJzaXpl
IGludDY0OyBmX2ZsYWdzIGludDY0OyBmX3NwYXJlIFszKzFdaW50NjQ7IH0KK2NvbnN0IF9zaXpl
b2Zfc3RhdGZzNjQgPSAxMjAKK3R5cGUgX250cHRpbWV2YWwgc3RydWN0IHsgdGltZSB0aW1ldmFs
OyBtYXhlcnJvciBpbnQ2NDsgZXN0ZXJyb3IgaW50NjQ7IHRhaSBpbnQ2NDsgX19nbGliY19yZXNl
cnZlZDEgaW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQyIGludDY0OyBfX2dsaWJjX3Jlc2VydmVkMyBp
bnQ2NDsgX19nbGliY19yZXNlcnZlZDQgaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfbnRwdGltZXZh
bCA9IDcyCit0eXBlIF91dGltYnVmIHN0cnVjdCB7IGFjdGltZSBpbnQ2NDsgbW9kdGltZSBpbnQ2
NDsgfQorY29uc3QgX3NpemVvZl91dGltYnVmID0gMTYKK3R5cGUgX2ZpbGVfY2xvbmVfcmFuZ2Ug
c3RydWN0IHsgc3JjX2ZkIGludDY0OyBzcmNfb2Zmc2V0IHVpbnQ2NDsgc3JjX2xlbmd0aCB1aW50
NjQ7IGRlc3Rfb2Zmc2V0IHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9maWxlX2Nsb25lX3Jhbmdl
ID0gMzIKK3R5cGUgX2ZzdHJpbV9yYW5nZSBzdHJ1Y3QgeyBzdGFydCB1aW50NjQ7IGxlbiB1aW50
NjQ7IG1pbmxlbiB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZnN0cmltX3JhbmdlID0gMjQKK3R5
cGUgX2ZpbGVfZGVkdXBlX3JhbmdlX2luZm8gc3RydWN0IHsgZGVzdF9mZCBpbnQ2NDsgZGVzdF9v
ZmZzZXQgdWludDY0OyBieXRlc19kZWR1cGVkIHVpbnQ2NDsgc3RhdHVzIGludDMyOyByZXNlcnZl
ZCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbyA9IDMyCit0
eXBlIF9maWxlX2RlZHVwZV9yYW5nZSBzdHJ1Y3QgeyBzcmNfb2Zmc2V0IHVpbnQ2NDsgc3JjX2xl
bmd0aCB1aW50NjQ7IGRlc3RfY291bnQgdWludDE2OyByZXNlcnZlZDEgdWludDE2OyByZXNlcnZl
ZDIgdWludDMyOyBpbmZvIFswXV9maWxlX2RlZHVwZV9yYW5nZV9pbmZvOyB9Citjb25zdCBfc2l6
ZW9mX2ZpbGVfZGVkdXBlX3JhbmdlID0gMjQKK3R5cGUgX2ZpbGVzX3N0YXRfc3RydWN0IHN0cnVj
dCB7IG5yX2ZpbGVzIHVpbnQ2NDsgbnJfZnJlZV9maWxlcyB1aW50NjQ7IG1heF9maWxlcyB1aW50
NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZmlsZXNfc3RhdF9zdHJ1Y3QgPSAyNAordHlwZSBfaW5vZGVz
X3N0YXRfdCBzdHJ1Y3QgeyBucl9pbm9kZXMgaW50NjQ7IG5yX3VudXNlZCBpbnQ2NDsgZHVtbXkg
WzQrMV1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9pbm9kZXNfc3RhdF90ID0gNTYKK3R5cGUgX2Zz
eGF0dHIgc3RydWN0IHsgZnN4X3hmbGFncyB1aW50MzI7IGZzeF9leHRzaXplIHVpbnQzMjsgZnN4
X25leHRlbnRzIHVpbnQzMjsgZnN4X3Byb2ppZCB1aW50MzI7IGZzeF9jb3dleHRzaXplIHVpbnQz
MjsgZnN4X3BhZCBbNysxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2ZzeGF0dHIgPSAyOAordHlw
ZSBfZnNjcnlwdF9wb2xpY3kgc3RydWN0IHsgdmVyc2lvbiB1aW50ODsgY29udGVudHNfZW5jcnlw
dGlvbl9tb2RlIHVpbnQ4OyBmaWxlbmFtZXNfZW5jcnlwdGlvbl9tb2RlIHVpbnQ4OyBmbGFncyB1
aW50ODsgbWFzdGVyX2tleV9kZXNjcmlwdG9yIFs3KzFddWludDg7IH0KK2NvbnN0IF9zaXplb2Zf
ZnNjcnlwdF9wb2xpY3kgPSAxMgordHlwZSBfZnNjcnlwdF9rZXkgc3RydWN0IHsgbW9kZSB1aW50
MzI7IHJhdyBbNjMrMV11aW50ODsgc2l6ZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfZnNjcnlw
dF9rZXkgPSA3MgordHlwZSBfX19rZXJuZWxfcndmX3QgaW50MzIKK3R5cGUgX2lub3RpZnlfZXZl
bnQgc3RydWN0IHsgd2QgaW50MzI7IG1hc2sgdWludDMyOyBjb29raWUgdWludDMyOyBsZW4gdWlu
dDMyOyBuYW1lIFswXWludDg7IH0KK2NvbnN0IF9zaXplb2ZfaW5vdGlmeV9ldmVudCA9IDE2Cit0
eXBlIF9fX2d3Y2hhcl90IGludDMyCit0eXBlIF9pbWF4ZGl2X3Qgc3RydWN0IHsgcXVvdCBpbnQ2
NDsgcmVtIGludDY0OyB9Citjb25zdCBfc2l6ZW9mX2ltYXhkaXZfdCA9IDE2Cit0eXBlIF9pY21w
Nl9maWx0ZXIgc3RydWN0IHsgaWNtcDZfZmlsdCBbNysxXXVpbnQzMjsgfQorY29uc3QgX3NpemVv
Zl9pY21wNl9maWx0ZXIgPSAzMgordHlwZSBfaWNtcDZfaGRyIHN0cnVjdCB7IGljbXA2X3R5cGUg
dWludDg7IGljbXA2X2NvZGUgdWludDg7IGljbXA2X2Nrc3VtIHVpbnQxNjsgaWNtcDZfZGF0YXVu
IHN0cnVjdCB7IGljbXA2X3VuX2RhdGEzMiBbMCsxXXVpbnQzMjsgfTsgfQorY29uc3QgX3NpemVv
Zl9pY21wNl9oZHIgPSA4Cit0eXBlIF9uZF9yb3V0ZXJfc29saWNpdCBzdHJ1Y3QgeyBuZF9yc19o
ZHIgX2ljbXA2X2hkcjsgfQorY29uc3QgX3NpemVvZl9uZF9yb3V0ZXJfc29saWNpdCA9IDgKK3R5
cGUgX25kX3JvdXRlcl9hZHZlcnQgc3RydWN0IHsgbmRfcmFfaGRyIF9pY21wNl9oZHI7IG5kX3Jh
X3JlYWNoYWJsZSB1aW50MzI7IG5kX3JhX3JldHJhbnNtaXQgdWludDMyOyB9Citjb25zdCBfc2l6
ZW9mX25kX3JvdXRlcl9hZHZlcnQgPSAxNgorY29uc3QgX3NpemVvZl9uZF9uZWlnaGJvcl9zb2xp
Y2l0ID0gMjQKK2NvbnN0IF9zaXplb2ZfbmRfbmVpZ2hib3JfYWR2ZXJ0ID0gMjQKK2NvbnN0IF9z
aXplb2ZfbmRfcmVkaXJlY3QgPSA0MAordHlwZSBfbmRfb3B0X2hkciBzdHJ1Y3QgeyBuZF9vcHRf
dHlwZSB1aW50ODsgbmRfb3B0X2xlbiB1aW50ODsgfQorY29uc3QgX3NpemVvZl9uZF9vcHRfaGRy
ID0gMgorY29uc3QgX3NpemVvZl9uZF9vcHRfcHJlZml4X2luZm8gPSAzMgordHlwZSBfbmRfb3B0
X3JkX2hkciBzdHJ1Y3QgeyBuZF9vcHRfcmhfdHlwZSB1aW50ODsgbmRfb3B0X3JoX2xlbiB1aW50
ODsgbmRfb3B0X3JoX3Jlc2VydmVkMSB1aW50MTY7IG5kX29wdF9yaF9yZXNlcnZlZDIgdWludDMy
OyB9Citjb25zdCBfc2l6ZW9mX25kX29wdF9yZF9oZHIgPSA4Cit0eXBlIF9uZF9vcHRfbXR1IHN0
cnVjdCB7IG5kX29wdF9tdHVfdHlwZSB1aW50ODsgbmRfb3B0X210dV9sZW4gdWludDg7IG5kX29w
dF9tdHVfcmVzZXJ2ZWQgdWludDE2OyBuZF9vcHRfbXR1X210dSB1aW50MzI7IH0KK2NvbnN0IF9z
aXplb2ZfbmRfb3B0X210dSA9IDgKK2NvbnN0IF9zaXplb2ZfbWxkX2hkciA9IDI0Cit0eXBlIF9p
Y21wNl9yb3V0ZXJfcmVudW0gc3RydWN0IHsgcnJfaGRyIF9pY21wNl9oZHI7IHJyX3NlZ251bSB1
aW50ODsgcnJfZmxhZ3MgdWludDg7IHJyX21heGRlbGF5IHVpbnQxNjsgcnJfcmVzZXJ2ZWQgdWlu
dDMyOyB9Citjb25zdCBfc2l6ZW9mX2ljbXA2X3JvdXRlcl9yZW51bSA9IDE2Citjb25zdCBfc2l6
ZW9mX3JyX3Bjb19tYXRjaCA9IDI0Citjb25zdCBfc2l6ZW9mX3JyX3Bjb191c2UgPSAzMgorY29u
c3QgX3NpemVvZl9ycl9yZXN1bHQgPSAyNAordHlwZSBfbmRfb3B0X2Fkdl9pbnRlcnZhbCBzdHJ1
Y3QgeyBuZF9vcHRfYWR2X2ludGVydmFsX3R5cGUgdWludDg7IG5kX29wdF9hZHZfaW50ZXJ2YWxf
bGVuIHVpbnQ4OyBuZF9vcHRfYWR2X2ludGVydmFsX3Jlc2VydmVkIHVpbnQxNjsgbmRfb3B0X2Fk
dl9pbnRlcnZhbF9pdmFsIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9uZF9vcHRfYWR2X2ludGVy
dmFsID0gOAordHlwZSBfbmRfb3B0X2hvbWVfYWdlbnRfaW5mbyBzdHJ1Y3QgeyBuZF9vcHRfaG9t
ZV9hZ2VudF9pbmZvX3R5cGUgdWludDg7IG5kX29wdF9ob21lX2FnZW50X2luZm9fbGVuIHVpbnQ4
OyBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3Jlc2VydmVkIHVpbnQxNjsgbmRfb3B0X2hvbWVfYWdl
bnRfaW5mb19wcmVmZXJlbmNlIHVpbnQxNjsgbmRfb3B0X2hvbWVfYWdlbnRfaW5mb19saWZldGlt
ZSB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfbmRfb3B0X2hvbWVfYWdlbnRfaW5mbyA9IDgKK3R5
cGUgX3NjaGVkX3BhcmFtIHN0cnVjdCB7IHNjaGVkX3ByaW9yaXR5IGludDMyOyB9Citjb25zdCBf
c2l6ZW9mX3NjaGVkX3BhcmFtID0gNAordHlwZSBfX19jcHVfbWFzayB1aW50NjQKK3R5cGUgX2Nw
dV9zZXRfdCBzdHJ1Y3QgeyBfX2JpdHMgWzE1KzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9mX2Nw
dV9zZXRfdCA9IDEyOAordHlwZSBfc2VtX3Qgc3RydWN0IHsgX19zaXplIFszMSsxXWludDg7IEdv
ZHVtcF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3NlbV90ID0gMzIKK3R5cGUg
X2ZmaV9hcmcgdWludDY0Cit0eXBlIF9mZmlfc2FyZyBpbnQ2NAordHlwZSBfZmZpX2FiaSB1aW50
MzIKK3R5cGUgX19mZmlfdHlwZSBzdHJ1Y3QgeyBzaXplIHVpbnQ2NDsgYWxpZ25tZW50IHVpbnQx
NjsgX3R5cGUgdWludDE2OyBlbGVtZW50cyAqKl9fZmZpX3R5cGU7IH0KK2NvbnN0IF9zaXplb2Zf
X2ZmaV90eXBlID0gMjQKK3R5cGUgX2ZmaV90eXBlIHN0cnVjdCB7IHNpemUgdWludDY0OyBhbGln
bm1lbnQgdWludDE2OyBfdHlwZSB1aW50MTY7IGVsZW1lbnRzICoqX19mZmlfdHlwZTsgfQorY29u
c3QgX3NpemVvZl9mZmlfdHlwZSA9IDI0Cit0eXBlIF9mZmlfc3RhdHVzIHVpbnQzMgordHlwZSBf
RkZJX1RZUEUgdWludDMyCit0eXBlIF9mZmlfY2lmIHN0cnVjdCB7IGFiaSB1aW50MzI7IG5hcmdz
IHVpbnQzMjsgYXJnX3R5cGVzICoqX2ZmaV90eXBlOyBydHlwZSAqX2ZmaV90eXBlOyBieXRlcyB1
aW50MzI7IGZsYWdzIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9mZmlfY2lmID0gMzIKK3R5cGUg
X2ZmaV9yYXcgc3RydWN0IHsgc2ludCBpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9mZmlfcmF3ID0g
OAordHlwZSBfZmZpX2phdmFfcmF3IHN0cnVjdCB7IHNpbnQgaW50NjQ7IH0KK2NvbnN0IF9zaXpl
b2ZfZmZpX2phdmFfcmF3ID0gOAordHlwZSBfZmZpX2Nsb3N1cmUgc3RydWN0IHsgdHJhbXAgWzIz
KzFdaW50ODsgY2lmICpfZmZpX2NpZjsgZnVuIGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKipieXRl
LCAqYnl0ZSk7IHVzZXJfZGF0YSAqYnl0ZTsgfQorY29uc3QgX3NpemVvZl9mZmlfY2xvc3VyZSA9
IDQ4Cit0eXBlIF9mZmlfcmF3X2Nsb3N1cmUgc3RydWN0IHsgdHJhbXAgWzIzKzFdaW50ODsgY2lm
ICpfZmZpX2NpZjsgdHJhbnNsYXRlX2FyZ3MgZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqKmJ5dGUs
ICpieXRlKTsgdGhpc19jbG9zdXJlICpieXRlOyBmdW4gZnVuYygqX2ZmaV9jaWYsICpieXRlLCAq
X2ZmaV9yYXcsICpieXRlKTsgdXNlcl9kYXRhICpieXRlOyB9Citjb25zdCBfc2l6ZW9mX2ZmaV9y
YXdfY2xvc3VyZSA9IDY0Cit0eXBlIF9mZmlfamF2YV9yYXdfY2xvc3VyZSBzdHJ1Y3QgeyB0cmFt
cCBbMjMrMV1pbnQ4OyBjaWYgKl9mZmlfY2lmOyB0cmFuc2xhdGVfYXJncyBmdW5jKCpfZmZpX2Np
ZiwgKmJ5dGUsICoqYnl0ZSwgKmJ5dGUpOyB0aGlzX2Nsb3N1cmUgKmJ5dGU7IGZ1biBmdW5jKCpf
ZmZpX2NpZiwgKmJ5dGUsICpfZmZpX2phdmFfcmF3LCAqYnl0ZSk7IHVzZXJfZGF0YSAqYnl0ZTsg
fQorY29uc3QgX3NpemVvZl9mZmlfamF2YV9yYXdfY2xvc3VyZSA9IDY0Citjb25zdCBfX1BPU0lY
X0FEVklTT1JZX0lORk8gPSAyMDA4MDkKK2NvbnN0IF9XTk9IQU5HID0gMQorY29uc3QgX19fTERC
TF9NSU5fMTBfRVhQX18gPSAoLTQ5MzEpCitjb25zdCBfSUZMQV9CUlBPUlRfTkVJR0hfU1VQUFJF
U1MgPSAzMgorY29uc3QgX19QQ19SRUNfTUlOX1hGRVJfU0laRSA9IDE2Citjb25zdCBfX0JJVFNf
UFRIUkVBRFRZUEVTX0NPTU1PTl9IID0gMQorY29uc3QgX19TQ19FWFBSX05FU1RfTUFYID0gNDIK
K2NvbnN0IF9JTlRfTEVBU1QxNl9NSU4gPSAoLTMyNzY3LTEpCitjb25zdCBfU1lTX3VzZWxpYiA9
IF9fX05SX3VzZWxpYgorY29uc3QgX0ZGSV9CQURfVFlQRURFRiA9IDEKK2NvbnN0IF9JUFBST1RP
X1RQID0gMjkKK2NvbnN0IF9UQ1BfQ09PS0lFX1RSQU5TQUNUSU9OUyA9IDE1Citjb25zdCBfX19G
TFQzMlhfRElHX18gPSAxNQorY29uc3QgX0FJT19QUklPX0RFTFRBX01BWCA9IDIwCitjb25zdCBf
TkRBX1ZOSSA9IDcKK2NvbnN0IF9fX0lMUDMyX09GRjMyX0NGTEFHUyA9ICItbTMyIgorY29uc3Qg
X19fRkxUNjRfTUlOXzEwX0VYUF9fID0gKC0zMDcpCitjb25zdCBfX1BDX1BBVEhfTUFYID0gNAor
Y29uc3QgX0lQUFJPVE9fUk9VVElORyA9IDQzCitjb25zdCBfSU5UX0ZBU1Q4X01JTiA9ICgtMTI4
KQorY29uc3QgX0IxMTUyMDAgPSAwMDEwMDAyCitjb25zdCBfX0JJVFNfVUlOVE5fSURFTlRJVFlf
SCA9IDEKK2NvbnN0IF9fX0ZMVDY0X01BTlRfRElHX18gPSA1MworY29uc3QgX19fQ0hBUl9CSVRf
XyA9IDgKK2NvbnN0IF9fX05SX2ZzeW5jID0gNzQKK2NvbnN0IF9fU0NfTEVWRUw0X0NBQ0hFX1NJ
WkUgPSAxOTcKK2NvbnN0IF9QVFJBQ0VfRVZFTlRfRVhFQyA9IDQKK2NvbnN0IF9QUl9TVkVfVkxf
SU5IRVJJVCA9ICgxIDw8IDE3KQorY29uc3QgX0lQUE9SVF9TVVBEVVAgPSA5NQorY29uc3QgX1NZ
U19mdHJ1bmNhdGUgPSBfX19OUl9mdHJ1bmNhdGUKK2NvbnN0IF9TQ0hBUl9XSURUSCA9IDgKK2Nv
bnN0IF9UQ0FfU1RBQiA9IDgKK2NvbnN0IF9JRkxBX1ZGX0xJTktfU1RBVEUgPSA1Citjb25zdCBf
UlROTEdSUF9OU0lEID0gMjgKK2NvbnN0IF9fX05SX21yZW1hcCA9IDI1Citjb25zdCBfX19OUl9s
c2V0eGF0dHIgPSAxODkKK2NvbnN0IF9JUFZMQU5fTU9ERV9MMyA9IDEKK2NvbnN0IF9JRkxBX0JP
TkRfVVNFX0NBUlJJRVIgPSA2Citjb25zdCBfSUZMQV9PRkZMT0FEX1hTVEFUU19VTlNQRUMgPSAw
Citjb25zdCBfSU5UX0xFQVNUMzJfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpCitjb25zdCBfQVRGX0NP
TSA9IDB4MDIKK2NvbnN0IF9NQVBfRklMRSA9IDAKK2NvbnN0IF9fX0RFQzY0X01JTl9fID0gMUUt
MzgzCitjb25zdCBfSUZMQV9CUl9UT1BPTE9HWV9DSEFOR0VfVElNRVIgPSAxOAorY29uc3QgX1NJ
R0VWX05PTkUgPSAxCitjb25zdCBfTkRUUEFfTUNBU1RfUFJPQkVTID0gMTEKK2NvbnN0IF9TWVNf
bWtub2RhdCA9IF9fX05SX21rbm9kYXQKK2NvbnN0IF9fUE9TSVhfQkFSUklFUlMgPSAyMDA4MDkK
K2NvbnN0IF9VSU5UX0ZBU1QxNl9XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfSVBfUkYgPSAw
eDgwMDAKK2NvbnN0IF9FVEhfUF9QUFBUQUxLID0gMHgwMDEwCitjb25zdCBfVFVOU0VUUVVFVUVf
dmFsID0gMTA3NDAyNTY4OQorY29uc3QgX0RUX0NIUiA9IDIKK2NvbnN0IF9fX0ZMVF9NQVhfRVhQ
X18gPSAxMjgKK2NvbnN0IF9SVE5fTVVMVElDQVNUID0gNQorY29uc3QgX19fTlJfc2V0c2lkID0g
MTEyCitjb25zdCBfX1hPUEVOX1hQRzIgPSAxCitjb25zdCBfSVBfREVGQVVMVF9NVUxUSUNBU1Rf
TE9PUCA9IDEKK2NvbnN0IF9fWE9QRU5fWFBHNCA9IDEKK2NvbnN0IF9fX05SX2dldHJlc2dpZCA9
IDEyMAorY29uc3QgX0JQRl9KR0UgPSAweDMwCitjb25zdCBfQlBGX0xEID0gMHgwMAorY29uc3Qg
X1RDUElfT1BUX0VDTiA9IDgKK2NvbnN0IF9FVFhUQlNZID0gMjYKK2NvbnN0IF9JRkxBX1JNTkVU
X01VWF9JRCA9IDEKK2NvbnN0IF9QUl9GUF9FWENfU1dfRU5BQkxFID0gMHg4MAorY29uc3QgX19f
TlJfdGltZSA9IDIwMQorY29uc3QgX0hBVkVfU1lTX0VQT0xMX0ggPSAxCitjb25zdCBfSUZMQV9W
Rl9TVEFUU19SWF9CWVRFUyA9IDIKK2NvbnN0IF9SVF9TQ09QRV9VTklWRVJTRSA9IDAKK2NvbnN0
IF9TWVNfZXBvbGxfY3RsX29sZCA9IF9fX05SX2Vwb2xsX2N0bF9vbGQKK2NvbnN0IF9VTE9OR19N
QVggPSAoX0xPTkdfTUFYICogMiArIDEpCitjb25zdCBfQ0xEX1RSQVBQRUQgPSA0Citjb25zdCBf
TE9OR19CSVQgPSA2NAorY29uc3QgX19fUkxJTV9UX01BVENIRVNfUkxJTTY0X1QgPSAxCitjb25z
dCBfVENQX1JFUEFJUl9PUFRJT05TID0gMjIKK2NvbnN0IF9YODZfQ1I0X09TWE1NRVhDUFRfQklU
ID0gMTAKK2NvbnN0IF9fUE9TSVhfQUlPX01BWCA9IDEKK2NvbnN0IF9SVEZfVVAgPSAweDAwMDEK
K2NvbnN0IF9UQ1BfU19EQVRBX0lOID0gKDEgPDwgMikKK2NvbnN0IF9JRkxBX0JSX01BWF9BR0Ug
PSAzCitjb25zdCBfX1NDX01FTU9SWV9QUk9URUNUSU9OID0gMTkKK2NvbnN0IF9GTk9OQkxPQ0sg
PSBfT19OT05CTE9DSworY29uc3QgX0lOX0FUVFJJQiA9IDB4MDAwMDAwMDQKK2NvbnN0IF9BVEZf
UEVSTSA9IDB4MDQKK2NvbnN0IF9JRkxBX0dFTkVWRV9SRU1PVEU2ID0gNworY29uc3QgX0lGTEFf
Qk9ORF9NT0RFID0gMQorY29uc3QgX0VIX0ZSQU1FX0ZMQUdTID0gImF3IgorY29uc3QgX09fQVBQ
RU5EID0gMDIwMDAKK2NvbnN0IF9fU0NfVFlQRURfTUVNT1JZX09CSkVDVFMgPSAxNjUKK2NvbnN0
IF9FVEhFUl9NQVhfTEVOID0gKF9FVEhfRlJBTUVfTEVOICsgX0VUSEVSX0NSQ19MRU4pCitjb25z
dCBfX19OUl9tc2dzbmQgPSA2OQorY29uc3QgX1RDQV9QQUQgPSA5Citjb25zdCBfUFJfU0VUX0ZQ
X01PREUgPSA0NQorY29uc3QgX05MX01NQVBfU1RBVFVTX1ZBTElEID0gMgorY29uc3QgX19fTlJf
bW91bnQgPSAxNjUKK2NvbnN0IF9fSU9DX1RZUEVCSVRTID0gOAorY29uc3QgX1NPQ0tfREdSQU0g
PSAyCitjb25zdCBfTU9EX09GRlNFVCA9IF9BREpfT0ZGU0VUCitjb25zdCBfSUZMQV9NQVAgPSAx
NAorY29uc3QgX0VMMk5TWU5DID0gNDUKK2NvbnN0IF9JUFY2X09SSUdEU1RBRERSID0gNzQKK2Nv
bnN0IF9TWVNfbXVubG9jayA9IF9fX05SX211bmxvY2sKK2NvbnN0IF9USF9BQ0sgPSAweDEwCitj
b25zdCBfTF9YVE5EID0gMgorY29uc3QgX1NPX1RYVElNRSA9IDYxCitjb25zdCBfUlRNX0RFTEFD
VElPTiA9IDQ5Citjb25zdCBfWFRBQlMgPSAwMDE0MDAwCitjb25zdCBfSEFWRV9TWVNfU1lTQ0FM
TF9IID0gMQorY29uc3QgX1BSX1NFVF9TUEVDVUxBVElPTl9DVFJMID0gNTMKK2NvbnN0IF9USU9D
R0RFVl92YWwgPSAyMTQ3NzY3MzQ2Citjb25zdCBfX19OUl9jb25uZWN0ID0gNDIKK2NvbnN0IF9Y
ODZfQ1I0X1NNRVBfQklUID0gMjAKK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfVkFMSUQgPSAweDAz
Citjb25zdCBfVElPQ0dJQ09VTlQgPSAweDU0NUQKK2NvbnN0IF9TWVNfc3RhdGZzID0gX19fTlJf
c3RhdGZzCitjb25zdCBfTkVUTElOS19SRE1BID0gMjAKK2NvbnN0IF9JUFY2XzIyOTJIT1BMSU1J
VCA9IDgKK2NvbnN0IF9JRkZfT05FX1FVRVVFID0gMHgyMDAwCitjb25zdCBfSVBQT1JUX0NNRFNF
UlZFUiA9IDUxNAorY29uc3QgX1BGX01BWCA9IDQ0Citjb25zdCBfUlRfQ0xBU1NfTUFYID0gMjU1
Citjb25zdCBfSVBQUk9UT19JUFY2ID0gNDEKK2NvbnN0IF9TSU9DU0lGQlIgPSAweDg5NDEKK2Nv
bnN0IF9fX0lOVF9MRUFTVDhfTUFYX18gPSAweDdmCitjb25zdCBfX19ERUMxMjhfTUFOVF9ESUdf
XyA9IDM0Citjb25zdCBfSUNNUDZfUlJfUkVTVUxUX0ZMQUdTX0ZPUkJJRERFTiA9IDB4MDEwMAor
Y29uc3QgX01BUF9TSEFSRUQgPSAweDAxCitjb25zdCBfRVVTRVJTID0gODcKK2NvbnN0IF9NQVhU
QyA9IDYKK2NvbnN0IF9UQ1BfU1lOX1NFTlQgPSAyCitjb25zdCBfUEZfTkVUTElOSyA9IDE2Citj
b25zdCBfWERQX0FUVEFDSEVEX05PTkUgPSAwCitjb25zdCBfX19ERUNJTUFMX0RJR19fID0gMjEK
K2NvbnN0IF9FVEhFUl9BRERSX0xFTiA9IF9FVEhfQUxFTgorY29uc3QgX0ZGSV9UWVBFX0xBU1Qg
PSBfRkZJX1RZUEVfQ09NUExFWAorY29uc3QgX1BPU0lYX01BRFZfTk9STUFMID0gMAorY29uc3Qg
X0FSUEhSRF9JRUVFODAyMTFfUFJJU00gPSA4MDIKK2NvbnN0IF9FVEhfUF84MDIxQUQgPSAweDg4
QTgKK2NvbnN0IF9MSU5VWF9SRUJPT1RfTUFHSUMyQyA9IDUzNzk5MzIxNgorY29uc3QgX01OVF9E
RVRBQ0ggPSAyCitjb25zdCBfSVBUT1NfRUNOX05PVF9FQ1QgPSAweDAwCitjb25zdCBfU1NfT05T
VEFDSyA9IDEKK2NvbnN0IF9JT0NfSU4gPSAoX19JT0NfV1JJVEUgPDwgX19JT0NfRElSU0hJRlQp
Citjb25zdCBfRVRIX1BfODAyMUFIID0gMHg4OEU3Citjb25zdCBfSUZMQV9UVU5fVk5FVF9IRFIg
PSA1Citjb25zdCBfTVJFTUFQX01BWU1PVkUgPSAxCitjb25zdCBfX19STElNSVRfTkxJTUlUUyA9
IDE2Citjb25zdCBfRl9HRVRMSzY0ID0gNQorY29uc3QgX1JUUFJPVF9VTlNQRUMgPSAwCitjb25z
dCBfUEFST0REID0gMDAwMTAwMAorY29uc3QgX19fTlJfa2V4ZWNfbG9hZCA9IDI0NgorY29uc3Qg
X19fSUZMQV9WRl9QT1JUX01BWCA9IDIKK2NvbnN0IF9TWVNfc3dhcG9mZiA9IF9fX05SX3N3YXBv
ZmYKK2NvbnN0IF9fX1NURENfVVRGXzMyX18gPSAxCitjb25zdCBfUlRfVEFCTEVfTE9DQUwgPSAy
NTUKK2NvbnN0IF9GRlNZTkMgPSBfT19GU1lOQworY29uc3QgX1BFTkRJTiA9IDAwNDAwMDAKK2Nv
bnN0IF9fX0lOVDhfTUFYX18gPSAweDdmCitjb25zdCBfRVRIX1BfQVJDTkVUID0gMHgwMDFBCitj
b25zdCBfRkRfU0VUU0laRSA9IF9fX0ZEX1NFVFNJWkUKK2NvbnN0IF9NU0dfRU9SID0gMTI4Citj
b25zdCBfX05FVF9JRl9BUlBfSCA9IDEKK2NvbnN0IF9SVE1fRl9DTE9ORUQgPSAweDIwMAorY29u
c3QgX0VIV1BPSVNPTiA9IDEzMworY29uc3QgX0lQUFJPVE9fTk9ORSA9IDU5Citjb25zdCBfVENQ
X0NPT0tJRV9PVVRfTkVWRVIgPSAoMSA8PCAxKQorY29uc3QgX0VQUk9UTyA9IDcxCitjb25zdCBf
X0lPQ19OUlNISUZUID0gMAorY29uc3QgX0ZfRVhMQ0sgPSA0Citjb25zdCBfX19OUl9jbG9uZSA9
IDU2Citjb25zdCBfX19OUl9wdHJhY2UgPSAxMDEKK2NvbnN0IF9fUE9TSVhfVjdfTFBCSUdfT0ZG
QklHID0gLTEKK2NvbnN0IF9IQVZFX0FDT1NMID0gMQorY29uc3QgX1NJT0NHSUZEU1RBRERSID0g
MHg4OTE3Citjb25zdCBfX1BPU0lYX0xPR0lOX05BTUVfTUFYID0gOQorY29uc3QgX1JUTkxHUlBf
SVBWNl9ORVRDT05GID0gMjUKK2NvbnN0IF9QQUdFX01BU0sgPSAoXihfUEFHRV9TSVpFLTEpKQor
Y29uc3QgX19DU19YQlM1X0lMUDMyX09GRkJJR19MSU5URkxBR1MgPSAxMTA3Citjb25zdCBfRkZJ
X1RZUEVfU0lOVDY0ID0gMTIKK2NvbnN0IF9fU0NfT1BFTl9NQVggPSA0Citjb25zdCBfX1NDXzJf
U1dfREVWID0gNTEKK2NvbnN0IF9OTE1fRl9BQ0sgPSAweDA0Citjb25zdCBfU0NOZDggPSAiaGhk
IgorY29uc3QgX19fRkxUMTI4X01JTl8xMF9FWFBfXyA9ICgtNDkzMSkKK2NvbnN0IF9YRFBfRkxB
R1NfU0tCX01PREUgPSAoMSA8PCAxKQorY29uc3QgX1NJT0NHUkFSUCA9IDB4ODk2MQorY29uc3Qg
X0lGTEFfVkZfUE9SVFMgPSAyNAorY29uc3QgX0NFUkFTRSA9IDAxNzcKK2NvbnN0IF9fX05SX3Nl
dHBnaWQgPSAxMDkKK2NvbnN0IF9SVEZfSU5URVJGQUNFID0gMHg0MDAwMDAwMAorY29uc3QgX0lG
TEFfQlJQT1JUX0lTT0xBVEVEID0gMzMKK2NvbnN0IF9QUklvRkFTVDggPSAibyIKK2NvbnN0IF9J
RkxBX0JPTkRfU0xBVkVfTElOS19GQUlMVVJFX0NPVU5UID0gMworY29uc3QgX0JSS0lOVCA9IDAw
MDAwMDIKK2NvbnN0IF9fX0RFQ0lNQUxfQklEX0ZPUk1BVF9fID0gMQorY29uc3QgX1NPTF9TT0NL
RVQgPSAxCitjb25zdCBfX0NTX1BPU0lYX1Y3X0lMUDMyX09GRkJJR19MREZMQUdTID0gMTEzNwor
Y29uc3QgX0lGTEFfUFJJT1JJVFkgPSA5Citjb25zdCBfSVRJTUVSX1JFQUwgPSAwCitjb25zdCBf
VENGTFNIID0gMHg1NDBCCitjb25zdCBfRkZJX1RISVNDQUxMID0gMworY29uc3QgX0lQX05PREVG
UkFHID0gMjIKK2NvbnN0IF9ORVRMSU5LX0ZJUkVXQUxMID0gMworY29uc3QgX19fTlJfc2NoZWRf
Z2V0YWZmaW5pdHkgPSAyMDQKK2NvbnN0IF9JUFBST1RPX1VEUExJVEUgPSAxMzYKK2NvbnN0IF9G
U19QUk9KSU5IRVJJVF9GTCA9IDB4MjAwMDAwMDAKK2NvbnN0IF9NQURWX0RPTlRGT1JLID0gMTAK
K2NvbnN0IF9NU0dfQ01TR19DTE9FWEVDID0gMTA3Mzc0MTgyNAorY29uc3QgX0VOT0VOVCA9IDIK
K2NvbnN0IF9JUFRPU19FQ05fRUNUMSA9IDB4MDEKK2NvbnN0IF9JRkxBX1ZGX0lORk8gPSAxCitj
b25zdCBfTE9DS19XUklURSA9IDEyOAorY29uc3QgX1RDUF9MSVNURU4gPSAxMAorY29uc3QgX0lQ
T1BUX1RTX1BSRVNQRUMgPSAzCitjb25zdCBfX19QT1NJWF9GQURWX05PUkVVU0UgPSA1Citjb25z
dCBfQVJQT1BfUkVRVUVTVCA9IDEKK2NvbnN0IF9QVFJBQ0VfRVZFTlRfRVhJVCA9IDYKK2NvbnN0
IF9YQVRUUl9OQU1FX01BWCA9IDI1NQorY29uc3QgX19fU19JRkxOSyA9IDAxMjAwMDAKK2NvbnN0
IF9UQ0FfUk9PVF9UQUIgPSAxCitjb25zdCBfU0tGX0FEX1BST1RPQ09MID0gMAorY29uc3QgX0VO
T1BLRyA9IDY1Citjb25zdCBfX19BVE9NSUNfUkVMQVhFRCA9IDAKK2NvbnN0IF9TWVNfZ2V0c29j
a29wdCA9IF9fX05SX2dldHNvY2tvcHQKK2NvbnN0IF9JRkxBX1ZGX0xJTktfU1RBVEVfRU5BQkxF
ID0gMQorY29uc3QgX1ZURExZID0gMDA0MDAwMAorY29uc3QgX19fTlJfdGltZXJfZGVsZXRlID0g
MjI2Citjb25zdCBfUlROX1VOU1BFQyA9IDAKK2NvbnN0IF9TT19TTkRUSU1FTyA9IDIxCitjb25z
dCBfQUZfVU5TUEVDID0gX1BGX1VOU1BFQworY29uc3QgX1RJT0NTRVJTRVRNVUxUSSA9IDB4NTQ1
QgorY29uc3QgX0FSUEhSRF9GQ1BMID0gNzg2Citjb25zdCBfTE9DS19SVyA9IDE5MgorY29uc3Qg
X1JFR19DUjIgPSAyMgorY29uc3QgX19TQ19BUkdfTUFYID0gMAorY29uc3QgX0FSUEhSRF9GQ1BQ
ID0gNzg0Citjb25zdCBfVUlOVF9XSURUSCA9IDMyCitjb25zdCBfSUZMQV9WWExBTl9JRCA9IDEK
K2NvbnN0IF9fX1VTRV9YT1BFTiA9IDEKK2NvbnN0IF9JUE9QVF9TRUMgPSBfSVBPUFRfU0VDVVJJ
VFkKK2NvbnN0IF9JRkxBX1RYUUxFTiA9IDEzCitjb25zdCBfU1lTX3Vtb3VudDIgPSBfX19OUl91
bW91bnQyCitjb25zdCBfVFVOX1RZUEVfTUFTSyA9IDB4MDAwZgorY29uc3QgX0NMT0NLX1JFQUxU
SU1FX0NPQVJTRSA9IDUKK2NvbnN0IF9JRkxBX0JSX0ZEQl9GTFVTSCA9IDIxCitjb25zdCBfUlRN
X1NFVE5FSUdIVEJMID0gNjcKK2NvbnN0IF9JUF9BRERfTUVNQkVSU0hJUCA9IDM1Citjb25zdCBf
UlRQUk9UX0RIQ1AgPSAxNgorY29uc3QgX0NMT05FX1BUUkFDRSA9IDB4MDAwMDIwMDAKK2NvbnN0
IF9QUk9UX05PTkUgPSAweDAKK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQgPSAweDAx
MjM0NTY3Citjb25zdCBfTUFYX0lOUFVUID0gMjU1Citjb25zdCBfUlRBX1VOU1BFQyA9IDAKK2Nv
bnN0IF9GX0FERF9TRUFMUyA9IDEwMzMKK2NvbnN0IF9VSU9fTUFYSU9WID0gX19fSU9WX01BWAor
Y29uc3QgX19TQ19UUkFDRV9TWVNfTUFYID0gMjQ0Citjb25zdCBfUEFSTVJLID0gMDAwMDAxMAor
Y29uc3QgX19TQ19YT1BFTl9YUEczID0gOTkKK2NvbnN0IF9QUl9HRVRfRlBfTU9ERSA9IDQ2Citj
b25zdCBfX1NDX1hPUEVOX1hQRzQgPSAxMDAKK2NvbnN0IF9VSU5UX0xFQVNUNjRfV0lEVEggPSA2
NAorY29uc3QgX19TWVNfV0FJVF9IID0gMQorY29uc3QgX0VUSF9QX1RSQUlMRVIgPSAweDAwMUMK
K2NvbnN0IF9TT0xfVENQID0gNgorY29uc3QgX0FESl9NSUNSTyA9IDB4MTAwMAorY29uc3QgX05E
VEFfVEhSRVNIMSA9IDIKK2NvbnN0IF9SVEFfSVBfUFJPVE8gPSAyNworY29uc3QgX0lGTEFfQlJQ
T1JUX0ZMVVNIID0gMjQKK2NvbnN0IF9UVU5TRVRHUk9VUF92YWwgPSAxMDc0MDI1Njc4Citjb25z
dCBfU09fQ05YX0FEVklDRSA9IDUzCitjb25zdCBfTkRUQV9USFJFU0gzID0gNAorY29uc3QgX0xP
Q0tfU0ggPSAxCitjb25zdCBfX19TSVpFT0ZfV0NIQVJfVF9fID0gNAorY29uc3QgX1NFTV9WQUxV
RV9NQVggPSAoMjE0NzQ4MzY0NykKK2NvbnN0IF9fX05SX2dldHVpZCA9IDEwMgorY29uc3QgX0lG
TEFfQlJQT1JUX01DQVNUX0ZMT09EID0gMjcKK2NvbnN0IF9TT0xfQkxVRVRPT1RIID0gMjc0Citj
b25zdCBfQVJQSFJEX0VUSEVSID0gMQorY29uc3QgX0lQUE9SVF9OQU1FU0VSVkVSID0gNDIKK2Nv
bnN0IF9fU0NfQkFTRSA9IDEzNAorY29uc3QgX0hPU1RfTkFNRV9NQVggPSA2NAorY29uc3QgX1g4
Nl9DUjBfRVRfQklUID0gNAorY29uc3QgX0ZfU0VUUElQRV9TWiA9IDEwMzEKK2NvbnN0IF9fX1VJ
TlQxNl9NQVhfXyA9IDB4ZmZmZgorY29uc3QgX19fU0VHX0ZTID0gMQorY29uc3QgX1NZU19mcmVt
b3ZleGF0dHIgPSBfX19OUl9mcmVtb3ZleGF0dHIKK2NvbnN0IF9GRklfVFlQRV9VSU5UMTYgPSA3
Citjb25zdCBfX19JTFAzMl9PRkYzMl9MREZMQUdTID0gIi1tMzIiCitjb25zdCBfSVBQT1JUX01U
UCA9IDU3Citjb25zdCBfU1lTX2ZzZXR4YXR0ciA9IF9fX05SX2ZzZXR4YXR0cgorY29uc3QgX19f
TlJfZXhpdCA9IDYwCitjb25zdCBfQlBGX0ggPSAweDA4Citjb25zdCBfUFJfU0VUX1NFQ0NPTVAg
PSAyMgorY29uc3QgX0VUSF9QX0RJQUcgPSAweDYwMDUKK2NvbnN0IF9MT0dJTl9OQU1FX01BWCA9
IDI1NgorY29uc3QgX1NfSVJXWE8gPSAoX1NfSVJXWEcgPj4gMykKK2NvbnN0IF9GRklfU1REQ0FM
TCA9IDUKK2NvbnN0IF9BUlBIUkRfSU5GSU5JQkFORCA9IDMyCitjb25zdCBfX0lPQ19XUklURSA9
IDEKK2NvbnN0IF9USU9DRVhDTCA9IDB4NTQwQworY29uc3QgX19TQ19USFJFQURfUk9CVVNUX1BS
SU9fUFJPVEVDVCA9IDI0OAorY29uc3QgX1BUUkFDRV9PX1RSQUNFQ0xPTkUgPSA4Citjb25zdCBf
U1lTX3ByY3RsID0gX19fTlJfcHJjdGwKK2NvbnN0IF9JUF9UUkFOU1BBUkVOVCA9IDE5Citjb25z
dCBfSUZMQV9QT1JUX0hPU1RfVVVJRCA9IDUKK2NvbnN0IF9fX05SX2Zhbm90aWZ5X21hcmsgPSAz
MDEKK2NvbnN0IF9JRkZfUE9JTlRPUE9JTlQgPSAxNgorY29uc3QgX1JURl9EWU5BTUlDID0gMHgw
MDEwCitjb25zdCBfU0lPQ0dJRk1FVFJJQyA9IDB4ODkxZAorY29uc3QgX0lGTEFfQlJfTUNBU1Rf
U1RBVFNfRU5BQkxFRCA9IDQyCitjb25zdCBfU1lTX2V4ZWN2ZSA9IF9fX05SX2V4ZWN2ZQorY29u
c3QgX09OTFJFVCA9IDAwMDAwNDAKK2NvbnN0IF9SVEFYX1JUVFZBUiA9IDUKK2NvbnN0IF9JRkxB
X0JSX01DQVNUX01MRF9WRVJTSU9OID0gNDQKK2NvbnN0IF9fX0ZMVF9NSU5fRVhQX18gPSAoLTEy
NSkKK2NvbnN0IF9OVURfREVMQVkgPSAweDA4Citjb25zdCBfX19OUl9zZW5kbW1zZyA9IDMwNwor
Y29uc3QgX0lGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFUyA9IDM2Citjb25zdCBfSVBQT1JUX0VDSE8g
PSA3Citjb25zdCBfX19OUl9jbG9ja19nZXRyZXMgPSAyMjkKK2NvbnN0IF9NQ0FTVF9VTkJMT0NL
X1NPVVJDRSA9IDQ0Citjb25zdCBfRVRIX1BfTE9PUEJBQ0sgPSAweDkwMDAKK2NvbnN0IF9JVElN
RVJfVklSVFVBTCA9IDEKK2NvbnN0IF9QUklpTEVBU1Q4ID0gImkiCitjb25zdCBfRVRIX1BfQ1VT
VCA9IDB4NjAwNgorY29uc3QgX0lGTEFfQlJQT1JUX0ZBU1RfTEVBVkUgPSA3Citjb25zdCBfU1lT
X3NldHJlc3VpZCA9IF9fX05SX3NldHJlc3VpZAorY29uc3QgX1JURl9YUkVTT0xWRSA9IDB4MDgw
MAorY29uc3QgX0FSUEhSRF9JRUVFODAyMTFfUkFESU9UQVAgPSA4MDMKK2NvbnN0IF9fX1NfSUZD
SFIgPSAwMDIwMDAwCitjb25zdCBfQ01TUEFSID0gMDEwMDAwMDAwMDAwCitjb25zdCBfQVJQSFJE
X1ZPSUQgPSAweEZGRkYKK2NvbnN0IF9fX05SX2xpc3R4YXR0ciA9IDE5NAorY29uc3QgX1JUQV9V
SUQgPSAyNQorY29uc3QgX19JT0NfTlJNQVNLID0gKCgxIDw8IF9fSU9DX05SQklUUyktMSkKK2Nv
bnN0IF9JT0NTSVpFX1NISUZUID0gKF9fSU9DX1NJWkVTSElGVCkKK2NvbnN0IF9FQUdBSU4gPSAx
MQorY29uc3QgX19fRkxUX01BWF8xMF9FWFBfXyA9IDM4Citjb25zdCBfSVBWNl9NVUxUSUNBU1Rf
TE9PUCA9IDE5Citjb25zdCBfX19OUl9nZXRwZ2lkID0gMTIxCitjb25zdCBfU09fUFJJT1JJVFkg
PSAxMgorY29uc3QgX01TR19ET05UV0FJVCA9IDY0Citjb25zdCBfSU9DU0laRV9NQVNLID0gKF9f
SU9DX1NJWkVNQVNLIDw8IF9fSU9DX1NJWkVTSElGVCkKK2NvbnN0IF9fX0dDQ19BVE9NSUNfV0NI
QVJfVF9MT0NLX0ZSRUUgPSAyCitjb25zdCBfX19GTFQxMjhfRVBTSUxPTl9fID0gMS4xCitjb25z
dCBfRUlOVFIgPSA0Citjb25zdCBfUlRGX05PUE1UVURJU0MgPSAweDQwMDAKK2NvbnN0IF9SVFBS
T1RfU1RBVElDID0gNAorY29uc3QgX0lGQV9MQUJFTCA9IDMKK2NvbnN0IF9TT19QUk9UT0NPTCA9
IDM4Citjb25zdCBfX19OUl9yZWFkYWhlYWQgPSAxODcKK2NvbnN0IF9USF9TWU4gPSAweDAyCitj
b25zdCBfUlROTEdSUF9JUFY2X1BSRUZJWCA9IDE4Citjb25zdCBfSUNNUDZfRFNUX1VOUkVBQ0hf
QURNSU4gPSAxCitjb25zdCBfU0lPQ0dJRlBGTEFHUyA9IDB4ODkzNQorY29uc3QgX19TWVNfU1RB
VEZTX0ggPSAxCitjb25zdCBfX19TVERDX18gPSAxCitjb25zdCBfX19ERUMxMjhfTUFYX18gPSA5
Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUU2MTQ0Citjb25zdCBfSU42X0FERFJf
R0VOX01PREVfTk9ORSA9IDEKK2NvbnN0IF9SVE1fU0VUTElOSyA9IDE5Citjb25zdCBfRkZJX09L
ID0gMAorY29uc3QgX19fSUZMQV9TVEFUU19NQVggPSA2Citjb25zdCBfTkRfUk9VVEVSX1NPTElD
SVQgPSAxMzMKK2NvbnN0IF9QUl9TUEVDX1NUT1JFX0JZUEFTUyA9IDAKK2NvbnN0IF9TWVNfdGVl
ID0gX19fTlJfdGVlCitjb25zdCBfRlBFX0ZMVFNVQiA9IDgKK2NvbnN0IF9NU0dfV0FJVEZPUk9O
RSA9IDY1NTM2Citjb25zdCBfX1BDX0FMTE9DX1NJWkVfTUlOID0gMTgKK2NvbnN0IF9TSUdJTEwg
PSA0Citjb25zdCBfRE5fREVMRVRFID0gMHgwMDAwMDAwOAorY29uc3QgX05JX05VTUVSSUNTRVJW
ID0gMgorY29uc3QgX1BGX0lTRE4gPSAzNAorY29uc3QgX1BSX0NBUF9BTUJJRU5UID0gNDcKK2Nv
bnN0IF9JUFRPU19UT1NfTUFTSyA9IDB4MUUKK2NvbnN0IF9fU0NfTkxfTEFOR01BWCA9IDEyMAor
Y29uc3QgX1NJR0NMRCA9IF9TSUdDSExECitjb25zdCBfX19OUl9jaG1vZCA9IDkwCitjb25zdCBf
U1RET1VUX0ZJTEVOTyA9IDEKK2NvbnN0IF9fTFA2NCA9IDEKK2NvbnN0IF9fX05SX21xX2dldHNl
dGF0dHIgPSAyNDUKK2NvbnN0IF9TWVNfbGlzdGVuID0gX19fTlJfbGlzdGVuCitjb25zdCBfSUZM
QV9WRl9MSU5LX1NUQVRFX0FVVE8gPSAwCitjb25zdCBfWDg2X0VGTEFHU19SRl9CSVQgPSAxNgor
Y29uc3QgX1RDUF9USElOX0RVUEFDSyA9IDE3Citjb25zdCBfX19OUl9zeW5jID0gMTYyCitjb25z
dCBfU09fQVRUQUNIX1JFVVNFUE9SVF9FQlBGID0gNTIKK2NvbnN0IF9fX1NJWkVPRl9ET1VCTEVf
XyA9IDgKK2NvbnN0IF9FTVVMVElIT1AgPSA3MgorY29uc3QgX19QT1NJWF9RTElNSVQgPSAxCitj
b25zdCBfU1lTX2dldGl0aW1lciA9IF9fX05SX2dldGl0aW1lcgorY29uc3QgX1JUTV9HRVRRRElT
QyA9IDM4Citjb25zdCBfRlNfQ09NUFJCTEtfRkwgPSAweDAwMDAwMjAwCitjb25zdCBfU1lTX2dl
dHBncnAgPSBfX19OUl9nZXRwZ3JwCitjb25zdCBfX19GTFQxMjhfTUFOVF9ESUdfXyA9IDExMwor
Y29uc3QgX1NBX09OU1RBQ0sgPSAweDA4MDAwMDAwCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9JR01Q
X1ZFUlNJT04gPSA0MworY29uc3QgX1NZU19wa2V5X2ZyZWUgPSBfX19OUl9wa2V5X2ZyZWUKK2Nv
bnN0IF9fX05SX3NobWN0bCA9IDMxCitjb25zdCBfX01LTk9EX1ZFUiA9IDAKK2NvbnN0IF9GU19F
TkNSWVBUSU9OX01PREVfU1BFQ0sxMjhfMjU2X1hUUyA9IDcKK2NvbnN0IF9TWVNfZ2V0ZGVudHM2
NCA9IF9fX05SX2dldGRlbnRzNjQKK2NvbnN0IF9fX05SX2Nsb3NlID0gMworY29uc3QgX0ZTX0JU
UkVFX0ZMID0gMHgwMDAwMTAwMAorY29uc3QgX01TR19SU1QgPSA0MDk2Citjb25zdCBfX1NDX1JF
QUxUSU1FX1NJR05BTFMgPSA5Citjb25zdCBfSU5fQUxMX0VWRU5UUyA9IChfSU5fQUNDRVNTIHwg
X0lOX01PRElGWSB8IF9JTl9BVFRSSUIgfCBfSU5fQ0xPU0VfV1JJVEUgfCBfSU5fQ0xPU0VfTk9X
UklURSB8IF9JTl9PUEVOIHwgX0lOX01PVkVEX0ZST00gfCBfSU5fTU9WRURfVE8gfCBfSU5fQ1JF
QVRFIHwgX0lOX0RFTEVURSB8IF9JTl9ERUxFVEVfU0VMRiB8IF9JTl9NT1ZFX1NFTEYpCitjb25z
dCBfVUlOVF9GQVNUMTZfTUFYID0gKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQorY29uc3QgX1BUUkFD
RV9BVFRBQ0ggPSAxNgorY29uc3QgX19fTlJfbWtub2RhdCA9IDI1OQorY29uc3QgX1NDTmk4ID0g
ImhoaSIKK2NvbnN0IF9fU0NfTEVWRUwxX0RDQUNIRV9BU1NPQyA9IDE4OQorY29uc3QgX1JUTV9O
RVdDQUNIRVJFUE9SVCA9IDk2Citjb25zdCBfU09fUEVFUk5BTUUgPSAyOAorY29uc3QgX1g4Nl9D
UjRfT1NGWFNSX0JJVCA9IDkKK2NvbnN0IF9fX0RCTF9NSU5fMTBfRVhQX18gPSAoLTMwNykKK2Nv
bnN0IF9fUE9TSVgyX0NIQVJDTEFTU19OQU1FX01BWCA9IDE0Citjb25zdCBfX19CSVRfVFlQRVNf
REVGSU5FRF9fID0gMQorY29uc3QgX19CSVRTX1NUQVRfSCA9IDEKK2NvbnN0IF9TSUdLSUxMID0g
OQorY29uc3QgX19fTlJfbW1hcCA9IDkKK2NvbnN0IF9fRElSRU5UX0ggPSAxCitjb25zdCBfUlRB
X0NBQ0hFSU5GTyA9IDEyCitjb25zdCBfUlRGX01UVSA9IDB4MDA0MAorY29uc3QgX05EVFBBX1FV
RVVFX0xFTkJZVEVTID0gMTYKK2NvbnN0IF9DWDg2X0NDUjQgPSAweGU4Citjb25zdCBfSUZBX1VO
U1BFQyA9IDAKK2NvbnN0IF9fX05SX3NldHJsaW1pdCA9IDE2MAorY29uc3QgX1NPX01FTUlORk8g
PSA1NQorY29uc3QgX19TQ19OUFJPQ0VTU09SU19PTkxOID0gODQKK2NvbnN0IF9NQ0FTVF9KT0lO
X0dST1VQID0gNDIKK2NvbnN0IF9FT1ZFUkZMT1cgPSA3NQorY29uc3QgX01BRFZfV0lMTE5FRUQg
PSAzCitjb25zdCBfQVJQSFJEX0hJUFBJID0gNzgwCitjb25zdCBfTlNJRyA9IF9fTlNJRworY29u
c3QgX0FGX1JPVVRFID0gX1BGX1JPVVRFCitjb25zdCBfU0lPQ0dTVEFNUE5TID0gMHg4OTA3Citj
b25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfU1VDQ0VTUyA9IDAKK2NvbnN0IF9JRkxBX01BQ1NFQ19S
RVBMQVlfUFJPVEVDVCA9IDEyCitjb25zdCBfVElPQ01TRVQgPSAweDU0MTgKK2NvbnN0IF9ORVRM
SU5LX0tPQkpFQ1RfVUVWRU5UID0gMTUKK2NvbnN0IF9fUE9TSVgyX0VYUFJfTkVTVF9NQVggPSAz
MgorY29uc3QgX0lQX01VTFRJQ0FTVF9MT09QID0gMzQKK2NvbnN0IF9SVE1fR0VUTURCID0gODYK
K2NvbnN0IF9fX0lOVF9MRUFTVDhfV0lEVEhfXyA9IDgKK2NvbnN0IF9fX05SX3J0X3NpZ3F1ZXVl
aW5mbyA9IDEyOQorY29uc3QgX1g4Nl9DUjRfUEtFX0JJVCA9IDIyCitjb25zdCBfSUZMQV9CT05E
X1NMQVZFX1BFUk1fSFdBRERSID0gNAorY29uc3QgX19QT1NJWF9USFJFQURfUFJJT19JTkhFUklU
ID0gMjAwODA5Citjb25zdCBfRVBPTExNU0cgPSAxMDI0Citjb25zdCBfSUZMQV9HU09fTUFYX1NJ
WkUgPSA0MQorY29uc3QgX19TQ19MRVZFTDFfSUNBQ0hFX0xJTkVTSVpFID0gMTg3Citjb25zdCBf
X19OUl9tc3luYyA9IDI2Citjb25zdCBfUlRBX01VTFRJUEFUSCA9IDkKK2NvbnN0IF9GRjAgPSAw
MDAwMDAwCitjb25zdCBfRkYxID0gMDEwMDAwMAorY29uc3QgX0VUSF9QX0FUTUZBVEUgPSAweDg4
ODQKK2NvbnN0IF9YODZfRUZMQUdTX0lEX0JJVCA9IDIxCitjb25zdCBfX19OUl9iaW5kID0gNDkK
K2NvbnN0IF9fREVGQVVMVF9TT1VSQ0UgPSAxCitjb25zdCBfSVBPUFRfU0VDVVJfUkVTVFIgPSAw
eGFmMTMKK2NvbnN0IF9JRkxBX1ZYTEFOX0NPTExFQ1RfTUVUQURBVEEgPSAyNQorY29uc3QgX1NU
QVRYX1VJRCA9IDB4MDAwOAorY29uc3QgX1BUUkFDRV9HRVRGUFhSRUdTID0gMTgKK2NvbnN0IF9T
WVNfZ2V0cHJpb3JpdHkgPSBfX19OUl9nZXRwcmlvcml0eQorY29uc3QgX0hBVkVfUElQRTIgPSAx
Citjb25zdCBfX19OUl9jbG9ja19zZXR0aW1lID0gMjI3Citjb25zdCBfX19OUl9tdW5sb2NrID0g
MTUwCitjb25zdCBfUlRQUk9UX09TUEYgPSAxODgKK2NvbnN0IF9SVE1fR0VUTElOSyA9IDE4Citj
b25zdCBfX19OUl9hbGFybSA9IDM3Citjb25zdCBfX19PX0RTWU5DID0gMDEwMDAwCitjb25zdCBf
UFJJT19QR1JQID0gMQorY29uc3QgX19fTlJfc3luY2ZzID0gMzA2Citjb25zdCBfRU5PVFNVUCA9
IF9FT1BOT1RTVVBQCitjb25zdCBfTkVUTElOS19VTlVTRUQgPSAxCitjb25zdCBfSUNNUDZfUlJf
UENPVVNFX0ZMQUdTX0RFQ1JWTFRJTUUgPSAweDgwCitjb25zdCBfSEFWRV9TWVNfU09DS0VUX0gg
PSAxCitjb25zdCBfU1lTX3NldF9yb2J1c3RfbGlzdCA9IF9fX05SX3NldF9yb2J1c3RfbGlzdAor
Y29uc3QgX0NMT0NLX01PTk9UT05JQ19DT0FSU0UgPSA2Citjb25zdCBfX0NTX1hCUzVfTFBCSUdf
T0ZGQklHX0NGTEFHUyA9IDExMTIKK2NvbnN0IF9fQVNNX1g4Nl9VTklTVERfNjRfSCA9IDEKK2Nv
bnN0IF9TWVNfcHJvY2Vzc192bV9yZWFkdiA9IF9fX05SX3Byb2Nlc3Nfdm1fcmVhZHYKK2NvbnN0
IF9YODZfQ1IwX01QX0JJVCA9IDEKK2NvbnN0IF9JUE9QVF9NSU5PRkYgPSA0Citjb25zdCBfSVBW
Nl9WNk9OTFkgPSAyNgorY29uc3QgX1g4Nl9DUjRfRlNHU0JBU0VfQklUID0gMTYKK2NvbnN0IF9T
SUdFVl9TSUdOQUwgPSAwCitjb25zdCBfU1lTX3J0X3NpZ3N1c3BlbmQgPSBfX19OUl9ydF9zaWdz
dXNwZW5kCitjb25zdCBfUlRNX05FV05FSUdIID0gMjgKK2NvbnN0IF9fX1BUSFJFQURfUldMT0NL
X0lOVF9GTEFHU19TSEFSRUQgPSAxCitjb25zdCBfX19JTlRfTEVBU1Q2NF9XSURUSF9fID0gNjQK
K2NvbnN0IF9TWVNfZ2V0cGVlcm5hbWUgPSBfX19OUl9nZXRwZWVybmFtZQorY29uc3QgX19fTlJf
Y2hkaXIgPSA4MAorY29uc3QgX19fTlJfZXhpdF9ncm91cCA9IDIzMQorY29uc3QgX19fUE9TSVgy
X1RISVNfVkVSU0lPTiA9IDIwMDgwOQorY29uc3QgX05MMCA9IDAwMDAwMDAKK2NvbnN0IF9fX0lG
TEFfUk1ORVRfTUFYID0gMworY29uc3QgX19TQ18yX0NfVkVSU0lPTiA9IDk2Citjb25zdCBfQVJQ
SFJEX1NMSVA2ID0gMjU4Citjb25zdCBfU1lTX2dldGVnaWQgPSBfX19OUl9nZXRlZ2lkCitjb25z
dCBfX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgPSA3MworY29uc3QgX1NJR1RTVFAg
PSAyMAorY29uc3QgX01TR19GSU4gPSA1MTIKK2NvbnN0IF9ORFVTRVJPUFRfU1JDQUREUiA9IDEK
K2NvbnN0IF9JTl9DTEFTU0NfSE9TVCA9ICgweGZmZmZmZmZmICYgXl9JTl9DTEFTU0NfTkVUKQor
Y29uc3QgX0NIQVJfQklUID0gX19fQ0hBUl9CSVRfXworY29uc3QgX01DTF9GVVRVUkUgPSAyCitj
b25zdCBfUlRBWF9VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9CT05EX0ZBSUxfT1ZFUl9NQUMgPSAx
MworY29uc3QgX19fTERCTF9IQVNfREVOT1JNX18gPSAxCitjb25zdCBfU0lHSU9UID0gX1NJR0FC
UlQKK2NvbnN0IF9fX05SX3Zmb3JrID0gNTgKK2NvbnN0IF9fQklUU19QVEhSRUFEVFlQRVNfQVJD
SF9IID0gMQorY29uc3QgX05EVEFfUEFEID0gOQorY29uc3QgX19fTlJfc3dhcG9mZiA9IDE2OAor
Y29uc3QgX0lGTEFfTUFDU0VDX1BST1RFQ1QgPSA4Citjb25zdCBfQVRfU1lNTElOS19GT0xMT1cg
PSAweDQwMAorY29uc3QgX1BSX01DRV9LSUxMX0xBVEUgPSAwCitjb25zdCBfUE9SVF9QUk9GSUxF
X1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMgPSAyNjAKK2NvbnN0IF9GU19YRkxBR19F
WFRTSVpFID0gMHgwMDAwMDgwMAorY29uc3QgX19DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdT
ID0gMTEwNQorY29uc3QgX0ZTX1hGTEFHX1JUSU5IRVJJVCA9IDB4MDAwMDAxMDAKK2NvbnN0IF9G
UEVfSU5UT1ZGID0gMgorY29uc3QgX1NIUlRfTUFYID0gX19fU0hSVF9NQVhfXworY29uc3QgX19f
TlJfcHJvY2Vzc192bV9yZWFkdiA9IDMxMAorY29uc3QgX01TX0RJUlNZTkMgPSAxMjgKK2NvbnN0
IF9OX1NZTkNfUFBQID0gMTQKK2NvbnN0IF9fTUtOT0RfVkVSX0xJTlVYID0gMAorY29uc3QgX0lQ
X1JFQ1ZGUkFHU0laRSA9IDI1Citjb25zdCBfSUZMQV9CUl9WTEFOX1NUQVRTX0VOQUJMRUQgPSA0
MQorY29uc3QgX1BBR0VfU0hJRlQgPSAxMgorY29uc3QgX0lMTF9JTExPUE4gPSAyCitjb25zdCBf
TE9DS19SRUFEID0gNjQKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfQURfQUdHUkVHQVRPUl9JRCA9
IDYKK2NvbnN0IF9TT0xfWDI1ID0gMjYyCitjb25zdCBfSVBUT1NfTE9XREVMQVkgPSAweDEwCitj
b25zdCBfX1NZU19JT0NUTF9IID0gMQorY29uc3QgX1NZU19nZXRzaWQgPSBfX19OUl9nZXRzaWQK
K2NvbnN0IF9fX1NfSUZTT0NLID0gMDE0MDAwMAorY29uc3QgX1BSX1NFVF9NTV9BUkdfRU5EID0g
OQorY29uc3QgX0ZGSV9UUkFNUE9MSU5FX1NJWkUgPSAyNAorY29uc3QgX0VUSF9QX05DU0kgPSAw
eDg4RjgKK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5QUk9HUkVTUyA9IDI1NworY29u
c3QgX1NBX1NUQUNLID0gX1NBX09OU1RBQ0sKK2NvbnN0IF9JRkFfQU5ZQ0FTVCA9IDUKK2NvbnN0
IF9SVEFYX0NDX0FMR08gPSAxNgorY29uc3QgX05VRF9QUk9CRSA9IDB4MTAKK2NvbnN0IF9QVFJB
Q0VfUEVFS1VTRVIgPSAzCitjb25zdCBfSUNNUDZfVElNRV9FWENFRURfVFJBTlNJVCA9IDAKK2Nv
bnN0IF9fU0NfUFJJT1JJVFlfU0NIRURVTElORyA9IDEwCitjb25zdCBfX0NTX1BPU0lYX1Y3X0lM
UDMyX09GRkJJR19MSUJTID0gMTEzOAorY29uc3QgX1NZU19yZWFkbGlua2F0ID0gX19fTlJfcmVh
ZGxpbmthdAorY29uc3QgX1NfSUVYRUMgPSBfU19JWFVTUgorY29uc3QgX1RDUF9DTE9TSU5HID0g
MTEKK2NvbnN0IF9fQklUU19USU1FX0ggPSAxCitjb25zdCBfSVBfTVNGSUxURVIgPSA0MQorY29u
c3QgX0hBVkVfQVNfWDg2X0FFUyA9IDEKK2NvbnN0IF9fX1JMSU1JVF9MT0NLUyA9IDEwCitjb25z
dCBfVEhfVVJHID0gMHgyMAorY29uc3QgX09fU1lOQyA9IDA0MDEwMDAwCitjb25zdCBfX1NZU19V
SU9fSCA9IDEKK2NvbnN0IF9NQUNTRUNfVkFMSURBVEVfQ0hFQ0sgPSAxCitjb25zdCBfSUdOQ1Ig
PSAwMDAwMjAwCitjb25zdCBfX19JTlRQVFJfV0lEVEhfXyA9IDY0Citjb25zdCBfX0NTX1BPU0lY
X1Y3X0xQNjRfT0ZGNjRfQ0ZMQUdTID0gMTE0MAorY29uc3QgX0JVU19PQkpFUlIgPSAzCitjb25z
dCBfVENQX0NPTkdFU1RJT04gPSAxMworY29uc3QgX19fTlJfcXVlcnlfbW9kdWxlID0gMTc4Citj
b25zdCBfTkxNX0ZfUk9PVCA9IDB4MTAwCitjb25zdCBfRUJBRFJRQyA9IDU2Citjb25zdCBfU1lT
X21zZ2N0bCA9IF9fX05SX21zZ2N0bAorY29uc3QgX0JQRl9NRU1XT1JEUyA9IDE2Citjb25zdCBf
SUZMQV9WRl9WTEFOX0lORk8gPSAxCitjb25zdCBfUlROTEdSUF9ORF9VU0VST1BUID0gMjAKK2Nv
bnN0IF9BVEZfRE9OVFBVQiA9IDB4NDAKK2NvbnN0IF9fX05SX3NodXRkb3duID0gNDgKK2NvbnN0
IF9SVE5MR1JQX01QTFNfTkVUQ09ORiA9IDI5Citjb25zdCBfX1NDX0lOVF9NQVggPSAxMDQKK2Nv
bnN0IF9fX05SX3NldHVpZCA9IDEwNQorY29uc3QgX0hVUENMID0gMDAwMjAwMAorY29uc3QgX0FG
X1JEUyA9IF9QRl9SRFMKK2NvbnN0IF9QUl9TRVRfVElNRVJTTEFDSyA9IDI5Citjb25zdCBfQ0xP
TkVfU0lHSEFORCA9IDB4MDAwMDA4MDAKK2NvbnN0IF9QUl9TRVRfTU1fQVJHX1NUQVJUID0gOAor
Y29uc3QgX19fTlJfZHVwMiA9IDMzCitjb25zdCBfX19OUl9kdXAzID0gMjkyCitjb25zdCBfX1BP
U0lYX1RIUkVBRF9QUklPX1BST1RFQ1QgPSAyMDA4MDkKK2NvbnN0IF9QUl9TRVRfTU1fTUFQID0g
MTQKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0NGTEFHUyA9IDExMjAKK2NvbnN0
IF9fX05SX3NjaGVkX2dldHNjaGVkdWxlciA9IDE0NQorY29uc3QgX19TQ19YT1BFTl9DUllQVCA9
IDkyCitjb25zdCBfUlRNX05FV1JPVVRFID0gMjQKK2NvbnN0IF9TSV9MT0FEX1NISUZUID0gMTYK
K2NvbnN0IF9QUklkTEVBU1QxNiA9ICJkIgorY29uc3QgX01PRF9FU1RFUlJPUiA9IF9BREpfRVNU
RVJST1IKK2NvbnN0IF9JUFBPUlRfRUZTU0VSVkVSID0gNTIwCitjb25zdCBfQUZfSUVFRTgwMjE1
NCA9IF9QRl9JRUVFODAyMTU0Citjb25zdCBfU1lTX3NpZ25hbGZkNCA9IF9fX05SX3NpZ25hbGZk
NAorY29uc3QgX1RJT0NTU09GVENBUiA9IDB4NTQxQQorY29uc3QgX19fTlJfdW1vdW50MiA9IDE2
NgorY29uc3QgX0lGTEFfVlJGX1RBQkxFID0gMQorY29uc3QgX1NPX1RJTUVTVEFNUElORyA9IDM3
Citjb25zdCBfTVNfUkRPTkxZID0gMQorY29uc3QgX1NLRl9ORVRfT0ZGID0gKC0weDEwMDAwMCkK
K2NvbnN0IF9ETl9BQ0NFU1MgPSAweDAwMDAwMDAxCitjb25zdCBfU1lTX2FjY2VzcyA9IF9fX05S
X2FjY2VzcworY29uc3QgX19TQ19WNl9MUEJJR19PRkZCSUcgPSAxNzkKK2NvbnN0IF9JUE9QVF9S
RVNFUlZFRDEgPSAweDIwCitjb25zdCBfVENQX0NPT0tJRV9NQVggPSAxNgorY29uc3QgX1JNTkVU
X0ZMQUdTX0lOR1JFU1NfREVBR0dSRUdBVElPTiA9ICgxIDw8IDApCitjb25zdCBfTVNfU1RSSUNU
QVRJTUUgPSAxNjc3NzIxNgorY29uc3QgX19fTlJfY2xvY2tfZ2V0dGltZSA9IDIyOAorY29uc3Qg
X19fTlJfc2VtdGltZWRvcCA9IDIyMAorY29uc3QgX19VVFNOQU1FX1JFTEVBU0VfTEVOR1RIID0g
X19VVFNOQU1FX0xFTkdUSAorY29uc3QgX19fREVDMzJfTUlOX0VYUF9fID0gKC05NCkKK2NvbnN0
IF9YODZfRUZMQUdTX0ZJWEVEX0JJVCA9IDEKK2NvbnN0IF9IQVZFX1NZU19QUkNUTF9IID0gMQor
Y29uc3QgX19QT1NJWF9SRUVOVFJBTlRfRlVOQ1RJT05TID0gMQorY29uc3QgX0JMT0NLX1NJWkVf
QklUUyA9IDEwCitjb25zdCBfRUNPTk5SRVNFVCA9IDEwNAorY29uc3QgX0lGTEFfVkZfSUJfUE9S
VF9HVUlEID0gMTEKK2NvbnN0IF9fX0RCTF9ERUNJTUFMX0RJR19fID0gMTcKK2NvbnN0IF9IQVZF
X09QRU5BVCA9IDEKK2NvbnN0IF9UVU5fUEtUX1NUUklQID0gMHgwMDAxCitjb25zdCBfVlNUT1Ag
PSA5Citjb25zdCBfSVBUT1NfRFNDUF9BRjExID0gMHgyOAorY29uc3QgX0lQVE9TX0RTQ1BfQUYx
MiA9IDB4MzAKK2NvbnN0IF9JUFRPU19EU0NQX0FGMTMgPSAweDM4Citjb25zdCBfX19OUl9yZWN2
bW1zZyA9IDI5OQorY29uc3QgX19fVVNFX1hPUEVOMks4ID0gMQorY29uc3QgX1BSX0ZQX0VYQ19E
SVYgPSAweDAxMDAwMAorY29uc3QgX0NMT05FX0RFVEFDSEVEID0gMHgwMDQwMDAwMAorY29uc3Qg
X1NZU19nZXRfcm9idXN0X2xpc3QgPSBfX19OUl9nZXRfcm9idXN0X2xpc3QKK2NvbnN0IF9TT19E
RVRBQ0hfQlBGID0gX1NPX0RFVEFDSF9GSUxURVIKK2NvbnN0IF9TVEFUWF9BVFRSX0FVVE9NT1VO
VCA9IDB4MTAwMAorY29uc3QgX19QT1NJWF9USU1FUlMgPSAyMDA4MDkKK2NvbnN0IF9UQ1BJX09Q
VF9FQ05fU0VFTiA9IDE2Citjb25zdCBfQVJQSFJEX0FTSCA9IDc4MQorY29uc3QgX01TX1JNVF9N
QVNLID0gKF9NU19SRE9OTFl8X01TX1NZTkNIUk9OT1VTfF9NU19NQU5ETE9DS3xfTVNfSV9WRVJT
SU9OfCBfTVNfTEFaWVRJTUUpCitjb25zdCBfU1lTX21xX25vdGlmeSA9IF9fX05SX21xX25vdGlm
eQorY29uc3QgX0lGRl9VUCA9IDEKK2NvbnN0IF9JUFBST1RPX0ZSQUdNRU5UID0gNDQKK2NvbnN0
IF9TQ05pTEVBU1QxNiA9ICJoaSIKK2NvbnN0IF9GX1NFQUxfU0hSSU5LID0gMHgwMDAyCitjb25z
dCBfRlNfTk9UQUlMX0ZMID0gMHgwMDAwODAwMAorY29uc3QgX1NUQVRYX0JUSU1FID0gMHgwODAw
Citjb25zdCBfX19JRkxBX0JSUE9SVF9NQVggPSAzNQorY29uc3QgX19fTlJfZXhlY3ZlID0gNTkK
K2NvbnN0IF9fX1VTRV9FWFRFUk5fSU5MSU5FUyA9IDEKK2NvbnN0IF9JUF9CSU5EX0FERFJFU1Nf
Tk9fUE9SVCA9IDI0Citjb25zdCBfSU5UOF9NQVggPSAoMTI3KQorY29uc3QgX01BRFZfU0VRVUVO
VElBTCA9IDIKK2NvbnN0IF9GX1dSTENLID0gMQorY29uc3QgX0lQUE9SVF9VU0VSUkVTRVJWRUQg
PSA1MDAwCitjb25zdCBfSVBfUE1UVURJU0NfV0FOVCA9IDEKK2NvbnN0IF9TWVNfY3JlYXRlX21v
ZHVsZSA9IF9fX05SX2NyZWF0ZV9tb2R1bGUKK2NvbnN0IF9JRkxBX0JSX1JPT1RfSUQgPSAxMAor
Y29uc3QgX1NZU19waXZvdF9yb290ID0gX19fTlJfcGl2b3Rfcm9vdAorY29uc3QgX0IyMzA0MDAg
PSAwMDEwMDAzCitjb25zdCBfU09MX1RMUyA9IDI4MgorY29uc3QgX19ORVRfUk9VVEVfSCA9IDEK
K2NvbnN0IF9FTElCQkFEID0gODAKK2NvbnN0IF9SUE1fUENPX1NFVEdMT0JBTCA9IDMKK2NvbnN0
IF9CUklER0VfTU9ERV9VTlNQRUMgPSAwCitjb25zdCBfRU5PQlVGUyA9IDEwNQorY29uc3QgX19f
U0hSVF9XSURUSF9fID0gMTYKK2NvbnN0IF9SVF9DTEFTU19VTlNQRUMgPSAwCitjb25zdCBfX19G
TFQxMjhfTUFYX0VYUF9fID0gMTYzODQKK2NvbnN0IF9JUFRPU19EU0NQX0FGMjEgPSAweDQ4Citj
b25zdCBfSVBUT1NfRFNDUF9BRjIyID0gMHg1MAorY29uc3QgX0lQVE9TX0RTQ1BfQUYyMyA9IDB4
NTgKK2NvbnN0IF9fX0ZMVDMyWF9NQVhfMTBfRVhQX18gPSAzMDgKK2NvbnN0IF9fU0NfVUlPX01B
WElPViA9IDYwCitjb25zdCBfWDg2X0NSMF9FTV9CSVQgPSAyCitjb25zdCBfTlRGX09GRkxPQURF
RCA9IDB4MjAKK2NvbnN0IF9TWVNfaW9wcmlvX3NldCA9IF9fX05SX2lvcHJpb19zZXQKK2NvbnN0
IF9fX05SX2dldHRpbWVvZmRheSA9IDk2Citjb25zdCBfUFRSQUNFX0NPTlQgPSA3Citjb25zdCBf
VElPQ1NQVExDS192YWwgPSAxMDc0MDI1NTIxCitjb25zdCBfUFRSQUNFX1BFRUtURVhUID0gMQor
Y29uc3QgX05FVExJTktfWEZSTSA9IDYKK2NvbnN0IF9UQ0FfVU5TUEVDID0gMAorY29uc3QgX0VU
SF9QXzgwMjFRID0gMHg4MTAwCitjb25zdCBfSUZMQV9WTEFOX0lOR1JFU1NfUU9TID0gNAorY29u
c3QgX0VQT0xMUkRCQU5EID0gMTI4Citjb25zdCBfU1lTX3VtYXNrID0gX19fTlJfdW1hc2sKK2Nv
bnN0IF9QQUNLRVRfTVJfVU5JQ0FTVCA9IDMKK2NvbnN0IF9OTE1fRl9FQ0hPID0gMHgwOAorY29u
c3QgX0ZGSV9UWVBFX1NJTlQxNiA9IDgKK2NvbnN0IF9fU0NfVFJBQ0VfVVNFUl9FVkVOVF9NQVgg
PSAyNDUKK2NvbnN0IF9TWVNfcmVjdm1zZyA9IF9fX05SX3JlY3Ztc2cKK2NvbnN0IF9fX05SX3Nj
aGVkX2dldF9wcmlvcml0eV9taW4gPSAxNDcKK2NvbnN0IF9TWVNfcHBvbGwgPSBfX19OUl9wcG9s
bAorY29uc3QgX0ZGSV9UWVBFX1BPSU5URVIgPSAxNAorY29uc3QgX0lGQV9SVF9QUklPUklUWSA9
IDkKK2NvbnN0IF9SVEFYX0lOSVRDV05EID0gMTEKK2NvbnN0IF9JUF9QTVRVRElTQ19JTlRFUkZB
Q0UgPSA0Citjb25zdCBfSUZMQV9QT1JUX1VOU1BFQyA9IDAKK2NvbnN0IF9TSUdfU0VUTUFTSyA9
IDIKK2NvbnN0IF9TT0xfSUNNUFY2ID0gNTgKK2NvbnN0IF9TQ054MzIgPSAieCIKK2NvbnN0IF9U
Q1BfTVNTID0gNTEyCitjb25zdCBfRVRIX1BfODAyMjEgPSAweDg5MTcKK2NvbnN0IF9DUjIgPSAw
MDAyMDAwCitjb25zdCBfQ1IzID0gMDAwMzAwMAorY29uc3QgX1NZU19sc2VlayA9IF9fX05SX2xz
ZWVrCitjb25zdCBfX0ZJTEVfT0ZGU0VUX0JJVFMgPSA2NAorY29uc3QgX19TQ19DT0xMX1dFSUdI
VFNfTUFYID0gNDAKK2NvbnN0IF9fU0NfVEhSRUFEX0NQVVRJTUUgPSAxMzkKK2NvbnN0IF9QT1JU
X1JFUVVFU1RfUFJFQVNTT0NJQVRFX1JSID0gMQorY29uc3QgX0lOX1VOTU9VTlQgPSAweDAwMDAy
MDAwCitjb25zdCBfSVBUT1NfRFNDUF9BRjMxID0gMHg2OAorY29uc3QgX0lQVE9TX0RTQ1BfQUYz
MiA9IDB4NzAKK2NvbnN0IF9JUFRPU19EU0NQX0FGMzMgPSAweDc4Citjb25zdCBfSUZMQV9WWExB
Tl9SRU1DU1VNX1JYID0gMjIKK2NvbnN0IF9FUE9MTEVYQ0xVU0lWRSA9IDI2ODQzNTQ1NgorY29u
c3QgX19fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzEgPSAxCitjb25zdCBfUFRSQUNF
X0dFVEVWRU5UTVNHID0gMTY4OTcKK2NvbnN0IF9MT0NLX01BTkQgPSAzMgorY29uc3QgX05FVExJ
TktfVVNFUlNPQ0sgPSAyCitjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0lOVkFMSUQgPSAwCitj
b25zdCBfVFVOX1RYX1RJTUVTVEFNUCA9IDEKK2NvbnN0IF9TWVNfcHdyaXRldjIgPSBfX19OUl9w
d3JpdGV2MgorY29uc3QgX19fSU5UX0xFQVNUMTZfTUFYX18gPSAweDdmZmYKK2NvbnN0IF9TWVNf
cHJlYWQ2NCA9IF9fX05SX3ByZWFkNjQKK2NvbnN0IF9QUklvTEVBU1QxNiA9ICJvIgorY29uc3Qg
X1NDTmlMRUFTVDMyID0gImkiCitjb25zdCBfU1lTX3NlbWN0bCA9IF9fX05SX3NlbWN0bAorY29u
c3QgX19QT1NJWF9OR1JPVVBTX01BWCA9IDgKK2NvbnN0IF9CNDAwMDAwMCA9IDAwMTAwMTcKK2Nv
bnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5WQUxJRCA9IDI1OAorY29uc3QgX1BBQ0tFVF9G
QU5PVVRfREFUQSA9IDIyCitjb25zdCBfQ1JFQUQgPSAwMDAwMjAwCitjb25zdCBfRVRIX1BfUFBQ
X01QID0gMHgwMDA4Citjb25zdCBfX19GTFQzMlhfREVDSU1BTF9ESUdfXyA9IDE3Citjb25zdCBf
WDg2X0NSNF9QVklfQklUID0gMQorY29uc3QgX1NZU19lcG9sbF9jcmVhdGUxID0gX19fTlJfZXBv
bGxfY3JlYXRlMQorY29uc3QgX0lGTEFfQlJQT1JUX0NPTkZJR19QRU5ESU5HID0gMjAKK2NvbnN0
IF9fX0RCTF9NQVhfRVhQX18gPSAxMDI0Citjb25zdCBfTUFQX1NZTkMgPSAweDgwMDAwCitjb25z
dCBfUkVHX1JCUCA9IDEwCitjb25zdCBfRUtFWVJFVk9LRUQgPSAxMjgKK2NvbnN0IF9fUE9TSVhf
VFJBQ0VfRVZFTlRfRklMVEVSID0gLTEKK2NvbnN0IF9BRl9MT0NBTCA9IF9QRl9MT0NBTAorY29u
c3QgX1JFR19SQlggPSAxMQorY29uc3QgX1NDTV9USU1FU1RBTVBJTkcgPSBfU09fVElNRVNUQU1Q
SU5HCitjb25zdCBfX19OUl9nZXRwZ3JwID0gMTExCitjb25zdCBfX19OUl9ydF9zaWd0aW1lZHdh
aXQgPSAxMjgKK2NvbnN0IF9fX0ZEX1pFUk9fU1RPUyA9ICJzdG9zcSIKK2NvbnN0IF9QVFJBQ0Vf
UEVFS0RBVEEgPSAyCitjb25zdCBfUFRSQUNFX1NZU0NBTEwgPSAyNAorY29uc3QgX1NDTnUzMiA9
ICJ1IgorY29uc3QgX0xJTlVYX1JFQk9PVF9DTURfU1dfU1VTUEVORCA9IDB4RDAwMEZDRTIKK2Nv
bnN0IF9PX0RJUkVDVE9SWSA9IF9fX09fRElSRUNUT1JZCitjb25zdCBfRVRIRVJUWVBFX1NQUklU
RSA9IDB4MDUwMAorY29uc3QgX1NPQ0tfUkFXID0gMworY29uc3QgX09fTk9BVElNRSA9IF9fX09f
Tk9BVElNRQorY29uc3QgX0lQVE9TX0RTQ1BfQUY0MSA9IDB4ODgKK2NvbnN0IF9JUFRPU19EU0NQ
X0FGNDIgPSAweDkwCitjb25zdCBfSVBUT1NfRFNDUF9BRjQzID0gMHg5OAorY29uc3QgX1RJT0NT
UEdSUCA9IDB4NTQxMAorY29uc3QgX05EX09QVF9SRURJUkVDVEVEX0hFQURFUiA9IDQKK2NvbnN0
IF9SVEFYX0ZFQVRVUkVfQUxMRlJBRyA9ICgxIDw8IDMpCitjb25zdCBfSUNNUDZfRFNUX1VOUkVB
Q0hfQkVZT05EU0NPUEUgPSAyCitjb25zdCBfSVBPUFRfVElNRVNUQU1QID0gX0lQT1BUX1RTCitj
b25zdCBfUlRNX0dFVERDQiA9IDc4Citjb25zdCBfV09SRF9CSVQgPSAzMgorY29uc3QgX1RDQV9T
VEFUUyA9IDMKK2NvbnN0IF9OX1NMSVAgPSAxCitjb25zdCBfVENQX1NBVkVEX1NZTiA9IDI4Citj
b25zdCBfX1NDX0JDX1NUUklOR19NQVggPSAzOQorY29uc3QgX1JUQVhfRkVBVFVSRV9TQUNLID0g
KDEgPDwgMSkKK2NvbnN0IF9fWE9QRU5fU09VUkNFID0gNzAwCitjb25zdCBfX0FURklMRV9TT1VS
Q0UgPSAxCitjb25zdCBfUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUgPSA1Citjb25zdCBfSUNNUDZf
UlJfRkxBR1NfUFJFVkRPTkUgPSAweDA4Citjb25zdCBfRUxOUk5HID0gNDgKK2NvbnN0IF9fUE9T
SVhfQUlPX0xJU1RJT19NQVggPSAyCitjb25zdCBfUlROX1VOSUNBU1QgPSAxCitjb25zdCBfUlRB
X01BUksgPSAxNgorY29uc3QgX1NJR1NFR1YgPSAxMQorY29uc3QgX05BTUVfTUFYID0gMjU1Citj
b25zdCBfQUZfVlNPQ0sgPSBfUEZfVlNPQ0sKK2NvbnN0IF9GX1VMT0NLID0gMAorY29uc3QgX01T
R19CQVRDSCA9IDI2MjE0NAorY29uc3QgX0ZQRV9GTFRVTkQgPSA1Citjb25zdCBfX19JRkxBX1ZG
X0xJTktfU1RBVEVfTUFYID0gMworY29uc3QgX1JUTkxHUlBfRENCID0gMjMKK2NvbnN0IF9FUEVS
TSA9IDEKK2NvbnN0IF9SRUdfUkNYID0gMTQKK2NvbnN0IF9NU19OT0RJUkFUSU1FID0gMjA0OAor
Y29uc3QgX19URVJNSU9TX0ggPSAxCitjb25zdCBfX19JTlRNQVhfV0lEVEhfXyA9IDY0Citjb25z
dCBfSUZMQV9CUlBPUlRfR1VBUkQgPSA1Citjb25zdCBfU1lTX3J0X3NpZ3BlbmRpbmcgPSBfX19O
Ul9ydF9zaWdwZW5kaW5nCitjb25zdCBfSUZMQV9NQVNURVIgPSAxMAorY29uc3QgX0VPUE5PVFNV
UFAgPSA5NQorY29uc3QgX0NTNSA9IDAwMDAwMDAKK2NvbnN0IF9fUE9TSVgyX1ZFUlNJT04gPSBf
X19QT1NJWDJfVEhJU19WRVJTSU9OCitjb25zdCBfX1NDX0dFVFBXX1JfU0laRV9NQVggPSA3MAor
Y29uc3QgX0lQX1JFQ1ZFUlIgPSAxMQorY29uc3QgX0hBVkVfU0lOTCA9IDEKK2NvbnN0IF9fQ1Nf
UE9TSVhfVjdfSUxQMzJfT0ZGQklHX0NGTEFHUyA9IDExMzYKK2NvbnN0IF9fQ1NfTEZTNjRfTElO
VEZMQUdTID0gMTAwNworY29uc3QgX1BSSXhGQVNUOCA9ICJ4IgorY29uc3QgX1BSSW9MRUFTVDMy
ID0gIm8iCitjb25zdCBfUFJJT19VU0VSID0gMgorY29uc3QgX0lGTEFfTkVXX0lGSU5ERVggPSA0
OQorY29uc3QgX0lGTEFfVlhMQU5fTE9DQUwgPSA0Citjb25zdCBfUFJfU0VUX01NX0VYRV9GSUxF
ID0gMTMKK2NvbnN0IF9UQ1BfU19EQVRBX09VVCA9ICgxIDw8IDMpCitjb25zdCBfQVRGX01BR0lD
ID0gMHg4MAorY29uc3QgX05EVFBBX0dDX1NUQUxFVElNRSA9IDYKK2NvbnN0IF9fX2s4ID0gMQor
Y29uc3QgX19fSU5UX0ZBU1QzMl9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX19Y
QlM1X0xQQklHX09GRkJJRyA9IC0xCitjb25zdCBfU0lPQ0RFTE1VTFRJID0gMHg4OTMyCitjb25z
dCBfVFVOU0VUTk9DU1VNX3ZhbCA9IDEwNzQwMjU2NzIKK2NvbnN0IF9fX0xEQkxfREVOT1JNX01J
Tl9fID0gMS4xCitjb25zdCBfUEZfVU5TUEVDID0gMAorY29uc3QgX0JQRl9NT0QgPSAweDkwCitj
b25zdCBfUkVHX1JESSA9IDgKK2NvbnN0IF9CUEZfTUlTQyA9IDB4MDcKK2NvbnN0IF9GX0dFVE9X
TiA9IF9fX0ZfR0VUT1dOCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9MQVNUX01FTUJFUl9DTlQgPSAy
OAorY29uc3QgX1RDUE9QVF9TQUNLX1BFUk1JVFRFRCA9IDQKK2NvbnN0IF9fU0NfVEhSRUFEX0FU
VFJfU1RBQ0tTSVpFID0gNzgKK2NvbnN0IF9fUE9TSVhfVjdfTFA2NF9PRkY2NCA9IDEKK2NvbnN0
IF9QRl9JRUVFODAyMTU0ID0gMzYKK2NvbnN0IF9FTElCTUFYID0gODIKK2NvbnN0IF9CNDgwMCA9
IDAwMDAwMTQKK2NvbnN0IF9TWVNfcmVuYW1lYXQyID0gX19fTlJfcmVuYW1lYXQyCitjb25zdCBf
SVBQUk9UT19FTkNBUCA9IDk4Citjb25zdCBfUkVHX1JEWCA9IDEyCitjb25zdCBfSVBWNl8yMjky
SE9QT1BUUyA9IDMKK2NvbnN0IF9fX05FVElORVRfSVBfSCA9IDEKK2NvbnN0IF9fX0ZMVDY0WF9I
QVNfREVOT1JNX18gPSAxCitjb25zdCBfSUZMQV9CUlBPUlRfREVTSUdOQVRFRF9DT1NUID0gMTYK
K2NvbnN0IF9JTlRfTEVBU1Q4X1dJRFRIID0gOAorY29uc3QgX05MTVNHRVJSX0FUVFJfT0ZGUyA9
IDIKK2NvbnN0IF9TVEFUWF9BVFRSX0VOQ1JZUFRFRCA9IDB4MDgwMAorY29uc3QgX1JFR19PTERN
QVNLID0gMjEKK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEXzQgPSAweDAwCitjb25zdCBfVElN
RV9PT1AgPSAzCitjb25zdCBfUlRNR1JQX0lQVjZfSUZJTkZPID0gMHg4MDAKK2NvbnN0IF9UQ0Ff
Uk9PVF9VTlNQRUMgPSAwCitjb25zdCBfX19XX0NPTlRJTlVFRCA9IDB4ZmZmZgorY29uc3QgX0lG
TEFfVlhMQU5fTEFCRUwgPSAyNgorY29uc3QgX0JQRl9KQSA9IDB4MDAKK2NvbnN0IF9fX05SX25h
bm9zbGVlcCA9IDM1Citjb25zdCBfQlBGX01BSk9SX1ZFUlNJT04gPSAxCitjb25zdCBfX19OUl9n
ZXRlZ2lkID0gMTA4Citjb25zdCBfUEZfSVVDViA9IDMyCitjb25zdCBfUFJfQ0FQX0FNQklFTlRf
TE9XRVIgPSAzCitjb25zdCBfTUFQX05PUkVTRVJWRSA9IDB4MDQwMDAKK2NvbnN0IF9JUE9QVF9F
TkQgPSBfSVBPUFRfRU9MCitjb25zdCBfSUZGX1RBUCA9IDB4MDAwMgorY29uc3QgX19TWVNfVVNF
Ul9IID0gMQorY29uc3QgX1RVTkdFVElGRl92YWwgPSAyMTQ3NzY3NTA2Citjb25zdCBfQURKX01B
WEVSUk9SID0gMHgwMDA0Citjb25zdCBfUlROTEdSUF9JUFY2X0lGSU5GTyA9IDEyCitjb25zdCBf
RlNfRElSVFlfRkwgPSAweDAwMDAwMTAwCitjb25zdCBfX19OUl9mYWxsb2NhdGUgPSAyODUKK2Nv
bnN0IF9fX05SX3NldF9tZW1wb2xpY3kgPSAyMzgKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1JPQlVT
VF9QUklPX0lOSEVSSVQgPSAyMDA4MDkKK2NvbnN0IF9SVEFfTUZDX1NUQVRTID0gMTcKK2NvbnN0
IF9DWDg2X1JDUl9CQVNFID0gMHhkYworY29uc3QgX1JUUFJPVF9LRVJORUwgPSAyCitjb25zdCBf
SUNNUDZfRklMVEVSX0JMT0NLT1RIRVJTID0gMworY29uc3QgX1BSX0ZQRU1VX05PUFJJTlQgPSAx
Citjb25zdCBfX19GTFRfTUFOVF9ESUdfXyA9IDI0Citjb25zdCBfX19OUl9mc3RhdCA9IDUKK2Nv
bnN0IF9QVFJBQ0VfT19FWElUS0lMTCA9IDEwNDg1NzYKK2NvbnN0IF9JRkxBX0JSX01DQVNUX0xB
U1RfTUVNQkVSX0lOVFZMID0gMzAKK2NvbnN0IF9ORVRMSU5LX0lORVRfRElBRyA9IF9ORVRMSU5L
X1NPQ0tfRElBRworY29uc3QgX05FVExJTktfU0NTSVRSQU5TUE9SVCA9IDE4Citjb25zdCBfX19O
Ul9zZWxlY3QgPSAyMworY29uc3QgX0lGTEFfU1RBVFNfTElOS19PRkZMT0FEX1hTVEFUUyA9IDQK
K2NvbnN0IF9fX05SX3BpcGUgPSAyMgorY29uc3QgX1NBX05PQ0xEV0FJVCA9IDIKK2NvbnN0IF9T
WVNfa2V4ZWNfZmlsZV9sb2FkID0gX19fTlJfa2V4ZWNfZmlsZV9sb2FkCitjb25zdCBfQjIwMCA9
IDAwMDAwMDYKK2NvbnN0IF9fUE9TSVhfREVMQVlUSU1FUl9NQVggPSAzMgorY29uc3QgX1BSX1NF
VF9FTkRJQU4gPSAyMAorY29uc3QgX1NZU19lcG9sbF9wd2FpdCA9IF9fX05SX2Vwb2xsX3B3YWl0
Citjb25zdCBfRVRIX1BfTE9DQUxUQUxLID0gMHgwMDA5Citjb25zdCBfUFJJaUZBU1Q4ID0gImki
Citjb25zdCBfU0VFS19FTkQgPSAyCitjb25zdCBfVENBX0NIQUlOID0gMTEKK2NvbnN0IF9TWVNf
dGltZXJfZGVsZXRlID0gX19fTlJfdGltZXJfZGVsZXRlCitjb25zdCBfUkxJTV9JTkZJTklUWSA9
IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3QgX19fT0ZGX1RfTUFUQ0hFU19PRkY2NF9UID0gMQor
Y29uc3QgX1JUTkxHUlBfUEhPTkVUX1JPVVRFID0gMjIKK2NvbnN0IF9fSVNPQzExX1NPVVJDRSA9
IDEKK2NvbnN0IF9TSUdYQ1BVID0gMjQKK2NvbnN0IF9SVE5fTkFUID0gMTAKK2NvbnN0IF9JRkxB
X1RVTl9HUk9VUCA9IDIKK2NvbnN0IF9fX0xEQkxfTUFYX18gPSAxLjEKK2NvbnN0IF9VSU5UX0xF
QVNUOF9NQVggPSAoMjU1KQorY29uc3QgX0lDTVA2X0RTVF9VTlJFQUNIX0FERFIgPSAzCitjb25z
dCBfUE9TSVhfRkFEVl9TRVFVRU5USUFMID0gMgorY29uc3QgX1JUTl9YUkVTT0xWRSA9IDExCitj
b25zdCBfdW5peCA9IDEKK2NvbnN0IF9TSVpFX01BWCA9ICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkK
K2NvbnN0IF9TVEFfREVMID0gMHgwMDIwCitjb25zdCBfTUJfTEVOX01BWCA9IDE2Citjb25zdCBf
Q0lCQVVEID0gMDAyMDAzNjAwMDAwCitjb25zdCBfX19jbG9ja2lkX3RfZGVmaW5lZCA9IDEKK2Nv
bnN0IF9fQ1NfUE9TSVhfVjdfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUyA9IDExNDcKK2NvbnN0IF9B
SV9OVU1FUklDSE9TVCA9IDB4MDAwNAorY29uc3QgX1JFX0RVUF9NQVggPSAoMHg3ZmZmKQorY29u
c3QgX0lGTEFfVkZfUkFURSA9IDYKK2NvbnN0IF9QUklYMzIgPSAiWCIKK2NvbnN0IF9JUFRPU19F
Q05fQ0UgPSAweDAzCitjb25zdCBfSUZMQV9CUl9QUklPUklUWSA9IDYKK2NvbnN0IF9JUFRPU19Q
UkVDX05FVENPTlRST0wgPSBfSVBUT1NfQ0xBU1NfQ1M3Citjb25zdCBfX19OUl9nZXRydXNhZ2Ug
PSA5OAorY29uc3QgX05VRF9SRUFDSEFCTEUgPSAweDAyCitjb25zdCBfX19OUl91c2VsaWIgPSAx
MzQKK2NvbnN0IF9FUE9MTFdSTk9STSA9IDI1NgorY29uc3QgX19fSUZMQV9NQVggPSA1MgorY29u
c3QgX1RDUF9MSU5HRVIyID0gOAorY29uc3QgX1JUTkxHUlBfSVBWNF9ST1VURSA9IDcKK2NvbnN0
IF9fU0NfSU5UX01JTiA9IDEwNQorY29uc3QgX0VUSU1FID0gNjIKK2NvbnN0IF9JRkxBX0hTUl9T
RVFfTlIgPSA1Citjb25zdCBfX1BPU0lYX1NZTUxJTktfTUFYID0gMjU1Citjb25zdCBfSUZMQV9Q
T1JUX1JFU1BPTlNFID0gNworY29uc3QgX0lGTEFfQlJfTUNBU1RfUk9VVEVSID0gMjIKK2NvbnN0
IF9UQ0FfSFdfT0ZGTE9BRCA9IDEyCitjb25zdCBfSUZMQV9JTkVUNl9UT0tFTiA9IDcKK2NvbnN0
IF9USU9DUEtUX0ZMVVNIUkVBRCA9IDEKK2NvbnN0IF9TWVNfc2V0X3RpZF9hZGRyZXNzID0gX19f
TlJfc2V0X3RpZF9hZGRyZXNzCitjb25zdCBfQjE5MjAwID0gMDAwMDAxNgorY29uc3QgX0lQX0RF
RkFVTFRfTVVMVElDQVNUX1RUTCA9IDEKK2NvbnN0IF9fX1NJR19BVE9NSUNfTUlOX18gPSAoLV9f
X1NJR19BVE9NSUNfTUFYX18gLSAxKQorY29uc3QgX0lGTEFfQk9ORF9NSU5fTElOS1MgPSAxOAor
Y29uc3QgX0lQUFJPVE9fUkFXID0gMjU1Citjb25zdCBfU1lTX2dldHJlc3VpZCA9IF9fX05SX2dl
dHJlc3VpZAorY29uc3QgX1JUQV9TUkMgPSAyCitjb25zdCBfSVBWNl9QTVRVRElTQ19ETyA9IDIK
K2NvbnN0IF9SVF9TQ09QRV9MSU5LID0gMjUzCitjb25zdCBfU1lTX3NjaGVkX3lpZWxkID0gX19f
TlJfc2NoZWRfeWllbGQKK2NvbnN0IF9TQV9OT0NMRFNUT1AgPSAxCitjb25zdCBfTkxBX0ZfTkVT
VEVEID0gKDEgPDwgMTUpCitjb25zdCBfRU5BVkFJTCA9IDExOQorY29uc3QgX0VUSF9QX0VSU1BB
TjIgPSAweDIyRUIKK2NvbnN0IF9USU9DU0VSX1RFTVQgPSAweDAxCitjb25zdCBfSUZMQV9CUlBP
UlRfTVVMVElDQVNUX1JPVVRFUiA9IDI1Citjb25zdCBfT1BPU1QgPSAwMDAwMDAxCitjb25zdCBf
V19PSyA9IDIKK2NvbnN0IF9JUE9QVF9SQSA9IDE0OAorY29uc3QgX0VUSEVSVFlQRV9JUFggPSAw
eDgxMzcKK2NvbnN0IF9SVE1fR0VUTkVJR0hUQkwgPSA2NgorY29uc3QgX19TQ19WNl9MUDY0X09G
RjY0ID0gMTc4Citjb25zdCBfREVMQVlUSU1FUl9NQVggPSAyMTQ3NDgzNjQ3Citjb25zdCBfUFJf
R0VUX05BTUUgPSAxNgorY29uc3QgX0lGTEFfQlJQT1JUX0NPU1QgPSAzCitjb25zdCBfU0lPQ0dJ
RkJSID0gMHg4OTQwCitjb25zdCBfSUZMQV9NQUNTRUNfSU5DX1NDSSA9IDkKK2NvbnN0IF9JTl9P
TkVTSE9UID0gMHg4MDAwMDAwMAorY29uc3QgX1NZU19hZGp0aW1leCA9IF9fX05SX2FkanRpbWV4
Citjb25zdCBfSUxMX0NPUFJPQyA9IDcKK2NvbnN0IF9JUE9QVF9SUiA9IDcKK2NvbnN0IF9QUl9T
VkVfU0VUX1ZMX09ORVhFQyA9ICgxIDw8IDE4KQorY29uc3QgX1NZU19wd3JpdGU2NCA9IF9fX05S
X3B3cml0ZTY0Citjb25zdCBfUFJfU0VUX05BTUUgPSAxNQorY29uc3QgX1ZRVUlUID0gMQorY29u
c3QgX0ZTX1hGTEFHX0VYVFNaSU5IRVJJVCA9IDB4MDAwMDEwMDAKK2NvbnN0IF9JRkxBX1BPUlRf
SU5TVEFOQ0VfVVVJRCA9IDQKK2NvbnN0IF9JUFRPU19DTEFTU19DUzMgPSAweDYwCitjb25zdCBf
X19QVFJESUZGX1dJRFRIX18gPSA2NAorY29uc3QgX0VUSF9QX0VEU0EgPSAweERBREEKK2NvbnN0
IF9TWVNfc2V0aXRpbWVyID0gX19fTlJfc2V0aXRpbWVyCitjb25zdCBfX19GTFQzMlhfRVBTSUxP
Tl9fID0gMS4xCitjb25zdCBfX19GTFQxMjhfTUlOX0VYUF9fID0gKC0xNjM4MSkKK2NvbnN0IF9f
X05SX3NldGZzdWlkID0gMTIyCitjb25zdCBfSVBUT1NfQ0xBU1NfQ1M2ID0gMHhjMAorY29uc3Qg
X0lGTEFfQlJQT1JUX0JSSURHRV9JRCA9IDE0Citjb25zdCBfUlRNX0RFTE5FVENPTkYgPSA4MQor
Y29uc3QgX0lDTVA2X1RJTUVfRVhDRUVERUQgPSAzCitjb25zdCBfX19OUl9zZXRmc2dpZCA9IDEy
MworY29uc3QgX1NJT0NERUxETENJID0gMHg4OTgxCitjb25zdCBfSVBQT1JUX1RUWUxJTksgPSA4
NworY29uc3QgX1NJT0NHQVJQID0gMHg4OTU0Citjb25zdCBfUlRGX0RFRkFVTFQgPSAweDAwMDEw
MDAwCitjb25zdCBfU1lTX21xX29wZW4gPSBfX19OUl9tcV9vcGVuCitjb25zdCBfU1lTX2Nsb2Nr
X2dldHJlcyA9IF9fX05SX2Nsb2NrX2dldHJlcworY29uc3QgX01RX1BSSU9fTUFYID0gMzI3NjgK
K2NvbnN0IF9fU0NfQ0hBUl9NQVggPSAxMDIKK2NvbnN0IF9JUFY2X0FERF9NRU1CRVJTSElQID0g
X0lQVjZfSk9JTl9HUk9VUAorY29uc3QgX19TVEFUX1ZFUl9MSU5VWCA9IDEKK2NvbnN0IF9JRkxB
X0JSUE9SVF9MRUFSTklOR19TWU5DID0gMTEKK2NvbnN0IF9FTk9UTkFNID0gMTE4Citjb25zdCBf
VElPQ1BLVF9GTFVTSFdSSVRFID0gMgorY29uc3QgX01BUF9IVUdFVExCID0gMHg0MDAwMAorY29u
c3QgX0hBVkVfRkFDQ0VTU0FUID0gMQorY29uc3QgX19fREJMX01JTl9FWFBfXyA9ICgtMTAyMSkK
K2NvbnN0IF9YODZfQ1I0X1BDSURFX0JJVCA9IDE3Citjb25zdCBfU0NOaUxFQVNUOCA9ICJoaGki
Citjb25zdCBfSVBWNl9QTVRVRElTQ19QUk9CRSA9IDMKK2NvbnN0IF9JUFBPUlRfRklOR0VSID0g
NzkKK2NvbnN0IF9QT1JUX1VVSURfTUFYID0gMTYKK2NvbnN0IF9MT05HX0xPTkdfTUFYID0gX19f
TE9OR19MT05HX01BWF9fCitjb25zdCBfSU5UOF9NSU4gPSAoLTEyOCkKK2NvbnN0IF9fX05SX3dy
aXRlID0gMQorY29uc3QgX19fU19JRkJMSyA9IDAwNjAwMDAKK2NvbnN0IF9TQ0hFRF9GSUZPID0g
MQorY29uc3QgX19QQVRIX0hFUVVJViA9ICIvZXRjL2hvc3RzLmVxdWl2IgorY29uc3QgX0JQRl9N
U0ggPSAweGEwCitjb25zdCBfX1BDX1NZTkNfSU8gPSA5Citjb25zdCBfX1NDX0FEVklTT1JZX0lO
Rk8gPSAxMzIKK2NvbnN0IF9fX05SX3JlY3Ztc2cgPSA0NworY29uc3QgX0ZBU1lOQyA9IF9PX0FT
WU5DCitjb25zdCBfUlRNR1JQX0lQVjZfTVJPVVRFID0gMHgyMDAKK2NvbnN0IF9TWVNfaW9fcGdl
dGV2ZW50cyA9IF9fX05SX2lvX3BnZXRldmVudHMKK2NvbnN0IF9IQVZFX1NZTkNfQk9PTF9DT01Q
QVJFX0FORF9TV0FQXzQgPSAxCitjb25zdCBfRVBPTExfQ1RMX0FERCA9IDEKK2NvbnN0IF9VU0hS
VF9NQVggPSAoX1NIUlRfTUFYICogMiArIDEpCitjb25zdCBfX1NDX1RSQUNFID0gMTgxCitjb25z
dCBfUFRSQUNFX1NJTkdMRVNURVAgPSA5Citjb25zdCBfSUZMQV9MSU5LID0gNQorY29uc3QgX05E
VFBBX1JFVFJBTlNfVElNRSA9IDUKK2NvbnN0IF9IQVZFX1NZTkNfQk9PTF9DT01QQVJFX0FORF9T
V0FQXzggPSAxCitjb25zdCBfUlRNX0dFVFRGSUxURVIgPSA0NgorY29uc3QgX1NZU19tc2dyY3Yg
PSBfX19OUl9tc2dyY3YKK2NvbnN0IF9fX05SX21zZ2N0bCA9IDcxCitjb25zdCBfSEFWRV9SRU5B
TUVBVCA9IDEKK2NvbnN0IF9JRkZfTkFQSV9GUkFHUyA9IDB4MDAyMAorY29uc3QgX0lGTEFfWERQ
X0FUVEFDSEVEID0gMgorY29uc3QgX1NZU19lcG9sbF9jcmVhdGUgPSBfX19OUl9lcG9sbF9jcmVh
dGUKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX0JST0FEQ0FTVCA9IDQKK2NvbnN0IF9UQ1BfTUQ1U0lH
X0ZMQUdfUFJFRklYID0gMQorY29uc3QgX0lGTEFfQk9ORF9BRF9VU0VSX1BPUlRfS0VZID0gMjUK
K2NvbnN0IF9BUlBIUkRfQURBUFQgPSAyNjQKK2NvbnN0IF9UVU5BVFRBQ0hGSUxURVJfdmFsID0g
MTA3NDgxMjExNworY29uc3QgX1RDUF9NQVhfV0lOU0hJRlQgPSAxNAorY29uc3QgX0lQUFJPVE9f
SUdNUCA9IDIKK2NvbnN0IF9JUF9NQVhfTUVNQkVSU0hJUFMgPSAyMAorY29uc3QgX0lGTEFfQlJQ
T1JUX0JBQ0tVUF9QT1JUID0gMzQKK2NvbnN0IF9SVE1HUlBfREVDbmV0X0lGQUREUiA9IDB4MTAw
MAorY29uc3QgX01BRFZfS0VFUE9ORk9SSyA9IDE5Citjb25zdCBfQUZfQVgyNSA9IF9QRl9BWDI1
Citjb25zdCBfSU5UUFRSX01BWCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQorY29uc3QgX0FSUEhS
RF9FVUk2NCA9IDI3Citjb25zdCBfUlRBX0dBVEVXQVkgPSA1Citjb25zdCBfU0NOdTE2ID0gImh1
IgorY29uc3QgX19fTlJfdHJ1bmNhdGUgPSA3NgorY29uc3QgX19fTlJfZ2V0cmxpbWl0ID0gOTcK
K2NvbnN0IF9fUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRCA9IDAKK2NvbnN0IF9fX05SX3ByZWFkNjQg
PSAxNworY29uc3QgX1BSX1NFVF9NTV9TVEFSVF9CUksgPSA2Citjb25zdCBfUlRBWF9MT0NLID0g
MQorY29uc3QgX1NZU19nZXRkZW50cyA9IF9fX05SX2dldGRlbnRzCitjb25zdCBfU09fRE9NQUlO
ID0gMzkKK2NvbnN0IF9TX0lTVlRYID0gX19fU19JU1ZUWAorY29uc3QgX1BUUkFDRV9QT0tFREFU
QSA9IDUKK2NvbnN0IF9QQUNLRVRfT1JJR0RFViA9IDkKK2NvbnN0IF9JUE9QVF9UUyA9IDY4Citj
b25zdCBfX19JRkxBX09GRkxPQURfWFNUQVRTX01BWCA9IDIKK2NvbnN0IF9fU0NfU0hSVF9NQVgg
PSAxMTMKK2NvbnN0IF9SRUdfUklQID0gMTYKK2NvbnN0IF9fX0ZMVDY0WF9NQVhfXyA9IDEuMQor
Y29uc3QgX0lGRl9BTExNVUxUSSA9IDUxMgorY29uc3QgX1NBX1NJR0lORk8gPSA0Citjb25zdCBf
UkVHX0NTR1NGUyA9IDE4Citjb25zdCBfSUZMQV9WWExBTl9HQlAgPSAyMworY29uc3QgX19USU1F
X0ggPSAxCitjb25zdCBfU1lTX2dldHVpZCA9IF9fX05SX2dldHVpZAorY29uc3QgX0lQVjZfUE1U
VURJU0NfV0FOVCA9IDEKK2NvbnN0IF9fU0NfMl9QQlNfTUVTU0FHRSA9IDE3MQorY29uc3QgX19f
TlJfbWVtYmFycmllciA9IDMyNAorY29uc3QgX1NZU193YWl0NCA9IF9fX05SX3dhaXQ0Citjb25z
dCBfTE9OR19XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfQlBGX0sgPSAweDAwCitjb25zdCBf
RU5PVFVOSVEgPSA3NgorY29uc3QgX05EX09QVF9IT01FX0FHRU5UX0lORk8gPSA4Citjb25zdCBf
TklfTkFNRVJFUUQgPSA4Citjb25zdCBfX19waWNfXyA9IDIKK2NvbnN0IF9OTE1fRl9EVU1QX0lO
VFIgPSAweDEwCitjb25zdCBfRkFMTE9DX0ZMX1VOU0hBUkVfUkFOR0UgPSAweDQwCitjb25zdCBf
TElOVVhfUkVCT09UX0NNRF9QT1dFUl9PRkYgPSAweDQzMjFGRURDCitjb25zdCBfX19JRkxBX1ZS
Rl9NQVggPSAyCitjb25zdCBfSUZMQV9JTkVUNl9BRERSX0dFTl9NT0RFID0gOAorY29uc3QgX0VO
T1NSID0gNjMKK2NvbnN0IF9QUl9HRVRfVElNSU5HID0gMTMKK2NvbnN0IF9fUE9TSVhfQ19TT1VS
Q0UgPSAyMDA4MDkKK2NvbnN0IF9UVU5TRVRUWEZJTFRFUl92YWwgPSAxMDc0MDI1NjgxCitjb25z
dCBfUFJfQ0FQX0FNQklFTlRfSVNfU0VUID0gMQorY29uc3QgX0lUSU1FUl9QUk9GID0gMgorY29u
c3QgX19fU0laRU9GX1BUSFJFQURfTVVURVhBVFRSX1QgPSA0Citjb25zdCBfU1lTX25hbWVfdG9f
aGFuZGxlX2F0ID0gX19fTlJfbmFtZV90b19oYW5kbGVfYXQKK2NvbnN0IF9CNTc2MDAwID0gMDAx
MDAwNgorY29uc3QgX1NFRUtfU0VUID0gMAorY29uc3QgX0JQRl9PUiA9IDB4NDAKK2NvbnN0IF9Q
Rl9ST1VURSA9IF9QRl9ORVRMSU5LCitjb25zdCBfX19GTFQ2NF9NSU5fRVhQX18gPSAoLTEwMjEp
Citjb25zdCBfSU5fTUFTS19BREQgPSAweDIwMDAwMDAwCitjb25zdCBfX0NTX1BPU0lYX1Y2X0lM
UDMyX09GRjMyX0NGTEFHUyA9IDExMTYKK2NvbnN0IF9UQ1BfTUFYU0VHID0gMgorY29uc3QgX05f
SVJEQSA9IDExCitjb25zdCBfSVBWNl9SVEhEUl9TVFJJQ1QgPSAxCitjb25zdCBfUEFDS0VUX1JF
Q1ZfT1VUUFVUID0gMworY29uc3QgX01BRFZfRE9OVE5FRUQgPSA0Citjb25zdCBfTkRfUkVESVJF
Q1QgPSAxMzcKK2NvbnN0IF9fX3NpZ2luZm9fdF9kZWZpbmVkID0gMQorY29uc3QgX19fR0NDX0FU
T01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUgPSAyCitjb25zdCBfUlRBWF9RVUlDS0FDSyA9IDE1Citj
b25zdCBfX19GTFQzMl9NQVhfMTBfRVhQX18gPSAzOAorY29uc3QgX0JQRl9NVUwgPSAweDIwCitj
b25zdCBfU1lTX2Vwb2xsX3dhaXRfb2xkID0gX19fTlJfZXBvbGxfd2FpdF9vbGQKK2NvbnN0IF9f
X0lGTEFfSVBWTEFOX01BWCA9IDMKK2NvbnN0IF9JUF9QTVRVRElTQ19QUk9CRSA9IDMKK2NvbnN0
IF9TWVNfc3lzZnMgPSBfX19OUl9zeXNmcworY29uc3QgX19fT1BUSU1JWkVfXyA9IDEKK2NvbnN0
IF9JUFRPU19QUkVDX0lOVEVSTkVUQ09OVFJPTCA9IF9JUFRPU19DTEFTU19DUzYKK2NvbnN0IF9I
QVZFX0FTSU5MID0gMQorY29uc3QgX0lQVjZfVU5JQ0FTVF9JRiA9IDc2Citjb25zdCBfTkxNX0Zf
QVRPTUlDID0gMHg0MDAKK2NvbnN0IF9GU19YRkxBR19OT1NZTUxJTktTID0gMHgwMDAwMDQwMAor
Y29uc3QgX0ZfTE9DSyA9IDEKK2NvbnN0IF9JQ01QNl9QQVJBTVBST0JfSEVBREVSID0gMAorY29u
c3QgX0VUSF9QX0lFRUU4MDIxNTQgPSAweDAwRjYKK2NvbnN0IF9TSU9DR0lGSFdBRERSID0gMHg4
OTI3Citjb25zdCBfU1lTX3NlbWdldCA9IF9fX05SX3NlbWdldAorY29uc3QgX19fUFRIUkVBRF9N
VVRFWF9OVVNFUlNfQUZURVJfS0lORCA9IDAKK2NvbnN0IF9QUl9TRVRfTU1fTUFQX1NJWkUgPSAx
NQorY29uc3QgX1JUTl9CTEFDS0hPTEUgPSA2Citjb25zdCBfU1lTX3BrZXlfYWxsb2MgPSBfX19O
Ul9wa2V5X2FsbG9jCitjb25zdCBfQUZfSU5FVDYgPSBfUEZfSU5FVDYKK2NvbnN0IF9OTEFfSERS
TEVOX3ZhbCA9IDQKK2NvbnN0IF9IQVZFX1JFTU9WRVhBVFRSID0gMQorY29uc3QgX0lDTVA2X1JS
X0ZMQUdTX1NQRUNTSVRFID0gMHgxMAorY29uc3QgX19fTlJfc2V0bnMgPSAzMDgKK2NvbnN0IF9f
X1dOT1RIUkVBRCA9IDB4MjAwMDAwMDAKK2NvbnN0IF9FVEhfUF9MT09QID0gMHgwMDYwCitjb25z
dCBfVkVPTCA9IDExCitjb25zdCBfTVNfTk9ERVYgPSA0Citjb25zdCBfU09fWkVST0NPUFkgPSA2
MAorY29uc3QgX19fTlJfZ2V0cmFuZG9tID0gMzE4Citjb25zdCBfUlRGX0FMTE9OTElOSyA9IDB4
MDAwMjAwMDAKK2NvbnN0IF9SVE5MR1JQX0RFQ25ldF9SVUxFID0gMTYKK2NvbnN0IF9fX05SX21i
aW5kID0gMjM3Citjb25zdCBfTVNfS0VSTk1PVU5UID0gNDE5NDMwNAorY29uc3QgX0lVQ0xDID0g
MDAwMTAwMAorY29uc3QgX0hBVkVfU0VNX1RJTUVEV0FJVCA9IDEKK2NvbnN0IF9fX1BSRUZJWF9N
QVggPSAzCitjb25zdCBfTUFQX1NUQUNLID0gMHgyMDAwMAorY29uc3QgX1NZU19wZXJzb25hbGl0
eSA9IF9fX05SX3BlcnNvbmFsaXR5Citjb25zdCBfX1BPU0lYX01PTk9UT05JQ19DTE9DSyA9IDAK
K2NvbnN0IF9VVElNRV9PTUlUID0gKCgxIDw8IDMwKSAtIDIpCitjb25zdCBfUFJJb0xFQVNUOCA9
ICJvIgorY29uc3QgX1BSX0ZQX0VYQ19JTlYgPSAweDEwMDAwMAorY29uc3QgX0VUSEVSVFlQRV9W
TEFOID0gMHg4MTAwCitjb25zdCBfUlRQUk9UX0dBVEVEID0gOAorY29uc3QgX01TX01PVkUgPSA4
MTkyCitjb25zdCBfSUZMQV9CUlBPUlRfREVTSUdOQVRFRF9QT1JUID0gMTUKK2NvbnN0IF9QUl9T
RVRfVFNDID0gMjYKK2NvbnN0IF9fU1REQ19QUkVERUZfSCA9IDEKK2NvbnN0IF9JRkZfQVVUT01F
RElBID0gMTYzODQKK2NvbnN0IF9fX1VTRV9GT1JUSUZZX0xFVkVMID0gMAorY29uc3QgX0VCRk9O
VCA9IDU5Citjb25zdCBfX19ORFRBX01BWCA9IDEwCitjb25zdCBfX19TSVpFT0ZfTE9OR19MT05H
X18gPSA4Citjb25zdCBfSVBWNl9QTVRVRElTQ19ET05UID0gMAorY29uc3QgX0lQVkxBTl9NT0RF
X0wzUyA9IDIKK2NvbnN0IF9JRkxBX1RVTl9UWVBFID0gMworY29uc3QgX09fQ0xPRVhFQyA9IF9f
X09fQ0xPRVhFQworY29uc3QgX1NLRl9BRF9NQVJLID0gMjAKK2NvbnN0IF9fX0ZMVDY0WF9ERU5P
Uk1fTUlOX18gPSAxLjEKK2NvbnN0IF9JRkZfU0xBVkUgPSAyMDQ4Citjb25zdCBfRFRfUkVHID0g
OAorY29uc3QgX0ZBTExPQ19GTF9QVU5DSF9IT0xFID0gMHgwMgorY29uc3QgX0FSUEhSRF9ORVRS
T00gPSAwCitjb25zdCBfX19MREJMX0RJR19fID0gMTgKK2NvbnN0IF9fU0NfVVNFUl9HUk9VUFMg
PSAxNjYKK2NvbnN0IF9fVU5JU1REX0ggPSAxCitjb25zdCBfVENQX01BWFdJTiA9IDY1NTM1Citj
b25zdCBfRlNfTk9EVU1QX0ZMID0gMHgwMDAwMDA0MAorY29uc3QgX1RJT0NTTENLVFJNSU9TID0g
MHg1NDU3Citjb25zdCBfX19OUl9maW5pdF9tb2R1bGUgPSAzMTMKK2NvbnN0IF9TS0ZfQURfTUFY
ID0gNjQKK2NvbnN0IF9SRUdfUjE0ID0gNgorY29uc3QgX0ZBTExPQ19GTF9aRVJPX1JBTkdFID0g
MHgxMAorY29uc3QgX0lGTEFfQlJfR0NfVElNRVIgPSAxOQorY29uc3QgX19fTlJfZmFkdmlzZTY0
ID0gMjIxCitjb25zdCBfT19OREVMQVkgPSBfT19OT05CTE9DSworY29uc3QgX0VQT0xMUFJJID0g
MgorY29uc3QgX0VBSV9GQUlMID0gLTQKK2NvbnN0IF9fX2dsaWJjX2M5OV9mbGV4YXJyX2F2YWls
YWJsZSA9IDEKK2NvbnN0IF9fX05SX2lvX3N1Ym1pdCA9IDIwOQorY29uc3QgX1JUQV9UVExfUFJP
UEFHQVRFID0gMjYKK2NvbnN0IF9OX1NNU0JMT0NLID0gMTIKK2NvbnN0IF9fUE9TSVhfVEhSRUFE
X0NQVVRJTUUgPSAwCitjb25zdCBfVENQSV9PUFRfU0FDSyA9IDIKK2NvbnN0IF9USU9DR0VURCA9
IDB4NTQyNAorY29uc3QgX0NMT05FX1NZU1ZTRU0gPSAweDAwMDQwMDAwCitjb25zdCBfTkVUTElO
S19TRUxJTlVYID0gNworY29uc3QgX0NMT0NLX1RIUkVBRF9DUFVUSU1FX0lEID0gMworY29uc3Qg
X19fTlJfY2xvY2tfbmFub3NsZWVwID0gMjMwCitjb25zdCBfX1NDX0NIQVJfQklUID0gMTAxCitj
b25zdCBfU0FfUkVTRVRIQU5EID0gMHg4MDAwMDAwMAorY29uc3QgX0FESl9TVEFUVVMgPSAweDAw
MTAKK2NvbnN0IF9QUl9TRVRfUFRSQUNFUiA9IDB4NTk2MTZkNjEKK2NvbnN0IF9QUl9TRVRfTU1f
QlJLID0gNworY29uc3QgX19fSUxQMzJfT0ZGQklHX0NGTEFHUyA9ICItbTMyIC1EX0xBUkdFRklM
RV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklUUz02NCIKK2NvbnN0IF9UQ1BfRkFTVE9QRU5fS0VZ
ID0gMzMKK2NvbnN0IF9fU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTID0gMjIKK2NvbnN0IF9SVE1H
UlBfSVBWNl9ST1VURSA9IDB4NDAwCitjb25zdCBfSUZMQV9CUlBPUlRfUFJJT1JJVFkgPSAyCitj
b25zdCBfQjMwMDAwMDAgPSAwMDEwMDE1Citjb25zdCBfTVNfTUdDX1ZBTCA9IDB4QzBFRDAwMDAK
K2NvbnN0IF9BREpfRVNURVJST1IgPSAweDAwMDgKK2NvbnN0IF9SVE5IX0ZfTElOS0RPV04gPSAx
NgorY29uc3QgX0VUSF9QX0ROQV9ETCA9IDB4NjAwMQorY29uc3QgX1BSX1NFVF9USU1JTkcgPSAx
NAorY29uc3QgX05FVExJTktfSVNDU0kgPSA4Citjb25zdCBfX19OREFfTUFYID0gMTIKK2NvbnN0
IF9fX05SX3NldGdyb3VwcyA9IDExNgorY29uc3QgX19YT1BFTl9MSU1fSCA9IDEKK2NvbnN0IF9f
X09SREVSX0JJR19FTkRJQU5fXyA9IDQzMjEKK2NvbnN0IF9BUlBIUkRfWDI1ID0gMjcxCitjb25z
dCBfTExPTkdfTUFYID0gX19fTE9OR19MT05HX01BWF9fCitjb25zdCBfX0NTX0xGU19DRkxBR1Mg
PSAxMDAwCitjb25zdCBfX1NZU0NBTExfSCA9IDEKK2NvbnN0IF9BUlBIUkRfRUNPTkVUID0gNzgy
Citjb25zdCBfX19HTlVDX1NURENfSU5MSU5FX18gPSAxCitjb25zdCBfTVNfUFJJVkFURSA9IDI2
MjE0NAorY29uc3QgX01BQ1ZMQU5fTUFDQUREUl9ERUwgPSAxCitjb25zdCBfU0NIRURfUkVTRVRf
T05fRk9SSyA9IDB4NDAwMDAwMDAKK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfU1VDQ0VT
UyA9IDI1NgorY29uc3QgX1BSX0dFVF9EVU1QQUJMRSA9IDMKK2NvbnN0IF9OREFfVU5TUEVDID0g
MAorY29uc3QgX19TQ19SRV9EVVBfTUFYID0gNDQKK2NvbnN0IF9IT1NUX05PVF9GT1VORCA9IDEK
K2NvbnN0IF9TWVNfcHJlYWR2ID0gX19fTlJfcHJlYWR2Citjb25zdCBfTU9EX01BWEVSUk9SID0g
X0FESl9NQVhFUlJPUgorY29uc3QgX09fRElSRUNUID0gX19fT19ESVJFQ1QKK2NvbnN0IF9JRkxB
X0JPTkRfQUxMX1NMQVZFU19BQ1RJVkUgPSAxNworY29uc3QgX19TQ19QSUlfSU5URVJORVQgPSA1
NgorY29uc3QgX1RVTlNFVFNOREJVRl92YWwgPSAxMDc0MDI1Njg0Citjb25zdCBfUlROTEdSUF9J
UFY2X0lGQUREUiA9IDkKK2NvbnN0IF9TVEFUWF9OTElOSyA9IDB4MDAwNAorY29uc3QgX19fSUZM
QV9QT1JUX01BWCA9IDgKK2NvbnN0IF9CVVNfQURSRVJSID0gMgorY29uc3QgX1JUTV9ORVdBRERS
ID0gMjAKK2NvbnN0IF9USU9DTUlXQUlUID0gMHg1NDVDCitjb25zdCBfUlRNX0RFTE5TSUQgPSA4
OQorY29uc3QgX0hBVkVfU1lTX1NZU0lORk9fSCA9IDEKK2NvbnN0IF9fX05SX3N0YXQgPSA0Citj
b25zdCBfU1BMSUNFX0ZfTU9SRSA9IDQKK2NvbnN0IF9JRkFfRl9NQ0FVVE9KT0lOID0gMHg0MDAK
K2NvbnN0IF9TWVNfaW9wcmlvX2dldCA9IF9fX05SX2lvcHJpb19nZXQKK2NvbnN0IF9IQVZFX0RM
X0lURVJBVEVfUEhEUiA9IDEKK2NvbnN0IF9fX0lGTEFfVkZfU1RBVFNfTUFYID0gOQorY29uc3Qg
X1NZU19pbml0X21vZHVsZSA9IF9fX05SX2luaXRfbW9kdWxlCitjb25zdCBfUlRNX0dFVEFOWUNB
U1QgPSA2MgorY29uc3QgX19QT1NJWF9NUV9PUEVOX01BWCA9IDgKK2NvbnN0IF9TWVNfbGdldHhh
dHRyID0gX19fTlJfbGdldHhhdHRyCitjb25zdCBfU1lTX3JtZGlyID0gX19fTlJfcm1kaXIKK2Nv
bnN0IF9FVEhFUlRZUEVfQUFSUCA9IDB4ODBGMworY29uc3QgX1BBQ0tBR0VfVEFSTkFNRSA9ICJs
aWJnbyIKK2NvbnN0IF9JTlRfTEVBU1Q4X01BWCA9ICgxMjcpCitjb25zdCBfSVBUT1NfUFJFQ19S
T1VUSU5FID0gX0lQVE9TX0NMQVNTX0NTMAorY29uc3QgX0lGQV9GX09QVElNSVNUSUMgPSAweDA0
Citjb25zdCBfTkRUUEFfVU5TUEVDID0gMAorY29uc3QgX19fTlJfcHNlbGVjdDYgPSAyNzAKK2Nv
bnN0IF9GX0dFVFNJRyA9IF9fX0ZfR0VUU0lHCitjb25zdCBfU09fV0lGSV9TVEFUVVMgPSA0MQor
Y29uc3QgX1NfSVdPVEggPSAoX1NfSVdHUlAgPj4gMykKK2NvbnN0IF9JTlBDSyA9IDAwMDAwMjAK
K2NvbnN0IF9ORFRQQV9BUFBfUFJPQkVTID0gOQorY29uc3QgX19fT19MQVJHRUZJTEUgPSAwCitj
b25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfVlRJRF9WRVJTSU9OX1ZJT0FMVElPTiA9IDUKK2NvbnN0
IF9fX05SX3NldHhhdHRyID0gMTg4Citjb25zdCBfX19GTFQzMl9IQVNfSU5GSU5JVFlfXyA9IDEK
K2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xERkxBR1MgPSAxMTI5Citjb25zdCBf
UFJfR0VUX1RTQyA9IDI1Citjb25zdCBfUlRNX0dFVE5FSUdIID0gMzAKK2NvbnN0IF9QVFJBQ0Vf
U0VUT1BUSU9OUyA9IDE2ODk2Citjb25zdCBfX19OUl9lcG9sbF9jcmVhdGUgPSAyMTMKK2NvbnN0
IF9JUFRPU19SRUxJQUJJTElUWSA9IDB4MDQKK2NvbnN0IF9BUlBIUkRfRlJBRCA9IDc3MAorY29u
c3QgX1NJT0NTSUZCUkRBRERSID0gMHg4OTFhCitjb25zdCBfX19VSU5UUFRSX01BWF9fID0gMHhm
ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfX19OUl9jaG93biA9IDkyCitjb25zdCBfX19OUl9mYW5v
dGlmeV9pbml0ID0gMzAwCitjb25zdCBfQVRfTk9fQVVUT01PVU5UID0gMHg4MDAKK2NvbnN0IF9f
X05SX2Vwb2xsX2NyZWF0ZTEgPSAyOTEKK2NvbnN0IF9TWVNfc2V0cmVzZ2lkID0gX19fTlJfc2V0
cmVzZ2lkCitjb25zdCBfTl9QUk9GSUJVU19GREwgPSAxMAorY29uc3QgX0JQRl9YT1IgPSAweGEw
Citjb25zdCBfSUNNUDZfUlJfRkxBR1NfUkVRUkVTVUxUID0gMHg0MAorY29uc3QgX0lGTEFfSVBP
SUJfTU9ERSA9IDIKK2NvbnN0IF9NQVBfU0hBUkVEX1ZBTElEQVRFID0gMHgwMworY29uc3QgX1NZ
U19xdWVyeV9tb2R1bGUgPSBfX19OUl9xdWVyeV9tb2R1bGUKK2NvbnN0IF9TWVNfdGltZXJfZ2V0
b3ZlcnJ1biA9IF9fX05SX3RpbWVyX2dldG92ZXJydW4KK2NvbnN0IF9fX05SX2ZyZW1vdmV4YXR0
ciA9IDE5OQorY29uc3QgX1NJWkVfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX0lGQV9GX1NF
Q09OREFSWSA9IDB4MDEKK2NvbnN0IF9fU0NfSk9CX0NPTlRST0wgPSA3Citjb25zdCBfX19OUl9t
b3ZlX3BhZ2VzID0gMjc5Citjb25zdCBfSUZMQV9DQVJSSUVSX0NIQU5HRVMgPSAzNQorY29uc3Qg
X0lORVQ2X0FERFJTVFJMRU4gPSA0NgorY29uc3QgX0lGTEFfSVBPSUJfUEtFWSA9IDEKK2NvbnN0
IF9JUFBST1RPX0RDQ1AgPSAzMworY29uc3QgX1NfSVJHUlAgPSAoX1NfSVJVU1IgPj4gMykKK2Nv
bnN0IF9TT0xfSVJEQSA9IDI2NgorY29uc3QgX0hBVkVfVU5TSEFSRSA9IDEKK2NvbnN0IF9TVEFU
WF9BVFRSX0lNTVVUQUJMRSA9IDB4MDAxMAorY29uc3QgX19TQ19GU1lOQyA9IDE1Citjb25zdCBf
X19OUl9saXN0ZW4gPSA1MAorY29uc3QgX1NDTnhMRUFTVDE2ID0gImh4IgorY29uc3QgX0lGTEFf
TUFDU0VDX1BBRCA9IDE0Citjb25zdCBfQUlfQ0FOT05JRE4gPSAweDAwODAKK2NvbnN0IF9QUl9N
Q0VfS0lMTF9HRVQgPSAzNAorY29uc3QgX1RVTl9GX0NTVU0gPSAweDAxCitjb25zdCBfX19GTFQz
MlhfTUFYX0VYUF9fID0gMTAyNAorY29uc3QgX0FGX1BBQ0tFVCA9IF9QRl9QQUNLRVQKK2NvbnN0
IF9JRkxBX0JSUE9SVF9NT0RFID0gNAorY29uc3QgX1BBQ0tFVF9MT1NTID0gMTQKK2NvbnN0IF9X
Q0hBUl9XSURUSCA9IDMyCitjb25zdCBfU09MX05FVEJFVUkgPSAyNjcKK2NvbnN0IF9fX05SX2Zn
ZXR4YXR0ciA9IDE5MworY29uc3QgX19TQ19YQlM1X0lMUDMyX09GRjMyID0gMTI1Citjb25zdCBf
VENQX1FVSUNLQUNLID0gMTIKK2NvbnN0IF9PX1RNUEZJTEUgPSBfX19PX1RNUEZJTEUKK2NvbnN0
IF9FRkJJRyA9IDI3Citjb25zdCBfX1NDXzJfQ19CSU5EID0gNDcKK2NvbnN0IF9JUFRPU19DTEFT
U19DUzAgPSAweDAwCitjb25zdCBfSVBUT1NfQ0xBU1NfQ1MxID0gMHgyMAorY29uc3QgX0lQVE9T
X0NMQVNTX0NTMiA9IDB4NDAKK2NvbnN0IF9TWVNfZnN5bmMgPSBfX19OUl9mc3luYworY29uc3Qg
X0lQVE9TX0NMQVNTX0NTNCA9IDB4ODAKK2NvbnN0IF9JUFRPU19DTEFTU19DUzUgPSAweGEwCitj
b25zdCBfX0lPQ19ESVJTSElGVCA9IChfX0lPQ19TSVpFU0hJRlQrX19JT0NfU0laRUJJVFMpCitj
b25zdCBfSVBUT1NfQ0xBU1NfQ1M3ID0gMHhlMAorY29uc3QgX19fRkxUNjRYX0RJR19fID0gMTgK
K2NvbnN0IF9UQ1BfRkFTVE9QRU5fTk9fQ09PS0lFID0gMzQKK2NvbnN0IF9MSU5VWF9SRUJPT1Rf
TUFHSUMyQSA9IDg1MDcyMjc4Citjb25zdCBfUFJfTUNFX0tJTExfQ0xFQVIgPSAwCitjb25zdCBf
UFRSQUNFX09fTUFTSyA9IDMxNDU5ODMKK2NvbnN0IF9FWERFViA9IDE4Citjb25zdCBfTlVEX0lO
Q09NUExFVEUgPSAweDAxCitjb25zdCBfQUZfS0VZID0gX1BGX0tFWQorY29uc3QgX1g4Nl9DUjNf
UENEX0JJVCA9IDQKK2NvbnN0IF9QVFJBQ0VfU0VUU0lHSU5GTyA9IDE2ODk5Citjb25zdCBfRUwz
SExUID0gNDYKK2NvbnN0IF9TWVNfZmFub3RpZnlfbWFyayA9IF9fX05SX2Zhbm90aWZ5X21hcmsK
K2NvbnN0IF9fQklUU19FUlJOT19IID0gMQorY29uc3QgX19fTlJfdGltZXJfZ2V0b3ZlcnJ1biA9
IDIyNQorY29uc3QgX0lQVjZfVENMQVNTID0gNjcKK2NvbnN0IF9ORFRBX1BBUk1TID0gNgorY29u
c3QgX0FGX1gyNSA9IF9QRl9YMjUKK2NvbnN0IF9CU0RMWSA9IDAwMjAwMDAKK2NvbnN0IF9NU0df
UFJPWFkgPSAxNgorY29uc3QgX0lGTEFfTUFDU0VDX1VOU1BFQyA9IDAKK2NvbnN0IF9fX05SX2Fm
c19zeXNjYWxsID0gMTgzCitjb25zdCBfTUZEX0NMT0VYRUMgPSAxCitjb25zdCBfX19VSU5UX0ZB
U1Q4X01BWF9fID0gMHhmZgorY29uc3QgX1NUQVRYX1NJWkUgPSAweDAyMDAKK2NvbnN0IF9fU0Nf
Q0hBUl9NSU4gPSAxMDMKK2NvbnN0IF9GU19DT01QUl9GTCA9IDB4MDAwMDAwMDQKK2NvbnN0IF9J
Q01QNl9SUl9SRVNVTFRfRkxBR1NfT09CID0gMHgwMjAwCitjb25zdCBfU0NNX1RJTUVTVEFNUElO
R19QS1RJTkZPID0gNTgKK2NvbnN0IF9WRU9GID0gNAorY29uc3QgX19fTlJfbXFfb3BlbiA9IDI0
MAorY29uc3QgX0lGRl9NQVNURVIgPSAxMDI0Citjb25zdCBfUFRSQUNFX1NJTkdMRUJMT0NLID0g
MzMKK2NvbnN0IF9TWVNfZ2V0dGltZW9mZGF5ID0gX19fTlJfZ2V0dGltZW9mZGF5Citjb25zdCBf
X19OUl9hY2NlcHQgPSA0MworY29uc3QgX19QT1NJWF9NRVNTQUdFX1BBU1NJTkcgPSAyMDA4MDkK
K2NvbnN0IF9fX1BUUkRJRkZfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9TSV9L
RVJORUwgPSAxMjgKK2NvbnN0IF9fU0NfQkNfQkFTRV9NQVggPSAzNgorY29uc3QgX1RVTlNFVExJ
TktfdmFsID0gMTA3NDAyNTY3NworY29uc3QgX1NZU19zeW5jX2ZpbGVfcmFuZ2UgPSBfX19OUl9z
eW5jX2ZpbGVfcmFuZ2UKK2NvbnN0IF9BUlBIUkRfQ1NMSVAgPSAyNTcKK2NvbnN0IF9QUl9GUF9F
WENfT1ZGID0gMHgwMjAwMDAKK2NvbnN0IF9fX05SX3NvY2tldHBhaXIgPSA1MworY29uc3QgX1NZ
U191c2VyZmF1bHRmZCA9IF9fX05SX3VzZXJmYXVsdGZkCitjb25zdCBfSUZMQV9CT05EX1BSSU1B
UlkgPSAxMQorY29uc3QgX0NMRF9EVU1QRUQgPSAzCitjb25zdCBfU1lTX21pZ3JhdGVfcGFnZXMg
PSBfX19OUl9taWdyYXRlX3BhZ2VzCitjb25zdCBfQ1NJWkUgPSAwMDAwMDYwCitjb25zdCBfUlRN
R1JQX1RDID0gOAorY29uc3QgX1JUTV9ORVdDSEFJTiA9IDEwMAorY29uc3QgX0VBQ0NFUyA9IDEz
Citjb25zdCBfX1BPU0lYX01BWF9DQU5PTiA9IDI1NQorY29uc3QgX1JUUFJPVF9aRUJSQSA9IDEx
Citjb25zdCBfX1BPU0lYX1RIUkVBRF9USFJFQURTX01BWCA9IDY0Citjb25zdCBfQ0xPQ0tfQk9P
VFRJTUUgPSA3Citjb25zdCBfX194ODZfNjQgPSAxCitjb25zdCBfQ1FVSVQgPSAwMzQKK2NvbnN0
IF9USU9DR1BUTl92YWwgPSAyMTQ3NzY3MzQ0Citjb25zdCBfX1NDX1hPUEVOX1ZFUlNJT04gPSA4
OQorY29uc3QgX19fSU5UMTZfTUFYX18gPSAweDdmZmYKK2NvbnN0IF9fU0NfTkxfU0VUTUFYID0g
MTIzCitjb25zdCBfX19OUl9pb19jYW5jZWwgPSAyMTAKK2NvbnN0IF9fU1lTX0NERUZTX0ggPSAx
Citjb25zdCBfU0NOeExFQVNUMzIgPSAieCIKK2NvbnN0IF9FVEhfUF9NT0JJVEVYID0gMHgwMDE1
Citjb25zdCBfSUZMQV9FVkVOVF9CT05ESU5HX0ZBSUxPVkVSID0gMworY29uc3QgX1NJX1RJTUVS
ID0gLTIKK2NvbnN0IF9FTk9LRVkgPSAxMjYKK2NvbnN0IF9JRkxBX0JSUE9SVF9UT1BPTE9HWV9D
SEFOR0VfQUNLID0gMTkKK2NvbnN0IF9BUlBIUkRfQ1NMSVA2ID0gMjU5Citjb25zdCBfX19XSU5U
X01JTl9fID0gMAorY29uc3QgX19fU19JRlJFRyA9IDAxMDAwMDAKK2NvbnN0IF9JTlRQVFJfTUlO
ID0gKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEpCitjb25zdCBfX19TX0lTVUlEID0gMDQwMDAKK2Nv
bnN0IF9QUl9TRVRfU0VDVVJFQklUUyA9IDI4Citjb25zdCBfRVBPTExXUkJBTkQgPSA1MTIKK2Nv
bnN0IF9fTEZTNjRfQVNZTkNIUk9OT1VTX0lPID0gMQorY29uc3QgX1NLRl9BRF9SWEhBU0ggPSAz
MgorY29uc3QgX1BGX0xPQ0FMID0gMQorY29uc3QgX0VOT1RTT0NLID0gODgKK2NvbnN0IF9TX0lG
TVQgPSBfX19TX0lGTVQKK2NvbnN0IF9fX05SX2tjbXAgPSAzMTIKK2NvbnN0IF9TWVNfc3BsaWNl
ID0gX19fTlJfc3BsaWNlCitjb25zdCBfX1BPU0lYX1RSQUNFX0lOSEVSSVQgPSAtMQorY29uc3Qg
X19TQ19TSFJUX01JTiA9IDExNAorY29uc3QgX0FSUEhSRF9MQVBCID0gNTE2Citjb25zdCBfSUZM
QV9CT05EX0FEX0lORk9fUEFSVE5FUl9LRVkgPSA0Citjb25zdCBfQ0xPQ0tfTU9OT1RPTklDX1JB
VyA9IDQKK2NvbnN0IF9NQ0FTVF9FWENMVURFID0gMAorY29uc3QgX1NJT0NTSUZNVFUgPSAweDg5
MjIKK2NvbnN0IF9BVF9TVEFUWF9GT1JDRV9TWU5DID0gMHgyMDAwCitjb25zdCBfU0lPQ0dJRkNP
TkYgPSAweDg5MTIKK2NvbnN0IF9GU19TRUNSTV9GTCA9IDB4MDAwMDAwMDEKK2NvbnN0IF9fX0lO
VF9GQVNUMzJfV0lEVEhfXyA9IDY0Citjb25zdCBfX1BDX01BWF9DQU5PTiA9IDEKK2NvbnN0IF9G
SU9DTEVYID0gMHg1NDUxCitjb25zdCBfX19JTFAzMl9PRkZCSUdfTERGTEFHUyA9ICItbTMyIgor
Y29uc3QgX0lGTEFfSFNSX01VTFRJQ0FTVF9TUEVDID0gMworY29uc3QgX19fSU5UX0ZBU1QxNl9N
QVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX1NZU19tbG9ja2FsbCA9IF9fX05SX21s
b2NrYWxsCitjb25zdCBfU1lTX3NldF90aHJlYWRfYXJlYSA9IF9fX05SX3NldF90aHJlYWRfYXJl
YQorY29uc3QgX01TX0JJTkQgPSA0MDk2Citjb25zdCBfQVJQT1BfSW5SRVFVRVNUID0gOAorY29u
c3QgX1NJWkVPRl9WT0lEX1AgPSA4Citjb25zdCBfU0lPQ0dJRk5FVE1BU0sgPSAweDg5MWIKK2Nv
bnN0IF9TQ0hFRF9CQVRDSCA9IDMKK2NvbnN0IF9SVE1fTkVXQUNUSU9OID0gNDgKK2NvbnN0IF9B
Rl9LQ00gPSBfUEZfS0NNCitjb25zdCBfU1lTX2NvcHlfZmlsZV9yYW5nZSA9IF9fX05SX2NvcHlf
ZmlsZV9yYW5nZQorY29uc3QgX0FSUEhSRF9TTElQID0gMjU2Citjb25zdCBfTVNfUkVMQVRJTUUg
PSAyMDk3MTUyCitjb25zdCBfUlVTQUdFX1NFTEYgPSAwCitjb25zdCBfX19GX1NFVE9XTl9FWCA9
IDE1Citjb25zdCBfX19STElNSVRfTklDRSA9IDEzCitjb25zdCBfU09fQVRUQUNIX0ZJTFRFUiA9
IDI2Citjb25zdCBfRVBPTExJTiA9IDEKK2NvbnN0IF9JRkFfRl9IT01FQUREUkVTUyA9IDB4MTAK
K2NvbnN0IF9TS0ZfTExfT0ZGID0gKC0weDIwMDAwMCkKK2NvbnN0IF9SVEZfVEhST1cgPSAweDIw
MDAKK2NvbnN0IF9TWVNfb3Blbl9ieV9oYW5kbGVfYXQgPSBfX19OUl9vcGVuX2J5X2hhbmRsZV9h
dAorY29uc3QgX19fU0laRU9GX1dJTlRfVF9fID0gNAorY29uc3QgX0lGTEFfQlJQT1JUX1BST1hZ
QVJQID0gMTAKK2NvbnN0IF9TWVNfbWFkdmlzZSA9IF9fX05SX21hZHZpc2UKK2NvbnN0IF9TVEFf
RlJFUUhPTEQgPSAweDAwODAKK2NvbnN0IF9QRl9WU09DSyA9IDQwCitjb25zdCBfTkNDUyA9IDMy
Citjb25zdCBfX19JRkxBX1ZSRl9QT1JUX01BWCA9IDIKK2NvbnN0IF9fU0NfVjZfSUxQMzJfT0ZG
MzIgPSAxNzYKK2NvbnN0IF9DTERfRVhJVEVEID0gMQorY29uc3QgX0VUT09NQU5ZUkVGUyA9IDEw
OQorY29uc3QgX1JUQVhfRkVBVFVSRV9FQ04gPSAoMSA8PCAwKQorY29uc3QgX0VUSF9QX0hTUiA9
IDB4ODkyRgorY29uc3QgX1NZU19pb19zZXR1cCA9IF9fX05SX2lvX3NldHVwCitjb25zdCBfUkxJ
TUlUX0NPUkUgPSA0Citjb25zdCBfU1lTX2tleWN0bCA9IF9fX05SX2tleWN0bAorY29uc3QgX19T
Q19TRU1fTlNFTVNfTUFYID0gMzIKK2NvbnN0IF9FUE9MTFdBS0VVUCA9IDUzNjg3MDkxMgorY29u
c3QgX19fTlJfZmxpc3R4YXR0ciA9IDE5NgorY29uc3QgX19TQ19CQVJSSUVSUyA9IDEzMworY29u
c3QgX1NZU19zZXRnaWQgPSBfX19OUl9zZXRnaWQKK2NvbnN0IF9fU0NfV09SRF9CSVQgPSAxMDcK
K2NvbnN0IF9BUlBIUkRfUk9TRSA9IDI3MAorY29uc3QgX1NJX1VTRVIgPSAwCitjb25zdCBfSU5f
Q0xBU1NCX05TSElGVCA9IDE2Citjb25zdCBfTkRUUEFfUFJPWFlfUUxFTiA9IDE0Citjb25zdCBf
UFJJaTE2ID0gImkiCitjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9NQUMgPSA1Citj
b25zdCBfTVNHX0NPTkZJUk0gPSAyMDQ4Citjb25zdCBfX19OUl9zeW1saW5rYXQgPSAyNjYKK2Nv
bnN0IF9IQVZFX0ZVVElNRVNBVCA9IDEKK2NvbnN0IF9fX1BEUF9FTkRJQU4gPSAzNDEyCitjb25z
dCBfUFRIUkVBRF9LRVlTX01BWCA9IDEwMjQKK2NvbnN0IF9NU19OT1NVSUQgPSAyCitjb25zdCBf
SUZMQV9CUl9NQ0FTVF9RVUVSWV9JTlRWTCA9IDMzCitjb25zdCBfX19VSU5UTUFYX01BWF9fID0g
MHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfSUZMQV9XRUlHSFQgPSAxNQorY29uc3QgX0lQVjZf
WEZSTV9QT0xJQ1kgPSAzNQorY29uc3QgX19fTlJfYWNjZXNzID0gMjEKK2NvbnN0IF9fU0NfTEVW
RUwxX0lDQUNIRV9TSVpFID0gMTg1Citjb25zdCBfUlRNR1JQX0lQVjZfSUZBRERSID0gMHgxMDAK
K2NvbnN0IF9fX05SX2xpbmsgPSA4NgorY29uc3QgX0ZTX1hGTEFHX1JFQUxUSU1FID0gMHgwMDAw
MDAwMQorY29uc3QgX0ZBTExPQ19GTF9JTlNFUlRfUkFOR0UgPSAweDIwCitjb25zdCBfX19QUklQ
VFJfUFJFRklYID0gImwiCitjb25zdCBfSUZMQV9YRlJNX1VOU1BFQyA9IDAKK2NvbnN0IF9TVEFU
WF9DVElNRSA9IDB4MDA4MAorY29uc3QgX19fU0NIQVJfTUFYX18gPSAweDdmCitjb25zdCBfU0hS
VF9XSURUSCA9IDE2Citjb25zdCBfU0lPQ0RFTFJUID0gMHg4OTBDCitjb25zdCBfQUZfSVBYID0g
X1BGX0lQWAorY29uc3QgX01TX0JPUk4gPSAoMTw8MjkpCitjb25zdCBfSUZMQV9YRFAgPSA0Mwor
Y29uc3QgX0lGTEFfU1RBVFMgPSA3Citjb25zdCBfRVJPRlMgPSAzMAorY29uc3QgX1NPX05PX0NI
RUNLID0gMTEKK2NvbnN0IF9CQ19CQVNFX01BWCA9IF9fUE9TSVgyX0JDX0JBU0VfTUFYCitjb25z
dCBfWDg2X0VGTEFHU19JRl9CSVQgPSA5Citjb25zdCBfX1hPUEVOX1NITSA9IDEKK2NvbnN0IF9S
RUdfUlNJID0gOQorY29uc3QgX0FSUEhSRF9MT0NBTFRMSyA9IDc3MworY29uc3QgX19TQ19ERVZJ
Q0VfU1BFQ0lGSUNfUiA9IDE0MgorY29uc3QgX19TQ19TRUxFQ1QgPSA1OQorY29uc3QgX19fSUZB
X01BWCA9IDEwCitjb25zdCBfU1lTX2ZhY2Nlc3NhdCA9IF9fX05SX2ZhY2Nlc3NhdAorY29uc3Qg
X0NTVE9QQiA9IDAwMDAxMDAKK2NvbnN0IF9NQUNWTEFOX01BQ0FERFJfU0VUID0gMworY29uc3Qg
X1VJTlRfTUFYID0gKF9JTlRfTUFYICogMiArIDEpCitjb25zdCBfUFJfVElNSU5HX1NUQVRJU1RJ
Q0FMID0gMAorY29uc3QgX1NDTmRGQVNUOCA9ICJoaGQiCitjb25zdCBfTUFYVFRMID0gMjU1Citj
b25zdCBfRUFJX05PREFUQSA9IC01Citjb25zdCBfVENQX0NBX0NXUiA9IDIKK2NvbnN0IF9JWE9O
ID0gMDAwMjAwMAorY29uc3QgX19fZ251X2xpbnV4X18gPSAxCitjb25zdCBfX1BBVEhfU0VSVklD
RVMgPSAiL2V0Yy9zZXJ2aWNlcyIKK2NvbnN0IF9fX0lGTEFfVkZfVkxBTl9JTkZPX01BWCA9IDIK
K2NvbnN0IF9BRl9VTklYID0gX1BGX1VOSVgKK2NvbnN0IF9FVEhfUF9IRExDID0gMHgwMDE5Citj
b25zdCBfUFJfTVBYX0VOQUJMRV9NQU5BR0VNRU5UID0gNDMKK2NvbnN0IF9SVFBST1RfQklSRCA9
IDEyCitjb25zdCBfQVJQSFJEX0hXWDI1ID0gMjcyCitjb25zdCBfUlRNX0RFTFJPVVRFID0gMjUK
K2NvbnN0IF9JRkxBX0JSX1ZMQU5fUFJPVE9DT0wgPSA4Citjb25zdCBfSUZMQV9CUlBPUlRfVU5T
UEVDID0gMAorY29uc3QgX1JUTV9HRVRBRERSID0gMjIKK2NvbnN0IF9UQ0lPTiA9IDMKK2NvbnN0
IF9JUF9DSEVDS1NVTSA9IDIzCitjb25zdCBfU1lTX2ZjaG1vZGF0ID0gX19fTlJfZmNobW9kYXQK
K2NvbnN0IF9DTE9ORV9ORVdVU0VSID0gMHgxMDAwMDAwMAorY29uc3QgX1RJT0NOT1RUWSA9IDB4
NTQyMgorY29uc3QgX1NPX05PRkNTID0gNDMKK2NvbnN0IF9TWVNfY2xvY2tfc2V0dGltZSA9IF9f
X05SX2Nsb2NrX3NldHRpbWUKK2NvbnN0IF9JUF9QS1RPUFRJT05TID0gOQorY29uc3QgX1RDUF9R
VUVVRVNfTlIgPSAzCitjb25zdCBfX19GTFQ2NF9ERUNJTUFMX0RJR19fID0gMTcKK2NvbnN0IF9J
Q01QNl9USU1FX0VYQ0VFRF9SRUFTU0VNQkxZID0gMQorY29uc3QgX0lQVE9TX0RTQ1BfTUFTSyA9
IDB4ZmMKK2NvbnN0IF9TSUdJTlQgPSAyCitjb25zdCBfQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lE
ID0gMgorY29uc3QgX0lDTVA2X0RTVF9VTlJFQUNIID0gMQorY29uc3QgX0lGTEFfR0VORVZFX1RP
UyA9IDQKK2NvbnN0IF9QUl9GUF9FWENfRElTQUJMRUQgPSAwCitjb25zdCBfTUFEVl9ET0RVTVAg
PSAxNworY29uc3QgX1NZU19nZXRfdGhyZWFkX2FyZWEgPSBfX19OUl9nZXRfdGhyZWFkX2FyZWEK
K2NvbnN0IF9TT0xfUE5QSVBFID0gMjc1Citjb25zdCBfTUFYX0xJTktTID0gMzIKK2NvbnN0IF9S
VE5MX0ZBTUlMWV9JUE1SID0gMTI4Citjb25zdCBfTkxfTU1BUF9TVEFUVVNfQ09QWSA9IDMKK2Nv
bnN0IF9fU0NfUkVBREVSX1dSSVRFUl9MT0NLUyA9IDE1MworY29uc3QgX19TQ19BSU9fUFJJT19E
RUxUQV9NQVggPSAyNQorY29uc3QgX1JUTkxHUlBfUEhPTkVUX0lGQUREUiA9IDIxCitjb25zdCBf
QVJQSFJEX0ZDRkFCUklDID0gNzg3Citjb25zdCBfQ0xPTkVfUEFSRU5UX1NFVFRJRCA9IDB4MDAx
MDAwMDAKK2NvbnN0IF9TWVNfbmV3ZnN0YXRhdCA9IF9fX05SX25ld2ZzdGF0YXQKK2NvbnN0IF9J
RkZfTk9UUkFJTEVSUyA9IDMyCitjb25zdCBfVENQX1NBVkVfU1lOID0gMjcKK2NvbnN0IF9QUklp
MzIgPSAiaSIKK2NvbnN0IF9USU1FX0VSUk9SID0gNQorY29uc3QgX19fTlJfcmVhZCA9IDAKK2Nv
bnN0IF9WRU9MMiA9IDE2Citjb25zdCBfRVRIRVJUWVBFX05UUkFJTEVSID0gMTYKK2NvbnN0IF9f
U0NfTU9OT1RPTklDX0NMT0NLID0gMTQ5Citjb25zdCBfVENBX1JPT1RfQ09VTlQgPSAzCitjb25z
dCBfUEtFWV9ESVNBQkxFX0FDQ0VTUyA9IDB4MQorY29uc3QgX0hBVkVfQVNfWDg2X1BDUkVMID0g
MQorY29uc3QgX19faW92ZWNfZGVmaW5lZCA9IDEKK2NvbnN0IF9UVU5fRkxUX0FMTE1VTFRJID0g
MHgwMDAxCitjb25zdCBfTkVUTElOS19SWF9SSU5HID0gNgorY29uc3QgX0VOT1RSRUNPVkVSQUJM
RSA9IDEzMQorY29uc3QgX1BUUkFDRV9JTlRFUlJVUFQgPSAxNjkwMworY29uc3QgX0FGX0NBSUYg
PSBfUEZfQ0FJRgorY29uc3QgX1NPTF9JUFY2ID0gNDEKK2NvbnN0IF9JRkxBX0JST0FEQ0FTVCA9
IDIKK2NvbnN0IF9fX0xEQkxfTUFOVF9ESUdfXyA9IDY0Citjb25zdCBfRkZJX1RZUEVfU0lOVDgg
PSA2Citjb25zdCBfX19OUl93YWl0aWQgPSAyNDcKK2NvbnN0IF9JWEFOWSA9IDAwMDQwMDAKK2Nv
bnN0IF9TWVNfc2NoZWRfc2V0YWZmaW5pdHkgPSBfX19OUl9zY2hlZF9zZXRhZmZpbml0eQorY29u
c3QgX19fRkxUNjRYX0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9fU0NfU1BPUkFESUNfU0VS
VkVSID0gMTYwCitjb25zdCBfUE9MTF9FUlIgPSA0Citjb25zdCBfSUZMQV9YRFBfVU5TUEVDID0g
MAorY29uc3QgX0ZfUkRMQ0sgPSAwCitjb25zdCBfSVBPUFRfREVCTUVBUyA9IDB4NDAKK2NvbnN0
IF9BVF9GRENXRCA9IC0xMDAKK2NvbnN0IF9JTlRQVFJfV0lEVEggPSBfX19XT1JEU0laRQorY29u
c3QgX19TQ19QSUlfT1NJX0NMVFMgPSA2NAorY29uc3QgX1NZU19waXBlMiA9IF9fX05SX3BpcGUy
Citjb25zdCBfSUZMQV9CT05EX1NMQVZFX0FEX1BBUlRORVJfT1BFUl9QT1JUX1NUQVRFID0gOAor
Y29uc3QgX19DU19HTlVfTElCUFRIUkVBRF9WRVJTSU9OID0gMworY29uc3QgX1RDU0FEUkFJTiA9
IDEKK2NvbnN0IF9MT05HX01BWCA9IF9fX0xPTkdfTUFYX18KK2NvbnN0IF9QUklkMTYgPSAiZCIK
K2NvbnN0IF9fU1lTX0lOT1RJRllfSCA9IDEKK2NvbnN0IF9TWVNfYnBmID0gX19fTlJfYnBmCitj
b25zdCBfUlROTEdSUF9OT1A0ID0gMTcKK2NvbnN0IF9fU0NfWE9QRU5fWENVX1ZFUlNJT04gPSA5
MAorY29uc3QgX1BSX01QWF9ESVNBQkxFX01BTkFHRU1FTlQgPSA0NAorY29uc3QgX0lOVF9MRUFT
VDhfTUlOID0gKC0xMjgpCitjb25zdCBfU0lHSU8gPSBfU0lHUE9MTAorY29uc3QgX0lQVjZfUkVD
Vk9SSUdEU1RBRERSID0gX0lQVjZfT1JJR0RTVEFERFIKK2NvbnN0IF9fUENfRklMRVNJWkVCSVRT
ID0gMTMKK2NvbnN0IF9USU9DR1BHUlAgPSAweDU0MEYKK2NvbnN0IF9fX0ZMVDMyWF9NSU5fRVhQ
X18gPSAoLTEwMjEpCitjb25zdCBfVElPQ0dXSU5TWl92YWwgPSAyMTUyMworY29uc3QgX19TQ19M
RVZFTDJfQ0FDSEVfTElORVNJWkUgPSAxOTMKK2NvbnN0IF9FVEhfUF9BVE1NUE9BID0gMHg4ODRj
Citjb25zdCBfSEFWRV9TVFJJTkdTX0ggPSAxCitjb25zdCBfRE5fQ1JFQVRFID0gMHgwMDAwMDAw
NAorY29uc3QgX0ZTX1BPTElDWV9GTEFHU19QQURfMTYgPSAweDAyCitjb25zdCBfU09fT09CSU5M
SU5FID0gMTAKK2NvbnN0IF9QQUNLRVRfUk9MTE9WRVJfU1RBVFMgPSAyMQorY29uc3QgX19QT1NJ
WF9BU1lOQ0hST05PVVNfSU8gPSAyMDA4MDkKK2NvbnN0IF9fQ1NfTEZTX0xJQlMgPSAxMDAyCitj
b25zdCBfUEFDS0VUX01SX1BST01JU0MgPSAxCitjb25zdCBfX19GTFQ2NF9NQVhfXyA9IDEuMQor
Y29uc3QgX19fVVNFX0lTT0MxMSA9IDEKK2NvbnN0IF9fU0NfTEVWRUwyX0NBQ0hFX0FTU09DID0g
MTkyCitjb25zdCBfVENTQlJLID0gMHg1NDA5Citjb25zdCBfSU5UX0xFQVNUMzJfV0lEVEggPSAz
MgorY29uc3QgX0JQRl9NSU5PUl9WRVJTSU9OID0gMQorY29uc3QgX19fR05VX0xJQlJBUllfXyA9
IDYKK2NvbnN0IF9fX1NURENfSVNPXzEwNjQ2X18gPSAyMDE3MDYKK2NvbnN0IF9FSVNOQU0gPSAx
MjAKK2NvbnN0IF9JUFY2X0FVVE9GTE9XTEFCRUwgPSA3MAorY29uc3QgX19TQ19MRVZFTDRfQ0FD
SEVfTElORVNJWkUgPSAxOTkKK2NvbnN0IF9JRkxBX0xJTktJTkZPID0gMTgKK2NvbnN0IF9JUF9Q
TVRVRElTQ19ETyA9IDIKK2NvbnN0IF9QVFJBQ0VfT0xEU0VUT1BUSU9OUyA9IDIxCitjb25zdCBf
SVBfUEtUSU5GTyA9IDgKK2NvbnN0IF9PX1JTWU5DID0gX09fU1lOQworY29uc3QgX1NQTElDRV9G
X05PTkJMT0NLID0gMgorY29uc3QgX0NMT05FX0NISUxEX0NMRUFSVElEID0gMHgwMDIwMDAwMAor
Y29uc3QgX0hBVkVfT0ZGNjRfVCA9IDEKK2NvbnN0IF9GU19FT0ZCTE9DS1NfRkwgPSAweDAwNDAw
MDAwCitjb25zdCBfX1NDX0ZJTEVfU1lTVEVNID0gMTQ4Citjb25zdCBfQ0hBUkNMQVNTX05BTUVf
TUFYID0gMjA0OAorY29uc3QgX0lOVF9NQVggPSBfX19JTlRfTUFYX18KK2NvbnN0IF9fX0xQNjRf
T0ZGNjRfQ0ZMQUdTID0gIi1tNjQiCitjb25zdCBfSU5UX1dJRFRIID0gMzIKK2NvbnN0IF9ORFRB
X1VOU1BFQyA9IDAKK2NvbnN0IF9UVU5fRl9UU080ID0gMHgwMgorY29uc3QgX19QT1NJWF9USFJF
QURTID0gMjAwODA5Citjb25zdCBfUlRFWFRfRklMVEVSX0JSVkxBTiA9ICgxIDw8IDEpCitjb25z
dCBfUlRBWF9SRU9SREVSSU5HID0gOQorY29uc3QgX1BGX0FUTVNWQyA9IDIwCitjb25zdCBfTlNT
X0JVRkxFTl9HUk9VUCA9IDEwMjQKK2NvbnN0IF9QUl9UU0NfU0lHU0VHViA9IDIKK2NvbnN0IF9f
X05SX3NlbWN0bCA9IDY2Citjb25zdCBfU09MX1RJUEMgPSAyNzEKK2NvbnN0IF9NTERfTElTVEVO
RVJfUkVQT1JUID0gMTMxCitjb25zdCBfVVBBR0VTID0gMQorY29uc3QgX19TQ19QSUlfT1NJX00g
PSA2NQorY29uc3QgX0ZTX1hGTEFHX1BST0pJTkhFUklUID0gMHgwMDAwMDIwMAorY29uc3QgX01T
R19FUlJRVUVVRSA9IDgxOTIKK2NvbnN0IF9BUlBIUkRfSUVFRTgwMjE1NCA9IDgwNAorY29uc3Qg
X1RJT0NQS1QgPSAweDU0MjAKK2NvbnN0IF9FU1JDSCA9IDMKK2NvbnN0IF9fX1NJWkVPRl9QVEhS
RUFEX1JXTE9DS19UID0gNTYKK2NvbnN0IF9fUE9TSVgyX0JDX1NUUklOR19NQVggPSAxMDAwCitj
b25zdCBfSUZMQV9JTkVUNl9VTlNQRUMgPSAwCitjb25zdCBfQVRGX1VTRVRSQUlMRVJTID0gMHgx
MAorY29uc3QgX0lOX01PVkVfU0VMRiA9IDB4MDAwMDA4MDAKK2NvbnN0IF9fX1NJR19BVE9NSUNf
V0lEVEhfXyA9IDMyCitjb25zdCBfX1NDX1NZU1RFTV9EQVRBQkFTRV9SID0gMTYzCitjb25zdCBf
UlRBX0RQT1JUID0gMjkKK2NvbnN0IF9SVEFfU0VTU0lPTiA9IDEzCitjb25zdCBfUEFDS0FHRV9W
RVJTSU9OID0gInZlcnNpb24tdW51c2VkIgorY29uc3QgX19fREVDMTI4X1NVQk5PUk1BTF9NSU5f
XyA9IDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzCitjb25zdCBfQjIw
MDAwMDAgPSAwMDEwMDEzCitjb25zdCBfU1lTX2NobW9kID0gX19fTlJfY2htb2QKK2NvbnN0IF9T
VEFfUFBTV0FOREVSID0gMHgwNDAwCitjb25zdCBfX19JTlRfTUFYX18gPSAweDdmZmZmZmZmCitj
b25zdCBfX19VSU5UX0xFQVNUOF9NQVhfXyA9IDB4ZmYKK2NvbnN0IF9fX0lOVF9GQVNUMTZfV0lE
VEhfXyA9IDY0Citjb25zdCBfU1lTX2V2ZW50ZmQyID0gX19fTlJfZXZlbnRmZDIKK2NvbnN0IF9T
SUdCVVMgPSA3Citjb25zdCBfRlBfWFNUQVRFX01BR0lDMSA9IDB4NDY1MDU4NTMKK2NvbnN0IF9G
UF9YU1RBVEVfTUFHSUMyID0gMHg0NjUwNTg0NQorY29uc3QgX1RDR0VUU192YWwgPSAyMTUwNQor
Y29uc3QgX05MTV9GX1JFUVVFU1QgPSAweDAxCitjb25zdCBfTUFEVl9OT0hVR0VQQUdFID0gMTUK
K2NvbnN0IF9IQVZFX0lOT1RJRllfSU5JVCA9IDEKK2NvbnN0IF9SVE1fTkVXUURJU0MgPSAzNgor
Y29uc3QgX1BSX1NFVF9LRUVQQ0FQUyA9IDgKK2NvbnN0IF9QUl9FTkRJQU5fQklHID0gMAorY29u
c3QgX0lQUE9SVF9MT0dJTlNFUlZFUiA9IDUxMworY29uc3QgX1NZU19jbG9ja19nZXR0aW1lID0g
X19fTlJfY2xvY2tfZ2V0dGltZQorY29uc3QgX01TR19UUllIQVJEID0gNAorY29uc3QgX1BSX1NF
VF9NTV9BVVhWID0gMTIKK2NvbnN0IF9fUE9TSVhfU1lOQ0hST05JWkVEX0lPID0gMjAwODA5Citj
b25zdCBfU1lTX2Nsb3NlID0gX19fTlJfY2xvc2UKK2NvbnN0IF9QUl9TRVRfVU5BTElHTiA9IDYK
K2NvbnN0IF9TWVNfYnJrID0gX19fTlJfYnJrCitjb25zdCBfX05TSUcgPSAoX19fU0lHUlRNQVgg
KyAxKQorY29uc3QgX19QT1NJWF9GRF9TRVRTSVpFID0gX19QT1NJWF9PUEVOX01BWAorY29uc3Qg
X0VOT1RUWSA9IDI1Citjb25zdCBfUlRBX1BSSU9SSVRZID0gNgorY29uc3QgX0VUSF9QX0xBVCA9
IDB4NjAwNAorY29uc3QgX0ZGSV9OQVRJVkVfUkFXX0FQSSA9IDAKK2NvbnN0IF9QUl9HRVRfTk9f
TkVXX1BSSVZTID0gMzkKK2NvbnN0IF9GUEVfRkxUUkVTID0gNgorY29uc3QgX0ZTX1JFU0VSVkVE
X0ZMID0gMHg4MDAwMDAwMAorY29uc3QgX0ZTX1hGTEFHX0NPV0VYVFNJWkUgPSAweDAwMDEwMDAw
Citjb25zdCBfRVBPTExPVVQgPSA0Citjb25zdCBfU0NNX1RYVElNRSA9IF9TT19UWFRJTUUKK2Nv
bnN0IF9BREpfVElNRUNPTlNUID0gMHgwMDIwCitjb25zdCBfVktJTEwgPSAzCitjb25zdCBfUlRN
R1JQX0RFQ25ldF9ST1VURSA9IDB4NDAwMAorY29uc3QgX0FGX1FJUENSVFIgPSBfUEZfUUlQQ1JU
UgorY29uc3QgX1NPX0FDQ0VQVENPTk4gPSAzMAorY29uc3QgX0lGTEFfVkZfU1RBVFNfVFhfRFJP
UFBFRCA9IDgKK2NvbnN0IF9SVE5MX0ZBTUlMWV9NQVggPSAxMjkKK2NvbnN0IF9fUE9TSVhfVElN
RVJfTUFYID0gMzIKK2NvbnN0IF9fX05SX21rbm9kID0gMTMzCitjb25zdCBfUkVHX0VGTCA9IDE3
Citjb25zdCBfX19TU0UyX18gPSAxCitjb25zdCBfSVBfTVVMVElDQVNUX1RUTCA9IDMzCitjb25z
dCBfU09DS19TRVFQQUNLRVQgPSA1Citjb25zdCBfX19XQUxMID0gMHg0MDAwMDAwMAorY29uc3Qg
X1JUTV9ERUxNREIgPSA4NQorY29uc3QgX0lMTF9JTExPUEMgPSAxCitjb25zdCBfTkxNU0dfRVJS
T1IgPSAweDIKK2NvbnN0IF9QUl9HRVRfVElEX0FERFJFU1MgPSA0MAorY29uc3QgX1NZU192bXNw
bGljZSA9IF9fX05SX3Ztc3BsaWNlCitjb25zdCBfVENQX1NZTkNOVCA9IDcKK2NvbnN0IF9SVF9T
Q09QRV9TSVRFID0gMjAwCitjb25zdCBfU1lTX2V4ZWN2ZWF0ID0gX19fTlJfZXhlY3ZlYXQKK2Nv
bnN0IF9JRkFfRl9URU1QT1JBUlkgPSBfSUZBX0ZfU0VDT05EQVJZCitjb25zdCBfQ1JETFkgPSAw
MDAzMDAwCitjb25zdCBfRVRIX1BfUFJFQVVUSCA9IDB4ODhDNworY29uc3QgX19fTlJfc2NoZWRf
cnJfZ2V0X2ludGVydmFsID0gMTQ4Citjb25zdCBfUkVHX1IxMiA9IDQKK2NvbnN0IF9JUFY2XzIy
OTJQS1RJTkZPID0gMgorY29uc3QgX19fSU9WX01BWCA9IDEwMjQKK2NvbnN0IF9BSV9BTEwgPSAw
eDAwMTAKK2NvbnN0IF9FVEhfUF9GQ09FID0gMHg4OTA2Citjb25zdCBfSUZMQV9DQVJSSUVSID0g
MzMKK2NvbnN0IF9SVEFfTkVXRFNUID0gMTkKK2NvbnN0IF9fX05SX2FkanRpbWV4ID0gMTU5Citj
b25zdCBfQllURV9PUkRFUiA9IF9fX0JZVEVfT1JERVIKK2NvbnN0IF9fX0ZMVF9ERU5PUk1fTUlO
X18gPSAxLjEKK2NvbnN0IF9FQ0hPUFJUID0gMDAwMjAwMAorY29uc3QgX0lGTEFfUk1ORVRfVU5T
UEVDID0gMAorY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTMyCitj
b25zdCBfRl9TSExDSyA9IDgKK2NvbnN0IF9FVElNRURPVVQgPSAxMTAKK2NvbnN0IF9fU0NfRklM
RV9MT0NLSU5HID0gMTQ3Citjb25zdCBfTVNHX1BFRUsgPSAyCitjb25zdCBfU1lTX21zeW5jID0g
X19fTlJfbXN5bmMKK2NvbnN0IF9FVEhfUF8xNTg4ID0gMHg4OEY3Citjb25zdCBfX1NDX1BBU1Nf
TUFYID0gODgKK2NvbnN0IF9JRkxBX0hTUl9VTlNQRUMgPSAwCitjb25zdCBfQkNfU1RSSU5HX01B
WCA9IF9fUE9TSVgyX0JDX1NUUklOR19NQVgKK2NvbnN0IF9GTFVTSE8gPSAwMDEwMDAwCitjb25z
dCBfU1lTX2xzdGF0ID0gX19fTlJfbHN0YXQKK2NvbnN0IF9USU9DTV9SVFMgPSAweDAwNAorY29u
c3QgX0FSUEhSRF9JUkRBID0gNzgzCitjb25zdCBfVENTQlJLUCA9IDB4NTQyNQorY29uc3QgX0VQ
SVBFID0gMzIKK2NvbnN0IF9fX0ZMVDMyWF9IQVNfREVOT1JNX18gPSAxCitjb25zdCBfX0JJVFNf
VUlPX0VYVF9IID0gMQorY29uc3QgX0lDTVA2X1JSX0ZMQUdTX1RFU1QgPSAweDgwCitjb25zdCBf
U1lTX2FsYXJtID0gX19fTlJfYWxhcm0KK2NvbnN0IF9JRkZfVFVOID0gMHgwMDAxCitjb25zdCBf
X19FTlVNX0lEVFlQRV9UID0gMQorY29uc3QgX1BSX0ZQX01PREVfRlJFID0gKDEgPDwgMSkKK2Nv
bnN0IF9NQUNTRUNfVkFMSURBVEVfRElTQUJMRUQgPSAwCitjb25zdCBfSUZMQV9HRU5FVkVfVFRM
ID0gMworY29uc3QgX0hBVkVfSU5PVElGWV9BRERfV0FUQ0ggPSAxCitjb25zdCBfUFJJWDE2ID0g
IlgiCitjb25zdCBfX19GTFRfRVZBTF9NRVRIT0RfVFNfMTg2NjFfM19fID0gMAorY29uc3QgX05E
X05BX0ZMQUdfUk9VVEVSID0gMHgwMDAwMDA4MAorY29uc3QgX0lQVjZfUkVDVlBBVEhNVFUgPSA2
MAorY29uc3QgX01BRFZfTk9STUFMID0gMAorY29uc3QgX0ZGSV9SRUdJU1RFUiA9IDcKK2NvbnN0
IF9QUklkMzIgPSAiZCIKK2NvbnN0IF9OTEFfRl9ORVRfQllURU9SREVSID0gKDEgPDwgMTQpCitj
b25zdCBfSEFWRV9FWFBMID0gMQorY29uc3QgX0lQX1JFVE9QVFMgPSA3Citjb25zdCBfSVBfTVVM
VElDQVNUX0lGID0gMzIKK2NvbnN0IF9FWFBSX05FU1RfTUFYID0gX19QT1NJWDJfRVhQUl9ORVNU
X01BWAorY29uc3QgX05fUFBQID0gMworY29uc3QgX19fR0xJQkNfTElOVVhfVkVSU0lPTl9DT0RF
ID0gMjY3MDA4Citjb25zdCBfRlNfTUFYX0tFWV9TSVpFID0gNjQKK2NvbnN0IF9QRl9JTkVUNiA9
IDEwCitjb25zdCBfU1lTX2NoZGlyID0gX19fTlJfY2hkaXIKK2NvbnN0IF9QVFJBQ0VfRVZFTlRf
VkZPUksgPSAyCitjb25zdCBfU09fUkNWVElNRU8gPSAyMAorY29uc3QgX19fTlJfdGltZXMgPSAx
MDAKK2NvbnN0IF9fUE9TSVhfVUlPX01BWElPViA9IDE2Citjb25zdCBfSUZMQV9CUl9NQ0FTVF9R
VUVSSUVSX0lOVFZMID0gMzIKK2NvbnN0IF9JUF9UT1MgPSAxCitjb25zdCBfX1NDXzJfUEJTX0xP
Q0FURSA9IDE3MAorY29uc3QgX05MTVNHX05PT1AgPSAweDEKK2NvbnN0IF9GU19QT0xJQ1lfRkxB
R1NfUEFEXzMyID0gMHgwMworY29uc3QgX0FSUERfVVBEQVRFID0gMHgwMQorY29uc3QgX19DU19M
RlNfTElOVEZMQUdTID0gMTAwMworY29uc3QgX19JT0NfRElSTUFTSyA9ICgoMSA8PCBfX0lPQ19E
SVJCSVRTKS0xKQorY29uc3QgX1NZU19jYXBzZXQgPSBfX19OUl9jYXBzZXQKK2NvbnN0IF9JQ01Q
Nl9ST1VURVJfUkVOVU1CRVJJTkcgPSAxMzgKK2NvbnN0IF9JTExfSUxMQURSID0gMworY29uc3Qg
X19CSVRTX1BPU0lYX09QVF9IID0gMQorY29uc3QgX1BSX0dFVF9GUEVYQyA9IDExCitjb25zdCBf
UFJfQ0FQQlNFVF9SRUFEID0gMjMKK2NvbnN0IF9UQ1BfTUQ1U0lHID0gMTQKK2NvbnN0IF9IQVZF
X0dFVFhBVFRSID0gMQorY29uc3QgX1JUTV9ERUxSVUxFID0gMzMKK2NvbnN0IF9SVE1fTkVXU1RB
VFMgPSA5MgorY29uc3QgX1RDU0FGTFVTSCA9IDIKK2NvbnN0IF9JRkxBX1BPUlRfVkYgPSAxCitj
b25zdCBfX0JJVFNfU0NIRURfSCA9IDEKK2NvbnN0IF9JUFY2X1JUSERSRFNUT1BUUyA9IDU1Citj
b25zdCBfX19OUl9tYWR2aXNlID0gMjgKK2NvbnN0IF9QUl9TUEVDX0lORElSRUNUX0JSQU5DSCA9
IDEKK2NvbnN0IF9YODZfQ1I0X1RTRF9CSVQgPSAyCitjb25zdCBfSUZMQV9CUl9ORl9DQUxMX0lQ
NlRBQkxFUyA9IDM3Citjb25zdCBfUFRSQUNFX1RSQUNFTUUgPSAwCitjb25zdCBfWDg2X0NSMF9Q
RV9CSVQgPSAwCitjb25zdCBfRkZJX0NMT1NVUkVTID0gMQorY29uc3QgX0lGQV9GX01BTkFHRVRF
TVBBRERSID0gMHgxMDAKK2NvbnN0IF9TSU9DQUREUlQgPSAweDg5MEIKK2NvbnN0IF9UQ0dFVEEg
PSAweDU0MDUKK2NvbnN0IF9JRkxBX01UVSA9IDQKK2NvbnN0IF9JRkxBX0JSX1JPT1RfUE9SVCA9
IDEyCitjb25zdCBfX0NTX1BPU0lYX1Y3X0lMUDMyX09GRkJJR19MSU5URkxBR1MgPSAxMTM5Citj
b25zdCBfX19TSVpFT0ZfUFRIUkVBRF9DT05EX1QgPSA0OAorY29uc3QgX19fU19JRklGTyA9IDAw
MTAwMDAKK2NvbnN0IF9fX1BSSTY0X1BSRUZJWCA9ICJsIgorY29uc3QgX19DU19QT1NJWF9WN19J
TFAzMl9PRkYzMl9MSU5URkxBR1MgPSAxMTM1Citjb25zdCBfSUZMQV9QUk9NSVNDVUlUWSA9IDMw
Citjb25zdCBfUFJfU0VUX0NISUxEX1NVQlJFQVBFUiA9IDM2Citjb25zdCBfU0lHUElQRSA9IDEz
Citjb25zdCBfVENHRVRTID0gMHg1NDAxCitjb25zdCBfU09MX0NBSUYgPSAyNzgKK2NvbnN0IF9J
RkxBX0JSX01DQVNUX01FTUJFUlNISVBfSU5UVkwgPSAzMQorY29uc3QgX1JURl9SRUlOU1RBVEUg
PSAweDAwMDgKK2NvbnN0IF9UQ0dFVFggPSAweDU0MzIKK2NvbnN0IF9JRkxBX1BBRCA9IDQyCitj
b25zdCBfRVRIX1BfRE5BX1JDID0gMHg2MDAyCitjb25zdCBfUlRNX0ZfRklCX01BVENIID0gMHgy
MDAwCitjb25zdCBfSUZMQV9CUlBPUlRfVkxBTl9UVU5ORUwgPSAyOQorY29uc3QgX1BST1RfUkVB
RCA9IDB4MQorY29uc3QgX1BSX1NQRUNfRElTQUJMRSA9ICgxIDw8IDIpCitjb25zdCBfUFRSQUNF
X1NFSVpFID0gMTY5MDIKK2NvbnN0IF9SVEZfQ0FDSEUgPSAweDAxMDAwMDAwCitjb25zdCBfX19E
RUMxMjhfTUlOX18gPSAxRS02MTQzCitjb25zdCBfSUNNUDZfRUNIT19SRVFVRVNUID0gMTI4Citj
b25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfR0NNID0gMgorY29uc3QgX19TWVNfVFlQ
RVNfSCA9IDEKK2NvbnN0IF9FVEhfUF9ETkFfUlQgPSAweDYwMDMKK2NvbnN0IF9fU0NfTUVNTE9D
SyA9IDE3Citjb25zdCBfU1lTX2Zpbml0X21vZHVsZSA9IF9fX05SX2Zpbml0X21vZHVsZQorY29u
c3QgX0JQRl9BID0gMHgxMAorY29uc3QgX0JQRl9CID0gMHgxMAorY29uc3QgX1BGX0lORVQgPSAy
Citjb25zdCBfU1lTX3J0X3NpZ3Byb2NtYXNrID0gX19fTlJfcnRfc2lncHJvY21hc2sKK2NvbnN0
IF9TSUdfQVRPTUlDX01JTiA9ICgtMjE0NzQ4MzY0Ny0xKQorY29uc3QgX19fR0NDX0hBVkVfU1lO
Q19DT01QQVJFX0FORF9TV0FQXzIgPSAxCitjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVf
QU5EX1NXQVBfNCA9IDEKK2NvbnN0IF9TSU9DR0lGRkxBR1MgPSAweDg5MTMKK2NvbnN0IF9SRUdf
UjggPSAwCitjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfOCA9IDEKK2Nv
bnN0IF9GU19BUFBFTkRfRkwgPSAweDAwMDAwMDIwCitjb25zdCBfUlRBWF9DV05EID0gNworY29u
c3QgX19QT1NJWDJfQ19CSU5EID0gX19fUE9TSVgyX1RISVNfVkVSU0lPTgorY29uc3QgX19YT1BF
Tl9SRUFMVElNRV9USFJFQURTID0gMQorY29uc3QgX0JQRl9XID0gMHgwMAorY29uc3QgX0JQRl9Y
ID0gMHgwOAorY29uc3QgX1JXSF9XUklURV9MSUZFX0xPTkcgPSA0Citjb25zdCBfX19HQ0NfSEFW
RV9EV0FSRjJfQ0ZJX0FTTSA9IDEKK2NvbnN0IF9UQ1BPTEVOX1RJTUVTVEFNUCA9IDEwCitjb25z
dCBfRVRIX1BfQ0FJRiA9IDB4MDBGNworY29uc3QgX05EQV9QT1JUID0gNgorY29uc3QgX0VQT0xM
UkRIVVAgPSA4MTkyCitjb25zdCBfX19GTFQxMjhfTUFYX18gPSAxLjEKK2NvbnN0IF9USU9DU1JT
NDg1ID0gMHg1NDJGCitjb25zdCBfX19JRkxBX0lORVRfTUFYID0gMgorY29uc3QgX1JUQVhfSU5J
VFJXTkQgPSAxNAorY29uc3QgX19CSVRTX1RZUEVTX0xPQ0FMRV9UX0ggPSAxCitjb25zdCBfX19M
REJMX0RFQ0lNQUxfRElHX18gPSAyMQorY29uc3QgX0hBVkVfQVRBTkwgPSAxCitjb25zdCBfWERQ
X0FUVEFDSEVEX0RSViA9IDEKK2NvbnN0IF9fX0FUT01JQ19DT05TVU1FID0gMQorY29uc3QgX19f
TlJfbXNnZ2V0ID0gNjgKK2NvbnN0IF9fX05SX2dldHNvY2tvcHQgPSA1NQorY29uc3QgX1BUUkRJ
RkZfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEpCitjb25zdCBfV0lOVF9XSURUSCA9IDMy
Citjb25zdCBfTkVUTElOS19FWFRfQUNLID0gMTEKK2NvbnN0IF9TQ051OCA9ICJoaHUiCitjb25z
dCBfX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19JTkhFUklUID0gMjQ3Citjb25zdCBfSVBfUkVDVlRP
UyA9IDEzCitjb25zdCBfTkRUUEFfSUZJTkRFWCA9IDEKK2NvbnN0IF9FVEhfVExFTiA9IDIKK2Nv
bnN0IF9BSV9DQU5PTk5BTUUgPSAweDAwMDIKK2NvbnN0IF9fX05SX21sb2NrYWxsID0gMTUxCitj
b25zdCBfU0tGX0FEX0hBVFlQRSA9IDI4Citjb25zdCBfX19OUl9waXBlMiA9IDI5MworY29uc3Qg
X1BUUkFDRV9ERVRBQ0ggPSAxNworY29uc3QgX1NZU19zaWduYWxmZCA9IF9fX05SX3NpZ25hbGZk
Citjb25zdCBfX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xERkxBR1MgPSAxMTEzCitjb25zdCBfSVBW
Nl9ORVhUSE9QID0gOQorY29uc3QgX1JUQ0ZfRE9SRURJUkVDVCA9IDB4MDEwMDAwMDAKK2NvbnN0
IF9OREFfSUZJTkRFWCA9IDgKK2NvbnN0IF9fU0NfUElJID0gNTMKK2NvbnN0IF9BRl9BVE1TVkMg
PSBfUEZfQVRNU1ZDCitjb25zdCBfUEZfUEFDS0VUID0gMTcKK2NvbnN0IF9TWVNfZnV0aW1lc2F0
ID0gX19fTlJfZnV0aW1lc2F0Citjb25zdCBfSVBUT1NfUFJFQ19GTEFTSCA9IF9JUFRPU19DTEFT
U19DUzMKK2NvbnN0IF9BUlBIUkRfSVBHUkUgPSA3NzgKK2NvbnN0IF9fU0NfU0hFTEwgPSAxNTcK
K2NvbnN0IF9IQVZFX0xPR0wgPSAxCitjb25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfSU5WQUxJRF9G
T1JNQVQgPSAxCitjb25zdCBfX19VU0VfUE9TSVgyID0gMQorY29uc3QgX0VOT01FTSA9IDEyCitj
b25zdCBfWERQX0FUVEFDSEVEX1NLQiA9IDIKK2NvbnN0IF9JTl9DTEFTU0FfTkVUID0gMHhmZjAw
MDAwMAorY29uc3QgX0VTUk1OVCA9IDY5Citjb25zdCBfSVBWNl9MRUFWRV9BTllDQVNUID0gMjgK
K2NvbnN0IF9FTk9URU1QVFkgPSAzOQorY29uc3QgX1BUUkFDRV9HRVRTSUdJTkZPID0gMTY4OTgK
K2NvbnN0IF9fSU9DX05SQklUUyA9IDgKK2NvbnN0IF9QSVBFX0JVRiA9IDQwOTYKK2NvbnN0IF9B
Rl9JU0ROID0gX1BGX0lTRE4KK2NvbnN0IF9VTE9OR19MT05HX01BWCA9IChfTE9OR19MT05HX01B
WCAqIDIgKyAxKQorY29uc3QgX0xJTktfWFNUQVRTX1RZUEVfVU5TUEVDID0gMAorY29uc3QgX05E
VEFfTkFNRSA9IDEKK2NvbnN0IF9SVEFfUFJFRiA9IDIwCitjb25zdCBfQVJQSFJEX05PTkUgPSAw
eEZGRkUKK2NvbnN0IF9TWVNfZ2V0c29ja25hbWUgPSBfX19OUl9nZXRzb2NrbmFtZQorY29uc3Qg
X0VDSE9DVEwgPSAwMDAxMDAwCitjb25zdCBfUlROTEdSUF9JUFY0X1JVTEUgPSA4Citjb25zdCBf
SUZMQV9CT05EX0FEX0lORk8gPSAyMworY29uc3QgX0lGTEFfQlJfVU5TUEVDID0gMAorY29uc3Qg
X0lGTEFfSUZfTkVUTlNJRCA9IDQ2Citjb25zdCBfT19QQVRIID0gX19fT19QQVRICitjb25zdCBf
WDg2X0NSM19QQ0lEX05PRkxVU0hfQklUID0gNjMKK2NvbnN0IF9TWVNfc2NoZWRfZ2V0cGFyYW0g
PSBfX19OUl9zY2hlZF9nZXRwYXJhbQorY29uc3QgX1BSX1NFVF9OT19ORVdfUFJJVlMgPSAzOAor
Y29uc3QgX0lGTEFfQk9ORF9BRF9JTkZPX1VOU1BFQyA9IDAKK2NvbnN0IF9SVEZfRkxPVyA9IDB4
MDIwMDAwMDAKK2NvbnN0IF9TWVNfc2V0X21lbXBvbGljeSA9IF9fX05SX3NldF9tZW1wb2xpY3kK
K2NvbnN0IF9XQ09OVElOVUVEID0gOAorY29uc3QgX19fSUZMQV9CT05EX01BWCA9IDI4Citjb25z
dCBfSUZGX05PRklMVEVSID0gMHgxMDAwCitjb25zdCBfX190aW1lX3RfZGVmaW5lZCA9IDEKK2Nv
bnN0IF9JRkxBX05FV19ORVROU0lEID0gNDUKK2NvbnN0IF9CNjAwID0gMDAwMDAxMAorY29uc3Qg
X0FSUEhSRF9CSUYgPSA3NzUKK2NvbnN0IF9PX0RTWU5DID0gX19fT19EU1lOQworY29uc3QgX19f
TlJfbXNncmN2ID0gNzAKK2NvbnN0IF9SVFBST1RfUkEgPSA5Citjb25zdCBfSUZMQV9WUkZfVU5T
UEVDID0gMAorY29uc3QgX1BSX1NQRUNfTk9UX0FGRkVDVEVEID0gMAorY29uc3QgX05MTV9GX0RV
TVBfRklMVEVSRUQgPSAweDIwCitjb25zdCBfSUZMQV9WTEFOX1FPU19VTlNQRUMgPSAwCitjb25z
dCBfX1NDX0RFVklDRV9JTyA9IDE0MAorY29uc3QgX0lGTEFfSVBPSUJfVU1DQVNUID0gMworY29u
c3QgX1NDSEVEX1JSID0gMgorY29uc3QgX1BSSW84ID0gIm8iCitjb25zdCBfX0xGU19BU1lOQ0hS
T05PVVNfSU8gPSAxCitjb25zdCBfSUZMQV9QT1JUX1JFUVVFU1QgPSA2Citjb25zdCBfSUZMQV9C
T05EX0FEX0lORk9fQUdHUkVHQVRPUiA9IDEKK2NvbnN0IF9QQUNLRVRfTE9PUEJBQ0sgPSA1Citj
b25zdCBfU1lTX2ZkYXRhc3luYyA9IF9fX05SX2ZkYXRhc3luYworY29uc3QgX1NJT0NHSUZNQVAg
PSAweDg5NzAKK2NvbnN0IF9fX0dDQ19BU01fRkxBR19PVVRQVVRTX18gPSAxCitjb25zdCBfX19J
RkxBX0JPTkRfU0xBVkVfTUFYID0gOQorY29uc3QgX1NJT0NTQVJQID0gMHg4OTU1Citjb25zdCBf
U1lTX3BybGltaXQ2NCA9IF9fX05SX3BybGltaXQ2NAorY29uc3QgX19fREVDMzJfTUlOX18gPSAx
RS05NQorY29uc3QgX05MTV9GX1JFUExBQ0UgPSAweDEwMAorY29uc3QgX1RJT0NPVVRRID0gMHg1
NDExCitjb25zdCBfSUZBX0NBQ0hFSU5GTyA9IDYKK2NvbnN0IF9TWU5DX0ZJTEVfUkFOR0VfV0FJ
VF9CRUZPUkUgPSAxCitjb25zdCBfU1RBVFhfQkxPQ0tTID0gMHgwNDAwCitjb25zdCBfUFJfRlBf
RVhDX1VORCA9IDB4MDQwMDAwCitjb25zdCBfSUZMQV9WWExBTl9HUEUgPSAyNworY29uc3QgX1BB
Q0tBR0VfQlVHUkVQT1JUID0gIiIKK2NvbnN0IF9JUFY2XzIyOTJEU1RPUFRTID0gNAorY29uc3Qg
X0lGTEFfRVhUX01BU0sgPSAyOQorY29uc3QgX19fQVRPTUlDX0hMRV9BQ1FVSVJFID0gNjU1MzYK
K2NvbnN0IF9TWVNfdGltZXJmZF9zZXR0aW1lID0gX19fTlJfdGltZXJmZF9zZXR0aW1lCitjb25z
dCBfX19saW51eF9fID0gMQorY29uc3QgX1BPU0lYX0ZBRFZfUkFORE9NID0gMQorY29uc3QgX1BS
SWlMRUFTVDE2ID0gImkiCitjb25zdCBfSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQSA9IDYK
K2NvbnN0IF9fX1VTRV9JU09DOTUgPSAxCitjb25zdCBfX0hBVkVfU1RSVUNUX1RFUk1JT1NfQ19P
U1BFRUQgPSAxCitjb25zdCBfT19OT0ZPTExPVyA9IF9fX09fTk9GT0xMT1cKK2NvbnN0IF9OREFf
TElOS19ORVROU0lEID0gMTAKK2NvbnN0IF9fX1VTRV9JU09DOTkgPSAxCitjb25zdCBfUlRGX01T
UyA9IF9SVEZfTVRVCitjb25zdCBfX0JJVFNfU1RESU5UX1VJTlROX0ggPSAxCitjb25zdCBfRl9P
RkRfU0VUTEtXID0gMzgKK2NvbnN0IF9SVEFfRU5DQVAgPSAyMgorY29uc3QgX0VFWElTVCA9IDE3
Citjb25zdCBfUEFDS0VUX1ZFUlNJT04gPSAxMAorY29uc3QgX1RDUF9DTE9TRSA9IDcKK2NvbnN0
IF9TT19BVFRBQ0hfQlBGID0gNTAKK2NvbnN0IF9QVFJBQ0VfRVZFTlRfU0VDQ09NUCA9IDcKK2Nv
bnN0IF9BUlBIUkRfQ0hBT1MgPSA1Citjb25zdCBfX19GTFQzMl9NQU5UX0RJR19fID0gMjQKK2Nv
bnN0IF9fX0lGTEFfVkZfSU5GT19NQVggPSAyCitjb25zdCBfRVRIX1BfQkFUTUFOID0gMHg0MzA1
Citjb25zdCBfX1NUQVRfVkVSID0gX19TVEFUX1ZFUl9MSU5VWAorY29uc3QgX1BPTExfTVNHID0g
MworY29uc3QgX1NZU19zd2Fwb24gPSBfX19OUl9zd2Fwb24KK2NvbnN0IF9SVEZfQUREUkNPTkYg
PSAweDAwMDQwMDAwCitjb25zdCBfX19MREJMX0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9Q
Rl9NUExTID0gMjgKK2NvbnN0IF9fQklUU19TSUdJTkZPX0FSQ0hfSCA9IDEKK2NvbnN0IF9JQ01Q
Nl9GSUxURVJfUEFTU09OTFkgPSA0Citjb25zdCBfSVBfVFRMID0gMgorY29uc3QgX1NZU19ydF9z
aWdxdWV1ZWluZm8gPSBfX19OUl9ydF9zaWdxdWV1ZWluZm8KK2NvbnN0IF9fU0NfWE9QRU5fRU5I
X0kxOE4gPSA5MworY29uc3QgX19fTlJfdGltZXJfc2V0dGltZSA9IDIyMworY29uc3QgX1BUUkFD
RV9PX1NVU1BFTkRfU0VDQ09NUCA9IDIwOTcxNTIKK2NvbnN0IF9TWVNfZ2V0cG1zZyA9IF9fX05S
X2dldHBtc2cKK2NvbnN0IF9fU1lTX1JFU09VUkNFX0ggPSAxCitjb25zdCBfREVGRklMRU1PREUg
PSAoX1NfSVJVU1J8X1NfSVdVU1J8X1NfSVJHUlB8X1NfSVdHUlB8X1NfSVJPVEh8X1NfSVdPVEgp
Citjb25zdCBfUlRBX0RTVCA9IDEKK2NvbnN0IF9fX1NURENfSUVDXzU1OV9fID0gMQorY29uc3Qg
X1NZU19hcmNoX3ByY3RsID0gX19fTlJfYXJjaF9wcmN0bAorY29uc3QgX0FGX05FVFJPTSA9IF9Q
Rl9ORVRST00KK2NvbnN0IF9JUFRPU19USFJPVUdIUFVUID0gMHgwOAorY29uc3QgX05EVEFfVEhS
RVNIMiA9IDMKK2NvbnN0IF9DTE9DS19CT09UVElNRV9BTEFSTSA9IDkKK2NvbnN0IF9JRkxBX01B
Q1ZMQU5fTU9ERSA9IDEKK2NvbnN0IF9TX0lXUklURSA9IF9TX0lXVVNSCitjb25zdCBfSUNNUDZf
UEFSQU1QUk9CX09QVElPTiA9IDIKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9DRkxB
R1MgPSAxMTI0Citjb25zdCBfRVRIX1BfVFJfODAyXzIgPSAweDAwMTEKK2NvbnN0IF9USU9DTV9E
VFIgPSAweDAwMgorY29uc3QgX19TQ19VU0VSX0dST1VQU19SID0gMTY3Citjb25zdCBfRVRIX1Bf
QUxMID0gMHgwMDAzCitjb25zdCBfU1lTX2ZjaG93biA9IF9fX05SX2ZjaG93bgorY29uc3QgX0lQ
UE9SVF9TWVNUQVQgPSAxMQorY29uc3QgX19fTE9OR19NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZm
ZgorY29uc3QgX1NJR1NUS0ZMVCA9IDE2Citjb25zdCBfUlRGX01PRElGSUVEID0gMHgwMDIwCitj
b25zdCBfUFJJT19QUk9DRVNTID0gMAorY29uc3QgX19fTlJfc2VtZ2V0ID0gNjQKK2NvbnN0IF9J
RkFfRl9TVEFCTEVfUFJJVkFDWSA9IDB4ODAwCitjb25zdCBfUlROSF9DT01QQVJFX01BU0sgPSAo
X1JUTkhfRl9ERUFEIHwgX1JUTkhfRl9MSU5LRE9XTiB8IF9SVE5IX0ZfT0ZGTE9BRCkKK2NvbnN0
IF9OTE1fRl9BQ0tfVExWUyA9IDB4MjAwCitjb25zdCBfTF9JTkNSID0gMQorY29uc3QgX1JXSF9X
UklURV9MSUZFX1NIT1JUID0gMgorY29uc3QgX0VBRk5PU1VQUE9SVCA9IDk3Citjb25zdCBfSUZM
QV9CT05EX0FEX0xBQ1BfUkFURSA9IDIxCitjb25zdCBfU1lTX3NlbGVjdCA9IF9fX05SX3NlbGVj
dAorY29uc3QgX0lGTEFfVFVOX05VTV9RVUVVRVMgPSA4Citjb25zdCBfX19TSV9NQVhfU0laRSA9
IDEyOAorY29uc3QgX0lGTEFfQ09TVCA9IDgKK2NvbnN0IF9OTE1TR19ET05FID0gMHgzCitjb25z
dCBfX19OUl9zdGF0ZnMgPSAxMzcKK2NvbnN0IF9fX0ZfR0VUT1dOX0VYID0gMTYKK2NvbnN0IF9f
Q1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMgPSAxMTIyCitjb25zdCBfX19OUl9nZXRkZW50
czY0ID0gMjE3Citjb25zdCBfSEFWRV9JTk9USUZZX0lOSVQxID0gMQorY29uc3QgX0FJX1Y0TUFQ
UEVEID0gMHgwMDA4Citjb25zdCBfU0NOdUZBU1Q4ID0gImhodSIKK2NvbnN0IF9fX05SX2Vwb2xs
X2N0bCA9IDIzMworY29uc3QgX0FDQ0VTU1BFUk1TID0gKF9TX0lSV1hVfF9TX0lSV1hHfF9TX0lS
V1hPKQorY29uc3QgX1RDQV9EVU1QX0lOVklTSUJMRSA9IDEwCitjb25zdCBfU0lHRVZfVEhSRUFE
X0lEID0gNAorY29uc3QgX0ZGSV9UWVBFX0lOVCA9IDEKK2NvbnN0IF9OTF9BUkdNQVggPSBfX1BP
U0lYX0FSR19NQVgKK2NvbnN0IF9TU19ESVNBQkxFID0gMgorY29uc3QgX0VUSF9QX0NBTiA9IDB4
MDAwQworY29uc3QgX19fU0laRU9GX1BUSFJFQURfQkFSUklFUkFUVFJfVCA9IDQKK2NvbnN0IF9f
X0ZMVF9FVkFMX01FVEhPRF9fID0gMAorY29uc3QgX19fTlJfc2Vtb3AgPSA2NQorY29uc3QgX1Bf
QUxMID0gMAorY29uc3QgX0VUSF9QX01QTFNfTUMgPSAweDg4NDgKK2NvbnN0IF9fX05SX3B3cml0
ZXYyID0gMzI4Citjb25zdCBfU1lTX2FjY2VwdDQgPSBfX19OUl9hY2NlcHQ0Citjb25zdCBfX19T
SVpFT0ZfUFRSRElGRl9UX18gPSA4Citjb25zdCBfX19GTFQzMlhfREVOT1JNX01JTl9fID0gMS4x
Citjb25zdCBfSUZMQV9CT05EX1NMQVZFX1FVRVVFX0lEID0gNQorY29uc3QgX1JUUFJPVF9YT1JQ
ID0gMTQKK2NvbnN0IF9TWVNfcHJvY2Vzc192bV93cml0ZXYgPSBfX19OUl9wcm9jZXNzX3ZtX3dy
aXRldgorY29uc3QgX19fVENBX1JPT1RfTUFYID0gNQorY29uc3QgX0lGTEFfT1BFUlNUQVRFID0g
MTYKK2NvbnN0IF9JQ01QNl9SUl9QQ09VU0VfRkxBR1NfREVDUlBMVElNRSA9IDB4NDAKK2NvbnN0
IF9ORFRQQV9QUk9YWV9ERUxBWSA9IDEzCitjb25zdCBfX19STElNSVRfTlBST0MgPSA2Citjb25z
dCBfU1lTX3F1b3RhY3RsID0gX19fTlJfcXVvdGFjdGwKK2NvbnN0IF9fSU9DX05PTkUgPSAwCitj
b25zdCBfSUZMQV9CT05EX1NMQVZFX01JSV9TVEFUVVMgPSAyCitjb25zdCBfU09fU0VDVVJJVFlf
RU5DUllQVElPTl9UUkFOU1BPUlQgPSAyMworY29uc3QgX1NUQVRYX01PREUgPSAweDAwMDIKK2Nv
bnN0IF9GRklfVFlQRV9VSU5UOCA9IDUKK2NvbnN0IF9QUk9UX0dST1dTRE9XTiA9IDB4MDEwMDAw
MDAKK2NvbnN0IF9NQVBfR1JPV1NET1dOID0gMHgwMDEwMAorY29uc3QgX0VCQURNU0cgPSA3NAor
Y29uc3QgX01BUF9QT1BVTEFURSA9IDB4MDgwMDAKK2NvbnN0IF9USU1FX0RFTCA9IDIKK2NvbnN0
IF9fX0ZfU0VUT1dOID0gOAorY29uc3QgX1VJTlQxNl9NQVggPSAoNjU1MzUpCitjb25zdCBfTkxf
TEFOR01BWCA9IF9fUE9TSVgyX0xJTkVfTUFYCitjb25zdCBfTVNfTEFaWVRJTUUgPSAzMzU1NDQz
MgorY29uc3QgX1NZU19ta2RpciA9IF9fX05SX21rZGlyCitjb25zdCBfSUZMQV9NQUNTRUNfV0lO
RE9XID0gNQorY29uc3QgX19fTlJfaW9fZ2V0ZXZlbnRzID0gMjA4Citjb25zdCBfRkZJX0RFRkFV
TFRfQUJJID0gMgorY29uc3QgX1NZU19yZW5hbWUgPSBfX19OUl9yZW5hbWUKK2NvbnN0IF9FVEhf
UF9EU0EgPSAweDAwMUIKK2NvbnN0IF9QVFJBQ0VfU0VUX1RIUkVBRF9BUkVBID0gMjYKK2NvbnN0
IF9JUF9SRUNWVFRMID0gMTIKK2NvbnN0IF9YRFBfRkxBR1NfSFdfTU9ERSA9ICgxIDw8IDMpCitj
b25zdCBfTUFYX0hBTkRMRV9TWiA9IDEyOAorY29uc3QgX0lGRl9ERUJVRyA9IDQKK2NvbnN0IF9B
Rl9FQ09ORVQgPSBfUEZfRUNPTkVUCitjb25zdCBfVENBX1JBVEUgPSA1Citjb25zdCBfX1hPUEVO
X0VOSF9JMThOID0gMQorY29uc3QgX19TQ18yX0ZPUlRfUlVOID0gNTAKK2NvbnN0IF9OTE1TR0VS
Ul9BVFRSX0NPT0tJRSA9IDMKK2NvbnN0IF9fX05EVFBBX01BWCA9IDE5Citjb25zdCBfSUZMQV9O
VU1fVkYgPSAyMQorY29uc3QgX1JUQV9FWFBJUkVTID0gMjMKK2NvbnN0IF9QT0xMX09VVCA9IDIK
K2NvbnN0IF9fQklUU19TU19GTEFHU19IID0gMQorY29uc3QgX0lQT1BUX05PUCA9IDEKK2NvbnN0
IF9JRk5BTVNJWiA9IF9JRl9OQU1FU0laRQorY29uc3QgX1NZU192aGFuZ3VwID0gX19fTlJfdmhh
bmd1cAorY29uc3QgX0ZTX0hVR0VfRklMRV9GTCA9IDB4MDAwNDAwMDAKK2NvbnN0IF9TSUdUUkFQ
ID0gNQorY29uc3QgX19fRkxUMTI4X0RJR19fID0gMzMKK2NvbnN0IF9TWVNfdGltZXJmZF9nZXR0
aW1lID0gX19fTlJfdGltZXJmZF9nZXR0aW1lCitjb25zdCBfQlBGX0xFTiA9IDB4ODAKK2NvbnN0
IF9CSUdfRU5ESUFOID0gX19fQklHX0VORElBTgorY29uc3QgX1JUTUdSUF9JUFY0X1JPVVRFID0g
MHg0MAorY29uc3QgX0IxMDAwMDAwID0gMDAxMDAxMAorY29uc3QgX1NZU19nZXRjcHUgPSBfX19O
Ul9nZXRjcHUKK2NvbnN0IF9fX05SX21xX3RpbWVkcmVjZWl2ZSA9IDI0MworY29uc3QgX19QQVRI
X05FVFdPUktTID0gIi9ldGMvbmV0d29ya3MiCitjb25zdCBfVVNJTkdfU1BMSVRfU1RBQ0sgPSAx
Citjb25zdCBfRkZJX1RZUEVfU0lOVDMyID0gMTAKK2NvbnN0IF9fX1JMSU1JVF9PRklMRSA9IDcK
K2NvbnN0IF9JRkxBX0JSX01DQVNUX1FVRVJZX1JFU1BPTlNFX0lOVFZMID0gMzQKK2NvbnN0IF9T
SU9DR0lGTUVNID0gMHg4OTFmCitjb25zdCBfSU5UX0ZBU1QxNl9XSURUSCA9IF9fX1dPUkRTSVpF
Citjb25zdCBfSEFWRV9TWVNfU0VMRUNUX0ggPSAxCitjb25zdCBfT19XUk9OTFkgPSAwMQorY29u
c3QgX19fTlJfcHJlYWR2ID0gMjk1Citjb25zdCBfU1lTX2FjY3QgPSBfX19OUl9hY2N0Citjb25z
dCBfRE5fUkVOQU1FID0gMHgwMDAwMDAxMAorY29uc3QgX1NZU19zZXRyZXVpZCA9IF9fX05SX3Nl
dHJldWlkCitjb25zdCBfSUZMQV9YRFBfRFJWX1BST0dfSUQgPSA1Citjb25zdCBfRUFMUkVBRFkg
PSAxMTQKK2NvbnN0IF9ORFRQQV9RVUVVRV9MRU4gPSA4Citjb25zdCBfX19HTElCQ19VU0VfSUVD
XzYwNTU5X0ZVTkNTX0VYVCA9IDEKK2NvbnN0IF9JTExfUFJWT1BDID0gNQorY29uc3QgX1RVTkdF
VEZFQVRVUkVTX3ZhbCA9IDIxNDc3Njc1MDMKK2NvbnN0IF9SVE5MR1JQX0lQVjZfUk9VVEUgPSAx
MQorY29uc3QgX19fTlJfdGltZXJfZ2V0dGltZSA9IDIyNAorY29uc3QgX0VUSF9QX0FPRSA9IDB4
ODhBMgorY29uc3QgX19fTlJfZ2V0Z3JvdXBzID0gMTE1Citjb25zdCBfU1lTX3JzZXEgPSBfX19O
Ul9yc2VxCitjb25zdCBfRklPUVNJWkUgPSAweDU0NjAKK2NvbnN0IF9JUE9QVF9DT05UUk9MID0g
MHgwMAorY29uc3QgX19fU0lfRVJSTk9fVEhFTl9DT0RFID0gMQorY29uc3QgX0ZQRV9JTlRESVYg
PSAxCitjb25zdCBfTVNfTk9BVElNRSA9IDEwMjQKK2NvbnN0IF9DWDg2X0RJUjAgPSAweGZlCitj
b25zdCBfX19OUl9wZXJmX2V2ZW50X29wZW4gPSAyOTgKK2NvbnN0IF9GRklfQkFEX0FCSSA9IDIK
K2NvbnN0IF9fX05SX2dldF9tZW1wb2xpY3kgPSAyMzkKK2NvbnN0IF9NQ0xfQ1VSUkVOVCA9IDEK
K2NvbnN0IF9JUF9YRlJNX1BPTElDWSA9IDE3Citjb25zdCBfX19TSVpFT0ZfU0hPUlRfXyA9IDIK
K2NvbnN0IF9TWVNfZnN0YXQgPSBfX19OUl9mc3RhdAorY29uc3QgX0lGTEFfVkZJTkZPX0xJU1Qg
PSAyMgorY29uc3QgX1RDUF9GSU5fV0FJVDIgPSA1Citjb25zdCBfX1NDX0NQVVRJTUUgPSAxMzgK
K2NvbnN0IF9UVU5fRl9UU09fRUNOID0gMHgwOAorY29uc3QgX19fV09SRFNJWkVfVElNRTY0X0NP
TVBBVDMyID0gMQorY29uc3QgX0lGTEFfSU5GT19VTlNQRUMgPSAwCitjb25zdCBfRVRIX1BfWERT
QSA9IDB4MDBGOAorY29uc3QgX0lQX1BNVFVESVNDID0gMTAKK2NvbnN0IF9BVF9SRU1PVkVESVIg
PSAweDIwMAorY29uc3QgX1RJT0NTV0lOU1ogPSAweDU0MTQKK2NvbnN0IF9fX0ZMVDMyX0hBU19E
RU5PUk1fXyA9IDEKK2NvbnN0IF9GU0xBQkVMX01BWCA9IDI1NgorY29uc3QgX09fTk9OQkxPQ0sg
PSAwNDAwMAorY29uc3QgX0ZfR0VUX1NFQUxTID0gMTAzNAorY29uc3QgX1BBQ0tFVF9UWF9SSU5H
ID0gMTMKK2NvbnN0IF9UQ1BfTVNTX0RFRkFVTFQgPSA1MzYKK2NvbnN0IF9CQ19ESU1fTUFYID0g
X19QT1NJWDJfQkNfRElNX01BWAorY29uc3QgX0lQT1BUX0xTUlIgPSAxMzEKK2NvbnN0IF9fU0Nf
VjdfTFA2NF9PRkY2NCA9IDIzOQorY29uc3QgX1BSX0dFVF9QREVBVEhTSUcgPSAyCitjb25zdCBf
U1lTX3N5bWxpbmsgPSBfX19OUl9zeW1saW5rCitjb25zdCBfX19ERUM2NF9NQU5UX0RJR19fID0g
MTYKK2NvbnN0IF9QT1JUX1NFTEZfVkYgPSAtMQorY29uc3QgX19TQ19TWU1MT09QX01BWCA9IDE3
MworY29uc3QgX1hEUF9GTEFHU19VUERBVEVfSUZfTk9FWElTVCA9ICgxIDw8IDApCitjb25zdCBf
TUFDVkxBTl9NQUNBRERSX0FERCA9IDAKK2NvbnN0IF9fR1JQX0ggPSAxCitjb25zdCBfX19OUl9k
ZWxldGVfbW9kdWxlID0gMTc2Citjb25zdCBfU1lTX3NlbmR0byA9IF9fX05SX3NlbmR0bworY29u
c3QgX0lGTEFfVkxBTl9RT1NfTUFQUElORyA9IDEKK2NvbnN0IF9TSUdURVJNID0gMTUKK2NvbnN0
IF9QUl9TVkVfR0VUX1ZMID0gNTEKK2NvbnN0IF9fQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUyA9
IDExMTQKK2NvbnN0IF9JRkxBX1hEUF9IV19QUk9HX0lEID0gNworY29uc3QgX19TWVNfVUNPTlRF
WFRfSCA9IDEKK2NvbnN0IF9fX05SX3JlYWRsaW5rYXQgPSAyNjcKK2NvbnN0IF9JRkxBX0dUUF9V
TlNQRUMgPSAwCitjb25zdCBfVkxORVhUID0gMTUKK2NvbnN0IF9QT1NJWF9NQURWX1dJTExORUVE
ID0gMworY29uc3QgX19fcnVzYWdlX2RlZmluZWQgPSAxCitjb25zdCBfU1lTX3NlY3VyaXR5ID0g
X19fTlJfc2VjdXJpdHkKK2NvbnN0IF9YODZfQ1I0X1NNQVBfQklUID0gMjEKK2NvbnN0IF9UVU5f
Rl9UU082ID0gMHgwNAorY29uc3QgX0FGX0NBTiA9IF9QRl9DQU4KK2NvbnN0IF9fX05SX3J0X3Np
Z3Byb2NtYXNrID0gMTQKK2NvbnN0IF9JTlRfTEVBU1QxNl9XSURUSCA9IDE2Citjb25zdCBfX19O
Ul9mbG9jayA9IDczCitjb25zdCBfQ0xPTkVfUEFSRU5UID0gMHgwMDAwODAwMAorY29uc3QgX1JU
QV9BTElHTlRPID0gNAorY29uc3QgX1BPU0lYX01BRFZfU0VRVUVOVElBTCA9IDIKK2NvbnN0IF9T
WVNfc2V0aG9zdG5hbWUgPSBfX19OUl9zZXRob3N0bmFtZQorY29uc3QgX1NZU192c2VydmVyID0g
X19fTlJfdnNlcnZlcgorY29uc3QgX1g4Nl9FRkxBR1NfTlRfQklUID0gMTQKK2NvbnN0IF9NTlRf
RVhQSVJFID0gNAorY29uc3QgX1BGX1NNQyA9IDQzCitjb25zdCBfRUFJX05PTkFNRSA9IC0yCitj
b25zdCBfX19OUl9yZXN0YXJ0X3N5c2NhbGwgPSAyMTkKK2NvbnN0IF9fU0NfVEhSRUFEX0tFWVNf
TUFYID0gNzQKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1NUQVJUVVBfUVVFUllfSU5UVkwgPSAzNQor
Y29uc3QgX0lDTVA2X0lORk9NU0dfTUFTSyA9IDB4ODAKK2NvbnN0IF9JUE9JQl9NT0RFX0NPTk5F
Q1RFRCA9IDEKK2NvbnN0IF9DTE9DQUwgPSAwMDA0MDAwCitjb25zdCBfSEFWRV9TWVNfVVNFUl9I
ID0gMQorY29uc3QgX1g4Nl9FRkxBR1NfSU9QTF9CSVQgPSAxMgorY29uc3QgX0lGTEFfQlJQT1JU
X1JPT1RfSUQgPSAxMworY29uc3QgX1RDU0VUQSA9IDB4NTQwNgorY29uc3QgX1NZU19yZWFkYWhl
YWQgPSBfX19OUl9yZWFkYWhlYWQKK2NvbnN0IF9JRkxBX1NUQVRTNjQgPSAyMworY29uc3QgX19T
Q19VSU5UX01BWCA9IDExNgorY29uc3QgX1BUUkFDRV9QRUVLU0lHSU5GTyA9IDE2OTA1Citjb25z
dCBfWDg2X0NSNF9WTUVfQklUID0gMAorY29uc3QgX19YT1BFTl9TT1VSQ0VfRVhURU5ERUQgPSAx
Citjb25zdCBfX19VU0VfTEFSR0VGSUxFID0gMQorY29uc3QgX19fU0laRV9NQVhfXyA9IDB4ZmZm
ZmZmZmZmZmZmZmZmZgorY29uc3QgX1NLRl9BRF9BTFVfWE9SX1ggPSA0MAorY29uc3QgX19JTlRU
WVBFU19IID0gMQorY29uc3QgX1JUTkhfRl9QRVJWQVNJVkUgPSAyCitjb25zdCBfU09fVElNRVNU
QU1QID0gMjkKK2NvbnN0IF9SVE1TR19PVkVSUlVOID0gX05MTVNHX09WRVJSVU4KK2NvbnN0IF9C
VVNfTUNFRVJSX0FPID0gNQorY29uc3QgX19fSUZMQV9NQUNWTEFOX01BWCA9IDcKK2NvbnN0IF9J
UFRPU19FQ05fTUFTSyA9IDB4MDMKK2NvbnN0IF9CVVNfTUNFRVJSX0FSID0gNAorY29uc3QgX0I1
MDAwMDAgPSAwMDEwMDA1Citjb25zdCBfX19TVERDX0hPU1RFRF9fID0gMQorY29uc3QgX19fSU5U
X0xFQVNUMzJfV0lEVEhfXyA9IDMyCitjb25zdCBfU0lPQ1NJRkxJTksgPSAweDg5MTEKK2NvbnN0
IF9SRU5BTUVfRVhDSEFOR0UgPSAoMSA8PCAxKQorY29uc3QgX01BRFZfRE9GT1JLID0gMTEKK2Nv
bnN0IF9fU0NfWEJTNV9MUDY0X09GRjY0ID0gMTI3Citjb25zdCBfX0xBUkdFRklMRTY0X1NPVVJD
RSA9IDEKK2NvbnN0IF9TT19ET05UUk9VVEUgPSA1Citjb25zdCBfX1NDX1RSQUNFX0VWRU5UX0ZJ
TFRFUiA9IDE4MgorY29uc3QgX0ZfU0VBTF9XUklURSA9IDB4MDAwOAorY29uc3QgX1NUREVSUl9G
SUxFTk8gPSAyCitjb25zdCBfVENQX1NFTkRfUVVFVUUgPSAyCitjb25zdCBfSVBWTEFOX01PREVf
TUFYID0gMworY29uc3QgX19fT19OT0FUSU1FID0gMDEwMDAwMDAKK2NvbnN0IF9QRl9TTkEgPSAy
MgorY29uc3QgX0lGTEFfVkZfU1RBVFNfUlhfRFJPUFBFRCA9IDcKK2NvbnN0IF9TT19QQVNTU0VD
ID0gMzQKK2NvbnN0IF9JR05QQVIgPSAwMDAwMDA0Citjb25zdCBfU1lTX3RpbWUgPSBfX19OUl90
aW1lCitjb25zdCBfVENQX05PVFNFTlRfTE9XQVQgPSAyNQorY29uc3QgX0lGTEFfVlhMQU5fR1JP
VVAgPSAyCitjb25zdCBfTk9GTFNIID0gMDAwMDIwMAorY29uc3QgX1NPTF9EQ0NQID0gMjY5Citj
b25zdCBfU1lTX3N5c2xvZyA9IF9fX05SX3N5c2xvZworY29uc3QgX1NZU19pb19nZXRldmVudHMg
PSBfX19OUl9pb19nZXRldmVudHMKK2NvbnN0IF9SVE1fTkVXTURCID0gODQKK2NvbnN0IF9JRkxB
X0lORk9fU0xBVkVfS0lORCA9IDQKK2NvbnN0IF9JRkxBX1ZYTEFOX0wyTUlTUyA9IDEzCitjb25z
dCBfX1NDX0xFVkVMM19DQUNIRV9TSVpFID0gMTk0Citjb25zdCBfSEFWRV9MSU5VWF9JRl9BRERS
X0ggPSAxCitjb25zdCBfT19DUkVBVCA9IDAxMDAKK2NvbnN0IF9FTk9ERVYgPSAxOQorY29uc3Qg
X19fRkxUMzJfSEFTX1FVSUVUX05BTl9fID0gMQorY29uc3QgX1RJT0NHUEdSUF92YWwgPSAyMTUx
OQorY29uc3QgX1NDTnVMRUFTVDE2ID0gImh1IgorY29uc3QgX19fTlJfcG9sbCA9IDcKK2NvbnN0
IF9fU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCA9IDgwCitjb25zdCBfR0FJX05PV0FJVCA9IDEKK2Nv
bnN0IF9JRkFfRl9OT1BSRUZJWFJPVVRFID0gMHgyMDAKK2NvbnN0IF9TWVNfd3JpdGUgPSBfX19O
Ul93cml0ZQorY29uc3QgX1NZU19mYW5vdGlmeV9pbml0ID0gX19fTlJfZmFub3RpZnlfaW5pdAor
Y29uc3QgX0VUSF9QX0FSUCA9IDB4MDgwNgorY29uc3QgX19fTlJfaW9wbCA9IDE3MgorY29uc3Qg
X19fRkxUMzJYX01BWF9fID0gMS4xCitjb25zdCBfRUNIT0UgPSAwMDAwMDIwCitjb25zdCBfSVBP
UFRfVFNfVFNBTkRBRERSID0gMQorY29uc3QgX1NPX1BFRVJDUkVEID0gMTcKK2NvbnN0IF9JRkxB
X0JSX0hFTExPX1RJTUUgPSAyCitjb25zdCBfRkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFID0gMHgw
OAorY29uc3QgX19TQ18yX1BCU19DSEVDS1BPSU5UID0gMTc1Citjb25zdCBfRUNIT0sgPSAwMDAw
MDQwCitjb25zdCBfSUZMQV9JUFZMQU5fTU9ERSA9IDEKK2NvbnN0IF9JUFY2X0pPSU5fQU5ZQ0FT
VCA9IDI3Citjb25zdCBfRUFJX0lOUFJPR1JFU1MgPSAtMTAwCitjb25zdCBfUlROSF9BTElHTlRP
ID0gNAorY29uc3QgX0lQT1BUX1NJRCA9IF9JUE9QVF9TQVRJRAorY29uc3QgX19fRkxUMzJfTUFY
X0VYUF9fID0gMTI4Citjb25zdCBfTkRfT1BUX1RBUkdFVF9MSU5LQUREUiA9IDIKK2NvbnN0IF9G
X0dFVF9GSUxFX1JXX0hJTlQgPSAxMDM3Citjb25zdCBfRkZJX0ZJUlNUX0FCSSA9IDAKK2NvbnN0
IF9ORVRMSU5LX0VDUllQVEZTID0gMTkKK2NvbnN0IF9DWDg2X0dDUiA9IDB4YjgKK2NvbnN0IF9J
UF9ST1VURVJfQUxFUlQgPSA1Citjb25zdCBfX19OUl9zcGxpY2UgPSAyNzUKK2NvbnN0IF9USU9D
U0NUVFlfdmFsID0gMjE1MTgKK2NvbnN0IF9fX05SX2tleWN0bCA9IDI1MAorY29uc3QgX01TX05P
U0VDID0gKDE8PDI4KQorY29uc3QgX05MTV9GX0NBUFBFRCA9IDB4MTAwCitjb25zdCBfX1NDX05F
VFdPUktJTkcgPSAxNTIKK2NvbnN0IF9fX0FUT01JQ19SRUxFQVNFID0gMworY29uc3QgX0lGTEFf
VkZfVU5TUEVDID0gMAorY29uc3QgX19fTlJfZmNobW9kYXQgPSAyNjgKK2NvbnN0IF9SVEZfSE9T
VCA9IDB4MDAwNAorY29uc3QgX0lGRl9QRVJTSVNUID0gMHgwODAwCitjb25zdCBfRlNfTk9DT01Q
X0ZMID0gMHgwMDAwMDQwMAorY29uc3QgX1NPX1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OID0gMjIK
K2NvbnN0IF9CUEZfSkVRID0gMHgxMAorY29uc3QgX0ZGSV9UWVBFX1VJTlQzMiA9IDkKK2NvbnN0
IF9TWVNfaW5vdGlmeV9hZGRfd2F0Y2ggPSBfX19OUl9pbm90aWZ5X2FkZF93YXRjaAorY29uc3Qg
X1BPU0lYX01BRFZfUkFORE9NID0gMQorY29uc3QgX1JURl9NVUxUSUNBU1QgPSAweDIwMDAwMDAw
Citjb25zdCBfTlRQX0FQSSA9IDQKK2NvbnN0IF9JUFY2X01VTFRJQ0FTVF9JRiA9IDE3Citjb25z
dCBfU09fTUFYX1BBQ0lOR19SQVRFID0gNDcKK2NvbnN0IF9IQVZFX0xPRzEwTCA9IDEKK2NvbnN0
IF9JRkxBX1ZGX1JTU19RVUVSWV9FTiA9IDcKK2NvbnN0IF9fX0ZMVDY0X01BWF8xMF9FWFBfXyA9
IDMwOAorY29uc3QgX1BUUkFDRV9TWVNFTVVfU0lOR0xFU1RFUCA9IDMyCitjb25zdCBfU1lTX2R1
cCA9IF9fX05SX2R1cAorY29uc3QgX0FSUEhSRF9JRUVFODAyMTU0X1BIWSA9IDgwNQorY29uc3Qg
X19fTlJfaW9fc2V0dXAgPSAyMDYKK2NvbnN0IF9JUE9QVF9TU1JSID0gMTM3Citjb25zdCBfX0RJ
UkVOVF9NQVRDSEVTX0RJUkVOVDY0ID0gMQorY29uc3QgX1BBQ0tFVF9IT1NUID0gMAorY29uc3Qg
X0FSUEhSRF9ETENJID0gMTUKK2NvbnN0IF9JRkxBX0lORVQ2X0NPTkYgPSAyCitjb25zdCBfSUZM
QV9WRl9MSU5LX1NUQVRFX0RJU0FCTEUgPSAyCitjb25zdCBfX19pdGltZXJzcGVjX2RlZmluZWQg
PSAxCitjb25zdCBfX19OUl9waXZvdF9yb290ID0gMTU1Citjb25zdCBfRlNfRU5DUllQVF9GTCA9
IDB4MDAwMDA4MDAKK2NvbnN0IF9fU1lTX1BSQ1RMX0ggPSAxCitjb25zdCBfX19STElNSVRfUlRQ
UklPID0gMTQKK2NvbnN0IF9DTE9DS19NT05PVE9OSUMgPSAxCitjb25zdCBfX19VSU5UX0ZBU1Qz
Ml9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3QgX05FVExJTktfQ1JZUFRPID0gMjEK
K2NvbnN0IF9FVEhfUF9GSVAgPSAweDg5MTQKK2NvbnN0IF9PQ1JOTCA9IDAwMDAwMTAKK2NvbnN0
IF9fX05SX3NldGdpZCA9IDEwNgorY29uc3QgX0lGRl9WTkVUX0hEUiA9IDB4NDAwMAorY29uc3Qg
X1NDTnVMRUFTVDMyID0gInUiCitjb25zdCBfUFJJeExFQVNUMTYgPSAieCIKK2NvbnN0IF9fX05S
X2lvcHJpb19zZXQgPSAyNTEKK2NvbnN0IF9fU0VNQVBIT1JFX0ggPSAxCitjb25zdCBfUlRGX1NU
QVRJQyA9IDB4MDQwMAorY29uc3QgX1BSX0VORElBTl9QUENfTElUVExFID0gMgorY29uc3QgX19f
RkRfU0VUU0laRSA9IDEwMjQKK2NvbnN0IF9TWVNfc2VjY29tcCA9IF9fX05SX3NlY2NvbXAKK2Nv
bnN0IF9fX0xEQkxfTUlOX18gPSAxLjEKK2NvbnN0IF9fX0RFQzMyX01BWF9fID0gOS45OTk5OTlF
OTYKK2NvbnN0IF9fX0lOVFBUUl9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX19f
RklMRV9kZWZpbmVkID0gMQorY29uc3QgX01PRF9OQU5PID0gX0FESl9OQU5PCitjb25zdCBfX19G
TFQzMl9FUFNJTE9OX18gPSAxLjEKK2NvbnN0IF9YODZfRUZMQUdTX0FDX0JJVCA9IDE4Citjb25z
dCBfUFJPVF9FWEVDID0gMHg0Citjb25zdCBfSUZMQV9TVEFUU19VTlNQRUMgPSAwCitjb25zdCBf
SUZMQV9WRl9QT1JUX1VOU1BFQyA9IDAKK2NvbnN0IF9TQ0hFRF9PVEhFUiA9IDAKK2NvbnN0IF9B
TExQRVJNUyA9IChfU19JU1VJRHxfU19JU0dJRHxfU19JU1ZUWHxfU19JUldYVXxfU19JUldYR3xf
U19JUldYTykKK2NvbnN0IF9fX05SX2dldGRlbnRzID0gNzgKK2NvbnN0IF9ORFRQQV9CQVNFX1JF
QUNIQUJMRV9USU1FID0gNAorY29uc3QgX0VUSF9QX1dDQ1AgPSAweDg4M0UKK2NvbnN0IF9fQ1Nf
UE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUyA9IDExMjMKK2NvbnN0IF9JRkxBX0VWRU5U
X1JFQk9PVCA9IDEKK2NvbnN0IF9BUlBIUkRfUkFXSERMQyA9IDUxOAorY29uc3QgX0NMRF9TVE9Q
UEVEID0gNQorY29uc3QgX19fRkxUMzJfREVDSU1BTF9ESUdfXyA9IDkKK2NvbnN0IF9fX1NfSVNW
VFggPSAwMTAwMAorY29uc3QgX0FGX0lVQ1YgPSBfUEZfSVVDVgorY29uc3QgX1JUTkxHUlBfTk9Q
MiA9IDE0Citjb25zdCBfX19jb2RlX21vZGVsX3NtYWxsX18gPSAxCitjb25zdCBfVENQX0ZBU1RP
UEVOX0NPTk5FQ1QgPSAzMAorY29uc3QgX19TQ19USFJFQURfUFJJT19QUk9URUNUID0gODEKK2Nv
bnN0IF9fQklUU19TSUdOVU1fR0VORVJJQ19IID0gMQorY29uc3QgX1JXSF9XUklURV9MSUZFX0VY
VFJFTUUgPSA1Citjb25zdCBfSU5UTUFYX1dJRFRIID0gNjQKK2NvbnN0IF9FRE9NID0gMzMKK2Nv
bnN0IF9TWVNfc2NoZWRfZ2V0c2NoZWR1bGVyID0gX19fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCitj
b25zdCBfRVhUQSA9IF9CMTkyMDAKK2NvbnN0IF9FWFRCID0gX0IzODQwMAorY29uc3QgX1NZU19w
ZXJmX2V2ZW50X29wZW4gPSBfX19OUl9wZXJmX2V2ZW50X29wZW4KK2NvbnN0IF9TWVNfc2V0bnMg
PSBfX19OUl9zZXRucworY29uc3QgX19JT0NfU0laRUJJVFMgPSAxNAorY29uc3QgX19YT1BFTl9M
RUdBQ1kgPSAxCitjb25zdCBfX1BPU0lYMl9MT0NBTEVERUYgPSBfX19QT1NJWDJfVEhJU19WRVJT
SU9OCitjb25zdCBfVFRZX05BTUVfTUFYID0gMzIKK2NvbnN0IF9fUE9TSVhfUkVfRFVQX01BWCA9
IDI1NQorY29uc3QgX0lQVjZfUkVDVkhPUE9QVFMgPSA1MworY29uc3QgX05FVExJTktfQlJPQURD
QVNUX0VSUk9SID0gNAorY29uc3QgX1BSX1NFVF9NTSA9IDM1Citjb25zdCBfX19GTE9BVF9XT1JE
X09SREVSID0gX19fQllURV9PUkRFUgorY29uc3QgX19TQ19VQ0hBUl9NQVggPSAxMTUKK2NvbnN0
IF9FVEhfUF9NUExTX1VDID0gMHg4ODQ3Citjb25zdCBfTkxBX1RZUEVfTUFTSyA9IF4oX05MQV9G
X05FU1RFRCB8IF9OTEFfRl9ORVRfQllURU9SREVSKQorY29uc3QgX19TQ19YT1BFTl9TVFJFQU1T
ID0gMjQ2Citjb25zdCBfQlBGX0pHVCA9IDB4MjAKK2NvbnN0IF9fX0lOVDY0X01BWF9fID0gMHg3
ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfTU9EX0ZSRVFVRU5DWSA9IF9BREpfRlJFUVVFTkNZCitj
b25zdCBfX19OUl9zaG1kdCA9IDY3Citjb25zdCBfU1lTX2dldGN3ZCA9IF9fX05SX2dldGN3ZAor
Y29uc3QgX19fU0laRU9GX0xPTkdfXyA9IDgKK2NvbnN0IF9CUEZfTkVUX09GRiA9IF9TS0ZfTkVU
X09GRgorY29uc3QgX0lQX0JMT0NLX1NPVVJDRSA9IDM4Citjb25zdCBfRUNIUk5HID0gNDQKK2Nv
bnN0IF9FQUlfU1lTVEVNID0gLTExCitjb25zdCBfX19OUl9yZXF1ZXN0X2tleSA9IDI0OQorY29u
c3QgX19TQ19MRVZFTDNfQ0FDSEVfQVNTT0MgPSAxOTUKK2NvbnN0IF9QUklYOCA9ICJYIgorY29u
c3QgX0hBVkVfVEVFID0gMQorY29uc3QgX0hBVkVfQ09ORklHX0ggPSAxCitjb25zdCBfX1BPU0lY
X0NMT0NLX1NFTEVDVElPTiA9IDIwMDgwOQorY29uc3QgX1RDT09GRiA9IDAKK2NvbnN0IF9UQ1Bf
TVNTX0RFU0lSRUQgPSAxMjIwCitjb25zdCBfQUlfUEFTU0lWRSA9IDB4MDAwMQorY29uc3QgX1Nf
SUZMTksgPSBfX19TX0lGTE5LCitjb25zdCBfRFRfU09DSyA9IDEyCitjb25zdCBfX1NDXzJfVVBF
ID0gOTcKK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX0tFWEVDID0gMHg0NTU4NDU0MworY29uc3Qg
X19TQ19VU0hSVF9NQVggPSAxMTgKK2NvbnN0IF9TT19CU0RDT01QQVQgPSAxNAorY29uc3QgX19L
X1NTX01BWFNJWkUgPSAxMjgKK2NvbnN0IF9SVENGX1ZBTFZFID0gMHgwMDIwMDAwMAorY29uc3Qg
X0lGTEFfVFVOX05VTV9ESVNBQkxFRF9RVUVVRVMgPSA5Citjb25zdCBfSEFWRV9NRU1PUllfSCA9
IDEKK2NvbnN0IF9YODZfQ1I0X1VNSVBfQklUID0gMTEKK2NvbnN0IF9IQVZFX05FVElORVRfSUZf
RVRIRVJfSCA9IDEKK2NvbnN0IF9BRl9NQVggPSBfUEZfTUFYCitjb25zdCBfSEFWRV9FWFBNMUwg
PSAxCitjb25zdCBfX19fX2d3Y2hhcl90X2RlZmluZWQgPSAxCitjb25zdCBfTlRGX1NFTEYgPSAw
eDAyCitjb25zdCBfX0JJVFNfU0lHQUNUSU9OX0ggPSAxCitjb25zdCBfU1lTX3JlYm9vdCA9IF9f
X05SX3JlYm9vdAorY29uc3QgX1JFR19UUkFQTk8gPSAyMAorY29uc3QgX0FESl9PRkZTRVRfU1Nf
UkVBRCA9IDB4YTAwMQorY29uc3QgX0lDTVA2X1BBUkFNX1BST0IgPSA0Citjb25zdCBfRVRIX1Bf
SUVFRVBVUEFUID0gMHgwYTAxCitjb25zdCBfSVBQUk9UT19FR1AgPSA4Citjb25zdCBfSUZMQV9W
Rl9TVEFUU19NVUxUSUNBU1QgPSA1Citjb25zdCBfUlRNX0RFTFRDTEFTUyA9IDQxCitjb25zdCBf
X1BPU0lYX1NQQVdOID0gMjAwODA5Citjb25zdCBfUlRBWF9SVE9fTUlOID0gMTMKK2NvbnN0IF9f
U1lTX1VUU05BTUVfSCA9IDEKK2NvbnN0IF9ORVRMSU5LX1BLVElORk8gPSAzCitjb25zdCBfRlBF
X0ZMVElOViA9IDcKK2NvbnN0IF9fX05SX3JlbW92ZXhhdHRyID0gMTk3Citjb25zdCBfRl9OT1RJ
RlkgPSAxMDI2Citjb25zdCBfTVNfSU5WQUxJREFURSA9IDIKK2NvbnN0IF9TSU9DUFJPVE9QUklW
QVRFID0gMHg4OUUwCitjb25zdCBfX19OUl92aGFuZ3VwID0gMTUzCitjb25zdCBfQ0xPTkVfVU5U
UkFDRUQgPSAweDAwODAwMDAwCitjb25zdCBfSUZBX0ZfUEVSTUFORU5UID0gMHg4MAorY29uc3Qg
X0lQX01BWFBBQ0tFVCA9IDY1NTM1Citjb25zdCBfX1NDX1JFR0VYUCA9IDE1NQorY29uc3QgX0lQ
T1BUX0VPTCA9IDAKK2NvbnN0IF9FREVBRExPQ0sgPSBfRURFQURMSworY29uc3QgX1NZU19nZXRw
aWQgPSBfX19OUl9nZXRwaWQKK2NvbnN0IF9FVEhFUlRZUEVfTE9PUEJBQ0sgPSAweDkwMDAKK2Nv
bnN0IF9fQ1NfTEZTNjRfQ0ZMQUdTID0gMTAwNAorY29uc3QgX1NJR0ZQRSA9IDgKK2NvbnN0IF9F
TElCU0NOID0gODEKK2NvbnN0IF9fX0RFQzY0X0VQU0lMT05fXyA9IDFFLTE1Citjb25zdCBfSU5U
MTZfTUFYID0gKDMyNzY3KQorY29uc3QgX1NJT0NTSUZOQU1FID0gMHg4OTIzCitjb25zdCBfX19G
TFQzMl9ERU5PUk1fTUlOX18gPSAxLjEKK2NvbnN0IF9TSUdWVEFMUk0gPSAyNgorY29uc3QgX19T
Q19OWkVSTyA9IDEwOQorY29uc3QgX19fTlJfcGF1c2UgPSAzNAorY29uc3QgX0VQT0xMUkROT1JN
ID0gNjQKK2NvbnN0IF9IQVZFX0xJU1RYQVRUUiA9IDEKK2NvbnN0IF9FVEhfUF9YMjUgPSAweDA4
MDUKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkZCSUdfQ0ZMQUdTID0gMTEwNAorY29uc3QgX0lG
TEFfQk9ORF9VUERFTEFZID0gNAorY29uc3QgX0xJTlVYX1JFQk9PVF9NQUdJQzJCID0gMzY5MzY3
NDQ4Citjb25zdCBfTkxNX0ZfRVhDTCA9IDB4MjAwCitjb25zdCBfX19JTlRfTEVBU1QxNl9XSURU
SF9fID0gMTYKK2NvbnN0IF9fU0NfVF9JT1ZfTUFYID0gNjYKK2NvbnN0IF9fX0RFQzEyOF9FUFNJ
TE9OX18gPSAxRS0zMworY29uc3QgX1JUTV9ORVdUQ0xBU1MgPSA0MAorY29uc3QgX19fRl9TRVRT
SUcgPSAxMAorY29uc3QgX1BSX0NBUF9BTUJJRU5UX1JBSVNFID0gMgorY29uc3QgX05fWDI1ID0g
NgorY29uc3QgX19CSVRTX1NJR1RIUkVBRF9IID0gMQorY29uc3QgX1NJT0NHSUZTTEFWRSA9IDB4
ODkyOQorY29uc3QgX19fRkxUMTI4X01BWF8xMF9FWFBfXyA9IDQ5MzIKK2NvbnN0IF9PX1JEV1Ig
PSAwMgorY29uc3QgX1NfSVJXWEcgPSAoX1NfSVJXWFUgPj4gMykKK2NvbnN0IF9IQVZFX0ZDSE9X
TkFUID0gMQorY29uc3QgX1NZU19jbG9ja19uYW5vc2xlZXAgPSBfX19OUl9jbG9ja19uYW5vc2xl
ZXAKK2NvbnN0IF9NU19SRU1PVU5UID0gMzIKK2NvbnN0IF9FVEhfUF9BRl9JVUNWID0gMHhGQkZC
Citjb25zdCBfU09MX0RFQ05FVCA9IDI2MQorY29uc3QgX1NPX0RFVEFDSF9GSUxURVIgPSAyNwor
Y29uc3QgX1JMSU1fU0FWRURfQ1VSID0gX1JMSU1fSU5GSU5JVFkKK2NvbnN0IF9JTl9DTEFTU0Jf
TUFYID0gNjU1MzYKK2NvbnN0IF9OSV9OT0ZRRE4gPSA0Citjb25zdCBfX19HWFhfQUJJX1ZFUlNJ
T04gPSAxMDEzCitjb25zdCBfRU5PTVNHID0gNDIKK2NvbnN0IF9JRkxBX0JSX1RDTl9USU1FUiA9
IDE3Citjb25zdCBfTUFYTkFNTEVOID0gX05BTUVfTUFYCitjb25zdCBfX19GTFQ2NFhfTUlOX18g
PSAxLjEKK2NvbnN0IF9fX0RFQzMyX01BWF9FWFBfXyA9IDk3Citjb25zdCBfSEFWRV9TWVNDQUxM
X0ggPSAxCitjb25zdCBfSEFWRV9TWVNfUFRSQUNFX0ggPSAxCitjb25zdCBfX1NDX1BJUEUgPSAx
NDUKK2NvbnN0IF9TX0lSV1hVID0gKF9fX1NfSVJFQUR8X19fU19JV1JJVEV8X19fU19JRVhFQykK
K2NvbnN0IF9fX0xEQkxfSEFTX0lORklOSVRZX18gPSAxCitjb25zdCBfU1lTX21xX3VubGluayA9
IF9fX05SX21xX3VubGluaworY29uc3QgX19fVVNFX0ZJTEVfT0ZGU0VUNjQgPSAxCitjb25zdCBf
UldGX1dSSVRFX0xJRkVfTk9UX1NFVCA9IDAKK2NvbnN0IF9TRUdWX1BLVUVSUiA9IDQKK2NvbnN0
IF9NTE9DS19PTkZBVUxUID0gMQorY29uc3QgX19TQ19BSU9fTUFYID0gMjQKK2NvbnN0IF9fX05S
X3N5bWxpbmsgPSA4OAorY29uc3QgX0VSQU5HRSA9IDM0Citjb25zdCBfSVBfSERSSU5DTCA9IDMK
K2NvbnN0IF9XQ0hBUl9NQVggPSBfX19XQ0hBUl9NQVgKK2NvbnN0IF9GX1NFVF9GSUxFX1JXX0hJ
TlQgPSAxMDM4Citjb25zdCBfVENQX0NBX1JlY292ZXJ5ID0gMworY29uc3QgX1VJTlRfTEVBU1Qz
Ml9XSURUSCA9IDMyCitjb25zdCBfUlRBX0VOQ0FQX1RZUEUgPSAyMQorY29uc3QgX0VQT0xMRVJS
ID0gOAorY29uc3QgX1NZU19jaG93biA9IF9fX05SX2Nob3duCitjb25zdCBfVEFCMCA9IDAwMDAw
MDAKK2NvbnN0IF9UQUIxID0gMDAwNDAwMAorY29uc3QgX1RBQjIgPSAwMDEwMDAwCitjb25zdCBf
VEFCMyA9IDAwMTQwMDAKK2NvbnN0IF9USF9SU1QgPSAweDA0Citjb25zdCBfUFRSQUNFX09fVFJB
Q0VGT1JLID0gMgorY29uc3QgX19fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCA9IDE0NgorY29u
c3QgX19fTlJfc2NoZWRfZ2V0cGFyYW0gPSAxNDMKK2NvbnN0IF9SVE5FVExJTktfSEFWRV9QRUVS
SU5GTyA9IDEKK2NvbnN0IF9fTEZTX0xBUkdFRklMRSA9IDEKK2NvbnN0IF9TVEFUWF9BTEwgPSAw
eDBmZmYKK2NvbnN0IF9fX05SX3NldGl0aW1lciA9IDM4Citjb25zdCBfTU9EX01JQ1JPID0gX0FE
Sl9NSUNSTworY29uc3QgX19fTlJfdXN0YXQgPSAxMzYKK2NvbnN0IF9JRkZfQVRUQUNIX1FVRVVF
ID0gMHgwMjAwCitjb25zdCBfX19QVEhSRUFEX01VVEVYX0xPQ0tfRUxJU0lPTiA9IDEKK2NvbnN0
IF9JTl9DTEFTU0FfSE9TVCA9ICgweGZmZmZmZmZmICYgXl9JTl9DTEFTU0FfTkVUKQorY29uc3Qg
X1JURl9OQVQgPSAweDA4MDAwMDAwCitjb25zdCBfQlBGX0FCUyA9IDB4MjAKK2NvbnN0IF9GU19U
T1BESVJfRkwgPSAweDAwMDIwMDAwCitjb25zdCBfUlRNR1JQX0xJTksgPSAxCitjb25zdCBfRlNf
S0VZX0RFU0NfUFJFRklYID0gImZzY3J5cHQ6IgorY29uc3QgX19fTlJfdnNlcnZlciA9IDIzNgor
Y29uc3QgX1RJT0NTQlJLID0gMHg1NDI3Citjb25zdCBfX19HTElCQ19fID0gMgorY29uc3QgX0hB
VkVfU1lOQ19BRERfQU5EX0ZFVENIXzggPSAxCitjb25zdCBfTkRfUkFfRkxBR19NQU5BR0VEID0g
MHg4MAorY29uc3QgX0lOVF9MRUFTVDE2X01BWCA9ICgzMjc2NykKK2NvbnN0IF9fX05SX3NjaGVk
X3NldHNjaGVkdWxlciA9IDE0NAorY29uc3QgX19TQ19TRU1BUEhPUkVTID0gMjEKK2NvbnN0IF9f
VUNPTlRFWFRfSCA9IDEKK2NvbnN0IF9TWVNfcnRfdGdzaWdxdWV1ZWluZm8gPSBfX19OUl9ydF90
Z3NpZ3F1ZXVlaW5mbworY29uc3QgX1BSX0ZQX0VYQ19QUkVDSVNFID0gMworY29uc3QgX1NZU19z
eW5jID0gX19fTlJfc3luYworY29uc3QgX0hBVkVfU1RESU5UX0ggPSAxCitjb25zdCBfSUNBTk9O
ID0gMDAwMDAwMgorY29uc3QgX1BSX1NFVF9USFBfRElTQUJMRSA9IDQxCitjb25zdCBfTkVUTElO
S19VTkNPTk5FQ1RFRCA9IDAKK2NvbnN0IF9JVVRGOCA9IDAwNDAwMDAKK2NvbnN0IF9CUEZfQU5E
ID0gMHg1MAorY29uc3QgX05FVExJTktfTElTVEVOX0FMTF9OU0lEID0gOAorY29uc3QgX0lQVjZf
UEFUSE1UVSA9IDYxCitjb25zdCBfX1NDX0FURVhJVF9NQVggPSA4NworY29uc3QgX1NPQ0tfUkRN
ID0gNAorY29uc3QgX0VUSF9QX0lQID0gMHgwODAwCitjb25zdCBfX1BPU0lYX1NPVVJDRSA9IDEK
K2NvbnN0IF9JRkxBX0dFTkVWRV9VRFBfQ1NVTSA9IDgKK2NvbnN0IF9fU0NfTVFfUFJJT19NQVgg
PSAyOAorY29uc3QgX19ORVRJTkVUX1RDUF9IID0gMQorY29uc3QgX0xJTlVYX1JFQk9PVF9DTURf
UkVTVEFSVDIgPSAweEExQjJDM0Q0Citjb25zdCBfUlRDRl9OQVQgPSAweDAwODAwMDAwCitjb25z
dCBfTkRfTkFfRkxBR19PVkVSUklERSA9IDB4MDAwMDAwMjAKK2NvbnN0IF9IQVZFX1NURExJQl9I
ID0gMQorY29uc3QgX19TQ19TSU5HTEVfUFJPQ0VTUyA9IDE1MQorY29uc3QgX0lGRl9EWU5BTUlD
ID0gMzI3NjgKK2NvbnN0IF9UQ1BfTk9fUVVFVUUgPSAwCitjb25zdCBfX0xJQkNfTElNSVRTX0hf
ID0gMQorY29uc3QgX0lOX0RPTlRfRk9MTE9XID0gMHgwMjAwMDAwMAorY29uc3QgX01BRFZfV0lQ
RU9ORk9SSyA9IDE4Citjb25zdCBfX1BPU0lYX1NUUkVBTV9NQVggPSA4Citjb25zdCBfX0JJVFNf
U0lHSU5GT19DT05TVFNfSCA9IDEKK2NvbnN0IF9XQUlUX0FOWSA9ICgtMSkKK2NvbnN0IF9NQVBf
MzJCSVQgPSAweDQwCitjb25zdCBfSU5FVF9BRERSU1RSTEVOID0gMTYKK2NvbnN0IF9fX0lGTEFf
VkZfTUFYID0gMTMKK2NvbnN0IF9QUl9GUF9FWENfQVNZTkMgPSAyCitjb25zdCBfVElPQ1NFUkNP
TkZJRyA9IDB4NTQ1MworY29uc3QgX1VJTlRQVFJfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3Qg
X01DQVNUX01TRklMVEVSID0gNDgKK2NvbnN0IF9OTE1fRl9OT05SRUMgPSAweDEwMAorY29uc3Qg
X0VERUFETEsgPSAzNQorY29uc3QgX0lQUE9SVF9URlRQID0gNjkKK2NvbnN0IF9TSU9DR1NUQU1Q
ID0gMHg4OTA2Citjb25zdCBfRlNfS0VZX0RFU0NSSVBUT1JfU0laRSA9IDgKK2NvbnN0IF9fQ1Nf
UE9TSVhfVjdfTFBCSUdfT0ZGQklHX0xJQlMgPSAxMTQ2Citjb25zdCBfSUZMQV9HRU5FVkVfUE9S
VCA9IDUKK2NvbnN0IF9TWVNfY2FwZ2V0ID0gX19fTlJfY2FwZ2V0Citjb25zdCBfX19OUl9tbG9j
ayA9IDE0OQorY29uc3QgX19fR0NDX0FUT01JQ19MT05HX0xPQ0tfRlJFRSA9IDIKK2NvbnN0IF9F
VEhFUl9UWVBFX0xFTiA9IDIKK2NvbnN0IF9IQVZFX1RBTkwgPSAxCitjb25zdCBfX1BPU0lYX1NB
VkVEX0lEUyA9IDEKK2NvbnN0IF9UQ01fSUZJTkRFWF9NQUdJQ19CTE9DSyA9ICgweEZGRkZGRkZG
KQorY29uc3QgX0JQRl9TVFggPSAweDAzCitjb25zdCBfX19EQkxfTUFOVF9ESUdfXyA9IDUzCitj
b25zdCBfSVBWNl9NSU5IT1BDT1VOVCA9IDczCitjb25zdCBfU0lPQ0dJRk5BTUUgPSAweDg5MTAK
K2NvbnN0IF9SVEVYVF9GSUxURVJfU0tJUF9TVEFUUyA9ICgxIDw8IDMpCitjb25zdCBfX19OUl9y
dF9zaWdhY3Rpb24gPSAxMworY29uc3QgX0lOVF9GQVNUNjRfV0lEVEggPSA2NAorY29uc3QgX0JQ
Rl9NRU0gPSAweDYwCitjb25zdCBfTkRfTkVJR0hCT1JfQURWRVJUID0gMTM2Citjb25zdCBfX1BP
U0lYX0NISUxEX01BWCA9IDI1Citjb25zdCBfQ0xPTkVfQ0hJTERfU0VUVElEID0gMHgwMTAwMDAw
MAorY29uc3QgX1JFR19SQVggPSAxMworY29uc3QgX19fSU5UX0xFQVNUNjRfTUFYX18gPSAweDdm
ZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9CUEZfQUREID0gMHgwMAorY29uc3QgX0VUSEVSTUlOID0g
KF9FVEhFUl9NSU5fTEVOIC0gX0VUSEVSX0hEUl9MRU4gLSBfRVRIRVJfQ1JDX0xFTikKK2NvbnN0
IF9JUFBPUlRfUkpFID0gNzcKK2NvbnN0IF9GU19JTUFHSUNfRkwgPSAweDAwMDAyMDAwCitjb25z
dCBfSVBWNl9QTVRVRElTQ19JTlRFUkZBQ0UgPSA0Citjb25zdCBfX19JRkxBX1ZMQU5fUU9TX01B
WCA9IDIKK2NvbnN0IF9fX0dDQ19BVE9NSUNfQk9PTF9MT0NLX0ZSRUUgPSAyCitjb25zdCBfU1lT
X05NTE4gPSBfX1VUU05BTUVfTEVOR1RICitjb25zdCBfSVNJRyA9IDAwMDAwMDEKK2NvbnN0IF9T
WVNfYmluZCA9IF9fX05SX2JpbmQKK2NvbnN0IF9JUFY2X01UVV9ESVNDT1ZFUiA9IDIzCitjb25z
dCBfSUZMQV9XSVJFTEVTUyA9IDExCitjb25zdCBfUk1ORVRfRkxBR1NfRUdSRVNTX01BUF9DS1NV
TVY0ID0gKDEgPDwgMykKK2NvbnN0IF9fUE9TSVhfTUFQUEVEX0ZJTEVTID0gMjAwODA5Citjb25z
dCBfUlRNX05FV05EVVNFUk9QVCA9IDY4Citjb25zdCBfUFRSQUNFX0dFVFNJR01BU0sgPSAxNjkw
NgorY29uc3QgX1JUTUdSUF9JUFY0X01ST1VURSA9IDB4MjAKK2NvbnN0IF9JTjZfQUREUl9HRU5f
TU9ERV9TVEFCTEVfUFJJVkFDWSA9IDIKK2NvbnN0IF9fX05SX3NpZ2FsdHN0YWNrID0gMTMxCitj
b25zdCBfTkVUTElOS19DQVBfQUNLID0gMTAKK2NvbnN0IF9fX05SX2NyZWF0ID0gODUKK2NvbnN0
IF9fR0VUT1BUX0NPUkVfSCA9IDEKK2NvbnN0IF9FQUlfQUdBSU4gPSAtMworY29uc3QgX19QT1NJ
WF9KT0JfQ09OVFJPTCA9IDEKK2NvbnN0IF9TQ05pMTYgPSAiaGkiCitjb25zdCBfQlBGX1NVQiA9
IDB4MTAKK2NvbnN0IF9QUkl4MTYgPSAieCIKK2NvbnN0IF9TQ0hFRF9JU08gPSA0Citjb25zdCBf
X0hBVkVfU1RSVUNUX1RFUk1JT1NfQ19JU1BFRUQgPSAxCitjb25zdCBfTlVEX0ZBSUxFRCA9IDB4
MjAKK2NvbnN0IF9FTVNHU0laRSA9IDkwCitjb25zdCBfRkFQUEVORCA9IF9PX0FQUEVORAorY29u
c3QgX19fVVNFX1BPU0lYID0gMQorY29uc3QgX1RJT0NJTlEgPSBfRklPTlJFQUQKK2NvbnN0IF9T
SFVUX1JEID0gMAorY29uc3QgX19fTlJfZXBvbGxfd2FpdF9vbGQgPSAyMTUKK2NvbnN0IF9YODZf
RUZMQUdTX09GX0JJVCA9IDExCitjb25zdCBfX19GTFQxMjhfREVDSU1BTF9ESUdfXyA9IDM2Citj
b25zdCBfX1NDX0dFVEdSX1JfU0laRV9NQVggPSA2OQorY29uc3QgX1NZU191dGltZSA9IF9fX05S
X3V0aW1lCitjb25zdCBfUFJfRlBFTVVfU0lHRlBFID0gMgorY29uc3QgX0FSUEhSRF9GRERJID0g
Nzc0Citjb25zdCBfU0VHVl9NQVBFUlIgPSAxCitjb25zdCBfUlRBX01QX0FMR08gPSAxNAorY29u
c3QgX0JQRl9KTVAgPSAweDA1Citjb25zdCBfU1lTX3J0X3NpZ2FjdGlvbiA9IF9fX05SX3J0X3Np
Z2FjdGlvbgorY29uc3QgX0hBVkVfTkVUX0lGX0ggPSAxCitjb25zdCBfUlROTEdSUF9ERUNuZXRf
SUZBRERSID0gMTMKK2NvbnN0IF9JRkZfTE9PUEJBQ0sgPSA4Citjb25zdCBfUlRDRl9MT0cgPSAw
eDAyMDAwMDAwCitjb25zdCBfRFRfQkxLID0gNgorY29uc3QgX19fTlJfY2Fwc2V0ID0gMTI2Citj
b25zdCBfX1NDX1BJSV9PU0kgPSA1NworY29uc3QgX0lGTEFfQlJQT1JUX0ZPUldBUkRfREVMQVlf
VElNRVIgPSAyMgorY29uc3QgX1VNT1VOVF9OT0ZPTExPVyA9IDgKK2NvbnN0IF9QRl9FQ09ORVQg
PSAxOQorY29uc3QgX0lQVjZfQUREUl9QUkVGRVJFTkNFUyA9IDcyCitjb25zdCBfTUFDU0VDX1ZB
TElEQVRFX01BWCA9IDIKK2NvbnN0IF9SVF9UQUJMRV9NQVggPSA0Mjk0OTY3Mjk1Citjb25zdCBf
RkZJX1BBU0NBTCA9IDYKK2NvbnN0IF9JRkxBX1hGUk1fSUZfSUQgPSAyCitjb25zdCBfQjQ2MDgw
MCA9IDAwMTAwMDQKK2NvbnN0IF9fQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxBR1MgPSAxMTA5Citj
b25zdCBfUFJJaUxFQVNUMzIgPSAiaSIKK2NvbnN0IF9IQVZFX1NZU19GSUxFX0ggPSAxCitjb25z
dCBfU1lTX2Vwb2xsX3dhaXQgPSBfX19OUl9lcG9sbF93YWl0Citjb25zdCBfUEZfRklMRSA9IF9Q
Rl9MT0NBTAorY29uc3QgX1NZU19sc2V0eGF0dHIgPSBfX19OUl9sc2V0eGF0dHIKK2NvbnN0IF9F
Q0hJTEQgPSAxMAorY29uc3QgX19fRklOSVRFX01BVEhfT05MWV9fID0gMAorY29uc3QgX19QT1NJ
WF9USFJFQURfUk9CVVNUX1BSSU9fUFJPVEVDVCA9IC0xCitjb25zdCBfX19OUl9zZXR0aW1lb2Zk
YXkgPSAxNjQKK2NvbnN0IF9QQUNLRVRfTVJfTVVMVElDQVNUID0gMAorY29uc3QgX1NLRl9BRF9D
UFUgPSAzNgorY29uc3QgX19fTlJfdXRpbWUgPSAxMzIKK2NvbnN0IF9fX0lGTEFfWERQX01BWCA9
IDgKK2NvbnN0IF9NQUNWTEFOX01PREVfUEFTU1RIUlUgPSA4Citjb25zdCBfX19TRUdfR1MgPSAx
Citjb25zdCBfQURKX09GRlNFVF9TSU5HTEVTSE9UID0gMHg4MDAxCitjb25zdCBfUE9SVF9SRVFV
RVNUX0FTU09DSUFURSA9IDIKK2NvbnN0IF9QUkl4TEVBU1QzMiA9ICJ4IgorY29uc3QgX19QT1NJ
WDJfQkNfRElNX01BWCA9IDIwNDgKK2NvbnN0IF9FVEhfUF84MDJfMiA9IDB4MDAwNAorY29uc3Qg
X0VUSF9QXzgwMl8zID0gMHgwMDAxCitjb25zdCBfU09fRVJST1IgPSA0Citjb25zdCBfVElPQ01C
SVMgPSAweDU0MTYKK2NvbnN0IF9NU19OT1JFTU9URUxPQ0sgPSAoMTw8MjcpCitjb25zdCBfX19V
U0VfWE9QRU4ySyA9IDEKK2NvbnN0IF9JUFY2X0hPUExJTUlUID0gNTIKK2NvbnN0IF9fX05SX3dy
aXRldiA9IDIwCitjb25zdCBfU1lTX3NldHNvY2tvcHQgPSBfX19OUl9zZXRzb2Nrb3B0Citjb25z
dCBfU1lTX2dldHJlc2dpZCA9IF9fX05SX2dldHJlc2dpZAorY29uc3QgX0VUSF9QX1BBRSA9IDB4
ODg4RQorY29uc3QgX1BBQ0tFVF9TVEFUSVNUSUNTID0gNgorY29uc3QgX19fVUlOVDhfTUFYX18g
PSAweGZmCitjb25zdCBfSVBfTUlOVFRMID0gMjEKK2NvbnN0IF9MSU5FX01BWCA9IF9fUE9TSVgy
X0xJTkVfTUFYCitjb25zdCBfX1BDX05PX1RSVU5DID0gNworY29uc3QgX19fREJMX01BWF8xMF9F
WFBfXyA9IDMwOAorY29uc3QgX01PRF9TVEFUVVMgPSBfQURKX1NUQVRVUworY29uc3QgX1BSX0VO
RElBTl9MSVRUTEUgPSAxCitjb25zdCBfTU9EX0NMS0EgPSBfQURKX09GRlNFVF9TSU5HTEVTSE9U
Citjb25zdCBfQVRfU1RBVFhfRE9OVF9TWU5DID0gMHg0MDAwCitjb25zdCBfX1NDX0NfTEFOR19T
VVBQT1JUX1IgPSAxMzYKK2NvbnN0IF9FVEhfUF9QQVVTRSA9IDB4ODgwOAorY29uc3QgX1NZU191
bmxpbmthdCA9IF9fX05SX3VubGlua2F0Citjb25zdCBfSUZMQV9HVFBfUERQX0hBU0hTSVpFID0g
MworY29uc3QgX0lOX0NMQVNTQl9ORVQgPSAweGZmZmYwMDAwCitjb25zdCBfU0NOZDMyID0gImQi
Citjb25zdCBfU0lHUFdSID0gMzAKK2NvbnN0IF9JRkxBX0JPTkRfQUNUSVZFX1NMQVZFID0gMgor
Y29uc3QgX1BSX1NFVF9NTV9FTlZfU1RBUlQgPSAxMAorY29uc3QgX1BUUkRJRkZfV0lEVEggPSBf
X19XT1JEU0laRQorY29uc3QgX1BSSXg4ID0gIngiCitjb25zdCBfX1NURElOVF9IID0gMQorY29u
c3QgX1JUTV9HRVRTVEFUUyA9IDk0Citjb25zdCBfVElPQ01HRVQgPSAweDU0MTUKK2NvbnN0IF9O
RFRQQV9BTllDQVNUX0RFTEFZID0gMTIKK2NvbnN0IF9QUkl4MzIgPSAieCIKK2NvbnN0IF9FWFRQ
Uk9DID0gMDIwMDAwMAorY29uc3QgX19fV0NIQVJfTUFYX18gPSAweDdmZmZmZmZmCitjb25zdCBf
SU9DX0lOT1VUID0gKChfX0lPQ19XUklURXxfX0lPQ19SRUFEKSA8PCBfX0lPQ19ESVJTSElGVCkK
K2NvbnN0IF9JRkxBX0lORk9fS0lORCA9IDEKK2NvbnN0IF9FRkFVTFQgPSAxNAorY29uc3QgX1VJ
TlQ4X1dJRFRIID0gOAorY29uc3QgX1BSX0NBUEJTRVRfRFJPUCA9IDI0Citjb25zdCBfSUZMQV9W
TEFOX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkZfTVVMVElDQVNUID0gNDA5NgorY29uc3QgX1BPUlRf
UkVRVUVTVF9ESVNBU1NPQ0lBVEUgPSAzCitjb25zdCBfSUZMQV9CUlBPUlRfTk8gPSAxOAorY29u
c3QgX1NPX0RFQlVHID0gMQorY29uc3QgX1JUTkhfRl9PRkZMT0FEID0gOAorY29uc3QgX0lOVF9G
QVNUMzJfTUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4MDcpCitjb25zdCBfX1NDX01FTUxPQ0tfUkFO
R0UgPSAxOAorY29uc3QgX1JQTV9QQ09fQ0hBTkdFID0gMgorY29uc3QgX01TX1NVQk1PVU5UID0g
KDE8PDI2KQorY29uc3QgX0ROX01PRElGWSA9IDB4MDAwMDAwMDIKK2NvbnN0IF9JUFBST1RPX1VE
UCA9IDE3Citjb25zdCBfSUZMQV9WUkZfUE9SVF9VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9JTkVU
Nl9NQ0FTVCA9IDQKK2NvbnN0IF9SVE5MR1JQX0RFQ25ldF9ST1VURSA9IDE1Citjb25zdCBfX19O
Ul90ZWUgPSAyNzYKK2NvbnN0IF9SVEFfSUlGID0gMworY29uc3QgX0lDUk5MID0gMDAwMDQwMAor
Y29uc3QgX1NfSVdVU1IgPSBfX19TX0lXUklURQorY29uc3QgX1NZU19kdXAyID0gX19fTlJfZHVw
MgorY29uc3QgX1NZU19kdXAzID0gX19fTlJfZHVwMworY29uc3QgX1JFR19FUlIgPSAxOQorY29u
c3QgX05FVExJTktfTkZMT0cgPSA1Citjb25zdCBfUFJJWExFQVNUOCA9ICJYIgorY29uc3QgX0lG
TEFfSFNSX1ZFUlNJT04gPSA2Citjb25zdCBfU1lTX2xpbmthdCA9IF9fX05SX2xpbmthdAorY29u
c3QgX19fREJMX0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX0lQVE9TX0NMQVNTX01BU0sgPSAw
eGUwCitjb25zdCBfX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgPSA0Citjb25z
dCBfTkRfTkVJR0hCT1JfU09MSUNJVCA9IDEzNQorY29uc3QgX0hBVkVfTElOVVhfSUZfRVRIRVJf
SCA9IDEKK2NvbnN0IF9fQ1NfVjdfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTID0gNQorY29uc3QgX1BS
X1NQRUNfRU5BQkxFID0gKDEgPDwgMSkKK2NvbnN0IF9BUlBIUkRfUFBQID0gNTEyCitjb25zdCBf
U0lfQVNZTkNOTCA9IC02MAorY29uc3QgX1NZU19tb2RpZnlfbGR0ID0gX19fTlJfbW9kaWZ5X2xk
dAorY29uc3QgX19fRkxUNjRfRVBTSUxPTl9fID0gMS4xCitjb25zdCBfX19PX1RNUEZJTEUgPSAo
MDIwMDAwMDAwIHwgX19fT19ESVJFQ1RPUlkpCitjb25zdCBfWDg2X0VGTEFHU19TRl9CSVQgPSA3
Citjb25zdCBfU0lPQ0dJRk1UVSA9IDB4ODkyMQorY29uc3QgX0JQRl9MTF9PRkYgPSBfU0tGX0xM
X09GRgorY29uc3QgX19TQ0hFRF9IID0gMQorY29uc3QgX0lQT1BUX1NFQ1VSX0VGVE8gPSAweDc4
OWEKK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfRVJST1IgPSAyNjEKK2NvbnN0IF9fX05S
X3NobWF0ID0gMzAKK2NvbnN0IF9fX05SX3BrZXlfYWxsb2MgPSAzMzAKK2NvbnN0IF9QVFJBQ0Vf
UE9LRVVTRVIgPSA2Citjb25zdCBfSUZBX0ZMQUdTID0gOAorY29uc3QgX19fREVDNjRfTUFYX0VY
UF9fID0gMzg1Citjb25zdCBfUlRBWF9IT1BMSU1JVCA9IDEwCitjb25zdCBfTUFQX0xPQ0tFRCA9
IDB4MDIwMDAKK2NvbnN0IF9CUEZfTERYID0gMHgwMQorY29uc3QgX1JUQV9WSUEgPSAxOAorY29u
c3QgX19TQ19WN19MUEJJR19PRkZCSUcgPSAyNDAKK2NvbnN0IF9BRl9JQiA9IF9QRl9JQgorY29u
c3QgX05MMSA9IDAwMDA0MDAKK2NvbnN0IF9fU0NfQ0xLX1RDSyA9IDIKK2NvbnN0IF9NT0RfQ0xL
QiA9IF9BREpfVElDSworY29uc3QgX0VORVRET1dOID0gMTAwCitjb25zdCBfQUZfSVJEQSA9IF9Q
Rl9JUkRBCitjb25zdCBfTUNBU1RfTEVBVkVfR1JPVVAgPSA0NQorY29uc3QgX1JUTkxHUlBfSVBW
Nl9NUk9VVEUgPSAxMAorY29uc3QgX1BUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TID0gX19Q
T1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TCitjb25zdCBfX0lTT0M5NV9TT1VSQ0Ug
PSAxCitjb25zdCBfX19ERUMxMjhfTUFYX0VYUF9fID0gNjE0NQorY29uc3QgX0lFWFRFTiA9IDAx
MDAwMDAKK2NvbnN0IF9JUFBPUlRfUk9VVEVTRVJWRVIgPSA1MjAKK2NvbnN0IF9ORFRQQV9SRUZD
TlQgPSAyCitjb25zdCBfWDg2X0VGTEFHU19DRl9CSVQgPSAwCitjb25zdCBfU1lTX21vdW50ID0g
X19fTlJfbW91bnQKK2NvbnN0IF9GU19JTU1VVEFCTEVfRkwgPSAweDAwMDAwMDEwCitjb25zdCBf
X0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMgPSAxMTA2Citjb25zdCBfUFJfQ0FQX0FNQklFTlRf
Q0xFQVJfQUxMID0gNAorY29uc3QgX19fTlJfcGtleV9mcmVlID0gMzMxCitjb25zdCBfRlNfRU5D
UllQVElPTl9NT0RFX0FFU18xMjhfQ1RTID0gNgorY29uc3QgX1JURl9QT0xJQ1kgPSAweDA0MDAw
MDAwCitjb25zdCBfSUZMQV9CT05EX0RPV05ERUxBWSA9IDUKK2NvbnN0IF9OVEZfUk9VVEVSID0g
MHg4MAorY29uc3QgX0lGTEFfVkZfVFhfUkFURSA9IDMKK2NvbnN0IF9GX1NFVF9SV19ISU5UID0g
MTAzNgorY29uc3QgX0RUX1dIVCA9IDE0Citjb25zdCBfUFRSQUNFX1NZU0VNVSA9IDMxCitjb25z
dCBfU0lPQ0RJRkFERFIgPSAweDg5MzYKK2NvbnN0IF9FQkFERkQgPSA3NworY29uc3QgX0lQX01T
UyA9IDU3NgorY29uc3QgX1NZU19nZXRnaWQgPSBfX19OUl9nZXRnaWQKK2NvbnN0IF9USU9DTlhD
TCA9IDB4NTQwRAorY29uc3QgX19fU0hSVF9NQVhfXyA9IDB4N2ZmZgorY29uc3QgX01BWF9JUE9Q
VExFTiA9IDQwCitjb25zdCBfX19QVEhSRUFEX01VVEVYX0hBVkVfUFJFViA9IDEKK2NvbnN0IF9T
SU9HSUZJTkRFWCA9IF9TSU9DR0lGSU5ERVgKK2NvbnN0IF9JUFY2X0RPTlRGUkFHID0gNjIKK2Nv
bnN0IF9CMjQwMCA9IDAwMDAwMTMKK2NvbnN0IF9FTDJITFQgPSA1MQorY29uc3QgX0lGTEFfQlJQ
T1JUX0dST1VQX0ZXRF9NQVNLID0gMzEKK2NvbnN0IF9fU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVE
VUxJTkcgPSA3OQorY29uc3QgX1dBSVRfTVlQR1JQID0gMAorY29uc3QgX1RDQV9TVEFUUzIgPSA3
Citjb25zdCBfSUZMQV9NQUNWTEFOX0ZMQUdTID0gMgorY29uc3QgX19fTlJfZnRydW5jYXRlID0g
NzcKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTID0gOAorY29uc3QgX0lQUFJPVE9fU0NUUCA9IDEzMgor
Y29uc3QgX1NZU19tdW5sb2NrYWxsID0gX19fTlJfbXVubG9ja2FsbAorY29uc3QgX1JMSU1JVF9B
UyA9IDkKK2NvbnN0IF9JTlQzMl9NSU4gPSAoLTIxNDc0ODM2NDctMSkKK2NvbnN0IF9fQ1NfVjZf
RU5WID0gMTE0OAorY29uc3QgX0lQX09GRk1BU0sgPSAweDFmZmYKK2NvbnN0IF9JTlQ2NF9XSURU
SCA9IDY0Citjb25zdCBfUEFDS0FHRV9VUkwgPSAiIgorY29uc3QgX0lOVF9GQVNUMzJfV0lEVEgg
PSBfX19XT1JEU0laRQorY29uc3QgX0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURSA9IDQKK2NvbnN0
IF9VSU5UTUFYX1dJRFRIID0gNjQKK2NvbnN0IF9SVE1TR19ORVdSVUxFID0gMHgzMQorY29uc3Qg
X19TQ19OTF9OTUFYID0gMTIyCitjb25zdCBfX19GTFQ2NF9IQVNfSU5GSU5JVFlfXyA9IDEKK2Nv
bnN0IF9YODZfRUZMQUdTX1ZNX0JJVCA9IDE3Citjb25zdCBfX1BPU0lYX1RIUkVBRF9QUk9DRVNT
X1NIQVJFRCA9IDIwMDgwOQorY29uc3QgX0ZOREVMQVkgPSBfT19OREVMQVkKK2NvbnN0IF9JRkxB
X0JSX01DQVNUX1FVRVJZX1VTRV9JRkFERFIgPSAyNAorY29uc3QgX1BSSXVMRUFTVDE2ID0gInUi
Citjb25zdCBfUlRGX0dBVEVXQVkgPSAweDAwMDIKK2NvbnN0IF9TWVNfbGNob3duID0gX19fTlJf
bGNob3duCitjb25zdCBfU1lTX2xpbmsgPSBfX19OUl9saW5rCitjb25zdCBfSUZMQV9WWExBTl9M
T0NBTDYgPSAxNworY29uc3QgX0lQX1JFQ1ZPUklHRFNUQUREUiA9IF9JUF9PUklHRFNUQUREUgor
Y29uc3QgX1JUTV9ERUxMSU5LID0gMTcKK2NvbnN0IF9SVE1fTkVXTkVUQ09ORiA9IDgwCitjb25z
dCBfSVBUT1NfRFNDUF9FRiA9IDB4YjgKK2NvbnN0IF9QVFJBQ0VfTElTVEVOID0gMTY5MDQKK2Nv
bnN0IF9TQ01fVElNRVNUQU1QSU5HX09QVF9TVEFUUyA9IDU0Citjb25zdCBfX1BPU0lYX1NFTUFQ
SE9SRVMgPSAyMDA4MDkKK2NvbnN0IF9fSU9DX1RZUEVNQVNLID0gKCgxIDw8IF9fSU9DX1RZUEVC
SVRTKS0xKQorY29uc3QgX1g4Nl9DUjRfTUNFX0JJVCA9IDYKK2NvbnN0IF9fX0ZMVF9IQVNfSU5G
SU5JVFlfXyA9IDEKK2NvbnN0IF9FVEhfUF9NQUNTRUMgPSAweDg4RTUKK2NvbnN0IF9fX0xPTkdf
V0lEVEhfXyA9IDY0Citjb25zdCBfSEFWRV9ORVRfSUZfQVJQX0ggPSAxCitjb25zdCBfX05FVF9J
Rl9IID0gMQorY29uc3QgX1RJT0NTVEkgPSAweDU0MTIKK2NvbnN0IF9TWVNfc2VuZGZpbGUgPSBf
X19OUl9zZW5kZmlsZQorY29uc3QgX19fTlJfc3dhcG9uID0gMTY3Citjb25zdCBfSU5MQ1IgPSAw
MDAwMTAwCitjb25zdCBfU19JRlJFRyA9IF9fX1NfSUZSRUcKK2NvbnN0IF9SRUdfUjkgPSAxCitj
b25zdCBfUE9TSVhfTUFEVl9ET05UTkVFRCA9IDQKK2NvbnN0IF9fX1VTRV9VTklYOTggPSAxCitj
b25zdCBfSU42X0FERFJfR0VOX01PREVfRVVJNjQgPSAwCitjb25zdCBfSUZMQV9CUlBPUlRfUFJP
WFlBUlBfV0lGSSA9IDEyCitjb25zdCBfU0hVVF9XUiA9IDEKK2NvbnN0IF9FQ09OTlJFRlVTRUQg
PSAxMTEKK2NvbnN0IF9QRl9BTEcgPSAzOAorY29uc3QgX19fSUZMQV9JTkZPX01BWCA9IDYKK2Nv
bnN0IF9fU0NfUE9MTCA9IDU4Citjb25zdCBfX19JRkxBX0lORVQ2X01BWCA9IDkKK2NvbnN0IF9N
QVBfRklYRURfTk9SRVBMQUNFID0gMHgxMDAwMDAKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9P
RkY2NF9MSU5URkxBR1MgPSAxMTQzCitjb25zdCBfUE9SVF9QUk9GSUxFX01BWCA9IDQwCitjb25z
dCBfVENQX0NPT0tJRV9QQUlSX1NJWkUgPSAoMipfVENQX0NPT0tJRV9NQVgpCitjb25zdCBfUFRS
QUNFX1BFRUtTSUdJTkZPX1NIQVJFRCA9IDEKK2NvbnN0IF9OVURfU1RBTEUgPSAweDA0Citjb25z
dCBfTkVUTElOS19GSUJfTE9PS1VQID0gMTAKK2NvbnN0IF9SVE1fQkFTRSA9IDE2Citjb25zdCBf
UEZfU0VDVVJJVFkgPSAxNAorY29uc3QgX1NQTElDRV9GX01PVkUgPSAxCitjb25zdCBfX19OUl9r
aWxsID0gNjIKK2NvbnN0IF9TSUdTVEtTWiA9IDgxOTIKK2NvbnN0IF9DUjAgPSAwMDAwMDAwCitj
b25zdCBfQ1IxID0gMDAwMTAwMAorY29uc3QgX19fV0NIQVJfV0lEVEhfXyA9IDMyCitjb25zdCBf
X19JTlRfRkFTVDhfV0lEVEhfXyA9IDgKK2NvbnN0IF9FVEhfUF9URUIgPSAweDY1NTgKK2NvbnN0
IF9JUFBPUlRfRlRQID0gMjEKK2NvbnN0IF9TVEFfTU9ERSA9IDB4NDAwMAorY29uc3QgX0JQRl9J
TkQgPSAweDQwCitjb25zdCBfRkZJX1RZUEVfU1RSVUNUID0gMTMKK2NvbnN0IF9NU0dfWkVST0NP
UFkgPSA2NzEwODg2NAorY29uc3QgX19FTkRJQU5fSCA9IDEKK2NvbnN0IF9fUE9TSVhfVFlQRURf
TUVNT1JZX09CSkVDVFMgPSAtMQorY29uc3QgX1NZU19tcV90aW1lZHJlY2VpdmUgPSBfX19OUl9t
cV90aW1lZHJlY2VpdmUKK2NvbnN0IF9lcG9sbF9kYXRhX29mZnNldCA9IDQKK2NvbnN0IF9HVFBf
Uk9MRV9TR1NOID0gMQorY29uc3QgX05EVEFfU1RBVFMgPSA3Citjb25zdCBfU0NNX1JJR0hUUyA9
IDEKK2NvbnN0IF9UQ1BfUkVDVl9RVUVVRSA9IDEKK2NvbnN0IF9fUE9TSVhfVjZfTFA2NF9PRkY2
NCA9IDEKK2NvbnN0IF9BRl9BUFBMRVRBTEsgPSBfUEZfQVBQTEVUQUxLCitjb25zdCBfX19TSVpF
T0ZfRkxPQVRfXyA9IDQKK2NvbnN0IF9QRl9DQU4gPSAyOQorY29uc3QgX1JURl9MT0NBTCA9IDB4
ODAwMDAwMDAKK2NvbnN0IF9OTE1TR19BTElHTlRPID0gNAorY29uc3QgX19fVUlOVF9GQVNUMTZf
TUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9TT19TRUNVUklUWV9FTkNSWVBUSU9O
X05FVFdPUksgPSAyNAorY29uc3QgX19fU0laRU9GX1BPSU5URVJfXyA9IDgKK2NvbnN0IF9fX05S
X21lbWZkX2NyZWF0ZSA9IDMxOQorY29uc3QgX1NZU190Z2tpbGwgPSBfX19OUl90Z2tpbGwKK2Nv
bnN0IF9YQ0FTRSA9IDAwMDAwMDQKK2NvbnN0IF9WTUlOID0gNgorY29uc3QgX0I1NzYwMCA9IDAw
MTAwMDEKK2NvbnN0IF9JRkxBX0VWRU5UX05PVElGWV9QRUVSUyA9IDQKK2NvbnN0IF9fQ1NfUE9T
SVhfVjdfSUxQMzJfT0ZGMzJfTERGTEFHUyA9IDExMzMKK2NvbnN0IF9SVFBST1RfQk9PVCA9IDMK
K2NvbnN0IF9UQ1BPUFRfVElNRVNUQU1QID0gOAorY29uc3QgX1BSSXhMRUFTVDggPSAieCIKK2Nv
bnN0IF9FSU5QUk9HUkVTUyA9IDExNQorY29uc3QgX0lOX0NMQVNTQ19OU0hJRlQgPSA4Citjb25z
dCBfU0NNX1RJTUVTVEFNUE5TID0gX1NPX1RJTUVTVEFNUE5TCitjb25zdCBfSUZMQV9BRERSRVNT
ID0gMQorY29uc3QgX0lGTEFfVkZfSU5GT19VTlNQRUMgPSAwCitjb25zdCBfTVNfU1lOQ0hST05P
VVMgPSAxNgorY29uc3QgX1NZU19yZW5hbWVhdCA9IF9fX05SX3JlbmFtZWF0Citjb25zdCBfRVRI
X1BfUUlOUTEgPSAweDkxMDAKK2NvbnN0IF9FVEhfUF9RSU5RMiA9IDB4OTIwMAorY29uc3QgX0VU
SF9QX1FJTlEzID0gMHg5MzAwCitjb25zdCBfX19OUl9xdW90YWN0bCA9IDE3OQorY29uc3QgX05T
U19CVUZMRU5fUEFTU1dEID0gMTAyNAorY29uc3QgX19QT1NJWDJfU1dfREVWID0gX19fUE9TSVgy
X1RISVNfVkVSU0lPTgorY29uc3QgX1RDU0FOT1cgPSAwCitjb25zdCBfQ1M2ID0gMDAwMDAyMAor
Y29uc3QgX0NTNyA9IDAwMDAwNDAKK2NvbnN0IF9DUzggPSAwMDAwMDYwCitjb25zdCBfUFJJZExF
QVNUOCA9ICJkIgorY29uc3QgX0lQUE9SVF9USU1FU0VSVkVSID0gMzcKK2NvbnN0IF9GX09XTkVS
X1BHUlAgPSAyCitjb25zdCBfQUZfQVRNUFZDID0gX1BGX0FUTVBWQworY29uc3QgX1JUTUdSUF9J
UFY0X0lGQUREUiA9IDB4MTAKK2NvbnN0IF9TWVNfcmVjdmZyb20gPSBfX19OUl9yZWN2ZnJvbQor
Y29uc3QgX19fRkxUNjRYX01JTl8xMF9FWFBfXyA9ICgtNDkzMSkKK2NvbnN0IF9TX0lYR1JQID0g
KF9TX0lYVVNSID4+IDMpCitjb25zdCBfU1lTX21rbm9kID0gX19fTlJfbWtub2QKK2NvbnN0IF9O
RVRMSU5LX1NNQyA9IDIyCitjb25zdCBfU1lTX3V0aW1lcyA9IF9fX05SX3V0aW1lcworY29uc3Qg
X0ZTX1hGTEFHX0hBU0FUVFIgPSAweDgwMDAwMDAwCitjb25zdCBfX19ERUNfRVZBTF9NRVRIT0Rf
XyA9IDIKK2NvbnN0IF9TSUdUVElOID0gMjEKK2NvbnN0IF9JUFBST1RPX0VTUCA9IDUwCitjb25z
dCBfU0tGX0FEX05MQVRUUiA9IDEyCitjb25zdCBfRUFJX01FTU9SWSA9IC0xMAorY29uc3QgX1NZ
U19saXN0eGF0dHIgPSBfX19OUl9saXN0eGF0dHIKK2NvbnN0IF9BUlBPUF9OQUsgPSAxMAorY29u
c3QgX0JQRl9KU0VUID0gMHg0MAorY29uc3QgX05fVFRZID0gMAorY29uc3QgX19QQ19TT0NLX01B
WEJVRiA9IDEyCitjb25zdCBfVElPQ01fRFNSID0gMHgxMDAKK2NvbnN0IF9fX0ZMVDMyX01JTl9F
WFBfXyA9ICgtMTI1KQorY29uc3QgX1RDT0ZMVVNIID0gMQorY29uc3QgX1RVTkRFVEFDSEZJTFRF
Ul92YWwgPSAxMDc0ODEyMTE4Citjb25zdCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRG
TEFHUyA9IDExMTkKK2NvbnN0IF9NQURWX0hVR0VQQUdFID0gMTQKK2NvbnN0IF9UQ0lPRkxVU0gg
PSAyCitjb25zdCBfRVRIX1BfTlNIID0gMHg4OTRGCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9IQVNI
X01BWCA9IDI3Citjb25zdCBfSUZMQV9QUFBfREVWX0ZEID0gMQorY29uc3QgX1NfSVNVSUQgPSBf
X19TX0lTVUlECitjb25zdCBfVlNUQVJUID0gOAorY29uc3QgX0VUSF9QX0NBTkZEID0gMHgwMDBE
Citjb25zdCBfX0JJVFNfU1RESU5UX0lOVE5fSCA9IDEKK2NvbnN0IF9CUEZfQUxVID0gMHgwNAor
Y29uc3QgX19fU0laRU9GX0ZMT0FUODBfXyA9IDE2Citjb25zdCBfX1BPU0lYX1NTSVpFX01BWCA9
IDMyNzY3Citjb25zdCBfX0NTX1BBVEggPSAwCitjb25zdCBfSEFWRV9VTlNFVEVOViA9IDEKK2Nv
bnN0IF9GUkFNRV9TSVpFID0gMTY4Citjb25zdCBfSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9U
WCA9IDE5Citjb25zdCBfX1NZU19USU1FWF9IID0gMQorY29uc3QgX0lGTEFfVFVOX1VOU1BFQyA9
IDAKK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX0NBRF9PRkYgPSAweDAwMDAwMDAwCitjb25zdCBf
U0lHVVNSMSA9IDEwCitjb25zdCBfU0lHVVNSMiA9IDEyCitjb25zdCBfSEFWRV9TWVNfU1RBVF9I
ID0gMQorY29uc3QgX0hBVkVfRkFMTE9DQVRFID0gMQorY29uc3QgX19fTlJfdW5zaGFyZSA9IDI3
MgorY29uc3QgX0NYODZfQ0NSMCA9IDB4YzAKK2NvbnN0IF9DWDg2X0NDUjEgPSAweGMxCitjb25z
dCBfQ1g4Nl9DQ1IyID0gMHhjMgorY29uc3QgX0NYODZfQ0NSMyA9IDB4YzMKK2NvbnN0IF9TWVNf
cnRfc2lndGltZWR3YWl0ID0gX19fTlJfcnRfc2lndGltZWR3YWl0Citjb25zdCBfX19OUl90a2ls
bCA9IDIwMAorY29uc3QgX0NYODZfQ0NSNiA9IDB4ZWEKK2NvbnN0IF9DWDg2X0NDUjcgPSAweGVi
Citjb25zdCBfTVNHX01PUkUgPSAzMjc2OAorY29uc3QgX0lQT1BUX1RTX1RTT05MWSA9IDAKK2Nv
bnN0IF9IQVZFX0xJTlVYX1JUTkVUTElOS19IID0gMQorY29uc3QgX1BSSW8xNiA9ICJvIgorY29u
c3QgX1BUUkFDRV9QT0tFVVNSID0gNgorY29uc3QgX19fTlJfZ2V0Y3B1ID0gMzA5Citjb25zdCBf
QUZfREVDbmV0ID0gX1BGX0RFQ25ldAorY29uc3QgX1BBQ0tBR0VfTkFNRSA9ICJwYWNrYWdlLXVu
dXNlZCIKK2NvbnN0IF9fU0NfWE9QRU5fVU5JWCA9IDkxCitjb25zdCBfWDg2X0NSMF9OV19CSVQg
PSAyOQorY29uc3QgX01GRF9BTExPV19TRUFMSU5HID0gMgorY29uc3QgX0VBSV9DQU5DRUxFRCA9
IC0xMDEKK2NvbnN0IF9fX05SX3JlYWR2ID0gMTkKK2NvbnN0IF9fUE9TSVgyX1JFX0RVUF9NQVgg
PSAyNTUKK2NvbnN0IF9UVU5TRVRJRklOREVYX3ZhbCA9IDEwNzQwMjU2OTAKK2NvbnN0IF9fUlBD
X05FVERCX0ggPSAxCitjb25zdCBfTUFQX0hVR0VfTUFTSyA9IDB4M2YKK2NvbnN0IF9ORF9OQV9G
TEFHX1NPTElDSVRFRCA9IDB4MDAwMDAwNDAKK2NvbnN0IF9UVU5TRVRWTkVUSERSU1pfdmFsID0g
MTA3NDAyNTY4OAorY29uc3QgX0VBSV9BRERSRkFNSUxZID0gLTkKK2NvbnN0IF9fX1NJWkVPRl9G
TE9BVDEyOF9fID0gMTYKK2NvbnN0IF9fX05SX3Ztc3BsaWNlID0gMjc4Citjb25zdCBfX19OUl91
bmFtZSA9IDYzCitjb25zdCBfVENTRVRTX3ZhbCA9IDIxNTA2Citjb25zdCBfX19OUl9leGVjdmVh
dCA9IDMyMgorY29uc3QgX1NZU190aW1lcyA9IF9fX05SX3RpbWVzCitjb25zdCBfUlRNX0ZfUFJF
RklYID0gMHg4MDAKK2NvbnN0IF9TRUVLX0NVUiA9IDEKK2NvbnN0IF9JRkxBX0JSX0hFTExPX1RJ
TUVSID0gMTYKK2NvbnN0IF9fUENfUElQRV9CVUYgPSA1Citjb25zdCBfX0NTX1BPU0lYX1Y2X0xQ
QklHX09GRkJJR19MSU5URkxBR1MgPSAxMTMxCitjb25zdCBfSUZMQV9HRU5FVkVfUkVNT1RFID0g
MgorY29uc3QgX1JUTkxHUlBfTVBMU19ST1VURSA9IDI3Citjb25zdCBfU1lTX3RpbWVyX3NldHRp
bWUgPSBfX19OUl90aW1lcl9zZXR0aW1lCitjb25zdCBfUEZfTExDID0gMjYKK2NvbnN0IF9FVEhf
UF9MSU5LX0NUTCA9IDB4ODg2YworY29uc3QgX0lQX09QVElPTlMgPSA0Citjb25zdCBfQ1g4Nl9E
SVIxID0gMHhmZgorY29uc3QgX19QT1NJWF9SVFNJR19NQVggPSA4Citjb25zdCBfVElNRV9JTlMg
PSAxCitjb25zdCBfRUlTRElSID0gMjEKK2NvbnN0IF9fQklUU19UWVBFU19IID0gMQorY29uc3Qg
X19TWVNfU09DS0VUX0ggPSAxCitjb25zdCBfX19OUl9mc2V0eGF0dHIgPSAxOTAKK2NvbnN0IF9F
SU8gPSA1Citjb25zdCBfSVBQUk9UT19IT1BPUFRTID0gMAorY29uc3QgX0JMT0NLX1NJWkUgPSAo
MTw8X0JMT0NLX1NJWkVfQklUUykKK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfU1BFQ0sxMjhf
MjU2X0NUUyA9IDgKK2NvbnN0IF9JRkZfTk9BUlAgPSAxMjgKK2NvbnN0IF9fX0ZMVDY0WF9NQU5U
X0RJR19fID0gNjQKK2NvbnN0IF9FUkVNT1RFID0gNjYKK2NvbnN0IF9fX0ZMVDY0X01JTl9fID0g
MS4xCitjb25zdCBfTkRfT1BUX1JUUl9BRFZfSU5URVJWQUwgPSA3Citjb25zdCBfU1lTX3BpcGUg
PSBfX19OUl9waXBlCitjb25zdCBfTlRGX0VYVF9MRUFSTkVEID0gMHgxMAorY29uc3QgX1NUQV9Q
UFNFUlJPUiA9IDB4MDgwMAorY29uc3QgX0VSRU1PVEVJTyA9IDEyMQorY29uc3QgX0lOVF9GQVNU
MTZfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEpCitjb25zdCBfSEFWRV9MSU5VWF9GSUxU
RVJfSCA9IDEKK2NvbnN0IF9FSURSTSA9IDQzCitjb25zdCBfX1NDX0ZJRk8gPSAxNDQKK2NvbnN0
IF9TSV9RVUVVRSA9IC0xCitjb25zdCBfU1lTX2dldF9rZXJuZWxfc3ltcyA9IF9fX05SX2dldF9r
ZXJuZWxfc3ltcworY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSUJTID0gMTExOAor
Y29uc3QgX1RDT09OID0gMQorY29uc3QgX0ZfRFVQRkQgPSAwCitjb25zdCBfVUlOVF9MRUFTVDE2
X1dJRFRIID0gMTYKK2NvbnN0IF9TWVNfc2V0cmxpbWl0ID0gX19fTlJfc2V0cmxpbWl0Citjb25z
dCBfX1BBVEhfUFJPVE9DT0xTID0gIi9ldGMvcHJvdG9jb2xzIgorY29uc3QgX01PRF9UQUkgPSBf
QURKX1RBSQorY29uc3QgX19TQ19UUkFDRV9JTkhFUklUID0gMTgzCitjb25zdCBfX19OUl9zZW5k
dG8gPSA0NAorY29uc3QgX05FVExJTktfUk9VVEUgPSAwCitjb25zdCBfUFRSQUNFX0tJTEwgPSA4
Citjb25zdCBfUlROTEdSUF9NREIgPSAyNgorY29uc3QgX05FVERCX1NVQ0NFU1MgPSAwCitjb25z
dCBfRl9TRVRGRCA9IDIKK2NvbnN0IF9IQVZFX01LRElSQVQgPSAxCitjb25zdCBfSUZMQV9WWExB
Tl9MSU1JVCA9IDkKK2NvbnN0IF9fU0NfSE9TVF9OQU1FX01BWCA9IDE4MAorY29uc3QgX05MRExZ
ID0gMDAwMDQwMAorY29uc3QgX0FESl9USUNLID0gMHg0MDAwCitjb25zdCBfX1BPU0lYMl9MSU5F
X01BWCA9IDIwNDgKK2NvbnN0IF9GX1NFVEZMID0gNAorY29uc3QgX19DU19QT1NJWF9WN19MUDY0
X09GRjY0X0xERkxBR1MgPSAxMTQxCitjb25zdCBfX19OUl9zZXRyZXN1aWQgPSAxMTcKK2NvbnN0
IF9fX0RFQzY0X01JTl9FWFBfXyA9ICgtMzgyKQorY29uc3QgX0xfU0VUID0gMAorY29uc3QgX0lG
TEFfTlVNX1JYX1FVRVVFUyA9IDMyCitjb25zdCBfU09fU05ETE9XQVQgPSAxOQorY29uc3QgX1NJ
T0NTSUZUWFFMRU4gPSAweDg5NDMKK2NvbnN0IF9TT19USU1FU1RBTVBOUyA9IDM1Citjb25zdCBf
SU5UX0ZBU1QzMl9NSU4gPSAoLTkyMjMzNzIwMzY4NTQ3NzU4MDctMSkKK2NvbnN0IF9GU19QT0xJ
Q1lfRkxBR1NfUEFEXzggPSAweDAxCitjb25zdCBfU09fQklORFRPREVWSUNFID0gMjUKK2NvbnN0
IF9YRFBfRkxBR1NfRFJWX01PREUgPSAoMSA8PCAyKQorY29uc3QgX1BUUkFDRV9PX1RSQUNFU1lT
R09PRCA9IDEKK2NvbnN0IF9TS0ZfQURfTkxBVFRSX05FU1QgPSAxNgorY29uc3QgX1JUQV9UQUJM
RSA9IDE1Citjb25zdCBfU0lPQ0RSQVJQID0gMHg4OTYwCitjb25zdCBfUFJFRklYX1VOU1BFQyA9
IDAKK2NvbnN0IF9JQ01QNl9EU1RfVU5SRUFDSF9OT1BPUlQgPSA0Citjb25zdCBfUF9QSUQgPSAx
Citjb25zdCBfX1VUU05BTUVfU1lTTkFNRV9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RICitjb25z
dCBfX1BPU0lYX01FTUxPQ0tfUkFOR0UgPSAyMDA4MDkKK2NvbnN0IF9fX0RFQzEyOF9NSU5fRVhQ
X18gPSAoLTYxNDIpCitjb25zdCBfTkxNX0ZfTVVMVEkgPSAweDAyCitjb25zdCBfU09DS19DTE9F
WEVDID0gNTI0Mjg4Citjb25zdCBfX19GTFRfTUFYX18gPSAxLjEKK2NvbnN0IF9QT1NJWF9GQURW
X05PUkVVU0UgPSBfX19QT1NJWF9GQURWX05PUkVVU0UKK2NvbnN0IF9fX29zb2NrYWRkcl9kZWZp
bmVkID0gMQorY29uc3QgX1BUUkFDRV9PX1RSQUNFRVhFQyA9IDE2Citjb25zdCBfVUlOVF9GQVNU
NjRfV0lEVEggPSA2NAorY29uc3QgX0VUSF9QX1NOQVAgPSAweDAwMDUKK2NvbnN0IF9fX1NJWkVP
Rl9QVEhSRUFEX0JBUlJJRVJfVCA9IDMyCitjb25zdCBfSUZMQV9CUl9UT1BPTE9HWV9DSEFOR0Ug
PSAxNAorY29uc3QgX19CSVRTX1VJT19MSU1fSCA9IDEKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVZG
T1JLRE9ORSA9IDMyCitjb25zdCBfX1NDX0xPR0lOX05BTUVfTUFYID0gNzEKK2NvbnN0IF9FVEhF
Uk1UVSA9IF9FVEhfREFUQV9MRU4KK2NvbnN0IF9QT1NJWF9GQURWX0RPTlRORUVEID0gX19fUE9T
SVhfRkFEVl9ET05UTkVFRAorY29uc3QgX1JUUFJPVF9CQUJFTCA9IDQyCitjb25zdCBfRl9HRVRM
RUFTRSA9IDEwMjUKK2NvbnN0IF9fU0NfTEVWRUw0X0NBQ0hFX0FTU09DID0gMTk4Citjb25zdCBf
SUZMQV9WTEFOX1BST1RPQ09MID0gNQorY29uc3QgX0lQX1VOQkxPQ0tfU09VUkNFID0gMzcKK2Nv
bnN0IF9TT19QQVNTQ1JFRCA9IDE2Citjb25zdCBfQ0xPQ0tfVEFJID0gMTEKK2NvbnN0IF9OR1JP
VVBTX01BWCA9IDY1NTM2Citjb25zdCBfRklPU0VUT1dOID0gMHg4OTAxCitjb25zdCBfX1NDX1BJ
SV9PU0lfQ09UUyA9IDYzCitjb25zdCBfU0lPQ0RBUlAgPSAweDg5NTMKK2NvbnN0IF9NQVBfSFVH
RV9TSElGVCA9IDI2Citjb25zdCBfVUlOVFBUUl9NQVggPSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUp
Citjb25zdCBfRVRIX1BfV0FOX1BQUCA9IDB4MDAwNworY29uc3QgX0lOX0VYQ0xfVU5MSU5LID0g
MHgwNDAwMDAwMAorY29uc3QgX1g4Nl9DUjBfV1BfQklUID0gMTYKK2NvbnN0IF9PX0VYQ0wgPSAw
MjAwCitjb25zdCBfQlBGX05FRyA9IDB4ODAKK2NvbnN0IF9NU0dfTk9TSUdOQUwgPSAxNjM4NAor
Y29uc3QgX0lQVjZfUlhIT1BPUFRTID0gX0lQVjZfSE9QT1BUUworY29uc3QgX0lGTEFfTUFDVkxB
Tl9NQUNBRERSX0NPVU5UID0gNgorY29uc3QgX19DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1Mg
PSAxMTAxCitjb25zdCBfUFRSQUNFX0dFVFJFR1NFVCA9IDE2OTAwCitjb25zdCBfU0tGX0FEX0lG
SU5ERVggPSA4Citjb25zdCBfX1NZU19NTUFOX0ggPSAxCitjb25zdCBfTVNfQUNUSVZFID0gMTA3
Mzc0MTgyNAorY29uc3QgX1JfT0sgPSA0Citjb25zdCBfSVBWNl9SRUNWRlJBR1NJWkUgPSA3Nwor
Y29uc3QgX19fTlJfcnRfc2lncmV0dXJuID0gMTUKK2NvbnN0IF9fX0dOVUNfUEFUQ0hMRVZFTF9f
ID0gMAorY29uc3QgX19fTlJfZ2V0aXRpbWVyID0gMzYKK2NvbnN0IF9fX1NJWkVPRl9JTlRfXyA9
IDQKK2NvbnN0IF9fX1VJTlRfTEVBU1Q2NF9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29u
c3QgX05EVFBBX1VDQVNUX1BST0JFUyA9IDEwCitjb25zdCBfSUZMQV9CUlBPUlRfUEFEID0gMjYK
K2NvbnN0IF9fWEJTNV9MUDY0X09GRjY0ID0gMQorY29uc3QgX1NJR0FMUk0gPSAxNAorY29uc3Qg
X01TR19PT0IgPSAxCitjb25zdCBfUlROX1RIUk9XID0gOQorY29uc3QgX1VMT05HX1dJRFRIID0g
X19fV09SRFNJWkUKK2NvbnN0IF9YODZfQ1I0X1BTRV9CSVQgPSA0Citjb25zdCBfX1NDXzJfRk9S
VF9ERVYgPSA0OQorY29uc3QgX19fTlJfc3lzbG9nID0gMTAzCitjb25zdCBfX0NTX1BPU0lYX1Y2
X0xQQklHX09GRkJJR19DRkxBR1MgPSAxMTI4Citjb25zdCBfX19HQ0NfQVRPTUlDX1NIT1JUX0xP
Q0tfRlJFRSA9IDIKK2NvbnN0IF9fX0dMSUJDX1VTRV9MSUJfRVhUMiA9IDEKK2NvbnN0IF9USU9D
Tk9UVFlfdmFsID0gMjE1MzgKK2NvbnN0IF9BRl9QSE9ORVQgPSBfUEZfUEhPTkVUCitjb25zdCBf
TkVUTElOS19ORVRGSUxURVIgPSAxMgorY29uc3QgX0VUSF9GQ1NfTEVOID0gNAorY29uc3QgX0ZT
X1hGTEFHX0FQUEVORCA9IDB4MDAwMDAwMTAKK2NvbnN0IF9fX05SX2lvY3RsID0gMTYKK2NvbnN0
IF9DWDg2X0FSUl9CQVNFID0gMHhjNAorY29uc3QgX0FJX05VTUVSSUNTRVJWID0gMHgwNDAwCitj
b25zdCBfUFJfVFNDX0VOQUJMRSA9IDEKK2NvbnN0IF9TQ0hFRF9JRExFID0gNQorY29uc3QgX0Zf
T0sgPSAwCitjb25zdCBfX1NDX05MX1RFWFRNQVggPSAxMjQKK2NvbnN0IF9JUE9QVF9NRUFTVVJF
TUVOVCA9IF9JUE9QVF9ERUJNRUFTCitjb25zdCBfUlRfVEFCTEVfQ09NUEFUID0gMjUyCitjb25z
dCBfX19OUl9nZXRwcmlvcml0eSA9IDE0MAorY29uc3QgX0ZTX05PQ09XX0ZMID0gMHgwMDgwMDAw
MAorY29uc3QgX0lGTEFfTlVNX1RYX1FVRVVFUyA9IDMxCitjb25zdCBfSVBWNl9IT1BPUFRTID0g
NTQKK2NvbnN0IF9fX0xPTkdfTE9OR19NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3Qg
X1JUTV9ORVdORUlHSFRCTCA9IDY0Citjb25zdCBfVENQX1FVRVVFX1NFUSA9IDIxCitjb25zdCBf
SUZMQV9JTkZPX1NMQVZFX0RBVEEgPSA1Citjb25zdCBfX19WRVJTSU9OX18gPSAiOC4zLjAiCitj
b25zdCBfSUZMQV9HRU5FVkVfSUQgPSAxCitjb25zdCBfSUNNUDZfUEFSQU1QUk9CX05FWFRIRUFE
RVIgPSAxCitjb25zdCBfU1lTX2RlbGV0ZV9tb2R1bGUgPSBfX19OUl9kZWxldGVfbW9kdWxlCitj
b25zdCBfSVBWNl9SVEhEUiA9IDU3Citjb25zdCBfTExPTkdfTUlOID0gKC1fTExPTkdfTUFYIC0g
MSkKK2NvbnN0IF9FQ09NTSA9IDcwCitjb25zdCBfU1lTX3RpbWVyX2dldHRpbWUgPSBfX19OUl90
aW1lcl9nZXR0aW1lCitjb25zdCBfX19OUl9taWdyYXRlX3BhZ2VzID0gMjU2Citjb25zdCBfSU5f
TU9WRSA9IChfSU5fTU9WRURfRlJPTSB8IF9JTl9NT1ZFRF9UTykKK2NvbnN0IF9QT1JUX1JFUVVF
U1RfUFJFQVNTT0NJQVRFID0gMAorY29uc3QgX05fQVgyNSA9IDUKK2NvbnN0IF9fX09fQ0xPRVhF
QyA9IDAyMDAwMDAwCitjb25zdCBfVldFUkFTRSA9IDE0Citjb25zdCBfX19JTk9fVF9NQVRDSEVT
X0lOTzY0X1QgPSAxCitjb25zdCBfRUxJQkFDQyA9IDc5Citjb25zdCBfSVBPUFRfU0VDVVJfVU5D
TEFTUyA9IDB4MDAwMAorY29uc3QgX19QT1NJWF9TSEFSRURfTUVNT1JZX09CSkVDVFMgPSAyMDA4
MDkKK2NvbnN0IF9BUlBIUkRfSVBERFAgPSA3NzcKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfU1RB
VEUgPSAxCitjb25zdCBfUkxJTUlUX1NUQUNLID0gMworY29uc3QgX1BGX0FTSCA9IDE4Citjb25z
dCBfX19OUl9nZXRwZWVybmFtZSA9IDUyCitjb25zdCBfSVBWNl9SRUNWRVJSID0gMjUKK2NvbnN0
IF9OX1NUUklQID0gNAorY29uc3QgX0lQUFJPVE9fSUNNUCA9IDEKK2NvbnN0IF9QUl9TVkVfVkxf
TEVOX01BU0sgPSAweGZmZmYKK2NvbnN0IF9GX0dFVFBJUEVfU1ogPSAxMDMyCitjb25zdCBfSU9W
X01BWCA9IF9fX0lPVl9NQVgKK2NvbnN0IF9SVFBST1RfUklQID0gMTg5Citjb25zdCBfX19OUl9u
ZXdmc3RhdGF0ID0gMjYyCitjb25zdCBfX1NZU19NT1VOVF9IID0gMQorY29uc3QgX1BSX1RBU0tf
UEVSRl9FVkVOVFNfRU5BQkxFID0gMzIKK2NvbnN0IF9JUFBST1RPX1BVUCA9IDEyCitjb25zdCBf
RVRIX1BfU0xPVyA9IDB4ODgwOQorY29uc3QgX1NZU19pbm90aWZ5X3JtX3dhdGNoID0gX19fTlJf
aW5vdGlmeV9ybV93YXRjaAorY29uc3QgX1RDU0VUQVcgPSAweDU0MDcKK2NvbnN0IF9QQUNLRVRf
TVVMVElDQVNUID0gMgorY29uc3QgX19fSU5UMzJfTUFYX18gPSAweDdmZmZmZmZmCitjb25zdCBf
TElOVVhfUkVCT09UX0NNRF9DQURfT04gPSAweDg5QUJDREVGCitjb25zdCBfSUZMQV9CT05EX0FE
X0FDVE9SX1NZU19QUklPID0gMjQKK2NvbnN0IF9QUl9TRVRfRFVNUEFCTEUgPSA0Citjb25zdCBf
RVRIX1BfRUNPTkVUID0gMHgwMDE4Citjb25zdCBfU1lTX3NobWN0bCA9IF9fX05SX3NobWN0bAor
Y29uc3QgX01TX1NIQVJFRCA9IDEwNDg1NzYKK2NvbnN0IF9fX0lGTEFfUFBQX01BWCA9IDIKK2Nv
bnN0IF9IQVZFX1NZU19TVEFURlNfSCA9IDEKK2NvbnN0IF9YRFBfRkxBR1NfTUFTSyA9IChfWERQ
X0ZMQUdTX1VQREFURV9JRl9OT0VYSVNUIHwgX1hEUF9GTEFHU19NT0RFUykKK2NvbnN0IF9USU9D
R1JTNDg1ID0gMHg1NDJFCitjb25zdCBfSVBWNl9SRUNWUEtUSU5GTyA9IDQ5Citjb25zdCBfSEFW
RV9MSU5VWF9SRUJPT1RfSCA9IDEKK2NvbnN0IF9UQ1BfTk9ERUxBWSA9IDEKK2NvbnN0IF9QUkVG
SVhfQUREUkVTUyA9IDEKK2NvbnN0IF9SUE1fUENPX0FERCA9IDEKK2NvbnN0IF9UQ1BPUFRfTUFY
U0VHID0gMgorY29uc3QgX1NZU19zY2hlZF9nZXRhZmZpbml0eSA9IF9fX05SX3NjaGVkX2dldGFm
ZmluaXR5Citjb25zdCBfX1JFRU5UUkFOVCA9IDEKK2NvbnN0IF9JUFY2X0RST1BfTUVNQkVSU0hJ
UCA9IF9JUFY2X0xFQVZFX0dST1VQCitjb25zdCBfX1hPUEVOX1hQRzMgPSAxCitjb25zdCBfRU1G
SUxFID0gMjQKK2NvbnN0IF9fU0NfWE9QRU5fUkVBTFRJTUUgPSAxMzAKK2NvbnN0IF9USF9QVVNI
ID0gMHgwOAorY29uc3QgX0lGTEFfQlJfUEFEID0gNDAKK2NvbnN0IF9DTERfS0lMTEVEID0gMgor
Y29uc3QgX1NJR1RUT1UgPSAyMgorY29uc3QgX0lGTEFfVkZfU1BPT0ZDSEsgPSA0Citjb25zdCBf
X1NDX01CX0xFTl9NQVggPSAxMDgKK2NvbnN0IF9fX1VJTlQ2NF9NQVhfXyA9IDB4ZmZmZmZmZmZm
ZmZmZmZmZgorY29uc3QgX0lGTEFfR0VORVZFX1VEUF9aRVJPX0NTVU02X1JYID0gMTAKK2NvbnN0
IF9fX2xpbnV4ID0gMQorY29uc3QgX1JMSU1JVF9OT0ZJTEUgPSA3Citjb25zdCBfSUZMQV9CT05E
X1RMQl9EWU5BTUlDX0xCID0gMjcKK2NvbnN0IF9ORFRBX0NPTkZJRyA9IDUKK2NvbnN0IF9fUE9T
SVgyX0NfVkVSU0lPTiA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04KK2NvbnN0IF9fUE9TSVhfTUVN
T1JZX1BST1RFQ1RJT04gPSAyMDA4MDkKK2NvbnN0IF9fU0NfUkVHRVhfVkVSU0lPTiA9IDE1Ngor
Y29uc3QgX0lGTEFfSU5FVDZfSUNNUDZTVEFUUyA9IDYKK2NvbnN0IF9fTkVUREJfSCA9IDEKK2Nv
bnN0IF9GSU9BU1lOQyA9IDB4NTQ1MgorY29uc3QgX0lGTEFfVlhMQU5fTDNNSVNTID0gMTQKK2Nv
bnN0IF9fX1NfSVNHSUQgPSAwMjAwMAorY29uc3QgX01TX1ZFUkJPU0UgPSAzMjc2OAorY29uc3Qg
X05EVEFfR0NfSU5URVJWQUwgPSA4Citjb25zdCBfRVRIX1BfSVJEQSA9IDB4MDAxNworY29uc3Qg
X19fTlJfaW5vdGlmeV9ybV93YXRjaCA9IDI1NQorY29uc3QgX1NZU19wd3JpdGV2ID0gX19fTlJf
cHdyaXRldgorY29uc3QgX19fc2lnc3RhY2tfZGVmaW5lZCA9IDEKK2NvbnN0IF9fX0dDQ19BVE9N
SUNfUE9JTlRFUl9MT0NLX0ZSRUUgPSAyCitjb25zdCBfX1NDX0NfTEFOR19TVVBQT1JUID0gMTM1
Citjb25zdCBfRl9TRUFMX0dST1cgPSAweDAwMDQKK2NvbnN0IF9OTF9NTUFQX1NUQVRVU19SRVNF
UlZFRCA9IDEKK2NvbnN0IF9IQVZFX0xPRkZfVCA9IDEKK2NvbnN0IF9fUE9TSVhfSElXQVQgPSBf
X1BPU0lYX1BJUEVfQlVGCitjb25zdCBfUFJfR0VUX1RIUF9ESVNBQkxFID0gNDIKK2NvbnN0IF9f
QklUU19CWVRFU1dBUF9IID0gMQorY29uc3QgX0ZfVEVTVCA9IDMKK2NvbnN0IF9NUkVNQVBfRklY
RUQgPSAyCitjb25zdCBfTUFYX0FERFJfTEVOID0gNworY29uc3QgX19TQ19MT05HX0JJVCA9IDEw
NgorY29uc3QgX09OT0NSID0gMDAwMDAyMAorY29uc3QgX1NJX01FU0dRID0gLTMKK2NvbnN0IF9Q
UklkRkFTVDggPSAiZCIKK2NvbnN0IF9JRkxBX01BQ1NFQ19QT1JUID0gMgorY29uc3QgX0NCQVVE
ID0gMDAxMDAxNworY29uc3QgX1NZU19zZXRmc3VpZCA9IF9fX05SX3NldGZzdWlkCitjb25zdCBf
X1NDX01BUFBFRF9GSUxFUyA9IDE2Citjb25zdCBfRkZJX0xPTkdfTE9OR19NQVggPSBfTE9OR19M
T05HX01BWAorY29uc3QgX05EX1JBX0ZMQUdfT1RIRVIgPSAweDQwCitjb25zdCBfVFJBUF9UUkFD
RSA9IDIKK2NvbnN0IF9fU0NfUkFXX1NPQ0tFVFMgPSAyMzYKK2NvbnN0IF9GU19YRkxBR19TWU5D
ID0gMHgwMDAwMDAyMAorY29uc3QgX0lGTEFfQk9ORF9BUlBfSVBfVEFSR0VUID0gOAorY29uc3Qg
X19QT1NJWF9SRUdFWFAgPSAxCitjb25zdCBfVENQX0lORk8gPSAxMQorY29uc3QgX0lGTEFfQlJQ
T1JUX01DQVNUX1RPX1VDQVNUID0gMjgKK2NvbnN0IF9QRl9ORkMgPSAzOQorY29uc3QgX1NfSUZJ
Rk8gPSBfX19TX0lGSUZPCitjb25zdCBfRUFJX05PVENBTkNFTEVEID0gLTEwMgorY29uc3QgX1BU
UkFDRV9PX1RSQUNFRVhJVCA9IDY0Citjb25zdCBfU1RBX1JPTkxZID0gKF9TVEFfUFBTU0lHTkFM
IHwgX1NUQV9QUFNKSVRURVIgfCBfU1RBX1BQU1dBTkRFUiB8IF9TVEFfUFBTRVJST1IgfCBfU1RB
X0NMT0NLRVJSIHwgX1NUQV9OQU5PIHwgX1NUQV9NT0RFIHwgX1NUQV9DTEspCitjb25zdCBfVENQ
X0ZJTl9XQUlUMSA9IDQKK2NvbnN0IF9JRkxBX0lORVQ2X1NUQVRTID0gMworY29uc3QgX19JT0Nf
VFlQRVNISUZUID0gKF9fSU9DX05SU0hJRlQrX19JT0NfTlJCSVRTKQorY29uc3QgX19fRkxUMTI4
X01JTl9fID0gMS4xCitjb25zdCBfUlRGX1dJTkRPVyA9IDB4MDA4MAorY29uc3QgX1BSX0dFVF9D
SElMRF9TVUJSRUFQRVIgPSAzNworY29uc3QgX1JUTkxHUlBfSVBWNF9NUk9VVEUgPSA2Citjb25z
dCBfTk9fQUREUkVTUyA9IF9OT19EQVRBCitjb25zdCBfU1lTX2ZjaG93bmF0ID0gX19fTlJfZmNo
b3duYXQKK2NvbnN0IF9fX05SX2dldGN3ZCA9IDc5Citjb25zdCBfUFJFRklYX0NBQ0hFSU5GTyA9
IDIKK2NvbnN0IF9JUE9QVF9PTEVOID0gMQorY29uc3QgX1NZU19mY2htb2QgPSBfX19OUl9mY2ht
b2QKK2NvbnN0IF9fU0NfQkNfRElNX01BWCA9IDM3Citjb25zdCBfU1lTX3NlbW9wID0gX19fTlJf
c2Vtb3AKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1JYX1BBQ0tFVFMgPSAwCitjb25zdCBfX19QVEhS
RUFEX01VVEVYX1VTRV9VTklPTiA9IDAKK2NvbnN0IF9UQ0lGTFVTSCA9IDAKK2NvbnN0IF9FQkFE
U0xUID0gNTcKK2NvbnN0IF9FVEhFUlRZUEVfUkVWQVJQID0gMHg4MDM1Citjb25zdCBfSEFWRV9F
UE9MTF9DUkVBVEUxID0gMQorY29uc3QgX19CSVRTX1RZUEVTX19fTE9DQUxFX1RfSCA9IDEKK2Nv
bnN0IF9fX0dOVUNfXyA9IDgKK2NvbnN0IF9TQ05kTEVBU1Q4ID0gImhoZCIKK2NvbnN0IF9CMCA9
IDAwMDAwMDAKK2NvbnN0IF9IQVZFX1NZU19JTk9USUZZX0ggPSAxCitjb25zdCBfX19TX0lGRElS
ID0gMDA0MDAwMAorY29uc3QgX1RDQV9ST09UX1RJTUVfREVMVEEgPSA0Citjb25zdCBfQ0xPTkVf
VEhSRUFEID0gMHgwMDAxMDAwMAorY29uc3QgX01TX1BPU0lYQUNMID0gNjU1MzYKK2NvbnN0IF9Q
QVRIX01BWCA9IDQwOTYKK2NvbnN0IF9JRkxBX1VOU1BFQyA9IDAKK2NvbnN0IF9fX05SX3JlYm9v
dCA9IDE2OQorY29uc3QgX1NPTF9JUCA9IDAKK2NvbnN0IF9UVU5fRl9VRk8gPSAweDEwCitjb25z
dCBfX19GTFQ2NF9IQVNfREVOT1JNX18gPSAxCitjb25zdCBfSVBUT1NfUFJFQ19DUklUSUNfRUNQ
ID0gX0lQVE9TX0NMQVNTX0NTNQorY29uc3QgX0lOX0xPT1BCQUNLTkVUID0gMTI3Citjb25zdCBf
U09MX0FBTCA9IDI2NQorY29uc3QgX1NZU19zZXR0aW1lb2ZkYXkgPSBfX19OUl9zZXR0aW1lb2Zk
YXkKK2NvbnN0IF9JUFBST1RPX0lEUCA9IDIyCitjb25zdCBfX1NDXzJfTE9DQUxFREVGID0gNTIK
K2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1BBRCA9IDYKK2NvbnN0IF9BRl9JTkVUID0gX1BGX0lORVQK
K2NvbnN0IF9GX1NFVExLID0gX0ZfU0VUTEs2NAorY29uc3QgX0NYODZfUENSMSA9IDB4ZjAKK2Nv
bnN0IF9fX05SX2xyZW1vdmV4YXR0ciA9IDE5OAorY29uc3QgX0lQT1BUX05PT1AgPSBfSVBPUFRf
Tk9QCitjb25zdCBfUlRNU0dfTkVXREVWSUNFID0gMHgxMQorY29uc3QgX0hBVkVfU0VUWEFUVFIg
PSAxCitjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfQ1RTID0gNAorY29uc3QgX19D
U19WNV9XSURUSF9SRVNUUklDVEVEX0VOVlMgPSA0Citjb25zdCBfU19JRlNPQ0sgPSBfX19TX0lG
U09DSworY29uc3QgX19fTlJfc2lnbmFsZmQ0ID0gMjg5Citjb25zdCBfX0lTT0M5OV9TT1VSQ0Ug
PSAxCitjb25zdCBfX19GTFRfRElHX18gPSA2Citjb25zdCBfX19OUl9nZXRwaWQgPSAzOQorY29u
c3QgX1VMTE9OR19XSURUSCA9IDY0Citjb25zdCBfX1NDX1hPUEVOX1hQRzIgPSA5OAorY29uc3Qg
X1NZU19raWxsID0gX19fTlJfa2lsbAorY29uc3QgX0IxMTAgPSAwMDAwMDAzCitjb25zdCBfVENQ
X1JFUEFJUl9RVUVVRSA9IDIwCitjb25zdCBfUlROTEdSUF9JUFY0X0lGQUREUiA9IDUKK2NvbnN0
IF9fX0ZYU1JfXyA9IDEKK2NvbnN0IF9NQUNWTEFOX01PREVfUFJJVkFURSA9IDEKK2NvbnN0IF9f
X05SX3N0YXR4ID0gMzMyCitjb25zdCBfX19TSVpFX1dJRFRIX18gPSA2NAorY29uc3QgX19QT1NJ
WF9UVFlfTkFNRV9NQVggPSA5Citjb25zdCBfSUZMQV9CT05EX0FEX0FDVE9SX1NZU1RFTSA9IDI2
Citjb25zdCBfU09fR0VUX0ZJTFRFUiA9IF9TT19BVFRBQ0hfRklMVEVSCitjb25zdCBfX1VUSU1F
X0ggPSAxCitjb25zdCBfU1RBVFhfQkFTSUNfU1RBVFMgPSAweDA3ZmYKK2NvbnN0IF9TWVNfdXRp
bWVuc2F0ID0gX19fTlJfdXRpbWVuc2F0Citjb25zdCBfX1NDXzJfQ0hBUl9URVJNID0gOTUKK2Nv
bnN0IF9UVU5TRVRPV05FUl92YWwgPSAxMDc0MDI1Njc2Citjb25zdCBfUFRIUkVBRF9TVEFDS19N
SU4gPSAxNjM4NAorY29uc3QgX1NJR1BST0YgPSAyNworY29uc3QgX19TQ19MSU5FX01BWCA9IDQz
Citjb25zdCBfX19TSUdFVl9NQVhfU0laRSA9IDY0Citjb25zdCBfSEFWRV9TRVRFTlYgPSAxCitj
b25zdCBfX1NDX1NZU1RFTV9EQVRBQkFTRSA9IDE2MgorY29uc3QgX0ZTX1hGTEFHX05PRFVNUCA9
IDB4MDAwMDAwODAKK2NvbnN0IF9TWVNfdGltZXJfY3JlYXRlID0gX19fTlJfdGltZXJfY3JlYXRl
Citjb25zdCBfX1BDX0xJTktfTUFYID0gMAorY29uc3QgX1RDUE9QVF9XSU5ET1cgPSAzCitjb25z
dCBfX0JJVFNfUE9TSVgyX0xJTV9IID0gMQorY29uc3QgX19fVUlOVF9MRUFTVDMyX01BWF9fID0g
MHhmZmZmZmZmZgorY29uc3QgX19fTlJfbXFfbm90aWZ5ID0gMjQ0Citjb25zdCBfSVBQT1JUX0RB
WVRJTUUgPSAxMworY29uc3QgX1NZU19zdGF0ID0gX19fTlJfc3RhdAorY29uc3QgX1BBUkVOQiA9
IDAwMDA0MDAKK2NvbnN0IF9GQUxMT0NfRkxfS0VFUF9TSVpFID0gMHgwMQorY29uc3QgX19TQ19T
Q0hBUl9NQVggPSAxMTEKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1FVRVJJRVIgPSAyNQorY29uc3Qg
X01BRFZfSFdQT0lTT04gPSAxMDAKK2NvbnN0IF9TT19DT09LSUUgPSA1NworY29uc3QgX19QT1NJ
WF9BU1lOQ19JTyA9IDEKK2NvbnN0IF9SVF9TQ09QRV9OT1dIRVJFID0gMjU1Citjb25zdCBfSUZM
QV9CT05EX1NMQVZFX0FEX0FDVE9SX09QRVJfUE9SVF9TVEFURSA9IDcKK2NvbnN0IF9ORF9PUFRf
UElfRkxBR19PTkxJTksgPSAweDgwCitjb25zdCBfX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCA9
IDgyCitjb25zdCBfU1lTX3NldGRvbWFpbm5hbWUgPSBfX19OUl9zZXRkb21haW5uYW1lCitjb25z
dCBfRl9HRVRPV05fRVggPSBfX19GX0dFVE9XTl9FWAorY29uc3QgX0VTVEFMRSA9IDExNgorY29u
c3QgX19fTlJfZnV0ZXggPSAyMDIKK2NvbnN0IF9JRkZfREVUQUNIX1FVRVVFID0gMHgwNDAwCitj
b25zdCBfSUZMQV9MSU5LTU9ERSA9IDE3Citjb25zdCBfSVBPUFRfU0VDVVJJVFkgPSAxMzAKK2Nv
bnN0IF9JRkxBX0JSX1NUUF9TVEFURSA9IDUKK2NvbnN0IF9fUENfTkFNRV9NQVggPSAzCitjb25z
dCBfSUZMQV9HRU5FVkVfVURQX1pFUk9fQ1NVTTZfVFggPSA5Citjb25zdCBfU0lHQ09OVCA9IDE4
Citjb25zdCBfX19OUl9nZXRwbXNnID0gMTgxCitjb25zdCBfU1lTX2ZjaGRpciA9IF9fX05SX2Zj
aGRpcgorY29uc3QgX0lGRl9QT1JUU0VMID0gODE5MgorY29uc3QgX1NPX0FUVEFDSF9SRVVTRVBP
UlRfQ0JQRiA9IDUxCitjb25zdCBfVENBX1JPT1RfRkxBR1MgPSAyCitjb25zdCBfX1NDX1Y2X0lM
UDMyX09GRkJJRyA9IDE3NworY29uc3QgX01BWF9DQU5PTiA9IDI1NQorY29uc3QgX0lGTEFfQk9O
RF9YTUlUX0hBU0hfUE9MSUNZID0gMTQKK2NvbnN0IF9FVEhFUl9DUkNfTEVOID0gNAorY29uc3Qg
X0lGTEFfSU5GT19EQVRBID0gMgorY29uc3QgX19fTElOS19YU1RBVFNfVFlQRV9NQVggPSAyCitj
b25zdCBfTlRGX1BST1hZID0gMHgwOAorY29uc3QgX1JUUFJPVF9FSUdSUCA9IDE5MgorY29uc3Qg
X19DU19WN19FTlYgPSAxMTQ5Citjb25zdCBfQUlfSUROID0gMHgwMDQwCitjb25zdCBfU19JUk9U
SCA9IChfU19JUkdSUCA+PiAzKQorY29uc3QgX1JUTkxHUlBfTk9ORSA9IDAKK2NvbnN0IF9JUFBS
T1RPX0dSRSA9IDQ3Citjb25zdCBfV0VYSVRFRCA9IDQKK2NvbnN0IF9QQUNLRVRfVFhfVElNRVNU
QU1QID0gMTYKK2NvbnN0IF9FUE9MTEhVUCA9IDE2Citjb25zdCBfTFRfT0JKRElSID0gIi5saWJz
LyIKK2NvbnN0IF9fX1JUQVhfTUFYID0gMTgKK2NvbnN0IF9QQUNLRVRfSERSTEVOID0gMTEKK2Nv
bnN0IF9CUEZfTFNIID0gMHg2MAorY29uc3QgX1RDUE9MRU5fU0FDS19QRVJNSVRURUQgPSAyCitj
b25zdCBfUE9MTF9QUkkgPSA1Citjb25zdCBfX19OUl9zZXRyZXVpZCA9IDExMworY29uc3QgX0ZT
X1hGTEFHX05PREVGUkFHID0gMHgwMDAwMjAwMAorY29uc3QgX19TQ18yX1BCUyA9IDE2OAorY29u
c3QgX1NJT0NTSUZGTEFHUyA9IDB4ODkxNAorY29uc3QgX19fRl9HRVRPV04gPSA5Citjb25zdCBf
X19JRkxBX0JPTkRfQURfSU5GT19NQVggPSA2Citjb25zdCBfQlBGX01BWElOU05TID0gNDA5Ngor
Y29uc3QgX0VBSV9JRE5fRU5DT0RFID0gLTEwNQorY29uc3QgX0lGTEFfVkZfU1RBVFNfVFhfUEFD
S0VUUyA9IDEKK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9NRURJVU0gPSAzCitjb25zdCBfRklMRV9E
RURVUEVfUkFOR0VfU0FNRSA9IDAKK2NvbnN0IF9JUFBST1RPX1RDUCA9IDYKK2NvbnN0IF9USU9D
TV9DRCA9IF9USU9DTV9DQVIKK2NvbnN0IF9CMTM0ID0gMDAwMDAwNAorY29uc3QgX0VBSV9GQU1J
TFkgPSAtNgorY29uc3QgX0lGTEFfQlJQT1JUX0JDQVNUX0ZMT09EID0gMzAKK2NvbnN0IF9TWVNf
ZmxvY2sgPSBfX19OUl9mbG9jaworY29uc3QgX0hBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IID0gMQor
Y29uc3QgX0VUSF9QX1BSUCA9IDB4ODhGQgorY29uc3QgX09GSUxMID0gMDAwMDEwMAorY29uc3Qg
X19DU19MRlM2NF9MSUJTID0gMTAwNgorY29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9BRVNfMjU2
X1hUUyA9IDEKK2NvbnN0IF9JRkxBX0dUUF9GRDAgPSAxCitjb25zdCBfSUZMQV9HVFBfRkQxID0g
MgorY29uc3QgX0hBVkVfU1lOQ19GSUxFX1JBTkdFID0gMQorY29uc3QgX0lGQV9MT0NBTCA9IDIK
K2NvbnN0IF9ORF9PUFRfUElfRkxBR19SQUREUiA9IDB4MjAKK2NvbnN0IF9UQ1BfREVGRVJfQUND
RVBUID0gOQorY29uc3QgX01DQVNUX0pPSU5fU09VUkNFX0dST1VQID0gNDYKK2NvbnN0IF9TWVNf
cmVxdWVzdF9rZXkgPSBfX19OUl9yZXF1ZXN0X2tleQorY29uc3QgX0lDTVA2X1BBQ0tFVF9UT09f
QklHID0gMgorY29uc3QgX1g4Nl9DUjRfUENFX0JJVCA9IDgKK2NvbnN0IF9FQUlfQkFERkxBR1Mg
PSAtMQorY29uc3QgX19DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxBR1MgPSAxMTE1Citjb25z
dCBfVVRJTUVfTk9XID0gKCgxIDw8IDMwKSAtIDEpCitjb25zdCBfX1BPU0lYX01BWF9JTlBVVCA9
IDI1NQorY29uc3QgX0lGTEFfQlJQT1JUX0lEID0gMTcKK2NvbnN0IF9FVEhfREFUQV9MRU4gPSAx
NTAwCitjb25zdCBfX19STElNSVRfU0lHUEVORElORyA9IDExCitjb25zdCBfU1lTX2lvX2Rlc3Ry
b3kgPSBfX19OUl9pb19kZXN0cm95Citjb25zdCBfU09fSU5DT01JTkdfTkFQSV9JRCA9IDU2Citj
b25zdCBfRVRIX1BfUFBQX0RJU0MgPSAweDg4NjMKK2NvbnN0IF9UQ1BPTEVOX01BWFNFRyA9IDQK
K2NvbnN0IF9FVEhfUF84MDJfM19NSU4gPSAweDA2MDAKK2NvbnN0IF9BUlBPUF9SUkVQTFkgPSA0
Citjb25zdCBfSVBWNl9VTklDQVNUX0hPUFMgPSAxNgorY29uc3QgX05FVExJTktfTk9fRU5PQlVG
UyA9IDUKK2NvbnN0IF9fX05SX25hbWVfdG9faGFuZGxlX2F0ID0gMzAzCitjb25zdCBfX19GTFQz
Ml9NQVhfXyA9IDEuMQorY29uc3QgX1NZU190aW1lcmZkX2NyZWF0ZSA9IF9fX05SX3RpbWVyZmRf
Y3JlYXRlCitjb25zdCBfSU5fTU9WRURfVE8gPSAweDAwMDAwMDgwCitjb25zdCBfU1lTX2dldHRp
ZCA9IF9fX05SX2dldHRpZAorY29uc3QgX19QT1NJWF9JUFY2ID0gMjAwODA5Citjb25zdCBfQUZf
TVBMUyA9IF9QRl9NUExTCitjb25zdCBfU1lTX2ZhbGxvY2F0ZSA9IF9fX05SX2ZhbGxvY2F0ZQor
Y29uc3QgX0FGX1dBTlBJUEUgPSBfUEZfV0FOUElQRQorY29uc3QgX1RDUF9USElOX0xJTkVBUl9U
SU1FT1VUUyA9IDE2Citjb25zdCBfX19OUl9zZXRkb21haW5uYW1lID0gMTcxCitjb25zdCBfX19O
TE1TR0VSUl9BVFRSX01BWCA9IDQKK2NvbnN0IF9fX0ZMVDEyOF9IQVNfREVOT1JNX18gPSAxCitj
b25zdCBfRVRIRVJUWVBFX1BVUCA9IDB4MDIwMAorY29uc3QgX19CSVRTX1BPU0lYMV9MSU1fSCA9
IDEKK2NvbnN0IF9fX0dMSUJDX1VTRV9JRUNfNjA1NTlfVFlQRVNfRVhUID0gMQorY29uc3QgX0lQ
VjZfUkVDVkRTVE9QVFMgPSA1OAorY29uc3QgX19fTlJfc2VjdXJpdHkgPSAxODUKK2NvbnN0IF9B
UlBIUkRfUkFXSVAgPSA1MTkKK2NvbnN0IF9FVEhfUF84MDJfRVgxID0gMHg4OEI1Citjb25zdCBf
SUZBX0ZfREFERkFJTEVEID0gMHgwOAorY29uc3QgX1NDTng4ID0gImhoeCIKK2NvbnN0IF9DU0lH
TkFMID0gMHgwMDAwMDBmZgorY29uc3QgX19fTlJfYWNjZXB0NCA9IDI4OAorY29uc3QgX05JX05V
TUVSSUNIT1NUID0gMQorY29uc3QgX1JUTkhfRl9VTlJFU09MVkVEID0gMzIKK2NvbnN0IF9COTYw
MCA9IDAwMDAwMTUKK2NvbnN0IF9OTF9NTUFQX1NUQVRVU19VTlVTRUQgPSAwCitjb25zdCBfU09f
TE9DS19GSUxURVIgPSA0NAorY29uc3QgX0lGTEFfVkZfTUFDID0gMQorY29uc3QgX0lGTEFfVlhM
QU5fUkVNQ1NVTV9UWCA9IDIxCitjb25zdCBfVUNIQVJfTUFYID0gKF9TQ0hBUl9NQVggKiAyICsg
MSkKK2NvbnN0IF9JRkxBX0JPTkRfQVJQX1ZBTElEQVRFID0gOQorY29uc3QgX0lQUFJPVE9fTVBM
UyA9IDEzNworY29uc3QgX0lGTEFfTUlOX01UVSA9IDUwCitjb25zdCBfRVRIX1BfSVBWNiA9IDB4
ODZERAorY29uc3QgX0VUSF9QX0FBUlAgPSAweDgwRjMKK2NvbnN0IF9TWVNfc2NoZWRfc2V0cGFy
YW0gPSBfX19OUl9zY2hlZF9zZXRwYXJhbQorY29uc3QgX0FURl9QVUJMID0gMHgwOAorY29uc3Qg
X1dDT1JFRkxBRyA9IF9fX1dDT1JFRkxBRworY29uc3QgX1RJT0NHV0lOU1ogPSAweDU0MTMKK2Nv
bnN0IF9fX1VTRV9YT1BFTjJLOFhTSSA9IDEKK2NvbnN0IF9QUklpOCA9ICJpIgorY29uc3QgX0FS
UEhSRF9MT09QQkFDSyA9IDc3MgorY29uc3QgX19fR0NDX0lFQ181NTlfQ09NUExFWCA9IDIKK2Nv
bnN0IF9TT19CUk9BRENBU1QgPSA2Citjb25zdCBfX19HTElCQ19NSU5PUl9fID0gMjgKK2NvbnN0
IF9fU0NfU1RSRUFNUyA9IDE3NAorY29uc3QgX1NZU19zaG1hdCA9IF9fX05SX3NobWF0Citjb25z
dCBfSVBWTEFOX01PREVfTDIgPSAwCitjb25zdCBfX19NTVhfXyA9IDEKK2NvbnN0IF9CMTUwID0g
MDAwMDAwNQorY29uc3QgX1BPU0lYX0ZBRFZfV0lMTE5FRUQgPSAzCitjb25zdCBfSUZMQV9WWExB
Tl9SU0MgPSAxMgorY29uc3QgX1BBQ0tFVF9CUk9BRENBU1QgPSAxCitjb25zdCBfUEZfQVRNUFZD
ID0gOAorY29uc3QgX1NZU19wcmVhZHYyID0gX19fTlJfcHJlYWR2MgorY29uc3QgX0lOX0NMQVNT
Q19ORVQgPSAweGZmZmZmZjAwCitjb25zdCBfUEFDS0VUX0NPUFlfVEhSRVNIID0gNworY29uc3Qg
X0VUSF9aTEVOID0gNjAKK2NvbnN0IF9UQ1BPUFRfRU9MID0gMAorY29uc3QgX0lONl9BRERSX0dF
Tl9NT0RFX1JBTkRPTSA9IDMKK2NvbnN0IF9JRkxBX01BQ1NFQ19FTkNPRElOR19TQSA9IDYKK2Nv
bnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9MSUJTID0gMTE0MgorY29uc3QgX0VUSF9QX1BV
UEFUID0gMHgwMjAxCitjb25zdCBfU1lTX2dldHJ1c2FnZSA9IF9fX05SX2dldHJ1c2FnZQorY29u
c3QgX19QT1NJWF9USFJFQURfQVRUUl9TVEFDS0FERFIgPSAyMDA4MDkKK2NvbnN0IF9JRkxBX1BP
UlRfUFJPRklMRSA9IDIKK2NvbnN0IF9fX0ZMVDY0X0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0
IF9VSU5UNjRfV0lEVEggPSA2NAorY29uc3QgX1NZU19rY21wID0gX19fTlJfa2NtcAorY29uc3Qg
X0lOX01PVkVEX0ZST00gPSAweDAwMDAwMDQwCitjb25zdCBfX1VUU05BTUVfTUFDSElORV9MRU5H
VEggPSBfX1VUU05BTUVfTEVOR1RICitjb25zdCBfSVBWNl9MRUFWRV9HUk9VUCA9IDIxCitjb25z
dCBfU1lTX3VubGluayA9IF9fX05SX3VubGluaworY29uc3QgX0hBVkVfU1RSU0lHTkFMID0gMQor
Y29uc3QgX19QQ19DSE9XTl9SRVNUUklDVEVEID0gNgorY29uc3QgX19TQ19YT1BFTl9SRUFMVElN
RV9USFJFQURTID0gMTMxCitjb25zdCBfRVRIX1BfSUJPRSA9IDB4ODkxNQorY29uc3QgX09fRlNZ
TkMgPSBfT19TWU5DCitjb25zdCBfUlRNX05FV1JVTEUgPSAzMgorY29uc3QgX0lGTEFfWERQX0ZM
QUdTID0gMworY29uc3QgX1NJT0NHSUZDT1VOVCA9IDB4ODkzOAorY29uc3QgX1BBQ0tFVF9PVVRH
T0lORyA9IDQKK2NvbnN0IF9JUFRPU19QUkVDX01BU0sgPSBfSVBUT1NfQ0xBU1NfTUFTSworY29u
c3QgX19fTlJfcmVuYW1lYXQyID0gMzE2Citjb25zdCBfX1NDX0lQVjYgPSAyMzUKK2NvbnN0IF9U
Q1BfRVNUQUJMSVNIRUQgPSAxCitjb25zdCBfQVJQSFJEX0FSQ05FVCA9IDcKK2NvbnN0IF9USU9D
U0VSU1dJTEQgPSAweDU0NTUKK2NvbnN0IF9FVEhfUF9QVVAgPSAweDAyMDAKK2NvbnN0IF9fUE9T
SVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgPSAyMDA4MDkKK2NvbnN0IF9TSUdFVl9USFJF
QUQgPSAyCitjb25zdCBfSEFWRV9VVElNRV9IID0gMQorY29uc3QgX0lQX1JFQ1ZPUFRTID0gNgor
Y29uc3QgX1BSX1NFVF9NTV9TVEFSVF9DT0RFID0gMQorY29uc3QgX19fQ1BVX1NFVFNJWkUgPSAx
MDI0Citjb25zdCBfUEZfREVDbmV0ID0gMTIKK2NvbnN0IF9USU9DTV9DQVIgPSAweDA0MAorY29u
c3QgX1NZU19zaG1nZXQgPSBfX19OUl9zaG1nZXQKK2NvbnN0IF9SVE1fRl9MT09LVVBfVEFCTEUg
PSAweDEwMDAKK2NvbnN0IF9SVFBST1RfTlRLID0gMTUKK2NvbnN0IF9fX05SX2V2ZW50ZmQyID0g
MjkwCitjb25zdCBfSUZMQV9FVkVOVF9CT05ESU5HX09QVElPTlMgPSA2Citjb25zdCBfU0lPQ0dJ
RkVOQ0FQID0gMHg4OTI1Citjb25zdCBfX19OUl91bmxpbmthdCA9IDI2MworY29uc3QgX0lGTEFf
QlJfVkxBTl9GSUxURVJJTkcgPSA3Citjb25zdCBfTVNfQVNZTkMgPSAxCitjb25zdCBfX0lPQ19S
RUFEID0gMgorY29uc3QgX19USFJFQURfU0hBUkVEX1RZUEVTX0ggPSAxCitjb25zdCBfX19OUl9z
ZXRfcm9idXN0X2xpc3QgPSAyNzMKK2NvbnN0IF9JRkxBX0dST1VQID0gMjcKK2NvbnN0IF9TQ0hF
RF9ERUFETElORSA9IDYKK2NvbnN0IF9FTElCRVhFQyA9IDgzCitjb25zdCBfV0NIQVJfTUlOID0g
X19fV0NIQVJfTUlOCitjb25zdCBfX19OUl9wdXRwbXNnID0gMTgyCitjb25zdCBfX19OUl9hcmNo
X3ByY3RsID0gMTU4Citjb25zdCBfTVNHX0NUUlVOQyA9IDgKK2NvbnN0IF9JRkxBX0JSX1JPT1Rf
UEFUSF9DT1NUID0gMTMKK2NvbnN0IF9NU0dfU1lOID0gMTAyNAorY29uc3QgX0hBVkVfTElOVVhf
TkVUTElOS19IID0gMQorY29uc3QgX0hBVkVfU1BMSUNFID0gMQorY29uc3QgX1BLRVlfRElTQUJM
RV9XUklURSA9IDB4MgorY29uc3QgX0ZQRV9GTFRESVYgPSAzCitjb25zdCBfX19OUl9wa2V5X21w
cm90ZWN0ID0gMzI5Citjb25zdCBfSVBQT1JUX1RFTE5FVCA9IDIzCitjb25zdCBfUlRBX1NQT1JU
ID0gMjgKK2NvbnN0IF9fWE9QRU5fVkVSU0lPTiA9IDcwMAorY29uc3QgX19DU19YQlM1X0lMUDMy
X09GRjMyX0xJQlMgPSAxMTAyCitjb25zdCBfUlROTEdSUF9ORUlHSCA9IDMKK2NvbnN0IF9fQ1Nf
UE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUyA9IDExMTcKK2NvbnN0IF9VSU5UX0ZBU1Q4X1dJ
RFRIID0gOAorY29uc3QgX1RDUE9QVF9OT1AgPSAxCitjb25zdCBfVElNRV9CQUQgPSBfVElNRV9F
UlJPUgorY29uc3QgX1JUTV9ERUxBRERSTEFCRUwgPSA3MworY29uc3QgX19QT1NJWF9OT19UUlVO
QyA9IDEKK2NvbnN0IF9QUk9UX1dSSVRFID0gMHgyCitjb25zdCBfX19OUl9lcG9sbF9wd2FpdCA9
IDI4MQorY29uc3QgX0FSUEhSRF9TSVQgPSA3NzYKK2NvbnN0IF9SVE1fTkVXUFJFRklYID0gNTIK
K2NvbnN0IF9fX1JMSU1JVF9NRU1MT0NLID0gOAorY29uc3QgX1NZU19sb29rdXBfZGNvb2tpZSA9
IF9fX05SX2xvb2t1cF9kY29va2llCitjb25zdCBfX19PUkRFUl9MSVRUTEVfRU5ESUFOX18gPSAx
MjM0Citjb25zdCBfU1lTX21rZGlyYXQgPSBfX19OUl9ta2RpcmF0Citjb25zdCBfVENQT0xFTl9X
SU5ET1cgPSAzCitjb25zdCBfRVRIX1BfVElQQyA9IDB4ODhDQQorY29uc3QgX19QT1NJWF9USFJF
QURfS0VZU19NQVggPSAxMjgKK2NvbnN0IF9BVF9FTVBUWV9QQVRIID0gMHgxMDAwCitjb25zdCBf
X19OUl9zY2hlZF95aWVsZCA9IDI0Citjb25zdCBfWERQX0ZMQUdTX01PREVTID0gKF9YRFBfRkxB
R1NfU0tCX01PREUgfCBfWERQX0ZMQUdTX0RSVl9NT0RFIHwgX1hEUF9GTEFHU19IV19NT0RFKQor
Y29uc3QgX0hBVkVfSU5PVElGWV9STV9XQVRDSCA9IDEKK2NvbnN0IF9fU0NfU1RSRUFNX01BWCA9
IDUKK2NvbnN0IF9fX0ZfR0VUU0lHID0gMTEKK2NvbnN0IF9FTUVESVVNVFlQRSA9IDEyNAorY29u
c3QgX1NUQV9DTEsgPSAweDgwMDAKK2NvbnN0IF9JUFRPU19NSU5DT1NUID0gX0lQVE9TX0xPV0NP
U1QKK2NvbnN0IF9fX0ZMVDY0X0RFTk9STV9NSU5fXyA9IDEuMQorY29uc3QgX1JMSU02NF9JTkZJ
TklUWSA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3QgX0ZGSV9VTklYNjQgPSAyCitjb25zdCBf
UlROTEdSUF9JUFY0X05FVENPTkYgPSAyNAorY29uc3QgX1JUQVhfRkVBVFVSRV9USU1FU1RBTVAg
PSAoMSA8PCAyKQorY29uc3QgX0lOVDMyX01BWCA9ICgyMTQ3NDgzNjQ3KQorY29uc3QgX0VUSEVS
VFlQRV9JUFY2ID0gMHg4NmRkCitjb25zdCBfVENQT1BUX1RTVEFNUF9IRFIgPSAoX1RDUE9QVF9O
T1A8PDI0fF9UQ1BPUFRfTk9QPDwxNnxfVENQT1BUX1RJTUVTVEFNUDw8OHxfVENQT0xFTl9USU1F
U1RBTVApCitjb25zdCBfSUZMQV9TVEFUU19MSU5LX1hTVEFUUyA9IDIKK2NvbnN0IF9PX1JET05M
WSA9IDAwCitjb25zdCBfX19OUl9nZXRyZXN1aWQgPSAxMTgKK2NvbnN0IF9QVFJBQ0VfRVZFTlRf
Q0xPTkUgPSAzCitjb25zdCBfQVJQSFJEX1BJTVJFRyA9IDc3OQorY29uc3QgX0lQVjZfTVVMVElD
QVNUX0hPUFMgPSAxOAorY29uc3QgX19fTlJfbGlua2F0ID0gMjY1Citjb25zdCBfRlNfTk9BVElN
RV9GTCA9IDB4MDAwMDAwODAKK2NvbnN0IF9fU0NfVUxPTkdfTUFYID0gMTE3Citjb25zdCBfSVBU
T1NfQ0xBU1NfREVGQVVMVCA9IF9JUFRPU19DTEFTU19DUzAKK2NvbnN0IF9TWVNfc2htZHQgPSBf
X19OUl9zaG1kdAorY29uc3QgX19fTlJfb3BlbiA9IDIKK2NvbnN0IF9USU1FX09LID0gMAorY29u
c3QgX0JQRl9UWEEgPSAweDgwCitjb25zdCBfX1NDX0NISUxEX01BWCA9IDEKK2NvbnN0IF9TWVNf
YWRkX2tleSA9IF9fX05SX2FkZF9rZXkKK2NvbnN0IF9TVERDX0hFQURFUlMgPSAxCitjb25zdCBf
TUFQX0FOT05ZTU9VUyA9IDB4MjAKK2NvbnN0IF9YODZfQ1I0X0RFX0JJVCA9IDMKK2NvbnN0IF9W
SU5UUiA9IDAKK2NvbnN0IF9NSU5TSUdTVEtTWiA9IDIwNDgKK2NvbnN0IF9JUFRPU19MT1dDT1NU
ID0gMHgwMgorY29uc3QgX01BRFZfTUVSR0VBQkxFID0gMTIKK2NvbnN0IF9JRkxBX1RVTl9QRVJT
SVNUID0gNgorY29uc3QgX0hBVkVfTkVUSU5FVF9JQ01QNl9IID0gMQorY29uc3QgX0lGTEFfQlJQ
T1JUX1NUQVRFID0gMQorY29uc3QgX0NQVV9TRVRTSVpFID0gX19fQ1BVX1NFVFNJWkUKK2NvbnN0
IF9JUFZFUlNJT04gPSA0Citjb25zdCBfU1lTX2V4aXRfZ3JvdXAgPSBfX19OUl9leGl0X2dyb3Vw
Citjb25zdCBfVElPQ0NCUksgPSAweDU0MjgKK2NvbnN0IF9fX0xQNjRfT0ZGNjRfTERGTEFHUyA9
ICItbTY0IgorY29uc3QgX1BBQ0tFVF9WTkVUX0hEUiA9IDE1Citjb25zdCBfX1NDX1RSQUNFX0VW
RU5UX05BTUVfTUFYID0gMjQyCitjb25zdCBfUFJfU1ZFX1NFVF9WTCA9IDUwCitjb25zdCBfU1lT
X2ZvcmsgPSBfX19OUl9mb3JrCitjb25zdCBfRVRIRVJUWVBFX1RSQUlMID0gMHgxMDAwCitjb25z
dCBfUlRGX1JFSkVDVCA9IDB4MDIwMAorY29uc3QgX0NMT05FX0ZTID0gMHgwMDAwMDIwMAorY29u
c3QgX1VJTlQzMl9XSURUSCA9IDMyCitjb25zdCBfU0lPQ0dJRlRYUUxFTiA9IDB4ODk0MgorY29u
c3QgX05EQV9WTEFOID0gNQorY29uc3QgX1BUUkFDRV9HRVRSRUdTID0gMTIKK2NvbnN0IF9fUE9T
SVhfRlNZTkMgPSAyMDA4MDkKK2NvbnN0IF9TWVNfZ2V0eGF0dHIgPSBfX19OUl9nZXR4YXR0cgor
Y29uc3QgX1NJT0NTSUZBRERSID0gMHg4OTE2Citjb25zdCBfU1lTX21wcm90ZWN0ID0gX19fTlJf
bXByb3RlY3QKK2NvbnN0IF9fUE9TSVhfTkFNRV9NQVggPSAxNAorY29uc3QgX19QT1NJWF9PUEVO
X01BWCA9IDIwCitjb25zdCBfVENTRVRBRiA9IDB4NTQwOAorY29uc3QgX1RDUF9NRDVTSUdfTUFY
S0VZTEVOID0gODAKK2NvbnN0IF9CUEZfRElWID0gMHgzMAorY29uc3QgX0lQVjZfQVVUSEhEUiA9
IDEwCitjb25zdCBfTVNHX1RSVU5DID0gMzIKK2NvbnN0IF9fUE9TSVgyX0NIQVJfVEVSTSA9IDIw
MDgwOQorY29uc3QgX1NJR0FCUlQgPSA2Citjb25zdCBfU1lTX3JlYWQgPSBfX19OUl9yZWFkCitj
b25zdCBfX19TSVpFT0ZfUFRIUkVBRF9SV0xPQ0tBVFRSX1QgPSA4Citjb25zdCBfSUZMQV9CUl9N
Q0FTVF9TTk9PUElORyA9IDIzCitjb25zdCBfTkVUTElOS19DT05ORUNURUQgPSAxCitjb25zdCBf
RlNfRVhURU5UX0ZMID0gMHgwMDA4MDAwMAorY29uc3QgX0lGTEFfQlJfVE9QT0xPR1lfQ0hBTkdF
X0RFVEVDVEVEID0gMTUKK2NvbnN0IF9TWVNfbGxpc3R4YXR0ciA9IF9fX05SX2xsaXN0eGF0dHIK
K2NvbnN0IF9FVEhfQUxFTiA9IDYKK2NvbnN0IF9JRkZfTk9fUEkgPSAweDEwMDAKK2NvbnN0IF9f
X05SX2dldGdpZCA9IDEwNAorY29uc3QgX1RDQV9LSU5EID0gMQorY29uc3QgX19fRkxUMzJYX01J
Tl9fID0gMS4xCitjb25zdCBfX19EQkxfSEFTX0RFTk9STV9fID0gMQorY29uc3QgX1RDUF9MQVNU
X0FDSyA9IDkKK2NvbnN0IF9SVF9UQUJMRV9ERUZBVUxUID0gMjUzCitjb25zdCBfTkxfTU1BUF9T
VEFUVVNfU0tJUCA9IDQKK2NvbnN0IF9IQVZFX0xPRzFQTCA9IDEKK2NvbnN0IF9GQUxMT0NfRkxf
Tk9fSElERV9TVEFMRSA9IDB4MDQKK2NvbnN0IF9SVF9TQ09QRV9IT1NUID0gMjU0Citjb25zdCBf
UlRNU0dfREVMUlVMRSA9IDB4MzIKK2NvbnN0IF9JUFBST1RPX01BWCA9IDI1NgorY29uc3QgX0lQ
T1BUX0NMQVNTX01BU0sgPSAweDYwCitjb25zdCBfQVRfRUFDQ0VTUyA9IDB4MjAwCitjb25zdCBf
U1lTX3BhdXNlID0gX19fTlJfcGF1c2UKK2NvbnN0IF9ORF9PUFRfUFJFRklYX0lORk9STUFUSU9O
ID0gMworY29uc3QgX1NJR1VSRyA9IDIzCitjb25zdCBfX1NDX1RJTUVSX01BWCA9IDM1Citjb25z
dCBfTkRfUkFfRkxBR19IT01FX0FHRU5UID0gMHgyMAorY29uc3QgX19TQ19TQ0hBUl9NSU4gPSAx
MTIKK2NvbnN0IF9UQ1BPTEVOX1RTVEFNUF9BUFBBID0gKF9UQ1BPTEVOX1RJTUVTVEFNUCsyKQor
Y29uc3QgX19fRkxUMzJfRElHX18gPSA2Citjb25zdCBfUEZfUEhPTkVUID0gMzUKK2NvbnN0IF9S
VFBST1RfUkVESVJFQ1QgPSAxCitjb25zdCBfSU5fREVMRVRFX1NFTEYgPSAweDAwMDAwNDAwCitj
b25zdCBfTklfSUROID0gMzIKK2NvbnN0IF9UVU5fUkVBRFFfU0laRSA9IDUwMAorY29uc3QgX1NU
QV9QTEwgPSAweDAwMDEKK2NvbnN0IF9JUF9BRERfU09VUkNFX01FTUJFUlNISVAgPSAzOQorY29u
c3QgX0FGX0JMVUVUT09USCA9IF9QRl9CTFVFVE9PVEgKK2NvbnN0IF9JRkxBX0JSUE9SVF9NRVNT
QUdFX0FHRV9USU1FUiA9IDIxCitjb25zdCBfRU5PVEJMSyA9IDE1Citjb25zdCBfRkZJX1NJWkVP
Rl9BUkcgPSA4Citjb25zdCBfX0JJVFNfQ1BVX1NFVF9IID0gMQorY29uc3QgX1NZU19tcV9nZXRz
ZXRhdHRyID0gX19fTlJfbXFfZ2V0c2V0YXR0cgorY29uc3QgX1NPQ0tfRENDUCA9IDYKK2NvbnN0
IF9fX1gzMl9TWVNDQUxMX0JJVCA9IDB4NDAwMDAwMDAKK2NvbnN0IF9IQVZFX0RMRkNOX0ggPSAx
Citjb25zdCBfRVRIRVJfSERSX0xFTiA9IF9FVEhfSExFTgorY29uc3QgX1NZU19tbG9jazIgPSBf
X19OUl9tbG9jazIKK2NvbnN0IF9TWVNfZ2V0cmFuZG9tID0gX19fTlJfZ2V0cmFuZG9tCitjb25z
dCBfX0dFVE9QVF9QT1NJWF9IID0gMQorY29uc3QgX19fU1REQ19JRUNfNTU5X0NPTVBMRVhfXyA9
IDEKK2NvbnN0IF9YODZfQ1I0X09TWFNBVkVfQklUID0gMTgKK2NvbnN0IF9FTk9QUk9UT09QVCA9
IDkyCitjb25zdCBfUlRBWF9GRUFUVVJFUyA9IDEyCitjb25zdCBfU0lPQ1NJRk1BUCA9IDB4ODk3
MQorY29uc3QgX19fTlJfZ2V0X3JvYnVzdF9saXN0ID0gMjc0Citjb25zdCBfSUZMQV9FVkVOVCA9
IDQ0Citjb25zdCBfRlBFX0ZMVE9WRiA9IDQKK2NvbnN0IF9IQVZFX1dBSVQ0ID0gMQorY29uc3Qg
X19TQ19BVlBIWVNfUEFHRVMgPSA4NgorY29uc3QgX0VBSV9JTlRSID0gLTEwNAorY29uc3QgX1BS
X01DRV9LSUxMX0RFRkFVTFQgPSAyCitjb25zdCBfU09fUEVFUkdST1VQUyA9IDU5Citjb25zdCBf
SUZMQV9CT05EX1BBQ0tFVFNfUEVSX1NMQVZFID0gMjAKK2NvbnN0IF9TSUdIVVAgPSAxCitjb25z
dCBfUFRSQUNFX09fVFJBQ0VWRk9SSyA9IDQKK2NvbnN0IF9FTk9TUEMgPSAyOAorY29uc3QgX1ZE
SVNDQVJEID0gMTMKK2NvbnN0IF9SVE1HUlBfTk9USUZZID0gMgorY29uc3QgX1NZU19vcGVuYXQg
PSBfX19OUl9vcGVuYXQKK2NvbnN0IF9fX09SREVSX1BEUF9FTkRJQU5fXyA9IDM0MTIKK2NvbnN0
IF9BVF9TVEFUWF9TWU5DX1RZUEUgPSAweDYwMDAKK2NvbnN0IF9fX05SX3Rna2lsbCA9IDIzNAor
Y29uc3QgX19fTlJfZ2V0X2tlcm5lbF9zeW1zID0gMTc3Citjb25zdCBfRURPVERPVCA9IDczCitj
b25zdCBfUEZfTkVUQkVVSSA9IDEzCitjb25zdCBfRVBPTExPTkVTSE9UID0gMTA3Mzc0MTgyNAor
Y29uc3QgX01BUF9BTk9OID0gX01BUF9BTk9OWU1PVVMKK2NvbnN0IF9fX09fRElSRUNUID0gMDQw
MDAwCitjb25zdCBfSVBUVExERUMgPSAxCitjb25zdCBfX1NDX05HUk9VUFNfTUFYID0gMworY29u
c3QgX0lQUE9SVF9FWEVDU0VSVkVSID0gNTEyCitjb25zdCBfX19OUl9vcGVuX2J5X2hhbmRsZV9h
dCA9IDMwNAorY29uc3QgX19DU19YQlM1X0xQNjRfT0ZGNjRfTElCUyA9IDExMTAKK2NvbnN0IF9T
T19LRUVQQUxJVkUgPSA5Citjb25zdCBfU1lTX3J0X3NpZ3JldHVybiA9IF9fX05SX3J0X3NpZ3Jl
dHVybgorY29uc3QgX0lDTVA2X1JSX1BDT1VTRV9SQUZMQUdTX0FVVE8gPSAweDEwCitjb25zdCBf
QUZfTkVUTElOSyA9IF9QRl9ORVRMSU5LCitjb25zdCBfTkRfT1BUX1BJX0ZMQUdfQVVUTyA9IDB4
NDAKK2NvbnN0IF9JUFY2X0FERFJGT1JNID0gMQorY29uc3QgX1RJTUVfV0FJVCA9IDQKK2NvbnN0
IF9JRkxBX0lQT0lCX1VOU1BFQyA9IDAKK2NvbnN0IF9FSE9TVERPV04gPSAxMTIKK2NvbnN0IF9T
WVNfZmFkdmlzZTY0ID0gX19fTlJfZmFkdmlzZTY0Citjb25zdCBfRVRIX1BfSUZFID0gMHhFRDNF
Citjb25zdCBfSVBWNl9SRUNWSE9QTElNSVQgPSA1MQorY29uc3QgX1RJT0NHU09GVENBUiA9IDB4
NTQxOQorY29uc3QgX1BSX0dFVF9FTkRJQU4gPSAxOQorY29uc3QgX1NZU191c3RhdCA9IF9fX05S
X3VzdGF0Citjb25zdCBfU1lTX2lvX3N1Ym1pdCA9IF9fX05SX2lvX3N1Ym1pdAorY29uc3QgX1NP
TUFYQ09OTiA9IDEyOAorY29uc3QgX0lQX01UVSA9IDE0Citjb25zdCBfX19GTFQzMlhfTUlOXzEw
X0VYUF9fID0gKC0zMDcpCitjb25zdCBfSUZMQV9HRU5FVkVfVU5TUEVDID0gMAorY29uc3QgX1NZ
U193cml0ZXYgPSBfX19OUl93cml0ZXYKK2NvbnN0IF9fX05SX2xnZXR4YXR0ciA9IDE5MgorY29u
c3QgX19fU0laRU9GX1BUSFJFQURfQVRUUl9UID0gNTYKK2NvbnN0IF9NTlRfRk9SQ0UgPSAxCitj
b25zdCBfX19GTFQxMjhfREVOT1JNX01JTl9fID0gMS4xCitjb25zdCBfX19rOF9fID0gMQorY29u
c3QgX1NZU191bnNoYXJlID0gX19fTlJfdW5zaGFyZQorY29uc3QgX01BRFZfUkVNT1ZFID0gOQor
Y29uc3QgX0VBRFYgPSA2OAorY29uc3QgX1NPTF9BTEcgPSAyNzkKK2NvbnN0IF9DTE9ORV9ORVdD
R1JPVVAgPSAweDAyMDAwMDAwCitjb25zdCBfX1NDX01FU1NBR0VfUEFTU0lORyA9IDIwCitjb25z
dCBfTVNfTUFORExPQ0sgPSA2NAorY29uc3QgX19VVFNOQU1FX1ZFUlNJT05fTEVOR1RIID0gX19V
VFNOQU1FX0xFTkdUSAorY29uc3QgX1JUTkxfRkFNSUxZX0lQNk1SID0gMTI5Citjb25zdCBfSUZM
QV9QSFlTX1BPUlRfSUQgPSAzNAorY29uc3QgX0ROX01VTFRJU0hPVCA9IDB4ODAwMDAwMDAKK2Nv
bnN0IF9CMTIwMCA9IDAwMDAwMTEKK2NvbnN0IF9FV09VTERCTE9DSyA9IF9FQUdBSU4KK2NvbnN0
IF9JRkxBX1ZGX1BPUlQgPSAxCitjb25zdCBfX19TSV9IQVZFX1NJR1NZUyA9IDEKK2NvbnN0IF9O
TE1fRl9NQVRDSCA9IDB4MjAwCitjb25zdCBfQVJQSFJEX0FYMjUgPSAzCitjb25zdCBfX1BPU0lY
X1BSSU9SSVRZX1NDSEVEVUxJTkcgPSAyMDA4MDkKK2NvbnN0IF9SVEZfTk9GT1JXQVJEID0gMHgx
MDAwCitjb25zdCBfRl9EVVBGRF9DTE9FWEVDID0gMTAzMAorY29uc3QgX0VDQU5DRUxFRCA9IDEy
NQorY29uc3QgX0lOUl9PUEVOX01BWCA9IDQwOTYKK2NvbnN0IF9CMzAwID0gMDAwMDAwNworY29u
c3QgX0lNQVhCRUwgPSAwMDIwMDAwCitjb25zdCBfUFJJZExFQVNUMzIgPSAiZCIKK2NvbnN0IF9S
VVNBR0VfQ0hJTERSRU4gPSAtMQorY29uc3QgX1g4Nl9DUjRfVk1YRV9CSVQgPSAxMworY29uc3Qg
X0ZfT0ZEX1NFVExLID0gMzcKK2NvbnN0IF9FTk9EQVRBID0gNjEKK2NvbnN0IF9TT0xfS0NNID0g
MjgxCitjb25zdCBfQUZfUFBQT1ggPSBfUEZfUFBQT1gKK2NvbnN0IF9IQVZFX1NZU19UWVBFU19I
ID0gMQorY29uc3QgX1NJT0NHSUZBRERSID0gMHg4OTE1Citjb25zdCBfTkRBX0RTVCA9IDEKK2Nv
bnN0IF9fX0dMSUJDX1VTRV9ERVBSRUNBVEVEX0dFVFMgPSAwCitjb25zdCBfVElPQ01fTEUgPSAw
eDAwMQorY29uc3QgX1NDTm9GQVNUOCA9ICJoaG8iCitjb25zdCBfQVJQSFJEX1NLSVAgPSA3NzEK
K2NvbnN0IF9fX0RFQzMyX1NVQk5PUk1BTF9NSU5fXyA9IDAuMDAwMDAxRS05NQorY29uc3QgX19f
cGllX18gPSAyCitjb25zdCBfTVNfU0xBVkUgPSA1MjQyODgKK2NvbnN0IF9STElNSVRfREFUQSA9
IDIKK2NvbnN0IF9fX0xJVFRMRV9FTkRJQU4gPSAxMjM0Citjb25zdCBfX1BPU0lYX1JFQUxUSU1F
X1NJR05BTFMgPSAyMDA4MDkKK2NvbnN0IF9TWVNfbXNnZ2V0ID0gX19fTlJfbXNnZ2V0Citjb25z
dCBfSEFWRV9BVEFOMkwgPSAxCitjb25zdCBfSUZMQV9WUkZfUE9SVF9UQUJMRSA9IDEKK2NvbnN0
IF9ORVRMSU5LX0xJU1RfTUVNQkVSU0hJUFMgPSA5Citjb25zdCBfX0ZDTlRMX0ggPSAxCitjb25z
dCBfX19OUl91dGltZXMgPSAyMzUKK2NvbnN0IF9SVE1fR0VUUk9VVEUgPSAyNgorY29uc3QgX1VJ
TlQ4X01BWCA9ICgyNTUpCitjb25zdCBfQVJQT1BfUlJFUVVFU1QgPSAzCitjb25zdCBfX19STElN
X05MSU1JVFMgPSAxNgorY29uc3QgX0lQVkxBTl9GX1ZFUEEgPSAweDAyCitjb25zdCBfSUZMQV9N
QUNWTEFOX01BQ0FERFJfREFUQSA9IDUKK2NvbnN0IF9fUE9TSVhfUFJJT1JJVElaRURfSU8gPSAy
MDA4MDkKK2NvbnN0IF9OT19EQVRBID0gNAorY29uc3QgX1JUUFJPVF9JU0lTID0gMTg3Citjb25z
dCBfSEFWRV9BU19YODZfNjRfVU5XSU5EX1NFQ1RJT05fVFlQRSA9IDEKK2NvbnN0IF9JUFY2XzIy
OTJSVEhEUiA9IDUKK2NvbnN0IF9TWVNfbWxvY2sgPSBfX19OUl9tbG9jaworY29uc3QgX19GRUFU
VVJFU19IID0gMQorY29uc3QgX1NZU19rZXhlY19sb2FkID0gX19fTlJfa2V4ZWNfbG9hZAorY29u
c3QgX0VQUk9UT1RZUEUgPSA5MQorY29uc3QgX05aRVJPID0gMjAKK2NvbnN0IF9TSU9DU0lGTkVU
TUFTSyA9IDB4ODkxYworY29uc3QgX19fSUZMQV9YRlJNX01BWCA9IDMKK2NvbnN0IF9JRkxBX01B
Q1NFQ19FTkNSWVBUID0gNworY29uc3QgX19fTlJfcGVyc29uYWxpdHkgPSAxMzUKK2NvbnN0IF9T
WVNfZ2V0X21lbXBvbGljeSA9IF9fX05SX2dldF9tZW1wb2xpY3kKK2NvbnN0IF9FSUxTRVEgPSA4
NAorY29uc3QgX1NZU19zZXRyZWdpZCA9IF9fX05SX3NldHJlZ2lkCitjb25zdCBfU09DS19TVFJF
QU0gPSAxCitjb25zdCBfUFJfR0VUX1NFQ0NPTVAgPSAyMQorY29uc3QgX0lGTEFfTUFDU0VDX1ND
SSA9IDEKK2NvbnN0IF9FVEhfSExFTiA9IDE0Citjb25zdCBfU0NNX0NSRURFTlRJQUxTID0gMgor
Y29uc3QgX19fVVNFX0xBUkdFRklMRTY0ID0gMQorY29uc3QgX1JUTV9HRVRSVUxFID0gMzQKK2Nv
bnN0IF9fTkVUSU5FVF9JTl9IID0gMQorY29uc3QgX19TQ19MRVZFTDFfRENBQ0hFX0xJTkVTSVpF
ID0gMTkwCitjb25zdCBfRURRVU9UID0gMTIyCitjb25zdCBfSUZMQV9WWExBTl9UT1MgPSA2Citj
b25zdCBfX19TX0lSRUFEID0gMDQwMAorY29uc3QgX0ZfR0VURkQgPSAxCitjb25zdCBfQVJQSFJE
X0REQ01QID0gNTE3Citjb25zdCBfX19OUl91c2VyZmF1bHRmZCA9IDMyMworY29uc3QgX0ZfR0VU
RkwgPSAzCitjb25zdCBfX190aW1ldmFsX2RlZmluZWQgPSAxCitjb25zdCBfSVBPUFRfQ09QWSA9
IDB4ODAKK2NvbnN0IF9JUFY2X0NIRUNLU1VNID0gNworY29uc3QgX1NUQVRYX0FUVFJfQVBQRU5E
ID0gMHgwMDIwCitjb25zdCBfRVRIX1BfUFBQX1NFUyA9IDB4ODg2NAorY29uc3QgX19TQ19MRVZF
TDFfRENBQ0hFX1NJWkUgPSAxODgKK2NvbnN0IF9UVU5HRVRTTkRCVUZfdmFsID0gMjE0Nzc2NzUw
NworY29uc3QgX0ZTX1hGTEFHX1BSRUFMTE9DID0gMHgwMDAwMDAwMgorY29uc3QgX1BSX0dFVF9T
UEVDVUxBVElPTl9DVFJMID0gNTIKK2NvbnN0IF9DQkFVREVYID0gMDAxMDAwMAorY29uc3QgX1NL
Rl9BRF9QS1RUWVBFID0gNAorY29uc3QgX0xJTlVYX1JFQk9PVF9NQUdJQzEgPSAweGZlZTFkZWFk
Citjb25zdCBfTElOVVhfUkVCT09UX01BR0lDMiA9IDY3MjI3NDc5MworY29uc3QgX1BGX0JSSURH
RSA9IDcKK2NvbnN0IF9NU19JX1ZFUlNJT04gPSA4Mzg4NjA4Citjb25zdCBfTUFEVl9SQU5ET00g
PSAxCitjb25zdCBfX1VUU05BTUVfTk9ERU5BTUVfTEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSAor
Y29uc3QgX1NDTm9MRUFTVDggPSAiaGhvIgorY29uc3QgX1g4Nl9DUjNfUENJRF9CSVRTID0gMTIK
K2NvbnN0IF9BRl9TTUMgPSBfUEZfU01DCitjb25zdCBfQVJQSFJEX0lFRUU4MDIgPSA2Citjb25z
dCBfQURKX09GRlNFVCA9IDB4MDAwMQorY29uc3QgX0VMT09QID0gNDAKK2NvbnN0IF9fX0lGTEFf
R1RQX01BWCA9IDUKK2NvbnN0IF9SVFBST1RfQkdQID0gMTg2Citjb25zdCBfTElUVExFX0VORElB
TiA9IF9fX0xJVFRMRV9FTkRJQU4KK2NvbnN0IF9fX0JZVEVfT1JERVIgPSBfX19MSVRUTEVfRU5E
SUFOCitjb25zdCBfVENQSV9PUFRfVElNRVNUQU1QUyA9IDEKK2NvbnN0IF9fX1RDQV9NQVggPSAx
NQorY29uc3QgX1JUQV9NRVRSSUNTID0gOAorY29uc3QgX1NPTF9QUFBPTDJUUCA9IDI3MworY29u
c3QgX19TQ19JT1ZfTUFYID0gNjAKK2NvbnN0IF9fTEZTNjRfTEFSR0VGSUxFID0gMQorY29uc3Qg
X01BWF9WTEFOX0xJU1RfTEVOID0gMQorY29uc3QgX1NZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVS
ID0gNAorY29uc3QgX19QT1NJWF9NUV9QUklPX01BWCA9IDMyCitjb25zdCBfX1BPU0lYX1ZFUlNJ
T04gPSAyMDA4MDkKK2NvbnN0IF9fX05SX3Bwb2xsID0gMjcxCitjb25zdCBfRl9PV05FUl9QSUQg
PSAxCitjb25zdCBfVElPQ1BLVF9JT0NUTCA9IDY0Citjb25zdCBfX19VU0VfUE9TSVgxOTkzMDkg
PSAxCitjb25zdCBfX19JTlRfRkFTVDhfTUFYX18gPSAweDdmCitjb25zdCBfX1NDX0JDX1NDQUxF
X01BWCA9IDM4Citjb25zdCBfU1lTX2Nocm9vdCA9IF9fX05SX2Nocm9vdAorY29uc3QgX0VQUk9U
T05PU1VQUE9SVCA9IDkzCitjb25zdCBfU1RBVFhfR0lEID0gMHgwMDEwCitjb25zdCBfSUZMQV9C
Ul9HUk9VUF9GV0RfTUFTSyA9IDkKK2NvbnN0IF9JUFBPUlRfUkVTRVJWRUQgPSAxMDI0Citjb25z
dCBfSU5fT05MWURJUiA9IDB4MDEwMDAwMDAKK2NvbnN0IF9TVEFfRkxMID0gMHgwMDA4Citjb25z
dCBfSUZMQV9NQUNTRUNfRVMgPSAxMAorY29uc3QgX19fV0lOVF9XSURUSF9fID0gMzIKK2NvbnN0
IF9fUE9TSVhfUElQRV9CVUYgPSA1MTIKK2NvbnN0IF9JUE9QVF9TRUNVUl9TRUNSRVQgPSAweGQ3
ODgKK2NvbnN0IF9fX1BJQ19fID0gMgorY29uc3QgX0lTVFJJUCA9IDAwMDAwNDAKK2NvbnN0IF9f
X1JUTV9NQVggPSAxMDMKK2NvbnN0IF9JUE9QVF9TRUNVUl9DT05GSUQgPSAweGYxMzUKK2NvbnN0
IF9FU1BJUEUgPSAyOQorY29uc3QgX0FGX1NOQSA9IF9QRl9TTkEKK2NvbnN0IF9SVEFfUFJPVE9J
TkZPID0gMTAKK2NvbnN0IF9fX05SX2JwZiA9IDMyMQorY29uc3QgX1NZU19hZnNfc3lzY2FsbCA9
IF9fX05SX2Fmc19zeXNjYWxsCitjb25zdCBfVUlOVF9GQVNUOF9NQVggPSAoMjU1KQorY29uc3Qg
X1NUQV9OQU5PID0gMHgyMDAwCitjb25zdCBfVVNIUlRfV0lEVEggPSAxNgorY29uc3QgX09fTEFS
R0VGSUxFID0gX19fT19MQVJHRUZJTEUKK2NvbnN0IF9fX05SX3NjaGVkX3NldGFmZmluaXR5ID0g
MjAzCitjb25zdCBfU09MX0xMQyA9IDI2OAorY29uc3QgX19fSUZMQV9WWExBTl9NQVggPSAyOQor
Y29uc3QgX0VJU0NPTk4gPSAxMDYKK2NvbnN0IF9USU9DUEtUX1NUQVJUID0gOAorY29uc3QgX0lG
TEFfR1NPX01BWF9TRUdTID0gNDAKK2NvbnN0IF9TT19MSU5HRVIgPSAxMworY29uc3QgX19fVUlO
VF9MRUFTVDE2X01BWF9fID0gMHhmZmZmCitjb25zdCBfT0xDVUMgPSAwMDAwMDAyCitjb25zdCBf
UFJfR0VUX1RJTUVSU0xBQ0sgPSAzMAorY29uc3QgX19fTlJfbHN0YXQgPSA2Citjb25zdCBfX1BP
U0lYX1NZTUxPT1BfTUFYID0gOAorY29uc3QgX1JUTkxHUlBfTk9USUZZID0gMgorY29uc3QgX19f
REJMX0RJR19fID0gMTUKK2NvbnN0IF9fQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUyA9IDEx
MTEKK2NvbnN0IF9SVE5fVU5SRUFDSEFCTEUgPSA3Citjb25zdCBfX0NTX1BPU0lYX1Y2X0xQNjRf
T0ZGNjRfTERGTEFHUyA9IDExMjUKK2NvbnN0IF9fX0RFQzY0X01BWF9fID0gOS45OTk5OTk5OTk5
OTk5OTlFMzg0Citjb25zdCBfSUZMQV9IU1JfU0xBVkUxID0gMQorY29uc3QgX19QT1NJWF9USFJF
QURfQVRUUl9TVEFDS1NJWkUgPSAyMDA4MDkKK2NvbnN0IF9IQVZFX05FVElORVRfSVBfSCA9IDEK
K2NvbnN0IF9JRkhXQUREUkxFTiA9IDYKK2NvbnN0IF9UQ1NFVFNGID0gMHg1NDA0Citjb25zdCBf
X0JJVFNfU0lHRVZFTlRfQ09OU1RTX0ggPSAxCitjb25zdCBfWERQX0FUVEFDSEVEX01VTFRJID0g
NAorY29uc3QgX05MTVNHRVJSX0FUVFJfVU5VU0VEID0gMAorY29uc3QgX01GRF9IVUdFVExCID0g
NAorY29uc3QgX19fV0NIQVJfTUFYID0gX19fV0NIQVJfTUFYX18KK2NvbnN0IF9fU0NfU1NJWkVf
TUFYID0gMTEwCitjb25zdCBfSVBfVU5JQ0FTVF9JRiA9IDUwCitjb25zdCBfU09fUkNWQlVGRk9S
Q0UgPSAzMworY29uc3QgX1NZU19uZnNzZXJ2Y3RsID0gX19fTlJfbmZzc2VydmN0bAorY29uc3Qg
X0JVU19BRFJBTE4gPSAxCitjb25zdCBfSVBWNl9QS1RJTkZPID0gNTAKK2NvbnN0IF9TWVNfbHJl
bW92ZXhhdHRyID0gX19fTlJfbHJlbW92ZXhhdHRyCitjb25zdCBfVENTRVRTVyA9IDB4NTQwMwor
Y29uc3QgX0VBSV9TT0NLVFlQRSA9IC03Citjb25zdCBfX1NDX1Y3X0lMUDMyX09GRjMyID0gMjM3
Citjb25zdCBfU1lTX2lvX2NhbmNlbCA9IF9fX05SX2lvX2NhbmNlbAorY29uc3QgX0lQUFJPVE9f
SVBJUCA9IDQKK2NvbnN0IF9saW51eCA9IDEKK2NvbnN0IF9XTk9XQUlUID0gMHgwMTAwMDAwMAor
Y29uc3QgX19fTE9DS19BVE9NSUMgPSAxNgorY29uc3QgX0lQVjZfUkVDVlJUSERSID0gNTYKK2Nv
bnN0IF9UQ1BfQ0FfT3BlbiA9IDAKK2NvbnN0IF9fU0NfTEVWRUwzX0NBQ0hFX0xJTkVTSVpFID0g
MTk2Citjb25zdCBfTElOVVhfUkVCT09UX0NNRF9IQUxUID0gMHhDREVGMDEyMworY29uc3QgX0lD
TVA2X0ZJTFRFUiA9IDEKK2NvbnN0IF9IQVZFX05FVF9ST1VURV9IID0gMQorY29uc3QgX1NPX0JV
U1lfUE9MTCA9IDQ2Citjb25zdCBfRU5GSUxFID0gMjMKK2NvbnN0IF9fU0NfVEhSRUFEUyA9IDY3
Citjb25zdCBfX0lPQ19TSVpFTUFTSyA9ICgoMSA8PCBfX0lPQ19TSVpFQklUUyktMSkKK2NvbnN0
IF9JUF9JUFNFQ19QT0xJQ1kgPSAxNgorY29uc3QgX1JUTVNHX0NPTlRST0wgPSAweDQwCitjb25z
dCBfU09fTUFSSyA9IDM2Citjb25zdCBfTUFQX1BSSVZBVEUgPSAweDAyCitjb25zdCBfX1BDX1JF
Q19YRkVSX0FMSUdOID0gMTcKK2NvbnN0IF9fQklUU19UWVBFU0laRVNfSCA9IDEKK2NvbnN0IF9G
RklfVFlQRV9MT05HRE9VQkxFID0gNAorY29uc3QgX19fTlJfYWRkX2tleSA9IDI0OAorY29uc3Qg
X19fU0lHX0FUT01JQ19NQVhfXyA9IDB4N2ZmZmZmZmYKK2NvbnN0IF9QX1BHSUQgPSAyCitjb25z
dCBfRUFJX1NFUlZJQ0UgPSAtOAorY29uc3QgX1JUQV9GTE9XID0gMTEKK2NvbnN0IF9JTl9DUkVB
VEUgPSAweDAwMDAwMTAwCitjb25zdCBfX1BPU0lYX1RSQUNFX0xPRyA9IC0xCitjb25zdCBfU0NO
ZExFQVNUMTYgPSAiaGQiCitjb25zdCBfUlROX0JST0FEQ0FTVCA9IDMKK2NvbnN0IF9SVEVYVF9G
SUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgPSAoMSA8PCAyKQorY29uc3QgX0lOVDE2X01JTiA9ICgt
MzI3NjctMSkKK2NvbnN0IF9JRkxBX1hGUk1fTElOSyA9IDEKK2NvbnN0IF9OTE1TR0VSUl9BVFRS
X01TRyA9IDEKK2NvbnN0IF9BRl9ST1NFID0gX1BGX1JPU0UKK2NvbnN0IF9TQ05kMTYgPSAiaGQi
Citjb25zdCBfX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSA9IDYyCitjb25zdCBfSEFWRV9NS05PREFU
ID0gMQorY29uc3QgX0lGTEFfTElOS19ORVROU0lEID0gMzcKK2NvbnN0IF9TWVNfc29ja2V0ID0g
X19fTlJfc29ja2V0Citjb25zdCBfU0lPQ1JUTVNHID0gMHg4OTBECitjb25zdCBfX0VSUk5PX0gg
PSAxCitjb25zdCBfUEZfQVBQTEVUQUxLID0gNQorY29uc3QgX19fU1NFX18gPSAxCitjb25zdCBf
WERQX0FUVEFDSEVEX0hXID0gMworY29uc3QgX1RJT0NTRVJHRVRNVUxUSSA9IDB4NTQ1QQorY29u
c3QgX1NFR1ZfQk5ERVJSID0gMworY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9VTlNQRUMgPSAwCitj
b25zdCBfSUZMQV9CT05EX1JFU0VORF9JR01QID0gMTUKK2NvbnN0IF9SVE1fREVMUURJU0MgPSAz
NworY29uc3QgX0lGTEFfQk9ORF9QUklNQVJZX1JFU0VMRUNUID0gMTIKK2NvbnN0IF9SRU5BTUVf
Tk9SRVBMQUNFID0gKDEgPDwgMCkKK2NvbnN0IF9UQ1BfQ0xPU0VfV0FJVCA9IDgKK2NvbnN0IF9f
X05SX2JyayA9IDEyCitjb25zdCBfRU5BTUVUT09MT05HID0gMzYKK2NvbnN0IF9fU0NfVFRZX05B
TUVfTUFYID0gNzIKK2NvbnN0IF9CNTAgPSAwMDAwMDAxCitjb25zdCBfU1lTX2ZnZXR4YXR0ciA9
IF9fX05SX2ZnZXR4YXR0cgorY29uc3QgX0lGTEFfSU5FVDZfRkxBR1MgPSAxCitjb25zdCBfX19O
Ul9tcV90aW1lZHNlbmQgPSAyNDIKK2NvbnN0IF9fU1RSSU5HX0ggPSAxCitjb25zdCBfTkRUUEFf
UEFEID0gMTgKK2NvbnN0IF9fX05SX3NldF90aWRfYWRkcmVzcyA9IDIxOAorY29uc3QgX1NURElO
X0ZJTEVOTyA9IDAKK2NvbnN0IF9fX05SX3RpbWVyZmRfY3JlYXRlID0gMjgzCitjb25zdCBfX19J
RkxBX0lQT0lCX01BWCA9IDQKK2NvbnN0IF9fX3NpZ3NldF90X2RlZmluZWQgPSAxCitjb25zdCBf
UFJfRlBfRVhDX1JFUyA9IDB4MDgwMDAwCitjb25zdCBfU1lTX21lbWZkX2NyZWF0ZSA9IF9fX05S
X21lbWZkX2NyZWF0ZQorY29uc3QgX19DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUyA9IDEx
MzAKK2NvbnN0IF9JQ01QNl9GSUxURVJfUEFTUyA9IDIKK2NvbnN0IF9TQV9SRVNUQVJUID0gMHgx
MDAwMDAwMAorY29uc3QgX1RJT0NHTENLVFJNSU9TID0gMHg1NDU2Citjb25zdCBfX1NDX1BSSU9S
SVRJWkVEX0lPID0gMTMKK2NvbnN0IF9QVFJBQ0VfU0VDQ09NUF9HRVRfRklMVEVSID0gMTY5MDgK
K2NvbnN0IF9DTE9ORV9ORVdJUEMgPSAweDA4MDAwMDAwCitjb25zdCBfVVNFX0xJQkZGSSA9IDEK
K2NvbnN0IF9TQV9PTkVTSE9UID0gX1NBX1JFU0VUSEFORAorY29uc3QgX19fTlJfZ2V0cHBpZCA9
IDExMAorY29uc3QgX0VOWElPID0gNgorY29uc3QgX19fTlJfZXBvbGxfd2FpdCA9IDIzMgorY29u
c3QgX19TQ19YT1BFTl9TSE0gPSA5NAorY29uc3QgX0lGTEFfVkZfVkxBTl9MSVNUID0gMTIKK2Nv
bnN0IF9DSEFSX01BWCA9IF9TQ0hBUl9NQVgKK2NvbnN0IF9JRkxBX05FVF9OU19GRCA9IDI4Citj
b25zdCBfX19QUkFHTUFfUkVERUZJTkVfRVhUTkFNRSA9IDEKK2NvbnN0IF9fU0NfUlRTSUdfTUFY
ID0gMzEKK2NvbnN0IF9TSUdXSU5DSCA9IDI4Citjb25zdCBfTUFEVl9GUkVFID0gOAorY29uc3Qg
X0lGTEFfUEhZU19TV0lUQ0hfSUQgPSAzNgorY29uc3QgX1NZU19zeW1saW5rYXQgPSBfX19OUl9z
eW1saW5rYXQKK2NvbnN0IF9JRkFfRl9URU5UQVRJVkUgPSAweDQwCitjb25zdCBfSVBWNl9SRUNW
VENMQVNTID0gNjYKK2NvbnN0IF9fX0ZMVDMyWF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBf
UE9SVF9WRFBfUkVTUE9OU0VfT1VUX09GX1NZTkMgPSA2Citjb25zdCBfUEZfTkVUUk9NID0gNgor
Y29uc3QgX1BSX1NFVF9NTV9FTkRfQ09ERSA9IDIKK2NvbnN0IF9TVEFfUFBTVElNRSA9IDB4MDAw
NAorY29uc3QgX0FSUERfTE9PS1VQID0gMHgwMgorY29uc3QgX0ZfU0VUT1dOX0VYID0gX19fRl9T
RVRPV05fRVgKK2NvbnN0IF9CQ19TQ0FMRV9NQVggPSBfX1BPU0lYMl9CQ19TQ0FMRV9NQVgKK2Nv
bnN0IF9TSU9DU0lGU0xBVkUgPSAweDg5MzAKK2NvbnN0IF9FTk9TVFIgPSA2MAorY29uc3QgX0ZT
X1NZTkNfRkwgPSAweDAwMDAwMDA4Citjb25zdCBfX19OUl9zY2hlZF9zZXRwYXJhbSA9IDE0Mgor
Y29uc3QgX19TQ19USFJFQURfVEhSRUFEU19NQVggPSA3NgorY29uc3QgX0lGTEFfVFVOX1BJID0g
NAorY29uc3QgX1NLRl9BRF9WTEFOX1RQSUQgPSA2MAorY29uc3QgX0lGTEFfSFNSX1NMQVZFMiA9
IDIKK2NvbnN0IF9QQUNLRVRfRkFOT1VUID0gMTgKK2NvbnN0IF9TQV9OT0RFRkVSID0gMHg0MDAw
MDAwMAorY29uc3QgX05MTVNHX01JTl9UWVBFID0gMHgxMAorY29uc3QgX1RJT0NNX1JJID0gX1RJ
T0NNX1JORworY29uc3QgX0lQVE9TX0VDTl9FQ1QwID0gMHgwMgorY29uc3QgX1NZU19mY250bCA9
IF9fX05SX2ZjbnRsCitjb25zdCBfU0lPQ1NJRk1FTSA9IDB4ODkyMAorY29uc3QgX0lGTEFfSVBW
TEFOX1VOU1BFQyA9IDAKK2NvbnN0IF9TWVNfZ2V0ZXVpZCA9IF9fX05SX2dldGV1aWQKK2NvbnN0
IF9SVE5fTE9DQUwgPSAyCitjb25zdCBfVFVOU0VUT0ZGTE9BRF92YWwgPSAxMDc0MDI1NjgwCitj
b25zdCBfTkxNU0dFUlJfQVRUUl9NQVggPSAzCitjb25zdCBfSUZMQV9WWExBTl9HUk9VUDYgPSAx
NgorY29uc3QgX0VUSF9NSU5fTVRVID0gNjgKK2NvbnN0IF9TQ05vTEVBU1QxNiA9ICJobyIKK2Nv
bnN0IF9JRkZfTkFQSSA9IDB4MDAxMAorY29uc3QgX0ZGSV9UWVBFX1VJTlQ2NCA9IDExCitjb25z
dCBfUEZfQ0FJRiA9IDM3Citjb25zdCBfQ0xPTkVfU0VUVExTID0gMHgwMDA4MDAwMAorY29uc3Qg
X19fREVDNjRfU1VCTk9STUFMX01JTl9fID0gMC4wMDAwMDAwMDAwMDAwMDFFLTM4MworY29uc3Qg
X19fT19OT0ZPTExPVyA9IDA0MDAwMDAKK2NvbnN0IF9fQklUU19TSUdOVU1fSCA9IDEKK2NvbnN0
IF9ORVRMSU5LX0RST1BfTUVNQkVSU0hJUCA9IDIKK2NvbnN0IF9fX05SX2lub3RpZnlfaW5pdCA9
IDI1MworY29uc3QgX1NUQVRYX0FUVFJfTk9EVU1QID0gMHgwMDQwCitjb25zdCBfX19OUl91dGlt
ZW5zYXQgPSAyODAKK2NvbnN0IF9fX05SX3RpbWVyZmRfc2V0dGltZSA9IDI4NgorY29uc3QgX0lG
TEFfSU5FVF9VTlNQRUMgPSAwCitjb25zdCBfQUZfTkVUQkVVSSA9IF9QRl9ORVRCRVVJCitjb25z
dCBfUlRfVEFCTEVfTUFJTiA9IDI1NAorY29uc3QgX1NLRl9BRF9PRkYgPSAoLTB4MTAwMCkKK2Nv
bnN0IF9fX0RFQzMyX01BTlRfRElHX18gPSA3Citjb25zdCBfQk1BUF9JT0NUTCA9IDEKK2NvbnN0
IF9SVE1fTkVXVEZJTFRFUiA9IDQ0Citjb25zdCBfU0FfTk9NQVNLID0gX1NBX05PREVGRVIKK2Nv
bnN0IF9NQVBfRVhFQ1VUQUJMRSA9IDB4MDEwMDAKK2NvbnN0IF9TVEFfVU5TWU5DID0gMHgwMDQw
Citjb25zdCBfRU5PVERJUiA9IDIwCitjb25zdCBfRUlOVkFMID0gMjIKK2NvbnN0IF9UVU5HRVRG
SUxURVJfdmFsID0gMjE0ODU1Mzk0NworY29uc3QgX19fTlJfc2NoZWRfZ2V0YXR0ciA9IDMxNQor
Y29uc3QgX1RVTlNFVERFQlVHX3ZhbCA9IDEwNzQwMjU2NzMKK2NvbnN0IF9TQ054MTYgPSAiaHgi
Citjb25zdCBfSVBfRlJFRUJJTkQgPSAxNQorY29uc3QgX0lOX0NMQVNTQV9NQVggPSAxMjgKK2Nv
bnN0IF9CNzUgPSAwMDAwMDAyCitjb25zdCBfRVBPTExfQ0xPRVhFQyA9IDUyNDI4OAorY29uc3Qg
X05FVExJTktfR0VORVJJQyA9IDE2Citjb25zdCBfUFRSQUNFX1BFRUtVU1IgPSAzCitjb25zdCBf
UEFDS0VUX09USEVSSE9TVCA9IDMKK2NvbnN0IF9fX0ZMVDY0X0RJR19fID0gMTUKK2NvbnN0IF9B
UlBIUkRfSUVFRTgwMl9UUiA9IDgwMAorY29uc3QgX0lGTEFfQlJQT1JUX0xFQVJOSU5HID0gOAor
Y29uc3QgX1RDSU9GRiA9IDIKK2NvbnN0IF9SVF9UQUJMRV9VTlNQRUMgPSAwCitjb25zdCBfTkRU
UEFfREVMQVlfUFJPQkVfVElNRSA9IDcKK2NvbnN0IF9fU0NfQVNZTkNIUk9OT1VTX0lPID0gMTIK
K2NvbnN0IF9ORF9ST1VURVJfQURWRVJUID0gMTM0Citjb25zdCBfUEFDS0VUX0RST1BfTUVNQkVS
U0hJUCA9IDIKK2NvbnN0IF9JTl9DTE9TRV9XUklURSA9IDB4MDAwMDAwMDgKK2NvbnN0IF9ORVRM
SU5LX0NPTk5FQ1RPUiA9IDExCitjb25zdCBfVElPQ01fU1IgPSAweDAxMAorY29uc3QgX0ZfR0VU
TEsgPSBfRl9HRVRMSzY0Citjb25zdCBfVElPQ01fU1QgPSAweDAwOAorY29uc3QgX0VLRVlFWFBJ
UkVEID0gMTI3Citjb25zdCBfU0lPQ0FUTUFSSyA9IDB4ODkwNQorY29uc3QgX19TQ19MRVZFTDJf
Q0FDSEVfU0laRSA9IDE5MQorY29uc3QgX1VJTlRfTEVBU1Q4X1dJRFRIID0gOAorY29uc3QgX1NJ
T0NHSUZCUkRBRERSID0gMHg4OTE5Citjb25zdCBfUlRNX0dFVEFDVElPTiA9IDUwCitjb25zdCBf
U09MX0FUTSA9IDI2NAorY29uc3QgX19TQ19UWk5BTUVfTUFYID0gNgorY29uc3QgX0ZfU0VUTEtX
ID0gX0ZfU0VUTEtXNjQKK2NvbnN0IF9fX1dDSEFSX01JTl9fID0gKC1fX19XQ0hBUl9NQVhfXyAt
IDEpCitjb25zdCBfX1NDX1hCUzVfTFBCSUdfT0ZGQklHID0gMTI4Citjb25zdCBfUE9SVF9QUk9G
SUxFX1JFU1BPTlNFX0JBRFNUQVRFID0gMjU5Citjb25zdCBfU0VFS19IT0xFID0gNAorY29uc3Qg
X0lQUE9SVF9TTVRQID0gMjUKK2NvbnN0IF9USU9DQ09OUyA9IDB4NTQxRAorY29uc3QgX0lGX05B
TUVTSVpFID0gMTYKK2NvbnN0IF9FQkFERSA9IDUyCitjb25zdCBfRUJBREYgPSA5Citjb25zdCBf
X19OUl9jbG9ja19hZGp0aW1lID0gMzA1Citjb25zdCBfU1lTX2ZzdGF0ZnMgPSBfX19OUl9mc3Rh
dGZzCitjb25zdCBfRUNIT0tFID0gMDAwNDAwMAorY29uc3QgX0hBVkVfU1lTX1VUU05BTUVfSCA9
IDEKK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9OT05FID0gMQorY29uc3QgX0IzNTAwMDAwID0gMDAx
MDAxNgorY29uc3QgX19fTlJfc2VuZGZpbGUgPSA0MAorY29uc3QgX19fTlJfZmNob3duYXQgPSAy
NjAKK2NvbnN0IF9FQkFEUiA9IDUzCitjb25zdCBfUkVHX1JTUCA9IDE1Citjb25zdCBfU0lHQ0hM
RCA9IDE3Citjb25zdCBfX19OUl9mb3JrID0gNTcKK2NvbnN0IF9BRl9GSUxFID0gX1BGX0ZJTEUK
K2NvbnN0IF9DTE9DS19SRUFMVElNRV9BTEFSTSA9IDgKK2NvbnN0IF9fU0NfVEhSRUFEX1NUQUNL
X01JTiA9IDc1Citjb25zdCBfSUZMQV9WWExBTl9QT1JUID0gMTUKK2NvbnN0IF9JRkxBX01BQ1NF
Q19WQUxJREFUSU9OID0gMTMKK2NvbnN0IF9JRkxBX0JPTkRfQVJQX0FMTF9UQVJHRVRTID0gMTAK
K2NvbnN0IF9fWE9QRU5fVU5JWCA9IDEKK2NvbnN0IF9FSE9TVFVOUkVBQ0ggPSAxMTMKK2NvbnN0
IF9STElNX1NBVkVEX01BWCA9IF9STElNX0lORklOSVRZCitjb25zdCBfU19CTEtTSVpFID0gNTEy
Citjb25zdCBfX191bml4ID0gMQorY29uc3QgX19fTlJfZmNobW9kID0gOTEKK2NvbnN0IF9TQ05v
TEVBU1QzMiA9ICJvIgorY29uc3QgX0VMM1JTVCA9IDQ3Citjb25zdCBfRkZJX0ZBU1RDQUxMID0g
NAorY29uc3QgX0lGTEFfVkZfU1RBVFNfVFhfQllURVMgPSAzCitjb25zdCBfVENTRVRYRiA9IDB4
NTQzNAorY29uc3QgX0lGTEFfUEhZU19QT1JUX05BTUUgPSAzOAorY29uc3QgX0lOVF9GQVNUOF9X
SURUSCA9IDgKK2NvbnN0IF9DUlRTQ1RTID0gMDIwMDAwMDAwMDAwCitjb25zdCBfX19JRkxBX01B
Q1NFQ19NQVggPSAxNQorY29uc3QgX0lGTEFfTkVUX05TX1BJRCA9IDE5Citjb25zdCBfU0lPQ1NJ
RkhXQUREUiA9IDB4ODkyNAorY29uc3QgX19fU0lfQVNZTkNJT19BRlRFUl9TSUdJTyA9IDEKK2Nv
bnN0IF9USU9DVkhBTkdVUCA9IDB4NTQzNworY29uc3QgX0FURl9ORVRNQVNLID0gMHgyMAorY29u
c3QgX1RDU0VUWFcgPSAweDU0MzUKK2NvbnN0IF9TT0xfTkZDID0gMjgwCitjb25zdCBfX19TSVpF
T0ZfSU5UMTI4X18gPSAxNgorY29uc3QgX19fU1REQ19VVEZfMTZfXyA9IDEKK2NvbnN0IF9USU9D
UEtUX0RPU1RPUCA9IDMyCitjb25zdCBfRFRfTE5LID0gMTAKK2NvbnN0IF9fX0ZMVDMyX01JTl8x
MF9FWFBfXyA9ICgtMzcpCitjb25zdCBfRU5PTENLID0gMzcKK2NvbnN0IF9TWVNfc2NoZWRfcnJf
Z2V0X2ludGVydmFsID0gX19fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCitjb25zdCBfQUZfUlhS
UEMgPSBfUEZfUlhSUEMKK2NvbnN0IF9QUl9HRVRfVU5BTElHTiA9IDUKK2NvbnN0IF9JTl9DTEFT
U0JfSE9TVCA9ICgweGZmZmZmZmZmICYgXl9JTl9DTEFTU0JfTkVUKQorY29uc3QgX1RDQV9GTEFH
X0xBUkdFX0RVTVBfT04gPSAoMSA8PCAwKQorY29uc3QgX19fTlJfbWtkaXIgPSA4MworY29uc3Qg
X19TQ19USFJFQURfU0FGRV9GVU5DVElPTlMgPSA2OAorY29uc3QgX05EVFBBX01DQVNUX1JFUFJP
QkVTID0gMTcKK2NvbnN0IF9JUFY2X1JYRFNUT1BUUyA9IF9JUFY2X0RTVE9QVFMKK2NvbnN0IF9f
X05SX2ZhY2Nlc3NhdCA9IDI2OQorY29uc3QgX0VUSF9QX01WUlAgPSAweDg4RjUKK2NvbnN0IF9f
U0NfWE9QRU5fTEVHQUNZID0gMTI5Citjb25zdCBfUEFHRV9TSVpFID0gKDEgPDwgX1BBR0VfU0hJ
RlQpCitjb25zdCBfUlRGX05PTkVYVEhPUCA9IDB4MDAyMDAwMDAKK2NvbnN0IF9fQklUU19XQ0hB
Ul9IID0gMQorY29uc3QgX1BSX1NFVF9QREVBVEhTSUcgPSAxCitjb25zdCBfU1lTX2lvcGVybSA9
IF9fX05SX2lvcGVybQorY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkYzMl9MSUJTID0gMTEz
NAorY29uc3QgX0lGTEFfVkZfVkxBTl9JTkZPX1VOU1BFQyA9IDAKK2NvbnN0IF9NU19OT0VYRUMg
PSA4Citjb25zdCBfVlRJTUUgPSA1Citjb25zdCBfX19JTlRfRkFTVDY0X1dJRFRIX18gPSA2NAor
Y29uc3QgX0lQUE9SVF9ORVRTVEFUID0gMTUKK2NvbnN0IF9TQ05vMTYgPSAiaG8iCitjb25zdCBf
Tl9IRExDID0gMTMKK2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05TRV9WVElEX1ZJT0xBVElPTiA9IDQK
K2NvbnN0IF9fU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSID0gNzcKK2NvbnN0IF9FVEhfUF9JUFgg
PSAweDgxMzcKK2NvbnN0IF9QUkl1TEVBU1QzMiA9ICJ1IgorY29uc3QgX0lGTEFfTUFDVkxBTl9N
QUNBRERSX01PREUgPSAzCitjb25zdCBfRlNfRkxfVVNFUl9NT0RJRklBQkxFID0gMHgwMDAzODBG
RgorY29uc3QgX19fR0NDX0FUT01JQ19URVNUX0FORF9TRVRfVFJVRVZBTCA9IDEKK2NvbnN0IF9f
X05SX3JlbmFtZWF0ID0gMjY0Citjb25zdCBfTVNHX0RPTlRST1VURSA9IDQKK2NvbnN0IF9USU9D
U0lHX3ZhbCA9IDEwNzQwMjU1MjYKK2NvbnN0IF9fUEFUSF9OU1NXSVRDSF9DT05GID0gIi9ldGMv
bnNzd2l0Y2guY29uZiIKK2NvbnN0IF9TWVNfYWNjZXB0ID0gX19fTlJfYWNjZXB0Citjb25zdCBf
UEFDS0VUX1JFU0VSVkUgPSAxMgorY29uc3QgX1NUQV9QUFNKSVRURVIgPSAweDAyMDAKK2NvbnN0
IF9fX05SX3NpZ25hbGZkID0gMjgyCitjb25zdCBfU09fUEVFUlNFQyA9IDMxCitjb25zdCBfX19J
TlRfV0lEVEhfXyA9IDMyCitjb25zdCBfX1hPUEVOX0lPVl9NQVggPSBfX1BPU0lYX1VJT19NQVhJ
T1YKK2NvbnN0IF9OVEZfVVNFID0gMHgwMQorY29uc3QgX19fQklHX0VORElBTiA9IDQzMjEKK2Nv
bnN0IF9VSU5UMTZfV0lEVEggPSAxNgorY29uc3QgX1NFR1ZfQUNDRVJSID0gMgorY29uc3QgX1ND
Tm8zMiA9ICJvIgorY29uc3QgX19fTlJfcmVjdmZyb20gPSA0NQorY29uc3QgX1RDUF9DT09LSUVf
SU5fQUxXQVlTID0gKDEgPDwgMCkKK2NvbnN0IF9TS0ZfQURfUEFZX09GRlNFVCA9IDUyCitjb25z
dCBfU1lTX3JlYWR2ID0gX19fTlJfcmVhZHYKK2NvbnN0IF9QRl9SRFMgPSAyMQorY29uc3QgX0lQ
VjZfRFNUT1BUUyA9IDU5Citjb25zdCBfX1NZU19QVFJBQ0VfSCA9IDEKK2NvbnN0IF9SVE1fRl9O
T1RJRlkgPSAweDEwMAorY29uc3QgX1RDUE9QVF9TQUNLID0gNQorY29uc3QgX1RDUF9NRDVTSUdf
RVhUID0gMzIKK2NvbnN0IF9JRkZfQlJPQURDQVNUID0gMgorY29uc3QgX0lQT1BUX1NBVElEID0g
MTM2Citjb25zdCBfVElPQ01CSUMgPSAweDU0MTcKK2NvbnN0IF9GU19JTkRFWF9GTCA9IDB4MDAw
MDEwMDAKK2NvbnN0IF9TWVNfdW5hbWUgPSBfX19OUl91bmFtZQorY29uc3QgX01PRF9USU1FQ09O
U1QgPSBfQURKX1RJTUVDT05TVAorY29uc3QgX01DQVNUX0lOQ0xVREUgPSAxCitjb25zdCBfSUZG
X1RVTl9FWENMID0gMHg4MDAwCitjb25zdCBfUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFID0g
MzEKK2NvbnN0IF9JUF9NVFVfRElTQ09WRVIgPSAxMAorY29uc3QgX0lGTEFfVlhMQU5fUE9SVF9S
QU5HRSA9IDEwCitjb25zdCBfX19OUl9zY2hlZF9zZXRhdHRyID0gMzE0Citjb25zdCBfU1lTX3Nl
dHByaW9yaXR5ID0gX19fTlJfc2V0cHJpb3JpdHkKK2NvbnN0IF9FU1RSUElQRSA9IDg2Citjb25z
dCBfUlRGX0lSVFQgPSAweDAxMDAKK2NvbnN0IF9JRkxBX0VWRU5UX05PTkUgPSAwCitjb25zdCBf
VENBX09QVElPTlMgPSAyCitjb25zdCBfU0VFS19EQVRBID0gMworY29uc3QgX0ZfT1dORVJfR0lE
ID0gMgorY29uc3QgX0VOT0xJTksgPSA2NworY29uc3QgX01BQ1ZMQU5fTU9ERV9WRVBBID0gMgor
Y29uc3QgX0lGTEFfQlJfVkxBTl9ERUZBVUxUX1BWSUQgPSAzOQorY29uc3QgX1ZTV1RDID0gNwor
Y29uc3QgX1NBX0lOVEVSUlVQVCA9IDB4MjAwMDAwMDAKK2NvbnN0IF9fX0RCTF9IQVNfUVVJRVRf
TkFOX18gPSAxCitjb25zdCBfQVJQT1BfSW5SRVBMWSA9IDkKK2NvbnN0IF9TWVNfc2VuZG1zZyA9
IF9fX05SX3NlbmRtc2cKK2NvbnN0IF9SVE1TR19ERUxST1VURSA9IDB4MjIKK2NvbnN0IF9USU9D
R1NJRCA9IDB4NTQyOQorY29uc3QgX19QT1NJWF9MSU5LX01BWCA9IDgKK2NvbnN0IF9OX01PVVNF
ID0gMgorY29uc3QgX1NZU19yZWFkbGluayA9IF9fX05SX3JlYWRsaW5rCitjb25zdCBfX19OUl9m
Y2hkaXIgPSA4MQorY29uc3QgX19fSU5UX0ZBU1Q2NF9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZm
ZgorY29uc3QgX1BUUkFDRV9TRVRSRUdTRVQgPSAxNjkwMQorY29uc3QgX0lOX05PTkJMT0NLID0g
MjA0OAorY29uc3QgX19fTlJfaW5vdGlmeV9pbml0MSA9IDI5NAorY29uc3QgX0ZGSV9UWVBFX1ZP
SUQgPSAwCitjb25zdCBfRkRfQ0xPRVhFQyA9IDEKK2NvbnN0IF9fX05SX3NldHNvY2tvcHQgPSA1
NAorY29uc3QgX0VDSE9OTCA9IDAwMDAxMDAKK2NvbnN0IF9fX01BWF9CQVVEID0gX0I0MDAwMDAw
Citjb25zdCBfRVRIX01BWF9NVFUgPSAweEZGRkYKK2NvbnN0IF9QQUNLRVRfUURJU0NfQllQQVNT
ID0gMjAKK2NvbnN0IF9DTE9ORV9ORVdVVFMgPSAweDA0MDAwMDAwCitjb25zdCBfU1lTX3NlbXRp
bWVkb3AgPSBfX19OUl9zZW10aW1lZG9wCitjb25zdCBfRVRIX1BfUEhPTkVUID0gMHgwMEY1Citj
b25zdCBfSUZMQV9PRkZMT0FEX1hTVEFUU19DUFVfSElUID0gMQorY29uc3QgX19QV0RfSCA9IDEK
K2NvbnN0IF9fUE9TSVhfU0hFTEwgPSAxCitjb25zdCBfRkZJX1NJWkVPRl9KQVZBX1JBVyA9IF9G
RklfU0laRU9GX0FSRworY29uc3QgX1BSX1NQRUNfRk9SQ0VfRElTQUJMRSA9ICgxIDw8IDMpCitj
b25zdCBfTkRBX1NSQ19WTkkgPSAxMQorY29uc3QgX19fV0NIQVJfTUlOID0gX19fV0NIQVJfTUlO
X18KK2NvbnN0IF9ORVREQl9JTlRFUk5BTCA9IC0xCitjb25zdCBfX19VU0VfTUlTQyA9IDEKK2Nv
bnN0IF9QUklPX01BWCA9IDIwCitjb25zdCBfX19zdHJ1Y3RfdG1fZGVmaW5lZCA9IDEKK2NvbnN0
IF9FVEhFUlRZUEVfQVJQID0gMHgwODA2Citjb25zdCBfX1BPU0lYX1RJTUVPVVRTID0gMjAwODA5
Citjb25zdCBfSUZMQV9WWExBTl9UVExfSU5IRVJJVCA9IDI4Citjb25zdCBfU1BMSUNFX0ZfR0lG
VCA9IDgKK2NvbnN0IF9fX0JZVEVfT1JERVJfXyA9IF9fX09SREVSX0xJVFRMRV9FTkRJQU5fXwor
Y29uc3QgX19fUlROTEdSUF9NQVggPSAzMgorY29uc3QgX19TQ19TQVZFRF9JRFMgPSA4Citjb25z
dCBfTExPTkdfV0lEVEggPSA2NAorY29uc3QgX1NZU19zZXRncm91cHMgPSBfX19OUl9zZXRncm91
cHMKK2NvbnN0IF9TQ01fVElNRVNUQU1QID0gX1NPX1RJTUVTVEFNUAorY29uc3QgX1BSSW8zMiA9
ICJvIgorY29uc3QgX0FESl9TRVRPRkZTRVQgPSAweDAxMDAKK2NvbnN0IF9QUklYTEVBU1QxNiA9
ICJYIgorY29uc3QgX1RIX0ZJTiA9IDB4MDEKK2NvbnN0IF9VQ0hBUl9XSURUSCA9IDgKK2NvbnN0
IF9SVE1fR0VUQUREUkxBQkVMID0gNzQKK2NvbnN0IF9fX1NJR1JUTUFYID0gNjQKK2NvbnN0IF9F
UkVTVEFSVCA9IDg1Citjb25zdCBfX1NDX1Y3X0lMUDMyX09GRkJJRyA9IDIzOAorY29uc3QgX19Q
Q19BU1lOQ19JTyA9IDEwCitjb25zdCBfX1NUUklOR1NfSCA9IDEKK2NvbnN0IF9fX3VuaXhfXyA9
IDEKK2NvbnN0IF9fX2Vycm9yX3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9fU1NfU0laRSA9IDEyOAor
Y29uc3QgX05HUkVHID0gX19fTkdSRUcKK2NvbnN0IF9TVEFfQ0xPQ0tFUlIgPSAweDEwMDAKK2Nv
bnN0IF9fX0ZMVDY0WF9FUFNJTE9OX18gPSAxLjEKK2NvbnN0IF9TVEFUWF9NVElNRSA9IDB4MDA0
MAorY29uc3QgX0JQRl9SRVQgPSAweDA2Citjb25zdCBfSEFWRV9TVFJFUlJPUl9SID0gMQorY29u
c3QgX1NZU19zZW5kbW1zZyA9IF9fX05SX3NlbmRtbXNnCitjb25zdCBfUlRNR1JQX0lQVjRfUlVM
RSA9IDB4ODAKK2NvbnN0IF9TWVNfc2NoZWRfc2V0c2NoZWR1bGVyID0gX19fTlJfc2NoZWRfc2V0
c2NoZWR1bGVyCitjb25zdCBfTkRBX0NBQ0hFSU5GTyA9IDMKK2NvbnN0IF9DTE9ORV9WTSA9IDB4
MDAwMDAxMDAKK2NvbnN0IF9GSUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTID0gMQorY29uc3QgX19J
T0NfRElSQklUUyA9IDIKK2NvbnN0IF9XVU5UUkFDRUQgPSAyCitjb25zdCBfUFJfTUNFX0tJTExf
U0VUID0gMQorY29uc3QgX1NLRl9BRF9RVUVVRSA9IDI0Citjb25zdCBfX19OUl9sY2hvd24gPSA5
NAorY29uc3QgX1BSX1NFVF9NTV9TVEFSVF9TVEFDSyA9IDUKK2NvbnN0IF9fX0ZMT0FUX1dPUkRf
T1JERVJfXyA9IF9fX09SREVSX0xJVFRMRV9FTkRJQU5fXworY29uc3QgX1JNTkVUX0ZMQUdTX0lO
R1JFU1NfTUFQX0NPTU1BTkRTID0gKDEgPDwgMSkKK2NvbnN0IF9fUE9TSVhfU0lHUVVFVUVfTUFY
ID0gMzIKK2NvbnN0IF9fU1lTX0VQT0xMX0ggPSAxCitjb25zdCBfQ0hBUl9XSURUSCA9IDgKK2Nv
bnN0IF9fX1NJWkVPRl9TRU1fVCA9IDMyCitjb25zdCBfWEFUVFJfU0laRV9NQVggPSA2NTUzNgor
Y29uc3QgX19fTlJfbW9kaWZ5X2xkdCA9IDE1NAorY29uc3QgX1NZU19lcG9sbF9jdGwgPSBfX19O
Ul9lcG9sbF9jdGwKK2NvbnN0IF9UQ1BJX09QVF9XU0NBTEUgPSA0Citjb25zdCBfX1NDX0xFVkVM
MV9JQ0FDSEVfQVNTT0MgPSAxODYKK2NvbnN0IF9JUFY2X1JUSERSX0xPT1NFID0gMAorY29uc3Qg
X1NZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4ID0gX19fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21h
eAorY29uc3QgX0lQUE9SVF9CSUZGVURQID0gNTEyCitjb25zdCBfRklPTlJFQUQgPSAweDU0MUIK
K2NvbnN0IF9NTERfTElTVEVORVJfUkVEVUNUSU9OID0gMTMyCitjb25zdCBfQ1g4Nl9DQ1I1ID0g
MHhlOQorY29uc3QgX1RJT0NTRVJHV0lMRCA9IDB4NTQ1NAorY29uc3QgX19fTlJfZXBvbGxfY3Rs
X29sZCA9IDIxNAorY29uc3QgX0VLRVlSRUpFQ1RFRCA9IDEyOQorY29uc3QgX1g4Nl9DUjBfQ0Rf
QklUID0gMzAKK2NvbnN0IF9NQVBfTk9OQkxPQ0sgPSAweDEwMDAwCitjb25zdCBfU1lTX3N5bmNm
cyA9IF9fX05SX3N5bmNmcworY29uc3QgX1RBQkRMWSA9IDAwMTQwMDAKK2NvbnN0IF9fX0dOVUNf
TUlOT1JfXyA9IDMKK2NvbnN0IF9IQVZFX1NFTUFQSE9SRV9IID0gMQorY29uc3QgX1NJR19VTkJM
T0NLID0gMQorY29uc3QgX19fTlJfcHJjdGwgPSAxNTcKK2NvbnN0IF9fX05SX3Byb2Nlc3Nfdm1f
d3JpdGV2ID0gMzExCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9TVEFSVFVQX1FVRVJZX0NOVCA9IDI5
Citjb25zdCBfSVBQT1JUX0RJU0NBUkQgPSA5Citjb25zdCBfTkJQRyA9IF9QQUdFX1NJWkUKK2Nv
bnN0IF9fQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUyA9IDExMDgKK2NvbnN0IF9TWVNfaW9jdGwg
PSBfX19OUl9pb2N0bAorY29uc3QgX1NZU19wb2xsID0gX19fTlJfcG9sbAorY29uc3QgX1JNTkVU
X0ZMQUdTX0lOR1JFU1NfTUFQX0NLU1VNVjQgPSAoMSA8PCAyKQorY29uc3QgX0lQVjZfMjI5MlBL
VE9QVElPTlMgPSA2Citjb25zdCBfVElPQ01fQ1RTID0gMHgwMjAKK2NvbnN0IF9QVFJESUZGX01B
WCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQorY29uc3QgX0lGTEFfU1RBVFNfQUZfU1BFQyA9IDUK
K2NvbnN0IF9JRkxBX1RVTl9NVUxUSV9RVUVVRSA9IDcKK2NvbnN0IF9SVEFfUEFEID0gMjQKK2Nv
bnN0IF9TWVNfaW9wbCA9IF9fX05SX2lvcGwKK2NvbnN0IF9ORVRfTUFKT1IgPSAzNgorY29uc3Qg
X1NZU19tc2dzbmQgPSBfX19OUl9tc2dzbmQKK2NvbnN0IF9fX1NfSUVYRUMgPSAwMTAwCitjb25z
dCBfX1NDX0RFTEFZVElNRVJfTUFYID0gMjYKK2NvbnN0IF9TWVNfZXhpdCA9IF9fX05SX2V4aXQK
K2NvbnN0IF9TWVNfcmVzdGFydF9zeXNjYWxsID0gX19fTlJfcmVzdGFydF9zeXNjYWxsCitjb25z
dCBfUFJJWExFQVNUMzIgPSAiWCIKK2NvbnN0IF9JRkxBX0hTUl9TVVBFUlZJU0lPTl9BRERSID0g
NAorY29uc3QgX1NJR1NZUyA9IDMxCitjb25zdCBfRlNfWEZMQUdfRklMRVNUUkVBTSA9IDB4MDAw
MDQwMDAKK2NvbnN0IF9JUFBST1RPX0lDTVBWNiA9IDU4Citjb25zdCBfRVVDTEVBTiA9IDExNwor
Y29uc3QgX1BSX1NFVF9GUEVNVSA9IDEwCitjb25zdCBfRVRIX1BfQVRBTEsgPSAweDgwOUIKK2Nv
bnN0IF9QRl9JQiA9IDI3Citjb25zdCBfX19VU0VfUE9TSVgxOTk1MDYgPSAxCitjb25zdCBfU1lT
X25hbm9zbGVlcCA9IF9fX05SX25hbm9zbGVlcAorY29uc3QgX0lQX0RST1BfTUVNQkVSU0hJUCA9
IDM2Citjb25zdCBfV0lOVF9NQVggPSAoNDI5NDk2NzI5NSkKK2NvbnN0IF9JRkxBX1ZYTEFOX1VE
UF9aRVJPX0NTVU02X1JYID0gMjAKK2NvbnN0IF9FQ09OTkFCT1JURUQgPSAxMDMKK2NvbnN0IF9Q
Ul9VTkFMSUdOX05PUFJJTlQgPSAxCitjb25zdCBfRlNfRElSU1lOQ19GTCA9IDB4MDAwMTAwMDAK
K2NvbnN0IF9TSU9DREVWUFJJVkFURSA9IDB4ODlGMAorY29uc3QgX19TQ19USU1FT1VUUyA9IDE2
NAorY29uc3QgX19fSU5UX0xFQVNUMzJfTUFYX18gPSAweDdmZmZmZmZmCitjb25zdCBfSU5fQ0xP
U0UgPSAoX0lOX0NMT1NFX1dSSVRFIHwgX0lOX0NMT1NFX05PV1JJVEUpCitjb25zdCBfUlRNX05F
V05TSUQgPSA4OAorY29uc3QgX19fTlJfaW9fcGdldGV2ZW50cyA9IDMzMworY29uc3QgX1g4Nl9F
RkxBR1NfVEZfQklUID0gOAorY29uc3QgX19fTlJfdW5saW5rID0gODcKK2NvbnN0IF9JUFRPU19Q
UkVDX0lNTUVESUFURSA9IF9JUFRPU19DTEFTU19DUzIKK2NvbnN0IF9VSU5UX0xFQVNUMTZfTUFY
ID0gKDY1NTM1KQorY29uc3QgX19fTlJfZ2V0ZXVpZCA9IDEwNworY29uc3QgX1NfSVdHUlAgPSAo
X1NfSVdVU1IgPj4gMykKK2NvbnN0IF9fX1BJRV9fID0gMgorY29uc3QgX1RJT0NQS1RfREFUQSA9
IDAKK2NvbnN0IF9fQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZTID0gMQorY29uc3QgX0ZGSV9U
WVBFX0RPVUJMRSA9IDMKK2NvbnN0IF9SVENGX0RJUkVDVFNSQyA9IDB4MDQwMDAwMDAKK2NvbnN0
IF9fX05SX3N5bmNfZmlsZV9yYW5nZSA9IDI3NworY29uc3QgX0lGTEFfUE9SVF9WU0lfVFlQRSA9
IDMKK2NvbnN0IF9BREpfVEFJID0gMHgwMDgwCitjb25zdCBfTkRVU0VST1BUX1VOU1BFQyA9IDAK
K2NvbnN0IF9fVVRTTkFNRV9ET01BSU5fTEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSAorY29uc3Qg
X05SX0ZJTEUgPSA4MTkyCitjb25zdCBfRl9HRVRfUldfSElOVCA9IDEwMzUKK2NvbnN0IF9QRl9Q
UFBPWCA9IDI0Citjb25zdCBfU09fUEVFS19PRkYgPSA0MgorY29uc3QgX1NPX1JDVkJVRiA9IDgK
K2NvbnN0IF9fU0NfWEJTNV9JTFAzMl9PRkZCSUcgPSAxMjYKK2NvbnN0IF9fX1NJWkVPRl9QVEhS
RUFEX0NPTkRBVFRSX1QgPSA0Citjb25zdCBfTl9IQ0kgPSAxNQorY29uc3QgX1BSSXVMRUFTVDgg
PSAidSIKK2NvbnN0IF9SVEFYX1NTVEhSRVNIID0gNgorY29uc3QgX0lGRl9NVUxUSV9RVUVVRSA9
IDB4MDEwMAorY29uc3QgX1JUX0NMQVNTX0xPQ0FMID0gMjU1Citjb25zdCBfRklPR0VUT1dOID0g
MHg4OTAzCitjb25zdCBfX19OUl9zaG1nZXQgPSAyOQorY29uc3QgX1g4Nl9FRkxBR1NfREZfQklU
ID0gMTAKK2NvbnN0IF9TT19TRUxFQ1RfRVJSX1FVRVVFID0gNDUKK2NvbnN0IF9TT0NLX05PTkJM
T0NLID0gMjA0OAorY29uc3QgX1VJTlRfTEVBU1QzMl9NQVggPSAoNDI5NDk2NzI5NSkKK2NvbnN0
IF9TSUdYRlNaID0gMjUKK2NvbnN0IF9JRkxBX1BST1RJTkZPID0gMTIKK2NvbnN0IF9fX05SX211
bmxvY2thbGwgPSAxNTIKK2NvbnN0IF9JUF9NVUxUSUNBU1RfQUxMID0gNDkKK2NvbnN0IF9FQ0hP
ID0gMDAwMDAxMAorY29uc3QgX0FSUEhSRF9FRVRIRVIgPSAyCitjb25zdCBfQ0xEX0NPTlRJTlVF
RCA9IDYKK2NvbnN0IF9FVEhFUlRZUEVfQVQgPSAweDgwOUIKK2NvbnN0IF9TQ0hBUl9NQVggPSBf
X19TQ0hBUl9NQVhfXworY29uc3QgX0lGTEFfTUFDU0VDX1NDQiA9IDExCitjb25zdCBfX19VQVBJ
X0RFRl9FVEhIRFIgPSAxCitjb25zdCBfSUZMQV9CUl9ORl9DQUxMX0FSUFRBQkxFUyA9IDM4Citj
b25zdCBfTkRUUEFfUkVBQ0hBQkxFX1RJTUUgPSAzCitjb25zdCBfVENQX1JFUEFJUl9XSU5ET1cg
PSAyOQorY29uc3QgX19fSUZMQV9UVU5fTUFYID0gMTAKK2NvbnN0IF9IQVZFX0FTX0NPTURBVF9H
QVMgPSAxCitjb25zdCBfTkVUTElOS19ETlJUTVNHID0gMTQKK2NvbnN0IF9TWVNfbXJlbWFwID0g
X19fTlJfbXJlbWFwCitjb25zdCBfWDg2X0NSNF9QR0VfQklUID0gNworY29uc3QgX0lGQV9BRERS
RVNTID0gMQorY29uc3QgX1NJT0NTSUZEU1RBRERSID0gMHg4OTE4Citjb25zdCBfVlJFUFJJTlQg
PSAxMgorY29uc3QgX0VQT0xMX0NUTF9ERUwgPSAyCitjb25zdCBfSUZMQV9RRElTQyA9IDYKK2Nv
bnN0IF9fX0VMRl9fID0gMQorY29uc3QgX0lOX09QRU4gPSAweDAwMDAwMDIwCitjb25zdCBfRVRI
X1BfVFNOID0gMHgyMkYwCitjb25zdCBfRVRIX1BfQ09OVFJPTCA9IDB4MDAxNgorY29uc3QgX0lG
TEFfQk9ORF9BRF9JTkZPX05VTV9QT1JUUyA9IDIKK2NvbnN0IF9EVF9GSUZPID0gMQorY29uc3Qg
X1NDTmlGQVNUOCA9ICJoaGkiCitjb25zdCBfVElPQ1NFVEQgPSAweDU0MjMKK2NvbnN0IF9fQ1Nf
WEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MgPSAxMTAzCitjb25zdCBfSVBPUFRfT0ZGU0VUID0g
MgorY29uc3QgX19fTlJfZnN0YXRmcyA9IDEzOAorY29uc3QgX19fTlJfc2V0X3RocmVhZF9hcmVh
ID0gMjA1Citjb25zdCBfSUZMQV9CT05EX0FSUF9JTlRFUlZBTCA9IDcKK2NvbnN0IF9QUl9TRVRf
TU1fU1RBUlRfREFUQSA9IDMKK2NvbnN0IF9FVEhfUF9FUlNQQU4gPSAweDg4QkUKK2NvbnN0IF9T
WVNfc3lzaW5mbyA9IF9fX05SX3N5c2luZm8KK2NvbnN0IF9TWVNfc2V0c2lkID0gX19fTlJfc2V0
c2lkCitjb25zdCBfT0ZERUwgPSAwMDAwMjAwCitjb25zdCBfX1BDX1BSSU9fSU8gPSAxMQorY29u
c3QgX19fRkxUX01JTl9fID0gMS4xCitjb25zdCBfX19OUl9jb3B5X2ZpbGVfcmFuZ2UgPSAzMjYK
K2NvbnN0IF9DTE9ORV9ORVdORVQgPSAweDQwMDAwMDAwCitjb25zdCBfUlRBX09JRiA9IDQKK2Nv
bnN0IF9TSV9TSUdJTyA9IC01Citjb25zdCBfX1hPUEVOX1JFQUxUSU1FID0gMQorY29uc3QgX19f
TlJfc2VjY29tcCA9IDMxNworY29uc3QgX0lGTEFfQ0FSUklFUl9VUF9DT1VOVCA9IDQ3Citjb25z
dCBfVENQX1VMUCA9IDMxCitjb25zdCBfX1NDX1RJTUVSUyA9IDExCitjb25zdCBfUFJJdTE2ID0g
InUiCitjb25zdCBfTkRfT1BUX1NPVVJDRV9MSU5LQUREUiA9IDEKK2NvbnN0IF9JRkFfRl9ERVBS
RUNBVEVEID0gMHgyMAorY29uc3QgX1JUTkhfRl9ERUFEID0gMQorY29uc3QgX0ZGSV9UWVBFX0ZM
T0FUID0gMgorY29uc3QgX1ZFUkFTRSA9IDIKK2NvbnN0IF9SVF9DTEFTU19NQUlOID0gMjU0Citj
b25zdCBfRU5PQU5PID0gNTUKK2NvbnN0IF9SVFBST1RfTVJUID0gMTAKK2NvbnN0IF9fQklUU19U
SU1FWF9IID0gMQorY29uc3QgX0lGTEFfWERQX1NLQl9QUk9HX0lEID0gNgorY29uc3QgX19TQ19O
TF9BUkdNQVggPSAxMTkKK2NvbnN0IF9JRkFfTVVMVElDQVNUID0gNworY29uc3QgX0lQUFJPVE9f
QkVFVFBIID0gOTQKK2NvbnN0IF9JUE9QVF9TRUNVUl9UT1BTRUNSRVQgPSAweDZiYzUKK2NvbnN0
IF9fX1NfSVdSSVRFID0gMDIwMAorY29uc3QgX0VOT1RDT05OID0gMTA3Citjb25zdCBfUFRSQUNF
X1NFVEZQWFJFR1MgPSAxOQorY29uc3QgX19DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfTERGTEFH
UyA9IDExNDUKK2NvbnN0IF9fX1NfSUZNVCA9IDAxNzAwMDAKK2NvbnN0IF9JUE9JQl9NT0RFX0RB
VEFHUkFNID0gMAorY29uc3QgX19fRkxUNjRYX0RFQ0lNQUxfRElHX18gPSAyMQorY29uc3QgX19T
Q19QQUdFU0laRSA9IDMwCitjb25zdCBfQVJQSFJEX0NJU0NPID0gNTEzCitjb25zdCBfX19JRkxB
X0JSX01BWCA9IDQ1Citjb25zdCBfSVBQUk9UT19EU1RPUFRTID0gNjAKK2NvbnN0IF9STElNSVRf
Q1BVID0gMAorY29uc3QgX01BRFZfRE9OVERVTVAgPSAxNgorY29uc3QgX19fRkxUMTI4X0hBU19J
TkZJTklUWV9fID0gMQorY29uc3QgX19DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJTlRGTEFHUyA9
IDExMjcKK2NvbnN0IF9fU0NfTlBST0NFU1NPUlNfQ09ORiA9IDgzCitjb25zdCBfVENBX1hTVEFU
UyA9IDQKK2NvbnN0IF9QQUNLRVRfTVJfQUxMTVVMVEkgPSAyCitjb25zdCBfX19TU0UyX01BVEhf
XyA9IDEKK2NvbnN0IF9PX05PQ1RUWSA9IDA0MDAKK2NvbnN0IF9DTE9ORV9JTyA9IDB4ODAwMDAw
MDAKK2NvbnN0IF9TSU9DU0lGSFdCUk9BRENBU1QgPSAweDg5MzcKK2NvbnN0IF9fX3NpZ19hdG9t
aWNfdF9kZWZpbmVkID0gMQorY29uc3QgX0hBVkVfQUNDRVBUNCA9IDEKK2NvbnN0IF9fQ1NfR05V
X0xJQkNfVkVSU0lPTiA9IDIKK2NvbnN0IF9OTE1fRl9DUkVBVEUgPSAweDQwMAorY29uc3QgX1JU
X0NMQVNTX0RFRkFVTFQgPSAyNTMKK2NvbnN0IF9IQVZFX1VOTElOS0FUID0gMQorY29uc3QgX0VO
T1NZUyA9IDM4Citjb25zdCBfUlRNX0dFVE1VTFRJQ0FTVCA9IDU4Citjb25zdCBfSUZMQV9FVkVO
VF9GRUFUVVJFUyA9IDIKK2NvbnN0IF9fX0lGTEFfSFNSX01BWCA9IDcKK2NvbnN0IF9FUE9MTF9D
VExfTU9EID0gMworY29uc3QgX0ZJT05CSU8gPSAweDU0MjEKK2NvbnN0IF9fU0NfUElJX1hUSSA9
IDU0Citjb25zdCBfX1BPU0lYMl9DX0RFViA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04KK2NvbnN0
IF9BRl9BTEcgPSBfUEZfQUxHCitjb25zdCBfSUZMQV9QUFBfVU5TUEVDID0gMAorY29uc3QgX1NP
X1JDVkxPV0FUID0gMTgKK2NvbnN0IF9JTlQ4X1dJRFRIID0gOAorY29uc3QgX1g4Nl9DUjBfUEdf
QklUID0gMzEKK2NvbnN0IF9JUFBPUlRfV0hPU0VSVkVSID0gNTEzCitjb25zdCBfSEFWRV9TWVNf
TU1BTl9IID0gMQorY29uc3QgX19fTlJfcHdyaXRlNjQgPSAxOAorY29uc3QgX0lGTEFfVFVOX09X
TkVSID0gMQorY29uc3QgX1JUQVhfRkFTVE9QRU5fTk9fQ09PS0lFID0gMTcKK2NvbnN0IF9JRkxB
X0JPTkRfTFBfSU5URVJWQUwgPSAxOQorY29uc3QgX1BUUkFDRV9HRVRGUFJFR1MgPSAxNAorY29u
c3QgX0NMT05FX0ZJTEVTID0gMHgwMDAwMDQwMAorY29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9B
RVNfMTI4X0NCQyA9IDUKK2NvbnN0IF9TS0ZfQURfUkFORE9NID0gNTYKK2NvbnN0IF9NU0dfV0FJ
VEFMTCA9IDI1NgorY29uc3QgX1BSX1NFVF9NTV9FTlZfRU5EID0gMTEKK2NvbnN0IF9fX05SX3Nl
bmRtc2cgPSA0NgorY29uc3QgX0VUSF9QX01BUCA9IDB4MDBGOQorY29uc3QgX19fTlJfZ2V0c2lk
ID0gMTI0Citjb25zdCBfX19OUl9pb3ByaW9fZ2V0ID0gMjUyCitjb25zdCBfSUZMQV9WRl9JQl9O
T0RFX0dVSUQgPSAxMAorY29uc3QgX01TX1JFQyA9IDE2Mzg0Citjb25zdCBfX1BPU0lYX1RSQUNF
ID0gLTEKK2NvbnN0IF9fX0ZMVDEyOF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBfTE9DS19O
QiA9IDQKK2NvbnN0IF9QRFBfRU5ESUFOID0gX19fUERQX0VORElBTgorY29uc3QgX1BSX01DRV9L
SUxMX0VBUkxZID0gMQorY29uc3QgX05FVExJTktfQVVESVQgPSA5Citjb25zdCBfU1lTX3N0YXR4
ID0gX19fTlJfc3RhdHgKK2NvbnN0IF9fU0NfU1BJTl9MT0NLUyA9IDE1NAorY29uc3QgX0lGTEFf
Qk9ORF9BRF9JTkZPX0FDVE9SX0tFWSA9IDMKK2NvbnN0IF9QUl9GUF9NT0RFX0ZSID0gKDEgPDwg
MCkKK2NvbnN0IF9SVE1fR0VUVENMQVNTID0gNDIKK2NvbnN0IF9BSV9BRERSQ09ORklHID0gMHgw
MDIwCitjb25zdCBfUFJJdTggPSAidSIKK2NvbnN0IF9NQURWX1VOTUVSR0VBQkxFID0gMTMKK2Nv
bnN0IF9QUkl1MzIgPSAidSIKK2NvbnN0IF9TWVNfc2h1dGRvd24gPSBfX19OUl9zaHV0ZG93bgor
Y29uc3QgX0hBVkVfTElOVVhfRlNfSCA9IDEKK2NvbnN0IF9OX1IzOTY0ID0gOQorY29uc3QgX0lQ
UFJPVE9fQUggPSA1MQorY29uc3QgX0VYRlVMTCA9IDU0Citjb25zdCBfX1BPU0lYX1JBV19TT0NL
RVRTID0gMjAwODA5Citjb25zdCBfRUJVU1kgPSAxNgorY29uc3QgX0IyNTAwMDAwID0gMDAxMDAx
NAorY29uc3QgX19fTlJfZ2V0c29ja25hbWUgPSA1MQorY29uc3QgX1BSSVhGQVNUOCA9ICJYIgor
Y29uc3QgX1NZU190a2lsbCA9IF9fX05SX3RraWxsCitjb25zdCBfX19hbWQ2NF9fID0gMQorY29u
c3QgX0lQVE9TX1BSRUNfUFJJT1JJVFkgPSBfSVBUT1NfQ0xBU1NfQ1MxCitjb25zdCBfQ1RJTUUg
PSAwCitjb25zdCBfX19GTFQzMlhfSEFTX0lORklOSVRZX18gPSAxCitjb25zdCBfRVVOQVRDSCA9
IDQ5Citjb25zdCBfX1NDXzJfUEJTX0FDQ09VTlRJTkcgPSAxNjkKK2NvbnN0IF9fUE9TSVhfVEhS
RUFEX1NQT1JBRElDX1NFUlZFUiA9IC0xCitjb25zdCBfX19OUl9tbG9jazIgPSAzMjUKK2NvbnN0
IF9JUFBPUlRfV0hPSVMgPSA0MworY29uc3QgX19fTlJfZ2V0X3RocmVhZF9hcmVhID0gMjExCitj
b25zdCBfRl9PRkRfR0VUTEsgPSAzNgorY29uc3QgX05MQV9BTElHTlRPID0gNAorY29uc3QgX0VO
T01FRElVTSA9IDEyMworY29uc3QgX19HTlVfU09VUkNFID0gMQorY29uc3QgX1NZU19wdHJhY2Ug
PSBfX19OUl9wdHJhY2UKK2NvbnN0IF9TSU9DR0lGSU5ERVggPSAweDg5MzMKK2NvbnN0IF9FMkJJ
RyA9IDcKK2NvbnN0IF9JQ01QNl9SUl9GTEFHU19GT1JDRUFQUExZID0gMHgyMAorY29uc3QgX1NJ
X1RLSUxMID0gLTYKK2NvbnN0IF9fU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiA9IDE2MQorY29u
c3QgX19feDg2XzY0X18gPSAxCitjb25zdCBfU1lTX2Z1dGV4ID0gX19fTlJfZnV0ZXgKK2NvbnN0
IF9JTl9ERUxFVEUgPSAweDAwMDAwMjAwCitjb25zdCBfRkZETFkgPSAwMTAwMDAwCitjb25zdCBf
TUNBU1RfTEVBVkVfU09VUkNFX0dST1VQID0gNDcKK2NvbnN0IF9TX0lYVVNSID0gX19fU19JRVhF
QworY29uc3QgX19TWVNfU0VMRUNUX0ggPSAxCitjb25zdCBfUFJJZDggPSAiZCIKK2NvbnN0IF9f
X05SX2lub3RpZnlfYWRkX3dhdGNoID0gMjU0Citjb25zdCBfU0NObzggPSAiaGhvIgorY29uc3Qg
X01DTF9PTkZBVUxUID0gNAorY29uc3QgX0ZTX0VBX0lOT0RFX0ZMID0gMHgwMDIwMDAwMAorY29u
c3QgX19fTlJfb3BlbmF0ID0gMjU3Citjb25zdCBfVFVOU0VUUEVSU0lTVF92YWwgPSAxMDc0MDI1
Njc1Citjb25zdCBfX19OUl9mZGF0YXN5bmMgPSA3NQorY29uc3QgX0ZfU0VUTEVBU0UgPSAxMDI0
Citjb25zdCBfX1NDX0ZEX01HTVQgPSAxNDMKK2NvbnN0IF9fX0JJVFNfUEVSX0xPTkcgPSA2NAor
Y29uc3QgX1BSSU9fTUlOID0gLTIwCitjb25zdCBfX19OUl9wcmxpbWl0NjQgPSAzMDIKK2NvbnN0
IF9SVE1fREVMVEZJTFRFUiA9IDQ1Citjb25zdCBfUlRNX0dFVENIQUlOID0gMTAyCitjb25zdCBf
UlRFWFRfRklMVEVSX1ZGID0gKDEgPDwgMCkKK2NvbnN0IF9TVEFUWF9JTk8gPSAweDAxMDAKK2Nv
bnN0IF9fX05FVElORVRfSUZfRVRIRVJfSCA9IDEKK2NvbnN0IF9TWVNfcmVjdm1tc2cgPSBfX19O
Ul9yZWN2bW1zZworY29uc3QgX0hBVkVfU0NIRURfSCA9IDEKK2NvbnN0IF9FVEhfUF9SQVJQID0g
MHg4MDM1Citjb25zdCBfX1NUUlVDVF9USU1FU1BFQyA9IDEKK2NvbnN0IF9TT19SRVVTRVBPUlQg
PSAxNQorY29uc3QgX19QT1NJWF9TRU1fTlNFTVNfTUFYID0gMjU2Citjb25zdCBfX19MREJMX0VQ
U0lMT05fXyA9IDEuMQorY29uc3QgX19fY2xvY2tfdF9kZWZpbmVkID0gMQorY29uc3QgX01BUF9U
WVBFID0gMHgwZgorY29uc3QgX05FVExJTktfU09DS19ESUFHID0gNAorY29uc3QgX19fVVNFX1hP
UEVOX0VYVEVOREVEID0gMQorY29uc3QgX1JUTl9QUk9ISUJJVCA9IDgKK2NvbnN0IF9QQUNLRVRf
VFhfSEFTX09GRiA9IDE5Citjb25zdCBfVENQX1JFUEFJUiA9IDE5Citjb25zdCBfSUZMQV9WTEFO
X0ZMQUdTID0gMgorY29uc3QgX19fTlJfZHVwID0gMzIKK2NvbnN0IF9BRl9USVBDID0gX1BGX1RJ
UEMKK2NvbnN0IF9JRkxBX0dUUF9ST0xFID0gNAorY29uc3QgX19fTlJfZnV0aW1lc2F0ID0gMjYx
Citjb25zdCBfX19VU0VfS0VSTkVMX0lQVjZfREVGUyA9IDAKK2NvbnN0IF9JRkxBX1ZYTEFOX1BS
T1hZID0gMTEKK2NvbnN0IF9IQVZFX1VOSVNURF9IID0gMQorY29uc3QgX1g4Nl9DUjBfQU1fQklU
ID0gMTgKK2NvbnN0IF9JRkxBX1ZYTEFOX1JFTUNTVU1fTk9QQVJUSUFMID0gMjQKK2NvbnN0IF9J
RkxBX01BQ1ZMQU5fTUFDQUREUiA9IDQKK2NvbnN0IF9JUFRPU19QUkVDX0ZMQVNIT1ZFUlJJREUg
PSBfSVBUT1NfQ0xBU1NfQ1M0Citjb25zdCBfX19TSUdSVE1JTiA9IDMyCitjb25zdCBfX19OUl9m
Y250bCA9IDcyCitjb25zdCBfU1lTX19zeXNjdGwgPSBfX19OUl9fc3lzY3RsCitjb25zdCBfRU5F
VFVOUkVBQ0ggPSAxMDEKK2NvbnN0IF9TWVNfbXFfdGltZWRzZW5kID0gX19fTlJfbXFfdGltZWRz
ZW5kCitjb25zdCBfVElPQ1NFUkdFVExTUiA9IDB4NTQ1OQorY29uc3QgX1NPTF9JVUNWID0gMjc3
Citjb25zdCBfUkxJTUlUX0ZTSVpFID0gMQorY29uc3QgX19fUlRBX01BWCA9IDMwCitjb25zdCBf
QlBGX1RBWCA9IDB4MDAKK2NvbnN0IF9TVEFUWF9fUkVTRVJWRUQgPSAweDgwMDAwMDAwCitjb25z
dCBfX1NDX1NZTkNIUk9OSVpFRF9JTyA9IDE0Citjb25zdCBfX19SVE5fTUFYID0gMTIKK2NvbnN0
IF9JTlQzMl9XSURUSCA9IDMyCitjb25zdCBfTkRfT1BUX01UVSA9IDUKK2NvbnN0IF9TSUdfQVRP
TUlDX1dJRFRIID0gMzIKK2NvbnN0IF9fU0NfRVFVSVZfQ0xBU1NfTUFYID0gNDEKK2NvbnN0IF9f
UE9TSVhfQ0xPQ0tSRVNfTUlOID0gMjAwMDAwMDAKK2NvbnN0IF9fX0dDQ19BVE9NSUNfSU5UX0xP
Q0tfRlJFRSA9IDIKK2NvbnN0IF9QT1NJWF9GQURWX05PUk1BTCA9IDAKK2NvbnN0IF9JUF9EUk9Q
X1NPVVJDRV9NRU1CRVJTSElQID0gNDAKK2NvbnN0IF9TRUVLX01BWCA9IF9TRUVLX0hPTEUKK2Nv
bnN0IF9BUlBIUkRfTUVUUklDT00gPSAyMworY29uc3QgX0lGTEFfVkxBTl9FR1JFU1NfUU9TID0g
MworY29uc3QgX1NZU19jbG9uZSA9IF9fX05SX2Nsb25lCitjb25zdCBfX1NZU19USU1FU19IID0g
MQorY29uc3QgX19fRkxUNjRYX01BWF9FWFBfXyA9IDE2Mzg0Citjb25zdCBfU19JU0dJRCA9IF9f
X1NfSVNHSUQKK2NvbnN0IF9JUFY2X1JUSERSX1RZUEVfMCA9IDAKK2NvbnN0IF9TSUdTVE9QID0g
MTkKK2NvbnN0IF9GU19VTlJNX0ZMID0gMHgwMDAwMDAwMgorY29uc3QgX19QT1NJWF9USFJFQURf
U0FGRV9GVU5DVElPTlMgPSAyMDA4MDkKK2NvbnN0IF9QUl9GUF9FWENfTk9OUkVDT1YgPSAxCitj
b25zdCBfVFVOR0VUVk5FVEhEUlNaX3ZhbCA9IDIxNDc3Njc1MTEKK2NvbnN0IF9JR05CUksgPSAw
MDAwMDAxCitjb25zdCBfX19ORVRQQUNLRVRfUEFDS0VUX0ggPSAxCitjb25zdCBfU1lTX3NjaGVk
X2dldF9wcmlvcml0eV9taW4gPSBfX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluCitjb25zdCBf
Tl9NQVNDID0gOAorY29uc3QgX0lGTEFfQk9ORF9BRF9TRUxFQ1QgPSAyMgorY29uc3QgX0lQVjZf
SVBTRUNfUE9MSUNZID0gMzQKK2NvbnN0IF9BRl9MTEMgPSBfUEZfTExDCitjb25zdCBfU0lPQ1NS
QVJQID0gMHg4OTYyCitjb25zdCBfUlRBX1BSRUZTUkMgPSA3Citjb25zdCBfU09fU05EQlVGRk9S
Q0UgPSAzMgorY29uc3QgX19fV0NMT05FID0gMHg4MDAwMDAwMAorY29uc3QgX19fRkxUX0hBU19E
RU5PUk1fXyA9IDEKK2NvbnN0IF9SVVNBR0VfVEhSRUFEID0gMQorY29uc3QgX0lGRl9QUk9NSVND
ID0gMjU2Citjb25zdCBfUEZfVElQQyA9IDMwCitjb25zdCBfU1lTX3B1dHBtc2cgPSBfX19OUl9w
dXRwbXNnCitjb25zdCBfTUFDU0VDX1ZBTElEQVRFX1NUUklDVCA9IDIKK2NvbnN0IF9UQ0FfSU5H
UkVTU19CTE9DSyA9IDEzCitjb25zdCBfX19BVE9NSUNfSExFX1JFTEVBU0UgPSAxMzEwNzIKK2Nv
bnN0IF9TWVNfZ2V0cmxpbWl0ID0gX19fTlJfZ2V0cmxpbWl0Citjb25zdCBfUlRNX1NFVERDQiA9
IDc5Citjb25zdCBfUlRNU0dfREVMREVWSUNFID0gMHgxMgorY29uc3QgX0lDTVA2X1JSX1BDT1VT
RV9SQUZMQUdTX09OTElOSyA9IDB4MjAKK2NvbnN0IF9TWVNfbWVtYmFycmllciA9IF9fX05SX21l
bWJhcnJpZXIKK2NvbnN0IF9TSU9DR1BHUlAgPSAweDg5MDQKK2NvbnN0IF9fQ1NfTEZTNjRfTERG
TEFHUyA9IDEwMDUKK2NvbnN0IF9CMzg0MDAgPSAwMDAwMDE3Citjb25zdCBfSEFWRV9MSU5VWF9J
Rl9UVU5fSCA9IDEKK2NvbnN0IF9BUlBIUkRfQVBQTEVUTEsgPSA4Citjb25zdCBfUFJfR0VUX1NF
Q1VSRUJJVFMgPSAyNworY29uc3QgX0NNSU4gPSAxCitjb25zdCBfTlVEX05PTkUgPSAweDAwCitj
b25zdCBfSUZMQV9WWExBTl9UVEwgPSA1Citjb25zdCBfX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xP
Q0tfRlJFRSA9IDIKK2NvbnN0IF9JTl9DTE9TRV9OT1dSSVRFID0gMHgwMDAwMDAxMAorY29uc3Qg
X19fQVRPTUlDX1NFUV9DU1QgPSA1Citjb25zdCBfU1lTX2lub3RpZnlfaW5pdCA9IF9fX05SX2lu
b3RpZnlfaW5pdAorY29uc3QgX1RJT0NTRVJHU1RSVUNUID0gMHg1NDU4Citjb25zdCBfTkxNX0Zf
RFVNUCA9IChfTkxNX0ZfUk9PVHxfTkxNX0ZfTUFUQ0gpCitjb25zdCBfX1NDX1NQQVdOID0gMTU5
Citjb25zdCBfX1BDX1JFQ19NQVhfWEZFUl9TSVpFID0gMTUKK2NvbnN0IF9TSU9DQURERExDSSA9
IDB4ODk4MAorY29uc3QgX19fTERCTF9NQVhfRVhQX18gPSAxNjM4NAorY29uc3QgX19MRlM2NF9T
VERJTyA9IDEKK2NvbnN0IF9TWVNfdHV4Y2FsbCA9IF9fX05SX3R1eGNhbGwKK2NvbnN0IF9fU1lT
X1VOX0ggPSAxCitjb25zdCBfSUNNUDZfRklMVEVSX0JMT0NLID0gMQorY29uc3QgX0VSRU1DSEcg
PSA3OAorY29uc3QgX05FVExJTktfQUREX01FTUJFUlNISVAgPSAxCitjb25zdCBfWDg2X0VGTEFH
U19WSVBfQklUID0gMjAKK2NvbnN0IF9UQ1BJX09QVF9TWU5fREFUQSA9IDMyCitjb25zdCBfX19O
Ul91bWFzayA9IDk1Citjb25zdCBfV0lOVF9NSU4gPSAoMCkKK2NvbnN0IF9fUE9TSVhfTUVNTE9D
SyA9IDIwMDgwOQorY29uc3QgX19TQ19DSEFSQ0xBU1NfTkFNRV9NQVggPSA0NQorY29uc3QgX0lG
TEFfSVBWTEFOX0ZMQUdTID0gMgorY29uc3QgX19QT1NJWF9SRUFERVJfV1JJVEVSX0xPQ0tTID0g
MjAwODA5Citjb25zdCBfSEFWRV9MSU5VWF9QVFJBQ0VfSCA9IDEKK2NvbnN0IF9YODZfQ1I0X1NN
WEVfQklUID0gMTQKK2NvbnN0IF9JWE9GRiA9IDAwMTAwMDAKK2NvbnN0IF9NU19OT1VTRVIgPSAt
MjE0NzQ4MzY0OAorY29uc3QgX19fQklHR0VTVF9BTElHTk1FTlRfXyA9IDE2Citjb25zdCBfRlNf
UE9MSUNZX0ZMQUdTX1BBRF9NQVNLID0gMHgwMworY29uc3QgX0VUSF9QX0REQ01QID0gMHgwMDA2
Citjb25zdCBfX19OUl9ydF9zaWdzdXNwZW5kID0gMTMwCitjb25zdCBfWF9PSyA9IDEKK2NvbnN0
IF9PX0FTWU5DID0gMDIwMDAwCitjb25zdCBfVElPQ0xJTlVYID0gMHg1NDFDCitjb25zdCBfX19T
SVpFT0ZfU0laRV9UX18gPSA4Citjb25zdCBfTlVEX05PQVJQID0gMHg0MAorY29uc3QgX1NfSUZE
SVIgPSBfX19TX0lGRElSCitjb25zdCBfX19VU0VfWE9QRU4yS1hTSSA9IDEKK2NvbnN0IF9fX1VT
RV9HTlUgPSAxCitjb25zdCBfTlRGX01BU1RFUiA9IDB4MDQKK2NvbnN0IF9fX0FUT01JQ19BQ1FV
SVJFID0gMgorY29uc3QgX05fNlBBQ0sgPSA3Citjb25zdCBfSUZMQV9FVkVOVF9JR01QX1JFU0VO
RCA9IDUKK2NvbnN0IF9JUF9ERiA9IDB4NDAwMAorY29uc3QgX0lQT1BUX09QVFZBTCA9IDAKK2Nv
bnN0IF9fUEFUSF9IT1NUUyA9ICIvZXRjL2hvc3RzIgorY29uc3QgX19fTlJfZXZlbnRmZCA9IDI4
NAorY29uc3QgX1NPX1NOREJVRiA9IDcKK2NvbnN0IF9fX05SX2xzZWVrID0gOAorY29uc3QgX19f
TlJfbWtkaXJhdCA9IDI1OAorY29uc3QgX0RUX1VOS05PV04gPSAwCitjb25zdCBfSUZMQV9WTEFO
X0lEID0gMQorY29uc3QgX19TQ19QSUlfSU5URVJORVRfU1RSRUFNID0gNjEKK2NvbnN0IF9GX1NF
VE9XTiA9IF9fX0ZfU0VUT1dOCitjb25zdCBfX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUyA9
IDExMjYKK2NvbnN0IF9USU9DU1NFUklBTCA9IDB4NTQxRgorY29uc3QgX0VOT05FVCA9IDY0Citj
b25zdCBfQVJQSFJEX0FUTSA9IDE5Citjb25zdCBfWDg2X0VGTEFHU19BRl9CSVQgPSA0Citjb25z
dCBfX19OUl9zZXRyZXNnaWQgPSAxMTkKK2NvbnN0IF9TWVNfbXVubWFwID0gX19fTlJfbXVubWFw
Citjb25zdCBfQ1g4Nl9QQ1IwID0gMHgyMAorY29uc3QgX19fSU5UTUFYX01BWF9fID0gMHg3ZmZm
ZmZmZmZmZmZmZmZmCitjb25zdCBfX19OUl9jaHJvb3QgPSAxNjEKK2NvbnN0IF9fX0dDQ19BVE9N
SUNfQ0hBUl9MT0NLX0ZSRUUgPSAyCitjb25zdCBfRVRIX0ZSQU1FX0xFTiA9IDE1MTQKK2NvbnN0
IF9QVFJBQ0VfRVZFTlRfRk9SSyA9IDEKK2NvbnN0IF9JRkxBX0JPTkRfTlVNX1BFRVJfTk9USUYg
PSAxNgorY29uc3QgX0NMT0NLX1JFQUxUSU1FID0gMAorY29uc3QgX05EQV9QUk9CRVMgPSA0Citj
b25zdCBfX1BDX1JFQ19JTkNSX1hGRVJfU0laRSA9IDE0Citjb25zdCBfSUZMQV9QUk9UT19ET1dO
ID0gMzkKK2NvbnN0IF9VSU5UX0ZBU1QzMl9XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfX1ND
XzJfUEJTX1RSQUNLID0gMTcyCitjb25zdCBfQVJQRF9GTFVTSCA9IDB4MDMKK2NvbnN0IF9TQ054
TEVBU1Q4ID0gImhoeCIKK2NvbnN0IF9UUllfQUdBSU4gPSAyCitjb25zdCBfX1NZU19TWVNJTkZP
X0ggPSAxCitjb25zdCBfRVRIRVJUWVBFX0lQID0gMHgwODAwCitjb25zdCBfQVJQSFJEX0lFRUUx
Mzk0ID0gMjQKK2NvbnN0IF9JTl9BQ0NFU1MgPSAweDAwMDAwMDAxCitjb25zdCBfSUZMQV9JRk5B
TUUgPSAzCitjb25zdCBfVENQX1VTRVJfVElNRU9VVCA9IDE4Citjb25zdCBfQVJQSFJEX0lFRUU4
MDIxMSA9IDgwMQorY29uc3QgX0lGTEFfQUZfU1BFQyA9IDI2Citjb25zdCBfQjExNTIwMDAgPSAw
MDEwMDExCitjb25zdCBfRVRIX1BfVERMUyA9IDB4ODkwRAorY29uc3QgX19CSVRTX1NJR1NUQUNL
X0ggPSAxCitjb25zdCBfUEZfQkxVRVRPT1RIID0gMzEKK2NvbnN0IF9fQklUU19TSUdDT05URVhU
X0ggPSAxCitjb25zdCBfVElPQ1NXSU5TWl92YWwgPSAyMTUyNAorY29uc3QgX0VBSV9BTExET05F
ID0gLTEwMworY29uc3QgX19fTERCTF9NQVhfMTBfRVhQX18gPSA0OTMyCitjb25zdCBfSUZMQV9T
VEFUU19MSU5LXzY0ID0gMQorY29uc3QgX1VJTlRfRkFTVDMyX01BWCA9ICgxODQ0Njc0NDA3Mzcw
OTU1MTYxNSkKK2NvbnN0IF9GRklfU1lTViA9IDEKK2NvbnN0IF9fU1lTX0ZJTEVfSCA9IDEKK2Nv
bnN0IF9JUF9PUklHRFNUQUREUiA9IDIwCitjb25zdCBfRVRIX1BfU0NBID0gMHg2MDA3Citjb25z
dCBfUlRNR1JQX0lQVjZfUFJFRklYID0gMHgyMDAwMAorY29uc3QgX19fTlJfc2V0cHJpb3JpdHkg
PSAxNDEKK2NvbnN0IF9USU9DUEtUX05PU1RPUCA9IDE2Citjb25zdCBfSVBfUE1UVURJU0NfT01J
VCA9IDUKK2NvbnN0IF9DT0xMX1dFSUdIVFNfTUFYID0gMjU1Citjb25zdCBfT19UUlVOQyA9IDAx
MDAwCitjb25zdCBfX19OUl9zZXRob3N0bmFtZSA9IDE3MAorY29uc3QgX0ZJT05DTEVYID0gMHg1
NDUwCitjb25zdCBfRlNfWEZMQUdfSU1NVVRBQkxFID0gMHgwMDAwMDAwOAorY29uc3QgX0ZTX0lO
TElORV9EQVRBX0ZMID0gMHgxMDAwMDAwMAorY29uc3QgX1BGX0FYMjUgPSAzCitjb25zdCBfX19B
VE9NSUNfQUNRX1JFTCA9IDQKK2NvbnN0IF9fX05SX3N5c2luZm8gPSA5OQorY29uc3QgX0ZTX1hG
TEFHX0RBWCA9IDB4MDAwMDgwMDAKK2NvbnN0IF9JUFY2X1JPVVRFUl9BTEVSVCA9IDIyCitjb25z
dCBfSUZMQV9CUl9CUklER0VfSUQgPSAxMQorY29uc3QgX1g4Nl9DUjRfTEE1N19CSVQgPSAxMgor
Y29uc3QgX19TQ19WRVJTSU9OID0gMjkKK2NvbnN0IF9TVEFUWF9BVFRSX0NPTVBSRVNTRUQgPSAw
eDAwMDQKK2NvbnN0IF9JUFY2X0hEUklOQ0wgPSAzNgorY29uc3QgX0lGTEFfQlJQT1JUX1VOSUNB
U1RfRkxPT0QgPSA5Citjb25zdCBfUlRNX0RFTE5FSUdIID0gMjkKK2NvbnN0IF9fX1NURENfVkVS
U0lPTl9fID0gMTk5OTAxCitjb25zdCBfUEZfUUlQQ1JUUiA9IDQyCitjb25zdCBfQURKX0ZSRVFV
RU5DWSA9IDB4MDAwMgorY29uc3QgX19fTE9OR19MT05HX1dJRFRIX18gPSA2NAorY29uc3QgX0FG
X0FTSCA9IF9QRl9BU0gKK2NvbnN0IF9JUF9QTVRVRElTQ19ET05UID0gMAorY29uc3QgX0hBVkVf
U1lOQ19GRVRDSF9BTkRfQUREXzQgPSAxCitjb25zdCBfSVBWNl9KT0lOX0dST1VQID0gMjAKK2Nv
bnN0IF9TS0ZfQURfVkxBTl9UQUcgPSA0NAorY29uc3QgX1BUUkFDRV9HRVRfVEhSRUFEX0FSRUEg
PSAyNQorY29uc3QgX1JUTkxHUlBfSVBWNF9NUk9VVEVfUiA9IDMwCitjb25zdCBfVENBX0VHUkVT
U19CTE9DSyA9IDE0Citjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9NVVRFWF9UID0gNDAKK2NvbnN0
IF9TT19UWVBFID0gMworY29uc3QgX19fSUZMQV9WTEFOX01BWCA9IDYKK2NvbnN0IF9QVFJBQ0Vf
U0VUU0lHTUFTSyA9IDE2OTA3Citjb25zdCBfQ0xPTkVfVkZPUksgPSAweDAwMDA0MDAwCitjb25z
dCBfSVBQUk9UT19JUCA9IDAKK2NvbnN0IF9FTk9FWEVDID0gOAorY29uc3QgX1NPX0lOQ09NSU5H
X0NQVSA9IDQ5Citjb25zdCBfUFJfU0VUX0ZQRVhDID0gMTIKK2NvbnN0IF9UQ1BfV0lORE9XX0NM
QU1QID0gMTAKK2NvbnN0IF9TT19SWFFfT1ZGTCA9IDQwCitjb25zdCBfU1lTX3Zmb3JrID0gX19f
TlJfdmZvcmsKK2NvbnN0IF9JTl9DTE9FWEVDID0gNTI0Mjg4Citjb25zdCBfVENBX0ZDTlQgPSA2
Citjb25zdCBfX19GTFQ2NFhfSEFTX0lORklOSVRZX18gPSAxCitjb25zdCBfX1NDX1NFTV9WQUxV
RV9NQVggPSAzMworY29uc3QgX19ORVRJTkVUX0lDTVA2X0ggPSAxCitjb25zdCBfRlNfRU5DUllQ
VElPTl9NT0RFX0FFU18yNTZfQ0JDID0gMworY29uc3QgX19fUkxJTUlUX01TR1FVRVVFID0gMTIK
K2NvbnN0IF9JUFBST1RPX0NPTVAgPSAxMDgKK2NvbnN0IF9QQUNLRVRfUlhfUklORyA9IDUKK2Nv
bnN0IF9JRkxBX0NBUlJJRVJfRE9XTl9DT1VOVCA9IDQ4Citjb25zdCBfU09fQlBGX0VYVEVOU0lP
TlMgPSA0OAorY29uc3QgX0VBRERSTk9UQVZBSUwgPSA5OQorY29uc3QgX19fRkxUMzJfTUlOX18g
PSAxLjEKK2NvbnN0IF9JRkxBX0JSX0ZPUldBUkRfREVMQVkgPSAxCitjb25zdCBfX19TU0VfTUFU
SF9fID0gMQorY29uc3QgX1NZU193YWl0aWQgPSBfX19OUl93YWl0aWQKK2NvbnN0IF9TQ09QRV9E
RUxJTUlURVIgPSAnJScKK2NvbnN0IF9fX05SX3NvY2tldCA9IDQxCitjb25zdCBfX19ORVRfRVRI
RVJORVRfSCA9IDEKK2NvbnN0IF9TX0lSVVNSID0gX19fU19JUkVBRAorY29uc3QgX0lGTEFfWERQ
X0ZEID0gMQorY29uc3QgX0lQVjZfTVRVID0gMjQKK2NvbnN0IF9GU19YRkxBR19OT0FUSU1FID0g
MHgwMDAwMDA0MAorY29uc3QgX0ZTX0pPVVJOQUxfREFUQV9GTCA9IDB4MDAwMDQwMDAKK2NvbnN0
IF9fX05SX2NhcGdldCA9IDEyNQorY29uc3QgX1JUTl9BTllDQVNUID0gNAorY29uc3QgX1BPTExf
SFVQID0gNgorY29uc3QgX0hBVkVfR0VUSVBJTkZPID0gMQorY29uc3QgX01TX1VOQklOREFCTEUg
PSAxMzEwNzIKK2NvbnN0IF9fU1RBVF9WRVJfS0VSTkVMID0gMAorY29uc3QgX1BSX01DRV9LSUxM
ID0gMzMKK2NvbnN0IF9fUE9TSVhfVjZfTFBCSUdfT0ZGQklHID0gLTEKK2NvbnN0IF9BUlBIUkRf
RkNBTCA9IDc4NQorY29uc3QgX1NfSUZDSFIgPSBfX19TX0lGQ0hSCitjb25zdCBfTUNBU1RfQkxP
Q0tfU09VUkNFID0gNDMKK2NvbnN0IF9TWVNfZ2V0Z3JvdXBzID0gX19fTlJfZ2V0Z3JvdXBzCitj
b25zdCBfX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbyA9IDI5NworY29uc3QgX1VJTlQzMl9NQVggPSAo
NDI5NDk2NzI5NSkKK2NvbnN0IF9USU1FX1VUQyA9IDEKK2NvbnN0IF9JTl9RX09WRVJGTE9XID0g
MHgwMDAwNDAwMAorY29uc3QgX0lGTEFfQlJQT1JUX0hPTERfVElNRVIgPSAyMworY29uc3QgX0lG
TEFfSU5FVDZfQ0FDSEVJTkZPID0gNQorY29uc3QgX1RJTUVSX0FCU1RJTUUgPSAxCitjb25zdCBf
TUFQX0ZJWEVEID0gMHgxMAorY29uc3QgX0ZfT1dORVJfVElEID0gMAorY29uc3QgX19TQ19DTE9D
S19TRUxFQ1RJT04gPSAxMzcKK2NvbnN0IF9IQVZFX0ZDSE1PREFUID0gMQorY29uc3QgX19DU19Q
T1NJWF9WN19MUEJJR19PRkZCSUdfQ0ZMQUdTID0gMTE0NAorY29uc3QgX0FUX1NUQVRYX1NZTkNf
QVNfU1RBVCA9IDB4MDAwMAorY29uc3QgX1BPUlRfVkRQX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9S
RVNPVVJDRVMgPSAyCitjb25zdCBfVENQX1RJTUVfV0FJVCA9IDYKK2NvbnN0IF9CUEZfU1QgPSAw
eDAyCitjb25zdCBfX1BPU0lYX1NQT1JBRElDX1NFUlZFUiA9IC0xCitjb25zdCBfQUZfU0VDVVJJ
VFkgPSBfUEZfU0VDVVJJVFkKK2NvbnN0IF9QRl9YMjUgPSA5Citjb25zdCBfUFRSQUNFX0FSQ0hf
UFJDVEwgPSAzMAorY29uc3QgX0VTT0NLVE5PU1VQUE9SVCA9IDk0Citjb25zdCBfVElPQ0dTRVJJ
QUwgPSAweDU0MUUKK2NvbnN0IF9TWVNfbWJpbmQgPSBfX19OUl9tYmluZAorY29uc3QgX0lGTEFf
VkZfVkxBTiA9IDIKK2NvbnN0IF9TWVNfcGtleV9tcHJvdGVjdCA9IF9fX05SX3BrZXlfbXByb3Rl
Y3QKK2NvbnN0IF9JRkFfQlJPQURDQVNUID0gNAorY29uc3QgX0JQRl9SU0ggPSAweDcwCitjb25z
dCBfSUZMQV9CUl9NQ0FTVF9IQVNIX0VMQVNUSUNJVFkgPSAyNgorY29uc3QgX1JUQVhfV0lORE9X
ID0gMworY29uc3QgX01TX1NJTEVOVCA9IDMyNzY4Citjb25zdCBfU0NNX1dJRklfU1RBVFVTID0g
X1NPX1dJRklfU1RBVFVTCitjb25zdCBfX1NDX0ZJTEVfQVRUUklCVVRFUyA9IDE0NgorY29uc3Qg
X19QT1NJWF9TRU1fVkFMVUVfTUFYID0gMzI3NjcKK2NvbnN0IF9fX0ZMVDY0WF9NSU5fRVhQX18g
PSAoLTE2MzgxKQorY29uc3QgX1BSSXVGQVNUOCA9ICJ1IgorY29uc3QgX19fdGltZXJfdF9kZWZp
bmVkID0gMQorY29uc3QgX19QT1NJWF9IT1NUX05BTUVfTUFYID0gMjU1Citjb25zdCBfVENQX0ZB
U1RPUEVOID0gMjMKK2NvbnN0IF9fU0NfU0lHUVVFVUVfTUFYID0gMzQKK2NvbnN0IF9JT0NfT1VU
ID0gKF9fSU9DX1JFQUQgPDwgX19JT0NfRElSU0hJRlQpCitjb25zdCBfRU1MSU5LID0gMzEKK2Nv
bnN0IF9fX1dDT1JFRkxBRyA9IDB4ODAKK2NvbnN0IF9FUkZLSUxMID0gMTMyCitjb25zdCBfX1VU
U05BTUVfTEVOR1RIID0gNjUKK2NvbnN0IF9TSUdfQkxPQ0sgPSAwCitjb25zdCBfU1lTX21pbmNv
cmUgPSBfX19OUl9taW5jb3JlCitjb25zdCBfRUFJX09WRVJGTE9XID0gLTEyCitjb25zdCBfQUZf
TkZDID0gX1BGX05GQworY29uc3QgX1NZU19nZXRwcGlkID0gX19fTlJfZ2V0cHBpZAorY29uc3Qg
X01BQ1ZMQU5fRkxBR19OT1BST01JU0MgPSAxCitjb25zdCBfSVBPUFRfU0VDVVJfTU1NTSA9IDB4
YmM0ZAorY29uc3QgX0lGTEFfTUFYX01UVSA9IDUxCitjb25zdCBfX19OUl9nZXR4YXR0ciA9IDE5
MQorY29uc3QgX19TQ18yX0NfREVWID0gNDgKK2NvbnN0IF9OREFfTExBRERSID0gMgorY29uc3Qg
X0lQVjZfVFJBTlNQQVJFTlQgPSA3NQorY29uc3QgX19fTlJfbXByb3RlY3QgPSAxMAorY29uc3Qg
X1NIVVRfUkRXUiA9IDIKK2NvbnN0IF9TSU9DU0lGTUVUUklDID0gMHg4OTFlCitjb25zdCBfX1ND
X0FJT19MSVNUSU9fTUFYID0gMjMKK2NvbnN0IF9NQVBfREVOWVdSSVRFID0gMHgwMDgwMAorY29u
c3QgX1NJT0NTUEdSUCA9IDB4ODkwMgorY29uc3QgX1NJX0FTWU5DSU8gPSAtNAorY29uc3QgX1RV
TlNFVElGRl92YWwgPSAxMDc0MDI1Njc0Citjb25zdCBfSUZMQV9JRkFMSUFTID0gMjAKK2NvbnN0
IF9QVFJBQ0VfU0VDQ09NUF9HRVRfTUVUQURBVEEgPSAxNjkwOQorY29uc3QgX19fR0NDX0lFQ181
NTkgPSAyCitjb25zdCBfUlRGX0xJTktSVCA9IDB4MDAxMDAwMDAKK2NvbnN0IF9TWVNfbW92ZV9w
YWdlcyA9IF9fX05SX21vdmVfcGFnZXMKK2NvbnN0IF9TS0ZfQURfVkxBTl9UQUdfUFJFU0VOVCA9
IDQ4Citjb25zdCBfSEFWRV9MREVYUEwgPSAxCitjb25zdCBfX19OUl9wcmVhZHYyID0gMzI3Citj
b25zdCBfX19OUl9jcmVhdGVfbW9kdWxlID0gMTc0Citjb25zdCBfTUFDVkxBTl9NT0RFX0JSSURH
RSA9IDQKK2NvbnN0IF9EVF9ESVIgPSA0Citjb25zdCBfU1RBX1BQU1NJR05BTCA9IDB4MDEwMAor
Y29uc3QgX1NZU19zZXRmc2dpZCA9IF9fX05SX3NldGZzZ2lkCitjb25zdCBfX19STElNSVRfUlRU
SU1FID0gMTUKK2NvbnN0IF9fU0NfMl9WRVJTSU9OID0gNDYKK2NvbnN0IF9IQVZFX09QRU42NCA9
IDEKK2NvbnN0IF9UUkFQX0JSS1BUID0gMQorY29uc3QgX05JX0RHUkFNID0gMTYKK2NvbnN0IF9f
U0NfREVWSUNFX1NQRUNJRklDID0gMTQxCitjb25zdCBfSVBGUkFHVFRMID0gNjAKK2NvbnN0IF9f
U0NfTkxfTVNHTUFYID0gMTIxCitjb25zdCBfU1lTX3NjaGVkX3NldGF0dHIgPSBfX19OUl9zY2hl
ZF9zZXRhdHRyCitjb25zdCBfUFJfU0VUX01NX0VORF9EQVRBID0gNAorY29uc3QgX1JUQVhfQURW
TVNTID0gOAorY29uc3QgX1NPTF9SQVcgPSAyNTUKK2NvbnN0IF9MT0NLX0VYID0gMgorY29uc3Qg
X19fTlJfbXVubWFwID0gMTEKK2NvbnN0IF9fX0dDQ19BVE9NSUNfTExPTkdfTE9DS19GUkVFID0g
MgorY29uc3QgX19TQ19QSFlTX1BBR0VTID0gODUKK2NvbnN0IF9GU19LRVlfREVTQ19QUkVGSVhf
U0laRSA9IDgKK2NvbnN0IF9TWVNfcmVtYXBfZmlsZV9wYWdlcyA9IF9fX05SX3JlbWFwX2ZpbGVf
cGFnZXMKK2NvbnN0IF9NU19TWU5DID0gNAorY29uc3QgX0ZfVU5MQ0sgPSAyCitjb25zdCBfUFJf
R0VUX0ZQRU1VID0gOQorY29uc3QgX19fTlJfcmVtYXBfZmlsZV9wYWdlcyA9IDIxNgorY29uc3Qg
X0lQT1BUX05VTUJFUl9NQVNLID0gMHgxZgorY29uc3QgX1NZU19zZXR1aWQgPSBfX19OUl9zZXR1
aWQKK2NvbnN0IF9JUF9QQVNTU0VDID0gMTgKK2NvbnN0IF9TWVNfc29ja2V0cGFpciA9IF9fX05S
X3NvY2tldHBhaXIKK2NvbnN0IF9ORFRQQV9MT0NLVElNRSA9IDE1Citjb25zdCBfVENQX0NPT0tJ
RV9NSU4gPSA4Citjb25zdCBfUlRNU0dfQVJfRkFJTEVEID0gMHg1MQorY29uc3QgX0lMTF9CQURT
VEsgPSA4Citjb25zdCBfQVJQT1BfUkVQTFkgPSAyCitjb25zdCBfSEFWRV9TVFJJTkdfSCA9IDEK
K2NvbnN0IF9JTlRfRkFTVDhfTUFYID0gKDEyNykKK2NvbnN0IF9fX05SX19zeXNjdGwgPSAxNTYK
K2NvbnN0IF9SVEZfQlJPQURDQVNUID0gMHgxMDAwMDAwMAorY29uc3QgX1BGX0tDTSA9IDQxCitj
b25zdCBfX1BDX01BWF9JTlBVVCA9IDIKK2NvbnN0IF9JTl9NT0RJRlkgPSAweDAwMDAwMDAyCitj
b25zdCBfU0lHUVVJVCA9IDMKK2NvbnN0IF9UQ1BfQ09SSyA9IDMKK2NvbnN0IF9TWVNfcmVtb3Zl
eGF0dHIgPSBfX19OUl9yZW1vdmV4YXR0cgorY29uc3QgX19fRkxUX0VQU0lMT05fXyA9IDEuMQor
Y29uc3QgX19fVUlOVDMyX01BWF9fID0gMHhmZmZmZmZmZgorY29uc3QgX19fTlJfZmNob3duID0g
OTMKK2NvbnN0IF9SVE5MR1JQX0xJTksgPSAxCitjb25zdCBfX1NDX1RSQUNFX0xPRyA9IDE4NAor
Y29uc3QgX1RDUF9LRUVQSU5UVkwgPSA1Citjb25zdCBfUFJfR0VUX0tFRVBDQVBTID0gNworY29u
c3QgX0lOVF9MRUFTVDMyX01BWCA9ICgyMTQ3NDgzNjQ3KQorY29uc3QgX19fTERCTF9NSU5fRVhQ
X18gPSAoLTE2MzgxKQorY29uc3QgX1NDTmkzMiA9ICJpIgorY29uc3QgX19fTlJfcmVuYW1lID0g
ODIKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVNFQ0NPTVAgPSAxMjgKK2NvbnN0IF9JTl9JR05PUkVE
ID0gMHgwMDAwODAwMAorY29uc3QgX0JQRl9JTU0gPSAweDAwCitjb25zdCBfSUZMQV9WRl9UUlVT
VCA9IDkKK2NvbnN0IF9JUFBST1RPX01IID0gMTM1Citjb25zdCBfSUZMQV9WWExBTl9MSU5LID0g
MworY29uc3QgX0VTSFVURE9XTiA9IDEwOAorY29uc3QgX1NPTF9QQUNLRVQgPSAyNjMKK2NvbnN0
IF9fX05SX2luaXRfbW9kdWxlID0gMTc1Citjb25zdCBfQ0xPTkVfTkVXTlMgPSAweDAwMDIwMDAw
Citjb25zdCBfUlRQUk9UX01ST1VURUQgPSAxNworY29uc3QgX19TQ19TU19SRVBMX01BWCA9IDI0
MQorY29uc3QgX0dUUF9ST0xFX0dHU04gPSAwCitjb25zdCBfU1lTX3RydW5jYXRlID0gX19fTlJf
dHJ1bmNhdGUKK2NvbnN0IF9fX01BQ1NFQ19WQUxJREFURV9FTkQgPSAzCitjb25zdCBfWDg2X0VG
TEFHU19WSUZfQklUID0gMTkKK2NvbnN0IF9fU0NfTVVMVElfUFJPQ0VTUyA9IDE1MAorY29uc3Qg
X0lQUFJPVE9fUElNID0gMTAzCitjb25zdCBfQjE1MDAwMDAgPSAwMDEwMDEyCitjb25zdCBfX19O
Ul9wd3JpdGV2ID0gMjk2Citjb25zdCBfU09fUkVVU0VBRERSID0gMgorY29uc3QgX05DQyA9IDgK
K2NvbnN0IF9UQ1BfQ0FfTG9zcyA9IDQKK2NvbnN0IF9NU19NR0NfTVNLID0gMHhmZmZmMDAwMAor
Y29uc3QgX1NfSVhPVEggPSAoX1NfSVhHUlAgPj4gMykKK2NvbnN0IF9TT0xfTkVUTElOSyA9IDI3
MAorY29uc3QgX0lMTF9QUlZSRUcgPSA2Citjb25zdCBfX19GTFQzMlhfTUFOVF9ESUdfXyA9IDUz
Citjb25zdCBfU0NOdUxFQVNUOCA9ICJoaHUiCitjb25zdCBfVUxMT05HX01BWCA9IChfTExPTkdf
TUFYICogMiArIDEpCitjb25zdCBfSUZMQV9WWExBTl9BR0VJTkcgPSA4Citjb25zdCBfUFJfU1BF
Q19QUkNUTCA9ICgxIDw8IDApCitjb25zdCBfUlRNX0RFTENIQUlOID0gMTAxCitjb25zdCBfX0lP
Q19TSVpFU0hJRlQgPSAoX19JT0NfVFlQRVNISUZUK19fSU9DX1RZUEVCSVRTKQorY29uc3QgX19f
TlJfbmZzc2VydmN0bCA9IDE4MAorY29uc3QgX19fRkxUX01JTl8xMF9FWFBfXyA9ICgtMzcpCitj
b25zdCBfSUZMQV9YRFBfUFJPR19JRCA9IDQKK2NvbnN0IF9fQklUU19UWVBFU19TVFJVQ1RfU0NI
RURfUEFSQU0gPSAxCitjb25zdCBfQVJQSFJEX1JTUlZEID0gMjYwCitjb25zdCBfX1BPU0lYMl9C
Q19CQVNFX01BWCA9IDk5Citjb25zdCBfUEFDS0VUX0FERF9NRU1CRVJTSElQID0gMQorY29uc3Qg
X19fTlJfcnRfc2lncGVuZGluZyA9IDEyNworY29uc3QgX19fT19QQVRIID0gMDEwMDAwMDAwCitj
b25zdCBfRVRIX1BfQlBRID0gMHgwOEZGCitjb25zdCBfVENQX1RJTUVTVEFNUCA9IDI0Citjb25z
dCBfU0lPQ1NJRlBGTEFHUyA9IDB4ODkzNAorY29uc3QgX1JUTV9ORVdMSU5LID0gMTYKK2NvbnN0
IF9JRkxBX0lORk9fWFNUQVRTID0gMworY29uc3QgX19QT1NJWF9DUFVUSU1FID0gMAorY29uc3Qg
X1BBQ0tFVF9GQVNUUk9VVEUgPSA2Citjb25zdCBfSU5UX0xFQVNUNjRfV0lEVEggPSA2NAorY29u
c3QgX1BGX0lQWCA9IDQKK2NvbnN0IF9OVURfUEVSTUFORU5UID0gMHg4MAorY29uc3QgX19fTlJf
aW9fZGVzdHJveSA9IDIwNworY29uc3QgX1JUQVhfUlRUID0gNAorY29uc3QgX19fUkxJTUlUX1JT
UyA9IDUKK2NvbnN0IF9fX05SX2dldHRpZCA9IDE4NgorY29uc3QgX19fTlJfaW9wZXJtID0gMTcz
Citjb25zdCBfU19JRkJMSyA9IF9fX1NfSUZCTEsKK2NvbnN0IF9TQ054RkFTVDggPSAiaGh4Igor
Y29uc3QgX19fTlJfdHV4Y2FsbCA9IDE4NAorY29uc3QgX19fT19ESVJFQ1RPUlkgPSAwMjAwMDAw
Citjb25zdCBfU1lTX2Nvbm5lY3QgPSBfX19OUl9jb25uZWN0Citjb25zdCBfVENQX0NDX0lORk8g
PSAyNgorY29uc3QgX1BBQ0tBR0VfU1RSSU5HID0gInBhY2thZ2UtdW51c2VkIHZlcnNpb24tdW51
c2VkIgorY29uc3QgX1NZU19zY2hlZF9nZXRhdHRyID0gX19fTlJfc2NoZWRfZ2V0YXR0cgorY29u
c3QgX19QT1NJWDJfQkNfU0NBTEVfTUFYID0gOTkKK2NvbnN0IF9QVFJBQ0VfUE9LRVRFWFQgPSA0
Citjb25zdCBfRVRIX1BfREVDID0gMHg2MDAwCitjb25zdCBfU1lTX2ZsaXN0eGF0dHIgPSBfX19O
Ul9mbGlzdHhhdHRyCitjb25zdCBfSVBWTEFOX0ZfUFJJVkFURSA9IDB4MDEKK2NvbnN0IF9OTE1T
R19PVkVSUlVOID0gMHg0Citjb25zdCBfTkVUTElOS19JUDZfRlcgPSAxMworY29uc3QgX0lGTEFf
QlJfQUdFSU5HX1RJTUUgPSA0Citjb25zdCBfVENTRVRTID0gMHg1NDAyCitjb25zdCBfUlRNX0Zf
RVFVQUxJWkUgPSAweDQwMAorY29uc3QgX0hBVkVfRFVQMyA9IDEKK2NvbnN0IF9CUklER0VfTU9E
RV9IQUlSUElOID0gMQorY29uc3QgX1RDU0VUWCA9IDB4NTQzMworY29uc3QgX1ZTVVNQID0gMTAK
K2NvbnN0IF9fQklUU19TT0NLQUREUl9IID0gMQorY29uc3QgX1NJR1BPTEwgPSAyOQorY29uc3Qg
X1BUUkFDRV9FVkVOVF9TVE9QID0gMTI4Citjb25zdCBfQVRfU1lNTElOS19OT0ZPTExPVyA9IDB4
MTAwCitjb25zdCBfSEFWRV9TWVNfVkZTX0ggPSAxCitjb25zdCBfUEZfS0VZID0gMTUKK2NvbnN0
IF9JRkxBX1NUQVRTX0xJTktfWFNUQVRTX1NMQVZFID0gMworY29uc3QgX05MX01NQVBfTVNHX0FM
SUdOTUVOVCA9IF9OTE1TR19BTElHTlRPCitjb25zdCBfSUZMQV9WWExBTl9VRFBfQ1NVTSA9IDE4
Citjb25zdCBfX19OUl93YWl0NCA9IDYxCitjb25zdCBfSUZMQV9STU5FVF9GTEFHUyA9IDIKK2Nv
bnN0IF9TT0xfUkRTID0gMjc2Citjb25zdCBfUlRBWF9GRUFUVVJFX01BU0sgPSAoX1JUQVhfRkVB
VFVSRV9FQ04gfCBfUlRBWF9GRUFUVVJFX1NBQ0sgfCBfUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCB8
IF9SVEFYX0ZFQVRVUkVfQUxMRlJBRykKK2NvbnN0IF9SVE1fR0VUTkVUQ09ORiA9IDgyCitjb25z
dCBfX19GTFQ2NF9NQVhfRVhQX18gPSAxMDI0Citjb25zdCBfVElPQ1NQR1JQX3ZhbCA9IDIxNTIw
Citjb25zdCBfSVBQUk9UT19SU1ZQID0gNDYKK2NvbnN0IF9SVE1fR0VUTlNJRCA9IDkwCitjb25z
dCBfT05MQ1IgPSAwMDAwMDA0Citjb25zdCBfX1NDX1BJSV9TT0NLRVQgPSA1NQorY29uc3QgX0FS
UEhSRF9UVU5ORUwgPSA3NjgKK2NvbnN0IF9IQVZFX01JTkNPUkUgPSAxCitjb25zdCBfX19IQVZF
X0dFTkVSSUNfU0VMRUNUSU9OID0gMQorY29uc3QgX1RDUF9LRUVQQ05UID0gNgorY29uc3QgX1RD
UF9TWU5fUkVDViA9IDMKK2NvbnN0IF9OTE1fRl9BUFBFTkQgPSAweDgwMAorY29uc3QgX1NZU19t
bWFwID0gX19fTlJfbW1hcAorY29uc3QgX1NZU19jbG9ja19hZGp0aW1lID0gX19fTlJfY2xvY2tf
YWRqdGltZQorY29uc3QgX1JUTkxHUlBfVEMgPSA0Citjb25zdCBfQURKX05BTk8gPSAweDIwMDAK
K2NvbnN0IF9ORVRMSU5LX1RYX1JJTkcgPSA3Citjb25zdCBfU1lTX2V2ZW50ZmQgPSBfX19OUl9l
dmVudGZkCitjb25zdCBfX1NDX1RSQUNFX05BTUVfTUFYID0gMjQzCitjb25zdCBfU1RBVFhfQVRJ
TUUgPSAweDAwMjAKK2NvbnN0IF9fQ1NfTEZTX0xERkxBR1MgPSAxMDAxCitjb25zdCBfX19OUl9z
ZXRyZWdpZCA9IDExNAorY29uc3QgX0VPV05FUkRFQUQgPSAxMzAKK2NvbnN0IF9fX05SX3JlYWRs
aW5rID0gODkKK2NvbnN0IF9fX3N0YWNrX3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9fX0ZMVDY0WF9N
QVhfMTBfRVhQX18gPSA0OTMyCitjb25zdCBfUlRTSUdfTUFYID0gMzIKK2NvbnN0IF9fX1NJWkVP
Rl9MT05HX0RPVUJMRV9fID0gMTYKK2NvbnN0IF9WVDAgPSAwMDAwMDAwCitjb25zdCBfVlQxID0g
MDA0MDAwMAorY29uc3QgX0lOVF9GQVNUMTZfTUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4MDcpCitj
b25zdCBfWDg2X0NSMF9UU19CSVQgPSAzCitjb25zdCBfX19OUl9zeXNmcyA9IDEzOQorY29uc3Qg
X1g4Nl9DUjRfUEFFX0JJVCA9IDUKK2NvbnN0IF9fUE9TSVhfVFpOQU1FX01BWCA9IDYKK2NvbnN0
IF9TWVNfb3BlbiA9IF9fX05SX29wZW4KK2NvbnN0IF9TSU9DU0lGRU5DQVAgPSAweDg5MjYKK2Nv
bnN0IF9UQ1BfQ0FfRGlzb3JkZXIgPSAxCitjb25zdCBfX19XT1JEU0laRSA9IDY0Citjb25zdCBf
SVBfTUYgPSAweDIwMDAKK2NvbnN0IF9QUk9UX0dST1dTVVAgPSAweDAyMDAwMDAwCitjb25zdCBf
UlRGX0FERFJDTEFTU01BU0sgPSAweEY4MDAwMDAwCitjb25zdCBfX19hbWQ2NCA9IDEKK2NvbnN0
IF9BUlBIUkRfUFJPTkVUID0gNAorY29uc3QgX0I5MjE2MDAgPSAwMDEwMDA3Citjb25zdCBfRUFE
RFJJTlVTRSA9IDk4Citjb25zdCBfRlNfRkxfVVNFUl9WSVNJQkxFID0gMHgwMDAzREZGRgorY29u
c3QgX19fTlJfdGltZXJmZF9nZXR0aW1lID0gMjg3Citjb25zdCBfQ0xPTkVfTkVXUElEID0gMHgy
MDAwMDAwMAorY29uc3QgX1JUTkxHUlBfSVBWNl9SVUxFID0gMTkKK2NvbnN0IF9FVEhFUl9NSU5f
TEVOID0gKF9FVEhfWkxFTiArIF9FVEhFUl9DUkNfTEVOKQorY29uc3QgX1BGX1JPU0UgPSAxMQor
Y29uc3QgX0lGTEFfUE9SVF9TRUxGID0gMjUKK2NvbnN0IF9MSU5LX1hTVEFUU19UWVBFX0JSSURH
RSA9IDEKK2NvbnN0IF9fU1lTX1NUQVRfSCA9IDEKK2NvbnN0IF9JRkxBX0JSX0dST1VQX0FERFIg
PSAyMAorY29uc3QgX0ZfU0VUU0lHID0gX19fRl9TRVRTSUcKK2NvbnN0IF9XU1RPUFBFRCA9IDIK
K2NvbnN0IF9fUENfVkRJU0FCTEUgPSA4Citjb25zdCBfX1NDX01RX09QRU5fTUFYID0gMjcKK2Nv
bnN0IF9YODZfRUZMQUdTX1BGX0JJVCA9IDIKK2NvbnN0IF9SVE1fTkVXQUREUkxBQkVMID0gNzIK
K2NvbnN0IF9TT0NLX1BBQ0tFVCA9IDEwCitjb25zdCBfX19OUl9tcV91bmxpbmsgPSAyNDEKK2Nv
bnN0IF9SVE1HUlBfTkVJR0ggPSA0Citjb25zdCBfUEZfV0FOUElQRSA9IDI1Citjb25zdCBfUlRN
X0RFTEFERFIgPSAyMQorY29uc3QgX0xPQ0tfVU4gPSA4Citjb25zdCBfUE9MTF9JTiA9IDEKK2Nv
bnN0IF9NQUNWTEFOX01BQ0FERFJfRkxVU0ggPSAyCitjb25zdCBfUlRQUk9UX0ROUk9VVEVEID0g
MTMKK2NvbnN0IF9NQUNWTEFOX01PREVfU09VUkNFID0gMTYKK2NvbnN0IF9TWVNfc2V0cGdpZCA9
IF9fX05SX3NldHBnaWQKK2NvbnN0IF9fX0lGTEFfR0VORVZFX01BWCA9IDEyCitjb25zdCBfU0lP
Q0FERE1VTFRJID0gMHg4OTMxCitjb25zdCBfUlRNU0dfTkVXUk9VVEUgPSAweDIxCitjb25zdCBf
RkZJX1RZUEVfQ09NUExFWCA9IDE1Citjb25zdCBfSEFWRV9DT1NMID0gMQorY29uc3QgX05JX01B
WEhPU1QgPSAxMDI1Citjb25zdCBfSEFWRV9TWVNfTU9VTlRfSCA9IDEKK2NvbnN0IF9OT19SRUNP
VkVSWSA9IDMKK2NvbnN0IF9JRkxBX1ZYTEFOX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxBX0JPTkRf
TUlJTU9OID0gMworY29uc3QgX0lQREVGVFRMID0gNjQKK2NvbnN0IF9SVEFYX01UVSA9IDIKK2Nv
bnN0IF9FTkVUUkVTRVQgPSAxMDIKK2NvbnN0IF9fX0ZMVF9IQVNfUVVJRVRfTkFOX18gPSAxCitj
b25zdCBfSUZMQV9JTkVUX0NPTkYgPSAxCitjb25zdCBfU0lHX0FUT01JQ19NQVggPSAoMjE0NzQ4
MzY0NykKK2NvbnN0IF9TVEFfUFBTRlJFUSA9IDB4MDAwMgorY29uc3QgX0lOX0lTRElSID0gMHg0
MDAwMDAwMAorY29uc3QgX0lDTVA2X0VDSE9fUkVQTFkgPSAxMjkKK2NvbnN0IF9UQ1hPTkMgPSAw
eDU0MEEKK2NvbnN0IF9SVENGX01BU1EgPSAweDAwNDAwMDAwCitjb25zdCBfQUZfQlJJREdFID0g
X1BGX0JSSURHRQorY29uc3QgX1BSX1RJTUlOR19USU1FU1RBTVAgPSAxCitjb25zdCBfSVBWNl9Q
TVRVRElTQ19PTUlUID0gNQorY29uc3QgX0lMTF9JTExUUlAgPSA0Citjb25zdCBfSVBPUFRfUkVT
RVJWRUQyID0gMHg2MAorY29uc3QgX19fTkRVU0VST1BUX01BWCA9IDIKK2NvbnN0IF9TWU5DX0ZJ
TEVfUkFOR0VfV1JJVEUgPSAyCitjb25zdCBfU1RBX0lOUyA9IDB4MDAxMAorY29uc3QgX19QT1NJ
WDJfQ09MTF9XRUlHSFRTX01BWCA9IDIKK2NvbnN0IF9fWE9QRU5fWENVX1ZFUlNJT04gPSA0Citj
b25zdCBfRU5PQ1NJID0gNTAKK2NvbnN0IF9YQVRUUl9MSVNUX01BWCA9IDY1NTM2Citjb25zdCBf
WDg2X0NSMF9ORV9CSVQgPSA1Citjb25zdCBfU1lTX3BzZWxlY3Q2ID0gX19fTlJfcHNlbGVjdDYK
K2NvbnN0IF9UT1NUT1AgPSAwMDAwNDAwCitjb25zdCBfVElPQ1BLVF9TVE9QID0gNAorY29uc3Qg
X0lGTEFfQlJQT1JUX1BST1RFQ1QgPSA2Citjb25zdCBfX1NDX1NJR05BTFMgPSAxNTgKK2NvbnN0
IF9TWVNfc2V0eGF0dHIgPSBfX19OUl9zZXR4YXR0cgorY29uc3QgX1JFTkFNRV9XSElURU9VVCA9
ICgxIDw8IDIpCitjb25zdCBfSUZBX0ZfTk9EQUQgPSAweDAyCitjb25zdCBfX0xBUkdFRklMRV9T
T1VSQ0UgPSAxCitjb25zdCBfX19XSU5UX01BWF9fID0gMHhmZmZmZmZmZgorY29uc3QgX0VQRk5P
U1VQUE9SVCA9IDk2Citjb25zdCBfU1lTX3NpZ2FsdHN0YWNrID0gX19fTlJfc2lnYWx0c3RhY2sK
K2NvbnN0IF9TQ05kTEVBU1QzMiA9ICJkIgorY29uc3QgX0lOVDE2X1dJRFRIID0gMTYKK2NvbnN0
IF9SVE5IX0ZfT05MSU5LID0gNAorY29uc3QgX0dBSV9XQUlUID0gMAorY29uc3QgX19fTlJfbG9v
a3VwX2Rjb29raWUgPSAyMTIKK2NvbnN0IF9fX05SX21pbmNvcmUgPSAyNworY29uc3QgX0FSUEhS
RF9UVU5ORUw2ID0gNzY5Citjb25zdCBfU09MX1JYUlBDID0gMjcyCitjb25zdCBfX1BDXzJfU1lN
TElOS1MgPSAyMAorY29uc3QgX0lDTVA2X0RTVF9VTlJFQUNIX05PUk9VVEUgPSAwCitjb25zdCBf
RE5fQVRUUklCID0gMHgwMDAwMDAyMAorY29uc3QgX1BUUkFDRV9TRVRSRUdTID0gMTMKK2NvbnN0
IF9fX0xQNjRfXyA9IDEKK2NvbnN0IF9GX1NFQUxfU0VBTCA9IDB4MDAwMQorY29uc3QgX01MRF9M
SVNURU5FUl9RVUVSWSA9IDEzMAorY29uc3QgX1NZU19pbm90aWZ5X2luaXQxID0gX19fTlJfaW5v
dGlmeV9pbml0MQorY29uc3QgX19fTlJfYWNjdCA9IDE2MworY29uc3QgX01TR19GQVNUT1BFTiA9
IDUzNjg3MDkxMgorY29uc3QgX19fc2lnZXZlbnRfdF9kZWZpbmVkID0gMQorY29uc3QgX1JUTkxH
UlBfSVBWNl9NUk9VVEVfUiA9IDMxCitjb25zdCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19M
REZMQUdTID0gMTEyMQorY29uc3QgX0lGTEFfTUFDVkxBTl9VTlNQRUMgPSAwCitjb25zdCBfUEFD
S0VUX0FVWERBVEEgPSA4Citjb25zdCBfSUZMQV9CT05EX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxB
X0dFTkVWRV9MQUJFTCA9IDExCitjb25zdCBfUFJfVU5BTElHTl9TSUdCVVMgPSAyCitjb25zdCBf
Rl9UTE9DSyA9IDIKK2NvbnN0IF9TVEFUWF9UWVBFID0gMHgwMDAxCitjb25zdCBfX1BPU0lYX1NQ
SU5fTE9DS1MgPSAyMDA4MDkKK2NvbnN0IF9QRl9SWFJQQyA9IDMzCitjb25zdCBfVENQX0tFRVBJ
RExFID0gNAorY29uc3QgX19fVUlOVF9GQVNUNjRfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYK
K2NvbnN0IF9fX05SX2xsaXN0eGF0dHIgPSAxOTUKK2NvbnN0IF9fX05SX3JzZXEgPSAzMzQKK2Nv
bnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAwCitjb25zdCBfT19BQ0NNT0RF
ID0gMDAwMworY29uc3QgX1RJT0NNX1JORyA9IDB4MDgwCitjb25zdCBfX19OUl9rZXhlY19maWxl
X2xvYWQgPSAzMjAKK2NvbnN0IF9JTlJfT1BFTl9DVVIgPSAxMDI0Citjb25zdCBfX19OUl9ybWRp
ciA9IDg0Citjb25zdCBfRVRIX1BfQVgyNSA9IDB4MDAwMgorY29uc3QgX19CSVRTX1NJR0lORk9f
Q09OU1RTX0FSQ0hfSCA9IDEKK2NvbnN0IF9IQVZFX0lOVFRZUEVTX0ggPSAxCitjb25zdCBfRURF
U1RBRERSUkVRID0gODkKK2NvbnN0IF9fX05HUkVHID0gMjMKK2NvbnN0IF9SRUdfUjEwID0gMgor
Y29uc3QgX1JFR19SMTEgPSAzCitjb25zdCBfSVBWNl9GUkVFQklORCA9IDc4Citjb25zdCBfUkVH
X1IxMyA9IDUKK2NvbnN0IF9fX2hhdmVfcHRocmVhZF9hdHRyX3QgPSAxCitjb25zdCBfUkVHX1Ix
NSA9IDcKK2NvbnN0IF9OSV9NQVhTRVJWID0gMzIKK2NvbnN0IF9BUlBIUkRfSERMQyA9IF9BUlBI
UkRfQ0lTQ08KK2NvbnN0IF9fX0dMSUJDX1VTRV9JRUNfNjA1NTlfQkZQX0VYVCA9IDEKK2NvbnN0
IF9QRl9VTklYID0gX1BGX0xPQ0FMCitjb25zdCBfX19TWVNDQUxMX1dPUkRTSVpFID0gNjQKK2Nv
bnN0IF9TWVNfY3JlYXQgPSBfX19OUl9jcmVhdAorY29uc3QgX1RJT0NTQ1RUWSA9IDB4NTQwRQor
Y29uc3QgX0ZGSV9MQVNUX0FCSSA9IDgKK2NvbnN0IF9OREFfTUFTVEVSID0gOQorY29uc3QgX0VU
SF9QX0lFRUVQVVAgPSAweDBhMDAKK2NvbnN0IF9QRl9JUkRBID0gMjMKK2NvbnN0IF9IQVZFX1NZ
U19USU1FWF9IID0gMQorY29uc3QgX19fRkxUX0RFQ0lNQUxfRElHX18gPSA5Citjb25zdCBfX19O
Ul90aW1lcl9jcmVhdGUgPSAyMjIKK2NvbnN0IF9TWVNfZ2V0cGdpZCA9IF9fX05SX2dldHBnaWQK
K2NvbnN0IF9GRklfNjRfQklUX01BWCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDcKK2NvbnN0IF9JRkxB
X01BQ1NFQ19JQ1ZfTEVOID0gMworY29uc3QgX0IxODAwID0gMDAwMDAxMgorY29uc3QgX0JTMCA9
IDAwMDAwMDAKK2NvbnN0IF9CUzEgPSAwMDIwMDAwCitjb25zdCBfX1NZU19USU1FX0ggPSAxCitj
b25zdCBfX1BPU0lYX0FSR19NQVggPSA0MDk2Citjb25zdCBfX19TQ0hBUl9XSURUSF9fID0gOAor
Y29uc3QgX19fRkxUX1JBRElYX18gPSAyCitjb25zdCBfWDg2X0NSM19QV1RfQklUID0gMworY29u
c3QgX1BPUlRfVkRQX1JFU1BPTlNFX1VOVVNFRF9WVElEID0gMworY29uc3QgX19fREVDMzJfRVBT
SUxPTl9fID0gMUUtNgorY29uc3QgX0lGTEFfVlhMQU5fTEVBUk5JTkcgPSA3Citjb25zdCBfRVBP
TExFVCA9IDIxNDc0ODM2NDgKK2NvbnN0IF9GX1NFVExLVzY0ID0gNworY29uc3QgX19fVVNFX0FU
RklMRSA9IDEKK2NvbnN0IF9TX0lSRUFEID0gX1NfSVJVU1IKK2NvbnN0IF9QVFJBQ0VfU0VURlBS
RUdTID0gMTUKK2NvbnN0IF9JRkZfUlVOTklORyA9IDY0Citjb25zdCBfSEFWRV9VVElNRU5TQVQg
PSAxCitjb25zdCBfX1BDX1NZTUxJTktfTUFYID0gMTkKK2NvbnN0IF9YODZfRUZMQUdTX1pGX0JJ
VCA9IDYKK2NvbnN0IF9GX1NFVExLNjQgPSA2Citjb25zdCBfX1BPU0lYX1BBVEhfTUFYID0gMjU2
Citjb25zdCBfSU5fQ0xBU1NBX05TSElGVCA9IDI0Citjb25zdCBfUEFDS0VUX1RJTUVTVEFNUCA9
IDE3Citjb25zdCBfX19QT1NJWF9GQURWX0RPTlRORUVEID0gNAorY29uc3QgX0lQUFJPVE9fTVRQ
ID0gOTIKK3R5cGUgX2lmYWNlIHN0cnVjdCB7fQordHlwZSBfX19sb2NhbGVfZGF0YSBzdHJ1Y3Qg
e30KK3R5cGUgdGltZXZhbF9zZWNfdCBpbnQ2NAordHlwZSB0aW1ldmFsX3VzZWNfdCBpbnQ2NAor
dHlwZSB0aW1ldmFsIHN0cnVjdCB7IHR2X3NlYyB0aW1ldmFsX3NlY190OyB0dl91c2VjIHRpbWV2
YWxfdXNlY190OyB9CisKK2Z1bmMgKHR2ICp0aW1ldmFsKSBzZXRfdXNlYyh4IGludDMyKSB7CisJ
dHYudHZfdXNlYyA9IHRpbWV2YWxfdXNlY190KHgpCit9Cit0eXBlIHRpbWVzcGVjX3NlY190IGlu
dDY0Cit0eXBlIHRpbWVzcGVjX25zZWNfdCBpbnQ2NAordHlwZSB0aW1lc3BlYyBzdHJ1Y3QgeyB0
dl9zZWMgdGltZXNwZWNfc2VjX3Q7IHR2X25zZWMgdGltZXNwZWNfbnNlY190OyB9CisKK2Z1bmMg
KHRzICp0aW1lc3BlYykgc2V0X3NlYyh4IGludDY0KSB7CisJdHMudHZfc2VjID0gdGltZXNwZWNf
c2VjX3QoeCkKK30KKworZnVuYyAodHMgKnRpbWVzcGVjKSBzZXRfbnNlYyh4IGludDMyKSB7CisJ
dHMudHZfbnNlYyA9IHRpbWVzcGVjX25zZWNfdCh4KQorfQordHlwZSBlcG9sbGV2ZW50IHN0cnVj
dCB7IGV2ZW50cyB1aW50MzI7IGRhdGEgWzhdYnl0ZSB9Citjb25zdCBfRVBPTExFVHBvcyA9IF9F
UE9MTEVUCit0eXBlIHNlbXQgc3RydWN0IHsgX19zaXplIFszMSsxXWludDg7IEdvZHVtcF8wX2Fs
aWduIFswXWludDY0OyB9CmRpZmYgLS1naXQgYS9saWJnby9nZW5lcmF0ZWQvc2lndGFiLmdvIGIv
bGliZ28vZ2VuZXJhdGVkL3NpZ3RhYi5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4wNmI0NmFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ28vZ2VuZXJhdGVkL3NpZ3RhYi5n
bwpAQCAtMCwwICsxLDcxIEBACisvLyBHZW5lcmF0ZWQgYnkgbWtzaWd0YWIuc2guICBEbyBub3Qg
ZWRpdC4KKworcGFja2FnZSBydW50aW1lCisKK3ZhciBzaWd0YWJsZSA9IFsuLi5dc2lnVGFiVHsK
KwkwOiAgICAgICAgICB7MCwgIlNJR05PTkU6IG5vIHRyYXAifSwKKwlfU0lHSFVQOiAgICB7X1Np
Z05vdGlmeSArIF9TaWdLaWxsLCAiU0lHSFVQOiB0ZXJtaW5hbCBsaW5lIGhhbmd1cCJ9LAorCV9T
SUdJTlQ6ICAgIHtfU2lnTm90aWZ5ICsgX1NpZ0tpbGwsICJTSUdJTlQ6IGludGVycnVwdCJ9LAor
CV9TSUdRVUlUOiAgIHtfU2lnTm90aWZ5ICsgX1NpZ1Rocm93LCAiU0lHUVVJVDogcXVpdCJ9LAor
CV9TSUdJTEw6ICAgIHtfU2lnVGhyb3cgKyBfU2lnVW5ibG9jaywgIlNJR0lMTDogaWxsZWdhbCBp
bnN0cnVjdGlvbiJ9LAorCV9TSUdUUkFQOiAgIHtfU2lnVGhyb3cgKyBfU2lnVW5ibG9jaywgIlNJ
R1RSQVA6IHRyYWNlIHRyYXAifSwKKwlfU0lHQUJSVDogICB7X1NpZ05vdGlmeSArIF9TaWdUaHJv
dywgIlNJR0FCUlQ6IGFib3J0In0sCisJX1NJR0JVUzogICAge19TaWdQYW5pYyArIF9TaWdVbmJs
b2NrLCAiU0lHQlVTOiBidXMgZXJyb3IifSwKKwlfU0lHRlBFOiAgICB7X1NpZ1BhbmljICsgX1Np
Z1VuYmxvY2ssICJTSUdGUEU6IGZsb2F0aW5nLXBvaW50IGV4Y2VwdGlvbiJ9LAorCV9TSUdLSUxM
OiAgIHswLCAiU0lHS0lMTDoga2lsbCJ9LAorCV9TSUdVU1IxOiAgIHtfU2lnTm90aWZ5LCAiU0lH
VVNSMTogdXNlci1kZWZpbmVkIHNpZ25hbCAxIn0sCisJX1NJR1NFR1Y6ICAge19TaWdQYW5pYyAr
IF9TaWdVbmJsb2NrLCAiU0lHU0VHVjogc2VnbWVudGF0aW9uIHZpb2xhdGlvbiJ9LAorCV9TSUdV
U1IyOiAgIHtfU2lnTm90aWZ5LCAiU0lHVVNSMjogdXNlci1kZWZpbmVkIHNpZ25hbCAyIn0sCisJ
X1NJR1BJUEU6ICAge19TaWdOb3RpZnksICJTSUdQSVBFOiB3cml0ZSB0byBicm9rZW4gcGlwZSJ9
LAorCV9TSUdBTFJNOiAgIHtfU2lnTm90aWZ5LCAiU0lHQUxSTTogYWxhcm0gY2xvY2sifSwKKwlf
U0lHVEVSTTogICB7X1NpZ05vdGlmeSArIF9TaWdLaWxsLCAiU0lHVEVSTTogdGVybWluYXRpb24i
fSwKKwlfU0lHQ0hMRDogICB7X1NpZ05vdGlmeSArIF9TaWdVbmJsb2NrLCAiU0lHQ0hMRDogY2hp
bGQgc3RhdHVzIGhhcyBjaGFuZ2VkIn0sCisJX1NJR0NPTlQ6ICAge19TaWdOb3RpZnkgKyBfU2ln
RGVmYXVsdCwgIlNJR0NPTlQ6IGNvbnRpbnVlIn0sCisJX1NJR1NUT1A6ICAgezAsICJTSUdTVE9Q
OiBzdG9wIn0sCisJX1NJR1RTVFA6ICAge19TaWdOb3RpZnkgKyBfU2lnRGVmYXVsdCwgIlNJR1RT
VFA6IGtleWJvYXJkIHN0b3AifSwKKwlfU0lHVFRJTjogICB7X1NpZ05vdGlmeSArIF9TaWdEZWZh
dWx0LCAiU0lHVFRJTjogYmFja2dyb3VuZCByZWFkIGZyb20gdHR5In0sCisJX1NJR1RUT1U6ICAg
e19TaWdOb3RpZnkgKyBfU2lnRGVmYXVsdCwgIlNJR1RUT1U6IGJhY2tncm91bmQgd3JpdGUgdG8g
dHR5In0sCisJX1NJR1VSRzogICAge19TaWdOb3RpZnksICJTSUdVUkc6IHVyZ2VudCBjb25kaXRp
b24gb24gc29ja2V0In0sCisJX1NJR1hDUFU6ICAge19TaWdOb3RpZnksICJTSUdYQ1BVOiBjcHUg
bGltaXQgZXhjZWVkZWQifSwKKwlfU0lHWEZTWjogICB7X1NpZ05vdGlmeSwgIlNJR1hGU1o6IGZp
bGUgc2l6ZSBsaW1pdCBleGNlZWRlZCJ9LAorCV9TSUdWVEFMUk06IHtfU2lnTm90aWZ5LCAiU0lH
VlRBTFJNOiB2aXJ0dWFsIGFsYXJtIGNsb2NrIn0sCisJX1NJR1BST0Y6ICAge19TaWdOb3RpZnkg
KyBfU2lnVW5ibG9jaywgIlNJR1BST0Y6IHByb2ZpbGluZyBhbGFybSBjbG9jayJ9LAorCV9TSUdX
SU5DSDogIHtfU2lnTm90aWZ5LCAiU0lHV0lOQ0g6IHdpbmRvdyBzaXplIGNoYW5nZSJ9LAorCV9T
SUdTWVM6ICAgIHtfU2lnVGhyb3csICJTSUdTWVM6IGJhZCBzeXN0ZW0gY2FsbCJ9LAorCV9TSUdT
VEtGTFQ6ICB7X1NpZ1Rocm93ICsgX1NpZ1VuYmxvY2ssICJTSUdTVEtGTFQ6IHN0YWNrIGZhdWx0
In0sCisJX1NJR1BXUjogICAgIHtfU2lnTm90aWZ5LCAiU0lHUFdSOiBwb3dlciBmYWlsdXJlIHJl
c3RhcnQifSwKKwlfU0lHUE9MTDogICAge19TaWdOb3RpZnksICJTSUdQT0xMOiBwb2xsYWJsZSBl
dmVudCBvY2N1cnJlZCJ9LAorCTMyOiB7X1NpZ1NldFN0YWNrICsgX1NpZ1VuYmxvY2ssICJzaWdu
YWwgMzIifSwgLyogU0lHQ0FOQ0VMOyBzZWUgaXNzdWUgNjk5NyAqLworCTMzOiB7X1NpZ1NldFN0
YWNrICsgX1NpZ1VuYmxvY2ssICJzaWduYWwgMzMifSwgLyogU0lHU0VUWElEOyBzZWUgaXNzdWVz
IDM4NzEsIDk0MDAsIDEyNDk4ICovCisJMzQ6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDM0In0sCisJ
MzU6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDM1In0sCisJMzY6IHtfU2lnTm90aWZ5LCAic2lnbmFs
IDM2In0sCisJMzc6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDM3In0sCisJMzg6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDM4In0sCisJMzk6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDM5In0sCisJNDA6IHtf
U2lnTm90aWZ5LCAic2lnbmFsIDQwIn0sCisJNDE6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDQxIn0s
CisJNDI6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDQyIn0sCisJNDM6IHtfU2lnTm90aWZ5LCAic2ln
bmFsIDQzIn0sCisJNDQ6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDQ0In0sCisJNDU6IHtfU2lnTm90
aWZ5LCAic2lnbmFsIDQ1In0sCisJNDY6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDQ2In0sCisJNDc6
IHtfU2lnTm90aWZ5LCAic2lnbmFsIDQ3In0sCisJNDg6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDQ4
In0sCisJNDk6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDQ5In0sCisJNTA6IHtfU2lnTm90aWZ5LCAi
c2lnbmFsIDUwIn0sCisJNTE6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDUxIn0sCisJNTI6IHtfU2ln
Tm90aWZ5LCAic2lnbmFsIDUyIn0sCisJNTM6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDUzIn0sCisJ
NTQ6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDU0In0sCisJNTU6IHtfU2lnTm90aWZ5LCAic2lnbmFs
IDU1In0sCisJNTY6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDU2In0sCisJNTc6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDU3In0sCisJNTg6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDU4In0sCisJNTk6IHtf
U2lnTm90aWZ5LCAic2lnbmFsIDU5In0sCisJNjA6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDYwIn0s
CisJNjE6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDYxIn0sCisJNjI6IHtfU2lnTm90aWZ5LCAic2ln
bmFsIDYyIn0sCisJNjM6IHtfU2lnTm90aWZ5LCAic2lnbmFsIDYzIn0sCisJNjQ6IHtfU2lnTm90
aWZ5LCAic2lnbmFsIDY0In0sCit9CmRpZmYgLS1naXQgYS9saWJnby9nZW5lcmF0ZWQvc3lzY2Fs
bF9hcmNoLmdvIGIvbGliZ28vZ2VuZXJhdGVkL3N5c2NhbGxfYXJjaC5nbwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDhkN2FjCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ28v
Z2VuZXJhdGVkL3N5c2NhbGxfYXJjaC5nbwpAQCAtMCwwICsxLDMgQEAKK3BhY2thZ2Ugc3lzY2Fs
bAorY29uc3QgQVJDSCA9ICJhbWQ2NCIKK2NvbnN0IE9TID0gImxpbnV4IgpkaWZmIC0tZ2l0IGEv
bGliZ28vZ2VuZXJhdGVkL3N5c2luZm8uZ28gYi9saWJnby9nZW5lcmF0ZWQvc3lzaW5mby5nbwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjY4ZmYwCi0tLSAvZGV2L251bGwK
KysrIGIvbGliZ28vZ2VuZXJhdGVkL3N5c2luZm8uZ28KQEAgLTAsMCArMSw5MjgyIEBACitwYWNr
YWdlIHN5c2NhbGwKK2ltcG9ydCAidW5zYWZlIgordHlwZSBfIHVuc2FmZS5Qb2ludGVyCit0eXBl
IF9wdHJkaWZmX3QgaW50NjQKK3R5cGUgX3NpemVfdCB1aW50NjQKK3R5cGUgX3djaGFyX3QgaW50
MzIKK3R5cGUgX19fdV9jaGFyIHVpbnQ4Cit0eXBlIF9fX3Vfc2hvcnQgdWludDE2Cit0eXBlIF9f
X3VfaW50IHVpbnQzMgordHlwZSBfX191X2xvbmcgdWludDY0Cit0eXBlIF9fX2ludDhfdCBpbnQ4
Cit0eXBlIF9fX3VpbnQ4X3QgdWludDgKK3R5cGUgX19faW50MTZfdCBpbnQxNgordHlwZSBfX191
aW50MTZfdCB1aW50MTYKK3R5cGUgX19faW50MzJfdCBpbnQzMgordHlwZSBfX191aW50MzJfdCB1
aW50MzIKK3R5cGUgX19faW50NjRfdCBpbnQ2NAordHlwZSBfX191aW50NjRfdCB1aW50NjQKK3R5
cGUgX19faW50X2xlYXN0OF90IGludDgKK3R5cGUgX19fdWludF9sZWFzdDhfdCB1aW50OAordHlw
ZSBfX19pbnRfbGVhc3QxNl90IGludDE2Cit0eXBlIF9fX3VpbnRfbGVhc3QxNl90IHVpbnQxNgor
dHlwZSBfX19pbnRfbGVhc3QzMl90IGludDMyCit0eXBlIF9fX3VpbnRfbGVhc3QzMl90IHVpbnQz
MgordHlwZSBfX19pbnRfbGVhc3Q2NF90IGludDY0Cit0eXBlIF9fX3VpbnRfbGVhc3Q2NF90IHVp
bnQ2NAordHlwZSBfX19xdWFkX3QgaW50NjQKK3R5cGUgX19fdV9xdWFkX3QgdWludDY0Cit0eXBl
IF9fX2ludG1heF90IGludDY0Cit0eXBlIF9fX3VpbnRtYXhfdCB1aW50NjQKK3R5cGUgX19fZGV2
X3QgdWludDY0Cit0eXBlIF9fX3VpZF90IHVpbnQzMgordHlwZSBfX19naWRfdCB1aW50MzIKK3R5
cGUgX19faW5vX3QgdWludDY0Cit0eXBlIF9fX2lubzY0X3QgdWludDY0Cit0eXBlIF9fX21vZGVf
dCB1aW50MzIKK3R5cGUgX19fbmxpbmtfdCB1aW50NjQKK3R5cGUgX19fb2ZmX3QgaW50NjQKK3R5
cGUgX19fb2ZmNjRfdCBpbnQ2NAordHlwZSBfX19waWRfdCBpbnQzMgordHlwZSBfX19mc2lkX3Qg
c3RydWN0IHsgX192YWwgWzErMV1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9fX2ZzaWRfdCA9IDgK
K3R5cGUgX19fY2xvY2tfdCBpbnQ2NAordHlwZSBfX19ybGltX3QgdWludDY0Cit0eXBlIF9fX3Js
aW02NF90IHVpbnQ2NAordHlwZSBfX19pZF90IHVpbnQzMgordHlwZSBfX190aW1lX3QgaW50NjQK
K3R5cGUgX19fdXNlY29uZHNfdCB1aW50MzIKK3R5cGUgX19fc3VzZWNvbmRzX3QgaW50NjQKK3R5
cGUgX19fZGFkZHJfdCBpbnQzMgordHlwZSBfX19rZXlfdCBpbnQzMgordHlwZSBfX19jbG9ja2lk
X3QgaW50MzIKK3R5cGUgX19fdGltZXJfdCAqYnl0ZQordHlwZSBfX19ibGtzaXplX3QgaW50NjQK
K3R5cGUgX19fYmxrY250X3QgaW50NjQKK3R5cGUgX19fYmxrY250NjRfdCBpbnQ2NAordHlwZSBf
X19mc2Jsa2NudF90IHVpbnQ2NAordHlwZSBfX19mc2Jsa2NudDY0X3QgdWludDY0Cit0eXBlIF9f
X2ZzZmlsY250X3QgdWludDY0Cit0eXBlIF9fX2ZzZmlsY250NjRfdCB1aW50NjQKK3R5cGUgX19f
ZnN3b3JkX3QgaW50NjQKK3R5cGUgX19fc3NpemVfdCBpbnQ2NAordHlwZSBfX19zeXNjYWxsX3Ns
b25nX3QgaW50NjQKK3R5cGUgX19fc3lzY2FsbF91bG9uZ190IHVpbnQ2NAordHlwZSBfX19sb2Zm
X3QgaW50NjQKK3R5cGUgX19fY2FkZHJfdCAqaW50OAordHlwZSBfX19pbnRwdHJfdCBpbnQ2NAor
dHlwZSBfX19zb2NrbGVuX3QgdWludDMyCit0eXBlIF9fX3NpZ19hdG9taWNfdCBpbnQzMgordHlw
ZSBfdV9jaGFyIHVpbnQ4Cit0eXBlIF91X3Nob3J0IHVpbnQxNgordHlwZSBfdV9pbnQgdWludDMy
Cit0eXBlIF91X2xvbmcgdWludDY0Cit0eXBlIF9xdWFkX3QgaW50NjQKK3R5cGUgX3VfcXVhZF90
IHVpbnQ2NAordHlwZSBfZnNpZF90IHN0cnVjdCB7IF9fdmFsIFsxKzFdaW50MzI7IH0KK2NvbnN0
IF9zaXplb2ZfZnNpZF90ID0gOAordHlwZSBfbG9mZl90IGludDY0Cit0eXBlIF9pbm9fdCB1aW50
NjQKK3R5cGUgX2lubzY0X3QgdWludDY0Cit0eXBlIF9kZXZfdCB1aW50NjQKK3R5cGUgX2dpZF90
IHVpbnQzMgordHlwZSBfbW9kZV90IHVpbnQzMgordHlwZSBfbmxpbmtfdCB1aW50NjQKK3R5cGUg
X3VpZF90IHVpbnQzMgordHlwZSBfb2ZmX3QgaW50NjQKK3R5cGUgX29mZjY0X3QgaW50NjQKK3R5
cGUgX3BpZF90IGludDMyCit0eXBlIF9pZF90IHVpbnQzMgordHlwZSBfc3NpemVfdCBpbnQ2NAor
dHlwZSBfZGFkZHJfdCBpbnQzMgordHlwZSBfY2FkZHJfdCAqaW50OAordHlwZSBfa2V5X3QgaW50
MzIKK3R5cGUgX2Nsb2NrX3QgaW50NjQKK3R5cGUgX2Nsb2NraWRfdCBpbnQzMgordHlwZSBfdGlt
ZV90IGludDY0Cit0eXBlIF90aW1lcl90ICpieXRlCit0eXBlIF91c2Vjb25kc190IHVpbnQzMgor
dHlwZSBfc3VzZWNvbmRzX3QgaW50NjQKK3R5cGUgX3Vsb25nIHVpbnQ2NAordHlwZSBfdXNob3J0
IHVpbnQxNgordHlwZSBfdWludCB1aW50MzIKK3R5cGUgX2ludDhfdCBpbnQ4Cit0eXBlIF9pbnQx
Nl90IGludDE2Cit0eXBlIF9pbnQzMl90IGludDMyCit0eXBlIF9pbnQ2NF90IGludDY0Cit0eXBl
IF91X2ludDhfdCB1aW50OAordHlwZSBfdV9pbnQxNl90IHVpbnQxNgordHlwZSBfdV9pbnQzMl90
IHVpbnQzMgordHlwZSBfdV9pbnQ2NF90IHVpbnQ2NAordHlwZSBfcmVnaXN0ZXJfdCBpbnQ2NAor
dHlwZSBfX19zaWdzZXRfdCBzdHJ1Y3QgeyBfX3ZhbCBbMTUrMV11aW50NjQ7IH0KK2NvbnN0IF9z
aXplb2ZfX19zaWdzZXRfdCA9IDEyOAordHlwZSBfc2lnc2V0X3Qgc3RydWN0IHsgX192YWwgWzE1
KzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3NpZ3NldF90ID0gMTI4Citjb25zdCBfc2l6ZW9m
X3RpbWV2YWwgPSAxNgorY29uc3QgX3NpemVvZl90aW1lc3BlYyA9IDE2Cit0eXBlIF9fX2ZkX21h
c2sgaW50NjQKK3R5cGUgX2ZkX3NldCBzdHJ1Y3QgeyBmZHNfYml0cyBbMTUrMV1pbnQ2NDsgfQor
Y29uc3QgX3NpemVvZl9mZF9zZXQgPSAxMjgKK3R5cGUgX2ZkX21hc2sgaW50NjQKK3R5cGUgX2Js
a3NpemVfdCBpbnQ2NAordHlwZSBfYmxrY250X3QgaW50NjQKK3R5cGUgX2ZzYmxrY250X3QgdWlu
dDY0Cit0eXBlIF9mc2ZpbGNudF90IHVpbnQ2NAordHlwZSBfYmxrY250NjRfdCBpbnQ2NAordHlw
ZSBfZnNibGtjbnQ2NF90IHVpbnQ2NAordHlwZSBfZnNmaWxjbnQ2NF90IHVpbnQ2NAordHlwZSBf
X19wdGhyZWFkX3J3bG9ja19hcmNoX3Qgc3RydWN0IHsgX19yZWFkZXJzIHVpbnQzMjsgX193cml0
ZXJzIHVpbnQzMjsgX193cnBoYXNlX2Z1dGV4IHVpbnQzMjsgX193cml0ZXJzX2Z1dGV4IHVpbnQz
MjsgX19wYWQzIHVpbnQzMjsgX19wYWQ0IHVpbnQzMjsgX19jdXJfd3JpdGVyIGludDMyOyBfX3No
YXJlZCBpbnQzMjsgX19yd2VsaXNpb24gaW50ODsgX19wYWQxIFs2KzFddWludDg7IF9fcGFkMiB1
aW50NjQ7IF9fZmxhZ3MgdWludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3Np
emVvZl9fX3B0aHJlYWRfcndsb2NrX2FyY2hfdCA9IDU2Cit0eXBlIF9fX3B0aHJlYWRfaW50ZXJu
YWxfbGlzdCBzdHJ1Y3QgeyBfX3ByZXYgKl9fX3B0aHJlYWRfaW50ZXJuYWxfbGlzdDsgX19uZXh0
ICpfX19wdGhyZWFkX2ludGVybmFsX2xpc3Q7IH0KK2NvbnN0IF9zaXplb2ZfX19wdGhyZWFkX2lu
dGVybmFsX2xpc3QgPSAxNgordHlwZSBfX19wdGhyZWFkX2xpc3RfdCBzdHJ1Y3QgeyBfX3ByZXYg
Kl9fX3B0aHJlYWRfaW50ZXJuYWxfbGlzdDsgX19uZXh0ICpfX19wdGhyZWFkX2ludGVybmFsX2xp
c3Q7IH0KK2NvbnN0IF9zaXplb2ZfX19wdGhyZWFkX2xpc3RfdCA9IDE2Cit0eXBlIF9fX3B0aHJl
YWRfbXV0ZXhfcyBzdHJ1Y3QgeyBfX2xvY2sgaW50MzI7IF9fY291bnQgdWludDMyOyBfX293bmVy
IGludDMyOyBfX251c2VycyB1aW50MzI7IF9fa2luZCBpbnQzMjsgX19zcGlucyBpbnQxNjsgX19l
bGlzaW9uIGludDE2OyBfX2xpc3QgX19fcHRocmVhZF9saXN0X3Q7IH0KK2NvbnN0IF9zaXplb2Zf
X19wdGhyZWFkX211dGV4X3MgPSA0MAordHlwZSBfX19wdGhyZWFkX2NvbmRfcyBzdHJ1Y3QgeyBf
X3dzZXEgdWludDY0OyBfX2cxX3N0YXJ0IHVpbnQ2NDsgX19nX3JlZnMgWzErMV11aW50MzI7IF9f
Z19zaXplIFsxKzFddWludDMyOyBfX2cxX29yaWdfc2l6ZSB1aW50MzI7IF9fd3JlZnMgdWludDMy
OyBfX2dfc2lnbmFscyBbMSsxXXVpbnQzMjsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH0KK2Nv
bnN0IF9zaXplb2ZfX19wdGhyZWFkX2NvbmRfcyA9IDQ4Cit0eXBlIF9wdGhyZWFkX3QgdWludDY0
Cit0eXBlIF9wdGhyZWFkX211dGV4YXR0cl90IHN0cnVjdCB7IF9fc2l6ZSBbMysxXWludDg7IEdv
ZHVtcF8wX2FsaWduIFswXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfbXV0ZXhhdHRy
X3QgPSA0Cit0eXBlIF9wdGhyZWFkX2NvbmRhdHRyX3Qgc3RydWN0IHsgX19zaXplIFszKzFdaW50
ODsgR29kdW1wXzBfYWxpZ24gWzBdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9jb25k
YXR0cl90ID0gNAordHlwZSBfcHRocmVhZF9rZXlfdCB1aW50MzIKK3R5cGUgX3B0aHJlYWRfb25j
ZV90IGludDMyCit0eXBlIF9wdGhyZWFkX2F0dHJfdCBzdHJ1Y3QgeyBfX3NpemUgWzU1KzFdaW50
ODsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9hdHRy
X3QgPSA1NgordHlwZSBfcHRocmVhZF9tdXRleF90IHN0cnVjdCB7IF9fZGF0YSBfX19wdGhyZWFk
X211dGV4X3M7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9tdXRleF90ID0gNDAKK3R5cGUgX3B0
aHJlYWRfY29uZF90IHN0cnVjdCB7IF9fZGF0YSBfX19wdGhyZWFkX2NvbmRfczsgfQorY29uc3Qg
X3NpemVvZl9wdGhyZWFkX2NvbmRfdCA9IDQ4Cit0eXBlIF9wdGhyZWFkX3J3bG9ja190IHN0cnVj
dCB7IF9fZGF0YSBfX19wdGhyZWFkX3J3bG9ja19hcmNoX3Q7IH0KK2NvbnN0IF9zaXplb2ZfcHRo
cmVhZF9yd2xvY2tfdCA9IDU2Cit0eXBlIF9wdGhyZWFkX3J3bG9ja2F0dHJfdCBzdHJ1Y3QgeyBf
X3NpemUgWzcrMV1pbnQ4OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVv
Zl9wdGhyZWFkX3J3bG9ja2F0dHJfdCA9IDgKK3R5cGUgX3B0aHJlYWRfc3BpbmxvY2tfdCBpbnQz
MgordHlwZSBfcHRocmVhZF9iYXJyaWVyX3Qgc3RydWN0IHsgX19zaXplIFszMSsxXWludDg7IEdv
ZHVtcF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfYmFycmllcl90
ID0gMzIKK3R5cGUgX3B0aHJlYWRfYmFycmllcmF0dHJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMrMV1p
bnQ4OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX2Jh
cnJpZXJhdHRyX3QgPSA0Cit0eXBlIF9kaXJlbnQgc3RydWN0IHsgZF9pbm8gdWludDY0OyBkX29m
ZiBpbnQ2NDsgZF9yZWNsZW4gdWludDE2OyBkX3R5cGUgdWludDg7IGRfbmFtZSBbMjU1KzFdaW50
ODsgR29kdW1wXzBfcGFkIFs1XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfZGlyZW50ID0gMjgwCit0
eXBlIF9kaXJlbnQ2NCBzdHJ1Y3QgeyBkX2lubyB1aW50NjQ7IGRfb2ZmIGludDY0OyBkX3JlY2xl
biB1aW50MTY7IGRfdHlwZSB1aW50ODsgZF9uYW1lIFsyNTUrMV1pbnQ4OyBHb2R1bXBfMF9wYWQg
WzVdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9kaXJlbnQ2NCA9IDI4MAordHlwZSBfRElSIHN0cnVj
dCB7IH0KK3ZhciBfcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgKmludDgKK3ZhciBfcHJvZ3JhbV9p
bnZvY2F0aW9uX3Nob3J0X25hbWUgKmludDgKK3R5cGUgX2Vycm9yX3QgaW50MzIKK3R5cGUgX2Zs
b2NrIHN0cnVjdCB7IGxfdHlwZSBpbnQxNjsgbF93aGVuY2UgaW50MTY7IGxfc3RhcnQgaW50NjQ7
IGxfbGVuIGludDY0OyBsX3BpZCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0
IF9zaXplb2ZfZmxvY2sgPSAzMgordHlwZSBfZmxvY2s2NCBzdHJ1Y3QgeyBsX3R5cGUgaW50MTY7
IGxfd2hlbmNlIGludDE2OyBsX3N0YXJ0IGludDY0OyBsX2xlbiBpbnQ2NDsgbF9waWQgaW50MzI7
IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX2Zsb2NrNjQgPSAzMgordHlw
ZSBfaW92ZWMgc3RydWN0IHsgaW92X2Jhc2UgKmJ5dGU7IGlvdl9sZW4gdWludDY0OyB9Citjb25z
dCBfc2l6ZW9mX2lvdmVjID0gMTYKK3R5cGUgX2Zfb3duZXJfZXggc3RydWN0IHsgX3R5cGUgdWlu
dDMyOyBwaWQgaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfZl9vd25lcl9leCA9IDgKK3R5cGUgX2Zp
bGVfaGFuZGxlIHN0cnVjdCB7IGhhbmRsZV9ieXRlcyB1aW50MzI7IGhhbmRsZV90eXBlIGludDMy
OyBmX2hhbmRsZSBbMF11aW50ODsgfQorY29uc3QgX3NpemVvZl9maWxlX2hhbmRsZSA9IDgKK3R5
cGUgX3N0YXQgc3RydWN0IHsgc3RfZGV2IHVpbnQ2NDsgc3RfaW5vIHVpbnQ2NDsgc3Rfbmxpbmsg
dWludDY0OyBzdF9tb2RlIHVpbnQzMjsgc3RfdWlkIHVpbnQzMjsgc3RfZ2lkIHVpbnQzMjsgX19w
YWQwIGludDMyOyBzdF9yZGV2IHVpbnQ2NDsgc3Rfc2l6ZSBpbnQ2NDsgc3RfYmxrc2l6ZSBpbnQ2
NDsgc3RfYmxvY2tzIGludDY0OyBzdF9hdGltIFRpbWVzcGVjOyBzdF9tdGltIFRpbWVzcGVjOyBz
dF9jdGltIFRpbWVzcGVjOyBfX2dsaWJjX3Jlc2VydmVkIFsyKzFdaW50NjQ7IH0KK2NvbnN0IF9z
aXplb2Zfc3RhdCA9IDE0NAordHlwZSBfc3RhdDY0IHN0cnVjdCB7IHN0X2RldiB1aW50NjQ7IHN0
X2lubyB1aW50NjQ7IHN0X25saW5rIHVpbnQ2NDsgc3RfbW9kZSB1aW50MzI7IHN0X3VpZCB1aW50
MzI7IHN0X2dpZCB1aW50MzI7IF9fcGFkMCBpbnQzMjsgc3RfcmRldiB1aW50NjQ7IHN0X3NpemUg
aW50NjQ7IHN0X2Jsa3NpemUgaW50NjQ7IHN0X2Jsb2NrcyBpbnQ2NDsgc3RfYXRpbSBUaW1lc3Bl
Yzsgc3RfbXRpbSBUaW1lc3BlYzsgc3RfY3RpbSBUaW1lc3BlYzsgX19nbGliY19yZXNlcnZlZCBb
MisxXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3N0YXQ2NCA9IDE0NAordHlwZSBfc3RhY2tfdCBz
dHJ1Y3QgeyBzc19zcCAqYnl0ZTsgc3NfZmxhZ3MgaW50MzI7IHNzX3NpemUgdWludDY0OyB9Citj
b25zdCBfc2l6ZW9mX3N0YWNrX3QgPSAyNAordHlwZSBfZ3JlZ190IGludDY0Cit0eXBlIF9ncmVn
c2V0X3QgWzIyKzFdaW50NjQKK3R5cGUgX19saWJjX2ZweHJlZyBzdHJ1Y3QgeyBzaWduaWZpY2Fu
ZCBbMysxXXVpbnQxNjsgZXhwb25lbnQgdWludDE2OyBfX2dsaWJjX3Jlc2VydmVkMSBbMisxXXVp
bnQxNjsgfQorY29uc3QgX3NpemVvZl9fbGliY19mcHhyZWcgPSAxNgordHlwZSBfX2xpYmNfeG1t
cmVnIHN0cnVjdCB7IGVsZW1lbnQgWzMrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX2xpYmNf
eG1tcmVnID0gMTYKK3R5cGUgX19saWJjX2Zwc3RhdGUgc3RydWN0IHsgY3dkIHVpbnQxNjsgc3dk
IHVpbnQxNjsgZnR3IHVpbnQxNjsgZm9wIHVpbnQxNjsgcmlwIHVpbnQ2NDsgcmRwIHVpbnQ2NDsg
bXhjc3IgdWludDMyOyBteGNyX21hc2sgdWludDMyOyBfc3QgWzcrMV1fX2xpYmNfZnB4cmVnOyBf
eG1tIFsxNSsxXV9fbGliY194bW1yZWc7IF9fZ2xpYmNfcmVzZXJ2ZWQxIFsyMysxXXVpbnQzMjsg
fQorY29uc3QgX3NpemVvZl9fbGliY19mcHN0YXRlID0gNTEyCit0eXBlIF9mcHJlZ3NldF90ICpf
X2xpYmNfZnBzdGF0ZQordHlwZSBfbWNvbnRleHRfdCBzdHJ1Y3QgeyBncmVncyBfZ3JlZ3NldF90
OyBmcHJlZ3MgX2ZwcmVnc2V0X3Q7IF9fcmVzZXJ2ZWQxIFs3KzFddWludDY0OyB9Citjb25zdCBf
c2l6ZW9mX21jb250ZXh0X3QgPSAyNTYKK3R5cGUgX3Vjb250ZXh0X3Qgc3RydWN0IHsgdWNfZmxh
Z3MgdWludDY0OyB1Y19saW5rICpfdWNvbnRleHRfdDsgdWNfc3RhY2sgX3N0YWNrX3Q7IHVjX21j
b250ZXh0IF9tY29udGV4dF90OyB1Y19zaWdtYXNrIF9zaWdzZXRfdDsgX19mcHJlZ3NfbWVtIF9f
bGliY19mcHN0YXRlOyBfX3NzcCBbMysxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl91Y29udGV4
dF90ID0gOTY4Cit0eXBlIF91aW50OF90IHVpbnQ4Cit0eXBlIF91aW50MTZfdCB1aW50MTYKK3R5
cGUgX3VpbnQzMl90IHVpbnQzMgordHlwZSBfdWludDY0X3QgdWludDY0Cit0eXBlIF9zb2NrbGVu
X3QgdWludDMyCit0eXBlIF9zYV9mYW1pbHlfdCB1aW50MTYKK3R5cGUgX3NvY2thZGRyIHN0cnVj
dCB7IHNhX2ZhbWlseSB1aW50MTY7IHNhX2RhdGEgWzEzKzFdaW50ODsgfQorY29uc3QgX3NpemVv
Zl9zb2NrYWRkciA9IDE2Cit0eXBlIF9zb2NrYWRkcl9zdG9yYWdlIHN0cnVjdCB7IHNzX2ZhbWls
eSB1aW50MTY7IF9fc3NfcGFkZGluZyBbMTE3KzFdaW50ODsgX19zc19hbGlnbiB1aW50NjQ7IH0K
K2NvbnN0IF9zaXplb2Zfc29ja2FkZHJfc3RvcmFnZSA9IDEyOAordHlwZSBfbXNnaGRyIHN0cnVj
dCB7IG1zZ19uYW1lICpieXRlOyBtc2dfbmFtZWxlbiB1aW50MzI7IG1zZ19pb3YgKl9pb3ZlYzsg
bXNnX2lvdmxlbiB1aW50NjQ7IG1zZ19jb250cm9sICpieXRlOyBtc2dfY29udHJvbGxlbiB1aW50
NjQ7IG1zZ19mbGFncyBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXpl
b2ZfbXNnaGRyID0gNTYKK3R5cGUgX2Ntc2doZHIgc3RydWN0IHsgY21zZ19sZW4gdWludDY0OyBj
bXNnX2xldmVsIGludDMyOyBjbXNnX3R5cGUgaW50MzI7IF9fY21zZ19kYXRhIFswXXVpbnQ4OyB9
Citjb25zdCBfc2l6ZW9mX2Ntc2doZHIgPSAxNgordHlwZSBfdWNyZWQgc3RydWN0IHsgcGlkIGlu
dDMyOyB1aWQgdWludDMyOyBnaWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3VjcmVkID0gMTIK
K3R5cGUgX2xpbmdlciBzdHJ1Y3QgeyBsX29ub2ZmIGludDMyOyBsX2xpbmdlciBpbnQzMjsgfQor
Y29uc3QgX3NpemVvZl9saW5nZXIgPSA4Cit0eXBlIF9vc29ja2FkZHIgc3RydWN0IHsgc2FfZmFt
aWx5IHVpbnQxNjsgc2FfZGF0YSBbMTMrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9vc29ja2Fk
ZHIgPSAxNgordHlwZSBfX19TT0NLQUREUl9BUkcgc3RydWN0IHsgX19zb2NrYWRkcl9fICpfc29j
a2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfX19TT0NLQUREUl9BUkcgPSA4Cit0eXBlIF9fX0NPTlNU
X1NPQ0tBRERSX0FSRyBzdHJ1Y3QgeyBfX3NvY2thZGRyX18gKl9zb2NrYWRkcjsgfQorY29uc3Qg
X3NpemVvZl9fX0NPTlNUX1NPQ0tBRERSX0FSRyA9IDgKK3R5cGUgX21tc2doZHIgc3RydWN0IHsg
bXNnX2hkciBfbXNnaGRyOyBtc2dfbGVuIHVpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0K
K2NvbnN0IF9zaXplb2ZfbW1zZ2hkciA9IDY0Cit0eXBlIF9pbl9hZGRyX3QgdWludDMyCit0eXBl
IF9pbl9hZGRyIHN0cnVjdCB7IHNfYWRkciB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaW5fYWRk
ciA9IDQKK3R5cGUgX2lwX29wdHMgc3RydWN0IHsgaXBfZHN0IF9pbl9hZGRyOyBpcF9vcHRzIFsz
OSsxXWludDg7IH0KK2NvbnN0IF9zaXplb2ZfaXBfb3B0cyA9IDQ0Cit0eXBlIF9pcF9tcmVxbiBz
dHJ1Y3QgeyBpbXJfbXVsdGlhZGRyIF9pbl9hZGRyOyBpbXJfYWRkcmVzcyBfaW5fYWRkcjsgaW1y
X2lmaW5kZXggaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaXBfbXJlcW4gPSAxMgordHlwZSBfaW5f
cGt0aW5mbyBzdHJ1Y3QgeyBpcGlfaWZpbmRleCBpbnQzMjsgaXBpX3NwZWNfZHN0IF9pbl9hZGRy
OyBpcGlfYWRkciBfaW5fYWRkcjsgfQorY29uc3QgX3NpemVvZl9pbl9wa3RpbmZvID0gMTIKK3R5
cGUgX2luX3BvcnRfdCB1aW50MTYKK3R5cGUgX3NvY2thZGRyX2luIHN0cnVjdCB7IHNpbl9mYW1p
bHkgdWludDE2OyBzaW5fcG9ydCB1aW50MTY7IHNpbl9hZGRyIF9pbl9hZGRyOyBzaW5femVybyBb
NysxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3NvY2thZGRyX2luID0gMTYKK3R5cGUgX2lwX21y
ZXEgc3RydWN0IHsgaW1yX211bHRpYWRkciBfaW5fYWRkcjsgaW1yX2ludGVyZmFjZSBfaW5fYWRk
cjsgfQorY29uc3QgX3NpemVvZl9pcF9tcmVxID0gOAordHlwZSBfaXBfbXJlcV9zb3VyY2Ugc3Ry
dWN0IHsgaW1yX211bHRpYWRkciBfaW5fYWRkcjsgaW1yX2ludGVyZmFjZSBfaW5fYWRkcjsgaW1y
X3NvdXJjZWFkZHIgX2luX2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfaXBfbXJlcV9zb3VyY2UgPSAx
MgorY29uc3QgX3NpemVvZl9pcHY2X21yZXEgPSAyMAordHlwZSBfZ3JvdXBfcmVxIHN0cnVjdCB7
IGdyX2ludGVyZmFjZSB1aW50MzI7IGdyX2dyb3VwIF9zb2NrYWRkcl9zdG9yYWdlOyB9Citjb25z
dCBfc2l6ZW9mX2dyb3VwX3JlcSA9IDEzNgordHlwZSBfZ3JvdXBfc291cmNlX3JlcSBzdHJ1Y3Qg
eyBnc3JfaW50ZXJmYWNlIHVpbnQzMjsgZ3NyX2dyb3VwIF9zb2NrYWRkcl9zdG9yYWdlOyBnc3Jf
c291cmNlIF9zb2NrYWRkcl9zdG9yYWdlOyB9Citjb25zdCBfc2l6ZW9mX2dyb3VwX3NvdXJjZV9y
ZXEgPSAyNjQKK3R5cGUgX2lwX21zZmlsdGVyIHN0cnVjdCB7IGltc2ZfbXVsdGlhZGRyIF9pbl9h
ZGRyOyBpbXNmX2ludGVyZmFjZSBfaW5fYWRkcjsgaW1zZl9mbW9kZSB1aW50MzI7IGltc2ZfbnVt
c3JjIHVpbnQzMjsgaW1zZl9zbGlzdCBbMCsxXV9pbl9hZGRyOyB9Citjb25zdCBfc2l6ZW9mX2lw
X21zZmlsdGVyID0gMjAKK3R5cGUgX2dyb3VwX2ZpbHRlciBzdHJ1Y3QgeyBnZl9pbnRlcmZhY2Ug
dWludDMyOyBnZl9ncm91cCBfc29ja2FkZHJfc3RvcmFnZTsgZ2ZfZm1vZGUgdWludDMyOyBnZl9u
dW1zcmMgdWludDMyOyBnZl9zbGlzdCBbMCsxXV9zb2NrYWRkcl9zdG9yYWdlOyB9Citjb25zdCBf
c2l6ZW9mX2dyb3VwX2ZpbHRlciA9IDI3MgorY29uc3QgX3NpemVvZl9pbjZfcGt0aW5mbyA9IDIw
Citjb25zdCBfc2l6ZW9mX2lwNl9tdHVpbmZvID0gMzIKK3R5cGUgX2ludF9sZWFzdDhfdCBpbnQ4
Cit0eXBlIF9pbnRfbGVhc3QxNl90IGludDE2Cit0eXBlIF9pbnRfbGVhc3QzMl90IGludDMyCit0
eXBlIF9pbnRfbGVhc3Q2NF90IGludDY0Cit0eXBlIF91aW50X2xlYXN0OF90IHVpbnQ4Cit0eXBl
IF91aW50X2xlYXN0MTZfdCB1aW50MTYKK3R5cGUgX3VpbnRfbGVhc3QzMl90IHVpbnQzMgordHlw
ZSBfdWludF9sZWFzdDY0X3QgdWludDY0Cit0eXBlIF9pbnRfZmFzdDhfdCBpbnQ4Cit0eXBlIF9p
bnRfZmFzdDE2X3QgaW50NjQKK3R5cGUgX2ludF9mYXN0MzJfdCBpbnQ2NAordHlwZSBfaW50X2Zh
c3Q2NF90IGludDY0Cit0eXBlIF91aW50X2Zhc3Q4X3QgdWludDgKK3R5cGUgX3VpbnRfZmFzdDE2
X3QgdWludDY0Cit0eXBlIF91aW50X2Zhc3QzMl90IHVpbnQ2NAordHlwZSBfdWludF9mYXN0NjRf
dCB1aW50NjQKK3R5cGUgX2ludHB0cl90IGludDY0Cit0eXBlIF91aW50cHRyX3QgdWludDY0Cit0
eXBlIF9pbnRtYXhfdCBpbnQ2NAordHlwZSBfdWludG1heF90IHVpbnQ2NAordHlwZSBfdGNwX3Nl
cSB1aW50MzIKK3R5cGUgX3RjcGhkciBzdHJ1Y3QgeyB0aF9zcG9ydCB1aW50MTY7IHRoX2Rwb3J0
IHVpbnQxNjsgdGhfc2VxIHVpbnQzMjsgdGhfYWNrIHVpbnQzMjsgR29kdW1wXzBfcGFkIFsxXWJ5
dGU7IHRoX2ZsYWdzIHVpbnQ4OyB0aF93aW4gdWludDE2OyB0aF9zdW0gdWludDE2OyB0aF91cnAg
dWludDE2OyBHb2R1bXBfMV9hbGlnbiBbMF1pbnQzMjsgfQorY29uc3QgX3NpemVvZl90Y3BoZHIg
PSAyMAordHlwZSBfdGNwX2luZm8gc3RydWN0IHsgdGNwaV9zdGF0ZSB1aW50ODsgdGNwaV9jYV9z
dGF0ZSB1aW50ODsgdGNwaV9yZXRyYW5zbWl0cyB1aW50ODsgdGNwaV9wcm9iZXMgdWludDg7IHRj
cGlfYmFja29mZiB1aW50ODsgdGNwaV9vcHRpb25zIHVpbnQ4OyB0Y3BpX3J0byB1aW50MzI7IHRj
cGlfYXRvIHVpbnQzMjsgdGNwaV9zbmRfbXNzIHVpbnQzMjsgdGNwaV9yY3ZfbXNzIHVpbnQzMjsg
dGNwaV91bmFja2VkIHVpbnQzMjsgdGNwaV9zYWNrZWQgdWludDMyOyB0Y3BpX2xvc3QgdWludDMy
OyB0Y3BpX3JldHJhbnMgdWludDMyOyB0Y3BpX2ZhY2tldHMgdWludDMyOyB0Y3BpX2xhc3RfZGF0
YV9zZW50IHVpbnQzMjsgdGNwaV9sYXN0X2Fja19zZW50IHVpbnQzMjsgdGNwaV9sYXN0X2RhdGFf
cmVjdiB1aW50MzI7IHRjcGlfbGFzdF9hY2tfcmVjdiB1aW50MzI7IHRjcGlfcG10dSB1aW50MzI7
IHRjcGlfcmN2X3NzdGhyZXNoIHVpbnQzMjsgdGNwaV9ydHQgdWludDMyOyB0Y3BpX3J0dHZhciB1
aW50MzI7IHRjcGlfc25kX3NzdGhyZXNoIHVpbnQzMjsgdGNwaV9zbmRfY3duZCB1aW50MzI7IHRj
cGlfYWR2bXNzIHVpbnQzMjsgdGNwaV9yZW9yZGVyaW5nIHVpbnQzMjsgdGNwaV9yY3ZfcnR0IHVp
bnQzMjsgdGNwaV9yY3Zfc3BhY2UgdWludDMyOyB0Y3BpX3RvdGFsX3JldHJhbnMgdWludDMyOyB9
Citjb25zdCBfc2l6ZW9mX3RjcF9pbmZvID0gMTA0Cit0eXBlIF90Y3BfbWQ1c2lnIHN0cnVjdCB7
IHRjcG1fYWRkciBfc29ja2FkZHJfc3RvcmFnZTsgdGNwbV9mbGFncyB1aW50ODsgdGNwbV9wcmVm
aXhsZW4gdWludDg7IHRjcG1fa2V5bGVuIHVpbnQxNjsgX190Y3BtX3BhZCB1aW50MzI7IHRjcG1f
a2V5IFs3OSsxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3RjcF9tZDVzaWcgPSAyMTYKK3R5cGUg
X3RjcF9yZXBhaXJfb3B0IHN0cnVjdCB7IG9wdF9jb2RlIHVpbnQzMjsgb3B0X3ZhbCB1aW50MzI7
IH0KK2NvbnN0IF9zaXplb2ZfdGNwX3JlcGFpcl9vcHQgPSA4Cit0eXBlIF90Y3BfY29va2llX3Ry
YW5zYWN0aW9ucyBzdHJ1Y3QgeyB0Y3BjdF9mbGFncyB1aW50MTY7IF9fdGNwY3RfcGFkMSB1aW50
ODsgdGNwY3RfY29va2llX2Rlc2lyZWQgdWludDg7IHRjcGN0X3NfZGF0YV9kZXNpcmVkIHVpbnQx
NjsgdGNwY3RfdXNlZCB1aW50MTY7IHRjcGN0X3ZhbHVlIFs1MzUrMV11aW50ODsgfQorY29uc3Qg
X3NpemVvZl90Y3BfY29va2llX3RyYW5zYWN0aW9ucyA9IDU0NAordHlwZSBfdGNwX3JlcGFpcl93
aW5kb3cgc3RydWN0IHsgc25kX3dsMSB1aW50MzI7IHNuZF93bmQgdWludDMyOyBtYXhfd2luZG93
IHVpbnQzMjsgcmN2X3duZCB1aW50MzI7IHJjdl93dXAgdWludDMyOyB9Citjb25zdCBfc2l6ZW9m
X3RjcF9yZXBhaXJfd2luZG93ID0gMjAKK3R5cGUgX3RpbWVzdGFtcCBzdHJ1Y3QgeyBsZW4gdWlu
dDg7IHB0ciB1aW50ODsgZGF0YSBbOCsxXXVpbnQzMjsgfQorY29uc3QgX3NpemVvZl90aW1lc3Rh
bXAgPSA0MAordHlwZSBfaXBoZHIgc3RydWN0IHsgR29kdW1wXzBfcGFkIFsxXWJ5dGU7IHRvcyB1
aW50ODsgdG90X2xlbiB1aW50MTY7IGlkIHVpbnQxNjsgZnJhZ19vZmYgdWludDE2OyB0dGwgdWlu
dDg7IHByb3RvY29sIHVpbnQ4OyBjaGVjayB1aW50MTY7IHNhZGRyIHVpbnQzMjsgZGFkZHIgdWlu
dDMyOyB9Citjb25zdCBfc2l6ZW9mX2lwaGRyID0gMjAKK3R5cGUgX2lwIHN0cnVjdCB7IEdvZHVt
cF8wX3BhZCBbMV1ieXRlOyBpcF90b3MgdWludDg7IGlwX2xlbiB1aW50MTY7IGlwX2lkIHVpbnQx
NjsgaXBfb2ZmIHVpbnQxNjsgaXBfdHRsIHVpbnQ4OyBpcF9wIHVpbnQ4OyBpcF9zdW0gdWludDE2
OyBpcF9zcmMgX2luX2FkZHI7IGlwX2RzdCBfaW5fYWRkcjsgfQorY29uc3QgX3NpemVvZl9pcCA9
IDIwCit0eXBlIF9pcF90aW1lc3RhbXAgc3RydWN0IHsgaXB0X2NvZGUgdWludDg7IGlwdF9sZW4g
dWludDg7IGlwdF9wdHIgdWludDg7IGRhdGEgWzgrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zf
aXBfdGltZXN0YW1wID0gNDAKK3R5cGUgX19fczggaW50OAordHlwZSBfX191OCB1aW50OAordHlw
ZSBfX19zMTYgaW50MTYKK3R5cGUgX19fdTE2IHVpbnQxNgordHlwZSBfX19zMzIgaW50MzIKK3R5
cGUgX19fdTMyIHVpbnQzMgordHlwZSBfX19zNjQgaW50NjQKK3R5cGUgX19fdTY0IHVpbnQ2NAor
dHlwZSBfX19rZXJuZWxfZmRfc2V0IHN0cnVjdCB7IGZkc19iaXRzIFsxNSsxXXVpbnQ2NDsgfQor
Y29uc3QgX3NpemVvZl9fX2tlcm5lbF9mZF9zZXQgPSAxMjgKK3R5cGUgX19fa2VybmVsX3NpZ2hh
bmRsZXJfdCBmdW5jKGludDMyKQordHlwZSBfX19rZXJuZWxfa2V5X3QgaW50MzIKK3R5cGUgX19f
a2VybmVsX21xZF90IGludDMyCit0eXBlIF9fX2tlcm5lbF9vbGRfdWlkX3QgdWludDE2Cit0eXBl
IF9fX2tlcm5lbF9vbGRfZ2lkX3QgdWludDE2Cit0eXBlIF9fX2tlcm5lbF9vbGRfZGV2X3QgdWlu
dDY0Cit0eXBlIF9fX2tlcm5lbF9sb25nX3QgaW50NjQKK3R5cGUgX19fa2VybmVsX3Vsb25nX3Qg
dWludDY0Cit0eXBlIF9fX2tlcm5lbF9pbm9fdCB1aW50NjQKK3R5cGUgX19fa2VybmVsX21vZGVf
dCB1aW50MzIKK3R5cGUgX19fa2VybmVsX3BpZF90IGludDMyCit0eXBlIF9fX2tlcm5lbF9pcGNf
cGlkX3QgaW50MzIKK3R5cGUgX19fa2VybmVsX3VpZF90IHVpbnQzMgordHlwZSBfX19rZXJuZWxf
Z2lkX3QgdWludDMyCit0eXBlIF9fX2tlcm5lbF9zdXNlY29uZHNfdCBpbnQ2NAordHlwZSBfX19r
ZXJuZWxfZGFkZHJfdCBpbnQzMgordHlwZSBfX19rZXJuZWxfdWlkMzJfdCB1aW50MzIKK3R5cGUg
X19fa2VybmVsX2dpZDMyX3QgdWludDMyCit0eXBlIF9fX2tlcm5lbF9zaXplX3QgdWludDY0Cit0
eXBlIF9fX2tlcm5lbF9zc2l6ZV90IGludDY0Cit0eXBlIF9fX2tlcm5lbF9wdHJkaWZmX3QgaW50
NjQKK3R5cGUgX19fa2VybmVsX2ZzaWRfdCBzdHJ1Y3QgeyB2YWwgWzErMV1pbnQzMjsgfQorY29u
c3QgX3NpemVvZl9fX2tlcm5lbF9mc2lkX3QgPSA4Cit0eXBlIF9fX2tlcm5lbF9vZmZfdCBpbnQ2
NAordHlwZSBfX19rZXJuZWxfbG9mZl90IGludDY0Cit0eXBlIF9fX2tlcm5lbF90aW1lX3QgaW50
NjQKK3R5cGUgX19fa2VybmVsX3RpbWU2NF90IGludDY0Cit0eXBlIF9fX2tlcm5lbF9jbG9ja190
IGludDY0Cit0eXBlIF9fX2tlcm5lbF90aW1lcl90IGludDMyCit0eXBlIF9fX2tlcm5lbF9jbG9j
a2lkX3QgaW50MzIKK3R5cGUgX19fa2VybmVsX2NhZGRyX3QgKmludDgKK3R5cGUgX19fa2VybmVs
X3VpZDE2X3QgdWludDE2Cit0eXBlIF9fX2tlcm5lbF9naWQxNl90IHVpbnQxNgordHlwZSBfX19s
ZTE2IHVpbnQxNgordHlwZSBfX19iZTE2IHVpbnQxNgordHlwZSBfX19sZTMyIHVpbnQzMgordHlw
ZSBfX19iZTMyIHVpbnQzMgordHlwZSBfX19sZTY0IHVpbnQ2NAordHlwZSBfX19iZTY0IHVpbnQ2
NAordHlwZSBfX19zdW0xNiB1aW50MTYKK3R5cGUgX19fd3N1bSB1aW50MzIKK3R5cGUgX19fcG9s
bF90IHVpbnQzMgordHlwZSBfZXRoaGRyIHN0cnVjdCB7IGhfZGVzdCBbNSsxXXVpbnQ4OyBoX3Nv
dXJjZSBbNSsxXXVpbnQ4OyBoX3Byb3RvIHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl9ldGhoZHIg
PSAxNAordHlwZSBfZXRoZXJfYWRkciBzdHJ1Y3QgeyBldGhlcl9hZGRyX29jdGV0IFs1KzFddWlu
dDg7IH0KK2NvbnN0IF9zaXplb2ZfZXRoZXJfYWRkciA9IDYKK3R5cGUgX2V0aGVyX2hlYWRlciBz
dHJ1Y3QgeyBldGhlcl9kaG9zdCBbNSsxXXVpbnQ4OyBldGhlcl9zaG9zdCBbNSsxXXVpbnQ4OyBl
dGhlcl90eXBlIHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl9ldGhlcl9oZWFkZXIgPSAxNAordHlw
ZSBfYXJwaGRyIHN0cnVjdCB7IGFyX2hyZCB1aW50MTY7IGFyX3BybyB1aW50MTY7IGFyX2hsbiB1
aW50ODsgYXJfcGxuIHVpbnQ4OyBhcl9vcCB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfYXJwaGRy
ID0gOAordHlwZSBfYXJwcmVxIHN0cnVjdCB7IGFycF9wYSBfc29ja2FkZHI7IGFycF9oYSBfc29j
a2FkZHI7IGFycF9mbGFncyBpbnQzMjsgYXJwX25ldG1hc2sgX3NvY2thZGRyOyBhcnBfZGV2IFsx
NSsxXWludDg7IH0KK2NvbnN0IF9zaXplb2ZfYXJwcmVxID0gNjgKK3R5cGUgX2FycHJlcV9vbGQg
c3RydWN0IHsgYXJwX3BhIF9zb2NrYWRkcjsgYXJwX2hhIF9zb2NrYWRkcjsgYXJwX2ZsYWdzIGlu
dDMyOyBhcnBfbmV0bWFzayBfc29ja2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfYXJwcmVxX29sZCA9
IDUyCit0eXBlIF9hcnBkX3JlcXVlc3Qgc3RydWN0IHsgcmVxIHVpbnQxNjsgaXAgdWludDMyOyBk
ZXYgdWludDY0OyBzdGFtcCB1aW50NjQ7IHVwZGF0ZWQgdWludDY0OyBoYSBbNisxXXVpbnQ4OyBH
b2R1bXBfMF9wYWQgWzFdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9hcnBkX3JlcXVlc3QgPSA0MAor
dHlwZSBfZXRoZXJfYXJwIHN0cnVjdCB7IGVhX2hkciBfYXJwaGRyOyBhcnBfc2hhIFs1KzFddWlu
dDg7IGFycF9zcGEgWzMrMV11aW50ODsgYXJwX3RoYSBbNSsxXXVpbnQ4OyBhcnBfdHBhIFszKzFd
dWludDg7IH0KK2NvbnN0IF9zaXplb2ZfZXRoZXJfYXJwID0gMjgKK3R5cGUgX3NpZ19hdG9taWNf
dCBpbnQzMgordHlwZSBfc2lndmFsIHN0cnVjdCB7IHNpdmFsX2ludCBpbnQzMjsgR29kdW1wXzBf
cGFkIFs0XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3Np
Z3ZhbCA9IDgKK3R5cGUgX19fc2lndmFsX3Qgc3RydWN0IHsgc2l2YWxfaW50IGludDMyOyBHb2R1
bXBfMF9wYWQgWzRdYnl0ZTsgR29kdW1wXzFfYWxpZ24gWzBdaW50NjQ7IH0KK2NvbnN0IF9zaXpl
b2ZfX19zaWd2YWxfdCA9IDgKK3R5cGUgX3NpZ2luZm9fdCBzdHJ1Y3QgeyBzaV9zaWdubyBpbnQz
Mjsgc2lfZXJybm8gaW50MzI7IHNpX2NvZGUgaW50MzI7IF9fcGFkMCBpbnQzMjsgX3NpZmllbGRz
IHN0cnVjdCB7IF9wYWQgWzI3KzFdaW50MzI7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9OyB9
Citjb25zdCBfc2l6ZW9mX3NpZ2luZm9fdCA9IDEyOAordHlwZSBfc2lndmFsX3Qgc3RydWN0IHsg
c2l2YWxfaW50IGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgR29kdW1wXzFfYWxpZ24gWzBd
aW50NjQ7IH0KK2NvbnN0IF9zaXplb2Zfc2lndmFsX3QgPSA4Cit0eXBlIF9zaWdldmVudCBzdHJ1
Y3QgeyBzaWdldl92YWx1ZSBfX19zaWd2YWxfdDsgc2lnZXZfc2lnbm8gaW50MzI7IHNpZ2V2X25v
dGlmeSBpbnQzMjsgX3NpZ2V2X3VuIHN0cnVjdCB7IF9wYWQgWzExKzFdaW50MzI7IEdvZHVtcF8w
X2FsaWduIFswXWludDY0OyB9OyB9Citjb25zdCBfc2l6ZW9mX3NpZ2V2ZW50ID0gNjQKK3R5cGUg
X3NpZ2V2ZW50X3Qgc3RydWN0IHsgc2lnZXZfdmFsdWUgX19fc2lndmFsX3Q7IHNpZ2V2X3NpZ25v
IGludDMyOyBzaWdldl9ub3RpZnkgaW50MzI7IF9zaWdldl91biBzdHJ1Y3QgeyBfcGFkIFsxMSsx
XWludDMyOyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfTsgfQorY29uc3QgX3NpemVvZl9zaWdl
dmVudF90ID0gNjQKK3R5cGUgX19fc2lnaGFuZGxlcl90IGZ1bmMoaW50MzIpCit0eXBlIF9zaWdo
YW5kbGVyX3QgZnVuYyhpbnQzMikKK3R5cGUgX3NpZ190IGZ1bmMoaW50MzIpCit0eXBlIF9zaWdh
Y3Rpb24gc3RydWN0IHsgX19zaWdhY3Rpb25faGFuZGxlciBzdHJ1Y3QgeyBzYV9oYW5kbGVyIF9f
X3NpZ2hhbmRsZXJfdDsgfTsgc2FfbWFzayBfX19zaWdzZXRfdDsgc2FfZmxhZ3MgaW50MzI7IHNh
X3Jlc3RvcmVyIGZ1bmMoKTsgfQorY29uc3QgX3NpemVvZl9zaWdhY3Rpb24gPSAxNTIKK3ZhciBf
X3N5c19zaWdsaXN0IFs2NCsxXSppbnQ4Cit2YXIgX3N5c19zaWdsaXN0IFs2NCsxXSppbnQ4Cit0
eXBlIF9fZnB4X3N3X2J5dGVzIHN0cnVjdCB7IG1hZ2ljMSB1aW50MzI7IGV4dGVuZGVkX3NpemUg
dWludDMyOyB4c3RhdGVfYnYgdWludDY0OyB4c3RhdGVfc2l6ZSB1aW50MzI7IF9fZ2xpYmNfcmVz
ZXJ2ZWQxIFs2KzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX19mcHhfc3dfYnl0ZXMgPSA0OAor
dHlwZSBfX2ZwcmVnIHN0cnVjdCB7IHNpZ25pZmljYW5kIFszKzFddWludDE2OyBleHBvbmVudCB1
aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfX2ZwcmVnID0gMTAKK3R5cGUgX19mcHhyZWcgc3RydWN0
IHsgc2lnbmlmaWNhbmQgWzMrMV11aW50MTY7IGV4cG9uZW50IHVpbnQxNjsgX19nbGliY19yZXNl
cnZlZDEgWzIrMV11aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfX2ZweHJlZyA9IDE2Cit0eXBlIF9f
eG1tcmVnIHN0cnVjdCB7IGVsZW1lbnQgWzMrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX3ht
bXJlZyA9IDE2Cit0eXBlIF9fZnBzdGF0ZSBzdHJ1Y3QgeyBjd2QgdWludDE2OyBzd2QgdWludDE2
OyBmdHcgdWludDE2OyBmb3AgdWludDE2OyByaXAgdWludDY0OyByZHAgdWludDY0OyBteGNzciB1
aW50MzI7IG14Y3JfbWFzayB1aW50MzI7IF9zdCBbNysxXV9fZnB4cmVnOyBfeG1tIFsxNSsxXV9f
eG1tcmVnOyBfX2dsaWJjX3Jlc2VydmVkMSBbMjMrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zf
X2Zwc3RhdGUgPSA1MTIKK3R5cGUgX3NpZ2NvbnRleHQgc3RydWN0IHsgcjggdWludDY0OyByOSB1
aW50NjQ7IHIxMCB1aW50NjQ7IHIxMSB1aW50NjQ7IHIxMiB1aW50NjQ7IHIxMyB1aW50NjQ7IHIx
NCB1aW50NjQ7IHIxNSB1aW50NjQ7IHJkaSB1aW50NjQ7IHJzaSB1aW50NjQ7IHJicCB1aW50NjQ7
IHJieCB1aW50NjQ7IHJkeCB1aW50NjQ7IHJheCB1aW50NjQ7IHJjeCB1aW50NjQ7IHJzcCB1aW50
NjQ7IHJpcCB1aW50NjQ7IGVmbGFncyB1aW50NjQ7IGNzIHVpbnQxNjsgZ3MgdWludDE2OyBmcyB1
aW50MTY7IF9fcGFkMCB1aW50MTY7IGVyciB1aW50NjQ7IHRyYXBubyB1aW50NjQ7IG9sZG1hc2sg
dWludDY0OyBjcjIgdWludDY0OyBmcHN0YXRlICpfX2Zwc3RhdGU7IF9fcmVzZXJ2ZWQxIFs3KzFd
dWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3NpZ2NvbnRleHQgPSAyNTYKK3R5cGUgX194c2F2ZV9o
ZHIgc3RydWN0IHsgeHN0YXRlX2J2IHVpbnQ2NDsgX19nbGliY19yZXNlcnZlZDEgWzErMV11aW50
NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQyIFs0KzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9mX194c2F2
ZV9oZHIgPSA2NAordHlwZSBfX3ltbWhfc3RhdGUgc3RydWN0IHsgeW1taF9zcGFjZSBbNjMrMV11
aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX3ltbWhfc3RhdGUgPSAyNTYKK3R5cGUgX194c3RhdGUg
c3RydWN0IHsgZnBzdGF0ZSBfX2Zwc3RhdGU7IHhzdGF0ZV9oZHIgX194c2F2ZV9oZHI7IHltbWgg
X195bW1oX3N0YXRlOyB9Citjb25zdCBfc2l6ZW9mX194c3RhdGUgPSA4MzIKK3R5cGUgX3NpZ3N0
YWNrIHN0cnVjdCB7IHNzX3NwICpieXRlOyBzc19vbnN0YWNrIGludDMyOyBHb2R1bXBfMF9wYWQg
WzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9zaWdzdGFjayA9IDE2Cit0eXBlIF93aW5zaXplIHN0
cnVjdCB7IHdzX3JvdyB1aW50MTY7IHdzX2NvbCB1aW50MTY7IHdzX3hwaXhlbCB1aW50MTY7IHdz
X3lwaXhlbCB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2Zfd2luc2l6ZSA9IDgKK3R5cGUgX3Rlcm1p
byBzdHJ1Y3QgeyBjX2lmbGFnIHVpbnQxNjsgY19vZmxhZyB1aW50MTY7IGNfY2ZsYWcgdWludDE2
OyBjX2xmbGFnIHVpbnQxNjsgY19saW5lIHVpbnQ4OyBjX2NjIFs3KzFddWludDg7IEdvZHVtcF8w
X3BhZCBbMV1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX3Rlcm1pbyA9IDE4Cit0eXBlIF9jY190IHVp
bnQ4Cit0eXBlIF9zcGVlZF90IHVpbnQzMgordHlwZSBfdGNmbGFnX3QgdWludDMyCit0eXBlIF90
ZXJtaW9zIHN0cnVjdCB7IGNfaWZsYWcgdWludDMyOyBjX29mbGFnIHVpbnQzMjsgY19jZmxhZyB1
aW50MzI7IGNfbGZsYWcgdWludDMyOyBjX2xpbmUgdWludDg7IGNfY2MgWzMxKzFddWludDg7IGNf
aXNwZWVkIHVpbnQzMjsgY19vc3BlZWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3Rlcm1pb3Mg
PSA2MAorY29uc3QgX3NpemVvZl9lcG9sbF9kYXRhID0gOAorY29uc3QgX3NpemVvZl9lcG9sbF9k
YXRhX3QgPSA4Citjb25zdCBfc2l6ZW9mX2Vwb2xsX2V2ZW50ID0gMTIKK3R5cGUgX3ByY3RsX21t
X21hcCBzdHJ1Y3QgeyBzdGFydF9jb2RlIHVpbnQ2NDsgZW5kX2NvZGUgdWludDY0OyBzdGFydF9k
YXRhIHVpbnQ2NDsgZW5kX2RhdGEgdWludDY0OyBzdGFydF9icmsgdWludDY0OyBicmsgdWludDY0
OyBzdGFydF9zdGFjayB1aW50NjQ7IGFyZ19zdGFydCB1aW50NjQ7IGFyZ19lbmQgdWludDY0OyBl
bnZfc3RhcnQgdWludDY0OyBlbnZfZW5kIHVpbnQ2NDsgYXV4diAqdWludDY0OyBhdXh2X3NpemUg
dWludDMyOyBleGVfZmQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3ByY3RsX21tX21hcCA9IDEw
NAordHlwZSBfX19wdHJhY2VfcGVla3NpZ2luZm9fYXJncyBzdHJ1Y3QgeyBvZmYgdWludDY0OyBm
bGFncyB1aW50MzI7IG5yIGludDMyOyB9Citjb25zdCBfc2l6ZW9mX19fcHRyYWNlX3BlZWtzaWdp
bmZvX2FyZ3MgPSAxNgordHlwZSBfX19wdHJhY2Vfc2VjY29tcF9tZXRhZGF0YSBzdHJ1Y3QgeyBm
aWx0ZXJfb2ZmIHVpbnQ2NDsgZmxhZ3MgdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX19fcHRyYWNl
X3NlY2NvbXBfbWV0YWRhdGEgPSAxNgordHlwZSBfcmxpbV90IHVpbnQ2NAordHlwZSBfcmxpbTY0
X3QgdWludDY0Cit0eXBlIF9ybGltaXQgc3RydWN0IHsgcmxpbV9jdXIgdWludDY0OyBybGltX21h
eCB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcmxpbWl0ID0gMTYKK3R5cGUgX3JsaW1pdDY0IHN0
cnVjdCB7IHJsaW1fY3VyIHVpbnQ2NDsgcmxpbV9tYXggdWludDY0OyB9Citjb25zdCBfc2l6ZW9m
X3JsaW1pdDY0ID0gMTYKK3R5cGUgX3J1c2FnZSBzdHJ1Y3QgeyBydV91dGltZSBUaW1ldmFsOyBy
dV9zdGltZSBUaW1ldmFsOyBydV9tYXhyc3MgaW50NjQ7IHJ1X2l4cnNzIGludDY0OyBydV9pZHJz
cyBpbnQ2NDsgcnVfaXNyc3MgaW50NjQ7IHJ1X21pbmZsdCBpbnQ2NDsgcnVfbWFqZmx0IGludDY0
OyBydV9uc3dhcCBpbnQ2NDsgcnVfaW5ibG9jayBpbnQ2NDsgcnVfb3VibG9jayBpbnQ2NDsgcnVf
bXNnc25kIGludDY0OyBydV9tc2dyY3YgaW50NjQ7IHJ1X25zaWduYWxzIGludDY0OyBydV9udmNz
dyBpbnQ2NDsgcnVfbml2Y3N3IGludDY0OyB9Citjb25zdCBfc2l6ZW9mX3J1c2FnZSA9IDE0NAor
dHlwZSBfX19ybGltaXRfcmVzb3VyY2VfdCB1aW50MzIKK3R5cGUgX19fcnVzYWdlX3dob190IGlu
dDMyCit0eXBlIF9fX3ByaW9yaXR5X3doaWNoX3QgdWludDMyCit0eXBlIF9zdGF0eF90aW1lc3Rh
bXAgc3RydWN0IHsgdHZfc2VjIGludDY0OyB0dl9uc2VjIHVpbnQzMjsgX19zdGF0eF90aW1lc3Rh
bXBfcGFkMSBbMCsxXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3N0YXR4X3RpbWVzdGFtcCA9IDE2
Cit0eXBlIF9zdGF0eCBzdHJ1Y3QgeyBzdHhfbWFzayB1aW50MzI7IHN0eF9ibGtzaXplIHVpbnQz
Mjsgc3R4X2F0dHJpYnV0ZXMgdWludDY0OyBzdHhfbmxpbmsgdWludDMyOyBzdHhfdWlkIHVpbnQz
Mjsgc3R4X2dpZCB1aW50MzI7IHN0eF9tb2RlIHVpbnQxNjsgX19zdGF0eF9wYWQxIFswKzFddWlu
dDE2OyBzdHhfaW5vIHVpbnQ2NDsgc3R4X3NpemUgdWludDY0OyBzdHhfYmxvY2tzIHVpbnQ2NDsg
c3R4X2F0dHJpYnV0ZXNfbWFzayB1aW50NjQ7IHN0eF9hdGltZSBfc3RhdHhfdGltZXN0YW1wOyBz
dHhfYnRpbWUgX3N0YXR4X3RpbWVzdGFtcDsgc3R4X2N0aW1lIF9zdGF0eF90aW1lc3RhbXA7IHN0
eF9tdGltZSBfc3RhdHhfdGltZXN0YW1wOyBzdHhfcmRldl9tYWpvciB1aW50MzI7IHN0eF9yZGV2
X21pbm9yIHVpbnQzMjsgc3R4X2Rldl9tYWpvciB1aW50MzI7IHN0eF9kZXZfbWlub3IgdWludDMy
OyBfX3N0YXR4X3BhZDIgWzEzKzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3N0YXR4ID0gMjU2
Cit0eXBlIF90aW1lem9uZSBzdHJ1Y3QgeyB0el9taW51dGVzd2VzdCBpbnQzMjsgdHpfZHN0dGlt
ZSBpbnQzMjsgfQorY29uc3QgX3NpemVvZl90aW1lem9uZSA9IDgKK3R5cGUgX19fdGltZXpvbmVf
cHRyX3QgKl90aW1lem9uZQordHlwZSBfaXRpbWVydmFsIHN0cnVjdCB7IGl0X2ludGVydmFsIFRp
bWV2YWw7IGl0X3ZhbHVlIFRpbWV2YWw7IH0KK2NvbnN0IF9zaXplb2ZfaXRpbWVydmFsID0gMzIK
K3R5cGUgX19faXRpbWVyX3doaWNoX3QgdWludDMyCit0eXBlIF90bXMgc3RydWN0IHsgdG1zX3V0
aW1lIGludDY0OyB0bXNfc3RpbWUgaW50NjQ7IHRtc19jdXRpbWUgaW50NjQ7IHRtc19jc3RpbWUg
aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfdG1zID0gMzIKK3R5cGUgX2lkdHlwZV90IHVpbnQzMgor
dHlwZSBfc29ja2FkZHJfdW4gc3RydWN0IHsgc3VuX2ZhbWlseSB1aW50MTY7IHN1bl9wYXRoIFsx
MDcrMV1pbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3NvY2thZGRyX3VuID0gMTEwCit0eXBlIF9fX2xv
Y2FsZV9zdHJ1Y3Qgc3RydWN0IHsgX19sb2NhbGVzIFsxMisxXSpfX19sb2NhbGVfZGF0YTsgX19j
dHlwZV9iICp1aW50MTY7IF9fY3R5cGVfdG9sb3dlciAqaW50MzI7IF9fY3R5cGVfdG91cHBlciAq
aW50MzI7IF9fbmFtZXMgWzEyKzFdKmludDg7IH0KK2NvbnN0IF9zaXplb2ZfX19sb2NhbGVfc3Ry
dWN0ID0gMjMyCit0eXBlIF9fX2xvY2FsZV90ICpfX19sb2NhbGVfc3RydWN0Cit0eXBlIF9sb2Nh
bGVfdCAqX19fbG9jYWxlX3N0cnVjdAordHlwZSBfdXNlcl9mcHJlZ3Nfc3RydWN0IHN0cnVjdCB7
IGN3ZCB1aW50MTY7IHN3ZCB1aW50MTY7IGZ0dyB1aW50MTY7IGZvcCB1aW50MTY7IHJpcCB1aW50
NjQ7IHJkcCB1aW50NjQ7IG14Y3NyIHVpbnQzMjsgbXhjcl9tYXNrIHVpbnQzMjsgc3Rfc3BhY2Ug
WzMxKzFddWludDMyOyB4bW1fc3BhY2UgWzYzKzFddWludDMyOyBwYWRkaW5nIFsyMysxXXVpbnQz
MjsgfQorY29uc3QgX3NpemVvZl91c2VyX2ZwcmVnc19zdHJ1Y3QgPSA1MTIKK3R5cGUgX3VzZXJf
cmVnc19zdHJ1Y3Qgc3RydWN0IHsgcjE1IHVpbnQ2NDsgcjE0IHVpbnQ2NDsgcjEzIHVpbnQ2NDsg
cjEyIHVpbnQ2NDsgcmJwIHVpbnQ2NDsgcmJ4IHVpbnQ2NDsgcjExIHVpbnQ2NDsgcjEwIHVpbnQ2
NDsgcjkgdWludDY0OyByOCB1aW50NjQ7IHJheCB1aW50NjQ7IHJjeCB1aW50NjQ7IHJkeCB1aW50
NjQ7IHJzaSB1aW50NjQ7IHJkaSB1aW50NjQ7IG9yaWdfcmF4IHVpbnQ2NDsgcmlwIHVpbnQ2NDsg
Y3MgdWludDY0OyBlZmxhZ3MgdWludDY0OyByc3AgdWludDY0OyBzcyB1aW50NjQ7IGZzX2Jhc2Ug
dWludDY0OyBnc19iYXNlIHVpbnQ2NDsgZHMgdWludDY0OyBlcyB1aW50NjQ7IGZzIHVpbnQ2NDsg
Z3MgdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3VzZXJfcmVnc19zdHJ1Y3QgPSAyMTYKK3R5cGUg
X3VzZXIgc3RydWN0IHsgcmVncyBfdXNlcl9yZWdzX3N0cnVjdDsgdV9mcHZhbGlkIGludDMyOyBp
Mzg3IF91c2VyX2ZwcmVnc19zdHJ1Y3Q7IHVfdHNpemUgdWludDY0OyB1X2RzaXplIHVpbnQ2NDsg
dV9zc2l6ZSB1aW50NjQ7IHN0YXJ0X2NvZGUgdWludDY0OyBzdGFydF9zdGFjayB1aW50NjQ7IHNp
Z25hbCBpbnQ2NDsgcmVzZXJ2ZWQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB1X2FyMCAq
X3VzZXJfcmVnc19zdHJ1Y3Q7IHVfZnBzdGF0ZSAqX3VzZXJfZnByZWdzX3N0cnVjdDsgbWFnaWMg
dWludDY0OyB1X2NvbW0gWzMxKzFdaW50ODsgdV9kZWJ1Z3JlZyBbNysxXXVpbnQ2NDsgfQorY29u
c3QgX3NpemVvZl91c2VyID0gOTEyCit0eXBlIF91dHNuYW1lIHN0cnVjdCB7IHN5c25hbWUgWzY0
KzFdaW50ODsgbm9kZW5hbWUgWzY0KzFdaW50ODsgcmVsZWFzZSBbNjQrMV1pbnQ4OyB2ZXJzaW9u
IFs2NCsxXWludDg7IG1hY2hpbmUgWzY0KzFdaW50ODsgZG9tYWlubmFtZSBbNjQrMV1pbnQ4OyB9
Citjb25zdCBfc2l6ZW9mX3V0c25hbWUgPSAzOTAKK3R5cGUgX3RpbWV4IHN0cnVjdCB7IG1vZGVz
IHVpbnQzMjsgb2Zmc2V0IGludDY0OyBmcmVxIGludDY0OyBtYXhlcnJvciBpbnQ2NDsgZXN0ZXJy
b3IgaW50NjQ7IHN0YXR1cyBpbnQzMjsgY29uc3RhbnQgaW50NjQ7IHByZWNpc2lvbiBpbnQ2NDsg
dG9sZXJhbmNlIGludDY0OyB0aW1lIFRpbWV2YWw7IHRpY2sgaW50NjQ7IHBwc2ZyZXEgaW50NjQ7
IGppdHRlciBpbnQ2NDsgc2hpZnQgaW50MzI7IHN0YWJpbCBpbnQ2NDsgaml0Y250IGludDY0OyBj
YWxjbnQgaW50NjQ7IGVycmNudCBpbnQ2NDsgc3RiY250IGludDY0OyB0YWkgaW50MzI7IEdvZHVt
cF8wIGludDMyOyBHb2R1bXBfMSBpbnQzMjsgR29kdW1wXzIgaW50MzI7IEdvZHVtcF8zIGludDMy
OyBHb2R1bXBfNCBpbnQzMjsgR29kdW1wXzUgaW50MzI7IEdvZHVtcF82IGludDMyOyBHb2R1bXBf
NyBpbnQzMjsgR29kdW1wXzggaW50MzI7IEdvZHVtcF85IGludDMyOyBHb2R1bXBfMTAgaW50MzI7
IH0KK2NvbnN0IF9zaXplb2ZfdGltZXggPSAyMDgKK3R5cGUgX3RtIHN0cnVjdCB7IHRtX3NlYyBp
bnQzMjsgdG1fbWluIGludDMyOyB0bV9ob3VyIGludDMyOyB0bV9tZGF5IGludDMyOyB0bV9tb24g
aW50MzI7IHRtX3llYXIgaW50MzI7IHRtX3dkYXkgaW50MzI7IHRtX3lkYXkgaW50MzI7IHRtX2lz
ZHN0IGludDMyOyB0bV9nbXRvZmYgaW50NjQ7IHRtX3pvbmUgKmludDg7IH0KK2NvbnN0IF9zaXpl
b2ZfdG0gPSA1NgordHlwZSBfaXRpbWVyc3BlYyBzdHJ1Y3QgeyBpdF9pbnRlcnZhbCBUaW1lc3Bl
YzsgaXRfdmFsdWUgVGltZXNwZWM7IH0KK2NvbnN0IF9zaXplb2ZfaXRpbWVyc3BlYyA9IDMyCit2
YXIgX19fdHpuYW1lIFsxKzFdKmludDgKK3ZhciBfX19kYXlsaWdodCBpbnQzMgordmFyIF9fX3Rp
bWV6b25lIGludDY0Cit2YXIgX3R6bmFtZSBbMSsxXSppbnQ4Cit2YXIgX2RheWxpZ2h0IGludDMy
Cit2YXIgX2dldGRhdGVfZXJyIGludDMyCit2YXIgX19fZW52aXJvbiAqKmludDgKK3ZhciBfZW52
aXJvbiAqKmludDgKK3ZhciBfb3B0YXJnICppbnQ4Cit2YXIgX29wdGluZCBpbnQzMgordmFyIF9v
cHRlcnIgaW50MzIKK3ZhciBfb3B0b3B0IGludDMyCit0eXBlIF9ycGNlbnQgc3RydWN0IHsgcl9u
YW1lICppbnQ4OyByX2FsaWFzZXMgKippbnQ4OyByX251bWJlciBpbnQzMjsgR29kdW1wXzBfcGFk
IFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfcnBjZW50ID0gMjQKK3R5cGUgX25ldGVudCBzdHJ1
Y3QgeyBuX25hbWUgKmludDg7IG5fYWxpYXNlcyAqKmludDg7IG5fYWRkcnR5cGUgaW50MzI7IG5f
bmV0IHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9uZXRlbnQgPSAyNAordHlwZSBfaG9zdGVudCBz
dHJ1Y3QgeyBoX25hbWUgKmludDg7IGhfYWxpYXNlcyAqKmludDg7IGhfYWRkcnR5cGUgaW50MzI7
IGhfbGVuZ3RoIGludDMyOyBoX2FkZHJfbGlzdCAqKmludDg7IH0KK2NvbnN0IF9zaXplb2ZfaG9z
dGVudCA9IDMyCit0eXBlIF9zZXJ2ZW50IHN0cnVjdCB7IHNfbmFtZSAqaW50ODsgc19hbGlhc2Vz
ICoqaW50ODsgc19wb3J0IGludDMyOyBzX3Byb3RvICppbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3Nl
cnZlbnQgPSAzMgordHlwZSBfcHJvdG9lbnQgc3RydWN0IHsgcF9uYW1lICppbnQ4OyBwX2FsaWFz
ZXMgKippbnQ4OyBwX3Byb3RvIGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3Qg
X3NpemVvZl9wcm90b2VudCA9IDI0Cit0eXBlIF9hZGRyaW5mbyBzdHJ1Y3QgeyBhaV9mbGFncyBp
bnQzMjsgYWlfZmFtaWx5IGludDMyOyBhaV9zb2NrdHlwZSBpbnQzMjsgYWlfcHJvdG9jb2wgaW50
MzI7IGFpX2FkZHJsZW4gdWludDMyOyBhaV9hZGRyICpfc29ja2FkZHI7IGFpX2Nhbm9ubmFtZSAq
aW50ODsgYWlfbmV4dCAqX2FkZHJpbmZvOyB9Citjb25zdCBfc2l6ZW9mX2FkZHJpbmZvID0gNDgK
K3R5cGUgX2dhaWNiIHN0cnVjdCB7IGFyX25hbWUgKmludDg7IGFyX3NlcnZpY2UgKmludDg7IGFy
X3JlcXVlc3QgKl9hZGRyaW5mbzsgYXJfcmVzdWx0ICpfYWRkcmluZm87IF9fcmV0dXJuIGludDMy
OyBfX2dsaWJjX3Jlc2VydmVkIFs0KzFdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfZ2FpY2IgPSA1
NgordHlwZSBfcGFzc3dkIHN0cnVjdCB7IHB3X25hbWUgKmludDg7IHB3X3Bhc3N3ZCAqaW50ODsg
cHdfdWlkIHVpbnQzMjsgcHdfZ2lkIHVpbnQzMjsgcHdfZ2Vjb3MgKmludDg7IHB3X2RpciAqaW50
ODsgcHdfc2hlbGwgKmludDg7IH0KK2NvbnN0IF9zaXplb2ZfcGFzc3dkID0gNDgKK3R5cGUgX0ZJ
TEUgc3RydWN0IHsgfQordHlwZSBfZ3JvdXAgc3RydWN0IHsgZ3JfbmFtZSAqaW50ODsgZ3JfcGFz
c3dkICppbnQ4OyBncl9naWQgdWludDMyOyBncl9tZW0gKippbnQ4OyB9Citjb25zdCBfc2l6ZW9m
X2dyb3VwID0gMzIKK3R5cGUgX3NvY2tfZmlsdGVyIHN0cnVjdCB7IGNvZGUgdWludDE2OyBqdCB1
aW50ODsgamYgdWludDg7IGsgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3NvY2tfZmlsdGVyID0g
OAordHlwZSBfc29ja19mcHJvZyBzdHJ1Y3QgeyBsZW4gdWludDE2OyBmaWx0ZXIgKl9zb2NrX2Zp
bHRlcjsgfQorY29uc3QgX3NpemVvZl9zb2NrX2Zwcm9nID0gMTYKK3R5cGUgX3N5c2luZm8gc3Ry
dWN0IHsgdXB0aW1lIGludDY0OyBsb2FkcyBbMisxXXVpbnQ2NDsgdG90YWxyYW0gdWludDY0OyBm
cmVlcmFtIHVpbnQ2NDsgc2hhcmVkcmFtIHVpbnQ2NDsgYnVmZmVycmFtIHVpbnQ2NDsgdG90YWxz
d2FwIHVpbnQ2NDsgZnJlZXN3YXAgdWludDY0OyBwcm9jcyB1aW50MTY7IHBhZCB1aW50MTY7IHRv
dGFsaGlnaCB1aW50NjQ7IGZyZWVoaWdoIHVpbnQ2NDsgbWVtX3VuaXQgdWludDMyOyBfZiBbMF1p
bnQ4OyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9zeXNpbmZvID0gMTEy
Cit0eXBlIF9fX2tlcm5lbF9zYV9mYW1pbHlfdCB1aW50MTYKK3R5cGUgX19fa2VybmVsX3NvY2th
ZGRyX3N0b3JhZ2Ugc3RydWN0IHsgc3NfZmFtaWx5IHVpbnQxNjsgX19kYXRhIFsxMjUrMV1pbnQ4
OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9fX2tlcm5lbF9zb2Nr
YWRkcl9zdG9yYWdlID0gMTI4Cit0eXBlIF9zb2NrYWRkcl9ubCBzdHJ1Y3QgeyBubF9mYW1pbHkg
dWludDE2OyBubF9wYWQgdWludDE2OyBubF9waWQgdWludDMyOyBubF9ncm91cHMgdWludDMyOyB9
Citjb25zdCBfc2l6ZW9mX3NvY2thZGRyX25sID0gMTIKK3R5cGUgX25sbXNnaGRyIHN0cnVjdCB7
IG5sbXNnX2xlbiB1aW50MzI7IG5sbXNnX3R5cGUgdWludDE2OyBubG1zZ19mbGFncyB1aW50MTY7
IG5sbXNnX3NlcSB1aW50MzI7IG5sbXNnX3BpZCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zfbmxt
c2doZHIgPSAxNgordHlwZSBfbmxtc2dlcnIgc3RydWN0IHsgZXJyb3IgaW50MzI7IG1zZyBfbmxt
c2doZHI7IH0KK2NvbnN0IF9zaXplb2Zfbmxtc2dlcnIgPSAyMAordHlwZSBfbmxfcGt0aW5mbyBz
dHJ1Y3QgeyBncm91cCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmxfcGt0aW5mbyA9IDQKK3R5
cGUgX25sX21tYXBfcmVxIHN0cnVjdCB7IG5tX2Jsb2NrX3NpemUgdWludDMyOyBubV9ibG9ja19u
ciB1aW50MzI7IG5tX2ZyYW1lX3NpemUgdWludDMyOyBubV9mcmFtZV9uciB1aW50MzI7IH0KK2Nv
bnN0IF9zaXplb2ZfbmxfbW1hcF9yZXEgPSAxNgordHlwZSBfbmxfbW1hcF9oZHIgc3RydWN0IHsg
bm1fc3RhdHVzIHVpbnQzMjsgbm1fbGVuIHVpbnQzMjsgbm1fZ3JvdXAgdWludDMyOyBubV9waWQg
dWludDMyOyBubV91aWQgdWludDMyOyBubV9naWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25s
X21tYXBfaGRyID0gMjQKK3R5cGUgX25sYXR0ciBzdHJ1Y3QgeyBubGFfbGVuIHVpbnQxNjsgbmxh
X3R5cGUgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX25sYXR0ciA9IDQKK3R5cGUgX25sYV9iaXRm
aWVsZDMyIHN0cnVjdCB7IHZhbHVlIHVpbnQzMjsgc2VsZWN0b3IgdWludDMyOyB9Citjb25zdCBf
c2l6ZW9mX25sYV9iaXRmaWVsZDMyID0gOAordHlwZSBfaWZhZGRybXNnIHN0cnVjdCB7IGlmYV9m
YW1pbHkgdWludDg7IGlmYV9wcmVmaXhsZW4gdWludDg7IGlmYV9mbGFncyB1aW50ODsgaWZhX3Nj
b3BlIHVpbnQ4OyBpZmFfaW5kZXggdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmYWRkcm1zZyA9
IDgKK3R5cGUgX2lmYV9jYWNoZWluZm8gc3RydWN0IHsgaWZhX3ByZWZlcmVkIHVpbnQzMjsgaWZh
X3ZhbGlkIHVpbnQzMjsgY3N0YW1wIHVpbnQzMjsgdHN0YW1wIHVpbnQzMjsgfQorY29uc3QgX3Np
emVvZl9pZmFfY2FjaGVpbmZvID0gMTYKK3R5cGUgX3R1bl9waSBzdHJ1Y3QgeyBmbGFncyB1aW50
MTY7IHByb3RvIHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl90dW5fcGkgPSA0Cit0eXBlIF90dW5f
ZmlsdGVyIHN0cnVjdCB7IGZsYWdzIHVpbnQxNjsgY291bnQgdWludDE2OyBhZGRyIFswXVs1KzFd
dWludDg7IH0KK2NvbnN0IF9zaXplb2ZfdHVuX2ZpbHRlciA9IDQKK3R5cGUgX3B0cmFjZV9wZWVr
c2lnaW5mb19hcmdzIHN0cnVjdCB7IG9mZiB1aW50NjQ7IGZsYWdzIHVpbnQzMjsgbnIgaW50MzI7
IH0KK2NvbnN0IF9zaXplb2ZfcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3MgPSAxNgordHlwZSBfc2Vj
Y29tcF9tZXRhZGF0YSBzdHJ1Y3QgeyBmaWx0ZXJfb2ZmIHVpbnQ2NDsgZmxhZ3MgdWludDY0OyB9
Citjb25zdCBfc2l6ZW9mX3NlY2NvbXBfbWV0YWRhdGEgPSAxNgordHlwZSBfcHRfcmVncyBzdHJ1
Y3QgeyByMTUgdWludDY0OyByMTQgdWludDY0OyByMTMgdWludDY0OyByMTIgdWludDY0OyByYnAg
dWludDY0OyByYnggdWludDY0OyByMTEgdWludDY0OyByMTAgdWludDY0OyByOSB1aW50NjQ7IHI4
IHVpbnQ2NDsgcmF4IHVpbnQ2NDsgcmN4IHVpbnQ2NDsgcmR4IHVpbnQ2NDsgcnNpIHVpbnQ2NDsg
cmRpIHVpbnQ2NDsgb3JpZ19yYXggdWludDY0OyByaXAgdWludDY0OyBjcyB1aW50NjQ7IGVmbGFn
cyB1aW50NjQ7IHJzcCB1aW50NjQ7IHNzIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9wdF9yZWdz
ID0gMTY4Cit0eXBlIF9ydG5sX2xpbmtfc3RhdHMgc3RydWN0IHsgcnhfcGFja2V0cyB1aW50MzI7
IHR4X3BhY2tldHMgdWludDMyOyByeF9ieXRlcyB1aW50MzI7IHR4X2J5dGVzIHVpbnQzMjsgcnhf
ZXJyb3JzIHVpbnQzMjsgdHhfZXJyb3JzIHVpbnQzMjsgcnhfZHJvcHBlZCB1aW50MzI7IHR4X2Ry
b3BwZWQgdWludDMyOyBtdWx0aWNhc3QgdWludDMyOyBjb2xsaXNpb25zIHVpbnQzMjsgcnhfbGVu
Z3RoX2Vycm9ycyB1aW50MzI7IHJ4X292ZXJfZXJyb3JzIHVpbnQzMjsgcnhfY3JjX2Vycm9ycyB1
aW50MzI7IHJ4X2ZyYW1lX2Vycm9ycyB1aW50MzI7IHJ4X2ZpZm9fZXJyb3JzIHVpbnQzMjsgcnhf
bWlzc2VkX2Vycm9ycyB1aW50MzI7IHR4X2Fib3J0ZWRfZXJyb3JzIHVpbnQzMjsgdHhfY2Fycmll
cl9lcnJvcnMgdWludDMyOyB0eF9maWZvX2Vycm9ycyB1aW50MzI7IHR4X2hlYXJ0YmVhdF9lcnJv
cnMgdWludDMyOyB0eF93aW5kb3dfZXJyb3JzIHVpbnQzMjsgcnhfY29tcHJlc3NlZCB1aW50MzI7
IHR4X2NvbXByZXNzZWQgdWludDMyOyByeF9ub2hhbmRsZXIgdWludDMyOyB9Citjb25zdCBfc2l6
ZW9mX3J0bmxfbGlua19zdGF0cyA9IDk2Cit0eXBlIF9ydG5sX2xpbmtfc3RhdHM2NCBzdHJ1Y3Qg
eyByeF9wYWNrZXRzIHVpbnQ2NDsgdHhfcGFja2V0cyB1aW50NjQ7IHJ4X2J5dGVzIHVpbnQ2NDsg
dHhfYnl0ZXMgdWludDY0OyByeF9lcnJvcnMgdWludDY0OyB0eF9lcnJvcnMgdWludDY0OyByeF9k
cm9wcGVkIHVpbnQ2NDsgdHhfZHJvcHBlZCB1aW50NjQ7IG11bHRpY2FzdCB1aW50NjQ7IGNvbGxp
c2lvbnMgdWludDY0OyByeF9sZW5ndGhfZXJyb3JzIHVpbnQ2NDsgcnhfb3Zlcl9lcnJvcnMgdWlu
dDY0OyByeF9jcmNfZXJyb3JzIHVpbnQ2NDsgcnhfZnJhbWVfZXJyb3JzIHVpbnQ2NDsgcnhfZmlm
b19lcnJvcnMgdWludDY0OyByeF9taXNzZWRfZXJyb3JzIHVpbnQ2NDsgdHhfYWJvcnRlZF9lcnJv
cnMgdWludDY0OyB0eF9jYXJyaWVyX2Vycm9ycyB1aW50NjQ7IHR4X2ZpZm9fZXJyb3JzIHVpbnQ2
NDsgdHhfaGVhcnRiZWF0X2Vycm9ycyB1aW50NjQ7IHR4X3dpbmRvd19lcnJvcnMgdWludDY0OyBy
eF9jb21wcmVzc2VkIHVpbnQ2NDsgdHhfY29tcHJlc3NlZCB1aW50NjQ7IHJ4X25vaGFuZGxlciB1
aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcnRubF9saW5rX3N0YXRzNjQgPSAxOTIKK3R5cGUgX3J0
bmxfbGlua19pZm1hcCBzdHJ1Y3QgeyBtZW1fc3RhcnQgdWludDY0OyBtZW1fZW5kIHVpbnQ2NDsg
YmFzZV9hZGRyIHVpbnQ2NDsgaXJxIHVpbnQxNjsgZG1hIHVpbnQ4OyBwb3J0IHVpbnQ4OyBHb2R1
bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9ydG5sX2xpbmtfaWZtYXAgPSAzMgor
dHlwZSBfaWZsYV9icmlkZ2VfaWQgc3RydWN0IHsgcHJpbyBbMSsxXXVpbnQ4OyBhZGRyIFs1KzFd
dWludDg7IH0KK2NvbnN0IF9zaXplb2ZfaWZsYV9icmlkZ2VfaWQgPSA4Cit0eXBlIF9pZmxhX2Nh
Y2hlaW5mbyBzdHJ1Y3QgeyBtYXhfcmVhc21fbGVuIHVpbnQzMjsgdHN0YW1wIHVpbnQzMjsgcmVh
Y2hhYmxlX3RpbWUgdWludDMyOyByZXRyYW5zX3RpbWUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9m
X2lmbGFfY2FjaGVpbmZvID0gMTYKK3R5cGUgX2lmbGFfdmxhbl9mbGFncyBzdHJ1Y3QgeyBmbGFn
cyB1aW50MzI7IG1hc2sgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmxhbl9mbGFncyA9
IDgKK3R5cGUgX2lmbGFfdmxhbl9xb3NfbWFwcGluZyBzdHJ1Y3QgeyBmcm9tIHVpbnQzMjsgdG8g
dWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmxhbl9xb3NfbWFwcGluZyA9IDgKK3R5cGUg
X2lmbGFfdnhsYW5fcG9ydF9yYW5nZSBzdHJ1Y3QgeyBsb3cgdWludDE2OyBoaWdoIHVpbnQxNjsg
fQorY29uc3QgX3NpemVvZl9pZmxhX3Z4bGFuX3BvcnRfcmFuZ2UgPSA0Cit0eXBlIF9pZmxhX3Zm
X21hYyBzdHJ1Y3QgeyB2ZiB1aW50MzI7IG1hYyBbMzErMV11aW50ODsgfQorY29uc3QgX3NpemVv
Zl9pZmxhX3ZmX21hYyA9IDM2Cit0eXBlIF9pZmxhX3ZmX3ZsYW4gc3RydWN0IHsgdmYgdWludDMy
OyB2bGFuIHVpbnQzMjsgcW9zIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3ZsYW4g
PSAxMgordHlwZSBfaWZsYV92Zl92bGFuX2luZm8gc3RydWN0IHsgdmYgdWludDMyOyB2bGFuIHVp
bnQzMjsgcW9zIHVpbnQzMjsgdmxhbl9wcm90byB1aW50MTY7IEdvZHVtcF8wX3BhZCBbMl1ieXRl
OyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZfdmxhbl9pbmZvID0gMTYKK3R5cGUgX2lmbGFfdmZf
dHhfcmF0ZSBzdHJ1Y3QgeyB2ZiB1aW50MzI7IHJhdGUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9m
X2lmbGFfdmZfdHhfcmF0ZSA9IDgKK3R5cGUgX2lmbGFfdmZfcmF0ZSBzdHJ1Y3QgeyB2ZiB1aW50
MzI7IG1pbl90eF9yYXRlIHVpbnQzMjsgbWF4X3R4X3JhdGUgdWludDMyOyB9Citjb25zdCBfc2l6
ZW9mX2lmbGFfdmZfcmF0ZSA9IDEyCit0eXBlIF9pZmxhX3ZmX3Nwb29mY2hrIHN0cnVjdCB7IHZm
IHVpbnQzMjsgc2V0dGluZyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9zcG9vZmNo
ayA9IDgKK3R5cGUgX2lmbGFfdmZfZ3VpZCBzdHJ1Y3QgeyB2ZiB1aW50MzI7IGd1aWQgdWludDY0
OyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZfZ3VpZCA9IDE2Cit0eXBlIF9pZmxhX3ZmX2xpbmtf
c3RhdGUgc3RydWN0IHsgdmYgdWludDMyOyBsaW5rX3N0YXRlIHVpbnQzMjsgfQorY29uc3QgX3Np
emVvZl9pZmxhX3ZmX2xpbmtfc3RhdGUgPSA4Cit0eXBlIF9pZmxhX3ZmX3Jzc19xdWVyeV9lbiBz
dHJ1Y3QgeyB2ZiB1aW50MzI7IHNldHRpbmcgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFf
dmZfcnNzX3F1ZXJ5X2VuID0gOAordHlwZSBfaWZsYV92Zl90cnVzdCBzdHJ1Y3QgeyB2ZiB1aW50
MzI7IHNldHRpbmcgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZfdHJ1c3QgPSA4Cit0
eXBlIF9pZmxhX3BvcnRfdnNpIHN0cnVjdCB7IHZzaV9tZ3JfaWQgdWludDg7IHZzaV90eXBlX2lk
IFsyKzFddWludDg7IHZzaV90eXBlX3ZlcnNpb24gdWludDg7IHBhZCBbMisxXXVpbnQ4OyB9Citj
b25zdCBfc2l6ZW9mX2lmbGFfcG9ydF92c2kgPSA4Cit0eXBlIF9pZl9zdGF0c19tc2cgc3RydWN0
IHsgZmFtaWx5IHVpbnQ4OyBwYWQxIHVpbnQ4OyBwYWQyIHVpbnQxNjsgaWZpbmRleCB1aW50MzI7
IGZpbHRlcl9tYXNrIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZl9zdGF0c19tc2cgPSAxMgor
dHlwZSBfaWZsYV9ybW5ldF9mbGFncyBzdHJ1Y3QgeyBmbGFncyB1aW50MzI7IG1hc2sgdWludDMy
OyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfcm1uZXRfZmxhZ3MgPSA4Cit0eXBlIF9uZG1zZyBzdHJ1
Y3QgeyBuZG1fZmFtaWx5IHVpbnQ4OyBuZG1fcGFkMSB1aW50ODsgbmRtX3BhZDIgdWludDE2OyBu
ZG1faWZpbmRleCBpbnQzMjsgbmRtX3N0YXRlIHVpbnQxNjsgbmRtX2ZsYWdzIHVpbnQ4OyBuZG1f
dHlwZSB1aW50ODsgfQorY29uc3QgX3NpemVvZl9uZG1zZyA9IDEyCit0eXBlIF9uZGFfY2FjaGVp
bmZvIHN0cnVjdCB7IG5kbV9jb25maXJtZWQgdWludDMyOyBuZG1fdXNlZCB1aW50MzI7IG5kbV91
cGRhdGVkIHVpbnQzMjsgbmRtX3JlZmNudCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmRhX2Nh
Y2hlaW5mbyA9IDE2Cit0eXBlIF9uZHRfc3RhdHMgc3RydWN0IHsgbmR0c19hbGxvY3MgdWludDY0
OyBuZHRzX2Rlc3Ryb3lzIHVpbnQ2NDsgbmR0c19oYXNoX2dyb3dzIHVpbnQ2NDsgbmR0c19yZXNf
ZmFpbGVkIHVpbnQ2NDsgbmR0c19sb29rdXBzIHVpbnQ2NDsgbmR0c19oaXRzIHVpbnQ2NDsgbmR0
c19yY3ZfcHJvYmVzX21jYXN0IHVpbnQ2NDsgbmR0c19yY3ZfcHJvYmVzX3VjYXN0IHVpbnQ2NDsg
bmR0c19wZXJpb2RpY19nY19ydW5zIHVpbnQ2NDsgbmR0c19mb3JjZWRfZ2NfcnVucyB1aW50NjQ7
IG5kdHNfdGFibGVfZnVsbHMgdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX25kdF9zdGF0cyA9IDg4
Cit0eXBlIF9uZHRtc2cgc3RydWN0IHsgbmR0bV9mYW1pbHkgdWludDg7IG5kdG1fcGFkMSB1aW50
ODsgbmR0bV9wYWQyIHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl9uZHRtc2cgPSA0Cit0eXBlIF9u
ZHRfY29uZmlnIHN0cnVjdCB7IG5kdGNfa2V5X2xlbiB1aW50MTY7IG5kdGNfZW50cnlfc2l6ZSB1
aW50MTY7IG5kdGNfZW50cmllcyB1aW50MzI7IG5kdGNfbGFzdF9mbHVzaCB1aW50MzI7IG5kdGNf
bGFzdF9yYW5kIHVpbnQzMjsgbmR0Y19oYXNoX3JuZCB1aW50MzI7IG5kdGNfaGFzaF9tYXNrIHVp
bnQzMjsgbmR0Y19oYXNoX2NoYWluX2djIHVpbnQzMjsgbmR0Y19wcm94eV9xbGVuIHVpbnQzMjsg
fQorY29uc3QgX3NpemVvZl9uZHRfY29uZmlnID0gMzIKK3R5cGUgX3J0YXR0ciBzdHJ1Y3QgeyBy
dGFfbGVuIHVpbnQxNjsgcnRhX3R5cGUgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX3J0YXR0ciA9
IDQKK3R5cGUgX3J0bXNnIHN0cnVjdCB7IHJ0bV9mYW1pbHkgdWludDg7IHJ0bV9kc3RfbGVuIHVp
bnQ4OyBydG1fc3JjX2xlbiB1aW50ODsgcnRtX3RvcyB1aW50ODsgcnRtX3RhYmxlIHVpbnQ4OyBy
dG1fcHJvdG9jb2wgdWludDg7IHJ0bV9zY29wZSB1aW50ODsgcnRtX3R5cGUgdWludDg7IHJ0bV9m
bGFncyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcnRtc2cgPSAxMgordHlwZSBfcnRuZXh0aG9w
IHN0cnVjdCB7IHJ0bmhfbGVuIHVpbnQxNjsgcnRuaF9mbGFncyB1aW50ODsgcnRuaF9ob3BzIHVp
bnQ4OyBydG5oX2lmaW5kZXggaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcnRuZXh0aG9wID0gOAor
dHlwZSBfcnR2aWEgc3RydWN0IHsgcnR2aWFfZmFtaWx5IHVpbnQxNjsgcnR2aWFfYWRkciBbMF11
aW50ODsgfQorY29uc3QgX3NpemVvZl9ydHZpYSA9IDIKK3R5cGUgX3J0YV9jYWNoZWluZm8gc3Ry
dWN0IHsgcnRhX2NsbnRyZWYgdWludDMyOyBydGFfbGFzdHVzZSB1aW50MzI7IHJ0YV9leHBpcmVz
IGludDMyOyBydGFfZXJyb3IgdWludDMyOyBydGFfdXNlZCB1aW50MzI7IHJ0YV9pZCB1aW50MzI7
IHJ0YV90cyB1aW50MzI7IHJ0YV90c2FnZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcnRhX2Nh
Y2hlaW5mbyA9IDMyCit0eXBlIF9ydGFfc2Vzc2lvbiBzdHJ1Y3QgeyBwcm90byB1aW50ODsgcGFk
MSB1aW50ODsgcGFkMiB1aW50MTY7IHUgc3RydWN0IHsgcG9ydHMgc3RydWN0IHsgc3BvcnQgdWlu
dDE2OyBkcG9ydCB1aW50MTY7IH07IEdvZHVtcF8wX2FsaWduIFswXWludDMyOyB9OyB9Citjb25z
dCBfc2l6ZW9mX3J0YV9zZXNzaW9uID0gOAordHlwZSBfcnRhX21mY19zdGF0cyBzdHJ1Y3QgeyBt
ZmNzX3BhY2tldHMgdWludDY0OyBtZmNzX2J5dGVzIHVpbnQ2NDsgbWZjc193cm9uZ19pZiB1aW50
NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcnRhX21mY19zdGF0cyA9IDI0Cit0eXBlIF9ydGdlbm1zZyBz
dHJ1Y3QgeyBydGdlbl9mYW1pbHkgdWludDg7IH0KK2NvbnN0IF9zaXplb2ZfcnRnZW5tc2cgPSAx
Cit0eXBlIF9pZmluZm9tc2cgc3RydWN0IHsgaWZpX2ZhbWlseSB1aW50ODsgX19pZmlfcGFkIHVp
bnQ4OyBpZmlfdHlwZSB1aW50MTY7IGlmaV9pbmRleCBpbnQzMjsgaWZpX2ZsYWdzIHVpbnQzMjsg
aWZpX2NoYW5nZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZpbmZvbXNnID0gMTYKK3R5cGUg
X3ByZWZpeG1zZyBzdHJ1Y3QgeyBwcmVmaXhfZmFtaWx5IHVpbnQ4OyBwcmVmaXhfcGFkMSB1aW50
ODsgcHJlZml4X3BhZDIgdWludDE2OyBwcmVmaXhfaWZpbmRleCBpbnQzMjsgcHJlZml4X3R5cGUg
dWludDg7IHByZWZpeF9sZW4gdWludDg7IHByZWZpeF9mbGFncyB1aW50ODsgcHJlZml4X3BhZDMg
dWludDg7IH0KK2NvbnN0IF9zaXplb2ZfcHJlZml4bXNnID0gMTIKK3R5cGUgX3ByZWZpeF9jYWNo
ZWluZm8gc3RydWN0IHsgcHJlZmVycmVkX3RpbWUgdWludDMyOyB2YWxpZF90aW1lIHVpbnQzMjsg
fQorY29uc3QgX3NpemVvZl9wcmVmaXhfY2FjaGVpbmZvID0gOAordHlwZSBfdGNtc2cgc3RydWN0
IHsgdGNtX2ZhbWlseSB1aW50ODsgdGNtX19wYWQxIHVpbnQ4OyB0Y21fX3BhZDIgdWludDE2OyB0
Y21faWZpbmRleCBpbnQzMjsgdGNtX2hhbmRsZSB1aW50MzI7IHRjbV9wYXJlbnQgdWludDMyOyB0
Y21faW5mbyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGNtc2cgPSAyMAordHlwZSBfbmR1c2Vy
b3B0bXNnIHN0cnVjdCB7IG5kdXNlcm9wdF9mYW1pbHkgdWludDg7IG5kdXNlcm9wdF9wYWQxIHVp
bnQ4OyBuZHVzZXJvcHRfb3B0c19sZW4gdWludDE2OyBuZHVzZXJvcHRfaWZpbmRleCBpbnQzMjsg
bmR1c2Vyb3B0X2ljbXBfdHlwZSB1aW50ODsgbmR1c2Vyb3B0X2ljbXBfY29kZSB1aW50ODsgbmR1
c2Vyb3B0X3BhZDIgdWludDE2OyBuZHVzZXJvcHRfcGFkMyB1aW50MzI7IH0KK2NvbnN0IF9zaXpl
b2ZfbmR1c2Vyb3B0bXNnID0gMTYKK3R5cGUgX3RjYW1zZyBzdHJ1Y3QgeyB0Y2FfZmFtaWx5IHVp
bnQ4OyB0Y2FfX3BhZDEgdWludDg7IHRjYV9fcGFkMiB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2Zf
dGNhbXNnID0gNAordHlwZSBfaWZfbmFtZWluZGV4IHN0cnVjdCB7IGlmX2luZGV4IHVpbnQzMjsg
aWZfbmFtZSAqaW50ODsgfQorY29uc3QgX3NpemVvZl9pZl9uYW1laW5kZXggPSAxNgordHlwZSBf
aWZhZGRyIHN0cnVjdCB7IGlmYV9hZGRyIF9zb2NrYWRkcjsgaWZhX2lmdSBzdHJ1Y3QgeyBpZnVf
YnJvYWRhZGRyIF9zb2NrYWRkcjsgfTsgaWZhX2lmcCAqX2lmYWNlOyBpZmFfbmV4dCAqX2lmYWRk
cjsgfQorY29uc3QgX3NpemVvZl9pZmFkZHIgPSA0OAordHlwZSBfaWZtYXAgc3RydWN0IHsgbWVt
X3N0YXJ0IHVpbnQ2NDsgbWVtX2VuZCB1aW50NjQ7IGJhc2VfYWRkciB1aW50MTY7IGlycSB1aW50
ODsgZG1hIHVpbnQ4OyBwb3J0IHVpbnQ4OyBHb2R1bXBfMF9wYWQgWzNdYnl0ZTsgfQorY29uc3Qg
X3NpemVvZl9pZm1hcCA9IDI0Cit0eXBlIF9pZnJlcSBzdHJ1Y3QgeyBpZnJfaWZybiBzdHJ1Y3Qg
eyBpZnJuX25hbWUgWzE1KzFdaW50ODsgfTsgaWZyX2lmcnUgc3RydWN0IHsgaWZydV9hZGRyIF9z
b2NrYWRkcjsgR29kdW1wXzBfcGFkIFs4XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0OyB9
OyB9Citjb25zdCBfc2l6ZW9mX2lmcmVxID0gNDAKK3R5cGUgX2lmY29uZiBzdHJ1Y3QgeyBpZmNf
bGVuIGludDMyOyBpZmNfaWZjdSBzdHJ1Y3QgeyBpZmN1X2J1ZiBfX19jYWRkcl90OyB9OyB9Citj
b25zdCBfc2l6ZW9mX2lmY29uZiA9IDE2Cit0eXBlIF9ydGVudHJ5IHN0cnVjdCB7IHJ0X3BhZDEg
dWludDY0OyBydF9kc3QgX3NvY2thZGRyOyBydF9nYXRld2F5IF9zb2NrYWRkcjsgcnRfZ2VubWFz
ayBfc29ja2FkZHI7IHJ0X2ZsYWdzIHVpbnQxNjsgcnRfcGFkMiBpbnQxNjsgcnRfcGFkMyB1aW50
NjQ7IHJ0X3RvcyB1aW50ODsgcnRfY2xhc3MgdWludDg7IHJ0X3BhZDQgWzIrMV1pbnQxNjsgcnRf
bWV0cmljIGludDE2OyBydF9kZXYgKmludDg7IHJ0X210dSB1aW50NjQ7IHJ0X3dpbmRvdyB1aW50
NjQ7IHJ0X2lydHQgdWludDE2OyBHb2R1bXBfMF9wYWQgWzZdYnl0ZTsgfQorY29uc3QgX3NpemVv
Zl9ydGVudHJ5ID0gMTIwCitjb25zdCBfc2l6ZW9mX2luNl9ydG1zZyA9IDgwCit0eXBlIF9zb2Nr
YWRkcl9sbCBzdHJ1Y3QgeyBzbGxfZmFtaWx5IHVpbnQxNjsgc2xsX3Byb3RvY29sIHVpbnQxNjsg
c2xsX2lmaW5kZXggaW50MzI7IHNsbF9oYXR5cGUgdWludDE2OyBzbGxfcGt0dHlwZSB1aW50ODsg
c2xsX2hhbGVuIHVpbnQ4OyBzbGxfYWRkciBbNysxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3Nv
Y2thZGRyX2xsID0gMjAKK3R5cGUgX3BhY2tldF9tcmVxIHN0cnVjdCB7IG1yX2lmaW5kZXggaW50
MzI7IG1yX3R5cGUgdWludDE2OyBtcl9hbGVuIHVpbnQxNjsgbXJfYWRkcmVzcyBbNysxXXVpbnQ4
OyB9Citjb25zdCBfc2l6ZW9mX3BhY2tldF9tcmVxID0gMTYKK3R5cGUgX3N0YXRmcyBzdHJ1Y3Qg
eyBmX3R5cGUgaW50NjQ7IGZfYnNpemUgaW50NjQ7IGZfYmxvY2tzIHVpbnQ2NDsgZl9iZnJlZSB1
aW50NjQ7IGZfYmF2YWlsIHVpbnQ2NDsgZl9maWxlcyB1aW50NjQ7IGZfZmZyZWUgdWludDY0OyBm
X2ZzaWQgX19fZnNpZF90OyBmX25hbWVsZW4gaW50NjQ7IGZfZnJzaXplIGludDY0OyBmX2ZsYWdz
IGludDY0OyBmX3NwYXJlIFszKzFdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2Zfc3RhdGZzID0gMTIw
Cit0eXBlIF9zdGF0ZnM2NCBzdHJ1Y3QgeyBmX3R5cGUgaW50NjQ7IGZfYnNpemUgaW50NjQ7IGZf
YmxvY2tzIHVpbnQ2NDsgZl9iZnJlZSB1aW50NjQ7IGZfYmF2YWlsIHVpbnQ2NDsgZl9maWxlcyB1
aW50NjQ7IGZfZmZyZWUgdWludDY0OyBmX2ZzaWQgX19fZnNpZF90OyBmX25hbWVsZW4gaW50NjQ7
IGZfZnJzaXplIGludDY0OyBmX2ZsYWdzIGludDY0OyBmX3NwYXJlIFszKzFdaW50NjQ7IH0KK2Nv
bnN0IF9zaXplb2Zfc3RhdGZzNjQgPSAxMjAKK3R5cGUgX250cHRpbWV2YWwgc3RydWN0IHsgdGlt
ZSBUaW1ldmFsOyBtYXhlcnJvciBpbnQ2NDsgZXN0ZXJyb3IgaW50NjQ7IHRhaSBpbnQ2NDsgX19n
bGliY19yZXNlcnZlZDEgaW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQyIGludDY0OyBfX2dsaWJjX3Jl
c2VydmVkMyBpbnQ2NDsgX19nbGliY19yZXNlcnZlZDQgaW50NjQ7IH0KK2NvbnN0IF9zaXplb2Zf
bnRwdGltZXZhbCA9IDcyCit0eXBlIF91dGltYnVmIHN0cnVjdCB7IGFjdGltZSBpbnQ2NDsgbW9k
dGltZSBpbnQ2NDsgfQorY29uc3QgX3NpemVvZl91dGltYnVmID0gMTYKK3R5cGUgX2ZpbGVfY2xv
bmVfcmFuZ2Ugc3RydWN0IHsgc3JjX2ZkIGludDY0OyBzcmNfb2Zmc2V0IHVpbnQ2NDsgc3JjX2xl
bmd0aCB1aW50NjQ7IGRlc3Rfb2Zmc2V0IHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9maWxlX2Ns
b25lX3JhbmdlID0gMzIKK3R5cGUgX2ZzdHJpbV9yYW5nZSBzdHJ1Y3QgeyBzdGFydCB1aW50NjQ7
IGxlbiB1aW50NjQ7IG1pbmxlbiB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZnN0cmltX3Jhbmdl
ID0gMjQKK3R5cGUgX2ZpbGVfZGVkdXBlX3JhbmdlX2luZm8gc3RydWN0IHsgZGVzdF9mZCBpbnQ2
NDsgZGVzdF9vZmZzZXQgdWludDY0OyBieXRlc19kZWR1cGVkIHVpbnQ2NDsgc3RhdHVzIGludDMy
OyByZXNlcnZlZCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfZmlsZV9kZWR1cGVfcmFuZ2VfaW5m
byA9IDMyCit0eXBlIF9maWxlX2RlZHVwZV9yYW5nZSBzdHJ1Y3QgeyBzcmNfb2Zmc2V0IHVpbnQ2
NDsgc3JjX2xlbmd0aCB1aW50NjQ7IGRlc3RfY291bnQgdWludDE2OyByZXNlcnZlZDEgdWludDE2
OyByZXNlcnZlZDIgdWludDMyOyBpbmZvIFswXV9maWxlX2RlZHVwZV9yYW5nZV9pbmZvOyB9Citj
b25zdCBfc2l6ZW9mX2ZpbGVfZGVkdXBlX3JhbmdlID0gMjQKK3R5cGUgX2ZpbGVzX3N0YXRfc3Ry
dWN0IHN0cnVjdCB7IG5yX2ZpbGVzIHVpbnQ2NDsgbnJfZnJlZV9maWxlcyB1aW50NjQ7IG1heF9m
aWxlcyB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZmlsZXNfc3RhdF9zdHJ1Y3QgPSAyNAordHlw
ZSBfaW5vZGVzX3N0YXRfdCBzdHJ1Y3QgeyBucl9pbm9kZXMgaW50NjQ7IG5yX3VudXNlZCBpbnQ2
NDsgZHVtbXkgWzQrMV1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9pbm9kZXNfc3RhdF90ID0gNTYK
K3R5cGUgX2ZzeGF0dHIgc3RydWN0IHsgZnN4X3hmbGFncyB1aW50MzI7IGZzeF9leHRzaXplIHVp
bnQzMjsgZnN4X25leHRlbnRzIHVpbnQzMjsgZnN4X3Byb2ppZCB1aW50MzI7IGZzeF9jb3dleHRz
aXplIHVpbnQzMjsgZnN4X3BhZCBbNysxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2ZzeGF0dHIg
PSAyOAordHlwZSBfZnNjcnlwdF9wb2xpY3kgc3RydWN0IHsgdmVyc2lvbiB1aW50ODsgY29udGVu
dHNfZW5jcnlwdGlvbl9tb2RlIHVpbnQ4OyBmaWxlbmFtZXNfZW5jcnlwdGlvbl9tb2RlIHVpbnQ4
OyBmbGFncyB1aW50ODsgbWFzdGVyX2tleV9kZXNjcmlwdG9yIFs3KzFddWludDg7IH0KK2NvbnN0
IF9zaXplb2ZfZnNjcnlwdF9wb2xpY3kgPSAxMgordHlwZSBfZnNjcnlwdF9rZXkgc3RydWN0IHsg
bW9kZSB1aW50MzI7IHJhdyBbNjMrMV11aW50ODsgc2l6ZSB1aW50MzI7IH0KK2NvbnN0IF9zaXpl
b2ZfZnNjcnlwdF9rZXkgPSA3MgordHlwZSBfX19rZXJuZWxfcndmX3QgaW50MzIKK3R5cGUgX2lu
b3RpZnlfZXZlbnQgc3RydWN0IHsgd2QgaW50MzI7IG1hc2sgdWludDMyOyBjb29raWUgdWludDMy
OyBsZW4gdWludDMyOyBuYW1lIFswXWludDg7IH0KK2NvbnN0IF9zaXplb2ZfaW5vdGlmeV9ldmVu
dCA9IDE2Cit0eXBlIF9fX2d3Y2hhcl90IGludDMyCit0eXBlIF9pbWF4ZGl2X3Qgc3RydWN0IHsg
cXVvdCBpbnQ2NDsgcmVtIGludDY0OyB9Citjb25zdCBfc2l6ZW9mX2ltYXhkaXZfdCA9IDE2Cit0
eXBlIF9pY21wNl9maWx0ZXIgc3RydWN0IHsgaWNtcDZfZmlsdCBbNysxXXVpbnQzMjsgfQorY29u
c3QgX3NpemVvZl9pY21wNl9maWx0ZXIgPSAzMgordHlwZSBfaWNtcDZfaGRyIHN0cnVjdCB7IGlj
bXA2X3R5cGUgdWludDg7IGljbXA2X2NvZGUgdWludDg7IGljbXA2X2Nrc3VtIHVpbnQxNjsgaWNt
cDZfZGF0YXVuIHN0cnVjdCB7IGljbXA2X3VuX2RhdGEzMiBbMCsxXXVpbnQzMjsgfTsgfQorY29u
c3QgX3NpemVvZl9pY21wNl9oZHIgPSA4Cit0eXBlIF9uZF9yb3V0ZXJfc29saWNpdCBzdHJ1Y3Qg
eyBuZF9yc19oZHIgX2ljbXA2X2hkcjsgfQorY29uc3QgX3NpemVvZl9uZF9yb3V0ZXJfc29saWNp
dCA9IDgKK3R5cGUgX25kX3JvdXRlcl9hZHZlcnQgc3RydWN0IHsgbmRfcmFfaGRyIF9pY21wNl9o
ZHI7IG5kX3JhX3JlYWNoYWJsZSB1aW50MzI7IG5kX3JhX3JldHJhbnNtaXQgdWludDMyOyB9Citj
b25zdCBfc2l6ZW9mX25kX3JvdXRlcl9hZHZlcnQgPSAxNgorY29uc3QgX3NpemVvZl9uZF9uZWln
aGJvcl9zb2xpY2l0ID0gMjQKK2NvbnN0IF9zaXplb2ZfbmRfbmVpZ2hib3JfYWR2ZXJ0ID0gMjQK
K2NvbnN0IF9zaXplb2ZfbmRfcmVkaXJlY3QgPSA0MAordHlwZSBfbmRfb3B0X2hkciBzdHJ1Y3Qg
eyBuZF9vcHRfdHlwZSB1aW50ODsgbmRfb3B0X2xlbiB1aW50ODsgfQorY29uc3QgX3NpemVvZl9u
ZF9vcHRfaGRyID0gMgorY29uc3QgX3NpemVvZl9uZF9vcHRfcHJlZml4X2luZm8gPSAzMgordHlw
ZSBfbmRfb3B0X3JkX2hkciBzdHJ1Y3QgeyBuZF9vcHRfcmhfdHlwZSB1aW50ODsgbmRfb3B0X3Jo
X2xlbiB1aW50ODsgbmRfb3B0X3JoX3Jlc2VydmVkMSB1aW50MTY7IG5kX29wdF9yaF9yZXNlcnZl
ZDIgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25kX29wdF9yZF9oZHIgPSA4Cit0eXBlIF9uZF9v
cHRfbXR1IHN0cnVjdCB7IG5kX29wdF9tdHVfdHlwZSB1aW50ODsgbmRfb3B0X210dV9sZW4gdWlu
dDg7IG5kX29wdF9tdHVfcmVzZXJ2ZWQgdWludDE2OyBuZF9vcHRfbXR1X210dSB1aW50MzI7IH0K
K2NvbnN0IF9zaXplb2ZfbmRfb3B0X210dSA9IDgKK2NvbnN0IF9zaXplb2ZfbWxkX2hkciA9IDI0
Cit0eXBlIF9pY21wNl9yb3V0ZXJfcmVudW0gc3RydWN0IHsgcnJfaGRyIF9pY21wNl9oZHI7IHJy
X3NlZ251bSB1aW50ODsgcnJfZmxhZ3MgdWludDg7IHJyX21heGRlbGF5IHVpbnQxNjsgcnJfcmVz
ZXJ2ZWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2ljbXA2X3JvdXRlcl9yZW51bSA9IDE2Citj
b25zdCBfc2l6ZW9mX3JyX3Bjb19tYXRjaCA9IDI0Citjb25zdCBfc2l6ZW9mX3JyX3Bjb191c2Ug
PSAzMgorY29uc3QgX3NpemVvZl9ycl9yZXN1bHQgPSAyNAordHlwZSBfbmRfb3B0X2Fkdl9pbnRl
cnZhbCBzdHJ1Y3QgeyBuZF9vcHRfYWR2X2ludGVydmFsX3R5cGUgdWludDg7IG5kX29wdF9hZHZf
aW50ZXJ2YWxfbGVuIHVpbnQ4OyBuZF9vcHRfYWR2X2ludGVydmFsX3Jlc2VydmVkIHVpbnQxNjsg
bmRfb3B0X2Fkdl9pbnRlcnZhbF9pdmFsIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9uZF9vcHRf
YWR2X2ludGVydmFsID0gOAordHlwZSBfbmRfb3B0X2hvbWVfYWdlbnRfaW5mbyBzdHJ1Y3QgeyBu
ZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3R5cGUgdWludDg7IG5kX29wdF9ob21lX2FnZW50X2luZm9f
bGVuIHVpbnQ4OyBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3Jlc2VydmVkIHVpbnQxNjsgbmRfb3B0
X2hvbWVfYWdlbnRfaW5mb19wcmVmZXJlbmNlIHVpbnQxNjsgbmRfb3B0X2hvbWVfYWdlbnRfaW5m
b19saWZldGltZSB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfbmRfb3B0X2hvbWVfYWdlbnRfaW5m
byA9IDgKK3R5cGUgX3NjaGVkX3BhcmFtIHN0cnVjdCB7IHNjaGVkX3ByaW9yaXR5IGludDMyOyB9
Citjb25zdCBfc2l6ZW9mX3NjaGVkX3BhcmFtID0gNAordHlwZSBfX19jcHVfbWFzayB1aW50NjQK
K3R5cGUgX2NwdV9zZXRfdCBzdHJ1Y3QgeyBfX2JpdHMgWzE1KzFddWludDY0OyB9Citjb25zdCBf
c2l6ZW9mX2NwdV9zZXRfdCA9IDEyOAordHlwZSBfc2VtX3Qgc3RydWN0IHsgX19zaXplIFszMSsx
XWludDg7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3NlbV90ID0g
MzIKK3R5cGUgX2ZmaV9hcmcgdWludDY0Cit0eXBlIF9mZmlfc2FyZyBpbnQ2NAordHlwZSBfZmZp
X2FiaSB1aW50MzIKK3R5cGUgX19mZmlfdHlwZSBzdHJ1Y3QgeyBzaXplIHVpbnQ2NDsgYWxpZ25t
ZW50IHVpbnQxNjsgX3R5cGUgdWludDE2OyBlbGVtZW50cyAqKl9fZmZpX3R5cGU7IH0KK2NvbnN0
IF9zaXplb2ZfX2ZmaV90eXBlID0gMjQKK3R5cGUgX2ZmaV90eXBlIHN0cnVjdCB7IHNpemUgdWlu
dDY0OyBhbGlnbm1lbnQgdWludDE2OyBfdHlwZSB1aW50MTY7IGVsZW1lbnRzICoqX19mZmlfdHlw
ZTsgfQorY29uc3QgX3NpemVvZl9mZmlfdHlwZSA9IDI0Cit2YXIgX2ZmaV90eXBlX3ZvaWQgX2Zm
aV90eXBlCit2YXIgX2ZmaV90eXBlX3VpbnQ4IF9mZmlfdHlwZQordmFyIF9mZmlfdHlwZV9zaW50
OCBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfdWludDE2IF9mZmlfdHlwZQordmFyIF9mZmlfdHlw
ZV9zaW50MTYgX2ZmaV90eXBlCit2YXIgX2ZmaV90eXBlX3VpbnQzMiBfZmZpX3R5cGUKK3ZhciBf
ZmZpX3R5cGVfc2ludDMyIF9mZmlfdHlwZQordmFyIF9mZmlfdHlwZV91aW50NjQgX2ZmaV90eXBl
Cit2YXIgX2ZmaV90eXBlX3NpbnQ2NCBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfZmxvYXQgX2Zm
aV90eXBlCit2YXIgX2ZmaV90eXBlX2RvdWJsZSBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfcG9p
bnRlciBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfbG9uZ2RvdWJsZSBfZmZpX3R5cGUKK3ZhciBf
ZmZpX3R5cGVfY29tcGxleF9mbG9hdCBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfY29tcGxleF9k
b3VibGUgX2ZmaV90eXBlCit2YXIgX2ZmaV90eXBlX2NvbXBsZXhfbG9uZ2RvdWJsZSBfZmZpX3R5
cGUKK3R5cGUgX2ZmaV9zdGF0dXMgdWludDMyCit0eXBlIF9GRklfVFlQRSB1aW50MzIKK3R5cGUg
X2ZmaV9jaWYgc3RydWN0IHsgYWJpIHVpbnQzMjsgbmFyZ3MgdWludDMyOyBhcmdfdHlwZXMgKipf
ZmZpX3R5cGU7IHJ0eXBlICpfZmZpX3R5cGU7IGJ5dGVzIHVpbnQzMjsgZmxhZ3MgdWludDMyOyB9
Citjb25zdCBfc2l6ZW9mX2ZmaV9jaWYgPSAzMgordHlwZSBfZmZpX3JhdyBzdHJ1Y3QgeyBzaW50
IGludDY0OyB9Citjb25zdCBfc2l6ZW9mX2ZmaV9yYXcgPSA4Cit0eXBlIF9mZmlfamF2YV9yYXcg
c3RydWN0IHsgc2ludCBpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9mZmlfamF2YV9yYXcgPSA4Cit0
eXBlIF9mZmlfY2xvc3VyZSBzdHJ1Y3QgeyB0cmFtcCBbMjMrMV1pbnQ4OyBjaWYgKl9mZmlfY2lm
OyBmdW4gZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqKmJ5dGUsICpieXRlKTsgdXNlcl9kYXRhICpi
eXRlOyB9Citjb25zdCBfc2l6ZW9mX2ZmaV9jbG9zdXJlID0gNDgKK3R5cGUgX2ZmaV9yYXdfY2xv
c3VyZSBzdHJ1Y3QgeyB0cmFtcCBbMjMrMV1pbnQ4OyBjaWYgKl9mZmlfY2lmOyB0cmFuc2xhdGVf
YXJncyBmdW5jKCpfZmZpX2NpZiwgKmJ5dGUsICoqYnl0ZSwgKmJ5dGUpOyB0aGlzX2Nsb3N1cmUg
KmJ5dGU7IGZ1biBmdW5jKCpfZmZpX2NpZiwgKmJ5dGUsICpfZmZpX3JhdywgKmJ5dGUpOyB1c2Vy
X2RhdGEgKmJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfZmZpX3Jhd19jbG9zdXJlID0gNjQKK3R5cGUg
X2ZmaV9qYXZhX3Jhd19jbG9zdXJlIHN0cnVjdCB7IHRyYW1wIFsyMysxXWludDg7IGNpZiAqX2Zm
aV9jaWY7IHRyYW5zbGF0ZV9hcmdzIGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKipieXRlLCAqYnl0
ZSk7IHRoaXNfY2xvc3VyZSAqYnl0ZTsgZnVuIGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKl9mZmlf
amF2YV9yYXcsICpieXRlKTsgdXNlcl9kYXRhICpieXRlOyB9Citjb25zdCBfc2l6ZW9mX2ZmaV9q
YXZhX3Jhd19jbG9zdXJlID0gNjQKK2NvbnN0IF9fUE9TSVhfQURWSVNPUllfSU5GTyA9IDIwMDgw
OQorY29uc3QgX1dOT0hBTkcgPSAxCitjb25zdCBfX19MREJMX01JTl8xMF9FWFBfXyA9ICgtNDkz
MSkKK2NvbnN0IF9JRkxBX0JSUE9SVF9ORUlHSF9TVVBQUkVTUyA9IDMyCitjb25zdCBfX1BDX1JF
Q19NSU5fWEZFUl9TSVpFID0gMTYKK2NvbnN0IF9fQklUU19QVEhSRUFEVFlQRVNfQ09NTU9OX0gg
PSAxCitjb25zdCBfX1NDX0VYUFJfTkVTVF9NQVggPSA0MgorY29uc3QgX0lOVF9MRUFTVDE2X01J
TiA9ICgtMzI3NjctMSkKK2NvbnN0IF9TWVNfdXNlbGliID0gX19fTlJfdXNlbGliCitjb25zdCBf
RkZJX0JBRF9UWVBFREVGID0gMQorY29uc3QgX0lQUFJPVE9fVFAgPSAyOQorY29uc3QgX1RDUF9D
T09LSUVfVFJBTlNBQ1RJT05TID0gMTUKK2NvbnN0IF9fX0ZMVDMyWF9ESUdfXyA9IDE1Citjb25z
dCBfQUlPX1BSSU9fREVMVEFfTUFYID0gMjAKK2NvbnN0IF9OREFfVk5JID0gNworY29uc3QgX19f
SUxQMzJfT0ZGMzJfQ0ZMQUdTID0gIi1tMzIiCitjb25zdCBfX19GTFQ2NF9NSU5fMTBfRVhQX18g
PSAoLTMwNykKK2NvbnN0IF9fUENfUEFUSF9NQVggPSA0Citjb25zdCBfSVBQUk9UT19ST1VUSU5H
ID0gNDMKK2NvbnN0IF9JTlRfRkFTVDhfTUlOID0gKC0xMjgpCitjb25zdCBfQjExNTIwMCA9IDAw
MTAwMDIKK2NvbnN0IF9fQklUU19VSU5UTl9JREVOVElUWV9IID0gMQorY29uc3QgX19fRkxUNjRf
TUFOVF9ESUdfXyA9IDUzCitjb25zdCBfX19DSEFSX0JJVF9fID0gOAorY29uc3QgX19fTlJfZnN5
bmMgPSA3NAorY29uc3QgX19TQ19MRVZFTDRfQ0FDSEVfU0laRSA9IDE5NworY29uc3QgX1BUUkFD
RV9FVkVOVF9FWEVDID0gNAorY29uc3QgX1BSX1NWRV9WTF9JTkhFUklUID0gKDEgPDwgMTcpCitj
b25zdCBfSVBQT1JUX1NVUERVUCA9IDk1Citjb25zdCBfU1lTX2Z0cnVuY2F0ZSA9IF9fX05SX2Z0
cnVuY2F0ZQorY29uc3QgX1NDSEFSX1dJRFRIID0gOAorY29uc3QgX1RDQV9TVEFCID0gOAorY29u
c3QgX0lGTEFfVkZfTElOS19TVEFURSA9IDUKK2NvbnN0IF9SVE5MR1JQX05TSUQgPSAyOAorY29u
c3QgX19fTlJfbXJlbWFwID0gMjUKK2NvbnN0IF9fX05SX2xzZXR4YXR0ciA9IDE4OQorY29uc3Qg
X0lQVkxBTl9NT0RFX0wzID0gMQorY29uc3QgX0lGTEFfQk9ORF9VU0VfQ0FSUklFUiA9IDYKK2Nv
bnN0IF9JRkxBX09GRkxPQURfWFNUQVRTX1VOU1BFQyA9IDAKK2NvbnN0IF9JTlRfTEVBU1QzMl9N
SU4gPSAoLTIxNDc0ODM2NDctMSkKK2NvbnN0IF9BVEZfQ09NID0gMHgwMgorY29uc3QgX01BUF9G
SUxFID0gMAorY29uc3QgX19fREVDNjRfTUlOX18gPSAxRS0zODMKK2NvbnN0IF9JRkxBX0JSX1RP
UE9MT0dZX0NIQU5HRV9USU1FUiA9IDE4Citjb25zdCBfU0lHRVZfTk9ORSA9IDEKK2NvbnN0IF9O
RFRQQV9NQ0FTVF9QUk9CRVMgPSAxMQorY29uc3QgX1NZU19ta25vZGF0ID0gX19fTlJfbWtub2Rh
dAorY29uc3QgX19QT1NJWF9CQVJSSUVSUyA9IDIwMDgwOQorY29uc3QgX1VJTlRfRkFTVDE2X1dJ
RFRIID0gX19fV09SRFNJWkUKK2NvbnN0IF9JUF9SRiA9IDB4ODAwMAorY29uc3QgX0VUSF9QX1BQ
UFRBTEsgPSAweDAwMTAKK2NvbnN0IF9UVU5TRVRRVUVVRV92YWwgPSAxMDc0MDI1Njg5Citjb25z
dCBfRFRfQ0hSID0gMgorY29uc3QgX19fRkxUX01BWF9FWFBfXyA9IDEyOAorY29uc3QgX1JUTl9N
VUxUSUNBU1QgPSA1Citjb25zdCBfX19OUl9zZXRzaWQgPSAxMTIKK2NvbnN0IF9fWE9QRU5fWFBH
MiA9IDEKK2NvbnN0IF9JUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QID0gMQorY29uc3QgX19YT1BF
Tl9YUEc0ID0gMQorY29uc3QgX19fTlJfZ2V0cmVzZ2lkID0gMTIwCitjb25zdCBfQlBGX0pHRSA9
IDB4MzAKK2NvbnN0IF9CUEZfTEQgPSAweDAwCitjb25zdCBfVENQSV9PUFRfRUNOID0gOAorY29u
c3QgX0VUWFRCU1kgPSAyNgorY29uc3QgX0lGTEFfUk1ORVRfTVVYX0lEID0gMQorY29uc3QgX1BS
X0ZQX0VYQ19TV19FTkFCTEUgPSAweDgwCitjb25zdCBfX19OUl90aW1lID0gMjAxCitjb25zdCBf
SEFWRV9TWVNfRVBPTExfSCA9IDEKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1JYX0JZVEVTID0gMgor
Y29uc3QgX1JUX1NDT1BFX1VOSVZFUlNFID0gMAorY29uc3QgX1NZU19lcG9sbF9jdGxfb2xkID0g
X19fTlJfZXBvbGxfY3RsX29sZAorY29uc3QgX1VMT05HX01BWCA9IChfTE9OR19NQVggKiAyICsg
MSkKK2NvbnN0IF9DTERfVFJBUFBFRCA9IDQKK2NvbnN0IF9MT05HX0JJVCA9IDY0Citjb25zdCBf
X19STElNX1RfTUFUQ0hFU19STElNNjRfVCA9IDEKK2NvbnN0IF9UQ1BfUkVQQUlSX09QVElPTlMg
PSAyMgorY29uc3QgX1g4Nl9DUjRfT1NYTU1FWENQVF9CSVQgPSAxMAorY29uc3QgX19QT1NJWF9B
SU9fTUFYID0gMQorY29uc3QgX1JURl9VUCA9IDB4MDAwMQorY29uc3QgX1RDUF9TX0RBVEFfSU4g
PSAoMSA8PCAyKQorY29uc3QgX0lGTEFfQlJfTUFYX0FHRSA9IDMKK2NvbnN0IF9fU0NfTUVNT1JZ
X1BST1RFQ1RJT04gPSAxOQorY29uc3QgX0ZOT05CTE9DSyA9IF9PX05PTkJMT0NLCitjb25zdCBf
SU5fQVRUUklCID0gMHgwMDAwMDAwNAorY29uc3QgX0FURl9QRVJNID0gMHgwNAorY29uc3QgX0lG
TEFfR0VORVZFX1JFTU9URTYgPSA3Citjb25zdCBfSUZMQV9CT05EX01PREUgPSAxCitjb25zdCBf
RUhfRlJBTUVfRkxBR1MgPSAiYXciCitjb25zdCBfT19BUFBFTkQgPSAwMjAwMAorY29uc3QgX19T
Q19UWVBFRF9NRU1PUllfT0JKRUNUUyA9IDE2NQorY29uc3QgX0VUSEVSX01BWF9MRU4gPSAoX0VU
SF9GUkFNRV9MRU4gKyBfRVRIRVJfQ1JDX0xFTikKK2NvbnN0IF9fX05SX21zZ3NuZCA9IDY5Citj
b25zdCBfVENBX1BBRCA9IDkKK2NvbnN0IF9QUl9TRVRfRlBfTU9ERSA9IDQ1Citjb25zdCBfTkxf
TU1BUF9TVEFUVVNfVkFMSUQgPSAyCitjb25zdCBfX19OUl9tb3VudCA9IDE2NQorY29uc3QgX19J
T0NfVFlQRUJJVFMgPSA4Citjb25zdCBfU09DS19ER1JBTSA9IDIKK2NvbnN0IF9NT0RfT0ZGU0VU
ID0gX0FESl9PRkZTRVQKK2NvbnN0IF9JRkxBX01BUCA9IDE0Citjb25zdCBfRUwyTlNZTkMgPSA0
NQorY29uc3QgX0lQVjZfT1JJR0RTVEFERFIgPSA3NAorY29uc3QgX1NZU19tdW5sb2NrID0gX19f
TlJfbXVubG9jaworY29uc3QgX1RIX0FDSyA9IDB4MTAKK2NvbnN0IF9MX1hUTkQgPSAyCitjb25z
dCBfU09fVFhUSU1FID0gNjEKK2NvbnN0IF9SVE1fREVMQUNUSU9OID0gNDkKK2NvbnN0IF9YVEFC
UyA9IDAwMTQwMDAKK2NvbnN0IF9IQVZFX1NZU19TWVNDQUxMX0ggPSAxCitjb25zdCBfUFJfU0VU
X1NQRUNVTEFUSU9OX0NUUkwgPSA1MworY29uc3QgX1RJT0NHREVWX3ZhbCA9IDIxNDc3NjczNDYK
K2NvbnN0IF9fX05SX2Nvbm5lY3QgPSA0MgorY29uc3QgX1g4Nl9DUjRfU01FUF9CSVQgPSAyMAor
Y29uc3QgX0ZTX1BPTElDWV9GTEFHU19WQUxJRCA9IDB4MDMKK2NvbnN0IF9USU9DR0lDT1VOVCA9
IDB4NTQ1RAorY29uc3QgX1NZU19zdGF0ZnMgPSBfX19OUl9zdGF0ZnMKK2NvbnN0IF9ORVRMSU5L
X1JETUEgPSAyMAorY29uc3QgX0lQVjZfMjI5MkhPUExJTUlUID0gOAorY29uc3QgX0lGRl9PTkVf
UVVFVUUgPSAweDIwMDAKK2NvbnN0IF9JUFBPUlRfQ01EU0VSVkVSID0gNTE0Citjb25zdCBfUEZf
TUFYID0gNDQKK2NvbnN0IF9SVF9DTEFTU19NQVggPSAyNTUKK2NvbnN0IF9JUFBST1RPX0lQVjYg
PSA0MQorY29uc3QgX1NJT0NTSUZCUiA9IDB4ODk0MQorY29uc3QgX19fSU5UX0xFQVNUOF9NQVhf
XyA9IDB4N2YKK2NvbnN0IF9fX0RFQzEyOF9NQU5UX0RJR19fID0gMzQKK2NvbnN0IF9JQ01QNl9S
Ul9SRVNVTFRfRkxBR1NfRk9SQklEREVOID0gMHgwMTAwCitjb25zdCBfTUFQX1NIQVJFRCA9IDB4
MDEKK2NvbnN0IF9FVVNFUlMgPSA4NworY29uc3QgX01BWFRDID0gNgorY29uc3QgX1RDUF9TWU5f
U0VOVCA9IDIKK2NvbnN0IF9QRl9ORVRMSU5LID0gMTYKK2NvbnN0IF9YRFBfQVRUQUNIRURfTk9O
RSA9IDAKK2NvbnN0IF9fX0RFQ0lNQUxfRElHX18gPSAyMQorY29uc3QgX0VUSEVSX0FERFJfTEVO
ID0gX0VUSF9BTEVOCitjb25zdCBfRkZJX1RZUEVfTEFTVCA9IF9GRklfVFlQRV9DT01QTEVYCitj
b25zdCBfUE9TSVhfTUFEVl9OT1JNQUwgPSAwCitjb25zdCBfQVJQSFJEX0lFRUU4MDIxMV9QUklT
TSA9IDgwMgorY29uc3QgX0VUSF9QXzgwMjFBRCA9IDB4ODhBOAorY29uc3QgX0xJTlVYX1JFQk9P
VF9NQUdJQzJDID0gNTM3OTkzMjE2Citjb25zdCBfTU5UX0RFVEFDSCA9IDIKK2NvbnN0IF9JUFRP
U19FQ05fTk9UX0VDVCA9IDB4MDAKK2NvbnN0IF9TU19PTlNUQUNLID0gMQorY29uc3QgX0lPQ19J
TiA9IChfX0lPQ19XUklURSA8PCBfX0lPQ19ESVJTSElGVCkKK2NvbnN0IF9FVEhfUF84MDIxQUgg
PSAweDg4RTcKK2NvbnN0IF9JRkxBX1RVTl9WTkVUX0hEUiA9IDUKK2NvbnN0IF9NUkVNQVBfTUFZ
TU9WRSA9IDEKK2NvbnN0IF9fX1JMSU1JVF9OTElNSVRTID0gMTYKK2NvbnN0IF9GX0dFVExLNjQg
PSA1Citjb25zdCBfUlRQUk9UX1VOU1BFQyA9IDAKK2NvbnN0IF9QQVJPREQgPSAwMDAxMDAwCitj
b25zdCBfX19OUl9rZXhlY19sb2FkID0gMjQ2Citjb25zdCBfX19JRkxBX1ZGX1BPUlRfTUFYID0g
MgorY29uc3QgX1NZU19zd2Fwb2ZmID0gX19fTlJfc3dhcG9mZgorY29uc3QgX19fU1REQ19VVEZf
MzJfXyA9IDEKK2NvbnN0IF9SVF9UQUJMRV9MT0NBTCA9IDI1NQorY29uc3QgX0ZGU1lOQyA9IF9P
X0ZTWU5DCitjb25zdCBfUEVORElOID0gMDA0MDAwMAorY29uc3QgX19fSU5UOF9NQVhfXyA9IDB4
N2YKK2NvbnN0IF9FVEhfUF9BUkNORVQgPSAweDAwMUEKK2NvbnN0IF9GRF9TRVRTSVpFID0gX19f
RkRfU0VUU0laRQorY29uc3QgX01TR19FT1IgPSAxMjgKK2NvbnN0IF9fTkVUX0lGX0FSUF9IID0g
MQorY29uc3QgX1JUTV9GX0NMT05FRCA9IDB4MjAwCitjb25zdCBfRUhXUE9JU09OID0gMTMzCitj
b25zdCBfSVBQUk9UT19OT05FID0gNTkKK2NvbnN0IF9UQ1BfQ09PS0lFX09VVF9ORVZFUiA9ICgx
IDw8IDEpCitjb25zdCBfRVBST1RPID0gNzEKK2NvbnN0IF9fSU9DX05SU0hJRlQgPSAwCitjb25z
dCBfRl9FWExDSyA9IDQKK2NvbnN0IF9fX05SX2Nsb25lID0gNTYKK2NvbnN0IF9fX05SX3B0cmFj
ZSA9IDEwMQorY29uc3QgX19QT1NJWF9WN19MUEJJR19PRkZCSUcgPSAtMQorY29uc3QgX0hBVkVf
QUNPU0wgPSAxCitjb25zdCBfU0lPQ0dJRkRTVEFERFIgPSAweDg5MTcKK2NvbnN0IF9fUE9TSVhf
TE9HSU5fTkFNRV9NQVggPSA5Citjb25zdCBfUlROTEdSUF9JUFY2X05FVENPTkYgPSAyNQorY29u
c3QgX1BBR0VfTUFTSyA9ICheKF9QQUdFX1NJWkUtMSkpCitjb25zdCBfX0NTX1hCUzVfSUxQMzJf
T0ZGQklHX0xJTlRGTEFHUyA9IDExMDcKK2NvbnN0IF9GRklfVFlQRV9TSU5UNjQgPSAxMgorY29u
c3QgX19TQ19PUEVOX01BWCA9IDQKK2NvbnN0IF9fU0NfMl9TV19ERVYgPSA1MQorY29uc3QgX05M
TV9GX0FDSyA9IDB4MDQKK2NvbnN0IF9TQ05kOCA9ICJoaGQiCitjb25zdCBfX19GTFQxMjhfTUlO
XzEwX0VYUF9fID0gKC00OTMxKQorY29uc3QgX1hEUF9GTEFHU19TS0JfTU9ERSA9ICgxIDw8IDEp
Citjb25zdCBfU0lPQ0dSQVJQID0gMHg4OTYxCitjb25zdCBfSUZMQV9WRl9QT1JUUyA9IDI0Citj
b25zdCBfQ0VSQVNFID0gMDE3NworY29uc3QgX19fTlJfc2V0cGdpZCA9IDEwOQorY29uc3QgX1JU
Rl9JTlRFUkZBQ0UgPSAweDQwMDAwMDAwCitjb25zdCBfSUZMQV9CUlBPUlRfSVNPTEFURUQgPSAz
MworY29uc3QgX1BSSW9GQVNUOCA9ICJvIgorY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9MSU5LX0ZB
SUxVUkVfQ09VTlQgPSAzCitjb25zdCBfQlJLSU5UID0gMDAwMDAwMgorY29uc3QgX19fREVDSU1B
TF9CSURfRk9STUFUX18gPSAxCitjb25zdCBfU09MX1NPQ0tFVCA9IDEKK2NvbnN0IF9fQ1NfUE9T
SVhfVjdfSUxQMzJfT0ZGQklHX0xERkxBR1MgPSAxMTM3Citjb25zdCBfSUZMQV9QUklPUklUWSA9
IDkKK2NvbnN0IF9JVElNRVJfUkVBTCA9IDAKK2NvbnN0IF9UQ0ZMU0ggPSAweDU0MEIKK2NvbnN0
IF9GRklfVEhJU0NBTEwgPSAzCitjb25zdCBfSVBfTk9ERUZSQUcgPSAyMgorY29uc3QgX05FVExJ
TktfRklSRVdBTEwgPSAzCitjb25zdCBfX19OUl9zY2hlZF9nZXRhZmZpbml0eSA9IDIwNAorY29u
c3QgX0lQUFJPVE9fVURQTElURSA9IDEzNgorY29uc3QgX0ZTX1BST0pJTkhFUklUX0ZMID0gMHgy
MDAwMDAwMAorY29uc3QgX01BRFZfRE9OVEZPUksgPSAxMAorY29uc3QgX01TR19DTVNHX0NMT0VY
RUMgPSAxMDczNzQxODI0Citjb25zdCBfRU5PRU5UID0gMgorY29uc3QgX0lQVE9TX0VDTl9FQ1Qx
ID0gMHgwMQorY29uc3QgX0lGTEFfVkZfSU5GTyA9IDEKK2NvbnN0IF9MT0NLX1dSSVRFID0gMTI4
Citjb25zdCBfVENQX0xJU1RFTiA9IDEwCitjb25zdCBfSVBPUFRfVFNfUFJFU1BFQyA9IDMKK2Nv
bnN0IF9fX1BPU0lYX0ZBRFZfTk9SRVVTRSA9IDUKK2NvbnN0IF9BUlBPUF9SRVFVRVNUID0gMQor
Y29uc3QgX1BUUkFDRV9FVkVOVF9FWElUID0gNgorY29uc3QgX1hBVFRSX05BTUVfTUFYID0gMjU1
Citjb25zdCBfX19TX0lGTE5LID0gMDEyMDAwMAorY29uc3QgX1RDQV9ST09UX1RBQiA9IDEKK2Nv
bnN0IF9TS0ZfQURfUFJPVE9DT0wgPSAwCitjb25zdCBfRU5PUEtHID0gNjUKK2NvbnN0IF9fX0FU
T01JQ19SRUxBWEVEID0gMAorY29uc3QgX1NZU19nZXRzb2Nrb3B0ID0gX19fTlJfZ2V0c29ja29w
dAorY29uc3QgX0lGTEFfVkZfTElOS19TVEFURV9FTkFCTEUgPSAxCitjb25zdCBfVlRETFkgPSAw
MDQwMDAwCitjb25zdCBfX19OUl90aW1lcl9kZWxldGUgPSAyMjYKK2NvbnN0IF9SVE5fVU5TUEVD
ID0gMAorY29uc3QgX1NPX1NORFRJTUVPID0gMjEKK2NvbnN0IF9BRl9VTlNQRUMgPSBfUEZfVU5T
UEVDCitjb25zdCBfVElPQ1NFUlNFVE1VTFRJID0gMHg1NDVCCitjb25zdCBfQVJQSFJEX0ZDUEwg
PSA3ODYKK2NvbnN0IF9MT0NLX1JXID0gMTkyCitjb25zdCBfUkVHX0NSMiA9IDIyCitjb25zdCBf
X1NDX0FSR19NQVggPSAwCitjb25zdCBfQVJQSFJEX0ZDUFAgPSA3ODQKK2NvbnN0IF9VSU5UX1dJ
RFRIID0gMzIKK2NvbnN0IF9JRkxBX1ZYTEFOX0lEID0gMQorY29uc3QgX19fVVNFX1hPUEVOID0g
MQorY29uc3QgX0lQT1BUX1NFQyA9IF9JUE9QVF9TRUNVUklUWQorY29uc3QgX0lGTEFfVFhRTEVO
ID0gMTMKK2NvbnN0IF9TWVNfdW1vdW50MiA9IF9fX05SX3Vtb3VudDIKK2NvbnN0IF9UVU5fVFlQ
RV9NQVNLID0gMHgwMDBmCitjb25zdCBfQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFID0gNQorY29uc3Qg
X0lGTEFfQlJfRkRCX0ZMVVNIID0gMjEKK2NvbnN0IF9SVE1fU0VUTkVJR0hUQkwgPSA2NworY29u
c3QgX0lQX0FERF9NRU1CRVJTSElQID0gMzUKK2NvbnN0IF9SVFBST1RfREhDUCA9IDE2Citjb25z
dCBfQ0xPTkVfUFRSQUNFID0gMHgwMDAwMjAwMAorY29uc3QgX1BST1RfTk9ORSA9IDB4MAorY29u
c3QgX0xJTlVYX1JFQk9PVF9DTURfUkVTVEFSVCA9IDB4MDEyMzQ1NjcKK2NvbnN0IF9NQVhfSU5Q
VVQgPSAyNTUKK2NvbnN0IF9SVEFfVU5TUEVDID0gMAorY29uc3QgX0ZfQUREX1NFQUxTID0gMTAz
MworY29uc3QgX1VJT19NQVhJT1YgPSBfX19JT1ZfTUFYCitjb25zdCBfX1NDX1RSQUNFX1NZU19N
QVggPSAyNDQKK2NvbnN0IF9QQVJNUksgPSAwMDAwMDEwCitjb25zdCBfX1NDX1hPUEVOX1hQRzMg
PSA5OQorY29uc3QgX1BSX0dFVF9GUF9NT0RFID0gNDYKK2NvbnN0IF9fU0NfWE9QRU5fWFBHNCA9
IDEwMAorY29uc3QgX1VJTlRfTEVBU1Q2NF9XSURUSCA9IDY0Citjb25zdCBfX1NZU19XQUlUX0gg
PSAxCitjb25zdCBfRVRIX1BfVFJBSUxFUiA9IDB4MDAxQworY29uc3QgX1NPTF9UQ1AgPSA2Citj
b25zdCBfQURKX01JQ1JPID0gMHgxMDAwCitjb25zdCBfTkRUQV9USFJFU0gxID0gMgorY29uc3Qg
X1JUQV9JUF9QUk9UTyA9IDI3Citjb25zdCBfSUZMQV9CUlBPUlRfRkxVU0ggPSAyNAorY29uc3Qg
X1RVTlNFVEdST1VQX3ZhbCA9IDEwNzQwMjU2NzgKK2NvbnN0IF9TT19DTlhfQURWSUNFID0gNTMK
K2NvbnN0IF9ORFRBX1RIUkVTSDMgPSA0Citjb25zdCBfTE9DS19TSCA9IDEKK2NvbnN0IF9fX1NJ
WkVPRl9XQ0hBUl9UX18gPSA0Citjb25zdCBfU0VNX1ZBTFVFX01BWCA9ICgyMTQ3NDgzNjQ3KQor
Y29uc3QgX19fTlJfZ2V0dWlkID0gMTAyCitjb25zdCBfSUZMQV9CUlBPUlRfTUNBU1RfRkxPT0Qg
PSAyNworY29uc3QgX1NPTF9CTFVFVE9PVEggPSAyNzQKK2NvbnN0IF9BUlBIUkRfRVRIRVIgPSAx
Citjb25zdCBfSVBQT1JUX05BTUVTRVJWRVIgPSA0MgorY29uc3QgX19TQ19CQVNFID0gMTM0Citj
b25zdCBfSE9TVF9OQU1FX01BWCA9IDY0Citjb25zdCBfWDg2X0NSMF9FVF9CSVQgPSA0Citjb25z
dCBfRl9TRVRQSVBFX1NaID0gMTAzMQorY29uc3QgX19fVUlOVDE2X01BWF9fID0gMHhmZmZmCitj
b25zdCBfX19TRUdfRlMgPSAxCitjb25zdCBfU1lTX2ZyZW1vdmV4YXR0ciA9IF9fX05SX2ZyZW1v
dmV4YXR0cgorY29uc3QgX0ZGSV9UWVBFX1VJTlQxNiA9IDcKK2NvbnN0IF9fX0lMUDMyX09GRjMy
X0xERkxBR1MgPSAiLW0zMiIKK2NvbnN0IF9JUFBPUlRfTVRQID0gNTcKK2NvbnN0IF9TWVNfZnNl
dHhhdHRyID0gX19fTlJfZnNldHhhdHRyCitjb25zdCBfX19OUl9leGl0ID0gNjAKK2NvbnN0IF9C
UEZfSCA9IDB4MDgKK2NvbnN0IF9QUl9TRVRfU0VDQ09NUCA9IDIyCitjb25zdCBfRVRIX1BfRElB
RyA9IDB4NjAwNQorY29uc3QgX0xPR0lOX05BTUVfTUFYID0gMjU2Citjb25zdCBfU19JUldYTyA9
IChfU19JUldYRyA+PiAzKQorY29uc3QgX0ZGSV9TVERDQUxMID0gNQorY29uc3QgX0FSUEhSRF9J
TkZJTklCQU5EID0gMzIKK2NvbnN0IF9fSU9DX1dSSVRFID0gMQorY29uc3QgX1RJT0NFWENMID0g
MHg1NDBDCitjb25zdCBfX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19QUk9URUNUID0gMjQ4Citjb25z
dCBfUFRSQUNFX09fVFJBQ0VDTE9ORSA9IDgKK2NvbnN0IF9TWVNfcHJjdGwgPSBfX19OUl9wcmN0
bAorY29uc3QgX0lQX1RSQU5TUEFSRU5UID0gMTkKK2NvbnN0IF9JRkxBX1BPUlRfSE9TVF9VVUlE
ID0gNQorY29uc3QgX19fTlJfZmFub3RpZnlfbWFyayA9IDMwMQorY29uc3QgX0lGRl9QT0lOVE9Q
T0lOVCA9IDE2Citjb25zdCBfUlRGX0RZTkFNSUMgPSAweDAwMTAKK2NvbnN0IF9TSU9DR0lGTUVU
UklDID0gMHg4OTFkCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9TVEFUU19FTkFCTEVEID0gNDIKK2Nv
bnN0IF9TWVNfZXhlY3ZlID0gX19fTlJfZXhlY3ZlCitjb25zdCBfT05MUkVUID0gMDAwMDA0MAor
Y29uc3QgX1JUQVhfUlRUVkFSID0gNQorY29uc3QgX0lGTEFfQlJfTUNBU1RfTUxEX1ZFUlNJT04g
PSA0NAorY29uc3QgX19fRkxUX01JTl9FWFBfXyA9ICgtMTI1KQorY29uc3QgX05VRF9ERUxBWSA9
IDB4MDgKK2NvbnN0IF9fX05SX3NlbmRtbXNnID0gMzA3Citjb25zdCBfSUZMQV9CUl9ORl9DQUxM
X0lQVEFCTEVTID0gMzYKK2NvbnN0IF9JUFBPUlRfRUNITyA9IDcKK2NvbnN0IF9fX05SX2Nsb2Nr
X2dldHJlcyA9IDIyOQorY29uc3QgX01DQVNUX1VOQkxPQ0tfU09VUkNFID0gNDQKK2NvbnN0IF9F
VEhfUF9MT09QQkFDSyA9IDB4OTAwMAorY29uc3QgX0lUSU1FUl9WSVJUVUFMID0gMQorY29uc3Qg
X1BSSWlMRUFTVDggPSAiaSIKK2NvbnN0IF9FVEhfUF9DVVNUID0gMHg2MDA2Citjb25zdCBfSUZM
QV9CUlBPUlRfRkFTVF9MRUFWRSA9IDcKK2NvbnN0IF9TWVNfc2V0cmVzdWlkID0gX19fTlJfc2V0
cmVzdWlkCitjb25zdCBfUlRGX1hSRVNPTFZFID0gMHgwODAwCitjb25zdCBfQVJQSFJEX0lFRUU4
MDIxMV9SQURJT1RBUCA9IDgwMworY29uc3QgX19fU19JRkNIUiA9IDAwMjAwMDAKK2NvbnN0IF9D
TVNQQVIgPSAwMTAwMDAwMDAwMDAKK2NvbnN0IF9BUlBIUkRfVk9JRCA9IDB4RkZGRgorY29uc3Qg
X19fTlJfbGlzdHhhdHRyID0gMTk0Citjb25zdCBfUlRBX1VJRCA9IDI1Citjb25zdCBfX0lPQ19O
Uk1BU0sgPSAoKDEgPDwgX19JT0NfTlJCSVRTKS0xKQorY29uc3QgX0lPQ1NJWkVfU0hJRlQgPSAo
X19JT0NfU0laRVNISUZUKQorY29uc3QgX0VBR0FJTiA9IDExCitjb25zdCBfX19GTFRfTUFYXzEw
X0VYUF9fID0gMzgKK2NvbnN0IF9JUFY2X01VTFRJQ0FTVF9MT09QID0gMTkKK2NvbnN0IF9fX05S
X2dldHBnaWQgPSAxMjEKK2NvbnN0IF9TT19QUklPUklUWSA9IDEyCitjb25zdCBfTVNHX0RPTlRX
QUlUID0gNjQKK2NvbnN0IF9JT0NTSVpFX01BU0sgPSAoX19JT0NfU0laRU1BU0sgPDwgX19JT0Nf
U0laRVNISUZUKQorY29uc3QgX19fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRSA9IDIKK2Nv
bnN0IF9fX0ZMVDEyOF9FUFNJTE9OX18gPSAxLjEKK2NvbnN0IF9FSU5UUiA9IDQKK2NvbnN0IF9S
VEZfTk9QTVRVRElTQyA9IDB4NDAwMAorY29uc3QgX1JUUFJPVF9TVEFUSUMgPSA0Citjb25zdCBf
SUZBX0xBQkVMID0gMworY29uc3QgX1NPX1BST1RPQ09MID0gMzgKK2NvbnN0IF9fX05SX3JlYWRh
aGVhZCA9IDE4NworY29uc3QgX1RIX1NZTiA9IDB4MDIKK2NvbnN0IF9SVE5MR1JQX0lQVjZfUFJF
RklYID0gMTgKK2NvbnN0IF9JQ01QNl9EU1RfVU5SRUFDSF9BRE1JTiA9IDEKK2NvbnN0IF9TSU9D
R0lGUEZMQUdTID0gMHg4OTM1Citjb25zdCBfX1NZU19TVEFURlNfSCA9IDEKK2NvbnN0IF9fX1NU
RENfXyA9IDEKK2NvbnN0IF9fX0RFQzEyOF9NQVhfXyA9IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5
OTk5OTk5OTk5OTk5RTYxNDQKK2NvbnN0IF9JTjZfQUREUl9HRU5fTU9ERV9OT05FID0gMQorY29u
c3QgX1JUTV9TRVRMSU5LID0gMTkKK2NvbnN0IF9GRklfT0sgPSAwCitjb25zdCBfX19JRkxBX1NU
QVRTX01BWCA9IDYKK2NvbnN0IF9ORF9ST1VURVJfU09MSUNJVCA9IDEzMworY29uc3QgX1BSX1NQ
RUNfU1RPUkVfQllQQVNTID0gMAorY29uc3QgX1NZU190ZWUgPSBfX19OUl90ZWUKK2NvbnN0IF9G
UEVfRkxUU1VCID0gOAorY29uc3QgX01TR19XQUlURk9ST05FID0gNjU1MzYKK2NvbnN0IF9fUENf
QUxMT0NfU0laRV9NSU4gPSAxOAorY29uc3QgX1NJR0lMTCA9IDQKK2NvbnN0IF9ETl9ERUxFVEUg
PSAweDAwMDAwMDA4Citjb25zdCBfTklfTlVNRVJJQ1NFUlYgPSAyCitjb25zdCBfUEZfSVNETiA9
IDM0Citjb25zdCBfUFJfQ0FQX0FNQklFTlQgPSA0NworY29uc3QgX0lQVE9TX1RPU19NQVNLID0g
MHgxRQorY29uc3QgX19TQ19OTF9MQU5HTUFYID0gMTIwCitjb25zdCBfU0lHQ0xEID0gX1NJR0NI
TEQKK2NvbnN0IF9fX05SX2NobW9kID0gOTAKK2NvbnN0IF9TVERPVVRfRklMRU5PID0gMQorY29u
c3QgX19MUDY0ID0gMQorY29uc3QgX19fTlJfbXFfZ2V0c2V0YXR0ciA9IDI0NQorY29uc3QgX1NZ
U19saXN0ZW4gPSBfX19OUl9saXN0ZW4KK2NvbnN0IF9JRkxBX1ZGX0xJTktfU1RBVEVfQVVUTyA9
IDAKK2NvbnN0IF9YODZfRUZMQUdTX1JGX0JJVCA9IDE2Citjb25zdCBfVENQX1RISU5fRFVQQUNL
ID0gMTcKK2NvbnN0IF9fX05SX3N5bmMgPSAxNjIKK2NvbnN0IF9TT19BVFRBQ0hfUkVVU0VQT1JU
X0VCUEYgPSA1MgorY29uc3QgX19fU0laRU9GX0RPVUJMRV9fID0gOAorY29uc3QgX0VNVUxUSUhP
UCA9IDcyCitjb25zdCBfX1BPU0lYX1FMSU1JVCA9IDEKK2NvbnN0IF9TWVNfZ2V0aXRpbWVyID0g
X19fTlJfZ2V0aXRpbWVyCitjb25zdCBfUlRNX0dFVFFESVNDID0gMzgKK2NvbnN0IF9GU19DT01Q
UkJMS19GTCA9IDB4MDAwMDAyMDAKK2NvbnN0IF9TWVNfZ2V0cGdycCA9IF9fX05SX2dldHBncnAK
K2NvbnN0IF9fX0ZMVDEyOF9NQU5UX0RJR19fID0gMTEzCitjb25zdCBfU0FfT05TVEFDSyA9IDB4
MDgwMDAwMDAKK2NvbnN0IF9JRkxBX0JSX01DQVNUX0lHTVBfVkVSU0lPTiA9IDQzCitjb25zdCBf
U1lTX3BrZXlfZnJlZSA9IF9fX05SX3BrZXlfZnJlZQorY29uc3QgX19fTlJfc2htY3RsID0gMzEK
K2NvbnN0IF9fTUtOT0RfVkVSID0gMAorY29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9TUEVDSzEy
OF8yNTZfWFRTID0gNworY29uc3QgX1NZU19nZXRkZW50czY0ID0gX19fTlJfZ2V0ZGVudHM2NAor
Y29uc3QgX19fTlJfY2xvc2UgPSAzCitjb25zdCBfRlNfQlRSRUVfRkwgPSAweDAwMDAxMDAwCitj
b25zdCBfTVNHX1JTVCA9IDQwOTYKK2NvbnN0IF9fU0NfUkVBTFRJTUVfU0lHTkFMUyA9IDkKK2Nv
bnN0IF9JTl9BTExfRVZFTlRTID0gKF9JTl9BQ0NFU1MgfCBfSU5fTU9ESUZZIHwgX0lOX0FUVFJJ
QiB8IF9JTl9DTE9TRV9XUklURSB8IF9JTl9DTE9TRV9OT1dSSVRFIHwgX0lOX09QRU4gfCBfSU5f
TU9WRURfRlJPTSB8IF9JTl9NT1ZFRF9UTyB8IF9JTl9DUkVBVEUgfCBfSU5fREVMRVRFIHwgX0lO
X0RFTEVURV9TRUxGIHwgX0lOX01PVkVfU0VMRikKK2NvbnN0IF9VSU5UX0ZBU1QxNl9NQVggPSAo
MTg0NDY3NDQwNzM3MDk1NTE2MTUpCitjb25zdCBfUFRSQUNFX0FUVEFDSCA9IDE2Citjb25zdCBf
X19OUl9ta25vZGF0ID0gMjU5Citjb25zdCBfU0NOaTggPSAiaGhpIgorY29uc3QgX19TQ19MRVZF
TDFfRENBQ0hFX0FTU09DID0gMTg5Citjb25zdCBfUlRNX05FV0NBQ0hFUkVQT1JUID0gOTYKK2Nv
bnN0IF9TT19QRUVSTkFNRSA9IDI4Citjb25zdCBfWDg2X0NSNF9PU0ZYU1JfQklUID0gOQorY29u
c3QgX19fREJMX01JTl8xMF9FWFBfXyA9ICgtMzA3KQorY29uc3QgX19QT1NJWDJfQ0hBUkNMQVNT
X05BTUVfTUFYID0gMTQKK2NvbnN0IF9fX0JJVF9UWVBFU19ERUZJTkVEX18gPSAxCitjb25zdCBf
X0JJVFNfU1RBVF9IID0gMQorY29uc3QgX1NJR0tJTEwgPSA5Citjb25zdCBfX19OUl9tbWFwID0g
OQorY29uc3QgX19ESVJFTlRfSCA9IDEKK2NvbnN0IF9SVEFfQ0FDSEVJTkZPID0gMTIKK2NvbnN0
IF9SVEZfTVRVID0gMHgwMDQwCitjb25zdCBfTkRUUEFfUVVFVUVfTEVOQllURVMgPSAxNgorY29u
c3QgX0NYODZfQ0NSNCA9IDB4ZTgKK2NvbnN0IF9JRkFfVU5TUEVDID0gMAorY29uc3QgX19fTlJf
c2V0cmxpbWl0ID0gMTYwCitjb25zdCBfU09fTUVNSU5GTyA9IDU1Citjb25zdCBfX1NDX05QUk9D
RVNTT1JTX09OTE4gPSA4NAorY29uc3QgX01DQVNUX0pPSU5fR1JPVVAgPSA0MgorY29uc3QgX0VP
VkVSRkxPVyA9IDc1Citjb25zdCBfTUFEVl9XSUxMTkVFRCA9IDMKK2NvbnN0IF9BUlBIUkRfSElQ
UEkgPSA3ODAKK2NvbnN0IF9OU0lHID0gX19OU0lHCitjb25zdCBfQUZfUk9VVEUgPSBfUEZfUk9V
VEUKK2NvbnN0IF9TSU9DR1NUQU1QTlMgPSAweDg5MDcKK2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05T
RV9TVUNDRVNTID0gMAorY29uc3QgX0lGTEFfTUFDU0VDX1JFUExBWV9QUk9URUNUID0gMTIKK2Nv
bnN0IF9USU9DTVNFVCA9IDB4NTQxOAorY29uc3QgX05FVExJTktfS09CSkVDVF9VRVZFTlQgPSAx
NQorY29uc3QgX19QT1NJWDJfRVhQUl9ORVNUX01BWCA9IDMyCitjb25zdCBfSVBfTVVMVElDQVNU
X0xPT1AgPSAzNAorY29uc3QgX1JUTV9HRVRNREIgPSA4NgorY29uc3QgX19fSU5UX0xFQVNUOF9X
SURUSF9fID0gOAorY29uc3QgX19fTlJfcnRfc2lncXVldWVpbmZvID0gMTI5Citjb25zdCBfWDg2
X0NSNF9QS0VfQklUID0gMjIKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfUEVSTV9IV0FERFIgPSA0
Citjb25zdCBfX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQgPSAyMDA4MDkKK2NvbnN0IF9FUE9M
TE1TRyA9IDEwMjQKK2NvbnN0IF9JRkxBX0dTT19NQVhfU0laRSA9IDQxCitjb25zdCBfX1NDX0xF
VkVMMV9JQ0FDSEVfTElORVNJWkUgPSAxODcKK2NvbnN0IF9fX05SX21zeW5jID0gMjYKK2NvbnN0
IF9SVEFfTVVMVElQQVRIID0gOQorY29uc3QgX0ZGMCA9IDAwMDAwMDAKK2NvbnN0IF9GRjEgPSAw
MTAwMDAwCitjb25zdCBfRVRIX1BfQVRNRkFURSA9IDB4ODg4NAorY29uc3QgX1g4Nl9FRkxBR1Nf
SURfQklUID0gMjEKK2NvbnN0IF9fX05SX2JpbmQgPSA0OQorY29uc3QgX19ERUZBVUxUX1NPVVJD
RSA9IDEKK2NvbnN0IF9JUE9QVF9TRUNVUl9SRVNUUiA9IDB4YWYxMworY29uc3QgX0lGTEFfVlhM
QU5fQ09MTEVDVF9NRVRBREFUQSA9IDI1Citjb25zdCBfU1RBVFhfVUlEID0gMHgwMDA4Citjb25z
dCBfUFRSQUNFX0dFVEZQWFJFR1MgPSAxOAorY29uc3QgX1NZU19nZXRwcmlvcml0eSA9IF9fX05S
X2dldHByaW9yaXR5Citjb25zdCBfSEFWRV9QSVBFMiA9IDEKK2NvbnN0IF9fX05SX2Nsb2NrX3Nl
dHRpbWUgPSAyMjcKK2NvbnN0IF9fX05SX211bmxvY2sgPSAxNTAKK2NvbnN0IF9SVFBST1RfT1NQ
RiA9IDE4OAorY29uc3QgX1JUTV9HRVRMSU5LID0gMTgKK2NvbnN0IF9fX05SX2FsYXJtID0gMzcK
K2NvbnN0IF9fX09fRFNZTkMgPSAwMTAwMDAKK2NvbnN0IF9QUklPX1BHUlAgPSAxCitjb25zdCBf
X19OUl9zeW5jZnMgPSAzMDYKK2NvbnN0IF9FTk9UU1VQID0gX0VPUE5PVFNVUFAKK2NvbnN0IF9O
RVRMSU5LX1VOVVNFRCA9IDEKK2NvbnN0IF9JQ01QNl9SUl9QQ09VU0VfRkxBR1NfREVDUlZMVElN
RSA9IDB4ODAKK2NvbnN0IF9IQVZFX1NZU19TT0NLRVRfSCA9IDEKK2NvbnN0IF9TWVNfc2V0X3Jv
YnVzdF9saXN0ID0gX19fTlJfc2V0X3JvYnVzdF9saXN0Citjb25zdCBfQ0xPQ0tfTU9OT1RPTklD
X0NPQVJTRSA9IDYKK2NvbnN0IF9fQ1NfWEJTNV9MUEJJR19PRkZCSUdfQ0ZMQUdTID0gMTExMgor
Y29uc3QgX19BU01fWDg2X1VOSVNURF82NF9IID0gMQorY29uc3QgX1NZU19wcm9jZXNzX3ZtX3Jl
YWR2ID0gX19fTlJfcHJvY2Vzc192bV9yZWFkdgorY29uc3QgX1g4Nl9DUjBfTVBfQklUID0gMQor
Y29uc3QgX0lQT1BUX01JTk9GRiA9IDQKK2NvbnN0IF9JUFY2X1Y2T05MWSA9IDI2Citjb25zdCBf
WDg2X0NSNF9GU0dTQkFTRV9CSVQgPSAxNgorY29uc3QgX1NJR0VWX1NJR05BTCA9IDAKK2NvbnN0
IF9TWVNfcnRfc2lnc3VzcGVuZCA9IF9fX05SX3J0X3NpZ3N1c3BlbmQKK2NvbnN0IF9SVE1fTkVX
TkVJR0ggPSAyOAorY29uc3QgX19fUFRIUkVBRF9SV0xPQ0tfSU5UX0ZMQUdTX1NIQVJFRCA9IDEK
K2NvbnN0IF9fX0lOVF9MRUFTVDY0X1dJRFRIX18gPSA2NAorY29uc3QgX1NZU19nZXRwZWVybmFt
ZSA9IF9fX05SX2dldHBlZXJuYW1lCitjb25zdCBfX19OUl9jaGRpciA9IDgwCitjb25zdCBfX19O
Ul9leGl0X2dyb3VwID0gMjMxCitjb25zdCBfX19QT1NJWDJfVEhJU19WRVJTSU9OID0gMjAwODA5
Citjb25zdCBfTkwwID0gMDAwMDAwMAorY29uc3QgX19fSUZMQV9STU5FVF9NQVggPSAzCitjb25z
dCBfX1NDXzJfQ19WRVJTSU9OID0gOTYKK2NvbnN0IF9BUlBIUkRfU0xJUDYgPSAyNTgKK2NvbnN0
IF9TWVNfZ2V0ZWdpZCA9IF9fX05SX2dldGVnaWQKK2NvbnN0IF9fU0NfVEhSRUFEX0RFU1RSVUNU
T1JfSVRFUkFUSU9OUyA9IDczCitjb25zdCBfU0lHVFNUUCA9IDIwCitjb25zdCBfTVNHX0ZJTiA9
IDUxMgorY29uc3QgX05EVVNFUk9QVF9TUkNBRERSID0gMQorY29uc3QgX0lOX0NMQVNTQ19IT1NU
ID0gKDB4ZmZmZmZmZmYgJiBeX0lOX0NMQVNTQ19ORVQpCitjb25zdCBfQ0hBUl9CSVQgPSBfX19D
SEFSX0JJVF9fCitjb25zdCBfTUNMX0ZVVFVSRSA9IDIKK2NvbnN0IF9SVEFYX1VOU1BFQyA9IDAK
K2NvbnN0IF9JRkxBX0JPTkRfRkFJTF9PVkVSX01BQyA9IDEzCitjb25zdCBfX19MREJMX0hBU19E
RU5PUk1fXyA9IDEKK2NvbnN0IF9TSUdJT1QgPSBfU0lHQUJSVAorY29uc3QgX19fTlJfdmZvcmsg
PSA1OAorY29uc3QgX19CSVRTX1BUSFJFQURUWVBFU19BUkNIX0ggPSAxCitjb25zdCBfTkRUQV9Q
QUQgPSA5Citjb25zdCBfX19OUl9zd2Fwb2ZmID0gMTY4Citjb25zdCBfSUZMQV9NQUNTRUNfUFJP
VEVDVCA9IDgKK2NvbnN0IF9BVF9TWU1MSU5LX0ZPTExPVyA9IDB4NDAwCitjb25zdCBfUFJfTUNF
X0tJTExfTEFURSA9IDAKK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5TVUZGSUNJRU5U
X1JFU09VUkNFUyA9IDI2MAorY29uc3QgX0ZTX1hGTEFHX0VYVFNJWkUgPSAweDAwMDAwODAwCitj
b25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MgPSAxMTA1Citjb25zdCBfRlNfWEZM
QUdfUlRJTkhFUklUID0gMHgwMDAwMDEwMAorY29uc3QgX0ZQRV9JTlRPVkYgPSAyCitjb25zdCBf
U0hSVF9NQVggPSBfX19TSFJUX01BWF9fCitjb25zdCBfX19OUl9wcm9jZXNzX3ZtX3JlYWR2ID0g
MzEwCitjb25zdCBfTVNfRElSU1lOQyA9IDEyOAorY29uc3QgX05fU1lOQ19QUFAgPSAxNAorY29u
c3QgX19NS05PRF9WRVJfTElOVVggPSAwCitjb25zdCBfSVBfUkVDVkZSQUdTSVpFID0gMjUKK2Nv
bnN0IF9JRkxBX0JSX1ZMQU5fU1RBVFNfRU5BQkxFRCA9IDQxCitjb25zdCBfUEFHRV9TSElGVCA9
IDEyCitjb25zdCBfSUxMX0lMTE9QTiA9IDIKK2NvbnN0IF9MT0NLX1JFQUQgPSA2NAorY29uc3Qg
X0lGTEFfQk9ORF9TTEFWRV9BRF9BR0dSRUdBVE9SX0lEID0gNgorY29uc3QgX1NPTF9YMjUgPSAy
NjIKK2NvbnN0IF9JUFRPU19MT1dERUxBWSA9IDB4MTAKK2NvbnN0IF9fU1lTX0lPQ1RMX0ggPSAx
Citjb25zdCBfU1lTX2dldHNpZCA9IF9fX05SX2dldHNpZAorY29uc3QgX19fU19JRlNPQ0sgPSAw
MTQwMDAwCitjb25zdCBfUFJfU0VUX01NX0FSR19FTkQgPSA5Citjb25zdCBfRkZJX1RSQU1QT0xJ
TkVfU0laRSA9IDI0Citjb25zdCBfRVRIX1BfTkNTSSA9IDB4ODhGOAorY29uc3QgX1BPUlRfUFJP
RklMRV9SRVNQT05TRV9JTlBST0dSRVNTID0gMjU3Citjb25zdCBfU0FfU1RBQ0sgPSBfU0FfT05T
VEFDSworY29uc3QgX0lGQV9BTllDQVNUID0gNQorY29uc3QgX1JUQVhfQ0NfQUxHTyA9IDE2Citj
b25zdCBfTlVEX1BST0JFID0gMHgxMAorY29uc3QgX1BUUkFDRV9QRUVLVVNFUiA9IDMKK2NvbnN0
IF9JQ01QNl9USU1FX0VYQ0VFRF9UUkFOU0lUID0gMAorY29uc3QgX19TQ19QUklPUklUWV9TQ0hF
RFVMSU5HID0gMTAKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGQklHX0xJQlMgPSAxMTM4
Citjb25zdCBfU1lTX3JlYWRsaW5rYXQgPSBfX19OUl9yZWFkbGlua2F0Citjb25zdCBfU19JRVhF
QyA9IF9TX0lYVVNSCitjb25zdCBfVENQX0NMT1NJTkcgPSAxMQorY29uc3QgX19CSVRTX1RJTUVf
SCA9IDEKK2NvbnN0IF9JUF9NU0ZJTFRFUiA9IDQxCitjb25zdCBfSEFWRV9BU19YODZfQUVTID0g
MQorY29uc3QgX19fUkxJTUlUX0xPQ0tTID0gMTAKK2NvbnN0IF9USF9VUkcgPSAweDIwCitjb25z
dCBfT19TWU5DID0gMDQwMTAwMDAKK2NvbnN0IF9fU1lTX1VJT19IID0gMQorY29uc3QgX01BQ1NF
Q19WQUxJREFURV9DSEVDSyA9IDEKK2NvbnN0IF9JR05DUiA9IDAwMDAyMDAKK2NvbnN0IF9fX0lO
VFBUUl9XSURUSF9fID0gNjQKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9DRkxBR1Mg
PSAxMTQwCitjb25zdCBfQlVTX09CSkVSUiA9IDMKK2NvbnN0IF9UQ1BfQ09OR0VTVElPTiA9IDEz
Citjb25zdCBfX19OUl9xdWVyeV9tb2R1bGUgPSAxNzgKK2NvbnN0IF9OTE1fRl9ST09UID0gMHgx
MDAKK2NvbnN0IF9FQkFEUlFDID0gNTYKK2NvbnN0IF9TWVNfbXNnY3RsID0gX19fTlJfbXNnY3Rs
Citjb25zdCBfQlBGX01FTVdPUkRTID0gMTYKK2NvbnN0IF9JRkxBX1ZGX1ZMQU5fSU5GTyA9IDEK
K2NvbnN0IF9SVE5MR1JQX05EX1VTRVJPUFQgPSAyMAorY29uc3QgX0FURl9ET05UUFVCID0gMHg0
MAorY29uc3QgX19fTlJfc2h1dGRvd24gPSA0OAorY29uc3QgX1JUTkxHUlBfTVBMU19ORVRDT05G
ID0gMjkKK2NvbnN0IF9fU0NfSU5UX01BWCA9IDEwNAorY29uc3QgX19fTlJfc2V0dWlkID0gMTA1
Citjb25zdCBfSFVQQ0wgPSAwMDAyMDAwCitjb25zdCBfQUZfUkRTID0gX1BGX1JEUworY29uc3Qg
X1BSX1NFVF9USU1FUlNMQUNLID0gMjkKK2NvbnN0IF9DTE9ORV9TSUdIQU5EID0gMHgwMDAwMDgw
MAorY29uc3QgX1BSX1NFVF9NTV9BUkdfU1RBUlQgPSA4Citjb25zdCBfX19OUl9kdXAyID0gMzMK
K2NvbnN0IF9fX05SX2R1cDMgPSAyOTIKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVD
VCA9IDIwMDgwOQorY29uc3QgX1BSX1NFVF9NTV9NQVAgPSAxNAorY29uc3QgX19DU19QT1NJWF9W
Nl9JTFAzMl9PRkZCSUdfQ0ZMQUdTID0gMTEyMAorY29uc3QgX19fTlJfc2NoZWRfZ2V0c2NoZWR1
bGVyID0gMTQ1Citjb25zdCBfX1NDX1hPUEVOX0NSWVBUID0gOTIKK2NvbnN0IF9SVE1fTkVXUk9V
VEUgPSAyNAorY29uc3QgX1NJX0xPQURfU0hJRlQgPSAxNgorY29uc3QgX1BSSWRMRUFTVDE2ID0g
ImQiCitjb25zdCBfTU9EX0VTVEVSUk9SID0gX0FESl9FU1RFUlJPUgorY29uc3QgX0lQUE9SVF9F
RlNTRVJWRVIgPSA1MjAKK2NvbnN0IF9BRl9JRUVFODAyMTU0ID0gX1BGX0lFRUU4MDIxNTQKK2Nv
bnN0IF9TWVNfc2lnbmFsZmQ0ID0gX19fTlJfc2lnbmFsZmQ0Citjb25zdCBfVElPQ1NTT0ZUQ0FS
ID0gMHg1NDFBCitjb25zdCBfX19OUl91bW91bnQyID0gMTY2Citjb25zdCBfSUZMQV9WUkZfVEFC
TEUgPSAxCitjb25zdCBfU09fVElNRVNUQU1QSU5HID0gMzcKK2NvbnN0IF9NU19SRE9OTFkgPSAx
Citjb25zdCBfU0tGX05FVF9PRkYgPSAoLTB4MTAwMDAwKQorY29uc3QgX0ROX0FDQ0VTUyA9IDB4
MDAwMDAwMDEKK2NvbnN0IF9TWVNfYWNjZXNzID0gX19fTlJfYWNjZXNzCitjb25zdCBfX1NDX1Y2
X0xQQklHX09GRkJJRyA9IDE3OQorY29uc3QgX0lQT1BUX1JFU0VSVkVEMSA9IDB4MjAKK2NvbnN0
IF9UQ1BfQ09PS0lFX01BWCA9IDE2Citjb25zdCBfUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JF
R0FUSU9OID0gKDEgPDwgMCkKK2NvbnN0IF9NU19TVFJJQ1RBVElNRSA9IDE2Nzc3MjE2Citjb25z
dCBfX19OUl9jbG9ja19nZXR0aW1lID0gMjI4Citjb25zdCBfX19OUl9zZW10aW1lZG9wID0gMjIw
Citjb25zdCBfX1VUU05BTUVfUkVMRUFTRV9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RICitjb25z
dCBfX19ERUMzMl9NSU5fRVhQX18gPSAoLTk0KQorY29uc3QgX1g4Nl9FRkxBR1NfRklYRURfQklU
ID0gMQorY29uc3QgX0hBVkVfU1lTX1BSQ1RMX0ggPSAxCitjb25zdCBfX1BPU0lYX1JFRU5UUkFO
VF9GVU5DVElPTlMgPSAxCitjb25zdCBfQkxPQ0tfU0laRV9CSVRTID0gMTAKK2NvbnN0IF9FQ09O
TlJFU0VUID0gMTA0Citjb25zdCBfSUZMQV9WRl9JQl9QT1JUX0dVSUQgPSAxMQorY29uc3QgX19f
REJMX0RFQ0lNQUxfRElHX18gPSAxNworY29uc3QgX0hBVkVfT1BFTkFUID0gMQorY29uc3QgX1RV
Tl9QS1RfU1RSSVAgPSAweDAwMDEKK2NvbnN0IF9WU1RPUCA9IDkKK2NvbnN0IF9JUFRPU19EU0NQ
X0FGMTEgPSAweDI4Citjb25zdCBfSVBUT1NfRFNDUF9BRjEyID0gMHgzMAorY29uc3QgX0lQVE9T
X0RTQ1BfQUYxMyA9IDB4MzgKK2NvbnN0IF9fX05SX3JlY3ZtbXNnID0gMjk5Citjb25zdCBfX19V
U0VfWE9QRU4ySzggPSAxCitjb25zdCBfUFJfRlBfRVhDX0RJViA9IDB4MDEwMDAwCitjb25zdCBf
Q0xPTkVfREVUQUNIRUQgPSAweDAwNDAwMDAwCitjb25zdCBfU1lTX2dldF9yb2J1c3RfbGlzdCA9
IF9fX05SX2dldF9yb2J1c3RfbGlzdAorY29uc3QgX1NPX0RFVEFDSF9CUEYgPSBfU09fREVUQUNI
X0ZJTFRFUgorY29uc3QgX1NUQVRYX0FUVFJfQVVUT01PVU5UID0gMHgxMDAwCitjb25zdCBfX1BP
U0lYX1RJTUVSUyA9IDIwMDgwOQorY29uc3QgX1RDUElfT1BUX0VDTl9TRUVOID0gMTYKK2NvbnN0
IF9BUlBIUkRfQVNIID0gNzgxCitjb25zdCBfTVNfUk1UX01BU0sgPSAoX01TX1JET05MWXxfTVNf
U1lOQ0hST05PVVN8X01TX01BTkRMT0NLfF9NU19JX1ZFUlNJT058IF9NU19MQVpZVElNRSkKK2Nv
bnN0IF9TWVNfbXFfbm90aWZ5ID0gX19fTlJfbXFfbm90aWZ5Citjb25zdCBfSUZGX1VQID0gMQor
Y29uc3QgX0lQUFJPVE9fRlJBR01FTlQgPSA0NAorY29uc3QgX1NDTmlMRUFTVDE2ID0gImhpIgor
Y29uc3QgX0ZfU0VBTF9TSFJJTksgPSAweDAwMDIKK2NvbnN0IF9GU19OT1RBSUxfRkwgPSAweDAw
MDA4MDAwCitjb25zdCBfU1RBVFhfQlRJTUUgPSAweDA4MDAKK2NvbnN0IF9fX0lGTEFfQlJQT1JU
X01BWCA9IDM1Citjb25zdCBfX19OUl9leGVjdmUgPSA1OQorY29uc3QgX19fVVNFX0VYVEVSTl9J
TkxJTkVTID0gMQorY29uc3QgX0lQX0JJTkRfQUREUkVTU19OT19QT1JUID0gMjQKK2NvbnN0IF9J
TlQ4X01BWCA9ICgxMjcpCitjb25zdCBfTUFEVl9TRVFVRU5USUFMID0gMgorY29uc3QgX0ZfV1JM
Q0sgPSAxCitjb25zdCBfSVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDAKK2NvbnN0IF9JUF9QTVRV
RElTQ19XQU5UID0gMQorY29uc3QgX1NZU19jcmVhdGVfbW9kdWxlID0gX19fTlJfY3JlYXRlX21v
ZHVsZQorY29uc3QgX0lGTEFfQlJfUk9PVF9JRCA9IDEwCitjb25zdCBfU1lTX3Bpdm90X3Jvb3Qg
PSBfX19OUl9waXZvdF9yb290Citjb25zdCBfQjIzMDQwMCA9IDAwMTAwMDMKK2NvbnN0IF9TT0xf
VExTID0gMjgyCitjb25zdCBfX05FVF9ST1VURV9IID0gMQorY29uc3QgX0VMSUJCQUQgPSA4MAor
Y29uc3QgX1JQTV9QQ09fU0VUR0xPQkFMID0gMworY29uc3QgX0JSSURHRV9NT0RFX1VOU1BFQyA9
IDAKK2NvbnN0IF9FTk9CVUZTID0gMTA1Citjb25zdCBfX19TSFJUX1dJRFRIX18gPSAxNgorY29u
c3QgX1JUX0NMQVNTX1VOU1BFQyA9IDAKK2NvbnN0IF9fX0ZMVDEyOF9NQVhfRVhQX18gPSAxNjM4
NAorY29uc3QgX0lQVE9TX0RTQ1BfQUYyMSA9IDB4NDgKK2NvbnN0IF9JUFRPU19EU0NQX0FGMjIg
PSAweDUwCitjb25zdCBfSVBUT1NfRFNDUF9BRjIzID0gMHg1OAorY29uc3QgX19fRkxUMzJYX01B
WF8xMF9FWFBfXyA9IDMwOAorY29uc3QgX19TQ19VSU9fTUFYSU9WID0gNjAKK2NvbnN0IF9YODZf
Q1IwX0VNX0JJVCA9IDIKK2NvbnN0IF9OVEZfT0ZGTE9BREVEID0gMHgyMAorY29uc3QgX1NZU19p
b3ByaW9fc2V0ID0gX19fTlJfaW9wcmlvX3NldAorY29uc3QgX19fTlJfZ2V0dGltZW9mZGF5ID0g
OTYKK2NvbnN0IF9QVFJBQ0VfQ09OVCA9IDcKK2NvbnN0IF9USU9DU1BUTENLX3ZhbCA9IDEwNzQw
MjU1MjEKK2NvbnN0IF9QVFJBQ0VfUEVFS1RFWFQgPSAxCitjb25zdCBfTkVUTElOS19YRlJNID0g
NgorY29uc3QgX1RDQV9VTlNQRUMgPSAwCitjb25zdCBfRVRIX1BfODAyMVEgPSAweDgxMDAKK2Nv
bnN0IF9JRkxBX1ZMQU5fSU5HUkVTU19RT1MgPSA0Citjb25zdCBfRVBPTExSREJBTkQgPSAxMjgK
K2NvbnN0IF9TWVNfdW1hc2sgPSBfX19OUl91bWFzaworY29uc3QgX1BBQ0tFVF9NUl9VTklDQVNU
ID0gMworY29uc3QgX05MTV9GX0VDSE8gPSAweDA4Citjb25zdCBfRkZJX1RZUEVfU0lOVDE2ID0g
OAorY29uc3QgX19TQ19UUkFDRV9VU0VSX0VWRU5UX01BWCA9IDI0NQorY29uc3QgX1NZU19yZWN2
bXNnID0gX19fTlJfcmVjdm1zZworY29uc3QgX19fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiA9
IDE0NworY29uc3QgX1NZU19wcG9sbCA9IF9fX05SX3Bwb2xsCitjb25zdCBfRkZJX1RZUEVfUE9J
TlRFUiA9IDE0Citjb25zdCBfSUZBX1JUX1BSSU9SSVRZID0gOQorY29uc3QgX1JUQVhfSU5JVENX
TkQgPSAxMQorY29uc3QgX0lQX1BNVFVESVNDX0lOVEVSRkFDRSA9IDQKK2NvbnN0IF9JRkxBX1BP
UlRfVU5TUEVDID0gMAorY29uc3QgX1NJR19TRVRNQVNLID0gMgorY29uc3QgX1NPTF9JQ01QVjYg
PSA1OAorY29uc3QgX1NDTngzMiA9ICJ4IgorY29uc3QgX1RDUF9NU1MgPSA1MTIKK2NvbnN0IF9F
VEhfUF84MDIyMSA9IDB4ODkxNworY29uc3QgX0NSMiA9IDAwMDIwMDAKK2NvbnN0IF9DUjMgPSAw
MDAzMDAwCitjb25zdCBfU1lTX2xzZWVrID0gX19fTlJfbHNlZWsKK2NvbnN0IF9fRklMRV9PRkZT
RVRfQklUUyA9IDY0Citjb25zdCBfX1NDX0NPTExfV0VJR0hUU19NQVggPSA0MAorY29uc3QgX19T
Q19USFJFQURfQ1BVVElNRSA9IDEzOQorY29uc3QgX1BPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEVf
UlIgPSAxCitjb25zdCBfSU5fVU5NT1VOVCA9IDB4MDAwMDIwMDAKK2NvbnN0IF9JUFRPU19EU0NQ
X0FGMzEgPSAweDY4Citjb25zdCBfSVBUT1NfRFNDUF9BRjMyID0gMHg3MAorY29uc3QgX0lQVE9T
X0RTQ1BfQUYzMyA9IDB4NzgKK2NvbnN0IF9JRkxBX1ZYTEFOX1JFTUNTVU1fUlggPSAyMgorY29u
c3QgX0VQT0xMRVhDTFVTSVZFID0gMjY4NDM1NDU2Citjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NP
TVBBUkVfQU5EX1NXQVBfMSA9IDEKK2NvbnN0IF9QVFJBQ0VfR0VURVZFTlRNU0cgPSAxNjg5Nwor
Y29uc3QgX0xPQ0tfTUFORCA9IDMyCitjb25zdCBfTkVUTElOS19VU0VSU09DSyA9IDIKK2NvbnN0
IF9GU19FTkNSWVBUSU9OX01PREVfSU5WQUxJRCA9IDAKK2NvbnN0IF9UVU5fVFhfVElNRVNUQU1Q
ID0gMQorY29uc3QgX1NZU19wd3JpdGV2MiA9IF9fX05SX3B3cml0ZXYyCitjb25zdCBfX19JTlRf
TEVBU1QxNl9NQVhfXyA9IDB4N2ZmZgorY29uc3QgX1NZU19wcmVhZDY0ID0gX19fTlJfcHJlYWQ2
NAorY29uc3QgX1BSSW9MRUFTVDE2ID0gIm8iCitjb25zdCBfU0NOaUxFQVNUMzIgPSAiaSIKK2Nv
bnN0IF9TWVNfc2VtY3RsID0gX19fTlJfc2VtY3RsCitjb25zdCBfX1BPU0lYX05HUk9VUFNfTUFY
ID0gOAorY29uc3QgX0I0MDAwMDAwID0gMDAxMDAxNworY29uc3QgX1BPUlRfUFJPRklMRV9SRVNQ
T05TRV9JTlZBTElEID0gMjU4Citjb25zdCBfUEFDS0VUX0ZBTk9VVF9EQVRBID0gMjIKK2NvbnN0
IF9DUkVBRCA9IDAwMDAyMDAKK2NvbnN0IF9FVEhfUF9QUFBfTVAgPSAweDAwMDgKK2NvbnN0IF9f
X0ZMVDMyWF9ERUNJTUFMX0RJR19fID0gMTcKK2NvbnN0IF9YODZfQ1I0X1BWSV9CSVQgPSAxCitj
b25zdCBfU1lTX2Vwb2xsX2NyZWF0ZTEgPSBfX19OUl9lcG9sbF9jcmVhdGUxCitjb25zdCBfSUZM
QV9CUlBPUlRfQ09ORklHX1BFTkRJTkcgPSAyMAorY29uc3QgX19fREJMX01BWF9FWFBfXyA9IDEw
MjQKK2NvbnN0IF9NQVBfU1lOQyA9IDB4ODAwMDAKK2NvbnN0IF9SRUdfUkJQID0gMTAKK2NvbnN0
IF9FS0VZUkVWT0tFRCA9IDEyOAorY29uc3QgX19QT1NJWF9UUkFDRV9FVkVOVF9GSUxURVIgPSAt
MQorY29uc3QgX0FGX0xPQ0FMID0gX1BGX0xPQ0FMCitjb25zdCBfUkVHX1JCWCA9IDExCitjb25z
dCBfU0NNX1RJTUVTVEFNUElORyA9IF9TT19USU1FU1RBTVBJTkcKK2NvbnN0IF9fX05SX2dldHBn
cnAgPSAxMTEKK2NvbnN0IF9fX05SX3J0X3NpZ3RpbWVkd2FpdCA9IDEyOAorY29uc3QgX19fRkRf
WkVST19TVE9TID0gInN0b3NxIgorY29uc3QgX1BUUkFDRV9QRUVLREFUQSA9IDIKK2NvbnN0IF9Q
VFJBQ0VfU1lTQ0FMTCA9IDI0Citjb25zdCBfU0NOdTMyID0gInUiCitjb25zdCBfTElOVVhfUkVC
T09UX0NNRF9TV19TVVNQRU5EID0gMHhEMDAwRkNFMgorY29uc3QgX09fRElSRUNUT1JZID0gX19f
T19ESVJFQ1RPUlkKK2NvbnN0IF9FVEhFUlRZUEVfU1BSSVRFID0gMHgwNTAwCitjb25zdCBfU09D
S19SQVcgPSAzCitjb25zdCBfT19OT0FUSU1FID0gX19fT19OT0FUSU1FCitjb25zdCBfSVBUT1Nf
RFNDUF9BRjQxID0gMHg4OAorY29uc3QgX0lQVE9TX0RTQ1BfQUY0MiA9IDB4OTAKK2NvbnN0IF9J
UFRPU19EU0NQX0FGNDMgPSAweDk4Citjb25zdCBfVElPQ1NQR1JQID0gMHg1NDEwCitjb25zdCBf
TkRfT1BUX1JFRElSRUNURURfSEVBREVSID0gNAorY29uc3QgX1JUQVhfRkVBVFVSRV9BTExGUkFH
ID0gKDEgPDwgMykKK2NvbnN0IF9JQ01QNl9EU1RfVU5SRUFDSF9CRVlPTkRTQ09QRSA9IDIKK2Nv
bnN0IF9JUE9QVF9USU1FU1RBTVAgPSBfSVBPUFRfVFMKK2NvbnN0IF9SVE1fR0VURENCID0gNzgK
K2NvbnN0IF9XT1JEX0JJVCA9IDMyCitjb25zdCBfVENBX1NUQVRTID0gMworY29uc3QgX05fU0xJ
UCA9IDEKK2NvbnN0IF9UQ1BfU0FWRURfU1lOID0gMjgKK2NvbnN0IF9fU0NfQkNfU1RSSU5HX01B
WCA9IDM5Citjb25zdCBfUlRBWF9GRUFUVVJFX1NBQ0sgPSAoMSA8PCAxKQorY29uc3QgX19YT1BF
Tl9TT1VSQ0UgPSA3MDAKK2NvbnN0IF9fQVRGSUxFX1NPVVJDRSA9IDEKK2NvbnN0IF9QVFJBQ0Vf
RVZFTlRfVkZPUktfRE9ORSA9IDUKK2NvbnN0IF9JQ01QNl9SUl9GTEFHU19QUkVWRE9ORSA9IDB4
MDgKK2NvbnN0IF9FTE5STkcgPSA0OAorY29uc3QgX19QT1NJWF9BSU9fTElTVElPX01BWCA9IDIK
K2NvbnN0IF9SVE5fVU5JQ0FTVCA9IDEKK2NvbnN0IF9SVEFfTUFSSyA9IDE2Citjb25zdCBfU0lH
U0VHViA9IDExCitjb25zdCBfTkFNRV9NQVggPSAyNTUKK2NvbnN0IF9BRl9WU09DSyA9IF9QRl9W
U09DSworY29uc3QgX0ZfVUxPQ0sgPSAwCitjb25zdCBfTVNHX0JBVENIID0gMjYyMTQ0Citjb25z
dCBfRlBFX0ZMVFVORCA9IDUKK2NvbnN0IF9fX0lGTEFfVkZfTElOS19TVEFURV9NQVggPSAzCitj
b25zdCBfUlROTEdSUF9EQ0IgPSAyMworY29uc3QgX0VQRVJNID0gMQorY29uc3QgX1JFR19SQ1gg
PSAxNAorY29uc3QgX01TX05PRElSQVRJTUUgPSAyMDQ4Citjb25zdCBfX1RFUk1JT1NfSCA9IDEK
K2NvbnN0IF9fX0lOVE1BWF9XSURUSF9fID0gNjQKK2NvbnN0IF9JRkxBX0JSUE9SVF9HVUFSRCA9
IDUKK2NvbnN0IF9TWVNfcnRfc2lncGVuZGluZyA9IF9fX05SX3J0X3NpZ3BlbmRpbmcKK2NvbnN0
IF9JRkxBX01BU1RFUiA9IDEwCitjb25zdCBfRU9QTk9UU1VQUCA9IDk1Citjb25zdCBfQ1M1ID0g
MDAwMDAwMAorY29uc3QgX19QT1NJWDJfVkVSU0lPTiA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04K
K2NvbnN0IF9fU0NfR0VUUFdfUl9TSVpFX01BWCA9IDcwCitjb25zdCBfSVBfUkVDVkVSUiA9IDEx
Citjb25zdCBfSEFWRV9TSU5MID0gMQorY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdf
Q0ZMQUdTID0gMTEzNgorY29uc3QgX19DU19MRlM2NF9MSU5URkxBR1MgPSAxMDA3Citjb25zdCBf
UFJJeEZBU1Q4ID0gIngiCitjb25zdCBfUFJJb0xFQVNUMzIgPSAibyIKK2NvbnN0IF9QUklPX1VT
RVIgPSAyCitjb25zdCBfSUZMQV9ORVdfSUZJTkRFWCA9IDQ5Citjb25zdCBfSUZMQV9WWExBTl9M
T0NBTCA9IDQKK2NvbnN0IF9QUl9TRVRfTU1fRVhFX0ZJTEUgPSAxMworY29uc3QgX1RDUF9TX0RB
VEFfT1VUID0gKDEgPDwgMykKK2NvbnN0IF9BVEZfTUFHSUMgPSAweDgwCitjb25zdCBfTkRUUEFf
R0NfU1RBTEVUSU1FID0gNgorY29uc3QgX19fazggPSAxCitjb25zdCBfX19JTlRfRkFTVDMyX01B
WF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfX1hCUzVfTFBCSUdfT0ZGQklHID0gLTEK
K2NvbnN0IF9TSU9DREVMTVVMVEkgPSAweDg5MzIKK2NvbnN0IF9UVU5TRVROT0NTVU1fdmFsID0g
MTA3NDAyNTY3MgorY29uc3QgX19fTERCTF9ERU5PUk1fTUlOX18gPSAxLjEKK2NvbnN0IF9QRl9V
TlNQRUMgPSAwCitjb25zdCBfQlBGX01PRCA9IDB4OTAKK2NvbnN0IF9SRUdfUkRJID0gOAorY29u
c3QgX0JQRl9NSVNDID0gMHgwNworY29uc3QgX0ZfR0VUT1dOID0gX19fRl9HRVRPV04KK2NvbnN0
IF9JRkxBX0JSX01DQVNUX0xBU1RfTUVNQkVSX0NOVCA9IDI4Citjb25zdCBfVENQT1BUX1NBQ0tf
UEVSTUlUVEVEID0gNAorY29uc3QgX19TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUgPSA3OAorY29u
c3QgX19QT1NJWF9WN19MUDY0X09GRjY0ID0gMQorY29uc3QgX1BGX0lFRUU4MDIxNTQgPSAzNgor
Y29uc3QgX0VMSUJNQVggPSA4MgorY29uc3QgX0I0ODAwID0gMDAwMDAxNAorY29uc3QgX1NZU19y
ZW5hbWVhdDIgPSBfX19OUl9yZW5hbWVhdDIKK2NvbnN0IF9JUFBST1RPX0VOQ0FQID0gOTgKK2Nv
bnN0IF9SRUdfUkRYID0gMTIKK2NvbnN0IF9JUFY2XzIyOTJIT1BPUFRTID0gMworY29uc3QgX19f
TkVUSU5FVF9JUF9IID0gMQorY29uc3QgX19fRkxUNjRYX0hBU19ERU5PUk1fXyA9IDEKK2NvbnN0
IF9JRkxBX0JSUE9SVF9ERVNJR05BVEVEX0NPU1QgPSAxNgorY29uc3QgX0lOVF9MRUFTVDhfV0lE
VEggPSA4Citjb25zdCBfTkxNU0dFUlJfQVRUUl9PRkZTID0gMgorY29uc3QgX1NUQVRYX0FUVFJf
RU5DUllQVEVEID0gMHgwODAwCitjb25zdCBfUkVHX09MRE1BU0sgPSAyMQorY29uc3QgX0ZTX1BP
TElDWV9GTEFHU19QQURfNCA9IDB4MDAKK2NvbnN0IF9USU1FX09PUCA9IDMKK2NvbnN0IF9SVE1H
UlBfSVBWNl9JRklORk8gPSAweDgwMAorY29uc3QgX1RDQV9ST09UX1VOU1BFQyA9IDAKK2NvbnN0
IF9fX1dfQ09OVElOVUVEID0gMHhmZmZmCitjb25zdCBfSUZMQV9WWExBTl9MQUJFTCA9IDI2Citj
b25zdCBfQlBGX0pBID0gMHgwMAorY29uc3QgX19fTlJfbmFub3NsZWVwID0gMzUKK2NvbnN0IF9C
UEZfTUFKT1JfVkVSU0lPTiA9IDEKK2NvbnN0IF9fX05SX2dldGVnaWQgPSAxMDgKK2NvbnN0IF9Q
Rl9JVUNWID0gMzIKK2NvbnN0IF9QUl9DQVBfQU1CSUVOVF9MT1dFUiA9IDMKK2NvbnN0IF9NQVBf
Tk9SRVNFUlZFID0gMHgwNDAwMAorY29uc3QgX0lQT1BUX0VORCA9IF9JUE9QVF9FT0wKK2NvbnN0
IF9JRkZfVEFQID0gMHgwMDAyCitjb25zdCBfX1NZU19VU0VSX0ggPSAxCitjb25zdCBfVFVOR0VU
SUZGX3ZhbCA9IDIxNDc3Njc1MDYKK2NvbnN0IF9BREpfTUFYRVJST1IgPSAweDAwMDQKK2NvbnN0
IF9SVE5MR1JQX0lQVjZfSUZJTkZPID0gMTIKK2NvbnN0IF9GU19ESVJUWV9GTCA9IDB4MDAwMDAx
MDAKK2NvbnN0IF9fX05SX2ZhbGxvY2F0ZSA9IDI4NQorY29uc3QgX19fTlJfc2V0X21lbXBvbGlj
eSA9IDIzOAorY29uc3QgX19QT1NJWF9USFJFQURfUk9CVVNUX1BSSU9fSU5IRVJJVCA9IDIwMDgw
OQorY29uc3QgX1JUQV9NRkNfU1RBVFMgPSAxNworY29uc3QgX0NYODZfUkNSX0JBU0UgPSAweGRj
Citjb25zdCBfUlRQUk9UX0tFUk5FTCA9IDIKK2NvbnN0IF9JQ01QNl9GSUxURVJfQkxPQ0tPVEhF
UlMgPSAzCitjb25zdCBfUFJfRlBFTVVfTk9QUklOVCA9IDEKK2NvbnN0IF9fX0ZMVF9NQU5UX0RJ
R19fID0gMjQKK2NvbnN0IF9fX05SX2ZzdGF0ID0gNQorY29uc3QgX1BUUkFDRV9PX0VYSVRLSUxM
ID0gMTA0ODU3NgorY29uc3QgX0lGTEFfQlJfTUNBU1RfTEFTVF9NRU1CRVJfSU5UVkwgPSAzMAor
Y29uc3QgX05FVExJTktfSU5FVF9ESUFHID0gX05FVExJTktfU09DS19ESUFHCitjb25zdCBfTkVU
TElOS19TQ1NJVFJBTlNQT1JUID0gMTgKK2NvbnN0IF9fX05SX3NlbGVjdCA9IDIzCitjb25zdCBf
SUZMQV9TVEFUU19MSU5LX09GRkxPQURfWFNUQVRTID0gNAorY29uc3QgX19fTlJfcGlwZSA9IDIy
Citjb25zdCBfU0FfTk9DTERXQUlUID0gMgorY29uc3QgX1NZU19rZXhlY19maWxlX2xvYWQgPSBf
X19OUl9rZXhlY19maWxlX2xvYWQKK2NvbnN0IF9CMjAwID0gMDAwMDAwNgorY29uc3QgX19QT1NJ
WF9ERUxBWVRJTUVSX01BWCA9IDMyCitjb25zdCBfUFJfU0VUX0VORElBTiA9IDIwCitjb25zdCBf
U1lTX2Vwb2xsX3B3YWl0ID0gX19fTlJfZXBvbGxfcHdhaXQKK2NvbnN0IF9FVEhfUF9MT0NBTFRB
TEsgPSAweDAwMDkKK2NvbnN0IF9QUklpRkFTVDggPSAiaSIKK2NvbnN0IF9TRUVLX0VORCA9IDIK
K2NvbnN0IF9UQ0FfQ0hBSU4gPSAxMQorY29uc3QgX1NZU190aW1lcl9kZWxldGUgPSBfX19OUl90
aW1lcl9kZWxldGUKK2NvbnN0IF9STElNX0lORklOSVRZID0gMHhmZmZmZmZmZmZmZmZmZmZmCitj
b25zdCBfX19PRkZfVF9NQVRDSEVTX09GRjY0X1QgPSAxCitjb25zdCBfUlROTEdSUF9QSE9ORVRf
Uk9VVEUgPSAyMgorY29uc3QgX19JU09DMTFfU09VUkNFID0gMQorY29uc3QgX1NJR1hDUFUgPSAy
NAorY29uc3QgX1JUTl9OQVQgPSAxMAorY29uc3QgX0lGTEFfVFVOX0dST1VQID0gMgorY29uc3Qg
X19fTERCTF9NQVhfXyA9IDEuMQorY29uc3QgX1VJTlRfTEVBU1Q4X01BWCA9ICgyNTUpCitjb25z
dCBfSUNNUDZfRFNUX1VOUkVBQ0hfQUREUiA9IDMKK2NvbnN0IF9QT1NJWF9GQURWX1NFUVVFTlRJ
QUwgPSAyCitjb25zdCBfUlROX1hSRVNPTFZFID0gMTEKK2NvbnN0IF91bml4ID0gMQorY29uc3Qg
X1NJWkVfTUFYID0gKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQorY29uc3QgX1NUQV9ERUwgPSAweDAw
MjAKK2NvbnN0IF9NQl9MRU5fTUFYID0gMTYKK2NvbnN0IF9DSUJBVUQgPSAwMDIwMDM2MDAwMDAK
K2NvbnN0IF9fX2Nsb2NraWRfdF9kZWZpbmVkID0gMQorY29uc3QgX19DU19QT1NJWF9WN19MUEJJ
R19PRkZCSUdfTElOVEZMQUdTID0gMTE0NworY29uc3QgX0FJX05VTUVSSUNIT1NUID0gMHgwMDA0
Citjb25zdCBfUkVfRFVQX01BWCA9ICgweDdmZmYpCitjb25zdCBfSUZMQV9WRl9SQVRFID0gNgor
Y29uc3QgX1BSSVgzMiA9ICJYIgorY29uc3QgX0lQVE9TX0VDTl9DRSA9IDB4MDMKK2NvbnN0IF9J
RkxBX0JSX1BSSU9SSVRZID0gNgorY29uc3QgX0lQVE9TX1BSRUNfTkVUQ09OVFJPTCA9IF9JUFRP
U19DTEFTU19DUzcKK2NvbnN0IF9fX05SX2dldHJ1c2FnZSA9IDk4Citjb25zdCBfTlVEX1JFQUNI
QUJMRSA9IDB4MDIKK2NvbnN0IF9fX05SX3VzZWxpYiA9IDEzNAorY29uc3QgX0VQT0xMV1JOT1JN
ID0gMjU2Citjb25zdCBfX19JRkxBX01BWCA9IDUyCitjb25zdCBfVENQX0xJTkdFUjIgPSA4Citj
b25zdCBfUlROTEdSUF9JUFY0X1JPVVRFID0gNworY29uc3QgX19TQ19JTlRfTUlOID0gMTA1Citj
b25zdCBfRVRJTUUgPSA2MgorY29uc3QgX0lGTEFfSFNSX1NFUV9OUiA9IDUKK2NvbnN0IF9fUE9T
SVhfU1lNTElOS19NQVggPSAyNTUKK2NvbnN0IF9JRkxBX1BPUlRfUkVTUE9OU0UgPSA3Citjb25z
dCBfSUZMQV9CUl9NQ0FTVF9ST1VURVIgPSAyMgorY29uc3QgX1RDQV9IV19PRkZMT0FEID0gMTIK
K2NvbnN0IF9JRkxBX0lORVQ2X1RPS0VOID0gNworY29uc3QgX1RJT0NQS1RfRkxVU0hSRUFEID0g
MQorY29uc3QgX1NZU19zZXRfdGlkX2FkZHJlc3MgPSBfX19OUl9zZXRfdGlkX2FkZHJlc3MKK2Nv
bnN0IF9CMTkyMDAgPSAwMDAwMDE2Citjb25zdCBfSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMID0g
MQorY29uc3QgX19fU0lHX0FUT01JQ19NSU5fXyA9ICgtX19fU0lHX0FUT01JQ19NQVhfXyAtIDEp
Citjb25zdCBfSUZMQV9CT05EX01JTl9MSU5LUyA9IDE4Citjb25zdCBfSVBQUk9UT19SQVcgPSAy
NTUKK2NvbnN0IF9TWVNfZ2V0cmVzdWlkID0gX19fTlJfZ2V0cmVzdWlkCitjb25zdCBfUlRBX1NS
QyA9IDIKK2NvbnN0IF9JUFY2X1BNVFVESVNDX0RPID0gMgorY29uc3QgX1JUX1NDT1BFX0xJTksg
PSAyNTMKK2NvbnN0IF9TWVNfc2NoZWRfeWllbGQgPSBfX19OUl9zY2hlZF95aWVsZAorY29uc3Qg
X1NBX05PQ0xEU1RPUCA9IDEKK2NvbnN0IF9OTEFfRl9ORVNURUQgPSAoMSA8PCAxNSkKK2NvbnN0
IF9FTkFWQUlMID0gMTE5Citjb25zdCBfRVRIX1BfRVJTUEFOMiA9IDB4MjJFQgorY29uc3QgX1RJ
T0NTRVJfVEVNVCA9IDB4MDEKK2NvbnN0IF9JRkxBX0JSUE9SVF9NVUxUSUNBU1RfUk9VVEVSID0g
MjUKK2NvbnN0IF9PUE9TVCA9IDAwMDAwMDEKK2NvbnN0IF9XX09LID0gMgorY29uc3QgX0lQT1BU
X1JBID0gMTQ4Citjb25zdCBfRVRIRVJUWVBFX0lQWCA9IDB4ODEzNworY29uc3QgX1JUTV9HRVRO
RUlHSFRCTCA9IDY2Citjb25zdCBfX1NDX1Y2X0xQNjRfT0ZGNjQgPSAxNzgKK2NvbnN0IF9ERUxB
WVRJTUVSX01BWCA9IDIxNDc0ODM2NDcKK2NvbnN0IF9QUl9HRVRfTkFNRSA9IDE2Citjb25zdCBf
SUZMQV9CUlBPUlRfQ09TVCA9IDMKK2NvbnN0IF9TSU9DR0lGQlIgPSAweDg5NDAKK2NvbnN0IF9J
RkxBX01BQ1NFQ19JTkNfU0NJID0gOQorY29uc3QgX0lOX09ORVNIT1QgPSAweDgwMDAwMDAwCitj
b25zdCBfU1lTX2FkanRpbWV4ID0gX19fTlJfYWRqdGltZXgKK2NvbnN0IF9JTExfQ09QUk9DID0g
NworY29uc3QgX0lQT1BUX1JSID0gNworY29uc3QgX1BSX1NWRV9TRVRfVkxfT05FWEVDID0gKDEg
PDwgMTgpCitjb25zdCBfU1lTX3B3cml0ZTY0ID0gX19fTlJfcHdyaXRlNjQKK2NvbnN0IF9QUl9T
RVRfTkFNRSA9IDE1Citjb25zdCBfVlFVSVQgPSAxCitjb25zdCBfRlNfWEZMQUdfRVhUU1pJTkhF
UklUID0gMHgwMDAwMTAwMAorY29uc3QgX0lGTEFfUE9SVF9JTlNUQU5DRV9VVUlEID0gNAorY29u
c3QgX0lQVE9TX0NMQVNTX0NTMyA9IDB4NjAKK2NvbnN0IF9fX1BUUkRJRkZfV0lEVEhfXyA9IDY0
Citjb25zdCBfRVRIX1BfRURTQSA9IDB4REFEQQorY29uc3QgX1NZU19zZXRpdGltZXIgPSBfX19O
Ul9zZXRpdGltZXIKK2NvbnN0IF9fX0ZMVDMyWF9FUFNJTE9OX18gPSAxLjEKK2NvbnN0IF9fX0ZM
VDEyOF9NSU5fRVhQX18gPSAoLTE2MzgxKQorY29uc3QgX19fTlJfc2V0ZnN1aWQgPSAxMjIKK2Nv
bnN0IF9JUFRPU19DTEFTU19DUzYgPSAweGMwCitjb25zdCBfSUZMQV9CUlBPUlRfQlJJREdFX0lE
ID0gMTQKK2NvbnN0IF9SVE1fREVMTkVUQ09ORiA9IDgxCitjb25zdCBfSUNNUDZfVElNRV9FWENF
RURFRCA9IDMKK2NvbnN0IF9fX05SX3NldGZzZ2lkID0gMTIzCitjb25zdCBfU0lPQ0RFTERMQ0kg
PSAweDg5ODEKK2NvbnN0IF9JUFBPUlRfVFRZTElOSyA9IDg3Citjb25zdCBfU0lPQ0dBUlAgPSAw
eDg5NTQKK2NvbnN0IF9SVEZfREVGQVVMVCA9IDB4MDAwMTAwMDAKK2NvbnN0IF9TWVNfbXFfb3Bl
biA9IF9fX05SX21xX29wZW4KK2NvbnN0IF9TWVNfY2xvY2tfZ2V0cmVzID0gX19fTlJfY2xvY2tf
Z2V0cmVzCitjb25zdCBfTVFfUFJJT19NQVggPSAzMjc2OAorY29uc3QgX19TQ19DSEFSX01BWCA9
IDEwMgorY29uc3QgX0lQVjZfQUREX01FTUJFUlNISVAgPSBfSVBWNl9KT0lOX0dST1VQCitjb25z
dCBfX1NUQVRfVkVSX0xJTlVYID0gMQorY29uc3QgX0lGTEFfQlJQT1JUX0xFQVJOSU5HX1NZTkMg
PSAxMQorY29uc3QgX0VOT1ROQU0gPSAxMTgKK2NvbnN0IF9USU9DUEtUX0ZMVVNIV1JJVEUgPSAy
Citjb25zdCBfTUFQX0hVR0VUTEIgPSAweDQwMDAwCitjb25zdCBfSEFWRV9GQUNDRVNTQVQgPSAx
Citjb25zdCBfX19EQkxfTUlOX0VYUF9fID0gKC0xMDIxKQorY29uc3QgX1g4Nl9DUjRfUENJREVf
QklUID0gMTcKK2NvbnN0IF9TQ05pTEVBU1Q4ID0gImhoaSIKK2NvbnN0IF9JUFY2X1BNVFVESVND
X1BST0JFID0gMworY29uc3QgX0lQUE9SVF9GSU5HRVIgPSA3OQorY29uc3QgX1BPUlRfVVVJRF9N
QVggPSAxNgorY29uc3QgX0xPTkdfTE9OR19NQVggPSBfX19MT05HX0xPTkdfTUFYX18KK2NvbnN0
IF9JTlQ4X01JTiA9ICgtMTI4KQorY29uc3QgX19fTlJfd3JpdGUgPSAxCitjb25zdCBfX19TX0lG
QkxLID0gMDA2MDAwMAorY29uc3QgX1NDSEVEX0ZJRk8gPSAxCitjb25zdCBfX1BBVEhfSEVRVUlW
ID0gIi9ldGMvaG9zdHMuZXF1aXYiCitjb25zdCBfQlBGX01TSCA9IDB4YTAKK2NvbnN0IF9fUENf
U1lOQ19JTyA9IDkKK2NvbnN0IF9fU0NfQURWSVNPUllfSU5GTyA9IDEzMgorY29uc3QgX19fTlJf
cmVjdm1zZyA9IDQ3Citjb25zdCBfRkFTWU5DID0gX09fQVNZTkMKK2NvbnN0IF9SVE1HUlBfSVBW
Nl9NUk9VVEUgPSAweDIwMAorY29uc3QgX1NZU19pb19wZ2V0ZXZlbnRzID0gX19fTlJfaW9fcGdl
dGV2ZW50cworY29uc3QgX0hBVkVfU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfNCA9IDEKK2Nv
bnN0IF9FUE9MTF9DVExfQUREID0gMQorY29uc3QgX1VTSFJUX01BWCA9IChfU0hSVF9NQVggKiAy
ICsgMSkKK2NvbnN0IF9fU0NfVFJBQ0UgPSAxODEKK2NvbnN0IF9QVFJBQ0VfU0lOR0xFU1RFUCA9
IDkKK2NvbnN0IF9JRkxBX0xJTksgPSA1Citjb25zdCBfTkRUUEFfUkVUUkFOU19USU1FID0gNQor
Y29uc3QgX0hBVkVfU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfOCA9IDEKK2NvbnN0IF9SVE1f
R0VUVEZJTFRFUiA9IDQ2Citjb25zdCBfU1lTX21zZ3JjdiA9IF9fX05SX21zZ3JjdgorY29uc3Qg
X19fTlJfbXNnY3RsID0gNzEKK2NvbnN0IF9IQVZFX1JFTkFNRUFUID0gMQorY29uc3QgX0lGRl9O
QVBJX0ZSQUdTID0gMHgwMDIwCitjb25zdCBfSUZMQV9YRFBfQVRUQUNIRUQgPSAyCitjb25zdCBf
U1lTX2Vwb2xsX2NyZWF0ZSA9IF9fX05SX2Vwb2xsX2NyZWF0ZQorY29uc3QgX0lGTEFfVkZfU1RB
VFNfQlJPQURDQVNUID0gNAorY29uc3QgX1RDUF9NRDVTSUdfRkxBR19QUkVGSVggPSAxCitjb25z
dCBfSUZMQV9CT05EX0FEX1VTRVJfUE9SVF9LRVkgPSAyNQorY29uc3QgX0FSUEhSRF9BREFQVCA9
IDI2NAorY29uc3QgX1RVTkFUVEFDSEZJTFRFUl92YWwgPSAxMDc0ODEyMTE3Citjb25zdCBfVENQ
X01BWF9XSU5TSElGVCA9IDE0Citjb25zdCBfSVBQUk9UT19JR01QID0gMgorY29uc3QgX0lQX01B
WF9NRU1CRVJTSElQUyA9IDIwCitjb25zdCBfSUZMQV9CUlBPUlRfQkFDS1VQX1BPUlQgPSAzNAor
Y29uc3QgX1JUTUdSUF9ERUNuZXRfSUZBRERSID0gMHgxMDAwCitjb25zdCBfTUFEVl9LRUVQT05G
T1JLID0gMTkKK2NvbnN0IF9BRl9BWDI1ID0gX1BGX0FYMjUKK2NvbnN0IF9JTlRQVFJfTUFYID0g
KDkyMjMzNzIwMzY4NTQ3NzU4MDcpCitjb25zdCBfQVJQSFJEX0VVSTY0ID0gMjcKK2NvbnN0IF9S
VEFfR0FURVdBWSA9IDUKK2NvbnN0IF9TQ051MTYgPSAiaHUiCitjb25zdCBfX19OUl90cnVuY2F0
ZSA9IDc2Citjb25zdCBfX19OUl9nZXRybGltaXQgPSA5NworY29uc3QgX19QT1NJWF9DSE9XTl9S
RVNUUklDVEVEID0gMAorY29uc3QgX19fTlJfcHJlYWQ2NCA9IDE3Citjb25zdCBfUFJfU0VUX01N
X1NUQVJUX0JSSyA9IDYKK2NvbnN0IF9SVEFYX0xPQ0sgPSAxCitjb25zdCBfU1lTX2dldGRlbnRz
ID0gX19fTlJfZ2V0ZGVudHMKK2NvbnN0IF9TT19ET01BSU4gPSAzOQorY29uc3QgX1NfSVNWVFgg
PSBfX19TX0lTVlRYCitjb25zdCBfUFRSQUNFX1BPS0VEQVRBID0gNQorY29uc3QgX1BBQ0tFVF9P
UklHREVWID0gOQorY29uc3QgX0lQT1BUX1RTID0gNjgKK2NvbnN0IF9fX0lGTEFfT0ZGTE9BRF9Y
U1RBVFNfTUFYID0gMgorY29uc3QgX19TQ19TSFJUX01BWCA9IDExMworY29uc3QgX1JFR19SSVAg
PSAxNgorY29uc3QgX19fRkxUNjRYX01BWF9fID0gMS4xCitjb25zdCBfSUZGX0FMTE1VTFRJID0g
NTEyCitjb25zdCBfU0FfU0lHSU5GTyA9IDQKK2NvbnN0IF9SRUdfQ1NHU0ZTID0gMTgKK2NvbnN0
IF9JRkxBX1ZYTEFOX0dCUCA9IDIzCitjb25zdCBfX1RJTUVfSCA9IDEKK2NvbnN0IF9TWVNfZ2V0
dWlkID0gX19fTlJfZ2V0dWlkCitjb25zdCBfSVBWNl9QTVRVRElTQ19XQU5UID0gMQorY29uc3Qg
X19TQ18yX1BCU19NRVNTQUdFID0gMTcxCitjb25zdCBfX19OUl9tZW1iYXJyaWVyID0gMzI0Citj
b25zdCBfU1lTX3dhaXQ0ID0gX19fTlJfd2FpdDQKK2NvbnN0IF9MT05HX1dJRFRIID0gX19fV09S
RFNJWkUKK2NvbnN0IF9CUEZfSyA9IDB4MDAKK2NvbnN0IF9FTk9UVU5JUSA9IDc2Citjb25zdCBf
TkRfT1BUX0hPTUVfQUdFTlRfSU5GTyA9IDgKK2NvbnN0IF9OSV9OQU1FUkVRRCA9IDgKK2NvbnN0
IF9fX3BpY19fID0gMgorY29uc3QgX05MTV9GX0RVTVBfSU5UUiA9IDB4MTAKK2NvbnN0IF9GQUxM
T0NfRkxfVU5TSEFSRV9SQU5HRSA9IDB4NDAKK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX1BPV0VS
X09GRiA9IDB4NDMyMUZFREMKK2NvbnN0IF9fX0lGTEFfVlJGX01BWCA9IDIKK2NvbnN0IF9JRkxB
X0lORVQ2X0FERFJfR0VOX01PREUgPSA4Citjb25zdCBfRU5PU1IgPSA2MworY29uc3QgX1BSX0dF
VF9USU1JTkcgPSAxMworY29uc3QgX19QT1NJWF9DX1NPVVJDRSA9IDIwMDgwOQorY29uc3QgX1RV
TlNFVFRYRklMVEVSX3ZhbCA9IDEwNzQwMjU2ODEKK2NvbnN0IF9QUl9DQVBfQU1CSUVOVF9JU19T
RVQgPSAxCitjb25zdCBfSVRJTUVSX1BST0YgPSAyCitjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9N
VVRFWEFUVFJfVCA9IDQKK2NvbnN0IF9TWVNfbmFtZV90b19oYW5kbGVfYXQgPSBfX19OUl9uYW1l
X3RvX2hhbmRsZV9hdAorY29uc3QgX0I1NzYwMDAgPSAwMDEwMDA2Citjb25zdCBfU0VFS19TRVQg
PSAwCitjb25zdCBfQlBGX09SID0gMHg0MAorY29uc3QgX1BGX1JPVVRFID0gX1BGX05FVExJTksK
K2NvbnN0IF9fX0ZMVDY0X01JTl9FWFBfXyA9ICgtMTAyMSkKK2NvbnN0IF9JTl9NQVNLX0FERCA9
IDB4MjAwMDAwMDAKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEx
NgorY29uc3QgX1RDUF9NQVhTRUcgPSAyCitjb25zdCBfTl9JUkRBID0gMTEKK2NvbnN0IF9JUFY2
X1JUSERSX1NUUklDVCA9IDEKK2NvbnN0IF9QQUNLRVRfUkVDVl9PVVRQVVQgPSAzCitjb25zdCBf
TUFEVl9ET05UTkVFRCA9IDQKK2NvbnN0IF9ORF9SRURJUkVDVCA9IDEzNworY29uc3QgX19fc2ln
aW5mb190X2RlZmluZWQgPSAxCitjb25zdCBfX19HQ0NfQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJF
RSA9IDIKK2NvbnN0IF9SVEFYX1FVSUNLQUNLID0gMTUKK2NvbnN0IF9fX0ZMVDMyX01BWF8xMF9F
WFBfXyA9IDM4Citjb25zdCBfQlBGX01VTCA9IDB4MjAKK2NvbnN0IF9TWVNfZXBvbGxfd2FpdF9v
bGQgPSBfX19OUl9lcG9sbF93YWl0X29sZAorY29uc3QgX19fSUZMQV9JUFZMQU5fTUFYID0gMwor
Y29uc3QgX0lQX1BNVFVESVNDX1BST0JFID0gMworY29uc3QgX1NZU19zeXNmcyA9IF9fX05SX3N5
c2ZzCitjb25zdCBfX19PUFRJTUlaRV9fID0gMQorY29uc3QgX0lQVE9TX1BSRUNfSU5URVJORVRD
T05UUk9MID0gX0lQVE9TX0NMQVNTX0NTNgorY29uc3QgX0hBVkVfQVNJTkwgPSAxCitjb25zdCBf
SVBWNl9VTklDQVNUX0lGID0gNzYKK2NvbnN0IF9OTE1fRl9BVE9NSUMgPSAweDQwMAorY29uc3Qg
X0ZTX1hGTEFHX05PU1lNTElOS1MgPSAweDAwMDAwNDAwCitjb25zdCBfRl9MT0NLID0gMQorY29u
c3QgX0lDTVA2X1BBUkFNUFJPQl9IRUFERVIgPSAwCitjb25zdCBfRVRIX1BfSUVFRTgwMjE1NCA9
IDB4MDBGNgorY29uc3QgX1NJT0NHSUZIV0FERFIgPSAweDg5MjcKK2NvbnN0IF9TWVNfc2VtZ2V0
ID0gX19fTlJfc2VtZ2V0Citjb25zdCBfX19QVEhSRUFEX01VVEVYX05VU0VSU19BRlRFUl9LSU5E
ID0gMAorY29uc3QgX1BSX1NFVF9NTV9NQVBfU0laRSA9IDE1Citjb25zdCBfUlROX0JMQUNLSE9M
RSA9IDYKK2NvbnN0IF9TWVNfcGtleV9hbGxvYyA9IF9fX05SX3BrZXlfYWxsb2MKK2NvbnN0IF9B
Rl9JTkVUNiA9IF9QRl9JTkVUNgorY29uc3QgX05MQV9IRFJMRU5fdmFsID0gNAorY29uc3QgX0hB
VkVfUkVNT1ZFWEFUVFIgPSAxCitjb25zdCBfSUNNUDZfUlJfRkxBR1NfU1BFQ1NJVEUgPSAweDEw
Citjb25zdCBfX19OUl9zZXRucyA9IDMwOAorY29uc3QgX19fV05PVEhSRUFEID0gMHgyMDAwMDAw
MAorY29uc3QgX0VUSF9QX0xPT1AgPSAweDAwNjAKK2NvbnN0IF9WRU9MID0gMTEKK2NvbnN0IF9N
U19OT0RFViA9IDQKK2NvbnN0IF9TT19aRVJPQ09QWSA9IDYwCitjb25zdCBfX19OUl9nZXRyYW5k
b20gPSAzMTgKK2NvbnN0IF9SVEZfQUxMT05MSU5LID0gMHgwMDAyMDAwMAorY29uc3QgX1JUTkxH
UlBfREVDbmV0X1JVTEUgPSAxNgorY29uc3QgX19fTlJfbWJpbmQgPSAyMzcKK2NvbnN0IF9NU19L
RVJOTU9VTlQgPSA0MTk0MzA0Citjb25zdCBfSVVDTEMgPSAwMDAxMDAwCitjb25zdCBfSEFWRV9T
RU1fVElNRURXQUlUID0gMQorY29uc3QgX19fUFJFRklYX01BWCA9IDMKK2NvbnN0IF9NQVBfU1RB
Q0sgPSAweDIwMDAwCitjb25zdCBfU1lTX3BlcnNvbmFsaXR5ID0gX19fTlJfcGVyc29uYWxpdHkK
K2NvbnN0IF9fUE9TSVhfTU9OT1RPTklDX0NMT0NLID0gMAorY29uc3QgX1VUSU1FX09NSVQgPSAo
KDEgPDwgMzApIC0gMikKK2NvbnN0IF9QUklvTEVBU1Q4ID0gIm8iCitjb25zdCBfUFJfRlBfRVhD
X0lOViA9IDB4MTAwMDAwCitjb25zdCBfRVRIRVJUWVBFX1ZMQU4gPSAweDgxMDAKK2NvbnN0IF9S
VFBST1RfR0FURUQgPSA4Citjb25zdCBfTVNfTU9WRSA9IDgxOTIKK2NvbnN0IF9JRkxBX0JSUE9S
VF9ERVNJR05BVEVEX1BPUlQgPSAxNQorY29uc3QgX1BSX1NFVF9UU0MgPSAyNgorY29uc3QgX19T
VERDX1BSRURFRl9IID0gMQorY29uc3QgX0lGRl9BVVRPTUVESUEgPSAxNjM4NAorY29uc3QgX19f
VVNFX0ZPUlRJRllfTEVWRUwgPSAwCitjb25zdCBfRUJGT05UID0gNTkKK2NvbnN0IF9fX05EVEFf
TUFYID0gMTAKK2NvbnN0IF9fX1NJWkVPRl9MT05HX0xPTkdfXyA9IDgKK2NvbnN0IF9JUFY2X1BN
VFVESVNDX0RPTlQgPSAwCitjb25zdCBfSVBWTEFOX01PREVfTDNTID0gMgorY29uc3QgX0lGTEFf
VFVOX1RZUEUgPSAzCitjb25zdCBfT19DTE9FWEVDID0gX19fT19DTE9FWEVDCitjb25zdCBfU0tG
X0FEX01BUksgPSAyMAorY29uc3QgX19fRkxUNjRYX0RFTk9STV9NSU5fXyA9IDEuMQorY29uc3Qg
X0lGRl9TTEFWRSA9IDIwNDgKK2NvbnN0IF9EVF9SRUcgPSA4Citjb25zdCBfRkFMTE9DX0ZMX1BV
TkNIX0hPTEUgPSAweDAyCitjb25zdCBfQVJQSFJEX05FVFJPTSA9IDAKK2NvbnN0IF9fX0xEQkxf
RElHX18gPSAxOAorY29uc3QgX19TQ19VU0VSX0dST1VQUyA9IDE2NgorY29uc3QgX19VTklTVERf
SCA9IDEKK2NvbnN0IF9UQ1BfTUFYV0lOID0gNjU1MzUKK2NvbnN0IF9GU19OT0RVTVBfRkwgPSAw
eDAwMDAwMDQwCitjb25zdCBfVElPQ1NMQ0tUUk1JT1MgPSAweDU0NTcKK2NvbnN0IF9fX05SX2Zp
bml0X21vZHVsZSA9IDMxMworY29uc3QgX1NLRl9BRF9NQVggPSA2NAorY29uc3QgX1JFR19SMTQg
PSA2Citjb25zdCBfRkFMTE9DX0ZMX1pFUk9fUkFOR0UgPSAweDEwCitjb25zdCBfSUZMQV9CUl9H
Q19USU1FUiA9IDE5Citjb25zdCBfX19OUl9mYWR2aXNlNjQgPSAyMjEKK2NvbnN0IF9PX05ERUxB
WSA9IF9PX05PTkJMT0NLCitjb25zdCBfRVBPTExQUkkgPSAyCitjb25zdCBfRUFJX0ZBSUwgPSAt
NAorY29uc3QgX19fZ2xpYmNfYzk5X2ZsZXhhcnJfYXZhaWxhYmxlID0gMQorY29uc3QgX19fTlJf
aW9fc3VibWl0ID0gMjA5Citjb25zdCBfUlRBX1RUTF9QUk9QQUdBVEUgPSAyNgorY29uc3QgX05f
U01TQkxPQ0sgPSAxMgorY29uc3QgX19QT1NJWF9USFJFQURfQ1BVVElNRSA9IDAKK2NvbnN0IF9U
Q1BJX09QVF9TQUNLID0gMgorY29uc3QgX1RJT0NHRVREID0gMHg1NDI0Citjb25zdCBfQ0xPTkVf
U1lTVlNFTSA9IDB4MDAwNDAwMDAKK2NvbnN0IF9ORVRMSU5LX1NFTElOVVggPSA3Citjb25zdCBf
Q0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQgPSAzCitjb25zdCBfX19OUl9jbG9ja19uYW5vc2xlZXAg
PSAyMzAKK2NvbnN0IF9fU0NfQ0hBUl9CSVQgPSAxMDEKK2NvbnN0IF9TQV9SRVNFVEhBTkQgPSAw
eDgwMDAwMDAwCitjb25zdCBfQURKX1NUQVRVUyA9IDB4MDAxMAorY29uc3QgX1BSX1NFVF9QVFJB
Q0VSID0gMHg1OTYxNmQ2MQorY29uc3QgX1BSX1NFVF9NTV9CUksgPSA3Citjb25zdCBfX19JTFAz
Ml9PRkZCSUdfQ0ZMQUdTID0gIi1tMzIgLURfTEFSR0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNF
VF9CSVRTPTY0IgorY29uc3QgX1RDUF9GQVNUT1BFTl9LRVkgPSAzMworY29uc3QgX19TQ19TSEFS
RURfTUVNT1JZX09CSkVDVFMgPSAyMgorY29uc3QgX1JUTUdSUF9JUFY2X1JPVVRFID0gMHg0MDAK
K2NvbnN0IF9JRkxBX0JSUE9SVF9QUklPUklUWSA9IDIKK2NvbnN0IF9CMzAwMDAwMCA9IDAwMTAw
MTUKK2NvbnN0IF9NU19NR0NfVkFMID0gMHhDMEVEMDAwMAorY29uc3QgX0FESl9FU1RFUlJPUiA9
IDB4MDAwOAorY29uc3QgX1JUTkhfRl9MSU5LRE9XTiA9IDE2Citjb25zdCBfRVRIX1BfRE5BX0RM
ID0gMHg2MDAxCitjb25zdCBfUFJfU0VUX1RJTUlORyA9IDE0Citjb25zdCBfTkVUTElOS19JU0NT
SSA9IDgKK2NvbnN0IF9fX05EQV9NQVggPSAxMgorY29uc3QgX19fTlJfc2V0Z3JvdXBzID0gMTE2
Citjb25zdCBfX1hPUEVOX0xJTV9IID0gMQorY29uc3QgX19fT1JERVJfQklHX0VORElBTl9fID0g
NDMyMQorY29uc3QgX0FSUEhSRF9YMjUgPSAyNzEKK2NvbnN0IF9MTE9OR19NQVggPSBfX19MT05H
X0xPTkdfTUFYX18KK2NvbnN0IF9fQ1NfTEZTX0NGTEFHUyA9IDEwMDAKK2NvbnN0IF9fU1lTQ0FM
TF9IID0gMQorY29uc3QgX0FSUEhSRF9FQ09ORVQgPSA3ODIKK2NvbnN0IF9fX0dOVUNfU1REQ19J
TkxJTkVfXyA9IDEKK2NvbnN0IF9NU19QUklWQVRFID0gMjYyMTQ0Citjb25zdCBfTUFDVkxBTl9N
QUNBRERSX0RFTCA9IDEKK2NvbnN0IF9TQ0hFRF9SRVNFVF9PTl9GT1JLID0gMHg0MDAwMDAwMAor
Y29uc3QgX1BPUlRfUFJPRklMRV9SRVNQT05TRV9TVUNDRVNTID0gMjU2Citjb25zdCBfUFJfR0VU
X0RVTVBBQkxFID0gMworY29uc3QgX05EQV9VTlNQRUMgPSAwCitjb25zdCBfX1NDX1JFX0RVUF9N
QVggPSA0NAorY29uc3QgX0hPU1RfTk9UX0ZPVU5EID0gMQorY29uc3QgX1NZU19wcmVhZHYgPSBf
X19OUl9wcmVhZHYKK2NvbnN0IF9NT0RfTUFYRVJST1IgPSBfQURKX01BWEVSUk9SCitjb25zdCBf
T19ESVJFQ1QgPSBfX19PX0RJUkVDVAorY29uc3QgX0lGTEFfQk9ORF9BTExfU0xBVkVTX0FDVElW
RSA9IDE3Citjb25zdCBfX1NDX1BJSV9JTlRFUk5FVCA9IDU2Citjb25zdCBfVFVOU0VUU05EQlVG
X3ZhbCA9IDEwNzQwMjU2ODQKK2NvbnN0IF9SVE5MR1JQX0lQVjZfSUZBRERSID0gOQorY29uc3Qg
X1NUQVRYX05MSU5LID0gMHgwMDA0Citjb25zdCBfX19JRkxBX1BPUlRfTUFYID0gOAorY29uc3Qg
X0JVU19BRFJFUlIgPSAyCitjb25zdCBfUlRNX05FV0FERFIgPSAyMAorY29uc3QgX1RJT0NNSVdB
SVQgPSAweDU0NUMKK2NvbnN0IF9SVE1fREVMTlNJRCA9IDg5Citjb25zdCBfSEFWRV9TWVNfU1lT
SU5GT19IID0gMQorY29uc3QgX19fTlJfc3RhdCA9IDQKK2NvbnN0IF9TUExJQ0VfRl9NT1JFID0g
NAorY29uc3QgX0lGQV9GX01DQVVUT0pPSU4gPSAweDQwMAorY29uc3QgX1NZU19pb3ByaW9fZ2V0
ID0gX19fTlJfaW9wcmlvX2dldAorY29uc3QgX0hBVkVfRExfSVRFUkFURV9QSERSID0gMQorY29u
c3QgX19fSUZMQV9WRl9TVEFUU19NQVggPSA5Citjb25zdCBfU1lTX2luaXRfbW9kdWxlID0gX19f
TlJfaW5pdF9tb2R1bGUKK2NvbnN0IF9SVE1fR0VUQU5ZQ0FTVCA9IDYyCitjb25zdCBfX1BPU0lY
X01RX09QRU5fTUFYID0gOAorY29uc3QgX1NZU19sZ2V0eGF0dHIgPSBfX19OUl9sZ2V0eGF0dHIK
K2NvbnN0IF9TWVNfcm1kaXIgPSBfX19OUl9ybWRpcgorY29uc3QgX0VUSEVSVFlQRV9BQVJQID0g
MHg4MEYzCitjb25zdCBfUEFDS0FHRV9UQVJOQU1FID0gImxpYmdvIgorY29uc3QgX0lOVF9MRUFT
VDhfTUFYID0gKDEyNykKK2NvbnN0IF9JUFRPU19QUkVDX1JPVVRJTkUgPSBfSVBUT1NfQ0xBU1Nf
Q1MwCitjb25zdCBfSUZBX0ZfT1BUSU1JU1RJQyA9IDB4MDQKK2NvbnN0IF9ORFRQQV9VTlNQRUMg
PSAwCitjb25zdCBfX19OUl9wc2VsZWN0NiA9IDI3MAorY29uc3QgX0ZfR0VUU0lHID0gX19fRl9H
RVRTSUcKK2NvbnN0IF9TT19XSUZJX1NUQVRVUyA9IDQxCitjb25zdCBfU19JV09USCA9IChfU19J
V0dSUCA+PiAzKQorY29uc3QgX0lOUENLID0gMDAwMDAyMAorY29uc3QgX05EVFBBX0FQUF9QUk9C
RVMgPSA5Citjb25zdCBfX19PX0xBUkdFRklMRSA9IDAKK2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05T
RV9WVElEX1ZFUlNJT05fVklPQUxUSU9OID0gNQorY29uc3QgX19fTlJfc2V0eGF0dHIgPSAxODgK
K2NvbnN0IF9fX0ZMVDMyX0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX19DU19QT1NJWF9WNl9M
UEJJR19PRkZCSUdfTERGTEFHUyA9IDExMjkKK2NvbnN0IF9QUl9HRVRfVFNDID0gMjUKK2NvbnN0
IF9SVE1fR0VUTkVJR0ggPSAzMAorY29uc3QgX1BUUkFDRV9TRVRPUFRJT05TID0gMTY4OTYKK2Nv
bnN0IF9fX05SX2Vwb2xsX2NyZWF0ZSA9IDIxMworY29uc3QgX0lQVE9TX1JFTElBQklMSVRZID0g
MHgwNAorY29uc3QgX0FSUEhSRF9GUkFEID0gNzcwCitjb25zdCBfU0lPQ1NJRkJSREFERFIgPSAw
eDg5MWEKK2NvbnN0IF9fX1VJTlRQVFJfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYKK2NvbnN0
IF9fX05SX2Nob3duID0gOTIKK2NvbnN0IF9fX05SX2Zhbm90aWZ5X2luaXQgPSAzMDAKK2NvbnN0
IF9BVF9OT19BVVRPTU9VTlQgPSAweDgwMAorY29uc3QgX19fTlJfZXBvbGxfY3JlYXRlMSA9IDI5
MQorY29uc3QgX1NZU19zZXRyZXNnaWQgPSBfX19OUl9zZXRyZXNnaWQKK2NvbnN0IF9OX1BST0ZJ
QlVTX0ZETCA9IDEwCitjb25zdCBfQlBGX1hPUiA9IDB4YTAKK2NvbnN0IF9JQ01QNl9SUl9GTEFH
U19SRVFSRVNVTFQgPSAweDQwCitjb25zdCBfSUZMQV9JUE9JQl9NT0RFID0gMgorY29uc3QgX01B
UF9TSEFSRURfVkFMSURBVEUgPSAweDAzCitjb25zdCBfU1lTX3F1ZXJ5X21vZHVsZSA9IF9fX05S
X3F1ZXJ5X21vZHVsZQorY29uc3QgX1NZU190aW1lcl9nZXRvdmVycnVuID0gX19fTlJfdGltZXJf
Z2V0b3ZlcnJ1bgorY29uc3QgX19fTlJfZnJlbW92ZXhhdHRyID0gMTk5Citjb25zdCBfU0laRV9X
SURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfSUZBX0ZfU0VDT05EQVJZID0gMHgwMQorY29uc3Qg
X19TQ19KT0JfQ09OVFJPTCA9IDcKK2NvbnN0IF9fX05SX21vdmVfcGFnZXMgPSAyNzkKK2NvbnN0
IF9JRkxBX0NBUlJJRVJfQ0hBTkdFUyA9IDM1Citjb25zdCBfSU5FVDZfQUREUlNUUkxFTiA9IDQ2
Citjb25zdCBfSUZMQV9JUE9JQl9QS0VZID0gMQorY29uc3QgX0lQUFJPVE9fRENDUCA9IDMzCitj
b25zdCBfU19JUkdSUCA9IChfU19JUlVTUiA+PiAzKQorY29uc3QgX1NPTF9JUkRBID0gMjY2Citj
b25zdCBfSEFWRV9VTlNIQVJFID0gMQorY29uc3QgX1NUQVRYX0FUVFJfSU1NVVRBQkxFID0gMHgw
MDEwCitjb25zdCBfX1NDX0ZTWU5DID0gMTUKK2NvbnN0IF9fX05SX2xpc3RlbiA9IDUwCitjb25z
dCBfU0NOeExFQVNUMTYgPSAiaHgiCitjb25zdCBfSUZMQV9NQUNTRUNfUEFEID0gMTQKK2NvbnN0
IF9BSV9DQU5PTklETiA9IDB4MDA4MAorY29uc3QgX1BSX01DRV9LSUxMX0dFVCA9IDM0Citjb25z
dCBfVFVOX0ZfQ1NVTSA9IDB4MDEKK2NvbnN0IF9fX0ZMVDMyWF9NQVhfRVhQX18gPSAxMDI0Citj
b25zdCBfQUZfUEFDS0VUID0gX1BGX1BBQ0tFVAorY29uc3QgX0lGTEFfQlJQT1JUX01PREUgPSA0
Citjb25zdCBfUEFDS0VUX0xPU1MgPSAxNAorY29uc3QgX1dDSEFSX1dJRFRIID0gMzIKK2NvbnN0
IF9TT0xfTkVUQkVVSSA9IDI2NworY29uc3QgX19fTlJfZmdldHhhdHRyID0gMTkzCitjb25zdCBf
X1NDX1hCUzVfSUxQMzJfT0ZGMzIgPSAxMjUKK2NvbnN0IF9UQ1BfUVVJQ0tBQ0sgPSAxMgorY29u
c3QgX09fVE1QRklMRSA9IF9fX09fVE1QRklMRQorY29uc3QgX0VGQklHID0gMjcKK2NvbnN0IF9f
U0NfMl9DX0JJTkQgPSA0NworY29uc3QgX0lQVE9TX0NMQVNTX0NTMCA9IDB4MDAKK2NvbnN0IF9J
UFRPU19DTEFTU19DUzEgPSAweDIwCitjb25zdCBfSVBUT1NfQ0xBU1NfQ1MyID0gMHg0MAorY29u
c3QgX1NZU19mc3luYyA9IF9fX05SX2ZzeW5jCitjb25zdCBfSVBUT1NfQ0xBU1NfQ1M0ID0gMHg4
MAorY29uc3QgX0lQVE9TX0NMQVNTX0NTNSA9IDB4YTAKK2NvbnN0IF9fSU9DX0RJUlNISUZUID0g
KF9fSU9DX1NJWkVTSElGVCtfX0lPQ19TSVpFQklUUykKK2NvbnN0IF9JUFRPU19DTEFTU19DUzcg
PSAweGUwCitjb25zdCBfX19GTFQ2NFhfRElHX18gPSAxOAorY29uc3QgX1RDUF9GQVNUT1BFTl9O
T19DT09LSUUgPSAzNAorY29uc3QgX0xJTlVYX1JFQk9PVF9NQUdJQzJBID0gODUwNzIyNzgKK2Nv
bnN0IF9QUl9NQ0VfS0lMTF9DTEVBUiA9IDAKK2NvbnN0IF9QVFJBQ0VfT19NQVNLID0gMzE0NTk4
MworY29uc3QgX0VYREVWID0gMTgKK2NvbnN0IF9OVURfSU5DT01QTEVURSA9IDB4MDEKK2NvbnN0
IF9BRl9LRVkgPSBfUEZfS0VZCitjb25zdCBfWDg2X0NSM19QQ0RfQklUID0gNAorY29uc3QgX1BU
UkFDRV9TRVRTSUdJTkZPID0gMTY4OTkKK2NvbnN0IF9FTDNITFQgPSA0NgorY29uc3QgX1NZU19m
YW5vdGlmeV9tYXJrID0gX19fTlJfZmFub3RpZnlfbWFyaworY29uc3QgX19CSVRTX0VSUk5PX0gg
PSAxCitjb25zdCBfX19OUl90aW1lcl9nZXRvdmVycnVuID0gMjI1Citjb25zdCBfSVBWNl9UQ0xB
U1MgPSA2NworY29uc3QgX05EVEFfUEFSTVMgPSA2Citjb25zdCBfQUZfWDI1ID0gX1BGX1gyNQor
Y29uc3QgX0JTRExZID0gMDAyMDAwMAorY29uc3QgX01TR19QUk9YWSA9IDE2Citjb25zdCBfSUZM
QV9NQUNTRUNfVU5TUEVDID0gMAorY29uc3QgX19fTlJfYWZzX3N5c2NhbGwgPSAxODMKK2NvbnN0
IF9NRkRfQ0xPRVhFQyA9IDEKK2NvbnN0IF9fX1VJTlRfRkFTVDhfTUFYX18gPSAweGZmCitjb25z
dCBfU1RBVFhfU0laRSA9IDB4MDIwMAorY29uc3QgX19TQ19DSEFSX01JTiA9IDEwMworY29uc3Qg
X0ZTX0NPTVBSX0ZMID0gMHgwMDAwMDAwNAorY29uc3QgX0lDTVA2X1JSX1JFU1VMVF9GTEFHU19P
T0IgPSAweDAyMDAKK2NvbnN0IF9TQ01fVElNRVNUQU1QSU5HX1BLVElORk8gPSA1OAorY29uc3Qg
X1ZFT0YgPSA0Citjb25zdCBfX19OUl9tcV9vcGVuID0gMjQwCitjb25zdCBfSUZGX01BU1RFUiA9
IDEwMjQKK2NvbnN0IF9QVFJBQ0VfU0lOR0xFQkxPQ0sgPSAzMworY29uc3QgX1NZU19nZXR0aW1l
b2ZkYXkgPSBfX19OUl9nZXR0aW1lb2ZkYXkKK2NvbnN0IF9fX05SX2FjY2VwdCA9IDQzCitjb25z
dCBfX1BPU0lYX01FU1NBR0VfUEFTU0lORyA9IDIwMDgwOQorY29uc3QgX19fUFRSRElGRl9NQVhf
XyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX1NJX0tFUk5FTCA9IDEyOAorY29uc3QgX19T
Q19CQ19CQVNFX01BWCA9IDM2Citjb25zdCBfVFVOU0VUTElOS192YWwgPSAxMDc0MDI1Njc3Citj
b25zdCBfU1lTX3N5bmNfZmlsZV9yYW5nZSA9IF9fX05SX3N5bmNfZmlsZV9yYW5nZQorY29uc3Qg
X0FSUEhSRF9DU0xJUCA9IDI1NworY29uc3QgX1BSX0ZQX0VYQ19PVkYgPSAweDAyMDAwMAorY29u
c3QgX19fTlJfc29ja2V0cGFpciA9IDUzCitjb25zdCBfU1lTX3VzZXJmYXVsdGZkID0gX19fTlJf
dXNlcmZhdWx0ZmQKK2NvbnN0IF9JRkxBX0JPTkRfUFJJTUFSWSA9IDExCitjb25zdCBfQ0xEX0RV
TVBFRCA9IDMKK2NvbnN0IF9TWVNfbWlncmF0ZV9wYWdlcyA9IF9fX05SX21pZ3JhdGVfcGFnZXMK
K2NvbnN0IF9DU0laRSA9IDAwMDAwNjAKK2NvbnN0IF9SVE1HUlBfVEMgPSA4Citjb25zdCBfUlRN
X05FV0NIQUlOID0gMTAwCitjb25zdCBfRUFDQ0VTID0gMTMKK2NvbnN0IF9fUE9TSVhfTUFYX0NB
Tk9OID0gMjU1Citjb25zdCBfUlRQUk9UX1pFQlJBID0gMTEKK2NvbnN0IF9fUE9TSVhfVEhSRUFE
X1RIUkVBRFNfTUFYID0gNjQKK2NvbnN0IF9DTE9DS19CT09UVElNRSA9IDcKK2NvbnN0IF9fX3g4
Nl82NCA9IDEKK2NvbnN0IF9DUVVJVCA9IDAzNAorY29uc3QgX1RJT0NHUFROX3ZhbCA9IDIxNDc3
NjczNDQKK2NvbnN0IF9fU0NfWE9QRU5fVkVSU0lPTiA9IDg5Citjb25zdCBfX19JTlQxNl9NQVhf
XyA9IDB4N2ZmZgorY29uc3QgX19TQ19OTF9TRVRNQVggPSAxMjMKK2NvbnN0IF9fX05SX2lvX2Nh
bmNlbCA9IDIxMAorY29uc3QgX19TWVNfQ0RFRlNfSCA9IDEKK2NvbnN0IF9TQ054TEVBU1QzMiA9
ICJ4IgorY29uc3QgX0VUSF9QX01PQklURVggPSAweDAwMTUKK2NvbnN0IF9JRkxBX0VWRU5UX0JP
TkRJTkdfRkFJTE9WRVIgPSAzCitjb25zdCBfU0lfVElNRVIgPSAtMgorY29uc3QgX0VOT0tFWSA9
IDEyNgorY29uc3QgX0lGTEFfQlJQT1JUX1RPUE9MT0dZX0NIQU5HRV9BQ0sgPSAxOQorY29uc3Qg
X0FSUEhSRF9DU0xJUDYgPSAyNTkKK2NvbnN0IF9fX1dJTlRfTUlOX18gPSAwCitjb25zdCBfX19T
X0lGUkVHID0gMDEwMDAwMAorY29uc3QgX0lOVFBUUl9NSU4gPSAoLTkyMjMzNzIwMzY4NTQ3NzU4
MDctMSkKK2NvbnN0IF9fX1NfSVNVSUQgPSAwNDAwMAorY29uc3QgX1BSX1NFVF9TRUNVUkVCSVRT
ID0gMjgKK2NvbnN0IF9FUE9MTFdSQkFORCA9IDUxMgorY29uc3QgX19MRlM2NF9BU1lOQ0hST05P
VVNfSU8gPSAxCitjb25zdCBfU0tGX0FEX1JYSEFTSCA9IDMyCitjb25zdCBfUEZfTE9DQUwgPSAx
Citjb25zdCBfRU5PVFNPQ0sgPSA4OAorY29uc3QgX1NfSUZNVCA9IF9fX1NfSUZNVAorY29uc3Qg
X19fTlJfa2NtcCA9IDMxMgorY29uc3QgX1NZU19zcGxpY2UgPSBfX19OUl9zcGxpY2UKK2NvbnN0
IF9fUE9TSVhfVFJBQ0VfSU5IRVJJVCA9IC0xCitjb25zdCBfX1NDX1NIUlRfTUlOID0gMTE0Citj
b25zdCBfQVJQSFJEX0xBUEIgPSA1MTYKK2NvbnN0IF9JRkxBX0JPTkRfQURfSU5GT19QQVJUTkVS
X0tFWSA9IDQKK2NvbnN0IF9DTE9DS19NT05PVE9OSUNfUkFXID0gNAorY29uc3QgX01DQVNUX0VY
Q0xVREUgPSAwCitjb25zdCBfU0lPQ1NJRk1UVSA9IDB4ODkyMgorY29uc3QgX0FUX1NUQVRYX0ZP
UkNFX1NZTkMgPSAweDIwMDAKK2NvbnN0IF9TSU9DR0lGQ09ORiA9IDB4ODkxMgorY29uc3QgX0ZT
X1NFQ1JNX0ZMID0gMHgwMDAwMDAwMQorY29uc3QgX19fSU5UX0ZBU1QzMl9XSURUSF9fID0gNjQK
K2NvbnN0IF9fUENfTUFYX0NBTk9OID0gMQorY29uc3QgX0ZJT0NMRVggPSAweDU0NTEKK2NvbnN0
IF9fX0lMUDMyX09GRkJJR19MREZMQUdTID0gIi1tMzIiCitjb25zdCBfSUZMQV9IU1JfTVVMVElD
QVNUX1NQRUMgPSAzCitjb25zdCBfX19JTlRfRkFTVDE2X01BWF9fID0gMHg3ZmZmZmZmZmZmZmZm
ZmZmCitjb25zdCBfU1lTX21sb2NrYWxsID0gX19fTlJfbWxvY2thbGwKK2NvbnN0IF9TWVNfc2V0
X3RocmVhZF9hcmVhID0gX19fTlJfc2V0X3RocmVhZF9hcmVhCitjb25zdCBfTVNfQklORCA9IDQw
OTYKK2NvbnN0IF9BUlBPUF9JblJFUVVFU1QgPSA4Citjb25zdCBfU0laRU9GX1ZPSURfUCA9IDgK
K2NvbnN0IF9TSU9DR0lGTkVUTUFTSyA9IDB4ODkxYgorY29uc3QgX1NDSEVEX0JBVENIID0gMwor
Y29uc3QgX1JUTV9ORVdBQ1RJT04gPSA0OAorY29uc3QgX0FGX0tDTSA9IF9QRl9LQ00KK2NvbnN0
IF9TWVNfY29weV9maWxlX3JhbmdlID0gX19fTlJfY29weV9maWxlX3JhbmdlCitjb25zdCBfQVJQ
SFJEX1NMSVAgPSAyNTYKK2NvbnN0IF9NU19SRUxBVElNRSA9IDIwOTcxNTIKK2NvbnN0IF9SVVNB
R0VfU0VMRiA9IDAKK2NvbnN0IF9fX0ZfU0VUT1dOX0VYID0gMTUKK2NvbnN0IF9fX1JMSU1JVF9O
SUNFID0gMTMKK2NvbnN0IF9TT19BVFRBQ0hfRklMVEVSID0gMjYKK2NvbnN0IF9FUE9MTElOID0g
MQorY29uc3QgX0lGQV9GX0hPTUVBRERSRVNTID0gMHgxMAorY29uc3QgX1NLRl9MTF9PRkYgPSAo
LTB4MjAwMDAwKQorY29uc3QgX1JURl9USFJPVyA9IDB4MjAwMAorY29uc3QgX1NZU19vcGVuX2J5
X2hhbmRsZV9hdCA9IF9fX05SX29wZW5fYnlfaGFuZGxlX2F0Citjb25zdCBfX19TSVpFT0ZfV0lO
VF9UX18gPSA0Citjb25zdCBfSUZMQV9CUlBPUlRfUFJPWFlBUlAgPSAxMAorY29uc3QgX1NZU19t
YWR2aXNlID0gX19fTlJfbWFkdmlzZQorY29uc3QgX1NUQV9GUkVRSE9MRCA9IDB4MDA4MAorY29u
c3QgX1BGX1ZTT0NLID0gNDAKK2NvbnN0IF9OQ0NTID0gMzIKK2NvbnN0IF9fX0lGTEFfVlJGX1BP
UlRfTUFYID0gMgorY29uc3QgX19TQ19WNl9JTFAzMl9PRkYzMiA9IDE3NgorY29uc3QgX0NMRF9F
WElURUQgPSAxCitjb25zdCBfRVRPT01BTllSRUZTID0gMTA5Citjb25zdCBfUlRBWF9GRUFUVVJF
X0VDTiA9ICgxIDw8IDApCitjb25zdCBfRVRIX1BfSFNSID0gMHg4OTJGCitjb25zdCBfU1lTX2lv
X3NldHVwID0gX19fTlJfaW9fc2V0dXAKK2NvbnN0IF9STElNSVRfQ09SRSA9IDQKK2NvbnN0IF9T
WVNfa2V5Y3RsID0gX19fTlJfa2V5Y3RsCitjb25zdCBfX1NDX1NFTV9OU0VNU19NQVggPSAzMgor
Y29uc3QgX0VQT0xMV0FLRVVQID0gNTM2ODcwOTEyCitjb25zdCBfX19OUl9mbGlzdHhhdHRyID0g
MTk2Citjb25zdCBfX1NDX0JBUlJJRVJTID0gMTMzCitjb25zdCBfU1lTX3NldGdpZCA9IF9fX05S
X3NldGdpZAorY29uc3QgX19TQ19XT1JEX0JJVCA9IDEwNworY29uc3QgX0FSUEhSRF9ST1NFID0g
MjcwCitjb25zdCBfU0lfVVNFUiA9IDAKK2NvbnN0IF9JTl9DTEFTU0JfTlNISUZUID0gMTYKK2Nv
bnN0IF9ORFRQQV9QUk9YWV9RTEVOID0gMTQKK2NvbnN0IF9QUklpMTYgPSAiaSIKK2NvbnN0IF9J
RkxBX0JPTkRfQURfSU5GT19QQVJUTkVSX01BQyA9IDUKK2NvbnN0IF9NU0dfQ09ORklSTSA9IDIw
NDgKK2NvbnN0IF9fX05SX3N5bWxpbmthdCA9IDI2NgorY29uc3QgX0hBVkVfRlVUSU1FU0FUID0g
MQorY29uc3QgX19fUERQX0VORElBTiA9IDM0MTIKK2NvbnN0IF9QVEhSRUFEX0tFWVNfTUFYID0g
MTAyNAorY29uc3QgX01TX05PU1VJRCA9IDIKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1FVRVJZX0lO
VFZMID0gMzMKK2NvbnN0IF9fX1VJTlRNQVhfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYKK2Nv
bnN0IF9JRkxBX1dFSUdIVCA9IDE1Citjb25zdCBfSVBWNl9YRlJNX1BPTElDWSA9IDM1Citjb25z
dCBfX19OUl9hY2Nlc3MgPSAyMQorY29uc3QgX19TQ19MRVZFTDFfSUNBQ0hFX1NJWkUgPSAxODUK
K2NvbnN0IF9SVE1HUlBfSVBWNl9JRkFERFIgPSAweDEwMAorY29uc3QgX19fTlJfbGluayA9IDg2
Citjb25zdCBfRlNfWEZMQUdfUkVBTFRJTUUgPSAweDAwMDAwMDAxCitjb25zdCBfRkFMTE9DX0ZM
X0lOU0VSVF9SQU5HRSA9IDB4MjAKK2NvbnN0IF9fX1BSSVBUUl9QUkVGSVggPSAibCIKK2NvbnN0
IF9JRkxBX1hGUk1fVU5TUEVDID0gMAorY29uc3QgX1NUQVRYX0NUSU1FID0gMHgwMDgwCitjb25z
dCBfX19TQ0hBUl9NQVhfXyA9IDB4N2YKK2NvbnN0IF9TSFJUX1dJRFRIID0gMTYKK2NvbnN0IF9T
SU9DREVMUlQgPSAweDg5MEMKK2NvbnN0IF9BRl9JUFggPSBfUEZfSVBYCitjb25zdCBfTVNfQk9S
TiA9ICgxPDwyOSkKK2NvbnN0IF9JRkxBX1hEUCA9IDQzCitjb25zdCBfSUZMQV9TVEFUUyA9IDcK
K2NvbnN0IF9FUk9GUyA9IDMwCitjb25zdCBfU09fTk9fQ0hFQ0sgPSAxMQorY29uc3QgX0JDX0JB
U0VfTUFYID0gX19QT1NJWDJfQkNfQkFTRV9NQVgKK2NvbnN0IF9YODZfRUZMQUdTX0lGX0JJVCA9
IDkKK2NvbnN0IF9fWE9QRU5fU0hNID0gMQorY29uc3QgX1JFR19SU0kgPSA5Citjb25zdCBfQVJQ
SFJEX0xPQ0FMVExLID0gNzczCitjb25zdCBfX1NDX0RFVklDRV9TUEVDSUZJQ19SID0gMTQyCitj
b25zdCBfX1NDX1NFTEVDVCA9IDU5Citjb25zdCBfX19JRkFfTUFYID0gMTAKK2NvbnN0IF9TWVNf
ZmFjY2Vzc2F0ID0gX19fTlJfZmFjY2Vzc2F0Citjb25zdCBfQ1NUT1BCID0gMDAwMDEwMAorY29u
c3QgX01BQ1ZMQU5fTUFDQUREUl9TRVQgPSAzCitjb25zdCBfVUlOVF9NQVggPSAoX0lOVF9NQVgg
KiAyICsgMSkKK2NvbnN0IF9QUl9USU1JTkdfU1RBVElTVElDQUwgPSAwCitjb25zdCBfU0NOZEZB
U1Q4ID0gImhoZCIKK2NvbnN0IF9NQVhUVEwgPSAyNTUKK2NvbnN0IF9FQUlfTk9EQVRBID0gLTUK
K2NvbnN0IF9UQ1BfQ0FfQ1dSID0gMgorY29uc3QgX0lYT04gPSAwMDAyMDAwCitjb25zdCBfX19n
bnVfbGludXhfXyA9IDEKK2NvbnN0IF9fUEFUSF9TRVJWSUNFUyA9ICIvZXRjL3NlcnZpY2VzIgor
Y29uc3QgX19fSUZMQV9WRl9WTEFOX0lORk9fTUFYID0gMgorY29uc3QgX0FGX1VOSVggPSBfUEZf
VU5JWAorY29uc3QgX0VUSF9QX0hETEMgPSAweDAwMTkKK2NvbnN0IF9QUl9NUFhfRU5BQkxFX01B
TkFHRU1FTlQgPSA0MworY29uc3QgX1JUUFJPVF9CSVJEID0gMTIKK2NvbnN0IF9BUlBIUkRfSFdY
MjUgPSAyNzIKK2NvbnN0IF9SVE1fREVMUk9VVEUgPSAyNQorY29uc3QgX0lGTEFfQlJfVkxBTl9Q
Uk9UT0NPTCA9IDgKK2NvbnN0IF9JRkxBX0JSUE9SVF9VTlNQRUMgPSAwCitjb25zdCBfUlRNX0dF
VEFERFIgPSAyMgorY29uc3QgX1RDSU9OID0gMworY29uc3QgX0lQX0NIRUNLU1VNID0gMjMKK2Nv
bnN0IF9TWVNfZmNobW9kYXQgPSBfX19OUl9mY2htb2RhdAorY29uc3QgX0NMT05FX05FV1VTRVIg
PSAweDEwMDAwMDAwCitjb25zdCBfVElPQ05PVFRZID0gMHg1NDIyCitjb25zdCBfU09fTk9GQ1Mg
PSA0MworY29uc3QgX1NZU19jbG9ja19zZXR0aW1lID0gX19fTlJfY2xvY2tfc2V0dGltZQorY29u
c3QgX0lQX1BLVE9QVElPTlMgPSA5Citjb25zdCBfVENQX1FVRVVFU19OUiA9IDMKK2NvbnN0IF9f
X0ZMVDY0X0RFQ0lNQUxfRElHX18gPSAxNworY29uc3QgX0lDTVA2X1RJTUVfRVhDRUVEX1JFQVNT
RU1CTFkgPSAxCitjb25zdCBfSVBUT1NfRFNDUF9NQVNLID0gMHhmYworY29uc3QgX1NJR0lOVCA9
IDIKK2NvbnN0IF9DTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgPSAyCitjb25zdCBfSUNNUDZfRFNU
X1VOUkVBQ0ggPSAxCitjb25zdCBfSUZMQV9HRU5FVkVfVE9TID0gNAorY29uc3QgX1BSX0ZQX0VY
Q19ESVNBQkxFRCA9IDAKK2NvbnN0IF9NQURWX0RPRFVNUCA9IDE3Citjb25zdCBfU1lTX2dldF90
aHJlYWRfYXJlYSA9IF9fX05SX2dldF90aHJlYWRfYXJlYQorY29uc3QgX1NPTF9QTlBJUEUgPSAy
NzUKK2NvbnN0IF9NQVhfTElOS1MgPSAzMgorY29uc3QgX1JUTkxfRkFNSUxZX0lQTVIgPSAxMjgK
K2NvbnN0IF9OTF9NTUFQX1NUQVRVU19DT1BZID0gMworY29uc3QgX19TQ19SRUFERVJfV1JJVEVS
X0xPQ0tTID0gMTUzCitjb25zdCBfX1NDX0FJT19QUklPX0RFTFRBX01BWCA9IDI1Citjb25zdCBf
UlROTEdSUF9QSE9ORVRfSUZBRERSID0gMjEKK2NvbnN0IF9BUlBIUkRfRkNGQUJSSUMgPSA3ODcK
K2NvbnN0IF9DTE9ORV9QQVJFTlRfU0VUVElEID0gMHgwMDEwMDAwMAorY29uc3QgX1NZU19uZXdm
c3RhdGF0ID0gX19fTlJfbmV3ZnN0YXRhdAorY29uc3QgX0lGRl9OT1RSQUlMRVJTID0gMzIKK2Nv
bnN0IF9UQ1BfU0FWRV9TWU4gPSAyNworY29uc3QgX1BSSWkzMiA9ICJpIgorY29uc3QgX1RJTUVf
RVJST1IgPSA1Citjb25zdCBfX19OUl9yZWFkID0gMAorY29uc3QgX1ZFT0wyID0gMTYKK2NvbnN0
IF9FVEhFUlRZUEVfTlRSQUlMRVIgPSAxNgorY29uc3QgX19TQ19NT05PVE9OSUNfQ0xPQ0sgPSAx
NDkKK2NvbnN0IF9UQ0FfUk9PVF9DT1VOVCA9IDMKK2NvbnN0IF9QS0VZX0RJU0FCTEVfQUNDRVNT
ID0gMHgxCitjb25zdCBfSEFWRV9BU19YODZfUENSRUwgPSAxCitjb25zdCBfX19pb3ZlY19kZWZp
bmVkID0gMQorY29uc3QgX1RVTl9GTFRfQUxMTVVMVEkgPSAweDAwMDEKK2NvbnN0IF9ORVRMSU5L
X1JYX1JJTkcgPSA2Citjb25zdCBfRU5PVFJFQ09WRVJBQkxFID0gMTMxCitjb25zdCBfUFRSQUNF
X0lOVEVSUlVQVCA9IDE2OTAzCitjb25zdCBfQUZfQ0FJRiA9IF9QRl9DQUlGCitjb25zdCBfU09M
X0lQVjYgPSA0MQorY29uc3QgX0lGTEFfQlJPQURDQVNUID0gMgorY29uc3QgX19fTERCTF9NQU5U
X0RJR19fID0gNjQKK2NvbnN0IF9GRklfVFlQRV9TSU5UOCA9IDYKK2NvbnN0IF9fX05SX3dhaXRp
ZCA9IDI0NworY29uc3QgX0lYQU5ZID0gMDAwNDAwMAorY29uc3QgX1NZU19zY2hlZF9zZXRhZmZp
bml0eSA9IF9fX05SX3NjaGVkX3NldGFmZmluaXR5Citjb25zdCBfX19GTFQ2NFhfSEFTX1FVSUVU
X05BTl9fID0gMQorY29uc3QgX19TQ19TUE9SQURJQ19TRVJWRVIgPSAxNjAKK2NvbnN0IF9QT0xM
X0VSUiA9IDQKK2NvbnN0IF9JRkxBX1hEUF9VTlNQRUMgPSAwCitjb25zdCBfRl9SRExDSyA9IDAK
K2NvbnN0IF9JUE9QVF9ERUJNRUFTID0gMHg0MAorY29uc3QgX0FUX0ZEQ1dEID0gLTEwMAorY29u
c3QgX0lOVFBUUl9XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfX1NDX1BJSV9PU0lfQ0xUUyA9
IDY0Citjb25zdCBfU1lTX3BpcGUyID0gX19fTlJfcGlwZTIKK2NvbnN0IF9JRkxBX0JPTkRfU0xB
VkVfQURfUEFSVE5FUl9PUEVSX1BPUlRfU1RBVEUgPSA4Citjb25zdCBfX0NTX0dOVV9MSUJQVEhS
RUFEX1ZFUlNJT04gPSAzCitjb25zdCBfVENTQURSQUlOID0gMQorY29uc3QgX0xPTkdfTUFYID0g
X19fTE9OR19NQVhfXworY29uc3QgX1BSSWQxNiA9ICJkIgorY29uc3QgX19TWVNfSU5PVElGWV9I
ID0gMQorY29uc3QgX1NZU19icGYgPSBfX19OUl9icGYKK2NvbnN0IF9SVE5MR1JQX05PUDQgPSAx
NworY29uc3QgX19TQ19YT1BFTl9YQ1VfVkVSU0lPTiA9IDkwCitjb25zdCBfUFJfTVBYX0RJU0FC
TEVfTUFOQUdFTUVOVCA9IDQ0Citjb25zdCBfSU5UX0xFQVNUOF9NSU4gPSAoLTEyOCkKK2NvbnN0
IF9TSUdJTyA9IF9TSUdQT0xMCitjb25zdCBfSVBWNl9SRUNWT1JJR0RTVEFERFIgPSBfSVBWNl9P
UklHRFNUQUREUgorY29uc3QgX19QQ19GSUxFU0laRUJJVFMgPSAxMworY29uc3QgX1RJT0NHUEdS
UCA9IDB4NTQwRgorY29uc3QgX19fRkxUMzJYX01JTl9FWFBfXyA9ICgtMTAyMSkKK2NvbnN0IF9U
SU9DR1dJTlNaX3ZhbCA9IDIxNTIzCitjb25zdCBfX1NDX0xFVkVMMl9DQUNIRV9MSU5FU0laRSA9
IDE5MworY29uc3QgX0VUSF9QX0FUTU1QT0EgPSAweDg4NGMKK2NvbnN0IF9IQVZFX1NUUklOR1Nf
SCA9IDEKK2NvbnN0IF9ETl9DUkVBVEUgPSAweDAwMDAwMDA0Citjb25zdCBfRlNfUE9MSUNZX0ZM
QUdTX1BBRF8xNiA9IDB4MDIKK2NvbnN0IF9TT19PT0JJTkxJTkUgPSAxMAorY29uc3QgX1BBQ0tF
VF9ST0xMT1ZFUl9TVEFUUyA9IDIxCitjb25zdCBfX1BPU0lYX0FTWU5DSFJPTk9VU19JTyA9IDIw
MDgwOQorY29uc3QgX19DU19MRlNfTElCUyA9IDEwMDIKK2NvbnN0IF9QQUNLRVRfTVJfUFJPTUlT
QyA9IDEKK2NvbnN0IF9fX0ZMVDY0X01BWF9fID0gMS4xCitjb25zdCBfX19VU0VfSVNPQzExID0g
MQorY29uc3QgX19TQ19MRVZFTDJfQ0FDSEVfQVNTT0MgPSAxOTIKK2NvbnN0IF9UQ1NCUksgPSAw
eDU0MDkKK2NvbnN0IF9JTlRfTEVBU1QzMl9XSURUSCA9IDMyCitjb25zdCBfQlBGX01JTk9SX1ZF
UlNJT04gPSAxCitjb25zdCBfX19HTlVfTElCUkFSWV9fID0gNgorY29uc3QgX19fU1REQ19JU09f
MTA2NDZfXyA9IDIwMTcwNgorY29uc3QgX0VJU05BTSA9IDEyMAorY29uc3QgX0lQVjZfQVVUT0ZM
T1dMQUJFTCA9IDcwCitjb25zdCBfX1NDX0xFVkVMNF9DQUNIRV9MSU5FU0laRSA9IDE5OQorY29u
c3QgX0lGTEFfTElOS0lORk8gPSAxOAorY29uc3QgX0lQX1BNVFVESVNDX0RPID0gMgorY29uc3Qg
X1BUUkFDRV9PTERTRVRPUFRJT05TID0gMjEKK2NvbnN0IF9JUF9QS1RJTkZPID0gOAorY29uc3Qg
X09fUlNZTkMgPSBfT19TWU5DCitjb25zdCBfU1BMSUNFX0ZfTk9OQkxPQ0sgPSAyCitjb25zdCBf
Q0xPTkVfQ0hJTERfQ0xFQVJUSUQgPSAweDAwMjAwMDAwCitjb25zdCBfSEFWRV9PRkY2NF9UID0g
MQorY29uc3QgX0ZTX0VPRkJMT0NLU19GTCA9IDB4MDA0MDAwMDAKK2NvbnN0IF9fU0NfRklMRV9T
WVNURU0gPSAxNDgKK2NvbnN0IF9DSEFSQ0xBU1NfTkFNRV9NQVggPSAyMDQ4Citjb25zdCBfSU5U
X01BWCA9IF9fX0lOVF9NQVhfXworY29uc3QgX19fTFA2NF9PRkY2NF9DRkxBR1MgPSAiLW02NCIK
K2NvbnN0IF9JTlRfV0lEVEggPSAzMgorY29uc3QgX05EVEFfVU5TUEVDID0gMAorY29uc3QgX1RV
Tl9GX1RTTzQgPSAweDAyCitjb25zdCBfX1BPU0lYX1RIUkVBRFMgPSAyMDA4MDkKK2NvbnN0IF9S
VEVYVF9GSUxURVJfQlJWTEFOID0gKDEgPDwgMSkKK2NvbnN0IF9SVEFYX1JFT1JERVJJTkcgPSA5
Citjb25zdCBfUEZfQVRNU1ZDID0gMjAKK2NvbnN0IF9OU1NfQlVGTEVOX0dST1VQID0gMTAyNAor
Y29uc3QgX1BSX1RTQ19TSUdTRUdWID0gMgorY29uc3QgX19fTlJfc2VtY3RsID0gNjYKK2NvbnN0
IF9TT0xfVElQQyA9IDI3MQorY29uc3QgX01MRF9MSVNURU5FUl9SRVBPUlQgPSAxMzEKK2NvbnN0
IF9VUEFHRVMgPSAxCitjb25zdCBfX1NDX1BJSV9PU0lfTSA9IDY1Citjb25zdCBfRlNfWEZMQUdf
UFJPSklOSEVSSVQgPSAweDAwMDAwMjAwCitjb25zdCBfTVNHX0VSUlFVRVVFID0gODE5MgorY29u
c3QgX0FSUEhSRF9JRUVFODAyMTU0ID0gODA0Citjb25zdCBfVElPQ1BLVCA9IDB4NTQyMAorY29u
c3QgX0VTUkNIID0gMworY29uc3QgX19fU0laRU9GX1BUSFJFQURfUldMT0NLX1QgPSA1NgorY29u
c3QgX19QT1NJWDJfQkNfU1RSSU5HX01BWCA9IDEwMDAKK2NvbnN0IF9JRkxBX0lORVQ2X1VOU1BF
QyA9IDAKK2NvbnN0IF9BVEZfVVNFVFJBSUxFUlMgPSAweDEwCitjb25zdCBfSU5fTU9WRV9TRUxG
ID0gMHgwMDAwMDgwMAorY29uc3QgX19fU0lHX0FUT01JQ19XSURUSF9fID0gMzIKK2NvbnN0IF9f
U0NfU1lTVEVNX0RBVEFCQVNFX1IgPSAxNjMKK2NvbnN0IF9SVEFfRFBPUlQgPSAyOQorY29uc3Qg
X1JUQV9TRVNTSU9OID0gMTMKK2NvbnN0IF9QQUNLQUdFX1ZFUlNJT04gPSAidmVyc2lvbi11bnVz
ZWQiCitjb25zdCBfX19ERUMxMjhfU1VCTk9STUFMX01JTl9fID0gMC4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMKK2NvbnN0IF9CMjAwMDAwMCA9IDAwMTAwMTMKK2NvbnN0
IF9TWVNfY2htb2QgPSBfX19OUl9jaG1vZAorY29uc3QgX1NUQV9QUFNXQU5ERVIgPSAweDA0MDAK
K2NvbnN0IF9fX0lOVF9NQVhfXyA9IDB4N2ZmZmZmZmYKK2NvbnN0IF9fX1VJTlRfTEVBU1Q4X01B
WF9fID0gMHhmZgorY29uc3QgX19fSU5UX0ZBU1QxNl9XSURUSF9fID0gNjQKK2NvbnN0IF9TWVNf
ZXZlbnRmZDIgPSBfX19OUl9ldmVudGZkMgorY29uc3QgX1NJR0JVUyA9IDcKK2NvbnN0IF9GUF9Y
U1RBVEVfTUFHSUMxID0gMHg0NjUwNTg1MworY29uc3QgX0ZQX1hTVEFURV9NQUdJQzIgPSAweDQ2
NTA1ODQ1Citjb25zdCBfVENHRVRTX3ZhbCA9IDIxNTA1Citjb25zdCBfTkxNX0ZfUkVRVUVTVCA9
IDB4MDEKK2NvbnN0IF9NQURWX05PSFVHRVBBR0UgPSAxNQorY29uc3QgX0hBVkVfSU5PVElGWV9J
TklUID0gMQorY29uc3QgX1JUTV9ORVdRRElTQyA9IDM2Citjb25zdCBfUFJfU0VUX0tFRVBDQVBT
ID0gOAorY29uc3QgX1BSX0VORElBTl9CSUcgPSAwCitjb25zdCBfSVBQT1JUX0xPR0lOU0VSVkVS
ID0gNTEzCitjb25zdCBfU1lTX2Nsb2NrX2dldHRpbWUgPSBfX19OUl9jbG9ja19nZXR0aW1lCitj
b25zdCBfTVNHX1RSWUhBUkQgPSA0Citjb25zdCBfUFJfU0VUX01NX0FVWFYgPSAxMgorY29uc3Qg
X19QT1NJWF9TWU5DSFJPTklaRURfSU8gPSAyMDA4MDkKK2NvbnN0IF9TWVNfY2xvc2UgPSBfX19O
Ul9jbG9zZQorY29uc3QgX1BSX1NFVF9VTkFMSUdOID0gNgorY29uc3QgX1NZU19icmsgPSBfX19O
Ul9icmsKK2NvbnN0IF9fTlNJRyA9IChfX19TSUdSVE1BWCArIDEpCitjb25zdCBfX1BPU0lYX0ZE
X1NFVFNJWkUgPSBfX1BPU0lYX09QRU5fTUFYCitjb25zdCBfRU5PVFRZID0gMjUKK2NvbnN0IF9S
VEFfUFJJT1JJVFkgPSA2Citjb25zdCBfRVRIX1BfTEFUID0gMHg2MDA0Citjb25zdCBfRkZJX05B
VElWRV9SQVdfQVBJID0gMAorY29uc3QgX1BSX0dFVF9OT19ORVdfUFJJVlMgPSAzOQorY29uc3Qg
X0ZQRV9GTFRSRVMgPSA2Citjb25zdCBfRlNfUkVTRVJWRURfRkwgPSAweDgwMDAwMDAwCitjb25z
dCBfRlNfWEZMQUdfQ09XRVhUU0laRSA9IDB4MDAwMTAwMDAKK2NvbnN0IF9FUE9MTE9VVCA9IDQK
K2NvbnN0IF9TQ01fVFhUSU1FID0gX1NPX1RYVElNRQorY29uc3QgX0FESl9USU1FQ09OU1QgPSAw
eDAwMjAKK2NvbnN0IF9WS0lMTCA9IDMKK2NvbnN0IF9SVE1HUlBfREVDbmV0X1JPVVRFID0gMHg0
MDAwCitjb25zdCBfQUZfUUlQQ1JUUiA9IF9QRl9RSVBDUlRSCitjb25zdCBfU09fQUNDRVBUQ09O
TiA9IDMwCitjb25zdCBfSUZMQV9WRl9TVEFUU19UWF9EUk9QUEVEID0gOAorY29uc3QgX1JUTkxf
RkFNSUxZX01BWCA9IDEyOQorY29uc3QgX19QT1NJWF9USU1FUl9NQVggPSAzMgorY29uc3QgX19f
TlJfbWtub2QgPSAxMzMKK2NvbnN0IF9SRUdfRUZMID0gMTcKK2NvbnN0IF9fX1NTRTJfXyA9IDEK
K2NvbnN0IF9JUF9NVUxUSUNBU1RfVFRMID0gMzMKK2NvbnN0IF9TT0NLX1NFUVBBQ0tFVCA9IDUK
K2NvbnN0IF9fX1dBTEwgPSAweDQwMDAwMDAwCitjb25zdCBfUlRNX0RFTE1EQiA9IDg1Citjb25z
dCBfSUxMX0lMTE9QQyA9IDEKK2NvbnN0IF9OTE1TR19FUlJPUiA9IDB4MgorY29uc3QgX1BSX0dF
VF9USURfQUREUkVTUyA9IDQwCitjb25zdCBfU1lTX3Ztc3BsaWNlID0gX19fTlJfdm1zcGxpY2UK
K2NvbnN0IF9UQ1BfU1lOQ05UID0gNworY29uc3QgX1JUX1NDT1BFX1NJVEUgPSAyMDAKK2NvbnN0
IF9TWVNfZXhlY3ZlYXQgPSBfX19OUl9leGVjdmVhdAorY29uc3QgX0lGQV9GX1RFTVBPUkFSWSA9
IF9JRkFfRl9TRUNPTkRBUlkKK2NvbnN0IF9DUkRMWSA9IDAwMDMwMDAKK2NvbnN0IF9FVEhfUF9Q
UkVBVVRIID0gMHg4OEM3Citjb25zdCBfX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgPSAxNDgK
K2NvbnN0IF9SRUdfUjEyID0gNAorY29uc3QgX0lQVjZfMjI5MlBLVElORk8gPSAyCitjb25zdCBf
X19JT1ZfTUFYID0gMTAyNAorY29uc3QgX0FJX0FMTCA9IDB4MDAxMAorY29uc3QgX0VUSF9QX0ZD
T0UgPSAweDg5MDYKK2NvbnN0IF9JRkxBX0NBUlJJRVIgPSAzMworY29uc3QgX1JUQV9ORVdEU1Qg
PSAxOQorY29uc3QgX19fTlJfYWRqdGltZXggPSAxNTkKK2NvbnN0IF9CWVRFX09SREVSID0gX19f
QllURV9PUkRFUgorY29uc3QgX19fRkxUX0RFTk9STV9NSU5fXyA9IDEuMQorY29uc3QgX0VDSE9Q
UlQgPSAwMDAyMDAwCitjb25zdCBfSUZMQV9STU5FVF9VTlNQRUMgPSAwCitjb25zdCBfX0NTX1BP
U0lYX1Y3X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMzIKK2NvbnN0IF9GX1NITENLID0gOAorY29u
c3QgX0VUSU1FRE9VVCA9IDExMAorY29uc3QgX19TQ19GSUxFX0xPQ0tJTkcgPSAxNDcKK2NvbnN0
IF9NU0dfUEVFSyA9IDIKK2NvbnN0IF9TWVNfbXN5bmMgPSBfX19OUl9tc3luYworY29uc3QgX0VU
SF9QXzE1ODggPSAweDg4RjcKK2NvbnN0IF9fU0NfUEFTU19NQVggPSA4OAorY29uc3QgX0lGTEFf
SFNSX1VOU1BFQyA9IDAKK2NvbnN0IF9CQ19TVFJJTkdfTUFYID0gX19QT1NJWDJfQkNfU1RSSU5H
X01BWAorY29uc3QgX0ZMVVNITyA9IDAwMTAwMDAKK2NvbnN0IF9TWVNfbHN0YXQgPSBfX19OUl9s
c3RhdAorY29uc3QgX1RJT0NNX1JUUyA9IDB4MDA0Citjb25zdCBfQVJQSFJEX0lSREEgPSA3ODMK
K2NvbnN0IF9UQ1NCUktQID0gMHg1NDI1Citjb25zdCBfRVBJUEUgPSAzMgorY29uc3QgX19fRkxU
MzJYX0hBU19ERU5PUk1fXyA9IDEKK2NvbnN0IF9fQklUU19VSU9fRVhUX0ggPSAxCitjb25zdCBf
SUNNUDZfUlJfRkxBR1NfVEVTVCA9IDB4ODAKK2NvbnN0IF9TWVNfYWxhcm0gPSBfX19OUl9hbGFy
bQorY29uc3QgX0lGRl9UVU4gPSAweDAwMDEKK2NvbnN0IF9fX0VOVU1fSURUWVBFX1QgPSAxCitj
b25zdCBfUFJfRlBfTU9ERV9GUkUgPSAoMSA8PCAxKQorY29uc3QgX01BQ1NFQ19WQUxJREFURV9E
SVNBQkxFRCA9IDAKK2NvbnN0IF9JRkxBX0dFTkVWRV9UVEwgPSAzCitjb25zdCBfSEFWRV9JTk9U
SUZZX0FERF9XQVRDSCA9IDEKK2NvbnN0IF9QUklYMTYgPSAiWCIKK2NvbnN0IF9fX0ZMVF9FVkFM
X01FVEhPRF9UU18xODY2MV8zX18gPSAwCitjb25zdCBfTkRfTkFfRkxBR19ST1VURVIgPSAweDAw
MDAwMDgwCitjb25zdCBfSVBWNl9SRUNWUEFUSE1UVSA9IDYwCitjb25zdCBfTUFEVl9OT1JNQUwg
PSAwCitjb25zdCBfRkZJX1JFR0lTVEVSID0gNworY29uc3QgX1BSSWQzMiA9ICJkIgorY29uc3Qg
X05MQV9GX05FVF9CWVRFT1JERVIgPSAoMSA8PCAxNCkKK2NvbnN0IF9IQVZFX0VYUEwgPSAxCitj
b25zdCBfSVBfUkVUT1BUUyA9IDcKK2NvbnN0IF9JUF9NVUxUSUNBU1RfSUYgPSAzMgorY29uc3Qg
X0VYUFJfTkVTVF9NQVggPSBfX1BPU0lYMl9FWFBSX05FU1RfTUFYCitjb25zdCBfTl9QUFAgPSAz
Citjb25zdCBfX19HTElCQ19MSU5VWF9WRVJTSU9OX0NPREUgPSAyNjcwMDgKK2NvbnN0IF9GU19N
QVhfS0VZX1NJWkUgPSA2NAorY29uc3QgX1BGX0lORVQ2ID0gMTAKK2NvbnN0IF9TWVNfY2hkaXIg
PSBfX19OUl9jaGRpcgorY29uc3QgX1BUUkFDRV9FVkVOVF9WRk9SSyA9IDIKK2NvbnN0IF9TT19S
Q1ZUSU1FTyA9IDIwCitjb25zdCBfX19OUl90aW1lcyA9IDEwMAorY29uc3QgX19QT1NJWF9VSU9f
TUFYSU9WID0gMTYKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1FVRVJJRVJfSU5UVkwgPSAzMgorY29u
c3QgX0lQX1RPUyA9IDEKK2NvbnN0IF9fU0NfMl9QQlNfTE9DQVRFID0gMTcwCitjb25zdCBfTkxN
U0dfTk9PUCA9IDB4MQorY29uc3QgX0ZTX1BPTElDWV9GTEFHU19QQURfMzIgPSAweDAzCitjb25z
dCBfQVJQRF9VUERBVEUgPSAweDAxCitjb25zdCBfX0NTX0xGU19MSU5URkxBR1MgPSAxMDAzCitj
b25zdCBfX0lPQ19ESVJNQVNLID0gKCgxIDw8IF9fSU9DX0RJUkJJVFMpLTEpCitjb25zdCBfU1lT
X2NhcHNldCA9IF9fX05SX2NhcHNldAorY29uc3QgX0lDTVA2X1JPVVRFUl9SRU5VTUJFUklORyA9
IDEzOAorY29uc3QgX0lMTF9JTExBRFIgPSAzCitjb25zdCBfX0JJVFNfUE9TSVhfT1BUX0ggPSAx
Citjb25zdCBfUFJfR0VUX0ZQRVhDID0gMTEKK2NvbnN0IF9QUl9DQVBCU0VUX1JFQUQgPSAyMwor
Y29uc3QgX1RDUF9NRDVTSUcgPSAxNAorY29uc3QgX0hBVkVfR0VUWEFUVFIgPSAxCitjb25zdCBf
UlRNX0RFTFJVTEUgPSAzMworY29uc3QgX1JUTV9ORVdTVEFUUyA9IDkyCitjb25zdCBfVENTQUZM
VVNIID0gMgorY29uc3QgX0lGTEFfUE9SVF9WRiA9IDEKK2NvbnN0IF9fQklUU19TQ0hFRF9IID0g
MQorY29uc3QgX0lQVjZfUlRIRFJEU1RPUFRTID0gNTUKK2NvbnN0IF9fX05SX21hZHZpc2UgPSAy
OAorY29uc3QgX1BSX1NQRUNfSU5ESVJFQ1RfQlJBTkNIID0gMQorY29uc3QgX1g4Nl9DUjRfVFNE
X0JJVCA9IDIKK2NvbnN0IF9JRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTID0gMzcKK2NvbnN0IF9Q
VFJBQ0VfVFJBQ0VNRSA9IDAKK2NvbnN0IF9YODZfQ1IwX1BFX0JJVCA9IDAKK2NvbnN0IF9GRklf
Q0xPU1VSRVMgPSAxCitjb25zdCBfSUZBX0ZfTUFOQUdFVEVNUEFERFIgPSAweDEwMAorY29uc3Qg
X1NJT0NBRERSVCA9IDB4ODkwQgorY29uc3QgX1RDR0VUQSA9IDB4NTQwNQorY29uc3QgX0lGTEFf
TVRVID0gNAorY29uc3QgX0lGTEFfQlJfUk9PVF9QT1JUID0gMTIKK2NvbnN0IF9fQ1NfUE9TSVhf
VjdfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUyA9IDExMzkKK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFE
X0NPTkRfVCA9IDQ4Citjb25zdCBfX19TX0lGSUZPID0gMDAxMDAwMAorY29uc3QgX19fUFJJNjRf
UFJFRklYID0gImwiCitjb25zdCBfX0NTX1BPU0lYX1Y3X0lMUDMyX09GRjMyX0xJTlRGTEFHUyA9
IDExMzUKK2NvbnN0IF9JRkxBX1BST01JU0NVSVRZID0gMzAKK2NvbnN0IF9QUl9TRVRfQ0hJTERf
U1VCUkVBUEVSID0gMzYKK2NvbnN0IF9TSUdQSVBFID0gMTMKK2NvbnN0IF9UQ0dFVFMgPSAweDU0
MDEKK2NvbnN0IF9TT0xfQ0FJRiA9IDI3OAorY29uc3QgX0lGTEFfQlJfTUNBU1RfTUVNQkVSU0hJ
UF9JTlRWTCA9IDMxCitjb25zdCBfUlRGX1JFSU5TVEFURSA9IDB4MDAwOAorY29uc3QgX1RDR0VU
WCA9IDB4NTQzMgorY29uc3QgX0lGTEFfUEFEID0gNDIKK2NvbnN0IF9FVEhfUF9ETkFfUkMgPSAw
eDYwMDIKK2NvbnN0IF9SVE1fRl9GSUJfTUFUQ0ggPSAweDIwMDAKK2NvbnN0IF9JRkxBX0JSUE9S
VF9WTEFOX1RVTk5FTCA9IDI5Citjb25zdCBfUFJPVF9SRUFEID0gMHgxCitjb25zdCBfUFJfU1BF
Q19ESVNBQkxFID0gKDEgPDwgMikKK2NvbnN0IF9QVFJBQ0VfU0VJWkUgPSAxNjkwMgorY29uc3Qg
X1JURl9DQUNIRSA9IDB4MDEwMDAwMDAKK2NvbnN0IF9fX0RFQzEyOF9NSU5fXyA9IDFFLTYxNDMK
K2NvbnN0IF9JQ01QNl9FQ0hPX1JFUVVFU1QgPSAxMjgKK2NvbnN0IF9GU19FTkNSWVBUSU9OX01P
REVfQUVTXzI1Nl9HQ00gPSAyCitjb25zdCBfX1NZU19UWVBFU19IID0gMQorY29uc3QgX0VUSF9Q
X0ROQV9SVCA9IDB4NjAwMworY29uc3QgX19TQ19NRU1MT0NLID0gMTcKK2NvbnN0IF9TWVNfZmlu
aXRfbW9kdWxlID0gX19fTlJfZmluaXRfbW9kdWxlCitjb25zdCBfQlBGX0EgPSAweDEwCitjb25z
dCBfQlBGX0IgPSAweDEwCitjb25zdCBfUEZfSU5FVCA9IDIKK2NvbnN0IF9TWVNfcnRfc2lncHJv
Y21hc2sgPSBfX19OUl9ydF9zaWdwcm9jbWFzaworY29uc3QgX1NJR19BVE9NSUNfTUlOID0gKC0y
MTQ3NDgzNjQ3LTEpCitjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMiA9
IDEKK2NvbnN0IF9fX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF80ID0gMQorY29uc3Qg
X1NJT0NHSUZGTEFHUyA9IDB4ODkxMworY29uc3QgX1JFR19SOCA9IDAKK2NvbnN0IF9fX0dDQ19I
QVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF84ID0gMQorY29uc3QgX0ZTX0FQUEVORF9GTCA9IDB4
MDAwMDAwMjAKK2NvbnN0IF9SVEFYX0NXTkQgPSA3Citjb25zdCBfX1BPU0lYMl9DX0JJTkQgPSBf
X19QT1NJWDJfVEhJU19WRVJTSU9OCitjb25zdCBfX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgPSAx
Citjb25zdCBfQlBGX1cgPSAweDAwCitjb25zdCBfQlBGX1ggPSAweDA4Citjb25zdCBfUldIX1dS
SVRFX0xJRkVfTE9ORyA9IDQKK2NvbnN0IF9fX0dDQ19IQVZFX0RXQVJGMl9DRklfQVNNID0gMQor
Y29uc3QgX1RDUE9MRU5fVElNRVNUQU1QID0gMTAKK2NvbnN0IF9FVEhfUF9DQUlGID0gMHgwMEY3
Citjb25zdCBfTkRBX1BPUlQgPSA2Citjb25zdCBfRVBPTExSREhVUCA9IDgxOTIKK2NvbnN0IF9f
X0ZMVDEyOF9NQVhfXyA9IDEuMQorY29uc3QgX1RJT0NTUlM0ODUgPSAweDU0MkYKK2NvbnN0IF9f
X0lGTEFfSU5FVF9NQVggPSAyCitjb25zdCBfUlRBWF9JTklUUldORCA9IDE0Citjb25zdCBfX0JJ
VFNfVFlQRVNfTE9DQUxFX1RfSCA9IDEKK2NvbnN0IF9fX0xEQkxfREVDSU1BTF9ESUdfXyA9IDIx
Citjb25zdCBfSEFWRV9BVEFOTCA9IDEKK2NvbnN0IF9YRFBfQVRUQUNIRURfRFJWID0gMQorY29u
c3QgX19fQVRPTUlDX0NPTlNVTUUgPSAxCitjb25zdCBfX19OUl9tc2dnZXQgPSA2OAorY29uc3Qg
X19fTlJfZ2V0c29ja29wdCA9IDU1Citjb25zdCBfUFRSRElGRl9NSU4gPSAoLTkyMjMzNzIwMzY4
NTQ3NzU4MDctMSkKK2NvbnN0IF9XSU5UX1dJRFRIID0gMzIKK2NvbnN0IF9ORVRMSU5LX0VYVF9B
Q0sgPSAxMQorY29uc3QgX1NDTnU4ID0gImhodSIKK2NvbnN0IF9fU0NfVEhSRUFEX1JPQlVTVF9Q
UklPX0lOSEVSSVQgPSAyNDcKK2NvbnN0IF9JUF9SRUNWVE9TID0gMTMKK2NvbnN0IF9ORFRQQV9J
RklOREVYID0gMQorY29uc3QgX0VUSF9UTEVOID0gMgorY29uc3QgX0FJX0NBTk9OTkFNRSA9IDB4
MDAwMgorY29uc3QgX19fTlJfbWxvY2thbGwgPSAxNTEKK2NvbnN0IF9TS0ZfQURfSEFUWVBFID0g
MjgKK2NvbnN0IF9fX05SX3BpcGUyID0gMjkzCitjb25zdCBfUFRSQUNFX0RFVEFDSCA9IDE3Citj
b25zdCBfU1lTX3NpZ25hbGZkID0gX19fTlJfc2lnbmFsZmQKK2NvbnN0IF9fQ1NfWEJTNV9MUEJJ
R19PRkZCSUdfTERGTEFHUyA9IDExMTMKK2NvbnN0IF9JUFY2X05FWFRIT1AgPSA5Citjb25zdCBf
UlRDRl9ET1JFRElSRUNUID0gMHgwMTAwMDAwMAorY29uc3QgX05EQV9JRklOREVYID0gOAorY29u
c3QgX19TQ19QSUkgPSA1MworY29uc3QgX0FGX0FUTVNWQyA9IF9QRl9BVE1TVkMKK2NvbnN0IF9Q
Rl9QQUNLRVQgPSAxNworY29uc3QgX1NZU19mdXRpbWVzYXQgPSBfX19OUl9mdXRpbWVzYXQKK2Nv
bnN0IF9JUFRPU19QUkVDX0ZMQVNIID0gX0lQVE9TX0NMQVNTX0NTMworY29uc3QgX0FSUEhSRF9J
UEdSRSA9IDc3OAorY29uc3QgX19TQ19TSEVMTCA9IDE1NworY29uc3QgX0hBVkVfTE9HTCA9IDEK
K2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05TRV9JTlZBTElEX0ZPUk1BVCA9IDEKK2NvbnN0IF9fX1VT
RV9QT1NJWDIgPSAxCitjb25zdCBfRU5PTUVNID0gMTIKK2NvbnN0IF9YRFBfQVRUQUNIRURfU0tC
ID0gMgorY29uc3QgX0lOX0NMQVNTQV9ORVQgPSAweGZmMDAwMDAwCitjb25zdCBfRVNSTU5UID0g
NjkKK2NvbnN0IF9JUFY2X0xFQVZFX0FOWUNBU1QgPSAyOAorY29uc3QgX0VOT1RFTVBUWSA9IDM5
Citjb25zdCBfUFRSQUNFX0dFVFNJR0lORk8gPSAxNjg5OAorY29uc3QgX19JT0NfTlJCSVRTID0g
OAorY29uc3QgX1BJUEVfQlVGID0gNDA5NgorY29uc3QgX0FGX0lTRE4gPSBfUEZfSVNETgorY29u
c3QgX1VMT05HX0xPTkdfTUFYID0gKF9MT05HX0xPTkdfTUFYICogMiArIDEpCitjb25zdCBfTElO
S19YU1RBVFNfVFlQRV9VTlNQRUMgPSAwCitjb25zdCBfTkRUQV9OQU1FID0gMQorY29uc3QgX1JU
QV9QUkVGID0gMjAKK2NvbnN0IF9BUlBIUkRfTk9ORSA9IDB4RkZGRQorY29uc3QgX1NZU19nZXRz
b2NrbmFtZSA9IF9fX05SX2dldHNvY2tuYW1lCitjb25zdCBfRUNIT0NUTCA9IDAwMDEwMDAKK2Nv
bnN0IF9SVE5MR1JQX0lQVjRfUlVMRSA9IDgKK2NvbnN0IF9JRkxBX0JPTkRfQURfSU5GTyA9IDIz
Citjb25zdCBfSUZMQV9CUl9VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9JRl9ORVROU0lEID0gNDYK
K2NvbnN0IF9PX1BBVEggPSBfX19PX1BBVEgKK2NvbnN0IF9YODZfQ1IzX1BDSURfTk9GTFVTSF9C
SVQgPSA2MworY29uc3QgX1NZU19zY2hlZF9nZXRwYXJhbSA9IF9fX05SX3NjaGVkX2dldHBhcmFt
Citjb25zdCBfUFJfU0VUX05PX05FV19QUklWUyA9IDM4Citjb25zdCBfSUZMQV9CT05EX0FEX0lO
Rk9fVU5TUEVDID0gMAorY29uc3QgX1JURl9GTE9XID0gMHgwMjAwMDAwMAorY29uc3QgX1NZU19z
ZXRfbWVtcG9saWN5ID0gX19fTlJfc2V0X21lbXBvbGljeQorY29uc3QgX1dDT05USU5VRUQgPSA4
Citjb25zdCBfX19JRkxBX0JPTkRfTUFYID0gMjgKK2NvbnN0IF9JRkZfTk9GSUxURVIgPSAweDEw
MDAKK2NvbnN0IF9fX3RpbWVfdF9kZWZpbmVkID0gMQorY29uc3QgX0lGTEFfTkVXX05FVE5TSUQg
PSA0NQorY29uc3QgX0I2MDAgPSAwMDAwMDEwCitjb25zdCBfQVJQSFJEX0JJRiA9IDc3NQorY29u
c3QgX09fRFNZTkMgPSBfX19PX0RTWU5DCitjb25zdCBfX19OUl9tc2dyY3YgPSA3MAorY29uc3Qg
X1JUUFJPVF9SQSA9IDkKK2NvbnN0IF9JRkxBX1ZSRl9VTlNQRUMgPSAwCitjb25zdCBfUFJfU1BF
Q19OT1RfQUZGRUNURUQgPSAwCitjb25zdCBfTkxNX0ZfRFVNUF9GSUxURVJFRCA9IDB4MjAKK2Nv
bnN0IF9JRkxBX1ZMQU5fUU9TX1VOU1BFQyA9IDAKK2NvbnN0IF9fU0NfREVWSUNFX0lPID0gMTQw
Citjb25zdCBfSUZMQV9JUE9JQl9VTUNBU1QgPSAzCitjb25zdCBfU0NIRURfUlIgPSAyCitjb25z
dCBfUFJJbzggPSAibyIKK2NvbnN0IF9fTEZTX0FTWU5DSFJPTk9VU19JTyA9IDEKK2NvbnN0IF9J
RkxBX1BPUlRfUkVRVUVTVCA9IDYKK2NvbnN0IF9JRkxBX0JPTkRfQURfSU5GT19BR0dSRUdBVE9S
ID0gMQorY29uc3QgX1BBQ0tFVF9MT09QQkFDSyA9IDUKK2NvbnN0IF9TWVNfZmRhdGFzeW5jID0g
X19fTlJfZmRhdGFzeW5jCitjb25zdCBfU0lPQ0dJRk1BUCA9IDB4ODk3MAorY29uc3QgX19fR0ND
X0FTTV9GTEFHX09VVFBVVFNfXyA9IDEKK2NvbnN0IF9fX0lGTEFfQk9ORF9TTEFWRV9NQVggPSA5
Citjb25zdCBfU0lPQ1NBUlAgPSAweDg5NTUKK2NvbnN0IF9TWVNfcHJsaW1pdDY0ID0gX19fTlJf
cHJsaW1pdDY0Citjb25zdCBfX19ERUMzMl9NSU5fXyA9IDFFLTk1Citjb25zdCBfTkxNX0ZfUkVQ
TEFDRSA9IDB4MTAwCitjb25zdCBfVElPQ09VVFEgPSAweDU0MTEKK2NvbnN0IF9JRkFfQ0FDSEVJ
TkZPID0gNgorY29uc3QgX1NZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRSA9IDEKK2NvbnN0IF9T
VEFUWF9CTE9DS1MgPSAweDA0MDAKK2NvbnN0IF9QUl9GUF9FWENfVU5EID0gMHgwNDAwMDAKK2Nv
bnN0IF9JRkxBX1ZYTEFOX0dQRSA9IDI3Citjb25zdCBfUEFDS0FHRV9CVUdSRVBPUlQgPSAiIgor
Y29uc3QgX0lQVjZfMjI5MkRTVE9QVFMgPSA0Citjb25zdCBfSUZMQV9FWFRfTUFTSyA9IDI5Citj
b25zdCBfX19BVE9NSUNfSExFX0FDUVVJUkUgPSA2NTUzNgorY29uc3QgX1NZU190aW1lcmZkX3Nl
dHRpbWUgPSBfX19OUl90aW1lcmZkX3NldHRpbWUKK2NvbnN0IF9fX2xpbnV4X18gPSAxCitjb25z
dCBfUE9TSVhfRkFEVl9SQU5ET00gPSAxCitjb25zdCBfUFJJaUxFQVNUMTYgPSAiaSIKK2NvbnN0
IF9JRkxBX0dFTkVWRV9DT0xMRUNUX01FVEFEQVRBID0gNgorY29uc3QgX19fVVNFX0lTT0M5NSA9
IDEKK2NvbnN0IF9fSEFWRV9TVFJVQ1RfVEVSTUlPU19DX09TUEVFRCA9IDEKK2NvbnN0IF9PX05P
Rk9MTE9XID0gX19fT19OT0ZPTExPVworY29uc3QgX05EQV9MSU5LX05FVE5TSUQgPSAxMAorY29u
c3QgX19fVVNFX0lTT0M5OSA9IDEKK2NvbnN0IF9SVEZfTVNTID0gX1JURl9NVFUKK2NvbnN0IF9f
QklUU19TVERJTlRfVUlOVE5fSCA9IDEKK2NvbnN0IF9GX09GRF9TRVRMS1cgPSAzOAorY29uc3Qg
X1JUQV9FTkNBUCA9IDIyCitjb25zdCBfRUVYSVNUID0gMTcKK2NvbnN0IF9QQUNLRVRfVkVSU0lP
TiA9IDEwCitjb25zdCBfVENQX0NMT1NFID0gNworY29uc3QgX1NPX0FUVEFDSF9CUEYgPSA1MAor
Y29uc3QgX1BUUkFDRV9FVkVOVF9TRUNDT01QID0gNworY29uc3QgX0FSUEhSRF9DSEFPUyA9IDUK
K2NvbnN0IF9fX0ZMVDMyX01BTlRfRElHX18gPSAyNAorY29uc3QgX19fSUZMQV9WRl9JTkZPX01B
WCA9IDIKK2NvbnN0IF9FVEhfUF9CQVRNQU4gPSAweDQzMDUKK2NvbnN0IF9fU1RBVF9WRVIgPSBf
X1NUQVRfVkVSX0xJTlVYCitjb25zdCBfUE9MTF9NU0cgPSAzCitjb25zdCBfU1lTX3N3YXBvbiA9
IF9fX05SX3N3YXBvbgorY29uc3QgX1JURl9BRERSQ09ORiA9IDB4MDAwNDAwMDAKK2NvbnN0IF9f
X0xEQkxfSEFTX1FVSUVUX05BTl9fID0gMQorY29uc3QgX1BGX01QTFMgPSAyOAorY29uc3QgX19C
SVRTX1NJR0lORk9fQVJDSF9IID0gMQorY29uc3QgX0lDTVA2X0ZJTFRFUl9QQVNTT05MWSA9IDQK
K2NvbnN0IF9JUF9UVEwgPSAyCitjb25zdCBfU1lTX3J0X3NpZ3F1ZXVlaW5mbyA9IF9fX05SX3J0
X3NpZ3F1ZXVlaW5mbworY29uc3QgX19TQ19YT1BFTl9FTkhfSTE4TiA9IDkzCitjb25zdCBfX19O
Ul90aW1lcl9zZXR0aW1lID0gMjIzCitjb25zdCBfUFRSQUNFX09fU1VTUEVORF9TRUNDT01QID0g
MjA5NzE1MgorY29uc3QgX1NZU19nZXRwbXNnID0gX19fTlJfZ2V0cG1zZworY29uc3QgX19TWVNf
UkVTT1VSQ0VfSCA9IDEKK2NvbnN0IF9ERUZGSUxFTU9ERSA9IChfU19JUlVTUnxfU19JV1VTUnxf
U19JUkdSUHxfU19JV0dSUHxfU19JUk9USHxfU19JV09USCkKK2NvbnN0IF9SVEFfRFNUID0gMQor
Y29uc3QgX19fU1REQ19JRUNfNTU5X18gPSAxCitjb25zdCBfU1lTX2FyY2hfcHJjdGwgPSBfX19O
Ul9hcmNoX3ByY3RsCitjb25zdCBfQUZfTkVUUk9NID0gX1BGX05FVFJPTQorY29uc3QgX0lQVE9T
X1RIUk9VR0hQVVQgPSAweDA4Citjb25zdCBfTkRUQV9USFJFU0gyID0gMworY29uc3QgX0NMT0NL
X0JPT1RUSU1FX0FMQVJNID0gOQorY29uc3QgX0lGTEFfTUFDVkxBTl9NT0RFID0gMQorY29uc3Qg
X1NfSVdSSVRFID0gX1NfSVdVU1IKK2NvbnN0IF9JQ01QNl9QQVJBTVBST0JfT1BUSU9OID0gMgor
Y29uc3QgX19DU19QT1NJWF9WNl9MUDY0X09GRjY0X0NGTEFHUyA9IDExMjQKK2NvbnN0IF9FVEhf
UF9UUl84MDJfMiA9IDB4MDAxMQorY29uc3QgX1RJT0NNX0RUUiA9IDB4MDAyCitjb25zdCBfX1ND
X1VTRVJfR1JPVVBTX1IgPSAxNjcKK2NvbnN0IF9FVEhfUF9BTEwgPSAweDAwMDMKK2NvbnN0IF9T
WVNfZmNob3duID0gX19fTlJfZmNob3duCitjb25zdCBfSVBQT1JUX1NZU1RBVCA9IDExCitjb25z
dCBfX19MT05HX01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfU0lHU1RLRkxUID0g
MTYKK2NvbnN0IF9SVEZfTU9ESUZJRUQgPSAweDAwMjAKK2NvbnN0IF9QUklPX1BST0NFU1MgPSAw
Citjb25zdCBfX19OUl9zZW1nZXQgPSA2NAorY29uc3QgX0lGQV9GX1NUQUJMRV9QUklWQUNZID0g
MHg4MDAKK2NvbnN0IF9SVE5IX0NPTVBBUkVfTUFTSyA9IChfUlROSF9GX0RFQUQgfCBfUlROSF9G
X0xJTktET1dOIHwgX1JUTkhfRl9PRkZMT0FEKQorY29uc3QgX05MTV9GX0FDS19UTFZTID0gMHgy
MDAKK2NvbnN0IF9MX0lOQ1IgPSAxCitjb25zdCBfUldIX1dSSVRFX0xJRkVfU0hPUlQgPSAyCitj
b25zdCBfRUFGTk9TVVBQT1JUID0gOTcKK2NvbnN0IF9JRkxBX0JPTkRfQURfTEFDUF9SQVRFID0g
MjEKK2NvbnN0IF9TWVNfc2VsZWN0ID0gX19fTlJfc2VsZWN0Citjb25zdCBfSUZMQV9UVU5fTlVN
X1FVRVVFUyA9IDgKK2NvbnN0IF9fX1NJX01BWF9TSVpFID0gMTI4Citjb25zdCBfSUZMQV9DT1NU
ID0gOAorY29uc3QgX05MTVNHX0RPTkUgPSAweDMKK2NvbnN0IF9fX05SX3N0YXRmcyA9IDEzNwor
Y29uc3QgX19fRl9HRVRPV05fRVggPSAxNgorY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkZC
SUdfTElCUyA9IDExMjIKK2NvbnN0IF9fX05SX2dldGRlbnRzNjQgPSAyMTcKK2NvbnN0IF9IQVZF
X0lOT1RJRllfSU5JVDEgPSAxCitjb25zdCBfQUlfVjRNQVBQRUQgPSAweDAwMDgKK2NvbnN0IF9T
Q051RkFTVDggPSAiaGh1IgorY29uc3QgX19fTlJfZXBvbGxfY3RsID0gMjMzCitjb25zdCBfQUND
RVNTUEVSTVMgPSAoX1NfSVJXWFV8X1NfSVJXWEd8X1NfSVJXWE8pCitjb25zdCBfVENBX0RVTVBf
SU5WSVNJQkxFID0gMTAKK2NvbnN0IF9TSUdFVl9USFJFQURfSUQgPSA0Citjb25zdCBfRkZJX1RZ
UEVfSU5UID0gMQorY29uc3QgX05MX0FSR01BWCA9IF9fUE9TSVhfQVJHX01BWAorY29uc3QgX1NT
X0RJU0FCTEUgPSAyCitjb25zdCBfRVRIX1BfQ0FOID0gMHgwMDBDCitjb25zdCBfX19TSVpFT0Zf
UFRIUkVBRF9CQVJSSUVSQVRUUl9UID0gNAorY29uc3QgX19fRkxUX0VWQUxfTUVUSE9EX18gPSAw
Citjb25zdCBfX19OUl9zZW1vcCA9IDY1Citjb25zdCBfUF9BTEwgPSAwCitjb25zdCBfRVRIX1Bf
TVBMU19NQyA9IDB4ODg0OAorY29uc3QgX19fTlJfcHdyaXRldjIgPSAzMjgKK2NvbnN0IF9TWVNf
YWNjZXB0NCA9IF9fX05SX2FjY2VwdDQKK2NvbnN0IF9fX1NJWkVPRl9QVFJESUZGX1RfXyA9IDgK
K2NvbnN0IF9fX0ZMVDMyWF9ERU5PUk1fTUlOX18gPSAxLjEKK2NvbnN0IF9JRkxBX0JPTkRfU0xB
VkVfUVVFVUVfSUQgPSA1Citjb25zdCBfUlRQUk9UX1hPUlAgPSAxNAorY29uc3QgX1NZU19wcm9j
ZXNzX3ZtX3dyaXRldiA9IF9fX05SX3Byb2Nlc3Nfdm1fd3JpdGV2Citjb25zdCBfX19UQ0FfUk9P
VF9NQVggPSA1Citjb25zdCBfSUZMQV9PUEVSU1RBVEUgPSAxNgorY29uc3QgX0lDTVA2X1JSX1BD
T1VTRV9GTEFHU19ERUNSUExUSU1FID0gMHg0MAorY29uc3QgX05EVFBBX1BST1hZX0RFTEFZID0g
MTMKK2NvbnN0IF9fX1JMSU1JVF9OUFJPQyA9IDYKK2NvbnN0IF9TWVNfcXVvdGFjdGwgPSBfX19O
Ul9xdW90YWN0bAorY29uc3QgX19JT0NfTk9ORSA9IDAKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVf
TUlJX1NUQVRVUyA9IDIKK2NvbnN0IF9TT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVCA9
IDIzCitjb25zdCBfU1RBVFhfTU9ERSA9IDB4MDAwMgorY29uc3QgX0ZGSV9UWVBFX1VJTlQ4ID0g
NQorY29uc3QgX1BST1RfR1JPV1NET1dOID0gMHgwMTAwMDAwMAorY29uc3QgX01BUF9HUk9XU0RP
V04gPSAweDAwMTAwCitjb25zdCBfRUJBRE1TRyA9IDc0Citjb25zdCBfTUFQX1BPUFVMQVRFID0g
MHgwODAwMAorY29uc3QgX1RJTUVfREVMID0gMgorY29uc3QgX19fRl9TRVRPV04gPSA4Citjb25z
dCBfVUlOVDE2X01BWCA9ICg2NTUzNSkKK2NvbnN0IF9OTF9MQU5HTUFYID0gX19QT1NJWDJfTElO
RV9NQVgKK2NvbnN0IF9NU19MQVpZVElNRSA9IDMzNTU0NDMyCitjb25zdCBfU1lTX21rZGlyID0g
X19fTlJfbWtkaXIKK2NvbnN0IF9JRkxBX01BQ1NFQ19XSU5ET1cgPSA1Citjb25zdCBfX19OUl9p
b19nZXRldmVudHMgPSAyMDgKK2NvbnN0IF9GRklfREVGQVVMVF9BQkkgPSAyCitjb25zdCBfU1lT
X3JlbmFtZSA9IF9fX05SX3JlbmFtZQorY29uc3QgX0VUSF9QX0RTQSA9IDB4MDAxQgorY29uc3Qg
X1BUUkFDRV9TRVRfVEhSRUFEX0FSRUEgPSAyNgorY29uc3QgX0lQX1JFQ1ZUVEwgPSAxMgorY29u
c3QgX1hEUF9GTEFHU19IV19NT0RFID0gKDEgPDwgMykKK2NvbnN0IF9NQVhfSEFORExFX1NaID0g
MTI4Citjb25zdCBfSUZGX0RFQlVHID0gNAorY29uc3QgX0FGX0VDT05FVCA9IF9QRl9FQ09ORVQK
K2NvbnN0IF9UQ0FfUkFURSA9IDUKK2NvbnN0IF9fWE9QRU5fRU5IX0kxOE4gPSAxCitjb25zdCBf
X1NDXzJfRk9SVF9SVU4gPSA1MAorY29uc3QgX05MTVNHRVJSX0FUVFJfQ09PS0lFID0gMworY29u
c3QgX19fTkRUUEFfTUFYID0gMTkKK2NvbnN0IF9JRkxBX05VTV9WRiA9IDIxCitjb25zdCBfUlRB
X0VYUElSRVMgPSAyMworY29uc3QgX1BPTExfT1VUID0gMgorY29uc3QgX19CSVRTX1NTX0ZMQUdT
X0ggPSAxCitjb25zdCBfSVBPUFRfTk9QID0gMQorY29uc3QgX0lGTkFNU0laID0gX0lGX05BTUVT
SVpFCitjb25zdCBfU1lTX3ZoYW5ndXAgPSBfX19OUl92aGFuZ3VwCitjb25zdCBfRlNfSFVHRV9G
SUxFX0ZMID0gMHgwMDA0MDAwMAorY29uc3QgX1NJR1RSQVAgPSA1Citjb25zdCBfX19GTFQxMjhf
RElHX18gPSAzMworY29uc3QgX1NZU190aW1lcmZkX2dldHRpbWUgPSBfX19OUl90aW1lcmZkX2dl
dHRpbWUKK2NvbnN0IF9CUEZfTEVOID0gMHg4MAorY29uc3QgX0JJR19FTkRJQU4gPSBfX19CSUdf
RU5ESUFOCitjb25zdCBfUlRNR1JQX0lQVjRfUk9VVEUgPSAweDQwCitjb25zdCBfQjEwMDAwMDAg
PSAwMDEwMDEwCitjb25zdCBfU1lTX2dldGNwdSA9IF9fX05SX2dldGNwdQorY29uc3QgX19fTlJf
bXFfdGltZWRyZWNlaXZlID0gMjQzCitjb25zdCBfX1BBVEhfTkVUV09SS1MgPSAiL2V0Yy9uZXR3
b3JrcyIKK2NvbnN0IF9VU0lOR19TUExJVF9TVEFDSyA9IDEKK2NvbnN0IF9GRklfVFlQRV9TSU5U
MzIgPSAxMAorY29uc3QgX19fUkxJTUlUX09GSUxFID0gNworY29uc3QgX0lGTEFfQlJfTUNBU1Rf
UVVFUllfUkVTUE9OU0VfSU5UVkwgPSAzNAorY29uc3QgX1NJT0NHSUZNRU0gPSAweDg5MWYKK2Nv
bnN0IF9JTlRfRkFTVDE2X1dJRFRIID0gX19fV09SRFNJWkUKK2NvbnN0IF9IQVZFX1NZU19TRUxF
Q1RfSCA9IDEKK2NvbnN0IF9PX1dST05MWSA9IDAxCitjb25zdCBfX19OUl9wcmVhZHYgPSAyOTUK
K2NvbnN0IF9TWVNfYWNjdCA9IF9fX05SX2FjY3QKK2NvbnN0IF9ETl9SRU5BTUUgPSAweDAwMDAw
MDEwCitjb25zdCBfU1lTX3NldHJldWlkID0gX19fTlJfc2V0cmV1aWQKK2NvbnN0IF9JRkxBX1hE
UF9EUlZfUFJPR19JRCA9IDUKK2NvbnN0IF9FQUxSRUFEWSA9IDExNAorY29uc3QgX05EVFBBX1FV
RVVFX0xFTiA9IDgKK2NvbnN0IF9fX0dMSUJDX1VTRV9JRUNfNjA1NTlfRlVOQ1NfRVhUID0gMQor
Y29uc3QgX0lMTF9QUlZPUEMgPSA1Citjb25zdCBfVFVOR0VURkVBVFVSRVNfdmFsID0gMjE0Nzc2
NzUwMworY29uc3QgX1JUTkxHUlBfSVBWNl9ST1VURSA9IDExCitjb25zdCBfX19OUl90aW1lcl9n
ZXR0aW1lID0gMjI0Citjb25zdCBfRVRIX1BfQU9FID0gMHg4OEEyCitjb25zdCBfX19OUl9nZXRn
cm91cHMgPSAxMTUKK2NvbnN0IF9TWVNfcnNlcSA9IF9fX05SX3JzZXEKK2NvbnN0IF9GSU9RU0la
RSA9IDB4NTQ2MAorY29uc3QgX0lQT1BUX0NPTlRST0wgPSAweDAwCitjb25zdCBfX19TSV9FUlJO
T19USEVOX0NPREUgPSAxCitjb25zdCBfRlBFX0lOVERJViA9IDEKK2NvbnN0IF9NU19OT0FUSU1F
ID0gMTAyNAorY29uc3QgX0NYODZfRElSMCA9IDB4ZmUKK2NvbnN0IF9fX05SX3BlcmZfZXZlbnRf
b3BlbiA9IDI5OAorY29uc3QgX0ZGSV9CQURfQUJJID0gMgorY29uc3QgX19fTlJfZ2V0X21lbXBv
bGljeSA9IDIzOQorY29uc3QgX01DTF9DVVJSRU5UID0gMQorY29uc3QgX0lQX1hGUk1fUE9MSUNZ
ID0gMTcKK2NvbnN0IF9fX1NJWkVPRl9TSE9SVF9fID0gMgorY29uc3QgX1NZU19mc3RhdCA9IF9f
X05SX2ZzdGF0Citjb25zdCBfSUZMQV9WRklORk9fTElTVCA9IDIyCitjb25zdCBfVENQX0ZJTl9X
QUlUMiA9IDUKK2NvbnN0IF9fU0NfQ1BVVElNRSA9IDEzOAorY29uc3QgX1RVTl9GX1RTT19FQ04g
PSAweDA4Citjb25zdCBfX19XT1JEU0laRV9USU1FNjRfQ09NUEFUMzIgPSAxCitjb25zdCBfSUZM
QV9JTkZPX1VOU1BFQyA9IDAKK2NvbnN0IF9FVEhfUF9YRFNBID0gMHgwMEY4Citjb25zdCBfSVBf
UE1UVURJU0MgPSAxMAorY29uc3QgX0FUX1JFTU9WRURJUiA9IDB4MjAwCitjb25zdCBfVElPQ1NX
SU5TWiA9IDB4NTQxNAorY29uc3QgX19fRkxUMzJfSEFTX0RFTk9STV9fID0gMQorY29uc3QgX0ZT
TEFCRUxfTUFYID0gMjU2Citjb25zdCBfT19OT05CTE9DSyA9IDA0MDAwCitjb25zdCBfRl9HRVRf
U0VBTFMgPSAxMDM0Citjb25zdCBfUEFDS0VUX1RYX1JJTkcgPSAxMworY29uc3QgX1RDUF9NU1Nf
REVGQVVMVCA9IDUzNgorY29uc3QgX0JDX0RJTV9NQVggPSBfX1BPU0lYMl9CQ19ESU1fTUFYCitj
b25zdCBfSVBPUFRfTFNSUiA9IDEzMQorY29uc3QgX19TQ19WN19MUDY0X09GRjY0ID0gMjM5Citj
b25zdCBfUFJfR0VUX1BERUFUSFNJRyA9IDIKK2NvbnN0IF9TWVNfc3ltbGluayA9IF9fX05SX3N5
bWxpbmsKK2NvbnN0IF9fX0RFQzY0X01BTlRfRElHX18gPSAxNgorY29uc3QgX1BPUlRfU0VMRl9W
RiA9IC0xCitjb25zdCBfX1NDX1NZTUxPT1BfTUFYID0gMTczCitjb25zdCBfWERQX0ZMQUdTX1VQ
REFURV9JRl9OT0VYSVNUID0gKDEgPDwgMCkKK2NvbnN0IF9NQUNWTEFOX01BQ0FERFJfQUREID0g
MAorY29uc3QgX19HUlBfSCA9IDEKK2NvbnN0IF9fX05SX2RlbGV0ZV9tb2R1bGUgPSAxNzYKK2Nv
bnN0IF9TWVNfc2VuZHRvID0gX19fTlJfc2VuZHRvCitjb25zdCBfSUZMQV9WTEFOX1FPU19NQVBQ
SU5HID0gMQorY29uc3QgX1NJR1RFUk0gPSAxNQorY29uc3QgX1BSX1NWRV9HRVRfVkwgPSA1MQor
Y29uc3QgX19DU19YQlM1X0xQQklHX09GRkJJR19MSUJTID0gMTExNAorY29uc3QgX0lGTEFfWERQ
X0hXX1BST0dfSUQgPSA3Citjb25zdCBfX1NZU19VQ09OVEVYVF9IID0gMQorY29uc3QgX19fTlJf
cmVhZGxpbmthdCA9IDI2NworY29uc3QgX0lGTEFfR1RQX1VOU1BFQyA9IDAKK2NvbnN0IF9WTE5F
WFQgPSAxNQorY29uc3QgX1BPU0lYX01BRFZfV0lMTE5FRUQgPSAzCitjb25zdCBfX19ydXNhZ2Vf
ZGVmaW5lZCA9IDEKK2NvbnN0IF9TWVNfc2VjdXJpdHkgPSBfX19OUl9zZWN1cml0eQorY29uc3Qg
X1g4Nl9DUjRfU01BUF9CSVQgPSAyMQorY29uc3QgX1RVTl9GX1RTTzYgPSAweDA0Citjb25zdCBf
QUZfQ0FOID0gX1BGX0NBTgorY29uc3QgX19fTlJfcnRfc2lncHJvY21hc2sgPSAxNAorY29uc3Qg
X0lOVF9MRUFTVDE2X1dJRFRIID0gMTYKK2NvbnN0IF9fX05SX2Zsb2NrID0gNzMKK2NvbnN0IF9D
TE9ORV9QQVJFTlQgPSAweDAwMDA4MDAwCitjb25zdCBfUlRBX0FMSUdOVE8gPSA0Citjb25zdCBf
UE9TSVhfTUFEVl9TRVFVRU5USUFMID0gMgorY29uc3QgX1NZU19zZXRob3N0bmFtZSA9IF9fX05S
X3NldGhvc3RuYW1lCitjb25zdCBfU1lTX3ZzZXJ2ZXIgPSBfX19OUl92c2VydmVyCitjb25zdCBf
WDg2X0VGTEFHU19OVF9CSVQgPSAxNAorY29uc3QgX01OVF9FWFBJUkUgPSA0Citjb25zdCBfUEZf
U01DID0gNDMKK2NvbnN0IF9FQUlfTk9OQU1FID0gLTIKK2NvbnN0IF9fX05SX3Jlc3RhcnRfc3lz
Y2FsbCA9IDIxOQorY29uc3QgX19TQ19USFJFQURfS0VZU19NQVggPSA3NAorY29uc3QgX0lGTEFf
QlJfTUNBU1RfU1RBUlRVUF9RVUVSWV9JTlRWTCA9IDM1Citjb25zdCBfSUNNUDZfSU5GT01TR19N
QVNLID0gMHg4MAorY29uc3QgX0lQT0lCX01PREVfQ09OTkVDVEVEID0gMQorY29uc3QgX0NMT0NB
TCA9IDAwMDQwMDAKK2NvbnN0IF9IQVZFX1NZU19VU0VSX0ggPSAxCitjb25zdCBfWDg2X0VGTEFH
U19JT1BMX0JJVCA9IDEyCitjb25zdCBfSUZMQV9CUlBPUlRfUk9PVF9JRCA9IDEzCitjb25zdCBf
VENTRVRBID0gMHg1NDA2Citjb25zdCBfU1lTX3JlYWRhaGVhZCA9IF9fX05SX3JlYWRhaGVhZAor
Y29uc3QgX0lGTEFfU1RBVFM2NCA9IDIzCitjb25zdCBfX1NDX1VJTlRfTUFYID0gMTE2Citjb25z
dCBfUFRSQUNFX1BFRUtTSUdJTkZPID0gMTY5MDUKK2NvbnN0IF9YODZfQ1I0X1ZNRV9CSVQgPSAw
Citjb25zdCBfX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCA9IDEKK2NvbnN0IF9fX1VTRV9MQVJHRUZJ
TEUgPSAxCitjb25zdCBfX19TSVpFX01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBf
U0tGX0FEX0FMVV9YT1JfWCA9IDQwCitjb25zdCBfX0lOVFRZUEVTX0ggPSAxCitjb25zdCBfUlRO
SF9GX1BFUlZBU0lWRSA9IDIKK2NvbnN0IF9TT19USU1FU1RBTVAgPSAyOQorY29uc3QgX1JUTVNH
X09WRVJSVU4gPSBfTkxNU0dfT1ZFUlJVTgorY29uc3QgX0JVU19NQ0VFUlJfQU8gPSA1Citjb25z
dCBfX19JRkxBX01BQ1ZMQU5fTUFYID0gNworY29uc3QgX0lQVE9TX0VDTl9NQVNLID0gMHgwMwor
Y29uc3QgX0JVU19NQ0VFUlJfQVIgPSA0Citjb25zdCBfQjUwMDAwMCA9IDAwMTAwMDUKK2NvbnN0
IF9fX1NURENfSE9TVEVEX18gPSAxCitjb25zdCBfX19JTlRfTEVBU1QzMl9XSURUSF9fID0gMzIK
K2NvbnN0IF9TSU9DU0lGTElOSyA9IDB4ODkxMQorY29uc3QgX1JFTkFNRV9FWENIQU5HRSA9ICgx
IDw8IDEpCitjb25zdCBfTUFEVl9ET0ZPUksgPSAxMQorY29uc3QgX19TQ19YQlM1X0xQNjRfT0ZG
NjQgPSAxMjcKK2NvbnN0IF9fTEFSR0VGSUxFNjRfU09VUkNFID0gMQorY29uc3QgX1NPX0RPTlRS
T1VURSA9IDUKK2NvbnN0IF9fU0NfVFJBQ0VfRVZFTlRfRklMVEVSID0gMTgyCitjb25zdCBfRl9T
RUFMX1dSSVRFID0gMHgwMDA4Citjb25zdCBfU1RERVJSX0ZJTEVOTyA9IDIKK2NvbnN0IF9UQ1Bf
U0VORF9RVUVVRSA9IDIKK2NvbnN0IF9JUFZMQU5fTU9ERV9NQVggPSAzCitjb25zdCBfX19PX05P
QVRJTUUgPSAwMTAwMDAwMAorY29uc3QgX1BGX1NOQSA9IDIyCitjb25zdCBfSUZMQV9WRl9TVEFU
U19SWF9EUk9QUEVEID0gNworY29uc3QgX1NPX1BBU1NTRUMgPSAzNAorY29uc3QgX0lHTlBBUiA9
IDAwMDAwMDQKK2NvbnN0IF9TWVNfdGltZSA9IF9fX05SX3RpbWUKK2NvbnN0IF9UQ1BfTk9UU0VO
VF9MT1dBVCA9IDI1Citjb25zdCBfSUZMQV9WWExBTl9HUk9VUCA9IDIKK2NvbnN0IF9OT0ZMU0gg
PSAwMDAwMjAwCitjb25zdCBfU09MX0RDQ1AgPSAyNjkKK2NvbnN0IF9TWVNfc3lzbG9nID0gX19f
TlJfc3lzbG9nCitjb25zdCBfU1lTX2lvX2dldGV2ZW50cyA9IF9fX05SX2lvX2dldGV2ZW50cwor
Y29uc3QgX1JUTV9ORVdNREIgPSA4NAorY29uc3QgX0lGTEFfSU5GT19TTEFWRV9LSU5EID0gNAor
Y29uc3QgX0lGTEFfVlhMQU5fTDJNSVNTID0gMTMKK2NvbnN0IF9fU0NfTEVWRUwzX0NBQ0hFX1NJ
WkUgPSAxOTQKK2NvbnN0IF9IQVZFX0xJTlVYX0lGX0FERFJfSCA9IDEKK2NvbnN0IF9PX0NSRUFU
ID0gMDEwMAorY29uc3QgX0VOT0RFViA9IDE5Citjb25zdCBfX19GTFQzMl9IQVNfUVVJRVRfTkFO
X18gPSAxCitjb25zdCBfVElPQ0dQR1JQX3ZhbCA9IDIxNTE5Citjb25zdCBfU0NOdUxFQVNUMTYg
PSAiaHUiCitjb25zdCBfX19OUl9wb2xsID0gNworY29uc3QgX19TQ19USFJFQURfUFJJT19JTkhF
UklUID0gODAKK2NvbnN0IF9HQUlfTk9XQUlUID0gMQorY29uc3QgX0lGQV9GX05PUFJFRklYUk9V
VEUgPSAweDIwMAorY29uc3QgX1NZU193cml0ZSA9IF9fX05SX3dyaXRlCitjb25zdCBfU1lTX2Zh
bm90aWZ5X2luaXQgPSBfX19OUl9mYW5vdGlmeV9pbml0Citjb25zdCBfRVRIX1BfQVJQID0gMHgw
ODA2Citjb25zdCBfX19OUl9pb3BsID0gMTcyCitjb25zdCBfX19GTFQzMlhfTUFYX18gPSAxLjEK
K2NvbnN0IF9FQ0hPRSA9IDAwMDAwMjAKK2NvbnN0IF9JUE9QVF9UU19UU0FOREFERFIgPSAxCitj
b25zdCBfU09fUEVFUkNSRUQgPSAxNworY29uc3QgX0lGTEFfQlJfSEVMTE9fVElNRSA9IDIKK2Nv
bnN0IF9GQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgPSAweDA4Citjb25zdCBfX1NDXzJfUEJTX0NI
RUNLUE9JTlQgPSAxNzUKK2NvbnN0IF9FQ0hPSyA9IDAwMDAwNDAKK2NvbnN0IF9JRkxBX0lQVkxB
Tl9NT0RFID0gMQorY29uc3QgX0lQVjZfSk9JTl9BTllDQVNUID0gMjcKK2NvbnN0IF9FQUlfSU5Q
Uk9HUkVTUyA9IC0xMDAKK2NvbnN0IF9SVE5IX0FMSUdOVE8gPSA0Citjb25zdCBfSVBPUFRfU0lE
ID0gX0lQT1BUX1NBVElECitjb25zdCBfX19GTFQzMl9NQVhfRVhQX18gPSAxMjgKK2NvbnN0IF9O
RF9PUFRfVEFSR0VUX0xJTktBRERSID0gMgorY29uc3QgX0ZfR0VUX0ZJTEVfUldfSElOVCA9IDEw
MzcKK2NvbnN0IF9GRklfRklSU1RfQUJJID0gMAorY29uc3QgX05FVExJTktfRUNSWVBURlMgPSAx
OQorY29uc3QgX0NYODZfR0NSID0gMHhiOAorY29uc3QgX0lQX1JPVVRFUl9BTEVSVCA9IDUKK2Nv
bnN0IF9fX05SX3NwbGljZSA9IDI3NQorY29uc3QgX1RJT0NTQ1RUWV92YWwgPSAyMTUxOAorY29u
c3QgX19fTlJfa2V5Y3RsID0gMjUwCitjb25zdCBfTVNfTk9TRUMgPSAoMTw8MjgpCitjb25zdCBf
TkxNX0ZfQ0FQUEVEID0gMHgxMDAKK2NvbnN0IF9fU0NfTkVUV09SS0lORyA9IDE1MgorY29uc3Qg
X19fQVRPTUlDX1JFTEVBU0UgPSAzCitjb25zdCBfSUZMQV9WRl9VTlNQRUMgPSAwCitjb25zdCBf
X19OUl9mY2htb2RhdCA9IDI2OAorY29uc3QgX1JURl9IT1NUID0gMHgwMDA0Citjb25zdCBfSUZG
X1BFUlNJU1QgPSAweDA4MDAKK2NvbnN0IF9GU19OT0NPTVBfRkwgPSAweDAwMDAwNDAwCitjb25z
dCBfU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04gPSAyMgorY29uc3QgX0JQRl9KRVEgPSAweDEw
Citjb25zdCBfRkZJX1RZUEVfVUlOVDMyID0gOQorY29uc3QgX1NZU19pbm90aWZ5X2FkZF93YXRj
aCA9IF9fX05SX2lub3RpZnlfYWRkX3dhdGNoCitjb25zdCBfUE9TSVhfTUFEVl9SQU5ET00gPSAx
Citjb25zdCBfUlRGX01VTFRJQ0FTVCA9IDB4MjAwMDAwMDAKK2NvbnN0IF9OVFBfQVBJID0gNAor
Y29uc3QgX0lQVjZfTVVMVElDQVNUX0lGID0gMTcKK2NvbnN0IF9TT19NQVhfUEFDSU5HX1JBVEUg
PSA0NworY29uc3QgX0hBVkVfTE9HMTBMID0gMQorY29uc3QgX0lGTEFfVkZfUlNTX1FVRVJZX0VO
ID0gNworY29uc3QgX19fRkxUNjRfTUFYXzEwX0VYUF9fID0gMzA4Citjb25zdCBfUFRSQUNFX1NZ
U0VNVV9TSU5HTEVTVEVQID0gMzIKK2NvbnN0IF9TWVNfZHVwID0gX19fTlJfZHVwCitjb25zdCBf
QVJQSFJEX0lFRUU4MDIxNTRfUEhZID0gODA1Citjb25zdCBfX19OUl9pb19zZXR1cCA9IDIwNgor
Y29uc3QgX0lQT1BUX1NTUlIgPSAxMzcKK2NvbnN0IF9fRElSRU5UX01BVENIRVNfRElSRU5UNjQg
PSAxCitjb25zdCBfUEFDS0VUX0hPU1QgPSAwCitjb25zdCBfQVJQSFJEX0RMQ0kgPSAxNQorY29u
c3QgX0lGTEFfSU5FVDZfQ09ORiA9IDIKK2NvbnN0IF9JRkxBX1ZGX0xJTktfU1RBVEVfRElTQUJM
RSA9IDIKK2NvbnN0IF9fX2l0aW1lcnNwZWNfZGVmaW5lZCA9IDEKK2NvbnN0IF9fX05SX3Bpdm90
X3Jvb3QgPSAxNTUKK2NvbnN0IF9GU19FTkNSWVBUX0ZMID0gMHgwMDAwMDgwMAorY29uc3QgX19T
WVNfUFJDVExfSCA9IDEKK2NvbnN0IF9fX1JMSU1JVF9SVFBSSU8gPSAxNAorY29uc3QgX0NMT0NL
X01PTk9UT05JQyA9IDEKK2NvbnN0IF9fX1VJTlRfRkFTVDMyX01BWF9fID0gMHhmZmZmZmZmZmZm
ZmZmZmZmCitjb25zdCBfTkVUTElOS19DUllQVE8gPSAyMQorY29uc3QgX0VUSF9QX0ZJUCA9IDB4
ODkxNAorY29uc3QgX09DUk5MID0gMDAwMDAxMAorY29uc3QgX19fTlJfc2V0Z2lkID0gMTA2Citj
b25zdCBfSUZGX1ZORVRfSERSID0gMHg0MDAwCitjb25zdCBfU0NOdUxFQVNUMzIgPSAidSIKK2Nv
bnN0IF9QUkl4TEVBU1QxNiA9ICJ4IgorY29uc3QgX19fTlJfaW9wcmlvX3NldCA9IDI1MQorY29u
c3QgX19TRU1BUEhPUkVfSCA9IDEKK2NvbnN0IF9SVEZfU1RBVElDID0gMHgwNDAwCitjb25zdCBf
UFJfRU5ESUFOX1BQQ19MSVRUTEUgPSAyCitjb25zdCBfX19GRF9TRVRTSVpFID0gMTAyNAorY29u
c3QgX1NZU19zZWNjb21wID0gX19fTlJfc2VjY29tcAorY29uc3QgX19fTERCTF9NSU5fXyA9IDEu
MQorY29uc3QgX19fREVDMzJfTUFYX18gPSA5Ljk5OTk5OUU5NgorY29uc3QgX19fSU5UUFRSX01B
WF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfX19GSUxFX2RlZmluZWQgPSAxCitjb25z
dCBfTU9EX05BTk8gPSBfQURKX05BTk8KK2NvbnN0IF9fX0ZMVDMyX0VQU0lMT05fXyA9IDEuMQor
Y29uc3QgX1g4Nl9FRkxBR1NfQUNfQklUID0gMTgKK2NvbnN0IF9QUk9UX0VYRUMgPSAweDQKK2Nv
bnN0IF9JRkxBX1NUQVRTX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxBX1ZGX1BPUlRfVU5TUEVDID0g
MAorY29uc3QgX1NDSEVEX09USEVSID0gMAorY29uc3QgX0FMTFBFUk1TID0gKF9TX0lTVUlEfF9T
X0lTR0lEfF9TX0lTVlRYfF9TX0lSV1hVfF9TX0lSV1hHfF9TX0lSV1hPKQorY29uc3QgX19fTlJf
Z2V0ZGVudHMgPSA3OAorY29uc3QgX05EVFBBX0JBU0VfUkVBQ0hBQkxFX1RJTUUgPSA0Citjb25z
dCBfRVRIX1BfV0NDUCA9IDB4ODgzRQorY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdf
TElOVEZMQUdTID0gMTEyMworY29uc3QgX0lGTEFfRVZFTlRfUkVCT09UID0gMQorY29uc3QgX0FS
UEhSRF9SQVdIRExDID0gNTE4Citjb25zdCBfQ0xEX1NUT1BQRUQgPSA1Citjb25zdCBfX19GTFQz
Ml9ERUNJTUFMX0RJR19fID0gOQorY29uc3QgX19fU19JU1ZUWCA9IDAxMDAwCitjb25zdCBfQUZf
SVVDViA9IF9QRl9JVUNWCitjb25zdCBfUlROTEdSUF9OT1AyID0gMTQKK2NvbnN0IF9fX2NvZGVf
bW9kZWxfc21hbGxfXyA9IDEKK2NvbnN0IF9UQ1BfRkFTVE9QRU5fQ09OTkVDVCA9IDMwCitjb25z
dCBfX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QgPSA4MQorY29uc3QgX19CSVRTX1NJR05VTV9HRU5F
UklDX0ggPSAxCitjb25zdCBfUldIX1dSSVRFX0xJRkVfRVhUUkVNRSA9IDUKK2NvbnN0IF9JTlRN
QVhfV0lEVEggPSA2NAorY29uc3QgX0VET00gPSAzMworY29uc3QgX1NZU19zY2hlZF9nZXRzY2hl
ZHVsZXIgPSBfX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIKK2NvbnN0IF9FWFRBID0gX0IxOTIwMAor
Y29uc3QgX0VYVEIgPSBfQjM4NDAwCitjb25zdCBfU1lTX3BlcmZfZXZlbnRfb3BlbiA9IF9fX05S
X3BlcmZfZXZlbnRfb3BlbgorY29uc3QgX1NZU19zZXRucyA9IF9fX05SX3NldG5zCitjb25zdCBf
X0lPQ19TSVpFQklUUyA9IDE0Citjb25zdCBfX1hPUEVOX0xFR0FDWSA9IDEKK2NvbnN0IF9fUE9T
SVgyX0xPQ0FMRURFRiA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04KK2NvbnN0IF9UVFlfTkFNRV9N
QVggPSAzMgorY29uc3QgX19QT1NJWF9SRV9EVVBfTUFYID0gMjU1Citjb25zdCBfSVBWNl9SRUNW
SE9QT1BUUyA9IDUzCitjb25zdCBfTkVUTElOS19CUk9BRENBU1RfRVJST1IgPSA0Citjb25zdCBf
UFJfU0VUX01NID0gMzUKK2NvbnN0IF9fX0ZMT0FUX1dPUkRfT1JERVIgPSBfX19CWVRFX09SREVS
Citjb25zdCBfX1NDX1VDSEFSX01BWCA9IDExNQorY29uc3QgX0VUSF9QX01QTFNfVUMgPSAweDg4
NDcKK2NvbnN0IF9OTEFfVFlQRV9NQVNLID0gXihfTkxBX0ZfTkVTVEVEIHwgX05MQV9GX05FVF9C
WVRFT1JERVIpCitjb25zdCBfX1NDX1hPUEVOX1NUUkVBTVMgPSAyNDYKK2NvbnN0IF9CUEZfSkdU
ID0gMHgyMAorY29uc3QgX19fSU5UNjRfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0
IF9NT0RfRlJFUVVFTkNZID0gX0FESl9GUkVRVUVOQ1kKK2NvbnN0IF9fX05SX3NobWR0ID0gNjcK
K2NvbnN0IF9TWVNfZ2V0Y3dkID0gX19fTlJfZ2V0Y3dkCitjb25zdCBfX19TSVpFT0ZfTE9OR19f
ID0gOAorY29uc3QgX0JQRl9ORVRfT0ZGID0gX1NLRl9ORVRfT0ZGCitjb25zdCBfSVBfQkxPQ0tf
U09VUkNFID0gMzgKK2NvbnN0IF9FQ0hSTkcgPSA0NAorY29uc3QgX0VBSV9TWVNURU0gPSAtMTEK
K2NvbnN0IF9fX05SX3JlcXVlc3Rfa2V5ID0gMjQ5Citjb25zdCBfX1NDX0xFVkVMM19DQUNIRV9B
U1NPQyA9IDE5NQorY29uc3QgX1BSSVg4ID0gIlgiCitjb25zdCBfSEFWRV9URUUgPSAxCitjb25z
dCBfSEFWRV9DT05GSUdfSCA9IDEKK2NvbnN0IF9fUE9TSVhfQ0xPQ0tfU0VMRUNUSU9OID0gMjAw
ODA5Citjb25zdCBfVENPT0ZGID0gMAorY29uc3QgX1RDUF9NU1NfREVTSVJFRCA9IDEyMjAKK2Nv
bnN0IF9BSV9QQVNTSVZFID0gMHgwMDAxCitjb25zdCBfU19JRkxOSyA9IF9fX1NfSUZMTksKK2Nv
bnN0IF9EVF9TT0NLID0gMTIKK2NvbnN0IF9fU0NfMl9VUEUgPSA5NworY29uc3QgX0xJTlVYX1JF
Qk9PVF9DTURfS0VYRUMgPSAweDQ1NTg0NTQzCitjb25zdCBfX1NDX1VTSFJUX01BWCA9IDExOAor
Y29uc3QgX1NPX0JTRENPTVBBVCA9IDE0Citjb25zdCBfX0tfU1NfTUFYU0laRSA9IDEyOAorY29u
c3QgX1JUQ0ZfVkFMVkUgPSAweDAwMjAwMDAwCitjb25zdCBfSUZMQV9UVU5fTlVNX0RJU0FCTEVE
X1FVRVVFUyA9IDkKK2NvbnN0IF9IQVZFX01FTU9SWV9IID0gMQorY29uc3QgX1g4Nl9DUjRfVU1J
UF9CSVQgPSAxMQorY29uc3QgX0hBVkVfTkVUSU5FVF9JRl9FVEhFUl9IID0gMQorY29uc3QgX0FG
X01BWCA9IF9QRl9NQVgKK2NvbnN0IF9IQVZFX0VYUE0xTCA9IDEKK2NvbnN0IF9fX19fZ3djaGFy
X3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9OVEZfU0VMRiA9IDB4MDIKK2NvbnN0IF9fQklUU19TSUdB
Q1RJT05fSCA9IDEKK2NvbnN0IF9TWVNfcmVib290ID0gX19fTlJfcmVib290Citjb25zdCBfUkVH
X1RSQVBOTyA9IDIwCitjb25zdCBfQURKX09GRlNFVF9TU19SRUFEID0gMHhhMDAxCitjb25zdCBf
SUNNUDZfUEFSQU1fUFJPQiA9IDQKK2NvbnN0IF9FVEhfUF9JRUVFUFVQQVQgPSAweDBhMDEKK2Nv
bnN0IF9JUFBST1RPX0VHUCA9IDgKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX01VTFRJQ0FTVCA9IDUK
K2NvbnN0IF9SVE1fREVMVENMQVNTID0gNDEKK2NvbnN0IF9fUE9TSVhfU1BBV04gPSAyMDA4MDkK
K2NvbnN0IF9SVEFYX1JUT19NSU4gPSAxMworY29uc3QgX19TWVNfVVRTTkFNRV9IID0gMQorY29u
c3QgX05FVExJTktfUEtUSU5GTyA9IDMKK2NvbnN0IF9GUEVfRkxUSU5WID0gNworY29uc3QgX19f
TlJfcmVtb3ZleGF0dHIgPSAxOTcKK2NvbnN0IF9GX05PVElGWSA9IDEwMjYKK2NvbnN0IF9NU19J
TlZBTElEQVRFID0gMgorY29uc3QgX1NJT0NQUk9UT1BSSVZBVEUgPSAweDg5RTAKK2NvbnN0IF9f
X05SX3ZoYW5ndXAgPSAxNTMKK2NvbnN0IF9DTE9ORV9VTlRSQUNFRCA9IDB4MDA4MDAwMDAKK2Nv
bnN0IF9JRkFfRl9QRVJNQU5FTlQgPSAweDgwCitjb25zdCBfSVBfTUFYUEFDS0VUID0gNjU1MzUK
K2NvbnN0IF9fU0NfUkVHRVhQID0gMTU1Citjb25zdCBfSVBPUFRfRU9MID0gMAorY29uc3QgX0VE
RUFETE9DSyA9IF9FREVBRExLCitjb25zdCBfU1lTX2dldHBpZCA9IF9fX05SX2dldHBpZAorY29u
c3QgX0VUSEVSVFlQRV9MT09QQkFDSyA9IDB4OTAwMAorY29uc3QgX19DU19MRlM2NF9DRkxBR1Mg
PSAxMDA0Citjb25zdCBfU0lHRlBFID0gOAorY29uc3QgX0VMSUJTQ04gPSA4MQorY29uc3QgX19f
REVDNjRfRVBTSUxPTl9fID0gMUUtMTUKK2NvbnN0IF9JTlQxNl9NQVggPSAoMzI3NjcpCitjb25z
dCBfU0lPQ1NJRk5BTUUgPSAweDg5MjMKK2NvbnN0IF9fX0ZMVDMyX0RFTk9STV9NSU5fXyA9IDEu
MQorY29uc3QgX1NJR1ZUQUxSTSA9IDI2Citjb25zdCBfX1NDX05aRVJPID0gMTA5Citjb25zdCBf
X19OUl9wYXVzZSA9IDM0Citjb25zdCBfRVBPTExSRE5PUk0gPSA2NAorY29uc3QgX0hBVkVfTElT
VFhBVFRSID0gMQorY29uc3QgX0VUSF9QX1gyNSA9IDB4MDgwNQorY29uc3QgX19DU19YQlM1X0lM
UDMyX09GRkJJR19DRkxBR1MgPSAxMTA0Citjb25zdCBfSUZMQV9CT05EX1VQREVMQVkgPSA0Citj
b25zdCBfTElOVVhfUkVCT09UX01BR0lDMkIgPSAzNjkzNjc0NDgKK2NvbnN0IF9OTE1fRl9FWENM
ID0gMHgyMDAKK2NvbnN0IF9fX0lOVF9MRUFTVDE2X1dJRFRIX18gPSAxNgorY29uc3QgX19TQ19U
X0lPVl9NQVggPSA2NgorY29uc3QgX19fREVDMTI4X0VQU0lMT05fXyA9IDFFLTMzCitjb25zdCBf
UlRNX05FV1RDTEFTUyA9IDQwCitjb25zdCBfX19GX1NFVFNJRyA9IDEwCitjb25zdCBfUFJfQ0FQ
X0FNQklFTlRfUkFJU0UgPSAyCitjb25zdCBfTl9YMjUgPSA2Citjb25zdCBfX0JJVFNfU0lHVEhS
RUFEX0ggPSAxCitjb25zdCBfU0lPQ0dJRlNMQVZFID0gMHg4OTI5Citjb25zdCBfX19GTFQxMjhf
TUFYXzEwX0VYUF9fID0gNDkzMgorY29uc3QgX09fUkRXUiA9IDAyCitjb25zdCBfU19JUldYRyA9
IChfU19JUldYVSA+PiAzKQorY29uc3QgX0hBVkVfRkNIT1dOQVQgPSAxCitjb25zdCBfU1lTX2Ns
b2NrX25hbm9zbGVlcCA9IF9fX05SX2Nsb2NrX25hbm9zbGVlcAorY29uc3QgX01TX1JFTU9VTlQg
PSAzMgorY29uc3QgX0VUSF9QX0FGX0lVQ1YgPSAweEZCRkIKK2NvbnN0IF9TT0xfREVDTkVUID0g
MjYxCitjb25zdCBfU09fREVUQUNIX0ZJTFRFUiA9IDI3Citjb25zdCBfUkxJTV9TQVZFRF9DVVIg
PSBfUkxJTV9JTkZJTklUWQorY29uc3QgX0lOX0NMQVNTQl9NQVggPSA2NTUzNgorY29uc3QgX05J
X05PRlFETiA9IDQKK2NvbnN0IF9fX0dYWF9BQklfVkVSU0lPTiA9IDEwMTMKK2NvbnN0IF9FTk9N
U0cgPSA0MgorY29uc3QgX0lGTEFfQlJfVENOX1RJTUVSID0gMTcKK2NvbnN0IF9NQVhOQU1MRU4g
PSBfTkFNRV9NQVgKK2NvbnN0IF9fX0ZMVDY0WF9NSU5fXyA9IDEuMQorY29uc3QgX19fREVDMzJf
TUFYX0VYUF9fID0gOTcKK2NvbnN0IF9IQVZFX1NZU0NBTExfSCA9IDEKK2NvbnN0IF9IQVZFX1NZ
U19QVFJBQ0VfSCA9IDEKK2NvbnN0IF9fU0NfUElQRSA9IDE0NQorY29uc3QgX1NfSVJXWFUgPSAo
X19fU19JUkVBRHxfX19TX0lXUklURXxfX19TX0lFWEVDKQorY29uc3QgX19fTERCTF9IQVNfSU5G
SU5JVFlfXyA9IDEKK2NvbnN0IF9TWVNfbXFfdW5saW5rID0gX19fTlJfbXFfdW5saW5rCitjb25z
dCBfX19VU0VfRklMRV9PRkZTRVQ2NCA9IDEKK2NvbnN0IF9SV0ZfV1JJVEVfTElGRV9OT1RfU0VU
ID0gMAorY29uc3QgX1NFR1ZfUEtVRVJSID0gNAorY29uc3QgX01MT0NLX09ORkFVTFQgPSAxCitj
b25zdCBfX1NDX0FJT19NQVggPSAyNAorY29uc3QgX19fTlJfc3ltbGluayA9IDg4Citjb25zdCBf
RVJBTkdFID0gMzQKK2NvbnN0IF9JUF9IRFJJTkNMID0gMworY29uc3QgX1dDSEFSX01BWCA9IF9f
X1dDSEFSX01BWAorY29uc3QgX0ZfU0VUX0ZJTEVfUldfSElOVCA9IDEwMzgKK2NvbnN0IF9UQ1Bf
Q0FfUmVjb3ZlcnkgPSAzCitjb25zdCBfVUlOVF9MRUFTVDMyX1dJRFRIID0gMzIKK2NvbnN0IF9S
VEFfRU5DQVBfVFlQRSA9IDIxCitjb25zdCBfRVBPTExFUlIgPSA4Citjb25zdCBfU1lTX2Nob3du
ID0gX19fTlJfY2hvd24KK2NvbnN0IF9UQUIwID0gMDAwMDAwMAorY29uc3QgX1RBQjEgPSAwMDA0
MDAwCitjb25zdCBfVEFCMiA9IDAwMTAwMDAKK2NvbnN0IF9UQUIzID0gMDAxNDAwMAorY29uc3Qg
X1RIX1JTVCA9IDB4MDQKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRUZPUksgPSAyCitjb25zdCBfX19O
Ul9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4ID0gMTQ2Citjb25zdCBfX19OUl9zY2hlZF9nZXRwYXJh
bSA9IDE0MworY29uc3QgX1JUTkVUTElOS19IQVZFX1BFRVJJTkZPID0gMQorY29uc3QgX19MRlNf
TEFSR0VGSUxFID0gMQorY29uc3QgX1NUQVRYX0FMTCA9IDB4MGZmZgorY29uc3QgX19fTlJfc2V0
aXRpbWVyID0gMzgKK2NvbnN0IF9NT0RfTUlDUk8gPSBfQURKX01JQ1JPCitjb25zdCBfX19OUl91
c3RhdCA9IDEzNgorY29uc3QgX0lGRl9BVFRBQ0hfUVVFVUUgPSAweDAyMDAKK2NvbnN0IF9fX1BU
SFJFQURfTVVURVhfTE9DS19FTElTSU9OID0gMQorY29uc3QgX0lOX0NMQVNTQV9IT1NUID0gKDB4
ZmZmZmZmZmYgJiBeX0lOX0NMQVNTQV9ORVQpCitjb25zdCBfUlRGX05BVCA9IDB4MDgwMDAwMDAK
K2NvbnN0IF9CUEZfQUJTID0gMHgyMAorY29uc3QgX0ZTX1RPUERJUl9GTCA9IDB4MDAwMjAwMDAK
K2NvbnN0IF9SVE1HUlBfTElOSyA9IDEKK2NvbnN0IF9GU19LRVlfREVTQ19QUkVGSVggPSAiZnNj
cnlwdDoiCitjb25zdCBfX19OUl92c2VydmVyID0gMjM2Citjb25zdCBfVElPQ1NCUksgPSAweDU0
MjcKK2NvbnN0IF9fX0dMSUJDX18gPSAyCitjb25zdCBfSEFWRV9TWU5DX0FERF9BTkRfRkVUQ0hf
OCA9IDEKK2NvbnN0IF9ORF9SQV9GTEFHX01BTkFHRUQgPSAweDgwCitjb25zdCBfSU5UX0xFQVNU
MTZfTUFYID0gKDMyNzY3KQorY29uc3QgX19fTlJfc2NoZWRfc2V0c2NoZWR1bGVyID0gMTQ0Citj
b25zdCBfX1NDX1NFTUFQSE9SRVMgPSAyMQorY29uc3QgX19VQ09OVEVYVF9IID0gMQorY29uc3Qg
X1NZU19ydF90Z3NpZ3F1ZXVlaW5mbyA9IF9fX05SX3J0X3Rnc2lncXVldWVpbmZvCitjb25zdCBf
UFJfRlBfRVhDX1BSRUNJU0UgPSAzCitjb25zdCBfU1lTX3N5bmMgPSBfX19OUl9zeW5jCitjb25z
dCBfSEFWRV9TVERJTlRfSCA9IDEKK2NvbnN0IF9JQ0FOT04gPSAwMDAwMDAyCitjb25zdCBfUFJf
U0VUX1RIUF9ESVNBQkxFID0gNDEKK2NvbnN0IF9ORVRMSU5LX1VOQ09OTkVDVEVEID0gMAorY29u
c3QgX0lVVEY4ID0gMDA0MDAwMAorY29uc3QgX0JQRl9BTkQgPSAweDUwCitjb25zdCBfTkVUTElO
S19MSVNURU5fQUxMX05TSUQgPSA4Citjb25zdCBfSVBWNl9QQVRITVRVID0gNjEKK2NvbnN0IF9f
U0NfQVRFWElUX01BWCA9IDg3Citjb25zdCBfU09DS19SRE0gPSA0Citjb25zdCBfRVRIX1BfSVAg
PSAweDA4MDAKK2NvbnN0IF9fUE9TSVhfU09VUkNFID0gMQorY29uc3QgX0lGTEFfR0VORVZFX1VE
UF9DU1VNID0gOAorY29uc3QgX19TQ19NUV9QUklPX01BWCA9IDI4Citjb25zdCBfX05FVElORVRf
VENQX0ggPSAxCitjb25zdCBfTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUMiA9IDB4QTFCMkMzRDQK
K2NvbnN0IF9SVENGX05BVCA9IDB4MDA4MDAwMDAKK2NvbnN0IF9ORF9OQV9GTEFHX09WRVJSSURF
ID0gMHgwMDAwMDAyMAorY29uc3QgX0hBVkVfU1RETElCX0ggPSAxCitjb25zdCBfX1NDX1NJTkdM
RV9QUk9DRVNTID0gMTUxCitjb25zdCBfSUZGX0RZTkFNSUMgPSAzMjc2OAorY29uc3QgX1RDUF9O
T19RVUVVRSA9IDAKK2NvbnN0IF9fTElCQ19MSU1JVFNfSF8gPSAxCitjb25zdCBfSU5fRE9OVF9G
T0xMT1cgPSAweDAyMDAwMDAwCitjb25zdCBfTUFEVl9XSVBFT05GT1JLID0gMTgKK2NvbnN0IF9f
UE9TSVhfU1RSRUFNX01BWCA9IDgKK2NvbnN0IF9fQklUU19TSUdJTkZPX0NPTlNUU19IID0gMQor
Y29uc3QgX1dBSVRfQU5ZID0gKC0xKQorY29uc3QgX01BUF8zMkJJVCA9IDB4NDAKK2NvbnN0IF9J
TkVUX0FERFJTVFJMRU4gPSAxNgorY29uc3QgX19fSUZMQV9WRl9NQVggPSAxMworY29uc3QgX1BS
X0ZQX0VYQ19BU1lOQyA9IDIKK2NvbnN0IF9USU9DU0VSQ09ORklHID0gMHg1NDUzCitjb25zdCBf
VUlOVFBUUl9XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfTUNBU1RfTVNGSUxURVIgPSA0OAor
Y29uc3QgX05MTV9GX05PTlJFQyA9IDB4MTAwCitjb25zdCBfRURFQURMSyA9IDM1Citjb25zdCBf
SVBQT1JUX1RGVFAgPSA2OQorY29uc3QgX1NJT0NHU1RBTVAgPSAweDg5MDYKK2NvbnN0IF9GU19L
RVlfREVTQ1JJUFRPUl9TSVpFID0gOAorY29uc3QgX19DU19QT1NJWF9WN19MUEJJR19PRkZCSUdf
TElCUyA9IDExNDYKK2NvbnN0IF9JRkxBX0dFTkVWRV9QT1JUID0gNQorY29uc3QgX1NZU19jYXBn
ZXQgPSBfX19OUl9jYXBnZXQKK2NvbnN0IF9fX05SX21sb2NrID0gMTQ5Citjb25zdCBfX19HQ0Nf
QVRPTUlDX0xPTkdfTE9DS19GUkVFID0gMgorY29uc3QgX0VUSEVSX1RZUEVfTEVOID0gMgorY29u
c3QgX0hBVkVfVEFOTCA9IDEKK2NvbnN0IF9fUE9TSVhfU0FWRURfSURTID0gMQorY29uc3QgX1RD
TV9JRklOREVYX01BR0lDX0JMT0NLID0gKDB4RkZGRkZGRkYpCitjb25zdCBfQlBGX1NUWCA9IDB4
MDMKK2NvbnN0IF9fX0RCTF9NQU5UX0RJR19fID0gNTMKK2NvbnN0IF9JUFY2X01JTkhPUENPVU5U
ID0gNzMKK2NvbnN0IF9TSU9DR0lGTkFNRSA9IDB4ODkxMAorY29uc3QgX1JURVhUX0ZJTFRFUl9T
S0lQX1NUQVRTID0gKDEgPDwgMykKK2NvbnN0IF9fX05SX3J0X3NpZ2FjdGlvbiA9IDEzCitjb25z
dCBfSU5UX0ZBU1Q2NF9XSURUSCA9IDY0Citjb25zdCBfQlBGX01FTSA9IDB4NjAKK2NvbnN0IF9O
RF9ORUlHSEJPUl9BRFZFUlQgPSAxMzYKK2NvbnN0IF9fUE9TSVhfQ0hJTERfTUFYID0gMjUKK2Nv
bnN0IF9DTE9ORV9DSElMRF9TRVRUSUQgPSAweDAxMDAwMDAwCitjb25zdCBfUkVHX1JBWCA9IDEz
Citjb25zdCBfX19JTlRfTEVBU1Q2NF9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3Qg
X0JQRl9BREQgPSAweDAwCitjb25zdCBfRVRIRVJNSU4gPSAoX0VUSEVSX01JTl9MRU4gLSBfRVRI
RVJfSERSX0xFTiAtIF9FVEhFUl9DUkNfTEVOKQorY29uc3QgX0lQUE9SVF9SSkUgPSA3NworY29u
c3QgX0ZTX0lNQUdJQ19GTCA9IDB4MDAwMDIwMDAKK2NvbnN0IF9JUFY2X1BNVFVESVNDX0lOVEVS
RkFDRSA9IDQKK2NvbnN0IF9fX0lGTEFfVkxBTl9RT1NfTUFYID0gMgorY29uc3QgX19fR0NDX0FU
T01JQ19CT09MX0xPQ0tfRlJFRSA9IDIKK2NvbnN0IF9TWVNfTk1MTiA9IF9fVVRTTkFNRV9MRU5H
VEgKK2NvbnN0IF9JU0lHID0gMDAwMDAwMQorY29uc3QgX1NZU19iaW5kID0gX19fTlJfYmluZAor
Y29uc3QgX0lQVjZfTVRVX0RJU0NPVkVSID0gMjMKK2NvbnN0IF9JRkxBX1dJUkVMRVNTID0gMTEK
K2NvbnN0IF9STU5FVF9GTEFHU19FR1JFU1NfTUFQX0NLU1VNVjQgPSAoMSA8PCAzKQorY29uc3Qg
X19QT1NJWF9NQVBQRURfRklMRVMgPSAyMDA4MDkKK2NvbnN0IF9SVE1fTkVXTkRVU0VST1BUID0g
NjgKK2NvbnN0IF9QVFJBQ0VfR0VUU0lHTUFTSyA9IDE2OTA2Citjb25zdCBfUlRNR1JQX0lQVjRf
TVJPVVRFID0gMHgyMAorY29uc3QgX0lONl9BRERSX0dFTl9NT0RFX1NUQUJMRV9QUklWQUNZID0g
MgorY29uc3QgX19fTlJfc2lnYWx0c3RhY2sgPSAxMzEKK2NvbnN0IF9ORVRMSU5LX0NBUF9BQ0sg
PSAxMAorY29uc3QgX19fTlJfY3JlYXQgPSA4NQorY29uc3QgX19HRVRPUFRfQ09SRV9IID0gMQor
Y29uc3QgX0VBSV9BR0FJTiA9IC0zCitjb25zdCBfX1BPU0lYX0pPQl9DT05UUk9MID0gMQorY29u
c3QgX1NDTmkxNiA9ICJoaSIKK2NvbnN0IF9CUEZfU1VCID0gMHgxMAorY29uc3QgX1BSSXgxNiA9
ICJ4IgorY29uc3QgX1NDSEVEX0lTTyA9IDQKK2NvbnN0IF9fSEFWRV9TVFJVQ1RfVEVSTUlPU19D
X0lTUEVFRCA9IDEKK2NvbnN0IF9OVURfRkFJTEVEID0gMHgyMAorY29uc3QgX0VNU0dTSVpFID0g
OTAKK2NvbnN0IF9GQVBQRU5EID0gX09fQVBQRU5ECitjb25zdCBfX19VU0VfUE9TSVggPSAxCitj
b25zdCBfVElPQ0lOUSA9IF9GSU9OUkVBRAorY29uc3QgX1NIVVRfUkQgPSAwCitjb25zdCBfX19O
Ul9lcG9sbF93YWl0X29sZCA9IDIxNQorY29uc3QgX1g4Nl9FRkxBR1NfT0ZfQklUID0gMTEKK2Nv
bnN0IF9fX0ZMVDEyOF9ERUNJTUFMX0RJR19fID0gMzYKK2NvbnN0IF9fU0NfR0VUR1JfUl9TSVpF
X01BWCA9IDY5Citjb25zdCBfU1lTX3V0aW1lID0gX19fTlJfdXRpbWUKK2NvbnN0IF9QUl9GUEVN
VV9TSUdGUEUgPSAyCitjb25zdCBfQVJQSFJEX0ZEREkgPSA3NzQKK2NvbnN0IF9TRUdWX01BUEVS
UiA9IDEKK2NvbnN0IF9SVEFfTVBfQUxHTyA9IDE0Citjb25zdCBfQlBGX0pNUCA9IDB4MDUKK2Nv
bnN0IF9TWVNfcnRfc2lnYWN0aW9uID0gX19fTlJfcnRfc2lnYWN0aW9uCitjb25zdCBfSEFWRV9O
RVRfSUZfSCA9IDEKK2NvbnN0IF9SVE5MR1JQX0RFQ25ldF9JRkFERFIgPSAxMworY29uc3QgX0lG
Rl9MT09QQkFDSyA9IDgKK2NvbnN0IF9SVENGX0xPRyA9IDB4MDIwMDAwMDAKK2NvbnN0IF9EVF9C
TEsgPSA2Citjb25zdCBfX19OUl9jYXBzZXQgPSAxMjYKK2NvbnN0IF9fU0NfUElJX09TSSA9IDU3
Citjb25zdCBfSUZMQV9CUlBPUlRfRk9SV0FSRF9ERUxBWV9USU1FUiA9IDIyCitjb25zdCBfVU1P
VU5UX05PRk9MTE9XID0gOAorY29uc3QgX1BGX0VDT05FVCA9IDE5Citjb25zdCBfSVBWNl9BRERS
X1BSRUZFUkVOQ0VTID0gNzIKK2NvbnN0IF9NQUNTRUNfVkFMSURBVEVfTUFYID0gMgorY29uc3Qg
X1JUX1RBQkxFX01BWCA9IDQyOTQ5NjcyOTUKK2NvbnN0IF9GRklfUEFTQ0FMID0gNgorY29uc3Qg
X0lGTEFfWEZSTV9JRl9JRCA9IDIKK2NvbnN0IF9CNDYwODAwID0gMDAxMDAwNAorY29uc3QgX19D
U19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUyA9IDExMDkKK2NvbnN0IF9QUklpTEVBU1QzMiA9ICJp
IgorY29uc3QgX0hBVkVfU1lTX0ZJTEVfSCA9IDEKK2NvbnN0IF9TWVNfZXBvbGxfd2FpdCA9IF9f
X05SX2Vwb2xsX3dhaXQKK2NvbnN0IF9QRl9GSUxFID0gX1BGX0xPQ0FMCitjb25zdCBfU1lTX2xz
ZXR4YXR0ciA9IF9fX05SX2xzZXR4YXR0cgorY29uc3QgX0VDSElMRCA9IDEwCitjb25zdCBfX19G
SU5JVEVfTUFUSF9PTkxZX18gPSAwCitjb25zdCBfX1BPU0lYX1RIUkVBRF9ST0JVU1RfUFJJT19Q
Uk9URUNUID0gLTEKK2NvbnN0IF9fX05SX3NldHRpbWVvZmRheSA9IDE2NAorY29uc3QgX1BBQ0tF
VF9NUl9NVUxUSUNBU1QgPSAwCitjb25zdCBfU0tGX0FEX0NQVSA9IDM2Citjb25zdCBfX19OUl91
dGltZSA9IDEzMgorY29uc3QgX19fSUZMQV9YRFBfTUFYID0gOAorY29uc3QgX01BQ1ZMQU5fTU9E
RV9QQVNTVEhSVSA9IDgKK2NvbnN0IF9fX1NFR19HUyA9IDEKK2NvbnN0IF9BREpfT0ZGU0VUX1NJ
TkdMRVNIT1QgPSAweDgwMDEKK2NvbnN0IF9QT1JUX1JFUVVFU1RfQVNTT0NJQVRFID0gMgorY29u
c3QgX1BSSXhMRUFTVDMyID0gIngiCitjb25zdCBfX1BPU0lYMl9CQ19ESU1fTUFYID0gMjA0OAor
Y29uc3QgX0VUSF9QXzgwMl8yID0gMHgwMDA0Citjb25zdCBfRVRIX1BfODAyXzMgPSAweDAwMDEK
K2NvbnN0IF9TT19FUlJPUiA9IDQKK2NvbnN0IF9USU9DTUJJUyA9IDB4NTQxNgorY29uc3QgX01T
X05PUkVNT1RFTE9DSyA9ICgxPDwyNykKK2NvbnN0IF9fX1VTRV9YT1BFTjJLID0gMQorY29uc3Qg
X0lQVjZfSE9QTElNSVQgPSA1MgorY29uc3QgX19fTlJfd3JpdGV2ID0gMjAKK2NvbnN0IF9TWVNf
c2V0c29ja29wdCA9IF9fX05SX3NldHNvY2tvcHQKK2NvbnN0IF9TWVNfZ2V0cmVzZ2lkID0gX19f
TlJfZ2V0cmVzZ2lkCitjb25zdCBfRVRIX1BfUEFFID0gMHg4ODhFCitjb25zdCBfUEFDS0VUX1NU
QVRJU1RJQ1MgPSA2Citjb25zdCBfX19VSU5UOF9NQVhfXyA9IDB4ZmYKK2NvbnN0IF9JUF9NSU5U
VEwgPSAyMQorY29uc3QgX0xJTkVfTUFYID0gX19QT1NJWDJfTElORV9NQVgKK2NvbnN0IF9fUENf
Tk9fVFJVTkMgPSA3Citjb25zdCBfX19EQkxfTUFYXzEwX0VYUF9fID0gMzA4Citjb25zdCBfTU9E
X1NUQVRVUyA9IF9BREpfU1RBVFVTCitjb25zdCBfUFJfRU5ESUFOX0xJVFRMRSA9IDEKK2NvbnN0
IF9NT0RfQ0xLQSA9IF9BREpfT0ZGU0VUX1NJTkdMRVNIT1QKK2NvbnN0IF9BVF9TVEFUWF9ET05U
X1NZTkMgPSAweDQwMDAKK2NvbnN0IF9fU0NfQ19MQU5HX1NVUFBPUlRfUiA9IDEzNgorY29uc3Qg
X0VUSF9QX1BBVVNFID0gMHg4ODA4Citjb25zdCBfU1lTX3VubGlua2F0ID0gX19fTlJfdW5saW5r
YXQKK2NvbnN0IF9JRkxBX0dUUF9QRFBfSEFTSFNJWkUgPSAzCitjb25zdCBfSU5fQ0xBU1NCX05F
VCA9IDB4ZmZmZjAwMDAKK2NvbnN0IF9TQ05kMzIgPSAiZCIKK2NvbnN0IF9TSUdQV1IgPSAzMAor
Y29uc3QgX0lGTEFfQk9ORF9BQ1RJVkVfU0xBVkUgPSAyCitjb25zdCBfUFJfU0VUX01NX0VOVl9T
VEFSVCA9IDEwCitjb25zdCBfUFRSRElGRl9XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfUFJJ
eDggPSAieCIKK2NvbnN0IF9fU1RESU5UX0ggPSAxCitjb25zdCBfUlRNX0dFVFNUQVRTID0gOTQK
K2NvbnN0IF9USU9DTUdFVCA9IDB4NTQxNQorY29uc3QgX05EVFBBX0FOWUNBU1RfREVMQVkgPSAx
MgorY29uc3QgX1BSSXgzMiA9ICJ4IgorY29uc3QgX0VYVFBST0MgPSAwMjAwMDAwCitjb25zdCBf
X19XQ0hBUl9NQVhfXyA9IDB4N2ZmZmZmZmYKK2NvbnN0IF9JT0NfSU5PVVQgPSAoKF9fSU9DX1dS
SVRFfF9fSU9DX1JFQUQpIDw8IF9fSU9DX0RJUlNISUZUKQorY29uc3QgX0lGTEFfSU5GT19LSU5E
ID0gMQorY29uc3QgX0VGQVVMVCA9IDE0Citjb25zdCBfVUlOVDhfV0lEVEggPSA4Citjb25zdCBf
UFJfQ0FQQlNFVF9EUk9QID0gMjQKK2NvbnN0IF9JRkxBX1ZMQU5fVU5TUEVDID0gMAorY29uc3Qg
X0lGRl9NVUxUSUNBU1QgPSA0MDk2Citjb25zdCBfUE9SVF9SRVFVRVNUX0RJU0FTU09DSUFURSA9
IDMKK2NvbnN0IF9JRkxBX0JSUE9SVF9OTyA9IDE4Citjb25zdCBfU09fREVCVUcgPSAxCitjb25z
dCBfUlROSF9GX09GRkxPQUQgPSA4Citjb25zdCBfSU5UX0ZBU1QzMl9NQVggPSAoOTIyMzM3MjAz
Njg1NDc3NTgwNykKK2NvbnN0IF9fU0NfTUVNTE9DS19SQU5HRSA9IDE4Citjb25zdCBfUlBNX1BD
T19DSEFOR0UgPSAyCitjb25zdCBfTVNfU1VCTU9VTlQgPSAoMTw8MjYpCitjb25zdCBfRE5fTU9E
SUZZID0gMHgwMDAwMDAwMgorY29uc3QgX0lQUFJPVE9fVURQID0gMTcKK2NvbnN0IF9JRkxBX1ZS
Rl9QT1JUX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxBX0lORVQ2X01DQVNUID0gNAorY29uc3QgX1JU
TkxHUlBfREVDbmV0X1JPVVRFID0gMTUKK2NvbnN0IF9fX05SX3RlZSA9IDI3NgorY29uc3QgX1JU
QV9JSUYgPSAzCitjb25zdCBfSUNSTkwgPSAwMDAwNDAwCitjb25zdCBfU19JV1VTUiA9IF9fX1Nf
SVdSSVRFCitjb25zdCBfU1lTX2R1cDIgPSBfX19OUl9kdXAyCitjb25zdCBfU1lTX2R1cDMgPSBf
X19OUl9kdXAzCitjb25zdCBfUkVHX0VSUiA9IDE5Citjb25zdCBfTkVUTElOS19ORkxPRyA9IDUK
K2NvbnN0IF9QUklYTEVBU1Q4ID0gIlgiCitjb25zdCBfSUZMQV9IU1JfVkVSU0lPTiA9IDYKK2Nv
bnN0IF9TWVNfbGlua2F0ID0gX19fTlJfbGlua2F0Citjb25zdCBfX19EQkxfSEFTX0lORklOSVRZ
X18gPSAxCitjb25zdCBfSVBUT1NfQ0xBU1NfTUFTSyA9IDB4ZTAKK2NvbnN0IF9fUE9TSVhfVEhS
RUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyA9IDQKK2NvbnN0IF9ORF9ORUlHSEJPUl9TT0xJQ0lU
ID0gMTM1Citjb25zdCBfSEFWRV9MSU5VWF9JRl9FVEhFUl9IID0gMQorY29uc3QgX19DU19WN19X
SURUSF9SRVNUUklDVEVEX0VOVlMgPSA1Citjb25zdCBfUFJfU1BFQ19FTkFCTEUgPSAoMSA8PCAx
KQorY29uc3QgX0FSUEhSRF9QUFAgPSA1MTIKK2NvbnN0IF9TSV9BU1lOQ05MID0gLTYwCitjb25z
dCBfU1lTX21vZGlmeV9sZHQgPSBfX19OUl9tb2RpZnlfbGR0Citjb25zdCBfX19GTFQ2NF9FUFNJ
TE9OX18gPSAxLjEKK2NvbnN0IF9fX09fVE1QRklMRSA9ICgwMjAwMDAwMDAgfCBfX19PX0RJUkVD
VE9SWSkKK2NvbnN0IF9YODZfRUZMQUdTX1NGX0JJVCA9IDcKK2NvbnN0IF9TSU9DR0lGTVRVID0g
MHg4OTIxCitjb25zdCBfQlBGX0xMX09GRiA9IF9TS0ZfTExfT0ZGCitjb25zdCBfX1NDSEVEX0gg
PSAxCitjb25zdCBfSVBPUFRfU0VDVVJfRUZUTyA9IDB4Nzg5YQorY29uc3QgX1BPUlRfUFJPRklM
RV9SRVNQT05TRV9FUlJPUiA9IDI2MQorY29uc3QgX19fTlJfc2htYXQgPSAzMAorY29uc3QgX19f
TlJfcGtleV9hbGxvYyA9IDMzMAorY29uc3QgX1BUUkFDRV9QT0tFVVNFUiA9IDYKK2NvbnN0IF9J
RkFfRkxBR1MgPSA4Citjb25zdCBfX19ERUM2NF9NQVhfRVhQX18gPSAzODUKK2NvbnN0IF9SVEFY
X0hPUExJTUlUID0gMTAKK2NvbnN0IF9NQVBfTE9DS0VEID0gMHgwMjAwMAorY29uc3QgX0JQRl9M
RFggPSAweDAxCitjb25zdCBfUlRBX1ZJQSA9IDE4Citjb25zdCBfX1NDX1Y3X0xQQklHX09GRkJJ
RyA9IDI0MAorY29uc3QgX0FGX0lCID0gX1BGX0lCCitjb25zdCBfTkwxID0gMDAwMDQwMAorY29u
c3QgX19TQ19DTEtfVENLID0gMgorY29uc3QgX01PRF9DTEtCID0gX0FESl9USUNLCitjb25zdCBf
RU5FVERPV04gPSAxMDAKK2NvbnN0IF9BRl9JUkRBID0gX1BGX0lSREEKK2NvbnN0IF9NQ0FTVF9M
RUFWRV9HUk9VUCA9IDQ1Citjb25zdCBfUlROTEdSUF9JUFY2X01ST1VURSA9IDEwCitjb25zdCBf
UFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgPSBfX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9S
X0lURVJBVElPTlMKK2NvbnN0IF9fSVNPQzk1X1NPVVJDRSA9IDEKK2NvbnN0IF9fX0RFQzEyOF9N
QVhfRVhQX18gPSA2MTQ1Citjb25zdCBfSUVYVEVOID0gMDEwMDAwMAorY29uc3QgX0lQUE9SVF9S
T1VURVNFUlZFUiA9IDUyMAorY29uc3QgX05EVFBBX1JFRkNOVCA9IDIKK2NvbnN0IF9YODZfRUZM
QUdTX0NGX0JJVCA9IDAKK2NvbnN0IF9TWVNfbW91bnQgPSBfX19OUl9tb3VudAorY29uc3QgX0ZT
X0lNTVVUQUJMRV9GTCA9IDB4MDAwMDAwMTAKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkZCSUdf
TElCUyA9IDExMDYKK2NvbnN0IF9QUl9DQVBfQU1CSUVOVF9DTEVBUl9BTEwgPSA0Citjb25zdCBf
X19OUl9wa2V5X2ZyZWUgPSAzMzEKK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzEyOF9D
VFMgPSA2Citjb25zdCBfUlRGX1BPTElDWSA9IDB4MDQwMDAwMDAKK2NvbnN0IF9JRkxBX0JPTkRf
RE9XTkRFTEFZID0gNQorY29uc3QgX05URl9ST1VURVIgPSAweDgwCitjb25zdCBfSUZMQV9WRl9U
WF9SQVRFID0gMworY29uc3QgX0ZfU0VUX1JXX0hJTlQgPSAxMDM2Citjb25zdCBfRFRfV0hUID0g
MTQKK2NvbnN0IF9QVFJBQ0VfU1lTRU1VID0gMzEKK2NvbnN0IF9TSU9DRElGQUREUiA9IDB4ODkz
NgorY29uc3QgX0VCQURGRCA9IDc3Citjb25zdCBfSVBfTVNTID0gNTc2Citjb25zdCBfU1lTX2dl
dGdpZCA9IF9fX05SX2dldGdpZAorY29uc3QgX1RJT0NOWENMID0gMHg1NDBECitjb25zdCBfX19T
SFJUX01BWF9fID0gMHg3ZmZmCitjb25zdCBfTUFYX0lQT1BUTEVOID0gNDAKK2NvbnN0IF9fX1BU
SFJFQURfTVVURVhfSEFWRV9QUkVWID0gMQorY29uc3QgX1NJT0dJRklOREVYID0gX1NJT0NHSUZJ
TkRFWAorY29uc3QgX0lQVjZfRE9OVEZSQUcgPSA2MgorY29uc3QgX0IyNDAwID0gMDAwMDAxMwor
Y29uc3QgX0VMMkhMVCA9IDUxCitjb25zdCBfSUZMQV9CUlBPUlRfR1JPVVBfRldEX01BU0sgPSAz
MQorY29uc3QgX19TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORyA9IDc5Citjb25zdCBfV0FJ
VF9NWVBHUlAgPSAwCitjb25zdCBfVENBX1NUQVRTMiA9IDcKK2NvbnN0IF9JRkxBX01BQ1ZMQU5f
RkxBR1MgPSAyCitjb25zdCBfX19OUl9mdHJ1bmNhdGUgPSA3NworY29uc3QgX0lGTEFfVkZfU1RB
VFMgPSA4Citjb25zdCBfSVBQUk9UT19TQ1RQID0gMTMyCitjb25zdCBfU1lTX211bmxvY2thbGwg
PSBfX19OUl9tdW5sb2NrYWxsCitjb25zdCBfUkxJTUlUX0FTID0gOQorY29uc3QgX0lOVDMyX01J
TiA9ICgtMjE0NzQ4MzY0Ny0xKQorY29uc3QgX19DU19WNl9FTlYgPSAxMTQ4Citjb25zdCBfSVBf
T0ZGTUFTSyA9IDB4MWZmZgorY29uc3QgX0lOVDY0X1dJRFRIID0gNjQKK2NvbnN0IF9QQUNLQUdF
X1VSTCA9ICIiCitjb25zdCBfSU5UX0ZBU1QzMl9XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBf
SUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFID0gNAorY29uc3QgX1VJTlRNQVhfV0lEVEggPSA2NAor
Y29uc3QgX1JUTVNHX05FV1JVTEUgPSAweDMxCitjb25zdCBfX1NDX05MX05NQVggPSAxMjIKK2Nv
bnN0IF9fX0ZMVDY0X0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX1g4Nl9FRkxBR1NfVk1fQklU
ID0gMTcKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVEID0gMjAwODA5Citjb25z
dCBfRk5ERUxBWSA9IF9PX05ERUxBWQorY29uc3QgX0lGTEFfQlJfTUNBU1RfUVVFUllfVVNFX0lG
QUREUiA9IDI0Citjb25zdCBfUFJJdUxFQVNUMTYgPSAidSIKK2NvbnN0IF9SVEZfR0FURVdBWSA9
IDB4MDAwMgorY29uc3QgX1NZU19sY2hvd24gPSBfX19OUl9sY2hvd24KK2NvbnN0IF9TWVNfbGlu
ayA9IF9fX05SX2xpbmsKK2NvbnN0IF9JRkxBX1ZYTEFOX0xPQ0FMNiA9IDE3Citjb25zdCBfSVBf
UkVDVk9SSUdEU1RBRERSID0gX0lQX09SSUdEU1RBRERSCitjb25zdCBfUlRNX0RFTExJTksgPSAx
NworY29uc3QgX1JUTV9ORVdORVRDT05GID0gODAKK2NvbnN0IF9JUFRPU19EU0NQX0VGID0gMHhi
OAorY29uc3QgX1BUUkFDRV9MSVNURU4gPSAxNjkwNAorY29uc3QgX1NDTV9USU1FU1RBTVBJTkdf
T1BUX1NUQVRTID0gNTQKK2NvbnN0IF9fUE9TSVhfU0VNQVBIT1JFUyA9IDIwMDgwOQorY29uc3Qg
X19JT0NfVFlQRU1BU0sgPSAoKDEgPDwgX19JT0NfVFlQRUJJVFMpLTEpCitjb25zdCBfWDg2X0NS
NF9NQ0VfQklUID0gNgorY29uc3QgX19fRkxUX0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX0VU
SF9QX01BQ1NFQyA9IDB4ODhFNQorY29uc3QgX19fTE9OR19XSURUSF9fID0gNjQKK2NvbnN0IF9I
QVZFX05FVF9JRl9BUlBfSCA9IDEKK2NvbnN0IF9fTkVUX0lGX0ggPSAxCitjb25zdCBfVElPQ1NU
SSA9IDB4NTQxMgorY29uc3QgX1NZU19zZW5kZmlsZSA9IF9fX05SX3NlbmRmaWxlCitjb25zdCBf
X19OUl9zd2Fwb24gPSAxNjcKK2NvbnN0IF9JTkxDUiA9IDAwMDAxMDAKK2NvbnN0IF9TX0lGUkVH
ID0gX19fU19JRlJFRworY29uc3QgX1JFR19SOSA9IDEKK2NvbnN0IF9QT1NJWF9NQURWX0RPTlRO
RUVEID0gNAorY29uc3QgX19fVVNFX1VOSVg5OCA9IDEKK2NvbnN0IF9JTjZfQUREUl9HRU5fTU9E
RV9FVUk2NCA9IDAKK2NvbnN0IF9JRkxBX0JSUE9SVF9QUk9YWUFSUF9XSUZJID0gMTIKK2NvbnN0
IF9TSFVUX1dSID0gMQorY29uc3QgX0VDT05OUkVGVVNFRCA9IDExMQorY29uc3QgX1BGX0FMRyA9
IDM4Citjb25zdCBfX19JRkxBX0lORk9fTUFYID0gNgorY29uc3QgX19TQ19QT0xMID0gNTgKK2Nv
bnN0IF9fX0lGTEFfSU5FVDZfTUFYID0gOQorY29uc3QgX01BUF9GSVhFRF9OT1JFUExBQ0UgPSAw
eDEwMDAwMAorY29uc3QgX19DU19QT1NJWF9WN19MUDY0X09GRjY0X0xJTlRGTEFHUyA9IDExNDMK
K2NvbnN0IF9QT1JUX1BST0ZJTEVfTUFYID0gNDAKK2NvbnN0IF9UQ1BfQ09PS0lFX1BBSVJfU0la
RSA9ICgyKl9UQ1BfQ09PS0lFX01BWCkKK2NvbnN0IF9QVFJBQ0VfUEVFS1NJR0lORk9fU0hBUkVE
ID0gMQorY29uc3QgX05VRF9TVEFMRSA9IDB4MDQKK2NvbnN0IF9ORVRMSU5LX0ZJQl9MT09LVVAg
PSAxMAorY29uc3QgX1JUTV9CQVNFID0gMTYKK2NvbnN0IF9QRl9TRUNVUklUWSA9IDE0Citjb25z
dCBfU1BMSUNFX0ZfTU9WRSA9IDEKK2NvbnN0IF9fX05SX2tpbGwgPSA2MgorY29uc3QgX1NJR1NU
S1NaID0gODE5MgorY29uc3QgX0NSMCA9IDAwMDAwMDAKK2NvbnN0IF9DUjEgPSAwMDAxMDAwCitj
b25zdCBfX19XQ0hBUl9XSURUSF9fID0gMzIKK2NvbnN0IF9fX0lOVF9GQVNUOF9XSURUSF9fID0g
OAorY29uc3QgX0VUSF9QX1RFQiA9IDB4NjU1OAorY29uc3QgX0lQUE9SVF9GVFAgPSAyMQorY29u
c3QgX1NUQV9NT0RFID0gMHg0MDAwCitjb25zdCBfQlBGX0lORCA9IDB4NDAKK2NvbnN0IF9GRklf
VFlQRV9TVFJVQ1QgPSAxMworY29uc3QgX01TR19aRVJPQ09QWSA9IDY3MTA4ODY0Citjb25zdCBf
X0VORElBTl9IID0gMQorY29uc3QgX19QT1NJWF9UWVBFRF9NRU1PUllfT0JKRUNUUyA9IC0xCitj
b25zdCBfU1lTX21xX3RpbWVkcmVjZWl2ZSA9IF9fX05SX21xX3RpbWVkcmVjZWl2ZQorY29uc3Qg
X2Vwb2xsX2RhdGFfb2Zmc2V0ID0gNAorY29uc3QgX0dUUF9ST0xFX1NHU04gPSAxCitjb25zdCBf
TkRUQV9TVEFUUyA9IDcKK2NvbnN0IF9TQ01fUklHSFRTID0gMQorY29uc3QgX1RDUF9SRUNWX1FV
RVVFID0gMQorY29uc3QgX19QT1NJWF9WNl9MUDY0X09GRjY0ID0gMQorY29uc3QgX0FGX0FQUExF
VEFMSyA9IF9QRl9BUFBMRVRBTEsKK2NvbnN0IF9fX1NJWkVPRl9GTE9BVF9fID0gNAorY29uc3Qg
X1BGX0NBTiA9IDI5Citjb25zdCBfUlRGX0xPQ0FMID0gMHg4MDAwMDAwMAorY29uc3QgX05MTVNH
X0FMSUdOVE8gPSA0Citjb25zdCBfX19VSU5UX0ZBU1QxNl9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZm
ZmZmZgorY29uc3QgX1NPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSyA9IDI0Citjb25zdCBf
X19TSVpFT0ZfUE9JTlRFUl9fID0gOAorY29uc3QgX19fTlJfbWVtZmRfY3JlYXRlID0gMzE5Citj
b25zdCBfU1lTX3Rna2lsbCA9IF9fX05SX3Rna2lsbAorY29uc3QgX1hDQVNFID0gMDAwMDAwNAor
Y29uc3QgX1ZNSU4gPSA2Citjb25zdCBfQjU3NjAwID0gMDAxMDAwMQorY29uc3QgX0lGTEFfRVZF
TlRfTk9USUZZX1BFRVJTID0gNAorY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkYzMl9MREZM
QUdTID0gMTEzMworY29uc3QgX1JUUFJPVF9CT09UID0gMworY29uc3QgX1RDUE9QVF9USU1FU1RB
TVAgPSA4Citjb25zdCBfUFJJeExFQVNUOCA9ICJ4IgorY29uc3QgX0VJTlBST0dSRVNTID0gMTE1
Citjb25zdCBfSU5fQ0xBU1NDX05TSElGVCA9IDgKK2NvbnN0IF9TQ01fVElNRVNUQU1QTlMgPSBf
U09fVElNRVNUQU1QTlMKK2NvbnN0IF9JRkxBX0FERFJFU1MgPSAxCitjb25zdCBfSUZMQV9WRl9J
TkZPX1VOU1BFQyA9IDAKK2NvbnN0IF9NU19TWU5DSFJPTk9VUyA9IDE2Citjb25zdCBfU1lTX3Jl
bmFtZWF0ID0gX19fTlJfcmVuYW1lYXQKK2NvbnN0IF9FVEhfUF9RSU5RMSA9IDB4OTEwMAorY29u
c3QgX0VUSF9QX1FJTlEyID0gMHg5MjAwCitjb25zdCBfRVRIX1BfUUlOUTMgPSAweDkzMDAKK2Nv
bnN0IF9fX05SX3F1b3RhY3RsID0gMTc5Citjb25zdCBfTlNTX0JVRkxFTl9QQVNTV0QgPSAxMDI0
Citjb25zdCBfX1BPU0lYMl9TV19ERVYgPSBfX19QT1NJWDJfVEhJU19WRVJTSU9OCitjb25zdCBf
VENTQU5PVyA9IDAKK2NvbnN0IF9DUzYgPSAwMDAwMDIwCitjb25zdCBfQ1M3ID0gMDAwMDA0MAor
Y29uc3QgX0NTOCA9IDAwMDAwNjAKK2NvbnN0IF9QUklkTEVBU1Q4ID0gImQiCitjb25zdCBfSVBQ
T1JUX1RJTUVTRVJWRVIgPSAzNworY29uc3QgX0ZfT1dORVJfUEdSUCA9IDIKK2NvbnN0IF9BRl9B
VE1QVkMgPSBfUEZfQVRNUFZDCitjb25zdCBfUlRNR1JQX0lQVjRfSUZBRERSID0gMHgxMAorY29u
c3QgX1NZU19yZWN2ZnJvbSA9IF9fX05SX3JlY3Zmcm9tCitjb25zdCBfX19GTFQ2NFhfTUlOXzEw
X0VYUF9fID0gKC00OTMxKQorY29uc3QgX1NfSVhHUlAgPSAoX1NfSVhVU1IgPj4gMykKK2NvbnN0
IF9TWVNfbWtub2QgPSBfX19OUl9ta25vZAorY29uc3QgX05FVExJTktfU01DID0gMjIKK2NvbnN0
IF9TWVNfdXRpbWVzID0gX19fTlJfdXRpbWVzCitjb25zdCBfRlNfWEZMQUdfSEFTQVRUUiA9IDB4
ODAwMDAwMDAKK2NvbnN0IF9fX0RFQ19FVkFMX01FVEhPRF9fID0gMgorY29uc3QgX1NJR1RUSU4g
PSAyMQorY29uc3QgX0lQUFJPVE9fRVNQID0gNTAKK2NvbnN0IF9TS0ZfQURfTkxBVFRSID0gMTIK
K2NvbnN0IF9FQUlfTUVNT1JZID0gLTEwCitjb25zdCBfU1lTX2xpc3R4YXR0ciA9IF9fX05SX2xp
c3R4YXR0cgorY29uc3QgX0FSUE9QX05BSyA9IDEwCitjb25zdCBfQlBGX0pTRVQgPSAweDQwCitj
b25zdCBfTl9UVFkgPSAwCitjb25zdCBfX1BDX1NPQ0tfTUFYQlVGID0gMTIKK2NvbnN0IF9USU9D
TV9EU1IgPSAweDEwMAorY29uc3QgX19fRkxUMzJfTUlOX0VYUF9fID0gKC0xMjUpCitjb25zdCBf
VENPRkxVU0ggPSAxCitjb25zdCBfVFVOREVUQUNIRklMVEVSX3ZhbCA9IDEwNzQ4MTIxMTgKK2Nv
bnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElOVEZMQUdTID0gMTExOQorY29uc3QgX01B
RFZfSFVHRVBBR0UgPSAxNAorY29uc3QgX1RDSU9GTFVTSCA9IDIKK2NvbnN0IF9FVEhfUF9OU0gg
PSAweDg5NEYKK2NvbnN0IF9JRkxBX0JSX01DQVNUX0hBU0hfTUFYID0gMjcKK2NvbnN0IF9JRkxB
X1BQUF9ERVZfRkQgPSAxCitjb25zdCBfU19JU1VJRCA9IF9fX1NfSVNVSUQKK2NvbnN0IF9WU1RB
UlQgPSA4Citjb25zdCBfRVRIX1BfQ0FORkQgPSAweDAwMEQKK2NvbnN0IF9fQklUU19TVERJTlRf
SU5UTl9IID0gMQorY29uc3QgX0JQRl9BTFUgPSAweDA0Citjb25zdCBfX19TSVpFT0ZfRkxPQVQ4
MF9fID0gMTYKK2NvbnN0IF9fUE9TSVhfU1NJWkVfTUFYID0gMzI3NjcKK2NvbnN0IF9fQ1NfUEFU
SCA9IDAKK2NvbnN0IF9IQVZFX1VOU0VURU5WID0gMQorY29uc3QgX0ZSQU1FX1NJWkUgPSAxNjgK
K2NvbnN0IF9JRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYID0gMTkKK2NvbnN0IF9fU1lTX1RJ
TUVYX0ggPSAxCitjb25zdCBfSUZMQV9UVU5fVU5TUEVDID0gMAorY29uc3QgX0xJTlVYX1JFQk9P
VF9DTURfQ0FEX09GRiA9IDB4MDAwMDAwMDAKK2NvbnN0IF9TSUdVU1IxID0gMTAKK2NvbnN0IF9T
SUdVU1IyID0gMTIKK2NvbnN0IF9IQVZFX1NZU19TVEFUX0ggPSAxCitjb25zdCBfSEFWRV9GQUxM
T0NBVEUgPSAxCitjb25zdCBfX19OUl91bnNoYXJlID0gMjcyCitjb25zdCBfQ1g4Nl9DQ1IwID0g
MHhjMAorY29uc3QgX0NYODZfQ0NSMSA9IDB4YzEKK2NvbnN0IF9DWDg2X0NDUjIgPSAweGMyCitj
b25zdCBfQ1g4Nl9DQ1IzID0gMHhjMworY29uc3QgX1NZU19ydF9zaWd0aW1lZHdhaXQgPSBfX19O
Ul9ydF9zaWd0aW1lZHdhaXQKK2NvbnN0IF9fX05SX3RraWxsID0gMjAwCitjb25zdCBfQ1g4Nl9D
Q1I2ID0gMHhlYQorY29uc3QgX0NYODZfQ0NSNyA9IDB4ZWIKK2NvbnN0IF9NU0dfTU9SRSA9IDMy
NzY4Citjb25zdCBfSVBPUFRfVFNfVFNPTkxZID0gMAorY29uc3QgX0hBVkVfTElOVVhfUlRORVRM
SU5LX0ggPSAxCitjb25zdCBfUFJJbzE2ID0gIm8iCitjb25zdCBfUFRSQUNFX1BPS0VVU1IgPSA2
Citjb25zdCBfX19OUl9nZXRjcHUgPSAzMDkKK2NvbnN0IF9BRl9ERUNuZXQgPSBfUEZfREVDbmV0
Citjb25zdCBfUEFDS0FHRV9OQU1FID0gInBhY2thZ2UtdW51c2VkIgorY29uc3QgX19TQ19YT1BF
Tl9VTklYID0gOTEKK2NvbnN0IF9YODZfQ1IwX05XX0JJVCA9IDI5Citjb25zdCBfTUZEX0FMTE9X
X1NFQUxJTkcgPSAyCitjb25zdCBfRUFJX0NBTkNFTEVEID0gLTEwMQorY29uc3QgX19fTlJfcmVh
ZHYgPSAxOQorY29uc3QgX19QT1NJWDJfUkVfRFVQX01BWCA9IDI1NQorY29uc3QgX1RVTlNFVElG
SU5ERVhfdmFsID0gMTA3NDAyNTY5MAorY29uc3QgX19SUENfTkVUREJfSCA9IDEKK2NvbnN0IF9N
QVBfSFVHRV9NQVNLID0gMHgzZgorY29uc3QgX05EX05BX0ZMQUdfU09MSUNJVEVEID0gMHgwMDAw
MDA0MAorY29uc3QgX1RVTlNFVFZORVRIRFJTWl92YWwgPSAxMDc0MDI1Njg4Citjb25zdCBfRUFJ
X0FERFJGQU1JTFkgPSAtOQorY29uc3QgX19fU0laRU9GX0ZMT0FUMTI4X18gPSAxNgorY29uc3Qg
X19fTlJfdm1zcGxpY2UgPSAyNzgKK2NvbnN0IF9fX05SX3VuYW1lID0gNjMKK2NvbnN0IF9UQ1NF
VFNfdmFsID0gMjE1MDYKK2NvbnN0IF9fX05SX2V4ZWN2ZWF0ID0gMzIyCitjb25zdCBfU1lTX3Rp
bWVzID0gX19fTlJfdGltZXMKK2NvbnN0IF9SVE1fRl9QUkVGSVggPSAweDgwMAorY29uc3QgX1NF
RUtfQ1VSID0gMQorY29uc3QgX0lGTEFfQlJfSEVMTE9fVElNRVIgPSAxNgorY29uc3QgX19QQ19Q
SVBFX0JVRiA9IDUKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUyA9
IDExMzEKK2NvbnN0IF9JRkxBX0dFTkVWRV9SRU1PVEUgPSAyCitjb25zdCBfUlROTEdSUF9NUExT
X1JPVVRFID0gMjcKK2NvbnN0IF9TWVNfdGltZXJfc2V0dGltZSA9IF9fX05SX3RpbWVyX3NldHRp
bWUKK2NvbnN0IF9QRl9MTEMgPSAyNgorY29uc3QgX0VUSF9QX0xJTktfQ1RMID0gMHg4ODZjCitj
b25zdCBfSVBfT1BUSU9OUyA9IDQKK2NvbnN0IF9DWDg2X0RJUjEgPSAweGZmCitjb25zdCBfX1BP
U0lYX1JUU0lHX01BWCA9IDgKK2NvbnN0IF9USU1FX0lOUyA9IDEKK2NvbnN0IF9FSVNESVIgPSAy
MQorY29uc3QgX19CSVRTX1RZUEVTX0ggPSAxCitjb25zdCBfX1NZU19TT0NLRVRfSCA9IDEKK2Nv
bnN0IF9fX05SX2ZzZXR4YXR0ciA9IDE5MAorY29uc3QgX0VJTyA9IDUKK2NvbnN0IF9JUFBST1RP
X0hPUE9QVFMgPSAwCitjb25zdCBfQkxPQ0tfU0laRSA9ICgxPDxfQkxPQ0tfU0laRV9CSVRTKQor
Y29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9TUEVDSzEyOF8yNTZfQ1RTID0gOAorY29uc3QgX0lG
Rl9OT0FSUCA9IDEyOAorY29uc3QgX19fRkxUNjRYX01BTlRfRElHX18gPSA2NAorY29uc3QgX0VS
RU1PVEUgPSA2NgorY29uc3QgX19fRkxUNjRfTUlOX18gPSAxLjEKK2NvbnN0IF9ORF9PUFRfUlRS
X0FEVl9JTlRFUlZBTCA9IDcKK2NvbnN0IF9TWVNfcGlwZSA9IF9fX05SX3BpcGUKK2NvbnN0IF9O
VEZfRVhUX0xFQVJORUQgPSAweDEwCitjb25zdCBfU1RBX1BQU0VSUk9SID0gMHgwODAwCitjb25z
dCBfRVJFTU9URUlPID0gMTIxCitjb25zdCBfSU5UX0ZBU1QxNl9NSU4gPSAoLTkyMjMzNzIwMzY4
NTQ3NzU4MDctMSkKK2NvbnN0IF9IQVZFX0xJTlVYX0ZJTFRFUl9IID0gMQorY29uc3QgX0VJRFJN
ID0gNDMKK2NvbnN0IF9fU0NfRklGTyA9IDE0NAorY29uc3QgX1NJX1FVRVVFID0gLTEKK2NvbnN0
IF9TWVNfZ2V0X2tlcm5lbF9zeW1zID0gX19fTlJfZ2V0X2tlcm5lbF9zeW1zCitjb25zdCBfX0NT
X1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMgPSAxMTE4Citjb25zdCBfVENPT04gPSAxCitjb25z
dCBfRl9EVVBGRCA9IDAKK2NvbnN0IF9VSU5UX0xFQVNUMTZfV0lEVEggPSAxNgorY29uc3QgX1NZ
U19zZXRybGltaXQgPSBfX19OUl9zZXRybGltaXQKK2NvbnN0IF9fUEFUSF9QUk9UT0NPTFMgPSAi
L2V0Yy9wcm90b2NvbHMiCitjb25zdCBfTU9EX1RBSSA9IF9BREpfVEFJCitjb25zdCBfX1NDX1RS
QUNFX0lOSEVSSVQgPSAxODMKK2NvbnN0IF9fX05SX3NlbmR0byA9IDQ0Citjb25zdCBfTkVUTElO
S19ST1VURSA9IDAKK2NvbnN0IF9QVFJBQ0VfS0lMTCA9IDgKK2NvbnN0IF9SVE5MR1JQX01EQiA9
IDI2Citjb25zdCBfTkVUREJfU1VDQ0VTUyA9IDAKK2NvbnN0IF9GX1NFVEZEID0gMgorY29uc3Qg
X0hBVkVfTUtESVJBVCA9IDEKK2NvbnN0IF9JRkxBX1ZYTEFOX0xJTUlUID0gOQorY29uc3QgX19T
Q19IT1NUX05BTUVfTUFYID0gMTgwCitjb25zdCBfTkxETFkgPSAwMDAwNDAwCitjb25zdCBfQURK
X1RJQ0sgPSAweDQwMDAKK2NvbnN0IF9fUE9TSVgyX0xJTkVfTUFYID0gMjA0OAorY29uc3QgX0Zf
U0VURkwgPSA0Citjb25zdCBfX0NTX1BPU0lYX1Y3X0xQNjRfT0ZGNjRfTERGTEFHUyA9IDExNDEK
K2NvbnN0IF9fX05SX3NldHJlc3VpZCA9IDExNworY29uc3QgX19fREVDNjRfTUlOX0VYUF9fID0g
KC0zODIpCitjb25zdCBfTF9TRVQgPSAwCitjb25zdCBfSUZMQV9OVU1fUlhfUVVFVUVTID0gMzIK
K2NvbnN0IF9TT19TTkRMT1dBVCA9IDE5Citjb25zdCBfU0lPQ1NJRlRYUUxFTiA9IDB4ODk0Mwor
Y29uc3QgX1NPX1RJTUVTVEFNUE5TID0gMzUKK2NvbnN0IF9JTlRfRkFTVDMyX01JTiA9ICgtOTIy
MzM3MjAzNjg1NDc3NTgwNy0xKQorY29uc3QgX0ZTX1BPTElDWV9GTEFHU19QQURfOCA9IDB4MDEK
K2NvbnN0IF9TT19CSU5EVE9ERVZJQ0UgPSAyNQorY29uc3QgX1hEUF9GTEFHU19EUlZfTU9ERSA9
ICgxIDw8IDIpCitjb25zdCBfUFRSQUNFX09fVFJBQ0VTWVNHT09EID0gMQorY29uc3QgX1NLRl9B
RF9OTEFUVFJfTkVTVCA9IDE2Citjb25zdCBfUlRBX1RBQkxFID0gMTUKK2NvbnN0IF9TSU9DRFJB
UlAgPSAweDg5NjAKK2NvbnN0IF9QUkVGSVhfVU5TUEVDID0gMAorY29uc3QgX0lDTVA2X0RTVF9V
TlJFQUNIX05PUE9SVCA9IDQKK2NvbnN0IF9QX1BJRCA9IDEKK2NvbnN0IF9fVVRTTkFNRV9TWVNO
QU1FX0xFTkdUSCA9IF9fVVRTTkFNRV9MRU5HVEgKK2NvbnN0IF9fUE9TSVhfTUVNTE9DS19SQU5H
RSA9IDIwMDgwOQorY29uc3QgX19fREVDMTI4X01JTl9FWFBfXyA9ICgtNjE0MikKK2NvbnN0IF9O
TE1fRl9NVUxUSSA9IDB4MDIKK2NvbnN0IF9TT0NLX0NMT0VYRUMgPSA1MjQyODgKK2NvbnN0IF9f
X0ZMVF9NQVhfXyA9IDEuMQorY29uc3QgX1BPU0lYX0ZBRFZfTk9SRVVTRSA9IF9fX1BPU0lYX0ZB
RFZfTk9SRVVTRQorY29uc3QgX19fb3NvY2thZGRyX2RlZmluZWQgPSAxCitjb25zdCBfUFRSQUNF
X09fVFJBQ0VFWEVDID0gMTYKK2NvbnN0IF9VSU5UX0ZBU1Q2NF9XSURUSCA9IDY0Citjb25zdCBf
RVRIX1BfU05BUCA9IDB4MDAwNQorY29uc3QgX19fU0laRU9GX1BUSFJFQURfQkFSUklFUl9UID0g
MzIKK2NvbnN0IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRSA9IDE0Citjb25zdCBfX0JJVFNfVUlP
X0xJTV9IID0gMQorY29uc3QgX1BUUkFDRV9PX1RSQUNFVkZPUktET05FID0gMzIKK2NvbnN0IF9f
U0NfTE9HSU5fTkFNRV9NQVggPSA3MQorY29uc3QgX0VUSEVSTVRVID0gX0VUSF9EQVRBX0xFTgor
Y29uc3QgX1BPU0lYX0ZBRFZfRE9OVE5FRUQgPSBfX19QT1NJWF9GQURWX0RPTlRORUVECitjb25z
dCBfUlRQUk9UX0JBQkVMID0gNDIKK2NvbnN0IF9GX0dFVExFQVNFID0gMTAyNQorY29uc3QgX19T
Q19MRVZFTDRfQ0FDSEVfQVNTT0MgPSAxOTgKK2NvbnN0IF9JRkxBX1ZMQU5fUFJPVE9DT0wgPSA1
Citjb25zdCBfSVBfVU5CTE9DS19TT1VSQ0UgPSAzNworY29uc3QgX1NPX1BBU1NDUkVEID0gMTYK
K2NvbnN0IF9DTE9DS19UQUkgPSAxMQorY29uc3QgX05HUk9VUFNfTUFYID0gNjU1MzYKK2NvbnN0
IF9GSU9TRVRPV04gPSAweDg5MDEKK2NvbnN0IF9fU0NfUElJX09TSV9DT1RTID0gNjMKK2NvbnN0
IF9TSU9DREFSUCA9IDB4ODk1MworY29uc3QgX01BUF9IVUdFX1NISUZUID0gMjYKK2NvbnN0IF9V
SU5UUFRSX01BWCA9ICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkKK2NvbnN0IF9FVEhfUF9XQU5fUFBQ
ID0gMHgwMDA3Citjb25zdCBfSU5fRVhDTF9VTkxJTksgPSAweDA0MDAwMDAwCitjb25zdCBfWDg2
X0NSMF9XUF9CSVQgPSAxNgorY29uc3QgX09fRVhDTCA9IDAyMDAKK2NvbnN0IF9CUEZfTkVHID0g
MHg4MAorY29uc3QgX01TR19OT1NJR05BTCA9IDE2Mzg0Citjb25zdCBfSVBWNl9SWEhPUE9QVFMg
PSBfSVBWNl9IT1BPUFRTCitjb25zdCBfSUZMQV9NQUNWTEFOX01BQ0FERFJfQ09VTlQgPSA2Citj
b25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUyA9IDExMDEKK2NvbnN0IF9QVFJBQ0Vf
R0VUUkVHU0VUID0gMTY5MDAKK2NvbnN0IF9TS0ZfQURfSUZJTkRFWCA9IDgKK2NvbnN0IF9fU1lT
X01NQU5fSCA9IDEKK2NvbnN0IF9NU19BQ1RJVkUgPSAxMDczNzQxODI0Citjb25zdCBfUl9PSyA9
IDQKK2NvbnN0IF9JUFY2X1JFQ1ZGUkFHU0laRSA9IDc3Citjb25zdCBfX19OUl9ydF9zaWdyZXR1
cm4gPSAxNQorY29uc3QgX19fR05VQ19QQVRDSExFVkVMX18gPSAwCitjb25zdCBfX19OUl9nZXRp
dGltZXIgPSAzNgorY29uc3QgX19fU0laRU9GX0lOVF9fID0gNAorY29uc3QgX19fVUlOVF9MRUFT
VDY0X01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfTkRUUEFfVUNBU1RfUFJPQkVT
ID0gMTAKK2NvbnN0IF9JRkxBX0JSUE9SVF9QQUQgPSAyNgorY29uc3QgX19YQlM1X0xQNjRfT0ZG
NjQgPSAxCitjb25zdCBfU0lHQUxSTSA9IDE0Citjb25zdCBfTVNHX09PQiA9IDEKK2NvbnN0IF9S
VE5fVEhST1cgPSA5Citjb25zdCBfVUxPTkdfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX1g4
Nl9DUjRfUFNFX0JJVCA9IDQKK2NvbnN0IF9fU0NfMl9GT1JUX0RFViA9IDQ5Citjb25zdCBfX19O
Ul9zeXNsb2cgPSAxMDMKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0NGTEFHUyA9
IDExMjgKK2NvbnN0IF9fX0dDQ19BVE9NSUNfU0hPUlRfTE9DS19GUkVFID0gMgorY29uc3QgX19f
R0xJQkNfVVNFX0xJQl9FWFQyID0gMQorY29uc3QgX1RJT0NOT1RUWV92YWwgPSAyMTUzOAorY29u
c3QgX0FGX1BIT05FVCA9IF9QRl9QSE9ORVQKK2NvbnN0IF9ORVRMSU5LX05FVEZJTFRFUiA9IDEy
Citjb25zdCBfRVRIX0ZDU19MRU4gPSA0Citjb25zdCBfRlNfWEZMQUdfQVBQRU5EID0gMHgwMDAw
MDAxMAorY29uc3QgX19fTlJfaW9jdGwgPSAxNgorY29uc3QgX0NYODZfQVJSX0JBU0UgPSAweGM0
Citjb25zdCBfQUlfTlVNRVJJQ1NFUlYgPSAweDA0MDAKK2NvbnN0IF9QUl9UU0NfRU5BQkxFID0g
MQorY29uc3QgX1NDSEVEX0lETEUgPSA1Citjb25zdCBfRl9PSyA9IDAKK2NvbnN0IF9fU0NfTkxf
VEVYVE1BWCA9IDEyNAorY29uc3QgX0lQT1BUX01FQVNVUkVNRU5UID0gX0lQT1BUX0RFQk1FQVMK
K2NvbnN0IF9SVF9UQUJMRV9DT01QQVQgPSAyNTIKK2NvbnN0IF9fX05SX2dldHByaW9yaXR5ID0g
MTQwCitjb25zdCBfRlNfTk9DT1dfRkwgPSAweDAwODAwMDAwCitjb25zdCBfSUZMQV9OVU1fVFhf
UVVFVUVTID0gMzEKK2NvbnN0IF9JUFY2X0hPUE9QVFMgPSA1NAorY29uc3QgX19fTE9OR19MT05H
X01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfUlRNX05FV05FSUdIVEJMID0gNjQK
K2NvbnN0IF9UQ1BfUVVFVUVfU0VRID0gMjEKK2NvbnN0IF9JRkxBX0lORk9fU0xBVkVfREFUQSA9
IDUKK2NvbnN0IF9fX1ZFUlNJT05fXyA9ICI4LjMuMCIKK2NvbnN0IF9JRkxBX0dFTkVWRV9JRCA9
IDEKK2NvbnN0IF9JQ01QNl9QQVJBTVBST0JfTkVYVEhFQURFUiA9IDEKK2NvbnN0IF9TWVNfZGVs
ZXRlX21vZHVsZSA9IF9fX05SX2RlbGV0ZV9tb2R1bGUKK2NvbnN0IF9JUFY2X1JUSERSID0gNTcK
K2NvbnN0IF9MTE9OR19NSU4gPSAoLV9MTE9OR19NQVggLSAxKQorY29uc3QgX0VDT01NID0gNzAK
K2NvbnN0IF9TWVNfdGltZXJfZ2V0dGltZSA9IF9fX05SX3RpbWVyX2dldHRpbWUKK2NvbnN0IF9f
X05SX21pZ3JhdGVfcGFnZXMgPSAyNTYKK2NvbnN0IF9JTl9NT1ZFID0gKF9JTl9NT1ZFRF9GUk9N
IHwgX0lOX01PVkVEX1RPKQorY29uc3QgX1BPUlRfUkVRVUVTVF9QUkVBU1NPQ0lBVEUgPSAwCitj
b25zdCBfTl9BWDI1ID0gNQorY29uc3QgX19fT19DTE9FWEVDID0gMDIwMDAwMDAKK2NvbnN0IF9W
V0VSQVNFID0gMTQKK2NvbnN0IF9fX0lOT19UX01BVENIRVNfSU5PNjRfVCA9IDEKK2NvbnN0IF9F
TElCQUNDID0gNzkKK2NvbnN0IF9JUE9QVF9TRUNVUl9VTkNMQVNTID0gMHgwMDAwCitjb25zdCBf
X1BPU0lYX1NIQVJFRF9NRU1PUllfT0JKRUNUUyA9IDIwMDgwOQorY29uc3QgX0FSUEhSRF9JUERE
UCA9IDc3NworY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9TVEFURSA9IDEKK2NvbnN0IF9STElNSVRf
U1RBQ0sgPSAzCitjb25zdCBfUEZfQVNIID0gMTgKK2NvbnN0IF9fX05SX2dldHBlZXJuYW1lID0g
NTIKK2NvbnN0IF9JUFY2X1JFQ1ZFUlIgPSAyNQorY29uc3QgX05fU1RSSVAgPSA0Citjb25zdCBf
SVBQUk9UT19JQ01QID0gMQorY29uc3QgX1BSX1NWRV9WTF9MRU5fTUFTSyA9IDB4ZmZmZgorY29u
c3QgX0ZfR0VUUElQRV9TWiA9IDEwMzIKK2NvbnN0IF9JT1ZfTUFYID0gX19fSU9WX01BWAorY29u
c3QgX1JUUFJPVF9SSVAgPSAxODkKK2NvbnN0IF9fX05SX25ld2ZzdGF0YXQgPSAyNjIKK2NvbnN0
IF9fU1lTX01PVU5UX0ggPSAxCitjb25zdCBfUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUgPSAz
MgorY29uc3QgX0lQUFJPVE9fUFVQID0gMTIKK2NvbnN0IF9FVEhfUF9TTE9XID0gMHg4ODA5Citj
b25zdCBfU1lTX2lub3RpZnlfcm1fd2F0Y2ggPSBfX19OUl9pbm90aWZ5X3JtX3dhdGNoCitjb25z
dCBfVENTRVRBVyA9IDB4NTQwNworY29uc3QgX1BBQ0tFVF9NVUxUSUNBU1QgPSAyCitjb25zdCBf
X19JTlQzMl9NQVhfXyA9IDB4N2ZmZmZmZmYKK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX0NBRF9P
TiA9IDB4ODlBQkNERUYKK2NvbnN0IF9JRkxBX0JPTkRfQURfQUNUT1JfU1lTX1BSSU8gPSAyNAor
Y29uc3QgX1BSX1NFVF9EVU1QQUJMRSA9IDQKK2NvbnN0IF9FVEhfUF9FQ09ORVQgPSAweDAwMTgK
K2NvbnN0IF9TWVNfc2htY3RsID0gX19fTlJfc2htY3RsCitjb25zdCBfTVNfU0hBUkVEID0gMTA0
ODU3NgorY29uc3QgX19fSUZMQV9QUFBfTUFYID0gMgorY29uc3QgX0hBVkVfU1lTX1NUQVRGU19I
ID0gMQorY29uc3QgX1hEUF9GTEFHU19NQVNLID0gKF9YRFBfRkxBR1NfVVBEQVRFX0lGX05PRVhJ
U1QgfCBfWERQX0ZMQUdTX01PREVTKQorY29uc3QgX1RJT0NHUlM0ODUgPSAweDU0MkUKK2NvbnN0
IF9JUFY2X1JFQ1ZQS1RJTkZPID0gNDkKK2NvbnN0IF9IQVZFX0xJTlVYX1JFQk9PVF9IID0gMQor
Y29uc3QgX1RDUF9OT0RFTEFZID0gMQorY29uc3QgX1BSRUZJWF9BRERSRVNTID0gMQorY29uc3Qg
X1JQTV9QQ09fQUREID0gMQorY29uc3QgX1RDUE9QVF9NQVhTRUcgPSAyCitjb25zdCBfU1lTX3Nj
aGVkX2dldGFmZmluaXR5ID0gX19fTlJfc2NoZWRfZ2V0YWZmaW5pdHkKK2NvbnN0IF9fUkVFTlRS
QU5UID0gMQorY29uc3QgX0lQVjZfRFJPUF9NRU1CRVJTSElQID0gX0lQVjZfTEVBVkVfR1JPVVAK
K2NvbnN0IF9fWE9QRU5fWFBHMyA9IDEKK2NvbnN0IF9FTUZJTEUgPSAyNAorY29uc3QgX19TQ19Y
T1BFTl9SRUFMVElNRSA9IDEzMAorY29uc3QgX1RIX1BVU0ggPSAweDA4Citjb25zdCBfSUZMQV9C
Ul9QQUQgPSA0MAorY29uc3QgX0NMRF9LSUxMRUQgPSAyCitjb25zdCBfU0lHVFRPVSA9IDIyCitj
b25zdCBfSUZMQV9WRl9TUE9PRkNISyA9IDQKK2NvbnN0IF9fU0NfTUJfTEVOX01BWCA9IDEwOAor
Y29uc3QgX19fVUlOVDY0X01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfSUZMQV9H
RU5FVkVfVURQX1pFUk9fQ1NVTTZfUlggPSAxMAorY29uc3QgX19fbGludXggPSAxCitjb25zdCBf
UkxJTUlUX05PRklMRSA9IDcKK2NvbnN0IF9JRkxBX0JPTkRfVExCX0RZTkFNSUNfTEIgPSAyNwor
Y29uc3QgX05EVEFfQ09ORklHID0gNQorY29uc3QgX19QT1NJWDJfQ19WRVJTSU9OID0gX19fUE9T
SVgyX1RISVNfVkVSU0lPTgorY29uc3QgX19QT1NJWF9NRU1PUllfUFJPVEVDVElPTiA9IDIwMDgw
OQorY29uc3QgX19TQ19SRUdFWF9WRVJTSU9OID0gMTU2Citjb25zdCBfSUZMQV9JTkVUNl9JQ01Q
NlNUQVRTID0gNgorY29uc3QgX19ORVREQl9IID0gMQorY29uc3QgX0ZJT0FTWU5DID0gMHg1NDUy
Citjb25zdCBfSUZMQV9WWExBTl9MM01JU1MgPSAxNAorY29uc3QgX19fU19JU0dJRCA9IDAyMDAw
Citjb25zdCBfTVNfVkVSQk9TRSA9IDMyNzY4Citjb25zdCBfTkRUQV9HQ19JTlRFUlZBTCA9IDgK
K2NvbnN0IF9FVEhfUF9JUkRBID0gMHgwMDE3Citjb25zdCBfX19OUl9pbm90aWZ5X3JtX3dhdGNo
ID0gMjU1Citjb25zdCBfU1lTX3B3cml0ZXYgPSBfX19OUl9wd3JpdGV2Citjb25zdCBfX19zaWdz
dGFja19kZWZpbmVkID0gMQorY29uc3QgX19fR0NDX0FUT01JQ19QT0lOVEVSX0xPQ0tfRlJFRSA9
IDIKK2NvbnN0IF9fU0NfQ19MQU5HX1NVUFBPUlQgPSAxMzUKK2NvbnN0IF9GX1NFQUxfR1JPVyA9
IDB4MDAwNAorY29uc3QgX05MX01NQVBfU1RBVFVTX1JFU0VSVkVEID0gMQorY29uc3QgX0hBVkVf
TE9GRl9UID0gMQorY29uc3QgX19QT1NJWF9ISVdBVCA9IF9fUE9TSVhfUElQRV9CVUYKK2NvbnN0
IF9QUl9HRVRfVEhQX0RJU0FCTEUgPSA0MgorY29uc3QgX19CSVRTX0JZVEVTV0FQX0ggPSAxCitj
b25zdCBfRl9URVNUID0gMworY29uc3QgX01SRU1BUF9GSVhFRCA9IDIKK2NvbnN0IF9NQVhfQURE
Ul9MRU4gPSA3Citjb25zdCBfX1NDX0xPTkdfQklUID0gMTA2Citjb25zdCBfT05PQ1IgPSAwMDAw
MDIwCitjb25zdCBfU0lfTUVTR1EgPSAtMworY29uc3QgX1BSSWRGQVNUOCA9ICJkIgorY29uc3Qg
X0lGTEFfTUFDU0VDX1BPUlQgPSAyCitjb25zdCBfQ0JBVUQgPSAwMDEwMDE3Citjb25zdCBfU1lT
X3NldGZzdWlkID0gX19fTlJfc2V0ZnN1aWQKK2NvbnN0IF9fU0NfTUFQUEVEX0ZJTEVTID0gMTYK
K2NvbnN0IF9GRklfTE9OR19MT05HX01BWCA9IF9MT05HX0xPTkdfTUFYCitjb25zdCBfTkRfUkFf
RkxBR19PVEhFUiA9IDB4NDAKK2NvbnN0IF9UUkFQX1RSQUNFID0gMgorY29uc3QgX19TQ19SQVdf
U09DS0VUUyA9IDIzNgorY29uc3QgX0ZTX1hGTEFHX1NZTkMgPSAweDAwMDAwMDIwCitjb25zdCBf
SUZMQV9CT05EX0FSUF9JUF9UQVJHRVQgPSA4Citjb25zdCBfX1BPU0lYX1JFR0VYUCA9IDEKK2Nv
bnN0IF9UQ1BfSU5GTyA9IDExCitjb25zdCBfSUZMQV9CUlBPUlRfTUNBU1RfVE9fVUNBU1QgPSAy
OAorY29uc3QgX1BGX05GQyA9IDM5Citjb25zdCBfU19JRklGTyA9IF9fX1NfSUZJRk8KK2NvbnN0
IF9FQUlfTk9UQ0FOQ0VMRUQgPSAtMTAyCitjb25zdCBfUFRSQUNFX09fVFJBQ0VFWElUID0gNjQK
K2NvbnN0IF9TVEFfUk9OTFkgPSAoX1NUQV9QUFNTSUdOQUwgfCBfU1RBX1BQU0pJVFRFUiB8IF9T
VEFfUFBTV0FOREVSIHwgX1NUQV9QUFNFUlJPUiB8IF9TVEFfQ0xPQ0tFUlIgfCBfU1RBX05BTk8g
fCBfU1RBX01PREUgfCBfU1RBX0NMSykKK2NvbnN0IF9UQ1BfRklOX1dBSVQxID0gNAorY29uc3Qg
X0lGTEFfSU5FVDZfU1RBVFMgPSAzCitjb25zdCBfX0lPQ19UWVBFU0hJRlQgPSAoX19JT0NfTlJT
SElGVCtfX0lPQ19OUkJJVFMpCitjb25zdCBfX19GTFQxMjhfTUlOX18gPSAxLjEKK2NvbnN0IF9S
VEZfV0lORE9XID0gMHgwMDgwCitjb25zdCBfUFJfR0VUX0NISUxEX1NVQlJFQVBFUiA9IDM3Citj
b25zdCBfUlROTEdSUF9JUFY0X01ST1VURSA9IDYKK2NvbnN0IF9OT19BRERSRVNTID0gX05PX0RB
VEEKK2NvbnN0IF9TWVNfZmNob3duYXQgPSBfX19OUl9mY2hvd25hdAorY29uc3QgX19fTlJfZ2V0
Y3dkID0gNzkKK2NvbnN0IF9QUkVGSVhfQ0FDSEVJTkZPID0gMgorY29uc3QgX0lQT1BUX09MRU4g
PSAxCitjb25zdCBfU1lTX2ZjaG1vZCA9IF9fX05SX2ZjaG1vZAorY29uc3QgX19TQ19CQ19ESU1f
TUFYID0gMzcKK2NvbnN0IF9TWVNfc2Vtb3AgPSBfX19OUl9zZW1vcAorY29uc3QgX0lGTEFfVkZf
U1RBVFNfUlhfUEFDS0VUUyA9IDAKK2NvbnN0IF9fX1BUSFJFQURfTVVURVhfVVNFX1VOSU9OID0g
MAorY29uc3QgX1RDSUZMVVNIID0gMAorY29uc3QgX0VCQURTTFQgPSA1NworY29uc3QgX0VUSEVS
VFlQRV9SRVZBUlAgPSAweDgwMzUKK2NvbnN0IF9IQVZFX0VQT0xMX0NSRUFURTEgPSAxCitjb25z
dCBfX0JJVFNfVFlQRVNfX19MT0NBTEVfVF9IID0gMQorY29uc3QgX19fR05VQ19fID0gOAorY29u
c3QgX1NDTmRMRUFTVDggPSAiaGhkIgorY29uc3QgX0IwID0gMDAwMDAwMAorY29uc3QgX0hBVkVf
U1lTX0lOT1RJRllfSCA9IDEKK2NvbnN0IF9fX1NfSUZESVIgPSAwMDQwMDAwCitjb25zdCBfVENB
X1JPT1RfVElNRV9ERUxUQSA9IDQKK2NvbnN0IF9DTE9ORV9USFJFQUQgPSAweDAwMDEwMDAwCitj
b25zdCBfTVNfUE9TSVhBQ0wgPSA2NTUzNgorY29uc3QgX1BBVEhfTUFYID0gNDA5NgorY29uc3Qg
X0lGTEFfVU5TUEVDID0gMAorY29uc3QgX19fTlJfcmVib290ID0gMTY5Citjb25zdCBfU09MX0lQ
ID0gMAorY29uc3QgX1RVTl9GX1VGTyA9IDB4MTAKK2NvbnN0IF9fX0ZMVDY0X0hBU19ERU5PUk1f
XyA9IDEKK2NvbnN0IF9JUFRPU19QUkVDX0NSSVRJQ19FQ1AgPSBfSVBUT1NfQ0xBU1NfQ1M1Citj
b25zdCBfSU5fTE9PUEJBQ0tORVQgPSAxMjcKK2NvbnN0IF9TT0xfQUFMID0gMjY1Citjb25zdCBf
U1lTX3NldHRpbWVvZmRheSA9IF9fX05SX3NldHRpbWVvZmRheQorY29uc3QgX0lQUFJPVE9fSURQ
ID0gMjIKK2NvbnN0IF9fU0NfMl9MT0NBTEVERUYgPSA1MgorY29uc3QgX0lGTEFfVkZfU1RBVFNf
UEFEID0gNgorY29uc3QgX0FGX0lORVQgPSBfUEZfSU5FVAorY29uc3QgX0ZfU0VUTEsgPSBfRl9T
RVRMSzY0Citjb25zdCBfQ1g4Nl9QQ1IxID0gMHhmMAorY29uc3QgX19fTlJfbHJlbW92ZXhhdHRy
ID0gMTk4Citjb25zdCBfSVBPUFRfTk9PUCA9IF9JUE9QVF9OT1AKK2NvbnN0IF9SVE1TR19ORVdE
RVZJQ0UgPSAweDExCitjb25zdCBfSEFWRV9TRVRYQVRUUiA9IDEKK2NvbnN0IF9GU19FTkNSWVBU
SU9OX01PREVfQUVTXzI1Nl9DVFMgPSA0Citjb25zdCBfX0NTX1Y1X1dJRFRIX1JFU1RSSUNURURf
RU5WUyA9IDQKK2NvbnN0IF9TX0lGU09DSyA9IF9fX1NfSUZTT0NLCitjb25zdCBfX19OUl9zaWdu
YWxmZDQgPSAyODkKK2NvbnN0IF9fSVNPQzk5X1NPVVJDRSA9IDEKK2NvbnN0IF9fX0ZMVF9ESUdf
XyA9IDYKK2NvbnN0IF9fX05SX2dldHBpZCA9IDM5Citjb25zdCBfVUxMT05HX1dJRFRIID0gNjQK
K2NvbnN0IF9fU0NfWE9QRU5fWFBHMiA9IDk4Citjb25zdCBfU1lTX2tpbGwgPSBfX19OUl9raWxs
Citjb25zdCBfQjExMCA9IDAwMDAwMDMKK2NvbnN0IF9UQ1BfUkVQQUlSX1FVRVVFID0gMjAKK2Nv
bnN0IF9SVE5MR1JQX0lQVjRfSUZBRERSID0gNQorY29uc3QgX19fRlhTUl9fID0gMQorY29uc3Qg
X01BQ1ZMQU5fTU9ERV9QUklWQVRFID0gMQorY29uc3QgX19fTlJfc3RhdHggPSAzMzIKK2NvbnN0
IF9fX1NJWkVfV0lEVEhfXyA9IDY0Citjb25zdCBfX1BPU0lYX1RUWV9OQU1FX01BWCA9IDkKK2Nv
bnN0IF9JRkxBX0JPTkRfQURfQUNUT1JfU1lTVEVNID0gMjYKK2NvbnN0IF9TT19HRVRfRklMVEVS
ID0gX1NPX0FUVEFDSF9GSUxURVIKK2NvbnN0IF9fVVRJTUVfSCA9IDEKK2NvbnN0IF9TVEFUWF9C
QVNJQ19TVEFUUyA9IDB4MDdmZgorY29uc3QgX1NZU191dGltZW5zYXQgPSBfX19OUl91dGltZW5z
YXQKK2NvbnN0IF9fU0NfMl9DSEFSX1RFUk0gPSA5NQorY29uc3QgX1RVTlNFVE9XTkVSX3ZhbCA9
IDEwNzQwMjU2NzYKK2NvbnN0IF9QVEhSRUFEX1NUQUNLX01JTiA9IDE2Mzg0Citjb25zdCBfU0lH
UFJPRiA9IDI3Citjb25zdCBfX1NDX0xJTkVfTUFYID0gNDMKK2NvbnN0IF9fX1NJR0VWX01BWF9T
SVpFID0gNjQKK2NvbnN0IF9IQVZFX1NFVEVOViA9IDEKK2NvbnN0IF9fU0NfU1lTVEVNX0RBVEFC
QVNFID0gMTYyCitjb25zdCBfRlNfWEZMQUdfTk9EVU1QID0gMHgwMDAwMDA4MAorY29uc3QgX1NZ
U190aW1lcl9jcmVhdGUgPSBfX19OUl90aW1lcl9jcmVhdGUKK2NvbnN0IF9fUENfTElOS19NQVgg
PSAwCitjb25zdCBfVENQT1BUX1dJTkRPVyA9IDMKK2NvbnN0IF9fQklUU19QT1NJWDJfTElNX0gg
PSAxCitjb25zdCBfX19VSU5UX0xFQVNUMzJfTUFYX18gPSAweGZmZmZmZmZmCitjb25zdCBfX19O
Ul9tcV9ub3RpZnkgPSAyNDQKK2NvbnN0IF9JUFBPUlRfREFZVElNRSA9IDEzCitjb25zdCBfU1lT
X3N0YXQgPSBfX19OUl9zdGF0Citjb25zdCBfUEFSRU5CID0gMDAwMDQwMAorY29uc3QgX0ZBTExP
Q19GTF9LRUVQX1NJWkUgPSAweDAxCitjb25zdCBfX1NDX1NDSEFSX01BWCA9IDExMQorY29uc3Qg
X0lGTEFfQlJfTUNBU1RfUVVFUklFUiA9IDI1Citjb25zdCBfTUFEVl9IV1BPSVNPTiA9IDEwMAor
Y29uc3QgX1NPX0NPT0tJRSA9IDU3Citjb25zdCBfX1BPU0lYX0FTWU5DX0lPID0gMQorY29uc3Qg
X1JUX1NDT1BFX05PV0hFUkUgPSAyNTUKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfQURfQUNUT1Jf
T1BFUl9QT1JUX1NUQVRFID0gNworY29uc3QgX05EX09QVF9QSV9GTEFHX09OTElOSyA9IDB4ODAK
K2NvbnN0IF9fU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVEID0gODIKK2NvbnN0IF9TWVNfc2V0ZG9t
YWlubmFtZSA9IF9fX05SX3NldGRvbWFpbm5hbWUKK2NvbnN0IF9GX0dFVE9XTl9FWCA9IF9fX0Zf
R0VUT1dOX0VYCitjb25zdCBfRVNUQUxFID0gMTE2Citjb25zdCBfX19OUl9mdXRleCA9IDIwMgor
Y29uc3QgX0lGRl9ERVRBQ0hfUVVFVUUgPSAweDA0MDAKK2NvbnN0IF9JRkxBX0xJTktNT0RFID0g
MTcKK2NvbnN0IF9JUE9QVF9TRUNVUklUWSA9IDEzMAorY29uc3QgX0lGTEFfQlJfU1RQX1NUQVRF
ID0gNQorY29uc3QgX19QQ19OQU1FX01BWCA9IDMKK2NvbnN0IF9JRkxBX0dFTkVWRV9VRFBfWkVS
T19DU1VNNl9UWCA9IDkKK2NvbnN0IF9TSUdDT05UID0gMTgKK2NvbnN0IF9fX05SX2dldHBtc2cg
PSAxODEKK2NvbnN0IF9TWVNfZmNoZGlyID0gX19fTlJfZmNoZGlyCitjb25zdCBfSUZGX1BPUlRT
RUwgPSA4MTkyCitjb25zdCBfU09fQVRUQUNIX1JFVVNFUE9SVF9DQlBGID0gNTEKK2NvbnN0IF9U
Q0FfUk9PVF9GTEFHUyA9IDIKK2NvbnN0IF9fU0NfVjZfSUxQMzJfT0ZGQklHID0gMTc3Citjb25z
dCBfTUFYX0NBTk9OID0gMjU1Citjb25zdCBfSUZMQV9CT05EX1hNSVRfSEFTSF9QT0xJQ1kgPSAx
NAorY29uc3QgX0VUSEVSX0NSQ19MRU4gPSA0Citjb25zdCBfSUZMQV9JTkZPX0RBVEEgPSAyCitj
b25zdCBfX19MSU5LX1hTVEFUU19UWVBFX01BWCA9IDIKK2NvbnN0IF9OVEZfUFJPWFkgPSAweDA4
Citjb25zdCBfUlRQUk9UX0VJR1JQID0gMTkyCitjb25zdCBfX0NTX1Y3X0VOViA9IDExNDkKK2Nv
bnN0IF9BSV9JRE4gPSAweDAwNDAKK2NvbnN0IF9TX0lST1RIID0gKF9TX0lSR1JQID4+IDMpCitj
b25zdCBfUlROTEdSUF9OT05FID0gMAorY29uc3QgX0lQUFJPVE9fR1JFID0gNDcKK2NvbnN0IF9X
RVhJVEVEID0gNAorY29uc3QgX1BBQ0tFVF9UWF9USU1FU1RBTVAgPSAxNgorY29uc3QgX0VQT0xM
SFVQID0gMTYKK2NvbnN0IF9MVF9PQkpESVIgPSAiLmxpYnMvIgorY29uc3QgX19fUlRBWF9NQVgg
PSAxOAorY29uc3QgX1BBQ0tFVF9IRFJMRU4gPSAxMQorY29uc3QgX0JQRl9MU0ggPSAweDYwCitj
b25zdCBfVENQT0xFTl9TQUNLX1BFUk1JVFRFRCA9IDIKK2NvbnN0IF9QT0xMX1BSSSA9IDUKK2Nv
bnN0IF9fX05SX3NldHJldWlkID0gMTEzCitjb25zdCBfRlNfWEZMQUdfTk9ERUZSQUcgPSAweDAw
MDAyMDAwCitjb25zdCBfX1NDXzJfUEJTID0gMTY4Citjb25zdCBfU0lPQ1NJRkZMQUdTID0gMHg4
OTE0Citjb25zdCBfX19GX0dFVE9XTiA9IDkKK2NvbnN0IF9fX0lGTEFfQk9ORF9BRF9JTkZPX01B
WCA9IDYKK2NvbnN0IF9CUEZfTUFYSU5TTlMgPSA0MDk2Citjb25zdCBfRUFJX0lETl9FTkNPREUg
PSAtMTA1Citjb25zdCBfSUZMQV9WRl9TVEFUU19UWF9QQUNLRVRTID0gMQorY29uc3QgX1JXSF9X
UklURV9MSUZFX01FRElVTSA9IDMKK2NvbnN0IF9GSUxFX0RFRFVQRV9SQU5HRV9TQU1FID0gMAor
Y29uc3QgX0lQUFJPVE9fVENQID0gNgorY29uc3QgX1RJT0NNX0NEID0gX1RJT0NNX0NBUgorY29u
c3QgX0IxMzQgPSAwMDAwMDA0Citjb25zdCBfRUFJX0ZBTUlMWSA9IC02Citjb25zdCBfSUZMQV9C
UlBPUlRfQkNBU1RfRkxPT0QgPSAzMAorY29uc3QgX1NZU19mbG9jayA9IF9fX05SX2Zsb2NrCitj
b25zdCBfSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0ggPSAxCitjb25zdCBfRVRIX1BfUFJQID0gMHg4
OEZCCitjb25zdCBfT0ZJTEwgPSAwMDAwMTAwCitjb25zdCBfX0NTX0xGUzY0X0xJQlMgPSAxMDA2
Citjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfWFRTID0gMQorY29uc3QgX0lGTEFf
R1RQX0ZEMCA9IDEKK2NvbnN0IF9JRkxBX0dUUF9GRDEgPSAyCitjb25zdCBfSEFWRV9TWU5DX0ZJ
TEVfUkFOR0UgPSAxCitjb25zdCBfSUZBX0xPQ0FMID0gMgorY29uc3QgX05EX09QVF9QSV9GTEFH
X1JBRERSID0gMHgyMAorY29uc3QgX1RDUF9ERUZFUl9BQ0NFUFQgPSA5Citjb25zdCBfTUNBU1Rf
Sk9JTl9TT1VSQ0VfR1JPVVAgPSA0NgorY29uc3QgX1NZU19yZXF1ZXN0X2tleSA9IF9fX05SX3Jl
cXVlc3Rfa2V5Citjb25zdCBfSUNNUDZfUEFDS0VUX1RPT19CSUcgPSAyCitjb25zdCBfWDg2X0NS
NF9QQ0VfQklUID0gOAorY29uc3QgX0VBSV9CQURGTEFHUyA9IC0xCitjb25zdCBfX0NTX1hCUzVf
TFBCSUdfT0ZGQklHX0xJTlRGTEFHUyA9IDExMTUKK2NvbnN0IF9VVElNRV9OT1cgPSAoKDEgPDwg
MzApIC0gMSkKK2NvbnN0IF9fUE9TSVhfTUFYX0lOUFVUID0gMjU1Citjb25zdCBfSUZMQV9CUlBP
UlRfSUQgPSAxNworY29uc3QgX0VUSF9EQVRBX0xFTiA9IDE1MDAKK2NvbnN0IF9fX1JMSU1JVF9T
SUdQRU5ESU5HID0gMTEKK2NvbnN0IF9TWVNfaW9fZGVzdHJveSA9IF9fX05SX2lvX2Rlc3Ryb3kK
K2NvbnN0IF9TT19JTkNPTUlOR19OQVBJX0lEID0gNTYKK2NvbnN0IF9FVEhfUF9QUFBfRElTQyA9
IDB4ODg2MworY29uc3QgX1RDUE9MRU5fTUFYU0VHID0gNAorY29uc3QgX0VUSF9QXzgwMl8zX01J
TiA9IDB4MDYwMAorY29uc3QgX0FSUE9QX1JSRVBMWSA9IDQKK2NvbnN0IF9JUFY2X1VOSUNBU1Rf
SE9QUyA9IDE2Citjb25zdCBfTkVUTElOS19OT19FTk9CVUZTID0gNQorY29uc3QgX19fTlJfbmFt
ZV90b19oYW5kbGVfYXQgPSAzMDMKK2NvbnN0IF9fX0ZMVDMyX01BWF9fID0gMS4xCitjb25zdCBf
U1lTX3RpbWVyZmRfY3JlYXRlID0gX19fTlJfdGltZXJmZF9jcmVhdGUKK2NvbnN0IF9JTl9NT1ZF
RF9UTyA9IDB4MDAwMDAwODAKK2NvbnN0IF9TWVNfZ2V0dGlkID0gX19fTlJfZ2V0dGlkCitjb25z
dCBfX1BPU0lYX0lQVjYgPSAyMDA4MDkKK2NvbnN0IF9BRl9NUExTID0gX1BGX01QTFMKK2NvbnN0
IF9TWVNfZmFsbG9jYXRlID0gX19fTlJfZmFsbG9jYXRlCitjb25zdCBfQUZfV0FOUElQRSA9IF9Q
Rl9XQU5QSVBFCitjb25zdCBfVENQX1RISU5fTElORUFSX1RJTUVPVVRTID0gMTYKK2NvbnN0IF9f
X05SX3NldGRvbWFpbm5hbWUgPSAxNzEKK2NvbnN0IF9fX05MTVNHRVJSX0FUVFJfTUFYID0gNAor
Y29uc3QgX19fRkxUMTI4X0hBU19ERU5PUk1fXyA9IDEKK2NvbnN0IF9FVEhFUlRZUEVfUFVQID0g
MHgwMjAwCitjb25zdCBfX0JJVFNfUE9TSVgxX0xJTV9IID0gMQorY29uc3QgX19fR0xJQkNfVVNF
X0lFQ182MDU1OV9UWVBFU19FWFQgPSAxCitjb25zdCBfSVBWNl9SRUNWRFNUT1BUUyA9IDU4Citj
b25zdCBfX19OUl9zZWN1cml0eSA9IDE4NQorY29uc3QgX0FSUEhSRF9SQVdJUCA9IDUxOQorY29u
c3QgX0VUSF9QXzgwMl9FWDEgPSAweDg4QjUKK2NvbnN0IF9JRkFfRl9EQURGQUlMRUQgPSAweDA4
Citjb25zdCBfU0NOeDggPSAiaGh4IgorY29uc3QgX0NTSUdOQUwgPSAweDAwMDAwMGZmCitjb25z
dCBfX19OUl9hY2NlcHQ0ID0gMjg4Citjb25zdCBfTklfTlVNRVJJQ0hPU1QgPSAxCitjb25zdCBf
UlROSF9GX1VOUkVTT0xWRUQgPSAzMgorY29uc3QgX0I5NjAwID0gMDAwMDAxNQorY29uc3QgX05M
X01NQVBfU1RBVFVTX1VOVVNFRCA9IDAKK2NvbnN0IF9TT19MT0NLX0ZJTFRFUiA9IDQ0Citjb25z
dCBfSUZMQV9WRl9NQUMgPSAxCitjb25zdCBfSUZMQV9WWExBTl9SRU1DU1VNX1RYID0gMjEKK2Nv
bnN0IF9VQ0hBUl9NQVggPSAoX1NDSEFSX01BWCAqIDIgKyAxKQorY29uc3QgX0lGTEFfQk9ORF9B
UlBfVkFMSURBVEUgPSA5Citjb25zdCBfSVBQUk9UT19NUExTID0gMTM3Citjb25zdCBfSUZMQV9N
SU5fTVRVID0gNTAKK2NvbnN0IF9FVEhfUF9JUFY2ID0gMHg4NkRECitjb25zdCBfRVRIX1BfQUFS
UCA9IDB4ODBGMworY29uc3QgX1NZU19zY2hlZF9zZXRwYXJhbSA9IF9fX05SX3NjaGVkX3NldHBh
cmFtCitjb25zdCBfQVRGX1BVQkwgPSAweDA4Citjb25zdCBfV0NPUkVGTEFHID0gX19fV0NPUkVG
TEFHCitjb25zdCBfVElPQ0dXSU5TWiA9IDB4NTQxMworY29uc3QgX19fVVNFX1hPUEVOMks4WFNJ
ID0gMQorY29uc3QgX1BSSWk4ID0gImkiCitjb25zdCBfQVJQSFJEX0xPT1BCQUNLID0gNzcyCitj
b25zdCBfX19HQ0NfSUVDXzU1OV9DT01QTEVYID0gMgorY29uc3QgX1NPX0JST0FEQ0FTVCA9IDYK
K2NvbnN0IF9fX0dMSUJDX01JTk9SX18gPSAyOAorY29uc3QgX19TQ19TVFJFQU1TID0gMTc0Citj
b25zdCBfU1lTX3NobWF0ID0gX19fTlJfc2htYXQKK2NvbnN0IF9JUFZMQU5fTU9ERV9MMiA9IDAK
K2NvbnN0IF9fX01NWF9fID0gMQorY29uc3QgX0IxNTAgPSAwMDAwMDA1Citjb25zdCBfUE9TSVhf
RkFEVl9XSUxMTkVFRCA9IDMKK2NvbnN0IF9JRkxBX1ZYTEFOX1JTQyA9IDEyCitjb25zdCBfUEFD
S0VUX0JST0FEQ0FTVCA9IDEKK2NvbnN0IF9QRl9BVE1QVkMgPSA4Citjb25zdCBfU1lTX3ByZWFk
djIgPSBfX19OUl9wcmVhZHYyCitjb25zdCBfSU5fQ0xBU1NDX05FVCA9IDB4ZmZmZmZmMDAKK2Nv
bnN0IF9QQUNLRVRfQ09QWV9USFJFU0ggPSA3Citjb25zdCBfRVRIX1pMRU4gPSA2MAorY29uc3Qg
X1RDUE9QVF9FT0wgPSAwCitjb25zdCBfSU42X0FERFJfR0VOX01PREVfUkFORE9NID0gMworY29u
c3QgX0lGTEFfTUFDU0VDX0VOQ09ESU5HX1NBID0gNgorY29uc3QgX19DU19QT1NJWF9WN19MUDY0
X09GRjY0X0xJQlMgPSAxMTQyCitjb25zdCBfRVRIX1BfUFVQQVQgPSAweDAyMDEKK2NvbnN0IF9T
WVNfZ2V0cnVzYWdlID0gX19fTlJfZ2V0cnVzYWdlCitjb25zdCBfX1BPU0lYX1RIUkVBRF9BVFRS
X1NUQUNLQUREUiA9IDIwMDgwOQorY29uc3QgX0lGTEFfUE9SVF9QUk9GSUxFID0gMgorY29uc3Qg
X19fRkxUNjRfSEFTX1FVSUVUX05BTl9fID0gMQorY29uc3QgX1VJTlQ2NF9XSURUSCA9IDY0Citj
b25zdCBfU1lTX2tjbXAgPSBfX19OUl9rY21wCitjb25zdCBfSU5fTU9WRURfRlJPTSA9IDB4MDAw
MDAwNDAKK2NvbnN0IF9fVVRTTkFNRV9NQUNISU5FX0xFTkdUSCA9IF9fVVRTTkFNRV9MRU5HVEgK
K2NvbnN0IF9JUFY2X0xFQVZFX0dST1VQID0gMjEKK2NvbnN0IF9TWVNfdW5saW5rID0gX19fTlJf
dW5saW5rCitjb25zdCBfSEFWRV9TVFJTSUdOQUwgPSAxCitjb25zdCBfX1BDX0NIT1dOX1JFU1RS
SUNURUQgPSA2Citjb25zdCBfX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgPSAxMzEKK2NvbnN0
IF9FVEhfUF9JQk9FID0gMHg4OTE1Citjb25zdCBfT19GU1lOQyA9IF9PX1NZTkMKK2NvbnN0IF9S
VE1fTkVXUlVMRSA9IDMyCitjb25zdCBfSUZMQV9YRFBfRkxBR1MgPSAzCitjb25zdCBfU0lPQ0dJ
RkNPVU5UID0gMHg4OTM4Citjb25zdCBfUEFDS0VUX09VVEdPSU5HID0gNAorY29uc3QgX0lQVE9T
X1BSRUNfTUFTSyA9IF9JUFRPU19DTEFTU19NQVNLCitjb25zdCBfX19OUl9yZW5hbWVhdDIgPSAz
MTYKK2NvbnN0IF9fU0NfSVBWNiA9IDIzNQorY29uc3QgX1RDUF9FU1RBQkxJU0hFRCA9IDEKK2Nv
bnN0IF9BUlBIUkRfQVJDTkVUID0gNworY29uc3QgX1RJT0NTRVJTV0lMRCA9IDB4NTQ1NQorY29u
c3QgX0VUSF9QX1BVUCA9IDB4MDIwMAorY29uc3QgX19QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NI
RURVTElORyA9IDIwMDgwOQorY29uc3QgX1NJR0VWX1RIUkVBRCA9IDIKK2NvbnN0IF9IQVZFX1VU
SU1FX0ggPSAxCitjb25zdCBfSVBfUkVDVk9QVFMgPSA2Citjb25zdCBfUFJfU0VUX01NX1NUQVJU
X0NPREUgPSAxCitjb25zdCBfX19DUFVfU0VUU0laRSA9IDEwMjQKK2NvbnN0IF9QRl9ERUNuZXQg
PSAxMgorY29uc3QgX1RJT0NNX0NBUiA9IDB4MDQwCitjb25zdCBfU1lTX3NobWdldCA9IF9fX05S
X3NobWdldAorY29uc3QgX1JUTV9GX0xPT0tVUF9UQUJMRSA9IDB4MTAwMAorY29uc3QgX1JUUFJP
VF9OVEsgPSAxNQorY29uc3QgX19fTlJfZXZlbnRmZDIgPSAyOTAKK2NvbnN0IF9JRkxBX0VWRU5U
X0JPTkRJTkdfT1BUSU9OUyA9IDYKK2NvbnN0IF9TSU9DR0lGRU5DQVAgPSAweDg5MjUKK2NvbnN0
IF9fX05SX3VubGlua2F0ID0gMjYzCitjb25zdCBfSUZMQV9CUl9WTEFOX0ZJTFRFUklORyA9IDcK
K2NvbnN0IF9NU19BU1lOQyA9IDEKK2NvbnN0IF9fSU9DX1JFQUQgPSAyCitjb25zdCBfX1RIUkVB
RF9TSEFSRURfVFlQRVNfSCA9IDEKK2NvbnN0IF9fX05SX3NldF9yb2J1c3RfbGlzdCA9IDI3Mwor
Y29uc3QgX0lGTEFfR1JPVVAgPSAyNworY29uc3QgX1NDSEVEX0RFQURMSU5FID0gNgorY29uc3Qg
X0VMSUJFWEVDID0gODMKK2NvbnN0IF9XQ0hBUl9NSU4gPSBfX19XQ0hBUl9NSU4KK2NvbnN0IF9f
X05SX3B1dHBtc2cgPSAxODIKK2NvbnN0IF9fX05SX2FyY2hfcHJjdGwgPSAxNTgKK2NvbnN0IF9N
U0dfQ1RSVU5DID0gOAorY29uc3QgX0lGTEFfQlJfUk9PVF9QQVRIX0NPU1QgPSAxMworY29uc3Qg
X01TR19TWU4gPSAxMDI0Citjb25zdCBfSEFWRV9MSU5VWF9ORVRMSU5LX0ggPSAxCitjb25zdCBf
SEFWRV9TUExJQ0UgPSAxCitjb25zdCBfUEtFWV9ESVNBQkxFX1dSSVRFID0gMHgyCitjb25zdCBf
RlBFX0ZMVERJViA9IDMKK2NvbnN0IF9fX05SX3BrZXlfbXByb3RlY3QgPSAzMjkKK2NvbnN0IF9J
UFBPUlRfVEVMTkVUID0gMjMKK2NvbnN0IF9SVEFfU1BPUlQgPSAyOAorY29uc3QgX19YT1BFTl9W
RVJTSU9OID0gNzAwCitjb25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElCUyA9IDExMDIKK2Nv
bnN0IF9SVE5MR1JQX05FSUdIID0gMworY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9M
REZMQUdTID0gMTExNworY29uc3QgX1VJTlRfRkFTVDhfV0lEVEggPSA4Citjb25zdCBfVENQT1BU
X05PUCA9IDEKK2NvbnN0IF9USU1FX0JBRCA9IF9USU1FX0VSUk9SCitjb25zdCBfUlRNX0RFTEFE
RFJMQUJFTCA9IDczCitjb25zdCBfX1BPU0lYX05PX1RSVU5DID0gMQorY29uc3QgX1BST1RfV1JJ
VEUgPSAweDIKK2NvbnN0IF9fX05SX2Vwb2xsX3B3YWl0ID0gMjgxCitjb25zdCBfQVJQSFJEX1NJ
VCA9IDc3NgorY29uc3QgX1JUTV9ORVdQUkVGSVggPSA1MgorY29uc3QgX19fUkxJTUlUX01FTUxP
Q0sgPSA4Citjb25zdCBfU1lTX2xvb2t1cF9kY29va2llID0gX19fTlJfbG9va3VwX2Rjb29raWUK
K2NvbnN0IF9fX09SREVSX0xJVFRMRV9FTkRJQU5fXyA9IDEyMzQKK2NvbnN0IF9TWVNfbWtkaXJh
dCA9IF9fX05SX21rZGlyYXQKK2NvbnN0IF9UQ1BPTEVOX1dJTkRPVyA9IDMKK2NvbnN0IF9FVEhf
UF9USVBDID0gMHg4OENBCitjb25zdCBfX1BPU0lYX1RIUkVBRF9LRVlTX01BWCA9IDEyOAorY29u
c3QgX0FUX0VNUFRZX1BBVEggPSAweDEwMDAKK2NvbnN0IF9fX05SX3NjaGVkX3lpZWxkID0gMjQK
K2NvbnN0IF9YRFBfRkxBR1NfTU9ERVMgPSAoX1hEUF9GTEFHU19TS0JfTU9ERSB8IF9YRFBfRkxB
R1NfRFJWX01PREUgfCBfWERQX0ZMQUdTX0hXX01PREUpCitjb25zdCBfSEFWRV9JTk9USUZZX1JN
X1dBVENIID0gMQorY29uc3QgX19TQ19TVFJFQU1fTUFYID0gNQorY29uc3QgX19fRl9HRVRTSUcg
PSAxMQorY29uc3QgX0VNRURJVU1UWVBFID0gMTI0Citjb25zdCBfU1RBX0NMSyA9IDB4ODAwMAor
Y29uc3QgX0lQVE9TX01JTkNPU1QgPSBfSVBUT1NfTE9XQ09TVAorY29uc3QgX19fRkxUNjRfREVO
T1JNX01JTl9fID0gMS4xCitjb25zdCBfUkxJTTY0X0lORklOSVRZID0gMHhmZmZmZmZmZmZmZmZm
ZmZmCitjb25zdCBfRkZJX1VOSVg2NCA9IDIKK2NvbnN0IF9SVE5MR1JQX0lQVjRfTkVUQ09ORiA9
IDI0Citjb25zdCBfUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCA9ICgxIDw8IDIpCitjb25zdCBfSU5U
MzJfTUFYID0gKDIxNDc0ODM2NDcpCitjb25zdCBfRVRIRVJUWVBFX0lQVjYgPSAweDg2ZGQKK2Nv
bnN0IF9UQ1BPUFRfVFNUQU1QX0hEUiA9IChfVENQT1BUX05PUDw8MjR8X1RDUE9QVF9OT1A8PDE2
fF9UQ1BPUFRfVElNRVNUQU1QPDw4fF9UQ1BPTEVOX1RJTUVTVEFNUCkKK2NvbnN0IF9JRkxBX1NU
QVRTX0xJTktfWFNUQVRTID0gMgorY29uc3QgX09fUkRPTkxZID0gMDAKK2NvbnN0IF9fX05SX2dl
dHJlc3VpZCA9IDExOAorY29uc3QgX1BUUkFDRV9FVkVOVF9DTE9ORSA9IDMKK2NvbnN0IF9BUlBI
UkRfUElNUkVHID0gNzc5Citjb25zdCBfSVBWNl9NVUxUSUNBU1RfSE9QUyA9IDE4Citjb25zdCBf
X19OUl9saW5rYXQgPSAyNjUKK2NvbnN0IF9GU19OT0FUSU1FX0ZMID0gMHgwMDAwMDA4MAorY29u
c3QgX19TQ19VTE9OR19NQVggPSAxMTcKK2NvbnN0IF9JUFRPU19DTEFTU19ERUZBVUxUID0gX0lQ
VE9TX0NMQVNTX0NTMAorY29uc3QgX1NZU19zaG1kdCA9IF9fX05SX3NobWR0Citjb25zdCBfX19O
Ul9vcGVuID0gMgorY29uc3QgX1RJTUVfT0sgPSAwCitjb25zdCBfQlBGX1RYQSA9IDB4ODAKK2Nv
bnN0IF9fU0NfQ0hJTERfTUFYID0gMQorY29uc3QgX1NZU19hZGRfa2V5ID0gX19fTlJfYWRkX2tl
eQorY29uc3QgX1NURENfSEVBREVSUyA9IDEKK2NvbnN0IF9NQVBfQU5PTllNT1VTID0gMHgyMAor
Y29uc3QgX1g4Nl9DUjRfREVfQklUID0gMworY29uc3QgX1ZJTlRSID0gMAorY29uc3QgX01JTlNJ
R1NUS1NaID0gMjA0OAorY29uc3QgX0lQVE9TX0xPV0NPU1QgPSAweDAyCitjb25zdCBfTUFEVl9N
RVJHRUFCTEUgPSAxMgorY29uc3QgX0lGTEFfVFVOX1BFUlNJU1QgPSA2Citjb25zdCBfSEFWRV9O
RVRJTkVUX0lDTVA2X0ggPSAxCitjb25zdCBfSUZMQV9CUlBPUlRfU1RBVEUgPSAxCitjb25zdCBf
Q1BVX1NFVFNJWkUgPSBfX19DUFVfU0VUU0laRQorY29uc3QgX0lQVkVSU0lPTiA9IDQKK2NvbnN0
IF9TWVNfZXhpdF9ncm91cCA9IF9fX05SX2V4aXRfZ3JvdXAKK2NvbnN0IF9USU9DQ0JSSyA9IDB4
NTQyOAorY29uc3QgX19fTFA2NF9PRkY2NF9MREZMQUdTID0gIi1tNjQiCitjb25zdCBfUEFDS0VU
X1ZORVRfSERSID0gMTUKK2NvbnN0IF9fU0NfVFJBQ0VfRVZFTlRfTkFNRV9NQVggPSAyNDIKK2Nv
bnN0IF9QUl9TVkVfU0VUX1ZMID0gNTAKK2NvbnN0IF9TWVNfZm9yayA9IF9fX05SX2ZvcmsKK2Nv
bnN0IF9FVEhFUlRZUEVfVFJBSUwgPSAweDEwMDAKK2NvbnN0IF9SVEZfUkVKRUNUID0gMHgwMjAw
Citjb25zdCBfQ0xPTkVfRlMgPSAweDAwMDAwMjAwCitjb25zdCBfVUlOVDMyX1dJRFRIID0gMzIK
K2NvbnN0IF9TSU9DR0lGVFhRTEVOID0gMHg4OTQyCitjb25zdCBfTkRBX1ZMQU4gPSA1Citjb25z
dCBfUFRSQUNFX0dFVFJFR1MgPSAxMgorY29uc3QgX19QT1NJWF9GU1lOQyA9IDIwMDgwOQorY29u
c3QgX1NZU19nZXR4YXR0ciA9IF9fX05SX2dldHhhdHRyCitjb25zdCBfU0lPQ1NJRkFERFIgPSAw
eDg5MTYKK2NvbnN0IF9TWVNfbXByb3RlY3QgPSBfX19OUl9tcHJvdGVjdAorY29uc3QgX19QT1NJ
WF9OQU1FX01BWCA9IDE0Citjb25zdCBfX1BPU0lYX09QRU5fTUFYID0gMjAKK2NvbnN0IF9UQ1NF
VEFGID0gMHg1NDA4Citjb25zdCBfVENQX01ENVNJR19NQVhLRVlMRU4gPSA4MAorY29uc3QgX0JQ
Rl9ESVYgPSAweDMwCitjb25zdCBfSVBWNl9BVVRISERSID0gMTAKK2NvbnN0IF9NU0dfVFJVTkMg
PSAzMgorY29uc3QgX19QT1NJWDJfQ0hBUl9URVJNID0gMjAwODA5Citjb25zdCBfU0lHQUJSVCA9
IDYKK2NvbnN0IF9TWVNfcmVhZCA9IF9fX05SX3JlYWQKK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFE
X1JXTE9DS0FUVFJfVCA9IDgKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1NOT09QSU5HID0gMjMKK2Nv
bnN0IF9ORVRMSU5LX0NPTk5FQ1RFRCA9IDEKK2NvbnN0IF9GU19FWFRFTlRfRkwgPSAweDAwMDgw
MDAwCitjb25zdCBfSUZMQV9CUl9UT1BPTE9HWV9DSEFOR0VfREVURUNURUQgPSAxNQorY29uc3Qg
X1NZU19sbGlzdHhhdHRyID0gX19fTlJfbGxpc3R4YXR0cgorY29uc3QgX0VUSF9BTEVOID0gNgor
Y29uc3QgX0lGRl9OT19QSSA9IDB4MTAwMAorY29uc3QgX19fTlJfZ2V0Z2lkID0gMTA0Citjb25z
dCBfVENBX0tJTkQgPSAxCitjb25zdCBfX19GTFQzMlhfTUlOX18gPSAxLjEKK2NvbnN0IF9fX0RC
TF9IQVNfREVOT1JNX18gPSAxCitjb25zdCBfVENQX0xBU1RfQUNLID0gOQorY29uc3QgX1JUX1RB
QkxFX0RFRkFVTFQgPSAyNTMKK2NvbnN0IF9OTF9NTUFQX1NUQVRVU19TS0lQID0gNAorY29uc3Qg
X0hBVkVfTE9HMVBMID0gMQorY29uc3QgX0ZBTExPQ19GTF9OT19ISURFX1NUQUxFID0gMHgwNAor
Y29uc3QgX1JUX1NDT1BFX0hPU1QgPSAyNTQKK2NvbnN0IF9SVE1TR19ERUxSVUxFID0gMHgzMgor
Y29uc3QgX0lQUFJPVE9fTUFYID0gMjU2Citjb25zdCBfSVBPUFRfQ0xBU1NfTUFTSyA9IDB4NjAK
K2NvbnN0IF9BVF9FQUNDRVNTID0gMHgyMDAKK2NvbnN0IF9TWVNfcGF1c2UgPSBfX19OUl9wYXVz
ZQorY29uc3QgX05EX09QVF9QUkVGSVhfSU5GT1JNQVRJT04gPSAzCitjb25zdCBfU0lHVVJHID0g
MjMKK2NvbnN0IF9fU0NfVElNRVJfTUFYID0gMzUKK2NvbnN0IF9ORF9SQV9GTEFHX0hPTUVfQUdF
TlQgPSAweDIwCitjb25zdCBfX1NDX1NDSEFSX01JTiA9IDExMgorY29uc3QgX1RDUE9MRU5fVFNU
QU1QX0FQUEEgPSAoX1RDUE9MRU5fVElNRVNUQU1QKzIpCitjb25zdCBfX19GTFQzMl9ESUdfXyA9
IDYKK2NvbnN0IF9QRl9QSE9ORVQgPSAzNQorY29uc3QgX1JUUFJPVF9SRURJUkVDVCA9IDEKK2Nv
bnN0IF9JTl9ERUxFVEVfU0VMRiA9IDB4MDAwMDA0MDAKK2NvbnN0IF9OSV9JRE4gPSAzMgorY29u
c3QgX1RVTl9SRUFEUV9TSVpFID0gNTAwCitjb25zdCBfU1RBX1BMTCA9IDB4MDAwMQorY29uc3Qg
X0lQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUCA9IDM5Citjb25zdCBfQUZfQkxVRVRPT1RIID0gX1BG
X0JMVUVUT09USAorY29uc3QgX0lGTEFfQlJQT1JUX01FU1NBR0VfQUdFX1RJTUVSID0gMjEKK2Nv
bnN0IF9FTk9UQkxLID0gMTUKK2NvbnN0IF9GRklfU0laRU9GX0FSRyA9IDgKK2NvbnN0IF9fQklU
U19DUFVfU0VUX0ggPSAxCitjb25zdCBfU1lTX21xX2dldHNldGF0dHIgPSBfX19OUl9tcV9nZXRz
ZXRhdHRyCitjb25zdCBfU09DS19EQ0NQID0gNgorY29uc3QgX19fWDMyX1NZU0NBTExfQklUID0g
MHg0MDAwMDAwMAorY29uc3QgX0hBVkVfRExGQ05fSCA9IDEKK2NvbnN0IF9FVEhFUl9IRFJfTEVO
ID0gX0VUSF9ITEVOCitjb25zdCBfU1lTX21sb2NrMiA9IF9fX05SX21sb2NrMgorY29uc3QgX1NZ
U19nZXRyYW5kb20gPSBfX19OUl9nZXRyYW5kb20KK2NvbnN0IF9fR0VUT1BUX1BPU0lYX0ggPSAx
Citjb25zdCBfX19TVERDX0lFQ181NTlfQ09NUExFWF9fID0gMQorY29uc3QgX1g4Nl9DUjRfT1NY
U0FWRV9CSVQgPSAxOAorY29uc3QgX0VOT1BST1RPT1BUID0gOTIKK2NvbnN0IF9SVEFYX0ZFQVRV
UkVTID0gMTIKK2NvbnN0IF9TSU9DU0lGTUFQID0gMHg4OTcxCitjb25zdCBfX19OUl9nZXRfcm9i
dXN0X2xpc3QgPSAyNzQKK2NvbnN0IF9JRkxBX0VWRU5UID0gNDQKK2NvbnN0IF9GUEVfRkxUT1ZG
ID0gNAorY29uc3QgX0hBVkVfV0FJVDQgPSAxCitjb25zdCBfX1NDX0FWUEhZU19QQUdFUyA9IDg2
Citjb25zdCBfRUFJX0lOVFIgPSAtMTA0Citjb25zdCBfUFJfTUNFX0tJTExfREVGQVVMVCA9IDIK
K2NvbnN0IF9TT19QRUVSR1JPVVBTID0gNTkKK2NvbnN0IF9JRkxBX0JPTkRfUEFDS0VUU19QRVJf
U0xBVkUgPSAyMAorY29uc3QgX1NJR0hVUCA9IDEKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVZGT1JL
ID0gNAorY29uc3QgX0VOT1NQQyA9IDI4Citjb25zdCBfVkRJU0NBUkQgPSAxMworY29uc3QgX1JU
TUdSUF9OT1RJRlkgPSAyCitjb25zdCBfU1lTX29wZW5hdCA9IF9fX05SX29wZW5hdAorY29uc3Qg
X19fT1JERVJfUERQX0VORElBTl9fID0gMzQxMgorY29uc3QgX0FUX1NUQVRYX1NZTkNfVFlQRSA9
IDB4NjAwMAorY29uc3QgX19fTlJfdGdraWxsID0gMjM0Citjb25zdCBfX19OUl9nZXRfa2VybmVs
X3N5bXMgPSAxNzcKK2NvbnN0IF9FRE9URE9UID0gNzMKK2NvbnN0IF9QRl9ORVRCRVVJID0gMTMK
K2NvbnN0IF9FUE9MTE9ORVNIT1QgPSAxMDczNzQxODI0Citjb25zdCBfTUFQX0FOT04gPSBfTUFQ
X0FOT05ZTU9VUworY29uc3QgX19fT19ESVJFQ1QgPSAwNDAwMDAKK2NvbnN0IF9JUFRUTERFQyA9
IDEKK2NvbnN0IF9fU0NfTkdST1VQU19NQVggPSAzCitjb25zdCBfSVBQT1JUX0VYRUNTRVJWRVIg
PSA1MTIKK2NvbnN0IF9fX05SX29wZW5fYnlfaGFuZGxlX2F0ID0gMzA0Citjb25zdCBfX0NTX1hC
UzVfTFA2NF9PRkY2NF9MSUJTID0gMTExMAorY29uc3QgX1NPX0tFRVBBTElWRSA9IDkKK2NvbnN0
IF9TWVNfcnRfc2lncmV0dXJuID0gX19fTlJfcnRfc2lncmV0dXJuCitjb25zdCBfSUNNUDZfUlJf
UENPVVNFX1JBRkxBR1NfQVVUTyA9IDB4MTAKK2NvbnN0IF9BRl9ORVRMSU5LID0gX1BGX05FVExJ
TksKK2NvbnN0IF9ORF9PUFRfUElfRkxBR19BVVRPID0gMHg0MAorY29uc3QgX0lQVjZfQUREUkZP
Uk0gPSAxCitjb25zdCBfVElNRV9XQUlUID0gNAorY29uc3QgX0lGTEFfSVBPSUJfVU5TUEVDID0g
MAorY29uc3QgX0VIT1NURE9XTiA9IDExMgorY29uc3QgX1NZU19mYWR2aXNlNjQgPSBfX19OUl9m
YWR2aXNlNjQKK2NvbnN0IF9FVEhfUF9JRkUgPSAweEVEM0UKK2NvbnN0IF9JUFY2X1JFQ1ZIT1BM
SU1JVCA9IDUxCitjb25zdCBfVElPQ0dTT0ZUQ0FSID0gMHg1NDE5Citjb25zdCBfUFJfR0VUX0VO
RElBTiA9IDE5Citjb25zdCBfU1lTX3VzdGF0ID0gX19fTlJfdXN0YXQKK2NvbnN0IF9TWVNfaW9f
c3VibWl0ID0gX19fTlJfaW9fc3VibWl0Citjb25zdCBfU09NQVhDT05OID0gMTI4Citjb25zdCBf
SVBfTVRVID0gMTQKK2NvbnN0IF9fX0ZMVDMyWF9NSU5fMTBfRVhQX18gPSAoLTMwNykKK2NvbnN0
IF9JRkxBX0dFTkVWRV9VTlNQRUMgPSAwCitjb25zdCBfU1lTX3dyaXRldiA9IF9fX05SX3dyaXRl
dgorY29uc3QgX19fTlJfbGdldHhhdHRyID0gMTkyCitjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9B
VFRSX1QgPSA1NgorY29uc3QgX01OVF9GT1JDRSA9IDEKK2NvbnN0IF9fX0ZMVDEyOF9ERU5PUk1f
TUlOX18gPSAxLjEKK2NvbnN0IF9fX2s4X18gPSAxCitjb25zdCBfU1lTX3Vuc2hhcmUgPSBfX19O
Ul91bnNoYXJlCitjb25zdCBfTUFEVl9SRU1PVkUgPSA5Citjb25zdCBfRUFEViA9IDY4Citjb25z
dCBfU09MX0FMRyA9IDI3OQorY29uc3QgX0NMT05FX05FV0NHUk9VUCA9IDB4MDIwMDAwMDAKK2Nv
bnN0IF9fU0NfTUVTU0FHRV9QQVNTSU5HID0gMjAKK2NvbnN0IF9NU19NQU5ETE9DSyA9IDY0Citj
b25zdCBfX1VUU05BTUVfVkVSU0lPTl9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RICitjb25zdCBf
UlROTF9GQU1JTFlfSVA2TVIgPSAxMjkKK2NvbnN0IF9JRkxBX1BIWVNfUE9SVF9JRCA9IDM0Citj
b25zdCBfRE5fTVVMVElTSE9UID0gMHg4MDAwMDAwMAorY29uc3QgX0IxMjAwID0gMDAwMDAxMQor
Y29uc3QgX0VXT1VMREJMT0NLID0gX0VBR0FJTgorY29uc3QgX0lGTEFfVkZfUE9SVCA9IDEKK2Nv
bnN0IF9fX1NJX0hBVkVfU0lHU1lTID0gMQorY29uc3QgX05MTV9GX01BVENIID0gMHgyMDAKK2Nv
bnN0IF9BUlBIUkRfQVgyNSA9IDMKK2NvbnN0IF9fUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORyA9
IDIwMDgwOQorY29uc3QgX1JURl9OT0ZPUldBUkQgPSAweDEwMDAKK2NvbnN0IF9GX0RVUEZEX0NM
T0VYRUMgPSAxMDMwCitjb25zdCBfRUNBTkNFTEVEID0gMTI1Citjb25zdCBfSU5SX09QRU5fTUFY
ID0gNDA5NgorY29uc3QgX0IzMDAgPSAwMDAwMDA3Citjb25zdCBfSU1BWEJFTCA9IDAwMjAwMDAK
K2NvbnN0IF9QUklkTEVBU1QzMiA9ICJkIgorY29uc3QgX1JVU0FHRV9DSElMRFJFTiA9IC0xCitj
b25zdCBfWDg2X0NSNF9WTVhFX0JJVCA9IDEzCitjb25zdCBfRl9PRkRfU0VUTEsgPSAzNworY29u
c3QgX0VOT0RBVEEgPSA2MQorY29uc3QgX1NPTF9LQ00gPSAyODEKK2NvbnN0IF9BRl9QUFBPWCA9
IF9QRl9QUFBPWAorY29uc3QgX0hBVkVfU1lTX1RZUEVTX0ggPSAxCitjb25zdCBfU0lPQ0dJRkFE
RFIgPSAweDg5MTUKK2NvbnN0IF9OREFfRFNUID0gMQorY29uc3QgX19fR0xJQkNfVVNFX0RFUFJF
Q0FURURfR0VUUyA9IDAKK2NvbnN0IF9USU9DTV9MRSA9IDB4MDAxCitjb25zdCBfU0NOb0ZBU1Q4
ID0gImhobyIKK2NvbnN0IF9BUlBIUkRfU0tJUCA9IDc3MQorY29uc3QgX19fREVDMzJfU1VCTk9S
TUFMX01JTl9fID0gMC4wMDAwMDFFLTk1Citjb25zdCBfX19waWVfXyA9IDIKK2NvbnN0IF9NU19T
TEFWRSA9IDUyNDI4OAorY29uc3QgX1JMSU1JVF9EQVRBID0gMgorY29uc3QgX19fTElUVExFX0VO
RElBTiA9IDEyMzQKK2NvbnN0IF9fUE9TSVhfUkVBTFRJTUVfU0lHTkFMUyA9IDIwMDgwOQorY29u
c3QgX1NZU19tc2dnZXQgPSBfX19OUl9tc2dnZXQKK2NvbnN0IF9IQVZFX0FUQU4yTCA9IDEKK2Nv
bnN0IF9JRkxBX1ZSRl9QT1JUX1RBQkxFID0gMQorY29uc3QgX05FVExJTktfTElTVF9NRU1CRVJT
SElQUyA9IDkKK2NvbnN0IF9fRkNOVExfSCA9IDEKK2NvbnN0IF9fX05SX3V0aW1lcyA9IDIzNQor
Y29uc3QgX1JUTV9HRVRST1VURSA9IDI2Citjb25zdCBfVUlOVDhfTUFYID0gKDI1NSkKK2NvbnN0
IF9BUlBPUF9SUkVRVUVTVCA9IDMKK2NvbnN0IF9fX1JMSU1fTkxJTUlUUyA9IDE2Citjb25zdCBf
SVBWTEFOX0ZfVkVQQSA9IDB4MDIKK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTUFDQUREUl9EQVRBID0g
NQorY29uc3QgX19QT1NJWF9QUklPUklUSVpFRF9JTyA9IDIwMDgwOQorY29uc3QgX05PX0RBVEEg
PSA0Citjb25zdCBfUlRQUk9UX0lTSVMgPSAxODcKK2NvbnN0IF9IQVZFX0FTX1g4Nl82NF9VTldJ
TkRfU0VDVElPTl9UWVBFID0gMQorY29uc3QgX0lQVjZfMjI5MlJUSERSID0gNQorY29uc3QgX1NZ
U19tbG9jayA9IF9fX05SX21sb2NrCitjb25zdCBfX0ZFQVRVUkVTX0ggPSAxCitjb25zdCBfU1lT
X2tleGVjX2xvYWQgPSBfX19OUl9rZXhlY19sb2FkCitjb25zdCBfRVBST1RPVFlQRSA9IDkxCitj
b25zdCBfTlpFUk8gPSAyMAorY29uc3QgX1NJT0NTSUZORVRNQVNLID0gMHg4OTFjCitjb25zdCBf
X19JRkxBX1hGUk1fTUFYID0gMworY29uc3QgX0lGTEFfTUFDU0VDX0VOQ1JZUFQgPSA3Citjb25z
dCBfX19OUl9wZXJzb25hbGl0eSA9IDEzNQorY29uc3QgX1NZU19nZXRfbWVtcG9saWN5ID0gX19f
TlJfZ2V0X21lbXBvbGljeQorY29uc3QgX0VJTFNFUSA9IDg0Citjb25zdCBfU1lTX3NldHJlZ2lk
ID0gX19fTlJfc2V0cmVnaWQKK2NvbnN0IF9TT0NLX1NUUkVBTSA9IDEKK2NvbnN0IF9QUl9HRVRf
U0VDQ09NUCA9IDIxCitjb25zdCBfSUZMQV9NQUNTRUNfU0NJID0gMQorY29uc3QgX0VUSF9ITEVO
ID0gMTQKK2NvbnN0IF9TQ01fQ1JFREVOVElBTFMgPSAyCitjb25zdCBfX19VU0VfTEFSR0VGSUxF
NjQgPSAxCitjb25zdCBfUlRNX0dFVFJVTEUgPSAzNAorY29uc3QgX19ORVRJTkVUX0lOX0ggPSAx
Citjb25zdCBfX1NDX0xFVkVMMV9EQ0FDSEVfTElORVNJWkUgPSAxOTAKK2NvbnN0IF9FRFFVT1Qg
PSAxMjIKK2NvbnN0IF9JRkxBX1ZYTEFOX1RPUyA9IDYKK2NvbnN0IF9fX1NfSVJFQUQgPSAwNDAw
Citjb25zdCBfRl9HRVRGRCA9IDEKK2NvbnN0IF9BUlBIUkRfRERDTVAgPSA1MTcKK2NvbnN0IF9f
X05SX3VzZXJmYXVsdGZkID0gMzIzCitjb25zdCBfRl9HRVRGTCA9IDMKK2NvbnN0IF9fX3RpbWV2
YWxfZGVmaW5lZCA9IDEKK2NvbnN0IF9JUE9QVF9DT1BZID0gMHg4MAorY29uc3QgX0lQVjZfQ0hF
Q0tTVU0gPSA3Citjb25zdCBfU1RBVFhfQVRUUl9BUFBFTkQgPSAweDAwMjAKK2NvbnN0IF9FVEhf
UF9QUFBfU0VTID0gMHg4ODY0Citjb25zdCBfX1NDX0xFVkVMMV9EQ0FDSEVfU0laRSA9IDE4OAor
Y29uc3QgX1RVTkdFVFNOREJVRl92YWwgPSAyMTQ3NzY3NTA3Citjb25zdCBfRlNfWEZMQUdfUFJF
QUxMT0MgPSAweDAwMDAwMDAyCitjb25zdCBfUFJfR0VUX1NQRUNVTEFUSU9OX0NUUkwgPSA1Mgor
Y29uc3QgX0NCQVVERVggPSAwMDEwMDAwCitjb25zdCBfU0tGX0FEX1BLVFRZUEUgPSA0Citjb25z
dCBfTElOVVhfUkVCT09UX01BR0lDMSA9IDB4ZmVlMWRlYWQKK2NvbnN0IF9MSU5VWF9SRUJPT1Rf
TUFHSUMyID0gNjcyMjc0NzkzCitjb25zdCBfUEZfQlJJREdFID0gNworY29uc3QgX01TX0lfVkVS
U0lPTiA9IDgzODg2MDgKK2NvbnN0IF9NQURWX1JBTkRPTSA9IDEKK2NvbnN0IF9fVVRTTkFNRV9O
T0RFTkFNRV9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RICitjb25zdCBfU0NOb0xFQVNUOCA9ICJo
aG8iCitjb25zdCBfWDg2X0NSM19QQ0lEX0JJVFMgPSAxMgorY29uc3QgX0FGX1NNQyA9IF9QRl9T
TUMKK2NvbnN0IF9BUlBIUkRfSUVFRTgwMiA9IDYKK2NvbnN0IF9BREpfT0ZGU0VUID0gMHgwMDAx
Citjb25zdCBfRUxPT1AgPSA0MAorY29uc3QgX19fSUZMQV9HVFBfTUFYID0gNQorY29uc3QgX1JU
UFJPVF9CR1AgPSAxODYKK2NvbnN0IF9MSVRUTEVfRU5ESUFOID0gX19fTElUVExFX0VORElBTgor
Y29uc3QgX19fQllURV9PUkRFUiA9IF9fX0xJVFRMRV9FTkRJQU4KK2NvbnN0IF9UQ1BJX09QVF9U
SU1FU1RBTVBTID0gMQorY29uc3QgX19fVENBX01BWCA9IDE1Citjb25zdCBfUlRBX01FVFJJQ1Mg
PSA4Citjb25zdCBfU09MX1BQUE9MMlRQID0gMjczCitjb25zdCBfX1NDX0lPVl9NQVggPSA2MAor
Y29uc3QgX19MRlM2NF9MQVJHRUZJTEUgPSAxCitjb25zdCBfTUFYX1ZMQU5fTElTVF9MRU4gPSAx
Citjb25zdCBfU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIgPSA0Citjb25zdCBfX1BPU0lYX01R
X1BSSU9fTUFYID0gMzIKK2NvbnN0IF9fUE9TSVhfVkVSU0lPTiA9IDIwMDgwOQorY29uc3QgX19f
TlJfcHBvbGwgPSAyNzEKK2NvbnN0IF9GX09XTkVSX1BJRCA9IDEKK2NvbnN0IF9USU9DUEtUX0lP
Q1RMID0gNjQKK2NvbnN0IF9fX1VTRV9QT1NJWDE5OTMwOSA9IDEKK2NvbnN0IF9fX0lOVF9GQVNU
OF9NQVhfXyA9IDB4N2YKK2NvbnN0IF9fU0NfQkNfU0NBTEVfTUFYID0gMzgKK2NvbnN0IF9TWVNf
Y2hyb290ID0gX19fTlJfY2hyb290Citjb25zdCBfRVBST1RPTk9TVVBQT1JUID0gOTMKK2NvbnN0
IF9TVEFUWF9HSUQgPSAweDAwMTAKK2NvbnN0IF9JRkxBX0JSX0dST1VQX0ZXRF9NQVNLID0gOQor
Y29uc3QgX0lQUE9SVF9SRVNFUlZFRCA9IDEwMjQKK2NvbnN0IF9JTl9PTkxZRElSID0gMHgwMTAw
MDAwMAorY29uc3QgX1NUQV9GTEwgPSAweDAwMDgKK2NvbnN0IF9JRkxBX01BQ1NFQ19FUyA9IDEw
Citjb25zdCBfX19XSU5UX1dJRFRIX18gPSAzMgorY29uc3QgX19QT1NJWF9QSVBFX0JVRiA9IDUx
MgorY29uc3QgX0lQT1BUX1NFQ1VSX1NFQ1JFVCA9IDB4ZDc4OAorY29uc3QgX19fUElDX18gPSAy
Citjb25zdCBfSVNUUklQID0gMDAwMDA0MAorY29uc3QgX19fUlRNX01BWCA9IDEwMworY29uc3Qg
X0lQT1BUX1NFQ1VSX0NPTkZJRCA9IDB4ZjEzNQorY29uc3QgX0VTUElQRSA9IDI5Citjb25zdCBf
QUZfU05BID0gX1BGX1NOQQorY29uc3QgX1JUQV9QUk9UT0lORk8gPSAxMAorY29uc3QgX19fTlJf
YnBmID0gMzIxCitjb25zdCBfU1lTX2Fmc19zeXNjYWxsID0gX19fTlJfYWZzX3N5c2NhbGwKK2Nv
bnN0IF9VSU5UX0ZBU1Q4X01BWCA9ICgyNTUpCitjb25zdCBfU1RBX05BTk8gPSAweDIwMDAKK2Nv
bnN0IF9VU0hSVF9XSURUSCA9IDE2Citjb25zdCBfT19MQVJHRUZJTEUgPSBfX19PX0xBUkdFRklM
RQorY29uc3QgX19fTlJfc2NoZWRfc2V0YWZmaW5pdHkgPSAyMDMKK2NvbnN0IF9TT0xfTExDID0g
MjY4Citjb25zdCBfX19JRkxBX1ZYTEFOX01BWCA9IDI5Citjb25zdCBfRUlTQ09OTiA9IDEwNgor
Y29uc3QgX1RJT0NQS1RfU1RBUlQgPSA4Citjb25zdCBfSUZMQV9HU09fTUFYX1NFR1MgPSA0MAor
Y29uc3QgX1NPX0xJTkdFUiA9IDEzCitjb25zdCBfX19VSU5UX0xFQVNUMTZfTUFYX18gPSAweGZm
ZmYKK2NvbnN0IF9PTENVQyA9IDAwMDAwMDIKK2NvbnN0IF9QUl9HRVRfVElNRVJTTEFDSyA9IDMw
Citjb25zdCBfX19OUl9sc3RhdCA9IDYKK2NvbnN0IF9fUE9TSVhfU1lNTE9PUF9NQVggPSA4Citj
b25zdCBfUlROTEdSUF9OT1RJRlkgPSAyCitjb25zdCBfX19EQkxfRElHX18gPSAxNQorY29uc3Qg
X19DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZMQUdTID0gMTExMQorY29uc3QgX1JUTl9VTlJFQUNI
QUJMRSA9IDcKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MREZMQUdTID0gMTEyNQor
Y29uc3QgX19fREVDNjRfTUFYX18gPSA5Ljk5OTk5OTk5OTk5OTk5OUUzODQKK2NvbnN0IF9JRkxB
X0hTUl9TTEFWRTEgPSAxCitjb25zdCBfX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRSA9IDIw
MDgwOQorY29uc3QgX0hBVkVfTkVUSU5FVF9JUF9IID0gMQorY29uc3QgX0lGSFdBRERSTEVOID0g
NgorY29uc3QgX1RDU0VUU0YgPSAweDU0MDQKK2NvbnN0IF9fQklUU19TSUdFVkVOVF9DT05TVFNf
SCA9IDEKK2NvbnN0IF9YRFBfQVRUQUNIRURfTVVMVEkgPSA0Citjb25zdCBfTkxNU0dFUlJfQVRU
Ul9VTlVTRUQgPSAwCitjb25zdCBfTUZEX0hVR0VUTEIgPSA0Citjb25zdCBfX19XQ0hBUl9NQVgg
PSBfX19XQ0hBUl9NQVhfXworY29uc3QgX19TQ19TU0laRV9NQVggPSAxMTAKK2NvbnN0IF9JUF9V
TklDQVNUX0lGID0gNTAKK2NvbnN0IF9TT19SQ1ZCVUZGT1JDRSA9IDMzCitjb25zdCBfU1lTX25m
c3NlcnZjdGwgPSBfX19OUl9uZnNzZXJ2Y3RsCitjb25zdCBfQlVTX0FEUkFMTiA9IDEKK2NvbnN0
IF9JUFY2X1BLVElORk8gPSA1MAorY29uc3QgX1NZU19scmVtb3ZleGF0dHIgPSBfX19OUl9scmVt
b3ZleGF0dHIKK2NvbnN0IF9UQ1NFVFNXID0gMHg1NDAzCitjb25zdCBfRUFJX1NPQ0tUWVBFID0g
LTcKK2NvbnN0IF9fU0NfVjdfSUxQMzJfT0ZGMzIgPSAyMzcKK2NvbnN0IF9TWVNfaW9fY2FuY2Vs
ID0gX19fTlJfaW9fY2FuY2VsCitjb25zdCBfSVBQUk9UT19JUElQID0gNAorY29uc3QgX2xpbnV4
ID0gMQorY29uc3QgX1dOT1dBSVQgPSAweDAxMDAwMDAwCitjb25zdCBfX19MT0NLX0FUT01JQyA9
IDE2Citjb25zdCBfSVBWNl9SRUNWUlRIRFIgPSA1NgorY29uc3QgX1RDUF9DQV9PcGVuID0gMAor
Y29uc3QgX19TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUgPSAxOTYKK2NvbnN0IF9MSU5VWF9SRUJP
T1RfQ01EX0hBTFQgPSAweENERUYwMTIzCitjb25zdCBfSUNNUDZfRklMVEVSID0gMQorY29uc3Qg
X0hBVkVfTkVUX1JPVVRFX0ggPSAxCitjb25zdCBfU09fQlVTWV9QT0xMID0gNDYKK2NvbnN0IF9F
TkZJTEUgPSAyMworY29uc3QgX19TQ19USFJFQURTID0gNjcKK2NvbnN0IF9fSU9DX1NJWkVNQVNL
ID0gKCgxIDw8IF9fSU9DX1NJWkVCSVRTKS0xKQorY29uc3QgX0lQX0lQU0VDX1BPTElDWSA9IDE2
Citjb25zdCBfUlRNU0dfQ09OVFJPTCA9IDB4NDAKK2NvbnN0IF9TT19NQVJLID0gMzYKK2NvbnN0
IF9NQVBfUFJJVkFURSA9IDB4MDIKK2NvbnN0IF9fUENfUkVDX1hGRVJfQUxJR04gPSAxNworY29u
c3QgX19CSVRTX1RZUEVTSVpFU19IID0gMQorY29uc3QgX0ZGSV9UWVBFX0xPTkdET1VCTEUgPSA0
Citjb25zdCBfX19OUl9hZGRfa2V5ID0gMjQ4Citjb25zdCBfX19TSUdfQVRPTUlDX01BWF9fID0g
MHg3ZmZmZmZmZgorY29uc3QgX1BfUEdJRCA9IDIKK2NvbnN0IF9FQUlfU0VSVklDRSA9IC04Citj
b25zdCBfUlRBX0ZMT1cgPSAxMQorY29uc3QgX0lOX0NSRUFURSA9IDB4MDAwMDAxMDAKK2NvbnN0
IF9fUE9TSVhfVFJBQ0VfTE9HID0gLTEKK2NvbnN0IF9TQ05kTEVBU1QxNiA9ICJoZCIKK2NvbnN0
IF9SVE5fQlJPQURDQVNUID0gMworY29uc3QgX1JURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NF
RCA9ICgxIDw8IDIpCitjb25zdCBfSU5UMTZfTUlOID0gKC0zMjc2Ny0xKQorY29uc3QgX0lGTEFf
WEZSTV9MSU5LID0gMQorY29uc3QgX05MTVNHRVJSX0FUVFJfTVNHID0gMQorY29uc3QgX0FGX1JP
U0UgPSBfUEZfUk9TRQorY29uc3QgX1NDTmQxNiA9ICJoZCIKK2NvbnN0IF9fU0NfUElJX0lOVEVS
TkVUX0RHUkFNID0gNjIKK2NvbnN0IF9IQVZFX01LTk9EQVQgPSAxCitjb25zdCBfSUZMQV9MSU5L
X05FVE5TSUQgPSAzNworY29uc3QgX1NZU19zb2NrZXQgPSBfX19OUl9zb2NrZXQKK2NvbnN0IF9T
SU9DUlRNU0cgPSAweDg5MEQKK2NvbnN0IF9fRVJSTk9fSCA9IDEKK2NvbnN0IF9QRl9BUFBMRVRB
TEsgPSA1Citjb25zdCBfX19TU0VfXyA9IDEKK2NvbnN0IF9YRFBfQVRUQUNIRURfSFcgPSAzCitj
b25zdCBfVElPQ1NFUkdFVE1VTFRJID0gMHg1NDVBCitjb25zdCBfU0VHVl9CTkRFUlIgPSAzCitj
b25zdCBfSUZMQV9CT05EX1NMQVZFX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxBX0JPTkRfUkVTRU5E
X0lHTVAgPSAxNQorY29uc3QgX1JUTV9ERUxRRElTQyA9IDM3Citjb25zdCBfSUZMQV9CT05EX1BS
SU1BUllfUkVTRUxFQ1QgPSAxMgorY29uc3QgX1JFTkFNRV9OT1JFUExBQ0UgPSAoMSA8PCAwKQor
Y29uc3QgX1RDUF9DTE9TRV9XQUlUID0gOAorY29uc3QgX19fTlJfYnJrID0gMTIKK2NvbnN0IF9F
TkFNRVRPT0xPTkcgPSAzNgorY29uc3QgX19TQ19UVFlfTkFNRV9NQVggPSA3MgorY29uc3QgX0I1
MCA9IDAwMDAwMDEKK2NvbnN0IF9TWVNfZmdldHhhdHRyID0gX19fTlJfZmdldHhhdHRyCitjb25z
dCBfSUZMQV9JTkVUNl9GTEFHUyA9IDEKK2NvbnN0IF9fX05SX21xX3RpbWVkc2VuZCA9IDI0Mgor
Y29uc3QgX19TVFJJTkdfSCA9IDEKK2NvbnN0IF9ORFRQQV9QQUQgPSAxOAorY29uc3QgX19fTlJf
c2V0X3RpZF9hZGRyZXNzID0gMjE4Citjb25zdCBfU1RESU5fRklMRU5PID0gMAorY29uc3QgX19f
TlJfdGltZXJmZF9jcmVhdGUgPSAyODMKK2NvbnN0IF9fX0lGTEFfSVBPSUJfTUFYID0gNAorY29u
c3QgX19fc2lnc2V0X3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9QUl9GUF9FWENfUkVTID0gMHgwODAw
MDAKK2NvbnN0IF9TWVNfbWVtZmRfY3JlYXRlID0gX19fTlJfbWVtZmRfY3JlYXRlCitjb25zdCBf
X0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSUJTID0gMTEzMAorY29uc3QgX0lDTVA2X0ZJTFRF
Ul9QQVNTID0gMgorY29uc3QgX1NBX1JFU1RBUlQgPSAweDEwMDAwMDAwCitjb25zdCBfVElPQ0dM
Q0tUUk1JT1MgPSAweDU0NTYKK2NvbnN0IF9fU0NfUFJJT1JJVElaRURfSU8gPSAxMworY29uc3Qg
X1BUUkFDRV9TRUNDT01QX0dFVF9GSUxURVIgPSAxNjkwOAorY29uc3QgX0NMT05FX05FV0lQQyA9
IDB4MDgwMDAwMDAKK2NvbnN0IF9VU0VfTElCRkZJID0gMQorY29uc3QgX1NBX09ORVNIT1QgPSBf
U0FfUkVTRVRIQU5ECitjb25zdCBfX19OUl9nZXRwcGlkID0gMTEwCitjb25zdCBfRU5YSU8gPSA2
Citjb25zdCBfX19OUl9lcG9sbF93YWl0ID0gMjMyCitjb25zdCBfX1NDX1hPUEVOX1NITSA9IDk0
Citjb25zdCBfSUZMQV9WRl9WTEFOX0xJU1QgPSAxMgorY29uc3QgX0NIQVJfTUFYID0gX1NDSEFS
X01BWAorY29uc3QgX0lGTEFfTkVUX05TX0ZEID0gMjgKK2NvbnN0IF9fX1BSQUdNQV9SRURFRklO
RV9FWFROQU1FID0gMQorY29uc3QgX19TQ19SVFNJR19NQVggPSAzMQorY29uc3QgX1NJR1dJTkNI
ID0gMjgKK2NvbnN0IF9NQURWX0ZSRUUgPSA4Citjb25zdCBfSUZMQV9QSFlTX1NXSVRDSF9JRCA9
IDM2Citjb25zdCBfU1lTX3N5bWxpbmthdCA9IF9fX05SX3N5bWxpbmthdAorY29uc3QgX0lGQV9G
X1RFTlRBVElWRSA9IDB4NDAKK2NvbnN0IF9JUFY2X1JFQ1ZUQ0xBU1MgPSA2NgorY29uc3QgX19f
RkxUMzJYX0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05TRV9PVVRf
T0ZfU1lOQyA9IDYKK2NvbnN0IF9QRl9ORVRST00gPSA2Citjb25zdCBfUFJfU0VUX01NX0VORF9D
T0RFID0gMgorY29uc3QgX1NUQV9QUFNUSU1FID0gMHgwMDA0Citjb25zdCBfQVJQRF9MT09LVVAg
PSAweDAyCitjb25zdCBfRl9TRVRPV05fRVggPSBfX19GX1NFVE9XTl9FWAorY29uc3QgX0JDX1ND
QUxFX01BWCA9IF9fUE9TSVgyX0JDX1NDQUxFX01BWAorY29uc3QgX1NJT0NTSUZTTEFWRSA9IDB4
ODkzMAorY29uc3QgX0VOT1NUUiA9IDYwCitjb25zdCBfRlNfU1lOQ19GTCA9IDB4MDAwMDAwMDgK
K2NvbnN0IF9fX05SX3NjaGVkX3NldHBhcmFtID0gMTQyCitjb25zdCBfX1NDX1RIUkVBRF9USFJF
QURTX01BWCA9IDc2Citjb25zdCBfSUZMQV9UVU5fUEkgPSA0Citjb25zdCBfU0tGX0FEX1ZMQU5f
VFBJRCA9IDYwCitjb25zdCBfSUZMQV9IU1JfU0xBVkUyID0gMgorY29uc3QgX1BBQ0tFVF9GQU5P
VVQgPSAxOAorY29uc3QgX1NBX05PREVGRVIgPSAweDQwMDAwMDAwCitjb25zdCBfTkxNU0dfTUlO
X1RZUEUgPSAweDEwCitjb25zdCBfVElPQ01fUkkgPSBfVElPQ01fUk5HCitjb25zdCBfSVBUT1Nf
RUNOX0VDVDAgPSAweDAyCitjb25zdCBfU1lTX2ZjbnRsID0gX19fTlJfZmNudGwKK2NvbnN0IF9T
SU9DU0lGTUVNID0gMHg4OTIwCitjb25zdCBfSUZMQV9JUFZMQU5fVU5TUEVDID0gMAorY29uc3Qg
X1NZU19nZXRldWlkID0gX19fTlJfZ2V0ZXVpZAorY29uc3QgX1JUTl9MT0NBTCA9IDIKK2NvbnN0
IF9UVU5TRVRPRkZMT0FEX3ZhbCA9IDEwNzQwMjU2ODAKK2NvbnN0IF9OTE1TR0VSUl9BVFRSX01B
WCA9IDMKK2NvbnN0IF9JRkxBX1ZYTEFOX0dST1VQNiA9IDE2Citjb25zdCBfRVRIX01JTl9NVFUg
PSA2OAorY29uc3QgX1NDTm9MRUFTVDE2ID0gImhvIgorY29uc3QgX0lGRl9OQVBJID0gMHgwMDEw
Citjb25zdCBfRkZJX1RZUEVfVUlOVDY0ID0gMTEKK2NvbnN0IF9QRl9DQUlGID0gMzcKK2NvbnN0
IF9DTE9ORV9TRVRUTFMgPSAweDAwMDgwMDAwCitjb25zdCBfX19ERUM2NF9TVUJOT1JNQUxfTUlO
X18gPSAwLjAwMDAwMDAwMDAwMDAwMUUtMzgzCitjb25zdCBfX19PX05PRk9MTE9XID0gMDQwMDAw
MAorY29uc3QgX19CSVRTX1NJR05VTV9IID0gMQorY29uc3QgX05FVExJTktfRFJPUF9NRU1CRVJT
SElQID0gMgorY29uc3QgX19fTlJfaW5vdGlmeV9pbml0ID0gMjUzCitjb25zdCBfU1RBVFhfQVRU
Ul9OT0RVTVAgPSAweDAwNDAKK2NvbnN0IF9fX05SX3V0aW1lbnNhdCA9IDI4MAorY29uc3QgX19f
TlJfdGltZXJmZF9zZXR0aW1lID0gMjg2Citjb25zdCBfSUZMQV9JTkVUX1VOU1BFQyA9IDAKK2Nv
bnN0IF9BRl9ORVRCRVVJID0gX1BGX05FVEJFVUkKK2NvbnN0IF9SVF9UQUJMRV9NQUlOID0gMjU0
Citjb25zdCBfU0tGX0FEX09GRiA9ICgtMHgxMDAwKQorY29uc3QgX19fREVDMzJfTUFOVF9ESUdf
XyA9IDcKK2NvbnN0IF9CTUFQX0lPQ1RMID0gMQorY29uc3QgX1JUTV9ORVdURklMVEVSID0gNDQK
K2NvbnN0IF9TQV9OT01BU0sgPSBfU0FfTk9ERUZFUgorY29uc3QgX01BUF9FWEVDVVRBQkxFID0g
MHgwMTAwMAorY29uc3QgX1NUQV9VTlNZTkMgPSAweDAwNDAKK2NvbnN0IF9FTk9URElSID0gMjAK
K2NvbnN0IF9FSU5WQUwgPSAyMgorY29uc3QgX1RVTkdFVEZJTFRFUl92YWwgPSAyMTQ4NTUzOTQ3
Citjb25zdCBfX19OUl9zY2hlZF9nZXRhdHRyID0gMzE1Citjb25zdCBfVFVOU0VUREVCVUdfdmFs
ID0gMTA3NDAyNTY3MworY29uc3QgX1NDTngxNiA9ICJoeCIKK2NvbnN0IF9JUF9GUkVFQklORCA9
IDE1Citjb25zdCBfSU5fQ0xBU1NBX01BWCA9IDEyOAorY29uc3QgX0I3NSA9IDAwMDAwMDIKK2Nv
bnN0IF9FUE9MTF9DTE9FWEVDID0gNTI0Mjg4Citjb25zdCBfTkVUTElOS19HRU5FUklDID0gMTYK
K2NvbnN0IF9QVFJBQ0VfUEVFS1VTUiA9IDMKK2NvbnN0IF9QQUNLRVRfT1RIRVJIT1NUID0gMwor
Y29uc3QgX19fRkxUNjRfRElHX18gPSAxNQorY29uc3QgX0FSUEhSRF9JRUVFODAyX1RSID0gODAw
Citjb25zdCBfSUZMQV9CUlBPUlRfTEVBUk5JTkcgPSA4Citjb25zdCBfVENJT0ZGID0gMgorY29u
c3QgX1JUX1RBQkxFX1VOU1BFQyA9IDAKK2NvbnN0IF9ORFRQQV9ERUxBWV9QUk9CRV9USU1FID0g
NworY29uc3QgX19TQ19BU1lOQ0hST05PVVNfSU8gPSAxMgorY29uc3QgX05EX1JPVVRFUl9BRFZF
UlQgPSAxMzQKK2NvbnN0IF9QQUNLRVRfRFJPUF9NRU1CRVJTSElQID0gMgorY29uc3QgX0lOX0NM
T1NFX1dSSVRFID0gMHgwMDAwMDAwOAorY29uc3QgX05FVExJTktfQ09OTkVDVE9SID0gMTEKK2Nv
bnN0IF9USU9DTV9TUiA9IDB4MDEwCitjb25zdCBfRl9HRVRMSyA9IF9GX0dFVExLNjQKK2NvbnN0
IF9USU9DTV9TVCA9IDB4MDA4Citjb25zdCBfRUtFWUVYUElSRUQgPSAxMjcKK2NvbnN0IF9TSU9D
QVRNQVJLID0gMHg4OTA1Citjb25zdCBfX1NDX0xFVkVMMl9DQUNIRV9TSVpFID0gMTkxCitjb25z
dCBfVUlOVF9MRUFTVDhfV0lEVEggPSA4Citjb25zdCBfU0lPQ0dJRkJSREFERFIgPSAweDg5MTkK
K2NvbnN0IF9SVE1fR0VUQUNUSU9OID0gNTAKK2NvbnN0IF9TT0xfQVRNID0gMjY0Citjb25zdCBf
X1NDX1RaTkFNRV9NQVggPSA2Citjb25zdCBfRl9TRVRMS1cgPSBfRl9TRVRMS1c2NAorY29uc3Qg
X19fV0NIQVJfTUlOX18gPSAoLV9fX1dDSEFSX01BWF9fIC0gMSkKK2NvbnN0IF9fU0NfWEJTNV9M
UEJJR19PRkZCSUcgPSAxMjgKK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfQkFEU1RBVEUg
PSAyNTkKK2NvbnN0IF9TRUVLX0hPTEUgPSA0Citjb25zdCBfSVBQT1JUX1NNVFAgPSAyNQorY29u
c3QgX1RJT0NDT05TID0gMHg1NDFECitjb25zdCBfSUZfTkFNRVNJWkUgPSAxNgorY29uc3QgX0VC
QURFID0gNTIKK2NvbnN0IF9FQkFERiA9IDkKK2NvbnN0IF9fX05SX2Nsb2NrX2FkanRpbWUgPSAz
MDUKK2NvbnN0IF9TWVNfZnN0YXRmcyA9IF9fX05SX2ZzdGF0ZnMKK2NvbnN0IF9FQ0hPS0UgPSAw
MDA0MDAwCitjb25zdCBfSEFWRV9TWVNfVVRTTkFNRV9IID0gMQorY29uc3QgX1JXSF9XUklURV9M
SUZFX05PTkUgPSAxCitjb25zdCBfQjM1MDAwMDAgPSAwMDEwMDE2Citjb25zdCBfX19OUl9zZW5k
ZmlsZSA9IDQwCitjb25zdCBfX19OUl9mY2hvd25hdCA9IDI2MAorY29uc3QgX0VCQURSID0gNTMK
K2NvbnN0IF9SRUdfUlNQID0gMTUKK2NvbnN0IF9TSUdDSExEID0gMTcKK2NvbnN0IF9fX05SX2Zv
cmsgPSA1NworY29uc3QgX0FGX0ZJTEUgPSBfUEZfRklMRQorY29uc3QgX0NMT0NLX1JFQUxUSU1F
X0FMQVJNID0gOAorY29uc3QgX19TQ19USFJFQURfU1RBQ0tfTUlOID0gNzUKK2NvbnN0IF9JRkxB
X1ZYTEFOX1BPUlQgPSAxNQorY29uc3QgX0lGTEFfTUFDU0VDX1ZBTElEQVRJT04gPSAxMworY29u
c3QgX0lGTEFfQk9ORF9BUlBfQUxMX1RBUkdFVFMgPSAxMAorY29uc3QgX19YT1BFTl9VTklYID0g
MQorY29uc3QgX0VIT1NUVU5SRUFDSCA9IDExMworY29uc3QgX1JMSU1fU0FWRURfTUFYID0gX1JM
SU1fSU5GSU5JVFkKK2NvbnN0IF9TX0JMS1NJWkUgPSA1MTIKK2NvbnN0IF9fX3VuaXggPSAxCitj
b25zdCBfX19OUl9mY2htb2QgPSA5MQorY29uc3QgX1NDTm9MRUFTVDMyID0gIm8iCitjb25zdCBf
RUwzUlNUID0gNDcKK2NvbnN0IF9GRklfRkFTVENBTEwgPSA0Citjb25zdCBfSUZMQV9WRl9TVEFU
U19UWF9CWVRFUyA9IDMKK2NvbnN0IF9UQ1NFVFhGID0gMHg1NDM0Citjb25zdCBfSUZMQV9QSFlT
X1BPUlRfTkFNRSA9IDM4Citjb25zdCBfSU5UX0ZBU1Q4X1dJRFRIID0gOAorY29uc3QgX0NSVFND
VFMgPSAwMjAwMDAwMDAwMDAKK2NvbnN0IF9fX0lGTEFfTUFDU0VDX01BWCA9IDE1Citjb25zdCBf
SUZMQV9ORVRfTlNfUElEID0gMTkKK2NvbnN0IF9TSU9DU0lGSFdBRERSID0gMHg4OTI0Citjb25z
dCBfX19TSV9BU1lOQ0lPX0FGVEVSX1NJR0lPID0gMQorY29uc3QgX1RJT0NWSEFOR1VQID0gMHg1
NDM3Citjb25zdCBfQVRGX05FVE1BU0sgPSAweDIwCitjb25zdCBfVENTRVRYVyA9IDB4NTQzNQor
Y29uc3QgX1NPTF9ORkMgPSAyODAKK2NvbnN0IF9fX1NJWkVPRl9JTlQxMjhfXyA9IDE2Citjb25z
dCBfX19TVERDX1VURl8xNl9fID0gMQorY29uc3QgX1RJT0NQS1RfRE9TVE9QID0gMzIKK2NvbnN0
IF9EVF9MTksgPSAxMAorY29uc3QgX19fRkxUMzJfTUlOXzEwX0VYUF9fID0gKC0zNykKK2NvbnN0
IF9FTk9MQ0sgPSAzNworY29uc3QgX1NZU19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgPSBfX19OUl9z
Y2hlZF9ycl9nZXRfaW50ZXJ2YWwKK2NvbnN0IF9BRl9SWFJQQyA9IF9QRl9SWFJQQworY29uc3Qg
X1BSX0dFVF9VTkFMSUdOID0gNQorY29uc3QgX0lOX0NMQVNTQl9IT1NUID0gKDB4ZmZmZmZmZmYg
JiBeX0lOX0NMQVNTQl9ORVQpCitjb25zdCBfVENBX0ZMQUdfTEFSR0VfRFVNUF9PTiA9ICgxIDw8
IDApCitjb25zdCBfX19OUl9ta2RpciA9IDgzCitjb25zdCBfX1NDX1RIUkVBRF9TQUZFX0ZVTkNU
SU9OUyA9IDY4Citjb25zdCBfTkRUUEFfTUNBU1RfUkVQUk9CRVMgPSAxNworY29uc3QgX0lQVjZf
UlhEU1RPUFRTID0gX0lQVjZfRFNUT1BUUworY29uc3QgX19fTlJfZmFjY2Vzc2F0ID0gMjY5Citj
b25zdCBfRVRIX1BfTVZSUCA9IDB4ODhGNQorY29uc3QgX19TQ19YT1BFTl9MRUdBQ1kgPSAxMjkK
K2NvbnN0IF9QQUdFX1NJWkUgPSAoMSA8PCBfUEFHRV9TSElGVCkKK2NvbnN0IF9SVEZfTk9ORVhU
SE9QID0gMHgwMDIwMDAwMAorY29uc3QgX19CSVRTX1dDSEFSX0ggPSAxCitjb25zdCBfUFJfU0VU
X1BERUFUSFNJRyA9IDEKK2NvbnN0IF9TWVNfaW9wZXJtID0gX19fTlJfaW9wZXJtCitjb25zdCBf
X0NTX1BPU0lYX1Y3X0lMUDMyX09GRjMyX0xJQlMgPSAxMTM0Citjb25zdCBfSUZMQV9WRl9WTEFO
X0lORk9fVU5TUEVDID0gMAorY29uc3QgX01TX05PRVhFQyA9IDgKK2NvbnN0IF9WVElNRSA9IDUK
K2NvbnN0IF9fX0lOVF9GQVNUNjRfV0lEVEhfXyA9IDY0Citjb25zdCBfSVBQT1JUX05FVFNUQVQg
PSAxNQorY29uc3QgX1NDTm8xNiA9ICJobyIKK2NvbnN0IF9OX0hETEMgPSAxMworY29uc3QgX1BP
UlRfVkRQX1JFU1BPTlNFX1ZUSURfVklPTEFUSU9OID0gNAorY29uc3QgX19TQ19USFJFQURfQVRU
Ul9TVEFDS0FERFIgPSA3NworY29uc3QgX0VUSF9QX0lQWCA9IDB4ODEzNworY29uc3QgX1BSSXVM
RUFTVDMyID0gInUiCitjb25zdCBfSUZMQV9NQUNWTEFOX01BQ0FERFJfTU9ERSA9IDMKK2NvbnN0
IF9GU19GTF9VU0VSX01PRElGSUFCTEUgPSAweDAwMDM4MEZGCitjb25zdCBfX19HQ0NfQVRPTUlD
X1RFU1RfQU5EX1NFVF9UUlVFVkFMID0gMQorY29uc3QgX19fTlJfcmVuYW1lYXQgPSAyNjQKK2Nv
bnN0IF9NU0dfRE9OVFJPVVRFID0gNAorY29uc3QgX1RJT0NTSUdfdmFsID0gMTA3NDAyNTUyNgor
Y29uc3QgX19QQVRIX05TU1dJVENIX0NPTkYgPSAiL2V0Yy9uc3N3aXRjaC5jb25mIgorY29uc3Qg
X1NZU19hY2NlcHQgPSBfX19OUl9hY2NlcHQKK2NvbnN0IF9QQUNLRVRfUkVTRVJWRSA9IDEyCitj
b25zdCBfU1RBX1BQU0pJVFRFUiA9IDB4MDIwMAorY29uc3QgX19fTlJfc2lnbmFsZmQgPSAyODIK
K2NvbnN0IF9TT19QRUVSU0VDID0gMzEKK2NvbnN0IF9fX0lOVF9XSURUSF9fID0gMzIKK2NvbnN0
IF9fWE9QRU5fSU9WX01BWCA9IF9fUE9TSVhfVUlPX01BWElPVgorY29uc3QgX05URl9VU0UgPSAw
eDAxCitjb25zdCBfX19CSUdfRU5ESUFOID0gNDMyMQorY29uc3QgX1VJTlQxNl9XSURUSCA9IDE2
Citjb25zdCBfU0VHVl9BQ0NFUlIgPSAyCitjb25zdCBfU0NObzMyID0gIm8iCitjb25zdCBfX19O
Ul9yZWN2ZnJvbSA9IDQ1Citjb25zdCBfVENQX0NPT0tJRV9JTl9BTFdBWVMgPSAoMSA8PCAwKQor
Y29uc3QgX1NLRl9BRF9QQVlfT0ZGU0VUID0gNTIKK2NvbnN0IF9TWVNfcmVhZHYgPSBfX19OUl9y
ZWFkdgorY29uc3QgX1BGX1JEUyA9IDIxCitjb25zdCBfSVBWNl9EU1RPUFRTID0gNTkKK2NvbnN0
IF9fU1lTX1BUUkFDRV9IID0gMQorY29uc3QgX1JUTV9GX05PVElGWSA9IDB4MTAwCitjb25zdCBf
VENQT1BUX1NBQ0sgPSA1Citjb25zdCBfVENQX01ENVNJR19FWFQgPSAzMgorY29uc3QgX0lGRl9C
Uk9BRENBU1QgPSAyCitjb25zdCBfSVBPUFRfU0FUSUQgPSAxMzYKK2NvbnN0IF9USU9DTUJJQyA9
IDB4NTQxNworY29uc3QgX0ZTX0lOREVYX0ZMID0gMHgwMDAwMTAwMAorY29uc3QgX1NZU191bmFt
ZSA9IF9fX05SX3VuYW1lCitjb25zdCBfTU9EX1RJTUVDT05TVCA9IF9BREpfVElNRUNPTlNUCitj
b25zdCBfTUNBU1RfSU5DTFVERSA9IDEKK2NvbnN0IF9JRkZfVFVOX0VYQ0wgPSAweDgwMDAKK2Nv
bnN0IF9QUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUgPSAzMQorY29uc3QgX0lQX01UVV9ESVND
T1ZFUiA9IDEwCitjb25zdCBfSUZMQV9WWExBTl9QT1JUX1JBTkdFID0gMTAKK2NvbnN0IF9fX05S
X3NjaGVkX3NldGF0dHIgPSAzMTQKK2NvbnN0IF9TWVNfc2V0cHJpb3JpdHkgPSBfX19OUl9zZXRw
cmlvcml0eQorY29uc3QgX0VTVFJQSVBFID0gODYKK2NvbnN0IF9SVEZfSVJUVCA9IDB4MDEwMAor
Y29uc3QgX0lGTEFfRVZFTlRfTk9ORSA9IDAKK2NvbnN0IF9UQ0FfT1BUSU9OUyA9IDIKK2NvbnN0
IF9TRUVLX0RBVEEgPSAzCitjb25zdCBfRl9PV05FUl9HSUQgPSAyCitjb25zdCBfRU5PTElOSyA9
IDY3Citjb25zdCBfTUFDVkxBTl9NT0RFX1ZFUEEgPSAyCitjb25zdCBfSUZMQV9CUl9WTEFOX0RF
RkFVTFRfUFZJRCA9IDM5Citjb25zdCBfVlNXVEMgPSA3Citjb25zdCBfU0FfSU5URVJSVVBUID0g
MHgyMDAwMDAwMAorY29uc3QgX19fREJMX0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9BUlBP
UF9JblJFUExZID0gOQorY29uc3QgX1NZU19zZW5kbXNnID0gX19fTlJfc2VuZG1zZworY29uc3Qg
X1JUTVNHX0RFTFJPVVRFID0gMHgyMgorY29uc3QgX1RJT0NHU0lEID0gMHg1NDI5Citjb25zdCBf
X1BPU0lYX0xJTktfTUFYID0gOAorY29uc3QgX05fTU9VU0UgPSAyCitjb25zdCBfU1lTX3JlYWRs
aW5rID0gX19fTlJfcmVhZGxpbmsKK2NvbnN0IF9fX05SX2ZjaGRpciA9IDgxCitjb25zdCBfX19J
TlRfRkFTVDY0X01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfUFRSQUNFX1NFVFJF
R1NFVCA9IDE2OTAxCitjb25zdCBfSU5fTk9OQkxPQ0sgPSAyMDQ4Citjb25zdCBfX19OUl9pbm90
aWZ5X2luaXQxID0gMjk0Citjb25zdCBfRkZJX1RZUEVfVk9JRCA9IDAKK2NvbnN0IF9GRF9DTE9F
WEVDID0gMQorY29uc3QgX19fTlJfc2V0c29ja29wdCA9IDU0Citjb25zdCBfRUNIT05MID0gMDAw
MDEwMAorY29uc3QgX19fTUFYX0JBVUQgPSBfQjQwMDAwMDAKK2NvbnN0IF9FVEhfTUFYX01UVSA9
IDB4RkZGRgorY29uc3QgX1BBQ0tFVF9RRElTQ19CWVBBU1MgPSAyMAorY29uc3QgX0NMT05FX05F
V1VUUyA9IDB4MDQwMDAwMDAKK2NvbnN0IF9TWVNfc2VtdGltZWRvcCA9IF9fX05SX3NlbXRpbWVk
b3AKK2NvbnN0IF9FVEhfUF9QSE9ORVQgPSAweDAwRjUKK2NvbnN0IF9JRkxBX09GRkxPQURfWFNU
QVRTX0NQVV9ISVQgPSAxCitjb25zdCBfX1BXRF9IID0gMQorY29uc3QgX19QT1NJWF9TSEVMTCA9
IDEKK2NvbnN0IF9GRklfU0laRU9GX0pBVkFfUkFXID0gX0ZGSV9TSVpFT0ZfQVJHCitjb25zdCBf
UFJfU1BFQ19GT1JDRV9ESVNBQkxFID0gKDEgPDwgMykKK2NvbnN0IF9OREFfU1JDX1ZOSSA9IDEx
Citjb25zdCBfX19XQ0hBUl9NSU4gPSBfX19XQ0hBUl9NSU5fXworY29uc3QgX05FVERCX0lOVEVS
TkFMID0gLTEKK2NvbnN0IF9fX1VTRV9NSVNDID0gMQorY29uc3QgX1BSSU9fTUFYID0gMjAKK2Nv
bnN0IF9fX3N0cnVjdF90bV9kZWZpbmVkID0gMQorY29uc3QgX0VUSEVSVFlQRV9BUlAgPSAweDA4
MDYKK2NvbnN0IF9fUE9TSVhfVElNRU9VVFMgPSAyMDA4MDkKK2NvbnN0IF9JRkxBX1ZYTEFOX1RU
TF9JTkhFUklUID0gMjgKK2NvbnN0IF9TUExJQ0VfRl9HSUZUID0gOAorY29uc3QgX19fQllURV9P
UkRFUl9fID0gX19fT1JERVJfTElUVExFX0VORElBTl9fCitjb25zdCBfX19SVE5MR1JQX01BWCA9
IDMyCitjb25zdCBfX1NDX1NBVkVEX0lEUyA9IDgKK2NvbnN0IF9MTE9OR19XSURUSCA9IDY0Citj
b25zdCBfU1lTX3NldGdyb3VwcyA9IF9fX05SX3NldGdyb3VwcworY29uc3QgX1NDTV9USU1FU1RB
TVAgPSBfU09fVElNRVNUQU1QCitjb25zdCBfUFJJbzMyID0gIm8iCitjb25zdCBfQURKX1NFVE9G
RlNFVCA9IDB4MDEwMAorY29uc3QgX1BSSVhMRUFTVDE2ID0gIlgiCitjb25zdCBfVEhfRklOID0g
MHgwMQorY29uc3QgX1VDSEFSX1dJRFRIID0gOAorY29uc3QgX1JUTV9HRVRBRERSTEFCRUwgPSA3
NAorY29uc3QgX19fU0lHUlRNQVggPSA2NAorY29uc3QgX0VSRVNUQVJUID0gODUKK2NvbnN0IF9f
U0NfVjdfSUxQMzJfT0ZGQklHID0gMjM4Citjb25zdCBfX1BDX0FTWU5DX0lPID0gMTAKK2NvbnN0
IF9fU1RSSU5HU19IID0gMQorY29uc3QgX19fdW5peF9fID0gMQorY29uc3QgX19fZXJyb3JfdF9k
ZWZpbmVkID0gMQorY29uc3QgX19TU19TSVpFID0gMTI4Citjb25zdCBfTkdSRUcgPSBfX19OR1JF
RworY29uc3QgX1NUQV9DTE9DS0VSUiA9IDB4MTAwMAorY29uc3QgX19fRkxUNjRYX0VQU0lMT05f
XyA9IDEuMQorY29uc3QgX1NUQVRYX01USU1FID0gMHgwMDQwCitjb25zdCBfQlBGX1JFVCA9IDB4
MDYKK2NvbnN0IF9IQVZFX1NUUkVSUk9SX1IgPSAxCitjb25zdCBfU1lTX3NlbmRtbXNnID0gX19f
TlJfc2VuZG1tc2cKK2NvbnN0IF9SVE1HUlBfSVBWNF9SVUxFID0gMHg4MAorY29uc3QgX1NZU19z
Y2hlZF9zZXRzY2hlZHVsZXIgPSBfX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKK2NvbnN0IF9OREFf
Q0FDSEVJTkZPID0gMworY29uc3QgX0NMT05FX1ZNID0gMHgwMDAwMDEwMAorY29uc3QgX0ZJTEVf
REVEVVBFX1JBTkdFX0RJRkZFUlMgPSAxCitjb25zdCBfX0lPQ19ESVJCSVRTID0gMgorY29uc3Qg
X1dVTlRSQUNFRCA9IDIKK2NvbnN0IF9QUl9NQ0VfS0lMTF9TRVQgPSAxCitjb25zdCBfU0tGX0FE
X1FVRVVFID0gMjQKK2NvbnN0IF9fX05SX2xjaG93biA9IDk0Citjb25zdCBfUFJfU0VUX01NX1NU
QVJUX1NUQUNLID0gNQorY29uc3QgX19fRkxPQVRfV09SRF9PUkRFUl9fID0gX19fT1JERVJfTElU
VExFX0VORElBTl9fCitjb25zdCBfUk1ORVRfRkxBR1NfSU5HUkVTU19NQVBfQ09NTUFORFMgPSAo
MSA8PCAxKQorY29uc3QgX19QT1NJWF9TSUdRVUVVRV9NQVggPSAzMgorY29uc3QgX19TWVNfRVBP
TExfSCA9IDEKK2NvbnN0IF9DSEFSX1dJRFRIID0gOAorY29uc3QgX19fU0laRU9GX1NFTV9UID0g
MzIKK2NvbnN0IF9YQVRUUl9TSVpFX01BWCA9IDY1NTM2Citjb25zdCBfX19OUl9tb2RpZnlfbGR0
ID0gMTU0Citjb25zdCBfU1lTX2Vwb2xsX2N0bCA9IF9fX05SX2Vwb2xsX2N0bAorY29uc3QgX1RD
UElfT1BUX1dTQ0FMRSA9IDQKK2NvbnN0IF9fU0NfTEVWRUwxX0lDQUNIRV9BU1NPQyA9IDE4Ngor
Y29uc3QgX0lQVjZfUlRIRFJfTE9PU0UgPSAwCitjb25zdCBfU1lTX3NjaGVkX2dldF9wcmlvcml0
eV9tYXggPSBfX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4Citjb25zdCBfSVBQT1JUX0JJRkZV
RFAgPSA1MTIKK2NvbnN0IF9GSU9OUkVBRCA9IDB4NTQxQgorY29uc3QgX01MRF9MSVNURU5FUl9S
RURVQ1RJT04gPSAxMzIKK2NvbnN0IF9DWDg2X0NDUjUgPSAweGU5Citjb25zdCBfVElPQ1NFUkdX
SUxEID0gMHg1NDU0Citjb25zdCBfX19OUl9lcG9sbF9jdGxfb2xkID0gMjE0Citjb25zdCBfRUtF
WVJFSkVDVEVEID0gMTI5Citjb25zdCBfWDg2X0NSMF9DRF9CSVQgPSAzMAorY29uc3QgX01BUF9O
T05CTE9DSyA9IDB4MTAwMDAKK2NvbnN0IF9TWVNfc3luY2ZzID0gX19fTlJfc3luY2ZzCitjb25z
dCBfVEFCRExZID0gMDAxNDAwMAorY29uc3QgX19fR05VQ19NSU5PUl9fID0gMworY29uc3QgX0hB
VkVfU0VNQVBIT1JFX0ggPSAxCitjb25zdCBfU0lHX1VOQkxPQ0sgPSAxCitjb25zdCBfX19OUl9w
cmN0bCA9IDE1NworY29uc3QgX19fTlJfcHJvY2Vzc192bV93cml0ZXYgPSAzMTEKK2NvbnN0IF9J
RkxBX0JSX01DQVNUX1NUQVJUVVBfUVVFUllfQ05UID0gMjkKK2NvbnN0IF9JUFBPUlRfRElTQ0FS
RCA9IDkKK2NvbnN0IF9OQlBHID0gX1BBR0VfU0laRQorY29uc3QgX19DU19YQlM1X0xQNjRfT0ZG
NjRfQ0ZMQUdTID0gMTEwOAorY29uc3QgX1NZU19pb2N0bCA9IF9fX05SX2lvY3RsCitjb25zdCBf
U1lTX3BvbGwgPSBfX19OUl9wb2xsCitjb25zdCBfUk1ORVRfRkxBR1NfSU5HUkVTU19NQVBfQ0tT
VU1WNCA9ICgxIDw8IDIpCitjb25zdCBfSVBWNl8yMjkyUEtUT1BUSU9OUyA9IDYKK2NvbnN0IF9U
SU9DTV9DVFMgPSAweDAyMAorY29uc3QgX1BUUkRJRkZfTUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4
MDcpCitjb25zdCBfSUZMQV9TVEFUU19BRl9TUEVDID0gNQorY29uc3QgX0lGTEFfVFVOX01VTFRJ
X1FVRVVFID0gNworY29uc3QgX1JUQV9QQUQgPSAyNAorY29uc3QgX1NZU19pb3BsID0gX19fTlJf
aW9wbAorY29uc3QgX05FVF9NQUpPUiA9IDM2Citjb25zdCBfU1lTX21zZ3NuZCA9IF9fX05SX21z
Z3NuZAorY29uc3QgX19fU19JRVhFQyA9IDAxMDAKK2NvbnN0IF9fU0NfREVMQVlUSU1FUl9NQVgg
PSAyNgorY29uc3QgX1NZU19leGl0ID0gX19fTlJfZXhpdAorY29uc3QgX1NZU19yZXN0YXJ0X3N5
c2NhbGwgPSBfX19OUl9yZXN0YXJ0X3N5c2NhbGwKK2NvbnN0IF9QUklYTEVBU1QzMiA9ICJYIgor
Y29uc3QgX0lGTEFfSFNSX1NVUEVSVklTSU9OX0FERFIgPSA0Citjb25zdCBfU0lHU1lTID0gMzEK
K2NvbnN0IF9GU19YRkxBR19GSUxFU1RSRUFNID0gMHgwMDAwNDAwMAorY29uc3QgX0lQUFJPVE9f
SUNNUFY2ID0gNTgKK2NvbnN0IF9FVUNMRUFOID0gMTE3Citjb25zdCBfUFJfU0VUX0ZQRU1VID0g
MTAKK2NvbnN0IF9FVEhfUF9BVEFMSyA9IDB4ODA5QgorY29uc3QgX1BGX0lCID0gMjcKK2NvbnN0
IF9fX1VTRV9QT1NJWDE5OTUwNiA9IDEKK2NvbnN0IF9TWVNfbmFub3NsZWVwID0gX19fTlJfbmFu
b3NsZWVwCitjb25zdCBfSVBfRFJPUF9NRU1CRVJTSElQID0gMzYKK2NvbnN0IF9XSU5UX01BWCA9
ICg0Mjk0OTY3Mjk1KQorY29uc3QgX0lGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfUlggPSAyMAor
Y29uc3QgX0VDT05OQUJPUlRFRCA9IDEwMworY29uc3QgX1BSX1VOQUxJR05fTk9QUklOVCA9IDEK
K2NvbnN0IF9GU19ESVJTWU5DX0ZMID0gMHgwMDAxMDAwMAorY29uc3QgX1NJT0NERVZQUklWQVRF
ID0gMHg4OUYwCitjb25zdCBfX1NDX1RJTUVPVVRTID0gMTY0Citjb25zdCBfX19JTlRfTEVBU1Qz
Ml9NQVhfXyA9IDB4N2ZmZmZmZmYKK2NvbnN0IF9JTl9DTE9TRSA9IChfSU5fQ0xPU0VfV1JJVEUg
fCBfSU5fQ0xPU0VfTk9XUklURSkKK2NvbnN0IF9SVE1fTkVXTlNJRCA9IDg4Citjb25zdCBfX19O
Ul9pb19wZ2V0ZXZlbnRzID0gMzMzCitjb25zdCBfWDg2X0VGTEFHU19URl9CSVQgPSA4Citjb25z
dCBfX19OUl91bmxpbmsgPSA4NworY29uc3QgX0lQVE9TX1BSRUNfSU1NRURJQVRFID0gX0lQVE9T
X0NMQVNTX0NTMgorY29uc3QgX1VJTlRfTEVBU1QxNl9NQVggPSAoNjU1MzUpCitjb25zdCBfX19O
Ul9nZXRldWlkID0gMTA3Citjb25zdCBfU19JV0dSUCA9IChfU19JV1VTUiA+PiAzKQorY29uc3Qg
X19fUElFX18gPSAyCitjb25zdCBfVElPQ1BLVF9EQVRBID0gMAorY29uc3QgX19DU19WNl9XSURU
SF9SRVNUUklDVEVEX0VOVlMgPSAxCitjb25zdCBfRkZJX1RZUEVfRE9VQkxFID0gMworY29uc3Qg
X1JUQ0ZfRElSRUNUU1JDID0gMHgwNDAwMDAwMAorY29uc3QgX19fTlJfc3luY19maWxlX3Jhbmdl
ID0gMjc3Citjb25zdCBfSUZMQV9QT1JUX1ZTSV9UWVBFID0gMworY29uc3QgX0FESl9UQUkgPSAw
eDAwODAKK2NvbnN0IF9ORFVTRVJPUFRfVU5TUEVDID0gMAorY29uc3QgX19VVFNOQU1FX0RPTUFJ
Tl9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RICitjb25zdCBfTlJfRklMRSA9IDgxOTIKK2NvbnN0
IF9GX0dFVF9SV19ISU5UID0gMTAzNQorY29uc3QgX1BGX1BQUE9YID0gMjQKK2NvbnN0IF9TT19Q
RUVLX09GRiA9IDQyCitjb25zdCBfU09fUkNWQlVGID0gOAorY29uc3QgX19TQ19YQlM1X0lMUDMy
X09GRkJJRyA9IDEyNgorY29uc3QgX19fU0laRU9GX1BUSFJFQURfQ09OREFUVFJfVCA9IDQKK2Nv
bnN0IF9OX0hDSSA9IDE1Citjb25zdCBfUFJJdUxFQVNUOCA9ICJ1IgorY29uc3QgX1JUQVhfU1NU
SFJFU0ggPSA2Citjb25zdCBfSUZGX01VTFRJX1FVRVVFID0gMHgwMTAwCitjb25zdCBfUlRfQ0xB
U1NfTE9DQUwgPSAyNTUKK2NvbnN0IF9GSU9HRVRPV04gPSAweDg5MDMKK2NvbnN0IF9fX05SX3No
bWdldCA9IDI5Citjb25zdCBfWDg2X0VGTEFHU19ERl9CSVQgPSAxMAorY29uc3QgX1NPX1NFTEVD
VF9FUlJfUVVFVUUgPSA0NQorY29uc3QgX1NPQ0tfTk9OQkxPQ0sgPSAyMDQ4Citjb25zdCBfVUlO
VF9MRUFTVDMyX01BWCA9ICg0Mjk0OTY3Mjk1KQorY29uc3QgX1NJR1hGU1ogPSAyNQorY29uc3Qg
X0lGTEFfUFJPVElORk8gPSAxMgorY29uc3QgX19fTlJfbXVubG9ja2FsbCA9IDE1MgorY29uc3Qg
X0lQX01VTFRJQ0FTVF9BTEwgPSA0OQorY29uc3QgX0VDSE8gPSAwMDAwMDEwCitjb25zdCBfQVJQ
SFJEX0VFVEhFUiA9IDIKK2NvbnN0IF9DTERfQ09OVElOVUVEID0gNgorY29uc3QgX0VUSEVSVFlQ
RV9BVCA9IDB4ODA5QgorY29uc3QgX1NDSEFSX01BWCA9IF9fX1NDSEFSX01BWF9fCitjb25zdCBf
SUZMQV9NQUNTRUNfU0NCID0gMTEKK2NvbnN0IF9fX1VBUElfREVGX0VUSEhEUiA9IDEKK2NvbnN0
IF9JRkxBX0JSX05GX0NBTExfQVJQVEFCTEVTID0gMzgKK2NvbnN0IF9ORFRQQV9SRUFDSEFCTEVf
VElNRSA9IDMKK2NvbnN0IF9UQ1BfUkVQQUlSX1dJTkRPVyA9IDI5Citjb25zdCBfX19JRkxBX1RV
Tl9NQVggPSAxMAorY29uc3QgX0hBVkVfQVNfQ09NREFUX0dBUyA9IDEKK2NvbnN0IF9ORVRMSU5L
X0ROUlRNU0cgPSAxNAorY29uc3QgX1NZU19tcmVtYXAgPSBfX19OUl9tcmVtYXAKK2NvbnN0IF9Y
ODZfQ1I0X1BHRV9CSVQgPSA3Citjb25zdCBfSUZBX0FERFJFU1MgPSAxCitjb25zdCBfU0lPQ1NJ
RkRTVEFERFIgPSAweDg5MTgKK2NvbnN0IF9WUkVQUklOVCA9IDEyCitjb25zdCBfRVBPTExfQ1RM
X0RFTCA9IDIKK2NvbnN0IF9JRkxBX1FESVNDID0gNgorY29uc3QgX19fRUxGX18gPSAxCitjb25z
dCBfSU5fT1BFTiA9IDB4MDAwMDAwMjAKK2NvbnN0IF9FVEhfUF9UU04gPSAweDIyRjAKK2NvbnN0
IF9FVEhfUF9DT05UUk9MID0gMHgwMDE2Citjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fTlVNX1BP
UlRTID0gMgorY29uc3QgX0RUX0ZJRk8gPSAxCitjb25zdCBfU0NOaUZBU1Q4ID0gImhoaSIKK2Nv
bnN0IF9USU9DU0VURCA9IDB4NTQyMworY29uc3QgX19DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRG
TEFHUyA9IDExMDMKK2NvbnN0IF9JUE9QVF9PRkZTRVQgPSAyCitjb25zdCBfX19OUl9mc3RhdGZz
ID0gMTM4Citjb25zdCBfX19OUl9zZXRfdGhyZWFkX2FyZWEgPSAyMDUKK2NvbnN0IF9JRkxBX0JP
TkRfQVJQX0lOVEVSVkFMID0gNworY29uc3QgX1BSX1NFVF9NTV9TVEFSVF9EQVRBID0gMworY29u
c3QgX0VUSF9QX0VSU1BBTiA9IDB4ODhCRQorY29uc3QgX1NZU19zeXNpbmZvID0gX19fTlJfc3lz
aW5mbworY29uc3QgX1NZU19zZXRzaWQgPSBfX19OUl9zZXRzaWQKK2NvbnN0IF9PRkRFTCA9IDAw
MDAyMDAKK2NvbnN0IF9fUENfUFJJT19JTyA9IDExCitjb25zdCBfX19GTFRfTUlOX18gPSAxLjEK
K2NvbnN0IF9fX05SX2NvcHlfZmlsZV9yYW5nZSA9IDMyNgorY29uc3QgX0NMT05FX05FV05FVCA9
IDB4NDAwMDAwMDAKK2NvbnN0IF9SVEFfT0lGID0gNAorY29uc3QgX1NJX1NJR0lPID0gLTUKK2Nv
bnN0IF9fWE9QRU5fUkVBTFRJTUUgPSAxCitjb25zdCBfX19OUl9zZWNjb21wID0gMzE3Citjb25z
dCBfSUZMQV9DQVJSSUVSX1VQX0NPVU5UID0gNDcKK2NvbnN0IF9UQ1BfVUxQID0gMzEKK2NvbnN0
IF9fU0NfVElNRVJTID0gMTEKK2NvbnN0IF9QUkl1MTYgPSAidSIKK2NvbnN0IF9ORF9PUFRfU09V
UkNFX0xJTktBRERSID0gMQorY29uc3QgX0lGQV9GX0RFUFJFQ0FURUQgPSAweDIwCitjb25zdCBf
UlROSF9GX0RFQUQgPSAxCitjb25zdCBfRkZJX1RZUEVfRkxPQVQgPSAyCitjb25zdCBfVkVSQVNF
ID0gMgorY29uc3QgX1JUX0NMQVNTX01BSU4gPSAyNTQKK2NvbnN0IF9FTk9BTk8gPSA1NQorY29u
c3QgX1JUUFJPVF9NUlQgPSAxMAorY29uc3QgX19CSVRTX1RJTUVYX0ggPSAxCitjb25zdCBfSUZM
QV9YRFBfU0tCX1BST0dfSUQgPSA2Citjb25zdCBfX1NDX05MX0FSR01BWCA9IDExOQorY29uc3Qg
X0lGQV9NVUxUSUNBU1QgPSA3Citjb25zdCBfSVBQUk9UT19CRUVUUEggPSA5NAorY29uc3QgX0lQ
T1BUX1NFQ1VSX1RPUFNFQ1JFVCA9IDB4NmJjNQorY29uc3QgX19fU19JV1JJVEUgPSAwMjAwCitj
b25zdCBfRU5PVENPTk4gPSAxMDcKK2NvbnN0IF9QVFJBQ0VfU0VURlBYUkVHUyA9IDE5Citjb25z
dCBfX0NTX1BPU0lYX1Y3X0xQQklHX09GRkJJR19MREZMQUdTID0gMTE0NQorY29uc3QgX19fU19J
Rk1UID0gMDE3MDAwMAorY29uc3QgX0lQT0lCX01PREVfREFUQUdSQU0gPSAwCitjb25zdCBfX19G
TFQ2NFhfREVDSU1BTF9ESUdfXyA9IDIxCitjb25zdCBfX1NDX1BBR0VTSVpFID0gMzAKK2NvbnN0
IF9BUlBIUkRfQ0lTQ08gPSA1MTMKK2NvbnN0IF9fX0lGTEFfQlJfTUFYID0gNDUKK2NvbnN0IF9J
UFBST1RPX0RTVE9QVFMgPSA2MAorY29uc3QgX1JMSU1JVF9DUFUgPSAwCitjb25zdCBfTUFEVl9E
T05URFVNUCA9IDE2Citjb25zdCBfX19GTFQxMjhfSEFTX0lORklOSVRZX18gPSAxCitjb25zdCBf
X0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTID0gMTEyNworY29uc3QgX19TQ19OUFJP
Q0VTU09SU19DT05GID0gODMKK2NvbnN0IF9UQ0FfWFNUQVRTID0gNAorY29uc3QgX1BBQ0tFVF9N
Ul9BTExNVUxUSSA9IDIKK2NvbnN0IF9fX1NTRTJfTUFUSF9fID0gMQorY29uc3QgX09fTk9DVFRZ
ID0gMDQwMAorY29uc3QgX0NMT05FX0lPID0gMHg4MDAwMDAwMAorY29uc3QgX1NJT0NTSUZIV0JS
T0FEQ0FTVCA9IDB4ODkzNworY29uc3QgX19fc2lnX2F0b21pY190X2RlZmluZWQgPSAxCitjb25z
dCBfSEFWRV9BQ0NFUFQ0ID0gMQorY29uc3QgX19DU19HTlVfTElCQ19WRVJTSU9OID0gMgorY29u
c3QgX05MTV9GX0NSRUFURSA9IDB4NDAwCitjb25zdCBfUlRfQ0xBU1NfREVGQVVMVCA9IDI1Mwor
Y29uc3QgX0hBVkVfVU5MSU5LQVQgPSAxCitjb25zdCBfRU5PU1lTID0gMzgKK2NvbnN0IF9SVE1f
R0VUTVVMVElDQVNUID0gNTgKK2NvbnN0IF9JRkxBX0VWRU5UX0ZFQVRVUkVTID0gMgorY29uc3Qg
X19fSUZMQV9IU1JfTUFYID0gNworY29uc3QgX0VQT0xMX0NUTF9NT0QgPSAzCitjb25zdCBfRklP
TkJJTyA9IDB4NTQyMQorY29uc3QgX19TQ19QSUlfWFRJID0gNTQKK2NvbnN0IF9fUE9TSVgyX0Nf
REVWID0gX19fUE9TSVgyX1RISVNfVkVSU0lPTgorY29uc3QgX0FGX0FMRyA9IF9QRl9BTEcKK2Nv
bnN0IF9JRkxBX1BQUF9VTlNQRUMgPSAwCitjb25zdCBfU09fUkNWTE9XQVQgPSAxOAorY29uc3Qg
X0lOVDhfV0lEVEggPSA4Citjb25zdCBfWDg2X0NSMF9QR19CSVQgPSAzMQorY29uc3QgX0lQUE9S
VF9XSE9TRVJWRVIgPSA1MTMKK2NvbnN0IF9IQVZFX1NZU19NTUFOX0ggPSAxCitjb25zdCBfX19O
Ul9wd3JpdGU2NCA9IDE4Citjb25zdCBfSUZMQV9UVU5fT1dORVIgPSAxCitjb25zdCBfUlRBWF9G
QVNUT1BFTl9OT19DT09LSUUgPSAxNworY29uc3QgX0lGTEFfQk9ORF9MUF9JTlRFUlZBTCA9IDE5
Citjb25zdCBfUFRSQUNFX0dFVEZQUkVHUyA9IDE0Citjb25zdCBfQ0xPTkVfRklMRVMgPSAweDAw
MDAwNDAwCitjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18xMjhfQ0JDID0gNQorY29uc3Qg
X1NLRl9BRF9SQU5ET00gPSA1NgorY29uc3QgX01TR19XQUlUQUxMID0gMjU2Citjb25zdCBfUFJf
U0VUX01NX0VOVl9FTkQgPSAxMQorY29uc3QgX19fTlJfc2VuZG1zZyA9IDQ2Citjb25zdCBfRVRI
X1BfTUFQID0gMHgwMEY5Citjb25zdCBfX19OUl9nZXRzaWQgPSAxMjQKK2NvbnN0IF9fX05SX2lv
cHJpb19nZXQgPSAyNTIKK2NvbnN0IF9JRkxBX1ZGX0lCX05PREVfR1VJRCA9IDEwCitjb25zdCBf
TVNfUkVDID0gMTYzODQKK2NvbnN0IF9fUE9TSVhfVFJBQ0UgPSAtMQorY29uc3QgX19fRkxUMTI4
X0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9MT0NLX05CID0gNAorY29uc3QgX1BEUF9FTkRJ
QU4gPSBfX19QRFBfRU5ESUFOCitjb25zdCBfUFJfTUNFX0tJTExfRUFSTFkgPSAxCitjb25zdCBf
TkVUTElOS19BVURJVCA9IDkKK2NvbnN0IF9TWVNfc3RhdHggPSBfX19OUl9zdGF0eAorY29uc3Qg
X19TQ19TUElOX0xPQ0tTID0gMTU0Citjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fQUNUT1JfS0VZ
ID0gMworY29uc3QgX1BSX0ZQX01PREVfRlIgPSAoMSA8PCAwKQorY29uc3QgX1JUTV9HRVRUQ0xB
U1MgPSA0MgorY29uc3QgX0FJX0FERFJDT05GSUcgPSAweDAwMjAKK2NvbnN0IF9QUkl1OCA9ICJ1
IgorY29uc3QgX01BRFZfVU5NRVJHRUFCTEUgPSAxMworY29uc3QgX1BSSXUzMiA9ICJ1IgorY29u
c3QgX1NZU19zaHV0ZG93biA9IF9fX05SX3NodXRkb3duCitjb25zdCBfSEFWRV9MSU5VWF9GU19I
ID0gMQorY29uc3QgX05fUjM5NjQgPSA5Citjb25zdCBfSVBQUk9UT19BSCA9IDUxCitjb25zdCBf
RVhGVUxMID0gNTQKK2NvbnN0IF9fUE9TSVhfUkFXX1NPQ0tFVFMgPSAyMDA4MDkKK2NvbnN0IF9F
QlVTWSA9IDE2Citjb25zdCBfQjI1MDAwMDAgPSAwMDEwMDE0Citjb25zdCBfX19OUl9nZXRzb2Nr
bmFtZSA9IDUxCitjb25zdCBfUFJJWEZBU1Q4ID0gIlgiCitjb25zdCBfU1lTX3RraWxsID0gX19f
TlJfdGtpbGwKK2NvbnN0IF9fX2FtZDY0X18gPSAxCitjb25zdCBfSVBUT1NfUFJFQ19QUklPUklU
WSA9IF9JUFRPU19DTEFTU19DUzEKK2NvbnN0IF9DVElNRSA9IDAKK2NvbnN0IF9fX0ZMVDMyWF9I
QVNfSU5GSU5JVFlfXyA9IDEKK2NvbnN0IF9FVU5BVENIID0gNDkKK2NvbnN0IF9fU0NfMl9QQlNf
QUNDT1VOVElORyA9IDE2OQorY29uc3QgX19QT1NJWF9USFJFQURfU1BPUkFESUNfU0VSVkVSID0g
LTEKK2NvbnN0IF9fX05SX21sb2NrMiA9IDMyNQorY29uc3QgX0lQUE9SVF9XSE9JUyA9IDQzCitj
b25zdCBfX19OUl9nZXRfdGhyZWFkX2FyZWEgPSAyMTEKK2NvbnN0IF9GX09GRF9HRVRMSyA9IDM2
Citjb25zdCBfTkxBX0FMSUdOVE8gPSA0Citjb25zdCBfRU5PTUVESVVNID0gMTIzCitjb25zdCBf
X0dOVV9TT1VSQ0UgPSAxCitjb25zdCBfU1lTX3B0cmFjZSA9IF9fX05SX3B0cmFjZQorY29uc3Qg
X1NJT0NHSUZJTkRFWCA9IDB4ODkzMworY29uc3QgX0UyQklHID0gNworY29uc3QgX0lDTVA2X1JS
X0ZMQUdTX0ZPUkNFQVBQTFkgPSAweDIwCitjb25zdCBfU0lfVEtJTEwgPSAtNgorY29uc3QgX19T
Q19USFJFQURfU1BPUkFESUNfU0VSVkVSID0gMTYxCitjb25zdCBfX194ODZfNjRfXyA9IDEKK2Nv
bnN0IF9TWVNfZnV0ZXggPSBfX19OUl9mdXRleAorY29uc3QgX0lOX0RFTEVURSA9IDB4MDAwMDAy
MDAKK2NvbnN0IF9GRkRMWSA9IDAxMDAwMDAKK2NvbnN0IF9NQ0FTVF9MRUFWRV9TT1VSQ0VfR1JP
VVAgPSA0NworY29uc3QgX1NfSVhVU1IgPSBfX19TX0lFWEVDCitjb25zdCBfX1NZU19TRUxFQ1Rf
SCA9IDEKK2NvbnN0IF9QUklkOCA9ICJkIgorY29uc3QgX19fTlJfaW5vdGlmeV9hZGRfd2F0Y2gg
PSAyNTQKK2NvbnN0IF9TQ05vOCA9ICJoaG8iCitjb25zdCBfTUNMX09ORkFVTFQgPSA0Citjb25z
dCBfRlNfRUFfSU5PREVfRkwgPSAweDAwMjAwMDAwCitjb25zdCBfX19OUl9vcGVuYXQgPSAyNTcK
K2NvbnN0IF9UVU5TRVRQRVJTSVNUX3ZhbCA9IDEwNzQwMjU2NzUKK2NvbnN0IF9fX05SX2ZkYXRh
c3luYyA9IDc1Citjb25zdCBfRl9TRVRMRUFTRSA9IDEwMjQKK2NvbnN0IF9fU0NfRkRfTUdNVCA9
IDE0MworY29uc3QgX19fQklUU19QRVJfTE9ORyA9IDY0Citjb25zdCBfUFJJT19NSU4gPSAtMjAK
K2NvbnN0IF9fX05SX3BybGltaXQ2NCA9IDMwMgorY29uc3QgX1JUTV9ERUxURklMVEVSID0gNDUK
K2NvbnN0IF9SVE1fR0VUQ0hBSU4gPSAxMDIKK2NvbnN0IF9SVEVYVF9GSUxURVJfVkYgPSAoMSA8
PCAwKQorY29uc3QgX1NUQVRYX0lOTyA9IDB4MDEwMAorY29uc3QgX19fTkVUSU5FVF9JRl9FVEhF
Ul9IID0gMQorY29uc3QgX1NZU19yZWN2bW1zZyA9IF9fX05SX3JlY3ZtbXNnCitjb25zdCBfSEFW
RV9TQ0hFRF9IID0gMQorY29uc3QgX0VUSF9QX1JBUlAgPSAweDgwMzUKK2NvbnN0IF9fU1RSVUNU
X1RJTUVTUEVDID0gMQorY29uc3QgX1NPX1JFVVNFUE9SVCA9IDE1Citjb25zdCBfX1BPU0lYX1NF
TV9OU0VNU19NQVggPSAyNTYKK2NvbnN0IF9fX0xEQkxfRVBTSUxPTl9fID0gMS4xCitjb25zdCBf
X19jbG9ja190X2RlZmluZWQgPSAxCitjb25zdCBfTUFQX1RZUEUgPSAweDBmCitjb25zdCBfTkVU
TElOS19TT0NLX0RJQUcgPSA0Citjb25zdCBfX19VU0VfWE9QRU5fRVhURU5ERUQgPSAxCitjb25z
dCBfUlROX1BST0hJQklUID0gOAorY29uc3QgX1BBQ0tFVF9UWF9IQVNfT0ZGID0gMTkKK2NvbnN0
IF9UQ1BfUkVQQUlSID0gMTkKK2NvbnN0IF9JRkxBX1ZMQU5fRkxBR1MgPSAyCitjb25zdCBfX19O
Ul9kdXAgPSAzMgorY29uc3QgX0FGX1RJUEMgPSBfUEZfVElQQworY29uc3QgX0lGTEFfR1RQX1JP
TEUgPSA0Citjb25zdCBfX19OUl9mdXRpbWVzYXQgPSAyNjEKK2NvbnN0IF9fX1VTRV9LRVJORUxf
SVBWNl9ERUZTID0gMAorY29uc3QgX0lGTEFfVlhMQU5fUFJPWFkgPSAxMQorY29uc3QgX0hBVkVf
VU5JU1REX0ggPSAxCitjb25zdCBfWDg2X0NSMF9BTV9CSVQgPSAxOAorY29uc3QgX0lGTEFfVlhM
QU5fUkVNQ1NVTV9OT1BBUlRJQUwgPSAyNAorY29uc3QgX0lGTEFfTUFDVkxBTl9NQUNBRERSID0g
NAorY29uc3QgX0lQVE9TX1BSRUNfRkxBU0hPVkVSUklERSA9IF9JUFRPU19DTEFTU19DUzQKK2Nv
bnN0IF9fX1NJR1JUTUlOID0gMzIKK2NvbnN0IF9fX05SX2ZjbnRsID0gNzIKK2NvbnN0IF9TWVNf
X3N5c2N0bCA9IF9fX05SX19zeXNjdGwKK2NvbnN0IF9FTkVUVU5SRUFDSCA9IDEwMQorY29uc3Qg
X1NZU19tcV90aW1lZHNlbmQgPSBfX19OUl9tcV90aW1lZHNlbmQKK2NvbnN0IF9USU9DU0VSR0VU
TFNSID0gMHg1NDU5Citjb25zdCBfU09MX0lVQ1YgPSAyNzcKK2NvbnN0IF9STElNSVRfRlNJWkUg
PSAxCitjb25zdCBfX19SVEFfTUFYID0gMzAKK2NvbnN0IF9CUEZfVEFYID0gMHgwMAorY29uc3Qg
X1NUQVRYX19SRVNFUlZFRCA9IDB4ODAwMDAwMDAKK2NvbnN0IF9fU0NfU1lOQ0hST05JWkVEX0lP
ID0gMTQKK2NvbnN0IF9fX1JUTl9NQVggPSAxMgorY29uc3QgX0lOVDMyX1dJRFRIID0gMzIKK2Nv
bnN0IF9ORF9PUFRfTVRVID0gNQorY29uc3QgX1NJR19BVE9NSUNfV0lEVEggPSAzMgorY29uc3Qg
X19TQ19FUVVJVl9DTEFTU19NQVggPSA0MQorY29uc3QgX19QT1NJWF9DTE9DS1JFU19NSU4gPSAy
MDAwMDAwMAorY29uc3QgX19fR0NDX0FUT01JQ19JTlRfTE9DS19GUkVFID0gMgorY29uc3QgX1BP
U0lYX0ZBRFZfTk9STUFMID0gMAorY29uc3QgX0lQX0RST1BfU09VUkNFX01FTUJFUlNISVAgPSA0
MAorY29uc3QgX1NFRUtfTUFYID0gX1NFRUtfSE9MRQorY29uc3QgX0FSUEhSRF9NRVRSSUNPTSA9
IDIzCitjb25zdCBfSUZMQV9WTEFOX0VHUkVTU19RT1MgPSAzCitjb25zdCBfU1lTX2Nsb25lID0g
X19fTlJfY2xvbmUKK2NvbnN0IF9fU1lTX1RJTUVTX0ggPSAxCitjb25zdCBfX19GTFQ2NFhfTUFY
X0VYUF9fID0gMTYzODQKK2NvbnN0IF9TX0lTR0lEID0gX19fU19JU0dJRAorY29uc3QgX0lQVjZf
UlRIRFJfVFlQRV8wID0gMAorY29uc3QgX1NJR1NUT1AgPSAxOQorY29uc3QgX0ZTX1VOUk1fRkwg
PSAweDAwMDAwMDAyCitjb25zdCBfX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyA9IDIwMDgw
OQorY29uc3QgX1BSX0ZQX0VYQ19OT05SRUNPViA9IDEKK2NvbnN0IF9UVU5HRVRWTkVUSERSU1pf
dmFsID0gMjE0Nzc2NzUxMQorY29uc3QgX0lHTkJSSyA9IDAwMDAwMDEKK2NvbnN0IF9fX05FVFBB
Q0tFVF9QQUNLRVRfSCA9IDEKK2NvbnN0IF9TWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiA9IF9f
X05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4KK2NvbnN0IF9OX01BU0MgPSA4Citjb25zdCBfSUZM
QV9CT05EX0FEX1NFTEVDVCA9IDIyCitjb25zdCBfSVBWNl9JUFNFQ19QT0xJQ1kgPSAzNAorY29u
c3QgX0FGX0xMQyA9IF9QRl9MTEMKK2NvbnN0IF9TSU9DU1JBUlAgPSAweDg5NjIKK2NvbnN0IF9S
VEFfUFJFRlNSQyA9IDcKK2NvbnN0IF9TT19TTkRCVUZGT1JDRSA9IDMyCitjb25zdCBfX19XQ0xP
TkUgPSAweDgwMDAwMDAwCitjb25zdCBfX19GTFRfSEFTX0RFTk9STV9fID0gMQorY29uc3QgX1JV
U0FHRV9USFJFQUQgPSAxCitjb25zdCBfSUZGX1BST01JU0MgPSAyNTYKK2NvbnN0IF9QRl9USVBD
ID0gMzAKK2NvbnN0IF9TWVNfcHV0cG1zZyA9IF9fX05SX3B1dHBtc2cKK2NvbnN0IF9NQUNTRUNf
VkFMSURBVEVfU1RSSUNUID0gMgorY29uc3QgX1RDQV9JTkdSRVNTX0JMT0NLID0gMTMKK2NvbnN0
IF9fX0FUT01JQ19ITEVfUkVMRUFTRSA9IDEzMTA3MgorY29uc3QgX1NZU19nZXRybGltaXQgPSBf
X19OUl9nZXRybGltaXQKK2NvbnN0IF9SVE1fU0VURENCID0gNzkKK2NvbnN0IF9SVE1TR19ERUxE
RVZJQ0UgPSAweDEyCitjb25zdCBfSUNNUDZfUlJfUENPVVNFX1JBRkxBR1NfT05MSU5LID0gMHgy
MAorY29uc3QgX1NZU19tZW1iYXJyaWVyID0gX19fTlJfbWVtYmFycmllcgorY29uc3QgX1NJT0NH
UEdSUCA9IDB4ODkwNAorY29uc3QgX19DU19MRlM2NF9MREZMQUdTID0gMTAwNQorY29uc3QgX0Iz
ODQwMCA9IDAwMDAwMTcKK2NvbnN0IF9IQVZFX0xJTlVYX0lGX1RVTl9IID0gMQorY29uc3QgX0FS
UEhSRF9BUFBMRVRMSyA9IDgKK2NvbnN0IF9QUl9HRVRfU0VDVVJFQklUUyA9IDI3Citjb25zdCBf
Q01JTiA9IDEKK2NvbnN0IF9OVURfTk9ORSA9IDB4MDAKK2NvbnN0IF9JRkxBX1ZYTEFOX1RUTCA9
IDUKK2NvbnN0IF9fX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFID0gMgorY29uc3QgX0lO
X0NMT1NFX05PV1JJVEUgPSAweDAwMDAwMDEwCitjb25zdCBfX19BVE9NSUNfU0VRX0NTVCA9IDUK
K2NvbnN0IF9TWVNfaW5vdGlmeV9pbml0ID0gX19fTlJfaW5vdGlmeV9pbml0Citjb25zdCBfVElP
Q1NFUkdTVFJVQ1QgPSAweDU0NTgKK2NvbnN0IF9OTE1fRl9EVU1QID0gKF9OTE1fRl9ST09UfF9O
TE1fRl9NQVRDSCkKK2NvbnN0IF9fU0NfU1BBV04gPSAxNTkKK2NvbnN0IF9fUENfUkVDX01BWF9Y
RkVSX1NJWkUgPSAxNQorY29uc3QgX1NJT0NBRERETENJID0gMHg4OTgwCitjb25zdCBfX19MREJM
X01BWF9FWFBfXyA9IDE2Mzg0Citjb25zdCBfX0xGUzY0X1NURElPID0gMQorY29uc3QgX1NZU190
dXhjYWxsID0gX19fTlJfdHV4Y2FsbAorY29uc3QgX19TWVNfVU5fSCA9IDEKK2NvbnN0IF9JQ01Q
Nl9GSUxURVJfQkxPQ0sgPSAxCitjb25zdCBfRVJFTUNIRyA9IDc4Citjb25zdCBfTkVUTElOS19B
RERfTUVNQkVSU0hJUCA9IDEKK2NvbnN0IF9YODZfRUZMQUdTX1ZJUF9CSVQgPSAyMAorY29uc3Qg
X1RDUElfT1BUX1NZTl9EQVRBID0gMzIKK2NvbnN0IF9fX05SX3VtYXNrID0gOTUKK2NvbnN0IF9X
SU5UX01JTiA9ICgwKQorY29uc3QgX19QT1NJWF9NRU1MT0NLID0gMjAwODA5Citjb25zdCBfX1ND
X0NIQVJDTEFTU19OQU1FX01BWCA9IDQ1Citjb25zdCBfSUZMQV9JUFZMQU5fRkxBR1MgPSAyCitj
b25zdCBfX1BPU0lYX1JFQURFUl9XUklURVJfTE9DS1MgPSAyMDA4MDkKK2NvbnN0IF9IQVZFX0xJ
TlVYX1BUUkFDRV9IID0gMQorY29uc3QgX1g4Nl9DUjRfU01YRV9CSVQgPSAxNAorY29uc3QgX0lY
T0ZGID0gMDAxMDAwMAorY29uc3QgX01TX05PVVNFUiA9IC0yMTQ3NDgzNjQ4Citjb25zdCBfX19C
SUdHRVNUX0FMSUdOTUVOVF9fID0gMTYKK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEX01BU0sg
PSAweDAzCitjb25zdCBfRVRIX1BfRERDTVAgPSAweDAwMDYKK2NvbnN0IF9fX05SX3J0X3NpZ3N1
c3BlbmQgPSAxMzAKK2NvbnN0IF9YX09LID0gMQorY29uc3QgX09fQVNZTkMgPSAwMjAwMDAKK2Nv
bnN0IF9USU9DTElOVVggPSAweDU0MUMKK2NvbnN0IF9fX1NJWkVPRl9TSVpFX1RfXyA9IDgKK2Nv
bnN0IF9OVURfTk9BUlAgPSAweDQwCitjb25zdCBfU19JRkRJUiA9IF9fX1NfSUZESVIKK2NvbnN0
IF9fX1VTRV9YT1BFTjJLWFNJID0gMQorY29uc3QgX19fVVNFX0dOVSA9IDEKK2NvbnN0IF9OVEZf
TUFTVEVSID0gMHgwNAorY29uc3QgX19fQVRPTUlDX0FDUVVJUkUgPSAyCitjb25zdCBfTl82UEFD
SyA9IDcKK2NvbnN0IF9JRkxBX0VWRU5UX0lHTVBfUkVTRU5EID0gNQorY29uc3QgX0lQX0RGID0g
MHg0MDAwCitjb25zdCBfSVBPUFRfT1BUVkFMID0gMAorY29uc3QgX19QQVRIX0hPU1RTID0gIi9l
dGMvaG9zdHMiCitjb25zdCBfX19OUl9ldmVudGZkID0gMjg0Citjb25zdCBfU09fU05EQlVGID0g
NworY29uc3QgX19fTlJfbHNlZWsgPSA4Citjb25zdCBfX19OUl9ta2RpcmF0ID0gMjU4Citjb25z
dCBfRFRfVU5LTk9XTiA9IDAKK2NvbnN0IF9JRkxBX1ZMQU5fSUQgPSAxCitjb25zdCBfX1NDX1BJ
SV9JTlRFUk5FVF9TVFJFQU0gPSA2MQorY29uc3QgX0ZfU0VUT1dOID0gX19fRl9TRVRPV04KK2Nv
bnN0IF9fQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSUJTID0gMTEyNgorY29uc3QgX1RJT0NTU0VS
SUFMID0gMHg1NDFGCitjb25zdCBfRU5PTkVUID0gNjQKK2NvbnN0IF9BUlBIUkRfQVRNID0gMTkK
K2NvbnN0IF9YODZfRUZMQUdTX0FGX0JJVCA9IDQKK2NvbnN0IF9fX05SX3NldHJlc2dpZCA9IDEx
OQorY29uc3QgX1NZU19tdW5tYXAgPSBfX19OUl9tdW5tYXAKK2NvbnN0IF9DWDg2X1BDUjAgPSAw
eDIwCitjb25zdCBfX19JTlRNQVhfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9f
X05SX2Nocm9vdCA9IDE2MQorY29uc3QgX19fR0NDX0FUT01JQ19DSEFSX0xPQ0tfRlJFRSA9IDIK
K2NvbnN0IF9FVEhfRlJBTUVfTEVOID0gMTUxNAorY29uc3QgX1BUUkFDRV9FVkVOVF9GT1JLID0g
MQorY29uc3QgX0lGTEFfQk9ORF9OVU1fUEVFUl9OT1RJRiA9IDE2Citjb25zdCBfQ0xPQ0tfUkVB
TFRJTUUgPSAwCitjb25zdCBfTkRBX1BST0JFUyA9IDQKK2NvbnN0IF9fUENfUkVDX0lOQ1JfWEZF
Ul9TSVpFID0gMTQKK2NvbnN0IF9JRkxBX1BST1RPX0RPV04gPSAzOQorY29uc3QgX1VJTlRfRkFT
VDMyX1dJRFRIID0gX19fV09SRFNJWkUKK2NvbnN0IF9fU0NfMl9QQlNfVFJBQ0sgPSAxNzIKK2Nv
bnN0IF9BUlBEX0ZMVVNIID0gMHgwMworY29uc3QgX1NDTnhMRUFTVDggPSAiaGh4IgorY29uc3Qg
X1RSWV9BR0FJTiA9IDIKK2NvbnN0IF9fU1lTX1NZU0lORk9fSCA9IDEKK2NvbnN0IF9FVEhFUlRZ
UEVfSVAgPSAweDA4MDAKK2NvbnN0IF9BUlBIUkRfSUVFRTEzOTQgPSAyNAorY29uc3QgX0lOX0FD
Q0VTUyA9IDB4MDAwMDAwMDEKK2NvbnN0IF9JRkxBX0lGTkFNRSA9IDMKK2NvbnN0IF9UQ1BfVVNF
Ul9USU1FT1VUID0gMTgKK2NvbnN0IF9BUlBIUkRfSUVFRTgwMjExID0gODAxCitjb25zdCBfSUZM
QV9BRl9TUEVDID0gMjYKK2NvbnN0IF9CMTE1MjAwMCA9IDAwMTAwMTEKK2NvbnN0IF9FVEhfUF9U
RExTID0gMHg4OTBECitjb25zdCBfX0JJVFNfU0lHU1RBQ0tfSCA9IDEKK2NvbnN0IF9QRl9CTFVF
VE9PVEggPSAzMQorY29uc3QgX19CSVRTX1NJR0NPTlRFWFRfSCA9IDEKK2NvbnN0IF9USU9DU1dJ
TlNaX3ZhbCA9IDIxNTI0Citjb25zdCBfRUFJX0FMTERPTkUgPSAtMTAzCitjb25zdCBfX19MREJM
X01BWF8xMF9FWFBfXyA9IDQ5MzIKK2NvbnN0IF9JRkxBX1NUQVRTX0xJTktfNjQgPSAxCitjb25z
dCBfVUlOVF9GQVNUMzJfTUFYID0gKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQorY29uc3QgX0ZGSV9T
WVNWID0gMQorY29uc3QgX19TWVNfRklMRV9IID0gMQorY29uc3QgX0lQX09SSUdEU1RBRERSID0g
MjAKK2NvbnN0IF9FVEhfUF9TQ0EgPSAweDYwMDcKK2NvbnN0IF9SVE1HUlBfSVBWNl9QUkVGSVgg
PSAweDIwMDAwCitjb25zdCBfX19OUl9zZXRwcmlvcml0eSA9IDE0MQorY29uc3QgX1RJT0NQS1Rf
Tk9TVE9QID0gMTYKK2NvbnN0IF9JUF9QTVRVRElTQ19PTUlUID0gNQorY29uc3QgX0NPTExfV0VJ
R0hUU19NQVggPSAyNTUKK2NvbnN0IF9PX1RSVU5DID0gMDEwMDAKK2NvbnN0IF9fX05SX3NldGhv
c3RuYW1lID0gMTcwCitjb25zdCBfRklPTkNMRVggPSAweDU0NTAKK2NvbnN0IF9GU19YRkxBR19J
TU1VVEFCTEUgPSAweDAwMDAwMDA4Citjb25zdCBfRlNfSU5MSU5FX0RBVEFfRkwgPSAweDEwMDAw
MDAwCitjb25zdCBfUEZfQVgyNSA9IDMKK2NvbnN0IF9fX0FUT01JQ19BQ1FfUkVMID0gNAorY29u
c3QgX19fTlJfc3lzaW5mbyA9IDk5Citjb25zdCBfRlNfWEZMQUdfREFYID0gMHgwMDAwODAwMAor
Y29uc3QgX0lQVjZfUk9VVEVSX0FMRVJUID0gMjIKK2NvbnN0IF9JRkxBX0JSX0JSSURHRV9JRCA9
IDExCitjb25zdCBfWDg2X0NSNF9MQTU3X0JJVCA9IDEyCitjb25zdCBfX1NDX1ZFUlNJT04gPSAy
OQorY29uc3QgX1NUQVRYX0FUVFJfQ09NUFJFU1NFRCA9IDB4MDAwNAorY29uc3QgX0lQVjZfSERS
SU5DTCA9IDM2Citjb25zdCBfSUZMQV9CUlBPUlRfVU5JQ0FTVF9GTE9PRCA9IDkKK2NvbnN0IF9S
VE1fREVMTkVJR0ggPSAyOQorY29uc3QgX19fU1REQ19WRVJTSU9OX18gPSAxOTk5MDEKK2NvbnN0
IF9QRl9RSVBDUlRSID0gNDIKK2NvbnN0IF9BREpfRlJFUVVFTkNZID0gMHgwMDAyCitjb25zdCBf
X19MT05HX0xPTkdfV0lEVEhfXyA9IDY0Citjb25zdCBfQUZfQVNIID0gX1BGX0FTSAorY29uc3Qg
X0lQX1BNVFVESVNDX0RPTlQgPSAwCitjb25zdCBfSEFWRV9TWU5DX0ZFVENIX0FORF9BRERfNCA9
IDEKK2NvbnN0IF9JUFY2X0pPSU5fR1JPVVAgPSAyMAorY29uc3QgX1NLRl9BRF9WTEFOX1RBRyA9
IDQ0Citjb25zdCBfUFRSQUNFX0dFVF9USFJFQURfQVJFQSA9IDI1Citjb25zdCBfUlROTEdSUF9J
UFY0X01ST1VURV9SID0gMzAKK2NvbnN0IF9UQ0FfRUdSRVNTX0JMT0NLID0gMTQKK2NvbnN0IF9f
X1NJWkVPRl9QVEhSRUFEX01VVEVYX1QgPSA0MAorY29uc3QgX1NPX1RZUEUgPSAzCitjb25zdCBf
X19JRkxBX1ZMQU5fTUFYID0gNgorY29uc3QgX1BUUkFDRV9TRVRTSUdNQVNLID0gMTY5MDcKK2Nv
bnN0IF9DTE9ORV9WRk9SSyA9IDB4MDAwMDQwMDAKK2NvbnN0IF9JUFBST1RPX0lQID0gMAorY29u
c3QgX0VOT0VYRUMgPSA4Citjb25zdCBfU09fSU5DT01JTkdfQ1BVID0gNDkKK2NvbnN0IF9QUl9T
RVRfRlBFWEMgPSAxMgorY29uc3QgX1RDUF9XSU5ET1dfQ0xBTVAgPSAxMAorY29uc3QgX1NPX1JY
UV9PVkZMID0gNDAKK2NvbnN0IF9TWVNfdmZvcmsgPSBfX19OUl92Zm9yaworY29uc3QgX0lOX0NM
T0VYRUMgPSA1MjQyODgKK2NvbnN0IF9UQ0FfRkNOVCA9IDYKK2NvbnN0IF9fX0ZMVDY0WF9IQVNf
SU5GSU5JVFlfXyA9IDEKK2NvbnN0IF9fU0NfU0VNX1ZBTFVFX01BWCA9IDMzCitjb25zdCBfX05F
VElORVRfSUNNUDZfSCA9IDEKK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzI1Nl9DQkMg
PSAzCitjb25zdCBfX19STElNSVRfTVNHUVVFVUUgPSAxMgorY29uc3QgX0lQUFJPVE9fQ09NUCA9
IDEwOAorY29uc3QgX1BBQ0tFVF9SWF9SSU5HID0gNQorY29uc3QgX0lGTEFfQ0FSUklFUl9ET1dO
X0NPVU5UID0gNDgKK2NvbnN0IF9TT19CUEZfRVhURU5TSU9OUyA9IDQ4Citjb25zdCBfRUFERFJO
T1RBVkFJTCA9IDk5Citjb25zdCBfX19GTFQzMl9NSU5fXyA9IDEuMQorY29uc3QgX0lGTEFfQlJf
Rk9SV0FSRF9ERUxBWSA9IDEKK2NvbnN0IF9fX1NTRV9NQVRIX18gPSAxCitjb25zdCBfU1lTX3dh
aXRpZCA9IF9fX05SX3dhaXRpZAorY29uc3QgX1NDT1BFX0RFTElNSVRFUiA9ICclJworY29uc3Qg
X19fTlJfc29ja2V0ID0gNDEKK2NvbnN0IF9fX05FVF9FVEhFUk5FVF9IID0gMQorY29uc3QgX1Nf
SVJVU1IgPSBfX19TX0lSRUFECitjb25zdCBfSUZMQV9YRFBfRkQgPSAxCitjb25zdCBfSVBWNl9N
VFUgPSAyNAorY29uc3QgX0ZTX1hGTEFHX05PQVRJTUUgPSAweDAwMDAwMDQwCitjb25zdCBfRlNf
Sk9VUk5BTF9EQVRBX0ZMID0gMHgwMDAwNDAwMAorY29uc3QgX19fTlJfY2FwZ2V0ID0gMTI1Citj
b25zdCBfUlROX0FOWUNBU1QgPSA0Citjb25zdCBfUE9MTF9IVVAgPSA2Citjb25zdCBfSEFWRV9H
RVRJUElORk8gPSAxCitjb25zdCBfTVNfVU5CSU5EQUJMRSA9IDEzMTA3MgorY29uc3QgX19TVEFU
X1ZFUl9LRVJORUwgPSAwCitjb25zdCBfUFJfTUNFX0tJTEwgPSAzMworY29uc3QgX19QT1NJWF9W
Nl9MUEJJR19PRkZCSUcgPSAtMQorY29uc3QgX0FSUEhSRF9GQ0FMID0gNzg1Citjb25zdCBfU19J
RkNIUiA9IF9fX1NfSUZDSFIKK2NvbnN0IF9NQ0FTVF9CTE9DS19TT1VSQ0UgPSA0MworY29uc3Qg
X1NZU19nZXRncm91cHMgPSBfX19OUl9nZXRncm91cHMKK2NvbnN0IF9fX05SX3J0X3Rnc2lncXVl
dWVpbmZvID0gMjk3Citjb25zdCBfVUlOVDMyX01BWCA9ICg0Mjk0OTY3Mjk1KQorY29uc3QgX1RJ
TUVfVVRDID0gMQorY29uc3QgX0lOX1FfT1ZFUkZMT1cgPSAweDAwMDA0MDAwCitjb25zdCBfSUZM
QV9CUlBPUlRfSE9MRF9USU1FUiA9IDIzCitjb25zdCBfSUZMQV9JTkVUNl9DQUNIRUlORk8gPSA1
Citjb25zdCBfVElNRVJfQUJTVElNRSA9IDEKK2NvbnN0IF9NQVBfRklYRUQgPSAweDEwCitjb25z
dCBfRl9PV05FUl9USUQgPSAwCitjb25zdCBfX1NDX0NMT0NLX1NFTEVDVElPTiA9IDEzNworY29u
c3QgX0hBVkVfRkNITU9EQVQgPSAxCitjb25zdCBfX0NTX1BPU0lYX1Y3X0xQQklHX09GRkJJR19D
RkxBR1MgPSAxMTQ0Citjb25zdCBfQVRfU1RBVFhfU1lOQ19BU19TVEFUID0gMHgwMDAwCitjb25z
dCBfUE9SVF9WRFBfUkVTUE9OU0VfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyA9IDIKK2NvbnN0IF9U
Q1BfVElNRV9XQUlUID0gNgorY29uc3QgX0JQRl9TVCA9IDB4MDIKK2NvbnN0IF9fUE9TSVhfU1BP
UkFESUNfU0VSVkVSID0gLTEKK2NvbnN0IF9BRl9TRUNVUklUWSA9IF9QRl9TRUNVUklUWQorY29u
c3QgX1BGX1gyNSA9IDkKK2NvbnN0IF9QVFJBQ0VfQVJDSF9QUkNUTCA9IDMwCitjb25zdCBfRVNP
Q0tUTk9TVVBQT1JUID0gOTQKK2NvbnN0IF9USU9DR1NFUklBTCA9IDB4NTQxRQorY29uc3QgX1NZ
U19tYmluZCA9IF9fX05SX21iaW5kCitjb25zdCBfSUZMQV9WRl9WTEFOID0gMgorY29uc3QgX1NZ
U19wa2V5X21wcm90ZWN0ID0gX19fTlJfcGtleV9tcHJvdGVjdAorY29uc3QgX0lGQV9CUk9BRENB
U1QgPSA0Citjb25zdCBfQlBGX1JTSCA9IDB4NzAKK2NvbnN0IF9JRkxBX0JSX01DQVNUX0hBU0hf
RUxBU1RJQ0lUWSA9IDI2Citjb25zdCBfUlRBWF9XSU5ET1cgPSAzCitjb25zdCBfTVNfU0lMRU5U
ID0gMzI3NjgKK2NvbnN0IF9TQ01fV0lGSV9TVEFUVVMgPSBfU09fV0lGSV9TVEFUVVMKK2NvbnN0
IF9fU0NfRklMRV9BVFRSSUJVVEVTID0gMTQ2Citjb25zdCBfX1BPU0lYX1NFTV9WQUxVRV9NQVgg
PSAzMjc2NworY29uc3QgX19fRkxUNjRYX01JTl9FWFBfXyA9ICgtMTYzODEpCitjb25zdCBfUFJJ
dUZBU1Q4ID0gInUiCitjb25zdCBfX190aW1lcl90X2RlZmluZWQgPSAxCitjb25zdCBfX1BPU0lY
X0hPU1RfTkFNRV9NQVggPSAyNTUKK2NvbnN0IF9UQ1BfRkFTVE9QRU4gPSAyMworY29uc3QgX19T
Q19TSUdRVUVVRV9NQVggPSAzNAorY29uc3QgX0lPQ19PVVQgPSAoX19JT0NfUkVBRCA8PCBfX0lP
Q19ESVJTSElGVCkKK2NvbnN0IF9FTUxJTksgPSAzMQorY29uc3QgX19fV0NPUkVGTEFHID0gMHg4
MAorY29uc3QgX0VSRktJTEwgPSAxMzIKK2NvbnN0IF9fVVRTTkFNRV9MRU5HVEggPSA2NQorY29u
c3QgX1NJR19CTE9DSyA9IDAKK2NvbnN0IF9TWVNfbWluY29yZSA9IF9fX05SX21pbmNvcmUKK2Nv
bnN0IF9FQUlfT1ZFUkZMT1cgPSAtMTIKK2NvbnN0IF9BRl9ORkMgPSBfUEZfTkZDCitjb25zdCBf
U1lTX2dldHBwaWQgPSBfX19OUl9nZXRwcGlkCitjb25zdCBfTUFDVkxBTl9GTEFHX05PUFJPTUlT
QyA9IDEKK2NvbnN0IF9JUE9QVF9TRUNVUl9NTU1NID0gMHhiYzRkCitjb25zdCBfSUZMQV9NQVhf
TVRVID0gNTEKK2NvbnN0IF9fX05SX2dldHhhdHRyID0gMTkxCitjb25zdCBfX1NDXzJfQ19ERVYg
PSA0OAorY29uc3QgX05EQV9MTEFERFIgPSAyCitjb25zdCBfSVBWNl9UUkFOU1BBUkVOVCA9IDc1
Citjb25zdCBfX19OUl9tcHJvdGVjdCA9IDEwCitjb25zdCBfU0hVVF9SRFdSID0gMgorY29uc3Qg
X1NJT0NTSUZNRVRSSUMgPSAweDg5MWUKK2NvbnN0IF9fU0NfQUlPX0xJU1RJT19NQVggPSAyMwor
Y29uc3QgX01BUF9ERU5ZV1JJVEUgPSAweDAwODAwCitjb25zdCBfU0lPQ1NQR1JQID0gMHg4OTAy
Citjb25zdCBfU0lfQVNZTkNJTyA9IC00Citjb25zdCBfVFVOU0VUSUZGX3ZhbCA9IDEwNzQwMjU2
NzQKK2NvbnN0IF9JRkxBX0lGQUxJQVMgPSAyMAorY29uc3QgX1BUUkFDRV9TRUNDT01QX0dFVF9N
RVRBREFUQSA9IDE2OTA5Citjb25zdCBfX19HQ0NfSUVDXzU1OSA9IDIKK2NvbnN0IF9SVEZfTElO
S1JUID0gMHgwMDEwMDAwMAorY29uc3QgX1NZU19tb3ZlX3BhZ2VzID0gX19fTlJfbW92ZV9wYWdl
cworY29uc3QgX1NLRl9BRF9WTEFOX1RBR19QUkVTRU5UID0gNDgKK2NvbnN0IF9IQVZFX0xERVhQ
TCA9IDEKK2NvbnN0IF9fX05SX3ByZWFkdjIgPSAzMjcKK2NvbnN0IF9fX05SX2NyZWF0ZV9tb2R1
bGUgPSAxNzQKK2NvbnN0IF9NQUNWTEFOX01PREVfQlJJREdFID0gNAorY29uc3QgX0RUX0RJUiA9
IDQKK2NvbnN0IF9TVEFfUFBTU0lHTkFMID0gMHgwMTAwCitjb25zdCBfU1lTX3NldGZzZ2lkID0g
X19fTlJfc2V0ZnNnaWQKK2NvbnN0IF9fX1JMSU1JVF9SVFRJTUUgPSAxNQorY29uc3QgX19TQ18y
X1ZFUlNJT04gPSA0NgorY29uc3QgX0hBVkVfT1BFTjY0ID0gMQorY29uc3QgX1RSQVBfQlJLUFQg
PSAxCitjb25zdCBfTklfREdSQU0gPSAxNgorY29uc3QgX19TQ19ERVZJQ0VfU1BFQ0lGSUMgPSAx
NDEKK2NvbnN0IF9JUEZSQUdUVEwgPSA2MAorY29uc3QgX19TQ19OTF9NU0dNQVggPSAxMjEKK2Nv
bnN0IF9TWVNfc2NoZWRfc2V0YXR0ciA9IF9fX05SX3NjaGVkX3NldGF0dHIKK2NvbnN0IF9QUl9T
RVRfTU1fRU5EX0RBVEEgPSA0Citjb25zdCBfUlRBWF9BRFZNU1MgPSA4Citjb25zdCBfU09MX1JB
VyA9IDI1NQorY29uc3QgX0xPQ0tfRVggPSAyCitjb25zdCBfX19OUl9tdW5tYXAgPSAxMQorY29u
c3QgX19fR0NDX0FUT01JQ19MTE9OR19MT0NLX0ZSRUUgPSAyCitjb25zdCBfX1NDX1BIWVNfUEFH
RVMgPSA4NQorY29uc3QgX0ZTX0tFWV9ERVNDX1BSRUZJWF9TSVpFID0gOAorY29uc3QgX1NZU19y
ZW1hcF9maWxlX3BhZ2VzID0gX19fTlJfcmVtYXBfZmlsZV9wYWdlcworY29uc3QgX01TX1NZTkMg
PSA0Citjb25zdCBfRl9VTkxDSyA9IDIKK2NvbnN0IF9QUl9HRVRfRlBFTVUgPSA5Citjb25zdCBf
X19OUl9yZW1hcF9maWxlX3BhZ2VzID0gMjE2Citjb25zdCBfSVBPUFRfTlVNQkVSX01BU0sgPSAw
eDFmCitjb25zdCBfU1lTX3NldHVpZCA9IF9fX05SX3NldHVpZAorY29uc3QgX0lQX1BBU1NTRUMg
PSAxOAorY29uc3QgX1NZU19zb2NrZXRwYWlyID0gX19fTlJfc29ja2V0cGFpcgorY29uc3QgX05E
VFBBX0xPQ0tUSU1FID0gMTUKK2NvbnN0IF9UQ1BfQ09PS0lFX01JTiA9IDgKK2NvbnN0IF9SVE1T
R19BUl9GQUlMRUQgPSAweDUxCitjb25zdCBfSUxMX0JBRFNUSyA9IDgKK2NvbnN0IF9BUlBPUF9S
RVBMWSA9IDIKK2NvbnN0IF9IQVZFX1NUUklOR19IID0gMQorY29uc3QgX0lOVF9GQVNUOF9NQVgg
PSAoMTI3KQorY29uc3QgX19fTlJfX3N5c2N0bCA9IDE1NgorY29uc3QgX1JURl9CUk9BRENBU1Qg
PSAweDEwMDAwMDAwCitjb25zdCBfUEZfS0NNID0gNDEKK2NvbnN0IF9fUENfTUFYX0lOUFVUID0g
MgorY29uc3QgX0lOX01PRElGWSA9IDB4MDAwMDAwMDIKK2NvbnN0IF9TSUdRVUlUID0gMworY29u
c3QgX1RDUF9DT1JLID0gMworY29uc3QgX1NZU19yZW1vdmV4YXR0ciA9IF9fX05SX3JlbW92ZXhh
dHRyCitjb25zdCBfX19GTFRfRVBTSUxPTl9fID0gMS4xCitjb25zdCBfX19VSU5UMzJfTUFYX18g
PSAweGZmZmZmZmZmCitjb25zdCBfX19OUl9mY2hvd24gPSA5MworY29uc3QgX1JUTkxHUlBfTElO
SyA9IDEKK2NvbnN0IF9fU0NfVFJBQ0VfTE9HID0gMTg0Citjb25zdCBfVENQX0tFRVBJTlRWTCA9
IDUKK2NvbnN0IF9QUl9HRVRfS0VFUENBUFMgPSA3Citjb25zdCBfSU5UX0xFQVNUMzJfTUFYID0g
KDIxNDc0ODM2NDcpCitjb25zdCBfX19MREJMX01JTl9FWFBfXyA9ICgtMTYzODEpCitjb25zdCBf
U0NOaTMyID0gImkiCitjb25zdCBfX19OUl9yZW5hbWUgPSA4MgorY29uc3QgX1BUUkFDRV9PX1RS
QUNFU0VDQ09NUCA9IDEyOAorY29uc3QgX0lOX0lHTk9SRUQgPSAweDAwMDA4MDAwCitjb25zdCBf
QlBGX0lNTSA9IDB4MDAKK2NvbnN0IF9JRkxBX1ZGX1RSVVNUID0gOQorY29uc3QgX0lQUFJPVE9f
TUggPSAxMzUKK2NvbnN0IF9JRkxBX1ZYTEFOX0xJTksgPSAzCitjb25zdCBfRVNIVVRET1dOID0g
MTA4Citjb25zdCBfU09MX1BBQ0tFVCA9IDI2MworY29uc3QgX19fTlJfaW5pdF9tb2R1bGUgPSAx
NzUKK2NvbnN0IF9DTE9ORV9ORVdOUyA9IDB4MDAwMjAwMDAKK2NvbnN0IF9SVFBST1RfTVJPVVRF
RCA9IDE3Citjb25zdCBfX1NDX1NTX1JFUExfTUFYID0gMjQxCitjb25zdCBfR1RQX1JPTEVfR0dT
TiA9IDAKK2NvbnN0IF9TWVNfdHJ1bmNhdGUgPSBfX19OUl90cnVuY2F0ZQorY29uc3QgX19fTUFD
U0VDX1ZBTElEQVRFX0VORCA9IDMKK2NvbnN0IF9YODZfRUZMQUdTX1ZJRl9CSVQgPSAxOQorY29u
c3QgX19TQ19NVUxUSV9QUk9DRVNTID0gMTUwCitjb25zdCBfSVBQUk9UT19QSU0gPSAxMDMKK2Nv
bnN0IF9CMTUwMDAwMCA9IDAwMTAwMTIKK2NvbnN0IF9fX05SX3B3cml0ZXYgPSAyOTYKK2NvbnN0
IF9TT19SRVVTRUFERFIgPSAyCitjb25zdCBfTkNDID0gOAorY29uc3QgX1RDUF9DQV9Mb3NzID0g
NAorY29uc3QgX01TX01HQ19NU0sgPSAweGZmZmYwMDAwCitjb25zdCBfU19JWE9USCA9IChfU19J
WEdSUCA+PiAzKQorY29uc3QgX1NPTF9ORVRMSU5LID0gMjcwCitjb25zdCBfSUxMX1BSVlJFRyA9
IDYKK2NvbnN0IF9fX0ZMVDMyWF9NQU5UX0RJR19fID0gNTMKK2NvbnN0IF9TQ051TEVBU1Q4ID0g
ImhodSIKK2NvbnN0IF9VTExPTkdfTUFYID0gKF9MTE9OR19NQVggKiAyICsgMSkKK2NvbnN0IF9J
RkxBX1ZYTEFOX0FHRUlORyA9IDgKK2NvbnN0IF9QUl9TUEVDX1BSQ1RMID0gKDEgPDwgMCkKK2Nv
bnN0IF9SVE1fREVMQ0hBSU4gPSAxMDEKK2NvbnN0IF9fSU9DX1NJWkVTSElGVCA9IChfX0lPQ19U
WVBFU0hJRlQrX19JT0NfVFlQRUJJVFMpCitjb25zdCBfX19OUl9uZnNzZXJ2Y3RsID0gMTgwCitj
b25zdCBfX19GTFRfTUlOXzEwX0VYUF9fID0gKC0zNykKK2NvbnN0IF9JRkxBX1hEUF9QUk9HX0lE
ID0gNAorY29uc3QgX19CSVRTX1RZUEVTX1NUUlVDVF9TQ0hFRF9QQVJBTSA9IDEKK2NvbnN0IF9B
UlBIUkRfUlNSVkQgPSAyNjAKK2NvbnN0IF9fUE9TSVgyX0JDX0JBU0VfTUFYID0gOTkKK2NvbnN0
IF9QQUNLRVRfQUREX01FTUJFUlNISVAgPSAxCitjb25zdCBfX19OUl9ydF9zaWdwZW5kaW5nID0g
MTI3Citjb25zdCBfX19PX1BBVEggPSAwMTAwMDAwMDAKK2NvbnN0IF9FVEhfUF9CUFEgPSAweDA4
RkYKK2NvbnN0IF9UQ1BfVElNRVNUQU1QID0gMjQKK2NvbnN0IF9TSU9DU0lGUEZMQUdTID0gMHg4
OTM0Citjb25zdCBfUlRNX05FV0xJTksgPSAxNgorY29uc3QgX0lGTEFfSU5GT19YU1RBVFMgPSAz
Citjb25zdCBfX1BPU0lYX0NQVVRJTUUgPSAwCitjb25zdCBfUEFDS0VUX0ZBU1RST1VURSA9IDYK
K2NvbnN0IF9JTlRfTEVBU1Q2NF9XSURUSCA9IDY0Citjb25zdCBfUEZfSVBYID0gNAorY29uc3Qg
X05VRF9QRVJNQU5FTlQgPSAweDgwCitjb25zdCBfX19OUl9pb19kZXN0cm95ID0gMjA3Citjb25z
dCBfUlRBWF9SVFQgPSA0Citjb25zdCBfX19STElNSVRfUlNTID0gNQorY29uc3QgX19fTlJfZ2V0
dGlkID0gMTg2Citjb25zdCBfX19OUl9pb3Blcm0gPSAxNzMKK2NvbnN0IF9TX0lGQkxLID0gX19f
U19JRkJMSworY29uc3QgX1NDTnhGQVNUOCA9ICJoaHgiCitjb25zdCBfX19OUl90dXhjYWxsID0g
MTg0Citjb25zdCBfX19PX0RJUkVDVE9SWSA9IDAyMDAwMDAKK2NvbnN0IF9TWVNfY29ubmVjdCA9
IF9fX05SX2Nvbm5lY3QKK2NvbnN0IF9UQ1BfQ0NfSU5GTyA9IDI2Citjb25zdCBfUEFDS0FHRV9T
VFJJTkcgPSAicGFja2FnZS11bnVzZWQgdmVyc2lvbi11bnVzZWQiCitjb25zdCBfU1lTX3NjaGVk
X2dldGF0dHIgPSBfX19OUl9zY2hlZF9nZXRhdHRyCitjb25zdCBfX1BPU0lYMl9CQ19TQ0FMRV9N
QVggPSA5OQorY29uc3QgX1BUUkFDRV9QT0tFVEVYVCA9IDQKK2NvbnN0IF9FVEhfUF9ERUMgPSAw
eDYwMDAKK2NvbnN0IF9TWVNfZmxpc3R4YXR0ciA9IF9fX05SX2ZsaXN0eGF0dHIKK2NvbnN0IF9J
UFZMQU5fRl9QUklWQVRFID0gMHgwMQorY29uc3QgX05MTVNHX09WRVJSVU4gPSAweDQKK2NvbnN0
IF9ORVRMSU5LX0lQNl9GVyA9IDEzCitjb25zdCBfSUZMQV9CUl9BR0VJTkdfVElNRSA9IDQKK2Nv
bnN0IF9UQ1NFVFMgPSAweDU0MDIKK2NvbnN0IF9SVE1fRl9FUVVBTElaRSA9IDB4NDAwCitjb25z
dCBfSEFWRV9EVVAzID0gMQorY29uc3QgX0JSSURHRV9NT0RFX0hBSVJQSU4gPSAxCitjb25zdCBf
VENTRVRYID0gMHg1NDMzCitjb25zdCBfVlNVU1AgPSAxMAorY29uc3QgX19CSVRTX1NPQ0tBRERS
X0ggPSAxCitjb25zdCBfU0lHUE9MTCA9IDI5Citjb25zdCBfUFRSQUNFX0VWRU5UX1NUT1AgPSAx
MjgKK2NvbnN0IF9BVF9TWU1MSU5LX05PRk9MTE9XID0gMHgxMDAKK2NvbnN0IF9IQVZFX1NZU19W
RlNfSCA9IDEKK2NvbnN0IF9QRl9LRVkgPSAxNQorY29uc3QgX0lGTEFfU1RBVFNfTElOS19YU1RB
VFNfU0xBVkUgPSAzCitjb25zdCBfTkxfTU1BUF9NU0dfQUxJR05NRU5UID0gX05MTVNHX0FMSUdO
VE8KK2NvbnN0IF9JRkxBX1ZYTEFOX1VEUF9DU1VNID0gMTgKK2NvbnN0IF9fX05SX3dhaXQ0ID0g
NjEKK2NvbnN0IF9JRkxBX1JNTkVUX0ZMQUdTID0gMgorY29uc3QgX1NPTF9SRFMgPSAyNzYKK2Nv
bnN0IF9SVEFYX0ZFQVRVUkVfTUFTSyA9IChfUlRBWF9GRUFUVVJFX0VDTiB8IF9SVEFYX0ZFQVRV
UkVfU0FDSyB8IF9SVEFYX0ZFQVRVUkVfVElNRVNUQU1QIHwgX1JUQVhfRkVBVFVSRV9BTExGUkFH
KQorY29uc3QgX1JUTV9HRVRORVRDT05GID0gODIKK2NvbnN0IF9fX0ZMVDY0X01BWF9FWFBfXyA9
IDEwMjQKK2NvbnN0IF9USU9DU1BHUlBfdmFsID0gMjE1MjAKK2NvbnN0IF9JUFBST1RPX1JTVlAg
PSA0NgorY29uc3QgX1JUTV9HRVROU0lEID0gOTAKK2NvbnN0IF9PTkxDUiA9IDAwMDAwMDQKK2Nv
bnN0IF9fU0NfUElJX1NPQ0tFVCA9IDU1Citjb25zdCBfQVJQSFJEX1RVTk5FTCA9IDc2OAorY29u
c3QgX0hBVkVfTUlOQ09SRSA9IDEKK2NvbnN0IF9fX0hBVkVfR0VORVJJQ19TRUxFQ1RJT04gPSAx
Citjb25zdCBfVENQX0tFRVBDTlQgPSA2Citjb25zdCBfVENQX1NZTl9SRUNWID0gMworY29uc3Qg
X05MTV9GX0FQUEVORCA9IDB4ODAwCitjb25zdCBfU1lTX21tYXAgPSBfX19OUl9tbWFwCitjb25z
dCBfU1lTX2Nsb2NrX2FkanRpbWUgPSBfX19OUl9jbG9ja19hZGp0aW1lCitjb25zdCBfUlROTEdS
UF9UQyA9IDQKK2NvbnN0IF9BREpfTkFOTyA9IDB4MjAwMAorY29uc3QgX05FVExJTktfVFhfUklO
RyA9IDcKK2NvbnN0IF9TWVNfZXZlbnRmZCA9IF9fX05SX2V2ZW50ZmQKK2NvbnN0IF9fU0NfVFJB
Q0VfTkFNRV9NQVggPSAyNDMKK2NvbnN0IF9TVEFUWF9BVElNRSA9IDB4MDAyMAorY29uc3QgX19D
U19MRlNfTERGTEFHUyA9IDEwMDEKK2NvbnN0IF9fX05SX3NldHJlZ2lkID0gMTE0Citjb25zdCBf
RU9XTkVSREVBRCA9IDEzMAorY29uc3QgX19fTlJfcmVhZGxpbmsgPSA4OQorY29uc3QgX19fc3Rh
Y2tfdF9kZWZpbmVkID0gMQorY29uc3QgX19fRkxUNjRYX01BWF8xMF9FWFBfXyA9IDQ5MzIKK2Nv
bnN0IF9SVFNJR19NQVggPSAzMgorY29uc3QgX19fU0laRU9GX0xPTkdfRE9VQkxFX18gPSAxNgor
Y29uc3QgX1ZUMCA9IDAwMDAwMDAKK2NvbnN0IF9WVDEgPSAwMDQwMDAwCitjb25zdCBfSU5UX0ZB
U1QxNl9NQVggPSAoOTIyMzM3MjAzNjg1NDc3NTgwNykKK2NvbnN0IF9YODZfQ1IwX1RTX0JJVCA9
IDMKK2NvbnN0IF9fX05SX3N5c2ZzID0gMTM5Citjb25zdCBfWDg2X0NSNF9QQUVfQklUID0gNQor
Y29uc3QgX19QT1NJWF9UWk5BTUVfTUFYID0gNgorY29uc3QgX1NZU19vcGVuID0gX19fTlJfb3Bl
bgorY29uc3QgX1NJT0NTSUZFTkNBUCA9IDB4ODkyNgorY29uc3QgX1RDUF9DQV9EaXNvcmRlciA9
IDEKK2NvbnN0IF9fX1dPUkRTSVpFID0gNjQKK2NvbnN0IF9JUF9NRiA9IDB4MjAwMAorY29uc3Qg
X1BST1RfR1JPV1NVUCA9IDB4MDIwMDAwMDAKK2NvbnN0IF9SVEZfQUREUkNMQVNTTUFTSyA9IDB4
RjgwMDAwMDAKK2NvbnN0IF9fX2FtZDY0ID0gMQorY29uc3QgX0FSUEhSRF9QUk9ORVQgPSA0Citj
b25zdCBfQjkyMTYwMCA9IDAwMTAwMDcKK2NvbnN0IF9FQUREUklOVVNFID0gOTgKK2NvbnN0IF9G
U19GTF9VU0VSX1ZJU0lCTEUgPSAweDAwMDNERkZGCitjb25zdCBfX19OUl90aW1lcmZkX2dldHRp
bWUgPSAyODcKK2NvbnN0IF9DTE9ORV9ORVdQSUQgPSAweDIwMDAwMDAwCitjb25zdCBfUlROTEdS
UF9JUFY2X1JVTEUgPSAxOQorY29uc3QgX0VUSEVSX01JTl9MRU4gPSAoX0VUSF9aTEVOICsgX0VU
SEVSX0NSQ19MRU4pCitjb25zdCBfUEZfUk9TRSA9IDExCitjb25zdCBfSUZMQV9QT1JUX1NFTEYg
PSAyNQorY29uc3QgX0xJTktfWFNUQVRTX1RZUEVfQlJJREdFID0gMQorY29uc3QgX19TWVNfU1RB
VF9IID0gMQorY29uc3QgX0lGTEFfQlJfR1JPVVBfQUREUiA9IDIwCitjb25zdCBfRl9TRVRTSUcg
PSBfX19GX1NFVFNJRworY29uc3QgX1dTVE9QUEVEID0gMgorY29uc3QgX19QQ19WRElTQUJMRSA9
IDgKK2NvbnN0IF9fU0NfTVFfT1BFTl9NQVggPSAyNworY29uc3QgX1g4Nl9FRkxBR1NfUEZfQklU
ID0gMgorY29uc3QgX1JUTV9ORVdBRERSTEFCRUwgPSA3MgorY29uc3QgX1NPQ0tfUEFDS0VUID0g
MTAKK2NvbnN0IF9fX05SX21xX3VubGluayA9IDI0MQorY29uc3QgX1JUTUdSUF9ORUlHSCA9IDQK
K2NvbnN0IF9QRl9XQU5QSVBFID0gMjUKK2NvbnN0IF9SVE1fREVMQUREUiA9IDIxCitjb25zdCBf
TE9DS19VTiA9IDgKK2NvbnN0IF9QT0xMX0lOID0gMQorY29uc3QgX01BQ1ZMQU5fTUFDQUREUl9G
TFVTSCA9IDIKK2NvbnN0IF9SVFBST1RfRE5ST1VURUQgPSAxMworY29uc3QgX01BQ1ZMQU5fTU9E
RV9TT1VSQ0UgPSAxNgorY29uc3QgX1NZU19zZXRwZ2lkID0gX19fTlJfc2V0cGdpZAorY29uc3Qg
X19fSUZMQV9HRU5FVkVfTUFYID0gMTIKK2NvbnN0IF9TSU9DQURETVVMVEkgPSAweDg5MzEKK2Nv
bnN0IF9SVE1TR19ORVdST1VURSA9IDB4MjEKK2NvbnN0IF9GRklfVFlQRV9DT01QTEVYID0gMTUK
K2NvbnN0IF9IQVZFX0NPU0wgPSAxCitjb25zdCBfTklfTUFYSE9TVCA9IDEwMjUKK2NvbnN0IF9I
QVZFX1NZU19NT1VOVF9IID0gMQorY29uc3QgX05PX1JFQ09WRVJZID0gMworY29uc3QgX0lGTEFf
VlhMQU5fVU5TUEVDID0gMAorY29uc3QgX0lGTEFfQk9ORF9NSUlNT04gPSAzCitjb25zdCBfSVBE
RUZUVEwgPSA2NAorY29uc3QgX1JUQVhfTVRVID0gMgorY29uc3QgX0VORVRSRVNFVCA9IDEwMgor
Y29uc3QgX19fRkxUX0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9JRkxBX0lORVRfQ09ORiA9
IDEKK2NvbnN0IF9TSUdfQVRPTUlDX01BWCA9ICgyMTQ3NDgzNjQ3KQorY29uc3QgX1NUQV9QUFNG
UkVRID0gMHgwMDAyCitjb25zdCBfSU5fSVNESVIgPSAweDQwMDAwMDAwCitjb25zdCBfSUNNUDZf
RUNIT19SRVBMWSA9IDEyOQorY29uc3QgX1RDWE9OQyA9IDB4NTQwQQorY29uc3QgX1JUQ0ZfTUFT
USA9IDB4MDA0MDAwMDAKK2NvbnN0IF9BRl9CUklER0UgPSBfUEZfQlJJREdFCitjb25zdCBfUFJf
VElNSU5HX1RJTUVTVEFNUCA9IDEKK2NvbnN0IF9JUFY2X1BNVFVESVNDX09NSVQgPSA1Citjb25z
dCBfSUxMX0lMTFRSUCA9IDQKK2NvbnN0IF9JUE9QVF9SRVNFUlZFRDIgPSAweDYwCitjb25zdCBf
X19ORFVTRVJPUFRfTUFYID0gMgorY29uc3QgX1NZTkNfRklMRV9SQU5HRV9XUklURSA9IDIKK2Nv
bnN0IF9TVEFfSU5TID0gMHgwMDEwCitjb25zdCBfX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFYID0g
MgorY29uc3QgX19YT1BFTl9YQ1VfVkVSU0lPTiA9IDQKK2NvbnN0IF9FTk9DU0kgPSA1MAorY29u
c3QgX1hBVFRSX0xJU1RfTUFYID0gNjU1MzYKK2NvbnN0IF9YODZfQ1IwX05FX0JJVCA9IDUKK2Nv
bnN0IF9TWVNfcHNlbGVjdDYgPSBfX19OUl9wc2VsZWN0NgorY29uc3QgX1RPU1RPUCA9IDAwMDA0
MDAKK2NvbnN0IF9USU9DUEtUX1NUT1AgPSA0Citjb25zdCBfSUZMQV9CUlBPUlRfUFJPVEVDVCA9
IDYKK2NvbnN0IF9fU0NfU0lHTkFMUyA9IDE1OAorY29uc3QgX1NZU19zZXR4YXR0ciA9IF9fX05S
X3NldHhhdHRyCitjb25zdCBfUkVOQU1FX1dISVRFT1VUID0gKDEgPDwgMikKK2NvbnN0IF9JRkFf
Rl9OT0RBRCA9IDB4MDIKK2NvbnN0IF9fTEFSR0VGSUxFX1NPVVJDRSA9IDEKK2NvbnN0IF9fX1dJ
TlRfTUFYX18gPSAweGZmZmZmZmZmCitjb25zdCBfRVBGTk9TVVBQT1JUID0gOTYKK2NvbnN0IF9T
WVNfc2lnYWx0c3RhY2sgPSBfX19OUl9zaWdhbHRzdGFjaworY29uc3QgX1NDTmRMRUFTVDMyID0g
ImQiCitjb25zdCBfSU5UMTZfV0lEVEggPSAxNgorY29uc3QgX1JUTkhfRl9PTkxJTksgPSA0Citj
b25zdCBfR0FJX1dBSVQgPSAwCitjb25zdCBfX19OUl9sb29rdXBfZGNvb2tpZSA9IDIxMgorY29u
c3QgX19fTlJfbWluY29yZSA9IDI3Citjb25zdCBfQVJQSFJEX1RVTk5FTDYgPSA3NjkKK2NvbnN0
IF9TT0xfUlhSUEMgPSAyNzIKK2NvbnN0IF9fUENfMl9TWU1MSU5LUyA9IDIwCitjb25zdCBfSUNN
UDZfRFNUX1VOUkVBQ0hfTk9ST1VURSA9IDAKK2NvbnN0IF9ETl9BVFRSSUIgPSAweDAwMDAwMDIw
Citjb25zdCBfUFRSQUNFX1NFVFJFR1MgPSAxMworY29uc3QgX19fTFA2NF9fID0gMQorY29uc3Qg
X0ZfU0VBTF9TRUFMID0gMHgwMDAxCitjb25zdCBfTUxEX0xJU1RFTkVSX1FVRVJZID0gMTMwCitj
b25zdCBfU1lTX2lub3RpZnlfaW5pdDEgPSBfX19OUl9pbm90aWZ5X2luaXQxCitjb25zdCBfX19O
Ul9hY2N0ID0gMTYzCitjb25zdCBfTVNHX0ZBU1RPUEVOID0gNTM2ODcwOTEyCitjb25zdCBfX19z
aWdldmVudF90X2RlZmluZWQgPSAxCitjb25zdCBfUlROTEdSUF9JUFY2X01ST1VURV9SID0gMzEK
K2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1MgPSAxMTIxCitjb25zdCBf
SUZMQV9NQUNWTEFOX1VOU1BFQyA9IDAKK2NvbnN0IF9QQUNLRVRfQVVYREFUQSA9IDgKK2NvbnN0
IF9JRkxBX0JPTkRfVU5TUEVDID0gMAorY29uc3QgX0lGTEFfR0VORVZFX0xBQkVMID0gMTEKK2Nv
bnN0IF9QUl9VTkFMSUdOX1NJR0JVUyA9IDIKK2NvbnN0IF9GX1RMT0NLID0gMgorY29uc3QgX1NU
QVRYX1RZUEUgPSAweDAwMDEKK2NvbnN0IF9fUE9TSVhfU1BJTl9MT0NLUyA9IDIwMDgwOQorY29u
c3QgX1BGX1JYUlBDID0gMzMKK2NvbnN0IF9UQ1BfS0VFUElETEUgPSA0Citjb25zdCBfX19VSU5U
X0ZBU1Q2NF9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3QgX19fTlJfbGxpc3R4YXR0
ciA9IDE5NQorY29uc3QgX19fTlJfcnNlcSA9IDMzNAorY29uc3QgX19DU19YQlM1X0lMUDMyX09G
RjMyX0NGTEFHUyA9IDExMDAKK2NvbnN0IF9PX0FDQ01PREUgPSAwMDAzCitjb25zdCBfVElPQ01f
Uk5HID0gMHgwODAKK2NvbnN0IF9fX05SX2tleGVjX2ZpbGVfbG9hZCA9IDMyMAorY29uc3QgX0lO
Ul9PUEVOX0NVUiA9IDEwMjQKK2NvbnN0IF9fX05SX3JtZGlyID0gODQKK2NvbnN0IF9FVEhfUF9B
WDI1ID0gMHgwMDAyCitjb25zdCBfX0JJVFNfU0lHSU5GT19DT05TVFNfQVJDSF9IID0gMQorY29u
c3QgX0hBVkVfSU5UVFlQRVNfSCA9IDEKK2NvbnN0IF9FREVTVEFERFJSRVEgPSA4OQorY29uc3Qg
X19fTkdSRUcgPSAyMworY29uc3QgX1JFR19SMTAgPSAyCitjb25zdCBfUkVHX1IxMSA9IDMKK2Nv
bnN0IF9JUFY2X0ZSRUVCSU5EID0gNzgKK2NvbnN0IF9SRUdfUjEzID0gNQorY29uc3QgX19faGF2
ZV9wdGhyZWFkX2F0dHJfdCA9IDEKK2NvbnN0IF9SRUdfUjE1ID0gNworY29uc3QgX05JX01BWFNF
UlYgPSAzMgorY29uc3QgX0FSUEhSRF9IRExDID0gX0FSUEhSRF9DSVNDTworY29uc3QgX19fR0xJ
QkNfVVNFX0lFQ182MDU1OV9CRlBfRVhUID0gMQorY29uc3QgX1BGX1VOSVggPSBfUEZfTE9DQUwK
K2NvbnN0IF9fX1NZU0NBTExfV09SRFNJWkUgPSA2NAorY29uc3QgX1NZU19jcmVhdCA9IF9fX05S
X2NyZWF0Citjb25zdCBfVElPQ1NDVFRZID0gMHg1NDBFCitjb25zdCBfRkZJX0xBU1RfQUJJID0g
OAorY29uc3QgX05EQV9NQVNURVIgPSA5Citjb25zdCBfRVRIX1BfSUVFRVBVUCA9IDB4MGEwMAor
Y29uc3QgX1BGX0lSREEgPSAyMworY29uc3QgX0hBVkVfU1lTX1RJTUVYX0ggPSAxCitjb25zdCBf
X19GTFRfREVDSU1BTF9ESUdfXyA9IDkKK2NvbnN0IF9fX05SX3RpbWVyX2NyZWF0ZSA9IDIyMgor
Y29uc3QgX1NZU19nZXRwZ2lkID0gX19fTlJfZ2V0cGdpZAorY29uc3QgX0ZGSV82NF9CSVRfTUFY
ID0gOTIyMzM3MjAzNjg1NDc3NTgwNworY29uc3QgX0lGTEFfTUFDU0VDX0lDVl9MRU4gPSAzCitj
b25zdCBfQjE4MDAgPSAwMDAwMDEyCitjb25zdCBfQlMwID0gMDAwMDAwMAorY29uc3QgX0JTMSA9
IDAwMjAwMDAKK2NvbnN0IF9fU1lTX1RJTUVfSCA9IDEKK2NvbnN0IF9fUE9TSVhfQVJHX01BWCA9
IDQwOTYKK2NvbnN0IF9fX1NDSEFSX1dJRFRIX18gPSA4Citjb25zdCBfX19GTFRfUkFESVhfXyA9
IDIKK2NvbnN0IF9YODZfQ1IzX1BXVF9CSVQgPSAzCitjb25zdCBfUE9SVF9WRFBfUkVTUE9OU0Vf
VU5VU0VEX1ZUSUQgPSAzCitjb25zdCBfX19ERUMzMl9FUFNJTE9OX18gPSAxRS02Citjb25zdCBf
SUZMQV9WWExBTl9MRUFSTklORyA9IDcKK2NvbnN0IF9FUE9MTEVUID0gMjE0NzQ4MzY0OAorY29u
c3QgX0ZfU0VUTEtXNjQgPSA3Citjb25zdCBfX19VU0VfQVRGSUxFID0gMQorY29uc3QgX1NfSVJF
QUQgPSBfU19JUlVTUgorY29uc3QgX1BUUkFDRV9TRVRGUFJFR1MgPSAxNQorY29uc3QgX0lGRl9S
VU5OSU5HID0gNjQKK2NvbnN0IF9IQVZFX1VUSU1FTlNBVCA9IDEKK2NvbnN0IF9fUENfU1lNTElO
S19NQVggPSAxOQorY29uc3QgX1g4Nl9FRkxBR1NfWkZfQklUID0gNgorY29uc3QgX0ZfU0VUTEs2
NCA9IDYKK2NvbnN0IF9fUE9TSVhfUEFUSF9NQVggPSAyNTYKK2NvbnN0IF9JTl9DTEFTU0FfTlNI
SUZUID0gMjQKK2NvbnN0IF9QQUNLRVRfVElNRVNUQU1QID0gMTcKK2NvbnN0IF9fX1BPU0lYX0ZB
RFZfRE9OVE5FRUQgPSA0Citjb25zdCBfSVBQUk9UT19NVFAgPSA5MgordHlwZSBfaWZhY2Ugc3Ry
dWN0IHt9Cit0eXBlIF9fX2xvY2FsZV9kYXRhIHN0cnVjdCB7fQorY29uc3QgRU1VTFRJSE9QID0g
RXJybm8oX0VNVUxUSUhPUCkKK2NvbnN0IEVVTkFUQ0ggPSBFcnJubyhfRVVOQVRDSCkKK2NvbnN0
IEVBRk5PU1VQUE9SVCA9IEVycm5vKF9FQUZOT1NVUFBPUlQpCitjb25zdCBFUkVNQ0hHID0gRXJy
bm8oX0VSRU1DSEcpCitjb25zdCBFQUNDRVMgPSBFcnJubyhfRUFDQ0VTKQorY29uc3QgRURFU1RB
RERSUkVRID0gRXJybm8oX0VERVNUQUREUlJFUSkKK2NvbnN0IEVJTFNFUSA9IEVycm5vKF9FSUxT
RVEpCitjb25zdCBFU1BJUEUgPSBFcnJubyhfRVNQSVBFKQorY29uc3QgRU1MSU5LID0gRXJybm8o
X0VNTElOSykKK2NvbnN0IEVPV05FUkRFQUQgPSBFcnJubyhfRU9XTkVSREVBRCkKK2NvbnN0IEVO
T1RUWSA9IEVycm5vKF9FTk9UVFkpCitjb25zdCBFQkFERSA9IEVycm5vKF9FQkFERSkKK2NvbnN0
IEVCQURGID0gRXJybm8oX0VCQURGKQorY29uc3QgRUJBRFIgPSBFcnJubyhfRUJBRFIpCitjb25z
dCBFQURWID0gRXJybm8oX0VBRFYpCitjb25zdCBFUkFOR0UgPSBFcnJubyhfRVJBTkdFKQorY29u
c3QgRUNBTkNFTEVEID0gRXJybm8oX0VDQU5DRUxFRCkKK2NvbnN0IEVUWFRCU1kgPSBFcnJubyhf
RVRYVEJTWSkKK2NvbnN0IEVOT01FTSA9IEVycm5vKF9FTk9NRU0pCitjb25zdCBFSU5QUk9HUkVT
UyA9IEVycm5vKF9FSU5QUk9HUkVTUykKK2NvbnN0IEVOT1RCTEsgPSBFcnJubyhfRU5PVEJMSykK
K2NvbnN0IEVQUk9UT1RZUEUgPSBFcnJubyhfRVBST1RPVFlQRSkKK2NvbnN0IEVSRVNUQVJUID0g
RXJybm8oX0VSRVNUQVJUKQorY29uc3QgRUlTTkFNID0gRXJybm8oX0VJU05BTSkKK2NvbnN0IEVO
T01TRyA9IEVycm5vKF9FTk9NU0cpCitjb25zdCBFQUxSRUFEWSA9IEVycm5vKF9FQUxSRUFEWSkK
K2NvbnN0IEVUSU1FRE9VVCA9IEVycm5vKF9FVElNRURPVVQpCitjb25zdCBFTk9EQVRBID0gRXJy
bm8oX0VOT0RBVEEpCitjb25zdCBFSU5UUiA9IEVycm5vKF9FSU5UUikKK2NvbnN0IEVOT0xJTksg
PSBFcnJubyhfRU5PTElOSykKK2NvbnN0IEVQRVJNID0gRXJybm8oX0VQRVJNKQorY29uc3QgRUxP
T1AgPSBFcnJubyhfRUxPT1ApCitjb25zdCBFTkVURE9XTiA9IEVycm5vKF9FTkVURE9XTikKK2Nv
bnN0IEVTVEFMRSA9IEVycm5vKF9FU1RBTEUpCitjb25zdCBFTk9TUiA9IEVycm5vKF9FTk9TUikK
K2NvbnN0IEVMTlJORyA9IEVycm5vKF9FTE5STkcpCitjb25zdCBFUElQRSA9IEVycm5vKF9FUElQ
RSkKK2NvbnN0IEVDSElMRCA9IEVycm5vKF9FQ0hJTEQpCitjb25zdCBFQkFETVNHID0gRXJybm8o
X0VCQURNU0cpCitjb25zdCBFQkZPTlQgPSBFcnJubyhfRUJGT05UKQorY29uc3QgRVJFTU9URSA9
IEVycm5vKF9FUkVNT1RFKQorY29uc3QgRVRPT01BTllSRUZTID0gRXJybm8oX0VUT09NQU5ZUkVG
UykKK2NvbnN0IEVOT05FVCA9IEVycm5vKF9FTk9ORVQpCitjb25zdCBFWEZVTEwgPSBFcnJubyhf
RVhGVUxMKQorY29uc3QgRU5PVEVNUFRZID0gRXJybm8oX0VOT1RFTVBUWSkKK2NvbnN0IEVOT1RO
QU0gPSBFcnJubyhfRU5PVE5BTSkKK2NvbnN0IEVLRVlSRUpFQ1RFRCA9IEVycm5vKF9FS0VZUkVK
RUNURUQpCitjb25zdCBFTk9DU0kgPSBFcnJubyhfRU5PQ1NJKQorY29uc3QgRUFERFJJTlVTRSA9
IEVycm5vKF9FQUREUklOVVNFKQorY29uc3QgRU5FVFJFU0VUID0gRXJybm8oX0VORVRSRVNFVCkK
K2NvbnN0IEVJU0RJUiA9IEVycm5vKF9FSVNESVIpCitjb25zdCBFSURSTSA9IEVycm5vKF9FSURS
TSkKK2NvbnN0IEVOT1RTT0NLID0gRXJybm8oX0VOT1RTT0NLKQorY29uc3QgRUhPU1RVTlJFQUNI
ID0gRXJybm8oX0VIT1NUVU5SRUFDSCkKK2NvbnN0IEVCQURGRCA9IEVycm5vKF9FQkFERkQpCitj
b25zdCBFTDNITFQgPSBFcnJubyhfRUwzSExUKQorY29uc3QgRUwySExUID0gRXJybm8oX0VMMkhM
VCkKK2NvbnN0IEVOT0tFWSA9IEVycm5vKF9FTk9LRVkpCitjb25zdCBFSU5WQUwgPSBFcnJubyhf
RUlOVkFMKQorY29uc3QgRVNIVVRET1dOID0gRXJybm8oX0VTSFVURE9XTikKK2NvbnN0IEVOT01F
RElVTSA9IEVycm5vKF9FTk9NRURJVU0pCitjb25zdCBFTElCU0NOID0gRXJybm8oX0VMSUJTQ04p
Citjb25zdCBFTkFWQUlMID0gRXJybm8oX0VOQVZBSUwpCitjb25zdCBFT1ZFUkZMT1cgPSBFcnJu
byhfRU9WRVJGTE9XKQorY29uc3QgRVVDTEVBTiA9IEVycm5vKF9FVUNMRUFOKQorY29uc3QgRUJV
U1kgPSBFcnJubyhfRUJVU1kpCitjb25zdCBFUFJPVE8gPSBFcnJubyhfRVBST1RPKQorY29uc3Qg
RU5PREVWID0gRXJybm8oX0VOT0RFVikKK2NvbnN0IEVLRVlFWFBJUkVEID0gRXJybm8oX0VLRVlF
WFBJUkVEKQorY29uc3QgRVJPRlMgPSBFcnJubyhfRVJPRlMpCitjb25zdCBFTElCQUNDID0gRXJy
bm8oX0VMSUJBQ0MpCitjb25zdCBFSFdQT0lTT04gPSBFcnJubyhfRUhXUE9JU09OKQorY29uc3Qg
RTJCSUcgPSBFcnJubyhfRTJCSUcpCitjb25zdCBFREVBRExLID0gRXJybm8oX0VERUFETEspCitj
b25zdCBFTDNSU1QgPSBFcnJubyhfRUwzUlNUKQorY29uc3QgRU5PVERJUiA9IEVycm5vKF9FTk9U
RElSKQorY29uc3QgRUNPTk5SRVNFVCA9IEVycm5vKF9FQ09OTlJFU0VUKQorY29uc3QgRU5YSU8g
PSBFcnJubyhfRU5YSU8pCitjb25zdCBFQkFEUlFDID0gRXJybm8oX0VCQURSUUMpCitjb25zdCBF
Tk9TVFIgPSBFcnJubyhfRU5PU1RSKQorY29uc3QgRU5BTUVUT09MT05HID0gRXJybm8oX0VOQU1F
VE9PTE9ORykKK2NvbnN0IEVTT0NLVE5PU1VQUE9SVCA9IEVycm5vKF9FU09DS1ROT1NVUFBPUlQp
Citjb25zdCBFTElCRVhFQyA9IEVycm5vKF9FTElCRVhFQykKK2NvbnN0IEVET1RET1QgPSBFcnJu
byhfRURPVERPVCkKK2NvbnN0IEVBRERSTk9UQVZBSUwgPSBFcnJubyhfRUFERFJOT1RBVkFJTCkK
K2NvbnN0IEVUSU1FID0gRXJybm8oX0VUSU1FKQorY29uc3QgRVBST1RPTk9TVVBQT1JUID0gRXJy
bm8oX0VQUk9UT05PU1VQUE9SVCkKK2NvbnN0IEVOT1RSRUNPVkVSQUJMRSA9IEVycm5vKF9FTk9U
UkVDT1ZFUkFCTEUpCitjb25zdCBFSU8gPSBFcnJubyhfRUlPKQorY29uc3QgRU5FVFVOUkVBQ0gg
PSBFcnJubyhfRU5FVFVOUkVBQ0gpCitjb25zdCBFWERFViA9IEVycm5vKF9FWERFVikKK2NvbnN0
IEVEUVVPVCA9IEVycm5vKF9FRFFVT1QpCitjb25zdCBFUkVNT1RFSU8gPSBFcnJubyhfRVJFTU9U
RUlPKQorY29uc3QgRU5PU1BDID0gRXJybm8oX0VOT1NQQykKK2NvbnN0IEVOT0VYRUMgPSBFcnJu
byhfRU5PRVhFQykKK2NvbnN0IEVNU0dTSVpFID0gRXJybm8oX0VNU0dTSVpFKQorY29uc3QgRURP
TSA9IEVycm5vKF9FRE9NKQorY29uc3QgRUZCSUcgPSBFcnJubyhfRUZCSUcpCitjb25zdCBFU1JD
SCA9IEVycm5vKF9FU1JDSCkKK2NvbnN0IEVDSFJORyA9IEVycm5vKF9FQ0hSTkcpCitjb25zdCBF
SE9TVERPV04gPSBFcnJubyhfRUhPU1RET1dOKQorY29uc3QgRU5PTENLID0gRXJybm8oX0VOT0xD
SykKK2NvbnN0IEVORklMRSA9IEVycm5vKF9FTkZJTEUpCitjb25zdCBFTk9TWVMgPSBFcnJubyhf
RU5PU1lTKQorY29uc3QgRU5PVENPTk4gPSBFcnJubyhfRU5PVENPTk4pCitjb25zdCBFUEZOT1NV
UFBPUlQgPSBFcnJubyhfRVBGTk9TVVBQT1JUKQorY29uc3QgRU5PVFNVUCA9IEVycm5vKF9FTk9U
U1VQKQorY29uc3QgRVNSTU5UID0gRXJybm8oX0VTUk1OVCkKK2NvbnN0IEVERUFETE9DSyA9IEVy
cm5vKF9FREVBRExPQ0spCitjb25zdCBFQ09OTkFCT1JURUQgPSBFcnJubyhfRUNPTk5BQk9SVEVE
KQorY29uc3QgRU5PQU5PID0gRXJybm8oX0VOT0FOTykKK2NvbnN0IEVJU0NPTk4gPSBFcnJubyhf
RUlTQ09OTikKK2NvbnN0IEVVU0VSUyA9IEVycm5vKF9FVVNFUlMpCitjb25zdCBFTk9QUk9UT09Q
VCA9IEVycm5vKF9FTk9QUk9UT09QVCkKK2NvbnN0IEVDT01NID0gRXJybm8oX0VDT01NKQorY29u
c3QgRU1GSUxFID0gRXJybm8oX0VNRklMRSkKK2NvbnN0IEVSRktJTEwgPSBFcnJubyhfRVJGS0lM
TCkKK2NvbnN0IEVOT0JVRlMgPSBFcnJubyhfRU5PQlVGUykKK2NvbnN0IEVGQVVMVCA9IEVycm5v
KF9FRkFVTFQpCitjb25zdCBFV09VTERCTE9DSyA9IEVycm5vKF9FV09VTERCTE9DSykKK2NvbnN0
IEVMSUJCQUQgPSBFcnJubyhfRUxJQkJBRCkKK2NvbnN0IEVTVFJQSVBFID0gRXJybm8oX0VTVFJQ
SVBFKQorY29uc3QgRUNPTk5SRUZVU0VEID0gRXJybm8oX0VDT05OUkVGVVNFRCkKK2NvbnN0IEVB
R0FJTiA9IEVycm5vKF9FQUdBSU4pCitjb25zdCBFTElCTUFYID0gRXJybm8oX0VMSUJNQVgpCitj
b25zdCBFRVhJU1QgPSBFcnJubyhfRUVYSVNUKQorY29uc3QgRUwyTlNZTkMgPSBFcnJubyhfRUwy
TlNZTkMpCitjb25zdCBFTk9FTlQgPSBFcnJubyhfRU5PRU5UKQorY29uc3QgRU5PUEtHID0gRXJy
bm8oX0VOT1BLRykKK2NvbnN0IEVCQURTTFQgPSBFcnJubyhfRUJBRFNMVCkKK2NvbnN0IEVLRVlS
RVZPS0VEID0gRXJybm8oX0VLRVlSRVZPS0VEKQorY29uc3QgRU5PVFVOSVEgPSBFcnJubyhfRU5P
VFVOSVEpCitjb25zdCBFT1BOT1RTVVBQID0gRXJybm8oX0VPUE5PVFNVUFApCitjb25zdCBFTUVE
SVVNVFlQRSA9IEVycm5vKF9FTUVESVVNVFlQRSkKK2NvbnN0IE9fQVBQRU5EID0gX09fQVBQRU5E
Citjb25zdCBGX0dFVExLNjQgPSBfRl9HRVRMSzY0Citjb25zdCBGRF9TRVRTSVpFID0gX0ZEX1NF
VFNJWkUKK2NvbnN0IEZfRVhMQ0sgPSBfRl9FWExDSworY29uc3QgRl9BRERfU0VBTFMgPSBfRl9B
RERfU0VBTFMKK2NvbnN0IEZfU0VUUElQRV9TWiA9IF9GX1NFVFBJUEVfU1oKK2NvbnN0IE9fU1lO
QyA9IF9PX1NZTkMKK2NvbnN0IEZfU0VBTF9TSFJJTksgPSBfRl9TRUFMX1NIUklOSworY29uc3Qg
Rl9XUkxDSyA9IF9GX1dSTENLCitjb25zdCBPX0RJUkVDVE9SWSA9IF9PX0RJUkVDVE9SWQorY29u
c3QgT19OT0FUSU1FID0gX09fTk9BVElNRQorY29uc3QgRl9VTE9DSyA9IF9GX1VMT0NLCitjb25z
dCBGX0dFVE9XTiA9IF9GX0dFVE9XTgorY29uc3QgRl9MT0NLID0gX0ZfTE9DSworY29uc3QgT19D
TE9FWEVDID0gX09fQ0xPRVhFQworY29uc3QgT19OREVMQVkgPSBfT19OREVMQVkKK2NvbnN0IE9f
RElSRUNUID0gX09fRElSRUNUCitjb25zdCBGX0dFVFNJRyA9IF9GX0dFVFNJRworY29uc3QgT19U
TVBGSUxFID0gX09fVE1QRklMRQorY29uc3QgRl9SRExDSyA9IF9GX1JETENLCitjb25zdCBPX1JT
WU5DID0gX09fUlNZTkMKK2NvbnN0IEZfU0hMQ0sgPSBfRl9TSExDSworY29uc3QgT19QQVRIID0g
X09fUEFUSAorY29uc3QgT19EU1lOQyA9IF9PX0RTWU5DCitjb25zdCBPX05PRk9MTE9XID0gX09f
Tk9GT0xMT1cKK2NvbnN0IEZfT0ZEX1NFVExLVyA9IF9GX09GRF9TRVRMS1cKK2NvbnN0IE9fV1JP
TkxZID0gX09fV1JPTkxZCitjb25zdCBPX05PTkJMT0NLID0gX09fTk9OQkxPQ0sKK2NvbnN0IEZf
R0VUX1NFQUxTID0gX0ZfR0VUX1NFQUxTCitjb25zdCBGX1NFQUxfV1JJVEUgPSBfRl9TRUFMX1dS
SVRFCitjb25zdCBPX0NSRUFUID0gX09fQ1JFQVQKK2NvbnN0IEZfR0VUX0ZJTEVfUldfSElOVCA9
IF9GX0dFVF9GSUxFX1JXX0hJTlQKK2NvbnN0IEZfTk9USUZZID0gX0ZfTk9USUZZCitjb25zdCBP
X1JEV1IgPSBfT19SRFdSCitjb25zdCBGX1NFVF9GSUxFX1JXX0hJTlQgPSBfRl9TRVRfRklMRV9S
V19ISU5UCitjb25zdCBGX1NFVF9SV19ISU5UID0gX0ZfU0VUX1JXX0hJTlQKK2NvbnN0IEZfT1dO
RVJfUEdSUCA9IF9GX09XTkVSX1BHUlAKK2NvbnN0IEZfRFVQRkQgPSBfRl9EVVBGRAorY29uc3Qg
Rl9TRVRGRCA9IF9GX1NFVEZECitjb25zdCBGX1NFVEZMID0gX0ZfU0VURkwKK2NvbnN0IEZfR0VU
TEVBU0UgPSBfRl9HRVRMRUFTRQorY29uc3QgT19FWENMID0gX09fRVhDTAorY29uc3QgRl9PSyA9
IF9GX09LCitjb25zdCBGX0dFVFBJUEVfU1ogPSBfRl9HRVRQSVBFX1NaCitjb25zdCBGX1NFQUxf
R1JPVyA9IF9GX1NFQUxfR1JPVworY29uc3QgRl9URVNUID0gX0ZfVEVTVAorY29uc3QgRl9TRVRM
SyA9IF9GX1NFVExLCitjb25zdCBGX0dFVE9XTl9FWCA9IF9GX0dFVE9XTl9FWAorY29uc3QgT19G
U1lOQyA9IF9PX0ZTWU5DCitjb25zdCBPX1JET05MWSA9IF9PX1JET05MWQorY29uc3QgRl9EVVBG
RF9DTE9FWEVDID0gX0ZfRFVQRkRfQ0xPRVhFQworY29uc3QgRl9PRkRfU0VUTEsgPSBfRl9PRkRf
U0VUTEsKK2NvbnN0IEZfR0VURkQgPSBfRl9HRVRGRAorY29uc3QgRl9HRVRGTCA9IF9GX0dFVEZM
Citjb25zdCBGX09XTkVSX1BJRCA9IF9GX09XTkVSX1BJRAorY29uc3QgT19MQVJHRUZJTEUgPSBf
T19MQVJHRUZJTEUKK2NvbnN0IEZfU0VUT1dOX0VYID0gX0ZfU0VUT1dOX0VYCitjb25zdCBGX0dF
VExLID0gX0ZfR0VUTEsKK2NvbnN0IEZfU0VUTEtXID0gX0ZfU0VUTEtXCitjb25zdCBGX09XTkVS
X0dJRCA9IF9GX09XTkVSX0dJRAorY29uc3QgRkRfQ0xPRVhFQyA9IF9GRF9DTE9FWEVDCitjb25z
dCBGX0dFVF9SV19ISU5UID0gX0ZfR0VUX1JXX0hJTlQKK2NvbnN0IE9fTk9DVFRZID0gX09fTk9D
VFRZCitjb25zdCBGX09GRF9HRVRMSyA9IF9GX09GRF9HRVRMSworY29uc3QgRl9TRVRMRUFTRSA9
IF9GX1NFVExFQVNFCitjb25zdCBPX0FTWU5DID0gX09fQVNZTkMKK2NvbnN0IEZfU0VUT1dOID0g
X0ZfU0VUT1dOCitjb25zdCBPX1RSVU5DID0gX09fVFJVTkMKK2NvbnN0IEZfT1dORVJfVElEID0g
X0ZfT1dORVJfVElECitjb25zdCBGX1VOTENLID0gX0ZfVU5MQ0sKK2NvbnN0IEZfU0VUU0lHID0g
X0ZfU0VUU0lHCitjb25zdCBGX1NFQUxfU0VBTCA9IF9GX1NFQUxfU0VBTAorY29uc3QgRl9UTE9D
SyA9IF9GX1RMT0NLCitjb25zdCBPX0FDQ01PREUgPSBfT19BQ0NNT0RFCitjb25zdCBGX1NFVExL
VzY0ID0gX0ZfU0VUTEtXNjQKK2NvbnN0IEZfU0VUTEs2NCA9IF9GX1NFVExLNjQKK3R5cGUgRmxv
Y2tfdCBzdHJ1Y3QgeyBUeXBlIGludDE2OyBXaGVuY2UgaW50MTY7IFN0YXJ0IGludDY0OyBMZW4g
aW50NjQ7IFBpZCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IFNJR0lMTCA9
IFNpZ25hbChfU0lHSUxMKQorY29uc3QgU0lHQ0xEID0gU2lnbmFsKF9TSUdDTEQpCitjb25zdCBT
SUdLSUxMID0gU2lnbmFsKF9TSUdLSUxMKQorY29uc3QgU0lHVFNUUCA9IFNpZ25hbChfU0lHVFNU
UCkKK2NvbnN0IFNJR0lPVCA9IFNpZ25hbChfU0lHSU9UKQorY29uc3QgU0lHU0VHViA9IFNpZ25h
bChfU0lHU0VHVikKK2NvbnN0IFNJR1hDUFUgPSBTaWduYWwoX1NJR1hDUFUpCitjb25zdCBTSUdJ
TlQgPSBTaWduYWwoX1NJR0lOVCkKK2NvbnN0IFNJR0lPID0gU2lnbmFsKF9TSUdJTykKK2NvbnN0
IFNJR0JVUyA9IFNpZ25hbChfU0lHQlVTKQorY29uc3QgU0lHUElQRSA9IFNpZ25hbChfU0lHUElQ
RSkKK2NvbnN0IFNJR1NUS0ZMVCA9IFNpZ25hbChfU0lHU1RLRkxUKQorY29uc3QgU0lHVFJBUCA9
IFNpZ25hbChfU0lHVFJBUCkKK2NvbnN0IFNJR1RFUk0gPSBTaWduYWwoX1NJR1RFUk0pCitjb25z
dCBTSUdGUEUgPSBTaWduYWwoX1NJR0ZQRSkKK2NvbnN0IFNJR1ZUQUxSTSA9IFNpZ25hbChfU0lH
VlRBTFJNKQorY29uc3QgU0lHUFdSID0gU2lnbmFsKF9TSUdQV1IpCitjb25zdCBTSUdTVEtTWiA9
IFNpZ25hbChfU0lHU1RLU1opCitjb25zdCBTSUdUVElOID0gU2lnbmFsKF9TSUdUVElOKQorY29u
c3QgU0lHVVNSMSA9IFNpZ25hbChfU0lHVVNSMSkKK2NvbnN0IFNJR1VTUjIgPSBTaWduYWwoX1NJ
R1VTUjIpCitjb25zdCBTSUdBTFJNID0gU2lnbmFsKF9TSUdBTFJNKQorY29uc3QgU0lHVFRPVSA9
IFNpZ25hbChfU0lHVFRPVSkKK2NvbnN0IFNJR1BST0YgPSBTaWduYWwoX1NJR1BST0YpCitjb25z
dCBTSUdDT05UID0gU2lnbmFsKF9TSUdDT05UKQorY29uc3QgU0lHQUJSVCA9IFNpZ25hbChfU0lH
QUJSVCkKK2NvbnN0IFNJR1VSRyA9IFNpZ25hbChfU0lHVVJHKQorY29uc3QgU0lHSFVQID0gU2ln
bmFsKF9TSUdIVVApCitjb25zdCBTSUdXSU5DSCA9IFNpZ25hbChfU0lHV0lOQ0gpCitjb25zdCBT
SUdDSExEID0gU2lnbmFsKF9TSUdDSExEKQorY29uc3QgU0lHU1lTID0gU2lnbmFsKF9TSUdTWVMp
Citjb25zdCBTSUdYRlNaID0gU2lnbmFsKF9TSUdYRlNaKQorY29uc3QgU0lHU1RPUCA9IFNpZ25h
bChfU0lHU1RPUCkKK2NvbnN0IFNJR1FVSVQgPSBTaWduYWwoX1NJR1FVSVQpCitjb25zdCBTSUdQ
T0xMID0gU2lnbmFsKF9TSUdQT0xMKQorY29uc3QgU1lTX1VTRUxJQiA9IF9TWVNfdXNlbGliCitj
b25zdCBTWVNfRlRSVU5DQVRFID0gX1NZU19mdHJ1bmNhdGUKK2NvbnN0IFNZU19NS05PREFUID0g
X1NZU19ta25vZGF0Citjb25zdCBTWVNfRVBPTExfQ1RMX09MRCA9IF9TWVNfZXBvbGxfY3RsX29s
ZAorY29uc3QgU1lTX01VTkxPQ0sgPSBfU1lTX211bmxvY2sKK2NvbnN0IFNZU19TVEFURlMgPSBf
U1lTX3N0YXRmcworY29uc3QgU1lTX1NXQVBPRkYgPSBfU1lTX3N3YXBvZmYKK2NvbnN0IFNZU19H
RVRTT0NLT1BUID0gX1NZU19nZXRzb2Nrb3B0Citjb25zdCBTWVNfVU1PVU5UMiA9IF9TWVNfdW1v
dW50MgorY29uc3QgU1lTX0ZSRU1PVkVYQVRUUiA9IF9TWVNfZnJlbW92ZXhhdHRyCitjb25zdCBT
WVNfRlNFVFhBVFRSID0gX1NZU19mc2V0eGF0dHIKK2NvbnN0IFNZU19QUkNUTCA9IF9TWVNfcHJj
dGwKK2NvbnN0IFNZU19FWEVDVkUgPSBfU1lTX2V4ZWN2ZQorY29uc3QgU1lTX1NFVFJFU1VJRCA9
IF9TWVNfc2V0cmVzdWlkCitjb25zdCBTWVNfVEVFID0gX1NZU190ZWUKK2NvbnN0IFNZU19MSVNU
RU4gPSBfU1lTX2xpc3RlbgorY29uc3QgU1lTX0dFVElUSU1FUiA9IF9TWVNfZ2V0aXRpbWVyCitj
b25zdCBTWVNfR0VUUEdSUCA9IF9TWVNfZ2V0cGdycAorY29uc3QgU1lTX1BLRVlfRlJFRSA9IF9T
WVNfcGtleV9mcmVlCitjb25zdCBTWVNfR0VUREVOVFM2NCA9IF9TWVNfZ2V0ZGVudHM2NAorY29u
c3QgU1lTX0dFVFBSSU9SSVRZID0gX1NZU19nZXRwcmlvcml0eQorY29uc3QgU1lTX1NFVF9ST0JV
U1RfTElTVCA9IF9TWVNfc2V0X3JvYnVzdF9saXN0Citjb25zdCBTWVNfUFJPQ0VTU19WTV9SRUFE
ViA9IF9TWVNfcHJvY2Vzc192bV9yZWFkdgorY29uc3QgU1lTX1JUX1NJR1NVU1BFTkQgPSBfU1lT
X3J0X3NpZ3N1c3BlbmQKK2NvbnN0IFNZU19HRVRQRUVSTkFNRSA9IF9TWVNfZ2V0cGVlcm5hbWUK
K2NvbnN0IFNZU19HRVRFR0lEID0gX1NZU19nZXRlZ2lkCitjb25zdCBTWVNfR0VUU0lEID0gX1NZ
U19nZXRzaWQKK2NvbnN0IFNZU19SRUFETElOS0FUID0gX1NZU19yZWFkbGlua2F0Citjb25zdCBT
WVNfTVNHQ1RMID0gX1NZU19tc2djdGwKK2NvbnN0IFNZU19TSUdOQUxGRDQgPSBfU1lTX3NpZ25h
bGZkNAorY29uc3QgU1lTX0FDQ0VTUyA9IF9TWVNfYWNjZXNzCitjb25zdCBTWVNfR0VUX1JPQlVT
VF9MSVNUID0gX1NZU19nZXRfcm9idXN0X2xpc3QKK2NvbnN0IFNZU19NUV9OT1RJRlkgPSBfU1lT
X21xX25vdGlmeQorY29uc3QgU1lTX0NSRUFURV9NT0RVTEUgPSBfU1lTX2NyZWF0ZV9tb2R1bGUK
K2NvbnN0IFNZU19QSVZPVF9ST09UID0gX1NZU19waXZvdF9yb290Citjb25zdCBTWVNfSU9QUklP
X1NFVCA9IF9TWVNfaW9wcmlvX3NldAorY29uc3QgU1lTX1VNQVNLID0gX1NZU191bWFzaworY29u
c3QgU1lTX1JFQ1ZNU0cgPSBfU1lTX3JlY3Ztc2cKK2NvbnN0IFNZU19QUE9MTCA9IF9TWVNfcHBv
bGwKK2NvbnN0IFNZU19MU0VFSyA9IF9TWVNfbHNlZWsKK2NvbnN0IFNZU19QV1JJVEVWMiA9IF9T
WVNfcHdyaXRldjIKK2NvbnN0IFNZU19QUkVBRDY0ID0gX1NZU19wcmVhZDY0Citjb25zdCBTWVNf
U0VNQ1RMID0gX1NZU19zZW1jdGwKK2NvbnN0IFNZU19FUE9MTF9DUkVBVEUxID0gX1NZU19lcG9s
bF9jcmVhdGUxCitjb25zdCBTWVNfUlRfU0lHUEVORElORyA9IF9TWVNfcnRfc2lncGVuZGluZwor
Y29uc3QgU1lTX1JFTkFNRUFUMiA9IF9TWVNfcmVuYW1lYXQyCitjb25zdCBTWVNfS0VYRUNfRklM
RV9MT0FEID0gX1NZU19rZXhlY19maWxlX2xvYWQKK2NvbnN0IFNZU19FUE9MTF9QV0FJVCA9IF9T
WVNfZXBvbGxfcHdhaXQKK2NvbnN0IFNZU19USU1FUl9ERUxFVEUgPSBfU1lTX3RpbWVyX2RlbGV0
ZQorY29uc3QgU1lTX1NFVF9USURfQUREUkVTUyA9IF9TWVNfc2V0X3RpZF9hZGRyZXNzCitjb25z
dCBTWVNfR0VUUkVTVUlEID0gX1NZU19nZXRyZXN1aWQKK2NvbnN0IFNZU19TQ0hFRF9ZSUVMRCA9
IF9TWVNfc2NoZWRfeWllbGQKK2NvbnN0IFNZU19BREpUSU1FWCA9IF9TWVNfYWRqdGltZXgKK2Nv
bnN0IFNZU19QV1JJVEU2NCA9IF9TWVNfcHdyaXRlNjQKK2NvbnN0IFNZU19TRVRJVElNRVIgPSBf
U1lTX3NldGl0aW1lcgorY29uc3QgU1lTX01RX09QRU4gPSBfU1lTX21xX29wZW4KK2NvbnN0IFNZ
U19DTE9DS19HRVRSRVMgPSBfU1lTX2Nsb2NrX2dldHJlcworY29uc3QgU1lTX0lPX1BHRVRFVkVO
VFMgPSBfU1lTX2lvX3BnZXRldmVudHMKK2NvbnN0IFNZU19NU0dSQ1YgPSBfU1lTX21zZ3Jjdgor
Y29uc3QgU1lTX0VQT0xMX0NSRUFURSA9IF9TWVNfZXBvbGxfY3JlYXRlCitjb25zdCBTWVNfR0VU
REVOVFMgPSBfU1lTX2dldGRlbnRzCitjb25zdCBTWVNfR0VUVUlEID0gX1NZU19nZXR1aWQKK2Nv
bnN0IFNZU19XQUlUNCA9IF9TWVNfd2FpdDQKK2NvbnN0IFNZU19OQU1FX1RPX0hBTkRMRV9BVCA9
IF9TWVNfbmFtZV90b19oYW5kbGVfYXQKK2NvbnN0IFNZU19FUE9MTF9XQUlUX09MRCA9IF9TWVNf
ZXBvbGxfd2FpdF9vbGQKK2NvbnN0IFNZU19TWVNGUyA9IF9TWVNfc3lzZnMKK2NvbnN0IFNZU19T
RU1HRVQgPSBfU1lTX3NlbWdldAorY29uc3QgU1lTX1BLRVlfQUxMT0MgPSBfU1lTX3BrZXlfYWxs
b2MKK2NvbnN0IFNZU19QRVJTT05BTElUWSA9IF9TWVNfcGVyc29uYWxpdHkKK2NvbnN0IFNZU19Q
UkVBRFYgPSBfU1lTX3ByZWFkdgorY29uc3QgU1lTX0lPUFJJT19HRVQgPSBfU1lTX2lvcHJpb19n
ZXQKK2NvbnN0IFNZU19JTklUX01PRFVMRSA9IF9TWVNfaW5pdF9tb2R1bGUKK2NvbnN0IFNZU19M
R0VUWEFUVFIgPSBfU1lTX2xnZXR4YXR0cgorY29uc3QgU1lTX1JNRElSID0gX1NZU19ybWRpcgor
Y29uc3QgU1lTX1NFVFJFU0dJRCA9IF9TWVNfc2V0cmVzZ2lkCitjb25zdCBTWVNfUVVFUllfTU9E
VUxFID0gX1NZU19xdWVyeV9tb2R1bGUKK2NvbnN0IFNZU19USU1FUl9HRVRPVkVSUlVOID0gX1NZ
U190aW1lcl9nZXRvdmVycnVuCitjb25zdCBTWVNfRlNZTkMgPSBfU1lTX2ZzeW5jCitjb25zdCBT
WVNfRkFOT1RJRllfTUFSSyA9IF9TWVNfZmFub3RpZnlfbWFyaworY29uc3QgU1lTX0dFVFRJTUVP
RkRBWSA9IF9TWVNfZ2V0dGltZW9mZGF5Citjb25zdCBTWVNfU1lOQ19GSUxFX1JBTkdFID0gX1NZ
U19zeW5jX2ZpbGVfcmFuZ2UKK2NvbnN0IFNZU19VU0VSRkFVTFRGRCA9IF9TWVNfdXNlcmZhdWx0
ZmQKK2NvbnN0IFNZU19NSUdSQVRFX1BBR0VTID0gX1NZU19taWdyYXRlX3BhZ2VzCitjb25zdCBT
WVNfU1BMSUNFID0gX1NZU19zcGxpY2UKK2NvbnN0IFNZU19NTE9DS0FMTCA9IF9TWVNfbWxvY2th
bGwKK2NvbnN0IFNZU19TRVRfVEhSRUFEX0FSRUEgPSBfU1lTX3NldF90aHJlYWRfYXJlYQorY29u
c3QgU1lTX0NPUFlfRklMRV9SQU5HRSA9IF9TWVNfY29weV9maWxlX3JhbmdlCitjb25zdCBTWVNf
T1BFTl9CWV9IQU5ETEVfQVQgPSBfU1lTX29wZW5fYnlfaGFuZGxlX2F0Citjb25zdCBTWVNfTUFE
VklTRSA9IF9TWVNfbWFkdmlzZQorY29uc3QgU1lTX0lPX1NFVFVQID0gX1NZU19pb19zZXR1cAor
Y29uc3QgU1lTX0tFWUNUTCA9IF9TWVNfa2V5Y3RsCitjb25zdCBTWVNfU0VUR0lEID0gX1NZU19z
ZXRnaWQKK2NvbnN0IFNZU19GQUNDRVNTQVQgPSBfU1lTX2ZhY2Nlc3NhdAorY29uc3QgU1lTX0ZD
SE1PREFUID0gX1NZU19mY2htb2RhdAorY29uc3QgU1lTX0NMT0NLX1NFVFRJTUUgPSBfU1lTX2Ns
b2NrX3NldHRpbWUKK2NvbnN0IFNZU19HRVRfVEhSRUFEX0FSRUEgPSBfU1lTX2dldF90aHJlYWRf
YXJlYQorY29uc3QgU1lTX05FV0ZTVEFUQVQgPSBfU1lTX25ld2ZzdGF0YXQKK2NvbnN0IFNZU19T
Q0hFRF9TRVRBRkZJTklUWSA9IF9TWVNfc2NoZWRfc2V0YWZmaW5pdHkKK2NvbnN0IFNZU19QSVBF
MiA9IF9TWVNfcGlwZTIKK2NvbnN0IFNZU19CUEYgPSBfU1lTX2JwZgorY29uc3QgU1lTX0NITU9E
ID0gX1NZU19jaG1vZAorY29uc3QgU1lTX0VWRU5URkQyID0gX1NZU19ldmVudGZkMgorY29uc3Qg
U1lTX0NMT0NLX0dFVFRJTUUgPSBfU1lTX2Nsb2NrX2dldHRpbWUKK2NvbnN0IFNZU19DTE9TRSA9
IF9TWVNfY2xvc2UKK2NvbnN0IFNZU19CUksgPSBfU1lTX2JyaworY29uc3QgU1lTX1ZNU1BMSUNF
ID0gX1NZU192bXNwbGljZQorY29uc3QgU1lTX0VYRUNWRUFUID0gX1NZU19leGVjdmVhdAorY29u
c3QgU1lTX01TWU5DID0gX1NZU19tc3luYworY29uc3QgU1lTX0xTVEFUID0gX1NZU19sc3RhdAor
Y29uc3QgU1lTX0FMQVJNID0gX1NZU19hbGFybQorY29uc3QgU1lTX0NIRElSID0gX1NZU19jaGRp
cgorY29uc3QgU1lTX0NBUFNFVCA9IF9TWVNfY2Fwc2V0Citjb25zdCBTWVNfRklOSVRfTU9EVUxF
ID0gX1NZU19maW5pdF9tb2R1bGUKK2NvbnN0IFNZU19SVF9TSUdQUk9DTUFTSyA9IF9TWVNfcnRf
c2lncHJvY21hc2sKK2NvbnN0IFNZU19TSUdOQUxGRCA9IF9TWVNfc2lnbmFsZmQKK2NvbnN0IFNZ
U19GVVRJTUVTQVQgPSBfU1lTX2Z1dGltZXNhdAorY29uc3QgU1lTX0dFVFNPQ0tOQU1FID0gX1NZ
U19nZXRzb2NrbmFtZQorY29uc3QgU1lTX1NDSEVEX0dFVFBBUkFNID0gX1NZU19zY2hlZF9nZXRw
YXJhbQorY29uc3QgU1lTX1NFVF9NRU1QT0xJQ1kgPSBfU1lTX3NldF9tZW1wb2xpY3kKK2NvbnN0
IFNZU19GREFUQVNZTkMgPSBfU1lTX2ZkYXRhc3luYworY29uc3QgU1lTX1BSTElNSVQ2NCA9IF9T
WVNfcHJsaW1pdDY0Citjb25zdCBTWVNfVElNRVJGRF9TRVRUSU1FID0gX1NZU190aW1lcmZkX3Nl
dHRpbWUKK2NvbnN0IFNZU19TV0FQT04gPSBfU1lTX3N3YXBvbgorY29uc3QgU1lTX1JUX1NJR1FV
RVVFSU5GTyA9IF9TWVNfcnRfc2lncXVldWVpbmZvCitjb25zdCBTWVNfR0VUUE1TRyA9IF9TWVNf
Z2V0cG1zZworY29uc3QgU1lTX0FSQ0hfUFJDVEwgPSBfU1lTX2FyY2hfcHJjdGwKK2NvbnN0IFNZ
U19GQ0hPV04gPSBfU1lTX2ZjaG93bgorY29uc3QgU1lTX1NFTEVDVCA9IF9TWVNfc2VsZWN0Citj
b25zdCBTWVNfQUNDRVBUNCA9IF9TWVNfYWNjZXB0NAorY29uc3QgU1lTX1BST0NFU1NfVk1fV1JJ
VEVWID0gX1NZU19wcm9jZXNzX3ZtX3dyaXRldgorY29uc3QgU1lTX1FVT1RBQ1RMID0gX1NZU19x
dW90YWN0bAorY29uc3QgU1lTX01LRElSID0gX1NZU19ta2RpcgorY29uc3QgU1lTX1JFTkFNRSA9
IF9TWVNfcmVuYW1lCitjb25zdCBTWVNfVkhBTkdVUCA9IF9TWVNfdmhhbmd1cAorY29uc3QgU1lT
X1RJTUVSRkRfR0VUVElNRSA9IF9TWVNfdGltZXJmZF9nZXR0aW1lCitjb25zdCBTWVNfR0VUQ1BV
ID0gX1NZU19nZXRjcHUKK2NvbnN0IFNZU19BQ0NUID0gX1NZU19hY2N0Citjb25zdCBTWVNfU0VU
UkVVSUQgPSBfU1lTX3NldHJldWlkCitjb25zdCBTWVNfUlNFUSA9IF9TWVNfcnNlcQorY29uc3Qg
U1lTX0ZTVEFUID0gX1NZU19mc3RhdAorY29uc3QgU1lTX1NZTUxJTksgPSBfU1lTX3N5bWxpbmsK
K2NvbnN0IFNZU19TRU5EVE8gPSBfU1lTX3NlbmR0bworY29uc3QgU1lTX1NFQ1VSSVRZID0gX1NZ
U19zZWN1cml0eQorY29uc3QgU1lTX1NFVEhPU1ROQU1FID0gX1NZU19zZXRob3N0bmFtZQorY29u
c3QgU1lTX1ZTRVJWRVIgPSBfU1lTX3ZzZXJ2ZXIKK2NvbnN0IFNZU19SRUFEQUhFQUQgPSBfU1lT
X3JlYWRhaGVhZAorY29uc3QgU1lTX1RJTUUgPSBfU1lTX3RpbWUKK2NvbnN0IFNZU19TWVNMT0cg
PSBfU1lTX3N5c2xvZworY29uc3QgU1lTX0lPX0dFVEVWRU5UUyA9IF9TWVNfaW9fZ2V0ZXZlbnRz
Citjb25zdCBTWVNfV1JJVEUgPSBfU1lTX3dyaXRlCitjb25zdCBTWVNfRkFOT1RJRllfSU5JVCA9
IF9TWVNfZmFub3RpZnlfaW5pdAorY29uc3QgU1lTX0lOT1RJRllfQUREX1dBVENIID0gX1NZU19p
bm90aWZ5X2FkZF93YXRjaAorY29uc3QgU1lTX0RVUCA9IF9TWVNfZHVwCitjb25zdCBTWVNfU0VD
Q09NUCA9IF9TWVNfc2VjY29tcAorY29uc3QgU1lTX1NDSEVEX0dFVFNDSEVEVUxFUiA9IF9TWVNf
c2NoZWRfZ2V0c2NoZWR1bGVyCitjb25zdCBTWVNfUEVSRl9FVkVOVF9PUEVOID0gX1NZU19wZXJm
X2V2ZW50X29wZW4KK2NvbnN0IFNZU19TRVROUyA9IF9TWVNfc2V0bnMKK2NvbnN0IFNZU19HRVRD
V0QgPSBfU1lTX2dldGN3ZAorY29uc3QgU1lTX1JFQk9PVCA9IF9TWVNfcmVib290Citjb25zdCBT
WVNfR0VUUElEID0gX1NZU19nZXRwaWQKK2NvbnN0IFNZU19DTE9DS19OQU5PU0xFRVAgPSBfU1lT
X2Nsb2NrX25hbm9zbGVlcAorY29uc3QgU1lTX01RX1VOTElOSyA9IF9TWVNfbXFfdW5saW5rCitj
b25zdCBTWVNfQ0hPV04gPSBfU1lTX2Nob3duCitjb25zdCBTWVNfUlRfVEdTSUdRVUVVRUlORk8g
PSBfU1lTX3J0X3Rnc2lncXVldWVpbmZvCitjb25zdCBTWVNfU1lOQyA9IF9TWVNfc3luYworY29u
c3QgU1lTX0NBUEdFVCA9IF9TWVNfY2FwZ2V0Citjb25zdCBTWVNfTk1MTiA9IF9TWVNfTk1MTgor
Y29uc3QgU1lTX0JJTkQgPSBfU1lTX2JpbmQKK2NvbnN0IFNZU19VVElNRSA9IF9TWVNfdXRpbWUK
K2NvbnN0IFNZU19SVF9TSUdBQ1RJT04gPSBfU1lTX3J0X3NpZ2FjdGlvbgorY29uc3QgU1lTX0VQ
T0xMX1dBSVQgPSBfU1lTX2Vwb2xsX3dhaXQKK2NvbnN0IFNZU19MU0VUWEFUVFIgPSBfU1lTX2xz
ZXR4YXR0cgorY29uc3QgU1lTX1NFVFNPQ0tPUFQgPSBfU1lTX3NldHNvY2tvcHQKK2NvbnN0IFNZ
U19HRVRSRVNHSUQgPSBfU1lTX2dldHJlc2dpZAorY29uc3QgU1lTX1VOTElOS0FUID0gX1NZU191
bmxpbmthdAorY29uc3QgU1lTX0RVUDIgPSBfU1lTX2R1cDIKK2NvbnN0IFNZU19EVVAzID0gX1NZ
U19kdXAzCitjb25zdCBTWVNfTElOS0FUID0gX1NZU19saW5rYXQKK2NvbnN0IFNZU19NT0RJRllf
TERUID0gX1NZU19tb2RpZnlfbGR0Citjb25zdCBTWVNfTU9VTlQgPSBfU1lTX21vdW50Citjb25z
dCBTWVNfR0VUR0lEID0gX1NZU19nZXRnaWQKK2NvbnN0IFNZU19NVU5MT0NLQUxMID0gX1NZU19t
dW5sb2NrYWxsCitjb25zdCBTWVNfTENIT1dOID0gX1NZU19sY2hvd24KK2NvbnN0IFNZU19MSU5L
ID0gX1NZU19saW5rCitjb25zdCBTWVNfU0VOREZJTEUgPSBfU1lTX3NlbmRmaWxlCitjb25zdCBT
WVNfTVFfVElNRURSRUNFSVZFID0gX1NZU19tcV90aW1lZHJlY2VpdmUKK2NvbnN0IFNZU19UR0tJ
TEwgPSBfU1lTX3Rna2lsbAorY29uc3QgU1lTX1JFTkFNRUFUID0gX1NZU19yZW5hbWVhdAorY29u
c3QgU1lTX1JFQ1ZGUk9NID0gX1NZU19yZWN2ZnJvbQorY29uc3QgU1lTX01LTk9EID0gX1NZU19t
a25vZAorY29uc3QgU1lTX1VUSU1FUyA9IF9TWVNfdXRpbWVzCitjb25zdCBTWVNfTElTVFhBVFRS
ID0gX1NZU19saXN0eGF0dHIKK2NvbnN0IFNZU19SVF9TSUdUSU1FRFdBSVQgPSBfU1lTX3J0X3Np
Z3RpbWVkd2FpdAorY29uc3QgU1lTX1RJTUVTID0gX1NZU190aW1lcworY29uc3QgU1lTX1RJTUVS
X1NFVFRJTUUgPSBfU1lTX3RpbWVyX3NldHRpbWUKK2NvbnN0IFNZU19QSVBFID0gX1NZU19waXBl
Citjb25zdCBTWVNfR0VUX0tFUk5FTF9TWU1TID0gX1NZU19nZXRfa2VybmVsX3N5bXMKK2NvbnN0
IFNZU19TRVRSTElNSVQgPSBfU1lTX3NldHJsaW1pdAorY29uc3QgU1lTX0RFTEVURV9NT0RVTEUg
PSBfU1lTX2RlbGV0ZV9tb2R1bGUKK2NvbnN0IFNZU19USU1FUl9HRVRUSU1FID0gX1NZU190aW1l
cl9nZXR0aW1lCitjb25zdCBTWVNfSU5PVElGWV9STV9XQVRDSCA9IF9TWVNfaW5vdGlmeV9ybV93
YXRjaAorY29uc3QgU1lTX1NITUNUTCA9IF9TWVNfc2htY3RsCitjb25zdCBTWVNfU0NIRURfR0VU
QUZGSU5JVFkgPSBfU1lTX3NjaGVkX2dldGFmZmluaXR5Citjb25zdCBTWVNfUFdSSVRFViA9IF9T
WVNfcHdyaXRldgorY29uc3QgU1lTX1NFVEZTVUlEID0gX1NZU19zZXRmc3VpZAorY29uc3QgU1lT
X0ZDSE9XTkFUID0gX1NZU19mY2hvd25hdAorY29uc3QgU1lTX0ZDSE1PRCA9IF9TWVNfZmNobW9k
Citjb25zdCBTWVNfU0VNT1AgPSBfU1lTX3NlbW9wCitjb25zdCBTWVNfU0VUVElNRU9GREFZID0g
X1NZU19zZXR0aW1lb2ZkYXkKK2NvbnN0IFNZU19LSUxMID0gX1NZU19raWxsCitjb25zdCBTWVNf
VVRJTUVOU0FUID0gX1NZU191dGltZW5zYXQKK2NvbnN0IFNZU19USU1FUl9DUkVBVEUgPSBfU1lT
X3RpbWVyX2NyZWF0ZQorY29uc3QgU1lTX1NUQVQgPSBfU1lTX3N0YXQKK2NvbnN0IFNZU19TRVRE
T01BSU5OQU1FID0gX1NZU19zZXRkb21haW5uYW1lCitjb25zdCBTWVNfRkNIRElSID0gX1NZU19m
Y2hkaXIKK2NvbnN0IFNZU19GTE9DSyA9IF9TWVNfZmxvY2sKK2NvbnN0IFNZU19SRVFVRVNUX0tF
WSA9IF9TWVNfcmVxdWVzdF9rZXkKK2NvbnN0IFNZU19JT19ERVNUUk9ZID0gX1NZU19pb19kZXN0
cm95Citjb25zdCBTWVNfVElNRVJGRF9DUkVBVEUgPSBfU1lTX3RpbWVyZmRfY3JlYXRlCitjb25z
dCBTWVNfR0VUVElEID0gX1NZU19nZXR0aWQKK2NvbnN0IFNZU19GQUxMT0NBVEUgPSBfU1lTX2Zh
bGxvY2F0ZQorY29uc3QgU1lTX1NDSEVEX1NFVFBBUkFNID0gX1NZU19zY2hlZF9zZXRwYXJhbQor
Y29uc3QgU1lTX1NITUFUID0gX1NZU19zaG1hdAorY29uc3QgU1lTX1BSRUFEVjIgPSBfU1lTX3By
ZWFkdjIKK2NvbnN0IFNZU19HRVRSVVNBR0UgPSBfU1lTX2dldHJ1c2FnZQorY29uc3QgU1lTX0tD
TVAgPSBfU1lTX2tjbXAKK2NvbnN0IFNZU19VTkxJTksgPSBfU1lTX3VubGluaworY29uc3QgU1lT
X1NITUdFVCA9IF9TWVNfc2htZ2V0Citjb25zdCBTWVNfTE9PS1VQX0RDT09LSUUgPSBfU1lTX2xv
b2t1cF9kY29va2llCitjb25zdCBTWVNfTUtESVJBVCA9IF9TWVNfbWtkaXJhdAorY29uc3QgU1lT
X1NITURUID0gX1NZU19zaG1kdAorY29uc3QgU1lTX0FERF9LRVkgPSBfU1lTX2FkZF9rZXkKK2Nv
bnN0IFNZU19FWElUX0dST1VQID0gX1NZU19leGl0X2dyb3VwCitjb25zdCBTWVNfRk9SSyA9IF9T
WVNfZm9yaworY29uc3QgU1lTX0dFVFhBVFRSID0gX1NZU19nZXR4YXR0cgorY29uc3QgU1lTX01Q
Uk9URUNUID0gX1NZU19tcHJvdGVjdAorY29uc3QgU1lTX1JFQUQgPSBfU1lTX3JlYWQKK2NvbnN0
IFNZU19MTElTVFhBVFRSID0gX1NZU19sbGlzdHhhdHRyCitjb25zdCBTWVNfUEFVU0UgPSBfU1lT
X3BhdXNlCitjb25zdCBTWVNfTVFfR0VUU0VUQVRUUiA9IF9TWVNfbXFfZ2V0c2V0YXR0cgorY29u
c3QgU1lTX01MT0NLMiA9IF9TWVNfbWxvY2syCitjb25zdCBTWVNfR0VUUkFORE9NID0gX1NZU19n
ZXRyYW5kb20KK2NvbnN0IFNZU19PUEVOQVQgPSBfU1lTX29wZW5hdAorY29uc3QgU1lTX1JUX1NJ
R1JFVFVSTiA9IF9TWVNfcnRfc2lncmV0dXJuCitjb25zdCBTWVNfRkFEVklTRTY0ID0gX1NZU19m
YWR2aXNlNjQKK2NvbnN0IFNZU19VU1RBVCA9IF9TWVNfdXN0YXQKK2NvbnN0IFNZU19JT19TVUJN
SVQgPSBfU1lTX2lvX3N1Ym1pdAorY29uc3QgU1lTX1dSSVRFViA9IF9TWVNfd3JpdGV2Citjb25z
dCBTWVNfVU5TSEFSRSA9IF9TWVNfdW5zaGFyZQorY29uc3QgU1lTX01TR0dFVCA9IF9TWVNfbXNn
Z2V0Citjb25zdCBTWVNfTUxPQ0sgPSBfU1lTX21sb2NrCitjb25zdCBTWVNfS0VYRUNfTE9BRCA9
IF9TWVNfa2V4ZWNfbG9hZAorY29uc3QgU1lTX0dFVF9NRU1QT0xJQ1kgPSBfU1lTX2dldF9tZW1w
b2xpY3kKK2NvbnN0IFNZU19TRVRSRUdJRCA9IF9TWVNfc2V0cmVnaWQKK2NvbnN0IFNZU19DSFJP
T1QgPSBfU1lTX2Nocm9vdAorY29uc3QgU1lTX0FGU19TWVNDQUxMID0gX1NZU19hZnNfc3lzY2Fs
bAorY29uc3QgU1lTX05GU1NFUlZDVEwgPSBfU1lTX25mc3NlcnZjdGwKK2NvbnN0IFNZU19MUkVN
T1ZFWEFUVFIgPSBfU1lTX2xyZW1vdmV4YXR0cgorY29uc3QgU1lTX0lPX0NBTkNFTCA9IF9TWVNf
aW9fY2FuY2VsCitjb25zdCBTWVNfU09DS0VUID0gX1NZU19zb2NrZXQKK2NvbnN0IFNZU19GR0VU
WEFUVFIgPSBfU1lTX2ZnZXR4YXR0cgorY29uc3QgU1lTX01FTUZEX0NSRUFURSA9IF9TWVNfbWVt
ZmRfY3JlYXRlCitjb25zdCBTWVNfU1lNTElOS0FUID0gX1NZU19zeW1saW5rYXQKK2NvbnN0IFNZ
U19GQ05UTCA9IF9TWVNfZmNudGwKK2NvbnN0IFNZU19HRVRFVUlEID0gX1NZU19nZXRldWlkCitj
b25zdCBTWVNfRlNUQVRGUyA9IF9TWVNfZnN0YXRmcworY29uc3QgU1lTX1NDSEVEX1JSX0dFVF9J
TlRFUlZBTCA9IF9TWVNfc2NoZWRfcnJfZ2V0X2ludGVydmFsCitjb25zdCBTWVNfSU9QRVJNID0g
X1NZU19pb3Blcm0KK2NvbnN0IFNZU19BQ0NFUFQgPSBfU1lTX2FjY2VwdAorY29uc3QgU1lTX1JF
QURWID0gX1NZU19yZWFkdgorY29uc3QgU1lTX1VOQU1FID0gX1NZU191bmFtZQorY29uc3QgU1lT
X1NFVFBSSU9SSVRZID0gX1NZU19zZXRwcmlvcml0eQorY29uc3QgU1lTX1NFTkRNU0cgPSBfU1lT
X3NlbmRtc2cKK2NvbnN0IFNZU19SRUFETElOSyA9IF9TWVNfcmVhZGxpbmsKK2NvbnN0IFNZU19T
RU1USU1FRE9QID0gX1NZU19zZW10aW1lZG9wCitjb25zdCBTWVNfU0VUR1JPVVBTID0gX1NZU19z
ZXRncm91cHMKK2NvbnN0IFNZU19TRU5ETU1TRyA9IF9TWVNfc2VuZG1tc2cKK2NvbnN0IFNZU19T
Q0hFRF9TRVRTQ0hFRFVMRVIgPSBfU1lTX3NjaGVkX3NldHNjaGVkdWxlcgorY29uc3QgU1lTX0VQ
T0xMX0NUTCA9IF9TWVNfZXBvbGxfY3RsCitjb25zdCBTWVNfU0NIRURfR0VUX1BSSU9SSVRZX01B
WCA9IF9TWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorY29uc3QgU1lTX1NZTkNGUyA9IF9TWVNf
c3luY2ZzCitjb25zdCBTWVNfSU9DVEwgPSBfU1lTX2lvY3RsCitjb25zdCBTWVNfUE9MTCA9IF9T
WVNfcG9sbAorY29uc3QgU1lTX0lPUEwgPSBfU1lTX2lvcGwKK2NvbnN0IFNZU19NU0dTTkQgPSBf
U1lTX21zZ3NuZAorY29uc3QgU1lTX0VYSVQgPSBfU1lTX2V4aXQKK2NvbnN0IFNZU19SRVNUQVJU
X1NZU0NBTEwgPSBfU1lTX3Jlc3RhcnRfc3lzY2FsbAorY29uc3QgU1lTX05BTk9TTEVFUCA9IF9T
WVNfbmFub3NsZWVwCitjb25zdCBTWVNfTVJFTUFQID0gX1NZU19tcmVtYXAKK2NvbnN0IFNZU19T
WVNJTkZPID0gX1NZU19zeXNpbmZvCitjb25zdCBTWVNfU0VUU0lEID0gX1NZU19zZXRzaWQKK2Nv
bnN0IFNZU19TVEFUWCA9IF9TWVNfc3RhdHgKK2NvbnN0IFNZU19TSFVURE9XTiA9IF9TWVNfc2h1
dGRvd24KK2NvbnN0IFNZU19US0lMTCA9IF9TWVNfdGtpbGwKK2NvbnN0IFNZU19QVFJBQ0UgPSBf
U1lTX3B0cmFjZQorY29uc3QgU1lTX0ZVVEVYID0gX1NZU19mdXRleAorY29uc3QgU1lTX1JFQ1ZN
TVNHID0gX1NZU19yZWN2bW1zZworY29uc3QgU1lTX19TWVNDVEwgPSBfU1lTX19zeXNjdGwKK2Nv
bnN0IFNZU19NUV9USU1FRFNFTkQgPSBfU1lTX21xX3RpbWVkc2VuZAorY29uc3QgU1lTX0NMT05F
ID0gX1NZU19jbG9uZQorY29uc3QgU1lTX1NDSEVEX0dFVF9QUklPUklUWV9NSU4gPSBfU1lTX3Nj
aGVkX2dldF9wcmlvcml0eV9taW4KK2NvbnN0IFNZU19QVVRQTVNHID0gX1NZU19wdXRwbXNnCitj
b25zdCBTWVNfR0VUUkxJTUlUID0gX1NZU19nZXRybGltaXQKK2NvbnN0IFNZU19NRU1CQVJSSUVS
ID0gX1NZU19tZW1iYXJyaWVyCitjb25zdCBTWVNfSU5PVElGWV9JTklUID0gX1NZU19pbm90aWZ5
X2luaXQKK2NvbnN0IFNZU19UVVhDQUxMID0gX1NZU190dXhjYWxsCitjb25zdCBTWVNfTVVOTUFQ
ID0gX1NZU19tdW5tYXAKK2NvbnN0IFNZU19WRk9SSyA9IF9TWVNfdmZvcmsKK2NvbnN0IFNZU19X
QUlUSUQgPSBfU1lTX3dhaXRpZAorY29uc3QgU1lTX0dFVEdST1VQUyA9IF9TWVNfZ2V0Z3JvdXBz
Citjb25zdCBTWVNfTUJJTkQgPSBfU1lTX21iaW5kCitjb25zdCBTWVNfUEtFWV9NUFJPVEVDVCA9
IF9TWVNfcGtleV9tcHJvdGVjdAorY29uc3QgU1lTX01JTkNPUkUgPSBfU1lTX21pbmNvcmUKK2Nv
bnN0IFNZU19HRVRQUElEID0gX1NZU19nZXRwcGlkCitjb25zdCBTWVNfTU9WRV9QQUdFUyA9IF9T
WVNfbW92ZV9wYWdlcworY29uc3QgU1lTX1NFVEZTR0lEID0gX1NZU19zZXRmc2dpZAorY29uc3Qg
U1lTX1NDSEVEX1NFVEFUVFIgPSBfU1lTX3NjaGVkX3NldGF0dHIKK2NvbnN0IFNZU19SRU1BUF9G
SUxFX1BBR0VTID0gX1NZU19yZW1hcF9maWxlX3BhZ2VzCitjb25zdCBTWVNfU0VUVUlEID0gX1NZ
U19zZXR1aWQKK2NvbnN0IFNZU19TT0NLRVRQQUlSID0gX1NZU19zb2NrZXRwYWlyCitjb25zdCBT
WVNfUkVNT1ZFWEFUVFIgPSBfU1lTX3JlbW92ZXhhdHRyCitjb25zdCBTWVNfVFJVTkNBVEUgPSBf
U1lTX3RydW5jYXRlCitjb25zdCBTWVNfQ09OTkVDVCA9IF9TWVNfY29ubmVjdAorY29uc3QgU1lT
X1NDSEVEX0dFVEFUVFIgPSBfU1lTX3NjaGVkX2dldGF0dHIKK2NvbnN0IFNZU19GTElTVFhBVFRS
ID0gX1NZU19mbGlzdHhhdHRyCitjb25zdCBTWVNfTU1BUCA9IF9TWVNfbW1hcAorY29uc3QgU1lT
X0NMT0NLX0FESlRJTUUgPSBfU1lTX2Nsb2NrX2FkanRpbWUKK2NvbnN0IFNZU19FVkVOVEZEID0g
X1NZU19ldmVudGZkCitjb25zdCBTWVNfT1BFTiA9IF9TWVNfb3BlbgorY29uc3QgU1lTX1NFVFBH
SUQgPSBfU1lTX3NldHBnaWQKK2NvbnN0IFNZU19QU0VMRUNUNiA9IF9TWVNfcHNlbGVjdDYKK2Nv
bnN0IFNZU19TRVRYQVRUUiA9IF9TWVNfc2V0eGF0dHIKK2NvbnN0IFNZU19TSUdBTFRTVEFDSyA9
IF9TWVNfc2lnYWx0c3RhY2sKK2NvbnN0IFNZU19JTk9USUZZX0lOSVQxID0gX1NZU19pbm90aWZ5
X2luaXQxCitjb25zdCBTWVNfQ1JFQVQgPSBfU1lTX2NyZWF0Citjb25zdCBTWVNfR0VUUEdJRCA9
IF9TWVNfZ2V0cGdpZAorY29uc3QgU19JUldYTyA9IF9TX0lSV1hPCitjb25zdCBTX0lFWEVDID0g
X1NfSUVYRUMKK2NvbnN0IFNfSVNWVFggPSBfU19JU1ZUWAorY29uc3QgU19JV09USCA9IF9TX0lX
T1RICitjb25zdCBTX0lSR1JQID0gX1NfSVJHUlAKK2NvbnN0IFNfSUZNVCA9IF9TX0lGTVQKK2Nv
bnN0IFNfSVdSSVRFID0gX1NfSVdSSVRFCitjb25zdCBTX0lGTE5LID0gX1NfSUZMTksKK2NvbnN0
IFNfSVJXWEcgPSBfU19JUldYRworY29uc3QgU19JUldYVSA9IF9TX0lSV1hVCitjb25zdCBTX0lX
VVNSID0gX1NfSVdVU1IKK2NvbnN0IFNfSUZSRUcgPSBfU19JRlJFRworY29uc3QgU19JWEdSUCA9
IF9TX0lYR1JQCitjb25zdCBTX0lTVUlEID0gX1NfSVNVSUQKK2NvbnN0IFNfSUZJRk8gPSBfU19J
RklGTworY29uc3QgU19JRlNPQ0sgPSBfU19JRlNPQ0sKK2NvbnN0IFNfSVJPVEggPSBfU19JUk9U
SAorY29uc3QgU19CTEtTSVpFID0gX1NfQkxLU0laRQorY29uc3QgU19JV0dSUCA9IF9TX0lXR1JQ
Citjb25zdCBTX0lYVVNSID0gX1NfSVhVU1IKK2NvbnN0IFNfSVNHSUQgPSBfU19JU0dJRAorY29u
c3QgU19JRkRJUiA9IF9TX0lGRElSCitjb25zdCBTX0lSVVNSID0gX1NfSVJVU1IKK2NvbnN0IFNf
SUZDSFIgPSBfU19JRkNIUgorY29uc3QgU19JWE9USCA9IF9TX0lYT1RICitjb25zdCBTX0lGQkxL
ID0gX1NfSUZCTEsKK2NvbnN0IFNfSVJFQUQgPSBfU19JUkVBRAorY29uc3QgUFJPVF9OT05FID0g
X1BST1RfTk9ORQorY29uc3QgUFJPVF9SRUFEID0gX1BST1RfUkVBRAorY29uc3QgUFJPVF9HUk9X
U0RPV04gPSBfUFJPVF9HUk9XU0RPV04KK2NvbnN0IFBST1RfRVhFQyA9IF9QUk9UX0VYRUMKK2Nv
bnN0IFBST1RfV1JJVEUgPSBfUFJPVF9XUklURQorY29uc3QgUFJPVF9HUk9XU1VQID0gX1BST1Rf
R1JPV1NVUAorY29uc3QgTUFQX0ZJTEUgPSBfTUFQX0ZJTEUKK2NvbnN0IE1BUF9TSEFSRUQgPSBf
TUFQX1NIQVJFRAorY29uc3QgTUFQX1NZTkMgPSBfTUFQX1NZTkMKK2NvbnN0IE1BUF9OT1JFU0VS
VkUgPSBfTUFQX05PUkVTRVJWRQorY29uc3QgTUFQX0hVR0VUTEIgPSBfTUFQX0hVR0VUTEIKK2Nv
bnN0IE1BUF9TVEFDSyA9IF9NQVBfU1RBQ0sKK2NvbnN0IE1BUF9TSEFSRURfVkFMSURBVEUgPSBf
TUFQX1NIQVJFRF9WQUxJREFURQorY29uc3QgTUFQX0dST1dTRE9XTiA9IF9NQVBfR1JPV1NET1dO
Citjb25zdCBNQVBfUE9QVUxBVEUgPSBfTUFQX1BPUFVMQVRFCitjb25zdCBNQVBfMzJCSVQgPSBf
TUFQXzMyQklUCitjb25zdCBNQVBfTE9DS0VEID0gX01BUF9MT0NLRUQKK2NvbnN0IE1BUF9GSVhF
RF9OT1JFUExBQ0UgPSBfTUFQX0ZJWEVEX05PUkVQTEFDRQorY29uc3QgTUFQX0hVR0VfTUFTSyA9
IF9NQVBfSFVHRV9NQVNLCitjb25zdCBNQVBfSFVHRV9TSElGVCA9IF9NQVBfSFVHRV9TSElGVAor
Y29uc3QgTUFQX0FOT05ZTU9VUyA9IF9NQVBfQU5PTllNT1VTCitjb25zdCBNQVBfQU5PTiA9IF9N
QVBfQU5PTgorY29uc3QgTUFQX1BSSVZBVEUgPSBfTUFQX1BSSVZBVEUKK2NvbnN0IE1BUF9FWEVD
VVRBQkxFID0gX01BUF9FWEVDVVRBQkxFCitjb25zdCBNQVBfTk9OQkxPQ0sgPSBfTUFQX05PTkJM
T0NLCitjb25zdCBNQVBfVFlQRSA9IF9NQVBfVFlQRQorY29uc3QgTUFQX0ZJWEVEID0gX01BUF9G
SVhFRAorY29uc3QgTUFQX0RFTllXUklURSA9IF9NQVBfREVOWVdSSVRFCitjb25zdCBNQURWX0RP
TlRGT1JLID0gX01BRFZfRE9OVEZPUksKK2NvbnN0IE1BRFZfV0lMTE5FRUQgPSBfTUFEVl9XSUxM
TkVFRAorY29uc3QgTUFEVl9TRVFVRU5USUFMID0gX01BRFZfU0VRVUVOVElBTAorY29uc3QgTUFE
Vl9LRUVQT05GT1JLID0gX01BRFZfS0VFUE9ORk9SSworY29uc3QgTUFEVl9ET05UTkVFRCA9IF9N
QURWX0RPTlRORUVECitjb25zdCBNQURWX0RPRFVNUCA9IF9NQURWX0RPRFVNUAorY29uc3QgTUFE
Vl9OT0hVR0VQQUdFID0gX01BRFZfTk9IVUdFUEFHRQorY29uc3QgTUFEVl9OT1JNQUwgPSBfTUFE
Vl9OT1JNQUwKK2NvbnN0IE1BRFZfRE9GT1JLID0gX01BRFZfRE9GT1JLCitjb25zdCBNQURWX1dJ
UEVPTkZPUksgPSBfTUFEVl9XSVBFT05GT1JLCitjb25zdCBNQURWX0hVR0VQQUdFID0gX01BRFZf
SFVHRVBBR0UKK2NvbnN0IE1BRFZfSFdQT0lTT04gPSBfTUFEVl9IV1BPSVNPTgorY29uc3QgTUFE
Vl9NRVJHRUFCTEUgPSBfTUFEVl9NRVJHRUFCTEUKK2NvbnN0IE1BRFZfUkVNT1ZFID0gX01BRFZf
UkVNT1ZFCitjb25zdCBNQURWX1JBTkRPTSA9IF9NQURWX1JBTkRPTQorY29uc3QgTUFEVl9GUkVF
ID0gX01BRFZfRlJFRQorY29uc3QgTUFEVl9ET05URFVNUCA9IF9NQURWX0RPTlREVU1QCitjb25z
dCBNQURWX1VOTUVSR0VBQkxFID0gX01BRFZfVU5NRVJHRUFCTEUKK2NvbnN0IE1DTF9GVVRVUkUg
PSBfTUNMX0ZVVFVSRQorY29uc3QgTUNMX0NVUlJFTlQgPSBfTUNMX0NVUlJFTlQKK2NvbnN0IE1D
TF9PTkZBVUxUID0gX01DTF9PTkZBVUxUCitjb25zdCBXTk9IQU5HID0gX1dOT0hBTkcKK2NvbnN0
IFdPUkRfQklUID0gX1dPUkRfQklUCitjb25zdCBXX09LID0gX1dfT0sKK2NvbnN0IFdDSEFSX1dJ
RFRIID0gX1dDSEFSX1dJRFRICitjb25zdCBXSU5UX1dJRFRIID0gX1dJTlRfV0lEVEgKK2NvbnN0
IFdDT05USU5VRUQgPSBfV0NPTlRJTlVFRAorY29uc3QgV0NIQVJfTUFYID0gX1dDSEFSX01BWAor
Y29uc3QgV0FJVF9BTlkgPSBfV0FJVF9BTlkKK2NvbnN0IFdBSVRfTVlQR1JQID0gX1dBSVRfTVlQ
R1JQCitjb25zdCBXRVhJVEVEID0gX1dFWElURUQKK2NvbnN0IFdDT1JFRkxBRyA9IF9XQ09SRUZM
QUcKK2NvbnN0IFdDSEFSX01JTiA9IF9XQ0hBUl9NSU4KK2NvbnN0IFdOT1dBSVQgPSBfV05PV0FJ
VAorY29uc3QgV1VOVFJBQ0VEID0gX1dVTlRSQUNFRAorY29uc3QgV0lOVF9NQVggPSBfV0lOVF9N
QVgKK2NvbnN0IFdJTlRfTUlOID0gX1dJTlRfTUlOCitjb25zdCBXU1RPUFBFRCA9IF9XU1RPUFBF
RAorY29uc3QgV0FMTCA9IF9fX1dBTEwKK2NvbnN0IElQUFJPVE9fVFAgPSBfSVBQUk9UT19UUAor
Y29uc3QgVENQX0NPT0tJRV9UUkFOU0FDVElPTlMgPSBfVENQX0NPT0tJRV9UUkFOU0FDVElPTlMK
K2NvbnN0IElQUFJPVE9fUk9VVElORyA9IF9JUFBST1RPX1JPVVRJTkcKK2NvbnN0IElQX1JGID0g
X0lQX1JGCitjb25zdCBFVEhfUF9QUFBUQUxLID0gX0VUSF9QX1BQUFRBTEsKK2NvbnN0IElQX0RF
RkFVTFRfTVVMVElDQVNUX0xPT1AgPSBfSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUAorY29uc3Qg
VENQX1JFUEFJUl9PUFRJT05TID0gX1RDUF9SRVBBSVJfT1BUSU9OUworY29uc3QgVENQX1NfREFU
QV9JTiA9IF9UQ1BfU19EQVRBX0lOCitjb25zdCBJTl9BVFRSSUIgPSBfSU5fQVRUUklCCitjb25z
dCBTT0NLX0RHUkFNID0gX1NPQ0tfREdSQU0KK2NvbnN0IElQVjZfT1JJR0RTVEFERFIgPSBfSVBW
Nl9PUklHRFNUQUREUgorY29uc3QgU09fVFhUSU1FID0gX1NPX1RYVElNRQorY29uc3QgSVBWNl8y
MjkySE9QTElNSVQgPSBfSVBWNl8yMjkySE9QTElNSVQKK2NvbnN0IElQUFJPVE9fSVBWNiA9IF9J
UFBST1RPX0lQVjYKK2NvbnN0IFRDUF9TWU5fU0VOVCA9IF9UQ1BfU1lOX1NFTlQKK2NvbnN0IEFS
UEhSRF9JRUVFODAyMTFfUFJJU00gPSBfQVJQSFJEX0lFRUU4MDIxMV9QUklTTQorY29uc3QgRVRI
X1BfODAyMUFEID0gX0VUSF9QXzgwMjFBRAorY29uc3QgRVRIX1BfODAyMUFIID0gX0VUSF9QXzgw
MjFBSAorY29uc3QgRVRIX1BfQVJDTkVUID0gX0VUSF9QX0FSQ05FVAorY29uc3QgSVBQUk9UT19O
T05FID0gX0lQUFJPVE9fTk9ORQorY29uc3QgVENQX0NPT0tJRV9PVVRfTkVWRVIgPSBfVENQX0NP
T0tJRV9PVVRfTkVWRVIKK2NvbnN0IFNPTF9TT0NLRVQgPSBfU09MX1NPQ0tFVAorY29uc3QgSVBf
Tk9ERUZSQUcgPSBfSVBfTk9ERUZSQUcKK2NvbnN0IElQUFJPVE9fVURQTElURSA9IF9JUFBST1RP
X1VEUExJVEUKK2NvbnN0IFRDUF9MSVNURU4gPSBfVENQX0xJU1RFTgorY29uc3QgU09fU05EVElN
RU8gPSBfU09fU05EVElNRU8KK2NvbnN0IEFGX1VOU1BFQyA9IF9BRl9VTlNQRUMKK2NvbnN0IEFS
UEhSRF9GQ1BMID0gX0FSUEhSRF9GQ1BMCitjb25zdCBBUlBIUkRfRkNQUCA9IF9BUlBIUkRfRkNQ
UAorY29uc3QgSVBfQUREX01FTUJFUlNISVAgPSBfSVBfQUREX01FTUJFUlNISVAKK2NvbnN0IEVU
SF9QX1RSQUlMRVIgPSBfRVRIX1BfVFJBSUxFUgorY29uc3QgU09MX1RDUCA9IF9TT0xfVENQCitj
b25zdCBTT19DTlhfQURWSUNFID0gX1NPX0NOWF9BRFZJQ0UKK2NvbnN0IFNPTF9CTFVFVE9PVEgg
PSBfU09MX0JMVUVUT09USAorY29uc3QgQVJQSFJEX0VUSEVSID0gX0FSUEhSRF9FVEhFUgorY29u
c3QgRVRIX1BfRElBRyA9IF9FVEhfUF9ESUFHCitjb25zdCBBUlBIUkRfSU5GSU5JQkFORCA9IF9B
UlBIUkRfSU5GSU5JQkFORAorY29uc3QgSVBfVFJBTlNQQVJFTlQgPSBfSVBfVFJBTlNQQVJFTlQK
K2NvbnN0IEVUSF9QX0xPT1BCQUNLID0gX0VUSF9QX0xPT1BCQUNLCitjb25zdCBFVEhfUF9DVVNU
ID0gX0VUSF9QX0NVU1QKK2NvbnN0IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVAgPSBfQVJQSFJE
X0lFRUU4MDIxMV9SQURJT1RBUAorY29uc3QgQVJQSFJEX1ZPSUQgPSBfQVJQSFJEX1ZPSUQKK2Nv
bnN0IElQVjZfTVVMVElDQVNUX0xPT1AgPSBfSVBWNl9NVUxUSUNBU1RfTE9PUAorY29uc3QgU09f
UFJJT1JJVFkgPSBfU09fUFJJT1JJVFkKK2NvbnN0IFNPX1BST1RPQ09MID0gX1NPX1BST1RPQ09M
Citjb25zdCBUQ1BfVEhJTl9EVVBBQ0sgPSBfVENQX1RISU5fRFVQQUNLCitjb25zdCBTT19BVFRB
Q0hfUkVVU0VQT1JUX0VCUEYgPSBfU09fQVRUQUNIX1JFVVNFUE9SVF9FQlBGCitjb25zdCBJTl9B
TExfRVZFTlRTID0gX0lOX0FMTF9FVkVOVFMKK2NvbnN0IFNPX1BFRVJOQU1FID0gX1NPX1BFRVJO
QU1FCitjb25zdCBTT19NRU1JTkZPID0gX1NPX01FTUlORk8KK2NvbnN0IEFSUEhSRF9ISVBQSSA9
IF9BUlBIUkRfSElQUEkKK2NvbnN0IEFGX1JPVVRFID0gX0FGX1JPVVRFCitjb25zdCBJUF9NVUxU
SUNBU1RfTE9PUCA9IF9JUF9NVUxUSUNBU1RfTE9PUAorY29uc3QgRVRIX1BfQVRNRkFURSA9IF9F
VEhfUF9BVE1GQVRFCitjb25zdCBJUFY2X1Y2T05MWSA9IF9JUFY2X1Y2T05MWQorY29uc3QgQVJQ
SFJEX1NMSVA2ID0gX0FSUEhSRF9TTElQNgorY29uc3QgSU5fQ0xBU1NDX0hPU1QgPSBfSU5fQ0xB
U1NDX0hPU1QKK2NvbnN0IElQX1JFQ1ZGUkFHU0laRSA9IF9JUF9SRUNWRlJBR1NJWkUKK2NvbnN0
IFNPTF9YMjUgPSBfU09MX1gyNQorY29uc3QgRVRIX1BfTkNTSSA9IF9FVEhfUF9OQ1NJCitjb25z
dCBUQ1BfQ0xPU0lORyA9IF9UQ1BfQ0xPU0lORworY29uc3QgSVBfTVNGSUxURVIgPSBfSVBfTVNG
SUxURVIKK2NvbnN0IFRDUF9DT05HRVNUSU9OID0gX1RDUF9DT05HRVNUSU9OCitjb25zdCBBRl9S
RFMgPSBfQUZfUkRTCitjb25zdCBBRl9JRUVFODAyMTU0ID0gX0FGX0lFRUU4MDIxNTQKK2NvbnN0
IFNPX1RJTUVTVEFNUElORyA9IF9TT19USU1FU1RBTVBJTkcKK2NvbnN0IFRDUF9DT09LSUVfTUFY
ID0gX1RDUF9DT09LSUVfTUFYCitjb25zdCBTT19ERVRBQ0hfQlBGID0gX1NPX0RFVEFDSF9CUEYK
K2NvbnN0IEFSUEhSRF9BU0ggPSBfQVJQSFJEX0FTSAorY29uc3QgSVBQUk9UT19GUkFHTUVOVCA9
IF9JUFBST1RPX0ZSQUdNRU5UCitjb25zdCBJUF9CSU5EX0FERFJFU1NfTk9fUE9SVCA9IF9JUF9C
SU5EX0FERFJFU1NfTk9fUE9SVAorY29uc3QgSVBfUE1UVURJU0NfV0FOVCA9IF9JUF9QTVRVRElT
Q19XQU5UCitjb25zdCBTT0xfVExTID0gX1NPTF9UTFMKK2NvbnN0IEVUSF9QXzgwMjFRID0gX0VU
SF9QXzgwMjFRCitjb25zdCBJUF9QTVRVRElTQ19JTlRFUkZBQ0UgPSBfSVBfUE1UVURJU0NfSU5U
RVJGQUNFCitjb25zdCBTT0xfSUNNUFY2ID0gX1NPTF9JQ01QVjYKK2NvbnN0IFRDUF9NU1MgPSBf
VENQX01TUworY29uc3QgRVRIX1BfODAyMjEgPSBfRVRIX1BfODAyMjEKK2NvbnN0IElOX1VOTU9V
TlQgPSBfSU5fVU5NT1VOVAorY29uc3QgRVRIX1BfUFBQX01QID0gX0VUSF9QX1BQUF9NUAorY29u
c3QgQUZfTE9DQUwgPSBfQUZfTE9DQUwKK2NvbnN0IFNPQ0tfUkFXID0gX1NPQ0tfUkFXCitjb25z
dCBUQ1BfU0FWRURfU1lOID0gX1RDUF9TQVZFRF9TWU4KK2NvbnN0IEFGX1ZTT0NLID0gX0FGX1ZT
T0NLCitjb25zdCBJUF9SRUNWRVJSID0gX0lQX1JFQ1ZFUlIKK2NvbnN0IFRDUF9TX0RBVEFfT1VU
ID0gX1RDUF9TX0RBVEFfT1VUCitjb25zdCBJUFBST1RPX0VOQ0FQID0gX0lQUFJPVE9fRU5DQVAK
K2NvbnN0IElQVjZfMjI5MkhPUE9QVFMgPSBfSVBWNl8yMjkySE9QT1BUUworY29uc3QgRVRIX1Bf
TE9DQUxUQUxLID0gX0VUSF9QX0xPQ0FMVEFMSworY29uc3QgVENQX0xJTkdFUjIgPSBfVENQX0xJ
TkdFUjIKK2NvbnN0IElQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCA9IF9JUF9ERUZBVUxUX01VTFRJ
Q0FTVF9UVEwKK2NvbnN0IElQUFJPVE9fUkFXID0gX0lQUFJPVE9fUkFXCitjb25zdCBJUFY2X1BN
VFVESVNDX0RPID0gX0lQVjZfUE1UVURJU0NfRE8KK2NvbnN0IEVUSF9QX0VSU1BBTjIgPSBfRVRI
X1BfRVJTUEFOMgorY29uc3QgSU5fT05FU0hPVCA9IF9JTl9PTkVTSE9UCitjb25zdCBFVEhfUF9F
RFNBID0gX0VUSF9QX0VEU0EKK2NvbnN0IElQVjZfQUREX01FTUJFUlNISVAgPSBfSVBWNl9BRERf
TUVNQkVSU0hJUAorY29uc3QgSVBWNl9QTVRVRElTQ19QUk9CRSA9IF9JUFY2X1BNVFVESVNDX1BS
T0JFCitjb25zdCBUQ1BfTUQ1U0lHX0ZMQUdfUFJFRklYID0gX1RDUF9NRDVTSUdfRkxBR19QUkVG
SVgKK2NvbnN0IEFSUEhSRF9BREFQVCA9IF9BUlBIUkRfQURBUFQKK2NvbnN0IFRDUF9NQVhfV0lO
U0hJRlQgPSBfVENQX01BWF9XSU5TSElGVAorY29uc3QgSVBQUk9UT19JR01QID0gX0lQUFJPVE9f
SUdNUAorY29uc3QgSVBfTUFYX01FTUJFUlNISVBTID0gX0lQX01BWF9NRU1CRVJTSElQUworY29u
c3QgQUZfQVgyNSA9IF9BRl9BWDI1Citjb25zdCBBUlBIUkRfRVVJNjQgPSBfQVJQSFJEX0VVSTY0
Citjb25zdCBTT19ET01BSU4gPSBfU09fRE9NQUlOCitjb25zdCBJUFY2X1BNVFVESVNDX1dBTlQg
PSBfSVBWNl9QTVRVRElTQ19XQU5UCitjb25zdCBJTl9NQVNLX0FERCA9IF9JTl9NQVNLX0FERAor
Y29uc3QgVENQX01BWFNFRyA9IF9UQ1BfTUFYU0VHCitjb25zdCBJUFY2X1JUSERSX1NUUklDVCA9
IF9JUFY2X1JUSERSX1NUUklDVAorY29uc3QgSVBfUE1UVURJU0NfUFJPQkUgPSBfSVBfUE1UVURJ
U0NfUFJPQkUKK2NvbnN0IElQVjZfVU5JQ0FTVF9JRiA9IF9JUFY2X1VOSUNBU1RfSUYKK2NvbnN0
IEVUSF9QX0lFRUU4MDIxNTQgPSBfRVRIX1BfSUVFRTgwMjE1NAorY29uc3QgQUZfSU5FVDYgPSBf
QUZfSU5FVDYKK2NvbnN0IEVUSF9QX0xPT1AgPSBfRVRIX1BfTE9PUAorY29uc3QgU09fWkVST0NP
UFkgPSBfU09fWkVST0NPUFkKK2NvbnN0IElQVjZfUE1UVURJU0NfRE9OVCA9IF9JUFY2X1BNVFVE
SVNDX0RPTlQKK2NvbnN0IEFSUEhSRF9ORVRST00gPSBfQVJQSFJEX05FVFJPTQorY29uc3QgVENQ
X01BWFdJTiA9IF9UQ1BfTUFYV0lOCitjb25zdCBUQ1BfRkFTVE9QRU5fS0VZID0gX1RDUF9GQVNU
T1BFTl9LRVkKK2NvbnN0IEVUSF9QX0ROQV9ETCA9IF9FVEhfUF9ETkFfREwKK2NvbnN0IEFSUEhS
RF9YMjUgPSBfQVJQSFJEX1gyNQorY29uc3QgQVJQSFJEX0VDT05FVCA9IF9BUlBIUkRfRUNPTkVU
Citjb25zdCBTT19XSUZJX1NUQVRVUyA9IF9TT19XSUZJX1NUQVRVUworY29uc3QgQVJQSFJEX0ZS
QUQgPSBfQVJQSFJEX0ZSQUQKK2NvbnN0IElQUFJPVE9fRENDUCA9IF9JUFBST1RPX0RDQ1AKK2Nv
bnN0IFNPTF9JUkRBID0gX1NPTF9JUkRBCitjb25zdCBBRl9QQUNLRVQgPSBfQUZfUEFDS0VUCitj
b25zdCBTT0xfTkVUQkVVSSA9IF9TT0xfTkVUQkVVSQorY29uc3QgVENQX1FVSUNLQUNLID0gX1RD
UF9RVUlDS0FDSworY29uc3QgVENQX0ZBU1RPUEVOX05PX0NPT0tJRSA9IF9UQ1BfRkFTVE9QRU5f
Tk9fQ09PS0lFCitjb25zdCBBRl9LRVkgPSBfQUZfS0VZCitjb25zdCBJUFY2X1RDTEFTUyA9IF9J
UFY2X1RDTEFTUworY29uc3QgQUZfWDI1ID0gX0FGX1gyNQorY29uc3QgQVJQSFJEX0NTTElQID0g
X0FSUEhSRF9DU0xJUAorY29uc3QgRVRIX1BfTU9CSVRFWCA9IF9FVEhfUF9NT0JJVEVYCitjb25z
dCBBUlBIUkRfQ1NMSVA2ID0gX0FSUEhSRF9DU0xJUDYKK2NvbnN0IEFSUEhSRF9MQVBCID0gX0FS
UEhSRF9MQVBCCitjb25zdCBBRl9LQ00gPSBfQUZfS0NNCitjb25zdCBBUlBIUkRfU0xJUCA9IF9B
UlBIUkRfU0xJUAorY29uc3QgU09fQVRUQUNIX0ZJTFRFUiA9IF9TT19BVFRBQ0hfRklMVEVSCitj
b25zdCBFVEhfUF9IU1IgPSBfRVRIX1BfSFNSCitjb25zdCBBUlBIUkRfUk9TRSA9IF9BUlBIUkRf
Uk9TRQorY29uc3QgSU5fQ0xBU1NCX05TSElGVCA9IF9JTl9DTEFTU0JfTlNISUZUCitjb25zdCBJ
UFY2X1hGUk1fUE9MSUNZID0gX0lQVjZfWEZSTV9QT0xJQ1kKK2NvbnN0IEFGX0lQWCA9IF9BRl9J
UFgKK2NvbnN0IFNPX05PX0NIRUNLID0gX1NPX05PX0NIRUNLCitjb25zdCBBUlBIUkRfTE9DQUxU
TEsgPSBfQVJQSFJEX0xPQ0FMVExLCitjb25zdCBUQ1BfQ0FfQ1dSID0gX1RDUF9DQV9DV1IKK2Nv
bnN0IEFGX1VOSVggPSBfQUZfVU5JWAorY29uc3QgRVRIX1BfSERMQyA9IF9FVEhfUF9IRExDCitj
b25zdCBBUlBIUkRfSFdYMjUgPSBfQVJQSFJEX0hXWDI1Citjb25zdCBJUF9DSEVDS1NVTSA9IF9J
UF9DSEVDS1NVTQorY29uc3QgU09fTk9GQ1MgPSBfU09fTk9GQ1MKK2NvbnN0IElQX1BLVE9QVElP
TlMgPSBfSVBfUEtUT1BUSU9OUworY29uc3QgVENQX1FVRVVFU19OUiA9IF9UQ1BfUVVFVUVTX05S
Citjb25zdCBTT0xfUE5QSVBFID0gX1NPTF9QTlBJUEUKK2NvbnN0IEFSUEhSRF9GQ0ZBQlJJQyA9
IF9BUlBIUkRfRkNGQUJSSUMKK2NvbnN0IFRDUF9TQVZFX1NZTiA9IF9UQ1BfU0FWRV9TWU4KK2Nv
bnN0IEFGX0NBSUYgPSBfQUZfQ0FJRgorY29uc3QgU09MX0lQVjYgPSBfU09MX0lQVjYKK2NvbnN0
IElQVjZfUkVDVk9SSUdEU1RBRERSID0gX0lQVjZfUkVDVk9SSUdEU1RBRERSCitjb25zdCBFVEhf
UF9BVE1NUE9BID0gX0VUSF9QX0FUTU1QT0EKK2NvbnN0IFNPX09PQklOTElORSA9IF9TT19PT0JJ
TkxJTkUKK2NvbnN0IElQVjZfQVVUT0ZMT1dMQUJFTCA9IF9JUFY2X0FVVE9GTE9XTEFCRUwKK2Nv
bnN0IElQX1BNVFVESVNDX0RPID0gX0lQX1BNVFVESVNDX0RPCitjb25zdCBJUF9QS1RJTkZPID0g
X0lQX1BLVElORk8KK2NvbnN0IFNPTF9USVBDID0gX1NPTF9USVBDCitjb25zdCBBUlBIUkRfSUVF
RTgwMjE1NCA9IF9BUlBIUkRfSUVFRTgwMjE1NAorY29uc3QgSU5fTU9WRV9TRUxGID0gX0lOX01P
VkVfU0VMRgorY29uc3QgRVRIX1BfTEFUID0gX0VUSF9QX0xBVAorY29uc3QgQUZfUUlQQ1JUUiA9
IF9BRl9RSVBDUlRSCitjb25zdCBTT19BQ0NFUFRDT05OID0gX1NPX0FDQ0VQVENPTk4KK2NvbnN0
IElQX01VTFRJQ0FTVF9UVEwgPSBfSVBfTVVMVElDQVNUX1RUTAorY29uc3QgU09DS19TRVFQQUNL
RVQgPSBfU09DS19TRVFQQUNLRVQKK2NvbnN0IFRDUF9TWU5DTlQgPSBfVENQX1NZTkNOVAorY29u
c3QgRVRIX1BfUFJFQVVUSCA9IF9FVEhfUF9QUkVBVVRICitjb25zdCBJUFY2XzIyOTJQS1RJTkZP
ID0gX0lQVjZfMjI5MlBLVElORk8KK2NvbnN0IEVUSF9QX0ZDT0UgPSBfRVRIX1BfRkNPRQorY29u
c3QgRVRIX1BfMTU4OCA9IF9FVEhfUF8xNTg4Citjb25zdCBBUlBIUkRfSVJEQSA9IF9BUlBIUkRf
SVJEQQorY29uc3QgSVBWNl9SRUNWUEFUSE1UVSA9IF9JUFY2X1JFQ1ZQQVRITVRVCitjb25zdCBJ
UF9SRVRPUFRTID0gX0lQX1JFVE9QVFMKK2NvbnN0IElQX01VTFRJQ0FTVF9JRiA9IF9JUF9NVUxU
SUNBU1RfSUYKK2NvbnN0IFNPX1JDVlRJTUVPID0gX1NPX1JDVlRJTUVPCitjb25zdCBJUF9UT1Mg
PSBfSVBfVE9TCitjb25zdCBUQ1BfTUQ1U0lHID0gX1RDUF9NRDVTSUcKK2NvbnN0IElQVjZfUlRI
RFJEU1RPUFRTID0gX0lQVjZfUlRIRFJEU1RPUFRTCitjb25zdCBTT0xfQ0FJRiA9IF9TT0xfQ0FJ
RgorY29uc3QgRVRIX1BfRE5BX1JDID0gX0VUSF9QX0ROQV9SQworY29uc3QgRVRIX1BfRE5BX1JU
ID0gX0VUSF9QX0ROQV9SVAorY29uc3QgRVRIX1BfQ0FJRiA9IF9FVEhfUF9DQUlGCitjb25zdCBJ
UF9SRUNWVE9TID0gX0lQX1JFQ1ZUT1MKK2NvbnN0IEVUSF9UTEVOID0gX0VUSF9UTEVOCitjb25z
dCBJUFY2X05FWFRIT1AgPSBfSVBWNl9ORVhUSE9QCitjb25zdCBBRl9BVE1TVkMgPSBfQUZfQVRN
U1ZDCitjb25zdCBBUlBIUkRfSVBHUkUgPSBfQVJQSFJEX0lQR1JFCitjb25zdCBJTl9DTEFTU0Ff
TkVUID0gX0lOX0NMQVNTQV9ORVQKK2NvbnN0IElQVjZfTEVBVkVfQU5ZQ0FTVCA9IF9JUFY2X0xF
QVZFX0FOWUNBU1QKK2NvbnN0IEFGX0lTRE4gPSBfQUZfSVNETgorY29uc3QgQVJQSFJEX05PTkUg
PSBfQVJQSFJEX05PTkUKK2NvbnN0IEFSUEhSRF9CSUYgPSBfQVJQSFJEX0JJRgorY29uc3QgSVBW
Nl8yMjkyRFNUT1BUUyA9IF9JUFY2XzIyOTJEU1RPUFRTCitjb25zdCBUQ1BfQ0xPU0UgPSBfVENQ
X0NMT1NFCitjb25zdCBTT19BVFRBQ0hfQlBGID0gX1NPX0FUVEFDSF9CUEYKK2NvbnN0IEFSUEhS
RF9DSEFPUyA9IF9BUlBIUkRfQ0hBT1MKK2NvbnN0IEVUSF9QX0JBVE1BTiA9IF9FVEhfUF9CQVRN
QU4KK2NvbnN0IElQX1RUTCA9IF9JUF9UVEwKK2NvbnN0IEFGX05FVFJPTSA9IF9BRl9ORVRST00K
K2NvbnN0IEVUSF9QX1RSXzgwMl8yID0gX0VUSF9QX1RSXzgwMl8yCitjb25zdCBFVEhfUF9BTEwg
PSBfRVRIX1BfQUxMCitjb25zdCBFVEhfUF9DQU4gPSBfRVRIX1BfQ0FOCitjb25zdCBFVEhfUF9N
UExTX01DID0gX0VUSF9QX01QTFNfTUMKK2NvbnN0IFNPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJB
TlNQT1JUID0gX1NPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fVFJBTlNQT1JUCitjb25zdCBFVEhfUF9E
U0EgPSBfRVRIX1BfRFNBCitjb25zdCBJUF9SRUNWVFRMID0gX0lQX1JFQ1ZUVEwKK2NvbnN0IEFG
X0VDT05FVCA9IF9BRl9FQ09ORVQKK2NvbnN0IEVUSF9QX0FPRSA9IF9FVEhfUF9BT0UKK2NvbnN0
IElQX1hGUk1fUE9MSUNZID0gX0lQX1hGUk1fUE9MSUNZCitjb25zdCBUQ1BfRklOX1dBSVQyID0g
X1RDUF9GSU5fV0FJVDIKK2NvbnN0IEVUSF9QX1hEU0EgPSBfRVRIX1BfWERTQQorY29uc3QgSVBf
UE1UVURJU0MgPSBfSVBfUE1UVURJU0MKK2NvbnN0IFRDUF9NU1NfREVGQVVMVCA9IF9UQ1BfTVNT
X0RFRkFVTFQKK2NvbnN0IEFGX0NBTiA9IF9BRl9DQU4KK2NvbnN0IFNPX1RJTUVTVEFNUCA9IF9T
T19USU1FU1RBTVAKK2NvbnN0IFNPX0RPTlRST1VURSA9IF9TT19ET05UUk9VVEUKK2NvbnN0IFRD
UF9TRU5EX1FVRVVFID0gX1RDUF9TRU5EX1FVRVVFCitjb25zdCBTT19QQVNTU0VDID0gX1NPX1BB
U1NTRUMKK2NvbnN0IFRDUF9OT1RTRU5UX0xPV0FUID0gX1RDUF9OT1RTRU5UX0xPV0FUCitjb25z
dCBTT0xfRENDUCA9IF9TT0xfRENDUAorY29uc3QgRVRIX1BfQVJQID0gX0VUSF9QX0FSUAorY29u
c3QgU09fUEVFUkNSRUQgPSBfU09fUEVFUkNSRUQKK2NvbnN0IElQVjZfSk9JTl9BTllDQVNUID0g
X0lQVjZfSk9JTl9BTllDQVNUCitjb25zdCBJUF9ST1VURVJfQUxFUlQgPSBfSVBfUk9VVEVSX0FM
RVJUCitjb25zdCBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTiA9IF9TT19TRUNVUklUWV9BVVRI
RU5USUNBVElPTgorY29uc3QgSVBWNl9NVUxUSUNBU1RfSUYgPSBfSVBWNl9NVUxUSUNBU1RfSUYK
K2NvbnN0IFNPX01BWF9QQUNJTkdfUkFURSA9IF9TT19NQVhfUEFDSU5HX1JBVEUKK2NvbnN0IEFS
UEhSRF9JRUVFODAyMTU0X1BIWSA9IF9BUlBIUkRfSUVFRTgwMjE1NF9QSFkKK2NvbnN0IEFSUEhS
RF9ETENJID0gX0FSUEhSRF9ETENJCitjb25zdCBFVEhfUF9GSVAgPSBfRVRIX1BfRklQCitjb25z
dCBFVEhfUF9XQ0NQID0gX0VUSF9QX1dDQ1AKK2NvbnN0IEFSUEhSRF9SQVdIRExDID0gX0FSUEhS
RF9SQVdIRExDCitjb25zdCBBRl9JVUNWID0gX0FGX0lVQ1YKK2NvbnN0IFRDUF9GQVNUT1BFTl9D
T05ORUNUID0gX1RDUF9GQVNUT1BFTl9DT05ORUNUCitjb25zdCBJUFY2X1JFQ1ZIT1BPUFRTID0g
X0lQVjZfUkVDVkhPUE9QVFMKK2NvbnN0IEVUSF9QX01QTFNfVUMgPSBfRVRIX1BfTVBMU19VQwor
Y29uc3QgSVBfQkxPQ0tfU09VUkNFID0gX0lQX0JMT0NLX1NPVVJDRQorY29uc3QgVENQX01TU19E
RVNJUkVEID0gX1RDUF9NU1NfREVTSVJFRAorY29uc3QgU09fQlNEQ09NUEFUID0gX1NPX0JTRENP
TVBBVAorY29uc3QgQUZfTUFYID0gX0FGX01BWAorY29uc3QgRVRIX1BfSUVFRVBVUEFUID0gX0VU
SF9QX0lFRUVQVVBBVAorY29uc3QgSVBQUk9UT19FR1AgPSBfSVBQUk9UT19FR1AKK2NvbnN0IElQ
X01BWFBBQ0tFVCA9IF9JUF9NQVhQQUNLRVQKK2NvbnN0IEVUSF9QX1gyNSA9IF9FVEhfUF9YMjUK
K2NvbnN0IEVUSF9QX0FGX0lVQ1YgPSBfRVRIX1BfQUZfSVVDVgorY29uc3QgU09MX0RFQ05FVCA9
IF9TT0xfREVDTkVUCitjb25zdCBTT19ERVRBQ0hfRklMVEVSID0gX1NPX0RFVEFDSF9GSUxURVIK
K2NvbnN0IElOX0NMQVNTQl9NQVggPSBfSU5fQ0xBU1NCX01BWAorY29uc3QgSVBfSERSSU5DTCA9
IF9JUF9IRFJJTkNMCitjb25zdCBUQ1BfQ0FfUmVjb3ZlcnkgPSBfVENQX0NBX1JlY292ZXJ5Citj
b25zdCBJTl9DTEFTU0FfSE9TVCA9IF9JTl9DTEFTU0FfSE9TVAorY29uc3QgSVBWNl9QQVRITVRV
ID0gX0lQVjZfUEFUSE1UVQorY29uc3QgU09DS19SRE0gPSBfU09DS19SRE0KK2NvbnN0IEVUSF9Q
X0lQID0gX0VUSF9QX0lQCitjb25zdCBUQ1BfTk9fUVVFVUUgPSBfVENQX05PX1FVRVVFCitjb25z
dCBJTl9ET05UX0ZPTExPVyA9IF9JTl9ET05UX0ZPTExPVworY29uc3QgSVBWNl9NSU5IT1BDT1VO
VCA9IF9JUFY2X01JTkhPUENPVU5UCitjb25zdCBJUFY2X1BNVFVESVNDX0lOVEVSRkFDRSA9IF9J
UFY2X1BNVFVESVNDX0lOVEVSRkFDRQorY29uc3QgSVBWNl9NVFVfRElTQ09WRVIgPSBfSVBWNl9N
VFVfRElTQ09WRVIKK2NvbnN0IEFSUEhSRF9GRERJID0gX0FSUEhSRF9GRERJCitjb25zdCBJUFY2
X0FERFJfUFJFRkVSRU5DRVMgPSBfSVBWNl9BRERSX1BSRUZFUkVOQ0VTCitjb25zdCBFVEhfUF84
MDJfMiA9IF9FVEhfUF84MDJfMgorY29uc3QgRVRIX1BfODAyXzMgPSBfRVRIX1BfODAyXzMKK2Nv
bnN0IFNPX0VSUk9SID0gX1NPX0VSUk9SCitjb25zdCBJUFY2X0hPUExJTUlUID0gX0lQVjZfSE9Q
TElNSVQKK2NvbnN0IEVUSF9QX1BBRSA9IF9FVEhfUF9QQUUKK2NvbnN0IElQX01JTlRUTCA9IF9J
UF9NSU5UVEwKK2NvbnN0IEVUSF9QX1BBVVNFID0gX0VUSF9QX1BBVVNFCitjb25zdCBJTl9DTEFT
U0JfTkVUID0gX0lOX0NMQVNTQl9ORVQKK2NvbnN0IFNPX0RFQlVHID0gX1NPX0RFQlVHCitjb25z
dCBJUFBST1RPX1VEUCA9IF9JUFBST1RPX1VEUAorY29uc3QgQVJQSFJEX1BQUCA9IF9BUlBIUkRf
UFBQCitjb25zdCBBRl9JQiA9IF9BRl9JQgorY29uc3QgQUZfSVJEQSA9IF9BRl9JUkRBCitjb25z
dCBJUF9NU1MgPSBfSVBfTVNTCitjb25zdCBJUFY2X0RPTlRGUkFHID0gX0lQVjZfRE9OVEZSQUcK
K2NvbnN0IElQUFJPVE9fU0NUUCA9IF9JUFBST1RPX1NDVFAKK2NvbnN0IElQX09GRk1BU0sgPSBf
SVBfT0ZGTUFTSworY29uc3QgSVBfUkVDVk9SSUdEU1RBRERSID0gX0lQX1JFQ1ZPUklHRFNUQURE
UgorY29uc3QgRVRIX1BfTUFDU0VDID0gX0VUSF9QX01BQ1NFQworY29uc3QgVENQX0NPT0tJRV9Q
QUlSX1NJWkUgPSBfVENQX0NPT0tJRV9QQUlSX1NJWkUKK2NvbnN0IEVUSF9QX1RFQiA9IF9FVEhf
UF9URUIKK2NvbnN0IFRDUF9SRUNWX1FVRVVFID0gX1RDUF9SRUNWX1FVRVVFCitjb25zdCBBRl9B
UFBMRVRBTEsgPSBfQUZfQVBQTEVUQUxLCitjb25zdCBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05F
VFdPUksgPSBfU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLCitjb25zdCBJTl9DTEFTU0Nf
TlNISUZUID0gX0lOX0NMQVNTQ19OU0hJRlQKK2NvbnN0IEVUSF9QX1FJTlExID0gX0VUSF9QX1FJ
TlExCitjb25zdCBFVEhfUF9RSU5RMiA9IF9FVEhfUF9RSU5RMgorY29uc3QgRVRIX1BfUUlOUTMg
PSBfRVRIX1BfUUlOUTMKK2NvbnN0IEFGX0FUTVBWQyA9IF9BRl9BVE1QVkMKK2NvbnN0IElQUFJP
VE9fRVNQID0gX0lQUFJPVE9fRVNQCitjb25zdCBFVEhfUF9OU0ggPSBfRVRIX1BfTlNICitjb25z
dCBFVEhfUF9DQU5GRCA9IF9FVEhfUF9DQU5GRAorY29uc3QgQUZfREVDbmV0ID0gX0FGX0RFQ25l
dAorY29uc3QgRVRIX1BfTElOS19DVEwgPSBfRVRIX1BfTElOS19DVEwKK2NvbnN0IElQX09QVElP
TlMgPSBfSVBfT1BUSU9OUworY29uc3QgSVBQUk9UT19IT1BPUFRTID0gX0lQUFJPVE9fSE9QT1BU
UworY29uc3QgU09fU05ETE9XQVQgPSBfU09fU05ETE9XQVQKK2NvbnN0IFNPX1RJTUVTVEFNUE5T
ID0gX1NPX1RJTUVTVEFNUE5TCitjb25zdCBTT19CSU5EVE9ERVZJQ0UgPSBfU09fQklORFRPREVW
SUNFCitjb25zdCBTT0NLX0NMT0VYRUMgPSBfU09DS19DTE9FWEVDCitjb25zdCBFVEhfUF9TTkFQ
ID0gX0VUSF9QX1NOQVAKK2NvbnN0IElQX1VOQkxPQ0tfU09VUkNFID0gX0lQX1VOQkxPQ0tfU09V
UkNFCitjb25zdCBTT19QQVNTQ1JFRCA9IF9TT19QQVNTQ1JFRAorY29uc3QgRVRIX1BfV0FOX1BQ
UCA9IF9FVEhfUF9XQU5fUFBQCitjb25zdCBJTl9FWENMX1VOTElOSyA9IF9JTl9FWENMX1VOTElO
SworY29uc3QgSVBWNl9SWEhPUE9QVFMgPSBfSVBWNl9SWEhPUE9QVFMKK2NvbnN0IElQVjZfUkVD
VkZSQUdTSVpFID0gX0lQVjZfUkVDVkZSQUdTSVpFCitjb25zdCBBRl9QSE9ORVQgPSBfQUZfUEhP
TkVUCitjb25zdCBFVEhfRkNTX0xFTiA9IF9FVEhfRkNTX0xFTgorY29uc3QgSVBWNl9IT1BPUFRT
ID0gX0lQVjZfSE9QT1BUUworY29uc3QgVENQX1FVRVVFX1NFUSA9IF9UQ1BfUVVFVUVfU0VRCitj
b25zdCBJUFY2X1JUSERSID0gX0lQVjZfUlRIRFIKK2NvbnN0IElOX01PVkUgPSBfSU5fTU9WRQor
Y29uc3QgQVJQSFJEX0lQRERQID0gX0FSUEhSRF9JUEREUAorY29uc3QgSVBWNl9SRUNWRVJSID0g
X0lQVjZfUkVDVkVSUgorY29uc3QgSVBQUk9UT19JQ01QID0gX0lQUFJPVE9fSUNNUAorY29uc3Qg
SVBQUk9UT19QVVAgPSBfSVBQUk9UT19QVVAKK2NvbnN0IEVUSF9QX1NMT1cgPSBfRVRIX1BfU0xP
VworY29uc3QgRVRIX1BfRUNPTkVUID0gX0VUSF9QX0VDT05FVAorY29uc3QgSVBWNl9SRUNWUEtU
SU5GTyA9IF9JUFY2X1JFQ1ZQS1RJTkZPCitjb25zdCBUQ1BfTk9ERUxBWSA9IF9UQ1BfTk9ERUxB
WQorY29uc3QgSVBWNl9EUk9QX01FTUJFUlNISVAgPSBfSVBWNl9EUk9QX01FTUJFUlNISVAKK2Nv
bnN0IEVUSF9QX0lSREEgPSBfRVRIX1BfSVJEQQorY29uc3QgVENQX0lORk8gPSBfVENQX0lORk8K
K2NvbnN0IFRDUF9GSU5fV0FJVDEgPSBfVENQX0ZJTl9XQUlUMQorY29uc3QgU09MX0lQID0gX1NP
TF9JUAorY29uc3QgSU5fTE9PUEJBQ0tORVQgPSBfSU5fTE9PUEJBQ0tORVQKK2NvbnN0IFNPTF9B
QUwgPSBfU09MX0FBTAorY29uc3QgSVBQUk9UT19JRFAgPSBfSVBQUk9UT19JRFAKK2NvbnN0IEFG
X0lORVQgPSBfQUZfSU5FVAorY29uc3QgVENQX1JFUEFJUl9RVUVVRSA9IF9UQ1BfUkVQQUlSX1FV
RVVFCitjb25zdCBTT19HRVRfRklMVEVSID0gX1NPX0dFVF9GSUxURVIKK2NvbnN0IFNPX0NPT0tJ
RSA9IF9TT19DT09LSUUKK2NvbnN0IFNPX0FUVEFDSF9SRVVTRVBPUlRfQ0JQRiA9IF9TT19BVFRB
Q0hfUkVVU0VQT1JUX0NCUEYKK2NvbnN0IElQUFJPVE9fR1JFID0gX0lQUFJPVE9fR1JFCitjb25z
dCBJUFBST1RPX1RDUCA9IF9JUFBST1RPX1RDUAorY29uc3QgRVRIX1BfUFJQID0gX0VUSF9QX1BS
UAorY29uc3QgVENQX0RFRkVSX0FDQ0VQVCA9IF9UQ1BfREVGRVJfQUNDRVBUCitjb25zdCBFVEhf
REFUQV9MRU4gPSBfRVRIX0RBVEFfTEVOCitjb25zdCBTT19JTkNPTUlOR19OQVBJX0lEID0gX1NP
X0lOQ09NSU5HX05BUElfSUQKK2NvbnN0IEVUSF9QX1BQUF9ESVNDID0gX0VUSF9QX1BQUF9ESVND
Citjb25zdCBFVEhfUF84MDJfM19NSU4gPSBfRVRIX1BfODAyXzNfTUlOCitjb25zdCBJUFY2X1VO
SUNBU1RfSE9QUyA9IF9JUFY2X1VOSUNBU1RfSE9QUworY29uc3QgSU5fTU9WRURfVE8gPSBfSU5f
TU9WRURfVE8KK2NvbnN0IEFGX01QTFMgPSBfQUZfTVBMUworY29uc3QgQUZfV0FOUElQRSA9IF9B
Rl9XQU5QSVBFCitjb25zdCBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMgPSBfVENQX1RISU5fTElO
RUFSX1RJTUVPVVRTCitjb25zdCBJUFY2X1JFQ1ZEU1RPUFRTID0gX0lQVjZfUkVDVkRTVE9QVFMK
K2NvbnN0IEFSUEhSRF9SQVdJUCA9IF9BUlBIUkRfUkFXSVAKK2NvbnN0IEVUSF9QXzgwMl9FWDEg
PSBfRVRIX1BfODAyX0VYMQorY29uc3QgU09fTE9DS19GSUxURVIgPSBfU09fTE9DS19GSUxURVIK
K2NvbnN0IElQUFJPVE9fTVBMUyA9IF9JUFBST1RPX01QTFMKK2NvbnN0IEVUSF9QX0lQVjYgPSBf
RVRIX1BfSVBWNgorY29uc3QgRVRIX1BfQUFSUCA9IF9FVEhfUF9BQVJQCitjb25zdCBBUlBIUkRf
TE9PUEJBQ0sgPSBfQVJQSFJEX0xPT1BCQUNLCitjb25zdCBTT19CUk9BRENBU1QgPSBfU09fQlJP
QURDQVNUCitjb25zdCBJTl9DTEFTU0NfTkVUID0gX0lOX0NMQVNTQ19ORVQKK2NvbnN0IEVUSF9a
TEVOID0gX0VUSF9aTEVOCitjb25zdCBFVEhfUF9QVVBBVCA9IF9FVEhfUF9QVVBBVAorY29uc3Qg
SU5fTU9WRURfRlJPTSA9IF9JTl9NT1ZFRF9GUk9NCitjb25zdCBJUFY2X0xFQVZFX0dST1VQID0g
X0lQVjZfTEVBVkVfR1JPVVAKK2NvbnN0IEVUSF9QX0lCT0UgPSBfRVRIX1BfSUJPRQorY29uc3Qg
VENQX0VTVEFCTElTSEVEID0gX1RDUF9FU1RBQkxJU0hFRAorY29uc3QgQVJQSFJEX0FSQ05FVCA9
IF9BUlBIUkRfQVJDTkVUCitjb25zdCBFVEhfUF9QVVAgPSBfRVRIX1BfUFVQCitjb25zdCBJUF9S
RUNWT1BUUyA9IF9JUF9SRUNWT1BUUworY29uc3QgQVJQSFJEX1NJVCA9IF9BUlBIUkRfU0lUCitj
b25zdCBFVEhfUF9USVBDID0gX0VUSF9QX1RJUEMKK2NvbnN0IEFSUEhSRF9QSU1SRUcgPSBfQVJQ
SFJEX1BJTVJFRworY29uc3QgSVBWNl9NVUxUSUNBU1RfSE9QUyA9IF9JUFY2X01VTFRJQ0FTVF9I
T1BTCitjb25zdCBUQ1BfTUQ1U0lHX01BWEtFWUxFTiA9IF9UQ1BfTUQ1U0lHX01BWEtFWUxFTgor
Y29uc3QgSVBWNl9BVVRISERSID0gX0lQVjZfQVVUSEhEUgorY29uc3QgRVRIX0FMRU4gPSBfRVRI
X0FMRU4KK2NvbnN0IFRDUF9MQVNUX0FDSyA9IF9UQ1BfTEFTVF9BQ0sKK2NvbnN0IElQUFJPVE9f
TUFYID0gX0lQUFJPVE9fTUFYCitjb25zdCBJTl9ERUxFVEVfU0VMRiA9IF9JTl9ERUxFVEVfU0VM
RgorY29uc3QgSVBfQUREX1NPVVJDRV9NRU1CRVJTSElQID0gX0lQX0FERF9TT1VSQ0VfTUVNQkVS
U0hJUAorY29uc3QgQUZfQkxVRVRPT1RIID0gX0FGX0JMVUVUT09USAorY29uc3QgU09DS19EQ0NQ
ID0gX1NPQ0tfRENDUAorY29uc3QgU09fUEVFUkdST1VQUyA9IF9TT19QRUVSR1JPVVBTCitjb25z
dCBTT19LRUVQQUxJVkUgPSBfU09fS0VFUEFMSVZFCitjb25zdCBBRl9ORVRMSU5LID0gX0FGX05F
VExJTksKK2NvbnN0IElQVjZfQUREUkZPUk0gPSBfSVBWNl9BRERSRk9STQorY29uc3QgRVRIX1Bf
SUZFID0gX0VUSF9QX0lGRQorY29uc3QgSVBWNl9SRUNWSE9QTElNSVQgPSBfSVBWNl9SRUNWSE9Q
TElNSVQKK2NvbnN0IElQX01UVSA9IF9JUF9NVFUKK2NvbnN0IFNPTF9BTEcgPSBfU09MX0FMRwor
Y29uc3QgQVJQSFJEX0FYMjUgPSBfQVJQSFJEX0FYMjUKK2NvbnN0IFNPTF9LQ00gPSBfU09MX0tD
TQorY29uc3QgQUZfUFBQT1ggPSBfQUZfUFBQT1gKK2NvbnN0IEFSUEhSRF9TS0lQID0gX0FSUEhS
RF9TS0lQCitjb25zdCBJUFY2XzIyOTJSVEhEUiA9IF9JUFY2XzIyOTJSVEhEUgorY29uc3QgU09D
S19TVFJFQU0gPSBfU09DS19TVFJFQU0KK2NvbnN0IEVUSF9ITEVOID0gX0VUSF9ITEVOCitjb25z
dCBBUlBIUkRfRERDTVAgPSBfQVJQSFJEX0REQ01QCitjb25zdCBJUFY2X0NIRUNLU1VNID0gX0lQ
VjZfQ0hFQ0tTVU0KK2NvbnN0IEVUSF9QX1BQUF9TRVMgPSBfRVRIX1BfUFBQX1NFUworY29uc3Qg
QUZfU01DID0gX0FGX1NNQworY29uc3QgQVJQSFJEX0lFRUU4MDIgPSBfQVJQSFJEX0lFRUU4MDIK
K2NvbnN0IFNPTF9QUFBPTDJUUCA9IF9TT0xfUFBQT0wyVFAKK2NvbnN0IElOX09OTFlESVIgPSBf
SU5fT05MWURJUgorY29uc3QgQUZfU05BID0gX0FGX1NOQQorY29uc3QgU09MX0xMQyA9IF9TT0xf
TExDCitjb25zdCBTT19MSU5HRVIgPSBfU09fTElOR0VSCitjb25zdCBJUF9VTklDQVNUX0lGID0g
X0lQX1VOSUNBU1RfSUYKK2NvbnN0IFNPX1JDVkJVRkZPUkNFID0gX1NPX1JDVkJVRkZPUkNFCitj
b25zdCBJUFY2X1BLVElORk8gPSBfSVBWNl9QS1RJTkZPCitjb25zdCBJUFBST1RPX0lQSVAgPSBf
SVBQUk9UT19JUElQCitjb25zdCBJUFY2X1JFQ1ZSVEhEUiA9IF9JUFY2X1JFQ1ZSVEhEUgorY29u
c3QgVENQX0NBX09wZW4gPSBfVENQX0NBX09wZW4KK2NvbnN0IFNPX0JVU1lfUE9MTCA9IF9TT19C
VVNZX1BPTEwKK2NvbnN0IElQX0lQU0VDX1BPTElDWSA9IF9JUF9JUFNFQ19QT0xJQ1kKK2NvbnN0
IFNPX01BUksgPSBfU09fTUFSSworY29uc3QgSU5fQ1JFQVRFID0gX0lOX0NSRUFURQorY29uc3Qg
QUZfUk9TRSA9IF9BRl9ST1NFCitjb25zdCBUQ1BfQ0xPU0VfV0FJVCA9IF9UQ1BfQ0xPU0VfV0FJ
VAorY29uc3QgSVBWNl9SRUNWVENMQVNTID0gX0lQVjZfUkVDVlRDTEFTUworY29uc3QgRVRIX01J
Tl9NVFUgPSBfRVRIX01JTl9NVFUKK2NvbnN0IEFGX05FVEJFVUkgPSBfQUZfTkVUQkVVSQorY29u
c3QgSVBfRlJFRUJJTkQgPSBfSVBfRlJFRUJJTkQKK2NvbnN0IElOX0NMQVNTQV9NQVggPSBfSU5f
Q0xBU1NBX01BWAorY29uc3QgQVJQSFJEX0lFRUU4MDJfVFIgPSBfQVJQSFJEX0lFRUU4MDJfVFIK
K2NvbnN0IElOX0NMT1NFX1dSSVRFID0gX0lOX0NMT1NFX1dSSVRFCitjb25zdCBTT0xfQVRNID0g
X1NPTF9BVE0KK2NvbnN0IEFGX0ZJTEUgPSBfQUZfRklMRQorY29uc3QgU09MX05GQyA9IF9TT0xf
TkZDCitjb25zdCBBRl9SWFJQQyA9IF9BRl9SWFJQQworY29uc3QgSU5fQ0xBU1NCX0hPU1QgPSBf
SU5fQ0xBU1NCX0hPU1QKK2NvbnN0IElQVjZfUlhEU1RPUFRTID0gX0lQVjZfUlhEU1RPUFRTCitj
b25zdCBFVEhfUF9NVlJQID0gX0VUSF9QX01WUlAKK2NvbnN0IEVUSF9QX0lQWCA9IF9FVEhfUF9J
UFgKK2NvbnN0IFNPX1BFRVJTRUMgPSBfU09fUEVFUlNFQworY29uc3QgVENQX0NPT0tJRV9JTl9B
TFdBWVMgPSBfVENQX0NPT0tJRV9JTl9BTFdBWVMKK2NvbnN0IElQVjZfRFNUT1BUUyA9IF9JUFY2
X0RTVE9QVFMKK2NvbnN0IFRDUF9NRDVTSUdfRVhUID0gX1RDUF9NRDVTSUdfRVhUCitjb25zdCBJ
UF9NVFVfRElTQ09WRVIgPSBfSVBfTVRVX0RJU0NPVkVSCitjb25zdCBJTl9OT05CTE9DSyA9IF9J
Tl9OT05CTE9DSworY29uc3QgRVRIX01BWF9NVFUgPSBfRVRIX01BWF9NVFUKK2NvbnN0IEVUSF9Q
X1BIT05FVCA9IF9FVEhfUF9QSE9ORVQKK2NvbnN0IElQVjZfUlRIRFJfTE9PU0UgPSBfSVBWNl9S
VEhEUl9MT09TRQorY29uc3QgSVBWNl8yMjkyUEtUT1BUSU9OUyA9IF9JUFY2XzIyOTJQS1RPUFRJ
T05TCitjb25zdCBJUFBST1RPX0lDTVBWNiA9IF9JUFBST1RPX0lDTVBWNgorY29uc3QgRVRIX1Bf
QVRBTEsgPSBfRVRIX1BfQVRBTEsKK2NvbnN0IElQX0RST1BfTUVNQkVSU0hJUCA9IF9JUF9EUk9Q
X01FTUJFUlNISVAKK2NvbnN0IElOX0NMT1NFID0gX0lOX0NMT1NFCitjb25zdCBTT19QRUVLX09G
RiA9IF9TT19QRUVLX09GRgorY29uc3QgU09fUkNWQlVGID0gX1NPX1JDVkJVRgorY29uc3QgU09f
U0VMRUNUX0VSUl9RVUVVRSA9IF9TT19TRUxFQ1RfRVJSX1FVRVVFCitjb25zdCBTT0NLX05PTkJM
T0NLID0gX1NPQ0tfTk9OQkxPQ0sKK2NvbnN0IElQX01VTFRJQ0FTVF9BTEwgPSBfSVBfTVVMVElD
QVNUX0FMTAorY29uc3QgQVJQSFJEX0VFVEhFUiA9IF9BUlBIUkRfRUVUSEVSCitjb25zdCBUQ1Bf
UkVQQUlSX1dJTkRPVyA9IF9UQ1BfUkVQQUlSX1dJTkRPVworY29uc3QgSU5fT1BFTiA9IF9JTl9P
UEVOCitjb25zdCBFVEhfUF9UU04gPSBfRVRIX1BfVFNOCitjb25zdCBFVEhfUF9DT05UUk9MID0g
X0VUSF9QX0NPTlRST0wKK2NvbnN0IEVUSF9QX0VSU1BBTiA9IF9FVEhfUF9FUlNQQU4KK2NvbnN0
IFRDUF9VTFAgPSBfVENQX1VMUAorY29uc3QgSVBQUk9UT19CRUVUUEggPSBfSVBQUk9UT19CRUVU
UEgKK2NvbnN0IEFSUEhSRF9DSVNDTyA9IF9BUlBIUkRfQ0lTQ08KK2NvbnN0IElQUFJPVE9fRFNU
T1BUUyA9IF9JUFBST1RPX0RTVE9QVFMKK2NvbnN0IEFGX0FMRyA9IF9BRl9BTEcKK2NvbnN0IFNP
X1JDVkxPV0FUID0gX1NPX1JDVkxPV0FUCitjb25zdCBFVEhfUF9NQVAgPSBfRVRIX1BfTUFQCitj
b25zdCBJUFBST1RPX0FIID0gX0lQUFJPVE9fQUgKK2NvbnN0IElOX0RFTEVURSA9IF9JTl9ERUxF
VEUKK2NvbnN0IEVUSF9QX1JBUlAgPSBfRVRIX1BfUkFSUAorY29uc3QgU09fUkVVU0VQT1JUID0g
X1NPX1JFVVNFUE9SVAorY29uc3QgVENQX1JFUEFJUiA9IF9UQ1BfUkVQQUlSCitjb25zdCBBRl9U
SVBDID0gX0FGX1RJUEMKK2NvbnN0IFNPTF9JVUNWID0gX1NPTF9JVUNWCitjb25zdCBJUF9EUk9Q
X1NPVVJDRV9NRU1CRVJTSElQID0gX0lQX0RST1BfU09VUkNFX01FTUJFUlNISVAKK2NvbnN0IEFS
UEhSRF9NRVRSSUNPTSA9IF9BUlBIUkRfTUVUUklDT00KK2NvbnN0IElQVjZfUlRIRFJfVFlQRV8w
ID0gX0lQVjZfUlRIRFJfVFlQRV8wCitjb25zdCBJUFY2X0lQU0VDX1BPTElDWSA9IF9JUFY2X0lQ
U0VDX1BPTElDWQorY29uc3QgQUZfTExDID0gX0FGX0xMQworY29uc3QgU09fU05EQlVGRk9SQ0Ug
PSBfU09fU05EQlVGRk9SQ0UKK2NvbnN0IEFSUEhSRF9BUFBMRVRMSyA9IF9BUlBIUkRfQVBQTEVU
TEsKK2NvbnN0IElOX0NMT1NFX05PV1JJVEUgPSBfSU5fQ0xPU0VfTk9XUklURQorY29uc3QgRVRI
X1BfRERDTVAgPSBfRVRIX1BfRERDTVAKK2NvbnN0IElQX0RGID0gX0lQX0RGCitjb25zdCBTT19T
TkRCVUYgPSBfU09fU05EQlVGCitjb25zdCBBUlBIUkRfQVRNID0gX0FSUEhSRF9BVE0KK2NvbnN0
IEVUSF9GUkFNRV9MRU4gPSBfRVRIX0ZSQU1FX0xFTgorY29uc3QgQVJQSFJEX0lFRUUxMzk0ID0g
X0FSUEhSRF9JRUVFMTM5NAorY29uc3QgSU5fQUNDRVNTID0gX0lOX0FDQ0VTUworY29uc3QgVENQ
X1VTRVJfVElNRU9VVCA9IF9UQ1BfVVNFUl9USU1FT1VUCitjb25zdCBBUlBIUkRfSUVFRTgwMjEx
ID0gX0FSUEhSRF9JRUVFODAyMTEKK2NvbnN0IEVUSF9QX1RETFMgPSBfRVRIX1BfVERMUworY29u
c3QgSVBfT1JJR0RTVEFERFIgPSBfSVBfT1JJR0RTVEFERFIKK2NvbnN0IEVUSF9QX1NDQSA9IF9F
VEhfUF9TQ0EKK2NvbnN0IElQX1BNVFVESVNDX09NSVQgPSBfSVBfUE1UVURJU0NfT01JVAorY29u
c3QgSVBWNl9ST1VURVJfQUxFUlQgPSBfSVBWNl9ST1VURVJfQUxFUlQKK2NvbnN0IElQVjZfSERS
SU5DTCA9IF9JUFY2X0hEUklOQ0wKK2NvbnN0IEFGX0FTSCA9IF9BRl9BU0gKK2NvbnN0IElQX1BN
VFVESVNDX0RPTlQgPSBfSVBfUE1UVURJU0NfRE9OVAorY29uc3QgSVBWNl9KT0lOX0dST1VQID0g
X0lQVjZfSk9JTl9HUk9VUAorY29uc3QgU09fVFlQRSA9IF9TT19UWVBFCitjb25zdCBJUFBST1RP
X0lQID0gX0lQUFJPVE9fSVAKK2NvbnN0IFNPX0lOQ09NSU5HX0NQVSA9IF9TT19JTkNPTUlOR19D
UFUKK2NvbnN0IFRDUF9XSU5ET1dfQ0xBTVAgPSBfVENQX1dJTkRPV19DTEFNUAorY29uc3QgU09f
UlhRX09WRkwgPSBfU09fUlhRX09WRkwKK2NvbnN0IElOX0NMT0VYRUMgPSBfSU5fQ0xPRVhFQwor
Y29uc3QgSVBQUk9UT19DT01QID0gX0lQUFJPVE9fQ09NUAorY29uc3QgU09fQlBGX0VYVEVOU0lP
TlMgPSBfU09fQlBGX0VYVEVOU0lPTlMKK2NvbnN0IElQVjZfTVRVID0gX0lQVjZfTVRVCitjb25z
dCBBUlBIUkRfRkNBTCA9IF9BUlBIUkRfRkNBTAorY29uc3QgSU5fUV9PVkVSRkxPVyA9IF9JTl9R
X09WRVJGTE9XCitjb25zdCBUQ1BfVElNRV9XQUlUID0gX1RDUF9USU1FX1dBSVQKK2NvbnN0IEFG
X1NFQ1VSSVRZID0gX0FGX1NFQ1VSSVRZCitjb25zdCBUQ1BfRkFTVE9QRU4gPSBfVENQX0ZBU1RP
UEVOCitjb25zdCBBRl9ORkMgPSBfQUZfTkZDCitjb25zdCBJUFY2X1RSQU5TUEFSRU5UID0gX0lQ
VjZfVFJBTlNQQVJFTlQKK2NvbnN0IFNPTF9SQVcgPSBfU09MX1JBVworY29uc3QgSVBfUEFTU1NF
QyA9IF9JUF9QQVNTU0VDCitjb25zdCBUQ1BfQ09PS0lFX01JTiA9IF9UQ1BfQ09PS0lFX01JTgor
Y29uc3QgSU5fTU9ESUZZID0gX0lOX01PRElGWQorY29uc3QgVENQX0NPUksgPSBfVENQX0NPUksK
K2NvbnN0IFRDUF9LRUVQSU5UVkwgPSBfVENQX0tFRVBJTlRWTAorY29uc3QgSU5fSUdOT1JFRCA9
IF9JTl9JR05PUkVECitjb25zdCBJUFBST1RPX01IID0gX0lQUFJPVE9fTUgKK2NvbnN0IFNPTF9Q
QUNLRVQgPSBfU09MX1BBQ0tFVAorY29uc3QgSVBQUk9UT19QSU0gPSBfSVBQUk9UT19QSU0KK2Nv
bnN0IFNPX1JFVVNFQUREUiA9IF9TT19SRVVTRUFERFIKK2NvbnN0IFRDUF9DQV9Mb3NzID0gX1RD
UF9DQV9Mb3NzCitjb25zdCBTT0xfTkVUTElOSyA9IF9TT0xfTkVUTElOSworY29uc3QgQVJQSFJE
X1JTUlZEID0gX0FSUEhSRF9SU1JWRAorY29uc3QgRVRIX1BfQlBRID0gX0VUSF9QX0JQUQorY29u
c3QgVENQX1RJTUVTVEFNUCA9IF9UQ1BfVElNRVNUQU1QCitjb25zdCBUQ1BfQ0NfSU5GTyA9IF9U
Q1BfQ0NfSU5GTworY29uc3QgRVRIX1BfREVDID0gX0VUSF9QX0RFQworY29uc3QgU09MX1JEUyA9
IF9TT0xfUkRTCitjb25zdCBJUFBST1RPX1JTVlAgPSBfSVBQUk9UT19SU1ZQCitjb25zdCBBUlBI
UkRfVFVOTkVMID0gX0FSUEhSRF9UVU5ORUwKK2NvbnN0IFRDUF9LRUVQQ05UID0gX1RDUF9LRUVQ
Q05UCitjb25zdCBUQ1BfU1lOX1JFQ1YgPSBfVENQX1NZTl9SRUNWCitjb25zdCBUQ1BfQ0FfRGlz
b3JkZXIgPSBfVENQX0NBX0Rpc29yZGVyCitjb25zdCBJUF9NRiA9IF9JUF9NRgorY29uc3QgQVJQ
SFJEX1BST05FVCA9IF9BUlBIUkRfUFJPTkVUCitjb25zdCBTT0NLX1BBQ0tFVCA9IF9TT0NLX1BB
Q0tFVAorY29uc3QgSU5fSVNESVIgPSBfSU5fSVNESVIKK2NvbnN0IEFGX0JSSURHRSA9IF9BRl9C
UklER0UKK2NvbnN0IElQVjZfUE1UVURJU0NfT01JVCA9IF9JUFY2X1BNVFVESVNDX09NSVQKK2Nv
bnN0IEFSUEhSRF9UVU5ORUw2ID0gX0FSUEhSRF9UVU5ORUw2Citjb25zdCBTT0xfUlhSUEMgPSBf
U09MX1JYUlBDCitjb25zdCBUQ1BfS0VFUElETEUgPSBfVENQX0tFRVBJRExFCitjb25zdCBFVEhf
UF9BWDI1ID0gX0VUSF9QX0FYMjUKK2NvbnN0IElQVjZfRlJFRUJJTkQgPSBfSVBWNl9GUkVFQklO
RAorY29uc3QgQVJQSFJEX0hETEMgPSBfQVJQSFJEX0hETEMKK2NvbnN0IEVUSF9QX0lFRUVQVVAg
PSBfRVRIX1BfSUVFRVBVUAorY29uc3QgSU5fQ0xBU1NBX05TSElGVCA9IF9JTl9DTEFTU0FfTlNI
SUZUCitjb25zdCBJUFBST1RPX01UUCA9IF9JUFBST1RPX01UUAorY29uc3QgU09NQVhDT05OID0g
X1NPTUFYQ09OTgorY29uc3QgU0hVVF9SRCA9IF9TSFVUX1JECitjb25zdCBTSFVUX1dSID0gX1NI
VVRfV1IKK2NvbnN0IFNIVVRfUkRXUiA9IF9TSFVUX1JEV1IKK2NvbnN0IFNDX0VYUFJfTkVTVF9N
QVggPSBfX1NDX0VYUFJfTkVTVF9NQVgKK2NvbnN0IFNDX0xFVkVMNF9DQUNIRV9TSVpFID0gX19T
Q19MRVZFTDRfQ0FDSEVfU0laRQorY29uc3QgU0NfTUVNT1JZX1BST1RFQ1RJT04gPSBfX1NDX01F
TU9SWV9QUk9URUNUSU9OCitjb25zdCBTQ19UWVBFRF9NRU1PUllfT0JKRUNUUyA9IF9fU0NfVFlQ
RURfTUVNT1JZX09CSkVDVFMKK2NvbnN0IFNDX09QRU5fTUFYID0gX19TQ19PUEVOX01BWAorY29u
c3QgU0NfMl9TV19ERVYgPSBfX1NDXzJfU1dfREVWCitjb25zdCBTQ19BUkdfTUFYID0gX19TQ19B
UkdfTUFYCitjb25zdCBTQ19UUkFDRV9TWVNfTUFYID0gX19TQ19UUkFDRV9TWVNfTUFYCitjb25z
dCBTQ19YT1BFTl9YUEczID0gX19TQ19YT1BFTl9YUEczCitjb25zdCBTQ19YT1BFTl9YUEc0ID0g
X19TQ19YT1BFTl9YUEc0Citjb25zdCBTQ19CQVNFID0gX19TQ19CQVNFCitjb25zdCBTQ19USFJF
QURfUk9CVVNUX1BSSU9fUFJPVEVDVCA9IF9fU0NfVEhSRUFEX1JPQlVTVF9QUklPX1BST1RFQ1QK
K2NvbnN0IFNDX05MX0xBTkdNQVggPSBfX1NDX05MX0xBTkdNQVgKK2NvbnN0IFNDX1JFQUxUSU1F
X1NJR05BTFMgPSBfX1NDX1JFQUxUSU1FX1NJR05BTFMKK2NvbnN0IFNDX0xFVkVMMV9EQ0FDSEVf
QVNTT0MgPSBfX1NDX0xFVkVMMV9EQ0FDSEVfQVNTT0MKK2NvbnN0IFNDX05QUk9DRVNTT1JTX09O
TE4gPSBfX1NDX05QUk9DRVNTT1JTX09OTE4KK2NvbnN0IFNDX0xFVkVMMV9JQ0FDSEVfTElORVNJ
WkUgPSBfX1NDX0xFVkVMMV9JQ0FDSEVfTElORVNJWkUKK2NvbnN0IFNDXzJfQ19WRVJTSU9OID0g
X19TQ18yX0NfVkVSU0lPTgorY29uc3QgU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyA9
IF9fU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUworY29uc3QgU0NfUFJJT1JJVFlfU0NI
RURVTElORyA9IF9fU0NfUFJJT1JJVFlfU0NIRURVTElORworY29uc3QgU0NfSU5UX01BWCA9IF9f
U0NfSU5UX01BWAorY29uc3QgU0NfWE9QRU5fQ1JZUFQgPSBfX1NDX1hPUEVOX0NSWVBUCitjb25z
dCBTQ19WNl9MUEJJR19PRkZCSUcgPSBfX1NDX1Y2X0xQQklHX09GRkJJRworY29uc3QgU0NfVUlP
X01BWElPViA9IF9fU0NfVUlPX01BWElPVgorY29uc3QgU0NfVFJBQ0VfVVNFUl9FVkVOVF9NQVgg
PSBfX1NDX1RSQUNFX1VTRVJfRVZFTlRfTUFYCitjb25zdCBTQ19DT0xMX1dFSUdIVFNfTUFYID0g
X19TQ19DT0xMX1dFSUdIVFNfTUFYCitjb25zdCBTQ19USFJFQURfQ1BVVElNRSA9IF9fU0NfVEhS
RUFEX0NQVVRJTUUKK2NvbnN0IFNDX0JDX1NUUklOR19NQVggPSBfX1NDX0JDX1NUUklOR19NQVgK
K2NvbnN0IFNDX0dFVFBXX1JfU0laRV9NQVggPSBfX1NDX0dFVFBXX1JfU0laRV9NQVgKK2NvbnN0
IFNDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSA9IF9fU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFCitj
b25zdCBTQ19JTlRfTUlOID0gX19TQ19JTlRfTUlOCitjb25zdCBTQ19WNl9MUDY0X09GRjY0ID0g
X19TQ19WNl9MUDY0X09GRjY0Citjb25zdCBTQ19DSEFSX01BWCA9IF9fU0NfQ0hBUl9NQVgKK2Nv
bnN0IFNDX0FEVklTT1JZX0lORk8gPSBfX1NDX0FEVklTT1JZX0lORk8KK2NvbnN0IFNDX1RSQUNF
ID0gX19TQ19UUkFDRQorY29uc3QgU0NfU0hSVF9NQVggPSBfX1NDX1NIUlRfTUFYCitjb25zdCBT
Q18yX1BCU19NRVNTQUdFID0gX19TQ18yX1BCU19NRVNTQUdFCitjb25zdCBTQ19VU0VSX0dST1VQ
UyA9IF9fU0NfVVNFUl9HUk9VUFMKK2NvbnN0IFNDX0NIQVJfQklUID0gX19TQ19DSEFSX0JJVAor
Y29uc3QgU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTID0gX19TQ19TSEFSRURfTUVNT1JZX09CSkVD
VFMKK2NvbnN0IFNDX1JFX0RVUF9NQVggPSBfX1NDX1JFX0RVUF9NQVgKK2NvbnN0IFNDX1BJSV9J
TlRFUk5FVCA9IF9fU0NfUElJX0lOVEVSTkVUCitjb25zdCBTQ19KT0JfQ09OVFJPTCA9IF9fU0Nf
Sk9CX0NPTlRST0wKK2NvbnN0IFNDX0ZTWU5DID0gX19TQ19GU1lOQworY29uc3QgU0NfWEJTNV9J
TFAzMl9PRkYzMiA9IF9fU0NfWEJTNV9JTFAzMl9PRkYzMgorY29uc3QgU0NfMl9DX0JJTkQgPSBf
X1NDXzJfQ19CSU5ECitjb25zdCBTQ19DSEFSX01JTiA9IF9fU0NfQ0hBUl9NSU4KK2NvbnN0IFND
X0JDX0JBU0VfTUFYID0gX19TQ19CQ19CQVNFX01BWAorY29uc3QgU0NfWE9QRU5fVkVSU0lPTiA9
IF9fU0NfWE9QRU5fVkVSU0lPTgorY29uc3QgU0NfTkxfU0VUTUFYID0gX19TQ19OTF9TRVRNQVgK
K2NvbnN0IFNDX1NIUlRfTUlOID0gX19TQ19TSFJUX01JTgorY29uc3QgU0NfVjZfSUxQMzJfT0ZG
MzIgPSBfX1NDX1Y2X0lMUDMyX09GRjMyCitjb25zdCBTQ19TRU1fTlNFTVNfTUFYID0gX19TQ19T
RU1fTlNFTVNfTUFYCitjb25zdCBTQ19CQVJSSUVSUyA9IF9fU0NfQkFSUklFUlMKK2NvbnN0IFND
X1dPUkRfQklUID0gX19TQ19XT1JEX0JJVAorY29uc3QgU0NfTEVWRUwxX0lDQUNIRV9TSVpFID0g
X19TQ19MRVZFTDFfSUNBQ0hFX1NJWkUKK2NvbnN0IFNDX0RFVklDRV9TUEVDSUZJQ19SID0gX19T
Q19ERVZJQ0VfU1BFQ0lGSUNfUgorY29uc3QgU0NfU0VMRUNUID0gX19TQ19TRUxFQ1QKK2NvbnN0
IFNDX1JFQURFUl9XUklURVJfTE9DS1MgPSBfX1NDX1JFQURFUl9XUklURVJfTE9DS1MKK2NvbnN0
IFNDX0FJT19QUklPX0RFTFRBX01BWCA9IF9fU0NfQUlPX1BSSU9fREVMVEFfTUFYCitjb25zdCBT
Q19NT05PVE9OSUNfQ0xPQ0sgPSBfX1NDX01PTk9UT05JQ19DTE9DSworY29uc3QgU0NfU1BPUkFE
SUNfU0VSVkVSID0gX19TQ19TUE9SQURJQ19TRVJWRVIKK2NvbnN0IFNDX1BJSV9PU0lfQ0xUUyA9
IF9fU0NfUElJX09TSV9DTFRTCitjb25zdCBTQ19YT1BFTl9YQ1VfVkVSU0lPTiA9IF9fU0NfWE9Q
RU5fWENVX1ZFUlNJT04KK2NvbnN0IFNDX0xFVkVMMl9DQUNIRV9MSU5FU0laRSA9IF9fU0NfTEVW
RUwyX0NBQ0hFX0xJTkVTSVpFCitjb25zdCBTQ19MRVZFTDJfQ0FDSEVfQVNTT0MgPSBfX1NDX0xF
VkVMMl9DQUNIRV9BU1NPQworY29uc3QgU0NfTEVWRUw0X0NBQ0hFX0xJTkVTSVpFID0gX19TQ19M
RVZFTDRfQ0FDSEVfTElORVNJWkUKK2NvbnN0IFNDX0ZJTEVfU1lTVEVNID0gX19TQ19GSUxFX1NZ
U1RFTQorY29uc3QgU0NfUElJX09TSV9NID0gX19TQ19QSUlfT1NJX00KK2NvbnN0IFNDX1NZU1RF
TV9EQVRBQkFTRV9SID0gX19TQ19TWVNURU1fREFUQUJBU0VfUgorY29uc3QgU0NfRklMRV9MT0NL
SU5HID0gX19TQ19GSUxFX0xPQ0tJTkcKK2NvbnN0IFNDX1BBU1NfTUFYID0gX19TQ19QQVNTX01B
WAorY29uc3QgU0NfMl9QQlNfTE9DQVRFID0gX19TQ18yX1BCU19MT0NBVEUKK2NvbnN0IFNDX01F
TUxPQ0sgPSBfX1NDX01FTUxPQ0sKK2NvbnN0IFNDX1RIUkVBRF9ST0JVU1RfUFJJT19JTkhFUklU
ID0gX19TQ19USFJFQURfUk9CVVNUX1BSSU9fSU5IRVJJVAorY29uc3QgU0NfUElJID0gX19TQ19Q
SUkKK2NvbnN0IFNDX1NIRUxMID0gX19TQ19TSEVMTAorY29uc3QgU0NfREVWSUNFX0lPID0gX19T
Q19ERVZJQ0VfSU8KK2NvbnN0IFNDX1hPUEVOX0VOSF9JMThOID0gX19TQ19YT1BFTl9FTkhfSTE4
TgorY29uc3QgU0NfVVNFUl9HUk9VUFNfUiA9IF9fU0NfVVNFUl9HUk9VUFNfUgorY29uc3QgU0Nf
Ml9GT1JUX1JVTiA9IF9fU0NfMl9GT1JUX1JVTgorY29uc3QgU0NfQ1BVVElNRSA9IF9fU0NfQ1BV
VElNRQorY29uc3QgU0NfVjdfTFA2NF9PRkY2NCA9IF9fU0NfVjdfTFA2NF9PRkY2NAorY29uc3Qg
U0NfU1lNTE9PUF9NQVggPSBfX1NDX1NZTUxPT1BfTUFYCitjb25zdCBTQ19USFJFQURfS0VZU19N
QVggPSBfX1NDX1RIUkVBRF9LRVlTX01BWAorY29uc3QgU0NfVUlOVF9NQVggPSBfX1NDX1VJTlRf
TUFYCitjb25zdCBTQ19YQlM1X0xQNjRfT0ZGNjQgPSBfX1NDX1hCUzVfTFA2NF9PRkY2NAorY29u
c3QgU0NfVFJBQ0VfRVZFTlRfRklMVEVSID0gX19TQ19UUkFDRV9FVkVOVF9GSUxURVIKK2NvbnN0
IFNDX0xFVkVMM19DQUNIRV9TSVpFID0gX19TQ19MRVZFTDNfQ0FDSEVfU0laRQorY29uc3QgU0Nf
VEhSRUFEX1BSSU9fSU5IRVJJVCA9IF9fU0NfVEhSRUFEX1BSSU9fSU5IRVJJVAorY29uc3QgU0Nf
Ml9QQlNfQ0hFQ0tQT0lOVCA9IF9fU0NfMl9QQlNfQ0hFQ0tQT0lOVAorY29uc3QgU0NfTkVUV09S
S0lORyA9IF9fU0NfTkVUV09SS0lORworY29uc3QgU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCA9IF9f
U0NfVEhSRUFEX1BSSU9fUFJPVEVDVAorY29uc3QgU0NfVUNIQVJfTUFYID0gX19TQ19VQ0hBUl9N
QVgKK2NvbnN0IFNDX1hPUEVOX1NUUkVBTVMgPSBfX1NDX1hPUEVOX1NUUkVBTVMKK2NvbnN0IFND
X0xFVkVMM19DQUNIRV9BU1NPQyA9IF9fU0NfTEVWRUwzX0NBQ0hFX0FTU09DCitjb25zdCBTQ18y
X1VQRSA9IF9fU0NfMl9VUEUKK2NvbnN0IFNDX1VTSFJUX01BWCA9IF9fU0NfVVNIUlRfTUFYCitj
b25zdCBTQ19SRUdFWFAgPSBfX1NDX1JFR0VYUAorY29uc3QgU0NfTlpFUk8gPSBfX1NDX05aRVJP
Citjb25zdCBTQ19UX0lPVl9NQVggPSBfX1NDX1RfSU9WX01BWAorY29uc3QgU0NfUElQRSA9IF9f
U0NfUElQRQorY29uc3QgU0NfQUlPX01BWCA9IF9fU0NfQUlPX01BWAorY29uc3QgU0NfU0VNQVBI
T1JFUyA9IF9fU0NfU0VNQVBIT1JFUworY29uc3QgU0NfQVRFWElUX01BWCA9IF9fU0NfQVRFWElU
X01BWAorY29uc3QgU0NfTVFfUFJJT19NQVggPSBfX1NDX01RX1BSSU9fTUFYCitjb25zdCBTQ19T
SU5HTEVfUFJPQ0VTUyA9IF9fU0NfU0lOR0xFX1BST0NFU1MKK2NvbnN0IFNDX0dFVEdSX1JfU0la
RV9NQVggPSBfX1NDX0dFVEdSX1JfU0laRV9NQVgKK2NvbnN0IFNDX1BJSV9PU0kgPSBfX1NDX1BJ
SV9PU0kKK2NvbnN0IFNDX0NfTEFOR19TVVBQT1JUX1IgPSBfX1NDX0NfTEFOR19TVVBQT1JUX1IK
K2NvbnN0IFNDX01FTUxPQ0tfUkFOR0UgPSBfX1NDX01FTUxPQ0tfUkFOR0UKK2NvbnN0IFNDSEVE
X0ggPSBfX1NDSEVEX0gKK2NvbnN0IFNDX1Y3X0xQQklHX09GRkJJRyA9IF9fU0NfVjdfTFBCSUdf
T0ZGQklHCitjb25zdCBTQ19DTEtfVENLID0gX19TQ19DTEtfVENLCitjb25zdCBTQ19USFJFQURf
UFJJT1JJVFlfU0NIRURVTElORyA9IF9fU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcKK2Nv
bnN0IFNDX05MX05NQVggPSBfX1NDX05MX05NQVgKK2NvbnN0IFNDX1BPTEwgPSBfX1NDX1BPTEwK
K2NvbnN0IFNDX1hPUEVOX1VOSVggPSBfX1NDX1hPUEVOX1VOSVgKK2NvbnN0IFNDX0ZJRk8gPSBf
X1NDX0ZJRk8KK2NvbnN0IFNDX1RSQUNFX0lOSEVSSVQgPSBfX1NDX1RSQUNFX0lOSEVSSVQKK2Nv
bnN0IFNDX0hPU1RfTkFNRV9NQVggPSBfX1NDX0hPU1RfTkFNRV9NQVgKK2NvbnN0IFNDX0xPR0lO
X05BTUVfTUFYID0gX19TQ19MT0dJTl9OQU1FX01BWAorY29uc3QgU0NfTEVWRUw0X0NBQ0hFX0FT
U09DID0gX19TQ19MRVZFTDRfQ0FDSEVfQVNTT0MKK2NvbnN0IFNDX1BJSV9PU0lfQ09UUyA9IF9f
U0NfUElJX09TSV9DT1RTCitjb25zdCBTQ18yX0ZPUlRfREVWID0gX19TQ18yX0ZPUlRfREVWCitj
b25zdCBTQ19OTF9URVhUTUFYID0gX19TQ19OTF9URVhUTUFYCitjb25zdCBTQ19YT1BFTl9SRUFM
VElNRSA9IF9fU0NfWE9QRU5fUkVBTFRJTUUKK2NvbnN0IFNDX01CX0xFTl9NQVggPSBfX1NDX01C
X0xFTl9NQVgKK2NvbnN0IFNDX1JFR0VYX1ZFUlNJT04gPSBfX1NDX1JFR0VYX1ZFUlNJT04KK2Nv
bnN0IFNDX0NfTEFOR19TVVBQT1JUID0gX19TQ19DX0xBTkdfU1VQUE9SVAorY29uc3QgU0NfTE9O
R19CSVQgPSBfX1NDX0xPTkdfQklUCitjb25zdCBTQ19NQVBQRURfRklMRVMgPSBfX1NDX01BUFBF
RF9GSUxFUworY29uc3QgU0NfUkFXX1NPQ0tFVFMgPSBfX1NDX1JBV19TT0NLRVRTCitjb25zdCBT
Q19CQ19ESU1fTUFYID0gX19TQ19CQ19ESU1fTUFYCitjb25zdCBTQ18yX0xPQ0FMRURFRiA9IF9f
U0NfMl9MT0NBTEVERUYKK2NvbnN0IFNDX1hPUEVOX1hQRzIgPSBfX1NDX1hPUEVOX1hQRzIKK2Nv
bnN0IFNDXzJfQ0hBUl9URVJNID0gX19TQ18yX0NIQVJfVEVSTQorY29uc3QgU0NfTElORV9NQVgg
PSBfX1NDX0xJTkVfTUFYCitjb25zdCBTQ19TWVNURU1fREFUQUJBU0UgPSBfX1NDX1NZU1RFTV9E
QVRBQkFTRQorY29uc3QgU0NfU0NIQVJfTUFYID0gX19TQ19TQ0hBUl9NQVgKK2NvbnN0IFNDX1RI
UkVBRF9QUk9DRVNTX1NIQVJFRCA9IF9fU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVECitjb25zdCBT
Q19WNl9JTFAzMl9PRkZCSUcgPSBfX1NDX1Y2X0lMUDMyX09GRkJJRworY29uc3QgU0NfMl9QQlMg
PSBfX1NDXzJfUEJTCitjb25zdCBTQ19TVFJFQU1TID0gX19TQ19TVFJFQU1TCitjb25zdCBTQ19Y
T1BFTl9SRUFMVElNRV9USFJFQURTID0gX19TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTCitjb25z
dCBTQ19JUFY2ID0gX19TQ19JUFY2Citjb25zdCBTQ19TVFJFQU1fTUFYID0gX19TQ19TVFJFQU1f
TUFYCitjb25zdCBTQ19VTE9OR19NQVggPSBfX1NDX1VMT05HX01BWAorY29uc3QgU0NfQ0hJTERf
TUFYID0gX19TQ19DSElMRF9NQVgKK2NvbnN0IFNDX1RSQUNFX0VWRU5UX05BTUVfTUFYID0gX19T
Q19UUkFDRV9FVkVOVF9OQU1FX01BWAorY29uc3QgU0NfVElNRVJfTUFYID0gX19TQ19USU1FUl9N
QVgKK2NvbnN0IFNDX1NDSEFSX01JTiA9IF9fU0NfU0NIQVJfTUlOCitjb25zdCBTQ19BVlBIWVNf
UEFHRVMgPSBfX1NDX0FWUEhZU19QQUdFUworY29uc3QgU0NfTkdST1VQU19NQVggPSBfX1NDX05H
Uk9VUFNfTUFYCitjb25zdCBTQ19NRVNTQUdFX1BBU1NJTkcgPSBfX1NDX01FU1NBR0VfUEFTU0lO
RworY29uc3QgU0NfTEVWRUwxX0RDQUNIRV9MSU5FU0laRSA9IF9fU0NfTEVWRUwxX0RDQUNIRV9M
SU5FU0laRQorY29uc3QgU0NfTEVWRUwxX0RDQUNIRV9TSVpFID0gX19TQ19MRVZFTDFfRENBQ0hF
X1NJWkUKK2NvbnN0IFNDX0lPVl9NQVggPSBfX1NDX0lPVl9NQVgKK2NvbnN0IFNDX0JDX1NDQUxF
X01BWCA9IF9fU0NfQkNfU0NBTEVfTUFYCitjb25zdCBTQ19TU0laRV9NQVggPSBfX1NDX1NTSVpF
X01BWAorY29uc3QgU0NfVjdfSUxQMzJfT0ZGMzIgPSBfX1NDX1Y3X0lMUDMyX09GRjMyCitjb25z
dCBTQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUgPSBfX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRQor
Y29uc3QgU0NfVEhSRUFEUyA9IF9fU0NfVEhSRUFEUworY29uc3QgU0NfUElJX0lOVEVSTkVUX0RH
UkFNID0gX19TQ19QSUlfSU5URVJORVRfREdSQU0KK2NvbnN0IFNDX1RUWV9OQU1FX01BWCA9IF9f
U0NfVFRZX05BTUVfTUFYCitjb25zdCBTQ19QUklPUklUSVpFRF9JTyA9IF9fU0NfUFJJT1JJVEla
RURfSU8KK2NvbnN0IFNDX1hPUEVOX1NITSA9IF9fU0NfWE9QRU5fU0hNCitjb25zdCBTQ19SVFNJ
R19NQVggPSBfX1NDX1JUU0lHX01BWAorY29uc3QgU0NfVEhSRUFEX1RIUkVBRFNfTUFYID0gX19T
Q19USFJFQURfVEhSRUFEU19NQVgKK2NvbnN0IFNDX0FTWU5DSFJPTk9VU19JTyA9IF9fU0NfQVNZ
TkNIUk9OT1VTX0lPCitjb25zdCBTQ19MRVZFTDJfQ0FDSEVfU0laRSA9IF9fU0NfTEVWRUwyX0NB
Q0hFX1NJWkUKK2NvbnN0IFNDX1RaTkFNRV9NQVggPSBfX1NDX1RaTkFNRV9NQVgKK2NvbnN0IFND
X1hCUzVfTFBCSUdfT0ZGQklHID0gX19TQ19YQlM1X0xQQklHX09GRkJJRworY29uc3QgU0NfVEhS
RUFEX1NUQUNLX01JTiA9IF9fU0NfVEhSRUFEX1NUQUNLX01JTgorY29uc3QgU0NfVEhSRUFEX1NB
RkVfRlVOQ1RJT05TID0gX19TQ19USFJFQURfU0FGRV9GVU5DVElPTlMKK2NvbnN0IFNDX1hPUEVO
X0xFR0FDWSA9IF9fU0NfWE9QRU5fTEVHQUNZCitjb25zdCBTQ19USFJFQURfQVRUUl9TVEFDS0FE
RFIgPSBfX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUgorY29uc3QgU0NfU0FWRURfSURTID0gX19T
Q19TQVZFRF9JRFMKK2NvbnN0IFNDX1Y3X0lMUDMyX09GRkJJRyA9IF9fU0NfVjdfSUxQMzJfT0ZG
QklHCitjb25zdCBTQ19MRVZFTDFfSUNBQ0hFX0FTU09DID0gX19TQ19MRVZFTDFfSUNBQ0hFX0FT
U09DCitjb25zdCBTQ19ERUxBWVRJTUVSX01BWCA9IF9fU0NfREVMQVlUSU1FUl9NQVgKK2NvbnN0
IFNDX1RJTUVPVVRTID0gX19TQ19USU1FT1VUUworY29uc3QgU0NfWEJTNV9JTFAzMl9PRkZCSUcg
PSBfX1NDX1hCUzVfSUxQMzJfT0ZGQklHCitjb25zdCBTQ19USU1FUlMgPSBfX1NDX1RJTUVSUwor
Y29uc3QgU0NfTkxfQVJHTUFYID0gX19TQ19OTF9BUkdNQVgKK2NvbnN0IFNDX1BBR0VTSVpFID0g
X19TQ19QQUdFU0laRQorY29uc3QgU0NfTlBST0NFU1NPUlNfQ09ORiA9IF9fU0NfTlBST0NFU1NP
UlNfQ09ORgorY29uc3QgU0NfUElJX1hUSSA9IF9fU0NfUElJX1hUSQorY29uc3QgU0NfU1BJTl9M
T0NLUyA9IF9fU0NfU1BJTl9MT0NLUworY29uc3QgU0NfMl9QQlNfQUNDT1VOVElORyA9IF9fU0Nf
Ml9QQlNfQUNDT1VOVElORworY29uc3QgU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiA9IF9fU0Nf
VEhSRUFEX1NQT1JBRElDX1NFUlZFUgorY29uc3QgU0NfRkRfTUdNVCA9IF9fU0NfRkRfTUdNVAor
Y29uc3QgU0NfU1lOQ0hST05JWkVEX0lPID0gX19TQ19TWU5DSFJPTklaRURfSU8KK2NvbnN0IFND
X0VRVUlWX0NMQVNTX01BWCA9IF9fU0NfRVFVSVZfQ0xBU1NfTUFYCitjb25zdCBTQ19TUEFXTiA9
IF9fU0NfU1BBV04KK2NvbnN0IFNDX0NIQVJDTEFTU19OQU1FX01BWCA9IF9fU0NfQ0hBUkNMQVNT
X05BTUVfTUFYCitjb25zdCBTQ19QSUlfSU5URVJORVRfU1RSRUFNID0gX19TQ19QSUlfSU5URVJO
RVRfU1RSRUFNCitjb25zdCBTQ18yX1BCU19UUkFDSyA9IF9fU0NfMl9QQlNfVFJBQ0sKK2NvbnN0
IFNDX1ZFUlNJT04gPSBfX1NDX1ZFUlNJT04KK2NvbnN0IFNDX1NFTV9WQUxVRV9NQVggPSBfX1ND
X1NFTV9WQUxVRV9NQVgKK2NvbnN0IFNDX0NMT0NLX1NFTEVDVElPTiA9IF9fU0NfQ0xPQ0tfU0VM
RUNUSU9OCitjb25zdCBTQ19GSUxFX0FUVFJJQlVURVMgPSBfX1NDX0ZJTEVfQVRUUklCVVRFUwor
Y29uc3QgU0NfU0lHUVVFVUVfTUFYID0gX19TQ19TSUdRVUVVRV9NQVgKK2NvbnN0IFNDXzJfQ19E
RVYgPSBfX1NDXzJfQ19ERVYKK2NvbnN0IFNDX0FJT19MSVNUSU9fTUFYID0gX19TQ19BSU9fTElT
VElPX01BWAorY29uc3QgU0NfMl9WRVJTSU9OID0gX19TQ18yX1ZFUlNJT04KK2NvbnN0IFNDX0RF
VklDRV9TUEVDSUZJQyA9IF9fU0NfREVWSUNFX1NQRUNJRklDCitjb25zdCBTQ19OTF9NU0dNQVgg
PSBfX1NDX05MX01TR01BWAorY29uc3QgU0NfUEhZU19QQUdFUyA9IF9fU0NfUEhZU19QQUdFUwor
Y29uc3QgU0NfVFJBQ0VfTE9HID0gX19TQ19UUkFDRV9MT0cKK2NvbnN0IFNDX1NTX1JFUExfTUFY
ID0gX19TQ19TU19SRVBMX01BWAorY29uc3QgU0NfTVVMVElfUFJPQ0VTUyA9IF9fU0NfTVVMVElf
UFJPQ0VTUworY29uc3QgU0NfUElJX1NPQ0tFVCA9IF9fU0NfUElJX1NPQ0tFVAorY29uc3QgU0Nf
VFJBQ0VfTkFNRV9NQVggPSBfX1NDX1RSQUNFX05BTUVfTUFYCitjb25zdCBTQ19NUV9PUEVOX01B
WCA9IF9fU0NfTVFfT1BFTl9NQVgKK2NvbnN0IFNDX1NJR05BTFMgPSBfX1NDX1NJR05BTFMKK2Nv
bnN0IFBDX1JFQ19NSU5fWEZFUl9TSVpFID0gX19QQ19SRUNfTUlOX1hGRVJfU0laRQorY29uc3Qg
UENfUEFUSF9NQVggPSBfX1BDX1BBVEhfTUFYCitjb25zdCBQQ19BTExPQ19TSVpFX01JTiA9IF9f
UENfQUxMT0NfU0laRV9NSU4KK2NvbnN0IFBDX1NZTkNfSU8gPSBfX1BDX1NZTkNfSU8KK2NvbnN0
IFBDX01BWF9DQU5PTiA9IF9fUENfTUFYX0NBTk9OCitjb25zdCBQQ19GSUxFU0laRUJJVFMgPSBf
X1BDX0ZJTEVTSVpFQklUUworY29uc3QgUENfTk9fVFJVTkMgPSBfX1BDX05PX1RSVU5DCitjb25z
dCBQQ19TT0NLX01BWEJVRiA9IF9fUENfU09DS19NQVhCVUYKK2NvbnN0IFBDX1BJUEVfQlVGID0g
X19QQ19QSVBFX0JVRgorY29uc3QgUENfTElOS19NQVggPSBfX1BDX0xJTktfTUFYCitjb25zdCBQ
Q19OQU1FX01BWCA9IF9fUENfTkFNRV9NQVgKK2NvbnN0IFBDX0NIT1dOX1JFU1RSSUNURUQgPSBf
X1BDX0NIT1dOX1JFU1RSSUNURUQKK2NvbnN0IFBDX1JFQ19YRkVSX0FMSUdOID0gX19QQ19SRUNf
WEZFUl9BTElHTgorY29uc3QgUENfQVNZTkNfSU8gPSBfX1BDX0FTWU5DX0lPCitjb25zdCBQQ19Q
UklPX0lPID0gX19QQ19QUklPX0lPCitjb25zdCBQQ19SRUNfTUFYX1hGRVJfU0laRSA9IF9fUENf
UkVDX01BWF9YRkVSX1NJWkUKK2NvbnN0IFBDX1JFQ19JTkNSX1hGRVJfU0laRSA9IF9fUENfUkVD
X0lOQ1JfWEZFUl9TSVpFCitjb25zdCBQQ19NQVhfSU5QVVQgPSBfX1BDX01BWF9JTlBVVAorY29u
c3QgUENfVkRJU0FCTEUgPSBfX1BDX1ZESVNBQkxFCitjb25zdCBQQ18yX1NZTUxJTktTID0gX19Q
Q18yX1NZTUxJTktTCitjb25zdCBQQ19TWU1MSU5LX01BWCA9IF9fUENfU1lNTElOS19NQVgKK2Nv
bnN0IFBhdGhNYXggPSBfUEFUSF9NQVgKK2NvbnN0IEVQT0xMTVNHID0gX0VQT0xMTVNHCitjb25z
dCBFUE9MTFJEQkFORCA9IF9FUE9MTFJEQkFORAorY29uc3QgRVBPTExFWENMVVNJVkUgPSBfRVBP
TExFWENMVVNJVkUKK2NvbnN0IEVQT0xMV1JOT1JNID0gX0VQT0xMV1JOT1JNCitjb25zdCBFUE9M
TF9DVExfQUREID0gX0VQT0xMX0NUTF9BREQKK2NvbnN0IEVQT0xMUFJJID0gX0VQT0xMUFJJCitj
b25zdCBFUE9MTFdSQkFORCA9IF9FUE9MTFdSQkFORAorY29uc3QgRVBPTExJTiA9IF9FUE9MTElO
Citjb25zdCBFUE9MTFdBS0VVUCA9IF9FUE9MTFdBS0VVUAorY29uc3QgRVBPTExPVVQgPSBfRVBP
TExPVVQKK2NvbnN0IEVQT0xMUkRIVVAgPSBfRVBPTExSREhVUAorY29uc3QgRVBPTExSRE5PUk0g
PSBfRVBPTExSRE5PUk0KK2NvbnN0IEVQT0xMRVJSID0gX0VQT0xMRVJSCitjb25zdCBFUE9MTEhV
UCA9IF9FUE9MTEhVUAorY29uc3QgRVBPTExPTkVTSE9UID0gX0VQT0xMT05FU0hPVAorY29uc3Qg
RVBPTExfQ0xPRVhFQyA9IF9FUE9MTF9DTE9FWEVDCitjb25zdCBFUE9MTF9DVExfREVMID0gX0VQ
T0xMX0NUTF9ERUwKK2NvbnN0IEVQT0xMX0NUTF9NT0QgPSBfRVBPTExfQ1RMX01PRAorY29uc3Qg
RVBPTExFVCA9IF9FUE9MTEVUCitjb25zdCBQUl9TVkVfVkxfSU5IRVJJVCA9IF9QUl9TVkVfVkxf
SU5IRVJJVAorY29uc3QgUFJfRlBfRVhDX1NXX0VOQUJMRSA9IF9QUl9GUF9FWENfU1dfRU5BQkxF
Citjb25zdCBQUl9TRVRfRlBfTU9ERSA9IF9QUl9TRVRfRlBfTU9ERQorY29uc3QgUFJfU0VUX1NQ
RUNVTEFUSU9OX0NUUkwgPSBfUFJfU0VUX1NQRUNVTEFUSU9OX0NUUkwKK2NvbnN0IFBSX0dFVF9G
UF9NT0RFID0gX1BSX0dFVF9GUF9NT0RFCitjb25zdCBQUl9TRVRfU0VDQ09NUCA9IF9QUl9TRVRf
U0VDQ09NUAorY29uc3QgUFJfU1BFQ19TVE9SRV9CWVBBU1MgPSBfUFJfU1BFQ19TVE9SRV9CWVBB
U1MKK2NvbnN0IFBSX0NBUF9BTUJJRU5UID0gX1BSX0NBUF9BTUJJRU5UCitjb25zdCBQUl9NQ0Vf
S0lMTF9MQVRFID0gX1BSX01DRV9LSUxMX0xBVEUKK2NvbnN0IFBSX1NFVF9NTV9BUkdfRU5EID0g
X1BSX1NFVF9NTV9BUkdfRU5ECitjb25zdCBQUl9TRVRfVElNRVJTTEFDSyA9IF9QUl9TRVRfVElN
RVJTTEFDSworY29uc3QgUFJfU0VUX01NX0FSR19TVEFSVCA9IF9QUl9TRVRfTU1fQVJHX1NUQVJU
Citjb25zdCBQUl9TRVRfTU1fTUFQID0gX1BSX1NFVF9NTV9NQVAKK2NvbnN0IFBSX0ZQX0VYQ19E
SVYgPSBfUFJfRlBfRVhDX0RJVgorY29uc3QgUFJfU0VUX01NX0VYRV9GSUxFID0gX1BSX1NFVF9N
TV9FWEVfRklMRQorY29uc3QgUFJfQ0FQX0FNQklFTlRfTE9XRVIgPSBfUFJfQ0FQX0FNQklFTlRf
TE9XRVIKK2NvbnN0IFBSX0ZQRU1VX05PUFJJTlQgPSBfUFJfRlBFTVVfTk9QUklOVAorY29uc3Qg
UFJfU0VUX0VORElBTiA9IF9QUl9TRVRfRU5ESUFOCitjb25zdCBQUl9HRVRfTkFNRSA9IF9QUl9H
RVRfTkFNRQorY29uc3QgUFJfU1ZFX1NFVF9WTF9PTkVYRUMgPSBfUFJfU1ZFX1NFVF9WTF9PTkVY
RUMKK2NvbnN0IFBSX1NFVF9OQU1FID0gX1BSX1NFVF9OQU1FCitjb25zdCBQUl9TRVRfTU1fU1RB
UlRfQlJLID0gX1BSX1NFVF9NTV9TVEFSVF9CUksKK2NvbnN0IFBSX0dFVF9USU1JTkcgPSBfUFJf
R0VUX1RJTUlORworY29uc3QgUFJfQ0FQX0FNQklFTlRfSVNfU0VUID0gX1BSX0NBUF9BTUJJRU5U
X0lTX1NFVAorY29uc3QgUFJfU0VUX01NX01BUF9TSVpFID0gX1BSX1NFVF9NTV9NQVBfU0laRQor
Y29uc3QgUFJfRlBfRVhDX0lOViA9IF9QUl9GUF9FWENfSU5WCitjb25zdCBQUl9TRVRfVFNDID0g
X1BSX1NFVF9UU0MKK2NvbnN0IFBSX1NFVF9QVFJBQ0VSID0gX1BSX1NFVF9QVFJBQ0VSCitjb25z
dCBQUl9TRVRfTU1fQlJLID0gX1BSX1NFVF9NTV9CUksKK2NvbnN0IFBSX1NFVF9USU1JTkcgPSBf
UFJfU0VUX1RJTUlORworY29uc3QgUFJfR0VUX0RVTVBBQkxFID0gX1BSX0dFVF9EVU1QQUJMRQor
Y29uc3QgUFJfR0VUX1RTQyA9IF9QUl9HRVRfVFNDCitjb25zdCBQUl9NQ0VfS0lMTF9HRVQgPSBf
UFJfTUNFX0tJTExfR0VUCitjb25zdCBQUl9NQ0VfS0lMTF9DTEVBUiA9IF9QUl9NQ0VfS0lMTF9D
TEVBUgorY29uc3QgUFJfRlBfRVhDX09WRiA9IF9QUl9GUF9FWENfT1ZGCitjb25zdCBQUl9TRVRf
U0VDVVJFQklUUyA9IF9QUl9TRVRfU0VDVVJFQklUUworY29uc3QgUFJfVElNSU5HX1NUQVRJU1RJ
Q0FMID0gX1BSX1RJTUlOR19TVEFUSVNUSUNBTAorY29uc3QgUFJfTVBYX0VOQUJMRV9NQU5BR0VN
RU5UID0gX1BSX01QWF9FTkFCTEVfTUFOQUdFTUVOVAorY29uc3QgUFJfRlBfRVhDX0RJU0FCTEVE
ID0gX1BSX0ZQX0VYQ19ESVNBQkxFRAorY29uc3QgUFJfTVBYX0RJU0FCTEVfTUFOQUdFTUVOVCA9
IF9QUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UCitjb25zdCBQUl9UU0NfU0lHU0VHViA9IF9QUl9U
U0NfU0lHU0VHVgorY29uc3QgUFJfU0VUX0tFRVBDQVBTID0gX1BSX1NFVF9LRUVQQ0FQUworY29u
c3QgUFJfRU5ESUFOX0JJRyA9IF9QUl9FTkRJQU5fQklHCitjb25zdCBQUl9TRVRfTU1fQVVYViA9
IF9QUl9TRVRfTU1fQVVYVgorY29uc3QgUFJfU0VUX1VOQUxJR04gPSBfUFJfU0VUX1VOQUxJR04K
K2NvbnN0IFBSX0dFVF9OT19ORVdfUFJJVlMgPSBfUFJfR0VUX05PX05FV19QUklWUworY29uc3Qg
UFJfR0VUX1RJRF9BRERSRVNTID0gX1BSX0dFVF9USURfQUREUkVTUworY29uc3QgUFJfRlBfTU9E
RV9GUkUgPSBfUFJfRlBfTU9ERV9GUkUKK2NvbnN0IFBSX0dFVF9GUEVYQyA9IF9QUl9HRVRfRlBF
WEMKK2NvbnN0IFBSX0NBUEJTRVRfUkVBRCA9IF9QUl9DQVBCU0VUX1JFQUQKK2NvbnN0IFBSX1NQ
RUNfSU5ESVJFQ1RfQlJBTkNIID0gX1BSX1NQRUNfSU5ESVJFQ1RfQlJBTkNICitjb25zdCBQUl9T
RVRfQ0hJTERfU1VCUkVBUEVSID0gX1BSX1NFVF9DSElMRF9TVUJSRUFQRVIKK2NvbnN0IFBSX1NQ
RUNfRElTQUJMRSA9IF9QUl9TUEVDX0RJU0FCTEUKK2NvbnN0IFBSX1NFVF9OT19ORVdfUFJJVlMg
PSBfUFJfU0VUX05PX05FV19QUklWUworY29uc3QgUFJfU1BFQ19OT1RfQUZGRUNURUQgPSBfUFJf
U1BFQ19OT1RfQUZGRUNURUQKK2NvbnN0IFBSX0ZQX0VYQ19VTkQgPSBfUFJfRlBfRVhDX1VORAor
Y29uc3QgUFJfR0VUX1BERUFUSFNJRyA9IF9QUl9HRVRfUERFQVRIU0lHCitjb25zdCBQUl9TVkVf
R0VUX1ZMID0gX1BSX1NWRV9HRVRfVkwKK2NvbnN0IFBSX0VORElBTl9QUENfTElUVExFID0gX1BS
X0VORElBTl9QUENfTElUVExFCitjb25zdCBQUl9TRVRfTU0gPSBfUFJfU0VUX01NCitjb25zdCBQ
Ul9DQVBfQU1CSUVOVF9SQUlTRSA9IF9QUl9DQVBfQU1CSUVOVF9SQUlTRQorY29uc3QgUFJfRlBf
RVhDX1BSRUNJU0UgPSBfUFJfRlBfRVhDX1BSRUNJU0UKK2NvbnN0IFBSX1NFVF9USFBfRElTQUJM
RSA9IF9QUl9TRVRfVEhQX0RJU0FCTEUKK2NvbnN0IFBSX0ZQX0VYQ19BU1lOQyA9IF9QUl9GUF9F
WENfQVNZTkMKK2NvbnN0IFBSX0ZQRU1VX1NJR0ZQRSA9IF9QUl9GUEVNVV9TSUdGUEUKK2NvbnN0
IFBSX0VORElBTl9MSVRUTEUgPSBfUFJfRU5ESUFOX0xJVFRMRQorY29uc3QgUFJfU0VUX01NX0VO
Vl9TVEFSVCA9IF9QUl9TRVRfTU1fRU5WX1NUQVJUCitjb25zdCBQUl9DQVBCU0VUX0RST1AgPSBf
UFJfQ0FQQlNFVF9EUk9QCitjb25zdCBQUl9TUEVDX0VOQUJMRSA9IF9QUl9TUEVDX0VOQUJMRQor
Y29uc3QgUFJfQ0FQX0FNQklFTlRfQ0xFQVJfQUxMID0gX1BSX0NBUF9BTUJJRU5UX0NMRUFSX0FM
TAorY29uc3QgUFJfVFNDX0VOQUJMRSA9IF9QUl9UU0NfRU5BQkxFCitjb25zdCBQUl9TVkVfVkxf
TEVOX01BU0sgPSBfUFJfU1ZFX1ZMX0xFTl9NQVNLCitjb25zdCBQUl9UQVNLX1BFUkZfRVZFTlRT
X0VOQUJMRSA9IF9QUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQorY29uc3QgUFJfU0VUX0RVTVBB
QkxFID0gX1BSX1NFVF9EVU1QQUJMRQorY29uc3QgUFJfR0VUX1RIUF9ESVNBQkxFID0gX1BSX0dF
VF9USFBfRElTQUJMRQorY29uc3QgUFJfR0VUX0NISUxEX1NVQlJFQVBFUiA9IF9QUl9HRVRfQ0hJ
TERfU1VCUkVBUEVSCitjb25zdCBQUl9TRVRfTU1fU1RBUlRfQ09ERSA9IF9QUl9TRVRfTU1fU1RB
UlRfQ09ERQorY29uc3QgUFJfU1ZFX1NFVF9WTCA9IF9QUl9TVkVfU0VUX1ZMCitjb25zdCBQUl9N
Q0VfS0lMTF9ERUZBVUxUID0gX1BSX01DRV9LSUxMX0RFRkFVTFQKK2NvbnN0IFBSX0dFVF9FTkRJ
QU4gPSBfUFJfR0VUX0VORElBTgorY29uc3QgUFJfR0VUX1NFQ0NPTVAgPSBfUFJfR0VUX1NFQ0NP
TVAKK2NvbnN0IFBSX0dFVF9TUEVDVUxBVElPTl9DVFJMID0gX1BSX0dFVF9TUEVDVUxBVElPTl9D
VFJMCitjb25zdCBQUl9HRVRfVElNRVJTTEFDSyA9IF9QUl9HRVRfVElNRVJTTEFDSworY29uc3Qg
UFJfRlBfRVhDX1JFUyA9IF9QUl9GUF9FWENfUkVTCitjb25zdCBQUl9TRVRfTU1fRU5EX0NPREUg
PSBfUFJfU0VUX01NX0VORF9DT0RFCitjb25zdCBQUl9HRVRfVU5BTElHTiA9IF9QUl9HRVRfVU5B
TElHTgorY29uc3QgUFJfU0VUX1BERUFUSFNJRyA9IF9QUl9TRVRfUERFQVRIU0lHCitjb25zdCBQ
Ul9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUgPSBfUFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxF
Citjb25zdCBQUl9TUEVDX0ZPUkNFX0RJU0FCTEUgPSBfUFJfU1BFQ19GT1JDRV9ESVNBQkxFCitj
b25zdCBQUl9NQ0VfS0lMTF9TRVQgPSBfUFJfTUNFX0tJTExfU0VUCitjb25zdCBQUl9TRVRfTU1f
U1RBUlRfU1RBQ0sgPSBfUFJfU0VUX01NX1NUQVJUX1NUQUNLCitjb25zdCBQUl9TRVRfRlBFTVUg
PSBfUFJfU0VUX0ZQRU1VCitjb25zdCBQUl9VTkFMSUdOX05PUFJJTlQgPSBfUFJfVU5BTElHTl9O
T1BSSU5UCitjb25zdCBQUl9TRVRfTU1fU1RBUlRfREFUQSA9IF9QUl9TRVRfTU1fU1RBUlRfREFU
QQorY29uc3QgUFJfU0VUX01NX0VOVl9FTkQgPSBfUFJfU0VUX01NX0VOVl9FTkQKK2NvbnN0IFBS
X01DRV9LSUxMX0VBUkxZID0gX1BSX01DRV9LSUxMX0VBUkxZCitjb25zdCBQUl9GUF9NT0RFX0ZS
ID0gX1BSX0ZQX01PREVfRlIKK2NvbnN0IFBSX0ZQX0VYQ19OT05SRUNPViA9IF9QUl9GUF9FWENf
Tk9OUkVDT1YKK2NvbnN0IFBSX0dFVF9TRUNVUkVCSVRTID0gX1BSX0dFVF9TRUNVUkVCSVRTCitj
b25zdCBQUl9TRVRfRlBFWEMgPSBfUFJfU0VUX0ZQRVhDCitjb25zdCBQUl9NQ0VfS0lMTCA9IF9Q
Ul9NQ0VfS0lMTAorY29uc3QgUFJfU0VUX01NX0VORF9EQVRBID0gX1BSX1NFVF9NTV9FTkRfREFU
QQorY29uc3QgUFJfR0VUX0ZQRU1VID0gX1BSX0dFVF9GUEVNVQorY29uc3QgUFJfR0VUX0tFRVBD
QVBTID0gX1BSX0dFVF9LRUVQQ0FQUworY29uc3QgUFJfU1BFQ19QUkNUTCA9IF9QUl9TUEVDX1BS
Q1RMCitjb25zdCBQUl9USU1JTkdfVElNRVNUQU1QID0gX1BSX1RJTUlOR19USU1FU1RBTVAKK2Nv
bnN0IFBSX1VOQUxJR05fU0lHQlVTID0gX1BSX1VOQUxJR05fU0lHQlVTCitjb25zdCBQVFJBQ0Vf
RVZFTlRfRVhFQyA9IF9QVFJBQ0VfRVZFTlRfRVhFQworY29uc3QgUFRSQUNFX0VWRU5UX0VYSVQg
PSBfUFRSQUNFX0VWRU5UX0VYSVQKK2NvbnN0IFBUUkFDRV9PX1RSQUNFQ0xPTkUgPSBfUFRSQUNF
X09fVFJBQ0VDTE9ORQorY29uc3QgUFRSQUNFX0FUVEFDSCA9IF9QVFJBQ0VfQVRUQUNICitjb25z
dCBQVFJBQ0VfR0VURlBYUkVHUyA9IF9QVFJBQ0VfR0VURlBYUkVHUworY29uc3QgUFRSQUNFX1BF
RUtVU0VSID0gX1BUUkFDRV9QRUVLVVNFUgorY29uc3QgUFRSQUNFX0NPTlQgPSBfUFRSQUNFX0NP
TlQKK2NvbnN0IFBUUkFDRV9QRUVLVEVYVCA9IF9QVFJBQ0VfUEVFS1RFWFQKK2NvbnN0IFBUUkFD
RV9HRVRFVkVOVE1TRyA9IF9QVFJBQ0VfR0VURVZFTlRNU0cKK2NvbnN0IFBUUkFDRV9QRUVLREFU
QSA9IF9QVFJBQ0VfUEVFS0RBVEEKK2NvbnN0IFBUUkFDRV9TWVNDQUxMID0gX1BUUkFDRV9TWVND
QUxMCitjb25zdCBQVFJBQ0VfRVZFTlRfVkZPUktfRE9ORSA9IF9QVFJBQ0VfRVZFTlRfVkZPUktf
RE9ORQorY29uc3QgUFRSQUNFX09fRVhJVEtJTEwgPSBfUFRSQUNFX09fRVhJVEtJTEwKK2NvbnN0
IFBUUkFDRV9TSU5HTEVTVEVQID0gX1BUUkFDRV9TSU5HTEVTVEVQCitjb25zdCBQVFJBQ0VfUE9L
RURBVEEgPSBfUFRSQUNFX1BPS0VEQVRBCitjb25zdCBQVFJBQ0VfU0VUT1BUSU9OUyA9IF9QVFJB
Q0VfU0VUT1BUSU9OUworY29uc3QgUFRSQUNFX09fTUFTSyA9IF9QVFJBQ0VfT19NQVNLCitjb25z
dCBQVFJBQ0VfU0VUU0lHSU5GTyA9IF9QVFJBQ0VfU0VUU0lHSU5GTworY29uc3QgUFRSQUNFX1NJ
TkdMRUJMT0NLID0gX1BUUkFDRV9TSU5HTEVCTE9DSworY29uc3QgUFRSQUNFX0lOVEVSUlVQVCA9
IF9QVFJBQ0VfSU5URVJSVVBUCitjb25zdCBQVFJBQ0VfT0xEU0VUT1BUSU9OUyA9IF9QVFJBQ0Vf
T0xEU0VUT1BUSU9OUworY29uc3QgUFRSQUNFX0VWRU5UX1ZGT1JLID0gX1BUUkFDRV9FVkVOVF9W
Rk9SSworY29uc3QgUFRSQUNFX1RSQUNFTUUgPSBfUFRSQUNFX1RSQUNFTUUKK2NvbnN0IFBUUkFD
RV9TRUlaRSA9IF9QVFJBQ0VfU0VJWkUKK2NvbnN0IFBUUkFDRV9ERVRBQ0ggPSBfUFRSQUNFX0RF
VEFDSAorY29uc3QgUFRSQUNFX0dFVFNJR0lORk8gPSBfUFRSQUNFX0dFVFNJR0lORk8KK2NvbnN0
IFBUUkFDRV9FVkVOVF9TRUNDT01QID0gX1BUUkFDRV9FVkVOVF9TRUNDT01QCitjb25zdCBQVFJB
Q0VfT19TVVNQRU5EX1NFQ0NPTVAgPSBfUFRSQUNFX09fU1VTUEVORF9TRUNDT01QCitjb25zdCBQ
VFJBQ0VfU0VUX1RIUkVBRF9BUkVBID0gX1BUUkFDRV9TRVRfVEhSRUFEX0FSRUEKK2NvbnN0IFBU
UkFDRV9QRUVLU0lHSU5GTyA9IF9QVFJBQ0VfUEVFS1NJR0lORk8KK2NvbnN0IFBUUkFDRV9TWVNF
TVVfU0lOR0xFU1RFUCA9IF9QVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAKK2NvbnN0IFBUUkFDRV9P
X1RSQUNFRk9SSyA9IF9QVFJBQ0VfT19UUkFDRUZPUksKK2NvbnN0IFBUUkFDRV9HRVRTSUdNQVNL
ID0gX1BUUkFDRV9HRVRTSUdNQVNLCitjb25zdCBQVFJBQ0VfUE9LRVVTRVIgPSBfUFRSQUNFX1BP
S0VVU0VSCitjb25zdCBQVFJBQ0VfU1lTRU1VID0gX1BUUkFDRV9TWVNFTVUKK2NvbnN0IFBUUkFD
RV9MSVNURU4gPSBfUFRSQUNFX0xJU1RFTgorY29uc3QgUFRSQUNFX1BFRUtTSUdJTkZPX1NIQVJF
RCA9IF9QVFJBQ0VfUEVFS1NJR0lORk9fU0hBUkVECitjb25zdCBQVFJBQ0VfUE9LRVVTUiA9IF9Q
VFJBQ0VfUE9LRVVTUgorY29uc3QgUFRSQUNFX0tJTEwgPSBfUFRSQUNFX0tJTEwKK2NvbnN0IFBU
UkFDRV9PX1RSQUNFU1lTR09PRCA9IF9QVFJBQ0VfT19UUkFDRVNZU0dPT0QKK2NvbnN0IFBUUkFD
RV9PX1RSQUNFRVhFQyA9IF9QVFJBQ0VfT19UUkFDRUVYRUMKK2NvbnN0IFBUUkFDRV9PX1RSQUNF
VkZPUktET05FID0gX1BUUkFDRV9PX1RSQUNFVkZPUktET05FCitjb25zdCBQVFJBQ0VfR0VUUkVH
U0VUID0gX1BUUkFDRV9HRVRSRUdTRVQKK2NvbnN0IFBUUkFDRV9PX1RSQUNFRVhJVCA9IF9QVFJB
Q0VfT19UUkFDRUVYSVQKK2NvbnN0IFBUUkFDRV9FVkVOVF9DTE9ORSA9IF9QVFJBQ0VfRVZFTlRf
Q0xPTkUKK2NvbnN0IFBUUkFDRV9HRVRSRUdTID0gX1BUUkFDRV9HRVRSRUdTCitjb25zdCBQVFJB
Q0VfT19UUkFDRVZGT1JLID0gX1BUUkFDRV9PX1RSQUNFVkZPUksKK2NvbnN0IFBUUkFDRV9TRUND
T01QX0dFVF9GSUxURVIgPSBfUFRSQUNFX1NFQ0NPTVBfR0VUX0ZJTFRFUgorY29uc3QgUFRSQUNF
X1BFRUtVU1IgPSBfUFRSQUNFX1BFRUtVU1IKK2NvbnN0IFBUUkFDRV9TRVRSRUdTRVQgPSBfUFRS
QUNFX1NFVFJFR1NFVAorY29uc3QgUFRSQUNFX1NFVEZQWFJFR1MgPSBfUFRSQUNFX1NFVEZQWFJF
R1MKK2NvbnN0IFBUUkFDRV9HRVRGUFJFR1MgPSBfUFRSQUNFX0dFVEZQUkVHUworY29uc3QgUFRS
QUNFX0VWRU5UX0ZPUksgPSBfUFRSQUNFX0VWRU5UX0ZPUksKK2NvbnN0IFBUUkFDRV9HRVRfVEhS
RUFEX0FSRUEgPSBfUFRSQUNFX0dFVF9USFJFQURfQVJFQQorY29uc3QgUFRSQUNFX1NFVFNJR01B
U0sgPSBfUFRSQUNFX1NFVFNJR01BU0sKK2NvbnN0IFBUUkFDRV9BUkNIX1BSQ1RMID0gX1BUUkFD
RV9BUkNIX1BSQ1RMCitjb25zdCBQVFJBQ0VfU0VDQ09NUF9HRVRfTUVUQURBVEEgPSBfUFRSQUNF
X1NFQ0NPTVBfR0VUX01FVEFEQVRBCitjb25zdCBQVFJBQ0VfT19UUkFDRVNFQ0NPTVAgPSBfUFRS
QUNFX09fVFJBQ0VTRUNDT01QCitjb25zdCBQVFJBQ0VfUE9LRVRFWFQgPSBfUFRSQUNFX1BPS0VU
RVhUCitjb25zdCBQVFJBQ0VfRVZFTlRfU1RPUCA9IF9QVFJBQ0VfRVZFTlRfU1RPUAorY29uc3Qg
UFRSQUNFX1NFVFJFR1MgPSBfUFRSQUNFX1NFVFJFR1MKK2NvbnN0IFBUUkFDRV9TRVRGUFJFR1Mg
PSBfUFRSQUNFX1NFVEZQUkVHUwordHlwZSBQdHJhY2VSZWdzIHN0cnVjdCB7IFIxNSB1aW50NjQ7
IFIxNCB1aW50NjQ7IFIxMyB1aW50NjQ7IFIxMiB1aW50NjQ7IFJicCB1aW50NjQ7IFJieCB1aW50
NjQ7IFIxMSB1aW50NjQ7IFIxMCB1aW50NjQ7IFI5IHVpbnQ2NDsgUjggdWludDY0OyBSYXggdWlu
dDY0OyBSY3ggdWludDY0OyBSZHggdWludDY0OyBSc2kgdWludDY0OyBSZGkgdWludDY0OyBPcmln
X3JheCB1aW50NjQ7IFJpcCB1aW50NjQ7IENzIHVpbnQ2NDsgRWZsYWdzIHVpbnQ2NDsgUnNwIHVp
bnQ2NDsgU3MgdWludDY0OyBGc19iYXNlIHVpbnQ2NDsgR3NfYmFzZSB1aW50NjQ7IERzIHVpbnQ2
NDsgRXMgdWludDY0OyBGcyB1aW50NjQ7IEdzIHVpbnQ2NDsgfQordHlwZSBTaXplX3QgX3NpemVf
dAordHlwZSBTc2l6ZV90IF9zc2l6ZV90Cit0eXBlIE9mZnNldF90IF9vZmY2NF90Cit0eXBlIE1v
ZGVfdCBfbW9kZV90Cit0eXBlIFBpZF90IF9waWRfdAordHlwZSBVaWRfdCBfdWlkX3QKK3R5cGUg
R2lkX3QgX2dpZF90Cit0eXBlIFNvY2tsZW5fdCBfc29ja2xlbl90Cit0eXBlIF9DX2ludCBpbnQz
MgordHlwZSBfQ191aW50IHVpbnQzMgordHlwZSBfQ19sb25nIGludDY0Cit0eXBlIF9DX3Vsb25n
IHVpbnQ2NAordHlwZSBUaW1lX3QgX3RpbWVfdAordHlwZSBUaW1ldmFsX3NlY190IGludDY0Cit0
eXBlIFRpbWV2YWxfdXNlY190IGludDY0Cit0eXBlIFRpbWV2YWwgc3RydWN0IHsgU2VjIFRpbWV2
YWxfc2VjX3Q7IFVzZWMgVGltZXZhbF91c2VjX3Q7IH0KK3R5cGUgVGltZXNwZWNfc2VjX3QgaW50
NjQKK3R5cGUgVGltZXNwZWNfbnNlY190IGludDY0Cit0eXBlIFRpbWVzcGVjIHN0cnVjdCB7IFNl
YyBUaW1lc3BlY19zZWNfdDsgTnNlYyBUaW1lc3BlY19uc2VjX3Q7IH0KK3R5cGUgVG1zIHN0cnVj
dCB7IFV0aW1lIGludDY0OyBTdGltZSBpbnQ2NDsgQ3V0aW1lIGludDY0OyBDc3RpbWUgaW50NjQ7
IH0KK3R5cGUgU3RhdF90IHN0cnVjdCB7IERldiB1aW50NjQ7IElubyB1aW50NjQ7IE5saW5rIHVp
bnQ2NDsgTW9kZSB1aW50MzI7IFVpZCB1aW50MzI7IEdpZCB1aW50MzI7IF9fcGFkMCBpbnQzMjsg
UmRldiB1aW50NjQ7IFNpemUgaW50NjQ7IEJsa3NpemUgaW50NjQ7IEJsb2NrcyBpbnQ2NDsgQXRp
bSBUaW1lc3BlYzsgTXRpbSBUaW1lc3BlYzsgQ3RpbSBUaW1lc3BlYzsgX19nbGliY19yZXNlcnZl
ZCBbMisxXWludDY0OyB9Cit0eXBlIERpcmVudCBzdHJ1Y3QgeyBJbm8gdWludDY0OyBPZmYgaW50
NjQ7IFJlY2xlbiB1aW50MTY7IFR5cGUgdWludDg7IE5hbWUgWzI1NSsxXWJ5dGU7IEdvZHVtcF8w
X3BhZCBbNV1ieXRlOyB9Cit0eXBlIERJUiBfRElSCitjb25zdCBEVF9DSFIgPSBfRFRfQ0hSCitj
b25zdCBEVF9SRUcgPSBfRFRfUkVHCitjb25zdCBEVF9TT0NLID0gX0RUX1NPQ0sKK2NvbnN0IERU
X0JMSyA9IF9EVF9CTEsKK2NvbnN0IERUX1dIVCA9IF9EVF9XSFQKK2NvbnN0IERUX0xOSyA9IF9E
VF9MTksKK2NvbnN0IERUX0ZJRk8gPSBfRFRfRklGTworY29uc3QgRFRfVU5LTk9XTiA9IF9EVF9V
TktOT1dOCitjb25zdCBEVF9ESVIgPSBfRFRfRElSCit0eXBlIFJ1c2FnZSBzdHJ1Y3QgeyBVdGlt
ZSBUaW1ldmFsOyBTdGltZSBUaW1ldmFsOyBNYXhyc3MgaW50NjQ7IEl4cnNzIGludDY0OyBJZHJz
cyBpbnQ2NDsgSXNyc3MgaW50NjQ7IE1pbmZsdCBpbnQ2NDsgTWFqZmx0IGludDY0OyBOc3dhcCBp
bnQ2NDsgSW5ibG9jayBpbnQ2NDsgT3VibG9jayBpbnQ2NDsgTXNnc25kIGludDY0OyBNc2dyY3Yg
aW50NjQ7IE5zaWduYWxzIGludDY0OyBOdmNzdyBpbnQ2NDsgTml2Y3N3IGludDY0OyB9Citjb25z
dCBSVVNBR0VfU0VMRiA9IF9SVVNBR0VfU0VMRgorY29uc3QgUlVTQUdFX0NISUxEUkVOID0gX1JV
U0FHRV9DSElMRFJFTgorY29uc3QgUlVTQUdFX1RIUkVBRCA9IF9SVVNBR0VfVEhSRUFECit0eXBl
IFV0c25hbWUgc3RydWN0IHsgU3lzbmFtZSBbNjQrMV1pbnQ4OyBOb2RlbmFtZSBbNjQrMV1pbnQ4
OyBSZWxlYXNlIFs2NCsxXWludDg7IFZlcnNpb24gWzY0KzFdaW50ODsgTWFjaGluZSBbNjQrMV1p
bnQ4OyBEb21haW5uYW1lIFs2NCsxXWludDg7IH0KK3R5cGUgSW92ZWNfbGVuX3QgdWludDY0Cit0
eXBlIElvdmVjIHN0cnVjdCB7IEJhc2UgKmJ5dGU7IExlbiBJb3ZlY19sZW5fdDsgfQordHlwZSBN
c2doZHJfY29udHJvbGxlbl90IHVpbnQ2NAordHlwZSBNc2doZHIgc3RydWN0IHsgTmFtZSAqYnl0
ZTsgTmFtZWxlbiB1aW50MzI7IElvdiAqSW92ZWM7IElvdmxlbiB1aW50NjQ7IENvbnRyb2wgKmJ5
dGU7IENvbnRyb2xsZW4gTXNnaGRyX2NvbnRyb2xsZW5fdDsgRmxhZ3MgaW50MzI7IEdvZHVtcF8w
X3BhZCBbNF1ieXRlOyB9Citjb25zdCBNU0dfRU9SID0gX01TR19FT1IKK2NvbnN0IE1TR19DTVNH
X0NMT0VYRUMgPSBfTVNHX0NNU0dfQ0xPRVhFQworY29uc3QgTVNHX0RPTlRXQUlUID0gX01TR19E
T05UV0FJVAorY29uc3QgTVNHX1dBSVRGT1JPTkUgPSBfTVNHX1dBSVRGT1JPTkUKK2NvbnN0IE1T
R19SU1QgPSBfTVNHX1JTVAorY29uc3QgTVNHX0ZJTiA9IF9NU0dfRklOCitjb25zdCBNU0dfQkFU
Q0ggPSBfTVNHX0JBVENICitjb25zdCBNU0dfUFJPWFkgPSBfTVNHX1BST1hZCitjb25zdCBNU0df
Q09ORklSTSA9IF9NU0dfQ09ORklSTQorY29uc3QgTVNHX0VSUlFVRVVFID0gX01TR19FUlJRVUVV
RQorY29uc3QgTVNHX1RSWUhBUkQgPSBfTVNHX1RSWUhBUkQKK2NvbnN0IE1TR19QRUVLID0gX01T
R19QRUVLCitjb25zdCBNU0dfWkVST0NPUFkgPSBfTVNHX1pFUk9DT1BZCitjb25zdCBNU0dfTU9S
RSA9IF9NU0dfTU9SRQorY29uc3QgTVNHX05PU0lHTkFMID0gX01TR19OT1NJR05BTAorY29uc3Qg
TVNHX09PQiA9IF9NU0dfT09CCitjb25zdCBNU0dfQ1RSVU5DID0gX01TR19DVFJVTkMKK2NvbnN0
IE1TR19TWU4gPSBfTVNHX1NZTgorY29uc3QgTVNHX1RSVU5DID0gX01TR19UUlVOQworY29uc3Qg
TVNHX0RPTlRST1VURSA9IF9NU0dfRE9OVFJPVVRFCitjb25zdCBNU0dfV0FJVEFMTCA9IF9NU0df
V0FJVEFMTAorY29uc3QgTVNHX0ZBU1RPUEVOID0gX01TR19GQVNUT1BFTgordHlwZSBDbXNnaGRy
X2xlbl90IHVpbnQ2NAordHlwZSBDbXNnaGRyIHN0cnVjdCB7IExlbiBDbXNnaGRyX2xlbl90OyBM
ZXZlbCBpbnQzMjsgVHlwZSBpbnQzMjsgX19jbXNnX2RhdGEgWzBddWludDg7IH0KK2NvbnN0IFND
TV9USU1FU1RBTVBJTkcgPSBfU0NNX1RJTUVTVEFNUElORworY29uc3QgU0NNX1RJTUVTVEFNUElO
R19QS1RJTkZPID0gX1NDTV9USU1FU1RBTVBJTkdfUEtUSU5GTworY29uc3QgU0NNX1RYVElNRSA9
IF9TQ01fVFhUSU1FCitjb25zdCBTQ01fVElNRVNUQU1QSU5HX09QVF9TVEFUUyA9IF9TQ01fVElN
RVNUQU1QSU5HX09QVF9TVEFUUworY29uc3QgU0NNX1JJR0hUUyA9IF9TQ01fUklHSFRTCitjb25z
dCBTQ01fVElNRVNUQU1QTlMgPSBfU0NNX1RJTUVTVEFNUE5TCitjb25zdCBTQ01fQ1JFREVOVElB
TFMgPSBfU0NNX0NSRURFTlRJQUxTCitjb25zdCBTQ01fVElNRVNUQU1QID0gX1NDTV9USU1FU1RB
TVAKK2NvbnN0IFNDTV9XSUZJX1NUQVRVUyA9IF9TQ01fV0lGSV9TVEFUVVMKK3R5cGUgVWNyZWQg
c3RydWN0IHsgUGlkIGludDMyOyBVaWQgdWludDMyOyBHaWQgdWludDMyOyB9Cit0eXBlIElQTXJl
cSBzdHJ1Y3QgeyBNdWx0aWFkZHIgWzRdYnl0ZTsgSW50ZXJmYWNlIFs0XWJ5dGU7IH0KK3R5cGUg
SVB2Nk1yZXEgc3RydWN0IHsgTXVsdGlhZGRyIFsxNl1ieXRlOyBJbnRlcmZhY2UgdWludDMyOyB9
Cit0eXBlIElQTXJlcW4gc3RydWN0IHsgTXVsdGlhZGRyIFs0XWJ5dGU7IEFkZHJlc3MgWzRdYnl0
ZTsgSWZpbmRleCBpbnQzMjsgfQordHlwZSBJQ01QdjZGaWx0ZXIgc3RydWN0IHsgaWNtcDZfRmls
dCBbNysxXXVpbnQzMjsgfQordHlwZSBJUHY2TVRVSW5mbyBzdHJ1Y3QgeyBBZGRyIFJhd1NvY2th
ZGRySW5ldDY7IE10dSB1aW50MzI7IH0KK3R5cGUgZmRzX2JpdHNfdHlwZSBpbnQ2NAordHlwZSBB
ZGRyaW5mbyBzdHJ1Y3QgeyBBaV9mbGFncyBpbnQzMjsgQWlfZmFtaWx5IGludDMyOyBBaV9zb2Nr
dHlwZSBpbnQzMjsgQWlfcHJvdG9jb2wgaW50MzI7IEFpX2FkZHJsZW4gdWludDMyOyBBaV9hZGRy
ICpfc29ja2FkZHI7IEFpX2Nhbm9ubmFtZSAqaW50ODsgQWlfbmV4dCAqQWRkcmluZm87IH0KK2Nv
bnN0IEFJX05VTUVSSUNIT1NUID0gX0FJX05VTUVSSUNIT1NUCitjb25zdCBBSV9DQU5PTklETiA9
IF9BSV9DQU5PTklETgorY29uc3QgQUlfQUxMID0gX0FJX0FMTAorY29uc3QgQUlfQ0FOT05OQU1F
ID0gX0FJX0NBTk9OTkFNRQorY29uc3QgQUlfVjRNQVBQRUQgPSBfQUlfVjRNQVBQRUQKK2NvbnN0
IEFJX1BBU1NJVkUgPSBfQUlfUEFTU0lWRQorY29uc3QgQUlfTlVNRVJJQ1NFUlYgPSBfQUlfTlVN
RVJJQ1NFUlYKK2NvbnN0IEFJX0lETiA9IF9BSV9JRE4KK2NvbnN0IEFJX0FERFJDT05GSUcgPSBf
QUlfQUREUkNPTkZJRworY29uc3QgRUFJX0ZBSUwgPSBfRUFJX0ZBSUwKK2NvbnN0IEVBSV9OT0RB
VEEgPSBfRUFJX05PREFUQQorY29uc3QgRUFJX05PTkFNRSA9IF9FQUlfTk9OQU1FCitjb25zdCBF
QUlfSU5QUk9HUkVTUyA9IF9FQUlfSU5QUk9HUkVTUworY29uc3QgRUFJX1NZU1RFTSA9IF9FQUlf
U1lTVEVNCitjb25zdCBFQUlfQUdBSU4gPSBfRUFJX0FHQUlOCitjb25zdCBFQUlfTUVNT1JZID0g
X0VBSV9NRU1PUlkKK2NvbnN0IEVBSV9DQU5DRUxFRCA9IF9FQUlfQ0FOQ0VMRUQKK2NvbnN0IEVB
SV9BRERSRkFNSUxZID0gX0VBSV9BRERSRkFNSUxZCitjb25zdCBFQUlfTk9UQ0FOQ0VMRUQgPSBf
RUFJX05PVENBTkNFTEVECitjb25zdCBFQUlfSUROX0VOQ09ERSA9IF9FQUlfSUROX0VOQ09ERQor
Y29uc3QgRUFJX0ZBTUlMWSA9IF9FQUlfRkFNSUxZCitjb25zdCBFQUlfQkFERkxBR1MgPSBfRUFJ
X0JBREZMQUdTCitjb25zdCBFQUlfSU5UUiA9IF9FQUlfSU5UUgorY29uc3QgRUFJX1NPQ0tUWVBF
ID0gX0VBSV9TT0NLVFlQRQorY29uc3QgRUFJX1NFUlZJQ0UgPSBfRUFJX1NFUlZJQ0UKK2NvbnN0
IEVBSV9BTExET05FID0gX0VBSV9BTExET05FCitjb25zdCBFQUlfT1ZFUkZMT1cgPSBfRUFJX09W
RVJGTE9XCitjb25zdCBOSV9OVU1FUklDU0VSViA9IF9OSV9OVU1FUklDU0VSVgorY29uc3QgTklf
TkFNRVJFUUQgPSBfTklfTkFNRVJFUUQKK2NvbnN0IE5JX05PRlFETiA9IF9OSV9OT0ZRRE4KK2Nv
bnN0IE5JX05VTUVSSUNIT1NUID0gX05JX05VTUVSSUNIT1NUCitjb25zdCBOSV9JRE4gPSBfTklf
SUROCitjb25zdCBOSV9ER1JBTSA9IF9OSV9ER1JBTQorY29uc3QgTklfTUFYSE9TVCA9IF9OSV9N
QVhIT1NUCitjb25zdCBOSV9NQVhTRVJWID0gX05JX01BWFNFUlYKK3R5cGUgUGFzc3dkIHN0cnVj
dCB7IFB3X25hbWUgKmludDg7IFB3X3Bhc3N3ZCAqaW50ODsgUHdfdWlkIHVpbnQzMjsgUHdfZ2lk
IHVpbnQzMjsgUHdfZ2Vjb3MgKmludDg7IFB3X2RpciAqaW50ODsgUHdfc2hlbGwgKmludDg7IH0K
K3R5cGUgR3JvdXAgc3RydWN0IHsgR3JfbmFtZSAqaW50ODsgR3JfcGFzc3dkICppbnQ4OyBHcl9n
aWQgdWludDMyOyBHcl9tZW0gKippbnQ4OyB9Citjb25zdCBUSU9DR0lDT1VOVCA9IF9USU9DR0lD
T1VOVAorY29uc3QgVElPQ1NFUlNFVE1VTFRJID0gX1RJT0NTRVJTRVRNVUxUSQorY29uc3QgVElP
Q0VYQ0wgPSBfVElPQ0VYQ0wKK2NvbnN0IFRJT0NNU0VUID0gX1RJT0NNU0VUCitjb25zdCBUSU9D
U1NPRlRDQVIgPSBfVElPQ1NTT0ZUQ0FSCitjb25zdCBUSU9DU1BHUlAgPSBfVElPQ1NQR1JQCitj
b25zdCBUSU9DUEtUX0ZMVVNIUkVBRCA9IF9USU9DUEtUX0ZMVVNIUkVBRAorY29uc3QgVElPQ1NF
Ul9URU1UID0gX1RJT0NTRVJfVEVNVAorY29uc3QgVElPQ1BLVF9GTFVTSFdSSVRFID0gX1RJT0NQ
S1RfRkxVU0hXUklURQorY29uc3QgVElPQ1NMQ0tUUk1JT1MgPSBfVElPQ1NMQ0tUUk1JT1MKK2Nv
bnN0IFRJT0NHRVREID0gX1RJT0NHRVRECitjb25zdCBUSU9DTUlXQUlUID0gX1RJT0NNSVdBSVQK
K2NvbnN0IFRJT0NOT1RUWSA9IF9USU9DTk9UVFkKK2NvbnN0IFRJT0NHUEdSUCA9IF9USU9DR1BH
UlAKK2NvbnN0IFRJT0NQS1QgPSBfVElPQ1BLVAorY29uc3QgVElPQ01fUlRTID0gX1RJT0NNX1JU
UworY29uc3QgVElPQ1NSUzQ4NSA9IF9USU9DU1JTNDg1Citjb25zdCBUSU9DT1VUUSA9IF9USU9D
T1VUUQorY29uc3QgVElPQ01fRFRSID0gX1RJT0NNX0RUUgorY29uc3QgVElPQ1NXSU5TWiA9IF9U
SU9DU1dJTlNaCitjb25zdCBUSU9DU0JSSyA9IF9USU9DU0JSSworY29uc3QgVElPQ1NFUkNPTkZJ
RyA9IF9USU9DU0VSQ09ORklHCitjb25zdCBUSU9DSU5RID0gX1RJT0NJTlEKK2NvbnN0IFRJT0NN
QklTID0gX1RJT0NNQklTCitjb25zdCBUSU9DTUdFVCA9IF9USU9DTUdFVAorY29uc3QgVElPQ05Y
Q0wgPSBfVElPQ05YQ0wKK2NvbnN0IFRJT0NTVEkgPSBfVElPQ1NUSQorY29uc3QgVElPQ01fRFNS
ID0gX1RJT0NNX0RTUgorY29uc3QgVElPQ0dSUzQ4NSA9IF9USU9DR1JTNDg1Citjb25zdCBUSU9D
TV9DRCA9IF9USU9DTV9DRAorY29uc3QgVElPQ0dXSU5TWiA9IF9USU9DR1dJTlNaCitjb25zdCBU
SU9DU0VSU1dJTEQgPSBfVElPQ1NFUlNXSUxECitjb25zdCBUSU9DTV9DQVIgPSBfVElPQ01fQ0FS
Citjb25zdCBUSU9DQ0JSSyA9IF9USU9DQ0JSSworY29uc3QgVElPQ0dTT0ZUQ0FSID0gX1RJT0NH
U09GVENBUgorY29uc3QgVElPQ01fTEUgPSBfVElPQ01fTEUKK2NvbnN0IFRJT0NQS1RfSU9DVEwg
PSBfVElPQ1BLVF9JT0NUTAorY29uc3QgVElPQ1BLVF9TVEFSVCA9IF9USU9DUEtUX1NUQVJUCitj
b25zdCBUSU9DU0VSR0VUTVVMVEkgPSBfVElPQ1NFUkdFVE1VTFRJCitjb25zdCBUSU9DR0xDS1RS
TUlPUyA9IF9USU9DR0xDS1RSTUlPUworY29uc3QgVElPQ01fUkkgPSBfVElPQ01fUkkKK2NvbnN0
IFRJT0NNX1NSID0gX1RJT0NNX1NSCitjb25zdCBUSU9DTV9TVCA9IF9USU9DTV9TVAorY29uc3Qg
VElPQ0NPTlMgPSBfVElPQ0NPTlMKK2NvbnN0IFRJT0NWSEFOR1VQID0gX1RJT0NWSEFOR1VQCitj
b25zdCBUSU9DUEtUX0RPU1RPUCA9IF9USU9DUEtUX0RPU1RPUAorY29uc3QgVElPQ01CSUMgPSBf
VElPQ01CSUMKK2NvbnN0IFRJT0NHU0lEID0gX1RJT0NHU0lECitjb25zdCBUSU9DU0VSR1dJTEQg
PSBfVElPQ1NFUkdXSUxECitjb25zdCBUSU9DTV9DVFMgPSBfVElPQ01fQ1RTCitjb25zdCBUSU9D
UEtUX0RBVEEgPSBfVElPQ1BLVF9EQVRBCitjb25zdCBUSU9DU0VURCA9IF9USU9DU0VURAorY29u
c3QgVElPQ1NFUkdFVExTUiA9IF9USU9DU0VSR0VUTFNSCitjb25zdCBUSU9DU0VSR1NUUlVDVCA9
IF9USU9DU0VSR1NUUlVDVAorY29uc3QgVElPQ0xJTlVYID0gX1RJT0NMSU5VWAorY29uc3QgVElP
Q1NTRVJJQUwgPSBfVElPQ1NTRVJJQUwKK2NvbnN0IFRJT0NQS1RfTk9TVE9QID0gX1RJT0NQS1Rf
Tk9TVE9QCitjb25zdCBUSU9DR1NFUklBTCA9IF9USU9DR1NFUklBTAorY29uc3QgVElPQ1BLVF9T
VE9QID0gX1RJT0NQS1RfU1RPUAorY29uc3QgVElPQ01fUk5HID0gX1RJT0NNX1JORworY29uc3Qg
VElPQ1NDVFRZID0gX1RJT0NTQ1RUWQorY29uc3QgVElPQ0dQVE4gPSBfVElPQ0dQVE5fdmFsCitj
b25zdCBUSU9DU1BUTENLID0gX1RJT0NTUFRMQ0tfdmFsCitjb25zdCBUSU9DR0RFViA9IF9USU9D
R0RFVl92YWwKK2NvbnN0IFRJT0NTSUcgPSBfVElPQ1NJR192YWwKK2NvbnN0IFRVTlNFVE5PQ1NV
TSA9IF9UVU5TRVROT0NTVU1fdmFsCitjb25zdCBUVU5TRVRERUJVRyA9IF9UVU5TRVRERUJVR192
YWwKK2NvbnN0IFRVTlNFVElGRiA9IF9UVU5TRVRJRkZfdmFsCitjb25zdCBUVU5TRVRQRVJTSVNU
ID0gX1RVTlNFVFBFUlNJU1RfdmFsCitjb25zdCBUVU5TRVRPV05FUiA9IF9UVU5TRVRPV05FUl92
YWwKK2NvbnN0IFRVTlNFVExJTksgPSBfVFVOU0VUTElOS192YWwKK2NvbnN0IFRVTlNFVEdST1VQ
ID0gX1RVTlNFVEdST1VQX3ZhbAorY29uc3QgVFVOR0VURkVBVFVSRVMgPSBfVFVOR0VURkVBVFVS
RVNfdmFsCitjb25zdCBUVU5TRVRPRkZMT0FEID0gX1RVTlNFVE9GRkxPQURfdmFsCitjb25zdCBU
VU5TRVRUWEZJTFRFUiA9IF9UVU5TRVRUWEZJTFRFUl92YWwKK2NvbnN0IFRVTkdFVElGRiA9IF9U
VU5HRVRJRkZfdmFsCitjb25zdCBUVU5HRVRTTkRCVUYgPSBfVFVOR0VUU05EQlVGX3ZhbAorY29u
c3QgVFVOU0VUU05EQlVGID0gX1RVTlNFVFNOREJVRl92YWwKK2NvbnN0IFRVTkFUVEFDSEZJTFRF
UiA9IF9UVU5BVFRBQ0hGSUxURVJfdmFsCitjb25zdCBUVU5ERVRBQ0hGSUxURVIgPSBfVFVOREVU
QUNIRklMVEVSX3ZhbAorY29uc3QgVFVOR0VUVk5FVEhEUlNaID0gX1RVTkdFVFZORVRIRFJTWl92
YWwKK2NvbnN0IFRVTlNFVFZORVRIRFJTWiA9IF9UVU5TRVRWTkVUSERSU1pfdmFsCitjb25zdCBU
VU5TRVRRVUVVRSA9IF9UVU5TRVRRVUVVRV92YWwKK2NvbnN0IFRVTlNFVElGSU5ERVggPSBfVFVO
U0VUSUZJTkRFWF92YWwKK2NvbnN0IFRVTkdFVEZJTFRFUiA9IF9UVU5HRVRGSUxURVJfdmFsCitj
b25zdCBUQ0dFVEEgPSBfVENHRVRBCitjb25zdCBUQ0dFVFMgPSBfVENHRVRTCitjb25zdCBUQ0dF
VFggPSBfVENHRVRYCitjb25zdCBUQ1NFVEEgPSBfVENTRVRBCitjb25zdCBUQ1NFVEFXID0gX1RD
U0VUQVcKK2NvbnN0IFRDU0VUQUYgPSBfVENTRVRBRgorY29uc3QgVENTRVRTRiA9IF9UQ1NFVFNG
Citjb25zdCBUQ1NFVFNXID0gX1RDU0VUU1cKK2NvbnN0IFRDU0VUWEYgPSBfVENTRVRYRgorY29u
c3QgVENTRVRYVyA9IF9UQ1NFVFhXCitjb25zdCBUQ1NFVFMgPSBfVENTRVRTCitjb25zdCBUQ1NF
VFggPSBfVENTRVRYCit0eXBlIE5sTXNnaGRyIHN0cnVjdCB7IExlbiB1aW50MzI7IFR5cGUgdWlu
dDE2OyBGbGFncyB1aW50MTY7IFNlcSB1aW50MzI7IFBpZCB1aW50MzI7IH0KK2NvbnN0IE5MTV9G
X0FDSyA9IF9OTE1fRl9BQ0sKK2NvbnN0IE5MTV9GX1JPT1QgPSBfTkxNX0ZfUk9PVAorY29uc3Qg
TkxNX0ZfRUNITyA9IF9OTE1fRl9FQ0hPCitjb25zdCBOTE1TR0VSUl9BVFRSX09GRlMgPSBfTkxN
U0dFUlJfQVRUUl9PRkZTCitjb25zdCBOTE1fRl9EVU1QX0lOVFIgPSBfTkxNX0ZfRFVNUF9JTlRS
Citjb25zdCBOTE1fRl9BVE9NSUMgPSBfTkxNX0ZfQVRPTUlDCitjb25zdCBOTE1fRl9SRVFVRVNU
ID0gX05MTV9GX1JFUVVFU1QKK2NvbnN0IE5MTVNHX0VSUk9SID0gX05MTVNHX0VSUk9SCitjb25z
dCBOTE1TR19OT09QID0gX05MTVNHX05PT1AKK2NvbnN0IE5MTV9GX0RVTVBfRklMVEVSRUQgPSBf
TkxNX0ZfRFVNUF9GSUxURVJFRAorY29uc3QgTkxNX0ZfUkVQTEFDRSA9IF9OTE1fRl9SRVBMQUNF
Citjb25zdCBOTE1fRl9BQ0tfVExWUyA9IF9OTE1fRl9BQ0tfVExWUworY29uc3QgTkxNU0dfRE9O
RSA9IF9OTE1TR19ET05FCitjb25zdCBOTE1TR0VSUl9BVFRSX0NPT0tJRSA9IF9OTE1TR0VSUl9B
VFRSX0NPT0tJRQorY29uc3QgTkxNX0ZfQ0FQUEVEID0gX05MTV9GX0NBUFBFRAorY29uc3QgTkxN
X0ZfRVhDTCA9IF9OTE1fRl9FWENMCitjb25zdCBOTE1fRl9OT05SRUMgPSBfTkxNX0ZfTk9OUkVD
Citjb25zdCBOTE1TR19BTElHTlRPID0gX05MTVNHX0FMSUdOVE8KK2NvbnN0IE5MTV9GX01VTFRJ
ID0gX05MTV9GX01VTFRJCitjb25zdCBOTE1fRl9NQVRDSCA9IF9OTE1fRl9NQVRDSAorY29uc3Qg
TkxNU0dFUlJfQVRUUl9VTlVTRUQgPSBfTkxNU0dFUlJfQVRUUl9VTlVTRUQKK2NvbnN0IE5MTVNH
RVJSX0FUVFJfTVNHID0gX05MTVNHRVJSX0FUVFJfTVNHCitjb25zdCBOTE1TR19NSU5fVFlQRSA9
IF9OTE1TR19NSU5fVFlQRQorY29uc3QgTkxNU0dFUlJfQVRUUl9NQVggPSBfTkxNU0dFUlJfQVRU
Ul9NQVgKK2NvbnN0IE5MTV9GX0NSRUFURSA9IF9OTE1fRl9DUkVBVEUKK2NvbnN0IE5MTV9GX0RV
TVAgPSBfTkxNX0ZfRFVNUAorY29uc3QgTkxNU0dfT1ZFUlJVTiA9IF9OTE1TR19PVkVSUlVOCitj
b25zdCBOTE1fRl9BUFBFTkQgPSBfTkxNX0ZfQVBQRU5ECitjb25zdCBOTE1TR19IRFJMRU4gPSAo
X3NpemVvZl9ubG1zZ2hkciArIChOTE1TR19BTElHTlRPLTEpKSAmXiAoTkxNU0dfQUxJR05UTy0x
KQordHlwZSBSdE1zZyBzdHJ1Y3QgeyBGYW1pbHkgdWludDg7IERzdF9sZW4gdWludDg7IFNyY19s
ZW4gdWludDg7IFRvcyB1aW50ODsgVGFibGUgdWludDg7IFByb3RvY29sIHVpbnQ4OyBTY29wZSB1
aW50ODsgVHlwZSB1aW50ODsgRmxhZ3MgdWludDMyOyB9Cit0eXBlIFJ0R2VubXNnIHN0cnVjdCB7
IEZhbWlseSB1aW50ODsgfQorY29uc3QgUlRfU0NPUEVfVU5JVkVSU0UgPSBfUlRfU0NPUEVfVU5J
VkVSU0UKK2NvbnN0IFJUX0NMQVNTX01BWCA9IF9SVF9DTEFTU19NQVgKK2NvbnN0IFJUX1RBQkxF
X0xPQ0FMID0gX1JUX1RBQkxFX0xPQ0FMCitjb25zdCBSVF9DTEFTU19VTlNQRUMgPSBfUlRfQ0xB
U1NfVU5TUEVDCitjb25zdCBSVF9TQ09QRV9MSU5LID0gX1JUX1NDT1BFX0xJTksKK2NvbnN0IFJU
X1NDT1BFX1NJVEUgPSBfUlRfU0NPUEVfU0lURQorY29uc3QgUlRfVEFCTEVfTUFYID0gX1JUX1RB
QkxFX01BWAorY29uc3QgUlRfVEFCTEVfQ09NUEFUID0gX1JUX1RBQkxFX0NPTVBBVAorY29uc3Qg
UlRfU0NPUEVfTk9XSEVSRSA9IF9SVF9TQ09QRV9OT1dIRVJFCitjb25zdCBSVF9UQUJMRV9ERUZB
VUxUID0gX1JUX1RBQkxFX0RFRkFVTFQKK2NvbnN0IFJUX1NDT1BFX0hPU1QgPSBfUlRfU0NPUEVf
SE9TVAorY29uc3QgUlRfVEFCTEVfTUFJTiA9IF9SVF9UQUJMRV9NQUlOCitjb25zdCBSVF9UQUJM
RV9VTlNQRUMgPSBfUlRfVEFCTEVfVU5TUEVDCitjb25zdCBSVF9DTEFTU19MT0NBTCA9IF9SVF9D
TEFTU19MT0NBTAorY29uc3QgUlRfQ0xBU1NfTUFJTiA9IF9SVF9DTEFTU19NQUlOCitjb25zdCBS
VF9DTEFTU19ERUZBVUxUID0gX1JUX0NMQVNTX0RFRkFVTFQKK2NvbnN0IFJUQV9VTlNQRUMgPSBf
UlRBX1VOU1BFQworY29uc3QgUlRBX0lQX1BST1RPID0gX1JUQV9JUF9QUk9UTworY29uc3QgUlRB
WF9SVFRWQVIgPSBfUlRBWF9SVFRWQVIKK2NvbnN0IFJUQV9VSUQgPSBfUlRBX1VJRAorY29uc3Qg
UlRBX0NBQ0hFSU5GTyA9IF9SVEFfQ0FDSEVJTkZPCitjb25zdCBSVEFfTVVMVElQQVRIID0gX1JU
QV9NVUxUSVBBVEgKK2NvbnN0IFJUQVhfVU5TUEVDID0gX1JUQVhfVU5TUEVDCitjb25zdCBSVEFY
X0NDX0FMR08gPSBfUlRBWF9DQ19BTEdPCitjb25zdCBSVEFYX0lOSVRDV05EID0gX1JUQVhfSU5J
VENXTkQKK2NvbnN0IFJUQVhfRkVBVFVSRV9BTExGUkFHID0gX1JUQVhfRkVBVFVSRV9BTExGUkFH
Citjb25zdCBSVEFYX0ZFQVRVUkVfU0FDSyA9IF9SVEFYX0ZFQVRVUkVfU0FDSworY29uc3QgUlRB
X01BUksgPSBfUlRBX01BUksKK2NvbnN0IFJUQV9NRkNfU1RBVFMgPSBfUlRBX01GQ19TVEFUUwor
Y29uc3QgUlRBX1NSQyA9IF9SVEFfU1JDCitjb25zdCBSVEFfR0FURVdBWSA9IF9SVEFfR0FURVdB
WQorY29uc3QgUlRBWF9MT0NLID0gX1JUQVhfTE9DSworY29uc3QgUlRBWF9RVUlDS0FDSyA9IF9S
VEFYX1FVSUNLQUNLCitjb25zdCBSVEFfVFRMX1BST1BBR0FURSA9IF9SVEFfVFRMX1BST1BBR0FU
RQorY29uc3QgUlRBWF9GRUFUVVJFX0VDTiA9IF9SVEFYX0ZFQVRVUkVfRUNOCitjb25zdCBSVEFY
X1JFT1JERVJJTkcgPSBfUlRBWF9SRU9SREVSSU5HCitjb25zdCBSVEFfRFBPUlQgPSBfUlRBX0RQ
T1JUCitjb25zdCBSVEFfU0VTU0lPTiA9IF9SVEFfU0VTU0lPTgorY29uc3QgUlRBX1BSSU9SSVRZ
ID0gX1JUQV9QUklPUklUWQorY29uc3QgUlRBX05FV0RTVCA9IF9SVEFfTkVXRFNUCitjb25zdCBS
VEFYX0NXTkQgPSBfUlRBWF9DV05ECitjb25zdCBSVEFYX0lOSVRSV05EID0gX1JUQVhfSU5JVFJX
TkQKK2NvbnN0IFJUQV9QUkVGID0gX1JUQV9QUkVGCitjb25zdCBSVEFfRU5DQVAgPSBfUlRBX0VO
Q0FQCitjb25zdCBSVEFfRFNUID0gX1JUQV9EU1QKK2NvbnN0IFJUQV9FWFBJUkVTID0gX1JUQV9F
WFBJUkVTCitjb25zdCBSVEFfQUxJR05UTyA9IF9SVEFfQUxJR05UTworY29uc3QgUlRBWF9SVE9f
TUlOID0gX1JUQVhfUlRPX01JTgorY29uc3QgUlRBX0VOQ0FQX1RZUEUgPSBfUlRBX0VOQ0FQX1RZ
UEUKK2NvbnN0IFJUQV9NUF9BTEdPID0gX1JUQV9NUF9BTEdPCitjb25zdCBSVEFfSUlGID0gX1JU
QV9JSUYKK2NvbnN0IFJUQVhfSE9QTElNSVQgPSBfUlRBWF9IT1BMSU1JVAorY29uc3QgUlRBX1ZJ
QSA9IF9SVEFfVklBCitjb25zdCBSVEFfVEFCTEUgPSBfUlRBX1RBQkxFCitjb25zdCBSVEFfU1BP
UlQgPSBfUlRBX1NQT1JUCitjb25zdCBSVEFYX0ZFQVRVUkVfVElNRVNUQU1QID0gX1JUQVhfRkVB
VFVSRV9USU1FU1RBTVAKK2NvbnN0IFJUQVhfRkVBVFVSRVMgPSBfUlRBWF9GRUFUVVJFUworY29u
c3QgUlRBX01FVFJJQ1MgPSBfUlRBX01FVFJJQ1MKK2NvbnN0IFJUQV9QUk9UT0lORk8gPSBfUlRB
X1BST1RPSU5GTworY29uc3QgUlRBX0ZMT1cgPSBfUlRBX0ZMT1cKK2NvbnN0IFJUQV9QQUQgPSBf
UlRBX1BBRAorY29uc3QgUlRBWF9TU1RIUkVTSCA9IF9SVEFYX1NTVEhSRVNICitjb25zdCBSVEFf
T0lGID0gX1JUQV9PSUYKK2NvbnN0IFJUQVhfRkFTVE9QRU5fTk9fQ09PS0lFID0gX1JUQVhfRkFT
VE9QRU5fTk9fQ09PS0lFCitjb25zdCBSVEFfUFJFRlNSQyA9IF9SVEFfUFJFRlNSQworY29uc3Qg
UlRBWF9XSU5ET1cgPSBfUlRBWF9XSU5ET1cKK2NvbnN0IFJUQVhfQURWTVNTID0gX1JUQVhfQURW
TVNTCitjb25zdCBSVEFYX1JUVCA9IF9SVEFYX1JUVAorY29uc3QgUlRBWF9GRUFUVVJFX01BU0sg
PSBfUlRBWF9GRUFUVVJFX01BU0sKK2NvbnN0IFJUQVhfTVRVID0gX1JUQVhfTVRVCitjb25zdCBS
VEZfVVAgPSBfUlRGX1VQCitjb25zdCBSVEZfSU5URVJGQUNFID0gX1JURl9JTlRFUkZBQ0UKK2Nv
bnN0IFJURl9EWU5BTUlDID0gX1JURl9EWU5BTUlDCitjb25zdCBSVEZfWFJFU09MVkUgPSBfUlRG
X1hSRVNPTFZFCitjb25zdCBSVEZfTk9QTVRVRElTQyA9IF9SVEZfTk9QTVRVRElTQworY29uc3Qg
UlRGX01UVSA9IF9SVEZfTVRVCitjb25zdCBSVEZfREVGQVVMVCA9IF9SVEZfREVGQVVMVAorY29u
c3QgUlRGX0FMTE9OTElOSyA9IF9SVEZfQUxMT05MSU5LCitjb25zdCBSVEZfVEhST1cgPSBfUlRG
X1RIUk9XCitjb25zdCBSVEZfUkVJTlNUQVRFID0gX1JURl9SRUlOU1RBVEUKK2NvbnN0IFJURl9D
QUNIRSA9IF9SVEZfQ0FDSEUKK2NvbnN0IFJURl9GTE9XID0gX1JURl9GTE9XCitjb25zdCBSVEZf
TVNTID0gX1JURl9NU1MKK2NvbnN0IFJURl9BRERSQ09ORiA9IF9SVEZfQUREUkNPTkYKK2NvbnN0
IFJURl9NT0RJRklFRCA9IF9SVEZfTU9ESUZJRUQKK2NvbnN0IFJURl9IT1NUID0gX1JURl9IT1NU
Citjb25zdCBSVEZfTVVMVElDQVNUID0gX1JURl9NVUxUSUNBU1QKK2NvbnN0IFJURl9TVEFUSUMg
PSBfUlRGX1NUQVRJQworY29uc3QgUlRGX05BVCA9IF9SVEZfTkFUCitjb25zdCBSVEZfUE9MSUNZ
ID0gX1JURl9QT0xJQ1kKK2NvbnN0IFJURl9HQVRFV0FZID0gX1JURl9HQVRFV0FZCitjb25zdCBS
VEZfTE9DQUwgPSBfUlRGX0xPQ0FMCitjb25zdCBSVEZfV0lORE9XID0gX1JURl9XSU5ET1cKK2Nv
bnN0IFJURl9SRUpFQ1QgPSBfUlRGX1JFSkVDVAorY29uc3QgUlRGX05PRk9SV0FSRCA9IF9SVEZf
Tk9GT1JXQVJECitjb25zdCBSVEZfTk9ORVhUSE9QID0gX1JURl9OT05FWFRIT1AKK2NvbnN0IFJU
Rl9JUlRUID0gX1JURl9JUlRUCitjb25zdCBSVEZfTElOS1JUID0gX1JURl9MSU5LUlQKK2NvbnN0
IFJURl9CUk9BRENBU1QgPSBfUlRGX0JST0FEQ0FTVAorY29uc3QgUlRGX0FERFJDTEFTU01BU0sg
PSBfUlRGX0FERFJDTEFTU01BU0sKK2NvbnN0IFJUQ0ZfRE9SRURJUkVDVCA9IF9SVENGX0RPUkVE
SVJFQ1QKK2NvbnN0IFJUQ0ZfVkFMVkUgPSBfUlRDRl9WQUxWRQorY29uc3QgUlRDRl9OQVQgPSBf
UlRDRl9OQVQKK2NvbnN0IFJUQ0ZfTE9HID0gX1JUQ0ZfTE9HCitjb25zdCBSVENGX0RJUkVDVFNS
QyA9IF9SVENGX0RJUkVDVFNSQworY29uc3QgUlRDRl9NQVNRID0gX1JUQ0ZfTUFTUQorY29uc3Qg
UlRNX0RFTEFDVElPTiA9IF9SVE1fREVMQUNUSU9OCitjb25zdCBSVE1fRl9DTE9ORUQgPSBfUlRN
X0ZfQ0xPTkVECitjb25zdCBSVE1fU0VUTkVJR0hUQkwgPSBfUlRNX1NFVE5FSUdIVEJMCitjb25z
dCBSVE1fU0VUTElOSyA9IF9SVE1fU0VUTElOSworY29uc3QgUlRNX0dFVFFESVNDID0gX1JUTV9H
RVRRRElTQworY29uc3QgUlRNX05FV0NBQ0hFUkVQT1JUID0gX1JUTV9ORVdDQUNIRVJFUE9SVAor
Y29uc3QgUlRNX0dFVE1EQiA9IF9SVE1fR0VUTURCCitjb25zdCBSVE1fR0VUTElOSyA9IF9SVE1f
R0VUTElOSworY29uc3QgUlRNX05FV05FSUdIID0gX1JUTV9ORVdORUlHSAorY29uc3QgUlRNX05F
V1JPVVRFID0gX1JUTV9ORVdST1VURQorY29uc3QgUlRNX0dFVERDQiA9IF9SVE1fR0VURENCCitj
b25zdCBSVE1HUlBfSVBWNl9JRklORk8gPSBfUlRNR1JQX0lQVjZfSUZJTkZPCitjb25zdCBSVE1f
R0VUTkVJR0hUQkwgPSBfUlRNX0dFVE5FSUdIVEJMCitjb25zdCBSVE1fREVMTkVUQ09ORiA9IF9S
VE1fREVMTkVUQ09ORgorY29uc3QgUlRNR1JQX0lQVjZfTVJPVVRFID0gX1JUTUdSUF9JUFY2X01S
T1VURQorY29uc3QgUlRNX0dFVFRGSUxURVIgPSBfUlRNX0dFVFRGSUxURVIKK2NvbnN0IFJUTUdS
UF9ERUNuZXRfSUZBRERSID0gX1JUTUdSUF9ERUNuZXRfSUZBRERSCitjb25zdCBSVE1HUlBfSVBW
Nl9ST1VURSA9IF9SVE1HUlBfSVBWNl9ST1VURQorY29uc3QgUlRNX05FV0FERFIgPSBfUlRNX05F
V0FERFIKK2NvbnN0IFJUTV9ERUxOU0lEID0gX1JUTV9ERUxOU0lECitjb25zdCBSVE1fR0VUQU5Z
Q0FTVCA9IF9SVE1fR0VUQU5ZQ0FTVAorY29uc3QgUlRNX0dFVE5FSUdIID0gX1JUTV9HRVRORUlH
SAorY29uc3QgUlRNR1JQX1RDID0gX1JUTUdSUF9UQworY29uc3QgUlRNX05FV0NIQUlOID0gX1JU
TV9ORVdDSEFJTgorY29uc3QgUlRNX05FV0FDVElPTiA9IF9SVE1fTkVXQUNUSU9OCitjb25zdCBS
VE1HUlBfSVBWNl9JRkFERFIgPSBfUlRNR1JQX0lQVjZfSUZBRERSCitjb25zdCBSVE1fREVMUk9V
VEUgPSBfUlRNX0RFTFJPVVRFCitjb25zdCBSVE1fR0VUQUREUiA9IF9SVE1fR0VUQUREUgorY29u
c3QgUlRNX05FV1FESVNDID0gX1JUTV9ORVdRRElTQworY29uc3QgUlRNR1JQX0RFQ25ldF9ST1VU
RSA9IF9SVE1HUlBfREVDbmV0X1JPVVRFCitjb25zdCBSVE1fREVMTURCID0gX1JUTV9ERUxNREIK
K2NvbnN0IFJUTV9ERUxSVUxFID0gX1JUTV9ERUxSVUxFCitjb25zdCBSVE1fTkVXU1RBVFMgPSBf
UlRNX05FV1NUQVRTCitjb25zdCBSVE1fRl9GSUJfTUFUQ0ggPSBfUlRNX0ZfRklCX01BVENICitj
b25zdCBSVE1HUlBfSVBWNF9ST1VURSA9IF9SVE1HUlBfSVBWNF9ST1VURQorY29uc3QgUlRNU0df
T1ZFUlJVTiA9IF9SVE1TR19PVkVSUlVOCitjb25zdCBSVE1fTkVXTURCID0gX1JUTV9ORVdNREIK
K2NvbnN0IFJUTV9ERUxUQ0xBU1MgPSBfUlRNX0RFTFRDTEFTUworY29uc3QgUlRNX05FV1RDTEFT
UyA9IF9SVE1fTkVXVENMQVNTCitjb25zdCBSVE1HUlBfTElOSyA9IF9SVE1HUlBfTElOSworY29u
c3QgUlRNX05FV05EVVNFUk9QVCA9IF9SVE1fTkVXTkRVU0VST1BUCitjb25zdCBSVE1HUlBfSVBW
NF9NUk9VVEUgPSBfUlRNR1JQX0lQVjRfTVJPVVRFCitjb25zdCBSVE1fR0VUU1RBVFMgPSBfUlRN
X0dFVFNUQVRTCitjb25zdCBSVE1TR19ORVdSVUxFID0gX1JUTVNHX05FV1JVTEUKK2NvbnN0IFJU
TV9ERUxMSU5LID0gX1JUTV9ERUxMSU5LCitjb25zdCBSVE1fTkVXTkVUQ09ORiA9IF9SVE1fTkVX
TkVUQ09ORgorY29uc3QgUlRNX0JBU0UgPSBfUlRNX0JBU0UKK2NvbnN0IFJUTUdSUF9JUFY0X0lG
QUREUiA9IF9SVE1HUlBfSVBWNF9JRkFERFIKK2NvbnN0IFJUTV9GX1BSRUZJWCA9IF9SVE1fRl9Q
UkVGSVgKK2NvbnN0IFJUTV9ORVdORUlHSFRCTCA9IF9SVE1fTkVXTkVJR0hUQkwKK2NvbnN0IFJU
TVNHX05FV0RFVklDRSA9IF9SVE1TR19ORVdERVZJQ0UKK2NvbnN0IFJUTV9ORVdSVUxFID0gX1JU
TV9ORVdSVUxFCitjb25zdCBSVE1fRl9MT09LVVBfVEFCTEUgPSBfUlRNX0ZfTE9PS1VQX1RBQkxF
Citjb25zdCBSVE1fREVMQUREUkxBQkVMID0gX1JUTV9ERUxBRERSTEFCRUwKK2NvbnN0IFJUTV9O
RVdQUkVGSVggPSBfUlRNX05FV1BSRUZJWAorY29uc3QgUlRNU0dfREVMUlVMRSA9IF9SVE1TR19E
RUxSVUxFCitjb25zdCBSVE1HUlBfTk9USUZZID0gX1JUTUdSUF9OT1RJRlkKK2NvbnN0IFJUTV9H
RVRST1VURSA9IF9SVE1fR0VUUk9VVEUKK2NvbnN0IFJUTV9HRVRSVUxFID0gX1JUTV9HRVRSVUxF
Citjb25zdCBSVE1TR19DT05UUk9MID0gX1JUTVNHX0NPTlRST0wKK2NvbnN0IFJUTV9ERUxRRElT
QyA9IF9SVE1fREVMUURJU0MKK2NvbnN0IFJUTV9ORVdURklMVEVSID0gX1JUTV9ORVdURklMVEVS
Citjb25zdCBSVE1fR0VUQUNUSU9OID0gX1JUTV9HRVRBQ1RJT04KK2NvbnN0IFJUTV9GX05PVElG
WSA9IF9SVE1fRl9OT1RJRlkKK2NvbnN0IFJUTVNHX0RFTFJPVVRFID0gX1JUTVNHX0RFTFJPVVRF
Citjb25zdCBSVE1fR0VUQUREUkxBQkVMID0gX1JUTV9HRVRBRERSTEFCRUwKK2NvbnN0IFJUTUdS
UF9JUFY0X1JVTEUgPSBfUlRNR1JQX0lQVjRfUlVMRQorY29uc3QgUlRNX05FV05TSUQgPSBfUlRN
X05FV05TSUQKK2NvbnN0IFJUTV9HRVRNVUxUSUNBU1QgPSBfUlRNX0dFVE1VTFRJQ0FTVAorY29u
c3QgUlRNX0dFVFRDTEFTUyA9IF9SVE1fR0VUVENMQVNTCitjb25zdCBSVE1fREVMVEZJTFRFUiA9
IF9SVE1fREVMVEZJTFRFUgorY29uc3QgUlRNX0dFVENIQUlOID0gX1JUTV9HRVRDSEFJTgorY29u
c3QgUlRNX1NFVERDQiA9IF9SVE1fU0VURENCCitjb25zdCBSVE1TR19ERUxERVZJQ0UgPSBfUlRN
U0dfREVMREVWSUNFCitjb25zdCBSVE1HUlBfSVBWNl9QUkVGSVggPSBfUlRNR1JQX0lQVjZfUFJF
RklYCitjb25zdCBSVE1fREVMTkVJR0ggPSBfUlRNX0RFTE5FSUdICitjb25zdCBSVE1TR19BUl9G
QUlMRUQgPSBfUlRNU0dfQVJfRkFJTEVECitjb25zdCBSVE1fREVMQ0hBSU4gPSBfUlRNX0RFTENI
QUlOCitjb25zdCBSVE1fTkVXTElOSyA9IF9SVE1fTkVXTElOSworY29uc3QgUlRNX0ZfRVFVQUxJ
WkUgPSBfUlRNX0ZfRVFVQUxJWkUKK2NvbnN0IFJUTV9HRVRORVRDT05GID0gX1JUTV9HRVRORVRD
T05GCitjb25zdCBSVE1fR0VUTlNJRCA9IF9SVE1fR0VUTlNJRAorY29uc3QgUlRNX05FV0FERFJM
QUJFTCA9IF9SVE1fTkVXQUREUkxBQkVMCitjb25zdCBSVE1HUlBfTkVJR0ggPSBfUlRNR1JQX05F
SUdICitjb25zdCBSVE1fREVMQUREUiA9IF9SVE1fREVMQUREUgorY29uc3QgUlRNU0dfTkVXUk9V
VEUgPSBfUlRNU0dfTkVXUk9VVEUKK2NvbnN0IFJUTkxHUlBfTlNJRCA9IF9SVE5MR1JQX05TSUQK
K2NvbnN0IFJUTl9NVUxUSUNBU1QgPSBfUlROX01VTFRJQ0FTVAorY29uc3QgUlROTEdSUF9JUFY2
X05FVENPTkYgPSBfUlROTEdSUF9JUFY2X05FVENPTkYKK2NvbnN0IFJUTl9VTlNQRUMgPSBfUlRO
X1VOU1BFQworY29uc3QgUlROTEdSUF9JUFY2X1BSRUZJWCA9IF9SVE5MR1JQX0lQVjZfUFJFRklY
Citjb25zdCBSVE5MR1JQX05EX1VTRVJPUFQgPSBfUlROTEdSUF9ORF9VU0VST1BUCitjb25zdCBS
VE5MR1JQX01QTFNfTkVUQ09ORiA9IF9SVE5MR1JQX01QTFNfTkVUQ09ORgorY29uc3QgUlROX1VO
SUNBU1QgPSBfUlROX1VOSUNBU1QKK2NvbnN0IFJUTkxHUlBfRENCID0gX1JUTkxHUlBfRENCCitj
b25zdCBSVE5MR1JQX0lQVjZfSUZJTkZPID0gX1JUTkxHUlBfSVBWNl9JRklORk8KK2NvbnN0IFJU
TkxHUlBfUEhPTkVUX1JPVVRFID0gX1JUTkxHUlBfUEhPTkVUX1JPVVRFCitjb25zdCBSVE5fTkFU
ID0gX1JUTl9OQVQKK2NvbnN0IFJUTl9YUkVTT0xWRSA9IF9SVE5fWFJFU09MVkUKK2NvbnN0IFJU
TkxHUlBfSVBWNF9ST1VURSA9IF9SVE5MR1JQX0lQVjRfUk9VVEUKK2NvbnN0IFJUTl9CTEFDS0hP
TEUgPSBfUlROX0JMQUNLSE9MRQorY29uc3QgUlROTEdSUF9ERUNuZXRfUlVMRSA9IF9SVE5MR1JQ
X0RFQ25ldF9SVUxFCitjb25zdCBSVE5IX0ZfTElOS0RPV04gPSBfUlROSF9GX0xJTktET1dOCitj
b25zdCBSVE5MR1JQX0lQVjZfSUZBRERSID0gX1JUTkxHUlBfSVBWNl9JRkFERFIKK2NvbnN0IFJU
TkxfRkFNSUxZX0lQTVIgPSBfUlROTF9GQU1JTFlfSVBNUgorY29uc3QgUlROTEdSUF9QSE9ORVRf
SUZBRERSID0gX1JUTkxHUlBfUEhPTkVUX0lGQUREUgorY29uc3QgUlROTEdSUF9OT1A0ID0gX1JU
TkxHUlBfTk9QNAorY29uc3QgUlROTF9GQU1JTFlfTUFYID0gX1JUTkxfRkFNSUxZX01BWAorY29u
c3QgUlROTEdSUF9JUFY0X1JVTEUgPSBfUlROTEdSUF9JUFY0X1JVTEUKK2NvbnN0IFJUTkhfQ09N
UEFSRV9NQVNLID0gX1JUTkhfQ09NUEFSRV9NQVNLCitjb25zdCBSVE5MR1JQX0lQVjZfUk9VVEUg
PSBfUlROTEdSUF9JUFY2X1JPVVRFCitjb25zdCBSVE5IX0ZfUEVSVkFTSVZFID0gX1JUTkhfRl9Q
RVJWQVNJVkUKK2NvbnN0IFJUTkhfQUxJR05UTyA9IF9SVE5IX0FMSUdOVE8KK2NvbnN0IFJUTkxH
UlBfTk9QMiA9IF9SVE5MR1JQX05PUDIKK2NvbnN0IFJUTkVUTElOS19IQVZFX1BFRVJJTkZPID0g
X1JUTkVUTElOS19IQVZFX1BFRVJJTkZPCitjb25zdCBSVE5MR1JQX0RFQ25ldF9JRkFERFIgPSBf
UlROTEdSUF9ERUNuZXRfSUZBRERSCitjb25zdCBSVE5IX0ZfT0ZGTE9BRCA9IF9SVE5IX0ZfT0ZG
TE9BRAorY29uc3QgUlROTEdSUF9ERUNuZXRfUk9VVEUgPSBfUlROTEdSUF9ERUNuZXRfUk9VVEUK
K2NvbnN0IFJUTkxHUlBfSVBWNl9NUk9VVEUgPSBfUlROTEdSUF9JUFY2X01ST1VURQorY29uc3Qg
UlROTEdSUF9NUExTX1JPVVRFID0gX1JUTkxHUlBfTVBMU19ST1VURQorY29uc3QgUlROTEdSUF9N
REIgPSBfUlROTEdSUF9NREIKK2NvbnN0IFJUTl9USFJPVyA9IF9SVE5fVEhST1cKK2NvbnN0IFJU
TkxHUlBfSVBWNF9NUk9VVEUgPSBfUlROTEdSUF9JUFY0X01ST1VURQorY29uc3QgUlROTEdSUF9J
UFY0X0lGQUREUiA9IF9SVE5MR1JQX0lQVjRfSUZBRERSCitjb25zdCBSVE5MR1JQX05PTkUgPSBf
UlROTEdSUF9OT05FCitjb25zdCBSVE5IX0ZfVU5SRVNPTFZFRCA9IF9SVE5IX0ZfVU5SRVNPTFZF
RAorY29uc3QgUlROTEdSUF9ORUlHSCA9IF9SVE5MR1JQX05FSUdICitjb25zdCBSVE5MR1JQX0lQ
VjRfTkVUQ09ORiA9IF9SVE5MR1JQX0lQVjRfTkVUQ09ORgorY29uc3QgUlROTF9GQU1JTFlfSVA2
TVIgPSBfUlROTF9GQU1JTFlfSVA2TVIKK2NvbnN0IFJUTkxHUlBfTk9USUZZID0gX1JUTkxHUlBf
Tk9USUZZCitjb25zdCBSVE5fVU5SRUFDSEFCTEUgPSBfUlROX1VOUkVBQ0hBQkxFCitjb25zdCBS
VE5fQlJPQURDQVNUID0gX1JUTl9CUk9BRENBU1QKK2NvbnN0IFJUTl9MT0NBTCA9IF9SVE5fTE9D
QUwKK2NvbnN0IFJUTkhfRl9ERUFEID0gX1JUTkhfRl9ERUFECitjb25zdCBSVE5fUFJPSElCSVQg
PSBfUlROX1BST0hJQklUCitjb25zdCBSVE5MR1JQX0lQVjRfTVJPVVRFX1IgPSBfUlROTEdSUF9J
UFY0X01ST1VURV9SCitjb25zdCBSVE5fQU5ZQ0FTVCA9IF9SVE5fQU5ZQ0FTVAorY29uc3QgUlRO
TEdSUF9MSU5LID0gX1JUTkxHUlBfTElOSworY29uc3QgUlROTEdSUF9UQyA9IF9SVE5MR1JQX1RD
Citjb25zdCBSVE5MR1JQX0lQVjZfUlVMRSA9IF9SVE5MR1JQX0lQVjZfUlVMRQorY29uc3QgUlRO
SF9GX09OTElOSyA9IF9SVE5IX0ZfT05MSU5LCitjb25zdCBSVE5MR1JQX0lQVjZfTVJPVVRFX1Ig
PSBfUlROTEdSUF9JUFY2X01ST1VURV9SCitjb25zdCBSVFBST1RfVU5TUEVDID0gX1JUUFJPVF9V
TlNQRUMKK2NvbnN0IFJUUFJPVF9ESENQID0gX1JUUFJPVF9ESENQCitjb25zdCBSVFBST1RfU1RB
VElDID0gX1JUUFJPVF9TVEFUSUMKK2NvbnN0IFJUUFJPVF9PU1BGID0gX1JUUFJPVF9PU1BGCitj
b25zdCBSVFBST1RfS0VSTkVMID0gX1JUUFJPVF9LRVJORUwKK2NvbnN0IFJUUFJPVF9HQVRFRCA9
IF9SVFBST1RfR0FURUQKK2NvbnN0IFJUUFJPVF9aRUJSQSA9IF9SVFBST1RfWkVCUkEKK2NvbnN0
IFJUUFJPVF9CSVJEID0gX1JUUFJPVF9CSVJECitjb25zdCBSVFBST1RfUkEgPSBfUlRQUk9UX1JB
Citjb25zdCBSVFBST1RfWE9SUCA9IF9SVFBST1RfWE9SUAorY29uc3QgUlRQUk9UX0JPT1QgPSBf
UlRQUk9UX0JPT1QKK2NvbnN0IFJUUFJPVF9CQUJFTCA9IF9SVFBST1RfQkFCRUwKK2NvbnN0IFJU
UFJPVF9SSVAgPSBfUlRQUk9UX1JJUAorY29uc3QgUlRQUk9UX0VJR1JQID0gX1JUUFJPVF9FSUdS
UAorY29uc3QgUlRQUk9UX05USyA9IF9SVFBST1RfTlRLCitjb25zdCBSVFBST1RfUkVESVJFQ1Qg
PSBfUlRQUk9UX1JFRElSRUNUCitjb25zdCBSVFBST1RfSVNJUyA9IF9SVFBST1RfSVNJUworY29u
c3QgUlRQUk9UX0JHUCA9IF9SVFBST1RfQkdQCitjb25zdCBSVFBST1RfTVJUID0gX1JUUFJPVF9N
UlQKK2NvbnN0IFJUUFJPVF9NUk9VVEVEID0gX1JUUFJPVF9NUk9VVEVECitjb25zdCBSVFBST1Rf
RE5ST1VURUQgPSBfUlRQUk9UX0ROUk9VVEVECit0eXBlIElmSW5mb21zZyBzdHJ1Y3QgeyBGYW1p
bHkgdWludDg7IF9faWZpX3BhZCB1aW50ODsgVHlwZSB1aW50MTY7IEluZGV4IGludDMyOyBGbGFn
cyB1aW50MzI7IENoYW5nZSB1aW50MzI7IH0KK2NvbnN0IElGQV9MQUJFTCA9IF9JRkFfTEFCRUwK
K2NvbnN0IElGQV9VTlNQRUMgPSBfSUZBX1VOU1BFQworY29uc3QgSUZBX0FOWUNBU1QgPSBfSUZB
X0FOWUNBU1QKK2NvbnN0IElGQV9SVF9QUklPUklUWSA9IF9JRkFfUlRfUFJJT1JJVFkKK2NvbnN0
IElGQV9GX01DQVVUT0pPSU4gPSBfSUZBX0ZfTUNBVVRPSk9JTgorY29uc3QgSUZBX0ZfT1BUSU1J
U1RJQyA9IF9JRkFfRl9PUFRJTUlTVElDCitjb25zdCBJRkFfRl9TRUNPTkRBUlkgPSBfSUZBX0Zf
U0VDT05EQVJZCitjb25zdCBJRkFfRl9IT01FQUREUkVTUyA9IF9JRkFfRl9IT01FQUREUkVTUwor
Y29uc3QgSUZBX0ZfVEVNUE9SQVJZID0gX0lGQV9GX1RFTVBPUkFSWQorY29uc3QgSUZBX0ZfTUFO
QUdFVEVNUEFERFIgPSBfSUZBX0ZfTUFOQUdFVEVNUEFERFIKK2NvbnN0IElGQV9DQUNIRUlORk8g
PSBfSUZBX0NBQ0hFSU5GTworY29uc3QgSUZBX0ZfU1RBQkxFX1BSSVZBQ1kgPSBfSUZBX0ZfU1RB
QkxFX1BSSVZBQ1kKK2NvbnN0IElGQV9GX05PUFJFRklYUk9VVEUgPSBfSUZBX0ZfTk9QUkVGSVhS
T1VURQorY29uc3QgSUZBX0ZfUEVSTUFORU5UID0gX0lGQV9GX1BFUk1BTkVOVAorY29uc3QgSUZB
X0ZMQUdTID0gX0lGQV9GTEFHUworY29uc3QgSUZBX0xPQ0FMID0gX0lGQV9MT0NBTAorY29uc3Qg
SUZBX0ZfREFERkFJTEVEID0gX0lGQV9GX0RBREZBSUxFRAorY29uc3QgSUZBX0ZfVEVOVEFUSVZF
ID0gX0lGQV9GX1RFTlRBVElWRQorY29uc3QgSUZBX0FERFJFU1MgPSBfSUZBX0FERFJFU1MKK2Nv
bnN0IElGQV9GX0RFUFJFQ0FURUQgPSBfSUZBX0ZfREVQUkVDQVRFRAorY29uc3QgSUZBX01VTFRJ
Q0FTVCA9IF9JRkFfTVVMVElDQVNUCitjb25zdCBJRkFfQlJPQURDQVNUID0gX0lGQV9CUk9BRENB
U1QKK2NvbnN0IElGQV9GX05PREFEID0gX0lGQV9GX05PREFECitjb25zdCBJRkxBX0JSUE9SVF9O
RUlHSF9TVVBQUkVTUyA9IF9JRkxBX0JSUE9SVF9ORUlHSF9TVVBQUkVTUworY29uc3QgSUZMQV9W
Rl9MSU5LX1NUQVRFID0gX0lGTEFfVkZfTElOS19TVEFURQorY29uc3QgSUZMQV9CT05EX1VTRV9D
QVJSSUVSID0gX0lGTEFfQk9ORF9VU0VfQ0FSUklFUgorY29uc3QgSUZMQV9PRkZMT0FEX1hTVEFU
U19VTlNQRUMgPSBfSUZMQV9PRkZMT0FEX1hTVEFUU19VTlNQRUMKK2NvbnN0IElGTEFfQlJfVE9Q
T0xPR1lfQ0hBTkdFX1RJTUVSID0gX0lGTEFfQlJfVE9QT0xPR1lfQ0hBTkdFX1RJTUVSCitjb25z
dCBJRkxBX1JNTkVUX01VWF9JRCA9IF9JRkxBX1JNTkVUX01VWF9JRAorY29uc3QgSUZMQV9WRl9T
VEFUU19SWF9CWVRFUyA9IF9JRkxBX1ZGX1NUQVRTX1JYX0JZVEVTCitjb25zdCBJRkxBX0JSX01B
WF9BR0UgPSBfSUZMQV9CUl9NQVhfQUdFCitjb25zdCBJRkxBX0dFTkVWRV9SRU1PVEU2ID0gX0lG
TEFfR0VORVZFX1JFTU9URTYKK2NvbnN0IElGTEFfQk9ORF9NT0RFID0gX0lGTEFfQk9ORF9NT0RF
Citjb25zdCBJRkxBX01BUCA9IF9JRkxBX01BUAorY29uc3QgSUZMQV9UVU5fVk5FVF9IRFIgPSBf
SUZMQV9UVU5fVk5FVF9IRFIKK2NvbnN0IElGTEFfVkZfUE9SVFMgPSBfSUZMQV9WRl9QT1JUUwor
Y29uc3QgSUZMQV9CUlBPUlRfSVNPTEFURUQgPSBfSUZMQV9CUlBPUlRfSVNPTEFURUQKK2NvbnN0
IElGTEFfQk9ORF9TTEFWRV9MSU5LX0ZBSUxVUkVfQ09VTlQgPSBfSUZMQV9CT05EX1NMQVZFX0xJ
TktfRkFJTFVSRV9DT1VOVAorY29uc3QgSUZMQV9QUklPUklUWSA9IF9JRkxBX1BSSU9SSVRZCitj
b25zdCBJRkxBX1ZGX0lORk8gPSBfSUZMQV9WRl9JTkZPCitjb25zdCBJRkxBX1ZGX0xJTktfU1RB
VEVfRU5BQkxFID0gX0lGTEFfVkZfTElOS19TVEFURV9FTkFCTEUKK2NvbnN0IElGTEFfVlhMQU5f
SUQgPSBfSUZMQV9WWExBTl9JRAorY29uc3QgSUZMQV9UWFFMRU4gPSBfSUZMQV9UWFFMRU4KK2Nv
bnN0IElGTEFfQlJfRkRCX0ZMVVNIID0gX0lGTEFfQlJfRkRCX0ZMVVNICitjb25zdCBJRkxBX0JS
UE9SVF9GTFVTSCA9IF9JRkxBX0JSUE9SVF9GTFVTSAorY29uc3QgSUZMQV9CUlBPUlRfTUNBU1Rf
RkxPT0QgPSBfSUZMQV9CUlBPUlRfTUNBU1RfRkxPT0QKK2NvbnN0IElGTEFfUE9SVF9IT1NUX1VV
SUQgPSBfSUZMQV9QT1JUX0hPU1RfVVVJRAorY29uc3QgSUZMQV9CUl9NQ0FTVF9TVEFUU19FTkFC
TEVEID0gX0lGTEFfQlJfTUNBU1RfU1RBVFNfRU5BQkxFRAorY29uc3QgSUZMQV9CUl9NQ0FTVF9N
TERfVkVSU0lPTiA9IF9JRkxBX0JSX01DQVNUX01MRF9WRVJTSU9OCitjb25zdCBJRkxBX0JSX05G
X0NBTExfSVBUQUJMRVMgPSBfSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTCitjb25zdCBJRkxBX0JS
UE9SVF9GQVNUX0xFQVZFID0gX0lGTEFfQlJQT1JUX0ZBU1RfTEVBVkUKK2NvbnN0IElGTEFfVkZf
TElOS19TVEFURV9BVVRPID0gX0lGTEFfVkZfTElOS19TVEFURV9BVVRPCitjb25zdCBJRkxBX0JS
X01DQVNUX0lHTVBfVkVSU0lPTiA9IF9JRkxBX0JSX01DQVNUX0lHTVBfVkVSU0lPTgorY29uc3Qg
SUZMQV9NQUNTRUNfUkVQTEFZX1BST1RFQ1QgPSBfSUZMQV9NQUNTRUNfUkVQTEFZX1BST1RFQ1QK
K2NvbnN0IElGTEFfQk9ORF9TTEFWRV9QRVJNX0hXQUREUiA9IF9JRkxBX0JPTkRfU0xBVkVfUEVS
TV9IV0FERFIKK2NvbnN0IElGTEFfR1NPX01BWF9TSVpFID0gX0lGTEFfR1NPX01BWF9TSVpFCitj
b25zdCBJRkxBX1ZYTEFOX0NPTExFQ1RfTUVUQURBVEEgPSBfSUZMQV9WWExBTl9DT0xMRUNUX01F
VEFEQVRBCitjb25zdCBJRkxBX0JPTkRfRkFJTF9PVkVSX01BQyA9IF9JRkxBX0JPTkRfRkFJTF9P
VkVSX01BQworY29uc3QgSUZMQV9NQUNTRUNfUFJPVEVDVCA9IF9JRkxBX01BQ1NFQ19QUk9URUNU
Citjb25zdCBJRkxBX0JSX1ZMQU5fU1RBVFNfRU5BQkxFRCA9IF9JRkxBX0JSX1ZMQU5fU1RBVFNf
RU5BQkxFRAorY29uc3QgSUZMQV9CT05EX1NMQVZFX0FEX0FHR1JFR0FUT1JfSUQgPSBfSUZMQV9C
T05EX1NMQVZFX0FEX0FHR1JFR0FUT1JfSUQKK2NvbnN0IElGTEFfVkZfVkxBTl9JTkZPID0gX0lG
TEFfVkZfVkxBTl9JTkZPCitjb25zdCBJRkxBX1ZSRl9UQUJMRSA9IF9JRkxBX1ZSRl9UQUJMRQor
Y29uc3QgSUZMQV9WRl9JQl9QT1JUX0dVSUQgPSBfSUZMQV9WRl9JQl9QT1JUX0dVSUQKK2NvbnN0
IElGTEFfQlJfUk9PVF9JRCA9IF9JRkxBX0JSX1JPT1RfSUQKK2NvbnN0IElGTEFfVkxBTl9JTkdS
RVNTX1FPUyA9IF9JRkxBX1ZMQU5fSU5HUkVTU19RT1MKK2NvbnN0IElGTEFfUE9SVF9VTlNQRUMg
PSBfSUZMQV9QT1JUX1VOU1BFQworY29uc3QgSUZMQV9WWExBTl9SRU1DU1VNX1JYID0gX0lGTEFf
VlhMQU5fUkVNQ1NVTV9SWAorY29uc3QgSUZMQV9CUlBPUlRfQ09ORklHX1BFTkRJTkcgPSBfSUZM
QV9CUlBPUlRfQ09ORklHX1BFTkRJTkcKK2NvbnN0IElGTEFfQlJQT1JUX0dVQVJEID0gX0lGTEFf
QlJQT1JUX0dVQVJECitjb25zdCBJRkxBX01BU1RFUiA9IF9JRkxBX01BU1RFUgorY29uc3QgSUZM
QV9ORVdfSUZJTkRFWCA9IF9JRkxBX05FV19JRklOREVYCitjb25zdCBJRkxBX1ZYTEFOX0xPQ0FM
ID0gX0lGTEFfVlhMQU5fTE9DQUwKK2NvbnN0IElGTEFfQlJfTUNBU1RfTEFTVF9NRU1CRVJfQ05U
ID0gX0lGTEFfQlJfTUNBU1RfTEFTVF9NRU1CRVJfQ05UCitjb25zdCBJRkxBX0JSUE9SVF9ERVNJ
R05BVEVEX0NPU1QgPSBfSUZMQV9CUlBPUlRfREVTSUdOQVRFRF9DT1NUCitjb25zdCBJRkxBX1ZY
TEFOX0xBQkVMID0gX0lGTEFfVlhMQU5fTEFCRUwKK2NvbnN0IElGTEFfQlJfTUNBU1RfTEFTVF9N
RU1CRVJfSU5UVkwgPSBfSUZMQV9CUl9NQ0FTVF9MQVNUX01FTUJFUl9JTlRWTAorY29uc3QgSUZM
QV9TVEFUU19MSU5LX09GRkxPQURfWFNUQVRTID0gX0lGTEFfU1RBVFNfTElOS19PRkZMT0FEX1hT
VEFUUworY29uc3QgSUZMQV9UVU5fR1JPVVAgPSBfSUZMQV9UVU5fR1JPVVAKK2NvbnN0IElGTEFf
VkZfUkFURSA9IF9JRkxBX1ZGX1JBVEUKK2NvbnN0IElGTEFfQlJfUFJJT1JJVFkgPSBfSUZMQV9C
Ul9QUklPUklUWQorY29uc3QgSUZMQV9IU1JfU0VRX05SID0gX0lGTEFfSFNSX1NFUV9OUgorY29u
c3QgSUZMQV9QT1JUX1JFU1BPTlNFID0gX0lGTEFfUE9SVF9SRVNQT05TRQorY29uc3QgSUZMQV9C
Ul9NQ0FTVF9ST1VURVIgPSBfSUZMQV9CUl9NQ0FTVF9ST1VURVIKK2NvbnN0IElGTEFfSU5FVDZf
VE9LRU4gPSBfSUZMQV9JTkVUNl9UT0tFTgorY29uc3QgSUZMQV9CT05EX01JTl9MSU5LUyA9IF9J
RkxBX0JPTkRfTUlOX0xJTktTCitjb25zdCBJRkxBX0JSUE9SVF9NVUxUSUNBU1RfUk9VVEVSID0g
X0lGTEFfQlJQT1JUX01VTFRJQ0FTVF9ST1VURVIKK2NvbnN0IElGTEFfQlJQT1JUX0NPU1QgPSBf
SUZMQV9CUlBPUlRfQ09TVAorY29uc3QgSUZMQV9NQUNTRUNfSU5DX1NDSSA9IF9JRkxBX01BQ1NF
Q19JTkNfU0NJCitjb25zdCBJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRCA9IF9JRkxBX1BPUlRfSU5T
VEFOQ0VfVVVJRAorY29uc3QgSUZMQV9CUlBPUlRfQlJJREdFX0lEID0gX0lGTEFfQlJQT1JUX0JS
SURHRV9JRAorY29uc3QgSUZMQV9CUlBPUlRfTEVBUk5JTkdfU1lOQyA9IF9JRkxBX0JSUE9SVF9M
RUFSTklOR19TWU5DCitjb25zdCBJRkxBX0xJTksgPSBfSUZMQV9MSU5LCitjb25zdCBJRkxBX1hE
UF9BVFRBQ0hFRCA9IF9JRkxBX1hEUF9BVFRBQ0hFRAorY29uc3QgSUZMQV9WRl9TVEFUU19CUk9B
RENBU1QgPSBfSUZMQV9WRl9TVEFUU19CUk9BRENBU1QKK2NvbnN0IElGTEFfQk9ORF9BRF9VU0VS
X1BPUlRfS0VZID0gX0lGTEFfQk9ORF9BRF9VU0VSX1BPUlRfS0VZCitjb25zdCBJRkxBX0JSUE9S
VF9CQUNLVVBfUE9SVCA9IF9JRkxBX0JSUE9SVF9CQUNLVVBfUE9SVAorY29uc3QgSUZMQV9WWExB
Tl9HQlAgPSBfSUZMQV9WWExBTl9HQlAKK2NvbnN0IElGTEFfSU5FVDZfQUREUl9HRU5fTU9ERSA9
IF9JRkxBX0lORVQ2X0FERFJfR0VOX01PREUKK2NvbnN0IElGTEFfQlJQT1JUX0RFU0lHTkFURURf
UE9SVCA9IF9JRkxBX0JSUE9SVF9ERVNJR05BVEVEX1BPUlQKK2NvbnN0IElGTEFfVFVOX1RZUEUg
PSBfSUZMQV9UVU5fVFlQRQorY29uc3QgSUZMQV9CUl9HQ19USU1FUiA9IF9JRkxBX0JSX0dDX1RJ
TUVSCitjb25zdCBJRkxBX0JSUE9SVF9QUklPUklUWSA9IF9JRkxBX0JSUE9SVF9QUklPUklUWQor
Y29uc3QgSUZMQV9CT05EX0FMTF9TTEFWRVNfQUNUSVZFID0gX0lGTEFfQk9ORF9BTExfU0xBVkVT
X0FDVElWRQorY29uc3QgSUZMQV9JUE9JQl9NT0RFID0gX0lGTEFfSVBPSUJfTU9ERQorY29uc3Qg
SUZMQV9DQVJSSUVSX0NIQU5HRVMgPSBfSUZMQV9DQVJSSUVSX0NIQU5HRVMKK2NvbnN0IElGTEFf
SVBPSUJfUEtFWSA9IF9JRkxBX0lQT0lCX1BLRVkKK2NvbnN0IElGTEFfTUFDU0VDX1BBRCA9IF9J
RkxBX01BQ1NFQ19QQUQKK2NvbnN0IElGTEFfQlJQT1JUX01PREUgPSBfSUZMQV9CUlBPUlRfTU9E
RQorY29uc3QgSUZMQV9NQUNTRUNfVU5TUEVDID0gX0lGTEFfTUFDU0VDX1VOU1BFQworY29uc3Qg
SUZMQV9CT05EX1BSSU1BUlkgPSBfSUZMQV9CT05EX1BSSU1BUlkKK2NvbnN0IElGTEFfRVZFTlRf
Qk9ORElOR19GQUlMT1ZFUiA9IF9JRkxBX0VWRU5UX0JPTkRJTkdfRkFJTE9WRVIKK2NvbnN0IElG
TEFfQlJQT1JUX1RPUE9MT0dZX0NIQU5HRV9BQ0sgPSBfSUZMQV9CUlBPUlRfVE9QT0xPR1lfQ0hB
TkdFX0FDSworY29uc3QgSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9LRVkgPSBfSUZMQV9CT05E
X0FEX0lORk9fUEFSVE5FUl9LRVkKK2NvbnN0IElGTEFfSFNSX01VTFRJQ0FTVF9TUEVDID0gX0lG
TEFfSFNSX01VTFRJQ0FTVF9TUEVDCitjb25zdCBJRkxBX0JSUE9SVF9QUk9YWUFSUCA9IF9JRkxB
X0JSUE9SVF9QUk9YWUFSUAorY29uc3QgSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9NQUMgPSBf
SUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9NQUMKK2NvbnN0IElGTEFfQlJfTUNBU1RfUVVFUllf
SU5UVkwgPSBfSUZMQV9CUl9NQ0FTVF9RVUVSWV9JTlRWTAorY29uc3QgSUZMQV9XRUlHSFQgPSBf
SUZMQV9XRUlHSFQKK2NvbnN0IElGTEFfWEZSTV9VTlNQRUMgPSBfSUZMQV9YRlJNX1VOU1BFQwor
Y29uc3QgSUZMQV9YRFAgPSBfSUZMQV9YRFAKK2NvbnN0IElGTEFfU1RBVFMgPSBfSUZMQV9TVEFU
UworY29uc3QgSUZMQV9CUl9WTEFOX1BST1RPQ09MID0gX0lGTEFfQlJfVkxBTl9QUk9UT0NPTAor
Y29uc3QgSUZMQV9CUlBPUlRfVU5TUEVDID0gX0lGTEFfQlJQT1JUX1VOU1BFQworY29uc3QgSUZM
QV9HRU5FVkVfVE9TID0gX0lGTEFfR0VORVZFX1RPUworY29uc3QgSUZMQV9CUk9BRENBU1QgPSBf
SUZMQV9CUk9BRENBU1QKK2NvbnN0IElGTEFfWERQX1VOU1BFQyA9IF9JRkxBX1hEUF9VTlNQRUMK
K2NvbnN0IElGTEFfQk9ORF9TTEFWRV9BRF9QQVJUTkVSX09QRVJfUE9SVF9TVEFURSA9IF9JRkxB
X0JPTkRfU0xBVkVfQURfUEFSVE5FUl9PUEVSX1BPUlRfU1RBVEUKK2NvbnN0IElGTEFfTElOS0lO
Rk8gPSBfSUZMQV9MSU5LSU5GTworY29uc3QgSUZMQV9JTkVUNl9VTlNQRUMgPSBfSUZMQV9JTkVU
Nl9VTlNQRUMKK2NvbnN0IElGTEFfVkZfU1RBVFNfVFhfRFJPUFBFRCA9IF9JRkxBX1ZGX1NUQVRT
X1RYX0RST1BQRUQKK2NvbnN0IElGTEFfQ0FSUklFUiA9IF9JRkxBX0NBUlJJRVIKK2NvbnN0IElG
TEFfUk1ORVRfVU5TUEVDID0gX0lGTEFfUk1ORVRfVU5TUEVDCitjb25zdCBJRkxBX0hTUl9VTlNQ
RUMgPSBfSUZMQV9IU1JfVU5TUEVDCitjb25zdCBJRkxBX0dFTkVWRV9UVEwgPSBfSUZMQV9HRU5F
VkVfVFRMCitjb25zdCBJRkxBX0JSX01DQVNUX1FVRVJJRVJfSU5UVkwgPSBfSUZMQV9CUl9NQ0FT
VF9RVUVSSUVSX0lOVFZMCitjb25zdCBJRkxBX1BPUlRfVkYgPSBfSUZMQV9QT1JUX1ZGCitjb25z
dCBJRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTID0gX0lGTEFfQlJfTkZfQ0FMTF9JUDZUQUJMRVMK
K2NvbnN0IElGTEFfTVRVID0gX0lGTEFfTVRVCitjb25zdCBJRkxBX0JSX1JPT1RfUE9SVCA9IF9J
RkxBX0JSX1JPT1RfUE9SVAorY29uc3QgSUZMQV9QUk9NSVNDVUlUWSA9IF9JRkxBX1BST01JU0NV
SVRZCitjb25zdCBJRkxBX0JSX01DQVNUX01FTUJFUlNISVBfSU5UVkwgPSBfSUZMQV9CUl9NQ0FT
VF9NRU1CRVJTSElQX0lOVFZMCitjb25zdCBJRkxBX1BBRCA9IF9JRkxBX1BBRAorY29uc3QgSUZM
QV9CUlBPUlRfVkxBTl9UVU5ORUwgPSBfSUZMQV9CUlBPUlRfVkxBTl9UVU5ORUwKK2NvbnN0IElG
TEFfQk9ORF9BRF9JTkZPID0gX0lGTEFfQk9ORF9BRF9JTkZPCitjb25zdCBJRkxBX0JSX1VOU1BF
QyA9IF9JRkxBX0JSX1VOU1BFQworY29uc3QgSUZMQV9JRl9ORVROU0lEID0gX0lGTEFfSUZfTkVU
TlNJRAorY29uc3QgSUZMQV9CT05EX0FEX0lORk9fVU5TUEVDID0gX0lGTEFfQk9ORF9BRF9JTkZP
X1VOU1BFQworY29uc3QgSUZMQV9ORVdfTkVUTlNJRCA9IF9JRkxBX05FV19ORVROU0lECitjb25z
dCBJRkxBX1ZSRl9VTlNQRUMgPSBfSUZMQV9WUkZfVU5TUEVDCitjb25zdCBJRkxBX1ZMQU5fUU9T
X1VOU1BFQyA9IF9JRkxBX1ZMQU5fUU9TX1VOU1BFQworY29uc3QgSUZMQV9JUE9JQl9VTUNBU1Qg
PSBfSUZMQV9JUE9JQl9VTUNBU1QKK2NvbnN0IElGTEFfUE9SVF9SRVFVRVNUID0gX0lGTEFfUE9S
VF9SRVFVRVNUCitjb25zdCBJRkxBX0JPTkRfQURfSU5GT19BR0dSRUdBVE9SID0gX0lGTEFfQk9O
RF9BRF9JTkZPX0FHR1JFR0FUT1IKK2NvbnN0IElGTEFfVlhMQU5fR1BFID0gX0lGTEFfVlhMQU5f
R1BFCitjb25zdCBJRkxBX0VYVF9NQVNLID0gX0lGTEFfRVhUX01BU0sKK2NvbnN0IElGTEFfR0VO
RVZFX0NPTExFQ1RfTUVUQURBVEEgPSBfSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQQorY29u
c3QgSUZMQV9NQUNWTEFOX01PREUgPSBfSUZMQV9NQUNWTEFOX01PREUKK2NvbnN0IElGTEFfQk9O
RF9BRF9MQUNQX1JBVEUgPSBfSUZMQV9CT05EX0FEX0xBQ1BfUkFURQorY29uc3QgSUZMQV9UVU5f
TlVNX1FVRVVFUyA9IF9JRkxBX1RVTl9OVU1fUVVFVUVTCitjb25zdCBJRkxBX0NPU1QgPSBfSUZM
QV9DT1NUCitjb25zdCBJRkxBX0JPTkRfU0xBVkVfUVVFVUVfSUQgPSBfSUZMQV9CT05EX1NMQVZF
X1FVRVVFX0lECitjb25zdCBJRkxBX09QRVJTVEFURSA9IF9JRkxBX09QRVJTVEFURQorY29uc3Qg
SUZMQV9CT05EX1NMQVZFX01JSV9TVEFUVVMgPSBfSUZMQV9CT05EX1NMQVZFX01JSV9TVEFUVVMK
K2NvbnN0IElGTEFfTUFDU0VDX1dJTkRPVyA9IF9JRkxBX01BQ1NFQ19XSU5ET1cKK2NvbnN0IElG
TEFfTlVNX1ZGID0gX0lGTEFfTlVNX1ZGCitjb25zdCBJRkxBX0JSX01DQVNUX1FVRVJZX1JFU1BP
TlNFX0lOVFZMID0gX0lGTEFfQlJfTUNBU1RfUVVFUllfUkVTUE9OU0VfSU5UVkwKK2NvbnN0IElG
TEFfWERQX0RSVl9QUk9HX0lEID0gX0lGTEFfWERQX0RSVl9QUk9HX0lECitjb25zdCBJRkxBX1ZG
SU5GT19MSVNUID0gX0lGTEFfVkZJTkZPX0xJU1QKK2NvbnN0IElGTEFfSU5GT19VTlNQRUMgPSBf
SUZMQV9JTkZPX1VOU1BFQworY29uc3QgSUZMQV9WTEFOX1FPU19NQVBQSU5HID0gX0lGTEFfVkxB
Tl9RT1NfTUFQUElORworY29uc3QgSUZMQV9YRFBfSFdfUFJPR19JRCA9IF9JRkxBX1hEUF9IV19Q
Uk9HX0lECitjb25zdCBJRkxBX0dUUF9VTlNQRUMgPSBfSUZMQV9HVFBfVU5TUEVDCitjb25zdCBJ
RkxBX0JSX01DQVNUX1NUQVJUVVBfUVVFUllfSU5UVkwgPSBfSUZMQV9CUl9NQ0FTVF9TVEFSVFVQ
X1FVRVJZX0lOVFZMCitjb25zdCBJRkxBX0JSUE9SVF9ST09UX0lEID0gX0lGTEFfQlJQT1JUX1JP
T1RfSUQKK2NvbnN0IElGTEFfU1RBVFM2NCA9IF9JRkxBX1NUQVRTNjQKK2NvbnN0IElGTEFfVkZf
U1RBVFNfUlhfRFJPUFBFRCA9IF9JRkxBX1ZGX1NUQVRTX1JYX0RST1BQRUQKK2NvbnN0IElGTEFf
VlhMQU5fR1JPVVAgPSBfSUZMQV9WWExBTl9HUk9VUAorY29uc3QgSUZMQV9JTkZPX1NMQVZFX0tJ
TkQgPSBfSUZMQV9JTkZPX1NMQVZFX0tJTkQKK2NvbnN0IElGTEFfVlhMQU5fTDJNSVNTID0gX0lG
TEFfVlhMQU5fTDJNSVNTCitjb25zdCBJRkxBX0JSX0hFTExPX1RJTUUgPSBfSUZMQV9CUl9IRUxM
T19USU1FCitjb25zdCBJRkxBX0lQVkxBTl9NT0RFID0gX0lGTEFfSVBWTEFOX01PREUKK2NvbnN0
IElGTEFfVkZfVU5TUEVDID0gX0lGTEFfVkZfVU5TUEVDCitjb25zdCBJRkxBX1ZGX1JTU19RVUVS
WV9FTiA9IF9JRkxBX1ZGX1JTU19RVUVSWV9FTgorY29uc3QgSUZMQV9JTkVUNl9DT05GID0gX0lG
TEFfSU5FVDZfQ09ORgorY29uc3QgSUZMQV9WRl9MSU5LX1NUQVRFX0RJU0FCTEUgPSBfSUZMQV9W
Rl9MSU5LX1NUQVRFX0RJU0FCTEUKK2NvbnN0IElGTEFfU1RBVFNfVU5TUEVDID0gX0lGTEFfU1RB
VFNfVU5TUEVDCitjb25zdCBJRkxBX1ZGX1BPUlRfVU5TUEVDID0gX0lGTEFfVkZfUE9SVF9VTlNQ
RUMKK2NvbnN0IElGTEFfRVZFTlRfUkVCT09UID0gX0lGTEFfRVZFTlRfUkVCT09UCitjb25zdCBJ
RkxBX1RVTl9OVU1fRElTQUJMRURfUVVFVUVTID0gX0lGTEFfVFVOX05VTV9ESVNBQkxFRF9RVUVV
RVMKK2NvbnN0IElGTEFfVkZfU1RBVFNfTVVMVElDQVNUID0gX0lGTEFfVkZfU1RBVFNfTVVMVElD
QVNUCitjb25zdCBJRkxBX0JPTkRfVVBERUxBWSA9IF9JRkxBX0JPTkRfVVBERUxBWQorY29uc3Qg
SUZMQV9CUl9UQ05fVElNRVIgPSBfSUZMQV9CUl9UQ05fVElNRVIKK2NvbnN0IElGTEFfR0VORVZF
X1VEUF9DU1VNID0gX0lGTEFfR0VORVZFX1VEUF9DU1VNCitjb25zdCBJRkxBX0dFTkVWRV9QT1JU
ID0gX0lGTEFfR0VORVZFX1BPUlQKK2NvbnN0IElGTEFfV0lSRUxFU1MgPSBfSUZMQV9XSVJFTEVT
UworY29uc3QgSUZMQV9CUlBPUlRfRk9SV0FSRF9ERUxBWV9USU1FUiA9IF9JRkxBX0JSUE9SVF9G
T1JXQVJEX0RFTEFZX1RJTUVSCitjb25zdCBJRkxBX1hGUk1fSUZfSUQgPSBfSUZMQV9YRlJNX0lG
X0lECitjb25zdCBJRkxBX0dUUF9QRFBfSEFTSFNJWkUgPSBfSUZMQV9HVFBfUERQX0hBU0hTSVpF
Citjb25zdCBJRkxBX0JPTkRfQUNUSVZFX1NMQVZFID0gX0lGTEFfQk9ORF9BQ1RJVkVfU0xBVkUK
K2NvbnN0IElGTEFfSU5GT19LSU5EID0gX0lGTEFfSU5GT19LSU5ECitjb25zdCBJRkxBX1ZMQU5f
VU5TUEVDID0gX0lGTEFfVkxBTl9VTlNQRUMKK2NvbnN0IElGTEFfQlJQT1JUX05PID0gX0lGTEFf
QlJQT1JUX05PCitjb25zdCBJRkxBX1ZSRl9QT1JUX1VOU1BFQyA9IF9JRkxBX1ZSRl9QT1JUX1VO
U1BFQworY29uc3QgSUZMQV9JTkVUNl9NQ0FTVCA9IF9JRkxBX0lORVQ2X01DQVNUCitjb25zdCBJ
RkxBX0hTUl9WRVJTSU9OID0gX0lGTEFfSFNSX1ZFUlNJT04KK2NvbnN0IElGTEFfQk9ORF9ET1dO
REVMQVkgPSBfSUZMQV9CT05EX0RPV05ERUxBWQorY29uc3QgSUZMQV9WRl9UWF9SQVRFID0gX0lG
TEFfVkZfVFhfUkFURQorY29uc3QgSUZMQV9CUlBPUlRfR1JPVVBfRldEX01BU0sgPSBfSUZMQV9C
UlBPUlRfR1JPVVBfRldEX01BU0sKK2NvbnN0IElGTEFfTUFDVkxBTl9GTEFHUyA9IF9JRkxBX01B
Q1ZMQU5fRkxBR1MKK2NvbnN0IElGTEFfVkZfU1RBVFMgPSBfSUZMQV9WRl9TVEFUUworY29uc3Qg
SUZMQV9NQUNTRUNfQ0lQSEVSX1NVSVRFID0gX0lGTEFfTUFDU0VDX0NJUEhFUl9TVUlURQorY29u
c3QgSUZMQV9CUl9NQ0FTVF9RVUVSWV9VU0VfSUZBRERSID0gX0lGTEFfQlJfTUNBU1RfUVVFUllf
VVNFX0lGQUREUgorY29uc3QgSUZMQV9WWExBTl9MT0NBTDYgPSBfSUZMQV9WWExBTl9MT0NBTDYK
K2NvbnN0IElGTEFfQlJQT1JUX1BST1hZQVJQX1dJRkkgPSBfSUZMQV9CUlBPUlRfUFJPWFlBUlBf
V0lGSQorY29uc3QgSUZMQV9FVkVOVF9OT1RJRllfUEVFUlMgPSBfSUZMQV9FVkVOVF9OT1RJRllf
UEVFUlMKK2NvbnN0IElGTEFfQUREUkVTUyA9IF9JRkxBX0FERFJFU1MKK2NvbnN0IElGTEFfVkZf
SU5GT19VTlNQRUMgPSBfSUZMQV9WRl9JTkZPX1VOU1BFQworY29uc3QgSUZMQV9CUl9NQ0FTVF9I
QVNIX01BWCA9IF9JRkxBX0JSX01DQVNUX0hBU0hfTUFYCitjb25zdCBJRkxBX1BQUF9ERVZfRkQg
PSBfSUZMQV9QUFBfREVWX0ZECitjb25zdCBJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYID0g
X0lGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfVFgKK2NvbnN0IElGTEFfVFVOX1VOU1BFQyA9IF9J
RkxBX1RVTl9VTlNQRUMKK2NvbnN0IElGTEFfQlJfSEVMTE9fVElNRVIgPSBfSUZMQV9CUl9IRUxM
T19USU1FUgorY29uc3QgSUZMQV9HRU5FVkVfUkVNT1RFID0gX0lGTEFfR0VORVZFX1JFTU9URQor
Y29uc3QgSUZMQV9WWExBTl9MSU1JVCA9IF9JRkxBX1ZYTEFOX0xJTUlUCitjb25zdCBJRkxBX05V
TV9SWF9RVUVVRVMgPSBfSUZMQV9OVU1fUlhfUVVFVUVTCitjb25zdCBJRkxBX0JSX1RPUE9MT0dZ
X0NIQU5HRSA9IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRQorY29uc3QgSUZMQV9WTEFOX1BST1RP
Q09MID0gX0lGTEFfVkxBTl9QUk9UT0NPTAorY29uc3QgSUZMQV9NQUNWTEFOX01BQ0FERFJfQ09V
TlQgPSBfSUZMQV9NQUNWTEFOX01BQ0FERFJfQ09VTlQKK2NvbnN0IElGTEFfQlJQT1JUX1BBRCA9
IF9JRkxBX0JSUE9SVF9QQUQKK2NvbnN0IElGTEFfTlVNX1RYX1FVRVVFUyA9IF9JRkxBX05VTV9U
WF9RVUVVRVMKK2NvbnN0IElGTEFfSU5GT19TTEFWRV9EQVRBID0gX0lGTEFfSU5GT19TTEFWRV9E
QVRBCitjb25zdCBJRkxBX0dFTkVWRV9JRCA9IF9JRkxBX0dFTkVWRV9JRAorY29uc3QgSUZMQV9C
T05EX1NMQVZFX1NUQVRFID0gX0lGTEFfQk9ORF9TTEFWRV9TVEFURQorY29uc3QgSUZMQV9CT05E
X0FEX0FDVE9SX1NZU19QUklPID0gX0lGTEFfQk9ORF9BRF9BQ1RPUl9TWVNfUFJJTworY29uc3Qg
SUZMQV9CUl9QQUQgPSBfSUZMQV9CUl9QQUQKK2NvbnN0IElGTEFfVkZfU1BPT0ZDSEsgPSBfSUZM
QV9WRl9TUE9PRkNISworY29uc3QgSUZMQV9HRU5FVkVfVURQX1pFUk9fQ1NVTTZfUlggPSBfSUZM
QV9HRU5FVkVfVURQX1pFUk9fQ1NVTTZfUlgKK2NvbnN0IElGTEFfQk9ORF9UTEJfRFlOQU1JQ19M
QiA9IF9JRkxBX0JPTkRfVExCX0RZTkFNSUNfTEIKK2NvbnN0IElGTEFfSU5FVDZfSUNNUDZTVEFU
UyA9IF9JRkxBX0lORVQ2X0lDTVA2U1RBVFMKK2NvbnN0IElGTEFfVlhMQU5fTDNNSVNTID0gX0lG
TEFfVlhMQU5fTDNNSVNTCitjb25zdCBJRkxBX01BQ1NFQ19QT1JUID0gX0lGTEFfTUFDU0VDX1BP
UlQKK2NvbnN0IElGTEFfQk9ORF9BUlBfSVBfVEFSR0VUID0gX0lGTEFfQk9ORF9BUlBfSVBfVEFS
R0VUCitjb25zdCBJRkxBX0JSUE9SVF9NQ0FTVF9UT19VQ0FTVCA9IF9JRkxBX0JSUE9SVF9NQ0FT
VF9UT19VQ0FTVAorY29uc3QgSUZMQV9JTkVUNl9TVEFUUyA9IF9JRkxBX0lORVQ2X1NUQVRTCitj
b25zdCBJRkxBX1ZGX1NUQVRTX1JYX1BBQ0tFVFMgPSBfSUZMQV9WRl9TVEFUU19SWF9QQUNLRVRT
Citjb25zdCBJRkxBX1VOU1BFQyA9IF9JRkxBX1VOU1BFQworY29uc3QgSUZMQV9WRl9TVEFUU19Q
QUQgPSBfSUZMQV9WRl9TVEFUU19QQUQKK2NvbnN0IElGTEFfQk9ORF9BRF9BQ1RPUl9TWVNURU0g
PSBfSUZMQV9CT05EX0FEX0FDVE9SX1NZU1RFTQorY29uc3QgSUZMQV9CUl9NQ0FTVF9RVUVSSUVS
ID0gX0lGTEFfQlJfTUNBU1RfUVVFUklFUgorY29uc3QgSUZMQV9CT05EX1NMQVZFX0FEX0FDVE9S
X09QRVJfUE9SVF9TVEFURSA9IF9JRkxBX0JPTkRfU0xBVkVfQURfQUNUT1JfT1BFUl9QT1JUX1NU
QVRFCitjb25zdCBJRkxBX0xJTktNT0RFID0gX0lGTEFfTElOS01PREUKK2NvbnN0IElGTEFfQlJf
U1RQX1NUQVRFID0gX0lGTEFfQlJfU1RQX1NUQVRFCitjb25zdCBJRkxBX0dFTkVWRV9VRFBfWkVS
T19DU1VNNl9UWCA9IF9JRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9UWAorY29uc3QgSUZMQV9C
T05EX1hNSVRfSEFTSF9QT0xJQ1kgPSBfSUZMQV9CT05EX1hNSVRfSEFTSF9QT0xJQ1kKK2NvbnN0
IElGTEFfSU5GT19EQVRBID0gX0lGTEFfSU5GT19EQVRBCitjb25zdCBJRkxBX1ZGX1NUQVRTX1RY
X1BBQ0tFVFMgPSBfSUZMQV9WRl9TVEFUU19UWF9QQUNLRVRTCitjb25zdCBJRkxBX0JSUE9SVF9C
Q0FTVF9GTE9PRCA9IF9JRkxBX0JSUE9SVF9CQ0FTVF9GTE9PRAorY29uc3QgSUZMQV9HVFBfRkQw
ID0gX0lGTEFfR1RQX0ZEMAorY29uc3QgSUZMQV9HVFBfRkQxID0gX0lGTEFfR1RQX0ZEMQorY29u
c3QgSUZMQV9CUlBPUlRfSUQgPSBfSUZMQV9CUlBPUlRfSUQKK2NvbnN0IElGTEFfVkZfTUFDID0g
X0lGTEFfVkZfTUFDCitjb25zdCBJRkxBX1ZYTEFOX1JFTUNTVU1fVFggPSBfSUZMQV9WWExBTl9S
RU1DU1VNX1RYCitjb25zdCBJRkxBX0JPTkRfQVJQX1ZBTElEQVRFID0gX0lGTEFfQk9ORF9BUlBf
VkFMSURBVEUKK2NvbnN0IElGTEFfTUlOX01UVSA9IF9JRkxBX01JTl9NVFUKK2NvbnN0IElGTEFf
VlhMQU5fUlNDID0gX0lGTEFfVlhMQU5fUlNDCitjb25zdCBJRkxBX01BQ1NFQ19FTkNPRElOR19T
QSA9IF9JRkxBX01BQ1NFQ19FTkNPRElOR19TQQorY29uc3QgSUZMQV9QT1JUX1BST0ZJTEUgPSBf
SUZMQV9QT1JUX1BST0ZJTEUKK2NvbnN0IElGTEFfWERQX0ZMQUdTID0gX0lGTEFfWERQX0ZMQUdT
Citjb25zdCBJRkxBX0VWRU5UX0JPTkRJTkdfT1BUSU9OUyA9IF9JRkxBX0VWRU5UX0JPTkRJTkdf
T1BUSU9OUworY29uc3QgSUZMQV9CUl9WTEFOX0ZJTFRFUklORyA9IF9JRkxBX0JSX1ZMQU5fRklM
VEVSSU5HCitjb25zdCBJRkxBX0dST1VQID0gX0lGTEFfR1JPVVAKK2NvbnN0IElGTEFfQlJfUk9P
VF9QQVRIX0NPU1QgPSBfSUZMQV9CUl9ST09UX1BBVEhfQ09TVAorY29uc3QgSUZMQV9TVEFUU19M
SU5LX1hTVEFUUyA9IF9JRkxBX1NUQVRTX0xJTktfWFNUQVRTCitjb25zdCBJRkxBX1RVTl9QRVJT
SVNUID0gX0lGTEFfVFVOX1BFUlNJU1QKK2NvbnN0IElGTEFfQlJQT1JUX1NUQVRFID0gX0lGTEFf
QlJQT1JUX1NUQVRFCitjb25zdCBJRkxBX0JSX01DQVNUX1NOT09QSU5HID0gX0lGTEFfQlJfTUNB
U1RfU05PT1BJTkcKK2NvbnN0IElGTEFfQlJfVE9QT0xPR1lfQ0hBTkdFX0RFVEVDVEVEID0gX0lG
TEFfQlJfVE9QT0xPR1lfQ0hBTkdFX0RFVEVDVEVECitjb25zdCBJRkxBX0JSUE9SVF9NRVNTQUdF
X0FHRV9USU1FUiA9IF9JRkxBX0JSUE9SVF9NRVNTQUdFX0FHRV9USU1FUgorY29uc3QgSUZMQV9F
VkVOVCA9IF9JRkxBX0VWRU5UCitjb25zdCBJRkxBX0JPTkRfUEFDS0VUU19QRVJfU0xBVkUgPSBf
SUZMQV9CT05EX1BBQ0tFVFNfUEVSX1NMQVZFCitjb25zdCBJRkxBX0lQT0lCX1VOU1BFQyA9IF9J
RkxBX0lQT0lCX1VOU1BFQworY29uc3QgSUZMQV9HRU5FVkVfVU5TUEVDID0gX0lGTEFfR0VORVZF
X1VOU1BFQworY29uc3QgSUZMQV9QSFlTX1BPUlRfSUQgPSBfSUZMQV9QSFlTX1BPUlRfSUQKK2Nv
bnN0IElGTEFfVkZfUE9SVCA9IF9JRkxBX1ZGX1BPUlQKK2NvbnN0IElGTEFfVlJGX1BPUlRfVEFC
TEUgPSBfSUZMQV9WUkZfUE9SVF9UQUJMRQorY29uc3QgSUZMQV9NQUNWTEFOX01BQ0FERFJfREFU
QSA9IF9JRkxBX01BQ1ZMQU5fTUFDQUREUl9EQVRBCitjb25zdCBJRkxBX01BQ1NFQ19FTkNSWVBU
ID0gX0lGTEFfTUFDU0VDX0VOQ1JZUFQKK2NvbnN0IElGTEFfTUFDU0VDX1NDSSA9IF9JRkxBX01B
Q1NFQ19TQ0kKK2NvbnN0IElGTEFfVlhMQU5fVE9TID0gX0lGTEFfVlhMQU5fVE9TCitjb25zdCBJ
RkxBX0JSX0dST1VQX0ZXRF9NQVNLID0gX0lGTEFfQlJfR1JPVVBfRldEX01BU0sKK2NvbnN0IElG
TEFfTUFDU0VDX0VTID0gX0lGTEFfTUFDU0VDX0VTCitjb25zdCBJRkxBX0dTT19NQVhfU0VHUyA9
IF9JRkxBX0dTT19NQVhfU0VHUworY29uc3QgSUZMQV9IU1JfU0xBVkUxID0gX0lGTEFfSFNSX1NM
QVZFMQorY29uc3QgSUZMQV9YRlJNX0xJTksgPSBfSUZMQV9YRlJNX0xJTksKK2NvbnN0IElGTEFf
TElOS19ORVROU0lEID0gX0lGTEFfTElOS19ORVROU0lECitjb25zdCBJRkxBX0JPTkRfU0xBVkVf
VU5TUEVDID0gX0lGTEFfQk9ORF9TTEFWRV9VTlNQRUMKK2NvbnN0IElGTEFfQk9ORF9SRVNFTkRf
SUdNUCA9IF9JRkxBX0JPTkRfUkVTRU5EX0lHTVAKK2NvbnN0IElGTEFfQk9ORF9QUklNQVJZX1JF
U0VMRUNUID0gX0lGTEFfQk9ORF9QUklNQVJZX1JFU0VMRUNUCitjb25zdCBJRkxBX0lORVQ2X0ZM
QUdTID0gX0lGTEFfSU5FVDZfRkxBR1MKK2NvbnN0IElGTEFfVkZfVkxBTl9MSVNUID0gX0lGTEFf
VkZfVkxBTl9MSVNUCitjb25zdCBJRkxBX05FVF9OU19GRCA9IF9JRkxBX05FVF9OU19GRAorY29u
c3QgSUZMQV9QSFlTX1NXSVRDSF9JRCA9IF9JRkxBX1BIWVNfU1dJVENIX0lECitjb25zdCBJRkxB
X1RVTl9QSSA9IF9JRkxBX1RVTl9QSQorY29uc3QgSUZMQV9IU1JfU0xBVkUyID0gX0lGTEFfSFNS
X1NMQVZFMgorY29uc3QgSUZMQV9JUFZMQU5fVU5TUEVDID0gX0lGTEFfSVBWTEFOX1VOU1BFQwor
Y29uc3QgSUZMQV9WWExBTl9HUk9VUDYgPSBfSUZMQV9WWExBTl9HUk9VUDYKK2NvbnN0IElGTEFf
SU5FVF9VTlNQRUMgPSBfSUZMQV9JTkVUX1VOU1BFQworY29uc3QgSUZMQV9CUlBPUlRfTEVBUk5J
TkcgPSBfSUZMQV9CUlBPUlRfTEVBUk5JTkcKK2NvbnN0IElGTEFfVlhMQU5fUE9SVCA9IF9JRkxB
X1ZYTEFOX1BPUlQKK2NvbnN0IElGTEFfTUFDU0VDX1ZBTElEQVRJT04gPSBfSUZMQV9NQUNTRUNf
VkFMSURBVElPTgorY29uc3QgSUZMQV9CT05EX0FSUF9BTExfVEFSR0VUUyA9IF9JRkxBX0JPTkRf
QVJQX0FMTF9UQVJHRVRTCitjb25zdCBJRkxBX1ZGX1NUQVRTX1RYX0JZVEVTID0gX0lGTEFfVkZf
U1RBVFNfVFhfQllURVMKK2NvbnN0IElGTEFfUEhZU19QT1JUX05BTUUgPSBfSUZMQV9QSFlTX1BP
UlRfTkFNRQorY29uc3QgSUZMQV9ORVRfTlNfUElEID0gX0lGTEFfTkVUX05TX1BJRAorY29uc3Qg
SUZMQV9WRl9WTEFOX0lORk9fVU5TUEVDID0gX0lGTEFfVkZfVkxBTl9JTkZPX1VOU1BFQworY29u
c3QgSUZMQV9NQUNWTEFOX01BQ0FERFJfTU9ERSA9IF9JRkxBX01BQ1ZMQU5fTUFDQUREUl9NT0RF
Citjb25zdCBJRkxBX1ZYTEFOX1BPUlRfUkFOR0UgPSBfSUZMQV9WWExBTl9QT1JUX1JBTkdFCitj
b25zdCBJRkxBX0VWRU5UX05PTkUgPSBfSUZMQV9FVkVOVF9OT05FCitjb25zdCBJRkxBX0JSX1ZM
QU5fREVGQVVMVF9QVklEID0gX0lGTEFfQlJfVkxBTl9ERUZBVUxUX1BWSUQKK2NvbnN0IElGTEFf
T0ZGTE9BRF9YU1RBVFNfQ1BVX0hJVCA9IF9JRkxBX09GRkxPQURfWFNUQVRTX0NQVV9ISVQKK2Nv
bnN0IElGTEFfVlhMQU5fVFRMX0lOSEVSSVQgPSBfSUZMQV9WWExBTl9UVExfSU5IRVJJVAorY29u
c3QgSUZMQV9CUl9NQ0FTVF9TVEFSVFVQX1FVRVJZX0NOVCA9IF9JRkxBX0JSX01DQVNUX1NUQVJU
VVBfUVVFUllfQ05UCitjb25zdCBJRkxBX1NUQVRTX0FGX1NQRUMgPSBfSUZMQV9TVEFUU19BRl9T
UEVDCitjb25zdCBJRkxBX1RVTl9NVUxUSV9RVUVVRSA9IF9JRkxBX1RVTl9NVUxUSV9RVUVVRQor
Y29uc3QgSUZMQV9IU1JfU1VQRVJWSVNJT05fQUREUiA9IF9JRkxBX0hTUl9TVVBFUlZJU0lPTl9B
RERSCitjb25zdCBJRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1JYID0gX0lGTEFfVlhMQU5fVURQ
X1pFUk9fQ1NVTTZfUlgKK2NvbnN0IElGTEFfUE9SVF9WU0lfVFlQRSA9IF9JRkxBX1BPUlRfVlNJ
X1RZUEUKK2NvbnN0IElGTEFfUFJPVElORk8gPSBfSUZMQV9QUk9USU5GTworY29uc3QgSUZMQV9N
QUNTRUNfU0NCID0gX0lGTEFfTUFDU0VDX1NDQgorY29uc3QgSUZMQV9CUl9ORl9DQUxMX0FSUFRB
QkxFUyA9IF9JRkxBX0JSX05GX0NBTExfQVJQVEFCTEVTCitjb25zdCBJRkxBX1FESVNDID0gX0lG
TEFfUURJU0MKK2NvbnN0IElGTEFfQk9ORF9BRF9JTkZPX05VTV9QT1JUUyA9IF9JRkxBX0JPTkRf
QURfSU5GT19OVU1fUE9SVFMKK2NvbnN0IElGTEFfQk9ORF9BUlBfSU5URVJWQUwgPSBfSUZMQV9C
T05EX0FSUF9JTlRFUlZBTAorY29uc3QgSUZMQV9DQVJSSUVSX1VQX0NPVU5UID0gX0lGTEFfQ0FS
UklFUl9VUF9DT1VOVAorY29uc3QgSUZMQV9YRFBfU0tCX1BST0dfSUQgPSBfSUZMQV9YRFBfU0tC
X1BST0dfSUQKK2NvbnN0IElGTEFfRVZFTlRfRkVBVFVSRVMgPSBfSUZMQV9FVkVOVF9GRUFUVVJF
UworY29uc3QgSUZMQV9QUFBfVU5TUEVDID0gX0lGTEFfUFBQX1VOU1BFQworY29uc3QgSUZMQV9U
VU5fT1dORVIgPSBfSUZMQV9UVU5fT1dORVIKK2NvbnN0IElGTEFfQk9ORF9MUF9JTlRFUlZBTCA9
IF9JRkxBX0JPTkRfTFBfSU5URVJWQUwKK2NvbnN0IElGTEFfVkZfSUJfTk9ERV9HVUlEID0gX0lG
TEFfVkZfSUJfTk9ERV9HVUlECitjb25zdCBJRkxBX0JPTkRfQURfSU5GT19BQ1RPUl9LRVkgPSBf
SUZMQV9CT05EX0FEX0lORk9fQUNUT1JfS0VZCitjb25zdCBJRkxBX1ZMQU5fRkxBR1MgPSBfSUZM
QV9WTEFOX0ZMQUdTCitjb25zdCBJRkxBX0dUUF9ST0xFID0gX0lGTEFfR1RQX1JPTEUKK2NvbnN0
IElGTEFfVlhMQU5fUFJPWFkgPSBfSUZMQV9WWExBTl9QUk9YWQorY29uc3QgSUZMQV9WWExBTl9S
RU1DU1VNX05PUEFSVElBTCA9IF9JRkxBX1ZYTEFOX1JFTUNTVU1fTk9QQVJUSUFMCitjb25zdCBJ
RkxBX01BQ1ZMQU5fTUFDQUREUiA9IF9JRkxBX01BQ1ZMQU5fTUFDQUREUgorY29uc3QgSUZMQV9W
TEFOX0VHUkVTU19RT1MgPSBfSUZMQV9WTEFOX0VHUkVTU19RT1MKK2NvbnN0IElGTEFfQk9ORF9B
RF9TRUxFQ1QgPSBfSUZMQV9CT05EX0FEX1NFTEVDVAorY29uc3QgSUZMQV9WWExBTl9UVEwgPSBf
SUZMQV9WWExBTl9UVEwKK2NvbnN0IElGTEFfSVBWTEFOX0ZMQUdTID0gX0lGTEFfSVBWTEFOX0ZM
QUdTCitjb25zdCBJRkxBX0VWRU5UX0lHTVBfUkVTRU5EID0gX0lGTEFfRVZFTlRfSUdNUF9SRVNF
TkQKK2NvbnN0IElGTEFfVkxBTl9JRCA9IF9JRkxBX1ZMQU5fSUQKK2NvbnN0IElGTEFfQk9ORF9O
VU1fUEVFUl9OT1RJRiA9IF9JRkxBX0JPTkRfTlVNX1BFRVJfTk9USUYKK2NvbnN0IElGTEFfUFJP
VE9fRE9XTiA9IF9JRkxBX1BST1RPX0RPV04KK2NvbnN0IElGTEFfSUZOQU1FID0gX0lGTEFfSUZO
QU1FCitjb25zdCBJRkxBX0FGX1NQRUMgPSBfSUZMQV9BRl9TUEVDCitjb25zdCBJRkxBX1NUQVRT
X0xJTktfNjQgPSBfSUZMQV9TVEFUU19MSU5LXzY0Citjb25zdCBJRkxBX0JSX0JSSURHRV9JRCA9
IF9JRkxBX0JSX0JSSURHRV9JRAorY29uc3QgSUZMQV9CUlBPUlRfVU5JQ0FTVF9GTE9PRCA9IF9J
RkxBX0JSUE9SVF9VTklDQVNUX0ZMT09ECitjb25zdCBJRkxBX0NBUlJJRVJfRE9XTl9DT1VOVCA9
IF9JRkxBX0NBUlJJRVJfRE9XTl9DT1VOVAorY29uc3QgSUZMQV9CUl9GT1JXQVJEX0RFTEFZID0g
X0lGTEFfQlJfRk9SV0FSRF9ERUxBWQorY29uc3QgSUZMQV9YRFBfRkQgPSBfSUZMQV9YRFBfRkQK
K2NvbnN0IElGTEFfQlJQT1JUX0hPTERfVElNRVIgPSBfSUZMQV9CUlBPUlRfSE9MRF9USU1FUgor
Y29uc3QgSUZMQV9JTkVUNl9DQUNIRUlORk8gPSBfSUZMQV9JTkVUNl9DQUNIRUlORk8KK2NvbnN0
IElGTEFfVkZfVkxBTiA9IF9JRkxBX1ZGX1ZMQU4KK2NvbnN0IElGTEFfQlJfTUNBU1RfSEFTSF9F
TEFTVElDSVRZID0gX0lGTEFfQlJfTUNBU1RfSEFTSF9FTEFTVElDSVRZCitjb25zdCBJRkxBX01B
WF9NVFUgPSBfSUZMQV9NQVhfTVRVCitjb25zdCBJRkxBX0lGQUxJQVMgPSBfSUZMQV9JRkFMSUFT
Citjb25zdCBJRkxBX1ZGX1RSVVNUID0gX0lGTEFfVkZfVFJVU1QKK2NvbnN0IElGTEFfVlhMQU5f
TElOSyA9IF9JRkxBX1ZYTEFOX0xJTksKK2NvbnN0IElGTEFfVlhMQU5fQUdFSU5HID0gX0lGTEFf
VlhMQU5fQUdFSU5HCitjb25zdCBJRkxBX1hEUF9QUk9HX0lEID0gX0lGTEFfWERQX1BST0dfSUQK
K2NvbnN0IElGTEFfSU5GT19YU1RBVFMgPSBfSUZMQV9JTkZPX1hTVEFUUworY29uc3QgSUZMQV9C
Ul9BR0VJTkdfVElNRSA9IF9JRkxBX0JSX0FHRUlOR19USU1FCitjb25zdCBJRkxBX1NUQVRTX0xJ
TktfWFNUQVRTX1NMQVZFID0gX0lGTEFfU1RBVFNfTElOS19YU1RBVFNfU0xBVkUKK2NvbnN0IElG
TEFfVlhMQU5fVURQX0NTVU0gPSBfSUZMQV9WWExBTl9VRFBfQ1NVTQorY29uc3QgSUZMQV9STU5F
VF9GTEFHUyA9IF9JRkxBX1JNTkVUX0ZMQUdTCitjb25zdCBJRkxBX1BPUlRfU0VMRiA9IF9JRkxB
X1BPUlRfU0VMRgorY29uc3QgSUZMQV9CUl9HUk9VUF9BRERSID0gX0lGTEFfQlJfR1JPVVBfQURE
UgorY29uc3QgSUZMQV9WWExBTl9VTlNQRUMgPSBfSUZMQV9WWExBTl9VTlNQRUMKK2NvbnN0IElG
TEFfQk9ORF9NSUlNT04gPSBfSUZMQV9CT05EX01JSU1PTgorY29uc3QgSUZMQV9JTkVUX0NPTkYg
PSBfSUZMQV9JTkVUX0NPTkYKK2NvbnN0IElGTEFfQlJQT1JUX1BST1RFQ1QgPSBfSUZMQV9CUlBP
UlRfUFJPVEVDVAorY29uc3QgSUZMQV9NQUNWTEFOX1VOU1BFQyA9IF9JRkxBX01BQ1ZMQU5fVU5T
UEVDCitjb25zdCBJRkxBX0JPTkRfVU5TUEVDID0gX0lGTEFfQk9ORF9VTlNQRUMKK2NvbnN0IElG
TEFfR0VORVZFX0xBQkVMID0gX0lGTEFfR0VORVZFX0xBQkVMCitjb25zdCBJRkxBX01BQ1NFQ19J
Q1ZfTEVOID0gX0lGTEFfTUFDU0VDX0lDVl9MRU4KK2NvbnN0IElGTEFfVlhMQU5fTEVBUk5JTkcg
PSBfSUZMQV9WWExBTl9MRUFSTklORworY29uc3QgSUZGX09ORV9RVUVVRSA9IF9JRkZfT05FX1FV
RVVFCitjb25zdCBJRkZfUE9JTlRPUE9JTlQgPSBfSUZGX1BPSU5UT1BPSU5UCitjb25zdCBJRkZf
VVAgPSBfSUZGX1VQCitjb25zdCBJRkZfVEFQID0gX0lGRl9UQVAKK2NvbnN0IElGRl9OQVBJX0ZS
QUdTID0gX0lGRl9OQVBJX0ZSQUdTCitjb25zdCBJRkZfQUxMTVVMVEkgPSBfSUZGX0FMTE1VTFRJ
Citjb25zdCBJRkZfQVVUT01FRElBID0gX0lGRl9BVVRPTUVESUEKK2NvbnN0IElGRl9TTEFWRSA9
IF9JRkZfU0xBVkUKK2NvbnN0IElGRl9NQVNURVIgPSBfSUZGX01BU1RFUgorY29uc3QgSUZGX05P
VFJBSUxFUlMgPSBfSUZGX05PVFJBSUxFUlMKK2NvbnN0IElGRl9UVU4gPSBfSUZGX1RVTgorY29u
c3QgSUZGX05PRklMVEVSID0gX0lGRl9OT0ZJTFRFUgorY29uc3QgSUZGX0RFQlVHID0gX0lGRl9E
RUJVRworY29uc3QgSUZGX1BFUlNJU1QgPSBfSUZGX1BFUlNJU1QKK2NvbnN0IElGRl9WTkVUX0hE
UiA9IF9JRkZfVk5FVF9IRFIKK2NvbnN0IElGRl9BVFRBQ0hfUVVFVUUgPSBfSUZGX0FUVEFDSF9R
VUVVRQorY29uc3QgSUZGX0RZTkFNSUMgPSBfSUZGX0RZTkFNSUMKK2NvbnN0IElGRl9MT09QQkFD
SyA9IF9JRkZfTE9PUEJBQ0sKK2NvbnN0IElGRl9NVUxUSUNBU1QgPSBfSUZGX01VTFRJQ0FTVAor
Y29uc3QgSUZGX05PQVJQID0gX0lGRl9OT0FSUAorY29uc3QgSUZGX0RFVEFDSF9RVUVVRSA9IF9J
RkZfREVUQUNIX1FVRVVFCitjb25zdCBJRkZfUE9SVFNFTCA9IF9JRkZfUE9SVFNFTAorY29uc3Qg
SUZGX05PX1BJID0gX0lGRl9OT19QSQorY29uc3QgSUZGX05BUEkgPSBfSUZGX05BUEkKK2NvbnN0
IElGRl9CUk9BRENBU1QgPSBfSUZGX0JST0FEQ0FTVAorY29uc3QgSUZGX1RVTl9FWENMID0gX0lG
Rl9UVU5fRVhDTAorY29uc3QgSUZGX01VTFRJX1FVRVVFID0gX0lGRl9NVUxUSV9RVUVVRQorY29u
c3QgSUZGX1BST01JU0MgPSBfSUZGX1BST01JU0MKK2NvbnN0IElGRl9SVU5OSU5HID0gX0lGRl9S
VU5OSU5HCitjb25zdCBJRk5BTVNJWiA9IF9JRk5BTVNJWgorY29uc3QgU0lPQ1NJRkJSID0gX1NJ
T0NTSUZCUgorY29uc3QgU0lPQ0dJRkRTVEFERFIgPSBfU0lPQ0dJRkRTVEFERFIKK2NvbnN0IFNJ
T0NHUkFSUCA9IF9TSU9DR1JBUlAKK2NvbnN0IFNJT0NHSUZNRVRSSUMgPSBfU0lPQ0dJRk1FVFJJ
QworY29uc3QgU0lPQ0dJRlBGTEFHUyA9IF9TSU9DR0lGUEZMQUdTCitjb25zdCBTSU9DR1NUQU1Q
TlMgPSBfU0lPQ0dTVEFNUE5TCitjb25zdCBTSU9DREVMTVVMVEkgPSBfU0lPQ0RFTE1VTFRJCitj
b25zdCBTSU9DR0lGQlIgPSBfU0lPQ0dJRkJSCitjb25zdCBTSU9DREVMRExDSSA9IF9TSU9DREVM
RExDSQorY29uc3QgU0lPQ0dBUlAgPSBfU0lPQ0dBUlAKK2NvbnN0IFNJT0NHSUZIV0FERFIgPSBf
U0lPQ0dJRkhXQUREUgorY29uc3QgU0lPQ1NJRkJSREFERFIgPSBfU0lPQ1NJRkJSREFERFIKK2Nv
bnN0IFNJT0NTSUZNVFUgPSBfU0lPQ1NJRk1UVQorY29uc3QgU0lPQ0dJRkNPTkYgPSBfU0lPQ0dJ
RkNPTkYKK2NvbnN0IFNJT0NHSUZORVRNQVNLID0gX1NJT0NHSUZORVRNQVNLCitjb25zdCBTSU9D
REVMUlQgPSBfU0lPQ0RFTFJUCitjb25zdCBTSU9DQUREUlQgPSBfU0lPQ0FERFJUCitjb25zdCBT
SU9DR0lGRkxBR1MgPSBfU0lPQ0dJRkZMQUdTCitjb25zdCBTSU9DR0lGTUFQID0gX1NJT0NHSUZN
QVAKK2NvbnN0IFNJT0NTQVJQID0gX1NJT0NTQVJQCitjb25zdCBTSU9DR0lGTUVNID0gX1NJT0NH
SUZNRU0KK2NvbnN0IFNJT0NTSUZMSU5LID0gX1NJT0NTSUZMSU5LCitjb25zdCBTSU9DUFJPVE9Q
UklWQVRFID0gX1NJT0NQUk9UT1BSSVZBVEUKK2NvbnN0IFNJT0NTSUZOQU1FID0gX1NJT0NTSUZO
QU1FCitjb25zdCBTSU9DR0lGU0xBVkUgPSBfU0lPQ0dJRlNMQVZFCitjb25zdCBTSU9DR1NUQU1Q
ID0gX1NJT0NHU1RBTVAKK2NvbnN0IFNJT0NHSUZOQU1FID0gX1NJT0NHSUZOQU1FCitjb25zdCBT
SU9DR0lGTVRVID0gX1NJT0NHSUZNVFUKK2NvbnN0IFNJT0NESUZBRERSID0gX1NJT0NESUZBRERS
Citjb25zdCBTSU9DU0lGVFhRTEVOID0gX1NJT0NTSUZUWFFMRU4KK2NvbnN0IFNJT0NEUkFSUCA9
IF9TSU9DRFJBUlAKK2NvbnN0IFNJT0NEQVJQID0gX1NJT0NEQVJQCitjb25zdCBTSU9DU0lGRkxB
R1MgPSBfU0lPQ1NJRkZMQUdTCitjb25zdCBTSU9DR0lGQ09VTlQgPSBfU0lPQ0dJRkNPVU5UCitj
b25zdCBTSU9DR0lGRU5DQVAgPSBfU0lPQ0dJRkVOQ0FQCitjb25zdCBTSU9DR0lGVFhRTEVOID0g
X1NJT0NHSUZUWFFMRU4KK2NvbnN0IFNJT0NTSUZBRERSID0gX1NJT0NTSUZBRERSCitjb25zdCBT
SU9DU0lGTUFQID0gX1NJT0NTSUZNQVAKK2NvbnN0IFNJT0NHSUZBRERSID0gX1NJT0NHSUZBRERS
Citjb25zdCBTSU9DU0lGTkVUTUFTSyA9IF9TSU9DU0lGTkVUTUFTSworY29uc3QgU0lPQ1JUTVNH
ID0gX1NJT0NSVE1TRworY29uc3QgU0lPQ1NJRlNMQVZFID0gX1NJT0NTSUZTTEFWRQorY29uc3Qg
U0lPQ1NJRk1FTSA9IF9TSU9DU0lGTUVNCitjb25zdCBTSU9DQVRNQVJLID0gX1NJT0NBVE1BUksK
K2NvbnN0IFNJT0NHSUZCUkRBRERSID0gX1NJT0NHSUZCUkRBRERSCitjb25zdCBTSU9DU0lGSFdB
RERSID0gX1NJT0NTSUZIV0FERFIKK2NvbnN0IFNJT0NERVZQUklWQVRFID0gX1NJT0NERVZQUklW
QVRFCitjb25zdCBTSU9DU0lGRFNUQUREUiA9IF9TSU9DU0lGRFNUQUREUgorY29uc3QgU0lPQ1NJ
RkhXQlJPQURDQVNUID0gX1NJT0NTSUZIV0JST0FEQ0FTVAorY29uc3QgU0lPQ0dJRklOREVYID0g
X1NJT0NHSUZJTkRFWAorY29uc3QgU0lPQ1NSQVJQID0gX1NJT0NTUkFSUAorY29uc3QgU0lPQ0dQ
R1JQID0gX1NJT0NHUEdSUAorY29uc3QgU0lPQ0FERERMQ0kgPSBfU0lPQ0FERERMQ0kKK2NvbnN0
IFNJT0NTSUZNRVRSSUMgPSBfU0lPQ1NJRk1FVFJJQworY29uc3QgU0lPQ1NQR1JQID0gX1NJT0NT
UEdSUAorY29uc3QgU0lPQ1NJRlBGTEFHUyA9IF9TSU9DU0lGUEZMQUdTCitjb25zdCBTSU9DU0lG
RU5DQVAgPSBfU0lPQ1NJRkVOQ0FQCitjb25zdCBTSU9DQURETVVMVEkgPSBfU0lPQ0FERE1VTFRJ
Cit0eXBlIElmQWRkcm1zZyBzdHJ1Y3QgeyBGYW1pbHkgdWludDg7IFByZWZpeGxlbiB1aW50ODsg
RmxhZ3MgdWludDg7IFNjb3BlIHVpbnQ4OyBJbmRleCB1aW50MzI7IH0KK3R5cGUgUnRBdHRyIHN0
cnVjdCB7IExlbiB1aW50MTY7IFR5cGUgdWludDE2OyB9Cit0eXBlIEluZXQ0UGt0aW5mbyBzdHJ1
Y3QgeyBJZmluZGV4IGludDMyOyBTcGVjX2RzdCBbNF1ieXRlOyBBZGRyIFs0XWJ5dGU7IH0KK3R5
cGUgSW5ldDZQa3RpbmZvIHN0cnVjdCB7IEFkZHIgWzE2XWJ5dGU7IElmaW5kZXggdWludDMyOyB9
Cit0eXBlIFRlcm1pb3Mgc3RydWN0IHsgSWZsYWcgdWludDMyOyBPZmxhZyB1aW50MzI7IENmbGFn
IHVpbnQzMjsgTGZsYWcgdWludDMyOyBMaW5lIHVpbnQ4OyBDYyBbMzErMV11aW50ODsgSXNwZWVk
IHVpbnQzMjsgT3NwZWVkIHVpbnQzMjsgfQorY29uc3QgSUdOQlJLICA9IF9JR05CUksgCitjb25z
dCBCUktJTlQgID0gX0JSS0lOVCAKK2NvbnN0IElHTlBBUiAgPSBfSUdOUEFSIAorY29uc3QgUEFS
TVJLICA9IF9QQVJNUksgCitjb25zdCBJTlBDSyAgPSBfSU5QQ0sgCitjb25zdCBJU1RSSVAgID0g
X0lTVFJJUCAKK2NvbnN0IElOTENSICA9IF9JTkxDUiAKK2NvbnN0IElHTkNSICA9IF9JR05DUiAK
K2NvbnN0IElDUk5MICA9IF9JQ1JOTCAKK2NvbnN0IElVQ0xDICA9IF9JVUNMQyAKK2NvbnN0IElY
T04gID0gX0lYT04gCitjb25zdCBJWEFOWSAgPSBfSVhBTlkgCitjb25zdCBJWE9GRiAgPSBfSVhP
RkYgCitjb25zdCBJTUFYQkVMICA9IF9JTUFYQkVMIAorY29uc3QgSVVURjggID0gX0lVVEY4IAor
Y29uc3QgT1BPU1QgID0gX09QT1NUIAorY29uc3QgT0xDVUMgID0gX09MQ1VDIAorY29uc3QgT05M
Q1IgID0gX09OTENSIAorY29uc3QgT0NSTkwgID0gX09DUk5MIAorY29uc3QgT05PQ1IgID0gX09O
T0NSIAorY29uc3QgT05MUkVUICA9IF9PTkxSRVQgCitjb25zdCBPRklMTCAgPSBfT0ZJTEwgCitj
b25zdCBPRkRFTCAgPSBfT0ZERUwgCitjb25zdCBOTERMWSAgPSBfTkxETFkgCitjb25zdCBOTDAg
ID0gX05MMCAKK2NvbnN0IE5MMSAgPSBfTkwxIAorY29uc3QgQ1JETFkgID0gX0NSRExZIAorY29u
c3QgQ1IwICA9IF9DUjAgCitjb25zdCBDUjEgID0gX0NSMSAKK2NvbnN0IENSMiAgPSBfQ1IyIAor
Y29uc3QgQ1IzICA9IF9DUjMgCitjb25zdCBDUzUgID0gX0NTNSAKK2NvbnN0IENTNiAgPSBfQ1M2
IAorY29uc3QgQ1M3ICA9IF9DUzcgCitjb25zdCBDUzggID0gX0NTOCAKK2NvbnN0IFRBQkRMWSAg
PSBfVEFCRExZIAorY29uc3QgQlNETFkgID0gX0JTRExZIAorY29uc3QgVlRETFkgID0gX1ZURExZ
IAorY29uc3QgRkZETFkgID0gX0ZGRExZIAorY29uc3QgQ0JBVUQgID0gX0NCQVVEIAorY29uc3Qg
Q0JBVURFWCAgPSBfQ0JBVURFWCAKK2NvbnN0IENTSVpFICA9IF9DU0laRSAKK2NvbnN0IENTVE9Q
QiAgPSBfQ1NUT1BCIAorY29uc3QgQ1JFQUQgID0gX0NSRUFEIAorY29uc3QgUEFSRU5CICA9IF9Q
QVJFTkIgCitjb25zdCBQQVJPREQgID0gX1BBUk9ERCAKK2NvbnN0IEhVUENMICA9IF9IVVBDTCAK
K2NvbnN0IENMT0NBTCAgPSBfQ0xPQ0FMIAorY29uc3QgQ0lCQVVEICA9IF9DSUJBVUQgCitjb25z
dCBDTVNQQVIgID0gX0NNU1BBUiAKK2NvbnN0IENSVFNDVFMgID0gX0NSVFNDVFMgCitjb25zdCBJ
U0lHICA9IF9JU0lHIAorY29uc3QgSUNBTk9OICA9IF9JQ0FOT04gCitjb25zdCBYQ0FTRSAgPSBf
WENBU0UgCitjb25zdCBFQ0hPICA9IF9FQ0hPIAorY29uc3QgRUNIT0UgID0gX0VDSE9FIAorY29u
c3QgRUNIT0sgID0gX0VDSE9LIAorY29uc3QgRUNIT05MICA9IF9FQ0hPTkwgCitjb25zdCBFQ0hP
Q1RMICA9IF9FQ0hPQ1RMIAorY29uc3QgRUNIT1BSVCAgPSBfRUNIT1BSVCAKK2NvbnN0IEVDSE9L
RSAgPSBfRUNIT0tFIAorY29uc3QgRkxVU0hPICA9IF9GTFVTSE8gCitjb25zdCBOT0ZMU0ggID0g
X05PRkxTSCAKK2NvbnN0IFRPU1RPUCAgPSBfVE9TVE9QIAorY29uc3QgUEVORElOICA9IF9QRU5E
SU4gCitjb25zdCBJRVhURU4gID0gX0lFWFRFTiAKK2NvbnN0IFZJTlRSICA9IF9WSU5UUiAKK2Nv
bnN0IFZRVUlUICA9IF9WUVVJVCAKK2NvbnN0IFZFUkFTRSAgPSBfVkVSQVNFIAorY29uc3QgVktJ
TEwgID0gX1ZLSUxMIAorY29uc3QgVkVPRiAgPSBfVkVPRiAKK2NvbnN0IFZNSU4gID0gX1ZNSU4g
Citjb25zdCBWRU9MICA9IF9WRU9MIAorY29uc3QgVlRJTUUgID0gX1ZUSU1FIAorY29uc3QgVkVP
TDIgID0gX1ZFT0wyIAorY29uc3QgVlNUQVJUICA9IF9WU1RBUlQgCitjb25zdCBWU1RPUCAgPSBf
VlNUT1AgCitjb25zdCBWU1VTUCAgPSBfVlNVU1AgCitjb25zdCBWTE5FWFQgID0gX1ZMTkVYVCAK
K2NvbnN0IFZXRVJBU0UgID0gX1ZXRVJBU0UgCitjb25zdCBWUkVQUklOVCAgPSBfVlJFUFJJTlQg
Citjb25zdCBWRElTQ0FSRCAgPSBfVkRJU0NBUkQgCitjb25zdCBUQ1NBTk9XICA9IF9UQ1NBTk9X
IAorY29uc3QgVENTQURSQUlOICA9IF9UQ1NBRFJBSU4gCitjb25zdCBUQ1NBRkxVU0ggID0gX1RD
U0FGTFVTSCAKK2NvbnN0IFRDSUZMVVNIICA9IF9UQ0lGTFVTSCAKK2NvbnN0IFRDT0ZMVVNIICA9
IF9UQ09GTFVTSCAKK2NvbnN0IFRDSU9GTFVTSCAgPSBfVENJT0ZMVVNIIAorY29uc3QgVENPT0ZG
ICA9IF9UQ09PRkYgCitjb25zdCBUQ09PTiAgPSBfVENPT04gCitjb25zdCBUQ0lPRkYgID0gX1RD
SU9GRiAKK2NvbnN0IFRDSU9OICA9IF9UQ0lPTiAKK2NvbnN0IEIwICA9IF9CMCAKK2NvbnN0IEI1
MCAgPSBfQjUwIAorY29uc3QgQjc1ICA9IF9CNzUgCitjb25zdCBCMTEwICA9IF9CMTEwIAorY29u
c3QgQjEzNCAgPSBfQjEzNCAKK2NvbnN0IEIxNTAgID0gX0IxNTAgCitjb25zdCBCMjAwICA9IF9C
MjAwIAorY29uc3QgQjMwMCAgPSBfQjMwMCAKK2NvbnN0IEI2MDAgID0gX0I2MDAgCitjb25zdCBC
MTIwMCAgPSBfQjEyMDAgCitjb25zdCBCMTgwMCAgPSBfQjE4MDAgCitjb25zdCBCMjQwMCAgPSBf
QjI0MDAgCitjb25zdCBCNDgwMCAgPSBfQjQ4MDAgCitjb25zdCBCOTYwMCAgPSBfQjk2MDAgCitj
b25zdCBCMTkyMDAgID0gX0IxOTIwMCAKK2NvbnN0IEIzODQwMCAgPSBfQjM4NDAwIAorY29uc3Qg
QjU3NjAwICA9IF9CNTc2MDAgCitjb25zdCBCMTE1MjAwICA9IF9CMTE1MjAwIAorY29uc3QgQjIz
MDQwMCAgPSBfQjIzMDQwMCAKK2NvbnN0IEI0NjA4MDAgID0gX0I0NjA4MDAgCitjb25zdCBCNTAw
MDAwICA9IF9CNTAwMDAwIAorY29uc3QgQjU3NjAwMCAgPSBfQjU3NjAwMCAKK2NvbnN0IEI5MjE2
MDAgID0gX0I5MjE2MDAgCitjb25zdCBCMTAwMDAwMCAgPSBfQjEwMDAwMDAgCitjb25zdCBCMTE1
MjAwMCAgPSBfQjExNTIwMDAgCitjb25zdCBCMTUwMDAwMCAgPSBfQjE1MDAwMDAgCitjb25zdCBC
MjAwMDAwMCAgPSBfQjIwMDAwMDAgCitjb25zdCBCMjUwMDAwMCAgPSBfQjI1MDAwMDAgCitjb25z
dCBCMzAwMDAwMCAgPSBfQjMwMDAwMDAgCitjb25zdCBCMzUwMDAwMCAgPSBfQjM1MDAwMDAgCitj
b25zdCBCNDAwMDAwMCAgPSBfQjQwMDAwMDAgCitjb25zdCBNTlRfREVUQUNIID0gX01OVF9ERVRB
Q0gKK2NvbnN0IE1OVF9FWFBJUkUgPSBfTU5UX0VYUElSRQorY29uc3QgTU5UX0ZPUkNFID0gX01O
VF9GT1JDRQorY29uc3QgTVNfRElSU1lOQyA9IF9NU19ESVJTWU5DCitjb25zdCBNU19SRE9OTFkg
PSBfTVNfUkRPTkxZCitjb25zdCBNU19TVFJJQ1RBVElNRSA9IF9NU19TVFJJQ1RBVElNRQorY29u
c3QgTVNfUk1UX01BU0sgPSBfTVNfUk1UX01BU0sKK2NvbnN0IE1TX05PRElSQVRJTUUgPSBfTVNf
Tk9ESVJBVElNRQorY29uc3QgTVNfTk9ERVYgPSBfTVNfTk9ERVYKK2NvbnN0IE1TX0tFUk5NT1VO
VCA9IF9NU19LRVJOTU9VTlQKK2NvbnN0IE1TX01PVkUgPSBfTVNfTU9WRQorY29uc3QgTVNfTUdD
X1ZBTCA9IF9NU19NR0NfVkFMCitjb25zdCBNU19QUklWQVRFID0gX01TX1BSSVZBVEUKK2NvbnN0
IE1TX0JJTkQgPSBfTVNfQklORAorY29uc3QgTVNfUkVMQVRJTUUgPSBfTVNfUkVMQVRJTUUKK2Nv
bnN0IE1TX05PU1VJRCA9IF9NU19OT1NVSUQKK2NvbnN0IE1TX0JPUk4gPSBfTVNfQk9STgorY29u
c3QgTVNfTEFaWVRJTUUgPSBfTVNfTEFaWVRJTUUKK2NvbnN0IE1TX05PQVRJTUUgPSBfTVNfTk9B
VElNRQorY29uc3QgTVNfTk9TRUMgPSBfTVNfTk9TRUMKK2NvbnN0IE1TX0lOVkFMSURBVEUgPSBf
TVNfSU5WQUxJREFURQorY29uc3QgTVNfUkVNT1VOVCA9IF9NU19SRU1PVU5UCitjb25zdCBNU19O
T1JFTU9URUxPQ0sgPSBfTVNfTk9SRU1PVEVMT0NLCitjb25zdCBNU19TVUJNT1VOVCA9IF9NU19T
VUJNT1VOVAorY29uc3QgTVNfU1lOQ0hST05PVVMgPSBfTVNfU1lOQ0hST05PVVMKK2NvbnN0IE1T
X0FDVElWRSA9IF9NU19BQ1RJVkUKK2NvbnN0IE1TX1NIQVJFRCA9IF9NU19TSEFSRUQKK2NvbnN0
IE1TX1ZFUkJPU0UgPSBfTVNfVkVSQk9TRQorY29uc3QgTVNfUE9TSVhBQ0wgPSBfTVNfUE9TSVhB
Q0wKK2NvbnN0IE1TX0FTWU5DID0gX01TX0FTWU5DCitjb25zdCBNU19NQU5ETE9DSyA9IF9NU19N
QU5ETE9DSworY29uc3QgTVNfU0xBVkUgPSBfTVNfU0xBVkUKK2NvbnN0IE1TX0lfVkVSU0lPTiA9
IF9NU19JX1ZFUlNJT04KK2NvbnN0IE1TX05PRVhFQyA9IF9NU19OT0VYRUMKK2NvbnN0IE1TX1JF
QyA9IF9NU19SRUMKK2NvbnN0IE1TX05PVVNFUiA9IF9NU19OT1VTRVIKK2NvbnN0IE1TX1VOQklO
REFCTEUgPSBfTVNfVU5CSU5EQUJMRQorY29uc3QgTVNfU0lMRU5UID0gX01TX1NJTEVOVAorY29u
c3QgTVNfU1lOQyA9IF9NU19TWU5DCitjb25zdCBNU19NR0NfTVNLID0gX01TX01HQ19NU0sKK2Nv
bnN0IEZBTExPQ19GTF9VTlNIQVJFX1JBTkdFID0gX0ZBTExPQ19GTF9VTlNIQVJFX1JBTkdFCitj
b25zdCBGQUxMT0NfRkxfUFVOQ0hfSE9MRSA9IF9GQUxMT0NfRkxfUFVOQ0hfSE9MRQorY29uc3Qg
RkFMTE9DX0ZMX1pFUk9fUkFOR0UgPSBfRkFMTE9DX0ZMX1pFUk9fUkFOR0UKK2NvbnN0IEZBTExP
Q19GTF9JTlNFUlRfUkFOR0UgPSBfRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRQorY29uc3QgRkFMTE9D
X0ZMX0NPTExBUFNFX1JBTkdFID0gX0ZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRQorY29uc3QgRkFM
TE9DX0ZMX0tFRVBfU0laRSA9IF9GQUxMT0NfRkxfS0VFUF9TSVpFCitjb25zdCBGQUxMT0NfRkxf
Tk9fSElERV9TVEFMRSA9IF9GQUxMT0NfRkxfTk9fSElERV9TVEFMRQordHlwZSBTdGF0ZnNfdCBz
dHJ1Y3QgeyBUeXBlIGludDY0OyBCc2l6ZSBpbnQ2NDsgQmxvY2tzIHVpbnQ2NDsgQmZyZWUgdWlu
dDY0OyBCYXZhaWwgdWludDY0OyBGaWxlcyB1aW50NjQ7IEZmcmVlIHVpbnQ2NDsgRnNpZCBfX19m
c2lkX3Q7IE5hbWVsZW4gaW50NjQ7IEZyc2l6ZSBpbnQ2NDsgRmxhZ3MgaW50NjQ7IFNwYXJlIFsz
KzFdaW50NjQ7IH0KK3R5cGUgVGltZXggc3RydWN0IHsgTW9kZXMgdWludDMyOyBPZmZzZXQgaW50
NjQ7IEZyZXEgaW50NjQ7IE1heGVycm9yIGludDY0OyBFc3RlcnJvciBpbnQ2NDsgU3RhdHVzIGlu
dDMyOyBDb25zdGFudCBpbnQ2NDsgUHJlY2lzaW9uIGludDY0OyBUb2xlcmFuY2UgaW50NjQ7IFRp
bWUgVGltZXZhbDsgVGljayBpbnQ2NDsgUHBzZnJlcSBpbnQ2NDsgSml0dGVyIGludDY0OyBTaGlm
dCBpbnQzMjsgU3RhYmlsIGludDY0OyBKaXRjbnQgaW50NjQ7IENhbGNudCBpbnQ2NDsgRXJyY250
IGludDY0OyBTdGJjbnQgaW50NjQ7IFRhaSBpbnQzMjsgR29kdW1wXzAgaW50MzI7IEdvZHVtcF8x
IGludDMyOyBHb2R1bXBfMiBpbnQzMjsgR29kdW1wXzMgaW50MzI7IEdvZHVtcF80IGludDMyOyBH
b2R1bXBfNSBpbnQzMjsgR29kdW1wXzYgaW50MzI7IEdvZHVtcF83IGludDMyOyBHb2R1bXBfOCBp
bnQzMjsgR29kdW1wXzkgaW50MzI7IEdvZHVtcF8xMCBpbnQzMjsgfQordHlwZSBSbGltaXQgc3Ry
dWN0IHsgQ3VyIHVpbnQ2NDsgTWF4IHVpbnQ2NDsgfQorY29uc3QgUkxJTUlUX0NPUkUgPSBfUkxJ
TUlUX0NPUkUKK2NvbnN0IFJMSU1JVF9BUyA9IF9STElNSVRfQVMKK2NvbnN0IFJMSU1JVF9TVEFD
SyA9IF9STElNSVRfU1RBQ0sKK2NvbnN0IFJMSU1JVF9OT0ZJTEUgPSBfUkxJTUlUX05PRklMRQor
Y29uc3QgUkxJTUlUX0RBVEEgPSBfUkxJTUlUX0RBVEEKK2NvbnN0IFJMSU1JVF9DUFUgPSBfUkxJ
TUlUX0NQVQorY29uc3QgUkxJTUlUX0ZTSVpFID0gX1JMSU1JVF9GU0laRQorY29uc3QgUkxJTV9J
TkZJTklUWSA9IF9STElNX0lORklOSVRZCitjb25zdCBSTElNX1NBVkVEX0NVUiA9IF9STElNX1NB
VkVEX0NVUgorY29uc3QgUkxJTV9TQVZFRF9NQVggPSBfUkxJTV9TQVZFRF9NQVgKK3R5cGUgU3lz
aW5mb190IHN0cnVjdCB7IFVwdGltZSBpbnQ2NDsgTG9hZHMgWzIrMV11aW50NjQ7IFRvdGFscmFt
IHVpbnQ2NDsgRnJlZXJhbSB1aW50NjQ7IFNoYXJlZHJhbSB1aW50NjQ7IEJ1ZmZlcnJhbSB1aW50
NjQ7IFRvdGFsc3dhcCB1aW50NjQ7IEZyZWVzd2FwIHVpbnQ2NDsgUHJvY3MgdWludDE2OyBwYWQg
dWludDE2OyBUb3RhbGhpZ2ggdWludDY0OyBGcmVlaGlnaCB1aW50NjQ7IFVuaXQgdWludDMyOyBf
ZiBbMF1pbnQ4OyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQordHlwZSBVc3RhdF90IHN0cnVjdCB7
IFRmcmVlIGludDMyOyBUaW5vZSB1aW50NjQ7IEZuYW1lIFs1KzFdaW50ODsgRnBhY2sgWzUrMV1p
bnQ4OyB9Cit0eXBlIFV0aW1idWYgc3RydWN0IHsgQWN0aW1lIGludDY0OyBNb2R0aW1lIGludDY0
OyB9Citjb25zdCBMT0NLX1dSSVRFID0gX0xPQ0tfV1JJVEUKK2NvbnN0IExPQ0tfUlcgPSBfTE9D
S19SVworY29uc3QgTE9DS19TSCA9IF9MT0NLX1NICitjb25zdCBMT0NLX1JFQUQgPSBfTE9DS19S
RUFECitjb25zdCBMT0NLX01BTkQgPSBfTE9DS19NQU5ECitjb25zdCBMT0NLX05CID0gX0xPQ0tf
TkIKK2NvbnN0IExPQ0tfRVggPSBfTE9DS19FWAorY29uc3QgTE9DS19VTiA9IF9MT0NLX1VOCitj
b25zdCBQUklPX1BHUlAgPSBfUFJJT19QR1JQCitjb25zdCBQUklPX1VTRVIgPSBfUFJJT19VU0VS
Citjb25zdCBQUklPX1BST0NFU1MgPSBfUFJJT19QUk9DRVNTCitjb25zdCBQUklPX01BWCA9IF9Q
UklPX01BWAorY29uc3QgUFJJT19NSU4gPSBfUFJJT19NSU4KK2NvbnN0IExJTlVYX1JFQk9PVF9N
QUdJQzJDID0gX0xJTlVYX1JFQk9PVF9NQUdJQzJDCitjb25zdCBMSU5VWF9SRUJPT1RfQ01EX1JF
U1RBUlQgPSBfTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUCitjb25zdCBMSU5VWF9SRUJPT1RfQ01E
X1NXX1NVU1BFTkQgPSBfTElOVVhfUkVCT09UX0NNRF9TV19TVVNQRU5ECitjb25zdCBMSU5VWF9S
RUJPT1RfQ01EX1BPV0VSX09GRiA9IF9MSU5VWF9SRUJPT1RfQ01EX1BPV0VSX09GRgorY29uc3Qg
TElOVVhfUkVCT09UX01BR0lDMkEgPSBfTElOVVhfUkVCT09UX01BR0lDMkEKK2NvbnN0IExJTlVY
X1JFQk9PVF9DTURfS0VYRUMgPSBfTElOVVhfUkVCT09UX0NNRF9LRVhFQworY29uc3QgTElOVVhf
UkVCT09UX01BR0lDMkIgPSBfTElOVVhfUkVCT09UX01BR0lDMkIKK2NvbnN0IExJTlVYX1JFQk9P
VF9DTURfUkVTVEFSVDIgPSBfTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUMgorY29uc3QgTElOVVhf
UkVCT09UX0NNRF9DQURfT0ZGID0gX0xJTlVYX1JFQk9PVF9DTURfQ0FEX09GRgorY29uc3QgTElO
VVhfUkVCT09UX0NNRF9DQURfT04gPSBfTElOVVhfUkVCT09UX0NNRF9DQURfT04KK2NvbnN0IExJ
TlVYX1JFQk9PVF9NQUdJQzEgPSBfTElOVVhfUkVCT09UX01BR0lDMQorY29uc3QgTElOVVhfUkVC
T09UX01BR0lDMiA9IF9MSU5VWF9SRUJPT1RfTUFHSUMyCitjb25zdCBMSU5VWF9SRUJPT1RfQ01E
X0hBTFQgPSBfTElOVVhfUkVCT09UX0NNRF9IQUxUCit0eXBlIFNvY2tGaWx0ZXIgc3RydWN0IHsg
Q29kZSB1aW50MTY7IEp0IHVpbnQ4OyBKZiB1aW50ODsgSyB1aW50MzI7IH0KK3R5cGUgU29ja0Zw
cm9nIHN0cnVjdCB7IExlbiB1aW50MTY7IEZpbHRlciAqU29ja0ZpbHRlcjsgfQorY29uc3QgQlBG
X0pHRSA9IF9CUEZfSkdFCitjb25zdCBCUEZfTEQgPSBfQlBGX0xECitjb25zdCBCUEZfSCA9IF9C
UEZfSAorY29uc3QgQlBGX01FTVdPUkRTID0gX0JQRl9NRU1XT1JEUworY29uc3QgQlBGX01PRCA9
IF9CUEZfTU9ECitjb25zdCBCUEZfTUlTQyA9IF9CUEZfTUlTQworY29uc3QgQlBGX0pBID0gX0JQ
Rl9KQQorY29uc3QgQlBGX01BSk9SX1ZFUlNJT04gPSBfQlBGX01BSk9SX1ZFUlNJT04KK2NvbnN0
IEJQRl9NU0ggPSBfQlBGX01TSAorY29uc3QgQlBGX0sgPSBfQlBGX0sKK2NvbnN0IEJQRl9PUiA9
IF9CUEZfT1IKK2NvbnN0IEJQRl9NVUwgPSBfQlBGX01VTAorY29uc3QgQlBGX1hPUiA9IF9CUEZf
WE9SCitjb25zdCBCUEZfTUlOT1JfVkVSU0lPTiA9IF9CUEZfTUlOT1JfVkVSU0lPTgorY29uc3Qg
QlBGX0EgPSBfQlBGX0EKK2NvbnN0IEJQRl9CID0gX0JQRl9CCitjb25zdCBCUEZfVyA9IF9CUEZf
VworY29uc3QgQlBGX1ggPSBfQlBGX1gKK2NvbnN0IEJQRl9MRU4gPSBfQlBGX0xFTgorY29uc3Qg
QlBGX0pFUSA9IF9CUEZfSkVRCitjb25zdCBCUEZfSkdUID0gX0JQRl9KR1QKK2NvbnN0IEJQRl9O
RVRfT0ZGID0gX0JQRl9ORVRfT0ZGCitjb25zdCBCUEZfQUJTID0gX0JQRl9BQlMKK2NvbnN0IEJQ
Rl9BTkQgPSBfQlBGX0FORAorY29uc3QgQlBGX1NUWCA9IF9CUEZfU1RYCitjb25zdCBCUEZfTUVN
ID0gX0JQRl9NRU0KK2NvbnN0IEJQRl9BREQgPSBfQlBGX0FERAorY29uc3QgQlBGX1NVQiA9IF9C
UEZfU1VCCitjb25zdCBCUEZfSk1QID0gX0JQRl9KTVAKK2NvbnN0IEJQRl9MTF9PRkYgPSBfQlBG
X0xMX09GRgorY29uc3QgQlBGX0xEWCA9IF9CUEZfTERYCitjb25zdCBCUEZfSU5EID0gX0JQRl9J
TkQKK2NvbnN0IEJQRl9KU0VUID0gX0JQRl9KU0VUCitjb25zdCBCUEZfQUxVID0gX0JQRl9BTFUK
K2NvbnN0IEJQRl9ORUcgPSBfQlBGX05FRworY29uc3QgQlBGX0xTSCA9IF9CUEZfTFNICitjb25z
dCBCUEZfTUFYSU5TTlMgPSBfQlBGX01BWElOU05TCitjb25zdCBCUEZfVFhBID0gX0JQRl9UWEEK
K2NvbnN0IEJQRl9ESVYgPSBfQlBGX0RJVgorY29uc3QgQlBGX1JFVCA9IF9CUEZfUkVUCitjb25z
dCBCUEZfVEFYID0gX0JQRl9UQVgKK2NvbnN0IEJQRl9TVCA9IF9CUEZfU1QKK2NvbnN0IEJQRl9S
U0ggPSBfQlBGX1JTSAorY29uc3QgQlBGX0lNTSA9IF9CUEZfSU1NCit0eXBlIE5sQXR0ciBzdHJ1
Y3QgeyBMZW4gdWludDE2OyBUeXBlIHVpbnQxNjsgfQordHlwZSBObE1zZ2VyciBzdHJ1Y3QgeyBF
cnJvciBpbnQzMjsgTXNnIE5sTXNnaGRyOyB9Cit0eXBlIFJ0TmV4dGhvcCBzdHJ1Y3QgeyBMZW4g
dWludDE2OyBGbGFncyB1aW50ODsgSG9wcyB1aW50ODsgSWZpbmRleCBpbnQzMjsgfQorY29uc3Qg
TkVUTElOS19SRE1BID0gX05FVExJTktfUkRNQQorY29uc3QgTkVUTElOS19GSVJFV0FMTCA9IF9O
RVRMSU5LX0ZJUkVXQUxMCitjb25zdCBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UID0gX05FVExJTktf
S09CSkVDVF9VRVZFTlQKK2NvbnN0IE5FVExJTktfVU5VU0VEID0gX05FVExJTktfVU5VU0VECitj
b25zdCBORVRMSU5LX1hGUk0gPSBfTkVUTElOS19YRlJNCitjb25zdCBORVRMSU5LX1VTRVJTT0NL
ID0gX05FVExJTktfVVNFUlNPQ0sKK2NvbnN0IE5FVExJTktfSU5FVF9ESUFHID0gX05FVExJTktf
SU5FVF9ESUFHCitjb25zdCBORVRMSU5LX1NDU0lUUkFOU1BPUlQgPSBfTkVUTElOS19TQ1NJVFJB
TlNQT1JUCitjb25zdCBORVRMSU5LX1NFTElOVVggPSBfTkVUTElOS19TRUxJTlVYCitjb25zdCBO
RVRMSU5LX0lTQ1NJID0gX05FVExJTktfSVNDU0kKK2NvbnN0IE5FVExJTktfUlhfUklORyA9IF9O
RVRMSU5LX1JYX1JJTkcKK2NvbnN0IE5FVExJTktfRVhUX0FDSyA9IF9ORVRMSU5LX0VYVF9BQ0sK
K2NvbnN0IE5FVExJTktfRUNSWVBURlMgPSBfTkVUTElOS19FQ1JZUFRGUworY29uc3QgTkVUTElO
S19DUllQVE8gPSBfTkVUTElOS19DUllQVE8KK2NvbnN0IE5FVExJTktfQlJPQURDQVNUX0VSUk9S
ID0gX05FVExJTktfQlJPQURDQVNUX0VSUk9SCitjb25zdCBORVRMSU5LX1BLVElORk8gPSBfTkVU
TElOS19QS1RJTkZPCitjb25zdCBORVRMSU5LX1VOQ09OTkVDVEVEID0gX05FVExJTktfVU5DT05O
RUNURUQKK2NvbnN0IE5FVExJTktfTElTVEVOX0FMTF9OU0lEID0gX05FVExJTktfTElTVEVOX0FM
TF9OU0lECitjb25zdCBORVRMSU5LX0NBUF9BQ0sgPSBfTkVUTElOS19DQVBfQUNLCitjb25zdCBO
RVRMSU5LX05GTE9HID0gX05FVExJTktfTkZMT0cKK2NvbnN0IE5FVExJTktfRklCX0xPT0tVUCA9
IF9ORVRMSU5LX0ZJQl9MT09LVVAKK2NvbnN0IE5FVExJTktfU01DID0gX05FVExJTktfU01DCitj
b25zdCBORVRMSU5LX1JPVVRFID0gX05FVExJTktfUk9VVEUKK2NvbnN0IE5FVExJTktfTkVURklM
VEVSID0gX05FVExJTktfTkVURklMVEVSCitjb25zdCBORVRMSU5LX05PX0VOT0JVRlMgPSBfTkVU
TElOS19OT19FTk9CVUZTCitjb25zdCBORVRMSU5LX0NPTk5FQ1RFRCA9IF9ORVRMSU5LX0NPTk5F
Q1RFRAorY29uc3QgTkVUTElOS19MSVNUX01FTUJFUlNISVBTID0gX05FVExJTktfTElTVF9NRU1C
RVJTSElQUworY29uc3QgTkVUTElOS19EUk9QX01FTUJFUlNISVAgPSBfTkVUTElOS19EUk9QX01F
TUJFUlNISVAKK2NvbnN0IE5FVExJTktfR0VORVJJQyA9IF9ORVRMSU5LX0dFTkVSSUMKK2NvbnN0
IE5FVExJTktfQ09OTkVDVE9SID0gX05FVExJTktfQ09OTkVDVE9SCitjb25zdCBORVRMSU5LX0RO
UlRNU0cgPSBfTkVUTElOS19ETlJUTVNHCitjb25zdCBORVRMSU5LX0FVRElUID0gX05FVExJTktf
QVVESVQKK2NvbnN0IE5FVExJTktfU09DS19ESUFHID0gX05FVExJTktfU09DS19ESUFHCitjb25z
dCBORVRMSU5LX0FERF9NRU1CRVJTSElQID0gX05FVExJTktfQUREX01FTUJFUlNISVAKK2NvbnN0
IE5FVExJTktfSVA2X0ZXID0gX05FVExJTktfSVA2X0ZXCitjb25zdCBORVRMSU5LX1RYX1JJTkcg
PSBfTkVUTElOS19UWF9SSU5HCitjb25zdCBOTEFfRl9ORVNURUQgPSBfTkxBX0ZfTkVTVEVECitj
b25zdCBOTEFfRl9ORVRfQllURU9SREVSID0gX05MQV9GX05FVF9CWVRFT1JERVIKK2NvbnN0IE5M
QV9UWVBFX01BU0sgPSBfTkxBX1RZUEVfTUFTSworY29uc3QgTkxBX0FMSUdOVE8gPSBfTkxBX0FM
SUdOVE8KK2NvbnN0IE5MQV9IRFJMRU4gPSBfTkxBX0hEUkxFTl92YWwKK2NvbnN0IFBBQ0tFVF9N
Ul9VTklDQVNUID0gX1BBQ0tFVF9NUl9VTklDQVNUCitjb25zdCBQQUNLRVRfRkFOT1VUX0RBVEEg
PSBfUEFDS0VUX0ZBTk9VVF9EQVRBCitjb25zdCBQQUNLRVRfT1JJR0RFViA9IF9QQUNLRVRfT1JJ
R0RFVgorY29uc3QgUEFDS0VUX1JFQ1ZfT1VUUFVUID0gX1BBQ0tFVF9SRUNWX09VVFBVVAorY29u
c3QgUEFDS0VUX0xPU1MgPSBfUEFDS0VUX0xPU1MKK2NvbnN0IFBBQ0tFVF9ST0xMT1ZFUl9TVEFU
UyA9IF9QQUNLRVRfUk9MTE9WRVJfU1RBVFMKK2NvbnN0IFBBQ0tFVF9NUl9QUk9NSVNDID0gX1BB
Q0tFVF9NUl9QUk9NSVNDCitjb25zdCBQQUNLRVRfTE9PUEJBQ0sgPSBfUEFDS0VUX0xPT1BCQUNL
Citjb25zdCBQQUNLRVRfVkVSU0lPTiA9IF9QQUNLRVRfVkVSU0lPTgorY29uc3QgUEFDS0VUX1RY
X1JJTkcgPSBfUEFDS0VUX1RYX1JJTkcKK2NvbnN0IFBBQ0tFVF9IT1NUID0gX1BBQ0tFVF9IT1NU
Citjb25zdCBQQUNLRVRfTVJfTVVMVElDQVNUID0gX1BBQ0tFVF9NUl9NVUxUSUNBU1QKK2NvbnN0
IFBBQ0tFVF9TVEFUSVNUSUNTID0gX1BBQ0tFVF9TVEFUSVNUSUNTCitjb25zdCBQQUNLRVRfTVVM
VElDQVNUID0gX1BBQ0tFVF9NVUxUSUNBU1QKK2NvbnN0IFBBQ0tFVF9UWF9USU1FU1RBTVAgPSBf
UEFDS0VUX1RYX1RJTUVTVEFNUAorY29uc3QgUEFDS0VUX0hEUkxFTiA9IF9QQUNLRVRfSERSTEVO
Citjb25zdCBQQUNLRVRfQlJPQURDQVNUID0gX1BBQ0tFVF9CUk9BRENBU1QKK2NvbnN0IFBBQ0tF
VF9DT1BZX1RIUkVTSCA9IF9QQUNLRVRfQ09QWV9USFJFU0gKK2NvbnN0IFBBQ0tFVF9PVVRHT0lO
RyA9IF9QQUNLRVRfT1VUR09JTkcKK2NvbnN0IFBBQ0tFVF9WTkVUX0hEUiA9IF9QQUNLRVRfVk5F
VF9IRFIKK2NvbnN0IFBBQ0tFVF9GQU5PVVQgPSBfUEFDS0VUX0ZBTk9VVAorY29uc3QgUEFDS0VU
X09USEVSSE9TVCA9IF9QQUNLRVRfT1RIRVJIT1NUCitjb25zdCBQQUNLRVRfRFJPUF9NRU1CRVJT
SElQID0gX1BBQ0tFVF9EUk9QX01FTUJFUlNISVAKK2NvbnN0IFBBQ0tFVF9SRVNFUlZFID0gX1BB
Q0tFVF9SRVNFUlZFCitjb25zdCBQQUNLRVRfUURJU0NfQllQQVNTID0gX1BBQ0tFVF9RRElTQ19C
WVBBU1MKK2NvbnN0IFBBQ0tFVF9NUl9BTExNVUxUSSA9IF9QQUNLRVRfTVJfQUxMTVVMVEkKK2Nv
bnN0IFBBQ0tFVF9UWF9IQVNfT0ZGID0gX1BBQ0tFVF9UWF9IQVNfT0ZGCitjb25zdCBQQUNLRVRf
UlhfUklORyA9IF9QQUNLRVRfUlhfUklORworY29uc3QgUEFDS0VUX0FERF9NRU1CRVJTSElQID0g
X1BBQ0tFVF9BRERfTUVNQkVSU0hJUAorY29uc3QgUEFDS0VUX0ZBU1RST1VURSA9IF9QQUNLRVRf
RkFTVFJPVVRFCitjb25zdCBQQUNLRVRfQVVYREFUQSA9IF9QQUNLRVRfQVVYREFUQQorY29uc3Qg
UEFDS0VUX1RJTUVTVEFNUCA9IF9QQUNLRVRfVElNRVNUQU1QCit0eXBlIElub3RpZnlFdmVudCBz
dHJ1Y3QgeyBXZCBpbnQzMjsgTWFzayB1aW50MzI7IENvb2tpZSB1aW50MzI7IExlbiB1aW50MzI7
IE5hbWUgWzBdaW50ODsgfQorY29uc3QgQ0xPTkVfUFRSQUNFID0gX0NMT05FX1BUUkFDRQorY29u
c3QgQ0xPTkVfU0lHSEFORCA9IF9DTE9ORV9TSUdIQU5ECitjb25zdCBDTE9ORV9ERVRBQ0hFRCA9
IF9DTE9ORV9ERVRBQ0hFRAorY29uc3QgQ0xPTkVfU1lTVlNFTSA9IF9DTE9ORV9TWVNWU0VNCitj
b25zdCBDTE9ORV9ORVdVU0VSID0gX0NMT05FX05FV1VTRVIKK2NvbnN0IENMT05FX1BBUkVOVF9T
RVRUSUQgPSBfQ0xPTkVfUEFSRU5UX1NFVFRJRAorY29uc3QgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQg
PSBfQ0xPTkVfQ0hJTERfQ0xFQVJUSUQKK2NvbnN0IENMT05FX1BBUkVOVCA9IF9DTE9ORV9QQVJF
TlQKK2NvbnN0IENMT05FX1VOVFJBQ0VEID0gX0NMT05FX1VOVFJBQ0VECitjb25zdCBDTE9ORV9D
SElMRF9TRVRUSUQgPSBfQ0xPTkVfQ0hJTERfU0VUVElECitjb25zdCBDTE9ORV9USFJFQUQgPSBf
Q0xPTkVfVEhSRUFECitjb25zdCBDTE9ORV9GUyA9IF9DTE9ORV9GUworY29uc3QgQ0xPTkVfTkVX
Q0dST1VQID0gX0NMT05FX05FV0NHUk9VUAorY29uc3QgQ0xPTkVfTkVXSVBDID0gX0NMT05FX05F
V0lQQworY29uc3QgQ0xPTkVfU0VUVExTID0gX0NMT05FX1NFVFRMUworY29uc3QgQ0xPTkVfTkVX
VVRTID0gX0NMT05FX05FV1VUUworY29uc3QgQ0xPTkVfVk0gPSBfQ0xPTkVfVk0KK2NvbnN0IENM
T05FX05FV05FVCA9IF9DTE9ORV9ORVdORVQKK2NvbnN0IENMT05FX0lPID0gX0NMT05FX0lPCitj
b25zdCBDTE9ORV9GSUxFUyA9IF9DTE9ORV9GSUxFUworY29uc3QgQ0xPTkVfVkZPUksgPSBfQ0xP
TkVfVkZPUksKK2NvbnN0IENMT05FX05FV05TID0gX0NMT05FX05FV05TCitjb25zdCBDTE9ORV9O
RVdQSUQgPSBfQ0xPTkVfTkVXUElECitjb25zdCBTaXplb2ZDbXNnaGRyID0gX3NpemVvZl9jbXNn
aGRyCitjb25zdCBTaXplb2ZJUE1yZXEgPSBfc2l6ZW9mX2lwX21yZXEKK2NvbnN0IFNpemVvZklQ
TXJlcW4gPSBfc2l6ZW9mX2lwX21yZXFuCitjb25zdCBTaXplb2ZJUHY2TXJlcSA9IF9zaXplb2Zf
aXB2Nl9tcmVxCitjb25zdCBTaXplb2ZJZkFkZHJtc2cgPSBfc2l6ZW9mX2lmYWRkcm1zZworY29u
c3QgU2l6ZW9mSWZJbmZvbXNnID0gX3NpemVvZl9pZmluZm9tc2cKK2NvbnN0IFNpemVvZkluZXQ0
UGt0aW5mbyA9IF9zaXplb2ZfaW5fcGt0aW5mbworY29uc3QgU2l6ZW9mSW5ldDZQa3RpbmZvID0g
X3NpemVvZl9pbjZfcGt0aW5mbworY29uc3QgU2l6ZW9mSW5vdGlmeUV2ZW50ID0gX3NpemVvZl9p
bm90aWZ5X2V2ZW50Citjb25zdCBTaXplb2ZMaW5nZXIgPSBfc2l6ZW9mX2xpbmdlcgorY29uc3Qg
U2l6ZW9mTXNnaGRyID0gX3NpemVvZl9tc2doZHIKK2NvbnN0IFNpemVvZk5sQXR0ciA9IF9zaXpl
b2ZfbmxhdHRyCitjb25zdCBTaXplb2ZObE1zZ2VyciA9IF9zaXplb2Zfbmxtc2dlcnIKK2NvbnN0
IFNpemVvZk5sTXNnaGRyID0gX3NpemVvZl9ubG1zZ2hkcgorY29uc3QgU2l6ZW9mUnRBdHRyID0g
X3NpemVvZl9ydGF0dHIKK2NvbnN0IFNpemVvZlJ0R2VubXNnID0gX3NpemVvZl9ydGdlbm1zZwor
Y29uc3QgU2l6ZW9mUnRNc2cgPSBfc2l6ZW9mX3J0bXNnCitjb25zdCBTaXplb2ZSdE5leHRob3Ag
PSBfc2l6ZW9mX3J0bmV4dGhvcAorY29uc3QgU2l6ZW9mU29ja0ZpbHRlciA9IF9zaXplb2Zfc29j
a19maWx0ZXIKK2NvbnN0IFNpemVvZlNvY2tGcHJvZyA9IF9zaXplb2Zfc29ja19mcHJvZworY29u
c3QgU2l6ZW9mVWNyZWQgPSBfc2l6ZW9mX3VjcmVkCitjb25zdCBTaXplb2ZJQ01QdjZGaWx0ZXIg
PSBfc2l6ZW9mX2ljbXA2X2ZpbHRlcgorY29uc3QgU2l6ZW9mSVB2Nk1UVUluZm8gPSBfc2l6ZW9m
X2lwNl9tdHVpbmZvCmRpZmYgLS1naXQgYS9saWJnby9nZW5lcmF0ZWQvdmVyc2lvbi5nbyBiL2xp
YmdvL2dlbmVyYXRlZC92ZXJzaW9uLmdvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjgyNGE4MzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnby9nZW5lcmF0ZWQvdmVyc2lvbi5n
bwpAQCAtMCwwICsxLDc3IEBACitwYWNrYWdlIHN5cworY29uc3QgRGVmYXVsdEdvcm9vdCA9ICIv
dXNyL2xvY2FsIgorY29uc3QgVGhlVmVyc2lvbiA9ICJnbzEuOC4zIGdjY2dvLTcgKERlYmlhbiA3
LjQuMC02KSA3LjQuMCIKK2NvbnN0IEdPQVJDSCA9ICJhbWQ2NCIKK2NvbnN0IEdPT1MgPSAibGlu
dXgiCitjb25zdCBHY2Nnb1Rvb2xEaXIgPSAiL3Vzci9sb2NhbC9saWJleGVjL2djYy8vNyIKKwor
dHlwZSBBcmNoRmFtaWx5VHlwZSBpbnQKKworY29uc3QgKAorCVVOS05PV04gQXJjaEZhbWlseVR5
cGUgPSBpb3RhCisJSTM4NgorCUFMUEhBCisJQU1ENjQKKwlBUk0KKwlBUk02NAorCUlBNjQKKwlN
NjhLCisJTUlQUworCU1JUFM2NAorCVBQQworCVBQQzY0CisJUzM5MAorCVMzOTBYCisJU1BBUkMK
KwlTUEFSQzY0CispCisKK2NvbnN0IEdvYXJjaDM4NiA9IDAKK2NvbnN0IEdvYXJjaEFscGhhID0g
MAorY29uc3QgR29hcmNoQW1kNjQgPSAxCitjb25zdCBHb2FyY2hBbWQ2NHAzMiA9IDAKK2NvbnN0
IEdvYXJjaEFybSA9IDAKK2NvbnN0IEdvYXJjaEFybWJlID0gMAorY29uc3QgR29hcmNoQXJtNjQg
PSAwCitjb25zdCBHb2FyY2hBcm02NGJlID0gMAorY29uc3QgR29hcmNoSWE2NCA9IDAKK2NvbnN0
IEdvYXJjaE02OGsgPSAwCitjb25zdCBHb2FyY2hNaXBzID0gMAorY29uc3QgR29hcmNoTWlwc2xl
ID0gMAorY29uc3QgR29hcmNoTWlwczY0ID0gMAorY29uc3QgR29hcmNoTWlwczY0bGUgPSAwCitj
b25zdCBHb2FyY2hNaXBzNjRwMzIgPSAwCitjb25zdCBHb2FyY2hNaXBzNjRwMzJsZSA9IDAKK2Nv
bnN0IEdvYXJjaFBwYyA9IDAKK2NvbnN0IEdvYXJjaFBwYzY0ID0gMAorY29uc3QgR29hcmNoUHBj
NjRsZSA9IDAKK2NvbnN0IEdvYXJjaFMzOTAgPSAwCitjb25zdCBHb2FyY2hTMzkweCA9IDAKK2Nv
bnN0IEdvYXJjaFNwYXJjID0gMAorY29uc3QgR29hcmNoU3BhcmM2NCA9IDAKKworY29uc3QgKAor
CUFyY2hGYW1pbHkgPSBBTUQ2NAorCUJpZ0VuZGlhbiA9IDAKKwlDYWNoZUxpbmVTaXplID0gNjQK
KwlQaHlzUGFnZVNpemUgPSA0MDk2CisJUENRdWFudHVtID0gMQorCUludDY0QWxpZ24gPSA4CisJ
SHVnZVBhZ2VTaXplID0gMSA8PCAyMQorCU1pbkZyYW1lU2l6ZSA9IDAKKykKKworY29uc3QgR29v
c0FuZHJvaWQgPSAwCitjb25zdCBHb29zRGFyd2luID0gMAorY29uc3QgR29vc0RyYWdvbmZseSA9
IDAKK2NvbnN0IEdvb3NGcmVlYnNkID0gMAorY29uc3QgR29vc0lyaXggPSAwCitjb25zdCBHb29z
TGludXggPSAxCitjb25zdCBHb29zTmV0YnNkID0gMAorY29uc3QgR29vc09wZW5ic2QgPSAwCitj
b25zdCBHb29zUGxhbjkgPSAwCitjb25zdCBHb29zUnRlbXMgPSAwCitjb25zdCBHb29zU29sYXJp
cyA9IDAKK2NvbnN0IEdvb3NXaW5kb3dzID0gMAorCit0eXBlIFVpbnRyZWcgdWludHB0cgpkaWZm
IC0tZ2l0IGEvbGliZ28vcGFja2FnZXMudWsgYi9saWJnby9wYWNrYWdlcy51awpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWUzMWUyCi0tLSAvZGV2L251bGwKKysrIGIvbGli
Z28vcGFja2FnZXMudWsKQEAgLTAsMCArMSw5ODEgQEAKKyMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0
ZWQKKyQoTElCR09fQlVJTEQpL3J1bnRpbWUvaW50ZXJuYWwvYXRvbWljLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL2ludGVybmFsL2F0b21pYy9nY2Nnby5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9pbnRlcm5hbC9hdG9taWMvc3R1YnMuZ28KKwkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwK
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1ydW50aW1lL2ludGVybmFsL2F0b21pYyAtZmdvLWNvbXBpbGluZy1ydW50aW1l
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvcnVudGltZS9pbnRlcm5hbC9zeXMubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvaW50ZXJuYWwvc3lzL2ludHJpbnNpY3MuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvaW50ZXJuYWwvc3lzL3N0dWJzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL2ludGVybmFsL3N5cy9zeXMuZ28gJChMSUJHQ0NfQkFTRSkvbGliZ28vZ2VuZXJhdGVk
L3ZlcnNpb24uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwg
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQo
R09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lL2ludGVybmFsL3N5
cyAtZmdvLWNvbXBpbGluZy1ydW50aW1lICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZXJyb3JzLm86ICQoTElCR09f
RVhUUkFDVEVEKS9nby9lcnJvcnMvZXJyb3JzLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxp
YmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVycm9ycyAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2ludGVy
bmFsL3JhY2UubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3JhY2UvZG9jLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9yYWNlL25vcmFjZS5nbworCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMg
LWZnby1wa2dwYXRoPWludGVybmFsL3JhY2UgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8vaW50ZXJuYWwv
Y2lwaGVyaHcubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9pbnRlcm5hbC9jaXBoZXJo
dy9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9pbnRlcm5hbC9jaXBoZXJody9n
ZW5lcmljLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2ludGVybmFsL2NpcGhl
cmh3ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQorJChMSUJHT19CVUlMRCkvdW5pY29kZS91dGY4Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby91
bmljb2RlL3V0ZjgvdXRmOC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXVuaWNvZGUvdXRm
OCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkK
KyQoTElCR09fQlVJTEQpL2NyeXB0by9zdWJ0bGUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2Ny
eXB0by9zdWJ0bGUvY29uc3RhbnRfdGltZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNy
eXB0by9zdWJ0bGUgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6
Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jb250YWluZXIvbGlzdC5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vY29udGFpbmVyL2xpc3QvbGlzdC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PWNvbnRhaW5lci9saXN0ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAg
JChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbWF0aC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWF0aC9hYnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYWNvc2guZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL21hdGgvYXNpbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9h
c2luaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9hdGFuLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL2F0YW4yLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2F0YW5oLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpdHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L21hdGgvY2JydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jb25zdC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbWF0aC9jb3B5c2lnbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0
aC9kaW0uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvZXJmLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL2V4cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9leHBtMS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9mbG9vci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bWF0aC9mcmV4cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9nYW1tYS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbWF0aC9oeXBvdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9q
MC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9qMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWF0aC9qbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9sZGV4cC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbWF0aC9sZ2FtbWEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgv
bG9nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2xvZzEwLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL2xvZzFwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2xvZ2IuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvbW9kLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9t
YXRoL21vZGYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvbmV4dGFmdGVyLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL3Bvdy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9w
b3cxMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yZW1haW5kZXIuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL21hdGgvc2lnbmJpdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9z
aW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvc2luY29zLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL3NpbmguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvc3FydC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC90YW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21h
dGgvdGFuaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC91bnNhZmUuZ28KKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bWF0aCAkXiAt
byAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElC
R09fQlVJTEQpL2NvbnRhaW5lci9yaW5nLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb250YWlu
ZXIvcmluZy9yaW5nLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAk
QCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwK
KwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y29udGFpbmVyL3Jpbmcg
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvY3J5cHRvL2N1cnZlMjU1MTkubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vY3VydmUyNTUxOS9jdXJ2ZTI1NTE5Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvY3J5cHRvL2N1cnZlMjU1MTkvZG9j
LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElC
R09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChM
SUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFuZ19vcmcveC9jcnlwdG8v
Y3VydmUyNTUxOSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2ludGVybmFsL25ldHRyYWNlLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9pbnRlcm5hbC9uZXR0cmFjZS9uZXR0cmFjZS5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWludGVybmFsL25ldHRyYWNlICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvc3luYy9hdG9taWMubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5bmMvYXRvbWljL2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vc3luYy9hdG9taWMvdmFsdWUuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRp
ciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1zeW5j
L2F0b21pYyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkKKyQoTElCR09fQlVJTEQpL3VuaWNvZGUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3Vu
aWNvZGUvY2FzZXRhYmxlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdW5pY29kZS9kaWdpdC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdW5pY29kZS9ncmFwaGljLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby91bmljb2RlL2xldHRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdW5pY29kZS90
YWJsZXMuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdv
LXBrZ3BhdGg9dW5pY29kZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2VuY29kaW5nLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9lbmNvZGluZy9lbmNvZGluZy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJ
QkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZyAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3VuaWNv
ZGUvdXRmMTYubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3VuaWNvZGUvdXRmMTYvdXRmMTYuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD11bmljb2RlL3V0ZjE2ICReIC1vICRAICYmIFwKKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvaW1h
Z2UvY29sb3IubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2NvbG9yL2NvbG9yLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9jb2xvci95Y2Jjci5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWltYWdlL2NvbG9yICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvcnVudGltZS5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS9hbGcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUv
Y2dvX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2NoYW4uZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY29tcGlsZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvY3B1cHJvZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jcHV0aWNr
cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9kZWJ1Zy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9lbnZfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvZXJyb3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZXh0ZXJuLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2ZmaS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS9oYXNoNjQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaGFzaG1hcC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9oYXNobWFwX2Zhc3QuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvaWZhY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUv
bGZzdGFjay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sZnN0YWNrXzY0Yml0Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2xvY2tfZnV0ZXguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvbWNhY2hlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L21wcm9mLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21zYW4wLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9ydW50aW1lL21zdGF0cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS9uZXRwb2xsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL25ldHBvbGxfZXBv
bGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvb3NfZ2NjZ28uZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvb3NfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1
bnRpbWUvcGFuaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJpbnQuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
cnVudGltZS9yYWNlMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9yZGVidWcuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9ydW50aW1lMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9y
dW50aW1lMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zZWxlY3QuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2VtYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS9zaWduYWxfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lnbmFs
X3NpZ2hhbmRsZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lnbmFsX3VuaXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lncXVldWUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvc2l6ZWNsYXNzZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1
bnRpbWUvc2xpY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc3RyaW5nLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3N0dWJzLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3N0dWJzMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zeW10YWIu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdGltZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS90cmFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90cmFj
ZWJhY2tfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHlwZS5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90eXBla2luZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS91bmFsaWduZWQxLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3V0
ZjguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvd3JpdGVfZXJyLmdvICQoTElCR0ND
X0JBU0UpL2xpYmdvL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28gJChMSUJHQ0NfQkFTRSkv
bGliZ28vZ2VuZXJhdGVkL3NpZ3RhYi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lIC1mZ28tYy1oZWFkZXI9JChMSUJHQ0Nf
QkFTRSkvbGliZ28vZ2VuZXJhdGVkL3J1bnRpbWUuaW5jLnRtcCAtZmdvLWNvbXBpbGluZy1ydW50
aW1lICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQorJChMSUJHT19CVUlMRCkvaW1hZ2UvY29sb3IvcGFsZXR0ZS5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vaW1hZ2UvY29sb3IvcGFsZXR0ZS9nZW5lcmF0ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vaW1hZ2UvY29sb3IvcGFsZXR0ZS9wYWxldHRlLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIg
LXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9aW1hZ2UvY29sb3IvcGFsZXR0ZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhw
b3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9jcnlwdG8v
cG9seTEzMDUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vcG9s
eTEzMDUvcG9seTEzMDUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlw
dG8vcG9seTEzMDUvc3VtX3JlZi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXZlbmRvci9n
b2xhbmdfb3JnL3gvY3J5cHRvL3BvbHkxMzA1ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbWF0aC9jbXBseC5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9hYnMuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL21hdGgvY21wbHgvYXNpbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9j
b25qLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L2V4cC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9pc2luZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0
aC9jbXBseC9pc25hbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9sb2cuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21wbHgvcGhhc2UuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL21hdGgvY21wbHgvcG9sYXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21w
bHgvcG93LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L3JlY3QuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL21hdGgvY21wbHgvc2luLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9t
YXRoL2NtcGx4L3NxcnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21wbHgvdGFuLmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bWF0aC9jbXBseCAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3N5bmMu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL3N5bmMvY29uZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3luYy9tdXRleC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3luYy9vbmNlLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9zeW5jL3Bvb2wuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5bmMv
cnVudGltZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3luYy9yd211dGV4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9zeW5jL3dhaXRncm91cC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1zeW5jICReIC1vICRAICYmIFwKKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvc3RyY29u
di5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9hdG9iLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zdHJjb252L2F0b2YuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmNvbnYvYXRv
aS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9kZWNpbWFsLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9zdHJjb252L2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9l
eHRmbG9hdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9mdG9hLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9zdHJjb252L2lzcHJpbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0
cmNvbnYvaXRvYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9xdW90ZS5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1zdHJj
b252ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQorJChMSUJHT19CVUlMRCkvaW8ubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2lvL2lvLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9pby9tdWx0aS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW8v
cGlwZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAk
KExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28t
cGtncGF0aD1pbyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2ludGVybmFsL3NpbmdsZWZsaWdodC5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvc2luZ2xlZmxpZ2h0L3NpbmdsZWZsaWdodC5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPWludGVybmFsL3NpbmdsZWZsaWdodCAkXiAtbyAkQCAmJiBc
CisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQp
L21hdGgvcmFuZC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yYW5kL2V4cC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yYW5kL25vcm1hbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWF0aC9yYW5kL3JhbmQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvcmFuZC9ybmcu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvcmFuZC96aXBmLmdvCisJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
CisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9bWF0aC9yYW5kICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvc3lzY2FsbC5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9kaXJlbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2Nh
bGwvZW5kaWFuX2xpdHRsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lbnZfdW5p
eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJzdHJfbGludXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZXhlY19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3lzY2FsbC9leGVjX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGli
Y2FsbF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4
X2FtZDY0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfbGludXhfdXN0
YXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eF91dGltZXNu
YW5vLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfcG9zaXguZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeF9sYXJnZWZpbGUuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9zdXBwb3J0LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfdW5hbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3N5c2NhbGwvbGliY2FsbF93YWl0NC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9s
c2ZfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbXNhbjAuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbmV0bGlua19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vc3lzY2FsbC9zZXR1aWRnaWRfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5
c2NhbGwvc2xlZXBfc2VsZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tj
bXNnX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tjbXNnX3VuaXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zeXNjYWxsL3NvY2tldF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lz
Y2FsbC9zb2NrZXRfbGludXhfdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9z
b2NrZXRfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3RyLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3N5c2NhbGwvc3lzY2FsbF9lcnJuby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9z
eXNjYWxsX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfbGlu
dXhfYW1kNjQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF91bml4Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3RpbWVzdHJ1Y3QuZ28gJChMSUJHQ0NfQkFT
RSkvbGliZ28vZ2VuZXJhdGVkL2xpYmNhbGxzLmdvICQoTElCR0NDX0JBU0UpL2xpYmdvL2dlbmVy
YXRlZC9zeXNpbmZvLmdvICQoTElCR0NDX0JBU0UpL2xpYmdvL2dlbmVyYXRlZC9zeXNjYWxsX2Fy
Y2guZ28gJChMSUJHQ0NfQkFTRSkvbGliZ28vZ2VuZXJhdGVkL2Vwb2xsLmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXN5c2NhbGwgJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9oYXNoLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9oYXNoL2hhc2guZ28KKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aGFz
aCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkK
KyQoTElCR09fQlVJTEQpL3J1bnRpbWUvdHJhY2UubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3J1
bnRpbWUvdHJhY2UvdHJhY2UuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90
ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkg
JiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lL3Ry
YWNlICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQorJChMSUJHT19CVUlMRCkvc3RyaW5ncy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyaW5n
cy9jb21wYXJlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJpbmdzL3JlYWRlci5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vc3RyaW5ncy9yZXBsYWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9zdHJpbmdzL3NlYXJjaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyaW5ncy9zdHJpbmdz
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJpbmdzL3N0cmluZ3NfZGVjbC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3RyaW5ncy9zdHJpbmdzX2dlbmVyaWMuZ28KKwkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwK
KwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9c3RyaW5ncyAkXiAtbyAk
QCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09f
QlVJTEQpL2J5dGVzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9idWZmZXIuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2J5dGVzL2J5dGVzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9i
eXRlcy9ieXRlc19kZWNsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9ieXRlc19nZW5l
cmljLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9yZWFkZXIuZ28KKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Ynl0ZXMgJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9jcnlwdG8vY2lwaGVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vY2lw
aGVyL2NiYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2NpcGhlci9jZmIuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIvY2lwaGVyLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9jcnlwdG8vY2lwaGVyL2N0ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L2NpcGhlci9nY20uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIvaW8uZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIvb2ZiLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9jcnlwdG8vY2lwaGVyL3hvci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNy
eXB0by9jaXBoZXIgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6
Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9oYXNoL2NyYzMyLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9oYXNoL2NyYzMyL2NyYzMyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9oYXNoL2NyYzMy
L2NyYzMyX2dlbmVyaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2hhc2gvY3JjMzIvY3JjMzJf
b3RoZXJhcmNoLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aGFzaC9jcmMzMiAkXiAtbyAk
QCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09f
QlVJTEQpL2hhc2gvZm52Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9oYXNoL2Zudi9mbnYuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1oYXNoL2ZudiAkXiAtbyAkQCAmJiBcCisJb2JqY29w
eSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NyeXB0by9o
bWFjLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vaG1hYy9obWFjLmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2htYWMgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9oYXNoL2FkbGVyMzIu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL2hhc2gvYWRsZXIzMi9hZGxlcjMyLmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9aGFzaC9hZGxlcjMyICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1q
IC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvaGFzaC9jcmM2NC5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaGFzaC9jcmM2NC9jcmM2NC5nbworCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMg
LWZnby1wa2dwYXRoPWhhc2gvY3JjNjQgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4
cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8ubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL2NyeXB0by9jcnlwdG8uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGli
Z286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChM
SUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvICReIC1vICRAICYmIFwKKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvcmVmbGVj
dC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVmbGVjdC9kZWVwZXF1YWwuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3JlZmxlY3QvbWFrZWZ1bmMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3Jl
ZmxlY3QvbWFrZWZ1bmNfZmZpLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWZsZWN0L3N3YXBw
ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZmxlY3QvdHlwZS5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcmVmbGVjdC92YWx1ZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1yZWZsZWN0ICReIC1vICRAICYmIFwKKwlvYmpjb3B5
IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZW5jb2Rpbmcv
YmFzZTY0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9iYXNlNjQvYmFzZTY0Lmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZW5jb2RpbmcvYmFzZTY0ICReIC1vICRAICYmIFwK
KwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkv
Y3J5cHRvL3JjNC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3JjNC9yYzQuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9yYzQvcmM0X3JlZi5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWNyeXB0by9yYzQgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9lbmNvZGluZy9hc2NpaTg1Lm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9hc2NpaTg1L2FzY2lpODUuZ28KKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1Mp
IC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy9hc2NpaTg1ICReIC1vICRAICYmIFwKKwlvYmpjb3B5
IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY3J5cHRvL2Fl
cy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2Flcy9ibG9jay5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vY3J5cHRvL2Flcy9jaXBoZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Ny
eXB0by9hZXMvY2lwaGVyX2dlbmVyaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9h
ZXMvY29uc3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9hZXMvbW9kZXMuZ28KKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vYWVzICReIC1vICRAICYmIFwKKwlvYmpjb3B5
IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY3J5cHRvL21k
NS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL21kNS9tZDUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2NyeXB0by9tZDUvbWQ1YmxvY2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Ny
eXB0by9tZDUvbWQ1YmxvY2tfZ2VuZXJpYy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNy
eXB0by9tZDUgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89
LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8vc2hhNTEyLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9jcnlwdG8vc2hhNTEyL3NoYTUxMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L3NoYTUxMi9zaGE1MTJibG9jay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3NoYTUx
Mi9zaGE1MTJibG9ja19nZW5lcmljLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAk
KG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIg
JEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRv
L3NoYTUxMiAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkKKyQoTElCR09fQlVJTEQpL2NyeXB0by9zaGEyNTYubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2NyeXB0by9zaGEyNTYvc2hhMjU2LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8v
c2hhMjU2L3NoYTI1NmJsb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vc2hhMjU2
L3NoYTI1NmJsb2NrX2dlbmVyaWMuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQo
bm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAk
QCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8v
c2hhMjU2ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQorJChMSUJHT19CVUlMRCkvY3J5cHRvL3NoYTEubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2NyeXB0by9zaGExL3NoYTEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9zaGExL3No
YTFibG9jay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3NoYTEvc2hhMWJsb2NrX2dl
bmVyaWMuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vc2hhMSAkXiAtbyAkQCAm
JiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJ
TEQpL2dvbGFuZ19vcmcveC90ZXh0L3RyYW5zZm9ybS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z29sYW5nX29yZy94L3RleHQvdHJhbnNmb3JtL3RyYW5zZm9ybS5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPXZlbmRvci9nb2xhbmdfb3JnL3gvdGV4dC90cmFuc2Zvcm0gJF4gLW8gJEAgJiYg
XAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxE
KS9idWZpby5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYnVmaW8vYnVmaW8uZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2J1ZmlvL3NjYW4uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9YnVmaW8gJF4gLW8gJEAgJiYgXAorCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS90ZXh0L3RhYndy
aXRlci5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90YWJ3cml0ZXIvdGFid3JpdGVyLmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dGV4dC90YWJ3cml0ZXIgJF4gLW8gJEAgJiYgXAor
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9l
bmNvZGluZy9iYXNlMzIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2Jhc2UzMi9i
YXNlMzIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy9iYXNlMzIgJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9wYXRoLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9wYXRoL21hdGNoLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9wYXRoL3BhdGguZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGli
Z286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChM
SUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9cGF0aCAkXiAtbyAkQCAmJiBcCisJb2JqY29w
eSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2h0bWwubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2h0bWwvZW50aXR5LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9odG1sL2VzY2FwZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1Mp
IC1jIC1mZ28tcGtncGF0aD1odG1sICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvaW1hZ2UubzogJChMSUJHT19FWFRS
QUNURUQpL2dvL2ltYWdlL2Zvcm1hdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvZ2Vv
bS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvaW1hZ2UuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2ltYWdlL25hbWVzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS95Y2Jjci5n
bworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD1pbWFnZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkKKyQoTElCR09fQlVJTEQpL2ltYWdlL2ludGVybmFsL2ltYWdldXRpbC5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vaW1hZ2UvaW50ZXJuYWwvaW1hZ2V1dGlsL2ltYWdldXRpbC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvaW50ZXJuYWwvaW1hZ2V1dGlsL2ltcGwuZ28KKwkkKGNh
bGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNU
RUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1pbWFnZS9pbnRlcm5hbC9pbWFnZXV0aWwgJF4gLW8gJEAgJiYg
XAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxE
KS9pbWFnZS9qcGVnLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9qcGVnL2ZkY3QuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2pwZWcvaHVmZm1hbi5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vaW1hZ2UvanBlZy9pZGN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9q
cGVnL3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvanBlZy9zY2FuLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9qcGVnL3dyaXRlci5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWltYWdlL2pwZWcgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9pbWFnZS9kcmF3Lm86ICQoTElCR09f
RVhUUkFDVEVEKS9nby9pbWFnZS9kcmF3L2RyYXcuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08s
bGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAt
cCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD1pbWFnZS9kcmF3ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvYmluYXJ5Lm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9lbmNvZGluZy9iaW5hcnkvYmluYXJ5LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9lbmNvZGluZy9iaW5hcnkvdmFyaW50LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdv
OiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChk
aXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZW5j
b2RpbmcvYmluYXJ5ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvc29ydC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c29ydC9zZWFyY2guZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3NvcnQvc29ydC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc29ydC96ZnVuY3ZlcnNpb24uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9c29ydCAkXiAtbyAkQCAmJiBcCisJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2lu
dGVybmFsL3N5c2NhbGwvdW5peC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvc3lz
Y2FsbC91bml4L2R1bW15LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9zeXNjYWxs
L3VuaXgvZ2V0cmFuZG9tX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9z
eXNjYWxsL3VuaXgvZ2V0cmFuZG9tX2xpbnV4X2FtZDY0LmdvCisJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9aW50ZXJuYWwvc3lzY2FsbC91bml4ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZXhwL3Rlcm1pbmFsLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9leHAvdGVybWluYWwvdGVybWluYWwuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2V4cC90ZXJtaW5hbC91dGlsLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIg
LXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9ZXhwL3Rlcm1pbmFsICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAg
JChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvdGltZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vdGltZS9mb3JtYXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RpbWUvc2xlZXAuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3RpbWUvc3lzX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3RpbWUvdGljay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGltZS90aW1lLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby90aW1lL3pvbmVpbmZvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90aW1l
L3pvbmVpbmZvX3JlYWQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RpbWUvem9uZWluZm9fdW5p
eC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD10aW1lICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvY29tcHJlc3MvYnppcDIubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NvbXByZXNzL2J6aXAyL2JpdF9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2NvbXByZXNzL2J6aXAyL2J6aXAyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9i
emlwMi9odWZmbWFuLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9iemlwMi9tb3Zl
X3RvX2Zyb250LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y29tcHJlc3MvYnppcDIgJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9jb250YWluZXIvaGVhcC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29udGFp
bmVyL2hlYXAvaGVhcC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNvbnRhaW5lci9oZWFw
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvcmVnZXhwL3N5bnRheC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVn
ZXhwL3N5bnRheC9jb21waWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWdleHAvc3ludGF4
L2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVnZXhwL3N5bnRheC9wYXJzZS5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcmVnZXhwL3N5bnRheC9wZXJsX2dyb3Vwcy5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcmVnZXhwL3N5bnRheC9wcm9nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
ZWdleHAvc3ludGF4L3JlZ2V4cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVnZXhwL3N5bnRh
eC9zaW1wbGlmeS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJ
JChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXJlZ2V4cC9zeW50YXggJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9lbmNvZGluZy9wZW0ubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5n
L3BlbS9wZW0uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwg
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQo
R09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy9wZW0gJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9jcnlwdG8vZGVzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vZGVzL2Js
b2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vZGVzL2NpcGhlci5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2Rlcy9jb25zdC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPWNyeXB0by9kZXMgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAk
KEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIw
cG9seTEzMDUvaW50ZXJuYWwvY2hhY2hhMjAubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFu
Z19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS9pbnRlcm5hbC9jaGFjaGEyMC9jaGFjaGFf
Z2VuZXJpYy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXZlbmRvci9nb2xhbmdfb3JnL3gv
Y3J5cHRvL2NoYWNoYTIwcG9seTEzMDUvaW50ZXJuYWwvY2hhY2hhMjAgJF4gLW8gJEAgJiYgXAor
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9n
b2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS9jaGFjaGEyMHBvbHkxMzA1
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIwcG9s
eTEzMDUvY2hhY2hhMjBwb2x5MTMwNV9nZW5lcmljLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9n
b2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUvY2hhY2hhMjBwb2x5MTMwNV9ub2Fz
bS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBv
bHkxMzA1L2NoYWNoYTIwcG9seTEzMDVfdGVzdF92ZWN0b3JzLmdvCisJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJ
bWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdv
LXBrZ3BhdGg9dmVuZG9yL2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNSAkXiAt
byAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElC
R09fQlVJTEQpL29zLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9kaXIuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL29zL2Rpcl9nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGly
X2xhcmdlZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX3VuaXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL29zL2Vudi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJyb3Iu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Vycm9yX3VuaXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL29zL2V4ZWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWNfcG9zaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vb3MvZXhlY3V0YWJsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZV9w
cm9jZnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGUuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL29zL2ZpbGVfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVfdW5p
eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZ2V0d2QuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL3BhdGguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3BhdGhfdW5peC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGlwZV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3MvcHJvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3RhdF9hdGltLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9vcy9zdGF0X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0
aWNreV9ub3Ric2QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0ci5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3Mvc3lzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zeXNfbGludXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N5c191bml4LmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9vcy90eXBlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvdHlwZXNfdW5peC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvd2FpdF93YWl0aWQuZ28KKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9b3MgJF4gLW8gJEAgJiYgXAor
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9y
ZWdleHAubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZ2V4cC9iYWNrdHJhY2suZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3JlZ2V4cC9leGVjLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWdl
eHAvb25lcGFzcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVnZXhwL3JlZ2V4cC5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1yZWdl
eHAgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
CiskKExJQkdPX0JVSUxEKS9ydW50aW1lL2RlYnVnLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL2RlYnVnL2dhcmJhZ2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZGVi
dWcvc3RhY2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZGVidWcvc3R1YnMuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lL2RlYnVnICReIC1vICRAICYmIFwKKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZm10
Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9mbXQvZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9mbXQvZm9ybWF0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9mbXQvcHJpbnQuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2ZtdC9zY2FuLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdv
OiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWZtdCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAt
aiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3BhdGgvZmlsZXBh
dGgubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3BhdGgvZmlsZXBhdGgvbWF0Y2guZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3BhdGgvZmlsZXBhdGgvcGF0aC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcGF0aC9maWxlcGF0aC9wYXRoX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3BhdGgv
ZmlsZXBhdGgvc3ltbGluay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcGF0aC9maWxlcGF0aC9z
eW1saW5rX3VuaXguZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAor
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1wYXRoL2ZpbGVwYXRoICRe
IC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChM
SUJHT19CVUlMRCkvb3Mvc2lnbmFsLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zaWduYWwv
ZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zaWduYWwvc2lnbmFsLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9vcy9zaWduYWwvc2lnbmFsX3VuaXguZ28KKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlt
a2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28t
cGtncGF0aD1vcy9zaWduYWwgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9pbmRleC9zdWZmaXhhcnJheS5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vaW5kZXgvc3VmZml4YXJyYXkvcXN1ZnNvcnQuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2luZGV4L3N1ZmZpeGFycmF5L3N1ZmZpeGFycmF5LmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9aW5kZXgvc3VmZml4YXJyYXkgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9pby9pb3V0aWwu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL2lvL2lvdXRpbC9pb3V0aWwuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2lvL2lvdXRpbC90ZW1wZmlsZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PWlvL2lvdXRpbCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL21hdGgvYmlnLm86ICQoTElCR09fRVhUUkFDVEVEKS9n
by9tYXRoL2JpZy9hY2N1cmFjeV9zdHJpbmcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgv
YmlnL2FyaXRoLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9hcml0aF9kZWNsX3B1
cmUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL2RlY2ltYWwuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL21hdGgvYmlnL2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9i
aWcvZmxvYXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL2Zsb2F0Y29udi5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9iaWcvZmxvYXRtYXJzaC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbWF0aC9iaWcvZnRvYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9iaWcv
aW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9pbnRjb252LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9tYXRoL2JpZy9pbnRtYXJzaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bWF0aC9iaWcvbmF0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9uYXRjb252Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9wcmltZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbWF0aC9iaWcvcmF0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9yYXRj
b252LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9yYXRtYXJzaC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbWF0aC9iaWcvcm91bmRpbmdtb2RlX3N0cmluZy5nbworCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykg
LWMgLWZnby1wa2dwYXRoPW1hdGgvYmlnICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZGVidWcvcGxhbjlvYmoubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL3BsYW45b2JqL2ZpbGUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2RlYnVnL3BsYW45b2JqL3BsYW45b2JqLmdvCisJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9ZGVidWcvcGxhbjlvYmogJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9kZWJ1Zy9kd2FyZi5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZGVidWcvZHdhcmYvYnVmLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9k
ZWJ1Zy9kd2FyZi9jbGFzc19zdHJpbmcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2R3
YXJmL2NvbnN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9kd2FyZi9lbnRyeS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZHdhcmYvbGluZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZGVidWcvZHdhcmYvb3Blbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZHdh
cmYvdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZHdhcmYvdHlwZXVuaXQuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2R3YXJmL3VuaXQuZ28KKwkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwK
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1kZWJ1Zy9kd2FyZiAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhw
b3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NvbXByZXNzL2x6dy5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvbHp3L3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vY29tcHJlc3MvbHp3L3dyaXRlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNv
bXByZXNzL2x6dyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2FyY2hpdmUvdGFyLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9hcmNoaXZlL3Rhci9jb21tb24uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUv
dGFyL2Zvcm1hdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYXJjaGl2ZS90YXIvcmVhZGVyLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9hcmNoaXZlL3Rhci9zdGF0X2F0aW0uZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2FyY2hpdmUvdGFyL3N0YXRfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vYXJjaGl2ZS90YXIvc3RyY29udi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYXJjaGl2ZS90
YXIvd3JpdGVyLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9YXJjaGl2ZS90YXIgJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9lbmNvZGluZy9oZXgubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2hl
eC9oZXguZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy9oZXggJF4gLW8gJEAg
JiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JV
SUxEKS9lbmNvZGluZy94bWwubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL3htbC9t
YXJzaGFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy94bWwvcmVhZC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcveG1sL3R5cGVpbmZvLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9lbmNvZGluZy94bWwveG1sLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdv
OiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChk
aXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZW5j
b2RpbmcveG1sICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvY29tcHJlc3MvZmxhdGUubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NvbXByZXNzL2ZsYXRlL2RlZmxhdGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Nv
bXByZXNzL2ZsYXRlL2RlZmxhdGVmYXN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVz
cy9mbGF0ZS9kaWN0X2RlY29kZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NvbXByZXNzL2Zs
YXRlL2h1ZmZtYW5fYml0X3dyaXRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3Mv
ZmxhdGUvaHVmZm1hbl9jb2RlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9mbGF0
ZS9pbmZsYXRlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9mbGF0ZS9yZXZlcnNl
X2JpdHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NvbXByZXNzL2ZsYXRlL3Rva2VuLmdvCisJ
JChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhU
UkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19H
T0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y29tcHJlc3MvZmxhdGUgJF4gLW8gJEAgJiYgXAorCW9i
amNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9lbmNv
ZGluZy9jc3YubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2Nzdi9yZWFkZXIuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2Nzdi93cml0ZXIuZ28KKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1lbmNvZGluZy9jc3YgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvbmV0
L2h0dHAyL2hwYWNrLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvbmV0L2h0
dHAyL2hwYWNrL2VuY29kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L25l
dC9odHRwMi9ocGFjay9ocGFjay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94
L25ldC9odHRwMi9ocGFjay9odWZmbWFuLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdf
b3JnL3gvbmV0L2h0dHAyL2hwYWNrL3RhYmxlcy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PXZlbmRvci9nb2xhbmdfb3JnL3gvbmV0L2h0dHAyL2hwYWNrICReIC1vICRAICYmIFwKKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZW5jb2Rp
bmcvZ29iLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9nb2IvZGVjX2hlbHBlcnMu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9kZWNvZGUuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9kZWNvZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9lbmNvZGluZy9nb2IvZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9nb2Iv
ZW5jX2hlbHBlcnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9lbmNvZGUu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9lbmNvZGVyLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9lbmNvZGluZy9nb2IvZXJyb3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2VuY29kaW5nL2dvYi90eXBlLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5v
dGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZW5jb2Rpbmcv
Z29iICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQorJChMSUJHT19CVUlMRCkvbmV0L3VybC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3Vy
bC91cmwuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvdXJsICReIC1vICRAICYmIFwK
KwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkv
Y29udGV4dC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29udGV4dC9jb250ZXh0LmdvCisJJChj
YWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFD
VEVEKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNvbnRl
eHQgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
CiskKExJQkdPX0JVSUxEKS9lbmNvZGluZy9qc29uLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9l
bmNvZGluZy9qc29uL2RlY29kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvanNv
bi9lbmNvZGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2pzb24vZm9sZC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvanNvbi9pbmRlbnQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2VuY29kaW5nL2pzb24vc2Nhbm5lci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
ZW5jb2RpbmcvanNvbi9zdHJlYW0uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2pz
b24vdGFibGVzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9qc29uL3RhZ3MuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy9qc29uICReIC1vICRAICYmIFwKKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbG9n
Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9sb2cvbG9nLmdvCisJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWxvZyAkXiAtbyAkQCAmJiBcCisJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2Rl
YnVnL2dvc3ltLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9nb3N5bS9wY2xudGFiLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9nb3N5bS9zeW10YWIuZ28KKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1kZWJ1Zy9nb3N5bSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29f
ZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9uZXQv
aWRuYS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L25ldC9pZG5hL2lkbmEu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9uZXQvaWRuYS9wdW55Y29kZS5n
bworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXZlbmRvci9nb2xhbmdfb3JnL3gvbmV0L2lkbmEg
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvdGV4dC91bmljb2RlL25vcm0ubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3VuaWNvZGUvbm9ybS9jb21wb3NpdGlvbi5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL2Zv
cm1pbmZvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC91bmljb2Rl
L25vcm0vaW5wdXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3Vu
aWNvZGUvbm9ybS9pdGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4
dC91bmljb2RlL25vcm0vbm9ybWFsaXplLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdf
b3JnL3gvdGV4dC91bmljb2RlL25vcm0vcmVhZHdyaXRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL3RhYmxlcy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL3RyYW5zZm9ybS5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL3RyaWUuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L3RleHQvdW5pY29k
ZS9ub3JtICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQorJChMSUJHT19CVUlMRCkvbWltZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWltZS9l
bmNvZGVkd29yZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWltZS9ncmFtbWFyLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9taW1lL21lZGlhdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bWltZS90eXBlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9taW1lL3R5cGVfdW5peC5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1taW1l
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L3RleHQvd2lkdGgubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3dpZHRoL2tpbmRfc3RyaW5nLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC93aWR0aC90YWJsZXMuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3dpZHRoL3RyYW5zZm9ybS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvd2lkdGgvdHJpZXZhbC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvd2lkdGgvd2lkdGguZ28KKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L3RleHQvd2lkdGggJF4gLW8gJEAgJiYg
XAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxE
KS9taW1lL3F1b3RlZHByaW50YWJsZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWltZS9xdW90
ZWRwcmludGFibGUvcmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9taW1lL3F1b3RlZHBy
aW50YWJsZS93cml0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1taW1lL3F1b3RlZHBy
aW50YWJsZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkKKyQoTElCR09fQlVJTEQpL25ldC9odHRwL2ludGVybmFsLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9uZXQvaHR0cC9pbnRlcm5hbC9jaHVua2VkLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvaHR0cC9pbnRlcm5hbC90ZXN0Y2VydC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PW5ldC9odHRwL2ludGVybmFsICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQg
JEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZmxhZy5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZmxhZy9mbGFnLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWZsYWcgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4
cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nby90b2tlbi5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZ28vdG9rZW4vcG9zaXRpb24uZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2dvL3Rva2VuL3NlcmlhbGl6ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdG9rZW4vdG9r
ZW4uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby90b2tlbiAkXiAtbyAkQCAmJiBcCisJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3Rl
eHQvdGVtcGxhdGUvcGFyc2UubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQvdGVtcGxhdGUv
cGFyc2UvbGV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0L3RlbXBsYXRlL3BhcnNlL25v
ZGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQvdGVtcGxhdGUvcGFyc2UvcGFyc2UuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXh0L3RlbXBsYXRlL3BhcnNlICReIC1vICRAICYm
IFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlM
RCkvdGV4dC9zY2FubmVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0L3NjYW5uZXIvc2Nh
bm5lci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAk
KExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXRleHQvc2Nhbm5lciAkXiAtbyAkQCAm
JiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJ
TEQpL29zL3VzZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3VzZXIvZGVjbHNfdW5peC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvdXNlci9saXN0Z3JvdXBzX3VuaXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL29zL3VzZXIvbG9va3VwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9v
cy91c2VyL2xvb2t1cF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy91c2VyL3VzZXIu
Z28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJH
T19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJ
QkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1vcy91c2VyICReIC1vICRAICYmIFwKKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L2lu
dGVybmFsL3NvY2t0ZXN0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaW50ZXJuYWwvc29j
a3Rlc3Qvc3dpdGNoLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaW50ZXJuYWwvc29ja3Rl
c3Qvc3dpdGNoX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaW50ZXJuYWwvc29j
a3Rlc3Qvc3dpdGNoX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9pbnRlcm5hbC9z
b2NrdGVzdC9zeXNfY2xvZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2ludGVybmFs
L3NvY2t0ZXN0L3N5c191bml4LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5v
dGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bmV0L2ludGVy
bmFsL3NvY2t0ZXN0ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZ28vc2Nhbm5lci5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZ28vc2Nhbm5lci9lcnJvcnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3NjYW5u
ZXIvc2Nhbm5lci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJ
JChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL3NjYW5uZXIgJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9pbWFnZS9naWYubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2dpZi9yZWFk
ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2dpZi93cml0ZXIuZ28KKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1Mp
IC1jIC1mZ28tcGtncGF0aD1pbWFnZS9naWYgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS90ZXN0aW5nL3F1aWNrLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXN0aW5nL3F1aWNrL3F1aWNrLmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9dGVzdGluZy9xdWljayAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAu
Z29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL29zL2V4ZWMubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWMvZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3MvZXhlYy9leGVjX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9leGVjL2xwX3Vu
aXguZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1vcy9leGVjICReIC1vICRAICYmIFwKKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZGF0
YWJhc2Uvc3FsL2RyaXZlci5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGF0YWJhc2Uvc3FsL2Ry
aXZlci9kcml2ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RhdGFiYXNlL3NxbC9kcml2ZXIv
dHlwZXMuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1kYXRhYmFzZS9zcWwvZHJpdmVyICRe
IC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChM
SUJHT19CVUlMRCkvdGVzdGluZy9pb3Rlc3QubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3Rp
bmcvaW90ZXN0L2xvZ2dlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGVzdGluZy9pb3Rlc3Qv
cmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXN0aW5nL2lvdGVzdC93cml0ZXIuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXN0aW5nL2lvdGVzdCAkXiAtbyAkQCAmJiBcCisJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3Rl
c3RpbmcubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3RpbmcvYWxsb2NzLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby90ZXN0aW5nL2JlbmNobWFyay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
dGVzdGluZy9jb3Zlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGVzdGluZy9leGFtcGxlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXN0aW5nL21hdGNoLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby90ZXN0aW5nL3Rlc3RpbmcuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQo
bm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19H
T0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dGVzdGluZyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAt
aiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL25ldC5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2FkZHJzZWxlY3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9jZ29fbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9jZ29fcmVzbmV3Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvY2dvX3NvY2tuZXcuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC9jZ29fdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2NvbmYuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9kaWFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9u
ZXQvZG5zY2xpZW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvZG5zY2xpZW50X3VuaXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9kbnNjb25maWdfdW5peC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L2Ruc21zZy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2ZkX211
dGV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvZmRfcG9sbF9ydW50aW1lLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvZmRfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9mZF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvZmlsZS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L2ZpbGVfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2hv
b2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ob29rX2Nsb2V4ZWMuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL25ldC9ob29rX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9o
b3N0cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2ludGVyZmFjZS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L2ludGVyZmFjZV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bmV0L2lwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaXByYXdzb2NrLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9uZXQvaXByYXdzb2NrX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvaXBzb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaXBzb2NrX3Bvc2l4Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvbG9va3VwLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvbG9va3VwX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9tYWMuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9uZXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9u
c3MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9wYXJzZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbmV0L3BpcGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9wb3J0LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvcG9ydF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9u
ZXQvc2VuZGZpbGVfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zb2NrX2Nsb2V4
ZWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zb2NrX2xpbnV4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9uZXQvc29ja19wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3Nv
Y2tvcHRfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zb2Nrb3B0X3Bvc2l4Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvc29ja29wdGlwX2xpbnV4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9uZXQvc29ja29wdGlwX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9u
ZXQvdGNwc29jay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3RjcHNvY2tfcG9zaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC90Y3Bzb2Nrb3B0X3Bvc2l4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9uZXQvdGNwc29ja29wdF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9u
ZXQvdWRwc29jay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3VkcHNvY2tfcG9zaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC91bml4c29jay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbmV0L3VuaXhzb2NrX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvd3JpdGV2
X3VuaXguZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdv
LXBrZ3BhdGg9bmV0ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZGVidWcvbWFjaG8ubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2RlYnVnL21hY2hvL2ZhdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvbWFj
aG8vZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvbWFjaG8vbWFjaG8uZ28KKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1kZWJ1Zy9tYWNobyAkXiAtbyAkQCAmJiBcCisJb2JqY29w
eSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2RlYnVnL3Bl
Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9wZS9maWxlLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9kZWJ1Zy9wZS9wZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvcGUvc2Vj
dGlvbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvcGUvc3RyaW5nLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9kZWJ1Zy9wZS9zeW1ib2wuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08s
bGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAt
cCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD1kZWJ1Zy9wZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2FyY2hpdmUvemlwLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9hcmNoaXZlL3ppcC9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUv
emlwL3JlZ2lzdGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9hcmNoaXZlL3ppcC9zdHJ1Y3Qu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUvemlwL3dyaXRlci5nbworCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykg
LWMgLWZnby1wa2dwYXRoPWFyY2hpdmUvemlwICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY29tcHJlc3MvZ3ppcC5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvZ3ppcC9ndW56aXAuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2NvbXByZXNzL2d6aXAvZ3ppcC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPWNvbXByZXNzL2d6aXAgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jb21wcmVzcy96bGliLm86ICQoTElCR09f
RVhUUkFDVEVEKS9nby9jb21wcmVzcy96bGliL3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vY29tcHJlc3MvemxpYi93cml0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRp
ciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jb21w
cmVzcy96bGliICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvY3J5cHRvL2VsbGlwdGljLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9jcnlwdG8vZWxsaXB0aWMvZWxsaXB0aWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2NyeXB0by9lbGxpcHRpYy9wMjI0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vZWxs
aXB0aWMvcDI1Ni5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2VsbGlwdGljL3AyNTZf
Z2VuZXJpYy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9lbGxpcHRpYyAkXiAt
byAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElC
R09fQlVJTEQpL2NyeXB0by9kc2EubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9kc2Ev
ZHNhLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQo
TElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykg
JChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2RzYSAkXiAtbyAkQCAmJiBc
CisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQp
L2dvL2NvbnN0YW50Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9jb25zdGFudC92YWx1ZS5n
bworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2NvbnN0YW50ICReIC1vICRAICYmIFwKKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY3J5
cHRvL3JhbmQubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9yYW5kL2VhZ2Fpbi5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3JhbmQvcmFuZC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vY3J5cHRvL3JhbmQvcmFuZF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5
cHRvL3JhbmQvcmFuZF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vcmFuZC91
dGlsLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQo
TElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykg
JChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL3JhbmQgJF4gLW8gJEAgJiYg
XAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxE
KS9lbmNvZGluZy9hc24xLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9hc24xL2Fz
bjEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2FzbjEvY29tbW9uLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9hc24xL21hcnNoYWwuZ28KKwkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwK
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1lbmNvZGluZy9hc24xICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZGF0YWJhc2Uvc3FsLm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby9kYXRhYmFzZS9zcWwvY29udmVydC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vZGF0YWJhc2Uvc3FsL2N0eHV0aWwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Rh
dGFiYXNlL3NxbC9zcWwuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1kYXRhYmFzZS9zcWwg
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9nby9hc3QubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2FzdC9hc3Qu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2FzdC9jb21tZW50bWFwLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9nby9hc3QvZmlsdGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9hc3Qv
aW1wb3J0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9hc3QvcHJpbnQuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvL2FzdC9yZXNvbHZlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9h
c3Qvc2NvcGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2FzdC93YWxrLmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9Z28vYXN0ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvaW50ZXJuYWwvcHByb2YvcHJv
ZmlsZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvcHByb2YvcHJvZmlsZS9lbmNv
ZGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3Bwcm9mL3Byb2ZpbGUvZmlsdGVy
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9wcHJvZi9wcm9maWxlL2xlZ2FjeV9w
cm9maWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9wcHJvZi9wcm9maWxlL3By
b2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3Bwcm9mL3Byb2ZpbGUvcHJv
dG8uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3Bwcm9mL3Byb2ZpbGUvcHJ1bmUu
Z28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJH
T19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJ
QkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbnRlcm5hbC9wcHJvZi9wcm9maWxlICReIC1v
ICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJH
T19CVUlMRCkvaW1hZ2UvcG5nLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9wbmcvcGFl
dGguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL3BuZy9yZWFkZXIuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2ltYWdlL3BuZy93cml0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08s
bGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAt
cCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD1pbWFnZS9wbmcgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6
Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9kZWJ1Zy9lbGYubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2RlYnVnL2VsZi9lbGYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2VsZi9maWxl
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9lbGYvcmVhZGVyLmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9ZGVidWcvZWxmICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvdGV4dC90ZW1wbGF0ZS5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90ZW1wbGF0ZS9kb2MuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3RleHQvdGVtcGxhdGUvZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90
ZW1wbGF0ZS9mdW5jcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90ZW1wbGF0ZS9oZWxw
ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQvdGVtcGxhdGUvb3B0aW9uLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby90ZXh0L3RlbXBsYXRlL3RlbXBsYXRlLmdvCisJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
CisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9dGV4dC90ZW1wbGF0ZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29f
ZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2ludGVybmFsL3RyYWNlLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC90cmFjZS9nb3JvdXRpbmVzLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC90cmFjZS9vcmRlci5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vaW50ZXJuYWwvdHJhY2UvcGFyc2VyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRl
cm5hbC90cmFjZS93cml0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90
ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkg
JiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbnRlcm5hbC90
cmFjZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL2NtZC9pbnRlcm5hbC9icm93c2VyLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9jbWQvaW50ZXJuYWwvYnJvd3Nlci9icm93c2VyLmdvCisJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJ
bWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdv
LXBrZ3BhdGg9Y21kL2ludGVybmFsL2Jyb3dzZXIgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8vcnNhLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vcnNhL3BrY3MxdjE1LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8vcnNhL3Bzcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L3JzYS9yc2EuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwg
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQo
R09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vcnNhICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvaW50ZXJuYWwvdGVzdGVudi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwv
dGVzdGVudi90ZXN0ZW52LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC90ZXN0ZW52
L3Rlc3RlbnZfY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC90ZXN0ZW52L3Rl
c3RlbnZfbm90d2luLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAk
QCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwK
KwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aW50ZXJuYWwvdGVzdGVu
diAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkK
KyQoTElCR09fQlVJTEQpL2NyeXB0by9lY2RzYS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5
cHRvL2VjZHNhL2VjZHNhLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYm
IFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2VjZHNh
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvY3J5cHRvL3g1MDkvcGtpeC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Y3J5cHRvL3g1MDkvcGtpeC9wa2l4LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAk
KG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIg
JEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRv
L3g1MDkvcGtpeCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3J1bnRpbWUvcHByb2YvaW50ZXJuYWwvcHJvdG9wcHJv
Zi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9wcHJvZi9pbnRlcm5hbC9wcm90b3Bw
cm9mL3Byb3RvbWVtcHJvZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9wcHJv
Zi9pbnRlcm5hbC9wcm90b3Bwcm9mL3Byb3RvcHByb2YuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2Rp
ciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD1ydW50aW1lL3Bwcm9mL2ludGVybmFsL3Byb3RvcHByb2YgJF4gLW8gJEAgJiYgXAorCW9i
amNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nby9w
YXJzZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3BhcnNlci9pbnRlcmZhY2UuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2dvL3BhcnNlci9wYXJzZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlt
a2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28t
cGtncGF0aD1nby9wYXJzZXIgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nby9wcmludGVyLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9nby9wcmludGVyL25vZGVzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9w
cmludGVyL3ByaW50ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby9wcmludGVyICRe
IC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChM
SUJHT19CVUlMRCkvcnVudGltZS9wcHJvZi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9wcHJvZi9wcHJvZi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXJ1bnRpbWUvcHByb2Yg
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9nby9kb2MubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2RvYy9jb21t
ZW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9kb2MvZG9jLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9nby9kb2MvZXhhbXBsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vZG9jL2V4
cG9ydHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2RvYy9maWx0ZXIuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvL2RvYy9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2Rv
Yy9zeW5vcHNpcy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJ
JChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2RvYyAkXiAtbyAkQCAm
JiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJ
TEQpL2h0bWwvdGVtcGxhdGUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2h0bWwvdGVtcGxhdGUv
YXR0ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0ZS9jb250ZW50LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL2NvbnRleHQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2h0bWwvdGVtcGxhdGUvY3NzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1s
L3RlbXBsYXRlL2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0ZS9lcnJv
ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0ZS9lc2NhcGUuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2h0bWwvdGVtcGxhdGUvaHRtbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vaHRtbC90ZW1wbGF0ZS9qcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0
ZS90ZW1wbGF0ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0ZS90cmFuc2l0
aW9uLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL3VybC5nbworCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWh0bWwvdGVtcGxhdGUgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS90ZXN0aW5nL2lu
dGVybmFsL3Rlc3RkZXBzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXN0aW5nL2ludGVybmFs
L3Rlc3RkZXBzL2RlcHMuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXN0aW5nL2ludGVy
bmFsL3Rlc3RkZXBzICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZ28vdHlwZXMubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2dvL3R5cGVzL2FwaS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvYXNzaWdu
bWVudHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2J1aWx0aW5zLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9jYWxsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9n
by90eXBlcy9jaGVjay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvY29udmVyc2lv
bnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2RlY2wuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvL3R5cGVzL2Vycm9ycy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlw
ZXMvZXZhbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvZXhwci5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvZXhwcnN0cmluZy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZ28vdHlwZXMvaW5pdG9yZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9s
YWJlbHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2xvb2t1cC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvbWV0aG9kc2V0LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9nby90eXBlcy9vYmplY3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL29ianNl
dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvb3BlcmFuZC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZ28vdHlwZXMvb3JkZXJpbmcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
L3R5cGVzL3BhY2thZ2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3ByZWRpY2F0
ZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3Jlc29sdmVyLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9nby90eXBlcy9yZXR1cm4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
L3R5cGVzL3Njb3BlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9zZWxlY3Rpb24u
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3NpemVzLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9nby90eXBlcy9zdG10LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy90
eXBlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy90eXBlc3RyaW5nLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9nby90eXBlcy90eXBleHByLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9nby90eXBlcy91bml2ZXJzZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL3R5cGVz
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvZ28vZm9ybWF0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9mb3Jt
YXQvZm9ybWF0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9mb3JtYXQvaW50ZXJuYWwuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby9mb3JtYXQgJF4gLW8gJEAgJiYgXAorCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nby9idWls
ZC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYnVpbGQvYnVpbGQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvL2J1aWxkL2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYnVpbGQv
cmVhZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYnVpbGQvc3lzbGlzdC5nbworCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWdvL2J1aWxkICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L3RleHRwcm90by5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3RleHRwcm90by9oZWFkZXIuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL25ldC90ZXh0cHJvdG8vcGlwZWxpbmUuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL25ldC90ZXh0cHJvdG8vcmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvdGV4
dHByb3RvL3RleHRwcm90by5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3RleHRwcm90by93
cml0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvdGV4dHByb3RvICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvY3J5cHRvL3g1MDkubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5L2Nl
cnRfcG9vbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3g1MDkvcGVtX2RlY3J5cHQu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5L3BrY3MxLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8veDUwOS9wa2NzOC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5
cHRvL3g1MDkvcm9vdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3g1MDkvcm9vdF9s
aW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3g1MDkvcm9vdF91bml4LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8veDUwOS9zZWMxLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9jcnlwdG8veDUwOS92ZXJpZnkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94
NTA5L3g1MDkuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwg
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQo
R09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8veDUwOSAkXiAtbyAk
QCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09f
QlVJTEQpL2V4cC9wcm94eS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZXhwL3Byb3h5L2RpcmVj
dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZXhwL3Byb3h5L3Blcl9ob3N0LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9leHAvcHJveHkvcHJveHkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2V4
cC9wcm94eS9zb2NrczUuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1leHAvcHJveHkgJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvbmV0L2xleC9odHRwbGV4Lm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9nb2xhbmdfb3JnL3gvbmV0L2xleC9odHRwbGV4L2h0dHBsZXguZ28KKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1Mp
IC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L25ldC9sZXgvaHR0cGxleCAkXiAt
byAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElC
R09fQlVJTEQpL2xvZy9zeXNsb2cubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2xvZy9zeXNsb2cv
ZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9sb2cvc3lzbG9nL3N5c2xvZy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbG9nL3N5c2xvZy9zeXNsb2dfdW5peC5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWxvZy9zeXNsb2cgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9uZXQvbWFpbC5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L21haWwvbWVzc2FnZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PW5ldC9tYWlsICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvbWltZS9tdWx0aXBhcnQubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL21pbWUvbXVsdGlwYXJ0L2Zvcm1kYXRhLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9t
aW1lL211bHRpcGFydC9tdWx0aXBhcnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21pbWUvbXVs
dGlwYXJ0L3dyaXRlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW1pbWUvbXVsdGlwYXJ0
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvY3J5cHRvL3Rscy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L3Rscy9hbGVydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3Rscy9jaXBoZXJfc3Vp
dGVzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vdGxzL2NvbW1vbi5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3Rscy9jb25uLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9j
cnlwdG8vdGxzL2hhbmRzaGFrZV9jbGllbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0
by90bHMvaGFuZHNoYWtlX21lc3NhZ2VzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8v
dGxzL2hhbmRzaGFrZV9zZXJ2ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by90bHMv
a2V5X2FncmVlbWVudC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3Rscy9wcmYuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by90bHMvdGlja2V0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9jcnlwdG8vdGxzL3Rscy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0
by90bHMgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpCiskKExJQkdPX0JVSUxEKS9nby9pbnRlcm5hbC9nY2ltcG9ydGVyLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9nby9pbnRlcm5hbC9nY2ltcG9ydGVyL2JpbXBvcnQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvL2ludGVybmFsL2djaW1wb3J0ZXIvZXhwb3J0ZGF0YS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZ28vaW50ZXJuYWwvZ2NpbXBvcnRlci9nY2ltcG9ydGVyLmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9Z28vaW50ZXJuYWwvZ2NpbXBvcnRlciAkXiAtbyAkQCAmJiBcCisJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dv
L2ludGVybmFsL2djY2dvaW1wb3J0ZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2ludGVy
bmFsL2djY2dvaW1wb3J0ZXIvZ2NjZ29pbnN0YWxsYXRpb24uZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2dvL2ludGVybmFsL2djY2dvaW1wb3J0ZXIvaW1wb3J0ZXIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2dvL2ludGVybmFsL2djY2dvaW1wb3J0ZXIvcGFyc2VyLmdvCisJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
CisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9Z28vaW50ZXJuYWwvZ2NjZ29pbXBvcnRlciAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvL2lt
cG9ydGVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9pbXBvcnRlci9pbXBvcnRlci5nbwor
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09f
R09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2ltcG9ydGVyICReIC1vICRAICYmIFwKKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L3Nt
dHAubzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zbXRwL2F1dGguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL25ldC9zbXRwL3NtdHAuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRp
ciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQv
c210cCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL25ldC9odHRwL2h0dHB0cmFjZS5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbmV0L2h0dHAvaHR0cHRyYWNlL3RyYWNlLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIg
LXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9bmV0L2h0dHAvaHR0cHRyYWNlICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L2h0dHAubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL25ldC9odHRwL2NsaWVudC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L2h0dHAvY29va2llLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9kb2MuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2ZpbGV0cmFuc3BvcnQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL25ldC9odHRwL2ZzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9o
Ml9idW5kbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2hlYWRlci5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvaHR0cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bmV0L2h0dHAvamFyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9tZXRob2QuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL3JlcXVlc3QuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC9odHRwL3Jlc3BvbnNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0
cC9zZXJ2ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL3NuaWZmLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9zdGF0dXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9odHRwL3RyYW5zZmVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC90cmFu
c3BvcnQuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvaHR0cCAkXiAtbyAkQCAmJiBc
CisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQp
L25ldC9odHRwL3Bwcm9mLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9wcHJvZi9w
cHJvZi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAk
KExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRwL3Bwcm9mICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvZXhwdmFyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9leHB2YXIvZXhwdmFyLmdvCisJ
JChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhU
UkFDVEVEKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWV4
cHZhciAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL25ldC9odHRwL2h0dHB0ZXN0Lm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9uZXQvaHR0cC9odHRwdGVzdC9odHRwdGVzdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bmV0L2h0dHAvaHR0cHRlc3QvcmVjb3JkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9o
dHRwL2h0dHB0ZXN0L3NlcnZlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRw
L2h0dHB0ZXN0ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvY2dpLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9uZXQvaHR0cC9jZ2kvY2hpbGQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRw
L2NnaS9ob3N0LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bmV0L2h0dHAvY2dpICReIC1v
ICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJH
T19CVUlMRCkvbmV0L2h0dHAvY29va2llamFyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQv
aHR0cC9jb29raWVqYXIvamFyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9jb29r
aWVqYXIvcHVueWNvZGUuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvaHR0cC9jb29r
aWVqYXIgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpCiskKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9odHRwdXRpbC5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbmV0L2h0dHAvaHR0cHV0aWwvZHVtcC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L2h0dHAvaHR0cHV0aWwvaHR0cHV0aWwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRw
L2h0dHB1dGlsL3BlcnNpc3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2h0dHB1
dGlsL3JldmVyc2Vwcm94eS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRwL2h0
dHB1dGlsICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQorJChMSUJHT19CVUlMRCkvbmV0L3JwYy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L3JwYy9jbGllbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ycGMvZGVidWcuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9ycGMvc2VydmVyLmdvCisJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9bmV0L3JwYyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL25ldC9odHRwL2ZjZ2kubzogJChMSUJHT19FWFRS
QUNURUQpL2dvL25ldC9odHRwL2ZjZ2kvY2hpbGQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9odHRwL2ZjZ2kvZmNnaS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRwL2Zj
Z2kgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
CiskKExJQkdPX0JVSUxEKS9uZXQvcnBjL2pzb25ycGMubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9ycGMvanNvbnJwYy9jbGllbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ycGMv
anNvbnJwYy9zZXJ2ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvcnBjL2pzb25y
cGMgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
CisKK0xJQkdPX09CSlMgKz0gJChMSUJHT19CVUlMRCkvcnVudGltZS9pbnRlcm5hbC9hdG9taWMu
b1wKKwkkKExJQkdPX0JVSUxEKS9ydW50aW1lL2ludGVybmFsL3N5cy5vIFwKKwkkKExJQkdPX0JV
SUxEKS9lcnJvcnMubyBcCisJJChMSUJHT19CVUlMRCkvaW50ZXJuYWwvcmFjZS5vIFwKKwkkKExJ
QkdPX0JVSUxEKS9jcnlwdG8vaW50ZXJuYWwvY2lwaGVyaHcubyBcCisJJChMSUJHT19CVUlMRCkv
dW5pY29kZS91dGY4Lm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9zdWJ0bGUubyBcCisJJChM
SUJHT19CVUlMRCkvY29udGFpbmVyL2xpc3QubyBcCisJJChMSUJHT19CVUlMRCkvbWF0aC5vIFwK
KwkkKExJQkdPX0JVSUxEKS9jb250YWluZXIvcmluZy5vIFwKKwkkKExJQkdPX0JVSUxEKS9nb2xh
bmdfb3JnL3gvY3J5cHRvL2N1cnZlMjU1MTkubyBcCisJJChMSUJHT19CVUlMRCkvaW50ZXJuYWwv
bmV0dHJhY2UubyBcCisJJChMSUJHT19CVUlMRCkvc3luYy9hdG9taWMubyBcCisJJChMSUJHT19C
VUlMRCkvdW5pY29kZS5vIFwKKwkkKExJQkdPX0JVSUxEKS9lbmNvZGluZy5vIFwKKwkkKExJQkdP
X0JVSUxEKS91bmljb2RlL3V0ZjE2Lm8gXAorCSQoTElCR09fQlVJTEQpL2ltYWdlL2NvbG9yLm8g
XAorCSQoTElCR09fQlVJTEQpL3J1bnRpbWUubyBcCisJJChMSUJHT19CVUlMRCkvaW1hZ2UvY29s
b3IvcGFsZXR0ZS5vIFwKKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvY3J5cHRvL3BvbHkx
MzA1Lm8gXAorCSQoTElCR09fQlVJTEQpL21hdGgvY21wbHgubyBcCisJJChMSUJHT19CVUlMRCkv
c3luYy5vIFwKKwkkKExJQkdPX0JVSUxEKS9zdHJjb252Lm8gXAorCSQoTElCR09fQlVJTEQpL2lv
Lm8gXAorCSQoTElCR09fQlVJTEQpL2ludGVybmFsL3NpbmdsZWZsaWdodC5vIFwKKwkkKExJQkdP
X0JVSUxEKS9tYXRoL3JhbmQubyBcCisJJChMSUJHT19CVUlMRCkvc3lzY2FsbC5vIFwKKwkkKExJ
QkdPX0JVSUxEKS9oYXNoLm8gXAorCSQoTElCR09fQlVJTEQpL3J1bnRpbWUvdHJhY2UubyBcCisJ
JChMSUJHT19CVUlMRCkvc3RyaW5ncy5vIFwKKwkkKExJQkdPX0JVSUxEKS9ieXRlcy5vIFwKKwkk
KExJQkdPX0JVSUxEKS9jcnlwdG8vY2lwaGVyLm8gXAorCSQoTElCR09fQlVJTEQpL2hhc2gvY3Jj
MzIubyBcCisJJChMSUJHT19CVUlMRCkvaGFzaC9mbnYubyBcCisJJChMSUJHT19CVUlMRCkvY3J5
cHRvL2htYWMubyBcCisJJChMSUJHT19CVUlMRCkvaGFzaC9hZGxlcjMyLm8gXAorCSQoTElCR09f
QlVJTEQpL2hhc2gvY3JjNjQubyBcCisJJChMSUJHT19CVUlMRCkvY3J5cHRvLm8gXAorCSQoTElC
R09fQlVJTEQpL3JlZmxlY3QubyBcCisJJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvYmFzZTY0Lm8g
XAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9yYzQubyBcCisJJChMSUJHT19CVUlMRCkvZW5jb2Rp
bmcvYXNjaWk4NS5vIFwKKwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vYWVzLm8gXAorCSQoTElCR09f
QlVJTEQpL2NyeXB0by9tZDUubyBcCisJJChMSUJHT19CVUlMRCkvY3J5cHRvL3NoYTUxMi5vIFwK
KwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vc2hhMjU2Lm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0
by9zaGExLm8gXAorCSQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC90ZXh0L3RyYW5zZm9ybS5v
IFwKKwkkKExJQkdPX0JVSUxEKS9idWZpby5vIFwKKwkkKExJQkdPX0JVSUxEKS90ZXh0L3RhYndy
aXRlci5vIFwKKwkkKExJQkdPX0JVSUxEKS9lbmNvZGluZy9iYXNlMzIubyBcCisJJChMSUJHT19C
VUlMRCkvcGF0aC5vIFwKKwkkKExJQkdPX0JVSUxEKS9odG1sLm8gXAorCSQoTElCR09fQlVJTEQp
L2ltYWdlLm8gXAorCSQoTElCR09fQlVJTEQpL2ltYWdlL2ludGVybmFsL2ltYWdldXRpbC5vIFwK
KwkkKExJQkdPX0JVSUxEKS9pbWFnZS9qcGVnLm8gXAorCSQoTElCR09fQlVJTEQpL2ltYWdlL2Ry
YXcubyBcCisJJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvYmluYXJ5Lm8gXAorCSQoTElCR09fQlVJ
TEQpL3NvcnQubyBcCisJJChMSUJHT19CVUlMRCkvaW50ZXJuYWwvc3lzY2FsbC91bml4Lm8gXAor
CSQoTElCR09fQlVJTEQpL2V4cC90ZXJtaW5hbC5vIFwKKwkkKExJQkdPX0JVSUxEKS90aW1lLm8g
XAorCSQoTElCR09fQlVJTEQpL2NvbXByZXNzL2J6aXAyLm8gXAorCSQoTElCR09fQlVJTEQpL2Nv
bnRhaW5lci9oZWFwLm8gXAorCSQoTElCR09fQlVJTEQpL3JlZ2V4cC9zeW50YXgubyBcCisJJChM
SUJHT19CVUlMRCkvZW5jb2RpbmcvcGVtLm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9kZXMu
byBcCisJJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1
L2ludGVybmFsL2NoYWNoYTIwLm8gXAorCSQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9jcnlw
dG8vY2hhY2hhMjBwb2x5MTMwNS5vIFwKKwkkKExJQkdPX0JVSUxEKS9vcy5vIFwKKwkkKExJQkdP
X0JVSUxEKS9yZWdleHAubyBcCisJJChMSUJHT19CVUlMRCkvcnVudGltZS9kZWJ1Zy5vIFwKKwkk
KExJQkdPX0JVSUxEKS9mbXQubyBcCisJJChMSUJHT19CVUlMRCkvcGF0aC9maWxlcGF0aC5vIFwK
KwkkKExJQkdPX0JVSUxEKS9vcy9zaWduYWwubyBcCisJJChMSUJHT19CVUlMRCkvaW5kZXgvc3Vm
Zml4YXJyYXkubyBcCisJJChMSUJHT19CVUlMRCkvaW8vaW91dGlsLm8gXAorCSQoTElCR09fQlVJ
TEQpL21hdGgvYmlnLm8gXAorCSQoTElCR09fQlVJTEQpL2RlYnVnL3BsYW45b2JqLm8gXAorCSQo
TElCR09fQlVJTEQpL2RlYnVnL2R3YXJmLm8gXAorCSQoTElCR09fQlVJTEQpL2NvbXByZXNzL2x6
dy5vIFwKKwkkKExJQkdPX0JVSUxEKS9hcmNoaXZlL3Rhci5vIFwKKwkkKExJQkdPX0JVSUxEKS9l
bmNvZGluZy9oZXgubyBcCisJJChMSUJHT19CVUlMRCkvZW5jb2RpbmcveG1sLm8gXAorCSQoTElC
R09fQlVJTEQpL2NvbXByZXNzL2ZsYXRlLm8gXAorCSQoTElCR09fQlVJTEQpL2VuY29kaW5nL2Nz
di5vIFwKKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvbmV0L2h0dHAyL2hwYWNrLm8gXAor
CSQoTElCR09fQlVJTEQpL2VuY29kaW5nL2dvYi5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvdXJs
Lm8gXAorCSQoTElCR09fQlVJTEQpL2NvbnRleHQubyBcCisJJChMSUJHT19CVUlMRCkvZW5jb2Rp
bmcvanNvbi5vIFwKKwkkKExJQkdPX0JVSUxEKS9sb2cubyBcCisJJChMSUJHT19CVUlMRCkvZGVi
dWcvZ29zeW0ubyBcCisJJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L25ldC9pZG5hLm8gXAor
CSQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC90ZXh0L3VuaWNvZGUvbm9ybS5vIFwKKwkkKExJ
QkdPX0JVSUxEKS9taW1lLm8gXAorCSQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC90ZXh0L3dp
ZHRoLm8gXAorCSQoTElCR09fQlVJTEQpL21pbWUvcXVvdGVkcHJpbnRhYmxlLm8gXAorCSQoTElC
R09fQlVJTEQpL25ldC9odHRwL2ludGVybmFsLm8gXAorCSQoTElCR09fQlVJTEQpL2ZsYWcubyBc
CisJJChMSUJHT19CVUlMRCkvZ28vdG9rZW4ubyBcCisJJChMSUJHT19CVUlMRCkvdGV4dC90ZW1w
bGF0ZS9wYXJzZS5vIFwKKwkkKExJQkdPX0JVSUxEKS90ZXh0L3NjYW5uZXIubyBcCisJJChMSUJH
T19CVUlMRCkvb3MvdXNlci5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvaW50ZXJuYWwvc29ja3Rl
c3QubyBcCisJJChMSUJHT19CVUlMRCkvZ28vc2Nhbm5lci5vIFwKKwkkKExJQkdPX0JVSUxEKS9p
bWFnZS9naWYubyBcCisJJChMSUJHT19CVUlMRCkvdGVzdGluZy9xdWljay5vIFwKKwkkKExJQkdP
X0JVSUxEKS9vcy9leGVjLm8gXAorCSQoTElCR09fQlVJTEQpL2RhdGFiYXNlL3NxbC9kcml2ZXIu
byBcCisJJChMSUJHT19CVUlMRCkvdGVzdGluZy9pb3Rlc3QubyBcCisJJChMSUJHT19CVUlMRCkv
dGVzdGluZy5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQubyBcCisJJChMSUJHT19CVUlMRCkvZGVi
dWcvbWFjaG8ubyBcCisJJChMSUJHT19CVUlMRCkvZGVidWcvcGUubyBcCisJJChMSUJHT19CVUlM
RCkvYXJjaGl2ZS96aXAubyBcCisJJChMSUJHT19CVUlMRCkvY29tcHJlc3MvZ3ppcC5vIFwKKwkk
KExJQkdPX0JVSUxEKS9jb21wcmVzcy96bGliLm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9l
bGxpcHRpYy5vIFwKKwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vZHNhLm8gXAorCSQoTElCR09fQlVJ
TEQpL2dvL2NvbnN0YW50Lm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9yYW5kLm8gXAorCSQo
TElCR09fQlVJTEQpL2VuY29kaW5nL2FzbjEubyBcCisJJChMSUJHT19CVUlMRCkvZGF0YWJhc2Uv
c3FsLm8gXAorCSQoTElCR09fQlVJTEQpL2dvL2FzdC5vIFwKKwkkKExJQkdPX0JVSUxEKS9pbnRl
cm5hbC9wcHJvZi9wcm9maWxlLm8gXAorCSQoTElCR09fQlVJTEQpL2ltYWdlL3BuZy5vIFwKKwkk
KExJQkdPX0JVSUxEKS9kZWJ1Zy9lbGYubyBcCisJJChMSUJHT19CVUlMRCkvdGV4dC90ZW1wbGF0
ZS5vIFwKKwkkKExJQkdPX0JVSUxEKS9pbnRlcm5hbC90cmFjZS5vIFwKKwkkKExJQkdPX0JVSUxE
KS9jbWQvaW50ZXJuYWwvYnJvd3Nlci5vIFwKKwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vcnNhLm8g
XAorCSQoTElCR09fQlVJTEQpL2ludGVybmFsL3Rlc3RlbnYubyBcCisJJChMSUJHT19CVUlMRCkv
Y3J5cHRvL2VjZHNhLm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by94NTA5L3BraXgubyBcCisJ
JChMSUJHT19CVUlMRCkvcnVudGltZS9wcHJvZi9pbnRlcm5hbC9wcm90b3Bwcm9mLm8gXAorCSQo
TElCR09fQlVJTEQpL2dvL3BhcnNlci5vIFwKKwkkKExJQkdPX0JVSUxEKS9nby9wcmludGVyLm8g
XAorCSQoTElCR09fQlVJTEQpL3J1bnRpbWUvcHByb2YubyBcCisJJChMSUJHT19CVUlMRCkvZ28v
ZG9jLm8gXAorCSQoTElCR09fQlVJTEQpL2h0bWwvdGVtcGxhdGUubyBcCisJJChMSUJHT19CVUlM
RCkvdGVzdGluZy9pbnRlcm5hbC90ZXN0ZGVwcy5vIFwKKwkkKExJQkdPX0JVSUxEKS9nby90eXBl
cy5vIFwKKwkkKExJQkdPX0JVSUxEKS9nby9mb3JtYXQubyBcCisJJChMSUJHT19CVUlMRCkvZ28v
YnVpbGQubyBcCisJJChMSUJHT19CVUlMRCkvbmV0L3RleHRwcm90by5vIFwKKwkkKExJQkdPX0JV
SUxEKS9jcnlwdG8veDUwOS5vIFwKKwkkKExJQkdPX0JVSUxEKS9leHAvcHJveHkubyBcCisJJChM
SUJHT19CVUlMRCkvZ29sYW5nX29yZy94L25ldC9sZXgvaHR0cGxleC5vIFwKKwkkKExJQkdPX0JV
SUxEKS9sb2cvc3lzbG9nLm8gXAorCSQoTElCR09fQlVJTEQpL25ldC9tYWlsLm8gXAorCSQoTElC
R09fQlVJTEQpL21pbWUvbXVsdGlwYXJ0Lm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by90bHMu
byBcCisJJChMSUJHT19CVUlMRCkvZ28vaW50ZXJuYWwvZ2NpbXBvcnRlci5vIFwKKwkkKExJQkdP
X0JVSUxEKS9nby9pbnRlcm5hbC9nY2Nnb2ltcG9ydGVyLm8gXAorCSQoTElCR09fQlVJTEQpL2dv
L2ltcG9ydGVyLm8gXAorCSQoTElCR09fQlVJTEQpL25ldC9zbXRwLm8gXAorCSQoTElCR09fQlVJ
TEQpL25ldC9odHRwL2h0dHB0cmFjZS5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvaHR0cC5vIFwK
KwkkKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9wcHJvZi5vIFwKKwkkKExJQkdPX0JVSUxEKS9leHB2
YXIubyBcCisJJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvaHR0cHRlc3QubyBcCisJJChMSUJHT19C
VUlMRCkvbmV0L2h0dHAvY2dpLm8gXAorCSQoTElCR09fQlVJTEQpL25ldC9odHRwL2Nvb2tpZWph
ci5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9odHRwdXRpbC5vIFwKKwkkKExJQkdPX0JV
SUxEKS9uZXQvcnBjLm8gXAorCSQoTElCR09fQlVJTEQpL25ldC9odHRwL2ZjZ2kubyBcCisJJChM
SUJHT19CVUlMRCkvbmV0L3JwYy9qc29ucnBjLm8gXAorCi0tIAoyLjE3LjEKCgpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:39:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:39:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOZ5-0001fV-AC; Mon, 23 Sep 2019 13:39:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOZ3-0001fC-96
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:39:41 +0000
X-Inumbo-ID: 9780a3b4-de07-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 9780a3b4-de07-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 13:39:40 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id A5F46F2013;
 Mon, 23 Sep 2019 15:39:39 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kVLlvcCC-OfX; Mon, 23 Sep 2019 15:39:39 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 827F1F2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:39:37 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:39:37 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:39:23 +0200
Message-ID: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 10/14] libgo: Update config.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXBkYXRlIGNvbmZpZy5oIHRvIGRlY3JlYXNlIHN0dWJzLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFs
YW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIGxpYmdvL2dl
bmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5oIHwgMTYgKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNo
YW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWJn
by9nZW5lcmF0ZWQvaW5jbHVkZS9jb25maWcuaCBiL2xpYmdvL2dlbmVyYXRlZC9pbmNsdWRlL2Nv
bmZpZy5oCmluZGV4IDdjNDczZjIuLmE3NmIzZDggMTAwNjQ0Ci0tLSBhL2xpYmdvL2dlbmVyYXRl
ZC9pbmNsdWRlL2NvbmZpZy5oCisrKyBiL2xpYmdvL2dlbmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5o
CkBAIC02Miw3ICs2Miw3IEBACiAjZGVmaW5lIEhBVkVfRkFMTE9DQVRFIDEKIAogLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2htb2RhdCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhB
VkVfRkNITU9EQVQgMQorLy8jZGVmaW5lIEhBVkVfRkNITU9EQVQgMQogCiAvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYGZjaG93bmF0JyBmdW5jdGlvbi4gKi8KIC8vI2RlZmluZSBIQVZF
X0ZDSE9XTkFUIDEKQEAgLTc3LDE2ICs3NywxNiBAQAogLy8jZGVmaW5lIEhBVkVfR0VUWEFUVFIg
MQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlub3RpZnlfYWRkX3dhdGNoJyBm
dW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9JTk9USUZZX0FERF9XQVRDSCAxCisvLyNkZWZpbmUg
SEFWRV9JTk9USUZZX0FERF9XQVRDSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgaW5vdGlmeV9pbml0JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9JTk9USUZZX0lOSVQg
MQorLy8jZGVmaW5lIEhBVkVfSU5PVElGWV9JTklUIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBpbm90aWZ5X2luaXQxJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9JTk9U
SUZZX0lOSVQxIDEKKy8vI2RlZmluZSBIQVZFX0lOT1RJRllfSU5JVDEgMQogCiAvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlub3RpZnlfcm1fd2F0Y2gnIGZ1bmN0aW9uLiAqLwotI2Rl
ZmluZSBIQVZFX0lOT1RJRllfUk1fV0FUQ0ggMQorLy8jZGVmaW5lIEhBVkVfSU5PVElGWV9STV9X
QVRDSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVh
ZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxCkBAIC0xODUsNyArMTg1LDcg
QEAKICNkZWZpbmUgSEFWRV9PRkY2NF9UIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBvcGVuNjQnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX09QRU42NCAxCisvLyNkZWZp
bmUgSEFWRV9PUEVONjQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW5h
dCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfT1BFTkFUIDEKQEAgLTIxNSw3ICsyMTUsNyBA
QAogI2RlZmluZSBIQVZFX1NFVEVOViAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgc2V0eGF0dHInIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFhBVFRSIDEKKy8vI2Rl
ZmluZSBIQVZFX1NFVFhBVFRSIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBz
aW5sJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TSU5MIDEKQEAgLTI2MSw3ICsyNjEsNyBA
QAogI2RlZmluZSBIQVZFX1NZTkNfRkVUQ0hfQU5EX0FERF80IDEKIAogLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGBzeW5jX2ZpbGVfcmFuZ2UnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBI
QVZFX1NZTkNfRklMRV9SQU5HRSAxCisvLyNkZWZpbmUgSEFWRV9TWU5DX0ZJTEVfUkFOR0UgMQog
CiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5c2NhbGwuaD4gaGVhZGVyIGZpbGUu
ICovCiAjZGVmaW5lIEhBVkVfU1lTQ0FMTF9IIDEKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:39:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:39:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOZA-0001gX-Bs; Mon, 23 Sep 2019 13:39:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOZ8-0001g7-9p
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:39:46 +0000
X-Inumbo-ID: 98b07eda-de07-11e9-b76c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 98b07eda-de07-11e9-b76c-bc764e2007e4;
 Mon, 23 Sep 2019 13:39:42 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B6180F2013;
 Mon, 23 Sep 2019 15:39:41 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id CMRNDb_7c0dh; Mon, 23 Sep 2019 15:39:41 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 8B624F2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:39:39 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:39:37 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:39:24 +0200
Message-ID: <20190923133927.28029-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
References: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 11/14] libgo: Update libcalls.go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXBkYXRlIGxpYmNhbGxzLmdvIHRvIGRlY3JlYXNlIHN0dWJzLiBUaGlzIHBhdGNoIHJlbW92ZXMg
d3JhcHBlcnMgZm9yCnN5c3RlbSBjYWxscyB0aGF0IGFyZSBub3QgdXNlZCBmcm9tIGxpYmdvIGFu
ZCB0aGV5IGFyZSBub3QgaW1wbGVtZW50ZWQKb24gVW5pa3JhZnQuCgpTaWduZWQtb2ZmLWJ5OiBD
aGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogbGli
Z28vZ2VuZXJhdGVkL2xpYmNhbGxzLmdvIHwgNDk3ICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDQ0OSBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9saWJnby9nZW5lcmF0ZWQvbGliY2FsbHMuZ28gYi9saWJnby9n
ZW5lcmF0ZWQvbGliY2FsbHMuZ28KaW5kZXggNTU2NTY0MS4uMDEyZmVkYyAxMDA2NDQKLS0tIGEv
bGliZ28vZ2VuZXJhdGVkL2xpYmNhbGxzLmdvCisrKyBiL2xpYmdvL2dlbmVyYXRlZC9saWJjYWxs
cy5nbwpAQCAtNDI2LDQ5ICs0MjYsNiBAQCBmdW5jIGFjY2VwdDQoZmQgaW50LCBzYSAqUmF3U29j
a2FkZHJBbnksIGxlbiAqU29ja2xlbl90LCBmbGFncyBpbnQpIChuZmQgaW50LCBlcgogCXJldHVy
bgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBBY2N0L2FjY3QK
LS8vZXh0ZXJuIGFjY3QKLWZ1bmMgY19hY2N0KHBhdGggKmJ5dGUpIF9DX2ludAotZnVuYyBBY2N0
KHBhdGggc3RyaW5nKSAoZXJyIGVycm9yKSB7Ci0JdmFyIF9wMSAqYnl0ZQotCV9wMSwgZXJyID0g
Qnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuCi0JfQot
CUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19hY2N0KF9wMSkKLQl2YXIgZXJybm8gRXJybm8KLQlz
ZXRFcnJubyA6PSBmYWxzZQotCWlmIF9yIDwgMCB7Ci0JCWVycm5vID0gR2V0RXJybm8oKQotCQlz
ZXRFcnJubyA9IHRydWUKLQl9Ci0JRXhpdHN5c2NhbGwoKQotCWlmIHNldEVycm5vIHsKLQkJZXJy
ID0gZXJybm8KLQl9Ci0JcmV0dXJuCi19Ci0KLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIEFkanRpbWV4L2FkanRpbWV4Ci0vL2V4dGVybiBhZGp0aW1leAotZnVuYyBjX2Fk
anRpbWV4KGJ1ZiAqVGltZXgpIF9DX2ludAotZnVuYyBBZGp0aW1leChidWYgKlRpbWV4KSAoc3Rh
dGUgaW50LCBlcnIgZXJyb3IpIHsKLQlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfYWRqdGltZXgo
YnVmKQotCXN0YXRlID0gKGludCkoX3IpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8gOj0g
ZmFsc2UKLQlpZiBfciA8IDAgewotCQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8gPSB0
cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0J
fQotCXJldHVybgotfQogCiAvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBE
dXAzL2R1cDMKIC8vZXh0ZXJuIGR1cDMKQEAgLTczMSwzMSArNjg4LDYgQEAgZnVuYyBJbm90aWZ5
Um1XYXRjaChmZCBpbnQsIHdhdGNoZGVzYyB1aW50MzIpIChzdWNjZXNzIGludCwgZXJyIGVycm9y
KSB7CiAJcmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IEtsb2djdGwva2xvZ2N0bAotLy9leHRlcm4ga2xvZ2N0bAotZnVuYyBjX2tsb2djdGwodHlwIF9D
X2ludCwgYnVmcCAqYnl0ZSwgbGVuIF9DX2ludCkgX0NfaW50Ci1mdW5jIEtsb2djdGwodHlwIGlu
dCwgYnVmIFtdYnl0ZSkgKG4gaW50LCBlcnIgZXJyb3IpIHsKLQl2YXIgX3AyICpieXRlCi0JaWYg
bGVuKGJ1ZikgPiAwIHsKLQkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYnVmWzBdKSkK
LQl9IGVsc2UgewotCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCi0JfQot
CUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19rbG9nY3RsKF9DX2ludCh0eXApLCBfcDIsIF9DX2lu
dChsZW4oYnVmKSkpCi0JbiA9IChpbnQpKF9yKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5v
IDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5v
ID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJu
bwotCX0KLQlyZXR1cm4KLX0KIAogLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgTGlzdHhhdHRyL2xpc3R4YXR0cgogLy9leHRlcm4gbGlzdHhhdHRyCkBAIC04NTMsMzQgKzc4
NSw2IEBAIGZ1bmMgcGlwZTIocCAqWzJdX0NfaW50LCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsK
IAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUGl2
b3RSb290L3Bpdm90X3Jvb3QKLS8vZXh0ZXJuIHBpdm90X3Jvb3QKLWZ1bmMgY19waXZvdF9yb290
KG5ld3Jvb3QgKmJ5dGUsIHB1dG9sZCAqYnl0ZSkgX0NfaW50Ci1mdW5jIFBpdm90Um9vdChuZXdy
b290IHN0cmluZywgcHV0b2xkIHN0cmluZykgKGVyciBlcnJvcikgewotCXZhciBfcDEgKmJ5dGUK
LQlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKG5ld3Jvb3QpCi0JaWYgZXJyICE9IG5pbCB7
Ci0JCXJldHVybgotCX0KLQl2YXIgX3AyICpieXRlCi0JX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0
cmluZyhwdXRvbGQpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybgotCX0KLQlFbnRlcnN5c2Nh
bGwoKQotCV9yIDo9IGNfcGl2b3Rfcm9vdChfcDEsIF9wMikKLQl2YXIgZXJybm8gRXJybm8KLQlz
ZXRFcnJubyA6PSBmYWxzZQotCWlmIF9yIDwgMCB7Ci0JCWVycm5vID0gR2V0RXJybm8oKQotCQlz
ZXRFcnJubyA9IHRydWUKLQl9Ci0JRXhpdHN5c2NhbGwoKQotCWlmIHNldEVycm5vIHsKLQkJZXJy
ID0gZXJybm8KLQl9Ci0JcmV0dXJuCi19CiAKIC8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIFJlbW92ZXhhdHRyL3JlbW92ZXhhdHRyCiAvL2V4dGVybiByZW1vdmV4YXR0cgpA
QCAtOTYwLDYxICs4NjQsNiBAQCBmdW5jIHNlbmRmaWxlKG91dGZkIGludCwgaW5mZCBpbnQsIG9m
ZnNldCAqT2Zmc2V0X3QsIGNvdW50IGludCkgKHdyaXR0ZW4gaW50LCBlcgogCXJldHVybgogfQog
Ci0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRmc2dpZC9zZXRmc2dp
ZAotLy9leHRlcm4gc2V0ZnNnaWQKLWZ1bmMgY19zZXRmc2dpZChnaWQgR2lkX3QpIF9DX2ludAot
ZnVuYyBTZXRmc2dpZChnaWQgaW50KSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlf
ciA6PSBjX3NldGZzZ2lkKEdpZF90KGdpZCkpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8g
Oj0gZmFsc2UKLQlpZiBfciA8IDAgewotCQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8g
PSB0cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5v
Ci0JfQotCXJldHVybgotfQotCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBTZXRmc3VpZC9zZXRmc3VpZAotLy9leHRlcm4gc2V0ZnN1aWQKLWZ1bmMgY19zZXRmc3VpZCh1
aWQgVWlkX3QpIF9DX2ludAotZnVuYyBTZXRmc3VpZCh1aWQgaW50KSAoZXJyIGVycm9yKSB7Ci0J
RW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX3NldGZzdWlkKFVpZF90KHVpZCkpCi0JdmFyIGVycm5v
IEVycm5vCi0Jc2V0RXJybm8gOj0gZmFsc2UKLQlpZiBfciA8IDAgewotCQllcnJubyA9IEdldEVy
cm5vKCkKLQkJc2V0RXJybm8gPSB0cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkKLQlpZiBzZXRFcnJu
byB7Ci0JCWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCi0vLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBTZXRyZXNnaWQvc2V0cmVzZ2lkCi0vL2V4dGVybiBzZXRyZXNn
aWQKLWZ1bmMgY19zZXRyZXNnaWQocmdpZCBHaWRfdCwgZWdpZCBHaWRfdCwgc2dpZCBHaWRfdCkg
X0NfaW50Ci1mdW5jIFNldHJlc2dpZChyZ2lkIGludCwgZWdpZCBpbnQsIHNnaWQgaW50KSAoZXJy
IGVycm9yKSB7Ci0JX3IgOj0gY19zZXRyZXNnaWQoR2lkX3QocmdpZCksIEdpZF90KGVnaWQpLCBH
aWRfdChzZ2lkKSkKLQl2YXIgZXJybm8gRXJybm8KLQlzZXRFcnJubyA6PSBmYWxzZQotCWlmIF9y
IDwgMCB7Ci0JCWVycm5vID0gR2V0RXJybm8oKQotCQlzZXRFcnJubyA9IHRydWUKLQl9Ci0JaWYg
c2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQogLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmVzdWlkL3NldHJlc3VpZAogLy9leHRlcm4g
c2V0cmVzdWlkCiBmdW5jIGNfc2V0cmVzdWlkKHJ1aWQgVWlkX3QsIGV1aWQgVWlkX3QsIHN1aWQg
VWlkX3QpIF9DX2ludApAQCAtMTEzMCwyMyArOTc5LDYgQEAgZnVuYyBTeW5jRmlsZVJhbmdlKGZk
IGludCwgb2ZmIGludDY0LCBuIGludDY0LCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsKIAlyZXR1
cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3lzaW5mby9z
eXNpbmZvCi0vL2V4dGVybiBzeXNpbmZvCi1mdW5jIGNfc3lzaW5mbyhpbmZvICpTeXNpbmZvX3Qp
IF9DX2ludAotZnVuYyBTeXNpbmZvKGluZm8gKlN5c2luZm9fdCkgKGVyciBlcnJvcikgewotCV9y
IDo9IGNfc3lzaW5mbyhpbmZvKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNl
Ci0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQot
CX0KLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCiAvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBUZWUvdGVlCiAvL2V4dGVybiB0ZWUK
IGZ1bmMgY190ZWUocmZkIF9DX2ludCwgd2ZkIF9DX2ludCwgbGVuIFNpemVfdCwgZmxhZ3MgX0Nf
dWludCkgU3NpemVfdApAQCAtMTIzNCw2MyArMTA2Niw2IEBAIGZ1bmMgVW5zaGFyZShmbGFncyBp
bnQpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgSW9wZXJtL2lvcGVybQotLy9leHRlcm4gaW9wZXJtCi1mdW5jIGNfaW9w
ZXJtKGZyb20gX0NfbG9uZywgbnVtIF9DX2xvbmcsIG9uIF9DX2ludCkgX0NfaW50Ci1mdW5jIElv
cGVybShmcm9tIGludCwgbnVtIGludCwgb24gaW50KSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNj
YWxsKCkKLQlfciA6PSBjX2lvcGVybShfQ19sb25nKGZyb20pLCBfQ19sb25nKG51bSksIF9DX2lu
dChvbikpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8gOj0gZmFsc2UKLQlpZiBfciA8IDAg
ewotCQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8gPSB0cnVlCi0JfQotCUV4aXRzeXNj
YWxsKCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCi0v
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBJb3BsL2lvcGwKLS8vZXh0ZXJu
IGlvcGwKLWZ1bmMgY19pb3BsKGxldmVsIF9DX2ludCkgX0NfaW50Ci1mdW5jIElvcGwobGV2ZWwg
aW50KSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX2lvcGwoX0NfaW50
KGxldmVsKSkKLQl2YXIgZXJybm8gRXJybm8KLQlzZXRFcnJubyA6PSBmYWxzZQotCWlmIF9yIDwg
MCB7Ci0JCWVycm5vID0gR2V0RXJybm8oKQotCQlzZXRFcnJubyA9IHRydWUKLQl9Ci0JRXhpdHN5
c2NhbGwoKQotCWlmIHNldEVycm5vIHsKLQkJZXJyID0gZXJybm8KLQl9Ci0JcmV0dXJuCi19Ci0K
LS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFVzdGF0L3VzdGF0Ci0vL2V4
dGVybiB1c3RhdAotZnVuYyBjX3VzdGF0KGRldiBfZGV2X3QsIHVidWYgKlVzdGF0X3QpIF9DX2lu
dAotZnVuYyBVc3RhdChkZXYgaW50LCB1YnVmICpVc3RhdF90KSAoZXJyIGVycm9yKSB7Ci0JRW50
ZXJzeXNjYWxsKCkKLQlfciA6PSBjX3VzdGF0KF9kZXZfdChkZXYpLCB1YnVmKQotCXZhciBlcnJu
byBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRF
cnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJy
bm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQogLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgdXRpbWVuc2F0L3V0aW1lbnNhdAogLy9leHRlcm4gdXRpbWVu
c2F0CiBmdW5jIGNfdXRpbWVuc2F0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgdGltZXMgKlsy
XVRpbWVzcGVjLCBmbGFncyBfQ19pbnQpIF9DX2ludApAQCAtMTQwOCwzMCArMTE4Myw2IEBAIGZ1
bmMgc2V0Z3JvdXBzKG4gaW50LCBsaXN0ICpHaWRfdCkgKGVyciBlcnJvcikgewogCXJldHVybgog
fQogCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNa2ZpZm8vbWtmaWZv
Ci0vL2V4dGVybiBta2ZpZm8KLWZ1bmMgY19ta2ZpZm8ocGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3Qp
IF9DX2ludAotZnVuYyBNa2ZpZm8ocGF0aCBzdHJpbmcsIG1vZGUgdWludDMyKSAoZXJyIGVycm9y
KSB7Ci0JdmFyIF9wMSAqYnl0ZQotCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkK
LQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuCi0JfQotCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0g
Y19ta2ZpZm8oX3AxLCBNb2RlX3QobW9kZSkpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8g
Oj0gZmFsc2UKLQlpZiBfciA8IDAgewotCQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8g
PSB0cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5v
Ci0JfQotCXJldHVybgotfQotCiAvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBTZWxlY3Qvc2VsZWN0CiAvL2V4dGVybiBzZWxlY3QKIGZ1bmMgY19zZWxlY3QobmZkIF9DX2lu
dCwgciAqRmRTZXQsIHcgKkZkU2V0LCBlICpGZFNldCwgdGltZW91dCAqVGltZXZhbCkgX0NfaW50
CkBAIC0xODUyLDI2ICsxNjAzLDYgQEAgZnVuYyBHZXRwcGlkKCkgKHBwaWQgaW50KSB7CiAJcmV0
dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdldHByaW9y
aXR5L2dldHByaW9yaXR5Ci0vL2V4dGVybiBnZXRwcmlvcml0eQotZnVuYyBjX2dldHByaW9yaXR5
KHdoaWNoIF9DX2ludCwgd2hvIF9DX2ludCkgX0NfaW50Ci1mdW5jIEdldHByaW9yaXR5KHdoaWNo
IGludCwgd2hvIGludCkgKHByaW8gaW50LCBlcnIgZXJyb3IpIHsKLQlFbnRlcnN5c2NhbGwoKQot
CV9yIDo9IGNfZ2V0cHJpb3JpdHkoX0NfaW50KHdoaWNoKSwgX0NfaW50KHdobykpCi0JcHJpbyA9
IChpbnQpKF9yKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3Ig
PCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0
c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0K
LQogLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cnVzYWdlL2dldHJ1
c2FnZQogLy9leHRlcm4gZ2V0cnVzYWdlCiBmdW5jIGNfZ2V0cnVzYWdlKHdobyBfQ19pbnQsIHJ1
c2FnZSAqUnVzYWdlKSBfQ19pbnQKQEAgLTIyMzYsMzEgKzE5NjcsNiBAQCBmdW5jIFJtZGlyKHBh
dGggc3RyaW5nKSAoZXJyIGVycm9yKSB7CiAJcmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldGRvbWFpbm5hbWUvc2V0ZG9tYWlubmFtZQotLy9leHRl
cm4gc2V0ZG9tYWlubmFtZQotZnVuYyBjX3NldGRvbWFpbm5hbWUobmFtZSAqYnl0ZSwgbGVuIFNp
emVfdCkgX0NfaW50Ci1mdW5jIFNldGRvbWFpbm5hbWUocCBbXWJ5dGUpIChlcnIgZXJyb3IpIHsK
LQl2YXIgX3AxICpieXRlCi0JaWYgbGVuKHApID4gMCB7Ci0JCV9wMSA9ICgqYnl0ZSkodW5zYWZl
LlBvaW50ZXIoJnBbMF0pKQotCX0gZWxzZSB7Ci0JCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50
ZXIoJl96ZXJvKSkKLQl9Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX3NldGRvbWFpbm5hbWUo
X3AxLCBTaXplX3QobGVuKHApKSkKLQl2YXIgZXJybm8gRXJybm8KLQlzZXRFcnJubyA6PSBmYWxz
ZQotCWlmIF9yIDwgMCB7Ci0JCWVycm5vID0gR2V0RXJybm8oKQotCQlzZXRFcnJubyA9IHRydWUK
LQl9Ci0JRXhpdHN5c2NhbGwoKQotCWlmIHNldEVycm5vIHsKLQkJZXJyID0gZXJybm8KLQl9Ci0J
cmV0dXJuCi19Ci0KIC8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldGhv
c3RuYW1lL3NldGhvc3RuYW1lCiAvL2V4dGVybiBzZXRob3N0bmFtZQogZnVuYyBjX3NldGhvc3Ru
YW1lKG5hbWUgKmJ5dGUsIGxlbiBTaXplX3QpIF9DX2ludApAQCAtMjMzNSwyNSArMjA0MSw2IEBA
IGZ1bmMgU2V0cGdpZChwaWQgaW50LCBwZ2lkIGludCkgKGVyciBlcnJvcikgewogCXJldHVybgog
fQogCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRwcmlvcml0eS9z
ZXRwcmlvcml0eQotLy9leHRlcm4gc2V0cHJpb3JpdHkKLWZ1bmMgY19zZXRwcmlvcml0eSh3aGlj
aCBfQ19pbnQsIHdobyBfQ19pbnQsIHByaW8gX0NfaW50KSBfQ19pbnQKLWZ1bmMgU2V0cHJpb3Jp
dHkod2hpY2ggaW50LCB3aG8gaW50LCBwcmlvIGludCkgKGVyciBlcnJvcikgewotCUVudGVyc3lz
Y2FsbCgpCi0JX3IgOj0gY19zZXRwcmlvcml0eShfQ19pbnQod2hpY2gpLCBfQ19pbnQod2hvKSwg
X0NfaW50KHByaW8pKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYg
X3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlF
eGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4K
LX0KLQogLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmV1aWQvc2V0
cmV1aWQKIC8vZXh0ZXJuIHNldHJldWlkCiBmdW5jIGNfc2V0cmV1aWQocnVpZCBVaWRfdCwgZXVp
ZCBVaWRfdCkgX0NfaW50CkBAIC0yNjYzLDk0ICsyMzUwLDYgQEAgZnVuYyBNcHJvdGVjdChiIFtd
Ynl0ZSwgcHJvdCBpbnQpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTWxvY2svbWxvY2sKLS8vZXh0ZXJuIG1sb2NrCi1m
dW5jIGNfbWxvY2soYWRkciAqYnl0ZSwgbGVuIFNpemVfdCkgX0NfaW50Ci1mdW5jIE1sb2NrKGIg
W11ieXRlKSAoZXJyIGVycm9yKSB7Ci0JdmFyIF9wMSAqYnl0ZQotCWlmIGxlbihiKSA+IDAgewot
CQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZiWzBdKSkKLQl9IGVsc2UgewotCQlfcDEg
PSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCi0JfQotCUVudGVyc3lzY2FsbCgpCi0J
X3IgOj0gY19tbG9jayhfcDEsIFNpemVfdChsZW4oYikpKQotCXZhciBlcnJubyBFcnJubwotCXNl
dEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNl
dEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIg
PSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgTXVubG9jay9tdW5sb2NrCi0vL2V4dGVybiBtdW5sb2NrCi1mdW5jIGNfbXVubG9j
ayhhZGRyICpieXRlLCBsZW4gU2l6ZV90KSBfQ19pbnQKLWZ1bmMgTXVubG9jayhiIFtdYnl0ZSkg
KGVyciBlcnJvcikgewotCXZhciBfcDEgKmJ5dGUKLQlpZiBsZW4oYikgPiAwIHsKLQkJX3AxID0g
KCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkpCi0JfSBlbHNlIHsKLQkJX3AxID0gKCpieXRl
KSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQotCX0KLQlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNf
bXVubG9jayhfcDEsIFNpemVfdChsZW4oYikpKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5v
IDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5v
ID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJu
bwotCX0KLQlyZXR1cm4KLX0KLQotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgTWxvY2thbGwvbWxvY2thbGwKLS8vZXh0ZXJuIG1sb2NrYWxsCi1mdW5jIGNfbWxvY2thbGwo
ZmxhZ3MgX0NfaW50KSBfQ19pbnQKLWZ1bmMgTWxvY2thbGwoZmxhZ3MgaW50KSAoZXJyIGVycm9y
KSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX21sb2NrYWxsKF9DX2ludChmbGFncykpCi0J
dmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8gOj0gZmFsc2UKLQlpZiBfciA8IDAgewotCQllcnJu
byA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8gPSB0cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkKLQlp
ZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCi0vLyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNdW5sb2NrYWxsL211bmxvY2thbGwKLS8vZXh0
ZXJuIG11bmxvY2thbGwKLWZ1bmMgY19tdW5sb2NrYWxsKCkgX0NfaW50Ci1mdW5jIE11bmxvY2th
bGwoKSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX211bmxvY2thbGwo
KQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJ
ZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgp
Ci0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQogLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVGNnZXRhdHRyL3RjZ2V0YXR0cgogLy9l
eHRlcm4gdGNnZXRhdHRyCiBmdW5jIGNfdGNnZXRhdHRyKGZkIF9DX2ludCwgcCAqVGVybWlvcykg
X0NfaW50CkBAIC0yODA3LDEyICsyNDA2LDEyIEBAIGZ1bmMgc3lzY29uZihuYW1lIGludCkgKHJl
dCBpbnQ2NCwgZXJyIGVycm9yKSB7CiAJcmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIEZzdGF0L2ZzdGF0NjQKLS8vZXh0ZXJuIGZzdGF0NjQKLWZ1bmMg
Y19mc3RhdDY0KGZkIF9DX2ludCwgc3RhdCAqU3RhdF90KSBfQ19pbnQKKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZzdGF0L2ZzdGF0CisvL2V4dGVybiBmc3RhdAorZnVu
YyBjX2ZzdGF0KGZkIF9DX2ludCwgc3RhdCAqU3RhdF90KSBfQ19pbnQKIGZ1bmMgRnN0YXQoZmQg
aW50LCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAlFbnRlcnN5c2NhbGwoKQotCV9yIDo9
IGNfZnN0YXQ2NChfQ19pbnQoZmQpLCBzdGF0KQorCV9yIDo9IGNfZnN0YXQoX0NfaW50KGZkKSwg
c3RhdCkKIAl2YXIgZXJybm8gRXJybm8KIAlzZXRFcnJubyA6PSBmYWxzZQogCWlmIF9yIDwgMCB7
CkBAIC0yODI2LDEyICsyNDI1LDEyIEBAIGZ1bmMgRnN0YXQoZmQgaW50LCBzdGF0ICpTdGF0X3Qp
IChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgRnRydW5jYXRlL2Z0cnVuY2F0ZTY0Ci0vL2V4dGVybiBmdHJ1bmNhdGU2NAot
ZnVuYyBjX2Z0cnVuY2F0ZTY0KGZkIF9DX2ludCwgbGVuZ3RoIE9mZnNldF90KSBfQ19pbnQKKy8v
IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZ0cnVuY2F0ZS9mdHJ1bmNhdGUK
Ky8vZXh0ZXJuIGZ0cnVuY2F0ZQorZnVuYyBjX2Z0cnVuY2F0ZShmZCBfQ19pbnQsIGxlbmd0aCBP
ZmZzZXRfdCkgX0NfaW50CiBmdW5jIEZ0cnVuY2F0ZShmZCBpbnQsIGxlbmd0aCBpbnQ2NCkgKGVy
ciBlcnJvcikgewogCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19mdHJ1bmNhdGU2NChfQ19pbnQo
ZmQpLCBPZmZzZXRfdChsZW5ndGgpKQorCV9yIDo9IGNfZnRydW5jYXRlKF9DX2ludChmZCksIE9m
ZnNldF90KGxlbmd0aCkpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlp
ZiBfciA8IDAgewpAQCAtMjg0NSwxMSArMjQ0NCwxMSBAQCBmdW5jIEZ0cnVuY2F0ZShmZCBpbnQs
IGxlbmd0aCBpbnQ2NCkgKGVyciBlcnJvcikgewogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXRybGltaXQvZ2V0cmxpbWl0NjQKLS8vZXh0ZXJu
IGdldHJsaW1pdDY0Ci1mdW5jIGNfZ2V0cmxpbWl0NjQocmVzb3VyY2UgX0NfaW50LCBybGltICpS
bGltaXQpIF9DX2ludAorLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0
cmxpbWl0L2dldHJsaW1pdAorLy9leHRlcm4gZ2V0cmxpbWl0CitmdW5jIGNfZ2V0cmxpbWl0KHJl
c291cmNlIF9DX2ludCwgcmxpbSAqUmxpbWl0KSBfQ19pbnQKIGZ1bmMgR2V0cmxpbWl0KHJlc291
cmNlIGludCwgcmxpbSAqUmxpbWl0KSAoZXJyIGVycm9yKSB7Ci0JX3IgOj0gY19nZXRybGltaXQ2
NChfQ19pbnQocmVzb3VyY2UpLCBybGltKQorCV9yIDo9IGNfZ2V0cmxpbWl0KF9DX2ludChyZXNv
dXJjZSksIHJsaW0pCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlpZiBf
ciA8IDAgewpAQCAtMjg2Miw5ICsyNDYxLDkgQEAgZnVuYyBHZXRybGltaXQocmVzb3VyY2UgaW50
LCBybGltICpSbGltaXQpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTHN0YXQvbHN0YXQ2NAotLy9leHRlcm4gbHN0YXQ2
NAotZnVuYyBjX2xzdGF0NjQocGF0aCAqYnl0ZSwgc3RhdCAqU3RhdF90KSBfQ19pbnQKKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIExzdGF0L2xzdGF0CisvL2V4dGVybiBs
c3RhdAorZnVuYyBjX2xzdGF0KHBhdGggKmJ5dGUsIHN0YXQgKlN0YXRfdCkgX0NfaW50CiBmdW5j
IExzdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAl2YXIgX3Ax
ICpieXRlCiAJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQpAQCAtMjg3Miw3ICsy
NDcxLDcgQEAgZnVuYyBMc3RhdChwYXRoIHN0cmluZywgc3RhdCAqU3RhdF90KSAoZXJyIGVycm9y
KSB7CiAJCXJldHVybgogCX0KIAlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfbHN0YXQ2NChfcDEs
IHN0YXQpCisJX3IgOj0gY19sc3RhdChfcDEsIHN0YXQpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0
RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8IDAgewpAQCAtMjg4NiwxMiArMjQ4NSwxMiBAQCBmdW5j
IExzdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4K
IH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgbW1hcC9tbWFwNjQK
LS8vZXh0ZXJuIG1tYXA2NAotZnVuYyBjX21tYXA2NChhZGRyICpieXRlLCBsZW5ndGggU2l6ZV90
LCBwcm90IF9DX2ludCwgZmxhZ3MgX0NfaW50LCBmZCBfQ19pbnQsIG9mZnNldCBPZmZzZXRfdCkg
KmJ5dGUKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIG1tYXAvbW1hcAor
Ly9leHRlcm4gbW1hcAorZnVuYyBjX21tYXAoYWRkciAqYnl0ZSwgbGVuZ3RoIFNpemVfdCwgcHJv
dCBfQ19pbnQsIGZsYWdzIF9DX2ludCwgZmQgX0NfaW50LCBvZmZzZXQgT2Zmc2V0X3QpICpieXRl
CiBmdW5jIG1tYXAoYWRkciB1aW50cHRyLCBsZW5ndGggdWludHB0ciwgcHJvdCBpbnQsIGZsYWdz
IGludCwgZmQgaW50LCBvZmZzZXQgaW50NjQpICh4YWRkciB1aW50cHRyLCBlcnIgZXJyb3IpIHsK
IAlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfbW1hcDY0KCgqYnl0ZSkodW5zYWZlLlBvaW50ZXIo
YWRkcikpLCBTaXplX3QobGVuZ3RoKSwgX0NfaW50KHByb3QpLCBfQ19pbnQoZmxhZ3MpLCBfQ19p
bnQoZmQpLCBPZmZzZXRfdChvZmZzZXQpKQorCV9yIDo9IGNfbW1hcCgoKmJ5dGUpKHVuc2FmZS5Q
b2ludGVyKGFkZHIpKSwgU2l6ZV90KGxlbmd0aCksIF9DX2ludChwcm90KSwgX0NfaW50KGZsYWdz
KSwgX0NfaW50KGZkKSwgT2Zmc2V0X3Qob2Zmc2V0KSkKIAl4YWRkciA9ICh1aW50cHRyKSh1bnNh
ZmUuUG9pbnRlcihfcikpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKQEAg
LTI5MDYsOSArMjUwNSw5IEBAIGZ1bmMgbW1hcChhZGRyIHVpbnRwdHIsIGxlbmd0aCB1aW50cHRy
LCBwcm90IGludCwgZmxhZ3MgaW50LCBmZCBpbnQsIG9mZnNldCBpbnQ2CiAJcmV0dXJuCiB9CiAK
LS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE9wZW4vX19nb19vcGVuNjQK
LS8vZXh0ZXJuIF9fZ29fb3BlbjY0Ci1mdW5jIGNfX19nb19vcGVuNjQocGF0aCAqYnl0ZSwgbW9k
ZSBfQ19pbnQsIHBlcm0gTW9kZV90KSBfQ19pbnQKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIE9wZW4vX19nb19vcGVuCisvL2V4dGVybiBfX2dvX29wZW4KK2Z1bmMgY19f
X2dvX29wZW4ocGF0aCAqYnl0ZSwgbW9kZSBfQ19pbnQsIHBlcm0gTW9kZV90KSBfQ19pbnQKIGZ1
bmMgT3BlbihwYXRoIHN0cmluZywgbW9kZSBpbnQsIHBlcm0gdWludDMyKSAoZmQgaW50LCBlcnIg
ZXJyb3IpIHsKIAl2YXIgX3AxICpieXRlCiAJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhw
YXRoKQpAQCAtMjkxNiw3ICsyNTE1LDcgQEAgZnVuYyBPcGVuKHBhdGggc3RyaW5nLCBtb2RlIGlu
dCwgcGVybSB1aW50MzIpIChmZCBpbnQsIGVyciBlcnJvcikgewogCQlyZXR1cm4KIAl9CiAJRW50
ZXJzeXNjYWxsKCkKLQlfciA6PSBjX19fZ29fb3BlbjY0KF9wMSwgX0NfaW50KG1vZGUpLCBNb2Rl
X3QocGVybSkpCisJX3IgOj0gY19fX2dvX29wZW4oX3AxLCBfQ19pbnQobW9kZSksIE1vZGVfdChw
ZXJtKSkKIAlmZCA9IChpbnQpKF9yKQogCXZhciBlcnJubyBFcnJubwogCXNldEVycm5vIDo9IGZh
bHNlCkBAIC0yOTMxLDkgKzI1MzAsOSBAQCBmdW5jIE9wZW4ocGF0aCBzdHJpbmcsIG1vZGUgaW50
LCBwZXJtIHVpbnQzMikgKGZkIGludCwgZXJyIGVycm9yKSB7CiAJcmV0dXJuCiB9CiAKLS8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFByZWFkL3ByZWFkNjQKLS8vZXh0ZXJu
IHByZWFkNjQKLWZ1bmMgY19wcmVhZDY0KGZkIF9DX2ludCwgYnVmICpieXRlLCBjb3VudCBTaXpl
X3QsIG9mZnNldCBPZmZzZXRfdCkgU3NpemVfdAorLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgUHJlYWQvcHJlYWQKKy8vZXh0ZXJuIHByZWFkCitmdW5jIGNfcHJlYWQoZmQg
X0NfaW50LCBidWYgKmJ5dGUsIGNvdW50IFNpemVfdCwgb2Zmc2V0IE9mZnNldF90KSBTc2l6ZV90
CiBmdW5jIFByZWFkKGZkIGludCwgcCBbXWJ5dGUsIG9mZnNldCBpbnQ2NCkgKG4gaW50LCBlcnIg
ZXJyb3IpIHsKIAl2YXIgX3AyICpieXRlCiAJaWYgbGVuKHApID4gMCB7CkBAIC0yOTQyLDcgKzI1
NDEsNyBAQCBmdW5jIFByZWFkKGZkIGludCwgcCBbXWJ5dGUsIG9mZnNldCBpbnQ2NCkgKG4gaW50
LCBlcnIgZXJyb3IpIHsKIAkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQog
CX0KIAlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfcHJlYWQ2NChfQ19pbnQoZmQpLCBfcDIsIFNp
emVfdChsZW4ocCkpLCBPZmZzZXRfdChvZmZzZXQpKQorCV9yIDo9IGNfcHJlYWQoX0NfaW50KGZk
KSwgX3AyLCBTaXplX3QobGVuKHApKSwgT2Zmc2V0X3Qob2Zmc2V0KSkKIAluID0gKGludCkoX3Ip
CiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKQEAgLTI5NTcsOSArMjU1Niw5
IEBAIGZ1bmMgUHJlYWQoZmQgaW50LCBwIFtdYnl0ZSwgb2Zmc2V0IGludDY0KSAobiBpbnQsIGVy
ciBlcnJvcikgewogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBQd3JpdGUvcHdyaXRlNjQKLS8vZXh0ZXJuIHB3cml0ZTY0Ci1mdW5jIGNfcHdyaXRl
NjQoZmQgX0NfaW50LCBidWYgKmJ5dGUsIGNvdW50IFNpemVfdCwgb2Zmc2V0IE9mZnNldF90KSBT
c2l6ZV90CisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBQd3JpdGUvcHdy
aXRlCisvL2V4dGVybiBwd3JpdGUKK2Z1bmMgY19wd3JpdGUoZmQgX0NfaW50LCBidWYgKmJ5dGUs
IGNvdW50IFNpemVfdCwgb2Zmc2V0IE9mZnNldF90KSBTc2l6ZV90CiBmdW5jIFB3cml0ZShmZCBp
bnQsIHAgW11ieXRlLCBvZmZzZXQgaW50NjQpIChuIGludCwgZXJyIGVycm9yKSB7CiAJdmFyIF9w
MiAqYnl0ZQogCWlmIGxlbihwKSA+IDAgewpAQCAtMjk2OCw3ICsyNTY3LDcgQEAgZnVuYyBQd3Jp
dGUoZmQgaW50LCBwIFtdYnl0ZSwgb2Zmc2V0IGludDY0KSAobiBpbnQsIGVyciBlcnJvcikgewog
CQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCiAJfQogCUVudGVyc3lzY2Fs
bCgpCi0JX3IgOj0gY19wd3JpdGU2NChfQ19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4ocCkpLCBP
ZmZzZXRfdChvZmZzZXQpKQorCV9yIDo9IGNfcHdyaXRlKF9DX2ludChmZCksIF9wMiwgU2l6ZV90
KGxlbihwKSksIE9mZnNldF90KG9mZnNldCkpCiAJbiA9IChpbnQpKF9yKQogCXZhciBlcnJubyBF
cnJubwogCXNldEVycm5vIDo9IGZhbHNlCkBAIC0yOTgzLDEyICsyNTgyLDEyIEBAIGZ1bmMgUHdy
aXRlKGZkIGludCwgcCBbXWJ5dGUsIG9mZnNldCBpbnQ2NCkgKG4gaW50LCBlcnIgZXJyb3IpIHsK
IAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2Vl
ay9sc2VlazY0Ci0vL2V4dGVybiBsc2VlazY0Ci1mdW5jIGNfbHNlZWs2NChmZCBfQ19pbnQsIG9m
ZnNldCBPZmZzZXRfdCwgd2hlbmNlIF9DX2ludCkgT2Zmc2V0X3QKKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNlZWsvbHNlZWsKKy8vZXh0ZXJuIGxzZWVrCitmdW5jIGNf
bHNlZWsoZmQgX0NfaW50LCBvZmZzZXQgT2Zmc2V0X3QsIHdoZW5jZSBfQ19pbnQpIE9mZnNldF90
CiBmdW5jIFNlZWsoZmQgaW50LCBvZmZzZXQgaW50NjQsIHdoZW5jZSBpbnQpIChvZmYgaW50NjQs
IGVyciBlcnJvcikgewogCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19sc2VlazY0KF9DX2ludChm
ZCksIE9mZnNldF90KG9mZnNldCksIF9DX2ludCh3aGVuY2UpKQorCV9yIDo9IGNfbHNlZWsoX0Nf
aW50KGZkKSwgT2Zmc2V0X3Qob2Zmc2V0KSwgX0NfaW50KHdoZW5jZSkpCiAJb2ZmID0gKGludDY0
KShfcikKIAl2YXIgZXJybm8gRXJybm8KIAlzZXRFcnJubyA6PSBmYWxzZQpAQCAtMzAwMywxMSAr
MjYwMiwxMSBAQCBmdW5jIFNlZWsoZmQgaW50LCBvZmZzZXQgaW50NjQsIHdoZW5jZSBpbnQpIChv
ZmYgaW50NjQsIGVyciBlcnJvcikgewogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBTZXRybGltaXQvc2V0cmxpbWl0NjQKLS8vZXh0ZXJuIHNldHJs
aW1pdDY0Ci1mdW5jIGNfc2V0cmxpbWl0NjQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIF9D
X2ludAorLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmxpbWl0L3Nl
dHJsaW1pdAorLy9leHRlcm4gc2V0cmxpbWl0CitmdW5jIGNfc2V0cmxpbWl0KHJlc291cmNlIGlu
dCwgcmxpbSAqUmxpbWl0KSBfQ19pbnQKIGZ1bmMgU2V0cmxpbWl0KHJlc291cmNlIGludCwgcmxp
bSAqUmxpbWl0KSAoZXJyIGVycm9yKSB7Ci0JX3IgOj0gY19zZXRybGltaXQ2NChpbnQocmVzb3Vy
Y2UpLCBybGltKQorCV9yIDo9IGNfc2V0cmxpbWl0KGludChyZXNvdXJjZSksIHJsaW0pCiAJdmFy
IGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8IDAgewpAQCAtMzAyMCw5
ICsyNjE5LDkgQEAgZnVuYyBTZXRybGltaXQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIChl
cnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgU3RhdC9zdGF0NjQKLS8vZXh0ZXJuIHN0YXQ2NAotZnVuYyBjX3N0YXQ2NChwYXRo
ICpieXRlLCBzdGF0ICpTdGF0X3QpIF9DX2ludAorLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgU3RhdC9zdGF0CisvL2V4dGVybiBzdGF0CitmdW5jIGNfc3RhdChwYXRoICpi
eXRlLCBzdGF0ICpTdGF0X3QpIF9DX2ludAogZnVuYyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpT
dGF0X3QpIChlcnIgZXJyb3IpIHsKIAl2YXIgX3AxICpieXRlCiAJX3AxLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhwYXRoKQpAQCAtMzAzMCw3ICsyNjI5LDcgQEAgZnVuYyBTdGF0KHBhdGggc3Ry
aW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAkJcmV0dXJuCiAJfQogCUVudGVyc3lz
Y2FsbCgpCi0JX3IgOj0gY19zdGF0NjQoX3AxLCBzdGF0KQorCV9yIDo9IGNfc3RhdChfcDEsIHN0
YXQpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8IDAgewpA
QCAtMzA0NCw5ICsyNjQzLDkgQEAgZnVuYyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3Qp
IChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgVHJ1bmNhdGUvdHJ1bmNhdGU2NAotLy9leHRlcm4gdHJ1bmNhdGU2NAotZnVu
YyBjX3RydW5jYXRlNjQocGF0aCAqYnl0ZSwgbGVuZ3RoIE9mZnNldF90KSBfQ19pbnQKKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFRydW5jYXRlL3RydW5jYXRlCisvL2V4
dGVybiB0cnVuY2F0ZQorZnVuYyBjX3RydW5jYXRlKHBhdGggKmJ5dGUsIGxlbmd0aCBPZmZzZXRf
dCkgX0NfaW50CiBmdW5jIFRydW5jYXRlKHBhdGggc3RyaW5nLCBsZW5ndGggaW50NjQpIChlcnIg
ZXJyb3IpIHsKIAl2YXIgX3AxICpieXRlCiAJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhw
YXRoKQpAQCAtMzA1NCw3ICsyNjUzLDcgQEAgZnVuYyBUcnVuY2F0ZShwYXRoIHN0cmluZywgbGVu
Z3RoIGludDY0KSAoZXJyIGVycm9yKSB7CiAJCXJldHVybgogCX0KIAlFbnRlcnN5c2NhbGwoKQot
CV9yIDo9IGNfdHJ1bmNhdGU2NChfcDEsIE9mZnNldF90KGxlbmd0aCkpCisJX3IgOj0gY190cnVu
Y2F0ZShfcDEsIE9mZnNldF90KGxlbmd0aCkpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8g
Oj0gZmFsc2UKIAlpZiBfciA8IDAgewotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:39:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:39:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOZA-0001gc-Dh; Mon, 23 Sep 2019 13:39:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOZ8-0001gB-ID
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:39:46 +0000
X-Inumbo-ID: 99f83972-de07-11e9-95fd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 99f83972-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:39:44 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id BEE3BF2014;
 Mon, 23 Sep 2019 15:39:43 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UXOCaEjYv1DS; Mon, 23 Sep 2019 15:39:43 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 977B5F2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:39:41 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:39:37 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:39:25 +0200
Message-ID: <20190923133927.28029-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
References: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 12/14] libgo: Update packages.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXNlICpyZWdmaWxlLmdvIGluc3RlYWQgb2YgKmxhcmdlZmlsZS5nbyB0byBhdm9pZCB1c2FnZSBv
ZiAKKjY0IChvcGVuNjQgZXRjKSBmdW5jdGlvbnMuCgpTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBv
cyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogbGliZ28vcGFja2Fn
ZXMudWsgfCA0ICsrLS0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliZ28vcGFja2FnZXMudWsgYi9saWJnby9wYWNrYWdlcy51
awppbmRleCAwNWUzMWUyLi44MjYyYmZkIDEwMDY0NAotLS0gYS9saWJnby9wYWNrYWdlcy51awor
KysgYi9saWJnby9wYWNrYWdlcy51awpAQCAtMTIxLDcgKzEyMSw3IEBAICQoTElCR09fQlVJTEQp
L21hdGgvcmFuZC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yYW5kL2V4cC5nbyAkKExJ
QkdPX0VYVFJBCiAJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKIAkkKEdPQykgJChMSUJHT19HT0ZM
QUdTKSAtYyAtZmdvLXBrZ3BhdGg9bWF0aC9yYW5kICReIC1vICRAICYmIFwKIAlvYmpjb3B5IC1q
IC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQotJChMSUJHT19CVUlMRCkvc3lzY2FsbC5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9kaXJlbnQuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3N5c2NhbGwvZW5kaWFuX2xpdHRsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2Fs
bC9lbnZfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJzdHJfbGludXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZXhlY19saW51eC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9leGVjX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5
c2NhbGwvbGliY2FsbF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJj
YWxsX2xpbnV4X2FtZDY0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxf
bGludXhfdXN0YXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51
eF91dGltZXNuYW5vLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfcG9z
aXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeF9sYXJnZWZp
bGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9zdXBwb3J0LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfdW5hbWUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF93YWl0NC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9sc2ZfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbXNhbjAu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbmV0bGlua19saW51eC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zZXR1aWRnaWRfbGludXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvc2xlZXBfc2VsZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNj
YWxsL3NvY2tjbXNnX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tj
bXNnX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tldF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vc3lzY2FsbC9zb2NrZXRfbGludXhfdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9zb2NrZXRfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3Ry
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGwuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF9lcnJuby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9zeXNjYWxsX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5
c2NhbGxfbGludXhfYW1kNjQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2Fs
bF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3RpbWVzdHJ1Y3QuZ28gJChM
SUJHQ0NfQkFTRSkvbGliZ28vZ2VuZXJhdGVkL2xpYmNhbGxzLmdvICQoTElCR0NDX0JBU0UpL2xp
YmdvL2dlbmVyYXRlZC9zeXNpbmZvLmdvICQoTElCR0NDX0JBU0UpL2xpYmdvL2dlbmVyYXRlZC9z
eXNjYWxsX2FyY2guZ28gJChMSUJHQ0NfQkFTRSkvbGliZ28vZ2VuZXJhdGVkL2Vwb2xsLmdvCisk
KExJQkdPX0JVSUxEKS9zeXNjYWxsLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2Rp
cmVudC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lbmRpYW5fbGl0dGxlLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2Vudl91bml4LmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9zeXNjYWxsL2VycnN0cl9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2Fs
bC9leGVjX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2V4ZWNfdW5peC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfbGludXhfYW1kNjQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eF91c3RhdC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4X3V0aW1lc25hbm8uZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lz
Y2FsbC9saWJjYWxsX3Bvc2l4X3JlZ2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2Nh
bGwvbGliY2FsbF9zdXBwb3J0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNh
bGxfdW5hbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF93YWl0NC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9sc2ZfbGludXguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvbXNhbjAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwv
bmV0bGlua19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zZXR1aWRnaWRf
bGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc2xlZXBfc2VsZWN0LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tjbXNnX2xpbnV4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9zeXNjYWxsL3NvY2tjbXNnX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3N5c2NhbGwvc29ja2V0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tldF9s
aW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrZXRfbGludXhfdHlwZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrZXRfcG9zaXguZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3N5c2NhbGwvc3RyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxs
L3N5c2NhbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF9lcnJuby5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsX2xpbnV4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfbGludXhfYW1kNjQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9z
eXNjYWxsL3RpbWVzdHJ1Y3QuZ28gJChMSUJHQ0NfQkFTRSkvbGliZ28vZ2VuZXJhdGVkL2xpYmNh
bGxzLmdvICQoTElCR0NDX0JBU0UpL2xpYmdvL2dlbmVyYXRlZC9zeXNpbmZvLmdvICQoTElCR0ND
X0JBU0UpL2xpYmdvL2dlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28gJChMSUJHQ0NfQkFTRSkvbGli
Z28vZ2VuZXJhdGVkL2Vwb2xsLmdvCiAJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5v
dGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCiAJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPXN5c2NhbGwgJF4gLW8gJEAgJiYgXAogCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCkBAIC0zMjQsNyArMzI0LDcgQEAgJChMSUJHT19C
VUlMRCkvZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1Lm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9nb2wKIAlta2RpciAtcCAkKGRpciAkQCkgJiYgXAogCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L2NyeXB0by9jaGFj
aGEyMHBvbHkxMzA1ICReIC1vICRAICYmIFwKIAlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQotJChMSUJHT19CVUlMRCkvb3MubzogJChMSUJHT19FWFRSQUNURUQpL2dvL29z
L2Rpci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX2djY2dvLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9vcy9kaXJfbGFyZ2VmaWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9k
aXJfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZW52LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9vcy9lcnJvci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJyb3JfdW5peC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3MvZXhlY19wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY191bml4LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9vcy9leGVjdXRhYmxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9vcy9leGVjdXRhYmxlX3Byb2Nmcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZmlsZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZmlsZV9wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vb3MvZmlsZV91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9nZXR3ZC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGF0aC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mv
cGF0aF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9waXBlX2xpbnV4LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9vcy9wcm9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zdGF0
X2F0aW0uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0YXRfdW5peC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3Mvc3RpY2t5X25vdGJzZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mv
c3RyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zeXMuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL3N5c19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3lzX3VuaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL29zL3R5cGVzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9v
cy90eXBlc191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy93YWl0X3dhaXRpZC5nbwor
JChMSUJHT19CVUlMRCkvb3MubzogJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Rpci5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9v
cy9kaXJfcmVnZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX3VuaXguZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL29zL2Vudi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJy
b3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Vycm9yX3VuaXguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL29zL2V4ZWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWNfcG9zaXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vb3MvZXhlY3V0YWJsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJs
ZV9wcm9jZnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL29zL2ZpbGVfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVf
dW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZ2V0d2QuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL29zL3BhdGguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3BhdGhfdW5peC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGlwZV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vb3MvcHJvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3RhdF9hdGltLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9vcy9zdGF0X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29z
L3N0aWNreV9ub3Ric2QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0ci5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vb3Mvc3lzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zeXNfbGlu
dXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N5c191bml4LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9vcy90eXBlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvdHlwZXNfdW5peC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvd2FpdF93YWl0aWQuZ28KIAkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwK
IAkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9b3MgJF4gLW8gJEAgJiYg
XAogCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCi0tIAoyLjE3LjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:39:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:39:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOZE-0001i1-Gj; Mon, 23 Sep 2019 13:39:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOZD-0001hn-IX
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:39:51 +0000
X-Inumbo-ID: 9b39eaf6-de07-11e9-95fd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9b39eaf6-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:39:47 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D4E7DF2013;
 Mon, 23 Sep 2019 15:39:45 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ZnH3paXNhBs2; Mon, 23 Sep 2019 15:39:45 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id A2E4DF2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:39:43 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:39:37 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:39:26 +0200
Message-ID: <20190923133927.28029-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
References: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 13/14] libgo: Use semaphores
 instead of futexes
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

R28gdXNlcyBmdXRleGVzIGZvciBsb2NraW5nIGluIGxpbnV4IGJ1dCB0aGV5IGFyZSBub3QgaW1w
bGVtZW50ZWQgaW4KVW5pa3JhZnQuIEFzIGEgcmVzdWx0IHdlIG5lZWQgdG8gc3dpdGNoIHRvIHNl
bWFwaG9yZXMuCgpTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9z
Lk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogbGliZ28vcGFja2FnZXMudWsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAyICstCiAuLi5nby1Vc2Utc2VtYXBob3Jlcy1pbnN0ZWFkLW9mLWZ1
dGV4ZXMucGF0Y2ggfCAxMzEgKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDEz
MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hl
cy8wMDA2LWxpYmdvLVVzZS1zZW1hcGhvcmVzLWluc3RlYWQtb2YtZnV0ZXhlcy5wYXRjaAoKZGlm
ZiAtLWdpdCBhL2xpYmdvL3BhY2thZ2VzLnVrIGIvbGliZ28vcGFja2FnZXMudWsKaW5kZXggODI2
MmJmZC4uNmZmZjFmZCAxMDA2NDQKLS0tIGEvbGliZ28vcGFja2FnZXMudWsKKysrIGIvbGliZ28v
cGFja2FnZXMudWsKQEAgLTgwLDcgKzgwLDcgQEAgJChMSUJHT19CVUlMRCkvaW1hZ2UvY29sb3Iu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2NvbG9yL2NvbG9yLmdvICQoTElCR08KIAlt
a2RpciAtcCAkKGRpciAkQCkgJiYgXAogCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28t
cGtncGF0aD1pbWFnZS9jb2xvciAkXiAtbyAkQCAmJiBcCiAJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkKLSQoTElCR09fQlVJTEQpL3J1bnRpbWUubzogJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvYWxnLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2Nn
b19nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jaGFuLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9ydW50aW1lL2NvbXBpbGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL2NwdXByb2YuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY3B1dGlja3Mu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZGVidWcuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvZW52X3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L2Vycm9yLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2V4dGVybi5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9mZmkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvaGFzaDY0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2hhc2htYXAuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaGFzaG1hcF9mYXN0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL2lmYWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2xm
c3RhY2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbGZzdGFja182NGJpdC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sb2NrX2Z1dGV4LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL21jYWNoZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9t
cHJvZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9tc2FuMC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS9tc3RhdHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvbmV0cG9sbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9uZXRwb2xsX2Vwb2xs
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL29zX2djY2dvLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL29zX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL3BhbmljLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3ByaW50LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3Byb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1
bnRpbWUvcmFjZTAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcmRlYnVnLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3J1bnRpbWUuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvcnVudGltZTEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVu
dGltZTIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2VsZWN0LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9ydW50aW1lL3NlbWEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvc2lnbmFsX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NpZ25hbF9z
aWdoYW5kbGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NpZ25hbF91bml4Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NpZ3F1ZXVlLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL3NpemVjbGFzc2VzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL3NsaWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3N0cmluZy5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zdHVicy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
cnVudGltZS9zdHViczIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc3ltdGFiLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3RpbWUuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvdHJhY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHJhY2Vi
YWNrX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3R5cGUuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHlwZWtpbmQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvdW5hbGlnbmVkMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS91dGY4
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3dyaXRlX2Vyci5nbyAkKExJQkdDQ19C
QVNFKS9saWJnby9nZW5lcmF0ZWQvcnVudGltZV9zeXNpbmZvLmdvICQoTElCR0NDX0JBU0UpL2xp
YmdvL2dlbmVyYXRlZC9zaWd0YWIuZ28KKyQoTElCR09fQlVJTEQpL3J1bnRpbWUubzogJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvYWxnLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL2Nnb19nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jaGFuLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2NvbXBpbGVyLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9ydW50aW1lL2NwdXByb2YuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY3B1
dGlja3MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZGVidWcuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvZW52X3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL2Vycm9yLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2V4dGVybi5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9mZmkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvaGFzaDY0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2hhc2htYXAu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaGFzaG1hcF9mYXN0LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9ydW50aW1lL2lmYWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL2xmc3RhY2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbGZzdGFja182NGJp
dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sb2NrX3NlbWEuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvbWNhY2hlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL21wcm9mLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21zYW4wLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21zdGF0cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
cnVudGltZS9uZXRwb2xsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL25ldHBvbGxf
ZXBvbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvb3NfZ2NjZ28uZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvb3NfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvcGFuaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJpbnQuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS9yYWNlMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9yZGVidWcu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZS5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9ydW50aW1lMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9ydW50aW1lMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zZWxlY3QuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2VtYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
cnVudGltZS9zaWduYWxfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2ln
bmFsX3NpZ2hhbmRsZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lnbmFsX3Vu
aXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lncXVldWUuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvc2l6ZWNsYXNzZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvc2xpY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc3RyaW5nLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3N0dWJzLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9ydW50aW1lL3N0dWJzMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zeW10
YWIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdGltZS5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS90cmFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90
cmFjZWJhY2tfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHlwZS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90eXBla2luZC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS91bmFsaWduZWQxLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L3V0ZjguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvd3JpdGVfZXJyLmdvICQoTElC
R0NDX0JBU0UpL2xpYmdvL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28gJChMSUJHQ0NfQkFT
RSkvbGliZ28vZ2VuZXJhdGVkL3NpZ3RhYi5nbwogCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAogCSQoR09DKSAkKExJ
QkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lIC1mZ28tYy1oZWFkZXI9JChMSUJH
Q0NfQkFTRSkvbGliZ28vZ2VuZXJhdGVkL3J1bnRpbWUuaW5jLnRtcCAtZmdvLWNvbXBpbGluZy1y
dW50aW1lICReIC1vICRAICYmIFwKIAlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQpkaWZmIC0tZ2l0IGEvcGF0Y2hlcy8wMDA2LWxpYmdvLVVzZS1zZW1hcGhvcmVzLWluc3Rl
YWQtb2YtZnV0ZXhlcy5wYXRjaCBiL3BhdGNoZXMvMDAwNi1saWJnby1Vc2Utc2VtYXBob3Jlcy1p
bnN0ZWFkLW9mLWZ1dGV4ZXMucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZmRjMTJlMwotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwNi1saWJnby1Vc2Utc2Vt
YXBob3Jlcy1pbnN0ZWFkLW9mLWZ1dGV4ZXMucGF0Y2gKQEAgLTAsMCArMSwxMzEgQEAKK0Zyb20g
YWQ1MmE2N2NhMDg0ZDQwNzY4YWQ4ZmRmNDkyZWUyNmY0MTkwMjY3MCBNb24gU2VwIDE3IDAwOjAw
OjAwIDIwMDEKK0Zyb206IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5l
Y2xhYi5ldT4KK0RhdGU6IEZyaSwgNiBTZXAgMjAxOSAxMjowODo1MyArMDIwMAorU3ViamVjdDog
W1BBVENIXSBVc2Ugc2VtYXBob3JlcyBpbnN0ZWFkIG9mIGZ1dGV4ZXMKKworZnV0ZXhlcyBhcmUg
bm90IGltcGxlbWVudGVkIG9uIFVuaWtyYWZ0LiBJbiBsaWJnbyB0aGVyZSBhcmUgc29tZSBvdGhl
cgordGFyZ2V0cyAobGlrZSBvcGVuYnNkKSB3aGljaCB1c2Ugc2VtYXBob3JlcyBpbnN0ZWFkIG9m
IGZ1dGV4ZXMuCitGb2xsb3dpbmcgdGhlIHNhbWUgYXBwcm9hY2ggYXMgaW4gdGhlc2UgdGFyZ2V0
cywgd2l0aCB0aGlzIHBhdGNoCitsb2NraW5nIGlzIGRvbmUgdXNpbmcgc2VtYXBob3Jlcy4KKwor
LS0tCisgbGliZ28vZ28vcnVudGltZS9vc19saW51eC5nbyB8IDk5ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKystLQorIDEgZmlsZSBjaGFuZ2VkLCA5NiBpbnNlcnRpb25zKCspLCAz
IGRlbGV0aW9ucygtKQorCitkaWZmIC0tZ2l0IGEvbGliZ28vZ28vcnVudGltZS9vc19saW51eC5n
byBiL2xpYmdvL2dvL3J1bnRpbWUvb3NfbGludXguZ28KK2luZGV4IGFkMzM0ODY5ZS4uNzc1ZjM0
ODU5IDEwMDY0NAorLS0tIGEvbGliZ28vZ28vcnVudGltZS9vc19saW51eC5nbworKysrIGIvbGli
Z28vZ28vcnVudGltZS9vc19saW51eC5nbworQEAgLTksOSArOSw5IEBAIGltcG9ydCAoCisgCSJ1
bnNhZmUiCisgKQorCistdHlwZSBtT1Mgc3RydWN0IHsKKy0JdW51c2VkIGJ5dGUKKy19CisrLy90
eXBlIG1PUyBzdHJ1Y3QgeworKy8vCXVudXNlZCBieXRlCisrLy99CisKKyBmdW5jIGZ1dGV4KGFk
ZHIgdW5zYWZlLlBvaW50ZXIsIG9wIGludDMyLCB2YWwgdWludDMyLCB0cywgYWRkcjIgdW5zYWZl
LlBvaW50ZXIsIHZhbDMgdWludDMyKSBpbnQzMiB7CisgCXJldHVybiBpbnQzMihzeXNjYWxsKF9T
WVNfZnV0ZXgsIHVpbnRwdHIoYWRkciksIHVpbnRwdHIob3ApLCB1aW50cHRyKHZhbCksIHVpbnRw
dHIodHMpLCB1aW50cHRyKGFkZHIyKSwgdWludHB0cih2YWwzKSkpCitAQCAtMTY5LDMgKzE2OSw5
NiBAQCBmdW5jIHN5c2F1eHYoYXV4diBbXXVpbnRwdHIpIGludCB7CisKKyAvLyBUZW1wb3Jhcnkg
Zm9yIGdjY2dvIHVudGlsIHdlIHBvcnQgbWVtX0dPT1MuZ28uCisgdmFyIGFkZHJzcGFjZV92ZWMg
WzFdYnl0ZQorKworKy8vIENvcHlyaWdodCAyMDExIFRoZSBHbyBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlCisrLy8gbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorKworK3R5cGUgbU9TIHN0cnVjdCB7CisrCXdhaXRzZW1hIHVpbnRwdHIgLy8gc2VtYXBo
b3JlIGZvciBwYXJraW5nIG9uIGxvY2tzCisrfQorKworKy8vZXh0ZXJuIG1hbGxvYworK2Z1bmMg
bGliY19tYWxsb2ModWludHB0cikgdW5zYWZlLlBvaW50ZXIKKysKKysvL2dvOm5vZXNjYXBlCisr
Ly9leHRlcm4gc2VtX2luaXQKKytmdW5jIHNlbV9pbml0KHNlbSAqc2VtdCwgcHNoYXJlZCBpbnQz
MiwgdmFsdWUgdWludDMyKSBpbnQzMgorKworKy8vZ286bm9lc2NhcGUKKysvL2V4dGVybiBzZW1f
d2FpdAorK2Z1bmMgc2VtX3dhaXQoc2VtICpzZW10KSBpbnQzMgorKworKy8vZ286bm9lc2NhcGUK
KysvL2V4dGVybiBzZW1fcG9zdAorK2Z1bmMgc2VtX3Bvc3Qoc2VtICpzZW10KSBpbnQzMgorKwor
Ky8vZ286bm9lc2NhcGUKKysvL2V4dGVybiBzZW1fdGltZWR3YWl0CisrZnVuYyBzZW1fdGltZWR3
YWl0KHNlbSAqc2VtdCwgdGltZW91dCAqdGltZXNwZWMpIGludDMyCisrCisrLy9nbzpub3NwbGl0
CisrZnVuYyBzZW1hY3JlYXRlKG1wICptKSB7CisrCWlmIG1wLm1vcy53YWl0c2VtYSAhPSAwIHsK
KysJCXJldHVybgorKwl9CisrCisrCXZhciBzZW0gKnNlbXQKKysKKysJLy8gQ2FsbCBsaWJjJ3Mg
bWFsbG9jIHJhdGhlciB0aGFuIG1hbGxvYy4gVGhpcyB3aWxsCisrCS8vIGFsbG9jYXRlIHNwYWNl
IG9uIHRoZSBDIGhlYXAuIFdlIGNhbid0IGNhbGwgbWFsbG9jCisrCS8vIGhlcmUgYmVjYXVzZSBp
dCBjb3VsZCBjYXVzZSBhIGRlYWRsb2NrLgorKwlzZW0gPSAoKnNlbXQpKGxpYmNfbWFsbG9jKHVu
c2FmZS5TaXplb2YoKnNlbSkpKQorKwlpZiBzZW1faW5pdChzZW0sIDAsIDApICE9IDAgeworKwkJ
dGhyb3coInNlbV9pbml0IikKKysJfQorKwltcC5tb3Mud2FpdHNlbWEgPSB1aW50cHRyKHVuc2Fm
ZS5Qb2ludGVyKHNlbSkpCisrfQorKworKy8vZ286bm9zcGxpdAorK2Z1bmMgc2VtYXNsZWVwKG5z
IGludDY0KSBpbnQzMiB7CisrCV9tXyA6PSBnZXRnKCkubQorKwlpZiBucyA+PSAwIHsKKysJCXZh
ciB0cyB0aW1lc3BlYworKwkJLy90cy5zZXRfc2VjKG5zIC8gMTAwMDAwMDAwMCkKKysJCS8vdHMu
c2V0X25zZWMoaW50MzIobnMgJSAxMDAwMDAwMDAwKSkKKysJCW5zICs9IG5hbm90aW1lKCkKKysJ
CWlmIHN5cy5QdHJTaXplID09IDggeworKwkJCXRzLnNldF9zZWMobnMgLyAxMDAwMDAwMDAwKQor
KwkJCXRzLnNldF9uc2VjKGludDMyKG5zICUgMTAwMDAwMDAwMCkpCisrCQl9IGVsc2UgeworKwkJ
CXRzLnR2X25zZWMgPSAwCisrCQkJdHMuc2V0X3NlYyhpbnQ2NCh0aW1lZGl2KG5zLCAxMDAwMDAw
MDAwLCAoKmludDMyKSh1bnNhZmUuUG9pbnRlcigmdHMudHZfbnNlYykpKSkpCisrCQl9CisrCQkv
L3ZhciBuc2VjIGludDMyCisrCQkvL3RzLnNldF9zZWMoaW50NjQodGltZWRpdihucywgMTAwMDAw
MDAwMCwgJm5zZWMpKSkKKysJCS8vdHMuc2V0X25zZWMobnNlYykKKysKKysJCWlmIHNlbV90aW1l
ZHdhaXQoKCpzZW10KSh1bnNhZmUuUG9pbnRlcihfbV8ubW9zLndhaXRzZW1hKSksICZ0cykgIT0g
MCB7CisrCQkJZXJyIDo9IGVycm5vKCkKKysJCQlpZiBlcnIgPT0gX0VUSU1FRE9VVCB8fCBlcnIg
PT0gX0VBR0FJTiB8fCBlcnIgPT0gX0VJTlRSIHsKKysJCQkJcmV0dXJuIC0xCisrCQkJfQorKwkJ
CXRocm93KCJzZW1fdGltZWR3YWl0IikKKysJCX0KKysJCXJldHVybiAwCisrCX0KKysJZm9yIHsK
KysJCXIxIDo9IHNlbV93YWl0KCgqc2VtdCkodW5zYWZlLlBvaW50ZXIoX21fLm1vcy53YWl0c2Vt
YSkpKQorKwkJaWYgcjEgPT0gMCB7CisrCQkJYnJlYWsKKysJCX0KKysJCWlmIGVycm5vKCkgPT0g
X0VJTlRSIHsKKysJCQljb250aW51ZQorKwkJfQorKwkJdGhyb3coInNlbV93YWl0IikKKysJfQor
KwlyZXR1cm4gMAorK30KKysKKysvL2dvOm5vc3BsaXQKKytmdW5jIHNlbWF3YWtldXAobXAgKm0p
IHsKKysJaWYgc2VtX3Bvc3QoKCpzZW10KSh1bnNhZmUuUG9pbnRlcihtcC5tb3Mud2FpdHNlbWEp
KSkgIT0gMCB7CisrCQl0aHJvdygic2VtX3Bvc3QiKQorKwl9CisrfQorLS0KKzIuMTcuMQorCi0t
IAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 13:39:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 13:39:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCOZJ-0001kH-Sd; Mon, 23 Sep 2019 13:39:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=PuQm=XS=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iCOZI-0001jj-Ik
 for minios-devel@lists.xen.org; Mon, 23 Sep 2019 13:39:56 +0000
X-Inumbo-ID: 9c5fcf04-de07-11e9-95fd-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-amaz-eas2.inumbo.com (Halon) with ESMTPS
 id 9c5fcf04-de07-11e9-95fd-12813bfff9fa;
 Mon, 23 Sep 2019 13:39:48 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D6A96F2014;
 Mon, 23 Sep 2019 15:39:47 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id xgIz2UF8HkJO; Mon, 23 Sep 2019 15:39:47 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id AFB7AF2012
 for <minios-devel@lists.xen.org>; Mon, 23 Sep 2019 15:39:45 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 15:39:37 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 23 Sep 2019 15:39:27 +0200
Message-ID: <20190923133927.28029-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
References: <20190923133927.28029-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH 14/14] libgo: Add glue code and
 stubs
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIE1ha2VmaWxlLnVrICB8ICAgMiArCiBsaWJnby9nbHVlLmMgfCAxOTkgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVz
IGNoYW5nZWQsIDIwMSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZ28vZ2x1
ZS5jCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awppbmRleCA5YmNhOGZh
Li5hMTMzZGFlIDEwMDY0NAotLS0gYS9NYWtlZmlsZS51aworKysgYi9NYWtlZmlsZS51awpAQCAt
MTM3LDYgKzEzNyw4IEBAIExJQkdPX0NGTEFHUy15ICs9IC1ESEFWRV9DT05GSUdfSCAtRF9JTkNM
VURFX01BTExPQ19IXyBcCiAJLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJ
TEVfT0ZGU0VUX0JJVFM9NjQgCiBMSUJHT19DRkxBR1MteSArPSAtV25vLWNhc3QtcXVhbCAtV25v
LXVudXNlZC12YWx1ZQogCitMSUJHT19TUkNTLXkgKz0gJChMSUJHQ0NfQkFTRSkvbGliZ28vZ2x1
ZS5jCisKIExJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYnl0ZXMvaW5kZXhi
eXRlLmN8Ynl0ZXMKIExJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbG9nL3N5
c2xvZy9zeXNsb2dfYy5jCiBMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL2dvL3Jl
ZmxlY3QvbWFrZWZ1bmNfZmZpX2MuYwpkaWZmIC0tZ2l0IGEvbGliZ28vZ2x1ZS5jIGIvbGliZ28v
Z2x1ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NDNiNjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9saWJnby9nbHVlLmMKQEAgLTAsMCArMSwxOTkgQEAKKy8qIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKgorICogQXV0aG9yczogQ2hh
cmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1PgorICoKKyAqCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFD
VEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworLyoKKyAqIHN0dWJzCisgKi8KKwor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvbW1h
bi5oPgorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2lu
Y2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KKyNpbmNsdWRlIDxwdGVfdHlwZXMuaD4KKworaW50IGVw
b2xsX2NyZWF0ZShpbnQgc2l6ZSBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IGVw
b2xsX2N0bChpbnQgZXBmZCBfX3VudXNlZCwgaW50IG9wIF9fdW51c2VkLCBpbnQgZmQgX191bnVz
ZWQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnQgX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9
CisKK2ludCBlcG9sbF93YWl0KGludCBlcGZkIF9fdW51c2VkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQg
KmV2ZW50cyBfX3VudXNlZCwgaW50IG1heGV2ZW50cyBfX3VudXNlZCwgaW50IHRpbWVvdXQgX191
bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBtYWR2aXNlKHZvaWQgKmFkZHIgX191bnVz
ZWQsIHNpemVfdCBsZW5ndGggX191bnVzZWQsIGludCBhZHZpY2UgX191bnVzZWQpCit7CisJcmV0
dXJuIDA7Cit9CisKK2ludCBtaW5jb3JlKHZvaWQgKmFkZHIgX191bnVzZWQsIHNpemVfdCBsZW5n
dGggX191bnVzZWQsIHVuc2lnbmVkIGNoYXIgKnZlYyBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsK
K30KKworaW50IHByY3RsKGludCBvcHRpb24gX191bnVzZWQsIHVuc2lnbmVkIGxvbmcgYXJnMiBf
X3VudXNlZCwgdW5zaWduZWQgbG9uZyBhcmczIF9fdW51c2VkLCB1bnNpZ25lZCBsb25nIGFyZzQg
X191bnVzZWQsIHVuc2lnbmVkIGxvbmcgYXJnNSBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30K
KworaW50IHB0aHJlYWRfc2lnbWFzayhpbnQgaG93IF9fdW51c2VkLCBjb25zdCBzaWdzZXRfdCAq
c2V0IF9fdW51c2VkLCBzaWdzZXRfdCAqb2xkc2V0IF9fdW51c2VkKQoreworCXJldHVybiAwOwor
fQorCitsb25nIHB0cmFjZSh2b2lkKQoreworCXJldHVybiAwOworfQorCitpbnQgcmVib290KGlu
dCBtYWdpYyBfX3VudXNlZCwgaW50IG1hZ2ljMiBfX3VudXNlZCwgaW50IGNtZCBfX3VudXNlZCwg
dm9pZCAqYXJnIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCitpbnQgc2NoZWRfZ2V0YWZm
aW5pdHkodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHNldGl0aW1lcihpbnQgd2hpY2gg
X191bnVzZWQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKm5ld192YWx1ZSBfX3VudXNlZCwgc3Ry
dWN0IGl0aW1lcnZhbCAqb2xkX3ZhbHVlIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCitp
bnQgc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0diBfX3VudXNlZCwgY29uc3Qg
c3RydWN0IHRpbWV6b25lICp0eiBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI3VuZGVm
IHNpZ2FkZHNldAoraW50IHNpZ2FkZHNldChzaWdzZXRfdCAqc2V0IF9fdW51c2VkLCBpbnQgc2ln
bnVtIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCitpbnQgc2lnYWx0c3RhY2soY29uc3Qg
c3RhY2tfdCAqc3MgX191bnVzZWQsIHN0YWNrX3QgKm9sZF9zcyBfX3VudXNlZCkKK3sKKwlyZXR1
cm4gMDsKK30KKworI3VuZGVmIHNpZ2RlbHNldAoraW50IHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0
IF9fdW51c2VkLCBpbnQgc2lnbnVtIF9fdW51c2VkKQoreworCXJldHVybiAwOworfQorCisjdW5k
ZWYgc2lnZW1wdHlzZXQKK2ludCBzaWdlbXB0eXNldChzaWdzZXRfdCAqc2V0IF9fdW51c2VkKQor
eworCXJldHVybiAwOworfQorCisjdW5kZWYgc2lnZmlsbHNldAoraW50IHNpZ2ZpbGxzZXQoc2ln
c2V0X3QgKnNldCBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworbG9uZyBzeXNjYWxsKGxv
bmcgbnVtYmVyIF9fdW51c2VkLCAuLi4pCit7CisJcmV0dXJuIDA7Cit9CisKK3NzaXplX3Qgc2Vu
ZGZpbGU2NChpbnQgb3V0X2ZkIF9fdW51c2VkLCBpbnQgaW5fZmQgX191bnVzZWQsIG9mZl90ICpv
ZmZzZXQgIF9fdW51c2VkLCBzaXplX3QgIGNvdW50IF9fdW51c2VkKQoreworCXJldHVybiAxOwor
fQorCitpbnQgZ2V0Z3JvdXBsaXN0KGNvbnN0IGNoYXIgKnVzZXIgX191bnVzZWQsIGdpZF90IGdy
b3VwIF9fdW51c2VkLCBnaWRfdCAqZ3JvdXBzIF9fdW51c2VkLCBpbnQgKm5ncm91cHMgX191bnVz
ZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBnZXRncm5hbV9yKGNvbnN0IGNoYXIgKm5hbWUg
X191bnVzZWQsIHN0cnVjdCBncm91cCAqZ3JwIF9fdW51c2VkLAorCQljaGFyICpidWYgX191bnVz
ZWQsIHNpemVfdCBidWZsZW4gX191bnVzZWQsIHN0cnVjdCBncm91cCAqKnJlc3VsdCBfX3VudXNl
ZCkKK3sKKwlyZXR1cm4gMDsKK30KK2ludCBnZXRncmdpZF9yKGdpZF90IGdpZCBfX3VudXNlZCwg
c3RydWN0IGdyb3VwICpncnAgX191bnVzZWQsCisJCWNoYXIgKmJ1ZiBfX3VudXNlZCwgc2l6ZV90
IGJ1ZmxlbiBfX3VudXNlZCwgc3RydWN0IGdyb3VwICoqcmVzdWx0IF9fdW51c2VkKQoreworCXJl
dHVybiAwOworfQorCit2b2lkIHVrX3N5c2NhbGxfZm5fX19OUl9jbG9uZSh2b2lkKQoreworfQor
CisvKgorICogR2x1ZSBjb2RlCisgKi8KKworI2luY2x1ZGUgPHVjb250ZXh0Lmg+CisjaW5jbHVk
ZSA8dWsvc2NoZWQuaD4KKyNpbmNsdWRlIDx1ay90aHJlYWQuaD4KKyNpbmNsdWRlIDx1ay9hc20v
bGltaXRzLmg+CisKKyNkZWZpbmUgX19lcnJub19sb2NhdGlvbiBfX2Vycm5vCisKK3ZvaWQgbWFr
ZWNvbnRleHQxICh1Y29udGV4dF90ICpfX3VjcCwgdm9pZCAoKl9fZnVuYykgKHZvaWQpLCBpbnQg
X19hcmdjLCAuLi4pCit7CisJc3RydWN0IHVrX3RocmVhZCAqY3VycmVudCA9IHVrX3RocmVhZF9j
dXJyZW50KCk7CisJKigodW5zaWduZWQgbG9uZyAqKSBfX3VjcC0+dWNfc3RhY2suc3Nfc3ApID0g
KHVuc2lnbmVkIGxvbmcpIGN1cnJlbnQ7CisJbWFrZWNvbnRleHQoX191Y3AsIF9fZnVuYywgX19h
cmdjKTsKK30KKwordm9pZCAqYWxsb2Nfc3RhY2soKQoreworCXN0cnVjdCB1a19zY2hlZCAqc2No
ZWQgPSB1a19zY2hlZF9nZXRfZGVmYXVsdCgpOworCXZvaWQgKnN0YWNrID0gdWtfcGFsbG9jKHNj
aGVkLT5hbGxvY2F0b3IsIF9fU1RBQ0tfU0laRV9QQUdFX09SREVSKTsKKwlpZiAoc3RhY2sgPT0g
TlVMTCkKKwkJcHJpbnRmKCJlcnJvciBhbGxvY2F0aW5nIHN0YWNrXG4iKTsKKwlyZXR1cm4gc3Rh
Y2s7Cit9CisKK3NpemVfdCBnZXRfc3RhY2tfc2l6ZSh2b2lkKQoreworCXJldHVybiBfX1NUQUNL
X1NJWkU7Cit9CisKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 14:12:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 14:12:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCP4P-0005UN-D3; Mon, 23 Sep 2019 14:12:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ZR6B=XS=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCP4O-0005UI-C0
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 14:12:04 +0000
X-Inumbo-ID: 1cb10a48-de0c-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 1cb10a48-de0c-11e9-b299-bc764e2007e4;
 Mon, 23 Sep 2019 14:12:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 19E28F2013;
 Mon, 23 Sep 2019 16:12:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id lU7_SeWhTzFB; Mon, 23 Sep 2019 16:12:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DCA27F2012
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 16:11:58 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 16:11:58 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
 <20190917093833.29868-3-felipe.huici@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <7682dcca-3f41-9b19-cf53-c300f3d5d03b@neclab.eu>
Date: Mon, 23 Sep 2019 16:11:58 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190917093833.29868-3-felipe.huici@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gRmVsaXBlLAoKVGhpcyBwYXRjaCBzZWVtcyBmaW5lIGV4cGVjdCBmb3IgYSBtaW5vciBz
dWdnZXN0aW9uLgoKT24gdGhlIHNpZGUgbm90ZSwgc2luY2Ugd2UgYXJlIGltcG9ydGluZyB0aGUg
YXh0bHMgbGlicmFyeSBpbiB0aGlzIHBhdGNoIAp3ZSBkb250IGV4cGVjdCB0aGlzIHBhdGNoIHRv
IGNvbXBpbGUgd2l0aG91dCB0aGUgImNvbmZpZy5oIiB3aGljaCBpcyAKaW50cm9kdWNlZCBpbiB0
aGUgbmV4dCBwYXRjaC4KClRoYW5rcyAmIFJlZ2FyZHMKClNoYXJhbgoKUmV2aWV3ZWQtYnk6IFNo
YXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKT24gOS8xNy8xOSAx
MTozOCBBTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IFRoaXMgaXMgYSBwb3J0IG9mIGF4dGxzIHRv
IFVuaWtyYWZ0IGFzIGFuIGV4dGVybmFsIGxpYnJhcnkuIEl0IHJlcXVpcmVzCj4gbGliYyBhbmQg
bHdpcCB0byB3b3JrLgo+Cj4gVG8gcnVuIHNzbHRlc3QuYyBhcyBhIHVuaXQgdGVzdCwgeW91J2xs
IG5lZWQgcHRocmVhZCBzdXBwb3J0LCBlLmcuLAo+IGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8g
dGhlIExJQlMgdmFyaWFibGUgaW4gdGhlIE1ha2VmaWxlOgo+Cj4gICAgIC4uLiQoVUtfTElCUykv
bHdpcDokKFVLX0xJQlMpL3B0aHJlYWQtZW1iZWRkZWQ6Cj4gICAgICAgICAgICQoVUtfTElCUykv
bmV3bGliOiQoVUtfTElCUykvYXh0bHMuLi4KPgo+IE5vdGUgdGhhdCB5b3UnbGwgbmVlZCBhIGZp
bGVzeXN0ZW0gaW4gcGxhY2UgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBmaWxlcyBmb3IKPiBhbGwgdGVz
dHMgdG8gcGFzcy4KPgo+IFNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4KPiAtLS0KPiAgIE1ha2VmaWxlLnVrIHwgMTA1ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMSBmaWxlIGNo
YW5nZWQsIDEwNSBpbnNlcnRpb25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUu
dWsKPgo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCj4gbmV3IGZpbGUg
bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi4wOGY4Y2FlCj4gLS0tIC9kZXYvbnVsbAo+ICsr
KyBiL01ha2VmaWxlLnVrCj4gQEAgLTAsMCArMSwxMDUgQEAKPiArIyAgbGliYXh0bHMgTWFrZWZp
bGUudWsKPiArIwo+ICsjICBBdXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNs
YWIuZXU+Cj4gKyMKPiArIyAgQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5F
QyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArIwo+ICsjICBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
PiArIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCj4gKyMgIGFyZSBtZXQ6Cj4gKyMKPiArIyAgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgo+ICsjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCj4gKyMgICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCj4gKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xk
ZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPiArIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KPiArIyAgICAgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KPiAr
Iwo+ICsjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKPiArIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsjICBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQo+ICsjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyMgIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
PiArIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKPiArIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyMgIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCj4gKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCj4gKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyMgIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+ICsjCj4gKyMgIFRISVMgSEVBREVSIE1BWSBOT1Qg
QkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCj4gKyMKPiArCj4gKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCj4gKyMgTGlicmFyeSByZWdpc3RyYXRpb24KPiArIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKPiArJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJheHRscywkKENPTkZJR19M
SUJBWFRMUykpKQo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArIyBTb3VyY2VzCj4g
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQkFYVExTX1ZFUlNJT049Mi4xLjUKPiArTElC
QVhUTFNfVVJMPWh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2F4dGxzL2ZpbGVzLzIu
MS41L2F4VExTLSQoTElCQVhUTFNfVkVSU0lPTikudGFyLmd6L2Rvd25sb2FkCnMvMi4xLjUvJChM
SUJBWFRMU19WRVJTSU9OKQo+ICtMSUJBWFRMU19QQVRDSERJUj0kKExJQkFYVExTX0JBU0UpL3Bh
dGNoZXMKPiArJChldmFsICQoY2FsbCBmZXRjaGFzLGxpYmF4dGxzLCQoTElCQVhUTFNfVVJMKSwk
KExJQkFYVExTX1ZFUlNJT04pLnRneikpCj4gKyQoZXZhbCAkKGNhbGwgcGF0Y2gsbGliYXh0bHMs
JChMSUJBWFRMU19QQVRDSERJUiksbGliYXh0bHMtJChMSUJBWFRMU19WRVJTSU9OKSkpCj4gKwo+
ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIEhlbHBlcnMKPiArIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKPiArTElCQVhUTFNfU1JDPSQoTElCQVhUTFNfT1JJR0lOKS9heHRscy1jb2RlCj4g
Kwo+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwo+ICsjIExpYnJhcnkgaW5jbHVkZXMKPiArIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKPiArQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkFYVExTKSArPSAg
IC1JJChMSUJBWFRMU19TUkMpL2luY2x1ZGUgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLUkkKExJQkFYVExTX1NSQykvY3J5cHRvICBcCj4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtSSQoTElCQVhUTFNfU1JDKS9zc2wgICAgIFwKPiArICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC1JJChMSUJBWFRMU19CQVNFKS9pbmNsdWRlCj4gKwo+
ICtDWFhJTkNMVURFUy0kKENPTkZJR19MSUJBWFRMUykgKz0gLUkkKExJQkFYVExTX1NSQykvaW5j
bHVkZSBcCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtSSQoTElCQVhUTFNf
U1JDKS9jcnlwdG8gIFwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1JJChM
SUJBWFRMU19TUkMpL3NzbCAgICAgXAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLUkkKExJQkFYVExTX0JBU0UpL2luY2x1ZGUKPiArCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCj4gKyMgR2xvYmFsIGZsYWdzCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQkFY
VExTX0NGTEFHUy15ICs9IC1ESEFWRV9DT05GSUdfSAo+ICsKPiArIyBTdXBwcmVzcyBzb21lIHdh
cm5pbmdzIHRvIG1ha2UgdGhlIGJ1aWxkIHByb2Nlc3MgbG9vayBuZWF0ZXIKPiArU1VQUFJFU1Nf
RkxBR1MgKz0gLVduby1zaWduLWNvbXBhcmUgLVduby1wYXJlbnRoZXNlcyAtV25vLXVudXNlZC1w
YXJhbWV0ZXIKPiArCj4gK0xJQkFYVExTX0NGTEFHUy15ICAgKz0gJChTVVBQUkVTU19GTEFHUykK
PiArTElCQVhUTFNfQ1hYRkxBR1MteSArPSAkKFNVUFBSRVNTX0ZMQUdTKQo+ICsKPiArIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKPiArIyBheHRscyBjb2RlIC0gY3J5cHRvCj4gKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRv
L2Flcy5jCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2JpZ2lu
dC5jCj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2NyeXB0b19t
aXNjLmMKPiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9jcnlwdG8vaG1hYy5j
Cj4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL21kNS5jCj4gK0xJ
QkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3JjNC5jCj4gK0xJQkFYVExT
X1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3JzYS5jCj4gK0xJQkFYVExTX1NSQ1Mt
eSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3NoYTEuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0g
JChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGEyNTYuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChM
SUJBWFRMU19TUkMpL2NyeXB0by9zaGEzODQuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJB
WFRMU19TUkMpL2NyeXB0by9zaGE1MTIuYwo+ICsKPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK
PiArIyBheHRscyBjb2RlIC0gc3NsCj4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCj4gK0xJQkFY
VExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL2FzbjEuYwo+ICsjTElCQVhUTFNfU1JD
Uy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvZ2VuX2NlcnQuYwo+ICtMSUJBWFRMU19TUkNTLXkg
Kz0gJChMSUJBWFRMU19TUkMpL3NzbC9sb2FkZXIuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChM
SUJBWFRMU19TUkMpL3NzbC9vcGVuc3NsLmMKPiArI0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFY
VExTX1NSQykvc3NsL29zX3BvcnQuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19T
UkMpL3NzbC9wMTIuYwo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC90
bHMxLmMKPiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvdGxzMV9zdnIu
Ywo+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC90bHMxX2NsbnQuYwo+
ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC94NTA5LmMKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 23 14:16:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 23 Sep 2019 14:16:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCP8C-0005YD-PT; Mon, 23 Sep 2019 14:16:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=v1wY=XS=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCP8C-0005Y8-6h
 for minios-devel@lists.xenproject.org; Mon, 23 Sep 2019 14:16:00 +0000
X-Inumbo-ID: a9c75608-de0c-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a9c75608-de0c-11e9-b299-bc764e2007e4;
 Mon, 23 Sep 2019 14:15:58 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id E189F1056E8;
 Mon, 23 Sep 2019 16:15:57 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id NcbOd458V-6e; Mon, 23 Sep 2019 16:15:57 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id B5C671055DA
 for <minios-devel@lists.xenproject.org>; Mon, 23 Sep 2019 16:15:57 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 23 Sep
 2019 16:15:57 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Mon, 23 Sep 2019 16:15:57
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v2 1/4] lib/ukboot: Application
 constructors right before calling application
Thread-Index: AQHVcgfq49Rn4W8JEEi+koAoFXbM6ac5TsWA
Date: Mon, 23 Sep 2019 14:15:57 +0000
Message-ID: <28A12137-CF92-4CCB-AEA9-C1DB001D1398@neclab.eu>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
 <20190923120952.25938-2-sharan.santhanam@neclab.eu>
In-Reply-To: <20190923120952.25938-2-sharan.santhanam@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <47C64CD5CB5FF34691D70118749610B2@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 1/4] lib/ukboot: Application
 constructors right before calling application
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2ltb24sDQoNClRoaXMgcGF0Y2ggbG9va3MgZ29vZCwgdGhhbmtzLg0KDQpSZXZpZXdlZC1i
eTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0KDQrvu79PbiAyMy4wOS4x
OSwgMTQ6MTAsICJNaW5pb3MtZGV2ZWwgb24gYmVoYWxmIG9mIFNoYXJhbiBTYW50aGFuYW0iIDxt
aW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBvbiBiZWhhbGYgb2YgU2hh
cmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+IHdyb3RlOg0KDQogICAgRnJvbTogU2ltb24gS3Vlbnpl
ciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQogICAgDQogICAgcHJlaW5pdCBhbmQgaW5pdCB0
YWJsZXMgYXJlIHBhcnQgb2YgcG9ydGVkIGxpYnJhcmllcyBhbmQgYXBwbGljYXRpb25zLg0KICAg
IFNpbmNlIHRoZXkgYXJlIG9yaWdpbmFsbHkgcnVuIGluIHVzZXIgc3BhY2Ugb24gTGludXggb3Ig
QlNELCB0aGV5DQogICAgZXhwZWN0IGZ1bGx5IGluaXRpYWxpemVkIGtlcm5lbCBsYXllcnMuIFRo
ZSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMNCiAgICBsaXN0ZWQgaW4gdGhvc2UgdGFibGVzIGNvdWxk
IGNyZWF0ZSB0aHJlYWRzLCBhbGxvY2F0ZSBtZW1vcnksIG9yDQogICAgaW50ZXJhY3Qgd2l0aCB0
aGUgVkZTLCBldGMuDQogICAgVGhpcyBwYXRjaCBtb3ZlcyBjYWxsaW5nIHRob3NlIGNvbnN0cnVj
dG9ycyBhdCB0aGUgbGF0ZXN0IHBvc3NpYmxlIHBvaW50Lg0KICAgIA0KICAgIFNpZ25lZC1vZmYt
Ynk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAg
ICBsaWIvdWtib290L2Jvb3QuYyB8IDUyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICAgMSBmaWxlIGNoYW5nZWQsIDMwIGluc2VydGlvbnMo
KyksIDIyIGRlbGV0aW9ucygtKQ0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9saWIvdWtib290L2Jv
b3QuYyBiL2xpYi91a2Jvb3QvYm9vdC5jDQogICAgaW5kZXggM2I4ZDY0MS4uN2ZiMDkwOCAxMDA2
NDQNCiAgICAtLS0gYS9saWIvdWtib290L2Jvb3QuYw0KICAgICsrKyBiL2xpYi91a2Jvb3QvYm9v
dC5jDQogICAgQEAgLTgyLDI4ICs4Miw2IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhyZWFkX2Z1bmMo
dm9pZCAqYXJnKQ0KICAgICAJaW50IHJldDsNCiAgICAgCXN0cnVjdCB0aHJlYWRfbWFpbl9hcmcg
KnRtYSA9IGFyZzsNCiAgICAgDQogICAgLQl1a19wcl9pbmZvKCJQcmUtaW5pdCB0YWJsZSBhdCAl
cCAtICVwXG4iLA0KICAgIC0JCSAgIF9fcHJlaW5pdF9hcnJheV9zdGFydCwgJl9fcHJlaW5pdF9h
cnJheV9lbmQpOw0KICAgIC0JdWtfY3Rvcl9mb3JlYWNoKF9fcHJlaW5pdF9hcnJheV9zdGFydCwg
X19wcmVpbml0X2FycmF5X2VuZCwgaSkgew0KICAgIC0JCWlmIChfX3ByZWluaXRfYXJyYXlfc3Rh
cnRbaV0pIHsNCiAgICAtCQkJdWtfcHJfZGVidWcoIkNhbGwgcHJlLWluaXQgY29uc3RydWN0b3Ig
KGVudHJ5ICVkICglcCk6ICVwKCkpLi4uXG4iLA0KICAgIC0JCQkJICAgIGksICZfX3ByZWluaXRf
YXJyYXlfc3RhcnRbaV0sDQogICAgLQkJCQkgICAgX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKTsN
CiAgICAtCQkJX19wcmVpbml0X2FycmF5X3N0YXJ0W2ldKCk7DQogICAgLQkJfQ0KICAgIC0JfQ0K
ICAgIC0NCiAgICAtCXVrX3ByX2luZm8oIkNvbnN0cnVjdG9yIHRhYmxlIGF0ICVwIC0gJXBcbiIs
DQogICAgLQkJCV9faW5pdF9hcnJheV9zdGFydCwgJl9faW5pdF9hcnJheV9lbmQpOw0KICAgIC0J
dWtfY3Rvcl9mb3JlYWNoKF9faW5pdF9hcnJheV9zdGFydCwgX19pbml0X2FycmF5X2VuZCwgaSkg
ew0KICAgIC0JCWlmIChfX2luaXRfYXJyYXlfc3RhcnRbaV0pIHsNCiAgICAtCQkJdWtfcHJfZGVi
dWcoIkNhbGwgY29uc3RydWN0b3IgKGVudHJ5ICVkICglcCk6ICVwKCkpLi4uXG4iLA0KICAgIC0J
CQkJCWksICZfX2luaXRfYXJyYXlfc3RhcnRbaV0sDQogICAgLQkJCQkJX19pbml0X2FycmF5X3N0
YXJ0W2ldKTsNCiAgICAtCQkJX19pbml0X2FycmF5X3N0YXJ0W2ldKCk7DQogICAgLQkJfQ0KICAg
IC0JfQ0KICAgIC0NCiAgICAgI2lmZGVmIENPTkZJR19MSUJVS0JVUw0KICAgICAJdWtfcHJfaW5m
bygiSW5pdGlhbGl6ZSBidXMgaGFuZGxlcnMuLi5cbiIpOw0KICAgICAJdWtfYnVzX2luaXRfYWxs
KHVrX2FsbG9jX2dldF9kZWZhdWx0KCkpOw0KICAgIEBAIC0xMjksNiArMTA3LDM2IEBAIHN0YXRp
YyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJnKQ0KICAgICAJcHJpbnRmKCIlMzVzXG4i
LA0KICAgICAJICAgICAgIFNUUklOR0lGWShVS19DT0RFTkFNRSkgIiAiIFNUUklOR0lGWShVS19G
VUxMVkVSU0lPTikpOw0KICAgICAjZW5kaWYNCiAgICArCS8qDQogICAgKwkgKiBBcHBsaWNhdGlv
bg0KICAgICsJICoNCiAgICArCSAqIFdlIGFyZSBjYWxsaW5nIHRoZSBhcHBsaWNhdGlvbiBjb25z
dHJ1Y3RvcnMgcmlnaHQgYmVmb3JlIGNhbGxpbmcNCiAgICArCSAqIHRoZSBhcHBsaWNhdGlvbidz
IG1haW4oKS4gQWxsIG9mIG91ciBVbmlrcmFmdCBzeXN0ZW1zLCBWRlMsDQogICAgKwkgKiBuZXR3
b3JraW5nIHN0YWNrIGlzIGluaXRpYWxpemVkIGF0IHRoaXMgcG9pbnQuIFRoaXMgd2F5IHdlIGNs
b3NlbHkNCiAgICArCSAqIG1pbWljIHdoYXQgYSByZWd1bGFyIHVzZXIgYXBwbGljYXRpb24gKGUu
Zy4sIEJTRCwgTGludXgpIHdvdWxkIGV4cGVjdA0KICAgICsJICogZnJvbSBpdHMgT1MgYmVpbmcg
aW5pdGlhbGl6ZWQuDQogICAgKwkgKi8NCiAgICArCXVrX3ByX2luZm8oIlByZS1pbml0IHRhYmxl
IGF0ICVwIC0gJXBcbiIsDQogICAgKwkJICAgX19wcmVpbml0X2FycmF5X3N0YXJ0LCAmX19wcmVp
bml0X2FycmF5X2VuZCk7DQogICAgKwl1a19jdG9yX2ZvcmVhY2goX19wcmVpbml0X2FycmF5X3N0
YXJ0LCBfX3ByZWluaXRfYXJyYXlfZW5kLCBpKSB7DQogICAgKwkJaWYgKF9fcHJlaW5pdF9hcnJh
eV9zdGFydFtpXSkgew0KICAgICsJCQl1a19wcl9kZWJ1ZygiQ2FsbCBwcmUtaW5pdCBjb25zdHJ1
Y3RvciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5cbiIsDQogICAgKwkJCQkgICAgaSwgJl9fcHJl
aW5pdF9hcnJheV9zdGFydFtpXSwNCiAgICArCQkJCSAgICBfX3ByZWluaXRfYXJyYXlfc3RhcnRb
aV0pOw0KICAgICsJCQlfX3ByZWluaXRfYXJyYXlfc3RhcnRbaV0oKTsNCiAgICArCQl9DQogICAg
Kwl9DQogICAgKw0KICAgICsJdWtfcHJfaW5mbygiQ29uc3RydWN0b3IgdGFibGUgYXQgJXAgLSAl
cFxuIiwNCiAgICArCQkJX19pbml0X2FycmF5X3N0YXJ0LCAmX19pbml0X2FycmF5X2VuZCk7DQog
ICAgKwl1a19jdG9yX2ZvcmVhY2goX19pbml0X2FycmF5X3N0YXJ0LCBfX2luaXRfYXJyYXlfZW5k
LCBpKSB7DQogICAgKwkJaWYgKF9faW5pdF9hcnJheV9zdGFydFtpXSkgew0KICAgICsJCQl1a19w
cl9kZWJ1ZygiQ2FsbCBjb25zdHJ1Y3RvciAoZW50cnkgJWQgKCVwKTogJXAoKSkuLi5cbiIsDQog
ICAgKwkJCQkJaSwgJl9faW5pdF9hcnJheV9zdGFydFtpXSwNCiAgICArCQkJCQlfX2luaXRfYXJy
YXlfc3RhcnRbaV0pOw0KICAgICsJCQlfX2luaXRfYXJyYXlfc3RhcnRbaV0oKTsNCiAgICArCQl9
DQogICAgKwl9DQogICAgIA0KICAgICAJdWtfcHJfaW5mbygiQ2FsbGluZyBtYWluKCVkLCBbIiwg
dG1hLT5hcmdjKTsNCiAgICAgCWZvciAoaSA9IDA7IGkgPCB0bWEtPmFyZ2M7ICsraSkgew0KICAg
IC0tIA0KICAgIDIuNy40DQogICAgDQogICAgDQogICAgX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0DQog
ICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAgaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA0KDQpfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhl
bnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 07:22:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 07:22:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCf9J-0001NY-UJ; Tue, 24 Sep 2019 07:22:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4Xx+=XT=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCf9J-0001NT-6c
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 07:22:13 +0000
X-Inumbo-ID: 04c203c0-de9c-11e9-960c-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 04c203c0-de9c-11e9-960c-12813bfff9fa;
 Tue, 24 Sep 2019 07:22:09 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 3D7E5F2018;
 Tue, 24 Sep 2019 09:22:08 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id n-c1wDLyUAM9; Tue, 24 Sep 2019 09:22:08 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 47FA9F201A
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 09:22:05 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 09:22:04 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Tue, 24 Sep 2019 09:22:04
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Sharan Santhanam <Sharan.Santhanam@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 2/3] Add Makefile.uk
Thread-Index: AQHVbTuvNEywjPLyKEOen/Ypq82NSKc5NboAgAFBVQA=
Date: Tue, 24 Sep 2019 07:22:04 +0000
Message-ID: <34871AEF-BC55-4D8C-8176-5C01192D6E40@neclab.eu>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
 <20190917093833.29868-3-felipe.huici@neclab.eu>
 <7682dcca-3f41-9b19-cf53-c300f3d5d03b@neclab.eu>
In-Reply-To: <7682dcca-3f41-9b19-cf53-c300f3d5d03b@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <67167A7F4423334A87A50CF1DC0E8331@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuLCB0aGFua3MsIEknbGwgZml4IHRoZSBtaW5vciBzdWdnZXN0aW9uIGluIHYzLg0K
DQotLSBGZWxpcGUNCg0K77u/T24gMjMuMDkuMTksIDE2OjEyLCAiTWluaW9zLWRldmVsIG9uIGJl
aGFsZiBvZiBTaGFyYW4gU2FudGhhbmFtIiA8bWluaW9zLWRldmVsLWJvdW5jZXNAbGlzdHMueGVu
cHJvamVjdC5vcmcgb24gYmVoYWxmIG9mIHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PiB3cm90
ZToNCg0KICAgIEhlbGxvIEZlbGlwZSwNCiAgICANCiAgICBUaGlzIHBhdGNoIHNlZW1zIGZpbmUg
ZXhwZWN0IGZvciBhIG1pbm9yIHN1Z2dlc3Rpb24uDQogICAgDQogICAgT24gdGhlIHNpZGUgbm90
ZSwgc2luY2Ugd2UgYXJlIGltcG9ydGluZyB0aGUgYXh0bHMgbGlicmFyeSBpbiB0aGlzIHBhdGNo
IA0KICAgIHdlIGRvbnQgZXhwZWN0IHRoaXMgcGF0Y2ggdG8gY29tcGlsZSB3aXRob3V0IHRoZSAi
Y29uZmlnLmgiIHdoaWNoIGlzIA0KICAgIGludHJvZHVjZWQgaW4gdGhlIG5leHQgcGF0Y2guDQog
ICAgDQogICAgVGhhbmtzICYgUmVnYXJkcw0KICAgIA0KICAgIFNoYXJhbg0KICAgIA0KICAgIFJl
dmlld2VkLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4N
CiAgICANCiAgICBPbiA5LzE3LzE5IDExOjM4IEFNLCBGZWxpcGUgSHVpY2kgd3JvdGU6DQogICAg
PiBUaGlzIGlzIGEgcG9ydCBvZiBheHRscyB0byBVbmlrcmFmdCBhcyBhbiBleHRlcm5hbCBsaWJy
YXJ5LiBJdCByZXF1aXJlcw0KICAgID4gbGliYyBhbmQgbHdpcCB0byB3b3JrLg0KICAgID4NCiAg
ICA+IFRvIHJ1biBzc2x0ZXN0LmMgYXMgYSB1bml0IHRlc3QsIHlvdSdsbCBuZWVkIHB0aHJlYWQg
c3VwcG9ydCwgZS5nLiwNCiAgICA+IGFkZCB0aGUgZm9sbG93aW5nIGxpbmUgdG8gdGhlIExJQlMg
dmFyaWFibGUgaW4gdGhlIE1ha2VmaWxlOg0KICAgID4NCiAgICA+ICAgICAuLi4kKFVLX0xJQlMp
L2x3aXA6JChVS19MSUJTKS9wdGhyZWFkLWVtYmVkZGVkOg0KICAgID4gICAgICAgICAgICQoVUtf
TElCUykvbmV3bGliOiQoVUtfTElCUykvYXh0bHMuLi4NCiAgICA+DQogICAgPiBOb3RlIHRoYXQg
eW91J2xsIG5lZWQgYSBmaWxlc3lzdGVtIGluIHBsYWNlIGFuZCB0aGUgY2VydGlmaWNhdGUgZmls
ZXMgZm9yDQogICAgPiBhbGwgdGVzdHMgdG8gcGFzcy4NCiAgICA+DQogICAgPiBTaWduZWQtb2Zm
LWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQogICAgPiAtLS0NCiAg
ICA+ICAgTWFrZWZpbGUudWsgfCAxMDUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrDQogICAgPiAgIDEgZmlsZSBjaGFuZ2VkLCAxMDUg
aW5zZXJ0aW9ucygrKQ0KICAgID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsNCiAg
ICA+DQogICAgPiBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51aw0KICAgID4g
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjA4ZjhjYWUNCiAgICA+
IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKyBiL01ha2VmaWxlLnVrDQogICAgPiBAQCAtMCwwICsx
LDEwNSBAQA0KICAgID4gKyMgIGxpYmF4dGxzIE1ha2VmaWxlLnVrDQogICAgPiArIw0KICAgID4g
KyMgIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4NCiAgICA+
ICsjDQogICAgPiArIyAgQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBD
b3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4NCiAgICA+ICsjDQogICAgPiArIyAgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0DQogICAgPiArIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogICAgPiArIyAgYXJlIG1ldDoNCiAgICA+ICsj
DQogICAgPiArIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICA+ICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogICAgPiArIyAgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQNCiAgICA+ICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogICAgPiArIyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4N
CiAgICA+ICsjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5v
ciB0aGUgbmFtZXMgb2YgaXRzDQogICAgPiArIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCiAgICA+ICsjICAg
ICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
Lg0KICAgID4gKyMNCiAgICA+ICsjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCiAgICA+ICsjICBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFDQogICAgPiArIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCiAgICA+ICsjICBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09O
VFJJQlVUT1JTIEJFDQogICAgPiArIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KICAgID4gKyMgIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
DQogICAgPiArIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQogICAgPiArIyAgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4NCiAg
ICA+ICsjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KICAgID4gKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQogICAg
PiArIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgPiArIw0KICAgID4gKyMgIFRI
SVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuDQog
ICAgPiArIw0KICAgID4gKw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiAr
IyBMaWJyYXJ5IHJlZ2lzdHJhdGlvbg0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQog
ICAgPiArJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJheHRscywkKENPTkZJR19MSUJBWFRMUykp
KQ0KICAgID4gKw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBTb3Vy
Y2VzDQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJBWFRMU19WRVJT
SU9OPTIuMS41DQogICAgPiArTElCQVhUTFNfVVJMPWh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3By
b2plY3RzL2F4dGxzL2ZpbGVzLzIuMS41L2F4VExTLSQoTElCQVhUTFNfVkVSU0lPTikudGFyLmd6
L2Rvd25sb2FkDQogICAgcy8yLjEuNS8kKExJQkFYVExTX1ZFUlNJT04pDQogICAgPiArTElCQVhU
TFNfUEFUQ0hESVI9JChMSUJBWFRMU19CQVNFKS9wYXRjaGVzDQogICAgPiArJChldmFsICQoY2Fs
bCBmZXRjaGFzLGxpYmF4dGxzLCQoTElCQVhUTFNfVVJMKSwkKExJQkFYVExTX1ZFUlNJT04pLnRn
eikpDQogICAgPiArJChldmFsICQoY2FsbCBwYXRjaCxsaWJheHRscywkKExJQkFYVExTX1BBVENI
RElSKSxsaWJheHRscy0kKExJQkFYVExTX1ZFUlNJT04pKSkNCiAgICA+ICsNCiAgICA+ICsjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgSGVscGVycw0KICAgID4gKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjDQogICAgPiArTElCQVhUTFNfU1JDPSQoTElCQVhUTFNfT1JJR0lOKS9heHRs
cy1jb2RlDQogICAgPiArDQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICsj
IExpYnJhcnkgaW5jbHVkZXMNCiAgICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4g
K0NJTkNMVURFUy0kKENPTkZJR19MSUJBWFRMUykgKz0gICAtSSQoTElCQVhUTFNfU1JDKS9pbmNs
dWRlIFwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKExJQkFY
VExTX1NSQykvY3J5cHRvICBcDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1JJChMSUJBWFRMU19TUkMpL3NzbCAgICAgXA0KICAgID4gKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtSSQoTElCQVhUTFNfQkFTRSkvaW5jbHVkZQ0KICAgID4gKw0KICAg
ID4gK0NYWElOQ0xVREVTLSQoQ09ORklHX0xJQkFYVExTKSArPSAtSSQoTElCQVhUTFNfU1JDKS9p
bmNsdWRlIFwNCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKExJ
QkFYVExTX1NSQykvY3J5cHRvICBcDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC1JJChMSUJBWFRMU19TUkMpL3NzbCAgICAgXA0KICAgID4gKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtSSQoTElCQVhUTFNfQkFTRSkvaW5jbHVkZQ0KICAgID4gKw0K
ICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBHbG9iYWwgZmxhZ3MNCiAg
ICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gK0xJQkFYVExTX0NGTEFHUy15ICs9
IC1ESEFWRV9DT05GSUdfSA0KICAgID4gKw0KICAgID4gKyMgU3VwcHJlc3Mgc29tZSB3YXJuaW5n
cyB0byBtYWtlIHRoZSBidWlsZCBwcm9jZXNzIGxvb2sgbmVhdGVyDQogICAgPiArU1VQUFJFU1Nf
RkxBR1MgKz0gLVduby1zaWduLWNvbXBhcmUgLVduby1wYXJlbnRoZXNlcyAtV25vLXVudXNlZC1w
YXJhbWV0ZXINCiAgICA+ICsNCiAgICA+ICtMSUJBWFRMU19DRkxBR1MteSAgICs9ICQoU1VQUFJF
U1NfRkxBR1MpDQogICAgPiArTElCQVhUTFNfQ1hYRkxBR1MteSArPSAkKFNVUFBSRVNTX0ZMQUdT
KQ0KICAgID4gKw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBheHRs
cyBjb2RlIC0gY3J5cHRvDQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtM
SUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9hZXMuYw0KICAgID4gK0xJ
QkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2JpZ2ludC5jDQogICAgPiAr
TElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9jcnlwdG8vY3J5cHRvX21pc2MuYw0K
ICAgID4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL2htYWMuYw0K
ICAgID4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL21kNS5jDQog
ICAgPiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9jcnlwdG8vcmM0LmMNCiAg
ICA+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9yc2EuYw0KICAg
ID4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3NoYTEuYw0KICAg
ID4gK0xJQkFYVExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvY3J5cHRvL3NoYTI1Ni5jDQog
ICAgPiArTElCQVhUTFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9jcnlwdG8vc2hhMzg0LmMN
CiAgICA+ICtMSUJBWFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL2NyeXB0by9zaGE1MTIu
Yw0KICAgID4gKw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBheHRs
cyBjb2RlIC0gc3NsDQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJB
WFRMU19TUkNTLXkgKz0gJChMSUJBWFRMU19TUkMpL3NzbC9hc24xLmMNCiAgICA+ICsjTElCQVhU
TFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvZ2VuX2NlcnQuYw0KICAgID4gK0xJQkFY
VExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL2xvYWRlci5jDQogICAgPiArTElCQVhU
TFNfU1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvb3BlbnNzbC5jDQogICAgPiArI0xJQkFY
VExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL29zX3BvcnQuYw0KICAgID4gK0xJQkFY
VExTX1NSQ1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL3AxMi5jDQogICAgPiArTElCQVhUTFNf
U1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvdGxzMS5jDQogICAgPiArTElCQVhUTFNfU1JD
Uy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wvdGxzMV9zdnIuYw0KICAgID4gK0xJQkFYVExTX1NS
Q1MteSArPSAkKExJQkFYVExTX1NSQykvc3NsL3RsczFfY2xudC5jDQogICAgPiArTElCQVhUTFNf
U1JDUy15ICs9ICQoTElCQVhUTFNfU1JDKS9zc2wveDUwOS5jDQogICAgDQogICAgX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCiAgICBNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0DQogICAgTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnDQogICAg
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 07:25:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 07:25:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCfCL-0001Vf-MN; Tue, 24 Sep 2019 07:25:21 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4Xx+=XT=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCfCK-0001VX-IP
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 07:25:20 +0000
X-Inumbo-ID: 754fc712-de9c-11e9-b299-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 754fc712-de9c-11e9-b299-bc764e2007e4;
 Tue, 24 Sep 2019 07:25:18 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4A038F201A;
 Tue, 24 Sep 2019 09:25:17 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id HK4OjP9UY7aB; Tue, 24 Sep 2019 09:25:17 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 14083F2019;
 Tue, 24 Sep 2019 09:25:13 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 09:25:12 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Tue, 24 Sep 2019 09:25:12
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Jia He <jiakernel2@gmail.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 1/3] Introduce library
 skeleton
Thread-Index: AQHVXfTPVPA7g47vj0GYmhswFA0rjqcv882AgAqisAA=
Date: Tue, 24 Sep 2019 07:25:12 +0000
Message-ID: <17E70D17-9A5C-4BB4-ABC2-84D2155262F1@neclab.eu>
References: <20190828230327.9157-1-felipe.huici@neclab.eu>
 <20190828230327.9157-2-felipe.huici@neclab.eu>
 <ffc3cc94-78e8-fd26-6c11-e8df2e05b28b@gmail.com>
In-Reply-To: <ffc3cc94-78e8-fd26-6c11-e8df2e05b28b@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <CB68BB34B647B04EA82CD3A830F422C0@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 1/3] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLA0KDQpUaGFua3MgZm9yIHRoZSByZXZpZXcsIHBsZWFzZSBzZWUgaW5saW5lLg0K
DQotLSBGZWxpcGUNCg0K77u/T24gMTcuMDkuMTksIDE3OjAwLCAiTWluaW9zLWRldmVsIG9uIGJl
aGFsZiBvZiBKaWEgSGUiIDxtaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9y
ZyBvbiBiZWhhbGYgb2Ygamlha2VybmVsMkBnbWFpbC5jb20+IHdyb3RlOg0KDQogICAgSGkgRmVs
aXBlDQogICAgDQogICAgUGxlYXNlIHNlZSB0aGUgaW5saW5lIGJlbG93DQogICAgDQogICAgT24g
MjAxOS84LzI5IDc6MDMsIEZlbGlwZSBIdWljaSB3cm90ZToNCiAgICA+IFdlIHVzZSB0aGUgQlNE
LTMtQ2xhdXNlIGxpY2Vuc2UgZm9yIHRoaXMgbGlicmFyeSBnbHVlIGNvZGUuDQogICAgPg0KICAg
ID4gU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pg0K
ICAgID4gLS0tDQogICAgPiAgIC5naXRpZ25vcmUgICAgICB8IDI3ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKw0KICAgID4gICBDT0RJTkdfU1RZTEUubWQgfCAgNCArKysrDQogICAgPiAgIENP
TlRSSUJVVElORy5tZCB8ICA0ICsrKysNCiAgICA+ICAgQ09QWUlORy5tZCAgICAgIHwgMzkgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQogICAgPiAgIENvbmZpZy51ayAg
ICAgICB8ICA0ICsrKysNCiAgICA+ICAgTUFJTlRBSU5FUlMubWQgIHwgMTAgKysrKysrKysrKw0K
ICAgID4gICBSRUFETUUubWQgICAgICAgfCAgOSArKysrKysrKysNCiAgICA+ICAgZXhwb3J0c3lt
cy51ayAgIHwgIDEgKw0KICAgID4gICA4IGZpbGVzIGNoYW5nZWQsIDk4IGluc2VydGlvbnMoKykN
CiAgICA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUNCiAgICA+ICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZA0KICAgID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09O
VFJJQlVUSU5HLm1kDQogICAgPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kDQogICAg
PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsNCiAgICA+ICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IE1BSU5UQUlORVJTLm1kDQogICAgPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQN
CiAgICA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsNCiAgICA+DQogICAgPiBk
aWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUNCiAgICA+IG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwLi41N2VmODIxDQogICAgPiAtLS0gL2Rldi9udWxs
DQogICAgPiArKysgYi8uZ2l0aWdub3JlDQogICAgPiBAQCAtMCwwICsxLDI3IEBADQogICAgPiAr
LmRlcGVuZA0KICAgID4gKyoubw0KICAgID4gKyouYQ0KICAgID4gKyouZA0KICAgID4gKyouc28N
CiAgICA+ICsqLm9yaWcNCiAgICA+ICsqLnJlag0KICAgID4gKyouYmFrDQogICAgPiArKi5zd3AN
CiAgICA+ICsqfg0KICAgID4gKywqDQogICAgPiArXCMqXCMNCiAgICA+ICsuXCMqDQogICAgPiAr
XCNfKlwjDQogICAgPiArLlwjXyoNCiAgICA+ICshLmdpdGlnbm9yZQ0KICAgID4gKy4qDQogICAg
PiArDQogICAgPiArIyBnbnUgZ2xvYmFsIGZpbGVzDQogICAgPiArR1BBVEgNCiAgICA+ICtHUlRB
R1MNCiAgICA+ICtHU1lNUw0KICAgID4gK0dUQUdTDQogICAgPiArDQogICAgPiArIyBjc2NvcGUg
ZmlsZXMNCiAgICA+ICtjc2NvcGUuKg0KICAgID4gK25jc2NvcGUuKg0KICAgID4gZGlmZiAtLWdp
dCBhL0NPRElOR19TVFlMRS5tZCBiL0NPRElOR19TVFlMRS5tZA0KICAgID4gbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjU3MzAwNDENCiAgICA+IC0tLSAvZGV2L251
bGwNCiAgICA+ICsrKyBiL0NPRElOR19TVFlMRS5tZA0KICAgID4gQEAgLTAsMCArMSw0IEBADQog
ICAgPiArQ29kaW5nIFN0eWxlDQogICAgPiArPT09PT09PT09PT09DQogICAgPiArDQogICAgPiAr
UGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09ESU5HX1NUWUxFLm1kYCBmaWxlIGluIHRoZSBtYWluIFVu
aWtyYWZ0IHJlcG9zaXRvcnkuDQogICAgPiBkaWZmIC0tZ2l0IGEvQ09OVFJJQlVUSU5HLm1kIGIv
Q09OVFJJQlVUSU5HLm1kDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXgg
MDAwMDAwMC4uMTRmNmFjNg0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrIGIvQ09OVFJJ
QlVUSU5HLm1kDQogICAgPiBAQCAtMCwwICsxLDQgQEANCiAgICA+ICtDb250cmlidXRpbmcgdG8g
VW5pa3JhZnQNCiAgICA+ICs9PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICA+ICsNCiAgICA+
ICtQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05UUklCVVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4g
VW5pa3JhZnQgcmVwb3NpdG9yeS4NCiAgICA+IGRpZmYgLS1naXQgYS9DT1BZSU5HLm1kIGIvQ09Q
WUlORy5tZA0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAu
LmE4MjgyMDcNCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKyBiL0NPUFlJTkcubWQNCiAg
ICA+IEBAIC0wLDAgKzEsMzkgQEANCiAgICA+ICtMaWNlbnNlDQogICAgPiArPT09PT09PQ0KICAg
ID4gKw0KICAgID4gK1VuaWtyYWZ0IHdhbXIgd3JhcHBlcnMNCiAgICA+ICstLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgPiArDQogICAgPiArVGhpcyByZXBvc2l0b3J5IGNv
bnRhaW5zIHdyYXBwZXIgY29kZSB0byBidWlsZCB3YW1yIHdpdGggVW5pa3JhZnQuDQogICAgPiAr
RWFjaCBDIGNvZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlz
IHRoZQ0KICAgID4gK2NvcHlyaWdodCBvd25lciBhbmQgdW5kZXIgd2hpY2ggdGVybXMgYW5kIGNv
bmRpdGlvbnMgdGhlIGNvZGUgaXMNCiAgICA+ICtsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ug
bm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodA0KICAgID4gK25vdGljZSB3
aWxsIGFwcGx5Og0KICAgID4gKw0KICAgID4gKwlDb3B5cmlnaHQgKGMpIFllYXIsIEluc3RpdHV0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAgID4gKw0KICAgID4gKwlSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAg
ICA+ICsJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zDQogICAgPiArCWFyZSBtZXQ6DQogICAgPiArDQogICAgPiArCTEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0DQogICAgPiArCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICA+ICsJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICA+ICsJICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQ0KICAgID4gKwkgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgID4gKwkzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzDQogICAgPiAr
CSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tDQogICAgPiArCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgPiArDQogICAgPiArCVRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMg
IkFTIElTIg0KICAgID4gKwlBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICAgPiArCUlNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFDQogICAgPiArCUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUNCiAgICA+ICsJTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KICAgID4g
KwlDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRg0KICAgID4gKwlTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCiAgICA+ICsJSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4NCiAgICA+ICsJQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkNCiAgICA+ICsJQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUN
CiAgICA+ICsJUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgPiArDQogICAgPiBkaWZm
IC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0
NA0KICAgID4gaW5kZXggMDAwMDAwMC4uOTJlZWVjYg0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAg
ID4gKysrIGIvQ29uZmlnLnVrDQogICAgPiBAQCAtMCwwICsxLDQgQEANCiAgICA+ICttZW51Y29u
ZmlnIExJQldBTVINCiAgICA+ICsJICAgYm9vbCAid2FtciAtIEludGVsJ3MgV2ViQXNzZW1ibHkg
TWljcm8gUnVudGltZSINCiAgICA+ICsJICAgZGVmYXVsdCB5DQogICAgPiArICAgICAgICAgICBz
ZWxlY3QgSEFWRV9MSUJDDQogICAgDQogICAgQXMgd2UgdGFsa2VkIGJlZm9yZSwgbWF5YmUgeW91
IG5lZWQgdG8gbWFrZSBpdCBleHBsaWNpdGx5IGRlcGVuZCBvbiAgICANCiAgICBsd2lwIGFuZCBw
dGhyZWFkLWVtYmVkZGVkLg0KICAgIA0KT2ssIHdpbGwgZml4IGluIHRoZSBuZXh0IHZlcnNpb24u
DQogICAgDQogICAgPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJTkVSUy5t
ZA0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjQwNTk0
MjUNCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKyBiL01BSU5UQUlORVJTLm1kDQogICAg
PiBAQCAtMCwwICsxLDEwIEBADQogICAgPiArTWFpbnRhaW5lcnMgTGlzdA0KICAgID4gKz09PT09
PT09PT09PT09PT0NCiAgICA+ICsNCiAgICA+ICtGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhp
cyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4NCiAgICA+
ICt0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lg0KICAgID4gKw0KICAgID4gKwlMSUJQQ1JF
LVVOSUtSQUZUDQogICAgPiArCU06CUZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4NCiAgICA+ICsJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcNCiAgICA+ICsJRjogKg0K
ICAgID4gZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZA0KICAgID4gbmV3IGZpbGUg
bW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjA1MjdhZTcNCiAgICA+IC0tLSAvZGV2
L251bGwNCiAgICA+ICsrKyBiL1JFQURNRS5tZA0KICAgID4gQEAgLTAsMCArMSw5IEBADQogICAg
PiArd2FtciBmb3IgVW5pa3JhZnQNCiAgICA+ICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KICAgID4gKw0KICAgID4gK1RoaXMgaXMgdGhlIHBvcnQgb2Ygd2FybSBmb3IgVW5pa3JhZnQg
YXMgZXh0ZXJuYWwgbGlicmFyeS4gSWYgZ2l2ZW4NCiAgICBzL3dhcm0vd2Ftcg0KDQpXaWxsIGZp
eC4NCg0KICAgID4gK3RoZSAtLXJlcGwgcGFyYW1ldGVyIHRoaXMgcG9ydCB3aWxsIHJ1biBSRVBM
IG1vZGUuIEFsdGVybmF0aXZlbHkgeW91DQogICAgPiArY2FuIHJ1biBhIHByb2dyYW0gZnJvbSBh
IGZpbGUgaWYgcGFzc2VkIGFzIGEgaW5pdHJkIHBhcmFtZXRlci4NCiAgICA+ICsNCiAgICA+ICtQ
bGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhlIGRvY3VtZW50YXRp
b24gaW4gdGhlIGBkb2MvYA0KICAgID4gK3N1YmRpcmVjdG9yeSBvZiB0aGUgbWFpbiB1bmlrcmFm
dCByZXBvc2l0b3J5Lg0KICAgID4gZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRz
eW1zLnVrDQogICAgPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgID4gaW5kZXggMDAwMDAwMC4u
Yzg2YzNmMw0KICAgID4gLS0tIC9kZXYvbnVsbA0KICAgID4gKysrIGIvZXhwb3J0c3ltcy51aw0K
ICAgID4gQEAgLTAsMCArMSBAQA0KICAgID4gK25vbmUNCiAgICA+IFwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQ0KICAgIA0KICAgIC0tIA0KICAgIA0KICAgIC0tLQ0KICAgIENoZWVycywNCiAg
ICBKdXN0aW4gKEppYSBIZSkNCiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QN
CiAgICBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 07:32:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 07:32:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCfJC-0002NU-Jk; Tue, 24 Sep 2019 07:32:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4Xx+=XT=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCfJA-0002NP-Vb
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 07:32:25 +0000
X-Inumbo-ID: 7233efbc-de9d-11e9-978d-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 7233efbc-de9d-11e9-978d-bc764e2007e4;
 Tue, 24 Sep 2019 07:32:22 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 867A5105704;
 Tue, 24 Sep 2019 09:32:21 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ZYlbJUGitJAX; Tue, 24 Sep 2019 09:32:21 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 5CF5E1056E8;
 Tue, 24 Sep 2019 09:32:21 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 09:32:21 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Tue, 24 Sep 2019 09:32:20
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Jia He <jiakernel2@gmail.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 2/3] Add Makefile.uk
Thread-Index: AQHVXfTR6dglt3NTYEqNVC656kq47Kcwvh4AgAnaXgA=
Date: Tue, 24 Sep 2019 07:32:20 +0000
Message-ID: <0BA98EC8-4B18-408C-B635-F54CD4872B5E@neclab.eu>
References: <20190828230327.9157-1-felipe.huici@neclab.eu>
 <20190828230327.9157-3-felipe.huici@neclab.eu>
 <3f6d9ef4-026b-c1c5-ccd7-ef381283b537@gmail.com>
In-Reply-To: <3f6d9ef4-026b-c1c5-ccd7-ef381283b537@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <C8F59CE2FB524D4FBAC7376F6ECBA20E@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVzdGluLA0KDQpQbGVhc2Ugc2VlIGlubGluZS4NCg0KLS0gRmVsaXBlDQoNCu+7v09uIDE4
LjA5LjE5LCAwNTowNSwgIk1pbmlvcy1kZXZlbCBvbiBiZWhhbGYgb2YgSmlhIEhlIiA8bWluaW9z
LWRldmVsLWJvdW5jZXNAbGlzdHMueGVucHJvamVjdC5vcmcgb24gYmVoYWxmIG9mIGppYWtlcm5l
bDJAZ21haWwuY29tPiB3cm90ZToNCg0KICAgIA0KICAgIE9uIDIwMTkvOC8yOSA3OjAzLCBGZWxp
cGUgSHVpY2kgd3JvdGU6DQogICAgPiBUaGlzIGlzIGEgcG9ydCBvZiB3YW1yIHRvIFVuaWtyYWZ0
IGFzIGFuIGV4dGVybmFsIGxpYnJhcnkuIEl0IHJlcXVpcmVzDQogICAgPiBsaWJjLCBhIG5ldHdv
cmsgc3RhY2sgYW5kIHB0aHJlYWQgc3VwcG9ydCwgc28gaW4geW91ciBhcHBsaWNhdGlvbg0KICAg
ID4gTWFrZWZpbGUgdGhlIGxpYnJhcnkgZGVwZW5kZW5jeSBsaXN0IHNob3VsZCByZWFkOg0KICAg
ID4NCiAgICA+ICAgIExJQlMgOj0gLi4uOiQoVUtfTElCUykvcHRocmVhZC1lbWJlZGRlZDokKFVL
X0xJQlMpL2x3aXA6DQogICAgPiAgICAgICAgICAgICAgICAkKFVLX0xJQlMpL25ld2xpYjokKFVL
X0xJQlMpL3dhbXI6Li4uDQogICAgPg0KICAgID4gUGxlYXNlIHJlZmVyIHRvIFJFQURNRS5tZCBm
b3IgaW5mb3JtYXRpb24gb24gcnVubmluZyBpdC4NCiAgICA+DQogICAgPiBTaWduZWQtb2ZmLWJ5
OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+DQogICAgPiAtLS0NCiAgICA+
ICAgTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAx
MDUgKysrKysrKysrDQogICAgPiAgIGluY2x1ZGUvYmhfcGxhdGZvcm0uaCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgMTI5ICsrKysrKysrKysrDQogICAgPiAgIG1haW4uYyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjM2ICsrKysrKysrKysrKysr
KysrKysrKw0KICAgID4gICAuLi5tLWxvZy1maXgtcHRocmVhZC1lbWJlZGRlZC1wdGhyZWFkLXQt
dHlwZS5wYXRjaCB8ICAxNSArKw0KICAgID4gICAuLi5ocmVhZC1maXgtcHRocmVhZC1lbWJlZGRl
ZC1wdGhyZWFkLXQtdHlwZS5wYXRjaCB8ICAxNiArKw0KICAgID4gICAuLi4zLWJoLXRocmVhZC11
c2Utd2FzbS1sb2ctaW5zdGVhZG9mLWJoLWxvZy5wYXRjaCB8ICAxMSArDQogICAgPiAgIDYgZmls
ZXMgY2hhbmdlZCwgNTEyIGluc2VydGlvbnMoKykNCiAgICA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IE1ha2VmaWxlLnVrDQogICAgPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2JoX3BsYXRm
b3JtLmgNCiAgICA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IG1haW4uYw0KICAgID4gICBjcmVhdGUg
bW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLXdhc20tbG9nLWZpeC1wdGhyZWFkLWVtYmVkZGVkLXB0
aHJlYWQtdC10eXBlLnBhdGNoDQogICAgPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAw
MDItYmgtdGhyZWFkLWZpeC1wdGhyZWFkLWVtYmVkZGVkLXB0aHJlYWQtdC10eXBlLnBhdGNoDQog
ICAgPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDMtYmgtdGhyZWFkLXVzZS13YXNt
LWxvZy1pbnN0ZWFkb2YtYmgtbG9nLnBhdGNoDQogICAgPg0KICAgID4gZGlmZiAtLWdpdCBhL01h
a2VmaWxlLnVrIGIvTWFrZWZpbGUudWsNCiAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
PiBpbmRleCAwMDAwMDAwLi5hOWY5YTUzDQogICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiArKysg
Yi9NYWtlZmlsZS51aw0KICAgID4gQEAgLTAsMCArMSwxMDUgQEANCiAgICA+ICsjICB3YW1yIE1h
a2VmaWxlLnVrDQogICAgPiArIw0KICAgID4gKyMgIEF1dGhvcnM6IEZlbGlwZSBIdWljaSA8ZmVs
aXBlLmh1aWNpQG5lY2xhYi5ldT4NCiAgICA+ICsjDQogICAgPiArIw0KICAgID4gKyMgIENvcHly
aWdodCAoYykgMjAxOSwgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuDQogICAgPiArIw0KICAgID4gKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgID4gKyMgIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucw0KICAgID4gKyMgIGFyZSBtZXQ6DQogICAgPiArIw0KICAgID4gKyMgIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
DQogICAgPiArIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLg0KICAgID4gKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgPiArIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQ0KICAgID4gKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgPiArIyAgMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cw0K
ICAgID4gKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogICAgPiArIyAgICAgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAgICA+ICsjDQogICAgPiAr
IyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUyAiQVMgSVMiDQogICAgPiArIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KICAgID4g
KyMgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFDQogICAgPiArIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQ0KICAgID4g
KyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1INCiAgICA+ICsjICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRg0KICAgID4gKyMgIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUw0KICAgID4gKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQogICAgPiArIyAgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkNCiAgICA+ICsjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KICAgID4gKyMgIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLg0KICAgID4gKyMNCiAgICA+ICsjICBUSElTIEhFQURFUiBNQVkgTk9UIEJF
IEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLg0KICAgID4gKyMNCiAgICA+ICsNCiAg
ICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgTGlicmFyeSByZWdpc3RyYXRp
b24NCiAgICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyQoZXZhbCAkKGNhbGwg
YWRkbGliX3MsbGlid2FtciwkKENPTkZJR19MSUJXQU1SKSkpDQogICAgPiArDQogICAgPiArIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICsjIFNvdXJjZXMNCiAgICA+ICsjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIw0KICAgID4gK0xJQldBTVJfVkVSU0lPTj1tYXN0ZXINCiAgICA+ICtMSUJX
QU1SX1VSTD1odHRwczovL2dpdGh1Yi5jb20vaW50ZWwvd2FzbS1taWNyby1ydW50aW1lL2FyY2hp
dmUvJChMSUJXQU1SX1ZFUlNJT04pLnppcA0KICAgID4gK0xJQldBTVJfRElSPXdhc20tbWljcm8t
cnVudGltZS1tYXN0ZXINCiAgICA+ICtMSUJXQU1SX1BBVENIRElSPSQoTElCV0FNUl9CQVNFKS9w
YXRjaGVzDQogICAgPiArJChldmFsICQoY2FsbCBmZXRjaCxsaWJ3YW1yLCQoTElCV0FNUl9VUkwp
LCQoTElCV0FNUl9ESVIpLnppcCkpDQogICAgPiArJChldmFsICQoY2FsbCBwYXRjaCxsaWJ3YW1y
LCQoTElCV0FNUl9QQVRDSERJUiksJChMSUJXQU1SX0RJUikpKQ0KICAgID4gKw0KICAgID4gKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBIZWxwZXJzDQogICAgPiArIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJXQU1SX1NSQz0kKExJQldBTVJfT1JJR0lOKS8kKExJ
QldBTVJfRElSKQ0KICAgID4gKw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAg
PiArIyBMaWJyYXJ5IGluY2x1ZGVzDQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAg
ICA+ICtDSU5DTFVERVMtJChDT05GSUdfTElCV0FNUikgKz0gLUkkKExJQldBTVJfQkFTRSkvaW5j
bHVkZSAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgPiArICAgCQkJICAgICAgIC1JJChM
SUJXQU1SX1NSQykvY29yZS9pd2FzbS9ydW50aW1lL3ZtY29yZS13YXNtICAgXA0KICAgID4gKyAg
IAkJCSAgICAgICAtSSQoTElCV0FNUl9TUkMpL2NvcmUvaXdhc20vcnVudGltZS9wbGF0Zm9ybS9p
bmNsdWRlIFwNCiAgICA+ICsgICAJCQkgICAgICAgLUkkKExJQldBTVJfU1JDKS9jb3JlL2l3YXNt
L3J1bnRpbWUvaW5jbHVkZSAgICAgICBcDQogICAgPiArCQkJICAgICAgIC1JJChMSUJXQU1SX1NS
QykvY29yZS9zaGFyZWQtbGliL3BsYXRmb3JtL2luY2x1ZGUgXA0KICAgID4gKwkJCSAgICAgICAt
SSQoTElCV0FNUl9TUkMpL2NvcmUvc2hhcmVkLWxpYi9pbmNsdWRlICAgICAgICAgIFwNCiAgICA+
ICsNCiAgICA+ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgID4gKyMgTGlicmFyeSBmbGFn
cw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArTElCV0FNUl9TVVBQUkVT
U19GTEFHUyArPSAtV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uIFwNCiAgICA+ICsJ
CSAgICAgICAgICAtV25vLXNpZ24tY29tcGFyZSAgICAgICAgICAgICAgICAgIFwNCiAgICA+ICsJ
CQkgIC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdCAgICAgICAgICAgXA0KICAgID4gKwkJCSAgLVdu
by11bnVzZWQtcGFyYW1ldGVyICAgICAgICAgICAgICBcDQogICAgPiArCQkJICAtV25vLWludC1j
b252ZXJzaW9uICAgICAgICAgICAgICAgIFwNCiAgICA+ICsJCQkgIC1Xbm8tdW51c2VkLWxhYmVs
ICAgICAgICAgICAgICAgICAgXA0KICAgID4gKwkJCSAgLVduby11bnVzZWQtYnV0LXNldC12YXJp
YWJsZQ0KICAgID4gKw0KICAgID4gK0xJQldBTVJfQ0ZMQUdTLXkgKz0gLUROVkFMR1JJTkQgJChM
SUJXQU1SX1NVUFBSRVNTX0ZMQUdTKQ0KICAgID4gK0xJQldBTVJfQ1hYRkxBR1MteSArPSAtRE5W
QUxHUklORCAkKExJQldBTVJfU1VQUFJFU1NfRkxBR1MpDQogICAgPiArDQogICAgPiArIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICsjIEdsdWUgY29kZQ0KICAgID4gKyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjDQogICAgPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX0JBU0UpL21h
aW4uYw0KICAgID4gKw0KICAgID4gKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgPiArIyBT
b3VyY2VzDQogICAgPiArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICA+ICtMSUJXQU1SX1NS
Q1MteSArPSAkKExJQldBTVJfU1JDKS9jb3JlL2l3YXNtL3J1bnRpbWUvdm1jb3JlLXdhc20vaW52
b2tlTmF0aXZlX2dlbmVyYWwuYw0KICAgID4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9T
UkMpL2NvcmUvaXdhc20vcnVudGltZS92bWNvcmUtd2FzbS93YXNtX2FwcGxpY2F0aW9uLmMNCiAg
ICA+ICtMSUJXQU1SX1NSQ1MteSArPSAkKExJQldBTVJfU1JDKS9jb3JlL2l3YXNtL3J1bnRpbWUv
dm1jb3JlLXdhc20vd2FzbV9pbnRlcnAuYw0KICAgID4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElC
V0FNUl9TUkMpL2NvcmUvaXdhc20vcnVudGltZS92bWNvcmUtd2FzbS93YXNtX2xvYWRlci5jDQog
ICAgPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9pd2FzbS9ydW50aW1l
L3ZtY29yZS13YXNtL3dhc21fcnVudGltZS5jDQogICAgPiArTElCV0FNUl9TUkNTLXkgKz0gJChM
SUJXQU1SX1NSQykvY29yZS9zaGFyZWQtbGliL21lbS1hbGxvYy9iaF9tZW1vcnkuYw0KICAgID4g
K0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9TUkMpL2NvcmUvaXdhc20vcnVudGltZS91dGls
cy93YXNtX2xvZy5jDQogICAgPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29y
ZS9zaGFyZWQtbGliL3BsYXRmb3JtL2xpbnV4L2JoX3RocmVhZC5jDQogICAgPiArTElCV0FNUl9T
UkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9pd2FzbS9ydW50aW1lL3V0aWxzL3dhc21faGFz
aG1hcC5jDQogICAgPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9pd2Fz
bS9saWIvbmF0aXZlL2xpYmMvbGliY193cmFwcGVyLmMNCiAgICA+ICtMSUJXQU1SX1NSQ1MteSAr
PSAkKExJQldBTVJfU1JDKS9jb3JlL2l3YXNtL3J1bnRpbWUvdXRpbHMvd2FzbV9kbGZjbi5jDQog
ICAgPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9zaGFyZWQtbGliL21l
bS1hbGxvYy9tZW1fYWxsb2MuYw0KICAgID4gK0xJQldBTVJfU1JDUy15ICs9ICQoTElCV0FNUl9T
UkMpL2NvcmUvc2hhcmVkLWxpYi9wbGF0Zm9ybS9saW51eC9iaF9wbGF0Zm9ybS5jDQogICAgPiAr
TElCV0FNUl9TUkNTLXkgKz0gJChMSUJXQU1SX1NSQykvY29yZS9pd2FzbS9ydW50aW1lL3BsYXRm
b3JtL3plcGh5ci93YXNtX25hdGl2ZS5jDQogICAgPiArTElCV0FNUl9TUkNTLXkgKz0gJChMSUJX
QU1SX1NSQykvY29yZS9pd2FzbS9saWIvbmF0aXZlL2Jhc2UvYmFzZV9saWJfZXhwb3J0LmMNCiAg
ICA+ICtMSUJXQU1SX1NSQ1MteSArPSAkKExJQldBTVJfU1JDKS9jb3JlL2l3YXNtL3Byb2R1Y3Rz
L2xpbnV4L2V4dF9saWJfZXhwb3J0LmMNCiAgICA+ICtMSUJXQU1SX1NSQ1MteSArPSAkKExJQldB
TVJfU1JDKS9jb3JlL3NoYXJlZC1saWIvbWVtLWFsbG9jL2Vtcy9lbXNfa2ZjLmMNCiAgICA+ICtM
SUJXQU1SX1NSQ1MteSArPSAkKExJQldBTVJfU1JDKS9jb3JlL3NoYXJlZC1saWIvbWVtLWFsbG9j
L2Vtcy9lbXNfYWxsb2MuYw0KICAgID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvYmhfcGxhdGZvcm0u
aCBiL2luY2x1ZGUvYmhfcGxhdGZvcm0uaA0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICA+IGluZGV4IDAwMDAwMDAuLjAwYzI1YjQNCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsr
KyBiL2luY2x1ZGUvYmhfcGxhdGZvcm0uaA0KICAgIA0KICAgIEkgc2F3IGxvdHMgb2YgZXJyb3Jz
IGFuZCB3YXJuaW5ncyBieSBzdXBwb3J0L3NjcmlwdHMvY2hlY2tfcGF0Y2gucGwNCiAgICBpbiB0
aGlzIGZpbGUNCg0KT2ssIEknbGwgaGF2ZSBhIGxvb2suDQogICAgICAgIA0KICAgID4gQEAgLTAs
MCArMSwxMjkgQEANCiAgICA+ICsvKg0KICAgID4gKyAqIENvcHlyaWdodCAoQykgMjAxOSBJbnRl
bCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICAgPiArICoNCiAgICA+ICsg
KiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp
Y2Vuc2UiKTsNCiAgICA+ICsgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj
b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuDQogICAgPiArICogWW91IG1heSBvYnRhaW4gYSBj
b3B5IG9mIHRoZSBMaWNlbnNlIGF0DQogICAgPiArICoNCiAgICA+ICsgKiAgICAgIGh0dHA6Ly93
d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KICAgID4gKyAqDQogICAgPiArICog
VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5n
LCBzb2Z0d2FyZQ0KICAgID4gKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp
c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQogICAgPiArICogV0lUSE9VVCBXQVJSQU5U
SUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu
DQogICAgPiArICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292
ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KICAgID4gKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM
aWNlbnNlLg0KICAgID4gKyAqLw0KICAgID4gKw0KICAgID4gKyNpZm5kZWYgX0JIX1BMQVRGT1JN
X0gNCiAgICA+ICsjZGVmaW5lIF9CSF9QTEFURk9STV9IDQogICAgPiArDQogICAgPiArI2luY2x1
ZGUgImJoX2NvbmZpZy5oIg0KICAgID4gKyNpbmNsdWRlICJiaF90eXBlcy5oIg0KICAgID4gKyNp
bmNsdWRlICJiaF9tZW1vcnkuaCINCiAgICA+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4NCiAgICA+
ICsjaW5jbHVkZSA8c3RkYm9vbC5oPg0KICAgID4gKyNpbmNsdWRlIDxhc3NlcnQuaD4NCiAgICA+
ICsjaW5jbHVkZSA8dGltZS5oPg0KICAgID4gKyNpbmNsdWRlIDxzdHJpbmcuaD4NCiAgICA+ICsj
aW5jbHVkZSA8c3RkaW8uaD4NCiAgICA+ICsjaW5jbHVkZSA8YXNzZXJ0Lmg+DQogICAgcmVkdWRh
bnQgYXNzZXJ0LmgsDQogICAgPiArDQogICAgPiArI2lmbmRlZiBfX2NwbHVzcGx1cw0KICAgID4g
K2ludCBzbnByaW50ZihjaGFyICpidWZmZXIsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqZm9y
bWF0LCAuLi4pOw0KICAgID4gKyNlbmRpZg0KICAgID4gKw0KICAgID4gKyNpZmRlZiBfX2NwbHVz
cGx1cw0KICAgID4gK2V4dGVybiAiQyIgew0KICAgID4gKyNlbmRpZg0KICAgID4gKw0KICAgID4g
K3R5cGVkZWYgdWludDY0X3QgdWludDY0Ow0KICAgID4gK3R5cGVkZWYgaW50NjRfdCBpbnQ2NDsN
CiAgICA+ICsNCiAgICA+ICtleHRlcm4gdm9pZCBERUJVR01FKHZvaWQpOw0KICAgID4gKw0KICAg
ID4gKyNkZWZpbmUgRElFIGRve2JoX2RlYnVnKCJEaWUgaGVyZVxuXG5cblxuXG5cblxuXG5cblxu
XG5cblxuXG4iKTsgREVCVUdNRSh2b2lkKTsgd2hpbGUoMSk7fXdoaWxlKDApDQogICAgPiArDQog
ICAgPiArI2RlZmluZSBCSF9QTEFURk9STSAiTGludXgiDQogICAgPiArDQogICAgPiArLyogTkVF
RCBxc29ydCAqLw0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDxzdGRhcmcuaD4NCiAgICA+ICsj
aW5jbHVkZSA8Y3R5cGUuaD4NCiAgICA+ICsjaW5jbHVkZSA8cHRocmVhZC5oPg0KICAgID4gKyNp
bmNsdWRlIDxsaW1pdHMuaD4NCiAgICA+ICsjaW5jbHVkZSA8c2VtYXBob3JlLmg+DQogICAgPiAr
I2luY2x1ZGUgPGVycm5vLmg+DQogICAgPiArI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiAgICA+
ICsjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPg0KICAgID4gKw0KICAgID4gKyNkZWZpbmUgX1NUQUNL
X1NJWkVfQURKVVNUTUVOVCAoMzIgKiAxMDI0KQ0KICAgID4gKw0KICAgID4gKy8qIFN0YWNrIHNp
emUgb2YgYXBwbGV0IG1hbmFnZXIgdGhyZWFkLiAgKi8NCiAgICA+ICsjZGVmaW5lIEJIX0FQUExF
VF9NQU5BR0VSX1RIUkVBRF9TVEFDS19TSVpFICg4ICogMTAyNCArIF9TVEFDS19TSVpFX0FESlVT
VE1FTlQpDQogICAgPiArDQogICAgPiArLyogU3RhY2sgc2l6ZSBvZiBITUMgdGhyZWFkLiAgKi8N
CiAgICA+ICsjZGVmaW5lIEJIX0hNQ19USFJFQURfU1RBQ0tfU0laRSAgICAgICAgICAgICg0ICog
MTAyNCArIF9TVEFDS19TSVpFX0FESlVTVE1FTlQpDQogICAgPiArDQogICAgPiArLyogU3RhY2sg
c2l6ZSBvZiB3YXRjaGRvZyB0aHJlYWQuICAqLw0KICAgID4gKyNkZWZpbmUgQkhfV0FUQ0hET0df
VEhSRUFEX1NJWkUgICAgICAgICAgICAgKDQgKiAxMDI0ICsgX1NUQUNLX1NJWkVfQURKVVNUTUVO
VCkNCiAgICA+ICsNCiAgICA+ICsvKiBTdGFjayBzaXplIG9mIGFwcGxldCB0aHJlYWRzJ3MgbmF0
aXZlIHBhcnQuICAqLw0KICAgID4gKyNkZWZpbmUgQkhfQVBQTEVUX1BSRVNFUlZFRF9TVEFDS19T
SVpFICAgICAgKDggKiAxMDI0ICsgX1NUQUNLX1NJWkVfQURKVVNUTUVOVCkNCiAgICA+ICsNCiAg
ICA+ICsvKiBTdGFjayBzaXplIG9mIHJlbW90ZSBpbnZva2UgbGlzdGVuIHRocmVhZC4gICovDQog
ICAgPiArI2RlZmluZSBCSF9SRU1PVEVfSU5WT0tFX1RIUkVBRF9TVEFDS19TSVpFICAoNCAqIDEw
MjQgKyBfU1RBQ0tfU0laRV9BREpVU1RNRU5UKQ0KICAgID4gKw0KICAgID4gKy8qIFN0YWNrIHNp
emUgb2YgcmVtb3RlIHBvc3QgbGlzdGVuIHRocmVhZC4gICovDQogICAgPiArI2RlZmluZSBCSF9S
RU1PVEVfUE9TVF9USFJFQURfU1RBQ0tfU0laRSAgICAoNCAqIDEwMjQgKyBfU1RBQ0tfU0laRV9B
REpVU1RNRU5UKQ0KICAgID4gKw0KICAgID4gKy8qIE1heGltYWwgcmVjdXJzaW9uIGRlcHRoIG9m
IGludGVycHJldGVyLiAgKi8NCiAgICA+ICsjZGVmaW5lIEJIX01BWF9JTlRFUlBfUkVDVVJTSU9O
X0RFUFRIICAgICAgIDgNCiAgICA+ICsNCiAgICA+ICsvKiBEZWZhdWx0IHRocmVhZCBwcmlvcml0
eSAqLw0KICAgID4gKyNkZWZpbmUgQkhfVEhSRUFEX0RFRkFVTFRfUFJJT1JJVFkgMA0KICAgID4g
Kw0KICAgID4gKyNkZWZpbmUgQkhfUk9VVElORV9NT0RJRklFUg0KICAgID4gKyNkZWZpbmUgQkhU
X1RJTUVET1VUIEVUSU1FRE9VVA0KICAgID4gKw0KICAgID4gKyNkZWZpbmUgSU5WQUxJRF9USFJF
QURfSUQgMHhGRmZmRkZmZg0KICAgID4gKyNkZWZpbmUgSU5WQUxJRF9TRU1fSUQgU0VNX0ZBSUxF
RA0KICAgID4gKw0KICAgID4gK3R5cGVkZWYgcHRocmVhZF90IGtvcnBfdGlkOw0KICAgID4gK3R5
cGVkZWYgcHRocmVhZF9tdXRleF90IGtvcnBfbXV0ZXg7DQogICAgPiArdHlwZWRlZiBzZW1fdCBr
b3JwX3NlbTsNCiAgICA+ICt0eXBlZGVmIHB0aHJlYWRfY29uZF90IGtvcnBfY29uZDsNCiAgICA+
ICt0eXBlZGVmIHB0aHJlYWRfdCBrb3JwX3RocmVhZDsNCiAgICA+ICt0eXBlZGVmIHZvaWQqICgq
dGhyZWFkX3N0YXJ0X3JvdXRpbmVfdCkodm9pZCopOw0KICAgID4gKw0KICAgID4gKyNkZWZpbmUg
d2FfbWFsbG9jIGJoX21hbGxvYw0KICAgID4gKyNkZWZpbmUgd2FfZnJlZSBiaF9mcmVlDQogICAg
PiArI2RlZmluZSB3YV9zdHJkdXAgYmhfc3RyZHVwDQogICAgPiArDQogICAgPiArZG91YmxlIGZt
b2QoZG91YmxlIHgsIGRvdWJsZSB5KTsNCiAgICA+ICtmbG9hdCBmbW9kZihmbG9hdCB4LCBmbG9h
dCB5KTsNCiAgICA+ICsNCiAgICA+ICsvKiBEZWZpbml0aW9ucyBmb3IgYXBwbGV0IGRlYnVnZ2lu
ZyAqLw0KICAgID4gKyNkZWZpbmUgQVBQTEVUX0RFQlVHX0xJU1RFTl9QT1JUIDgwMDANCiAgICA+
ICsjZGVmaW5lIEJIX1NPQ0tFVF9JTlZBTElEX1NPQ0sgLTENCiAgICA+ICsjZGVmaW5lIEJIX1dB
SVRfRk9SRVZFUiAweEZGRkZGRkZGDQogICAgPiArdHlwZWRlZiBpbnQgYmhfc29ja2V0X3Q7DQog
ICAgPiArDQogICAgPiArI2lmbmRlZiBOVUxMDQogICAgPiArIyAgZGVmaW5lIE5VTEwgKCh2b2lk
KikgMCkNCiAgICA+ICsjZW5kaWYNCiAgICA+ICsNCiAgICA+ICsjZGVmaW5lIGJoX2Fzc2VydCBh
c3NlcnQNCiAgICA+ICsNCiAgICA+ICtleHRlcm4gaW50IGJfbWVtY3B5X3Modm9pZCAqIHMxLCB1
bnNpZ25lZCBpbnQgczFtYXgsIGNvbnN0IHZvaWQgKiBzMiwNCiAgICA+ICsgICAgICAgIHVuc2ln
bmVkIGludCBuKTsNCiAgICA+ICtleHRlcm4gaW50IGJfc3RyY2F0X3MoY2hhciAqIHMxLCBzaXpl
X3QgczFtYXgsIGNvbnN0IGNoYXIgKiBzMik7DQogICAgPiArZXh0ZXJuIGludCBiX3N0cmNweV9z
KGNoYXIgKiBzMSwgc2l6ZV90IHMxbWF4LCBjb25zdCBjaGFyICogczIpOw0KICAgID4gK2V4dGVy
biBpbnQgZm9wZW5fcyhGSUxFICoqIHBGaWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qg
Y2hhciAqbW9kZSk7DQogICAgPiArDQogICAgPiArZXh0ZXJuIGNoYXIgKmJoX3N0cmR1cChjb25z
dCBjaGFyICpzKTsNCiAgICA+ICsNCiAgICA+ICsjaWZkZWYgX19jcGx1c3BsdXMNCiAgICA+ICt9
DQogICAgPiArI2VuZGlmDQogICAgPiArDQogICAgPiArI2VuZGlmDQogICAgPiBkaWZmIC0tZ2l0
IGEvbWFpbi5jIGIvbWFpbi5jDQogICAgDQogICAgU2VlbXMgdGhpcyBtYWluLmMgaXMgYWxzbyBm
cm9tIG9wZW5zb3VyY2UNCiAgICBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vaW50
ZWwvd2FzbS1taWNyby1ydW50aW1lL21hc3Rlci9jb3JlL2l3YXNtL3Byb2R1Y3RzL2xpbnV4L21h
aW4uYw0KICAgIEhvdyBhYm91dCBhbHNvIHVzZSB0aGUgd2F5IG9yaWdpbmFsICtwYXRjaD8NCg0K
U291bmRzIGdvb2QsIHdpbGwgZG8gaW4gdGhlIG5leHQgdmVyc2lvbi4NCiAgICANCiAgICA+IG5l
dyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwLi45MWYyMTQ4DQogICAgPiAt
LS0gL2Rldi9udWxsDQogICAgPiArKysgYi9tYWluLmMNCiAgICA+IEBAIC0wLDAgKzEsMjM2IEBA
DQogICAgPiArLyoNCiAgICA+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSW50ZWwgQ29ycG9yYXRp
b24uICBBbGwgcmlnaHRzIHJlc2VydmVkLg0KICAgID4gKyAqDQogICAgPiArICogTGljZW5zZWQg
dW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7DQog
ICAgPiArICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3
aXRoIHRoZSBMaWNlbnNlLg0KICAgID4gKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg
TGljZW5zZSBhdA0KICAgID4gKyAqDQogICAgPiArICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5v
cmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiAgICA+ICsgKg0KICAgID4gKyAqIFVubGVzcyByZXF1
aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUN
CiAgICA+ICsgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBv
biBhbiAiQVMgSVMiIEJBU0lTLA0KICAgID4gKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E
SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KICAgID4gKyAq
IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt
aXNzaW9ucyBhbmQNCiAgICA+ICsgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiAg
ICA+ICsgKi8NCiAgICA+ICsNCiAgICA+ICsjaWZuZGVmIF9HTlVfU09VUkNFDQogICAgPiArI2Rl
ZmluZSBfR05VX1NPVVJDRQ0KICAgID4gKyNlbmRpZg0KICAgID4gKyNpbmNsdWRlIDxzdGRsaWIu
aD4NCiAgICA+ICsjaW5jbHVkZSA8c3RyaW5nLmg+DQogICAgPiArI2luY2x1ZGUgImJoX3BsYXRm
b3JtLmgiDQogICAgPiArI2luY2x1ZGUgIndhc21fYXNzZXJ0LmgiDQogICAgPiArI2luY2x1ZGUg
Indhc21fbG9nLmgiDQogICAgPiArI2luY2x1ZGUgIndhc21fcGxhdGZvcm1fbG9nLmgiDQogICAg
PiArI2luY2x1ZGUgIndhc21fdGhyZWFkLmgiDQogICAgPiArI2luY2x1ZGUgIndhc21fZXhwb3J0
LmgiDQogICAgPiArI2luY2x1ZGUgIndhc21fbWVtb3J5LmgiDQogICAgPiArI2luY2x1ZGUgImJo
X21lbW9yeS5oIg0KICAgID4gKw0KICAgID4gKyNpbmNsdWRlIDx1ay9wbGF0L21lbW9yeS5oPg0K
ICAgID4gKw0KICAgID4gK3N0YXRpYyBpbnQgYXBwX2FyZ2M7DQogICAgPiArc3RhdGljIGNoYXIg
KiphcHBfYXJndjsNCiAgICA+ICsNCiAgICA+ICtzdGF0aWMgaW50IHByaW50X2hlbHAoKQ0KICAg
ID4gK3sNCiAgICA+ICsgICAgd2FzbV9wcmludGYoIlVzYWdlOiBpd2FzbSBbLW9wdGlvbnNdIHdh
c21fZmlsZSBbYXJncy4uLl1cbiIpOw0KICAgID4gKyAgICB3YXNtX3ByaW50Zigib3B0aW9uczpc
biIpOw0KICAgID4gKyAgICB3YXNtX3ByaW50ZigiICAtZnwtLWZ1bmN0aW9uIG5hbWUgICAgIFNw
ZWNpZnkgZnVuY3Rpb24gbmFtZSB0byBydW4gaW4gbW9kdWxlXG4iDQogICAgPiArICAgICAgICAg
ICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gbWFpblxuIik7DQog
ICAgPiArI2lmIFdBU01fRU5BQkxFX0xPRyAhPSAwDQogICAgPiArICAgIHdhc21fcHJpbnRmKCIg
IC12PVggICAgICAgICAgICAgICAgICAgU2V0IGxvZyB2ZXJib3NlIGxldmVsICgwIHRvIDIsIGRl
ZmF1bHQgaXMgMSksXG4iDQogICAgPiArICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAg
ICAgICAgICAgbGFyZ2VyIGxldmVsIHdpdGggbW9yZSBsb2dcbiIpOw0KICAgID4gKyNlbmRpZg0K
ICAgID4gKyAgICB3YXNtX3ByaW50ZigiICAtLXJlcGwgICAgICAgICAgICAgICAgIFN0YXJ0IGEg
dmVyeSBzaW1wbGUgUkVQTCAocmVhZC1ldmFsLXByaW50LWxvb3ApIG1vZGVcbiINCiAgICA+ICsg
ICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHJ1bnMgY29tbWFu
ZHMgaW4gdGhlIGZvcm0gb2YgYEZVTkMgQVJHLi4uYFxuIik7DQogICAgPiArICAgIHJldHVybiAx
Ow0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICtzdGF0aWMgdm9pZCoNCiAgICA+ICthcHBfaW5z
dGFuY2VfbWFpbih3YXNtX21vZHVsZV9pbnN0X3QgbW9kdWxlX2luc3QpDQogICAgPiArew0KICAg
ID4gKyAgICBjb25zdCBjaGFyICpleGNlcHRpb247DQogICAgPiArDQogICAgPiArICAgIHdhc21f
YXBwbGljYXRpb25fZXhlY3V0ZV9tYWluKG1vZHVsZV9pbnN0LCBhcHBfYXJnYywgYXBwX2FyZ3Yp
Ow0KICAgID4gKyAgICBpZiAoKGV4Y2VwdGlvbiA9IHdhc21fcnVudGltZV9nZXRfZXhjZXB0aW9u
KG1vZHVsZV9pbnN0KSkpDQogICAgPiArICAgICAgICB3YXNtX3ByaW50ZigiJXNcbiIsIGV4Y2Vw
dGlvbik7DQogICAgPiArICAgIHJldHVybiBOVUxMOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+
ICtzdGF0aWMgdm9pZCoNCiAgICA+ICthcHBfaW5zdGFuY2VfZnVuYyh3YXNtX21vZHVsZV9pbnN0
X3QgbW9kdWxlX2luc3QsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSkNCiAgICA+ICt7DQogICAgPiAr
ICAgIGNvbnN0IGNoYXIgKmV4Y2VwdGlvbjsNCiAgICA+ICsNCiAgICA+ICsgICAgd2FzbV9hcHBs
aWNhdGlvbl9leGVjdXRlX2Z1bmMobW9kdWxlX2luc3QsIGZ1bmNfbmFtZSwgYXBwX2FyZ2MgLSAx
LA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBfYXJndiArIDEp
Ow0KICAgID4gKyAgICBpZiAoKGV4Y2VwdGlvbiA9IHdhc21fcnVudGltZV9nZXRfZXhjZXB0aW9u
KG1vZHVsZV9pbnN0KSkpDQogICAgPiArICAgICAgICB3YXNtX3ByaW50ZigiJXNcbiIsIGV4Y2Vw
dGlvbik7DQogICAgPiArICAgIHJldHVybiBOVUxMOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+
ICsvKioNCiAgICA+ICsgKiBTcGxpdCBhIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmdzIGludG8gYW4g
YXJyYXkgb2Ygc3RyaW5ncw0KICAgID4gKyAqIFJldHVybnMgTlVMTCBvbiBmYWlsdXJlDQogICAg
PiArICogTWVtb3J5IG11c3QgYmUgZnJlZWQgYnkgY2FsbGVyDQogICAgPiArICogQmFzZWQgb246
IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzExMTk4NjMwLzQ3MTc5NQ0KICAgID4gKyAqLw0K
ICAgID4gK3N0YXRpYyBjaGFyICoqDQogICAgPiArc3BsaXRfc3RyaW5nKGNoYXIgKnN0ciwgaW50
ICpjb3VudCkNCiAgICA+ICt7DQogICAgPiArICAgIGNoYXIgKipyZXMgPSBOVUxMOw0KICAgID4g
KyAgICBjaGFyICpwOw0KICAgID4gKyAgICBpbnQgaWR4ID0gMDsNCiAgICA+ICsNCiAgICA+ICsg
ICAgLyogc3BsaXQgc3RyaW5nIGFuZCBhcHBlbmQgdG9rZW5zIHRvICdyZXMnICovDQogICAgPiAr
ICAgIGRvIHsNCiAgICA+ICsgICAgICAgIHAgPSBzdHJ0b2soc3RyLCAiICIpOw0KICAgID4gKyAg
ICAgICAgc3RyID0gTlVMTDsNCiAgICA+ICsgICAgICAgIHJlcyA9IChjaGFyKiopIHJlYWxsb2Mo
cmVzLCBzaXplb2YoY2hhciopICogKGlkeCArIDEpKTsNCiAgICA+ICsgICAgICAgIGlmIChyZXMg
PT0gTlVMTCkgew0KICAgID4gKyAgICAgICAgICAgIHJldHVybiBOVUxMOw0KICAgID4gKyAgICAg
ICAgfQ0KICAgID4gKyAgICAgICAgcmVzW2lkeCsrXSA9IHA7DQogICAgPiArICAgIH0gd2hpbGUg
KHApOw0KICAgID4gKw0KICAgID4gKyAgICBpZiAoY291bnQpIHsNCiAgICA+ICsgICAgICAgICpj
b3VudCA9IGlkeCAtIDE7DQogICAgPiArICAgIH0NCiAgICA+ICsgICAgcmV0dXJuIHJlczsNCiAg
ICA+ICt9DQogICAgPiArDQogICAgPiArc3RhdGljIHZvaWQqDQogICAgPiArYXBwX2luc3RhbmNl
X3JlcGwod2FzbV9tb2R1bGVfaW5zdF90IG1vZHVsZV9pbnN0KQ0KICAgID4gK3sNCiAgICA+ICsg
ICAgY2hhciAqY21kID0gTlVMTDsNCiAgICA+ICsgICAgc2l6ZV90IGxlbiA9IDA7DQogICAgPiAr
ICAgIHNzaXplX3QgbjsNCiAgICA+ICsNCiAgICA+ICsgICAgd2hpbGUgKCh3YXNtX3ByaW50Zigi
d2ViYXNzZW1ibHk+ICIpLCBuID0gZ2V0bGluZSgmY21kLCAmbGVuLCBzdGRpbikpICE9IC0xKSB7
DQogICAgPiArICAgICAgICB3YXNtX2Fzc2VydChuID4gMCk7DQogICAgPiArICAgICAgICBpZiAo
Y21kW24gLSAxXSA9PSAnXG4nKSB7DQogICAgPiArICAgICAgICAgICAgaWYgKG4gPT0gMSkNCiAg
ICA+ICsgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgPiArICAgICAgICAgICAgZWxzZQ0K
ICAgID4gKyAgICAgICAgICAgICAgICBjbWRbbiAtIDFdID0gJ1wwJzsNCiAgICA+ICsgICAgICAg
IH0NCiAgICA+ICsgICAgICAgIGFwcF9hcmd2ID0gc3BsaXRfc3RyaW5nKGNtZCwgJmFwcF9hcmdj
KTsNCiAgICA+ICsgICAgICAgIGlmIChhcHBfYXJndiA9PSBOVUxMKSB7DQogICAgPiArICAgICAg
ICAgICAgTE9HX0VSUk9SKCJXYXNtIHByZXBhcmUgcGFyYW0gZmFpbGVkOiBzcGxpdCBzdHJpbmcg
ZmFpbGVkLlxuIik7DQogICAgPiArICAgICAgICAgICAgYnJlYWs7DQogICAgPiArICAgICAgICB9
DQogICAgPiArICAgICAgICBpZiAoYXBwX2FyZ2MgIT0gMCkgew0KICAgID4gKyAgICAgICAgICAg
IHdhc21fYXBwbGljYXRpb25fZXhlY3V0ZV9mdW5jKG1vZHVsZV9pbnN0LCBhcHBfYXJndlswXSwN
CiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBfYXJn
YyAtIDEsIGFwcF9hcmd2ICsgMSk7DQogICAgPiArICAgICAgICB9DQogICAgPiArICAgICAgICBm
cmVlKGFwcF9hcmd2KTsNCiAgICA+ICsgICAgfQ0KICAgID4gKyAgICBmcmVlKGNtZCk7DQogICAg
PiArICAgIHJldHVybiBOVUxMOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+ICtzdGF0aWMgY2hh
ciBnbG9iYWxfaGVhcF9idWZbNTEyICogMTAyNF0gPSB7IDAgfTsNCiAgICA+ICsNCiAgICA+ICtp
bnQgd2FzbV9tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQogICAgPiArew0KICAgID4gKyAg
ICBjaGFyICp3YXNtX2ZpbGUgPSBOVUxMOw0KICAgID4gKyAgICBjb25zdCBjaGFyICpmdW5jX25h
bWUgPSBOVUxMOw0KICAgID4gKyAgICB1aW50OCAqd2FzbV9maWxlX2J1ZiA9IE5VTEw7DQogICAg
PiArICAgIGludCB3YXNtX2ZpbGVfc2l6ZTsNCiAgICA+ICsgICAgd2FzbV9tb2R1bGVfdCB3YXNt
X21vZHVsZSA9IE5VTEw7DQogICAgPiArICAgIHdhc21fbW9kdWxlX2luc3RfdCB3YXNtX21vZHVs
ZV9pbnN0ID0gTlVMTDsNCiAgICA+ICsgICAgY2hhciBlcnJvcl9idWZbMTI4XTsNCiAgICA+ICsj
aWYgV0FTTV9FTkFCTEVfTE9HICE9IDANCiAgICA+ICsgICAgaW50IGxvZ192ZXJib3NlX2xldmVs
ID0gMTsNCiAgICA+ICsjZW5kaWYNCiAgICA+ICsgICAgYm9vbCBpc19yZXBsX21vZGUgPSBmYWxz
ZTsNCiAgICA+ICsNCiAgICA+ICsgICAgLyogUHJvY2VzcyBvcHRpb25zLiAgKi8NCiAgICA+ICsg
ICAgZm9yIChhcmdjLS0sIGFyZ3YrKzsgYXJnYyA+IDAgJiYgYXJndlswXVswXSA9PSAnLSc7IGFy
Z2MtLSwgYXJndisrKSB7DQogICAgPiArICAgICAgICBpZiAoIXN0cmNtcChhcmd2WzBdLCAiLWYi
KSB8fCAhc3RyY21wKGFyZ3ZbMF0sICItLWZ1bmN0aW9uIikpIHsNCiAgICA+ICsgICAgICAgICAg
ICBhcmdjLS0sIGFyZ3YrKzsNCiAgICA+ICsgICAgICAgICAgICBmdW5jX25hbWUgPSBhcmd2WzBd
Ow0KICAgID4gKyAgICAgICAgfQ0KICAgID4gKyNpZiBXQVNNX0VOQUJMRV9MT0cgIT0gMA0KICAg
ID4gKyAgICAgICAgZWxzZSBpZiAoIXN0cm5jbXAoYXJndlswXSwgIi12PSIsIDMpKSB7DQogICAg
PiArICAgICAgICAgICAgbG9nX3ZlcmJvc2VfbGV2ZWwgPSBhdG9pKGFyZ3ZbMF0gKyAzKTsNCiAg
ICA+ICsgICAgICAgICAgICBpZiAobG9nX3ZlcmJvc2VfbGV2ZWwgPCAwIHx8IGxvZ192ZXJib3Nl
X2xldmVsID4gMikNCiAgICA+ICsgICAgICAgICAgICAgICAgcmV0dXJuIHByaW50X2hlbHAoKTsN
CiAgICA+ICsgICAgICAgIH0NCiAgICA+ICsjZW5kaWYNCiAgICA+ICsNCiAgICA+ICsgICAgICAg
IGVsc2UgaWYgKCFzdHJjbXAoYXJndlswXSwgIi0tcmVwbCIpKQ0KICAgID4gKyAgICAgICAgICAg
IGlzX3JlcGxfbW9kZSA9IHRydWU7DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAg
d2FzbV9maWxlID0gYXJndlswXTsNCiAgICA+ICsgICAgYXBwX2FyZ2MgPSBhcmdjOw0KICAgID4g
KyAgICBhcHBfYXJndiA9IGFyZ3Y7DQogICAgPiArDQogICAgPiArICAgIGlmIChiaF9tZW1vcnlf
aW5pdF93aXRoX3Bvb2woZ2xvYmFsX2hlYXBfYnVmLCBzaXplb2YoZ2xvYmFsX2hlYXBfYnVmKSkN
CiAgICA+ICsgICAgICAgICE9IDApIHsNCiAgICA+ICsgICAgICAgIHdhc21fcHJpbnRmKCJJbml0
IGdsb2JhbCBoZWFwIGZhaWxlZC5cbiIpOw0KICAgID4gKyAgICAgICAgcmV0dXJuIC0xOw0KICAg
ID4gKyAgICB9DQogICAgPiArDQogICAgPiArICAgIC8qIGluaXRpYWxpemUgcnVudGltZSBlbnZp
cm9ubWVudCAqLw0KICAgID4gKyAgICBpZiAoIXdhc21fcnVudGltZV9pbml0KCkpDQogICAgPiAr
ICAgICAgICBnb3RvIGZhaWwxOw0KICAgID4gKw0KICAgID4gKyAgICB3YXNtX2xvZ19zZXRfdmVy
Ym9zZV9sZXZlbChsb2dfdmVyYm9zZV9sZXZlbCk7DQogICAgPiArDQogICAgPiArICAgIC8qIGxv
YWQgZnJvbSBpbml0cmQgKi8NCiAgICA+ICsgICAgc3RydWN0IHVrcGxhdF9tZW1yZWdpb25fZGVz
YyBpbWc7DQogICAgPiArICAgIGlmICh1a3BsYXRfbWVtcmVnaW9uX2ZpbmRfaW5pdHJkMCgmaW1n
KSA+PSAwKSB7DQogICAgDQogICAgWW91J2QgYmV0dGVyIGhhbmRsZSB0aGUgY2FzZSB1a3BsYXRf
bWVtcmVnaW9uX2ZpbmRfaW5pdHJkMCgmaW1nKTwwDQogICAgT3RoZXJ3aXNlIHlvdSB3aWxsIGV4
cG9zZSBsYXR0ZXIgY29kZXMgd2l0aCBOVUxMIHdhc21fbW9kdWxlDQoNCk9rLCB0aGFua3MsIHdp
bGwgZml4Lg0KDQotLSBGZWxpcGUNCiAgICANCiAgICAtLS0NCiAgICBDaGVlcnMsDQogICAgSnVz
dGluIChKaWEgSGUpDQogICAgDQogICAgPiArICAgICAgd2FzbV9maWxlX2J1ZiA9ICh1aW50OCop
aW1nLmJhc2U7DQogICAgPiArICAgICAgd2FzbV9maWxlX3NpemUgPSBpbWcubGVuOw0KICAgID4g
Kw0KICAgID4gKyAgICAgIC8qIGxvYWQgV0FTTSBtb2R1bGUgKi8NCiAgICA+ICsgICAgICBpZiAo
ISh3YXNtX21vZHVsZSA9IHdhc21fcnVudGltZV9sb2FkKHdhc21fZmlsZV9idWYsIHdhc21fZmls
ZV9zaXplLA0KICAgID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXJyb3JfYnVmLCBzaXplb2YoZXJyb3JfYnVmKSkpKSB7DQogICAgPiArICAgICAgICAgIHdh
c21fcHJpbnRmKCIlc1xuIiwgZXJyb3JfYnVmKTsNCiAgICA+ICsgICAgICAgICAgZ290byBmYWls
MzsNCiAgICA+ICsgICAgICB9DQogICAgPiArDQogICAgPiArICAgICAgLyogaW5zdGFudGlhdGUg
dGhlIG1vZHVsZSAqLw0KICAgID4gKyAgICAgIGlmICghKHdhc21fbW9kdWxlX2luc3QgPSB3YXNt
X3J1bnRpbWVfaW5zdGFudGlhdGUod2FzbV9tb2R1bGUsDQogICAgPiArICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAqIDEwMjQsIC8qIHN0
YWNrIHNpemUgKi8NCiAgICA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDggKiAxMDI0LCAgLyogaGVhcCBzaXplICovDQogICAgPiArICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJv
cl9idWYsDQogICAgPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplb2YoZXJyb3JfYnVmKSkpKSB7DQogICAgPiArICAgICAgICAgIHdh
c21fcHJpbnRmKCIlc1xuIiwgZXJyb3JfYnVmKTsNCiAgICA+ICsgICAgICAgICAgZ290byBmYWls
NDsNCiAgICA+ICsgICAgICB9DQogICAgPiArICAgIH0NCiAgICA+ICsNCiAgICA+ICsgICAgaWYg
KGlzX3JlcGxfbW9kZSkgew0KICAgID4gKyAgICAgICAgcHJpbnRmKCJFbnRlcmluZyBSRVBMIG1v
ZGUuLi5cbiIpOw0KICAgID4gKyAgICAgICAgYXBwX2luc3RhbmNlX3JlcGwod2FzbV9tb2R1bGVf
aW5zdCk7DQogICAgPiArICAgIH0NCiAgICA+ICsgICAgZWxzZSBpZiAoZnVuY19uYW1lKQ0KICAg
ID4gKyAgICAgICAgYXBwX2luc3RhbmNlX2Z1bmMod2FzbV9tb2R1bGVfaW5zdCwgZnVuY19uYW1l
KTsNCiAgICA+ICsgICAgZWxzZQ0KICAgID4gKyAgICAgICAgYXBwX2luc3RhbmNlX21haW4od2Fz
bV9tb2R1bGVfaW5zdCk7DQogICAgPiArDQogICAgPiArICAgIC8qIGRlc3Ryb3kgdGhlIG1vZHVs
ZSBpbnN0YW5jZSAqLw0KICAgID4gKyAgICB3YXNtX3J1bnRpbWVfZGVpbnN0YW50aWF0ZSh3YXNt
X21vZHVsZV9pbnN0KTsNCiAgICA+ICsNCiAgICA+ICtmYWlsNDoNCiAgICA+ICsgICAgLyogdW5s
b2FkIHRoZSBtb2R1bGUgKi8NCiAgICA+ICsgICAgd2FzbV9ydW50aW1lX3VubG9hZCh3YXNtX21v
ZHVsZSk7DQogICAgPiArDQogICAgPiArZmFpbDM6DQogICAgPiArICAgIC8qIGZyZWUgdGhlIGZp
bGUgYnVmZmVyICovDQogICAgPiArICAgIHdhc21fZnJlZSh3YXNtX2ZpbGVfYnVmKTsNCiAgICA+
ICsNCiAgICA+ICtmYWlsMjoNCiAgICA+ICsgICAgLyogZGVzdHJveSBydW50aW1lIGVudmlyb25t
ZW50ICovDQogICAgPiArICAgIHdhc21fcnVudGltZV9kZXN0cm95KCk7DQogICAgPiArDQogICAg
PiArZmFpbDE6DQogICAgPiArICAgIGJoX21lbW9yeV9kZXN0cm95KCk7DQogICAgPiArICAgIHJl
dHVybiAwOw0KICAgID4gK30NCiAgICA+ICsNCiAgICA+IGRpZmYgLS1naXQgYS9wYXRjaGVzLzAw
MDEtd2FzbS1sb2ctZml4LXB0aHJlYWQtZW1iZWRkZWQtcHRocmVhZC10LXR5cGUucGF0Y2ggYi9w
YXRjaGVzLzAwMDEtd2FzbS1sb2ctZml4LXB0aHJlYWQtZW1iZWRkZWQtcHRocmVhZC10LXR5cGUu
cGF0Y2gNCiAgICA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgPiBpbmRleCAwMDAwMDAwLi44
NjMwNTM5DQogICAgPiAtLS0gL2Rldi9udWxsDQogICAgPiArKysgYi9wYXRjaGVzLzAwMDEtd2Fz
bS1sb2ctZml4LXB0aHJlYWQtZW1iZWRkZWQtcHRocmVhZC10LXR5cGUucGF0Y2gNCiAgICA+IEBA
IC0wLDAgKzEsMTUgQEANCiAgICA+ICstLS0gL2NvcmUvaXdhc20vcnVudGltZS91dGlscy93YXNt
X2xvZy5jLm9yaWcJMjAxOS0wNy0zMCAxMDowMTo0Ni43MTUyMTczMjkgKzAyMDANCiAgICA+ICsr
KysgL2NvcmUvaXdhc20vcnVudGltZS91dGlscy93YXNtX2xvZy5jCTIwMTktMDctMzAgMTA6MDc6
MjYuODkxNzQ2MzU5ICswMjAwDQogICAgPiArQEAgLTU3LDggKzU3LDExIEBADQogICAgPiArICAg
LyogVHJ5IHRvIG93biB0aGUgbG9nIHN0cmVhbSBhbmQgc3RhcnQgdGhlIGxvZyBvdXRwdXQuICAq
Lw0KICAgID4gKyAgIHdzX211dGV4X2xvY2sgKCZsb2dfc3RyZWFtX2xvY2spOw0KICAgID4gKyAg
IHNlbGYgPSB3c19zZWxmX3RocmVhZCAoKTsNCiAgICA+ICsrI2lmZGVmIENPTkZJR19MSUJQVEhS
RUFEX0VNQkVEREVEDQogICAgPiArKyAgd2FzbV9wcmludGYgKCJbJVhdOiAiLCAoaW50KXNlbGYu
cCk7DQogICAgPiArKyNlbHNlDQogICAgPiArICAgd2FzbV9wcmludGYgKCJbJVhdOiAiLCAoaW50
KXNlbGYpOw0KICAgID4gKy0NCiAgICA+ICsrI2VuZGlmDQogICAgPiArICAgcmV0dXJuIHRydWU7
DQogICAgPiArIH0NCiAgICA+ICsNCiAgICA+IGRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDItYmgt
dGhyZWFkLWZpeC1wdGhyZWFkLWVtYmVkZGVkLXB0aHJlYWQtdC10eXBlLnBhdGNoIGIvcGF0Y2hl
cy8wMDAyLWJoLXRocmVhZC1maXgtcHRocmVhZC1lbWJlZGRlZC1wdGhyZWFkLXQtdHlwZS5wYXRj
aA0KICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjcxMDFj
ZTINCiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKyBiL3BhdGNoZXMvMDAwMi1iaC10aHJl
YWQtZml4LXB0aHJlYWQtZW1iZWRkZWQtcHRocmVhZC10LXR5cGUucGF0Y2gNCiAgICA+IEBAIC0w
LDAgKzEsMTYgQEANCiAgICA+ICstLS0gL2NvcmUvc2hhcmVkLWxpYi9wbGF0Zm9ybS9saW51eC9i
aF90aHJlYWQuYy5vcmlnCTIwMTktMDctMzAgMTA6MDg6MjEuMjQzMTkxNjg4ICswMjAwDQogICAg
PiArKysrIC9jb3JlL3NoYXJlZC1saWIvcGxhdGZvcm0vbGludXgvYmhfdGhyZWFkLmMJMjAxOS0w
Ny0zMCAxMDowODo1NS4xMTA4NDYyNzggKzAyMDANCiAgICA+ICtAQCAtOTMsOCArOTMsMTIgQEAN
CiAgICA+ICsgICAgIGJoX2Fzc2VydCh0aWQpOw0KICAgID4gKyAgICAgYmhfYXNzZXJ0KHN0YXJ0
KTsNCiAgICA+ICsNCiAgICA+ICsrI2lmZGVmIENPTkZJR19MSUJQVEhSRUFEX0VNQkVEREVEDQog
ICAgPiArKyAgICB0aWQtPnAgPSBJTlZBTElEX1RIUkVBRF9JRDsNCiAgICA+ICsrI2Vsc2UNCiAg
ICA+ICsgICAgICp0aWQgPSBJTlZBTElEX1RIUkVBRF9JRDsNCiAgICA+ICstDQogICAgPiArKyNl
bmRpZg0KICAgID4gKysNCiAgICA+ICsgICAgIHB0aHJlYWRfYXR0cl9pbml0KCZ0YXR0cik7DQog
ICAgPiArICAgICBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJnRhdHRyLCBQVEhSRUFEX0NS
RUFURV9KT0lOQUJMRSk7DQogICAgPiArICAgICBpZiAocHRocmVhZF9hdHRyX3NldHN0YWNrc2l6
ZSgmdGF0dHIsIHN0YWNrX3NpemUpICE9IDApIHsNCiAgICA+IGRpZmYgLS1naXQgYS9wYXRjaGVz
LzAwMDMtYmgtdGhyZWFkLXVzZS13YXNtLWxvZy1pbnN0ZWFkb2YtYmgtbG9nLnBhdGNoIGIvcGF0
Y2hlcy8wMDAzLWJoLXRocmVhZC11c2Utd2FzbS1sb2ctaW5zdGVhZG9mLWJoLWxvZy5wYXRjaA0K
ICAgID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICA+IGluZGV4IDAwMDAwMDAuLjZhNWU5MjMN
CiAgICA+IC0tLSAvZGV2L251bGwNCiAgICA+ICsrKyBiL3BhdGNoZXMvMDAwMy1iaC10aHJlYWQt
dXNlLXdhc20tbG9nLWluc3RlYWRvZi1iaC1sb2cucGF0Y2gNCiAgICA+IEBAIC0wLDAgKzEsMTEg
QEANCiAgICA+ICstLS0gL2NvcmUvc2hhcmVkLWxpYi9wbGF0Zm9ybS9saW51eC9iaF90aHJlYWQu
Yy5vcmlnCTIwMTktMDctMzAgMTE6MTA6NTcuODg0ODIxNTA4ICswMjAwDQogICAgPiArKysrIC9j
b3JlL3NoYXJlZC1saWIvcGxhdGZvcm0vbGludXgvYmhfdGhyZWFkLmMJMjAxOS0wNy0zMCAxMTox
MTo1NC40OTIyNDQ3ODcgKzAyMDANCiAgICA+ICtAQCAtMTYsNyArMTYsNyBAQA0KICAgID4gKw0K
ICAgID4gKyAjaW5jbHVkZSAiYmhfdGhyZWFkLmgiDQogICAgPiArICNpbmNsdWRlICJiaF9hc3Nl
cnQuaCINCiAgICA+ICstI2luY2x1ZGUgImJoX2xvZy5oIg0KICAgID4gKysjaW5jbHVkZSAid2Fz
bV9sb2cuaCINCiAgICA+ICsgI2luY2x1ZGUgImJoX21lbW9yeS5oIg0KICAgID4gKyAjaW5jbHVk
ZSA8c3RkaW8uaD4NCiAgICA+ICsgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgIA0KICAgIA0KICAg
IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQogICAgTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdA0KICAgIE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZw0KICAgIGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWwNCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 07:33:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 07:33:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCfKd-0002QW-2A; Tue, 24 Sep 2019 07:33:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=4Xx+=XT=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iCfKc-0002QH-27
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 07:33:54 +0000
X-Inumbo-ID: a83d0cc4-de9d-11e9-978d-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id a83d0cc4-de9d-11e9-978d-bc764e2007e4;
 Tue, 24 Sep 2019 07:33:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 130F3F201A;
 Tue, 24 Sep 2019 09:33:52 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id yzIdJWGKYJHu; Tue, 24 Sep 2019 09:33:51 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B8F93F2018;
 Tue, 24 Sep 2019 09:33:47 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 09:33:47 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Tue, 24 Sep 2019 09:33:47
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Jia He <jiakernel2@gmail.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 3/3] Export symbols
Thread-Index: AQHVXfTQ8Z1QyU5AtEa+NeXMVbhIUacwvuEAgAnaAoA=
Date: Tue, 24 Sep 2019 07:33:47 +0000
Message-ID: <4779E663-0AB7-4BFE-AD86-5500F1616C29@neclab.eu>
References: <20190828230327.9157-1-felipe.huici@neclab.eu>
 <20190828230327.9157-4-felipe.huici@neclab.eu>
 <f794fa06-cdcc-baf6-a462-e13aee574a41@gmail.com>
In-Reply-To: <f794fa06-cdcc-baf6-a462-e13aee574a41@gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <2689AE7F76204842B46A8708D1542F36@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBWAMR PATCH 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Tm8gcHJvYmxlbSwgSSdsbCBmaXggdGhhdCBpbiB0aGUgbmV4dCB2ZXJzaW9uLg0KDQotLSBGZWxp
cGUNCg0K77u/T24gMTguMDkuMTksIDA1OjA3LCAiTWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBK
aWEgSGUiIDxtaW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZyBvbiBiZWhh
bGYgb2Ygamlha2VybmVsMkBnbWFpbC5jb20+IHdyb3RlOg0KDQogICAgU29ycnksIGEgbml0IGlu
bGluZQ0KICAgIA0KICAgIE9uIDIwMTkvOC8yOSA3OjAzLCBGZWxpcGUgSHVpY2kgd3JvdGU6DQog
ICAgPiBGb3Igbm93IHdlIGV4cG9ydCBhbGwgd2FzbV8qIHN5bWJvbHMsIGluY2x1ZGUgbHVhX21h
aW4gZm9yIHRoZSBtYWluDQogICAgDQogICAgcy9sdWFfbWFpbi93YXNtX21haW4NCiAgICANCiAg
ICAtLS0NCiAgICBDaGVlcnMsDQogICAgSnVzdGluIChKaWEgSGUpDQogICAgDQogICAgPiBsb29w
DQogICAgPg0KICAgID4gU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lA
bmVjbGFiLmV1Pg0KICAgID4gLS0tDQogICAgPiAgIGV4cG9ydHN5bXMudWsgfCA2NCArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQ0KICAg
ID4gICAxIGZpbGUgY2hhbmdlZCwgNjMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KICAg
ID4NCiAgICA+IGRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51aw0KICAg
ID4gaW5kZXggYzg2YzNmMy4uMTNkNjNjNCAxMDA2NDQNCiAgICA+IC0tLSBhL2V4cG9ydHN5bXMu
dWsNCiAgICA+ICsrKyBiL2V4cG9ydHN5bXMudWsNCiAgICA+IEBAIC0xICsxLDYzIEBADQogICAg
PiAtbm9uZQ0KICAgID4gXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlDQogICAgPiArd2FzbV9h
cHBsaWNhdGlvbl9leGVjdXRlX2Z1bmMNCiAgICA+ICt3YXNtX2FwcGxpY2F0aW9uX2V4ZWN1dGVf
bWFpbg0KICAgID4gK3dhc21fZGxzeW0NCiAgICA+ICt3YXNtX2hhc2hfbWFwX2NyZWF0ZQ0KICAg
ID4gK3dhc21faGFzaF9tYXBfZGVzdHJveQ0KICAgID4gK3dhc21faGFzaF9tYXBfZmluZA0KICAg
ID4gK3dhc21faGFzaF9tYXBfaW5zZXJ0DQogICAgPiArd2FzbV9oYXNoX21hcF9yZW1vdmUNCiAg
ICA+ICt3YXNtX2hhc2hfbWFwX3VwZGF0ZQ0KICAgID4gK3dhc21faW50ZXJwX2NhbGxfZnVuY19i
eXRlY29kZQ0KICAgID4gK3dhc21faW50ZXJwX2NhbGxfZnVuY19uYXRpdmUNCiAgICA+ICt3YXNt
X2ludGVycF9jYWxsX3dhc20NCiAgICA+ICt3YXNtX2xvYWRlcl9maW5kX2Jsb2NrX2FkZHINCiAg
ICA+ICt3YXNtX2xvYWRlcl9sb2FkDQogICAgPiArd2FzbV9sb2FkZXJfbG9hZF9mcm9tX3NlY3Rp
b25zDQogICAgPiArd2FzbV9sb2FkZXJfcHJlcGFyZV9ieXRlY29kZQ0KICAgID4gK3dhc21fbG9h
ZGVyX3VubG9hZA0KICAgID4gK3dhc21fbWFpbg0KICAgID4gK3dhc21fbmF0aXZlX2Z1bmNfbG9v
a3VwDQogICAgPiArd2FzbV9uYXRpdmVfZ2xvYmFsX2xvb2t1cA0KICAgID4gK3dhc21fbmF0aXZl
X2luaXQNCiAgICA+ICt3YXNtX3BsYXRmb3JtX25hdGl2ZV9mdW5jX2xvb2t1cA0KICAgID4gK3dh
c21fcnVudGltZV9hZGRyX2FwcF90b19uYXRpdmUNCiAgICA+ICt3YXNtX3J1bnRpbWVfYWRkcl9h
cHBfdG9fbmF0aXZlX3dyYXBwZXINCiAgICA+ICt3YXNtX3J1bnRpbWVfYWRkcl9uYXRpdmVfdG9f
YXBwDQogICAgPiArd2FzbV9ydW50aW1lX2FkZHJfbmF0aXZlX3RvX2FwcF93cmFwcGVyDQogICAg
PiArd2FzbV9ydW50aW1lX2F0dGFjaF9jdXJyZW50X3RocmVhZA0KICAgID4gK3dhc21fcnVudGlt
ZV9jYWxsX3dhc20NCiAgICA+ICt3YXNtX3J1bnRpbWVfY2xlYXJfZXhjZXB0aW9uDQogICAgPiAr
d2FzbV9ydW50aW1lX2NyZWF0ZV9leGVjX2Vudg0KICAgID4gK3dhc21fcnVudGltZV9kZWluc3Rh
bnRpYXRlDQogICAgPiArd2FzbV9ydW50aW1lX2Rlc3RvcnlfZXhlY19lbnYNCiAgICA+ICt3YXNt
X3J1bnRpbWVfZGVzdHJveQ0KICAgID4gK3dhc21fcnVudGltZV9kZXRhY2hfY3VycmVudF90aHJl
YWQNCiAgICA+ICt3YXNtX3J1bnRpbWVfZW5sYXJnZV9tZW1vcnkNCiAgICA+ICt3YXNtX3J1bnRp
bWVfZ2V0X2FwcF9hZGRyX3JhbmdlDQogICAgPiArd2FzbV9ydW50aW1lX2dldF9jdXJyZW50X21v
ZHVsZV9pbnN0DQogICAgPiArd2FzbV9ydW50aW1lX2dldF9jdXJyZW50X21vZHVsZV9pbnN0X3dy
YXBwZXINCiAgICA+ICt3YXNtX3J1bnRpbWVfZ2V0X2N1cnJlbnRfdGhyZWFkX2RhdGENCiAgICA+
ICt3YXNtX3J1bnRpbWVfZ2V0X2V4Y2VwdGlvbg0KICAgID4gK3dhc21fcnVudGltZV9nZXRfbGx2
bV9zdGFjaw0KICAgID4gK3dhc21fcnVudGltZV9nZXRfbmF0aXZlX2FkZHJfcmFuZ2UNCiAgICA+
ICt3YXNtX3J1bnRpbWVfZ2V0X3RlbXBfcmV0DQogICAgPiArd2FzbV9ydW50aW1lX2luaXQNCiAg
ICA+ICt3YXNtX3J1bnRpbWVfaW5zdGFudGlhdGUNCiAgICA+ICt3YXNtX3J1bnRpbWVfbG9hZA0K
ICAgID4gK3dhc21fcnVudGltZV9sb2FkX2FvdA0KICAgID4gK3dhc21fcnVudGltZV9sb2FkX2Zy
b21fc2VjdGlvbnMNCiAgICA+ICt3YXNtX3J1bnRpbWVfbG9va3VwX2Z1bmN0aW9uDQogICAgPiAr
d2FzbV9ydW50aW1lX21vZHVsZV9kdXBfZGF0YQ0KICAgID4gK3dhc21fcnVudGltZV9tb2R1bGVf
ZnJlZQ0KICAgID4gK3dhc21fcnVudGltZV9tb2R1bGVfbWFsbG9jDQogICAgPiArd2FzbV9ydW50
aW1lX3NldF9leGNlcHRpb24NCiAgICA+ICt3YXNtX3J1bnRpbWVfc2V0X2V4Y2VwdGlvbi5wYXJ0
LjUNCiAgICA+ICt3YXNtX3J1bnRpbWVfc2V0X2xsdm1fc3RhY2sNCiAgICA+ICt3YXNtX3J1bnRp
bWVfc2V0X3RlbXBfcmV0DQogICAgPiArd2FzbV9ydW50aW1lX3VubG9hZA0KICAgID4gK3dhc21f
cnVudGltZV92YWxpZGF0ZV9hcHBfYWRkcg0KICAgID4gK3dhc21fcnVudGltZV92YWxpZGF0ZV9h
cHBfYWRkcl93cmFwcGVyDQogICAgPiArd2FzbV9ydW50aW1lX3ZhbGlkYXRlX25hdGl2ZV9hZGRy
DQogICAgPiArd2FzbV9ydW50aW1lX3ZhbGlkYXRlX25hdGl2ZV9hZGRyX3dyYXBwZXINCiAgICA+
ICt3YXNtX3N0cmluZ19lcXVhbA0KICAgID4gK3dhc21fc3RyaW5nX2hhc2gNCiAgICANCiAgICAt
LSANCiAgICANCiAgICANCiAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXw0KICAgIE1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QNCiAgICBNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcNCiAgICBodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVsDQoNCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 07:44:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 07:44:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCfUz-0003Ln-8G; Tue, 24 Sep 2019 07:44:37 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=36C+=XT=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iCfUy-0003Lg-0A
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 07:44:36 +0000
X-Inumbo-ID: 2510c80c-de9f-11e9-978d-bc764e2007e4
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (unknown
 [40.107.3.70]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 2510c80c-de9f-11e9-978d-bc764e2007e4;
 Tue, 24 Sep 2019 07:44:32 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=odDj0WvHrpObgSlKfB29bnf1zDauBiLDj+pirPuHxJE=;
 b=V6R5YgjQI7kQzN6lsjDQhxa5M++Ixs1cMEI3fFQ+xn/JZ10ClTrqv60L05aeJ4EFAbcDOIA/yjocXZ4VD7MIfF0g1QXGNEeZa82omTH9Zq5XenuvFUNO/iMEuwwesuxLiIo2ob0JW+XXFvVvVVr7rGNBbo7mhFteXb56qkqIR4o=
Received: from VI1PR08CA0091.eurprd08.prod.outlook.com (2603:10a6:800:d3::17)
 by AM6PR08MB4535.eurprd08.prod.outlook.com (2603:10a6:20b:74::14)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.21; Tue, 24 Sep
 2019 07:44:28 +0000
Received: from DB5EUR03FT054.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::201) by VI1PR08CA0091.outlook.office365.com
 (2603:10a6:800:d3::17) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.22 via Frontend
 Transport; Tue, 24 Sep 2019 07:44:28 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT054.mail.protection.outlook.com (10.152.20.248) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.20 via Frontend Transport; Tue, 24 Sep 2019 07:44:26 +0000
Received: ("Tessian outbound 55d20e99e8e2:v31");
 Tue, 24 Sep 2019 07:44:24 +0000
X-CR-MTA-TID: 64aa7808
Received: from 966bf86718a8.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.9.50]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 33C20883-9579-4AFB-918D-6B8212AC4495.1; 
 Tue, 24 Sep 2019 07:44:19 +0000
Received: from EUR03-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur03lp2050.outbound.protection.outlook.com [104.47.9.50])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 966bf86718a8.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 24 Sep 2019 07:44:19 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=B7M1l3QuxjFKJ01v7DlA4BekhUZsVwiYqaFTIyrJvTtNULyW5qJcAUQAo3VlcUGC2ZpeYjvlt0dTd+JIEy+3ufNaeFnofFxuMQEFs0HfO2SwlMhNZsXJZz2IfNDKKmBdlEiObWZAXzNTH9Gixm88x0SEwLlPsq4W5wnnh7BZSemGRGjH9D7QrDGPC0LIUhc1K6RLJP6ghlrvgmmAAErhK9EcA2XpjctVAjkzBPnco9TqZzc2IsVlGg2VTzIf6uiRKyrkRXUxGalS22+XThZz5y01V+hEOlB2ndSe+8DOYzsS8JJZKt46Gogx21Zf4gvD5sMQpRyLIqFyOytg0p/2PA==
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=odDj0WvHrpObgSlKfB29bnf1zDauBiLDj+pirPuHxJE=;
 b=O8KBav2A3tJJkq7OHNB4rOIPXjO5/quo1ED/2w0m8PQDUfdVv5HcdmAJ7OdhlbRkdYOfZmNTtCPcRFMiOTRhhfLpuieGzkH3hssWvwka/hAt98YEAG6fLhuddyefSoZAr/jXyzjgG8UJBRkQF4jdK0BsbosaIhqTtdEgEby0oXPkoScrBouQ+Xe4kPR8FWWOsZC8q8dTLK8oyMXMyg+riCQSQEyISI0jKWEQqhOeC+unFT68JdhXmT9ii8rNNj8obv46Sf5SrLEdwdX85+3D+yLBNnDKCrn1NUJPARZ0A18QCYekCtFhYu39L1JtEvY+sHsfRrTircBPl4fcRUPQiQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=odDj0WvHrpObgSlKfB29bnf1zDauBiLDj+pirPuHxJE=;
 b=V6R5YgjQI7kQzN6lsjDQhxa5M++Ixs1cMEI3fFQ+xn/JZ10ClTrqv60L05aeJ4EFAbcDOIA/yjocXZ4VD7MIfF0g1QXGNEeZa82omTH9Zq5XenuvFUNO/iMEuwwesuxLiIo2ob0JW+XXFvVvVVr7rGNBbo7mhFteXb56qkqIR4o=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3033.eurprd08.prod.outlook.com (52.134.107.24) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.20; Tue, 24 Sep 2019 07:44:17 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2284.023; Tue, 24 Sep 2019
 07:44:17 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, Julien Grall
 <Julien.Grall@arm.com>, Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 5/7] plat/common: Find and register IRQ for
 arch_timer
Thread-Index: AQHVbT/ZQzUT9h143kO/CDxbf/rLMqcvr2WAgAATyoCAAyUsAIAB05QAgAW/s0A=
Date: Tue, 24 Sep 2019 07:44:16 +0000
Message-ID: <DB7PR08MB30827A87C6B63F0624D8D5A4F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
 <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
 <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
In-Reply-To: <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 36cf1c23-3f7c-4853-a4f0-2418326f31cb.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 34286746-1e95-4737-9661-08d740c306a1
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3033; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3033:|DB7PR08MB3033:|AM6PR08MB4535:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM6PR08MB4535D5B6BAC0206F1315EE4FF7840@AM6PR08MB4535.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
x-forefront-prvs: 0170DAF08C
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(136003)(366004)(376002)(396003)(346002)(189003)(199004)(13464003)(53754006)(99286004)(14444005)(14454004)(54906003)(52536014)(86362001)(53546011)(66946007)(256004)(6506007)(7696005)(66476007)(74316002)(102836004)(76116006)(4326008)(71190400001)(64756008)(66446008)(55236004)(71200400001)(66066001)(33656002)(66556008)(76176011)(7736002)(478600001)(9686003)(486006)(81166006)(8676002)(55016002)(26005)(2501003)(81156014)(2906002)(6246003)(5660300002)(316002)(305945005)(25786009)(476003)(11346002)(6436002)(446003)(8936002)(110136005)(6116002)(3846002)(229853002)(186003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3033;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: NAC62f1pxERwI565RTm5ekeqPc8Qn5AkzTPwOfVXWNllCEMPpYh8Ijba5QXMfvT5uqIdeOF2PeylaFErvPdI08sdK3OlZew+j2sonKcErgeNlxuy0joHI5Sk0gf41U6lUSf94sdEBiBTjohgsr1ws3Rq/28EJsoqzbyU3uq2i/Obr+qiXETRjX8DRY3MpSV/kj6gxcT8A6CwpmjjRoEDj8G4zMzpT1ouNPKFmquqvrY4/mUHDIf5iihVVeAzGbdyZIxzsJWs8LeblCLgGcztnYbfAGV5V2ZY5dd5bHhrXHT1l6SHHYvkQdLUtScD+0LLfi6MmWMb73eRSKASmQwlxgur/AqbpHbKaGiikAwxRew1+p0BmB/2ShmuYi39wTiBK44jv+m6x0GaVW67T0c+faCTkoqgXl4Wd1afJCyqzRQ=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3033
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT054.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(346002)(396003)(136003)(39860400002)(13464003)(53754006)(199004)(189003)(7696005)(478600001)(70206006)(356004)(486006)(476003)(33656002)(126002)(50466002)(305945005)(7736002)(86362001)(74316002)(6116002)(2501003)(6246003)(229853002)(9686003)(2906002)(336012)(11346002)(22756006)(446003)(436003)(63350400001)(6506007)(81166006)(81156014)(8676002)(53546011)(55016002)(3846002)(110136005)(4326008)(52536014)(14444005)(76130400001)(99286004)(54906003)(76176011)(70586007)(25786009)(2486003)(23676004)(316002)(8936002)(47776003)(26005)(26826003)(66066001)(102836004)(14454004)(5660300002)(186003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR08MB4535;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 2a9159b7-3576-4286-c2f0-08d740c300bd
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:AM6PR08MB4535; 
NoDisclaimer: True
X-Forefront-PRVS: 0170DAF08C
X-Microsoft-Antispam-Message-Info: 1l5F7uUhfJ3mGT89uonEL164Vl0vmujRmlQKnok2jzRuqsbwSNrU7nQaU36xXw4LR5qEvyqJRsOZ+0OPbGNApotEOR3YP/L/Jf09oJ/t3R2IV7Yt5ofAFegbgKVwWiv9c50Cc+ECWWHFmeQ+sPSFJeYTMy9S3iTocPOobwM24Yqj6ihtL37sibirMB8iLmcXsyPINsW8FmBnKa7pxptHEAb66ZgjDmC//8BdCEaMCPLj+9qtNKNS9OSgCs9B2mB/VpHvUKMBW+TKnOkySy+/fcPUEBI/nklifQfAwThxCcW3mpxZIgeZTIsv9zSlh5itF+Uo2z/nJwi9zSwFUOJ+ATDFdLo9Me59IborINqs6j4WfBlCXkTmdl7ZUmdQI8u/t8lhETnUaPRYv3eg5nLngoLlOS3AJJwZFaLmvR9AAEU=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Sep 2019 07:44:26.9637 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 34286746-1e95-4737-9661-08d740c306a1
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB4535
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgU2hhcmFuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogU2hhcmFu
IFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+DQo+IFNlbnQ6IDIwMTnlubQ5
5pyIMjDml6UgMjM6NTENCj4gVG86IEp1bGllbiBHcmFsbCA8SnVsaWVuLkdyYWxsQGFybS5jb20+
OyBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKQ0KPiA8SnVzdGluLkhlQGFybS5jb20+
OyBTYW50aWFnbyBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Ow0KPiBtaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFNpbW9uIEt1ZW56ZXINCj4gPHNpbW9uLmt1ZW56
ZXJAbmVjbGFiLmV1Pg0KPiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2Fs
eS5YaW5AYXJtLmNvbT47IFdlaSBDaGVuIChBcm0NCj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5D
aGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xvZ3kNCj4gQ2hpbmEpIDxKaWFu
eW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbVU5JS1JB
RlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3RlciBJUlENCj4gZm9y
IGFyY2hfdGltZXINCj4gDQo+IA0KPiBPbiA5LzE5LzE5IDE6NTcgUE0sIEp1bGllbiBHcmFsbCB3
cm90ZToNCj4gPiBIaSwNCj4gPg0KPiA+IE9uIDE3LzA5LzIwMTkgMTI6NTUsIFNoYXJhbiBTYW50
aGFuYW0gd3JvdGU6DQo+ID4+IEhlbGxvLA0KPiA+Pg0KPiA+PiBPbiA5LzE3LzE5IDEyOjQ0IFBN
LCBKdWxpZW4gR3JhbGwgd3JvdGU6DQo+ID4+PiBIaSwNCj4gPj4+DQo+ID4+PiBPbiA5LzE3LzE5
IDExOjA4IEFNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOg0KPiA+Pj4+DQo+ID4+Pj4gT24gOS8x
Ny8xOSAxMToxNyBBTSwgSnVsaWVuIEdyYWxsIHdyb3RlOg0KPiA+Pj4+Pg0KPiA+Pj4+Pg0KPiA+
Pj4+PiBPbiA5LzE3LzE5IDk6NDQgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEp
IHdyb3RlOg0KPiA+Pj4+Pj4gSGkgSnVsaWVuDQo+ID4+Pj4+DQo+ID4+Pj4+IEhpLA0KPiA+Pj4+
Pg0KPiA+Pj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+Pj4+Pj4gRnJvbTog
SnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gPj4+Pj4+PiBTZW50OiAyMDE5
5bm0OeaciDE35pelIDE2OjM5DQo+ID4+Pj4+Pj4gVG86IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xv
Z3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNvbT47DQo+IFNhbnRpYWdvDQo+ID4+Pj4+Pj4gUGFn
YW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1PjsNCj4gPj4+Pj4+PiBtaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmc7DQo+ID4+Pj4+Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3Vl
bnplckBuZWNsYWIuZXU+OyBTaGFyYW4gU2FudGhhbmFtDQo+ID4+Pj4+Pj4gPFNoYXJhbi5TYW50
aGFuYW1AbmVjbGFiLmV1Pg0KPiA+Pj4+Pj4+IENjOiBLYWx5IFhpbiAoQXJtIFRlY2hub2xvZ3kg
Q2hpbmEpIDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpDQo+IENoZW4NCj4gPj4+Pj4+PiAoQXJtDQo+
ID4+Pj4+Pj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBX
dSAoQXJtDQo+IFRlY2hub2xvZ3kNCj4gPj4+Pj4+PiBDaGluYSkgPEppYW55b25nLld1QGFybS5j
b20+OyBuZCA8bmRAYXJtLmNvbT4NCj4gPj4+Pj4+PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBB
VENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZCBhbmQNCj4gPj4+Pj4+PiByZWdpc3RlciBJUlEN
Cj4gPj4+Pj4+PiBmb3IgYXJjaF90aW1lcg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gT24gOS8xNy8x
OSA4OjAxIEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90ZToNCj4gPj4+
Pj4+Pj4gSGkgSnVsaWVuICh3ZWxjb21lIGJhY2sgZnJvbSBob2xpZGF5IPCfmIogKQ0KPiA+Pj4+
Pj4+DQo+ID4+Pj4+Pj4gSGksDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+PiBUaGFua3MgOikuDQo+ID4+
Pj4+Pj4NCj4gPj4+Pj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+Pj4+Pj4+
PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPg0KPiA+Pj4+Pj4+Pj4g
U2VudDogMjAxOeW5tDnmnIgxN+aXpSAzOjUzDQo+ID4+Pj4+Pj4+PiBUbzogSnVzdGluIEhlIChB
cm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsNCj4gPj4+Pj4+Pj4+IFNh
bnRpYWdvDQo+ID4+Pj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Ow0K
PiA+Pj4+Pj4+Pj4gbWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOw0KPiA+Pj4+Pj4+
Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+OyBTaGFyYW4NCj4gU2Fu
dGhhbmFtDQo+ID4+Pj4+Pj4+PiA8U2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+DQo+ID4+Pj4+
Pj4+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNv
bT47IFdlaQ0KPiBDaGVuDQo+ID4+Pj4+Pj4gKEFybQ0KPiA+Pj4+Pj4+Pj4gVGVjaG5vbG9neSBD
aGluYSkgPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtDQo+ID4+Pj4+Pj4gVGVj
aG5vbG9neQ0KPiA+Pj4+Pj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPg0KPiA+Pj4+
Pj4+Pj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSHYzIDUvN10gcGxhdC9jb21tb246IEZp
bmQgYW5kDQo+ID4+Pj4+Pj4+PiByZWdpc3Rlcg0KPiA+Pj4+Pj4+IElSUQ0KPiA+Pj4+Pj4+Pj4g
Zm9yIGFyY2hfdGltZXINCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBPbiA5LzE2LzE5IDg6NTIg
QU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOg0KPiA+Pj4+Pj4+Pj4+
IEhpwqAgU2FudGlhZ28NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBIaSBhbGwsDQo+ID4+Pj4+
Pj4+Pg0KPiA+Pj4+Pj4+Pj4gQFNhbnRpYWdvLCBpdCBpcyBxdWl0ZSBkaWZmaWN1bHQgdG8gZm9s
bG93IHRoZSB0aHJlYWQgd2hlbiB5b3UNCj4gPj4+Pj4+Pj4+IHN0YXJ0DQo+ID4+Pj4+Pj4+PiB5
b3VyIGFuc3dlciB3aXRoICJDT01NRU5UIi4gTWF5IEkgYXNrIHlvdSB0byBjb25maWd1cmUgeW91
cg0KPiA+Pj4+Pj4+Pj4gZS1tYWlsDQo+ID4+Pj4+Pj4+PiBjbGllbnQgdG8gcXVvdGUgcHJvcGVy
bHkgKGkuZSA+KT8NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBGdXJ0aGVybW9yZSwgZGlzY2xh
aW1lciBmb290ZXIgc2hvdWxkIGJlIGF2b2lkZWQgb24gdGhlDQo+ID4+Pj4+Pj4+PiBtYWlsaW5n
IGxpc3QuDQo+ID4+Pj4+Pj4+PiBZb3UgYXJlIGJhc2ljYWxseSBzYXlpbmcgdGhpcyBpcyBjb25m
aWRlbnRpYWwgYnV0IHlvdSBzZW5kIHRvDQo+ID4+Pj4+Pj4+PiBldmVyeW9uZQ0KPiA+Pj4+Pj4+
Pj4gKG1haWxpbmcgbGlzdCBhcmUgYXJjaGl2ZWQpLi4uDQo+ID4+Pj4+Pj4+IE9LDQo+ID4+Pj4+
Pj4NCj4gPj4+Pj4+PiBJdCB3YXNuJ3QgZGlyZWN0ZWQgdG8geW91IDspLg0KPiA+Pj4+Pj4+DQo+
ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gWy4uLl0NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+Pj4+
IENPTU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIGhlcmU/
DQo+IE5vdA0KPiA+Pj4+Pj4+Pj4+PiBldmVuDQo+ID4+Pj4+Pj4+Pj4+IGRpc2FibGUgdGhlIElS
UT8gQXMgdGhlIHRpbWVyIGlzIG5vdCBzdG9wcGVkLCB3aGVuIHRoZQ0KPiBjb3VudGVyDQo+ID4+
Pj4+Pj4+PiBvdmVyZmxvd3MNCj4gPj4+Pj4+Pj4+Pj4gd2Ugd291bGQgZ2V0IGEgbmV3IGludGVy
cnVwdCBvdGhlcndpc2UgKGFsdGhvdWdoIHRoZQ0KPiA+Pj4+Pj4+Pj4+PiBvdmVyZmxvdyBjb3Vs
ZA0KPiA+Pj4+Pj4+Pj4+PiBoYXBwZW4gaW4gYSB2ZXJ5IHZlcnkgbG9uZyB0aW1lLCByaWdodD8p
DQo+ID4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+PiBJbiBwcmV2aW91cyB2ZXJzaW9uLCB3ZSBhZGRl
ZCBhIGdlbmVyaWNfdGltZXJfbWFza19pcnEoKSBpbg0KPiA+Pj4+Pj4+Pj4+IGdlbmVyaWNfdGlt
ZXJfaXJxX2hhbmRsZXIuIEJ1dCBhcyBwZXIgdGhlIHN1Z2dlc3Rpb24gWzFdIGZyb20NCj4gPj4+
Pj4+Pj4+PiBKdWxpZW4sDQo+ID4+Pj4+Pj4gd2UNCj4gPj4+Pj4+Pj4+PiByZW1vdmVkIGl0LiBC
ZXNpZGVzLCB3ZSByZWZlcnJlZCB0byB0aGUgbWluaW9zIGxvZ2ljIGF0IFsyXSwNCj4gPj4+Pj4+
Pj4+PiBpdCBvbmx5IGNhbGxlZA0KPiA+Pj4+Pj4+Pj4+IHVubWFzayBhbmQgbWFzayBpbiBibG9j
a19kb21haW4gKHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8NCj4gPj4+Pj4+Pj4+PiB1bmlrcmFmdCdz
DQo+ID4+Pj4+Pj4+Pj4gZ2VuZXJpY190aW1lcl9jcHVfYmxvY2spDQo+ID4+Pj4+Pj4+Pg0KPiA+
Pj4+Pj4+Pj4gTG9va2luZyBhdCBteSBjb21tZW50cyBhZ2FpbiwgSSBhbSBub3Qgc3VyZSB3aGVy
ZSBJDQo+IHN1Z2dlc3RlZCB0bw0KPiA+Pj4+Pj4+IHJlbW92ZQ0KPiA+Pj4+Pj4+Pj4gZ2VuZXJp
Y190aW1lcl9tYXNrX2lycSgpLi4uIENhbiB5b3UgZXhwYW5kIGl0Pw0KPiA+Pj4+Pj4+PiBPa2F5
Li4uIHNvcnJ5IGZvciBteSBtaXN0YWtlcy4gSSB3aWxsIGFkZA0KPiA+Pj4+Pj4+PiBnZW5lcmlj
X3RpbWVyX21hc2tfaXJxKCkgYmFjay4NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBGV0lXLCB0
aGUgdHdvIG1haW4gY29tbWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb25zIHdlcmU6DQo+ID4+
Pj4+Pj4+PiDCoMKgwqDCoMKgIDEpIGlzYigpIHNob3VsZCBiZSBhZGRlZCBhZnRlciB1cGRhdGlu
ZyB0aGUgc3lzdGVtDQo+ID4+Pj4+Pj4+PiByZWdpc3RlciB0bw0KPiA+Pj4+Pj4+Pj4gZW5zdXJl
IHRoYXQgdGhlIHN5c3RlbSBzeXN0ZW0gaXMgc3luY2hyb25pemVkDQo+ID4+Pj4+Pj4+PiDCoMKg
wqDCoMKgIDIpIFRoaXMgaXMgY29tbW9uIGNvZGUgYmV0d2VlbiBhcm0zMiBhbmQgYXJtNjQuIEJ1
dCB0aGUNCj4gPj4+Pj4+Pj4+IHN5c3RlbQ0KPiA+Pj4+Pj4+Pj4gcmVnaXN0ZXIgbmFtZSBhcmUg
YXJtNjQuLi4gQWNjZXNzZXMgc2hvdWxkIGJlIHN0dWIgaW4NCj4gPj4+Pj4+Pj4+IGFyY2gtc3Bl
Y2lmaWMNCj4gPj4+Pj4+Pj4+IGhlYWRlciBzbyB0aGUgY29kZSBjYW4gd29yayBmb3IgYm90aCBh
cm0zMiBhbmQgYXJtNjQuDQo+ID4+Pj4+Pj4+IEkgcmVuYW1lZCBwbGF0L2NvbW1vbi9hcm0vdGlt
ZS5jIHRvDQo+IHBsYXQvY29tbW9uL2FybS90aW1lX2FybTY0LmMNCj4gPj4+Pj4+Pj4gU2VlbXMg
dGhhdCBpcyBub3QgZW5vdWdoIGZvciB5b3U/wqAgSWYgbm8sIEkgaGF2ZSBubyBvYmplY3Rpb25z
DQo+ID4+Pj4+Pj4+IHRvIG1ha2UNCj4gPj4+Pj4+Pj4gYSBzdHViwqAgZm9yIGFybTMyLg0KPiA+
Pj4+Pj4+DQo+ID4+Pj4+Pj4gV2VsbCwgdGhlIG9ubHkgYml0cyBhcm02NCBzcGVjaWZpY3MgaW4g
dGhpcyBmaWxlIGFyZSB0aGUgYWNjZXNzDQo+ID4+Pj4+Pj4gdG8gdGhlDQo+ID4+Pj4+Pj4gc3lz
dGVtIHJlZ2lzdGVycy4gU28gcmVuYW1pbmcgdG8gdGltZV9hcm02NC5jIHNlZW1zIGEgYml0DQo+
ID4+Pj4+Pj4gb3ZlcmtpbGwuLi4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IElmIHRoZXJlIGFyZSBw
bGFuIHRvIG1ha2UgYXJtMzIgYSBjb3JyZWN0IHBvcnQgb24gVW5pa3JhZnQsIHRoZW4NCj4gPj4+
Pj4+PiBzcGxpdHRpbmcgdGhlIGNvZGUgd291bGQgYmUgdGhlIGJlc3QuIElmIHRoZXJlIGFyZSBu
byBwbGFuIHRvDQo+ID4+Pj4+Pj4gZ2V0IGFybTMyLA0KPiA+Pj4+Pj4+IHRoZW4gbWF5YmUgeW91
IHNob3VsZCB0aGluayBvZiBraWxsaW5nIGl0IGNvbXBsZXRlbHkuDQo+ID4+Pj4+Pg0KPiA+Pj4+
Pj4gQXJtMzIgeGVuIHBsYXQgaXMgaW5pdGlhbGx5IHN1cHBvcnRlZCBidXQgbm8gb25lwqAgaGFz
IHRvdWNoZWQNCj4gPj4+Pj4+IHRoYXQgZm9yIGEgbG9uZw0KPiA+Pj4+Pj4gdGltZS4gQ3VycmVu
dGx5IGxldOKAmXMgZm9jdXMgb24gYXJtNjQga3ZtIHBsYXQgb25seS4gSWYgdGhlDQo+ID4+Pj4+
PiByZXF1aXJlbWVudHMgY2hhbmdlcywNCj4gPj4+Pj4+IHdlIGNhbiBzdXBwb3J0IGFybTMyIGFk
ZGl0aW9uYWxseS4gV2hhdCBkbyB5b3UgdGhpbmsgYWJvdXQgaXQ/DQo+ID4+Pj4+DQo+ID4+Pj4+
IEkgYW0gbm90IGFza2luZyB0byBpbXBsZW1lbnQgYXJtMzIsIEkgYW0gb25seSBzdWdnZXN0aW5n
IHRvIHRyeSB0bw0KPiA+Pj4+PiBzcGxpdCB0aGUgY29kZSByYXRoZXIgdGhhbiB0cnlpbmcgdG8g
bWl4IGNvbW1vbiBjb2RlIHZzIGFyY2gNCj4gPj4+Pj4gc3BlY2lmaWMgY29kZSBpbiBwbGF0L2Nv
bW1vbi9hcm0uIFRoYXQgZGlyZWN0b3J5IGluIHBhcnRpY3VsYXIgaXMNCj4gPj4+Pj4gbG9va2lu
ZyBtZXNzaWVyIGFuZCBtZXNzaWVyIGFzIG5ldyBzZXJpZXMgYXJlIHBvc3RlZC4NCj4gPj4+Pg0K
PiA+Pj4+IEkgYWdyZWUgd2l0aCBKdWxpZW4gaXQgaXMgYmV0dGVyIHRvIHNwbGl0IHRoZSBhcm0z
MiBjb2RlIGZyb20gdGhlDQo+ID4+Pj4gYXJtNjQgY29kZS4gTXkgc3VnZ2VzdGlvbiB3b3VsZCBi
ZQ0KPiA+Pj4+DQo+ID4+Pj4gcGxhdC9jb21tb24vYXJtIGZvciAzMi1iaXQgY29kZQ0KPiA+Pj4+
DQo+ID4+Pj4gcGxhdC9jb21tb24vYXJtNjQgZm9yIHRoZSA2NC1iaXQuDQo+ID4+Pg0KPiA+Pj4g
V2VsbCB5b3UgY2FuIHNoYXJlIGEgbG90IG9mIGNvZGUgYmV0d2VlbiAzMi1iaXQgYW5kIDY0LWJp
dC4gSWYgd2UNCj4gPj4+IHRha2UgdGhlIGV4YW1wbGUgb2YgdGhlIGFyY2ggdGltZXIsIHRoZSBv
bmx5IGRpZmZlcmVuY2UgaXMgdGhlIHdheQ0KPiA+Pj4gdG8gYWNjZXNzIHRoZSByZWdpc3RlcnMg
KGkuZS4gc3lzdGVtIHJlZ2lzdGVycyB2cyBjby1wcm9jZXNzb3INCj4gPj4+IHJlZ2lzdGVycyku
DQo+ID4+DQo+ID4+IFNpbmNlIGl0IGlzIHByaW1hcmlseSBhYm91dCB0aGUgY28gcHJvY2Vzc29y
IGFuZCBzeXN0ZW0gcmVnaXN0ZXIuIEhvdw0KPiA+PiBhYm91dCBwdXNoaW5nIHRoZSBmdW5jdGlv
bmFsaXR5IGludG8gdGhlIHJlc3BlY3RpdmUgaGVhZGVyLg0KPiA+DQo+ID4gRm9yIHRoZSB0aW1l
ciB0aGlzIGlzIG1vc3RseSBzeXN0ZW0gcmVnaXN0ZXIsIGJ1dCB0aGVyZSBhcmUvd2lsbCBiZQ0K
PiA+IHNwZWNpZmljIGFybTY0L2FybTMyIGNvZGUgKHN1Y2ggYXMgYXNzZW1ibHkgZmlsZSkuIFNv
IEkgd291bGQNCj4gPiByZWNvbW1lbmQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRyZWUgdGhhdCBh
bGxvd3Mgc3VjaCBzcGxpdC4NCj4gDQo+IEkgYWdyZWUuDQo+IA0KPiA+DQo+ID4+DQo+ID4+IHBs
YXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaA0KPiA+Pg0KPiA+PiDCoMKgwqDCoCBUaGUgaGVh
ZGVyIGluY2x1ZGVzIGFyY2ggc3BlY2lmaWMgaGVhZGVyIGZpbGVzLg0KPiA+Pg0KPiA+PiBwbGF0
L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90aW1lLmgNCj4gPj4NCj4gPj4gwqDCoMKgIFByb3Zp
ZGVzIGEgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZvciByZWFkaW5nDQo+
ID4+IHN5c3RlbSByZWdpc3RlcnMgd2hpbGUgcHJvdmlkaW5nIGEgbWFjcm8gZGVmaW5pdGlvbiBm
b3IgcmVhZGluZw0KPiA+PiByZWdpc3RlciBsaWtlOg0KPiA+Pg0KPiA+PiDCoMKgI2RlZmluZcKg
IGVsMF9jbnR2X2N0bF9nZXTCoCBTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkNCj4gPj4NCj4g
Pj4gwqDCoCNkZWZpbmXCoCBlbDBfY250dl9jdGxfc2V0KHZhbCnCoCAoY250dl9jdGxfZWwwLCB2
YWwpDQo+ID4NCj4gPiBUaGVyZSBhcmUgZG96ZW5zIG9mIHN5c3RlbSByZWdpc3RlcnMsIHNvIEkg
YW0gbm90IHN1cmUgeW91IHdvdWxkIHdhbnQNCj4gPiB0byBjcmVhdGUgaGVscGVyIGZvciBldmVy
eSBvZiB0aGVtLiBJdCB3b3VsZCBiZSBiZXN0IGlmIHlvdSBmaW5kIGEgd2F5DQo+ID4gdG8gYWJz
dHJhY3QgdGhpcy4NCj4gDQo+IEkgYWdyZWUgd2UgY291bGQgYWJzdHJhY3QgaXQgbW9yZSB1c2lu
ZyB0aGUgQUFyY2g2NCBzeXN0ZW0gcmVnaXN0ZXIgbmFtZS4NCj4gDQo+ICNkZWZpbmUgZWwwX2dl
dChyZWcpIFNZU1JFR19SRUFEKCAjIyByZWcgIyMgKQ0KDQpCdXQgdGhlIHByZWZpeCAiZWwwXyIg
Z2VuZXJhbGx5IG1lYW5zIGl0IGlzIGEgQWFyY2g2NCByZWdpc3Rlci4NCmUuZy4gQ05UVl9DVExf
RUwwIGlzIHRoZSBhYXJjaDY0IG5hbWUuIENOVFZfQ1RMIGlzIHRoZSBhYXJjaDMyIG5hbWUuDQoN
Cg0KLS0NCkNoZWVycywNCkp1c3RpbiAoSmlhIEhlKQ0KDQoNCj4gDQo+IA0KPiA+DQo+ID4gRm9y
IGluc3RhbmNlLCBvbiBYZW4sIHdlIGNob3NlIHRvIHVzZSB0aGUgdXBwZXJjYXNlIHZlcnNpb24g
b2YgdGhlDQo+ID4gQUFyY2g2NCBzeXN0ZW0gcmVnaXN0ZXIgbmFtZS4gRm9yIEFBcmNoMzIsIHRo
ZXkgd2lsbCBiZSBhbGlhc2VkIHRvIHRoZQ0KPiA+IEFBcmNoNjQgb25lLg0KPiANCj4gV2UgY291
bGQgYWRvcHQgdGhlIHNhbWUgc2NoZW1lLg0KPiANCj4gDQo+ID4gT24gYSBzaWRlIG5vdGUsIHRo
ZXJlIGFyZSBubyBzdWNoIDMyLWJpdCBzeXN0ZW0gcmVnaXN0ZXIuIFRoZXkgYXJlDQo+ID4gYWx3
YXlzIDY0LWJpdCwgaXQganVzdCBoYXBwZW5zIHRoYXQgc29tZSBvZiB0aGVtIGhhdmUgdGhlIHRv
cCAzMiBiaXRzDQo+ID4gUkVTMCAoaS5lLiByZXNlcnZlZCkuIEkgaGF2ZSBmb3VuZCBtdWx0aXBs
ZSBpc3N1ZXMgaW4gWGVuIGJlY2F1c2Ugc29tZQ0KPiA+IGJpdHMgZW5kZWQgdXAgdG8gYmUgZGVm
aW5lZCBpbiBuZXdlciByZXZpc2lvbiBvZiB0aGUgc3BlYyAob3IgZXZlbg0KPiA+IHJldHJvYWN0
aXZlbHkpLg0KPiA+DQo+ID4gR0NDIGRvZXMgbm90IHNlZW0gdG8gY2FyZSBtdWNoIGlmIHlvdSBw
YXNzIGEgMzItYml0IHZhbHVlIGZvciBzeXN0ZW0NCj4gPiByZWdpc3Rlci4gQnV0IENsYW5nIHdp
bGwgY29tcGxhaW4gbG91ZGx5IGFib3V0IGl0Lg0KPiA+DQo+ID4gSSBub3RpY2VkIHRoYXQgeW91
IGhhdmUgbGltaXRlZCB1c2Ugb2YgU1lTUkVHXyogaGVscGVycyBzbyBmYXIuIFNvIGl0DQo+ID4g
bWlnaHQgYmUgYmVzdCB0byBmaXggaXQgbm90IHJhdGhlciBsYXRlciB0byBhdm9pZCBhbnkgc3Ry
dWdnbGUuDQo+ID4NCj4gPiBDaGVlcnMsDQo+ID4NCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 08:00:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 08:00:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCfk7-0005Mp-8n; Tue, 24 Sep 2019 08:00:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCfk6-0005Mk-Le
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 08:00:14 +0000
X-Inumbo-ID: 56425af7-dea1-11e9-960d-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 56425af7-dea1-11e9-960d-12813bfff9fa;
 Tue, 24 Sep 2019 08:00:14 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B82F9F2019;
 Tue, 24 Sep 2019 10:00:12 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ZmSocUgjS8fL; Tue, 24 Sep 2019 10:00:12 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 7CDFEF2018
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 10:00:10 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 10:00:10 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
 <20190923120952.25938-5-sharan.santhanam@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <d9386617-c4bd-1ca9-9b23-9fc5e0d9e9da@neclab.eu>
Date: Tue, 24 Sep 2019 10:00:09 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190923120952.25938-5-sharan.santhanam@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 4/4] lib/ukboot: Iterate
 through the inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMjMuMDkuMTkgMTQ6MDksIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4gQWRkIHN1cHBvcnQg
dG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBpbml0dGFiIGFuZCBjYWxsIHRoZSBpbml0IGZ1bmN0aW9u
cy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTaGFyYW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFt
QG5lY2xhYi5ldT4KPiAtLS0KPiAgIGluY2x1ZGUvdWsvaW5pdC5oIHwgIDYgKysrKysrCj4gICBs
aWIvdWtib290L2Jvb3QuYyB8IDIzICsrKysrKysrKysrKysrKysrKysrKysrCj4gICAyIGZpbGVz
IGNoYW5nZWQsIDI5IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91ay9p
bml0LmggYi9pbmNsdWRlL3VrL2luaXQuaAo+IGluZGV4IGJlYTQxMjcuLjhiN2E4YWEgMTAwNjQ0
Cj4gLS0tIGEvaW5jbHVkZS91ay9pbml0LmgKPiArKysgYi9pbmNsdWRlL3VrL2luaXQuaAo+IEBA
IC05Miw2ICs5MiwxMiBAQCB0eXBlZGVmIGludCAoKnVrX2luaXRfdCkodm9pZCk7Cj4gICAjZGVm
aW5lIHVrX3N5c19pbml0Y2FsbChmbikgICAgICAgdWtfc3lzX2luaXRjYWxsX3ByaW8oZm4sIDkp
Cj4gICAjZGVmaW5lIHVrX2xhdGVfaW5pdGNhbGwoZm4pICAgICAgdWtfbGF0ZV9pbml0Y2FsbF9w
cmlvKGZuLCA5KQo+ICAgCj4gK2V4dGVybiBjb25zdCB1a19pbml0X3QgdWtfaW5pdHRhYl9zdGFy
dFtdOwo+ICtleHRlcm4gY29uc3QgdWtfaW5pdF90IHVrX2luaXR0YWJfZW5kOwo+ICsKPiArI2Rl
ZmluZSB1a19pbml0dGFiX2ZvcmVhY2goaW5pdF9zdGFydCwgaW5pdF9lbmQsIGl0cikJCVwKPiAr
CWZvciAoaXRyID0gREVDT05TVCh1a19pbml0X3QqLCBpbml0X3N0YXJ0KTsgaXRyIDwgJmluaXRf
ZW5kOyBpdHIrKykKPiArCj4gICAjaWZkZWYgX19jcGx1c3BsdXMKPiAgIH0KPiAgICNlbmRpZiAv
KiBfX2NwbHVzcGx1cyAqLwo+IGRpZmYgLS1naXQgYS9saWIvdWtib290L2Jvb3QuYyBiL2xpYi91
a2Jvb3QvYm9vdC5jCj4gaW5kZXggN2ZiMDkwOC4uZjYxNTZlZSAxMDA2NDQKPiAtLS0gYS9saWIv
dWtib290L2Jvb3QuYwo+ICsrKyBiL2xpYi91a2Jvb3QvYm9vdC5jCj4gQEAgLTU2LDYgKzU2LDcg
QEAKPiAgICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4gICAjaW5jbHVkZSA8dWsvcHJpbnQu
aD4KPiAgICNpbmNsdWRlIDx1ay9jdG9ycy5oPgo+ICsjaW5jbHVkZSA8dWsvaW5pdC5oPgo+ICAg
I2luY2x1ZGUgPHVrL2FyZ3BhcnNlLmg+Cj4gICAjaWYgQ09ORklHX0xJQlVLQlVTCj4gICAjaW5j
bHVkZSA8dWsvYnVzLmg+Cj4gQEAgLTgxLDYgKzgyLDIyIEBAIHN0YXRpYyB2b2lkIG1haW5fdGhy
ZWFkX2Z1bmModm9pZCAqYXJnKQo+ICAgCWludCBpOwo+ICAgCWludCByZXQ7Cj4gICAJc3RydWN0
IHRocmVhZF9tYWluX2FyZyAqdG1hID0gYXJnOwo+ICsJdWtfaW5pdF90ICppdHI7Cj4gKwo+ICsJ
LyoqCj4gKwkgKiBSdW4gaW5pdCB0YWJsZQo+ICsJICovCj4gKwl1a19wcl9pbmZvKCJJbml0IFRh
YmxlIEAgJXAgLSAlcFxuIiwgJnVrX2luaXR0YWJfc3RhcnRbMF0sCj4gKwkJICAgJnVrX2luaXR0
YWJfZW5kKTsKPiArCXVrX2luaXR0YWJfZm9yZWFjaCh1a19pbml0dGFiX3N0YXJ0LCB1a19pbml0
dGFiX2VuZCwgaXRyKSB7Cj4gKwkJcmV0ID0gKCppdHIpKCk7Cj4gKwkJaWYgKHJldCA8IDApIHsK
PiArCQkJdWtfcHJfZXJyKCJJbml0IGZ1bmN0aW9uIGF0ICVwIHJldHVybmVkIGVycm9yICVkXG4i
LAo+ICsJCQkJICBpdHIsIHJldCk7Cj4gKwkJCXJldCA9IFVLUExBVF9DUkFTSDsKPiArCQkJZ290
byBleGl0Owo+ICsJCX0KPiArCX0KPiAgIAo+ICAgI2lmZGVmIENPTkZJR19MSUJVS0JVUwo+ICAg
CXVrX3ByX2luZm8oIkluaXRpYWxpemUgYnVzIGhhbmRsZXJzLi4uXG4iKTsKPiBAQCAtMTQ5LDYg
KzE2Niw4IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJnKQo+ICAgCXJl
dCA9IG1haW4odG1hLT5hcmdjLCB0bWEtPmFyZ3YpOwo+ICAgCXVrX3ByX2luZm8oIm1haW4gcmV0
dXJuZWQgJWQsIGhhbHRpbmcgc3lzdGVtXG4iLCByZXQpOwo+ICAgCXJldCA9IChyZXQgIT0gMCkg
PyBVS1BMQVRfQ1JBU0ggOiBVS1BMQVRfSEFMVDsKPiArCj4gK2V4aXQ6Cj4gICAJdWtwbGF0X3Rl
cm1pbmF0ZShyZXQpOyAvKiBkb2VzIG5vdCByZXR1cm4gKi8KPiAgIH0KPiAgIAo+IEBAIC0yMzks
NiArMjU4LDEwIEBAIHZvaWQgdWtwbGF0X2VudHJ5KGludCBhcmdjLCBjaGFyICphcmd2W10pCj4g
ICAJfQo+ICAgI2VuZGlmCj4gICAKPiArLyoqCj4gKyAqIEFkZGluZyB0aGUgaW5pdCB0YWJsZS4K
PiArICovCj4gKwoKSSBhbSBub3QgZ2V0dGluZyB0aGlzIGNvbW1lbnQuLi4gSSBhbSB0aGlua2lu
ZyB0aGF0IHlvdSBtZWFuIHRvIG1vdmUgdGhlIApmb2xsb3dpbmcgY29kZSAoaXJxIGluaXQsIHBs
YXRmb3JtIHRpbWUsIHNjaGVkdWxlcikgdG8gaW5pdCB0YWJsZSAKZW50cmllcyAtIHNvIGl0IGlz
IGEgVE9ETywgcmlnaHQ/CkkgdGhpbmssIHNpbmNlIGJlY2F1c2UgdGhvc2UgaXRlbXMgYXJlIHJl
YWxseSB0cmlja3ksIEkgdGVuZCB0byBsZWF2ZSAKdGhlIGNvbW1lbnQgZm9yIG5vdy4gQWx0ZXJu
YXRpdmVseSwgSSBwcm9wb3NlIHRoYXQgSSBjaGFuZ2UgdGhlIGNvbW1lbnQgCnRvIHRoZSBmb2xs
b3dpbmcgd2hpbGUgdXBzdHJlYW1pbmc6CgovKgogICogVE9ETzogTW92ZSB0aGUgZm9sbG93aW5n
IGluaXRpYWxpemF0aW9uIGNhbGxzIHRvIGluaXQgdGFibGUKICAqLwoKTGV0IG1lIGtub3cgd2hh
dCB5b3UgdGhpbmsuCgo+ICAgI2lmIENPTkZJR19MSUJVS0FMTE9DCj4gICAJdWtfcHJfaW5mbygi
SW5pdGlhbGl6ZSBJUlEgc3Vic3lzdGVtLi4uXG4iKTsKPiAgIAlyYyA9IHVrcGxhdF9pcnFfaW5p
dChhKTsKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 08:00:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 08:00:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCfkm-0005Oq-Bt; Tue, 24 Sep 2019 08:00:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCfkm-0005Ok-3X
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 08:00:56 +0000
X-Inumbo-ID: 6ef083c0-dea1-11e9-b299-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by us1-rack-iad1.inumbo.com (Halon) with ESMTPS
 id 6ef083c0-dea1-11e9-b299-bc764e2007e4;
 Tue, 24 Sep 2019 08:00:54 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 36230105704;
 Tue, 24 Sep 2019 10:00:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id u95necYL8WYB; Tue, 24 Sep 2019 10:00:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 12BF41056E8
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 10:00:54 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 10:00:53 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
 <20190923120952.25938-4-sharan.santhanam@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <b946ed0a-ca84-6767-b3e7-162545cfec15@neclab.eu>
Date: Tue, 24 Sep 2019 10:00:53 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190923120952.25938-4-sharan.santhanam@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 3/4] plat/*: Support
 .uk_inittab_ section
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TG9va3MgZ29vZC4KClJldmlld2VkLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5l
Y2xhYi5ldT4KCk9uIDIzLjA5LjE5IDE0OjA5LCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+IFRo
ZSBwbGF0Zm9ybSBsaW5rZXIgc2NyaXB0IGNyZWF0ZSBhIHNpbmdsZSBzZWN0aW9uIHRoYXQgYWNj
dW11bGF0ZSBhbGwKPiB0aGUgaW5pdCBmdW5jdGlvbiBiZWxvbmdpbmcgdG8gYSBzcGVjaWZpYyBz
ZWN0aW9uLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50
aGFuYW1AbmVjbGFiLmV1Pgo+IC0tLQo+ICAgcGxhdC9jb21tb24vaW5jbHVkZS9jb21tb24ubGRz
LmggfCA4ICsrKysrKysrCj4gICBwbGF0L2t2bS9hcm0vbGluazY0Lmxkcy5TICAgICAgICB8IDIg
KysKPiAgIHBsYXQva3ZtL3g4Ni9saW5rNjQubGRzLlMgICAgICAgIHwgMiArKwo+ICAgcGxhdC9s
aW51eHUvYXJtL2xpbmsubGRzLlMgICAgICAgfCAyICsrCj4gICBwbGF0L2xpbnV4dS94ODYvbGlu
azY0Lmxkcy5TICAgICB8IDIgKysKPiAgIHBsYXQveGVuL2FybS9saW5rMzIubGRzLlMgICAgICAg
IHwgMiArKwo+ICAgcGxhdC94ZW4veDg2L2xpbms2NC5sZHMuUyAgICAgICAgfCAyICsrCj4gICA3
IGZpbGVzIGNoYW5nZWQsIDIwIGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvcGxhdC9j
b21tb24vaW5jbHVkZS9jb21tb24ubGRzLmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2NvbW1vbi5s
ZHMuaAo+IGluZGV4IGIwNmRkOTYuLjk1OGJlMWUgMTAwNjQ0Cj4gLS0tIGEvcGxhdC9jb21tb24v
aW5jbHVkZS9jb21tb24ubGRzLmgKPiArKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2NvbW1vbi5s
ZHMuaAo+IEBAIC05NCw2ICs5NCwxNCBAQAo+ICAgCX0JCQkJCQkJCVwKPiAgIAl1a19jdG9ydGFi
X2VuZCA9IC47Cj4gICAKPiArI2RlZmluZSBJTklUVEFCX1NFQ1RJT04JCQkJCQkJXAo+ICsJdWtf
aW5pdHRhYl9zdGFydCA9IC47CQkJCQkJXAo+ICsJLnVrX2luaXR0YWIgOgkJCQkJCQlcCj4gKwl7
CQkJCQkJCQlcCj4gKwkJS0VFUCgqKFNPUlRfQllfTkFNRSgudWtfaW5pdHRhYl9bMS02XVswLTld
KSkpCQlcCj4gKwl9CQkJCQkJCQlcCj4gKwl1a19pbml0dGFiX2VuZCA9IC47Cj4gKwo+ICAgI2Rl
ZmluZSBUTFNfU0VDVElPTlMJCQkJCQkJXAo+ICAgCS4gPSBBTElHTigweDgpOwkJCQkJCQlcCj4g
ICAJX3Rsc19zdGFydCA9IC47CQkJCQkJCVwKPiBkaWZmIC0tZ2l0IGEvcGxhdC9rdm0vYXJtL2xp
bms2NC5sZHMuUyBiL3BsYXQva3ZtL2FybS9saW5rNjQubGRzLlMKPiBpbmRleCBiMDdhODk3Li44
ZmUzYWQ4IDEwMDY0NAo+IC0tLSBhL3BsYXQva3ZtL2FybS9saW5rNjQubGRzLlMKPiArKysgYi9w
bGF0L2t2bS9hcm0vbGluazY0Lmxkcy5TCj4gQEAgLTczLDYgKzczLDggQEAgU0VDVElPTlMgewo+
ICAgCj4gICAJQ1RPUlRBQl9TRUNUSU9OCj4gICAKPiArCUlOSVRUQUJfU0VDVElPTgo+ICsKPiAg
IAkvKiBSZWFkLW9ubHkgZGF0YSAqLwo+ICAgCS4gPSBBTElHTihfX1BBR0VfU0laRSk7Cj4gICAJ
X3JvZGF0YSA9IC47Cj4gZGlmZiAtLWdpdCBhL3BsYXQva3ZtL3g4Ni9saW5rNjQubGRzLlMgYi9w
bGF0L2t2bS94ODYvbGluazY0Lmxkcy5TCj4gaW5kZXggNjEwM2ZjMi4uMWY2NjEwNCAxMDA2NDQK
PiAtLS0gYS9wbGF0L2t2bS94ODYvbGluazY0Lmxkcy5TCj4gKysrIGIvcGxhdC9rdm0veDg2L2xp
bms2NC5sZHMuUwo+IEBAIC00OCw2ICs0OCw4IEBAIFNFQ1RJT05TCj4gICAKPiAgIAlDVE9SVEFC
X1NFQ1RJT04KPiAgIAo+ICsJSU5JVFRBQl9TRUNUSU9OCj4gKwo+ICAgCS8qIFJlYWQtb25seSBk
YXRhICovCj4gICAJLiA9IEFMSUdOKF9fUEFHRV9TSVpFKTsKPiAgIAlfcm9kYXRhID0gLjsKPiBk
aWZmIC0tZ2l0IGEvcGxhdC9saW51eHUvYXJtL2xpbmsubGRzLlMgYi9wbGF0L2xpbnV4dS9hcm0v
bGluay5sZHMuUwo+IGluZGV4IDVjOWE0ZjMuLmYyMGNjN2MgMTAwNjQ0Cj4gLS0tIGEvcGxhdC9s
aW51eHUvYXJtL2xpbmsubGRzLlMKPiArKysgYi9wbGF0L2xpbnV4dS9hcm0vbGluay5sZHMuUwo+
IEBAIC0zLDUgKzMsNyBAQAo+ICAgU0VDVElPTlMKPiAgIHsKPiAgIAlDVE9SVEFCX1NFQ1RJT04K
PiArCj4gKwlJTklUVEFCX1NFQ1RJT04KPiAgIH0KPiAgIElOU0VSVCBCRUZPUkUgLnJvZGF0YQo+
IGRpZmYgLS1naXQgYS9wbGF0L2xpbnV4dS94ODYvbGluazY0Lmxkcy5TIGIvcGxhdC9saW51eHUv
eDg2L2xpbms2NC5sZHMuUwo+IGluZGV4IGE2YTU2YWQuLjgwMTIwMDggMTAwNjQ0Cj4gLS0tIGEv
cGxhdC9saW51eHUveDg2L2xpbms2NC5sZHMuUwo+ICsrKyBiL3BsYXQvbGludXh1L3g4Ni9saW5r
NjQubGRzLlMKPiBAQCAtNSw2ICs1LDggQEAgU0VDVElPTlMKPiAgIAlFWENFUFRJT05fU0VDVElP
TlMKPiAgIAo+ICAgCUNUT1JUQUJfU0VDVElPTgo+ICsKPiArCUlOSVRUQUJfU0VDVElPTgo+ICAg
fQo+ICAgSU5TRVJUIEJFRk9SRSAucm9kYXRhCj4gICAKPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4v
YXJtL2xpbmszMi5sZHMuUyBiL3BsYXQveGVuL2FybS9saW5rMzIubGRzLlMKPiBpbmRleCAzNzM3
ZDFjLi4zMGMyOWFiIDEwMDY0NAo+IC0tLSBhL3BsYXQveGVuL2FybS9saW5rMzIubGRzLlMKPiAr
KysgYi9wbGF0L3hlbi9hcm0vbGluazMyLmxkcy5TCj4gQEAgLTUzLDYgKzUzLDggQEAgU0VDVElP
TlMKPiAgIAo+ICAgCUNUT1JUQUJfU0VDVElPTgo+ICAgCj4gKwlJTklUVEFCX1NFQ1RJT04KPiAr
Cj4gICAJLyogUmVhZC1vbmx5IGRhdGEgKi8KPiAgIAlfcm9kYXRhID0gLjsKPiAgIAkucm9kYXRh
IDoKPiBkaWZmIC0tZ2l0IGEvcGxhdC94ZW4veDg2L2xpbms2NC5sZHMuUyBiL3BsYXQveGVuL3g4
Ni9saW5rNjQubGRzLlMKPiBpbmRleCBmN2U1M2ZlLi4zZTE2YjNiIDEwMDY0NAo+IC0tLSBhL3Bs
YXQveGVuL3g4Ni9saW5rNjQubGRzLlMKPiArKysgYi9wbGF0L3hlbi94ODYvbGluazY0Lmxkcy5T
Cj4gQEAgLTQ2LDYgKzQ2LDggQEAgU0VDVElPTlMKPiAgIAo+ICAgCUNUT1JUQUJfU0VDVElPTgo+
ICAgCj4gKwlJTklUVEFCX1NFQ1RJT04KPiArCj4gICAJX3JvZGF0YSA9IC47Cj4gICAJLnJvZGF0
YSA6IHsKPiAgIAkJKigucm9kYXRhKQo+IAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 08:09:31 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 08:09:31 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCft4-0005aF-3u; Tue, 24 Sep 2019 08:09:30 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCft2-0005ZV-P5
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 08:09:28 +0000
X-Inumbo-ID: a014fb1a-dea2-11e9-960d-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id a014fb1a-dea2-11e9-960d-12813bfff9fa;
 Tue, 24 Sep 2019 08:09:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C2F64F2019;
 Tue, 24 Sep 2019 10:09:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id w7NrdUHeKwEq; Tue, 24 Sep 2019 10:09:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 91F60F2018
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 10:09:23 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 10:09:23 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
 <20190923120952.25938-3-sharan.santhanam@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <0a90dce1-b75a-3b48-b03c-d1aec3439427@neclab.eu>
Date: Tue, 24 Sep 2019 10:09:22 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190923120952.25938-3-sharan.santhanam@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 2/4] include/uk: Introduce
 init table
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIQoKUmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFi
LmV1PgoKT24gMjMuMDkuMTkgMTQ6MDksIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4gVGhlIHBh
dGNoIGludHJvZHVjZXMgdGhlIGludGVyZmFjZSBmb3IgdGhlIGluaXR0YWIuIFRoZSBwYXRjaCBw
cm92aWRlcwo+IGltcGxlbWVudGF0aW9uIHRvIGdyb3VwIHRoZSBpbml0IGZ1bmN0aW9uIGludG8g
dGhlIHJlc3BlY3RpdmUgbGlua2VyCj4gc2VjdGlvbi4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTaGFy
YW4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KPiAtLS0KPiAgIGluY2x1
ZGUvdWsvaW5pdC5oIHwgOTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwo+ICAgMSBmaWxlIGNoYW5nZWQsIDk4IGluc2VydGlvbnMoKykKPiAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL3VrL2luaXQuaAo+IAo+IGRpZmYgLS1naXQgYS9p
bmNsdWRlL3VrL2luaXQuaCBiL2luY2x1ZGUvdWsvaW5pdC5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2
NDQKPiBpbmRleCAwMDAwMDAwLi5iZWE0MTI3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1
ZGUvdWsvaW5pdC5oCj4gQEAgLTAsMCArMSw5OCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogQlNELTMtQ2xhdXNlICovCj4gKy8qCj4gKyAqIEF1dGhvcnM6IFNoYXJhbiBTYW50aGFu
YW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMp
IDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgo+ICsgKgo+ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gKyAqIGFyZSBtZXQ6
Cj4gKyAqCj4gKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KPiArICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiAr
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQo+ICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ICsgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCj4gKyAq
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCj4gKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCj4gKyAqCj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+
ICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCj4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCj4gKyAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05U
UklCVVRPUlMgQkUKPiArICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+ICsgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKPiArICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KPiArICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKPiAr
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUKPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4g
KyAqCj4gKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElO
IEFOWSBXQVkuCj4gKyAqLwo+ICsjaWZuZGVmIF9VS19JTklUX0gKPiArI2RlZmluZSBfVUtfSU5J
VF9ICj4gKwo+ICsjaW5jbHVkZSA8dWsvY29uZmlnLmg+Cj4gKyNpbmNsdWRlIDx1ay9lc3NlbnRp
YWxzLmg+Cj4gKwo+ICsjaWZkZWYgX19jcGx1c3BsdXMKPiArZXh0ZXJuICJDIiB7Cj4gKyNlbmRp
Zgo+ICsKPiArdHlwZWRlZiBpbnQgKCp1a19pbml0X3QpKHZvaWQpOwo+ICsKPiArI2RlZmluZSBJ
TklUVEFCX1NUUl9WQVIobGlibmFtZSwgZm4sIGJhc2UsIHByaW8pIGxpYm5hbWUgIyMgZm4gIyMg
YmFzZSAjIyBwcmlvCj4gKyNkZWZpbmUgSU5JVFRBQl9TRUNUSU9OKGJhc2UsIHByaW8pICAudWtf
aW5pdHRhYl8gIyMgYmFzZSAjIyBwcmlvCj4gKyNkZWZpbmUgSU5JVFRBQl9TRUNUSU9OX05BTUUo
bmFtZSkgU1RSSU5HSUZZKG5hbWUpCj4gKwo+ICsjZGVmaW5lIF9faW5pdHRhYihsaWJuYW1lLCBm
biwgYmFzZSwgcHJpbykJCQkJXAo+ICsJc3RhdGljICBjb25zdCBfX3VzZWQgX19zZWN0aW9uKElO
SVRUQUJfU0VDVElPTl9OQU1FKAkJXAo+ICsJCQkJCUlOSVRUQUJfU0VDVElPTihiYXNlLCBwcmlv
KSkJXAo+ICsJCQkJICAgICAgKQkJCQkJXAo+ICsJCXVrX2luaXRfdCBJTklUVEFCX1NUUl9WQVIo
bGlibmFtZSwgZm4sIGJhc2UsIHByaW8pID0gZm4KPiArCj4gKy8qKgo+ICsgKiBEZWZpbmUgYSBs
aWJyYXJ5IGluaXRpYWxpemF0aW9uLiBBdCB0aGlzIHBvaW50IGluIHRpbWUgc29tZSBwbGF0Zm9y
bQo+ICsgKiBjb21wb25lbnQgbWF5IG5vdCBiZSBpbml0aWFsaXplZCwgc28gaXQgd2lzZSB0byBp
bml0aWFsaXplcyB0aG9zZSBjb21wb25lbnQKPiArICogdG8gaW5pdGlhbGl6ZWQuCj4gKyAqLwo+
ICsjZGVmaW5lIHVrX2Vhcmx5X2luaXRjYWxsX3ByaW8oZm4sIHByaW8pICBfX2luaXR0YWIoTElC
TkFNRSwgZm4sIDEsIHByaW8pCj4gKy8qKgo+ICsgKiBEZWZpbmUgYSBzdGFnZSBmb3IgcGxhdGZv
cm0gaW5pdGlhbGl6YXRpb24uIFBsYXRmb3JtIGF0IHRoaXMgcG9pbnQgcmVhZAo+ICsgKiBhbGwg
dGhlIGRldmljZSBhbmQgZGV2aWNlIGFyZSBpbml0aWFsaXplZC4KPiArICovCj4gKyNkZWZpbmUg
dWtfcGxhdF9pbml0Y2FsbF9wcmlvKGZuLCBwcmlvKSAgX19pbml0dGFiKExJQk5BTUUsIGZuLCAy
LCBwcmlvKQo+ICsvKioKPiArICogRGVmaW5lIGEgc3RhZ2UgZm9yIHBlcmZvcm1pbmcgbGlicmFy
eSBpbml0aWFsaXphdGlvbi4gVGhpcyBsaWJyYXJ5Cj4gKyAqIGluaXRpYWxpemF0aW9uIGlzIHBl
cmZvcm1lZCBhZnRlciB0aGUgcGxhdGZvcm0gaXMgY29tcGxldGVseSBpbml0aWFsaXplZC4KPiAr
ICovCj4gKyNkZWZpbmUgdWtfbGliX2luaXRjYWxsX3ByaW8oZm4sIHByaW8pCV9faW5pdHRhYihM
SUJOQU1FLCBmbiwgMywgcHJpbykKPiArLyoqCj4gKyAqIERlZmluZSBhIHN0YWdlIGZvciBmaWxl
c3lzdGVtIGluaXRpYWxpemF0aW9uLgo+ICsgKi8KPiArI2RlZmluZSB1a19yb290ZnNfaW5pdGNh
bGxfcHJpbyhmbiwgcHJpbykgX19pbml0dGFiKExJQk5BTUUsIGZuLCA0LCBwcmlvKQo+ICsvKioK
PiArICogRGVmaW5lIGEgc3RhZ2UgZm9yIGRldmljZSBpbml0aWFsaXphdGlvbgo+ICsgKi8KPiAr
I2RlZmluZSB1a19zeXNfaW5pdGNhbGxfcHJpbyhmbiwgcHJpbykgX19pbml0dGFiKExJQk5BTUUs
IGZuLCA1LCBwcmlvKQo+ICsvKioKPiArICogRGVmaW5lIGEgc3RhZ2UgZm9yIGFwcGxpY2F0aW9u
IHByZS1pbml0aWFsaXphdGlvbgo+ICsgKi8KPiArI2RlZmluZSB1a19sYXRlX2luaXRjYWxsX3By
aW8oZm4sIHByaW8pICBfX2luaXR0YWIoTElCTkFNRSwgZm4sIDYsIHByaW8pCj4gKwo+ICsvKioK
PiArICogU2ltaWxhciBpbnRlcmZhY2Ugd2l0aG91dCBwcmlvcml0eS4KPiArICovCj4gKyNkZWZp
bmUgdWtfZWFybHlfaW5pdGNhbGwoZm4pICAgICB1a19lYXJseV9pbml0Y2FsbF9wcmlvKGZuLCA5
KQo+ICsjZGVmaW5lIHVrX3BsYXRfaW5pdGNhbGwoZm4pICAgICAgdWtfcGxhdF9pbml0Y2FsbF9w
cmlvKGZuLCA5KQo+ICsjZGVmaW5lIHVrX2xpYl9pbml0Y2FsbChmbikgICAgICAgdWtfbGliX2lu
aXRjYWxsX3ByaW8oZm4sIDkpCj4gKyNkZWZpbmUgdWtfcm9vdGZzX2luaXRjYWxsKGZuKSAgICB1
a19yb290ZnNfaW5pdGNhbGxfcHJpbyhmbiwgOSkKPiArI2RlZmluZSB1a19zeXNfaW5pdGNhbGwo
Zm4pICAgICAgIHVrX3N5c19pbml0Y2FsbF9wcmlvKGZuLCA5KQo+ICsjZGVmaW5lIHVrX2xhdGVf
aW5pdGNhbGwoZm4pICAgICAgdWtfbGF0ZV9pbml0Y2FsbF9wcmlvKGZuLCA5KQo+ICsKPiArI2lm
ZGVmIF9fY3BsdXNwbHVzCj4gK30KPiArI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCj4gKyNlbmRp
ZiAvKiBfVUtfSU5JVF9IICovCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 08:40:09 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 08:40:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCgMi-0008SY-OQ; Tue, 24 Sep 2019 08:40:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d6A1=XT=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCgMh-0008OA-5W
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 08:40:07 +0000
X-Inumbo-ID: e7b2450a-dea6-11e9-960f-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id e7b2450a-dea6-11e9-960f-12813bfff9fa;
 Tue, 24 Sep 2019 08:40:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id EFC79F2019;
 Tue, 24 Sep 2019 10:40:03 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2erpwrJOBkA6; Tue, 24 Sep 2019 10:40:03 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B4B6BF2018
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 10:40:01 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 10:40:01 +0200
To: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
 <20190923120952.25938-5-sharan.santhanam@neclab.eu>
 <d9386617-c4bd-1ca9-9b23-9fc5e0d9e9da@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <437cd0e5-cdc3-b0f3-c67a-518f273d831c@neclab.eu>
Date: Tue, 24 Sep 2019 10:40:01 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <d9386617-c4bd-1ca9-9b23-9fc5e0d9e9da@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 4/4] lib/ukboot: Iterate
 through the inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDkvMjQvMTkgMTA6MDAgQU0sIFNpbW9uIEt1ZW56ZXIgd3JvdGU6Cj4gT24gMjMuMDkuMTkg
MTQ6MDksIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4+IEFkZCBzdXBwb3J0IHRvIGl0ZXJhdGUg
dGhyb3VnaCB0aGUgaW5pdHRhYiBhbmQgY2FsbCB0aGUgaW5pdCBmdW5jdGlvbnMuCj4+Cj4+IFNp
Z25lZC1vZmYtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1
Pgo+PiAtLS0KPj4gwqAgaW5jbHVkZS91ay9pbml0LmggfMKgIDYgKysrKysrCj4+IMKgIGxpYi91
a2Jvb3QvYm9vdC5jIHwgMjMgKysrKysrKysrKysrKysrKysrKysrKysKPj4gwqAgMiBmaWxlcyBj
aGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VrL2lu
aXQuaCBiL2luY2x1ZGUvdWsvaW5pdC5oCj4+IGluZGV4IGJlYTQxMjcuLjhiN2E4YWEgMTAwNjQ0
Cj4+IC0tLSBhL2luY2x1ZGUvdWsvaW5pdC5oCj4+ICsrKyBiL2luY2x1ZGUvdWsvaW5pdC5oCj4+
IEBAIC05Miw2ICs5MiwxMiBAQCB0eXBlZGVmIGludCAoKnVrX2luaXRfdCkodm9pZCk7Cj4+IMKg
ICNkZWZpbmUgdWtfc3lzX2luaXRjYWxsKGZuKcKgwqDCoMKgwqDCoCB1a19zeXNfaW5pdGNhbGxf
cHJpbyhmbiwgOSkKPj4gwqAgI2RlZmluZSB1a19sYXRlX2luaXRjYWxsKGZuKcKgwqDCoMKgwqAg
dWtfbGF0ZV9pbml0Y2FsbF9wcmlvKGZuLCA5KQo+PiDCoCArZXh0ZXJuIGNvbnN0IHVrX2luaXRf
dCB1a19pbml0dGFiX3N0YXJ0W107Cj4+ICtleHRlcm4gY29uc3QgdWtfaW5pdF90IHVrX2luaXR0
YWJfZW5kOwo+PiArCj4+ICsjZGVmaW5lIHVrX2luaXR0YWJfZm9yZWFjaChpbml0X3N0YXJ0LCBp
bml0X2VuZCwgaXRyKcKgwqDCoMKgwqDCoMKgIFwKPj4gK8KgwqDCoCBmb3IgKGl0ciA9IERFQ09O
U1QodWtfaW5pdF90KiwgaW5pdF9zdGFydCk7IGl0ciA8ICZpbml0X2VuZDsgaXRyKyspCj4+ICsK
Pj4gwqAgI2lmZGVmIF9fY3BsdXNwbHVzCj4+IMKgIH0KPj4gwqAgI2VuZGlmIC8qIF9fY3BsdXNw
bHVzICovCj4+IGRpZmYgLS1naXQgYS9saWIvdWtib290L2Jvb3QuYyBiL2xpYi91a2Jvb3QvYm9v
dC5jCj4+IGluZGV4IDdmYjA5MDguLmY2MTU2ZWUgMTAwNjQ0Cj4+IC0tLSBhL2xpYi91a2Jvb3Qv
Ym9vdC5jCj4+ICsrKyBiL2xpYi91a2Jvb3QvYm9vdC5jCj4+IEBAIC01Niw2ICs1Niw3IEBACj4+
IMKgICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4+IMKgICNpbmNsdWRlIDx1ay9wcmludC5o
Pgo+PiDCoCAjaW5jbHVkZSA8dWsvY3RvcnMuaD4KPj4gKyNpbmNsdWRlIDx1ay9pbml0Lmg+Cj4+
IMKgICNpbmNsdWRlIDx1ay9hcmdwYXJzZS5oPgo+PiDCoCAjaWYgQ09ORklHX0xJQlVLQlVTCj4+
IMKgICNpbmNsdWRlIDx1ay9idXMuaD4KPj4gQEAgLTgxLDYgKzgyLDIyIEBAIHN0YXRpYyB2b2lk
IG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJnKQo+PiDCoMKgwqDCoMKgIGludCBpOwo+PiDCoMKg
wqDCoMKgIGludCByZXQ7Cj4+IMKgwqDCoMKgwqAgc3RydWN0IHRocmVhZF9tYWluX2FyZyAqdG1h
ID0gYXJnOwo+PiArwqDCoMKgIHVrX2luaXRfdCAqaXRyOwo+PiArCj4+ICvCoMKgwqAgLyoqCj4+
ICvCoMKgwqDCoCAqIFJ1biBpbml0IHRhYmxlCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgIHVr
X3ByX2luZm8oIkluaXQgVGFibGUgQCAlcCAtICVwXG4iLCAmdWtfaW5pdHRhYl9zdGFydFswXSwK
Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgICZ1a19pbml0dGFiX2VuZCk7Cj4+ICvCoMKgwqAgdWtf
aW5pdHRhYl9mb3JlYWNoKHVrX2luaXR0YWJfc3RhcnQsIHVrX2luaXR0YWJfZW5kLCBpdHIpIHsK
Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9ICgqaXRyKSgpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWYg
KHJldCA8IDApIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWtfcHJfZXJyKCJJbml0IGZ1
bmN0aW9uIGF0ICVwIHJldHVybmVkIGVycm9yICVkXG4iLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoCBpdHIsIHJldCk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJl
dCA9IFVLUExBVF9DUkFTSDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBleGl0Owo+
PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgIH0KPj4gwqAgwqAgI2lmZGVmIENPTkZJR19M
SUJVS0JVUwo+PiDCoMKgwqDCoMKgIHVrX3ByX2luZm8oIkluaXRpYWxpemUgYnVzIGhhbmRsZXJz
Li4uXG4iKTsKPj4gQEAgLTE0OSw2ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBtYWluX3RocmVhZF9m
dW5jKHZvaWQgKmFyZykKPj4gwqDCoMKgwqDCoCByZXQgPSBtYWluKHRtYS0+YXJnYywgdG1hLT5h
cmd2KTsKPj4gwqDCoMKgwqDCoCB1a19wcl9pbmZvKCJtYWluIHJldHVybmVkICVkLCBoYWx0aW5n
IHN5c3RlbVxuIiwgcmV0KTsKPj4gwqDCoMKgwqDCoCByZXQgPSAocmV0ICE9IDApID8gVUtQTEFU
X0NSQVNIIDogVUtQTEFUX0hBTFQ7Cj4+ICsKPj4gK2V4aXQ6Cj4+IMKgwqDCoMKgwqAgdWtwbGF0
X3Rlcm1pbmF0ZShyZXQpOyAvKiBkb2VzIG5vdCByZXR1cm4gKi8KPj4gwqAgfQo+PiDCoCBAQCAt
MjM5LDYgKzI1OCwxMCBAQCB2b2lkIHVrcGxhdF9lbnRyeShpbnQgYXJnYywgY2hhciAqYXJndltd
KQo+PiDCoMKgwqDCoMKgIH0KPj4gwqAgI2VuZGlmCj4+IMKgICsvKioKPj4gKyAqIEFkZGluZyB0
aGUgaW5pdCB0YWJsZS4KPj4gKyAqLwo+PiArCj4KPiBJIGFtIG5vdCBnZXR0aW5nIHRoaXMgY29t
bWVudC4uLiBJIGFtIHRoaW5raW5nIHRoYXQgeW91IG1lYW4gdG8gbW92ZSAKPiB0aGUgZm9sbG93
aW5nIGNvZGUgKGlycSBpbml0LCBwbGF0Zm9ybSB0aW1lLCBzY2hlZHVsZXIpIHRvIGluaXQgdGFi
bGUgCj4gZW50cmllcyAtIHNvIGl0IGlzIGEgVE9ETywgcmlnaHQ/Cj4gSSB0aGluaywgc2luY2Ug
YmVjYXVzZSB0aG9zZSBpdGVtcyBhcmUgcmVhbGx5IHRyaWNreSwgSSB0ZW5kIHRvIGxlYXZlIAo+
IHRoZSBjb21tZW50IGZvciBub3cuIEFsdGVybmF0aXZlbHksIEkgcHJvcG9zZSB0aGF0IEkgY2hh
bmdlIHRoZSAKPiBjb21tZW50IHRvIHRoZSBmb2xsb3dpbmcgd2hpbGUgdXBzdHJlYW1pbmc6Ck5v
IHdlIGNhbiByZW1vdmUgaXQuIFdlIGNhbiBhZGQgaXQgd2hlbiB0aGUgcmVzdCBvZiB0aGUgY29k
ZSBpcyBpbiBwbGFjZQo+Cj4gLyoKPiDCoCogVE9ETzogTW92ZSB0aGUgZm9sbG93aW5nIGluaXRp
YWxpemF0aW9uIGNhbGxzIHRvIGluaXQgdGFibGUKPiDCoCovCj4KPiBMZXQgbWUga25vdyB3aGF0
IHlvdSB0aGluay4KPgo+PiDCoCAjaWYgQ09ORklHX0xJQlVLQUxMT0MKPj4gwqDCoMKgwqDCoCB1
a19wcl9pbmZvKCJJbml0aWFsaXplIElSUSBzdWJzeXN0ZW0uLi5cbiIpOwo+PiDCoMKgwqDCoMKg
IHJjID0gdWtwbGF0X2lycV9pbml0KGEpOwo+Pgo+CgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 08:59:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 08:59:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCgfj-00017o-Go; Tue, 24 Sep 2019 08:59:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCgfi-00017j-I2
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 08:59:46 +0000
X-Inumbo-ID: a7070bbe-dea9-11e9-960f-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id a7070bbe-dea9-11e9-960f-12813bfff9fa;
 Tue, 24 Sep 2019 08:59:45 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 1D183105704;
 Tue, 24 Sep 2019 10:59:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id fHHprOleHPbX; Tue, 24 Sep 2019 10:59:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id E89D21056F6
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 10:59:43 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 10:59:43 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190923120952.25938-1-sharan.santhanam@neclab.eu>
 <20190923120952.25938-5-sharan.santhanam@neclab.eu>
 <d9386617-c4bd-1ca9-9b23-9fc5e0d9e9da@neclab.eu>
 <437cd0e5-cdc3-b0f3-c67a-518f273d831c@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <66f0cf3e-b56c-599b-26e1-599680e7bb55@neclab.eu>
Date: Tue, 24 Sep 2019 10:59:43 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <437cd0e5-cdc3-b0f3-c67a-518f273d831c@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 4/4] lib/ukboot: Iterate
 through the inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGV5IFNoYXJhbiwKCkkgd2lsbCByZW1vdmUgdGhlIGNvbW1lbnQgdGhlbi4gVGhhbmtzIQoKUmV2
aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoKT24gMjQu
MDkuMTkgMTA6NDAsIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4gCj4gT24gOS8yNC8xOSAxMDow
MCBBTSwgU2ltb24gS3VlbnplciB3cm90ZToKPj4gT24gMjMuMDkuMTkgMTQ6MDksIFNoYXJhbiBT
YW50aGFuYW0gd3JvdGU6Cj4+PiBBZGQgc3VwcG9ydCB0byBpdGVyYXRlIHRocm91Z2ggdGhlIGlu
aXR0YWIgYW5kIGNhbGwgdGhlIGluaXQgZnVuY3Rpb25zLgo+Pj4KPj4+IFNpZ25lZC1vZmYtYnk6
IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1Pgo+Pj4gLS0tCj4+
PiDCoCBpbmNsdWRlL3VrL2luaXQuaCB8wqAgNiArKysrKysKPj4+IMKgIGxpYi91a2Jvb3QvYm9v
dC5jIHwgMjMgKysrKysrKysrKysrKysrKysrKysrKysKPj4+IMKgIDIgZmlsZXMgY2hhbmdlZCwg
MjkgaW5zZXJ0aW9ucygrKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VrL2luaXQuaCBi
L2luY2x1ZGUvdWsvaW5pdC5oCj4+PiBpbmRleCBiZWE0MTI3Li44YjdhOGFhIDEwMDY0NAo+Pj4g
LS0tIGEvaW5jbHVkZS91ay9pbml0LmgKPj4+ICsrKyBiL2luY2x1ZGUvdWsvaW5pdC5oCj4+PiBA
QCAtOTIsNiArOTIsMTIgQEAgdHlwZWRlZiBpbnQgKCp1a19pbml0X3QpKHZvaWQpOwo+Pj4gwqAg
I2RlZmluZSB1a19zeXNfaW5pdGNhbGwoZm4pwqDCoMKgwqDCoMKgIHVrX3N5c19pbml0Y2FsbF9w
cmlvKGZuLCA5KQo+Pj4gwqAgI2RlZmluZSB1a19sYXRlX2luaXRjYWxsKGZuKcKgwqDCoMKgwqAg
dWtfbGF0ZV9pbml0Y2FsbF9wcmlvKGZuLCA5KQo+Pj4gwqAgK2V4dGVybiBjb25zdCB1a19pbml0
X3QgdWtfaW5pdHRhYl9zdGFydFtdOwo+Pj4gK2V4dGVybiBjb25zdCB1a19pbml0X3QgdWtfaW5p
dHRhYl9lbmQ7Cj4+PiArCj4+PiArI2RlZmluZSB1a19pbml0dGFiX2ZvcmVhY2goaW5pdF9zdGFy
dCwgaW5pdF9lbmQsIGl0cinCoMKgwqDCoMKgwqDCoCBcCj4+PiArwqDCoMKgIGZvciAoaXRyID0g
REVDT05TVCh1a19pbml0X3QqLCBpbml0X3N0YXJ0KTsgaXRyIDwgJmluaXRfZW5kOyBpdHIrKykK
Pj4+ICsKPj4+IMKgICNpZmRlZiBfX2NwbHVzcGx1cwo+Pj4gwqAgfQo+Pj4gwqAgI2VuZGlmIC8q
IF9fY3BsdXNwbHVzICovCj4+PiBkaWZmIC0tZ2l0IGEvbGliL3VrYm9vdC9ib290LmMgYi9saWIv
dWtib290L2Jvb3QuYwo+Pj4gaW5kZXggN2ZiMDkwOC4uZjYxNTZlZSAxMDA2NDQKPj4+IC0tLSBh
L2xpYi91a2Jvb3QvYm9vdC5jCj4+PiArKysgYi9saWIvdWtib290L2Jvb3QuYwo+Pj4gQEAgLTU2
LDYgKzU2LDcgQEAKPj4+IMKgICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4+PiDCoCAjaW5j
bHVkZSA8dWsvcHJpbnQuaD4KPj4+IMKgICNpbmNsdWRlIDx1ay9jdG9ycy5oPgo+Pj4gKyNpbmNs
dWRlIDx1ay9pbml0Lmg+Cj4+PiDCoCAjaW5jbHVkZSA8dWsvYXJncGFyc2UuaD4KPj4+IMKgICNp
ZiBDT05GSUdfTElCVUtCVVMKPj4+IMKgICNpbmNsdWRlIDx1ay9idXMuaD4KPj4+IEBAIC04MSw2
ICs4MiwyMiBAQCBzdGF0aWMgdm9pZCBtYWluX3RocmVhZF9mdW5jKHZvaWQgKmFyZykKPj4+IMKg
wqDCoMKgwqAgaW50IGk7Cj4+PiDCoMKgwqDCoMKgIGludCByZXQ7Cj4+PiDCoMKgwqDCoMKgIHN0
cnVjdCB0aHJlYWRfbWFpbl9hcmcgKnRtYSA9IGFyZzsKPj4+ICvCoMKgwqAgdWtfaW5pdF90ICpp
dHI7Cj4+PiArCj4+PiArwqDCoMKgIC8qKgo+Pj4gK8KgwqDCoMKgICogUnVuIGluaXQgdGFibGUK
Pj4+ICvCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoCB1a19wcl9pbmZvKCJJbml0IFRhYmxlIEAgJXAg
LSAlcFxuIiwgJnVrX2luaXR0YWJfc3RhcnRbMF0sCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqAg
JnVrX2luaXR0YWJfZW5kKTsKPj4+ICvCoMKgwqAgdWtfaW5pdHRhYl9mb3JlYWNoKHVrX2luaXR0
YWJfc3RhcnQsIHVrX2luaXR0YWJfZW5kLCBpdHIpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCByZXQg
PSAoKml0cikoKTsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkgewo+Pj4gK8KgwqDC
oMKgwqDCoMKgwqDCoMKgwqAgdWtfcHJfZXJyKCJJbml0IGZ1bmN0aW9uIGF0ICVwIHJldHVybmVk
IGVycm9yICVkXG4iLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaXRy
LCByZXQpOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gVUtQTEFUX0NSQVNIOwo+
Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBleGl0Owo+Pj4gK8KgwqDCoMKgwqDCoMKg
IH0KPj4+ICvCoMKgwqAgfQo+Pj4gwqAgwqAgI2lmZGVmIENPTkZJR19MSUJVS0JVUwo+Pj4gwqDC
oMKgwqDCoCB1a19wcl9pbmZvKCJJbml0aWFsaXplIGJ1cyBoYW5kbGVycy4uLlxuIik7Cj4+PiBA
QCAtMTQ5LDYgKzE2Niw4IEBAIHN0YXRpYyB2b2lkIG1haW5fdGhyZWFkX2Z1bmModm9pZCAqYXJn
KQo+Pj4gwqDCoMKgwqDCoCByZXQgPSBtYWluKHRtYS0+YXJnYywgdG1hLT5hcmd2KTsKPj4+IMKg
wqDCoMKgwqAgdWtfcHJfaW5mbygibWFpbiByZXR1cm5lZCAlZCwgaGFsdGluZyBzeXN0ZW1cbiIs
IHJldCk7Cj4+PiDCoMKgwqDCoMKgIHJldCA9IChyZXQgIT0gMCkgPyBVS1BMQVRfQ1JBU0ggOiBV
S1BMQVRfSEFMVDsKPj4+ICsKPj4+ICtleGl0Ogo+Pj4gwqDCoMKgwqDCoCB1a3BsYXRfdGVybWlu
YXRlKHJldCk7IC8qIGRvZXMgbm90IHJldHVybiAqLwo+Pj4gwqAgfQo+Pj4gwqAgQEAgLTIzOSw2
ICsyNTgsMTAgQEAgdm9pZCB1a3BsYXRfZW50cnkoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKPj4+
IMKgwqDCoMKgwqAgfQo+Pj4gwqAgI2VuZGlmCj4+PiDCoCArLyoqCj4+PiArICogQWRkaW5nIHRo
ZSBpbml0IHRhYmxlLgo+Pj4gKyAqLwo+Pj4gKwo+Pgo+PiBJIGFtIG5vdCBnZXR0aW5nIHRoaXMg
Y29tbWVudC4uLiBJIGFtIHRoaW5raW5nIHRoYXQgeW91IG1lYW4gdG8gbW92ZSAKPj4gdGhlIGZv
bGxvd2luZyBjb2RlIChpcnEgaW5pdCwgcGxhdGZvcm0gdGltZSwgc2NoZWR1bGVyKSB0byBpbml0
IHRhYmxlIAo+PiBlbnRyaWVzIC0gc28gaXQgaXMgYSBUT0RPLCByaWdodD8KPj4gSSB0aGluaywg
c2luY2UgYmVjYXVzZSB0aG9zZSBpdGVtcyBhcmUgcmVhbGx5IHRyaWNreSwgSSB0ZW5kIHRvIGxl
YXZlIAo+PiB0aGUgY29tbWVudCBmb3Igbm93LiBBbHRlcm5hdGl2ZWx5LCBJIHByb3Bvc2UgdGhh
dCBJIGNoYW5nZSB0aGUgCj4+IGNvbW1lbnQgdG8gdGhlIGZvbGxvd2luZyB3aGlsZSB1cHN0cmVh
bWluZzoKPiBObyB3ZSBjYW4gcmVtb3ZlIGl0LiBXZSBjYW4gYWRkIGl0IHdoZW4gdGhlIHJlc3Qg
b2YgdGhlIGNvZGUgaXMgaW4gcGxhY2UKPj4KPj4gLyoKPj4gwqAqIFRPRE86IE1vdmUgdGhlIGZv
bGxvd2luZyBpbml0aWFsaXphdGlvbiBjYWxscyB0byBpbml0IHRhYmxlCj4+IMKgKi8KPj4KPj4g
TGV0IG1lIGtub3cgd2hhdCB5b3UgdGhpbmsuCj4+Cj4+PiDCoCAjaWYgQ09ORklHX0xJQlVLQUxM
T0MKPj4+IMKgwqDCoMKgwqAgdWtfcHJfaW5mbygiSW5pdGlhbGl6ZSBJUlEgc3Vic3lzdGVtLi4u
XG4iKTsKPj4+IMKgwqDCoMKgwqAgcmMgPSB1a3BsYXRfaXJxX2luaXQoYSk7Cj4+Pgo+PgoKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 09:40:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 09:40:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChJ4-0005BZ-Ef; Tue, 24 Sep 2019 09:40:26 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=36C+=XT=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iChJ2-0005BU-Vh
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 09:40:25 +0000
X-Inumbo-ID: 5445054c-deaf-11e9-9613-12813bfff9fa
Received: from EUR01-DB5-obe.outbound.protection.outlook.com (unknown
 [40.107.15.70]) by localhost (Halon) with ESMTPS
 id 5445054c-deaf-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 09:40:23 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=U/AHIZiTjr8vJMzlRI39kF7z3wsWfQc2CFaGy4fszvI=;
 b=a0SG5qfObBLpqpCxjWE3RZ6Ueu393BJCvSPghZ0yaLdY7GfSu/hT1Pz3AUf7+Zm6kSBgpvJLd+ZBCLLoVDmR2Idmy3IK5gAa8xzvGOZH2gW7bHgI0Iiyw6pbbTjI0a/aNQalVYUNuaivyf/dYI1b0zEjAj2ipDUF08rW4SAnIn0=
Received: from VE1PR08CA0035.eurprd08.prod.outlook.com (2603:10a6:803:104::48)
 by HE1PR08MB2860.eurprd08.prod.outlook.com (2603:10a6:7:38::29) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.20; Tue, 24 Sep
 2019 09:40:19 +0000
Received: from DB5EUR03FT015.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::203) by VE1PR08CA0035.outlook.office365.com
 (2603:10a6:803:104::48) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.22 via Frontend
 Transport; Tue, 24 Sep 2019 09:40:19 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT015.mail.protection.outlook.com (10.152.20.145) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.20 via Frontend Transport; Tue, 24 Sep 2019 09:40:17 +0000
Received: ("Tessian outbound fd4ad9e68831:v31");
 Tue, 24 Sep 2019 09:40:11 +0000
X-CR-MTA-TID: 64aa7808
Received: from 7d843a9a2504.3 (cr-mta-lb-1.cr-mta-net [104.47.14.50])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 1EBDA284-D0B1-4690-ACC1-13355BB4172D.1; 
 Tue, 24 Sep 2019 09:40:06 +0000
Received: from EUR04-VI1-obe.outbound.protection.outlook.com
 (mail-vi1eur04lp2050.outbound.protection.outlook.com [104.47.14.50])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 7d843a9a2504.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Tue, 24 Sep 2019 09:40:06 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=n0ak2dqLRXKvIh5bVBCKpZdCelvsTDew7V+xtdCyZS2W1rmqcNxFUm0QGi6+1wH3zQ/k9EFkOLcFXMQZarUgC6r938ARH4f1SXbL7t3csjjT4x2/8eCH7BGpvrfnkl7tA+ifv2sNeDdPD3jWL+0WgDWQzi145QJnWZEBfgEEdUuUfjHZLEAr5l3VL7hM77qqGjhoXQm6x6dKgij1JIz03RvkwycJXzq2cnf0wfTOok1fd7DCgeQa2nBk1Lx3WRcYftJ/rGAIVzkK+BKi60hPXo9r/ddlXwjJPw1ozT/nTpJOUhA77FwbbhCOS7ubBefyG7Rq/SF0oTWrILmO2BGTSg==
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=U/AHIZiTjr8vJMzlRI39kF7z3wsWfQc2CFaGy4fszvI=;
 b=Zqo14FrlsNpHQaOURc261+GTqum98rtjeEXVuQzDzuYIkHDqWsgV/7/kAEka2lX/UAUdFLdOFq0le77tmGnTUDiyi+7aQdn8tSVpDxHQUC58CJfZb/uhijrUpmmJbA8lI3hSmeaYENwjwmkGIO/teL1DHlZ/Szk9nfD6HlalNS7AL+cJXiEF4Rxympofm4hlkMTZYR9mG2R7JVKaSVXrjC0rLpZ2nQVHhXBvsPgS387wokPa+ULHdi2fgHtGdKBChrvW/xhEQlChOjVA6isOWHDMLfKI6nCfvTUQg+IdsRCrlgZcKbNWEGLbZWBR+J3u3MJ5w2fInV8BCMv9U7/dUA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=U/AHIZiTjr8vJMzlRI39kF7z3wsWfQc2CFaGy4fszvI=;
 b=a0SG5qfObBLpqpCxjWE3RZ6Ueu393BJCvSPghZ0yaLdY7GfSu/hT1Pz3AUf7+Zm6kSBgpvJLd+ZBCLLoVDmR2Idmy3IK5gAa8xzvGOZH2gW7bHgI0Iiyw6pbbTjI0a/aNQalVYUNuaivyf/dYI1b0zEjAj2ipDUF08rW4SAnIn0=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3803.eurprd08.prod.outlook.com (20.178.47.222) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.25; Tue, 24 Sep 2019 09:40:03 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2284.023; Tue, 24 Sep 2019
 09:40:03 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, Sharan Santhanam
 <sharan.santhanam@neclab.eu>, Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCHv3 5/7] plat/common: Find and register IRQ for
 arch_timer
Thread-Index: AQHVbT/ZQzUT9h143kO/CDxbf/rLMqcvr2WAgAATyoCAAyUsAIAB05QAgAW/s0CAABknAIAABf/A
Date: Tue, 24 Sep 2019 09:40:03 +0000
Message-ID: <DB7PR08MB3082477DCEDFAC5C69AF35D8F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
 <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
 <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
 <DB7PR08MB30827A87C6B63F0624D8D5A4F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <9a309b9a-8760-15c2-38c8-7206e7feb020@arm.com>
In-Reply-To: <9a309b9a-8760-15c2-38c8-7206e7feb020@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 3172fcf0-515a-4ed0-8a7e-506282020137.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: cff47122-13d0-4790-4a92-08d740d33567
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB7PR08MB3803; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3803:|DB7PR08MB3803:|HE1PR08MB2860:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <HE1PR08MB2860C98A81FDE05A6023A3B6F7840@HE1PR08MB2860.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
x-forefront-prvs: 0170DAF08C
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(136003)(376002)(396003)(366004)(39860400002)(189003)(199004)(53754006)(13464003)(76116006)(11346002)(64756008)(6436002)(9686003)(66556008)(66446008)(102836004)(66946007)(186003)(3846002)(55236004)(316002)(26005)(53546011)(6506007)(86362001)(54906003)(66476007)(76176011)(110136005)(446003)(8936002)(476003)(486006)(25786009)(305945005)(256004)(7736002)(14444005)(66066001)(81166006)(71200400001)(81156014)(33656002)(2501003)(52536014)(8676002)(71190400001)(2906002)(99286004)(478600001)(7696005)(74316002)(5660300002)(6116002)(4326008)(229853002)(55016002)(6246003)(14454004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3803;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: WZmWkZ2wHS9Rzm8nGxSFIQUPd/badrq+nHHiY+4Y+4xu+pxFWudV1T/rjaWCTeOecF9doFp3BfTgr2ITRvKoVQX2HcamTDMFdpZhOQ1OCORaVpngwD2QqHuThZndqZDspMJN/H++4k4p9r/s4rSx1kGn2T8isj+WHLFyQHDVrWp2Ij/NLVfSwscsGC2rDrqkyV+LXyqCIrH3EvTNQHHomuWHyudIdovfA7ZFK5wiSs9z1LamP6lbiLxB5of9xjPMdKqZtQhtdLJ7tBQx0/sOsV8fl4f6QvMxMFG0Qrr/ZHk5WQ5+oyZvNREUg6BjVtw+PAY8UqlF52FaUIKZRZb0iIIAG4mLsWIxigs6YHN2Tkox0ZaHZwt1UTaHG39smG8TLbFvxsNgU60zewwnqrXPDxADTj60f8IL8kfevb4lI00=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3803
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT015.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(136003)(39860400002)(396003)(376002)(13464003)(199004)(189003)(53754006)(478600001)(2906002)(22756006)(486006)(81156014)(126002)(2501003)(336012)(436003)(63350400001)(26826003)(86362001)(476003)(446003)(55016002)(6246003)(2486003)(23676004)(7696005)(25786009)(4326008)(14444005)(76176011)(8676002)(50466002)(11346002)(229853002)(14454004)(6506007)(33656002)(70206006)(186003)(66066001)(53546011)(47776003)(99286004)(70586007)(356004)(52536014)(316002)(74316002)(54906003)(9686003)(110136005)(7736002)(81166006)(6116002)(26005)(8936002)(305945005)(102836004)(30864003)(3846002)(5660300002)(76130400001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR08MB2860;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: e89bf3cc-9064-4627-3e63-08d740d32cf1
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:HE1PR08MB2860; 
NoDisclaimer: True
X-Forefront-PRVS: 0170DAF08C
X-Microsoft-Antispam-Message-Info: NonPO11QqIHdbkSK3Gl3pU4kxIuHoX0YjYN3AjQCmcbzITI05mbk7Bpek4MDO4PwLmUDGAwbh4Dqdq5Ylx6eE6e5oJKo4Nvejh5Yxm9mHQ79ehok4exUD/+HAiEm5tcgCtmKmVXLPLO6aOCy4pGUocnF7buBi4HYO1uIsZSKKh1yC+dOYq+bR6T07BXKPq2l7HztfTpSXBvvvDEL0tCLTGdKw4hsnSem5ZAwHTN6ma9wj5SmLb83cs2+m4wpUCWDaYWQzZvhj5F5trsRX4A/xTX9qpCTEuV97w0vfEArbw/g5bBeBaXVYGOt1FQHTTSD8/OuEX08j2wc5GHDkCdzmw2uOiOkTG8hv3OLfh4Fe6pgSiywi83+m5cN/X0p6QDoWGkk8t4tyGoVGM4U2rl5caHWUN60SaVIBOKG1SSvWac=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Sep 2019 09:40:17.3802 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: cff47122-13d0-4790-4a92-08d740d33567
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR08MB2860
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuIGFuZCBTaGFyYW4NCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBG
cm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPg0KPiBTZW50OiAyMDE55bm0
OeaciDI05pelIDE3OjA5DQo+IFRvOiBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSA8
SnVzdGluLkhlQGFybS5jb20+OyBTaGFyYW4NCj4gU2FudGhhbmFtIDxzaGFyYW4uc2FudGhhbmFt
QG5lY2xhYi5ldT47IFNhbnRpYWdvIFBhZ2FuaQ0KPiA8U2FudGlhZ28uUGFnYW5pQG5lY2xhYi5l
dT47IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24NCj4gS3VlbnplciA8
c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IENjOiBLYWx5IFhpbiAoQXJtIFRlY2hub2xvZ3kg
Q2hpbmEpIDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpIENoZW4gKEFybQ0KPiBUZWNobm9sb2d5IENo
aW5hKSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0gVGVjaG5vbG9neQ0KPiBD
aGluYSkgPEppYW55b25nLld1QGFybS5jb20+OyBuZCA8bmRAYXJtLmNvbT4NCj4gU3ViamVjdDog
UmU6IFtVTklLUkFGVCBQQVRDSHYzIDUvN10gcGxhdC9jb21tb246IEZpbmQgYW5kIHJlZ2lzdGVy
IElSUQ0KPiBmb3IgYXJjaF90aW1lcg0KPiANCj4gSGksDQo+IA0KPiBPbiAyNC8wOS8yMDE5IDA4
OjQ0LCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90ZToNCj4gPj4gLS0tLS1P
cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFu
LnNhbnRoYW5hbUBuZWNsYWIuZXU+DQo+ID4+IFNlbnQ6IDIwMTnlubQ55pyIMjDml6UgMjM6NTEN
Cj4gPj4gVG86IEp1bGllbiBHcmFsbCA8SnVsaWVuLkdyYWxsQGFybS5jb20+OyBKdXN0aW4gSGUg
KEFybSBUZWNobm9sb2d5DQo+IENoaW5hKQ0KPiA+PiA8SnVzdGluLkhlQGFybS5jb20+OyBTYW50
aWFnbyBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Ow0KPiA+PiBtaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFNpbW9uIEt1ZW56ZXINCj4gPj4gPHNpbW9uLmt1ZW56
ZXJAbmVjbGFiLmV1Pg0KPiA+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8
S2FseS5YaW5AYXJtLmNvbT47IFdlaSBDaGVuDQo+IChBcm0NCj4gPj4gVGVjaG5vbG9neSBDaGlu
YSkgPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtDQo+IFRlY2hub2xvZ3kNCj4g
Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+DQo+ID4+IFN1
YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCBy
ZWdpc3Rlcg0KPiBJUlENCj4gPj4gZm9yIGFyY2hfdGltZXINCj4gPj4NCj4gPj4NCj4gPj4gT24g
OS8xOS8xOSAxOjU3IFBNLCBKdWxpZW4gR3JhbGwgd3JvdGU6DQo+ID4+PiBIaSwNCj4gPj4+DQo+
ID4+PiBPbiAxNy8wOS8yMDE5IDEyOjU1LCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOg0KPiA+Pj4+
IEhlbGxvLA0KPiA+Pj4+DQo+ID4+Pj4gT24gOS8xNy8xOSAxMjo0NCBQTSwgSnVsaWVuIEdyYWxs
IHdyb3RlOg0KPiA+Pj4+PiBIaSwNCj4gPj4+Pj4NCj4gPj4+Pj4gT24gOS8xNy8xOSAxMTowOCBB
TSwgU2hhcmFuIFNhbnRoYW5hbSB3cm90ZToNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBPbiA5LzE3LzE5
IDExOjE3IEFNLCBKdWxpZW4gR3JhbGwgd3JvdGU6DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+Pg0KPiA+
Pj4+Pj4+IE9uIDkvMTcvMTkgOTo0NCBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGlu
YSkgd3JvdGU6DQo+ID4+Pj4+Pj4+IEhpIEp1bGllbg0KPiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4gSGks
DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+
Pj4+Pj4+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPg0KPiA+Pj4+
Pj4+Pj4gU2VudDogMjAxOeW5tDnmnIgxN+aXpSAxNjozOQ0KPiA+Pj4+Pj4+Pj4gVG86IEp1c3Rp
biBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNvbT47DQo+ID4+IFNh
bnRpYWdvDQo+ID4+Pj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Ow0K
PiA+Pj4+Pj4+Pj4gbWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOw0KPiA+Pj4+Pj4+
Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+OyBTaGFyYW4NCj4gU2Fu
dGhhbmFtDQo+ID4+Pj4+Pj4+PiA8U2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+DQo+ID4+Pj4+
Pj4+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNv
bT47IFdlaQ0KPiA+PiBDaGVuDQo+ID4+Pj4+Pj4+PiAoQXJtDQo+ID4+Pj4+Pj4+PiBUZWNobm9s
b2d5IENoaW5hKSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0NCj4gPj4gVGVj
aG5vbG9neQ0KPiA+Pj4+Pj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsgbmQgPG5k
QGFybS5jb20+DQo+ID4+Pj4+Pj4+PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83
XSBwbGF0L2NvbW1vbjogRmluZCBhbmQNCj4gPj4+Pj4+Pj4+IHJlZ2lzdGVyIElSUQ0KPiA+Pj4+
Pj4+Pj4gZm9yIGFyY2hfdGltZXINCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBPbiA5LzE3LzE5
IDg6MDEgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOg0KPiA+Pj4+
Pj4+Pj4+IEhpIEp1bGllbiAod2VsY29tZSBiYWNrIGZyb20gaG9saWRheSDwn5iKICkNCj4gPj4+
Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBIaSwNCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBUaGFua3Mg
OikuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t
LQ0KPiA+Pj4+Pj4+Pj4+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29t
Pg0KPiA+Pj4+Pj4+Pj4+PiBTZW50OiAyMDE55bm0OeaciDE35pelIDM6NTMNCj4gPj4+Pj4+Pj4+
Pj4gVG86IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNv
bT47DQo+ID4+Pj4+Pj4+Pj4+IFNhbnRpYWdvDQo+ID4+Pj4+Pj4+Pj4+IFBhZ2FuaSA8U2FudGlh
Z28uUGFnYW5pQG5lY2xhYi5ldT47DQo+ID4+Pj4+Pj4+Pj4+IG1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZzsNCj4gPj4+Pj4+Pj4+Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3Vlbnpl
ckBuZWNsYWIuZXU+OyBTaGFyYW4NCj4gPj4gU2FudGhhbmFtDQo+ID4+Pj4+Pj4+Pj4+IDxTaGFy
YW4uU2FudGhhbmFtQG5lY2xhYi5ldT4NCj4gPj4+Pj4+Pj4+Pj4gQ2M6IEthbHkgWGluIChBcm0g
VGVjaG5vbG9neSBDaGluYSkgPEthbHkuWGluQGFybS5jb20+Ow0KPiBXZWkNCj4gPj4gQ2hlbg0K
PiA+Pj4+Pj4+Pj4gKEFybQ0KPiA+Pj4+Pj4+Pj4+PiBUZWNobm9sb2d5IENoaW5hKSA8V2VpLkNo
ZW5AYXJtLmNvbT47IEppYW55b25nIFd1DQo+IChBcm0NCj4gPj4+Pj4+Pj4+IFRlY2hub2xvZ3kN
Cj4gPj4+Pj4+Pj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPg0KPiA+Pj4+Pj4+Pj4+
PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZA0K
PiBhbmQNCj4gPj4+Pj4+Pj4+Pj4gcmVnaXN0ZXINCj4gPj4+Pj4+Pj4+IElSUQ0KPiA+Pj4+Pj4+
Pj4+PiBmb3IgYXJjaF90aW1lcg0KPiA+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+PiBPbiA5LzE2
LzE5IDg6NTIgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpDQo+IHdyb3RlOg0K
PiA+Pj4+Pj4+Pj4+Pj4gSGkgIFNhbnRpYWdvDQo+ID4+Pj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+Pj4+
IEhpIGFsbCwNCj4gPj4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+Pj4gQFNhbnRpYWdvLCBpdCBpcyBx
dWl0ZSBkaWZmaWN1bHQgdG8gZm9sbG93IHRoZSB0aHJlYWQgd2hlbiB5b3UNCj4gPj4+Pj4+Pj4+
Pj4gc3RhcnQNCj4gPj4+Pj4+Pj4+Pj4geW91ciBhbnN3ZXIgd2l0aCAiQ09NTUVOVCIuIE1heSBJ
IGFzayB5b3UgdG8gY29uZmlndXJlDQo+IHlvdXINCj4gPj4+Pj4+Pj4+Pj4gZS1tYWlsDQo+ID4+
Pj4+Pj4+Pj4+IGNsaWVudCB0byBxdW90ZSBwcm9wZXJseSAoaS5lID4pPw0KPiA+Pj4+Pj4+Pj4+
Pg0KPiA+Pj4+Pj4+Pj4+PiBGdXJ0aGVybW9yZSwgZGlzY2xhaW1lciBmb290ZXIgc2hvdWxkIGJl
IGF2b2lkZWQgb24gdGhlDQo+ID4+Pj4+Pj4+Pj4+IG1haWxpbmcgbGlzdC4NCj4gPj4+Pj4+Pj4+
Pj4gWW91IGFyZSBiYXNpY2FsbHkgc2F5aW5nIHRoaXMgaXMgY29uZmlkZW50aWFsIGJ1dCB5b3Ug
c2VuZCB0bw0KPiA+Pj4+Pj4+Pj4+PiBldmVyeW9uZQ0KPiA+Pj4+Pj4+Pj4+PiAobWFpbGluZyBs
aXN0IGFyZSBhcmNoaXZlZCkuLi4NCj4gPj4+Pj4+Pj4+PiBPSw0KPiA+Pj4+Pj4+Pj4NCj4gPj4+
Pj4+Pj4+IEl0IHdhc24ndCBkaXJlY3RlZCB0byB5b3UgOykuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+
Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+PiBbLi4uXQ0KPiA+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+
Pj4+IENPTU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIGhl
cmU/DQo+ID4+IE5vdA0KPiA+Pj4+Pj4+Pj4+Pj4+IGV2ZW4NCj4gPj4+Pj4+Pj4+Pj4+PiBkaXNh
YmxlIHRoZSBJUlE/IEFzIHRoZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUNCj4gPj4g
Y291bnRlcg0KPiA+Pj4+Pj4+Pj4+PiBvdmVyZmxvd3MNCj4gPj4+Pj4+Pj4+Pj4+PiB3ZSB3b3Vs
ZCBnZXQgYSBuZXcgaW50ZXJydXB0IG90aGVyd2lzZSAoYWx0aG91Z2ggdGhlDQo+ID4+Pj4+Pj4+
Pj4+Pj4gb3ZlcmZsb3cgY291bGQNCj4gPj4+Pj4+Pj4+Pj4+PiBoYXBwZW4gaW4gYSB2ZXJ5IHZl
cnkgbG9uZyB0aW1lLCByaWdodD8pDQo+ID4+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+Pj4gSW4g
cHJldmlvdXMgdmVyc2lvbiwgd2UgYWRkZWQgYSBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkNCj4g
aW4NCj4gPj4+Pj4+Pj4+Pj4+IGdlbmVyaWNfdGltZXJfaXJxX2hhbmRsZXIuIEJ1dCBhcyBwZXIg
dGhlIHN1Z2dlc3Rpb24gWzFdDQo+IGZyb20NCj4gPj4+Pj4+Pj4+Pj4+IEp1bGllbiwNCj4gPj4+
Pj4+Pj4+IHdlDQo+ID4+Pj4+Pj4+Pj4+PiByZW1vdmVkIGl0LiBCZXNpZGVzLCB3ZSByZWZlcnJl
ZCB0byB0aGUgbWluaW9zIGxvZ2ljIGF0IFsyXSwNCj4gPj4+Pj4+Pj4+Pj4+IGl0IG9ubHkgY2Fs
bGVkDQo+ID4+Pj4+Pj4+Pj4+PiB1bm1hc2sgYW5kIG1hc2sgaW4gYmxvY2tfZG9tYWluICh3aGlj
aCBpcyBlcXVpdmFsZW50IHRvDQo+ID4+Pj4+Pj4+Pj4+PiB1bmlrcmFmdCdzDQo+ID4+Pj4+Pj4+
Pj4+PiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykNCj4gPj4+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+
Pj4gTG9va2luZyBhdCBteSBjb21tZW50cyBhZ2FpbiwgSSBhbSBub3Qgc3VyZSB3aGVyZSBJDQo+
ID4+IHN1Z2dlc3RlZCB0bw0KPiA+Pj4+Pj4+Pj4gcmVtb3ZlDQo+ID4+Pj4+Pj4+Pj4+IGdlbmVy
aWNfdGltZXJfbWFza19pcnEoKS4uLiBDYW4geW91IGV4cGFuZCBpdD8NCj4gPj4+Pj4+Pj4+PiBP
a2F5Li4uIHNvcnJ5IGZvciBteSBtaXN0YWtlcy4gSSB3aWxsIGFkZA0KPiA+Pj4+Pj4+Pj4+IGdl
bmVyaWNfdGltZXJfbWFza19pcnEoKSBiYWNrLg0KPiA+Pj4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4+
PiBGV0lXLCB0aGUgdHdvIG1haW4gY29tbWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb25zDQo+
IHdlcmU6DQo+ID4+Pj4+Pj4+Pj4+ICAgICAgICAxKSBpc2IoKSBzaG91bGQgYmUgYWRkZWQgYWZ0
ZXIgdXBkYXRpbmcgdGhlIHN5c3RlbQ0KPiA+Pj4+Pj4+Pj4+PiByZWdpc3RlciB0bw0KPiA+Pj4+
Pj4+Pj4+PiBlbnN1cmUgdGhhdCB0aGUgc3lzdGVtIHN5c3RlbSBpcyBzeW5jaHJvbml6ZWQNCj4g
Pj4+Pj4+Pj4+Pj4gICAgICAgIDIpIFRoaXMgaXMgY29tbW9uIGNvZGUgYmV0d2VlbiBhcm0zMiBh
bmQgYXJtNjQuIEJ1dA0KPiB0aGUNCj4gPj4+Pj4+Pj4+Pj4gc3lzdGVtDQo+ID4+Pj4+Pj4+Pj4+
IHJlZ2lzdGVyIG5hbWUgYXJlIGFybTY0Li4uIEFjY2Vzc2VzIHNob3VsZCBiZSBzdHViIGluDQo+
ID4+Pj4+Pj4+Pj4+IGFyY2gtc3BlY2lmaWMNCj4gPj4+Pj4+Pj4+Pj4gaGVhZGVyIHNvIHRoZSBj
b2RlIGNhbiB3b3JrIGZvciBib3RoIGFybTMyIGFuZCBhcm02NC4NCj4gPj4+Pj4+Pj4+PiBJIHJl
bmFtZWQgcGxhdC9jb21tb24vYXJtL3RpbWUuYyB0bw0KPiA+PiBwbGF0L2NvbW1vbi9hcm0vdGlt
ZV9hcm02NC5jDQo+ID4+Pj4+Pj4+Pj4gU2VlbXMgdGhhdCBpcyBub3QgZW5vdWdoIGZvciB5b3U/
ICBJZiBubywgSSBoYXZlIG5vIG9iamVjdGlvbnMNCj4gPj4+Pj4+Pj4+PiB0byBtYWtlDQo+ID4+
Pj4+Pj4+Pj4gYSBzdHViICBmb3IgYXJtMzIuDQo+ID4+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+Pj4gV2Vs
bCwgdGhlIG9ubHkgYml0cyBhcm02NCBzcGVjaWZpY3MgaW4gdGhpcyBmaWxlIGFyZSB0aGUgYWNj
ZXNzDQo+ID4+Pj4+Pj4+PiB0byB0aGUNCj4gPj4+Pj4+Pj4+IHN5c3RlbSByZWdpc3RlcnMuIFNv
IHJlbmFtaW5nIHRvIHRpbWVfYXJtNjQuYyBzZWVtcyBhIGJpdA0KPiA+Pj4+Pj4+Pj4gb3Zlcmtp
bGwuLi4NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBJZiB0aGVyZSBhcmUgcGxhbiB0byBtYWtl
IGFybTMyIGEgY29ycmVjdCBwb3J0IG9uIFVuaWtyYWZ0LCB0aGVuDQo+ID4+Pj4+Pj4+PiBzcGxp
dHRpbmcgdGhlIGNvZGUgd291bGQgYmUgdGhlIGJlc3QuIElmIHRoZXJlIGFyZSBubyBwbGFuIHRv
DQo+ID4+Pj4+Pj4+PiBnZXQgYXJtMzIsDQo+ID4+Pj4+Pj4+PiB0aGVuIG1heWJlIHlvdSBzaG91
bGQgdGhpbmsgb2Yga2lsbGluZyBpdCBjb21wbGV0ZWx5Lg0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+
PiBBcm0zMiB4ZW4gcGxhdCBpcyBpbml0aWFsbHkgc3VwcG9ydGVkIGJ1dCBubyBvbmUgIGhhcyB0
b3VjaGVkDQo+ID4+Pj4+Pj4+IHRoYXQgZm9yIGEgbG9uZw0KPiA+Pj4+Pj4+PiB0aW1lLiBDdXJy
ZW50bHkgbGV04oCZcyBmb2N1cyBvbiBhcm02NCBrdm0gcGxhdCBvbmx5LiBJZiB0aGUNCj4gPj4+
Pj4+Pj4gcmVxdWlyZW1lbnRzIGNoYW5nZXMsDQo+ID4+Pj4+Pj4+IHdlIGNhbiBzdXBwb3J0IGFy
bTMyIGFkZGl0aW9uYWxseS4gV2hhdCBkbyB5b3UgdGhpbmsgYWJvdXQgaXQ/DQo+ID4+Pj4+Pj4N
Cj4gPj4+Pj4+PiBJIGFtIG5vdCBhc2tpbmcgdG8gaW1wbGVtZW50IGFybTMyLCBJIGFtIG9ubHkg
c3VnZ2VzdGluZyB0byB0cnkNCj4gdG8NCj4gPj4+Pj4+PiBzcGxpdCB0aGUgY29kZSByYXRoZXIg
dGhhbiB0cnlpbmcgdG8gbWl4IGNvbW1vbiBjb2RlIHZzIGFyY2gNCj4gPj4+Pj4+PiBzcGVjaWZp
YyBjb2RlIGluIHBsYXQvY29tbW9uL2FybS4gVGhhdCBkaXJlY3RvcnkgaW4gcGFydGljdWxhciBp
cw0KPiA+Pj4+Pj4+IGxvb2tpbmcgbWVzc2llciBhbmQgbWVzc2llciBhcyBuZXcgc2VyaWVzIGFy
ZSBwb3N0ZWQuDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gSSBhZ3JlZSB3aXRoIEp1bGllbiBpdCBpcyBi
ZXR0ZXIgdG8gc3BsaXQgdGhlIGFybTMyIGNvZGUgZnJvbSB0aGUNCj4gPj4+Pj4+IGFybTY0IGNv
ZGUuIE15IHN1Z2dlc3Rpb24gd291bGQgYmUNCj4gPj4+Pj4+DQo+ID4+Pj4+PiBwbGF0L2NvbW1v
bi9hcm0gZm9yIDMyLWJpdCBjb2RlDQo+ID4+Pj4+Pg0KPiA+Pj4+Pj4gcGxhdC9jb21tb24vYXJt
NjQgZm9yIHRoZSA2NC1iaXQuDQo+ID4+Pj4+DQo+ID4+Pj4+IFdlbGwgeW91IGNhbiBzaGFyZSBh
IGxvdCBvZiBjb2RlIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQuIElmIHdlDQo+ID4+Pj4+IHRh
a2UgdGhlIGV4YW1wbGUgb2YgdGhlIGFyY2ggdGltZXIsIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMg
dGhlIHdheQ0KPiA+Pj4+PiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyAoaS5lLiBzeXN0ZW0gcmVn
aXN0ZXJzIHZzIGNvLXByb2Nlc3Nvcg0KPiA+Pj4+PiByZWdpc3RlcnMpLg0KPiA+Pj4+DQo+ID4+
Pj4gU2luY2UgaXQgaXMgcHJpbWFyaWx5IGFib3V0IHRoZSBjbyBwcm9jZXNzb3IgYW5kIHN5c3Rl
bSByZWdpc3Rlci4gSG93DQo+ID4+Pj4gYWJvdXQgcHVzaGluZyB0aGUgZnVuY3Rpb25hbGl0eSBp
bnRvIHRoZSByZXNwZWN0aXZlIGhlYWRlci4NCj4gPj4+DQo+ID4+PiBGb3IgdGhlIHRpbWVyIHRo
aXMgaXMgbW9zdGx5IHN5c3RlbSByZWdpc3RlciwgYnV0IHRoZXJlIGFyZS93aWxsIGJlDQo+ID4+
PiBzcGVjaWZpYyBhcm02NC9hcm0zMiBjb2RlIChzdWNoIGFzIGFzc2VtYmx5IGZpbGUpLiBTbyBJ
IHdvdWxkDQo+ID4+PiByZWNvbW1lbmQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRyZWUgdGhhdCBh
bGxvd3Mgc3VjaCBzcGxpdC4NCj4gPj4NCj4gPj4gSSBhZ3JlZS4NCj4gPj4NCj4gPj4+DQo+ID4+
Pj4NCj4gPj4+PiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS90aW1lLmgNCj4gPj4+Pg0KPiA+Pj4+
ICAgICAgIFRoZSBoZWFkZXIgaW5jbHVkZXMgYXJjaCBzcGVjaWZpYyBoZWFkZXIgZmlsZXMuDQo+
ID4+Pj4NCj4gPj4+PiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90aW1lLmgNCj4gPj4+
Pg0KPiA+Pj4+ICAgICAgUHJvdmlkZXMgYSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgaW1wbGVtZW50
YXRpb24gZm9yIHJlYWRpbmcNCj4gPj4+PiBzeXN0ZW0gcmVnaXN0ZXJzIHdoaWxlIHByb3ZpZGlu
ZyBhIG1hY3JvIGRlZmluaXRpb24gZm9yIHJlYWRpbmcNCj4gPj4+PiByZWdpc3RlciBsaWtlOg0K
PiA+Pj4+DQo+ID4+Pj4gICAgI2RlZmluZSAgZWwwX2NudHZfY3RsX2dldCAgU1lTUkVHX1JFQUQz
MihjbnR2X2N0bF9lbDApDQo+ID4+Pj4NCj4gPj4+PiAgICAjZGVmaW5lICBlbDBfY250dl9jdGxf
c2V0KHZhbCkgIChjbnR2X2N0bF9lbDAsIHZhbCkNCj4gPj4+DQo+ID4+PiBUaGVyZSBhcmUgZG96
ZW5zIG9mIHN5c3RlbSByZWdpc3RlcnMsIHNvIEkgYW0gbm90IHN1cmUgeW91IHdvdWxkIHdhbnQN
Cj4gPj4+IHRvIGNyZWF0ZSBoZWxwZXIgZm9yIGV2ZXJ5IG9mIHRoZW0uIEl0IHdvdWxkIGJlIGJl
c3QgaWYgeW91IGZpbmQgYSB3YXkNCj4gPj4+IHRvIGFic3RyYWN0IHRoaXMuDQo+ID4+DQo+ID4+
IEkgYWdyZWUgd2UgY291bGQgYWJzdHJhY3QgaXQgbW9yZSB1c2luZyB0aGUgQUFyY2g2NCBzeXN0
ZW0gcmVnaXN0ZXINCj4gbmFtZS4NCj4gPj4NCj4gPj4gI2RlZmluZSBlbDBfZ2V0KHJlZykgU1lT
UkVHX1JFQUQoICMjIHJlZyAjIyApDQo+ID4NCj4gPiBCdXQgdGhlIHByZWZpeCAiZWwwXyIgZ2Vu
ZXJhbGx5IG1lYW5zIGl0IGlzIGEgQWFyY2g2NCByZWdpc3Rlci4NCj4gPiBlLmcuIENOVFZfQ1RM
X0VMMCBpcyB0aGUgYWFyY2g2NCBuYW1lLiBDTlRWX0NUTCBpcyB0aGUgYWFyY2gzMiBuYW1lLg0K
PiANCj4gV2VsbCwgaWYgeW91IHdhbnQgdG8gZ2V0IGNvbW1vbiBjb2RlIHlvdSB3aWxsIGhhdmUg
dG8gZmluZCBhIGNvbW1vbg0KPiBuYW1pbmcuIFlvdQ0KPiBoYXZlIGEgZmV3IGNob2ljZXMgaGVy
ZToNCj4gICAgIDEpIFVzZSB0aGUgQUFyY2g2NCBuYW1lcyBhbmQgYWxpYXMgdGhlIEFBcmNoMzIg
bmFtZXMuIFRoaXMgaXMgd2hhdCB3ZQ0KPiBkbyBmb3INCj4gWGVuLg0KPiAgICAgMikgVXNlIHRo
ZSBBQXJjaDMyIG5hbWVzIGFuZCBhbGlhcyB0aGUgQUFyY2g2NCBuYW1lcy4NCj4gICAgIDMpIFBy
b3ZpZGluZyBoZWxwZXIgZm9yIGV2ZXJ5IHNpbmdsZSByZWdpc3RlcnMuDQo+IA0KPiBUaGUgQUFy
Y2g2NCBuYW1lcyBoYXZlIHRoZSBhZHZhbnRhZ2UgdG8gdGVsbCB5b3Ugd2hhdCBpcyB0aGUgbG93
ZXN0IGxldmVsDQo+IHRoZXkNCj4gY2FuIGJlIGFjY2Vzc2VkIGZybw0KPiANCj4gUmVnYXJkaW5n
IFNoYXJhbSdzIHN1Z2dlc3QsIGVsMF9nZXQoKSBpbXBsaWVzIHlvdSBjYW4gb25seSB1c2Ugd2l0
aCBzeXN0ZW0NCj4gcmVnaXN0ZXIgYWNjZXNzaWJsZSBhdCBFTDAgKGkuZS4gdXNlcnNwYWNlKS4g
VW5pa3JhZnQgd2lsbCBhbHNvIG5lZWQgdG8gYWNjZXNzDQo+IHN5c3RlbSByZWdpc3RlciBvbmx5
IGFjY2Vzc2libGUgYXQgRUwxLg0KDQpPa2F5LCBnb3QgaXQNCg0KPiANCj4gU28geW91IG1heSB3
YW50IHRvIHRoaW5rIGZvciBhIGRpZmZlcmVudCBuYW1lLiBNYXliZSB7cmVhZCwNCj4gd3JpdGV9
X3N5c3JlZygpPyBJDQo+IGhhdmVuJ3Qgc3VnZ2VzdGVkIGdldCBiZWNhdXNlIHRoZSBjb3VudGVy
cGFydCAncHV0JyBkb2VzIG5vdCBzZWVtIHN1aXRhYmxlDQo+IGhlcmUuDQoNCkkgd291bGQgcHJl
ZmVyIHRvIGNob29zZSB3aGF0IGZyZWVic2QgZGlkOg0KI2lmZGVmIF9fYXJtX18NCiNkZWZpbmUJ
Z2V0X2VsMCh4KQljcDE1XyMjIHggIyNfZ2V0KCkNCiNkZWZpbmUJZ2V0X2VsMSh4KQljcDE1XyMj
IHggIyNfZ2V0KCkNCiNkZWZpbmUJc2V0X2VsMCh4LCB2YWwpCWNwMTVfIyMgeCAjI19zZXQodmFs
KQ0KI2RlZmluZQlzZXRfZWwxKHgsIHZhbCkJY3AxNV8jIyB4ICMjX3NldCh2YWwpDQojZWxzZSAv
KiBfX2FhcmNoNjRfXyAqLw0KI2RlZmluZQlnZXRfZWwwKHgpCVJFQURfU1BFQ0lBTFJFRyh4ICMj
X2VsMCkNCiNkZWZpbmUJZ2V0X2VsMSh4KQlSRUFEX1NQRUNJQUxSRUcoeCAjI19lbDEpDQojZGVm
aW5lCXNldF9lbDAoeCwgdmFsKQlXUklURV9TUEVDSUFMUkVHKHggIyNfZWwwLCB2YWwpDQojZGVm
aW5lCXNldF9lbDEoeCwgdmFsKQlXUklURV9TUEVDSUFMUkVHKHggIyNfZWwxLCB2YWwpDQojZW5k
aWYNCg0KV2hhdCBkbyB5b3UgdGhpbms/DQoNCi0tDQpDaGVlcnMsDQpKdXN0aW4gKEppYSBIZSkN
Cg0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 09:41:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 09:41:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChKV-0005Ed-K9; Tue, 24 Sep 2019 09:41:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=IFsf=XT=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iChKT-0005EY-KH
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 09:41:53 +0000
X-Inumbo-ID: 83f706be-deaf-11e9-9613-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 83f706be-deaf-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 09:41:42 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 503A7142F;
 Tue, 24 Sep 2019 02:41:42 -0700 (PDT)
Received: from [10.1.196.50] (e108454-lin.cambridge.arm.com [10.1.196.50])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 27A963F67D;
 Tue, 24 Sep 2019 02:41:41 -0700 (PDT)
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
 <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
 <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
 <DB7PR08MB30827A87C6B63F0624D8D5A4F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <9a309b9a-8760-15c2-38c8-7206e7feb020@arm.com>
 <DB7PR08MB3082477DCEDFAC5C69AF35D8F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <92069c79-a4d3-66ab-cd87-400f3d3e23ef@arm.com>
Date: Tue, 24 Sep 2019 10:41:40 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <DB7PR08MB3082477DCEDFAC5C69AF35D8F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

CgpPbiAyNC8wOS8yMDE5IDEwOjQwLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3
cm90ZToKPj4gU28geW91IG1heSB3YW50IHRvIHRoaW5rIGZvciBhIGRpZmZlcmVudCBuYW1lLiBN
YXliZSB7cmVhZCwKPj4gd3JpdGV9X3N5c3JlZygpPyBJCj4+IGhhdmVuJ3Qgc3VnZ2VzdGVkIGdl
dCBiZWNhdXNlIHRoZSBjb3VudGVycGFydCAncHV0JyBkb2VzIG5vdCBzZWVtIHN1aXRhYmxlCj4+
IGhlcmUuCj4gCj4gSSB3b3VsZCBwcmVmZXIgdG8gY2hvb3NlIHdoYXQgZnJlZWJzZCBkaWQ6Cj4g
I2lmZGVmIF9fYXJtX18KPiAjZGVmaW5lCWdldF9lbDAoeCkJY3AxNV8jIyB4ICMjX2dldCgpCj4g
I2RlZmluZQlnZXRfZWwxKHgpCWNwMTVfIyMgeCAjI19nZXQoKQo+ICNkZWZpbmUJc2V0X2VsMCh4
LCB2YWwpCWNwMTVfIyMgeCAjI19zZXQodmFsKQo+ICNkZWZpbmUJc2V0X2VsMSh4LCB2YWwpCWNw
MTVfIyMgeCAjI19zZXQodmFsKQo+ICNlbHNlIC8qIF9fYWFyY2g2NF9fICovCj4gI2RlZmluZQln
ZXRfZWwwKHgpCVJFQURfU1BFQ0lBTFJFRyh4ICMjX2VsMCkKPiAjZGVmaW5lCWdldF9lbDEoeCkJ
UkVBRF9TUEVDSUFMUkVHKHggIyNfZWwxKQo+ICNkZWZpbmUJc2V0X2VsMCh4LCB2YWwpCVdSSVRF
X1NQRUNJQUxSRUcoeCAjI19lbDAsIHZhbCkKPiAjZGVmaW5lCXNldF9lbDEoeCwgdmFsKQlXUklU
RV9TUEVDSUFMUkVHKHggIyNfZWwxLCB2YWwpCj4gI2VuZGlmCj4gCj4gV2hhdCBkbyB5b3UgdGhp
bms/CgpJIGFtIG9rIHdpdGggdGhhdC4KCkNoZWVycywKCi0tIApKdWxpZW4gR3JhbGwKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 09:56:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 09:56:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChYo-00062q-QS; Tue, 24 Sep 2019 09:56:42 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d6A1=XT=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iChYn-00062l-22
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 09:56:41 +0000
X-Inumbo-ID: 99c4972a-deb1-11e9-9613-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 99c4972a-deb1-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 09:56:38 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id D6531105708;
 Tue, 24 Sep 2019 11:56:37 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id TvZ7HzxXI-oW; Tue, 24 Sep 2019 11:56:37 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4D9DA105709
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 11:56:37 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 11:56:36 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
 <20190917093833.29868-4-felipe.huici@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <67f962e1-f445-cd3a-4600-95b43fec977b@neclab.eu>
Date: Tue, 24 Sep 2019 11:56:36 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190917093833.29868-4-felipe.huici@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 3/3] Add
 Unikraft-specific config.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZWVtcyBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNo
YXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKCk9uIDkvMTcvMTkgMTE6MzggQU0sIEZlbGlwZSBI
dWljaSB3cm90ZToKPiBBZGQgY29uZmlnLmggYW5kIGdsdWUgaGVhZGVyIGZpbGUgbmVlZGVkIGJ5
IGF4dGxzIGJ1dCBub3QgcHJvdmlkZWQgYnkgbmV3bGliLgo+Cj4gU2lnbmVkLW9mZi1ieTogRmVs
aXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgaW5jbHVkZS9hc20v
Ynl0ZW9yZGVyLmggfCAgOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+
ICAgaW5jbHVkZS9jb25maWcuaCAgICAgICAgfCAxMjAgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCj4gICAyIGZpbGVzIGNoYW5nZWQsIDIxMyBpbnNlcnRp
b25zKCspCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgKPiAg
IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2NvbmZpZy5oCj4KPiBkaWZmIC0tZ2l0IGEvaW5j
bHVkZS9hc20vYnl0ZW9yZGVyLmggYi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaAo+IG5ldyBmaWxl
IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uZTk1YzI2Zgo+IC0tLSAvZGV2L251bGwKPiAr
KysgYi9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaAo+IEBAIC0wLDAgKzEsOTMgQEAKPiArLyogVGFr
ZW4gZnJvbSBtdXNsJ3MgZW5kaWFuLmggKi8KPiArCj4gKyNpZm5kZWYgTElCQVhUTFNfR0xVRV9F
TkRJQU5fSAo+ICsjZGVmaW5lIExJQkFYVExTX0dMVUVfRU5ESUFOX0gKPiArCj4gKwo+ICsvKiAj
aW5jbHVkZSA8ZmVhdHVyZXMuaD4gKi8KPiArCj4gKyNkZWZpbmUgX19MSVRUTEVfRU5ESUFOIDEy
MzQKPiArI2RlZmluZSBfX0JJR19FTkRJQU4gNDMyMQo+ICsjZGVmaW5lIF9fUERQX0VORElBTiAz
NDEyCj4gKwo+ICsvKiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgZGVmaW5lZChfX0JZVEVfT1JE
RVJfXykgKi8KPiArI2RlZmluZSBfX0JZVEVfT1JERVIgX19CWVRFX09SREVSX18KPiArLyoKPiAr
I2Vsc2UKPiArI2luY2x1ZGUgPGJpdHMvZW5kaWFuLmg+Cj4gKyNlbmRpZgo+ICsqLwo+ICsvKiAj
aWYgZGVmaW5lZChfR05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkgKi8KPiArCj4g
KyNpZm5kZWYgQklHX0VORElBTgo+ICsjZGVmaW5lIEJJR19FTkRJQU4gX19CSUdfRU5ESUFOCj4g
KyNlbmRpZgo+ICsjaWZuZGVmIExJVFRMRV9FTkRJQU4KPiArI2RlZmluZSBMSVRUTEVfRU5ESUFO
IF9fTElUVExFX0VORElBTgo+ICsjZW5kaWYKPiArI2lmbmRlZiBQRFBfRU5ESUFOCj4gKyNkZWZp
bmUgUERQX0VORElBTiBfX1BEUF9FTkRJQU4KPiArI2VuZGlmCj4gKyNpZm5kZWYgQllURV9PUkRF
Ugo+ICsjZGVmaW5lIEJZVEVfT1JERVIgX19CWVRFX09SREVSCj4gKyNlbmRpZgo+ICsjaW5jbHVk
ZSA8c3RkaW50Lmg+Cj4gKwo+ICtzdGF0aWMgX19pbmxpbmUgdWludDE2X3QgX19ic3dhcDE2KHVp
bnQxNl90IF9feCkKPiArewo+ICsJcmV0dXJuIF9feDw8OCB8IF9feD4+ODsKPiArfQo+ICsKPiAr
c3RhdGljIF9faW5saW5lIHVpbnQzMl90IF9fYnN3YXAzMih1aW50MzJfdCBfX3gpCj4gK3sKPiAr
CXJldHVybiBfX3g+PjI0IHwgX194Pj44JjB4ZmYwMCB8IF9feDw8OCYweGZmMDAwMCB8IF9feDw8
MjQ7Cj4gK30KPiArCj4gK3N0YXRpYyBfX2lubGluZSB1aW50NjRfdCBfX2Jzd2FwNjQodWludDY0
X3QgX194KQo+ICt7Cj4gKwlyZXR1cm4gX19ic3dhcDMyKF9feCkrMFVMTDw8MzIgfCBfX2Jzd2Fw
MzIoX194Pj4zMik7Cj4gK30KPiArCj4gKyNpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5E
SUFOCj4gKyNkZWZpbmUgaHRvYmUxNih4KSBfX2Jzd2FwMTYoeCkKPiArI2RlZmluZSBiZTE2dG9o
KHgpIF9fYnN3YXAxNih4KQo+ICsjZGVmaW5lIGJldG9oMTYoeCkgX19ic3dhcDE2KHgpCj4gKyNk
ZWZpbmUgaHRvYmUzMih4KSBfX2Jzd2FwMzIoeCkKPiArI2RlZmluZSBiZTMydG9oKHgpIF9fYnN3
YXAzMih4KQo+ICsjZGVmaW5lIGJldG9oMzIoeCkgX19ic3dhcDMyKHgpCj4gKyNkZWZpbmUgaHRv
YmU2NCh4KSBfX2Jzd2FwNjQoeCkKPiArI2RlZmluZSBiZTY0dG9oKHgpIF9fYnN3YXA2NCh4KQo+
ICsjZGVmaW5lIGJldG9oNjQoeCkgX19ic3dhcDY0KHgpCj4gKyNkZWZpbmUgaHRvbGUxNih4KSAo
dWludDE2X3QpKHgpCj4gKyNkZWZpbmUgbGUxNnRvaCh4KSAodWludDE2X3QpKHgpCj4gKyNkZWZp
bmUgbGV0b2gxNih4KSAodWludDE2X3QpKHgpCj4gKyNkZWZpbmUgaHRvbGUzMih4KSAodWludDMy
X3QpKHgpCj4gKyNkZWZpbmUgbGUzMnRvaCh4KSAodWludDMyX3QpKHgpCj4gKyNkZWZpbmUgbGV0
b2gzMih4KSAodWludDMyX3QpKHgpCj4gKyNkZWZpbmUgaHRvbGU2NCh4KSAodWludDY0X3QpKHgp
Cj4gKyNkZWZpbmUgbGU2NHRvaCh4KSAodWludDY0X3QpKHgpCj4gKyNkZWZpbmUgbGV0b2g2NCh4
KSAodWludDY0X3QpKHgpCj4gKyNlbHNlCj4gKyNkZWZpbmUgaHRvYmUxNih4KSAodWludDE2X3Qp
KHgpCj4gKyNkZWZpbmUgYmUxNnRvaCh4KSAodWludDE2X3QpKHgpCj4gKyNkZWZpbmUgYmV0b2gx
Nih4KSAodWludDE2X3QpKHgpCj4gKyNkZWZpbmUgaHRvYmUzMih4KSAodWludDMyX3QpKHgpCj4g
KyNkZWZpbmUgYmUzMnRvaCh4KSAodWludDMyX3QpKHgpCj4gKyNkZWZpbmUgYmV0b2gzMih4KSAo
dWludDMyX3QpKHgpCj4gKyNkZWZpbmUgaHRvYmU2NCh4KSAodWludDY0X3QpKHgpCj4gKyNkZWZp
bmUgYmU2NHRvaCh4KSAodWludDY0X3QpKHgpCj4gKyNkZWZpbmUgYmV0b2g2NCh4KSAodWludDY0
X3QpKHgpCj4gKyNkZWZpbmUgaHRvbGUxNih4KSBfX2Jzd2FwMTYoeCl2Cj4gKyNkZWZpbmUgbGUx
NnRvaCh4KSBfX2Jzd2FwMTYoeCkKPiArI2RlZmluZSBsZXRvaDE2KHgpIF9fYnN3YXAxNih4KQo+
ICsjZGVmaW5lIGh0b2xlMzIoeCkgX19ic3dhcDMyKHgpCj4gKyNkZWZpbmUgbGUzMnRvaCh4KSBf
X2Jzd2FwMzIoeCkKPiArI2RlZmluZSBsZXRvaDMyKHgpIF9fYnN3YXAzMih4KQo+ICsjZGVmaW5l
IGh0b2xlNjQoeCkgX19ic3dhcDY0KHgpCj4gKyNkZWZpbmUgbGU2NHRvaCh4KSBfX2Jzd2FwNjQo
eCkKPiArI2RlZmluZSBsZXRvaDY0KHgpIF9fYnN3YXA2NCh4KQo+ICsjZW5kaWYKPiArCj4gKy8q
ICNlbmRpZiAqLwo+ICsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvY29uZmlnLmgg
Yi9pbmNsdWRlL2NvbmZpZy5oCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw
Li5iMDdkNTM1Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1ZGUvY29uZmlnLmgKPiBAQCAt
MCwwICsxLDEyMCBAQAo+ICsvKgo+ICsgKiBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBoZWFkZXIg
ZmlsZTogZG9uJ3QgZWRpdAo+ICsgKi8KPiArCj4gKyNkZWZpbmUgSEFWRV9ET1RfQ09ORklHIDEK
PiArI3VuZGVmIENPTkZJR19QTEFURk9STV9DWUdXSU4KPiArI3VuZGVmIENPTkZJR19QTEFURk9S
TV9XSU4zMgo+ICsKPiArLyoKPiArICogR2VuZXJhbCBDb25maWd1cmF0aW9uCj4gKyAqLwo+ICsj
aWZkZWYgVUtfREVCVUcKPiArI2RlZmluZSBDT05GSUdfREVCVUcKPiArI2Vsc2UKPiArI3VuZGVm
IENPTkZJR19ERUJVRwo+ICsjZW5kaWYgLyogVUtfREVCVUcgKi8KPiArCj4gKyNkZWZpbmUgQ09O
RklHX1NUUklQX1VOV0FOVEVEX1NFQ1RJT05TIDEKPiArI3VuZGVmIENPTkZJR19WSVNVQUxfU1RV
RElPXzdfMAo+ICsjdW5kZWYgQ09ORklHX1ZJU1VBTF9TVFVESU9fOF8wCj4gKyN1bmRlZiBDT05G
SUdfVklTVUFMX1NUVURJT18xMF8wCj4gKyNkZWZpbmUgQ09ORklHX1ZJU1VBTF9TVFVESU9fN18w
X0JBU0UgIiIKPiArI2RlZmluZSBDT05GSUdfVklTVUFMX1NUVURJT184XzBfQkFTRSAiIgo+ICsj
ZGVmaW5lIENPTkZJR19WSVNVQUxfU1RVRElPXzEwXzBfQkFTRSAiIgo+ICsjZGVmaW5lIENPTkZJ
R19FWFRSQV9DRkxBR1NfT1BUSU9OUyAiIgo+ICsjZGVmaW5lIENPTkZJR19FWFRSQV9MREZMQUdT
X09QVElPTlMgIiIKPiArCj4gKy8qCj4gKyAqIFNTTCBMaWJyYXJ5Cj4gKyAqLwo+ICsjdW5kZWYg
Q09ORklHX1NTTF9TRVJWRVJfT05MWQo+ICsjdW5kZWYgQ09ORklHX1NTTF9DRVJUX1ZFUklGSUNB
VElPTgo+ICsjdW5kZWYgQ09ORklHX1NTTF9FTkFCTEVfQ0xJRU5UCj4gKyNkZWZpbmUgQ09ORklH
X1NTTF9GVUxMX01PREUgMQo+ICsjdW5kZWYgQ09ORklHX1NTTF9TS0VMRVRPTl9NT0RFCj4gKyN1
bmRlZiBDT05GSUdfU1NMX1BST1RfTE9XCj4gKyNkZWZpbmUgQ09ORklHX1NTTF9QUk9UX01FRElV
TSAxCj4gKyN1bmRlZiBDT05GSUdfU1NMX1BST1RfSElHSAo+ICsjZGVmaW5lIENPTkZJR19TU0xf
VVNFX0RFRkFVTFRfS0VZIDEKPiArI2RlZmluZSBDT05GSUdfU1NMX1BSSVZBVEVfS0VZX0xPQ0FU
SU9OICIiCj4gKyNkZWZpbmUgQ09ORklHX1NTTF9QUklWQVRFX0tFWV9QQVNTV09SRCAiIgo+ICsj
ZGVmaW5lIENPTkZJR19TU0xfWDUwOV9DRVJUX0xPQ0FUSU9OICIiCj4gKyN1bmRlZiBDT05GSUdf
U1NMX0dFTkVSQVRFX1g1MDlfQ0VSVAo+ICsjZGVmaW5lIENPTkZJR19TU0xfWDUwOV9DT01NT05f
TkFNRSAiIgo+ICsjZGVmaW5lIENPTkZJR19TU0xfWDUwOV9PUkdBTklaQVRJT05fTkFNRSAiIgo+
ICsjZGVmaW5lIENPTkZJR19TU0xfWDUwOV9PUkdBTklaQVRJT05fVU5JVF9OQU1FICIiCj4gKyNk
ZWZpbmUgQ09ORklHX1NTTF9IQVNfUEVNIDEKPiArI2RlZmluZSBDT05GSUdfU1NMX1VTRV9QS0NT
MTIgMQo+ICsjZGVmaW5lIENPTkZJR19TU0xfRVhQSVJZX1RJTUUgMjQKPiArI2RlZmluZSBDT05G
SUdfWDUwOV9NQVhfQ0FfQ0VSVFMgMTUwCj4gKyNkZWZpbmUgQ09ORklHX1NTTF9NQVhfQ0VSVFMg
Mwo+ICsjdW5kZWYgQ09ORklHX1NTTF9DVFhfTVVURVhJTkcKPiArI3VuZGVmIENPTkZJR19XSU4z
Ml9VU0VfQ1JZUFRPX0xJQgo+ICsjZGVmaW5lIENPTkZJR19PUEVOU1NMX0NPTVBBVElCTEUgMQo+
ICsjdW5kZWYgQ09ORklHX1BFUkZPUk1BTkNFX1RFU1RJTkcKPiArI3VuZGVmIENPTkZJR19TU0xf
VEVTVAo+ICsjZGVmaW5lIENPTkZJR19BWFRMU1dSQVAgMQo+ICsjdW5kZWYgQ09ORklHX0FYSFRU
UEQKPiArI3VuZGVmIENPTkZJR19IVFRQX1NUQVRJQ19CVUlMRAo+ICsjZGVmaW5lIENPTkZJR19I
VFRQX1BPUlQKPiArI2RlZmluZSBDT05GSUdfSFRUUF9IVFRQU19QT1JUCj4gKyNkZWZpbmUgQ09O
RklHX0hUVFBfU0VTU0lPTl9DQUNIRV9TSVpFCj4gKyNkZWZpbmUgQ09ORklHX0hUVFBfV0VCUk9P
VCAiIgo+ICsjZGVmaW5lIENPTkZJR19IVFRQX1RJTUVPVVQKPiArI3VuZGVmIENPTkZJR19IVFRQ
X0hBU19DR0kKPiArI2RlZmluZSBDT05GSUdfSFRUUF9DR0lfRVhURU5TSU9OUyAiIgo+ICsjdW5k
ZWYgQ09ORklHX0hUVFBfRU5BQkxFX0xVQQo+ICsjZGVmaW5lIENPTkZJR19IVFRQX0xVQV9QUkVG
SVggIiIKPiArI3VuZGVmIENPTkZJR19IVFRQX0JVSUxEX0xVQQo+ICsjZGVmaW5lIENPTkZJR19I
VFRQX0NHSV9MQVVOQ0hFUiAiIgo+ICsjdW5kZWYgQ09ORklHX0hUVFBfRElSRUNUT1JJRVMKPiAr
I3VuZGVmIENPTkZJR19IVFRQX0hBU19BVVRIT1JJWkFUSU9OCj4gKyN1bmRlZiBDT05GSUdfSFRU
UF9IQVNfSVBWNgo+ICsjdW5kZWYgQ09ORklHX0hUVFBfRU5BQkxFX0RJRkZFUkVOVF9VU0VSCj4g
KyNkZWZpbmUgQ09ORklHX0hUVFBfVVNFUiAiIgo+ICsjdW5kZWYgQ09ORklHX0hUVFBfVkVSQk9T
RQo+ICsjdW5kZWYgQ09ORklHX0hUVFBfSVNfREFFTU9OCj4gKwo+ICsvKgo+ICsgKiBMYW5ndWFn
ZSBCaW5kaW5ncwo+ICsgKi8KPiArI3VuZGVmIENPTkZJR19CSU5ESU5HUwo+ICsjdW5kZWYgQ09O
RklHX0NTSEFSUF9CSU5ESU5HUwo+ICsjdW5kZWYgQ09ORklHX1ZCTkVUX0JJTkRJTkdTCj4gKyNk
ZWZpbmUgQ09ORklHX0RPVF9ORVRfRlJBTUVXT1JLX0JBU0UgIiIKPiArI3VuZGVmIENPTkZJR19K
QVZBX0JJTkRJTkdTCj4gKyNkZWZpbmUgQ09ORklHX0pBVkFfSE9NRSAiIgo+ICsjdW5kZWYgQ09O
RklHX1BFUkxfQklORElOR1MKPiArI2RlZmluZSBDT05GSUdfUEVSTF9DT1JFICIiCj4gKyNkZWZp
bmUgQ09ORklHX1BFUkxfTElCICIiCj4gKyN1bmRlZiBDT05GSUdfTFVBX0JJTkRJTkdTCj4gKyNk
ZWZpbmUgQ09ORklHX0xVQV9DT1JFICIiCj4gKwo+ICsvKgo+ICsgKiBTYW1wbGVzCj4gKyAqLwo+
ICsjdW5kZWYgQ09ORklHX1NBTVBMRVMKPiArI3VuZGVmIENPTkZJR19DX1NBTVBMRVMKPiArI3Vu
ZGVmIENPTkZJR19DU0hBUlBfU0FNUExFUwo+ICsjdW5kZWYgQ09ORklHX1ZCTkVUX1NBTVBMRVMK
PiArI3VuZGVmIENPTkZJR19KQVZBX1NBTVBMRVMKPiArI3VuZGVmIENPTkZJR19QRVJMX1NBTVBM
RVMKPiArI3VuZGVmIENPTkZJR19MVUFfU0FNUExFUwo+ICsKPiArLyoKPiArICogQmlnSW50IE9w
dGlvbnMKPiArICovCj4gKyN1bmRlZiBDT05GSUdfQklHSU5UX0NMQVNTSUNBTAo+ICsjdW5kZWYg
Q09ORklHX0JJR0lOVF9NT05UR09NRVJZCj4gKyNkZWZpbmUgQ09ORklHX0JJR0lOVF9CQVJSRVRU
IDEKPiArI2RlZmluZSBDT05GSUdfQklHSU5UX0NSVCAxCj4gKyN1bmRlZiBDT05GSUdfQklHSU5U
X0tBUkFUU1VCQQo+ICsjZGVmaW5lIE1VTF9LQVJBVFNVQkFfVEhSRVNICj4gKyNkZWZpbmUgU1FV
X0tBUkFUU1VCQV9USFJFU0gKPiArI2RlZmluZSBDT05GSUdfQklHSU5UX1NMSURJTkdfV0lORE9X
IDEKPiArI2RlZmluZSBDT05GSUdfQklHSU5UX1NRVUFSRSAxCj4gKyN1bmRlZiBDT05GSUdfQklH
SU5UX0NIRUNLX09OCj4gKyNkZWZpbmUgQ09ORklHX0lOVEVHRVJfMzJCSVQgMQo+ICsjdW5kZWYg
Q09ORklHX0lOVEVHRVJfMTZCSVQKPiArI3VuZGVmIENPTkZJR19JTlRFR0VSXzhCSVQKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 09:58:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 09:58:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChaj-00065W-17; Tue, 24 Sep 2019 09:58:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d6A1=XT=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iChah-00065P-Gc
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 09:58:39 +0000
X-Inumbo-ID: dfbab782-deb1-11e9-9613-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id dfbab782-deb1-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 09:58:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4972CF2019;
 Tue, 24 Sep 2019 11:58:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id XzGVj7TpYNLs; Tue, 24 Sep 2019 11:58:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 21273F2018
 for <minios-devel@lists.xenproject.org>; Tue, 24 Sep 2019 11:58:33 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 11:58:32 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190917093833.29868-1-felipe.huici@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <aca87475-6a7e-4a62-d5a7-f4903f699784@neclab.eu>
Date: Tue, 24 Sep 2019 11:58:32 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190917093833.29868-1-felipe.huici@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT/LIBAXTLS PATCH v2 0/3] Initial Port of
 the axtls Library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gRmVsaXBlLAoKVGhhbmtzIGZvciBwYXRjaCBzZXJpZXMuIEkgaGF2ZSByZXZpZXdlZCB0
aGUgcGF0Y2ggc2VyaWVzIGFuZCBJIHdpbGwgCnVwc3RyZWFtIHRoZSBwYXRjaCBzZXJpZXMgYnkg
dG9kYXkuIFRoZSBjb21tZW50IEkgaGFkIG9uIHBhdGNoIDEsIDIgY2FuIApiZSBmaXhlZCB3aGls
ZSB1cHN0cmVhbWluZyBpdC4KClRoYW5rcyAmIFJlZ2FyZHMKClNoYXJhbgoKT24gOS8xNy8xOSAx
MTozOCBBTSwgRmVsaXBlIEh1aWNpIHdyb3RlOgo+IFRoaXMgaXMgb3VyIGluaXRpYWwgcG9ydCBv
ZiB0aGUgYXh0bHMgbGlicmFyeSAodmVyc2lvbiAyLjEuNSkKPgo+IENoYW5nZXMgc2luY2UgdjE6
Cj4gICAqIEZpeGVkIG1vc3QgcmVkZWZpbml0aW9uIHdhcm5pbmdzCj4gICAqIFJlZHVjZWQgdGhl
IG51bWJlciBvZiBzdXBwcmVzc2VkIHdhcm5pbmdzCj4gICAqIFJlbW92ZWQgdW51c2VkIHNvdXJj
ZSBmaWxlcyBmcm9tIE1ha2VmaWxlLnVrCj4gICAqIEFkZGVkIGRlcHMgdG8gbmV3bGliLCBsd2lw
IHRvIENvbmZpZy51awo+ICAgKiBSZW1vdmVkIHVubmVjZXNzYXJ5IG9wdGlvbnMgZnJvbSBpbmNs
dWRlL2NvbmZpZy5oCj4KPiBGZWxpcGUgSHVpY2kgKDMpOgo+ICAgIEludHJvZHVjZSBsaWJyYXJ5
IHNrZWxldG9uCj4gICAgQWRkIE1ha2VmaWxlLnVrCj4gICAgQWRkIFVuaWtyYWZ0LXNwZWNpZmlj
IGNvbmZpZy5oCj4KPiAgIC5naXRpZ25vcmUgICAgICAgICAgICAgIHwgIDI3ICsrKysrKysrKysr
Cj4gICBDT0RJTkdfU1RZTEUubWQgICAgICAgICB8ICAgNCArKwo+ICAgQ09OVFJJQlVUSU5HLm1k
ICAgICAgICAgfCAgIDQgKysKPiAgIENPUFlJTkcubWQgICAgICAgICAgICAgIHwgIDM4ICsrKysr
KysrKysrKysrKwo+ICAgQ29uZmlnLnVrICAgICAgICAgICAgICAgfCAgIDUgKysKPiAgIE1BSU5U
QUlORVJTLm1kICAgICAgICAgIHwgIDEwICsrKysKPiAgIE1ha2VmaWxlLnVrICAgICAgICAgICAg
IHwgMTA1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgUkVB
RE1FLm1kICAgICAgICAgICAgICAgfCAgMTYgKysrKysrKwo+ICAgaW5jbHVkZS9hc20vYnl0ZW9y
ZGVyLmggfCAgOTMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgaW5j
bHVkZS9jb25maWcuaCAgICAgICAgfCAxMjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrCj4gICAxMCBmaWxlcyBjaGFuZ2VkLCA0MjIgaW5zZXJ0aW9ucygr
KQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBDT0RJTkdfU1RZTEUubWQKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQK
PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQg
Q29uZmlnLnVrCj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQKPiAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5t
ZAo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvYXNtL2J5dGVvcmRlci5oCj4gICBjcmVh
dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9jb25maWcuaAo+CgpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 10:07:32 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 10:07:32 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChjH-0006ys-Bj; Tue, 24 Sep 2019 10:07:31 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iChjF-0006yk-L2
 for minios-devel@lists.xen.org; Tue, 24 Sep 2019 10:07:29 +0000
X-Inumbo-ID: 1cef3b86-deb3-11e9-9613-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 1cef3b86-deb3-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 10:07:28 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4C78DF2019;
 Tue, 24 Sep 2019 12:07:27 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id fEqiNA3Kzor2; Tue, 24 Sep 2019 12:07:27 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1CA8DF2018;
 Tue, 24 Sep 2019 12:07:23 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 12:07:22 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Tue, 24 Sep 2019 12:07:11 +0200
Message-ID: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 0/5] VFS initialization to vfscore
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXJpZXMgbW92ZXMgbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBzdHJ1
Y3R1cmUgdG8gVW5pa3JhZnQKaW5pdCB0YWJsZSBjYWxscy4gVGhlIG1haW4gcm9vdCBmaWxlc3lz
dGVtIGlzIG1vdW50ZWQgd2l0aCBsaWIvdmZzY29yZSBhbmQKbGlicmFyeSBwYXJhbWV0ZXJzIGFy
ZSBhdmFpbGFibGUgdG8gaW5mbHVlbmNlIHRoZSByb290ZnMgbW91bnQgYmVoYXZpb3IKZnJvbSB0
aGUga2VybmVsIGNvbW1hbmQgbGluZS4KClByZXZpb3VzbHksIHRoZSBvcHRpb24gdG8gYXV0b21h
dGljYWxseSBtb3VudCBhIHJhbWZzIHRvIC8gd2FzIGhpZGRlbi4KSXQgb25seSBhcHBlYXJlZCB3
aGVuIGRldmZzIHdhcyBzZWxlY3RlZC4gVGhpcyBzZXJpZXMgaXMgYWxzbyBtYWtpbmcgZGV2ZnMK
YW5kIHJhbWZzIHBlcm1hbmVudGx5IHZpc2libGUgaW4gdGhlIG1lbnUgdG8gc2ltcGxpZnkgdGhl
IHVzYWdlLgoKQ2hhbmdlcyBzaW5jZSB2MToKIC0gQWRvcHQgdG8gbGF0ZXN0IHN0YWdpbmcgc3Rh
dGUKIC0gQWRkIGFiaWxpdHkgdG8gY29uZmlndXJlIHJvb3QgZnMgd2l0aCBrZXJuZWwgcGFyYW1l
dGVycwoKQ2hhbmNlcyBzaW5jZSB2MjoKIC0gTW92ZSByb290ZnMgY29kZSB0byB2ZnNjb3JlCiAg
ICh0aGlzIGltcGxpZWQgYWxzbyB0aGUgY2hhbmdlIG9mIHRoZSBzZXJpZXMgdGl0bGUpCiAtIElu
dGVncmF0ZSB0byBpbml0IHRhYmxlIG1lY2hhbmlzbQogLSBCdWdmaXg6IG1vdW50IG5ldmVyIGZh
aWxzIHdoZW4gZnNuYW1lIGlzIHdyb25nCiAtIEFkZCBjb21waWxlciBmbGFnIHRvIGlnbm9yZSB3
YXJuaW5ncyBjYXVzZWQgYnkgVkZTIHN0dWJzCgpTaW1vbiBLdWVuemVyICg1KToKICBsaWIvdmZz
Y29yZSwgbGliLypmczogSWdub3JlIGluY29tcGF0aWJsZSBmdW5jdGlvbiBwb2ludGVyIHR5cGVj
YXN0CiAgbGliL3Zmc2NvcmU6IGZzX2dldGZzKCk6IFJldHVybiBOVUxMIG9uIGZhaWxlZCBsb29r
dXAKICBsaWIvdmZzY29yZTogQXV0b21vdW50IG9wdGlvbgogIGxpYi9kZXZmczogQXV0b21vdW50
IHRocm91Z2ggaW5pdHRhYgogIGxpYi91a3N3cmFuZDogQ2xlYW4tdXAgZGV2ZnMgaW50ZWdyYXRp
b24KCiBsaWIvOXBmcy9NYWtlZmlsZS51ayAgICAgICAgICAgICAgfCAgMiArCiBsaWIvZGV2ZnMv
Q29uZmlnLnVrICAgICAgICAgICAgICAgfCAgOSArLS0KIGxpYi9kZXZmcy9NYWtlZmlsZS51ayAg
ICAgICAgICAgICB8ICAyICsKIGxpYi9kZXZmcy9kZXZmc192bm9wcy5jICAgICAgICAgICB8IDMz
ICsrKysrKy0tLS0tCiBsaWIvZGV2ZnMvaW5jbHVkZS9kZXZmcy9kZXZpY2UuaCAgfCAgMyArCiBs
aWIvcmFtZnMvTWFrZWZpbGUudWsgICAgICAgICAgICAgfCAgMiArCiBsaWIvdWtzd3JhbmQvQ29u
ZmlnLnVrICAgICAgICAgICAgfCAgNSArLQogbGliL3Vrc3dyYW5kL01ha2VmaWxlLnVrICAgICAg
ICAgIHwgIDQgKy0KIGxpYi91a3N3cmFuZC97bXdjX2Rldi5jID0+IGRldi5jfSB8IDIzICsrKysr
Ky0tCiBsaWIvdmZzY29yZS9Db25maWcudWsgICAgICAgICAgICAgfCA3NiArKysrKysrKysrKysr
KysrKysrKysrKysKIGxpYi92ZnNjb3JlL01ha2VmaWxlLnVrICAgICAgICAgICB8ICA3ICsrKwog
bGliL3Zmc2NvcmUvbW91bnQuYyAgICAgICAgICAgICAgIHwgMTMgKysrLS0KIGxpYi92ZnNjb3Jl
L3Jvb3Rmcy5jICAgICAgICAgICAgICB8IDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysKIDEzIGZpbGVzIGNoYW5nZWQsIDI0MSBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkK
IHJlbmFtZSBsaWIvdWtzd3JhbmQve213Y19kZXYuYyA9PiBkZXYuY30gKDg5JSkKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWIvdmZzY29yZS9yb290ZnMuYwoKLS0gCjIuMjAuMQoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 10:07:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 10:07:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChjM-00070I-Dp; Tue, 24 Sep 2019 10:07:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iChjK-000705-PO
 for minios-devel@lists.xen.org; Tue, 24 Sep 2019 10:07:34 +0000
X-Inumbo-ID: 1f3d4806-deb3-11e9-9613-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 1f3d4806-deb3-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 10:07:32 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5A472F2019;
 Tue, 24 Sep 2019 12:07:31 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 07pKOiJom7C6; Tue, 24 Sep 2019 12:07:31 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 2CEDCF2018;
 Tue, 24 Sep 2019 12:07:27 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 12:07:24 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Tue, 24 Sep 2019 12:07:12 +0200
Message-ID: <20190924100716.3462-2-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 1/5] lib/vfscore,
 lib/*fs: Ignore incompatible function pointer typecast
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Vm5vZGUgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBmdW5jdGlvbiBjYWxscy4gSW4g
b3JkZXIgdG8gc3R1Ygpzb21lIG9mIHRoZSBvcGVyYXRpb25zIGEgbm8tb3AgZnVuY3Rpb24gaXMg
ZmlsbGVkIHRvIHRob3NlIHN0cnVjdAplbnRyaWVzLiBTdWNoIGEgc3R1YiBmdW5jdGlvbiBqdXN0
IHJldHVybnMgYW4gZXJyb3IgY29kZSB0aGF0IHRlbGxzIHRoYXQKdGhlIGZ1bmN0aW9uYWxpdHkg
aXMgbm90IGltcGxlbWVudGVkLiBIb3dldmVyLCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlCm1heSBu
b3QgbWF0Y2ggd2l0aCB0aGUgc3R1YmJlZCB2bm9kZSBvcGVyYXRpb24sIHNvIGl0IGlzIHR5cGVj
YXN0ZWQuCkdDQyA4IGludHJvZHVjZXMgYSB3YXJuaW5nIHdoZW4gZnVuY3Rpb24gcG9pbnRlciB0
eXBlY2FzdHMgYXJlCmluY29tcGF0aWJsZS4gVGhpcyBwYXRjaCBhZGRzIGEgQ0ZMQUcgdG8gaWdu
b3JlIHRoaXMgd2FybmluZyBmb3IKdmZzY29yZSBhbmQgYWxsIGN1cnJlbnQgZmlsZXN5c3RlbSBp
bXBsZW1lbnRhdGlvbnMuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVu
emVyQG5lY2xhYi5ldT4KLS0tCiBsaWIvOXBmcy9NYWtlZmlsZS51ayAgICB8IDIgKysKIGxpYi9k
ZXZmcy9NYWtlZmlsZS51ayAgIHwgMiArKwogbGliL3JhbWZzL01ha2VmaWxlLnVrICAgfCAyICsr
CiBsaWIvdmZzY29yZS9NYWtlZmlsZS51ayB8IDIgKysKIDQgZmlsZXMgY2hhbmdlZCwgOCBpbnNl
cnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbGliLzlwZnMvTWFrZWZpbGUudWsgYi9saWIvOXBmcy9N
YWtlZmlsZS51awppbmRleCA5ZDRkZmI1Ny4uOGE2NjdlZmEgMTAwNjQ0Ci0tLSBhL2xpYi85cGZz
L01ha2VmaWxlLnVrCisrKyBiL2xpYi85cGZzL01ha2VmaWxlLnVrCkBAIC0xLDQgKzEsNiBAQAog
JChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWI5cGZzLCQoQ09ORklHX0xJQjlQRlMpKSkKIAorTElC
OVBGU19DRkxBR1MtJChjYWxsIGdjY192ZXJzaW9uX2dlLDgsMCkgKz0gLVduby1jYXN0LWZ1bmN0
aW9uLXR5cGUKKwogTElCOVBGU19TUkNTLXkgKz0gJChMSUI5UEZTX0JBU0UpLzlwZnNfdmZzb3Bz
LmMKIExJQjlQRlNfU1JDUy15ICs9ICQoTElCOVBGU19CQVNFKS85cGZzX3Zub3BzLmMKZGlmZiAt
LWdpdCBhL2xpYi9kZXZmcy9NYWtlZmlsZS51ayBiL2xpYi9kZXZmcy9NYWtlZmlsZS51awppbmRl
eCBmODllNjU3Ny4uYzQ5NmZkNTYgMTAwNjQ0Ci0tLSBhL2xpYi9kZXZmcy9NYWtlZmlsZS51awor
KysgYi9saWIvZGV2ZnMvTWFrZWZpbGUudWsKQEAgLTIsNSArMiw3IEBAICQoZXZhbCAkKGNhbGwg
YWRkbGliX3MsbGliZGV2ZnMsJChDT05GSUdfTElCREVWRlMpKSkKIAogQ0lOQ0xVREVTLXkgKz0g
LUkkKExJQkRFVkZTX0JBU0UpL2luY2x1ZGUKIAorTElCREVWRlNfQ0ZMQUdTLSQoY2FsbCBnY2Nf
dmVyc2lvbl9nZSw4LDApICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10eXBlCisKIExJQkRFVkZTX1NS
Q1MteSArPSAkKExJQkRFVkZTX0JBU0UpL2RldmljZS5jCiBMSUJERVZGU19TUkNTLXkgKz0gJChM
SUJERVZGU19CQVNFKS9kZXZmc192bm9wcy5jCmRpZmYgLS1naXQgYS9saWIvcmFtZnMvTWFrZWZp
bGUudWsgYi9saWIvcmFtZnMvTWFrZWZpbGUudWsKaW5kZXggOWE0NDMzNTguLmJlYzBhOTU3IDEw
MDY0NAotLS0gYS9saWIvcmFtZnMvTWFrZWZpbGUudWsKKysrIGIvbGliL3JhbWZzL01ha2VmaWxl
LnVrCkBAIC0xLDQgKzEsNiBAQAogJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJyYW1mcywkKENP
TkZJR19MSUJSQU1GUykpKQogCitMSUJSQU1GU19DRkxBR1MtJChjYWxsIGdjY192ZXJzaW9uX2dl
LDgsMCkgKz0gLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUKKwogTElCUkFNRlNfU1JDUy15ICs9ICQo
TElCUkFNRlNfQkFTRSkvcmFtZnNfdmZzb3BzLmMKIExJQlJBTUZTX1NSQ1MteSArPSAkKExJQlJB
TUZTX0JBU0UpL3JhbWZzX3Zub3BzLmMKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL01ha2VmaWxl
LnVrIGIvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKaW5kZXggZTM2YzkyMTcuLjFlNWZjMTE0IDEw
MDY0NAotLS0gYS9saWIvdmZzY29yZS9NYWtlZmlsZS51aworKysgYi9saWIvdmZzY29yZS9NYWtl
ZmlsZS51awpAQCAtMiw2ICsyLDggQEAgJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ2ZnNjb3Jl
LCQoQ09ORklHX0xJQlZGU0NPUkUpKSkKIAogQ0lOQ0xVREVTLXkgKz0gLUkkKExJQlZGU0NPUkVf
QkFTRSkvaW5jbHVkZQogCitMSUJWRlNDT1JFX0NGTEFHUy0kKGNhbGwgZ2NjX3ZlcnNpb25fZ2Us
OCwwKSArPSAtV25vLWNhc3QtZnVuY3Rpb24tdHlwZQorCiBMSUJWRlNDT1JFX1NSQ1MteSArPSAk
KExJQlZGU0NPUkVfQkFTRSkvZmQuYwogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JF
X0JBU0UpL2ZpbGUuYwogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL3N0
ZGlvLmMKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 10:07:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 10:07:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChjR-00071E-FW; Tue, 24 Sep 2019 10:07:41 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iChjP-00070v-Ll
 for minios-devel@lists.xen.org; Tue, 24 Sep 2019 10:07:39 +0000
X-Inumbo-ID: 21aa8ca2-deb3-11e9-9613-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 21aa8ca2-deb3-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 10:07:36 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 6D8DBF2019;
 Tue, 24 Sep 2019 12:07:35 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id qYSI-cXaLvu8; Tue, 24 Sep 2019 12:07:35 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3E7CAF2018;
 Tue, 24 Sep 2019 12:07:31 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 12:07:25 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Tue, 24 Sep 2019 12:07:13 +0200
Message-ID: <20190924100716.3462-3-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 2/5] lib/vfscore: fs_getfs():
 Return NULL on failed lookup
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TW91bnQgbmV2ZXIgZmFpbGVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gbmFtZSB3YXMgaW5jb3JyZWN0
LiBUaGlzIHdhcwpkdWUgdG8gdGhlIHZmc2NvcmUtaW50ZXJuYWwgZnVuY3Rpb24gZnNfZ2V0ZnMo
KSB0aGF0IHJldHVybmVkIHRoZSBsYXN0CnJlZ2lzdGVyZWQgZmlsZXN5c3RlbSBpbnN0ZWFkIG9m
IE5VTEwgd2hlbmV2ZXIgdGhlIG5hbWUgd2FzIGludmFsaWQuCgpTaWduZWQtb2ZmLWJ5OiBTaW1v
biBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KLS0tCiBsaWIvdmZzY29yZS9tb3Vu
dC5jIHwgMTMgKysrKysrKy0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwg
NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9tb3VudC5jIGIvbGliL3Zm
c2NvcmUvbW91bnQuYwppbmRleCAyNjI5ZDEzMi4uOWQ3YWNlMTUgMTAwNjQ0Ci0tLSBhL2xpYi92
ZnNjb3JlL21vdW50LmMKKysrIGIvbGliL3Zmc2NvcmUvbW91bnQuYwpAQCAtODAsMTcgKzgwLDE4
IEBAIGZzX2dldGZzKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJY29uc3Qgc3RydWN0IHZmc2NvcmVf
ZnNfdHlwZSAqZnMgPSBOVUxMLCAqKl9fZnM7CiAKKwlVS19BU1NFUlQobmFtZSAhPSBOVUxMKTsK
KwogCWZvcl9lYWNoX2ZzKF9fZnMpIHsKIAkJZnMgPSAqX19mczsKLQkJaWYgKGZzID09IE5VTEwp
CisJCWlmICghZnMgfHwgIWZzLT52c19uYW1lKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFzdHJu
Y21wKG5hbWUsIGZzLT52c19uYW1lLCBGU01BWE5BTUVTKSkKLQkJCWJyZWFrOworCQlpZiAoc3Ry
bmNtcChuYW1lLCBmcy0+dnNfbmFtZSwgRlNNQVhOQU1FUykgPT0gMCkKKwkJCXJldHVybiBmczsK
IAl9Ci0JaWYgKCFmcyB8fCAhZnMtPnZzX25hbWUpCi0JCXJldHVybiBOVUxMOwotCXJldHVybiBm
czsKKworCXJldHVybiBOVUxMOwogfQogCiBpbnQgZGV2aWNlX29wZW4oY29uc3QgY2hhciAqbmFt
ZSBfX3VudXNlZCwgaW50IG1vZGUgX191bnVzZWQsCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 10:07:50 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 10:07:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iChja-00072U-HZ; Tue, 24 Sep 2019 10:07:50 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iChjZ-00072N-C5
 for minios-devel@lists.xen.org; Tue, 24 Sep 2019 10:07:49 +0000
X-Inumbo-ID: 27e7fca9-deb3-11e9-9613-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 27e7fca9-deb3-11e9-9613-12813bfff9fa;
 Tue, 24 Sep 2019 10:07:48 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 90CB0F2019;
 Tue, 24 Sep 2019 12:07:47 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id nILpTlOSxDs7; Tue, 24 Sep 2019 12:07:47 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 6A2D8F2018;
 Tue, 24 Sep 2019 12:07:43 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 12:07:28 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Tue, 24 Sep 2019 12:07:16 +0200
Message-ID: <20190924100716.3462-6-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 5/5] lib/ukswrand: Clean-up devfs
 integration
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGRldmZzIGludGVncmF0aW9uIG9mIHVrc3dyYW5kOgot
IFRoZSBjb25maWcgb3B0aW9uIGlzIHByb3Blcmx5IG5hbWVzcGFjZWQuCi0gbXdjX2Rldi5jIGlz
IGFjdHVhbGx5IGluZGVwZW5kZW50IG9mIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBNV0Mu
CiAgV2UgcmVuYW1lIHRoaXMgZmlsZSB0byBkZXYuYwotIFR1cm5zIHRoZSBkZXZmcyByZWdpc3Ry
YXRpb24gZnVuY3Rpb24gaW50byBhbiBpbml0Y2FsbC4KClNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1
ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgotLS0KIGxpYi91a3N3cmFuZC9Db25maWcu
dWsgICAgICAgICAgICB8ICA1ICsrKy0tCiBsaWIvdWtzd3JhbmQvTWFrZWZpbGUudWsgICAgICAg
ICAgfCAgNCArLS0tCiBsaWIvdWtzd3JhbmQve213Y19kZXYuYyA9PiBkZXYuY30gfCAyMyArKysr
KysrKysrKysrKysrKy0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNlcnRpb25zKCspLCAx
MSBkZWxldGlvbnMoLSkKIHJlbmFtZSBsaWIvdWtzd3JhbmQve213Y19kZXYuYyA9PiBkZXYuY30g
KDg5JSkKCmRpZmYgLS1naXQgYS9saWIvdWtzd3JhbmQvQ29uZmlnLnVrIGIvbGliL3Vrc3dyYW5k
L0NvbmZpZy51awppbmRleCBhMWE4NGJjNS4uYzU4MzcxYmIgMTAwNjQ0Ci0tLSBhL2xpYi91a3N3
cmFuZC9Db25maWcudWsKKysrIGIvbGliL3Vrc3dyYW5kL0NvbmZpZy51awpAQCAtMTgsOSArMTgs
MTAgQEAgY29uZmlnIExJQlVLU1dSQU5EX0lOSVRJQUxTRUVECiAJaW50ICJJbml0aWFsIHJhbmRv
bSBzZWVkIgogCWRlZmF1bHQgMjMKIAotY29uZmlnIERFVl9SQU5ET00KLQlib29sICIvZGV2L3Jh
bmRvbSBkZXZpY2UiCitjb25maWcgTElCVUtTV1JBTkRfREVWRlMKKwlib29sICJSZWdpc3RlciBy
YW5kb20gYW5kIHVyYW5kb20gZGV2aWNlIHRvIGRldmZzIgogCXNlbGVjdCBMSUJERVZGUworCXNl
bGVjdCBMSUJWRlNDT1JFCiAJZGVmYXVsdCBuCiAKIGVuZGlmCmRpZmYgLS1naXQgYS9saWIvdWtz
d3JhbmQvTWFrZWZpbGUudWsgYi9saWIvdWtzd3JhbmQvTWFrZWZpbGUudWsKaW5kZXggMjUyNDc0
NzQuLjA1NTY5OWRlIDEwMDY0NAotLS0gYS9saWIvdWtzd3JhbmQvTWFrZWZpbGUudWsKKysrIGIv
bGliL3Vrc3dyYW5kL01ha2VmaWxlLnVrCkBAIC00LDYgKzQsNCBAQCBDSU5DTFVERVMtJChDT05G
SUdfTElCVUtTV1JBTkQpCSs9IC1JJChMSUJVS1NXUkFORF9CQVNFKS9pbmNsdWRlCiBDWFhJTkNM
VURFUy0kKENPTkZJR19MSUJVS1NXUkFORCkgKz0gLUkkKExJQlVLU1dSQU5EX0JBU0UpL2luY2x1
ZGUKIAogTElCVUtTV1JBTkRfU1JDUy0kKENPTkZJR19MSUJVS1NXUkFORF9NV0MpICs9ICQoTElC
VUtTV1JBTkRfQkFTRSkvbXdjLmMKLWlmZGVmIENPTkZJR19ERVZfUkFORE9NCi1MSUJVS1NXUkFO
RF9TUkNTLSQoQ09ORklHX0xJQlVLU1dSQU5EX01XQykgKz0gJChMSUJVS1NXUkFORF9CQVNFKS9t
d2NfZGV2LmMKLWVuZGlmCitMSUJVS1NXUkFORF9TUkNTLSQoQ09ORklHX0xJQlVLU1dSQU5EX0RF
VkZTKSArPSAkKExJQlVLU1dSQU5EX0JBU0UpL2Rldi5jCmRpZmYgLS1naXQgYS9saWIvdWtzd3Jh
bmQvbXdjX2Rldi5jIGIvbGliL3Vrc3dyYW5kL2Rldi5jCnNpbWlsYXJpdHkgaW5kZXggODklCnJl
bmFtZSBmcm9tIGxpYi91a3N3cmFuZC9td2NfZGV2LmMKcmVuYW1lIHRvIGxpYi91a3N3cmFuZC9k
ZXYuYwppbmRleCA1YTRjYjEwMC4uYWRjYTY1NjYgMTAwNjQ0Ci0tLSBhL2xpYi91a3N3cmFuZC9t
d2NfZGV2LmMKKysrIGIvbGliL3Vrc3dyYW5kL2Rldi5jCkBAIC0xMDEsMTkgKzEwMSwzMCBAQCBz
dGF0aWMgc3RydWN0IGRyaXZlciBkcnZfdXJhbmRvbSA9IHsKIAkubmFtZSA9IERFVl9VUkFORE9N
X05BTUUKIH07CiAKLV9fY29uc3RydWN0b3JfcHJpbygxMDIpIHN0YXRpYyB2b2lkIF91a19kZXZf
c3dyYW5kX2N0b3Iodm9pZCkKK3N0YXRpYyBpbnQgZGV2ZnNfcmVnaXN0ZXIodm9pZCkKIHsKIAlz
dHJ1Y3QgZGV2aWNlICpkZXY7CiAKLQl1a19wcl9pbmZvKCJBZGQgL2Rldi9yYW5kb20gYW5kIC9k
ZXYvdXJhbmRvbVxuIik7CisJdWtfcHJfaW5mbygiUmVnaXN0ZXIgJyVzJyBhbmQgJyVzJyB0byBk
ZXZmc1xuIiwKKwkJICAgREVWX1VSQU5ET01fTkFNRSwgREVWX1JBTkRPTV9OQU1FKTsKIAogCS8q
IHJlZ2lzdGVyIC9kZXYvdXJhbmRvbSAqLwogCWRldiA9IGRldmljZV9jcmVhdGUoJmRydl91cmFu
ZG9tLCBERVZfVVJBTkRPTV9OQU1FLCBEX0NIUik7Ci0JaWYgKGRldiA9PSBOVUxMKQotCQl1a19w
cl9pbmZvKCJGYWlsZWQgdG8gcmVnaXN0ZXIgL2Rldi91cmFuZG9tXG4iKTsKKwlpZiAoZGV2ID09
IE5VTEwpIHsKKwkJdWtfcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJyVzJyB0byBkZXZmc1xu
IiwKKwkJCSAgREVWX1VSQU5ET01fTkFNRSk7CisJCXJldHVybiAtMTsKKwl9CiAKIAkvKiByZWdp
c3RlciAvZGV2L3JhbmRvbSAqLwogCWRldiA9IGRldmljZV9jcmVhdGUoJmRydl9yYW5kb20sIERF
Vl9SQU5ET01fTkFNRSwgRF9DSFIpOwotCWlmIChkZXYgPT0gTlVMTCkKLQkJdWtfcHJfaW5mbygi
RmFpbGVkIHRvIHJlZ2lzdGVyIC9kZXYvcmFuZG9tXG4iKTsKKwlpZiAoZGV2ID09IE5VTEwpIHsK
KwkJdWtfcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJyVzJyB0byBkZXZmc1xuIiwKKwkJCSAg
REVWX1JBTkRPTV9OQU1FKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOwogfQorCitk
ZXZmc19pbml0Y2FsbChkZXZmc19yZWdpc3Rlcik7Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 11:07:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 11:07:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCifX-0003GT-Ca; Tue, 24 Sep 2019 11:07:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCifW-0003GO-GS
 for minios-devel@lists.xen.org; Tue, 24 Sep 2019 11:07:42 +0000
X-Inumbo-ID: 267a5938-deb3-11e9-8c01-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 267a5938-deb3-11e9-8c01-bc764e2007e4;
 Tue, 24 Sep 2019 10:07:44 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 84817F2019;
 Tue, 24 Sep 2019 12:07:43 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kN1ShH8w09V4; Tue, 24 Sep 2019 12:07:43 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 5EAE1F2018;
 Tue, 24 Sep 2019 12:07:39 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 12:07:27 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Tue, 24 Sep 2019 12:07:15 +0200
Message-ID: <20190924100716.3462-5-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 4/5] lib/devfs: Automount through
 inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGF1dG9tb3VudCBvcHRpb24gb2YgZGV2ZnMgdG8gYC9kZXZgIGlzIG1vdmVkIHRvIGFuIGlu
aXR0YWIgZW50cnkuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVy
QG5lY2xhYi5ldT4KLS0tCiBsaWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYyAgICAgICAgICB8IDI5ICsr
KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCiBsaWIvZGV2ZnMvaW5jbHVkZS9kZXZmcy9kZXZp
Y2UuaCB8ICAzICsrKwogMiBmaWxlcyBjaGFuZ2VkLCAyMyBpbnNlcnRpb25zKCspLCA5IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jIGIvbGliL2RldmZz
L2RldmZzX3Zub3BzLmMKaW5kZXggZDg3MmU2MjIuLjI3OGExYTYxIDEwMDY0NAotLS0gYS9saWIv
ZGV2ZnMvZGV2ZnNfdm5vcHMuYworKysgYi9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYwpAQCAtNTks
NyArNTksOCBAQAogCiAjaW5jbHVkZSA8dmZzY29yZS9mcy5oPgogCi0jaW5jbHVkZSA8dWsvY3Rv
cnMuaD4KKyNpbmNsdWRlIDx1ay9pbml0Lmg+CisjaW5jbHVkZSA8dWsvcHJpbnQuaD4KIAogI2lu
Y2x1ZGUgImRldmZzLmgiCiAjaW5jbHVkZSA8ZGV2ZnMvZGV2aWNlLmg+CkBAIC0zMTAsMjEgKzMx
MSwzMSBAQCBzdGF0aWMgc3RydWN0IHZmc2NvcmVfZnNfdHlwZSBmc19kZXZmcyA9IHsKIAogVUtf
RlNfUkVHSVNURVIoZnNfZGV2ZnMpOwogCi1fX2NvbnN0cnVjdG9yX3ByaW8oMTAxKSBzdGF0aWMg
dm9pZCBkZXZmc19pbml0KHZvaWQpCi17CiAjaWZkZWYgQ09ORklHX0xJQkRFVkZTX0FVVE9NT1VO
VAorc3RhdGljIGludCBkZXZmc19hdXRvbW91bnQodm9pZCkKK3sKIAlpbnQgcmV0OwogCisJdWtf
cHJfaW5mbygiTW91bnQgZGV2ZnMgdG8gL2Rldi4uLiIpOworCisJLyoKKwkgKiBUcnkgdG8gY3Jl
YXRlIHRhcmdldCBtb3VudHBvaW50IGAvZGV2YC4gSWYgY3JlYXRpb24gZmFpbHMKKwkgKiBiZWNh
dXNlIGl0IGFscmVhZHkgZXhpc3RzLCB3ZSBhcmUgY29udGludWluZy4KKwkgKi8KIAlyZXQgPSAg
bWtkaXIoIi9kZXYiLCBTX0lSV1hVKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJdWtfcHJfZGVidWco
IkZhaWxlZCB0byBta2RpciAvZGV2IGluICVzXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybjsKKwlp
ZiAocmV0ICE9IDAgJiYgZXJybm8gIT0gRUVYSVNUKSB7CisJCXVrX3ByX2VycigiRmFpbGVkIHRv
IGNyZWF0ZSAvZGV2OiAlZFxuIiwgZXJybm8pOworCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0ID0g
bW91bnQoIiIsICIvZGV2IiwgImRldmZzIiwgMCwgTlVMTCk7CiAJaWYgKHJldCAhPSAwKSB7Ci0J
CXVrX3ByX2RlYnVnKCJGYWlsZWQgdG8gbW91bnQgL2RldiBhcyBkZXZmcyBpbiAlc1xuIiwgX19m
dW5jX18pOwotCQlyZXR1cm47CisJCXVrX3ByX2VycigiRmFpbGVkIHRvIG1vdW50IGRldmZzIHRv
IC9kZXY6ICVkXG4iLCBlcnJubyk7CisJCXJldHVybiAtMTsKIAl9Ci0jZW5kaWYKKworCXJldHVy
biAwOwogfQorCit1a19yb290ZnNfaW5pdGNhbGxfcHJpbyhkZXZmc19hdXRvbW91bnQsIDEpOwor
I2VuZGlmCmRpZmYgLS1naXQgYS9saWIvZGV2ZnMvaW5jbHVkZS9kZXZmcy9kZXZpY2UuaCBiL2xp
Yi9kZXZmcy9pbmNsdWRlL2RldmZzL2RldmljZS5oCmluZGV4IDI5ODg5ZTRlLi41NjllZjYwYiAx
MDA2NDQKLS0tIGEvbGliL2RldmZzL2luY2x1ZGUvZGV2ZnMvZGV2aWNlLmgKKysrIGIvbGliL2Rl
dmZzL2luY2x1ZGUvZGV2ZnMvZGV2aWNlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgX0RF
VklDRV9ICiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1ay9pbml0Lmg+CiAK
ICNpbmNsdWRlIDx2ZnNjb3JlL3Vpby5oPgogCkBAIC0yMDgsNCArMjA5LDYgQEAgaW50IGRldmlj
ZV9kZXN0cm95X2xvY2tlZChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogdm9pZCBkZXZpY2VfcmVnaXN0
ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpOwog
dm9pZCByZWFkX3BhcnRpdGlvbl90YWJsZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwogCisjZGVm
aW5lIGRldmZzX2luaXRjYWxsKGZuKSB1a19saWJfaW5pdGNhbGwoZm4pCisKICNlbmRpZiAvKiAh
X0RFVklDRV9IICovCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 11:07:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 11:07:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCifm-0003HG-Ed; Tue, 24 Sep 2019 11:07:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=z6ad=XT=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iCifl-0003HB-SK
 for minios-devel@lists.xen.org; Tue, 24 Sep 2019 11:07:57 +0000
X-Inumbo-ID: 2411a5ac-deb3-11e9-8a4f-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 2411a5ac-deb3-11e9-8a4f-bc764e2007e4;
 Tue, 24 Sep 2019 10:07:40 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 7BB5DF2019;
 Tue, 24 Sep 2019 12:07:39 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id NggDYTl8WhpK; Tue, 24 Sep 2019 12:07:39 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 4DC99F2018;
 Tue, 24 Sep 2019 12:07:35 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 12:07:26 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Tue, 24 Sep 2019 12:07:14 +0200
Message-ID: <20190924100716.3462-4-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v3 3/5] lib/vfscore: Automount option
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TW92ZXMgdGhlIG9wdGlvbiBvZiBhdXRvbWF0aWNhbGx5IGEgcm9vdGZzIHRvIGxpYi92ZnNjb3Jl
LiBUaGlzCmZlYXR1cmUgaXMgbm90IG9ubHkgdXNlZnVsIGZvciBpbml0aWFsaXppbmcgZGV2ZnMu
IExpYnJhcnkgcGFyYW1ldGVycwp0byBpbmZsdWVuY2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJl
IHByb3ZpZGVkLgoKU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBu
ZWNsYWIuZXU+Ci0tLQogbGliL2RldmZzL0NvbmZpZy51ayAgICAgfCAgOSArKy0tCiBsaWIvZGV2
ZnMvZGV2ZnNfdm5vcHMuYyB8ICA4ICstLS0KIGxpYi92ZnNjb3JlL0NvbmZpZy51ayAgIHwgNzYg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxpYi92ZnNjb3JlL01ha2VmaWxlLnVr
IHwgIDUgKysrCiBsaWIvdmZzY29yZS9yb290ZnMuYyAgICB8IDk3ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDE4NCBpbnNlcnRpb25z
KCspLCAxMSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvdmZzY29yZS9yb290
ZnMuYwoKZGlmZiAtLWdpdCBhL2xpYi9kZXZmcy9Db25maWcudWsgYi9saWIvZGV2ZnMvQ29uZmln
LnVrCmluZGV4IGUzOGE2MTZlLi42ZjIxYzAxYyAxMDA2NDQKLS0tIGEvbGliL2RldmZzL0NvbmZp
Zy51aworKysgYi9saWIvZGV2ZnMvQ29uZmlnLnVrCkBAIC0xLDEwICsxLDExIEBACi1jb25maWcg
TElCREVWRlMKK21lbnVjb25maWcgTElCREVWRlMKIAlib29sICJkZXZmczogZGV2ZnMgZmlsZSBz
eXN0ZW0iCiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBMSUJWRlNDT1JFCisKIGlmIExJQkRFVkZT
Ci0gICAgICAgIGNvbmZpZyBMSUJERVZGU19VU0VfUkFNRlMKLSAgICAgICAgYm9vbCAiVXNlIHJh
bWZzIGFzIHJvb3QiCisJY29uZmlnIExJQkRFVkZTX0FVVE9NT1VOVAorICAgICAgICBib29sICJN
b3VudCAvZGV2IGR1cmluZyBib290IgorCWRlcGVuZHMgb24gTElCVkZTQ09SRV9BVVRPTU9VTlRf
Uk9PVEZTCiAgICAgICAgIGRlZmF1bHQgbgotICAgICAgICBzZWxlY3QgTElCUkFNRlMKIGVuZGlm
CmRpZmYgLS1naXQgYS9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYyBiL2xpYi9kZXZmcy9kZXZmc192
bm9wcy5jCmluZGV4IDExYTNlYTA1Li5kODcyZTYyMiAxMDA2NDQKLS0tIGEvbGliL2RldmZzL2Rl
dmZzX3Zub3BzLmMKKysrIGIvbGliL2RldmZzL2RldmZzX3Zub3BzLmMKQEAgLTMxMiwxNSArMzEy
LDkgQEAgVUtfRlNfUkVHSVNURVIoZnNfZGV2ZnMpOwogCiBfX2NvbnN0cnVjdG9yX3ByaW8oMTAx
KSBzdGF0aWMgdm9pZCBkZXZmc19pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0xJQkRFVkZT
X1VTRV9SQU1GUworI2lmZGVmIENPTkZJR19MSUJERVZGU19BVVRPTU9VTlQKIAlpbnQgcmV0Owog
Ci0JcmV0ID0gbW91bnQoIiIsICIvIiwgInJhbWZzIiwgMCwgTlVMTCk7Ci0JaWYgKHJldCAhPSAw
KSB7Ci0JCXVrX3ByX2RlYnVnKCJGYWlsZWQgdG8gbW91bnQgLyBpbiAlc1xuIiwgX19mdW5jX18p
OwotCQlyZXR1cm47Ci0JfQotCiAJcmV0ID0gIG1rZGlyKCIvZGV2IiwgU19JUldYVSk7CiAJaWYg
KHJldCAhPSAwKSB7CiAJCXVrX3ByX2RlYnVnKCJGYWlsZWQgdG8gbWtkaXIgL2RldiBpbiAlc1xu
IiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvQ29uZmlnLnVrIGIvbGliL3Zm
c2NvcmUvQ29uZmlnLnVrCmluZGV4IDVkZWI3ZDA0Li4xNmZmZTA0MyAxMDA2NDQKLS0tIGEvbGli
L3Zmc2NvcmUvQ29uZmlnLnVrCisrKyBiL2xpYi92ZnNjb3JlL0NvbmZpZy51awpAQCAtMTMsNCAr
MTMsODAgQEAgY29uZmlnIExJQlZGU0NPUkVfUElQRV9TSVpFX09SREVSCiAJaGVscAogCQlUaGUg
c2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIGZvciBhbm9ueW1vdXMgcGlwZXMgaXMgMl5vcmRl
ci4KIAorbWVudWNvbmZpZyBMSUJWRlNDT1JFX0FVVE9NT1VOVF9ST09URlMKK2Jvb2wgIkF1dG9t
YXRpY2FseSBtb3VudCBhIHJvb3QgZmlsZXN5c3l0ZW0gKC8pIgorZGVmYXVsdCBuCitoZWxwCisJ
QXV0b21hdGljYWxseSBtb3VudHMgJy8nIGR1cmluZyBib290LiBJZiBgbGlidWtsaWJwYXJhbWAg
aXMKKwljb21waWxlZCBpbiwgdGhlIGRlZmF1bHQgcm9vdCBmaWxlc3lzdGVtIGFuZCBtb3VudCBv
cHRpb25zIGNhbgorCWJlIGNoYW5nZWQgd2l0aCB0aGUgZm9sbG93aW5nIGxpYnJhcnkgcGFyYW1l
dGVyczoKKwkndmZzLnJvb3RmcycsICd2ZnMucm9vdGRldicsICd2ZnMucm9vdGZsYWdzJywgYW5k
ICd2ZnMucm9vdG9wdHMnCisKK2lmIExJQlZGU0NPUkVfQVVUT01PVU5UX1JPT1RGUworCWNob2lj
ZSBMSUJWRlNDT1JFX1JPT1RGUworCXByb21wdCAiRGVmYXVsdCByb290IGZpbGVzeXN0ZW0iCisJ
ZGVmYXVsdCBMSUJWRlNDT1JFX1JPT1RGU19SQU1GUworCisJCWNvbmZpZyBMSUJWRlNDT1JFX1JP
T1RGU19SQU1GUworCQlib29sICJSYW1GUyIKKwkJc2VsZWN0IExJQlJBTUZTCisKKwkJY29uZmln
IExJQlZGU0NPUkVfUk9PVEZTXzlQRlMKKwkJYm9vbCAiOVBGUyIKKwkJc2VsZWN0IExJQlVLOVAK
KwkJc2VsZWN0IExJQjlQRlMKKworCQljb25maWcgTElCVkZTQ09SRV9ST09URlNfQ1VTVE9NCisJ
CWJvb2wgIkN1c3RvbSBhcmd1bWVudCIKKwkJaGVscAorCQkJUGxlYXNlIHNldCBMSUJWRlNDT1JF
X1JPT1RGU19DVVNUT01fQVJHCisJCQl0byBhIGZpbGVzeXN0ZW0gbmFtZSB0aGF0IHNob3VsZCBi
ZSB1c2VkCisJCQlhcyBkZWZhdWx0LgorCWVuZGNob2ljZQorCisJY29uZmlnIExJQlZGU0NPUkVf
Uk9PVEZTX0NVU1RPTV9BUkcKKwlzdHJpbmcgIkRlZmF1bHQgY3VzdG9tIHJvb3QgZmlsZXN5c3Rl
bSIKKwlkZWZhdWx0ICIiCisJZGVwZW5kcyBvbiBMSUJWRlNDT1JFX1JPT1RGU19DVVNUT00KKwlo
ZWxwCisJCUN1c3RvbSBuYW1lIG9mIGEgZmlsZXN5c3RlbSB0byBtb3VudCAoZS5nLiwgcmFtZnMs
CisJCTlwZnMpLiBNYWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGZpbGVzeXN0ZW0KKwkJaXMg
YXZhaWxhYmxlIGZvciBsaWJ2ZnNjb3JlLgorCisJIyBIaWRkZW4gY29uZmlndXJhdGlvbiBvcHRp
b24gdGhhdCBnZXRzIGF1dG9tYXRpY2FsbHkgZmlsbGVkCisJIyB3aXRoIHRoZSBzZWxlY3RlZCBm
aWxlc3lzdGVtIG5hbWUKKwljb25maWcgTElCVkZTQ09SRV9ST09URlMKKwlzdHJpbmcKKwlkZWZh
dWx0ICJyYW1mcyIgaWYgTElCVkZTQ09SRV9ST09URlNfUkFNRlMKKwlkZWZhdWx0ICI5cGZzIiBp
ZiBMSUJWRlNDT1JFX1JPT1RGU185UEZTCisJZGVmYXVsdCBMSUJWRlNDT1JFX1JPT1RGU19DVVNU
T01fQVJHIGlmIExJQlZGU0NPUkVfUk9PVEZTX0NVU1RPTQorCWRlZmF1bHQgIiIKKworCSMgVGhl
IHJvb3QgZGV2aWNlIG9wdGlvbiBpcyBoaWRkZW4gZm9yIFJhbUZTIGFuZCA5UEZTCisJY29uZmln
IExJQlZGU0NPUkVfUk9PVERFVgorCXN0cmluZyAiRGVmYXVsdCByb290IGRldmljZSIKKwlkZXBl
bmRzIG9uICFMSUJWRlNDT1JFX1JPT1RGU19SQU1GUyAmJiAhTElCVkZTQ09SRV9ST09URlNfOVBG
UworCWRlZmF1bHQgIiIKKwloZWxwCisJCURldmljZSB0byBtb3VudCB0aGUgZmlsZXN5c3RlbSBm
cm9tLiBEZXBlbmRpbmcgb24gdGhlCisJCXNlbGVjdGVkIGZpbGVzeXN0ZW0sIHRoaXMgb3B0aW9u
IG1heSBub3QgYmUgcmVxdWlyZWQuCisKKwkjIFRoZSByb290IGZsYWdzIGlzIGhpZGRlbiBmb3Ig
UmFtRlMKKwljb25maWcgTElCVkZTQ09SRV9ST09URkxBR1MKKwloZXggIkRlZmF1bHQgcm9vdCBt
b3VudCBmbGFncyIKKwlkZXBlbmRzIG9uICFMSUJWRlNDT1JFX1JPT1RGU19SQU1GUworCWRlZmF1
bHQgMHgwCisJaGVscAorCQlNb3VudCBmbGFncy4KKworCSMgVGhlIHJvb3Qgb3B0aW9ucyBhcmUg
aGlkZGVuIGZvciBSYW1GUworCWNvbmZpZyBMSUJWRlNDT1JFX1JPT1RPUFRTCisJc3RyaW5nICJE
ZWZhdWx0IHJvb3QgbW91bnQgb3B0aW9ucyIKKwlkZXBlbmRzIG9uICFMSUJWRlNDT1JFX1JPT1RG
U19SQU1GUworCWRlZmF1bHQgIiIKKwloZWxwCisJCVVzdWFsbHkgYSBjb21tYS1zZXBhcmF0ZWQg
bGlzdCBvZiBhZGRpdGlvbmFsIG1vdW50CisJCW9wdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgaW50
ZXJwcmV0ZWQgYnkgdGhlIHRhcmdldAorCQlmaWxlc3lzdGVtLgorZW5kaWYKIGVuZGlmCmRpZmYg
LS1naXQgYS9saWIvdmZzY29yZS9NYWtlZmlsZS51ayBiL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVr
CmluZGV4IDFlNWZjMTE0Li44NzI2OTYwNiAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvTWFrZWZp
bGUudWsKKysrIGIvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKQEAgLTEsNSArMSw4IEBACiAkKGV2
YWwgJChjYWxsIGFkZGxpYl9zLGxpYnZmc2NvcmUsJChDT05GSUdfTElCVkZTQ09SRSkpKQogCisj
IFJlZ2lzdGVyIHRvIHVrbGlicGFyYW0sIHNldHMgInZmcyIgYXMgcGFyYW1ldGVyIHByZWZpeCAo
dmZzLiopCiskKGV2YWwgJChjYWxsIGFkZGxpYl9wYXJhbXByZWZpeCxsaWJ2ZnNjb3JlLHZmcykp
CisKIENJTkNMVURFUy15ICs9IC1JJChMSUJWRlNDT1JFX0JBU0UpL2luY2x1ZGUKIAogTElCVkZT
Q09SRV9DRkxBR1MtJChjYWxsIGdjY192ZXJzaW9uX2dlLDgsMCkgKz0gLVduby1jYXN0LWZ1bmN0
aW9uLXR5cGUKQEAgLTE5LDYgKzIyLDggQEAgTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlND
T1JFX0JBU0UpL3N1YnJfdWlvLmMKIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9C
QVNFKS9waXBlLmMKIExJQlZGU0NPUkVfUElQRV9GTEFHUy15ICs9IC1Xbm8tY2FzdC1mdW5jdGlv
bi10eXBlCiBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvZXh0cmEubGQK
K0xJQlZGU0NPUkVfU1JDUy0kKENPTkZJR19MSUJWRlNDT1JFX0FVVE9NT1VOVF9ST09URlMpICs9
IFwKKwkkKExJQlZGU0NPUkVfQkFTRSkvcm9vdGZzLmMKIAogCiBVS19QUk9WSURFRF9TWVNDQUxM
Uy0kKENPTkZJR19MSUJWRlNDT1JFKSArPSB3cml0ZXYtMwpkaWZmIC0tZ2l0IGEvbGliL3Zmc2Nv
cmUvcm9vdGZzLmMgYi9saWIvdmZzY29yZS9yb290ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMC4uZWUzY2ZmODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvdmZzY29yZS9y
b290ZnMuYwpAQCAtMCwwICsxLDk3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTMtQ2xhdXNlICovCisvKgorICogTW91bnQgVkZTIHJvb3QKKyAqCisgKiBBdXRob3JzOiBTaW1v
biBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KKyAqCisgKgorICogQ29weXJpZ2h0
IChjKSAyMDE5LCBORUMgTGFib3JhdG9yaWVzIEV1cm9wZSBHbWJILCBORUMgQ29ycG9yYXRpb24u
CisgKiAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhJ
UyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAq
LworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dWsvY29uZmlnLmg+CisjaW5jbHVkZSA8
dWsvYXJjaC90eXBlcy5oPgorI2luY2x1ZGUgPHVrL2xpYnBhcmFtLmg+CisjaW5jbHVkZSA8c3lz
L3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNpbmNsdWRlIDx1ay9pbml0Lmg+CisK
K3N0YXRpYyBjb25zdCBjaGFyICpyb290ZnMgICA9IENPTkZJR19MSUJWRlNDT1JFX1JPT1RGUzsK
KworI2lmbmRlZiBDT05GSUdfTElCVkZTQ09SRV9ST09UREVWCitzdGF0aWMgY29uc3QgY2hhciAq
cm9vdGRldiAgPSAiIjsKKyNlbHNlCitzdGF0aWMgY29uc3QgY2hhciAqcm9vdGRldiAgPSBDT05G
SUdfTElCVkZTQ09SRV9ST09UREVWOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0xJQlZGU0NP
UkVfUk9PVE9QVFMKK3N0YXRpYyBjb25zdCBjaGFyICpyb290b3B0cyA9ICIiOworI2Vsc2UKK3N0
YXRpYyBjb25zdCBjaGFyICpyb290b3B0cyA9IENPTkZJR19MSUJWRlNDT1JFX1JPT1RPUFRTOwor
I2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0xJQlZGU0NPUkVfUk9PVEZMQUdTCitzdGF0aWMgX191
NjQgcm9vdGZsYWdzICAgICAgPSAweDA7CisjZWxzZQorc3RhdGljIF9fdTY0IHJvb3RmbGFncyAg
ICAgID0gKF9fdTY0KSBDT05GSUdfTElCVkZTQ09SRV9ST09URkxBR1M7CisjZW5kaWYKKworVUtf
TElCX1BBUkFNX1NUUihyb290ZnMpOworVUtfTElCX1BBUkFNX1NUUihyb290ZGV2KTsKK1VLX0xJ
Ql9QQVJBTV9TVFIocm9vdG9wdHMpOworVUtfTElCX1BBUkFNKHJvb3RmbGFncywgX191NjQpOwor
CitzdGF0aWMgaW50IHZmc2NvcmVfcm9vdGZzKHZvaWQpCit7CisJLyoKKwkgKiBJbml0aWFsaXph
dGlvbiBvZiB0aGUgcm9vdCBmaWxlc3lzdGVtICcvJworCSAqIE5PVEU6IEFueSBhZGRpdGlvbmFs
IHN1YiBtb3VudCBwb2ludHMgKGxpa2UgJy9kZXYnIHdpdGggZGV2ZnMpCisJICogaGF2ZSB0byBi
ZSBtb3VudGVkIGxhdGVyLgorCSAqLworCWlmICghcm9vdGZzIHx8IHJvb3Rmc1swXSA9PSAnXDAn
KSB7CisJCXVrX3ByX2NyaXQoIlBhcmFtZXRlciAndmZzLnJvb3RmcycgaXMgaW52YWxpZFxuIik7
CisJCXJldHVybiAtMTsKKwl9CisKKwl1a19wcl9pbmZvKCJNb3VudCAlcyB0byAvLi4uXG4iLCBy
b290ZnMpOworCWlmIChtb3VudChyb290ZGV2LCAiLyIsIHJvb3Rmcywgcm9vdGZsYWdzLCByb290
b3B0cykgIT0gMCkgeworCQl1a19wcl9jcml0KCJGYWlsZWQgdG8gbW91bnQgLzogJWRcbiIsIGVy
cm5vKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogVE9ETzogQWx0ZXJuYXRpdmVseSB3
ZSBjb3VsZCBleHRyYWN0IGFuIGFyY2hpdmUgZm91bmQKKwkgKiBhcyBpbml0cmQgdG8gYSByYW1m
cyAnLycgaWYgd2UgaGF2ZSBnb3QgZnNuYW1lICdpbml0cmQnCisJICovCisKKwlyZXR1cm4gMDsK
K30KKwordWtfcm9vdGZzX2luaXRjYWxsX3ByaW8odmZzY29yZV9yb290ZnMsIDApOwotLSAKMi4y
MC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 11:08:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 11:08:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCigk-0003O2-Ly; Tue, 24 Sep 2019 11:08:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=IFsf=XT=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iCigj-0003Nm-Tg
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 11:08:57 +0000
X-Inumbo-ID: e49c461e-deaa-11e9-994c-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id e49c461e-deaa-11e9-994c-bc764e2007e4;
 Tue, 24 Sep 2019 09:08:37 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0999C142F;
 Tue, 24 Sep 2019 02:08:37 -0700 (PDT)
Received: from [10.1.196.50] (e108454-lin.cambridge.arm.com [10.1.196.50])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D37853F67D;
 Tue, 24 Sep 2019 02:08:35 -0700 (PDT)
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
 <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
 <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
 <DB7PR08MB30827A87C6B63F0624D8D5A4F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <9a309b9a-8760-15c2-38c8-7206e7feb020@arm.com>
Date: Tue, 24 Sep 2019 10:08:34 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <DB7PR08MB30827A87C6B63F0624D8D5A4F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksCgpPbiAyNC8wOS8yMDE5IDA4OjQ0LCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5h
KSB3cm90ZToKPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4gRnJvbTogU2hhcmFuIFNh
bnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Cj4+IFNlbnQ6IDIwMTnlubQ55pyI
MjDml6UgMjM6NTEKPj4gVG86IEp1bGllbiBHcmFsbCA8SnVsaWVuLkdyYWxsQGFybS5jb20+OyBK
dXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKQo+PiA8SnVzdGluLkhlQGFybS5jb20+OyBT
YW50aWFnbyBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Owo+PiBtaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFNpbW9uIEt1ZW56ZXIKPj4gPHNpbW9uLmt1ZW56ZXJA
bmVjbGFiLmV1Pgo+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5Y
aW5AYXJtLmNvbT47IFdlaSBDaGVuIChBcm0KPj4gVGVjaG5vbG9neSBDaGluYSkgPFdlaS5DaGVu
QGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xvZ3kKPj4gQ2hpbmEpIDxKaWFueW9u
Zy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Cj4+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQg
UEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3RlciBJUlEKPj4gZm9yIGFy
Y2hfdGltZXIKPj4KPj4KPj4gT24gOS8xOS8xOSAxOjU3IFBNLCBKdWxpZW4gR3JhbGwgd3JvdGU6
Cj4+PiBIaSwKPj4+Cj4+PiBPbiAxNy8wOS8yMDE5IDEyOjU1LCBTaGFyYW4gU2FudGhhbmFtIHdy
b3RlOgo+Pj4+IEhlbGxvLAo+Pj4+Cj4+Pj4gT24gOS8xNy8xOSAxMjo0NCBQTSwgSnVsaWVuIEdy
YWxsIHdyb3RlOgo+Pj4+PiBIaSwKPj4+Pj4KPj4+Pj4gT24gOS8xNy8xOSAxMTowOCBBTSwgU2hh
cmFuIFNhbnRoYW5hbSB3cm90ZToKPj4+Pj4+Cj4+Pj4+PiBPbiA5LzE3LzE5IDExOjE3IEFNLCBK
dWxpZW4gR3JhbGwgd3JvdGU6Cj4+Pj4+Pj4KPj4+Pj4+Pgo+Pj4+Pj4+IE9uIDkvMTcvMTkgOTo0
NCBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3JvdGU6Cj4+Pj4+Pj4+IEhp
IEp1bGllbgo+Pj4+Pj4+Cj4+Pj4+Pj4gSGksCj4+Pj4+Pj4KPj4+Pj4+Pj4+IC0tLS0tT3JpZ2lu
YWwgTWVzc2FnZS0tLS0tCj4+Pj4+Pj4+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFs
bEBhcm0uY29tPgo+Pj4+Pj4+Pj4gU2VudDogMjAxOeW5tDnmnIgxN+aXpSAxNjozOQo+Pj4+Pj4+
Pj4gVG86IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNv
bT47Cj4+IFNhbnRpYWdvCj4+Pj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIu
ZXU+Owo+Pj4+Pj4+Pj4gbWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOwo+Pj4+Pj4+
Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+OyBTaGFyYW4gU2FudGhh
bmFtCj4+Pj4+Pj4+PiA8U2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+Cj4+Pj4+Pj4+PiBDYzog
S2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47IFdlaQo+
PiBDaGVuCj4+Pj4+Pj4+PiAoQXJtCj4+Pj4+Pj4+PiBUZWNobm9sb2d5IENoaW5hKSA8V2VpLkNo
ZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0KPj4gVGVjaG5vbG9neQo+Pj4+Pj4+Pj4gQ2hp
bmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Cj4+Pj4+Pj4+PiBTdWJq
ZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZCBhbmQKPj4+
Pj4+Pj4+IHJlZ2lzdGVyIElSUQo+Pj4+Pj4+Pj4gZm9yIGFyY2hfdGltZXIKPj4+Pj4+Pj4+Cj4+
Pj4+Pj4+PiBPbiA5LzE3LzE5IDg6MDEgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hp
bmEpIHdyb3RlOgo+Pj4+Pj4+Pj4+IEhpIEp1bGllbiAod2VsY29tZSBiYWNrIGZyb20gaG9saWRh
eSDwn5iKICkKPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBIaSwKPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBUaGFu
a3MgOikuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+
Pj4+Pj4+Pj4+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29tPgo+Pj4+
Pj4+Pj4+PiBTZW50OiAyMDE55bm0OeaciDE35pelIDM6NTMKPj4+Pj4+Pj4+Pj4gVG86IEp1c3Rp
biBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNvbT47Cj4+Pj4+Pj4+
Pj4+IFNhbnRpYWdvCj4+Pj4+Pj4+Pj4+IFBhZ2FuaSA8U2FudGlhZ28uUGFnYW5pQG5lY2xhYi5l
dT47Cj4+Pj4+Pj4+Pj4+IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsKPj4+Pj4+
Pj4+Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+OyBTaGFyYW4KPj4g
U2FudGhhbmFtCj4+Pj4+Pj4+Pj4+IDxTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4KPj4+Pj4+
Pj4+Pj4gQ2M6IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEthbHkuWGluQGFybS5j
b20+OyBXZWkKPj4gQ2hlbgo+Pj4+Pj4+Pj4gKEFybQo+Pj4+Pj4+Pj4+PiBUZWNobm9sb2d5IENo
aW5hKSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0KPj4+Pj4+Pj4+IFRlY2hu
b2xvZ3kKPj4+Pj4+Pj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPgo+Pj4+Pj4+Pj4+
PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZCBh
bmQKPj4+Pj4+Pj4+Pj4gcmVnaXN0ZXIKPj4+Pj4+Pj4+IElSUQo+Pj4+Pj4+Pj4+PiBmb3IgYXJj
aF90aW1lcgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBPbiA5LzE2LzE5IDg6NTIgQU0sIEp1c3Rp
biBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOgo+Pj4+Pj4+Pj4+Pj4gSGkgIFNhbnRp
YWdvCj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+IEhpIGFsbCwKPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+
Pj4gQFNhbnRpYWdvLCBpdCBpcyBxdWl0ZSBkaWZmaWN1bHQgdG8gZm9sbG93IHRoZSB0aHJlYWQg
d2hlbiB5b3UKPj4+Pj4+Pj4+Pj4gc3RhcnQKPj4+Pj4+Pj4+Pj4geW91ciBhbnN3ZXIgd2l0aCAi
Q09NTUVOVCIuIE1heSBJIGFzayB5b3UgdG8gY29uZmlndXJlIHlvdXIKPj4+Pj4+Pj4+Pj4gZS1t
YWlsCj4+Pj4+Pj4+Pj4+IGNsaWVudCB0byBxdW90ZSBwcm9wZXJseSAoaS5lID4pPwo+Pj4+Pj4+
Pj4+Pgo+Pj4+Pj4+Pj4+PiBGdXJ0aGVybW9yZSwgZGlzY2xhaW1lciBmb290ZXIgc2hvdWxkIGJl
IGF2b2lkZWQgb24gdGhlCj4+Pj4+Pj4+Pj4+IG1haWxpbmcgbGlzdC4KPj4+Pj4+Pj4+Pj4gWW91
IGFyZSBiYXNpY2FsbHkgc2F5aW5nIHRoaXMgaXMgY29uZmlkZW50aWFsIGJ1dCB5b3Ugc2VuZCB0
bwo+Pj4+Pj4+Pj4+PiBldmVyeW9uZQo+Pj4+Pj4+Pj4+PiAobWFpbGluZyBsaXN0IGFyZSBhcmNo
aXZlZCkuLi4KPj4+Pj4+Pj4+PiBPSwo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEl0IHdhc24ndCBkaXJl
Y3RlZCB0byB5b3UgOykuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBbLi4uXQo+
Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+IENPTU1FTlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3
ZSB3b3VsZCBsaWtlIHRvIGRvIGhlcmU/Cj4+IE5vdAo+Pj4+Pj4+Pj4+Pj4+IGV2ZW4KPj4+Pj4+
Pj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/IEFzIHRoZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hl
biB0aGUKPj4gY291bnRlcgo+Pj4+Pj4+Pj4+PiBvdmVyZmxvd3MKPj4+Pj4+Pj4+Pj4+PiB3ZSB3
b3VsZCBnZXQgYSBuZXcgaW50ZXJydXB0IG90aGVyd2lzZSAoYWx0aG91Z2ggdGhlCj4+Pj4+Pj4+
Pj4+Pj4gb3ZlcmZsb3cgY291bGQKPj4+Pj4+Pj4+Pj4+PiBoYXBwZW4gaW4gYSB2ZXJ5IHZlcnkg
bG9uZyB0aW1lLCByaWdodD8pCj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4gSW4gcHJldmlvdXMg
dmVyc2lvbiwgd2UgYWRkZWQgYSBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkgaW4KPj4+Pj4+Pj4+
Pj4+IGdlbmVyaWNfdGltZXJfaXJxX2hhbmRsZXIuIEJ1dCBhcyBwZXIgdGhlIHN1Z2dlc3Rpb24g
WzFdIGZyb20KPj4+Pj4+Pj4+Pj4+IEp1bGllbiwKPj4+Pj4+Pj4+IHdlCj4+Pj4+Pj4+Pj4+PiBy
ZW1vdmVkIGl0LiBCZXNpZGVzLCB3ZSByZWZlcnJlZCB0byB0aGUgbWluaW9zIGxvZ2ljIGF0IFsy
XSwKPj4+Pj4+Pj4+Pj4+IGl0IG9ubHkgY2FsbGVkCj4+Pj4+Pj4+Pj4+PiB1bm1hc2sgYW5kIG1h
c2sgaW4gYmxvY2tfZG9tYWluICh3aGljaCBpcyBlcXVpdmFsZW50IHRvCj4+Pj4+Pj4+Pj4+PiB1
bmlrcmFmdCdzCj4+Pj4+Pj4+Pj4+PiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykKPj4+Pj4+Pj4+
Pj4KPj4+Pj4+Pj4+Pj4gTG9va2luZyBhdCBteSBjb21tZW50cyBhZ2FpbiwgSSBhbSBub3Qgc3Vy
ZSB3aGVyZSBJCj4+IHN1Z2dlc3RlZCB0bwo+Pj4+Pj4+Pj4gcmVtb3ZlCj4+Pj4+Pj4+Pj4+IGdl
bmVyaWNfdGltZXJfbWFza19pcnEoKS4uLiBDYW4geW91IGV4cGFuZCBpdD8KPj4+Pj4+Pj4+PiBP
a2F5Li4uIHNvcnJ5IGZvciBteSBtaXN0YWtlcy4gSSB3aWxsIGFkZAo+Pj4+Pj4+Pj4+IGdlbmVy
aWNfdGltZXJfbWFza19pcnEoKSBiYWNrLgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBGV0lXLCB0
aGUgdHdvIG1haW4gY29tbWVudHMgb24gdGhlIHByZXZpb3VzIHZlcnNpb25zIHdlcmU6Cj4+Pj4+
Pj4+Pj4+ICAgICAgICAxKSBpc2IoKSBzaG91bGQgYmUgYWRkZWQgYWZ0ZXIgdXBkYXRpbmcgdGhl
IHN5c3RlbQo+Pj4+Pj4+Pj4+PiByZWdpc3RlciB0bwo+Pj4+Pj4+Pj4+PiBlbnN1cmUgdGhhdCB0
aGUgc3lzdGVtIHN5c3RlbSBpcyBzeW5jaHJvbml6ZWQKPj4+Pj4+Pj4+Pj4gICAgICAgIDIpIFRo
aXMgaXMgY29tbW9uIGNvZGUgYmV0d2VlbiBhcm0zMiBhbmQgYXJtNjQuIEJ1dCB0aGUKPj4+Pj4+
Pj4+Pj4gc3lzdGVtCj4+Pj4+Pj4+Pj4+IHJlZ2lzdGVyIG5hbWUgYXJlIGFybTY0Li4uIEFjY2Vz
c2VzIHNob3VsZCBiZSBzdHViIGluCj4+Pj4+Pj4+Pj4+IGFyY2gtc3BlY2lmaWMKPj4+Pj4+Pj4+
Pj4gaGVhZGVyIHNvIHRoZSBjb2RlIGNhbiB3b3JrIGZvciBib3RoIGFybTMyIGFuZCBhcm02NC4K
Pj4+Pj4+Pj4+PiBJIHJlbmFtZWQgcGxhdC9jb21tb24vYXJtL3RpbWUuYyB0bwo+PiBwbGF0L2Nv
bW1vbi9hcm0vdGltZV9hcm02NC5jCj4+Pj4+Pj4+Pj4gU2VlbXMgdGhhdCBpcyBub3QgZW5vdWdo
IGZvciB5b3U/ICBJZiBubywgSSBoYXZlIG5vIG9iamVjdGlvbnMKPj4+Pj4+Pj4+PiB0byBtYWtl
Cj4+Pj4+Pj4+Pj4gYSBzdHViICBmb3IgYXJtMzIuCj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gV2VsbCwg
dGhlIG9ubHkgYml0cyBhcm02NCBzcGVjaWZpY3MgaW4gdGhpcyBmaWxlIGFyZSB0aGUgYWNjZXNz
Cj4+Pj4+Pj4+PiB0byB0aGUKPj4+Pj4+Pj4+IHN5c3RlbSByZWdpc3RlcnMuIFNvIHJlbmFtaW5n
IHRvIHRpbWVfYXJtNjQuYyBzZWVtcyBhIGJpdAo+Pj4+Pj4+Pj4gb3ZlcmtpbGwuLi4KPj4+Pj4+
Pj4+Cj4+Pj4+Pj4+PiBJZiB0aGVyZSBhcmUgcGxhbiB0byBtYWtlIGFybTMyIGEgY29ycmVjdCBw
b3J0IG9uIFVuaWtyYWZ0LCB0aGVuCj4+Pj4+Pj4+PiBzcGxpdHRpbmcgdGhlIGNvZGUgd291bGQg
YmUgdGhlIGJlc3QuIElmIHRoZXJlIGFyZSBubyBwbGFuIHRvCj4+Pj4+Pj4+PiBnZXQgYXJtMzIs
Cj4+Pj4+Pj4+PiB0aGVuIG1heWJlIHlvdSBzaG91bGQgdGhpbmsgb2Yga2lsbGluZyBpdCBjb21w
bGV0ZWx5Lgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBBcm0zMiB4ZW4gcGxhdCBpcyBpbml0aWFsbHkgc3Vw
cG9ydGVkIGJ1dCBubyBvbmUgIGhhcyB0b3VjaGVkCj4+Pj4+Pj4+IHRoYXQgZm9yIGEgbG9uZwo+
Pj4+Pj4+PiB0aW1lLiBDdXJyZW50bHkgbGV04oCZcyBmb2N1cyBvbiBhcm02NCBrdm0gcGxhdCBv
bmx5LiBJZiB0aGUKPj4+Pj4+Pj4gcmVxdWlyZW1lbnRzIGNoYW5nZXMsCj4+Pj4+Pj4+IHdlIGNh
biBzdXBwb3J0IGFybTMyIGFkZGl0aW9uYWxseS4gV2hhdCBkbyB5b3UgdGhpbmsgYWJvdXQgaXQ/
Cj4+Pj4+Pj4KPj4+Pj4+PiBJIGFtIG5vdCBhc2tpbmcgdG8gaW1wbGVtZW50IGFybTMyLCBJIGFt
IG9ubHkgc3VnZ2VzdGluZyB0byB0cnkgdG8KPj4+Pj4+PiBzcGxpdCB0aGUgY29kZSByYXRoZXIg
dGhhbiB0cnlpbmcgdG8gbWl4IGNvbW1vbiBjb2RlIHZzIGFyY2gKPj4+Pj4+PiBzcGVjaWZpYyBj
b2RlIGluIHBsYXQvY29tbW9uL2FybS4gVGhhdCBkaXJlY3RvcnkgaW4gcGFydGljdWxhciBpcwo+
Pj4+Pj4+IGxvb2tpbmcgbWVzc2llciBhbmQgbWVzc2llciBhcyBuZXcgc2VyaWVzIGFyZSBwb3N0
ZWQuCj4+Pj4+Pgo+Pj4+Pj4gSSBhZ3JlZSB3aXRoIEp1bGllbiBpdCBpcyBiZXR0ZXIgdG8gc3Bs
aXQgdGhlIGFybTMyIGNvZGUgZnJvbSB0aGUKPj4+Pj4+IGFybTY0IGNvZGUuIE15IHN1Z2dlc3Rp
b24gd291bGQgYmUKPj4+Pj4+Cj4+Pj4+PiBwbGF0L2NvbW1vbi9hcm0gZm9yIDMyLWJpdCBjb2Rl
Cj4+Pj4+Pgo+Pj4+Pj4gcGxhdC9jb21tb24vYXJtNjQgZm9yIHRoZSA2NC1iaXQuCj4+Pj4+Cj4+
Pj4+IFdlbGwgeW91IGNhbiBzaGFyZSBhIGxvdCBvZiBjb2RlIGJldHdlZW4gMzItYml0IGFuZCA2
NC1iaXQuIElmIHdlCj4+Pj4+IHRha2UgdGhlIGV4YW1wbGUgb2YgdGhlIGFyY2ggdGltZXIsIHRo
ZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlIHdheQo+Pj4+PiB0byBhY2Nlc3MgdGhlIHJlZ2lzdGVy
cyAoaS5lLiBzeXN0ZW0gcmVnaXN0ZXJzIHZzIGNvLXByb2Nlc3Nvcgo+Pj4+PiByZWdpc3RlcnMp
Lgo+Pj4+Cj4+Pj4gU2luY2UgaXQgaXMgcHJpbWFyaWx5IGFib3V0IHRoZSBjbyBwcm9jZXNzb3Ig
YW5kIHN5c3RlbSByZWdpc3Rlci4gSG93Cj4+Pj4gYWJvdXQgcHVzaGluZyB0aGUgZnVuY3Rpb25h
bGl0eSBpbnRvIHRoZSByZXNwZWN0aXZlIGhlYWRlci4KPj4+Cj4+PiBGb3IgdGhlIHRpbWVyIHRo
aXMgaXMgbW9zdGx5IHN5c3RlbSByZWdpc3RlciwgYnV0IHRoZXJlIGFyZS93aWxsIGJlCj4+PiBz
cGVjaWZpYyBhcm02NC9hcm0zMiBjb2RlIChzdWNoIGFzIGFzc2VtYmx5IGZpbGUpLiBTbyBJIHdv
dWxkCj4+PiByZWNvbW1lbmQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5IHRyZWUgdGhhdCBhbGxvd3Mg
c3VjaCBzcGxpdC4KPj4KPj4gSSBhZ3JlZS4KPj4KPj4+Cj4+Pj4KPj4+PiBwbGF0L2NvbW1vbi9p
bmNsdWRlL2FybS90aW1lLmgKPj4+Pgo+Pj4+ICAgICAgIFRoZSBoZWFkZXIgaW5jbHVkZXMgYXJj
aCBzcGVjaWZpYyBoZWFkZXIgZmlsZXMuCj4+Pj4KPj4+PiBwbGF0L2NvbW1vbi9pbmNsdWRlL2Fy
bS9hcm02NC90aW1lLmgKPj4+Pgo+Pj4+ICAgICAgUHJvdmlkZXMgYSBhcmNoaXRlY3R1cmUgc3Bl
Y2lmaWMgaW1wbGVtZW50YXRpb24gZm9yIHJlYWRpbmcKPj4+PiBzeXN0ZW0gcmVnaXN0ZXJzIHdo
aWxlIHByb3ZpZGluZyBhIG1hY3JvIGRlZmluaXRpb24gZm9yIHJlYWRpbmcKPj4+PiByZWdpc3Rl
ciBsaWtlOgo+Pj4+Cj4+Pj4gICAgI2RlZmluZSAgZWwwX2NudHZfY3RsX2dldCAgU1lTUkVHX1JF
QUQzMihjbnR2X2N0bF9lbDApCj4+Pj4KPj4+PiAgICAjZGVmaW5lICBlbDBfY250dl9jdGxfc2V0
KHZhbCkgIChjbnR2X2N0bF9lbDAsIHZhbCkKPj4+Cj4+PiBUaGVyZSBhcmUgZG96ZW5zIG9mIHN5
c3RlbSByZWdpc3RlcnMsIHNvIEkgYW0gbm90IHN1cmUgeW91IHdvdWxkIHdhbnQKPj4+IHRvIGNy
ZWF0ZSBoZWxwZXIgZm9yIGV2ZXJ5IG9mIHRoZW0uIEl0IHdvdWxkIGJlIGJlc3QgaWYgeW91IGZp
bmQgYSB3YXkKPj4+IHRvIGFic3RyYWN0IHRoaXMuCj4+Cj4+IEkgYWdyZWUgd2UgY291bGQgYWJz
dHJhY3QgaXQgbW9yZSB1c2luZyB0aGUgQUFyY2g2NCBzeXN0ZW0gcmVnaXN0ZXIgbmFtZS4KPj4K
Pj4gI2RlZmluZSBlbDBfZ2V0KHJlZykgU1lTUkVHX1JFQUQoICMjIHJlZyAjIyApCj4gCj4gQnV0
IHRoZSBwcmVmaXggImVsMF8iIGdlbmVyYWxseSBtZWFucyBpdCBpcyBhIEFhcmNoNjQgcmVnaXN0
ZXIuCj4gZS5nLiBDTlRWX0NUTF9FTDAgaXMgdGhlIGFhcmNoNjQgbmFtZS4gQ05UVl9DVEwgaXMg
dGhlIGFhcmNoMzIgbmFtZS4KCldlbGwsIGlmIHlvdSB3YW50IHRvIGdldCBjb21tb24gY29kZSB5
b3Ugd2lsbCBoYXZlIHRvIGZpbmQgYSBjb21tb24gbmFtaW5nLiBZb3UgCmhhdmUgYSBmZXcgY2hv
aWNlcyBoZXJlOgogICAgMSkgVXNlIHRoZSBBQXJjaDY0IG5hbWVzIGFuZCBhbGlhcyB0aGUgQUFy
Y2gzMiBuYW1lcy4gVGhpcyBpcyB3aGF0IHdlIGRvIGZvciAKWGVuLgogICAgMikgVXNlIHRoZSBB
QXJjaDMyIG5hbWVzIGFuZCBhbGlhcyB0aGUgQUFyY2g2NCBuYW1lcy4KICAgIDMpIFByb3ZpZGlu
ZyBoZWxwZXIgZm9yIGV2ZXJ5IHNpbmdsZSByZWdpc3RlcnMuCgpUaGUgQUFyY2g2NCBuYW1lcyBo
YXZlIHRoZSBhZHZhbnRhZ2UgdG8gdGVsbCB5b3Ugd2hhdCBpcyB0aGUgbG93ZXN0IGxldmVsIHRo
ZXkgCmNhbiBiZSBhY2Nlc3NlZCBmcm8KClJlZ2FyZGluZyBTaGFyYW0ncyBzdWdnZXN0LCBlbDBf
Z2V0KCkgaW1wbGllcyB5b3UgY2FuIG9ubHkgdXNlIHdpdGggc3lzdGVtIApyZWdpc3RlciBhY2Nl
c3NpYmxlIGF0IEVMMCAoaS5lLiB1c2Vyc3BhY2UpLiBVbmlrcmFmdCB3aWxsIGFsc28gbmVlZCB0
byBhY2Nlc3MgCnN5c3RlbSByZWdpc3RlciBvbmx5IGFjY2Vzc2libGUgYXQgRUwxLgoKU28geW91
IG1heSB3YW50IHRvIHRoaW5rIGZvciBhIGRpZmZlcmVudCBuYW1lLiBNYXliZSB7cmVhZCwgd3Jp
dGV9X3N5c3JlZygpPyBJIApoYXZlbid0IHN1Z2dlc3RlZCBnZXQgYmVjYXVzZSB0aGUgY291bnRl
cnBhcnQgJ3B1dCcgZG9lcyBub3Qgc2VlbSBzdWl0YWJsZSBoZXJlLgoKQ2hlZXJzLAoKLS0gCkp1
bGllbiBHcmFsbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 11:09:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 11:09:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCih8-0003Wx-DZ; Tue, 24 Sep 2019 11:09:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d6A1=XT=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCih7-0003WU-6D
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 11:09:21 +0000
X-Inumbo-ID: 4b3dd3aa-deb1-11e9-ae5c-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 4b3dd3aa-deb1-11e9-ae5c-bc764e2007e4;
 Tue, 24 Sep 2019 09:54:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 36600105704;
 Tue, 24 Sep 2019 11:54:26 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kEEVV3a_bALT; Tue, 24 Sep 2019 11:54:26 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 0CFB91056F6;
 Tue, 24 Sep 2019 11:54:26 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 11:54:25 +0200
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>, Julien Grall
 <Julien.Grall@arm.com>, Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
 <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
 <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
 <DB7PR08MB30827A87C6B63F0624D8D5A4F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <9a309b9a-8760-15c2-38c8-7206e7feb020@arm.com>
 <DB7PR08MB3082477DCEDFAC5C69AF35D8F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <1cc08133-9218-b3a8-b72f-48c23e94a562@neclab.eu>
Date: Tue, 24 Sep 2019 11:54:25 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <DB7PR08MB3082477DCEDFAC5C69AF35D8F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Ck9uIDkvMjQvMTkgMTE6NDAgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdy
b3RlOgo+IEhpIEp1bGllbiBhbmQgU2hhcmFuCj4KPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0t
LS0KPj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPj4gU2VudDog
MjAxOeW5tDnmnIgyNOaXpSAxNzowOQo+PiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBD
aGluYSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsgU2hhcmFuCj4+IFNhbnRoYW5hbSA8c2hhcmFuLnNh
bnRoYW5hbUBuZWNsYWIuZXU+OyBTYW50aWFnbyBQYWdhbmkKPj4gPFNhbnRpYWdvLlBhZ2FuaUBu
ZWNsYWIuZXU+OyBtaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFNpbW9uCj4+IEt1
ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pgo+PiBDYzogS2FseSBYaW4gKEFybSBUZWNo
bm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47IFdlaSBDaGVuIChBcm0KPj4gVGVjaG5v
bG9neSBDaGluYSkgPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtIFRlY2hub2xv
Z3kKPj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Cj4+IFN1
YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCBy
ZWdpc3RlciBJUlEKPj4gZm9yIGFyY2hfdGltZXIKPj4KPj4gSGksCj4+Cj4+IE9uIDI0LzA5LzIw
MTkgMDg6NDQsIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3RlOgo+Pj4+IC0t
LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4gRnJvbTogU2hhcmFuIFNhbnRoYW5hbSA8c2hh
cmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Cj4+Pj4gU2VudDogMjAxOeW5tDnmnIgyMOaXpSAyMzo1
MQo+Pj4+IFRvOiBKdWxpZW4gR3JhbGwgPEp1bGllbi5HcmFsbEBhcm0uY29tPjsgSnVzdGluIEhl
IChBcm0gVGVjaG5vbG9neQo+PiBDaGluYSkKPj4+PiA8SnVzdGluLkhlQGFybS5jb20+OyBTYW50
aWFnbyBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Owo+Pj4+IG1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vlbnplcgo+Pj4+IDxzaW1vbi5rdWVuemVy
QG5lY2xhYi5ldT4KPj4+PiBDYzogS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2Fs
eS5YaW5AYXJtLmNvbT47IFdlaSBDaGVuCj4+IChBcm0KPj4+PiBUZWNobm9sb2d5IENoaW5hKSA8
V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0KPj4gVGVjaG5vbG9neQo+Pj4+IENo
aW5hKSA8SmlhbnlvbmcuV3VAYXJtLmNvbT47IG5kIDxuZEBhcm0uY29tPgo+Pj4+IFN1YmplY3Q6
IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5kIGFuZCByZWdpc3Rl
cgo+PiBJUlEKPj4+PiBmb3IgYXJjaF90aW1lcgo+Pj4+Cj4+Pj4KPj4+PiBPbiA5LzE5LzE5IDE6
NTcgUE0sIEp1bGllbiBHcmFsbCB3cm90ZToKPj4+Pj4gSGksCj4+Pj4+Cj4+Pj4+IE9uIDE3LzA5
LzIwMTkgMTI6NTUsIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4+Pj4+PiBIZWxsbywKPj4+Pj4+
Cj4+Pj4+PiBPbiA5LzE3LzE5IDEyOjQ0IFBNLCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4+Pj4+Pj4g
SGksCj4+Pj4+Pj4KPj4+Pj4+PiBPbiA5LzE3LzE5IDExOjA4IEFNLCBTaGFyYW4gU2FudGhhbmFt
IHdyb3RlOgo+Pj4+Pj4+PiBPbiA5LzE3LzE5IDExOjE3IEFNLCBKdWxpZW4gR3JhbGwgd3JvdGU6
Cj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4gT24gOS8xNy8xOSA5OjQ0IEFNLCBKdXN0aW4gSGUgKEFybSBU
ZWNobm9sb2d5IENoaW5hKSB3cm90ZToKPj4+Pj4+Pj4+PiBIaSBKdWxpZW4KPj4+Pj4+Pj4+IEhp
LAo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0KPj4+Pj4+
Pj4+Pj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPj4+Pj4+Pj4+
Pj4gU2VudDogMjAxOeW5tDnmnIgxN+aXpSAxNjozOQo+Pj4+Pj4+Pj4+PiBUbzogSnVzdGluIEhl
IChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsKPj4+PiBTYW50aWFn
bwo+Pj4+Pj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Owo+Pj4+Pj4+
Pj4+PiBtaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7Cj4+Pj4+Pj4+Pj4+IFNpbW9u
IEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PjsgU2hhcmFuCj4+IFNhbnRoYW5hbQo+
Pj4+Pj4+Pj4+PiA8U2hhcmFuLlNhbnRoYW5hbUBuZWNsYWIuZXU+Cj4+Pj4+Pj4+Pj4+IENjOiBL
YWx5IFhpbiAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxLYWx5LlhpbkBhcm0uY29tPjsgV2VpCj4+
Pj4gQ2hlbgo+Pj4+Pj4+Pj4+PiAoQXJtCj4+Pj4+Pj4+Pj4+IFRlY2hub2xvZ3kgQ2hpbmEpIDxX
ZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcgV3UgKEFybQo+Pj4+IFRlY2hub2xvZ3kKPj4+Pj4+
Pj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Cj4+Pj4+
Pj4+Pj4+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBG
aW5kIGFuZAo+Pj4+Pj4+Pj4+PiByZWdpc3RlciBJUlEKPj4+Pj4+Pj4+Pj4gZm9yIGFyY2hfdGlt
ZXIKPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gT24gOS8xNy8xOSA4OjAxIEFNLCBKdXN0aW4gSGUg
KEFybSBUZWNobm9sb2d5IENoaW5hKSB3cm90ZToKPj4+Pj4+Pj4+Pj4+IEhpIEp1bGllbiAod2Vs
Y29tZSBiYWNrIGZyb20gaG9saWRheSDwn5iKICkKPj4+Pj4+Pj4+Pj4gSGksCj4+Pj4+Pj4+Pj4+
Cj4+Pj4+Pj4+Pj4+IFRoYW5rcyA6KS4KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+PiAtLS0tLU9y
aWdpbmFsIE1lc3NhZ2UtLS0tLQo+Pj4+Pj4+Pj4+Pj4+IEZyb206IEp1bGllbiBHcmFsbCA8anVs
aWVuLmdyYWxsQGFybS5jb20+Cj4+Pj4+Pj4+Pj4+Pj4gU2VudDogMjAxOeW5tDnmnIgxN+aXpSAz
OjUzCj4+Pj4+Pj4+Pj4+Pj4gVG86IEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxK
dXN0aW4uSGVAYXJtLmNvbT47Cj4+Pj4+Pj4+Pj4+Pj4gU2FudGlhZ28KPj4+Pj4+Pj4+Pj4+PiBQ
YWdhbmkgPFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXU+Owo+Pj4+Pj4+Pj4+Pj4+IG1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsKPj4+Pj4+Pj4+Pj4+PiBTaW1vbiBLdWVuemVyIDxz
aW1vbi5rdWVuemVyQG5lY2xhYi5ldT47IFNoYXJhbgo+Pj4+IFNhbnRoYW5hbQo+Pj4+Pj4+Pj4+
Pj4+IDxTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4KPj4+Pj4+Pj4+Pj4+PiBDYzogS2FseSBY
aW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47Cj4+IFdlaQo+Pj4+
IENoZW4KPj4+Pj4+Pj4+Pj4gKEFybQo+Pj4+Pj4+Pj4+Pj4+IFRlY2hub2xvZ3kgQ2hpbmEpIDxX
ZWkuQ2hlbkBhcm0uY29tPjsgSmlhbnlvbmcgV3UKPj4gKEFybQo+Pj4+Pj4+Pj4+PiBUZWNobm9s
b2d5Cj4+Pj4+Pj4+Pj4+Pj4gQ2hpbmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPgo+Pj4+Pj4+Pj4+
Pj4+IFN1YmplY3Q6IFJlOiBbVU5JS1JBRlQgUEFUQ0h2MyA1LzddIHBsYXQvY29tbW9uOiBGaW5k
Cj4+IGFuZAo+Pj4+Pj4+Pj4+Pj4+IHJlZ2lzdGVyCj4+Pj4+Pj4+Pj4+IElSUQo+Pj4+Pj4+Pj4+
Pj4+IGZvciBhcmNoX3RpbWVyCj4+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+PiBPbiA5LzE2LzE5
IDg6NTIgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpCj4+IHdyb3RlOgo+Pj4+
Pj4+Pj4+Pj4+PiBIaSAgU2FudGlhZ28KPj4+Pj4+Pj4+Pj4+PiBIaSBhbGwsCj4+Pj4+Pj4+Pj4+
Pj4KPj4+Pj4+Pj4+Pj4+PiBAU2FudGlhZ28sIGl0IGlzIHF1aXRlIGRpZmZpY3VsdCB0byBmb2xs
b3cgdGhlIHRocmVhZCB3aGVuIHlvdQo+Pj4+Pj4+Pj4+Pj4+IHN0YXJ0Cj4+Pj4+Pj4+Pj4+Pj4g
eW91ciBhbnN3ZXIgd2l0aCAiQ09NTUVOVCIuIE1heSBJIGFzayB5b3UgdG8gY29uZmlndXJlCj4+
IHlvdXIKPj4+Pj4+Pj4+Pj4+PiBlLW1haWwKPj4+Pj4+Pj4+Pj4+PiBjbGllbnQgdG8gcXVvdGUg
cHJvcGVybHkgKGkuZSA+KT8KPj4+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+Pj4+IEZ1cnRoZXJtb3Jl
LCBkaXNjbGFpbWVyIGZvb3RlciBzaG91bGQgYmUgYXZvaWRlZCBvbiB0aGUKPj4+Pj4+Pj4+Pj4+
PiBtYWlsaW5nIGxpc3QuCj4+Pj4+Pj4+Pj4+Pj4gWW91IGFyZSBiYXNpY2FsbHkgc2F5aW5nIHRo
aXMgaXMgY29uZmlkZW50aWFsIGJ1dCB5b3Ugc2VuZCB0bwo+Pj4+Pj4+Pj4+Pj4+IGV2ZXJ5b25l
Cj4+Pj4+Pj4+Pj4+Pj4gKG1haWxpbmcgbGlzdCBhcmUgYXJjaGl2ZWQpLi4uCj4+Pj4+Pj4+Pj4+
PiBPSwo+Pj4+Pj4+Pj4+PiBJdCB3YXNuJ3QgZGlyZWN0ZWQgdG8geW91IDspLgo+Pj4+Pj4+Pj4+
Pgo+Pj4+Pj4+Pj4+Pj4+IFsuLi5dCj4+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+Pj4+IENPTU1F
TlQ6IFRoZXJlIGlzIG5vdGhpbmcgdGhhdCB3ZSB3b3VsZCBsaWtlIHRvIGRvIGhlcmU/Cj4+Pj4g
Tm90Cj4+Pj4+Pj4+Pj4+Pj4+PiBldmVuCj4+Pj4+Pj4+Pj4+Pj4+PiBkaXNhYmxlIHRoZSBJUlE/
IEFzIHRoZSB0aW1lciBpcyBub3Qgc3RvcHBlZCwgd2hlbiB0aGUKPj4+PiBjb3VudGVyCj4+Pj4+
Pj4+Pj4+Pj4gb3ZlcmZsb3dzCj4+Pj4+Pj4+Pj4+Pj4+PiB3ZSB3b3VsZCBnZXQgYSBuZXcgaW50
ZXJydXB0IG90aGVyd2lzZSAoYWx0aG91Z2ggdGhlCj4+Pj4+Pj4+Pj4+Pj4+PiBvdmVyZmxvdyBj
b3VsZAo+Pj4+Pj4+Pj4+Pj4+Pj4gaGFwcGVuIGluIGEgdmVyeSB2ZXJ5IGxvbmcgdGltZSwgcmln
aHQ/KQo+Pj4+Pj4+Pj4+Pj4+PiBJbiBwcmV2aW91cyB2ZXJzaW9uLCB3ZSBhZGRlZCBhIGdlbmVy
aWNfdGltZXJfbWFza19pcnEoKQo+PiBpbgo+Pj4+Pj4+Pj4+Pj4+PiBnZW5lcmljX3RpbWVyX2ly
cV9oYW5kbGVyLiBCdXQgYXMgcGVyIHRoZSBzdWdnZXN0aW9uIFsxXQo+PiBmcm9tCj4+Pj4+Pj4+
Pj4+Pj4+IEp1bGllbiwKPj4+Pj4+Pj4+Pj4gd2UKPj4+Pj4+Pj4+Pj4+Pj4gcmVtb3ZlZCBpdC4g
QmVzaWRlcywgd2UgcmVmZXJyZWQgdG8gdGhlIG1pbmlvcyBsb2dpYyBhdCBbMl0sCj4+Pj4+Pj4+
Pj4+Pj4+IGl0IG9ubHkgY2FsbGVkCj4+Pj4+Pj4+Pj4+Pj4+IHVubWFzayBhbmQgbWFzayBpbiBi
bG9ja19kb21haW4gKHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8KPj4+Pj4+Pj4+Pj4+Pj4gdW5pa3Jh
ZnQncwo+Pj4+Pj4+Pj4+Pj4+PiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaykKPj4+Pj4+Pj4+Pj4+
PiBMb29raW5nIGF0IG15IGNvbW1lbnRzIGFnYWluLCBJIGFtIG5vdCBzdXJlIHdoZXJlIEkKPj4+
PiBzdWdnZXN0ZWQgdG8KPj4+Pj4+Pj4+Pj4gcmVtb3ZlCj4+Pj4+Pj4+Pj4+Pj4gZ2VuZXJpY190
aW1lcl9tYXNrX2lycSgpLi4uIENhbiB5b3UgZXhwYW5kIGl0Pwo+Pj4+Pj4+Pj4+Pj4gT2theS4u
LiBzb3JyeSBmb3IgbXkgbWlzdGFrZXMuIEkgd2lsbCBhZGQKPj4+Pj4+Pj4+Pj4+IGdlbmVyaWNf
dGltZXJfbWFza19pcnEoKSBiYWNrLgo+Pj4+Pj4+Pj4+Pj4+IEZXSVcsIHRoZSB0d28gbWFpbiBj
b21tZW50cyBvbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMKPj4gd2VyZToKPj4+Pj4+Pj4+Pj4+PiAg
ICAgICAgIDEpIGlzYigpIHNob3VsZCBiZSBhZGRlZCBhZnRlciB1cGRhdGluZyB0aGUgc3lzdGVt
Cj4+Pj4+Pj4+Pj4+Pj4gcmVnaXN0ZXIgdG8KPj4+Pj4+Pj4+Pj4+PiBlbnN1cmUgdGhhdCB0aGUg
c3lzdGVtIHN5c3RlbSBpcyBzeW5jaHJvbml6ZWQKPj4+Pj4+Pj4+Pj4+PiAgICAgICAgIDIpIFRo
aXMgaXMgY29tbW9uIGNvZGUgYmV0d2VlbiBhcm0zMiBhbmQgYXJtNjQuIEJ1dAo+PiB0aGUKPj4+
Pj4+Pj4+Pj4+PiBzeXN0ZW0KPj4+Pj4+Pj4+Pj4+PiByZWdpc3RlciBuYW1lIGFyZSBhcm02NC4u
LiBBY2Nlc3NlcyBzaG91bGQgYmUgc3R1YiBpbgo+Pj4+Pj4+Pj4+Pj4+IGFyY2gtc3BlY2lmaWMK
Pj4+Pj4+Pj4+Pj4+PiBoZWFkZXIgc28gdGhlIGNvZGUgY2FuIHdvcmsgZm9yIGJvdGggYXJtMzIg
YW5kIGFybTY0Lgo+Pj4+Pj4+Pj4+Pj4gSSByZW5hbWVkIHBsYXQvY29tbW9uL2FybS90aW1lLmMg
dG8KPj4+PiBwbGF0L2NvbW1vbi9hcm0vdGltZV9hcm02NC5jCj4+Pj4+Pj4+Pj4+PiBTZWVtcyB0
aGF0IGlzIG5vdCBlbm91Z2ggZm9yIHlvdT8gIElmIG5vLCBJIGhhdmUgbm8gb2JqZWN0aW9ucwo+
Pj4+Pj4+Pj4+Pj4gdG8gbWFrZQo+Pj4+Pj4+Pj4+Pj4gYSBzdHViICBmb3IgYXJtMzIuCj4+Pj4+
Pj4+Pj4+IFdlbGwsIHRoZSBvbmx5IGJpdHMgYXJtNjQgc3BlY2lmaWNzIGluIHRoaXMgZmlsZSBh
cmUgdGhlIGFjY2Vzcwo+Pj4+Pj4+Pj4+PiB0byB0aGUKPj4+Pj4+Pj4+Pj4gc3lzdGVtIHJlZ2lz
dGVycy4gU28gcmVuYW1pbmcgdG8gdGltZV9hcm02NC5jIHNlZW1zIGEgYml0Cj4+Pj4+Pj4+Pj4+
IG92ZXJraWxsLi4uCj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+IElmIHRoZXJlIGFyZSBwbGFuIHRv
IG1ha2UgYXJtMzIgYSBjb3JyZWN0IHBvcnQgb24gVW5pa3JhZnQsIHRoZW4KPj4+Pj4+Pj4+Pj4g
c3BsaXR0aW5nIHRoZSBjb2RlIHdvdWxkIGJlIHRoZSBiZXN0LiBJZiB0aGVyZSBhcmUgbm8gcGxh
biB0bwo+Pj4+Pj4+Pj4+PiBnZXQgYXJtMzIsCj4+Pj4+Pj4+Pj4+IHRoZW4gbWF5YmUgeW91IHNo
b3VsZCB0aGluayBvZiBraWxsaW5nIGl0IGNvbXBsZXRlbHkuCj4+Pj4+Pj4+Pj4gQXJtMzIgeGVu
IHBsYXQgaXMgaW5pdGlhbGx5IHN1cHBvcnRlZCBidXQgbm8gb25lICBoYXMgdG91Y2hlZAo+Pj4+
Pj4+Pj4+IHRoYXQgZm9yIGEgbG9uZwo+Pj4+Pj4+Pj4+IHRpbWUuIEN1cnJlbnRseSBsZXTigJlz
IGZvY3VzIG9uIGFybTY0IGt2bSBwbGF0IG9ubHkuIElmIHRoZQo+Pj4+Pj4+Pj4+IHJlcXVpcmVt
ZW50cyBjaGFuZ2VzLAo+Pj4+Pj4+Pj4+IHdlIGNhbiBzdXBwb3J0IGFybTMyIGFkZGl0aW9uYWxs
eS4gV2hhdCBkbyB5b3UgdGhpbmsgYWJvdXQgaXQ/Cj4+Pj4+Pj4+PiBJIGFtIG5vdCBhc2tpbmcg
dG8gaW1wbGVtZW50IGFybTMyLCBJIGFtIG9ubHkgc3VnZ2VzdGluZyB0byB0cnkKPj4gdG8KPj4+
Pj4+Pj4+IHNwbGl0IHRoZSBjb2RlIHJhdGhlciB0aGFuIHRyeWluZyB0byBtaXggY29tbW9uIGNv
ZGUgdnMgYXJjaAo+Pj4+Pj4+Pj4gc3BlY2lmaWMgY29kZSBpbiBwbGF0L2NvbW1vbi9hcm0uIFRo
YXQgZGlyZWN0b3J5IGluIHBhcnRpY3VsYXIgaXMKPj4+Pj4+Pj4+IGxvb2tpbmcgbWVzc2llciBh
bmQgbWVzc2llciBhcyBuZXcgc2VyaWVzIGFyZSBwb3N0ZWQuCj4+Pj4+Pj4+IEkgYWdyZWUgd2l0
aCBKdWxpZW4gaXQgaXMgYmV0dGVyIHRvIHNwbGl0IHRoZSBhcm0zMiBjb2RlIGZyb20gdGhlCj4+
Pj4+Pj4+IGFybTY0IGNvZGUuIE15IHN1Z2dlc3Rpb24gd291bGQgYmUKPj4+Pj4+Pj4KPj4+Pj4+
Pj4gcGxhdC9jb21tb24vYXJtIGZvciAzMi1iaXQgY29kZQo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBwbGF0
L2NvbW1vbi9hcm02NCBmb3IgdGhlIDY0LWJpdC4KPj4+Pj4+PiBXZWxsIHlvdSBjYW4gc2hhcmUg
YSBsb3Qgb2YgY29kZSBiZXR3ZWVuIDMyLWJpdCBhbmQgNjQtYml0LiBJZiB3ZQo+Pj4+Pj4+IHRh
a2UgdGhlIGV4YW1wbGUgb2YgdGhlIGFyY2ggdGltZXIsIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMg
dGhlIHdheQo+Pj4+Pj4+IHRvIGFjY2VzcyB0aGUgcmVnaXN0ZXJzIChpLmUuIHN5c3RlbSByZWdp
c3RlcnMgdnMgY28tcHJvY2Vzc29yCj4+Pj4+Pj4gcmVnaXN0ZXJzKS4KPj4+Pj4+IFNpbmNlIGl0
IGlzIHByaW1hcmlseSBhYm91dCB0aGUgY28gcHJvY2Vzc29yIGFuZCBzeXN0ZW0gcmVnaXN0ZXIu
IEhvdwo+Pj4+Pj4gYWJvdXQgcHVzaGluZyB0aGUgZnVuY3Rpb25hbGl0eSBpbnRvIHRoZSByZXNw
ZWN0aXZlIGhlYWRlci4KPj4+Pj4gRm9yIHRoZSB0aW1lciB0aGlzIGlzIG1vc3RseSBzeXN0ZW0g
cmVnaXN0ZXIsIGJ1dCB0aGVyZSBhcmUvd2lsbCBiZQo+Pj4+PiBzcGVjaWZpYyBhcm02NC9hcm0z
MiBjb2RlIChzdWNoIGFzIGFzc2VtYmx5IGZpbGUpLiBTbyBJIHdvdWxkCj4+Pj4+IHJlY29tbWVu
ZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkgdHJlZSB0aGF0IGFsbG93cyBzdWNoIHNwbGl0Lgo+Pj4+
IEkgYWdyZWUuCj4+Pj4KPj4+Pj4+IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaAo+Pj4+
Pj4KPj4+Pj4+ICAgICAgICBUaGUgaGVhZGVyIGluY2x1ZGVzIGFyY2ggc3BlY2lmaWMgaGVhZGVy
IGZpbGVzLgo+Pj4+Pj4KPj4+Pj4+IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUu
aAo+Pj4+Pj4KPj4+Pj4+ICAgICAgIFByb3ZpZGVzIGEgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIGlt
cGxlbWVudGF0aW9uIGZvciByZWFkaW5nCj4+Pj4+PiBzeXN0ZW0gcmVnaXN0ZXJzIHdoaWxlIHBy
b3ZpZGluZyBhIG1hY3JvIGRlZmluaXRpb24gZm9yIHJlYWRpbmcKPj4+Pj4+IHJlZ2lzdGVyIGxp
a2U6Cj4+Pj4+Pgo+Pj4+Pj4gICAgICNkZWZpbmUgIGVsMF9jbnR2X2N0bF9nZXQgIFNZU1JFR19S
RUFEMzIoY250dl9jdGxfZWwwKQo+Pj4+Pj4KPj4+Pj4+ICAgICAjZGVmaW5lICBlbDBfY250dl9j
dGxfc2V0KHZhbCkgIChjbnR2X2N0bF9lbDAsIHZhbCkKPj4+Pj4gVGhlcmUgYXJlIGRvemVucyBv
ZiBzeXN0ZW0gcmVnaXN0ZXJzLCBzbyBJIGFtIG5vdCBzdXJlIHlvdSB3b3VsZCB3YW50Cj4+Pj4+
IHRvIGNyZWF0ZSBoZWxwZXIgZm9yIGV2ZXJ5IG9mIHRoZW0uIEl0IHdvdWxkIGJlIGJlc3QgaWYg
eW91IGZpbmQgYSB3YXkKPj4+Pj4gdG8gYWJzdHJhY3QgdGhpcy4KPj4+PiBJIGFncmVlIHdlIGNv
dWxkIGFic3RyYWN0IGl0IG1vcmUgdXNpbmcgdGhlIEFBcmNoNjQgc3lzdGVtIHJlZ2lzdGVyCj4+
IG5hbWUuCj4+Pj4gI2RlZmluZSBlbDBfZ2V0KHJlZykgU1lTUkVHX1JFQUQoICMjIHJlZyAjIyAp
Cj4+PiBCdXQgdGhlIHByZWZpeCAiZWwwXyIgZ2VuZXJhbGx5IG1lYW5zIGl0IGlzIGEgQWFyY2g2
NCByZWdpc3Rlci4KPj4+IGUuZy4gQ05UVl9DVExfRUwwIGlzIHRoZSBhYXJjaDY0IG5hbWUuIENO
VFZfQ1RMIGlzIHRoZSBhYXJjaDMyIG5hbWUuCj4+IFdlbGwsIGlmIHlvdSB3YW50IHRvIGdldCBj
b21tb24gY29kZSB5b3Ugd2lsbCBoYXZlIHRvIGZpbmQgYSBjb21tb24KPj4gbmFtaW5nLiBZb3UK
Pj4gaGF2ZSBhIGZldyBjaG9pY2VzIGhlcmU6Cj4+ICAgICAgMSkgVXNlIHRoZSBBQXJjaDY0IG5h
bWVzIGFuZCBhbGlhcyB0aGUgQUFyY2gzMiBuYW1lcy4gVGhpcyBpcyB3aGF0IHdlCj4+IGRvIGZv
cgo+PiBYZW4uCj4+ICAgICAgMikgVXNlIHRoZSBBQXJjaDMyIG5hbWVzIGFuZCBhbGlhcyB0aGUg
QUFyY2g2NCBuYW1lcy4KPj4gICAgICAzKSBQcm92aWRpbmcgaGVscGVyIGZvciBldmVyeSBzaW5n
bGUgcmVnaXN0ZXJzLgo+Pgo+PiBUaGUgQUFyY2g2NCBuYW1lcyBoYXZlIHRoZSBhZHZhbnRhZ2Ug
dG8gdGVsbCB5b3Ugd2hhdCBpcyB0aGUgbG93ZXN0IGxldmVsCj4+IHRoZXkKPj4gY2FuIGJlIGFj
Y2Vzc2VkIGZybwo+Pgo+PiBSZWdhcmRpbmcgU2hhcmFtJ3Mgc3VnZ2VzdCwgZWwwX2dldCgpIGlt
cGxpZXMgeW91IGNhbiBvbmx5IHVzZSB3aXRoIHN5c3RlbQo+PiByZWdpc3RlciBhY2Nlc3NpYmxl
IGF0IEVMMCAoaS5lLiB1c2Vyc3BhY2UpLiBVbmlrcmFmdCB3aWxsIGFsc28gbmVlZCB0byBhY2Nl
c3MKPj4gc3lzdGVtIHJlZ2lzdGVyIG9ubHkgYWNjZXNzaWJsZSBhdCBFTDEuCj4gT2theSwgZ290
IGl0Cj4KPj4gU28geW91IG1heSB3YW50IHRvIHRoaW5rIGZvciBhIGRpZmZlcmVudCBuYW1lLiBN
YXliZSB7cmVhZCwKPj4gd3JpdGV9X3N5c3JlZygpPyBJCj4+IGhhdmVuJ3Qgc3VnZ2VzdGVkIGdl
dCBiZWNhdXNlIHRoZSBjb3VudGVycGFydCAncHV0JyBkb2VzIG5vdCBzZWVtIHN1aXRhYmxlCj4+
IGhlcmUuCj4gSSB3b3VsZCBwcmVmZXIgdG8gY2hvb3NlIHdoYXQgZnJlZWJzZCBkaWQ6Cj4gI2lm
ZGVmIF9fYXJtX18KPiAjZGVmaW5lCWdldF9lbDAoeCkJY3AxNV8jIyB4ICMjX2dldCgpCj4gI2Rl
ZmluZQlnZXRfZWwxKHgpCWNwMTVfIyMgeCAjI19nZXQoKQo+ICNkZWZpbmUJc2V0X2VsMCh4LCB2
YWwpCWNwMTVfIyMgeCAjI19zZXQodmFsKQo+ICNkZWZpbmUJc2V0X2VsMSh4LCB2YWwpCWNwMTVf
IyMgeCAjI19zZXQodmFsKQo+ICNlbHNlIC8qIF9fYWFyY2g2NF9fICovCj4gI2RlZmluZQlnZXRf
ZWwwKHgpCVJFQURfU1BFQ0lBTFJFRyh4ICMjX2VsMCkKPiAjZGVmaW5lCWdldF9lbDEoeCkJUkVB
RF9TUEVDSUFMUkVHKHggIyNfZWwxKQo+ICNkZWZpbmUJc2V0X2VsMCh4LCB2YWwpCVdSSVRFX1NQ
RUNJQUxSRUcoeCAjI19lbDAsIHZhbCkKPiAjZGVmaW5lCXNldF9lbDEoeCwgdmFsKQlXUklURV9T
UEVDSUFMUkVHKHggIyNfZWwxLCB2YWwpCj4gI2VuZGlmCj4KPiBXaGF0IGRvIHlvdSB0aGluaz8K
U2VlbXMgZmluZS4KPgo+IC0tCj4gQ2hlZXJzLAo+IEp1c3RpbiAoSmlhIEhlKQo+Cj4KCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Tue Sep 24 11:10:12 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Tue, 24 Sep 2019 11:10:12 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iCihw-0004TC-BV; Tue, 24 Sep 2019 11:10:12 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=d6A1=XT=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iCihv-0004So-O0
 for minios-devel@lists.xenproject.org; Tue, 24 Sep 2019 11:10:11 +0000
X-Inumbo-ID: 2fc85f1e-deb1-11e9-994c-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 2fc85f1e-deb1-11e9-994c-bc764e2007e4;
 Tue, 24 Sep 2019 09:53:40 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C0955F201A;
 Tue, 24 Sep 2019 11:53:39 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 3pbl5Ej2ML6M; Tue, 24 Sep 2019 11:53:39 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 80419F2018;
 Tue, 24 Sep 2019 11:53:25 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Tue, 24 Sep
 2019 11:53:25 +0200
To: Julien Grall <julien.grall@arm.com>, "Justin He (Arm Technology China)"
 <Justin.He@arm.com>, Santiago Pagani <Santiago.Pagani@neclab.eu>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190730142748.62490-1-justin.he@arm.com>
 <20190730142748.62490-6-justin.he@arm.com>
 <BA7999F2-C008-437A-ACA5-CB5A8AC31328@neclab.eu>
 <DB7PR08MB308277677C7A1AE1DCAFBDC1F78C0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <4ab141f3-d818-1db6-402a-e312d19036b6@arm.com>
 <DB7PR08MB3082D875CC92A09280EDC4E4F78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <0f1cfd7f-62d3-6321-8776-7ace5ea5fe4c@arm.com>
 <DB7PR08MB30821DAE7B9C5EC2463CAB3AF78F0@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <944836fe-61ca-e84e-5338-e5b0761a6e2e@arm.com>
 <4398ac91-ddc4-6033-7ee8-6f3988b3b82c@neclab.eu>
 <3e5e0883-da72-70fc-0316-1a1bed89b742@arm.com>
 <9289c966-ab58-4de5-ab04-c0b43b4ed160@neclab.eu>
 <e50ef619-c9cb-7c8c-7e58-be9b36c2c8a9@arm.com>
 <5660cf8d-f057-9a6e-8bce-1ad85d8f55d5@neclab.eu>
 <DB7PR08MB30827A87C6B63F0624D8D5A4F7840@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <9a309b9a-8760-15c2-38c8-7206e7feb020@arm.com>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <5b155281-fa63-b3a9-3ec1-154a3757e9d2@neclab.eu>
Date: Tue, 24 Sep 2019 11:53:24 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <9a309b9a-8760-15c2-38c8-7206e7feb020@arm.com>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCHv3 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>, nd <nd@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>, "Wei Chen \(Arm
 Technology China\)" <Wei.Chen@arm.com>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8sCgpPbiA5LzI0LzE5IDExOjA4IEFNLCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4gSGksCj4K
PiBPbiAyNC8wOS8yMDE5IDA4OjQ0LCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3
cm90ZToKPj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+PiBGcm9tOiBTaGFyYW4gU2Fu
dGhhbmFtIDxzaGFyYW4uc2FudGhhbmFtQG5lY2xhYi5ldT4KPj4+IFNlbnQ6IDIwMTnlubQ55pyI
MjDml6UgMjM6NTEKPj4+IFRvOiBKdWxpZW4gR3JhbGwgPEp1bGllbi5HcmFsbEBhcm0uY29tPjsg
SnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSAKPj4+IENoaW5hKQo+Pj4gPEp1c3Rpbi5IZUBhcm0u
Y29tPjsgU2FudGlhZ28gUGFnYW5pIDxTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1PjsKPj4+IG1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vlbnplcgo+Pj4gPHNpbW9u
Lmt1ZW56ZXJAbmVjbGFiLmV1Pgo+Pj4gQ2M6IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGlu
YSkgPEthbHkuWGluQGFybS5jb20+OyBXZWkgQ2hlbiAoQXJtCj4+PiBUZWNobm9sb2d5IENoaW5h
KSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChBcm0gVGVjaG5vbG9neQo+Pj4gQ2hp
bmEpIDxKaWFueW9uZy5XdUBhcm0uY29tPjsgbmQgPG5kQGFybS5jb20+Cj4+PiBTdWJqZWN0OiBS
ZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZCBhbmQgcmVnaXN0ZXIg
SVJRCj4+PiBmb3IgYXJjaF90aW1lcgo+Pj4KPj4+Cj4+PiBPbiA5LzE5LzE5IDE6NTcgUE0sIEp1
bGllbiBHcmFsbCB3cm90ZToKPj4+PiBIaSwKPj4+Pgo+Pj4+IE9uIDE3LzA5LzIwMTkgMTI6NTUs
IFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4+Pj4+IEhlbGxvLAo+Pj4+Pgo+Pj4+PiBPbiA5LzE3
LzE5IDEyOjQ0IFBNLCBKdWxpZW4gR3JhbGwgd3JvdGU6Cj4+Pj4+PiBIaSwKPj4+Pj4+Cj4+Pj4+
PiBPbiA5LzE3LzE5IDExOjA4IEFNLCBTaGFyYW4gU2FudGhhbmFtIHdyb3RlOgo+Pj4+Pj4+Cj4+
Pj4+Pj4gT24gOS8xNy8xOSAxMToxNyBBTSwgSnVsaWVuIEdyYWxsIHdyb3RlOgo+Pj4+Pj4+Pgo+
Pj4+Pj4+Pgo+Pj4+Pj4+PiBPbiA5LzE3LzE5IDk6NDQgQU0sIEp1c3RpbiBIZSAoQXJtIFRlY2hu
b2xvZ3kgQ2hpbmEpIHdyb3RlOgo+Pj4+Pj4+Pj4gSGkgSnVsaWVuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+
IEhpLAo+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCj4+Pj4+
Pj4+Pj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPj4+Pj4+Pj4+
PiBTZW50OiAyMDE55bm0OeaciDE35pelIDE2OjM5Cj4+Pj4+Pj4+Pj4gVG86IEp1c3RpbiBIZSAo
QXJtIFRlY2hub2xvZ3kgQ2hpbmEpIDxKdXN0aW4uSGVAYXJtLmNvbT47Cj4+PiBTYW50aWFnbwo+
Pj4+Pj4+Pj4+IFBhZ2FuaSA8U2FudGlhZ28uUGFnYW5pQG5lY2xhYi5ldT47Cj4+Pj4+Pj4+Pj4g
bWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOwo+Pj4+Pj4+Pj4+IFNpbW9uIEt1ZW56
ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PjsgU2hhcmFuIFNhbnRoYW5hbQo+Pj4+Pj4+Pj4+
IDxTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldT4KPj4+Pj4+Pj4+PiBDYzogS2FseSBYaW4gKEFy
bSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47IFdlaQo+Pj4gQ2hlbgo+Pj4+
Pj4+Pj4+IChBcm0KPj4+Pj4+Pj4+PiBUZWNobm9sb2d5IENoaW5hKSA8V2VpLkNoZW5AYXJtLmNv
bT47IEppYW55b25nIFd1IChBcm0KPj4+IFRlY2hub2xvZ3kKPj4+Pj4+Pj4+PiBDaGluYSkgPEpp
YW55b25nLld1QGFybS5jb20+OyBuZCA8bmRAYXJtLmNvbT4KPj4+Pj4+Pj4+PiBTdWJqZWN0OiBS
ZTogW1VOSUtSQUZUIFBBVENIdjMgNS83XSBwbGF0L2NvbW1vbjogRmluZCBhbmQKPj4+Pj4+Pj4+
PiByZWdpc3RlciBJUlEKPj4+Pj4+Pj4+PiBmb3IgYXJjaF90aW1lcgo+Pj4+Pj4+Pj4+Cj4+Pj4+
Pj4+Pj4gT24gOS8xNy8xOSA4OjAxIEFNLCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5h
KSB3cm90ZToKPj4+Pj4+Pj4+Pj4gSGkgSnVsaWVuICh3ZWxjb21lIGJhY2sgZnJvbSBob2xpZGF5
IPCfmIogKQo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gSGksCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+PiBU
aGFua3MgOikuCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tCj4+Pj4+Pj4+Pj4+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29t
Pgo+Pj4+Pj4+Pj4+Pj4gU2VudDogMjAxOeW5tDnmnIgxN+aXpSAzOjUzCj4+Pj4+Pj4+Pj4+PiBU
bzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsK
Pj4+Pj4+Pj4+Pj4+IFNhbnRpYWdvCj4+Pj4+Pj4+Pj4+PiBQYWdhbmkgPFNhbnRpYWdvLlBhZ2Fu
aUBuZWNsYWIuZXU+Owo+Pj4+Pj4+Pj4+Pj4gbWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnOwo+Pj4+Pj4+Pj4+Pj4gU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+
OyBTaGFyYW4KPj4+IFNhbnRoYW5hbQo+Pj4+Pj4+Pj4+Pj4gPFNoYXJhbi5TYW50aGFuYW1AbmVj
bGFiLmV1Pgo+Pj4+Pj4+Pj4+Pj4gQ2M6IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkg
PEthbHkuWGluQGFybS5jb20+OyBXZWkKPj4+IENoZW4KPj4+Pj4+Pj4+PiAoQXJtCj4+Pj4+Pj4+
Pj4+PiBUZWNobm9sb2d5IENoaW5hKSA8V2VpLkNoZW5AYXJtLmNvbT47IEppYW55b25nIFd1IChB
cm0KPj4+Pj4+Pj4+PiBUZWNobm9sb2d5Cj4+Pj4+Pj4+Pj4+PiBDaGluYSkgPEppYW55b25nLld1
QGFybS5jb20+Cj4+Pj4+Pj4+Pj4+PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIdjMgNS83
XSBwbGF0L2NvbW1vbjogRmluZCBhbmQKPj4+Pj4+Pj4+Pj4+IHJlZ2lzdGVyCj4+Pj4+Pj4+Pj4g
SVJRCj4+Pj4+Pj4+Pj4+PiBmb3IgYXJjaF90aW1lcgo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+
IE9uIDkvMTYvMTkgODo1MiBBTSwgSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgd3Jv
dGU6Cj4+Pj4+Pj4+Pj4+Pj4gSGnCoCBTYW50aWFnbwo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+
IEhpIGFsbCwKPj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+PiBAU2FudGlhZ28sIGl0IGlzIHF1aXRl
IGRpZmZpY3VsdCB0byBmb2xsb3cgdGhlIHRocmVhZCB3aGVuIHlvdQo+Pj4+Pj4+Pj4+Pj4gc3Rh
cnQKPj4+Pj4+Pj4+Pj4+IHlvdXIgYW5zd2VyIHdpdGggIkNPTU1FTlQiLiBNYXkgSSBhc2sgeW91
IHRvIGNvbmZpZ3VyZSB5b3VyCj4+Pj4+Pj4+Pj4+PiBlLW1haWwKPj4+Pj4+Pj4+Pj4+IGNsaWVu
dCB0byBxdW90ZSBwcm9wZXJseSAoaS5lID4pPwo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IEZ1
cnRoZXJtb3JlLCBkaXNjbGFpbWVyIGZvb3RlciBzaG91bGQgYmUgYXZvaWRlZCBvbiB0aGUKPj4+
Pj4+Pj4+Pj4+IG1haWxpbmcgbGlzdC4KPj4+Pj4+Pj4+Pj4+IFlvdSBhcmUgYmFzaWNhbGx5IHNh
eWluZyB0aGlzIGlzIGNvbmZpZGVudGlhbCBidXQgeW91IHNlbmQgdG8KPj4+Pj4+Pj4+Pj4+IGV2
ZXJ5b25lCj4+Pj4+Pj4+Pj4+PiAobWFpbGluZyBsaXN0IGFyZSBhcmNoaXZlZCkuLi4KPj4+Pj4+
Pj4+Pj4gT0sKPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IEl0IHdhc24ndCBkaXJlY3RlZCB0byB5b3Ug
OykuCj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+PiBbLi4uXQo+Pj4+Pj4+Pj4+
Pj4KPj4+Pj4+Pj4+Pj4+Pj4gQ09NTUVOVDogVGhlcmUgaXMgbm90aGluZyB0aGF0IHdlIHdvdWxk
IGxpa2UgdG8gZG8gaGVyZT8KPj4+IE5vdAo+Pj4+Pj4+Pj4+Pj4+PiBldmVuCj4+Pj4+Pj4+Pj4+
Pj4+IGRpc2FibGUgdGhlIElSUT8gQXMgdGhlIHRpbWVyIGlzIG5vdCBzdG9wcGVkLCB3aGVuIHRo
ZQo+Pj4gY291bnRlcgo+Pj4+Pj4+Pj4+Pj4gb3ZlcmZsb3dzCj4+Pj4+Pj4+Pj4+Pj4+IHdlIHdv
dWxkIGdldCBhIG5ldyBpbnRlcnJ1cHQgb3RoZXJ3aXNlIChhbHRob3VnaCB0aGUKPj4+Pj4+Pj4+
Pj4+Pj4gb3ZlcmZsb3cgY291bGQKPj4+Pj4+Pj4+Pj4+Pj4gaGFwcGVuIGluIGEgdmVyeSB2ZXJ5
IGxvbmcgdGltZSwgcmlnaHQ/KQo+Pj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+Pj4gSW4gcHJldmlv
dXMgdmVyc2lvbiwgd2UgYWRkZWQgYSBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkgaW4KPj4+Pj4+
Pj4+Pj4+PiBnZW5lcmljX3RpbWVyX2lycV9oYW5kbGVyLiBCdXQgYXMgcGVyIHRoZSBzdWdnZXN0
aW9uIFsxXSBmcm9tCj4+Pj4+Pj4+Pj4+Pj4gSnVsaWVuLAo+Pj4+Pj4+Pj4+IHdlCj4+Pj4+Pj4+
Pj4+Pj4gcmVtb3ZlZCBpdC4gQmVzaWRlcywgd2UgcmVmZXJyZWQgdG8gdGhlIG1pbmlvcyBsb2dp
YyBhdCBbMl0sCj4+Pj4+Pj4+Pj4+Pj4gaXQgb25seSBjYWxsZWQKPj4+Pj4+Pj4+Pj4+PiB1bm1h
c2sgYW5kIG1hc2sgaW4gYmxvY2tfZG9tYWluICh3aGljaCBpcyBlcXVpdmFsZW50IHRvCj4+Pj4+
Pj4+Pj4+Pj4gdW5pa3JhZnQncwo+Pj4+Pj4+Pj4+Pj4+IGdlbmVyaWNfdGltZXJfY3B1X2Jsb2Nr
KQo+Pj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4+IExvb2tpbmcgYXQgbXkgY29tbWVudHMgYWdhaW4s
IEkgYW0gbm90IHN1cmUgd2hlcmUgSQo+Pj4gc3VnZ2VzdGVkIHRvCj4+Pj4+Pj4+Pj4gcmVtb3Zl
Cj4+Pj4+Pj4+Pj4+PiBnZW5lcmljX3RpbWVyX21hc2tfaXJxKCkuLi4gQ2FuIHlvdSBleHBhbmQg
aXQ/Cj4+Pj4+Pj4+Pj4+IE9rYXkuLi4gc29ycnkgZm9yIG15IG1pc3Rha2VzLiBJIHdpbGwgYWRk
Cj4+Pj4+Pj4+Pj4+IGdlbmVyaWNfdGltZXJfbWFza19pcnEoKSBiYWNrLgo+Pj4+Pj4+Pj4+Pj4K
Pj4+Pj4+Pj4+Pj4+IEZXSVcsIHRoZSB0d28gbWFpbiBjb21tZW50cyBvbiB0aGUgcHJldmlvdXMg
dmVyc2lvbnMgd2VyZToKPj4+Pj4+Pj4+Pj4+IMKgwqDCoMKgwqDCoCAxKSBpc2IoKSBzaG91bGQg
YmUgYWRkZWQgYWZ0ZXIgdXBkYXRpbmcgdGhlIHN5c3RlbQo+Pj4+Pj4+Pj4+Pj4gcmVnaXN0ZXIg
dG8KPj4+Pj4+Pj4+Pj4+IGVuc3VyZSB0aGF0IHRoZSBzeXN0ZW0gc3lzdGVtIGlzIHN5bmNocm9u
aXplZAo+Pj4+Pj4+Pj4+Pj4gwqDCoMKgwqDCoMKgIDIpIFRoaXMgaXMgY29tbW9uIGNvZGUgYmV0
d2VlbiBhcm0zMiBhbmQgYXJtNjQuIEJ1dCB0aGUKPj4+Pj4+Pj4+Pj4+IHN5c3RlbQo+Pj4+Pj4+
Pj4+Pj4gcmVnaXN0ZXIgbmFtZSBhcmUgYXJtNjQuLi4gQWNjZXNzZXMgc2hvdWxkIGJlIHN0dWIg
aW4KPj4+Pj4+Pj4+Pj4+IGFyY2gtc3BlY2lmaWMKPj4+Pj4+Pj4+Pj4+IGhlYWRlciBzbyB0aGUg
Y29kZSBjYW4gd29yayBmb3IgYm90aCBhcm0zMiBhbmQgYXJtNjQuCj4+Pj4+Pj4+Pj4+IEkgcmVu
YW1lZCBwbGF0L2NvbW1vbi9hcm0vdGltZS5jIHRvCj4+PiBwbGF0L2NvbW1vbi9hcm0vdGltZV9h
cm02NC5jCj4+Pj4+Pj4+Pj4+IFNlZW1zIHRoYXQgaXMgbm90IGVub3VnaCBmb3IgeW91P8KgIElm
IG5vLCBJIGhhdmUgbm8gb2JqZWN0aW9ucwo+Pj4+Pj4+Pj4+PiB0byBtYWtlCj4+Pj4+Pj4+Pj4+
IGEgc3R1YsKgIGZvciBhcm0zMi4KPj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+IFdlbGwsIHRoZSBvbmx5
IGJpdHMgYXJtNjQgc3BlY2lmaWNzIGluIHRoaXMgZmlsZSBhcmUgdGhlIGFjY2Vzcwo+Pj4+Pj4+
Pj4+IHRvIHRoZQo+Pj4+Pj4+Pj4+IHN5c3RlbSByZWdpc3RlcnMuIFNvIHJlbmFtaW5nIHRvIHRp
bWVfYXJtNjQuYyBzZWVtcyBhIGJpdAo+Pj4+Pj4+Pj4+IG92ZXJraWxsLi4uCj4+Pj4+Pj4+Pj4K
Pj4+Pj4+Pj4+PiBJZiB0aGVyZSBhcmUgcGxhbiB0byBtYWtlIGFybTMyIGEgY29ycmVjdCBwb3J0
IG9uIFVuaWtyYWZ0LCB0aGVuCj4+Pj4+Pj4+Pj4gc3BsaXR0aW5nIHRoZSBjb2RlIHdvdWxkIGJl
IHRoZSBiZXN0LiBJZiB0aGVyZSBhcmUgbm8gcGxhbiB0bwo+Pj4+Pj4+Pj4+IGdldCBhcm0zMiwK
Pj4+Pj4+Pj4+PiB0aGVuIG1heWJlIHlvdSBzaG91bGQgdGhpbmsgb2Yga2lsbGluZyBpdCBjb21w
bGV0ZWx5Lgo+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+IEFybTMyIHhlbiBwbGF0IGlzIGluaXRpYWxseSBz
dXBwb3J0ZWQgYnV0IG5vIG9uZSBoYXMgdG91Y2hlZAo+Pj4+Pj4+Pj4gdGhhdCBmb3IgYSBsb25n
Cj4+Pj4+Pj4+PiB0aW1lLiBDdXJyZW50bHkgbGV04oCZcyBmb2N1cyBvbiBhcm02NCBrdm0gcGxh
dCBvbmx5LiBJZiB0aGUKPj4+Pj4+Pj4+IHJlcXVpcmVtZW50cyBjaGFuZ2VzLAo+Pj4+Pj4+Pj4g
d2UgY2FuIHN1cHBvcnQgYXJtMzIgYWRkaXRpb25hbGx5LiBXaGF0IGRvIHlvdSB0aGluayBhYm91
dCBpdD8KPj4+Pj4+Pj4KPj4+Pj4+Pj4gSSBhbSBub3QgYXNraW5nIHRvIGltcGxlbWVudCBhcm0z
MiwgSSBhbSBvbmx5IHN1Z2dlc3RpbmcgdG8gdHJ5IHRvCj4+Pj4+Pj4+IHNwbGl0IHRoZSBjb2Rl
IHJhdGhlciB0aGFuIHRyeWluZyB0byBtaXggY29tbW9uIGNvZGUgdnMgYXJjaAo+Pj4+Pj4+PiBz
cGVjaWZpYyBjb2RlIGluIHBsYXQvY29tbW9uL2FybS4gVGhhdCBkaXJlY3RvcnkgaW4gcGFydGlj
dWxhciBpcwo+Pj4+Pj4+PiBsb29raW5nIG1lc3NpZXIgYW5kIG1lc3NpZXIgYXMgbmV3IHNlcmll
cyBhcmUgcG9zdGVkLgo+Pj4+Pj4+Cj4+Pj4+Pj4gSSBhZ3JlZSB3aXRoIEp1bGllbiBpdCBpcyBi
ZXR0ZXIgdG8gc3BsaXQgdGhlIGFybTMyIGNvZGUgZnJvbSB0aGUKPj4+Pj4+PiBhcm02NCBjb2Rl
LiBNeSBzdWdnZXN0aW9uIHdvdWxkIGJlCj4+Pj4+Pj4KPj4+Pj4+PiBwbGF0L2NvbW1vbi9hcm0g
Zm9yIDMyLWJpdCBjb2RlCj4+Pj4+Pj4KPj4+Pj4+PiBwbGF0L2NvbW1vbi9hcm02NCBmb3IgdGhl
IDY0LWJpdC4KPj4+Pj4+Cj4+Pj4+PiBXZWxsIHlvdSBjYW4gc2hhcmUgYSBsb3Qgb2YgY29kZSBi
ZXR3ZWVuIDMyLWJpdCBhbmQgNjQtYml0LiBJZiB3ZQo+Pj4+Pj4gdGFrZSB0aGUgZXhhbXBsZSBv
ZiB0aGUgYXJjaCB0aW1lciwgdGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGUgd2F5Cj4+Pj4+PiB0
byBhY2Nlc3MgdGhlIHJlZ2lzdGVycyAoaS5lLiBzeXN0ZW0gcmVnaXN0ZXJzIHZzIGNvLXByb2Nl
c3Nvcgo+Pj4+Pj4gcmVnaXN0ZXJzKS4KPj4+Pj4KPj4+Pj4gU2luY2UgaXQgaXMgcHJpbWFyaWx5
IGFib3V0IHRoZSBjbyBwcm9jZXNzb3IgYW5kIHN5c3RlbSByZWdpc3Rlci4gSG93Cj4+Pj4+IGFi
b3V0IHB1c2hpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgaW50byB0aGUgcmVzcGVjdGl2ZSBoZWFkZXIu
Cj4+Pj4KPj4+PiBGb3IgdGhlIHRpbWVyIHRoaXMgaXMgbW9zdGx5IHN5c3RlbSByZWdpc3Rlciwg
YnV0IHRoZXJlIGFyZS93aWxsIGJlCj4+Pj4gc3BlY2lmaWMgYXJtNjQvYXJtMzIgY29kZSAoc3Vj
aCBhcyBhc3NlbWJseSBmaWxlKS4gU28gSSB3b3VsZAo+Pj4+IHJlY29tbWVuZCB0byBjcmVhdGUg
YSBkaXJlY3RvcnkgdHJlZSB0aGF0IGFsbG93cyBzdWNoIHNwbGl0Lgo+Pj4KPj4+IEkgYWdyZWUu
Cj4+Pgo+Pj4+Cj4+Pj4+Cj4+Pj4+IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaAo+Pj4+
Pgo+Pj4+PiDCoMKgwqDCoMKgIFRoZSBoZWFkZXIgaW5jbHVkZXMgYXJjaCBzcGVjaWZpYyBoZWFk
ZXIgZmlsZXMuCj4+Pj4+Cj4+Pj4+IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUu
aAo+Pj4+Pgo+Pj4+PiDCoMKgwqDCoCBQcm92aWRlcyBhIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBp
bXBsZW1lbnRhdGlvbiBmb3IgcmVhZGluZwo+Pj4+PiBzeXN0ZW0gcmVnaXN0ZXJzIHdoaWxlIHBy
b3ZpZGluZyBhIG1hY3JvIGRlZmluaXRpb24gZm9yIHJlYWRpbmcKPj4+Pj4gcmVnaXN0ZXIgbGlr
ZToKPj4+Pj4KPj4+Pj4gwqDCoCAjZGVmaW5lwqAgZWwwX2NudHZfY3RsX2dldMKgIFNZU1JFR19S
RUFEMzIoY250dl9jdGxfZWwwKQo+Pj4+Pgo+Pj4+PiDCoMKgICNkZWZpbmXCoCBlbDBfY250dl9j
dGxfc2V0KHZhbCnCoCAoY250dl9jdGxfZWwwLCB2YWwpCj4+Pj4KPj4+PiBUaGVyZSBhcmUgZG96
ZW5zIG9mIHN5c3RlbSByZWdpc3RlcnMsIHNvIEkgYW0gbm90IHN1cmUgeW91IHdvdWxkIHdhbnQK
Pj4+PiB0byBjcmVhdGUgaGVscGVyIGZvciBldmVyeSBvZiB0aGVtLiBJdCB3b3VsZCBiZSBiZXN0
IGlmIHlvdSBmaW5kIGEgd2F5Cj4+Pj4gdG8gYWJzdHJhY3QgdGhpcy4KPj4+Cj4+PiBJIGFncmVl
IHdlIGNvdWxkIGFic3RyYWN0IGl0IG1vcmUgdXNpbmcgdGhlIEFBcmNoNjQgc3lzdGVtIHJlZ2lz
dGVyIAo+Pj4gbmFtZS4KPj4+Cj4+PiAjZGVmaW5lIGVsMF9nZXQocmVnKSBTWVNSRUdfUkVBRCgg
IyMgcmVnICMjICkKPj4KPj4gQnV0IHRoZSBwcmVmaXggImVsMF8iIGdlbmVyYWxseSBtZWFucyBp
dCBpcyBhIEFhcmNoNjQgcmVnaXN0ZXIuCj4+IGUuZy4gQ05UVl9DVExfRUwwIGlzIHRoZSBhYXJj
aDY0IG5hbWUuIENOVFZfQ1RMIGlzIHRoZSBhYXJjaDMyIG5hbWUuCj4KPiBXZWxsLCBpZiB5b3Ug
d2FudCB0byBnZXQgY29tbW9uIGNvZGUgeW91IHdpbGwgaGF2ZSB0byBmaW5kIGEgY29tbW9uIAo+
IG5hbWluZy4gWW91IGhhdmUgYSBmZXcgY2hvaWNlcyBoZXJlOgo+IMKgwqAgMSkgVXNlIHRoZSBB
QXJjaDY0IG5hbWVzIGFuZCBhbGlhcyB0aGUgQUFyY2gzMiBuYW1lcy4gVGhpcyBpcyB3aGF0IAo+
IHdlIGRvIGZvciBYZW4uCkkgcHJlZmVyIHRoaXMgc2NoZW1lLCBzaW5jZSB4ZW4gYWxyZWFkeSB1
c2VzIHRoaXMgc2NoZW1lIGl0IG1ha2VzIHNlbnNlIApmb3IgdXMgdG8gdXNlIGEgc2NoZW1lIHdo
aWNoIGlzIGFscmVhZHkgaW4gdXNlIGluc3RlYWQgb2YgZmluZGluZyBhIG5ld8KgIApzY2hlbWUu
Cj4KPiDCoMKgIDIpIFVzZSB0aGUgQUFyY2gzMiBuYW1lcyBhbmQgYWxpYXMgdGhlIEFBcmNoNjQg
bmFtZXMuCj4gwqDCoCAzKSBQcm92aWRpbmcgaGVscGVyIGZvciBldmVyeSBzaW5nbGUgcmVnaXN0
ZXJzLgo+Cj4gVGhlIEFBcmNoNjQgbmFtZXMgaGF2ZSB0aGUgYWR2YW50YWdlIHRvIHRlbGwgeW91
IHdoYXQgaXMgdGhlIGxvd2VzdCAKPiBsZXZlbCB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBmcm8KPgo+
IFJlZ2FyZGluZyBTaGFyYW0ncyBzdWdnZXN0LCBlbDBfZ2V0KCkgaW1wbGllcyB5b3UgY2FuIG9u
bHkgdXNlIHdpdGggCj4gc3lzdGVtIHJlZ2lzdGVyIGFjY2Vzc2libGUgYXQgRUwwIChpLmUuIHVz
ZXJzcGFjZSkuIFVuaWtyYWZ0IHdpbGwgYWxzbyAKPiBuZWVkIHRvIGFjY2VzcyBzeXN0ZW0gcmVn
aXN0ZXIgb25seSBhY2Nlc3NpYmxlIGF0IEVMMS4KPgo+IFNvIHlvdSBtYXkgd2FudCB0byB0aGlu
ayBmb3IgYSBkaWZmZXJlbnQgbmFtZS4gTWF5YmUge3JlYWQsIAo+IHdyaXRlfV9zeXNyZWcoKT8g
SSBoYXZlbid0IHN1Z2dlc3RlZCBnZXQgYmVjYXVzZSB0aGUgY291bnRlcnBhcnQgJ3B1dCcgCj4g
ZG9lcyBub3Qgc2VlbSBzdWl0YWJsZSBoZXJlLgoKSSB0aG91Z2h0IG9mICJnZXQgYW5kIHNldCIg
YnV0IGl0IGlzIHRydWUgdGhhdCAiZ2V0IGFuZCBwdXQiIGFyZSB1c2VkIAp0b2dldGhlci7CoCBU
aGUgInJlYWQsIHdyaXRlIiBvcHRpb24gc2VlbXMgbW9yZSBhcHByb3ByaWF0ZSBoZXJlLgoKVGhh
bmtzICYgUmVnYXJkcwoKU2hhcmFuCgo+Cj4gQ2hlZXJzLAo+CgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 08:07:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 08:07:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD2Kx-0004uw-DB; Wed, 25 Sep 2019 08:07:47 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD2Kw-0004uq-K7
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 08:07:46 +0000
X-Inumbo-ID: 8d4f1668-df6b-11e9-962c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id 8d4f1668-df6b-11e9-962c-12813bfff9fa;
 Wed, 25 Sep 2019 08:07:44 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 38DC14008D;
 Wed, 25 Sep 2019 10:07:43 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 25 Sep 2019 10:07:37 +0200
Message-Id: <20190925080742.17860-1-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
Subject: [Minios-devel] [UNIKRAFT/LIBMICROPYTHON PATCH 0/5] Port of
 Micropython to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIE1pY3JvcHl0aG9uIChQeXRob24gZm9yIGVtYmVk
ZGVkIGRldmljZXMpICl0byBVbmlrcmFmdC4KCkZlbGlwZSBIdWljaSAoNSk6CiAgSW50cm9kdWNl
IGxpYnJhcnkgc2tlbGV0b24KICBBZGQgTWFrZWZpbGUudWsKICBBZGQgZ2x1ZSBjb2RlLgogIEFk
ZCBwYXRjaGVzLgogIEV4cG9ydCBzeW1ib2xzCgogQ09ESU5HX1NUWUxFLm1kICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgIDQgKwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAgICAgICAg
ICAgICAgICB8ICAgIDQgKwogQ09QWUlORy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgMzkgKwogQ29uZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
IDggKwogTUFJTlRBSU5FUlMubWQgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKwog
TWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyOTIgKysrKysrKwog
UkVBRE1FLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTYgKwogZXhwb3J0
c3ltcy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogZXh0bW9kL21vZGx3
aXAuYyAgICAgICAgICAgICAgICAgICAgICAgICB8IDE0MTAgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrCiBleHRtb2QvbW9kdXNvY2tldC5jICAgICAgICAgICAgICAgICAgICAgIHwgIDYy
NCArKysrKysrKysrKysrCiBpbmNsdWRlL21vZGx3aXAuaCAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDExMSArKysKIGluY2x1ZGUvbXBjb25maWdwb3J0LmggICAgICAgICAgICAgICAgICAgfCAg
MzIwICsrKysrKysKIG1haW4uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
NTQzICsrKysrKysrKysrKwogbXBjb25maWdwb3J0Lm1rICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgNDUgKwogcGF0Y2hlcy8wMDAxLW1pc3NpbmctYm9hcmQtZGVmaW5lcy5wYXRjaCB8ICAg
MTEgKwogcGF0Y2hlcy8wMDAyLWNsZWFydXAtbmxycHVzaC1mcmFtZS5wYXRjaCB8ICAgMTAgKwog
MTYgZmlsZXMgY2hhbmdlZCwgMzQ1MCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQg
Q09ESU5HX1NUWUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVh
dGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awog
Y3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFr
ZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBleHBvcnRzeW1zLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXh0bW9kL21vZGx3aXAuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGV4dG1vZC9tb2R1c29ja2V0LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBp
bmNsdWRlL21vZGx3aXAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbXBjb25maWdwb3J0
LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtYWluLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtcGNvbmZp
Z3BvcnQubWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDEtbWlzc2luZy1ib2FyZC1k
ZWZpbmVzLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAyLWNsZWFydXAtbmxy
cHVzaC1mcmFtZS5wYXRjaAoKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 08:07:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 08:07:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD2L2-0004vM-Ej; Wed, 25 Sep 2019 08:07:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD2L1-0004vE-FY
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 08:07:51 +0000
X-Inumbo-ID: 8dbb0e2c-df6b-11e9-962c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id 8dbb0e2c-df6b-11e9-962c-12813bfff9fa;
 Wed, 25 Sep 2019 08:07:44 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 2A4A544612;
 Wed, 25 Sep 2019 10:07:44 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 25 Sep 2019 10:07:38 +0200
Message-Id: <20190925080742.17860-2-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190925080742.17860-1-felipe.huici@neclab.eu>
References: <20190925080742.17860-1-felipe.huici@neclab.eu>
MIME-Version: 1.0
Subject: [Minios-devel] [UNIKRAFT/LIBMICROPYTHON PATCH 1/5] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
Content-Type: multipart/mixed; boundary="===============0800144749515652982=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============0800144749515652982==
Content-Type: text/plain; charset=y
Content-Transfer-Encoding: 8bit

We use the BSD-3-Clause license for this library glue code.

Signed-off-by: Felipe Huici <felipe.huici@neclab.eu>
---
 CODING_STYLE.md |  4 ++++
 CONTRIBUTING.md |  4 ++++
 COPYING.md      | 39 +++++++++++++++++++++++++++++++++++++++
 Config.uk       |  8 ++++++++
 MAINTAINERS.md  | 12 ++++++++++++
 README.md       | 16 ++++++++++++++++
 exportsyms.uk   |  1 +
 7 files changed, 84 insertions(+)
 create mode 100644 CODING_STYLE.md
 create mode 100644 CONTRIBUTING.md
 create mode 100644 COPYING.md
 create mode 100644 Config.uk
 create mode 100644 MAINTAINERS.md
 create mode 100644 README.md
 create mode 100644 exportsyms.uk

diff --git a/CODING_STYLE.md b/CODING_STYLE.md
new file mode 100644
index 0000000..5730041
--- /dev/null
+++ b/CODING_STYLE.md
@@ -0,0 +1,4 @@
+Coding Style
+============
+
+Please refer to the `CODING_STYLE.md` file in the main Unikraft repository.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..14f6ac6
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,4 @@
+Contributing to Unikraft
+========================
+
+Please refer to the `CONTRIBUTING.md` file in the main Unikraft repository.
diff --git a/COPYING.md b/COPYING.md
new file mode 100644
index 0000000..0664989
--- /dev/null
+++ b/COPYING.md
@@ -0,0 +1,39 @@
+License
+=======
+
+Unikraft micropython wrappers
+----------------------------------
+
+This repository contains wrapper code to build micropython with Unikraft.
+Each C code file in this repository should declare who is the
+copyright owner and under which terms and conditions the code is
+licensed. If such a licence note is missing, the following copyright
+notice will apply:
+
+	Copyright (c) Year, Institution. All rights reserved.
+
+	Redistribution and use in source and binary forms, with or without
+	modification, are permitted provided that the following conditions
+	are met:
+
+	1. Redistributions of source code must retain the above copyright
+	   notice, this list of conditions and the following disclaimer.
+	2. Redistributions in binary form must reproduce the above copyright
+	   notice, this list of conditions and the following disclaimer in the
+	   documentation and/or other materials provided with the distribution.
+	3. Neither the name of the copyright holder nor the names of its
+	   contributors may be used to endorse or promote products derived from
+	   this software without specific prior written permission.
+
+	THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+	AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+	IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+	ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+	LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+	CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+	SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+	INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+	CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+	ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+	POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/Config.uk b/Config.uk
new file mode 100644
index 0000000..b38a7d7
--- /dev/null
+++ b/Config.uk
@@ -0,0 +1,8 @@
+config LIBMICROPYTHON
+	   bool "Micropython - Python for microcontrollers"
+	   default y
+	   select LIBLWIP
+	   select LIBNEWLIBC
+	   select LWIP_NOTHREADS
+	   select LWIP_IGMP
+	   select LIBUKMMAP
\ No newline at end of file
diff --git a/MAINTAINERS.md b/MAINTAINERS.md
new file mode 100644
index 0000000..ca50121
--- /dev/null
+++ b/MAINTAINERS.md
@@ -0,0 +1,12 @@
+Maintainers List
+================
+
+For notes on how to read this information, please refer to `MAINTAINERS.md` in
+the main Unikraft repository.
+
+	LIBPCRE-UNIKRAFT
+	M: Felipe Huici <felipe.huici@neclab.eu>
+	M: Simon Kuenzer <simon.kuenzer@neclab.eu>
+	M: Vlad-Andrei BĂDOIU <vlad_andrei.badoiu@stud.acs.upb.ro>
+	L: minios-devel@lists.xen.org
+	F: *
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..8fa3b85
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+micorpython for Unikraft
+=============================
+
+This is the port of micropython for Unikraft as external library. By
+default, when running the port will go into interactive mode (though
+note that for now there is a slight problem with it in that characters
+are echoed twice). Alternatively, you can run a script from a file if
+passed as a initrd parameter.
+
+Please also note that in the menu, for lwip, you need to select the
+"Mainloop (non-threaded)" option for "Operation mode". This is stated
+in Micropython's Config.uk (select LWIP_NOTHREADS), but this feature
+is broken in kConfig.
+
+Please refer to the `README.md` as well as the documentation in the `doc/`
+subdirectory of the main unikraft repository.
diff --git a/exportsyms.uk b/exportsyms.uk
new file mode 100644
index 0000000..c86c3f3
--- /dev/null
+++ b/exportsyms.uk
@@ -0,0 +1 @@
+none
\ No newline at end of file
-- 
2.11.0



--===============0800144749515652982==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============0800144749515652982==--

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 08:07:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 08:07:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD2L4-0004vo-GX; Wed, 25 Sep 2019 08:07:54 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD2L3-0004vg-Q0
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 08:07:53 +0000
X-Inumbo-ID: 8ec4b30e-df6b-11e9-8628-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id 8ec4b30e-df6b-11e9-8628-bc764e2007e4;
 Wed, 25 Sep 2019 08:07:46 +0000 (UTC)
Received: from localhost (c431.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id EB7AB44615;
 Wed, 25 Sep 2019 10:07:45 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 25 Sep 2019 10:07:40 +0200
Message-Id: <20190925080742.17860-4-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190925080742.17860-1-felipe.huici@neclab.eu>
References: <20190925080742.17860-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBMICROPYTHON PATCH 3/5] Add glue code.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGNvZGUgdG8gcnVuIHRoZSBtYWluIGludGVycHJldGVyIGxvb3AgYW5kIHRvIHByb3ZpZGUg
c3VwcG9ydCBmb3IKbHdpcC9zb2NrZXRzLgoKU2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxm
ZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgotLS0KIGV4dG1vZC9tb2Rsd2lwLmMgICAgICAgfCAxNDEw
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogZXh0bW9k
L21vZHVzb2NrZXQuYyAgICB8ICA2MjQgKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL21v
ZGx3aXAuaCAgICAgIHwgIDExMSArKysrCiBpbmNsdWRlL21wY29uZmlncG9ydC5oIHwgIDMyMCAr
KysrKysrKysrKwogbWFpbi5jICAgICAgICAgICAgICAgICB8ICA1NDMgKysrKysrKysrKysrKysr
KysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzMDA4IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBleHRtb2QvbW9kbHdpcC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXh0bW9kL21vZHVzb2Nr
ZXQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbW9kbHdpcC5oCiBjcmVhdGUgbW9kZSAx
MDA2NDQgaW5jbHVkZS9tcGNvbmZpZ3BvcnQuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IG1haW4uYwoK
ZGlmZiAtLWdpdCBhL2V4dG1vZC9tb2Rsd2lwLmMgYi9leHRtb2QvbW9kbHdpcC5jCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMDg1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9l
eHRtb2QvbW9kbHdpcC5jCkBAIC0wLDAgKzEsMTQxMCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBNaWNyb1B5dGhvbiBwcm9qZWN0LCBodHRwOi8vbWljcm9weXRob24ub3JnLwor
ICoKKyAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMywg
MjAxNCBEYW1pZW4gUC4gR2VvcmdlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgR2FsZW4gSGF6ZWx3
b29kCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUtMjAxNyBQYXVsIFNva29sb3Zza3kKKyAqCisgKiBQ
ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv
biBvYnRhaW5pbmcgYSBjb3B5CisgKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv
Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICogaW4gdGhlIFNv
ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24g
dGhlIHJpZ2h0cworICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0
cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbAorICogY29waWVzIG9mIHRoZSBTb2Z0d2Fy
ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgKiBmdXJu
aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK
KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl
IHNoYWxsIGJlIGluY2x1ZGVkIGluCisgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRp
b25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT
IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF
RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G
UklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIEFVVEhPUlMgT1IgQ09QWVJJR0hU
IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX
SVNFLCBBUklTSU5HIEZST00sCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBT
T0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOCisgKiBUSEUgU09GVFdBUkUu
CisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNs
dWRlIDx1ay9wcmludC5oPgorI2luY2x1ZGUgPG5ldGlmL3VrbmV0ZGV2Lmg+CisKKyNpbmNsdWRl
ICJsd2lwL2luaXQuaCIKKyNpbmNsdWRlICJsd2lwL3RpbWVvdXRzLmgiCisjaW5jbHVkZSAibHdp
cC90Y3AuaCIKKyNpbmNsdWRlICJsd2lwL3VkcC5oIgorI2luY2x1ZGUgImx3aXAvZG5zLmgiCisj
aW5jbHVkZSAibHdpcC9pZ21wLmgiCisKKyNpbmNsdWRlICJweS9ubHIuaCIKKyNpbmNsdWRlICJw
eS9vYmpsaXN0LmgiCisjaW5jbHVkZSAicHkvcnVudGltZS5oIgorI2luY2x1ZGUgInB5L3N0cmVh
bS5oIgorI2luY2x1ZGUgInB5L21wZXJybm8uaCIKKyNpbmNsdWRlICJweS9tcGhhbC5oIgorCisj
aW5jbHVkZSAibGliL25ldHV0aWxzL25ldHV0aWxzLmgiCisKKyNkZWZpbmUgREVCVUdfcHJpbnRm
IHVrX3ByX2RlYnVnCisKKy8vIEFsbCBzb2NrZXQgb3B0aW9ucyBzaG91bGQgYmUgZ2xvYmFsbHkg
ZGlzdGluY3QsCisvLyBiZWNhdXNlIHdlIGlnbm9yZSBvcHRpb24gbGV2ZWxzIGZvciBlZmZpY2ll
bmN5LgorI2RlZmluZSBJUF9BRERfTUVNQkVSU0hJUCAweDQwMAorCisvLyBGb3IgY29tcGF0aWJp
bGlseSB3aXRoIG9sZGVyIGx3SVAgdmVyc2lvbnMuCisjaWZuZGVmIGlwX3NldF9vcHRpb24KKyNk
ZWZpbmUgaXBfc2V0X29wdGlvbihwY2IsIG9wdCkgICAoKHBjYiktPnNvX29wdGlvbnMgfD0gKG9w
dCkpCisjZW5kaWYKKyNpZm5kZWYgaXBfcmVzZXRfb3B0aW9uCisjZGVmaW5lIGlwX3Jlc2V0X29w
dGlvbihwY2IsIG9wdCkgKChwY2IpLT5zb19vcHRpb25zICY9IH4ob3B0KSkKKyNlbmRpZgorCisj
aWZkZWYgTUlDUk9QWV9QWV9MV0lQX1NMSVAKKyNpbmNsdWRlICJuZXRpZi9zbGlwaWYuaCIKKyNp
bmNsdWRlICJsd2lwL3Npby5oIgorI2VuZGlmCisKKyNpZmRlZiBNSUNST1BZX1BZX0xXSVBfU0xJ
UAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8vIFNsaXAgb2JqZWN0IGZvciBtb2Rsd2lwLiBS
ZXF1aXJlcyBhIHNlcmlhbCBkcml2ZXIgZm9yIHRoZSBwb3J0IHRoYXQgc3VwcG9ydHMKKy8vIHRo
ZSBsd2lwIHNlcmlhbCBjYWxsYmFjayBmdW5jdGlvbnMuCisKK3R5cGVkZWYgc3RydWN0IF9sd2lw
X3NsaXBfb2JqX3QgeworICAgIG1wX29ial9iYXNlX3QgYmFzZTsKKyAgICBzdHJ1Y3QgbmV0aWYg
bHdpcF9uZXRpZjsKK30gbHdpcF9zbGlwX29ial90OworCisvLyBTbGlwIG9iamVjdCBpcyB1bmlx
dWUgZm9yIG5vdy4gUG9zc2libHkgY2FuIGZpeCB0aGlzIGxhdGVyLiBGSVhNRQorU1RBVElDIGx3
aXBfc2xpcF9vYmpfdCBsd2lwX3NsaXBfb2JqOworCisvLyBEZWNsYXJlIHRoZXNlIGVhcmx5Lgor
dm9pZCBtb2RfbHdpcF9yZWdpc3Rlcl9wb2xsKHZvaWQgKCpwb2xsKSh2b2lkICphcmcpLCB2b2lk
ICpwb2xsX2FyZyk7Cit2b2lkIG1vZF9sd2lwX2RlcmVnaXN0ZXJfcG9sbCh2b2lkICgqcG9sbCko
dm9pZCAqYXJnKSwgdm9pZCAqcG9sbF9hcmcpOworCitTVEFUSUMgdm9pZCBzbGlwX2x3aXBfcG9s
bCh2b2lkICpuZXRpZikgeworICAgIHNsaXBpZl9wb2xsKChzdHJ1Y3QgbmV0aWYqKW5ldGlmKTsK
K30KKworU1RBVElDIGNvbnN0IG1wX29ial90eXBlX3QgbHdpcF9zbGlwX3R5cGU7CisKKy8vIGx3
SVAgU0xJUCBjYWxsYmFjayBmdW5jdGlvbnMKK3Npb19mZF90IHNpb19vcGVuKHU4X3QgZHZudW0p
IHsKKyAgICAvLyBXZSBzdXBwb3J0IHNpbmdsZXRvbiBTTElQIGludGVyZmFjZSwgc28ganVzdCBy
ZXR1cm4gYW55IHRydWlzaCB2YWx1ZS4KKyAgICByZXR1cm4gKHNpb19mZF90KTE7Cit9CisKK3Zv
aWQgc2lvX3NlbmQodThfdCBjLCBzaW9fZmRfdCBmZCkgeworICAgIG1wX29ial90eXBlX3QgKnR5
cGUgPSBtcF9vYmpfZ2V0X3R5cGUoTVBfU1RBVEVfVk0obHdpcF9zbGlwX3N0cmVhbSkpOworICAg
IGludCBlcnJvcjsKKyAgICB0eXBlLT5zdHJlYW1fcC0+d3JpdGUoTVBfU1RBVEVfVk0obHdpcF9z
bGlwX3N0cmVhbSksICZjLCAxLCAmZXJyb3IpOworfQorCit1MzJfdCBzaW9fdHJ5cmVhZChzaW9f
ZmRfdCBmZCwgdThfdCAqZGF0YSwgdTMyX3QgbGVuKSB7CisgICAgbXBfb2JqX3R5cGVfdCAqdHlw
ZSA9IG1wX29ial9nZXRfdHlwZShNUF9TVEFURV9WTShsd2lwX3NsaXBfc3RyZWFtKSk7CisgICAg
aW50IGVycm9yOworICAgIG1wX3VpbnRfdCBvdXRfc3ogPSB0eXBlLT5zdHJlYW1fcC0+cmVhZChN
UF9TVEFURV9WTShsd2lwX3NsaXBfc3RyZWFtKSwgZGF0YSwgbGVuLCAmZXJyb3IpOworICAgIGlm
IChvdXRfc3ogPT0gTVBfU1RSRUFNX0VSUk9SKSB7CisgICAgICAgIGlmIChtcF9pc19ub25ibG9j
a2luZ19lcnJvcihlcnJvcikpIHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cisg
ICAgICAgIC8vIENhbid0IGRvIG11Y2ggZWxzZSwgY2FuIHdlPworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgcmV0dXJuIG91dF9zejsKK30KKworLy8gY29uc3RydWN0b3IgbHdpcC5zbGlw
KGRldmljZT1pbnRlZ2VyLCBpcGxvY2FsPXN0cmluZywgaXByZW1vdGU9c3RyaW5nKQorU1RBVElD
IG1wX29ial90IGx3aXBfc2xpcF9tYWtlX25ldyhtcF9vYmpfdCB0eXBlX2luLCBzaXplX3Qgbl9h
cmdzLCBzaXplX3Qgbl9rdywgY29uc3QgbXBfb2JqX3QgKmFyZ3MpIHsKKyAgICBtcF9hcmdfY2hl
Y2tfbnVtKG5fYXJncywgbl9rdywgMywgMywgZmFsc2UpOworCisgICAgbHdpcF9zbGlwX29iai5i
YXNlLnR5cGUgPSAmbHdpcF9zbGlwX3R5cGU7CisKKyAgICBNUF9TVEFURV9WTShsd2lwX3NsaXBf
c3RyZWFtKSA9IGFyZ3NbMF07CisKKyAgICBpcF9hZGRyX3QgaXBsb2NhbCwgaXByZW1vdGU7Cisg
ICAgaWYgKCFpcGFkZHJfYXRvbihtcF9vYmpfc3RyX2dldF9zdHIoYXJnc1sxXSksICZpcGxvY2Fs
KSkgeworICAgICAgICBtcF9yYWlzZV9WYWx1ZUVycm9yKCJub3QgYSB2YWxpZCBsb2NhbCBJUCIp
OworICAgIH0KKyAgICBpZiAoIWlwYWRkcl9hdG9uKG1wX29ial9zdHJfZ2V0X3N0cihhcmdzWzJd
KSwgJmlwcmVtb3RlKSkgeworICAgICAgICBtcF9yYWlzZV9WYWx1ZUVycm9yKCJub3QgYSB2YWxp
ZCByZW1vdGUgSVAiKTsKKyAgICB9CisKKyAgICBzdHJ1Y3QgbmV0aWYgKm4gPSAmbHdpcF9zbGlw
X29iai5sd2lwX25ldGlmOworICAgIGlmIChuZXRpZl9hZGQobiwgJmlwbG9jYWwsIElQX0FERFJf
QlJPQURDQVNULCAmaXByZW1vdGUsIE5VTEwsIHNsaXBpZl9pbml0LCBpcF9pbnB1dCkgPT0gTlVM
TCkgeworICAgICAgIG1wX3JhaXNlX1ZhbHVlRXJyb3IoIm91dCBvZiBtZW1vcnkiKTsKKyAgICB9
CisgICAgbmV0aWZfc2V0X3VwKG4pOworICAgIG5ldGlmX3NldF9kZWZhdWx0KG4pOworICAgIG1v
ZF9sd2lwX3JlZ2lzdGVyX3BvbGwoc2xpcF9sd2lwX3BvbGwsIG4pOworCisgICAgcmV0dXJuICht
cF9vYmpfdCkmbHdpcF9zbGlwX29iajsKK30KKworU1RBVElDIG1wX29ial90IGx3aXBfc2xpcF9z
dGF0dXMobXBfb2JqX3Qgc2VsZl9pbikgeworICAgIC8vIE51bGwgZnVuY3Rpb24gZm9yIG5vdy4K
KyAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKK30KKworU1RBVElDIE1QX0RFRklORV9DT05TVF9G
VU5fT0JKXzEobHdpcF9zbGlwX3N0YXR1c19vYmosIGx3aXBfc2xpcF9zdGF0dXMpOworCitTVEFU
SUMgY29uc3QgbXBfcm9tX21hcF9lbGVtX3QgbHdpcF9zbGlwX2xvY2Fsc19kaWN0X3RhYmxlW10g
PSB7CisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX3N0YXR1cyksIE1QX1JPTV9QVFIoJmx3aXBf
c2xpcF9zdGF0dXNfb2JqKSB9LAorfTsKKworU1RBVElDIE1QX0RFRklORV9DT05TVF9ESUNUKGx3
aXBfc2xpcF9sb2NhbHNfZGljdCwgbHdpcF9zbGlwX2xvY2Fsc19kaWN0X3RhYmxlKTsKKworU1RB
VElDIGNvbnN0IG1wX29ial90eXBlX3QgbHdpcF9zbGlwX3R5cGUgPSB7CisgICAgeyAmbXBfdHlw
ZV90eXBlIH0sCisgICAgLm5hbWUgPSBNUF9RU1RSX3NsaXAsCisgICAgLm1ha2VfbmV3ID0gbHdp
cF9zbGlwX21ha2VfbmV3LAorICAgIC5sb2NhbHNfZGljdCA9IChtcF9vYmpfZGljdF90KikmbHdp
cF9zbGlwX2xvY2Fsc19kaWN0LAorfTsKKworI2VuZGlmIC8vIE1JQ1JPUFlfUFlfTFdJUF9TTElQ
CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBUYWJsZSB0byBjb252ZXJ0IGx3SVAgZXJy
X3QgY29kZXMgdG8gc29ja2V0IGVycm5vIGNvZGVzLCBmcm9tIHRoZSBsd0lQCisvLyBzb2NrZXQg
QVBJLgorCisvLyBFeHRlbnNpb24gdG8gbHdJUCBlcnJvciBjb2RlcworI2RlZmluZSBfRVJSX0JB
REYgLTE2CisvLyBUT0RPOiBXZSBqdXN0IGtub3cgdGhhdCBjaGFuZ2UgaGFwcGVuZWQgc29tZXdo
ZXJlIGJldHdlZW4gMS40LjAgYW5kIDEuNC4xLAorLy8gaW52ZXN0aWdhdGUgaW4gbW9yZSBkZXRh
aWwuCisjaWYgTFdJUF9WRVJTSU9OIDwgMHgwMTA0MDEwMAorc3RhdGljIGNvbnN0IGludCBlcnJv
cl9sb29rdXBfdGFibGVbXSA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAvKiBFUlJfT0sgICAg
ICAgICAgMCAgICAgIE5vIGVycm9yLCBldmVyeXRoaW5nIE9LLiAqLworICAgIE1QX0VOT01FTSwg
ICAgICAgIC8qIEVSUl9NRU0gICAgICAgIC0xICAgICAgT3V0IG9mIG1lbW9yeSBlcnJvci4gICAg
ICovCisgICAgTVBfRU5PQlVGUywgICAgICAgLyogRVJSX0JVRiAgICAgICAgLTIgICAgICBCdWZm
ZXIgZXJyb3IuICAgICAgICAgICAgKi8KKyAgICBNUF9FV09VTERCTE9DSywgICAvKiBFUlJfVElN
RU9VVCAgICAtMyAgICAgIFRpbWVvdXQgICAgICAgICAgICAgICAgICAqLworICAgIE1QX0VIT1NU
VU5SRUFDSCwgIC8qIEVSUl9SVEUgICAgICAgIC00ICAgICAgUm91dGluZyBwcm9ibGVtLiAgICAg
ICAgICovCisgICAgTVBfRUlOUFJPR1JFU1MsICAgLyogRVJSX0lOUFJPR1JFU1MgLTUgICAgICBP
cGVyYXRpb24gaW4gcHJvZ3Jlc3MgICAgKi8KKyAgICBNUF9FSU5WQUwsICAgICAgICAvKiBFUlJf
VkFMICAgICAgICAtNiAgICAgIElsbGVnYWwgdmFsdWUuICAgICAgICAgICAqLworICAgIE1QX0VX
T1VMREJMT0NLLCAgIC8qIEVSUl9XT1VMREJMT0NLIC03ICAgICAgT3BlcmF0aW9uIHdvdWxkIGJs
b2NrLiAgICovCisKKyAgICBNUF9FQ09OTkFCT1JURUQsICAvKiBFUlJfQUJSVCAgICAgICAtOCAg
ICAgIENvbm5lY3Rpb24gYWJvcnRlZC4gICAgICAqLworICAgIE1QX0VDT05OUkVTRVQsICAgIC8q
IEVSUl9SU1QgICAgICAgIC05ICAgICAgQ29ubmVjdGlvbiByZXNldC4gICAgICAgICovCisgICAg
TVBfRU5PVENPTk4sICAgICAgLyogRVJSX0NMU0QgICAgICAgLTEwICAgICBDb25uZWN0aW9uIGNs
b3NlZC4gICAgICAgKi8KKyAgICBNUF9FTk9UQ09OTiwgICAgICAvKiBFUlJfQ09OTiAgICAgICAt
MTEgICAgIE5vdCBjb25uZWN0ZWQuICAgICAgICAgICAqLworICAgIE1QX0VJTywgICAgICAgICAg
IC8qIEVSUl9BUkcgICAgICAgIC0xMiAgICAgSWxsZWdhbCBhcmd1bWVudC4gICAgICAgICovCisg
ICAgTVBfRUFERFJJTlVTRSwgICAgLyogRVJSX1VTRSAgICAgICAgLTEzICAgICBBZGRyZXNzIGlu
IHVzZS4gICAgICAgICAgKi8KKyAgICAtMSwgICAgICAgICAgICAgICAvKiBFUlJfSUYgICAgICAg
ICAtMTQgICAgIExvdy1sZXZlbCBuZXRpZiBlcnJvciAgICAqLworICAgIE1QX0VBTFJFQURZLCAg
ICAgIC8qIEVSUl9JU0NPTk4gICAgIC0xNSAgICAgQWxyZWFkeSBjb25uZWN0ZWQuICAgICAgICov
CisgICAgTVBfRUJBREYsICAgICAgICAgLyogX0VSUl9CQURGICAgICAgLTE2ICAgICBDbG9zZWQg
c29ja2V0IChudWxsIHBjYikgKi8KK307CisjZWxzZQorc3RhdGljIGNvbnN0IGludCBlcnJvcl9s
b29rdXBfdGFibGVbXSA9IHsKKyAgICAwLCAgICAgICAgICAgICAgICAvKiBFUlJfT0sgICAgICAg
ICAgMCAgICAgIE5vIGVycm9yLCBldmVyeXRoaW5nIE9LLiAqLworICAgIE1QX0VOT01FTSwgICAg
ICAgIC8qIEVSUl9NRU0gICAgICAgIC0xICAgICAgT3V0IG9mIG1lbW9yeSBlcnJvci4gICAgICov
CisgICAgTVBfRU5PQlVGUywgICAgICAgLyogRVJSX0JVRiAgICAgICAgLTIgICAgICBCdWZmZXIg
ZXJyb3IuICAgICAgICAgICAgKi8KKyAgICBNUF9FV09VTERCTE9DSywgICAvKiBFUlJfVElNRU9V
VCAgICAtMyAgICAgIFRpbWVvdXQgICAgICAgICAgICAgICAgICAqLworICAgIE1QX0VIT1NUVU5S
RUFDSCwgIC8qIEVSUl9SVEUgICAgICAgIC00ICAgICAgUm91dGluZyBwcm9ibGVtLiAgICAgICAg
ICovCisgICAgTVBfRUlOUFJPR1JFU1MsICAgLyogRVJSX0lOUFJPR1JFU1MgLTUgICAgICBPcGVy
YXRpb24gaW4gcHJvZ3Jlc3MgICAgKi8KKyAgICBNUF9FSU5WQUwsICAgICAgICAvKiBFUlJfVkFM
ICAgICAgICAtNiAgICAgIElsbGVnYWwgdmFsdWUuICAgICAgICAgICAqLworICAgIE1QX0VXT1VM
REJMT0NLLCAgIC8qIEVSUl9XT1VMREJMT0NLIC03ICAgICAgT3BlcmF0aW9uIHdvdWxkIGJsb2Nr
LiAgICovCisKKyAgICBNUF9FQUREUklOVVNFLCAgICAvKiBFUlJfVVNFICAgICAgICAtOCAgICAg
IEFkZHJlc3MgaW4gdXNlLiAgICAgICAgICAqLworICAgIE1QX0VBTFJFQURZLCAgICAgIC8qIEVS
Ul9JU0NPTk4gICAgIC05ICAgICAgQWxyZWFkeSBjb25uZWN0ZWQuICAgICAgICovCisgICAgTVBf
RUNPTk5BQk9SVEVELCAgLyogRVJSX0FCUlQgICAgICAgLTEwICAgICBDb25uZWN0aW9uIGFib3J0
ZWQuICAgICAgKi8KKyAgICBNUF9FQ09OTlJFU0VULCAgICAvKiBFUlJfUlNUICAgICAgICAtMTEg
ICAgIENvbm5lY3Rpb24gcmVzZXQuICAgICAgICAqLworICAgIE1QX0VOT1RDT05OLCAgICAgIC8q
IEVSUl9DTFNEICAgICAgIC0xMiAgICAgQ29ubmVjdGlvbiBjbG9zZWQuICAgICAgICovCisgICAg
TVBfRU5PVENPTk4sICAgICAgLyogRVJSX0NPTk4gICAgICAgLTEzICAgICBOb3QgY29ubmVjdGVk
LiAgICAgICAgICAgKi8KKyAgICBNUF9FSU8sICAgICAgICAgICAvKiBFUlJfQVJHICAgICAgICAt
MTQgICAgIElsbGVnYWwgYXJndW1lbnQuICAgICAgICAqLworICAgIC0xLCAgICAgICAgICAgICAg
IC8qIEVSUl9JRiAgICAgICAgIC0xNSAgICAgTG93LWxldmVsIG5ldGlmIGVycm9yICAgICovCisg
ICAgTVBfRUJBREYsICAgICAgICAgLyogX0VSUl9CQURGICAgICAgLTE2ICAgICBDbG9zZWQgc29j
a2V0IChudWxsIHBjYikgKi8KK307CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvLyBUaGUgc29ja2V0IG9iamVjdCBwcm92aWRlZCBieSBsd2lwLnNvY2tldC4KKworI2RlZmlu
ZSBNT0RfTkVUV09SS19BRl9JTkVUICgyKQorI2RlZmluZSBNT0RfTkVUV09SS19BRl9JTkVUNiAo
MTApCisKKyNkZWZpbmUgTU9EX05FVFdPUktfU09DS19TVFJFQU0gKDEpCisjZGVmaW5lIE1PRF9O
RVRXT1JLX1NPQ0tfREdSQU0gKDIpCisjZGVmaW5lIE1PRF9ORVRXT1JLX1NPQ0tfUkFXICgzKQor
Cit0eXBlZGVmIHN0cnVjdCBfbHdpcF9zb2NrZXRfb2JqX3QgeworICAgIG1wX29ial9iYXNlX3Qg
YmFzZTsKKworICAgIHZvbGF0aWxlIHVuaW9uIHsKKyAgICAgICAgc3RydWN0IHRjcF9wY2IgKnRj
cDsKKyAgICAgICAgc3RydWN0IHVkcF9wY2IgKnVkcDsKKyAgICB9IHBjYjsKKyAgICB2b2xhdGls
ZSB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBwYnVmICpwYnVmOworICAgICAgICBzdHJ1Y3QgdGNw
X3BjYiAqY29ubmVjdGlvbjsKKyAgICB9IGluY29taW5nOworICAgIG1wX29ial90IGNhbGxiYWNr
OworICAgIGJ5dGUgcGVlcls0XTsKKyAgICBtcF91aW50X3QgcGVlcl9wb3J0OworICAgIG1wX3Vp
bnRfdCB0aW1lb3V0OworICAgIHVpbnQxNl90IHJlY3Zfb2Zmc2V0OworCisgICAgdWludDhfdCBk
b21haW47CisgICAgdWludDhfdCB0eXBlOworCisgICAgI2RlZmluZSBTVEFURV9ORVcgMAorICAg
ICNkZWZpbmUgU1RBVEVfQ09OTkVDVElORyAxCisgICAgI2RlZmluZSBTVEFURV9DT05ORUNURUQg
MgorICAgICNkZWZpbmUgU1RBVEVfUEVFUl9DTE9TRUQgMworICAgIC8vIE5lZ2F0aXZlIHZhbHVl
IGlzIGx3SVAgZXJyb3IKKyAgICBpbnQ4X3Qgc3RhdGU7Cit9IGx3aXBfc29ja2V0X29ial90Owor
CitzdGF0aWMgaW5saW5lIHZvaWQgcG9sbF9zb2NrZXRzKHZvaWQpIHsKKyNpZmRlZiBNSUNST1BZ
X0VWRU5UX1BPTExfSE9PSworICAgIE1JQ1JPUFlfRVZFTlRfUE9MTF9IT09LOworI2Vsc2UKKyAg
ICBtcF9oYWxfZGVsYXlfbXMoMSk7CisjZW5kaWYKKworICAgIC8qICEhISEhISEhISEhISEhISEh
ISEhISEhISEhISEhISEhISEhISEhISEhISAqLworICAgIHVrbmV0ZGV2X3BvbGxfYWxsKCk7Cisg
ICAgc3lzX2NoZWNrX3RpbWVvdXRzKCk7CisgICAgLyogISEhISEhISEhISEhISEhISEhISEhISEh
ISEhISEhISEhISEhISEhISEhICovCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLy8g
Q2FsbGJhY2sgZnVuY3Rpb25zIGZvciB0aGUgbHdJUCByYXcgQVBJLgorCitzdGF0aWMgaW5saW5l
IHZvaWQgZXhlY191c2VyX2NhbGxiYWNrKGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQpIHsKKyAg
ICBpZiAoc29ja2V0LT5jYWxsYmFjayAhPSBNUF9PQkpfTlVMTCkgeworICAgICAgICBtcF9jYWxs
X2Z1bmN0aW9uXzFfcHJvdGVjdGVkKHNvY2tldC0+Y2FsbGJhY2ssIHNvY2tldCk7CisgICAgfQor
fQorCisvLyBDYWxsYmFjayBmb3IgaW5jb21pbmcgVURQIHBhY2tldHMuIFdlIHNpbXBseSBzdGFz
aCB0aGUgcGFja2V0IGFuZCB0aGUgc291cmNlIGFkZHJlc3MsCisvLyBpbiBjYXNlIHdlIG5lZWQg
aXQgZm9yIHJlY3Zmcm9tLgorU1RBVElDIHZvaWQgX2x3aXBfdWRwX2luY29taW5nKHZvaWQgKmFy
Zywgc3RydWN0IHVkcF9wY2IgKnVwY2IsIHN0cnVjdCBwYnVmICpwLCBpcF9hZGRyX3QgKmFkZHIs
IHUxNl90IHBvcnQpIHsKKyAgICBsd2lwX3NvY2tldF9vYmpfdCAqc29ja2V0ID0gKGx3aXBfc29j
a2V0X29ial90Kilhcmc7CisKKyAgICBpZiAoc29ja2V0LT5pbmNvbWluZy5wYnVmICE9IE5VTEwp
IHsKKyAgICAgICAgLy8gVGhhdCdzIHdoeSB0aGV5IGNhbGwgaXQgInVucmVsaWFibGUiLiBObyBy
b29tIGluIHRoZSBpbm4sIGRyb3AgdGhlIHBhY2tldC4KKyAgICAgICAgcGJ1Zl9mcmVlKHApOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHNvY2tldC0+aW5jb21pbmcucGJ1ZiA9IHA7CisgICAgICAg
IHNvY2tldC0+cGVlcl9wb3J0ID0gKG1wX3VpbnRfdClwb3J0OworICAgICAgICBtZW1jcHkoJnNv
Y2tldC0+cGVlciwgYWRkciwgc2l6ZW9mKHNvY2tldC0+cGVlcikpOworICAgIH0KK30KKworLy8g
Q2FsbGJhY2sgZm9yIGdlbmVyYWwgdGNwIGVycm9ycy4KK1NUQVRJQyB2b2lkIF9sd2lwX3RjcF9l
cnJvcih2b2lkICphcmcsIGVycl90IGVycikgeworICAgIGx3aXBfc29ja2V0X29ial90ICpzb2Nr
ZXQgPSAobHdpcF9zb2NrZXRfb2JqX3QqKWFyZzsKKworICAgIC8vIFBhc3MgdGhlIGVycm9yIGNv
ZGUgYmFjayB2aWEgdGhlIGNvbm5lY3Rpb24gdmFyaWFibGUuCisgICAgc29ja2V0LT5zdGF0ZSA9
IGVycjsKKyAgICAvLyBJZiB3ZSBnb3QgaGVyZSwgdGhlIGx3SVAgc3RhY2sgZWl0aGVyIGhhcyBk
ZWFsbG9jYXRlZCBvciB3aWxsIGRlYWxsb2NhdGUgdGhlIHBjYi4KKyAgICBzb2NrZXQtPnBjYi50
Y3AgPSBOVUxMOworfQorCisvLyBDYWxsYmFjayBmb3IgdGNwIGNvbm5lY3Rpb24gcmVxdWVzdHMu
IEVycm9yIGNvZGUgZXJyIGlzIHVudXNlZC4gKFNlZSB0Y3AuaCkKK1NUQVRJQyBlcnJfdCBfbHdp
cF90Y3BfY29ubmVjdGVkKHZvaWQgKmFyZywgc3RydWN0IHRjcF9wY2IgKnRwY2IsIGVycl90IGVy
cikgeworICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSAobHdpcF9zb2NrZXRfb2JqX3Qq
KWFyZzsKKworICAgIHNvY2tldC0+c3RhdGUgPSBTVEFURV9DT05ORUNURUQ7CisgICAgREVCVUdf
cHJpbnRmKCJTb2NrZXQgJXAgY29ubmVjdGVkXG4iLCBzb2NrZXQpOworICAgIHJldHVybiBFUlJf
T0s7Cit9CisKKy8vIEJ5IGRlZmF1bHQsIGEgY2hpbGQgc29ja2V0IG9mIGxpc3RlbiBzb2NrZXQg
aXMgY3JlYXRlZCB3aXRoIHJlY3YKKy8vIGhhbmRsZXIgd2hpY2ggZGlzY2FyZHMgaW5jb21pbmcg
cGJ1ZidzLiBXZSBkb24ndCB3YW50IHRvIGRvIHRoYXQsCisvLyBzbyBzZXQgdGhpcyBoYW5kbGVy
IHdoaWNoIHJlcXVlc3RzIGx3SVAgdG8ga2VlcCBwYnVmJ3MgYW5kIGRlbGl2ZXIKKy8vIHRoZW0g
bGF0ZXIuIFdlIGNhbm5vdCBjYWNoZSBwYnVmcyBpbiBjaGlsZCBzb2NrZXQgb24gUHl0aG9uIHNp
ZGUsCisvLyB1bnRpbCBpdCBpcyBjcmVhdGVkIGluIGFjY2VwdCgpLgorU1RBVElDIGVycl90IF9s
d2lwX3RjcF9yZWN2X3VuYWNjZXB0ZWQodm9pZCAqYXJnLCBzdHJ1Y3QgdGNwX3BjYiAqcGNiLCBz
dHJ1Y3QgcGJ1ZiAqcCwgZXJyX3QgZXJyKSB7CisgICAgcmV0dXJuIEVSUl9CVUY7Cit9CisKKy8v
ICJQb2xsIiAoaWRsZSkgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIEFTQVAgYWZ0ZXIgYWNjZXB0IGNh
bGxiYWNrCisvLyB0byBleGVjdXRlIFB5dGhvbiBjYWxsYmFjayBmdW5jdGlvbiwgYXMgaXQgY2Fu
J3QgYmUgZXhlY3V0ZWQKKy8vIGZyb20gYWNjZXB0IGNhbGxiYWNrIGl0c2VsZi4KK1NUQVRJQyBl
cnJfdCBfbHdpcF90Y3BfYWNjZXB0X2ZpbmlzaGVkKHZvaWQgKmFyZywgc3RydWN0IHRjcF9wY2Ig
KnBjYikKK3sKKyAgICBsd2lwX3NvY2tldF9vYmpfdCAqc29ja2V0ID0gKGx3aXBfc29ja2V0X29i
al90Kilhcmc7CisgICAgdGNwX3BvbGwocGNiLCBOVUxMLCAwKTsKKyAgICBleGVjX3VzZXJfY2Fs
bGJhY2soc29ja2V0KTsKKyAgICByZXR1cm4gRVJSX09LOworfQorCisvLyBDYWxsYmFjayBmb3Ig
aW5jb21pbmcgdGNwIGNvbm5lY3Rpb25zLgorU1RBVElDIGVycl90IF9sd2lwX3RjcF9hY2NlcHQo
dm9pZCAqYXJnLCBzdHJ1Y3QgdGNwX3BjYiAqbmV3cGNiLCBlcnJfdCBlcnIpIHsKKyAgICBsd2lw
X3NvY2tldF9vYmpfdCAqc29ja2V0ID0gKGx3aXBfc29ja2V0X29ial90Kilhcmc7CisgICAgdGNw
X3JlY3YobmV3cGNiLCBfbHdpcF90Y3BfcmVjdl91bmFjY2VwdGVkKTsKKworICAgIGlmIChzb2Nr
ZXQtPmluY29taW5nLmNvbm5lY3Rpb24gIT0gTlVMTCkgeworICAgICAgICBERUJVR19wcmludGYo
Il9sd2lwX3RjcF9hY2NlcHQ6IFRyaWVkIHRvIHF1ZXVlID4xIHBjYiB3YWl0aW5nIGZvciBhY2Nl
cHRcbiIpOworICAgICAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSB0aGlzIGJldHRlci4gVGhpcyBz
aW5nbGUtbGV2ZWwgc3RydWN0dXJlIG1ha2VzIHRoZQorICAgICAgICAvLyBiYWNrbG9nIHNldHRp
bmcga2luZCBvZiBwb2ludGxlc3MuIEZJWE1FCisgICAgICAgIHJldHVybiBFUlJfQlVGOworICAg
IH0gZWxzZSB7CisgICAgICAgIHNvY2tldC0+aW5jb21pbmcuY29ubmVjdGlvbiA9IG5ld3BjYjsK
KyAgICAgICAgaWYgKHNvY2tldC0+Y2FsbGJhY2sgIT0gTVBfT0JKX05VTEwpIHsKKyAgICAgICAg
ICAgIC8vIFNjaGVkdWxlIGFjY2VwdCBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiBsd0lQIGlz
IGRvbmUKKyAgICAgICAgICAgIC8vIHdpdGggcHJvY2Vzc2luZyB0aGlzIGluY29taW5nIGNvbm5l
Y3Rpb24gb24gaXRzIHNpZGUgYW5kCisgICAgICAgICAgICAvLyBpcyBpZGxlLgorICAgICAgICAg
ICAgdGNwX3BvbGwobmV3cGNiLCBfbHdpcF90Y3BfYWNjZXB0X2ZpbmlzaGVkLCAxKTsKKyAgICAg
ICAgfQorCURFQlVHX3ByaW50ZigiQWNjZXB0ZWQgbmV3IGNvbm5lY3Rpb24gb24gc29ja2V0ICVw
XG4iLCBzb2NrZXQpOworICAgICAgICByZXR1cm4gRVJSX09LOworICAgIH0KK30KKworLy8gQ2Fs
bGJhY2sgZm9yIGluYm91bmQgdGNwIHBhY2tldHMuCitTVEFUSUMgZXJyX3QgX2x3aXBfdGNwX3Jl
Y3Yodm9pZCAqYXJnLCBzdHJ1Y3QgdGNwX3BjYiAqdGNwYiwgc3RydWN0IHBidWYgKnAsIGVycl90
IGVycikgeworICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSAobHdpcF9zb2NrZXRfb2Jq
X3QqKWFyZzsKKworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgLy8gT3RoZXIgc2lkZSBo
YXMgY2xvc2VkIGNvbm5lY3Rpb24uCisgICAgICAgIERFQlVHX3ByaW50ZigiX2x3aXBfdGNwX3Jl
Y3ZbJXBdOiBvdGhlciBzaWRlIGNsb3NlZCBjb25uZWN0aW9uXG4iLCBzb2NrZXQpOworICAgICAg
ICBzb2NrZXQtPnN0YXRlID0gU1RBVEVfUEVFUl9DTE9TRUQ7CisgICAgICAgIGV4ZWNfdXNlcl9j
YWxsYmFjayhzb2NrZXQpOworICAgICAgICByZXR1cm4gRVJSX09LOworICAgIH0KKworICAgIGlm
IChzb2NrZXQtPmluY29taW5nLnBidWYgPT0gTlVMTCkgeworICAgICAgICBzb2NrZXQtPmluY29t
aW5nLnBidWYgPSBwOworICAgIH0gZWxzZSB7CisgICAgICAgICNpZmRlZiBTT0NLRVRfU0lOR0xF
X1BCVUYKKyAgICAgICAgcmV0dXJuIEVSUl9CVUY7CisgICAgICAgICNlbHNlCisgICAgICAgIHBi
dWZfY2F0KHNvY2tldC0+aW5jb21pbmcucGJ1ZiwgcCk7CisgICAgICAgICNlbmRpZgorICAgIH0K
KworICAgIGV4ZWNfdXNlcl9jYWxsYmFjayhzb2NrZXQpOworCisgICAgcmV0dXJuIEVSUl9PSzsK
K30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBGdW5jdGlvbnMgZm9yIHNvY2tldCBz
ZW5kL3JlY2VpdmUgb3BlcmF0aW9ucy4gU29ja2V0IHNlbmQvcmVjdiBhbmQgZnJpZW5kcyBjYWxs
CisvLyB0aGVzZSB0byBkbyB0aGUgd29yay4KKworLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBzZW5k
L3NlbmR0byB0byBoYW5kbGUgVURQIHBhY2tldHMuCitTVEFUSUMgbXBfdWludF90IGx3aXBfdWRw
X3NlbmQobHdpcF9zb2NrZXRfb2JqX3QgKnNvY2tldCwgY29uc3QgYnl0ZSAqYnVmLCBtcF91aW50
X3QgbGVuLCBieXRlICppcCwgbXBfdWludF90IHBvcnQsIGludCAqX2Vycm5vKSB7CisgICAgaWYg
KGxlbiA+IDB4ZmZmZikgeworICAgICAgICAvLyBBbnkgcGFja2V0IHRoYXQgYmlnIGlzIHByb2Jh
Ymx5IGdvaW5nIHRvIGZhaWwgdGhlIHBidWZfYWxsb2MgYW55d2F5LCBidXQgbWF5IGFzIHdlbGwg
dHJ5CisgICAgICAgIGxlbiA9IDB4ZmZmZjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogbWF5YmUg
UEJVRl9ST00/CisgICAgc3RydWN0IHBidWYgKnAgPSBwYnVmX2FsbG9jKFBCVUZfVFJBTlNQT1JU
LCBsZW4sIFBCVUZfUkFNKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgICpfZXJybm8g
PSBNUF9FTk9NRU07CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1jcHkocC0+
cGF5bG9hZCwgYnVmLCBsZW4pOworCisgICAgZXJyX3QgZXJyOworICAgIGlmIChpcCA9PSBOVUxM
KSB7CisgICAgICAgIGVyciA9IHVkcF9zZW5kKHNvY2tldC0+cGNiLnVkcCwgcCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaXBfYWRkcl90IGRlc3Q7CisgICAgICAgIElQNF9BRERSKCZkZXN0LCBp
cFswXSwgaXBbMV0sIGlwWzJdLCBpcFszXSk7CisgICAgICAgIGVyciA9IHVkcF9zZW5kdG8oc29j
a2V0LT5wY2IudWRwLCBwLCAmZGVzdCwgcG9ydCk7CisgICAgfQorCisgICAgcGJ1Zl9mcmVlKHAp
OworCisgICAgLy8gdWRwX3NlbmR0byBjYW4gcmV0dXJuIDEgb24gb2NjYXNpb24gZm9yIEVTUDgy
NjYgcG9ydC4gIEl0J3Mgbm90IGtub3duIHdoeQorICAgIC8vIGJ1dCBpdCBzZWVtcyB0aGF0IHRo
ZSBzZW5kIGFjdHVhbGx5IGdvZXMgdGhyb3VnaCB3aXRob3V0IGVycm9yIGluIHRoaXMgY2FzZS4K
KyAgICAvLyBTbyB3ZSB0cmVhdCBzdWNoIGNhc2VzIGFzIGEgc3VjY2VzcyB1bnRpbCBmdXJ0aGVy
IGludmVzdGlnYXRpb24uCisgICAgaWYgKGVyciAhPSBFUlJfT0sgJiYgZXJyICE9IDEpIHsKKyAg
ICAgICAgKl9lcnJubyA9IGVycm9yX2xvb2t1cF90YWJsZVstZXJyXTsKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIH0KKworICAgIHJldHVybiBsZW47Cit9CisKKy8vIEhlbHBlciBmdW5jdGlvbiBm
b3IgcmVjdi9yZWN2ZnJvbSB0byBoYW5kbGUgVURQIHBhY2tldHMKK1NUQVRJQyBtcF91aW50X3Qg
bHdpcF91ZHBfcmVjZWl2ZShsd2lwX3NvY2tldF9vYmpfdCAqc29ja2V0LCBieXRlICpidWYsIG1w
X3VpbnRfdCBsZW4sIGJ5dGUgKmlwLCBtcF91aW50X3QgKnBvcnQsIGludCAqX2Vycm5vKSB7CisK
KyAgICBpZiAoc29ja2V0LT5pbmNvbWluZy5wYnVmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHNv
Y2tldC0+dGltZW91dCAhPSAtMSkgeworICAgICAgICAgICAgZm9yIChtcF91aW50X3QgcmV0cmll
cyA9IHNvY2tldC0+dGltZW91dCAvIDEwMDsgcmV0cmllcy0tOykgeworICAgICAgICAgICAgICAg
IG1wX2hhbF9kZWxheV9tcygxMDApOworICAgICAgICAgICAgICAgIGlmIChzb2NrZXQtPmluY29t
aW5nLnBidWYgIT0gTlVMTCkgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
c29ja2V0LT5pbmNvbWluZy5wYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAqX2Vycm5v
ID0gTVBfRVRJTUVET1VUOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdoaWxlIChzb2NrZXQtPmluY29taW5n
LnBidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHBvbGxfc29ja2V0cygpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGlwICE9IE5VTEwpIHsKKyAgICAg
ICAgbWVtY3B5KGlwLCAmc29ja2V0LT5wZWVyLCBzaXplb2Yoc29ja2V0LT5wZWVyKSk7CisgICAg
ICAgICpwb3J0ID0gc29ja2V0LT5wZWVyX3BvcnQ7CisgICAgfQorCisgICAgc3RydWN0IHBidWYg
KnAgPSBzb2NrZXQtPmluY29taW5nLnBidWY7CisKKyAgICB1MTZfdCByZXN1bHQgPSBwYnVmX2Nv
cHlfcGFydGlhbChwLCBidWYsICgocC0+dG90X2xlbiA+IGxlbikgPyBsZW4gOiBwLT50b3RfbGVu
KSwgMCk7CisgICAgcGJ1Zl9mcmVlKHApOworICAgIHNvY2tldC0+aW5jb21pbmcucGJ1ZiA9IE5V
TEw7CisKKyAgICByZXR1cm4gKG1wX3VpbnRfdCkgcmVzdWx0OworfQorCisvLyBGb3IgdXNlIGlu
IHN0cmVhbSB2aXJ0dWFsIG1ldGhvZHMKKyNkZWZpbmUgU1RSRUFNX0VSUk9SX0NIRUNLKHNvY2tl
dCkgXAorICAgICAgICBpZiAoc29ja2V0LT5zdGF0ZSA8IDApIHsgXAorICAgICAgICAgICAgKl9l
cnJubyA9IGVycm9yX2xvb2t1cF90YWJsZVstc29ja2V0LT5zdGF0ZV07IFwKKyAgICAgICAgICAg
IHJldHVybiBNUF9TVFJFQU1fRVJST1I7IFwKKyAgICAgICAgfSBcCisgICAgICAgIGFzc2VydChz
b2NrZXQtPnBjYi50Y3ApOworCisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3Igc2VuZC9zZW5kdG8g
dG8gaGFuZGxlIFRDUCBwYWNrZXRzCitTVEFUSUMgbXBfdWludF90IGx3aXBfdGNwX3NlbmQobHdp
cF9zb2NrZXRfb2JqX3QgKnNvY2tldCwgY29uc3QgYnl0ZSAqYnVmLCBtcF91aW50X3QgbGVuLCBp
bnQgKl9lcnJubykgeworICAgIC8vIENoZWNrIGZvciBhbnkgcGVuZGluZyBlcnJvcnMKKyAgICBT
VFJFQU1fRVJST1JfQ0hFQ0soc29ja2V0KTsKKworICAgIHUxNl90IGF2YWlsYWJsZSA9IHRjcF9z
bmRidWYoc29ja2V0LT5wY2IudGNwKTsKKworICAgIGlmIChhdmFpbGFibGUgPT0gMCkgeworICAg
ICAgICAvLyBOb24tYmxvY2tpbmcgc29ja2V0CisgICAgICAgIGlmIChzb2NrZXQtPnRpbWVvdXQg
PT0gMCkgeworICAgICAgICAgICAgKl9lcnJubyA9IE1QX0VBR0FJTjsKKyAgICAgICAgICAgIHJl
dHVybiBNUF9TVFJFQU1fRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBtcF91aW50X3Qgc3Rh
cnQgPSBtcF9oYWxfdGlja3NfbXMoKTsKKyAgICAgICAgLy8gQXNzdW1lIHRoYXQgU1RBVEVfUEVF
Ul9DTE9TRUQgbWF5IG1lYW4gaGFsZi1jbG9zZWQgY29ubmVjdGlvbiwgd2hlcmUgcGVlciBjbG9z
ZWQgaXQKKyAgICAgICAgLy8gc2VuZGluZyBkaXJlY3Rpb24sIGJ1dCBub3QgcmVjZWl2aW5nLiBD
b25zZXF1ZW50bHksIGNoZWNrIGZvciBib3RoIFNUQVRFX0NPTk5FQ1RFRAorICAgICAgICAvLyBh
bmQgU1RBVEVfUEVFUl9DTE9TRUQgYXMgbm9ybWFsIGNvbmRpdGlvbnMgYW5kIHN0aWxsIHdhaXRp
bmcgZm9yIGJ1ZmZlcnMgdG8gYmUgc2VudC4KKyAgICAgICAgLy8gSWYgcGVlciBmdWxseSBjbG9z
ZWQgc29ja2V0LCB3ZSB3b3VsZCBoYXZlIHNvY2tldC0+c3RhdGUgc2V0IHRvIEVSUl9SU1QgKGNv
bm5lY3Rpb24KKyAgICAgICAgLy8gcmVzZXQpIGJ5IGVycm9yIGNhbGxiYWNrLgorICAgICAgICAv
LyBBdm9pZCBzZW5kaW5nIHRvbyBzbWFsbCBwYWNrZXRzLCBzbyB3YWl0IHVudGlsIGF0IGxlYXN0
IDE2IGJ5dGVzIGF2YWlsYWJsZQorICAgICAgICB3aGlsZSAoc29ja2V0LT5zdGF0ZSA+PSBTVEFU
RV9DT05ORUNURUQgJiYgKGF2YWlsYWJsZSA9IHRjcF9zbmRidWYoc29ja2V0LT5wY2IudGNwKSkg
PCAxNikgeworICAgICAgICAgICAgaWYgKHNvY2tldC0+dGltZW91dCAhPSAtMSAmJiBtcF9oYWxf
dGlja3NfbXMoKSAtIHN0YXJ0ID4gc29ja2V0LT50aW1lb3V0KSB7CisgICAgICAgICAgICAgICAg
Kl9lcnJubyA9IE1QX0VUSU1FRE9VVDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTVBfU1RSRUFN
X0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcG9sbF9zb2NrZXRzKCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBXaGlsZSB3ZSB3YWl0ZWQsIHNvbWV0aGluZyBjb3VsZCBoYXBw
ZW4KKyAgICAgICAgU1RSRUFNX0VSUk9SX0NIRUNLKHNvY2tldCk7CisgICAgfQorCisgICAgdTE2
X3Qgd3JpdGVfbGVuID0gTUlOKGF2YWlsYWJsZSwgbGVuKTsKKworICAgIGVycl90IGVyciA9IHRj
cF93cml0ZShzb2NrZXQtPnBjYi50Y3AsIGJ1Ziwgd3JpdGVfbGVuLCBUQ1BfV1JJVEVfRkxBR19D
T1BZKTsKKyAgICBERUJVR19wcmludGYoIldyaXRlIHRvIHNvY2tldCAlcCBAJXAgJXUgYnl0ZXM6
ICVkXG4iLCBzb2NrZXQsIGJ1Ziwgd3JpdGVfbGVuLCBlcnIpOworCisgICAgaWYgKGVyciAhPSBF
UlJfT0spIHsKKyAgICAgICAgKl9lcnJubyA9IGVycm9yX2xvb2t1cF90YWJsZVstZXJyXTsKKyAg
ICAgICAgcmV0dXJuIE1QX1NUUkVBTV9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gd3JpdGVf
bGVuOworfQorCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHJlY3YvcmVjdmZyb20gdG8gaGFuZGxl
IFRDUCBwYWNrZXRzCitTVEFUSUMgbXBfdWludF90IGx3aXBfdGNwX3JlY2VpdmUobHdpcF9zb2Nr
ZXRfb2JqX3QgKnNvY2tldCwgYnl0ZSAqYnVmLCBtcF91aW50X3QgbGVuLCBpbnQgKl9lcnJubykg
eworICAgIC8vIENoZWNrIGZvciBhbnkgcGVuZGluZyBlcnJvcnMKKyAgICBTVFJFQU1fRVJST1Jf
Q0hFQ0soc29ja2V0KTsKKworICAgIGlmIChzb2NrZXQtPmluY29taW5nLnBidWYgPT0gTlVMTCkg
eworCisgICAgICAgIC8vIE5vbi1ibG9ja2luZyBzb2NrZXQKKyAgICAgICAgaWYgKHNvY2tldC0+
dGltZW91dCA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc29ja2V0LT5zdGF0ZSA9PSBTVEFURV9Q
RUVSX0NMT1NFRCkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKl9lcnJubyA9IE1QX0VBR0FJTjsKKyAgICAgICAgICAgIHJldHVybiAtMTsK
KyAgICAgICAgfQorCisgICAgICAgIG1wX3VpbnRfdCBzdGFydCA9IG1wX2hhbF90aWNrc19tcygp
OworCURFQlVHX3ByaW50ZigiV2FpdCBmb3IgZGF0YSBvbiBzb2NrZXQgJXAgdG8gcmVjZWl2ZS4u
LlxuIiwgc29ja2V0KTsKKyAgICAgICAgd2hpbGUgKHNvY2tldC0+c3RhdGUgPT0gU1RBVEVfQ09O
TkVDVEVEICYmIHNvY2tldC0+aW5jb21pbmcucGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICBp
ZiAoc29ja2V0LT50aW1lb3V0ICE9IC0xICYmIG1wX2hhbF90aWNrc19tcygpIC0gc3RhcnQgPiBz
b2NrZXQtPnRpbWVvdXQpIHsKKyAgICAgICAgICAgICAgICAqX2Vycm5vID0gTVBfRVRJTUVET1VU
OworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHBvbGxfc29ja2V0cygpOworICAgICAgICB9CisJREVCVUdfcHJpbnRmKCJEb25lXG4iKTsKKwor
ICAgICAgICBpZiAoc29ja2V0LT5zdGF0ZSA9PSBTVEFURV9QRUVSX0NMT1NFRCkgeworICAgICAg
ICAgICAgaWYgKHNvY2tldC0+aW5jb21pbmcucGJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICAg
ICAgLy8gc29ja2V0IGNsb3NlZCBhbmQgbm8gZGF0YSBsZWZ0IGluIGJ1ZmZlcgorICAgICAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHNvY2tl
dC0+c3RhdGUgIT0gU1RBVEVfQ09OTkVDVEVEKSB7CisgICAgICAgICAgICBhc3NlcnQoc29ja2V0
LT5zdGF0ZSA8IDApOworICAgICAgICAgICAgKl9lcnJubyA9IGVycm9yX2xvb2t1cF90YWJsZVst
c29ja2V0LT5zdGF0ZV07CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBhc3NlcnQoc29ja2V0LT5wY2IudGNwICE9IE5VTEwpOworCisgICAgc3RydWN0IHBi
dWYgKnAgPSBzb2NrZXQtPmluY29taW5nLnBidWY7CisKKyAgICBtcF91aW50X3QgcmVtYWluaW5n
ID0gcC0+bGVuIC0gc29ja2V0LT5yZWN2X29mZnNldDsKKyAgICBpZiAobGVuID4gcmVtYWluaW5n
KSB7CisgICAgICAgIGxlbiA9IHJlbWFpbmluZzsKKyAgICB9CisKKyAgICBtZW1jcHkoYnVmLCAo
Ynl0ZSopcC0+cGF5bG9hZCArIHNvY2tldC0+cmVjdl9vZmZzZXQsIGxlbik7CisKKyAgICByZW1h
aW5pbmcgLT0gbGVuOworICAgIGlmIChyZW1haW5pbmcgPT0gMCkgeworICAgICAgICBzb2NrZXQt
PmluY29taW5nLnBidWYgPSBwLT5uZXh0OworICAgICAgICAvLyBJZiB3ZSBkb24ndCByZWYgaGVy
ZSwgZnJlZSgpIHdpbGwgZnJlZSB0aGUgZW50aXJlIGNoYWluLAorICAgICAgICAvLyBpZiB3ZSBy
ZWYsIGl0IGRvZXMgd2hhdCB3ZSBuZWVkOiBmcmVlcyAxc3QgYnVmLCBhbmQgZGVjcmVtZW50cwor
ICAgICAgICAvLyBuZXh0IGJ1ZidzIHJlZmNvdW50IGJhY2sgdG8gMS4KKyAgICAgICAgcGJ1Zl9y
ZWYocC0+bmV4dCk7CisgICAgICAgIHBidWZfZnJlZShwKTsKKyAgICAgICAgc29ja2V0LT5yZWN2
X29mZnNldCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc29ja2V0LT5yZWN2X29mZnNldCAr
PSBsZW47CisgICAgfQorICAgIHRjcF9yZWN2ZWQoc29ja2V0LT5wY2IudGNwLCBsZW4pOworCisg
ICAgcmV0dXJuIGxlbjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLyBUaGUgc29j
a2V0IGZ1bmN0aW9ucyBwcm92aWRlZCBieSBsd2lwLnNvY2tldC4KKworU1RBVElDIGNvbnN0IG1w
X29ial90eXBlX3QgbHdpcF9zb2NrZXRfdHlwZTsKKworU1RBVElDIHZvaWQgbHdpcF9zb2NrZXRf
cHJpbnQoY29uc3QgbXBfcHJpbnRfdCAqcHJpbnQsIG1wX29ial90IHNlbGZfaW4sIG1wX3ByaW50
X2tpbmRfdCBraW5kKSB7CisgICAgbHdpcF9zb2NrZXRfb2JqX3QgKnNlbGYgPSBzZWxmX2luOwor
ICAgIG1wX3ByaW50ZihwcmludCwgIjxzb2NrZXQgc3RhdGU9JWQgdGltZW91dD0lZCBpbmNvbWlu
Zz0lcCBvZmY9JWQ+Iiwgc2VsZi0+c3RhdGUsIHNlbGYtPnRpbWVvdXQsCisgICAgICAgIHNlbGYt
PmluY29taW5nLnBidWYsIHNlbGYtPnJlY3Zfb2Zmc2V0KTsKK30KKworLy8gRklYTUU6IE9ubHkg
c3VwcG9ydHMgdHdvIGFyZ3VtZW50cyBhdCBwcmVzZW50CitTVEFUSUMgbXBfb2JqX3QgbHdpcF9z
b2NrZXRfbWFrZV9uZXcoY29uc3QgbXBfb2JqX3R5cGVfdCAqdHlwZSwgc2l6ZV90IG5fYXJncywg
c2l6ZV90IG5fa3csIGNvbnN0IG1wX29ial90ICphcmdzKSB7CisgICAgbXBfYXJnX2NoZWNrX251
bShuX2FyZ3MsIG5fa3csIDAsIDQsIGZhbHNlKTsKKworICAgIGx3aXBfc29ja2V0X29ial90ICpz
b2NrZXQgPSBtX25ld19vYmpfd2l0aF9maW5hbGlzZXIobHdpcF9zb2NrZXRfb2JqX3QpOworICAg
IHNvY2tldC0+YmFzZS50eXBlID0gKG1wX29ial90KSZsd2lwX3NvY2tldF90eXBlOworICAgIHNv
Y2tldC0+ZG9tYWluID0gTU9EX05FVFdPUktfQUZfSU5FVDsKKyAgICBzb2NrZXQtPnR5cGUgPSBN
T0RfTkVUV09SS19TT0NLX1NUUkVBTTsKKyAgICBzb2NrZXQtPmNhbGxiYWNrID0gTVBfT0JKX05V
TEw7CisgICAgaWYgKG5fYXJncyA+PSAxKSB7CisgICAgICAgIHNvY2tldC0+ZG9tYWluID0gbXBf
b2JqX2dldF9pbnQoYXJnc1swXSk7CisgICAgICAgIGlmIChuX2FyZ3MgPj0gMikgeworICAgICAg
ICAgICAgc29ja2V0LT50eXBlID0gbXBfb2JqX2dldF9pbnQoYXJnc1sxXSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBzd2l0Y2ggKHNvY2tldC0+dHlwZSkgeworICAgICAgICBjYXNlIE1PRF9O
RVRXT1JLX1NPQ0tfU1RSRUFNOiBzb2NrZXQtPnBjYi50Y3AgPSB0Y3BfbmV3KCk7IGJyZWFrOwor
ICAgICAgICBjYXNlIE1PRF9ORVRXT1JLX1NPQ0tfREdSQU06IHNvY2tldC0+cGNiLnVkcCA9IHVk
cF9uZXcoKTsgYnJlYWs7CisgICAgICAgIC8vY2FzZSBNT0RfTkVUV09SS19TT0NLX1JBVzogc29j
a2V0LT5wY2IucmF3ID0gcmF3X25ldygpOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDogbXBfcmFp
c2VfT1NFcnJvcihNUF9FSU5WQUwpOworICAgIH0KKworICAgIGlmIChzb2NrZXQtPnBjYi50Y3Ag
PT0gTlVMTCkgeworICAgICAgICBtcF9yYWlzZV9PU0Vycm9yKE1QX0VOT01FTSk7CisgICAgfQor
CisgICAgc3dpdGNoIChzb2NrZXQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19T
T0NLX1NUUkVBTTogeworICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIHNvY2tldCBvYmplY3Qg
YXMgb3VyIGNhbGxiYWNrIGFyZ3VtZW50LgorICAgICAgICAgICAgdGNwX2FyZyhzb2NrZXQtPnBj
Yi50Y3AsICh2b2lkKilzb2NrZXQpOworICAgICAgICAgICAgLy8gUmVnaXN0ZXIgb3VyIGVycm9y
IGNhbGxiYWNrLgorICAgICAgICAgICAgdGNwX2Vycihzb2NrZXQtPnBjYi50Y3AsIF9sd2lwX3Rj
cF9lcnJvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIE1P
RF9ORVRXT1JLX1NPQ0tfREdSQU06IHsKKyAgICAgICAgICAgIC8vIFJlZ2lzdGVyIG91ciByZWNl
aXZlIGNhbGxiYWNrIG5vdy4gU2luY2UgVURQIHNvY2tldHMgZG9uJ3QgcmVxdWlyZSBiaW5kaW5n
IG9yIGNvbm5lY3Rpb24KKyAgICAgICAgICAgIC8vIGJlZm9yZSB1c2UsIHRoZXJlJ3Mgbm8gb3Ro
ZXIgZ29vZCB0aW1lIHRvIGRvIGl0LgorICAgICAgICAgICAgdWRwX3JlY3Yoc29ja2V0LT5wY2Iu
dWRwLCBfbHdpcF91ZHBfaW5jb21pbmcsICh2b2lkKilzb2NrZXQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzb2NrZXQtPmluY29taW5nLnBidWYgPSBOVUxM
OworICAgIHNvY2tldC0+dGltZW91dCA9IC0xOworICAgIHNvY2tldC0+c3RhdGUgPSBTVEFURV9O
RVc7CisgICAgc29ja2V0LT5yZWN2X29mZnNldCA9IDA7CisgICAgcmV0dXJuIHNvY2tldDsKK30K
KworU1RBVElDIG1wX29ial90IGx3aXBfc29ja2V0X2Nsb3NlKG1wX29ial90IHNlbGZfaW4pIHsK
KyAgICBsd2lwX3NvY2tldF9vYmpfdCAqc29ja2V0ID0gc2VsZl9pbjsKKyAgICBib29sIHNvY2tl
dF9pc19saXN0ZW5lciA9IGZhbHNlOworICAgIGVycl90IGVycjsKKworICAgIGlmIChzb2NrZXQt
PnBjYi50Y3AgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKKyAgICB9
CisgICAgc3dpdGNoIChzb2NrZXQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19T
T0NLX1NUUkVBTTogeworICAgICAgICAgICAgaWYgKHNvY2tldC0+cGNiLnRjcC0+c3RhdGUgPT0g
TElTVEVOKSB7CisgICAgICAgICAgICAgICAgc29ja2V0X2lzX2xpc3RlbmVyID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CisJCS8qIEZsdXNoIG91dHB1dCBxdWV1ZSAqLworCQl0Y3Bfb3V0
cHV0KHNvY2tldC0+cGNiLnRjcCk7CisJICAgIH0KKworCSAgICBlcnIgPSB0Y3BfY2xvc2Uoc29j
a2V0LT5wY2IudGNwKTsKKwkgICAgREVCVUdfcHJpbnRmKCJDbG9zZWQgc29ja2V0ICVwOiAlZFxu
Iiwgc29ja2V0LCBlcnIpOworICAgICAgICAgICAgaWYgKGVyciAhPSBFUlJfT0spIHsKKyAgICAg
ICAgICAgICAgICBERUJVR19wcmludGYoImx3aXBfY2xvc2U6IGhhZCB0byBjYWxsIHRjcF9hYm9y
dCgpXG4iKTsKKyAgICAgICAgICAgICAgICB0Y3BfYWJvcnQoc29ja2V0LT5wY2IudGNwKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
TU9EX05FVFdPUktfU09DS19ER1JBTTogdWRwX3JlbW92ZShzb2NrZXQtPnBjYi51ZHApOyBicmVh
azsKKyAgICAgICAgLy9jYXNlIE1PRF9ORVRXT1JLX1NPQ0tfUkFXOiByYXdfcmVtb3ZlKHNvY2tl
dC0+cGNiLnJhdyk7IGJyZWFrOworICAgIH0KKyAgICBzb2NrZXQtPnBjYi50Y3AgPSBOVUxMOwor
ICAgIHNvY2tldC0+c3RhdGUgPSBfRVJSX0JBREY7CisgICAgaWYgKHNvY2tldC0+aW5jb21pbmcu
cGJ1ZiAhPSBOVUxMKSB7CisgICAgICAgIGlmICghc29ja2V0X2lzX2xpc3RlbmVyKSB7CisgICAg
ICAgICAgICBwYnVmX2ZyZWUoc29ja2V0LT5pbmNvbWluZy5wYnVmKTsKKyAgICAgICAgfSBlbHNl
IHsKKwkgICAgREVCVUdfcHJpbnRmKCJBYm9ydCBpbmNvbWluZyBjb25uZWN0aW9uIHJlcXVlc3Qg
JXBcbiIsIHNvY2tldC0+aW5jb21pbmcuY29ubmVjdGlvbik7CisgICAgICAgICAgICB0Y3BfYWJv
cnQoc29ja2V0LT5pbmNvbWluZy5jb25uZWN0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBzb2Nr
ZXQtPmluY29taW5nLnBidWYgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtcF9jb25zdF9u
b25lOworfQorU1RBVElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKXzEobHdpcF9zb2NrZXRfY2xv
c2Vfb2JqLCBsd2lwX3NvY2tldF9jbG9zZSk7CisKK1NUQVRJQyBtcF9vYmpfdCBsd2lwX3NvY2tl
dF9iaW5kKG1wX29ial90IHNlbGZfaW4sIG1wX29ial90IGFkZHJfaW4pIHsKKyAgICBsd2lwX3Nv
Y2tldF9vYmpfdCAqc29ja2V0ID0gc2VsZl9pbjsKKworICAgIHVpbnQ4X3QgaXBbTkVUVVRJTFNf
SVBWNEFERFJfQlVGU0laRV07CisgICAgbXBfdWludF90IHBvcnQgPSBuZXR1dGlsc19wYXJzZV9p
bmV0X2FkZHIoYWRkcl9pbiwgaXAsIE5FVFVUSUxTX0JJRyk7CisKKyAgICBpcF9hZGRyX3QgYmlu
ZF9hZGRyOworICAgIElQNF9BRERSKCZiaW5kX2FkZHIsIGlwWzBdLCBpcFsxXSwgaXBbMl0sIGlw
WzNdKTsKKworICAgIGVycl90IGVyciA9IEVSUl9BUkc7CisgICAgc3dpdGNoIChzb2NrZXQtPnR5
cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19TT0NLX1NUUkVBTTogeworICAgICAgICAg
ICAgZXJyID0gdGNwX2JpbmQoc29ja2V0LT5wY2IudGNwLCAmYmluZF9hZGRyLCBwb3J0KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTU9EX05FVFdPUktfU09D
S19ER1JBTTogeworICAgICAgICAgICAgZXJyID0gdWRwX2JpbmQoc29ja2V0LT5wY2IudWRwLCAm
YmluZF9hZGRyLCBwb3J0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKGVyciAhPSBFUlJfT0spIHsKKyAgICAgICAgbXBfcmFpc2VfT1NFcnJvcihlcnJv
cl9sb29rdXBfdGFibGVbLWVycl0pOworICAgIH0KKworICAgIERFQlVHX3ByaW50ZigibHdpcF9j
bG9zZTogQmluZCBzb2NrZXQgJXBcbiIsIHNvY2tldCk7CisgICAgcmV0dXJuIG1wX2NvbnN0X25v
bmU7Cit9CitTVEFUSUMgTVBfREVGSU5FX0NPTlNUX0ZVTl9PQkpfMihsd2lwX3NvY2tldF9iaW5k
X29iaiwgbHdpcF9zb2NrZXRfYmluZCk7CisKK1NUQVRJQyBtcF9vYmpfdCBsd2lwX3NvY2tldF9s
aXN0ZW4obXBfb2JqX3Qgc2VsZl9pbiwgbXBfb2JqX3QgYmFja2xvZ19pbikgeworICAgIGx3aXBf
c29ja2V0X29ial90ICpzb2NrZXQgPSBzZWxmX2luOworICAgIG1wX2ludF90IGJhY2tsb2cgPSBt
cF9vYmpfZ2V0X2ludChiYWNrbG9nX2luKTsKKworICAgIGlmIChzb2NrZXQtPnBjYi50Y3AgPT0g
TlVMTCkgeworICAgICAgICBtcF9yYWlzZV9PU0Vycm9yKE1QX0VCQURGKTsKKyAgICB9CisgICAg
aWYgKHNvY2tldC0+dHlwZSAhPSBNT0RfTkVUV09SS19TT0NLX1NUUkVBTSkgeworICAgICAgICBt
cF9yYWlzZV9PU0Vycm9yKE1QX0VPUE5PVFNVUFApOworICAgIH0KKworICAgIHN0cnVjdCB0Y3Bf
cGNiICpuZXdfcGNiID0gdGNwX2xpc3Rlbl93aXRoX2JhY2tsb2coc29ja2V0LT5wY2IudGNwLCAo
dThfdCliYWNrbG9nKTsKKyAgICBpZiAobmV3X3BjYiA9PSBOVUxMKSB7CisgICAgICAgIG1wX3Jh
aXNlX09TRXJyb3IoTVBfRU5PTUVNKTsKKyAgICB9CisgICAgc29ja2V0LT5wY2IudGNwID0gbmV3
X3BjYjsKKyAgICB0Y3BfYWNjZXB0KG5ld19wY2IsIF9sd2lwX3RjcF9hY2NlcHQpOworCisgICAg
REVCVUdfcHJpbnRmKCJsd2lwX2xpc3RlbjogTGlzdGVuIG9uIHNvY2tldCAlcFxuIiwgc29ja2V0
KTsKKyAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1Rf
RlVOX09CSl8yKGx3aXBfc29ja2V0X2xpc3Rlbl9vYmosIGx3aXBfc29ja2V0X2xpc3Rlbik7CisK
K1NUQVRJQyBtcF9vYmpfdCBsd2lwX3NvY2tldF9hY2NlcHQobXBfb2JqX3Qgc2VsZl9pbikgewor
ICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSBzZWxmX2luOworCisgICAgaWYgKHNvY2tl
dC0+cGNiLnRjcCA9PSBOVUxMKSB7CisgICAgICAgIG1wX3JhaXNlX09TRXJyb3IoTVBfRUJBREYp
OworICAgIH0KKyAgICBpZiAoc29ja2V0LT50eXBlICE9IE1PRF9ORVRXT1JLX1NPQ0tfU1RSRUFN
KSB7CisgICAgICAgIG1wX3JhaXNlX09TRXJyb3IoTVBfRU9QTk9UU1VQUCk7CisgICAgfQorICAg
IC8vIEkgbmVlZCB0byBkbyB0aGlzIGJlY2F1c2UgInRjcF9hY2NlcHRlZCIsIGxhdGVyLCBpcyBh
IG1hY3JvLgorICAgIHN0cnVjdCB0Y3BfcGNiICpsaXN0ZW5lciA9IHNvY2tldC0+cGNiLnRjcDsK
KyAgICBpZiAobGlzdGVuZXItPnN0YXRlICE9IExJU1RFTikgeworICAgICAgICBtcF9yYWlzZV9P
U0Vycm9yKE1QX0VJTlZBTCk7CisgICAgfQorCisgICAgLy8gYWNjZXB0IGluY29taW5nIGNvbm5l
Y3Rpb24KKyAgICBpZiAoc29ja2V0LT5pbmNvbWluZy5jb25uZWN0aW9uID09IE5VTEwpIHsKKyAg
ICAgICAgaWYgKHNvY2tldC0+dGltZW91dCA9PSAwKSB7CisgICAgICAgICAgICBtcF9yYWlzZV9P
U0Vycm9yKE1QX0VBR0FJTik7CisgICAgICAgIH0gZWxzZSBpZiAoc29ja2V0LT50aW1lb3V0ICE9
IC0xKSB7CisgICAgICAgICAgICBmb3IgKG1wX3VpbnRfdCByZXRyaWVzID0gc29ja2V0LT50aW1l
b3V0IC8gMTAwOyByZXRyaWVzLS07KSB7CisgICAgICAgICAgICAgICAgbXBfaGFsX2RlbGF5X21z
KDEwMCk7CisgICAgICAgICAgICAgICAgaWYgKHNvY2tldC0+aW5jb21pbmcuY29ubmVjdGlvbiAh
PSBOVUxMKSBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzb2NrZXQtPmlu
Y29taW5nLmNvbm5lY3Rpb24gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG1wX3JhaXNlX09T
RXJyb3IoTVBfRVRJTUVET1VUKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKwkg
ICAgREVCVUdfcHJpbnRmKCJXYWl0IGZvciBjb25uZWN0aW9uIG9uIHNvY2tldCAlcFxuIiwgc29j
a2V0KTsKKyAgICAgICAgICAgIHdoaWxlIChzb2NrZXQtPmluY29taW5nLmNvbm5lY3Rpb24gPT0g
TlVMTCkgeworICAgICAgICAgICAgICAgIHBvbGxfc29ja2V0cygpOworICAgICAgICAgICAgfQor
CSAgICBERUJVR19wcmludGYoIkRvbmVcbiIpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Y3JlYXRlIG5ldyBzb2NrZXQgb2JqZWN0CisgICAgbHdpcF9zb2NrZXRfb2JqX3QgKnNvY2tldDIg
PSBtX25ld19vYmpfd2l0aF9maW5hbGlzZXIobHdpcF9zb2NrZXRfb2JqX3QpOworICAgIHNvY2tl
dDItPmJhc2UudHlwZSA9IChtcF9vYmpfdCkmbHdpcF9zb2NrZXRfdHlwZTsKKworICAgIC8vIFdl
IGdldCBhIG5ldyBwY2IgaGFuZGxlLi4uCisgICAgc29ja2V0Mi0+cGNiLnRjcCA9IHNvY2tldC0+
aW5jb21pbmcuY29ubmVjdGlvbjsKKyAgICBzb2NrZXQtPmluY29taW5nLmNvbm5lY3Rpb24gPSBO
VUxMOworCisgICAgLy8gLi4uYW5kIHNldCB1cCB0aGUgbmV3IHNvY2tldCBmb3IgaXQuCisgICAg
c29ja2V0Mi0+ZG9tYWluID0gTU9EX05FVFdPUktfQUZfSU5FVDsKKyAgICBzb2NrZXQyLT50eXBl
ID0gTU9EX05FVFdPUktfU09DS19TVFJFQU07CisgICAgc29ja2V0Mi0+aW5jb21pbmcucGJ1ZiA9
IE5VTEw7CisgICAgc29ja2V0Mi0+dGltZW91dCA9IHNvY2tldC0+dGltZW91dDsKKyAgICBzb2Nr
ZXQyLT5zdGF0ZSA9IFNUQVRFX0NPTk5FQ1RFRDsKKyAgICBzb2NrZXQyLT5yZWN2X29mZnNldCA9
IDA7CisgICAgc29ja2V0Mi0+Y2FsbGJhY2sgPSBNUF9PQkpfTlVMTDsKKyAgICB0Y3BfYXJnKHNv
Y2tldDItPnBjYi50Y3AsICh2b2lkKilzb2NrZXQyKTsKKyAgICB0Y3BfZXJyKHNvY2tldDItPnBj
Yi50Y3AsIF9sd2lwX3RjcF9lcnJvcik7CisgICAgdGNwX3JlY3Yoc29ja2V0Mi0+cGNiLnRjcCwg
X2x3aXBfdGNwX3JlY3YpOworICAgIERFQlVHX3ByaW50ZigiTmV3IHNvY2tldCBmb3IgZW5kcG9p
bnQgY29ubmVjdGlvbjogJXBcbiIsIHNvY2tldDIpOworCisgICAgdGNwX2FjY2VwdGVkKGxpc3Rl
bmVyKTsKKworICAgIC8vIG1ha2UgdGhlIHJldHVybiB2YWx1ZQorICAgIHVpbnQ4X3QgaXBbTkVU
VVRJTFNfSVBWNEFERFJfQlVGU0laRV07CisgICAgbWVtY3B5KGlwLCAmKHNvY2tldDItPnBjYi50
Y3AtPnJlbW90ZV9pcCksIHNpemVvZihpcCkpOworICAgIG1wX3VpbnRfdCBwb3J0ID0gKG1wX3Vp
bnRfdClzb2NrZXQyLT5wY2IudGNwLT5yZW1vdGVfcG9ydDsKKyAgICBtcF9vYmpfdHVwbGVfdCAq
Y2xpZW50ID0gbXBfb2JqX25ld190dXBsZSgyLCBOVUxMKTsKKyAgICBjbGllbnQtPml0ZW1zWzBd
ID0gc29ja2V0MjsKKyAgICBjbGllbnQtPml0ZW1zWzFdID0gbmV0dXRpbHNfZm9ybWF0X2luZXRf
YWRkcihpcCwgcG9ydCwgTkVUVVRJTFNfQklHKTsKKworICAgIHJldHVybiBjbGllbnQ7Cit9CitT
VEFUSUMgTVBfREVGSU5FX0NPTlNUX0ZVTl9PQkpfMShsd2lwX3NvY2tldF9hY2NlcHRfb2JqLCBs
d2lwX3NvY2tldF9hY2NlcHQpOworCitTVEFUSUMgbXBfb2JqX3QgbHdpcF9zb2NrZXRfY29ubmVj
dChtcF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBhZGRyX2luKSB7CisgICAgbHdpcF9zb2NrZXRf
b2JqX3QgKnNvY2tldCA9IHNlbGZfaW47CisKKyAgICBpZiAoc29ja2V0LT5wY2IudGNwID09IE5V
TEwpIHsKKyAgICAgICAgbXBfcmFpc2VfT1NFcnJvcihNUF9FQkFERik7CisgICAgfQorCisgICAg
Ly8gZ2V0IGFkZHJlc3MKKyAgICB1aW50OF90IGlwW05FVFVUSUxTX0lQVjRBRERSX0JVRlNJWkVd
OworICAgIG1wX3VpbnRfdCBwb3J0ID0gbmV0dXRpbHNfcGFyc2VfaW5ldF9hZGRyKGFkZHJfaW4s
IGlwLCBORVRVVElMU19CSUcpOworCisgICAgaXBfYWRkcl90IGRlc3Q7CisgICAgSVA0X0FERFIo
JmRlc3QsIGlwWzBdLCBpcFsxXSwgaXBbMl0sIGlwWzNdKTsKKworICAgIGVycl90IGVyciA9IEVS
Ul9BUkc7CisgICAgc3dpdGNoIChzb2NrZXQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVU
V09SS19TT0NLX1NUUkVBTTogeworICAgICAgICAgICAgaWYgKHNvY2tldC0+c3RhdGUgIT0gU1RB
VEVfTkVXKSB7CisgICAgICAgICAgICAgICAgaWYgKHNvY2tldC0+c3RhdGUgPT0gU1RBVEVfQ09O
TkVDVEVEKSB7CisgICAgICAgICAgICAgICAgICAgIG1wX3JhaXNlX09TRXJyb3IoTVBfRUlTQ09O
Tik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbXBfcmFp
c2VfT1NFcnJvcihNUF9FQUxSRUFEWSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgLy8gUmVnaXN0ZXIgb3VyIHJlY2VpdmUgY2FsbGJhY2suCisgICAgICAg
ICAgICB0Y3BfcmVjdihzb2NrZXQtPnBjYi50Y3AsIF9sd2lwX3RjcF9yZWN2KTsKKyAgICAgICAg
ICAgIHNvY2tldC0+c3RhdGUgPSBTVEFURV9DT05ORUNUSU5HOworICAgICAgICAgICAgZXJyID0g
dGNwX2Nvbm5lY3Qoc29ja2V0LT5wY2IudGNwLCAmZGVzdCwgcG9ydCwgX2x3aXBfdGNwX2Nvbm5l
Y3RlZCk7CisgICAgICAgICAgICBpZiAoZXJyICE9IEVSUl9PSykgeworICAgICAgICAgICAgICAg
IHNvY2tldC0+c3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgICAgICAgICAgbXBfcmFpc2VfT1NF
cnJvcihlcnJvcl9sb29rdXBfdGFibGVbLWVycl0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgc29ja2V0LT5wZWVyX3BvcnQgPSAobXBfdWludF90KXBvcnQ7CisgICAgICAgICAgICBtZW1j
cHkoc29ja2V0LT5wZWVyLCAmZGVzdCwgc2l6ZW9mKHNvY2tldC0+cGVlcikpOworICAgICAgICAg
ICAgLy8gQW5kIG5vdyB3ZSB3YWl0Li4uCisgICAgICAgICAgICBpZiAoc29ja2V0LT50aW1lb3V0
ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgZm9yIChtcF91aW50X3QgcmV0cmllcyA9IHNvY2tl
dC0+dGltZW91dCAvIDEwMDsgcmV0cmllcy0tOykgeworICAgICAgICAgICAgICAgICAgICBtcF9o
YWxfZGVsYXlfbXMoMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNvY2tldC0+c3RhdGUg
IT0gU1RBVEVfQ09OTkVDVElORykgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmIChzb2NrZXQtPnN0YXRlID09IFNUQVRFX0NPTk5FQ1RJTkcpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbXBfcmFpc2VfT1NFcnJvcihNUF9FSU5QUk9HUkVTUyk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoc29j
a2V0LT5zdGF0ZSA9PSBTVEFURV9DT05ORUNUSU5HKSB7CisgICAgICAgICAgICAgICAgICAgIHBv
bGxfc29ja2V0cygpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGlmIChzb2NrZXQtPnN0YXRlID09IFNUQVRFX0NPTk5FQ1RFRCkgeworICAgICAgICAgICAg
ICAgZXJyID0gRVJSX09LOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgIGVy
ciA9IHNvY2tldC0+c3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIE1PRF9ORVRXT1JLX1NPQ0tfREdSQU06IHsKKyAgICAgICAg
ICAgIGVyciA9IHVkcF9jb25uZWN0KHNvY2tldC0+cGNiLnVkcCwgJmRlc3QsIHBvcnQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZXJyICE9IEVSUl9P
SykgeworICAgICAgICBtcF9yYWlzZV9PU0Vycm9yKGVycm9yX2xvb2t1cF90YWJsZVstZXJyXSk7
CisgICAgfQorCisgICAgcmV0dXJuIG1wX2NvbnN0X25vbmU7Cit9CitTVEFUSUMgTVBfREVGSU5F
X0NPTlNUX0ZVTl9PQkpfMihsd2lwX3NvY2tldF9jb25uZWN0X29iaiwgbHdpcF9zb2NrZXRfY29u
bmVjdCk7CisKK1NUQVRJQyB2b2lkIGx3aXBfc29ja2V0X2NoZWNrX2Nvbm5lY3RlZChsd2lwX3Nv
Y2tldF9vYmpfdCAqc29ja2V0KSB7CisgICAgaWYgKHNvY2tldC0+cGNiLnRjcCA9PSBOVUxMKSB7
CisgICAgICAgIC8vIG5vdCBjb25uZWN0ZWQKKyAgICAgICAgaW50IF9lcnJubyA9IGVycm9yX2xv
b2t1cF90YWJsZVstc29ja2V0LT5zdGF0ZV07CisgICAgICAgIHNvY2tldC0+c3RhdGUgPSBfRVJS
X0JBREY7CisgICAgICAgIG1wX3JhaXNlX09TRXJyb3IoX2Vycm5vKTsKKyAgICB9Cit9CisKK1NU
QVRJQyBtcF9vYmpfdCBsd2lwX3NvY2tldF9zZW5kKG1wX29ial90IHNlbGZfaW4sIG1wX29ial90
IGJ1Zl9pbikgeworICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSBzZWxmX2luOworICAg
IGludCBfZXJybm87CisKKyAgICBsd2lwX3NvY2tldF9jaGVja19jb25uZWN0ZWQoc29ja2V0KTsK
KworICAgIG1wX2J1ZmZlcl9pbmZvX3QgYnVmaW5mbzsKKyAgICBtcF9nZXRfYnVmZmVyX3JhaXNl
KGJ1Zl9pbiwgJmJ1ZmluZm8sIE1QX0JVRkZFUl9SRUFEKTsKKworICAgIG1wX3VpbnRfdCByZXQg
PSAwOworICAgIHN3aXRjaCAoc29ja2V0LT50eXBlKSB7CisgICAgICAgIGNhc2UgTU9EX05FVFdP
UktfU09DS19TVFJFQU06IHsKKyAgICAgICAgICAgIHJldCA9IGx3aXBfdGNwX3NlbmQoc29ja2V0
LCBidWZpbmZvLmJ1ZiwgYnVmaW5mby5sZW4sICZfZXJybm8pOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19TT0NLX0RHUkFNOiB7CisgICAg
ICAgICAgICByZXQgPSBsd2lwX3VkcF9zZW5kKHNvY2tldCwgYnVmaW5mby5idWYsIGJ1ZmluZm8u
bGVuLCBOVUxMLCAwLCAmX2Vycm5vKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmIChyZXQgPT0gLTEpIHsKKyAgICAgICAgbXBfcmFpc2VfT1NFcnJvcihfZXJy
bm8pOworICAgIH0KKworICAgIHJldHVybiBtcF9vYmpfbmV3X2ludF9mcm9tX3VpbnQocmV0KTsK
K30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1RfRlVOX09CSl8yKGx3aXBfc29ja2V0X3NlbmRfb2Jq
LCBsd2lwX3NvY2tldF9zZW5kKTsKKworU1RBVElDIG1wX29ial90IGx3aXBfc29ja2V0X3JlY3Yo
bXBfb2JqX3Qgc2VsZl9pbiwgbXBfb2JqX3QgbGVuX2luKSB7CisgICAgbHdpcF9zb2NrZXRfb2Jq
X3QgKnNvY2tldCA9IHNlbGZfaW47CisgICAgaW50IF9lcnJubzsKKworICAgIGx3aXBfc29ja2V0
X2NoZWNrX2Nvbm5lY3RlZChzb2NrZXQpOworCisgICAgbXBfaW50X3QgbGVuID0gbXBfb2JqX2dl
dF9pbnQobGVuX2luKTsKKyAgICB2c3RyX3QgdnN0cjsKKyAgICB2c3RyX2luaXRfbGVuKCZ2c3Ry
LCBsZW4pOworCisgICAgbXBfdWludF90IHJldCA9IDA7CisgICAgc3dpdGNoIChzb2NrZXQtPnR5
cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19TT0NLX1NUUkVBTTogeworICAgICAgICAg
ICAgcmV0ID0gbHdpcF90Y3BfcmVjZWl2ZShzb2NrZXQsIChieXRlKil2c3RyLmJ1ZiwgbGVuLCAm
X2Vycm5vKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTU9E
X05FVFdPUktfU09DS19ER1JBTTogeworICAgICAgICAgICAgcmV0ID0gbHdpcF91ZHBfcmVjZWl2
ZShzb2NrZXQsIChieXRlKil2c3RyLmJ1ZiwgbGVuLCBOVUxMLCBOVUxMLCAmX2Vycm5vKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmIChyZXQgPT0gLTEpIHsK
KyAgICAgICAgbXBfcmFpc2VfT1NFcnJvcihfZXJybm8pOworICAgIH0KKworICAgIGlmIChyZXQg
PT0gMCkgeworICAgICAgICByZXR1cm4gbXBfY29uc3RfZW1wdHlfYnl0ZXM7CisgICAgfQorICAg
IHZzdHIubGVuID0gcmV0OworICAgIHJldHVybiBtcF9vYmpfbmV3X3N0cl9mcm9tX3ZzdHIoJm1w
X3R5cGVfYnl0ZXMsICZ2c3RyKTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1RfRlVOX09CSl8y
KGx3aXBfc29ja2V0X3JlY3Zfb2JqLCBsd2lwX3NvY2tldF9yZWN2KTsKKworU1RBVElDIG1wX29i
al90IGx3aXBfc29ja2V0X3NlbmR0byhtcF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBkYXRhX2lu
LCBtcF9vYmpfdCBhZGRyX2luKSB7CisgICAgbHdpcF9zb2NrZXRfb2JqX3QgKnNvY2tldCA9IHNl
bGZfaW47CisgICAgaW50IF9lcnJubzsKKworICAgIGx3aXBfc29ja2V0X2NoZWNrX2Nvbm5lY3Rl
ZChzb2NrZXQpOworCisgICAgbXBfYnVmZmVyX2luZm9fdCBidWZpbmZvOworICAgIG1wX2dldF9i
dWZmZXJfcmFpc2UoZGF0YV9pbiwgJmJ1ZmluZm8sIE1QX0JVRkZFUl9SRUFEKTsKKworICAgIHVp
bnQ4X3QgaXBbTkVUVVRJTFNfSVBWNEFERFJfQlVGU0laRV07CisgICAgbXBfdWludF90IHBvcnQg
PSBuZXR1dGlsc19wYXJzZV9pbmV0X2FkZHIoYWRkcl9pbiwgaXAsIE5FVFVUSUxTX0JJRyk7CisK
KyAgICBtcF91aW50X3QgcmV0ID0gMDsKKyAgICBzd2l0Y2ggKHNvY2tldC0+dHlwZSkgeworICAg
ICAgICBjYXNlIE1PRF9ORVRXT1JLX1NPQ0tfU1RSRUFNOiB7CisgICAgICAgICAgICByZXQgPSBs
d2lwX3RjcF9zZW5kKHNvY2tldCwgYnVmaW5mby5idWYsIGJ1ZmluZm8ubGVuLCAmX2Vycm5vKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTU9EX05FVFdPUktf
U09DS19ER1JBTTogeworICAgICAgICAgICAgcmV0ID0gbHdpcF91ZHBfc2VuZChzb2NrZXQsIGJ1
ZmluZm8uYnVmLCBidWZpbmZvLmxlbiwgaXAsIHBvcnQsICZfZXJybm8pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJldCA9PSAtMSkgeworICAgICAgICBt
cF9yYWlzZV9PU0Vycm9yKF9lcnJubyk7CisgICAgfQorCisgICAgcmV0dXJuIG1wX29ial9uZXdf
aW50X2Zyb21fdWludChyZXQpOworfQorU1RBVElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKXzMo
bHdpcF9zb2NrZXRfc2VuZHRvX29iaiwgbHdpcF9zb2NrZXRfc2VuZHRvKTsKKworU1RBVElDIG1w
X29ial90IGx3aXBfc29ja2V0X3JlY3Zmcm9tKG1wX29ial90IHNlbGZfaW4sIG1wX29ial90IGxl
bl9pbikgeworICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSBzZWxmX2luOworICAgIGlu
dCBfZXJybm87CisKKyAgICBsd2lwX3NvY2tldF9jaGVja19jb25uZWN0ZWQoc29ja2V0KTsKKwor
ICAgIG1wX2ludF90IGxlbiA9IG1wX29ial9nZXRfaW50KGxlbl9pbik7CisgICAgdnN0cl90IHZz
dHI7CisgICAgdnN0cl9pbml0X2xlbigmdnN0ciwgbGVuKTsKKyAgICBieXRlIGlwWzRdOworICAg
IG1wX3VpbnRfdCBwb3J0OworCisgICAgbXBfdWludF90IHJldCA9IDA7CisgICAgc3dpdGNoIChz
b2NrZXQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19TT0NLX1NUUkVBTTogewor
ICAgICAgICAgICAgbWVtY3B5KGlwLCAmc29ja2V0LT5wZWVyLCBzaXplb2Yoc29ja2V0LT5wZWVy
KSk7CisgICAgICAgICAgICBwb3J0ID0gKG1wX3VpbnRfdCkgc29ja2V0LT5wZWVyX3BvcnQ7Cisg
ICAgICAgICAgICByZXQgPSBsd2lwX3RjcF9yZWNlaXZlKHNvY2tldCwgKGJ5dGUqKXZzdHIuYnVm
LCBsZW4sICZfZXJybm8pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBNT0RfTkVUV09SS19TT0NLX0RHUkFNOiB7CisgICAgICAgICAgICByZXQgPSBsd2lwX3Vk
cF9yZWNlaXZlKHNvY2tldCwgKGJ5dGUqKXZzdHIuYnVmLCBsZW4sIGlwLCAmcG9ydCwgJl9lcnJu
byk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocmV0ID09
IC0xKSB7CisgICAgICAgIG1wX3JhaXNlX09TRXJyb3IoX2Vycm5vKTsKKyAgICB9CisKKyAgICBt
cF9vYmpfdCB0dXBsZVsyXTsKKyAgICBpZiAocmV0ID09IDApIHsKKyAgICAgICAgdHVwbGVbMF0g
PSBtcF9jb25zdF9lbXB0eV9ieXRlczsKKyAgICB9IGVsc2UgeworICAgICAgICB2c3RyLmxlbiA9
IHJldDsKKyAgICAgICAgdHVwbGVbMF0gPSBtcF9vYmpfbmV3X3N0cl9mcm9tX3ZzdHIoJm1wX3R5
cGVfYnl0ZXMsICZ2c3RyKTsKKyAgICB9CisgICAgdHVwbGVbMV0gPSBuZXR1dGlsc19mb3JtYXRf
aW5ldF9hZGRyKGlwLCBwb3J0LCBORVRVVElMU19CSUcpOworICAgIHJldHVybiBtcF9vYmpfbmV3
X3R1cGxlKDIsIHR1cGxlKTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1RfRlVOX09CSl8yKGx3
aXBfc29ja2V0X3JlY3Zmcm9tX29iaiwgbHdpcF9zb2NrZXRfcmVjdmZyb20pOworCitTVEFUSUMg
bXBfb2JqX3QgbHdpcF9zb2NrZXRfc2VuZGFsbChtcF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBi
dWZfaW4pIHsKKyAgICBsd2lwX3NvY2tldF9vYmpfdCAqc29ja2V0ID0gc2VsZl9pbjsKKyAgICBs
d2lwX3NvY2tldF9jaGVja19jb25uZWN0ZWQoc29ja2V0KTsKKworICAgIGludCBfZXJybm87Cisg
ICAgbXBfYnVmZmVyX2luZm9fdCBidWZpbmZvOworICAgIG1wX2dldF9idWZmZXJfcmFpc2UoYnVm
X2luLCAmYnVmaW5mbywgTVBfQlVGRkVSX1JFQUQpOworCisgICAgbXBfdWludF90IHJldCA9IDA7
CisgICAgc3dpdGNoIChzb2NrZXQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19T
T0NLX1NUUkVBTTogeworICAgICAgICAgICAgaWYgKHNvY2tldC0+dGltZW91dCA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgLy8gQmVoYXZpb3Igb2Ygc2VuZGFsbCgpIGZvciBub24tYmxvY2tpbmcg
c29ja2V0cyBpc24ndCBleHBsaWNpdGx5IHNwZWNpZmllZC4KKyAgICAgICAgICAgICAgICAvLyBC
dXQgaXQncyBzcGVjaWZpZWQgdGhhdCAiT24gZXJyb3IsIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQs
IHRoZXJlIGlzIG5vCisgICAgICAgICAgICAgICAgLy8gd2F5IHRvIGRldGVybWluZSBob3cgbXVj
aCBkYXRhLCBpZiBhbnksIHdhcyBzdWNjZXNzZnVsbHkgc2VudC4iIFRoZW4sIHRoZQorICAgICAg
ICAgICAgICAgIC8vIG1vc3QgdXNlZnVsIGJlaGF2aW9yIGlzOiBjaGVjayB3aGV0aGVyIHdlIHdp
bGwgYmUgYWJsZSB0byBzZW5kIGFsbCBvZiBpbnB1dAorICAgICAgICAgICAgICAgIC8vIGRhdGEg
d2l0aG91dCBFQUdBSU4sIGFuZCBpZiB3b24ndCBiZSwgcmFpc2UgaXQgd2l0aG91dCBzZW5kaW5n
IGFueS4KKyAgICAgICAgICAgICAgICBpZiAoYnVmaW5mby5sZW4gPiB0Y3Bfc25kYnVmKHNvY2tl
dC0+cGNiLnRjcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbXBfcmFpc2VfT1NFcnJvcihNUF9F
QUdBSU4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8v
IFRPRE86IEluIENQeXRob24zLjUsIHNvY2tldCB0aW1lb3V0IHNob3VsZCBhcHBseSB0byB0aGUK
KyAgICAgICAgICAgIC8vIGVudGlyZSBzZW5kYWxsKCkgb3BlcmF0aW9uLCBub3QgdG8gaW5kaXZp
ZHVhbCBzZW5kKCkgY2h1bmtzLgorICAgICAgICAgICAgd2hpbGUgKGJ1ZmluZm8ubGVuICE9IDAp
IHsKKyAgICAgICAgICAgICAgICByZXQgPSBsd2lwX3RjcF9zZW5kKHNvY2tldCwgYnVmaW5mby5i
dWYsIGJ1ZmluZm8ubGVuLCAmX2Vycm5vKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IC0x
KSB7CisgICAgICAgICAgICAgICAgICAgIG1wX3JhaXNlX09TRXJyb3IoX2Vycm5vKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmaW5mby5sZW4gLT0gcmV0OworICAgICAg
ICAgICAgICAgIGJ1ZmluZm8uYnVmID0gKGNoYXIqKWJ1ZmluZm8uYnVmICsgcmV0OworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBNT0Rf
TkVUV09SS19TT0NLX0RHUkFNOgorICAgICAgICAgICAgbXBfcmFpc2VfTm90SW1wbGVtZW50ZWRF
cnJvcigiIik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gbXBfY29u
c3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1RfRlVOX09CSl8yKGx3aXBfc29ja2V0
X3NlbmRhbGxfb2JqLCBsd2lwX3NvY2tldF9zZW5kYWxsKTsKKworU1RBVElDIG1wX29ial90IGx3
aXBfc29ja2V0X3NldHRpbWVvdXQobXBfb2JqX3Qgc2VsZl9pbiwgbXBfb2JqX3QgdGltZW91dF9p
bikgeworICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSBzZWxmX2luOworICAgIG1wX3Vp
bnRfdCB0aW1lb3V0OworICAgIGlmICh0aW1lb3V0X2luID09IG1wX2NvbnN0X25vbmUpIHsKKyAg
ICAgICAgdGltZW91dCA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgICNpZiBNSUNST1BZX1BZ
X0JVSUxUSU5TX0ZMT0FUCisgICAgICAgIHRpbWVvdXQgPSAxMDAwICogbXBfb2JqX2dldF9mbG9h
dCh0aW1lb3V0X2luKTsKKyAgICAgICAgI2Vsc2UKKyAgICAgICAgdGltZW91dCA9IDEwMDAgKiBt
cF9vYmpfZ2V0X2ludCh0aW1lb3V0X2luKTsKKyAgICAgICAgI2VuZGlmCisgICAgfQorICAgIHNv
Y2tldC0+dGltZW91dCA9IHRpbWVvdXQ7CisgICAgcmV0dXJuIG1wX2NvbnN0X25vbmU7Cit9CitT
VEFUSUMgTVBfREVGSU5FX0NPTlNUX0ZVTl9PQkpfMihsd2lwX3NvY2tldF9zZXR0aW1lb3V0X29i
aiwgbHdpcF9zb2NrZXRfc2V0dGltZW91dCk7CisKK1NUQVRJQyBtcF9vYmpfdCBsd2lwX3NvY2tl
dF9zZXRibG9ja2luZyhtcF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBmbGFnX2luKSB7CisgICAg
bHdpcF9zb2NrZXRfb2JqX3QgKnNvY2tldCA9IHNlbGZfaW47CisgICAgYm9vbCB2YWwgPSBtcF9v
YmpfaXNfdHJ1ZShmbGFnX2luKTsKKyAgICBpZiAodmFsKSB7CisgICAgICAgIHNvY2tldC0+dGlt
ZW91dCA9IC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIHNvY2tldC0+dGltZW91dCA9IDA7Cisg
ICAgfQorICAgIHJldHVybiBtcF9jb25zdF9ub25lOworfQorU1RBVElDIE1QX0RFRklORV9DT05T
VF9GVU5fT0JKXzIobHdpcF9zb2NrZXRfc2V0YmxvY2tpbmdfb2JqLCBsd2lwX3NvY2tldF9zZXRi
bG9ja2luZyk7CisKK1NUQVRJQyBtcF9vYmpfdCBsd2lwX3NvY2tldF9zZXRzb2Nrb3B0KG1wX3Vp
bnRfdCBuX2FyZ3MsIGNvbnN0IG1wX29ial90ICphcmdzKSB7CisgICAgKHZvaWQpbl9hcmdzOyAv
LyBhbHdheXMgNAorICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSBhcmdzWzBdOworCisg
ICAgaW50IG9wdCA9IG1wX29ial9nZXRfaW50KGFyZ3NbMl0pOworICAgIGlmIChvcHQgPT0gMjAp
IHsKKyAgICAgICAgaWYgKGFyZ3NbM10gPT0gbXBfY29uc3Rfbm9uZSkgeworICAgICAgICAgICAg
c29ja2V0LT5jYWxsYmFjayA9IE1QX09CSl9OVUxMOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgc29ja2V0LT5jYWxsYmFjayA9IGFyZ3NbM107CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1wX2NvbnN0X25vbmU7CisgICAgfQorCisgICAgc3dpdGNoIChvcHQpIHsKKyAgICAgICAg
Ly8gbGV2ZWw6IFNPTF9TT0NLRVQKKyAgICAgICAgY2FzZSBTT0ZfUkVVU0VBRERSOiB7CisgICAg
ICAgICAgICBtcF9pbnRfdCB2YWwgPSBtcF9vYmpfZ2V0X2ludChhcmdzWzNdKTsKKyAgICAgICAg
ICAgIC8vIE9wdGlvbnMgYXJlIGNvbW1vbiBmb3IgVURQIGFuZCBUQ1AgcGNiJ3MuCisgICAgICAg
ICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICAgICAgaXBfc2V0X29wdGlvbihzb2NrZXQtPnBj
Yi50Y3AsIFNPRl9SRVVTRUFERFIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBpcF9yZXNldF9vcHRpb24oc29ja2V0LT5wY2IudGNwLCBTT0ZfUkVVU0VBRERSKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8g
bGV2ZWw6IElQUFJPVE9fSVAKKyAgICAgICAgY2FzZSBJUF9BRERfTUVNQkVSU0hJUDogeworICAg
ICAgICAgICAgbXBfYnVmZmVyX2luZm9fdCBidWZpbmZvOworICAgICAgICAgICAgbXBfZ2V0X2J1
ZmZlcl9yYWlzZShhcmdzWzNdLCAmYnVmaW5mbywgTVBfQlVGRkVSX1JFQUQpOworICAgICAgICAg
ICAgaWYgKGJ1ZmluZm8ubGVuICE9IHNpemVvZihpcF9hZGRyX3QpICogMikgeworICAgICAgICAg
ICAgICAgIG1wX3JhaXNlX1ZhbHVlRXJyb3IoTlVMTCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIC8vIFBPU0lYIHNldHNvY2tvcHQgaGFzIG9yZGVyOiBncm91cCBhZGRyLCBpZiBhZGRy
LCBsd0lQIGhhcyBpdCB2aWNlLXZlcnNhCisgICAgICAgICAgICBlcnJfdCBlcnIgPSBpZ21wX2pv
aW5ncm91cCgoaXBfYWRkcl90KilidWZpbmZvLmJ1ZiArIDEsIGJ1ZmluZm8uYnVmKTsKKyAgICAg
ICAgICAgIGlmIChlcnIgIT0gRVJSX09LKSB7CisgICAgICAgICAgICAgICAgbXBfcmFpc2VfT1NF
cnJvcihlcnJvcl9sb29rdXBfdGFibGVbLWVycl0pOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcHJp
bnRmKCJXYXJuaW5nOiBsd2lwLnNldHNvY2tvcHQoKSBub3QgaW1wbGVtZW50ZWRcbiIpOworICAg
IH0KKyAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1Rf
RlVOX09CSl9WQVJfQkVUV0VFTihsd2lwX3NvY2tldF9zZXRzb2Nrb3B0X29iaiwgNCwgNCwgbHdp
cF9zb2NrZXRfc2V0c29ja29wdCk7CisKK1NUQVRJQyBtcF9vYmpfdCBsd2lwX3NvY2tldF9tYWtl
ZmlsZShtcF91aW50X3Qgbl9hcmdzLCBjb25zdCBtcF9vYmpfdCAqYXJncykgeworICAgICh2b2lk
KW5fYXJnczsKKyAgICByZXR1cm4gYXJnc1swXTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1Rf
RlVOX09CSl9WQVJfQkVUV0VFTihsd2lwX3NvY2tldF9tYWtlZmlsZV9vYmosIDEsIDMsIGx3aXBf
c29ja2V0X21ha2VmaWxlKTsKKworU1RBVElDIG1wX3VpbnRfdCBsd2lwX3NvY2tldF9yZWFkKG1w
X29ial90IHNlbGZfaW4sIHZvaWQgKmJ1ZiwgbXBfdWludF90IHNpemUsIGludCAqZXJyY29kZSkg
eworICAgIGx3aXBfc29ja2V0X29ial90ICpzb2NrZXQgPSBzZWxmX2luOworCisgICAgc3dpdGNo
IChzb2NrZXQtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19TT0NLX1NUUkVBTToK
KyAgICAgICAgICAgIHJldHVybiBsd2lwX3RjcF9yZWNlaXZlKHNvY2tldCwgYnVmLCBzaXplLCBl
cnJjb2RlKTsKKyAgICAgICAgY2FzZSBNT0RfTkVUV09SS19TT0NLX0RHUkFNOgorICAgICAgICAg
ICAgcmV0dXJuIGx3aXBfdWRwX3JlY2VpdmUoc29ja2V0LCBidWYsIHNpemUsIE5VTEwsIE5VTEws
IGVycmNvZGUpOworICAgIH0KKyAgICAvLyBVbnJlYWNoYWJsZQorICAgIHJldHVybiBNUF9TVFJF
QU1fRVJST1I7Cit9CisKK1NUQVRJQyBtcF91aW50X3QgbHdpcF9zb2NrZXRfd3JpdGUobXBfb2Jq
X3Qgc2VsZl9pbiwgY29uc3Qgdm9pZCAqYnVmLCBtcF91aW50X3Qgc2l6ZSwgaW50ICplcnJjb2Rl
KSB7CisgICAgbHdpcF9zb2NrZXRfb2JqX3QgKnNvY2tldCA9IHNlbGZfaW47CisKKyAgICBzd2l0
Y2ggKHNvY2tldC0+dHlwZSkgeworICAgICAgICBjYXNlIE1PRF9ORVRXT1JLX1NPQ0tfU1RSRUFN
OgorICAgICAgICAgICAgcmV0dXJuIGx3aXBfdGNwX3NlbmQoc29ja2V0LCBidWYsIHNpemUsIGVy
cmNvZGUpOworICAgICAgICBjYXNlIE1PRF9ORVRXT1JLX1NPQ0tfREdSQU06CisgICAgICAgICAg
ICByZXR1cm4gbHdpcF91ZHBfc2VuZChzb2NrZXQsIGJ1Ziwgc2l6ZSwgTlVMTCwgMCwgZXJyY29k
ZSk7CisgICAgfQorICAgIC8vIFVucmVhY2hhYmxlCisgICAgcmV0dXJuIE1QX1NUUkVBTV9FUlJP
UjsKK30KKworU1RBVElDIG1wX3VpbnRfdCBsd2lwX3NvY2tldF9pb2N0bChtcF9vYmpfdCBzZWxm
X2luLCBtcF91aW50X3QgcmVxdWVzdCwgdWludHB0cl90IGFyZywgaW50ICplcnJjb2RlKSB7Cisg
ICAgbHdpcF9zb2NrZXRfb2JqX3QgKnNvY2tldCA9IHNlbGZfaW47CisgICAgbXBfdWludF90IHJl
dDsKKworICAgIGlmIChyZXF1ZXN0ID09IE1QX1NUUkVBTV9QT0xMKSB7CisgICAgICAgIHVpbnRw
dHJfdCBmbGFncyA9IGFyZzsKKyAgICAgICAgcmV0ID0gMDsKKworICAgICAgICBpZiAoZmxhZ3Mg
JiBNUF9TVFJFQU1fUE9MTF9SRCAmJiBzb2NrZXQtPmluY29taW5nLnBidWYgIT0gTlVMTCkgewor
ICAgICAgICAgICAgcmV0IHw9IE1QX1NUUkVBTV9QT0xMX1JEOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGZsYWdzICYgTVBfU1RSRUFNX1BPTExfV1IgJiYgdGNwX3NuZGJ1Zihzb2NrZXQtPnBj
Yi50Y3ApID4gMCkgeworICAgICAgICAgICAgcmV0IHw9IE1QX1NUUkVBTV9QT0xMX1dSOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNvY2tldC0+c3RhdGUgPT0gU1RBVEVfUEVFUl9DTE9TRUQp
IHsKKyAgICAgICAgICAgIC8vIFBlZXItY2xvc2VkIHNvY2tldCBpcyBib3RoIHJlYWRhYmxlIGFu
ZCB3cml0YWJsZTogcmVhZCB3aWxsCisgICAgICAgICAgICAvLyByZXR1cm4gRU9GLCB3cml0ZSAt
IGVycm9yLiBXaXRob3V0IHRoaXMgcG9sbCB3aWxsIGhhbmcgb24gYQorICAgICAgICAgICAgLy8g
c29ja2V0IHdoaWNoIHdhcyBjbG9zZWQgYnkgcGVlci4KKyAgICAgICAgICAgIHJldCB8PSBmbGFn
cyAmIChNUF9TVFJFQU1fUE9MTF9SRCB8IE1QX1NUUkVBTV9QT0xMX1dSKTsKKyAgICAgICAgfQor
CisgICAgfSBlbHNlIHsKKyAgICAgICAgKmVycmNvZGUgPSBNUF9FSU5WQUw7CisgICAgICAgIHJl
dCA9IE1QX1NUUkVBTV9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitTVEFU
SUMgY29uc3QgbXBfcm9tX21hcF9lbGVtX3QgbHdpcF9zb2NrZXRfbG9jYWxzX2RpY3RfdGFibGVb
XSA9IHsKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfX19kZWxfXyksIE1QX1JPTV9QVFIoJmx3
aXBfc29ja2V0X2Nsb3NlX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfY2xvc2Up
LCBNUF9ST01fUFRSKCZsd2lwX3NvY2tldF9jbG9zZV9vYmopIH0sCisgICAgeyBNUF9ST01fUVNU
UihNUF9RU1RSX2JpbmQpLCBNUF9ST01fUFRSKCZsd2lwX3NvY2tldF9iaW5kX29iaikgfSwKKyAg
ICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfbGlzdGVuKSwgTVBfUk9NX1BUUigmbHdpcF9zb2NrZXRf
bGlzdGVuX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfYWNjZXB0KSwgTVBfUk9N
X1BUUigmbHdpcF9zb2NrZXRfYWNjZXB0X29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FT
VFJfY29ubmVjdCksIE1QX1JPTV9QVFIoJmx3aXBfc29ja2V0X2Nvbm5lY3Rfb2JqKSB9LAorICAg
IHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9zZW5kKSwgTVBfUk9NX1BUUigmbHdpcF9zb2NrZXRfc2Vu
ZF9vYmopIH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX3JlY3YpLCBNUF9ST01fUFRSKCZs
d2lwX3NvY2tldF9yZWN2X29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfc2VuZHRv
KSwgTVBfUk9NX1BUUigmbHdpcF9zb2NrZXRfc2VuZHRvX29iaikgfSwKKyAgICB7IE1QX1JPTV9R
U1RSKE1QX1FTVFJfcmVjdmZyb20pLCBNUF9ST01fUFRSKCZsd2lwX3NvY2tldF9yZWN2ZnJvbV9v
YmopIH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX3NlbmRhbGwpLCBNUF9ST01fUFRSKCZs
d2lwX3NvY2tldF9zZW5kYWxsX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfc2V0
dGltZW91dCksIE1QX1JPTV9QVFIoJmx3aXBfc29ja2V0X3NldHRpbWVvdXRfb2JqKSB9LAorICAg
IHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9zZXRibG9ja2luZyksIE1QX1JPTV9QVFIoJmx3aXBfc29j
a2V0X3NldGJsb2NraW5nX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfc2V0c29j
a29wdCksIE1QX1JPTV9QVFIoJmx3aXBfc29ja2V0X3NldHNvY2tvcHRfb2JqKSB9LAorICAgIHsg
TVBfUk9NX1FTVFIoTVBfUVNUUl9tYWtlZmlsZSksIE1QX1JPTV9QVFIoJmx3aXBfc29ja2V0X21h
a2VmaWxlX29iaikgfSwKKworICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9yZWFkKSwgTVBfUk9N
X1BUUigmbXBfc3RyZWFtX3JlYWRfb2JqKSB9LAorICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9y
ZWFkaW50byksIE1QX1JPTV9QVFIoJm1wX3N0cmVhbV9yZWFkaW50b19vYmopIH0sCisgICAgeyBN
UF9ST01fUVNUUihNUF9RU1RSX3JlYWRsaW5lKSwgTVBfUk9NX1BUUigmbXBfc3RyZWFtX3VuYnVm
ZmVyZWRfcmVhZGxpbmVfb2JqKSB9LAorICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl93cml0ZSks
IE1QX1JPTV9QVFIoJm1wX3N0cmVhbV93cml0ZV9vYmopIH0sCit9OworU1RBVElDIE1QX0RFRklO
RV9DT05TVF9ESUNUKGx3aXBfc29ja2V0X2xvY2Fsc19kaWN0LCBsd2lwX3NvY2tldF9sb2NhbHNf
ZGljdF90YWJsZSk7CisKK1NUQVRJQyBjb25zdCBtcF9zdHJlYW1fcF90IGx3aXBfc29ja2V0X3N0
cmVhbV9wID0geworICAgIC5yZWFkID0gbHdpcF9zb2NrZXRfcmVhZCwKKyAgICAud3JpdGUgPSBs
d2lwX3NvY2tldF93cml0ZSwKKyAgICAuaW9jdGwgPSBsd2lwX3NvY2tldF9pb2N0bCwKK307CisK
K1NUQVRJQyBjb25zdCBtcF9vYmpfdHlwZV90IGx3aXBfc29ja2V0X3R5cGUgPSB7CisgICAgeyAm
bXBfdHlwZV90eXBlIH0sCisgICAgLm5hbWUgPSBNUF9RU1RSX3NvY2tldCwKKyAgICAucHJpbnQg
PSBsd2lwX3NvY2tldF9wcmludCwKKyAgICAubWFrZV9uZXcgPSBsd2lwX3NvY2tldF9tYWtlX25l
dywKKyAgICAucHJvdG9jb2wgPSAmbHdpcF9zb2NrZXRfc3RyZWFtX3AsCisgICAgLmxvY2Fsc19k
aWN0ID0gKG1wX29ial9kaWN0X3QqKSZsd2lwX3NvY2tldF9sb2NhbHNfZGljdCwKK307CisKKy8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCisvLyBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgbWVtb3J5IHBy
b3RlY3Rpb24uIGx3SVAgaGFzIGl0cyBvd24gbWVtb3J5IG1hbmFnZW1lbnQKKy8vIHJvdXRpbmVz
IGZvciBpdHMgaW50ZXJuYWwgc3RydWN0dXJlcywgYW5kIHNpbmNlIHRoZXkgbWlnaHQgYmUgY2Fs
bGVkIGluCisvLyBpbnRlcnJ1cHQgaGFuZGxlcnMsIHRoZXkgbmVlZCBzb21lIHByb3RlY3Rpb24u
CisvKgorc3lzX3Byb3RfdCBzeXNfYXJjaF9wcm90ZWN0KCkgeworICAgIHJldHVybiAoc3lzX3By
b3RfdClNSUNST1BZX0JFR0lOX0FUT01JQ19TRUNUSU9OKCk7Cit9CisKK3ZvaWQgc3lzX2FyY2hf
dW5wcm90ZWN0KHN5c19wcm90X3Qgc3RhdGUpIHsKKyAgICBNSUNST1BZX0VORF9BVE9NSUNfU0VD
VElPTigobXBfdWludF90KXN0YXRlKTsKK30KKyovCisKKy8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisvLyBQb2xsaW5nIGNhbGxiYWNrcyBmb3IgdGhlIGludGVyZmFjZXMgY29ubmVjdGVkIHRvIGx3
SVAuIFJpZ2h0IG5vdyBpdCBjYWxscworLy8gaXRzZWxmIGEgImxpc3QiIGJ1dCBpc24ndDsgd2Ug
b25seSBzdXBwb3J0IGEgc2luZ2xlIGludGVyZmFjZS4KKwordHlwZWRlZiBzdHJ1Y3QgbmljX3Bv
bGwgeworICAgIHZvaWQgKCogcG9sbCkodm9pZCAqYXJnKTsKKyAgICB2b2lkICpwb2xsX2FyZzsK
K30gbmljX3BvbGxfdDsKKworU1RBVElDIG5pY19wb2xsX3QgbHdpcF9wb2xsX2xpc3Q7CisKK3Zv
aWQgbW9kX2x3aXBfcmVnaXN0ZXJfcG9sbCh2b2lkICgqIHBvbGwpKHZvaWQgKmFyZyksIHZvaWQg
KnBvbGxfYXJnKSB7CisgICAgREVCVUdfcHJpbnRmKCJSZWdpc3RlciBwb2xsOiAlcCAoYXJncCAl
cClcbiIsIHBvbGwsIHBvbGxfYXJnKTsKKyAgICBsd2lwX3BvbGxfbGlzdC5wb2xsID0gcG9sbDsK
KyAgICBsd2lwX3BvbGxfbGlzdC5wb2xsX2FyZyA9IHBvbGxfYXJnOworfQorCit2b2lkIG1vZF9s
d2lwX2RlcmVnaXN0ZXJfcG9sbCh2b2lkICgqIHBvbGwpKHZvaWQgKmFyZyksIHZvaWQgKnBvbGxf
YXJnKSB7CisgICAgbHdpcF9wb2xsX2xpc3QucG9sbCA9IE5VTEw7Cit9CisKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisvLyBUaGUgbHdpcCBnbG9iYWwgZnVuY3Rpb25zLgorI2luY2x1ZGUgPG5l
dGlmL3VrbmV0ZGV2Lmg+CisKK1NUQVRJQyBtcF9vYmpfdCBtb2RfbHdpcF9yZXNldCgpIHsKKyAg
ICBERUJVR19wcmludGYoImx3aXAgcmVzZXRcbiIpOworICAgIC8vbHdpcF9pbml0KCk7CisgICAg
bHdpcF9wb2xsX2xpc3QucG9sbCA9IE5VTEw7CisKKyAgICAvKiBSZWdpc3RlciB1a25ldGRldiBw
b2xsaW5nIHRvIG1vbHdpcCAqLworICAgIG1vZF9sd2lwX3JlZ2lzdGVyX3BvbGwodWtuZXRkZXZf
cG9sbF9hbGwsIE5VTEwpOworICAgIHJldHVybiBtcF9jb25zdF9ub25lOworfQorTVBfREVGSU5F
X0NPTlNUX0ZVTl9PQkpfMChtb2RfbHdpcF9yZXNldF9vYmosIG1vZF9sd2lwX3Jlc2V0KTsKKwor
U1RBVElDIG1wX29ial90IG1vZF9sd2lwX2NhbGxiYWNrKCkgeworICAgIERFQlVHX3ByaW50Zigi
RXhlYyBjYWxsYmFja1xuIik7CisgICAgaWYgKGx3aXBfcG9sbF9saXN0LnBvbGwgIT0gTlVMTCkg
eworICAgICAgICBsd2lwX3BvbGxfbGlzdC5wb2xsKGx3aXBfcG9sbF9saXN0LnBvbGxfYXJnKTsK
KyAgICB9CisgICAgc3lzX2NoZWNrX3RpbWVvdXRzKCk7CisgICAgcmV0dXJuIG1wX2NvbnN0X25v
bmU7Cit9CitNUF9ERUZJTkVfQ09OU1RfRlVOX09CSl8wKG1vZF9sd2lwX2NhbGxiYWNrX29iaiwg
bW9kX2x3aXBfY2FsbGJhY2spOworCit0eXBlZGVmIHN0cnVjdCBfZ2V0YWRkcmluZm9fc3RhdGVf
dCB7CisgICAgdm9sYXRpbGUgaW50IHN0YXR1czsKKyAgICB2b2xhdGlsZSBpcF9hZGRyX3QgaXBh
ZGRyOworfSBnZXRhZGRyaW5mb19zdGF0ZV90OworCisvLyBDYWxsYmFjayBmb3IgaW5jb21pbmcg
RE5TIHJlcXVlc3RzLgorU1RBVElDIHZvaWQgbHdpcF9nZXRhZGRyaW5mb19jYihjb25zdCBjaGFy
ICpuYW1lLCBpcF9hZGRyX3QgKmlwYWRkciwgdm9pZCAqYXJnKSB7CisgICAgZ2V0YWRkcmluZm9f
c3RhdGVfdCAqc3RhdGUgPSBhcmc7CisgICAgaWYgKGlwYWRkciAhPSBOVUxMKSB7CisgICAgICAg
IHN0YXRlLT5zdGF0dXMgPSAxOworICAgICAgICBzdGF0ZS0+aXBhZGRyID0gKmlwYWRkcjsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBlcnJvcgorICAgICAgICBzdGF0ZS0+c3RhdHVzID0gLTI7
CisgICAgfQorfQorCisvLyBsd2lwLmdldGFkZHJpbmZvCitTVEFUSUMgbXBfb2JqX3QgbHdpcF9n
ZXRhZGRyaW5mbyhzaXplX3Qgbl9hcmdzLCBjb25zdCBtcF9vYmpfdCAqYXJncykgeworICAgIGlm
IChuX2FyZ3MgPiAyKSB7CisgICAgICAgIG1wX3dhcm5pbmcoImdldGFkZHJpbmZvIGNvbnN0cmFp
bnRzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICB9CisgICAgREVCVUdfcHJpbnRmKCJnZXRhZGRyaW5m
b1xuIik7CisKKyAgICBtcF9vYmpfdCBob3N0X2luID0gYXJnc1swXSwgcG9ydF9pbiA9IGFyZ3Nb
MV07CisgICAgY29uc3QgY2hhciAqaG9zdCA9IG1wX29ial9zdHJfZ2V0X3N0cihob3N0X2luKTsK
KyAgICBtcF9pbnRfdCBwb3J0ID0gbXBfb2JqX2dldF9pbnQocG9ydF9pbik7CisKKyAgICBnZXRh
ZGRyaW5mb19zdGF0ZV90IHN0YXRlOworICAgIHN0YXRlLnN0YXR1cyA9IDA7CisKKyAgICBlcnJf
dCByZXQgPSBkbnNfZ2V0aG9zdGJ5bmFtZShob3N0LCAoaXBfYWRkcl90Kikmc3RhdGUuaXBhZGRy
LCBsd2lwX2dldGFkZHJpbmZvX2NiLCAmc3RhdGUpOworICAgIHN3aXRjaCAocmV0KSB7CisgICAg
ICAgIGNhc2UgRVJSX09LOgorICAgICAgICAgICAgLy8gY2FjaGVkCisgICAgICAgICAgICBzdGF0
ZS5zdGF0dXMgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVJSX0lOUFJP
R1JFU1M6CisgICAgICAgICAgICB3aGlsZSAoc3RhdGUuc3RhdHVzID09IDApIHsKKyAgICAgICAg
ICAgICAgICBwb2xsX3NvY2tldHMoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3RhdGUuc3RhdHVzID0gcmV0OworICAg
IH0KKworICAgIGlmIChzdGF0ZS5zdGF0dXMgPCAwKSB7CisgICAgICAgIC8vIFRPRE86IENQeXRo
b24gcmFpc2VzIGdhaWVycm9yLCB3ZSByYWlzZSB3aXRoIG5hdGl2ZSBsd0lQIG5lZ2F0aXZlIGVy
cm9yCisgICAgICAgIC8vIHZhbHVlcywgdG8gZGlmZmVyZW50aWF0ZSBmcm9tIG5vcm1hbCBlcnJu
bydzIGF0IGxlYXN0IGluIHN1Y2ggd2F5LgorICAgICAgICBtcF9yYWlzZV9PU0Vycm9yKHN0YXRl
LnN0YXR1cyk7CisgICAgfQorCisgICAgbXBfb2JqX3R1cGxlX3QgKnR1cGxlID0gbXBfb2JqX25l
d190dXBsZSg1LCBOVUxMKTsKKyAgICB0dXBsZS0+aXRlbXNbMF0gPSBNUF9PQkpfTkVXX1NNQUxM
X0lOVChNT0RfTkVUV09SS19BRl9JTkVUKTsKKyAgICB0dXBsZS0+aXRlbXNbMV0gPSBNUF9PQkpf
TkVXX1NNQUxMX0lOVChNT0RfTkVUV09SS19TT0NLX1NUUkVBTSk7CisgICAgdHVwbGUtPml0ZW1z
WzJdID0gTVBfT0JKX05FV19TTUFMTF9JTlQoMCk7CisgICAgdHVwbGUtPml0ZW1zWzNdID0gTVBf
T0JKX05FV19RU1RSKE1QX1FTVFJfKTsKKyAgICB0dXBsZS0+aXRlbXNbNF0gPSBuZXR1dGlsc19m
b3JtYXRfaW5ldF9hZGRyKCh1aW50OF90Kikmc3RhdGUuaXBhZGRyLCBwb3J0LCBORVRVVElMU19C
SUcpOworICAgIHJldHVybiBtcF9vYmpfbmV3X2xpc3QoMSwgKG1wX29ial90KikmdHVwbGUpOwor
fQorU1RBVElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKX1ZBUl9CRVRXRUVOKGx3aXBfZ2V0YWRk
cmluZm9fb2JqLCAyLCA2LCBsd2lwX2dldGFkZHJpbmZvKTsKKworLy8gRGVidWcgZnVuY3Rpb25z
CisvKgorU1RBVElDIG1wX29ial90IGx3aXBfcHJpbnRfcGNicygpIHsKKyAgICB0Y3BfZGVidWdf
cHJpbnRfcGNicygpOworICAgIHJldHVybiBtcF9jb25zdF9ub25lOworfQorTVBfREVGSU5FX0NP
TlNUX0ZVTl9PQkpfMChsd2lwX3ByaW50X3BjYnNfb2JqLCBsd2lwX3ByaW50X3BjYnMpOworKi8K
KyNpZmRlZiBNSUNST1BZX1BZX0xXSVAKKworU1RBVElDIGNvbnN0IG1wX3JvbV9tYXBfZWxlbV90
IG1wX21vZHVsZV9sd2lwX2dsb2JhbHNfdGFibGVbXSA9IHsKKyAgICB7IE1QX1JPTV9RU1RSKE1Q
X1FTVFJfX19uYW1lX18pLCBNUF9ST01fUVNUUihNUF9RU1RSX2x3aXApIH0sCisgICAgeyBNUF9S
T01fUVNUUihNUF9RU1RSX3Jlc2V0KSwgTVBfUk9NX1BUUigmbW9kX2x3aXBfcmVzZXRfb2JqKSB9
LAorICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9jYWxsYmFjayksIE1QX1JPTV9QVFIoJm1vZF9s
d2lwX2NhbGxiYWNrX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfZ2V0YWRkcmlu
Zm8pLCBNUF9ST01fUFRSKCZsd2lwX2dldGFkZHJpbmZvX29iaikgfSwKKyAgICAvL3sgTVBfUk9N
X1FTVFIoTVBfUVNUUl9wcmludF9wY2JzKSwgTVBfUk9NX1BUUigmbHdpcF9wcmludF9wY2JzX29i
aikgfSwKKyAgICAvLyBvYmplY3RzCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX3NvY2tldCks
IE1QX1JPTV9QVFIoJmx3aXBfc29ja2V0X3R5cGUpIH0sCisjaWZkZWYgTUlDUk9QWV9QWV9MV0lQ
X1NMSVAKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfc2xpcCksIE1QX1JPTV9QVFIoJmx3aXBf
c2xpcF90eXBlKSB9LAorI2VuZGlmCisgICAgLy8gY2xhc3MgY29uc3RhbnRzCisgICAgeyBNUF9S
T01fUVNUUihNUF9RU1RSX0FGX0lORVQpLCBNUF9ST01fSU5UKE1PRF9ORVRXT1JLX0FGX0lORVQp
IH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX0FGX0lORVQ2KSwgTVBfUk9NX0lOVChNT0Rf
TkVUV09SS19BRl9JTkVUNikgfSwKKworICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9TT0NLX1NU
UkVBTSksIE1QX1JPTV9JTlQoTU9EX05FVFdPUktfU09DS19TVFJFQU0pIH0sCisgICAgeyBNUF9S
T01fUVNUUihNUF9RU1RSX1NPQ0tfREdSQU0pLCBNUF9ST01fSU5UKE1PRF9ORVRXT1JLX1NPQ0tf
REdSQU0pIH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX1NPQ0tfUkFXKSwgTVBfUk9NX0lO
VChNT0RfTkVUV09SS19TT0NLX1JBVykgfSwKKworICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9T
T0xfU09DS0VUKSwgTVBfUk9NX0lOVCgxKSB9LAorICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9T
T19SRVVTRUFERFIpLCBNUF9ST01fSU5UKFNPRl9SRVVTRUFERFIpIH0sCisKKyAgICB7IE1QX1JP
TV9RU1RSKE1QX1FTVFJfSVBQUk9UT19JUCksIE1QX1JPTV9JTlQoMCkgfSwKKyAgICB7IE1QX1JP
TV9RU1RSKE1QX1FTVFJfSVBfQUREX01FTUJFUlNISVApLCBNUF9ST01fSU5UKElQX0FERF9NRU1C
RVJTSElQKSB9LAorfTsKKworU1RBVElDIE1QX0RFRklORV9DT05TVF9ESUNUKG1wX21vZHVsZV9s
d2lwX2dsb2JhbHMsIG1wX21vZHVsZV9sd2lwX2dsb2JhbHNfdGFibGUpOworCitjb25zdCBtcF9v
YmpfbW9kdWxlX3QgbXBfbW9kdWxlX2x3aXAgPSB7CisgICAgLmJhc2UgPSB7ICZtcF90eXBlX21v
ZHVsZSB9LAorICAgIC5nbG9iYWxzID0gKG1wX29ial9kaWN0X3QqKSZtcF9tb2R1bGVfbHdpcF9n
bG9iYWxzLAorfTsKKworI2VuZGlmIC8vIE1JQ1JPUFlfUFlfTFdJUApkaWZmIC0tZ2l0IGEvZXh0
bW9kL21vZHVzb2NrZXQuYyBiL2V4dG1vZC9tb2R1c29ja2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNjE0MDJlMAotLS0gL2Rldi9udWxsCisrKyBiL2V4dG1vZC9tb2R1
c29ja2V0LmMKQEAgLTAsMCArMSw2MjQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgTWljcm9QeXRob24gcHJvamVjdCwgaHR0cDovL21pY3JvcHl0aG9uLm9yZy8KKyAqCisgKiBU
aGUgTUlUIExpY2Vuc2UgKE1JVCkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIDIwMTQgRGFt
aWVuIFAuIEdlb3JnZQorICogQ29weXJpZ2h0IChjKSAyMDE0IFBhdWwgU29rb2xvdnNreQorICoK
KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg
cGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0
ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0
aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh
dGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs
IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNv
ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAq
IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6
CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu
b3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwg
cG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURF
RCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJ
TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO
T05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQVVUSE9SUyBPUiBDT1BZ
UklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgor
ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP
VEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEgg
VEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZU
V0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5o
PgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVk
ZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBh
L2luZXQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8bWF0aC5oPgorCisjaW5jbHVkZSAicHkvb2JqdHVwbGUuaCIKKyNpbmNsdWRlICJweS9vYmpz
dHIuaCIKKyNpbmNsdWRlICJweS9ydW50aW1lLmgiCisjaW5jbHVkZSAicHkvc3RyZWFtLmgiCisj
aW5jbHVkZSAicHkvYnVpbHRpbi5oIgorI2luY2x1ZGUgInB5L21waGFsLmgiCisKKy8qCisgIFRo
ZSBpZGVhIG9mIHRoaXMgbW9kdWxlIGlzIHRvIGltcGxlbWVudCByZWFzb25hYmxlIG1pbmltdW0g
b2YKKyAgc29ja2V0LXJlbGF0ZWQgZnVuY3Rpb25zIHRvIHdyaXRlIHR5cGljYWwgY2xpZW50cyBh
bmQgc2VydmVycy4KKyAgVGhlIG1vZHVsZSBuYW1lZCAidXNvY2tldCIgb24gcHVycG9zZSwgdG8g
YWxsb3cgdG8gbWFrZQorICBQeXRob24tbGV2ZWwgbW9kdWxlIG1vcmUgKG9yIGZ1bGx5KSBjb21w
YXRpYmxlIHdpdGggQ1B5dGhvbgorICAic29ja2V0IiwgZS5nLjoKKyAgLS0tLSBzb2NrZXQucHkg
LS0tLQorICBmcm9tIHVzb2NrZXQgaW1wb3J0ICoKKyAgZnJvbSBzb2NrZXRfbW9yZV9mdW5jcyBp
bXBvcnQgKgorICBmcm9tIHNvY2tldF9tb3JlX2Z1bmNzMiBpbXBvcnQgKgorICAtLS0tLS0tLS0t
LS0tLS0tLS0tCisgIEkuZS4gdGhpcyBtb2R1bGUgc2hvdWxkIHN0YXkgbGVhbiwgYW5kIG1vcmUg
ZnVuY3Rpb25zIChpZiBuZWVkZWQpCisgIHNob3VsZCBiZSBhZGQgdG8gc2VwYXJhdGUgbW9kdWxl
cyAoQyBvciBQeXRob24gbGV2ZWwpLgorICovCisKKy8vIFRoaXMgdHlwZSBtdXN0ICJpbmhlcml0
IiBmcm9tIG1wX29ial9mZGZpbGVfdCwgaS5lLiBtYXRjaGluZyBzdWJzZXQgb2YKKy8vIGZpZWxk
cyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBsYXlvdXQuCit0eXBlZGVmIHN0cnVjdCBfbXBfb2JqX3Nv
Y2tldF90IHsKKyAgICBtcF9vYmpfYmFzZV90IGJhc2U7CisgICAgaW50IGZkOworICAgIGJvb2wg
YmxvY2tpbmc7Cit9IG1wX29ial9zb2NrZXRfdDsKKworY29uc3QgbXBfb2JqX3R5cGVfdCBtcF90
eXBlX3NvY2tldDsKKworLy8gSGVscGVyIGZ1bmN0aW9ucworc3RhdGljIGlubGluZSBtcF9vYmpf
dCBtcF9vYmpfZnJvbV9zb2NrYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHNvY2ts
ZW5fdCBsZW4pIHsKKyAgICByZXR1cm4gbXBfb2JqX25ld19ieXRlcygoY29uc3QgYnl0ZSAqKWFk
ZHIsIGxlbik7Cit9CisKK1NUQVRJQyBtcF9vYmpfc29ja2V0X3QgKnNvY2tldF9uZXcoaW50IGZk
KSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpvID0gbV9uZXdfb2JqKG1wX29ial9zb2NrZXRfdCk7
CisgICAgby0+YmFzZS50eXBlID0gJm1wX3R5cGVfc29ja2V0OworICAgIG8tPmZkID0gZmQ7Cisg
ICAgby0+YmxvY2tpbmcgPSB0cnVlOworICAgIHJldHVybiBvOworfQorCisKK1NUQVRJQyB2b2lk
IHNvY2tldF9wcmludChjb25zdCBtcF9wcmludF90ICpwcmludCwgbXBfb2JqX3Qgc2VsZl9pbiwg
bXBfcHJpbnRfa2luZF90IGtpbmQpIHsKKyAgICAodm9pZClraW5kOworICAgIG1wX29ial9zb2Nr
ZXRfdCAqc2VsZiA9IE1QX09CSl9UT19QVFIoc2VsZl9pbik7CisgICAgbXBfcHJpbnRmKHByaW50
LCAiPF9zb2NrZXQgJWQ+Iiwgc2VsZi0+ZmQpOworfQorCitTVEFUSUMgbXBfdWludF90IHNvY2tl
dF9yZWFkKG1wX29ial90IG9faW4sIHZvaWQgKmJ1ZiwgbXBfdWludF90IHNpemUsIGludCAqZXJy
Y29kZSkgeworICAgIG1wX29ial9zb2NrZXRfdCAqbyA9IE1QX09CSl9UT19QVFIob19pbik7Cisg
ICAgbXBfaW50X3QgciA9IHJlYWQoby0+ZmQsIGJ1Ziwgc2l6ZSk7CisgICAgaWYgKHIgPT0gLTEp
IHsKKyAgICAgICAgaW50IGVyciA9IGVycm5vOworICAgICAgICAvLyBPbiBibG9ja2luZyBzb2Nr
ZXQsIHdlIGdldCBFQUdBSU4gaW4gY2FzZSBTT19SQ1ZUSU1FTy9TT19TTkRUSU1FTworICAgICAg
ICAvLyB0aW1lZCBvdXQsIGFuZCBuZWVkIHRvIGNvbnZlcnQgdGhhdCB0byBFVElNRURPVVQuCisg
ICAgICAgIGlmIChlcnIgPT0gRUFHQUlOICYmIG8tPmJsb2NraW5nKSB7CisgICAgICAgICAgICBl
cnIgPSBNUF9FVElNRURPVVQ7CisgICAgICAgIH0KKworICAgICAgICAqZXJyY29kZSA9IGVycjsK
KyAgICAgICAgcmV0dXJuIE1QX1NUUkVBTV9FUlJPUjsKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9
CisKK1NUQVRJQyBtcF91aW50X3Qgc29ja2V0X3dyaXRlKG1wX29ial90IG9faW4sIGNvbnN0IHZv
aWQgKmJ1ZiwgbXBfdWludF90IHNpemUsIGludCAqZXJyY29kZSkgeworICAgIG1wX29ial9zb2Nr
ZXRfdCAqbyA9IE1QX09CSl9UT19QVFIob19pbik7CisgICAgbXBfaW50X3QgciA9IHdyaXRlKG8t
PmZkLCBidWYsIHNpemUpOworICAgIGlmIChyID09IC0xKSB7CisgICAgICAgIGludCBlcnIgPSBl
cnJubzsKKyAgICAgICAgLy8gT24gYmxvY2tpbmcgc29ja2V0LCB3ZSBnZXQgRUFHQUlOIGluIGNh
c2UgU09fUkNWVElNRU8vU09fU05EVElNRU8KKyAgICAgICAgLy8gdGltZWQgb3V0LCBhbmQgbmVl
ZCB0byBjb252ZXJ0IHRoYXQgdG8gRVRJTUVET1VULgorICAgICAgICBpZiAoZXJyID09IEVBR0FJ
TiAmJiBvLT5ibG9ja2luZykgeworICAgICAgICAgICAgZXJyID0gTVBfRVRJTUVET1VUOworICAg
ICAgICB9CisKKyAgICAgICAgKmVycmNvZGUgPSBlcnI7CisgICAgICAgIHJldHVybiBNUF9TVFJF
QU1fRVJST1I7CisgICAgfQorICAgIHJldHVybiByOworfQorCitTVEFUSUMgbXBfdWludF90IHNv
Y2tldF9pb2N0bChtcF9vYmpfdCBvX2luLCBtcF91aW50X3QgcmVxdWVzdCwgdWludHB0cl90IGFy
ZywgaW50ICplcnJjb2RlKSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpzZWxmID0gTVBfT0JKX1RP
X1BUUihvX2luKTsKKyAgICAodm9pZClhcmc7CisgICAgc3dpdGNoIChyZXF1ZXN0KSB7CisgICAg
ICAgIGNhc2UgTVBfU1RSRUFNX0NMT1NFOgorICAgICAgICAgICAgLy8gVGhlcmUncyBhIFBPU0lY
IGRyYW1hIHJlZ2FyZGluZyByZXR1cm4gdmFsdWUgb2YgY2xvc2UgaW4gZ2VuZXJhbCwKKyAgICAg
ICAgICAgIC8vIGFuZCBFSU5UUiBlcnJvciBpbiBwYXJ0aWN1bGFyLiBTZWUgZS5nLgorICAgICAg
ICAgICAgLy8gaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvNTc2NDc4LworICAgICAgICAgICAgLy8g
aHR0cDovL2F1c3Rpbmdyb3VwYnVncy5uZXQvdmlldy5waHA/aWQ9NTI5CisgICAgICAgICAgICAv
LyBUaGUgcmF0aW9uYWxlIE1pY3JvUHl0aG9uIGZvbGxvd3MgaXMgdGhhdCBjbG9zZSgpIGp1c3Qg
cmVsZWFzZXMKKyAgICAgICAgICAgIC8vIGZpbGUgZGVzY3JpcHRvci4gSWYgeW91J3JlIGludGVy
ZXN0ZWQgdG8gY2F0Y2ggSS9PIGVycm9ycyBiZWZvcmUKKyAgICAgICAgICAgIC8vIGNsb3Npbmcg
ZmQsIGZzeW5jKCkgaXQuCisgICAgICAgICAgICBjbG9zZShzZWxmLT5mZCk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKworICAgICAgICBjYXNlIE1QX1NUUkVBTV9HRVRfRklMRU5POgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYtPmZkOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAq
ZXJyY29kZSA9IE1QX0VJTlZBTDsKKyAgICAgICAgICAgIHJldHVybiBNUF9TVFJFQU1fRVJST1I7
CisgICAgfQorfQorCitTVEFUSUMgbXBfb2JqX3Qgc29ja2V0X2ZpbGVubyhtcF9vYmpfdCBzZWxm
X2luKSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpzZWxmID0gTVBfT0JKX1RPX1BUUihzZWxmX2lu
KTsKKyAgICByZXR1cm4gTVBfT0JKX05FV19TTUFMTF9JTlQoc2VsZi0+ZmQpOworfQorU1RBVElD
IE1QX0RFRklORV9DT05TVF9GVU5fT0JKXzEoc29ja2V0X2ZpbGVub19vYmosIHNvY2tldF9maWxl
bm8pOworCitTVEFUSUMgbXBfb2JqX3Qgc29ja2V0X2Nvbm5lY3QobXBfb2JqX3Qgc2VsZl9pbiwg
bXBfb2JqX3QgYWRkcl9pbikgeworICAgIG1wX29ial9zb2NrZXRfdCAqc2VsZiA9IE1QX09CSl9U
T19QVFIoc2VsZl9pbik7CisgICAgbXBfYnVmZmVyX2luZm9fdCBidWZpbmZvOworICAgIG1wX2dl
dF9idWZmZXJfcmFpc2UoYWRkcl9pbiwgJmJ1ZmluZm8sIE1QX0JVRkZFUl9SRUFEKTsKKyAgICBp
bnQgciA9IGNvbm5lY3Qoc2VsZi0+ZmQsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKilidWZpbmZv
LmJ1ZiwgYnVmaW5mby5sZW4pOworICAgIFJBSVNFX0VSUk5PKHIsIGVycm5vKTsKKyAgICByZXR1
cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1RfRlVOX09CSl8yKHNv
Y2tldF9jb25uZWN0X29iaiwgc29ja2V0X2Nvbm5lY3QpOworCitTVEFUSUMgbXBfb2JqX3Qgc29j
a2V0X2JpbmQobXBfb2JqX3Qgc2VsZl9pbiwgbXBfb2JqX3QgYWRkcl9pbikgeworICAgIG1wX29i
al9zb2NrZXRfdCAqc2VsZiA9IE1QX09CSl9UT19QVFIoc2VsZl9pbik7CisgICAgbXBfYnVmZmVy
X2luZm9fdCBidWZpbmZvOworICAgIG1wX2dldF9idWZmZXJfcmFpc2UoYWRkcl9pbiwgJmJ1Zmlu
Zm8sIE1QX0JVRkZFUl9SRUFEKTsKKyAgICBpbnQgciA9IGJpbmQoc2VsZi0+ZmQsIChjb25zdCBz
dHJ1Y3Qgc29ja2FkZHIgKilidWZpbmZvLmJ1ZiwgYnVmaW5mby5sZW4pOworICAgIFJBSVNFX0VS
Uk5PKHIsIGVycm5vKTsKKyAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9E
RUZJTkVfQ09OU1RfRlVOX09CSl8yKHNvY2tldF9iaW5kX29iaiwgc29ja2V0X2JpbmQpOworCitT
VEFUSUMgbXBfb2JqX3Qgc29ja2V0X2xpc3RlbihtcF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBi
YWNrbG9nX2luKSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpzZWxmID0gTVBfT0JKX1RPX1BUUihz
ZWxmX2luKTsKKyAgICBpbnQgciA9IGxpc3RlbihzZWxmLT5mZCwgTVBfT0JKX1NNQUxMX0lOVF9W
QUxVRShiYWNrbG9nX2luKSk7CisgICAgUkFJU0VfRVJSTk8ociwgZXJybm8pOworICAgIHJldHVy
biBtcF9jb25zdF9ub25lOworfQorU1RBVElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKXzIoc29j
a2V0X2xpc3Rlbl9vYmosIHNvY2tldF9saXN0ZW4pOworCitTVEFUSUMgbXBfb2JqX3Qgc29ja2V0
X2FjY2VwdChtcF9vYmpfdCBzZWxmX2luKSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpzZWxmID0g
TVBfT0JKX1RPX1BUUihzZWxmX2luKTsKKyAgICAvLyBzb2NrYWRkcl9zdG9yYWdlIGlzbid0IHN0
YWNrLWZyaWVuZGx5ICgxMjkgYnl0ZXMgb3Igc28pCisgICAgLy9zdHJ1Y3Qgc29ja2FkZHJfc3Rv
cmFnZSBhZGRyOworICAgIGJ5dGUgYWRkclszMl07CisgICAgc29ja2xlbl90IGFkZHJfbGVuID0g
c2l6ZW9mKGFkZHIpOworICAgIGludCBmZCA9IGFjY2VwdChzZWxmLT5mZCwgKHN0cnVjdCBzb2Nr
YWRkciopJmFkZHIsICZhZGRyX2xlbik7CisgICAgUkFJU0VfRVJSTk8oZmQsIGVycm5vKTsKKwor
ICAgIG1wX29ial90dXBsZV90ICp0ID0gTVBfT0JKX1RPX1BUUihtcF9vYmpfbmV3X3R1cGxlKDIs
IE5VTEwpKTsKKyAgICB0LT5pdGVtc1swXSA9IE1QX09CSl9GUk9NX1BUUihzb2NrZXRfbmV3KGZk
KSk7CisgICAgdC0+aXRlbXNbMV0gPSBtcF9vYmpfbmV3X2J5dGVhcnJheShhZGRyX2xlbiwgJmFk
ZHIpOworCisgICAgcmV0dXJuIE1QX09CSl9GUk9NX1BUUih0KTsKK30KK1NUQVRJQyBNUF9ERUZJ
TkVfQ09OU1RfRlVOX09CSl8xKHNvY2tldF9hY2NlcHRfb2JqLCBzb2NrZXRfYWNjZXB0KTsKKwor
Ly8gTm90ZTogYmVzaWRlcyBmbGFnIHBhcmFtLCB0aGlzIGRpZmZlcnMgZnJvbSByZWFkKCkgaW4g
dGhhdAorLy8gdGhpcyBkb2VzIG5vdCBzd2FsbG93IGJsb2NraW5nIGVycm9ycyAoRUFHQUlOLCBF
V09VTERCTE9DSykgLQorLy8gdGhlc2Ugd291bGQgYmUgdGhyb3duIGFzIGV4Y2VwdGlvbnMuCitT
VEFUSUMgbXBfb2JqX3Qgc29ja2V0X3JlY3Yoc2l6ZV90IG5fYXJncywgY29uc3QgbXBfb2JqX3Qg
KmFyZ3MpIHsKKyAgICBtcF9vYmpfc29ja2V0X3QgKnNlbGYgPSBNUF9PQkpfVE9fUFRSKGFyZ3Nb
MF0pOworICAgIGludCBzeiA9IE1QX09CSl9TTUFMTF9JTlRfVkFMVUUoYXJnc1sxXSk7CisgICAg
aW50IGZsYWdzID0gMDsKKworICAgIGlmIChuX2FyZ3MgPiAyKSB7CisgICAgICAgIGZsYWdzID0g
TVBfT0JKX1NNQUxMX0lOVF9WQUxVRShhcmdzWzJdKTsKKyAgICB9CisKKyAgICBieXRlICpidWYg
PSBtX25ldyhieXRlLCBzeik7CisgICAgaW50IG91dF9zeiA9IHJlY3Yoc2VsZi0+ZmQsIGJ1Ziwg
c3osIGZsYWdzKTsKKyAgICBSQUlTRV9FUlJOTyhvdXRfc3osIGVycm5vKTsKKworICAgIG1wX29i
al90IHJldCA9IG1wX29ial9uZXdfc3RyX29mX3R5cGUoJm1wX3R5cGVfYnl0ZXMsIGJ1Ziwgb3V0
X3N6KTsKKyAgICBtX2RlbChjaGFyLCBidWYsIHN6KTsKKyAgICByZXR1cm4gcmV0OworfQorU1RB
VElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKX1ZBUl9CRVRXRUVOKHNvY2tldF9yZWN2X29iaiwg
MiwgMywgc29ja2V0X3JlY3YpOworCitTVEFUSUMgbXBfb2JqX3Qgc29ja2V0X3JlY3Zmcm9tKHNp
emVfdCBuX2FyZ3MsIGNvbnN0IG1wX29ial90ICphcmdzKSB7CisgICAgbXBfb2JqX3NvY2tldF90
ICpzZWxmID0gTVBfT0JKX1RPX1BUUihhcmdzWzBdKTsKKyAgICBpbnQgc3ogPSBNUF9PQkpfU01B
TExfSU5UX1ZBTFVFKGFyZ3NbMV0pOworICAgIGludCBmbGFncyA9IDA7CisKKyAgICBpZiAobl9h
cmdzID4gMikgeworICAgICAgICBmbGFncyA9IE1QX09CSl9TTUFMTF9JTlRfVkFMVUUoYXJnc1sy
XSk7CisgICAgfQorCisgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgYWRkcjsKKyAgICBzb2Nr
bGVuX3QgYWRkcl9sZW4gPSBzaXplb2YoYWRkcik7CisKKyAgICBieXRlICpidWYgPSBtX25ldyhi
eXRlLCBzeik7CisgICAgaW50IG91dF9zeiA9IHJlY3Zmcm9tKHNlbGYtPmZkLCBidWYsIHN6LCBm
bGFncywgKHN0cnVjdCBzb2NrYWRkciopJmFkZHIsICZhZGRyX2xlbik7CisgICAgUkFJU0VfRVJS
Tk8ob3V0X3N6LCBlcnJubyk7CisKKyAgICBtcF9vYmpfdCBidWZfbyA9IG1wX29ial9uZXdfc3Ry
X29mX3R5cGUoJm1wX3R5cGVfYnl0ZXMsIGJ1Ziwgb3V0X3N6KTsKKyAgICBtX2RlbChjaGFyLCBi
dWYsIHN6KTsKKworICAgIG1wX29ial90dXBsZV90ICp0ID0gTVBfT0JKX1RPX1BUUihtcF9vYmpf
bmV3X3R1cGxlKDIsIE5VTEwpKTsKKyAgICB0LT5pdGVtc1swXSA9IGJ1Zl9vOworICAgIHQtPml0
ZW1zWzFdID0gbXBfb2JqX2Zyb21fc29ja2FkZHIoKHN0cnVjdCBzb2NrYWRkciopJmFkZHIsIGFk
ZHJfbGVuKTsKKworICAgIHJldHVybiBNUF9PQkpfRlJPTV9QVFIodCk7Cit9CitTVEFUSUMgTVBf
REVGSU5FX0NPTlNUX0ZVTl9PQkpfVkFSX0JFVFdFRU4oc29ja2V0X3JlY3Zmcm9tX29iaiwgMiwg
Mywgc29ja2V0X3JlY3Zmcm9tKTsKKworLy8gTm90ZTogYmVzaWRlcyBmbGFnIHBhcmFtLCB0aGlz
IGRpZmZlcnMgZnJvbSB3cml0ZSgpIGluIHRoYXQKKy8vIHRoaXMgZG9lcyBub3Qgc3dhbGxvdyBi
bG9ja2luZyBlcnJvcnMgKEVBR0FJTiwgRVdPVUxEQkxPQ0spIC0KKy8vIHRoZXNlIHdvdWxkIGJl
IHRocm93biBhcyBleGNlcHRpb25zLgorU1RBVElDIG1wX29ial90IHNvY2tldF9zZW5kKHNpemVf
dCBuX2FyZ3MsIGNvbnN0IG1wX29ial90ICphcmdzKSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpz
ZWxmID0gTVBfT0JKX1RPX1BUUihhcmdzWzBdKTsKKyAgICBpbnQgZmxhZ3MgPSAwOworCisgICAg
aWYgKG5fYXJncyA+IDIpIHsKKyAgICAgICAgZmxhZ3MgPSBNUF9PQkpfU01BTExfSU5UX1ZBTFVF
KGFyZ3NbMl0pOworICAgIH0KKworICAgIG1wX2J1ZmZlcl9pbmZvX3QgYnVmaW5mbzsKKyAgICBt
cF9nZXRfYnVmZmVyX3JhaXNlKGFyZ3NbMV0sICZidWZpbmZvLCBNUF9CVUZGRVJfUkVBRCk7Cisg
ICAgaW50IG91dF9zeiA9IHNlbmQoc2VsZi0+ZmQsIGJ1ZmluZm8uYnVmLCBidWZpbmZvLmxlbiwg
ZmxhZ3MpOworICAgIFJBSVNFX0VSUk5PKG91dF9zeiwgZXJybm8pOworCisgICAgcmV0dXJuIE1Q
X09CSl9ORVdfU01BTExfSU5UKG91dF9zeik7Cit9CitTVEFUSUMgTVBfREVGSU5FX0NPTlNUX0ZV
Tl9PQkpfVkFSX0JFVFdFRU4oc29ja2V0X3NlbmRfb2JqLCAyLCAzLCBzb2NrZXRfc2VuZCk7CisK
K1NUQVRJQyBtcF9vYmpfdCBzb2NrZXRfc2VuZHRvKHNpemVfdCBuX2FyZ3MsIGNvbnN0IG1wX29i
al90ICphcmdzKSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpzZWxmID0gTVBfT0JKX1RPX1BUUihh
cmdzWzBdKTsKKyAgICBpbnQgZmxhZ3MgPSAwOworCisgICAgbXBfb2JqX3QgZHN0X2FkZHIgPSBh
cmdzWzJdOworICAgIGlmIChuX2FyZ3MgPiAzKSB7CisgICAgICAgIGZsYWdzID0gTVBfT0JKX1NN
QUxMX0lOVF9WQUxVRShhcmdzWzJdKTsKKyAgICAgICAgZHN0X2FkZHIgPSBhcmdzWzNdOworICAg
IH0KKworICAgIG1wX2J1ZmZlcl9pbmZvX3QgYnVmaW5mbywgYWRkcl9iaTsKKyAgICBtcF9nZXRf
YnVmZmVyX3JhaXNlKGFyZ3NbMV0sICZidWZpbmZvLCBNUF9CVUZGRVJfUkVBRCk7CisgICAgbXBf
Z2V0X2J1ZmZlcl9yYWlzZShkc3RfYWRkciwgJmFkZHJfYmksIE1QX0JVRkZFUl9SRUFEKTsKKyAg
ICBpbnQgb3V0X3N6ID0gc2VuZHRvKHNlbGYtPmZkLCBidWZpbmZvLmJ1ZiwgYnVmaW5mby5sZW4s
IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJf
YmkuYnVmLCBhZGRyX2JpLmxlbik7CisgICAgUkFJU0VfRVJSTk8ob3V0X3N6LCBlcnJubyk7CisK
KyAgICByZXR1cm4gTVBfT0JKX05FV19TTUFMTF9JTlQob3V0X3N6KTsKK30KK1NUQVRJQyBNUF9E
RUZJTkVfQ09OU1RfRlVOX09CSl9WQVJfQkVUV0VFTihzb2NrZXRfc2VuZHRvX29iaiwgMywgNCwg
c29ja2V0X3NlbmR0byk7CisKK1NUQVRJQyBtcF9vYmpfdCBzb2NrZXRfc2V0c29ja29wdChzaXpl
X3Qgbl9hcmdzLCBjb25zdCBtcF9vYmpfdCAqYXJncykgeworICAgICh2b2lkKW5fYXJnczsgLy8g
YWx3YXlzIDQKKyAgICBtcF9vYmpfc29ja2V0X3QgKnNlbGYgPSBNUF9PQkpfVE9fUFRSKGFyZ3Nb
MF0pOworICAgIGludCBsZXZlbCA9IE1QX09CSl9TTUFMTF9JTlRfVkFMVUUoYXJnc1sxXSk7Cisg
ICAgaW50IG9wdGlvbiA9IG1wX29ial9nZXRfaW50KGFyZ3NbMl0pOworCisgICAgY29uc3Qgdm9p
ZCAqb3B0dmFsOworICAgIHNvY2tsZW5fdCBvcHRsZW47CisgICAgaW50IHZhbDsKKyAgICBpZiAo
TVBfT0JKX0lTX0lOVChhcmdzWzNdKSkgeworICAgICAgICB2YWwgPSBtcF9vYmpfaW50X2dldF90
cnVuY2F0ZWQoYXJnc1szXSk7CisgICAgICAgIG9wdHZhbCA9ICZ2YWw7CisgICAgICAgIG9wdGxl
biA9IHNpemVvZih2YWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1wX2J1ZmZlcl9pbmZvX3Qg
YnVmaW5mbzsKKyAgICAgICAgbXBfZ2V0X2J1ZmZlcl9yYWlzZShhcmdzWzNdLCAmYnVmaW5mbywg
TVBfQlVGRkVSX1JFQUQpOworICAgICAgICBvcHR2YWwgPSBidWZpbmZvLmJ1ZjsKKyAgICAgICAg
b3B0bGVuID0gYnVmaW5mby5sZW47CisgICAgfQorICAgIGludCByID0gc2V0c29ja29wdChzZWxm
LT5mZCwgbGV2ZWwsIG9wdGlvbiwgb3B0dmFsLCBvcHRsZW4pOworICAgIFJBSVNFX0VSUk5PKHIs
IGVycm5vKTsKKyAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJTkVf
Q09OU1RfRlVOX09CSl9WQVJfQkVUV0VFTihzb2NrZXRfc2V0c29ja29wdF9vYmosIDQsIDQsIHNv
Y2tldF9zZXRzb2Nrb3B0KTsKKworU1RBVElDIG1wX29ial90IHNvY2tldF9zZXRibG9ja2luZyht
cF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBmbGFnX2luKSB7CisgICAgbXBfb2JqX3NvY2tldF90
ICpzZWxmID0gTVBfT0JKX1RPX1BUUihzZWxmX2luKTsKKyAgICBpbnQgdmFsID0gbXBfb2JqX2lz
X3RydWUoZmxhZ19pbik7CisgICAgaW50IGZsYWdzID0gZmNudGwoc2VsZi0+ZmQsIEZfR0VURkws
IDApOworICAgIFJBSVNFX0VSUk5PKGZsYWdzLCBlcnJubyk7CisgICAgaWYgKHZhbCkgeworICAg
ICAgICBmbGFncyAmPSB+T19OT05CTE9DSzsKKyAgICB9IGVsc2UgeworICAgICAgICBmbGFncyB8
PSBPX05PTkJMT0NLOworICAgIH0KKyAgICBmbGFncyA9IGZjbnRsKHNlbGYtPmZkLCBGX1NFVEZM
LCBmbGFncyk7CisgICAgUkFJU0VfRVJSTk8oZmxhZ3MsIGVycm5vKTsKKyAgICBzZWxmLT5ibG9j
a2luZyA9IHZhbDsKKyAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJ
TkVfQ09OU1RfRlVOX09CSl8yKHNvY2tldF9zZXRibG9ja2luZ19vYmosIHNvY2tldF9zZXRibG9j
a2luZyk7CisKK1NUQVRJQyBtcF9vYmpfdCBzb2NrZXRfc2V0dGltZW91dChtcF9vYmpfdCBzZWxm
X2luLCBtcF9vYmpfdCB0aW1lb3V0X2luKSB7CisgICAgbXBfb2JqX3NvY2tldF90ICpzZWxmID0g
TVBfT0JKX1RPX1BUUihzZWxmX2luKTsKKyAgICBzdHJ1Y3QgdGltZXZhbCB0diA9IHswLH07Cisg
ICAgYm9vbCBuZXdfYmxvY2tpbmcgPSB0cnVlOworCisgICAgaWYgKHRpbWVvdXRfaW4gPT0gbXBf
Y29uc3Rfbm9uZSkgeworICAgICAgICBzZXRzb2Nrb3B0KHNlbGYtPmZkLCBTT0xfU09DS0VULCBT
T19SQ1ZUSU1FTywgTlVMTCwgMCk7CisgICAgICAgIHNldHNvY2tvcHQoc2VsZi0+ZmQsIFNPTF9T
T0NLRVQsIFNPX1NORFRJTUVPLCBOVUxMLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICAjaWYg
TUlDUk9QWV9QWV9CVUlMVElOU19GTE9BVAorICAgICAgICBtcF9mbG9hdF90IHZhbCA9IG1wX29i
al9nZXRfZmxvYXQodGltZW91dF9pbik7CisgICAgICAgIGRvdWJsZSBpcGFydDsKKyAgICAgICAg
dHYudHZfdXNlYyA9IHJvdW5kKG1vZGYodmFsLCAmaXBhcnQpICogMTAwMDAwMCk7CisgICAgICAg
IHR2LnR2X3NlYyA9IGlwYXJ0OworICAgICAgICAjZWxzZQorICAgICAgICB0di50dl9zZWMgPSBt
cF9vYmpfZ2V0X2ludCh0aW1lb3V0X2luKTsKKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgLy8g
Rm9yIFNPX1JDVlRJTUVPL1NPX1NORFRJTUVPLCB6ZXJvIHRpbWVvdXQgbWVhbnMgaW5maW5pdHks
IGJ1dAorICAgICAgICAvLyBmb3IgUHl0aG9uIEFQSSBpdCBtZWFucyBub24tYmxvY2tpbmcuCisg
ICAgICAgIGlmICh0di50dl9zZWMgPT0gMCAmJiB0di50dl91c2VjID09IDApIHsKKyAgICAgICAg
ICAgIG5ld19ibG9ja2luZyA9IGZhbHNlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c2V0c29ja29wdChzZWxmLT5mZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sCisgICAgICAgICAg
ICAgICAgICAgICAgICZ0diwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7CisgICAgICAgICAgICBz
ZXRzb2Nrb3B0KHNlbGYtPmZkLCBTT0xfU09DS0VULCBTT19TTkRUSU1FTywKKyAgICAgICAgICAg
ICAgICAgICAgICAgJnR2LCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmIChzZWxmLT5ibG9ja2luZyAhPSBuZXdfYmxvY2tpbmcpIHsKKyAgICAgICAg
c29ja2V0X3NldGJsb2NraW5nKHNlbGZfaW4sIG1wX29ial9uZXdfYm9vbChuZXdfYmxvY2tpbmcp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJ
TkVfQ09OU1RfRlVOX09CSl8yKHNvY2tldF9zZXR0aW1lb3V0X29iaiwgc29ja2V0X3NldHRpbWVv
dXQpOworCitTVEFUSUMgbXBfb2JqX3Qgc29ja2V0X21ha2VmaWxlKHNpemVfdCBuX2FyZ3MsIGNv
bnN0IG1wX29ial90ICphcmdzKSB7CisgICAgLy8gVE9ETzogQ1B5dGhvbiBleHBsaWNpdGx5IHNh
eXMgdGhhdCBjbG9zaW5nIHJldHVybmVkIG9iamVjdCBkb2Vzbid0IGNsb3NlCisgICAgLy8gdGhl
IG9yaWdpbmFsIHNvY2tldCAoUHl0aG9uMiBhdCBhbGwgc2F5cyB0aGF0IGZkIGlzIGR1cCgpZWQp
LiBCdXQgd2UKKyAgICAvLyBzYXZlIG9uIHRoZSBibG9hdC4KKyAgICBtcF9vYmpfc29ja2V0X3Qg
KnNlbGYgPSBNUF9PQkpfVE9fUFRSKGFyZ3NbMF0pOworICAgIG1wX29ial90ICpuZXdfYXJncyA9
IGFsbG9jYShuX2FyZ3MgKiBzaXplb2YobXBfb2JqX3QpKTsKKyAgICBtZW1jcHkobmV3X2FyZ3Mg
KyAxLCBhcmdzICsgMSwgKG5fYXJncyAtIDEpICogc2l6ZW9mKG1wX29ial90KSk7CisgICAgbmV3
X2FyZ3NbMF0gPSBNUF9PQkpfTkVXX1NNQUxMX0lOVChzZWxmLT5mZCk7CisgICAgcmV0dXJuIG1w
X2J1aWx0aW5fb3BlbihuX2FyZ3MsIG5ld19hcmdzLCAobXBfbWFwX3QqKSZtcF9jb25zdF9lbXB0
eV9tYXApOworfQorU1RBVElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKX1ZBUl9CRVRXRUVOKHNv
Y2tldF9tYWtlZmlsZV9vYmosIDEsIDMsIHNvY2tldF9tYWtlZmlsZSk7CisKK1NUQVRJQyBtcF9v
YmpfdCBzb2NrZXRfbWFrZV9uZXcoY29uc3QgbXBfb2JqX3R5cGVfdCAqdHlwZV9pbiwgc2l6ZV90
IG5fYXJncywgc2l6ZV90IG5fa3csIGNvbnN0IG1wX29ial90ICphcmdzKSB7CisgICAgKHZvaWQp
dHlwZV9pbjsKKyAgICAodm9pZCluX2t3OworCisgICAgaW50IGZhbWlseSA9IEFGX0lORVQ7Cisg
ICAgaW50IHR5cGUgPSBTT0NLX1NUUkVBTTsKKyAgICBpbnQgcHJvdG8gPSAwOworCisgICAgaWYg
KG5fYXJncyA+IDApIHsKKyAgICAgICAgYXNzZXJ0KE1QX09CSl9JU19TTUFMTF9JTlQoYXJnc1sw
XSkpOworICAgICAgICBmYW1pbHkgPSBNUF9PQkpfU01BTExfSU5UX1ZBTFVFKGFyZ3NbMF0pOwor
ICAgICAgICBpZiAobl9hcmdzID4gMSkgeworICAgICAgICAgICAgYXNzZXJ0KE1QX09CSl9JU19T
TUFMTF9JTlQoYXJnc1sxXSkpOworICAgICAgICAgICAgdHlwZSA9IE1QX09CSl9TTUFMTF9JTlRf
VkFMVUUoYXJnc1sxXSk7CisgICAgICAgICAgICBpZiAobl9hcmdzID4gMikgeworICAgICAgICAg
ICAgICAgIGFzc2VydChNUF9PQkpfSVNfU01BTExfSU5UKGFyZ3NbMl0pKTsKKyAgICAgICAgICAg
ICAgICBwcm90byA9IE1QX09CSl9TTUFMTF9JTlRfVkFMVUUoYXJnc1syXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBl
LCBwcm90byk7CisgICAgUkFJU0VfRVJSTk8oZmQsIGVycm5vKTsKKyAgICByZXR1cm4gTVBfT0JK
X0ZST01fUFRSKHNvY2tldF9uZXcoZmQpKTsKK30KKworU1RBVElDIGNvbnN0IG1wX3JvbV9tYXBf
ZWxlbV90IHVzb2NrZXRfbG9jYWxzX2RpY3RfdGFibGVbXSA9IHsKKyAgICB7IE1QX1JPTV9RU1RS
KE1QX1FTVFJfZmlsZW5vKSwgTVBfUk9NX1BUUigmc29ja2V0X2ZpbGVub19vYmopIH0sCisgICAg
eyBNUF9ST01fUVNUUihNUF9RU1RSX21ha2VmaWxlKSwgTVBfUk9NX1BUUigmc29ja2V0X21ha2Vm
aWxlX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfcmVhZCksIE1QX1JPTV9QVFIo
Jm1wX3N0cmVhbV9yZWFkX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfcmVhZGlu
dG8pLCBNUF9ST01fUFRSKCZtcF9zdHJlYW1fcmVhZGludG9fb2JqKSB9LAorICAgIHsgTVBfUk9N
X1FTVFIoTVBfUVNUUl9yZWFkbGluZSksIE1QX1JPTV9QVFIoJm1wX3N0cmVhbV91bmJ1ZmZlcmVk
X3JlYWRsaW5lX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfd3JpdGUpLCBNUF9S
T01fUFRSKCZtcF9zdHJlYW1fd3JpdGVfb2JqKSB9LAorICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNU
Ul9jb25uZWN0KSwgTVBfUk9NX1BUUigmc29ja2V0X2Nvbm5lY3Rfb2JqKSB9LAorICAgIHsgTVBf
Uk9NX1FTVFIoTVBfUVNUUl9iaW5kKSwgTVBfUk9NX1BUUigmc29ja2V0X2JpbmRfb2JqKSB9LAor
ICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9saXN0ZW4pLCBNUF9ST01fUFRSKCZzb2NrZXRfbGlz
dGVuX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfYWNjZXB0KSwgTVBfUk9NX1BU
Uigmc29ja2V0X2FjY2VwdF9vYmopIH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX3JlY3Yp
LCBNUF9ST01fUFRSKCZzb2NrZXRfcmVjdl9vYmopIH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9R
U1RSX3JlY3Zmcm9tKSwgTVBfUk9NX1BUUigmc29ja2V0X3JlY3Zmcm9tX29iaikgfSwKKyAgICB7
IE1QX1JPTV9RU1RSKE1QX1FTVFJfc2VuZCksIE1QX1JPTV9QVFIoJnNvY2tldF9zZW5kX29iaikg
fSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfc2VuZHRvKSwgTVBfUk9NX1BUUigmc29ja2V0
X3NlbmR0b19vYmopIH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX3NldHNvY2tvcHQpLCBN
UF9ST01fUFRSKCZzb2NrZXRfc2V0c29ja29wdF9vYmopIH0sCisgICAgeyBNUF9ST01fUVNUUihN
UF9RU1RSX3NldGJsb2NraW5nKSwgTVBfUk9NX1BUUigmc29ja2V0X3NldGJsb2NraW5nX29iaikg
fSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfc2V0dGltZW91dCksIE1QX1JPTV9QVFIoJnNv
Y2tldF9zZXR0aW1lb3V0X29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfY2xvc2Up
LCBNUF9ST01fUFRSKCZtcF9zdHJlYW1fY2xvc2Vfb2JqKSB9LAorfTsKKworU1RBVElDIE1QX0RF
RklORV9DT05TVF9ESUNUKHVzb2NrZXRfbG9jYWxzX2RpY3QsIHVzb2NrZXRfbG9jYWxzX2RpY3Rf
dGFibGUpOworCitTVEFUSUMgY29uc3QgbXBfc3RyZWFtX3BfdCB1c29ja2V0X3N0cmVhbV9wID0g
eworICAgIC5yZWFkID0gc29ja2V0X3JlYWQsCisgICAgLndyaXRlID0gc29ja2V0X3dyaXRlLAor
ICAgIC5pb2N0bCA9IHNvY2tldF9pb2N0bCwKK307CisKK2NvbnN0IG1wX29ial90eXBlX3QgbXBf
dHlwZV9zb2NrZXQgPSB7CisgICAgeyAmbXBfdHlwZV90eXBlIH0sCisgICAgLm5hbWUgPSBNUF9R
U1RSX3NvY2tldCwKKyAgICAucHJpbnQgPSBzb2NrZXRfcHJpbnQsCisgICAgLm1ha2VfbmV3ID0g
c29ja2V0X21ha2VfbmV3LAorICAgIC5nZXRpdGVyID0gTlVMTCwKKyAgICAuaXRlcm5leHQgPSBO
VUxMLAorICAgIC5wcm90b2NvbCA9ICZ1c29ja2V0X3N0cmVhbV9wLAorICAgIC5sb2NhbHNfZGlj
dCA9IChtcF9vYmpfZGljdF90KikmdXNvY2tldF9sb2NhbHNfZGljdCwKK307CisKKyNkZWZpbmUg
QklOQUREUl9NQVhfTEVOIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpCitTVEFUSUMgbXBfb2JqX3Qg
bW9kX3NvY2tldF9pbmV0X3B0b24obXBfb2JqX3QgZmFtaWx5X2luLCBtcF9vYmpfdCBhZGRyX2lu
KSB7CisgICAgaW50IGZhbWlseSA9IG1wX29ial9nZXRfaW50KGZhbWlseV9pbik7CisgICAgYnl0
ZSBiaW5hZGRyW0JJTkFERFJfTUFYX0xFTl07CisgICAgaW50IHIgPSBpbmV0X3B0b24oZmFtaWx5
LCBtcF9vYmpfc3RyX2dldF9zdHIoYWRkcl9pbiksIGJpbmFkZHIpOworICAgIFJBSVNFX0VSUk5P
KHIsIGVycm5vKTsKKyAgICBpZiAociA9PSAwKSB7CisgICAgICAgIG1wX3JhaXNlX09TRXJyb3Io
TVBfRUlOVkFMKTsKKyAgICB9CisgICAgaW50IGJpbmFkZHJfbGVuID0gMDsKKyAgICBzd2l0Y2gg
KGZhbWlseSkgeworICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICBiaW5hZGRyX2xl
biA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIGJpbmFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBp
bjZfYWRkcik7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIG1wX29ial9u
ZXdfYnl0ZXMoYmluYWRkciwgYmluYWRkcl9sZW4pOworfQorU1RBVElDIE1QX0RFRklORV9DT05T
VF9GVU5fT0JKXzIobW9kX3NvY2tldF9pbmV0X3B0b25fb2JqLCBtb2Rfc29ja2V0X2luZXRfcHRv
bik7CisKK1NUQVRJQyBtcF9vYmpfdCBtb2Rfc29ja2V0X2luZXRfbnRvcChtcF9vYmpfdCBmYW1p
bHlfaW4sIG1wX29ial90IGJpbmFkZHJfaW4pIHsKKyAgICBpbnQgZmFtaWx5ID0gbXBfb2JqX2dl
dF9pbnQoZmFtaWx5X2luKTsKKyAgICBtcF9idWZmZXJfaW5mb190IGJ1ZmluZm87CisgICAgbXBf
Z2V0X2J1ZmZlcl9yYWlzZShiaW5hZGRyX2luLCAmYnVmaW5mbywgTVBfQlVGRkVSX1JFQUQpOwor
ICAgIHZzdHJfdCB2c3RyOworICAgIHZzdHJfaW5pdF9sZW4oJnZzdHIsIGZhbWlseSA9PSBBRl9J
TkVUID8gSU5FVF9BRERSU1RSTEVOIDogSU5FVDZfQUREUlNUUkxFTik7CisgICAgaWYgKGluZXRf
bnRvcChmYW1pbHksIGJ1ZmluZm8uYnVmLCB2c3RyLmJ1ZiwgdnN0ci5sZW4pID09IE5VTEwpIHsK
KyAgICAgICAgbXBfcmFpc2VfT1NFcnJvcihlcnJubyk7CisgICAgfQorICAgIHZzdHIubGVuID0g
c3RybGVuKHZzdHIuYnVmKTsKKyAgICByZXR1cm4gbXBfb2JqX25ld19zdHJfZnJvbV92c3RyKCZt
cF90eXBlX3N0ciwgJnZzdHIpOworfQorU1RBVElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKXzIo
bW9kX3NvY2tldF9pbmV0X250b3Bfb2JqLCBtb2Rfc29ja2V0X2luZXRfbnRvcCk7CisKK1NUQVRJ
QyBtcF9vYmpfdCBtb2Rfc29ja2V0X2dldGFkZHJpbmZvKHNpemVfdCBuX2FyZ3MsIGNvbnN0IG1w
X29ial90ICphcmdzKSB7CisgICAgLy8gVE9ETzogSW1wbGVtZW50IDV0aCBhbmQgNnRoIGFyZ3MK
KworICAgIGNvbnN0IGNoYXIgKmhvc3QgPSBtcF9vYmpfc3RyX2dldF9zdHIoYXJnc1swXSk7Cisg
ICAgY29uc3QgY2hhciAqc2VydiA9IE5VTEw7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzOwor
ICAgIGNoYXIgYnVmWzZdOworICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwor
ICAgIC8vIGdldGFkZHJpbmZvIGFjY2VwdHMgcG9ydCBpbiBzdHJpbmcgbm90YXRpb24sIHNvIGhv
d2V2ZXIKKyAgICAvLyBpdCBtYXkgc2VlbSBzdHVwaWQsIHdlIG5lZWQgdG8gY29udmVydCBpbnQg
dG8gc3RyCisgICAgaWYgKE1QX09CSl9JU19TTUFMTF9JTlQoYXJnc1sxXSkpIHsKKyAgICAgICAg
dW5zaWduZWQgcG9ydCA9ICh1bnNpZ25lZCBzaG9ydClNUF9PQkpfU01BTExfSU5UX1ZBTFVFKGFy
Z3NbMV0pOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXUiLCBwb3J0KTsK
KyAgICAgICAgc2VydiA9IGJ1ZjsKKyAgICAgICAgaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklD
U0VSVjsKKyNpZmRlZiBfX1VDTElCQ19NQUpPUl9fCisjaWYgX19VQ0xJQkNfTUFKT1JfXyA9PSAw
ICYmIChfX1VDTElCQ19NSU5PUl9fIDwgOSB8fCAoX19VQ0xJQkNfTUlOT1JfXyA9PSA5ICYmIF9f
VUNMSUJDX1NVQkxFVkVMX18gPD0gMzIpKQorLy8gIndhcm5pbmciIHJlcXVpcmVzIC1Xbm8tY3Bw
IHdoaWNoIGlzIGEgcmVsYXRpdmVseSBuZXcgZ2NjIG9wdGlvbiwgc28gd2UgY2hvb3NlIG5vdCB0
byB1c2UgaXQuCisvLyN3YXJuaW5nIFdvcmtpbmcgYXJvdW5kIHVDbGliYyBidWcgd2l0aCBudW1l
cmljIHNlcnZpY2UgbmFtZQorICAgICAgICAvLyBPbGRlciB2ZXJzaW9ucyBvZyB1Q2xpYmMgaGF2
ZSBidWdzIHdoZW4gbnVtZXJpYyBwb3J0cyBpbiBzZXJ2aWNlCisgICAgICAgIC8vIGFyZyByZXF1
aXJlIGFsc28gaGludHMuYWlfc29ja3R5cGUgKG9yIGhpbnRzLmFpX3Byb3RvY29sKSAhPSAwCisg
ICAgICAgIC8vIFRoaXMgYWN0dWFsbHkgd2FzIGZpeGVkIGluIDAuOS4zMi4xLCBidXQgdUNsaWJj
IGRvZXNuJ3QgYWxsb3cgdG8KKyAgICAgICAgLy8gdGVzdCBmb3IgdGhhdC4KKyAgICAgICAgLy8g
aHR0cDovL2dpdC51Y2xpYmMub3JnL3VDbGliYy9jb21taXQvbGliYy9pbmV0L2dldGFkZHJpbmZv
LmM/aWQ9YmMzYmUxODE0NWU0ZDUKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgY3J1ZGUg
d29ya2Fyb3VuZCwgcHJlY2x1ZGluZyBVRFAgc29ja2V0IGFkZHJlc3NlcworICAgICAgICAvLyB0
byBiZSByZXR1cm5lZC4gVE9ETzogc2V0IG9ubHkgaWYgbm90IHNldCBieSBQeXRob24gYXJncy4K
KyAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBTT0NLX1NUUkVBTTsKKyNlbmRpZgorI2VuZGlm
CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2VydiA9IG1wX29ial9zdHJfZ2V0X3N0cihhcmdzWzFd
KTsKKyAgICB9CisKKyAgICBpZiAobl9hcmdzID4gMikgeworICAgICAgICBoaW50cy5haV9mYW1p
bHkgPSBNUF9PQkpfU01BTExfSU5UX1ZBTFVFKGFyZ3NbMl0pOworICAgICAgICBpZiAobl9hcmdz
ID4gMykgeworICAgICAgICAgICAgaGludHMuYWlfc29ja3R5cGUgPSBNUF9PQkpfU01BTExfSU5U
X1ZBTFVFKGFyZ3NbM10pOworICAgICAgICB9CisgICAgfQorCisgICAgc3RydWN0IGFkZHJpbmZv
ICphZGRyX2xpc3Q7CisgICAgaW50IHJlcyA9IGdldGFkZHJpbmZvKGhvc3QsIHNlcnYsICZoaW50
cywgJmFkZHJfbGlzdCk7CisKKyAgICBpZiAocmVzICE9IDApIHsKKyAgICAgICAgLy8gQ1B5dGhv
bjogc29ja2V0LmdhaWVycm9yCisgICAgICAgIG5scl9yYWlzZShtcF9vYmpfbmV3X2V4Y2VwdGlv
bl9tc2dfdmFyZygmbXBfdHlwZV9PU0Vycm9yLCAiW2FkZHJpbmZvIGVycm9yICVkXSIsIHJlcykp
OworICAgIH0KKyAgICBhc3NlcnQoYWRkcl9saXN0KTsKKworICAgIG1wX29ial90IGxpc3QgPSBt
cF9vYmpfbmV3X2xpc3QoMCwgTlVMTCk7CisgICAgZm9yIChzdHJ1Y3QgYWRkcmluZm8gKmFkZHIg
PSBhZGRyX2xpc3Q7IGFkZHI7IGFkZHIgPSBhZGRyLT5haV9uZXh0KSB7CisgICAgICAgIG1wX29i
al90dXBsZV90ICp0ID0gTVBfT0JKX1RPX1BUUihtcF9vYmpfbmV3X3R1cGxlKDUsIE5VTEwpKTsK
KyAgICAgICAgdC0+aXRlbXNbMF0gPSBNUF9PQkpfTkVXX1NNQUxMX0lOVChhZGRyLT5haV9mYW1p
bHkpOworICAgICAgICB0LT5pdGVtc1sxXSA9IE1QX09CSl9ORVdfU01BTExfSU5UKGFkZHItPmFp
X3NvY2t0eXBlKTsKKyAgICAgICAgdC0+aXRlbXNbMl0gPSBNUF9PQkpfTkVXX1NNQUxMX0lOVChh
ZGRyLT5haV9wcm90b2NvbCk7CisgICAgICAgIC8vICJjYW5vbm5hbWUgd2lsbCBiZSBhIHN0cmlu
ZyByZXByZXNlbnRpbmcgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSBob3N0CisgICAgICAgIC8v
IGlmIEFJX0NBTk9OTkFNRSBpcyBwYXJ0IG9mIHRoZSBmbGFncyBhcmd1bWVudDsgZWxzZSBjYW5v
bm5hbWUgd2lsbCBiZSBlbXB0eS4iID8/CisgICAgICAgIGlmIChhZGRyLT5haV9jYW5vbm5hbWUp
IHsKKyAgICAgICAgICAgIHQtPml0ZW1zWzNdID0gTVBfT0JKX05FV19RU1RSKHFzdHJfZnJvbV9z
dHIoYWRkci0+YWlfY2Fub25uYW1lKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0
LT5pdGVtc1szXSA9IG1wX2NvbnN0X25vbmU7CisgICAgICAgIH0KKyAgICAgICAgdC0+aXRlbXNb
NF0gPSBtcF9vYmpfbmV3X2J5dGVhcnJheShhZGRyLT5haV9hZGRybGVuLCBhZGRyLT5haV9hZGRy
KTsKKyAgICAgICAgbXBfb2JqX2xpc3RfYXBwZW5kKGxpc3QsIE1QX09CSl9GUk9NX1BUUih0KSk7
CisgICAgfQorICAgIGZyZWVhZGRyaW5mbyhhZGRyX2xpc3QpOworICAgIHJldHVybiBsaXN0Owor
fQorU1RBVElDIE1QX0RFRklORV9DT05TVF9GVU5fT0JKX1ZBUl9CRVRXRUVOKG1vZF9zb2NrZXRf
Z2V0YWRkcmluZm9fb2JqLCAyLCA0LCBtb2Rfc29ja2V0X2dldGFkZHJpbmZvKTsKKworU1RBVElD
IG1wX29ial90IG1vZF9zb2NrZXRfc29ja2FkZHIobXBfb2JqX3Qgc29ja2FkZHJfaW4pIHsKKyAg
ICBtcF9idWZmZXJfaW5mb190IGJ1ZmluZm87CisgICAgbXBfZ2V0X2J1ZmZlcl9yYWlzZShzb2Nr
YWRkcl9pbiwgJmJ1ZmluZm8sIE1QX0JVRkZFUl9SRUFEKTsKKyAgICBzd2l0Y2ggKCgoc3RydWN0
IHNvY2thZGRyKilidWZpbmZvLmJ1ZiktPnNhX2ZhbWlseSkgeworICAgICAgICBjYXNlIEFGX0lO
RVQ6IHsKKyAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2EgPSAoc3RydWN0IHNvY2th
ZGRyX2luKilidWZpbmZvLmJ1ZjsKKyAgICAgICAgICAgIG1wX29ial90dXBsZV90ICp0ID0gTVBf
T0JKX1RPX1BUUihtcF9vYmpfbmV3X3R1cGxlKDMsIE5VTEwpKTsKKyAgICAgICAgICAgIHQtPml0
ZW1zWzBdID0gTVBfT0JKX05FV19TTUFMTF9JTlQoQUZfSU5FVCk7CisgICAgICAgICAgICB0LT5p
dGVtc1sxXSA9IG1wX29ial9uZXdfYnl0ZXMoKGJ5dGUqKSZzYS0+c2luX2FkZHIsIHNpemVvZihz
YS0+c2luX2FkZHIpKTsKKyAgICAgICAgICAgIHQtPml0ZW1zWzJdID0gTVBfT0JKX05FV19TTUFM
TF9JTlQobnRvaHMoc2EtPnNpbl9wb3J0KSk7CisgICAgICAgICAgICByZXR1cm4gTVBfT0JKX0ZS
T01fUFRSKHQpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQUZfSU5FVDY6IHsKKyAgICAgICAg
ICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNhID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWJ1Zmlu
Zm8uYnVmOworICAgICAgICAgICAgbXBfb2JqX3R1cGxlX3QgKnQgPSBNUF9PQkpfVE9fUFRSKG1w
X29ial9uZXdfdHVwbGUoNSwgTlVMTCkpOworICAgICAgICAgICAgdC0+aXRlbXNbMF0gPSBNUF9P
QkpfTkVXX1NNQUxMX0lOVChBRl9JTkVUNik7CisgICAgICAgICAgICB0LT5pdGVtc1sxXSA9IG1w
X29ial9uZXdfYnl0ZXMoKGJ5dGUqKSZzYS0+c2luNl9hZGRyLCBzaXplb2Yoc2EtPnNpbjZfYWRk
cikpOworICAgICAgICAgICAgdC0+aXRlbXNbMl0gPSBNUF9PQkpfTkVXX1NNQUxMX0lOVChudG9o
cyhzYS0+c2luNl9wb3J0KSk7CisgICAgICAgICAgICB0LT5pdGVtc1szXSA9IE1QX09CSl9ORVdf
U01BTExfSU5UKG50b2hsKHNhLT5zaW42X2Zsb3dpbmZvKSk7CisgICAgICAgICAgICB0LT5pdGVt
c1s0XSA9IE1QX09CSl9ORVdfU01BTExfSU5UKG50b2hsKHNhLT5zaW42X3Njb3BlX2lkKSk7Cisg
ICAgICAgICAgICByZXR1cm4gTVBfT0JKX0ZST01fUFRSKHQpOworICAgICAgICB9CisgICAgICAg
IGRlZmF1bHQ6IHsKKyAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc2EgPSAoc3RydWN0IHNv
Y2thZGRyKilidWZpbmZvLmJ1ZjsKKyAgICAgICAgICAgIG1wX29ial90dXBsZV90ICp0ID0gTVBf
T0JKX1RPX1BUUihtcF9vYmpfbmV3X3R1cGxlKDIsIE5VTEwpKTsKKyAgICAgICAgICAgIHQtPml0
ZW1zWzBdID0gTVBfT0JKX05FV19TTUFMTF9JTlQoc2EtPnNhX2ZhbWlseSk7CisgICAgICAgICAg
ICB0LT5pdGVtc1sxXSA9IG1wX29ial9uZXdfYnl0ZXMoKGJ5dGUqKXNhLT5zYV9kYXRhLCBidWZp
bmZvLmxlbiAtIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkciwgc2FfZGF0YSkpOworICAgICAgICAg
ICAgcmV0dXJuIE1QX09CSl9GUk9NX1BUUih0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gbXBfY29uc3Rfbm9uZTsKK30KK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1RfRlVOX09CSl8xKG1v
ZF9zb2NrZXRfc29ja2FkZHJfb2JqLCBtb2Rfc29ja2V0X3NvY2thZGRyKTsKKworU1RBVElDIGNv
bnN0IG1wX3JvbV9tYXBfZWxlbV90IG1wX21vZHVsZV9zb2NrZXRfZ2xvYmFsc190YWJsZVtdID0g
eworICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9fX25hbWVfXyksIE1QX1JPTV9RU1RSKE1QX1FT
VFJfdXNvY2tldCkgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfc29ja2V0KSwgTVBfUk9N
X1BUUigmbXBfdHlwZV9zb2NrZXQpIH0sCisgICAgeyBNUF9ST01fUVNUUihNUF9RU1RSX2dldGFk
ZHJpbmZvKSwgTVBfUk9NX1BUUigmbW9kX3NvY2tldF9nZXRhZGRyaW5mb19vYmopIH0sCisgICAg
eyBNUF9ST01fUVNUUihNUF9RU1RSX2luZXRfcHRvbiksIE1QX1JPTV9QVFIoJm1vZF9zb2NrZXRf
aW5ldF9wdG9uX29iaikgfSwKKyAgICB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfaW5ldF9udG9wKSwg
TVBfUk9NX1BUUigmbW9kX3NvY2tldF9pbmV0X250b3Bfb2JqKSB9LAorICAgIHsgTVBfUk9NX1FT
VFIoTVBfUVNUUl9zb2NrYWRkciksIE1QX1JPTV9QVFIoJm1vZF9zb2NrZXRfc29ja2FkZHJfb2Jq
KSB9LAorCisjZGVmaW5lIEMobmFtZSkgeyBNUF9ST01fUVNUUihNUF9RU1RSXyAjIyBuYW1lKSwg
TVBfUk9NX0lOVChuYW1lKSB9CisgICAgQyhBRl9VTklYKSwKKyAgICBDKEFGX0lORVQpLAorICAg
IEMoQUZfSU5FVDYpLAorICAgIEMoU09DS19TVFJFQU0pLAorICAgIEMoU09DS19ER1JBTSksCisg
ICAgQyhTT0NLX1JBVyksCisKKyAgICBDKE1TR19ET05UUk9VVEUpLAorICAgIEMoTVNHX0RPTlRX
QUlUKSwKKworICAgIEMoU09MX1NPQ0tFVCksCisgICAgQyhTT19CUk9BRENBU1QpLAorICAgIEMo
U09fRVJST1IpLAorICAgIEMoU09fS0VFUEFMSVZFKSwKKyAgICBDKFNPX0xJTkdFUiksCisgICAg
QyhTT19SRVVTRUFERFIpLAorI3VuZGVmIEMKK307CisKK1NUQVRJQyBNUF9ERUZJTkVfQ09OU1Rf
RElDVChtcF9tb2R1bGVfc29ja2V0X2dsb2JhbHMsIG1wX21vZHVsZV9zb2NrZXRfZ2xvYmFsc190
YWJsZSk7CisKK2NvbnN0IG1wX29ial9tb2R1bGVfdCBtcF9tb2R1bGVfc29ja2V0ID0geworICAg
IC5iYXNlID0geyAmbXBfdHlwZV9tb2R1bGUgfSwKKyAgICAuZ2xvYmFscyA9IChtcF9vYmpfZGlj
dF90KikmbXBfbW9kdWxlX3NvY2tldF9nbG9iYWxzLAorfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUv
bW9kbHdpcC5oIGIvaW5jbHVkZS9tb2Rsd2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZjc1NDY4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbW9kbHdpcC5oCkBA
IC0wLDAgKzEsMTExIEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIE1pY3JvIFB5
dGhvbiBwcm9qZWN0LCBodHRwOi8vbWljcm9weXRob24ub3JnLworICoKKyAqIFRoZSBNSVQgTGlj
ZW5zZSAoTUlUKQorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMywgMjAxNCBEYW1pZW4gUC4gR2Vv
cmdlCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgR2FsZW4gSGF6ZWx3b29kCisgKgorICogUGVybWlz
c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0
YWluaW5nIGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu
dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2Fy
ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBy
aWdodHMKKyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0
ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu
ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVk
IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFs
bCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs
IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO
Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF
TUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xE
RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwg
QVJJU0lORyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB
UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICov
CisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0
ZGlvLmg+CisKKyNpbmNsdWRlICJweS9ubHIuaCIKKyNpbmNsdWRlICJweS9vYmpsaXN0LmgiCisj
aW5jbHVkZSAicHkvcnVudGltZS5oIgorI2luY2x1ZGUgInB5L3N0cmVhbS5oIgorI2luY2x1ZGUg
InB5L21waGFsLmgiCisKKyNpbmNsdWRlICJuZXR1dGlscy5oIgorCisjaW5jbHVkZSAibHdpcC9p
bml0LmgiCisjaW5jbHVkZSAibHdpcC90aW1lcnMuaCIKKyNpbmNsdWRlICJsd2lwL3RjcC5oIgor
I2luY2x1ZGUgImx3aXAvdWRwLmgiCisjaW5jbHVkZSAibHdpcC9kbnMuaCIKKyNpbmNsdWRlICJs
d2lwL3RjcF9pbXBsLmgiCisjaW5jbHVkZSAibHdpcC9uZXRpZi5oIgorI2luY2x1ZGUgImx3aXAv
aW5ldC5oIgorI2luY2x1ZGUgImx3aXAvcHJvdC9ldGhlcm5ldC5oIgorLy8jaW5jbHVkZSA8bWlu
aS1vcy9sd2lwLW5ldC5oPgorCit0eXBlZGVmIHN0cnVjdCBfbHdpcF9zb2NrZXRfb2JqX3Qgewor
ICAgIG1wX29ial9iYXNlX3QgYmFzZTsKKworICAgIHZvbGF0aWxlIHVuaW9uIHsKKyAgICAgICAg
c3RydWN0IHRjcF9wY2IgKnRjcDsKKyAgICAgICAgc3RydWN0IHVkcF9wY2IgKnVkcDsKKyAgICB9
IHBjYjsKKyAgICB2b2xhdGlsZSB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBwYnVmICpwYnVmOwor
ICAgICAgICBzdHJ1Y3QgdGNwX3BjYiAqY29ubmVjdGlvbjsKKyAgICB9IGluY29taW5nOworICAg
IG1wX29ial90IGNhbGxiYWNrOworICAgIGJ5dGUgcGVlcls0XTsKKyAgICBtcF91aW50X3QgcGVl
cl9wb3J0OworICAgIG1wX3VpbnRfdCB0aW1lb3V0OworICAgIHVpbnQxNl90IGxlZnRvdmVyX2Nv
dW50OworCisgICAgdWludDhfdCBkb21haW47CisgICAgdWludDhfdCB0eXBlOworCisgICAgI2Rl
ZmluZSBTVEFURV9ORVcgMAorICAgICNkZWZpbmUgU1RBVEVfQ09OTkVDVElORyAxCisgICAgI2Rl
ZmluZSBTVEFURV9DT05ORUNURUQgMgorICAgICNkZWZpbmUgU1RBVEVfUEVFUl9DTE9TRUQgMwor
ICAgIC8vIE5lZ2F0aXZlIHZhbHVlIGlzIGx3SVAgZXJyb3IKKyAgICBpbnQ4X3Qgc3RhdGU7Cit9
IGx3aXBfc29ja2V0X29ial90OworCitzdHJ1Y3QgbWNhcmdzIHsKKyAgc3RydWN0IGV0aF9hZGRy
IG1hYzsKKyAgc3RydWN0IG5ldGlmICAgIG5ldGlmOworICBpcDRfYWRkcl90ICAgICAgaXA7Cisg
IGlwNF9hZGRyX3QgICAgICBtYXNrOworICBpcDRfYWRkcl90ICAgICAgZ3c7CisgICNpZiBMV0lQ
X0ROUworICBpcDRfYWRkcl90ICAgICAgZG5zMDsKKyAgaXA0X2FkZHJfdCAgICAgIGRuczE7Cisg
ICNlbmRpZgorfSBhcmdzOworCisKK3ZvaWQgbHdpcF9zb2NrZXRfcHJpbnQoY29uc3QgbXBfcHJp
bnRfdCAqcHJpbnQsIG1wX29ial90IHNlbGZfaW4sIG1wX3ByaW50X2tpbmRfdCBraW5kKTsKK21w
X29ial90IGx3aXBfc29ja2V0X2Nsb3NlKG1wX29ial90IHNlbGZfaW4pOworbXBfb2JqX3QgbHdp
cF9zb2NrZXRfYmluZChtcF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBhZGRyX2luKTsKK21wX29i
al90IGx3aXBfc29ja2V0X2xpc3RlbihtcF9vYmpfdCBzZWxmX2luLCBtcF9vYmpfdCBiYWNrbG9n
X2luKTsKK21wX29ial90IGx3aXBfc29ja2V0X2FjY2VwdChtcF9vYmpfdCBzZWxmX2luKTsKK21w
X29ial90IGx3aXBfc29ja2V0X2Nvbm5lY3QobXBfb2JqX3Qgc2VsZl9pbiwgbXBfb2JqX3QgYWRk
cl9pbik7Cit2b2lkIGx3aXBfc29ja2V0X2NoZWNrX2Nvbm5lY3RlZChsd2lwX3NvY2tldF9vYmpf
dCAqc29ja2V0KTsKK21wX29ial90IGx3aXBfc29ja2V0X3NlbmQobXBfb2JqX3Qgc2VsZl9pbiwg
bXBfb2JqX3QgYnVmX2luKTsKK21wX29ial90IGx3aXBfc29ja2V0X3JlY3YobXBfb2JqX3Qgc2Vs
Zl9pbiwgbXBfb2JqX3QgbGVuX2luKTsKK21wX29ial90IGx3aXBfc29ja2V0X3NlbmR0byhtcF9v
YmpfdCBzZWxmX2luLCBtcF9vYmpfdCBkYXRhX2luLCBtcF9vYmpfdCBhZGRyX2luKTsKK21wX29i
al90IGx3aXBfc29ja2V0X3JlY3Zmcm9tKG1wX29ial90IHNlbGZfaW4sIG1wX29ial90IGxlbl9p
bik7CittcF9vYmpfdCBsd2lwX3NvY2tldF9zZW5kYWxsKG1wX29ial90IHNlbGZfaW4sIG1wX29i
al90IGJ1Zl9pbik7CittcF9vYmpfdCBsd2lwX3NvY2tldF9zZXR0aW1lb3V0KG1wX29ial90IHNl
bGZfaW4sIG1wX29ial90IHRpbWVvdXRfaW4pOworbXBfb2JqX3QgbHdpcF9zb2NrZXRfc2V0Ymxv
Y2tpbmcobXBfb2JqX3Qgc2VsZl9pbiwgbXBfb2JqX3QgZmxhZ19pbik7CittcF9vYmpfdCBsd2lw
X3NvY2tldF9zZXRzb2Nrb3B0KG1wX3VpbnRfdCBuX2FyZ3MsIGNvbnN0IG1wX29ial90ICphcmdz
KTsKK21wX29ial90IGx3aXBfc29ja2V0X21ha2VmaWxlKG1wX3VpbnRfdCBuX2FyZ3MsIGNvbnN0
IG1wX29ial90ICphcmdzKTsKK21wX3VpbnRfdCBsd2lwX3NvY2tldF9yZWFkKG1wX29ial90IHNl
bGZfaW4sIHZvaWQgKmJ1ZiwgbXBfdWludF90IHNpemUsIGludCAqZXJyY29kZSk7CittcF91aW50
X3QgbHdpcF9zb2NrZXRfd3JpdGUobXBfb2JqX3Qgc2VsZl9pbiwgY29uc3Qgdm9pZCAqYnVmLCBt
cF91aW50X3Qgc2l6ZSwgaW50ICplcnJjb2RlKTsKK21wX29ial90IGx3aXBfc29ja2V0X21ha2Vf
bmV3KGNvbnN0IG1wX29ial90eXBlX3QgKnR5cGUsIG1wX3VpbnRfdCBuX2FyZ3MsIG1wX3VpbnRf
dCBuX2t3LCBjb25zdCBtcF9vYmpfdCAqYXJncyk7CittcF9vYmpfdCBsd2lwX2dldGFkZHJpbmZv
KG1wX29ial90IGhvc3RfaW4sIG1wX29ial90IHBvcnRfaW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVk
ZS9tcGNvbmZpZ3BvcnQuaCBiL2luY2x1ZGUvbXBjb25maWdwb3J0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNWRlOTdiZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUv
bXBjb25maWdwb3J0LmgKQEAgLTAsMCArMSwzMjAgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgTWljcm9QeXRob24gcHJvamVjdCwgaHR0cDovL21pY3JvcHl0aG9uLm9yZy8KKyAq
CisgKiBUaGUgTUlUIExpY2Vuc2UgKE1JVCkKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMsIDIw
MTQgRGFtaWVuIFAuIEdlb3JnZQorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyAqIG9mIHRo
aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0
d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgKiB0byB1c2UsIGNvcHks
IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz
ZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g
d2hvbSB0aGUgU29mdHdhcmUgaXMKKyAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAq
IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO
WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE
IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRQorICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD
TEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP
TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAqIE9VVCBP
RiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIg
REVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvLyBvcHRpb25zIHRvIGNvbnRy
b2wgaG93IE1pY3JvUHl0aG9uIGlzIGJ1aWx0CisjZGVmaW5lIE1JQ1JPUFlfSFdfQk9BUkRfTkFN
RSAidW5peCIKKyNkZWZpbmUgTUlDUk9QWV9IV19NQ1VfTkFNRSAidW5rbm93bi1jcHUiCisKKyNk
ZWZpbmUgTUlDUk9QWV9BTExPQ19QQVRIX01BWCAgICAgIChQQVRIX01BWCkKKyNkZWZpbmUgTUlD
Uk9QWV9QRVJTSVNURU5UX0NPREVfTE9BRCAoMSkKKyNpZiAhZGVmaW5lZChNSUNST1BZX0VNSVRf
WDY0KSAmJiBkZWZpbmVkKF9feDg2XzY0X18pCisgICAgI2RlZmluZSBNSUNST1BZX0VNSVRfWDY0
ICAgICAgICAoMCkKKyNlbmRpZgorI2lmICFkZWZpbmVkKE1JQ1JPUFlfRU1JVF9YODYpICYmIGRl
ZmluZWQoX19pMzg2X18pCisgICAgI2RlZmluZSBNSUNST1BZX0VNSVRfWDg2ICAgICAgICAoMSkK
KyNlbmRpZgorI2lmICFkZWZpbmVkKE1JQ1JPUFlfRU1JVF9USFVNQikgJiYgZGVmaW5lZChfX3Ro
dW1iMl9fKQorICAgICNkZWZpbmUgTUlDUk9QWV9FTUlUX1RIVU1CICAgICAgKDEpCisgICAgI2Rl
ZmluZSBNSUNST1BZX01BS0VfUE9JTlRFUl9DQUxMQUJMRShwKSAoKHZvaWQqKSgobXBfdWludF90
KShwKSB8IDEpKQorI2VuZGlmCisvLyBTb21lIGNvbXBpbGVycyBkZWZpbmUgX190aHVtYjJfXyBh
bmQgX19hcm1fXyBhdCB0aGUgc2FtZSB0aW1lLCBsZXQKKy8vIGF1dG9kZXRlY3RlZCB0aHVtYjIg
ZW1pdHRlciBoYXZlIHByaW9yaXR5LgorI2lmICFkZWZpbmVkKE1JQ1JPUFlfRU1JVF9BUk0pICYm
IGRlZmluZWQoX19hcm1fXykgJiYgIWRlZmluZWQoX190aHVtYjJfXykKKyAgICAjZGVmaW5lIE1J
Q1JPUFlfRU1JVF9BUk0gICAgICAgICgxKQorI2VuZGlmCisjZGVmaW5lIE1JQ1JPUFlfQ09NUF9N
T0RVTEVfQ09OU1QgICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9DT01QX1RSSVBMRV9UVVBMRV9BU1NJ
R04gKDEpCisjZGVmaW5lIE1JQ1JPUFlfQ09NUF9SRVRVUk5fSUZfRVhQUiAoMSkKKyNkZWZpbmUg
TUlDUk9QWV9FTkFCTEVfR0MgICAgICAgICAgICgwKQorI2RlZmluZSBNSUNST1BZX0VOQUJMRV9G
SU5BTElTRVIgICAgKDApCisjZGVmaW5lIE1JQ1JPUFlfU1RBQ0tfQ0hFQ0sgICAgICAgICAoMSkK
KyNkZWZpbmUgTUlDUk9QWV9NQUxMT0NfVVNFU19BTExPQ0FURURfU0laRSAoMSkKKyNkZWZpbmUg
TUlDUk9QWV9NRU1fU1RBVFMgICAgICAgICAgICgxKQorI2RlZmluZSBNSUNST1BZX0RFQlVHX1BS
SU5URVJTICAgICAgKDEpCisvLyBQcmludGluZyBkZWJ1ZyB0byBzdGRlcnIgbWF5IGdpdmUgdGVz
dHMgd2hpY2gKKy8vIGNoZWNrIHN0ZG91dCBhIGNoYW5jZSB0byBwYXNzLCBldGMuCisjZGVmaW5l
IE1JQ1JPUFlfREVCVUdfUFJJTlRFUl9ERVNUICBtcF9zdGRlcnJfcHJpbnQKKyNkZWZpbmUgTUlD
Uk9QWV9SRUFERVJfUE9TSVggICAgICAgICgxKQorI2RlZmluZSBNSUNST1BZX1VTRV9SRUFETElO
RV9ISVNUT1JZICgxKQorI2RlZmluZSBNSUNST1BZX0hFTFBFUl9SRVBMICAgICAgICAgKDEpCisj
ZGVmaW5lIE1JQ1JPUFlfUkVQTF9FTUFDU19LRVlTICAgICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9S
RVBMX0FVVE9fSU5ERU5UICAgICgxKQorI2RlZmluZSBNSUNST1BZX0hFTFBFUl9MRVhFUl9VTklY
ICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfRU5BQkxFX1NPVVJDRV9MSU5FICAoMSkKKyNkZWZpbmUg
TUlDUk9QWV9GTE9BVF9JTVBMICAgICAgICAgIChNSUNST1BZX0ZMT0FUX0lNUExfRE9VQkxFKQor
I2RlZmluZSBNSUNST1BZX0xPTkdJTlRfSU1QTCAgICAgICAgKE1JQ1JPUFlfTE9OR0lOVF9JTVBM
X01QWikKKyNkZWZpbmUgTUlDUk9QWV9TVFJFQU1TX05PTl9CTE9DSyAgICgxKQorI2RlZmluZSBN
SUNST1BZX1NUUkVBTVNfUE9TSVhfQVBJICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfT1BUX0NPTVBV
VEVEX0dPVE8gICAoMSkKKyNpZm5kZWYgTUlDUk9QWV9PUFRfQ0FDSEVfTUFQX0xPT0tVUF9JTl9C
WVRFQ09ERQorI2RlZmluZSBNSUNST1BZX09QVF9DQUNIRV9NQVBfTE9PS1VQX0lOX0JZVEVDT0RF
ICgxKQorI2VuZGlmCisjZGVmaW5lIE1JQ1JPUFlfQ0FOX09WRVJSSURFX0JVSUxUSU5TICgxKQor
I2RlZmluZSBNSUNST1BZX1BZX0ZVTkNUSU9OX0FUVFJTICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlf
UFlfREVTQ1JJUFRPUlMgICAgICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9QWV9CVUlMVElOU19TVFJf
VU5JQ09ERSAoMSkKKyNkZWZpbmUgTUlDUk9QWV9QWV9CVUlMVElOU19TVFJfQ0VOVEVSICgxKQor
I2RlZmluZSBNSUNST1BZX1BZX0JVSUxUSU5TX1NUUl9QQVJUSVRJT04gKDEpCisjZGVmaW5lIE1J
Q1JPUFlfUFlfQlVJTFRJTlNfU1RSX1NQTElUTElORVMgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlf
QlVJTFRJTlNfTUVNT1JZVklFVyAoMSkKKyNkZWZpbmUgTUlDUk9QWV9QWV9CVUlMVElOU19GUk9a
RU5TRVQgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfQlVJTFRJTlNfQ09NUElMRSAoMSkKKyNkZWZp
bmUgTUlDUk9QWV9QWV9CVUlMVElOU19OT1RJTVBMRU1FTlRFRCAoMSkKKyNkZWZpbmUgTUlDUk9Q
WV9QWV9CVUlMVElOU19JTlBVVCAgICgxKQorI2RlZmluZSBNSUNST1BZX1BZX0JVSUxUSU5TX1BP
VzMgICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfTUlDUk9QWVRIT05fTUVNX0lORk8gKDEpCisj
ZGVmaW5lIE1JQ1JPUFlfUFlfQUxMX1NQRUNJQUxfTUVUSE9EUyAoMSkKKyNkZWZpbmUgTUlDUk9Q
WV9QWV9BUlJBWV9TTElDRV9BU1NJR04gKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfQlVJTFRJTlNf
U0xJQ0VfQVRUUlMgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfU1lTX0VYSVQgICAgICAgICAoMSkK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX01BQ0hfXykKKyAgICAjZGVmaW5l
IE1JQ1JPUFlfUFlfU1lTX1BMQVRGT1JNICAiZGFyd2luIgorI2Vsc2UKKyAgICAjZGVmaW5lIE1J
Q1JPUFlfUFlfU1lTX1BMQVRGT1JNICAibGludXgiCisjZW5kaWYKKyNkZWZpbmUgTUlDUk9QWV9Q
WV9TWVNfTUFYU0laRSAgICAgICgxKQorI2RlZmluZSBNSUNST1BZX1BZX1NZU19TVERGSUxFUyAg
ICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfU1lTX0VYQ19JTkZPICAgICAoMSkKKyNkZWZpbmUg
TUlDUk9QWV9QWV9DT0xMRUNUSU9OU19PUkRFUkVERElDVCAoMSkKKyNpZm5kZWYgTUlDUk9QWV9Q
WV9NQVRIX1NQRUNJQUxfRlVOQ1RJT05TCisjZGVmaW5lIE1JQ1JPUFlfUFlfTUFUSF9TUEVDSUFM
X0ZVTkNUSU9OUyAoMSkKKyNlbmRpZgorI2RlZmluZSBNSUNST1BZX1BZX0NNQVRIICAgICAgICAg
ICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfSU9fRklMRUlPICAgICAgICAoMSkKKyNkZWZpbmUg
TUlDUk9QWV9QWV9JT19SRVNPVVJDRV9TVFJFQU0gKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfR0Nf
Q09MTEVDVF9SRVRWQUwgKDEpCisjZGVmaW5lIE1JQ1JPUFlfTU9EVUxFX0ZST1pFTl9TVFIgICAo
MSkKKworI2RlZmluZSBNSUNST1BZX1NUQUNLTEVTUyAgICAgICAgICAgKDApCisjZGVmaW5lIE1J
Q1JPUFlfU1RBQ0tMRVNTX1NUUklDVCAgICAoMCkKKworI2RlZmluZSBNSUNST1BZX1BZX09TX1NU
QVRWRlMgICAgICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfVVRJTUUgICAgICAgICAgICAoMSkK
KyNkZWZpbmUgTUlDUk9QWV9QWV9VVElNRV9NUF9IQUwgICAgICgxKQorI2RlZmluZSBNSUNST1BZ
X1BZX1VFUlJOTyAgICAgICAgICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfVUNUWVBFUyAgICAg
ICAgICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9QWV9VWkxJQiAgICAgICAgICAgICgxKQorI2RlZmlu
ZSBNSUNST1BZX1BZX1VKU09OICAgICAgICAgICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfVVJF
ICAgICAgICAgICAgICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9QWV9VSEVBUFEgICAgICAgICAgICgx
KQorI2RlZmluZSBNSUNST1BZX1BZX1VUSU1FUSAgICAgICAgICAgKDEpCisjZGVmaW5lIE1JQ1JP
UFlfUFlfVUhBU0hMSUIgICAgICAgICAoMSkKKyNpZiBNSUNST1BZX1BZX1VTU0wgJiYgTUlDUk9Q
WV9TU0xfQVhUTFMKKyNkZWZpbmUgTUlDUk9QWV9QWV9VSEFTSExJQl9TSEExICAgICgxKQorI2Vu
ZGlmCisjZGVmaW5lIE1JQ1JPUFlfUFlfVUJJTkFTQ0lJICAgICAgICAoMSkKKyNkZWZpbmUgTUlD
Uk9QWV9QWV9VQklOQVNDSUlfQ1JDMzIgICgxKQorI2RlZmluZSBNSUNST1BZX1BZX1VSQU5ET00g
ICAgICAgICAgKDEpCisjaWZuZGVmIE1JQ1JPUFlfUFlfVVNFTEVDVF9QT1NJWAorI2RlZmluZSBN
SUNST1BZX1BZX1VTRUxFQ1RfUE9TSVggICAgKDEpCisjZW5kaWYKKyNkZWZpbmUgTUlDUk9QWV9Q
WV9XRUJTT0NLRVQgICAgICAgICgxKQorI2RlZmluZSBNSUNST1BZX1BZX01BQ0hJTkUgICAgICAg
ICAgKDEpCisjZGVmaW5lIE1JQ1JPUFlfUFlfTUFDSElORV9QVUxTRSAgICAoMSkKKyNkZWZpbmUg
TUlDUk9QWV9NQUNISU5FX01FTV9HRVRfUkVBRF9BRERSICAgbW9kX21hY2hpbmVfbWVtX2dldF9h
ZGRyCisjZGVmaW5lIE1JQ1JPUFlfTUFDSElORV9NRU1fR0VUX1dSSVRFX0FERFIgIG1vZF9tYWNo
aW5lX21lbV9nZXRfYWRkcgorCisjZGVmaW5lIE1JQ1JPUFlfRkFURlNfRU5BQkxFX0xGTiAgICAg
ICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9GQVRGU19SUEFUSCAgICAgICAgICAgICgyKQorI2RlZmlu
ZSBNSUNST1BZX0ZBVEZTX01BWF9TUyAgICAgICAgICAgKDQwOTYpCisjZGVmaW5lIE1JQ1JPUFlf
RkFURlNfTEZOX0NPREVfUEFHRSAgICAoNDM3KSAvKiAxPVNGTi9BTlNJIDQzNz1MRk4vVS5TLihP
RU0pICovCisjZGVmaW5lIE1JQ1JPUFlfVkZTX0ZBVCAgICAgICAgICAgICAgICAoMCkKKworLy8g
RGVmaW5lIHRvIE1JQ1JPUFlfRVJST1JfUkVQT1JUSU5HX0RFVEFJTEVEIHRvIGdldCBmdW5jdGlv
biwgZXRjLgorLy8gbmFtZXMgaW4gZXhjZXB0aW9uIG1lc3NhZ2VzIChtYXkgcmVxdWlyZSBtb3Jl
IFJBTSkuCisjZGVmaW5lIE1JQ1JPUFlfRVJST1JfUkVQT1JUSU5HICAgICAoTUlDUk9QWV9FUlJP
Ul9SRVBPUlRJTkdfREVUQUlMRUQpCisjZGVmaW5lIE1JQ1JPUFlfV0FSTklOR1MgICAgICAgICAg
ICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9QWV9TVFJfQllURVNfQ01QX1dBUk4gKDEpCisKKy8vIERl
ZmluZSB0byAxIHRvIHVzZSB1bmRlcnRlc3RlZCBpbmVmZmljaWVudCBHQyBoZWxwZXIgaW1wbGVt
ZW50YXRpb24KKy8vIChpZiBtb3JlIGVmZmljaWVudCBhcmNoLXNwZWNpZmljIG9uZSBpcyBub3Qg
YXZhaWxhYmxlKS4KKyNpZm5kZWYgTUlDUk9QWV9HQ1JFR1NfU0VUSk1QCisgICAgI2lmZGVmIF9f
bWlwc19fCisgICAgICAgICNkZWZpbmUgTUlDUk9QWV9HQ1JFR1NfU0VUSk1QICgxKQorICAgICNl
bHNlCisgICAgICAgICNkZWZpbmUgTUlDUk9QWV9HQ1JFR1NfU0VUSk1QICgwKQorICAgICNlbmRp
ZgorI2VuZGlmCisKKyNkZWZpbmUgTUlDUk9QWV9FTkFCTEVfRU1FUkdFTkNZX0VYQ0VQVElPTl9C
VUYgICAoMSkKKyNkZWZpbmUgTUlDUk9QWV9FTUVSR0VOQ1lfRVhDRVBUSU9OX0JVRl9TSVpFICAo
MjU2KQorI2RlZmluZSBNSUNST1BZX0tCRF9FWENFUFRJT04gICAgICAgKDEpCisjZGVmaW5lIE1J
Q1JPUFlfQVNZTkNfS0JEX0lOVFIgICAgICAoMSkKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbXBf
b2JqX21vZHVsZV90IG1wX21vZHVsZV9tYWNoaW5lOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbXBf
b2JqX21vZHVsZV90IG1wX21vZHVsZV9vczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgX21wX29ial9t
b2R1bGVfdCBtcF9tb2R1bGVfdW9zX3ZmczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgX21wX29ial9t
b2R1bGVfdCBtcF9tb2R1bGVfdXNlbGVjdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgX21wX29ial9t
b2R1bGVfdCBtcF9tb2R1bGVfdGltZTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgX21wX29ial9tb2R1
bGVfdCBtcF9tb2R1bGVfdGVybWlvczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgX21wX29ial9tb2R1
bGVfdCBtcF9tb2R1bGVfc29ja2V0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBfbXBfb2JqX21vZHVs
ZV90IG1wX21vZHVsZV9mZmk7CitleHRlcm4gY29uc3Qgc3RydWN0IF9tcF9vYmpfbW9kdWxlX3Qg
bXBfbW9kdWxlX2puaTsKKworI2lmIE1JQ1JPUFlfUFlfVU9TX1ZGUworI2RlZmluZSBNSUNST1BZ
X1BZX1VPU19WRlNfREVGIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl91b3NfdmZzKSwgTVBfUk9NX1BU
UigmbXBfbW9kdWxlX3Vvc192ZnMpIH0sCisjZWxzZQorI2RlZmluZSBNSUNST1BZX1BZX1VPU19W
RlNfREVGCisjZW5kaWYKKyNpZiBNSUNST1BZX1BZX0ZGSQorI2RlZmluZSBNSUNST1BZX1BZX0ZG
SV9ERUYgeyBNUF9ST01fUVNUUihNUF9RU1RSX2ZmaSksIE1QX1JPTV9QVFIoJm1wX21vZHVsZV9m
ZmkpIH0sCisjZWxzZQorI2RlZmluZSBNSUNST1BZX1BZX0ZGSV9ERUYKKyNlbmRpZgorI2lmIE1J
Q1JPUFlfUFlfSk5JCisjZGVmaW5lIE1JQ1JPUFlfUFlfSk5JX0RFRiB7IE1QX1JPTV9RU1RSKE1Q
X1FTVFJfam5pKSwgTVBfUk9NX1BUUigmbXBfbW9kdWxlX2puaSkgfSwKKyNlbHNlCisjZGVmaW5l
IE1JQ1JPUFlfUFlfSk5JX0RFRgorI2VuZGlmCisjaWYgTUlDUk9QWV9QWV9VVElNRQorI2RlZmlu
ZSBNSUNST1BZX1BZX1VUSU1FX0RFRiB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfdXRpbWUpLCBNUF9S
T01fUFRSKCZtcF9tb2R1bGVfdGltZSkgfSwKKyNlbHNlCisjZGVmaW5lIE1JQ1JPUFlfUFlfVVRJ
TUVfREVGCisjZW5kaWYKKyNpZiBNSUNST1BZX1BZX1RFUk1JT1MKKyNkZWZpbmUgTUlDUk9QWV9Q
WV9URVJNSU9TX0RFRiB7IE1QX1JPTV9RU1RSKE1QX1FTVFJfdGVybWlvcyksIE1QX1JPTV9QVFIo
Jm1wX21vZHVsZV90ZXJtaW9zKSB9LAorI2Vsc2UKKyNkZWZpbmUgTUlDUk9QWV9QWV9URVJNSU9T
X0RFRgorI2VuZGlmCisjaWYgTUlDUk9QWV9QWV9TT0NLRVQKKyNkZWZpbmUgTUlDUk9QWV9QWV9T
T0NLRVRfREVGIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl91c29ja2V0KSwgTVBfUk9NX1BUUigmbXBf
bW9kdWxlX3NvY2tldCkgfSwKKyNlbHNlCisjZGVmaW5lIE1JQ1JPUFlfUFlfU09DS0VUX0RFRgor
I2VuZGlmCisjaWYgTUlDUk9QWV9QWV9VU0VMRUNUX1BPU0lYCisjZGVmaW5lIE1JQ1JPUFlfUFlf
VVNFTEVDVF9ERUYgeyBNUF9ST01fUVNUUihNUF9RU1RSX3VzZWxlY3QpLCBNUF9ST01fUFRSKCZt
cF9tb2R1bGVfdXNlbGVjdCkgfSwKKyNlbHNlCisjZGVmaW5lIE1JQ1JPUFlfUFlfVVNFTEVDVF9E
RUYKKyNlbmRpZgorCisjZGVmaW5lIE1JQ1JPUFlfUE9SVF9CVUlMVElOX01PRFVMRVMgXAorICAg
IE1JQ1JPUFlfUFlfRkZJX0RFRiBcCisgICAgTUlDUk9QWV9QWV9KTklfREVGIFwKKyAgICBNSUNS
T1BZX1BZX1VUSU1FX0RFRiBcCisgICAgTUlDUk9QWV9QWV9TT0NLRVRfREVGIFwKKyAgICB7IE1Q
X1JPTV9RU1RSKE1QX1FTVFJfdW1hY2hpbmUpLCBNUF9ST01fUFRSKCZtcF9tb2R1bGVfbWFjaGlu
ZSkgfSwgXAorICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl91b3MpLCBNUF9ST01fUFRSKCZtcF9t
b2R1bGVfb3MpIH0sIFwKKyAgICBNSUNST1BZX1BZX1VPU19WRlNfREVGIFwKKyAgICBNSUNST1BZ
X1BZX1VTRUxFQ1RfREVGIFwKKyAgICBNSUNST1BZX1BZX1RFUk1JT1NfREVGIFwKKworLy8gdHlw
ZSBkZWZpbml0aW9ucyBmb3IgdGhlIHNwZWNpZmljIG1hY2hpbmUKKworLy8gRm9yIHNpemVfdCBh
bmQgc3NpemVfdAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisvLyBhc3N1bWUgdGhhdCBpZiB3ZSBh
bHJlYWR5IGRlZmluZWQgdGhlIG9iaiByZXByIHRoZW4gd2UgYWxzbyBkZWZpbmVkIHR5cGVzCisj
aWZuZGVmIE1JQ1JPUFlfT0JKX1JFUFIKKyNpZmRlZiBfX0xQNjRfXwordHlwZWRlZiBsb25nIG1w
X2ludF90OyAvLyBtdXN0IGJlIHBvaW50ZXIgc2l6ZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIG1w
X3VpbnRfdDsgLy8gbXVzdCBiZSBwb2ludGVyIHNpemUKKyNlbHNlCisvLyBUaGVzZSBhcmUgZGVm
aW5pdGlvbnMgZm9yIG1hY2hpbmVzIHdoZXJlIHNpemVvZihpbnQpID09IHNpemVvZih2b2lkKiks
CisvLyByZWdhcmRsZXNzIG9mIGFjdHVhbCBzaXplLgordHlwZWRlZiBpbnQgbXBfaW50X3Q7IC8v
IG11c3QgYmUgcG9pbnRlciBzaXplCit0eXBlZGVmIHVuc2lnbmVkIGludCBtcF91aW50X3Q7IC8v
IG11c3QgYmUgcG9pbnRlciBzaXplCisjZW5kaWYKKyNlbmRpZgorCisvLyBDYW5ub3QgaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+LCBhcyBpdCBtYXkgbGVhZCB0byBzeW1ib2wgbmFtZSBjbGFzaGVzCisj
aWYgX0ZJTEVfT0ZGU0VUX0JJVFMgPT0gNjQgJiYgIWRlZmluZWQoX19MUDY0X18pCit0eXBlZGVm
IGxvbmcgbG9uZyBtcF9vZmZfdDsKKyNlbHNlCit0eXBlZGVmIGxvbmcgbXBfb2ZmX3Q7CisjZW5k
aWYKKwordm9pZCBtcF91bml4X2FsbG9jX2V4ZWMoc2l6ZV90IG1pbl9zaXplLCB2b2lkKiogcHRy
LCBzaXplX3QgKnNpemUpOwordm9pZCBtcF91bml4X2ZyZWVfZXhlYyh2b2lkICpwdHIsIHNpemVf
dCBzaXplKTsKK3ZvaWQgbXBfdW5peF9tYXJrX2V4ZWModm9pZCk7CisjZGVmaW5lIE1QX1BMQVRf
QUxMT0NfRVhFQyhtaW5fc2l6ZSwgcHRyLCBzaXplKSBtcF91bml4X2FsbG9jX2V4ZWMobWluX3Np
emUsIHB0ciwgc2l6ZSkKKyNkZWZpbmUgTVBfUExBVF9GUkVFX0VYRUMocHRyLCBzaXplKSBtcF91
bml4X2ZyZWVfZXhlYyhwdHIsIHNpemUpCisjaWZuZGVmIE1JQ1JPUFlfRk9SQ0VfUExBVF9BTExP
Q19FWEVDCisvLyBVc2UgTVBfUExBVF9BTExPQ19FWEVDIGZvciBhbnkgZXhlY3V0YWJsZSBtZW1v
cnkgYWxsb2NhdGlvbiwgaW5jbHVkaW5nIGZvciBGRkkKKy8vIChvdmVycmlkaW5nIGxpYmZmaSBv
d24gaW1wbGVtZW50YXRpb24pCisjZGVmaW5lIE1JQ1JPUFlfRk9SQ0VfUExBVF9BTExPQ19FWEVD
ICgxKQorI2VuZGlmCisKKyNpZiBNSUNST1BZX1BZX09TX0RVUFRFUk0KKyNkZWZpbmUgTVBfUExB
VF9QUklOVF9TVFJOKHN0ciwgbGVuKSBtcF9oYWxfc3Rkb3V0X3R4X3N0cm5fY29va2VkKHN0ciwg
bGVuKQorI2Vsc2UKKyNkZWZpbmUgTVBfUExBVF9QUklOVF9TVFJOKHN0ciwgbGVuKSBkbyB7IHNz
aXplX3QgcmV0ID0gd3JpdGUoMSwgc3RyLCBsZW4pOyAodm9pZClyZXQ7IH0gd2hpbGUgKDApCisj
ZW5kaWYKKworI2lmZGVmIF9fbGludXhfXworLy8gQ2FuIGFjY2VzcyBwaHlzaWNhbCBtZW1vcnkg
dXNpbmcgL2Rldi9tZW0KKyNkZWZpbmUgTUlDUk9QWV9QTEFUX0RFVl9NRU0gICgxKQorI2VuZGlm
CisKKy8vIEFzc3VtZSB0aGF0IHNlbGVjdCgpIGNhbGwsIGludGVycnVwdGVkIHdpdGggYSBzaWdu
YWwsIGFuZCBlcnJvcmluZworLy8gd2l0aCBFSU5UUiwgdXBkYXRlcyByZW1haW5pbmcgdGltZW91
dCB2YWx1ZS4KKyNkZWZpbmUgTUlDUk9QWV9TRUxFQ1RfUkVNQUlOSU5HX1RJTUUgKDEpCisKKyNp
ZmRlZiBfX0FORFJPSURfXworI2luY2x1ZGUgPGFuZHJvaWQvYXBpLWxldmVsLmg+CisjaWYgX19B
TkRST0lEX0FQSV9fIDwgNAorLy8gQmlvbmljIGxpYmMgaW4gQW5kcm9pZCAxLjUgbWlzc2VzIHRo
ZXNlIDIgZnVuY3Rpb25zCisjZGVmaW5lIE1QX05FRURfTE9HMiAoMSkKKyNkZWZpbmUgbmFuKHgp
IE5BTgorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBNSUNST1BZX1BPUlRfQlVJTFRJTlMgXAor
ICAgIHsgTVBfUk9NX1FTVFIoTVBfUVNUUl9vcGVuKSwgTVBfUk9NX1BUUigmbXBfYnVpbHRpbl9v
cGVuX29iaikgfSwKKworI2RlZmluZSBNUF9TVEFURV9QT1JUIE1QX1NUQVRFX1ZNCisKKyNkZWZp
bmUgTUlDUk9QWV9QT1JUX1JPT1RfUE9JTlRFUlMgXAorICAgIGNvbnN0IGNoYXIgKnJlYWRsaW5l
X2hpc3RbNTBdOyBcCisgICAgdm9pZCAqbW1hcF9yZWdpb25faGVhZDsgXAorCisvLyBXZSBuZWVk
IHRvIHByb3ZpZGUgYSBkZWNsYXJhdGlvbi9kZWZpbml0aW9uIG9mIGFsbG9jYSgpCisvLyB1bmxl
c3Mgc3VwcG9ydCBmb3IgaXQgaXMgZGlzYWJsZWQuCisjaWYgIWRlZmluZWQoTUlDUk9QWV9OT19B
TExPQ0EpIHx8IE1JQ1JPUFlfTk9fQUxMT0NBID09IDAKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbmRpZgorI2Vu
ZGlmCisKKy8vIEZyb20gIm1hbiByZWFkZGlyIjogIlVuZGVyIGdsaWJjLCBwcm9ncmFtcyBjYW4g
Y2hlY2sgZm9yIHRoZSBhdmFpbGFiaWxpdHkKKy8vIG9mIHRoZSBmaWVsZHMgW2luIHN0cnVjdCBk
aXJlbnRdIG5vdCBkZWZpbmVkIGluIFBPU0lYLjEgYnkgdGVzdGluZyB3aGV0aGVyCisvLyB0aGUg
bWFjcm9zIFsuLi5dLCBfRElSRU5UX0hBVkVfRF9UWVBFIGFyZSBkZWZpbmVkLiIKKy8vIE90aGVy
IGxpYmMncyBkb24ndCBkZWZpbmUgaXQsIGJ1dCBwcm9hY3RpdmVseSBhc3N1bWUgdGhhdCBkaXJl
bnQtPmRfdHlwZQorLy8gaXMgYXZhaWxhYmxlIG9uIGEgbW9kZXJuICpuaXggc3lzdGVtLgorI2lm
bmRlZiBfRElSRU5UX0hBVkVfRF9UWVBFCisjZGVmaW5lIF9ESVJFTlRfSEFWRV9EX1RZUEUgKDEp
CisjZW5kaWYKKy8vIFRoaXMgbWFjcm8gaXMgbm90IHByb3ZpZGVkIGJ5IGdsaWJjIGJ1dCB3ZSBu
ZWVkIGl0IHNvIHBvcnRzIHRoYXQgZG9uJ3QgaGF2ZQorLy8gZGlyZW50LT5kX2lubyBjYW4gZGlz
YWJsZSB0aGUgdXNlIG9mIHRoaXMgZmllbGQuCisjaWZuZGVmIF9ESVJFTlRfSEFWRV9EX0lOTwor
I2RlZmluZSBfRElSRU5UX0hBVkVfRF9JTk8gKDEpCisjZW5kaWYKKworI2lmbmRlZiBfX0FQUExF
X18KKy8vIEZvciBkZWJ1Z2dpbmcgcHVycG9zZXMsIG1ha2UgcHJpbnRmKCkgYXZhaWxhYmxlIHRv
IGFueSBzb3VyY2UgZmlsZS4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2VuZGlmCmRpZmYgLS1naXQg
YS9tYWluLmMgYi9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJk
ZGNmZAotLS0gL2Rldi9udWxsCisrKyBiL21haW4uYwpAQCAtMCwwICsxLDU0MyBAQAorLyoKKyAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBNaWNyb1B5dGhvbiBwcm9qZWN0LCBodHRwOi8vbWlj
cm9weXRob24ub3JnLworICoKKyAqIFRoZSBNSVQgTGljZW5zZSAoTUlUKQorICoKKyAqIENvcHly
aWdodCAoYykgMjAxMywgMjAxNCBEYW1pZW4gUC4gR2VvcmdlCisgKgorICogUGVybWlzc2lvbiBp
cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n
IGEgY29weQorICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u
IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyAqIGluIHRoZSBTb2Z0d2FyZSB3aXRo
b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMK
KyAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi
bGljZW5zZSwgYW5kL29yIHNlbGwKKyAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw
ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworICogZnVybmlzaGVkIHRvIGRv
IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBp
bmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUg
U29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhP
VVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElO
RyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAor
ICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF
IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO
RyBGUk9NLAorICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig
VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorICogVEhFIFNPRlRXQVJFLgorICovCisKKyNp
bmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8u
aD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxz
dGRhcmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1
ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2luY2x1ZGUgPHVrL3BsYXQvbWVtb3J5Lmg+CisK
KyNpbmNsdWRlICJweS9tcHN0YXRlLmgiCisjaW5jbHVkZSAicHkvbmxyLmgiCisjaW5jbHVkZSAi
cHkvY29tcGlsZS5oIgorI2luY2x1ZGUgInB5L3J1bnRpbWUuaCIKKyNpbmNsdWRlICJweS9idWls
dGluLmgiCisjaW5jbHVkZSAicHkvcmVwbC5oIgorI2luY2x1ZGUgInB5L2djLmgiCisjaW5jbHVk
ZSAicHkvc3RhY2tjdHJsLmgiCisjaW5jbHVkZSAicHkvbXBoYWwuaCIKKyNpbmNsdWRlICJweS9t
cHRocmVhZC5oIgorI2luY2x1ZGUgImV4dG1vZC9taXNjLmgiCisjaW5jbHVkZSAiZ2VuaGRyL21w
dmVyc2lvbi5oIgorI2luY2x1ZGUgImlucHV0LmgiCisjaW5jbHVkZSAicHlleGVjLmgiCisKKy8v
IENvbW1hbmQgbGluZSBvcHRpb25zLCB3aXRoIHRoZWlyIGRlZmF1bHRzCitTVEFUSUMgYm9vbCBj
b21waWxlX29ubHkgPSBmYWxzZTsKK1NUQVRJQyB1aW50IGVtaXRfb3B0ID0gTVBfRU1JVF9PUFRf
Tk9ORTsKKworI2lmIE1JQ1JPUFlfRU5BQkxFX0dDCisvLyBIZWFwIHNpemUgb2YgR0MgaGVhcCAo
aWYgZW5hYmxlZCkKKy8vIE1ha2UgaXQgbGFyZ2VyIG9uIGEgNjQgYml0IG1hY2hpbmUsIGJlY2F1
c2UgcG9pbnRlcnMgYXJlIGxhcmdlci4KK2xvbmcgaGVhcF9zaXplID0gMTAyNCoxMDI0ICogKHNp
emVvZihtcF91aW50X3QpIC8gNCk7CisjZW5kaWYKKworU1RBVElDIHZvaWQgc3RkZXJyX3ByaW50
X3N0cm4odm9pZCAqZW52LCBjb25zdCBjaGFyICpzdHIsIHNpemVfdCBsZW4pIHsKKyAgICAodm9p
ZCllbnY7CisgICAgc3NpemVfdCBkdW1teSA9IHdyaXRlKFNUREVSUl9GSUxFTk8sIHN0ciwgbGVu
KTsKKyAgICBtcF91b3NfZHVwdGVybV90eF9zdHJuKHN0ciwgbGVuKTsKKyAgICAodm9pZClkdW1t
eTsKK30KKworY29uc3QgbXBfcHJpbnRfdCBtcF9zdGRlcnJfcHJpbnQgPSB7TlVMTCwgc3RkZXJy
X3ByaW50X3N0cm59OworCisjZGVmaW5lIEZPUkNFRF9FWElUICgweDEwMCkKKy8vIElmIGV4YyBp
cyBTeXN0ZW1FeGl0LCByZXR1cm4gdmFsdWUgd2hlcmUgRk9SQ0VEX0VYSVQgYml0IHNldCwKKy8v
IGFuZCBsb3dlciA4IGJpdHMgYXJlIFN5c3RlbUV4aXQgdmFsdWUuIEZvciBhbGwgb3RoZXIgZXhj
ZXB0aW9ucywKKy8vIHJldHVybiAxLgorU1RBVElDIGludCBoYW5kbGVfdW5jYXVnaHRfZXhjZXB0
aW9uKG1wX29ial9iYXNlX3QgKmV4YykgeworICAgIC8vIGNoZWNrIGZvciBTeXN0ZW1FeGl0Cisg
ICAgaWYgKG1wX29ial9pc19zdWJjbGFzc19mYXN0KE1QX09CSl9GUk9NX1BUUihleGMtPnR5cGUp
LCBNUF9PQkpfRlJPTV9QVFIoJm1wX3R5cGVfU3lzdGVtRXhpdCkpKSB7CisgICAgICAgIC8vIE5v
bmUgaXMgYW4gZXhpdCB2YWx1ZSBvZiAwOyBhbiBpbnQgaXMgaXRzIHZhbHVlOyBhbnl0aGluZyBl
bHNlIGlzIDEKKyAgICAgICAgbXBfb2JqX3QgZXhpdF92YWwgPSBtcF9vYmpfZXhjZXB0aW9uX2dl
dF92YWx1ZShNUF9PQkpfRlJPTV9QVFIoZXhjKSk7CisgICAgICAgIG1wX2ludF90IHZhbCA9IDA7
CisgICAgICAgIGlmIChleGl0X3ZhbCAhPSBtcF9jb25zdF9ub25lICYmICFtcF9vYmpfZ2V0X2lu
dF9tYXliZShleGl0X3ZhbCwgJnZhbCkpIHsKKyAgICAgICAgICAgIHZhbCA9IDE7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIEZPUkNFRF9FWElUIHwgKHZhbCAmIDI1NSk7CisgICAgfQorCisg
ICAgLy8gUmVwb3J0IGFsbCBvdGhlciBleGNlcHRpb25zCisgICAgbXBfb2JqX3ByaW50X2V4Y2Vw
dGlvbigmbXBfc3RkZXJyX3ByaW50LCBNUF9PQkpfRlJPTV9QVFIoZXhjKSk7CisgICAgcmV0dXJu
IDE7Cit9CisKKyNkZWZpbmUgTEVYX1NSQ19TVFIgKDEpCisjZGVmaW5lIExFWF9TUkNfVlNUUiAo
MikKKyNkZWZpbmUgTEVYX1NSQ19GSUxFTkFNRSAoMykKKyNkZWZpbmUgTEVYX1NSQ19TVERJTiAo
NCkKKworLy8gUmV0dXJucyBzdGFuZGFyZCBlcnJvciBjb2RlczogMCBmb3Igc3VjY2VzcywgMSBm
b3IgYWxsIG90aGVyIGVycm9ycywKKy8vIGV4Y2VwdCBpZiBGT1JDRURfRVhJVCBiaXQgaXMgc2V0
IHRoZW4gc2NyaXB0IHJhaXNlZCBTeXN0ZW1FeGl0IGFuZCB0aGUKKy8vIHZhbHVlIG9mIHRoZSBl
eGl0IGlzIGluIHRoZSBsb3dlciA4IGJpdHMgb2YgdGhlIHJldHVybiB2YWx1ZQorU1RBVElDIGlu
dCBleGVjdXRlX2Zyb21fbGV4ZXIoaW50IHNvdXJjZV9raW5kLCBjb25zdCB2b2lkICpzb3VyY2Us
IG1wX3BhcnNlX2lucHV0X2tpbmRfdCBpbnB1dF9raW5kLCBib29sIGlzX3JlcGwpIHsKKyAgICBt
cF9oYWxfc2V0X2ludGVycnVwdF9jaGFyKENIQVJfQ1RSTF9DKTsKKworICAgIG5scl9idWZfdCBu
bHI7CisgICAgaWYgKG5scl9wdXNoKCZubHIpID09IDApIHsKKyAgICAgICAgLy8gY3JlYXRlIGxl
eGVyIGJhc2VkIG9uIHNvdXJjZSBraW5kCisgICAgICAgIG1wX2xleGVyX3QgKmxleDsKKyAgICAg
ICAgaWYgKHNvdXJjZV9raW5kID09IExFWF9TUkNfU1RSKSB7CisgICAgICAgICAgICBjb25zdCBj
aGFyICpsaW5lID0gc291cmNlOworICAgICAgICAgICAgbGV4ID0gbXBfbGV4ZXJfbmV3X2Zyb21f
c3RyX2xlbihNUF9RU1RSX19sdF9zdGRpbl9ndF8sIGxpbmUsIHN0cmxlbihsaW5lKSwgZmFsc2Up
OworICAgICAgICB9IGVsc2UgaWYgKHNvdXJjZV9raW5kID09IExFWF9TUkNfVlNUUikgeworICAg
ICAgICAgICAgY29uc3QgdnN0cl90ICp2c3RyID0gc291cmNlOworICAgICAgICAgICAgbGV4ID0g
bXBfbGV4ZXJfbmV3X2Zyb21fc3RyX2xlbihNUF9RU1RSX19sdF9zdGRpbl9ndF8sIHZzdHItPmJ1
ZiwgdnN0ci0+bGVuLCBmYWxzZSk7CisgICAgICAgIH0gZWxzZSBpZiAoc291cmNlX2tpbmQgPT0g
TEVYX1NSQ19GSUxFTkFNRSkgeworICAgICAgICAgICAgbGV4ID0gbXBfbGV4ZXJfbmV3X2Zyb21f
ZmlsZSgoY29uc3QgY2hhciopc291cmNlKTsKKyAgICAgICAgfSBlbHNlIHsgLy8gTEVYX1NSQ19T
VERJTgorICAgICAgICAgICAgbGV4ID0gbXBfbGV4ZXJfbmV3X2Zyb21fZmQoTVBfUVNUUl9fbHRf
c3RkaW5fZ3RfLCAwLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBxc3RyIHNvdXJjZV9u
YW1lID0gbGV4LT5zb3VyY2VfbmFtZTsKKworICAgICAgICAjaWYgTUlDUk9QWV9QWV9fX0ZJTEVf
XworICAgICAgICBpZiAoaW5wdXRfa2luZCA9PSBNUF9QQVJTRV9GSUxFX0lOUFVUKSB7CisgICAg
ICAgICAgICBtcF9zdG9yZV9nbG9iYWwoTVBfUVNUUl9fX2ZpbGVfXywgTVBfT0JKX05FV19RU1RS
KHNvdXJjZV9uYW1lKSk7CisgICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgbXBf
cGFyc2VfdHJlZV90IHBhcnNlX3RyZWUgPSBtcF9wYXJzZShsZXgsIGlucHV0X2tpbmQpOworCisg
ICAgICAgICNpZiBkZWZpbmVkKE1JQ1JPUFlfVU5JWF9DT1ZFUkFHRSkKKyAgICAgICAgLy8gYWxs
b3cgdG8gcHJpbnQgdGhlIHBhcnNlIHRyZWUgaW4gdGhlIGNvdmVyYWdlIGJ1aWxkCisgICAgICAg
IGlmIChtcF92ZXJib3NlX2ZsYWcgPj0gMykgeworICAgICAgICAgICAgcHJpbnRmKCItLS0tLS0t
LS0tLS0tLS0tXG4iKTsKKyAgICAgICAgICAgIG1wX3BhcnNlX25vZGVfcHJpbnQocGFyc2VfdHJl
ZS5yb290LCAwKTsKKyAgICAgICAgICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLVxuIik7Cisg
ICAgICAgIH0KKyAgICAgICAgI2VuZGlmCisKKyAgICAgICAgbXBfb2JqX3QgbW9kdWxlX2Z1biA9
IG1wX2NvbXBpbGUoJnBhcnNlX3RyZWUsIHNvdXJjZV9uYW1lLCBlbWl0X29wdCwgaXNfcmVwbCk7
CisKKyAgICAgICAgaWYgKCFjb21waWxlX29ubHkpIHsKKyAgICAgICAgICAgIC8vIGV4ZWN1dGUg
aXQKKyAgICAgICAgICAgIG1wX2NhbGxfZnVuY3Rpb25fMChtb2R1bGVfZnVuKTsKKyAgICAgICAg
ICAgIC8vIGNoZWNrIGZvciBwZW5kaW5nIGV4Y2VwdGlvbgorICAgICAgICAgICAgaWYgKE1QX1NU
QVRFX1ZNKG1wX3BlbmRpbmdfZXhjZXB0aW9uKSAhPSBNUF9PQkpfTlVMTCkgeworICAgICAgICAg
ICAgICAgIG1wX29ial90IG9iaiA9IE1QX1NUQVRFX1ZNKG1wX3BlbmRpbmdfZXhjZXB0aW9uKTsK
KyAgICAgICAgICAgICAgICBNUF9TVEFURV9WTShtcF9wZW5kaW5nX2V4Y2VwdGlvbikgPSBNUF9P
QkpfTlVMTDsKKyAgICAgICAgICAgICAgICBubHJfcmFpc2Uob2JqKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIG1wX2hhbF9zZXRfaW50ZXJydXB0X2NoYXIoLTEpOworICAg
ICAgICBubHJfcG9wKCk7CisgICAgICAgIHJldHVybiAwOworCisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gdW5jYXVnaHQgZXhjZXB0aW9uCisgICAgICAgIG1wX2hhbF9zZXRfaW50ZXJydXB0X2No
YXIoLTEpOworICAgICAgICByZXR1cm4gaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbihubHIucmV0
X3ZhbCk7CisgICAgfQorfQorCitTVEFUSUMgaW50IGRvX2ZpbGUoY29uc3QgY2hhciAqZmlsZSkg
eworICAgIHJldHVybiBleGVjdXRlX2Zyb21fbGV4ZXIoTEVYX1NSQ19GSUxFTkFNRSwgZmlsZSwg
TVBfUEFSU0VfRklMRV9JTlBVVCwgZmFsc2UpOworfQorCitTVEFUSUMgaW50IGRvX3N0cihjb25z
dCBjaGFyICpzdHIpIHsKKyAgICByZXR1cm4gZXhlY3V0ZV9mcm9tX2xleGVyKExFWF9TUkNfU1RS
LCBzdHIsIE1QX1BBUlNFX0ZJTEVfSU5QVVQsIGZhbHNlKTsKK30KKworU1RBVElDIGludCB1c2Fn
ZShjaGFyICoqYXJndikgeworICAgIHByaW50ZigKKyJ1c2FnZTogJXMgWzxvcHRzPl0gWy1YIDxp
bXBsb3B0Pl0gWy1jIDxjb21tYW5kPl0gWzxmaWxlbmFtZT5dXG4iCisiT3B0aW9uczpcbiIKKyIt
diA6IHZlcmJvc2UgKHRyYWNlIHZhcmlvdXMgb3BlcmF0aW9ucyk7IGNhbiBiZSBtdWx0aXBsZVxu
IgorIi1PW05dIDogYXBwbHkgYnl0ZWNvZGUgb3B0aW1pemF0aW9ucyBvZiBsZXZlbCBOXG4iCisi
XG4iCisiSW1wbGVtZW50YXRpb24gc3BlY2lmaWMgb3B0aW9ucyAoLVgpOlxuIiwgYXJndlswXQor
KTsKKyAgICBpbnQgaW1wbF9vcHRzX2NudCA9IDA7CisgICAgcHJpbnRmKAorIiAgY29tcGlsZS1v
bmx5ICAgICAgICAgICAgICAgICAtLSBwYXJzZSBhbmQgY29tcGlsZSBvbmx5XG4iCisiICBlbWl0
PXtieXRlY29kZSxuYXRpdmUsdmlwZXJ9IC0tIHNldCB0aGUgZGVmYXVsdCBjb2RlIGVtaXR0ZXJc
biIKKyk7CisgICAgaW1wbF9vcHRzX2NudCsrOworI2lmIE1JQ1JPUFlfRU5BQkxFX0dDCisgICAg
cHJpbnRmKAorIiAgaGVhcHNpemU9PG4+W3ddW0t8TV0gLS0gc2V0IHRoZSBoZWFwIHNpemUgZm9y
IHRoZSBHQyAoZGVmYXVsdCAlbGQpXG4iCissIGhlYXBfc2l6ZSk7CisgICAgaW1wbF9vcHRzX2Nu
dCsrOworI2VuZGlmCisKKyAgICBpZiAoaW1wbF9vcHRzX2NudCA9PSAwKSB7CisgICAgICAgIHBy
aW50ZigiICAobm9uZSlcbiIpOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisvLyBQcm9j
ZXNzIG9wdGlvbnMgd2hpY2ggc2V0IGludGVycHJldGVyIGluaXQgb3B0aW9ucworU1RBVElDIHZv
aWQgcHJlX3Byb2Nlc3Nfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpIHsKKyAgICBmb3Ig
KGludCBhID0gMTsgYSA8IGFyZ2M7IGErKykgeworICAgICAgICBpZiAoYXJndlthXVswXSA9PSAn
LScpIHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAoYXJndlthXSwgIi1YIikgPT0gMCkgeworICAg
ICAgICAgICAgICAgIGlmIChhICsgMSA+PSBhcmdjKSB7CisgICAgICAgICAgICAgICAgICAgIGV4
aXQodXNhZ2UoYXJndikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAo
MCkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYSArIDFdLCAiY29t
cGlsZS1vbmx5IikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlX29ubHkgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYSArIDFdLCAiZW1p
dD1ieXRlY29kZSIpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZW1pdF9vcHQgPSBNUF9F
TUlUX09QVF9CWVRFQ09ERTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChhcmd2
W2EgKyAxXSwgImVtaXQ9bmF0aXZlIikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBlbWl0
X29wdCA9IE1QX0VNSVRfT1BUX05BVElWRV9QWVRIT047CisgICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChzdHJjbXAoYXJndlthICsgMV0sICJlbWl0PXZpcGVyIikgPT0gMCkgeworICAgICAgICAg
ICAgICAgICAgICBlbWl0X29wdCA9IE1QX0VNSVRfT1BUX1ZJUEVSOworI2lmIE1JQ1JPUFlfRU5B
QkxFX0dDCisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJuY21wKGFyZ3ZbYSArIDFdLCAi
aGVhcHNpemU9Iiwgc2l6ZW9mKCJoZWFwc2l6ZT0iKSAtIDEpID09IDApIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2hhciAqZW5kOworICAgICAgICAgICAgICAgICAgICBoZWFwX3NpemUgPSBzdHJ0
b2woYXJndlthICsgMV0gKyBzaXplb2YoImhlYXBzaXplPSIpIC0gMSwgJmVuZCwgMCk7CisgICAg
ICAgICAgICAgICAgICAgIC8vIERvbid0IGJyaW5nIHVubmVlZGVkIGxpYmMgZGVwZW5kZW5jaWVz
IGxpa2UgdG9sb3dlcigpCisgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgJ3cnIGlt
bWVkaWF0ZWx5IGFmdGVyIG51bWJlciwgYWRqdXN0IGl0IGZvcgorICAgICAgICAgICAgICAgICAg
ICAvLyB0YXJnZXQgd29yZCBzaXplLiBOb3RlIHRoYXQgaXQgc2hvdWxkIGJlICpiZWZvcmUqIHNp
emUKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VmZml4IGxpa2UgSyBvciBNLCB0byBhdm9pZCBj
b25mdXNpb24gd2l0aCBraWxvd29yZHMsCisgICAgICAgICAgICAgICAgICAgIC8vIGV0Yy4gdGhl
IHNpemUgaXMgc3RpbGwgaW4gYnl0ZXMsIGp1c3QgY2FuIGJlIGFkanVzdGVkCisgICAgICAgICAg
ICAgICAgICAgIC8vIGZvciB3b3JkIHNpemUgKHRha2luZyAzMmJpdCBhcyBiYXNlbGluZSkuCisg
ICAgICAgICAgICAgICAgICAgIGJvb2wgd29yZF9hZGp1c3QgPSBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCgqZW5kIHwgMHgyMCkgPT0gJ3cnKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3b3JkX2FkanVzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQrKzsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoKCplbmQgfCAw
eDIwKSA9PSAnaycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlYXBfc2l6ZSAqPSAxMDI0
OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgqZW5kIHwgMHgyMCkgPT0gJ20nKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBoZWFwX3NpemUgKj0gMTAyNCAqIDEwMjQ7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb21w
ZW5zYXRlIGZvciArKyBiZWxvdworICAgICAgICAgICAgICAgICAgICAgICAgLS1lbmQ7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCorK2VuZCAhPSAwKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGludmFsaWRfYXJnOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh3b3JkX2FkanVzdCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaGVhcF9zaXplID0gaGVhcF9zaXplICogQllURVNfUEVSX1dPUkQg
LyA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHJl
cXVlc3RlZCBzaXplIHRvbyBzbWFsbCwgd2UnbGwgY3Jhc2ggYW55d2F5CisgICAgICAgICAgICAg
ICAgICAgIGlmIChoZWFwX3NpemUgPCA3MDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdv
dG8gaW52YWxpZF9hcmc7CisgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisjaWYgTUlDUk9QWV9FTkFCTEVfR0MKK2ludmFsaWRfYXJnOgorI2Vu
ZGlmCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiSW52YWxpZCBvcHRpb25cbiIpOworICAg
ICAgICAgICAgICAgICAgICBleGl0KHVzYWdlKGFyZ3YpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYSsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
CitTVEFUSUMgdm9pZCBzZXRfc3lzX2FyZ3YoY2hhciAqYXJndltdLCBpbnQgYXJnYywgaW50IHN0
YXJ0X2FyZykgeworICAgIGZvciAoaW50IGkgPSBzdGFydF9hcmc7IGkgPCBhcmdjOyBpKyspIHsK
KyAgICAgICAgbXBfb2JqX2xpc3RfYXBwZW5kKG1wX3N5c19hcmd2LCBNUF9PQkpfTkVXX1FTVFIo
cXN0cl9mcm9tX3N0cihhcmd2W2ldKSkpOworICAgIH0KK30KKworI2lmZGVmIF9XSU4zMgorI2Rl
ZmluZSBQQVRITElTVF9TRVBfQ0hBUiAnOycKKyNlbHNlCisjZGVmaW5lIFBBVEhMSVNUX1NFUF9D
SEFSICc6JworI2VuZGlmCisKK01QX05PSU5MSU5FIGludCBtaWNyb3B5dGhvbl9tYWluXyhpbnQg
YXJnYywgY2hhciAqKmFyZ3YpOworCitpbnQgbWljcm9weXRob25fbWFpbihpbnQgYXJnYywgY2hh
ciAqKmFyZ3YpIHsKKyAgICAjaWYgTUlDUk9QWV9QWV9USFJFQUQKKyAgICBtcF90aHJlYWRfaW5p
dCgpOworICAgICNlbmRpZgorICAgIC8vIFdlIHNob3VsZCBjYXB0dXJlIHN0YWNrIHRvcCBBU0FQ
IGFmdGVyIHN0YXJ0LCBhbmQgaXQgc2hvdWxkIGJlCisgICAgLy8gY2FwdHVyZWQgZ3VhcmFudGVl
ZGx5IGJlZm9yZSBhbnkgb3RoZXIgc3RhY2sgdmFyaWFibGVzIGFyZSBhbGxvY2F0ZWQuCisgICAg
Ly8gRm9yIHRoaXMsIGFjdHVhbCBtYWluIChyZW5hbWVkIG1haW5fKSBzaG91bGQgbm90IGJlIGlu
bGluZWQgaW50bworICAgIC8vIHRoaXMgZnVuY3Rpb24uIG1haW5fKCkgaXRzZWxmIG1heSBoYXZl
IG90aGVyIGZ1bmN0aW9ucyBpbmxpbmVkICh3aXRoCisgICAgLy8gdGhlaXIgb3duIHN0YWNrIHZh
cmlhYmxlcyksIHRoYXQncyB3aHkgd2UgbmVlZCB0aGlzIG1haW4vbWFpbl8gc3BsaXQuCisgICAg
bXBfc3RhY2tfY3RybF9pbml0KCk7CisgICAgcmV0dXJuIG1pY3JvcHl0aG9uX21haW5fKGFyZ2Ms
IGFyZ3YpOworfQorCitNUF9OT0lOTElORSBpbnQgbWljcm9weXRob25fbWFpbl8oaW50IGFyZ2Ms
IGNoYXIgKiphcmd2KSB7CisgICAgI2lmZGVmIFNJR1BJUEUKKyAgICAvLyBEbyBub3QgcmFpc2Ug
U0lHUElQRSwgaW5zdGVhZCByZXR1cm4gRVBJUEUuIE90aGVyd2lzZSwgZS5nLiB3cml0aW5nCisg
ICAgLy8gdG8gcGVlci1jbG9zZWQgc29ja2V0IHdpbGwgbGVhZCB0byBzdWRkZW4gdGVybWluYXRp
b24gb2YgTWljcm9QeXRob24KKyAgICAvLyBwcm9jZXNzLiBTSUdQSVBFIGlzIHBhcnRpY3VsYXJs
eSBuYXN0eSwgYmVjYXVzZSB1bml4IHNoZWxsIGRvZXNuJ3QKKyAgICAvLyBwcmludCBhbnl0aGlu
ZyBmb3IgaXQsIHNvIHRoZSBhYm92ZSBsb29rcyBsaWtlIGNvbXBsZXRlbHkgc3VkZGVuIGFuZAor
ICAgIC8vIHNpbGVudCB0ZXJtaW5hdGlvbiBmb3IgdW5rbm93biByZWFzb24uIElnbm9yaW5nIFNJ
R1BJUEUgaXMgYWxzbyB3aGF0CisgICAgLy8gQ1B5dGhvbiBkb2VzLiBOb3RlIHRoYXQgdGhpcyBt
YXkgbGVhZCB0byBwcm9ibGVtcyB1c2luZyBNaWNyb1B5dGhvbgorICAgIC8vIHNjcmlwdHMgYXMg
cGlwZSBmaWx0ZXJzLCBidXQgYWdhaW4sIHRoYXQncyB3aGF0IENQeXRob24gZG9lcy4gU28sCisg
ICAgLy8gc2NyaXB0cyB3aGljaCB3YW50IHRvIGZvbGxvdyB1bml4IHNoZWxsIHBpcGUgc2VtYW50
aWNzICh3aGVyZSBTSUdQSVBFCisgICAgLy8gbWVhbnMgInBpcGUgd2FzIHJlcXVlc3RlZCB0byB0
ZXJtaW5hdGUsIGl0J3Mgbm90IGFuIGVycm9yIiksIHNob3VsZAorICAgIC8vIGNhdGNoIEVQSVBF
IHRoZW1zZWx2ZXMuCisgICAgc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworICAgICNlbmRpZgor
CisgICAgbXBfc3RhY2tfc2V0X2xpbWl0KDQwMDAwICogKEJZVEVTX1BFUl9XT1JEIC8gNCkpOwor
CisgICAgcHJlX3Byb2Nlc3Nfb3B0aW9ucyhhcmdjLCBhcmd2KTsKKworI2lmIE1JQ1JPUFlfRU5B
QkxFX0dDCisgICAgY2hhciAqaGVhcCA9IG1hbGxvYyhoZWFwX3NpemUpOworICAgIGdjX2luaXQo
aGVhcCwgaGVhcCArIGhlYXBfc2l6ZSk7CisjZW5kaWYKKworICAgIG1wX2luaXQoKTsKKworICAg
IGNoYXIgKmhvbWUgPSBnZXRlbnYoIkhPTUUiKTsKKyAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJN
SUNST1BZUEFUSCIpOworICAgIGlmIChwYXRoID09IE5VTEwpIHsKKyAgICAgICAgI2lmZGVmIE1J
Q1JPUFlfUFlfU1lTX1BBVEhfREVGQVVMVAorICAgICAgICBwYXRoID0gTUlDUk9QWV9QWV9TWVNf
UEFUSF9ERUZBVUxUOworICAgICAgICAjZWxzZQorICAgICAgICBwYXRoID0gIn4vLm1pY3JvcHl0
aG9uL2xpYjovdXNyL2xpYi9taWNyb3B5dGhvbiI7CisgICAgICAgICNlbmRpZgorICAgIH0KKyAg
ICBzaXplX3QgcGF0aF9udW0gPSAxOyAvLyBbMF0gaXMgZm9yIGN1cnJlbnQgZGlyIChvciBiYXNl
IGRpciBvZiB0aGUgc2NyaXB0KQorICAgIGlmICgqcGF0aCA9PSAnOicpIHsKKyAgICAgICAgcGF0
aF9udW0rKzsKKyAgICB9CisgICAgZm9yIChjaGFyICpwID0gcGF0aDsgcCAhPSBOVUxMOyBwID0g
c3RyY2hyKHAsIFBBVEhMSVNUX1NFUF9DSEFSKSkgeworICAgICAgICBwYXRoX251bSsrOworICAg
ICAgICBpZiAocCAhPSBOVUxMKSB7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICB9
CisgICAgbXBfb2JqX2xpc3RfaW5pdChNUF9PQkpfVE9fUFRSKG1wX3N5c19wYXRoKSwgcGF0aF9u
dW0pOworICAgIG1wX29ial90ICpwYXRoX2l0ZW1zOworICAgIG1wX29ial9saXN0X2dldChtcF9z
eXNfcGF0aCwgJnBhdGhfbnVtLCAmcGF0aF9pdGVtcyk7CisgICAgcGF0aF9pdGVtc1swXSA9IE1Q
X09CSl9ORVdfUVNUUihNUF9RU1RSXyk7CisgICAgeworICAgIGNoYXIgKnAgPSBwYXRoOworICAg
IGZvciAobXBfdWludF90IGkgPSAxOyBpIDwgcGF0aF9udW07IGkrKykgeworICAgICAgICBjaGFy
ICpwMSA9IHN0cmNocihwLCBQQVRITElTVF9TRVBfQ0hBUik7CisgICAgICAgIGlmIChwMSA9PSBO
VUxMKSB7CisgICAgICAgICAgICBwMSA9IHAgKyBzdHJsZW4ocCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHBbMF0gPT0gJ34nICYmIHBbMV0gPT0gJy8nICYmIGhvbWUgIT0gTlVMTCkgeworICAg
ICAgICAgICAgLy8gRXhwYW5kIHN0YW5kYWxvbmUgfiB0byAkSE9NRQorICAgICAgICAgICAgaW50
IGhvbWVfbCA9IHN0cmxlbihob21lKTsKKyAgICAgICAgICAgIHZzdHJfdCB2c3RyOworICAgICAg
ICAgICAgdnN0cl9pbml0KCZ2c3RyLCBob21lX2wgKyAocDEgLSBwIC0gMSkgKyAxKTsKKyAgICAg
ICAgICAgIHZzdHJfYWRkX3N0cm4oJnZzdHIsIGhvbWUsIGhvbWVfbCk7CisgICAgICAgICAgICB2
c3RyX2FkZF9zdHJuKCZ2c3RyLCBwICsgMSwgcDEgLSBwIC0gMSk7CisgICAgICAgICAgICBwYXRo
X2l0ZW1zW2ldID0gbXBfb2JqX25ld19zdHJfZnJvbV92c3RyKCZtcF90eXBlX3N0ciwgJnZzdHIp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcGF0aF9pdGVtc1tpXSA9IE1QX09CSl9O
RVdfUVNUUihxc3RyX2Zyb21fc3RybihwLCBwMSAtIHApKTsKKyAgICAgICAgfQorICAgICAgICBw
ID0gcDEgKyAxOworICAgIH0KKyAgICB9CisKKyAgICBtcF9vYmpfbGlzdF9pbml0KE1QX09CSl9U
T19QVFIobXBfc3lzX2FyZ3YpLCAwKTsKKworICAgICNpZiBkZWZpbmVkKE1JQ1JPUFlfVU5JWF9D
T1ZFUkFHRSkKKyAgICB7CisgICAgICAgIE1QX0RFQ0xBUkVfQ09OU1RfRlVOX09CSl8wKGV4dHJh
X2NvdmVyYWdlX29iaik7CisgICAgICAgIG1wX3N0b3JlX2dsb2JhbChRU1RSX0ZST01fU1RSX1NU
QVRJQygiZXh0cmFfY292ZXJhZ2UiKSwgTVBfT0JKX0ZST01fUFRSKCZleHRyYV9jb3ZlcmFnZV9v
YmopKTsKKyAgICB9CisgICAgI2VuZGlmCisKKyAgICAvLyBIZXJlIGlzIHNvbWUgZXhhbXBsZSBj
b2RlIHRvIGNyZWF0ZSBhIGNsYXNzIGFuZCBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzLgorICAgIC8v
IEZpcnN0IGlzIHRoZSBQeXRob24sIHRoZW4gdGhlIEMgY29kZS4KKyAgICAvLworICAgIC8vIGNs
YXNzIFRlc3RDbGFzczoKKyAgICAvLyAgICAgcGFzcworICAgIC8vIHRlc3Rfb2JqID0gVGVzdENs
YXNzKCkKKyAgICAvLyB0ZXN0X29iai5hdHRyID0gNDIKKyAgICAvLworICAgIC8vIG1wX29ial90
IHRlc3RfY2xhc3NfdHlwZSwgdGVzdF9jbGFzc19pbnN0YW5jZTsKKyAgICAvLyB0ZXN0X2NsYXNz
X3R5cGUgPSBtcF9vYmpfbmV3X3R5cGUoUVNUUl9GUk9NX1NUUl9TVEFUSUMoIlRlc3RDbGFzcyIp
LCBtcF9jb25zdF9lbXB0eV90dXBsZSwgbXBfb2JqX25ld19kaWN0KDApKTsKKyAgICAvLyBtcF9z
dG9yZV9uYW1lKFFTVFJfRlJPTV9TVFJfU1RBVElDKCJ0ZXN0X29iaiIpLCB0ZXN0X2NsYXNzX2lu
c3RhbmNlID0gbXBfY2FsbF9mdW5jdGlvbl8wKHRlc3RfY2xhc3NfdHlwZSkpOworICAgIC8vIG1w
X3N0b3JlX2F0dHIodGVzdF9jbGFzc19pbnN0YW5jZSwgUVNUUl9GUk9NX1NUUl9TVEFUSUMoImF0
dHIiKSwgbXBfb2JqX25ld19pbnQoNDIpKTsKKworICAgIC8qCisgICAgcHJpbnRmKCJieXRlczpc
biIpOworICAgIHByaW50ZigiICAgIHRvdGFsICVkXG4iLCBtX2dldF90b3RhbF9ieXRlc19hbGxv
Y2F0ZWQoKSk7CisgICAgcHJpbnRmKCIgICAgY3VyICAgJWRcbiIsIG1fZ2V0X2N1cnJlbnRfYnl0
ZXNfYWxsb2NhdGVkKCkpOworICAgIHByaW50ZigiICAgIHBlYWsgICVkXG4iLCBtX2dldF9wZWFr
X2J5dGVzX2FsbG9jYXRlZCgpKTsKKyAgICAqLworCisgICAgY29uc3QgaW50IE5PVEhJTkdfRVhF
Q1VURUQgPSAtMjsKKyAgICBpbnQgcmV0ID0gTk9USElOR19FWEVDVVRFRDsKKyAgICBmb3IgKGlu
dCBhID0gMTsgYSA8IGFyZ2M7IGErKykgeworICAgICAgICBpZiAoYXJndlthXVswXSA9PSAnLScp
IHsKKyAgICAgICAgICAgIGlmIChzdHJjbXAoYXJndlthXSwgIi1jIikgPT0gMCkgeworICAgICAg
ICAgICAgICAgIGlmIChhICsgMSA+PSBhcmdjKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB1c2FnZShhcmd2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0ID0g
ZG9fc3RyKGFyZ3ZbYSArIDFdKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICYgRk9SQ0VEX0VY
SVQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGEgKz0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3Zb
YV0sICItbSIpID09IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoYSArIDEgPj0gYXJnYykgewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNhZ2UoYXJndik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIG1wX29ial90IGltcG9ydF9hcmdzWzRdOworICAgICAgICAgICAg
ICAgIGltcG9ydF9hcmdzWzBdID0gbXBfb2JqX25ld19zdHIoYXJndlthICsgMV0sIHN0cmxlbihh
cmd2W2EgKyAxXSksIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpbXBvcnRfYXJnc1sxXSA9IGlt
cG9ydF9hcmdzWzJdID0gbXBfY29uc3Rfbm9uZTsKKyAgICAgICAgICAgICAgICAvLyBBc2sgX19p
bXBvcnRfXyB0byBoYW5kbGUgaW1wb3J0ZWQgbW9kdWxlIHNwZWNpYWxseSAtIHNldCBpdHMgX19u
YW1lX18KKyAgICAgICAgICAgICAgICAvLyB0byBfX21haW5fXywgYW5kIGFsc28gcmV0dXJuIHRo
aXMgbGVhZiBtb2R1bGUsIG5vdCB0b3AtbGV2ZWwgcGFja2FnZQorICAgICAgICAgICAgICAgIC8v
IGNvbnRhaW5pbmcgaXQuCisgICAgICAgICAgICAgICAgaW1wb3J0X2FyZ3NbM10gPSBtcF9jb25z
dF9mYWxzZTsKKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBodHRwczovL2RvY3MucHl0aG9uLm9y
Zy8zL3VzaW5nL2NtZGxpbmUuaHRtbCNjbWRvcHRpb24tbSA6CisgICAgICAgICAgICAgICAgLy8g
InRoZSBmaXJzdCBlbGVtZW50IG9mIHN5cy5hcmd2IHdpbGwgYmUgdGhlIGZ1bGwgcGF0aCB0bwor
ICAgICAgICAgICAgICAgIC8vIHRoZSBtb2R1bGUgZmlsZSAod2hpbGUgdGhlIG1vZHVsZSBmaWxl
IGlzIGJlaW5nIGxvY2F0ZWQsCisgICAgICAgICAgICAgICAgLy8gdGhlIGZpcnN0IGVsZW1lbnQg
d2lsbCBiZSBzZXQgdG8gIi1tIikuIgorICAgICAgICAgICAgICAgIHNldF9zeXNfYXJndihhcmd2
LCBhcmdjLCBhICsgMSk7CisKKyAgICAgICAgICAgICAgICBtcF9vYmpfdCBtb2Q7CisgICAgICAg
ICAgICAgICAgbmxyX2J1Zl90IG5scjsKKyAgICAgICAgICAgICAgICBib29sIHN1YnBrZ190cmll
ZCA9IGZhbHNlOworCisgICAgICAgICAgICByZWltcG9ydDoKKyAgICAgICAgICAgICAgICBpZiAo
bmxyX3B1c2goJm5scikgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBtb2QgPSBtcF9idWls
dGluX19faW1wb3J0X18oTVBfQVJSQVlfU0laRShpbXBvcnRfYXJncyksIGltcG9ydF9hcmdzKTsK
KyAgICAgICAgICAgICAgICAgICAgbmxyX3BvcCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIHVuY2F1Z2h0IGV4Y2VwdGlvbgorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gaGFuZGxlX3VuY2F1Z2h0X2V4Y2VwdGlvbihubHIucmV0X3ZhbCkgJiAw
eGZmOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtcF9vYmpfaXNf
cGFja2FnZShtb2QpICYmICFzdWJwa2dfdHJpZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc3Vi
cGtnX3RyaWVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdnN0cl90IHZzdHI7CisgICAg
ICAgICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4oYXJndlthICsgMV0pOworICAgICAgICAg
ICAgICAgICAgICB2c3RyX2luaXQoJnZzdHIsIGxlbiArIHNpemVvZigiLl9fbWFpbl9fIikpOwor
ICAgICAgICAgICAgICAgICAgICB2c3RyX2FkZF9zdHJuKCZ2c3RyLCBhcmd2W2EgKyAxXSwgbGVu
KTsKKyAgICAgICAgICAgICAgICAgICAgdnN0cl9hZGRfc3RybigmdnN0ciwgIi5fX21haW5fXyIs
IHNpemVvZigiLl9fbWFpbl9fIikgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0X2Fy
Z3NbMF0gPSBtcF9vYmpfbmV3X3N0cl9mcm9tX3ZzdHIoJm1wX3R5cGVfc3RyLCAmdnN0cik7Cisg
ICAgICAgICAgICAgICAgICAgIGdvdG8gcmVpbXBvcnQ7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgcmV0ID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYV0sICItWCIpID09IDApIHsKKyAgICAgICAgICAg
ICAgICBhICs9IDE7CisgICAgICAgICAgICAjaWYgTUlDUk9QWV9ERUJVR19QUklOVEVSUworICAg
ICAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYXJndlthXSwgIi12IikgPT0gMCkgeworICAgICAg
ICAgICAgICAgIG1wX3ZlcmJvc2VfZmxhZysrOworICAgICAgICAgICAgI2VuZGlmCisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHN0cm5jbXAoYXJndlthXSwgIi1PIiwgMikgPT0gMCkgeworICAgICAg
ICAgICAgICAgIGlmICh1bmljaGFyX2lzZGlnaXQoYXJndlthXVsyXSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgTVBfU1RBVEVfVk0obXBfb3B0aW1pc2VfdmFsdWUpID0gYXJndlthXVsyXSAmIDB4
ZjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBNUF9TVEFU
RV9WTShtcF9vcHRpbWlzZV92YWx1ZSkgPSAwOworICAgICAgICAgICAgICAgICAgICBmb3IgKGNo
YXIgKnAgPSBhcmd2W2FdICsgMTsgKnAgJiYgKnAgPT0gJ08nOyBwKyssIE1QX1NUQVRFX1ZNKG1w
X29wdGltaXNlX3ZhbHVlKSsrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHJldHVybiB1c2FnZShhcmd2KTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNoYXIgKnBhdGhidWYgPSBtYWxsb2MoUEFU
SF9NQVgpOworICAgICAgICAgICAgY2hhciAqYmFzZWRpciA9IHJlYWxwYXRoKGFyZ3ZbYV0sIHBh
dGhidWYpOworICAgICAgICAgICAgaWYgKGJhc2VkaXIgPT0gTlVMTCkgeworICAgICAgICAgICAg
ICAgIG1wX3ByaW50ZigmbXBfc3RkZXJyX3ByaW50LCAiJXM6IGNhbid0IG9wZW4gZmlsZSAnJXMn
OiBbRXJybm8gJWRdICVzXG4iLCBhcmd2WzBdLCBhcmd2W2FdLCBlcnJubywgc3RyZXJyb3IoZXJy
bm8pKTsKKyAgICAgICAgICAgICAgICAvLyBDUHl0aG9uIGV4aXRzIHdpdGggMiBpbiBzdWNoIGNh
c2UKKyAgICAgICAgICAgICAgICByZXQgPSAyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBTZXQgYmFzZSBkaXIgb2YgdGhlIHNjcmlwdCBh
cyBmaXJzdCBlbnRyeSBpbiBzeXMucGF0aAorICAgICAgICAgICAgY2hhciAqcCA9IHN0cnJjaHIo
YmFzZWRpciwgJy8nKTsKKyAgICAgICAgICAgIHBhdGhfaXRlbXNbMF0gPSBNUF9PQkpfTkVXX1FT
VFIocXN0cl9mcm9tX3N0cm4oYmFzZWRpciwgcCAtIGJhc2VkaXIpKTsKKyAgICAgICAgICAgIGZy
ZWUocGF0aGJ1Zik7CisKKyAgICAgICAgICAgIHNldF9zeXNfYXJndihhcmd2LCBhcmdjLCBhKTsK
KyAgICAgICAgICAgIHJldCA9IGRvX2ZpbGUoYXJndlthXSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHNlZSBpZiBzY3JpcHQgaXMgYXZhaWxhYmxlIGZy
b20gaW5pdHJkICovCisgICAgc3RydWN0IHVrcGxhdF9tZW1yZWdpb25fZGVzYyBpbWc7CisgICAg
Y2hhciAqY3N0cjsKKyAgICBpZiAodWtwbGF0X21lbXJlZ2lvbl9maW5kX2luaXRyZDAoJmltZykg
Pj0gMCkgeworICAgICAgY3N0ciA9IChjaGFyICopaW1nLmJhc2U7CisgICAgICByZXQgPSBkb19z
dHIoY3N0cik7CisgICAgfQorICAgIC8qIHJlcGwgbW9kZSAqLworICAgIGVsc2UgeworI2lmIE1J
Q1JPUFlfUkVQTF9FVkVOVF9EUklWRU4KKyAgICBweWV4ZWNfZXZlbnRfcmVwbF9pbml0KCk7Cisg
ICAgZm9yICg7OykgeworICAgICAgaW50IGMgPSBtcF9oYWxfc3RkaW5fcnhfY2hyKCk7CisgICAg
ICBpZiAocHlleGVjX2V2ZW50X3JlcGxfcHJvY2Vzc19jaGFyKGMpKSB7CisJYnJlYWs7CisgICAg
ICB9CisgICAgfQorI2Vsc2UKKyAgICBweWV4ZWNfZnJpZW5kbHlfcmVwbCgpOworI2VuZGlmCisg
ICAgfQorICAgIAorICAgICNpZiBNSUNST1BZX1BZX01JQ1JPUFlUSE9OX01FTV9JTkZPCisgICAg
aWYgKG1wX3ZlcmJvc2VfZmxhZykgeworICAgICAgICBtcF9taWNyb3B5dGhvbl9tZW1faW5mbygw
LCBOVUxMKTsKKyAgICB9CisgICAgI2VuZGlmCisKKyAgICBtcF9kZWluaXQoKTsKKworI2lmIE1J
Q1JPUFlfRU5BQkxFX0dDICYmICFkZWZpbmVkKE5ERUJVRykKKyAgICAvLyBXZSBkb24ndCByZWFs
bHkgbmVlZCB0byBmcmVlIG1lbW9yeSBzaW5jZSB3ZSBhcmUgYWJvdXQgdG8gZXhpdCB0aGUKKyAg
ICAvLyBwcm9jZXNzLCBidXQgZG9pbmcgc28gaGVscHMgdG8gZmluZCBtZW1vcnkgbGVha3MuCisg
ICAgZnJlZShoZWFwKTsKKyNlbmRpZgorCisgICAgLy9wcmludGYoInRvdGFsIGJ5dGVzID0gJWRc
biIsIG1fZ2V0X3RvdGFsX2J5dGVzX2FsbG9jYXRlZCgpKTsKKyAgICByZXR1cm4gcmV0ICYgMHhm
ZjsKK30KKwordWludCBtcF9pbXBvcnRfc3RhdChjb25zdCBjaGFyICpwYXRoKSB7CisgICAgc3Ry
dWN0IHN0YXQgc3Q7CisgICAgaWYgKHN0YXQocGF0aCwgJnN0KSA9PSAwKSB7CisgICAgICAgIGlm
IChTX0lTRElSKHN0LnN0X21vZGUpKSB7CisgICAgICAgICAgICByZXR1cm4gTVBfSU1QT1JUX1NU
QVRfRElSOworICAgICAgICB9IGVsc2UgaWYgKFNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBNUF9JTVBPUlRfU1RBVF9GSUxFOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBNUF9JTVBPUlRfU1RBVF9OT19FWElTVDsKK30KKwordm9pZCBubHJfanVtcF9mYWls
KHZvaWQgKnZhbCkgeworICAgIHByaW50ZigiRkFUQUw6IHVuY2F1Z2h0IE5MUiAlcFxuIiwgdmFs
KTsKKyAgICBleGl0KDEpOworfQotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 08:07:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 08:07:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD2L7-0004xS-KM; Wed, 25 Sep 2019 08:07:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD2L6-0004xG-FB
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 08:07:56 +0000
X-Inumbo-ID: 8dbb0e2d-df6b-11e9-962c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id 8dbb0e2d-df6b-11e9-962c-12813bfff9fa;
 Wed, 25 Sep 2019 08:07:45 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 3B39044614;
 Wed, 25 Sep 2019 10:07:45 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 25 Sep 2019 10:07:39 +0200
Message-Id: <20190925080742.17860-3-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190925080742.17860-1-felipe.huici@neclab.eu>
References: <20190925080742.17860-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBMICROPYTHON PATCH 2/5] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIE1ha2VmaWxlLnVrIGFuZCB0aGUgZGVwZWRlbnQgbXBjb25maWdwb3J0Lm1rIGZpbGUuCgpT
aWduZWQtb2ZmLWJ5OiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Ci0tLQog
TWFrZWZpbGUudWsgICAgIHwgMjkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiBtcGNvbmZpZ3BvcnQubWsgfCAgNDUgKysrKysrKysrCiAy
IGZpbGVzIGNoYW5nZWQsIDMzNyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFr
ZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBtcGNvbmZpZ3BvcnQubWsKCmRpZmYgLS1naXQg
YS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmFlY2ZjZmEKLS0tIC9kZXYvbnVsbAorKysgYi9NYWtlZmlsZS51awpAQCAtMCwwICsx
LDI5MiBAQAorIyAgbGlibWljcm9weXRob24gTWFrZWZpbGUudWMKKyMKKyMgIEF1dGhvcnM6IEZl
bGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKyMKKyMKKyMgIENvcHlyaWdodCAo
YykgMjAxNywgTkVDIEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMKKyMg
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdo
dCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjICAgICB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisjCisjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJ
TiBBTlkgV0FZLgorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBjaGVjayByZXFzCisj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaWZkZWYgQ09ORklHX0xXSVBfSVBWNgorJChlcnJvciBJ
UFY2IG5vdCBzdXBwb3J0ZWQsIHBsZWFzZSBkZWxlc2VjdCBhbmQgcmUtcnVuKQorZW5kaWYKKwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYm1pY3JvcHl0aG9uLCQo
Q09ORklHX0xJQk1JQ1JPUFlUSE9OKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNv
dXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJNSUNST1BZVEhPTl9WRVJTSU9OPTEu
OS4yCitMSUJNSUNST1BZVEhPTl9UQVI9bWljcm9weXRob24tJChMSUJNSUNST1BZVEhPTl9WRVJT
SU9OKQorTElCTUlDUk9QWVRIT05fVVJMPWh0dHA6Ly9taWNyb3B5dGhvbi5vcmcvcmVzb3VyY2Vz
L3NvdXJjZS8kKExJQk1JQ1JPUFlUSE9OX1RBUikuemlwCitMSUJNSUNST1BZVEhPTl9QQVRDSERJ
Uj0kKExJQk1JQ1JPUFlUSE9OX0JBU0UpL3BhdGNoZXMKKyQoZXZhbCAkKGNhbGwgZmV0Y2gsbGli
bWljcm9weXRob24sJChMSUJNSUNST1BZVEhPTl9VUkwpKSkKKyQoZXZhbCAkKGNhbGwgcGF0Y2gs
bGlibWljcm9weXRob24sJChMSUJNSUNST1BZVEhPTl9QQVRDSERJUiksJChMSUJNSUNST1BZVEhP
Tl9UQVIpKSkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSGVscGVycworIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRT0kKExJQk1JQ1JPUFlUSE9O
X09SSUdJTikvJChMSUJNSUNST1BZVEhPTl9UQVIpCitMSUJNSUNST1BZVEhPTl9GUk9aRU5fRElS
ID0gc2NyaXB0cworTElCTUlDUk9QWVRIT05fUFlfUVNUUl9ERUZTID0gJChMSUJNSUNST1BZVEhP
Tl9TUkNTX0JBU0UpL3B5L3FzdHJkZWZzLmgKK0xJQk1JQ1JPUFlUSE9OX1FTVFJfREVGUyA9ICQo
TElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS91bml4L3FzdHJkZWZzcG9ydC5oCitMSUJNSUNST1BZ
VEhPTl9IRUFERVJfQlVJTEQgPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvZ2VuaGRyCitM
SUJNSUNST1BZVEhPTl9RU1RSX0RFRlNfQ09MTEVDVEVEID0gJChMSUJNSUNST1BZVEhPTl9IRUFE
RVJfQlVJTEQpL3FzdHJkZWZzLmNvbGxlY3RlZC5oCitMSUJNSUNST1BZVEhPTl9NUENPTkZJR1BP
UlRfTUsgPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdW5peC9tcGNvbmZpZ3BvcnQubWsK
K0xJQk1JQ1JPUFlUSE9OX1FTVFJfR0VOX0VYVFJBX0NGTEFHUyArPSAtRE5PX1FTVFIgLUROX1g2
NCAtRE5fWDg2IC1ETl9USFVNQiAtRE5fQVJNIC1EIE1JQ1JPUFlfUFlfTFdJUAorUFlUSE9OIDo9
IHB5dGhvbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNaWNyb3B5dGhvbiBvcHRpb25z
CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworLWluY2x1ZGUgJChMSUJNSUNST1BZVEhPTl9CQVNF
KS9tcGNvbmZpZ3BvcnQubWsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSBp
bmNsdWRlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJQk1JQ1JPUFlUSE9OX0NJTkNMVURF
Uy15ICs9IC1JJChMSUJNSUNST1BZVEhPTl9CQVNFKS9pbmNsdWRlICAgICAgICAgICAgICBcCisJ
CQkgICAgICAtSSQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKSAgICAgICAgICAgICAgICAgXAor
CQkJICAgICAgLUkkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkgICAgICAgICAgICAgIFwK
KwkJCSAgICAgIC1JJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3VuaXggICAgICAgICAgICBc
CisJCQkgICAgICAtSSQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9saWIvbXAtcmVhZGxpbmUg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUkkKExJQk1JQ1JPUFlUSE9OX1NSQ1Nf
QkFTRSkvbGliL25ldHV0aWxzICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1J
JChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2xpYi91dGlscworCisjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIworIyBHbG9iYWwgZmxhZ3MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJNSUNS
T1BZVEhPTl9DRkxBR1MteSArPSAtRFVOSVggLUROX1g2NCAtRCBNSUNST1BZX1BZX0xXSVAgXAor
CQkJICAgLVduby11bnVzZWQtcGFyYW1ldGVyICAgICAgICAgICAgIFwKKwkJCSAgIC1Xbm8tb3Zl
cnJpZGUtaW5pdCAgICAgICAgICAgICAgICBcCisJCQkgICAtV25vLXNpZ24tY29tcGFyZQkJICAg
ICBcCisJCQkgICAtV25vLXVudXNlZC12YWx1ZQkJICAgICBcCisJCQkgICAtV25vLWZvcm1hdAkJ
CSAgICAgXAorCQkJICAgLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcwkgICAgIAorCisj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBVbmlrcmFmdCA8LT4gTWljcm9weXRob24gZ2x1ZSBj
b2RlCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQo
TElCTUlDUk9QWVRIT05fQkFTRSkvbWFpbi5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj
IE1pY3JvcHl0b24gc291cmNlcyAtIHB5CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCTUlD
Uk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tcHN0YXRl
LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkv
cHkvbmxyeDg2LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NS
Q1NfQkFTRSkvcHkvbmxyeDY0LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JP
UFlUSE9OX1NSQ1NfQkFTRSkvcHkvbmxydGh1bWIuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9
ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9ubHJ4dGVuc2EuYworTElCTUlDUk9QWVRI
T05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9ubHJzZXRqbXAuYwor
TElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9t
YWxsb2MuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19C
QVNFKS9weS9nYy5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9T
UkNTX0JBU0UpL3B5L3FzdHIuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9Q
WVRIT05fU1JDU19CQVNFKS9weS92c3RyLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJ
Qk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvbXBwcmludC5jCitMSUJNSUNST1BZVEhPTl9TUkNT
LXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L3VuaWNvZGUuYworTElCTUlDUk9Q
WVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tcHouYworTElC
TUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9sZXhl
ci5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0Up
L3B5L3BhcnNlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NS
Q1NfQkFTRSkvcHkvc2NvcGUuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9Q
WVRIT05fU1JDU19CQVNFKS9weS9jb21waWxlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAk
KExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvZW1pdGNvbW1vbi5jCitMSUJNSUNST1BZVEhP
Tl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L2VtaXRuYXRpdmUuYwor
TElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9l
bWl0YmMuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19C
QVNFKS9weS9hc21iYXNlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlU
SE9OX1NSQ1NfQkFTRSkvcHkvYXNteDY0LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJ
Qk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvYXNteDg2LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1Mt
eSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvYXNtdGh1bWIuYworTElCTUlDUk9Q
WVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9lbWl0aW5saW5l
dGh1bWIuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19C
QVNFKS9weS9hc21hcm0uYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRI
T05fU1JDU19CQVNFKS9weS9mb3JtYXRmbG9hdC5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0g
JChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L3BhcnNlbnVtYmFzZS5jCitMSUJNSUNST1BZ
VEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L3BhcnNlbnVtLmMK
K0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkv
ZW1pdGdsdWUuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JD
U19CQVNFKS9weS9ydW50aW1lLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JP
UFlUSE9OX1NSQ1NfQkFTRSkvcHkvcnVudGltZV91dGlscy5jCitMSUJNSUNST1BZVEhPTl9TUkNT
LXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L25hdGl2ZWdsdWUuYworTElCTUlD
Uk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9zdGFja2N0
cmwuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNF
KS9weS9hcmdjaGVjay5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhP
Tl9TUkNTX0JBU0UpL3B5L3dhcm5pbmcuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElC
TUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tYXAuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9
ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmouYworTElCTUlDUk9QWVRIT05fU1JD
Uy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmphcnJheS5jCitMSUJNSUNS
T1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29iamF0dHJ0
dXBsZS5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JB
U0UpL3B5L29iamJvb2wuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRI
T05fU1JDU19CQVNFKS9weS9vYmpib3VuZG1ldGguYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9
ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmpjZWxsLmMKK0xJQk1JQ1JPUFlUSE9O
X1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqY2xvc3VyZS5jCitM
SUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29i
amNvbXBsZXguYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JD
U19CQVNFKS9weS9vYmpkaWN0LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JP
UFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqZW51bWVyYXRlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1Mt
eSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqZXhjZXB0LmMKK0xJQk1JQ1JP
UFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqZmlsdGVy
LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkv
cHkvb2JqZmxvYXQuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05f
U1JDU19CQVNFKS9weS9vYmpmdW4uYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlD
Uk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmpnZW5lcmF0b3IuYworTElCTUlDUk9QWVRIT05fU1JD
Uy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmpnZXRpdGVtaXRlci5jCitM
SUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29i
amludC5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JB
U0UpL3B5L29iamludF9sb25nbG9uZy5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJN
SUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29iamludF9tcHouYworTElCTUlDUk9QWVRIT05fU1JD
Uy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmpsaXN0LmMKK0xJQk1JQ1JP
UFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqbWFwLmMK
K0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkv
b2JqbW9kdWxlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NS
Q1NfQkFTRSkvcHkvb2Jqb2JqZWN0LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1J
Q1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqcG9seWl0ZXIuYworTElCTUlDUk9QWVRIT05fU1JD
Uy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmpwcm9wZXJ0eS5jCitMSUJN
SUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29iam5v
bmUuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNF
KS9weS9vYmpuYW1lZHR1cGxlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JP
UFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqcmFuZ2UuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9
ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9vYmpyZXZlcnNlZC5jCitMSUJNSUNST1BZ
VEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29ianNldC5jCitM
SUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29i
anNpbmdsZXRvbi5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9T
UkNTX0JBU0UpL3B5L29ianNsaWNlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1J
Q1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2Jqc3RyLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSAr
PSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2Jqc3RydW5pY29kZS5jCitMSUJNSUNS
T1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L29ianN0cmlu
Z2lvLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFT
RSkvcHkvb2JqdHVwbGUuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRI
T05fU1JDU19CQVNFKS9weS9vYmp0eXBlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJ
Qk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb2JqemlwLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1Mt
eSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvb3BtZXRob2RzLmMKK0xJQk1JQ1JP
UFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvc2VxdWVuY2Uu
YworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9w
eS9zdHJlYW0uYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JD
U19CQVNFKS9weS9iaW5hcnkuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9Q
WVRIT05fU1JDU19CQVNFKS9weS9idWlsdGluaW1wb3J0LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1Mt
eSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvYnVpbHRpbmV2ZXguYworTElCTUlD
Uk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tb2RhcnJh
eS5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0Up
L3B5L21vZGJ1aWx0aW5zLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlU
SE9OX1NSQ1NfQkFTRSkvcHkvbW9kY29sbGVjdGlvbnMuYworTElCTUlDUk9QWVRIT05fU1JDUy15
ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tb2RnYy5jCitMSUJNSUNST1BZVEhP
Tl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L21vZGlvLmMKK0xJQk1J
Q1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvbW9kbWF0
aC5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0Up
L3B5L21vZGNtYXRoLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9O
X1NSQ1NfQkFTRSkvcHkvbW9kbWljcm9weXRob24uYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9
ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tb2RzdHJ1Y3QuYworTElCTUlDUk9QWVRI
T05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tb2RzeXMuYworTElC
TUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9tb2R1
ZXJybm8uYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19C
QVNFKS9weS9wZXJzaXN0ZW50Y29kZS5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJN
SUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L3NjaGVkdWxlci5jCitMSUJNSUNST1BZVEhPTl9TUkNT
LXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L3ZtLmMKK0xJQk1JQ1JPUFlUSE9O
X1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvYmMuYworTElCTUlDUk9Q
WVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9zaG93YmMuYwor
TElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9y
ZXBsLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFT
RSkvcHkvcmVhZGVyLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9O
X1NSQ1NfQkFTRSkvcHkvc21hbGxpbnQuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElC
TUlDUk9QWVRIT05fU1JDU19CQVNFKS9weS9mcm96ZW5tb2QuYworCisjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIworIyBNaWNyb3B5dG9uIHNvdXJjZXMgLSBleHRtb2QKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JB
U0UpL2V4dG1vZC9tb2R1Y3R5cGVzLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1J
Q1JPUFlUSE9OX1NSQ1NfQkFTRSkvZXh0bW9kL21vZHVyZS5jCitMSUJNSUNST1BZVEhPTl9TUkNT
LXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC9tb2R1emxpYi5jCitMSUJN
SUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC9t
b2R1aGVhcHEuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JD
U19CQVNFKS9leHRtb2QvbW9kdWhhc2hsaWIuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQo
TElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9leHRtb2QvbW9kdWJpbmFzY2lpLmMKK0xJQk1JQ1JP
UFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvZXh0bW9kL21hY2hp
bmVfbWVtLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1Nf
QkFTRSkvZXh0bW9kL21hY2hpbmVfaTJjLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJ
Qk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvZXh0bW9kL21hY2hpbmVfcGluYmFzZS5jCitMSUJNSUNS
T1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC9tYWNo
aW5lX3B1bHNlLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NS
Q1NfQkFTRSkvZXh0bW9kL21hY2hpbmVfc2lnbmFsLmMKKyNMSUJNSUNST1BZVEhPTl9TUkNTLXkg
Kz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC9tb2R1c3NsLmMKK0xJQk1JQ1JP
UFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvZXh0bW9kL21vZHVy
YW5kb20uYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19C
QVNFKS9leHRtb2QvbW9kdXRpbWVxLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1J
Q1JPUFlUSE9OX1NSQ1NfQkFTRSkvZXh0bW9kL21vZHdlYnNvY2tldC5jCitMSUJNSUNST1BZVEhP
Tl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC9tb2R3ZWJyZXBs
LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkv
ZXh0bW9kL21vZGZyYW1lYnVmLmMKKyNMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNS
T1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC9mc3VzZXJtb3VudC5jCitMSUJNSUNST1BZVEhPTl9T
UkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC9tb2R1anNvbi5jCisj
TElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9leHRt
b2QvbW9kdW9zX2R1cHRlcm0uYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9Q
WVRIT05fU1JDU19CQVNFKS9leHRtb2QvdmlydHBpbi5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkg
Kz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2V4dG1vZC91dGltZV9tcGhhbC5jCitMSUJN
SUNST1BZVEhPTl9TUkNTLSQoQ09ORklHX0xJQkxXSVApICs9ICQoTElCTUlDUk9QWVRIT05fQkFT
RSkvZXh0bW9kL21vZGx3aXAuYworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBNaWNyb3B5
dG9uIHNvdXJjZXMgLSBsaWIKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJNSUNST1BZVEhP
Tl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2xpYi91dGlscy9weWV4ZWMu
YworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fU1JDU19CQVNFKS9s
aWIvdGltZXV0aWxzL3RpbWV1dGlscy5jCitMSUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJN
SUNST1BZVEhPTl9TUkNTX0JBU0UpL2xpYi9tcC1yZWFkbGluZS9yZWFkbGluZS5jCitMSUJNSUNS
T1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL2xpYi9uZXR1dGls
cy9uZXR1dGlscy5jCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1pY3JvcHl0b24gc291
cmNlcyAtIHVuaXgKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJNSUNST1BZVEhPTl9TUkNT
LXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3VuaXgvZ2Njb2xsZWN0LmMKK0xJQk1J
Q1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdW5peC91bml4
X21waGFsLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1Nf
QkFTRSkvdW5peC9tcHRocmVhZHBvcnQuYworTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElC
TUlDUk9QWVRIT05fU1JDU19CQVNFKS91bml4L2lucHV0LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1Mt
eSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdW5peC9maWxlLmMKK0xJQk1JQ1JPUFlU
SE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdW5peC9hbGxvYy5jCitM
SUJNSUNST1BZVEhPTl9TUkNTLXkgKz0gJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3VuaXgv
Y292ZXJhZ2UuYworI0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NS
Q1NfQkFTRSkvdW5peC9mYXRmc19wb3J0LmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJ
Qk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdW5peC9tb2R1c2VsZWN0LmMKK0xJQk1JQ1JPUFlUSE9O
X1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdW5peC9tb2RtYWNoaW5lLmMK
K0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdW5p
eC9tb2R0aW1lLmMKK0xJQk1JQ1JPUFlUSE9OX1NSQ1MteSArPSAkKExJQk1JQ1JPUFlUSE9OX1NS
Q1NfQkFTRSkvdW5peC9tb2Rvcy5jCisjTElCTUlDUk9QWVRIT05fU1JDUy15ICs9ICQoTElCTUlD
Uk9QWVRIT05fU1JDU19CQVNFKS91bml4L21vZHNvY2tldC5jCisKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIE1pY3JvcHl0b24gc291cmNlcyAtIGZyb3plbiBtb2R1bGVzIChhdXRvLWdlbmVy
YXRlZCwgc2VlIHJ1bGUgYmVsb3cpCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCTUlDUk9Q
WVRIT05fU1JDUy15ICs9ICQoTElCTUlDUk9QWVRIT05fQlVJTEQpL2Zyb3plbi5jCisKKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYi1zcGVjaWZpYyBUYXJnZXRzCisjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworJChMSUJNSUNST1BZVEhPTl9IRUFERVJfQlVJTEQpL3FzdHJkZWZzLmdlbmVy
YXRlZC5oOiAkKExJQk1JQ1JPUFlUSE9OX1BZX1FTVFJfREVGUykgJChMSUJNSUNST1BZVEhPTl9R
U1RSX0RFRlMpICQoTElCTUlDUk9QWVRIT05fUVNUUl9ERUZTX0NPTExFQ1RFRCkgJChMSUJNSUNS
T1BZVEhPTl9TUkNTX0JBU0UpL3B5L21ha2Vxc3RyZGF0YS5weSAkKExJQk1JQ1JPUFlUSE9OX1NS
Q1NfQkFTRSkvdW5peC9tcGNvbmZpZ3BvcnQuaCAkKExJQk1JQ1JPUFlUSE9OX01QQ09ORklHUE9S
VF9NSykgJChMSUJNSUNST1BZVEhPTl9TUkNTX0JBU0UpL3B5L21wY29uZmlnLmggfCAkKExJQk1J
Q1JPUFlUSE9OX0hFQURFUl9CVUlMRCkKKwkkKGNhbGwgdmVyYm9zZV9jbWQsR0VOLGxpYm1pY3Jv
cHl0aG9uJzonIHFzdHJkZWZzLnByZXByb2Nlc3NlZC5oLCQoQ0FUKSAkKExJQk1JQ1JPUFlUSE9O
X1BZX1FTVFJfREVGUykgJChMSUJNSUNST1BZVEhPTl9RU1RSX0RFRlMpICQoTElCTUlDUk9QWVRI
T05fUVNUUl9ERUZTX0NPTExFQ1RFRCkgfCAkKFNFRCkgJ3MvXlEoLiopLyImIi8nIHwgJChDQykg
LUUgJChDRkxBR1MpICQoQ0ZMQUdTLXkpICQoTElCTUlDUk9QWVRIT05fQ0ZMQUdTKSAkKExJQk1J
Q1JPUFlUSE9OX0NGTEFHUy15KSAkKENJTkNMVURFUykgJChDSU5DTFVERVMteSkgJChMSUJNSUNS
T1BZVEhPTl9DSU5DTFVERVMpICQoTElCTUlDUk9QWVRIT05fQ0lOQ0xVREVTLXkpIC0gfCAkKFNF
RCkgJ3MvXiJcKFEoLiopXCkiL1wxLycgPiAkKExJQk1JQ1JPUFlUSE9OX0hFQURFUl9CVUlMRCkv
cXN0cmRlZnMucHJlcHJvY2Vzc2VkLmgpCisJJChjYWxsIHZlcmJvc2VfY21kLFBZLGxpYm1pY3Jv
cHl0aG9uJzonIHFzdHJkZWZzLmdlbmVyYXRlZC5oLCQoUFlUSE9OKSAkKExJQk1JQ1JPUFlUSE9O
X1NSQ1NfQkFTRSkvcHkvbWFrZXFzdHJkYXRhLnB5ICQoTElCTUlDUk9QWVRIT05fSEVBREVSX0JV
SUxEKS9xc3RyZGVmcy5wcmVwcm9jZXNzZWQuaCA+ICRAKQorCiskKExJQk1JQ1JPUFlUSE9OX0hF
QURFUl9CVUlMRCk6ICQoTElCTUlDUk9QWVRIT05fQlVJTEQpLy5wYXRjaGVkCisJJChjYWxsIHZl
cmJvc2VfY21kLE1LRElSLGxpYm1pY3JvcHl0aG9uJzonICQobm90ZGlyICQoTElCTUlDUk9QWVRI
T05fSEVBREVSX0JVSUxEKSksJChNS0RJUikgJChMSUJNSUNST1BZVEhPTl9IRUFERVJfQlVJTEQp
KQorCiskKExJQk1JQ1JPUFlUSE9OX0hFQURFUl9CVUlMRCkvbXB2ZXJzaW9uLmg6IHwgJChMSUJN
SUNST1BZVEhPTl9IRUFERVJfQlVJTEQpCisJJChjYWxsIHZlcmJvc2VfY21kLFBZLGxpYm1pY3Jv
cHl0aG9uJzonICQobm90ZGlyICRAKSwkKFBZVEhPTikgJChMSUJNSUNST1BZVEhPTl9TUkNTX0JB
U0UpL3B5L21ha2V2ZXJzaW9uaGRyLnB5ICRAKQorCiskKExJQk1JQ1JPUFlUSE9OX0hFQURFUl9C
VUlMRCkvcXN0ci5pLmxhc3Q6IHwgJChMSUJNSUNST1BZVEhPTl9IRUFERVJfQlVJTEQpL21wdmVy
c2lvbi5oCisJJChjYWxsIHZlcmJvc2VfY21kLEdFTixsaWJtaWNyb3B5dGhvbic6JyAkKG5vdGRp
ciAkQCksJChDQykgLUUgJChMSUJNSUNST1BZVEhPTl9RU1RSX0dFTl9FWFRSQV9DRkxBR1MpICQo
Q0lOQ0xVREVTKSAkKENJTkNMVURFUy15KSAkKExJQk1JQ1JPUFlUSE9OX0NJTkNMVURFUykgJChM
SUJNSUNST1BZVEhPTl9DSU5DTFVERVMteSkgJChMSUJNSUNST1BZVEhPTl9TUkNTLXkpID4kKExJ
Qk1JQ1JPUFlUSE9OX0hFQURFUl9CVUlMRCkvcXN0ci5pLmxhc3QpCisKKyQoTElCTUlDUk9QWVRI
T05fSEVBREVSX0JVSUxEKS9xc3RyLnNwbGl0OiAkKExJQk1JQ1JPUFlUSE9OX0hFQURFUl9CVUlM
RCkvcXN0ci5pLmxhc3QKKwkkKGNhbGwgdmVyYm9zZV9jbWQsUFksbGlibWljcm9weXRob24nOicg
JChub3RkaXIgJEApLCQoUFlUSE9OKSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvL21h
a2Vxc3RyZGVmcy5weSBzcGxpdCAkKExJQk1JQ1JPUFlUSE9OX0hFQURFUl9CVUlMRCkvcXN0ci5p
Lmxhc3QgJChMSUJNSUNST1BZVEhPTl9IRUFERVJfQlVJTEQpL3FzdHIgJChMSUJNSUNST1BZVEhP
Tl9RU1RSX0RFRlNfQ09MTEVDVEVEKSAmJiB0b3VjaCAkQCkKKworJChMSUJNSUNST1BZVEhPTl9R
U1RSX0RFRlNfQ09MTEVDVEVEKTogJChMSUJNSUNST1BZVEhPTl9IRUFERVJfQlVJTEQpL3FzdHIu
c3BsaXQKKwkkKGNhbGwgdmVyYm9zZV9jbWQsUFksbGlibWljcm9weXRob24nOicgJChub3RkaXIg
JEApLCQoUFlUSE9OKSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvcHkvbWFrZXFzdHJkZWZz
LnB5IGNhdCAkKExJQk1JQ1JPUFlUSE9OX0hFQURFUl9CVUlMRCkvcXN0ci5pLmxhc3QgJChMSUJN
SUNST1BZVEhPTl9IRUFERVJfQlVJTEQpL3FzdHIgJChMSUJNSUNST1BZVEhPTl9RU1RSX0RFRlNf
Q09MTEVDVEVEKSkKKworJChMSUJNSUNST1BZVEhPTl9CVUlMRCkvZnJvemVuLmM6ICQod2lsZGNh
cmQgJChMSUJNSUNST1BZVEhPTl9GUk9aRU5fRElSKS8qKSAkKExJQk1JQ1JPUFlUSE9OX0hFQURF
Ul9CVUlMRCkKKwkkKGNhbGwgdmVyYm9zZV9jbWQsUFksbGlibWljcm9weXRob24nOicgJChub3Rk
aXIgJEApLCQoUFlUSE9OKSAkKExJQk1JQ1JPUFlUSE9OX1NSQ1NfQkFTRSkvdG9vbHMvbWFrZS1m
cm96ZW4ucHkgJChMSUJNSUNST1BZVEhPTl9GUk9aRU5fRElSKSA+ICRAKQorCiskKExJQk1JQ1JP
UFlUSE9OX0JVSUxEKS8ucHJlcGFyZWQ6ICQoTElCTUlDUk9QWVRIT05fQlVJTEQpL2Zyb3plbi5j
ICQoTElCTUlDUk9QWVRIT05fSEVBREVSX0JVSUxEKS9xc3RyZGVmcy5nZW5lcmF0ZWQuaAorCitV
S19QUkVQQVJFLSQoQ09ORklHX0xJQk1JQ1JPUFlUSE9OKSArPSAkKExJQk1JQ1JPUFlUSE9OX0JV
SUxEKS8ucHJlcGFyZWQKZGlmZiAtLWdpdCBhL21wY29uZmlncG9ydC5tayBiL21wY29uZmlncG9y
dC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTVkM2ZhCi0tLSAvZGV2
L251bGwKKysrIGIvbXBjb25maWdwb3J0Lm1rCkBAIC0wLDAgKzEsNDUgQEAKKyMgRW5hYmxlL2Rp
c2FibGUgbW9kdWxlcyBhbmQgM3JkLXBhcnR5IGxpYnMgdG8gYmUgaW5jbHVkZWQgaW4gaW50ZXJw
cmV0ZXIKKworIyBCdWlsZCAzMi1iaXQgYmluYXJpZXMgb24gYSA2NC1iaXQgaG9zdAorTUlDUk9Q
WV9GT1JDRV8zMkJJVCA9IDAKKworIyBUaGlzIHZhcmlhYmxlIGNhbiB0YWtlIHRoZSBmb2xsb3dp
bmcgdmFsdWVzOgorIyAgMCAtIG5vIHJlYWRsaW5lLCBqdXN0IHNpbXBsZSBzdGRpbiBpbnB1dAor
IyAgMSAtIHVzZSBNaWNyb1B5dGhvbiB2ZXJzaW9uIG9mIHJlYWRsaW5lCitNSUNST1BZX1VTRV9S
RUFETElORSA9IDEKKworIyBidHJlZSBtb2R1bGUgdXNpbmcgQmVya2VsZXkgREIgMS54eAorTUlD
Uk9QWV9QWV9CVFJFRSA9IDAKKworIyBfdGhyZWFkIG1vZHVsZSB1c2luZyBwdGhyZWFkcworTUlD
Uk9QWV9QWV9USFJFQUQgPSAxCisKKyMgU3Vic2V0IG9mIENQeXRob24gdGVybWlvcyBtb2R1bGUK
K01JQ1JPUFlfUFlfVEVSTUlPUyA9IDAKKworIyBTdWJzZXQgb2YgQ1B5dGhvbiBzb2NrZXQgbW9k
dWxlCitNSUNST1BZX1BZX1NPQ0tFVCA9IDAKKworIyBTdWJzZXQgb2YgQ1B5dGhvbiBsd2lwIG1v
ZHVsZQorTUlDUk9QWV9QWV9MV0lQID0gMQorCisjIGZmaSBtb2R1bGUgcmVxdWlyZXMgbGliZmZp
IChsaWJmZmktZGV2IERlYmlhbiBwYWNrYWdlKQorTUlDUk9QWV9QWV9GRkkgPSAwCisKKyMgdXNz
bCBtb2R1bGUgcmVxdWlyZXMgb25lIG9mIHRoZSBUTFMgbGlicmFyaWVzIGJlbG93CitNSUNST1BZ
X1BZX1VTU0wgPSAwCisjIGF4VExTIGhhcyBtaW5pbWFsIHNpemUgYW5kIGZ1bGx5IGludGVncmF0
ZWQgd2l0aCBNaWNyb1B5dGhvbiwgYnV0CisjIGltcGxlbWVudHMgb25seSBhIHN1YnNldCBvZiBt
b2Rlcm4gVExTIGZ1bmN0aW9uYWxpdHksIHNvIG1heSBoYXZlCisjIHByb2JsZW1zIHdpdGggc29t
ZSBzZXJ2ZXJzLgorTUlDUk9QWV9TU0xfQVhUTFMgPSAwCisjIG1iZWRUTFMgaXMgbW9yZSB1cCB0
byBkYXRlIGFuZCBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGFsc28KKyMgbW9yZSBibG9h
dGVkLiBDb25maWd1cmluZyBhbmQgYnVpbGRpbmcgb2YgbWJlZFRMUyBzaG91bGQgYmUgZG9uZQor
IyBvdXRzaWRlIG9mIE1pY3JvUHl0aG9uLCBpdCBjYW4ganVzdCBsaW5rIHdpdGggbWJlZFRMUyBs
aWJyYXJ5LgorTUlDUk9QWV9TU0xfTUJFRFRMUyA9IDAKKworIyBqbmkgbW9kdWxlIHJlcXVpcmVz
IEpWTS9KTkkKK01JQ1JPUFlfUFlfSk5JID0gMAorCisjIEF2b2lkIHVzaW5nIHN5c3RlbSBsaWJy
YXJpZXMsIHVzZSBjb3BpZXMgYnVuZGxlZCB3aXRoIE1pY3JvUHl0aG9uCisjIGFzIHN1Ym1vZHVs
ZXMgKGN1cnJlbnRseSBhZmZlY3RzIG9ubHkgbGliZmZpKS4KK01JQ1JPUFlfU1RBTkRBTE9ORSA9
IDAKLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnBy
b2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9t
aW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 08:08:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 08:08:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD2LC-0004yC-MA; Wed, 25 Sep 2019 08:08:02 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD2LB-0004y0-FZ
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 08:08:01 +0000
X-Inumbo-ID: 8f5bc5b4-df6b-11e9-962c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id 8f5bc5b4-df6b-11e9-962c-12813bfff9fa;
 Wed, 25 Sep 2019 08:07:47 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id DBBA74008D;
 Wed, 25 Sep 2019 10:07:46 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 25 Sep 2019 10:07:41 +0200
Message-Id: <20190925080742.17860-5-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190925080742.17860-1-felipe.huici@neclab.eu>
References: <20190925080742.17860-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBMICROPYTHON PATCH 4/5] Add patches.
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIHBhdGNoZXMgdG8gc2V0IHRoZSAiYm9hcmQiIHRvIHVuaXggYW5kIHRvIGNsZWFyIHRoZSBz
dGFjayBmcmFtZS4KClNpZ25lZC1vZmYtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5l
Y2xhYi5ldT4KLS0tCiBwYXRjaGVzLzAwMDEtbWlzc2luZy1ib2FyZC1kZWZpbmVzLnBhdGNoIHwg
MTEgKysrKysrKysrKysKIHBhdGNoZXMvMDAwMi1jbGVhcnVwLW5scnB1c2gtZnJhbWUucGF0Y2gg
fCAxMCArKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDEtbWlzc2luZy1ib2FyZC1kZWZpbmVzLnBhdGNoCiBj
cmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAyLWNsZWFydXAtbmxycHVzaC1mcmFtZS5wYXRj
aAoKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMS1taXNzaW5nLWJvYXJkLWRlZmluZXMucGF0Y2gg
Yi9wYXRjaGVzLzAwMDEtbWlzc2luZy1ib2FyZC1kZWZpbmVzLnBhdGNoCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYTczMTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVz
LzAwMDEtbWlzc2luZy1ib2FyZC1kZWZpbmVzLnBhdGNoCkBAIC0wLDAgKzEsMTEgQEAKKy0tLSBh
L3VuaXgvbXBjb25maWdwb3J0Lmgub3JpZwkyMDE3LTExLTE4IDA4OjQzOjU2LjA5NjQ0MTM2OCAr
MDEwMAorKysrIGIvdW5peC9tcGNvbmZpZ3BvcnQuaAkyMDE3LTExLTE4IDA4OjQyOjA1LjIyNTQ2
MzQxMyArMDEwMAorQEAgLTI1LDYgKzI1LDggQEAKKyAgKi8KKyAKKyAvLyBvcHRpb25zIHRvIGNv
bnRyb2wgaG93IE1pY3JvUHl0aG9uIGlzIGJ1aWx0CisrI2RlZmluZSBNSUNST1BZX0hXX0JPQVJE
X05BTUUgInVuaXgiCisrI2RlZmluZSBNSUNST1BZX0hXX01DVV9OQU1FICJ1bmtub3duLWNwdSIK
KyAKKyAjZGVmaW5lIE1JQ1JPUFlfQUxMT0NfUEFUSF9NQVggICAgICAoUEFUSF9NQVgpCisgI2Rl
ZmluZSBNSUNST1BZX1BFUlNJU1RFTlRfQ09ERV9MT0FEICgxKQpkaWZmIC0tZ2l0IGEvcGF0Y2hl
cy8wMDAyLWNsZWFydXAtbmxycHVzaC1mcmFtZS5wYXRjaCBiL3BhdGNoZXMvMDAwMi1jbGVhcnVw
LW5scnB1c2gtZnJhbWUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDRiNTg0OQotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwMi1jbGVhcnVwLW5scnB1c2gt
ZnJhbWUucGF0Y2gKQEAgLTAsMCArMSwxMCBAQAorLS0tIGEvcHkvbmxyeDY0LmMub3JpZwkyMDE3
LTA4LTIzIDExOjUwOjEwLjAwMDAwMDAwMCArMDIwMAorKysrIGIvcHkvbmxyeDY0LmMJMjAxNy0x
MS0yMSAxNDo0NDo0NS41MTM3Mjg2NzAgKzAxMDAKK0BAIC02NCw2ICs2NCw3IEBACisgICAgICNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX01BQ0hfXykKKyAgICAgInBvcCAgICAl
cmJwICAgICAgICAgICAgICAgIFxuIiAvLyB1bmRvIGZ1bmN0aW9uJ3MgcHJlbHVkZQorICAgICAj
ZW5kaWYKKysgICAgImxlYXZlcSAgICAgICAgICAgICAgICAgICAgIFxuIiAvLyBjbGVhbiB1cCBv
dXIgZnJhbWUKKyAgICAgIm1vdnEgICAoJXJzcCksICVyYXggICAgICAgIFxuIiAvLyBsb2FkIHJl
dHVybiAlcmlwCisgICAgICJtb3ZxICAgJXJheCwgMTYoJXJkaSkgICAgICBcbiIgLy8gc3RvcmUg
JXJpcCBpbnRvIG5scl9idWYKKyAgICAgIm1vdnEgICAlcmJwLCAyNCglcmRpKSAgICAgIFxuIiAv
LyBzdG9yZSAlcmJwIGludG8gbmxyX2J1ZgotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 08:08:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 08:08:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD2LH-0004z4-Nf; Wed, 25 Sep 2019 08:08:07 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD2LG-0004ys-GK
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 08:08:06 +0000
X-Inumbo-ID: 8f5bc5b6-df6b-11e9-962c-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id 8f5bc5b6-df6b-11e9-962c-12813bfff9fa;
 Wed, 25 Sep 2019 08:07:48 +0000 (UTC)
Received: from localhost (c110.ant-net [192.168.0.36])
 by queen.nlehd.de (Postfix) with ESMTP id 5928444612;
 Wed, 25 Sep 2019 10:07:48 +0200 (CEST)
From: Felipe Huici <felipe.huici@neclab.eu>
To: minios-devel@lists.xen.org
Date: Wed, 25 Sep 2019 10:07:42 +0200
Message-Id: <20190925080742.17860-6-felipe.huici@neclab.eu>
X-Mailer: git-send-email 2.11.0
In-Reply-To: <20190925080742.17860-1-felipe.huici@neclab.eu>
References: <20190925080742.17860-1-felipe.huici@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/LIBMICROPYTHON PATCH 5/5] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RXhwb3NlIG1pY3JvcHl0aG9uX21haW4sIHRoZSBtYWluIGVudHJ5IHBvaW50LgoKU2lnbmVkLW9m
Zi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgotLS0KIGV4cG9ydHN5
bXMudWsgfCAyICstCiAxIGZpbGUgY2hhbmdlZCwgMSBpbnNlcnRpb24oKyksIDEgZGVsZXRpb24o
LSkKCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3ltcy51awppbmRleCBjODZj
M2YzLi4wODNiZThmIDEwMDY0NAotLS0gYS9leHBvcnRzeW1zLnVrCisrKyBiL2V4cG9ydHN5bXMu
dWsKQEAgLTEgKzEgQEAKLW5vbmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCittaWNyb3B5
dGhvbl9tYWluCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3NT-0002u5-U7; Wed, 25 Sep 2019 09:14:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3NS-0002tn-VK
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:26 +0000
X-Inumbo-ID: decb726c-df74-11e9-962d-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id decb726c-df74-11e9-962d-12813bfff9fa;
 Wed, 25 Sep 2019 09:14:26 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8DB231596;
 Wed, 25 Sep 2019 02:14:25 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id E5E2C3F694;
 Wed, 25 Sep 2019 02:14:22 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:01 +0800
Message-Id: <20190925091407.182692-2-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190925091407.182692-1-justin.he@arm.com>
References: <20190925091407.182692-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v5 1/7] plat/common: Calculate shift
 factors for coversion between ns and tick
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Wei Chen <wei.chen@arm.com>, Jianyong Wu <jianyong.wu@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgaGFkIHNoaWZ0IGZhY3RvciBmb3IgY292ZXJ0aW5nIGNvdW50ZXIgdGlja3MgdG8gbnMsIGJ1
dCBpdCdzIG5vdAplbm91Z2guIFNvbWV0aW1lLCB3ZSBuZWVkIHRvIGNvdmVydCBucyB0byB0aWNr
cy4gRm9yIGV4YW1wbGUsIHdlJ2xsCnRyYW5zZmVyIHNsZWVwKG5zKSB0byBjb3VudGVyIHRpY2tz
LiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBzaGlmdCBmYWN0b3IsCnRoZSBjb252ZXJzaW9uIGFjY3Vy
YWN5IHdpbGwgYmUgbG93ZXIuCgpTaWduZWQtb2ZmLWJ5OiBXZWkgQ2hlbiA8d2VpLmNoZW5AYXJt
LmNvbT4KU2lnbmVkLW9mZi1ieTogSmlhbnlvbmcgV3UgPGppYW55b25nLnd1QGFybS5jb20+ClNp
Z25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogcGxhdC9jb21tb24v
YXJtL3RpbWUuYyB8IDExOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t
LQogMSBmaWxlIGNoYW5nZWQsIDkzIGluc2VydGlvbnMoKyksIDI1IGRlbGV0aW9ucygtKQoKZGlm
ZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5j
CmluZGV4IDFiMzA5MDMuLjAyMTU5MzIgMTAwNjQ0Ci0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1l
LmMKKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwpAQCAtNDcsMjEgKzQ3LDg5IEBACiBzdGF0
aWMgdWludDY0X3QgYm9vdF90aWNrczsKIHN0YXRpYyB1aW50MzJfdCBjb3VudGVyX2ZyZXE7CiAK
LS8qCi0gKiBTaGlmdCBmYWN0b3IgZm9yIGNvdW50ZXIgc2NhbGluZyBtdWx0aXBsaWVyOyByZWZl
cnJlZCB0byBhcyBTIGluIHRoZQotICogZm9sbG93aW5nIGNvbW1lbnRzLgotICovCi1zdGF0aWMg
dWludDhfdCBjb3VudGVyX3NoaWZ0OwogCi0vKiBNdWx0aXBsaWVyIGZvciBjb252ZXJ0aW5nIGNv
dW50ZXIgdGlja3MgdG8gbnNlY3MuICgwLlMpIGZpeGVkIHBvaW50LiAqLworLyogU2hpZnQgZmFj
dG9yIGZvciBjb252ZXJ0aW5nIHRpY2tzIHRvIG5zICovCitzdGF0aWMgdWludDhfdCBjb3VudGVy
X3NoaWZ0X3RvX25zOworCisvKiBTaGlmdCBmYWN0b3IgZm9yIGNvbnZlcnRpbmcgbnMgdG8gdGlj
a3MgKi8KK3N0YXRpYyB1aW50OF90IGNvdW50ZXJfc2hpZnRfdG9fdGljazsKKworLyogTXVsdGlw
bGllciBmb3IgY29udmVydGluZyBjb3VudGVyIHRpY2tzIHRvIG5zZWNzICovCiBzdGF0aWMgdWlu
dDMyX3QgbnNfcGVyX3RpY2s7CiAKKy8qIE11bHRpcGxpZXIgZm9yIGNvbnZlcnRpbmcgbnNlY3Mg
dG8gY291bnRlciB0aWNrcyAqLworc3RhdGljIHVpbnQzMl90IHRpY2tfcGVyX25zOworCisvKgor
ICogVGhlIG1heGltdW0gdGltZSByYW5nZSBpbiBzZWNvbmRzIHdoaWNoIGNhbiBiZSBjb252ZXJ0
ZWQgYnkgbXVsdGlwbGllcgorICogYW5kIHNoaWZ0IGZhY3RvcnMuIFRoaXMgd2lsbCBndWFyYW50
ZWUgdGhlIGNvbnZlcnRlZCB2YWx1ZSBub3QgdG8gZXhjZWVkCisgKiA2NC1iaXQgdW5zaWduZWQg
aW50ZWdlci4gSW5jcmVhc2UgdGhlIHRpbWUgcmFuZ2Ugd2lsbCByZWR1Y2UgdGhlIGFjY3VyYWN5
CisgKiBvZiBjb252ZXJzaW9uLCBiZWNhdXNlIHdlIHdpbGwgZ2V0IHNtYWxsZXIgbXVsdGlwbGll
ciBhbmQgc2hpZnQgZmFjdG9ycy4KKyAqIEluIHRoaXMgY2FzZSwgd2Ugc2VsZWN0ZWQgMzYwMHMg
YXMgdGhlIHRpbWUgcmFuZ2UuCisgKi8KKyNkZWZpbmUgX19NQVhfQ09OVkVSVF9TRUNTCSgzNjAw
VUwpCisjZGVmaW5lIF9fTUFYX0NPTlZFUlRfTlMJKDM2MDBVTCpOU0VDX1BFUl9TRUMpCitzdGF0
aWMgdWludDY0X3QgbWF4X2NvbnZlcnRfdGlja3M7CisKIC8qIEhvdyBtYW55IG5hbm9zZWNvbmRz
IHBlciBzZWNvbmQgKi8KICNkZWZpbmUgTlNFQ19QRVJfU0VDIHVrYXJjaF90aW1lX3NlY190b19u
c2VjKDEpCiAKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QgdGlja3NfdG9fbnModWludDY0X3QgdGlj
a3MpCiB7Ci0JcmV0dXJuIChuc19wZXJfdGljayAqIHRpY2tzKSA+PiBjb3VudGVyX3NoaWZ0Owor
CVVLX0FTU0VSVCh0aWNrcyA8PSBtYXhfY29udmVydF90aWNrcyk7CisKKwlyZXR1cm4gKG5zX3Bl
cl90aWNrICogdGlja3MpID4+IGNvdW50ZXJfc2hpZnRfdG9fbnM7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdWludDY0X3QgbnNfdG9fdGlja3ModWludDY0X3QgbnMpCit7CisJVUtfQVNTRVJUKG5zIDw9
IF9fTUFYX0NPTlZFUlRfTlMpOworCisJcmV0dXJuICh0aWNrX3Blcl9ucyAqIG5zKSA+PiBjb3Vu
dGVyX3NoaWZ0X3RvX3RpY2s7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgbXVsdGlwbGllci9zaGlm
dCBmYWN0b3JzIGZvciBzY2FsZWQgbWF0aC4KKyAqLworc3RhdGljIHZvaWQgY2FsY3VsYXRlX211
bHRfc2hpZnQodWludDMyX3QgKm11bHQsIHVpbnQ4X3QgKnNoaWZ0LAorCQl1aW50NjRfdCBmcm9t
LCB1aW50NjRfdCB0bykKK3sKKwl1aW50NjRfdCB0bXA7CisJdWludDMyX3Qgc2Z0LCBzZnRhY2Mg
PSAzMjsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzaGlmdCBmYWN0b3Igd2hpY2ggaXMgbGlt
aXRpbmcgdGhlIGNvbnZlcnNpb24KKwkgKiByYW5nZToKKwkgKi8KKwl0bXAgPSAoKHVpbnQ2NF90
KV9fTUFYX0NPTlZFUlRfU0VDUyAqIGZyb20pID4+IDMyOworCXdoaWxlICh0bXApIHsKKwkJdG1w
ID4+PSAxOworCQlzZnRhY2MtLTsKKwl9CisKKworCS8qCisJICogQ2FsY3VsYXRlIHNoaWZ0IGZh
Y3RvciAoUykgYW5kIHNjYWxpbmcgbXVsdGlwbGllciAoTSkuCisJICoKKwkgKiAoUykgbmVlZHMg
dG8gYmUgdGhlIGxhcmdlc3Qgc2hpZnQgZmFjdG9yICg8PSBtYXhfc2hpZnQpIHdoZXJlCisJICog
dGhlIHJlc3VsdCBvZiB0aGUgTSBjYWxjdWxhdGlvbiBiZWxvdyBmaXRzIGludG8gdWludDMyX3QK
KwkgKiB3aXRob3V0IHRydW5jYXRpb24uCisJICoKKwkgKiBtdWx0aXBsaWVyID0gKHRhcmdldCA8
PCBzaGlmdCkgLyBzb3VyY2UKKwkgKi8KKwlmb3IgKHNmdCA9IDMyOyBzZnQgPiAwOyBzZnQtLSkg
eworCQl0bXAgPSAodWludDY0X3QpIHRvIDw8IHNmdDsKKworCQkvKiBFbnN1cmluZyB3ZSByb3Vu
ZCB0byBuZWFyZXN0IHdoZW4gY2FsY3VsYXRpbmcgdGhlCisJCSAqIG11bHRpcGxpZXIKKwkJICov
CisJCXRtcCArPSBmcm9tIC8gMjsKKwkJdG1wIC89IGZyb207CisJCWlmICgodG1wID4+IHNmdGFj
YykgPT0gMCkKKwkJCWJyZWFrOworCX0KKwkqbXVsdCA9IHRtcDsKKwkqc2hpZnQgPSBzZnQ7CiB9
CiAKIC8qCkBAIC0xNDUsMjkgKzIxMywyOSBAQCBzdGF0aWMgX191NjQgIGdlbmVyaWNfdGltZXJf
ZXBvY2hvZmZzZXQodm9pZCkKIAogc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkK
IHsKKwljb3VudGVyX2ZyZXEgPSBnZXRfY291bnRlcl9mcmVxdWVuY3koKTsKKwogCS8qCi0JICog
Q2FsY3VsYXRlIGNvdW50ZXIgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIuCi0J
ICoKLQkgKiBjb3VudGVyX3NoaWZ0IChTKSBuZWVkcyB0byBiZSB0aGUgbGFyZ2VzdCAoPD0zMikg
c2hpZnQgZmFjdG9yIHdoZXJlCi0JICogdGhlIHJlc3VsdCBvZiB0aGUgbnNfcGVyX3RpY2sgY2Fs
Y3VsYXRpb24gYmVsb3cgZml0cyBpbnRvIHVpbnQzMl90Ci0JICogd2l0aG91dCB0cnVuY2F0aW9u
LiBOb3RlIHRoYXQgd2UgZGlzYWxsb3cgYW4gUyBvZiB6ZXJvIHRvIGVuc3VyZQotCSAqIHRoZSBs
b29wIGFsd2F5cyB0ZXJtaW5hdGVzLgotCSAqCi0JICogKDAuUykgbnNfcGVyX3RpY2sgPSBOU0VD
X1BFUl9TRUMgKFMuUykgLyBjb3VudGVyX2ZyZXEgKFMuMCkKKwkgKiBDYWxjdWxhdGUgdGhlIHNo
aWZ0IGZhY3RvciBhbmQgc2NhbGluZyBtdWx0aXBsaWVyIGZvcgorCSAqIGNvbnZlcnRpbmcgdGlj
a3MgdG8gbnMuCiAJICovCi0JdWludDY0X3QgdG1wOworCWNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZu
c19wZXJfdGljaywgJmNvdW50ZXJfc2hpZnRfdG9fbnMsCisJCQkJY291bnRlcl9mcmVxLCBOU0VD
X1BFUl9TRUMpOwogCi0JY291bnRlcl9mcmVxID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KCk7Ci0J
Y291bnRlcl9zaGlmdCA9IDMyOwotCWRvIHsKLQkJdG1wID0gKE5TRUNfUEVSX1NFQyA8PCBjb3Vu
dGVyX3NoaWZ0KSAvIGNvdW50ZXJfZnJlcTsKLQkJaWYgKCh0bXAgJiAweEZGRkZGRkZGMDAwMDAw
MDBMKSA9PSAwTCkKLQkJCW5zX3Blcl90aWNrID0gKHVpbnQzMl90KXRtcDsKLQkJZWxzZQotCQkJ
Y291bnRlcl9zaGlmdC0tOwotCX0gd2hpbGUgKGNvdW50ZXJfc2hpZnQgPiAwICYmIG5zX3Blcl90
aWNrID09IDBMKTsKKwkvKiBXZSBkaXNhbGxvdyB6ZXJvIG5zX3Blcl90aWNrICovCiAJVUtfQlVH
T04oIW5zX3Blcl90aWNrKTsKIAorCS8qCisJICogQ2FsY3VsYXRlIHRoZSBzaGlmdCBmYWN0b3Ig
YW5kIHNjYWxpbmcgbXVsdGlwbGllciBmb3IKKwkgKiBjb252ZXJ0aW5nIG5zIHRvIHRpY2tzLgor
CSAqLworCWNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZ0aWNrX3Blcl9ucywgJmNvdW50ZXJfc2hpZnRf
dG9fdGljaywKKwkJCQlOU0VDX1BFUl9TRUMsIGNvdW50ZXJfZnJlcSk7CisKKwkvKiBXZSBkaXNh
bGxvdyB6ZXJvIG5zX3Blcl90aWNrICovCisJVUtfQlVHT04oIXRpY2tfcGVyX25zKTsKKworCW1h
eF9jb252ZXJ0X3RpY2tzID0gX19NQVhfQ09OVkVSVF9TRUNTKmNvdW50ZXJfZnJlcTsKIAkvKgog
CSAqIE1vbm90b25pYyB0aW1lIGJlZ2lucyBhdCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNv
dW50ZXIKIAkgKiBiZWZvcmUgY2FsaWJyYXRpb24pLgotLSAKMi4xNy4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3NV-0002uX-0V; Wed, 25 Sep 2019 09:14:29 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3NT-0002tv-IY
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:27 +0000
X-Inumbo-ID: dcf18c42-df74-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id dcf18c42-df74-11e9-bf31-bc764e2007e4;
 Wed, 25 Sep 2019 09:14:23 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 76FB61570;
 Wed, 25 Sep 2019 02:14:22 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 43B043F694;
 Wed, 25 Sep 2019 02:14:20 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:00 +0800
Message-Id: <20190925091407.182692-1-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [UNIKRAFT PATCH v5 0/7] Implement Arm64 timer APIs
 for scheduler(series#4)
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q3VycmVudGx5LCB0aGUgdGltZXIgbGlicmFyeSBvbmx5IHByb3ZpZGVzIHNvbWUgc2ltcGxlIGZ1
bmN0aW9ucyBmb3IKdW5pa3JhZnQgdG8gcHJpbnQgdGltZXN0YW1wLiBCdXQgaXQncyBub3QgZW5v
dWdoIGZvciBzY2hlZHVsZXIuIEluCnRoaXMgc2VyaWVzLCB3ZSBpbXBsZW1lbnRlZCBnZW5lcmlj
X3RpbWVyX2NwdV9ibG9jayBhbmQgdGltZXIgaW50ZXJydXB0CmZvciBzY2hlZHVsZXIgdG8gc2xl
ZXAgYW5kIHdha2V1cC4KCkNoYW5nZXM6CnY1OiByZWZpbmUgdGhlIHBhdGNoIDA3Lgp2NDogYWRk
cmVzcyBjb21tZW50cyBmcm9tIFNhbnRpYWdvLCBKdWxpZW4gJiBTaGFyYW4uCiAgICBhZGQgYXNz
ZXJ0IGZvciBuc190b190aWNrcywgdGlja3NfdG9fbnMKICAgIHJldmVydCBzb21lIGluY29ycmVj
dCBhZGRyZXNzaW5nIGluIHYzIChwYXRjaCAwNSkKICAgIGFkZCBpc2IgYWZ0ZXIgd3JpdHRpbmcg
dGhlIHN5cyByZWcKICAgIHNwbGl0IGFyY2ggc3BlY2lmaWMgY29kZXMgaW50byBhcm0vYXJtNjQs
IG1ha2UgYSBzdHViIGZvciBhcm0KdjM6IEFkZHJlc3NlZCBtb3N0IG9mIHRoZSBjb21tZW50cyBm
cm9tIEp1bGllbgogICAgZHJvcCBwYXRjaDEgdG8gZ2V0IHJpZCBvZiBub3AoKQogICAgcmV3cml0
ZSBjYWxjdWxhdGVfbXVsdF9zaGlmdCgpCiAgICBhZGQgaXNiKCkgYWZ0ZXIgd3JpdGluZyBzeXMg
cmVnaXN0ZXJzCiAgICByZW1vdmUgY291bnRlcl9taW5pX2RlbHRhCiAgICByZXdyaXRlIGdlbmVy
aWNfdGltZXJfY3B1X2Jsb2NrKCkgYXMgcGVyIG1pbmlvcyBpbXBsZW1lbnRhdGlvbgogICAgcmVt
b3ZlIDIgdW5uZWNlc3NhcnkgZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpCiAgICBuZXdseSBhZGQg
cGF0Y2g3IHRvIG1vdmUgdGltZS5jIHRvIHRpbWVfYXJtNjQuYwp2Mjogbm8gZnVuY3Rpb25hbCBj
aGFuZ2VzCiAgICByZWJhc2UgZHVlIHRvIHRoZSBjaGFuZ2VzIG9mIHNlcmllcyBsaWJvZncgYW5k
IGdpYy12MiBpcnEuCgpKaWEgSGUgKDYpOgogIHBsYXQvY29tbW9uOiBDYWxjdWxhdGUgc2hpZnQg
ZmFjdG9ycyBmb3IgY292ZXJzaW9uIGJldHdlZW4gbnMgYW5kIHRpY2sKICBwbGF0L2NvbW1vbjog
UmVjb3JkIGJvb3RfdGlja3MgYXQgdmVyeSBiZWdpbm5pbmcKICBwbGF0L2NvbW1vbjogU2hhcmUg
YXJjaF90aW1lciBmZHQgbm9kZSBhbW9uZyBmdW5jdGlvbnMKICBwbGF0L2NvbW1vbjogRmluZCBh
bmQgcmVnaXN0ZXIgSVJRIGZvciBhcmNoX3RpbWVyCiAgcGxhdC9jb21tb246IEltcGxlbWVudCBn
ZW5lcmljX3RpbWVyX2NwdV9ibG9ja191bnRpbAogIHBsYXQvY29tbW9uOiBTcGxpdCBhcmNoIHNw
ZWNpZmljIGNvZGVzIGZyb20gdGltZS5jIHRvIGFybXssNjR9L3RpbWUuaAoKV2VpIENoZW4gKDEp
OgogIHBsYXQvY29tbW9uOiBSZW5hbWUgcmVhZF92aXJ0dWFsX2NvdW50IHRvIGdlbmVyaWNfdGlt
ZXJfZ2V0X3RpY2tzCgogcGxhdC9jb21tb24vYXJtL3RpbWUuYyAgICAgICAgICAgICAgIHwgMzQz
ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLQogcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJt
L3RpbWUuaCAgIHwgIDQzICsrKysKIHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3RpbWUu
aCB8ICA0NSArKysrCiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS90aW1lLmggICAgICAgfCAgMTUg
KysKIHBsYXQvZHJpdmVycy9naWMvZ2ljLXYyLmMgICAgICAgICAgICB8ICAgMiArLQogcGxhdC9k
cml2ZXJzL2luY2x1ZGUvZ2ljL2dpYy12Mi5oICAgIHwgICAyICstCiBwbGF0L2RyaXZlcnMvaW5j
bHVkZS9vZncvZ2ljX2ZkdC5oICAgfCAgIDIgKy0KIDcgZmlsZXMgY2hhbmdlZCwgMzY0IGluc2Vy
dGlvbnMoKyksIDg4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQvY29tbW9u
L2luY2x1ZGUvYXJtL2FybS90aW1lLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2NvbW1vbi9p
bmNsdWRlL2FybS9hcm02NC90aW1lLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2NvbW1vbi9p
bmNsdWRlL2FybS90aW1lLmgKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1k
ZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21h
aWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:33 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3NZ-0002vv-1v; Wed, 25 Sep 2019 09:14:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3NY-0002vW-1g
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:32 +0000
X-Inumbo-ID: e0a8a5a0-df74-11e9-962d-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id e0a8a5a0-df74-11e9-962d-12813bfff9fa;
 Wed, 25 Sep 2019 09:14:29 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A27E21570;
 Wed, 25 Sep 2019 02:14:28 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 070093F694;
 Wed, 25 Sep 2019 02:14:25 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:02 +0800
Message-Id: <20190925091407.182692-3-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190925091407.182692-1-justin.he@arm.com>
References: <20190925091407.182692-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v5 2/7] plat/common: Rename
 read_virtual_count to generic_timer_get_ticks
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Wei Chen <wei.chen@arm.com>, Jianyong Wu <jianyong.wu@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5jb20+CgpSZW5hbWUgdG8gZ2VuZXJpY190aW1l
cl9nZXRfdGlja3Mgd291bGQgYmUgZ29vZCBmb3IgdW5pZmluZwp0aGUgcHJlZml4IG9mIHRoZSBn
ZW5lcmljIHRpbWVyIGZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hl
bkBhcm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNv
bT4KU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2Nv
bW1vbi9hcm0vdGltZS5jIHwgMTAgKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0
aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGlt
ZS5jIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwppbmRleCAwMjE1OTMyLi44MTI3NDU0IDEwMDY0
NAotLS0gYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCisrKyBiL3BsYXQvY29tbW9uL2FybS90aW1l
LmMKQEAgLTE3OSw3ICsxNzksNyBAQCBlbmRub2ZyZXE6CiAgKiB0aGUgdHdvIHJlYWQgdmFsdWVz
LiBJZiBiaXRbMzJdIGlzIGRpZmZlcmVudCwga2VlcCB0aGUgZmlyc3QgdmFsdWUsCiAgKiBvdGhl
cndpc2Uga2VlcCB0aGUgc2Vjb25kIHZhbHVlLgogICovCi1zdGF0aWMgdWludDY0X3QgcmVhZF92
aXJ0dWFsX2NvdW50KHZvaWQpCitzdGF0aWMgdWludDY0X3QgZ2VuZXJpY190aW1lcl9nZXRfdGlj
a3Modm9pZCkKIHsKICAgICB1aW50NjRfdCB2YWxfMXN0LCB2YWxfMm5kOwogCkBAIC0xODgsNyAr
MTg4LDcgQEAgc3RhdGljIHVpbnQ2NF90IHJlYWRfdmlydHVhbF9jb3VudCh2b2lkKQogICAgIHJl
dHVybiAoKCh2YWxfMXN0IF4gdmFsXzJuZCkgPj4gMzIpICYgMSkgPyB2YWxfMXN0IDogdmFsXzJu
ZDsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90IHJlYWRfdmlydHVhbF9jb3VudCh2
b2lkKQorc3RhdGljIGlubGluZSB1aW50NjRfdCBnZW5lcmljX3RpbWVyX2dldF90aWNrcyh2b2lk
KQogewogCXJldHVybiBTWVNSRUdfUkVBRDY0KGNudHZjdF9lbDApOwogfQpAQCAtMjAwLDEzICsy
MDAsMTMgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCByZWFkX3ZpcnR1YWxfY291bnQodm9pZCkK
ICAqLwogc3RhdGljIF9fbnNlYyBnZW5lcmljX3RpbWVyX21vbm90b25pYyh2b2lkKQogewotCXJl
dHVybiAoX19uc2VjKXRpY2tzX3RvX25zKHJlYWRfdmlydHVhbF9jb3VudCgpIC0gYm9vdF90aWNr
cyk7CisJcmV0dXJuIChfX25zZWMpdGlja3NfdG9fbnMoZ2VuZXJpY190aW1lcl9nZXRfdGlja3Mo
KSAtIGJvb3RfdGlja3MpOwogfQogCiAvKgogICogUmV0dXJuIGVwb2NoIG9mZnNldCAod2FsbCB0
aW1lIG9mZnNldCB0byBtb25vdG9uaWMgY2xvY2sgc3RhcnQpLgogICovCi1zdGF0aWMgX191NjQg
IGdlbmVyaWNfdGltZXJfZXBvY2hvZmZzZXQodm9pZCkKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmlj
X3RpbWVyX2Vwb2Nob2Zmc2V0KHZvaWQpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDAsNyArMjQw
LDcgQEAgc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkKIAkgKiBNb25vdG9uaWMg
dGltZSBiZWdpbnMgYXQgYm9vdF90aWNrcyAoZmlyc3QgcmVhZCBvZiBjb3VudGVyCiAJICogYmVm
b3JlIGNhbGlicmF0aW9uKS4KIAkgKi8KLQlib290X3RpY2tzID0gcmVhZF92aXJ0dWFsX2NvdW50
KCk7CisJYm9vdF90aWNrcyA9IGdlbmVyaWNfdGltZXJfZ2V0X3RpY2tzKCk7CiAKIAlyZXR1cm4g
MDsKIH0KLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:34 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:34 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3Na-0002wT-3H; Wed, 25 Sep 2019 09:14:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3NY-0002vg-IK
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:32 +0000
X-Inumbo-ID: e25db278-df74-11e9-97fb-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id e25db278-df74-11e9-97fb-bc764e2007e4;
 Wed, 25 Sep 2019 09:14:31 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AEBA21596;
 Wed, 25 Sep 2019 02:14:31 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 14BE33F694;
 Wed, 25 Sep 2019 02:14:28 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:03 +0800
Message-Id: <20190925091407.182692-4-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190925091407.182692-1-justin.he@arm.com>
References: <20190925091407.182692-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v5 3/7] plat/common: Record
 boot_ticks at very beginning
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Wei Chen <wei.chen@arm.com>, Jianyong Wu <jianyong.wu@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHBvc2l0aW9uIG9mIHJlY29yZGluZyBib290X3RpY2tzIGlzIGEgbGl0dGxlIGxhdGVyLiBX
ZSBtb3ZlZAppdCB0byB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgcGxhdGZvcm0gY2FsbCB0aW1lciBp
bml0aWFsaXphdGlvbgpmdW5jdGlvbi4KClNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hl
bkBhcm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNv
bT4KU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2Nv
bW1vbi9hcm0vdGltZS5jIHwgMTEgKysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2Vy
dGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vYXJtL3Rp
bWUuYyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMKaW5kZXggODEyNzQ1NC4uOThiMzc2NCAxMDA2
NDQKLS0tIGEvcGxhdC9jb21tb24vYXJtL3RpbWUuYworKysgYi9wbGF0L2NvbW1vbi9hcm0vdGlt
ZS5jCkBAIC0yMzYsMTEgKzIzNiw2IEBAIHN0YXRpYyBpbnQgZ2VuZXJpY190aW1lcl9pbml0KHZv
aWQpCiAJVUtfQlVHT04oIXRpY2tfcGVyX25zKTsKIAogCW1heF9jb252ZXJ0X3RpY2tzID0gX19N
QVhfQ09OVkVSVF9TRUNTKmNvdW50ZXJfZnJlcTsKLQkvKgotCSAqIE1vbm90b25pYyB0aW1lIGJl
Z2lucyBhdCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNvdW50ZXIKLQkgKiBiZWZvcmUgY2Fs
aWJyYXRpb24pLgotCSAqLwotCWJvb3RfdGlja3MgPSBnZW5lcmljX3RpbWVyX2dldF90aWNrcygp
OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yODMsNiArMjc4LDEyIEBAIHZvaWQgdWtwbGF0X3RpbWVf
aW5pdCh2b2lkKQogewogCWludCByYzsKIAorCS8qCisJICogTW9ub3RvbmljIHRpbWUgYmVnaW5z
IGF0IGJvb3RfdGlja3MgKGZpcnN0IHJlYWQgb2YgY291bnRlcgorCSAqIGJlZm9yZSBjYWxpYnJh
dGlvbikuCisJICovCisJYm9vdF90aWNrcyA9IGdlbmVyaWNfdGltZXJfZ2V0X3RpY2tzKCk7CisK
IAlyYyA9IHVrcGxhdF9pcnFfcmVnaXN0ZXIoMCwgdGltZXJfaGFuZGxlciwgTlVMTCk7CiAJaWYg
KHJjIDwgMCkKIAkJVUtfQ1JBU0goIkZhaWxlZCB0byByZWdpc3RlciB0aW1lciBpbnRlcnJ1cHQg
aGFuZGxlclxuIik7Ci0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3Nf-0002y1-5V; Wed, 25 Sep 2019 09:14:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3Nd-0002xe-I3
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:37 +0000
X-Inumbo-ID: e438a1ac-df74-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id e438a1ac-df74-11e9-bf31-bc764e2007e4;
 Wed, 25 Sep 2019 09:14:35 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C8B051597;
 Wed, 25 Sep 2019 02:14:34 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 217623F694;
 Wed, 25 Sep 2019 02:14:31 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:04 +0800
Message-Id: <20190925091407.182692-5-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190925091407.182692-1-justin.he@arm.com>
References: <20190925091407.182692-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v5 4/7] plat/common: Share
 arch_timer fdt node among functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Wei Chen <wei.chen@arm.com>, Jianyong Wu <jianyong.wu@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2V2ZXJhbCBmdW5jdGlvbiB3aWxsIHVzZSB0aGUgYXJjaF90aW1lciBmZHQgbm9kZSB0byBnZXQg
aW5mb3JtYXRpb24KZnJvbSBkZXZpY2UgdHJlZS4gV2UgZmluZCBpdCBvbmNlLCBhbmQgc2hhcmUg
aXQgYW1vbmcgZnVuY3Rpb25zLiB0aGlzCndpbGwgYXZvaWQgZmluZCBhcmNoX3RpbWVyIGZkdCBl
dmVyeXdoZXJlLgoKU2lnbmVkLW9mZi1ieTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5jb20+ClNp
Z25lZC1vZmYtYnk6IEppYW55b25nIFd1IDxqaWFueW9uZy53dUBhcm0uY29tPgpTaWduZWQtb2Zm
LWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2FybS90aW1l
LmMgfCA1OSArKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmls
ZSBjaGFuZ2VkLCAyOSBpbnNlcnRpb25zKCspLCAzMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwppbmRleCA5
OGIzNzY0Li45NzUyMWM1IDEwMDY0NAotLS0gYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCisrKyBi
L3BsYXQvY29tbW9uL2FybS90aW1lLmMKQEAgLTMzLDYgKzMzLDcgQEAKICAqLwogI2luY2x1ZGUg
PHN0ZGxpYi5oPgogI2luY2x1ZGUgPGxpYmZkdC5oPgorI2luY2x1ZGUgPG9mdy9mZHQuaD4KICNp
bmNsdWRlIDx1ay9hc3NlcnQuaD4KICNpbmNsdWRlIDx1ay9wbGF0L3RpbWUuaD4KICNpbmNsdWRl
IDx1ay9wbGF0L2lycS5oPgpAQCAtNDQsNiArNDUsMTIgQEAKICAqIHBvcnRhYmxlIHdheSB0byBo
YW5kb3ZlciB0aGUgRFRCIGVudHJ5IHBvaW50IHRvIGNvbW1vbiBwbGF0Zm9ybSBjb2RlICovCiAj
aW5jbHVkZSA8a3ZtL2NvbmZpZy5oPgogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFyY2hf
dGltZXJfbGlzdFtdID0geworCSJhcm0sYXJtdjgtdGltZXIiLAorCSJhcm0sYXJtdjctdGltZXIi
LAorCU5VTEwKK307CisKIHN0YXRpYyB1aW50NjRfdCBib290X3RpY2tzOwogc3RhdGljIHVpbnQz
Ml90IGNvdW50ZXJfZnJlcTsKIApAQCAtMTMyLDQxICsxMzksMjYgQEAgc3RhdGljIHZvaWQgY2Fs
Y3VsYXRlX211bHRfc2hpZnQodWludDMyX3QgKm11bHQsIHVpbnQ4X3QgKnNoaWZ0LAogCSpzaGlm
dCA9IHNmdDsKIH0KIAotLyoKLSAqIE9uIGEgZmV3IHBsYXRmb3JtcyB0aGUgZnJlcXVlbmN5IGlz
IG5vdCBjb25maWd1cmVkIGNvcnJlY3RseQotICogYnkgdGhlIGZpcm13YXJlLiBBIHByb3BlcnR5
IGluIHRoZSBEVCAoY2xvY2stZnJlcXVlbmN5KSBoYXMKLSAqIGJlZW4gaW50cm9kdWNlZCB0byB3
b3JrYXJvdW5kIHRob3NlIGZpcm13YXJlLiBTbywgd2Ugd2lsbCB0cnkKLSAqIHRvIGdldCBjbG9j
ay1mcmVxdWVuY3kgZnJvbSBEVCBmaXJzdCwgaWYgZmFpbGVkIHdlIHdpbGwgcmVhZAotICogdGhl
IHJlZ2lzdGVyIGRpcmVjdGx5LgotICovCi1zdGF0aWMgdWludDMyX3QgZ2V0X2NvdW50ZXJfZnJl
cXVlbmN5KHZvaWQpCitzdGF0aWMgdWludDMyX3QgZ2VuZXJpY190aW1lcl9nZXRfZnJlcXVlbmN5
KGludCBmZHRfdGltZXIpCiB7Ci0JaW50IGZkdF9hcmNodGltZXIsIGxlbjsKKwlpbnQgbGVuOwog
CWNvbnN0IHVpbnQ2NF90ICpmZHRfZnJlcTsKIAotCS8qIFRyeSB0byBmaW5kIGFybSxhcm12OC10
aW1lciBmaXJzdCAqLwotCWZkdF9hcmNodGltZXIgPSBmZHRfbm9kZV9vZmZzZXRfYnlfY29tcGF0
aWJsZShfbGlia3ZtcGxhdF9jZmcuZHRiLAotCQkJCQkJLTEsICJhcm0sYXJtdjgtdGltZXIiKTsK
LQkvKiBJZiBmYWlsZWQsIHRyeSB0byBmaW5kIGFybSxhcm12Ny10aW1lciAqLwotCWlmIChmZHRf
YXJjaHRpbWVyIDwgMCkKLQkJZmR0X2FyY2h0aW1lciA9IGZkdF9ub2RlX29mZnNldF9ieV9jb21w
YXRpYmxlKAotCQkJCQkJCV9saWJrdm1wbGF0X2NmZy5kdGIsCi0JCQkJCQkJLTEsICJhcm0sYXJt
djctdGltZXIiKTsKLQkvKiBEVCBkb2Vzbid0IHByb3ZpZGUgYXJjaCB0aW1lciBpbmZvcm1hdGlv
biAqLwotCWlmIChmZHRfYXJjaHRpbWVyIDwgMCkKLQkJZ290byBlbmRub2ZyZXE7Ci0KKwkvKgor
CSAqIE9uIGEgZmV3IHBsYXRmb3JtcyB0aGUgZnJlcXVlbmN5IGlzIG5vdCBjb25maWd1cmVkIGNv
cnJlY3RseQorCSAqIGJ5IHRoZSBmaXJtd2FyZS4gQSBwcm9wZXJ0eSBpbiB0aGUgRFQgKGNsb2Nr
LWZyZXF1ZW5jeSkgaGFzCisJICogYmVlbiBpbnRyb2R1Y2VkIHRvIHdvcmthcm91bmQgdGhvc2Ug
ZmlybXdhcmUuCisJICovCiAJZmR0X2ZyZXEgPSBmZHRfZ2V0cHJvcChfbGlia3ZtcGxhdF9jZmcu
ZHRiLAotCQkJZmR0X2FyY2h0aW1lciwgImNsb2NrLWZyZXF1ZW5jeSIsICZsZW4pOworCQkJZmR0
X3RpbWVyLCAiY2xvY2stZnJlcXVlbmN5IiwgJmxlbik7CiAJaWYgKCFmZHRfZnJlcSB8fCAobGVu
IDw9IDApKSB7CiAJCXVrX3ByX2luZm8oIk5vIGNsb2NrLWZyZXF1ZW5jeSBmb3VuZCwgcmVhZGlu
ZyBmcm9tIHJlZ2lzdGVyIGRpcmVjdGx5LlxuIik7Ci0JCWdvdG8gZW5kbm9mcmVxOworCisJCS8q
IE5vIHdvcmthcm91bmQsIGdldCBmcm9tIHJlZ2lzdGVyIGRpcmVjdGx5ICovCisJCXJldHVybiBT
WVNSRUdfUkVBRDMyKGNudGZycV9lbDApOwogCX0KIAogCXJldHVybiBmZHQzMl90b19jcHUoZmR0
X2ZyZXFbMF0pOwotCi1lbmRub2ZyZXE6Ci0JcmV0dXJuIFNZU1JFR19SRUFEMzIoY250ZnJxX2Vs
MCk7CiB9CiAKICNpZmRlZiBDT05GSUdfQVJNNjRfRVJSQVRVTV84NTg5MjEKQEAgLTIxMSw5ICsy
MDMsMTAgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyaWNfdGltZXJfZXBvY2hvZmZzZXQodm9pZCkK
IAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkKK3N0
YXRpYyBpbnQgZ2VuZXJpY190aW1lcl9pbml0KGludCBmZHRfdGltZXIpCiB7Ci0JY291bnRlcl9m
cmVxID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KCk7CisJLyogR2V0IGNvdW50ZXIgZnJlcXVlbmN5
IGZyb20gRFRCIG9yIHJlZ2lzdGVyICovCisJY291bnRlcl9mcmVxID0gZ2VuZXJpY190aW1lcl9n
ZXRfZnJlcXVlbmN5KGZkdF90aW1lcik7CiAKIAkvKgogCSAqIENhbGN1bGF0ZSB0aGUgc2hpZnQg
ZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIgZm9yCkBAIC0yNzYsNyArMjY5LDcgQEAgc3Rh
dGljIGludCB0aW1lcl9oYW5kbGVyKHZvaWQgKmFyZyBfX3VudXNlZCkKIC8qIG11c3QgYmUgY2Fs
bGVkIGJlZm9yZSBpbnRlcnJ1cHRzIGFyZSBlbmFibGVkICovCiB2b2lkIHVrcGxhdF90aW1lX2lu
aXQodm9pZCkKIHsKLQlpbnQgcmM7CisJaW50IHJjLCBmZHRfdGltZXI7CiAKIAkvKgogCSAqIE1v
bm90b25pYyB0aW1lIGJlZ2lucyBhdCBib290X3RpY2tzIChmaXJzdCByZWFkIG9mIGNvdW50ZXIK
QEAgLTI4NCwxMSArMjc3LDE3IEBAIHZvaWQgdWtwbGF0X3RpbWVfaW5pdCh2b2lkKQogCSAqLwog
CWJvb3RfdGlja3MgPSBnZW5lcmljX3RpbWVyX2dldF90aWNrcygpOwogCisJLyogQ3VycmVudGx5
LCB3ZSBvbmx5IHN1cHBvcnQgMSB0aW1lciBwZXIgc3lzdGVtICovCisJZmR0X3RpbWVyID0gZmR0
X25vZGVfb2Zmc2V0X2J5X2NvbXBhdGlibGVfbGlzdChfbGlia3ZtcGxhdF9jZmcuZHRiLAorCQkJ
CS0xLCBhcmNoX3RpbWVyX2xpc3QpOworCWlmIChmZHRfdGltZXIgPCAwKQorCQlVS19DUkFTSCgi
Q291bGQgbm90IGZpbmQgYXJjaCB0aW1lciFcbiIpOworCiAJcmMgPSB1a3BsYXRfaXJxX3JlZ2lz
dGVyKDAsIHRpbWVyX2hhbmRsZXIsIE5VTEwpOwogCWlmIChyYyA8IDApCiAJCVVLX0NSQVNIKCJG
YWlsZWQgdG8gcmVnaXN0ZXIgdGltZXIgaW50ZXJydXB0IGhhbmRsZXJcbiIpOwogCi0JcmMgPSBn
ZW5lcmljX3RpbWVyX2luaXQoKTsKKwlyYyA9IGdlbmVyaWNfdGltZXJfaW5pdChmZHRfdGltZXIp
OwogCWlmIChyYyA8IDApCiAJCVVLX0NSQVNIKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBwbGF0Zm9y
bSB0aW1lXG4iKTsKIH0KLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1h
bi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3Nj-0002zF-72; Wed, 25 Sep 2019 09:14:43 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3Nh-0002yr-Qb
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:41 +0000
X-Inumbo-ID: e7d5c100-df74-11e9-962d-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id e7d5c100-df74-11e9-962d-12813bfff9fa;
 Wed, 25 Sep 2019 09:14:41 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D8BAA1597;
 Wed, 25 Sep 2019 02:14:40 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 47F1E3F694;
 Wed, 25 Sep 2019 02:14:38 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:06 +0800
Message-Id: <20190925091407.182692-7-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190925091407.182692-1-justin.he@arm.com>
References: <20190925091407.182692-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v5 6/7] plat/common: Implement
 generic_timer_cpu_block_until
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Wei Chen <wei.chen@arm.com>, Jianyong Wu <jianyong.wu@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgd2hlbiBzeXN0ZW0gZW50ZXIgc2xlZXAgYW5kIG5l
ZWQgd2FrZXVwCmluIGEgc3BlY2lmaWMgdGltZS4gRm9yIG5zX3RvX3RpY2tzIHByZWNpc2lvbiwg
d2UgbGltaXRlZCB0aGUgbWF4CnNsZWVwIHRpbWUgdG8gMzYwMCBzZWNvbmRzLgoKU2lnbmVkLW9m
Zi1ieTogV2VpIENoZW4gPHdlaS5jaGVuQGFybS5jb20+ClNpZ25lZC1vZmYtYnk6IEppYW55b25n
IFd1IDxqaWFueW9uZy53dUBhcm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5o
ZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2FybS90aW1lLmMgfCA0NSArKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzOSBpbnNlcnRp
b25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FybS90aW1l
LmMgYi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCmluZGV4IGFhOWJkNDIuLjhmMjc4Y2IgMTAwNjQ0
Ci0tLSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMKKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUu
YwpAQCAtMjU2LDYgKzI1Niw0MyBAQCBzdGF0aWMgdWludDY0X3QgZ2VuZXJpY190aW1lcl9lcG9j
aG9mZnNldCh2b2lkKQogCXJldHVybiAwOwogfQogCisvKgorICogUmV0dXJucyBlYXJseSBpZiBh
bnkgaW50ZXJydXB0cyBhcmUgc2VydmljZWQsIG9yIGlmIHRoZSByZXF1ZXN0ZWQgZGVsYXkgaXMK
KyAqIHRvbyBzaG9ydC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLCB3
aWxsIGVuYWJsZSBpbnRlcnJ1cHRzCisgKiAiYXRvbWljYWxseSIgZHVyaW5nIGlkbGUgbG9vcC4K
KyAqCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIG9ubHkgZnJvbSB0aGUgc2NoZWR1
bGVyLiBJdCB3aWxsIHNjcmV3CisgKiB5b3VyIHN5c3RlbSBpZiB5b3UgZG8gb3RoZXJ3aXNlLiBB
bmQsIHRoZXJlIGlzIG5vIHJlYXNvbiB5b3UKKyAqIGFjdHVhbGx5IHdhbnQgdG8gdXNlIGl0IGFu
eXdoZXJlIGVsc2UuIFRISVMgSVMgTk9UIEEgWUlFTEQgb3IgYW55CisgKiBraW5kIG9mIG11dGV4
X2xvY2suIEl0IHdpbGwgc2ltcGx5IGhhbHQgdGhlIGNwdSwgbm90IGFsbG93aW5nIGFueQorICog
b3RoZXIgdGhyZWFkIHRvIGV4ZWN1dGUuCisgKi8KK3N0YXRpYyB2b2lkIGdlbmVyaWNfdGltZXJf
Y3B1X2Jsb2NrX3VudGlsKHVpbnQ2NF90IHVudGlsX25zKQoreworCXVpbnQ2NF90IG5vd19ucywg
dW50aWxfdGlja3M7CisKKwlVS19BU1NFUlQodWtwbGF0X2xjcHVfaXJxc19kaXNhYmxlZCgpKTsK
KworCS8qIFJlY29yZCBjdXJyZW50IG5zIGFuZCB1bnRpbF90aWNrcyBmb3IgdGltZXIgKi8KKwlu
b3dfbnMgPSB1a3BsYXRfbW9ub3RvbmljX2Nsb2NrKCk7CisJdW50aWxfdGlja3MgPSBnZW5lcmlj
X3RpbWVyX2dldF90aWNrcygpCisJCQkJKyBuc190b190aWNrcyh1bnRpbF9ucyAtIG5vd19ucyk7
CisKKwlpZiAobm93X25zIDwgdW50aWxfbnMpIHsKKwkJZ2VuZXJpY190aW1lcl91cGRhdGVfY29t
cGFyZSh1bnRpbF90aWNrcyk7CisJCWdlbmVyaWNfdGltZXJfZW5hYmxlKCk7CisJCWdlbmVyaWNf
dGltZXJfdW5tYXNrX2lycSgpOworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygid2ZpIik7CisJCWdl
bmVyaWNfdGltZXJfbWFza19pcnEoKTsKKworCQkvKiBHaXZlIHRoZSBJUlEgaGFuZGxlciBhIGNo
YW5jZSB0byBoYW5kbGUgd2hhdGV2ZXIgd29rZQorCQkgKiB1cyB1cAorCQkgKi8KKwkJdWtwbGF0
X2xjcHVfZW5hYmxlX2lycSgpOworCQl1a3BsYXRfbGNwdV9kaXNhYmxlX2lycSgpOworCX0KK30K
Kwogc3RhdGljIGludCBnZW5lcmljX3RpbWVyX2luaXQoaW50IGZkdF90aW1lcikKIHsKIAkvKiBH
ZXQgY291bnRlciBmcmVxdWVuY3kgZnJvbSBEVEIgb3IgcmVnaXN0ZXIgKi8KQEAgLTI5MCw3ICsz
MjcsNyBAQCBzdGF0aWMgaW50IGdlbmVyaWNfdGltZXJfaXJxX2hhbmRsZXIodm9pZCAqYXJnIF9f
dW51c2VkKQogewogCS8qCiAJICogV2UganVzdCBtYXNrIHRoZSBJUlEgaGVyZSwgdGhlIHNjaGVk
dWxlciB3aWxsIGNhbGwKLQkgKiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaywgYW5kIHRoZW4gdW5t
YXNrIHRoZSBJUlEuCisJICogZ2VuZXJpY190aW1lcl9jcHVfYmxvY2tfdW50aWwsIGFuZCB0aGVu
IHVubWFzayB0aGUgSVJRLgogCSAqLwogCWdlbmVyaWNfdGltZXJfbWFza19pcnEoKTsKIApAQCAt
MzAyLDEyICszMzksOCBAQCB1bnNpZ25lZCBsb25nIHNjaGVkX2hhdmVfcGVuZGluZ19ldmVudHM7
CiAKIHZvaWQgdGltZV9ibG9ja191bnRpbChfX3Nuc2VjIHVudGlsKQogewotCS8qCi0JICogVE9E
TzoKLQkgKiBBcyB3ZSBoYXZlbid0IHN1cHBvcnQgaW50ZXJydXB0IG9uIEFybSwgc28gd2UganVz
dAotCSAqIHVzZSBidXN5IHBvbGxpbmcgZm9yIG5vdy4KLQkgKi8KIAl3aGlsZSAoKF9fc25zZWMp
IHVrcGxhdF9tb25vdG9uaWNfY2xvY2soKSA8IHVudGlsKSB7CisJCWdlbmVyaWNfdGltZXJfY3B1
X2Jsb2NrX3VudGlsKHVudGlsKTsKIAkJaWYgKF9fdWtfdGVzdF9hbmRfY2xlYXJfYml0KDAsICZz
Y2hlZF9oYXZlX3BlbmRpbmdfZXZlbnRzKSkKIAkJCWJyZWFrOwogCX0KLS0gCjIuMTcuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:46 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3Nm-00030L-8d; Wed, 25 Sep 2019 09:14:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3Nk-0002zy-Uo
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:44 +0000
X-Inumbo-ID: e96ca380-df74-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id e96ca380-df74-11e9-bf31-bc764e2007e4;
 Wed, 25 Sep 2019 09:14:43 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6B8F915AD;
 Wed, 25 Sep 2019 02:14:43 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 4A9333F694;
 Wed, 25 Sep 2019 02:14:41 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:07 +0800
Message-Id: <20190925091407.182692-8-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190925091407.182692-1-justin.he@arm.com>
References: <20190925091407.182692-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v5 7/7] plat/common: Split arch
 specific codes from time.c to arm{, 64}/time.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIHByZXZpb3VzIHRpbWUuYyBpcyBmb3IgYXJtNjQgb25seSwgc28gc3BsaXQgYXJjaCBzcGVj
aWZpYyBjb2RlcyBmcm9tCnRpbWUuYyB0byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMuCgpObyBmdW5j
dGlvbmFsIGNoYW5nZXMgaW4gdGhpcyBwYXRjaC4KClNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVz
dGluLmhlQGFybS5jb20+Ci0tLQogcGxhdC9jb21tb24vYXJtL3RpbWUuYyAgICAgICAgICAgICAg
IHwgNzIgKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogcGxhdC9jb21tb24vaW5jbHVkZS9h
cm0vYXJtL3RpbWUuaCAgIHwgNDMgKysrKysrKysrKysrKysrKysKIHBsYXQvY29tbW9uL2luY2x1
ZGUvYXJtL2FybTY0L3RpbWUuaCB8IDQ1ICsrKysrKysrKysrKysrKysrCiBwbGF0L2NvbW1vbi9p
bmNsdWRlL2FybS90aW1lLmggICAgICAgfCAxNSArKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTM1
IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQv
Y29tbW9uL2luY2x1ZGUvYXJtL2FybS90aW1lLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2Nv
bW1vbi9pbmNsdWRlL2FybS9hcm02NC90aW1lLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2Nv
bW1vbi9pbmNsdWRlL2FybS90aW1lLmgKCmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9hcm0vdGlt
ZS5jIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwppbmRleCA4ZjI3OGNiLi40NmVmMzBlIDEwMDY0
NAotLS0gYS9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCisrKyBiL3BsYXQvY29tbW9uL2FybS90aW1l
LmMKQEAgLTQzLDExICs0Myw3IEBACiAjaW5jbHVkZSA8b2Z3L2dpY19mZHQuaD4KICNpbmNsdWRl
IDxpcnEuaD4KICNpbmNsdWRlIDxnaWMvZ2ljLXYyLmg+Ci0KLS8qIEJpdHMgZGVmaW5pdGlvbiBv
ZiBjbnR2X2N0bF9lbDAgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgR1RfVElNRVJfRU5BQkxFICAgICAg
ICAweDAxCi0jZGVmaW5lIEdUX1RJTUVSX01BU0tfSVJRICAgICAgMHgwMgotI2RlZmluZSBHVF9U
SU1FUl9JUlFfU1RBVFVTICAgIDB4MDQKKyNpbmNsdWRlIDxhcm0vdGltZS5oPgogCiAvKiBUT0RP
OiBGb3Igbm93IHRoaXMgZmlsZSBpcyBLVk0gZGVwZW5kZW50LiBBcyBzb29uIGFzIHdlIGhhdmUg
bW9yZQogICogQXJtIHBsYXRmb3JtcyB0aGF0IGFyZSB1c2luZyB0aGlzIGZpbGUsIHdlIG5lZWQg
dG8gaW50cm9kdWNlIGEKQEAgLTE1MCw4ICsxNDYsNyBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVf
bXVsdF9zaGlmdCh1aW50MzJfdCAqbXVsdCwgdWludDhfdCAqc2hpZnQsCiAKIHN0YXRpYyBpbmxp
bmUgdm9pZCBnZW5lcmljX3RpbWVyX2VuYWJsZSh2b2lkKQogewotCVNZU1JFR19XUklURTMyKGNu
dHZfY3RsX2VsMCwKLQkJICAgICAgIFNZU1JFR19SRUFEMzIoY250dl9jdGxfZWwwKSB8IEdUX1RJ
TUVSX0VOQUJMRSk7CisJc2V0X2VsMChjbnR2X2N0bCwgZ2V0X2VsMChjbnR2X2N0bCkgfCBHVF9U
SU1FUl9FTkFCTEUpOwogCiAJLyogRW5zdXJlIHRoZSB3cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMg
dmlzaWJsZSAqLwogCWlzYigpOwpAQCAtMTU5LDggKzE1NCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBnZW5lcmljX3RpbWVyX2VuYWJsZSh2b2lkKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJp
Y190aW1lcl9kaXNhYmxlKHZvaWQpCiB7Ci0JU1lTUkVHX1dSSVRFMzIoY250dl9jdGxfZWwwLAot
CQlTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkgJiB+R1RfVElNRVJfRU5BQkxFKTsKKwlzZXRf
ZWwwKGNudHZfY3RsLCBnZXRfZWwwKGNudHZfY3RsKSAmIH5HVF9USU1FUl9FTkFCTEUpOwogCiAJ
LyogRW5zdXJlIHRoZSB3cml0ZSBvZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAqLwogCWlzYigp
OwpAQCAtMTY4LDggKzE2Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX3RpbWVyX2Rp
c2FibGUodm9pZCkKIAogc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfbWFza19pcnEo
dm9pZCkKIHsKLQlTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsCi0JCVNZU1JFR19SRUFEMzIo
Y250dl9jdGxfZWwwKSB8IEdUX1RJTUVSX01BU0tfSVJRKTsKKwlzZXRfZWwwKGNudHZfY3RsLCBn
ZXRfZWwwKGNudHZfY3RsKSB8IEdUX1RJTUVSX01BU0tfSVJRKTsKIAogCS8qIEVuc3VyZSB0aGUg
d3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KIAlpc2IoKTsKQEAgLTE3Nyw4ICsx
NzAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl9tYXNrX2lycSh2b2lkKQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl91bm1hc2tfaXJxKHZvaWQpCiB7Ci0J
U1lTUkVHX1dSSVRFMzIoY250dl9jdGxfZWwwLAotCQlTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2Vs
MCkgJiAofkdUX1RJTUVSX01BU0tfSVJRKSk7CisJc2V0X2VsMChjbnR2X2N0bCwgZ2V0X2VsMChj
bnR2X2N0bCkgJiB+R1RfVElNRVJfTUFTS19JUlEpOwogCiAJLyogRW5zdXJlIHRoZSB3cml0ZSBv
ZiBzeXMgcmVnaXN0ZXIgaXMgdmlzaWJsZSAqLwogCWlzYigpOwpAQCAtMTg2LDEyICsxNzgsMzcg
QEAgc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfdW5tYXNrX2lycSh2b2lkKQogCiBz
dGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY190aW1lcl91cGRhdGVfY29tcGFyZSh1aW50NjRfdCBu
ZXdfdmFsKQogewotCVNZU1JFR19XUklURTY0KGNudHZfY3ZhbF9lbDAsIG5ld192YWwpOworCXNl
dF9lbDAoY250dl9jdmFsLCBuZXdfdmFsKTsKIAogCS8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lz
IHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KIAlpc2IoKTsKIH0KIAorI2lmZGVmIENPTkZJR19BUk02
NF9FUlJBVFVNXzg1ODkyMQorLyoKKyAqIFRoZSBlcnJhdGEgIzg1ODkyMSBkZXNjcmliZXMgdGhh
dCBDb3J0ZXgtQTczIChyMHAwIC0gcjBwMikgY291bnRlcgorICogcmVhZCBjYW4gcmV0dXJuIGEg
d3JvbmcgdmFsdWUgd2hlbiB0aGUgY291bnRlciBjcm9zc2VzIGEgMzJiaXQgYm91bmRhcnkuCisg
KiBCdXQgbmV3ZXIgQ29ydGV4LUE3MyBhcmUgbm90IGFmZmVjdGVkLgorICoKKyAqIFRoZSB3b3Jr
YXJvdW5kIGludm9sdmVzIHBlcmZvcm1pbmcgdGhlIHJlYWQgdHdpY2UsIGNvbXBhcmUgYml0WzMy
XSBvZgorICogdGhlIHR3byByZWFkIHZhbHVlcy4gSWYgYml0WzMyXSBpcyBkaWZmZXJlbnQsIGtl
ZXAgdGhlIGZpcnN0IHZhbHVlLAorICogb3RoZXJ3aXNlIGtlZXAgdGhlIHNlY29uZCB2YWx1ZS4K
KyAqLworc3RhdGljIHVpbnQ2NF90IGdlbmVyaWNfdGltZXJfZ2V0X3RpY2tzKHZvaWQpCit7CisJ
dWludDY0X3QgdmFsXzFzdCwgdmFsXzJuZDsKKworCXZhbF8xc3QgPSBnZXRfZWwwKGNudHZjdCk7
CisJdmFsXzJuZCA9IGdldF9lbDAoY250dmN0KTsKKwlyZXR1cm4gKCgodmFsXzFzdCBeIHZhbF8y
bmQpID4+IDMyKSAmIDEpID8gdmFsXzFzdCA6IHZhbF8ybmQ7Cit9CisjZWxzZQorc3RhdGljIGlu
bGluZSB1aW50NjRfdCBnZW5lcmljX3RpbWVyX2dldF90aWNrcyh2b2lkKQoreworCXJldHVybiBn
ZXRfZWwwKGNudHZjdCk7Cit9CisjZW5kaWYKKwogc3RhdGljIHVpbnQzMl90IGdlbmVyaWNfdGlt
ZXJfZ2V0X2ZyZXF1ZW5jeShpbnQgZmR0X3RpbWVyKQogewogCWludCBsZW47CkBAIC0yMDgsMzcg
KzIyNSwxMiBAQCBzdGF0aWMgdWludDMyX3QgZ2VuZXJpY190aW1lcl9nZXRfZnJlcXVlbmN5KGlu
dCBmZHRfdGltZXIpCiAJCXVrX3ByX2luZm8oIk5vIGNsb2NrLWZyZXF1ZW5jeSBmb3VuZCwgcmVh
ZGluZyBmcm9tIHJlZ2lzdGVyIGRpcmVjdGx5LlxuIik7CiAKIAkJLyogTm8gd29ya2Fyb3VuZCwg
Z2V0IGZyb20gcmVnaXN0ZXIgZGlyZWN0bHkgKi8KLQkJcmV0dXJuIFNZU1JFR19SRUFEMzIoY250
ZnJxX2VsMCk7CisJCXJldHVybiBnZXRfZWwwKGNudGZycSk7CiAJfQogCiAJcmV0dXJuIGZkdDMy
X3RvX2NwdShmZHRfZnJlcVswXSk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQVJNNjRfRVJSQVRVTV84
NTg5MjEKLS8qCi0gKiBUaGUgZXJyYXRhICM4NTg5MjEgZGVzY3JpYmVzIHRoYXQgQ29ydGV4LUE3
MyAocjBwMCAtIHIwcDIpIGNvdW50ZXIKLSAqIHJlYWQgY2FuIHJldHVybiBhIHdyb25nIHZhbHVl
IHdoZW4gdGhlIGNvdW50ZXIgY3Jvc3NlcyBhIDMyYml0IGJvdW5kYXJ5LgotICogQnV0IG5ld2Vy
IENvcnRleC1BNzMgYXJlIG5vdCBhZmZlY3RlZC4KLSAqCi0gKiBUaGUgd29ya2Fyb3VuZCBpbnZv
bHZlcyBwZXJmb3JtaW5nIHRoZSByZWFkIHR3aWNlLCBjb21wYXJlIGJpdFszMl0gb2YKLSAqIHRo
ZSB0d28gcmVhZCB2YWx1ZXMuIElmIGJpdFszMl0gaXMgZGlmZmVyZW50LCBrZWVwIHRoZSBmaXJz
dCB2YWx1ZSwKLSAqIG90aGVyd2lzZSBrZWVwIHRoZSBzZWNvbmQgdmFsdWUuCi0gKi8KLXN0YXRp
YyB1aW50NjRfdCBnZW5lcmljX3RpbWVyX2dldF90aWNrcyh2b2lkKQotewotICAgIHVpbnQ2NF90
IHZhbF8xc3QsIHZhbF8ybmQ7Ci0KLSAgICB2YWxfMXN0ID0gU1lTUkVHX1JFQUQ2NChjbnR2Y3Rf
ZWwwKTsKLSAgICB2YWxfMm5kID0gU1lTUkVHX1JFQUQ2NChjbnR2Y3RfZWwwKTsKLSAgICByZXR1
cm4gKCgodmFsXzFzdCBeIHZhbF8ybmQpID4+IDMyKSAmIDEpID8gdmFsXzFzdCA6IHZhbF8ybmQ7
Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB1aW50NjRfdCBnZW5lcmljX3RpbWVyX2dldF90aWNr
cyh2b2lkKQotewotCXJldHVybiBTWVNSRUdfUkVBRDY0KGNudHZjdF9lbDApOwotfQotI2VuZGlm
Ci0KIC8qCiAgKiBtb25vdG9uaWNfY2xvY2soKTogcmV0dXJucyAjIG9mIG5hbm9zZWNvbmRzIHBh
c3NlZCBzaW5jZQogICogZ2VuZXJpY190aW1lcl90aW1lX2luaXQoKQpkaWZmIC0tZ2l0IGEvcGxh
dC9jb21tb24vaW5jbHVkZS9hcm0vYXJtL3RpbWUuaCBiL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJt
L2FybS90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFmZjdiZgot
LS0gL2Rldi9udWxsCisrKyBiL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybS90aW1lLmgKQEAg
LTAsMCArMSw0MyBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAq
LworLyoKKyAqIEF1dGhvcnM6IFdlaSBDaGVuIDxXZWkuQ2hlbkBhcm0uY29tPgorICoKKyAqIENv
cHlyaWdodCAoYykgMjAxOSwgQXJtIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBU
SElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgor
ICovCisjaWZuZGVmIFVLX1BMQVRfQ09NTU9OX0FSTV9USU1FX0gKKyNkZWZpbmUgVUtfUExBVF9D
T01NT05fQVJNX1RJTUVfSAorCisjZGVmaW5lCWdldF9lbDAoeCkJY3AxNV8jIyB4ICMjX2dldCgp
CisjZGVmaW5lCWdldF9lbDEoeCkJY3AxNV8jIyB4ICMjX2dldCgpCisjZGVmaW5lCXNldF9lbDAo
eCwgdmFsKQljcDE1XyMjIHggIyNfc2V0KHZhbCkKKyNkZWZpbmUJc2V0X2VsMSh4LCB2YWwpCWNw
MTVfIyMgeCAjI19zZXQodmFsKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24v
aW5jbHVkZS9hcm0vYXJtNjQvdGltZS5oIGIvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQv
dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YzdlN2EKLS0tIC9k
ZXYvbnVsbAorKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90aW1lLmgKQEAgLTAs
MCArMSw0NSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLwor
LyoKKyAqIEF1dGhvcnM6IFdlaSBDaGVuIDxXZWkuQ2hlbkBhcm0uY29tPgorICoKKyAqIENvcHly
aWdodCAoYykgMjAxOSwgQXJtIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
ICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElT
IEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICov
CisjaWZuZGVmIFVLX1BMQVRfQ09NTU9OX0FSTTY0X1RJTUVfSAorI2RlZmluZSBVS19QTEFUX0NP
TU1PTl9BUk02NF9USU1FX0gKKworI2luY2x1ZGUgPHVrL3BsYXQvbGNwdS5oPgorI2luY2x1ZGUg
PGNwdS5oPgorCisjZGVmaW5lCWdldF9lbDAoeCkJU1lTUkVHX1JFQUQ2NCh4ICMjX2VsMCkKKyNk
ZWZpbmUJZ2V0X2VsMSh4KQlTWVNSRUdfUkVBRDY0KHggIyNfZWwxKQorI2RlZmluZQlzZXRfZWww
KHgsIHZhbCkJU1lTUkVHX1dSSVRFNjQoeCAjI19lbDAsIHZhbCkKKyNkZWZpbmUJc2V0X2VsMSh4
LCB2YWwpCVNZU1JFR19XUklURTY0KHggIyNfZWwxLCB2YWwpCisKKyNlbmRpZiAvKiBVS19QTEFU
X0NPTU1PTl9BUk02NF9USU1FX0ggKi8KZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2luY2x1ZGUv
YXJtL3RpbWUuaCBiL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJtL3RpbWUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWVkN2I5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9j
b21tb24vaW5jbHVkZS9hcm0vdGltZS5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX19BUk1f
QVJNX1RJTUVfSAorI2RlZmluZSBfX0FSTV9BUk1fVElNRV9ICisKKy8qIEJpdHMgZGVmaW5pdGlv
biBvZiBjbnR2X2N0bCByZWdpc3RlciAqLworI2RlZmluZSBHVF9USU1FUl9FTkFCTEUgICAgICAg
IDB4MDEKKyNkZWZpbmUgR1RfVElNRVJfTUFTS19JUlEgICAgICAweDAyCisjZGVmaW5lIEdUX1RJ
TUVSX0lSUV9TVEFUVVMgICAgMHgwNAorCisjaWZkZWYgQ09ORklHX0FSQ0hfQVJNXzY0CisjaW5j
bHVkZSA8YXJtL2FybTY0L3RpbWUuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXJtL2FybS90aW1lLmg+
CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfQVJNXzY0ICovCisKKyNlbmRpZiAvKiBfX0FSTV9BUk1f
VElNRV9IICovCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:14:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:14:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3Ns-00031v-Bd; Wed, 25 Sep 2019 09:14:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=665h=XU=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iD3Nq-00031d-Pk
 for minios-devel@lists.xenproject.org; Wed, 25 Sep 2019 09:14:50 +0000
X-Inumbo-ID: e60c4100-df74-11e9-962d-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id e60c4100-df74-11e9-962d-12813bfff9fa;
 Wed, 25 Sep 2019 09:14:38 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D03381596;
 Wed, 25 Sep 2019 02:14:37 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 43E463F694;
 Wed, 25 Sep 2019 02:14:35 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org,
	Santiago.Pagani@neclab.eu
Date: Wed, 25 Sep 2019 17:14:05 +0800
Message-Id: <20190925091407.182692-6-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190925091407.182692-1-justin.he@arm.com>
References: <20190925091407.182692-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v5 5/7] plat/common: Find and
 register IRQ for arch_timer
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Wei Chen <wei.chen@arm.com>, Jianyong Wu <jianyong.wu@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Simon Kuenzer <simon.kuenzer@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Q3VycmVudGx5LCBpbiB1bmlrcmFmdCwgdGhlIHRpbWVyIGludGVycnVwdCBoYXNuJ3QgYmVlbgp1
c2VkIHRvIHVwZGF0ZSB0aWNrcyBwZXJpb2RpY2FsbHkuIFdlIGp1c3QgbWFzayBpdCBpbgpJUlEg
aGFuZGxlciwgYW5kIHdhaXQgZm9yIHNsZWVwIGZ1bmN0aW9uIHRvIHNldCBuZXcKbWF0Y2ggY291
bnRlciBhbmQgdW5tYXNrIElSUS4KClNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWkuY2hlbkBh
cm0uY29tPgpTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VAYXJtLmNvbT4K
U2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2NvbW1v
bi9hcm0vdGltZS5jICAgICAgICAgICAgIHwgMTEyICsrKysrKysrKysrKysrKysrKysrKysrKy0t
LS0tCiBwbGF0L2RyaXZlcnMvZ2ljL2dpYy12Mi5jICAgICAgICAgIHwgICAyICstCiBwbGF0L2Ry
aXZlcnMvaW5jbHVkZS9naWMvZ2ljLXYyLmggIHwgICAyICstCiBwbGF0L2RyaXZlcnMvaW5jbHVk
ZS9vZncvZ2ljX2ZkdC5oIHwgICAyICstCiA0IGZpbGVzIGNoYW5nZWQsIDk5IGluc2VydGlvbnMo
KyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMg
Yi9wbGF0L2NvbW1vbi9hcm0vdGltZS5jCmluZGV4IDk3NTIxYzUuLmFhOWJkNDIgMTAwNjQ0Ci0t
LSBhL3BsYXQvY29tbW9uL2FybS90aW1lLmMKKysrIGIvcGxhdC9jb21tb24vYXJtL3RpbWUuYwpA
QCAtMzYsOSArMzYsMTggQEAKICNpbmNsdWRlIDxvZncvZmR0Lmg+CiAjaW5jbHVkZSA8dWsvYXNz
ZXJ0Lmg+CiAjaW5jbHVkZSA8dWsvcGxhdC90aW1lLmg+CisjaW5jbHVkZSA8dWsvcGxhdC9sY3B1
Lmg+CiAjaW5jbHVkZSA8dWsvcGxhdC9pcnEuaD4KICNpbmNsdWRlIDx1ay9iaXRvcHMuaD4KICNp
bmNsdWRlIDxjcHUuaD4KKyNpbmNsdWRlIDxvZncvZ2ljX2ZkdC5oPgorI2luY2x1ZGUgPGlycS5o
PgorI2luY2x1ZGUgPGdpYy9naWMtdjIuaD4KKworLyogQml0cyBkZWZpbml0aW9uIG9mIGNudHZf
Y3RsX2VsMCByZWdpc3RlciAqLworI2RlZmluZSBHVF9USU1FUl9FTkFCTEUgICAgICAgIDB4MDEK
KyNkZWZpbmUgR1RfVElNRVJfTUFTS19JUlEgICAgICAweDAyCisjZGVmaW5lIEdUX1RJTUVSX0lS
UV9TVEFUVVMgICAgMHgwNAogCiAvKiBUT0RPOiBGb3Igbm93IHRoaXMgZmlsZSBpcyBLVk0gZGVw
ZW5kZW50LiBBcyBzb29uIGFzIHdlIGhhdmUgbW9yZQogICogQXJtIHBsYXRmb3JtcyB0aGF0IGFy
ZSB1c2luZyB0aGlzIGZpbGUsIHdlIG5lZWQgdG8gaW50cm9kdWNlIGEKQEAgLTEzOSw2ICsxNDgs
NTAgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlX211bHRfc2hpZnQodWludDMyX3QgKm11bHQsIHVp
bnQ4X3QgKnNoaWZ0LAogCSpzaGlmdCA9IHNmdDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGdl
bmVyaWNfdGltZXJfZW5hYmxlKHZvaWQpCit7CisJU1lTUkVHX1dSSVRFMzIoY250dl9jdGxfZWww
LAorCQkgICAgICAgU1lTUkVHX1JFQUQzMihjbnR2X2N0bF9lbDApIHwgR1RfVElNRVJfRU5BQkxF
KTsKKworCS8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8K
Kwlpc2IoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfZGlzYWJsZSh2
b2lkKQoreworCVNZU1JFR19XUklURTMyKGNudHZfY3RsX2VsMCwKKwkJU1lTUkVHX1JFQUQzMihj
bnR2X2N0bF9lbDApICYgfkdUX1RJTUVSX0VOQUJMRSk7CisKKwkvKiBFbnN1cmUgdGhlIHdyaXRl
IG9mIHN5cyByZWdpc3RlciBpcyB2aXNpYmxlICovCisJaXNiKCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBnZW5lcmljX3RpbWVyX21hc2tfaXJxKHZvaWQpCit7CisJU1lTUkVHX1dSSVRFMzIo
Y250dl9jdGxfZWwwLAorCQlTWVNSRUdfUkVBRDMyKGNudHZfY3RsX2VsMCkgfCBHVF9USU1FUl9N
QVNLX0lSUSk7CisKKwkvKiBFbnN1cmUgdGhlIHdyaXRlIG9mIHN5cyByZWdpc3RlciBpcyB2aXNp
YmxlICovCisJaXNiKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5lcmljX3RpbWVyX3Vu
bWFza19pcnEodm9pZCkKK3sKKwlTWVNSRUdfV1JJVEUzMihjbnR2X2N0bF9lbDAsCisJCVNZU1JF
R19SRUFEMzIoY250dl9jdGxfZWwwKSAmICh+R1RfVElNRVJfTUFTS19JUlEpKTsKKworCS8qIEVu
c3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KKwlpc2IoKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGdlbmVyaWNfdGltZXJfdXBkYXRlX2NvbXBhcmUodWludDY0
X3QgbmV3X3ZhbCkKK3sKKwlTWVNSRUdfV1JJVEU2NChjbnR2X2N2YWxfZWwwLCBuZXdfdmFsKTsK
KworCS8qIEVuc3VyZSB0aGUgd3JpdGUgb2Ygc3lzIHJlZ2lzdGVyIGlzIHZpc2libGUgKi8KKwlp
c2IoKTsKK30KKwogc3RhdGljIHVpbnQzMl90IGdlbmVyaWNfdGltZXJfZ2V0X2ZyZXF1ZW5jeShp
bnQgZmR0X3RpbWVyKQogewogCWludCBsZW47CkBAIC0yMzMsMTYgKzI4NiwyOCBAQCBzdGF0aWMg
aW50IGdlbmVyaWNfdGltZXJfaW5pdChpbnQgZmR0X3RpbWVyKQogCXJldHVybiAwOwogfQogCitz
dGF0aWMgaW50IGdlbmVyaWNfdGltZXJfaXJxX2hhbmRsZXIodm9pZCAqYXJnIF9fdW51c2VkKQor
eworCS8qCisJICogV2UganVzdCBtYXNrIHRoZSBJUlEgaGVyZSwgdGhlIHNjaGVkdWxlciB3aWxs
IGNhbGwKKwkgKiBnZW5lcmljX3RpbWVyX2NwdV9ibG9jaywgYW5kIHRoZW4gdW5tYXNrIHRoZSBJ
UlEuCisJICovCisJZ2VuZXJpY190aW1lcl9tYXNrX2lycSgpOworCisJLyogWWVzLCB3ZSBoYW5k
bGVkIHRoZSBpcnEuICovCisJcmV0dXJuIDE7Cit9CisKIHVuc2lnbmVkIGxvbmcgc2NoZWRfaGF2
ZV9wZW5kaW5nX2V2ZW50czsKIAogdm9pZCB0aW1lX2Jsb2NrX3VudGlsKF9fc25zZWMgdW50aWwp
CiB7CisJLyoKKwkgKiBUT0RPOgorCSAqIEFzIHdlIGhhdmVuJ3Qgc3VwcG9ydCBpbnRlcnJ1cHQg
b24gQXJtLCBzbyB3ZSBqdXN0CisJICogdXNlIGJ1c3kgcG9sbGluZyBmb3Igbm93LgorCSAqLwog
CXdoaWxlICgoX19zbnNlYykgdWtwbGF0X21vbm90b25pY19jbG9jaygpIDwgdW50aWwpIHsKLQkJ
LyoKLQkJICogVE9ETzoKLQkJICogQXMgd2UgaGF2ZW4ndCBzdXBwb3J0IGludGVycnVwdCBvbiBB
cm0sIHNvIHdlIGp1c3QKLQkJICogdXNlIGJ1c3kgcG9sbGluZyBmb3Igbm93LgotCQkgKi8KIAkJ
aWYgKF9fdWtfdGVzdF9hbmRfY2xlYXJfYml0KDAsICZzY2hlZF9oYXZlX3BlbmRpbmdfZXZlbnRz
KSkKIAkJCWJyZWFrOwogCX0KQEAgLTI2MCwxNiArMzI1LDEyIEBAIF9fbnNlYyB1a3BsYXRfd2Fs
bF9jbG9jayh2b2lkKQogCXJldHVybiBnZW5lcmljX3RpbWVyX21vbm90b25pYygpICsgZ2VuZXJp
Y190aW1lcl9lcG9jaG9mZnNldCgpOwogfQogCi1zdGF0aWMgaW50IHRpbWVyX2hhbmRsZXIodm9p
ZCAqYXJnIF9fdW51c2VkKQotewotCS8qIFllcywgd2UgaGFuZGxlZCB0aGUgaXJxLiAqLwotCXJl
dHVybiAxOwotfQotCiAvKiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgaW50ZXJydXB0cyBhcmUgZW5h
YmxlZCAqLwogdm9pZCB1a3BsYXRfdGltZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJjLCBmZHRfdGlt
ZXI7CisJaW50IHJjLCBpcnEsIGZkdF90aW1lcjsKKwl1aW50MzJfdCBpcnFfdHlwZSwgaHdpcnE7
CisJdWludDMyX3QgdHJpZ2dlcl90eXBlOwogCiAJLyoKIAkgKiBNb25vdG9uaWMgdGltZSBiZWdp
bnMgYXQgYm9vdF90aWNrcyAoZmlyc3QgcmVhZCBvZiBjb3VudGVyCkBAIC0yODMsMTEgKzM0NCwz
MCBAQCB2b2lkIHVrcGxhdF90aW1lX2luaXQodm9pZCkKIAlpZiAoZmR0X3RpbWVyIDwgMCkKIAkJ
VUtfQ1JBU0goIkNvdWxkIG5vdCBmaW5kIGFyY2ggdGltZXIhXG4iKTsKIAotCXJjID0gdWtwbGF0
X2lycV9yZWdpc3RlcigwLCB0aW1lcl9oYW5kbGVyLCBOVUxMKTsKLQlpZiAocmMgPCAwKQotCQlV
S19DUkFTSCgiRmFpbGVkIHRvIHJlZ2lzdGVyIHRpbWVyIGludGVycnVwdCBoYW5kbGVyXG4iKTsK
LQogCXJjID0gZ2VuZXJpY190aW1lcl9pbml0KGZkdF90aW1lcik7CiAJaWYgKHJjIDwgMCkKIAkJ
VUtfQ1JBU0goIkZhaWxlZCB0byBpbml0aWFsaXplIHBsYXRmb3JtIHRpbWVcbiIpOworCisJcmMg
PSBnaWNfZ2V0X2lycV9mcm9tX2R0YihfbGlia3ZtcGxhdF9jZmcuZHRiLCBmZHRfdGltZXIsIDIs
CisJCQkmaXJxX3R5cGUsICZod2lycSwgJnRyaWdnZXJfdHlwZSk7CisJaWYgKHJjIDwgMCkKKwkJ
VUtfQ1JBU0goIkZhaWxlZCB0byBmaW5kIElSUSBudW1iZXIgZnJvbSBEVEJcbiIpOworCisJaXJx
ID0gZ2ljX2lycV90cmFuc2xhdGUoaXJxX3R5cGUsIGh3aXJxKTsKKwlpZiAoaXJxIDwgMCB8fCBp
cnEgPj0gX19NQVhfSVJRKQorCQlVS19DUkFTSCgiRmFpbGVkIHRvIHRyYW5zbGF0ZSBJUlEgbnVt
YmVyLCB0eXBlPSV1LCBod2lycT0ldVxuIiwKKwkJCWlycV90eXBlLCBod2lycSk7CisKKwlyYyA9
IHVrcGxhdF9pcnFfcmVnaXN0ZXIoaXJxLCBnZW5lcmljX3RpbWVyX2lycV9oYW5kbGVyLCBOVUxM
KTsKKwlpZiAocmMgPCAwKQorCQlVS19DUkFTSCgiRmFpbGVkIHRvIHJlZ2lzdGVyIHRpbWVyIGlu
dGVycnVwdCBoYW5kbGVyXG4iKTsKKworCS8qCisJICogTWFzayBJUlEgYmVmb3JlIHNjaGVkdWxl
ciBzdGFydCB3b3JraW5nLiBPdGhlcndpc2Ugd2Ugd2lsbCBnZXQKKwkgKiB1bmV4cGVjdGVkIHRp
bWVyIGludGVycnVwdHMgd2hlbiBzeXN0ZW0gaXMgYm9vdGluZy4KKwkgKi8KKwlnZW5lcmljX3Rp
bWVyX21hc2tfaXJxKCk7CisKKwkvKiBFbmFibGUgdGltZXIgKi8KKwlnZW5lcmljX3RpbWVyX2Vu
YWJsZSgpOwogfQpkaWZmIC0tZ2l0IGEvcGxhdC9kcml2ZXJzL2dpYy9naWMtdjIuYyBiL3BsYXQv
ZHJpdmVycy9naWMvZ2ljLXYyLmMKaW5kZXggNjg3NzE0ZS4uYzAxYzkyZiAxMDA2NDQKLS0tIGEv
cGxhdC9kcml2ZXJzL2dpYy9naWMtdjIuYworKysgYi9wbGF0L2RyaXZlcnMvZ2ljL2dpYy12Mi5j
CkBAIC0yOTEsNyArMjkxLDcgQEAgdm9pZCBnaWNfc2V0X2lycV90eXBlKHVpbnQzMl90IGlycSwg
aW50IHRyaWdnZXIpCiAJd3JpdGVfZ2ljZDMyKEdJQ0RfSUNGR1IoaXJxKSwgdmFsKTsKIH0KIAot
dWludDMyX3QgZ2ljX2lycV90cmFuc2xhdGUodWludDMyX3QgdHlwZSwgdWludDMyX3QgaHdfaXJx
KQoraW50MzJfdCBnaWNfaXJxX3RyYW5zbGF0ZSh1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBod19p
cnEpCiB7CiAJdWludDMyX3QgaXJxOwogCmRpZmYgLS1naXQgYS9wbGF0L2RyaXZlcnMvaW5jbHVk
ZS9naWMvZ2ljLXYyLmggYi9wbGF0L2RyaXZlcnMvaW5jbHVkZS9naWMvZ2ljLXYyLmgKaW5kZXgg
MjRkYTFlYi4uYzI4YjdhNyAxMDA2NDQKLS0tIGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUvZ2ljL2dp
Yy12Mi5oCisrKyBiL3BsYXQvZHJpdmVycy9pbmNsdWRlL2dpYy9naWMtdjIuaApAQCAtMzY1LDcg
KzM2NSw3IEBAIGludCBnaWNfaXNfaXJxX2FjdGl2ZSh1aW50MzJfdCBpcnEpOwogdm9pZCBnaWNf
c2V0X2lycV90eXBlKHVpbnQzMl90IGlycSwgaW50IHRyaWdnZXIpOwogCiAvKiBUcmFuc2xhdGUg
dG8gaHdpcnEgYWNjb3JkaW5nIHRvIHR5cGUgZS5nLiBQUEkgU1BJIFNHSSAqLwotdWludDMyX3Qg
Z2ljX2lycV90cmFuc2xhdGUodWludDMyX3QgdHlwZSwgdWludDMyX3QgaHdfaXJxKTsKK2ludCBn
aWNfaXJxX3RyYW5zbGF0ZSh1aW50MzJfdCB0eXBlLCB1aW50MzJfdCBod19pcnEpOwogCiAvKiBI
YW5kbGUgSVJRIGVudHJ5ICovCiB2b2lkIGdpY19oYW5kbGVfaXJxKHZvaWQpOwpkaWZmIC0tZ2l0
IGEvcGxhdC9kcml2ZXJzL2luY2x1ZGUvb2Z3L2dpY19mZHQuaCBiL3BsYXQvZHJpdmVycy9pbmNs
dWRlL29mdy9naWNfZmR0LmgKaW5kZXggZTgxYmMyOC4uZTU1NTg5MiAxMDA2NDQKLS0tIGEvcGxh
dC9kcml2ZXJzL2luY2x1ZGUvb2Z3L2dpY19mZHQuaAorKysgYi9wbGF0L2RyaXZlcnMvaW5jbHVk
ZS9vZncvZ2ljX2ZkdC5oCkBAIC00Nyw1ICs0Nyw1IEBACiAgKi8KIGludCBnaWNfZ2V0X2lycV9m
cm9tX2R0Yihjb25zdCB2b2lkICpmZHQsIGludCBub2Rlb2Zmc2V0LCBpbnQgaW5kZXgsCiAJCQl1
aW50MzJfdCAqaXJxX3R5cGUsIHVpbnQzMl90ICpod2lycSwKLQkJCXVpbnQzMl90ICp0cmlnZ2Vy
X3R5cGUpCisJCQl1aW50MzJfdCAqdHJpZ2dlcl90eXBlKTsKICNlbmRpZiAvKiBfX1BMQVRfRFJW
X0dJQ19GRFRfSF9fICovCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:35:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:35:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3hf-0005IO-Ca; Wed, 25 Sep 2019 09:35:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD3he-0005Hr-6v
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 09:35:18 +0000
X-Inumbo-ID: c7929eb0-df77-11e9-962f-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id c7929eb0-df77-11e9-962f-12813bfff9fa;
 Wed, 25 Sep 2019 09:35:16 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 1FB9C10570A;
 Wed, 25 Sep 2019 11:35:15 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ld1yEchtYGAv; Wed, 25 Sep 2019 11:35:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id E3FB8105709
 for <minios-devel@lists.xen.org>; Wed, 25 Sep 2019 11:35:14 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 25 Sep
 2019 11:35:14 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Wed, 25 Sep 2019 11:35:14
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/GCC PATCH 00/14] port libgo on Unikraft
Thread-Index: AQHVchPXwZxTHn54ckK4is2Ys++DuKc8JOiA
Date: Wed, 25 Sep 2019 09:35:14 +0000
Message-ID: <BC86566B-9BD9-4630-AD5C-23489C3C7623@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <9BBF4CF27BDD204A91DB10E8999E7A7C@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/GCC PATCH 00/14] port libgo on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNClRoYW5rcyBhIGxvdCBmb3IgdGhpcyBzZXJpZXMsIGl0J2xsIGJl
IGEgZ3JlYXQgYWRkaXRpb24gdG8gVW5pa3JhZnQhIA0KDQpBcGFydCBmcm9tIHBhdGNoLXNwZWNp
ZmljIGNvbW1lbnRzLCBJIGhhZCBhIGdlbmVyYWwgY29tbWVudHMgYWJvdXQgdGhlIHN0cnVjdHVy
ZSBvZiB0aGlzIGxpYnJhcnkuIFRoaXMgcG9ydCBkZXBlbmRzIG9uIGxpYmJhY3RyYWNlIGFuZCBs
aWJmZmksIHdoaWNoIGFyZSBwYXJ0IG9mIGdjYy4gSSBrbm93IHRoYXQgdGhlIGdjYyBVbmlrcmFm
dCBleHRlcm5hbCBsaWJyYXJ5IGNvbnRhaW5zIHRoZXNlLCBzbyBJIHRoaW5rIGl0J2QgYmUgZ29v
ZCB0byBoYXZlIHRoZWlyIGhlYWRlciBhbmQgZXhwb3J0c3ltcy51ayBmaWxlcyBkaXJlY3RseSBp
biB0aGUgZ2NjIGxpYiwgYW5kIHRvIGdldCByaWQgb2YgdGhlbSBpbiBsaWJnbywgaS5lLiw6DQoN
CnwtLSBDT0RJTkdfU1RZTEUubWQNCnwtLSBDb25maWcudWsNCnwtLSBDT05UUklCVVRJTkcubWQN
CnwtLSBDT1BZSU5HLm1kDQp8LS0gZXhwb3J0c3ltcy51aw0KfC0tIGxpYmJhY2t0cmFjZQ0KfCAg
IHwtLSBleHBvcnRzeW1zLnVrDQp8ICAgYC0tIGluY2x1ZGUNCnwgICAgICAgfC0tIGJhY2t0cmFj
ZS1zdXBwb3J0ZWQuaA0KfCAgICAgICBgLS0gY29uZmlnLmgNCnwtLSBsaWJmZmkNCnwgICB8LS0g
ZXhwb3J0c3ltcy51aw0KfCAgIGAtLSBpbmNsdWRlDQp8ICAgICAgIHwtLSBmZmljb25maWcuaA0K
fCAgICAgICBgLS0gZmZpLmgNCg0KLS0+IFJlbW92ZSBsaWJiYWNrdHJhY2UgYW5kIGxpYmZmaSBk
aXJlY3RvcmllcyBmcm9tIHRoaXMgcmVwby4NCg0KfC0tIGxpYmdvDQp8ICAgfC0tIGdlbmVyYXRl
ZA0KfCAgIHwgICB8LS0gZXBvbGwuZ28NCnwgICB8ICAgfC0tIGluY2x1ZGUNCnwgICB8ICAgfCAg
IHwtLSBjb25maWcuaA0KfCAgIHwgICB8ICAgYC0tIHJ1bnRpbWUuaW5jDQp8ICAgfCAgIHwtLSBs
aWJjYWxscy5nbw0KfCAgIHwgICB8LS0gcnVudGltZV9zeXNpbmZvLmdvDQp8ICAgfCAgIHwtLSBz
aWd0YWIuZ28NCnwgICB8ICAgfC0tIHN5c2NhbGxfYXJjaC5nbw0KfCAgIHwgICB8LS0gc3lzaW5m
by5nbw0KfCAgIHwgICBgLS0gdmVyc2lvbi5nbw0KfCAgIHwtLSBnbHVlLmMNCnwgICB8LS0gaW5j
bHVkZQ0KfCAgIHwgICBgLS0gbW1fbWFsbG9jLmgNCnwgICBgLS0gcGFja2FnZXMudWsNCg0KVGhp
cyBtZWFucyB0aGF0IHlvdSBjYW4gYWxzbyBnZXQgcmlkIG9mIHRoZSBsaWJnbyBzdWJkaXJlY3Rv
cnkgYW5kIGNvbGxhcHNlIGV2ZXl0aGluZyBpbiBpdCBkb3duIG9uZSBsZXZlbC4gVGhhdCB3b3Vs
ZCBtYWtlIGxpYmdvIGJlIG11Y2ggbW9yZSBpbiBsaW5lcyB3aXRoIG90aGVyIGV4dGVybmFsIGxp
YnJhcmllcy4gSXQgZG9lcyBtZWFuIHRoYXQgdGhlIG5leHQgdmVyc2lvbiBvZiB0aGlzIHNlcmll
cyB3aWxsIGFjdHVhbGx5IGNvbnNpc3Qgb2YgYSBzZXJpZXMgZm9yIGxpYmdvIGFuZCBhbm90aGVy
IG9uZSBmb3IgZ2NjLg0KDQpIb3BlIHRoaXMgbWFrZXMgc2Vuc2UuDQoNClRoYW5rcyBhZ2FpbiwN
Cg0KLS0gRmVsaXBlDQoNCg0K77u/T24gMjMuMDkuMTksIDE1OjM2LCAiQ2hhcmFsYW1wb3MgTWFp
bmFzIiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBUaGVzZSBh
cmUgdGhlIHBhdGNoZXMgbmVlZGVkIGZvciBwb3J0aW5nIGxpYmdvIG9uIFVuaWtyYWZ0Lg0KICAg
IEEgc2ltcGxlIHN1bW1hcnk6DQogICAgLVRoZSBmaXJzdCAyIHBhdGNoZXMgYXJlIHF1aXRlIGNv
bW1vbg0KICAgIC1UaGUgbmV4dCAyIHBhdGNoZXMgcG9ydCB0d28gbGlicmFyaWVzIHRoYXQgYXJl
IG5lZWRlZC4NCiAgICAtVGhlIG5leHQgNSBwYXRjaGVzIGFkZCBzb21lIGNvbmZpZ3VyYXRpb24g
ZmlsZXMsIHBhdGNoZXMgYW5kIHJ1bGVzDQogICAgIHRvIGJ1aWxkIHRoZSBnbyBwYWNrYWdlcyBh
bmQgcnVudGltZS4NCiAgICAtVGhlIG5leHQgMyBwYXRjaGVzIHVwZGF0ZSBjb25maWcgZmlsZXMg
dG8gZGVjcmVhc2Ugc3R1YnMuDQogICAgLVRoZSBuZXh0IHBhdGNoIGNoYW5nZXMgbG9ja2luZyBm
cm9tIGZ1dGV4IHRvIHNlbWFwaG9yZXMuDQogICAgLVRoZSBsYXN0IHBhdGNoIGFkZHMgZ2x1ZSBj
b2RlIGFuZCByZXF1aXJlZCBzdHVicy4NCiAgICANCiAgICBDaGFyYWxhbXBvcyBNYWluYXMgKDEy
KToNCiAgICAgIEludHJvZHVjZSBsaWJyYXJ5IHNrZWxldG9uDQogICAgICBBZGQgTWFrZWZpbGUu
dWsNCiAgICAgIFBvcnQgbGliYmFja3RyYWNlIGxpYnJhcnkNCiAgICAgIFBvcnQgbGliZmZpIGxp
YnJhcnkNCiAgICAgIGxpYmdvOiBJbnRyb2R1Y2UgbGlicmFyeSBwb3J0DQogICAgICBsaWJnbzog
QWRkIHBhdGNoZXMgdG8gZW5hYmxlIHJ1bnRpbWUNCiAgICAgIGxpYmdvOiBXYWl0IGZvciBwYXRj
aGVzIHRvIGJlIGFwcGxpZWQgYW5kIHVwZGF0ZSBsaWJyYXJ5IGRlcGVkZW5jaWVzDQogICAgICBs
aWJnbzogVXBkYXRlIGNvbmZpZy5oDQogICAgICBsaWJnbzogVXBkYXRlIGxpYmNhbGxzLmdvDQog
ICAgICBsaWJnbzogVXBkYXRlIHBhY2thZ2VzLnVrDQogICAgICBsaWJnbzogVXNlIHNlbWFwaG9y
ZXMgaW5zdGVhZCBvZiBmdXRleGVzDQogICAgICBsaWJnbzogQWRkIGdsdWUgY29kZSBhbmQgc3R1
YnMNCiAgICANCiAgICBDb3N0aW4gTHVwdSAoMik6DQogICAgICBsaWJnbzogQWRkIHJ1bGVzIGZv
ciBidWlsZGluZyBydW50aW1lIEdvIHBhY2thZ2VzDQogICAgICBsaWJnbzogQWRkIHBhdGNoZXMg
dG8gYnVpbGQgdGhlIGxpYnJhcnkNCiAgICANCiAgICAgLmdpdGlnbm9yZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAyNyArDQogICAgIENPRElOR19TVFlMRS5tZCAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKw0KICAgICBDT05UUklCVVRJTkcubWQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA0ICsNCiAgICAgQ09QWUlORy5tZCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzOSArDQogICAgIENvbmZpZy51
ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNDIgKw0KICAgICBNQUlO
VEFJTkVSUy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExICsNCiAgICAg
TWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyOCArDQog
ICAgIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcg
Kw0KICAgICBleHBvcnRzeW1zLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
ICAxICsNCiAgICAgbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgICAg
IHwgICAgNiArDQogICAgIGxpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQu
aCAgICB8ICAgNjYgKw0KICAgICBsaWJiYWNrdHJhY2UvaW5jbHVkZS9jb25maWcuaCAgICAgICAg
ICAgICAgICAgfCAgMTM1ICsNCiAgICAgbGliZmZpL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAyMSArDQogICAgIGxpYmZmaS9pbmNsdWRlL2ZmaS5oICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICA1MDkgKw0KICAgICBsaWJmZmkvaW5jbHVkZS9mZmljb25maWcu
aCAgICAgICAgICAgICAgICAgICAgfCAgMjA2ICsNCiAgICAgbGliZ28vZ2VuZXJhdGVkL2Vwb2xs
LmdvICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiArDQogICAgIGxpYmdvL2dlbmVyYXRlZC9p
bmNsdWRlL2NvbmZpZy5oICAgICAgICAgICAgICB8ICA0MTUgKw0KICAgICBsaWJnby9nZW5lcmF0
ZWQvaW5jbHVkZS9ydW50aW1lLmluYyAgICAgICAgICAgfCAgOTg4ICsrDQogICAgIGxpYmdvL2dl
bmVyYXRlZC9saWJjYWxscy5nbyAgICAgICAgICAgICAgICAgICB8IDMwNzkgKysrKysrDQogICAg
IGxpYmdvL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28gICAgICAgICAgICB8IDYyMTkgKysr
KysrKysrKysNCiAgICAgbGliZ28vZ2VuZXJhdGVkL3NpZ3RhYi5nbyAgICAgICAgICAgICAgICAg
ICAgIHwgICA3MSArDQogICAgIGxpYmdvL2dlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28gICAgICAg
ICAgICAgICB8ICAgIDMgKw0KICAgICBsaWJnby9nZW5lcmF0ZWQvc3lzaW5mby5nbyAgICAgICAg
ICAgICAgICAgICAgfCA5MjgyICsrKysrKysrKysrKysrKysrDQogICAgIGxpYmdvL2dlbmVyYXRl
ZC92ZXJzaW9uLmdvICAgICAgICAgICAgICAgICAgICB8ICAgNzcgKw0KICAgICBsaWJnby9nbHVl
LmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTk5ICsNCiAgICAgbGliZ28v
aW5jbHVkZS9tbV9tYWxsb2MuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMA0KICAgICBsaWJn
by9wYWNrYWdlcy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTgxICsrDQogICAg
IC4uLi11bndpbmQtaGVhZGVyLWluc3RlYWQtb2Ytc3lzdGVtLW9uZS5wYXRjaCB8ICAgMjUgKw0K
ICAgICBwYXRjaGVzLzAwMDItbGliZ28tTm8tZnV0ZXgtdG9uaWdodC5wYXRjaCAgICAgfCAgIDI1
ICsNCiAgICAgcGF0Y2hlcy8wMDAzLWxpYmdvLURpc2FibGUtYmFja3RyYWNpbmcucGF0Y2ggIHwg
ICAyOCArDQogICAgIC4uLjAwNC1saWJnby1SZWR1Y2UtbWF4aW11bS1tZW1vcnktc2l6ZS5wYXRj
aCB8ICAgMjcgKw0KICAgICAuLi4vMDAwNS1saWJnby1Vc2Utb3VyLWNvbnRleHQtbG9naWMucGF0
Y2ggICAgfCAgIDU3ICsNCiAgICAgLi4uZ28tVXNlLXNlbWFwaG9yZXMtaW5zdGVhZC1vZi1mdXRl
eGVzLnBhdGNoIHwgIDEzMSArDQogICAgIDMzIGZpbGVzIGNoYW5nZWQsIDIyOTE5IGluc2VydGlv
bnMoKykNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUNCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJ
QlVUSU5HLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kDQogICAgIGNyZWF0
ZSBtb2RlIDEwMDY0NCBDb25maWcudWsNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlO
RVJTLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51aw0KICAgICBjcmVhdGUg
bW9kZSAxMDA2NDQgUkVBRE1FLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1z
LnVrDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvZXhwb3J0c3ltcy51aw0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLXN1
cHBvcnRlZC5oDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvaW5jbHVkZS9j
b25maWcuaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZmZpL2V4cG9ydHN5bXMudWsNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9pbmNsdWRlL2ZmaS5oDQogICAgIGNyZWF0ZSBt
b2RlIDEwMDY0NCBsaWJmZmkvaW5jbHVkZS9mZmljb25maWcuaA0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliZ28vZ2VuZXJhdGVkL2Vwb2xsLmdvDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBs
aWJnby9nZW5lcmF0ZWQvaW5jbHVkZS9jb25maWcuaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliZ28vZ2VuZXJhdGVkL2luY2x1ZGUvcnVudGltZS5pbmMNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IGxpYmdvL2dlbmVyYXRlZC9saWJjYWxscy5nbw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliZ28vZ2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbw0KICAgICBjcmVhdGUgbW9kZSAxMDA2
NDQgbGliZ28vZ2VuZXJhdGVkL3NpZ3RhYi5nbw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
Z28vZ2VuZXJhdGVkL3N5c2NhbGxfYXJjaC5nbw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
Z28vZ2VuZXJhdGVkL3N5c2luZm8uZ28NCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdvL2dl
bmVyYXRlZC92ZXJzaW9uLmdvDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJnby9nbHVlLmMN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdvL2luY2x1ZGUvbW1fbWFsbG9jLmgNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmdvL3BhY2thZ2VzLnVrDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBwYXRjaGVzLzAwMDEtbGliZ28tVXNlLWdjYy1vd24tdW53aW5kLWhlYWRlci1pbnN0ZWFk
LW9mLXN5c3RlbS1vbmUucGF0Y2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAw
Mi1saWJnby1Oby1mdXRleC10b25pZ2h0LnBhdGNoDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBw
YXRjaGVzLzAwMDMtbGliZ28tRGlzYWJsZS1iYWNrdHJhY2luZy5wYXRjaA0KICAgICBjcmVhdGUg
bW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1zaXpl
LnBhdGNoDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDUtbGliZ28tVXNlLW91
ci1jb250ZXh0LWxvZ2ljLnBhdGNoDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAw
MDYtbGliZ28tVXNlLXNlbWFwaG9yZXMtaW5zdGVhZC1vZi1mdXRleGVzLnBhdGNoDQogICAgDQog
ICAgLS0gDQogICAgMi4xNy4xDQogICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:40:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:40:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3mU-0005zN-S4; Wed, 25 Sep 2019 09:40:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=o7PV=XU=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iD3mT-0005zF-Kz
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 09:40:17 +0000
X-Inumbo-ID: 79f1750e-df78-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 79f1750e-df78-11e9-97fb-bc764e2007e4;
 Wed, 25 Sep 2019 09:40:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 71341F2020;
 Wed, 25 Sep 2019 11:40:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id JRRMJIHZ-xIC; Wed, 25 Sep 2019 11:40:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 48564F201F
 for <minios-devel@lists.xen.org>; Wed, 25 Sep 2019 11:40:12 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 25 Sep
 2019 11:40:12 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, <minios-devel@lists.xen.org>
References: <1568996434-14751-1-git-send-email-sharan.santhanam@neclab.eu>
 <1568996434-14751-3-git-send-email-sharan.santhanam@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <ec93596d-90fb-bb7d-1d6a-01e9c66832ac@neclab.eu>
Date: Wed, 25 Sep 2019 11:40:11 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <1568996434-14751-3-git-send-email-sharan.santhanam@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/2] solo5: Add inittab section
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzLCBsb29rcyBnb29kLgoKUmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1
ZW56ZXJAbmVjbGFiLmV1PgoKT24gMjAuMDkuMTkgMTg6MjAsIFNoYXJhbiBTYW50aGFuYW0gd3Jv
dGU6Cj4gU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBu
ZWNsYWIuZXU+Cj4gLS0tCj4gICBsaW5rNjQubGRzIHwgNiArKysrKysKPiAgIDEgZmlsZSBjaGFu
Z2VkLCA2IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvbGluazY0LmxkcyBiL2xpbms2
NC5sZHMKPiBpbmRleCAyMjVmNTdkLi4xNWE1Y2NhIDEwMDY0NAo+IC0tLSBhL2xpbms2NC5sZHMK
PiArKysgYi9saW5rNjQubGRzCj4gQEAgLTY2LDYgKzY2LDEyIEBAIFNFQ1RJT05TIHsKPiAgICAg
ICB9Cj4gICAgICAgdWtfY3RvcnRhYl9lbmQgPSAuOwo+ICAgCj4gKwl1a19pbml0dGFiX3N0YXJ0
ID0gLjsKPiArCS51a19pbml0dGFiIDoKPiArCXsKPiArCQlLRUVQKCooU09SVF9CWV9OQU1FKC51
a19pbml0dGFiX1sxLTZdWzAtOV0pKSkKPiArCX0KPiArCXVrX2luaXR0YWJfZW5kID0gLjsKPiAg
IAo+ICAgICAgIC4gPSBBTElHTigweDEwMDApOwo+ICAgICAgIC8qIFJlYWQtb25seSBkYXRhICov
Cj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:40:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:40:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3mV-00060N-Ts; Wed, 25 Sep 2019 09:40:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=o7PV=XU=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iD3mU-0005zK-QE
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 09:40:18 +0000
X-Inumbo-ID: 7b40cd7e-df78-11e9-962f-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 7b40cd7e-df78-11e9-962f-12813bfff9fa;
 Wed, 25 Sep 2019 09:40:17 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 81FBCF2021;
 Wed, 25 Sep 2019 11:40:16 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id F3lvBhGgYXC1; Wed, 25 Sep 2019 11:40:16 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 504C7F201F
 for <minios-devel@lists.xen.org>; Wed, 25 Sep 2019 11:40:14 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 25 Sep
 2019 11:40:12 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>, <minios-devel@lists.xen.org>
References: <1568996434-14751-1-git-send-email-sharan.santhanam@neclab.eu>
 <1568996434-14751-2-git-send-email-sharan.santhanam@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <d9e4c081-409b-bad4-c95d-737f3c398be6@neclab.eu>
Date: Wed, 25 Sep 2019 11:40:12 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <1568996434-14751-2-git-send-email-sharan.santhanam@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/2] solo5/lds: Use the correct
 ctor variable
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGEgbG90IGZvciB0aGUgZml4IQoKUmV2aWV3ZWQtYnk6IFNpbW9uIEt1ZW56ZXIgPHNp
bW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgoKT24gMjAuMDkuMTkgMTg6MjAsIFNoYXJhbiBTYW50aGFu
YW0gd3JvdGU6Cj4gU2lnbmVkLW9mZi1ieTogU2hhcmFuIFNhbnRoYW5hbSA8c2hhcmFuLnNhbnRo
YW5hbUBuZWNsYWIuZXU+Cj4gLS0tCj4gICBsaW5rNjQubGRzIHwgMyArKy0KPiAgIDEgZmlsZSBj
aGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEv
bGluazY0LmxkcyBiL2xpbms2NC5sZHMKPiBpbmRleCAwYzE1MWI3Li4yMjVmNTdkIDEwMDY0NAo+
IC0tLSBhL2xpbms2NC5sZHMKPiArKysgYi9saW5rNjQubGRzCj4gQEAgLTYzLDggKzYzLDkgQEAg
U0VDVElPTlMgewo+ICAgICAgIC51a19jdG9ydGFiIDoKPiAgICAgICB7Cj4gICAgICAgICAgICAg
ICBLRUVQKCooU09SVF9CWV9OQU1FKC51a19jdG9ydGFiWzAtN10pKSkKPiAtICAgICAgICAgICAg
TE9ORygwKQo+ICAgICAgIH0KPiArICAgIHVrX2N0b3J0YWJfZW5kID0gLjsKPiArCj4gICAKPiAg
ICAgICAuID0gQUxJR04oMHgxMDAwKTsKPiAgICAgICAvKiBSZWFkLW9ubHkgZGF0YSAqLwo+IAoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Wed Sep 25 09:45:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Wed, 25 Sep 2019 09:45:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iD3ry-0006Cc-QM; Wed, 25 Sep 2019 09:45:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=mPir=XU=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iD3rx-0006CV-DQ
 for minios-devel@lists.xen.org; Wed, 25 Sep 2019 09:45:57 +0000
X-Inumbo-ID: 44ddb64c-df79-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 44ddb64c-df79-11e9-97fb-bc764e2007e4;
 Wed, 25 Sep 2019 09:45:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B057FF2021;
 Wed, 25 Sep 2019 11:45:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id os2sQMr75M-a; Wed, 25 Sep 2019 11:45:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 7F6D7F2020;
 Wed, 25 Sep 2019 11:45:50 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 25 Sep
 2019 11:45:50 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Wed, 25 Sep 2019 11:45:50
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/GCC PATCH 01/14] Introduce library skeleton
Thread-Index: AQHVchPXk0kaq5UxtEW44++lhk7Qsqc8J96A
Date: Wed, 25 Sep 2019 09:45:49 +0000
Message-ID: <3A9EDCFA-43A5-433F-8E84-CFA57F9955DA@neclab.eu>
References: <20190923133544.26927-1-Charalampos.Mainas@neclab.eu>
 <20190923133544.26927-2-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190923133544.26927-2-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <A013E451FA52C2498105FBF5CF7F1A57@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/GCC PATCH 01/14] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsDQoNClBsZWFzZSBzZWUgYSBtaW5vciBjb21tZW50IGlubGluZSAob3Ro
ZXIgdGhhbiB0aGlzIHNob3VsZCBiZWNvbWUgYSBzZXBhcmF0ZSBleHRlcm5hbCBsaWIsIGFzIG1l
bnRpb25lZCBpbiBteSByZXBseSB0byB5b3VyIHNlcmllcyBjb3ZlciBsZXR0ZXIpLg0KDQotLSBG
ZWxpcGUNCg0K77u/T24gMjMuMDkuMTksIDE1OjM2LCAiQ2hhcmFsYW1wb3MgTWFpbmFzIiA8Q2hh
cmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBGcm9tOiBDaGFyYWxhbXBv
cyBNYWluYXMgPGNoYXJhbGFtcG9zLm1haW5hc0BuZWNsYWIuZXU+DQogICAgDQogICAgV2UgdXNl
IHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29kZS4NCiAg
ICANCiAgICBTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPGNoYXJhbGFtcG9zLm1h
aW5hc0BuZWNsYWIuZXU+DQogICAgU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5s
dXB1QGNzLnB1Yi5ybz4NCiAgICAtLS0NCiAgICAgLmdpdGlnbm9yZSAgICAgIHwgMjcgKysrKysr
KysrKysrKysrKysrKysrKysrKysrDQogICAgIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysNCiAg
ICAgQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKw0KICAgICBDT1BZSU5HLm1kICAgICAgfCAzOSAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCiAgICAgQ29uZmlnLnVrICAg
ICAgIHwgMTAgKysrKysrKysrKw0KICAgICBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysrKysrKysr
Kw0KICAgICBSRUFETUUubWQgICAgICAgfCAgNyArKysrKysrDQogICAgIGV4cG9ydHN5bXMudWsg
ICB8ICAxICsNCiAgICAgOCBmaWxlcyBjaGFuZ2VkLCAxMDMgaW5zZXJ0aW9ucygrKQ0KICAgICBj
cmVhdGUgbW9kZSAxMDA2NDQgLmdpdGlnbm9yZQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09E
SU5HX1NUWUxFLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IENvbmZpZy51aw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5tZA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZXhw
b3J0c3ltcy51aw0KICAgIA0KICAgIGRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9y
ZQ0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNzVkMmZkMw0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi8uZ2l0aWdub3JlDQogICAgQEAgLTAsMCArMSwy
NyBAQA0KICAgICsqLmRlcGVuZA0KICAgICsqLm8NCiAgICArKi5hDQogICAgKyouZA0KICAgICsq
LnNvDQogICAgKyoub3JpZw0KICAgICsqLnJlag0KICAgICsqLmJhaw0KICAgICsqLnN3cA0KICAg
ICsqfg0KICAgICssKg0KICAgICtcIypcIw0KICAgICsuXCMqDQogICAgK1wjXypcIw0KICAgICsu
XCNfKg0KICAgICshLmdpdGlnbm9yZQ0KICAgICsuKg0KICAgICsNCiAgICArIyBnbnUgZ2xvYmFs
IGZpbGVzDQogICAgK0dQQVRIDQogICAgK0dSVEFHUw0KICAgICtHU1lNUw0KICAgICtHVEFHUw0K
ICAgICsNCiAgICArIyBjc2NvcGUgZmlsZXMNCiAgICArY3Njb3BlLioNCiAgICArbmNzY29wZS4q
DQogICAgZGlmZiAtLWdpdCBhL0NPRElOR19TVFlMRS5tZCBiL0NPRElOR19TVFlMRS5tZA0KICAg
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNTczMDA0MQ0KICAgIC0t
LSAvZGV2L251bGwNCiAgICArKysgYi9DT0RJTkdfU1RZTEUubWQNCiAgICBAQCAtMCwwICsxLDQg
QEANCiAgICArQ29kaW5nIFN0eWxlDQogICAgKz09PT09PT09PT09PQ0KICAgICsNCiAgICArUGxl
YXNlIHJlZmVyIHRvIHRoZSBgQ09ESU5HX1NUWUxFLm1kYCBmaWxlIGluIHRoZSBtYWluIFVuaWty
YWZ0IHJlcG9zaXRvcnkuDQogICAgZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRS
SUJVVElORy5tZA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
MTRmNmFjNg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9DT05UUklCVVRJTkcubWQNCiAg
ICBAQCAtMCwwICsxLDQgQEANCiAgICArQ29udHJpYnV0aW5nIHRvIFVuaWtyYWZ0DQogICAgKz09
PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICsNCiAgICArUGxlYXNlIHJlZmVyIHRvIHRoZSBg
Q09OVFJJQlVUSU5HLm1kYCBmaWxlIGluIHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuDQog
ICAgZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kDQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5kMzQ5ZjNhDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL0NPUFlJTkcubWQNCiAgICBAQCAtMCwwICsxLDM5IEBADQogICAgK0xpY2Vuc2UN
CiAgICArPT09PT09PQ0KICAgICsNCiAgICArVW5pa3JhZnQgZ2NjIHdyYXBwZXJzDQogICAgKy0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICArDQogICAgK1RoaXMgcmVwb3Np
dG9yeSBjb250YWlucyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQgZ2NjIHdpdGggVW5pa3JhZnQuDQog
ICAgK0VhY2ggQyBjb2RlIGZpbGUgaW4gdGhpcyByZXBvc2l0b3J5IHNob3VsZCBkZWNsYXJlIHdo
byBpcyB0aGUNCiAgICArY29weXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBhbmQg
Y29uZGl0aW9ucyB0aGUgY29kZSBpcw0KICAgICtsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ug
bm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodA0KICAgICtub3RpY2Ugd2ls
bCBhcHBseToNCiAgICArDQogICAgKwlDb3B5cmlnaHQgKGMpIFllYXIsIEluc3RpdHV0aW9uLiBB
bGwgcmlnaHRzIHJlc2VydmVkLg0KICAgICsNCiAgICArCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KICAgICsJbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zDQogICAgKwlhcmUgbWV0Og0KICAgICsNCiAgICArCTEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgKwkgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
DQogICAgKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICsJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICAgICsJICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4NCiAgICArCTMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIg
bm9yIHRoZSBuYW1lcyBvZiBpdHMNCiAgICArCSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogICAgKwkgICB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAg
ICsNCiAgICArCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIg0KICAgICsJQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KICAg
ICsJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UNCiAgICArCUFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUNCiAgICArCUxJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1INCiAgICArCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQogICAgKwlTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MNCiAgICArCUlO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElODQogICAgKwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KICAgICsJQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUNCiAgICArCVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICAgICsNCiAgICBkaWZmIC0t
Z2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAg
ICBpbmRleCAwMDAwMDAwLi4yM2FiNDkzDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL0Nv
bmZpZy51aw0KICAgIEBAIC0wLDAgKzEsMTAgQEANCiAgICArbWVudWNvbmZpZyBMSUJHQ0MNCiAg
ICArCWJvb2wgImdjYyAtIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIGxpYnJhcmllcyINCiAgICAr
CWRlZmF1bHQgbg0KICAgICsJc2VsZWN0IExJQk5PTElCQyBpZiAhSEFWRV9MSUJDDQogICAgKwlz
ZWxlY3QgTElCVUtERUJVRw0KICAgICsJc2VsZWN0IExJQlVLQUxMT0MNCiAgICArCXNlbGVjdCBM
SUJQVEhSRUFEX0VNQkVEREVEDQogICAgKw0KICAgICtpZiBMSUJHQ0MNCiAgICArZW5kaWYNCiAg
ICBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJTkVSUy5tZA0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMzIzOGIzMA0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9NQUlOVEFJTkVSUy5tZA0KICAgIEBAIC0wLDAgKzEsMTEgQEANCiAg
ICArTWFpbnRhaW5lcnMgTGlzdA0KICAgICs9PT09PT09PT09PT09PT09DQogICAgKw0KICAgICtG
b3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRv
IGBNQUlOVEFJTkVSUy5tZGAgaW4NCiAgICArdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4N
CiAgICArDQogICAgKwlMSUJHQ0MtVU5JS1JBRlQNCiAgICArCU06CUNvc3RpbiBMdXB1IDxjb3N0
aW4ubHVwdUBjcy5wdWIucm8+DQogICAgKwlNOglGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBu
ZWNsYWIuZXU+DQogICAgKwlMOgltaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZw0KICAgICsJRjog
Kg0KICAgIGRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQNCiAgICBuZXcgZmlsZSBt
b2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjVjZTY2NzcNCiAgICAtLS0gL2Rldi9udWxs
DQogICAgKysrIGIvUkVBRE1FLm1kDQogICAgQEAgLTAsMCArMSw3IEBADQogICAgK2djYyBmb3Ig
VW5pa3JhZnQNCiAgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiAgICArDQogICAg
K1RoaXMgaXMgdGhlIHBvcnQgb2YgZ2NjIGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5
Lg0KICAgICsNCiAgICArUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBhcyB3ZWxsIGFz
IHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2ANCiAgICArc3ViZGlyZWN0b3J5IG9mIHRo
ZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuDQoNCllvdSBtaWdodCB3YW50IHRvIHNheSB3aGF0
IHRoZSBleHRlcm5hbCBsaWIgZGVwcyBhcmUgaGVyZSAoZS5nLiwgcHRocmVhZC1lbWJlZGRlZCks
IHlvdSBjYW4gaGF2ZSBhIGxvb2sgYXQgb3RoZXIgbGlicyAoZS5nLiwgaHR0cHM6Ly9naXRodWIu
Y29tL3VuaWtyYWZ0L2F4dGxzL2Jsb2Ivc3RhZ2luZy9SRUFETUUubWQpIGFzIGFuIGV4YW1wbGUu
DQoNCiAgICBkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51ayBiL2V4cG9ydHN5bXMudWsNCiAgICBu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLmM4NmMzZjMNCiAgICAtLS0g
L2Rldi9udWxsDQogICAgKysrIGIvZXhwb3J0c3ltcy51aw0KICAgIEBAIC0wLDAgKzEgQEANCiAg
ICArbm9uZQ0KICAgIFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQ0KICAgIC0tIA0KICAgIDIu
MTcuMQ0KICAgIA0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGlu
Zm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 08:20:16 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 08:20:16 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDP0Z-0003ec-Kn; Thu, 26 Sep 2019 08:20:15 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDP0Y-0003eX-J0
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 08:20:14 +0000
X-Inumbo-ID: 75cab2c4-e036-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 75cab2c4-e036-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 08:20:12 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BCD051000;
 Thu, 26 Sep 2019 01:20:11 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 8E0933F836;
 Thu, 26 Sep 2019 01:20:09 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Thu, 26 Sep 2019 16:20:00 +0800
Message-Id: <20190926082003.4581-1-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [UNIKRAFT PATCH 0/3] Fix obstacles to start
 helloworld on arm64 kvm plat
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXQgbWlnaHQgbm90IGRlcGVuZHMgb24gbXkgcHJldmlvdXMgdGltZXIvbXVs
dGktdGhyZWFkIHBhdGNoIHNlcmllcy4KSXQgcmVzb2x2ZSBzZXZlcmFsIG9ic3RhY2xlcyB3aGlj
aCB3ZXJlIGludHJvZHVjZSByZWNlbnRseS4KCldpdGhvdXQgdGhpcywgaGVsbG93b3JsZCBhcHAg
b24gYXJtNjQga3ZtIGNhbid0IGJlIGJ1aWx0L3J1bi4KCkppYSBIZSAoMyk6CiAgcGxhdDogSW1w
bGVtZW50IHRscyBzdHViIGZvciBhcm02NAogIHBsYXQvY29tbW9uOiBJbXBsZW1lbnQgYSBmZXcg
ZXh0cmEgcmVnaXN0ZXJzIHN0dWIgaGVscGVycyBvbiBhcm02NAogIHBsYXQva3ZtOiBGaXggb3Zl
cndyaXRpbmcgb24gc3RhY2sgZm9yIGFybTY0CgogcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJt
NjQvY3B1LmggfCAyNSArKysrKysrKysrKysrKysrKysrCiBwbGF0L2NvbW1vbi9pbmNsdWRlL2Fy
bTY0L3Rscy5oICAgICB8IDM3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBwbGF0L2Nv
bW1vbi9pbmNsdWRlL3Rscy5oICAgICAgICAgICB8ICAyICsrCiBwbGF0L2NvbW1vbi9pbmNsdWRl
L3g4Ni9jcHUuaCAgICAgICB8IDEwICsrKysrKysrCiBwbGF0L2NvbW1vbi9zd19jdHguYyAgICAg
ICAgICAgICAgICB8IDEwICsrKystLS0tCiBwbGF0L2t2bS9tZW1vcnkuYyAgICAgICAgICAgICAg
ICAgICB8ICAzICsrLQogNiBmaWxlcyBjaGFuZ2VkLCA4MSBpbnNlcnRpb25zKCspLCA2IGRlbGV0
aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtNjQvdGxz
LmgKCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 08:20:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 08:20:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDP0b-0003f1-MH; Thu, 26 Sep 2019 08:20:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDP0a-0003ei-7c
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 08:20:16 +0000
X-Inumbo-ID: 777f74b0-e036-11e9-964a-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 777f74b0-e036-11e9-964a-12813bfff9fa;
 Thu, 26 Sep 2019 08:20:14 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AB1991000;
 Thu, 26 Sep 2019 01:20:14 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 3655E3F836;
 Thu, 26 Sep 2019 01:20:11 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Thu, 26 Sep 2019 16:20:01 +0800
Message-Id: <20190926082003.4581-2-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926082003.4581-1-justin.he@arm.com>
References: <20190926082003.4581-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH 1/3] plat: Implement tls stub for
 arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T3RoZXJ3aXNlLCBhcm02NCBrdm0gcGxhdCB0YXJnZXQgd2lsbCBub3QgYmUgYnVpbHQuCgpTaWdu
ZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2lu
Y2x1ZGUvYXJtNjQvdGxzLmggfCAzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK
IHBsYXQvY29tbW9uL2luY2x1ZGUvdGxzLmggICAgICAgfCAgMiArKwogMiBmaWxlcyBjaGFuZ2Vk
LCAzOSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGxhdC9jb21tb24vaW5jbHVk
ZS9hcm02NC90bHMuaAoKZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJtNjQvdGxz
LmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybTY0L3Rscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmVkOTJhYjkKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0L2NvbW1vbi9p
bmNsdWRlL2FybTY0L3Rscy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBF
dXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAgICB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAq
IFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVku
CisgKi8KKyNpZm5kZWYgX19QTEFUX0NNTl9BUk02NF9UTFNfSF9fCisjZGVmaW5lIF9fUExBVF9D
TU5fQVJNNjRfVExTX0hfXworCisjZGVmaW5lIHNldF90bHNfcG9pbnRlcihwdHIpIGRvIHsgfSB3
aGlsZSAoMCkKKworI2VuZGlmIC8qIF9fUExBVF9DTU5fWDg2X1RMU19IX18gKi8KZGlmZiAtLWdp
dCBhL3BsYXQvY29tbW9uL2luY2x1ZGUvdGxzLmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL3Rscy5o
CmluZGV4IGI5MTc2ZjkuLmM1ZGFkM2UgMTAwNjQ0Ci0tLSBhL3BsYXQvY29tbW9uL2luY2x1ZGUv
dGxzLmgKKysrIGIvcGxhdC9jb21tb24vaW5jbHVkZS90bHMuaApAQCAtMzQsNiArMzQsOCBAQAog
CiAjaWYgZGVmaW5lZChfX1g4Nl82NF9fKQogI2luY2x1ZGUgPHg4Ni90bHMuaD4KKyNlbGlmIGRl
ZmluZWQoX19BUk1fNjRfXykKKyNpbmNsdWRlIDxhcm02NC90bHMuaD4KICNlbHNlCiAjZXJyb3Ig
IkZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBzdXBwb3J0LCBhZGQgdGxzLmggZm9yIGN1cnJlbnQg
YXJjaGl0ZWN0dXJlLiIKICNlbmRpZgotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 08:20:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 08:20:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDP0g-0003fm-Nk; Thu, 26 Sep 2019 08:20:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDP0f-0003fd-4g
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 08:20:21 +0000
X-Inumbo-ID: 7904b084-e036-11e9-964a-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 7904b084-e036-11e9-964a-12813bfff9fa;
 Thu, 26 Sep 2019 08:20:17 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 30F841000;
 Thu, 26 Sep 2019 01:20:17 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 1CAB43F836;
 Thu, 26 Sep 2019 01:20:14 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Thu, 26 Sep 2019 16:20:02 +0800
Message-Id: <20190926082003.4581-3-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926082003.4581-1-justin.he@arm.com>
References: <20190926082003.4581-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH 2/3] plat/common: Implement a few
 extra registers stub helpers on arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gYXJtNjQsIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZ2lzdGVycyBkdXJpbmcgY29udGV4
dCBzd2l0Y2hpbmcgc28KZmFyLiBUaGlzIHBhdGNoIGRlY291cGxlIHRoZSBhcmNoIHNwZWNpZmlj
IHN0cnVjdHVyZXMvZnVuY3Rpb25zIGluZm8gYXJjaApyZWxhdGVkIGZpbGVzLgoKU2lnbmVkLW9m
Zi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2NvbW1vbi9pbmNsdWRl
L2FybS9hcm02NC9jcHUuaCB8IDI1ICsrKysrKysrKysrKysrKysrKysrKysrKysKIHBsYXQvY29t
bW9uL2luY2x1ZGUveDg2L2NwdS5oICAgICAgIHwgMTAgKysrKysrKysrKwogcGxhdC9jb21tb24v
c3dfY3R4LmMgICAgICAgICAgICAgICAgfCAxMCArKysrKy0tLS0tCiAzIGZpbGVzIGNoYW5nZWQs
IDQwIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcGxhdC9jb21t
b24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02
NC9jcHUuaAppbmRleCAxNDk1MTkyLi4yOTg0MjRlIDEwMDY0NAotLS0gYS9wbGF0L2NvbW1vbi9p
bmNsdWRlL2FybS9hcm02NC9jcHUuaAorKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02
NC9jcHUuaApAQCAtMzIsNyArMzIsMTIgQEAKICAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhU
UkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCiAgKi8KIAorI2lmbmRlZiBfX1BMQVRfQ09N
TU9OX0FSTTY0X0NQVV9IX18KKyNkZWZpbmUgX19QTEFUX0NPTU1PTl9BUk02NF9DUFVfSF9fCisK
ICNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KKyNpbmNs
dWRlIDxzd19jdHguaD4KIAogLyogRGVmaW5lIG1hY3JvcyB0byBhY2Nlc3MgSU8gcmVnaXN0ZXJz
ICovCiAjZGVmaW5lIF9fSU9SRUdfUkVBRChiaXRzKSBcCkBAIC0xMDgsMyArMTEzLDIzIEBAIGlu
dDMyX3Qgc21jY19wc2NpX3NtY19jYWxsKHVpbnQzMl90LCB1aW50NjRfdCwgdWludDY0X3QsIHVp
bnQ2NF90KTsKIHZvaWQgaGFsdCh2b2lkKTsKIHZvaWQgcmVzZXQodm9pZCk7CiB2b2lkIHN5c3Rl
bV9vZmYodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZXh0cmVnc19h
bGlnbih2b2lkKQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxv
bmcgZ2V0X2V4dHJlZ3Nfc2l6ZSh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgc2F2ZV9leHRyZWdzKHN0cnVjdCBzd19jdHggKmN0eCBfX3VudXNlZCkKK3sKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfZXh0cmVncyhzdHJ1Y3Qgc3dfY3R4ICpjdHgg
X191bnVzZWQpCit7Cit9CisKKyNlbmRpZiAvKiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18g
Ki8KZGlmZiAtLWdpdCBhL3BsYXQvY29tbW9uL2luY2x1ZGUveDg2L2NwdS5oIGIvcGxhdC9jb21t
b24vaW5jbHVkZS94ODYvY3B1LmgKaW5kZXggOGFjZDcxZS4uODM4YmNlYSAxMDA2NDQKLS0tIGEv
cGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1LmgKKysrIGIvcGxhdC9jb21tb24vaW5jbHVkZS94
ODYvY3B1LmgKQEAgLTU2LDYgKzU2LDE2IEBAIHN0cnVjdCBfeDg2X2ZlYXR1cmVzIHsKIAogZXh0
ZXJuIHN0cnVjdCBfeDg2X2ZlYXR1cmVzIHg4Nl9jcHVfZmVhdHVyZXM7CiAKK3N0YXRpYyBpbmxp
bmUgdW5zaWduZWQgbG9uZyBnZXRfZXh0cmVnc19hbGlnbih2b2lkKQoreworCXJldHVybiB4ODZf
Y3B1X2ZlYXR1cmVzLmV4dHJlZ3NfYWxpZ247Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bG9uZyBnZXRfZXh0cmVnc19zaXplKHZvaWQpCit7CisJcmV0dXJuIHg4Nl9jcHVfZmVhdHVyZXMu
ZXh0cmVnc19zaXplOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgc2F2ZV9leHRyZWdzKHN0cnVj
dCBzd19jdHggKmN0eCkKIHsKIAlzd2l0Y2ggKHg4Nl9jcHVfZmVhdHVyZXMuc2F2ZSkgewpkaWZm
IC0tZ2l0IGEvcGxhdC9jb21tb24vc3dfY3R4LmMgYi9wbGF0L2NvbW1vbi9zd19jdHguYwppbmRl
eCA4OGEzNzdmLi43NGI5MzVjIDEwMDY0NAotLS0gYS9wbGF0L2NvbW1vbi9zd19jdHguYworKysg
Yi9wbGF0L2NvbW1vbi9zd19jdHguYwpAQCAtNDAsNyArNDAsNyBAQAogI2luY2x1ZGUgPHN3X2N0
eC5oPgogI2luY2x1ZGUgPHVrL2Fzc2VydC5oPgogI2luY2x1ZGUgPHRscy5oPgotI2luY2x1ZGUg
PHg4Ni9jcHUuaD4KKyNpbmNsdWRlIDxjcHUuaD4KIAogc3RhdGljIHZvaWQgKnN3X2N0eF9jcmVh
dGUoc3RydWN0IHVrX2FsbG9jICphbGxvY2F0b3IsIHVuc2lnbmVkIGxvbmcgc3AsCiAJCQkJdW5z
aWduZWQgbG9uZyB0bHNwKTsKQEAgLTYxLDggKzYxLDggQEAgc3RhdGljIHZvaWQgKnN3X2N0eF9j
cmVhdGUoc3RydWN0IHVrX2FsbG9jICphbGxvY2F0b3IsIHVuc2lnbmVkIGxvbmcgc3AsCiAKIAlV
S19BU1NFUlQoYWxsb2NhdG9yICE9IE5VTEwpOwogCi0Jc3ogPSBBTElHTl9VUChzaXplb2Yoc3Ry
dWN0IHN3X2N0eCksIHg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19hbGlnbikKLQkJKyB4ODZfY3B1
X2ZlYXR1cmVzLmV4dHJlZ3Nfc2l6ZTsKKwlzeiA9IEFMSUdOX1VQKHNpemVvZihzdHJ1Y3Qgc3df
Y3R4KSwgZ2V0X2V4dHJlZ3NfYWxpZ24oKSkKKwkJKyBnZXRfZXh0cmVnc19zaXplKCk7CiAJY3R4
ID0gdWtfbWFsbG9jKGFsbG9jYXRvciwgc3opOwogCXVrX3ByX2RlYnVnKCJBbGxvY2F0aW5nICVs
dSBieXRlcyBmb3Igc3cgY3R4IGF0ICVwXG4iLCBzeiwgY3R4KTsKIAlpZiAoY3R4ID09IE5VTEwp
IHsKQEAgLTc0LDkgKzc0LDkgQEAgc3RhdGljIHZvaWQgKnN3X2N0eF9jcmVhdGUoc3RydWN0IHVr
X2FsbG9jICphbGxvY2F0b3IsIHVuc2lnbmVkIGxvbmcgc3AsCiAJY3R4LT50bHNwID0gdGxzcDsK
IAljdHgtPmlwID0gKHVuc2lnbmVkIGxvbmcpIGFzbV90aHJlYWRfc3RhcnRlcjsKIAljdHgtPmV4
dHJlZ3MgPSBBTElHTl9VUCgoKHVpbnRwdHJfdCljdHggKyBzaXplb2Yoc3RydWN0IHN3X2N0eCkp
LAotCQkJCXg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19hbGlnbik7CisJCQkJZ2V0X2V4dHJlZ3Nf
YWxpZ24oKSk7CiAJLy8gSW5pdGlhbGl6ZSBleHRyZWdzIGFyZWE6IHplcm8gb3V0LCB0aGVuIHNh
dmUgYSB2YWxpZCBsYXlvdXQgdG8gaXQuCi0JbWVtc2V0KCh2b2lkICopY3R4LT5leHRyZWdzLCAw
LCB4ODZfY3B1X2ZlYXR1cmVzLmV4dHJlZ3Nfc2l6ZSk7CisJbWVtc2V0KCh2b2lkICopY3R4LT5l
eHRyZWdzLCAwLCBnZXRfZXh0cmVnc19zaXplKCkpOwogCXNhdmVfZXh0cmVncyhjdHgpOwogCiAJ
cmV0dXJuIGN0eDsKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 08:20:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 08:20:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDP0l-0003ge-PM; Thu, 26 Sep 2019 08:20:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDP0k-0003gM-8Q
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 08:20:26 +0000
X-Inumbo-ID: 7a9be598-e036-11e9-964a-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 7a9be598-e036-11e9-964a-12813bfff9fa;
 Thu, 26 Sep 2019 08:20:20 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id C5ACB1000;
 Thu, 26 Sep 2019 01:20:19 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 97E343F836;
 Thu, 26 Sep 2019 01:20:17 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Thu, 26 Sep 2019 16:20:03 +0800
Message-Id: <20190926082003.4581-4-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926082003.4581-1-justin.he@arm.com>
References: <20190926082003.4581-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH 3/3] plat/kvm: Fix overwriting on
 stack for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gYXJtNjQsIHRoZSBfbGlia3ZtcGxhdF9jZmcuYnN0YWNrLmVuZCBpcyB0aGUgbWVtb3J5IHVw
cGVyIGJvdW5kYXJ5LgpBbnkgb3ZlcmZsb3cgd3JpdGluZyBiZXlvbmQgdGhpcyB3aWxsIGNhdXNl
IGFuIGV4Y2VwdGlvbi4KCkZpeCBpdCBieSB3cml0aW5nIHRoZSB0aHJlYWQgaW5zaWRlIHRoZSBi
b3VuZGFyeS4KU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBw
bGF0L2t2bS9tZW1vcnkuYyB8IDMgKystCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCsp
LCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvcGxhdC9rdm0vbWVtb3J5LmMgYi9wbGF0L2t2
bS9tZW1vcnkuYwppbmRleCBlOTZiYWQyLi5kODRlYWVkIDEwMDY0NAotLS0gYS9wbGF0L2t2bS9t
ZW1vcnkuYworKysgYi9wbGF0L2t2bS9tZW1vcnkuYwpAQCAtMTgxLDYgKzE4MSw3IEBAIGludCBf
dWtwbGF0X21lbV9tYXBwaW5nc19pbml0KHZvaWQpCiAKIHZvaWQgdWtwbGF0X3N0YWNrX3NldF9j
dXJyZW50X3RocmVhZCh2b2lkICp0aHJlYWRfYWRkcikKIHsKLQkqKCh1bnNpZ25lZCBsb25nICop
IF9saWJrdm1wbGF0X2NmZy5ic3RhY2suZW5kKSA9CisJdW5zaWduZWQgbG9uZyBzaXplID0gc2l6
ZW9mKHRocmVhZF9hZGRyKTsKKwkqKCh1bnNpZ25lZCBsb25nICopIF9saWJrdm1wbGF0X2NmZy5i
c3RhY2suZW5kIC0gc2l6ZSkgPQogCQkodW5zaWduZWQgbG9uZykgdGhyZWFkX2FkZHI7CiB9Ci0t
IAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 08:55:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 08:55:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDPYc-0006jQ-8f; Thu, 26 Sep 2019 08:55:26 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fOM6=XV=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iDPYb-0006jL-35
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 08:55:25 +0000
X-Inumbo-ID: 60835fce-e03b-11e9-8628-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 60835fce-e03b-11e9-8628-bc764e2007e4;
 Thu, 26 Sep 2019 08:55:23 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9A6281000;
 Thu, 26 Sep 2019 01:55:23 -0700 (PDT)
Received: from [10.37.8.90] (unknown [10.37.8.90])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 1B6513F67D;
 Thu, 26 Sep 2019 01:55:21 -0700 (PDT)
To: Jia He <justin.he@arm.com>, minios-devel@lists.xenproject.org,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190926082003.4581-1-justin.he@arm.com>
 <20190926082003.4581-2-justin.he@arm.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <4dc3b2fc-96f9-690d-0eb8-ec56341da6b3@arm.com>
Date: Thu, 26 Sep 2019 09:55:20 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190926082003.4581-2-justin.he@arm.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/3] plat: Implement tls stub
 for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksCgpPbiA5LzI2LzE5IDk6MjAgQU0sIEppYSBIZSB3cm90ZToKPiBPdGhlcndpc2UsIGFybTY0
IGt2bSBwbGF0IHRhcmdldCB3aWxsIG5vdCBiZSBidWlsdC4KCkkgcmVhZCB0aGlzIGFzICJJdCBp
cyBub3QgcG9zc2libGUgdG8gc2VsZWN0IEtWTSBwbGF0IGZvciBhcm02NCIuIERpZCAKeW91IGlu
dGVuZCB0byBzYXkgdGhhdCB0aGUgY29kZSBkb2VzIG5vdCBjb21waWxlPwoKSWYgc28sIGl0IHdv
dWxkIGJlIGNvdWxkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBiZWNhdXNlIG9mIGEgbmV3IHBhdGNo
IG9yIAp0aGlzIGhhcyBhbHdheXMgYmVlbiBsaWtlIHRoYXQuCgpDaGVlcnMsCgotLSAKSnVsaWVu
IEdyYWxsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 09:07:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 09:07:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDPk5-0007kJ-8W; Thu, 26 Sep 2019 09:07:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDPk2-0007jh-Vd
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 09:07:15 +0000
X-Inumbo-ID: 06ac4662-e03d-11e9-964b-12813bfff9fa
Received: from EUR04-VI1-obe.outbound.protection.outlook.com (unknown
 [40.107.8.48]) by localhost (Halon) with ESMTPS
 id 06ac4662-e03d-11e9-964b-12813bfff9fa;
 Thu, 26 Sep 2019 09:07:12 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=HABgEPMro/urbErIDOhfEI3+xge1DqY4XLvJyLsCgIE=;
 b=jm6YNXkljLI550Aap9aZeXDT7k7Xfb20NU/LyK7E//WQiSH3tbB8HBtcSARHh7cjxtgncshFcixAikbQq3C2MAqWxJDNB6t2SM6MbpQKY6zaYOC4vkhsc4xCPahiLA7wg5ItAuSb51H/VzGQiBkQieJO7HuILEyXIDIfniIA3nk=
Received: from VI1PR08CA0133.eurprd08.prod.outlook.com (2603:10a6:800:d5::11)
 by AM0PR08MB3329.eurprd08.prod.outlook.com (2603:10a6:208:57::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.17; Thu, 26 Sep
 2019 09:07:09 +0000
Received: from DB5EUR03FT044.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::200) by VI1PR08CA0133.outlook.office365.com
 (2603:10a6:800:d5::11) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.17 via Frontend
 Transport; Thu, 26 Sep 2019 09:07:09 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT044.mail.protection.outlook.com (10.152.21.167) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2305.15 via Frontend Transport; Thu, 26 Sep 2019 09:07:09 +0000
Received: ("Tessian outbound 081de437afc7:v33");
 Thu, 26 Sep 2019 09:07:07 +0000
X-CR-MTA-TID: 64aa7808
Received: from 3c5e5d80e9af.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.0.57]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 C2F6BAB4-A744-43A3-8D07-C86174FD264E.1; 
 Thu, 26 Sep 2019 09:07:02 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2057.outbound.protection.outlook.com [104.47.0.57])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 3c5e5d80e9af.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Thu, 26 Sep 2019 09:07:02 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=OW1AG4cyTVjNiHTj8zr6aHGpeJkpeb98+W37dRSn/cQttzl5OgKMKwwop7h7HVFHIm7tl0v6LPgc+Yn5hmKFi2OcsfMEk8sp/ydi97diCqWGSM4FDOaI5QgsvOlqzcZlct1cMjNpQiDvgaiEiXP8um4KNB6/YvgGfEOYZBrNCTX3TK/ntxUuzuzzJKgW/ZEk5uw1q0x+HeMAIf4FwKG1d+hl6oVzKj8Z+pjNLrylZcAw4XZAHDuja00lPfKjKs5mtwhwk9AF3bk957WK/B7IzNjB71wMmkxGJyuRcCjrv99B1f0zAKYPZOMi1svTE8mHx4RusXnvPJ8aPWi3XHHfxQ==
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=exp8x/WzKAg7tDs86SM2s4TCy632IhT7Orzxg9WJJhw=;
 b=hR7+9weKX2n/gVLSZjrVKD/+iYCyoGmSzf63uJKWg51+z5K40DeyQwjqTs/5gCuDoZGKmJbZXiok++Qy6Qo97vdK6nTNSYFaZQ9zi6ANFKTatW8rJjh6QI+oCSahaEDq77DGka0QgeAB+Fnd9cHFVczichTeBfHAvJzUbOuGgpaOJSFnTDHAXmWdX+hmmwO995+qzqU6Jf+mlobY5slqjPinQtiKnzJ3AfQK7dkvbLzRFPdEl0dkM2B6mu/4HHT/ERx1qWwHhBp6iK3cfh+HncBQQ7/o52ZrcQ2XZC62BO1Z/H0y1roJZUbC/n+j2xZV9IF6XviOLgQVwwRGiwHdSA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=exp8x/WzKAg7tDs86SM2s4TCy632IhT7Orzxg9WJJhw=;
 b=hlL2pNIzLb9kFc448Ct7j1DditQUryI5wRfdPB2kBqKR3KVjiZeeKLb7U06UBZZ0QUloHPFTFJG9gqpvunEXQmGR7eNPkh4akAu2ZS5I4xlGORmwNSZVovUADAPEa4GvBbul+34ZSGEalsQaByHgUFF9XrBNLGGRwCGnfm/oUS8=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3305.eurprd08.prod.outlook.com (52.134.109.159) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.20; Thu, 26 Sep 2019 09:07:00 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2284.028; Thu, 26 Sep 2019
 09:06:59 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCH 3/3] plat/kvm: Fix overwriting on stack for arm64
Thread-Index: AQHVdENEndPgmfEWQkaN2mU+2iRYN6c9qn6A
Date: Thu, 26 Sep 2019 09:06:59 +0000
Message-ID: <DB7PR08MB308274B6C795FAD66783EC77F7860@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190926082003.4581-1-justin.he@arm.com>
 <20190926082003.4581-4-justin.he@arm.com>
In-Reply-To: <20190926082003.4581-4-justin.he@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 036547a1-6221-47be-aa5e-98da317fed34.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 285f229f-bc24-4b61-1933-08d74260e913
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3305; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3305:|DB7PR08MB3305:|AM0PR08MB3329:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM0PR08MB3329C287F56A4FDF5B8E6E03F7860@AM0PR08MB3329.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:655;OLM:655;
x-forefront-prvs: 0172F0EF77
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(376002)(136003)(366004)(396003)(346002)(199004)(189003)(53754006)(13464003)(186003)(26005)(6116002)(110136005)(305945005)(86362001)(6436002)(7696005)(3846002)(9686003)(71190400001)(102836004)(33656002)(71200400001)(54906003)(76176011)(6506007)(53546011)(55236004)(8676002)(74316002)(316002)(476003)(7736002)(446003)(6246003)(11346002)(66476007)(2501003)(64756008)(66446008)(66556008)(14454004)(76116006)(256004)(55016002)(14444005)(486006)(81156014)(81166006)(2906002)(8936002)(229853002)(52536014)(66066001)(478600001)(25786009)(66946007)(5660300002)(99286004)(4326008);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3305;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: lGAQqMD5I2TSHShzZFN27Hp8BnC1dpPYJv7Uu369bsVcgP5yU5Cg8ZK4yO5SNWLTQmboYbXrdReQAfUZxzGOgixkAvvKdPj7MR/ptqiOOhXSj8/jtDuSKdOAoTV5Rt/mu37im2foWEW7ZQplHljDpwCtqWgeAPBYJqy5eUN7ys6JhVVDrEDiJxlISIcuuGbZr+BXlfm7AG8BlYS8PMLlnt9A0OirE7taHYo0eVu3fB0sgO6/viztHxyT3QHqdsABpBKGSlOLRHDiNNHJ0jCSRrIg5OZqSIoi2d126HQhO+dgEVpbZn6u1Y7FTr/LtMhZHY0lWkytclbiJ4vqLevEgT1jkpALNtNeGKIPs6EFPqv4ln3AHlfkqgKzR42NDjpSGTGlwPYp73sQEPhhAEHN+0hTQY6MJq33Oh/dIJoMP3c=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3305
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT044.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(136003)(396003)(376002)(39860400002)(346002)(189003)(199004)(13464003)(40434004)(53754006)(8936002)(478600001)(316002)(76130400001)(356004)(26826003)(70206006)(70586007)(81166006)(81156014)(8676002)(23696002)(110136005)(22756006)(229853002)(9686003)(55016002)(107886003)(6246003)(2501003)(5024004)(14444005)(4326008)(54906003)(336012)(305945005)(476003)(126002)(436003)(63350400001)(486006)(11346002)(74316002)(446003)(99286004)(47776003)(86362001)(33656002)(47136003)(50466002)(48336001)(66066001)(52536014)(5660300002)(25786009)(7736002)(186003)(2906002)(26005)(7696005)(14454004)(76176011)(6506007)(53546011)(3846002)(6116002)(102836004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB3329;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 7c6fa1f3-1867-4d89-74d4-08d74260e3a4
X-Forefront-PRVS: 0172F0EF77
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: BugVAbG/dFfrc1COY0/brWlEcQYkrVDv6CJeOGb9clDbjQ1qOOIzTLap4/mXv9Gl0M+Cj4MzSlGdRr5exK0xEo+EU8tLCLT2rRSuF20L3whJpmAfa4bxjL9yHI77nBtu2KnRP/aT+1YYu6vGR/trBBcjRKK4S5Vq6T6GQlNjNl56cSjtFMmx1IP+v84gq2l20qpiHSRlQ9HsaLF+FpE5UdDgWCwMEY3vf6zkTJ0t5uVr0HfjS+Ze0+xlURlLBl1VITjpBlTGuB84yWWG80BNM9pr2cvksB5kAlPlEJ2rG8X3XvTGgZc8jHPq58ZXAG2tm50KzVySK2yM9lCoXKy6OyTAzWKRfVKt89qiXTqXwQgYfrFwwDIYXe7SLFENvMJDRChX1G7ySqn8bG+gSluqEaIV8qenEH8D+LdJ+K1EujM=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2019 09:07:09.0360 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 285f229f-bc24-4b61-1933-08d74260e913
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3329
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 3/3] plat/kvm: Fix overwriting
 on stack for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, "Kaly Xin \(Arm
 Technology China\)" <Kaly.Xin@arm.com>, Julien Grall <Julien.Grall@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgYWxsDQpTb3JyeSwgSSB3b3JrZWQgb24gYW4gb2xkIGJhc2Ugb2YgdW5pa3JhZnQgZ2l0IHRy
ZWUuDQpBdCBsZWFzdCBJIHNhdyB0aGlzIHBhdGNoIG5lZWQnIHRvIGJlIGNoYW5nZWQvZHJvcHBl
ZCBkdWUgdG8gYSBsYXRlc3QgY29tbWl0Lg0KDQotLQ0KQ2hlZXJzLA0KSnVzdGluIChKaWEgSGUp
DQoNCg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEppYSBIZSA8anVz
dGluLmhlQGFybS5jb20+DQo+IFNlbnQ6IDIwMTnlubQ55pyIMjbml6UgMTY6MjANCj4gVG86IG1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vlbnplcg0KPiA8c2ltb24u
a3VlbnplckBuZWNsYWIuZXU+DQo+IENjOiBTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldTsgRmVs
aXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PjsNCj4gSnVsaWVuIEdyYWxsIDxKdWxp
ZW4uR3JhbGxAYXJtLmNvbT47IEthbHkgWGluIChBcm0gVGVjaG5vbG9neSBDaGluYSkNCj4gPEth
bHkuWGluQGFybS5jb20+OyBTYW50aWFnby5QYWdhbmlAbmVjbGFiLmV1OyBKdXN0aW4gSGUgKEFy
bQ0KPiBUZWNobm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+DQo+IFN1YmplY3Q6IFtV
TklLUkFGVCBQQVRDSCAzLzNdIHBsYXQva3ZtOiBGaXggb3ZlcndyaXRpbmcgb24gc3RhY2sgZm9y
DQo+IGFybTY0DQo+DQo+IE9uIGFybTY0LCB0aGUgX2xpYmt2bXBsYXRfY2ZnLmJzdGFjay5lbmQg
aXMgdGhlIG1lbW9yeSB1cHBlciBib3VuZGFyeS4NCj4gQW55IG92ZXJmbG93IHdyaXRpbmcgYmV5
b25kIHRoaXMgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uDQo+DQo+IEZpeCBpdCBieSB3cml0aW5n
IHRoZSB0aHJlYWQgaW5zaWRlIHRoZSBib3VuZGFyeS4NCj4gU2lnbmVkLW9mZi1ieTogSmlhIEhl
IDxqdXN0aW4uaGVAYXJtLmNvbT4NCj4gLS0tDQo+ICBwbGF0L2t2bS9tZW1vcnkuYyB8IDMgKyst
DQo+ICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pDQo+DQo+
IGRpZmYgLS1naXQgYS9wbGF0L2t2bS9tZW1vcnkuYyBiL3BsYXQva3ZtL21lbW9yeS5jDQo+IGlu
ZGV4IGU5NmJhZDIuLmQ4NGVhZWQgMTAwNjQ0DQo+IC0tLSBhL3BsYXQva3ZtL21lbW9yeS5jDQo+
ICsrKyBiL3BsYXQva3ZtL21lbW9yeS5jDQo+IEBAIC0xODEsNiArMTgxLDcgQEAgaW50IF91a3Bs
YXRfbWVtX21hcHBpbmdzX2luaXQodm9pZCkNCj4NCj4gIHZvaWQgdWtwbGF0X3N0YWNrX3NldF9j
dXJyZW50X3RocmVhZCh2b2lkICp0aHJlYWRfYWRkcikNCj4gIHsNCj4gLSAgICAgKigodW5zaWdu
ZWQgbG9uZyAqKSBfbGlia3ZtcGxhdF9jZmcuYnN0YWNrLmVuZCkgPQ0KPiArICAgICB1bnNpZ25l
ZCBsb25nIHNpemUgPSBzaXplb2YodGhyZWFkX2FkZHIpOw0KPiArICAgICAqKCh1bnNpZ25lZCBs
b25nICopIF9saWJrdm1wbGF0X2NmZy5ic3RhY2suZW5kIC0gc2l6ZSkgPQ0KPiAgICAgICAgICAg
ICAgICh1bnNpZ25lZCBsb25nKSB0aHJlYWRfYWRkcjsNCj4gIH0NCj4gLS0NCj4gMi4xNy4xDQoN
CklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0
YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYg
eW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2Vu
ZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBv
dGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhl
IGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 09:10:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 09:10:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDPmp-0008Sx-Uo; Thu, 26 Sep 2019 09:10:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=fOM6=XV=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iDPmo-0008Ki-O4
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 09:10:06 +0000
X-Inumbo-ID: 6e333f98-e03d-11e9-97fb-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 6e333f98-e03d-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 09:10:05 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7ADC91000;
 Thu, 26 Sep 2019 02:10:05 -0700 (PDT)
Received: from [10.37.8.90] (unknown [10.37.8.90])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 6844A3F67D;
 Thu, 26 Sep 2019 02:10:03 -0700 (PDT)
To: Jia He <justin.he@arm.com>, minios-devel@lists.xenproject.org,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190926082003.4581-1-justin.he@arm.com>
 <20190926082003.4581-3-justin.he@arm.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <fbc45e10-7c72-c605-619c-c03a4357a98f@arm.com>
Date: Thu, 26 Sep 2019 10:10:02 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190926082003.4581-3-justin.he@arm.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/3] plat/common: Implement a
 few extra registers stub helpers on arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksCgpPbiA5LzI2LzE5IDk6MjAgQU0sIEppYSBIZSB3cm90ZToKPiBPbiBhcm02NCwgd2UgZG9u
J3QgbmVlZCB0aGUgZXh0cmEgcmVnaXN0ZXJzIGR1cmluZyBjb250ZXh0IHN3aXRjaGluZyBzbwo+
IGZhci4gVGhpcyBwYXRjaCBkZWNvdXBsZSB0aGUgYXJjaCBzcGVjaWZpYyBzdHJ1Y3R1cmVzL2Z1
bmN0aW9ucyBpbmZvIGFyY2gKPiByZWxhdGVkIGZpbGVzLgoKQUZBSUNULCB0aGUgcGF0Y2ggYWRk
aW5nIHg4NiBoZWFkZXIgaW4gc3dfY3R4LmMgd2VyZSBjb21taXR0ZWQgbGFzdCAKSmFudWFyeS4g
SXQgd291bGQgYmUgZ29vZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHN1ZGRlbnRseSBhbiBp
c3N1ZS4KCklmIHRoaXMgaXMgYmVjYXVzZSBvZiBvbmUgc2VyaWVzIG5vdCB5ZXQgbWVyZ2VkLCB0
aGVuIGl0IHNob3VsZCBiZSAKc3F1YXNoZWQgaW4gaXQuIElmIG5vdCwgYW4gZXhwbGFuYXRpb24g
aW4gdGhlIGNvbW1pdCBtZXNzYWdlIHRvIGV4cGxhaW4gCnRoZSBleGFjdCBwcm9ibGVtIChwb3Nz
aWJseSBjb21waWxhdGlvbiBpc3N1ZT8pIGlzIHRoZSBiZXN0LgoKPiAKPiBTaWduZWQtb2ZmLWJ5
OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgo+IC0tLQo+ICAgcGxhdC9jb21tb24vaW5jbHVk
ZS9hcm0vYXJtNjQvY3B1LmggfCAyNSArKysrKysrKysrKysrKysrKysrKysrKysrCj4gICBwbGF0
L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaCAgICAgICB8IDEwICsrKysrKysrKysKPiAgIHBsYXQv
Y29tbW9uL3N3X2N0eC5jICAgICAgICAgICAgICAgIHwgMTAgKysrKystLS0tLQo+ICAgMyBmaWxl
cyBjaGFuZ2VkLCA0MCBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n
aXQgYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaCBiL3BsYXQvY29tbW9uL2lu
Y2x1ZGUvYXJtL2FybTY0L2NwdS5oCj4gaW5kZXggMTQ5NTE5Mi4uMjk4NDI0ZSAxMDA2NDQKPiAt
LS0gYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaAo+ICsrKyBiL3BsYXQvY29t
bW9uL2luY2x1ZGUvYXJtL2FybTY0L2NwdS5oCj4gQEAgLTMyLDcgKzMyLDEyIEBACj4gICAgKiBU
SElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+
ICAgICovCj4gICAKPiArI2lmbmRlZiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18KPiArI2Rl
ZmluZSBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18KClRCSCwgdGhpcyBiZWxvbmdzIHRvIGEg
c2VwYXJhdGUgcGF0Y2ggd2l0aCAuLi4KCj4gKwo+ICAgI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4g
KyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4gKyNpbmNsdWRlIDxzd19jdHguaD4KPiAgIAo+
ICAgLyogRGVmaW5lIG1hY3JvcyB0byBhY2Nlc3MgSU8gcmVnaXN0ZXJzICovCj4gICAjZGVmaW5l
IF9fSU9SRUdfUkVBRChiaXRzKSBcCj4gQEAgLTEwOCwzICsxMTMsMjMgQEAgaW50MzJfdCBzbWNj
X3BzY2lfc21jX2NhbGwodWludDMyX3QsIHVpbnQ2NF90LCB1aW50NjRfdCwgdWludDY0X3QpOwo+
ICAgdm9pZCBoYWx0KHZvaWQpOwo+ICAgdm9pZCByZXNldCh2b2lkKTsKPiAgIHZvaWQgc3lzdGVt
X29mZih2b2lkKTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZXh0cmVn
c19hbGlnbih2b2lkKQo+ICt7Cj4gKwlyZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBsb25nIGdldF9leHRyZWdzX3NpemUodm9pZCkKPiArewo+ICsJcmV0dXJuIDA7
Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2V4dHJlZ3Moc3RydWN0IHN3X2N0
eCAqY3R4IF9fdW51c2VkKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCByZXN0
b3JlX2V4dHJlZ3Moc3RydWN0IHN3X2N0eCAqY3R4IF9fdW51c2VkKQo+ICt7Cj4gK30KPiArCj4g
KyNlbmRpZiAvKiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18gKi8KPiBkaWZmIC0tZ2l0IGEv
cGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1LmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9j
cHUuaAo+IGluZGV4IDhhY2Q3MWUuLjgzOGJjZWEgMTAwNjQ0Cj4gLS0tIGEvcGxhdC9jb21tb24v
aW5jbHVkZS94ODYvY3B1LmgKPiArKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaAo+
IEBAIC01Niw2ICs1NiwxNiBAQCBzdHJ1Y3QgX3g4Nl9mZWF0dXJlcyB7Cj4gICAKPiAgIGV4dGVy
biBzdHJ1Y3QgX3g4Nl9mZWF0dXJlcyB4ODZfY3B1X2ZlYXR1cmVzOwo+ICAgCj4gK3N0YXRpYyBp
bmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZXh0cmVnc19hbGlnbih2b2lkKQo+ICt7Cj4gKwlyZXR1
cm4geDg2X2NwdV9mZWF0dXJlcy5leHRyZWdzX2FsaWduOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5s
aW5lIHVuc2lnbmVkIGxvbmcgZ2V0X2V4dHJlZ3Nfc2l6ZSh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4g
eDg2X2NwdV9mZWF0dXJlcy5leHRyZWdzX3NpemU7Cj4gK30KPiArCj4gICBzdGF0aWMgaW5saW5l
IHZvaWQgc2F2ZV9leHRyZWdzKHN0cnVjdCBzd19jdHggKmN0eCkKPiAgIHsKPiAgIAlzd2l0Y2gg
KHg4Nl9jcHVfZmVhdHVyZXMuc2F2ZSkgewo+IGRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9zd19j
dHguYyBiL3BsYXQvY29tbW9uL3N3X2N0eC5jCj4gaW5kZXggODhhMzc3Zi4uNzRiOTM1YyAxMDA2
NDQKPiAtLS0gYS9wbGF0L2NvbW1vbi9zd19jdHguYwo+ICsrKyBiL3BsYXQvY29tbW9uL3N3X2N0
eC5jCj4gQEAgLTQwLDcgKzQwLDcgQEAKPiAgICNpbmNsdWRlIDxzd19jdHguaD4KPiAgICNpbmNs
dWRlIDx1ay9hc3NlcnQuaD4KPiAgICNpbmNsdWRlIDx0bHMuaD4KPiAtI2luY2x1ZGUgPHg4Ni9j
cHUuaD4KPiArI2luY2x1ZGUgPGNwdS5oPgo+ICAgCj4gICBzdGF0aWMgdm9pZCAqc3dfY3R4X2Ny
ZWF0ZShzdHJ1Y3QgdWtfYWxsb2MgKmFsbG9jYXRvciwgdW5zaWduZWQgbG9uZyBzcCwKPiAgIAkJ
CQl1bnNpZ25lZCBsb25nIHRsc3ApOwo+IEBAIC02MSw4ICs2MSw4IEBAIHN0YXRpYyB2b2lkICpz
d19jdHhfY3JlYXRlKHN0cnVjdCB1a19hbGxvYyAqYWxsb2NhdG9yLCB1bnNpZ25lZCBsb25nIHNw
LAo+ICAgCj4gICAJVUtfQVNTRVJUKGFsbG9jYXRvciAhPSBOVUxMKTsKPiAgIAo+IC0Jc3ogPSBB
TElHTl9VUChzaXplb2Yoc3RydWN0IHN3X2N0eCksIHg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19h
bGlnbikKPiAtCQkrIHg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19zaXplOwo+ICsJc3ogPSBBTElH
Tl9VUChzaXplb2Yoc3RydWN0IHN3X2N0eCksIGdldF9leHRyZWdzX2FsaWduKCkpCj4gKwkJKyBn
ZXRfZXh0cmVnc19zaXplKCk7Cj4gICAJY3R4ID0gdWtfbWFsbG9jKGFsbG9jYXRvciwgc3opOwo+
ICAgCXVrX3ByX2RlYnVnKCJBbGxvY2F0aW5nICVsdSBieXRlcyBmb3Igc3cgY3R4IGF0ICVwXG4i
LCBzeiwgY3R4KTsKPiAgIAlpZiAoY3R4ID09IE5VTEwpIHsKPiBAQCAtNzQsOSArNzQsOSBAQCBz
dGF0aWMgdm9pZCAqc3dfY3R4X2NyZWF0ZShzdHJ1Y3QgdWtfYWxsb2MgKmFsbG9jYXRvciwgdW5z
aWduZWQgbG9uZyBzcCwKPiAgIAljdHgtPnRsc3AgPSB0bHNwOwo+ICAgCWN0eC0+aXAgPSAodW5z
aWduZWQgbG9uZykgYXNtX3RocmVhZF9zdGFydGVyOwo+ICAgCWN0eC0+ZXh0cmVncyA9IEFMSUdO
X1VQKCgodWludHB0cl90KWN0eCArIHNpemVvZihzdHJ1Y3Qgc3dfY3R4KSksCj4gLQkJCQl4ODZf
Y3B1X2ZlYXR1cmVzLmV4dHJlZ3NfYWxpZ24pOwo+ICsJCQkJZ2V0X2V4dHJlZ3NfYWxpZ24oKSk7
Cj4gICAJLy8gSW5pdGlhbGl6ZSBleHRyZWdzIGFyZWE6IHplcm8gb3V0LCB0aGVuIHNhdmUgYSB2
YWxpZCBsYXlvdXQgdG8gaXQuCj4gLQltZW1zZXQoKHZvaWQgKiljdHgtPmV4dHJlZ3MsIDAsIHg4
Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19zaXplKTsKPiArCW1lbXNldCgodm9pZCAqKWN0eC0+ZXh0
cmVncywgMCwgZ2V0X2V4dHJlZ3Nfc2l6ZSgpKTsKClRoaXMgaXMgYSBiaXQgYSB3YXN0ZSBmb3Ig
QXJtIGFuZCBhbHNvIHF1aXRlIGRhbmdlcm91cyBiZWNhdXNlIGV4dHJlZ3MgCmlzIG5vdCBnb2lu
ZyB0byBiZSBOVUxMIGJ1dCBwb2ludGluZyBqdXN0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGFsbG9j
YXRlZCAKc3BhY2UuCgpDb3VsZG4ndCB3ZSB0cnkgdG8gYWJzdHJhY3QgaXQgZnVydGhlcj8gTWF5
YmUgYnkgcHJvdmlkaW5nIGEgZnVuY3Rpb24gCnRoYXQgd2lsbCBhbGxvY2F0ZSB0aGUgc3RydWN0
dXJlIGFuZCBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgdGhpbmdzPyAKU29tZXRoaW5nIGxpa2U6
CgpjdHggPSBhcmNoX2FsbG9jX2N0eChhbGxvY2F0b3IpOwoKd2hlcmUgYXJjaF9hbGxvY19jdHgg
Zm9yIHg4NiB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcwoKc3ogPSBBTElHTl9VUChzaXplb2Yoc3Ry
dWN0IHN3X2N0eCksIC4uLikgKyAuLi47CmN0eCA9IHVrX21hbGxvYyguLi4sIHN6KTsKY3R4LT5l
eHRyZWdzID0gLi4uCm1lbXNldChjdHgtPmV4dHJlZ3MsIDAsIC4uLikKc2F2ZV9jdHhfcmVncygp
OwpyZXR1cm4gY3R4OwoKRm9yIGFybSwgaXQgd291bGQgYmU6CgpyZXR1cm4gdWtfbWFsbG9jKC4u
Liwgc2l6ZW9mKHN0cnVjdCBzd19jdHgpKTsKCgpDaGVlcnMsCgotLSAKSnVsaWVuIEdyYWxsCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:02:55 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:02:55 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQbu-0005Wh-1n; Thu, 26 Sep 2019 10:02:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQbs-0005WY-PI
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:02:52 +0000
X-Inumbo-ID: ccbb9be4-e044-11e9-964d-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id ccbb9be4-e044-11e9-964d-12813bfff9fa;
 Thu, 26 Sep 2019 10:02:51 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 814254008D;
 Thu, 26 Sep 2019 12:02:50 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:28 +0200
Message-Id: <20190926100335.8339-1-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 0/3] Initial port of
 http-parser to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIGh0dHAtcGFyc2VyIHRvIFVuaWtyYWZ0IGFzIGFu
IGV4dGVybmFsCmxpYnJhcnkuIE5ld2xpYmMgaXMgcmVxdWlyZWQuCgpUZXN0ZWQgd2l0aCAndGVz
dC5jJyBzdXBwb3J0ZWQgYnkgdGhlIGxpYnJhcnkuIEFsbW9zdCBhbGwgdGVzdCBhcmUKcGFzc2lu
Zywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICd0ZXN0IHZlcnkgbGFyZ2UgY2h1bmtlZCByZXNwb25z
ZScKdGhlICdyZXNwb25zZSBzY2FuIC4uLicgdGVzdHMuCgpDaGFuZ2VzIHNpbmNlIHYxOgotIEVk
aXRlZCBDb25maWcudWsgdG8gdXNlICdjb25maWcnIGluc3RlYWQgb2YgJ21lbnVjb25maWcnCi0g
RWRpdGVkIENvbmZpZy51ayBhbmQgY2hhbmdlZCB0aGUgJ3NlbGVjdCBIQVZFX0xJQkMnIHRvICdz
ZWxlY3QgTElCTkVXTElCQycgYXMgaXQgZGVwZW5kcyBuZXdsaWIKLSBFZGl0ZWQgQ29uZmlnLnVr
IGFuZCBjaGFuZ2VkIHdoaXRlIHNwYWNlcyBmb3IgdGFicwotIEVkaXRlZCBNYWtlZmlsZS51ayB0
byBjaGFuZ2UgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgZnJvbSAnaHR0cF9wYXJzZXInIHRvICds
aWJodHRwX3BhcnNlcicKLSBFZGl0ZWQgTWFrZWZpbGUudWsgdG8gcmVtb3ZlIHRoZSAvaW5jbHVk
ZSBmb2xkZXIgYXMgdGhlcmUgaXMgbm9uZSBpbiB0aGUgYXJjaGl2ZQoKU2FudGlhZ28gUGFnYW5p
ICgzKToKICBJbnRyb2R1Y2UgbGlicmFyeSBza2VsZXRvbgogIEFkZCBNYWtlZmlsZS51awogIEV4
cG9ydCBzeW1ib2xzCgogQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKwogQ09OVFJJQlVUSU5HLm1k
IHwgIDQgKysrKwogQ09QWUlORy5tZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwogQ29uZmlnLnVrICAgICAgIHwgIDQgKysrKwogTUFJTlRBSU5FUlMubWQgIHwgMTEg
KysrKysrKysrCiBNYWtlZmlsZS51ayAgICAgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiBSRUFETUUubWQgICAgICAgfCAgNSArKysrCiBleHBv
cnRzeW1zLnVrICAgfCAxNCArKysrKysrKysrKwogOCBmaWxlcyBjaGFuZ2VkLCAxNDMgaW5zZXJ0
aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUg
MTAwNjQ0IENPTlRSSUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVS
Uy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQg
UkVBRE1FLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awoKLS0gCjIuMjIuMAoK
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1k
ZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:02:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:02:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQby-0005XP-3f; Thu, 26 Sep 2019 10:02:58 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQbx-0005X7-5K
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:02:57 +0000
X-Inumbo-ID: cece3f90-e044-11e9-8628-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id cece3f90-e044-11e9-8628-bc764e2007e4;
 Thu, 26 Sep 2019 10:02:54 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 2F2504008D;
 Thu, 26 Sep 2019 12:02:54 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:29 +0200
Message-Id: <20190926100335.8339-2-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926100335.8339-1-santiago.pagani@neclab.eu>
References: <20190926100335.8339-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 1/3] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKwogQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKwog
Q09QWUlORy5tZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCiBDb25maWcudWsgICAgICAgfCAgNCArKysrCiBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysr
KysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDUgKysrKysKIGV4cG9ydHN5bXMudWsgICB8ICAx
ICsKIDcgZmlsZXMgY2hhbmdlZCwgNjggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0
IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPTlRSSUJVVElORy5tZAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IFJF
QURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKCmRpZmYgLS1naXQgYS9D
T0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZTEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTczMDA0MQotLS0gL2Rldi9udWxsCisrKyBiL0NPRElOR19TVFlMRS5tZApA
QCAtMCwwICsxLDQgQEAKK0NvZGluZyBTdHlsZQorPT09PT09PT09PT09CisKK1BsZWFzZSByZWZl
ciB0byB0aGUgYENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBv
c2l0b3J5LgpkaWZmIC0tZ2l0IGEvQ09OVFJJQlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNTVlY2EKLS0tIC9kZXYvbnVsbAor
KysgYi9DT05UUklCVVRJTkcubWQKQEAgLTAsMCArMSw0IEBACitDb250cmlidXRpbmcgdG8gVW5p
a3JhZnQKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUgYENP
TlRSSUJVVElORy5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgpkaWZm
IC0tZ2l0IGEvQ09QWUlORy5tZCBiL0NPUFlJTkcubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDdiM2Y0MQotLS0gL2Rldi9udWxsCisrKyBiL0NPUFlJTkcubWQKQEAgLTAs
MCArMSwzOSBAQAorTGljZW5zZQorPT09PT09PQorCitVbmlrcmFmdCBodHRwLXBhcnNlciB3cmFw
cGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlu
cyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQgbGlidXVpZCB3aXRoIFVuaWtyYWZ0LgorRWFjaCBDIGNv
ZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRoZQorY29w
eXJpZ2h0IG93bmVyIGFuZCB1bmRlciB3aGljaCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGUgY29k
ZSBpcworbGljZW5zZWQuIElmIHN1Y2ggYSBsaWNlbmNlIG5vdGUgaXMgbWlzc2luZywgdGhlIGZv
bGxvd2luZyBjb3B5cmlnaHQKK25vdGljZSB3aWxsIGFwcGx5OgorCisJQ29weXJpZ2h0IChjKSAy
MDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworCWFyZSBtZXQ6CisKKwkxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorCSAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCTMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKwlBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisJTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisJSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisJUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc2OTdlCi0tLSAvZGV2L251bGwKKysrIGIvQ29u
ZmlnLnVrCkBAIC0wLDAgKzEsNCBAQAorY29uZmlnIExJQkhUVFBfUEFSU0VSCisJYm9vbCAiaHR0
cC1wYXJzZXIgLSBhIHBhcnNlciBmb3IgSFRUUCBtZXNzYWdlcyB3cml0dGVuIGluIEMiCisJZGVm
YXVsdCB5CisJc2VsZWN0IExJQk5FV0xJQkMKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTLm1kIGIv
TUFJTlRBSU5FUlMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VkY2I3
NAotLS0gL2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTLm1kCkBAIC0wLDAgKzEsMTEgQEAKK01h
aW50YWluZXJzIExpc3QKKz09PT09PT09PT09PT09PT0KKworRm9yIG5vdGVzIG9uIGhvdyB0byBy
ZWFkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byBgTUFJTlRBSU5FUlMubWRgIGlu
Cit0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgorCisJTElCSFRUUF9QQVJTRVItVU5JS1JB
RlQKKwlNOglGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+CisJTToJU2FudGlh
Z28gUGFnYW5pIDxzYW50aWFnby5wYWdhbmlAbmVjbGFiLmV1PgorCUw6CW1pbmlvcy1kZXZlbEBs
aXN0cy54ZW4ub3JnCisJRjogKgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmY2I1M2UKLS0tIC9kZXYvbnVsbAor
KysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw1IEBACitodHRwLXBhcnNlciBmb3IgVW5pa3JhZnQK
Kz09PT09PT09PT09PT09PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBh
cyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2AKK3N1YmRpcmVjdG9yeSBv
ZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvZXhwb3J0c3ltcy51
ayBiL2V4cG9ydHN5bXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIx
ZTk0ZgotLS0gL2Rldi9udWxsCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTAsMCArMSBAQAorbm9u
ZQotLSAKMi4yMi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21p
bmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:02:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:02:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQbz-0005Xn-5S; Thu, 26 Sep 2019 10:02:59 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQbx-0005XJ-Qr
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:02:57 +0000
X-Inumbo-ID: cfd2bf6a-e044-11e9-964d-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id cfd2bf6a-e044-11e9-964d-12813bfff9fa;
 Thu, 26 Sep 2019 10:02:56 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id C687344614;
 Thu, 26 Sep 2019 12:02:55 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:31 +0200
Message-Id: <20190926100335.8339-4-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926100335.8339-1-santiago.pagani@neclab.eu>
References: <20190926100335.8339-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogZXhwb3J0c3ltcy51ayB8IDE1ICsrKysrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDE0
IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVr
IGIvZXhwb3J0c3ltcy51awppbmRleCA2MjFlOTRmLi45OTViMjU2IDEwMDY0NAotLS0gYS9leHBv
cnRzeW1zLnVrCisrKyBiL2V4cG9ydHN5bXMudWsKQEAgLTEgKzEsMTQgQEAKLW5vbmUKK2h0dHBf
Ym9keV9pc19maW5hbAoraHR0cF9lcnJub19kZXNjcmlwdGlvbgoraHR0cF9lcnJub19uYW1lCito
dHRwX21lc3NhZ2VfbmVlZHNfZW9mCitodHRwX21ldGhvZF9zdHIKK2h0dHBfcGFyc2VyX2V4ZWN1
dGUKK2h0dHBfcGFyc2VyX2luaXQKK2h0dHBfcGFyc2VyX3BhcnNlX3VybAoraHR0cF9wYXJzZXJf
cGF1c2UKK2h0dHBfcGFyc2VyX3NldHRpbmdzX2luaXQKK2h0dHBfcGFyc2VyX3VybF9pbml0Cito
dHRwX3BhcnNlcl92ZXJzaW9uCitodHRwX3Nob3VsZF9rZWVwX2FsaXZlCitodHRwX3N0cmVycm9y
X3RhYgotLSAKMi4yMi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVu
cHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:03:03 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:03:03 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQc3-0005Ye-6z; Thu, 26 Sep 2019 10:03:03 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQc2-0005YS-5w
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:03:02 +0000
X-Inumbo-ID: cf595d96-e044-11e9-8628-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id cf595d96-e044-11e9-8628-bc764e2007e4;
 Thu, 26 Sep 2019 10:02:55 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 10B5D44612;
 Thu, 26 Sep 2019 12:02:55 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:30 +0200
Message-Id: <20190926100335.8339-3-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926100335.8339-1-santiago.pagani@neclab.eu>
References: <20190926100335.8339-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v2 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogTWFrZWZpbGUudWsgfCA2MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFr
ZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjNzMxZgotLS0g
L2Rldi9udWxsCisrKyBiL01ha2VmaWxlLnVrCkBAIC0wLDAgKzEsNjIgQEAKKyMgIGh0dHAtcGFy
c2VyIE1ha2VmaWxlLnVjCisjCisjICBBdXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWlj
aUBuZWNsYWIuZXU+CisjCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRk
LiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjCisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyAgVEhJUyBIRUFERVIg
TUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyMKKworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmh0dHBfcGFyc2VyLCQoQ09ORklH
X0xJQkhUVFBfUEFSU0VSKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9WRVJTSU9OPXYyLjguMQor
TElCSFRUUF9QQVJTRVJfVVJMPWh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvaHR0cC1wYXJzZXIv
YXJjaGl2ZS8kKExJQkhUVFBfUEFSU0VSX1ZFUlNJT04pLnppcAorTElCSFRUUF9QQVJTRVJfU1VC
RElSPWh0dHAtcGFyc2VyLTIuOC4xCiskKGV2YWwgJChjYWxsIGZldGNoLGxpYmh0dHBfcGFyc2Vy
LCQoTElCSFRUUF9QQVJTRVJfVVJMKSwkKExJQkhUVFBfUEFSU0VSX1ZFUlNJT04pLnppcCkpCisK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCitMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQ9JChMSUJIVFRQX1BBUlNFUl9PUklHSU4pLyQo
TElCSFRUUF9QQVJTRVJfU1VCRElSKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJy
YXJ5IGluY2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQ0lOQ0xVREVTLSQoQ09ORklH
X0xJQkhUVFBfUEFSU0VSKSArPSAtSSQoTElCSFRUUF9QQVJTRVJfRVhUUkFDVEVEKQorCisjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworIyBTb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor
TElCSFRUUF9QQVJTRVJfU1JDUy15ICs9ICQoTElCSFRUUF9QQVJTRVJfRVhUUkFDVEVEKS9odHRw
X3BhcnNlci5jCi0tIAoyLjIyLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz
dGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:03:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:03:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQc8-0005aX-AX; Thu, 26 Sep 2019 10:03:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQc7-0005ZS-6G
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:03:07 +0000
X-Inumbo-ID: d4a9e1a8-e044-11e9-97fb-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id d4a9e1a8-e044-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 10:03:04 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 049D94008D;
 Thu, 26 Sep 2019 12:03:04 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:32 +0200
Message-Id: <20190926100335.8339-5-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926100335.8339-1-santiago.pagani@neclab.eu>
References: <20190926100335.8339-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ UNIKRAFT/HTTP_PARSER PATCH v3 0/3] Initial port of
 http-parser to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIGh0dHAtcGFyc2VyIHRvIFVuaWtyYWZ0IGFzIGFu
IGV4dGVybmFsCmxpYnJhcnkuIE5ld2xpYmMgaXMgcmVxdWlyZWQuCgpUZXN0ZWQgd2l0aCAndGVz
dC5jJyBzdXBwb3J0ZWQgYnkgdGhlIGxpYnJhcnkuIEFsbW9zdCBhbGwgdGVzdCBhcmUKcGFzc2lu
Zywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICd0ZXN0IHZlcnkgbGFyZ2UgY2h1bmtlZCByZXNwb25z
ZScKdGhlICdyZXNwb25zZSBzY2FuIC4uLicgdGVzdHMuCgpDaGFuZ2VzOgp2Mi0+djM6Ci0gRWRp
dGVkIHRoZSB2ZXJzaW9uIG51bWJlciB0byByZW1vdmUgdGhlICd2JyBzbyB3ZSBjYW4gcmUtdXNl
IHRoZSB2YXJpYWJsZSBmb3IgdGhlIHN1YmRpcgotIFByZXBhcmUgYW4gaW5jbHVkZSBmb2xkZXIg
dGhhdCBqdXN0IGhhcyBsaW5rcyB0byB0aGUgaGVhZGVyIGZpbGVzCi0gQWRkZWQgcnVsZXMgZm9y
IGxpbmtpbmcgdGhlIGhlYWRlciBmaWxlcyBpbiB0aGUgbmV3IGluY2x1ZGUgZm9sZGVyCnYxLT52
MjoKLSBFZGl0ZWQgQ29uZmlnLnVrIHRvIHVzZSAnY29uZmlnJyBpbnN0ZWFkIG9mICdtZW51Y29u
ZmlnJwotIEVkaXRlZCBDb25maWcudWsgYW5kIGNoYW5nZWQgdGhlICdzZWxlY3QgSEFWRV9MSUJD
JyB0byAnc2VsZWN0IExJQk5FV0xJQkMnIGFzIGl0IGRlcGVuZHMgbmV3bGliCi0gRWRpdGVkIENv
bmZpZy51ayBhbmQgY2hhbmdlZCB3aGl0ZSBzcGFjZXMgZm9yIHRhYnMKLSBFZGl0ZWQgTWFrZWZp
bGUudWsgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGZyb20gJ2h0dHBfcGFyc2Vy
JyB0byAnbGliaHR0cF9wYXJzZXInCi0gRWRpdGVkIE1ha2VmaWxlLnVrIHRvIHJlbW92ZSB0aGUg
L2luY2x1ZGUgZm9sZGVyIGFzIHRoZXJlIGlzIG5vbmUgaW4gdGhlIGFyY2hpdmUKClNhbnRpYWdv
IFBhZ2FuaSAoMyk6CiAgSW50cm9kdWNlIGxpYnJhcnkgc2tlbGV0b24KICBBZGQgTWFrZWZpbGUu
dWsKICBFeHBvcnQgc3ltYm9scwoKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKwogQ09OVFJJQlVU
SU5HLm1kIHwgIDQgKysrCiBDT1BZSU5HLm1kICAgICAgfCAzOSArKysrKysrKysrKysrKysrKysr
KysrKysrCiBDb25maWcudWsgICAgICAgfCAgNCArKysKIE1BSU5UQUlORVJTLm1kICB8IDExICsr
KysrKysrCiBNYWtlZmlsZS51ayAgICAgfCA3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrCiBSRUFETUUubWQgICAgICAgfCAgNSArKysrCiBleHBvcnRz
eW1zLnVrICAgfCAxNCArKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMTU2IGluc2VydGlvbnMo
KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBDT05UUklCVVRJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCiBjcmVhdGUg
bW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURN
RS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKCi0tIAoyLjIyLjAKCgpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:03:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:03:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQc8-0005aS-8e; Thu, 26 Sep 2019 10:03:08 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQc7-0005ZQ-3L
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:03:07 +0000
X-Inumbo-ID: d5ca33f8-e044-11e9-964d-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id d5ca33f8-e044-11e9-964d-12813bfff9fa;
 Thu, 26 Sep 2019 10:03:06 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id C6E9544612;
 Thu, 26 Sep 2019 12:03:05 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:35 +0200
Message-Id: <20190926100335.8339-8-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926100335.8339-1-santiago.pagani@neclab.eu>
References: <20190926100335.8339-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ PATCH v3 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogZXhwb3J0c3ltcy51ayB8IDE0ICsrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTQg
aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVr
CmluZGV4IGU2OWRlMjkuLjk5NWIyNTYgMTAwNjQ0Ci0tLSBhL2V4cG9ydHN5bXMudWsKKysrIGIv
ZXhwb3J0c3ltcy51awpAQCAtMCwwICsxLDE0IEBACitodHRwX2JvZHlfaXNfZmluYWwKK2h0dHBf
ZXJybm9fZGVzY3JpcHRpb24KK2h0dHBfZXJybm9fbmFtZQoraHR0cF9tZXNzYWdlX25lZWRzX2Vv
ZgoraHR0cF9tZXRob2Rfc3RyCitodHRwX3BhcnNlcl9leGVjdXRlCitodHRwX3BhcnNlcl9pbml0
CitodHRwX3BhcnNlcl9wYXJzZV91cmwKK2h0dHBfcGFyc2VyX3BhdXNlCitodHRwX3BhcnNlcl9z
ZXR0aW5nc19pbml0CitodHRwX3BhcnNlcl91cmxfaW5pdAoraHR0cF9wYXJzZXJfdmVyc2lvbgor
aHR0cF9zaG91bGRfa2VlcF9hbGl2ZQoraHR0cF9zdHJlcnJvcl90YWIKLS0gCjIuMjIuMAoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:03:13 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:03:13 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQcD-0005bw-C9; Thu, 26 Sep 2019 10:03:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQcC-0005bf-6b
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:03:12 +0000
X-Inumbo-ID: d50f2090-e044-11e9-8628-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id d50f2090-e044-11e9-8628-bc764e2007e4;
 Thu, 26 Sep 2019 10:03:05 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 9A74744612;
 Thu, 26 Sep 2019 12:03:04 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:33 +0200
Message-Id: <20190926100335.8339-6-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926100335.8339-1-santiago.pagani@neclab.eu>
References: <20190926100335.8339-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ PATCH v3 1/3] Introduce library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKwogQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKwog
Q09QWUlORy5tZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCiBDb25maWcudWsgICAgICAgfCAgNCArKysrCiBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysr
KysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDUgKysrKysKIGV4cG9ydHN5bXMudWsgICB8ICAw
CiA3IGZpbGVzIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBD
T0RJTkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBj
cmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFE
TUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCgpkaWZmIC0tZ2l0IGEvQ09E
SU5HX1NUWUxFLm1kIGIvQ09ESU5HX1NUWUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU3MzAwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQKQEAg
LTAsMCArMSw0IEBACitDb2RpbmcgU3R5bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIg
dG8gdGhlIGBDT0RJTkdfU1RZTEUubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3Np
dG9yeS4KZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjU1ZWNhCi0tLSAvZGV2L251bGwKKysr
IGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsNCBAQAorQ29udHJpYnV0aW5nIHRvIFVuaWty
YWZ0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05U
UklCVVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAt
LWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFjZmUyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0wLDAg
KzEsMzkgQEAKK0xpY2Vuc2UKKz09PT09PT0KKworVW5pa3JhZnQgaHR0cC1wYXJzZXIgd3JhcHBl
cnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMg
d3JhcHBlciBjb2RlIHRvIGJ1aWxkIGh0dHAtcGFyc2VyIHdpdGggVW5pa3JhZnQuCitFYWNoIEMg
Y29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBzaG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlCitj
b3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBj
b2RlIGlzCitsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUg
Zm9sbG93aW5nIGxpY2Vuc2UKK25vdGljZSB3aWxsIGFwcGx5OgorCisJQ29weXJpZ2h0IChjKSAy
MDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworCWFyZSBtZXQ6CisKKwkxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorCSAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCTMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKwlBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisJTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisJSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisJUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZmNTJmCi0tLSAvZGV2L251bGwKKysrIGIvQ29u
ZmlnLnVrCkBAIC0wLDAgKzEsNCBAQAorY29uZmlnIExJQkhUVFBfUEFSU0VSCisJYm9vbCAiaHR0
cC1wYXJzZXIgLSBhIHBhcnNlciBmb3IgSFRUUCBtZXNzYWdlcyIKKwlkZWZhdWx0IHkKKwlzZWxl
Y3QgTElCTkVXTElCQwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJTkVSUy5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRjYjc0Ci0tLSAvZGV2L251
bGwKKysrIGIvTUFJTlRBSU5FUlMubWQKQEAgLTAsMCArMSwxMSBAQAorTWFpbnRhaW5lcnMgTGlz
dAorPT09PT09PT09PT09PT09PQorCitGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZv
cm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4KK3RoZSBtYWluIFVu
aWtyYWZ0IHJlcG9zaXRvcnkuCisKKwlMSUJIVFRQX1BBUlNFUi1VTklLUkFGVAorCU06CUZlbGlw
ZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKwlNOglTYW50aWFnbyBQYWdhbmkgPHNh
bnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+CisJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcK
KwlGOiAqCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjYjUzZQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5t
ZApAQCAtMCwwICsxLDUgQEAKK2h0dHAtcGFyc2VyIGZvciBVbmlrcmFmdAorPT09PT09PT09PT09
PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhl
IGRvY3VtZW50YXRpb24gaW4gdGhlIGBkb2MvYAorc3ViZGlyZWN0b3J5IG9mIHRoZSBtYWluIHVu
aWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3lt
cy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tIAoyLjIy
LjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 10:03:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 10:03:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDQcI-0005dM-Et; Thu, 26 Sep 2019 10:03:18 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=c61G=XV=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDQcH-0005d4-6P
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 10:03:17 +0000
X-Inumbo-ID: d566cdcc-e044-11e9-8628-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id d566cdcc-e044-11e9-8628-bc764e2007e4;
 Thu, 26 Sep 2019 10:03:05 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 354624008D;
 Thu, 26 Sep 2019 12:03:05 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Thu, 26 Sep 2019 12:03:34 +0200
Message-Id: <20190926100335.8339-7-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926100335.8339-1-santiago.pagani@neclab.eu>
References: <20190926100335.8339-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [ PATCH v3 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogTWFrZWZpbGUudWsgfCA3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFr
ZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3OWZiZgotLS0g
L2Rldi9udWxsCisrKyBiL01ha2VmaWxlLnVrCkBAIC0wLDAgKzEsNzUgQEAKKyMgIGh0dHAtcGFy
c2VyIE1ha2VmaWxlLnVjCisjCisjICBBdXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWlj
aUBuZWNsYWIuZXU+CisjCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRk
LiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjCisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyAgVEhJUyBIRUFERVIg
TUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyMKKworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmh0dHBfcGFyc2VyLCQoQ09ORklH
X0xJQkhUVFBfUEFSU0VSKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9WRVJTSU9OPTIuOC4xCitM
SUJIVFRQX1BBUlNFUl9VUkw9aHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9odHRwLXBhcnNlci9h
cmNoaXZlL3YkKExJQkhUVFBfUEFSU0VSX1ZFUlNJT04pLnppcAorTElCSFRUUF9QQVJTRVJfU1VC
RElSPWh0dHAtcGFyc2VyLSQoTElCSFRUUF9QQVJTRVJfVkVSU0lPTikKKyQoZXZhbCAkKGNhbGwg
ZmV0Y2gsbGliaHR0cF9wYXJzZXIsJChMSUJIVFRQX1BBUlNFUl9VUkwpLHYkKExJQkhUVFBfUEFS
U0VSX1ZFUlNJT04pLnppcCkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQ9JChMSUJI
VFRQX1BBUlNFUl9PUklHSU4pLyQoTElCSFRUUF9QQVJTRVJfU1VCRElSKQorCisjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IGluY2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsbGliaHR0cF9wYXJzZXIvaW5jbHVkZSkKK0NJTkNM
VURFUy0kKENPTkZJR19MSUJIVFRQX1BBUlNFUikgKz0gLUkkKExJQkhUVFBfUEFSU0VSX0JVSUxE
KS9pbmNsdWRlCitDUFBJTkNMVURFUy0kKENPTkZJR19MSUJIVFRQX1BBUlNFUikgKz0gLUkkKExJ
QkhUVFBfUEFSU0VSX0JVSUxEKS9pbmNsdWRlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj
IFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9TUkNTLXkg
Kz0gJChMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQpL2h0dHBfcGFyc2VyLmMKKworIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKyMgTGlicmF5IEFQSSBoZWFkZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIworJChMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQpLyUuaDogJChMSUJIVFRQX1BBUlNFUl9C
VUlMRCkvLm9yaWdpbgorCUAjIGVtcHR5IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8g
YXJjaGl2ZSBleHRyYWN0aW9uCisKKyQoTElCSFRUUF9QQVJTRVJfQlVJTEQpL2luY2x1ZGUvJS5o
OiAkKExJQkhUVFBfUEFSU0VSX0VYVFJBQ1RFRCkvJS5oCisJJChjYWxsIGJ1aWxkX2NtZCxMTixs
aWJodHRwX3BhcnNlciwkQCxsbiAtc2YgJDwgJEApCisKK1VLX1BSRVBBUkUgKz0gJChMSUJIVFRQ
X1BBUlNFUl9CVUlMRCkvaW5jbHVkZS9odHRwX3BhcnNlci5oCi0tIAoyLjIyLjAKCgpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFp
bGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 12:53:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 12:53:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDTGZ-0003Im-VH; Thu, 26 Sep 2019 12:53:03 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDTGY-0003IT-Jw
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 12:53:02 +0000
X-Inumbo-ID: 91b8b97e-e05c-11e9-9651-12813bfff9fa
Received: from EUR03-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.5.43]) by localhost (Halon) with ESMTPS
 id 91b8b97e-e05c-11e9-9651-12813bfff9fa;
 Thu, 26 Sep 2019 12:53:00 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=0UgaBzVg6L/7U0s4QpCGQdccn9xNMtkIgZ2N5mL4R6A=;
 b=GIZYeszX5nkUjOejgTgP4GoDnvGluqHfMpQQN/F5LOZ6SfX8RSRLxkv/et/czJ+fmA1hUWPqBoJtQYRTmXn6dOVprESLsxmZyetFvdNbifGI4C9Pz9NY6IdtBCzdPlVh3cDE9e/HnE8HjoGo47COlChCsKjSGLhcT75O96KkhMU=
Received: from AM6PR08CA0048.eurprd08.prod.outlook.com (2603:10a6:20b:c0::36)
 by VI1PR08MB3758.eurprd08.prod.outlook.com (2603:10a6:803:b8::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.20; Thu, 26 Sep
 2019 12:52:56 +0000
Received: from VE1EUR03FT056.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e09::208) by AM6PR08CA0048.outlook.office365.com
 (2603:10a6:20b:c0::36) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.17 via Frontend
 Transport; Thu, 26 Sep 2019 12:52:56 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 VE1EUR03FT056.mail.protection.outlook.com (10.152.19.28) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2305.15 via Frontend Transport; Thu, 26 Sep 2019 12:52:54 +0000
Received: ("Tessian outbound 0939a6bab6b1:v33");
 Thu, 26 Sep 2019 12:52:52 +0000
X-CR-MTA-TID: 64aa7808
Received: from cfa31dab17cd.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.6.54]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 3FB6C4B3-57D1-4C59-9A6A-65DA58084FF0.1; 
 Thu, 26 Sep 2019 12:52:47 +0000
Received: from EUR02-VE1-obe.outbound.protection.outlook.com
 (mail-ve1eur02lp2054.outbound.protection.outlook.com [104.47.6.54])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id cfa31dab17cd.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Thu, 26 Sep 2019 12:52:47 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=JQj+tdEOS9CaUD3vp1UZ9PNz+v3aOAju3LLWkxHyw/06n6OlqLDUF+qdByevAkEy+xlbDZwLDUUx0GNZHZh/fHLTjaiwgOdt47gCtMmzE4ceg/RlsWxI4j4ttnOYsyAKQEhzPUqKyGBRhBHgYj0c81qX1Bq2glppxhn+bg/Jgu5BvAsL7vqZkqdsPOJYymWAslPn7TRmgnkcmvnOgkvWcdCQU7KHw5aqyWgLq5wz8AqULl8m41YnOPZOQzAwKvGtGxhbzoXPigNQZOsMZRlgUWtTyuairF3wwInDJqZAEUU5j3jLIYp+HMuDrspDAZX/YdJizQnBhOtsH5ILIa44eA==
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=bh8+wx2gQDdbgEkpzU/QsqHfTT+bBTYW0OPShCCLyno=;
 b=LiILnerSiFIFATJJ1H5HfRunh9j4D53ewKJ9rLxrVxUApGass3MqLUPzA11REm8xn1vFx4QmsYtsnXZpbp8XPahnj+tsEmLy+E+YxTUgwcii5YB3EQqvFzCfXSpiyKSECoYXM/qxmyvc/sa6rV389DrZz0Xx++HVoSguLtOiyIGwIWzy6fIYkT2qhvMpK566IyDV26umqruWo9mau7y8PxZZXpScNwicK8mSUqX8Xku8m9QyhJGHidYFgzjKEX/FCGWXz5Zg4SQV2+Jww3WIxN5BluHvnO8iRCllytj0rG+BiuQQx0xbR7H5xt8MbAfcFSfgIMkGw+PGjaGHNXk2GQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=bh8+wx2gQDdbgEkpzU/QsqHfTT+bBTYW0OPShCCLyno=;
 b=CuyGhiAMVxdFbgz8efuJfOakhMygZjtowuzCeI7wSBXVZlMGt5MfFroWYrewfkw7vnQaTGMbt1pdCMFfWLCigFfn9RIdZkW/N0FUwn/w5cds+NdhEbLOMkXPjVHOzhACGldY7CPFcr7QQ58oelOttbHPKHIaa10lomi4HddJRss=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB2987.eurprd08.prod.outlook.com (52.134.109.153) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.27; Thu, 26 Sep 2019 12:52:45 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2284.028; Thu, 26 Sep 2019
 12:52:45 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCH 2/3] plat/common: Implement a few extra
 registers stub helpers on arm64
Thread-Index: AQHVdENBfSsEaZvCAkSC4B/Gwt02bKc9q9QAgAA8ejA=
Date: Thu, 26 Sep 2019 12:52:45 +0000
Message-ID: <DB7PR08MB3082A4EBD835D072987E5047F7860@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190926082003.4581-1-justin.he@arm.com>
 <20190926082003.4581-3-justin.he@arm.com>
 <fbc45e10-7c72-c605-619c-c03a4357a98f@arm.com>
In-Reply-To: <fbc45e10-7c72-c605-619c-c03a4357a98f@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 48609ac6-25a6-48ff-af42-0c0de32b3a98.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [223.167.32.208]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 9527378a-4247-40e1-f84b-08d742807318
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB2987; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB2987:|DB7PR08MB2987:|VI1PR08MB3758:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <VI1PR08MB3758EC94FCD670C7433BA959F7860@VI1PR08MB3758.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:8882;OLM:8882;
x-forefront-prvs: 0172F0EF77
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(366004)(39860400002)(376002)(396003)(346002)(136003)(189003)(199004)(13464003)(14444005)(256004)(66556008)(64756008)(316002)(86362001)(66476007)(2501003)(110136005)(54906003)(66066001)(7696005)(99286004)(14454004)(102836004)(186003)(478600001)(11346002)(25786009)(446003)(486006)(26005)(66446008)(476003)(7736002)(74316002)(6506007)(76176011)(53546011)(76116006)(66946007)(33656002)(81166006)(8936002)(8676002)(5660300002)(6436002)(81156014)(6116002)(305945005)(55016002)(2906002)(6246003)(3846002)(9686003)(71190400001)(71200400001)(229853002)(52536014)(4326008);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB2987;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: UwXRZO5m7sg90BE4RHNGT8WNguNCZnsNI1+zxRMCJB0NrSkMgcqysUfftN0ILqgfStIWJZsGhrjk478kjYYfNGoMTFP6035h73wXFDLM2iaR8R0607bBFk7mJK8TqL/Oa7Gbw7DtSueU3bJ+aZNkauGsGt/FFwq4dDMGcZiPPKaATKAgc0Z4/hHp5u/Enhxwv76AJyEMblz4an/uE1iH9p2P/2ASVQ9G7RTx0JekJd7fh5NrjCHfdFUbtoFeqbAlMAhQdC5GATU53QQvE4gAo9YWxejU17dcUnojBvrtoI2QCt0DkX8hewCD+qMY2dNapb0tRv8EU28CFwMwSMMXFNG9bpZ5IYrRBwdLF407qrZghIr7qUd1Ypw9R+/iDMyZGkHh1kLRKH+1mJHAwfIKIGxwbjgXDhJskx8+Yg/liSQ=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB2987
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: VE1EUR03FT056.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(396003)(346002)(376002)(136003)(189003)(199004)(13464003)(40434004)(5660300002)(229853002)(110136005)(86362001)(47776003)(356004)(14454004)(478600001)(23676004)(26826003)(66066001)(7696005)(99286004)(9686003)(25786009)(126002)(5024004)(336012)(186003)(436003)(22756006)(446003)(11346002)(6506007)(76176011)(63350400001)(53546011)(486006)(14444005)(102836004)(50466002)(2486003)(33656002)(70586007)(107886003)(4326008)(55016002)(70206006)(36906005)(6246003)(81166006)(81156014)(26005)(2906002)(8676002)(76130400001)(74316002)(6116002)(8936002)(476003)(3846002)(316002)(52536014)(305945005)(2501003)(7736002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR08MB3758;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: ef03cae4-2619-49d1-8670-08d742806d61
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:VI1PR08MB3758; 
X-Forefront-PRVS: 0172F0EF77
X-Microsoft-Antispam-Message-Info: I3XTeuenEUfEy6nrfs7K6oyDav7uLKXUxQNXg23EMxiA8AXoeVcMNSDYfFeE1JzfxeQMAOqlt+z2UJPDNTbgdIuCsQBfn5Qe5KQXHT7pLW4t8WBNaRsPo6KPj7N/iVEFDowJie/WPPhtJFkPiKUhr/lHZzFhjegq+dO0pHoPCIw1xn7i77LjZFrW6wqV0RbLPsEZLKn0s7ioyo/Ovf6hRzzbj0OD6tub2fFQZmq+XmrsOrmYjCG0fJLek5xtis9BOoTLYWRk6/rwJhLOkpCcP8FX/GNX9bsjyYlfE048vkZ5g1OlJ1llbwxRmH+Df018CjIOiaE4KbcwBX89OhknWRUq9ZnzI103V2YUZVrnn1djqB8Xsd5Eja+vMSM110Q2zIif8SD+ryKXOtJSy06hF6Xlma//JD6U6BKKPcZh4cU=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2019 12:52:54.9026 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 9527378a-4247-40e1-f84b-08d742807318
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB3758
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 2/3] plat/common: Implement a
 few extra registers stub helpers on arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gU2VudDogMjAxOeW5tDnmnIgyNuaXpSAx
NzoxMA0KPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBh
cm0uY29tPjsgbWluaW9zLQ0KPiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vl
bnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IENjOiBTaGFyYW4uU2FudGhhbmFtQG5l
Y2xhYi5ldTsgRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PjsNCj4gS2FseSBY
aW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47DQo+IFNhbnRpYWdv
LlBhZ2FuaUBuZWNsYWIuZXUNCj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSCAyLzNdIHBs
YXQvY29tbW9uOiBJbXBsZW1lbnQgYSBmZXcgZXh0cmENCj4gcmVnaXN0ZXJzIHN0dWIgaGVscGVy
cyBvbiBhcm02NA0KPg0KPiBIaSwNCj4NCj4gT24gOS8yNi8xOSA5OjIwIEFNLCBKaWEgSGUgd3Jv
dGU6DQo+ID4gT24gYXJtNjQsIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZ2lzdGVycyBkdXJp
bmcgY29udGV4dCBzd2l0Y2hpbmcgc28NCj4gPiBmYXIuIFRoaXMgcGF0Y2ggZGVjb3VwbGUgdGhl
IGFyY2ggc3BlY2lmaWMgc3RydWN0dXJlcy9mdW5jdGlvbnMgaW5mbyBhcmNoDQo+ID4gcmVsYXRl
ZCBmaWxlcy4NCj4NCj4gQUZBSUNULCB0aGUgcGF0Y2ggYWRkaW5nIHg4NiBoZWFkZXIgaW4gc3df
Y3R4LmMgd2VyZSBjb21taXR0ZWQgbGFzdA0KPiBKYW51YXJ5LiBJdCB3b3VsZCBiZSBnb29kIHRv
IHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgc3VkZGVudGx5IGFuIGlzc3VlLg0KPg0KPiBJZiB0aGlz
IGlzIGJlY2F1c2Ugb2Ygb25lIHNlcmllcyBub3QgeWV0IG1lcmdlZCwgdGhlbiBpdCBzaG91bGQg
YmUNCj4gc3F1YXNoZWQgaW4gaXQuIElmIG5vdCwgYW4gZXhwbGFuYXRpb24gaW4gdGhlIGNvbW1p
dCBtZXNzYWdlIHRvIGV4cGxhaW4NCj4gdGhlIGV4YWN0IHByb2JsZW0gKHBvc3NpYmx5IGNvbXBp
bGF0aW9uIGlzc3VlPykgaXMgdGhlIGJlc3QuDQoNClN1cmUsIEkgd2lsbCBleHBsYWluIGl0IGlu
IG1vcmUgZGV0YWlsLg0KPg0KPiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4u
aGVAYXJtLmNvbT4NCj4gPiAtLS0NCj4gPiAgIHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0
L2NwdS5oIHwgMjUNCj4gKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ICAgcGxhdC9jb21t
b24vaW5jbHVkZS94ODYvY3B1LmggICAgICAgfCAxMCArKysrKysrKysrDQo+ID4gICBwbGF0L2Nv
bW1vbi9zd19jdHguYyAgICAgICAgICAgICAgICB8IDEwICsrKysrLS0tLS0NCj4gPiAgIDMgZmls
ZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkNCj4gPg0KPiA+IGRp
ZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaA0KPiBiL3BsYXQv
Y29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L2NwdS5oDQo+ID4gaW5kZXggMTQ5NTE5Mi4uMjk4NDI0
ZSAxMDA2NDQNCj4gPiAtLS0gYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaA0K
PiA+ICsrKyBiL3BsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L2NwdS5oDQo+ID4gQEAgLTMy
LDcgKzMyLDEyIEBADQo+ID4gICAgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBP
UiBNT0RJRklFRCBJTiBBTlkgV0FZLg0KPiA+ICAgICovDQo+ID4NCj4gPiArI2lmbmRlZiBfX1BM
QVRfQ09NTU9OX0FSTTY0X0NQVV9IX18NCj4gPiArI2RlZmluZSBfX1BMQVRfQ09NTU9OX0FSTTY0
X0NQVV9IX18NCj4NCj4gVEJILCB0aGlzIGJlbG9uZ3MgdG8gYSBzZXBhcmF0ZSBwYXRjaCB3aXRo
IC4uLg0KT2theSwgSSB3aWxsIGlzb2xhdGUgdGhpcyBwYXJ0IGFzIGFub3RoZXIgcGF0Y2gNCj4N
Cj4gPiArDQo+ID4gICAjaW5jbHVkZSA8aW50dHlwZXMuaD4NCj4gPiArI2luY2x1ZGUgPHVrL2Vz
c2VudGlhbHMuaD4NCj4gPiArI2luY2x1ZGUgPHN3X2N0eC5oPg0KPiA+DQo+ID4gICAvKiBEZWZp
bmUgbWFjcm9zIHRvIGFjY2VzcyBJTyByZWdpc3RlcnMgKi8NCj4gPiAgICNkZWZpbmUgX19JT1JF
R19SRUFEKGJpdHMpIFwNCj4gPiBAQCAtMTA4LDMgKzExMywyMyBAQCBpbnQzMl90IHNtY2NfcHNj
aV9zbWNfY2FsbCh1aW50MzJfdCwgdWludDY0X3QsDQo+IHVpbnQ2NF90LCB1aW50NjRfdCk7DQo+
ID4gICB2b2lkIGhhbHQodm9pZCk7DQo+ID4gICB2b2lkIHJlc2V0KHZvaWQpOw0KPiA+ICAgdm9p
ZCBzeXN0ZW1fb2ZmKHZvaWQpOw0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBs
b25nIGdldF9leHRyZWdzX2FsaWduKHZvaWQpDQo+ID4gK3sNCj4gPiArICAgcmV0dXJuIDE7DQo+
ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfZXh0cmVn
c19zaXplKHZvaWQpDQo+ID4gK3sNCj4gPiArICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+
ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2V4dHJlZ3Moc3RydWN0IHN3X2N0eCAqY3R4IF9f
dW51c2VkKQ0KPiA+ICt7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZCBy
ZXN0b3JlX2V4dHJlZ3Moc3RydWN0IHN3X2N0eCAqY3R4IF9fdW51c2VkKQ0KPiA+ICt7DQo+ID4g
K30NCj4gPiArDQo+ID4gKyNlbmRpZiAvKiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18gKi8N
Cj4gPiBkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1LmgNCj4gYi9wbGF0
L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaA0KPiA+IGluZGV4IDhhY2Q3MWUuLjgzOGJjZWEgMTAw
NjQ0DQo+ID4gLS0tIGEvcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1LmgNCj4gPiArKysgYi9w
bGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaA0KPiA+IEBAIC01Niw2ICs1NiwxNiBAQCBzdHJ1
Y3QgX3g4Nl9mZWF0dXJlcyB7DQo+ID4NCj4gPiAgIGV4dGVybiBzdHJ1Y3QgX3g4Nl9mZWF0dXJl
cyB4ODZfY3B1X2ZlYXR1cmVzOw0KPiA+DQo+ID4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9u
ZyBnZXRfZXh0cmVnc19hbGlnbih2b2lkKQ0KPiA+ICt7DQo+ID4gKyAgIHJldHVybiB4ODZfY3B1
X2ZlYXR1cmVzLmV4dHJlZ3NfYWxpZ247DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxp
bmUgdW5zaWduZWQgbG9uZyBnZXRfZXh0cmVnc19zaXplKHZvaWQpDQo+ID4gK3sNCj4gPiArICAg
cmV0dXJuIHg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19zaXplOw0KPiA+ICt9DQo+ID4gKw0KPiA+
ICAgc3RhdGljIGlubGluZSB2b2lkIHNhdmVfZXh0cmVncyhzdHJ1Y3Qgc3dfY3R4ICpjdHgpDQo+
ID4gICB7DQo+ID4gICAgIHN3aXRjaCAoeDg2X2NwdV9mZWF0dXJlcy5zYXZlKSB7DQo+ID4gZGlm
ZiAtLWdpdCBhL3BsYXQvY29tbW9uL3N3X2N0eC5jIGIvcGxhdC9jb21tb24vc3dfY3R4LmMNCj4g
PiBpbmRleCA4OGEzNzdmLi43NGI5MzVjIDEwMDY0NA0KPiA+IC0tLSBhL3BsYXQvY29tbW9uL3N3
X2N0eC5jDQo+ID4gKysrIGIvcGxhdC9jb21tb24vc3dfY3R4LmMNCj4gPiBAQCAtNDAsNyArNDAs
NyBAQA0KPiA+ICAgI2luY2x1ZGUgPHN3X2N0eC5oPg0KPiA+ICAgI2luY2x1ZGUgPHVrL2Fzc2Vy
dC5oPg0KPiA+ICAgI2luY2x1ZGUgPHRscy5oPg0KPiA+IC0jaW5jbHVkZSA8eDg2L2NwdS5oPg0K
PiA+ICsjaW5jbHVkZSA8Y3B1Lmg+DQo+ID4NCj4gPiAgIHN0YXRpYyB2b2lkICpzd19jdHhfY3Jl
YXRlKHN0cnVjdCB1a19hbGxvYyAqYWxsb2NhdG9yLCB1bnNpZ25lZCBsb25nIHNwLA0KPiA+ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRsc3ApOw0KPiA+IEBAIC02
MSw4ICs2MSw4IEBAIHN0YXRpYyB2b2lkICpzd19jdHhfY3JlYXRlKHN0cnVjdCB1a19hbGxvYyAq
YWxsb2NhdG9yLA0KPiB1bnNpZ25lZCBsb25nIHNwLA0KPiA+DQo+ID4gICAgIFVLX0FTU0VSVChh
bGxvY2F0b3IgIT0gTlVMTCk7DQo+ID4NCj4gPiAtICAgc3ogPSBBTElHTl9VUChzaXplb2Yoc3Ry
dWN0IHN3X2N0eCksIHg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19hbGlnbikNCj4gPiAtICAgICAg
ICAgICArIHg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19zaXplOw0KPiA+ICsgICBzeiA9IEFMSUdO
X1VQKHNpemVvZihzdHJ1Y3Qgc3dfY3R4KSwgZ2V0X2V4dHJlZ3NfYWxpZ24oKSkNCj4gPiArICAg
ICAgICAgICArIGdldF9leHRyZWdzX3NpemUoKTsNCj4gPiAgICAgY3R4ID0gdWtfbWFsbG9jKGFs
bG9jYXRvciwgc3opOw0KPiA+ICAgICB1a19wcl9kZWJ1ZygiQWxsb2NhdGluZyAlbHUgYnl0ZXMg
Zm9yIHN3IGN0eCBhdCAlcFxuIiwgc3osIGN0eCk7DQo+ID4gICAgIGlmIChjdHggPT0gTlVMTCkg
ew0KPiA+IEBAIC03NCw5ICs3NCw5IEBAIHN0YXRpYyB2b2lkICpzd19jdHhfY3JlYXRlKHN0cnVj
dCB1a19hbGxvYyAqYWxsb2NhdG9yLA0KPiB1bnNpZ25lZCBsb25nIHNwLA0KPiA+ICAgICBjdHgt
PnRsc3AgPSB0bHNwOw0KPiA+ICAgICBjdHgtPmlwID0gKHVuc2lnbmVkIGxvbmcpIGFzbV90aHJl
YWRfc3RhcnRlcjsNCj4gPiAgICAgY3R4LT5leHRyZWdzID0gQUxJR05fVVAoKCh1aW50cHRyX3Qp
Y3R4ICsgc2l6ZW9mKHN0cnVjdCBzd19jdHgpKSwNCj4gPiAtICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeDg2X2NwdV9mZWF0dXJlcy5leHRyZWdzX2FsaWduKTsNCj4gPiArICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2V0X2V4dHJlZ3NfYWxpZ24oKSk7DQo+ID4gICAgIC8vIEluaXRpYWxp
emUgZXh0cmVncyBhcmVhOiB6ZXJvIG91dCwgdGhlbiBzYXZlIGEgdmFsaWQgbGF5b3V0IHRvIGl0
Lg0KPiA+IC0gICBtZW1zZXQoKHZvaWQgKiljdHgtPmV4dHJlZ3MsIDAsIHg4Nl9jcHVfZmVhdHVy
ZXMuZXh0cmVnc19zaXplKTsNCj4gPiArICAgbWVtc2V0KCh2b2lkICopY3R4LT5leHRyZWdzLCAw
LCBnZXRfZXh0cmVnc19zaXplKCkpOw0KPg0KPiBUaGlzIGlzIGEgYml0IGEgd2FzdGUgZm9yIEFy
bSBhbmQgYWxzbyBxdWl0ZSBkYW5nZXJvdXMgYmVjYXVzZSBleHRyZWdzDQo+IGlzIG5vdCBnb2lu
ZyB0byBiZSBOVUxMIGJ1dCBwb2ludGluZyBqdXN0IGFmdGVyIHRoZSBlbmQgb2YgdGhlIGFsbG9j
YXRlZA0KPiBzcGFjZS4NCj4NCj4gQ291bGRuJ3Qgd2UgdHJ5IHRvIGFic3RyYWN0IGl0IGZ1cnRo
ZXI/IE1heWJlIGJ5IHByb3ZpZGluZyBhIGZ1bmN0aW9uDQo+IHRoYXQgd2lsbCBhbGxvY2F0ZSB0
aGUgc3RydWN0dXJlIGFuZCBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgdGhpbmdzPw0KPiBTb21l
dGhpbmcgbGlrZToNCj4NCj4gY3R4ID0gYXJjaF9hbGxvY19jdHgoYWxsb2NhdG9yKTsNCj4NCj4g
d2hlcmUgYXJjaF9hbGxvY19jdHggZm9yIHg4NiB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhcw0KPg0K
PiBzeiA9IEFMSUdOX1VQKHNpemVvZihzdHJ1Y3Qgc3dfY3R4KSwgLi4uKSArIC4uLjsNCj4gY3R4
ID0gdWtfbWFsbG9jKC4uLiwgc3opOw0KPiBjdHgtPmV4dHJlZ3MgPSAuLi4NCj4gbWVtc2V0KGN0
eC0+ZXh0cmVncywgMCwgLi4uKQ0KPiBzYXZlX2N0eF9yZWdzKCk7DQo+IHJldHVybiBjdHg7DQo+
DQo+IEZvciBhcm0sIGl0IHdvdWxkIGJlOg0KPg0KPiByZXR1cm4gdWtfbWFsbG9jKC4uLiwgc2l6
ZW9mKHN0cnVjdCBzd19jdHgpKTsNCj4NCk9rLCBJIHdpbGwgdHJ5IHlvdXIgc3VnZ2VzdGlvbnMu
DQpVbmZvcnR1bmF0ZWx5LCB3aGVuIEkgcmViYXNlZCBteSBwYXRjaGVzIHRvIGxhdGVzdCB1bmlr
cmFmdCB0cmVlLiBJIG1ldCBtb3JlDQppc3N1ZXMgKGF0IGZpcnN0IGdsYW5jZSBub3QgcmVsYXRl
ZCB0byB0aGlzIHBhdGNoIHNlcmllcykuIEkgd2lsbCB0YWtlIG1vcmUgdGltZSB0bw0KZGlnIGlu
dG8gaXQuDQoNCi0tDQpDaGVlcnMsDQpKdXN0aW4gKEppYSBIZSkNCg0KDQo+DQo+IENoZWVycywN
Cj4NCj4gLS0NCj4gSnVsaWVuIEdyYWxsDQpJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29udGVudHMg
b2YgdGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwgYW5kIG1h
eSBhbHNvIGJlIHByaXZpbGVnZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCByZWNpcGll
bnQsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90IGRpc2Ns
b3NlIHRoZSBjb250ZW50cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFueSBwdXJw
b3NlLCBvciBzdG9yZSBvciBjb3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVtLiBUaGFu
ayB5b3UuDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 12:56:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 12:56:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDTKC-0003So-9q; Thu, 26 Sep 2019 12:56:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDTKB-0003Sj-3e
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 12:56:47 +0000
X-Inumbo-ID: 16f0b6be-e05d-11e9-bf31-bc764e2007e4
Received: from EUR03-VE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe09::611]) by localhost (Halon) with ESMTPS
 id 16f0b6be-e05d-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 12:56:44 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=v9f0s26rxLD+8VXcnOqpcKyc5/nDvFivnTWQUv66o2c=;
 b=YjwkyuKSSlFJa5qxKKMLrXL+gD3GBrKBrY3NGkpfwhB6dXsiJqeaN/8oYV3Xo4E3ntHOH/2CyQW4YczGgA2HMM83gMzVw69UuZgnRUNqy5Gva8P0Ck/S3JIJp5JI3mgzeJ689nX7Seipnz/SAHtOtZQvsqWMvoPu66v5VOEe6Zg=
Received: from AM6PR08CA0014.eurprd08.prod.outlook.com (2603:10a6:20b:b2::26)
 by AM4PR0802MB2306.eurprd08.prod.outlook.com (2603:10a6:200:5e::16)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.25; Thu, 26 Sep
 2019 12:56:40 +0000
Received: from AM5EUR03FT028.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::200) by AM6PR08CA0014.outlook.office365.com
 (2603:10a6:20b:b2::26) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2284.23 via Frontend
 Transport; Thu, 26 Sep 2019 12:56:40 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT028.mail.protection.outlook.com (10.152.16.118) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2305.15 via Frontend Transport; Thu, 26 Sep 2019 12:56:39 +0000
Received: ("Tessian outbound 6481c7fa5a3c:v33");
 Thu, 26 Sep 2019 12:56:37 +0000
X-CR-MTA-TID: 64aa7808
Received: from 97cf8eac18bf.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.0.51]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 36DB8452-9879-46D9-9DDC-26CD7057C79C.1; 
 Thu, 26 Sep 2019 12:56:32 +0000
Received: from EUR01-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur01lp2051.outbound.protection.outlook.com [104.47.0.51])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 97cf8eac18bf.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 26 Sep 2019 12:56:32 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=A3k8yozWIbkrfE9g5XeKMHGI6GQadIbd+gPyqblEEErYShIHE+AqXqCElDlVIYdCmYGTc87TKX+vs0KzQPLep2p/mX/scFFVaBow1EC7p38xv8b6cN+jnKHTNl7c33xYt7zE3E7yX54mV5XcMwDvwy+NY9bAaQaIJPwqyr6ygGlXcDvyyXFHL/zJ1IV0NYtuGglhqotAVU415IVMm/syiXcM5Nqm/qhk0zxnpzZBa16TeCDDktrZVranAigOl+PNCu+ps05rxM97SA5wC9R8aDxnowSjiqo5WqNPF82mEzoKP5qtc7jW5GQws2gIA9asbbjiQuE5U5oU03IX1ZR59w==
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=rcu3VwlWu/dWakn0bSwWr0vjzWbHiHpG4kZy1kOXDXY=;
 b=bWlatiZ+j35hYgZVMHOV/thhy0picD/umfXHqysZO37HCf5bhOrW6HbH134N4AP1BRtlJ32D6qh+MIO8ZKxJYt85nojHNib1wDYS1XM9zTdUJwdXLic+aq8eT06zcjAGDZWjNW00c7D3lJzMiBbZb7XSWUDJ1myN2e547rtu/uoOmzGtHPab20Rv1fNtSSiUmVGaXiqDIDUAt2aSk2r6iMQVW7LAZwX1Q6j4NSc3LZ/MeMEEiAKzzsTgaZXi7UO3Y4+6WhRmcZ+ZrhJ17WHEqzkJeee6qiycxdd2y3sBW9cq9qi9EuSS5uzXFt139WjTPp7Vk3P89kRWvBTlC4TrpQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=rcu3VwlWu/dWakn0bSwWr0vjzWbHiHpG4kZy1kOXDXY=;
 b=Ax5VbFObst6iBVmo9+DFR4JRL8w2FuP6huPgUqoe4RRg4Zwiy+B6cSuYidPPM45JW0aXywTyh0MOJVIbDzpV7A97i5YNu5B/dWDQeqIBm+vX4nb2koBU4pARJCsIb8a1+ER2oatsm3guwSY53aChq4U7A/jv1XaWoGVo91ul0y4=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3547.eurprd08.prod.outlook.com (20.177.121.219) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.20; Thu, 26 Sep 2019 12:56:29 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2284.028; Thu, 26 Sep 2019
 12:56:29 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCH 1/3] plat: Implement tls stub for arm64
Thread-Index: AQHVdENAOiYPla/6/kGViOlrm6PGXqc9p7kAgABCfJA=
Date: Thu, 26 Sep 2019 12:56:28 +0000
Message-ID: <DB7PR08MB3082C4826F7840877402FD9DF7860@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190926082003.4581-1-justin.he@arm.com>
 <20190926082003.4581-2-justin.he@arm.com>
 <4dc3b2fc-96f9-690d-0eb8-ec56341da6b3@arm.com>
In-Reply-To: <4dc3b2fc-96f9-690d-0eb8-ec56341da6b3@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: aac97f25-e39e-443f-9860-f2dd130d27e4.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [223.167.32.208]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 564b51a5-aa50-4f40-c262-08d74280f8d9
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:DB7PR08MB3547; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3547:|DB7PR08MB3547:|AM4PR0802MB2306:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM4PR0802MB2306E4E2041394C468F31B6BF7860@AM4PR0802MB2306.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:7691;OLM:7691;
x-forefront-prvs: 0172F0EF77
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(396003)(136003)(366004)(346002)(376002)(13464003)(199004)(189003)(5660300002)(11346002)(8676002)(76176011)(110136005)(54906003)(99286004)(55016002)(26005)(7696005)(9686003)(476003)(33656002)(486006)(6436002)(6246003)(4326008)(25786009)(478600001)(74316002)(7736002)(229853002)(446003)(305945005)(14454004)(71200400001)(71190400001)(76116006)(66946007)(4744005)(2906002)(66066001)(8936002)(3846002)(316002)(52536014)(53546011)(6506007)(66556008)(186003)(2501003)(86362001)(66446008)(66476007)(64756008)(102836004)(256004)(6116002)(81156014)(81166006);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3547;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: EHv/EVbyDasfILtxB7olbNax8H73VDE0xrNMzu3dZEIg92YbLqT276t2/kGc14ScQ8jwFLaVmYYJ8LKND9T1CbwTzBJBaJ0RgaTwnQ2HyOp7IAypQsklVr3yigplKCOs9N1ksjb7U4/GMp02jtb7kUtqqwZARVxiwEqVvi2FDwRz1wl+1pjbthrjlx/7dzneRdX7R06jNI9CwzsnbXGRL4rhJYWEqopLTBvWgK7MSoGtJqefUk+zU0XmdCo2Y6bJ3gp6cdQx+Q6F+8JNhvnn+XJGy8amCCNyaJIY84z/srESjBl8hzuq+FfMppogdgJpdgDciMoaUEACsJ+ntQCYZDmo/QWdAFHrfzDWUiJ+9BWIPKDJPgJGaVmco1yxHr84AKl3pXBHdXh45jXkJDdE22O+28p/NPFjpUbalnPolpc=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3547
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT028.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(396003)(136003)(39860400002)(346002)(376002)(13464003)(189003)(199004)(40434004)(25786009)(52536014)(7696005)(316002)(63350400001)(50466002)(5024004)(305945005)(81156014)(36906005)(7736002)(81166006)(74316002)(54906003)(8676002)(107886003)(110136005)(6246003)(186003)(356004)(86362001)(66066001)(446003)(8936002)(4326008)(22756006)(486006)(53546011)(76130400001)(70206006)(5660300002)(47776003)(70586007)(2501003)(229853002)(14444005)(26005)(99286004)(478600001)(436003)(33656002)(23676004)(76176011)(476003)(11346002)(6506007)(14454004)(55016002)(2906002)(3846002)(336012)(6116002)(126002)(26826003)(102836004)(9686003)(2486003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR0802MB2306;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 3c92284b-11d3-49b4-574d-08d74280f2d1
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM4PR0802MB2306; 
X-Forefront-PRVS: 0172F0EF77
X-Microsoft-Antispam-Message-Info: 65529Qec3LpCB6KZA26BQgEEGeZZpT8FEF1bgi0IJ6xOfbYIs2MC4z5qOQlgvMey42MUDHWPxUu0mpsbHFJJbPAZRF/cRb7O+PZDd/OJ0GhaWq5DGnvmm5u6h/QVVPWQIExxNzPOHLc4M8ChXSFWFI16fnvzAzXmkCfi+Ez3Q4bo3dQ4w35ERoxCE92YlBwDJt0uzKEKVF6dF1HVouH27xufmV/oZa0Y4dR3nZLgHUSJwFcBdjacqL4idunnHugb9L1wmHkx/OIMOTtMSioQfKpXlsr8fRA9d9wYawznwN9UrANX7uX0/mDLOmYv+QElZfWBX98HcqLN/9g7YAB9TNQggqCBG5usPnUvfv1aWmIIoV6X0q0d7287RRkenbZFcVlRBRggNtQ7bGNk9ecTgIZhpWm7JLFLtVrmF8bKwMg=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2019 12:56:39.3911 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 564b51a5-aa50-4f40-c262-08d74280f8d9
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR0802MB2306
Subject: Re: [Minios-devel] [UNIKRAFT PATCH 1/3] plat: Implement tls stub
 for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gU2VudDogMjAxOeW5tDnmnIgyNuaXpSAx
Njo1NQ0KPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBh
cm0uY29tPjsgbWluaW9zLQ0KPiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vl
bnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IENjOiBTaGFyYW4uU2FudGhhbmFtQG5l
Y2xhYi5ldTsgRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PjsNCj4gS2FseSBY
aW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47DQo+IFNhbnRpYWdv
LlBhZ2FuaUBuZWNsYWIuZXUNCj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSCAxLzNdIHBs
YXQ6IEltcGxlbWVudCB0bHMgc3R1YiBmb3IgYXJtNjQNCj4NCj4gSGksDQo+DQo+IE9uIDkvMjYv
MTkgOToyMCBBTSwgSmlhIEhlIHdyb3RlOg0KPiA+IE90aGVyd2lzZSwgYXJtNjQga3ZtIHBsYXQg
dGFyZ2V0IHdpbGwgbm90IGJlIGJ1aWx0Lg0KPg0KPiBJIHJlYWQgdGhpcyBhcyAiSXQgaXMgbm90
IHBvc3NpYmxlIHRvIHNlbGVjdCBLVk0gcGxhdCBmb3IgYXJtNjQiLiBEaWQNCj4geW91IGludGVu
ZCB0byBzYXkgdGhhdCB0aGUgY29kZSBkb2VzIG5vdCBjb21waWxlPw0KSSBpbnRlbmQgdG8gc2F5
IHRoZSBjb2RlIGRvZXNuJ3QgY29tcGlsZSBzdWNjZXNzZnVsbHkuIE1vcmUgdGhhbiB0aGF0LCBp
dCB3aWxsDQpwYW5pYyBzb29uIGFmdGVyIGJvb3RpbmcgdXAuDQoNCj4NCj4gSWYgc28sIGl0IHdv
dWxkIGJlIGNvdWxkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBiZWNhdXNlIG9mIGEgbmV3IHBhdGNo
IG9yDQo+IHRoaXMgaGFzIGFsd2F5cyBiZWVuIGxpa2UgdGhhdC4NClllcy4gb2theQ0KDQotLQ0K
Q2hlZXJzLA0KSnVzdGluIChKaWEgSGUpDQoNCg0KDQpJTVBPUlRBTlQgTk9USUNFOiBUaGUgY29u
dGVudHMgb2YgdGhpcyBlbWFpbCBhbmQgYW55IGF0dGFjaG1lbnRzIGFyZSBjb25maWRlbnRpYWwg
YW5kIG1heSBhbHNvIGJlIHByaXZpbGVnZWQuIElmIHlvdSBhcmUgbm90IHRoZSBpbnRlbmRlZCBy
ZWNpcGllbnQsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBpbW1lZGlhdGVseSBhbmQgZG8gbm90
IGRpc2Nsb3NlIHRoZSBjb250ZW50cyB0byBhbnkgb3RoZXIgcGVyc29uLCB1c2UgaXQgZm9yIGFu
eSBwdXJwb3NlLCBvciBzdG9yZSBvciBjb3B5IHRoZSBpbmZvcm1hdGlvbiBpbiBhbnkgbWVkaXVt
LiBUaGFuayB5b3UuDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 13:16:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 13:16:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDTdP-0005rP-US; Thu, 26 Sep 2019 13:16:39 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=rdU3=XV=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDTdO-0005rK-Ry
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 13:16:38 +0000
X-Inumbo-ID: dc456e62-e05f-11e9-8628-bc764e2007e4
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe06::600]) by localhost (Halon) with ESMTPS
 id dc456e62-e05f-11e9-8628-bc764e2007e4;
 Thu, 26 Sep 2019 13:16:34 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=ILCBuEoHmO1haL2Wkt+2fhaRjqEoPSFCLDNsXAhAOiA=;
 b=n+GSkHNShn70sHL6iRUCb8ao1zLYkMhymo5vES3WC+d0t+ZsmLqewRSu+L1m17WlLBquF42ws2lYRf6eIam2KQafZ1L8IhYU6jtmPHqXUEt6mwkufJIealFmPrPBqnNPR5XNdK1O5cc5b3RIXyrJsiuUnrnU4QAq0fqLV/qhSfk=
Received: from VI1PR08CA0181.eurprd08.prod.outlook.com (2603:10a6:800:d2::11)
 by AM6PR08MB5543.eurprd08.prod.outlook.com (2603:10a6:20b:b5::12)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Thu, 26 Sep
 2019 13:16:31 +0000
Received: from DB5EUR03FT040.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::204) by VI1PR08CA0181.outlook.office365.com
 (2603:10a6:800:d2::11) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.15 via Frontend
 Transport; Thu, 26 Sep 2019 13:16:30 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT040.mail.protection.outlook.com (10.152.20.243) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2305.15 via Frontend Transport; Thu, 26 Sep 2019 13:16:29 +0000
Received: ("Tessian outbound 081de437afc7:v33");
 Thu, 26 Sep 2019 13:16:27 +0000
X-CR-MTA-TID: 64aa7808
Received: from 0d9814941c10.4 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.2.55]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 13243C79-7C1E-4AC2-80AE-83D3B567BD34.1; 
 Thu, 26 Sep 2019 13:16:22 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2055.outbound.protection.outlook.com [104.47.2.55])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 0d9814941c10.4
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Thu, 26 Sep 2019 13:16:22 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=ahVJ5NDBNXsksDGKTDdr0vMZecSZZ03mTUVQUc7JeGJSiqZVL4FeGOxFcClx2F6GUsGntK0TKxb8gj3+SUWvJSIgR7p61hXTElGYgubWY2MOoAPC5gZ4wtyLXZ43VprNpCQVbw7+VzVY5/B+oZtD3VjmLCp64anM4f+3rpXg5zR8ICPljTdty2lWgYqNsmSONFeJkbSXzd6IsOFUPQ1C0n/XZanPp4I+I35VXjhs/Ra+FnywQ13NulhlK1BfVNInJGpUbig61zCw2pCIqt+blYw/u2p9yJz1tWlNjRcz4PW1dYvZ9Cvg6ZfrNj6BEd6aLSbbGMyBBxgQemeElPigQA==
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=8iHx5z9GuKd0EviKeV9NPOVdcy7/cHJ7m3ipjUrT1mI=;
 b=nNM2U5Z5P1MijHgH49y4OqyuXO4ivPT4DXa9vSovDCAhFzZu4qvoq3l4kKGOIFHuv611lUvIFGyfUWJ4+rDONEsX1ERTBuXGfJO0+9aLJ9YI/01N4uzaKGAu1EwbV9zALVSucHTWWbs1SZnaOFhCYZRbp0ku0dsKnuO2+zeSOu1ETXEgVEbhEevNYxO14tkZG2TY16Mmavtbjmo1u3+UjNwAUgaJvWi3TQfnW6NKT+LP4MlRf/EpQc9xCrS0udkW4XYAbMl57gSpfzA/feWd9CpEL9nDiN1UkXIWSfEjdVtYptNZa2SMLHhNn3B9ckSjAb4KeO7I47C6KfTabPJv/Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=8iHx5z9GuKd0EviKeV9NPOVdcy7/cHJ7m3ipjUrT1mI=;
 b=cUXUWOfxnhfohFnFMqB6mRRhEfFxO61PYMkdaWGREFzR7JcfNNOEnoEe1ptjFeWnWBKC1J629MG7rq8gENQGy4qafAwtyhxdD876UtPbuhRMTlK9cg0SAA6R/Jy1rGm5sv3Jahg8ZmG22atigPTr9vu6nIkt8qJrfRtOPRiFO8w=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB4220.eurprd08.prod.outlook.com (20.178.47.202) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.20; Thu, 26 Sep 2019 13:16:21 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2284.028; Thu, 26 Sep 2019
 13:16:21 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Thread-Topic: [Minios-devel] [UNIKRAFT PATCH v5 1/7] plat/common: Calculate
 shift factors for coversion between ns and tick
Thread-Index: AQHVc4GnA0kk8R2DEkCR01z9ju0ZQac98U0A
Date: Thu, 26 Sep 2019 13:16:20 +0000
Message-ID: <DB7PR08MB30824FA87AA2DE58AE937CDAF7860@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190925091407.182692-1-justin.he@arm.com>
 <20190925091407.182692-2-justin.he@arm.com>
In-Reply-To: <20190925091407.182692-2-justin.he@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: b62d87f0-7fb1-4b74-8b33-8e33952ed068.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [223.167.32.208]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: d12f5135-b84b-4b39-c71c-08d74283be4a
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB4220; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB4220:|DB7PR08MB4220:|AM6PR08MB5543:
X-MS-Exchange-PUrlCount: 1
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM6PR08MB554368E96C6BAF2A46C46D07F7860@AM6PR08MB5543.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:10000;OLM:10000;
x-forefront-prvs: 0172F0EF77
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(396003)(376002)(366004)(346002)(136003)(39860400002)(199004)(189003)(13464003)(71190400001)(76116006)(33656002)(6246003)(316002)(14444005)(54906003)(66066001)(4326008)(110136005)(64756008)(66946007)(66476007)(8936002)(11346002)(53546011)(186003)(26005)(66446008)(8676002)(66556008)(2201001)(25786009)(86362001)(446003)(476003)(76176011)(7696005)(102836004)(486006)(6506007)(99286004)(7736002)(305945005)(55016002)(6436002)(9686003)(6306002)(81156014)(229853002)(2501003)(74316002)(478600001)(2906002)(256004)(81166006)(966005)(14454004)(6116002)(52536014)(5660300002)(3846002)(71200400001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB4220;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: erT0yvCeBHP/EFYZ0GKDpzfK2aP5LZmWCrHvc1L+bVx5bF/BzKTtM6dHYzYA7PPifCmHRRdZTD7FPT8S8D8inyFqZExNIUwQ1OEqys8sl1fgRLwCL1WtwfuA7pG1v8IyyTcWjo7GId+7BUO4iRra6SXHiYTnU3yiA2Ba/PPE6ffQMBZmDGm83GjQk/ZrJI5gmgrqNOb64YLfhnj9yJiOxryduKdwKmsJ1HFE44SD3xtp7eILfIhEq1fAa8RWl+deLxmAE17lLZy10FegaIlbM9NaROO7Ex5Jj0eKqCTllnp+sTKDAHbABF9KvdZdOE3sFQMqrxkGtVTNNZ8sRESW3pi4QilXfjLnBLtiPmMviQl241Yipt4T0bI7tk+gqnQp3YWCT2aX1Wi+J7g9w5BTdPUAjlM0U4xO5Xe1VeJNfaxvMLY6OI72v1VUZDVynFzhFTrswcZqkQ/ZuAthD0Ao3Q==
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB4220
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT040.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(136003)(346002)(396003)(39860400002)(40434004)(13464003)(199004)(189003)(14454004)(26826003)(2201001)(70206006)(76176011)(14444005)(5024004)(229853002)(6116002)(3846002)(47776003)(22756006)(26005)(7696005)(102836004)(2906002)(53546011)(2501003)(6506007)(66066001)(99286004)(81166006)(81156014)(7736002)(8676002)(52536014)(305945005)(74316002)(8936002)(336012)(436003)(316002)(86362001)(70586007)(4326008)(25786009)(23676004)(63350400001)(186003)(2486003)(446003)(356004)(54906003)(11346002)(486006)(9686003)(107886003)(6306002)(50466002)(110136005)(476003)(33656002)(126002)(55016002)(76130400001)(966005)(5660300002)(478600001)(6246003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR08MB5543;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 426f0a56-9fc9-4fa1-1861-08d74283b947
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM6PR08MB5543; 
X-Forefront-PRVS: 0172F0EF77
X-Microsoft-Antispam-Message-Info: f06U7wSBDVVe0wB2eY8zA/YpHBw7jsPDwfoOT9ISb2ks6nZTNZmm7gr1jLL3dD2LZ0Mdj2++OESxGBaQ5m8g99N8I67EOohoxAD8XW/nP2FrFnITKvUss3G2NBgnbXGkMdsqNbzmgbgPpr3IROte0ej3OKmA75GWFh3W9dZbwhp6RvIxu2xNarr4d+bfimFPKAzQb2C3DxHXBzABr3uMo+hiEDqp0KKce40fy5d7whHKc1PRuEcWJ42H9XnHJ8d07zWqPfENfMmjw0Gvpcr3JIO+0GsK+FNziNBZ0cpzaKHOhVsMBNhClRcnA2PwMe/zdjztNFvzKDCcniEP0YW52K/CLGTuMkXJpMlIVqWU6Wj5eRVEz34Y98kQaUCcWXiQ/3dkyMtYgAt3wCxED0SvXETaGgbaTBo+Hwu//84ylmJYgIxIr7eWdTWNQKQlEzqJkKO+izhyjcBcutHdQ8XU6w==
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2019 13:16:29.6294 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: d12f5135-b84b-4b39-c71c-08d74283be4a
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR08MB5543
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v5 1/7] plat/common: Calculate
 shift factors for coversion between ns and tick
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Wei Chen \(Arm Technology China\)" <Wei.Chen@arm.com>,
 "Jianyong Wu \(Arm Technology China\)" <Jianyong.Wu@arm.com>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 Julien Grall <Julien.Grall@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogTWluaW9zLWRldmVsIDxt
aW5pb3MtZGV2ZWwtYm91bmNlc0BsaXN0cy54ZW5wcm9qZWN0Lm9yZz4gT24gQmVoYWxmDQo+IE9m
IEppYSBIZQ0KPiBTZW50OiAyMDE55bm0OeaciDI15pelIDE3OjE0DQo+IFRvOiBtaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmc7IFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXUNCj4gQ2M6
IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT47IEp1c3RpbiBIZSAoQXJtIFRl
Y2hub2xvZ3kgQ2hpbmEpDQo+IDxKdXN0aW4uSGVAYXJtLmNvbT47IFdlaSBDaGVuIChBcm0gVGVj
aG5vbG9neSBDaGluYSkNCj4gPFdlaS5DaGVuQGFybS5jb20+OyBKaWFueW9uZyBXdSAoQXJtIFRl
Y2hub2xvZ3kgQ2hpbmEpDQo+IDxKaWFueW9uZy5XdUBhcm0uY29tPjsgS2FseSBYaW4gKEFybSBU
ZWNobm9sb2d5IENoaW5hKQ0KPiA8S2FseS5YaW5AYXJtLmNvbT47IEp1bGllbiBHcmFsbCA8SnVs
aWVuLkdyYWxsQGFybS5jb20+Ow0KPiBTaGFyYW4uU2FudGhhbmFtQG5lY2xhYi5ldTsgU2ltb24g
S3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IFN1YmplY3Q6IFtNaW5pb3MtZGV2
ZWxdIFtVTklLUkFGVCBQQVRDSCB2NSAxLzddIHBsYXQvY29tbW9uOiBDYWxjdWxhdGUNCj4gc2hp
ZnQgZmFjdG9ycyBmb3IgY292ZXJzaW9uIGJldHdlZW4gbnMgYW5kIHRpY2sNCj4NCj4gV2UgaGFk
IHNoaWZ0IGZhY3RvciBmb3IgY292ZXJ0aW5nIGNvdW50ZXIgdGlja3MgdG8gbnMsIGJ1dCBpdCdz
IG5vdA0KPiBlbm91Z2guIFNvbWV0aW1lLCB3ZSBuZWVkIHRvIGNvdmVydCBucyB0byB0aWNrcy4g
Rm9yIGV4YW1wbGUsIHdlJ2xsDQo+IHRyYW5zZmVyIHNsZWVwKG5zKSB0byBjb3VudGVyIHRpY2tz
LiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBzaGlmdCBmYWN0b3IsDQo+IHRoZSBjb252ZXJzaW9uIGFj
Y3VyYWN5IHdpbGwgYmUgbG93ZXIuDQo+DQo+IFNpZ25lZC1vZmYtYnk6IFdlaSBDaGVuIDx3ZWku
Y2hlbkBhcm0uY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBKaWFueW9uZyBXdSA8amlhbnlvbmcud3VA
YXJtLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVAYXJtLmNvbT4NCj4g
LS0tDQo+ICBwbGF0L2NvbW1vbi9hcm0vdGltZS5jIHwgMTE4ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrLS0tLS0tLQ0KPiAtLQ0KPiAgMSBmaWxlIGNoYW5nZWQsIDkzIGluc2VydGlv
bnMoKyksIDI1IGRlbGV0aW9ucygtKQ0KPg0KPiBkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vYXJt
L3RpbWUuYyBiL3BsYXQvY29tbW9uL2FybS90aW1lLmMNCj4gaW5kZXggMWIzMDkwMy4uMDIxNTkz
MiAxMDA2NDQNCj4gLS0tIGEvcGxhdC9jb21tb24vYXJtL3RpbWUuYw0KPiArKysgYi9wbGF0L2Nv
bW1vbi9hcm0vdGltZS5jDQo+IEBAIC00NywyMSArNDcsODkgQEANCj4gIHN0YXRpYyB1aW50NjRf
dCBib290X3RpY2tzOw0KPiAgc3RhdGljIHVpbnQzMl90IGNvdW50ZXJfZnJlcTsNCj4NCj4gLS8q
DQo+IC0gKiBTaGlmdCBmYWN0b3IgZm9yIGNvdW50ZXIgc2NhbGluZyBtdWx0aXBsaWVyOyByZWZl
cnJlZCB0byBhcyBTIGluIHRoZQ0KPiAtICogZm9sbG93aW5nIGNvbW1lbnRzLg0KPiAtICovDQo+
IC1zdGF0aWMgdWludDhfdCBjb3VudGVyX3NoaWZ0Ow0KPg0KPiAtLyogTXVsdGlwbGllciBmb3Ig
Y29udmVydGluZyBjb3VudGVyIHRpY2tzIHRvIG5zZWNzLiAoMC5TKSBmaXhlZCBwb2ludC4gKi8N
Cj4gKy8qIFNoaWZ0IGZhY3RvciBmb3IgY29udmVydGluZyB0aWNrcyB0byBucyAqLw0KPiArc3Rh
dGljIHVpbnQ4X3QgY291bnRlcl9zaGlmdF90b19uczsNCj4gKw0KPiArLyogU2hpZnQgZmFjdG9y
IGZvciBjb252ZXJ0aW5nIG5zIHRvIHRpY2tzICovDQo+ICtzdGF0aWMgdWludDhfdCBjb3VudGVy
X3NoaWZ0X3RvX3RpY2s7DQo+ICsNCj4gKy8qIE11bHRpcGxpZXIgZm9yIGNvbnZlcnRpbmcgY291
bnRlciB0aWNrcyB0byBuc2VjcyAqLw0KPiAgc3RhdGljIHVpbnQzMl90IG5zX3Blcl90aWNrOw0K
Pg0KPiArLyogTXVsdGlwbGllciBmb3IgY29udmVydGluZyBuc2VjcyB0byBjb3VudGVyIHRpY2tz
ICovDQo+ICtzdGF0aWMgdWludDMyX3QgdGlja19wZXJfbnM7DQo+ICsNCj4gKy8qDQo+ICsgKiBU
aGUgbWF4aW11bSB0aW1lIHJhbmdlIGluIHNlY29uZHMgd2hpY2ggY2FuIGJlIGNvbnZlcnRlZCBi
eQ0KPiBtdWx0aXBsaWVyDQo+ICsgKiBhbmQgc2hpZnQgZmFjdG9ycy4gVGhpcyB3aWxsIGd1YXJh
bnRlZSB0aGUgY29udmVydGVkIHZhbHVlIG5vdCB0byBleGNlZWQNCj4gKyAqIDY0LWJpdCB1bnNp
Z25lZCBpbnRlZ2VyLiBJbmNyZWFzZSB0aGUgdGltZSByYW5nZSB3aWxsIHJlZHVjZSB0aGUgYWNj
dXJhY3kNCj4gKyAqIG9mIGNvbnZlcnNpb24sIGJlY2F1c2Ugd2Ugd2lsbCBnZXQgc21hbGxlciBt
dWx0aXBsaWVyIGFuZCBzaGlmdCBmYWN0b3JzLg0KPiArICogSW4gdGhpcyBjYXNlLCB3ZSBzZWxl
Y3RlZCAzNjAwcyBhcyB0aGUgdGltZSByYW5nZS4NCj4gKyAqLw0KPiArI2RlZmluZSBfX01BWF9D
T05WRVJUX1NFQ1MgICAoMzYwMFVMKQ0KPiArI2RlZmluZSBfX01BWF9DT05WRVJUX05TICAgICAo
MzYwMFVMKk5TRUNfUEVSX1NFQykNCj4gK3N0YXRpYyB1aW50NjRfdCBtYXhfY29udmVydF90aWNr
czsNCj4gKw0KPiAgLyogSG93IG1hbnkgbmFub3NlY29uZHMgcGVyIHNlY29uZCAqLw0KPiAgI2Rl
ZmluZSBOU0VDX1BFUl9TRUMgdWthcmNoX3RpbWVfc2VjX3RvX25zZWMoMSkNCj4NCj4gIHN0YXRp
YyBpbmxpbmUgdWludDY0X3QgdGlja3NfdG9fbnModWludDY0X3QgdGlja3MpDQo+ICB7DQo+IC0g
ICAgIHJldHVybiAobnNfcGVyX3RpY2sgKiB0aWNrcykgPj4gY291bnRlcl9zaGlmdDsNCj4gKyAg
ICAgVUtfQVNTRVJUKHRpY2tzIDw9IG1heF9jb252ZXJ0X3RpY2tzKTsNCg0KSSBvYnNlcnZlZCB0
aGF0IGlmIHNvbWVvbmUgY2FsbGVkIHRoaXMgZWFybHkgaW4gYm9vdGluZyBzdGFnZSwgaXQNCndp
bGwgY2F1c2UgYSBwb2ludGxlc3MgYXNzZXJ0IGhlcmUuIEUuZy4gYmVmb3JlIG1heF9jb252ZXJ0
X3RpY2tzDQppcyBpbml0aWFsaXplZC4NClRlbmQgdG8gaW5pdGlhbGl6ZWQgbWF4X2NvbnZlcnRf
dGlja3MpIGFzIHU2NCgtMSkgaW5zdGVhZCBvZiAwLg0KDQotLQ0KQ2hlZXJzLA0KSnVzdGluIChK
aWEgSGUpDQoNCg0KPiArDQo+ICsgICAgIHJldHVybiAobnNfcGVyX3RpY2sgKiB0aWNrcykgPj4g
Y291bnRlcl9zaGlmdF90b19uczsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB1aW50NjRf
dCBuc190b190aWNrcyh1aW50NjRfdCBucykNCj4gK3sNCj4gKyAgICAgVUtfQVNTRVJUKG5zIDw9
IF9fTUFYX0NPTlZFUlRfTlMpOw0KPiArDQo+ICsgICAgIHJldHVybiAodGlja19wZXJfbnMgKiBu
cykgPj4gY291bnRlcl9zaGlmdF90b190aWNrOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogQ2Fs
Y3VsYXRlIG11bHRpcGxpZXIvc2hpZnQgZmFjdG9ycyBmb3Igc2NhbGVkIG1hdGguDQo+ICsgKi8N
Cj4gK3N0YXRpYyB2b2lkIGNhbGN1bGF0ZV9tdWx0X3NoaWZ0KHVpbnQzMl90ICptdWx0LCB1aW50
OF90ICpzaGlmdCwNCj4gKyAgICAgICAgICAgICB1aW50NjRfdCBmcm9tLCB1aW50NjRfdCB0bykN
Cj4gK3sNCj4gKyAgICAgdWludDY0X3QgdG1wOw0KPiArICAgICB1aW50MzJfdCBzZnQsIHNmdGFj
YyA9IDMyOw0KPiArDQo+ICsgICAgIC8qDQo+ICsgICAgICAqIENhbGN1bGF0ZSB0aGUgc2hpZnQg
ZmFjdG9yIHdoaWNoIGlzIGxpbWl0aW5nIHRoZSBjb252ZXJzaW9uDQo+ICsgICAgICAqIHJhbmdl
Og0KPiArICAgICAgKi8NCj4gKyAgICAgdG1wID0gKCh1aW50NjRfdClfX01BWF9DT05WRVJUX1NF
Q1MgKiBmcm9tKSA+PiAzMjsNCj4gKyAgICAgd2hpbGUgKHRtcCkgew0KPiArICAgICAgICAgICAg
IHRtcCA+Pj0gMTsNCj4gKyAgICAgICAgICAgICBzZnRhY2MtLTsNCj4gKyAgICAgfQ0KPiArDQo+
ICsNCj4gKyAgICAgLyoNCj4gKyAgICAgICogQ2FsY3VsYXRlIHNoaWZ0IGZhY3RvciAoUykgYW5k
IHNjYWxpbmcgbXVsdGlwbGllciAoTSkuDQo+ICsgICAgICAqDQo+ICsgICAgICAqIChTKSBuZWVk
cyB0byBiZSB0aGUgbGFyZ2VzdCBzaGlmdCBmYWN0b3IgKDw9IG1heF9zaGlmdCkgd2hlcmUNCj4g
KyAgICAgICogdGhlIHJlc3VsdCBvZiB0aGUgTSBjYWxjdWxhdGlvbiBiZWxvdyBmaXRzIGludG8g
dWludDMyX3QNCj4gKyAgICAgICogd2l0aG91dCB0cnVuY2F0aW9uLg0KPiArICAgICAgKg0KPiAr
ICAgICAgKiBtdWx0aXBsaWVyID0gKHRhcmdldCA8PCBzaGlmdCkgLyBzb3VyY2UNCj4gKyAgICAg
ICovDQo+ICsgICAgIGZvciAoc2Z0ID0gMzI7IHNmdCA+IDA7IHNmdC0tKSB7DQo+ICsgICAgICAg
ICAgICAgdG1wID0gKHVpbnQ2NF90KSB0byA8PCBzZnQ7DQo+ICsNCj4gKyAgICAgICAgICAgICAv
KiBFbnN1cmluZyB3ZSByb3VuZCB0byBuZWFyZXN0IHdoZW4gY2FsY3VsYXRpbmcgdGhlDQo+ICsg
ICAgICAgICAgICAgICogbXVsdGlwbGllcg0KPiArICAgICAgICAgICAgICAqLw0KPiArICAgICAg
ICAgICAgIHRtcCArPSBmcm9tIC8gMjsNCj4gKyAgICAgICAgICAgICB0bXAgLz0gZnJvbTsNCj4g
KyAgICAgICAgICAgICBpZiAoKHRtcCA+PiBzZnRhY2MpID09IDApDQo+ICsgICAgICAgICAgICAg
ICAgICAgICBicmVhazsNCj4gKyAgICAgfQ0KPiArICAgICAqbXVsdCA9IHRtcDsNCj4gKyAgICAg
KnNoaWZ0ID0gc2Z0Ow0KPiAgfQ0KPg0KPiAgLyoNCj4gQEAgLTE0NSwyOSArMjEzLDI5IEBAIHN0
YXRpYyBfX3U2NCAgZ2VuZXJpY190aW1lcl9lcG9jaG9mZnNldCh2b2lkKQ0KPg0KPiAgc3RhdGlj
IGludCBnZW5lcmljX3RpbWVyX2luaXQodm9pZCkNCj4gIHsNCj4gKyAgICAgY291bnRlcl9mcmVx
ID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5KCk7DQo+ICsNCj4gICAgICAgLyoNCj4gLSAgICAgICog
Q2FsY3VsYXRlIGNvdW50ZXIgc2hpZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIuDQo+
IC0gICAgICAqDQo+IC0gICAgICAqIGNvdW50ZXJfc2hpZnQgKFMpIG5lZWRzIHRvIGJlIHRoZSBs
YXJnZXN0ICg8PTMyKSBzaGlmdCBmYWN0b3Igd2hlcmUNCj4gLSAgICAgICogdGhlIHJlc3VsdCBv
ZiB0aGUgbnNfcGVyX3RpY2sgY2FsY3VsYXRpb24gYmVsb3cgZml0cyBpbnRvIHVpbnQzMl90DQo+
IC0gICAgICAqIHdpdGhvdXQgdHJ1bmNhdGlvbi4gTm90ZSB0aGF0IHdlIGRpc2FsbG93IGFuIFMg
b2YgemVybyB0byBlbnN1cmUNCj4gLSAgICAgICogdGhlIGxvb3AgYWx3YXlzIHRlcm1pbmF0ZXMu
DQo+IC0gICAgICAqDQo+IC0gICAgICAqICgwLlMpIG5zX3Blcl90aWNrID0gTlNFQ19QRVJfU0VD
IChTLlMpIC8gY291bnRlcl9mcmVxIChTLjApDQo+ICsgICAgICAqIENhbGN1bGF0ZSB0aGUgc2hp
ZnQgZmFjdG9yIGFuZCBzY2FsaW5nIG11bHRpcGxpZXIgZm9yDQo+ICsgICAgICAqIGNvbnZlcnRp
bmcgdGlja3MgdG8gbnMuDQo+ICAgICAgICAqLw0KPiAtICAgICB1aW50NjRfdCB0bXA7DQo+ICsg
ICAgIGNhbGN1bGF0ZV9tdWx0X3NoaWZ0KCZuc19wZXJfdGljaywgJmNvdW50ZXJfc2hpZnRfdG9f
bnMsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50ZXJfZnJlcSwgTlNFQ19Q
RVJfU0VDKTsNCj4NCj4gLSAgICAgY291bnRlcl9mcmVxID0gZ2V0X2NvdW50ZXJfZnJlcXVlbmN5
KCk7DQo+IC0gICAgIGNvdW50ZXJfc2hpZnQgPSAzMjsNCj4gLSAgICAgZG8gew0KPiAtICAgICAg
ICAgICAgIHRtcCA9IChOU0VDX1BFUl9TRUMgPDwgY291bnRlcl9zaGlmdCkgLyBjb3VudGVyX2Zy
ZXE7DQo+IC0gICAgICAgICAgICAgaWYgKCh0bXAgJiAweEZGRkZGRkZGMDAwMDAwMDBMKSA9PSAw
TCkNCj4gLSAgICAgICAgICAgICAgICAgICAgIG5zX3Blcl90aWNrID0gKHVpbnQzMl90KXRtcDsN
Cj4gLSAgICAgICAgICAgICBlbHNlDQo+IC0gICAgICAgICAgICAgICAgICAgICBjb3VudGVyX3No
aWZ0LS07DQo+IC0gICAgIH0gd2hpbGUgKGNvdW50ZXJfc2hpZnQgPiAwICYmIG5zX3Blcl90aWNr
ID09IDBMKTsNCj4gKyAgICAgLyogV2UgZGlzYWxsb3cgemVybyBuc19wZXJfdGljayAqLw0KPiAg
ICAgICBVS19CVUdPTighbnNfcGVyX3RpY2spOw0KPg0KPiArICAgICAvKg0KPiArICAgICAgKiBD
YWxjdWxhdGUgdGhlIHNoaWZ0IGZhY3RvciBhbmQgc2NhbGluZyBtdWx0aXBsaWVyIGZvcg0KPiAr
ICAgICAgKiBjb252ZXJ0aW5nIG5zIHRvIHRpY2tzLg0KPiArICAgICAgKi8NCj4gKyAgICAgY2Fs
Y3VsYXRlX211bHRfc2hpZnQoJnRpY2tfcGVyX25zLCAmY291bnRlcl9zaGlmdF90b190aWNrLA0K
PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU0VDX1BFUl9TRUMsIGNvdW50ZXJfZnJl
cSk7DQo+ICsNCj4gKyAgICAgLyogV2UgZGlzYWxsb3cgemVybyBuc19wZXJfdGljayAqLw0KPiAr
ICAgICBVS19CVUdPTighdGlja19wZXJfbnMpOw0KPiArDQo+ICsgICAgIG1heF9jb252ZXJ0X3Rp
Y2tzID0gX19NQVhfQ09OVkVSVF9TRUNTKmNvdW50ZXJfZnJlcTsNCj4gICAgICAgLyoNCj4gICAg
ICAgICogTW9ub3RvbmljIHRpbWUgYmVnaW5zIGF0IGJvb3RfdGlja3MgKGZpcnN0IHJlYWQgb2Yg
Y291bnRlcg0KPiAgICAgICAgKiBiZWZvcmUgY2FsaWJyYXRpb24pLg0KPiAtLQ0KPiAyLjE3LjEN
Cj4NCj4NCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18N
Cj4gTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdA0KPiBNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJv
amVjdC5vcmcNCj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZv
L21pbmlvcy1kZXZlbA0KSU1QT1JUQU5UIE5PVElDRTogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZW1h
aWwgYW5kIGFueSBhdHRhY2htZW50cyBhcmUgY29uZmlkZW50aWFsIGFuZCBtYXkgYWxzbyBiZSBw
cml2aWxlZ2VkLiBJZiB5b3UgYXJlIG5vdCB0aGUgaW50ZW5kZWQgcmVjaXBpZW50LCBwbGVhc2Ug
bm90aWZ5IHRoZSBzZW5kZXIgaW1tZWRpYXRlbHkgYW5kIGRvIG5vdCBkaXNjbG9zZSB0aGUgY29u
dGVudHMgdG8gYW55IG90aGVyIHBlcnNvbiwgdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgb3Igc3Rv
cmUgb3IgY29weSB0aGUgaW5mb3JtYXRpb24gaW4gYW55IG1lZGl1bS4gVGhhbmsgeW91Lg0KX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVs
IG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9s
aXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:15:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:15:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVUT-0006Zf-UJ; Thu, 26 Sep 2019 15:15:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVUS-0006ZZ-Fl
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:15:32 +0000
X-Inumbo-ID: 797e04a4-e070-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 797e04a4-e070-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:15:30 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id A384CF2023;
 Thu, 26 Sep 2019 17:15:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id V-GkW-p8_hqH; Thu, 26 Sep 2019 17:15:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 771A9F2004;
 Thu, 26 Sep 2019 17:15:24 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:15:24 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:15:08 +0200
Message-ID: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [GCC PATCH v2 0/5] Port libbfi and libbacktrace on
 Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgYXJlIHRoZSBwYXRjaGVzIG5lZWRlZCBmb3IgcG9ydGluZyBsaWJmZmkgYW5kIGxpYmJh
Y2t0cmFjZSBvbiAKVW5pa3JhZnQuIEFzIGJvdGggb2YgdGhlbSBhcmUgcGFydCBvZiBnY2MgdGhl
eSBhcmUgdW5kZXIgYW4gZXh0ZXJuYWwgZ2NjCmxpYnJhcnkuIFRoZXNlIHR3byBsaWJyYXJpZXMg
YXJlIG5lZWRlZCBmb3IgcG9ydGluZyBsaWJnbyB0byBVbmlrcmFmdC4KClRoZSBsaWJmZmkgbGli
cmFyeSBwcm92aWRlcyBhIHBvcnRhYmxlLCBoaWdoIGxldmVsIHByb2dyYW1taW5nIGludGVyZmFj
ZQp0byB2YXJpb3VzIGNhbGxpbmcgY29udmVudGlvbnMuIFRoaXMgYWxsb3dzIGEgcHJvZ3JhbW1l
ciB0byBjYWxsIGFueQpmdW5jdGlvbiBzcGVjaWZpZWQgYnkgYSBjYWxsIGludGVyZmFjZSBkZXNj
cmlwdGlvbiBhdCBydW4gdGltZS4KCmxpYmJhY2t0cmFjZSBpcyBhIEMgbGlicmFyeSB0aGF0IG1h
eSBiZSBsaW5rZWQgaW50byBhIEMvQysrIHByb2dyYW0gdG8KcHJvZHVjZSBzeW1ib2xpYyBiYWNr
dHJhY2VzLiBTYW1wbGUgdXNlcyB3b3VsZCBiZSB0byBwcmludCBhIGRldGFpbGVkCmJhY2t0cmFj
ZSB3aGVuIGFuIGVycm9yIG9jY3VycyBvciB0byBnYXRoZXIgZGV0YWlsZWQgcHJvZmlsaW5nIGlu
Zm9ybWF0aW9uLgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBTZXBlcmF0ZSBsaWJnbyBmcm9tIGdjYyAK
LSBDcmVhdGUgYSBjb25maWcgZGlyZWN0b3J5IHVuZGVyIGluY2x1ZGUgZm9yIGNvbmZpZyBoZWFk
ZXIgZmlsZXMgZm9yCiAgZWFjaCBsaWJyYXJ5Ci0gQWRkIGZmaXRhcmdldC5oIGluIGxpYmZmaQot
IEFkZCBiYWNrdHJhY2UuaCBpbiBsaWJiYWNrdHJhY2UKLSBTdXByZXNzIFdpbXBsaWNpdC1mdW5j
dGlvbi1kZWNsYXJhdGlvbiB3YXJuaW5nIGluIGxpYmZmaQoKQ2hhcmFsYW1wb3MgTWFpbmFzICg1
KToKICBJbnRyb2R1Y2UgbGlicmFyeSBza2VsZXRvbgogIEFkZCBNYWtlZmlsZS51awogIFBvcnQg
bGliYmFja3RyYWNlIGxpYnJhcnkKICBQb3J0IGxpYmZmaSBsaWJyYXJ5CiAgQWRkaW5nIGV4dHJh
IGluZm9ybWF0aW9uCgogLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgIDI3ICsrCiBDT0RJTkdfU1RZTEUubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDQgKwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICsK
IENPUFlJTkcubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzOSArKwogQ29u
ZmlnLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDI5ICsrCiBNQUlOVEFJ
TkVSUy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTEgKwogTWFrZWZpbGUudWsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMTIyICsrKysrCiBSRUFETUUubWQgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMjIgKwogZXhwb3J0c3ltcy51ayAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIGxpYmJhY2t0cmFjZS9leHBvcnRzeW1z
LnVrICAgICAgICAgICAgICAgICB8ICAgNiArCiBsaWJiYWNrdHJhY2UvaW5jbHVkZS9iYWNrdHJh
Y2Utc3VwcG9ydGVkLmggfCAgNjYgKysrCiBsaWJiYWNrdHJhY2UvaW5jbHVkZS9iYWNrdHJhY2Uu
aCAgICAgICAgICAgfCAyMDAgKysrKysrKysKIGxpYmJhY2t0cmFjZS9pbmNsdWRlL2NvbmZpZy9j
b25maWcuaCAgICAgICB8IDEzNSArKysrKysKIGxpYmZmaS9leHBvcnRzeW1zLnVrICAgICAgICAg
ICAgICAgICAgICAgICB8ICAyMSArCiBsaWJmZmkvaW5jbHVkZS9jb25maWcvZmZpY29uZmlnLmgg
ICAgICAgICAgfCAyMDYgKysrKysrKysrCiBsaWJmZmkvaW5jbHVkZS9mZmkuaCAgICAgICAgICAg
ICAgICAgICAgICAgfCA1MDkgKysrKysrKysrKysrKysrKysrKysrCiBsaWJmZmkvaW5jbHVkZS9m
Zml0YXJnZXQuaCAgICAgICAgICAgICAgICAgfCAxNDEgKysrKysrCiAxNyBmaWxlcyBjaGFuZ2Vk
LCAxNTQzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVh
dGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NUWUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJ
QlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAw
NjQ0IENvbmZpZy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUg
bW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYmFj
a3RyYWNlL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvaW5j
bHVkZS9iYWNrdHJhY2Utc3VwcG9ydGVkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJh
Y2UvaW5jbHVkZS9iYWNrdHJhY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmJhY2t0cmFjZS9p
bmNsdWRlL2NvbmZpZy9jb25maWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9leHBvcnRz
eW1zLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZmZpL2luY2x1ZGUvY29uZmlnL2ZmaWNvbmZp
Zy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliZmZpL2luY2x1ZGUvZmZpLmgKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBsaWJmZmkvaW5jbHVkZS9mZml0YXJnZXQuaAoKLS0gCjIuMTcuMQoKCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWls
aW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMu
eGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:15:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:15:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVUY-0006aB-W9; Thu, 26 Sep 2019 15:15:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVUX-0006a2-Ev
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:15:37 +0000
X-Inumbo-ID: 7bd2c0b4-e070-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 7bd2c0b4-e070-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:15:33 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B6328F2023;
 Thu, 26 Sep 2019 17:15:32 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Baj0R4gjYQNr; Thu, 26 Sep 2019 17:15:32 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 7E5A2F2004;
 Thu, 26 Sep 2019 17:15:28 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:15:24 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:15:09 +0200
Message-ID: <20190926151513.8171-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
References: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [GCC PATCH v2 1/5] Introduce library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFz
QG5lY2xhYi5ldT4KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysr
KysKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysK
IENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogQ29uZmlnLnVrICAgICAgIHwgIDkgKysrKysrKysrCiBNQUlOVEFJTkVSUy5tZCAgfCAx
MSArKysrKysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDcgKysrKysrKwogZXhwb3J0c3ltcy51
ayAgIHwgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCAxMDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBD
T1BZSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2
NDQgTUFJTlRBSU5FUlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRp
Z25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMmZkMwotLS0gL2Rl
di9udWxsCisrKyBiLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyNyBAQAorKi5kZXBlbmQKKyoubwor
Ki5hCisqLmQKKyouc28KKyoub3JpZworKi5yZWoKKyouYmFrCisqLnN3cAorKn4KKywqCitcIypc
IworLlwjKgorXCNfKlwjCisuXCNfKgorIS5naXRpZ25vcmUKKy4qCisKKyMgZ251IGdsb2JhbCBm
aWxlcworR1BBVEgKK0dSVEFHUworR1NZTVMKK0dUQUdTCisKKyMgY3Njb3BlIGZpbGVzCitjc2Nv
cGUuKgorbmNzY29wZS4qCmRpZmYgLS1naXQgYS9DT0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZ
TEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczMDA0MQotLS0gL2Rl
di9udWxsCisrKyBiL0NPRElOR19TVFlMRS5tZApAQCAtMCwwICsxLDQgQEAKK0NvZGluZyBTdHls
ZQorPT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUgYENPRElOR19TVFlMRS5tZGAg
ZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvQ09OVFJJ
QlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjE0ZjZhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9DT05UUklCVVRJTkcubWQKQEAgLTAs
MCArMSw0IEBACitDb250cmlidXRpbmcgdG8gVW5pa3JhZnQKKz09PT09PT09PT09PT09PT09PT09
PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05UUklCVVRJTkcubWRgIGZpbGUgaW4gdGhl
IG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZ
SU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDlmM2EKLS0tIC9k
ZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0wLDAgKzEsMzkgQEAKK0xpY2Vuc2UKKz09PT09
PT0KKworVW5pa3JhZnQgZ2NjIHdyYXBwZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQg
Z2NjIHdpdGggVW5pa3JhZnQuCitFYWNoIEMgY29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBz
aG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlCitjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNo
IHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBjb2RlIGlzCitsaWNlbnNlZC4gSWYgc3VjaCBhIGxp
Y2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodAorbm90aWNlIHdp
bGwgYXBwbHk6CisKKwlDb3B5cmlnaHQgKGMpIFllYXIsIEluc3RpdHV0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisJYXJlIG1ldDoKKworCTEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorCSAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhl
IG5hbWVzIG9mIGl0cworCSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisJICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IgorCUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKwlJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorCUFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUKKwlMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisJQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKwlTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKwlJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorCUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisJQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKwlQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNGRhMDcKLS0tIC9kZXYvbnVsbAor
KysgYi9Db25maWcudWsKQEAgLTAsMCArMSw5IEBACittZW51Y29uZmlnIExJQkdDQworCWJvb2wg
ImdjYyAtIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIGxpYnJhcmllcyIKKwlkZWZhdWx0IG4KKwlz
ZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKKwlzZWxlY3QgTElCVUtERUJVRworCXNlbGVj
dCBMSUJVS0FMTE9DCisKK2lmIExJQkdDQworZW5kaWYKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJT
Lm1kIGIvTUFJTlRBSU5FUlMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzIzOGIzMAotLS0gL2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTLm1kCkBAIC0wLDAgKzEsMTEg
QEAKK01haW50YWluZXJzIExpc3QKKz09PT09PT09PT09PT09PT0KKworRm9yIG5vdGVzIG9uIGhv
dyB0byByZWFkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byBgTUFJTlRBSU5FUlMu
bWRgIGluCit0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgorCisJTElCR0NDLVVOSUtSQUZU
CisJTToJQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KKwlNOglGZWxpcGUgSHVp
Y2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+CisJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5v
cmcKKwlGOiAqCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlNjY3NwotLS0gL2Rldi9udWxsCisrKyBiL1JFQURN
RS5tZApAQCAtMCwwICsxLDcgQEAKK2djYyBmb3IgVW5pa3JhZnQKKz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHBvcnQgb2YgZ2NjIGZvciBVbmlrcmFmdCBhcyBl
eHRlcm5hbCBsaWJyYXJ5LgorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdl
bGwgYXMgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIGBkb2MvYAorc3ViZGlyZWN0b3J5IG9mIHRo
ZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIv
ZXhwb3J0c3ltcy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODZjM2Yz
Ci0tLSAvZGV2L251bGwKKysrIGIvZXhwb3J0c3ltcy51awpAQCAtMCwwICsxIEBACitub25lClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:15:41 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:15:41 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVUb-0006ai-2N; Thu, 26 Sep 2019 15:15:41 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVUZ-0006aV-VZ
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:15:39 +0000
X-Inumbo-ID: 7e32b06c-e070-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 7e32b06c-e070-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 15:15:37 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id BD86EF2023;
 Thu, 26 Sep 2019 17:15:36 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 8hrggt_FXjWm; Thu, 26 Sep 2019 17:15:36 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 917CBF2004;
 Thu, 26 Sep 2019 17:15:32 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:15:24 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:15:10 +0200
Message-ID: <20190926151513.8171-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
References: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [GCC PATCH v2 2/5] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

R0NDIGlzIGEgc3VpdGUgb2YgbXVsdGlwbGUgbGlicmFyaWVzLiBJbiB0aGlzIHBhdGNoIHdlIGlu
dHJvZHVjZSBvbmx5IHRoZSBiYXNpYwpjb250ZW50cyBmb3IgdGhlIE1ha2VmaWxlLgoKU2lnbmVk
LW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1
PgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0K
IE1ha2VmaWxlLnVrIHwgNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspCiBjcmVhdGUg
bW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2Vm
aWxlLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTcyZGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9NYWtlZmlsZS51awpAQCAtMCwwICsxLDYxIEBACisjICBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisjCisjICBnY2MgTWFrZWZpbGUudWsKKyMKKyMg
IEF1dGhvcnM6IENoYXJhbGFtcG9zIE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFzQG5lY2xhYi5l
dT4KKyMgICAgICAgICAgIENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CisjCisj
ICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uCisj
ICAgICAgICAgICAgICAgIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0
CisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMKKyMgIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xk
ZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjICAgICB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisj
CisjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkg
V0FZLgorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IHJlZ2lzdHJhdGlv
bgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZ2Nj
LCQoQ09ORklHX0xJQkdDQykpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPcmlnaW5h
bCBzb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCR0NDX1ZFUlNJT049Ny4zLjAK
K0xJQkdDQ19VUkw9aHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvZ2NjL2djYy0kKExJQkdDQ19WRVJT
SU9OKS9nY2MtJChMSUJHQ0NfVkVSU0lPTikudGFyLmd6CitMSUJHQ0NfU1VCRElSPWdjYy0kKExJ
QkdDQ19WRVJTSU9OKQorJChldmFsICQoY2FsbCBmZXRjaCxsaWJnY2MsJChMSUJHQ0NfVVJMKSkp
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCitMSUJHQ0NfRVhUUkFDVEVEID0gJChMSUJHQ0NfT1JJR0lOKS9nY2MtJChMSUJHQ0Nf
VkVSU0lPTikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSBpbmNsdWRlcwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NJTkNMVURFUy0kKENPTkZJR19MSUJHQ0MpICAgKz0g
LUkkKExJQkdDQ19CQVNFKS9pbmNsdWRlCitDWFhJTkNMVURFUy0kKENPTkZJR19MSUJHQ0MpICs9
IC1JJChMSUJHQ0NfQkFTRSkvaW5jbHVkZQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:15:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:15:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVUi-0006bf-4R; Thu, 26 Sep 2019 15:15:48 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVUh-0006bU-2T
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:15:47 +0000
X-Inumbo-ID: 80a8dce0-e070-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 80a8dce0-e070-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:15:41 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id D381BF2023;
 Thu, 26 Sep 2019 17:15:40 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 960ItU5PmjYj; Thu, 26 Sep 2019 17:15:40 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id A3008F2004;
 Thu, 26 Sep 2019 17:15:36 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:15:24 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:15:11 +0200
Message-ID: <20190926151513.8171-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
References: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [GCC PATCH v2 3/5] Port libbacktrace library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwb3J0IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGNvbmZpZy5oIGFuZCBiYWNrdHJhY2Ut
c3VwcG9ydGVkLmggaGVhZGVycy4KQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGdl
bmVyYXRlIHRoZW0gZHVyaW5nIHRoZSBidWlsZAoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3Mg
TWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgpTaWduZWQtb2ZmLWJ5OiBDb3N0
aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAxNCArKwogTWFrZWZpbGUudWsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIDMzICsrKysKIGxpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVr
ICAgICAgICAgICAgICAgICB8ICAgNiArCiBsaWJiYWNrdHJhY2UvaW5jbHVkZS9iYWNrdHJhY2Ut
c3VwcG9ydGVkLmggfCAgNjYgKysrKysrKwogbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNl
LmggICAgICAgICAgIHwgMjAwICsrKysrKysrKysrKysrKysrKysrKwogbGliYmFja3RyYWNlL2lu
Y2x1ZGUvY29uZmlnL2NvbmZpZy5oICAgICAgIHwgMTM1ICsrKysrKysrKysrKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDQ1NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYmFja3Ry
YWNlL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvaW5jbHVk
ZS9iYWNrdHJhY2Utc3VwcG9ydGVkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2Uv
aW5jbHVkZS9iYWNrdHJhY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmJhY2t0cmFjZS9pbmNs
dWRlL2NvbmZpZy9jb25maWcuaAoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpp
bmRleCBmYTRkYTA3Li5lYTQxMWIwIDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmln
LnVrCkBAIC02LDQgKzYsMTggQEAgbWVudWNvbmZpZyBMSUJHQ0MKIAlzZWxlY3QgTElCVUtBTExP
QwogCiBpZiBMSUJHQ0MKKworY29uZmlnIExJQkJBQ0tUUkFDRQorCWJvb2wgImxpYmJhY2t0cmFj
ZSBsaWJyYXJ5IgorCWRlZmF1bHQgbgorCXNlbGVjdCBMSUJORVdMSUJDCisJc2VsZWN0IExJQkNP
TVBJTEVSX1JUCisJc2VsZWN0IExJQlVOV0lORAorCXNlbGVjdCBMSUJDWFgKKwlzZWxlY3QgTElC
Q1hYQUJJCisJc2VsZWN0IExJQlVLTU1BUAorCXNlbGVjdCBVS1NZU0lORk8KK2lmIExJQkJBQ0tU
UkFDRQorZW5kaWYKKwogZW5kaWYKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUu
dWsKaW5kZXggMmE1NzJkZC4uMmU3NjNmOSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIv
TWFrZWZpbGUudWsKQEAgLTQwLDYgKzQwLDcgQEAKICMgTGlicmFyeSByZWdpc3RyYXRpb24KICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmdjYywkKENP
TkZJR19MSUJHQ0MpKSkKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliYmFja3RyYWNlLCQoQ09O
RklHX0xJQkJBQ0tUUkFDRSkpKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBPcmlnaW5h
bCBzb3VyY2VzCkBAIC01Myw5ICs1NCw0MSBAQCAkKGV2YWwgJChjYWxsIGZldGNoLGxpYmdjYywk
KExJQkdDQ19VUkwpKSkKICMgSGVscGVycwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIExJQkdD
Q19FWFRSQUNURUQgPSAkKExJQkdDQ19PUklHSU4pL2djYy0kKExJQkdDQ19WRVJTSU9OKQorTElC
QkFDS1RSQUNFX0VYVFJBQ1RFRCA9ICQoTElCR0NDX0VYVFJBQ1RFRCkvbGliYmFja3RyYWNlCiAK
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIExpYnJhcnkgaW5jbHVkZXMKICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCiBDSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSAgICs9IC1JJChMSUJHQ0Nf
QkFTRSkvaW5jbHVkZQogQ1hYSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSArPSAtSSQoTElCR0ND
X0JBU0UpL2luY2x1ZGUKKworQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkJBQ0tUUkFDRSkgICArPSAt
SSQoTElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlCitDWFhJTkNMVURFUy0kKENPTkZJ
R19MSUJCQUNLVFJBQ0UpICs9IC1JJChMSUJHQ0NfQkFTRSkvbGliYmFja3RyYWNlL2luY2x1ZGUK
KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYmFja3RyYWNlIGNvZGUKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCitMSUJCQUNLVFJBQ0VfQ0lOQ0xVREVTLXkgPSAtSSQoTElCR0NDX0JB
U0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlIFwKKwktSSQoTElCR0NDX0VYVFJBQ1RFRCkvaW5jbHVk
ZSAtSSQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkgXAorCS1JJChMSUJHQ0NfQkFTRSkvbGliYmFj
a3RyYWNlL2luY2x1ZGUvY29uZmlnCisKK0xJQkJBQ0tUUkFDRV9DRkxBR1MteSArPSAtREhBVkVf
Q09ORklHX0ggLURIQVZFX1NURElOVF9IXAorCS1mdW53aW5kLXRhYmxlcyBcCisJLVcgLVdhbGwg
LVd3cml0ZS1zdHJpbmdzIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMg
XAorCS1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdj
YXN0LXF1YWwKKworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFDRV9FWFRSQUNU
RUQpL2F0b21pYy5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJB
Q1RFRCkvZHdhcmYuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFDRV9FWFRS
QUNURUQpL2ZpbGVsaW5lLmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJCQUNLVFJBQ0Vf
RVhUUkFDVEVEKS9wb3NpeC5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNF
X0VYVFJBQ1RFRCkvcHJpbnQuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFD
RV9FWFRSQUNURUQpL3NvcnQuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFD
RV9FWFRSQUNURUQpL3N0YXRlLmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJCQUNLVFJB
Q0VfRVhUUkFDVEVEKS9iYWNrdHJhY2UuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJB
Q0tUUkFDRV9FWFRSQUNURUQpL3NpbXBsZS5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElC
QkFDS1RSQUNFX0VYVFJBQ1RFRCkvZWxmLmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJC
QUNLVFJBQ0VfRVhUUkFDVEVEKS9tbWFwaW8uYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJ
QkJBQ0tUUkFDRV9FWFRSQUNURUQpL21tYXAuYworCitMSUJCQUNLVFJBQ0VfRVhQT1JUUyA9ICQo
TElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrCisKZGlmZiAtLWdpdCBhL2xp
YmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrIGIvbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmM2U4NgotLS0gL2Rldi9udWxsCisr
KyBiL2xpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrCkBAIC0wLDAgKzEsNiBAQAorYmFja3RyYWNl
X2NyZWF0ZV9zdGF0ZQorYmFja3RyYWNlX2Z1bGwKK2JhY2t0cmFjZV9wY2luZm8KK2JhY2t0cmFj
ZV9wcmludAorYmFja3RyYWNlX3NpbXBsZQorYmFja3RyYWNlX3N5bWluZm8KZGlmZiAtLWdpdCBh
L2xpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQuaCBiL2xpYmJhY2t0cmFj
ZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jMDNhOThkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYmFja3RyYWNlL2luY2x1
ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qIGJhY2t0cmFjZS1z
dXBwb3J0ZWQuaC5pbiAtLSBXaGV0aGVyIHN0YWNrIGJhY2t0cmFjZSBpcyBzdXBwb3J0ZWQuCisg
ICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K
KyAgIFdyaXR0ZW4gYnkgSWFuIExhbmNlIFRheWxvciwgR29vZ2xlLgorCitSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKK21ldDoKKworICAgICgxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICgyKSBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbgorICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICBkaXN0cmlidXRpb24uCisKKyAgICAoMykg
VGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8KKyAgICBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAg
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCitTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gICovCisKKy8qIFRoZSBmaWxlIGJhY2t0cmFjZS1zdXBwb3J0ZWQuaC5pbiBp
cyB1c2VkIGJ5IGNvbmZpZ3VyZSB0byBnZW5lcmF0ZQorICAgdGhlIGZpbGUgYmFja3RyYWNlLXN1
cHBvcnRlZC5oLiAgVGhlIGZpbGUgYmFja3RyYWNlLXN1cHBvcnRlZC5oIG1heQorICAgYmUgI2lu
Y2x1ZGUnZCB0byBzZWUgd2hldGhlciB0aGUgYmFja3RyYWNlIGxpYnJhcnkgd2lsbCBiZSBhYmxl
IHRvCisgICBnZXQgYSBiYWNrdHJhY2UgYW5kIHByb2R1Y2Ugc3ltYm9saWMgaW5mb3JtYXRpb24u
ICAqLworCisKKy8qIEJBQ0tUUkFDRV9TVVBQT1JURUQgd2lsbCBiZSAjZGVmaW5lJ2QgYXMgMSBp
ZiB0aGUgYmFja3RyYWNlIGxpYnJhcnkKKyAgIHNob3VsZCB3b3JrLCAwIGlmIGl0IHdpbGwgbm90
LiAgTGlicmFyaWVzIG1heSAjaW5jbHVkZSB0aGlzIHRvIG1ha2UKKyAgIG90aGVyIGFycmFuZ2Vt
ZW50cy4gICovCisKKyNkZWZpbmUgQkFDS1RSQUNFX1NVUFBPUlRFRCAxCisKKy8qIEJBQ0tUUkFD
RV9VU0VTX01BTExPQyB3aWxsIGJlICNkZWZpbmUnZCBhcyAxIGlmIHRoZSBiYWNrdHJhY2UKKyAg
IGxpYnJhcnkgd2lsbCBjYWxsIG1hbGxvYyBhcyBpdCB3b3JrcywgMCBpZiBpdCB3aWxsIGNhbGwg
bW1hcAorICAgaW5zdGVhZC4gIFRoaXMgbWF5IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg
aXQgaXMgc2FmZSB0byBjYWxsCisgICB0aGUgYmFja3RyYWNlIGZ1bmN0aW9ucyBmcm9tIGEgc2ln
bmFsIGhhbmRsZXIuICBJbiBnZW5lcmFsIHRoaXMKKyAgIG9ubHkgYXBwbGllcyB0byBjYWxscyBs
aWtlIGJhY2t0cmFjZSBhbmQgYmFja3RyYWNlX3BjaW5mby4gIEl0IGRvZXMKKyAgIG5vdCBhcHBs
eSB0byBiYWNrdHJhY2Vfc2ltcGxlLCB3aGljaCBuZXZlciBjYWxscyBtYWxsb2MuICBJdCBkb2Vz
CisgICBub3QgYXBwbHkgdG8gYmFja3RyYWNlX3ByaW50LCB3aGljaCBhbHdheXMgY2FsbHMgZnBy
aW50ZiBhbmQKKyAgIHRoZXJlZm9yZSBtYWxsb2MuICAqLworCisjZGVmaW5lIEJBQ0tUUkFDRV9V
U0VTX01BTExPQyAwCisKKy8qIEJBQ0tUUkFDRV9TVVBQT1JUU19USFJFQURTIHdpbGwgYmUgI2Rl
ZmluZSdkIGFzIDEgaWYgdGhlIGJhY2t0cmFjZQorICAgbGlicmFyeSBpcyBjb25maWd1cmVkIHdp
dGggdGhyZWFkaW5nIHN1cHBvcnQsIDAgaWYgbm90LiAgSWYgdGhpcyBpcworICAgMCwgdGhlIHRo
cmVhZGVkIHBhcmFtZXRlciB0byBiYWNrdHJhY2VfY3JlYXRlX3N0YXRlIG11c3QgYmUgcGFzc2Vk
CisgICBhcyAwLiAgKi8KKworI2RlZmluZSBCQUNLVFJBQ0VfU1VQUE9SVFNfVEhSRUFEUyAxCisK
Ky8qIEJBQ0tUUkFDRV9TVVBQT1JUU19EQVRBIHdpbGwgYmUgI2RlZmluZWQnZCBhcyAxIGlmIHRo
ZSBiYWNrdHJhY2Vfc3ltaW5mbworICAgd2lsbCB3b3JrIGZvciB2YXJpYWJsZXMuICBJdCB3aWxs
IGFsd2F5cyB3b3JrIGZvciBmdW5jdGlvbnMuICAqLworCisjZGVmaW5lIEJBQ0tUUkFDRV9TVVBQ
T1JUU19EQVRBIDEKZGlmZiAtLWdpdCBhL2xpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS5o
IGIvbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTIzOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmJhY2t0cmFjZS9p
bmNsdWRlL2JhY2t0cmFjZS5oCkBAIC0wLDAgKzEsMjAwIEBACisvKiBiYWNrdHJhY2UuaCAtLSBQ
dWJsaWMgaGVhZGVyIGZpbGUgZm9yIHN0YWNrIGJhY2t0cmFjZSBsaWJyYXJ5LgorICAgQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0
dGVuIGJ5IElhbiBMYW5jZSBUYXlsb3IsIEdvb2dsZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCittZXQ6CisKKyAgICAoMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAoMikgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4KKyAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgICAgZGlzdHJpYnV0aW9uLgorCisgICAgKDMpIFRoZSBuYW1l
IG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvCisgICAgZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuICAqLworCisjaWZuZGVmIEJBQ0tUUkFDRV9ICisjZGVmaW5lIEJBQ0tUUkFDRV9ICisKKyNp
bmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBXZSB3YW50IHRvIGdl
dCBhIGRlZmluaXRpb24gZm9yIHVpbnRwdHJfdCwgYnV0IHdlIHN0aWxsIGNhcmUgYWJvdXQKKyAg
IHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIDxzdGRpbnQuaD4uICAqLworI2lmIGRlZmluZWQoX19H
TElCQ19fKSAmJiBfX0dMSUJDX18gPj0gMgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNlbGlm
IGRlZmluZWQoSEFWRV9TVERJTlRfSCkKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZWxzZQor
CisvKiBTeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSA8c3RkaW50Lmg+IG11c3QgcHJvdmlkZSBnc3Rk
aW50LmgsIGUuZy4sCisgICBmcm9tIEdDQ19IRUFERVJfU1RESU5UIGluIGNvbmZpZ3VyZS5hYy4g
ICovCisvLyNpbmNsdWRlICJnc3RkaW50LmgiCisKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3Bs
dXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFRoZSBiYWNrdHJhY2Ugc3RhdGUuICBUaGlz
IHN0cnVjdCBpcyBpbnRlbnRpb25hbGx5IG5vdCBkZWZpbmVkIGluCisgICB0aGUgcHVibGljIGlu
dGVyZmFjZS4gICovCisKK3N0cnVjdCBiYWNrdHJhY2Vfc3RhdGU7CisKKy8qIFRoZSB0eXBlIG9m
IHRoZSBlcnJvciBjYWxsYmFjayBhcmd1bWVudCB0byBiYWNrdHJhY2UgZnVuY3Rpb25zLgorICAg
VGhpcyBmdW5jdGlvbiwgaWYgbm90IE5VTEwsIHdpbGwgYmUgY2FsbGVkIGZvciBjZXJ0YWluIGVy
cm9yIGNhc2VzLgorICAgVGhlIERBVEEgYXJndW1lbnQgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlv
biB0aGF0IGNhbGxzIHRoaXMgb25lLgorICAgVGhlIE1TRyBhcmd1bWVudCBpcyBhbiBlcnJvciBt
ZXNzYWdlLiAgVGhlIEVSUk5VTSBhcmd1bWVudCwgaWYKKyAgIGdyZWF0ZXIgdGhhbiAwLCBob2xk
cyBhbiBlcnJubyB2YWx1ZS4gIFRoZSBNU0cgYnVmZmVyIG1heSBiZWNvbWUKKyAgIGludmFsaWQg
YWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorCisgICBBcyBhIHNwZWNpYWwgY2FzZSwgdGhl
IEVSUk5VTSBhcmd1bWVudCB3aWxsIGJlIHBhc3NlZCBhcyAtMSBpZiBubworICAgZGVidWcgaW5m
byBjYW4gYmUgZm91bmQgZm9yIHRoZSBleGVjdXRhYmxlLCBidXQgdGhlIGZ1bmN0aW9uCisgICBy
ZXF1aXJlcyBkZWJ1ZyBpbmZvIChlLmcuLCBiYWNrdHJhY2VfZnVsbCwgYmFja3RyYWNlX3BjaW5m
bykuICBUaGUKKyAgIE1TRyBpbiB0aGlzIGNhc2Ugd2lsbCBiZSBzb21ldGhpbmcgYWxvbmcgdGhl
IGxpbmVzIG9mICJubyBkZWJ1ZworICAgaW5mbyIuICBTaW1pbGFybHksIEVSUk5VTSB3aWxsIGJl
IHBhc3NlZCBhcyAtMSBpZiB0aGVyZSBpcyBubworICAgc3ltYm9sIHRhYmxlLCBidXQgdGhlIGZ1
bmN0aW9uIHJlcXVpcmVzIGEgc3ltYm9sIHRhYmxlIChlLmcuLAorICAgYmFja3RyYWNlX3N5bWlu
Zm8pLiAgVGhpcyBtYXkgYmUgdXNlZCBhcyBhIHNpZ25hbCB0aGF0IHNvbWUgb3RoZXIKKyAgIGFw
cHJvYWNoIHNob3VsZCBiZSB0cmllZC4gICovCisKK3R5cGVkZWYgdm9pZCAoKmJhY2t0cmFjZV9l
cnJvcl9jYWxsYmFjaykgKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKm1zZywKKwkJCQkJICBpbnQg
ZXJybnVtKTsKKworLyogQ3JlYXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgYmFja3RyYWNl
IHJvdXRpbmVzLiAgVGhpcyBtdXN0IGJlCisgICBjYWxsZWQgYmVmb3JlIGFueSBvZiB0aGUgb3Ro
ZXIgcm91dGluZXMsIGFuZCBpdHMgcmV0dXJuIHZhbHVlIG11c3QKKyAgIGJlIHBhc3NlZCB0byBh
bGwgb2YgdGhlIG90aGVyIHJvdXRpbmVzLiAgRklMRU5BTUUgaXMgdGhlIHBhdGggbmFtZQorICAg
b2YgdGhlIGV4ZWN1dGFibGUgZmlsZTsgaWYgaXQgaXMgTlVMTCB0aGUgbGlicmFyeSB3aWxsIHRy
eQorICAgc3lzdGVtLXNwZWNpZmljIHBhdGggbmFtZXMuICBJZiBub3QgTlVMTCwgRklMRU5BTUUg
bXVzdCBwb2ludCB0byBhCisgICBwZXJtYW5lbnQgYnVmZmVyLiAgSWYgVEhSRUFERUQgaXMgbm9u
LXplcm8gdGhlIHN0YXRlIG1heSBiZQorICAgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdGhyZWFkcyBz
aW11bHRhbmVvdXNseSwgYW5kIHRoZSBsaWJyYXJ5IHdpbGwKKyAgIHVzZSBhcHByb3ByaWF0ZSBh
dG9taWMgb3BlcmF0aW9ucy4gIElmIFRIUkVBREVEIGlzIHplcm8gdGhlIHN0YXRlCisgICBtYXkg
b25seSBiZSBhY2Nlc3NlZCBieSBvbmUgdGhyZWFkIGF0IGEgdGltZS4gIFRoaXMgcmV0dXJucyBh
IHN0YXRlCisgICBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IuICBJZiBhbiBlcnJv
ciBvY2N1cnMsIHRoaXMgd2lsbAorICAgY2FsbCB0aGUgRVJST1JfQ0FMTEJBQ0sgcm91dGluZS4g
ICovCisKK2V4dGVybiBzdHJ1Y3QgYmFja3RyYWNlX3N0YXRlICpiYWNrdHJhY2VfY3JlYXRlX3N0
YXRlICgKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHRocmVhZGVkLAorICAgIGJhY2t0
cmFjZV9lcnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjaywgdm9pZCAqZGF0YSk7CisKKy8qIFRo
ZSB0eXBlIG9mIHRoZSBjYWxsYmFjayBhcmd1bWVudCB0byB0aGUgYmFja3RyYWNlX2Z1bGwgZnVu
Y3Rpb24uCisgICBEQVRBIGlzIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gYmFja3RyYWNlX2Z1bGwu
ICBQQyBpcyB0aGUgcHJvZ3JhbQorICAgY291bnRlci4gIEZJTEVOQU1FIGlzIHRoZSBuYW1lIG9m
IHRoZSBmaWxlIGNvbnRhaW5pbmcgUEMsIG9yIE5VTEwKKyAgIGlmIG5vdCBhdmFpbGFibGUuICBM
SU5FTk8gaXMgdGhlIGxpbmUgbnVtYmVyIGluIEZJTEVOQU1FIGNvbnRhaW5pbmcKKyAgIFBDLCBv
ciAwIGlmIG5vdCBhdmFpbGFibGUuICBGVU5DVElPTiBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rp
b24KKyAgIGNvbnRhaW5pbmcgUEMsIG9yIE5VTEwgaWYgbm90IGF2YWlsYWJsZS4gIFRoaXMgc2hv
dWxkIHJldHVybiAwIHRvCisgICBjb250aW51aW5nIHRyYWNpbmcuICBUaGUgRklMRU5BTUUgYW5k
IEZVTkNUSU9OIGJ1ZmZlcnMgbWF5IGJlY29tZQorICAgaW52YWxpZCBhZnRlciB0aGlzIGZ1bmN0
aW9uIHJldHVybnMuICAqLworCit0eXBlZGVmIGludCAoKmJhY2t0cmFjZV9mdWxsX2NhbGxiYWNr
KSAodm9pZCAqZGF0YSwgdWludHB0cl90IHBjLAorCQkJCQljb25zdCBjaGFyICpmaWxlbmFtZSwg
aW50IGxpbmVubywKKwkJCQkJY29uc3QgY2hhciAqZnVuY3Rpb24pOworCisvKiBHZXQgYSBmdWxs
IHN0YWNrIGJhY2t0cmFjZS4gIFNLSVAgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcDsK
KyAgIHBhc3NpbmcgMCB3aWxsIHN0YXJ0IHRoZSB0cmFjZSB3aXRoIHRoZSBmdW5jdGlvbiBjYWxs
aW5nCisgICBiYWNrdHJhY2VfZnVsbC4gIERBVEEgaXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBy
b3V0aW5lLiAgSWYgYW55CisgICBjYWxsIHRvIENBTExCQUNLIHJldHVybnMgYSBub24temVybyB2
YWx1ZSwgdGhlIHN0YWNrIGJhY2t0cmFjZQorICAgc3RvcHMsIGFuZCBiYWNrdHJhY2UgcmV0dXJu
cyB0aGF0IHZhbHVlOyB0aGlzIG1heSBiZSB1c2VkIHRvIGxpbWl0CisgICB0aGUgbnVtYmVyIG9m
IHN0YWNrIGZyYW1lcyBkZXNpcmVkLiAgSWYgYWxsIGNhbGxzIHRvIENBTExCQUNLCisgICByZXR1
cm4gMCwgYmFja3RyYWNlIHJldHVybnMgMC4gIFRoZSBiYWNrdHJhY2VfZnVsbCBmdW5jdGlvbiB3
aWxsCisgICBtYWtlIGF0IGxlYXN0IG9uZSBjYWxsIHRvIGVpdGhlciBDQUxMQkFDSyBvciBFUlJP
Ul9DQUxMQkFDSy4gIFRoaXMKKyAgIGZ1bmN0aW9uIHJlcXVpcmVzIGRlYnVnIGluZm8gZm9yIHRo
ZSBleGVjdXRhYmxlLiAgKi8KKworZXh0ZXJuIGludCBiYWNrdHJhY2VfZnVsbCAoc3RydWN0IGJh
Y2t0cmFjZV9zdGF0ZSAqc3RhdGUsIGludCBza2lwLAorCQkJICAgYmFja3RyYWNlX2Z1bGxfY2Fs
bGJhY2sgY2FsbGJhY2ssCisJCQkgICBiYWNrdHJhY2VfZXJyb3JfY2FsbGJhY2sgZXJyb3JfY2Fs
bGJhY2ssCisJCQkgICB2b2lkICpkYXRhKTsKKworLyogVGhlIHR5cGUgb2YgdGhlIGNhbGxiYWNr
IGFyZ3VtZW50IHRvIHRoZSBiYWNrdHJhY2Vfc2ltcGxlIGZ1bmN0aW9uLgorICAgREFUQSBpcyB0
aGUgYXJndW1lbnQgcGFzc2VkIHRvIHNpbXBsZV9iYWNrdHJhY2UuICBQQyBpcyB0aGUgcHJvZ3Jh
bQorICAgY291bnRlci4gIFRoaXMgc2hvdWxkIHJldHVybiAwIHRvIGNvbnRpbnVlIHRyYWNpbmcu
ICAqLworCit0eXBlZGVmIGludCAoKmJhY2t0cmFjZV9zaW1wbGVfY2FsbGJhY2spICh2b2lkICpk
YXRhLCB1aW50cHRyX3QgcGMpOworCisvKiBHZXQgYSBzaW1wbGUgYmFja3RyYWNlLiAgU0tJUCBp
cyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwLCBhcworICAgaW4gYmFja3RyYWNlLiAgREFU
QSBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHJvdXRpbmUuICBJZiBhbnkgY2FsbAorICAgdG8g
Q0FMTEJBQ0sgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgc3RhY2sgYmFja3RyYWNlIHN0
b3BzLAorICAgYW5kIGJhY2t0cmFjZV9zaW1wbGUgcmV0dXJucyB0aGF0IHZhbHVlLiAgT3RoZXJ3
aXNlCisgICBiYWNrdHJhY2Vfc2ltcGxlIHJldHVybnMgMC4gIFRoZSBiYWNrdHJhY2Vfc2ltcGxl
IGZ1bmN0aW9uIHdpbGwKKyAgIG1ha2UgYXQgbGVhc3Qgb25lIGNhbGwgdG8gZWl0aGVyIENBTExC
QUNLIG9yIEVSUk9SX0NBTExCQUNLLiAgVGhpcworICAgZnVuY3Rpb24gZG9lcyBub3QgcmVxdWly
ZSBhbnkgZGVidWcgaW5mbyBmb3IgdGhlIGV4ZWN1dGFibGUuICAqLworCitleHRlcm4gaW50IGJh
Y2t0cmFjZV9zaW1wbGUgKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLCBpbnQgc2tpcCwK
KwkJCSAgICAgYmFja3RyYWNlX3NpbXBsZV9jYWxsYmFjayBjYWxsYmFjaywKKwkJCSAgICAgYmFj
a3RyYWNlX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrLAorCQkJICAgICB2b2lkICpkYXRh
KTsKKworLyogUHJpbnQgdGhlIGN1cnJlbnQgYmFja3RyYWNlIGluIGEgdXNlciByZWFkYWJsZSBm
b3JtYXQgdG8gYSBGSUxFLgorICAgU0tJUCBpcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lw
LCBhcyBpbiBiYWNrdHJhY2VfZnVsbC4gIEFueQorICAgZXJyb3IgbWVzc2FnZXMgYXJlIHByaW50
ZWQgdG8gc3RkZXJyLiAgVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBkZWJ1ZworICAgaW5mbyBmb3Ig
dGhlIGV4ZWN1dGFibGUuICAqLworCitleHRlcm4gdm9pZCBiYWNrdHJhY2VfcHJpbnQgKHN0cnVj
dCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLCBpbnQgc2tpcCwgRklMRSAqKTsKKworLyogR2l2ZW4g
UEMsIGEgcHJvZ3JhbSBjb3VudGVyIGluIHRoZSBjdXJyZW50IHByb2dyYW0sIGNhbGwgdGhlCisg
ICBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kIGZ1bmN0
aW9uIG5hbWUKKyAgIGluZm9ybWF0aW9uLiAgVGhpcyB3aWxsIG5vcm1hbGx5IGNhbGwgdGhlIGNh
bGxiYWNrIGZ1bmN0aW9uIGV4YWN0bHkKKyAgIG9uY2UuICBIb3dldmVyLCBpZiB0aGUgUEMgaGFw
cGVucyB0byBkZXNjcmliZSBhbiBpbmxpbmVkIGNhbGwsIGFuZAorICAgdGhlIGRlYnVnZ2luZyBp
bmZvcm1hdGlvbiBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCB0aGVuCisgICB0
aGlzIG1heSBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcy4gIFRoaXMg
d2lsbCBtYWtlCisgICBhdCBsZWFzdCBvbmUgY2FsbCB0byBlaXRoZXIgQ0FMTEJBQ0sgb3IgRVJS
T1JfQ0FMTEJBQ0suICBUaGlzCisgICByZXR1cm5zIHRoZSBmaXJzdCBub24temVybyB2YWx1ZSBy
ZXR1cm5lZCBieSBDQUxMQkFDSywgb3IgMC4gICovCisKK2V4dGVybiBpbnQgYmFja3RyYWNlX3Bj
aW5mbyAoc3RydWN0IGJhY2t0cmFjZV9zdGF0ZSAqc3RhdGUsIHVpbnRwdHJfdCBwYywKKwkJCSAg
ICAgYmFja3RyYWNlX2Z1bGxfY2FsbGJhY2sgY2FsbGJhY2ssCisJCQkgICAgIGJhY2t0cmFjZV9l
cnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjaywKKwkJCSAgICAgdm9pZCAqZGF0YSk7CisKKy8q
IFRoZSB0eXBlIG9mIHRoZSBjYWxsYmFjayBhcmd1bWVudCB0byBiYWNrdHJhY2Vfc3ltaW5mby4g
IERBVEEgYW5kCisgICBQQyBhcmUgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYmFja3RyYWNlX3N5
bWluZm8uICBTWU1OQU1FIGlzIHRoZQorICAgbmFtZSBvZiB0aGUgc3ltYm9sIGZvciB0aGUgY29y
cmVzcG9uZGluZyBjb2RlLiAgU1lNVkFMIGlzIHRoZQorICAgdmFsdWUgYW5kIFNZTVNJWkUgaXMg
dGhlIHNpemUgb2YgdGhlIHN5bWJvbC4gIFNZTU5BTUUgd2lsbCBiZSBOVUxMCisgICBpZiBubyBl
cnJvciBvY2N1cnJlZCBidXQgdGhlIHN5bWJvbCBjb3VsZCBub3QgYmUgZm91bmQuICAqLworCit0
eXBlZGVmIHZvaWQgKCpiYWNrdHJhY2Vfc3ltaW5mb19jYWxsYmFjaykgKHZvaWQgKmRhdGEsIHVp
bnRwdHJfdCBwYywKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUsCisJCQkJCSAgICB1aW50
cHRyX3Qgc3ltdmFsLAorCQkJCQkgICAgdWludHB0cl90IHN5bXNpemUpOworCisvKiBHaXZlbiBB
RERSLCBhbiBhZGRyZXNzIG9yIHByb2dyYW0gY291bnRlciBpbiB0aGUgY3VycmVudCBwcm9ncmFt
LAorICAgY2FsbCB0aGUgY2FsbGJhY2sgaW5mb3JtYXRpb24gd2l0aCB0aGUgc3ltYm9sIG5hbWUg
YW5kIHZhbHVlCisgICBkZXNjcmliaW5nIHRoZSBmdW5jdGlvbiBvciB2YXJpYWJsZSBpbiB3aGlj
aCBBRERSIG1heSBiZSBmb3VuZC4KKyAgIFRoaXMgd2lsbCBjYWxsIGVpdGhlciBDQUxMQkFDSyBv
ciBFUlJPUl9DQUxMQkFDSyBleGFjdGx5IG9uY2UuCisgICBUaGlzIHJldHVybnMgMSBvbiBzdWNj
ZXNzLCAwIG9uIGZhaWx1cmUuICBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzCisgICB0aGUgc3ltYm9s
IHRhYmxlIGJ1dCBkb2VzIG5vdCByZXF1aXJlIHRoZSBkZWJ1ZyBpbmZvLiAgTm90ZSB0aGF0IGlm
CisgICB0aGUgc3ltYm9sIHRhYmxlIGlzIHByZXNlbnQgYnV0IEFERFIgY291bGQgbm90IGJlIGZv
dW5kIGluIHRoZQorICAgdGFibGUsIENBTExCQUNLIHdpbGwgYmUgY2FsbGVkIHdpdGggYSBOVUxM
IFNZTU5BTUUgYXJndW1lbnQuCisgICBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBlcnJvci4g
ICovCisKK2V4dGVybiBpbnQgYmFja3RyYWNlX3N5bWluZm8gKHN0cnVjdCBiYWNrdHJhY2Vfc3Rh
dGUgKnN0YXRlLCB1aW50cHRyX3QgYWRkciwKKwkJCSAgICAgIGJhY2t0cmFjZV9zeW1pbmZvX2Nh
bGxiYWNrIGNhbGxiYWNrLAorCQkJICAgICAgYmFja3RyYWNlX2Vycm9yX2NhbGxiYWNrIGVycm9y
X2NhbGxiYWNrLAorCQkJICAgICAgdm9pZCAqZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
fSAvKiBFbmQgZXh0ZXJuICJDIi4gICovCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBh
L2xpYmJhY2t0cmFjZS9pbmNsdWRlL2NvbmZpZy9jb25maWcuaCBiL2xpYmJhY2t0cmFjZS9pbmNs
dWRlL2NvbmZpZy9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
MDg2ZjRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYmFja3RyYWNlL2luY2x1ZGUvY29uZmlnL2Nv
bmZpZy5oCkBAIC0wLDAgKzEsMTM1IEBACisvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNv
bmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBm
cm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRUxGIHNpemU6IDMyIG9y
IDY0ICovCisjZGVmaW5lIEJBQ0tUUkFDRV9FTEZfU0laRSA2NAorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgX19hdG9taWMgZnVuY3Rpb25zICovCisjZGVmaW5lIEhBVkVfQVRPTUlD
X0ZVTkNUSU9OUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlv
biBvZiBgc3RybmxlbicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhB
VkVfREVDTF9TVFJOTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZj
bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKKworLyogRGVmaW5l
IGlmIGRsX2l0ZXJhdGVfcGhkciBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIEhBVkVfRExfSVRF
UkFURV9QSERSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZjbnRsIGZ1bmN0
aW9uICovCisjZGVmaW5lIEhBVkVfRkNOVEwgMQorCisvKiBEZWZpbmUgaWYgZ2V0ZXhlY25hbWUg
aXMgYXZhaWxhYmxlLiAqLworLyogI3VuZGVmIEhBVkVfR0VURVhFQ05BTUUgKi8KKworLyogRGVm
aW5lIGlmIF9VbndpbmRfR2V0SVBJbmZvIGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgSEFWRV9H
RVRJUElORk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbmsuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfTElOS19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4g
aGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX1NUUklOR1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5n
Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIF9fc3luYyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgSEFWRV9T
WU5DX0ZVTkNUSU9OUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21t
YW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1k
aXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgor
ICAgKi8KKyNkZWZpbmUgTFRfT0JKRElSICIubGlicy8iCisKKy8qIERlZmluZSB0byB0aGUgYWRk
cmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAq
LworI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwg
bmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAicGFja2FnZS11
bnVzZWQiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMg
cGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgInBhY2thZ2UtdW51c2VkIHZlcnNp
b24tdW51c2VkIgorCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0
aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibGliYmFja3RyYWNlIgor
CisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmlu
ZSBQQUNLQUdFX1VSTCAiIgorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNr
YWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gInZlcnNpb24tdW51c2VkIgorCisvKiBU
aGUgc2l6ZSBvZiBgY2hhcicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qICN1bmRlZiBT
SVpFT0ZfQ0hBUiAqLworCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6
ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9JTlQgKi8KKworLyogVGhlIHNpemUgb2YgYGxvbmcn
LCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX0xPTkcgKi8KKwor
LyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogI3Vu
ZGVmIFNJWkVPRl9TSE9SVCAqLworCisvKiBUaGUgc2l6ZSBvZiBgdm9pZCAqJywgYXMgY29tcHV0
ZWQgYnkgc2l6ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9WT0lEX1AgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNU
RENfSEVBREVSUyAxCisKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAg
Ki8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgZGVmaW5lIF9BTExfU09VUkNFIDEKKyNlbmRpZgor
LyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLwor
I2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisvKiBF
bmFibGUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9QT1NJ
WF9QVEhSRUFEX1NFTUFOVElDUworIyBkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEK
KyNlbmRpZgorLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gSFAgTm9uU3RvcC4gICovCisjaWZuZGVm
IF9UQU5ERU1fU09VUkNFCisjIGRlZmluZSBfVEFOREVNX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVu
YWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5T
SU9OU19fCisjIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUg
dG8gMSBpZiBvbiBNSU5JWC4gKi8KKy8qICN1bmRlZiBfTUlOSVggKi8KKworLyogRGVmaW5lIHRv
IDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0
IHdpdGgKKyAgIHRoaXMgZGVmaW5lZC4gKi8KKy8qICN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UgKi8K
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBhbmQg
b3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisvKiAjdW5kZWYgX1BPU0lYX1NPVVJDRSAqLwotLSAK
Mi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:15:49 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:15:49 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVUj-0006c8-6N; Thu, 26 Sep 2019 15:15:49 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVUi-0006be-3f
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:15:48 +0000
X-Inumbo-ID: 831c7414-e070-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 831c7414-e070-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 15:15:45 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E91F7F2025;
 Thu, 26 Sep 2019 17:15:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id hyBcUxuPluvF; Thu, 26 Sep 2019 17:15:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id B4C46F2004;
 Thu, 26 Sep 2019 17:15:40 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:15:24 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:15:12 +0200
Message-ID: <20190926151513.8171-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
References: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [GCC PATCH v2 4/5] Port libffi library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwb3J0IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGZmaS5oIGFuZCBmZmljb25maWcuaCBo
ZWFkZXJzLiBBbm90aGVyCm9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gZ2VuZXJhdGUgdGhlbSBk
dXJpbmcgdGhlIGJ1aWxkLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFy
YWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29z
dGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAxNCArLQogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgIHwgIDI4ICsrCiBs
aWJmZmkvZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgfCAgMjEgKysKIGxpYmZmaS9pbmNsdWRl
L2NvbmZpZy9mZmljb25maWcuaCB8IDIwNiArKysrKysrKysrKysKIGxpYmZmaS9pbmNsdWRlL2Zm
aS5oICAgICAgICAgICAgICB8IDUwOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxp
YmZmaS9pbmNsdWRlL2ZmaXRhcmdldC5oICAgICAgICB8IDE0MSArKysrKysrKysKIDYgZmlsZXMg
Y2hhbmdlZCwgOTE1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliZmZpL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJmZmkvaW5j
bHVkZS9jb25maWcvZmZpY29uZmlnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJmZmkvaW5jbHVk
ZS9mZmkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9pbmNsdWRlL2ZmaXRhcmdldC5oCgpk
aWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCmluZGV4IGVhNDExYjAuLjVhYWNhN2Mg
MTAwNjQ0Ci0tLSBhL0NvbmZpZy51aworKysgYi9Db25maWcudWsKQEAgLTEsMjMgKzEsMjkgQEAK
IG1lbnVjb25maWcgTElCR0NDCiAJYm9vbCAiZ2NjIC0gR05VIENvbXBpbGVyIENvbGxlY3Rpb24g
bGlicmFyaWVzIgogCWRlZmF1bHQgbgotCXNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQwog
CXNlbGVjdCBMSUJVS0RFQlVHCiAJc2VsZWN0IExJQlVLQUxMT0MKKwlzZWxlY3QgTElCTkVXTElC
QworCXNlbGVjdCBMSUJVS01NQVAKKwlzZWxlY3QgVUtTWVNJTkZPCiAKIGlmIExJQkdDQwogCiBj
b25maWcgTElCQkFDS1RSQUNFCiAJYm9vbCAibGliYmFja3RyYWNlIGxpYnJhcnkiCiAJZGVmYXVs
dCBuCi0Jc2VsZWN0IExJQk5FV0xJQkMKIAlzZWxlY3QgTElCQ09NUElMRVJfUlQKIAlzZWxlY3Qg
TElCVU5XSU5ECiAJc2VsZWN0IExJQkNYWAogCXNlbGVjdCBMSUJDWFhBQkkKLQlzZWxlY3QgTElC
VUtNTUFQCi0Jc2VsZWN0IFVLU1lTSU5GTwogaWYgTElCQkFDS1RSQUNFCiBlbmRpZgogCitjb25m
aWcgTElCRkZJCisgICAgICAgYm9vbCAibGliZmZpIC0gQSBQb3J0YWJsZSBGb3JlaWduIEZ1bmN0
aW9uIEludGVyZmFjZSBMaWJyYXJ5IgorICAgICAgIGRlZmF1bHQgbgorICAgICAgIHNlbGVjdCBM
SUJQVEhSRUFEX0VNQkVEREVECitpZiBMSUJGRkkKK2VuZGlmCisKIGVuZGlmCmRpZmYgLS1naXQg
YS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDJlNzYzZjkuLmNlODZjZmIgMTAwNjQ0
Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC00MSw2ICs0MSw3IEBACiAj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJnY2MsJChD
T05GSUdfTElCR0NDKSkpCiAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmJhY2t0cmFjZSwkKENP
TkZJR19MSUJCQUNLVFJBQ0UpKSkKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZmZpLCQoQ09O
RklHX0xJQkZGSSkpKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBPcmlnaW5hbCBzb3Vy
Y2VzCkBAIC01NSw2ICs1Niw3IEBAICQoZXZhbCAkKGNhbGwgZmV0Y2gsbGliZ2NjLCQoTElCR0ND
X1VSTCkpKQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIExJQkdDQ19FWFRSQUNURUQgPSAkKExJ
QkdDQ19PUklHSU4pL2djYy0kKExJQkdDQ19WRVJTSU9OKQogTElCQkFDS1RSQUNFX0VYVFJBQ1RF
RCA9ICQoTElCR0NDX0VYVFJBQ1RFRCkvbGliYmFja3RyYWNlCitMSUJGRklfRVhUUkFDVEVEID0g
JChMSUJHQ0NfRVhUUkFDVEVEKS9saWJmZmkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMg
TGlicmFyeSBpbmNsdWRlcwpAQCAtNjUsNiArNjcsOSBAQCBDWFhJTkNMVURFUy0kKENPTkZJR19M
SUJHQ0MpICs9IC1JJChMSUJHQ0NfQkFTRSkvaW5jbHVkZQogQ0lOQ0xVREVTLSQoQ09ORklHX0xJ
QkJBQ0tUUkFDRSkgICArPSAtSSQoTElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlCiBD
WFhJTkNMVURFUy0kKENPTkZJR19MSUJCQUNLVFJBQ0UpICs9IC1JJChMSUJHQ0NfQkFTRSkvbGli
YmFja3RyYWNlL2luY2x1ZGUKIAorQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkZGSSkgICArPSAtSSQo
TElCR0NDX0JBU0UpL2xpYmZmaS9pbmNsdWRlCitDWFhJTkNMVURFUy0kKENPTkZJR19MSUJGRkkp
ICs9IC1JJChMSUJHQ0NfQkFTRSkvbGliZmZpL2luY2x1ZGUKKwogIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKICMgbGliYmFja3RyYWNlIGNvZGUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC05
MiwzICs5NywyNiBAQCBMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJB
Q1RFRCkvbW1hcC5jCiAKIExJQkJBQ0tUUkFDRV9FWFBPUlRTID0gJChMSUJHQ0NfQkFTRSkvbGli
YmFja3RyYWNlL2V4cG9ydHN5bXMudWsKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGli
ZmZpIGNvZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJGRklfQ09NTU9OX0NJTkNMVURF
Uy15ID0gLUkkKExJQkdDQ19CQVNFKS9saWJmZmkvaW5jbHVkZSBcCisgICAgICAgLUkkKExJQkdD
Q19FWFRSQUNURUQpL2luY2x1ZGUgLUkkKExJQkZGSV9FWFRSQUNURUQpL2luY2x1ZGUgXAorICAg
ICAgIC1JJChMSUJHQ0NfQkFTRSkvbGliZmZpL2luY2x1ZGUvY29uZmlnCitMSUJGRklfQ09NTU9O
X0NJTkNMVURFUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0gLUkkKExJQkZGSV9FWFRSQUNURUQp
L3NyYy94ODYKK0xJQkZGSV9BU0lOQ0xVREVTLXkgPSAkKExJQkZGSV9DT01NT05fQ0lOQ0xVREVT
LXkpCitMSUJGRklfQ0lOQ0xVREVTLXkgID0gJChMSUJGRklfQ09NTU9OX0NJTkNMVURFUy15KQor
CitMSUJGRklfQ0ZMQUdTLXkgKz0gLURIQVZFX0NPTkZJR19IIC1mZXhjZXB0aW9ucyAtV2FsbCBc
CisJLVduby1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAtV25vLXNpZ24tY29tcGFyZSBc
CisJLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tZW1wdHktYm9keSAtV25vLWltcGxpY2l0LWZh
bGx0aHJvdWdoCisKK0xJQkZGSV9TUkNTLXkgKz0gJChMSUJGRklfRVhUUkFDVEVEKS9zcmMvY2xv
c3VyZXMuYworTElCRkZJX1NSQ1MteSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy9qYXZhX3Jh
d19hcGkuYworTElCRkZJX1NSQ1MteSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy9wcmVwX2Np
Zi5jCitMSUJGRklfU1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3Jhd19hcGkuYwor
TElCRkZJX1NSQ1MteSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy90eXBlcy5jCitMSUJGRklf
U1JDUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0gJChMSUJGRklfRVhUUkFDVEVEKS9zcmMveDg2
L2ZmaTY0LmMKK0xJQkZGSV9TUkNTLSQoQ09ORklHX0FSQ0hfWDg2XzY0KSArPSAkKExJQkZGSV9F
WFRSQUNURUQpL3NyYy94ODYvdW5peDY0LlMKKworTElCRkZJX0VYUE9SVFMgPSAkKExJQkdDQ19C
QVNFKS9saWJmZmkvZXhwb3J0c3ltcy51awpkaWZmIC0tZ2l0IGEvbGliZmZpL2V4cG9ydHN5bXMu
dWsgYi9saWJmZmkvZXhwb3J0c3ltcy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jNzY0MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZmZpL2V4cG9ydHN5bXMudWsKQEAg
LTAsMCArMSwyMSBAQAorZmZpX2NhbGwKK2ZmaV9jYWxsX2dvCitmZmlfcHJlcF9jaWYKK2ZmaV9w
cmVwX2NpZl92YXIKK2ZmaV9wcmVwX2dvX2Nsb3N1cmUKK2ZmaV90eXBlX2NvbXBsZXhfZG91Ymxl
CitmZmlfdHlwZV9jb21wbGV4X2Zsb2F0CitmZmlfdHlwZV9jb21wbGV4X2xvbmdkb3VibGUKK2Zm
aV90eXBlX2RvdWJsZQorZmZpX3R5cGVfZmxvYXQKK2ZmaV90eXBlX2xvbmdkb3VibGUKK2ZmaV90
eXBlX3BvaW50ZXIKK2ZmaV90eXBlX3NpbnQxNgorZmZpX3R5cGVfc2ludDMyCitmZmlfdHlwZV9z
aW50NjQKK2ZmaV90eXBlX3NpbnQ4CitmZmlfdHlwZV91aW50MTYKK2ZmaV90eXBlX3VpbnQzMgor
ZmZpX3R5cGVfdWludDY0CitmZmlfdHlwZV91aW50OAorZmZpX3R5cGVfdm9pZApkaWZmIC0tZ2l0
IGEvbGliZmZpL2luY2x1ZGUvY29uZmlnL2ZmaWNvbmZpZy5oIGIvbGliZmZpL2luY2x1ZGUvY29u
ZmlnL2ZmaWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmM2Yx
MmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJmZmkvaW5jbHVkZS9jb25maWcvZmZpY29uZmlnLmgK
QEAgLTAsMCArMSwyMDYgQEAKKy8qIGZmaWNvbmZpZy5oLiAgR2VuZXJhdGVkIGZyb20gZmZpY29u
ZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qIGZmaWNvbmZpZy5oLmluLiAgR2VuZXJhdGVk
IGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBEZWZpbmUgaWYgYnVp
bGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisvKiAjdW5kZWYgQUNf
QVBQTEVfVU5JVkVSU0FMX0JVSUxEICovCisKKy8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcn
LCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKKyAgIHN5c3RlbXMu
IFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGBhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9z
ZSBzeXN0ZW1zLgorICAgKi8KKy8qICN1bmRlZiBDUkFZX1NUQUNLU0VHX0VORCAqLworCisvKiBE
ZWZpbmUgdG8gMSBpZiB1c2luZyBgYWxsb2NhLmMnLiAqLworLyogI3VuZGVmIENfQUxMT0NBICov
CisKKy8qIERlZmluZSB0byB0aGUgZmxhZ3MgbmVlZGVkIGZvciB0aGUgLnNlY3Rpb24gLmVoX2Zy
YW1lIGRpcmVjdGl2ZS4gKi8KKyNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgImEiCisKKy8qIERlZmlu
ZSB0aGlzIGlmIHlvdSB3YW50IGV4dHJhIGRlYnVnZ2luZy4gKi8KKy8qICN1bmRlZiBGRklfREVC
VUcgKi8KKworLyogQ2Fubm90IHVzZSBQUk9UX0VYRUMgb24gdGhpcyB0YXJnZXQsIHNvLCB3ZSBy
ZXZlcnQgdG8gYWx0ZXJuYXRpdmUgbWVhbnMgKi8KKy8qICN1bmRlZiBGRklfRVhFQ19UUkFNUE9M
SU5FX1RBQkxFICovCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBwYXgg
ZW11bGF0ZWQgdHJhbXBvbGluZXMgKi8KKy8qICN1bmRlZiBGRklfTU1BUF9FWEVDX0VNVVRSQU1Q
X1BBWCAqLworCisvKiBDYW5ub3QgdXNlIG1hbGxvYyBvbiB0aGlzIHRhcmdldCwgc28sIHdlIHJl
dmVydCB0byBhbHRlcm5hdGl2ZSBtZWFucyAqLworLyogI3VuZGVmIEZGSV9NTUFQX0VYRUNfV1JJ
VCAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhl
IHJhdyBBUEkuICovCisvKiAjdW5kZWYgRkZJX05PX1JBV19BUEkgKi8KKworLyogRGVmaW5lIHRo
aXMgaWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIGFnZ3JlZ2F0ZSB0eXBlcy4gKi8KKy8q
ICN1bmRlZiBGRklfTk9fU1RSVUNUUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBg
YWxsb2NhJywgYXMgYSBmdW5jdGlvbiBvciBtYWNyby4gKi8KKyNkZWZpbmUgSEFWRV9BTExPQ0Eg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8YWxsb2NhLmg+IGFuZCBpdCBzaG91bGQg
YmUgdXNlZCAobm90IG9uIFVsdHJpeCkuCisgICAqLworI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEK
KworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5jZmlfKiBkaXJlY3RpdmVz
LiAqLworI2RlZmluZSBIQVZFX0FTX0NGSV9QU0VVRE9fT1AgMQorCisvKiBEZWZpbmUgaWYgeW91
ciBhc3NlbWJsZXIgc3VwcG9ydHMgLnJlZ2lzdGVyLiAqLworLyogI3VuZGVmIEhBVkVfQVNfUkVH
SVNURVJfUFNFVURPX09QICovCisKKy8qIERlZmluZSBpZiB0aGUgY29tcGlsZXIgdXNlcyB6YXJj
aCBmZWF0dXJlcy4gKi8KKy8qICN1bmRlZiBIQVZFX0FTX1MzOTBfWkFSQ0ggKi8KKworLyogRGVm
aW5lIGlmIHlvdXIgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgUEMgcmVs
YXRpdmUgcmVsb2NzLgorICAgKi8KKy8qICN1bmRlZiBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMICov
CisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0
eXBlLiAqLworI2RlZmluZSBIQVZFX0FTX1g4Nl82NF9VTldJTkRfU0VDVElPTl9UWVBFIDEKKwor
LyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFBDIHJlbGF0aXZlIHJlbG9jcy4g
Ki8KKyNkZWZpbmUgSEFWRV9BU19YODZfUENSRUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0RMRkNOX0gg
MQorCisvKiBEZWZpbmUgaWYgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKSBp
cyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRF
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIg
ZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBo
YXZlIHRoZSBsb25nIGRvdWJsZSB0eXBlIGFuZCBpdCBpcyBiaWdnZXIgdGhhbiBhIGRvdWJsZSAq
LworI2RlZmluZSBIQVZFX0xPTkdfRE9VQkxFIDEKKworLyogRGVmaW5lIGlmIHlvdSBzdXBwb3J0
IG1vcmUgdGhhbiBvbmUgc2l6ZSBvZiB0aGUgbG9uZyBkb3VibGUgdHlwZSAqLworLyogI3VuZGVm
IEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYG1lbWNweScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTUVNQ1BZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YG1rb3N0ZW1wJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS09TVEVNUCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfTU1BUCAxCisKKy8qIERlZmluZSBpZiBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtz
LiAqLworI2RlZmluZSBIQVZFX01NQVBfQU5PTiAxCisKKy8qIERlZmluZSBpZiBtbWFwIG9mIC9k
ZXYvemVybyB3b3Jrcy4gKi8KKyNkZWZpbmUgSEFWRV9NTUFQX0RFVl9aRVJPIDEKKworLyogRGVm
aW5lIGlmIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3Jrcy4gKi8KKyNkZWZpbmUg
SEFWRV9NTUFQX0ZJTEUgMQorCisvKiBEZWZpbmUgaWYgLmVoX2ZyYW1lIHNlY3Rpb25zIHNob3Vs
ZCBiZSByZWFkLW9ubHkuICovCisjZGVmaW5lIEhBVkVfUk9fRUhfRlJBTUUgMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Rk
bGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2Rl
ZmluZSBIQVZFX1NUUklOR1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW1hbi5oPiBoZWFkZXIgZmlsZS4gKi8K
KyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVy
IGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9V
TklTVERfSCAxCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0
b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI2RlZmluZSBMVF9PQkpE
SVIgIi5saWJzLyIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3Qg
YWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci4gKi8KKy8qICN1bmRlZiBOT19NSU5VU19DX01JTlVT
X08gKi8KKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjZGVmaW5lIFBBQ0tBR0UgImxpYmZmaSIK
KworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBh
Y2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJodHRw
Oi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXMiCisKKy8qIERlZmluZSB0byB0aGUg
ZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJsaWJm
ZmkiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFj
a2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgImxpYmZmaSAzLjk5OTk5IgorCisvKiBE
ZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisj
ZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibGliZmZpIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUg
cGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1VSTCAiIgorCisvKiBE
ZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdF
X1ZFUlNJT04gIjMuOTk5OTkiCisKKy8qIFRoZSBzaXplIG9mIGBkb3VibGUnLCBhcyBjb21wdXRl
ZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9ET1VCTEUgOAorCisvKiBUaGUgc2l6ZSBv
ZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVP
Rl9MT05HX0RPVUJMRSAxNgorCisvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQg
Ynkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0laRV9UIDgKKworLyogSWYgdXNpbmcgdGhl
IEMgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhLCBkZWZpbmUgaWYgeW91IGtub3cgdGhlCisgICBk
aXJlY3Rpb24gb2Ygc3RhY2sgZ3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdp
bGwgYmUKKyAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW50aW1lLgorCVNUQUNLX0RJUkVD
VElPTiA+IDAgPT4gZ3Jvd3MgdG93YXJkIGhpZ2hlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJ
T04gPCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04g
PSAwID0+IGRpcmVjdGlvbiBvZiBncm93dGggdW5rbm93biAqLworLyogI3VuZGVmIFNUQUNLX0RJ
UkVDVElPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRl
ciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIHRoaXMgaWYg
eW91IGFyZSB1c2luZyBQdXJpZnkgYW5kIHdhbnQgdG8gc3VwcHJlc3Mgc3B1cmlvdXMgbWVzc2Fn
ZXMuCisgICAqLworLyogI3VuZGVmIFVTSU5HX1BVUklGWSAqLworCisvKiBWZXJzaW9uIG51bWJl
ciBvZiBwYWNrYWdlICovCisjZGVmaW5lIFZFUlNJT04gIjMuOTk5OTkiCisKKy8qIERlZmluZSBX
T1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0
aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BB
UkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJ
TEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElB
TiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisvKiAjICB1bmRl
ZiBXT1JEU19CSUdFTkRJQU4gKi8KKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX0hJ
RERFTl9WSVNJQklMSVRZX0FUVFJJQlVURQorI2lmZGVmIExJQkZGSV9BU00KKyNkZWZpbmUgRkZJ
X0hJRERFTihuYW1lKSAuaGlkZGVuIG5hbWUKKyNlbHNlCisjZGVmaW5lIEZGSV9ISURERU4gX19h
dHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCisjZW5kaWYKKyNlbHNlCisjaWZk
ZWYgTElCRkZJX0FTTQorI2RlZmluZSBGRklfSElEREVOKG5hbWUpCisjZWxzZQorI2RlZmluZSBG
RklfSElEREVOCisjZW5kaWYKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJmZmkvaW5jbHVkZS9m
ZmkuaCBiL2xpYmZmaS9pbmNsdWRlL2ZmaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmRlNzcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJmZmkvaW5jbHVkZS9mZmkuaApA
QCAtMCwwICsxLDUwOSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLUMtKi0KKyAgIGxpYmZmaSAzLjk5OTk5IC0g
Q29weXJpZ2h0IChjKSAyMDExLCAyMDE0IEFudGhvbnkgR3JlZW4KKyAgICAgICAgICAgICAgICAg
ICAgLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMywgMjAwNywgMjAwOCBSZWQgSGF0LCBJbmMuCisK
KyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg
cGVyc29uCisgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0
ZWQgZG9jdW1lbnRhdGlvbgorICAgZmlsZXMgKHRoZSBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGlu
IHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg
bGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwKKyAgIG1vZGlmeSwgbWVyZ2UsIHB1
Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworICAgb2Yg
dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg
aXMKKyAgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np
b24gbm90aWNlIHNoYWxsIGJlCisgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50
aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1Mg
T1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP
RgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
TkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9S
IENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP
UiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg
VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNU
SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElO
IFRIRSBTT0ZUV0FSRS4KKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgVGhlIGJhc2ljIEFQSSBpcyBkZXNjcmliZWQgaW4gdGhlIFJFQURNRSBmaWxlLgorCisgICBU
aGUgcmF3IEFQSSBpcyBkZXNpZ25lZCB0byBieXBhc3Mgc29tZSBvZiB0aGUgYXJndW1lbnQgcGFj
a2luZworICAgYW5kIHVucGFja2luZyBvbiBhcmNoaXRlY3R1cmVzIGZvciB3aGljaCBpdCBjYW4g
YmUgYXZvaWRlZC4KKworICAgVGhlIGNsb3N1cmUgQVBJIGFsbG93cyBpbnRlcnByZXRlZCBmdW5j
dGlvbnMgdG8gYmUgcGFja2FnZWQgdXAKKyAgIGluc2lkZSBhIEMgZnVuY3Rpb24gcG9pbnRlciwg
c28gdGhhdCB0aGV5IGNhbiBiZSBjYWxsZWQgYXMgQyBmdW5jdGlvbnMsCisgICB3aXRoIG5vIHVu
ZGVyc3RhbmRpbmcgb24gdGhlIGNsaWVudCBzaWRlIHRoYXQgdGhleSBhcmUgaW50ZXJwcmV0ZWQu
CisgICBJdCBjYW4gYWxzbyBiZSB1c2VkIGluIG90aGVyIGNhc2VzIGluIHdoaWNoIGl0IGlzIG5l
Y2Vzc2FyeSB0byBwYWNrYWdlCisgICB1cCBhIHVzZXIgc3BlY2lmaWVkIHBhcmFtZXRlciBhbmQg
YSBmdW5jdGlvbiBwb2ludGVyIGFzIGEgc2luZ2xlCisgICBmdW5jdGlvbiBwb2ludGVyLgorCisg
ICBUaGUgY2xvc3VyZSBBUEkgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBvcmRlciB0byBnZXQgaXRz
IGZ1bmN0aW9uYWxpdHksCisgICBlLmcuIGZvciB1c2UgYnkgZ2lqLiAgUm91dGluZXMgYXJlIHBy
b3ZpZGVkIHRvIGVtdWxhdGUgdGhlIHJhdyBBUEkKKyAgIGlmIHRoZSB1bmRlcmx5aW5nIHBsYXRm
b3JtIGRvZXNuJ3QgYWxsb3cgZmFzdGVyIGltcGxlbWVudGF0aW9uLgorCisgICBNb3JlIGRldGFp
bHMgb24gdGhlIHJhdyBhbmQgY2xvdXJlIEFQSSBjYW4gYmUgZm91bmQgaW46CisKKyAgIGh0dHA6
Ly9nY2MuZ251Lm9yZy9tbC9qYXZhLzE5OTktcTMvbXNnMDAxMzguaHRtbAorCisgICBhbmQKKwor
ICAgaHR0cDovL2djYy5nbnUub3JnL21sL2phdmEvMTk5OS1xMy9tc2cwMDE3NC5odG1sCisgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJQkZGSV9ICisjZGVmaW5lIExJQkZGSV9ICisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogU3BlY2lmeSB3aGlj
aCBhcmNoaXRlY3R1cmUgbGliZmZpIGlzIGNvbmZpZ3VyZWQgZm9yLiAqLworI2lmbmRlZiBYODZf
NjQKKyNkZWZpbmUgWDg2XzY0CisjZW5kaWYKKworLyogLS0tLSBTeXN0ZW0gY29uZmlndXJhdGlv
biBpbmZvcm1hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lu
Y2x1ZGUgPGZmaXRhcmdldC5oPgorCisjaWZuZGVmIExJQkZGSV9BU00KKworI2lmIGRlZmluZWQo
X01TQ19WRVIpICYmICFkZWZpbmVkKF9fY2xhbmdfXykKKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyhY
KQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwor
LyogTE9OR19MT05HX01BWCBpcyBub3QgYWx3YXlzIGRlZmluZWQgKG5vdCBpZiBTVFJJQ1RfQU5T
SSwgZm9yIGV4YW1wbGUpLgorICAgQnV0IHdlIGNhbiBmaW5kIGl0IGVpdGhlciB1bmRlciB0aGUg
Y29ycmVjdCBBTlNJIG5hbWUsIG9yIHVuZGVyIEdOVQorICAgQydzIGludGVybmFsIG5hbWUuICAq
LworCisjZGVmaW5lIEZGSV82NF9CSVRfTUFYIDkyMjMzNzIwMzY4NTQ3NzU4MDcKKworI2lmZGVm
IExPTkdfTE9OR19NQVgKKyMgZGVmaW5lIEZGSV9MT05HX0xPTkdfTUFYIExPTkdfTE9OR19NQVgK
KyNlbHNlCisjIGlmZGVmIExMT05HX01BWAorIyAgZGVmaW5lIEZGSV9MT05HX0xPTkdfTUFYIExM
T05HX01BWAorIyAgaWZkZWYgX0FJWDUyIC8qIG9yIG5ld2VyIGhhcyBDOTkgTExPTkdfTUFYICov
CisjICAgdW5kZWYgRkZJXzY0X0JJVF9NQVgKKyMgICBkZWZpbmUgRkZJXzY0X0JJVF9NQVggOTIy
MzM3MjAzNjg1NDc3NTgwN0xMCisjICBlbmRpZiAvKiBfQUlYNTIgb3IgbmV3ZXIgKi8KKyMgZWxz
ZQorIyAgaWZkZWYgX19HTlVDX18KKyMgICBkZWZpbmUgRkZJX0xPTkdfTE9OR19NQVggX19MT05H
X0xPTkdfTUFYX18KKyMgIGVuZGlmCisjICBpZmRlZiBfQUlYIC8qIEFJWCA1LjEgYW5kIGVhcmxp
ZXIgaGF2ZSBMT05HTE9OR19NQVggKi8KKyMgICBpZm5kZWYgX19QUEM2NF9fCisjICAgIGlmIGRl
ZmluZWQgKF9fSUJNQ19fKSB8fCBkZWZpbmVkIChfX0lCTUNQUF9fKQorIyAgICAgZGVmaW5lIEZG
SV9MT05HX0xPTkdfTUFYIExPTkdMT05HX01BWAorIyAgICBlbmRpZgorIyAgIGVuZGlmIC8qIF9f
UFBDNjRfXyAqLworIyAgIHVuZGVmICBGRklfNjRfQklUX01BWAorIyAgIGRlZmluZSBGRklfNjRf
QklUX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYK
KworLyogVGhlIGNsb3N1cmUgY29kZSBhc3N1bWVzIHRoYXQgdGhpcyB3b3JrcyBvbiBwb2ludGVy
cywgaS5lLiBhIHNpemVfdAkqLworLyogY2FuIGhvbGQgYSBwb2ludGVyLgkJCQkJCQkqLworCit0
eXBlZGVmIHN0cnVjdCBfZmZpX3R5cGUKK3sKKyAgc2l6ZV90IHNpemU7CisgIHVuc2lnbmVkIHNo
b3J0IGFsaWdubWVudDsKKyAgdW5zaWduZWQgc2hvcnQgdHlwZTsKKyAgc3RydWN0IF9mZmlfdHlw
ZSAqKmVsZW1lbnRzOworfSBmZmlfdHlwZTsKKworI2lmbmRlZiBMSUJGRklfSElERV9CQVNJQ19U
WVBFUworI2lmIFNDSEFSX01BWCA9PSAxMjcKKyMgZGVmaW5lIGZmaV90eXBlX3VjaGFyICAgICAg
ICAgICAgICAgIGZmaV90eXBlX3VpbnQ4CisjIGRlZmluZSBmZmlfdHlwZV9zY2hhciAgICAgICAg
ICAgICAgICBmZmlfdHlwZV9zaW50OAorI2Vsc2UKKyAvLyNlcnJvciAiY2hhciBzaXplIG5vdCBz
dXBwb3J0ZWQiCisjZW5kaWYKKworI2lmIFNIUlRfTUFYID09IDMyNzY3CisjIGRlZmluZSBmZmlf
dHlwZV91c2hvcnQgICAgICAgZmZpX3R5cGVfdWludDE2CisjIGRlZmluZSBmZmlfdHlwZV9zc2hv
cnQgICAgICAgZmZpX3R5cGVfc2ludDE2CisjZWxpZiBTSFJUX01BWCA9PSAyMTQ3NDgzNjQ3Cisj
IGRlZmluZSBmZmlfdHlwZV91c2hvcnQgICAgICAgZmZpX3R5cGVfdWludDMyCisjIGRlZmluZSBm
ZmlfdHlwZV9zc2hvcnQgICAgICAgZmZpX3R5cGVfc2ludDMyCisjZWxzZQorICNlcnJvciAic2hv
cnQgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKyNpZiBJTlRfTUFYID09IDMyNzY3Cisj
IGRlZmluZSBmZmlfdHlwZV91aW50ICAgICAgICAgZmZpX3R5cGVfdWludDE2CisjIGRlZmluZSBm
ZmlfdHlwZV9zaW50ICAgICAgICAgZmZpX3R5cGVfc2ludDE2CisjZWxpZiBJTlRfTUFYID09IDIx
NDc0ODM2NDcKKyMgZGVmaW5lIGZmaV90eXBlX3VpbnQgICAgICAgICBmZmlfdHlwZV91aW50MzIK
KyMgZGVmaW5lIGZmaV90eXBlX3NpbnQgICAgICAgICBmZmlfdHlwZV9zaW50MzIKKyNlbGlmIElO
VF9NQVggPT0gOTIyMzM3MjAzNjg1NDc3NTgwNworIyBkZWZpbmUgZmZpX3R5cGVfdWludCAgICAg
ICAgIGZmaV90eXBlX3VpbnQ2NAorIyBkZWZpbmUgZmZpX3R5cGVfc2ludCAgICAgICAgIGZmaV90
eXBlX3NpbnQ2NAorI2Vsc2UKKyAjZXJyb3IgImludCBzaXplIG5vdCBzdXBwb3J0ZWQiCisjZW5k
aWYKKworI2lmIExPTkdfTUFYID09IDIxNDc0ODM2NDcKKyMgaWYgRkZJX0xPTkdfTE9OR19NQVgg
IT0gRkZJXzY0X0JJVF9NQVgKKyAjZXJyb3IgIm5vIDY0LWJpdCBkYXRhIHR5cGUgc3VwcG9ydGVk
IgorIyBlbmRpZgorI2VsaWYgTE9OR19NQVggIT0gRkZJXzY0X0JJVF9NQVgKKyAjZXJyb3IgImxv
bmcgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKyNpZiBMT05HX01BWCA9PSAyMTQ3NDgz
NjQ3CisjIGRlZmluZSBmZmlfdHlwZV91bG9uZyAgICAgICAgZmZpX3R5cGVfdWludDMyCisjIGRl
ZmluZSBmZmlfdHlwZV9zbG9uZyAgICAgICAgZmZpX3R5cGVfc2ludDMyCisjZWxpZiBMT05HX01B
WCA9PSBGRklfNjRfQklUX01BWAorIyBkZWZpbmUgZmZpX3R5cGVfdWxvbmcgICAgICAgIGZmaV90
eXBlX3VpbnQ2NAorIyBkZWZpbmUgZmZpX3R5cGVfc2xvbmcgICAgICAgIGZmaV90eXBlX3NpbnQ2
NAorI2Vsc2UKKyAjZXJyb3IgImxvbmcgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKy8q
IE5lZWQgbWluaW1hbCBkZWNvcmF0aW9ucyBmb3IgRExMcyB0byB3b3JrcyBvbiBXaW5kb3dzLiAq
LworLyogR0NDIGhhcyBhdXRvaW1wb3J0IGFuZCBhdXRvZXhwb3J0LiAgUmVseSBvbiBMaWJ0b29s
IHRvICovCisvKiBoZWxwIE1TVkMgZXhwb3J0IGZyb20gYSBETEwsIGJ1dCBhbHdheXMgZGVjbGFy
ZSBkYXRhICAgKi8KKy8qIHRvIGJlIGltcG9ydGVkIGZvciBNU1ZDIGNsaWVudHMuICBUaGlzIGNv
c3RzIGFuIGV4dHJhICAqLworLyogaW5kaXJlY3Rpb24gZm9yIE1TVkMgY2xpZW50cyB1c2luZyB0
aGUgc3RhdGljIHZlcnNpb24gICovCisvKiBvZiB0aGUgbGlicmFyeSwgYnV0IGRvbid0IHdvcnJ5
IGFib3V0IHRoYXQuICBCZXNpZGVzLCAgKi8KKy8qIGFzIGEgd29ya2Fyb3VuZCwgdGhleSBjYW4g
ZGVmaW5lIEZGSV9CVUlMRElORyBpZiB0aGV5ICAqLworLyogKmtub3cqIHRoZXkgYXJlIGdvaW5n
IHRvIGxpbmsgd2l0aCB0aGUgc3RhdGljIGxpYnJhcnkuICovCisjaWYgZGVmaW5lZCBfTVNDX1ZF
UiAmJiAhZGVmaW5lZCBGRklfQlVJTERJTkcKKyNkZWZpbmUgRkZJX0VYVEVSTiBleHRlcm4gX19k
ZWNsc3BlYyhkbGxpbXBvcnQpCisjZWxzZQorI2RlZmluZSBGRklfRVhURVJOIGV4dGVybgorI2Vu
ZGlmCisKKy8qIFRoZXNlIGFyZSBkZWZpbmVkIGluIHR5cGVzLmMgKi8KK0ZGSV9FWFRFUk4gZmZp
X3R5cGUgZmZpX3R5cGVfdm9pZDsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfdWludDg7
CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3NpbnQ4OworRkZJX0VYVEVSTiBmZmlfdHlw
ZSBmZmlfdHlwZV91aW50MTY7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3NpbnQxNjsK
K0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfdWludDMyOworRkZJX0VYVEVSTiBmZmlfdHlw
ZSBmZmlfdHlwZV9zaW50MzI7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3VpbnQ2NDsK
K0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfc2ludDY0OworRkZJX0VYVEVSTiBmZmlfdHlw
ZSBmZmlfdHlwZV9mbG9hdDsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfZG91YmxlOwor
RkZJX0VYVEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9wb2ludGVyOworCisjaWYgMQorRkZJX0VYVEVS
TiBmZmlfdHlwZSBmZmlfdHlwZV9sb25nZG91YmxlOworI2Vsc2UKKyNkZWZpbmUgZmZpX3R5cGVf
bG9uZ2RvdWJsZSBmZmlfdHlwZV9kb3VibGUKKyNlbmRpZgorCisjaWZkZWYgRkZJX1RBUkdFVF9I
QVNfQ09NUExFWF9UWVBFCitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX2NvbXBsZXhfZmxv
YXQ7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX2NvbXBsZXhfZG91YmxlOworI2lmIDEK
K0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlOworI2Vsc2UK
KyNkZWZpbmUgZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlIGZmaV90eXBlX2NvbXBsZXhfZG91
YmxlCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8qIExJQkZGSV9ISURFX0JBU0lDX1RZUEVTICov
CisKK3R5cGVkZWYgZW51bSB7CisgIEZGSV9PSyA9IDAsCisgIEZGSV9CQURfVFlQRURFRiwKKyAg
RkZJX0JBRF9BQkkKK30gZmZpX3N0YXR1czsKKwordHlwZWRlZiB1bnNpZ25lZCBGRklfVFlQRTsK
KwordHlwZWRlZiBzdHJ1Y3QgeworICBmZmlfYWJpIGFiaTsKKyAgdW5zaWduZWQgbmFyZ3M7Cisg
IGZmaV90eXBlICoqYXJnX3R5cGVzOworICBmZmlfdHlwZSAqcnR5cGU7CisgIHVuc2lnbmVkIGJ5
dGVzOworICB1bnNpZ25lZCBmbGFnczsKKyNpZmRlZiBGRklfRVhUUkFfQ0lGX0ZJRUxEUworICBG
RklfRVhUUkFfQ0lGX0ZJRUxEUzsKKyNlbmRpZgorfSBmZmlfY2lmOworCisjaWYgMAorLyogVXNl
ZCB0byBhZGp1c3Qgc2l6ZS9hbGlnbm1lbnQgb2YgZmZpIHR5cGVzLiAgKi8KK3ZvaWQgZmZpX3By
ZXBfdHlwZXMgKGZmaV9hYmkgYWJpKTsKKyNlbmRpZgorCisvKiBVc2VkIGludGVybmFsbHksIGJ1
dCBvdmVycmlkZGVuIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyAqLworZmZpX3N0YXR1cyBmZmlfcHJl
cF9jaWZfY29yZShmZmlfY2lmICpjaWYsCisJCQkgICAgIGZmaV9hYmkgYWJpLAorCQkJICAgICB1
bnNpZ25lZCBpbnQgaXN2YXJpYWRpYywKKwkJCSAgICAgdW5zaWduZWQgaW50IG5maXhlZGFyZ3Ms
CisJCQkgICAgIHVuc2lnbmVkIGludCBudG90YWxhcmdzLAorCQkJICAgICBmZmlfdHlwZSAqcnR5
cGUsCisJCQkgICAgIGZmaV90eXBlICoqYXR5cGVzKTsKKworLyogLS0tLSBEZWZpbml0aW9ucyBm
b3IgdGhlIHJhdyBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
KworI2lmbmRlZiBGRklfU0laRU9GX0FSRworIyBpZiBMT05HX01BWCA9PSAyMTQ3NDgzNjQ3Cisj
ICBkZWZpbmUgRkZJX1NJWkVPRl9BUkcgICAgICAgIDQKKyMgZWxpZiBMT05HX01BWCA9PSBGRklf
NjRfQklUX01BWAorIyAgZGVmaW5lIEZGSV9TSVpFT0ZfQVJHICAgICAgICA4CisjIGVuZGlmCisj
ZW5kaWYKKworI2lmbmRlZiBGRklfU0laRU9GX0pBVkFfUkFXCisjICBkZWZpbmUgRkZJX1NJWkVP
Rl9KQVZBX1JBVyBGRklfU0laRU9GX0FSRworI2VuZGlmCisKK3R5cGVkZWYgdW5pb24geworICBm
Zmlfc2FyZyAgc2ludDsKKyAgZmZpX2FyZyAgIHVpbnQ7CisgIGZsb2F0CSAgICBmbHQ7CisgIGNo
YXIgICAgICBkYXRhW0ZGSV9TSVpFT0ZfQVJHXTsKKyAgdm9pZCogICAgIHB0cjsKK30gZmZpX3Jh
dzsKKworI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNCAmJiBGRklfU0laRU9GX0FSRyA9PSA4
CisvKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBtaXBzNjQvbjMyIEFCSSAoYW5kIHBlcmhh
cHMgb3RoZXJzKSB3aGVyZQorICAgc2l6ZW9mKHZvaWQgKikgaXMgNCBhbmQgRkZJX1NJWkVPRl9B
UkcgaXMgOC4gICovCit0eXBlZGVmIHVuaW9uIHsKKyAgc2lnbmVkIGludAlzaW50OworICB1bnNp
Z25lZCBpbnQJdWludDsKKyAgZmxvYXQJCWZsdDsKKyAgY2hhcgkJZGF0YVtGRklfU0laRU9GX0pB
VkFfUkFXXTsKKyAgdm9pZCoJCXB0cjsKK30gZmZpX2phdmFfcmF3OworI2Vsc2UKK3R5cGVkZWYg
ZmZpX3JhdyBmZmlfamF2YV9yYXc7CisjZW5kaWYKKworCit2b2lkIGZmaV9yYXdfY2FsbCAoZmZp
X2NpZiAqY2lmLAorCQkgICB2b2lkICgqZm4pKHZvaWQpLAorCQkgICB2b2lkICpydmFsdWUsCisJ
CSAgIGZmaV9yYXcgKmF2YWx1ZSk7CisKK3ZvaWQgZmZpX3B0cmFycmF5X3RvX3JhdyAoZmZpX2Np
ZiAqY2lmLCB2b2lkICoqYXJncywgZmZpX3JhdyAqcmF3KTsKK3ZvaWQgZmZpX3Jhd190b19wdHJh
cnJheSAoZmZpX2NpZiAqY2lmLCBmZmlfcmF3ICpyYXcsIHZvaWQgKiphcmdzKTsKK3NpemVfdCBm
ZmlfcmF3X3NpemUgKGZmaV9jaWYgKmNpZik7CisKKy8qIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRo
ZSByYXcgQVBJLCBleGNlcHQgaXQgdXNlcyBKYXZhIHBhcmFtZXRlcgkqLworLyogcGFja2luZywg
ZXZlbiBvbiA2NC1iaXQgbWFjaGluZXMuICBJLmUuIG9uIDY0LWJpdCBtYWNoaW5lcwkJKi8KKy8q
IGxvbmdzIGFuZCBkb3VibGVzIGFyZSBmb2xsb3dlZCBieSBhbiBlbXB0eSA2NC1iaXQgd29yZC4J
CSovCisKK3ZvaWQgZmZpX2phdmFfcmF3X2NhbGwgKGZmaV9jaWYgKmNpZiwKKwkJCXZvaWQgKCpm
bikodm9pZCksCisJCQl2b2lkICpydmFsdWUsCisJCQlmZmlfamF2YV9yYXcgKmF2YWx1ZSk7CisK
K3ZvaWQgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3IChmZmlfY2lmICpjaWYsIHZvaWQgKiphcmdz
LCBmZmlfamF2YV9yYXcgKnJhdyk7Cit2b2lkIGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSAoZmZp
X2NpZiAqY2lmLCBmZmlfamF2YV9yYXcgKnJhdywgdm9pZCAqKmFyZ3MpOworc2l6ZV90IGZmaV9q
YXZhX3Jhd19zaXplIChmZmlfY2lmICpjaWYpOworCisvKiAtLS0tIERlZmluaXRpb25zIGZvciBj
bG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisj
aWYgRkZJX0NMT1NVUkVTCisKKyNpZmRlZiBfTVNDX1ZFUgorX19kZWNsc3BlYyhhbGlnbig4KSkK
KyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworI2lmIDAKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJs
ZTsKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJsZV9lbnRyeTsKKyNlbHNlCisgIGNoYXIgdHJhbXBb
RkZJX1RSQU1QT0xJTkVfU0laRV07CisjZW5kaWYKKyAgZmZpX2NpZiAgICpjaWY7CisgIHZvaWQg
ICAgICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopOworICB2b2lkICAgICAgKnVz
ZXJfZGF0YTsKKyNpZmRlZiBfX0dOVUNfXworfSBmZmlfY2xvc3VyZSBfX2F0dHJpYnV0ZV9fKChh
bGlnbmVkICg4KSkpOworI2Vsc2UKK30gZmZpX2Nsb3N1cmU7CisjIGlmZGVmIF9fc2dpCisjICBw
cmFnbWEgcGFjayAwCisjIGVuZGlmCisjZW5kaWYKKwordm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2Mg
KHNpemVfdCBzaXplLCB2b2lkICoqY29kZSk7Cit2b2lkIGZmaV9jbG9zdXJlX2ZyZWUgKHZvaWQg
Kik7CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmUgKGZmaV9jbG9zdXJlKiwKKwkJICBm
ZmlfY2lmICosCisJCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwK
KwkJICB2b2lkICp1c2VyX2RhdGEpOworCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xv
YyAoZmZpX2Nsb3N1cmUqLAorCQkgICAgICBmZmlfY2lmICosCisJCSAgICAgIHZvaWQgKCpmdW4p
KGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwK
KwkJICAgICAgdm9pZCpjb2RlbG9jKTsKKworI2lmZGVmIF9fc2dpCisjIHByYWdtYSBwYWNrIDgK
KyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworI2lmIDAKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJs
ZTsKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJsZV9lbnRyeTsKKyNlbHNlCisgIGNoYXIgdHJhbXBb
RkZJX1RSQU1QT0xJTkVfU0laRV07CisjZW5kaWYKKyAgZmZpX2NpZiAgICpjaWY7CisKKyNpZiAh
RkZJX05BVElWRV9SQVdfQVBJCisKKyAgLyogaWYgdGhpcyBpcyBlbmFibGVkLCB0aGVuIGEgcmF3
IGNsb3N1cmUgaGFzIHRoZSBzYW1lIGxheW91dCAKKyAgICAgYXMgYSByZWd1bGFyIGNsb3N1cmUu
ICBXZSB1c2UgdGhpcyB0byBpbnN0YWxsIGFuIGludGVybWVkaWF0ZSAKKyAgICAgaGFuZGxlciB0
byBkbyB0aGUgdHJhbnNhbHRpb24sIHZvaWQqKiAtPiBmZmlfcmF3Ki4gKi8KKworICB2b2lkICAg
ICAoKnRyYW5zbGF0ZV9hcmdzKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopOworICB2b2lk
ICAgICAgKnRoaXNfY2xvc3VyZTsKKworI2VuZGlmCisKKyAgdm9pZCAgICAgKCpmdW4pKGZmaV9j
aWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKTsKKyAgdm9pZCAgICAgICp1c2VyX2RhdGE7CisKK30g
ZmZpX3Jhd19jbG9zdXJlOworCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgMAorICB2b2lkICp0cmFt
cG9saW5lX3RhYmxlOworICB2b2lkICp0cmFtcG9saW5lX3RhYmxlX2VudHJ5OworI2Vsc2UKKyAg
Y2hhciB0cmFtcFtGRklfVFJBTVBPTElORV9TSVpFXTsKKyNlbmRpZgorCisgIGZmaV9jaWYgICAq
Y2lmOworCisjaWYgIUZGSV9OQVRJVkVfUkFXX0FQSQorCisgIC8qIGlmIHRoaXMgaXMgZW5hYmxl
ZCwgdGhlbiBhIHJhdyBjbG9zdXJlIGhhcyB0aGUgc2FtZSBsYXlvdXQgCisgICAgIGFzIGEgcmVn
dWxhciBjbG9zdXJlLiAgV2UgdXNlIHRoaXMgdG8gaW5zdGFsbCBhbiBpbnRlcm1lZGlhdGUgCisg
ICAgIGhhbmRsZXIgdG8gZG8gdGhlIHRyYW5zYWx0aW9uLCB2b2lkKiogLT4gZmZpX3JhdyouICov
CisKKyAgdm9pZCAgICAgKCp0cmFuc2xhdGVfYXJncykoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZv
aWQqKTsKKyAgdm9pZCAgICAgICp0aGlzX2Nsb3N1cmU7CisKKyNlbmRpZgorCisgIHZvaWQgICAg
ICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKTsKKyAgdm9pZCAgICAg
ICp1c2VyX2RhdGE7CisKK30gZmZpX2phdmFfcmF3X2Nsb3N1cmU7CisKK2ZmaV9zdGF0dXMKK2Zm
aV9wcmVwX3Jhd19jbG9zdXJlIChmZmlfcmF3X2Nsb3N1cmUqLAorCQkgICAgICBmZmlfY2lmICpj
aWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwK
KwkJICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworZmZpX3N0YXR1cworZmZpX3ByZXBfcmF3X2Ns
b3N1cmVfbG9jIChmZmlfcmF3X2Nsb3N1cmUqLAorCQkJICBmZmlfY2lmICpjaWYsCisJCQkgIHZv
aWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwKKwkJCSAgdm9pZCAqdXNl
cl9kYXRhLAorCQkJICB2b2lkICpjb2RlbG9jKTsKKworZmZpX3N0YXR1cworZmZpX3ByZXBfamF2
YV9yYXdfY2xvc3VyZSAoZmZpX2phdmFfcmF3X2Nsb3N1cmUqLAorCQkgICAgICAgICAgIGZmaV9j
aWYgKmNpZiwKKwkJICAgICAgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2
YV9yYXcqLHZvaWQqKSwKKwkJICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCitmZmlfc3Rh
dHVzCitmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyAoZmZpX2phdmFfcmF3X2Nsb3N1cmUq
LAorCQkJICAgICAgIGZmaV9jaWYgKmNpZiwKKwkJCSAgICAgICB2b2lkICgqZnVuKShmZmlfY2lm
Kix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwKKwkJCSAgICAgICB2b2lkICp1c2VyX2RhdGEs
CisJCQkgICAgICAgdm9pZCAqY29kZWxvYyk7CisKKyNlbmRpZiAvKiBGRklfQ0xPU1VSRVMgKi8K
KworI2lmIEZGSV9HT19DTE9TVVJFUworCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgICAgICAq
dHJhbXA7CisgIGZmaV9jaWYgICAqY2lmOworICB2b2lkICAgICAoKmZ1bikoZmZpX2NpZiosdm9p
ZCosdm9pZCoqLHZvaWQqKTsKK30gZmZpX2dvX2Nsb3N1cmU7CisKK2ZmaV9zdGF0dXMgZmZpX3By
ZXBfZ29fY2xvc3VyZSAoZmZpX2dvX2Nsb3N1cmUqLCBmZmlfY2lmICosCisJCQkJdm9pZCAoKmZ1
bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSk7CisKK3ZvaWQgZmZpX2NhbGxfZ28gKGZm
aV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLAorCQkgIHZvaWQgKiph
dmFsdWUsIHZvaWQgKmNsb3N1cmUpOworCisjZW5kaWYgLyogRkZJX0dPX0NMT1NVUkVTICovCisK
Ky8qIC0tLS0gUHVibGljIGludGVyZmFjZSBkZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2ZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmKGZmaV9jaWYg
KmNpZiwKKwkJCWZmaV9hYmkgYWJpLAorCQkJdW5zaWduZWQgaW50IG5hcmdzLAorCQkJZmZpX3R5
cGUgKnJ0eXBlLAorCQkJZmZpX3R5cGUgKiphdHlwZXMpOworCitmZmlfc3RhdHVzIGZmaV9wcmVw
X2NpZl92YXIoZmZpX2NpZiAqY2lmLAorCQkJICAgIGZmaV9hYmkgYWJpLAorCQkJICAgIHVuc2ln
bmVkIGludCBuZml4ZWRhcmdzLAorCQkJICAgIHVuc2lnbmVkIGludCBudG90YWxhcmdzLAorCQkJ
ICAgIGZmaV90eXBlICpydHlwZSwKKwkJCSAgICBmZmlfdHlwZSAqKmF0eXBlcyk7CisKK3ZvaWQg
ZmZpX2NhbGwoZmZpX2NpZiAqY2lmLAorCSAgICAgIHZvaWQgKCpmbikodm9pZCksCisJICAgICAg
dm9pZCAqcnZhbHVlLAorCSAgICAgIHZvaWQgKiphdmFsdWUpOworCisvKiBVc2VmdWwgZm9yIGVs
aW1pbmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzICovCisjZGVmaW5lIEZGSV9GTihmKSAoKHZvaWQg
KCopKHZvaWQpKWYpCisKKy8qIC0tLS0gRGVmaW5pdGlvbnMgc2hhcmVkIHdpdGggYXNzZW1ibHkg
Y29kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZgorCisvKiBJZiB0
aGVzZSBjaGFuZ2UsIHVwZGF0ZSBzcmMvbWlwcy9mZml0YXJnZXQuaC4gKi8KKyNkZWZpbmUgRkZJ
X1RZUEVfVk9JRCAgICAgICAwICAgIAorI2RlZmluZSBGRklfVFlQRV9JTlQgICAgICAgIDEKKyNk
ZWZpbmUgRkZJX1RZUEVfRkxPQVQgICAgICAyICAgIAorI2RlZmluZSBGRklfVFlQRV9ET1VCTEUg
ICAgIDMKKyNpZiAxCisjZGVmaW5lIEZGSV9UWVBFX0xPTkdET1VCTEUgNAorI2Vsc2UKKyNkZWZp
bmUgRkZJX1RZUEVfTE9OR0RPVUJMRSBGRklfVFlQRV9ET1VCTEUKKyNlbmRpZgorI2RlZmluZSBG
RklfVFlQRV9VSU5UOCAgICAgIDUgICAKKyNkZWZpbmUgRkZJX1RZUEVfU0lOVDggICAgICA2Cisj
ZGVmaW5lIEZGSV9UWVBFX1VJTlQxNiAgICAgNyAKKyNkZWZpbmUgRkZJX1RZUEVfU0lOVDE2ICAg
ICA4CisjZGVmaW5lIEZGSV9UWVBFX1VJTlQzMiAgICAgOQorI2RlZmluZSBGRklfVFlQRV9TSU5U
MzIgICAgIDEwCisjZGVmaW5lIEZGSV9UWVBFX1VJTlQ2NCAgICAgMTEKKyNkZWZpbmUgRkZJX1RZ
UEVfU0lOVDY0ICAgICAxMgorI2RlZmluZSBGRklfVFlQRV9TVFJVQ1QgICAgIDEzCisjZGVmaW5l
IEZGSV9UWVBFX1BPSU5URVIgICAgMTQKKyNkZWZpbmUgRkZJX1RZUEVfQ09NUExFWCAgICAxNQor
CisvKiBUaGlzIHNob3VsZCBhbHdheXMgcmVmZXIgdG8gdGhlIGxhc3QgdHlwZSBjb2RlIChmb3Ig
c2FuaXR5IGNoZWNrcykgKi8KKy8qID8/PyBJZGVhbGx5LCBhbnl3YXkuICBUaGVyZSBhcmUgYXNz
ZW1ibHkgZmlsZXMgdGhhdCBzdGlsbCBkZXBlbmQKKyAgIG9uIHRoaXMgbm90IGluY2x1ZGluZyBD
T01QTEVYLiAgKi8KKyNpZmRlZiBGRklfVEFSR0VUX0hBU19DT01QTEVYX1RZUEUKKyMgZGVmaW5l
IEZGSV9UWVBFX0xBU1QgICAgICBGRklfVFlQRV9DT01QTEVYCisjZWxzZQorIyBkZWZpbmUgRkZJ
X1RZUEVfTEFTVCAgICAgIEZGSV9UWVBFX1BPSU5URVIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmZmaS9pbmNsdWRlL2Zm
aXRhcmdldC5oIGIvbGliZmZpL2luY2x1ZGUvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOGE3YzY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmZmaS9pbmNs
dWRlL2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsMTQxIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotQy0qLQorICAg
ZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTQgIEFudGhvbnkgR3JlZW4KKyAg
ICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDMsIDIwMTAgIFJlZCBIYXQsIElu
Yy4KKyAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4KKworICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciB4ODYg
YW5kIHg4Ni02NC4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj
aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy
ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUn
JyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
ZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9t
IHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k
IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3Bp
ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09G
VFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI
RSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM
QUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgor
ICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisj
aWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworI2lmbmRl
ZiBMSUJGRklfSAorI2Vycm9yICJQbGVhc2UgZG8gbm90IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGly
ZWN0bHkgaW50byB5b3VyIHNvdXJjZS4gIFVzZSBmZmkuaCBpbnN0ZWFkLiIKKyNlbmRpZgorCisv
KiAtLS0tIFN5c3RlbSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBGb3IgY29kZSBjb21tb24gdG8gYWxsIHBsYXRmb3Jt
cyBvbiB4ODYgYW5kIHg4Nl82NC4gKi8KKyNkZWZpbmUgWDg2X0FOWQorCisjaWYgZGVmaW5lZCAo
WDg2XzY0KSAmJiBkZWZpbmVkIChfX2kzODZfXykKKyN1bmRlZiBYODZfNjQKKyNkZWZpbmUgWDg2
CisjZW5kaWYKKworI2lmZGVmIFg4Nl9XSU42NAorI2RlZmluZSBGRklfU0laRU9GX0FSRyA4Cisj
ZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwIC8qIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWluZ3ct
NjQgKi8KKyNlbmRpZgorCisjZGVmaW5lIEZGSV9UQVJHRVRfU1BFQ0lGSUNfU1RBQ0tfU1BBQ0Vf
QUxMT0NBVElPTgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKFg4Nl9EQVJX
SU4pICYmICFkZWZpbmVkKFg4Nl82NF9EQVJXSU4pCisjZGVmaW5lIEZGSV9UQVJHRVRfSEFTX0NP
TVBMRVhfVFlQRQorI2VuZGlmCisKKy8qIC0tLS0gR2VuZXJpYyB0eXBlIGRlZmluaXRpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElC
RkZJX0FTTQorI2lmZGVmIFg4Nl9XSU42NAorI2lmZGVmIF9NU0NfVkVSCit0eXBlZGVmIHVuc2ln
bmVkIF9faW50NjQgICAgICAgZmZpX2FyZzsKK3R5cGVkZWYgX19pbnQ2NCAgICAgICAgICAgICAg
ICBmZmlfc2FyZzsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgZmZpX2Fy
ZzsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgICAgICAgICBmZmlfc2FyZzsKKyNlbmRpZgorI2Vs
c2UKKyNpZiBkZWZpbmVkIF9feDg2XzY0X18gJiYgZGVmaW5lZCBfX0lMUDMyX18KKyNkZWZpbmUg
RkZJX1NJWkVPRl9BUkcgOAorI2RlZmluZSBGRklfU0laRU9GX0pBVkFfUkFXICA0Cit0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgZmZpX2FyZzsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAg
ICAgICAgICBmZmlfc2FyZzsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAg
ZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgICAgICAgICAgICBmZmlfc2FyZzsKKyNlbmRp
ZgorI2VuZGlmCisKK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsKKyNpZiBkZWZpbmVkKFg4Nl9XSU42
NCkKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9XSU42NCwKKyAgRkZJX0xBU1RfQUJJLAor
ICBGRklfREVGQVVMVF9BQkkgPSBGRklfV0lONjQKKworI2VsaWYgZGVmaW5lZChYODZfNjQpIHx8
IGRlZmluZWQoWDg2XzY0X0RBUldJTikKKyAgRkZJX0ZJUlNUX0FCSSA9IDEsCisgIEZGSV9VTklY
NjQsCisgIEZGSV9MQVNUX0FCSSwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1VOSVg2NAorCisj
ZWxpZiBkZWZpbmVkKFg4Nl9XSU4zMikKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9TWVNW
ICAgICAgPSAxLAorICBGRklfU1REQ0FMTCAgID0gMiwKKyAgRkZJX1RISVNDQUxMICA9IDMsCisg
IEZGSV9GQVNUQ0FMTCAgPSA0LAorICBGRklfTVNfQ0RFQ0wgID0gNSwKKyAgRkZJX1BBU0NBTCAg
ICA9IDYsCisgIEZGSV9SRUdJU1RFUiAgPSA3LAorICBGRklfTEFTVF9BQkksCisgIEZGSV9ERUZB
VUxUX0FCSSA9IEZGSV9NU19DREVDTAorI2Vsc2UKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZG
SV9TWVNWICAgICAgPSAxLAorICBGRklfVEhJU0NBTEwgID0gMywKKyAgRkZJX0ZBU1RDQUxMICA9
IDQsCisgIEZGSV9TVERDQUxMICAgPSA1LAorICBGRklfUEFTQ0FMICAgID0gNiwKKyAgRkZJX1JF
R0lTVEVSICA9IDcsCisgIEZGSV9NU19DREVDTCAgPSA4LAorICBGRklfTEFTVF9BQkksCisgIEZG
SV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWCisjZW5kaWYKK30gZmZpX2FiaTsKKyNlbmRpZgorCisv
KiAtLS0tIERlZmluaXRpb25zIGZvciBjbG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCisKKyNpZiAhZGVm
aW5lZChYODZfREFSV0lOKSAmJiAhZGVmaW5lZChYODZfNjRfREFSV0lOKQorI2RlZmluZSBGRklf
R09fQ0xPU1VSRVMgMQorI2VuZGlmCisKKyNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFC
IChGRklfVFlQRV9MQVNUICsgMSkKKyNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCIChG
RklfVFlQRV9MQVNUICsgMikKKyNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCIChGRklf
VFlQRV9MQVNUICsgMykKKyNkZWZpbmUgRkZJX1RZUEVfTVNfU1RSVUNUICAgICAgIChGRklfVFlQ
RV9MQVNUICsgNCkKKworI2lmIGRlZmluZWQgKFg4Nl82NCkgfHwgZGVmaW5lZChYODZfV0lONjQp
IHx8IGRlZmluZWQoWDg2XzY0X0RBUldJTikKKyMgZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUg
MjQKKyMgZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisjZWxzZQorIyBkZWZpbmUgRkZJX1RS
QU1QT0xJTkVfU0laRSAxMgorIyBkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDEgIC8qIHg4NiBo
YXMgbmF0aXZlIHJhdyBhcGkgc3VwcG9ydCAqLworI2VuZGlmCisKKyNlbmRpZgotLSAKMi4xNy4x
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:15:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:15:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVUn-0006cy-9g; Thu, 26 Sep 2019 15:15:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVUl-0006ck-KE
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:15:51 +0000
X-Inumbo-ID: 858b063e-e070-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 858b063e-e070-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:15:50 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0D464F2023;
 Thu, 26 Sep 2019 17:15:49 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Z08rYcq1dSe5; Thu, 26 Sep 2019 17:15:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C9120F2004;
 Thu, 26 Sep 2019 17:15:44 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:15:25 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:15:13 +0200
Message-ID: <20190926151513.8171-6-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
References: <20190926151513.8171-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [GCC PATCH v2 5/5] Adding extra information
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGV4dGVybmFsIGxpYnJhcnkgZGVwZWRlbmNpZXMgYW5kIGtub3duIGJ1ZyBub3RpY2UuCgpT
aWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNs
YWIuZXU+Ci0tLQogUkVBRE1FLm1kIHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdl
ZCwgMTUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZApp
bmRleCA1Y2U2Njc3Li4yZWJmZjhhIDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1F
Lm1kCkBAIC0zLDUgKzMsMjAgQEAgZ2NjIGZvciBVbmlrcmFmdAogCiBUaGlzIGlzIHRoZSBwb3J0
IG9mIGdjYyBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4KIAorRm9yIHRoZSB0aW1l
IGJlaW5nIG9ubHkgbGliYmFja3RyYWNlIGFuZCBsaWJmZmkgbGlicmFyaWVzIGFyZSBwb3J0ZWQg
YmVjYXVzZSB0aGV5IGFyZSAKK25lZWRlZCBmb3IgdGhlIGxpYmdvIHBvcnQuIFlvdSB3aWxsIG5l
ZWQgbmV3bGliIGZvciBib3RoIGxpYnJhcmllcy4gCisKK0ZvciBsaWJmZmkgeW91IHdpbGwgbmVl
ZCBwdGhyZWFkXF9lbWJlZGRlZCBleHRlcm5hbCBsaWJyYXJ5IHRvby4KKworQWxzbyBmb3IgbGli
YmFja3RyYWNlIHlvdSB3aWxsIG5lZWQgdGhlIGJlbG93IGV4dGVybmFsIGxpYnJhcmllczoKKysg
Y29tcGlsZXItcnQgCisrIGxpYnVud2luZAorKyBsaWJjeHgKKysgbGliY3h4YWJpCisKK01vcmVv
dmVyIGJlY2F1c2Ugb2YgYSBidWcgaW4gbGlidW53aW5kOiBgdW53X2dldGNvbnRleHRgIGxlYWRz
IHRvIHBhZ2UgZmF1bHQsIAorYGJhY2t0cmFjZV9mdWxsYCBmdW5jdGlvbiB3aWxsIGFsc28gbGVh
ZCB0byBwYWdlIGZhdWx0LCBhcyBpdCB1c2VzIGBfVW53aW5kX0JhY2t0cmFjZWAKK3doaWNoIGNh
bGxzIGB1bndfZ2V0Y29udGV4dGAuCisKIFBsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAg
YXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCiBzdWJkaXJlY3Rvcnkg
b2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KLS0gCjIuMTcuMQoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:19:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:19:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVYI-0006z2-Bn; Thu, 26 Sep 2019 15:19:30 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVYH-0006yp-4o
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:19:29 +0000
X-Inumbo-ID: 07843a16-e071-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 07843a16-e071-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 15:19:27 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0B0E6F2023;
 Thu, 26 Sep 2019 17:19:27 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ku20lB2a72Rj; Thu, 26 Sep 2019 17:19:26 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id D6AFCF2004;
 Thu, 26 Sep 2019 17:19:22 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:19:22 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:19:06 +0200
Message-ID: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH v2 0/5] Port libbfi and
 libbacktrace on Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

UGxlYXNlIGlnbm9yZSBwcmV2aW91cyBlbWFpbHMuIFVOSUtSQUZUIHdhcyBtaXNzaW5nIGZyb20g
U3ViamVjdC4KClRoZXNlIGFyZSB0aGUgcGF0Y2hlcyBuZWVkZWQgZm9yIHBvcnRpbmcgbGliZmZp
IGFuZCBsaWJiYWNrdHJhY2Ugb24gClVuaWtyYWZ0LiBBcyBib3RoIG9mIHRoZW0gYXJlIHBhcnQg
b2YgZ2NjIHRoZXkgYXJlIHVuZGVyIGFuIGV4dGVybmFsIGdjYwpsaWJyYXJ5LiBUaGVzZSB0d28g
bGlicmFyaWVzIGFyZSBuZWVkZWQgZm9yIHBvcnRpbmcgbGliZ28gdG8gVW5pa3JhZnQuCgpUaGUg
bGliZmZpIGxpYnJhcnkgcHJvdmlkZXMgYSBwb3J0YWJsZSwgaGlnaCBsZXZlbCBwcm9ncmFtbWlu
ZyBpbnRlcmZhY2UKdG8gdmFyaW91cyBjYWxsaW5nIGNvbnZlbnRpb25zLiBUaGlzIGFsbG93cyBh
IHByb2dyYW1tZXIgdG8gY2FsbCBhbnkKZnVuY3Rpb24gc3BlY2lmaWVkIGJ5IGEgY2FsbCBpbnRl
cmZhY2UgZGVzY3JpcHRpb24gYXQgcnVuIHRpbWUuCgpsaWJiYWNrdHJhY2UgaXMgYSBDIGxpYnJh
cnkgdGhhdCBtYXkgYmUgbGlua2VkIGludG8gYSBDL0MrKyBwcm9ncmFtIHRvCnByb2R1Y2Ugc3lt
Ym9saWMgYmFja3RyYWNlcy4gU2FtcGxlIHVzZXMgd291bGQgYmUgdG8gcHJpbnQgYSBkZXRhaWxl
ZApiYWNrdHJhY2Ugd2hlbiBhbiBlcnJvciBvY2N1cnMgb3IgdG8gZ2F0aGVyIGRldGFpbGVkIHBy
b2ZpbGluZyBpbmZvcm1hdGlvbi4KCkNoYW5nZXMgc2luY2UgdjE6Ci0gU2VwZXJhdGUgbGliZ28g
ZnJvbSBnY2MgCi0gQ3JlYXRlIGEgY29uZmlnIGRpcmVjdG9yeSB1bmRlciBpbmNsdWRlIGZvciBj
b25maWcgaGVhZGVyIGZpbGVzIGZvcgogIGVhY2ggbGlicmFyeQotIEFkZCBmZml0YXJnZXQuaCBp
biBsaWJmZmkKLSBBZGQgYmFja3RyYWNlLmggaW4gbGliYmFja3RyYWNlCi0gU3VwcmVzcyBXaW1w
bGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gd2FybmluZyBpbiBsaWJmZmkKCkNoYXJhbGFtcG9z
IE1haW5hcyAoNSk6CiAgSW50cm9kdWNlIGxpYnJhcnkgc2tlbGV0b24KICBBZGQgTWFrZWZpbGUu
dWsKICBQb3J0IGxpYmJhY2t0cmFjZSBsaWJyYXJ5CiAgUG9ydCBsaWJmZmkgbGlicmFyeQogIEFk
ZGluZyBleHRyYSBpbmZvcm1hdGlvbgoKIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAyNyArKwogQ09ESU5HX1NUWUxFLm1kICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgICA0ICsKIENPTlRSSUJVVElORy5tZCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAgNCArCiBDT1BZSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
MzkgKysKIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyOSAr
KwogTUFJTlRBSU5FUlMubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDExICsKIE1h
a2VmaWxlLnVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEyMiArKysrKwogUkVB
RE1FLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDIyICsKIGV4cG9ydHN5
bXMudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBsaWJiYWNrdHJhY2Uv
ZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgICAgfCAgIDYgKwogbGliYmFja3RyYWNlL2luY2x1
ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oIHwgIDY2ICsrKwogbGliYmFja3RyYWNlL2luY2x1ZGUv
YmFja3RyYWNlLmggICAgICAgICAgIHwgMjAwICsrKysrKysrCiBsaWJiYWNrdHJhY2UvaW5jbHVk
ZS9jb25maWcvY29uZmlnLmggICAgICAgfCAxMzUgKysrKysrCiBsaWJmZmkvZXhwb3J0c3ltcy51
ayAgICAgICAgICAgICAgICAgICAgICAgfCAgMjEgKwogbGliZmZpL2luY2x1ZGUvY29uZmlnL2Zm
aWNvbmZpZy5oICAgICAgICAgIHwgMjA2ICsrKysrKysrKwogbGliZmZpL2luY2x1ZGUvZmZpLmgg
ICAgICAgICAgICAgICAgICAgICAgIHwgNTA5ICsrKysrKysrKysrKysrKysrKysrKwogbGliZmZp
L2luY2x1ZGUvZmZpdGFyZ2V0LmggICAgICAgICAgICAgICAgIHwgMTQxICsrKysrKwogMTcgZmls
ZXMgY2hhbmdlZCwgMTU0MyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgLmdpdGln
bm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUgMTAw
NjQ0IENPTlRSSUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5t
ZAogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgUkVB
RE1FLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgZXhwb3J0c3ltcy51awogY3JlYXRlIG1vZGUgMTAw
NjQ0IGxpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYmFj
a3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
bGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJi
YWNrdHJhY2UvaW5jbHVkZS9jb25maWcvY29uZmlnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJm
ZmkvZXhwb3J0c3ltcy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9pbmNsdWRlL2NvbmZp
Zy9mZmljb25maWcuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9pbmNsdWRlL2ZmaS5oCiBj
cmVhdGUgbW9kZSAxMDA2NDQgbGliZmZpL2luY2x1ZGUvZmZpdGFyZ2V0LmgKCi0tIAoyLjE3LjEK
CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRw
czovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:19:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:19:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVYV-000705-E2; Thu, 26 Sep 2019 15:19:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVYU-000700-GK
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:19:42 +0000
X-Inumbo-ID: 0f295a44-e071-11e9-97fb-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 0f295a44-e071-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 15:19:40 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id EBEDC105722;
 Thu, 26 Sep 2019 17:19:39 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id cSERjq5w65Kv; Thu, 26 Sep 2019 17:19:39 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id CA555105721;
 Thu, 26 Sep 2019 17:19:39 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:19:39 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:19:07 +0200
Message-ID: <20190926151911.11587-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH v2 1/5] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFz
QG5lY2xhYi5ldT4KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysr
KysKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysK
IENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogQ29uZmlnLnVrICAgICAgIHwgIDkgKysrKysrKysrCiBNQUlOVEFJTkVSUy5tZCAgfCAx
MSArKysrKysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDcgKysrKysrKwogZXhwb3J0c3ltcy51
ayAgIHwgIDEgKwogOCBmaWxlcyBjaGFuZ2VkLCAxMDIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v
ZGUgMTAwNjQ0IC5naXRpZ25vcmUKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBD
T1BZSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2
NDQgTUFJTlRBSU5FUlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQKIGNyZWF0ZSBt
b2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRp
Z25vcmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVkMmZkMwotLS0gL2Rl
di9udWxsCisrKyBiLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyNyBAQAorKi5kZXBlbmQKKyoubwor
Ki5hCisqLmQKKyouc28KKyoub3JpZworKi5yZWoKKyouYmFrCisqLnN3cAorKn4KKywqCitcIypc
IworLlwjKgorXCNfKlwjCisuXCNfKgorIS5naXRpZ25vcmUKKy4qCisKKyMgZ251IGdsb2JhbCBm
aWxlcworR1BBVEgKK0dSVEFHUworR1NZTVMKK0dUQUdTCisKKyMgY3Njb3BlIGZpbGVzCitjc2Nv
cGUuKgorbmNzY29wZS4qCmRpZmYgLS1naXQgYS9DT0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZ
TEUubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTczMDA0MQotLS0gL2Rl
di9udWxsCisrKyBiL0NPRElOR19TVFlMRS5tZApAQCAtMCwwICsxLDQgQEAKK0NvZGluZyBTdHls
ZQorPT09PT09PT09PT09CisKK1BsZWFzZSByZWZlciB0byB0aGUgYENPRElOR19TVFlMRS5tZGAg
ZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvQ09OVFJJ
QlVUSU5HLm1kIGIvQ09OVFJJQlVUSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjE0ZjZhYzYKLS0tIC9kZXYvbnVsbAorKysgYi9DT05UUklCVVRJTkcubWQKQEAgLTAs
MCArMSw0IEBACitDb250cmlidXRpbmcgdG8gVW5pa3JhZnQKKz09PT09PT09PT09PT09PT09PT09
PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05UUklCVVRJTkcubWRgIGZpbGUgaW4gdGhl
IG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZ
SU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDlmM2EKLS0tIC9k
ZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0wLDAgKzEsMzkgQEAKK0xpY2Vuc2UKKz09PT09
PT0KKworVW5pa3JhZnQgZ2NjIHdyYXBwZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQg
Z2NjIHdpdGggVW5pa3JhZnQuCitFYWNoIEMgY29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBz
aG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlCitjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNo
IHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBjb2RlIGlzCitsaWNlbnNlZC4gSWYgc3VjaCBhIGxp
Y2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodAorbm90aWNlIHdp
bGwgYXBwbHk6CisKKwlDb3B5cmlnaHQgKGMpIFllYXIsIEluc3RpdHV0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorCisJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisJYXJlIG1ldDoKKworCTEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorCTIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorCSAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhl
IG5hbWVzIG9mIGl0cworCSAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisJICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IgorCUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKwlJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorCUFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMg
QkUKKwlMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisJQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKwlTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKwlJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorCUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisJQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKwlQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKwpkaWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNGRhMDcKLS0tIC9kZXYvbnVsbAor
KysgYi9Db25maWcudWsKQEAgLTAsMCArMSw5IEBACittZW51Y29uZmlnIExJQkdDQworCWJvb2wg
ImdjYyAtIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIGxpYnJhcmllcyIKKwlkZWZhdWx0IG4KKwlz
ZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKKwlzZWxlY3QgTElCVUtERUJVRworCXNlbGVj
dCBMSUJVS0FMTE9DCisKK2lmIExJQkdDQworZW5kaWYKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJT
Lm1kIGIvTUFJTlRBSU5FUlMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MzIzOGIzMAotLS0gL2Rldi9udWxsCisrKyBiL01BSU5UQUlORVJTLm1kCkBAIC0wLDAgKzEsMTEg
QEAKK01haW50YWluZXJzIExpc3QKKz09PT09PT09PT09PT09PT0KKworRm9yIG5vdGVzIG9uIGhv
dyB0byByZWFkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byBgTUFJTlRBSU5FUlMu
bWRgIGluCit0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5LgorCisJTElCR0NDLVVOSUtSQUZU
CisJTToJQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KKwlNOglGZWxpcGUgSHVp
Y2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+CisJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5v
cmcKKwlGOiAqCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNlNjY3NwotLS0gL2Rldi9udWxsCisrKyBiL1JFQURN
RS5tZApAQCAtMCwwICsxLDcgQEAKK2djYyBmb3IgVW5pa3JhZnQKKz09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHBvcnQgb2YgZ2NjIGZvciBVbmlrcmFmdCBhcyBl
eHRlcm5hbCBsaWJyYXJ5LgorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdl
bGwgYXMgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIGBkb2MvYAorc3ViZGlyZWN0b3J5IG9mIHRo
ZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIv
ZXhwb3J0c3ltcy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODZjM2Yz
Ci0tLSAvZGV2L251bGwKKysrIGIvZXhwb3J0c3ltcy51awpAQCAtMCwwICsxIEBACitub25lClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:19:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:19:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVYe-00070o-Fq; Thu, 26 Sep 2019 15:19:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVYd-00070h-Ed
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:19:51 +0000
X-Inumbo-ID: 145a90dc-e071-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 145a90dc-e071-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:19:49 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 91581F2023;
 Thu, 26 Sep 2019 17:19:48 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 1-gAA7z18kNK; Thu, 26 Sep 2019 17:19:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 68636F2004;
 Thu, 26 Sep 2019 17:19:44 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:19:44 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:19:08 +0200
Message-ID: <20190926151911.11587-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH v2 2/5] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

R0NDIGlzIGEgc3VpdGUgb2YgbXVsdGlwbGUgbGlicmFyaWVzLiBJbiB0aGlzIHBhdGNoIHdlIGlu
dHJvZHVjZSBvbmx5IHRoZSBiYXNpYwpjb250ZW50cyBmb3IgdGhlIE1ha2VmaWxlLgoKU2lnbmVk
LW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1
PgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0K
IE1ha2VmaWxlLnVrIHwgNjEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspCiBjcmVhdGUg
bW9kZSAxMDA2NDQgTWFrZWZpbGUudWsKCmRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2Vm
aWxlLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhNTcyZGQKLS0tIC9k
ZXYvbnVsbAorKysgYi9NYWtlZmlsZS51awpAQCAtMCwwICsxLDYxIEBACisjICBTUERYLUxpY2Vu
c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisjCisjICBnY2MgTWFrZWZpbGUudWsKKyMKKyMg
IEF1dGhvcnM6IENoYXJhbGFtcG9zIE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFzQG5lY2xhYi5l
dT4KKyMgICAgICAgICAgIENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CisjCisj
ICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uCisj
ICAgICAgICAgICAgICAgIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0
CisjCisjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyAgYXJlIG1ldDoKKyMKKyMgIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xk
ZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjICAgICB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyAg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMgSVMiCisjICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjICBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQorIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorIyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyAgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorIyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisj
CisjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkg
V0FZLgorIworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IHJlZ2lzdHJhdGlv
bgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZ2Nj
LCQoQ09ORklHX0xJQkdDQykpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPcmlnaW5h
bCBzb3VyY2VzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCR0NDX1ZFUlNJT049Ny4zLjAK
K0xJQkdDQ19VUkw9aHR0cHM6Ly9mdHAuZ251Lm9yZy9nbnUvZ2NjL2djYy0kKExJQkdDQ19WRVJT
SU9OKS9nY2MtJChMSUJHQ0NfVkVSU0lPTikudGFyLmd6CitMSUJHQ0NfU1VCRElSPWdjYy0kKExJ
QkdDQ19WRVJTSU9OKQorJChldmFsICQoY2FsbCBmZXRjaCxsaWJnY2MsJChMSUJHQ0NfVVJMKSkp
CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCitMSUJHQ0NfRVhUUkFDVEVEID0gJChMSUJHQ0NfT1JJR0lOKS9nY2MtJChMSUJHQ0Nf
VkVSU0lPTikKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSBpbmNsdWRlcwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0NJTkNMVURFUy0kKENPTkZJR19MSUJHQ0MpICAgKz0g
LUkkKExJQkdDQ19CQVNFKS9pbmNsdWRlCitDWFhJTkNMVURFUy0kKENPTkZJR19MSUJHQ0MpICs9
IC1JJChMSUJHQ0NfQkFTRSkvaW5jbHVkZQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:19:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:19:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVYi-00071Q-HV; Thu, 26 Sep 2019 15:19:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVYh-00071I-BP
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:19:55 +0000
X-Inumbo-ID: 16b68250-e071-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 16b68250-e071-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 15:19:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id A34F4F2023;
 Thu, 26 Sep 2019 17:19:52 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id qLpsTE9sWyhC; Thu, 26 Sep 2019 17:19:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 79304F2004;
 Thu, 26 Sep 2019 17:19:48 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:19:45 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:19:09 +0200
Message-ID: <20190926151911.11587-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH v2 3/5] Port libbacktrace library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwb3J0IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGNvbmZpZy5oIGFuZCBiYWNrdHJhY2Ut
c3VwcG9ydGVkLmggaGVhZGVycy4KQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGdl
bmVyYXRlIHRoZW0gZHVyaW5nIHRoZSBidWlsZAoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3Mg
TWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgpTaWduZWQtb2ZmLWJ5OiBDb3N0
aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAxNCArKwogTWFrZWZpbGUudWsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgIDMzICsrKysKIGxpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVr
ICAgICAgICAgICAgICAgICB8ICAgNiArCiBsaWJiYWNrdHJhY2UvaW5jbHVkZS9iYWNrdHJhY2Ut
c3VwcG9ydGVkLmggfCAgNjYgKysrKysrKwogbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNl
LmggICAgICAgICAgIHwgMjAwICsrKysrKysrKysrKysrKysrKysrKwogbGliYmFja3RyYWNlL2lu
Y2x1ZGUvY29uZmlnL2NvbmZpZy5oICAgICAgIHwgMTM1ICsrKysrKysrKysrKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDQ1NCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYmFja3Ry
YWNlL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2UvaW5jbHVk
ZS9iYWNrdHJhY2Utc3VwcG9ydGVkLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJiYWNrdHJhY2Uv
aW5jbHVkZS9iYWNrdHJhY2UuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmJhY2t0cmFjZS9pbmNs
dWRlL2NvbmZpZy9jb25maWcuaAoKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpp
bmRleCBmYTRkYTA3Li5lYTQxMWIwIDEwMDY0NAotLS0gYS9Db25maWcudWsKKysrIGIvQ29uZmln
LnVrCkBAIC02LDQgKzYsMTggQEAgbWVudWNvbmZpZyBMSUJHQ0MKIAlzZWxlY3QgTElCVUtBTExP
QwogCiBpZiBMSUJHQ0MKKworY29uZmlnIExJQkJBQ0tUUkFDRQorCWJvb2wgImxpYmJhY2t0cmFj
ZSBsaWJyYXJ5IgorCWRlZmF1bHQgbgorCXNlbGVjdCBMSUJORVdMSUJDCisJc2VsZWN0IExJQkNP
TVBJTEVSX1JUCisJc2VsZWN0IExJQlVOV0lORAorCXNlbGVjdCBMSUJDWFgKKwlzZWxlY3QgTElC
Q1hYQUJJCisJc2VsZWN0IExJQlVLTU1BUAorCXNlbGVjdCBVS1NZU0lORk8KK2lmIExJQkJBQ0tU
UkFDRQorZW5kaWYKKwogZW5kaWYKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUu
dWsKaW5kZXggMmE1NzJkZC4uMmU3NjNmOSAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIv
TWFrZWZpbGUudWsKQEAgLTQwLDYgKzQwLDcgQEAKICMgTGlicmFyeSByZWdpc3RyYXRpb24KICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmdjYywkKENP
TkZJR19MSUJHQ0MpKSkKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliYmFja3RyYWNlLCQoQ09O
RklHX0xJQkJBQ0tUUkFDRSkpKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBPcmlnaW5h
bCBzb3VyY2VzCkBAIC01Myw5ICs1NCw0MSBAQCAkKGV2YWwgJChjYWxsIGZldGNoLGxpYmdjYywk
KExJQkdDQ19VUkwpKSkKICMgSGVscGVycwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIExJQkdD
Q19FWFRSQUNURUQgPSAkKExJQkdDQ19PUklHSU4pL2djYy0kKExJQkdDQ19WRVJTSU9OKQorTElC
QkFDS1RSQUNFX0VYVFJBQ1RFRCA9ICQoTElCR0NDX0VYVFJBQ1RFRCkvbGliYmFja3RyYWNlCiAK
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIExpYnJhcnkgaW5jbHVkZXMKICMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCiBDSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSAgICs9IC1JJChMSUJHQ0Nf
QkFTRSkvaW5jbHVkZQogQ1hYSU5DTFVERVMtJChDT05GSUdfTElCR0NDKSArPSAtSSQoTElCR0ND
X0JBU0UpL2luY2x1ZGUKKworQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkJBQ0tUUkFDRSkgICArPSAt
SSQoTElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlCitDWFhJTkNMVURFUy0kKENPTkZJ
R19MSUJCQUNLVFJBQ0UpICs9IC1JJChMSUJHQ0NfQkFTRSkvbGliYmFja3RyYWNlL2luY2x1ZGUK
KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliYmFja3RyYWNlIGNvZGUKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCitMSUJCQUNLVFJBQ0VfQ0lOQ0xVREVTLXkgPSAtSSQoTElCR0NDX0JB
U0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlIFwKKwktSSQoTElCR0NDX0VYVFJBQ1RFRCkvaW5jbHVk
ZSAtSSQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkgXAorCS1JJChMSUJHQ0NfQkFTRSkvbGliYmFj
a3RyYWNlL2luY2x1ZGUvY29uZmlnCisKK0xJQkJBQ0tUUkFDRV9DRkxBR1MteSArPSAtREhBVkVf
Q09ORklHX0ggLURIQVZFX1NURElOVF9IXAorCS1mdW53aW5kLXRhYmxlcyBcCisJLVcgLVdhbGwg
LVd3cml0ZS1zdHJpbmdzIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVdtaXNzaW5nLXByb3RvdHlwZXMg
XAorCS1Xb2xkLXN0eWxlLWRlZmluaXRpb24gLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgLVdj
YXN0LXF1YWwKKworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFDRV9FWFRSQUNU
RUQpL2F0b21pYy5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJB
Q1RFRCkvZHdhcmYuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFDRV9FWFRS
QUNURUQpL2ZpbGVsaW5lLmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJCQUNLVFJBQ0Vf
RVhUUkFDVEVEKS9wb3NpeC5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNF
X0VYVFJBQ1RFRCkvcHJpbnQuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFD
RV9FWFRSQUNURUQpL3NvcnQuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFD
RV9FWFRSQUNURUQpL3N0YXRlLmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJCQUNLVFJB
Q0VfRVhUUkFDVEVEKS9iYWNrdHJhY2UuYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJB
Q0tUUkFDRV9FWFRSQUNURUQpL3NpbXBsZS5jCitMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElC
QkFDS1RSQUNFX0VYVFJBQ1RFRCkvZWxmLmMKK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJC
QUNLVFJBQ0VfRVhUUkFDVEVEKS9tbWFwaW8uYworTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJ
QkJBQ0tUUkFDRV9FWFRSQUNURUQpL21tYXAuYworCitMSUJCQUNLVFJBQ0VfRVhQT1JUUyA9ICQo
TElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrCisKZGlmZiAtLWdpdCBhL2xp
YmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrIGIvbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmM2U4NgotLS0gL2Rldi9udWxsCisr
KyBiL2xpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrCkBAIC0wLDAgKzEsNiBAQAorYmFja3RyYWNl
X2NyZWF0ZV9zdGF0ZQorYmFja3RyYWNlX2Z1bGwKK2JhY2t0cmFjZV9wY2luZm8KK2JhY2t0cmFj
ZV9wcmludAorYmFja3RyYWNlX3NpbXBsZQorYmFja3RyYWNlX3N5bWluZm8KZGlmZiAtLWdpdCBh
L2xpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQuaCBiL2xpYmJhY2t0cmFj
ZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5jMDNhOThkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYmFja3RyYWNlL2luY2x1
ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qIGJhY2t0cmFjZS1z
dXBwb3J0ZWQuaC5pbiAtLSBXaGV0aGVyIHN0YWNrIGJhY2t0cmFjZSBpcyBzdXBwb3J0ZWQuCisg
ICBDb3B5cmlnaHQgKEMpIDIwMTItMjAxNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K
KyAgIFdyaXR0ZW4gYnkgSWFuIExhbmNlIFRheWxvciwgR29vZ2xlLgorCitSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKK21ldDoKKworICAgICgxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICgyKSBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbgorICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICBkaXN0cmlidXRpb24uCisKKyAgICAoMykg
VGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8KKyAgICBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAg
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9S
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCitTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gICovCisKKy8qIFRoZSBmaWxlIGJhY2t0cmFjZS1zdXBwb3J0ZWQuaC5pbiBp
cyB1c2VkIGJ5IGNvbmZpZ3VyZSB0byBnZW5lcmF0ZQorICAgdGhlIGZpbGUgYmFja3RyYWNlLXN1
cHBvcnRlZC5oLiAgVGhlIGZpbGUgYmFja3RyYWNlLXN1cHBvcnRlZC5oIG1heQorICAgYmUgI2lu
Y2x1ZGUnZCB0byBzZWUgd2hldGhlciB0aGUgYmFja3RyYWNlIGxpYnJhcnkgd2lsbCBiZSBhYmxl
IHRvCisgICBnZXQgYSBiYWNrdHJhY2UgYW5kIHByb2R1Y2Ugc3ltYm9saWMgaW5mb3JtYXRpb24u
ICAqLworCisKKy8qIEJBQ0tUUkFDRV9TVVBQT1JURUQgd2lsbCBiZSAjZGVmaW5lJ2QgYXMgMSBp
ZiB0aGUgYmFja3RyYWNlIGxpYnJhcnkKKyAgIHNob3VsZCB3b3JrLCAwIGlmIGl0IHdpbGwgbm90
LiAgTGlicmFyaWVzIG1heSAjaW5jbHVkZSB0aGlzIHRvIG1ha2UKKyAgIG90aGVyIGFycmFuZ2Vt
ZW50cy4gICovCisKKyNkZWZpbmUgQkFDS1RSQUNFX1NVUFBPUlRFRCAxCisKKy8qIEJBQ0tUUkFD
RV9VU0VTX01BTExPQyB3aWxsIGJlICNkZWZpbmUnZCBhcyAxIGlmIHRoZSBiYWNrdHJhY2UKKyAg
IGxpYnJhcnkgd2lsbCBjYWxsIG1hbGxvYyBhcyBpdCB3b3JrcywgMCBpZiBpdCB3aWxsIGNhbGwg
bW1hcAorICAgaW5zdGVhZC4gIFRoaXMgbWF5IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIg
aXQgaXMgc2FmZSB0byBjYWxsCisgICB0aGUgYmFja3RyYWNlIGZ1bmN0aW9ucyBmcm9tIGEgc2ln
bmFsIGhhbmRsZXIuICBJbiBnZW5lcmFsIHRoaXMKKyAgIG9ubHkgYXBwbGllcyB0byBjYWxscyBs
aWtlIGJhY2t0cmFjZSBhbmQgYmFja3RyYWNlX3BjaW5mby4gIEl0IGRvZXMKKyAgIG5vdCBhcHBs
eSB0byBiYWNrdHJhY2Vfc2ltcGxlLCB3aGljaCBuZXZlciBjYWxscyBtYWxsb2MuICBJdCBkb2Vz
CisgICBub3QgYXBwbHkgdG8gYmFja3RyYWNlX3ByaW50LCB3aGljaCBhbHdheXMgY2FsbHMgZnBy
aW50ZiBhbmQKKyAgIHRoZXJlZm9yZSBtYWxsb2MuICAqLworCisjZGVmaW5lIEJBQ0tUUkFDRV9V
U0VTX01BTExPQyAwCisKKy8qIEJBQ0tUUkFDRV9TVVBQT1JUU19USFJFQURTIHdpbGwgYmUgI2Rl
ZmluZSdkIGFzIDEgaWYgdGhlIGJhY2t0cmFjZQorICAgbGlicmFyeSBpcyBjb25maWd1cmVkIHdp
dGggdGhyZWFkaW5nIHN1cHBvcnQsIDAgaWYgbm90LiAgSWYgdGhpcyBpcworICAgMCwgdGhlIHRo
cmVhZGVkIHBhcmFtZXRlciB0byBiYWNrdHJhY2VfY3JlYXRlX3N0YXRlIG11c3QgYmUgcGFzc2Vk
CisgICBhcyAwLiAgKi8KKworI2RlZmluZSBCQUNLVFJBQ0VfU1VQUE9SVFNfVEhSRUFEUyAxCisK
Ky8qIEJBQ0tUUkFDRV9TVVBQT1JUU19EQVRBIHdpbGwgYmUgI2RlZmluZWQnZCBhcyAxIGlmIHRo
ZSBiYWNrdHJhY2Vfc3ltaW5mbworICAgd2lsbCB3b3JrIGZvciB2YXJpYWJsZXMuICBJdCB3aWxs
IGFsd2F5cyB3b3JrIGZvciBmdW5jdGlvbnMuICAqLworCisjZGVmaW5lIEJBQ0tUUkFDRV9TVVBQ
T1JUU19EQVRBIDEKZGlmZiAtLWdpdCBhL2xpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS5o
IGIvbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZTIzOWIzNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmJhY2t0cmFjZS9p
bmNsdWRlL2JhY2t0cmFjZS5oCkBAIC0wLDAgKzEsMjAwIEBACisvKiBiYWNrdHJhY2UuaCAtLSBQ
dWJsaWMgaGVhZGVyIGZpbGUgZm9yIHN0YWNrIGJhY2t0cmFjZSBsaWJyYXJ5LgorICAgQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICBXcml0
dGVuIGJ5IElhbiBMYW5jZSBUYXlsb3IsIEdvb2dsZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCittZXQ6CisKKyAgICAoMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAoMikgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4KKyAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgICAgZGlzdHJpYnV0aW9uLgorCisgICAgKDMpIFRoZSBuYW1l
IG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvCisgICAgZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuICAqLworCisjaWZuZGVmIEJBQ0tUUkFDRV9ICisjZGVmaW5lIEJBQ0tUUkFDRV9ICisKKyNp
bmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKiBXZSB3YW50IHRvIGdl
dCBhIGRlZmluaXRpb24gZm9yIHVpbnRwdHJfdCwgYnV0IHdlIHN0aWxsIGNhcmUgYWJvdXQKKyAg
IHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIDxzdGRpbnQuaD4uICAqLworI2lmIGRlZmluZWQoX19H
TElCQ19fKSAmJiBfX0dMSUJDX18gPj0gMgorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNlbGlm
IGRlZmluZWQoSEFWRV9TVERJTlRfSCkKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjZWxzZQor
CisvKiBTeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSA8c3RkaW50Lmg+IG11c3QgcHJvdmlkZSBnc3Rk
aW50LmgsIGUuZy4sCisgICBmcm9tIEdDQ19IRUFERVJfU1RESU5UIGluIGNvbmZpZ3VyZS5hYy4g
ICovCisvLyNpbmNsdWRlICJnc3RkaW50LmgiCisKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3Bs
dXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIFRoZSBiYWNrdHJhY2Ugc3RhdGUuICBUaGlz
IHN0cnVjdCBpcyBpbnRlbnRpb25hbGx5IG5vdCBkZWZpbmVkIGluCisgICB0aGUgcHVibGljIGlu
dGVyZmFjZS4gICovCisKK3N0cnVjdCBiYWNrdHJhY2Vfc3RhdGU7CisKKy8qIFRoZSB0eXBlIG9m
IHRoZSBlcnJvciBjYWxsYmFjayBhcmd1bWVudCB0byBiYWNrdHJhY2UgZnVuY3Rpb25zLgorICAg
VGhpcyBmdW5jdGlvbiwgaWYgbm90IE5VTEwsIHdpbGwgYmUgY2FsbGVkIGZvciBjZXJ0YWluIGVy
cm9yIGNhc2VzLgorICAgVGhlIERBVEEgYXJndW1lbnQgaXMgcGFzc2VkIHRvIHRoZSBmdW5jdGlv
biB0aGF0IGNhbGxzIHRoaXMgb25lLgorICAgVGhlIE1TRyBhcmd1bWVudCBpcyBhbiBlcnJvciBt
ZXNzYWdlLiAgVGhlIEVSUk5VTSBhcmd1bWVudCwgaWYKKyAgIGdyZWF0ZXIgdGhhbiAwLCBob2xk
cyBhbiBlcnJubyB2YWx1ZS4gIFRoZSBNU0cgYnVmZmVyIG1heSBiZWNvbWUKKyAgIGludmFsaWQg
YWZ0ZXIgdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorCisgICBBcyBhIHNwZWNpYWwgY2FzZSwgdGhl
IEVSUk5VTSBhcmd1bWVudCB3aWxsIGJlIHBhc3NlZCBhcyAtMSBpZiBubworICAgZGVidWcgaW5m
byBjYW4gYmUgZm91bmQgZm9yIHRoZSBleGVjdXRhYmxlLCBidXQgdGhlIGZ1bmN0aW9uCisgICBy
ZXF1aXJlcyBkZWJ1ZyBpbmZvIChlLmcuLCBiYWNrdHJhY2VfZnVsbCwgYmFja3RyYWNlX3BjaW5m
bykuICBUaGUKKyAgIE1TRyBpbiB0aGlzIGNhc2Ugd2lsbCBiZSBzb21ldGhpbmcgYWxvbmcgdGhl
IGxpbmVzIG9mICJubyBkZWJ1ZworICAgaW5mbyIuICBTaW1pbGFybHksIEVSUk5VTSB3aWxsIGJl
IHBhc3NlZCBhcyAtMSBpZiB0aGVyZSBpcyBubworICAgc3ltYm9sIHRhYmxlLCBidXQgdGhlIGZ1
bmN0aW9uIHJlcXVpcmVzIGEgc3ltYm9sIHRhYmxlIChlLmcuLAorICAgYmFja3RyYWNlX3N5bWlu
Zm8pLiAgVGhpcyBtYXkgYmUgdXNlZCBhcyBhIHNpZ25hbCB0aGF0IHNvbWUgb3RoZXIKKyAgIGFw
cHJvYWNoIHNob3VsZCBiZSB0cmllZC4gICovCisKK3R5cGVkZWYgdm9pZCAoKmJhY2t0cmFjZV9l
cnJvcl9jYWxsYmFjaykgKHZvaWQgKmRhdGEsIGNvbnN0IGNoYXIgKm1zZywKKwkJCQkJICBpbnQg
ZXJybnVtKTsKKworLyogQ3JlYXRlIHN0YXRlIGluZm9ybWF0aW9uIGZvciB0aGUgYmFja3RyYWNl
IHJvdXRpbmVzLiAgVGhpcyBtdXN0IGJlCisgICBjYWxsZWQgYmVmb3JlIGFueSBvZiB0aGUgb3Ro
ZXIgcm91dGluZXMsIGFuZCBpdHMgcmV0dXJuIHZhbHVlIG11c3QKKyAgIGJlIHBhc3NlZCB0byBh
bGwgb2YgdGhlIG90aGVyIHJvdXRpbmVzLiAgRklMRU5BTUUgaXMgdGhlIHBhdGggbmFtZQorICAg
b2YgdGhlIGV4ZWN1dGFibGUgZmlsZTsgaWYgaXQgaXMgTlVMTCB0aGUgbGlicmFyeSB3aWxsIHRy
eQorICAgc3lzdGVtLXNwZWNpZmljIHBhdGggbmFtZXMuICBJZiBub3QgTlVMTCwgRklMRU5BTUUg
bXVzdCBwb2ludCB0byBhCisgICBwZXJtYW5lbnQgYnVmZmVyLiAgSWYgVEhSRUFERUQgaXMgbm9u
LXplcm8gdGhlIHN0YXRlIG1heSBiZQorICAgYWNjZXNzZWQgYnkgbXVsdGlwbGUgdGhyZWFkcyBz
aW11bHRhbmVvdXNseSwgYW5kIHRoZSBsaWJyYXJ5IHdpbGwKKyAgIHVzZSBhcHByb3ByaWF0ZSBh
dG9taWMgb3BlcmF0aW9ucy4gIElmIFRIUkVBREVEIGlzIHplcm8gdGhlIHN0YXRlCisgICBtYXkg
b25seSBiZSBhY2Nlc3NlZCBieSBvbmUgdGhyZWFkIGF0IGEgdGltZS4gIFRoaXMgcmV0dXJucyBh
IHN0YXRlCisgICBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZXJyb3IuICBJZiBhbiBlcnJv
ciBvY2N1cnMsIHRoaXMgd2lsbAorICAgY2FsbCB0aGUgRVJST1JfQ0FMTEJBQ0sgcm91dGluZS4g
ICovCisKK2V4dGVybiBzdHJ1Y3QgYmFja3RyYWNlX3N0YXRlICpiYWNrdHJhY2VfY3JlYXRlX3N0
YXRlICgKKyAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHRocmVhZGVkLAorICAgIGJhY2t0
cmFjZV9lcnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjaywgdm9pZCAqZGF0YSk7CisKKy8qIFRo
ZSB0eXBlIG9mIHRoZSBjYWxsYmFjayBhcmd1bWVudCB0byB0aGUgYmFja3RyYWNlX2Z1bGwgZnVu
Y3Rpb24uCisgICBEQVRBIGlzIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gYmFja3RyYWNlX2Z1bGwu
ICBQQyBpcyB0aGUgcHJvZ3JhbQorICAgY291bnRlci4gIEZJTEVOQU1FIGlzIHRoZSBuYW1lIG9m
IHRoZSBmaWxlIGNvbnRhaW5pbmcgUEMsIG9yIE5VTEwKKyAgIGlmIG5vdCBhdmFpbGFibGUuICBM
SU5FTk8gaXMgdGhlIGxpbmUgbnVtYmVyIGluIEZJTEVOQU1FIGNvbnRhaW5pbmcKKyAgIFBDLCBv
ciAwIGlmIG5vdCBhdmFpbGFibGUuICBGVU5DVElPTiBpcyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rp
b24KKyAgIGNvbnRhaW5pbmcgUEMsIG9yIE5VTEwgaWYgbm90IGF2YWlsYWJsZS4gIFRoaXMgc2hv
dWxkIHJldHVybiAwIHRvCisgICBjb250aW51aW5nIHRyYWNpbmcuICBUaGUgRklMRU5BTUUgYW5k
IEZVTkNUSU9OIGJ1ZmZlcnMgbWF5IGJlY29tZQorICAgaW52YWxpZCBhZnRlciB0aGlzIGZ1bmN0
aW9uIHJldHVybnMuICAqLworCit0eXBlZGVmIGludCAoKmJhY2t0cmFjZV9mdWxsX2NhbGxiYWNr
KSAodm9pZCAqZGF0YSwgdWludHB0cl90IHBjLAorCQkJCQljb25zdCBjaGFyICpmaWxlbmFtZSwg
aW50IGxpbmVubywKKwkJCQkJY29uc3QgY2hhciAqZnVuY3Rpb24pOworCisvKiBHZXQgYSBmdWxs
IHN0YWNrIGJhY2t0cmFjZS4gIFNLSVAgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcDsK
KyAgIHBhc3NpbmcgMCB3aWxsIHN0YXJ0IHRoZSB0cmFjZSB3aXRoIHRoZSBmdW5jdGlvbiBjYWxs
aW5nCisgICBiYWNrdHJhY2VfZnVsbC4gIERBVEEgaXMgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBy
b3V0aW5lLiAgSWYgYW55CisgICBjYWxsIHRvIENBTExCQUNLIHJldHVybnMgYSBub24temVybyB2
YWx1ZSwgdGhlIHN0YWNrIGJhY2t0cmFjZQorICAgc3RvcHMsIGFuZCBiYWNrdHJhY2UgcmV0dXJu
cyB0aGF0IHZhbHVlOyB0aGlzIG1heSBiZSB1c2VkIHRvIGxpbWl0CisgICB0aGUgbnVtYmVyIG9m
IHN0YWNrIGZyYW1lcyBkZXNpcmVkLiAgSWYgYWxsIGNhbGxzIHRvIENBTExCQUNLCisgICByZXR1
cm4gMCwgYmFja3RyYWNlIHJldHVybnMgMC4gIFRoZSBiYWNrdHJhY2VfZnVsbCBmdW5jdGlvbiB3
aWxsCisgICBtYWtlIGF0IGxlYXN0IG9uZSBjYWxsIHRvIGVpdGhlciBDQUxMQkFDSyBvciBFUlJP
Ul9DQUxMQkFDSy4gIFRoaXMKKyAgIGZ1bmN0aW9uIHJlcXVpcmVzIGRlYnVnIGluZm8gZm9yIHRo
ZSBleGVjdXRhYmxlLiAgKi8KKworZXh0ZXJuIGludCBiYWNrdHJhY2VfZnVsbCAoc3RydWN0IGJh
Y2t0cmFjZV9zdGF0ZSAqc3RhdGUsIGludCBza2lwLAorCQkJICAgYmFja3RyYWNlX2Z1bGxfY2Fs
bGJhY2sgY2FsbGJhY2ssCisJCQkgICBiYWNrdHJhY2VfZXJyb3JfY2FsbGJhY2sgZXJyb3JfY2Fs
bGJhY2ssCisJCQkgICB2b2lkICpkYXRhKTsKKworLyogVGhlIHR5cGUgb2YgdGhlIGNhbGxiYWNr
IGFyZ3VtZW50IHRvIHRoZSBiYWNrdHJhY2Vfc2ltcGxlIGZ1bmN0aW9uLgorICAgREFUQSBpcyB0
aGUgYXJndW1lbnQgcGFzc2VkIHRvIHNpbXBsZV9iYWNrdHJhY2UuICBQQyBpcyB0aGUgcHJvZ3Jh
bQorICAgY291bnRlci4gIFRoaXMgc2hvdWxkIHJldHVybiAwIHRvIGNvbnRpbnVlIHRyYWNpbmcu
ICAqLworCit0eXBlZGVmIGludCAoKmJhY2t0cmFjZV9zaW1wbGVfY2FsbGJhY2spICh2b2lkICpk
YXRhLCB1aW50cHRyX3QgcGMpOworCisvKiBHZXQgYSBzaW1wbGUgYmFja3RyYWNlLiAgU0tJUCBp
cyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lwLCBhcworICAgaW4gYmFja3RyYWNlLiAgREFU
QSBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHJvdXRpbmUuICBJZiBhbnkgY2FsbAorICAgdG8g
Q0FMTEJBQ0sgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCB0aGUgc3RhY2sgYmFja3RyYWNlIHN0
b3BzLAorICAgYW5kIGJhY2t0cmFjZV9zaW1wbGUgcmV0dXJucyB0aGF0IHZhbHVlLiAgT3RoZXJ3
aXNlCisgICBiYWNrdHJhY2Vfc2ltcGxlIHJldHVybnMgMC4gIFRoZSBiYWNrdHJhY2Vfc2ltcGxl
IGZ1bmN0aW9uIHdpbGwKKyAgIG1ha2UgYXQgbGVhc3Qgb25lIGNhbGwgdG8gZWl0aGVyIENBTExC
QUNLIG9yIEVSUk9SX0NBTExCQUNLLiAgVGhpcworICAgZnVuY3Rpb24gZG9lcyBub3QgcmVxdWly
ZSBhbnkgZGVidWcgaW5mbyBmb3IgdGhlIGV4ZWN1dGFibGUuICAqLworCitleHRlcm4gaW50IGJh
Y2t0cmFjZV9zaW1wbGUgKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLCBpbnQgc2tpcCwK
KwkJCSAgICAgYmFja3RyYWNlX3NpbXBsZV9jYWxsYmFjayBjYWxsYmFjaywKKwkJCSAgICAgYmFj
a3RyYWNlX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNrLAorCQkJICAgICB2b2lkICpkYXRh
KTsKKworLyogUHJpbnQgdGhlIGN1cnJlbnQgYmFja3RyYWNlIGluIGEgdXNlciByZWFkYWJsZSBm
b3JtYXQgdG8gYSBGSUxFLgorICAgU0tJUCBpcyB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byBza2lw
LCBhcyBpbiBiYWNrdHJhY2VfZnVsbC4gIEFueQorICAgZXJyb3IgbWVzc2FnZXMgYXJlIHByaW50
ZWQgdG8gc3RkZXJyLiAgVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBkZWJ1ZworICAgaW5mbyBmb3Ig
dGhlIGV4ZWN1dGFibGUuICAqLworCitleHRlcm4gdm9pZCBiYWNrdHJhY2VfcHJpbnQgKHN0cnVj
dCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLCBpbnQgc2tpcCwgRklMRSAqKTsKKworLyogR2l2ZW4g
UEMsIGEgcHJvZ3JhbSBjb3VudGVyIGluIHRoZSBjdXJyZW50IHByb2dyYW0sIGNhbGwgdGhlCisg
ICBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kIGZ1bmN0
aW9uIG5hbWUKKyAgIGluZm9ybWF0aW9uLiAgVGhpcyB3aWxsIG5vcm1hbGx5IGNhbGwgdGhlIGNh
bGxiYWNrIGZ1bmN0aW9uIGV4YWN0bHkKKyAgIG9uY2UuICBIb3dldmVyLCBpZiB0aGUgUEMgaGFw
cGVucyB0byBkZXNjcmliZSBhbiBpbmxpbmVkIGNhbGwsIGFuZAorICAgdGhlIGRlYnVnZ2luZyBp
bmZvcm1hdGlvbiBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCB0aGVuCisgICB0
aGlzIG1heSBjYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtdWx0aXBsZSB0aW1lcy4gIFRoaXMg
d2lsbCBtYWtlCisgICBhdCBsZWFzdCBvbmUgY2FsbCB0byBlaXRoZXIgQ0FMTEJBQ0sgb3IgRVJS
T1JfQ0FMTEJBQ0suICBUaGlzCisgICByZXR1cm5zIHRoZSBmaXJzdCBub24temVybyB2YWx1ZSBy
ZXR1cm5lZCBieSBDQUxMQkFDSywgb3IgMC4gICovCisKK2V4dGVybiBpbnQgYmFja3RyYWNlX3Bj
aW5mbyAoc3RydWN0IGJhY2t0cmFjZV9zdGF0ZSAqc3RhdGUsIHVpbnRwdHJfdCBwYywKKwkJCSAg
ICAgYmFja3RyYWNlX2Z1bGxfY2FsbGJhY2sgY2FsbGJhY2ssCisJCQkgICAgIGJhY2t0cmFjZV9l
cnJvcl9jYWxsYmFjayBlcnJvcl9jYWxsYmFjaywKKwkJCSAgICAgdm9pZCAqZGF0YSk7CisKKy8q
IFRoZSB0eXBlIG9mIHRoZSBjYWxsYmFjayBhcmd1bWVudCB0byBiYWNrdHJhY2Vfc3ltaW5mby4g
IERBVEEgYW5kCisgICBQQyBhcmUgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gYmFja3RyYWNlX3N5
bWluZm8uICBTWU1OQU1FIGlzIHRoZQorICAgbmFtZSBvZiB0aGUgc3ltYm9sIGZvciB0aGUgY29y
cmVzcG9uZGluZyBjb2RlLiAgU1lNVkFMIGlzIHRoZQorICAgdmFsdWUgYW5kIFNZTVNJWkUgaXMg
dGhlIHNpemUgb2YgdGhlIHN5bWJvbC4gIFNZTU5BTUUgd2lsbCBiZSBOVUxMCisgICBpZiBubyBl
cnJvciBvY2N1cnJlZCBidXQgdGhlIHN5bWJvbCBjb3VsZCBub3QgYmUgZm91bmQuICAqLworCit0
eXBlZGVmIHZvaWQgKCpiYWNrdHJhY2Vfc3ltaW5mb19jYWxsYmFjaykgKHZvaWQgKmRhdGEsIHVp
bnRwdHJfdCBwYywKKwkJCQkJICAgIGNvbnN0IGNoYXIgKnN5bW5hbWUsCisJCQkJCSAgICB1aW50
cHRyX3Qgc3ltdmFsLAorCQkJCQkgICAgdWludHB0cl90IHN5bXNpemUpOworCisvKiBHaXZlbiBB
RERSLCBhbiBhZGRyZXNzIG9yIHByb2dyYW0gY291bnRlciBpbiB0aGUgY3VycmVudCBwcm9ncmFt
LAorICAgY2FsbCB0aGUgY2FsbGJhY2sgaW5mb3JtYXRpb24gd2l0aCB0aGUgc3ltYm9sIG5hbWUg
YW5kIHZhbHVlCisgICBkZXNjcmliaW5nIHRoZSBmdW5jdGlvbiBvciB2YXJpYWJsZSBpbiB3aGlj
aCBBRERSIG1heSBiZSBmb3VuZC4KKyAgIFRoaXMgd2lsbCBjYWxsIGVpdGhlciBDQUxMQkFDSyBv
ciBFUlJPUl9DQUxMQkFDSyBleGFjdGx5IG9uY2UuCisgICBUaGlzIHJldHVybnMgMSBvbiBzdWNj
ZXNzLCAwIG9uIGZhaWx1cmUuICBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzCisgICB0aGUgc3ltYm9s
IHRhYmxlIGJ1dCBkb2VzIG5vdCByZXF1aXJlIHRoZSBkZWJ1ZyBpbmZvLiAgTm90ZSB0aGF0IGlm
CisgICB0aGUgc3ltYm9sIHRhYmxlIGlzIHByZXNlbnQgYnV0IEFERFIgY291bGQgbm90IGJlIGZv
dW5kIGluIHRoZQorICAgdGFibGUsIENBTExCQUNLIHdpbGwgYmUgY2FsbGVkIHdpdGggYSBOVUxM
IFNZTU5BTUUgYXJndW1lbnQuCisgICBSZXR1cm5zIDEgb24gc3VjY2VzcywgMCBvbiBlcnJvci4g
ICovCisKK2V4dGVybiBpbnQgYmFja3RyYWNlX3N5bWluZm8gKHN0cnVjdCBiYWNrdHJhY2Vfc3Rh
dGUgKnN0YXRlLCB1aW50cHRyX3QgYWRkciwKKwkJCSAgICAgIGJhY2t0cmFjZV9zeW1pbmZvX2Nh
bGxiYWNrIGNhbGxiYWNrLAorCQkJICAgICAgYmFja3RyYWNlX2Vycm9yX2NhbGxiYWNrIGVycm9y
X2NhbGxiYWNrLAorCQkJICAgICAgdm9pZCAqZGF0YSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
fSAvKiBFbmQgZXh0ZXJuICJDIi4gICovCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBh
L2xpYmJhY2t0cmFjZS9pbmNsdWRlL2NvbmZpZy9jb25maWcuaCBiL2xpYmJhY2t0cmFjZS9pbmNs
dWRlL2NvbmZpZy9jb25maWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41
MDg2ZjRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYmFja3RyYWNlL2luY2x1ZGUvY29uZmlnL2Nv
bmZpZy5oCkBAIC0wLDAgKzEsMTM1IEBACisvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNv
bmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBm
cm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKworLyogRUxGIHNpemU6IDMyIG9y
IDY0ICovCisjZGVmaW5lIEJBQ0tUUkFDRV9FTEZfU0laRSA2NAorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgX19hdG9taWMgZnVuY3Rpb25zICovCisjZGVmaW5lIEhBVkVfQVRPTUlD
X0ZVTkNUSU9OUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlv
biBvZiBgc3RybmxlbicsIGFuZCB0byAwIGlmIHlvdQorICAgZG9uJ3QuICovCisjZGVmaW5lIEhB
VkVfREVDTF9TVFJOTEVOIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZj
bi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDEKKworLyogRGVmaW5l
IGlmIGRsX2l0ZXJhdGVfcGhkciBpcyBhdmFpbGFibGUuICovCisjZGVmaW5lIEhBVkVfRExfSVRF
UkFURV9QSERSIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGZjbnRsIGZ1bmN0
aW9uICovCisjZGVmaW5lIEhBVkVfRkNOVEwgMQorCisvKiBEZWZpbmUgaWYgZ2V0ZXhlY25hbWUg
aXMgYXZhaWxhYmxlLiAqLworLyogI3VuZGVmIEhBVkVfR0VURVhFQ05BTUUgKi8KKworLyogRGVm
aW5lIGlmIF9VbndpbmRfR2V0SVBJbmZvIGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgSEFWRV9H
RVRJUElORk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbmsuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhB
VkVfTElOS19IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4g
aGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFW
RV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+
IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBI
QVZFX1NUUklOR1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5n
Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIF9fc3luYyBmdW5jdGlvbnMgKi8KKyNkZWZpbmUgSEFWRV9T
WU5DX0ZVTkNUSU9OUyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21t
YW4uaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19UWVBFU19I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorCisvKiBEZWZpbmUgdG8gdGhlIHN1Yi1k
aXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLgor
ICAgKi8KKyNkZWZpbmUgTFRfT0JKRElSICIubGlicy8iCisKKy8qIERlZmluZSB0byB0aGUgYWRk
cmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAq
LworI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiIgorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwg
bmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfTkFNRSAicGFja2FnZS11
bnVzZWQiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMg
cGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgInBhY2thZ2UtdW51c2VkIHZlcnNp
b24tdW51c2VkIgorCisvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0
aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibGliYmFja3RyYWNlIgor
CisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmlu
ZSBQQUNLQUdFX1VSTCAiIgorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNr
YWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gInZlcnNpb24tdW51c2VkIgorCisvKiBU
aGUgc2l6ZSBvZiBgY2hhcicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qICN1bmRlZiBT
SVpFT0ZfQ0hBUiAqLworCisvKiBUaGUgc2l6ZSBvZiBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6
ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9JTlQgKi8KKworLyogVGhlIHNpemUgb2YgYGxvbmcn
LCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisvKiAjdW5kZWYgU0laRU9GX0xPTkcgKi8KKwor
LyogVGhlIHNpemUgb2YgYHNob3J0JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogI3Vu
ZGVmIFNJWkVPRl9TSE9SVCAqLworCisvKiBUaGUgc2l6ZSBvZiBgdm9pZCAqJywgYXMgY29tcHV0
ZWQgYnkgc2l6ZW9mLiAqLworLyogI3VuZGVmIFNJWkVPRl9WT0lEX1AgKi8KKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjZGVmaW5lIFNU
RENfSEVBREVSUyAxCisKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEFJWCAzLCBJbnRlcml4LiAg
Ki8KKyNpZm5kZWYgX0FMTF9TT1VSQ0UKKyMgZGVmaW5lIF9BTExfU09VUkNFIDEKKyNlbmRpZgor
LyogRW5hYmxlIEdOVSBleHRlbnNpb25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLwor
I2lmbmRlZiBfR05VX1NPVVJDRQorIyBkZWZpbmUgX0dOVV9TT1VSQ0UgMQorI2VuZGlmCisvKiBF
bmFibGUgdGhyZWFkaW5nIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9QT1NJ
WF9QVEhSRUFEX1NFTUFOVElDUworIyBkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEK
KyNlbmRpZgorLyogRW5hYmxlIGV4dGVuc2lvbnMgb24gSFAgTm9uU3RvcC4gICovCisjaWZuZGVm
IF9UQU5ERU1fU09VUkNFCisjIGRlZmluZSBfVEFOREVNX1NPVVJDRSAxCisjZW5kaWYKKy8qIEVu
YWJsZSBnZW5lcmFsIGV4dGVuc2lvbnMgb24gU29sYXJpcy4gICovCisjaWZuZGVmIF9fRVhURU5T
SU9OU19fCisjIGRlZmluZSBfX0VYVEVOU0lPTlNfXyAxCisjZW5kaWYKKworCisvKiBEZWZpbmUg
dG8gMSBpZiBvbiBNSU5JWC4gKi8KKy8qICN1bmRlZiBfTUlOSVggKi8KKworLyogRGVmaW5lIHRv
IDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0
IHdpdGgKKyAgIHRoaXMgZGVmaW5lZC4gKi8KKy8qICN1bmRlZiBfUE9TSVhfMV9TT1VSQ0UgKi8K
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IG5lZWQgdG8gaW4gb3JkZXIgZm9yIGBzdGF0JyBhbmQg
b3RoZXIgdGhpbmdzIHRvIHdvcmsuICovCisvKiAjdW5kZWYgX1BPU0lYX1NPVVJDRSAqLwotLSAK
Mi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:20:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:20:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVYn-00072p-K9; Thu, 26 Sep 2019 15:20:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVYm-000725-BS
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:20:00 +0000
X-Inumbo-ID: 1930d95e-e071-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 1930d95e-e071-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 15:19:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C40E5F2023;
 Thu, 26 Sep 2019 17:19:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ob0Jci_V30-g; Thu, 26 Sep 2019 17:19:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 8987BF2004;
 Thu, 26 Sep 2019 17:19:52 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:19:46 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:19:10 +0200
Message-ID: <20190926151911.11587-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH v2 4/5] Port libffi library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwb3J0IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGZmaS5oIGFuZCBmZmljb25maWcuaCBo
ZWFkZXJzLiBBbm90aGVyCm9wdGlvbiB3b3VsZCBoYXZlIGJlZW4gdG8gZ2VuZXJhdGUgdGhlbSBk
dXJpbmcgdGhlIGJ1aWxkLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFy
YWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgpTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29z
dGluLmx1cHVAY3MucHViLnJvPgotLS0KIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAg
ICB8ICAxNCArLQogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgIHwgIDI4ICsrCiBs
aWJmZmkvZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgfCAgMjEgKysKIGxpYmZmaS9pbmNsdWRl
L2NvbmZpZy9mZmljb25maWcuaCB8IDIwNiArKysrKysrKysrKysKIGxpYmZmaS9pbmNsdWRlL2Zm
aS5oICAgICAgICAgICAgICB8IDUwOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGxp
YmZmaS9pbmNsdWRlL2ZmaXRhcmdldC5oICAgICAgICB8IDE0MSArKysrKysrKysKIDYgZmlsZXMg
Y2hhbmdlZCwgOTE1IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbGliZmZpL2V4cG9ydHN5bXMudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJmZmkvaW5j
bHVkZS9jb25maWcvZmZpY29uZmlnLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJmZmkvaW5jbHVk
ZS9mZmkuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9pbmNsdWRlL2ZmaXRhcmdldC5oCgpk
aWZmIC0tZ2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCmluZGV4IGVhNDExYjAuLjVhYWNhN2Mg
MTAwNjQ0Ci0tLSBhL0NvbmZpZy51aworKysgYi9Db25maWcudWsKQEAgLTEsMjMgKzEsMjkgQEAK
IG1lbnVjb25maWcgTElCR0NDCiAJYm9vbCAiZ2NjIC0gR05VIENvbXBpbGVyIENvbGxlY3Rpb24g
bGlicmFyaWVzIgogCWRlZmF1bHQgbgotCXNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQwog
CXNlbGVjdCBMSUJVS0RFQlVHCiAJc2VsZWN0IExJQlVLQUxMT0MKKwlzZWxlY3QgTElCTkVXTElC
QworCXNlbGVjdCBMSUJVS01NQVAKKwlzZWxlY3QgVUtTWVNJTkZPCiAKIGlmIExJQkdDQwogCiBj
b25maWcgTElCQkFDS1RSQUNFCiAJYm9vbCAibGliYmFja3RyYWNlIGxpYnJhcnkiCiAJZGVmYXVs
dCBuCi0Jc2VsZWN0IExJQk5FV0xJQkMKIAlzZWxlY3QgTElCQ09NUElMRVJfUlQKIAlzZWxlY3Qg
TElCVU5XSU5ECiAJc2VsZWN0IExJQkNYWAogCXNlbGVjdCBMSUJDWFhBQkkKLQlzZWxlY3QgTElC
VUtNTUFQCi0Jc2VsZWN0IFVLU1lTSU5GTwogaWYgTElCQkFDS1RSQUNFCiBlbmRpZgogCitjb25m
aWcgTElCRkZJCisgICAgICAgYm9vbCAibGliZmZpIC0gQSBQb3J0YWJsZSBGb3JlaWduIEZ1bmN0
aW9uIEludGVyZmFjZSBMaWJyYXJ5IgorICAgICAgIGRlZmF1bHQgbgorICAgICAgIHNlbGVjdCBM
SUJQVEhSRUFEX0VNQkVEREVECitpZiBMSUJGRkkKK2VuZGlmCisKIGVuZGlmCmRpZmYgLS1naXQg
YS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IDJlNzYzZjkuLmNlODZjZmIgMTAwNjQ0
Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC00MSw2ICs0MSw3IEBACiAj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJnY2MsJChD
T05GSUdfTElCR0NDKSkpCiAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmJhY2t0cmFjZSwkKENP
TkZJR19MSUJCQUNLVFJBQ0UpKSkKKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZmZpLCQoQ09O
RklHX0xJQkZGSSkpKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBPcmlnaW5hbCBzb3Vy
Y2VzCkBAIC01NSw2ICs1Niw3IEBAICQoZXZhbCAkKGNhbGwgZmV0Y2gsbGliZ2NjLCQoTElCR0ND
X1VSTCkpKQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIExJQkdDQ19FWFRSQUNURUQgPSAkKExJ
QkdDQ19PUklHSU4pL2djYy0kKExJQkdDQ19WRVJTSU9OKQogTElCQkFDS1RSQUNFX0VYVFJBQ1RF
RCA9ICQoTElCR0NDX0VYVFJBQ1RFRCkvbGliYmFja3RyYWNlCitMSUJGRklfRVhUUkFDVEVEID0g
JChMSUJHQ0NfRVhUUkFDVEVEKS9saWJmZmkKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMg
TGlicmFyeSBpbmNsdWRlcwpAQCAtNjUsNiArNjcsOSBAQCBDWFhJTkNMVURFUy0kKENPTkZJR19M
SUJHQ0MpICs9IC1JJChMSUJHQ0NfQkFTRSkvaW5jbHVkZQogQ0lOQ0xVREVTLSQoQ09ORklHX0xJ
QkJBQ0tUUkFDRSkgICArPSAtSSQoTElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlCiBD
WFhJTkNMVURFUy0kKENPTkZJR19MSUJCQUNLVFJBQ0UpICs9IC1JJChMSUJHQ0NfQkFTRSkvbGli
YmFja3RyYWNlL2luY2x1ZGUKIAorQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkZGSSkgICArPSAtSSQo
TElCR0NDX0JBU0UpL2xpYmZmaS9pbmNsdWRlCitDWFhJTkNMVURFUy0kKENPTkZJR19MSUJGRkkp
ICs9IC1JJChMSUJHQ0NfQkFTRSkvbGliZmZpL2luY2x1ZGUKKwogIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKICMgbGliYmFja3RyYWNlIGNvZGUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC05
MiwzICs5NywyNiBAQCBMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJB
Q1RFRCkvbW1hcC5jCiAKIExJQkJBQ0tUUkFDRV9FWFBPUlRTID0gJChMSUJHQ0NfQkFTRSkvbGli
YmFja3RyYWNlL2V4cG9ydHN5bXMudWsKIAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGli
ZmZpIGNvZGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJGRklfQ09NTU9OX0NJTkNMVURF
Uy15ID0gLUkkKExJQkdDQ19CQVNFKS9saWJmZmkvaW5jbHVkZSBcCisgICAgICAgLUkkKExJQkdD
Q19FWFRSQUNURUQpL2luY2x1ZGUgLUkkKExJQkZGSV9FWFRSQUNURUQpL2luY2x1ZGUgXAorICAg
ICAgIC1JJChMSUJHQ0NfQkFTRSkvbGliZmZpL2luY2x1ZGUvY29uZmlnCitMSUJGRklfQ09NTU9O
X0NJTkNMVURFUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0gLUkkKExJQkZGSV9FWFRSQUNURUQp
L3NyYy94ODYKK0xJQkZGSV9BU0lOQ0xVREVTLXkgPSAkKExJQkZGSV9DT01NT05fQ0lOQ0xVREVT
LXkpCitMSUJGRklfQ0lOQ0xVREVTLXkgID0gJChMSUJGRklfQ09NTU9OX0NJTkNMVURFUy15KQor
CitMSUJGRklfQ0ZMQUdTLXkgKz0gLURIQVZFX0NPTkZJR19IIC1mZXhjZXB0aW9ucyAtV2FsbCBc
CisJLVduby1pbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbiAtV25vLXNpZ24tY29tcGFyZSBc
CisJLVduby11bnVzZWQtcGFyYW1ldGVyIC1Xbm8tZW1wdHktYm9keSAtV25vLWltcGxpY2l0LWZh
bGx0aHJvdWdoCisKK0xJQkZGSV9TUkNTLXkgKz0gJChMSUJGRklfRVhUUkFDVEVEKS9zcmMvY2xv
c3VyZXMuYworTElCRkZJX1NSQ1MteSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy9qYXZhX3Jh
d19hcGkuYworTElCRkZJX1NSQ1MteSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy9wcmVwX2Np
Zi5jCitMSUJGRklfU1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3Jhd19hcGkuYwor
TElCRkZJX1NSQ1MteSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy90eXBlcy5jCitMSUJGRklf
U1JDUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0gJChMSUJGRklfRVhUUkFDVEVEKS9zcmMveDg2
L2ZmaTY0LmMKK0xJQkZGSV9TUkNTLSQoQ09ORklHX0FSQ0hfWDg2XzY0KSArPSAkKExJQkZGSV9F
WFRSQUNURUQpL3NyYy94ODYvdW5peDY0LlMKKworTElCRkZJX0VYUE9SVFMgPSAkKExJQkdDQ19C
QVNFKS9saWJmZmkvZXhwb3J0c3ltcy51awpkaWZmIC0tZ2l0IGEvbGliZmZpL2V4cG9ydHN5bXMu
dWsgYi9saWJmZmkvZXhwb3J0c3ltcy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5jNzY0MGE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZmZpL2V4cG9ydHN5bXMudWsKQEAg
LTAsMCArMSwyMSBAQAorZmZpX2NhbGwKK2ZmaV9jYWxsX2dvCitmZmlfcHJlcF9jaWYKK2ZmaV9w
cmVwX2NpZl92YXIKK2ZmaV9wcmVwX2dvX2Nsb3N1cmUKK2ZmaV90eXBlX2NvbXBsZXhfZG91Ymxl
CitmZmlfdHlwZV9jb21wbGV4X2Zsb2F0CitmZmlfdHlwZV9jb21wbGV4X2xvbmdkb3VibGUKK2Zm
aV90eXBlX2RvdWJsZQorZmZpX3R5cGVfZmxvYXQKK2ZmaV90eXBlX2xvbmdkb3VibGUKK2ZmaV90
eXBlX3BvaW50ZXIKK2ZmaV90eXBlX3NpbnQxNgorZmZpX3R5cGVfc2ludDMyCitmZmlfdHlwZV9z
aW50NjQKK2ZmaV90eXBlX3NpbnQ4CitmZmlfdHlwZV91aW50MTYKK2ZmaV90eXBlX3VpbnQzMgor
ZmZpX3R5cGVfdWludDY0CitmZmlfdHlwZV91aW50OAorZmZpX3R5cGVfdm9pZApkaWZmIC0tZ2l0
IGEvbGliZmZpL2luY2x1ZGUvY29uZmlnL2ZmaWNvbmZpZy5oIGIvbGliZmZpL2luY2x1ZGUvY29u
ZmlnL2ZmaWNvbmZpZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmM2Yx
MmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJmZmkvaW5jbHVkZS9jb25maWcvZmZpY29uZmlnLmgK
QEAgLTAsMCArMSwyMDYgQEAKKy8qIGZmaWNvbmZpZy5oLiAgR2VuZXJhdGVkIGZyb20gZmZpY29u
ZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8KKy8qIGZmaWNvbmZpZy5oLmluLiAgR2VuZXJhdGVk
IGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLworCisvKiBEZWZpbmUgaWYgYnVp
bGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovCisvKiAjdW5kZWYgQUNf
QVBQTEVfVU5JVkVSU0FMX0JVSUxEICovCisKKy8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcn
LCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVAKKyAgIHN5c3RlbXMu
IFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGBhbGxvY2EuYycgc3VwcG9ydCBvbiB0aG9z
ZSBzeXN0ZW1zLgorICAgKi8KKy8qICN1bmRlZiBDUkFZX1NUQUNLU0VHX0VORCAqLworCisvKiBE
ZWZpbmUgdG8gMSBpZiB1c2luZyBgYWxsb2NhLmMnLiAqLworLyogI3VuZGVmIENfQUxMT0NBICov
CisKKy8qIERlZmluZSB0byB0aGUgZmxhZ3MgbmVlZGVkIGZvciB0aGUgLnNlY3Rpb24gLmVoX2Zy
YW1lIGRpcmVjdGl2ZS4gKi8KKyNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgImEiCisKKy8qIERlZmlu
ZSB0aGlzIGlmIHlvdSB3YW50IGV4dHJhIGRlYnVnZ2luZy4gKi8KKy8qICN1bmRlZiBGRklfREVC
VUcgKi8KKworLyogQ2Fubm90IHVzZSBQUk9UX0VYRUMgb24gdGhpcyB0YXJnZXQsIHNvLCB3ZSBy
ZXZlcnQgdG8gYWx0ZXJuYXRpdmUgbWVhbnMgKi8KKy8qICN1bmRlZiBGRklfRVhFQ19UUkFNUE9M
SU5FX1RBQkxFICovCisKKy8qIERlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBwYXgg
ZW11bGF0ZWQgdHJhbXBvbGluZXMgKi8KKy8qICN1bmRlZiBGRklfTU1BUF9FWEVDX0VNVVRSQU1Q
X1BBWCAqLworCisvKiBDYW5ub3QgdXNlIG1hbGxvYyBvbiB0aGlzIHRhcmdldCwgc28sIHdlIHJl
dmVydCB0byBhbHRlcm5hdGl2ZSBtZWFucyAqLworLyogI3VuZGVmIEZGSV9NTUFQX0VYRUNfV1JJ
VCAqLworCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgdGhl
IHJhdyBBUEkuICovCisvKiAjdW5kZWYgRkZJX05PX1JBV19BUEkgKi8KKworLyogRGVmaW5lIHRo
aXMgaWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIGFnZ3JlZ2F0ZSB0eXBlcy4gKi8KKy8q
ICN1bmRlZiBGRklfTk9fU1RSVUNUUyAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBg
YWxsb2NhJywgYXMgYSBmdW5jdGlvbiBvciBtYWNyby4gKi8KKyNkZWZpbmUgSEFWRV9BTExPQ0Eg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSA8YWxsb2NhLmg+IGFuZCBpdCBzaG91bGQg
YmUgdXNlZCAobm90IG9uIFVsdHJpeCkuCisgICAqLworI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEK
KworLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5jZmlfKiBkaXJlY3RpdmVz
LiAqLworI2RlZmluZSBIQVZFX0FTX0NGSV9QU0VVRE9fT1AgMQorCisvKiBEZWZpbmUgaWYgeW91
ciBhc3NlbWJsZXIgc3VwcG9ydHMgLnJlZ2lzdGVyLiAqLworLyogI3VuZGVmIEhBVkVfQVNfUkVH
SVNURVJfUFNFVURPX09QICovCisKKy8qIERlZmluZSBpZiB0aGUgY29tcGlsZXIgdXNlcyB6YXJj
aCBmZWF0dXJlcy4gKi8KKy8qICN1bmRlZiBIQVZFX0FTX1MzOTBfWkFSQ0ggKi8KKworLyogRGVm
aW5lIGlmIHlvdXIgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgUEMgcmVs
YXRpdmUgcmVsb2NzLgorICAgKi8KKy8qICN1bmRlZiBIQVZFX0FTX1NQQVJDX1VBX1BDUkVMICov
CisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0
eXBlLiAqLworI2RlZmluZSBIQVZFX0FTX1g4Nl82NF9VTldJTkRfU0VDVElPTl9UWVBFIDEKKwor
LyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFBDIHJlbGF0aXZlIHJlbG9jcy4g
Ki8KKyNkZWZpbmUgSEFWRV9BU19YODZfUENSRUwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0RMRkNOX0gg
MQorCisvKiBEZWZpbmUgaWYgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiaGlkZGVuIikpKSBp
cyBzdXBwb3J0ZWQuICovCisjZGVmaW5lIEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRF
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIg
ZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDEKKworLyogRGVmaW5lIGlmIHlvdSBo
YXZlIHRoZSBsb25nIGRvdWJsZSB0eXBlIGFuZCBpdCBpcyBiaWdnZXIgdGhhbiBhIGRvdWJsZSAq
LworI2RlZmluZSBIQVZFX0xPTkdfRE9VQkxFIDEKKworLyogRGVmaW5lIGlmIHlvdSBzdXBwb3J0
IG1vcmUgdGhhbiBvbmUgc2l6ZSBvZiB0aGUgbG9uZyBkb3VibGUgdHlwZSAqLworLyogI3VuZGVm
IEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYG1lbWNweScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTUVNQ1BZIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YG1rb3N0ZW1wJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9NS09TVEVNUCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbW1hcCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfTU1BUCAxCisKKy8qIERlZmluZSBpZiBtbWFwIHdpdGggTUFQX0FOT04oWU1PVVMpIHdvcmtz
LiAqLworI2RlZmluZSBIQVZFX01NQVBfQU5PTiAxCisKKy8qIERlZmluZSBpZiBtbWFwIG9mIC9k
ZXYvemVybyB3b3Jrcy4gKi8KKyNkZWZpbmUgSEFWRV9NTUFQX0RFVl9aRVJPIDEKKworLyogRGVm
aW5lIGlmIHJlYWQtb25seSBtbWFwIG9mIGEgcGxhaW4gZmlsZSB3b3Jrcy4gKi8KKyNkZWZpbmUg
SEFWRV9NTUFQX0ZJTEUgMQorCisvKiBEZWZpbmUgaWYgLmVoX2ZyYW1lIHNlY3Rpb25zIHNob3Vs
ZCBiZSByZWFkLW9ubHkuICovCisjZGVmaW5lIEhBVkVfUk9fRUhfRlJBTUUgMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZp
bmUgSEFWRV9TVERJTlRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3Rk
bGliLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NURExJQl9IIDEKKworLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI2Rl
ZmluZSBIQVZFX1NUUklOR1NfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NUUklOR19IIDEKKworLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW1hbi5oPiBoZWFkZXIgZmlsZS4gKi8K
KyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVF9I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVy
IGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQorCisvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9V
TklTVERfSCAxCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0
b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI2RlZmluZSBMVF9PQkpE
SVIgIi5saWJzLyIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3Qg
YWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci4gKi8KKy8qICN1bmRlZiBOT19NSU5VU19DX01JTlVT
X08gKi8KKworLyogTmFtZSBvZiBwYWNrYWdlICovCisjZGVmaW5lIFBBQ0tBR0UgImxpYmZmaSIK
KworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBh
Y2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICJodHRw
Oi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXMiCisKKy8qIERlZmluZSB0byB0aGUg
ZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJsaWJm
ZmkiCisKKy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFj
a2FnZS4gKi8KKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgImxpYmZmaSAzLjk5OTk5IgorCisvKiBE
ZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCisj
ZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibGliZmZpIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUg
cGFnZSBmb3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1VSTCAiIgorCisvKiBE
ZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdF
X1ZFUlNJT04gIjMuOTk5OTkiCisKKy8qIFRoZSBzaXplIG9mIGBkb3VibGUnLCBhcyBjb21wdXRl
ZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVPRl9ET1VCTEUgOAorCisvKiBUaGUgc2l6ZSBv
ZiBgbG9uZyBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjZGVmaW5lIFNJWkVP
Rl9MT05HX0RPVUJMRSAxNgorCisvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQg
Ynkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfU0laRV9UIDgKKworLyogSWYgdXNpbmcgdGhl
IEMgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhLCBkZWZpbmUgaWYgeW91IGtub3cgdGhlCisgICBk
aXJlY3Rpb24gb2Ygc3RhY2sgZ3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdp
bGwgYmUKKyAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW50aW1lLgorCVNUQUNLX0RJUkVD
VElPTiA+IDAgPT4gZ3Jvd3MgdG93YXJkIGhpZ2hlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJ
T04gPCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMKKwlTVEFDS19ESVJFQ1RJT04g
PSAwID0+IGRpcmVjdGlvbiBvZiBncm93dGggdW5rbm93biAqLworLyogI3VuZGVmIFNUQUNLX0RJ
UkVDVElPTiAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRl
ciBmaWxlcy4gKi8KKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKworLyogRGVmaW5lIHRoaXMgaWYg
eW91IGFyZSB1c2luZyBQdXJpZnkgYW5kIHdhbnQgdG8gc3VwcHJlc3Mgc3B1cmlvdXMgbWVzc2Fn
ZXMuCisgICAqLworLyogI3VuZGVmIFVTSU5HX1BVUklGWSAqLworCisvKiBWZXJzaW9uIG51bWJl
ciBvZiBwYWNrYWdlICovCisjZGVmaW5lIFZFUlNJT04gIjMuOTk5OTkiCisKKy8qIERlZmluZSBX
T1JEU19CSUdFTkRJQU4gdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0
aGUgbW9zdAorICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BB
UkMsIHVubGlrZSBJbnRlbCkuICovCisjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJ
TEQKKyMgaWYgZGVmaW5lZCBfX0JJR19FTkRJQU5fXworIyAgZGVmaW5lIFdPUkRTX0JJR0VORElB
TiAxCisjIGVuZGlmCisjZWxzZQorIyBpZm5kZWYgV09SRFNfQklHRU5ESUFOCisvKiAjICB1bmRl
ZiBXT1JEU19CSUdFTkRJQU4gKi8KKyMgZW5kaWYKKyNlbmRpZgorCisKKyNpZmRlZiBIQVZFX0hJ
RERFTl9WSVNJQklMSVRZX0FUVFJJQlVURQorI2lmZGVmIExJQkZGSV9BU00KKyNkZWZpbmUgRkZJ
X0hJRERFTihuYW1lKSAuaGlkZGVuIG5hbWUKKyNlbHNlCisjZGVmaW5lIEZGSV9ISURERU4gX19h
dHRyaWJ1dGVfXyAoKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCisjZW5kaWYKKyNlbHNlCisjaWZk
ZWYgTElCRkZJX0FTTQorI2RlZmluZSBGRklfSElEREVOKG5hbWUpCisjZWxzZQorI2RlZmluZSBG
RklfSElEREVOCisjZW5kaWYKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJmZmkvaW5jbHVkZS9m
ZmkuaCBiL2xpYmZmaS9pbmNsdWRlL2ZmaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmRlNzcxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJmZmkvaW5jbHVkZS9mZmkuaApA
QCAtMCwwICsxLDUwOSBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLUMtKi0KKyAgIGxpYmZmaSAzLjk5OTk5IC0g
Q29weXJpZ2h0IChjKSAyMDExLCAyMDE0IEFudGhvbnkgR3JlZW4KKyAgICAgICAgICAgICAgICAg
ICAgLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAwMywgMjAwNywgMjAwOCBSZWQgSGF0LCBJbmMuCisK
KyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg
cGVyc29uCisgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0
ZWQgZG9jdW1lbnRhdGlvbgorICAgZmlsZXMgKHRoZSBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGlu
IHRoZSBTb2Z0d2FyZSB3aXRob3V0CisgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg
bGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwKKyAgIG1vZGlmeSwgbWVyZ2UsIHB1
Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcworICAgb2Yg
dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUg
aXMKKyAgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np
b24gbm90aWNlIHNoYWxsIGJlCisgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50
aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1Mg
T1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBP
RgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
TkQKKyAgIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9S
IENPUFlSSUdIVAorICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP
UiBPVEhFUiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg
VE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyAgIE9VVCBPRiBPUiBJTiBDT05ORUNU
SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAgIERFQUxJTkdTIElO
IFRIRSBTT0ZUV0FSRS4KKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgVGhlIGJhc2ljIEFQSSBpcyBkZXNjcmliZWQgaW4gdGhlIFJFQURNRSBmaWxlLgorCisgICBU
aGUgcmF3IEFQSSBpcyBkZXNpZ25lZCB0byBieXBhc3Mgc29tZSBvZiB0aGUgYXJndW1lbnQgcGFj
a2luZworICAgYW5kIHVucGFja2luZyBvbiBhcmNoaXRlY3R1cmVzIGZvciB3aGljaCBpdCBjYW4g
YmUgYXZvaWRlZC4KKworICAgVGhlIGNsb3N1cmUgQVBJIGFsbG93cyBpbnRlcnByZXRlZCBmdW5j
dGlvbnMgdG8gYmUgcGFja2FnZWQgdXAKKyAgIGluc2lkZSBhIEMgZnVuY3Rpb24gcG9pbnRlciwg
c28gdGhhdCB0aGV5IGNhbiBiZSBjYWxsZWQgYXMgQyBmdW5jdGlvbnMsCisgICB3aXRoIG5vIHVu
ZGVyc3RhbmRpbmcgb24gdGhlIGNsaWVudCBzaWRlIHRoYXQgdGhleSBhcmUgaW50ZXJwcmV0ZWQu
CisgICBJdCBjYW4gYWxzbyBiZSB1c2VkIGluIG90aGVyIGNhc2VzIGluIHdoaWNoIGl0IGlzIG5l
Y2Vzc2FyeSB0byBwYWNrYWdlCisgICB1cCBhIHVzZXIgc3BlY2lmaWVkIHBhcmFtZXRlciBhbmQg
YSBmdW5jdGlvbiBwb2ludGVyIGFzIGEgc2luZ2xlCisgICBmdW5jdGlvbiBwb2ludGVyLgorCisg
ICBUaGUgY2xvc3VyZSBBUEkgbXVzdCBiZSBpbXBsZW1lbnRlZCBpbiBvcmRlciB0byBnZXQgaXRz
IGZ1bmN0aW9uYWxpdHksCisgICBlLmcuIGZvciB1c2UgYnkgZ2lqLiAgUm91dGluZXMgYXJlIHBy
b3ZpZGVkIHRvIGVtdWxhdGUgdGhlIHJhdyBBUEkKKyAgIGlmIHRoZSB1bmRlcmx5aW5nIHBsYXRm
b3JtIGRvZXNuJ3QgYWxsb3cgZmFzdGVyIGltcGxlbWVudGF0aW9uLgorCisgICBNb3JlIGRldGFp
bHMgb24gdGhlIHJhdyBhbmQgY2xvdXJlIEFQSSBjYW4gYmUgZm91bmQgaW46CisKKyAgIGh0dHA6
Ly9nY2MuZ251Lm9yZy9tbC9qYXZhLzE5OTktcTMvbXNnMDAxMzguaHRtbAorCisgICBhbmQKKwor
ICAgaHR0cDovL2djYy5nbnUub3JnL21sL2phdmEvMTk5OS1xMy9tc2cwMDE3NC5odG1sCisgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLworCisjaWZuZGVmIExJQkZGSV9ICisjZGVmaW5lIExJQkZGSV9ICisKKyNp
ZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyogU3BlY2lmeSB3aGlj
aCBhcmNoaXRlY3R1cmUgbGliZmZpIGlzIGNvbmZpZ3VyZWQgZm9yLiAqLworI2lmbmRlZiBYODZf
NjQKKyNkZWZpbmUgWDg2XzY0CisjZW5kaWYKKworLyogLS0tLSBTeXN0ZW0gY29uZmlndXJhdGlv
biBpbmZvcm1hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lu
Y2x1ZGUgPGZmaXRhcmdldC5oPgorCisjaWZuZGVmIExJQkZGSV9BU00KKworI2lmIGRlZmluZWQo
X01TQ19WRVIpICYmICFkZWZpbmVkKF9fY2xhbmdfXykKKyNkZWZpbmUgX19hdHRyaWJ1dGVfXyhY
KQorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKwor
LyogTE9OR19MT05HX01BWCBpcyBub3QgYWx3YXlzIGRlZmluZWQgKG5vdCBpZiBTVFJJQ1RfQU5T
SSwgZm9yIGV4YW1wbGUpLgorICAgQnV0IHdlIGNhbiBmaW5kIGl0IGVpdGhlciB1bmRlciB0aGUg
Y29ycmVjdCBBTlNJIG5hbWUsIG9yIHVuZGVyIEdOVQorICAgQydzIGludGVybmFsIG5hbWUuICAq
LworCisjZGVmaW5lIEZGSV82NF9CSVRfTUFYIDkyMjMzNzIwMzY4NTQ3NzU4MDcKKworI2lmZGVm
IExPTkdfTE9OR19NQVgKKyMgZGVmaW5lIEZGSV9MT05HX0xPTkdfTUFYIExPTkdfTE9OR19NQVgK
KyNlbHNlCisjIGlmZGVmIExMT05HX01BWAorIyAgZGVmaW5lIEZGSV9MT05HX0xPTkdfTUFYIExM
T05HX01BWAorIyAgaWZkZWYgX0FJWDUyIC8qIG9yIG5ld2VyIGhhcyBDOTkgTExPTkdfTUFYICov
CisjICAgdW5kZWYgRkZJXzY0X0JJVF9NQVgKKyMgICBkZWZpbmUgRkZJXzY0X0JJVF9NQVggOTIy
MzM3MjAzNjg1NDc3NTgwN0xMCisjICBlbmRpZiAvKiBfQUlYNTIgb3IgbmV3ZXIgKi8KKyMgZWxz
ZQorIyAgaWZkZWYgX19HTlVDX18KKyMgICBkZWZpbmUgRkZJX0xPTkdfTE9OR19NQVggX19MT05H
X0xPTkdfTUFYX18KKyMgIGVuZGlmCisjICBpZmRlZiBfQUlYIC8qIEFJWCA1LjEgYW5kIGVhcmxp
ZXIgaGF2ZSBMT05HTE9OR19NQVggKi8KKyMgICBpZm5kZWYgX19QUEM2NF9fCisjICAgIGlmIGRl
ZmluZWQgKF9fSUJNQ19fKSB8fCBkZWZpbmVkIChfX0lCTUNQUF9fKQorIyAgICAgZGVmaW5lIEZG
SV9MT05HX0xPTkdfTUFYIExPTkdMT05HX01BWAorIyAgICBlbmRpZgorIyAgIGVuZGlmIC8qIF9f
UFBDNjRfXyAqLworIyAgIHVuZGVmICBGRklfNjRfQklUX01BWAorIyAgIGRlZmluZSBGRklfNjRf
QklUX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYK
KworLyogVGhlIGNsb3N1cmUgY29kZSBhc3N1bWVzIHRoYXQgdGhpcyB3b3JrcyBvbiBwb2ludGVy
cywgaS5lLiBhIHNpemVfdAkqLworLyogY2FuIGhvbGQgYSBwb2ludGVyLgkJCQkJCQkqLworCit0
eXBlZGVmIHN0cnVjdCBfZmZpX3R5cGUKK3sKKyAgc2l6ZV90IHNpemU7CisgIHVuc2lnbmVkIHNo
b3J0IGFsaWdubWVudDsKKyAgdW5zaWduZWQgc2hvcnQgdHlwZTsKKyAgc3RydWN0IF9mZmlfdHlw
ZSAqKmVsZW1lbnRzOworfSBmZmlfdHlwZTsKKworI2lmbmRlZiBMSUJGRklfSElERV9CQVNJQ19U
WVBFUworI2lmIFNDSEFSX01BWCA9PSAxMjcKKyMgZGVmaW5lIGZmaV90eXBlX3VjaGFyICAgICAg
ICAgICAgICAgIGZmaV90eXBlX3VpbnQ4CisjIGRlZmluZSBmZmlfdHlwZV9zY2hhciAgICAgICAg
ICAgICAgICBmZmlfdHlwZV9zaW50OAorI2Vsc2UKKyAvLyNlcnJvciAiY2hhciBzaXplIG5vdCBz
dXBwb3J0ZWQiCisjZW5kaWYKKworI2lmIFNIUlRfTUFYID09IDMyNzY3CisjIGRlZmluZSBmZmlf
dHlwZV91c2hvcnQgICAgICAgZmZpX3R5cGVfdWludDE2CisjIGRlZmluZSBmZmlfdHlwZV9zc2hv
cnQgICAgICAgZmZpX3R5cGVfc2ludDE2CisjZWxpZiBTSFJUX01BWCA9PSAyMTQ3NDgzNjQ3Cisj
IGRlZmluZSBmZmlfdHlwZV91c2hvcnQgICAgICAgZmZpX3R5cGVfdWludDMyCisjIGRlZmluZSBm
ZmlfdHlwZV9zc2hvcnQgICAgICAgZmZpX3R5cGVfc2ludDMyCisjZWxzZQorICNlcnJvciAic2hv
cnQgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKyNpZiBJTlRfTUFYID09IDMyNzY3Cisj
IGRlZmluZSBmZmlfdHlwZV91aW50ICAgICAgICAgZmZpX3R5cGVfdWludDE2CisjIGRlZmluZSBm
ZmlfdHlwZV9zaW50ICAgICAgICAgZmZpX3R5cGVfc2ludDE2CisjZWxpZiBJTlRfTUFYID09IDIx
NDc0ODM2NDcKKyMgZGVmaW5lIGZmaV90eXBlX3VpbnQgICAgICAgICBmZmlfdHlwZV91aW50MzIK
KyMgZGVmaW5lIGZmaV90eXBlX3NpbnQgICAgICAgICBmZmlfdHlwZV9zaW50MzIKKyNlbGlmIElO
VF9NQVggPT0gOTIyMzM3MjAzNjg1NDc3NTgwNworIyBkZWZpbmUgZmZpX3R5cGVfdWludCAgICAg
ICAgIGZmaV90eXBlX3VpbnQ2NAorIyBkZWZpbmUgZmZpX3R5cGVfc2ludCAgICAgICAgIGZmaV90
eXBlX3NpbnQ2NAorI2Vsc2UKKyAjZXJyb3IgImludCBzaXplIG5vdCBzdXBwb3J0ZWQiCisjZW5k
aWYKKworI2lmIExPTkdfTUFYID09IDIxNDc0ODM2NDcKKyMgaWYgRkZJX0xPTkdfTE9OR19NQVgg
IT0gRkZJXzY0X0JJVF9NQVgKKyAjZXJyb3IgIm5vIDY0LWJpdCBkYXRhIHR5cGUgc3VwcG9ydGVk
IgorIyBlbmRpZgorI2VsaWYgTE9OR19NQVggIT0gRkZJXzY0X0JJVF9NQVgKKyAjZXJyb3IgImxv
bmcgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKyNpZiBMT05HX01BWCA9PSAyMTQ3NDgz
NjQ3CisjIGRlZmluZSBmZmlfdHlwZV91bG9uZyAgICAgICAgZmZpX3R5cGVfdWludDMyCisjIGRl
ZmluZSBmZmlfdHlwZV9zbG9uZyAgICAgICAgZmZpX3R5cGVfc2ludDMyCisjZWxpZiBMT05HX01B
WCA9PSBGRklfNjRfQklUX01BWAorIyBkZWZpbmUgZmZpX3R5cGVfdWxvbmcgICAgICAgIGZmaV90
eXBlX3VpbnQ2NAorIyBkZWZpbmUgZmZpX3R5cGVfc2xvbmcgICAgICAgIGZmaV90eXBlX3NpbnQ2
NAorI2Vsc2UKKyAjZXJyb3IgImxvbmcgc2l6ZSBub3Qgc3VwcG9ydGVkIgorI2VuZGlmCisKKy8q
IE5lZWQgbWluaW1hbCBkZWNvcmF0aW9ucyBmb3IgRExMcyB0byB3b3JrcyBvbiBXaW5kb3dzLiAq
LworLyogR0NDIGhhcyBhdXRvaW1wb3J0IGFuZCBhdXRvZXhwb3J0LiAgUmVseSBvbiBMaWJ0b29s
IHRvICovCisvKiBoZWxwIE1TVkMgZXhwb3J0IGZyb20gYSBETEwsIGJ1dCBhbHdheXMgZGVjbGFy
ZSBkYXRhICAgKi8KKy8qIHRvIGJlIGltcG9ydGVkIGZvciBNU1ZDIGNsaWVudHMuICBUaGlzIGNv
c3RzIGFuIGV4dHJhICAqLworLyogaW5kaXJlY3Rpb24gZm9yIE1TVkMgY2xpZW50cyB1c2luZyB0
aGUgc3RhdGljIHZlcnNpb24gICovCisvKiBvZiB0aGUgbGlicmFyeSwgYnV0IGRvbid0IHdvcnJ5
IGFib3V0IHRoYXQuICBCZXNpZGVzLCAgKi8KKy8qIGFzIGEgd29ya2Fyb3VuZCwgdGhleSBjYW4g
ZGVmaW5lIEZGSV9CVUlMRElORyBpZiB0aGV5ICAqLworLyogKmtub3cqIHRoZXkgYXJlIGdvaW5n
IHRvIGxpbmsgd2l0aCB0aGUgc3RhdGljIGxpYnJhcnkuICovCisjaWYgZGVmaW5lZCBfTVNDX1ZF
UiAmJiAhZGVmaW5lZCBGRklfQlVJTERJTkcKKyNkZWZpbmUgRkZJX0VYVEVSTiBleHRlcm4gX19k
ZWNsc3BlYyhkbGxpbXBvcnQpCisjZWxzZQorI2RlZmluZSBGRklfRVhURVJOIGV4dGVybgorI2Vu
ZGlmCisKKy8qIFRoZXNlIGFyZSBkZWZpbmVkIGluIHR5cGVzLmMgKi8KK0ZGSV9FWFRFUk4gZmZp
X3R5cGUgZmZpX3R5cGVfdm9pZDsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfdWludDg7
CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3NpbnQ4OworRkZJX0VYVEVSTiBmZmlfdHlw
ZSBmZmlfdHlwZV91aW50MTY7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3NpbnQxNjsK
K0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfdWludDMyOworRkZJX0VYVEVSTiBmZmlfdHlw
ZSBmZmlfdHlwZV9zaW50MzI7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3VpbnQ2NDsK
K0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfc2ludDY0OworRkZJX0VYVEVSTiBmZmlfdHlw
ZSBmZmlfdHlwZV9mbG9hdDsKK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfZG91YmxlOwor
RkZJX0VYVEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9wb2ludGVyOworCisjaWYgMQorRkZJX0VYVEVS
TiBmZmlfdHlwZSBmZmlfdHlwZV9sb25nZG91YmxlOworI2Vsc2UKKyNkZWZpbmUgZmZpX3R5cGVf
bG9uZ2RvdWJsZSBmZmlfdHlwZV9kb3VibGUKKyNlbmRpZgorCisjaWZkZWYgRkZJX1RBUkdFVF9I
QVNfQ09NUExFWF9UWVBFCitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX2NvbXBsZXhfZmxv
YXQ7CitGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX2NvbXBsZXhfZG91YmxlOworI2lmIDEK
K0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlOworI2Vsc2UK
KyNkZWZpbmUgZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlIGZmaV90eXBlX2NvbXBsZXhfZG91
YmxlCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8qIExJQkZGSV9ISURFX0JBU0lDX1RZUEVTICov
CisKK3R5cGVkZWYgZW51bSB7CisgIEZGSV9PSyA9IDAsCisgIEZGSV9CQURfVFlQRURFRiwKKyAg
RkZJX0JBRF9BQkkKK30gZmZpX3N0YXR1czsKKwordHlwZWRlZiB1bnNpZ25lZCBGRklfVFlQRTsK
KwordHlwZWRlZiBzdHJ1Y3QgeworICBmZmlfYWJpIGFiaTsKKyAgdW5zaWduZWQgbmFyZ3M7Cisg
IGZmaV90eXBlICoqYXJnX3R5cGVzOworICBmZmlfdHlwZSAqcnR5cGU7CisgIHVuc2lnbmVkIGJ5
dGVzOworICB1bnNpZ25lZCBmbGFnczsKKyNpZmRlZiBGRklfRVhUUkFfQ0lGX0ZJRUxEUworICBG
RklfRVhUUkFfQ0lGX0ZJRUxEUzsKKyNlbmRpZgorfSBmZmlfY2lmOworCisjaWYgMAorLyogVXNl
ZCB0byBhZGp1c3Qgc2l6ZS9hbGlnbm1lbnQgb2YgZmZpIHR5cGVzLiAgKi8KK3ZvaWQgZmZpX3By
ZXBfdHlwZXMgKGZmaV9hYmkgYWJpKTsKKyNlbmRpZgorCisvKiBVc2VkIGludGVybmFsbHksIGJ1
dCBvdmVycmlkZGVuIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyAqLworZmZpX3N0YXR1cyBmZmlfcHJl
cF9jaWZfY29yZShmZmlfY2lmICpjaWYsCisJCQkgICAgIGZmaV9hYmkgYWJpLAorCQkJICAgICB1
bnNpZ25lZCBpbnQgaXN2YXJpYWRpYywKKwkJCSAgICAgdW5zaWduZWQgaW50IG5maXhlZGFyZ3Ms
CisJCQkgICAgIHVuc2lnbmVkIGludCBudG90YWxhcmdzLAorCQkJICAgICBmZmlfdHlwZSAqcnR5
cGUsCisJCQkgICAgIGZmaV90eXBlICoqYXR5cGVzKTsKKworLyogLS0tLSBEZWZpbml0aW9ucyBm
b3IgdGhlIHJhdyBBUEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
KworI2lmbmRlZiBGRklfU0laRU9GX0FSRworIyBpZiBMT05HX01BWCA9PSAyMTQ3NDgzNjQ3Cisj
ICBkZWZpbmUgRkZJX1NJWkVPRl9BUkcgICAgICAgIDQKKyMgZWxpZiBMT05HX01BWCA9PSBGRklf
NjRfQklUX01BWAorIyAgZGVmaW5lIEZGSV9TSVpFT0ZfQVJHICAgICAgICA4CisjIGVuZGlmCisj
ZW5kaWYKKworI2lmbmRlZiBGRklfU0laRU9GX0pBVkFfUkFXCisjICBkZWZpbmUgRkZJX1NJWkVP
Rl9KQVZBX1JBVyBGRklfU0laRU9GX0FSRworI2VuZGlmCisKK3R5cGVkZWYgdW5pb24geworICBm
Zmlfc2FyZyAgc2ludDsKKyAgZmZpX2FyZyAgIHVpbnQ7CisgIGZsb2F0CSAgICBmbHQ7CisgIGNo
YXIgICAgICBkYXRhW0ZGSV9TSVpFT0ZfQVJHXTsKKyAgdm9pZCogICAgIHB0cjsKK30gZmZpX3Jh
dzsKKworI2lmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNCAmJiBGRklfU0laRU9GX0FSRyA9PSA4
CisvKiBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBtaXBzNjQvbjMyIEFCSSAoYW5kIHBlcmhh
cHMgb3RoZXJzKSB3aGVyZQorICAgc2l6ZW9mKHZvaWQgKikgaXMgNCBhbmQgRkZJX1NJWkVPRl9B
UkcgaXMgOC4gICovCit0eXBlZGVmIHVuaW9uIHsKKyAgc2lnbmVkIGludAlzaW50OworICB1bnNp
Z25lZCBpbnQJdWludDsKKyAgZmxvYXQJCWZsdDsKKyAgY2hhcgkJZGF0YVtGRklfU0laRU9GX0pB
VkFfUkFXXTsKKyAgdm9pZCoJCXB0cjsKK30gZmZpX2phdmFfcmF3OworI2Vsc2UKK3R5cGVkZWYg
ZmZpX3JhdyBmZmlfamF2YV9yYXc7CisjZW5kaWYKKworCit2b2lkIGZmaV9yYXdfY2FsbCAoZmZp
X2NpZiAqY2lmLAorCQkgICB2b2lkICgqZm4pKHZvaWQpLAorCQkgICB2b2lkICpydmFsdWUsCisJ
CSAgIGZmaV9yYXcgKmF2YWx1ZSk7CisKK3ZvaWQgZmZpX3B0cmFycmF5X3RvX3JhdyAoZmZpX2Np
ZiAqY2lmLCB2b2lkICoqYXJncywgZmZpX3JhdyAqcmF3KTsKK3ZvaWQgZmZpX3Jhd190b19wdHJh
cnJheSAoZmZpX2NpZiAqY2lmLCBmZmlfcmF3ICpyYXcsIHZvaWQgKiphcmdzKTsKK3NpemVfdCBm
ZmlfcmF3X3NpemUgKGZmaV9jaWYgKmNpZik7CisKKy8qIFRoaXMgaXMgYW5hbG9nb3VzIHRvIHRo
ZSByYXcgQVBJLCBleGNlcHQgaXQgdXNlcyBKYXZhIHBhcmFtZXRlcgkqLworLyogcGFja2luZywg
ZXZlbiBvbiA2NC1iaXQgbWFjaGluZXMuICBJLmUuIG9uIDY0LWJpdCBtYWNoaW5lcwkJKi8KKy8q
IGxvbmdzIGFuZCBkb3VibGVzIGFyZSBmb2xsb3dlZCBieSBhbiBlbXB0eSA2NC1iaXQgd29yZC4J
CSovCisKK3ZvaWQgZmZpX2phdmFfcmF3X2NhbGwgKGZmaV9jaWYgKmNpZiwKKwkJCXZvaWQgKCpm
bikodm9pZCksCisJCQl2b2lkICpydmFsdWUsCisJCQlmZmlfamF2YV9yYXcgKmF2YWx1ZSk7CisK
K3ZvaWQgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3IChmZmlfY2lmICpjaWYsIHZvaWQgKiphcmdz
LCBmZmlfamF2YV9yYXcgKnJhdyk7Cit2b2lkIGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSAoZmZp
X2NpZiAqY2lmLCBmZmlfamF2YV9yYXcgKnJhdywgdm9pZCAqKmFyZ3MpOworc2l6ZV90IGZmaV9q
YXZhX3Jhd19zaXplIChmZmlfY2lmICpjaWYpOworCisvKiAtLS0tIERlZmluaXRpb25zIGZvciBj
bG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisj
aWYgRkZJX0NMT1NVUkVTCisKKyNpZmRlZiBfTVNDX1ZFUgorX19kZWNsc3BlYyhhbGlnbig4KSkK
KyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworI2lmIDAKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJs
ZTsKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJsZV9lbnRyeTsKKyNlbHNlCisgIGNoYXIgdHJhbXBb
RkZJX1RSQU1QT0xJTkVfU0laRV07CisjZW5kaWYKKyAgZmZpX2NpZiAgICpjaWY7CisgIHZvaWQg
ICAgICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopOworICB2b2lkICAgICAgKnVz
ZXJfZGF0YTsKKyNpZmRlZiBfX0dOVUNfXworfSBmZmlfY2xvc3VyZSBfX2F0dHJpYnV0ZV9fKChh
bGlnbmVkICg4KSkpOworI2Vsc2UKK30gZmZpX2Nsb3N1cmU7CisjIGlmZGVmIF9fc2dpCisjICBw
cmFnbWEgcGFjayAwCisjIGVuZGlmCisjZW5kaWYKKwordm9pZCAqZmZpX2Nsb3N1cmVfYWxsb2Mg
KHNpemVfdCBzaXplLCB2b2lkICoqY29kZSk7Cit2b2lkIGZmaV9jbG9zdXJlX2ZyZWUgKHZvaWQg
Kik7CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmUgKGZmaV9jbG9zdXJlKiwKKwkJICBm
ZmlfY2lmICosCisJCSAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwK
KwkJICB2b2lkICp1c2VyX2RhdGEpOworCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xv
YyAoZmZpX2Nsb3N1cmUqLAorCQkgICAgICBmZmlfY2lmICosCisJCSAgICAgIHZvaWQgKCpmdW4p
KGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwK
KwkJICAgICAgdm9pZCpjb2RlbG9jKTsKKworI2lmZGVmIF9fc2dpCisjIHByYWdtYSBwYWNrIDgK
KyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworI2lmIDAKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJs
ZTsKKyAgdm9pZCAqdHJhbXBvbGluZV90YWJsZV9lbnRyeTsKKyNlbHNlCisgIGNoYXIgdHJhbXBb
RkZJX1RSQU1QT0xJTkVfU0laRV07CisjZW5kaWYKKyAgZmZpX2NpZiAgICpjaWY7CisKKyNpZiAh
RkZJX05BVElWRV9SQVdfQVBJCisKKyAgLyogaWYgdGhpcyBpcyBlbmFibGVkLCB0aGVuIGEgcmF3
IGNsb3N1cmUgaGFzIHRoZSBzYW1lIGxheW91dCAKKyAgICAgYXMgYSByZWd1bGFyIGNsb3N1cmUu
ICBXZSB1c2UgdGhpcyB0byBpbnN0YWxsIGFuIGludGVybWVkaWF0ZSAKKyAgICAgaGFuZGxlciB0
byBkbyB0aGUgdHJhbnNhbHRpb24sIHZvaWQqKiAtPiBmZmlfcmF3Ki4gKi8KKworICB2b2lkICAg
ICAoKnRyYW5zbGF0ZV9hcmdzKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopOworICB2b2lk
ICAgICAgKnRoaXNfY2xvc3VyZTsKKworI2VuZGlmCisKKyAgdm9pZCAgICAgKCpmdW4pKGZmaV9j
aWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKTsKKyAgdm9pZCAgICAgICp1c2VyX2RhdGE7CisKK30g
ZmZpX3Jhd19jbG9zdXJlOworCit0eXBlZGVmIHN0cnVjdCB7CisjaWYgMAorICB2b2lkICp0cmFt
cG9saW5lX3RhYmxlOworICB2b2lkICp0cmFtcG9saW5lX3RhYmxlX2VudHJ5OworI2Vsc2UKKyAg
Y2hhciB0cmFtcFtGRklfVFJBTVBPTElORV9TSVpFXTsKKyNlbmRpZgorCisgIGZmaV9jaWYgICAq
Y2lmOworCisjaWYgIUZGSV9OQVRJVkVfUkFXX0FQSQorCisgIC8qIGlmIHRoaXMgaXMgZW5hYmxl
ZCwgdGhlbiBhIHJhdyBjbG9zdXJlIGhhcyB0aGUgc2FtZSBsYXlvdXQgCisgICAgIGFzIGEgcmVn
dWxhciBjbG9zdXJlLiAgV2UgdXNlIHRoaXMgdG8gaW5zdGFsbCBhbiBpbnRlcm1lZGlhdGUgCisg
ICAgIGhhbmRsZXIgdG8gZG8gdGhlIHRyYW5zYWx0aW9uLCB2b2lkKiogLT4gZmZpX3JhdyouICov
CisKKyAgdm9pZCAgICAgKCp0cmFuc2xhdGVfYXJncykoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZv
aWQqKTsKKyAgdm9pZCAgICAgICp0aGlzX2Nsb3N1cmU7CisKKyNlbmRpZgorCisgIHZvaWQgICAg
ICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKTsKKyAgdm9pZCAgICAg
ICp1c2VyX2RhdGE7CisKK30gZmZpX2phdmFfcmF3X2Nsb3N1cmU7CisKK2ZmaV9zdGF0dXMKK2Zm
aV9wcmVwX3Jhd19jbG9zdXJlIChmZmlfcmF3X2Nsb3N1cmUqLAorCQkgICAgICBmZmlfY2lmICpj
aWYsCisJCSAgICAgIHZvaWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwK
KwkJICAgICAgdm9pZCAqdXNlcl9kYXRhKTsKKworZmZpX3N0YXR1cworZmZpX3ByZXBfcmF3X2Ns
b3N1cmVfbG9jIChmZmlfcmF3X2Nsb3N1cmUqLAorCQkJICBmZmlfY2lmICpjaWYsCisJCQkgIHZv
aWQgKCpmdW4pKGZmaV9jaWYqLHZvaWQqLGZmaV9yYXcqLHZvaWQqKSwKKwkJCSAgdm9pZCAqdXNl
cl9kYXRhLAorCQkJICB2b2lkICpjb2RlbG9jKTsKKworZmZpX3N0YXR1cworZmZpX3ByZXBfamF2
YV9yYXdfY2xvc3VyZSAoZmZpX2phdmFfcmF3X2Nsb3N1cmUqLAorCQkgICAgICAgICAgIGZmaV9j
aWYgKmNpZiwKKwkJICAgICAgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2
YV9yYXcqLHZvaWQqKSwKKwkJICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpOworCitmZmlfc3Rh
dHVzCitmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyAoZmZpX2phdmFfcmF3X2Nsb3N1cmUq
LAorCQkJICAgICAgIGZmaV9jaWYgKmNpZiwKKwkJCSAgICAgICB2b2lkICgqZnVuKShmZmlfY2lm
Kix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwKKwkJCSAgICAgICB2b2lkICp1c2VyX2RhdGEs
CisJCQkgICAgICAgdm9pZCAqY29kZWxvYyk7CisKKyNlbmRpZiAvKiBGRklfQ0xPU1VSRVMgKi8K
KworI2lmIEZGSV9HT19DTE9TVVJFUworCit0eXBlZGVmIHN0cnVjdCB7CisgIHZvaWQgICAgICAq
dHJhbXA7CisgIGZmaV9jaWYgICAqY2lmOworICB2b2lkICAgICAoKmZ1bikoZmZpX2NpZiosdm9p
ZCosdm9pZCoqLHZvaWQqKTsKK30gZmZpX2dvX2Nsb3N1cmU7CisKK2ZmaV9zdGF0dXMgZmZpX3By
ZXBfZ29fY2xvc3VyZSAoZmZpX2dvX2Nsb3N1cmUqLCBmZmlfY2lmICosCisJCQkJdm9pZCAoKmZ1
bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSk7CisKK3ZvaWQgZmZpX2NhbGxfZ28gKGZm
aV9jaWYgKmNpZiwgdm9pZCAoKmZuKSh2b2lkKSwgdm9pZCAqcnZhbHVlLAorCQkgIHZvaWQgKiph
dmFsdWUsIHZvaWQgKmNsb3N1cmUpOworCisjZW5kaWYgLyogRkZJX0dPX0NMT1NVUkVTICovCisK
Ky8qIC0tLS0gUHVibGljIGludGVyZmFjZSBkZWZpbml0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2ZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmKGZmaV9jaWYg
KmNpZiwKKwkJCWZmaV9hYmkgYWJpLAorCQkJdW5zaWduZWQgaW50IG5hcmdzLAorCQkJZmZpX3R5
cGUgKnJ0eXBlLAorCQkJZmZpX3R5cGUgKiphdHlwZXMpOworCitmZmlfc3RhdHVzIGZmaV9wcmVw
X2NpZl92YXIoZmZpX2NpZiAqY2lmLAorCQkJICAgIGZmaV9hYmkgYWJpLAorCQkJICAgIHVuc2ln
bmVkIGludCBuZml4ZWRhcmdzLAorCQkJICAgIHVuc2lnbmVkIGludCBudG90YWxhcmdzLAorCQkJ
ICAgIGZmaV90eXBlICpydHlwZSwKKwkJCSAgICBmZmlfdHlwZSAqKmF0eXBlcyk7CisKK3ZvaWQg
ZmZpX2NhbGwoZmZpX2NpZiAqY2lmLAorCSAgICAgIHZvaWQgKCpmbikodm9pZCksCisJICAgICAg
dm9pZCAqcnZhbHVlLAorCSAgICAgIHZvaWQgKiphdmFsdWUpOworCisvKiBVc2VmdWwgZm9yIGVs
aW1pbmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzICovCisjZGVmaW5lIEZGSV9GTihmKSAoKHZvaWQg
KCopKHZvaWQpKWYpCisKKy8qIC0tLS0gRGVmaW5pdGlvbnMgc2hhcmVkIHdpdGggYXNzZW1ibHkg
Y29kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNlbmRpZgorCisvKiBJZiB0
aGVzZSBjaGFuZ2UsIHVwZGF0ZSBzcmMvbWlwcy9mZml0YXJnZXQuaC4gKi8KKyNkZWZpbmUgRkZJ
X1RZUEVfVk9JRCAgICAgICAwICAgIAorI2RlZmluZSBGRklfVFlQRV9JTlQgICAgICAgIDEKKyNk
ZWZpbmUgRkZJX1RZUEVfRkxPQVQgICAgICAyICAgIAorI2RlZmluZSBGRklfVFlQRV9ET1VCTEUg
ICAgIDMKKyNpZiAxCisjZGVmaW5lIEZGSV9UWVBFX0xPTkdET1VCTEUgNAorI2Vsc2UKKyNkZWZp
bmUgRkZJX1RZUEVfTE9OR0RPVUJMRSBGRklfVFlQRV9ET1VCTEUKKyNlbmRpZgorI2RlZmluZSBG
RklfVFlQRV9VSU5UOCAgICAgIDUgICAKKyNkZWZpbmUgRkZJX1RZUEVfU0lOVDggICAgICA2Cisj
ZGVmaW5lIEZGSV9UWVBFX1VJTlQxNiAgICAgNyAKKyNkZWZpbmUgRkZJX1RZUEVfU0lOVDE2ICAg
ICA4CisjZGVmaW5lIEZGSV9UWVBFX1VJTlQzMiAgICAgOQorI2RlZmluZSBGRklfVFlQRV9TSU5U
MzIgICAgIDEwCisjZGVmaW5lIEZGSV9UWVBFX1VJTlQ2NCAgICAgMTEKKyNkZWZpbmUgRkZJX1RZ
UEVfU0lOVDY0ICAgICAxMgorI2RlZmluZSBGRklfVFlQRV9TVFJVQ1QgICAgIDEzCisjZGVmaW5l
IEZGSV9UWVBFX1BPSU5URVIgICAgMTQKKyNkZWZpbmUgRkZJX1RZUEVfQ09NUExFWCAgICAxNQor
CisvKiBUaGlzIHNob3VsZCBhbHdheXMgcmVmZXIgdG8gdGhlIGxhc3QgdHlwZSBjb2RlIChmb3Ig
c2FuaXR5IGNoZWNrcykgKi8KKy8qID8/PyBJZGVhbGx5LCBhbnl3YXkuICBUaGVyZSBhcmUgYXNz
ZW1ibHkgZmlsZXMgdGhhdCBzdGlsbCBkZXBlbmQKKyAgIG9uIHRoaXMgbm90IGluY2x1ZGluZyBD
T01QTEVYLiAgKi8KKyNpZmRlZiBGRklfVEFSR0VUX0hBU19DT01QTEVYX1RZUEUKKyMgZGVmaW5l
IEZGSV9UWVBFX0xBU1QgICAgICBGRklfVFlQRV9DT01QTEVYCisjZWxzZQorIyBkZWZpbmUgRkZJ
X1RZUEVfTEFTVCAgICAgIEZGSV9UWVBFX1BPSU5URVIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1
c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmZmaS9pbmNsdWRlL2Zm
aXRhcmdldC5oIGIvbGliZmZpL2luY2x1ZGUvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uOGE3YzY4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmZmaS9pbmNs
dWRlL2ZmaXRhcmdldC5oCkBAIC0wLDAgKzEsMTQxIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSotQy0qLQorICAg
ZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDIwMTIsIDIwMTQgIEFudGhvbnkgR3JlZW4KKyAg
ICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDMsIDIwMTAgIFJlZCBIYXQsIElu
Yy4KKyAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4KKworICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciB4ODYg
YW5kIHg4Ni02NC4KKworICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBj
aGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy
ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAgIGBgU29mdHdhcmUn
JyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
ZworICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLAorICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgICBwZXJtaXQgcGVyc29ucyB0byB3aG9t
IHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAgIHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k
IHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAgIGluIGFsbCBjb3Bp
ZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisgICBUSEUgU09G
VFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E
LAorICAgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI
RSBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFORAorICAgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUCisgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENM
QUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9O
IE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICAgT1VUIE9G
IE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgor
ICAgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisj
aWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworI2lmbmRl
ZiBMSUJGRklfSAorI2Vycm9yICJQbGVhc2UgZG8gbm90IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGly
ZWN0bHkgaW50byB5b3VyIHNvdXJjZS4gIFVzZSBmZmkuaCBpbnN0ZWFkLiIKKyNlbmRpZgorCisv
KiAtLS0tIFN5c3RlbSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBGb3IgY29kZSBjb21tb24gdG8gYWxsIHBsYXRmb3Jt
cyBvbiB4ODYgYW5kIHg4Nl82NC4gKi8KKyNkZWZpbmUgWDg2X0FOWQorCisjaWYgZGVmaW5lZCAo
WDg2XzY0KSAmJiBkZWZpbmVkIChfX2kzODZfXykKKyN1bmRlZiBYODZfNjQKKyNkZWZpbmUgWDg2
CisjZW5kaWYKKworI2lmZGVmIFg4Nl9XSU42NAorI2RlZmluZSBGRklfU0laRU9GX0FSRyA4Cisj
ZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwIC8qIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWluZ3ct
NjQgKi8KKyNlbmRpZgorCisjZGVmaW5lIEZGSV9UQVJHRVRfU1BFQ0lGSUNfU1RBQ0tfU1BBQ0Vf
QUxMT0NBVElPTgorCisjaWYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKFg4Nl9EQVJX
SU4pICYmICFkZWZpbmVkKFg4Nl82NF9EQVJXSU4pCisjZGVmaW5lIEZGSV9UQVJHRVRfSEFTX0NP
TVBMRVhfVFlQRQorI2VuZGlmCisKKy8qIC0tLS0gR2VuZXJpYyB0eXBlIGRlZmluaXRpb25zIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZm5kZWYgTElC
RkZJX0FTTQorI2lmZGVmIFg4Nl9XSU42NAorI2lmZGVmIF9NU0NfVkVSCit0eXBlZGVmIHVuc2ln
bmVkIF9faW50NjQgICAgICAgZmZpX2FyZzsKK3R5cGVkZWYgX19pbnQ2NCAgICAgICAgICAgICAg
ICBmZmlfc2FyZzsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgZmZpX2Fy
ZzsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgICAgICAgICBmZmlfc2FyZzsKKyNlbmRpZgorI2Vs
c2UKKyNpZiBkZWZpbmVkIF9feDg2XzY0X18gJiYgZGVmaW5lZCBfX0lMUDMyX18KKyNkZWZpbmUg
RkZJX1NJWkVPRl9BUkcgOAorI2RlZmluZSBGRklfU0laRU9GX0pBVkFfUkFXICA0Cit0eXBlZGVm
IHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgZmZpX2FyZzsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAg
ICAgICAgICBmZmlfc2FyZzsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICAgICAg
ZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgICAgICAgICAgICBmZmlfc2FyZzsKKyNlbmRp
ZgorI2VuZGlmCisKK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsKKyNpZiBkZWZpbmVkKFg4Nl9XSU42
NCkKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9XSU42NCwKKyAgRkZJX0xBU1RfQUJJLAor
ICBGRklfREVGQVVMVF9BQkkgPSBGRklfV0lONjQKKworI2VsaWYgZGVmaW5lZChYODZfNjQpIHx8
IGRlZmluZWQoWDg2XzY0X0RBUldJTikKKyAgRkZJX0ZJUlNUX0FCSSA9IDEsCisgIEZGSV9VTklY
NjQsCisgIEZGSV9MQVNUX0FCSSwKKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1VOSVg2NAorCisj
ZWxpZiBkZWZpbmVkKFg4Nl9XSU4zMikKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9TWVNW
ICAgICAgPSAxLAorICBGRklfU1REQ0FMTCAgID0gMiwKKyAgRkZJX1RISVNDQUxMICA9IDMsCisg
IEZGSV9GQVNUQ0FMTCAgPSA0LAorICBGRklfTVNfQ0RFQ0wgID0gNSwKKyAgRkZJX1BBU0NBTCAg
ICA9IDYsCisgIEZGSV9SRUdJU1RFUiAgPSA3LAorICBGRklfTEFTVF9BQkksCisgIEZGSV9ERUZB
VUxUX0FCSSA9IEZGSV9NU19DREVDTAorI2Vsc2UKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZG
SV9TWVNWICAgICAgPSAxLAorICBGRklfVEhJU0NBTEwgID0gMywKKyAgRkZJX0ZBU1RDQUxMICA9
IDQsCisgIEZGSV9TVERDQUxMICAgPSA1LAorICBGRklfUEFTQ0FMICAgID0gNiwKKyAgRkZJX1JF
R0lTVEVSICA9IDcsCisgIEZGSV9NU19DREVDTCAgPSA4LAorICBGRklfTEFTVF9BQkksCisgIEZG
SV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWCisjZW5kaWYKK30gZmZpX2FiaTsKKyNlbmRpZgorCisv
KiAtLS0tIERlZmluaXRpb25zIGZvciBjbG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCisKKyNpZiAhZGVm
aW5lZChYODZfREFSV0lOKSAmJiAhZGVmaW5lZChYODZfNjRfREFSV0lOKQorI2RlZmluZSBGRklf
R09fQ0xPU1VSRVMgMQorI2VuZGlmCisKKyNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzFC
IChGRklfVFlQRV9MQVNUICsgMSkKKyNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCIChG
RklfVFlQRV9MQVNUICsgMikKKyNkZWZpbmUgRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCIChGRklf
VFlQRV9MQVNUICsgMykKKyNkZWZpbmUgRkZJX1RZUEVfTVNfU1RSVUNUICAgICAgIChGRklfVFlQ
RV9MQVNUICsgNCkKKworI2lmIGRlZmluZWQgKFg4Nl82NCkgfHwgZGVmaW5lZChYODZfV0lONjQp
IHx8IGRlZmluZWQoWDg2XzY0X0RBUldJTikKKyMgZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUg
MjQKKyMgZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisjZWxzZQorIyBkZWZpbmUgRkZJX1RS
QU1QT0xJTkVfU0laRSAxMgorIyBkZWZpbmUgRkZJX05BVElWRV9SQVdfQVBJIDEgIC8qIHg4NiBo
YXMgbmF0aXZlIHJhdyBhcGkgc3VwcG9ydCAqLworI2VuZGlmCisKKyNlbmRpZgotLSAKMi4xNy4x
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:20:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:20:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVYq-0007ES-NH; Thu, 26 Sep 2019 15:20:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVYp-00079K-7t
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:20:03 +0000
X-Inumbo-ID: 1b9c40d4-e071-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 1b9c40d4-e071-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:20:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C4B7EF2023;
 Thu, 26 Sep 2019 17:20:00 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 7U7rqbnNCpff; Thu, 26 Sep 2019 17:20:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 9F975F2004;
 Thu, 26 Sep 2019 17:19:56 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:19:47 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:19:11 +0200
Message-ID: <20190926151911.11587-6-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/GCC PATCH v2 5/5] Adding extra information
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

QWRkIGV4dGVybmFsIGxpYnJhcnkgZGVwZWRlbmNpZXMgYW5kIGtub3duIGJ1ZyBub3RpY2UuCgpT
aWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNs
YWIuZXU+Ci0tLQogUkVBRE1FLm1kIHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdl
ZCwgMTUgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZApp
bmRleCA1Y2U2Njc3Li4yZWJmZjhhIDEwMDY0NAotLS0gYS9SRUFETUUubWQKKysrIGIvUkVBRE1F
Lm1kCkBAIC0zLDUgKzMsMjAgQEAgZ2NjIGZvciBVbmlrcmFmdAogCiBUaGlzIGlzIHRoZSBwb3J0
IG9mIGdjYyBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4KIAorRm9yIHRoZSB0aW1l
IGJlaW5nIG9ubHkgbGliYmFja3RyYWNlIGFuZCBsaWJmZmkgbGlicmFyaWVzIGFyZSBwb3J0ZWQg
YmVjYXVzZSB0aGV5IGFyZSAKK25lZWRlZCBmb3IgdGhlIGxpYmdvIHBvcnQuIFlvdSB3aWxsIG5l
ZWQgbmV3bGliIGZvciBib3RoIGxpYnJhcmllcy4gCisKK0ZvciBsaWJmZmkgeW91IHdpbGwgbmVl
ZCBwdGhyZWFkXF9lbWJlZGRlZCBleHRlcm5hbCBsaWJyYXJ5IHRvby4KKworQWxzbyBmb3IgbGli
YmFja3RyYWNlIHlvdSB3aWxsIG5lZWQgdGhlIGJlbG93IGV4dGVybmFsIGxpYnJhcmllczoKKysg
Y29tcGlsZXItcnQgCisrIGxpYnVud2luZAorKyBsaWJjeHgKKysgbGliY3h4YWJpCisKK01vcmVv
dmVyIGJlY2F1c2Ugb2YgYSBidWcgaW4gbGlidW53aW5kOiBgdW53X2dldGNvbnRleHRgIGxlYWRz
IHRvIHBhZ2UgZmF1bHQsIAorYGJhY2t0cmFjZV9mdWxsYCBmdW5jdGlvbiB3aWxsIGFsc28gbGVh
ZCB0byBwYWdlIGZhdWx0LCBhcyBpdCB1c2VzIGBfVW53aW5kX0JhY2t0cmFjZWAKK3doaWNoIGNh
bGxzIGB1bndfZ2V0Y29udGV4dGAuCisKIFBsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAg
YXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCiBzdWJkaXJlY3Rvcnkg
b2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KLS0gCjIuMTcuMQoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:31:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:31:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVkF-0000Tm-8n; Thu, 26 Sep 2019 15:31:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVkE-0000Th-IM
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:31:50 +0000
X-Inumbo-ID: c13a7b5e-e072-11e9-9658-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id c13a7b5e-e072-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:31:49 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 1D0AB10571F;
 Thu, 26 Sep 2019 17:31:48 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id HoavOs-u9d71; Thu, 26 Sep 2019 17:31:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id ED2F310570B;
 Thu, 26 Sep 2019 17:31:47 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:31:47 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:27 +0200
Message-ID: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 00/11] Port libgo on unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlc2UgYXJlIHRoZSBwYXRjaGVzIG5lZWRlZCBmb3IgcG9ydGluZyBsaWJnbyBvbiB1bmlrcmFm
dC4KbGliZ28gaXMgdGFrZW4gZnJvbSBnY2Mgc291cmNlcyBhbmQgdGhlIGN1cnJlbnQgc3VwcG9y
dGVkIHZlcnNpb24gaXMKZ2NjZ28tNyB3aGljaCBpbmNsdWRlcyBhIGNvbXBsZXRlIGltcGxlbWVu
dGF0aW9uIG9mIEdvIDEuOC4xCgpUaGVzZSBwYXRjaGVzIGFyZSBkZXBlbmRlZCBvbiBHQ0MncyAi
UG9ydCBsaWJmZmkgYW5kIGxpYmJhY2t0cmFjZSBvbiB1bmlrcmFmdCIKcGF0Y2ggc2VyaWVzLiAK
CkNoYXJhbGFtcG9zIE1haW5hcyAoOSk6CiAgSW50cm9kdWNlIGxpYnJhcnkgc2tlbGV0b24KICBB
ZGQgTWFrZWZpbGUudWsKICBBZGQgcGF0Y2hlcyB0byBlbmFibGUgcnVudGltZQogIFVwZGF0ZSBj
b25maWcuaAogIFVwZGF0ZSBsaWJjYWxscy5nbwogIFVwZGF0ZSBwYWNrYWdlcy51awogIFVzZSBz
ZW1hcGhvcmVzIGluc3RlYWQgb2YgZnV0ZXhlcwogIEFkZCBnbHVlIGNvZGUgYW5kIHN0dWJzCiAg
QWRkaW5nIGV4dHJhIGluZm9ybWF0aW9uCgpDb3N0aW4gTHVwdSAoMik6CiAgQWRkIHJ1bGVzIGZv
ciBidWlsZGluZyBydW50aW1lIEdvIHBhY2thZ2VzCiAgQWRkIHBhdGNoZXMgdG8gYnVpbGQgdGhl
IGxpYnJhcnkKCiAuZ2l0aWdub3JlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgIDI3ICsKIENPRElOR19TVFlMRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
ICAgIDQgKwogQ09OVFJJQlVUSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgNCArCiBDT1BZSU5HLm1kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg
IDM5ICsKIENvbmZpZy51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MjAgKwogTUFJTlRBSU5FUlMubWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAx
MSArCiBNYWtlZmlsZS51ayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTc1
ICsKIFJFQURNRS5tZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjQg
KwogZ2VuZXJhdGVkL2Vwb2xsLmdvICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgNiAr
CiBnZW5lcmF0ZWQvaW5jbHVkZS9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgfCAgNDE1ICsK
IGdlbmVyYXRlZC9pbmNsdWRlL3J1bnRpbWUuaW5jICAgICAgICAgICAgICAgICB8ICA5ODggKysK
IGdlbmVyYXRlZC9saWJjYWxscy5nbyAgICAgICAgICAgICAgICAgICAgICAgICB8IDMwNzkgKysr
KysrCiBnZW5lcmF0ZWQvcnVudGltZV9zeXNpbmZvLmdvICAgICAgICAgICAgICAgICAgfCA2MjE5
ICsrKysrKysrKysrCiBnZW5lcmF0ZWQvc2lndGFiLmdvICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDcxICsKIGdlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28gICAgICAgICAgICAgICAgICAg
ICB8ICAgIDMgKwogZ2VuZXJhdGVkL3N5c2luZm8uZ28gICAgICAgICAgICAgICAgICAgICAgICAg
IHwgOTI4MiArKysrKysrKysrKysrKysrKwogZ2VuZXJhdGVkL3ZlcnNpb24uZ28gICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA3NyArCiBnbHVlLmMgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgMTk5ICsKIGluY2x1ZGUvbW1fbWFsbG9jLmggICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgIDAKIHBhY2thZ2VzLnVrICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICA5ODEgKysKIC4uLi11bndpbmQtaGVhZGVyLWluc3RlYWQtb2Ytc3lzdGVt
LW9uZS5wYXRjaCB8ICAgMjUgKwogcGF0Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQu
cGF0Y2ggICAgIHwgICAyNSArCiBwYXRjaGVzLzAwMDMtbGliZ28tRGlzYWJsZS1iYWNrdHJhY2lu
Zy5wYXRjaCAgfCAgIDI4ICsKIC4uLjAwNC1saWJnby1SZWR1Y2UtbWF4aW11bS1tZW1vcnktc2l6
ZS5wYXRjaCB8ICAgMjcgKwogLi4uLzAwMDUtbGliZ28tVXNlLW91ci1jb250ZXh0LWxvZ2ljLnBh
dGNoICAgIHwgICA1NyArCiAuLi5nby1Vc2Utc2VtYXBob3Jlcy1pbnN0ZWFkLW9mLWZ1dGV4ZXMu
cGF0Y2ggfCAgMTMxICsKIDI2IGZpbGVzIGNoYW5nZWQsIDIxOTE3IGluc2VydGlvbnMoKykKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCAuZ2l0aWdub3JlCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09ESU5HX1NU
WUxFLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kCiBjcmVhdGUgbW9kZSAx
MDA2NDQgQ09QWUlORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENvbmZpZy51awogY3JlYXRlIG1v
ZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZW5lcmF0
ZWQvZXBvbGwuZ28KIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZW5lcmF0ZWQvaW5jbHVkZS9jb25maWcu
aAogY3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9pbmNsdWRlL3J1bnRpbWUuaW5jCiBjcmVh
dGUgbW9kZSAxMDA2NDQgZ2VuZXJhdGVkL2xpYmNhbGxzLmdvCiBjcmVhdGUgbW9kZSAxMDA2NDQg
Z2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRl
ZC9zaWd0YWIuZ28KIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZW5lcmF0ZWQvc3lzY2FsbF9hcmNoLmdv
CiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2VuZXJhdGVkL3N5c2luZm8uZ28KIGNyZWF0ZSBtb2RlIDEw
MDY0NCBnZW5lcmF0ZWQvdmVyc2lvbi5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdsdWUuYwogY3Jl
YXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbW1fbWFsbG9jLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBw
YWNrYWdlcy51awogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMS1saWJnby1Vc2UtZ2Nj
LW93bi11bndpbmQtaGVhZGVyLWluc3RlYWQtb2Ytc3lzdGVtLW9uZS5wYXRjaAogY3JlYXRlIG1v
ZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMi1saWJnby1Oby1mdXRleC10b25pZ2h0LnBhdGNoCiBjcmVh
dGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAzLWxpYmdvLURpc2FibGUtYmFja3RyYWNpbmcucGF0
Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDQtbGliZ28tUmVkdWNlLW1heGltdW0t
bWVtb3J5LXNpemUucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDUtbGliZ28t
VXNlLW91ci1jb250ZXh0LWxvZ2ljLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8w
MDA2LWxpYmdvLVVzZS1zZW1hcGhvcmVzLWluc3RlYWQtb2YtZnV0ZXhlcy5wYXRjaAoKLS0gCjIu
MTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:32:04 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:32:04 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVkS-0000UW-Am; Thu, 26 Sep 2019 15:32:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVkR-0000UR-47
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:32:03 +0000
X-Inumbo-ID: c8a1d9fa-e072-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id c8a1d9fa-e072-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:32:01 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 88920F2025;
 Thu, 26 Sep 2019 17:32:00 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id YVXzAMhFLOep; Thu, 26 Sep 2019 17:32:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 61F9FF2004;
 Thu, 26 Sep 2019 17:31:56 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:31:56 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:28 +0200
Message-ID: <20190926153136.29689-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 01/11] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFz
QG5lY2xhYi5ldT4KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1
Yi5ybz4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrKysr
KysKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5tZCB8ICA0ICsrKysK
IENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKwogQ29uZmlnLnVrICAgICAgIHwgMjAgKysrKysrKysrKysrKysrKysrKysKIE1BSU5UQUlO
RVJTLm1kICB8IDExICsrKysrKysrKysrCiBSRUFETUUubWQgICAgICAgfCAgNyArKysrKysrCiA3
IGZpbGVzIGNoYW5nZWQsIDExMiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgLmdp
dGlnbm9yZQogY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUg
MTAwNjQ0IENPTlRSSUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVS
Uy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5tZAoKZGlmZiAtLWdpdCBhLy5naXRpZ25v
cmUgYi8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJm
ZDMKLS0tIC9kZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjcgQEAKKyouZGVw
ZW5kCisqLm8KKyouYQorKi5kCisqLnNvCisqLm9yaWcKKyoucmVqCisqLmJhaworKi5zd3AKKyp+
CissKgorXCMqXCMKKy5cIyoKK1wjXypcIworLlwjXyoKKyEuZ2l0aWdub3JlCisuKgorCisjIGdu
dSBnbG9iYWwgZmlsZXMKK0dQQVRICitHUlRBR1MKK0dTWU1TCitHVEFHUworCisjIGNzY29wZSBm
aWxlcworY3Njb3BlLioKK25jc2NvcGUuKgpkaWZmIC0tZ2l0IGEvQ09ESU5HX1NUWUxFLm1kIGIv
Q09ESU5HX1NUWUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzAw
NDEKLS0tIC9kZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQKQEAgLTAsMCArMSw0IEBACitD
b2RpbmcgU3R5bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT0RJTkdf
U1RZTEUubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdp
dCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xNGY2YWM2Ci0tLSAvZGV2L251bGwKKysrIGIvQ09OVFJJQlVUSU5H
Lm1kCkBAIC0wLDAgKzEsNCBAQAorQ29udHJpYnV0aW5nIHRvIFVuaWtyYWZ0Cis9PT09PT09PT09
PT09PT09PT09PT09PT0KKworUGxlYXNlIHJlZmVyIHRvIHRoZSBgQ09OVFJJQlVUSU5HLm1kYCBm
aWxlIGluIHRoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9DT1BZSU5H
Lm1kIGIvQ09QWUlORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ5
ZjNhCi0tLSAvZGV2L251bGwKKysrIGIvQ09QWUlORy5tZApAQCAtMCwwICsxLDM5IEBACitMaWNl
bnNlCis9PT09PT09CisKK1VuaWtyYWZ0IGxpYmdvIHdyYXBwZXJzCistLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFwcGVyIGNv
ZGUgdG8gYnVpbGQgbGliZ28gd2l0aCBVbmlrcmFmdC4KK0VhY2ggQyBjb2RlIGZpbGUgaW4gdGhp
cyByZXBvc2l0b3J5IHNob3VsZCBkZWNsYXJlIHdobyBpcyB0aGUKK2NvcHlyaWdodCBvd25lciBh
bmQgdW5kZXIgd2hpY2ggdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhlIGNvZGUgaXMKK2xpY2Vuc2Vk
LiBJZiBzdWNoIGEgbGljZW5jZSBub3RlIGlzIG1pc3NpbmcsIHRoZSBmb2xsb3dpbmcgY29weXJp
Z2h0Citub3RpY2Ugd2lsbCBhcHBseToKKworCUNvcHlyaWdodCAoYykgWWVhciwgSW5zdGl0dXRp
b24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKwltb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKwlhcmUg
bWV0OgorCisJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKwkgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisJMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKwkgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisJICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKwkzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQg
aG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisJICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKwkgICB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisJVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMgSVMiCisJQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorCUlNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisJ
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9S
IENPTlRSSUJVVE9SUyBCRQorCUxJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKwlDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorCVNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworCUlOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisJQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKwlBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RQorCVBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9Db25maWcudWsg
Yi9Db25maWcudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE0M2E0MAot
LS0gL2Rldi9udWxsCisrKyBiL0NvbmZpZy51awpAQCAtMCwwICsxLDIwIEBACitjb25maWcgTElC
R08KKwlib29sICJsaWJnbyAtIEdvIGxpYnJhcnkiCisJZGVmYXVsdCBuCisJc2VsZWN0IExJQlVL
REVCVUcKKwlzZWxlY3QgTElCVUtBTExPQworCXNlbGVjdCBMSUJORVdMSUJDCisJc2VsZWN0IExJ
QlVLTU1BUAorCXNlbGVjdCBVS1NZU0lORk8KKwlzZWxlY3QgTElCQ09NUElMRVJfUlQKKwlzZWxl
Y3QgTElCVU5XSU5ECisJc2VsZWN0IExJQkNYWAorCXNlbGVjdCBMSUJDWFhBQkkKKwlzZWxlY3Qg
TElCUFRIUkVBRF9FTUJFRERFRAorCXNlbGVjdCBMSUJHQ0MKKwlzZWxlY3QgTElCRkZJCisJc2Vs
ZWN0IExJQkJBQ0tUUkFDRQorCXNlbGVjdCBMSUJMV0lQCisJc2VsZWN0IExJQlVDT05URVhUCisJ
c2VsZWN0IFVLVU5JU1RECisJc2VsZWN0IExJQlNZU0NBTExfU0hJTQpkaWZmIC0tZ2l0IGEvTUFJ
TlRBSU5FUlMubWQgYi9NQUlOVEFJTkVSUy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4zMjM4YjMwCi0tLSAvZGV2L251bGwKKysrIGIvTUFJTlRBSU5FUlMubWQKQEAgLTAs
MCArMSwxMSBAQAorTWFpbnRhaW5lcnMgTGlzdAorPT09PT09PT09PT09PT09PQorCitGb3Igbm90
ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlO
VEFJTkVSUy5tZGAgaW4KK3RoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCisKKwlMSUJHTy1V
TklLUkFGVAorCU06CUNvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CisJTToJRmVs
aXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgorCUw6CW1pbmlvcy1kZXZlbEBsaXN0
cy54ZW4ub3JnCisJRjogKgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjZTY2NzcKLS0tIC9kZXYvbnVsbAorKysg
Yi9SRUFETUUubWQKQEAgLTAsMCArMSw3IEBACitsaWJnbyBmb3IgVW5pa3JhZnQKKz09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHBvcnQgb2YgbGliZ28gZm9yIFVu
aWtyYWZ0IGFzIGV4dGVybmFsIGxpYnJhcnkuCisKK1BsZWFzZSByZWZlciB0byB0aGUgYFJFQURN
RS5tZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCitzdWJkaXJl
Y3Rvcnkgb2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KLS0gCjIuMTcuMQoKCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBt
YWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlz
dHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:32:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:32:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVl1-0000Vx-Dr; Thu, 26 Sep 2019 15:32:39 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVl0-0000Vs-Hd
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:32:38 +0000
X-Inumbo-ID: dcd3ba88-e072-11e9-9658-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id dcd3ba88-e072-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:32:35 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 6857E10571F;
 Thu, 26 Sep 2019 17:32:34 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 83tyx8GwU-3o; Thu, 26 Sep 2019 17:32:34 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 3FA0E10570B;
 Thu, 26 Sep 2019 17:32:34 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:33 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:29 +0200
Message-ID: <20190926153136.29689-3-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 02/11] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBhbHNvIGFkZHMgdGhlIGdlbmVyYXRlZCBjb25maWcuaCBhbmQgcnVudGltZS5p
bmMgaGVhZGVycy4KQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGdlbmVyYXRlIHRo
ZW0gZHVyaW5nIHRoZSBidWlsZC4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8
Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUg
PGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KLS0tCiBNYWtlZmlsZS51ayAgICAgICAgICAgICAgICAg
ICB8IDE2NyArKysrKysKIGdlbmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5oICAgIHwgNDE1ICsrKysr
KysrKysrKysrCiBnZW5lcmF0ZWQvaW5jbHVkZS9ydW50aW1lLmluYyB8IDk4OCArKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiBpbmNsdWRlL21tX21hbGxvYy5oICAgICAgICAgICB8
ICAgMAogNCBmaWxlcyBjaGFuZ2VkLCAxNTcwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBNYWtlZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9pbmNsdWRlL2Nv
bmZpZy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2VuZXJhdGVkL2luY2x1ZGUvcnVudGltZS5pbmMK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL21tX21hbGxvYy5oCgpkaWZmIC0tZ2l0IGEvTWFr
ZWZpbGUudWsgYi9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li40MmVlZmIxCi0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUudWsKQEAgLTAsMCArMSwxNjcg
QEAKKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyMKKyMgIGxpYmdv
IE1ha2VmaWxlLnVrCisjCisjICBBdXRob3JzOiBDaGFyYWxhbXBvcyBNYWluYXMgPGNoYXJhbGFt
cG9zLm1haW5hc0BuZWNsYWIuZXU+CisjICAgICAgICAgICBDb3N0aW4gTHVwdSA8Y29zdGluLmx1
cHVAY3MucHViLnJvPgorIworIyAgQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4s
IE5FQyBDb3Jwb3JhdGlvbgorIyAgICAgICAgICAgICAgICAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0
ZWhuaWNhIG9mIEJ1Y2hhcmVzdAorIworIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjICBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgIGFy
ZSBtZXQ6CisjCisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjICAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorIyAgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyMgIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyMgIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorIworIyAgVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQg
T1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMg
TGlicmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiskKGV2YWwgJChj
YWxsIGFkZGxpYl9zLGxpYmdvLCQoQ09ORklHX0xJQkdPKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIE9yaWdpbmFsIHNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJH
Q0NfVkVSU0lPTj03LjMuMAorTElCR0NDX1VSTD1odHRwczovL2Z0cC5nbnUub3JnL2dudS9nY2Mv
Z2NjLSQoTElCR0NDX1ZFUlNJT04pL2djYy0kKExJQkdDQ19WRVJTSU9OKS50YXIuZ3oKK0xJQkdP
X1BBVENIRElSPSQoTElCR09fQkFTRSkvcGF0Y2hlcworTElCR0NDX1NVQkRJUj1nY2MtJChMSUJH
Q0NfVkVSU0lPTikKKyMjIFBhdGNoIGdjYyBzb3VyY2VzIHdpdGggbGliZ28gcGF0Y2hlcworJChl
dmFsICQoY2FsbCBwYXRjaCxsaWJnY2MsJChMSUJHT19QQVRDSERJUiksJChMSUJHQ0NfU1VCRElS
KSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMKKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCitMSUJHQ0NfRVhUUkFDVEVEID0gJChMSUJHQ0NfT1JJR0lOKS9nY2MtJChMSUJH
Q0NfVkVSU0lPTikKK0xJQkdPX0VYVFJBQ1RFRCA9ICQoTElCR0NDX0VYVFJBQ1RFRCkvbGliZ28K
KworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSBpbmNsdWRlcworIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKK0xJQkdPX0NPTU1PTl9JTkNMVURFUy15ID0gLUkkKExJQkdPX0JBU0Up
L2luY2x1ZGUgLUkkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9pbmNsdWRlIFwKKwktSSQoTElCR09f
RVhUUkFDVEVEKSAtSSQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lIFwKKwktSSQoTElCR0NDX0VY
VFJBQ1RFRCkvbGliZmZpL2luY2x1ZGUgLUkkKExJQkdDQ19CQVNFKS9saWJmZmkvaW5jbHVkZSBc
CisJLUkkKExJQkdDQ19FWFRSQUNURUQpL2xpYmdjYyBcCisJLUkkKExJQkJBQ0tUUkFDRV9FWFRS
QUNURUQpIFwKKwktSSQoTElCR0NDX0VYVFJBQ1RFRCkvZ2NjL2luY2x1ZGUKK0xJQkdPX0NPTU1P
Tl9JTkNMVURFUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0gLUkkKExJQkZGSV9FWFRSQUNURUQp
L3NyYy94ODYKK0xJQkdPX0NPTU1PTl9JTkNMVURFUy0kKENPTkZJR19BUkNIX1g4Nl82NCkgKz0g
LUkkKExJQkdDQ19FWFRSQUNURUQpL2djYy9jb25maWcvaTM4NgorTElCR09fQVNJTkNMVURFUy15
ID0gJChMSUJHT19DT01NT05fSU5DTFVERVMteSkKK0xJQkdPX0NJTkNMVURFUy15ICA9ICQoTElC
R09fQ09NTU9OX0lOQ0xVREVTLXkpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2xv
YmFsIGZsYWdzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCR09fQ0ZMQUdTLXkgKz0gLURI
QVZFX0NPTkZJR19IIC1EX0lOQ0xVREVfTUFMTE9DX0hfIFwKKwktZmV4Y2VwdGlvbnMgLWZub24t
Y2FsbC1leGNlcHRpb25zIC1mcGxhbjktZXh0ZW5zaW9ucyAtZm5vLXNwbGl0LXN0YWNrIFwKKwkt
V2FsbCAtV2V4dHJhIC1Xd3JpdGUtc3RyaW5ncyAtV2Nhc3QtcXVhbCAtV25vLXVudXNlZC1mdW5j
dGlvbiBcCisJLW1pbmxpbmUtYWxsLXN0cmluZ29wcyAtV25vLWltcGxpY2l0LWZ1bmN0aW9uLWRl
Y2xhcmF0aW9uIFwKKwktRF9HTlVfU09VUkNFIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9P
RkZTRVRfQklUUz02NAorTElCR09fQ0ZMQUdTLXkgKz0gLVduby1jYXN0LXF1YWwgLVduby11bnVz
ZWQtdmFsdWUKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgbGliZ28gY29kZQorIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9n
by9ieXRlcy9pbmRleGJ5dGUuY3xieXRlcworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9nby9sb2cvc3lzbG9nL3N5c2xvZ19jLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcmVmbGVjdC9tYWtlZnVuY19mZmlfYy5jCitMSUJHT19TUkNTLXkgKz0gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaW50ZXJuYWwvYXRvbWljL2F0b21pYy5jfHJ1bnRp
bWUuaW50ZXJuYWwKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyaW5n
cy9pbmRleGJ5dGUuY3xzdHJpbmdzCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQp
L2dvL3N5bmMvYXRvbWljL2F0b21pYy5jfHN5bmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9jbG9uZV9saW51eC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJH
T19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZXJybm8uYworTElCR09fU1JDUy15ICs9ICQoTElCR09f
RVhUUkFDVEVEKS9nby9zeXNjYWxsL3NpZ25hbWUuYworTElCR09fU1JDUy15ICs9ICQoTElCR09f
RVhUUkFDVEVEKS9nby9zeXNjYWxsL3dhaXQuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhU
UkFDVEVEKS9ydW50aW1lL2Flc2hhc2guYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9ydW50aW1lL2Vudl9wb3NpeC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNU
RUQpL3J1bnRpbWUvZ2V0bmNwdS1saW51eC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRS
QUNURUQpL3J1bnRpbWUvZ28tYXNzZXJ0LmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby1icmVha3BvaW50LmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VY
VFJBQ1RFRCkvcnVudGltZS9nby1jYWxsZXIuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhU
UkFDVEVEKS9ydW50aW1lL2dvLWNhbGxlcnMuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhU
UkFDVEVEKS9ydW50aW1lL2dvLWNkaXYuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9ydW50aW1lL2dvLWNnby5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQp
L3J1bnRpbWUvZ28tY29uc3RydWN0LW1hcC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRS
QUNURUQpL3J1bnRpbWUvZ28tZmZpLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RF
RCkvcnVudGltZS9nby1maWVsZHRyYWNrLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby1tYXRoZXJyLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby1tZW1jbHIuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9ydW50aW1lL2dvLW1lbWNtcC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNU
RUQpL3J1bnRpbWUvZ28tbWVtZXF1YWwuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9ydW50aW1lL2dvLW1lbW1vdmUuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9ydW50aW1lL2dvLW5hbm90aW1lLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby1uZXcuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVE
KS9ydW50aW1lL2dvLW5vc3lzLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkv
cnVudGltZS9nby1ub3cuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50
aW1lL2dvLXJlZmxlY3QtY2FsbC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQp
L3J1bnRpbWUvZ28tcnVudGltZS1lcnJvci5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRS
QUNURUQpL3J1bnRpbWUvZ28tc2V0ZW52LmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby1zaWduYWwuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFD
VEVEKS9ydW50aW1lL2dvLXN0cnNsaWNlLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby10eXBlZGVzYy1lcXVhbC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJH
T19FWFRSQUNURUQpL3J1bnRpbWUvZ28tdW5zYWZlLW5ld2FycmF5LmMKK0xJQkdPX1NSQ1MteSAr
PSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby11bnNhZmUtbmV3LmMKK0xJQkdPX1NSQ1Mt
eSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby11bnNhZmUtcG9pbnRlci5jCitMSUJH
T19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tdW5zZXRlbnYuYworTElC
R09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLXVud2luZC5jCitMSUJH
T19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tdmFyYXJncy5jCitMSUJH
T19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvaGVhcGR1bXAuYworTElCR09f
U1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL21jYWNoZS5jCitMSUJHT19TUkNT
LXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvbWNlbnRyYWwuYworTElCR09fU1JDUy15
ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL21lbS5jCitMSUJHT19TUkNTLXkgKz0gJChM
SUJHT19FWFRSQUNURUQpL3J1bnRpbWUvbWZpeGFsbG9jLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJ
QkdPX0VYVFJBQ1RFRCkvcnVudGltZS9tZ2MwLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VY
VFJBQ1RFRCkvcnVudGltZS9taGVhcC5jCitMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNU
RUQpL3J1bnRpbWUvbXNpemUuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9y
dW50aW1lL3BhbmljLmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGlt
ZS9wYXJmb3IuYworTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL3By
aW50LmMKK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9wcm9jLmMK
K0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9ydW50aW1lX2MuYwor
TElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL3RocmVhZC5jCitMSUJH
T19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMKK0xJ
QkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS95aWVsZC5jCitMSUJHT19T
UkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tbWFpbi5jCitMSUJHT19TUkNT
LXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3N5c2luZm8uYworTElCR09fU1JDUy15ICs9ICQoTElC
R09fRVhUUkFDVEVEKS9tYWxsb2MuYyAjIGdlbmVyYXRlZAorCisjIEdlbmVyYXRlIGdvMmMgdG9v
bAorJChMSUJHT19CVUlMRCkvZ29jMmM6ICQoTElCR0NDX0JVSUxEKS8ucGF0Y2hlZAorCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHRU4sbGliZ286ICQobm90ZGlyICRAKSwgXAorCQljZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgZ2NjIC1vICRAICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvYzJjLmMp
CisKKyMgR2VuZXJhdGUgbWFsbG9jLmMKKyQoTElCR09fRVhUUkFDVEVEKS9tYWxsb2MuYzogJChM
SUJHT19FWFRSQUNURUQpL3J1bnRpbWUvbWFsbG9jLmdvYyAkKExJQkdPX0JVSUxEKS9nb2MyYwor
CSQoY2FsbCB2ZXJib3NlX2NtZCxHRU4sbGliZ286ICQobm90ZGlyICRAKSwgXAorCQljZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgJChMSUJHT19CVUlMRCkvZ29jMmMgJDwgPiAkQCkKKworVUtfUFJF
UEFSRSArPSAkKExJQkdPX0JVSUxEKS9nb2MyYyAkKExJQkdPX0VYVFJBQ1RFRCkvbWFsbG9jLmMK
KworIyBHbyBwYWNrYWdlcworTElCR09fR09GTEFHUy15ICs9IC1taW5saW5lLWFsbC1zdHJpbmdv
cHMgLWZuby1zcGxpdC1zdGFjaworTElCR09fR09GTEFHUy15ICs9IC1JJChMSUJHT19CVUlMRCkK
K0xJQkdPX0dPRkxBR1MgPSAkKExJQkdPX0dPRkxBR1MteSkKZGlmZiAtLWdpdCBhL2dlbmVyYXRl
ZC9pbmNsdWRlL2NvbmZpZy5oIGIvZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M0NzNmMgotLS0gL2Rldi9udWxsCisrKyBiL2dl
bmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5oCkBAIC0wLDAgKzEsNDE1IEBACisvKiBjb25maWcuaC4g
IEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCisvKiBjb25maWcu
aC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KKwor
LyogRGVmaW5lIGlmIGJ1aWxkaW5nIHVuaXZlcnNhbCAoaW50ZXJuYWwgaGVscGVyIG1hY3JvKSAq
LworLyogI3VuZGVmIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAqLworCisvKiBEZWZpbmUgdG8g
dGhlIGZsYWdzIG5lZWRlZCBmb3IgdGhlIC5zZWN0aW9uIC5laF9mcmFtZSBkaXJlY3RpdmUuICov
CisjZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTICJhdyIKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBhY2NlcHQ0JyBmdW5jdGlvbi4gKi8KKy8vI2RlZmluZSBIQVZFX0FDQ0VQVDQgMQor
CisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjb3NsJyBmdW5jdGlvbi4gKi8KKyNk
ZWZpbmUgSEFWRV9BQ09TTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXNp
bmwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FTSU5MIDEKKworLyogRGVmaW5lIGlmIHlv
dXIgYXNzZW1ibGVyIHN1cHBvcnRzIEdOVSBjb21kYXQgZ3JvdXAgc3ludGF4LiAqLworI2RlZmlu
ZSBIQVZFX0FTX0NPTURBVF9HQVMgMQorCisvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3Vw
cG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZS4gKi8KKyNkZWZpbmUgSEFWRV9BU19YODZfNjRfVU5X
SU5EX1NFQ1RJT05fVFlQRSAxCisKKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0
cyBBRVMgaW5zdHJ1Y3Rpb25zLiAqLworLy8jZGVmaW5lIEhBVkVfQVNfWDg2X0FFUyAxCisKKy8q
IERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyBQQyByZWxhdGl2ZSByZWxvY3MuICov
CisjZGVmaW5lIEhBVkVfQVNfWDg2X1BDUkVMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBhdGFuMmwnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0FUQU4yTCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYXRhbmwnIGZ1bmN0aW9uLiAqLworI2RlZmlu
ZSBIQVZFX0FUQU5MIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb3NsJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9DT1NMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9ETEZDTl9I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbF9pdGVyYXRlX3BoZHInIGZ1
bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX0RMX0lURVJBVEVfUEhEUiAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgZHVwMycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRFVQ
MyAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXBvbGxfY3JlYXRlMScgZnVu
Y3Rpb24uICovCisvLyNkZWZpbmUgSEFWRV9FUE9MTF9DUkVBVEUxIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBleHBsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9FWFBM
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBleHBtMWwnIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX0VYUE0xTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgZmFjY2Vzc2F0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9GQUNDRVNTQVQgMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZhbGxvY2F0ZScgZnVuY3Rpb24uICovCisj
ZGVmaW5lIEhBVkVfRkFMTE9DQVRFIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBmY2htb2RhdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRkNITU9EQVQgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZjaG93bmF0JyBmdW5jdGlvbi4gKi8KKy8vI2Rl
ZmluZSBIQVZFX0ZDSE9XTkFUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBm
dXRpbWVzYXQnIGZ1bmN0aW9uLiAqLworLy8jZGVmaW5lIEhBVkVfRlVUSU1FU0FUIDEKKworLyog
RGVmaW5lIGlmIF9VbndpbmRfR2V0SVBJbmZvIGlzIGF2YWlsYWJsZS4gKi8KKyNkZWZpbmUgSEFW
RV9HRVRJUElORk8gMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHhhdHRy
JyBmdW5jdGlvbi4gKi8KKy8vI2RlZmluZSBIQVZFX0dFVFhBVFRSIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X2FkZF93YXRjaCcgZnVuY3Rpb24uICovCisjZGVm
aW5lIEhBVkVfSU5PVElGWV9BRERfV0FUQ0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGlub3RpZnlfaW5pdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfSU5PVElGWV9J
TklUIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X2luaXQxJyBm
dW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9JTk9USUZZX0lOSVQxIDEKKworLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X3JtX3dhdGNoJyBmdW5jdGlvbi4gKi8KKyNkZWZp
bmUgSEFWRV9JTk9USUZZX1JNX1dBVENIIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JTlRUWVBFU19I
IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsZGV4cGwnIGZ1bmN0aW9uLiAq
LworI2RlZmluZSBIQVZFX0xERVhQTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8bGludXgvZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9MSU5VWF9F
VEhFUl9IICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvZmlsdGVy
Lmg+IGhlYWRlciBmaWxlLiAqLworLy8jZGVmaW5lIEhBVkVfTElOVVhfRklMVEVSX0ggMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2ZzLmg+IGhlYWRlciBmaWxlLiAq
LworLy8jZGVmaW5lIEhBVkVfTElOVVhfRlNfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8bGludXgvaWZfYWRkci5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZF
X0xJTlVYX0lGX0FERFJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGlu
dXgvaWZfZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9JRl9F
VEhFUl9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9pZl90dW4u
aD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9JRl9UVU5fSCAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvbmV0bGluay5oPiBoZWFkZXIgZmls
ZS4gKi8KKy8vI2RlZmluZSBIQVZFX0xJTlVYX05FVExJTktfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8bGludXgvcHRyYWNlLmg+IGhlYWRlciBmaWxlLiAqLworLy8jZGVm
aW5lIEhBVkVfTElOVVhfUFRSQUNFX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPGxpbnV4L3JlYm9vdC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX0xJTlVY
X1JFQk9PVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9ydG5l
dGxpbmsuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9MSU5VWF9SVE5FVExJTktf
SCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbGlzdHhhdHRyJyBmdW5jdGlv
bi4gKi8KKy8vI2RlZmluZSBIQVZFX0xJU1RYQVRUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHRo
ZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBsb2ZmX3QnLiAqLworI2RlZmluZSBIQVZFX0xPRkZfVCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMTBsJyBmdW5jdGlvbi4gKi8K
KyNkZWZpbmUgSEFWRV9MT0cxMEwgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGxvZzFwbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfTE9HMVBMIDEKKworLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2dsJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9M
T0dMIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtYXRoZXJyJyBmdW5jdGlv
bi4gKi8KKy8qICN1bmRlZiBIQVZFX01BVEhFUlIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDxtZW1vcnkuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfTUVNT1JZ
X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1pbmNvcmUnIGZ1bmN0aW9u
LiAqLworLy8jZGVmaW5lIEhBVkVfTUlOQ09SRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgbWtkaXJhdCcgZnVuY3Rpb24uICovCisvLyNkZWZpbmUgSEFWRV9NS0RJUkFUIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta25vZGF0JyBmdW5jdGlvbi4gKi8K
Ky8vI2RlZmluZSBIQVZFX01LTk9EQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPG5ldGluZXQvaWNtcDYuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9ORVRJ
TkVUX0lDTVA2X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQv
aWZfZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUgSEFWRV9ORVRJTkVUX0lGX0VU
SEVSX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW5fc3lz
dC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX05FVElORVRfSU5fU1lTVF9IICov
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcC5oPiBoZWFkZXIg
ZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX05FVElORVRfSVBfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pcF9tcm91dGUuaD4gaGVhZGVyIGZpbGUuICovCisv
KiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lQX01ST1VURV9IICovCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8bmV0cGFja2V0L3BhY2tldC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2Rl
ZmluZSBIQVZFX05FVFBBQ0tFVF9QQUNLRVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSA8bmV0L2lmX2FycC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX05F
VF9JRl9BUlBfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0L2lmLmg+
IGhlYWRlciBmaWxlLiAqLworLy8jZGVmaW5lIEhBVkVfTkVUX0lGX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9yb3V0ZS5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2Rl
ZmluZSBIQVZFX05FVF9ST1VURV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBo
YXMgdGhlIHR5cGUgYG9mZjY0X3QnLiAqLworI2RlZmluZSBIQVZFX09GRjY0X1QgMQorCisvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW42NCcgZnVuY3Rpb24uICovCisjZGVmaW5l
IEhBVkVfT1BFTjY0IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBvcGVuYXQn
IGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX09QRU5BVCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgcGlwZTInIGZ1bmN0aW9uLiAqLworLy8jZGVmaW5lIEhBVkVfUElQRTIg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBvcnQuaD4gaGVhZGVyIGZpbGUu
ICovCisvKiAjdW5kZWYgSEFWRV9QT1JUX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGByZW1vdmV4YXR0cicgZnVuY3Rpb24uICovCisvLyNkZWZpbmUgSEFWRV9SRU1PVkVY
QVRUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVuYW1lYXQnIGZ1bmN0
aW9uLiAqLworLy8jZGVmaW5lIEhBVkVfUkVOQU1FQVQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHNjaGVkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NDSEVE
X0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHNlbWFwaG9yZS5oPiBoZWFk
ZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TRU1BUEhPUkVfSCAxCisKKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgc2VtX3RpbWVkd2FpdCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfU0VNX1RJTUVEV0FJVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0
ZW52JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9TRVRFTlYgMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYHNldHhhdHRyJyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9T
RVRYQVRUUiAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lubCcgZnVuY3Rp
b24uICovCisjZGVmaW5lIEhBVkVfU0lOTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSBgc3BsaWNlJyBmdW5jdGlvbi4gKi8KKy8vI2RlZmluZSBIQVZFX1NQTElDRSAxCisKKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwor
I2RlZmluZSBIQVZFX1NURElOVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RETElCX0ggMQorCisv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yX3InIGZ1bmN0aW9uLiAqLwor
I2RlZmluZSBIQVZFX1NUUkVSUk9SX1IgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYHN0cnNpZ25hbCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfU1RSU0lHTkFMIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgPG1hdGguaD4gZGVmaW5lcyBzdHJ1Y3QgZXhjZXB0aW9uICov
CisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfRVhDRVBUSU9OICovCisKKy8qIERlZmluZSB0byAxIGlm
IHRoZSBjb21waWxlciBwcm92aWRlcyB0aGUgX19zeW5jX2FkZF9hbmRfZmV0Y2ggZnVuY3Rpb24g
Zm9yCisgICB1aW50NjQgKi8KKyNkZWZpbmUgSEFWRV9TWU5DX0FERF9BTkRfRkVUQ0hfOCAxCisK
Ky8qIERlZmluZSB0byAxIGlmIHRoZSBjb21waWxlciBwcm92aWRlcyB0aGUgX19zeW5jX2Jvb2xf
Y29tcGFyZV9hbmRfc3dhcAorICAgZnVuY3Rpb24gZm9yIHVpbnQzMiAqLworI2RlZmluZSBIQVZF
X1NZTkNfQk9PTF9DT01QQVJFX0FORF9TV0FQXzQgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUg
Y29tcGlsZXIgcHJvdmlkZXMgdGhlIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAKKyAgIGZ1
bmN0aW9uIGZvciB1aW50NjQgKi8KKyNkZWZpbmUgSEFWRV9TWU5DX0JPT0xfQ09NUEFSRV9BTkRf
U1dBUF84IDEKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBf
X3N5bmNfZmV0Y2hfYW5kX2FkZCBmdW5jdGlvbiBmb3IKKyAgIHVpbnQzMiAqLworI2RlZmluZSBI
QVZFX1NZTkNfRkVUQ0hfQU5EX0FERF80IDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIGBzeW5jX2ZpbGVfcmFuZ2UnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1NZTkNfRklM
RV9SQU5HRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzY2FsbC5oPiBo
ZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNDQUxMX0ggMQorCisvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmlu
ZSBIQVZFX1NZU19FUE9MTF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
eXMvZXZlbnQuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9TWVNfRVZFTlRfSCAq
LworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9maWxlLmg+IGhlYWRlciBm
aWxlLiAqLworLy8jZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCisKKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8c3lzL2lub3RpZnkuaD4gaGVhZGVyIGZpbGUuICovCisvLyNkZWZpbmUg
SEFWRV9TWVNfSU5PVElGWV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
eXMvbW1hbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9IIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW91bnQuaD4gaGVhZGVyIGZpbGUu
ICovCisjZGVmaW5lIEhBVkVfU1lTX01PVU5UX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHN5cy9wcmN0bC5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNf
UFJDVExfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3B0cmFjZS5o
PiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfUFRSQUNFX0ggMQorCisvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCisj
ZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIDxzeXMvc29ja2V0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TT0NL
RVRfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXRmcy5oPiBo
ZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfU1RBVEZTX0ggMQorCisvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmlu
ZSBIQVZFX1NZU19TVEFUX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5
cy9zeXNjYWxsLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1NZU19TWVNDQUxMX0gg
MQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zeXNpbmZvLmg+IGhlYWRl
ciBmaWxlLiAqLworLy8jZGVmaW5lIEhBVkVfU1lTX1NZU0lORk9fSCAxCisKKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWV4Lmg+IGhlYWRlciBmaWxlLiAqLworLy8jZGVm
aW5lIEhBVkVfU1lTX1RJTUVYX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAx
CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3VzZXIuaD4gaGVhZGVyIGZp
bGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1VTRVJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8c3lzL3V0c25hbWUuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVf
U1lTX1VUU05BTUVfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Zm
cy5oPiBoZWFkZXIgZmlsZS4gKi8KKy8vI2RlZmluZSBIQVZFX1NZU19WRlNfSCAxCisKKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGFubCcgZnVuY3Rpb24uICovCisjZGVmaW5lIEhB
VkVfVEFOTCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdGVlJyBmdW5jdGlv
bi4gKi8KKy8vI2RlZmluZSBIQVZFX1RFRSAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1VOSVNURF9IIDEK
KworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bmxpbmthdCcgZnVuY3Rpb24uICov
CisvLyNkZWZpbmUgSEFWRV9VTkxJTktBVCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSBgdW5zZXRlbnYnIGZ1bmN0aW9uLiAqLworI2RlZmluZSBIQVZFX1VOU0VURU5WIDEKKwor
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1bnNoYXJlJyBmdW5jdGlvbi4gKi8KKy8v
I2RlZmluZSBIQVZFX1VOU0hBUkUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PHVzdGF0Lmg+IGhlYWRlciBmaWxlIGFuZCBpdCB3b3Jrcy4gKi8KKy8qICN1bmRlZiBIQVZFX1VT
VEFUX0ggKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1dGltZW5zYXQnIGZ1
bmN0aW9uLiAqLworLy8jZGVmaW5lIEhBVkVfVVRJTUVOU0FUIDEKKworLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDx1dGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9V
VElNRV9IIDEKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB3YWl0NCcgZnVuY3Rp
b24uICovCisjZGVmaW5lIEhBVkVfV0FJVDQgMQorCisvKiBEZWZpbmUgaWYgdGhlIGxpbmtlciBz
dXBwb3J0IHNwbGl0IHN0YWNrIGFkanVzdG1lbnRzICovCisvKiAjdW5kZWYgTElOS0VSX1NVUFBP
UlRTX1NQTElUX1NUQUNLICovCisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3
aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI2RlZmlu
ZSBMVF9PQkpESVIgIi5saWJzLyIKKworLyogTmFtZSBvZiBwYWNrYWdlICovCisvKiAjdW5kZWYg
UEFDS0FHRSAqLworCisvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMg
Zm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KKyNkZWZpbmUgUEFDS0FHRV9CVUdS
RVBPUlQgIiIKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAq
LworI2RlZmluZSBQQUNLQUdFX05BTUUgInBhY2thZ2UtdW51c2VkIgorCisvKiBEZWZpbmUgdG8g
dGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjZGVmaW5lIFBB
Q0tBR0VfU1RSSU5HICJwYWNrYWdlLXVudXNlZCB2ZXJzaW9uLXVudXNlZCIKKworLyogRGVmaW5l
IHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmlu
ZSBQQUNLQUdFX1RBUk5BTUUgImxpYmdvIgorCisvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBm
b3IgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1VSTCAiIgorCisvKiBEZWZpbmUg
dG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2RlZmluZSBQQUNLQUdFX1ZFUlNJ
T04gInZlcnNpb24tdW51c2VkIgorCisvKiBEZWZpbmUgaWYgc2V0Y29udGV4dCBjbG9iYmVycyBU
TFMgdmFyaWFibGVzICovCisvKiAjdW5kZWYgU0VUQ09OVEVYVF9DTE9CQkVSU19UTFMgKi8KKwor
LyogVGhlIHNpemUgb2YgYHZvaWQgKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZp
bmUgU0laRU9GX1ZPSURfUCA4CisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJ
IEMgaGVhZGVyIGZpbGVzLiAqLworI2RlZmluZSBTVERDX0hFQURFUlMgMQorCisvKiBEZWZpbmUg
aWYgd2UncmUgdG8gdXNlIGxpYmZmaS4gKi8KKyNkZWZpbmUgVVNFX0xJQkZGSSAxCisKKy8qIERl
ZmluZSBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZzcGxpdC1zdGFjayAqLworLy8jZGVmaW5l
IFVTSU5HX1NQTElUX1NUQUNLIDEKKworLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLwor
LyogI3VuZGVmIFZFUlNJT04gKi8KKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlm
IHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2Fu
dCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8K
KyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklH
X0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisj
IGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKy8qICMgIHVuZGVmIFdPUkRTX0JJR0VORElBTiAqLwor
IyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byBgbG9uZyBpbnQnIGlmIDxzeXMvdHlwZXMu
aD4gZG9lcyBub3QgZGVmaW5lLiAqLworLyogI3VuZGVmIG9mZl90ICovCmRpZmYgLS1naXQgYS9n
ZW5lcmF0ZWQvaW5jbHVkZS9ydW50aW1lLmluYyBiL2dlbmVyYXRlZC9pbmNsdWRlL3J1bnRpbWUu
aW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjZlNDEKLS0tIC9kZXYv
bnVsbAorKysgYi9nZW5lcmF0ZWQvaW5jbHVkZS9ydW50aW1lLmluYwpAQCAtMCwwICsxLDk4OCBA
QAorI2RlZmluZSBoYXNoUmFuZG9tQnl0ZXMgMTI4CisjZGVmaW5lIG1heEFsaWduIDgKKyNkZWZp
bmUgaGNoYW5TaXplIDk2CisjZGVmaW5lIG51bUJ1Y2tldHMgMTAyNAorI2RlZmluZSBsb2dTaXpl
IDEzMTA3MgorI2RlZmluZSBhc3NvYyA0CisjZGVmaW5lIG1heENQVVByb2ZTdGFjayA2NAorI2Rl
ZmluZSBidWNrZXRDbnRCaXRzIDMKKyNkZWZpbmUgYnVja2V0Q250IDgKKyNkZWZpbmUgbWF4S2V5
U2l6ZSAxMjgKKyNkZWZpbmUgbWF4VmFsdWVTaXplIDEyOAorI2RlZmluZSBkYXRhT2Zmc2V0IDgK
KyNkZWZpbmUgZW1wdHkgMAorI2RlZmluZSBldmFjdWF0ZWRFbXB0eSAxCisjZGVmaW5lIGV2YWN1
YXRlZFggMgorI2RlZmluZSBldmFjdWF0ZWRZIDMKKyNkZWZpbmUgbWluVG9wSGFzaCA0CisjZGVm
aW5lIGl0ZXJhdG9yIDEKKyNkZWZpbmUgb2xkSXRlcmF0b3IgMgorI2RlZmluZSBoYXNoV3JpdGlu
ZyA0CisjZGVmaW5lIHNhbWVTaXplR3JvdyA4CisjZGVmaW5lIG5vQ2hlY2sgMTg0NDY3NDQwNzM3
MDk1NTE2MTUKKyNkZWZpbmUgbWF4WmVybyAxMDI0CisjZGVmaW5lIGFkZHJCaXRzIDQ4CisjZGVm
aW5lIGNudEJpdHMgMTkKKyNkZWZpbmUgbXV0ZXhfdW5sb2NrZWQgMAorI2RlZmluZSBtdXRleF9s
b2NrZWQgMQorI2RlZmluZSBtdXRleF9zbGVlcGluZyAyCisjZGVmaW5lIGFjdGl2ZV9zcGluIDQK
KyNkZWZpbmUgYWN0aXZlX3NwaW5fY250IDMwCisjZGVmaW5lIHBhc3NpdmVfc3BpbiAxCisjZGVm
aW5lIG1lbVByb2ZpbGUgMQorI2RlZmluZSBibG9ja1Byb2ZpbGUgMgorI2RlZmluZSBtdXRleFBy
b2ZpbGUgMworI2RlZmluZSBidWNrSGFzaFNpemUgMTc5OTk5CisjZGVmaW5lIG1heFN0YWNrIDMy
CisjZGVmaW5lIHBkUmVhZHkgMQorI2RlZmluZSBwZFdhaXQgMgorI2RlZmluZSBwb2xsQmxvY2tT
aXplIDQwOTYKKyNkZWZpbmUgZnJlZXplU3RvcFdhaXQgMjE0NzQ4MzY0NworI2RlZmluZSBmb3Jj
ZVByZWVtcHROUyAxMDAwMDAwMAorI2RlZmluZSB0cmFjZWJhY2tDcmFzaCAxCisjZGVmaW5lIHRy
YWNlYmFja0FsbCAyCisjZGVmaW5lIHRyYWNlYmFja1NoaWZ0IDIKKyNkZWZpbmUgY2FzZVJlY3Yg
MQorI2RlZmluZSBjYXNlU2VuZCAyCisjZGVmaW5lIGNhc2VEZWZhdWx0IDMKKyNkZWZpbmUgJHNp
bmtjb25zdDAgMAorI2RlZmluZSBzZWxlY3RTZW5kIDEKKyNkZWZpbmUgc2VsZWN0UmVjdiAyCisj
ZGVmaW5lIHNlbGVjdERlZmF1bHQgMworI2RlZmluZSBzZW1UYWJTaXplIDI1MQorI2RlZmluZSBz
ZW1hQmxvY2tQcm9maWxlIDEKKyNkZWZpbmUgc2VtYU11dGV4UHJvZmlsZSAyCisjZGVmaW5lIHNp
Z0lkbGUgMAorI2RlZmluZSBzaWdSZWNlaXZpbmcgMQorI2RlZmluZSBzaWdTZW5kaW5nIDIKKyNk
ZWZpbmUgc21hbGxTaXplRGl2IDgKKyNkZWZpbmUgc21hbGxTaXplTWF4IDEwMjQKKyNkZWZpbmUg
bGFyZ2VTaXplRGl2IDEyOAorI2RlZmluZSB0bXBTdHJpbmdCdWZTaXplIDMyCisjZGVmaW5lIG1h
eFVpbnQgMTg0NDY3NDQwNzM3MDk1NTE2MTUKKyNkZWZpbmUgbWF4SW50IDkyMjMzNzIwMzY4NTQ3
NzU4MDcKKyNkZWZpbmUgZ2NNYXJrV29ya2VyRGVkaWNhdGVkTW9kZSAwCisjZGVmaW5lIGdjTWFy
a1dvcmtlckZyYWN0aW9uYWxNb2RlIDEKKyNkZWZpbmUgZ2NNYXJrV29ya2VySWRsZU1vZGUgMgor
I2RlZmluZSB0cmFjZUV2Tm9uZSAwCisjZGVmaW5lIHRyYWNlRXZCYXRjaCAxCisjZGVmaW5lIHRy
YWNlRXZGcmVxdWVuY3kgMgorI2RlZmluZSB0cmFjZUV2U3RhY2sgMworI2RlZmluZSB0cmFjZUV2
R29tYXhwcm9jcyA0CisjZGVmaW5lIHRyYWNlRXZQcm9jU3RhcnQgNQorI2RlZmluZSB0cmFjZUV2
UHJvY1N0b3AgNgorI2RlZmluZSB0cmFjZUV2R0NTdGFydCA3CisjZGVmaW5lIHRyYWNlRXZHQ0Rv
bmUgOAorI2RlZmluZSB0cmFjZUV2R0NTY2FuU3RhcnQgOQorI2RlZmluZSB0cmFjZUV2R0NTY2Fu
RG9uZSAxMAorI2RlZmluZSB0cmFjZUV2R0NTd2VlcFN0YXJ0IDExCisjZGVmaW5lIHRyYWNlRXZH
Q1N3ZWVwRG9uZSAxMgorI2RlZmluZSB0cmFjZUV2R29DcmVhdGUgMTMKKyNkZWZpbmUgdHJhY2VF
dkdvU3RhcnQgMTQKKyNkZWZpbmUgdHJhY2VFdkdvRW5kIDE1CisjZGVmaW5lIHRyYWNlRXZHb1N0
b3AgMTYKKyNkZWZpbmUgdHJhY2VFdkdvU2NoZWQgMTcKKyNkZWZpbmUgdHJhY2VFdkdvUHJlZW1w
dCAxOAorI2RlZmluZSB0cmFjZUV2R29TbGVlcCAxOQorI2RlZmluZSB0cmFjZUV2R29CbG9jayAy
MAorI2RlZmluZSB0cmFjZUV2R29VbmJsb2NrIDIxCisjZGVmaW5lIHRyYWNlRXZHb0Jsb2NrU2Vu
ZCAyMgorI2RlZmluZSB0cmFjZUV2R29CbG9ja1JlY3YgMjMKKyNkZWZpbmUgdHJhY2VFdkdvQmxv
Y2tTZWxlY3QgMjQKKyNkZWZpbmUgdHJhY2VFdkdvQmxvY2tTeW5jIDI1CisjZGVmaW5lIHRyYWNl
RXZHb0Jsb2NrQ29uZCAyNgorI2RlZmluZSB0cmFjZUV2R29CbG9ja05ldCAyNworI2RlZmluZSB0
cmFjZUV2R29TeXNDYWxsIDI4CisjZGVmaW5lIHRyYWNlRXZHb1N5c0V4aXQgMjkKKyNkZWZpbmUg
dHJhY2VFdkdvU3lzQmxvY2sgMzAKKyNkZWZpbmUgdHJhY2VFdkdvV2FpdGluZyAzMQorI2RlZmlu
ZSB0cmFjZUV2R29JblN5c2NhbGwgMzIKKyNkZWZpbmUgdHJhY2VFdkhlYXBBbGxvYyAzMworI2Rl
ZmluZSB0cmFjZUV2TmV4dEdDIDM0CisjZGVmaW5lIHRyYWNlRXZUaW1lckdvcm91dGluZSAzNQor
I2RlZmluZSB0cmFjZUV2RnV0aWxlV2FrZXVwIDM2CisjZGVmaW5lIHRyYWNlRXZTdHJpbmcgMzcK
KyNkZWZpbmUgdHJhY2VFdkdvU3RhcnRMb2NhbCAzOAorI2RlZmluZSB0cmFjZUV2R29VbmJsb2Nr
TG9jYWwgMzkKKyNkZWZpbmUgdHJhY2VFdkdvU3lzRXhpdExvY2FsIDQwCisjZGVmaW5lIHRyYWNl
RXZHb1N0YXJ0TGFiZWwgNDEKKyNkZWZpbmUgdHJhY2VFdkdvQmxvY2tHQyA0MgorI2RlZmluZSB0
cmFjZUV2Q291bnQgNDMKKyNkZWZpbmUgdHJhY2VUaWNrRGl2IDY0CisjZGVmaW5lIHRyYWNlU3Rh
Y2tTaXplIDEyOAorI2RlZmluZSB0cmFjZUJ5dGVzUGVyTnVtYmVyIDEwCisjZGVmaW5lIHRyYWNl
QXJnQ291bnRTaGlmdCA2CisjZGVmaW5lIHRyYWNlRnV0aWxlV2FrZXVwIDEyOAorI2RlZmluZSBr
aW5kQm9vbCAxCisjZGVmaW5lIGtpbmRJbnQgMgorI2RlZmluZSBraW5kSW50OCAzCisjZGVmaW5l
IGtpbmRJbnQxNiA0CisjZGVmaW5lIGtpbmRJbnQzMiA1CisjZGVmaW5lIGtpbmRJbnQ2NCA2Cisj
ZGVmaW5lIGtpbmRVaW50IDcKKyNkZWZpbmUga2luZFVpbnQ4IDgKKyNkZWZpbmUga2luZFVpbnQx
NiA5CisjZGVmaW5lIGtpbmRVaW50MzIgMTAKKyNkZWZpbmUga2luZFVpbnQ2NCAxMQorI2RlZmlu
ZSBraW5kVWludHB0ciAxMgorI2RlZmluZSBraW5kRmxvYXQzMiAxMworI2RlZmluZSBraW5kRmxv
YXQ2NCAxNAorI2RlZmluZSBraW5kQ29tcGxleDY0IDE1CisjZGVmaW5lIGtpbmRDb21wbGV4MTI4
IDE2CisjZGVmaW5lIGtpbmRBcnJheSAxNworI2RlZmluZSBraW5kQ2hhbiAxOAorI2RlZmluZSBr
aW5kRnVuYyAxOQorI2RlZmluZSBraW5kSW50ZXJmYWNlIDIwCisjZGVmaW5lIGtpbmRNYXAgMjEK
KyNkZWZpbmUga2luZFB0ciAyMgorI2RlZmluZSBraW5kU2xpY2UgMjMKKyNkZWZpbmUga2luZFN0
cmluZyAyNAorI2RlZmluZSBraW5kU3RydWN0IDI1CisjZGVmaW5lIGtpbmRVbnNhZmVQb2ludGVy
IDI2CisjZGVmaW5lIGtpbmREaXJlY3RJZmFjZSAzMgorI2RlZmluZSBraW5kR0NQcm9nIDY0Cisj
ZGVmaW5lIGtpbmROb1BvaW50ZXJzIDEyOAorI2RlZmluZSBraW5kTWFzayAzMQorI2RlZmluZSBy
dW5lRXJyb3IgNjU1MzMKKyNkZWZpbmUgcnVuZVNlbGYgMTI4CisjZGVmaW5lIG1heFJ1bmUgMTEx
NDExMQorI2RlZmluZSBzdXJyb2dhdGVNaW4gNTUyOTYKKyNkZWZpbmUgc3Vycm9nYXRlTWF4IDU3
MzQzCisjZGVmaW5lIHQxIDAKKyNkZWZpbmUgdHggMTI4CisjZGVmaW5lIHQyIDE5MgorI2RlZmlu
ZSB0MyAyMjQKKyNkZWZpbmUgdDQgMjQwCisjZGVmaW5lIHQ1IDI0OAorI2RlZmluZSBtYXNreCA2
MworI2RlZmluZSBtYXNrMiAzMQorI2RlZmluZSBtYXNrMyAxNQorI2RlZmluZSBtYXNrNCA3Cisj
ZGVmaW5lIHJ1bmUxTWF4IDEyNworI2RlZmluZSBydW5lMk1heCAyMDQ3CisjZGVmaW5lIHJ1bmUz
TWF4IDY1NTM1CisjZGVmaW5lIGxvY2IgMTI4CisjZGVmaW5lIGhpY2IgMTkxCisKK3N0cnVjdCBz
dWRvZzsKKworc3RydWN0IHdhaXRxIHsKKwlzdHJ1Y3Qgc3Vkb2cqIGZpcnN0OworCXN0cnVjdCBz
dWRvZyogbGFzdDsKK307CisKK3N0cnVjdCBjcHVwcm9mRW50cnkgeworCXVpbnRwdHJfdCBjb3Vu
dDsKKwlpbnQ2NF90IGRlcHRoOworCXVpbnRwdHJfdCBzdGFja1s2NF07Cit9OworCitzdHJ1Y3Qg
VHlwZUFzc2VydGlvbkVycm9yIHsKKwlTdHJpbmcgaW50ZXJmYWNlU3RyaW5nOworCVN0cmluZyBj
b25jcmV0ZVN0cmluZzsKKwlTdHJpbmcgYXNzZXJ0ZWRTdHJpbmc7CisJU3RyaW5nIG1pc3NpbmdN
ZXRob2Q7Cit9OworCitzdHJ1Y3QgZXJyb3JDU3RyaW5nIHsKKwl1aW50cHRyX3QgY3N0cjsKK307
CisKK3N0cnVjdCBibWFwIHsKKwl1aW50OF90IHRvcGhhc2hbOF07Cit9OworCitzdHJ1Y3QgaGl0
ZXIgeworCXZvaWQqIGtleTsKKwl2b2lkKiB2YWx1ZTsKKwl2b2lkKiB0OworCXZvaWQqIGg7CisJ
dm9pZCogYnVja2V0czsKKwlzdHJ1Y3QgYm1hcCogYnB0cjsKKwlTbGljZSogb3ZlcmZsb3dbMl07
CisJdWludHB0cl90IHN0YXJ0QnVja2V0OworCXVpbnQ4X3Qgb2Zmc2V0OworCV9Cb29sIHdyYXBw
ZWQ7CisJdWludDhfdCBCOworCXVpbnQ4X3QgaTsKKwl1aW50cHRyX3QgYnVja2V0OworCXVpbnRw
dHJfdCBjaGVja0J1Y2tldDsKK307CisKK3N0cnVjdCBtbGluazsKKworc3RydWN0IG1jYWNoZWxp
c3QgeworCXN0cnVjdCBtbGluayogbGlzdDsKKwl1aW50MzJfdCBubGlzdDsKK307CisKK3N0cnVj
dCBtc3BhbjsKKworc3RydWN0IG1jYWNoZSB7CisJaW50MzJfdCBuZXh0X3NhbXBsZTsKKwl1aW50
cHRyX3QgbG9jYWxfY2FjaGVhbGxvYzsKKwl2b2lkKiB0aW55OworCXVpbnRwdHJfdCB0aW55c2l6
ZTsKKwlzdHJ1Y3QgbXNwYW4qIGFsbG9jWzY3XTsKKwlzdHJ1Y3QgbWNhY2hlbGlzdCBmcmVlWzY3
XTsKKwl1aW50cHRyX3QgbG9jYWxfbmxvb2t1cDsKKwl1aW50cHRyX3QgbG9jYWxfbGFyZ2VmcmVl
OworCXVpbnRwdHJfdCBsb2NhbF9ubGFyZ2VmcmVlOworCXVpbnRwdHJfdCBsb2NhbF9uc21hbGxm
cmVlWzY3XTsKK307CisKK3N0cnVjdCBtdHlwZXMgeworCXVpbnQ4X3QgY29tcHJlc3Npb247CisJ
dWludHB0cl90IGRhdGE7Cit9OworCitzdHJ1Y3Qgc3BlY2lhbCB7CisJc3RydWN0IHNwZWNpYWwq
IG5leHQ7CisJdWludDE2X3Qgb2Zmc2V0OworCXVpbnQ4X3Qga2luZDsKK307CisKK3N0cnVjdCBt
bGluayB7CisJc3RydWN0IG1saW5rKiBuZXh0OworfTsKKworc3RydWN0IGJ1Y2tldCB7CisJc3Ry
dWN0IGJ1Y2tldCogbmV4dDsKKwlzdHJ1Y3QgYnVja2V0KiBhbGxuZXh0OworCWludDY0X3QgdHlw
OworCXVpbnRwdHJfdCBoYXNoOworCXVpbnRwdHJfdCBzaXplOworCXVpbnRwdHJfdCBuc3RrOwor
fTsKKworc3RydWN0IG1lbVJlY29yZCB7CisJdWludHB0cl90IGFsbG9jczsKKwl1aW50cHRyX3Qg
ZnJlZXM7CisJdWludHB0cl90IGFsbG9jX2J5dGVzOworCXVpbnRwdHJfdCBmcmVlX2J5dGVzOwor
CXVpbnRwdHJfdCBwcmV2X2FsbG9jczsKKwl1aW50cHRyX3QgcHJldl9mcmVlczsKKwl1aW50cHRy
X3QgcHJldl9hbGxvY19ieXRlczsKKwl1aW50cHRyX3QgcHJldl9mcmVlX2J5dGVzOworCXVpbnRw
dHJfdCByZWNlbnRfYWxsb2NzOworCXVpbnRwdHJfdCByZWNlbnRfZnJlZXM7CisJdWludHB0cl90
IHJlY2VudF9hbGxvY19ieXRlczsKKwl1aW50cHRyX3QgcmVjZW50X2ZyZWVfYnl0ZXM7Cit9Owor
CitzdHJ1Y3QgYmxvY2tSZWNvcmQgeworCWludDY0X3QgY291bnQ7CisJaW50NjRfdCBjeWNsZXM7
Cit9OworCitzdHJ1Y3QgU3RhY2tSZWNvcmQgeworCXVpbnRwdHJfdCBTdGFjazBbMzJdOworfTsK
Kworc3RydWN0IE1lbVByb2ZpbGVSZWNvcmQgeworCWludDY0X3QgQWxsb2NCeXRlczsKKwlpbnQ2
NF90IEZyZWVCeXRlczsKKwlpbnQ2NF90IEFsbG9jT2JqZWN0czsKKwlpbnQ2NF90IEZyZWVPYmpl
Y3RzOworCXVpbnRwdHJfdCBTdGFjazBbMzJdOworfTsKKworc3RydWN0IG1zdGF0cyB7CisJdWlu
dDY0X3QgYWxsb2M7CisJdWludDY0X3QgdG90YWxfYWxsb2M7CisJdWludDY0X3Qgc3lzOworCXVp
bnQ2NF90IG5sb29rdXA7CisJdWludDY0X3Qgbm1hbGxvYzsKKwl1aW50NjRfdCBuZnJlZTsKKwl1
aW50NjRfdCBoZWFwX2FsbG9jOworCXVpbnQ2NF90IGhlYXBfc3lzOworCXVpbnQ2NF90IGhlYXBf
aWRsZTsKKwl1aW50NjRfdCBoZWFwX2ludXNlOworCXVpbnQ2NF90IGhlYXBfcmVsZWFzZWQ7CisJ
dWludDY0X3QgaGVhcF9vYmplY3RzOworCXVpbnQ2NF90IHN0YWNrc19pbnVzZTsKKwl1aW50NjRf
dCBzdGFja3Nfc3lzOworCXVpbnQ2NF90IG1zcGFuX2ludXNlOworCXVpbnQ2NF90IG1zcGFuX3N5
czsKKwl1aW50NjRfdCBtY2FjaGVfaW51c2U7CisJdWludDY0X3QgbWNhY2hlX3N5czsKKwl1aW50
NjRfdCBidWNraGFzaF9zeXM7CisJdWludDY0X3QgZ2Nfc3lzOworCXVpbnQ2NF90IG90aGVyX3N5
czsKKwl1aW50NjRfdCBuZXh0X2djOworCXVpbnQ2NF90IGxhc3RfZ2M7CisJdWludDY0X3QgcGF1
c2VfdG90YWxfbnM7CisJdWludDY0X3QgcGF1c2VfbnNbMjU2XTsKKwl1aW50NjRfdCBwYXVzZV9l
bmRbMjU2XTsKKwl1aW50MzJfdCBudW1nYzsKKwl1aW50MzJfdCBudW1mb3JjZWRnYzsKKwlkb3Vi
bGUgZ2NfY3B1X2ZyYWN0aW9uOworCV9Cb29sIGVuYWJsZWdjOworCV9Cb29sIGRlYnVnZ2M7CisJ
c3RydWN0IHsKKwl1aW50MzJfdCBzaXplOworCXVpbnQ2NF90IG5tYWxsb2M7CisJdWludDY0X3Qg
bmZyZWU7CisJfSBieV9zaXplWzY3XTsKKwl1aW50NjRfdCB0aW55YWxsb2NzOworCXVpbnQ2NF90
IGdjX3RyaWdnZXI7CisJdWludDY0X3QgaGVhcF9saXZlOworCXVpbnQ2NF90IGhlYXBfc2NhbjsK
Kwl1aW50NjRfdCBoZWFwX21hcmtlZDsKK307CisKK3N0cnVjdCBNZW1TdGF0cyB7CisJdWludDY0
X3QgQWxsb2M7CisJdWludDY0X3QgVG90YWxBbGxvYzsKKwl1aW50NjRfdCBTeXM7CisJdWludDY0
X3QgTG9va3VwczsKKwl1aW50NjRfdCBNYWxsb2NzOworCXVpbnQ2NF90IEZyZWVzOworCXVpbnQ2
NF90IEhlYXBBbGxvYzsKKwl1aW50NjRfdCBIZWFwU3lzOworCXVpbnQ2NF90IEhlYXBJZGxlOwor
CXVpbnQ2NF90IEhlYXBJbnVzZTsKKwl1aW50NjRfdCBIZWFwUmVsZWFzZWQ7CisJdWludDY0X3Qg
SGVhcE9iamVjdHM7CisJdWludDY0X3QgU3RhY2tJbnVzZTsKKwl1aW50NjRfdCBTdGFja1N5czsK
Kwl1aW50NjRfdCBNU3BhbkludXNlOworCXVpbnQ2NF90IE1TcGFuU3lzOworCXVpbnQ2NF90IE1D
YWNoZUludXNlOworCXVpbnQ2NF90IE1DYWNoZVN5czsKKwl1aW50NjRfdCBCdWNrSGFzaFN5czsK
Kwl1aW50NjRfdCBHQ1N5czsKKwl1aW50NjRfdCBPdGhlclN5czsKKwl1aW50NjRfdCBOZXh0R0M7
CisJdWludDY0X3QgTGFzdEdDOworCXVpbnQ2NF90IFBhdXNlVG90YWxOczsKKwl1aW50NjRfdCBQ
YXVzZU5zWzI1Nl07CisJdWludDY0X3QgUGF1c2VFbmRbMjU2XTsKKwl1aW50MzJfdCBOdW1HQzsK
Kwl1aW50MzJfdCBOdW1Gb3JjZWRHQzsKKwlkb3VibGUgR0NDUFVGcmFjdGlvbjsKKwlfQm9vbCBF
bmFibGVHQzsKKwlfQm9vbCBEZWJ1Z0dDOworCXN0cnVjdCB7CisJdWludDMyX3QgU2l6ZTsKKwl1
aW50NjRfdCBNYWxsb2NzOworCXVpbnQ2NF90IEZyZWVzOworCX0gQnlTaXplWzYxXTsKK307CisK
K3N0cnVjdCBtT1MgeworCXVpbnQ4X3QgdW51c2VkOworfTsKKworc3RydWN0IHJhbmRvbU9yZGVy
IHsKKwl1aW50MzJfdCBjb3VudDsKKwlTbGljZSBjb3ByaW1lczsKK307CisKK3N0cnVjdCByYW5k
b21FbnVtIHsKKwl1aW50MzJfdCBpOworCXVpbnQzMl90IGNvdW50OworCXVpbnQzMl90IHBvczsK
Kwl1aW50MzJfdCBpbmM7Cit9OworCitzdHJ1Y3QgZGJnVmFyIHsKKwlTdHJpbmcgbmFtZTsKKwlp
bnQzMl90KiB2YWx1ZTsKK307CisKK3N0cnVjdCBkZWJ1Z1ZhcnMgeworCWludDMyX3QgYWxsb2Nm
cmVldHJhY2U7CisJaW50MzJfdCBjZ29jaGVjazsKKwlpbnQzMl90IGVmZW5jZTsKKwlpbnQzMl90
IGdjY2hlY2ttYXJrOworCWludDMyX3QgZ2NwYWNlcnRyYWNlOworCWludDMyX3QgZ2NzaHJpbmtz
dGFja29mZjsKKwlpbnQzMl90IGdjc3RhY2tiYXJyaWVyb2ZmOworCWludDMyX3QgZ2NzdGFja2Jh
cnJpZXJhbGw7CisJaW50MzJfdCBnY3Jlc2NhbnN0YWNrczsKKwlpbnQzMl90IGdjc3RvcHRoZXdv
cmxkOworCWludDMyX3QgZ2N0cmFjZTsKKwlpbnQzMl90IGludmFsaWRwdHI7CisJaW50MzJfdCBz
YnJrOworCWludDMyX3Qgc2NhdmVuZ2U7CisJaW50MzJfdCBzY2hlZGRldGFpbDsKKwlpbnQzMl90
IHNjaGVkdHJhY2U7CisJaW50MzJfdCB3YnNoYWRvdzsKK307CisKK3N0cnVjdCBtdXRleCB7CisJ
dWludHB0cl90IGtleTsKK307CisKK3N0cnVjdCBub3RlIHsKKwl1aW50cHRyX3Qga2V5OworfTsK
Kworc3RydWN0IGZ1bmN2YWwgeworCXVpbnRwdHJfdCBmbjsKK307CisKK3N0cnVjdCBpZmFjZSB7
CisJdm9pZCogdGFiOworCXZvaWQqIGRhdGE7Cit9OworCitzdHJ1Y3QgZWZhY2UgeworCXZvaWQq
IF90eXBlOworCXZvaWQqIGRhdGE7Cit9OworCitzdHJ1Y3QgZzsKKworc3RydWN0IGhjaGFuOwor
CitzdHJ1Y3Qgc3Vkb2cgeworCXN0cnVjdCBnKiBnOworCXVpbnQzMl90KiBzZWxlY3Rkb25lOwor
CXN0cnVjdCBzdWRvZyogbmV4dDsKKwlzdHJ1Y3Qgc3Vkb2cqIHByZXY7CisJdm9pZCogZWxlbTsK
KwlpbnQ2NF90IGFjcXVpcmV0aW1lOworCWludDY0X3QgcmVsZWFzZXRpbWU7CisJdWludDMyX3Qg
dGlja2V0OworCXN0cnVjdCBzdWRvZyogd2FpdGxpbms7CisJc3RydWN0IGhjaGFuKiBjOworfTsK
Kworc3RydWN0IGdjc3RhdHMgeworCXVpbnQ2NF90IG5oYW5kb2ZmOworCXVpbnQ2NF90IG5oYW5k
b2ZmY250OworCXVpbnQ2NF90IG5wcm9jeWllbGQ7CisJdWludDY0X3Qgbm9zeWllbGQ7CisJdWlu
dDY0X3QgbnNsZWVwOworfTsKKworc3RydWN0IF9wYW5pYzsKKworc3RydWN0IF9kZWZlcjsKKwor
c3RydWN0IG07CisKK3N0cnVjdCB0cmFjZWJhY2tnOworCitzdHJ1Y3QgZyB7CisJc3RydWN0IF9w
YW5pYyogX3BhbmljOworCXN0cnVjdCBfZGVmZXIqIF9kZWZlcjsKKwlzdHJ1Y3QgbSogbTsKKwl1
aW50cHRyX3Qgc3lzY2FsbHNwOworCXVpbnRwdHJfdCBzeXNjYWxscGM7CisJdm9pZCogcGFyYW07
CisJdWludDMyX3QgYXRvbWljc3RhdHVzOworCWludDY0X3QgZ29pZDsKKwlpbnQ2NF90IHdhaXRz
aW5jZTsKKwlTdHJpbmcgd2FpdHJlYXNvbjsKKwl1aW50NjRfdCBzY2hlZGxpbms7CisJX0Jvb2wg
cHJlZW1wdDsKKwlfQm9vbCBwYW5pY29uZmF1bHQ7CisJX0Jvb2wgcHJlZW1wdHNjYW47CisJX0Jv
b2wgZ2NzY2FuZG9uZTsKKwlfQm9vbCBnY3NjYW52YWxpZDsKKwlfQm9vbCB0aHJvd3NwbGl0Owor
CWludDhfdCByYWNlaWdub3JlOworCV9Cb29sIHN5c2Jsb2NrdHJhY2VkOworCWludDY0X3Qgc3lz
ZXhpdHRpY2tzOworCXVpbnQ2NF90IHRyYWNlc2VxOworCXVpbnQ2NF90IHRyYWNlbGFzdHA7CisJ
c3RydWN0IG0qIGxvY2tlZG07CisJdWludDMyX3Qgc2lnOworCVNsaWNlIHdyaXRlYnVmOworCXVp
bnRwdHJfdCBzaWdjb2RlMDsKKwl1aW50cHRyX3Qgc2lnY29kZTE7CisJdWludHB0cl90IHNpZ3Bj
OworCXVpbnRwdHJfdCBnb3BjOworCXVpbnRwdHJfdCBzdGFydHBjOworCXN0cnVjdCBzdWRvZyog
d2FpdGluZzsKKwlpbnQzMl90IGdjUmVzY2FuOworCWludDY0X3QgZ2NBc3Npc3RCeXRlczsKKwl2
b2lkKiBleGNlcHRpb247CisJX0Jvb2wgaXNmb3JlaWduOworCXZvaWQqIGdjc3RhY2s7CisJdWlu
dHB0cl90IGdjc3RhY2tzaXplOworCXZvaWQqIGdjbmV4dHNlZ21lbnQ7CisJdm9pZCogZ2NuZXh0
c3A7CisJdm9pZCogZ2Npbml0aWFsc3A7CisJdm9pZCogZ2NyZWdzWzEyMl07CisJdm9pZCogZW50
cnk7CisJX0Jvb2wgZnJvbWdvZ287CisJX0Jvb2wgaXNzeXN0ZW07CisJX0Jvb2wgaXNiYWNrZ3Jv
dW5kOworCXN0cnVjdCB0cmFjZWJhY2tnKiB0cmFjZWJhY2s7CisJdm9pZCogY29udGV4dFsxMjJd
OworCXZvaWQqIHN0YWNrY29udGV4dFsxMF07Cit9OworCitzdHJ1Y3QgcCB7CisJc3RydWN0IG11
dGV4IGxvY2s7CisJaW50MzJfdCBpZDsKKwl1aW50MzJfdCBzdGF0dXM7CisJdWludDY0X3QgbGlu
azsKKwl1aW50MzJfdCBzY2hlZHRpY2s7CisJdWludDMyX3Qgc3lzY2FsbHRpY2s7CisJdWludDY0
X3QgbTsKKwlzdHJ1Y3QgbWNhY2hlKiBtY2FjaGU7CisJU2xpY2UgZGVmZXJwb29sOworCXN0cnVj
dCBfZGVmZXIqIGRlZmVycG9vbGJ1ZlszMl07CisJdWludDY0X3QgZ29pZGNhY2hlOworCXVpbnQ2
NF90IGdvaWRjYWNoZWVuZDsKKwl1aW50MzJfdCBydW5xaGVhZDsKKwl1aW50MzJfdCBydW5xdGFp
bDsKKwl1aW50NjRfdCBydW5xWzI1Nl07CisJdWludDY0X3QgcnVubmV4dDsKKwlzdHJ1Y3QgZyog
Z2ZyZWU7CisJaW50MzJfdCBnZnJlZWNudDsKKwlTbGljZSBzdWRvZ2NhY2hlOworCXN0cnVjdCBz
dWRvZyogc3Vkb2didWZbMTI4XTsKKwl1aW50NjRfdCB0cmFjZWJ1ZjsKKwlpbnQ2NF90IGdjQXNz
aXN0VGltZTsKKwl1aW50NjRfdCBnY0JnTWFya1dvcmtlcjsKKwlpbnQ2NF90IGdjTWFya1dvcmtl
ck1vZGU7CisJdWludDMyX3QgcnVuU2FmZVBvaW50Rm47CisJdWludDhfdCBwYWRbNjRdOworfTsK
Kworc3RydWN0IHNjaGVkdCB7CisJdWludDY0X3QgZ29pZGdlbjsKKwl1aW50NjRfdCBsYXN0cG9s
bDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwl1aW50NjRfdCBtaWRsZTsKKwlpbnQzMl90IG5taWRs
ZTsKKwlpbnQzMl90IG5taWRsZWxvY2tlZDsKKwlpbnQzMl90IG1jb3VudDsKKwlpbnQzMl90IG1h
eG1jb3VudDsKKwl1aW50MzJfdCBuZ3N5czsKKwl1aW50NjRfdCBwaWRsZTsKKwl1aW50MzJfdCBu
cGlkbGU7CisJdWludDMyX3Qgbm1zcGlubmluZzsKKwl1aW50NjRfdCBydW5xaGVhZDsKKwl1aW50
NjRfdCBydW5xdGFpbDsKKwlpbnQzMl90IHJ1bnFzaXplOworCXN0cnVjdCBtdXRleCBnZmxvY2s7
CisJc3RydWN0IGcqIGdmcmVlOworCWludDMyX3QgbmdmcmVlOworCXN0cnVjdCBtdXRleCBzdWRv
Z2xvY2s7CisJc3RydWN0IHN1ZG9nKiBzdWRvZ2NhY2hlOworCXN0cnVjdCBtdXRleCBkZWZlcmxv
Y2s7CisJc3RydWN0IF9kZWZlciogZGVmZXJwb29sOworCXVpbnQzMl90IGdjd2FpdGluZzsKKwlp
bnQzMl90IHN0b3B3YWl0OworCXN0cnVjdCBub3RlIHN0b3Bub3RlOworCXVpbnQzMl90IHN5c21v
bndhaXQ7CisJc3RydWN0IG5vdGUgc3lzbW9ubm90ZTsKKwlGdW5jVmFsKiBzYWZlUG9pbnRGbjsK
KwlpbnQzMl90IHNhZmVQb2ludFdhaXQ7CisJc3RydWN0IG5vdGUgc2FmZVBvaW50Tm90ZTsKKwlp
bnQzMl90IHByb2ZpbGVoejsKKwlpbnQ2NF90IHByb2NyZXNpemV0aW1lOworCWludDY0X3QgdG90
YWx0aW1lOworfTsKKworc3RydWN0IGxmbm9kZSB7CisJdWludDY0X3QgbmV4dDsKKwl1aW50cHRy
X3QgcHVzaGNudDsKK307CisKK3N0cnVjdCBmb3JjZWdjc3RhdGUgeworCXN0cnVjdCBtdXRleCBs
b2NrOworCXN0cnVjdCBnKiBnOworCXVpbnQzMl90IGlkbGU7Cit9OworCitzdHJ1Y3QgX2RlZmVy
IHsKKwlzdHJ1Y3QgX2RlZmVyKiBsaW5rOworCV9Cb29sKiBmcmFtZTsKKwlzdHJ1Y3QgX3Bhbmlj
KiBfcGFuaWM7CisJdWludHB0cl90IHBmbjsKKwl2b2lkKiBhcmc7CisJdWludHB0cl90IHJldGFk
ZHI7CisJX0Jvb2wgbWFrZWZ1bmNjYW5yZWNvdmVyOworCV9Cb29sIHNwZWNpYWw7Cit9OworCitz
dHJ1Y3QgX3BhbmljIHsKKwlzdHJ1Y3QgX3BhbmljKiBsaW5rOworCUVmYWNlIGFyZzsKKwlfQm9v
bCByZWNvdmVyZWQ7CisJX0Jvb2wgaXNmb3JlaWduOworfTsKKworc3RydWN0IHNpZ3NldCB7CisJ
dWludDY0X3QgX192YWxbMTZdOworfTsKKworc3RydWN0IHNjYXNlIHsKKwl2b2lkKiBlbGVtOwor
CXN0cnVjdCBoY2hhbiogYzsKKwl1aW50cHRyX3QgcGM7CisJdWludDE2X3Qga2luZDsKKwl1aW50
MTZfdCBpbmRleDsKKwlfQm9vbCogcmVjZWl2ZWRwOworCWludDY0X3QgcmVsZWFzZXRpbWU7Cit9
OworCitzdHJ1Y3QgcnVudGltZVNlbGVjdCB7CisJaW50NjRfdCBkaXI7CisJdm9pZCogdHlwOwor
CXN0cnVjdCBoY2hhbiogY2g7CisJdm9pZCogdmFsOworfTsKKworc3RydWN0IHNlbWFSb290IHsK
KwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3Qgc3Vkb2cqIGhlYWQ7CisJc3RydWN0IHN1ZG9n
KiB0YWlsOworCXVpbnQzMl90IG53YWl0OworfTsKKworc3RydWN0IG5vdGlmeUxpc3QgeworCXVp
bnQzMl90IHdhaXQ7CisJdWludDMyX3Qgbm90aWZ5OworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0
cnVjdCBzdWRvZyogaGVhZDsKKwlzdHJ1Y3Qgc3Vkb2cqIHRhaWw7Cit9OworCitzdHJ1Y3Qgc2ln
VGFiVCB7CisJaW50MzJfdCBmbGFnczsKKwlTdHJpbmcgbmFtZTsKK307CisKK3N0cnVjdCBfc2ln
aW5mb190OworCitzdHJ1Y3Qgc2lnY3R4dCB7CisJc3RydWN0IF9zaWdpbmZvX3QqIGluZm87CisJ
dm9pZCogY3R4dDsKK307CisKK3N0cnVjdCBkaXZNYWdpYyB7CisJdWludDhfdCBzaGlmdDsKKwl1
aW50OF90IHNoaWZ0MjsKKwl1aW50MTZfdCBtdWw7CisJdWludDE2X3QgYmFzZU1hc2s7Cit9Owor
CitzdHJ1Y3Qgc2xpY2UgeworCXZvaWQqIGFycmF5OworCWludDY0X3QgbGVuOworCWludDY0X3Qg
Y2FwOworfTsKKworc3RydWN0IHN0cmluZ1N0cnVjdCB7CisJdm9pZCogc3RyOworCWludDY0X3Qg
bGVuOworfTsKKworc3RydWN0IHN0cmluZ1N0cnVjdERXQVJGIHsKKwl1aW50OF90KiBzdHI7CisJ
aW50NjRfdCBsZW47Cit9OworCitzdHJ1Y3QgRnJhbWVzIHsKKwlTbGljZSBjYWxsZXJzOworCXVp
bnRwdHJfdCBsYXN0OworCWludDY0X3QgbGFzdENvdW50OworfTsKKworc3RydWN0IEZ1bmM7CisK
K3N0cnVjdCBGcmFtZSB7CisJdWludHB0cl90IFBDOworCXN0cnVjdCBGdW5jKiBGdW5jOworCVN0
cmluZyBGdW5jdGlvbjsKKwlTdHJpbmcgRmlsZTsKKwlpbnQ2NF90IExpbmU7CisJdWludHB0cl90
IEVudHJ5OworfTsKKworc3RydWN0IEZ1bmMgeworCVN0cmluZyBuYW1lOworCXVpbnRwdHJfdCBl
bnRyeTsKK307CisKK3N0cnVjdCB0aW1lciB7CisJaW50NjRfdCBpOworCWludDY0X3Qgd2hlbjsK
KwlpbnQ2NF90IHBlcmlvZDsKKwlGdW5jVmFsKiBmOworCUVmYWNlIGFyZzsKKwl1aW50cHRyX3Qg
c2VxOworfTsKKworc3RydWN0IHRyYWNlRnJhbWUgeworCXVpbnQ2NF90IGZ1bmNJRDsKKwl1aW50
NjRfdCBmaWxlSUQ7CisJdWludDY0X3QgbGluZTsKK307CisKK3N0cnVjdCB0cmFjZUFsbG9jIHsK
Kwl1aW50NjRfdCBoZWFkOworCXVpbnRwdHJfdCBvZmY7Cit9OworCitzdHJ1Y3QgdHJhY2VBbGxv
Y0Jsb2NrIHsKKwl1aW50NjRfdCBuZXh0OworCXVpbnQ4X3QgZGF0YVs2NTUyOF07Cit9OworCitz
dHJ1Y3QgbG9jYXRpb24geworCXVpbnRwdHJfdCBwYzsKKwlTdHJpbmcgZmlsZW5hbWU7CisJU3Ry
aW5nIGZ1bmN0aW9uOworCWludDY0X3QgbGluZW5vOworfTsKKworc3RydWN0IG1ldGhvZCB7CisJ
U3RyaW5nKiBuYW1lOworCVN0cmluZyogcGtnUGF0aDsKKwl2b2lkKiBtdHlwOworCXZvaWQqIHR5
cDsKKwl2b2lkKiB0Zm47Cit9OworCitzdHJ1Y3QgdW5jb21tb250eXBlIHsKKwlTdHJpbmcqIG5h
bWU7CisJU3RyaW5nKiBwa2dQYXRoOworCVNsaWNlIG1ldGhvZHM7Cit9OworCitzdHJ1Y3QgaW1l
dGhvZCB7CisJU3RyaW5nKiBuYW1lOworCVN0cmluZyogcGtnUGF0aDsKKwl2b2lkKiB0eXA7Cit9
OworCitzdHJ1Y3Qgc3RydWN0ZmllbGQgeworCVN0cmluZyogbmFtZTsKKwlTdHJpbmcqIHBrZ1Bh
dGg7CisJdm9pZCogdHlwOworCVN0cmluZyogdGFnOworCXVpbnRwdHJfdCBvZmZzZXQ7Cit9Owor
CitzdHJ1Y3QgdGltZXZhbCB7CisJaW50NjRfdCB0dl9zZWM7CisJaW50NjRfdCB0dl91c2VjOwor
fTsKKworc3RydWN0IHRpbWVzcGVjIHsKKwlpbnQ2NF90IHR2X3NlYzsKKwlpbnQ2NF90IHR2X25z
ZWM7Cit9OworCitzdHJ1Y3QgZXBvbGxldmVudCB7CisJdWludDMyX3QgZXZlbnRzOworCXVpbnQ4
X3QgZGF0YVs4XTsKK307CisKK3N0cnVjdCBzZW10IHsKKwlpbnQ4X3QgX19zaXplWzMyXTsKKwlp
bnQ2NF90IEdvZHVtcF8wX2FsaWduWzBdOworfTsKKworc3RydWN0IGhjaGFuIHsKKwl1aW50NjRf
dCBxY291bnQ7CisJdWludDY0X3QgZGF0YXFzaXo7CisJdm9pZCogYnVmOworCXVpbnQxNl90IGVs
ZW1zaXplOworCXVpbnQzMl90IGNsb3NlZDsKKwl2b2lkKiBlbGVtdHlwZTsKKwl1aW50NjRfdCBz
ZW5keDsKKwl1aW50NjRfdCByZWN2eDsKKwlzdHJ1Y3Qgd2FpdHEgcmVjdnE7CisJc3RydWN0IHdh
aXRxIHNlbmRxOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3RydWN0IGNwdVByb2ZpbGUg
eworCV9Cb29sIG9uOworCXN0cnVjdCBub3RlIHdhaXQ7CisJdWludHB0cl90IGNvdW50OworCXVp
bnRwdHJfdCBldmljdHM7CisJdWludHB0cl90IGxvc3Q7CisJc3RydWN0IHsKKwlzdHJ1Y3QgY3B1
cHJvZkVudHJ5IGVudHJ5WzRdOworCX0gaGFzaFsxMDI0XTsKKwl1aW50cHRyX3QgbG9nWzY1NTM2
XVsyXTsKKwlpbnQ2NF90IG5sb2c7CisJaW50MzJfdCB0b2dnbGU7CisJdWludDMyX3QgaGFuZG9m
ZjsKKwl1aW50MzJfdCB3dG9nZ2xlOworCV9Cb29sIHdob2xkaW5nOworCV9Cb29sIGZsdXNoaW5n
OworCV9Cb29sIGVvZFNlbnQ7Cit9OworCitzdHJ1Y3QgbXNwYW4geworCXN0cnVjdCBtc3Bhbiog
bmV4dDsKKwlzdHJ1Y3QgbXNwYW4qIHByZXY7CisJdWludHB0cl90IHN0YXJ0OworCXVpbnRwdHJf
dCBucGFnZXM7CisJc3RydWN0IG1saW5rKiBmcmVlbGlzdDsKKwl1aW50MzJfdCBzd2VlcGdlbjsK
Kwl1aW50MTZfdCByZWY7CisJdWludDhfdCBzaXplY2xhc3M7CisJX0Jvb2wgaW5jYWNoZTsKKwl1
aW50OF90IHN0YXRlOworCXVpbnQ4X3QgbmVlZHplcm87CisJdWludHB0cl90IGVsZW1zaXplOwor
CWludDY0X3QgdW51c2Vkc2luY2U7CisJdWludHB0cl90IG5wcmVsZWFzZWQ7CisJdWludHB0cl90
IGxpbWl0OworCXN0cnVjdCBtdHlwZXMgdHlwZXM7CisJc3RydWN0IG11dGV4IHNwZWNpYWxsb2Nr
OworCXN0cnVjdCBzcGVjaWFsKiBzcGVjaWFsczsKKwlzdHJ1Y3QgbWxpbmsqIGZyZWVidWY7Cit9
OworCitzdHJ1Y3QgcG9sbERlc2MgeworCXN0cnVjdCBwb2xsRGVzYyogbGluazsKKwlzdHJ1Y3Qg
bXV0ZXggbG9jazsKKwl1aW50cHRyX3QgZmQ7CisJX0Jvb2wgY2xvc2luZzsKKwl1aW50cHRyX3Qg
c2VxOworCXVpbnRwdHJfdCByZzsKKwlzdHJ1Y3QgdGltZXIgcnQ7CisJaW50NjRfdCByZDsKKwl1
aW50cHRyX3Qgd2c7CisJc3RydWN0IHRpbWVyIHd0OworCWludDY0X3Qgd2Q7CisJdWludDMyX3Qg
dXNlcjsKK307CisKK3N0cnVjdCBwb2xsQ2FjaGUgeworCXN0cnVjdCBtdXRleCBsb2NrOworCXN0
cnVjdCBwb2xsRGVzYyogZmlyc3Q7Cit9OworCitzdHJ1Y3QgbSB7CisJc3RydWN0IGcqIGcwOwor
CXVpbnQ2NF90IHByb2NpZDsKKwlzdHJ1Y3QgZyogZ3NpZ25hbDsKKwlzdHJ1Y3Qgc2lnc2V0IHNp
Z21hc2s7CisJdWludHB0cl90IG1zdGFydGZuOworCXN0cnVjdCBnKiBjdXJnOworCXVpbnQ2NF90
IGNhdWdodHNpZzsKKwl1aW50NjRfdCBwOworCXVpbnQ2NF90IG5leHRwOworCWludDMyX3QgaWQ7
CisJaW50MzJfdCBtYWxsb2Npbmc7CisJaW50MzJfdCB0aHJvd2luZzsKKwlTdHJpbmcgcHJlZW1w
dG9mZjsKKwlpbnQzMl90IGxvY2tzOworCWludDMyX3Qgc29mdGZsb2F0OworCWludDMyX3QgZHlp
bmc7CisJaW50MzJfdCBwcm9maWxlaHo7CisJaW50MzJfdCBoZWxwZ2M7CisJX0Jvb2wgc3Bpbm5p
bmc7CisJX0Jvb2wgYmxvY2tlZDsKKwlfQm9vbCBpbndiOworCV9Cb29sIG5ld1NpZ3N0YWNrOwor
CWludDhfdCBwcmludGxvY2s7CisJdWludDMyX3QgZmFzdHJhbmQ7CisJdWludDY0X3QgbmNnb2Nh
bGw7CisJaW50MzJfdCBuY2dvOworCXN0cnVjdCBub3RlIHBhcms7CisJc3RydWN0IG0qIGFsbGxp
bms7CisJdWludDY0X3Qgc2NoZWRsaW5rOworCXN0cnVjdCBtY2FjaGUqIG1jYWNoZTsKKwlzdHJ1
Y3QgZyogbG9ja2VkZzsKKwlzdHJ1Y3QgbG9jYXRpb24gY3JlYXRlc3RhY2tbMzJdOworCXVpbnQz
Ml90IGxvY2tlZDsKKwl1aW50cHRyX3QgbmV4dHdhaXRtOworCXN0cnVjdCBnY3N0YXRzIGdjc3Rh
dHM7CisJX0Jvb2wgbmVlZGV4dHJhbTsKKwl1aW50OF90IHRyYWNlYmFjazsKKwl2b2lkKiB3YWl0
dW5sb2NrZjsKKwl2b2lkKiB3YWl0bG9jazsKKwl1aW50OF90IHdhaXR0cmFjZWV2OworCWludDY0
X3Qgd2FpdHRyYWNlc2tpcDsKKwlfQm9vbCBzdGFydGluZ3RyYWNlOworCXVpbnQzMl90IHN5c2Nh
bGx0aWNrOworCXN0cnVjdCBtT1MgbW9zOworCXZvaWQqIGdzaWduYWxzdGFjazsKKwl1aW50cHRy
X3QgZ3NpZ25hbHN0YWNrc2l6ZTsKKwlfQm9vbCBkcm9wZXh0cmFtOworCWludDMyX3QgZ2Npbmc7
Cit9OworCitzdHJ1Y3QgaHNlbGVjdCB7CisJdWludDE2X3QgdGNhc2U7CisJdWludDE2X3QgbmNh
c2U7CisJdWludDE2X3QqIHBvbGxvcmRlcjsKKwl1aW50MTZfdCogbG9ja29yZGVyOworCXN0cnVj
dCBzY2FzZSBzY2FzZVsxXTsKK307CisKK3N0cnVjdCB0cmFjZUJ1ZkhlYWRlciB7CisJdWludDY0
X3QgbGluazsKKwl1aW50NjRfdCBsYXN0VGlja3M7CisJaW50NjRfdCBwb3M7CisJc3RydWN0IGxv
Y2F0aW9uIHN0a1sxMjhdOworfTsKKworc3RydWN0IHRyYWNlU3RhY2tUYWJsZSB7CisJc3RydWN0
IG11dGV4IGxvY2s7CisJdWludDMyX3Qgc2VxOworCXN0cnVjdCB0cmFjZUFsbG9jIG1lbTsKKwl1
aW50NjRfdCB0YWJbODE5Ml07Cit9OworCitzdHJ1Y3QgdHJhY2VTdGFjayB7CisJdWludDY0X3Qg
bGluazsKKwl1aW50cHRyX3QgaGFzaDsKKwl1aW50MzJfdCBpZDsKKwlpbnQ2NF90IG47CisJc3Ry
dWN0IGxvY2F0aW9uIHN0a1swXTsKK307CisKK3N0cnVjdCB0cmFjZWJhY2tnIHsKKwlzdHJ1Y3Qg
ZyogZ3A7CisJc3RydWN0IGxvY2F0aW9uIGxvY2J1ZlsxMDBdOworCWludDY0X3QgYzsKK307Cisj
ZGVmaW5lIF9HaWRsZSAwCisjZGVmaW5lIF9HcnVubmFibGUgMQorI2RlZmluZSBfR3J1bm5pbmcg
MgorI2RlZmluZSBfR3N5c2NhbGwgMworI2RlZmluZSBfR3dhaXRpbmcgNAorI2RlZmluZSBfR21v
cmlidW5kX3VudXNlZCA1CisjZGVmaW5lIF9HZGVhZCA2CisjZGVmaW5lIF9HZW5xdWV1ZV91bnVz
ZWQgNworI2RlZmluZSBfR2NvcHlzdGFjayA4CisjZGVmaW5lIF9Hc2NhbiA0MDk2CisjZGVmaW5l
IF9Hc2NhbnJ1bm5hYmxlIDQwOTcKKyNkZWZpbmUgX0dzY2FucnVubmluZyA0MDk4CisjZGVmaW5l
IF9Hc2NhbnN5c2NhbGwgNDA5OQorI2RlZmluZSBfR3NjYW53YWl0aW5nIDQxMDAKKyNkZWZpbmUg
X1BpZGxlIDAKKyNkZWZpbmUgX1BydW5uaW5nIDEKKyNkZWZpbmUgX1BzeXNjYWxsIDIKKyNkZWZp
bmUgX1BnY3N0b3AgMworI2RlZmluZSBfUGRlYWQgNAorI2RlZmluZSBfUGFnZVNoaWZ0IDEzCisj
ZGVmaW5lIF9NYXhHb21heHByb2NzIDI1NgorI2RlZmluZSBfTWF4U21hbGxTaXplIDMyNzY4Cisj
ZGVmaW5lIF9NYXhNZW0gNTQ5NzU1ODEzODg3CisjZGVmaW5lIF9NYXhHY3Byb2MgMzIKKyNkZWZp
bmUgX0xvY2tFeHRlcm5hbCAxCisjZGVmaW5lIF9Mb2NrSW50ZXJuYWwgMgorI2RlZmluZSBfU2ln
Tm90aWZ5IDEKKyNkZWZpbmUgX1NpZ0tpbGwgMgorI2RlZmluZSBfU2lnVGhyb3cgNAorI2RlZmlu
ZSBfU2lnUGFuaWMgOAorI2RlZmluZSBfU2lnRGVmYXVsdCAxNgorI2RlZmluZSBfU2lnSGFuZGxp
bmcgMzIKKyNkZWZpbmUgX1NpZ0dvRXhpdCA2NAorI2RlZmluZSBfU2lnU2V0U3RhY2sgMTI4Cisj
ZGVmaW5lIF9TaWdVbmJsb2NrIDI1NgorI2RlZmluZSBfVHJhY2VSdW50aW1lRnJhbWVzIDEKKyNk
ZWZpbmUgX1RyYWNlVHJhcCAyCisjZGVmaW5lIF9UcmFjZUp1bXBTdGFjayA0CisjZGVmaW5lIF9U
cmFjZWJhY2tNYXhGcmFtZXMgMTAwCisjZGVmaW5lIF9NSGVhcE1hcF9Ub3RhbEJpdHMgMzkKKyNk
ZWZpbmUgX051bVNpemVDbGFzc2VzIDY3CmRpZmYgLS1naXQgYS9pbmNsdWRlL21tX21hbGxvYy5o
IGIvaW5jbHVkZS9tbV9tYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5lNjlkZTI5Ci0tIAoyLjE3LjEKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:32:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:32:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVl5-0000WX-Gq; Thu, 26 Sep 2019 15:32:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVl4-0000WR-JO
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:32:42 +0000
X-Inumbo-ID: e066eefe-e072-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id e066eefe-e072-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 15:32:41 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 7FEF1F2025;
 Thu, 26 Sep 2019 17:32:40 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id yfD7znIhgZB2; Thu, 26 Sep 2019 17:32:40 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 594D1F2004;
 Thu, 26 Sep 2019 17:32:36 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:36 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:32 +0200
Message-ID: <20190926153136.29689-6-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 05/11] Add patches to enable
 runtime
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

bGliZ28gdXNlcyBiYWNrdHJhY2tpbmcgYnV0IGl0IGxlYWRzIHRvIHBhZ2UgZmF1bHRzLiBGb3Ig
dGhlIHRpbWUgYmVpbmcKaXQgaXMgZGlzYWJsZWQgYnV0IGl0IHNob3VsZCBiZSByZXZpc2l0ZWQg
aW4gdGhlIGZ1dHVyZS4KClRoZSBzZWNvbmQgcGF0Y2ggZGVjcmVhc2VzIHRoZSBhbW91bnQgb2Yg
bWVtb3J5IG1hcHMsIGNhdXNlIGl0IHdhcwpleGNlZWRpbmcgMUcuCgpBdCBsYXN0IEdvIHVzZXMg
Y29udGV4dCBzd2l0Y2hpbmcgdG8gbWFuYWdlIGdvcm91dGluZXMuIFRoaXMgcGF0Y2ggYWRkCnNv
bWUgY2hhbmdlcyB0byB0aGUgd2F5IGNvbnRleHRzIGFyZSBoYW5kbGVkIHNvIHRoZXkgY2FuIGJl
IGNvbXBhdGlibGUKd2l0aCB0aHJlYWRpbmcgaW4gVW5pa3JhZnQuCgpTaWduZWQtb2ZmLWJ5OiBD
aGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogcGF0
Y2hlcy8wMDAzLWxpYmdvLURpc2FibGUtYmFja3RyYWNpbmcucGF0Y2ggIHwgMjggKysrKysrKysr
CiAuLi4wMDQtbGliZ28tUmVkdWNlLW1heGltdW0tbWVtb3J5LXNpemUucGF0Y2ggfCAyNyArKysr
KysrKysKIC4uLi8wMDA1LWxpYmdvLVVzZS1vdXItY29udGV4dC1sb2dpYy5wYXRjaCAgICB8IDU3
ICsrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTEyIGluc2VydGlvbnMoKykK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBwYXRjaGVzLzAwMDMtbGliZ28tRGlzYWJsZS1iYWNrdHJhY2lu
Zy5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwNC1saWJnby1SZWR1Y2UtbWF4
aW11bS1tZW1vcnktc2l6ZS5wYXRjaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwNS1s
aWJnby1Vc2Utb3VyLWNvbnRleHQtbG9naWMucGF0Y2gKCmRpZmYgLS1naXQgYS9wYXRjaGVzLzAw
MDMtbGliZ28tRGlzYWJsZS1iYWNrdHJhY2luZy5wYXRjaCBiL3BhdGNoZXMvMDAwMy1saWJnby1E
aXNhYmxlLWJhY2t0cmFjaW5nLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjUxOTQzNjMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzLzAwMDMtbGliZ28tRGlzYWJs
ZS1iYWNrdHJhY2luZy5wYXRjaApAQCAtMCwwICsxLDI4IEBACitGcm9tIDE3M2IwN2RiM2I4NWQ1
NjVkNjUwZTkzNjgxMzJlMzExNjE3ZWEzZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitGcm9t
OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cEBnbWFpbC5jb20+CitEYXRlOiBXZWQsIDIxIEF1ZyAy
MDE5IDE3OjAzOjI1ICswMzAwCitTdWJqZWN0OiBbUEFUQ0ggMS8zXSBsaWJnbzogRGlzYWJsZSBi
YWNrdHJhY2luZworCitTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPGNoYXJhbGFt
cG9zLm1haW5hc0BuZWNsYWIuZXU+CistLS0KKyBsaWJnby9ydW50aW1lL2dvLWNhbGxlcnMuYyB8
IDQgKystLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0p
CisKK2RpZmYgLS1naXQgYS9saWJnby9ydW50aW1lL2dvLWNhbGxlcnMuYyBiL2xpYmdvL3J1bnRp
bWUvZ28tY2FsbGVycy5jCitpbmRleCAwYzFjNjAzMTQuLmE4MGJjNTZmNSAxMDA2NDQKKy0tLSBh
L2xpYmdvL3J1bnRpbWUvZ28tY2FsbGVycy5jCisrKysgYi9saWJnby9ydW50aW1lL2dvLWNhbGxl
cnMuYworQEAgLTE2Nyw4ICsxNjcsOCBAQCBydW50aW1lX2NhbGxlcnMgKGludDMyIHNraXAsIExv
Y2F0aW9uICpsb2NidWYsIGludDMyIG0sIGJvb2wga2VlcF90aHVua3MpCisgICBkYXRhLm1heCA9
IG07CisgICBkYXRhLmtlZXBfdGh1bmtzID0ga2VlcF90aHVua3M7CisgICBydW50aW1lX3hhZGQg
KCZydW50aW1lX2luX2NhbGxlcnMsIDEpOworLSAgYmFja3RyYWNlX2Z1bGwgKF9fZ29fZ2V0X2Jh
Y2t0cmFjZV9zdGF0ZSAoKSwgMCwgY2FsbGJhY2ssIGVycm9yX2NhbGxiYWNrLAorLQkJICAmZGF0
YSk7CisrLy8gIGJhY2t0cmFjZV9mdWxsIChfX2dvX2dldF9iYWNrdHJhY2Vfc3RhdGUgKCksIDAs
IGNhbGxiYWNrLCBlcnJvcl9jYWxsYmFjaywKKysvLwkJICAmZGF0YSk7CisgICBydW50aW1lX3hh
ZGQgKCZydW50aW1lX2luX2NhbGxlcnMsIC0xKTsKKyAgIHJldHVybiBkYXRhLmluZGV4OworIH0K
Ky0tIAorMi4yMC4xCisKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwNC1saWJnby1SZWR1Y2UtbWF4
aW11bS1tZW1vcnktc2l6ZS5wYXRjaCBiL3BhdGNoZXMvMDAwNC1saWJnby1SZWR1Y2UtbWF4aW11
bS1tZW1vcnktc2l6ZS5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
ZmJmNGVhCi0tLSAvZGV2L251bGwKKysrIGIvcGF0Y2hlcy8wMDA0LWxpYmdvLVJlZHVjZS1tYXhp
bXVtLW1lbW9yeS1zaXplLnBhdGNoCkBAIC0wLDAgKzEsMjcgQEAKK0Zyb20gY2FhZWY3MzllY2Y0
ZTg3Yjk5OTQ3NDdjYmU2YzdlNjI3Yzg2NzhkOSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zy
b206IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwQGdtYWlsLmNvbT4KK0RhdGU6IFdlZCwgMjEgQXVn
IDIwMTkgMTc6MDM6NDkgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAyLzNdIGxpYmdvOiBSZWR1Y2Ug
bWF4aW11bSBtZW1vcnkgc2l6ZQorCitTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMg
PGNoYXJhbGFtcG9zLm1haW5hc0BuZWNsYWIuZXU+CistLS0KKyBsaWJnby9ydW50aW1lL21hbGxv
Yy5nb2MgfCAzICsrLQorIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRp
b24oLSkKKworZGlmZiAtLWdpdCBhL2xpYmdvL3J1bnRpbWUvbWFsbG9jLmdvYyBiL2xpYmdvL3J1
bnRpbWUvbWFsbG9jLmdvYworaW5kZXggMjMyMjEwZmM0Li4yMTFiODQ3NDggMTAwNjQ0CistLS0g
YS9saWJnby9ydW50aW1lL21hbGxvYy5nb2MKKysrKyBiL2xpYmdvL3J1bnRpbWUvbWFsbG9jLmdv
YworQEAgLTQ0OCw3ICs0NDgsOCBAQCBydW50aW1lX21hbGxvY2luaXQodm9pZCkKKyAJCS8vIGJ1
dCBpdCBoYXJkbHkgbWF0dGVyczogZTAgMDAgaXMgbm90IHZhbGlkIFVURi04IGVpdGhlci4KKyAJ
CS8vCisgCQkvLyBJZiB0aGlzIGZhaWxzIHdlIGZhbGwgYmFjayB0byB0aGUgMzIgYml0IG1lbW9y
eSBtZWNoYW5pc20KKy0JCWFyZW5hX3NpemUgPSBNYXhNZW07CisrCQkvL2FyZW5hX3NpemUgPSBN
YXhNZW07CisrCQlhcmVuYV9zaXplID0gMTA0ODU3NjAwOworIAkJYml0bWFwX3NpemUgPSBhcmVu
YV9zaXplIC8gKHNpemVvZih2b2lkKikqOC80KTsKKyAJCXNwYW5zX3NpemUgPSBhcmVuYV9zaXpl
IC8gUGFnZVNpemUgKiBzaXplb2YocnVudGltZV9taGVhcC5zcGFuc1swXSk7CisgCQlzcGFuc19z
aXplID0gUk9VTkQoc3BhbnNfc2l6ZSwgUGFnZVNpemUpOworLS0gCisyLjIwLjEKKwpkaWZmIC0t
Z2l0IGEvcGF0Y2hlcy8wMDA1LWxpYmdvLVVzZS1vdXItY29udGV4dC1sb2dpYy5wYXRjaCBiL3Bh
dGNoZXMvMDAwNS1saWJnby1Vc2Utb3VyLWNvbnRleHQtbG9naWMucGF0Y2gKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM5MDU4ZgotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNo
ZXMvMDAwNS1saWJnby1Vc2Utb3VyLWNvbnRleHQtbG9naWMucGF0Y2gKQEAgLTAsMCArMSw1NyBA
QAorRnJvbSA4ZTIyZGVkZjJkZjcyNWQyNTYyMzVkOWJkMjJmYjk3ZjI5MGZkMTJkIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQorRnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXBAZ21haWwuY29t
PgorRGF0ZTogV2VkLCAyMSBBdWcgMjAxOSAxNzowNDoxMyArMDMwMAorU3ViamVjdDogW1BBVENI
IDMvM10gbGliZ286IFVzZSBvdXIgY29udGV4dCBsb2dpYworCitTaWduZWQtb2ZmLWJ5OiBDaGFy
YWxhbXBvcyBNYWluYXMgPGNoYXJhbGFtcG9zLm1haW5hc0BuZWNsYWIuZXU+CistLS0KKyBsaWJn
by9ydW50aW1lL3Byb2MuYyB8IDEyICsrKysrKysrKy0tLQorIDEgZmlsZSBjaGFuZ2VkLCA5IGlu
c2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnby9ydW50aW1l
L3Byb2MuYyBiL2xpYmdvL3J1bnRpbWUvcHJvYy5jCitpbmRleCAwNmE5YzJhZDYuLmU4YTQzMjcy
ZSAxMDA2NDQKKy0tLSBhL2xpYmdvL3J1bnRpbWUvcHJvYy5jCisrKysgYi9saWJnby9ydW50aW1l
L3Byb2MuYworQEAgLTQzLDYgKzQzLDEwIEBAIGV4dGVybiB2b2lkIF9fc3BsaXRzdGFja19ibG9j
a19zaWduYWxzX2NvbnRleHQgKHZvaWQgKmNvbnRleHRbMTBdLCBpbnQgKiwKKyAKKyAjZW5kaWYK
KyAKKytleHRlcm4gc2l6ZV90IGdldF9zdGFja19zaXplKCk7CisrZXh0ZXJuIHZvaWQgbWFrZWNv
bnRleHQxKHVjb250ZXh0X3QgKiwgdm9pZCAqLCBpbnQpOworK2V4dGVybiB2b2lkICphbGxvY19z
dGFjaygpOworKworICNpZm5kZWYgUFRIUkVBRF9TVEFDS19NSU4KKyAjIGRlZmluZSBQVEhSRUFE
X1NUQUNLX01JTiA4MTkyCisgI2VuZGlmCitAQCAtODMxLDcgKzgzNSw3IEBAIG1ha2VHQ29udGV4
dChHKiBncCwgYnl0ZSogc3AsIHVpbnRwdHIgc3BzaXplKSB7CisgCWdldGNvbnRleHQodWMpOwor
IAl1Yy0+dWNfc3RhY2suc3Nfc3AgPSBzcDsKKyAJdWMtPnVjX3N0YWNrLnNzX3NpemUgPSAoc2l6
ZV90KXNwc2l6ZTsKKy0JbWFrZWNvbnRleHQodWMsIGtpY2tvZmYsIDApOworKwltYWtlY29udGV4
dDEodWMsIGtpY2tvZmYsIDApOworIH0KKyAKKyAvLyBDcmVhdGUgYSBuZXcgbS4gIEl0IHdpbGwg
c3RhcnQgb2ZmIHdpdGggYSBjYWxsIHRvIGZuLCBvciBlbHNlIHRoZSBzY2hlZHVsZXIuCitAQCAt
MTM0OCw3ICsxMzUyLDggQEAgcnVudGltZV9tYWxnKGJvb2wgYWxsb2NhdGVzdGFjaywgYm9vbCBz
aWduYWxzdGFjaywgYnl0ZSoqIHJldF9zdGFjaywgdWludHB0ciogcmUKKyAJfQorIAluZXdnID0g
YWxsb2NnKCk7CisgCWlmKGFsbG9jYXRlc3RhY2spIHsKKy0JCXN0YWNrc2l6ZSA9IFN0YWNrTWlu
OworKwkJLy9zdGFja3NpemUgPSBTdGFja01pbjsKKysJCXN0YWNrc2l6ZSA9IGdldF9zdGFja19z
aXplKCk7CisgCQlpZihzaWduYWxzdGFjaykgeworIAkJCXN0YWNrc2l6ZSA9IDMyICogMTAyNDsg
Ly8gT1MgWCB3YW50cyA+PSA4SywgR05VL0xpbnV4ID49IDJLCisgI2lmZGVmIFNJR1NUS1NaCitA
QCAtMTM3Miw3ICsxMzc3LDggQEAgcnVudGltZV9tYWxnKGJvb2wgYWxsb2NhdGVzdGFjaywgYm9v
bCBzaWduYWxzdGFjaywgYnl0ZSoqIHJldF9zdGFjaywgdWludHB0ciogcmUKKyAgICAgICAgICAg
ICAgICAgLy8gMzItYml0IG1vZGUsIHRoZSBHbyBhbGxvY2F0aW9uIHNwYWNlIGlzIGFsbCBvZgor
ICAgICAgICAgICAgICAgICAvLyBtZW1vcnkgYW55aG93LgorIAkJaWYoc2l6ZW9mKHZvaWQqKSA9
PSA4KSB7CistCQkJdm9pZCAqcCA9IHJ1bnRpbWVfU3lzQWxsb2Moc3RhY2tzaXplLCAmbXN0YXRz
KCktPm90aGVyX3N5cyk7CisrCQkJLy92b2lkICpwID0gcnVudGltZV9TeXNBbGxvYyhzdGFja3Np
emUsICZtc3RhdHMoKS0+b3RoZXJfc3lzKTsKKysJCQl2b2lkICpwID0gYWxsb2Nfc3RhY2soKTsK
KyAJCQlpZihwID09IG5pbCkKKyAJCQkJcnVudGltZV90aHJvdygicnVudGltZTogY2Fubm90IGFs
bG9jYXRlIG1lbW9yeSBmb3IgZ29yb3V0aW5lIHN0YWNrIik7CisgCQkJKnJldF9zdGFjayA9IChi
eXRlKilwOworLS0gCisyLjIwLjEKKwotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y
Zy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:32:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:32:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVlA-0000XI-IY; Thu, 26 Sep 2019 15:32:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVl9-0000XA-KB
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:32:47 +0000
X-Inumbo-ID: e2cf3de0-e072-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id e2cf3de0-e072-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 15:32:45 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8E8F4F2025;
 Thu, 26 Sep 2019 17:32:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ofN9KqhW5EOU; Thu, 26 Sep 2019 17:32:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 63294F2004;
 Thu, 26 Sep 2019 17:32:40 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:36 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:33 +0200
Message-ID: <20190926153136.29689-7-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 06/11] Update config.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXBkYXRlIGNvbmZpZy5oIHRvIGRlY3JlYXNlIHN0dWJzLgoKU2lnbmVkLW9mZi1ieTogQ2hhcmFs
YW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PgotLS0KIGdlbmVyYXRl
ZC9pbmNsdWRlL2NvbmZpZy5oIHwgMTYgKysrKysrKystLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs
IDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nZW5lcmF0ZWQv
aW5jbHVkZS9jb25maWcuaCBiL2dlbmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5oCmluZGV4IDdjNDcz
ZjIuLmE3NmIzZDggMTAwNjQ0Ci0tLSBhL2dlbmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5oCisrKyBi
L2dlbmVyYXRlZC9pbmNsdWRlL2NvbmZpZy5oCkBAIC02Miw3ICs2Miw3IEBACiAjZGVmaW5lIEhB
VkVfRkFMTE9DQVRFIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2htb2Rh
dCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRkNITU9EQVQgMQorLy8jZGVmaW5lIEhBVkVf
RkNITU9EQVQgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZjaG93bmF0JyBm
dW5jdGlvbi4gKi8KIC8vI2RlZmluZSBIQVZFX0ZDSE9XTkFUIDEKQEAgLTc3LDE2ICs3NywxNiBA
QAogLy8jZGVmaW5lIEhBVkVfR0VUWEFUVFIgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGlub3RpZnlfYWRkX3dhdGNoJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9JTk9U
SUZZX0FERF9XQVRDSCAxCisvLyNkZWZpbmUgSEFWRV9JTk9USUZZX0FERF9XQVRDSCAxCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5vdGlmeV9pbml0JyBmdW5jdGlvbi4gKi8K
LSNkZWZpbmUgSEFWRV9JTk9USUZZX0lOSVQgMQorLy8jZGVmaW5lIEhBVkVfSU5PVElGWV9JTklU
IDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X2luaXQxJyBmdW5j
dGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9JTk9USUZZX0lOSVQxIDEKKy8vI2RlZmluZSBIQVZFX0lO
T1RJRllfSU5JVDEgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlub3RpZnlf
cm1fd2F0Y2gnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0lOT1RJRllfUk1fV0FUQ0ggMQor
Ly8jZGVmaW5lIEhBVkVfSU5PVElGWV9STV9XQVRDSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfSU5U
VFlQRVNfSCAxCkBAIC0xODUsNyArMTg1LDcgQEAKICNkZWZpbmUgSEFWRV9PRkY2NF9UIDEKIAog
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBvcGVuNjQnIGZ1bmN0aW9uLiAqLwotI2Rl
ZmluZSBIQVZFX09QRU42NCAxCisvLyNkZWZpbmUgSEFWRV9PUEVONjQgMQogCiAvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW5hdCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVf
T1BFTkFUIDEKQEAgLTIxNSw3ICsyMTUsNyBAQAogI2RlZmluZSBIQVZFX1NFVEVOViAxCiAKIC8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2V0eGF0dHInIGZ1bmN0aW9uLiAqLwotI2Rl
ZmluZSBIQVZFX1NFVFhBVFRSIDEKKy8vI2RlZmluZSBIQVZFX1NFVFhBVFRSIDEKIAogLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaW5sJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFW
RV9TSU5MIDEKQEAgLTI2MSw3ICsyNjEsNyBAQAogI2RlZmluZSBIQVZFX1NZTkNfRkVUQ0hfQU5E
X0FERF80IDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzeW5jX2ZpbGVfcmFu
Z2UnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NZTkNfRklMRV9SQU5HRSAxCisvLyNkZWZp
bmUgSEFWRV9TWU5DX0ZJTEVfUkFOR0UgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPHN5c2NhbGwuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTQ0FMTF9IIDEK
LS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:32:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:32:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVlE-0000Xz-KE; Thu, 26 Sep 2019 15:32:52 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVlD-0000Xr-JX
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:32:51 +0000
X-Inumbo-ID: e549f9ac-e072-11e9-9658-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id e549f9ac-e072-11e9-9658-12813bfff9fa;
 Thu, 26 Sep 2019 15:32:49 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id A5DF3F2025;
 Thu, 26 Sep 2019 17:32:48 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id CPSesWWfJtZ4; Thu, 26 Sep 2019 17:32:48 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 73534F2004;
 Thu, 26 Sep 2019 17:32:44 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:36 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:34 +0200
Message-ID: <20190926153136.29689-8-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 07/11] Update libcalls.go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXBkYXRlIGxpYmNhbGxzLmdvIHRvIGRlY3JlYXNlIHN0dWJzLiBUaGlzIHBhdGNoIHJlbW92ZXMg
d3JhcHBlcnMgZm9yCnN5c3RlbSBjYWxscyB0aGF0IGFyZSBub3QgdXNlZCBmcm9tIGxpYmdvIGFu
ZCB0aGV5IGFyZSBub3QgaW1wbGVtZW50ZWQKb24gVW5pa3JhZnQuCgpTaWduZWQtb2ZmLWJ5OiBD
aGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogZ2Vu
ZXJhdGVkL2xpYmNhbGxzLmdvIHwgNDk3ICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDQ4IGluc2VydGlvbnMoKyksIDQ0OSBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9nZW5lcmF0ZWQvbGliY2FsbHMuZ28gYi9nZW5lcmF0ZWQvbGli
Y2FsbHMuZ28KaW5kZXggNTU2NTY0MS4uMDEyZmVkYyAxMDA2NDQKLS0tIGEvZ2VuZXJhdGVkL2xp
YmNhbGxzLmdvCisrKyBiL2dlbmVyYXRlZC9saWJjYWxscy5nbwpAQCAtNDI2LDQ5ICs0MjYsNiBA
QCBmdW5jIGFjY2VwdDQoZmQgaW50LCBzYSAqUmF3U29ja2FkZHJBbnksIGxlbiAqU29ja2xlbl90
LCBmbGFncyBpbnQpIChuZmQgaW50LCBlcgogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBBY2N0L2FjY3QKLS8vZXh0ZXJuIGFjY3QKLWZ1bmMgY19h
Y2N0KHBhdGggKmJ5dGUpIF9DX2ludAotZnVuYyBBY2N0KHBhdGggc3RyaW5nKSAoZXJyIGVycm9y
KSB7Ci0JdmFyIF9wMSAqYnl0ZQotCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkK
LQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0dXJuCi0JfQotCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0g
Y19hY2N0KF9wMSkKLQl2YXIgZXJybm8gRXJybm8KLQlzZXRFcnJubyA6PSBmYWxzZQotCWlmIF9y
IDwgMCB7Ci0JCWVycm5vID0gR2V0RXJybm8oKQotCQlzZXRFcnJubyA9IHRydWUKLQl9Ci0JRXhp
dHN5c2NhbGwoKQotCWlmIHNldEVycm5vIHsKLQkJZXJyID0gZXJybm8KLQl9Ci0JcmV0dXJuCi19
Ci0KLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEFkanRpbWV4L2FkanRp
bWV4Ci0vL2V4dGVybiBhZGp0aW1leAotZnVuYyBjX2FkanRpbWV4KGJ1ZiAqVGltZXgpIF9DX2lu
dAotZnVuYyBBZGp0aW1leChidWYgKlRpbWV4KSAoc3RhdGUgaW50LCBlcnIgZXJyb3IpIHsKLQlF
bnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfYWRqdGltZXgoYnVmKQotCXN0YXRlID0gKGludCkoX3Ip
Ci0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8gOj0gZmFsc2UKLQlpZiBfciA8IDAgewotCQll
cnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8gPSB0cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkK
LQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQogCiAvLyBBdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBEdXAzL2R1cDMKIC8vZXh0ZXJuIGR1cDMK
QEAgLTczMSwzMSArNjg4LDYgQEAgZnVuYyBJbm90aWZ5Um1XYXRjaChmZCBpbnQsIHdhdGNoZGVz
YyB1aW50MzIpIChzdWNjZXNzIGludCwgZXJyIGVycm9yKSB7CiAJcmV0dXJuCiB9CiAKLS8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEtsb2djdGwva2xvZ2N0bAotLy9leHRl
cm4ga2xvZ2N0bAotZnVuYyBjX2tsb2djdGwodHlwIF9DX2ludCwgYnVmcCAqYnl0ZSwgbGVuIF9D
X2ludCkgX0NfaW50Ci1mdW5jIEtsb2djdGwodHlwIGludCwgYnVmIFtdYnl0ZSkgKG4gaW50LCBl
cnIgZXJyb3IpIHsKLQl2YXIgX3AyICpieXRlCi0JaWYgbGVuKGJ1ZikgPiAwIHsKLQkJX3AyID0g
KCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYnVmWzBdKSkKLQl9IGVsc2UgewotCQlfcDIgPSAoKmJ5
dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCi0JfQotCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0g
Y19rbG9nY3RsKF9DX2ludCh0eXApLCBfcDIsIF9DX2ludChsZW4oYnVmKSkpCi0JbiA9IChpbnQp
KF9yKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsK
LQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2Fs
bCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0KIAogLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTGlzdHhhdHRyL2xpc3R4YXR0cgog
Ly9leHRlcm4gbGlzdHhhdHRyCkBAIC04NTMsMzQgKzc4NSw2IEBAIGZ1bmMgcGlwZTIocCAqWzJd
X0NfaW50LCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUGl2b3RSb290L3Bpdm90X3Jvb3QKLS8vZXh0
ZXJuIHBpdm90X3Jvb3QKLWZ1bmMgY19waXZvdF9yb290KG5ld3Jvb3QgKmJ5dGUsIHB1dG9sZCAq
Ynl0ZSkgX0NfaW50Ci1mdW5jIFBpdm90Um9vdChuZXdyb290IHN0cmluZywgcHV0b2xkIHN0cmlu
ZykgKGVyciBlcnJvcikgewotCXZhciBfcDEgKmJ5dGUKLQlfcDEsIGVyciA9IEJ5dGVQdHJGcm9t
U3RyaW5nKG5ld3Jvb3QpCi0JaWYgZXJyICE9IG5pbCB7Ci0JCXJldHVybgotCX0KLQl2YXIgX3Ay
ICpieXRlCi0JX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwdXRvbGQpCi0JaWYgZXJyICE9
IG5pbCB7Ci0JCXJldHVybgotCX0KLQlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfcGl2b3Rfcm9v
dChfcDEsIF9wMikKLQl2YXIgZXJybm8gRXJybm8KLQlzZXRFcnJubyA6PSBmYWxzZQotCWlmIF9y
IDwgMCB7Ci0JCWVycm5vID0gR2V0RXJybm8oKQotCQlzZXRFcnJubyA9IHRydWUKLQl9Ci0JRXhp
dHN5c2NhbGwoKQotCWlmIHNldEVycm5vIHsKLQkJZXJyID0gZXJybm8KLQl9Ci0JcmV0dXJuCi19
CiAKIC8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFJlbW92ZXhhdHRyL3Jl
bW92ZXhhdHRyCiAvL2V4dGVybiByZW1vdmV4YXR0cgpAQCAtOTYwLDYxICs4NjQsNiBAQCBmdW5j
IHNlbmRmaWxlKG91dGZkIGludCwgaW5mZCBpbnQsIG9mZnNldCAqT2Zmc2V0X3QsIGNvdW50IGlu
dCkgKHdyaXR0ZW4gaW50LCBlcgogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBTZXRmc2dpZC9zZXRmc2dpZAotLy9leHRlcm4gc2V0ZnNnaWQKLWZ1
bmMgY19zZXRmc2dpZChnaWQgR2lkX3QpIF9DX2ludAotZnVuYyBTZXRmc2dpZChnaWQgaW50KSAo
ZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX3NldGZzZ2lkKEdpZF90KGdp
ZCkpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8gOj0gZmFsc2UKLQlpZiBfciA8IDAgewot
CQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8gPSB0cnVlCi0JfQotCUV4aXRzeXNjYWxs
KCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCi0vLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRmc3VpZC9zZXRmc3VpZAotLy9l
eHRlcm4gc2V0ZnN1aWQKLWZ1bmMgY19zZXRmc3VpZCh1aWQgVWlkX3QpIF9DX2ludAotZnVuYyBT
ZXRmc3VpZCh1aWQgaW50KSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBj
X3NldGZzdWlkKFVpZF90KHVpZCkpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8gOj0gZmFs
c2UKLQlpZiBfciA8IDAgewotCQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8gPSB0cnVl
Ci0JfQotCUV4aXRzeXNjYWxsKCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0JfQot
CXJldHVybgotfQotCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRy
ZXNnaWQvc2V0cmVzZ2lkCi0vL2V4dGVybiBzZXRyZXNnaWQKLWZ1bmMgY19zZXRyZXNnaWQocmdp
ZCBHaWRfdCwgZWdpZCBHaWRfdCwgc2dpZCBHaWRfdCkgX0NfaW50Ci1mdW5jIFNldHJlc2dpZChy
Z2lkIGludCwgZWdpZCBpbnQsIHNnaWQgaW50KSAoZXJyIGVycm9yKSB7Ci0JX3IgOj0gY19zZXRy
ZXNnaWQoR2lkX3QocmdpZCksIEdpZF90KGVnaWQpLCBHaWRfdChzZ2lkKSkKLQl2YXIgZXJybm8g
RXJybm8KLQlzZXRFcnJubyA6PSBmYWxzZQotCWlmIF9yIDwgMCB7Ci0JCWVycm5vID0gR2V0RXJy
bm8oKQotCQlzZXRFcnJubyA9IHRydWUKLQl9Ci0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJu
bwotCX0KLQlyZXR1cm4KLX0KLQogLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgU2V0cmVzdWlkL3NldHJlc3VpZAogLy9leHRlcm4gc2V0cmVzdWlkCiBmdW5jIGNfc2V0cmVz
dWlkKHJ1aWQgVWlkX3QsIGV1aWQgVWlkX3QsIHN1aWQgVWlkX3QpIF9DX2ludApAQCAtMTEzMCwy
MyArOTc5LDYgQEAgZnVuYyBTeW5jRmlsZVJhbmdlKGZkIGludCwgb2ZmIGludDY0LCBuIGludDY0
LCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3lzaW5mby9zeXNpbmZvCi0vL2V4dGVybiBzeXNpbmZv
Ci1mdW5jIGNfc3lzaW5mbyhpbmZvICpTeXNpbmZvX3QpIF9DX2ludAotZnVuYyBTeXNpbmZvKGlu
Zm8gKlN5c2luZm9fdCkgKGVyciBlcnJvcikgewotCV9yIDo9IGNfc3lzaW5mbyhpbmZvKQotCXZh
ciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8g
PSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlpZiBzZXRFcnJubyB7Ci0JCWVy
ciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCiAvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBUZWUvdGVlCiAvL2V4dGVybiB0ZWUKIGZ1bmMgY190ZWUocmZkIF9DX2ludCwg
d2ZkIF9DX2ludCwgbGVuIFNpemVfdCwgZmxhZ3MgX0NfdWludCkgU3NpemVfdApAQCAtMTIzNCw2
MyArMTA2Niw2IEBAIGZ1bmMgVW5zaGFyZShmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsKIAlyZXR1
cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgSW9wZXJtL2lv
cGVybQotLy9leHRlcm4gaW9wZXJtCi1mdW5jIGNfaW9wZXJtKGZyb20gX0NfbG9uZywgbnVtIF9D
X2xvbmcsIG9uIF9DX2ludCkgX0NfaW50Ci1mdW5jIElvcGVybShmcm9tIGludCwgbnVtIGludCwg
b24gaW50KSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX2lvcGVybShf
Q19sb25nKGZyb20pLCBfQ19sb25nKG51bSksIF9DX2ludChvbikpCi0JdmFyIGVycm5vIEVycm5v
Ci0Jc2V0RXJybm8gOj0gZmFsc2UKLQlpZiBfciA8IDAgewotCQllcnJubyA9IEdldEVycm5vKCkK
LQkJc2V0RXJybm8gPSB0cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkKLQlpZiBzZXRFcnJubyB7Ci0J
CWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCB3cmFwcGVyIGZvciBJb3BsL2lvcGwKLS8vZXh0ZXJuIGlvcGwKLWZ1bmMgY19pb3BsKGxldmVs
IF9DX2ludCkgX0NfaW50Ci1mdW5jIElvcGwobGV2ZWwgaW50KSAoZXJyIGVycm9yKSB7Ci0JRW50
ZXJzeXNjYWxsKCkKLQlfciA6PSBjX2lvcGwoX0NfaW50KGxldmVsKSkKLQl2YXIgZXJybm8gRXJy
bm8KLQlzZXRFcnJubyA6PSBmYWxzZQotCWlmIF9yIDwgMCB7Ci0JCWVycm5vID0gR2V0RXJybm8o
KQotCQlzZXRFcnJubyA9IHRydWUKLQl9Ci0JRXhpdHN5c2NhbGwoKQotCWlmIHNldEVycm5vIHsK
LQkJZXJyID0gZXJybm8KLQl9Ci0JcmV0dXJuCi19Ci0KLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIFVzdGF0L3VzdGF0Ci0vL2V4dGVybiB1c3RhdAotZnVuYyBjX3VzdGF0
KGRldiBfZGV2X3QsIHVidWYgKlVzdGF0X3QpIF9DX2ludAotZnVuYyBVc3RhdChkZXYgaW50LCB1
YnVmICpVc3RhdF90KSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX3Vz
dGF0KF9kZXZfdChkZXYpLCB1YnVmKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZh
bHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1
ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0K
LQlyZXR1cm4KLX0KLQogLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgdXRp
bWVuc2F0L3V0aW1lbnNhdAogLy9leHRlcm4gdXRpbWVuc2F0CiBmdW5jIGNfdXRpbWVuc2F0KGRp
cmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgdGltZXMgKlsyXVRpbWVzcGVjLCBmbGFncyBfQ19pbnQp
IF9DX2ludApAQCAtMTQwOCwzMCArMTE4Myw2IEBAIGZ1bmMgc2V0Z3JvdXBzKG4gaW50LCBsaXN0
ICpHaWRfdCkgKGVyciBlcnJvcikgewogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBNa2ZpZm8vbWtmaWZvCi0vL2V4dGVybiBta2ZpZm8KLWZ1bmMg
Y19ta2ZpZm8ocGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3QpIF9DX2ludAotZnVuYyBNa2ZpZm8ocGF0
aCBzdHJpbmcsIG1vZGUgdWludDMyKSAoZXJyIGVycm9yKSB7Ci0JdmFyIF9wMSAqYnl0ZQotCV9w
MSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKLQlpZiBlcnIgIT0gbmlsIHsKLQkJcmV0
dXJuCi0JfQotCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19ta2ZpZm8oX3AxLCBNb2RlX3QobW9k
ZSkpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJybm8gOj0gZmFsc2UKLQlpZiBfciA8IDAgewot
CQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJybm8gPSB0cnVlCi0JfQotCUV4aXRzeXNjYWxs
KCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVycm5vCi0JfQotCXJldHVybgotfQotCiAvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZWxlY3Qvc2VsZWN0CiAvL2V4dGVy
biBzZWxlY3QKIGZ1bmMgY19zZWxlY3QobmZkIF9DX2ludCwgciAqRmRTZXQsIHcgKkZkU2V0LCBl
ICpGZFNldCwgdGltZW91dCAqVGltZXZhbCkgX0NfaW50CkBAIC0xODUyLDI2ICsxNjAzLDYgQEAg
ZnVuYyBHZXRwcGlkKCkgKHBwaWQgaW50KSB7CiAJcmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdldHByaW9yaXR5L2dldHByaW9yaXR5Ci0vL2V4dGVy
biBnZXRwcmlvcml0eQotZnVuYyBjX2dldHByaW9yaXR5KHdoaWNoIF9DX2ludCwgd2hvIF9DX2lu
dCkgX0NfaW50Ci1mdW5jIEdldHByaW9yaXR5KHdoaWNoIGludCwgd2hvIGludCkgKHByaW8gaW50
LCBlcnIgZXJyb3IpIHsKLQlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfZ2V0cHJpb3JpdHkoX0Nf
aW50KHdoaWNoKSwgX0NfaW50KHdobykpCi0JcHJpbyA9IChpbnQpKF9yKQotCXZhciBlcnJubyBF
cnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJu
bygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8g
ewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQogLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgR2V0cnVzYWdlL2dldHJ1c2FnZQogLy9leHRlcm4gZ2V0cnVzYWdl
CiBmdW5jIGNfZ2V0cnVzYWdlKHdobyBfQ19pbnQsIHJ1c2FnZSAqUnVzYWdlKSBfQ19pbnQKQEAg
LTIyMzYsMzEgKzE5NjcsNiBAQCBmdW5jIFJtZGlyKHBhdGggc3RyaW5nKSAoZXJyIGVycm9yKSB7
CiAJcmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNl
dGRvbWFpbm5hbWUvc2V0ZG9tYWlubmFtZQotLy9leHRlcm4gc2V0ZG9tYWlubmFtZQotZnVuYyBj
X3NldGRvbWFpbm5hbWUobmFtZSAqYnl0ZSwgbGVuIFNpemVfdCkgX0NfaW50Ci1mdW5jIFNldGRv
bWFpbm5hbWUocCBbXWJ5dGUpIChlcnIgZXJyb3IpIHsKLQl2YXIgX3AxICpieXRlCi0JaWYgbGVu
KHApID4gMCB7Ci0JCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJnBbMF0pKQotCX0gZWxz
ZSB7Ci0JCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKLQl9Ci0JRW50ZXJz
eXNjYWxsKCkKLQlfciA6PSBjX3NldGRvbWFpbm5hbWUoX3AxLCBTaXplX3QobGVuKHApKSkKLQl2
YXIgZXJybm8gRXJybm8KLQlzZXRFcnJubyA6PSBmYWxzZQotCWlmIF9yIDwgMCB7Ci0JCWVycm5v
ID0gR2V0RXJybm8oKQotCQlzZXRFcnJubyA9IHRydWUKLQl9Ci0JRXhpdHN5c2NhbGwoKQotCWlm
IHNldEVycm5vIHsKLQkJZXJyID0gZXJybm8KLQl9Ci0JcmV0dXJuCi19Ci0KIC8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldGhvc3RuYW1lL3NldGhvc3RuYW1lCiAvL2V4
dGVybiBzZXRob3N0bmFtZQogZnVuYyBjX3NldGhvc3RuYW1lKG5hbWUgKmJ5dGUsIGxlbiBTaXpl
X3QpIF9DX2ludApAQCAtMjMzNSwyNSArMjA0MSw2IEBAIGZ1bmMgU2V0cGdpZChwaWQgaW50LCBw
Z2lkIGludCkgKGVyciBlcnJvcikgewogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBTZXRwcmlvcml0eS9zZXRwcmlvcml0eQotLy9leHRlcm4gc2V0
cHJpb3JpdHkKLWZ1bmMgY19zZXRwcmlvcml0eSh3aGljaCBfQ19pbnQsIHdobyBfQ19pbnQsIHBy
aW8gX0NfaW50KSBfQ19pbnQKLWZ1bmMgU2V0cHJpb3JpdHkod2hpY2ggaW50LCB3aG8gaW50LCBw
cmlvIGludCkgKGVyciBlcnJvcikgewotCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19zZXRwcmlv
cml0eShfQ19pbnQod2hpY2gpLCBfQ19pbnQod2hvKSwgX0NfaW50KHByaW8pKQotCXZhciBlcnJu
byBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRF
cnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJy
bm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQogLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmV1aWQvc2V0cmV1aWQKIC8vZXh0ZXJuIHNldHJldWlk
CiBmdW5jIGNfc2V0cmV1aWQocnVpZCBVaWRfdCwgZXVpZCBVaWRfdCkgX0NfaW50CkBAIC0yNjYz
LDk0ICsyMzUwLDYgQEAgZnVuYyBNcHJvdGVjdChiIFtdYnl0ZSwgcHJvdCBpbnQpIChlcnIgZXJy
b3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgTWxvY2svbWxvY2sKLS8vZXh0ZXJuIG1sb2NrCi1mdW5jIGNfbWxvY2soYWRkciAqYnl0ZSwg
bGVuIFNpemVfdCkgX0NfaW50Ci1mdW5jIE1sb2NrKGIgW11ieXRlKSAoZXJyIGVycm9yKSB7Ci0J
dmFyIF9wMSAqYnl0ZQotCWlmIGxlbihiKSA+IDAgewotCQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Q
b2ludGVyKCZiWzBdKSkKLQl9IGVsc2UgewotCQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVy
KCZfemVybykpCi0JfQotCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19tbG9jayhfcDEsIFNpemVf
dChsZW4oYikpKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3Ig
PCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0
c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0K
LQotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTXVubG9jay9tdW5sb2Nr
Ci0vL2V4dGVybiBtdW5sb2NrCi1mdW5jIGNfbXVubG9jayhhZGRyICpieXRlLCBsZW4gU2l6ZV90
KSBfQ19pbnQKLWZ1bmMgTXVubG9jayhiIFtdYnl0ZSkgKGVyciBlcnJvcikgewotCXZhciBfcDEg
KmJ5dGUKLQlpZiBsZW4oYikgPiAwIHsKLQkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigm
YlswXSkpCi0JfSBlbHNlIHsKLQkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8p
KQotCX0KLQlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfbXVubG9jayhfcDEsIFNpemVfdChsZW4o
YikpKQotCXZhciBlcnJubyBFcnJubwotCXNldEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsK
LQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNldEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2Fs
bCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIgPSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQotLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTWxvY2thbGwvbWxvY2thbGwKLS8v
ZXh0ZXJuIG1sb2NrYWxsCi1mdW5jIGNfbWxvY2thbGwoZmxhZ3MgX0NfaW50KSBfQ19pbnQKLWZ1
bmMgTWxvY2thbGwoZmxhZ3MgaW50KSAoZXJyIGVycm9yKSB7Ci0JRW50ZXJzeXNjYWxsKCkKLQlf
ciA6PSBjX21sb2NrYWxsKF9DX2ludChmbGFncykpCi0JdmFyIGVycm5vIEVycm5vCi0Jc2V0RXJy
bm8gOj0gZmFsc2UKLQlpZiBfciA8IDAgewotCQllcnJubyA9IEdldEVycm5vKCkKLQkJc2V0RXJy
bm8gPSB0cnVlCi0JfQotCUV4aXRzeXNjYWxsKCkKLQlpZiBzZXRFcnJubyB7Ci0JCWVyciA9IGVy
cm5vCi0JfQotCXJldHVybgotfQotCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBNdW5sb2NrYWxsL211bmxvY2thbGwKLS8vZXh0ZXJuIG11bmxvY2thbGwKLWZ1bmMgY19t
dW5sb2NrYWxsKCkgX0NfaW50Ci1mdW5jIE11bmxvY2thbGwoKSAoZXJyIGVycm9yKSB7Ci0JRW50
ZXJzeXNjYWxsKCkKLQlfciA6PSBjX211bmxvY2thbGwoKQotCXZhciBlcnJubyBFcnJubwotCXNl
dEVycm5vIDo9IGZhbHNlCi0JaWYgX3IgPCAwIHsKLQkJZXJybm8gPSBHZXRFcnJubygpCi0JCXNl
dEVycm5vID0gdHJ1ZQotCX0KLQlFeGl0c3lzY2FsbCgpCi0JaWYgc2V0RXJybm8gewotCQllcnIg
PSBlcnJubwotCX0KLQlyZXR1cm4KLX0KLQogLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgVGNnZXRhdHRyL3RjZ2V0YXR0cgogLy9leHRlcm4gdGNnZXRhdHRyCiBmdW5jIGNf
dGNnZXRhdHRyKGZkIF9DX2ludCwgcCAqVGVybWlvcykgX0NfaW50CkBAIC0yODA3LDEyICsyNDA2
LDEyIEBAIGZ1bmMgc3lzY29uZihuYW1lIGludCkgKHJldCBpbnQ2NCwgZXJyIGVycm9yKSB7CiAJ
cmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZzdGF0
L2ZzdGF0NjQKLS8vZXh0ZXJuIGZzdGF0NjQKLWZ1bmMgY19mc3RhdDY0KGZkIF9DX2ludCwgc3Rh
dCAqU3RhdF90KSBfQ19pbnQKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IEZzdGF0L2ZzdGF0CisvL2V4dGVybiBmc3RhdAorZnVuYyBjX2ZzdGF0KGZkIF9DX2ludCwgc3Rh
dCAqU3RhdF90KSBfQ19pbnQKIGZ1bmMgRnN0YXQoZmQgaW50LCBzdGF0ICpTdGF0X3QpIChlcnIg
ZXJyb3IpIHsKIAlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfZnN0YXQ2NChfQ19pbnQoZmQpLCBz
dGF0KQorCV9yIDo9IGNfZnN0YXQoX0NfaW50KGZkKSwgc3RhdCkKIAl2YXIgZXJybm8gRXJybm8K
IAlzZXRFcnJubyA6PSBmYWxzZQogCWlmIF9yIDwgMCB7CkBAIC0yODI2LDEyICsyNDI1LDEyIEBA
IGZ1bmMgRnN0YXQoZmQgaW50LCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4K
IH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRnRydW5jYXRlL2Z0
cnVuY2F0ZTY0Ci0vL2V4dGVybiBmdHJ1bmNhdGU2NAotZnVuYyBjX2Z0cnVuY2F0ZTY0KGZkIF9D
X2ludCwgbGVuZ3RoIE9mZnNldF90KSBfQ19pbnQKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIEZ0cnVuY2F0ZS9mdHJ1bmNhdGUKKy8vZXh0ZXJuIGZ0cnVuY2F0ZQorZnVu
YyBjX2Z0cnVuY2F0ZShmZCBfQ19pbnQsIGxlbmd0aCBPZmZzZXRfdCkgX0NfaW50CiBmdW5jIEZ0
cnVuY2F0ZShmZCBpbnQsIGxlbmd0aCBpbnQ2NCkgKGVyciBlcnJvcikgewogCUVudGVyc3lzY2Fs
bCgpCi0JX3IgOj0gY19mdHJ1bmNhdGU2NChfQ19pbnQoZmQpLCBPZmZzZXRfdChsZW5ndGgpKQor
CV9yIDo9IGNfZnRydW5jYXRlKF9DX2ludChmZCksIE9mZnNldF90KGxlbmd0aCkpCiAJdmFyIGVy
cm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8IDAgewpAQCAtMjg0NSwxMSAr
MjQ0NCwxMSBAQCBmdW5jIEZ0cnVuY2F0ZShmZCBpbnQsIGxlbmd0aCBpbnQ2NCkgKGVyciBlcnJv
cikgewogCXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBHZXRybGltaXQvZ2V0cmxpbWl0NjQKLS8vZXh0ZXJuIGdldHJsaW1pdDY0Ci1mdW5jIGNfZ2V0
cmxpbWl0NjQocmVzb3VyY2UgX0NfaW50LCBybGltICpSbGltaXQpIF9DX2ludAorLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cmxpbWl0L2dldHJsaW1pdAorLy9leHRl
cm4gZ2V0cmxpbWl0CitmdW5jIGNfZ2V0cmxpbWl0KHJlc291cmNlIF9DX2ludCwgcmxpbSAqUmxp
bWl0KSBfQ19pbnQKIGZ1bmMgR2V0cmxpbWl0KHJlc291cmNlIGludCwgcmxpbSAqUmxpbWl0KSAo
ZXJyIGVycm9yKSB7Ci0JX3IgOj0gY19nZXRybGltaXQ2NChfQ19pbnQocmVzb3VyY2UpLCBybGlt
KQorCV9yIDo9IGNfZ2V0cmxpbWl0KF9DX2ludChyZXNvdXJjZSksIHJsaW0pCiAJdmFyIGVycm5v
IEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8IDAgewpAQCAtMjg2Miw5ICsyNDYx
LDkgQEAgZnVuYyBHZXRybGltaXQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIChlcnIgZXJy
b3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgTHN0YXQvbHN0YXQ2NAotLy9leHRlcm4gbHN0YXQ2NAotZnVuYyBjX2xzdGF0NjQocGF0aCAq
Ynl0ZSwgc3RhdCAqU3RhdF90KSBfQ19pbnQKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIExzdGF0L2xzdGF0CisvL2V4dGVybiBsc3RhdAorZnVuYyBjX2xzdGF0KHBhdGgg
KmJ5dGUsIHN0YXQgKlN0YXRfdCkgX0NfaW50CiBmdW5jIExzdGF0KHBhdGggc3RyaW5nLCBzdGF0
ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAl2YXIgX3AxICpieXRlCiAJX3AxLCBlcnIgPSBCeXRl
UHRyRnJvbVN0cmluZyhwYXRoKQpAQCAtMjg3Miw3ICsyNDcxLDcgQEAgZnVuYyBMc3RhdChwYXRo
IHN0cmluZywgc3RhdCAqU3RhdF90KSAoZXJyIGVycm9yKSB7CiAJCXJldHVybgogCX0KIAlFbnRl
cnN5c2NhbGwoKQotCV9yIDo9IGNfbHN0YXQ2NChfcDEsIHN0YXQpCisJX3IgOj0gY19sc3RhdChf
cDEsIHN0YXQpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8
IDAgewpAQCAtMjg4NiwxMiArMjQ4NSwxMiBAQCBmdW5jIExzdGF0KHBhdGggc3RyaW5nLCBzdGF0
ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgbW1hcC9tbWFwNjQKLS8vZXh0ZXJuIG1tYXA2NAotZnVuYyBj
X21tYXA2NChhZGRyICpieXRlLCBsZW5ndGggU2l6ZV90LCBwcm90IF9DX2ludCwgZmxhZ3MgX0Nf
aW50LCBmZCBfQ19pbnQsIG9mZnNldCBPZmZzZXRfdCkgKmJ5dGUKKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIG1tYXAvbW1hcAorLy9leHRlcm4gbW1hcAorZnVuYyBjX21t
YXAoYWRkciAqYnl0ZSwgbGVuZ3RoIFNpemVfdCwgcHJvdCBfQ19pbnQsIGZsYWdzIF9DX2ludCwg
ZmQgX0NfaW50LCBvZmZzZXQgT2Zmc2V0X3QpICpieXRlCiBmdW5jIG1tYXAoYWRkciB1aW50cHRy
LCBsZW5ndGggdWludHB0ciwgcHJvdCBpbnQsIGZsYWdzIGludCwgZmQgaW50LCBvZmZzZXQgaW50
NjQpICh4YWRkciB1aW50cHRyLCBlcnIgZXJyb3IpIHsKIAlFbnRlcnN5c2NhbGwoKQotCV9yIDo9
IGNfbW1hcDY0KCgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoYWRkcikpLCBTaXplX3QobGVuZ3RoKSwg
X0NfaW50KHByb3QpLCBfQ19pbnQoZmxhZ3MpLCBfQ19pbnQoZmQpLCBPZmZzZXRfdChvZmZzZXQp
KQorCV9yIDo9IGNfbW1hcCgoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKGFkZHIpKSwgU2l6ZV90KGxl
bmd0aCksIF9DX2ludChwcm90KSwgX0NfaW50KGZsYWdzKSwgX0NfaW50KGZkKSwgT2Zmc2V0X3Qo
b2Zmc2V0KSkKIAl4YWRkciA9ICh1aW50cHRyKSh1bnNhZmUuUG9pbnRlcihfcikpCiAJdmFyIGVy
cm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKQEAgLTI5MDYsOSArMjUwNSw5IEBAIGZ1bmMg
bW1hcChhZGRyIHVpbnRwdHIsIGxlbmd0aCB1aW50cHRyLCBwcm90IGludCwgZmxhZ3MgaW50LCBm
ZCBpbnQsIG9mZnNldCBpbnQ2CiAJcmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIE9wZW4vX19nb19vcGVuNjQKLS8vZXh0ZXJuIF9fZ29fb3BlbjY0Ci1m
dW5jIGNfX19nb19vcGVuNjQocGF0aCAqYnl0ZSwgbW9kZSBfQ19pbnQsIHBlcm0gTW9kZV90KSBf
Q19pbnQKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE9wZW4vX19nb19v
cGVuCisvL2V4dGVybiBfX2dvX29wZW4KK2Z1bmMgY19fX2dvX29wZW4ocGF0aCAqYnl0ZSwgbW9k
ZSBfQ19pbnQsIHBlcm0gTW9kZV90KSBfQ19pbnQKIGZ1bmMgT3BlbihwYXRoIHN0cmluZywgbW9k
ZSBpbnQsIHBlcm0gdWludDMyKSAoZmQgaW50LCBlcnIgZXJyb3IpIHsKIAl2YXIgX3AxICpieXRl
CiAJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQpAQCAtMjkxNiw3ICsyNTE1LDcg
QEAgZnVuYyBPcGVuKHBhdGggc3RyaW5nLCBtb2RlIGludCwgcGVybSB1aW50MzIpIChmZCBpbnQs
IGVyciBlcnJvcikgewogCQlyZXR1cm4KIAl9CiAJRW50ZXJzeXNjYWxsKCkKLQlfciA6PSBjX19f
Z29fb3BlbjY0KF9wMSwgX0NfaW50KG1vZGUpLCBNb2RlX3QocGVybSkpCisJX3IgOj0gY19fX2dv
X29wZW4oX3AxLCBfQ19pbnQobW9kZSksIE1vZGVfdChwZXJtKSkKIAlmZCA9IChpbnQpKF9yKQog
CXZhciBlcnJubyBFcnJubwogCXNldEVycm5vIDo9IGZhbHNlCkBAIC0yOTMxLDkgKzI1MzAsOSBA
QCBmdW5jIE9wZW4ocGF0aCBzdHJpbmcsIG1vZGUgaW50LCBwZXJtIHVpbnQzMikgKGZkIGludCwg
ZXJyIGVycm9yKSB7CiAJcmV0dXJuCiB9CiAKLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIFByZWFkL3ByZWFkNjQKLS8vZXh0ZXJuIHByZWFkNjQKLWZ1bmMgY19wcmVhZDY0
KGZkIF9DX2ludCwgYnVmICpieXRlLCBjb3VudCBTaXplX3QsIG9mZnNldCBPZmZzZXRfdCkgU3Np
emVfdAorLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUHJlYWQvcHJlYWQK
Ky8vZXh0ZXJuIHByZWFkCitmdW5jIGNfcHJlYWQoZmQgX0NfaW50LCBidWYgKmJ5dGUsIGNvdW50
IFNpemVfdCwgb2Zmc2V0IE9mZnNldF90KSBTc2l6ZV90CiBmdW5jIFByZWFkKGZkIGludCwgcCBb
XWJ5dGUsIG9mZnNldCBpbnQ2NCkgKG4gaW50LCBlcnIgZXJyb3IpIHsKIAl2YXIgX3AyICpieXRl
CiAJaWYgbGVuKHApID4gMCB7CkBAIC0yOTQyLDcgKzI1NDEsNyBAQCBmdW5jIFByZWFkKGZkIGlu
dCwgcCBbXWJ5dGUsIG9mZnNldCBpbnQ2NCkgKG4gaW50LCBlcnIgZXJyb3IpIHsKIAkJX3AyID0g
KCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQogCX0KIAlFbnRlcnN5c2NhbGwoKQotCV9y
IDo9IGNfcHJlYWQ2NChfQ19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4ocCkpLCBPZmZzZXRfdChv
ZmZzZXQpKQorCV9yIDo9IGNfcHJlYWQoX0NfaW50KGZkKSwgX3AyLCBTaXplX3QobGVuKHApKSwg
T2Zmc2V0X3Qob2Zmc2V0KSkKIAluID0gKGludCkoX3IpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0
RXJybm8gOj0gZmFsc2UKQEAgLTI5NTcsOSArMjU1Niw5IEBAIGZ1bmMgUHJlYWQoZmQgaW50LCBw
IFtdYnl0ZSwgb2Zmc2V0IGludDY0KSAobiBpbnQsIGVyciBlcnJvcikgewogCXJldHVybgogfQog
Ci0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBQd3JpdGUvcHdyaXRlNjQK
LS8vZXh0ZXJuIHB3cml0ZTY0Ci1mdW5jIGNfcHdyaXRlNjQoZmQgX0NfaW50LCBidWYgKmJ5dGUs
IGNvdW50IFNpemVfdCwgb2Zmc2V0IE9mZnNldF90KSBTc2l6ZV90CisvLyBBdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBQd3JpdGUvcHdyaXRlCisvL2V4dGVybiBwd3JpdGUKK2Z1
bmMgY19wd3JpdGUoZmQgX0NfaW50LCBidWYgKmJ5dGUsIGNvdW50IFNpemVfdCwgb2Zmc2V0IE9m
ZnNldF90KSBTc2l6ZV90CiBmdW5jIFB3cml0ZShmZCBpbnQsIHAgW11ieXRlLCBvZmZzZXQgaW50
NjQpIChuIGludCwgZXJyIGVycm9yKSB7CiAJdmFyIF9wMiAqYnl0ZQogCWlmIGxlbihwKSA+IDAg
ewpAQCAtMjk2OCw3ICsyNTY3LDcgQEAgZnVuYyBQd3JpdGUoZmQgaW50LCBwIFtdYnl0ZSwgb2Zm
c2V0IGludDY0KSAobiBpbnQsIGVyciBlcnJvcikgewogCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Q
b2ludGVyKCZfemVybykpCiAJfQogCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19wd3JpdGU2NChf
Q19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4ocCkpLCBPZmZzZXRfdChvZmZzZXQpKQorCV9yIDo9
IGNfcHdyaXRlKF9DX2ludChmZCksIF9wMiwgU2l6ZV90KGxlbihwKSksIE9mZnNldF90KG9mZnNl
dCkpCiAJbiA9IChpbnQpKF9yKQogCXZhciBlcnJubyBFcnJubwogCXNldEVycm5vIDo9IGZhbHNl
CkBAIC0yOTgzLDEyICsyNTgyLDEyIEBAIGZ1bmMgUHdyaXRlKGZkIGludCwgcCBbXWJ5dGUsIG9m
ZnNldCBpbnQ2NCkgKG4gaW50LCBlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0KIAotLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2Vlay9sc2VlazY0Ci0vL2V4dGVybiBsc2Vl
azY0Ci1mdW5jIGNfbHNlZWs2NChmZCBfQ19pbnQsIG9mZnNldCBPZmZzZXRfdCwgd2hlbmNlIF9D
X2ludCkgT2Zmc2V0X3QKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNl
ZWsvbHNlZWsKKy8vZXh0ZXJuIGxzZWVrCitmdW5jIGNfbHNlZWsoZmQgX0NfaW50LCBvZmZzZXQg
T2Zmc2V0X3QsIHdoZW5jZSBfQ19pbnQpIE9mZnNldF90CiBmdW5jIFNlZWsoZmQgaW50LCBvZmZz
ZXQgaW50NjQsIHdoZW5jZSBpbnQpIChvZmYgaW50NjQsIGVyciBlcnJvcikgewogCUVudGVyc3lz
Y2FsbCgpCi0JX3IgOj0gY19sc2VlazY0KF9DX2ludChmZCksIE9mZnNldF90KG9mZnNldCksIF9D
X2ludCh3aGVuY2UpKQorCV9yIDo9IGNfbHNlZWsoX0NfaW50KGZkKSwgT2Zmc2V0X3Qob2Zmc2V0
KSwgX0NfaW50KHdoZW5jZSkpCiAJb2ZmID0gKGludDY0KShfcikKIAl2YXIgZXJybm8gRXJybm8K
IAlzZXRFcnJubyA6PSBmYWxzZQpAQCAtMzAwMywxMSArMjYwMiwxMSBAQCBmdW5jIFNlZWsoZmQg
aW50LCBvZmZzZXQgaW50NjQsIHdoZW5jZSBpbnQpIChvZmYgaW50NjQsIGVyciBlcnJvcikgewog
CXJldHVybgogfQogCi0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRy
bGltaXQvc2V0cmxpbWl0NjQKLS8vZXh0ZXJuIHNldHJsaW1pdDY0Ci1mdW5jIGNfc2V0cmxpbWl0
NjQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIF9DX2ludAorLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmxpbWl0L3NldHJsaW1pdAorLy9leHRlcm4gc2V0cmxp
bWl0CitmdW5jIGNfc2V0cmxpbWl0KHJlc291cmNlIGludCwgcmxpbSAqUmxpbWl0KSBfQ19pbnQK
IGZ1bmMgU2V0cmxpbWl0KHJlc291cmNlIGludCwgcmxpbSAqUmxpbWl0KSAoZXJyIGVycm9yKSB7
Ci0JX3IgOj0gY19zZXRybGltaXQ2NChpbnQocmVzb3VyY2UpLCBybGltKQorCV9yIDo9IGNfc2V0
cmxpbWl0KGludChyZXNvdXJjZSksIHJsaW0pCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8g
Oj0gZmFsc2UKIAlpZiBfciA8IDAgewpAQCAtMzAyMCw5ICsyNjE5LDkgQEAgZnVuYyBTZXRybGlt
aXQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4KIH0K
IAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3RhdC9zdGF0NjQKLS8v
ZXh0ZXJuIHN0YXQ2NAotZnVuYyBjX3N0YXQ2NChwYXRoICpieXRlLCBzdGF0ICpTdGF0X3QpIF9D
X2ludAorLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3RhdC9zdGF0Cisv
L2V4dGVybiBzdGF0CitmdW5jIGNfc3RhdChwYXRoICpieXRlLCBzdGF0ICpTdGF0X3QpIF9DX2lu
dAogZnVuYyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAl2
YXIgX3AxICpieXRlCiAJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQpAQCAtMzAz
MCw3ICsyNjI5LDcgQEAgZnVuYyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIg
ZXJyb3IpIHsKIAkJcmV0dXJuCiAJfQogCUVudGVyc3lzY2FsbCgpCi0JX3IgOj0gY19zdGF0NjQo
X3AxLCBzdGF0KQorCV9yIDo9IGNfc3RhdChfcDEsIHN0YXQpCiAJdmFyIGVycm5vIEVycm5vCiAJ
c2V0RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8IDAgewpAQCAtMzA0NCw5ICsyNjQzLDkgQEAgZnVu
YyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsKIAlyZXR1cm4K
IH0KIAotLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVHJ1bmNhdGUvdHJ1
bmNhdGU2NAotLy9leHRlcm4gdHJ1bmNhdGU2NAotZnVuYyBjX3RydW5jYXRlNjQocGF0aCAqYnl0
ZSwgbGVuZ3RoIE9mZnNldF90KSBfQ19pbnQKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIFRydW5jYXRlL3RydW5jYXRlCisvL2V4dGVybiB0cnVuY2F0ZQorZnVuYyBjX3Ry
dW5jYXRlKHBhdGggKmJ5dGUsIGxlbmd0aCBPZmZzZXRfdCkgX0NfaW50CiBmdW5jIFRydW5jYXRl
KHBhdGggc3RyaW5nLCBsZW5ndGggaW50NjQpIChlcnIgZXJyb3IpIHsKIAl2YXIgX3AxICpieXRl
CiAJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQpAQCAtMzA1NCw3ICsyNjUzLDcg
QEAgZnVuYyBUcnVuY2F0ZShwYXRoIHN0cmluZywgbGVuZ3RoIGludDY0KSAoZXJyIGVycm9yKSB7
CiAJCXJldHVybgogCX0KIAlFbnRlcnN5c2NhbGwoKQotCV9yIDo9IGNfdHJ1bmNhdGU2NChfcDEs
IE9mZnNldF90KGxlbmd0aCkpCisJX3IgOj0gY190cnVuY2F0ZShfcDEsIE9mZnNldF90KGxlbmd0
aCkpCiAJdmFyIGVycm5vIEVycm5vCiAJc2V0RXJybm8gOj0gZmFsc2UKIAlpZiBfciA8IDAgewot
LSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVj
dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlv
cy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:32:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:32:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVlH-0000Yk-Ne; Thu, 26 Sep 2019 15:32:55 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVlG-0000YT-Fg
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:32:54 +0000
X-Inumbo-ID: e7acfe92-e072-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id e7acfe92-e072-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 15:32:53 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id B44D0F2026;
 Thu, 26 Sep 2019 17:32:52 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id ve9ZnjF8T5Db; Thu, 26 Sep 2019 17:32:52 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 86738F2004;
 Thu, 26 Sep 2019 17:32:48 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:36 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:35 +0200
Message-ID: <20190926153136.29689-9-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 08/11] Update packages.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXNlICpyZWdmaWxlLmdvIGluc3RlYWQgb2YgKmxhcmdlZmlsZS5nbyB0byBhdm9pZCB1c2FnZSBv
ZgoqNjQgKG9wZW42NCBldGMpIGZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9z
IE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4KLS0tCiBwYWNrYWdlcy51ayB8
IDQgKystLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkK
CmRpZmYgLS1naXQgYS9wYWNrYWdlcy51ayBiL3BhY2thZ2VzLnVrCmluZGV4IDQ0MWMxMzcuLjYw
ZjBlZjEgMTAwNjQ0Ci0tLSBhL3BhY2thZ2VzLnVrCisrKyBiL3BhY2thZ2VzLnVrCkBAIC0xMjEs
NyArMTIxLDcgQEAgJChMSUJHT19CVUlMRCkvbWF0aC9yYW5kLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9tYXRoL3JhbmQvZXhwLmdvICQoTElCR09fRVhUUkEKIAlta2RpciAtcCAkKGRpciAkQCkg
JiYgXAogCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1tYXRoL3JhbmQg
JF4gLW8gJEAgJiYgXAogCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCi0k
KExJQkdPX0JVSUxEKS9zeXNjYWxsLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2Rp
cmVudC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lbmRpYW5fbGl0dGxlLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2Vudl91bml4LmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9zeXNjYWxsL2VycnN0cl9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2Fs
bC9leGVjX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2V4ZWNfdW5peC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfbGludXhfYW1kNjQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eF91c3RhdC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4X3V0aW1lc25hbm8uZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lz
Y2FsbC9saWJjYWxsX3Bvc2l4X2xhcmdlZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lz
Y2FsbC9saWJjYWxsX3N1cHBvcnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGli
Y2FsbF91bmFtZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX3dhaXQ0
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xzZl9saW51eC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9tc2FuMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2Fs
bC9uZXRsaW5rX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NldHVpZGdp
ZF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zbGVlcF9zZWxlY3QuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2Ntc2dfbGludXguZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2Ntc2dfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3lzY2FsbC9zb2NrZXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0
X2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tldF9saW51eF90eXBl
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tldF9wb3NpeC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zdHIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2Nh
bGwvc3lzY2FsbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsX2Vycm5v
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfbGludXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF9saW51eF9hbWQ2NC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3N5c2NhbGwvdGltZXN0cnVjdC5nbyAkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9saWJjYWxscy5n
byAkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9zeXNpbmZvLmdvICQoTElCR09fQkFTRSkvZ2VuZXJh
dGVkL3N5c2NhbGxfYXJjaC5nbyAkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9lcG9sbC5nbworJChM
SUJHT19CVUlMRCkvc3lzY2FsbC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9kaXJl
bnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZW5kaWFuX2xpdHRsZS5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lbnZfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3lzY2FsbC9lcnJzdHJfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwv
ZXhlY19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9leGVjX3VuaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4X2FtZDY0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfbGludXhfdXN0YXQuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3N5c2NhbGwvbGliY2FsbF9saW51eF91dGltZXNuYW5vLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9zeXNjYWxsL2xpYmNhbGxfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2Nh
bGwvbGliY2FsbF9wb3NpeF9yZWdmaWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxs
L2xpYmNhbGxfc3VwcG9ydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxs
X3VuYW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfd2FpdDQuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbHNmX2xpbnV4LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zeXNjYWxsL21zYW4wLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL25l
dGxpbmtfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc2V0dWlkZ2lkX2xp
bnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NsZWVwX3NlbGVjdC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrY21zZ19saW51eC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vc3lzY2FsbC9zb2NrY21zZ191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9z
eXNjYWxsL3NvY2tldC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrZXRfbGlu
dXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0X2xpbnV4X3R5cGUuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0X3Bvc2l4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9zeXNjYWxsL3N0ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9z
eXNjYWxsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfZXJybm8uZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF9saW51eC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsX2xpbnV4X2FtZDY0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lz
Y2FsbC90aW1lc3RydWN0LmdvICQoTElCR09fQkFTRSkvZ2VuZXJhdGVkL2xpYmNhbGxzLmdvICQo
TElCR09fQkFTRSkvZ2VuZXJhdGVkL3N5c2luZm8uZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQv
c3lzY2FsbF9hcmNoLmdvICQoTElCR09fQkFTRSkvZ2VuZXJhdGVkL2Vwb2xsLmdvCiAJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCiAJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXN5c2NhbGwg
JF4gLW8gJEAgJiYgXAogCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCkBA
IC0zMjQsNyArMzI0LDcgQEAgJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L2NyeXB0by9jaGFj
aGEyMHBvbHkxMzA1Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2wKIAlta2RpciAtcCAkKGRp
ciAkQCkgJiYgXAogCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5k
b3IvZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1ICReIC1vICRAICYmIFwKIAlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQotJChMSUJHT19CVUlMRCkvb3Mu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Rpci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3MvZGlyX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9kaXJfbGFyZ2VmaWxlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9kaXJfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vb3MvZW52LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9lcnJvci5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3MvZXJyb3JfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhl
Yy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY19wb3NpeC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vb3MvZXhlY191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9leGVjdXRh
YmxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9leGVjdXRhYmxlX3Byb2Nmcy5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vb3MvZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZmls
ZV9wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZmlsZV91bml4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9vcy9nZXR3ZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGF0aC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGF0aF91bml4LmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9vcy9waXBlX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9wcm9jLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9vcy9zdGF0X2F0aW0uZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L29zL3N0YXRfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3RpY2t5X25vdGJzZC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3RyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9v
cy9zeXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N5c19saW51eC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3Mvc3lzX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3R5cGVz
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy90eXBlc191bml4LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9vcy93YWl0X3dhaXRpZC5nbworJChMSUJHT19CVUlMRCkvb3MubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL29zL2Rpci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX2djY2dv
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9kaXJfcmVnZmlsZS5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vb3MvZGlyX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Vudi5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJyb3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29z
L2Vycm9yX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWMuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL29zL2V4ZWNfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4
ZWNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZV9wcm9jZnMuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVfcG9zaXguZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3MvZ2V0d2QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3BhdGguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL29zL3BhdGhfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGlwZV9s
aW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcHJvYy5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vb3Mvc3RhdF9hdGltLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zdGF0X3VuaXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0aWNreV9ub3Ric2QuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL29zL3N0ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3lzLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9vcy9zeXNfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29z
L3N5c191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy90eXBlcy5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3MvdHlwZXNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvd2Fp
dF93YWl0aWQuZ28KIAkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwg
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKIAkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9b3MgJF4gLW8gJEAgJiYgXAogCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAk
KEA6Lm89LmdveCkpCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:32:59 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:32:59 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVlL-0000ZY-PK; Thu, 26 Sep 2019 15:32:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVlK-0000ZN-ON
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:32:58 +0000
X-Inumbo-ID: ea308b2a-e072-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id ea308b2a-e072-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 15:32:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E03E2F2025;
 Thu, 26 Sep 2019 17:32:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id fbb89e25OraZ; Thu, 26 Sep 2019 17:32:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 98015F2004;
 Thu, 26 Sep 2019 17:32:52 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:36 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:36 +0200
Message-ID: <20190926153136.29689-10-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 09/11] Use semaphores instead
 of futexes
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

R28gdXNlcyBmdXRleGVzIGZvciBsb2NraW5nIGluIGxpbnV4IGJ1dCB0aGV5IGFyZSBub3QgaW1w
bGVtZW50ZWQgaW4KVW5pa3JhZnQuIEFzIGEgcmVzdWx0IHdlIG5lZWQgdG8gc3dpdGNoIHRvIHNl
bWFwaG9yZXMuCgpTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9z
Lk1haW5hc0BuZWNsYWIuZXU+Ci0tLQogcGFja2FnZXMudWsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgICAyICstCiAuLi5nby1Vc2Utc2VtYXBob3Jlcy1pbnN0ZWFkLW9mLWZ1
dGV4ZXMucGF0Y2ggfCAxMzEgKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDEz
MiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hl
cy8wMDA2LWxpYmdvLVVzZS1zZW1hcGhvcmVzLWluc3RlYWQtb2YtZnV0ZXhlcy5wYXRjaAoKZGlm
ZiAtLWdpdCBhL3BhY2thZ2VzLnVrIGIvcGFja2FnZXMudWsKaW5kZXggNjBmMGVmMS4uZWM5NzQw
OCAxMDA2NDQKLS0tIGEvcGFja2FnZXMudWsKKysrIGIvcGFja2FnZXMudWsKQEAgLTgwLDcgKzgw
LDcgQEAgJChMSUJHT19CVUlMRCkvaW1hZ2UvY29sb3IubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2ltYWdlL2NvbG9yL2NvbG9yLmdvICQoTElCR08KIAlta2RpciAtcCAkKGRpciAkQCkgJiYgXAog
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbWFnZS9jb2xvciAkXiAt
byAkQCAmJiBcCiAJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKLSQoTElC
R09fQlVJTEQpL3J1bnRpbWUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvYWxnLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2Nnb19nY2Nnby5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9jaGFuLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2Nv
bXBpbGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2NwdXByb2YuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY3B1dGlja3MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvZGVidWcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZW52X3Bvc2l4
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2Vycm9yLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL2V4dGVybi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9m
ZmkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaGFzaDY0LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL2hhc2htYXAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvaGFzaG1hcF9mYXN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2lmYWNlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2xmc3RhY2suZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvbGZzdGFja182NGJpdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS9sb2NrX2Z1dGV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21jYWNoZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9tcHJvZi5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9tc2FuMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9tc3Rh
dHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbmV0cG9sbC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS9uZXRwb2xsX2Vwb2xsLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL29zX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL29zX2xp
bnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3BhbmljLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL3ByaW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L3Byb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcmFjZTAuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvcmRlYnVnLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL3J1bnRpbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZTEuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZTIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvc2VsZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3Nl
bWEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lnbmFsX2djY2dvLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NpZ25hbF9zaWdoYW5kbGVyLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL3NpZ25hbF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL3NpZ3F1ZXVlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NpemVjbGFz
c2VzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NsaWNlLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL3N0cmluZy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9zdHVicy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zdHViczIuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc3ltdGFiLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL3RpbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHJhY2UuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHJhY2ViYWNrX2djY2dvLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL3R5cGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUv
dHlwZWtpbmQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdW5hbGlnbmVkMS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS91dGY4LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3dyaXRlX2Vyci5nbyAkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9ydW50aW1lX3N5
c2luZm8uZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQvc2lndGFiLmdvCiskKExJQkdPX0JVSUxE
KS9ydW50aW1lLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2FsZy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jZ29fZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvY2hhbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jb21waWxlci5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jcHVwcm9mLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL2NwdXRpY2tzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L2RlYnVnLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2Vudl9wb3NpeC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9lcnJvci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
cnVudGltZS9leHRlcm4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZmZpLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2hhc2g2NC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS9oYXNobWFwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2hhc2ht
YXBfZmFzdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9pZmFjZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sZnN0YWNrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL2xmc3RhY2tfNjRiaXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbG9j
a19zZW1hLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21jYWNoZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9tcHJvZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS9tc2FuMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9tc3RhdHMuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbmV0cG9sbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS9uZXRwb2xsX2Vwb2xsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L29zX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL29zX2xpbnV4LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3BhbmljLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3ByaW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3Byb2MuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcmFjZTAuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvcmRlYnVnLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3J1bnRp
bWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZTEuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZTIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1
bnRpbWUvc2VsZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NlbWEuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lnbmFsX2djY2dvLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL3NpZ25hbF9zaWdoYW5kbGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3NpZ25hbF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3Np
Z3F1ZXVlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NpemVjbGFzc2VzLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NsaWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3N0cmluZy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zdHVicy5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zdHViczIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvc3ltdGFiLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3Rp
bWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHJhY2UuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvdHJhY2ViYWNrX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3R5cGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHlwZWtpbmQu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdW5hbGlnbmVkMS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS91dGY4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L3dyaXRlX2Vyci5nbyAkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28g
JChMSUJHT19CQVNFKS9nZW5lcmF0ZWQvc2lndGFiLmdvCiAJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCiAJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXJ1bnRpbWUgLWZnby1jLWhlYWRlcj0k
KExJQkdPX0JBU0UpL2dlbmVyYXRlZC9ydW50aW1lLmluYy50bXAgLWZnby1jb21waWxpbmctcnVu
dGltZSAkXiAtbyAkQCAmJiBcCiAJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwNi1saWJnby1Vc2Utc2VtYXBob3Jlcy1pbnN0ZWFk
LW9mLWZ1dGV4ZXMucGF0Y2ggYi9wYXRjaGVzLzAwMDYtbGliZ28tVXNlLXNlbWFwaG9yZXMtaW5z
dGVhZC1vZi1mdXRleGVzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmZkYzEyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzLzAwMDYtbGliZ28tVXNlLXNlbWFw
aG9yZXMtaW5zdGVhZC1vZi1mdXRleGVzLnBhdGNoCkBAIC0wLDAgKzEsMTMxIEBACitGcm9tIGFk
NTJhNjdjYTA4NGQ0MDc2OGFkOGZkZjQ5MmVlMjZmNDE5MDI2NzAgTW9uIFNlcCAxNyAwMDowMDow
MCAyMDAxCitGcm9tOiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNs
YWIuZXU+CitEYXRlOiBGcmksIDYgU2VwIDIwMTkgMTI6MDg6NTMgKzAyMDAKK1N1YmplY3Q6IFtQ
QVRDSF0gVXNlIHNlbWFwaG9yZXMgaW5zdGVhZCBvZiBmdXRleGVzCisKK2Z1dGV4ZXMgYXJlIG5v
dCBpbXBsZW1lbnRlZCBvbiBVbmlrcmFmdC4gSW4gbGliZ28gdGhlcmUgYXJlIHNvbWUgb3RoZXIK
K3RhcmdldHMgKGxpa2Ugb3BlbmJzZCkgd2hpY2ggdXNlIHNlbWFwaG9yZXMgaW5zdGVhZCBvZiBm
dXRleGVzLgorRm9sbG93aW5nIHRoZSBzYW1lIGFwcHJvYWNoIGFzIGluIHRoZXNlIHRhcmdldHMs
IHdpdGggdGhpcyBwYXRjaCAKK2xvY2tpbmcgaXMgZG9uZSB1c2luZyBzZW1hcGhvcmVzLgorCist
LS0KKyBsaWJnby9nby9ydW50aW1lL29zX2xpbnV4LmdvIHwgOTkgKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKy0tCisgMSBmaWxlIGNoYW5nZWQsIDk2IGluc2VydGlvbnMoKyksIDMg
ZGVsZXRpb25zKC0pCisKK2RpZmYgLS1naXQgYS9saWJnby9nby9ydW50aW1lL29zX2xpbnV4Lmdv
IGIvbGliZ28vZ28vcnVudGltZS9vc19saW51eC5nbworaW5kZXggYWQzMzQ4NjllLi43NzVmMzQ4
NTkgMTAwNjQ0CistLS0gYS9saWJnby9nby9ydW50aW1lL29zX2xpbnV4LmdvCisrKysgYi9saWJn
by9nby9ydW50aW1lL29zX2xpbnV4LmdvCitAQCAtOSw5ICs5LDkgQEAgaW1wb3J0ICgKKyAJInVu
c2FmZSIKKyApCisgCistdHlwZSBtT1Mgc3RydWN0IHsKKy0JdW51c2VkIGJ5dGUKKy19CisrLy90
eXBlIG1PUyBzdHJ1Y3QgeworKy8vCXVudXNlZCBieXRlCisrLy99CisgCisgZnVuYyBmdXRleChh
ZGRyIHVuc2FmZS5Qb2ludGVyLCBvcCBpbnQzMiwgdmFsIHVpbnQzMiwgdHMsIGFkZHIyIHVuc2Fm
ZS5Qb2ludGVyLCB2YWwzIHVpbnQzMikgaW50MzIgeworIAlyZXR1cm4gaW50MzIoc3lzY2FsbChf
U1lTX2Z1dGV4LCB1aW50cHRyKGFkZHIpLCB1aW50cHRyKG9wKSwgdWludHB0cih2YWwpLCB1aW50
cHRyKHRzKSwgdWludHB0cihhZGRyMiksIHVpbnRwdHIodmFsMykpKQorQEAgLTE2OSwzICsxNjks
OTYgQEAgZnVuYyBzeXNhdXh2KGF1eHYgW111aW50cHRyKSBpbnQgeworIAorIC8vIFRlbXBvcmFy
eSBmb3IgZ2NjZ28gdW50aWwgd2UgcG9ydCBtZW1fR09PUy5nby4KKyB2YXIgYWRkcnNwYWNlX3Zl
YyBbMV1ieXRlCisrCisrLy8gQ29weXJpZ2h0IDIwMTEgVGhlIEdvIEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisrLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUKKysvLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNF
IGZpbGUuCisrCisrdHlwZSBtT1Mgc3RydWN0IHsKKysJd2FpdHNlbWEgdWludHB0ciAvLyBzZW1h
cGhvcmUgZm9yIHBhcmtpbmcgb24gbG9ja3MKKyt9CisrCisrLy9leHRlcm4gbWFsbG9jCisrZnVu
YyBsaWJjX21hbGxvYyh1aW50cHRyKSB1bnNhZmUuUG9pbnRlcgorKworKy8vZ286bm9lc2NhcGUK
KysvL2V4dGVybiBzZW1faW5pdAorK2Z1bmMgc2VtX2luaXQoc2VtICpzZW10LCBwc2hhcmVkIGlu
dDMyLCB2YWx1ZSB1aW50MzIpIGludDMyCisrCisrLy9nbzpub2VzY2FwZQorKy8vZXh0ZXJuIHNl
bV93YWl0CisrZnVuYyBzZW1fd2FpdChzZW0gKnNlbXQpIGludDMyCisrCisrLy9nbzpub2VzY2Fw
ZQorKy8vZXh0ZXJuIHNlbV9wb3N0CisrZnVuYyBzZW1fcG9zdChzZW0gKnNlbXQpIGludDMyCisr
CisrLy9nbzpub2VzY2FwZQorKy8vZXh0ZXJuIHNlbV90aW1lZHdhaXQKKytmdW5jIHNlbV90aW1l
ZHdhaXQoc2VtICpzZW10LCB0aW1lb3V0ICp0aW1lc3BlYykgaW50MzIKKysKKysvL2dvOm5vc3Bs
aXQKKytmdW5jIHNlbWFjcmVhdGUobXAgKm0pIHsKKysJaWYgbXAubW9zLndhaXRzZW1hICE9IDAg
eworKwkJcmV0dXJuCisrCX0KKysKKysJdmFyIHNlbSAqc2VtdAorKworKwkvLyBDYWxsIGxpYmMn
cyBtYWxsb2MgcmF0aGVyIHRoYW4gbWFsbG9jLiBUaGlzIHdpbGwKKysJLy8gYWxsb2NhdGUgc3Bh
Y2Ugb24gdGhlIEMgaGVhcC4gV2UgY2FuJ3QgY2FsbCBtYWxsb2MKKysJLy8gaGVyZSBiZWNhdXNl
IGl0IGNvdWxkIGNhdXNlIGEgZGVhZGxvY2suCisrCXNlbSA9ICgqc2VtdCkobGliY19tYWxsb2Mo
dW5zYWZlLlNpemVvZigqc2VtKSkpCisrCWlmIHNlbV9pbml0KHNlbSwgMCwgMCkgIT0gMCB7Cisr
CQl0aHJvdygic2VtX2luaXQiKQorKwl9CisrCW1wLm1vcy53YWl0c2VtYSA9IHVpbnRwdHIodW5z
YWZlLlBvaW50ZXIoc2VtKSkKKyt9CisrCisrLy9nbzpub3NwbGl0CisrZnVuYyBzZW1hc2xlZXAo
bnMgaW50NjQpIGludDMyIHsKKysJX21fIDo9IGdldGcoKS5tCisrCWlmIG5zID49IDAgeworKwkJ
dmFyIHRzIHRpbWVzcGVjCisrCQkvL3RzLnNldF9zZWMobnMgLyAxMDAwMDAwMDAwKQorKwkJLy90
cy5zZXRfbnNlYyhpbnQzMihucyAlIDEwMDAwMDAwMDApKQorKwkJbnMgKz0gbmFub3RpbWUoKQor
KwkJaWYgc3lzLlB0clNpemUgPT0gOCB7CisrCQkJdHMuc2V0X3NlYyhucyAvIDEwMDAwMDAwMDAp
CisrCQkJdHMuc2V0X25zZWMoaW50MzIobnMgJSAxMDAwMDAwMDAwKSkKKysJCX0gZWxzZSB7Cisr
CQkJdHMudHZfbnNlYyA9IDAKKysJCQl0cy5zZXRfc2VjKGludDY0KHRpbWVkaXYobnMsIDEwMDAw
MDAwMDAsICgqaW50MzIpKHVuc2FmZS5Qb2ludGVyKCZ0cy50dl9uc2VjKSkpKSkKKysJCX0KKysJ
CS8vdmFyIG5zZWMgaW50MzIKKysJCS8vdHMuc2V0X3NlYyhpbnQ2NCh0aW1lZGl2KG5zLCAxMDAw
MDAwMDAwLCAmbnNlYykpKQorKwkJLy90cy5zZXRfbnNlYyhuc2VjKQorKworKwkJaWYgc2VtX3Rp
bWVkd2FpdCgoKnNlbXQpKHVuc2FmZS5Qb2ludGVyKF9tXy5tb3Mud2FpdHNlbWEpKSwgJnRzKSAh
PSAwIHsKKysJCQllcnIgOj0gZXJybm8oKQorKwkJCWlmIGVyciA9PSBfRVRJTUVET1VUIHx8IGVy
ciA9PSBfRUFHQUlOIHx8IGVyciA9PSBfRUlOVFIgeworKwkJCQlyZXR1cm4gLTEKKysJCQl9Cisr
CQkJdGhyb3coInNlbV90aW1lZHdhaXQiKQorKwkJfQorKwkJcmV0dXJuIDAKKysJfQorKwlmb3Ig
eworKwkJcjEgOj0gc2VtX3dhaXQoKCpzZW10KSh1bnNhZmUuUG9pbnRlcihfbV8ubW9zLndhaXRz
ZW1hKSkpCisrCQlpZiByMSA9PSAwIHsKKysJCQlicmVhaworKwkJfQorKwkJaWYgZXJybm8oKSA9
PSBfRUlOVFIgeworKwkJCWNvbnRpbnVlCisrCQl9CisrCQl0aHJvdygic2VtX3dhaXQiKQorKwl9
CisrCXJldHVybiAwCisrfQorKworKy8vZ286bm9zcGxpdAorK2Z1bmMgc2VtYXdha2V1cChtcCAq
bSkgeworKwlpZiBzZW1fcG9zdCgoKnNlbXQpKHVuc2FmZS5Qb2ludGVyKG1wLm1vcy53YWl0c2Vt
YSkpKSAhPSAwIHsKKysJCXRocm93KCJzZW1fcG9zdCIpCisrCX0KKyt9CistLSAKKzIuMTcuMQor
Ci0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:33:09 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:33:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVlV-0000b1-2n; Thu, 26 Sep 2019 15:33:09 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVlT-0000am-L6
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:33:07 +0000
X-Inumbo-ID: ef12f15a-e072-11e9-bf31-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id ef12f15a-e072-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 15:33:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 29DA2105720;
 Thu, 26 Sep 2019 17:33:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id eu2GLeLtT9_P; Thu, 26 Sep 2019 17:33:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 026EC10570B;
 Thu, 26 Sep 2019 17:33:05 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:59 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:32:47 +0200
Message-ID: <20190926153248.30763-1-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 10/11] Add glue code and stubs
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIE1ha2VmaWxlLnVrIHwgICAyICsKIGdsdWUuYyAgICAgIHwgMTk5ICsrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMg
Y2hhbmdlZCwgMjAxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnbHVlLmMKCmRp
ZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCmluZGV4IGYyMDk1OTguLjcxNDM4
NWMgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01ha2VmaWxlLnVrCkBAIC04Niw2ICs4
Niw4IEBAIExJQkdPX0NGTEFHUy15ICs9IC1Xbm8tY2FzdC1xdWFsIC1Xbm8tdW51c2VkLXZhbHVl
CiAjIGxpYmdvIGNvZGUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKK0xJQkdPX1NSQ1MteSAr
PSAkKExJQkdPX0JBU0UpL2dsdWUuYworCiBMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2J5dGVzL2luZGV4Ynl0ZS5jfGJ5dGVzCiBMSUJHT19TUkNTLXkgKz0gJChMSUJHT19F
WFRSQUNURUQpL2dvL2xvZy9zeXNsb2cvc3lzbG9nX2MuYwogTElCR09fU1JDUy15ICs9ICQoTElC
R09fRVhUUkFDVEVEKS9nby9yZWZsZWN0L21ha2VmdW5jX2ZmaV9jLmMKZGlmZiAtLWdpdCBhL2ds
dWUuYyBiL2dsdWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTRjYmNi
Ci0tLSAvZGV2L251bGwKKysrIGIvZ2x1ZS5jCkBAIC0wLDAgKzEsMTk5IEBACisvKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgorICoKKyAqIEF1dGhvcnM6IENo
YXJhbGFtcG9zIE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFzQG5lY2xhYi5ldT4KKyAqCisgKgor
ICogQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJB
Q1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgorICovCisKKy8qCisgKiBzdHVicworICovCisK
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL21t
YW4uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNp
bmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+CisjaW5jbHVkZSA8cHRlX3R5cGVzLmg+CisKK2ludCBl
cG9sbF9jcmVhdGUoaW50IHNpemUgX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBl
cG9sbF9jdGwoaW50IGVwZmQgX191bnVzZWQsIGludCBvcCBfX3VudXNlZCwgaW50IGZkIF9fdW51
c2VkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50IF9fdW51c2VkKQoreworCXJldHVybiAwOwor
fQorCitpbnQgZXBvbGxfd2FpdChpbnQgZXBmZCBfX3VudXNlZCwgc3RydWN0IGVwb2xsX2V2ZW50
ICpldmVudHMgX191bnVzZWQsIGludCBtYXhldmVudHMgX191bnVzZWQsIGludCB0aW1lb3V0IF9f
dW51c2VkKQoreworCXJldHVybiAwOworfQorCitpbnQgbWFkdmlzZSh2b2lkICphZGRyIF9fdW51
c2VkLCBzaXplX3QgbGVuZ3RoIF9fdW51c2VkLCBpbnQgYWR2aWNlIF9fdW51c2VkKQoreworCXJl
dHVybiAwOworfQorCitpbnQgbWluY29yZSh2b2lkICphZGRyIF9fdW51c2VkLCBzaXplX3QgbGVu
Z3RoIF9fdW51c2VkLCB1bnNpZ25lZCBjaGFyICp2ZWMgX191bnVzZWQpCit7CisJcmV0dXJuIDA7
Cit9CisKK2ludCBwcmN0bChpbnQgb3B0aW9uIF9fdW51c2VkLCB1bnNpZ25lZCBsb25nIGFyZzIg
X191bnVzZWQsIHVuc2lnbmVkIGxvbmcgYXJnMyBfX3VudXNlZCwgdW5zaWduZWQgbG9uZyBhcmc0
IF9fdW51c2VkLCB1bnNpZ25lZCBsb25nIGFyZzUgX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9
CisKK2ludCBwdGhyZWFkX3NpZ21hc2soaW50IGhvdyBfX3VudXNlZCwgY29uc3Qgc2lnc2V0X3Qg
KnNldCBfX3VudXNlZCwgc2lnc2V0X3QgKm9sZHNldCBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsK
K30KKworbG9uZyBwdHJhY2Uodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHJlYm9vdChp
bnQgbWFnaWMgX191bnVzZWQsIGludCBtYWdpYzIgX191bnVzZWQsIGludCBjbWQgX191bnVzZWQs
IHZvaWQgKmFyZyBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHNjaGVkX2dldGFm
ZmluaXR5KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXRpdGltZXIoaW50IHdoaWNo
IF9fdW51c2VkLCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICpuZXdfdmFsdWUgX191bnVzZWQsIHN0
cnVjdCBpdGltZXJ2YWwgKm9sZF92YWx1ZSBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKwor
aW50IHNldHRpbWVvZmRheShjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdHYgX191bnVzZWQsIGNvbnN0
IHN0cnVjdCB0aW1lem9uZSAqdHogX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyN1bmRl
ZiBzaWdhZGRzZXQKK2ludCBzaWdhZGRzZXQoc2lnc2V0X3QgKnNldCBfX3VudXNlZCwgaW50IHNp
Z251bSBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworaW50IHNpZ2FsdHN0YWNrKGNvbnN0
IHN0YWNrX3QgKnNzIF9fdW51c2VkLCBzdGFja190ICpvbGRfc3MgX191bnVzZWQpCit7CisJcmV0
dXJuIDA7Cit9CisKKyN1bmRlZiBzaWdkZWxzZXQKK2ludCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNl
dCBfX3VudXNlZCwgaW50IHNpZ251bSBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMDsKK30KKworI3Vu
ZGVmIHNpZ2VtcHR5c2V0CitpbnQgc2lnZW1wdHlzZXQoc2lnc2V0X3QgKnNldCBfX3VudXNlZCkK
K3sKKwlyZXR1cm4gMDsKK30KKworI3VuZGVmIHNpZ2ZpbGxzZXQKK2ludCBzaWdmaWxsc2V0KHNp
Z3NldF90ICpzZXQgX191bnVzZWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2xvbmcgc3lzY2FsbChs
b25nIG51bWJlciBfX3VudXNlZCwgLi4uKQoreworCXJldHVybiAwOworfQorCitzc2l6ZV90IHNl
bmRmaWxlNjQoaW50IG91dF9mZCBfX3VudXNlZCwgaW50IGluX2ZkIF9fdW51c2VkLCBvZmZfdCAq
b2Zmc2V0ICBfX3VudXNlZCwgc2l6ZV90ICBjb3VudCBfX3VudXNlZCkKK3sKKwlyZXR1cm4gMTsK
K30KKworaW50IGdldGdyb3VwbGlzdChjb25zdCBjaGFyICp1c2VyIF9fdW51c2VkLCBnaWRfdCBn
cm91cCBfX3VudXNlZCwgZ2lkX3QgKmdyb3VwcyBfX3VudXNlZCwgaW50ICpuZ3JvdXBzIF9fdW51
c2VkKQoreworCXJldHVybiAwOworfQorCitpbnQgZ2V0Z3JuYW1fcihjb25zdCBjaGFyICpuYW1l
IF9fdW51c2VkLCBzdHJ1Y3QgZ3JvdXAgKmdycCBfX3VudXNlZCwKKwkJY2hhciAqYnVmIF9fdW51
c2VkLCBzaXplX3QgYnVmbGVuIF9fdW51c2VkLCBzdHJ1Y3QgZ3JvdXAgKipyZXN1bHQgX191bnVz
ZWQpCit7CisJcmV0dXJuIDA7Cit9CitpbnQgZ2V0Z3JnaWRfcihnaWRfdCBnaWQgX191bnVzZWQs
IHN0cnVjdCBncm91cCAqZ3JwIF9fdW51c2VkLAorCQljaGFyICpidWYgX191bnVzZWQsIHNpemVf
dCBidWZsZW4gX191bnVzZWQsIHN0cnVjdCBncm91cCAqKnJlc3VsdCBfX3VudXNlZCkKK3sKKwly
ZXR1cm4gMDsKK30KKwordm9pZCB1a19zeXNjYWxsX2ZuX19fTlJfY2xvbmUodm9pZCkKK3sKK30K
KworLyoKKyAqIEdsdWUgY29kZQorICovCisKKyNpbmNsdWRlIDx1Y29udGV4dC5oPgorI2luY2x1
ZGUgPHVrL3NjaGVkLmg+CisjaW5jbHVkZSA8dWsvdGhyZWFkLmg+CisjaW5jbHVkZSA8dWsvYXNt
L2xpbWl0cy5oPgorCisjZGVmaW5lIF9fZXJybm9fbG9jYXRpb24gX19lcnJubworCit2b2lkIG1h
a2Vjb250ZXh0MSAodWNvbnRleHRfdCAqX191Y3AsIHZvaWQgKCpfX2Z1bmMpICh2b2lkKSwgaW50
IF9fYXJnYywgLi4uKQoreworCXN0cnVjdCB1a190aHJlYWQgKmN1cnJlbnQgPSB1a190aHJlYWRf
Y3VycmVudCgpOworCSooKHVuc2lnbmVkIGxvbmcgKikgX191Y3AtPnVjX3N0YWNrLnNzX3NwKSA9
ICh1bnNpZ25lZCBsb25nKSBjdXJyZW50OworCW1ha2Vjb250ZXh0KF9fdWNwLCBfX2Z1bmMsIF9f
YXJnYyk7Cit9CisKK3ZvaWQgKmFsbG9jX3N0YWNrKCkKK3sKKwlzdHJ1Y3QgdWtfc2NoZWQgKnNj
aGVkID0gdWtfc2NoZWRfZ2V0X2RlZmF1bHQoKTsKKwl2b2lkICpzdGFjayA9IHVrX3BhbGxvYyhz
Y2hlZC0+YWxsb2NhdG9yLCBfX1NUQUNLX1NJWkVfUEFHRV9PUkRFUik7CisJaWYgKHN0YWNrID09
IE5VTEwpCisJCXByaW50ZigiZXJyb3IgYWxsb2NhdGluZyBzdGFja1xuIik7CisJcmV0dXJuIHN0
YWNrOworfQorCitzaXplX3QgZ2V0X3N0YWNrX3NpemUodm9pZCkKK3sKKwlyZXR1cm4gX19TVEFD
S19TSVpFOworfQorCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v
bGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:33:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:33:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVla-0000bo-5p; Thu, 26 Sep 2019 15:33:14 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVlY-0000be-K7
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:33:12 +0000
X-Inumbo-ID: ef12f15a-e072-11e9-8628-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id ef12f15a-e072-11e9-8628-bc764e2007e4;
 Thu, 26 Sep 2019 15:33:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 1C0B3F2025;
 Thu, 26 Sep 2019 17:33:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id PwQAoe00iOtl; Thu, 26 Sep 2019 17:33:04 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DBD19F2004;
 Thu, 26 Sep 2019 17:33:00 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:35 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:31 +0200
Message-ID: <20190926153136.29689-5-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 04/11] Add patches to build
 the library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KCmxpYmdvIGV4cGVjdHMg
YSB1bndpbmQuaCBoZWFkZXIgYWx0aG91Z2ggaXQgY29tZXMgd2l0aCBpdHMgb3duIGhlYWRlciwK
dW53aW5kLWdlbmVyaWMuaCwgc28gd2Ugd2lsbCBiZSB1c2luZyB0aGF0IG9uZSBpbnN0ZWFkLgoK
VGhlIHNlY29uZCBwYXRjaCBzaG91bGQgYmUgYWxzbyB1cHN0cmVhbWVkIHNpbmNlIGl0IHNlZW1z
IHRvIHJlbW92ZSBhbgp1bm5lY2Vzc2FyeSBpbmNsdWRlIGRpcmVjdGl2ZS4KClNpZ25lZC1vZmYt
Ynk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+Ci0tLQogLi4uLXVud2luZC1o
ZWFkZXItaW5zdGVhZC1vZi1zeXN0ZW0tb25lLnBhdGNoIHwgMjUgKysrKysrKysrKysrKysrKysr
KwogcGF0Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0Y2ggICAgIHwgMjUgKysr
KysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA1MCBpbnNlcnRpb25zKCspCiBjcmVh
dGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLWxpYmdvLVVzZS1nY2Mtb3duLXVud2luZC1oZWFk
ZXItaW5zdGVhZC1vZi1zeXN0ZW0tb25lLnBhdGNoCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hl
cy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0Y2gKCmRpZmYgLS1naXQgYS9wYXRjaGVz
LzAwMDEtbGliZ28tVXNlLWdjYy1vd24tdW53aW5kLWhlYWRlci1pbnN0ZWFkLW9mLXN5c3RlbS1v
bmUucGF0Y2ggYi9wYXRjaGVzLzAwMDEtbGliZ28tVXNlLWdjYy1vd24tdW53aW5kLWhlYWRlci1p
bnN0ZWFkLW9mLXN5c3RlbS1vbmUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uN2VjMDliYwotLS0gL2Rldi9udWxsCisrKyBiL3BhdGNoZXMvMDAwMS1saWJnby1Vc2Ut
Z2NjLW93bi11bndpbmQtaGVhZGVyLWluc3RlYWQtb2Ytc3lzdGVtLW9uZS5wYXRjaApAQCAtMCww
ICsxLDI1IEBACitGcm9tIDU5NmIzYjMzZTcyYzVjNjRjYjdlYWQ0YWVlMjk4Mzg2OTAwOGFkNDQg
TW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCitEYXRlOiBGcmksIDE2IEF1ZyAyMDE5IDIzOjEzOjAz
ICswMjAwCitTdWJqZWN0OiBbUEFUQ0ggMS8yXSBsaWJnbzogVXNlIGdjYyBvd24gdW53aW5kIGhl
YWRlciBpbnN0ZWFkIG9mIHN5c3RlbSBvbmUKKworU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUg
PGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KKy0tLQorIGxpYmdvL3J1bnRpbWUvZ28tdW53aW5kLmMg
fCAyICstCisgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCisK
K2RpZmYgLS1naXQgYS9saWJnby9ydW50aW1lL2dvLXVud2luZC5jIGIvbGliZ28vcnVudGltZS9n
by11bndpbmQuYworaW5kZXggNGM5ZmI0OWM5Li45MDdiYTAzMzYgMTAwNjQ0CistLS0gYS9saWJn
by9ydW50aW1lL2dvLXVud2luZC5jCisrKysgYi9saWJnby9ydW50aW1lL2dvLXVud2luZC5jCitA
QCAtOSw3ICs5LDcgQEAKKyAjaW5jbHVkZSA8c3RkbGliLmg+CisgI2luY2x1ZGUgPHVuaXN0ZC5o
PgorIAorLSNpbmNsdWRlICJ1bndpbmQuaCIKKysjaW5jbHVkZSAidW53aW5kLWdlbmVyaWMuaCIK
KyAjZGVmaW5lIE5PX1NJWkVfT0ZfRU5DT0RFRF9WQUxVRQorICNpbmNsdWRlICJ1bndpbmQtcGUu
aCIKKyAKKy0tIAorMi4yMC4xCisKZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMi1saWJnby1Oby1m
dXRleC10b25pZ2h0LnBhdGNoIGIvcGF0Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQu
cGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5MmU0NwotLS0gL2Rl
di9udWxsCisrKyBiL3BhdGNoZXMvMDAwMi1saWJnby1Oby1mdXRleC10b25pZ2h0LnBhdGNoCkBA
IC0wLDAgKzEsMjUgQEAKK0Zyb20gNWVhOWQ3NjA2MGIwMzQ3MDAyNDY4MTU5ZmM1MGI4ZjgxYmM3
MjZiMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IENvc3RpbiBMdXB1IDxjb3N0aW4u
bHVwQGdtYWlsLmNvbT4KK0RhdGU6IEZyaSwgMTYgQXVnIDIwMTkgMjM6MTQ6MzQgKzAyMDAKK1N1
YmplY3Q6IFtQQVRDSCAyLzJdIGxpYmdvOiBObyBmdXRleCB0b25pZ2h0CisKK1NpZ25lZC1vZmYt
Ynk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+CistLS0KKyBsaWJnby9ydW50
aW1lL3RocmVhZC1saW51eC5jIHwgMSAtCisgMSBmaWxlIGNoYW5nZWQsIDEgZGVsZXRpb24oLSkK
KworZGlmZiAtLWdpdCBhL2xpYmdvL3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMgYi9saWJnby9ydW50
aW1lL3RocmVhZC1saW51eC5jCitpbmRleCA4MWFkMGY5YzkuLmZkNWEzMTE4MiAxMDA2NDQKKy0t
LSBhL2xpYmdvL3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMKKysrKyBiL2xpYmdvL3J1bnRpbWUvdGhy
ZWFkLWxpbnV4LmMKK0BAIC05LDcgKzksNiBAQAorIAorICNpbmNsdWRlIDx1bmlzdGQuaD4KKyAj
aW5jbHVkZSA8c3lzY2FsbC5oPgorLSNpbmNsdWRlIDxsaW51eC9mdXRleC5oPgorIAorIHZvaWQK
KyBydW50aW1lX29zaW5pdCh2b2lkKQorLS0gCisyLjIwLjEKKwotLSAKMi4xNy4xCgoKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1h
aWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 15:33:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 15:33:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDVlf-0000d9-7e; Thu, 26 Sep 2019 15:33:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVld-0000cL-Ke
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:33:17 +0000
X-Inumbo-ID: ef20e210-e072-11e9-b588-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id ef20e210-e072-11e9-b588-bc764e2007e4;
 Thu, 26 Sep 2019 15:33:05 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 2FF01105722;
 Thu, 26 Sep 2019 17:33:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id X_1k3Br1s7YW; Thu, 26 Sep 2019 17:33:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 09E3D10571F;
 Thu, 26 Sep 2019 17:33:05 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:59 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:32:48 +0200
Message-ID: <20190926153248.30763-2-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153248.30763-1-Charalampos.Mainas@neclab.eu>
References: <20190926153248.30763-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To titania.office.hd
 (192.168.24.89)
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 11/11] Adding extra information
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVj
bGFiLmV1PgotLS0KIFJFQURNRS5tZCB8IDE5ICsrKysrKysrKysrKysrKysrKy0KIDEgZmlsZSBj
aGFuZ2VkLCAxOCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvUkVB
RE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDVjZTY2NzcuLmJkOGM0NWYgMTAwNjQ0Ci0tLSBhL1JF
QURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTEsNyArMSwyNCBAQAogbGliZ28gZm9yIFVuaWty
YWZ0CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGlzIGlzIHRoZSBwb3J0IG9m
IGxpYmdvIGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5LgorVGhpcyBpcyB0aGUgcG9y
dCBvZiBsaWJnbyBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJuYWwgbGlicmFyeS4gWW91IHdpbGwgbmVl
ZCB0aGUgZm9sbG93aW5nCitleHRlcm5hbCBsaWJyYXJpZXMgdG8gbWFrZSBpdCB3b3JrLiAKKwor
KyBuZXdsaWIKKysgY29tcGlsZXItcnQKKysgbGlidW53aW5kCisrIGxpYmN4eAorKyBsaWJjeHhh
YmkKKysgcHRocmVhZC1lbWJlZGRlZAorKyBnY2MKKysgbHdpcAorKyBsaWJ1Y29udGV4dAorCitX
aGVuIGFkZGluZyB0aGUgbGlicmFyeSBpbiB0aGUgZGVwZW5kZW5jeSBsaXN0LCBnY2Mgc2hvdWxk
IHN0YXkgYmVmb3JlIGxpYmdvLCBlLmcuOgorCitgYGAKKy4uLiQoVUtfTElCUykvZ2NjOiQoVUtf
TElCUykvbGliZ286Li4uCitgYGAKIAogUGxlYXNlIHJlZmVyIHRvIHRoZSBgUkVBRE1FLm1kYCBh
cyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9jL2AKIHN1YmRpcmVjdG9yeSBv
ZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5LgotLSAKMi4xNy4xCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Thu Sep 26 17:28:10 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Thu, 26 Sep 2019 17:28:10 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDXYm-0004Gg-Hx; Thu, 26 Sep 2019 17:28:08 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=igId=XV=gmail.com=salerio@srs-us1.protection.inumbo.net>)
 id 1iDXYl-0004Gb-9z
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 17:28:07 +0000
X-Inumbo-ID: 00a48d9c-e083-11e9-97fb-bc764e2007e4
Received: from mail-ua1-x935.google.com (unknown [2607:f8b0:4864:20::935])
 by localhost (Halon) with ESMTPS
 id 00a48d9c-e083-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 17:28:06 +0000 (UTC)
Received: by mail-ua1-x935.google.com with SMTP id b14so1041252uap.6
 for <minios-devel@lists.xenproject.org>; Thu, 26 Sep 2019 10:28:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:from:date:message-id:subject:to;
 bh=tKVg5EA46HMOU8dlHqzq6o1hLPyJmQiRW1MjY4O+JSU=;
 b=Ndgu0HZsTeTNF+aByJ13rWd5E+VoP46+yyt+uzhAx+3uRd0GSAoSgN5Fui61rD4vQp
 NlVUCVVnK45vPporHVr5v1exIF4tGrt37pD0CETPYjV6eDiCTK4JPpUzi/0ygcMbUXoS
 +51x0dfP16cGFI9Dr0zu4f8m6VcnJ4wZg3ClMeOLcBcZViwk1h/TN0t8w/KRyGu6I2+2
 BV0QTbWxu52c93k35ukpMTxZqU1YTe9xiACgseLUUNFUWQ+bU47vu0Pn/yQ1nzozuJw0
 pl3Nu3DnOK7RWfZI2NjQ8rv+7RcUP9VLOsNFHSokEBJjdpplrP2VFuHZHuahse8aA5wz
 grKw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
 bh=tKVg5EA46HMOU8dlHqzq6o1hLPyJmQiRW1MjY4O+JSU=;
 b=MIYaFuw+aZCYhqr2wPk893K3zOqkOjOss2S26d2LmsiWkz7c9Ggxqo3V7Jr86GwOxW
 RCA1PEL5BxE7pf6JwKUts1GoONcwxrqgKwF2XU8UVZ2v/aj+EAbqi/BdceT1d1EUlw5d
 HZU6bhIgglsZQ0dmaQnvii9j3NTd6XwNYhj4cobyp3Sz7wz55lJMGo1lsyJXMVjmSZfi
 cvymycvYJwH7yLRHGg//QPvu6I38Umunuj0wHUGhVGx6aWICOjvwsLD1vhKiTQ9c0dLd
 EXcYjmuBBtf0wJe/IvoeG1XWuPuYwstygfnpMRQqYsJNNXCJ9WZn5jzOAzZnb9FetHga
 TCHw==
X-Gm-Message-State: APjAAAU9+8acd5jU7lo4HI4QHy0OZnvpZRNf3hHfW/Ql09kpKrn9wlbD
 YD3FvC481FlO0hrH/uQXqYbx7zL/0sHim71zBBrpPOCH
X-Google-Smtp-Source: APXvYqxFenW2Y1rLIuDOl9+yJ1AWFPPbMY4ZoN7LF8LiHc8KB4FN3/u0vShzVce2kl6b+YnBe1aM7WjzJC7egZmWtZs=
X-Received: by 2002:ab0:658a:: with SMTP id v10mr707672uam.73.1569518885994;
 Thu, 26 Sep 2019 10:28:05 -0700 (PDT)
MIME-Version: 1.0
From: Peter Smith <salerio@gmail.com>
Date: Thu, 26 Sep 2019 18:27:30 +0100
Message-ID: <CAOx=Z6F1jW2rYntgTuGhFSBBwap3eSSox-ei9xpHdMTvhdWTyA@mail.gmail.com>
To: minios-devel@lists.xenproject.org
Subject: [Minios-devel] Support for Xen platform on aarch64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: multipart/mixed; boundary="===============6816425522342786115=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============6816425522342786115==
Content-Type: multipart/alternative; boundary="000000000000ab05cf05937817a1"

--000000000000ab05cf05937817a1
Content-Type: text/plain; charset="UTF-8"

Newbie question, what needs to be done to create an aarch64 Xen platform?
It would be great if someone knowledgeable could outline the steps
required, we are possibly interested in contributing...

Best Regards
Peter

--000000000000ab05cf05937817a1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:verdana,=
sans-serif;font-size:small">Newbie question, what needs to be done to creat=
e an aarch64 Xen platform? It would be great if someone knowledgeable could=
 outline the steps required, we are possibly interested in contributing...<=
/div><div class=3D"gmail_default" style=3D"font-family:verdana,sans-serif;f=
ont-size:small"><br></div><div><div dir=3D"ltr" class=3D"gmail_signature" d=
ata-smartmail=3D"gmail_signature"><div dir=3D"ltr">Best Regards<div>Peter</=
div></div></div></div></div>

--000000000000ab05cf05937817a1--


--===============6816425522342786115==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============6816425522342786115==--


From minios-devel-bounces@lists.xenproject.org Fri Sep 27 06:54:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 06:54:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDk8i-00025y-JV; Fri, 27 Sep 2019 06:54:04 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDk8h-00025t-Cd
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 06:54:03 +0000
X-Inumbo-ID: 966be684-e0f3-11e9-966c-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 966be684-e0f3-11e9-966c-12813bfff9fa;
 Fri, 27 Sep 2019 06:54:01 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 62BA028;
 Thu, 26 Sep 2019 23:54:01 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 4902E3F739;
 Thu, 26 Sep 2019 23:56:35 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 14:53:45 +0800
Message-Id: <20190927065351.70074-1-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [UNIKRAFT PATCH v2 0/6] Fix obstacles to start
 helloworld on arm64 kvm plat
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXQgbWlnaHQgbm90IGRlcGVuZCBvbiBteSBwcmV2aW91cyB0aW1lci9tdWx0
aS10aHJlYWQgcGF0Y2gKc2VyaWVzIGV4Y2VwdCBmb3IgdGhlIGNoYW5nZXMgaW4gTWFrZWZpbGUu
dWsuCkl0IHJlc29sdmVzIHNldmVyYWwgb2JzdGFjbGVzIHdoaWNoIHdlcmUgaW50cm9kdWNlZCBy
ZWNlbnRseSBhZnRlciBhcHBsaW5nCm15IHRpbWVyL211bHRpLXRocmVhZCBwYXRjaCBzZXJpZXMu
CgpXaXRob3V0IHRoaXMsIGhlbGxvd29ybGQgYXBwIG9uIGFybTY0IGt2bSBjYW4ndCBiZSBidWls
dCBzdWNlc3NmdWxseS4KClRlc3RlZCBvbiBhcm02NCBrdm0sIGFuZCBtYWRlIGhlbGx3b3JsZGlu
ZyBzdGFydHMgdXAgc3VjZXNzZnVsbHkuClRlc3RlZCBvbiBYODYgcGxhdCwgcGFzc2VkIHRoZSBj
b21waWxhdGlvbi4KCkNoYW5nZXM6CnYyOiBhZGRyZXNzIHRoZSBjb21tZW50cyBmcm9tIEp1bGll
bgogICAgY2hhbmdlIHRoZSBwYXRjaCAwMwogICAgYWRkIHBhdGNoIDA0LTA2CgpKaWEgSGUgKDYp
OgogIHBsYXQ6IEltcGxlbWVudCB0bHMgc3R1YiBmb3IgYXJtNjQKICBwbGF0L2NvbW1vbjogSW1w
bGVtZW50IGEgZmV3IGV4dHJhIHJlZ2lzdGVycyBzdHViIGhlbHBlcnMgb24gYXJtNjQKICBwbGF0
L2t2bTogSW1wbGVtZW50IHN0dWIgb2YgdWtwbGF0X3N0YWNrX3NldF9jdXJyZW50X3RocmVhZCBm
b3IgYXJtNjQKICBwbGF0L2t2bS9hcm06IEVsaW1pbmF0ZSB1bnVzZWQgcGFyYW1ldGVyIHdhcm5p
bmcgb2YgaW50Y3RybF9hY2tfaXJxKCkKICBwbGF0L2NvbW1vbjogQWRkIG1hY3JvIHRvIGF2b2lk
IG5lc3RlZCBpbmNsdWRpbmcgaGVhZGVyIGZpbGUKICBhcmNoL2FybTY0OiBJbXBsZW1lbnQgYml0
b3BzIGZvciBhcm02NAoKIGFyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oIHwg
NTUgKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2Fy
bTY0L2NwdS5oICAgIHwgMzMgKysrKysrKysrKysrKysrKwogcGxhdC9jb21tb24vaW5jbHVkZS9h
cm0vYXJtNjQvdGxzLmggICAgfCAzNyArKysrKysrKysrKysrKysrKwogcGxhdC9jb21tb24vaW5j
bHVkZS90bHMuaCAgICAgICAgICAgICAgfCAgMiArCiBwbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9j
cHUuaCAgICAgICAgICB8IDI0ICsrKysrKysrKysrCiBwbGF0L2NvbW1vbi9zd19jdHguYyAgICAg
ICAgICAgICAgICAgICB8IDE2ICsrLS0tLS0tCiBwbGF0L2t2bS9NYWtlZmlsZS51ayAgICAgICAg
ICAgICAgICAgICB8ICAxICsKIHBsYXQva3ZtL2FybS9pbnRjdHJsLmMgICAgICAgICAgICAgICAg
IHwgIDMgKy0KIHBsYXQva3ZtL2FybS9tZW1vcnkuYyAgICAgICAgICAgICAgICAgIHwgMzkgKysr
KysrKysrKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQsIDE3NiBpbnNlcnRpb25zKCspLCAzNCBk
ZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9h
cm02NC90bHMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQva3ZtL2FybS9tZW1vcnkuYwoKLS0g
CjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 06:54:09 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 06:54:09 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDk8n-00026O-LF; Fri, 27 Sep 2019 06:54:09 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDk8m-00026H-AV
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 06:54:08 +0000
X-Inumbo-ID: 97cff754-e0f3-11e9-966c-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 97cff754-e0f3-11e9-966c-12813bfff9fa;
 Fri, 27 Sep 2019 06:54:04 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A19FA142F;
 Thu, 26 Sep 2019 23:54:03 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 6CC5B3F739;
 Thu, 26 Sep 2019 23:56:37 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 14:53:46 +0800
Message-Id: <20190927065351.70074-2-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927065351.70074-1-justin.he@arm.com>
References: <20190927065351.70074-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 1/6] plat: Implement tls stub for
 arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2l0aG91dCB0aGlzIHBhdGNoLCBjb21waWxlciB3aWxsIHJlcG9ydDoKdW5pa3JhZnQvcGxhdC9j
b21tb24vaW5jbHVkZS90bHMuaDozODoyOiBlcnJvcjogI2Vycm9yICJGb3IgdGhyZWFkLWxvY2Fs
CnN0b3JhZ2Ugc3VwcG9ydCwgYWRkIHRscy5oIGZvciBjdXJyZW50IGFyY2hpdGVjdHVyZS4iCiAj
ZXJyb3IgIkZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBzdXBwb3J0LCBhZGQgdGxzLmggZm9yIGN1
cnJlbnQgYXJjaGl0ZWN0dXJlLiIKQW5kIGFybTY0IGt2bSBwbGF0IHRhcmdldCB3aWxsIG5vdCBi
ZSBidWlsdC4KCk5vdyBJIGRvbid0IHJlbW92ZSB0aGUgcHJlLWNvbXBpbGF0aW9uICN3YXJuIGFz
IGZvbGxvd3MgaW4KYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vdGxzLmggYmVjYXVzZSBJ
IHRob3VnaHQgYXJtNjQgdGxzIGltcGxlbWVudGF0aW9uCnNob3VsZCB1c2UgdHBpZHJfZWwxLiBJ
IHdpbGwgZG8gaXQgaW4gdGhlIGZ1dHVyZS4KIiN3YXJuaW5nIFRocmVhZC1sb2NhbCBzdG9yYWdl
IGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gYWFyY2g2NCEiCgpTaWduZWQtb2ZmLWJ5OiBKaWEgSGUg
PGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3Rs
cy5oIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHBsYXQvY29tbW9uL2luY2x1
ZGUvdGxzLmggICAgICAgICAgIHwgIDIgKysKIDIgZmlsZXMgY2hhbmdlZCwgMzkgaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3Rs
cy5oCgpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvdGxzLmggYi9w
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lZDkyYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9jb21tb24vaW5j
bHVkZS9hcm0vYXJtNjQvdGxzLmgKQEAgLTAsMCArMSwzNyBAQAorLyogU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgTkVD
IEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgor
ICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdB
WS4KKyAqLworI2lmbmRlZiBfX1BMQVRfQ01OX0FSTTY0X1RMU19IX18KKyNkZWZpbmUgX19QTEFU
X0NNTl9BUk02NF9UTFNfSF9fCisKKyNkZWZpbmUgc2V0X3Rsc19wb2ludGVyKHB0cikgZG8geyB9
IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19QTEFUX0NNTl9YODZfVExTX0hfXyAqLwpkaWZmIC0t
Z2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS90bHMuaCBiL3BsYXQvY29tbW9uL2luY2x1ZGUvdGxz
LmgKaW5kZXggYjkxNzZmOS4uNDU2NTlkOCAxMDA2NDQKLS0tIGEvcGxhdC9jb21tb24vaW5jbHVk
ZS90bHMuaAorKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL3Rscy5oCkBAIC0zNCw2ICszNCw4IEBA
CiAKICNpZiBkZWZpbmVkKF9fWDg2XzY0X18pCiAjaW5jbHVkZSA8eDg2L3Rscy5oPgorI2VsaWYg
ZGVmaW5lZChfX0FSTV82NF9fKQorI2luY2x1ZGUgPGFybS9hcm02NC90bHMuaD4KICNlbHNlCiAj
ZXJyb3IgIkZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBzdXBwb3J0LCBhZGQgdGxzLmggZm9yIGN1
cnJlbnQgYXJjaGl0ZWN0dXJlLiIKICNlbmRpZgotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 06:54:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 06:54:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDk8s-000270-Mu; Fri, 27 Sep 2019 06:54:14 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDk8r-00026s-Af
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 06:54:13 +0000
X-Inumbo-ID: 99100cf8-e0f3-11e9-966c-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 99100cf8-e0f3-11e9-966c-12813bfff9fa;
 Fri, 27 Sep 2019 06:54:06 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id D319928;
 Thu, 26 Sep 2019 23:54:05 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id B21F23F739;
 Thu, 26 Sep 2019 23:56:39 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 14:53:47 +0800
Message-Id: <20190927065351.70074-3-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927065351.70074-1-justin.he@arm.com>
References: <20190927065351.70074-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 2/6] plat/common: Implement a few
 extra registers stub helpers on arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gYXJtNjQsIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZ2lzdGVycyBkdXJpbmcgY29udGV4
dCBzd2l0Y2hpbmcgc28KZmFyLiBUaGlzIHBhdGNoIGRlY291cGxlIHRoZSBhcmNoIHNwZWNpZmlj
IHN0cnVjdHVyZXMvZnVuY3Rpb25zIGluZm8gYXJjaApyZWxhdGVkIGZpbGVzLgoKV2l0aG91dCB0
aGlzIHBhdGNoLCBpdCB3aWxsIHJlcG9ydCBjb21waWxhdGlvbiBlcnJvciBhcyBmb2xsb3dzOgpw
bGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaC86OiBJbiBmdW5jdGlvbiAnc2F2ZV9leHRyZWdz
JzoKcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1Lmg6NzI6MzogZXJyb3I6IGltcG9zc2libGUg
Y29uc3RyYWludCBpbiAnYXNtJwogICBhc20gdm9sYXRpbGUoInhzYXZlICglMCkiIDo6ICJyIihj
dHgtPmV4dHJlZ3MpLAogICBefn4KcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1Lmg6NzY6Mzog
ZXJyb3I6IGltcG9zc2libGUgY29uc3RyYWludCBpbiAnYXNtJwogICBhc20gdm9sYXRpbGUoInhz
YXZlb3B0ICglMCkiIDo6ICJyIihjdHgtPmV4dHJlZ3MpLAoKU2lnbmVkLW9mZi1ieTogSmlhIEhl
IDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9j
cHUuaCB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHBsYXQvY29tbW9uL2luY2x1
ZGUveDg2L2NwdS5oICAgICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKysrKysrCiBwbGF0L2Nv
bW1vbi9zd19jdHguYyAgICAgICAgICAgICAgICB8IDE2ICsrKystLS0tLS0tLS0tLS0KIDMgZmls
ZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmggYi9wbGF0L2NvbW1vbi9pbmNs
dWRlL2FybS9hcm02NC9jcHUuaAppbmRleCAxNDk1MTkyLi4yM2FkZjhkIDEwMDY0NAotLS0gYS9w
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaAorKysgYi9wbGF0L2NvbW1vbi9pbmNs
dWRlL2FybS9hcm02NC9jcHUuaApAQCAtMzMsNiArMzMsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8
aW50dHlwZXMuaD4KKyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+CisjaW5jbHVkZSA8c3dfY3R4
Lmg+CisjaW5jbHVkZSA8dWsvYWxsb2MuaD4KKyNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KIAogLyog
RGVmaW5lIG1hY3JvcyB0byBhY2Nlc3MgSU8gcmVnaXN0ZXJzICovCiAjZGVmaW5lIF9fSU9SRUdf
UkVBRChiaXRzKSBcCkBAIC0xMDgsMyArMTEyLDI3IEBAIGludDMyX3Qgc21jY19wc2NpX3NtY19j
YWxsKHVpbnQzMl90LCB1aW50NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90KTsKIHZvaWQgaGFsdCh2
b2lkKTsKIHZvaWQgcmVzZXQodm9pZCk7CiB2b2lkIHN5c3RlbV9vZmYodm9pZCk7CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzYXZlX2V4dHJlZ3Moc3RydWN0IHN3X2N0eCAqY3R4IF9fdW51c2VkKQor
eworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9leHRyZWdzKHN0cnVjdCBzd19jdHgg
KmN0eCBfX3VudXNlZCkKK3sKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dfY3R4ICphcmNo
X2FsbG9jX3N3X2N0eChzdHJ1Y3QgdWtfYWxsb2MgKmFsbG9jYXRvcikKK3sKKwlzdHJ1Y3Qgc3df
Y3R4ICpjdHg7CisKKwljdHggPSB1a19tYWxsb2MoYWxsb2NhdG9yLCBzaXplb2Yoc3RydWN0IHN3
X2N0eCkpOworCXVrX3ByX2RlYnVnKCJBbGxvY2F0aW5nICVsdSBieXRlcyBmb3Igc3cgY3R4IGF0
ICVwXG4iLAorCQkgICBzaXplb2Yoc3RydWN0IHN3X2N0eCksIGN0eCk7CisKKwlyZXR1cm4gY3R4
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pbml0X2V4dHJlZ3Moc3RydWN0IHN3X2N0
eCAqY3R4KQoreworCWN0eC0+ZXh0cmVncyA9ICh1aW50cHRyX3QpY3R4ICsgc2l6ZW9mKHN0cnVj
dCBzd19jdHgpOworfQpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1Lmgg
Yi9wbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaAppbmRleCA4YWNkNzFlLi5kMmNmNTNhIDEw
MDY0NAotLS0gYS9wbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaAorKysgYi9wbGF0L2NvbW1v
bi9pbmNsdWRlL3g4Ni9jcHUuaApAQCAtMzQsNiArMzQsOSBAQAogI2luY2x1ZGUgPHg4Ni9jcHVf
ZGVmcy5oPgogI2luY2x1ZGUgPHN3X2N0eC5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgPHVrL2Fzc2VydC5oPgorI2luY2x1ZGUgPHVrL2FsbG9jLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAKIHZvaWQgaGFsdCh2b2lkKTsKIHZvaWQgc3lzdGVtX29mZih2b2lkKTsKQEAgLTk4LDYg
KzEwMSwyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9leHRyZWdzKHN0cnVjdCBzd19j
dHggKmN0eCkKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN3X2N0eCAqYXJjaF9hbGxv
Y19zd19jdHgoc3RydWN0IHVrX2FsbG9jICphbGxvY2F0b3IpCit7CisJc3RydWN0IHN3X2N0eCAq
Y3R4OworCXNpemVfdCBzejsKKworCXN6ID0gQUxJR05fVVAoc2l6ZW9mKHN0cnVjdCBzd19jdHgp
LCB4ODZfY3B1X2ZlYXR1cmVzLmV4dHJlZ3NfYWxpZ24pCisJCSsgeDg2X2NwdV9mZWF0dXJlcy5l
eHRyZWdzX3NpemU7CisJY3R4ID0gdWtfbWFsbG9jKGFsbG9jYXRvciwgc3opOworCXVrX3ByX2Rl
YnVnKCJBbGxvY2F0aW5nICVsdSBieXRlcyBmb3Igc3cgY3R4IGF0ICVwXG4iLCBzeiwgY3R4KTsK
KworCXJldHVybiBjdHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2luaXRfZXh0cmVn
cyhzdHJ1Y3Qgc3dfY3R4ICpjdHgpCit7CisJY3R4LT5leHRyZWdzID0gQUxJR05fVVAoKCh1aW50
cHRyX3QpY3R4ICsgc2l6ZW9mKHN0cnVjdCBzd19jdHgpKSwKKwkJCQl4ODZfY3B1X2ZlYXR1cmVz
LmV4dHJlZ3NfYWxpZ24pOworCS8vIEluaXRpYWxpemUgZXh0cmVncyBhcmVhOiB6ZXJvIG91dCwg
dGhlbiBzYXZlIGEgdmFsaWQgbGF5b3V0IHRvIGl0LgorCW1lbXNldCgodm9pZCAqKWN0eC0+ZXh0
cmVncywgMCwgeDg2X2NwdV9mZWF0dXJlcy5leHRyZWdzX3NpemUpOworfQorCiBzdGF0aWMgaW5s
aW5lIHZvaWQgX2luaXRfY3B1ZmVhdHVyZXModm9pZCkKIHsKIAlfX3UzMiBlYXgsIGVieCwgZWN4
LCBlZHg7CmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9zd19jdHguYyBiL3BsYXQvY29tbW9uL3N3
X2N0eC5jCmluZGV4IDg4YTM3N2YuLjJjNzhhYmUgMTAwNjQ0Ci0tLSBhL3BsYXQvY29tbW9uL3N3
X2N0eC5jCisrKyBiL3BsYXQvY29tbW9uL3N3X2N0eC5jCkBAIC0zNCwxMyArMzQsMTEgQEAKIAog
I2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgogI2luY2x1ZGUgPHVrL3BsYXQvdGhyZWFkLmg+Ci0jaW5jbHVkZSA8dWsvYWxsb2MuaD4K
ICNpbmNsdWRlIDxzd19jdHguaD4KICNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KICNpbmNsdWRlIDx0
bHMuaD4KLSNpbmNsdWRlIDx4ODYvY3B1Lmg+CisjaW5jbHVkZSA8Y3B1Lmg+CiAKIHN0YXRpYyB2
b2lkICpzd19jdHhfY3JlYXRlKHN0cnVjdCB1a19hbGxvYyAqYWxsb2NhdG9yLCB1bnNpZ25lZCBs
b25nIHNwLAogCQkJCXVuc2lnbmVkIGxvbmcgdGxzcCk7CkBAIC01NywxNCArNTUsMTAgQEAgc3Rh
dGljIHZvaWQgKnN3X2N0eF9jcmVhdGUoc3RydWN0IHVrX2FsbG9jICphbGxvY2F0b3IsIHVuc2ln
bmVkIGxvbmcgc3AsCiAJCQkJdW5zaWduZWQgbG9uZyB0bHNwKQogewogCXN0cnVjdCBzd19jdHgg
KmN0eDsKLQlzaXplX3Qgc3o7CiAKIAlVS19BU1NFUlQoYWxsb2NhdG9yICE9IE5VTEwpOwogCi0J
c3ogPSBBTElHTl9VUChzaXplb2Yoc3RydWN0IHN3X2N0eCksIHg4Nl9jcHVfZmVhdHVyZXMuZXh0
cmVnc19hbGlnbikKLQkJKyB4ODZfY3B1X2ZlYXR1cmVzLmV4dHJlZ3Nfc2l6ZTsKLQljdHggPSB1
a19tYWxsb2MoYWxsb2NhdG9yLCBzeik7Ci0JdWtfcHJfZGVidWcoIkFsbG9jYXRpbmcgJWx1IGJ5
dGVzIGZvciBzdyBjdHggYXQgJXBcbiIsIHN6LCBjdHgpOworCWN0eCA9IGFyY2hfYWxsb2Nfc3df
Y3R4KGFsbG9jYXRvcik7CiAJaWYgKGN0eCA9PSBOVUxMKSB7CiAJCXVrX3ByX3dhcm4oIkVycm9y
IGFsbG9jYXRpbmcgc29mdHdhcmUgY29udGV4dC4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC03Mywx
MCArNjcsOCBAQCBzdGF0aWMgdm9pZCAqc3dfY3R4X2NyZWF0ZShzdHJ1Y3QgdWtfYWxsb2MgKmFs
bG9jYXRvciwgdW5zaWduZWQgbG9uZyBzcCwKIAljdHgtPnNwID0gc3A7CiAJY3R4LT50bHNwID0g
dGxzcDsKIAljdHgtPmlwID0gKHVuc2lnbmVkIGxvbmcpIGFzbV90aHJlYWRfc3RhcnRlcjsKLQlj
dHgtPmV4dHJlZ3MgPSBBTElHTl9VUCgoKHVpbnRwdHJfdCljdHggKyBzaXplb2Yoc3RydWN0IHN3
X2N0eCkpLAotCQkJCXg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19hbGlnbik7Ci0JLy8gSW5pdGlh
bGl6ZSBleHRyZWdzIGFyZWE6IHplcm8gb3V0LCB0aGVuIHNhdmUgYSB2YWxpZCBsYXlvdXQgdG8g
aXQuCi0JbWVtc2V0KCh2b2lkICopY3R4LT5leHRyZWdzLCAwLCB4ODZfY3B1X2ZlYXR1cmVzLmV4
dHJlZ3Nfc2l6ZSk7CisJYXJjaF9pbml0X2V4dHJlZ3MoY3R4KTsKKwogCXNhdmVfZXh0cmVncyhj
dHgpOwogCiAJcmV0dXJuIGN0eDsKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 06:54:17 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 06:54:17 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDk8v-00027d-OW; Fri, 27 Sep 2019 06:54:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDk8u-00027R-9H
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 06:54:16 +0000
X-Inumbo-ID: 9e4e07e2-e0f3-11e9-97fb-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 9e4e07e2-e0f3-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 06:54:15 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8DCB128;
 Thu, 26 Sep 2019 23:54:14 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 7783C3F739;
 Thu, 26 Sep 2019 23:56:48 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 14:53:51 +0800
Message-Id: <20190927065351.70074-7-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927065351.70074-1-justin.he@arm.com>
References: <20190927065351.70074-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 6/6] arch/arm64: Implement bitops
 for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2l0aG91dCB0aGlzIHBhdGNoLCBjb21waWxlciB3aWxsIHJlcG9ydCB3YXJuaW5nIGFzIGZvbGxv
d3M6CiAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHBsYXQvY29tbW9uL2FybS90aW1lLmM6NDE6MDoK
aW5jbHVkZS91ay9iaXRvcHMuaDogSW4gZnVuY3Rpb24gJ3VrX2dldF9jb3VudF9vcmRlcic6Cmlu
Y2x1ZGUvdWsvYml0b3BzLmg6ODk6MTA6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9m
IGZ1bmN0aW9uCid1a2FyY2hfZmxzJzsgZGlkIHlvdSBtZWFuICd1a2FyY2hfZmZzbCc/IFstV2lt
cGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQogIG9yZGVyID0gdWthcmNoX2Zscyhjb3VudCk7
CiAgICAgICAgICBefn5+fn5+fn5+CiAgICAgICAgICB1a2FyY2hfZmZzbAppbmNsdWRlL3VrL2Jp
dG9wcy5oOiBJbiBmdW5jdGlvbiAndWtfZmluZF9sYXN0X2JpdCc6CmluY2x1ZGUvdWsvYml0b3Bz
Lmg6MTU0OjE4OiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbgondWth
cmNoX2Zsc2wnOyBkaWQgeW91IG1lYW4gJ3VrYXJjaF9mZnNsJz8gWy1XaW1wbGljaXQtZnVuY3Rp
b24tZGVjbGFyYXRpb25dCiAgICByZXR1cm4gKGJpdCArIHVrYXJjaF9mbHNsKG1hc2spKTsKICAg
ICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4KICAgICAgICAgICAgICAgICAgdWthcmNoX2Zmc2wK
ClNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogYXJjaC9hcm0v
YXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmggfCA1NSArKysrKysrKysrKysrKysrLS0tLS0t
LS0tLQogMSBmaWxlIGNoYW5nZWQsIDM0IGluc2VydGlvbnMoKyksIDIxIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oIGIvYXJj
aC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmgKaW5kZXggN2VlNjY2Ny4uY2I5Yjgy
OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmgKKysr
IGIvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmgKQEAgLTM4LDMzICszOCw0
NiBAQAogI2VuZGlmCiAKIC8qKgotICogdWthcmNoX2Zmc2wgLSBmaW5kIGZpcnN0IChsb3dlc3Qp
IHNldCBiaXQgaW4gd29yZC4KKyAqIHVrYXJjaF9mZnMgLSBmaW5kIGZpcnN0IChsb3dlc3QpIHNl
dCBiaXQgaW4gd29yZC4KICAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKICAqCiAgKiBVbmRl
ZmluZWQgaWYgbm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZp
cnN0LgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdWthcmNoX2Zmc2wodW5zaWdu
ZWQgbG9uZyB3b3JkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWthcmNoX2Zmcyh1bnNp
Z25lZCBpbnQgeCkKIHsKLQlpbnQgY2x6OworCXJldHVybiBfX2J1aWx0aW5fZmZzKHgpOworfQog
Ci0JLyogeHh4eHgxMDAwMCA9IHdvcmQKLQkgKiB4eHh4eDAxMTExID0gd29yZCAtIDEKLQkgKiAw
MDAwMDExMTExID0gd29yZCBeICh3b3JkIC0gMSkKLQkgKiAgICAgIDQgICAgID0gNjMgLSBjbHoo
d29yZCBeICh3b3JkIC0gMSkpCi0JICovCisvKioKKyAqIHVrYXJjaF9mbHMgLSBmaW5kIGxhc3Qg
KGhpZ2hlc3QpIHNldCBiaXQgaW4gd29yZC4KKyAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gK
KyAqCisgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sg
YWdhaW5zdCAwIGZpcnN0LgorICogTm90ZSBmbHMoMCkgPSAwLCBmbHMoMSkgPSAxLCBmbHMoMHg4
MDAwMDAwMCkgPSAzMi4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWthcmNoX2Zs
cyh1bnNpZ25lZCBpbnQgeCkKK3sKKwlyZXR1cm4geCA/IHNpemVvZih4KSAqIDggLSBfX2J1aWx0
aW5fY2x6KHgpIDogMDsKK30KIAotCV9fYXNtX18oInN1YiB4MCwgJVt3b3JkXSwgIzFcbiIKLQkJ
ImVvciB4MCwgeDAsICVbd29yZF1cbiIKLQkJImNseiAlW2Nsel0sIHgwXG4iCi0JCToKLQkJLyog
T3V0cHV0czogKi8KLQkJW2Nsel0gIj1yIihjbHopCi0JCToKLQkJLyogSW5wdXRzOiAqLwotCQlb
d29yZF0gInIiKHdvcmQpCi0JCToKLQkJLyogQ2xvYmJlcnM6ICovCi0JCSJ4MCIpOworLyoqCisg
KiB1a2FyY2hfZmZzbCAtIGZpbmQgZmlyc3QgKGxvd2VzdCkgc2V0IGJpdCBpbiB3b3JkLgorICog
QHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhp
c3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBp
bmxpbmUgdW5zaWduZWQgbG9uZyB1a2FyY2hfZmZzbCh1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0
dXJuIF9fYnVpbHRpbl9mZnNsKHgpOworfQogCi0JcmV0dXJuIDYzIC0gY2x6OworLyoqCisgKiB1
a2FyY2hfZmxzbCAtIGZpbmQgbGFzdCAoaGlnaGVzdCkgc2V0IGJpdCBpbiB3b3JkLgorICogQHdv
cmQ6IFRoZSB3b3JkIHRvIHNlYXJjaAorICoKKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3Rz
LCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCisgKi8KK3N0YXRpYyBpbmxp
bmUgdW5zaWduZWQgbG9uZyB1a2FyY2hfZmxzbCh1bnNpZ25lZCBsb25nIHgpCit7CisJcmV0dXJu
IHggPyBzaXplb2YoeCkgKiA4IC0gX19idWlsdGluX2NsemwoeCkgOiAwOwogfQotLSAKMi4xNy4x
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 06:54:19 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 06:54:19 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDk8x-00028I-R9; Fri, 27 Sep 2019 06:54:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDk8w-00027w-DK
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 06:54:18 +0000
X-Inumbo-ID: 9a5f9c4a-e0f3-11e9-966c-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 9a5f9c4a-e0f3-11e9-966c-12813bfff9fa;
 Fri, 27 Sep 2019 06:54:08 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 083C8142F;
 Thu, 26 Sep 2019 23:54:08 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id DE1813F739;
 Thu, 26 Sep 2019 23:56:41 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 14:53:48 +0800
Message-Id: <20190927065351.70074-4-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927065351.70074-1-justin.he@arm.com>
References: <20190927065351.70074-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 3/6] plat/kvm: Implement stub of
 ukplat_stack_set_current_thread for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBpcyB0byBmaXggdGhlIGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gYnVpbGRpbmcg
YXJtNjQga3ZtIGltYWdlCmJ1aWxkL3VuaWtyYWZ0X2t2bS1hcm02NC5vOiBJbiBmdW5jdGlvbiBg
c2NoZWRjb29wX3NjaGVkdWxlJzoKbGliL3Vrc2NoZWRjb29wL3NjaGVkY29vcC5jOjEwNzogdW5k
ZWZpbmVkIHJlZmVyZW5jZSB0bwpgdWtwbGF0X3N0YWNrX3NldF9jdXJyZW50X3RocmVhZCcKClNp
Z25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogcGxhdC9rdm0vTWFr
ZWZpbGUudWsgIHwgIDEgKwogcGxhdC9rdm0vYXJtL21lbW9yeS5jIHwgMzkgKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlv
bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBwbGF0L2t2bS9hcm0vbWVtb3J5LmMKCmRpZmYgLS1n
aXQgYS9wbGF0L2t2bS9NYWtlZmlsZS51ayBiL3BsYXQva3ZtL01ha2VmaWxlLnVrCmluZGV4IDdj
ZTkyODguLjYzYmQ1YjAgMTAwNjQ0Ci0tLSBhL3BsYXQva3ZtL01ha2VmaWxlLnVrCisrKyBiL3Bs
YXQva3ZtL01ha2VmaWxlLnVrCkBAIC04NCw2ICs4NCw3IEBAIExJQktWTVBMQVRfU1JDUy0kKENP
TkZJR19BUkNIX0FSTV82NCkgKz0gJChVS19QTEFUX0NPTU1PTl9CQVNFKS9hcm0vdGhyZWFkX3N0
YXJ0CiBMSUJLVk1QTEFUX1NSQ1MteSArPSAkKFVLX1BMQVRfQ09NTU9OX0JBU0UpL3RocmVhZC5j
fGNvbW1vbgogTElCS1ZNUExBVF9TUkNTLXkgKz0gJChVS19QTEFUX0NPTU1PTl9CQVNFKS9zd19j
dHguY3xjb21tb24KIGVuZGlmCitMSUJLVk1QTEFUX1NSQ1MtJChDT05GSUdfQVJDSF9BUk1fNjQp
ICs9ICQoTElCS1ZNUExBVF9CQVNFKS9hcm0vbWVtb3J5LmN8YXJtCiBMSUJLVk1QTEFUX1NSQ1Mt
JChDT05GSUdfQVJDSF9BUk1fNjQpICs9ICQoTElCS1ZNUExBVF9CQVNFKS9hcm0vZW50cnk2NC5T
CiBMSUJLVk1QTEFUX1NSQ1MtJChDT05GSUdfQVJDSF9BUk1fNjQpICs9ICQoTElCS1ZNUExBVF9C
QVNFKS9hcm0vZXhjZXB0aW9ucy5TCiBMSUJLVk1QTEFUX1NSQ1MtJChDT05GSUdfQVJDSF9BUk1f
NjQpICs9ICQoTElCS1ZNUExBVF9CQVNFKS9hcm0vcGFnZXRhYmxlNjQuUwpkaWZmIC0tZ2l0IGEv
cGxhdC9rdm0vYXJtL21lbW9yeS5jIGIvcGxhdC9rdm0vYXJtL21lbW9yeS5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MGQyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9wbGF0
L2t2bS9hcm0vbWVtb3J5LmMKQEAgLTAsMCArMSwzOSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50
aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIEF1dGhvcnM6IENvc3RpbiBMdXB1IDxjb3N0
aW4ubHVwdUBjcy5wdWIucm8+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5
IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogICAgdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBU
SElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgor
ICovCisKKyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+CisKK3ZvaWQgdWtwbGF0X3N0YWNrX3Nl
dF9jdXJyZW50X3RocmVhZCh2b2lkICp0aHJlYWRfYWRkciBfX3VudXNlZCkKK3sKK30KLS0gCjIu
MTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 06:54:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 06:54:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDk92-00029Q-Sm; Fri, 27 Sep 2019 06:54:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDk91-000294-Df
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 06:54:23 +0000
X-Inumbo-ID: 9ba1955e-e0f3-11e9-966c-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 9ba1955e-e0f3-11e9-966c-12813bfff9fa;
 Fri, 27 Sep 2019 06:54:10 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 3947528;
 Thu, 26 Sep 2019 23:54:10 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 139EE3F739;
 Thu, 26 Sep 2019 23:56:43 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 14:53:49 +0800
Message-Id: <20190927065351.70074-5-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927065351.70074-1-justin.he@arm.com>
References: <20190927065351.70074-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 4/6] plat/kvm/arm: Eliminate
 unused parameter warning of intctrl_ack_irq()
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2l0aG91dCB0aGlzIHBhdGNoLCBjb21waWxlciB3aWxsIHJlcG9ydCBhIHdhcm5pbmc6CnBsYXQv
a3ZtL2FybS9pbnRjdHJsLmM6IEluIGZ1bmN0aW9uICdpbnRjdHJsX2Fja19pcnEnOgpwbGF0L2t2
bS9hcm0vaW50Y3RybC5jOjUyOjM1OiB3YXJuaW5nOiB1bnVzZWQgcGFyYW1ldGVyICdpcnEnIFst
V3VudXNlZC1wYXJhbWV0ZXJdCiB2b2lkIGludGN0cmxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJx
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fgpTaWduZWQtb2ZmLWJ5OiBK
aWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQva3ZtL2FybS9pbnRjdHJsLmMgfCAz
ICsrLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlm
ZiAtLWdpdCBhL3BsYXQva3ZtL2FybS9pbnRjdHJsLmMgYi9wbGF0L2t2bS9hcm0vaW50Y3RybC5j
CmluZGV4IGRiZDdmNzMuLmY2MjUwMjQgMTAwNjQ0Ci0tLSBhL3BsYXQva3ZtL2FybS9pbnRjdHJs
LmMKKysrIGIvcGxhdC9rdm0vYXJtL2ludGN0cmwuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1
ZGUgPGFybS9pcnEuaD4KICNpbmNsdWRlIDxnaWMvZ2ljLXYyLmg+CiAjaW5jbHVkZSA8a3ZtL2Nv
bmZpZy5oPgorI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KIAogdm9pZCBpbnRjdHJsX2luaXQo
dm9pZCkKIHsKQEAgLTQ5LDcgKzUwLDcgQEAgdm9pZCBpbnRjdHJsX2luaXQodm9pZCkKIAogfQog
Ci12b2lkIGludGN0cmxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordm9pZCBpbnRjdHJsX2Fj
a19pcnEodW5zaWduZWQgaW50IGlycSBfX3VudXNlZCkKIHsKIAkvL05PUAogfQotLSAKMi4xNy4x
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 06:54:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 06:54:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDk97-0002AO-UZ; Fri, 27 Sep 2019 06:54:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDk96-0002A7-Bn
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 06:54:28 +0000
X-Inumbo-ID: 9ce8dc10-e0f3-11e9-966c-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 9ce8dc10-e0f3-11e9-966c-12813bfff9fa;
 Fri, 27 Sep 2019 06:54:12 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6C4B4142F;
 Thu, 26 Sep 2019 23:54:12 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 48BEC3F739;
 Thu, 26 Sep 2019 23:56:46 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 14:53:50 +0800
Message-Id: <20190927065351.70074-6-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927065351.70074-1-justin.he@arm.com>
References: <20190927065351.70074-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v2 5/6] plat/common: Add macro to
 avoid nested including header file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyB0byBhZGQgdGhlIG1hY3JvIHRvIGF2b2lkIGF2b2lkIG5lc3RlZCBpbmNsdWRpbmcg
aGVhZGVyIGZpbGUKcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmgKClNpZ25lZC1v
ZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogcGxhdC9jb21tb24vaW5jbHVk
ZS9hcm0vYXJtNjQvY3B1LmggfCA1ICsrKysrCiAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25z
KCspCgpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmggYi9w
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaAppbmRleCAyM2FkZjhkLi5mZjMzZjdj
IDEwMDY0NAotLS0gYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaAorKysgYi9w
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaApAQCAtMzIsNiArMzIsOSBAQAogICog
VEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4K
ICAqLwogCisjaWZuZGVmIF9fUExBVF9DT01NT05fQVJNNjRfQ1BVX0hfXworI2RlZmluZSBfX1BM
QVRfQ09NTU9OX0FSTTY0X0NQVV9IX18KKwogI2luY2x1ZGUgPGludHR5cGVzLmg+CiAjaW5jbHVk
ZSA8dWsvZXNzZW50aWFscy5oPgogI2luY2x1ZGUgPHN3X2N0eC5oPgpAQCAtMTM2LDMgKzEzOSw1
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2luaXRfZXh0cmVncyhzdHJ1Y3Qgc3dfY3R4ICpj
dHgpCiB7CiAJY3R4LT5leHRyZWdzID0gKHVpbnRwdHJfdCljdHggKyBzaXplb2Yoc3RydWN0IHN3
X2N0eCk7CiB9CisKKyNlbmRpZiAvKiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18gKi8KLS0g
CjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd1-0001Rq-1t; Fri, 27 Sep 2019 07:25:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OzHR=XV=xenproject.org=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDZdO-0001RM-9C
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 19:41:02 +0000
X-Inumbo-ID: 606c9456-e095-11e9-97fb-bc764e2007e4
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by localhost (Halon) with ESMTPS
 id 606c9456-e095-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 19:39:38 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbx-0002Gj-GG; Thu, 26 Sep 2019 19:39:33 +0000
Received: from localhost ([127.0.0.1] helo=MacBook-Pro-2.Home)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbx-0007uS-7e; Thu, 26 Sep 2019 19:39:33 +0000
From: Lars Kurth <lars.kurth@xenproject.org>
To: xen-devel@lists.xenproject.org
Date: Thu, 26 Sep 2019 20:39:22 +0100
Message-Id: <97e3adf75cf71ba39e702d4cab23236ada8d5a6c.1569525222.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
MIME-Version: 1.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [PATCH v2 4/6] Add Code Review Guide
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKVGhpcyBkb2N1bWVudCBo
aWdobGlnaHRzIHdoYXQgcmV2aWV3ZXJzIHN1Y2ggYXMgbWFpbnRhaW5lcnMgYW5kIGNvbW1pdHRl
cnMgbG9vawpmb3Igd2hlbiByZXZpZXdpbmcgY29kZS4gSXQgc2V0cyBleHBlY3RhdGlvbnMgZm9y
IGNvZGUgYXV0aG9ycyBhbmQgcHJvdmlkZXMKYSBmcmFtZXdvcmsgZm9yIGNvZGUgcmV2aWV3ZXJz
LgoKU2lnbmVkLW9mZi1ieTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgotLS0K
Q2M6IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogeGVuLWFwaUBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpDYzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBt
aXJhZ2Vvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogY29tbWl0dGVyc0B4ZW5wcm9q
ZWN0Lm9yZwotLS0KIGNvZGUtcmV2aWV3LWd1aWRlLm1kIHwgMTI1ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDEyNSBp
bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29kZS1yZXZpZXctZ3VpZGUubWQKCmRp
ZmYgLS1naXQgYS9jb2RlLXJldmlldy1ndWlkZS5tZCBiL2NvZGUtcmV2aWV3LWd1aWRlLm1kCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2Mzk0MzEKLS0tIC9kZXYvbnVsbAor
KysgYi9jb2RlLXJldmlldy1ndWlkZS5tZApAQCAtMCwwICsxLDEyNSBAQAorIyBDb2RlIFJldmll
dyBHdWlkZQorCitUaGlzIGRvY3VtZW50IGhpZ2hsaWdodHMgd2hhdCByZXZpZXdlcnMgc3VjaCBh
cyBtYWludGFpbmVycyBhbmQgY29tbWl0dGVycyBsb29rCitmb3Igd2hlbiByZXZpZXdpbmcgeW91
ciBjb2RlLiBJdCBzZXRzIGV4cGVjdGF0aW9ucyBmb3IgY29kZSBhdXRob3JzIGFuZCBwcm92aWRl
cworYSBmcmFtZXdvcmsgZm9yIGNvZGUgcmV2aWV3ZXJzLgorCitUaGlzIGRvY3VtZW50IGRvZXMg
Kipub3QgY292ZXIqKiB0aGUgZm9sbG93aW5nIHRvcGljczoKKyogW0NvbW11bmljYXRpb24gQmVz
dCBQcmFjdGljZV0oY29tbXVuaWNhdGlvbi1wcmFjdGljZS5tZCkKKyogW1Jlc29sdmluZyBEaXNh
Z3JlZW1lbnRdKHJlc29sdmluZy1kaXNhZ3JlZW1lbnQubWQpCisqIFtQYXRjaCBTdWJtaXNzaW9u
IFdvcmtmbG93XShodHRwczovL3dpa2kueGVucHJvamVjdC5vcmcvd2lraS9TdWJtaXR0aW5nX1hl
bl9Qcm9qZWN0X1BhdGNoZXMpCisqIFtNYW5hZ2luZyBQYXRjaCBTdWJtaXNzaW9uIHdpdGggR2l0
XShodHRwczovL3dpa2kueGVucHJvamVjdC5vcmcvd2lraS9NYW5hZ2luZ19YZW5fUGF0Y2hlc193
aXRoX0dpdCkKKworIyMgV2hhdCB3ZSBsb29rIGZvciBpbiBDb2RlIFJldmlld3MKK1doZW4gcGVy
Zm9ybWluZyBhIGNvZGUgcmV2aWV3LCByZXZpZXdlcnMgdHlwaWNhbGx5IGxvb2sgZm9yIHRoZSBm
b2xsb3dpbmcgdGhpbmdzCisKKyMjIyBJcyB0aGUgY2hhbmdlIG5lY2Vzc2FyeSB0byBhY2NvbXBs
aXNoIHRoZSBnb2Fscz8KKyogSXMgaXQgY2xlYXIgd2hhdCB0aGUgZ29hbHMgYXJlPworKiBEbyB3
ZSBuZWVkIHRvIG1ha2UgYSBjaGFuZ2UsIG9yIGNhbiB0aGUgZ29hbHMgYmUgbWV0IHdpdGggZXhp
c3RpbmcKKyAgZnVuY3Rpb25hbGl0eT8KKworIyMjIEFyY2hpdGVjdHVyZSAvIEludGVyZmFjZQor
KiBJcyB0aGlzIHRoZSBiZXN0IHdheSB0byBzb2x2ZSB0aGUgcHJvYmxlbT8KKyogSXMgdGhpcyB0
aGUgcmlnaHQgcGFydCBvZiB0aGUgY29kZSB0byBtb2RpZnk/CisqIElzIHRoaXMgdGhlIHJpZ2h0
IGxldmVsIG9mIGFic3RyYWN0aW9uPworKiBJcyB0aGUgaW50ZXJmYWNlIGdlbmVyYWwgZW5vdWdo
PyBUb28gZ2VuZXJhbD8gRm9yd2FyZCBjb21wYXRpYmxlPworCisjIyMgRnVuY3Rpb25hbGl0eQor
KiBEb2VzIGl0IGRvIHdoYXQgaXTigJlzIHRyeWluZyB0byBkbz8KKyogSXMgaXQgZG9pbmcgaXQg
aW4gdGhlIG1vc3QgZWbvrIFjaWVudCB3YXk/CisqIERvZXMgaXQgaGFuZGxlIGFsbCB0aGUgY29y
bmVyIC8gZXJyb3IgY2FzZXMgY29ycmVjdGx5PworCisjIyMgTWFpbnRhaW5hYmlsaXR5IC8gUm9i
dXN0bmVzcworKiBJcyB0aGUgY29kZSBjbGVhcj8gQXBwcm9wcmlhdGVseSBjb21tZW50ZWQ/Cisq
IERvZXMgaXQgZHVwbGljYXRlIGFub3RoZXIgcGllY2Ugb2YgY29kZT8KKyogRG9lcyB0aGUgY29k
ZSBtYWtlIGhpZGRlbiBhc3N1bXB0aW9ucz8KKyogRG9lcyBpdCBpbnRyb2R1Y2Ugc2VjdGlvbnMg
d2hpY2ggbmVlZCB0byBiZSBrZXB0ICoqaW4gc3luYyoqIHdpdGggb3RoZXIgc2VjdGlvbnM/Cisq
IEFyZSB0aGVyZSBvdGhlciAqKnRyYXBzKiogc29tZW9uZSBtb2RpZnlpbmcgdGhpcyBjb2RlIG1p
Z2h0IGZhbGwgaW50bz8KKworKipOb3RlOioqIFNvbWV0aW1lcyB5b3Ugd2lsbCB3b3JrIGluIGFy
ZWFzIHdoaWNoIGhhdmUgaWRlbnRpZmllZCBtYWludGFpbmFiaWxpdHkKK2FuZC9vciByb2J1c3Ru
ZXNzIGlzc3Vlcy4gSW4gc3VjaCBjYXNlcywgbWFpbnRhaW5lcnMgbWF5IGFzayB5b3UgdG8gbWFr
ZSBhZGRpdGlvbmFsCitjaGFuZ2VzLCBzdWNoIHRoYXQgeW91ciBzdWJtaXR0ZWQgY29kZSBkb2Vz
IG5vdCBtYWtlIHRoaW5ncyB3b3JzZSBvciBwb2ludCB5b3UKK3RvIG90aGVyIHBhdGNoZXMgYXJl
IGFscmVhZHkgYmVpbmcgd29ya2VkIG9uLgorCisjIyMgU3lzdGVtIHByb3BlcnRpZXMKK0luIHNv
bWUgYXJlYXMgb2YgdGhlIGNvZGUsIHN5c3RlbSBwcm9wZXJ0aWVzIHN1Y2ggYXMKKyogQ29kZSBz
aXplCisqIFBlcmZvcm1hbmNlCisqIFNjYWxhYmlsaXR5CisqIExhdGVuY3kKKyogQ29tcGxleGl0
eQorKiAmYworYXJlIGFsc28gaW1wb3J0YW50IGR1cmluZyBjb2RlIHJldmlld3MuCisKKyMjIyBT
dHlsZQorKiBDb21tZW50cywgY2FycmlhZ2UgcmV0dXJucywgKipzbnVnZ2x5IGJyYWNlcyoqLCAm
YworKiBTZWUgW0NPRElOR19TVFlMRV0oaHR0cHM6Ly94ZW5iaXRzLnhlbnByb2plY3Qub3JnL2dp
dHdlYi8/cD14ZW4uZ2l0O2E9YmxvYjtmPUNPRElOR19TVFlMRSkKKyAgYW5kIFt0b29scy9saWJ4
bC9DT0RJTkdfU1RZTEVdKGh0dHBzOi8veGVuYml0cy54ZW5wcm9qZWN0Lm9yZy9naXR3ZWIvP3A9
eGVuLmdpdDthPWJsb2I7Zj10b29scy9saWJ4bC9DT0RJTkdfU1RZTEUpCisqIE5vIGV4dHJhbmVv
dXMgd2hpdGVzcGFjZSBjaGFuZ2VzCisKKyMjIyBEb2N1bWVudGF0aW9uIGFuZCB0ZXN0aW5nCisq
IElmIHRoZXJlIGlzIHByZS1leGlzdGluZyBkb2N1bWVudGF0aW9uIGluIHRoZSB0cmVlLCBzdWNo
IGFzIG1hbiBwYWdlcywgZGVzaWduCisgIGRvY3VtZW50cywgZXRjLiBhIGNvbnRyaWJ1dG9yIG1h
eSBiZSBhc2tlZCB0byB1cGRhdGUgdGhlIGRvY3VtZW50YXRpb24gYWxvbmdzaWRlCisgIHRoZSBj
aGFuZ2UuIERvY3VtZW50YXRpb24gaXMgdHlwaWNhbGx5IHByZXNlbnQgaW4gdGhlCisgIFtkb2Nz
XShodHRwczovL3hlbmJpdHMueGVuLm9yZy9naXR3ZWIvP3A9eGVuLmdpdDthPXRyZWU7Zj1kb2Nz
KSBmb2xkZXIuCisqIFdoZW4gYWRkaW5nIG5ldyBmZWF0dXJlcyB0aGF0IGhhdmUgYW4gaW1wYWN0
IG9uIHRoZSBlbmQtdXNlciwKKyAgYSBjb250cmlidXRvciBzaG91bGQgaW5jbHVkZSBhbiB1cGRh
dGUgdG8gdGhlCisgIFtTVVBQT1JULm1kXShodHRwczovL3hlbmJpdHMueGVuLm9yZy9naXR3ZWIv
P3A9eGVuLmdpdDthPXRyZWU7Zj1kb2NzKSBmaWxlLgorICBUeXBpY2FsbHksIG1vcmUgY29tcGxl
eCBmZWF0dXJlcyByZXF1aXJlIHNldmVyYWwgcGF0Y2ggc2VyaWVzIGJlZm9yZSBpdCBpcyByZWFk
eSB0byBiZQorICBhZHZlcnRpc2VkIGluIFNVUFBPUlQubWQKKyogV2hlbiBhZGRpbmcgbmV3IGZl
YXR1cmVzLCBhIGNvbnRyaWJ1dG9yIG1heSBiZSBhc2tlZCB0byBwcm92aWRlIHRlc3RzIG9yCisg
IGVuc3VyZSB0aGF0IGV4aXN0aW5nIHRlc3RzIHBhc3MKKworIyMjIyBUZXN0aW5nIGZvciB0aGUg
WGVuIFByb2plY3QgSHlwZXJ2aXNvcgorVGVzdHMgYXJlIHR5cGljYWxseSBsb2NhdGVkIGluIG9u
ZSBvZiB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzCisqICoqVW5pdCB0ZXN0cyoqOiBbdG9vbHMv
dGVzdHNdKGh0dHBzOi8veGVuYml0cy54ZW5wcm9qZWN0Lm9yZy9naXR3ZWIvP3A9eGVuLmdpdDth
PXRyZWU7Zj10b29scy90ZXN0cykKK29yIFt4ZW4vdGVzdF0oaHR0cHM6Ly94ZW5iaXRzLnhlbnBy
b2plY3Qub3JnL2dpdHdlYi8/cD14ZW4uZ2l0O2E9dHJlZTtmPXhlbi90ZXN0KTxicj4KKyAgVW5p
dCB0ZXN0aW5nIGlzIGhhcmQgZm9yIGEgc3lzdGVtIGxpa2UgWGVuIGFuZCB0eXBpY2FsbHkgcmVx
dWlyZXMgYnVpbGRpbmcgYSBzdWJzeXN0ZW0gb2YKKyAgeW91ciB0cmVlLiBJZiB5b3VyIGNoYW5n
ZSBjYW4gYmUgZWFzaWx5IHVuaXQgdGVzdGVkLCB5b3Ugc2hvdWxkIGNvbnNpZGVyIHN1Ym1pdHRp
bmcgdGVzdHMKKyAgd2l0aCB5b3VyIHBhdGNoLgorKiAqKkJ1aWxkIGFuZCBzbW9rZSB0ZXN0Kio6
IHNlZSBbWGVuIEdpdExhYiBDSV0oaHR0cHM6Ly9naXRsYWIuY29tL3hlbi1wcm9qZWN0L3hlbi9w
aXBlbGluZXMpPGJyPgorICBSdW5zIGJ1aWxkIHRlc3RzIGZvciBhIGNvbWJpbmF0aW9uIG9mIHZh
cmlvdXMgZGlzdHJvcyBhbmQgY29tcGlsZXJzIGFnYWluc3QgY2hhbmdlcworICBjb21taXR0ZWQg
dG8gc3RhZ2luZy4gRGV2ZWxvcGVycyBjYW4gam9pbiBhcyBtZW1iZXJzIGFuZCB0ZXN0IHRoZWly
IGRldmVsb3BtZW50CisgIGJyYW5jaGVzICoqYmVmb3JlKiogc3VibWl0dGluZyBhIHBhdGNoLgor
KiAqKlhURiB0ZXN0cyoqIChtaWNyb2tlcm5lbC1iYXNlZCB0ZXN0cyk6IHNlZSBbWFRGXShodHRw
czovL3hlbmJpdHMueGVucHJvamVjdC5vcmcvZG9jcy94dGYvKTxicj4KKyAgWFRGIGhhcyBiZWVu
IGRlc2lnbmVkIHRvIHRlc3QgaW50ZXJhY3Rpb25zIGJldHdlZW4geW91ciBzb2Z0d2FyZSBhbmQg
aGFyZHdhcmUuCisgIEl0IGlzIGEgdmVyeSB1c2VmdWwgdG9vbCBmb3IgdGVzdGluZyBsb3cgbGV2
ZWwgZnVuY3Rpb25hbGl0eSBhbmQgaXMgZXhlY3V0ZWQgYXMgcGFydCBvZiB0aGUKKyAgcHJvamVj
dCdzIENJIHN5c3RlbS4gWFRGIGNhbiBiZSBlYXNpbHkgZXhlY3V0ZWQgbG9jYWxseSBvbiB4ZW4u
Z2l0IHRyZWVzLgorKiAqKm9zc3Rlc3QqKjogc2VlIFtSRUFETUVdKGh0dHBzOi8veGVuYml0cy54
ZW5wcm9qZWN0Lm9yZy9naXR3ZWIvP3A9b3NzdGVzdC5naXQ7YT1ibG9iO2Y9UkVBRE1FKTxicj4K
KyAgT3NzdGVzdCBpcyB0aGUgWGVuIFByb2plY3RzIGF1dG9tYXRlZCB0ZXN0IHN5c3RlbSwgd2hp
Y2ggdGVzdHMgYmFzaWMgWGVuIHVzZSBjYXNlcyBvbgorICBhIHZhcmlldHkgb2YgZGlmZmVyZW50
IGhhcmR3YXJlLiBCZWZvcmUgY2hhbmdlcyBhcmUgY29tbWl0dGVkLCBidXQgKiphZnRlcioqIHRo
ZXkgaGF2ZQorICBiZWVuIHJldmlld2VkLiBBIGNvbnRyaWJ1dG9y4oCZcyBjaGFuZ2VzICoqY2Fu
bm90IGJlIGFwcGxpZWQgdG8gbWFzdGVyKiogdW5sZXNzIHRoZQorICB0ZXN0cyBwYXNzIHRoaXMg
dGVzdCBzdWl0ZS4gTm90ZSB0aGF0IFhURiBhbmQgb3RoZXIgdGVzdHMgYXJlIGFsc28gZXhlY3V0
ZWQgYXMgcGFydCBvZgorICBvc3N0ZXN0LgorCisjIyMgUGF0Y2ggLyBQYXRjaCBzZXJpZXMgaW5m
b3JtYXRpb24KKyogSW5mb3JtYXRpdmUgb25lLWxpbmUgY2hhbmdlbG9nCisqIEZ1bGwgY2hhbmdl
bG9nCisqIE1vdGl2YXRpb24gZGVzY3JpYmVkCisqIEFsbCBpbXBvcnRhbnQgdGVjaG5pY2FsIGNo
YW5nZXMgbWVudGlvbmVkCisqIENoYW5nZXMgc2luY2UgcHJldmlvdXMgcmV2aXNpb24gbGlzdGVk
CisqIFJldmlld2VkLWJ54oCZcyBhbmQgQWNrZWQtYnnigJlzIGRyb3BwZWQgaWYgYXBwcm9wcmlh
dGUKKworTW9yZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIHRoZXNlIGl0ZW1zIGNhbiBiZSBmb3Vu
ZCBpbiBvdXIKK1tQYXRjaCBzdWJtaXNzaW9uIEd1aWRlXShodHRwczovL3dpa2kueGVucHJvamVj
dC5vcmcvd2lraS9TdWJtaXR0aW5nX1hlbl9Qcm9qZWN0X1BhdGNoZXMpLgorCisjIyBSZXZpZXdp
bmcgZm9yIFBhdGNoIEF1dGhvcnMKKworVGhlIGZvbGxvd2luZyBwcmVzZW50YXRpb24gYnkgR2Vv
cmdlIER1bmxhcCwgcHJvdmlkZXMgYW4gZXhjZWxsZW50IG92ZXJ2aWV3IG9uIGhvdword2UgZG8g
Y29kZSByZXZpZXdzLCBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIG5vbi1tYWludGFpbmVycy4KKwor
QXMgYSBjb21tdW5pdHksIHdlIHdvdWxkIGxvdmUgdG8gaGF2ZSBtb3JlIGhlbHAgcmV2aWV3aW5n
LCBpbmNsdWRpbmcgZnJvbSAqKm5ldworY29tbXVuaXR5IG1lbWJlcnMqKi4gQnV0IG1hbnkgcGVv
cGxlCisqIGRvIG5vdCBrbm93IHdoZXJlIHRvIHN0YXJ0LCBvcgorKiBiZWxpZXZlIHRoYXQgdGhl
aXIgcmV2aWV3IHdvdWxkIG5vdCBjb250cmlidXRlIG11Y2gsIG9yCisqIG1heSBmZWVsIGludGlt
aWRhdGVkIHJldmlld2luZyB0aGUgY29kZSBvZiBtb3JlIGVzdGFibGlzaGVkIGNvbW11bml0eSBt
ZW1iZXJzCisKK1RoZSBwcmVzZW50YXRpb24gZGVtb25zdHJhdGVzIHRoYXQgeW91IGRvIG5vdCBu
ZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBvZiB0aGVzZQorY29uY2VybnMuIEluIGFkZGl0aW9uLCBy
ZXZpZXdpbmcgb3RoZXIgcGVvcGxlJ3MgcGF0Y2hlcyBoZWxwcyB5b3UKKyogd3JpdGUgYmV0dGVy
IHBhdGNoZXMgYW5kIGV4cGVyaWVuY2UgdGhlIGNvZGUgcmV2aWV3IHByb2Nlc3MgZnJvbSB0aGUg
b3RoZXIgc2lkZQorKiBhbmQgYnVpbGQgbW9yZSBpbmZsdWVuY2Ugd2l0aGluIHRoZSBjb21tdW5p
dHkgb3ZlciB0aW1lCisKK1RodXMsIHdlIHJlY29tbWVuZCBzdHJvbmdseSB0aGF0ICoqcGF0Y2gg
YXV0aG9ycyoqIHJlYWQgdGhlIHdhdGNoIHRoZSByZWNvcmRpbmcgb3IKK3JlYWQgdGhlIHNsaWRl
czoKKyogW1BhdGNoIFJldmlldyBmb3IgTm9uLU1haW50YWluZXJzIHNsaWRlc10oaHR0cHM6Ly93
d3cuc2xpZGVzaGFyZS5uZXQveGVuX2NvbV9tZ3IveHBkZHMxOS1rZXlub3RlLXBhdGNoLXJldmll
dy1mb3Itbm9ubWFpbnRhaW5lcnMtZ2VvcmdlLWR1bmxhcC1jaXRyaXgtc3lzdGVtcy11ay1sdGQp
CisqIFtQYXRjaCBSZXZpZXcgZm9yIE5vbi1NYWludGFpbmVycyByZWNvcmRpbmcgLSAyMCJdKGh0
dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9ZWhadkJtckxSd2cpCi0tIAoyLjEzLjAKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd1-0001Rv-4L; Fri, 27 Sep 2019 07:25:23 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OzHR=XV=xenproject.org=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDZdi-0001U0-AD
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 19:41:22 +0000
X-Inumbo-ID: 61017954-e095-11e9-bf31-bc764e2007e4
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by localhost (Halon) with ESMTPS
 id 61017954-e095-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 19:39:39 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZby-0002Gt-Ha; Thu, 26 Sep 2019 19:39:34 +0000
Received: from localhost ([127.0.0.1] helo=MacBook-Pro-2.Home)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZby-0007uS-8n; Thu, 26 Sep 2019 19:39:34 +0000
From: Lars Kurth <lars.kurth@xenproject.org>
To: xen-devel@lists.xenproject.org
Date: Thu, 26 Sep 2019 20:39:23 +0100
Message-Id: <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
MIME-Version: 1.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [PATCH v2 5/6] Add guide on Communication Best
 Practice
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKVGhpcyBndWlkZSBjb3Zl
cnMgdGhlIGJ1bGsgb24gQmVzdCBQcmFjdGljZSByZWxhdGVkIHRvIGNvZGUgcmV2aWV3Ckl0IHBy
aW1hcmlseSBmb2N1c3NlcyBvbiBjb2RlIHJldmlldyBpbnRlcmFjdGlvbnMKSXQgYWxzbyBjb3Zl
cnMgaG93IHRvIGRlYWwgd2l0aCBNaXN1bmRlcnN0YW5kaW5ncyBhbmQgQ3VsdHVyYWwKRGlmZmVy
ZW5jZXMKClNpZ25lZC1vZmYtYnk6IExhcnMgS3VydGggPGxhcnMua3VydGhAY2l0cml4LmNvbT4K
LS0tCkNjOiBtaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IHhlbi1hcGlAbGlz
dHMueGVucHJvamVjdC5vcmcKQ2M6IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpD
YzogbWlyYWdlb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IGNvbW1pdHRlcnNAeGVu
cHJvamVjdC5vcmcKLS0tCiBjb21tdW5pY2F0aW9uLXByYWN0aWNlLm1kIHwgNDEwICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA0
MTAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbW11bmljYXRpb24tcHJhY3Rp
Y2UubWQKCmRpZmYgLS1naXQgYS9jb21tdW5pY2F0aW9uLXByYWN0aWNlLm1kIGIvY29tbXVuaWNh
dGlvbi1wcmFjdGljZS5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjlh
NWVmCi0tLSAvZGV2L251bGwKKysrIGIvY29tbXVuaWNhdGlvbi1wcmFjdGljZS5tZApAQCAtMCww
ICsxLDQxMCBAQAorIyBDb21tdW5pY2F0aW9uIEJlc3QgUHJhY3RpY2UKKworVGhpcyBndWlkZSBw
cm92aWRlcyBjb21tdW5pY2F0aW9uIEJlc3QgUHJhY3RpY2UgdGhhdCBoZWxwcyB5b3UgaW4KKyog
VXNpbmcgd2VsY29taW5nIGFuZCBpbmNsdXNpdmUgbGFuZ3VhZ2UKKyogS2VlcGluZyBkaXNjdXNz
aW9ucyB0ZWNobmljYWwgYW5kIGFjdGlvbmFibGUKKyogQmVpbmcgcmVzcGVjdGZ1bCBvZiBkaWZm
ZXJpbmcgdmlld3BvaW50cyBhbmQgZXhwZXJpZW5jZXMKKyogQmVpbmcgYXdhcmUgb2YgeW91ciBv
d24gYW5kIGNvdW50ZXJwYXJ04oCZcyBjb21tdW5pY2F0aW9uIHN0eWxlIGFuZCBjdWx0dXJlCisq
IFNob3cgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCisKKyMjIENvZGUg
cmV2aWV3cyBmb3IgKipyZXZpZXdlcnMqKiBhbmQgKipwYXRjaCBhdXRob3JzKioKKworQmVmb3Jl
IGVtYmFya2luZyBvbiBhIGNvZGUgcmV2aWV3LCBpdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIg
dGhhdAorKiBBIHBvb3JseSBleGVjdXRlZCBjb2RlIHJldmlldyBjYW4gaHVydCB0aGUgY29udHJp
YnV0b3JzIGZlZWxpbmcsIGV2ZW4gd2hlbiBhIHJldmlld2VyCisgIGRpZCBub3QgaW50ZW5kIHRv
IGRvIHNvLiBGZWVsaW5nIGRlZmVuc2l2ZSBpcyBhIG5vcm1hbCByZWFjdGlvbiB0byBhIGNyaXRp
cXVlIG9yIGZlZWRiYWNrLgorICBBIHJldmlld2VyIHNob3VsZCBiZSBhd2FyZSBvZiBob3cgdGhl
IHBpdGNoLCB0b25lLCBvciBzZW50aW1lbnQgb2YgdGhlaXIgY29tbWVudHMKKyAgY291bGQgYmUg
aW50ZXJwcmV0ZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLiBUaGUgc2FtZSBhcHBsaWVzIHRvIHJlc3Bv
bnNlcyBvZiBhbiBhdXRob3IKKyAgdG8gdGhlIHJldmlld2VyLgorKiBXaGVuIHJldmlld2luZyBz
b21lb25lJ3MgY29kZSwgeW91IGFyZSB1bHRpbWF0ZWx5IGxvb2tpbmcgZm9yIGlzc3Vlcy4gQSBn
b29kIGNvZGUKKyAgcmV2aWV3ZXIgaXMgYWJsZSB0byBtZW50YWxseSBzZXBhcmF0ZSBmaW5kaW5n
IGlzc3VlcyBmcm9tIGFydGljdWxhdGluZyBjb2RlIHJldmlldworICBjb21tZW50cyBpbiBhIGNv
bnN0cnVjdGl2ZSBhbmQgcG9zaXRpdmUgbWFubmVyOiBkZXBlbmRpbmcgb24geW91ciBwZXJzb25h
bGl0eSB0aGlzCisgIGNhbiBiZSAqKmRpZmZpY3VsdCoqIGFuZCB5b3UgbWF5IG5lZWQgdG8gZGV2
ZWxvcCBhIHRlY2huaXF1ZSB0aGF0IHdvcmtzIGZvciB5b3UuCisqIEFzIHNvZnR3YXJlIGVuZ2lu
ZWVycyB3ZSBsaWtlIHRvIGJlIHByb3VkIG9mIHRoZSBzb2x1dGlvbnMgd2UgY2FtZSB1cCB3aXRo
LiBUaGlzIGNhbgorICBtYWtlIGl0IGVhc3kgdG8gdGFrZSBhbm90aGVyIHBlb3BsZeKAmXMgY3Jp
dGljaXNtIHBlcnNvbmFsbHkuIEFsd2F5cyByZW1lbWJlciB0aGF0IGl0IGlzCisgIHRoZSBjb2Rl
IHRoYXQgaXMgYmVpbmcgcmV2aWV3ZWQsIG5vdCB5b3UgYXMgYSBwZXJzb24uCisqIFdoZW4geW91
IHJlY2VpdmUgY29kZSByZXZpZXcgZmVlZGJhY2ssIHBsZWFzZSBiZSBhd2FyZSB0aGF0IHdlIGhh
dmUgcmV2aWV3ZXJzCisgIGZyb20gZGlmZmVyZW50IGJhY2tncm91bmRzLCBjb21tdW5pY2F0aW9u
IHN0eWxlcyBhbmQgY3VsdHVyZXMuIEFsdGhvdWdoIHdlIGFsbCB0cnlpbmcKKyAgdG8gY3JlYXRl
IGEgcHJvZHVjdGl2ZSwgd2VsY29taW5nIGFuZCBhZ2lsZSBlbnZpcm9ubWVudCwgd2UgZG8gbm90
IGFsd2F5cyBzdWNjZWVkLgorCisjIyMgRXhwcmVzcyBhcHByZWNpYXRpb24KK0FzIHRoZSBuYXR1
cmUgb2YgY29kZSByZXZpZXcgdG8gZmluZCBidWdzIGFuZCBwb3NzaWJsZSBpc3N1ZXMsIGl0IGlz
IHZlcnkgZWFzeSBmb3IKK3Jldmlld2VycyB0byBnZXQgaW50byBhIG1vZGUgb2Ygb3BlcmF0aW9u
IHdoZXJlIHRoZSBwYXRjaCByZXZpZXcgZW5kcyB1cCBiZWluZyBhIGxpc3QKK29mIGlzc3Vlcywg
bm90IG1lbnRpb25pbmcgd2hhdCBpcyByaWdodCBhbmQgd2VsbCBkb25lLiBUaGlzIGNhbiBsZWFk
IHRvIHRoZSBjb2RlCitzdWJtaXR0ZXIgaW50ZXJwcmV0aW5nIHlvdXIgZmVlZGJhY2sgaW4gYSBu
ZWdhdGl2ZSB3YXkuCisKK1RoZSBvcGVuaW5nIG9mIGEgY29kZSByZXZpZXcgcHJvdmlkZXMgYW4g
b3Bwb3J0dW5pdHkgdG8gYWRkcmVzcyB0aGlzIGFuZCBhbHNvIHNldHMgdGhlCit0b25lIGZvciB0
aGUgcmVzdCBvZiB0aGUgY29kZSByZXZpZXcuIFN0YXJ0aW5nICoqZXZlcnkqKiByZXZpZXcgb24g
YSBwb3NpdGl2ZSBub3RlLCBoZWxwcworc2V0IHRoZSB0b25lIGZvciB0aGUgcmVzdCBvZiB0aGUg
cmV2aWV3LgorCitGb3IgYW4gaW5pdGlhbCBwYXRjaCwgeW91IGNhbiB1c2UgcGhyYXNlcyBzdWNo
IGFzCis+IFRoYW5rcyBmb3IgdGhlIHBhdGNoCis+IFRoYW5rcyBmb3IgZG9pbmcgdGhpcworCitG
b3IgZnVydGhlciByZXZpc2lvbnMgd2l0aGluIGEgcmV2aWV3LCBwaHJhc2VzIHN1Y2ggYXMKKz4g
VGhhbmsgeW91IGZvciBhZGRyZXNzaW5nIHRoZSBsYXN0IHNldCBvZiBjaGFuZ2VzCisKK0lmIHlv
dSBiZWxpZXZlIHRoZSBjb2RlIHdhcyBnb29kLCBpdCBpcyBnb29kIHByYWN0aWNlIHRvIGhpZ2hs
aWdodCB0aGlzIGJ5IHVzaW5nIHBocmFzZXMKK3N1Y2ggYXMKKz4gTG9va3MgZ29vZCwganVzdCBh
IGZldyBjb21tZW50cworPiBUaGUgY2hhbmdlcyB5b3UgaGF2ZSBtYWRlIHNpbmNlIHRoZSBsYXN0
IHZlcnNpb24gbG9vayBnb29kCisKK0lmIHlvdSB0aGluayB0aGVyZSB3ZXJlIGlzc3VlcyB0b28g
bWFueSB3aXRoIHRoZSBjb2RlIHRvIHVzZSBvbmUgb2YgdGhlIHBocmFzZXMsCit5b3UgY2FuIHN0
aWxsIHN0YXJ0IG9uIGEgcG9zaXRpdmUgbm90ZSwgYnkgZm9yIGV4YW1wbGUgc2F5aW5nCis+IEkg
dGhpbmsgdGhpcyBpcyBhIGdvb2QgY2hhbmdlCis+IEkgdGhpbmsgdGhpcyBpcyBhIGdvb2QgZmVh
dHVyZSBwcm9wb3NhbAorCitJdCBpcyBhbHNvIGVudGlyZWx5IGZpbmUgdG8gaGlnaGxpZ2h0IHNw
ZWNpZmljIGNoYW5nZXMgYXMgZ29vZC4gVGhlIGJlc3QgcGxhY2UgdG8KK2RvIHRoaXMsIGlzIGF0
IHRvcCBvZiBhIHBhdGNoLCBhcyBhZGRyZXNzaW5nIGNvZGUgcmV2aWV3IGNvbW1lbnRzIHR5cGlj
YWxseSByZXF1aXJlcworYSBjb250cmlidXRvciB0byBnbyB0aHJvdWdoIHRoZSBsaXN0IG9mIHRo
aW5ncyB0byBhZGRyZXNzIGFuZCBhbiBpbi1saW5lZCBwb3NpdGl2ZQorY29tbWVudCBpcyBsaWtl
bHkgdG8gYnJlYWsgdGhhdCB3b3JrZmxvdy4KKworWW91IHNob3VsZCBhbHNvIGNvbnNpZGVyLCB0
aGF0IGlmIHlvdSByZXZpZXcgYSBwYXRjaCBvZiBhbiBleHBlcmllbmNlZAorY29udHJpYnV0b3Ig
cGhyYXNlcyBzdWNoIGFzICpUaGFua3MgZm9yIHRoZSBwYXRjaCogY291bGQgY29tZSBhY3Jvc3Mg
YXMKK3BhdHJvbml6aW5nLCB3aGlsZSB1c2luZyAqVGhhbmtzIGZvciBkb2luZyB0aGlzKiBpcyBs
ZXNzIGxpa2VseSB0byBiZSBpbnRlcnByZXRlZAorYXMgc3VjaC4KKworQXBwcmVjaWF0aW9uIHNo
b3VsZCBhbHNvIGJlIGV4cHJlc3NlZCBieSBwYXRjaCBhdXRob3JzIHdoZW4gYXNraW5nIGZvciBj
bGFyaWZpY2F0aW9ucwordG8gYSByZXZpZXcgb3IgcmVzcG9uZGluZyB0byBxdWVzdGlvbnMuIEEg
c2ltcGxlCis+IFRoYW5rIHlvdSBmb3IgeW91ciBmZWVkYmFjaworPiBUaGFuayB5b3UgZm9yIHlv
dXIgcmVwbHkKKz4gVGhhbmsgeW91IFhYWCEKKworaXMgbm9ybWFsbHkgc3VmZmljaWVudC4KKwor
IyMjIEF2b2lkIG9waW5pb246IHN0aWNrIHRvIHRoZSBmYWN0cworVGhlIHdheSBob3cgYSByZXZp
ZXdlciBleHByZXNzZXMgZmVlZGJhY2ssIGhhcyBhIGJpZyBpbXBhY3Qgb24gaG93IHRoZSBhdXRo
b3IKK3BlcmNlaXZlcyB0aGUgZmVlZGJhY2suIEtleSB0byB0aGlzIGlzIHdoYXQgd2UgY2FsbCAq
KnN0aWNrIHRvIHRoZSBmYWN0cyoqLiAgVGhlIHNhbWUgaXMKK3RydWUgd2hlbiBhIHBhdGNoIGF1
dGhvciBpcyByZXNwb25kaW5nIHRvIGEgY29tbWVudCBmcm9tIGEgcmV2aWV3ZXIuCisKK09uZSBv
ZiBvdXIgbWFpbnRhaW5lcnMgaGFzIGJlZW4gc3R1ZHlpbmcgTWFuZGFyaW4gZm9yIHNldmVyYWwg
eWVhcnMgYW5kIGhhcyBjb21lCithY3Jvc3MgdGhlIG1vc3Qgc3Ryb25nbHktd29yZGVkIGRpY3Rp
b25hcnkgZW50cnkKK1toZSBoYXMgZXZlciBzZWVuXShodHRwczovL3lvdXR1LmJlL2VoWnZCbXJM
UndnP3Q9ODM0KS4gVGhpcyBleGFtcGxlCitpbGx1c3RyYXRlcyB0aGUgcHJvYmxlbSBvZiB1c2lu
ZyBvcGluaW9uIGluIGNvZGUgcmV2aWV3cyB2cy4gdXNpbmcgZmFjdHMgZXh0cmVtZWx5IHdlbGwu
CisKKz4g6KO56ISaIChndW8zIGppYW8zKTogZm9vdC1iaW5kaW5nIChhIHZpbGUgZmV1ZGFsIHBy
YWN0aWNlIHdoaWNoIGNyaXBwbGVkIHdvbWVuIGJvdGgKKz4gcGh5c2ljYWxseSBhbmQgc3Bpcml0
dWFsbHkpCisKK1RoaXMgaXMgbm90IHNvbWV0aGluZyBvbmUgaXMgdXNlZCB0byBoZWFyaW5nIGZy
b20gZGljdGlvbmFyeSBlbnRyaWVzLiBPbmNlIHlvdQoraW52ZXN0aWdhdGUgdGhlIHByYWN0aWNl
IGZvb3QtYmluZGluZywgaXQgaXMgaGFyZCB0byBkaXNhZ3JlZSB3aXRoIHRoZSBkaWN0aW9uYXJ0
IGVudHJ5LgorSG93ZXZlciwgdGhlIHN0YXRlbWVudCBkb2VzIG5vdCBjb250YWluIG11Y2ggaW5m
b3JtYXRpb24uIElmIHlvdSByZWFkIGl0IHdpdGhvdXQKK2tub3dpbmcgd2hhdCBmb290LWJpbmRp
bmcgaXMsIGl0IGlzIGhhcmQgdG8gYmUgY29udmluY2VkIGJ5IHRoaXMgc3RhdGVtZW50LiBUaGUg
bWFpbgordGFrZS1hd2F5IGlzIHRoYXQgdGhlIGF1dGhvciBvZiB0aGUgZGljdGlvbmFyeSBlbnRy
eSBoYWQgc3Ryb25nIG9waW5pb25zIGFib3V0IHRoaXMgdG9waWMuCitJdCBkb2VzIG5vdCB0ZWxs
IHlvdSwgd2h5IHlvdSBzaG91bGQgaGF2ZSB0aGUgc2FtZSBvcGluaW9uLgorCitDb21wYXJlIHRo
aXMgdG8gdGhlIChXaWtpcGVkaWEgZW50cnkpW2h0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtp
L0Zvb3RfYmluZGluZ10KKworPiBGb290IGJpbmRpbmcgd2FzIHRoZSBjdXN0b20gb2YgYXBwbHlp
bmcgdGlnaHQgYmluZGluZyB0byB0aGUgZmVldCBvZiB5b3VuZyBnaXJscyB0bworPiBtb2RpZnkg
dGhlIHNoYXBlIGFuZCBzaXplIG9mIHRoZWlyIGZlZXQuIC4uLiBmb290IGJpbmRpbmcgd2FzIGEg
cGFpbmZ1bCBwcmFjdGljZSBhbmQKKz4gc2lnbmlmaWNhbnRseSBsaW1pdGVkIHRoZSBtb2JpbGl0
eSBvZiB3b21lbiwgcmVzdWx0aW5nIGluIGxpZmVsb25nIGRpc2FiaWxpdGllcyBmb3IgbW9zdCBv
ZgorPiBpdHMgc3ViamVjdHMuIC4uLiBCaW5kaW5nIHVzdWFsbHkgc3RhcnRlZCBkdXJpbmcgdGhl
IHdpbnRlciBtb250aHMgc2luY2UgdGhlIGZlZXQgd2VyZQorPiBtb3JlIGxpa2VseSB0byBiZSBu
dW1iLCBhbmQgdGhlcmVmb3JlIHRoZSBwYWluIHdvdWxkIG5vdCBiZSBhcyBleHRyZW1lLiDigKZU
aGUgdG9lcyBvbgorPiBlYWNoIGZvb3Qgd2VyZSBjdXJsZWQgdW5kZXIsIHRoZW4gcHJlc3NlZCB3
aXRoIGdyZWF0IGZvcmNlIGRvd253YXJkcyBhbmQgc3F1ZWV6ZWQKKz4gaW50byB0aGUgc29sZSBv
ZiB0aGUgZm9vdCB1bnRpbCB0aGUgdG9lcyBicm9rZeKApgorCitXaXRob3V0IGdvaW5nIGludG8g
dGhlIGRldGFpbHMgb2YgZm9vdC1iaW5kaW5nLCBpdCBpcyBub3RpY2VhYmxlIHRoYXQgbm9uZSBv
ZiB3aGF0IGlzIHdyaXR0ZW4KK2Fib3ZlIHVzZXMgb3BpbmlvbiB3aGljaCBjb3VsZCBiZSBpbnRl
cnByZXRlZCBhcyBpbmZsYW1tYXRvcnkgbGFuZ3VhZ2UuIEl0IGlzIGEgbGlzdCBvZgorc2ltcGxl
IGZhY3RzIHRoYXQgYXJlIGxhaWQgb3V0IGluIGEgd2F5IHRoYXQgbWFrZSBpdCBvYnZpb3VzIHdo
YXQgdGhlIGNvcnJlY3QgY29uY2x1c2lvbgoraXMuCisKK0JlY2F1c2UgdGhlIFdpa2lwZWRpYSBl
bnRyeSBpcyBlbnRpcmVseSBmYWN0IGJhc2VkIGl0IGlzIG1vcmUgcG93ZXJmdWwgYW5kIHBlcnN1
YXNpdmUKK3RoZW4gdGhlIGRpY3Rpb25hcnkgZW50cnkuIFRoZSBzYW1lIGFwcGxpZXMgdG8gY29k
ZSByZXZpZXdzLgorCitNYWtpbmcgc3RhdGVtZW50cyBpbiBjb2RlIHJldmlld3Mgc3VjaCBhcwor
PiBZb3VyIGNvZGUgaXMgZ2FyYmFnZQorPiBUaGlzIGlkZWEgaXMgc3R1cGlkCisKK2Jlc2lkZXMg
YmVpbmcgYW4gb3BpbmlvbiBpcyBydWRlIGFuZCBjb3VudGVyIHByb2R1Y3RpdmUKKyogSXQgd2ls
bCBtYWtlIHRoZSBwYXRjaCBhdXRob3IgYW5ncnk6IGluc3RlYWQgb2YgZmluZGluZyBhIHNvbHV0
aW9uIHRvIHRoZSBwcm9ibGVtIHRoZQorICBhdXRob3Igd2lsbCBzcGVuZCB0aW1lIGFuZCBtZW50
YWwgZW5lcmd5IHdyZXN0bGluZyB3aXRoIHRoZWlyIGZlZWxpbmdzCisqIEl0IGRvZXMgbm90IGNv
bnRhaW4gYW55IGluZm9ybWF0aW9uCisqIEZhY3RzIGFyZSBib3RoIG1vcmUgcG93ZXJmdWwgYW5k
IG1vcmUgcGVyc3Vhc2l2ZQorCitDb25zaWRlciB0aGUgZm9sbG93aW5nIHR3byBwaWVjZXMgb2Yg
ZmVlZGJhY2sgb24gYSBwaWVjZSBvZiBjb2RlCis+IFRoaXMgcGllY2Ugb2YgY29kZSBpcyBjb25m
dXNpbmcKKz4gSXQgdG9vayBtZSBhIGxvbmcgdGltZSB0byDvrIFndXJlIG91dCB3aGF0IHdhcyBn
b2luZyBvbiBoZXJlCisKK1RoZSBmaXJzdCBleGFtcGxlIGV4cHJlc3NlcyBhbiBvcGluaW9uLCB3
aGVyZWFzIHRoZSBzZWNvbmQgcmUtcGhyYXNlcyB0aGUgc3RhdGVtZW50CitpbiB0ZXJtcyBvZiB3
aGF0IHlvdSBleHBlcmllbmNlZCwgd2hpY2ggaXMgYSBmYWN0LgorCitPdGhlciBleGFtcGxlczoK
Kz4gQkFEOiBUaGlzIGlzIGZyYWdpbGUKKz4gU09NRVdIQVQgQkVUVEVSOiBUaGlzIHNlZW1zIGZy
YWdpbGUgdG8gbWUKKz4gQkVTVDogSWYgWCBoYXBwZW5zLCBZIHdpbGwgaGFwcGVuLgorCitBIGNl
cnRhaW4gcGllY2Ugb2YgY29kZSBjYW4gYmUgd3JpdHRlbiBpbiBtYW55IGRpZmZlcmVudCB3YXlz
OiB0aGlzIGNhbiBsZWFkIHRvCitkaXNhZ3JlZW1lbnRzIG9uIHRoZSBiZXN0IGFyY2hpdGVjdHVy
ZSwgZGVzaWduIG9yIGNvZGluZyBwYXR0ZXJuLiBBcyBhbHJlYWR5IHBvaW50ZWQgb3V0CitpbiB0
aGlzIHNlY3Rpb246IGF2b2lkIGZlZWRiYWNrIHRoYXQgaXMgb3Bpbmlvbi1iYXNlZCBhbmQgdGh1
cyBkb2VzIG5vdCBhZGQgYW55IHZhbHVlLgorQmFjayB5b3VyIGNyaXRpY2lzbSAob3IgaWRlYSBv
biBob3cgdG8gc29sdmUgYSBwcm9ibGVtKSB3aXRoIGEgc2Vuc2libGUgcmF0aW9uYWxlLgorCisj
IyMgUmV2aWV3IHRoZSBjb2RlLCBub3QgdGhlIHBlcnNvbgorV2l0aG91dCByZWFsaXppbmcgaXQs
IGl0IGlzIGVhc3kgdG8gb3Zlcmxvb2sgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBpbnNpZ2h0ZnVs
IGNyaXRpcXVlIG9mCitjb2RlIGFuZCBwZXJzb25hbCBjcml0aWNpc20uIExldCdzIGxvb2sgYXQg
YSB0aGVvcmV0aWNhbCBmdW5jdGlvbiB3aGVyZSB0aGVyZSBpcyBhbgorb3Bwb3J0dW5pdHkgdG8g
cmV0dXJuIG91dCBvZiB0aGUgZnVuY3Rpb24gZWFybHkuIEluIHRoaXMgY2FzZSwgeW91IGNvdWxk
IHNheQorCis+IFlvdSBzaG91bGQgcmV0dXJuIGZyb20gdGhpcyBmdW5jdGlvbiBlYXJseSwgYmVj
YXVzZSBvZiBYWFgKKworT24gaXRzIG93biwgdGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIHRo
aXMgc3RhdGVtZW50LiBIb3dldmVyLCBhIGNvZGUgcmV2aWV3IGlzIG1hZGUKK3VwIG9mIG11bHRp
cGxlIGNvbW1lbnRzIGFuZCB1c2luZyAqKllvdSBzaG91bGQqKiBjb25zaXN0ZW50bHkgY2FuIHN0
YXJ0IHRvIGZlZWwgbmVnYXRpdmUKK2FuZCBjYW4gYmUgbWlzLWludGVycHJldGVkIGFzIGEgcGVy
c29uYWwgYXR0YWNrLiBVc2luZyBzb21ldGhpbmcgbGlrZSBhdm9pZHMgdGhpcyBpc3N1ZToKKwor
PiBSZXR1cm5pbmcgZnJvbSB0aGlzIGZ1bmN0aW9uIGVhcmx5IGlzIGJldHRlciwgYmVjYXVzZSBv
ZiBYWFgKKworV2l0aG91dCBwZXJzb25hbCByZWZlcmVuY2UsIGEgY29kZSByZXZpZXcgd2lsbCBj
b21tdW5pY2F0ZSB0aGUgcHJvYmxlbSwgaWRlYSBvciBpc3N1ZQord2l0aG91dCByaXNraW5nIG1p
cy1pbnRlcnByZXRhdGlvbi4KKworIyMjIFZlcmJvc2UgdnMuIHRlcnNlCitEdWUgdG8gdGhlIHRp
bWUgaXQgdGFrZXMgdG8gcmV2aWV3IGFuZCBjb21wb3NlIGNvZGUgcmV2aWV3ZXIsIHJldmlld2Vy
cyBvZnRlbiBhZG9wdCBhCit0ZXJzZSBzdHlsZS4gSXQgaXMgbm90IHVudXN1YWwgdG8gc2VlIHJl
dmlldyBjb21tZW50cyBzdWNoIGFzCis+IHR5cG8KKz4gcy9yZXNpb25zL3JlZ2lvbnMvCis+IGNv
ZGluZyBzdHlsZQorPiBjb2Rpbmcgc3R5bGU6IGJyYWNrZXRzIG5vdCBuZWVkZWQKK2V0Yy4KKwor
VGVyc2UgY29kZSByZXZpZXcgc3R5bGUgaGFzIGl0cyBwbGFjZSBhbmQgY2FuIGJlIHByb2R1Y3Rp
dmUgZm9yIGJvdGggdGhlIHJldmlld2VyIGFuZAordGhlIGF1dGhvci4gSG93ZXZlciwgb3ZlcnVz
ZSBjYW4gY29tZSBhY3Jvc3MgYXMgdW5mcmllbmRseSwgbGFja2luZyBlbXBhdGh5IGFuZAorY2Fu
IHRodXMgY3JlYXRlIGEgbmVnYXRpdmUgaW1wcmVzc2lvbiB3aXRoIHRoZSBhdXRob3Igb2YgYSBw
YXRjaC4gVGhpcyBpcyBpbiBwYXJ0aWN1bGFyCit0cnVlLCB3aGVuIHlvdSBkbyBub3Qga25vdyB0
aGUgYXV0aG9yIG9yIHRoZSBhdXRob3IgaXMgYSBuZXdjb21lci4gVGVyc2UKK2NvbW11bmljYXRp
b24gc3R5bGVzIGNhbiBhbHNvIGJlIHBlcmNlaXZlZCBhcyBydWRlIGluIHNvbWUgY3VsdHVyZXMu
CisKK0lmIHlvdSB0ZW5kIHRvIHVzZSBhIHRlcnNlIGNvbW1lbnRpbmcgc3R5bGUgYW5kIHlvdSBk
byBub3Qga25vdyB3aGV0aGVyIHRoZSBhdXRob3IKK2lzIE9LIHdpdGggaXQsIGl0IGlzIG9mdGVu
IGEgZ29vZCBpZGVhIHRvIGNvbXBlbnNhdGUgZm9yIGl0IGluIHRoZSBjb2RlIHJldmlldyBvcGVu
aW5nCisod2hlcmUgeW91IGV4cHJlc3MgYXBwcmVjaWF0aW9uKSBvciB3aGVuIHRoZXJlIGlzIGEg
bmVlZCBmb3IgdmVyYm9zZSBleHByZXNzaW9uLgorCitJdCBpcyBhbHNvIGVudGlyZWx5IGZpbmUg
dG8gbWVudGlvbiB0aGF0IHlvdSBoYXZlIGEgZmFpcmx5IHRlcnNlIGNvbW11bmljYXRpb24gc3R5
bGUKK2FuZCBhc2sgd2hldGhlciB0aGUgYXV0aG9yIGlzIE9LIHdpdGggaXQuIEluIGFsbW9zdCBh
bGwgY2FzZXMsIHRoZXkgd2lsbCBiZTogYnkgYXNraW5nCit5b3UgYXJlIHNob3dpbmcgZW1wYXRo
eSB0aGF0IGhlbHBzIGNvdW50ZXJhY3QgYSBuZWdhdGl2ZSBpbXByZXNzaW9uLgorCisjIyMgQ29k
ZSBSZXZpZXcgQ29tbWVudHMgc2hvdWxkIGJlIGFjdGlvbmFibGUKK0NvZGUgcmV2aWV3IGNvbW1l
bnRzIHNob3VsZCBiZSBhY3Rpb25hYmxlOiBpbiBvdGhlciB3b3JkcywgaXQgbmVlZHMgdG8gYmUg
Y2xlYXIKK3doYXQgdGhlIGF1dGhvciBvZiB0aGUgY29kZSBuZWVkcyB0byBkbyB0byBhZGRyZXNz
IHRoZSBpc3N1ZSB5b3UgaWRlbnRpZmllZC4KKworU3RhdGVtZW50cyBzdWNoIGFzCis+IEJBRDog
VGhpcyBpcyB3cm9uZworPiBCQUQ6IFRoaXMgZG9lcyBub3Qgd29yaworPiBCRVRURVIsIEJVVCBO
T1QgR09PRDogVGhpcyBkb2VzIG5vdCB3b3JrLCBiZWNhdXNlIG9mIFhYWAorCitkbyBub3Qgbm9y
bWFsbHkgcHJvdmlkZSB0aGUgYXV0aG9yIG9mIGEgcGF0Y2ggd2l0aCBlbm91Z2ggaW5mb3JtYXRp
b24gdG8gc2VuZCBvdXQgYQorbmV3IHBhdGNoIHZlcnNpb24uIEJ5IGRvaW5nIHRoaXMsIHlvdSBl
c3NlbnRpYWxseSBmb3JjZSB0aGUgcGF0Y2ggYXV0aG9yIHRvICoqZmluZCoqIGFuZAorKippbXBs
ZW1lbnQqKiBhbiBhbHRlcm5hdGl2ZSwgd2hpY2ggdGhlbiBtYXkgYWxzbyBub3QgYmUgYWNjZXB0
YWJsZSB0byB5b3UgYXMgdGhlCisqKnJldmlld2VyKiogb2YgdGhlIHBhdGNoLgorCitBIGJldHRl
ciB3YXkgdG8gYXBwcm9hY2ggdGhpcyBpcyB0byBzYXkKKworPiBUaGlzIGRvZXMgbm90IHdvcmss
IGJlY2F1c2Ugb2YgWFhYCis+IFlvdSBtYXkgd2FudCB0byBpbnZlc3RpZ2F0ZSBZWVkgYW5kIFpa
WiBhcyBhbHRlcm5hdGl2ZXMKKworSW4gc29tZSBjYXNlcywgaXQgbWF5IG5vdCBiZSBjbGVhciB3
aGV0aGVyIFlZWSBvciBaWlogYXJlIHRoZSBiZXR0ZXIgc29sdXRpb24uIEFzIGEKK3Jldmlld2Vy
IHlvdSBzaG91bGQgYmUgYXMgdXAtZnJvbnQgYW5kIHBvc3NpYmxlIGluIHN1Y2ggYSBjYXNlIGFu
ZCBzYXkgc29tZXRoaW5nIGxpa2UKKworPiBJIGFtIG5vdCBzdXJlIHdoZXRoZXIgWVlZIGFuZCBa
WlogYXJlIGJldHRlciwgc28geW91IG1heSB3YW50IHRvIG91dGxpbmUgeW91cgorPiB0aG91Z2h0
cyBhYm91dCBib3RoIHNvbHV0aW9ucyBieSBlLW1haWwgZmlyc3QsIHN1Y2ggdGhhdCB3ZSBjYW4g
ZGVjaWRlIHdoYXQgd29ya3MKKz4gYmVzdAorCisjIyMgSWRlbnRpZnkgdGhlIHNldmVyaXR5IG9m
IGFuIGlzc3VlIG9yIGRpc2FncmVlbWVudAorQnkgZGVmYXVsdCwgZXZlcnkgY29tbWVudCB3aGlj
aCBpcyBtYWRlICoqb3VnaHQgdG8gYmUgYWRkcmVzc2VkKiogYnkgdGhlIGF1dGhvci4KK0hvd2V2
ZXIsIG9mdGVuIHJldmlld2VycyBub3RlIGlzc3Vlcywgd2hpY2ggd291bGQgYmUgbmljZSBpZiB0
aGV5IHdlcmUgYWRkcmVzc2VkLAorYnV0IGFyZSBub3QgbWFuZGF0b3J5LgorCitUeXBpY2FsbHks
IHJldmlld2VycyB1c2UgdGVybWlub2xvZ3kgc3VjaCBhcworPiBUaGlzIHdvdWxkIGJlIGEgbmlj
ZS10by1oYXZlCis+IFRoaXMgaXMgbm90IGEgYmxvY2tlcgorCitTb21lIG1haW50YWluZXJzIHVz
ZQorPiBOSVQ6IFhYWAorCitob3dldmVyLCBpdCBpcyBzb21ldGltZXMgYWxzbyB1c2VkIHRvIGlu
ZGljYXRlIGEgbWlub3IgaXNzdWUgdGhhdCAqKm11c3QqKiBiZSBmaXhlZC4KKworRHVyaW5nIGEg
Y29kZSByZXZpZXcsIGl0IGNhbiBoYXBwZW4gdGhhdCByZXZpZXdlciBhbmQgYXV0aG9yIGRpc2Fn
cmVlIG9uIGhvdyB0byBtb3ZlCitmb3J3YXJkLiBUaGUgZGVmYXVsdCBwb3NpdGlvbiB3aGVuIGl0
IGNvbWVzIHRvIGRpc2FncmVlbWVudHMgaXMgdGhhdCAqKmJvdGggcGFydGllcword2FudCB0byBh
cmd1ZSB0aGVpciBjYXNlKiouIEhvd2V2ZXIsIGZyZXF1ZW50bHkgb25lIG9yIGJvdGggcGFydGll
cyBkbyBub3QgZmVlbCB0aGF0CitzdHJvbmdseSBhYm91dCBhIHNwZWNpZmljIGlzc3VlLgorCitX
aXRoaW4gdGhlIFhlbiBQcm9qZWN0LCB3ZSBoYXZlIFthIHdheV0oaHR0cHM6Ly94ZW5wcm9qZWN0
Lm9yZy9kZXZlbG9wZXJzL2dvdmVybmFuY2UvI2V4cHJlc3NpbmdvcGluaW9uKQordG8gaGlnaGxp
Z2h0IG9uZSdzIHBvc2l0aW9uIG9uIHByb3Bvc2FscywgZm9ybWFsIG9yIGluZm9ybWFsIHZvdGVz
IHVzaW5nIHRoZSBmb2xsb3dpbmcKK25vdGF0aW9uOgorPiArMiA6IEkgYW0gaGFwcHkgd2l0aCB0
aGlzIHByb3Bvc2FsLCBhbmQgSSB3aWxsIGFyZ3VlIGZvciBpdAorPiArMSA6IEkgYW0gaGFwcHkg
d2l0aCB0aGlzIHByb3Bvc2FsLCBidXQgd2lsbCBub3QgYXJndWUgZm9yIGl0Cis+IDAgOiBJIGhh
dmUgbm8gb3BpbmlvbgorPiAtMSA6IEkgYW0gbm90IGhhcHB5IHdpdGggdGhpcyBwcm9wb3NhbCwg
YnV0IHdpbGwgbm90IGFyZ3VlIGFnYWluc3QgaXQKKz4gLTIgOiBJIGFtIG5vdCBoYXBweSB3aXRo
IHRoaXMgcHJvcG9zYWwsIGFuZCBJIHdpbGwgYXJndWUgYWdhaW5zdCBpdAorCitZb3UgY2FuIHVz
ZSBhIHBocmFzZSBzdWNoIGFzCis+IEkgYW0gbm90IGhhcHB5IHdpdGggdGhpcyBzdWdnZXN0aW9u
LCBidXQgd2lsbCBub3QgYXJndWUgYWdhaW5zdCBpdAorCit0byBtYWtlIGNsZWFyIHdoZXJlIHlv
dSBzdGFuZCwgd2hpbGUgcmVjb3JkaW5nIHlvdXIgcG9zaXRpb24uIENvbnZlcnNlbHksIGEgcmV2
aWV3ZXIKK21heSBkbyBzb21ldGhpbmcgc2ltaWxhcgorPiBJIGFtIG5vdCBoYXBweSB3aXRoIFhZ
WiwgYnV0IHdpbGwgbm90IGFyZ3VlIGFnYWluc3QgaXQgW2FueW1vcmVdCis+IFdoYXQgd2UgaGF2
ZSBub3cgaXMgZ29vZCBlbm91Z2gsIGJ1dCBjb3VsZCBiZSBiZXR0ZXIKKworIyMjIEF1dGhvcnM6
IHJlc3BvbmRpbmcgdG8gcmV2aWV3IGNvbW1lbnRzCitUeXBpY2FsbHkgcGF0Y2ggYXV0aG9ycyBh
cmUgZXhwZWN0ZWQgdG8gKiphZGRyZXNzIGFsbCoqIHJldmlldyBjb21tZW50cyBpbiB0aGUgbmV4
dAordmVyc2lvbiBvZiBhIHBhdGNoIG9yIHBhdGNoIHNlcmllcy4gSW4gYSBzbW9vdGgtcnVubmlu
ZyBjb2RlIHJldmlldyB3aGVyZSB5b3UgZG8gbm90CitoYXZlIGZ1cnRoZXIgcXVlc3Rpb25zIGl0
IGlzIG5vdCBhdCBhbGwgbmVjZXNzYXJ5IHRvIGFja25vd2xlZGdlIHRoZSBjaGFuZ2VzIHlvdSBh
cmUKK2dvaW5nIHRvIG1ha2U6CisqIFNpbXBseSBzZW5kIHRoZSBuZXh0IHZlcnNpb24gd2l0aCB0
aGUgY2hhbmdlcyBhZGRyZXNzZWQgYW5kIHJlY29yZCBpdCBpbiB0aGUKK2NoYW5nZS1sb2cKKwor
V2hlbiB0aGVyZSBpcyBkaXNjdXNzaW9uLCB0aGUgbm9ybWFsIHByYWN0aWNlIGlzIHRvIHJlbW92
ZSB0aGUgcG9ydGlvbiBvZiB0aGUgZS1tYWlsCit0aHJlYWQgd2hlcmUgdGhlcmUgaXMgYWdyZWVt
ZW50LiBPdGhlcndpc2UsIHRoZSB0aHJlYWQgY2FuIGJlY29tZSBleGNlcHRpb25hbGx5Citsb25n
LgorCitJbiBjYXNlcyB3aGVyZSB0aGVyZSB3YXMgZGlzY3Vzc2lvbiBhbmQgbWF5YmUgZGlzYWdy
ZWVtZW50LCBpdCBkb2VzIGhvd2V2ZXIgbWFrZQorc2Vuc2UgdG8gY2xvc2UgdGhlIGRpc2N1c3Np
b24gYnkgc2F5aW5nIHNvbWV0aGluZyBsaWtlCisKKz4gQUNLCis+IFNlZW1zIHdlIGFyZSBhZ3Jl
ZWQsIEkgYW0gZ29pbmcgdG8gZG8gdGhpcworCitPdGhlciBzaXR1YXRpb25zIHdoZW4geW91IG1h
eSB3YW50IHRvIGRvIHRoaXMgYXJlIGNhc2VzIHdoZXJlIHRoZSByZXZpZXdlciBtYWRlCitvcHRp
b25hbCBzdWdnZXN0aW9ucywgdG8gbWFrZSBjbGVhciB3aGV0aGVyIHRoZSBzdWdnZXN0aW9uIHdp
bGwgYmUgZm9sbG93ZWQgb3IKK25vdC4KKworIyMjIEF2b2lkIHVuY29tbW9uIHdvcmRzOiBub3Qg
ZXZlcnlvbmUgaXMgYSBuYXRpdmUgRW5nbGlzaCBzcGVha2VyCitBdm9pZCB1bmNvbW1vbiB3b3Jk
cyBib3RoIHdoZW4gcmV2aWV3aW5nIGNvZGUgb3IgcmVzcG9uZGluZyB0byBhIHJldmlldy4gTm90
CitldmVyeW9uZSBpcyBhIG5hdGl2ZSBFbmdsaXNoIHNwZWFrZXIuIFRoZSB1c2Ugb2Ygc3VjaCB3
b3JkcyBjYW4gY29tZSBhY3Jvc3MgYmFkbHkgYW5kCitjYW4gbGVhZCB0byBtaXN1bmRlcnN0YW5k
aW5ncy4KKworIyMjIFByaW9yaXRpemUgc2lnbmlmaWNhbnQgZmxhd3MKK0lmIGEgcGF0Y2ggb3Ig
cGF0Y2ggc2VyaWVzIGhhcyBzaWduaWZpY2FudCBmbGF3cywgc3VjaCBhcworKiBJdCBpcyBidWls
dCBvbiB3cm9uZyBhc3N1bXB0aW9ucworKiBUaGVyZSBhcmUgaXNzdWVzIHdpdGggdGhlIGFyY2hp
dGVjdHVyZSBvciB0aGUgZGVzaWduCisKK2l0IGRvZXMgbm90IG1ha2Ugc2Vuc2UgdG8gZG8gYSBk
ZXRhaWxlZCBjb2RlIHJldmlldy4gSW4gc3VjaCBjYXNlcywgaXQgaXMgYmVzdCB0bworZm9jdXMg
b24gdGhlIG1ham9yIGlzc3VlcyBmaXJzdCBhbmQgZGVhbCB3aXRoIHN0eWxlIGFuZCBtaW5vciBp
c3N1ZXMgaW4gYSBzdWJzZXF1ZW50CityZXZpZXcuIFRoaXMgcmVkdWNlcyB0aGUgd29ya2xvYWQg
b24gYm90aCB0aGUgcmV2aWV3ZXIgYW5kIHBhdGNoIGF1dGhvci4gSG93ZXZlciwKK3Jldmlld2Vy
cyBzaG91bGQgbWFrZSBjbGVhciB0aGF0IHRoZXkgaGF2ZSBvbWl0dGVkIGRldGFpbGVkIHJldmll
dyBjb21tZW50cyBhbmQKK3RoYXQgdGhlc2Ugd2lsbCBjb21lIGxhdGVyLgorCisjIyMgV2VsY29t
ZSBuZXdjb21lcnMKK1doZW4gcmV2aWV3aW5nIHRoZSBmaXJzdCBmZXcgcGF0Y2hlcyBvZiBhIG5l
d2NvbWVyIHRvIHRoZSBwcm9qZWN0LCB5b3UgbWF5IHdhbnQKK3NwZW5kIGFkZGl0aW9uYWwgdGlt
ZSBhbmQgZWZmb3J0IGluIHlvdXIgY29kZSByZXZpZXcuIFRoaXMgY29udHJpYnV0ZXMgdG8gYSBt
b3JlCisqKnBvc2l0aXZlIGV4cGVyaWVuY2UqKiwgd2hpY2ggdWx0aW1hdGVseSBoZWxwcyBjcmVh
dGUgYSBwb3NpdGl2ZSB3b3JraW5nIHJlbGF0aW9uc2hpcCBpbgordGhlIGxvbmcgdGVybS4KKwor
V2hlbiBzb21lb25lIGRvZXMgdGhlaXIgZmlyc3QgY29kZSBzdWJtaXNzaW9uLCB0aGV5IHdpbGwg
bm90IGJlIGZhbWlsaWFyIHdpdGggKiphbGwqKgorY29udmVudGlvbnMgaW4gdGhlIHByb2plY3Qu
IEEgZ29vZCBhcHByb2FjaCBpcyB0bworKiBXZWxjb21lIHRoZSBuZXdjb21lcgorKiBPZmZlciB0
byBoZWxwIHdpdGggc3BlY2lmaWMgcXVlc3Rpb25zLCBmb3IgZXhhbXBsZSBvbiBJUkMKKyogUG9p
bnQgdG8gZXhpc3RpbmcgZG9jdW1lbnRhdGlvbjogaW4gcGFydGljdWxhciBpZiBtaXN0YWtlcyB3
aXRoIHRoZSBzdWJtaXNzaW9uCisgIGl0c2VsZiB3ZXJlIG1hZGUuIEluIG1vc3Qgc2l0dWF0aW9u
cywgZm9sbG93aW5nIHRoZSBzdWJtaXNzaW9uIHByb2Nlc3MgbWFrZXMKKyAgdGhlIHByb2Nlc3Mg
bW9yZSBzZWFtbGVzcyBmb3IgdGhlIGNvbnRyaWJ1dG9yLiBTbywgeW91IGNvdWxkIHNheSBzb21l
dGhpbmcgbGlrZQorCis+IEhpIFhYWC4gV2VsY29tZSB0byB0aGUgY29tbXVuaXR5IGFuZCB0aGFu
ayB5b3UgZm9yIHRoZSBwYXRjaAorPgorPiBJIG5vdGljZWQgdGhhdCB0aGUgc3VibWlzc2lvbiB5
b3UgbWFkZSBzZWVtcyB0byBub3QgZm9sbG93IG91ciBwcm9jZXNzLgorPiBBcmUgeW91IGF3YXJl
IG9mIHRoaXMgZG9jdW1lbnQgYXQgWVlZPyBJZiB5b3UgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMg
dGhlCis+IGVudGlyZSBjb2RlIHN1Ym1pc3Npb24gcHJvY2VzcyBhbmQgZGVhbGluZyB3aXRoIHJl
dmlldyBjb21tZW50cyBiZWNvbWVzCis+IG11Y2ggZWFzaWVyLiBGZWVsIGZyZWUgdG8gZmluZCBt
ZSBvbiBJUkMgaWYgeW91IG5lZWQgc3BlY2lmaWMgaGVscC4gTXkgSVJDCis+IGhhbmRsZSBpcyBa
WloKKworIyMjIFJldmlldyB0aGUgY29kZSwgdGhlbiByZXZpZXcgdGhlIHJldmlldworQXMgc3Rh
dGVkIGVhcmxpZXIgaXQgaXMgb2Z0ZW4gZGlmZmljdWx0IHRvIG1lbnRhbGx5IHNlcGFyYXRlIGZp
bmRpbmcgaXNzdWVzIGZyb20gYXJ0aWN1bGF0aW5nCitjb2RlIHJldmlldyBjb21tZW50cyBpbiBh
IGNvbnN0cnVjdGl2ZSBhbmQgcG9zaXRpdmUgbWFubmVyLiBFdmVuIGFzIGFuIGV4cGVyaWVuY2Vk
Citjb2RlIHJldmlld2VyIHlvdSBjYW4gYmUgaW4gYSBiYWQgbW9vZCwgd2hpY2ggY2FuIGltcGFj
dCB5b3VyIGNvbW11bmljYXRpb24gc3R5bGUuCisKK0EgZ29vZCB0cmljayB0byBhdm9pZCB0aGlz
LCBpcyB0byBzdGFydCBhbmQgY29tcGxldGUgdGhlIGNvZGUgcmV2aWV3IGFuZCB0aGVuICoqbm90
CitzZW5kIGl0IGltbWVkaWF0ZWx5KiouIFlvdSBjYW4gdGhlbiBoYXZlIGEgZmluYWwgZ28gb3Zl
ciB0aGUgY29kZSByZXZpZXcgYXQgc29tZSBsYXRlcgorcG9pbnQgaW4gdGltZSBhbmQgcmV2aWV3
IHlvdXIgY29tbWVudHMgZnJvbSB0aGUgb3RoZXIgYXV0aG9yJ3MgcG9pbnQgb2Ygdmlldy4gVGhp
cworbWluaW1pemVzIHRoZSByaXNrIG9mIGJlaW5nIG1pc3VuZGVyc3Rvb2QuIFRoZSBzYW1lIGFw
cGxpZXMgd2hlbiByZXBseWluZyB0byBhIGNvZGUKK3JldmlldzogZHJhZnQgeW91ciByZXBseSBh
bmQgZ2l2ZSBpdCBhIGZpbmFsIHNjYW4gYmVmb3JlIHByZXNzaW5nIHRoZSBzZW5kIGJ1dHRvbi4K
KworR2VuZXJhbGx5LCBpdCBpcyBhIGdvb2QgaWRlYSBmb3IgY29kZSByZXZpZXdlcnMgdG8gZG8g
dGhpcyByZWd1bGFybHksIHB1cmVseSBmcm9tIHRoZQordmlld3BvaW50IG9mIHNlbGYtaW1wcm92
ZW1lbnQgYW5kIHNlbGYtYXdhcmVuZXNzLgorCisjIyBDb21tb24gQ29tbXVuaWNhdGlvbiBQaXRm
YWxscworCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbW9uIGNvbW11bmljYXRpb24gaXNzdWVz
IGFuZCBwcm92aWRlcyBzdWdnZXN0aW9ucyBvbgoraG93IHRvIGF2b2lkIHRoZW0gYW5kIHJlc29s
dmUgdGhlbS4gVGhlc2UgYXJlICoqZ2VuZXJhbCoqIGlzc3VlcyB3aGljaCBhZmZlY3QgKiphbGwq
Kgorb25saW5lIGNvbW11bmljYXRpb24uIEFzIHN1Y2gsIHdlIGNhbiBvbmx5IHRyeSBhbmQgZG8g
b3VyIGJlc3QuCisKKyMjIyBNaXN1bmRlcnN0YW5kaW5ncworV2hlbiB5b3UgbWVldCBmYWNlIHRv
IGZhY2UsIHlvdSBjYW4gcmVhZCBhIHBlcnNvbuKAmXMgZW1vdGlvbnMuIEV2ZW4gd2l0aCBhIHBo
b25lIGNhbGwsCitzb21lb25l4oCZcyB0b25lIG9mIHZvaWNlIGNhbiBjb252ZXkgYSBsb3Qgb2Yg
aW5mb3JtYXRpb24uIFVzaW5nIG9uLWxpbmUgY29tbXVuaWNhdGlvbgorY2hhbm5lbHMgeW91IGFy
ZSBmbHlpbmcgYmxpbmQsIHdoaWNoIG9mdGVuIGxlYWRzIHRvIG1pc3VuZGVyc3RhbmRpbmdzLgor
W1Jlc2VhcmNoXShodHRwczovL3d3dy53aXJlZC5jb20vMjAwNi8wMi90aGUtc2VjcmV0LWNhdXNl
LW9mLWZsYW1lLXdhcnMvKSBzaG93cwordGhhdCBpbiB1cCB0byA1MCUgb2YgZW1haWwgY29udmVy
c2F0aW9ucywgdGhlIHRvbmUgb2Ygdm9pY2UgaXMgbWlzaW50ZXJwcmV0ZWQuCisKK0luIGNvZGUg
cmV2aWV3cyBhbmQgdGVjaG5pY2FsIGRpc2N1c3Npb25zIGluIGdlbmVyYWwgd2UgdGVuZCB0byBz
ZWUgdHdvIHRoaW5ncworKiBUaGUgcmV2aWV3ZXIgb3IgYXV0aG9yIGludGVycHJldHMgYW4gZXhj
aGFuZ2UgYXMgdG9vIGNyaXRpY2FsLCBwYXNzaXZlIGFnZ3Jlc3NpdmUsIG9yCitvdGhlcjogdGhp
cyB1c3VhbGx5IGNvbWVzIGRvd24gdG8gZGlmZmVyZW50IGN1bHR1cmVzIGFuZCBjb21tdW5pY2F0
aW9uIHN0eWxlcywgd2hpY2gKK2FyZSBjb3ZlcmVkIGluIHRoZSBuZXh0IHNlY3Rpb24KKyogVGhl
cmUgaXMgYW4gYWN0dWFsIG1pc3VuZGVyc3RhbmRpbmcgb2YgYSBzdWJqZWN0IHVuZGVyIGRpc2N1
c3Npb24KKworSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUga2V5IHRvIHJlc29sdXRpb24gaXMgdG8g
KippZGVudGlmeSB0aGUgbWlzdW5kZXJzdGFuZGluZyoqIGFzIHF1aWNrbHkKK2FzIHBvc3NpYmxl
IGFuZCBjYWxsIGl0IG91dCBhbmQgZGUtZXNjYWxhdGUgcmF0aGVyIHRoYW4gbGV0IHRoZSBtaXN1
bmRlcnN0YW5kaW5nIGxpbmdlci4KK1RoaXMgaXMgaW5oZXJlbnRseSBkaWZmaWN1bHQgYW5kIHJl
cXVpcmVzIG1vcmUgY2FyZSB0aGFuIG5vcm1hbCBjb21tdW5pY2F0aW9uLiBUeXBpY2FsbHkKK3lv
dSB3b3VsZCBzdGFydCB3aXRoCisqIFNob3dpbmcgYXBwcmVjaWF0aW9uCisqIEhpZ2hsaWdodGlu
ZyB0aGUgcG90ZW50aWFsIG1pc3VuZGVyc3RhbmRpbmcgYW5kIHZlcmlmeWluZyB3aGV0aGVyIHRo
ZSBvdGhlciBwZXJzb24KKyAgYWxzbyBmZWVscyB0aGF0IG1heWJlIHRoZXJlIHdhcyBhIG1pc3Vu
ZGVyc3RhbmRpbmcKKyogUHJvcG9zaW5nIGEgd2F5IGZvcndhcmQ6IGZvciBleGFtcGxlLCBpdCBt
YXkgbWFrZSBzZW5zZSB0byBtb3ZlIHRoZSBjb252ZXJzYXRpb24KKyAgZnJvbSB0aGUgbWFpbGlu
ZyBsaXN0IHRvIFtJUkNdKGh0dHBzOi8veGVucHJvamVjdC5vcmcvaGVscC9pcmMvKSBlaXRoZXIg
aW4gcHJpdmF0ZSBvciBwdWJsaWMsCisgIGEgY29tbXVuaXR5IGNhbGwgb3IgYSBwcml2YXRlIHBo
b25lL3ZpZGVvIGNhbGwuCisKK0l0IGlzIGVudGlyZWx5IGFjY2VwdGFibGUgdG8gZG8gdGhpcyBp
biBhIGRpcmVjdCByZXBseSB0byB5b3VyIGNvbW11bmljYXRpb24gcGFydG5lciwgcmF0aGVyCit0
aGFuIG9uIGEgcHVibGljIGUtbWFpbCBsaXN0IG9uIG9yIGFuIG90aGVyd2lzZSBwdWJsaWMgZm9y
dW0uCisKK0EgZ29vZCBhcHByb2FjaCBpcyB0byB1c2Ugc29tZXRoaW5nIGxpa2UgdGhlIGZvbGxv
d2luZzoKKz4gSGkgWFhYISBUaGFuayB5b3UgZm9yIHRoZSBpbnNpZ2h0cyB5b3UgaGF2ZSBnaXZl
biBtZSBpbiB0aGlzIGNvZGUgcmV2aWV3Cis+IEkgZmVlbCB0aGF0IHdlIGFyZSBtaXN1bmRlcnN0
YW5kaW5nIGVhY2ggb3RoZXIgb24gdGhlIHRvcGljIG9mIFlZWQorPiBXb3VsZCB5b3UgbWluZCB0
cnlpbmcgdG8gcmVzb2x2ZSB0aGlzIG9uIElSQy4gSSBhbSBhdmFpbGFibGUgYXQgWlpaCisKK1Vz
dWFsbHksIHRlY2huaWNhbCBtaXN1bmRlcnN0YW5kaW5ncyBjb21lIGRvd24gdHdvIGVpdGhlcgor
MS4gTWlzaW50ZXJwcmV0aW5nIHdoYXQgdGhlIG90aGVyIHBlcnNvbiBtZWFudAorMi4gRGlmZmVy
ZW50IC0gdXN1YWxseSB1bnN0YXRlZCAtIGFzc3VtcHRpb25zIG9uIGhvdyBzb21ldGhpbmcgd29y
a3Mgb3Igd2hhdCBpcyB0byBiZQorYWNoaWV2ZWQKKzMuIERpZmZlcmVudCAtIHVzdWFsbHkgdW5z
dGF0ZWQgLSBvYmplY3RpdmVzIGFuZCBnb2Fscywgd2hpY2ggbWF5IGJlIGNvbmZsaWN0aW5nCis0
LiBSZWFsIGRpZmZlcmVuY2VzIGluIG9waW5pb24KKworVGhlIGdvYWwgb2YgY2FsbGluZyBvdXQg
YSBwb3NzaWJsZSBtaXN1bmRlcnN0YW5kaW5nIGlzIHRvIGVzdGFibGlzaCB3aGF0IGNhdXNlZCB0
aGUKK21pc3VuZGVyc3RhbmRpbmcsIHN1Y2ggdGhhdCBhbGwgcGFydGllcyBjYW4gbW92ZSBmb3J3
YXJkLiBUeXBpY2FsbHksIDEgYW5kIDIgYXJlIGVhc2lseQorcmVzb2x2ZWQgYW5kIHdpbGwgbGVh
ZCBiYWNrIHRvIGEgY29uc3RydWN0aXZlIGRpc2N1c3Npb24uIFdoZXJlYXMgMyBhbmQgNCBtYXkg
aGlnaGxpZ2h0CithbiBpbmhlcmVudCBkaXNhZ3JlZW1lbnQsIHdoaWNoIG1heSBuZWVkIHRvIGJl
IHJlc29sdmVkIHRocm91Z2ggdGVjaG5pcXVlcyBhcworb3V0bGluZWQgaW4gW1Jlc29sdmluZyBE
aXNhZ3JlZW1lbnRdIChyZXNvbHZpbmctZGlzYWdyZWVtZW50Lm1kKS4KKworIyMjIEN1bHR1cmFs
IGRpZmZlcmVuY2VzIGFuZCBkaWZmZXJlbnQgY29tbXVuaWNhdGlvbiBzdHlsZXMKK1RoZSBYZW4g
UHJvamVjdCBpcyBhIGdsb2JhbCBjb21tdW5pdHkgd2l0aCBjb250cmlidXRvcnMgZnJvbSBtYW55
IGRpZmZlcmVudAorYmFja2dyb3VuZHMuIFR5cGljYWxseSwgd2hlbiB3ZSBjb21tdW5pY2F0ZSB3
aXRoIGEgcGVyc29uIHdlIGtub3csIHdlIGZhY3RvcgoraW4gcGFzdCBpbnRlcmFjdGlvbnMuIFRo
ZSBsZXNzIHdlIGtub3cgYSBwZXJzb24sIHRoZSBtb3JlIHdlIHJlbHkgb24gY3VsdHVyYWwgbm9y
bXMuCisKK0hvd2V2ZXIsIGRpZmZlcmVudCBub3JtcyBhbmQgdmFsdWUgc3lzdGVtcyBjb21lIGlu
dG8gcGxheSB3aGVuIHBlb3BsZSBmcm9tIGRpdmVyc2UKK2N1bHR1cmFsIGJhY2tncm91bmRzIGlu
dGVyYWN0LiBUaGF0IGNhbiBsZWFkIHRvIG1pc3VuZGVyc3RhbmRpbmdzLCBlc3BlY2lhbGx5IGlu
CitzZW5zaXRpdmUgc2l0dWF0aW9ucyBzdWNoIGFzIGNvbmZsaWN0IHJlc29sdXRpb24sIGdpdmlu
ZyBhbmQgcmVjZWl2aW5nIGZlZWRiYWNrLCBhbmQKK2NvbnNlbnN1cyBidWlsZGluZy4KKworRm9y
IGV4YW1wbGUsIGdpdmluZyBkaXJlY3QgZmVlZGJhY2sgc3VjaCBhcworPiBbUGxlYXNlXSByZXBs
YWNlIFhYWCB3aXRoIFlZWSwgYXMgWFhYIGRvZXMgbm90IGRvIFpaWgorCitpcyBhY2NlcHRhYmxl
IGFuZCBub3JtYWwgaW4gc29tZSBjdWx0dXJlcywgd2hlcmVhcyBpbiBjdWx0dXJlcyB3aGljaCB2
YWx1ZSBpbmRpcmVjdAorZmVlZGJhY2sgaXQgd291bGQgYmUgY29uc2lkZXJlZCBydWRlLiBJbiB0
aGUgbGF0dGVyIGNhc2UsIHNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmcKK3dvdWxkIGJlIHVz
ZWQKKz4gVGhpcyBsb29rcyB2ZXJ5IGdvb2QgdG8gbWUsIGJ1dCBJIGJlbGlldmUgeW91IHNob3Vs
ZCB1c2UgWVlZIGhlcmUsCis+IGJlY2F1c2UgWFhYIHdvdWxkLi4uLgorCitUaGUga2V5IHRvIHdv
cmtpbmcgYW5kIGNvbW11bmljYXRpbmcgd2VsbCB3aXRoIHBlb3BsZSBmcm9tIGRpZmZlcmVudCBj
dWx0dXJhbAorYmFja2dyb3VuZHMgaXMgKipzZWxmLWF3YXJlbmVzcyoqLCB3aGljaCBjYW4gdGhl
biBiZSB1c2VkIHRvIGVpdGhlcgorKiBBZGFwdCB5b3VyIG93biBjb21tdW5pY2F0aW9uIHN0eWxl
IGRlcGVuZGluZyBvbiB3aG8geW91IHRhbGsgdG8KKyogT3IgdG8gZmluZCBhIG1pZGRsZS1ncm91
bmQgdGhhdCBjb3ZlcnMgbW9zdCBiYXNlcworCitBIG51bWJlciBvZiBkaWZmZXJlbnQgdGhlb3Jp
ZXMgaW4gdGhlIGZpZWxkIG9mIHdvcmtpbmcgZWZmZWN0aXZlbHkgYXJlIGN1cnJlbnRseSBwb3B1
bGFyLAord2l0aCB0aGUgbW9zdCB3ZWxsLWtub3duIG9uZSBiZWluZworW0VyaW4gTWV5ZXIncyBD
dWx0dXJlIE1hcF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXJpbl9NZXllcikuIEEg
c2hvcnQgb3ZlcnZpZXcKK2NhbiBiZSBmb3VuZAorW2hlcmVdKGh0dHBzOi8vd3d3Lm5zZi5nb3Yv
YXR0YWNobWVudHMvMTM0MDU5L3B1YmxpYy8xNUxGV19Xb3JraW5nV2l0aE11bHRpY3VsdHVyYWxU
ZWFtc19MYXJzb25DLnBkZikKK1szMyBzbGlkZXNdLgorCisjIyMgQ29kZSByZXZpZXdzIGFuZCBk
aXNjdXNzaW9ucyBhcmUgbm90IGNvbXBldGl0aW9ucworQ29kZSByZXZpZXdzIG9uIG91ciBtYWls
aW5nIGxpc3RzIGFyZSBub3QgY29tcGV0aXRpb25zIG9uIHdobyBjYW4gY29tZSB1cCB3aXRoIHRo
ZQorc21hcnRlc3Qgc29sdXRpb24gb3Igd2hvIGlzIHRoZSByZWFsIGNvZGluZyBnZW5pdXMuCisK
K0luIGEgY29kZSByZXZpZXcgLSBhcyB3ZWxsIGFzIGluIGdlbmVyYWwgLSB3ZSBleHBlY3QgdGhh
dCBhbGwgc3Rha2UtaG9sZGVycworKiBHcmFjZWZ1bGx5IGFjY2VwdCBjb25zdHJ1Y3RpdmUgY3Jp
dGljaXNtCisqIEZvY3VzIG9uIHdoYXQgaXMgYmVzdCBmb3IgdGhlIGNvbW11bml0eQorKiBSZXNv
bHZlIGRpZmZlcmVuY2VzIGluIG9waW5pb24gZWZmZWN0aXZlbHkKKworVGhlIG5leHQgc2VjdGlv
biBwcm92aWRlcyBwb2ludGVycyBvbiBob3cgdG8gZG8gdGhpcyBlZmZlY3RpdmVseS4KKworIyMj
IFJlc29sdmluZyBEaXNhZ3JlZW1lbnQgRWZmZWN0aXZlbHkKK0NvbW1vbiBzY2VuYXJpb3MgYXJl
IGNvdmVyZWQgb3VyIGd1aWRlIG9uCitbUmVzb2x2aW5nIERpc2FncmVlbWVudF0ocmVzb2x2aW5n
LWRpc2FncmVlbWVudC5tZCksIHdoaWNoIGxheXMgb3V0IHNpdHVhdGlvbnMgdGhhdAorY2FuIGxl
YWQgdG8gZGVhZC1sb2NrIGFuZCBzaG93cyBjb21tb24gcGF0dGVybnMgb24gaG93IHRvIGF2b2lk
IGFuZCByZXNvbHZlIGlzc3Vlcy4KLS0gCjIuMTMuMAoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd0-0001RZ-Qd; Fri, 27 Sep 2019 07:25:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OzHR=XV=xenproject.org=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDZcQ-0000l9-6M
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 19:40:02 +0000
X-Inumbo-ID: 5e9b17ba-e095-11e9-bf31-bc764e2007e4
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by localhost (Halon) with ESMTPS
 id 5e9b17ba-e095-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 19:39:35 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbw-0002GZ-Ex; Thu, 26 Sep 2019 19:39:32 +0000
Received: from localhost ([127.0.0.1] helo=MacBook-Pro-2.Home)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbw-0007uS-94; Thu, 26 Sep 2019 19:39:32 +0000
From: Lars Kurth <lars.kurth@xenproject.org>
To: xen-devel@lists.xenproject.org
Date: Thu, 26 Sep 2019 20:39:21 +0100
Message-Id: <117840fe5ad0eea191335c942b61ff8b23b4b01b.1569525222.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
MIME-Version: 1.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [PATCH v2 3/6] Add Communication Guide
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKVGhpcyBkb2N1bWVudCBp
cyBhIHBvcnRhbCBwYWdlIHRoYXQgbGF5cyBvdXQgb3VyIGdvbGQgc3RhbmRhcmQsCmJlc3QgcHJh
Y3RpY2VzIGZvciBzb21lIGNvbW1vbiBzaXR1YXRpb25zIGFuZCBtZWNoYW5pc21zIHRvIGhlbHAK
cmVzb2x2ZSBpc3N1ZXMgdGhhdCBjYW4gaGF2ZSBhIG5lZ2F0aXZlIGVmZmVjdCBvbiBvdXIgY29t
bXVuaXR5LgoKRGV0YWlsIGlzIGNvdmVyZWQgaW4gc3Vic2VxdWVudCBkb2N1bWVudHMKClNpZ25l
ZC1vZmYtYnk6IExhcnMgS3VydGggPGxhcnMua3VydGhAY2l0cml4LmNvbT4KLS0tCkNjOiBtaW5p
b3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IHhlbi1hcGlAbGlzdHMueGVucHJvamVj
dC5vcmcKQ2M6IHdpbi1wdi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogbWlyYWdlb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IGNvbW1pdHRlcnNAeGVucHJvamVjdC5vcmcK
LS0tCiBjb21tdW5pY2F0aW9uLWd1aWRlLm1kIHwgNjcgKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA2NyBpbnNlcnRpb25z
KCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgY29tbXVuaWNhdGlvbi1ndWlkZS5tZAoKZGlmZiAtLWdp
dCBhL2NvbW11bmljYXRpb24tZ3VpZGUubWQgYi9jb21tdW5pY2F0aW9uLWd1aWRlLm1kCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2Y0NDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9jb21tdW5pY2F0aW9uLWd1aWRlLm1kCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29tbXVuaWNhdGlv
biBHdWlkZQorCitXZSBiZWxpZXZlIHRoYXQgb3VyIFtDb2RlIG9mIENvbmR1Y3RdIChjb2RlLW9m
LWNvbmR1Y3QubWQpIGNhbiBoZWxwIGNyZWF0ZSBhCitoYXJhc3NtZW50LWZyZWUgZW52aXJvbm1l
bnQsIGJ1dCBpcyBub3Qgc3VmZmljaWVudCB0byBjcmVhdGUgYSB3ZWxjb21pbmcKK2Vudmlyb25t
ZW50IG9uIGl0cyBvd24uIFdlIGNhbiBhbGwgbWFrZSBtaXN0YWtlczogd2hlbiB3ZSBkbywgd2Ug
dGFrZQorcmVzcG9uc2liaWxpdHkgZm9yIHRoZW0gYW5kIHRyeSB0byBpbXByb3ZlLgorCitUaGlz
IGRvY3VtZW50IGxheXMgb3V0IG91ciBnb2xkIHN0YW5kYXJkLCBiZXN0IHByYWN0aWNlcyBmb3Ig
c29tZSBjb21tb24KK3NpdHVhdGlvbnMgYW5kIG1lY2hhbmlzbXMgdG8gaGVscCByZXNvbHZlIGlz
c3VlcyB0aGF0IGNhbiBoYXZlIGEKK25lZ2F0aXZlIGVmZmVjdCBvbiBvdXIgY29tbXVuaXR5Lgor
CisjIyBHb2FsCisKK1dlIHdhbnQgYSBwcm9kdWN0aXZlLCB3ZWxjb21pbmcgYW5kIGFnaWxlIGNv
bW11bml0eSB0aGF0IGNhbiB3ZWxjb21lIG5ldworaWRlYXMgaW4gYSBjb21wbGV4IHRlY2huaWNh
bCBmaWVsZCB3aGljaCBpcyBhYmxlIHRvIHJlZmxlY3Qgb24gYW5kIGltcHJvdmUgaG93IHdlCit3
b3JrLgorCisjIyBDb21tdW5pY2F0aW9uICYgSGFuZGxpbmcgRGlmZmVyZW5jZXMgaW4gT3Bpbmlv
bnMKKworRXhhbXBsZXMgb2YgYmVoYXZpb3IgdGhhdCBjb250cmlidXRlcyB0byBjcmVhdGluZyBh
IHBvc2l0aXZlIGVudmlyb25tZW50CitpbmNsdWRlOgorKiBVc2Ugd2VsY29taW5nIGFuZCBpbmNs
dXNpdmUgbGFuZ3VhZ2UKKyogS2VlcCBkaXNjdXNzaW9ucyB0ZWNobmljYWwgYW5kIGFjdGlvbmFi
bGUKKyogQmUgcmVzcGVjdGZ1bCBvZiBkaWZmZXJpbmcgdmlld3BvaW50cyBhbmQgZXhwZXJpZW5j
ZXMKKyogQmUgYXdhcmUgb2YgeW91ciBvd24gYW5kIGNvdW50ZXJwYXJ04oCZcyBjb21tdW5pY2F0
aW9uIHN0eWxlIGFuZCBjdWx0dXJlCisqIEdyYWNlZnVsbHkgYWNjZXB0IGNvbnN0cnVjdGl2ZSBj
cml0aWNpc20KKyogRm9jdXMgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5CisqIFNo
b3cgZW1wYXRoeSB0b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCisqIFJlc29sdmUgZGlm
ZmVyZW5jZXMgaW4gb3BpbmlvbiBlZmZlY3RpdmVseQorCisjIyBHZXR0aW5nIEhlbHAKKworV2hl
biBkZXZlbG9waW5nIGNvZGUgY29sbGFib3JhdGl2ZWx5LCB0ZWNobmljYWwgZGlzY3Vzc2lvbiBh
bmQgZGlzYWdyZWVtZW50cworYXJlIHVuYXZvaWRhYmxlLiBPdXIgY29udHJpYnV0b3JzIGNvbWUg
ZnJvbSBkaWZmZXJlbnQgY291bnRyaWVzIGFuZCBjdWx0dXJlcywKK2FyZSBkcml2ZW4gYnkgZGlm
ZmVyZW50IGdvYWxzIGFuZCB0YWtlIHByaWRlIGluIHRoZWlyIHdvcmsgYW5kIGluIHRoZWlyIHBv
aW50CitvZiB2aWV3LiBUaGlzIGludmFyaWFibHkgY2FuIGxlYWQgdG8gbGVuZ3RoeSBhbmQgdW5w
cm9kdWN0aXZlIGRlYmF0ZSwKK2ZvbGxvd2VkIGJ5IGluZGVjaXNpb24sIHNvbWV0aW1lcyB0aGlz
IGNhbiBpbXBhY3Qgd29ya2luZyByZWxhdGlvbnNoaXBzCitvciBsZWFkIHRvIG90aGVyIGlzc3Vl
cyB0aGF0IGNhbiBoYXZlIGEgbmVnYXRpdmUgZWZmZWN0IG9uIG91ciBjb21tdW5pdHkuCisKK1Rv
IG1pbmltaXplIHN1Y2ggaXNzdWUsIHdlIHByb3ZpZGUgYSAzLXN0YWdlIHByb2Nlc3MKKyogU2Vs
Zi1oZWxwIGFzIG91dGxpbmVkIGluIHRoaXMgZG9jdW1lbnQKKyogQWJpbGl0eSB0byBhc2sgZm9y
IGFuIGluZGVwZW5kZW50IG9waW5pb24gb3IgaGVscCBpbiBwcml2YXRlCisqIE1lZGlhdGlvbiBi
ZXR3ZWVuIHBhcnRpZXMgd2hpY2ggZGlzYWdyZWUuIEluIHRoaXMgY2FzZSBhIG5ldXRyYWwgY29t
bXVuaXR5CisgIG1lbWJlciBhc3Npc3RzIHRoZSBkaXNwdXRpbmcgcGFydGllcyByZXNvbHZlIHRo
ZSBpc3N1ZXMgb3Igd2lsbCB3b3JrIHdpdGggdGhlCisgIHBhcnRpZXMgc3VjaCB0aGF0IHRoZXkg
Y2FuIGltcHJvdmUgZnV0dXJlIGludGVyYWN0aW9ucy4KKworSWYgeW91IG5lZWQgYW5kIGluZGVw
ZW5kZW50IG9waW5pb24gb3IgaGVscCwgZmVlbCBmcmVlIHRvIGNvbnRhY3QKK21lZGlhdGlvbkB4
ZW5wcm9qZWN0Lm9yZy4gVGhlIHRlYW0gYmVoaW5kIG1lZGlhdGlvbkAgaXMgbWFkZSB1cCBvZiB0
aGUKK3NhbWUgY29tbXVuaXR5IG1lbWJlcnMgYXMgdGhvc2UgbGlzdGVkIGluIHRoZSBDb25kdWN0
IFRlYW06IHNlZQorW0NvZGUgb2YgQ29uZHVjdF0oY29kZS1vZi1jb25kdWN0Lm1kKS4gSW4gYWRk
aXRpb24sIHRlYW0gbWVtYmVycyBhcmUgb2JsaWdhdGVkCit0byBtYWludGFpbiBjb25maWRlbnRp
YWxpdHkgd2l0aCByZWdhcmQgZGlzY3Vzc2lvbnMgdGhhdCB0YWtlIHBsYWNlLiBJZiB5b3UKK2hh
dmUgY29uY2VybnMgYWJvdXQgYW55IG9mIHRoZSBtZW1iZXJzIG9mIHRoZSBtZWRpYXRpb25AIGFs
aWFzLCB5b3UgYXJlCit3ZWxjb21lIHRvIGNvbnRhY3QgcHJlY2lzZWx5IHRoZSB0ZWFtIG1lbWJl
cihzKSBvZiB5b3VyIGNob2ljZS4gSW4gdGhpcyBjYXNlLAorcGxlYXNlIG1ha2UgY2VydGFpbiB0
aGF0IHlvdSBoaWdobGlnaHQgdGhlIG5hdHVyZSBvZiBhIHJlcXVlc3QgYnkgbWFraW5nIHN1cmUg
dGhhdAorZWl0aGVyIGhlbHAgb3IgbWVkaWF0aW9uIGlzIG1lbnRpb25lZCBpbiB0aGUgZS1tYWls
IHN1YmplY3Qgb3IgYm9keS4KKworIyMgU3BlY2lmaWMgVG9waWNzIGFuZCBCZXN0IFByYWN0aWNl
CisKKyogW0NvZGUgUmV2aWV3IEd1aWRlXSAoY29kZS1yZXZpZXctZ3VpZGUubWQpOgorICBFc3Nl
bnRpYWwgcmVhZGluZyBmb3IgY29kZSByZXZpZXdlcnMgYW5kIGNvbnRyaWJ1dG9ycworKiBbQ29t
bXVuaWNhdGlvbiBCZXN0IFByYWN0aWNlXSAoY29tbXVuaWNhdGlvbi1wcmFjdGljZS5tZCk6Cisg
IFRoaXMgZ3VpZGUgY292ZXJzIGNvbW11bmljYXRpb24gZ3VpZGVsaW5lcyBmb3IgY29kZSByZXZp
ZXdlcnMgYW5kIHJldmlld2Vlcy4gSXQKKyAgc2hvdWxkIGhlbHAgeW91IGNyZWF0ZSBzZWxmLWF3
YXJlbmVzcywgYW50aWNpcGF0ZSwgYXZvaWQgIGFuZCBoZWxwIHJlc29sdmUKKyAgY29tbXVuaWNh
dGlvbiBpc3N1ZXMuCisqIFtSZXNvbHZpbmcgRGlzYWdyZWVtZW50XSAocmVzb2x2aW5nLWRpc2Fn
cmVlbWVudC5tZCk6CisgIFRoaXMgZ3VpZGUgbGF5cyBvdXQgY29tbW9uIHNpdHVhdGlvbnMgdGhh
dCBjYW4gbGVhZCB0byBkZWFkLWxvY2sgYW5kIHNob3dzIGNvbW1vbgorICBwYXR0ZXJucyBvbiBo
b3cgdG8gYXZvaWQgYW5kIHJlc29sdmUgaXNzdWVzLgotLSAKMi4xMy4wCgoKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcg
bGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5w
cm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd0-0001RT-Ot; Fri, 27 Sep 2019 07:25:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OzHR=XV=xenproject.org=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDZcB-0000hW-55
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 19:39:47 +0000
X-Inumbo-ID: 5df395ee-e095-11e9-97fb-bc764e2007e4
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by localhost (Halon) with ESMTPS
 id 5df395ee-e095-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 19:39:34 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbu-0002GK-FL; Thu, 26 Sep 2019 19:39:30 +0000
Received: from localhost ([127.0.0.1] helo=MacBook-Pro-2.Home)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbu-0007uS-6D; Thu, 26 Sep 2019 19:39:30 +0000
From: Lars Kurth <lars.kurth@xenproject.org>
To: xen-devel@lists.xenproject.org
Date: Thu, 26 Sep 2019 20:39:19 +0100
Message-Id: <00c6c80b12b1d201d7140626c7efe9d75645dee9.1569525222.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [PATCH v2 1/6] Import v1.4 of Contributor Covenant
 CoC
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKU2lnbmVkLW9mZi1ieTog
TGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgotLS0KQ2M6IG1pbmlvcy1kZXZlbEBs
aXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogeGVuLWFwaUBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzog
d2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBtaXJhZ2Vvcy1kZXZlbEBsaXN0
cy54ZW5wcm9qZWN0Lm9yZwpDYzogY29tbWl0dGVyc0B4ZW5wcm9qZWN0Lm9yZwotLS0KIGNvZGUt
b2YtY29uZHVjdC5tZCB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBjb2RlLW9mLWNvbmR1Y3QubWQKCmRpZmYgLS1naXQgYS9jb2RlLW9mLWNv
bmR1Y3QubWQgYi9jb2RlLW9mLWNvbmR1Y3QubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODFiMjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2NvZGUtb2YtY29uZHVjdC5tZApA
QCAtMCwwICsxLDc2IEBACisjIENvbnRyaWJ1dG9yIENvdmVuYW50IENvZGUgb2YgQ29uZHVjdAor
CisjIyBPdXIgUGxlZGdlCisKK0luIHRoZSBpbnRlcmVzdCBvZiBmb3N0ZXJpbmcgYW4gb3BlbiBh
bmQgd2VsY29taW5nIGVudmlyb25tZW50LCB3ZSBhcworY29udHJpYnV0b3JzIGFuZCBtYWludGFp
bmVycyBwbGVkZ2UgdG8gbWFrZSBwYXJ0aWNpcGF0aW9uIGluIG91ciBwcm9qZWN0IGFuZAorb3Vy
IGNvbW11bml0eSBhIGhhcmFzc21lbnQtZnJlZSBleHBlcmllbmNlIGZvciBldmVyeW9uZSwgcmVn
YXJkbGVzcyBvZiBhZ2UsIGJvZHkKK3NpemUsIGRpc2FiaWxpdHksIGV0aG5pY2l0eSwgc2V4IGNo
YXJhY3RlcmlzdGljcywgZ2VuZGVyIGlkZW50aXR5IGFuZCBleHByZXNzaW9uLAorbGV2ZWwgb2Yg
ZXhwZXJpZW5jZSwgZWR1Y2F0aW9uLCBzb2Npby1lY29ub21pYyBzdGF0dXMsIG5hdGlvbmFsaXR5
LCBwZXJzb25hbAorYXBwZWFyYW5jZSwgcmFjZSwgcmVsaWdpb24sIG9yIHNleHVhbCBpZGVudGl0
eSBhbmQgb3JpZW50YXRpb24uCisKKyMjIE91ciBTdGFuZGFyZHMKKworRXhhbXBsZXMgb2YgYmVo
YXZpb3IgdGhhdCBjb250cmlidXRlcyB0byBjcmVhdGluZyBhIHBvc2l0aXZlIGVudmlyb25tZW50
CitpbmNsdWRlOgorCisqIFVzaW5nIHdlbGNvbWluZyBhbmQgaW5jbHVzaXZlIGxhbmd1YWdlCisq
IEJlaW5nIHJlc3BlY3RmdWwgb2YgZGlmZmVyaW5nIHZpZXdwb2ludHMgYW5kIGV4cGVyaWVuY2Vz
CisqIEdyYWNlZnVsbHkgYWNjZXB0aW5nIGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KKyogRm9jdXNp
bmcgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5CisqIFNob3dpbmcgZW1wYXRoeSB0
b3dhcmRzIG90aGVyIGNvbW11bml0eSBtZW1iZXJzCisKK0V4YW1wbGVzIG9mIHVuYWNjZXB0YWJs
ZSBiZWhhdmlvciBieSBwYXJ0aWNpcGFudHMgaW5jbHVkZToKKworKiBUaGUgdXNlIG9mIHNleHVh
bGl6ZWQgbGFuZ3VhZ2Ugb3IgaW1hZ2VyeSBhbmQgdW53ZWxjb21lIHNleHVhbCBhdHRlbnRpb24g
b3IKKyAgYWR2YW5jZXMKKyogVHJvbGxpbmcsIGluc3VsdGluZy9kZXJvZ2F0b3J5IGNvbW1lbnRz
LCBhbmQgcGVyc29uYWwgb3IgcG9saXRpY2FsIGF0dGFja3MKKyogUHVibGljIG9yIHByaXZhdGUg
aGFyYXNzbWVudAorKiBQdWJsaXNoaW5nIG90aGVycycgcHJpdmF0ZSBpbmZvcm1hdGlvbiwgc3Vj
aCBhcyBhIHBoeXNpY2FsIG9yIGVsZWN0cm9uaWMKKyAgYWRkcmVzcywgd2l0aG91dCBleHBsaWNp
dCBwZXJtaXNzaW9uCisqIE90aGVyIGNvbmR1Y3Qgd2hpY2ggY291bGQgcmVhc29uYWJseSBiZSBj
b25zaWRlcmVkIGluYXBwcm9wcmlhdGUgaW4gYQorICBwcm9mZXNzaW9uYWwgc2V0dGluZworCisj
IyBPdXIgUmVzcG9uc2liaWxpdGllcworCitQcm9qZWN0IG1haW50YWluZXJzIGFyZSByZXNwb25z
aWJsZSBmb3IgY2xhcmlmeWluZyB0aGUgc3RhbmRhcmRzIG9mIGFjY2VwdGFibGUKK2JlaGF2aW9y
IGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFpciBjb3JyZWN0aXZl
IGFjdGlvbiBpbgorcmVzcG9uc2UgdG8gYW55IGluc3RhbmNlcyBvZiB1bmFjY2VwdGFibGUgYmVo
YXZpb3IuCisKK1Byb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNp
YmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwgb3IKK3JlamVjdCBjb21tZW50cywgY29tbWl0cywgY29k
ZSwgd2lraSBlZGl0cywgaXNzdWVzLCBhbmQgb3RoZXIgY29udHJpYnV0aW9ucwordGhhdCBhcmUg
bm90IGFsaWduZWQgdG8gdGhpcyBDb2RlIG9mIENvbmR1Y3QsIG9yIHRvIGJhbiB0ZW1wb3Jhcmls
eSBvcgorcGVybWFuZW50bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhh
dCB0aGV5IGRlZW0gaW5hcHByb3ByaWF0ZSwKK3RocmVhdGVuaW5nLCBvZmZlbnNpdmUsIG9yIGhh
cm1mdWwuCisKKyMjIFNjb3BlCisKK1RoaXMgQ29kZSBvZiBDb25kdWN0IGFwcGxpZXMgd2l0aGlu
IGFsbCBwcm9qZWN0IHNwYWNlcywgYW5kIGl0IGFsc28gYXBwbGllcyB3aGVuCithbiBpbmRpdmlk
dWFsIGlzIHJlcHJlc2VudGluZyB0aGUgcHJvamVjdCBvciBpdHMgY29tbXVuaXR5IGluIHB1Ymxp
YyBzcGFjZXMuCitFeGFtcGxlcyBvZiByZXByZXNlbnRpbmcgYSBwcm9qZWN0IG9yIGNvbW11bml0
eSBpbmNsdWRlIHVzaW5nIGFuIG9mZmljaWFsCitwcm9qZWN0IGUtbWFpbCBhZGRyZXNzLCBwb3N0
aW5nIHZpYSBhbiBvZmZpY2lhbCBzb2NpYWwgbWVkaWEgYWNjb3VudCwgb3IgYWN0aW5nCithcyBh
biBhcHBvaW50ZWQgcmVwcmVzZW50YXRpdmUgYXQgYW4gb25saW5lIG9yIG9mZmxpbmUgZXZlbnQu
IFJlcHJlc2VudGF0aW9uIG9mCithIHByb2plY3QgbWF5IGJlIGZ1cnRoZXIgZGVmaW5lZCBhbmQg
Y2xhcmlmaWVkIGJ5IHByb2plY3QgbWFpbnRhaW5lcnMuCisKKyMjIEVuZm9yY2VtZW50CisKK0lu
c3RhbmNlcyBvZiBhYnVzaXZlLCBoYXJhc3NpbmcsIG9yIG90aGVyd2lzZSB1bmFjY2VwdGFibGUg
YmVoYXZpb3IgbWF5IGJlCityZXBvcnRlZCBieSBjb250YWN0aW5nIHRoZSBwcm9qZWN0IHRlYW0g
YXQgW0lOU0VSVCBFTUFJTCBBRERSRVNTXS4gQWxsCitjb21wbGFpbnRzIHdpbGwgYmUgcmV2aWV3
ZWQgYW5kIGludmVzdGlnYXRlZCBhbmQgd2lsbCByZXN1bHQgaW4gYSByZXNwb25zZSB0aGF0Citp
cyBkZWVtZWQgbmVjZXNzYXJ5IGFuZCBhcHByb3ByaWF0ZSB0byB0aGUgY2lyY3Vtc3RhbmNlcy4g
VGhlIHByb2plY3QgdGVhbSBpcworb2JsaWdhdGVkIHRvIG1haW50YWluIGNvbmZpZGVudGlhbGl0
eSB3aXRoIHJlZ2FyZCB0byB0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQuCitGdXJ0aGVyIGRl
dGFpbHMgb2Ygc3BlY2lmaWMgZW5mb3JjZW1lbnQgcG9saWNpZXMgbWF5IGJlIHBvc3RlZCBzZXBh
cmF0ZWx5LgorCitQcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9sbG93IG9yIGVuZm9y
Y2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbiBnb29kCitmYWl0aCBtYXkgZmFjZSB0ZW1wb3Jhcnkg
b3IgcGVybWFuZW50IHJlcGVyY3Vzc2lvbnMgYXMgZGV0ZXJtaW5lZCBieSBvdGhlcgorbWVtYmVy
cyBvZiB0aGUgcHJvamVjdCdzIGxlYWRlcnNoaXAuCisKKyMjIEF0dHJpYnV0aW9uCisKK1RoaXMg
Q29kZSBvZiBDb25kdWN0IGlzIGFkYXB0ZWQgZnJvbSB0aGUgW0NvbnRyaWJ1dG9yIENvdmVuYW50
XVtob21lcGFnZV0sIHZlcnNpb24gMS40LAorYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3LmNvbnRy
aWJ1dG9yLWNvdmVuYW50Lm9yZy92ZXJzaW9uLzEvNC9jb2RlLW9mLWNvbmR1Y3QuaHRtbAorCitb
aG9tZXBhZ2VdOiBodHRwczovL3d3dy5jb250cmlidXRvci1jb3ZlbmFudC5vcmcKKworRm9yIGFu
c3dlcnMgdG8gY29tbW9uIHF1ZXN0aW9ucyBhYm91dCB0aGlzIGNvZGUgb2YgY29uZHVjdCwgc2Vl
CitodHRwczovL3d3dy5jb250cmlidXRvci1jb3ZlbmFudC5vcmcvZmFxCi0tIAoyLjEzLjAKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd0-0001Re-Sy; Fri, 27 Sep 2019 07:25:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OzHR=XV=xenproject.org=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDZcU-00017F-ME
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 19:40:06 +0000
X-Inumbo-ID: 624bdf52-e095-11e9-965e-12813bfff9fa
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by localhost (Halon) with ESMTPS
 id 624bdf52-e095-11e9-965e-12813bfff9fa;
 Thu, 26 Sep 2019 19:39:41 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbz-0002H2-GV; Thu, 26 Sep 2019 19:39:35 +0000
Received: from localhost ([127.0.0.1] helo=MacBook-Pro-2.Home)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbz-0007uS-Ac; Thu, 26 Sep 2019 19:39:35 +0000
From: Lars Kurth <lars.kurth@xenproject.org>
To: xen-devel@lists.xenproject.org
Date: Thu, 26 Sep 2019 20:39:24 +0100
Message-Id: <2e4b36afaa73277d246d7e84037db1532a136ec7.1569525222.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [PATCH v2 6/6] Added Resolving Disagreement
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKVGhpcyBndWlkZSBwcm92
aWRlcyBCZXN0IFByYWN0aWNlIG9uIGlkZW50aWZ5aW5nIGFuZCByZXNvbHZpbmcKY29tbW9uIGNs
YXNzZXMgb2YgZGlzYWdyZWVtZW50CgpTaWduZWQtb2ZmLWJ5OiBMYXJzIEt1cnRoIDxsYXJzLmt1
cnRoQGNpdHJpeC5jb20+Ci0tCkNjOiBtaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
Q2M6IHhlbi1hcGlAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6IHdpbi1wdi1kZXZlbEBsaXN0cy54
ZW5wcm9qZWN0Lm9yZwpDYzogbWlyYWdlb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKQ2M6
IGNvbW1pdHRlcnNAeGVucHJvamVjdC5vcmcKLS0tCiByZXNvbHZpbmctZGlzYWdyZWVtZW50Lm1k
IHwgMTQ2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEg
ZmlsZSBjaGFuZ2VkLCAxNDYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHJlc29s
dmluZy1kaXNhZ3JlZW1lbnQubWQKCmRpZmYgLS1naXQgYS9yZXNvbHZpbmctZGlzYWdyZWVtZW50
Lm1kIGIvcmVzb2x2aW5nLWRpc2FncmVlbWVudC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4xOWFlZGJlCi0tLSAvZGV2L251bGwKKysrIGIvcmVzb2x2aW5nLWRpc2FncmVl
bWVudC5tZApAQCAtMCwwICsxLDE0NiBAQAorIyBSZXNvbHZpbmcgRGlzYWdyZWVtZW50CisKK1Ro
aXMgZ3VpZGUgcHJvdmlkZXMgQmVzdCBQcmFjdGljZSBvbiByZXNvbHZpbmcgZGlzYWdyZWVtZW50
LCBzdWNoIGFzCisqIEdyYWNlZnVsbHkgYWNjZXB0IGNvbnN0cnVjdGl2ZSBjcml0aWNpc20KKyog
Rm9jdXMgb24gd2hhdCBpcyBiZXN0IGZvciB0aGUgY29tbXVuaXR5CisqIFJlc29sdmUgZGlmZmVy
ZW5jZXMgaW4gb3BpbmlvbiBlZmZlY3RpdmVseQorCisjIyBUaGVvcnk6IFBhdWwgR3JhaGFtJ3Mg
aGllcmFyY2h5IG9mIGRpc2FncmVlbWVudAorUGF1bCBHcmFoYW0gcHJvcG9zZWQgYSAqKmRpc2Fn
cmVlbWVudCBoaWVyYXJjaHkqKiBpbiBhIDIwMDggZXNzYXkgCisqKltIb3cgdG8gRGlzYWdyZWVd
KGh0dHA6Ly93d3cucGF1bGdyYWhhbS5jb20vZGlzYWdyZWUuaHRtbCkqKiwgcHV0dGluZyB0eXBl
cyBvZgorYXJndW1lbnRzIGludG8gYSBzZXZlbi1wb2ludCBoaWVyYXJjaHkgYW5kIG9ic2Vydmlu
ZyB0aGF0ICptb3ZpbmcgdXAgdGhlCitkaXNhZ3JlZW1lbnQgaGllcmFyY2h5IG1ha2VzIHBlb3Bs
ZSBsZXNzIG1lYW4sIGFuZCB3aWxsIG1ha2UgbW9zdCBvZiB0aGVtIGhhcHBpZXIqLgorR3JhaGFt
IGFsc28gc3VnZ2VzdGVkIHRoYXQgdGhlIGhpZXJhcmNoeSBjYW4gYmUgdGhvdWdodCBvZiBhcyBh
IHB5cmFtaWQsIGFzIHRoZSAKK2hpZ2hlc3QgZm9ybXMgb2YgZGlzYWdyZWVtZW50IGFyZSByYXJl
ci4KKworfCAhW0dyYWhhbSdzIEhpZXJhcmNoeSBvZiBEaXNhZ3JlZW1lbl0oaHR0cHM6Ly91cGxv
YWQud2lraW1lZGlhLm9yZy93aWtpcGVkaWEvY29tbW9ucy9hL2EzL0dyYWhhbSUyN3NfSGllcmFy
Y2h5X29mX0Rpc2FncmVlbWVudC1lbi5zdmcpIHwKK3wgKkEgcmVwcmVzZW50YXRpb24gb2YgR3Jh
aGFtJ3MgaGllcmFyY2h5IG9mIGRpc2FncmVlbWVudCBmcm9tIFtMb3VkYWNyaXNdKGh0dHA6Ly93
d3cuY3JlYXRlZGViYXRlLmNvbS91c2VyL3ZpZXdwcm9maWxlL0xvdWRhY3JpcykgbW9kaWZpZWQg
YnkgW1JvY2tldDAwMF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVXNlcjpSb2NrZXQw
MDApKiB8CisKK0luIHRoZSBjb250ZXh0IG9mIHRoZSBYZW4gUHJvamVjdCB3ZSBzdHJpdmUgdG8g
Kipvbmx5IHVzZSB0aGUgdG9wIGhhbGYqKiBvZiB0aGUgaGllcmFyY2h5LgorKipOYW1lLWNhbGxp
bmcqKiBhbmQgKipBZCBob21pbmVtKiogYXJndW1lbnRzIGFyZSBub3QgYWNjZXB0YWJsZSB3aXRo
aW4gdGhlIFhlbgorUHJvamVjdC4KKworIyMgSXNzdWU6IFNjb3BlIGNyZWVwCisKK09uZSB0aGlu
ZyB3aGljaCBvY2Nhc2lvbmFsbHkgaGFwcGVucyBkdXJpbmcgY29kZSByZXZpZXcgaXMgdGhhdCBh
IGNvZGUgcmV2aWV3ZXIKK2Fza3Mgb3IgYXBwZWFycyB0byBhc2sgdGhlIGF1dGhvciBvZiBwYXRj
aCB0byBpbXBsZW1lbnQgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5LgorCitUaGlzIGNvdWxkIHRh
a2UgZm9yIGV4YW1wbGUgdGhlIGZvcm0gb2YKKz4gRG8geW91IHRoaW5rIGl0IHdvdWxkIGJlIHVz
ZWZ1bCBmb3IgdGhlIGNvZGUgdG8gZG8gWFhYPyAKKz4gSSBjYW4gaW1hZ2luZSBhIHVzZXIgd2Fu
dGluZyB0byBkbyBZWVkgKGFuZCBYWFggd291bGQgZW5hYmxlIHRoaXMpCisKK1RoYXQgcG90ZW50
aWFsbHkgYWRkcyBhZGRpdGlvbmFsIHdvcmsgZm9yIHRoZSBjb2RlIGF1dGhvciwgd2hpY2ggdGhl
eSBtYXkgbm90IGhhdmUKK3RoZSB0aW1lIHRvIHBlcmZvcm0uIEl0IGlzIGdvb2QgcHJhY3RpY2Ug
Zm9yIGF1dGhvcnMgdG8gY29uc2lkZXIgc3VjaCBhIHJlcXVlc3QgaW4gdGVybXMgb2YKKyogVXNl
ZnVsbmVzcyB0byB0aGUgdXNlcgorKiBDb2RlIGNodXJuLCBjb21wbGV4aXR5IG9yIGltcGFjdCBv
biBvdGhlciBzeXN0ZW0gcHJvcGVydGllcworKiBFeHRyYSB0aW1lIHRvIGltcGxlbWVudCBhbmQg
cmVwb3J0IGJhY2sgdG8gdGhlIHJldmlld2VyCisKK0lmIHlvdSBiZWxpZXZlIHRoYXQgdGhlIGlt
cGFjdC9jb3N0IGlzIHRvbyBoaWdoLCByZXBvcnQgYmFjayB0byB0aGUgcmV2aWV3ZXIuIFRvIHJl
c29sdmUKK3RoaXMsIGl0IGlzIGFkdmlzYWJsZSB0bworKiBSZXBvcnQgeW91ciBmaW5kaW5ncwor
KiBBbmQgdGhlbiBjaGVjayB3aGV0aGVyIHRoaXMgd2FzIG1lcmVseSBhbiBpbnRlcmVzdGluZyBz
dWdnZXN0aW9uLCBvciBzb21ldGhpbmcgdGhlCityZXZpZXdlciBmZWVscyBtb3JlIHN0cm9uZ2x5
IGFib3V0CisKK0luIHRoZSBsYXR0ZXIgY2FzZSwgdGhlcmUgYXJlIHR5cGljYWxseSBzZXZlcmFs
IGNvbW1vbiBvdXRjb21lcworKiBUaGUgKiphdXRob3IgYW5kIHJldmlld2VyIGFncmVlKiogdGhh
dCB0aGUgc3VnZ2VzdGlvbiBzaG91bGQgYmUgaW1wbGVtZW50ZWQKKyogVGhlICoqYXV0aG9yIGFu
ZCByZXZpZXdlciBhZ3JlZSoqIHRoYXQgaXQgbWF5IG1ha2Ugc2Vuc2UgdG8gZGVmZXIgaW1wbGVt
ZW50YXRpb24KKyogVGhlICoqYXV0aG9yIGFuZCByZXZpZXdlciBhZ3JlZSoqIHRoYXQgaXQgbWFr
ZXMgbm8gc2Vuc2UgdG8gaW1wbGVtZW50IHRoZSBzdWdnZXN0aW9uCisKK1RoZSBhdXRob3Igb2Yg
YSBwYXRjaCB3b3VsZCB0eXBpY2FsbHkgc3VnZ2VzdCB0aGVpciBwcmVmZXJyZWQgb3V0Y29tZSwg
Zm9yIGV4YW1wbGUKKz4gSSBhbSBub3Qgc3VyZSBpdCBpcyB3b3J0aCB0byBpbXBsZW1lbnQgWFhY
Cis+IERvIHlvdSB0aGluayB0aGlzIGNvdWxkIGJlIGRvbmUgYXMgYSBzZXBhcmF0ZSBwYXRjaCBp
biBmdXR1cmU/CisKK0luIGNhc2VzLCB3aGVyZSBubyBhZ3JlZW1lbnQgY2FuIGJlIGZvdW5kLCB0
aGUgYmVzdCBhcHByb2FjaCB3b3VsZCBiZSB0byBnZXQgYW4KK2luZGVwZW5kZW50IG9waW5pb24g
ZnJvbSBhbm90aGVyIG1haW50YWluZXIgb3IgdGhlIHByb2plY3QncyBsZWFkZXJzaGlwIHRlYW0u
CisKKyMjIElzc3VlOiBbQmlrZXNoZWRkaW5nXShodHRwczovL2VuLndpa3Rpb25hcnkub3JnL3dp
a2kvYmlrZXNoZWRkaW5nKQorCitPY2Nhc2lvbmFsbHkgZGlzY3Vzc2lvbnMgYWJvdXQgdW5pbXBv
cnRhbnQgYnV0IGVhc3ktdG8tZ3Jhc3AgaXNzdWVzIGNhbiBsZWFkIHRvCitwcm9sb25nZWQgYW5k
IHVucHJvZHVjdGl2ZSBkaXNjdXNzaW9uLiBUaGUgYmVzdCB3YXkgdG8gYXBwcm9hY2ggdGhpcyBp
cyB0bwordHJ5IGFuZCAqKmFudGljaXBhdGUqKiBiaWtlc2hlZGRpbmcgYW5kIGhpZ2hsaWdodCBp
dCBhcyBzdWNoIHVwZnJvbnQuIEhvd2V2ZXIsIHRoZQorZm9ybWF0IG9mIGEgY29kZSByZXZpZXcg
ZG9lcyBub3QgYWx3YXlzIGxlbmQgaXRzZWxmIHdlbGwgdG8gdGhpcyBhcHByb2FjaCwgZXhjZXB0
Citmb3IgaGlnaGxpZ2h0aW5nIGl0IGluIHRoZSBjb3ZlciBsZXR0ZXIgb2YgYSBwYXRjaCBzZXJp
ZXMuCisKK0hvd2V2ZXIsIHR5cGljYWxseSBCaWtlc2hlZGRpbmcgaXNzdWVzIGFyZSBmYWlybHkg
ZWFzeSB0byByZWNvZ25pemUgaW4gYSBjb2RlIHJldmlldywKK2FzIHlvdSB3aWxsIHZlcnkgcXVp
Y2tseSBnZXQgZGlmZmVyZW50IHJldmlld2VycyBwcm92aWRpbmcgZGlmZmVyaW5nIG9waW5pb25z
LiBJbiB0aGlzIGNhc2UKK2l0IGlzIGJlc3QgZm9yIHRoZSBhdXRob3Igb3IgYSByZXZpZXdlciB0
byBjYWxsIG91dCB0aGUgcG90ZW50aWFsIGJpa2VzaGVkZGluZyBpc3N1ZSB1c2luZworc29tZXRo
aW5nIGxpa2UKKworPiBMb29rcyB3ZSBoYXZlIGEgYmlrZXNoZWRkaW5nIGlzc3VlIGhlcmUKKz4g
SSB0aGluayB3ZSBzaG91bGQgY2FsbCBhIHF1aWNrIHZvdGUgdG8gc2V0dGxlIHRoZSBpc3N1ZQor
CitPdXIgZ292ZXJuYW5jZSBwcm92aWRlcyB0aGUgbWVjaGFuaXNtcyBvZiBbaW5mb3JtYWwgdm90
ZXNdKGh0dHBzOi8veGVucHJvamVjdC5vcmcvZGV2ZWxvcGVycy9nb3Zlcm5hbmNlLyNpbmZvcm1h
bC12b3Rlcy1vci1zdXJ2ZXlzKSBvcgorW2xhenkgdm90aW5nXShodHRwczovL3hlbnByb2plY3Qu
b3JnL2RldmVsb3BlcnMvZ292ZXJuYW5jZS8jbGF6eWNvbnNlbnN1cykgd2hpY2ggbGVuZAordGhl
bXNlbHZlcyB3ZWxsIHRvIHJlc29sdmUgc3VjaCBpc3N1ZXMuCisKKyMjIElzc3VlOiBTbWFsbCBm
dW5jdGlvbmFsIGlzc3VlcworCitUaGUgbW9zdCBjb21tb24gYXJlYSBvZiBkaXNhZ3JlZW1lbnRz
IHdoaWNoIGhhcHBlbiBpbiBjb2RlIHJldmlld3MsIGFyZSBkaWZmZXJpbmcKK29waW5pb25zIG9u
IHdoZXRoZXIgc21hbGwgZnVuY3Rpb25hbCBpc3N1ZXMgaW4gYSBwYXRjaCBzZXJpZXMgaGF2ZSB0
byBiZSByZXNvbHZlZCBvcgorbm90IGJlZm9yZSB0aGUgY29kZSBpcyByZWFkeSB0byBiZSBzdWJt
aXR0ZWQuIFN1Y2ggZGlzYWdyZWVtZW50cyBhcmUgdHlwaWNhbGx5IGNhdXNlZAorYnkgZGlmZmVy
ZW50IGV4cGVjdGF0aW9ucyByZWxhdGVkIHRvIHRoZSBsZXZlbCBvZiBwZXJmZWN0aW9uIGEgcGF0
Y2ggc2VyaWVzIG5lZWRzIHRvIGZ1bGZpbAorYmVmb3JlIGl0IGNhbiBiZSBjb25zaWRlcmVkIHJl
YWR5IHRvIGJlIGNvbW1pdHRlZC4KKworVG8gZXhwbGFpbiB0aGlzIGJldHRlciwgSSBhbSBnb2lu
ZyB0byB1c2UgdGhlIGFuYWxvZ3kgb2Ygc29tZSBidWlsZGluZyB3b3JrIHRoYXQgaGFzCitiZWVu
IHBlcmZvcm1lZCBhdCB5b3VyIGhvdXNlLiBMZXQncyBzYXkgdGhhdCB5b3UgaGF2ZSBhIG5ldyBi
YXRocm9vbSBpbnN0YWxsZWQuCitCZWZvcmUgcGF5aW5nIHlvdXIgYnVpbGRlciB0aGUgbGFzdCBp
bnN0YWxtZW50LCB5b3UgcGVyZm9ybSBhbiBpbnNwZWN0aW9uIGFuZCB5b3UgZmluZAoraXNzdWVz
IHN1Y2ggYXMKKyogVGhlIHNlYWxzIGFyb3VuZCB0aGUgYmF0aHR1YiBhcmUgbm90IHBlcmZlY3Rs
eSBldmVudAorKiBXaGVuIHlvdSBvcGVuIHRoZSB0YXAsIHRoZSBwbHVtYmluZyBpbml0aWFsbHkg
bWFrZXMgc29tZSBsb3VkIG5vaXNlCisqIFRoZSBzaG93ZXIgbWl4ZXIgaGFzIGJlZW4gaW5zdGFs
bGVkIHRoZSB3cm9uZyB3YXkgYXJvdW5kCisKK0luIGFsbCB0aGVzZSBjYXNlcywgdGhlIGJhdGhy
b29tIGlzIHBlcmZlY3RseSBmdW5jdGlvbmFsLCBidXQgbm90IHBlcmZlY3QuIEF0IHRoaXMgcG9p
bnQKK3lvdSBoYXZlIHRoZSBjaG9pY2UgdG8gdHJ5IGFuZCBnZXQgYWxsIHRoZSBpc3N1ZXMgYWRk
cmVzc2VkLCB3aGljaCBpbiB0aGUgZXhhbXBsZSBvZgordGhlIHNob3dlciBtaXhlciBtYXkgcmVx
dWlyZSBzaWduaWZpY2FudCByZS13b3JrIGFuZCBwb3RlbnRpYWxseSBwdXNoLWJhY2sgZnJvbSB5
b3VyCitidWlsZGVyLiBZb3UgbWF5IGhhdmUgdG8gcmVmZXIgdG8gdGhlIGluaXRpYWwgc3RhdGVt
ZW50IG9mIHdvcmssIGJ1dCBpdCB0dXJucyBvdXQgaXQgZG9lcworbm90IGNvbnRhaW4gc3VmZmlj
aWVudCBpbmZvcm1hdGlvbiB0byBhc2NlcnRhaW4gd2hldGhlciB5b3VyIGJ1aWxkZXIgaGFkIGNv
bW1pdHRlZCB0bwordGhlIGxldmVsIG9mIHF1YWxpdHkgeW91IHdlcmUgZXhwZWN0aW5nLgorCitT
aW1pbGFyIHNpdHVhdGlvbnMgaGFwcGVuIGluIGNvZGUgcmV2aWV3cyB2ZXJ5IGZyZXF1ZW50bHkg
YW5kIGNhbiBsZWFkIHRvIGEgbG9uZworZGlzY3Vzc2lvbiBiZWZvcmUgaXQgY2FuIGJlIHJlc29s
dmVkLiBUaGUgbW9zdCBpbXBvcnRhbnQgdGhpbmcgaXMgdG8gKippZGVudGlmeSoqCithIGRpc2Fn
cmVlbWVudCBhcyBzdWNoIGVhcmx5IGFuZCB0aGVuIGNhbGwgaXQgb3V0LiBUaXBzIG9uIGhvdyB0
byBkbyB0aGlzLCBjYW4gYmUgZm91bmQKK1toZXJlXShjb21tdW5pY2F0aW9uLXByYWN0aWNlLm1k
I01pc3VuZGVyc3RhbmRpbmdzKS4KKworQXQgdGhpcyBwb2ludCwgeW91IHdpbGwgdW5kZXJzdGFu
ZCB3aHkgeW91IGhhdmUgdGhlIGRpc2FncmVlbWVudCwgYnV0IG5vdCBuZWNlc3NhcmlseQorYWdy
ZWVtZW50IG9uIGhvdyB0byBtb3ZlIGZvcndhcmQuIEFuIGVhc3kgZml4IHdvdWxkIGJlIHRvIGFn
cmVlIHRvIHN1Ym1pdCB0aGUgY2hhbmdlCithcyBpdCBpcyBhbmQgZml4IGl0IGluIGZ1dHVyZS4g
SW4gYSBjb3Jwb3JhdGUgc29mdHdhcmUgZW5naW5lZXJpbmcgZW52aXJvbm1lbnQgdGhpcyBpcyB0
aGUKK21vc3QgbGlrZWx5IG91dGNvbWUsIGJ1dCBpbiBvcGVuIHNvdXJjZSBjb21tdW5pdGllcyBh
ZGRpdGlvbmFsIGNvbmNlcm5zIGhhdmUgdG8gYmUKK2NvbnNpZGVyZWQuCisqIENvZGUgcmV2aWV3
ZXJzIGZyZXF1ZW50bHkgaGF2ZSBiZWVuIGluIHRoaXMgc2l0dWF0aW9uIGJlZm9yZSB3aXRoIHRo
ZSBtb3N0IGNvbW1vbgorICBvdXRjb21lIHRoYXQgdGhlIGlzc3VlIGlzIHRoZW4gbmV2ZXIgZml4
ZWQuIEJ5IGFjY2VwdGluZyB0aGUgY2hhbmdlLCB0aGUgcmV2aWV3ZXJzCisgIGhhdmUgbm8gbGV2
ZXJhZ2UgdG8gZml4IHRoZSBpc3N1ZSBhbmQgbWF5IGhhdmUgdG8gc3BlbmQgZWZmb3J0IGZpeGlu
ZyB0aGUgaXNzdWUKKyAgdGhlbXNlbHZlcyBpbiBmdXR1cmUgYXMgaXQgbWF5IGltcGFjdCB0aGUg
cHJvZHVjdCB0aGV5IGJ1aWx0IG9uIHRvcCBvZiB0aGUgY29kZS4KKyogQ29udmVyc2VseSwgYSBy
ZXZpZXdlciBtYXkgYmUgYXNraW5nIHRoZSBhdXRob3IgdG8gbWFrZSB0b28gbWFueSBjaGFuZ2Vz
IG9mIHRoaXMKKyAgdHlwZSB3aGljaCB1bHRpbWF0ZWx5IG1heSBsZWFkIHRoZSBhdXRob3IgdG8g
bm90IGNvbnRyaWJ1dGUgdG8gdGhlIHByb2plY3QgYWdhaW4uCisqIEFuIGF1dGhvciwgd2hpY2gg
Y29uc2lzdGVudGx5IGRvZXMgbm90IGFkZHJlc3MgKiphbnkqKiBvZiB0aGVzZSBpc3N1ZXMgbWF5
IGVuZCB1cAorICBnZXR0aW5nIGEgYmFkIHJlcHV0YXRpb24gYW5kIG1heSBmaW5kIGZ1dHVyZSBj
b2RlIHJldmlld3MgbW9yZSBkaWZmaWN1bHQuCisqIEFuIGF1dGhvciB3aGljaCBhbHdheXMgYWRk
cmVzc2VzICoqYWxsKiogb2YgdGhlc2UgaXNzdWVzIG1heSBlbmQgdXAgZ2V0dGluZyBpbnRvCisg
IGRpZmZpY3VsdGllcyB3aXRoIHRoZWlyIGVtcGxveWVyLCBhcyB0aGV5IGFyZSB0b28gc2xvdyBn
ZXR0aW5nIGNvZGUgdXBzdHJlYW1lZC4KKworTm9uZSBvZiB0aGVzZSBvdXRjb21lcyBhcmUgZ29v
ZCwgc28gdWx0aW1hdGVseSBhIGJhbGFuY2UgaGFzIGJlZW4gZm91bmQuIEF0IHRoZSBlbmQKK29m
IHRoZSBkYXksIHRoZSBzb2x1dGlvbiBzaG91bGQgZm9jdXMgb24gd2hhdCBpcyBiZXN0IGZvciB0
aGUgY29tbXVuaXR5LCB3aGljaCBtYXkKK21lYW4gYXNraW5nIGZvciBhbiBpbmRlcGVuZGVudCBv
cGluaW9uIGFzIG91dGxpbmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uCisKKyMjIFJlc29sdXRpb246
IEFza2luZyBmb3IgYW4gaW5kZXBlbmRlbnQgb3BpbmlvbgorCitNb3N0IGRpc2FncmVlbWVudHMg
Y2FuIGJlIHNldHRsZWQgYnkKKyogQXNraW5nIGFub3RoZXIgbWFpbnRhaW5lciBvciBjb21taXR0
ZXIgdG8gcHJvdmlkZSBhbiBpbmRlcGVuZGVudCBvcGluaW9uIG9uIHRoZQorICBzcGVjaWZpYyBp
c3N1ZSBpbiBwdWJsaWMgdG8gaGVscCByZXNvbHZlIGl0CisqIEZhaWxpbmcgdGhpcyBhbiBpc3N1
ZSBjYW4gYmUgZXNjYWxhdGVkIHRvIHRoZSBwcm9qZWN0IGxlYWRlcnNoaXAgdGVhbSwgd2hpY2gg
aXMKKyAgZXhwZWN0ZWQgdG8gYWN0IGFzIHJlZmVyZWUgYW5kIG1ha2UgYSBkZWNpc2lvbiBvbiBi
ZWhhbGYgb2YgdGhlIGNvbW11bml0eQorCitJZiB5b3UgZmVlbCB1bmNvbWZvcnRhYmxlIHdpdGgg
dGhpcyBhcHByb2FjaCwgeW91IG1heSBhbHNvIGNvbnRhY3QKK21lZGlhdGlvbkB4ZW5wcm9qZWN0
Lm9yZyB0byBnZXQgYWR2aWNlLiBTZWUgb3VyIFtDb21tdW5pY2F0aW9uIEd1aWRlXShjb21tdW5p
Y2F0aW9uLWd1aWRlLm1kKQorZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKyMjIERlY2lzaW9uIG1h
a2luZyBhbmQgY29uZmxpY3QgcmVzb2x1dGlvbiBpbiBvdXIgZ292ZXJuYW5jZQorCitPdXIgW2dv
dmVybmFuY2VdKGh0dHBzOi8veGVucHJvamVjdC5vcmcvZGV2ZWxvcGVycy9nb3Zlcm5hbmNlLyNk
ZWNpc2lvbnMpIGNvbnRhaW5zCitzZXZlcmFsIHByb3ZlbiBtZWNoYW5pc21zIHRvIGhlbHAgd2l0
aCBkZWNpc2lvbiBtYWtpbmcgYW5kIGNvbmZsaWN0IHJlc29sdXRpb24uCisKK1NlZQorKiBbRXhw
cmVzc2luZyBhZ3JlZW1lbnQgYW5kIGRpc2FncmVlbWVudF0oaHR0cHM6Ly94ZW5wcm9qZWN0Lm9y
Zy9kZXZlbG9wZXJzL2dvdmVybmFuY2UvI2V4cHJlc3NpbmdvcGluaW9uKQorKiBbTGF6eSBjb25z
ZW5zdXMgLyBMYXp5IHZvdGluZ10oaHR0cHM6Ly94ZW5wcm9qZWN0Lm9yZy9kZXZlbG9wZXJzL2dv
dmVybmFuY2UvI2xhenljb25zZW5zdXMpCisqIFtJbmZvcm1hbCB2b3RlcyBvciBzdXJ2ZXlzXSho
dHRwczovL3hlbnByb2plY3Qub3JnL2RldmVsb3BlcnMvZ292ZXJuYW5jZS8jaW5mb3JtYWwtdm90
ZXMtb3Itc3VydmV5cykKKyogW0xlYWRlcnNoaXAgdGVhbSBkZWNpc2lvbnNdKGh0dHBzOi8veGVu
cHJvamVjdC5vcmcvZGV2ZWxvcGVycy9nb3Zlcm5hbmNlLyNsZWFkZXJzaGlwKQorKiBbQ29uZmxp
Y3QgcmVzb2x1dGlvbl0oaHR0cHM6Ly94ZW5wcm9qZWN0Lm9yZy9kZXZlbG9wZXJzL2dvdmVybmFu
Y2UvI2NvbmZsaWN0KQotLSAKMi4xMy4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd0-0001Rk-VO; Fri, 27 Sep 2019 07:25:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OzHR=XV=xenproject.org=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDZd9-0001Q7-8v
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 19:40:47 +0000
X-Inumbo-ID: 5f5ca010-e095-11e9-bf31-bc764e2007e4
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by localhost (Halon) with ESMTPS
 id 5f5ca010-e095-11e9-bf31-bc764e2007e4;
 Thu, 26 Sep 2019 19:39:36 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbv-0002GQ-Go; Thu, 26 Sep 2019 19:39:31 +0000
Received: from localhost ([127.0.0.1] helo=MacBook-Pro-2.Home)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbv-0007uS-7i; Thu, 26 Sep 2019 19:39:31 +0000
From: Lars Kurth <lars.kurth@xenproject.org>
To: xen-devel@lists.xenproject.org
Date: Thu, 26 Sep 2019 20:39:20 +0100
Message-Id: <469326764ec7da37796adf429d61173207798816.1569525222.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
In-Reply-To: <cover.1569525222.git.lars.kurth@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [PATCH v2 2/6] Xen Project Code of Conduct
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKU3BlY2lmaWMgY2hhbmdl
cyB0byB0aGUgYmFzZWxpbmU6CiogUmVwbGFjZSBsaXN0IG9mIHBvc2l0aXZlIGJlaGF2aW9ycyB3
aXRoIGxpbmsgdG8gc2VwYXJhdGUgcHJvY2VzcwoqIFJlcGxhY2UgbWFpbnRhaW5lcnMgd2l0aCBw
cm9qZWN0IGxlYWRlcnNoaXAKICAoZXhjZXB0IGluIG91ciBwbGVkZ2Ugd2hlcmUgbWFpbnRhaW5l
cnMgaXMgbW9yZSBhcHByb3ByaWF0ZSkKKiBBZGQgJ29mIGFsbCBzdWItcHJvamVjdHMnIHRvIGNs
YXJpZnkgc2NvcGUgb2YgQ29DCiogUmVuYW1lIEVuZm9yY2VtZW50CiogUmVwbGFjZSAicHJvamVj
dCB0ZWFtIiB3aXRoICJDb25kdWN0IFRlYW0gbWVtYmVycyIKKiBBZGQgZS1tYWlsIGFsaWFzCiog
QWRkIHNlY3Rpb24gb24gY29udGFjdGluZyBpbmRpdmlkdWFsIENvbmR1Y3QgVGVhbSBtZW1iZXJz
CiogQWRkIHNlY3Rpb24gb24gQ29uZHVjdCBUZWFtIG1lbWJlcnMKClNpZ25lZC1vZmYtYnk6IExh
cnMgS3VydGggPGxhcnMua3VydGhAY2l0cml4LmNvbT4KLS0tCkNoYWdnZXMgc2luY2UgdjE6Ciog
QWRkcmVzc2VkIG5ld2xpbmUgY2hhbmdlcwoKQ2M6IG1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpDYzogeGVuLWFwaUBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogd2luLXB2LWRldmVs
QGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBtaXJhZ2Vvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpDYzogY29tbWl0dGVyc0B4ZW5wcm9qZWN0Lm9yZwotLS0KIGNvZGUtb2YtY29uZHVjdC5t
ZCB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMSBm
aWxlIGNoYW5nZWQsIDI4IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL2NvZGUtb2YtY29uZHVjdC5tZCBiL2NvZGUtb2YtY29uZHVjdC5tZAppbmRleCA4MWIyMTdj
Li41ZDZkMWQ1IDEwMDY0NAotLS0gYS9jb2RlLW9mLWNvbmR1Y3QubWQKKysrIGIvY29kZS1vZi1j
b25kdWN0Lm1kCkBAIC0xLDQgKzEsNCBAQAotIyBDb250cmlidXRvciBDb3ZlbmFudCBDb2RlIG9m
IENvbmR1Y3QKKyMgWGVuIFByb2plY3QgQ29kZSBvZiBDb25kdWN0CiAKICMjIE91ciBQbGVkZ2UK
IApAQCAtMTEsMTQgKzExLDEwIEBAIGFwcGVhcmFuY2UsIHJhY2UsIHJlbGlnaW9uLCBvciBzZXh1
YWwgaWRlbnRpdHkgYW5kIG9yaWVudGF0aW9uLgogCiAjIyBPdXIgU3RhbmRhcmRzCiAKLUV4YW1w
bGVzIG9mIGJlaGF2aW9yIHRoYXQgY29udHJpYnV0ZXMgdG8gY3JlYXRpbmcgYSBwb3NpdGl2ZSBl
bnZpcm9ubWVudAotaW5jbHVkZToKLQotKiBVc2luZyB3ZWxjb21pbmcgYW5kIGluY2x1c2l2ZSBs
YW5ndWFnZQotKiBCZWluZyByZXNwZWN0ZnVsIG9mIGRpZmZlcmluZyB2aWV3cG9pbnRzIGFuZCBl
eHBlcmllbmNlcwotKiBHcmFjZWZ1bGx5IGFjY2VwdGluZyBjb25zdHJ1Y3RpdmUgY3JpdGljaXNt
Ci0qIEZvY3VzaW5nIG9uIHdoYXQgaXMgYmVzdCBmb3IgdGhlIGNvbW11bml0eQotKiBTaG93aW5n
IGVtcGF0aHkgdG93YXJkcyBvdGhlciBjb21tdW5pdHkgbWVtYmVycworV2UgYmVsaWV2ZSB0aGF0
IGEgQ29kZSBvZiBDb25kdWN0IGNhbiBoZWxwIGNyZWF0ZSBhIGhhcmFzc21lbnQtZnJlZSBlbnZp
cm9ubWVudCwKK2J1dCBpcyBub3Qgc3VmZmljaWVudCB0byBjcmVhdGUgYSB3ZWxjb21pbmcgZW52
aXJvbm1lbnQgb24gaXRzIG93bjogZ3VpZGFuY2Ugb24KK2NyZWF0aW5nIGEgd2VsY29taW5nIGVu
dmlyb25tZW50LCBob3cgdG8gY29tbXVuaWNhdGUgaW4gYW4gZWZmZWN0aXZlIGFuZCBmcmllbmRs
eQord2F5LCBldGMuIGNhbiBiZSBmb3VuZCBbaGVyZV0oY29tbXVuaWNhdGlvbi1ndWlkZS5tZCku
CiAKIEV4YW1wbGVzIG9mIHVuYWNjZXB0YWJsZSBiZWhhdmlvciBieSBwYXJ0aWNpcGFudHMgaW5j
bHVkZToKIApAQCAtMzMsMTEgKzI5LDExIEBAIEV4YW1wbGVzIG9mIHVuYWNjZXB0YWJsZSBiZWhh
dmlvciBieSBwYXJ0aWNpcGFudHMgaW5jbHVkZToKIAogIyMgT3VyIFJlc3BvbnNpYmlsaXRpZXMK
IAotUHJvamVjdCBtYWludGFpbmVycyBhcmUgcmVzcG9uc2libGUgZm9yIGNsYXJpZnlpbmcgdGhl
IHN0YW5kYXJkcyBvZiBhY2NlcHRhYmxlCitQcm9qZWN0IGxlYWRlcnNoaXAgdGVhbSBtZW1iZXJz
IGFyZSByZXNwb25zaWJsZSBmb3IgY2xhcmlmeWluZyB0aGUgc3RhbmRhcmRzIG9mIGFjY2VwdGFi
bGUKIGJlaGF2aW9yIGFuZCBhcmUgZXhwZWN0ZWQgdG8gdGFrZSBhcHByb3ByaWF0ZSBhbmQgZmFp
ciBjb3JyZWN0aXZlIGFjdGlvbiBpbgogcmVzcG9uc2UgdG8gYW55IGluc3RhbmNlcyBvZiB1bmFj
Y2VwdGFibGUgYmVoYXZpb3IuCiAKLVByb2plY3QgbWFpbnRhaW5lcnMgaGF2ZSB0aGUgcmlnaHQg
YW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92ZSwgZWRpdCwgb3IKK1Byb2plY3QgbGVhZGVyc2hp
cCB0ZWFtIG1lbWJlcnMgaGF2ZSB0aGUgcmlnaHQgYW5kIHJlc3BvbnNpYmlsaXR5IHRvIHJlbW92
ZSwgZWRpdCwgb3IKIHJlamVjdCBjb21tZW50cywgY29tbWl0cywgY29kZSwgd2lraSBlZGl0cywg
aXNzdWVzLCBhbmQgb3RoZXIgY29udHJpYnV0aW9ucwogdGhhdCBhcmUgbm90IGFsaWduZWQgdG8g
dGhpcyBDb2RlIG9mIENvbmR1Y3QsIG9yIHRvIGJhbiB0ZW1wb3JhcmlseSBvcgogcGVybWFuZW50
bHkgYW55IGNvbnRyaWJ1dG9yIGZvciBvdGhlciBiZWhhdmlvcnMgdGhhdCB0aGV5IGRlZW0gaW5h
cHByb3ByaWF0ZSwKQEAgLTQ1LDI2ICs0MSw0MSBAQCB0aHJlYXRlbmluZywgb2ZmZW5zaXZlLCBv
ciBoYXJtZnVsLgogCiAjIyBTY29wZQogCi1UaGlzIENvZGUgb2YgQ29uZHVjdCBhcHBsaWVzIHdp
dGhpbiBhbGwgcHJvamVjdCBzcGFjZXMsIGFuZCBpdCBhbHNvIGFwcGxpZXMgd2hlbgorVGhpcyBD
b2RlIG9mIENvbmR1Y3QgYXBwbGllcyB3aXRoaW4gYWxsIHByb2plY3Qgc3BhY2VzIG9mIGFsbCBz
dWItcHJvamVjdHMsIGFuZCBpdCBhbHNvIGFwcGxpZXMgd2hlbgogYW4gaW5kaXZpZHVhbCBpcyBy
ZXByZXNlbnRpbmcgdGhlIHByb2plY3Qgb3IgaXRzIGNvbW11bml0eSBpbiBwdWJsaWMgc3BhY2Vz
LgogRXhhbXBsZXMgb2YgcmVwcmVzZW50aW5nIGEgcHJvamVjdCBvciBjb21tdW5pdHkgaW5jbHVk
ZSB1c2luZyBhbiBvZmZpY2lhbAogcHJvamVjdCBlLW1haWwgYWRkcmVzcywgcG9zdGluZyB2aWEg
YW4gb2ZmaWNpYWwgc29jaWFsIG1lZGlhIGFjY291bnQsIG9yIGFjdGluZwogYXMgYW4gYXBwb2lu
dGVkIHJlcHJlc2VudGF0aXZlIGF0IGFuIG9ubGluZSBvciBvZmZsaW5lIGV2ZW50LiBSZXByZXNl
bnRhdGlvbiBvZgotYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmluZWQgYW5kIGNsYXJpZmll
ZCBieSBwcm9qZWN0IG1haW50YWluZXJzLgorYSBwcm9qZWN0IG1heSBiZSBmdXJ0aGVyIGRlZmlu
ZWQgYW5kIGNsYXJpZmllZCBieSB0aGUgcHJvamVjdCBsZWFkZXJzaGlwLgogCi0jIyBFbmZvcmNl
bWVudAorIyMgV2hhdCB0byBkbyBpZiB5b3Ugd2l0bmVzcyBvciBhcmUgc3ViamVjdCB0byB1bmFj
Y2VwdGFibGUgYmVoYXZpb3IKIAogSW5zdGFuY2VzIG9mIGFidXNpdmUsIGhhcmFzc2luZywgb3Ig
b3RoZXJ3aXNlIHVuYWNjZXB0YWJsZSBiZWhhdmlvciBtYXkgYmUKLXJlcG9ydGVkIGJ5IGNvbnRh
Y3RpbmcgdGhlIHByb2plY3QgdGVhbSBhdCBbSU5TRVJUIEVNQUlMIEFERFJFU1NdLiBBbGwKK3Jl
cG9ydGVkIGJ5IGNvbnRhY3RpbmcgQ29uZHVjdCBUZWFtIG1lbWJlcnMgYXQgY29uZHVjdEB4ZW5w
cm9qZWN0Lm9yZy4gQWxsCiBjb21wbGFpbnRzIHdpbGwgYmUgcmV2aWV3ZWQgYW5kIGludmVzdGln
YXRlZCBhbmQgd2lsbCByZXN1bHQgaW4gYSByZXNwb25zZSB0aGF0Ci1pcyBkZWVtZWQgbmVjZXNz
YXJ5IGFuZCBhcHByb3ByaWF0ZSB0byB0aGUgY2lyY3Vtc3RhbmNlcy4gVGhlIHByb2plY3QgdGVh
bSBpcworaXMgZGVlbWVkIG5lY2Vzc2FyeSBhbmQgYXBwcm9wcmlhdGUgdG8gdGhlIGNpcmN1bXN0
YW5jZXMuIENvbmR1Y3QgVGVhbSBtZW1iZXJzIGFyZQogb2JsaWdhdGVkIHRvIG1haW50YWluIGNv
bmZpZGVudGlhbGl0eSB3aXRoIHJlZ2FyZCB0byB0aGUgcmVwb3J0ZXIgb2YgYW4gaW5jaWRlbnQu
CiBGdXJ0aGVyIGRldGFpbHMgb2Ygc3BlY2lmaWMgZW5mb3JjZW1lbnQgcG9saWNpZXMgbWF5IGJl
IHBvc3RlZCBzZXBhcmF0ZWx5LgogCi1Qcm9qZWN0IG1haW50YWluZXJzIHdobyBkbyBub3QgZm9s
bG93IG9yIGVuZm9yY2UgdGhlIENvZGUgb2YgQ29uZHVjdCBpbiBnb29kCitJZiB5b3UgaGF2ZSBj
b25jZXJucyBhYm91dCBhbnkgb2YgdGhlIG1lbWJlcnMgb2YgdGhlIGNvbmR1Y3RAIGFsaWFzLAor
eW91IGFyZSB3ZWxjb21lIHRvIGNvbnRhY3QgcHJlY2lzZWx5IHRoZSBDb25kdWN0IFRlYW0gbWVt
YmVyKHMpIG9mCit5b3VyIGNob2ljZS4KKworUHJvamVjdCBsZWFkZXJzaGlwIHRlYW0gbWVtYmVy
cyB3aG8gZG8gbm90IGZvbGxvdyBvciBlbmZvcmNlIHRoZSBDb2RlIG9mIENvbmR1Y3QgaW4gZ29v
ZAogZmFpdGggbWF5IGZhY2UgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudCByZXBlcmN1c3Npb25zIGFz
IGRldGVybWluZWQgYnkgb3RoZXIKIG1lbWJlcnMgb2YgdGhlIHByb2plY3QncyBsZWFkZXJzaGlw
LgogCisjIyBDb25kdWN0IFRlYW0gbWVtYmVycworQ29uZHVjdCBUZWFtIG1lbWJlcnMgYXJlIHBy
b2plY3QgbGVhZGVyc2hpcCB0ZWFtIG1lbWJlcnMgZnJvbSBhbnkKK3N1Yi1wcm9qZWN0LiBUaGUg
Y3VycmVudCBsaXN0IG9mIENvbmR1Y3QgVGVhbSBtZW1iZXJzIGlzOgorKiBMYXJzIEt1cnRoIDxs
YXJzIGRvdCBrdXJ0aCBhdCB4ZW5wcm9qZWN0IGRvdCBvcmc+CisqIEdlb3JnZSBEdW5sYXAgPGdl
b3JnZSBkb3QgZHVubGFwIGF0IGNpdHJpeCBkb3QgY29tPgorKiBJYW4gSmFja3NvbiA8aWFuIGRv
dCBqYWNrc29uIGF0IGNpdHJpeCBkb3QgY29tPgorCitDb25kdWN0IFRlYW0gbWVtYmVycyBhcmUg
Y2hhbmdlZCBieSBwcm9wb3NpbmcgYSBjaGFuZ2UgdG8gdGhpcyBkb2N1bWVudCwKK3Bvc3RlZCBv
biBhbGwgc3ViLXByb2plY3QgbGlzdHMsIGZvbGxvd2VkIGJ5IGEgZm9ybWFsIGdsb2JhbCB2b3Rl
IGFzIG91dGxpbmVkCitbaGVyZV06IGh0dHBzOi8veGVucHJvamVjdC5vcmcvZGV2ZWxvcGVycy9n
b3Zlcm5hbmNlLyNwcm9qZWN0LWRlY2lzaW9ucworCiAjIyBBdHRyaWJ1dGlvbgogCiBUaGlzIENv
ZGUgb2YgQ29uZHVjdCBpcyBhZGFwdGVkIGZyb20gdGhlIFtDb250cmlidXRvciBDb3ZlbmFudF1b
aG9tZXBhZ2VdLCB2ZXJzaW9uIDEuNCwKLS0gCjIuMTMuMAoKCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWlu
aW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5v
cmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd0-0001RO-NF; Fri, 27 Sep 2019 07:25:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=OzHR=XV=xenproject.org=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDZc5-0000gi-LF
 for minios-devel@lists.xenproject.org; Thu, 26 Sep 2019 19:39:41 +0000
X-Inumbo-ID: 5d97f6bc-e095-11e9-965e-12813bfff9fa
Received: from mail.xenproject.org (unknown [104.130.215.37])
 by localhost (Halon) with ESMTPS
 id 5d97f6bc-e095-11e9-965e-12813bfff9fa;
 Thu, 26 Sep 2019 19:39:34 +0000 (UTC)
Received: from xenbits.xenproject.org ([104.239.192.120])
 by mail.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbt-0002GG-Dz; Thu, 26 Sep 2019 19:39:29 +0000
Received: from localhost ([127.0.0.1] helo=MacBook-Pro-2.Home)
 by xenbits.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <lars.kurth@xenproject.org>)
 id 1iDZbt-0007uS-4v; Thu, 26 Sep 2019 19:39:29 +0000
From: Lars Kurth <lars.kurth@xenproject.org>
To: xen-devel@lists.xenproject.org
Date: Thu, 26 Sep 2019 20:39:18 +0100
Message-Id: <cover.1569525222.git.lars.kurth@citrix.com>
X-Mailer: git-send-email 2.13.0
MIME-Version: 1.0
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [PATCH v2 0/6] Code of Conduct + Extra Guides and
 Best Practices
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogTGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgoKVGhpcyBzZXJpZXMgcHJv
cG9zZXMgYSBjb25jcmV0ZSB2ZXJzaW9uIG9mIHRoZSBYZW4gUHJvamVjdApDb0MgYmFzZWQgb24g
djEuNCBvZiB0aGUgQ29udHJpYnV0b3IgQ292ZW5hbnQuIFNlZSBbMV0KCkl0IGNvbnRhaW5zICpB
TEwqIHRoZSBwb3J0aW9ucyBJIHdhcyBzdGlsbCBnb2luZyB0byBhZGQuCkkgc3BlbnQgYSBiaXQg
b2YgdGltZSBvbiB3b3JkLXNtaXRoaW5nLCBidXQgSSBhbSBub3QgYSBuYXRpdmUgRW5nbGlzaCBz
cGVha2VyClNvIHRoZXJlIGlzIHByb2JhYmx5IHRpbWUgZm9yIGltcHJvdmVtZW50CgpUaGUgc2Vy
aWVzIGFsc28gcmVmbGVjdHMgdGhlIGRpc2N1c3Npb24gaW4gWzJdIGFuZCBzb21lIHByaXZhdGUK
ZGlzY3Vzc2lvbnMgb24gSVJDIHRvIGlkZW50aWZ5IGluaXRpYWwgbWVtYmVycyBvZiB0aGUgWGVu
ClByb2plY3TigJlzIENvQyB0ZWFtLgoKRm9yIGNvbnZlbmllbmNlIG9mIHJldmlldyBhbmQgaW4g
bGluZSB3aXRoIG90aGVyIHBvbGljeSBkb2N1bWVudHMKSSBjcmVhdGVkIGEgZ2l0IHJlcG9zaXRv
cnkgYXQgWzNdLiBUaGlzIHNlcmllcyBjYW4gYmUgZm91bmQgYXQgWzVdLgoKWzFdIGh0dHBzOi8v
d3d3LmNvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZy92ZXJzaW9uLzEvNC9jb2RlLW9mLWNvbmR1Y3Qu
bWQKWzJdIGh0dHBzOi8veGVuLm1hcmttYWlsLm9yZy90aHJlYWQvNTZhbzJneWhwbHRxbXJldyAK
WzNdIGh0dHA6Ly94ZW5iaXRzLnhlbi5vcmcvZ2l0d2ViLz9wPXBlb3BsZS9sYXJzay9jb2RlLW9m
LWNvbmR1Y3QuZ2l0O2E9c3VtbWFyeQpbNF0gaHR0cHM6Ly93d3cuc2xpZGVzaGFyZS5uZXQveGVu
X2NvbV9tZ3IveHBkZHMxOS1rZXlub3RlLXBhdGNoLXJldmlldy1mb3Itbm9ubWFpbnRhaW5lcnMt
Z2VvcmdlLWR1bmxhcC1jaXRyaXgtc3lzdGVtcy11ay1sdGQKWzVdIGh0dHA6Ly94ZW5iaXRzLnhl
bi5vcmcvZ2l0d2ViLz9wPXBlb3BsZS9sYXJzay9jb2RlLW9mLWNvbmR1Y3QuZ2l0O2E9c2hvcnRs
b2c7aD1yZWZzL2hlYWRzL0NvQy12MgoKQ2hhbmdlcyBzaW5jZSB2MQoqIENvZGUgb2YgQ29uZHVj
dCAKICBPbmx5IHdoaXRlc3BhY2UgY2hhbmdlcwoKKiBBZGRlZCBDb21tdW5pY2F0aW9uIEd1aWRl
CiAgQ29udGFpbnMgdmFsdWVzIGFuZCBhIHByb2Nlc3MgYmFzZWQgb24gYWR2aWNlIGFuZCBtZWRp
YXRpb24gaW4gY2FzZSBvZiBpc3N1ZXMKICBUaGlzIGlzIHRoZSBwcmltYXJ5IHBvcnRhbCBmb3Ig
CgoqIEFkZGVkIENvZGUgUmV2aWV3IEd1aWRlCiAgV2hpY2ggaXMgYmFzZWQgb24gWzRdIHdpdGgg
c29tZSBhZGRpdGlvbnMgZm9yIGNvbXBsZXRlbmVzcwogIEl0IHByaW1hcmlseSBzZXRzIGV4cGVj
dGF0aW9ucyBhbmQgYW55dGhpbmcgY29tbXVuaWNhdGlvbiByZWxhdGVkIGlzIHJlbW92ZWQKCiog
QWRkZWQgZ3VpZGUgb24gQ29tbXVuaWNhdGlvbiBCZXN0IFByYWN0aWNlCiAgVGFrZXMgdGhlIGNv
bW11bmljYXRpb24gc2VjdGlvbiBmcm9tIFs0XSBhbmQgZXhwYW5kcyBvbiBpdCB3aXRoIG1vcmUg
ZXhhbXBsZXMKICBhbmQgY2FzZXMuIFRoaXMgaXMgcHJvYmFibHkgd2hlcmUgd2UgbWF5IG5lZWQg
c29tZSBkaXNjdXNzaW9uCgoqIEFkZGVkIGRvY3VtZW50IG9uIFJlc29sdmluZyBEaXNhZ3JlZW1l
bnQKICBBIHRpbnkgYml0IG9mIHRoZW9yeSB0byBzZXQgdGhlIHNjZW5lCiAgSXQgY292ZXJzIHNv
bWUgY29tbW9uIGNhc2VzIG9mIGRpc2FncmVlbWVudHMgYW5kIGhvdyB3ZSBtYXkgYXBwcm9hY2gg
dGhlbQogIEFnYWluLCB0aGlzIHByb2JhYmx5IG5lZWRzIHNvbWUgZGlzY3Vzc2lvbgoKQ2M6IG1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogeGVuLWFwaUBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpDYzogd2luLXB2LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCkNjOiBtaXJhZ2Vv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpDYzogY29tbWl0dGVyc0B4ZW5wcm9qZWN0Lm9y
ZwoKTGFycyBLdXJ0aCAoNik6CiAgSW1wb3J0IHYxLjQgb2YgQ29udHJpYnV0b3IgQ292ZW5hbnQg
Q29DCiAgWGVuIFByb2plY3QgQ29kZSBvZiBDb25kdWN0CiAgQWRkIENvbW11bmljYXRpb24gR3Vp
ZGUKICBBZGQgQ29kZSBSZXZpZXcgR3VpZGUKICBBZGQgZ3VpZGUgb24gQ29tbXVuaWNhdGlvbiBC
ZXN0IFByYWN0aWNlCiAgQWRkZWQgUmVzb2x2aW5nIERpc2FncmVlbWVudAoKLS0gCjIuMTMuMAoK
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1k
ZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBz
Oi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:25:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:25:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDkd0-0001RH-Gu; Fri, 27 Sep 2019 07:25:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=BX7s=XV=neclab.eu=charalampos.mainas@srs-us1.protection.inumbo.net>)
 id 1iDVlP-0000aL-Tz
 for minios-devel@lists.xen.org; Thu, 26 Sep 2019 15:33:04 +0000
X-Inumbo-ID: ed48e6f4-e072-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id ed48e6f4-e072-11e9-97fb-bc764e2007e4;
 Thu, 26 Sep 2019 15:33:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id E0C36F2025;
 Thu, 26 Sep 2019 17:33:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id QnG1bFpLcOUu; Thu, 26 Sep 2019 17:33:00 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id AB904F2004;
 Thu, 26 Sep 2019 17:32:56 +0200 (CEST)
Received: from N-1120.office.hd (192.168.24.96) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Thu, 26 Sep
 2019 17:32:35 +0200
From: Charalampos Mainas <Charalampos.Mainas@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Thu, 26 Sep 2019 17:31:30 +0200
Message-ID: <20190926153136.29689-4-Charalampos.Mainas@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To titania.office.hd
 (192.168.24.89)
X-Mailman-Approved-At: Fri, 27 Sep 2019 07:25:21 +0000
Subject: [Minios-devel] [UNIKRAFT/LIBGO PATCH 03/11] Add rules for building
 runtime Go packages
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: felipe.huici@neclab.eu, costin.lupu@cs.pub.ro
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

RnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KClRoZSBwYWNrYWdlcy51
ayBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgY2FwdHVyaW5nIHRoZSBidWlsZGluZyBjb21tYW5kcyBm
cm9tIHRoZQpvdXRwdXQgb2YgdGhlIG9yaWdpbmFsIGxpYmdvIGJ1aWxkLiBUaGlzIHBhdGNoIGFs
c28gYWRkcyB0aGUgZ2VuZXJhdGVkIC5nbwpmaWxlcyBuZWVkZWQgZm9yIHRoZSBidWlsZCBvZiBw
YWNrYWdlcy4KClNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIu
cm8+Ci0tLQogTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICB8ICAgIDYgKwogZ2VuZXJhdGVk
L2Vwb2xsLmdvICAgICAgICAgICB8ICAgIDYgKwogZ2VuZXJhdGVkL2xpYmNhbGxzLmdvICAgICAg
ICB8IDM0ODAgKysrKysrKysrKysrKwogZ2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbyB8IDYy
MTkgKysrKysrKysrKysrKysrKysrKysrKysKIGdlbmVyYXRlZC9zaWd0YWIuZ28gICAgICAgICAg
fCAgIDcxICsKIGdlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28gICAgfCAgICAzICsKIGdlbmVyYXRl
ZC9zeXNpbmZvLmdvICAgICAgICAgfCA5MjgyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysKIGdlbmVyYXRlZC92ZXJzaW9uLmdvICAgICAgICAgfCAgIDc3ICsKIHBhY2thZ2VzLnVr
ICAgICAgICAgICAgICAgICAgfCAgOTgxICsrKysKIDkgZmlsZXMgY2hhbmdlZCwgMjAxMjUgaW5z
ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9lcG9sbC5nbwogY3JlYXRl
IG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9saWJjYWxscy5nbwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdl
bmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28KIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZW5lcmF0ZWQv
c2lndGFiLmdvCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2VuZXJhdGVkL3N5c2NhbGxfYXJjaC5nbwog
Y3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9zeXNpbmZvLmdvCiBjcmVhdGUgbW9kZSAxMDA2
NDQgZ2VuZXJhdGVkL3ZlcnNpb24uZ28KIGNyZWF0ZSBtb2RlIDEwMDY0NCBwYWNrYWdlcy51awoK
ZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggNDJlZWZiMS4uZjIw
OTU5OCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUudWsKKysrIGIvTWFrZWZpbGUudWsKQEAgLTE2Myw1
ICsxNjMsMTEgQEAgVUtfUFJFUEFSRSArPSAkKExJQkdPX0JVSUxEKS9nb2MyYyAkKExJQkdPX0VY
VFJBQ1RFRCkvbWFsbG9jLmMKIAogIyBHbyBwYWNrYWdlcwogTElCR09fR09GTEFHUy15ICs9IC1t
aW5saW5lLWFsbC1zdHJpbmdvcHMgLWZuby1zcGxpdC1zdGFjaworTElCR09fR09GTEFHUy0kKENP
TkZJR19ERUJVR19TWU1CT0xTX0xWTDApICs9IC1nMAorTElCR09fR09GTEFHUy0kKENPTkZJR19E
RUJVR19TWU1CT0xTX0xWTDEpICs9IC1nMQorTElCR09fR09GTEFHUy0kKENPTkZJR19ERUJVR19T
WU1CT0xTX0xWTDIpICs9IC1nMgorTElCR09fR09GTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xT
X0xWTDMpICs9IC1nMwogTElCR09fR09GTEFHUy15ICs9IC1JJChMSUJHT19CVUlMRCkKIExJQkdP
X0dPRkxBR1MgPSAkKExJQkdPX0dPRkxBR1MteSkKKworaW5jbHVkZSAkKExJQkdPX0JBU0UpL3Bh
Y2thZ2VzLnVrCmRpZmYgLS1naXQgYS9nZW5lcmF0ZWQvZXBvbGwuZ28gYi9nZW5lcmF0ZWQvZXBv
bGwuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcxM2RlOAotLS0gL2Rl
di9udWxsCisrKyBiL2dlbmVyYXRlZC9lcG9sbC5nbwpAQCAtMCwwICsxLDYgQEAKK3BhY2thZ2Ug
c3lzY2FsbAordHlwZSBFcG9sbEV2ZW50IHN0cnVjdCB7CisJRXZlbnRzIHVpbnQzMgorCUZkIGlu
dDMyCisJUGFkIFs0XWJ5dGUKK30KZGlmZiAtLWdpdCBhL2dlbmVyYXRlZC9saWJjYWxscy5nbyBi
L2dlbmVyYXRlZC9saWJjYWxscy5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41NTY1NjQxCi0tLSAvZGV2L251bGwKKysrIGIvZ2VuZXJhdGVkL2xpYmNhbGxzLmdvCkBAIC0w
LDAgKzEsMzQ4MCBAQAorLy8gVGhpcyBmaWxlIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBi
eSBta3N5c2NhbGwuYXdrCisKK3BhY2thZ2Ugc3lzY2FsbAorCitpbXBvcnQgInVuc2FmZSIKKwor
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Igc3RyZXJyb3Jfci9zdHJlcnJv
cl9yCisvL2V4dGVybiBzdHJlcnJvcl9yCitmdW5jIGNfc3RyZXJyb3JfcihlcnJudW0gX0NfaW50
LCBiICpieXRlLCBsZW4gU2l6ZV90KSAqYnl0ZQorZnVuYyBzdHJlcnJvcl9yKGVycm51bSBpbnQs
IGIgW11ieXRlKSAoZXJyc3RyICpieXRlKSB7CisJdmFyIF9wMiAqYnl0ZQorCWlmIGxlbihiKSA+
IDAgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZiWzBdKSkKKwl9IGVsc2Ugewor
CQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCV9yIDo9IGNfc3Ry
ZXJyb3JfcihfQ19pbnQoZXJybnVtKSwgX3AyLCBTaXplX3QobGVuKGIpKSkKKwllcnJzdHIgPSAo
KmJ5dGUpKF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciByYXdfcHJjdGwvcHJjdGwKKy8vZXh0ZXJuIHByY3RsCitmdW5jIGNfcHJjdGwob3B0
aW9uIF9DX2ludCwgYXJnMiBfQ19sb25nLCBhcmczIF9DX2xvbmcsIGFyZzQgX0NfbG9uZywgYXJn
NSBfQ19sb25nKSBfQ19pbnQKK2Z1bmMgcmF3X3ByY3RsKG9wdGlvbiBpbnQsIGFyZzIgaW50LCBh
cmczIGludCwgYXJnNCBpbnQsIGFyZzUgaW50KSAocmV0IGludCwgZXJyIEVycm5vKSB7CisJX3Ig
Oj0gY19wcmN0bChfQ19pbnQob3B0aW9uKSwgX0NfbG9uZyhhcmcyKSwgX0NfbG9uZyhhcmczKSwg
X0NfbG9uZyhhcmc0KSwgX0NfbG9uZyhhcmc1KSkKKwlyZXQgPSAoaW50KShfcikKKwl2YXIgZXJy
bm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0
RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBl
cnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgcmF3X2ZvcmsvZm9yaworLy9leHRlcm4gZm9yaworZnVuYyBjX2ZvcmsoKSBQaWRfdAor
ZnVuYyByYXdfZm9yaygpIChwaWQgUGlkX3QsIGVyciBFcnJubykgeworCV9yIDo9IGNfZm9yaygp
CisJcGlkID0gKFBpZF90KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxz
ZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUK
Kwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2dldHBpZC9nZXRwaWQKKy8v
ZXh0ZXJuIGdldHBpZAorZnVuYyBjX2dldHBpZCgpIFBpZF90CitmdW5jIHJhd19nZXRwaWQoKSAo
cGlkIFBpZF90KSB7CisJX3IgOj0gY19nZXRwaWQoKQorCXBpZCA9IChQaWRfdCkoX3IpCisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19nZXRw
cGlkL2dldHBwaWQKKy8vZXh0ZXJuIGdldHBwaWQKK2Z1bmMgY19nZXRwcGlkKCkgUGlkX3QKK2Z1
bmMgcmF3X2dldHBwaWQoKSAocGlkIFBpZF90KSB7CisJX3IgOj0gY19nZXRwcGlkKCkKKwlwaWQg
PSAoUGlkX3QpKF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciByYXdfc2V0c2lkL3NldHNpZAorLy9leHRlcm4gc2V0c2lkCitmdW5jIGNfc2V0
c2lkKCkgUGlkX3QKK2Z1bmMgcmF3X3NldHNpZCgpIChlcnIgRXJybm8pIHsKKwlfciA6PSBjX3Nl
dHNpZCgpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAg
eworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVy
cm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19zZXRwZ2lkL3NldHBnaWQKKy8vZXh0ZXJuIHNldHBn
aWQKK2Z1bmMgY19zZXRwZ2lkKHBpZCBQaWRfdCwgcGdpZCBQaWRfdCkgX0NfaW50CitmdW5jIHJh
d19zZXRwZ2lkKHBpZCBpbnQsIHBnaWQgaW50KSAoZXJyIEVycm5vKSB7CisJX3IgOj0gY19zZXRw
Z2lkKFBpZF90KHBpZCksIFBpZF90KHBnaWQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5v
ID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfY2hyb290L2No
cm9vdAorLy9leHRlcm4gY2hyb290CitmdW5jIGNfY2hyb290KHBhdGggKmJ5dGUpIF9DX2ludAor
ZnVuYyByYXdfY2hyb290KHBhdGggKmJ5dGUpIChlcnIgRXJybm8pIHsKKwlfciA6PSBjX2Nocm9v
dChwYXRoKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAw
IHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRF
cnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfY2hkaXIvY2hkaXIKKy8vZXh0ZXJuIGNoZGlyCitm
dW5jIGNfY2hkaXIocGF0aCAqYnl0ZSkgX0NfaW50CitmdW5jIHJhd19jaGRpcihwYXRoICpieXRl
KSAoZXJyIEVycm5vKSB7CisJX3IgOj0gY19jaGRpcihwYXRoKQorCXZhciBlcnJubyBFcnJubwor
CXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJ
CXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQor
CXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdf
ZmNudGwvX19nb19mY250bAorLy9leHRlcm4gX19nb19mY250bAorZnVuYyBjX19fZ29fZmNudGwo
ZmQgX0NfaW50LCBjbWQgX0NfaW50LCBhcmcgX0NfaW50KSBfQ19pbnQKK2Z1bmMgcmF3X2ZjbnRs
KGZkIGludCwgY21kIGludCwgYXJnIGludCkgKHZhbCBpbnQsIGVyciBFcnJubykgeworCV9yIDo9
IGNfX19nb19mY250bChfQ19pbnQoZmQpLCBfQ19pbnQoY21kKSwgX0NfaW50KGFyZykpCisJdmFs
ID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlm
IHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19jbG9zZS9jbG9zZQorLy9leHRlcm4gY2xv
c2UKK2Z1bmMgY19jbG9zZShmZCBfQ19pbnQpIF9DX2ludAorZnVuYyByYXdfY2xvc2UoZmQgaW50
KSAoZXJyIEVycm5vKSB7CisJX3IgOj0gY19jbG9zZShfQ19pbnQoZmQpKQorCXZhciBlcnJubyBF
cnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJu
bygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5v
CisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciByYXdfaW9jdGwvX19nb19pb2N0bAorLy9leHRlcm4gX19nb19pb2N0bAorZnVuYyBjX19fZ29f
aW9jdGwoZmQgX0NfaW50LCBjbWQgX0NfaW50LCB2YWwgX0NfaW50KSBfQ19pbnQKK2Z1bmMgcmF3
X2lvY3RsKGZkIGludCwgY21kIHVpbnRwdHIsIHZhbCBpbnQpIChydmFsIGludCwgZXJyIEVycm5v
KSB7CisJX3IgOj0gY19fX2dvX2lvY3RsKF9DX2ludChmZCksIF9DX2ludChjbWQpLCBfQ19pbnQo
dmFsKSkKKwlydmFsID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisK
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19pb2N0bF9wdHIvX19n
b19pb2N0bF9wdHIKKy8vZXh0ZXJuIF9fZ29faW9jdGxfcHRyCitmdW5jIGNfX19nb19pb2N0bF9w
dHIoZmQgX0NfaW50LCBjbWQgX0NfaW50LCB2YWwgdW5zYWZlLlBvaW50ZXIpIF9DX2ludAorZnVu
YyByYXdfaW9jdGxfcHRyKGZkIGludCwgY21kIHVpbnRwdHIsIHZhbCB1bnNhZmUuUG9pbnRlcikg
KHJ2YWwgaW50LCBlcnIgRXJybm8pIHsKKwlfciA6PSBjX19fZ29faW9jdGxfcHRyKF9DX2ludChm
ZCksIF9DX2ludChjbWQpLCB1bnNhZmUuUG9pbnRlcih2YWwpKQorCXJ2YWwgPSAoaW50KShfcikK
Kwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVy
cm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgcmF3X2V4ZWN2ZS9leGVjdmUKKy8vZXh0ZXJuIGV4ZWN2ZQorZnVuYyBj
X2V4ZWN2ZShhcmd2MCAqYnl0ZSwgYXJndiAqKmJ5dGUsIGVudnYgKipieXRlKSBfQ19pbnQKK2Z1
bmMgcmF3X2V4ZWN2ZShhcmd2MCAqYnl0ZSwgYXJndiAqKmJ5dGUsIGVudnYgKipieXRlKSAoZXJy
IEVycm5vKSB7CisJX3IgOj0gY19leGVjdmUoYXJndjAsIGFyZ3YsIGVudnYpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJy
bm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIHJhd193cml0ZS93cml0ZQorLy9leHRlcm4gd3JpdGUKK2Z1bmMgY193cml0ZShmZCBfQ19p
bnQsIGJ1ZiAqYnl0ZSwgY291bnQgU2l6ZV90KSBTc2l6ZV90CitmdW5jIHJhd193cml0ZShmZCBp
bnQsIGJ1ZiAqYnl0ZSwgY291bnQgaW50KSAoZXJyIEVycm5vKSB7CisJX3IgOj0gY193cml0ZShf
Q19pbnQoZmQpLCBidWYsIFNpemVfdChjb3VudCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJy
bm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJy
bm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJu
Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19leGl0L19l
eGl0CisvL2V4dGVybiBfZXhpdAorZnVuYyBjX19leGl0KHN0YXR1cyBfQ19pbnQpIAorZnVuYyBy
YXdfZXhpdChzdGF0dXMgaW50KSB7CisJY19fZXhpdChfQ19pbnQoc3RhdHVzKSkKK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2R1cDIvZHVwMgorLy9leHRl
cm4gZHVwMgorZnVuYyBjX2R1cDIob2xkZmQgX0NfaW50LCBuZXdmZCBfQ19pbnQpIF9DX2ludAor
ZnVuYyByYXdfZHVwMihvbGRmZCBpbnQsIG5ld2ZkIGludCkgKGVyciBFcnJubykgeworCV9yIDo9
IGNfZHVwMihfQ19pbnQob2xkZmQpLCBfQ19pbnQobmV3ZmQpKQorCXZhciBlcnJubyBFcnJubwor
CXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJ
CXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQor
CXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdf
a2lsbC9raWxsCisvL2V4dGVybiBraWxsCitmdW5jIGNfa2lsbChwaWQgUGlkX3QsIHNpZyBfQ19p
bnQpIF9DX2ludAorZnVuYyByYXdfa2lsbChwaWQgUGlkX3QsIHNpZyBTaWduYWwpIChlcnIgRXJy
bm8pIHsKKwlfciA6PSBjX2tpbGwoUGlkX3QocGlkKSwgX0NfaW50KHNpZykpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJy
bm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIHJhd19zZXRncm91cHMvc2V0Z3JvdXBzCisvL2V4dGVybiBzZXRncm91cHMKK2Z1bmMgY19z
ZXRncm91cHMoc2l6ZSBTaXplX3QsIGxpc3QgKkdpZF90KSBfQ19pbnQKK2Z1bmMgcmF3X3NldGdy
b3VwcyhzaXplIGludCwgbGlzdCB1bnNhZmUuUG9pbnRlcikgKGVyciBFcnJubykgeworCV9yIDo9
IGNfc2V0Z3JvdXBzKFNpemVfdChzaXplKSwgKCpHaWRfdCkobGlzdCkpCisJdmFyIGVycm5vIEVy
cm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5v
KCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8K
Kwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IE9wZW5hdC9fX2dvX29wZW5hdAorLy9leHRlcm4gX19nb19vcGVuYXQKK2Z1bmMgY19fX2dvX29w
ZW5hdChkaXJmZCBfQ19pbnQsIHBhdGggKmJ5dGUsIGZsYWdzIF9DX2ludCwgbW9kZSBNb2RlX3Qp
IF9DX2ludAorZnVuYyBPcGVuYXQoZGlyZmQgaW50LCBwYXRoIHN0cmluZywgZmxhZ3MgaW50LCBt
b2RlIHVpbnQzMikgKGZkIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwg
ZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJu
CisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19fX2dvX29wZW5hdChfQ19pbnQoZGlyZmQp
LCBfcDIsIF9DX2ludChmbGFncyksIE1vZGVfdChtb2RlKSkKKwlmZCA9IChpbnQpKF9yKQorCXZh
ciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8g
PSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYg
c2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgZnV0aW1lc2F0L2Z1dGltZXNhdAorLy9leHRlcm4g
ZnV0aW1lc2F0CitmdW5jIGNfZnV0aW1lc2F0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgdGlt
ZXMgKlsyXVRpbWV2YWwpIF9DX2ludAorZnVuYyBmdXRpbWVzYXQoZGlyZmQgaW50LCBwYXRoICpi
eXRlLCB0aW1lcyAqWzJdVGltZXZhbCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJ
X3IgOj0gY19mdXRpbWVzYXQoX0NfaW50KGRpcmZkKSwgcGF0aCwgdGltZXMpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBwdHJhY2UvcHRyYWNlCisvL2V4dGVybiBwdHJhY2UKK2Z1bmMg
Y19wdHJhY2UocmVxdWVzdCBfQ19pbnQsIHBpZCBQaWRfdCwgYWRkciAqYnl0ZSwgZGF0YSAqYnl0
ZSkgX0NfbG9uZworZnVuYyBwdHJhY2UocmVxdWVzdCBpbnQsIHBpZCBpbnQsIGFkZHIgdWludHB0
ciwgZGF0YSB1aW50cHRyKSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBj
X3B0cmFjZShfQ19pbnQocmVxdWVzdCksIFBpZF90KHBpZCksICgqYnl0ZSkodW5zYWZlLlBvaW50
ZXIoYWRkcikpLCAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKGRhdGEpKSkKKwl2YXIgZXJybm8gRXJy
bm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8o
KQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIHJhd19wdHJhY2UvcHRyYWNlCitmdW5jIHJhd19wdHJhY2UocmVxdWVz
dCBpbnQsIHBpZCBpbnQsIGFkZHIgKmJ5dGUsIGRhdGEgKmJ5dGUpIChlcnIgRXJybm8pIHsKKwlf
ciA6PSBjX3B0cmFjZShfQ19pbnQocmVxdWVzdCksIFBpZF90KHBpZCksIGFkZHIsIGRhdGEpCisJ
dmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJu
byA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIHJlYm9vdC9yZWJvb3QKKy8vZXh0ZXJuIHJlYm9vdAorZnVuYyBjX3JlYm9v
dChtYWdpYzEgX0NfdWludCwgbWFnaWMyIF9DX3VpbnQsIGNtZCBfQ19pbnQsIGFyZyAqYnl0ZSkg
X0NfaW50CitmdW5jIHJlYm9vdChtYWdpYzEgdWludCwgbWFnaWMyIHVpbnQsIGNtZCBpbnQsIGFy
ZyBzdHJpbmcpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3A0ICpieXRlCisJX3A0LCBlcnIgPSBCeXRl
UHRyRnJvbVN0cmluZyhhcmcpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRl
cnN5c2NhbGwoKQorCV9yIDo9IGNfcmVib290KF9DX3VpbnQobWFnaWMxKSwgX0NfdWludChtYWdp
YzIpLCBfQ19pbnQoY21kKSwgX3A0KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZh
bHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1
ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0K
KwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgYWNj
ZXB0NC9hY2NlcHQ0CisvL2V4dGVybiBhY2NlcHQ0CitmdW5jIGNfYWNjZXB0NChmZCBfQ19pbnQs
IHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVuX3QsIGZsYWdzIF9DX2ludCkgX0NfaW50
CitmdW5jIGFjY2VwdDQoZmQgaW50LCBzYSAqUmF3U29ja2FkZHJBbnksIGxlbiAqU29ja2xlbl90
LCBmbGFncyBpbnQpIChuZmQgaW50LCBlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9y
IDo9IGNfYWNjZXB0NChfQ19pbnQoZmQpLCBzYSwgbGVuLCBfQ19pbnQoZmxhZ3MpKQorCW5mZCA9
IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0
c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30K
KworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgQWNjdC9hY2N0CisvL2V4
dGVybiBhY2N0CitmdW5jIGNfYWNjdChwYXRoICpieXRlKSBfQ19pbnQKK2Z1bmMgQWNjdChwYXRo
IHN0cmluZykgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQ
dHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRl
cnN5c2NhbGwoKQorCV9yIDo9IGNfYWNjdChfcDEpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJy
bm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJy
bm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBBZGp0aW1leC9hZGp0aW1leAorLy9leHRlcm4gYWRqdGltZXgKK2Z1bmMgY19hZGp0aW1l
eChidWYgKlRpbWV4KSBfQ19pbnQKK2Z1bmMgQWRqdGltZXgoYnVmICpUaW1leCkgKHN0YXRlIGlu
dCwgZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2FkanRpbWV4KGJ1ZikK
KwlzdGF0ZSA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNl
CisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQor
CX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwly
ZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRHVwMy9k
dXAzCisvL2V4dGVybiBkdXAzCitmdW5jIGNfZHVwMyhvbGRmZCBfQ19pbnQsIG5ld2ZkIF9DX2lu
dCwgZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgRHVwMyhvbGRmZCBpbnQsIG5ld2ZkIGludCwg
ZmxhZ3MgaW50KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19kdXAzKF9DX2ludChvbGRmZCksIF9D
X2ludChuZXdmZCksIF9DX2ludChmbGFncykpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8g
Oj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8g
PSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9
CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZhY2Nlc3NhdC9mYWNj
ZXNzYXQKKy8vZXh0ZXJuIGZhY2Nlc3NhdAorZnVuYyBjX2ZhY2Nlc3NhdChkaXJmZCBfQ19pbnQs
IHBhdGhuYW1lICpieXRlLCBtb2RlIF9DX2ludCwgZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMg
RmFjY2Vzc2F0KGRpcmZkIGludCwgcGF0aCBzdHJpbmcsIG1vZGUgdWludDMyLCBmbGFncyBpbnQp
IChlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0
cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxs
KCkKKwlfciA6PSBjX2ZhY2Nlc3NhdChfQ19pbnQoZGlyZmQpLCBfcDIsIF9DX2ludChtb2RlKSwg
X0NfaW50KGZsYWdzKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
RXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJu
Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZhbGxvY2F0ZS9m
YWxsb2NhdGUKKy8vZXh0ZXJuIGZhbGxvY2F0ZQorZnVuYyBjX2ZhbGxvY2F0ZShmZCBfQ19pbnQs
IG1vZGUgX0NfaW50LCBvZmZzZXQgT2Zmc2V0X3QsIGxlbiBPZmZzZXRfdCkgX0NfaW50CitmdW5j
IEZhbGxvY2F0ZShmZCBpbnQsIG1vZGUgdWludDMyLCBvZmYgaW50NjQsIGxlbiBpbnQ2NCkgKGVy
ciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19mYWxsb2NhdGUoX0NfaW50KGZk
KSwgX0NfaW50KG1vZGUpLCBPZmZzZXRfdChvZmYpLCBPZmZzZXRfdChsZW4pKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJy
bm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmNobW9kYXQvZmNobW9kYXQKKy8vZXh0ZXJuIGZjaG1vZGF0
CitmdW5jIGNfZmNobW9kYXQoZGlyZmQgX0NfaW50LCBwYXRobmFtZSAqYnl0ZSwgbW9kZSBNb2Rl
X3QsIGZsYWdzIF9DX2ludCkgX0NfaW50CitmdW5jIEZjaG1vZGF0KGRpcmZkIGludCwgcGF0aCBz
dHJpbmcsIG1vZGUgdWludDMyLCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpi
eXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwg
eworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2ZjaG1vZGF0KF9DX2lu
dChkaXJmZCksIF9wMiwgTW9kZV90KG1vZGUpLCBfQ19pbnQoZmxhZ3MpKQorCXZhciBlcnJubyBF
cnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJu
bygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgRmNob3duYXQvZmNob3duYXQKKy8vZXh0ZXJuIGZjaG93bmF0Citm
dW5jIGNfZmNob3duYXQoZGlyZmQgX0NfaW50LCBwYXRoICpieXRlLCBvd25lciBVaWRfdCwgZ3Jv
dXAgR2lkX3QsIGZsYWdzIF9DX2ludCkgX0NfaW50CitmdW5jIEZjaG93bmF0KGRpcmZkIGludCwg
cGF0aCBzdHJpbmcsIHVpZCBpbnQsIGdpZCBpbnQsIGZsYWdzIGludCkgKGVyciBlcnJvcikgewor
CXZhciBfcDIgKmJ5dGUKKwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYg
ZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfZmNo
b3duYXQoX0NfaW50KGRpcmZkKSwgX3AyLCBVaWRfdCh1aWQpLCBHaWRfdChnaWQpLCBfQ19pbnQo
ZmxhZ3MpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAw
IHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lz
Y2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKwor
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmxvY2svZmxvY2sKKy8vZXh0
ZXJuIGZsb2NrCitmdW5jIGNfZmxvY2soZmQgX0NfaW50LCBob3cgX0NfaW50KSBfQ19pbnQKK2Z1
bmMgRmxvY2soZmQgaW50LCBob3cgaW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkK
KwlfciA6PSBjX2Zsb2NrKF9DX2ludChmZCksIF9DX2ludChob3cpKQorCXZhciBlcnJubyBFcnJu
bworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygp
CisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgRnN0YXRmcy9mc3RhdGZzCisvL2V4dGVybiBmc3RhdGZzCitmdW5jIGNf
ZnN0YXRmcyhmZCBfQ19pbnQsIGJ1ZiAqU3RhdGZzX3QpIF9DX2ludAorZnVuYyBGc3RhdGZzKGZk
IGludCwgYnVmICpTdGF0ZnNfdCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3Ig
Oj0gY19mc3RhdGZzKF9DX2ludChmZCksIGJ1ZikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJu
byA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJu
byA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJy
bm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIEdldHhhdHRyL2dldHhhdHRyCisvL2V4dGVybiBnZXR4YXR0cgorZnVuYyBjX2dldHhhdHRy
KHBhdGggKmJ5dGUsIGF0dHIgKmJ5dGUsIGJ1ZiAqYnl0ZSwgY291bnQgU2l6ZV90KSBTc2l6ZV90
CitmdW5jIEdldHhhdHRyKHBhdGggc3RyaW5nLCBhdHRyIHN0cmluZywgZGVzdCBbXWJ5dGUpIChz
eiBpbnQsIGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJG
cm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwl2YXIgX3Ay
ICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhhdHRyKQorCWlmIGVyciAhPSBu
aWwgeworCQlyZXR1cm4KKwl9CisJdmFyIF9wMyAqYnl0ZQorCWlmIGxlbihkZXN0KSA+IDAgewor
CQlfcDMgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZkZXN0WzBdKSkKKwl9IGVsc2UgeworCQlf
cDMgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVyc3lzY2FsbCgp
CisJX3IgOj0gY19nZXR4YXR0cihfcDEsIF9wMiwgX3AzLCBTaXplX3QobGVuKGRlc3QpKSkKKwlz
eiA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYg
X3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlF
eGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4K
K30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgSW5vdGlmeUFkZFdh
dGNoL2lub3RpZnlfYWRkX3dhdGNoCisvL2V4dGVybiBpbm90aWZ5X2FkZF93YXRjaAorZnVuYyBj
X2lub3RpZnlfYWRkX3dhdGNoKGZkIF9DX2ludCwgcGF0aG5hbWUgKmJ5dGUsIG1hc2sgdWludDMy
KSBfQ19pbnQKK2Z1bmMgSW5vdGlmeUFkZFdhdGNoKGZkIGludCwgcGF0aG5hbWUgc3RyaW5nLCBt
YXNrIHVpbnQzMikgKHdhdGNoZGVzYyBpbnQsIGVyciBlcnJvcikgeworCXZhciBfcDIgKmJ5dGUK
KwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGhuYW1lKQorCWlmIGVyciAhPSBuaWwg
eworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2lub3RpZnlfYWRkX3dh
dGNoKF9DX2ludChmZCksIF9wMiwgdWludDMyKG1hc2spKQorCXdhdGNoZGVzYyA9IChpbnQpKF9y
KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJ
ZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgp
CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgSW5vdGlmeUluaXQvaW5vdGlmeV9pbml0
CisvL2V4dGVybiBpbm90aWZ5X2luaXQKK2Z1bmMgY19pbm90aWZ5X2luaXQoKSBfQ19pbnQKK2Z1
bmMgSW5vdGlmeUluaXQoKSAoZmQgaW50LCBlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2lub3RpZnlf
aW5pdCgpCisJZmQgPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBm
YWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRy
dWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKwor
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgSW5vdGlmeUluaXQxL2lub3Rp
ZnlfaW5pdDEKKy8vZXh0ZXJuIGlub3RpZnlfaW5pdDEKK2Z1bmMgY19pbm90aWZ5X2luaXQxKGZs
YWdzIF9DX2ludCkgX0NfaW50CitmdW5jIElub3RpZnlJbml0MShmbGFncyBpbnQpIChmZCBpbnQs
IGVyciBlcnJvcikgeworCV9yIDo9IGNfaW5vdGlmeV9pbml0MShfQ19pbnQoZmxhZ3MpKQorCWZk
ID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBf
ciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlm
IHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIElub3RpZnlSbVdhdGNoL2lub3RpZnlfcm1fd2F0
Y2gKKy8vZXh0ZXJuIGlub3RpZnlfcm1fd2F0Y2gKK2Z1bmMgY19pbm90aWZ5X3JtX3dhdGNoKGZk
IF9DX2ludCwgd2QgdWludDMyKSBfQ19pbnQKK2Z1bmMgSW5vdGlmeVJtV2F0Y2goZmQgaW50LCB3
YXRjaGRlc2MgdWludDMyKSAoc3VjY2VzcyBpbnQsIGVyciBlcnJvcikgeworCV9yIDo9IGNfaW5v
dGlmeV9ybV93YXRjaChfQ19pbnQoZmQpLCB1aW50MzIod2F0Y2hkZXNjKSkKKwlzdWNjZXNzID0g
KGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8
IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNl
dEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEtsb2djdGwva2xvZ2N0bAorLy9leHRlcm4ga2xvZ2N0
bAorZnVuYyBjX2tsb2djdGwodHlwIF9DX2ludCwgYnVmcCAqYnl0ZSwgbGVuIF9DX2ludCkgX0Nf
aW50CitmdW5jIEtsb2djdGwodHlwIGludCwgYnVmIFtdYnl0ZSkgKG4gaW50LCBlcnIgZXJyb3Ip
IHsKKwl2YXIgX3AyICpieXRlCisJaWYgbGVuKGJ1ZikgPiAwIHsKKwkJX3AyID0gKCpieXRlKSh1
bnNhZmUuUG9pbnRlcigmYnVmWzBdKSkKKwl9IGVsc2UgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2Fm
ZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19rbG9nY3Rs
KF9DX2ludCh0eXApLCBfcDIsIF9DX2ludChsZW4oYnVmKSkpCisJbiA9IChpbnQpKF9yKQorCXZh
ciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8g
PSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYg
c2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTGlzdHhhdHRyL2xpc3R4YXR0cgorLy9leHRlcm4g
bGlzdHhhdHRyCitmdW5jIGNfbGlzdHhhdHRyKHBhdGggKmJ5dGUsIGxpc3QgKmJ5dGUsIHNpemUg
U2l6ZV90KSBTc2l6ZV90CitmdW5jIExpc3R4YXR0cihwYXRoIHN0cmluZywgZGVzdCBbXWJ5dGUp
IChzeiBpbnQsIGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQ
dHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwl2YXIg
X3AyICpieXRlCisJaWYgbGVuKGRlc3QpID4gMCB7CisJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBv
aW50ZXIoJmRlc3RbMF0pKQorCX0gZWxzZSB7CisJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50
ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2xpc3R4YXR0cihfcDEs
IF9wMiwgU2l6ZV90KGxlbihkZXN0KSkpCisJc3ogPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJy
bm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8o
KQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIE1rZGlyYXQvbWtkaXJhdAorLy9leHRlcm4gbWtkaXJhdAorZnVuYyBj
X21rZGlyYXQoZGlyZmQgX0NfaW50LCBwYXRoICpieXRlLCBtb2RlIE1vZGVfdCkgX0NfaW50Citm
dW5jIE1rZGlyYXQoZGlyZmQgaW50LCBwYXRoIHN0cmluZywgbW9kZSB1aW50MzIpIChlcnIgZXJy
b3IpIHsKKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRo
KQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6
PSBjX21rZGlyYXQoX0NfaW50KGRpcmZkKSwgX3AyLCBNb2RlX3QobW9kZSkpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBNa25vZGF0L21rbm9kYXQKKy8vZXh0ZXJuIG1rbm9kYXQKK2Z1
bmMgY19ta25vZGF0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3QsIGRldiBf
ZGV2X3QpIF9DX2ludAorZnVuYyBNa25vZGF0KGRpcmZkIGludCwgcGF0aCBzdHJpbmcsIG1vZGUg
dWludDMyLCBkZXYgaW50KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJy
ID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJ
fQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19ta25vZGF0KF9DX2ludChkaXJmZCksIF9wMiwg
TW9kZV90KG1vZGUpLCBfZGV2X3QoZGV2KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6
PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9
IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8K
Kwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IHBpcGUyL3BpcGUyCisvL2V4dGVybiBwaXBlMgorZnVuYyBjX3BpcGUyKHAgKlsyXV9DX2ludCwg
ZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgcGlwZTIocCAqWzJdX0NfaW50LCBmbGFncyBpbnQp
IChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX3BpcGUyKHAsIF9DX2ludChmbGFncykpCisJdmFyIGVy
cm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdl
dEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0g
ZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIFBpdm90Um9vdC9waXZvdF9yb290CisvL2V4dGVybiBwaXZvdF9yb290CitmdW5jIGNf
cGl2b3Rfcm9vdChuZXdyb290ICpieXRlLCBwdXRvbGQgKmJ5dGUpIF9DX2ludAorZnVuYyBQaXZv
dFJvb3QobmV3cm9vdCBzdHJpbmcsIHB1dG9sZCBzdHJpbmcpIChlcnIgZXJyb3IpIHsKKwl2YXIg
X3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhuZXdyb290KQorCWlmIGVy
ciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0
ZVB0ckZyb21TdHJpbmcocHV0b2xkKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJ
RW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3Bpdm90X3Jvb3QoX3AxLCBfcDIpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBSZW1vdmV4YXR0ci9yZW1vdmV4YXR0cgorLy9leHRlcm4gcmVt
b3ZleGF0dHIKK2Z1bmMgY19yZW1vdmV4YXR0cihwYXRoICpieXRlLCBuYW1lICpieXRlKSBfQ19p
bnQKK2Z1bmMgUmVtb3ZleGF0dHIocGF0aCBzdHJpbmcsIGF0dHIgc3RyaW5nKSAoZXJyIGVycm9y
KSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkK
KwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCXZhciBfcDIgKmJ5dGUKKwlfcDIsIGVy
ciA9IEJ5dGVQdHJGcm9tU3RyaW5nKGF0dHIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgor
CX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfcmVtb3ZleGF0dHIoX3AxLCBfcDIpCisJdmFy
IGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9
IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBSZW5hbWVhdC9yZW5hbWVhdAorLy9leHRlcm4gcmVu
YW1lYXQKK2Z1bmMgY19yZW5hbWVhdChvbGRkaXJmZCBfQ19pbnQsIG9sZHBhdGggKmJ5dGUsIG5l
d2RpcmZkIF9DX2ludCwgbmV3cGF0aCAqYnl0ZSkgX0NfaW50CitmdW5jIFJlbmFtZWF0KG9sZGRp
cmZkIGludCwgb2xkcGF0aCBzdHJpbmcsIG5ld2RpcmZkIGludCwgbmV3cGF0aCBzdHJpbmcpIChl
cnIgZXJyb3IpIHsKKwl2YXIgX3AyICpieXRlCisJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmlu
ZyhvbGRwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJdmFyIF9wNCAqYnl0
ZQorCV9wNCwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcobmV3cGF0aCkKKwlpZiBlcnIgIT0gbmls
IHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19yZW5hbWVhdChfQ19p
bnQob2xkZGlyZmQpLCBfcDIsIF9DX2ludChuZXdkaXJmZCksIF9wNCkKKwl2YXIgZXJybm8gRXJy
bm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8o
KQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIHNlbmRmaWxlL3NlbmRmaWxlNjQKKy8vZXh0ZXJuIHNlbmRmaWxlNjQK
K2Z1bmMgY19zZW5kZmlsZTY0KG91dGZkIF9DX2ludCwgaW5mZCBfQ19pbnQsIG9mZnNldCAqT2Zm
c2V0X3QsIGNvdW50IFNpemVfdCkgU3NpemVfdAorZnVuYyBzZW5kZmlsZShvdXRmZCBpbnQsIGlu
ZmQgaW50LCBvZmZzZXQgKk9mZnNldF90LCBjb3VudCBpbnQpICh3cml0dGVuIGludCwgZXJyIGVy
cm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3NlbmRmaWxlNjQoX0NfaW50KG91dGZk
KSwgX0NfaW50KGluZmQpLCBvZmZzZXQsIFNpemVfdChjb3VudCkpCisJd3JpdHRlbiA9IChpbnQp
KF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsK
KwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2Fs
bCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0ZnNnaWQvc2V0ZnNnaWQKKy8v
ZXh0ZXJuIHNldGZzZ2lkCitmdW5jIGNfc2V0ZnNnaWQoZ2lkIEdpZF90KSBfQ19pbnQKK2Z1bmMg
U2V0ZnNnaWQoZ2lkIGludCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0g
Y19zZXRmc2dpZChHaWRfdChnaWQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZh
bHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1
ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0K
KwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0
ZnN1aWQvc2V0ZnN1aWQKKy8vZXh0ZXJuIHNldGZzdWlkCitmdW5jIGNfc2V0ZnN1aWQodWlkIFVp
ZF90KSBfQ19pbnQKK2Z1bmMgU2V0ZnN1aWQodWlkIGludCkgKGVyciBlcnJvcikgeworCUVudGVy
c3lzY2FsbCgpCisJX3IgOj0gY19zZXRmc3VpZChVaWRfdCh1aWQpKQorCXZhciBlcnJubyBFcnJu
bworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygp
CisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgU2V0cmVzZ2lkL3NldHJlc2dpZAorLy9leHRlcm4gc2V0cmVzZ2lkCitm
dW5jIGNfc2V0cmVzZ2lkKHJnaWQgR2lkX3QsIGVnaWQgR2lkX3QsIHNnaWQgR2lkX3QpIF9DX2lu
dAorZnVuYyBTZXRyZXNnaWQocmdpZCBpbnQsIGVnaWQgaW50LCBzZ2lkIGludCkgKGVyciBlcnJv
cikgeworCV9yIDo9IGNfc2V0cmVzZ2lkKEdpZF90KHJnaWQpLCBHaWRfdChlZ2lkKSwgR2lkX3Qo
c2dpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAg
eworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVy
cm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldHJlc3VpZC9zZXRyZXN1aWQKKy8vZXh0ZXJuIHNldHJl
c3VpZAorZnVuYyBjX3NldHJlc3VpZChydWlkIFVpZF90LCBldWlkIFVpZF90LCBzdWlkIFVpZF90
KSBfQ19pbnQKK2Z1bmMgU2V0cmVzdWlkKHJ1aWQgaW50LCBlZ3VpZCBpbnQsIHN1aWQgaW50KSAo
ZXJyIGVycm9yKSB7CisJX3IgOj0gY19zZXRyZXN1aWQoVWlkX3QocnVpZCksIFVpZF90KGVndWlk
KSwgVWlkX3Qoc3VpZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlp
ZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQor
CWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldHhhdHRyL3NldHhhdHRyCisvL2V4dGVy
biBzZXR4YXR0cgorZnVuYyBjX3NldHhhdHRyKHBhdGggKmJ5dGUsIG5hbWUgKmJ5dGUsIHZhbHVl
ICpieXRlLCBzaXplIFNpemVfdCwgZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgU2V0eGF0dHIo
cGF0aCBzdHJpbmcsIGF0dHIgc3RyaW5nLCBkYXRhIFtdYnl0ZSwgZmxhZ3MgaW50KSAoZXJyIGVy
cm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0
aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCXZhciBfcDIgKmJ5dGUKKwlfcDIs
IGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKGF0dHIpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVy
bgorCX0KKwl2YXIgX3AzICpieXRlCisJaWYgbGVuKGRhdGEpID4gMCB7CisJCV9wMyA9ICgqYnl0
ZSkodW5zYWZlLlBvaW50ZXIoJmRhdGFbMF0pKQorCX0gZWxzZSB7CisJCV9wMyA9ICgqYnl0ZSko
dW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3Nl
dHhhdHRyKF9wMSwgX3AyLCBfcDMsIFNpemVfdChsZW4oZGF0YSkpLCBfQ19pbnQoZmxhZ3MpKQor
CXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJy
bm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJ
aWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Igc3BsaWNlL3NwbGljZQorLy9leHRlcm4gc3Bs
aWNlCitmdW5jIGNfc3BsaWNlKHJmZCBfQ19pbnQsIHJvZmYgKl9sb2ZmX3QsIHdmZCBfQ19pbnQs
IHdvZmYgKl9sb2ZmX3QsIGxlbiBTaXplX3QsIGZsYWdzIF9DX3VpbnQpIFNzaXplX3QKK2Z1bmMg
c3BsaWNlKHJmZCBpbnQsIHJvZmYgKl9sb2ZmX3QsIHdmZCBpbnQsIHdvZmYgKl9sb2ZmX3QsIGxl
biBpbnQsIGZsYWdzIGludCkgKG4gaW50NjQsIGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgp
CisJX3IgOj0gY19zcGxpY2UoX0NfaW50KHJmZCksIHJvZmYsIF9DX2ludCh3ZmQpLCB3b2ZmLCBT
aXplX3QobGVuKSwgX0NfdWludChmbGFncykpCisJbiA9IChpbnQ2NCkoX3IpCisJdmFyIGVycm5v
IEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVy
cm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBTdGF0ZnMvc3RhdGZzCisvL2V4dGVybiBzdGF0ZnMKK2Z1bmMg
Y19zdGF0ZnMocGF0aCAqYnl0ZSwgYnVmICpTdGF0ZnNfdCkgX0NfaW50CitmdW5jIFN0YXRmcyhw
YXRoIHN0cmluZywgYnVmICpTdGF0ZnNfdCkgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUK
KwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJ
CXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfc3RhdGZzKF9wMSwgYnVmKQor
CXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJy
bm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJ
aWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3luY0ZpbGVSYW5nZS9zeW5jX2ZpbGVfcmFu
Z2UKKy8vZXh0ZXJuIHN5bmNfZmlsZV9yYW5nZQorZnVuYyBjX3N5bmNfZmlsZV9yYW5nZShmZCBf
Q19pbnQsIG9mZiBPZmZzZXRfdCwgbiBPZmZzZXRfdCwgZmxhZ3MgX0NfdWludCkgX0NfaW50Citm
dW5jIFN5bmNGaWxlUmFuZ2UoZmQgaW50LCBvZmYgaW50NjQsIG4gaW50NjQsIGZsYWdzIGludCkg
KGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19zeW5jX2ZpbGVfcmFuZ2Uo
X0NfaW50KGZkKSwgT2Zmc2V0X3Qob2ZmKSwgT2Zmc2V0X3QobiksIF9DX3VpbnQoZmxhZ3MpKQor
CXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJy
bm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJ
aWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3lzaW5mby9zeXNpbmZvCisvL2V4dGVybiBz
eXNpbmZvCitmdW5jIGNfc3lzaW5mbyhpbmZvICpTeXNpbmZvX3QpIF9DX2ludAorZnVuYyBTeXNp
bmZvKGluZm8gKlN5c2luZm9fdCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNfc3lzaW5mbyhpbmZv
KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJ
ZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7
CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBUZWUvdGVlCisvL2V4dGVybiB0ZWUKK2Z1bmMgY190ZWUocmZkIF9D
X2ludCwgd2ZkIF9DX2ludCwgbGVuIFNpemVfdCwgZmxhZ3MgX0NfdWludCkgU3NpemVfdAorZnVu
YyBUZWUocmZkIGludCwgd2ZkIGludCwgbGVuIGludCwgZmxhZ3MgaW50KSAobiBpbnQ2NCwgZXJy
IGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3RlZShfQ19pbnQocmZkKSwgX0Nf
aW50KHdmZCksIFNpemVfdChsZW4pLCBfQ191aW50KGZsYWdzKSkKKwluID0gKGludDY0KShfcikK
Kwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVy
cm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQor
CWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHVubGlua2F0L3VubGlua2F0CisvL2V4dGVy
biB1bmxpbmthdAorZnVuYyBjX3VubGlua2F0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgZmxh
Z3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgdW5saW5rYXQoZGlyZmQgaW50LCBwYXRoIHN0cmluZywg
ZmxhZ3MgaW50KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0
ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVu
dGVyc3lzY2FsbCgpCisJX3IgOj0gY191bmxpbmthdChfQ19pbnQoZGlyZmQpLCBfcDIsIF9DX2lu
dChmbGFncykpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8
IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRz
eXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQor
CisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBVbm1vdW50L3Vtb3VudDIK
Ky8vZXh0ZXJuIHVtb3VudDIKK2Z1bmMgY191bW91bnQyKHRhcmdldCAqYnl0ZSwgZmxhZ3MgX0Nf
aW50KSBfQ19pbnQKK2Z1bmMgVW5tb3VudCh0YXJnZXQgc3RyaW5nLCBmbGFncyBpbnQpIChlcnIg
ZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyh0
YXJnZXQpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQor
CV9yIDo9IGNfdW1vdW50MihfcDEsIF9DX2ludChmbGFncykpCisJdmFyIGVycm5vIEVycm5vCisJ
c2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJ
c2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVy
ciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBVbnNoYXJlL3Vuc2hhcmUKKy8vZXh0ZXJuIHVuc2hhcmUKK2Z1bmMgY191bnNo
YXJlKGZsYWdzIF9DX2ludCkgX0NfaW50CitmdW5jIFVuc2hhcmUoZmxhZ3MgaW50KSAoZXJyIGVy
cm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3Vuc2hhcmUoX0NfaW50KGZsYWdzKSkK
Kwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVy
cm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQor
CWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIElvcGVybS9pb3Blcm0KKy8vZXh0ZXJuIGlv
cGVybQorZnVuYyBjX2lvcGVybShmcm9tIF9DX2xvbmcsIG51bSBfQ19sb25nLCBvbiBfQ19pbnQp
IF9DX2ludAorZnVuYyBJb3Blcm0oZnJvbSBpbnQsIG51bSBpbnQsIG9uIGludCkgKGVyciBlcnJv
cikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19pb3Blcm0oX0NfbG9uZyhmcm9tKSwgX0Nf
bG9uZyhudW0pLCBfQ19pbnQob24pKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZh
bHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1
ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0K
KwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgSW9w
bC9pb3BsCisvL2V4dGVybiBpb3BsCitmdW5jIGNfaW9wbChsZXZlbCBfQ19pbnQpIF9DX2ludAor
ZnVuYyBJb3BsKGxldmVsIGludCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3Ig
Oj0gY19pb3BsKF9DX2ludChsZXZlbCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBV
c3RhdC91c3RhdAorLy9leHRlcm4gdXN0YXQKK2Z1bmMgY191c3RhdChkZXYgX2Rldl90LCB1YnVm
ICpVc3RhdF90KSBfQ19pbnQKK2Z1bmMgVXN0YXQoZGV2IGludCwgdWJ1ZiAqVXN0YXRfdCkgKGVy
ciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY191c3RhdChfZGV2X3QoZGV2KSwg
dWJ1ZikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7
CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2Nh
bGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8v
IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHV0aW1lbnNhdC91dGltZW5zYXQK
Ky8vZXh0ZXJuIHV0aW1lbnNhdAorZnVuYyBjX3V0aW1lbnNhdChkaXJmZCBfQ19pbnQsIHBhdGgg
KmJ5dGUsIHRpbWVzICpbMl1UaW1lc3BlYywgZmxhZ3MgX0NfaW50KSBfQ19pbnQKK2Z1bmMgdXRp
bWVuc2F0KGRpcmZkIGludCwgcGF0aCBzdHJpbmcsIHRpbWVzICpbMl1UaW1lc3BlYywgZmxhZ3Mg
aW50KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0ZVB0ckZy
b21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lz
Y2FsbCgpCisJX3IgOj0gY191dGltZW5zYXQoX0NfaW50KGRpcmZkKSwgX3AyLCB0aW1lcywgX0Nf
aW50KGZsYWdzKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9y
IDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhp
dHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9
CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHBpcGUvcGlwZQorLy9l
eHRlcm4gcGlwZQorZnVuYyBjX3BpcGUocCAqWzJdX0NfaW50KSBfQ19pbnQKK2Z1bmMgcGlwZShw
ICpbMl1fQ19pbnQpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX3BpcGUocCkKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgdXRpbWVzL3V0aW1lcworLy9leHRlcm4gdXRpbWVzCitmdW5jIGNfdXRpbWVzKHBhdGggKmJ5
dGUsIHRpbWVzICpbMl1UaW1ldmFsKSBfQ19pbnQKK2Z1bmMgdXRpbWVzKHBhdGggc3RyaW5nLCB0
aW1lcyAqWzJdVGltZXZhbCkgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVy
ciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgor
CX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfdXRpbWVzKF9wMSwgdGltZXMpCisJdmFyIGVy
cm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdl
dEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRF
cnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBnZXRjd2QvZ2V0Y3dkCisvL2V4dGVybiBnZXRjd2QKK2Z1
bmMgY19nZXRjd2QoYnVmICpieXRlLCBzaXplIFNpemVfdCkgKmJ5dGUKK2Z1bmMgZ2V0Y3dkKGJ1
ZiAqYnl0ZSwgc2l6ZSBTaXplX3QpIChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9y
IDo9IGNfZ2V0Y3dkKGJ1ZiwgU2l6ZV90KHNpemUpKQorCXZhciBlcnJubyBFcnJubworCXNldEVy
cm5vIDo9IGZhbHNlCisJaWYgX3IgPT0gbmlsIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgZ2V0Z3JvdXBzL2dldGdyb3VwcworLy9leHRlcm4gZ2V0Z3JvdXBzCitmdW5jIGNf
Z2V0Z3JvdXBzKHNpemUgX0NfaW50LCBsaXN0ICpHaWRfdCkgX0NfaW50CitmdW5jIGdldGdyb3Vw
cyhzaXplIGludCwgbGlzdCAqR2lkX3QpIChubiBpbnQsIGVyciBlcnJvcikgeworCV9yIDo9IGNf
Z2V0Z3JvdXBzKF9DX2ludChzaXplKSwgbGlzdCkKKwlubiA9IChpbnQpKF9yKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBzZXRncm91cHMvc2V0Z3JvdXBzCitmdW5jIHNldGdyb3VwcyhuIGludCwgbGlzdCAqR2lk
X3QpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX3NldGdyb3VwcyhTaXplX3QobiksIGxpc3QpCisJ
dmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJu
byA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIE1rZmlmby9ta2ZpZm8KKy8vZXh0ZXJuIG1rZmlmbworZnVuYyBjX21rZmlm
byhwYXRoICpieXRlLCBtb2RlIE1vZGVfdCkgX0NfaW50CitmdW5jIE1rZmlmbyhwYXRoIHN0cmlu
ZywgbW9kZSB1aW50MzIpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIg
PSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9
CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX21rZmlmbyhfcDEsIE1vZGVfdChtb2RlKSkKKwl2
YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5v
ID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlm
IHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNlbGVjdC9zZWxlY3QKKy8vZXh0ZXJuIHNlbGVj
dAorZnVuYyBjX3NlbGVjdChuZmQgX0NfaW50LCByICpGZFNldCwgdyAqRmRTZXQsIGUgKkZkU2V0
LCB0aW1lb3V0ICpUaW1ldmFsKSBfQ19pbnQKK2Z1bmMgU2VsZWN0KG5mZCBpbnQsIHIgKkZkU2V0
LCB3ICpGZFNldCwgZSAqRmRTZXQsIHRpbWVvdXQgKlRpbWV2YWwpIChuIGludCwgZXJyIGVycm9y
KSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3NlbGVjdChfQ19pbnQobmZkKSwgciwgdywg
ZSwgdGltZW91dCkKKwluID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8g
Oj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8g
PSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5v
CisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBBY2Nlc3MvYWNjZXNzCisvL2V4dGVybiBhY2Nlc3MKK2Z1bmMgY19hY2Nlc3MocGF0aCAqYnl0
ZSwgbW9kZSBfQ19pbnQpIF9DX2ludAorZnVuYyBBY2Nlc3MocGF0aCBzdHJpbmcsIG1vZGUgdWlu
dDMyKSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZy
b21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lz
Y2FsbCgpCisJX3IgOj0gY19hY2Nlc3MoX3AxLCBfQ19pbnQobW9kZSkpCisJdmFyIGVycm5vIEVy
cm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5v
KCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7
CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBDaGRpci9jaGRpcgorZnVuYyBDaGRpcihwYXRoIHN0cmluZykgKGVy
ciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5n
KHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQor
CV9yIDo9IGNfY2hkaXIoX3AxKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNl
CisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQor
CX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwly
ZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgQ2htb2Qv
Y2htb2QKKy8vZXh0ZXJuIGNobW9kCitmdW5jIGNfY2htb2QocGF0aCAqYnl0ZSwgbW9kZSBNb2Rl
X3QpIF9DX2ludAorZnVuYyBDaG1vZChwYXRoIHN0cmluZywgbW9kZSB1aW50MzIpIChlcnIgZXJy
b3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRo
KQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6
PSBjX2NobW9kKF9wMSwgTW9kZV90KG1vZGUpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5v
ID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgQ2hvd24vY2hvd24KKy8vZXh0ZXJuIGNob3duCitmdW5jIGNfY2hvd24ocGF0aCAqYnl0ZSwg
dWlkIFVpZF90LCBnaWQgR2lkX3QpIF9DX2ludAorZnVuYyBDaG93bihwYXRoIHN0cmluZywgdWlk
IGludCwgZ2lkIGludCkgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9
IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0K
KwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfY2hvd24oX3AxLCBVaWRfdCh1aWQpLCBHaWRfdChn
aWQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsK
KwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2Fs
bCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgQ2hyb290L2Nocm9vdAorZnVuYyBD
aHJvb3QocGF0aCBzdHJpbmcpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBl
cnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4K
Kwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2Nocm9vdChfcDEpCisJdmFyIGVycm5vIEVy
cm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5v
KCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7
CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBDbG9zZS9jbG9zZQorZnVuYyBDbG9zZShmZCBpbnQpIChlcnIgZXJy
b3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfY2xvc2UoX0NfaW50KGZkKSkKKwl2YXIg
ZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0g
R2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNl
dEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIENyZWF0L2NyZWF0CisvL2V4dGVybiBjcmVhdAorZnVu
YyBjX2NyZWF0KHBhdGggKmJ5dGUsIG1vZGUgTW9kZV90KSBfQ19pbnQKK2Z1bmMgQ3JlYXQocGF0
aCBzdHJpbmcsIG1vZGUgdWludDMyKSAoZmQgaW50LCBlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpi
eXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwg
eworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2NyZWF0KF9wMSwgTW9k
ZV90KG1vZGUpKQorCWZkID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8g
Oj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8g
PSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5v
CisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBEdXAvZHVwCisvL2V4dGVybiBkdXAKK2Z1bmMgY19kdXAob2xkZmQgX0NfaW50KSBfQ19pbnQK
K2Z1bmMgRHVwKG9sZGZkIGludCkgKGZkIGludCwgZXJyIGVycm9yKSB7CisJX3IgOj0gY19kdXAo
X0NfaW50KG9sZGZkKSkKKwlmZCA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVy
cm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVy
cm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVy
bgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBEdXAyL2R1cDIK
K2Z1bmMgRHVwMihvbGRmZCBpbnQsIG5ld2ZkIGludCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNf
ZHVwMihfQ19pbnQob2xkZmQpLCBfQ19pbnQobmV3ZmQpKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBFeGl0L2V4
aXQKKy8vZXh0ZXJuIGV4aXQKK2Z1bmMgY19leGl0KGNvZGUgX0NfaW50KSAKK2Z1bmMgRXhpdChj
b2RlIGludCkgeworCUVudGVyc3lzY2FsbCgpCisJY19leGl0KF9DX2ludChjb2RlKSkKKwlFeGl0
c3lzY2FsbCgpCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZj
aGRpci9mY2hkaXIKKy8vZXh0ZXJuIGZjaGRpcgorZnVuYyBjX2ZjaGRpcihmZCBfQ19pbnQpIF9D
X2ludAorZnVuYyBGY2hkaXIoZmQgaW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkK
KwlfciA6PSBjX2ZjaGRpcihfQ19pbnQoZmQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5v
ID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgRmNobW9kL2ZjaG1vZAorLy9leHRlcm4gZmNobW9kCitmdW5jIGNfZmNobW9kKGZkIF9DX2lu
dCwgbW9kZSBNb2RlX3QpIF9DX2ludAorZnVuYyBGY2htb2QoZmQgaW50LCBtb2RlIHVpbnQzMikg
KGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19mY2htb2QoX0NfaW50KGZk
KSwgTW9kZV90KG1vZGUpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJ
aWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0K
KwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1
cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmNob3duL2Zj
aG93bgorLy9leHRlcm4gZmNob3duCitmdW5jIGNfZmNob3duKGZkIF9DX2ludCwgdWlkIFVpZF90
LCBnaWQgR2lkX3QpIF9DX2ludAorZnVuYyBGY2hvd24oZmQgaW50LCB1aWQgaW50LCBnaWQgaW50
KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2ZjaG93bihfQ19pbnQo
ZmQpLCBVaWRfdCh1aWQpLCBHaWRfdChnaWQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5v
ID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgZmNudGwvX19nb19mY250bAorZnVuYyBmY250bChmZCBpbnQsIGNtZCBpbnQsIGFyZyBpbnQp
ICh2YWwgaW50LCBlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfX19nb19m
Y250bChfQ19pbnQoZmQpLCBfQ19pbnQoY21kKSwgX0NfaW50KGFyZykpCisJdmFsID0gKGludCko
X3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgewor
CQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxs
KCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGY250bEZsb2NrL19fZ29fZmNudGxf
ZmxvY2sKKy8vZXh0ZXJuIF9fZ29fZmNudGxfZmxvY2sKK2Z1bmMgY19fX2dvX2ZjbnRsX2Zsb2Nr
KGZkIF9DX2ludCwgY21kIF9DX2ludCwgYXJnICpGbG9ja190KSBfQ19pbnQKK2Z1bmMgRmNudGxG
bG9jayhmZCB1aW50cHRyLCBjbWQgaW50LCBsayAqRmxvY2tfdCkgKGVyciBlcnJvcikgeworCUVu
dGVyc3lzY2FsbCgpCisJX3IgOj0gY19fX2dvX2ZjbnRsX2Zsb2NrKF9DX2ludChmZCksIF9DX2lu
dChjbWQpLCBsaykKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9y
IDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhp
dHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9
CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZkYXRhc3luYy9mZGF0
YXN5bmMKKy8vZXh0ZXJuIGZkYXRhc3luYworZnVuYyBjX2ZkYXRhc3luYyhmZCBfQ19pbnQpIF9D
X2ludAorZnVuYyBGZGF0YXN5bmMoZmQgaW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxs
KCkKKwlfciA6PSBjX2ZkYXRhc3luYyhfQ19pbnQoZmQpKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgRnN5bmMvZnN5bmMKKy8vZXh0ZXJuIGZzeW5jCitmdW5jIGNfZnN5bmMoZmQgX0Nf
aW50KSBfQ19pbnQKK2Z1bmMgRnN5bmMoZmQgaW50KSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNj
YWxsKCkKKwlfciA6PSBjX2ZzeW5jKF9DX2ludChmZCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0
RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0
RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9
IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBHZXRlZ2lkL2dldGVnaWQKKy8vZXh0ZXJuIGdldGVnaWQKK2Z1bmMgY19nZXRlZ2lk
KCkgR2lkX3QKK2Z1bmMgR2V0ZWdpZCgpIChlZ2lkIGludCkgeworCV9yIDo9IGNfZ2V0ZWdpZCgp
CisJZWdpZCA9IChpbnQpKF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBHZXRldWlkL2dldGV1aWQKKy8vZXh0ZXJuIGdldGV1aWQKK2Z1bmMg
Y19nZXRldWlkKCkgVWlkX3QKK2Z1bmMgR2V0ZXVpZCgpIChldWlkIGludCkgeworCV9yIDo9IGNf
Z2V0ZXVpZCgpCisJZXVpZCA9IChpbnQpKF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXRnaWQvZ2V0Z2lkCisvL2V4dGVybiBnZXRnaWQK
K2Z1bmMgY19nZXRnaWQoKSBHaWRfdAorZnVuYyBHZXRnaWQoKSAoZ2lkIGludCkgeworCV9yIDo9
IGNfZ2V0Z2lkKCkKKwlnaWQgPSAoaW50KShfcikKKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cGdpZC9nZXRwZ2lkCisvL2V4dGVybiBnZXRw
Z2lkCitmdW5jIGNfZ2V0cGdpZChwaWQgUGlkX3QpIFBpZF90CitmdW5jIEdldHBnaWQocGlkIGlu
dCkgKHBnaWQgaW50LCBlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2dldHBnaWQoUGlkX3QocGlkKSkK
KwlwZ2lkID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdldHBncnAvZ2V0cGdycAorLy9leHRl
cm4gZ2V0cGdycAorZnVuYyBjX2dldHBncnAoKSBQaWRfdAorZnVuYyBHZXRwZ3JwKCkgKHBpZCBp
bnQpIHsKKwlfciA6PSBjX2dldHBncnAoKQorCXBpZCA9IChpbnQpKF9yKQorCXJldHVybgorfQor
CisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXRwaWQvZ2V0cGlkCitm
dW5jIEdldHBpZCgpIChwaWQgaW50KSB7CisJX3IgOj0gY19nZXRwaWQoKQorCXBpZCA9IChpbnQp
KF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBHZXRwcGlkL2dldHBwaWQKK2Z1bmMgR2V0cHBpZCgpIChwcGlkIGludCkgeworCV9yIDo9IGNf
Z2V0cHBpZCgpCisJcHBpZCA9IChpbnQpKF9yKQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXRwcmlvcml0eS9nZXRwcmlvcml0eQorLy9leHRl
cm4gZ2V0cHJpb3JpdHkKK2Z1bmMgY19nZXRwcmlvcml0eSh3aGljaCBfQ19pbnQsIHdobyBfQ19p
bnQpIF9DX2ludAorZnVuYyBHZXRwcmlvcml0eSh3aGljaCBpbnQsIHdobyBpbnQpIChwcmlvIGlu
dCwgZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2dldHByaW9yaXR5KF9D
X2ludCh3aGljaCksIF9DX2ludCh3aG8pKQorCXByaW8gPSAoaW50KShfcikKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5v
IHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIEdldHJ1c2FnZS9nZXRydXNhZ2UKKy8vZXh0ZXJuIGdldHJ1c2Fn
ZQorZnVuYyBjX2dldHJ1c2FnZSh3aG8gX0NfaW50LCBydXNhZ2UgKlJ1c2FnZSkgX0NfaW50Citm
dW5jIEdldHJ1c2FnZSh3aG8gaW50LCBydXNhZ2UgKlJ1c2FnZSkgKGVyciBlcnJvcikgeworCV9y
IDo9IGNfZ2V0cnVzYWdlKF9DX2ludCh3aG8pLCBydXNhZ2UpCisJdmFyIGVycm5vIEVycm5vCisJ
c2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJ
c2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJ
cmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGdldHRp
bWVvZmRheS9nZXR0aW1lb2ZkYXkKKy8vZXh0ZXJuIGdldHRpbWVvZmRheQorZnVuYyBjX2dldHRp
bWVvZmRheSh0diAqVGltZXZhbCwgdHogKmJ5dGUpIF9DX2ludAorZnVuYyBnZXR0aW1lb2ZkYXko
dHYgKlRpbWV2YWwsIHR6ICpieXRlKSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19nZXR0aW1lb2Zk
YXkodHYsIHR6KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXR1aWQvZ2V0dWlkCisvL2V4dGVybiBnZXR1aWQK
K2Z1bmMgY19nZXR1aWQoKSBVaWRfdAorZnVuYyBHZXR1aWQoKSAodWlkIGludCkgeworCV9yIDo9
IGNfZ2V0dWlkKCkKKwl1aWQgPSAoaW50KShfcikKKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgS2lsbC9raWxsCitmdW5jIEtpbGwocGlkIGludCwg
c2lnIFNpZ25hbCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNfa2lsbChQaWRfdChwaWQpLCBfQ19p
bnQoc2lnKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwg
MCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0
RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTGNob3duL2xjaG93bgorLy9leHRlcm4gbGNob3duCitm
dW5jIGNfbGNob3duKHBhdGggKmJ5dGUsIHVpZCBVaWRfdCwgZ2lkIEdpZF90KSBfQ19pbnQKK2Z1
bmMgTGNob3duKHBhdGggc3RyaW5nLCB1aWQgaW50LCBnaWQgaW50KSAoZXJyIGVycm9yKSB7CisJ
dmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBl
cnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19sY2hv
d24oX3AxLCBVaWRfdCh1aWQpLCBHaWRfdChnaWQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVy
cm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVy
cm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBl
cnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgTGluay9saW5rCisvL2V4dGVybiBsaW5rCitmdW5jIGNfbGluayhvbGRwYXRoICpieXRl
LCBuZXdwYXRoICpieXRlKSBfQ19pbnQKK2Z1bmMgTGluayhvbGRwYXRoIHN0cmluZywgbmV3cGF0
aCBzdHJpbmcpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRl
UHRyRnJvbVN0cmluZyhvbGRwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJ
dmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcobmV3cGF0aCkKKwlp
ZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19s
aW5rKF9wMSwgX3AyKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYg
X3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlF
eGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4K
K30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTWtkaXIvbWtkaXIK
Ky8vZXh0ZXJuIG1rZGlyCitmdW5jIGNfbWtkaXIocGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3QpIF9D
X2ludAorZnVuYyBNa2RpcihwYXRoIHN0cmluZywgbW9kZSB1aW50MzIpIChlcnIgZXJyb3IpIHsK
Kwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlm
IGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX21r
ZGlyKF9wMSwgTW9kZV90KG1vZGUpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZh
bHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1
ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0K
KwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTWtu
b2QvbWtub2QKKy8vZXh0ZXJuIG1rbm9kCitmdW5jIGNfbWtub2QocGF0aCAqYnl0ZSwgbW9kZSBN
b2RlX3QsIGRldiBfZGV2X3QpIF9DX2ludAorZnVuYyBNa25vZChwYXRoIHN0cmluZywgbW9kZSB1
aW50MzIsIGRldiBpbnQpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIg
PSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9
CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX21rbm9kKF9wMSwgTW9kZV90KG1vZGUpLCBfZGV2
X3QoZGV2KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwg
MCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5
c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisK
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE1vdW50L21vdW50CisvL2V4
dGVybiBtb3VudAorZnVuYyBjX21vdW50KHNvdXJjZSAqYnl0ZSwgdGFyZ2V0ICpieXRlLCBmc3R5
cGUgKmJ5dGUsIGZsYWdzIF9DX2xvbmcsIGRhdGEgKmJ5dGUpIF9DX2ludAorZnVuYyBNb3VudChz
b3VyY2Ugc3RyaW5nLCB0YXJnZXQgc3RyaW5nLCBmc3R5cGUgc3RyaW5nLCBmbGFncyB1aW50cHRy
LCBkYXRhIHN0cmluZykgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9
IEJ5dGVQdHJGcm9tU3RyaW5nKHNvdXJjZSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJ
fQorCXZhciBfcDIgKmJ5dGUKKwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHRhcmdldCkK
KwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCXZhciBfcDMgKmJ5dGUKKwlfcDMsIGVy
ciA9IEJ5dGVQdHJGcm9tU3RyaW5nKGZzdHlwZSkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJu
CisJfQorCXZhciBfcDUgKmJ5dGUKKwlfcDUsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKGRhdGEp
CisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9
IGNfbW91bnQoX3AxLCBfcDIsIF9wMywgX0NfbG9uZyhmbGFncyksIF9wNSkKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5v
IHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIE5hbm9zbGVlcC9uYW5vc2xlZXAKKy8vZXh0ZXJuIG5hbm9zbGVl
cAorZnVuYyBjX25hbm9zbGVlcCh0aW1lICpUaW1lc3BlYywgbGVmdG92ZXIgKlRpbWVzcGVjKSBf
Q19pbnQKK2Z1bmMgTmFub3NsZWVwKHRpbWUgKlRpbWVzcGVjLCBsZWZ0b3ZlciAqVGltZXNwZWMp
IChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbmFub3NsZWVwKHRpbWUs
IGxlZnRvdmVyKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0
c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30K
KworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUGF1c2UvcGF1c2UKKy8v
ZXh0ZXJuIHBhdXNlCitmdW5jIGNfcGF1c2UoKSBfQ19pbnQKK2Z1bmMgUGF1c2UoKSAoZXJyIGVy
cm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3BhdXNlKCkKKwl2YXIgZXJybm8gRXJy
bm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8o
KQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsK
KwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJh
dGVkIHdyYXBwZXIgZm9yIHJlYWQvcmVhZAorLy9leHRlcm4gcmVhZAorZnVuYyBjX3JlYWQoZmQg
X0NfaW50LCBidWYgKmJ5dGUsIGNvdW50IFNpemVfdCkgU3NpemVfdAorZnVuYyByZWFkKGZkIGlu
dCwgcCBbXWJ5dGUpIChuIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCWlmIGxl
bihwKSA+IDAgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkKKwl9IGVs
c2UgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVy
c3lzY2FsbCgpCisJX3IgOj0gY19yZWFkKF9DX2ludChmZCksIF9wMiwgU2l6ZV90KGxlbihwKSkp
CisJbiA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJ
aWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0K
KwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1
cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmVhZGxlbi9y
ZWFkCitmdW5jIHJlYWRsZW4oZmQgaW50LCBwICpieXRlLCBucCBpbnQpIChuIGludCwgZXJyIGVy
cm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3JlYWQoX0NfaW50KGZkKSwgcCwgU2l6
ZV90KG5wKSkKKwluID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBS
ZWFkbGluay9yZWFkbGluaworLy9leHRlcm4gcmVhZGxpbmsKK2Z1bmMgY19yZWFkbGluayhwYXRo
ICpieXRlLCBidWYgKmJ5dGUsIGJ1ZnNpeiBTaXplX3QpIFNzaXplX3QKK2Z1bmMgUmVhZGxpbmso
cGF0aCBzdHJpbmcsIGJ1ZiBbXWJ5dGUpIChuIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMSAq
Ynl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmls
IHsKKwkJcmV0dXJuCisJfQorCXZhciBfcDIgKmJ5dGUKKwlpZiBsZW4oYnVmKSA+IDAgeworCQlf
cDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZidWZbMF0pKQorCX0gZWxzZSB7CisJCV9wMiA9
ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlf
ciA6PSBjX3JlYWRsaW5rKF9wMSwgX3AyLCBTaXplX3QobGVuKGJ1ZikpKQorCW4gPSAoaW50KShf
cikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJ
CWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwo
KQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFJlbmFtZS9yZW5hbWUKKy8vZXh0ZXJu
IHJlbmFtZQorZnVuYyBjX3JlbmFtZShvbGRwYXRoICpieXRlLCBuZXdwYXRoICpieXRlKSBfQ19p
bnQKK2Z1bmMgUmVuYW1lKG9sZHBhdGggc3RyaW5nLCBuZXdwYXRoIHN0cmluZykgKGVyciBlcnJv
cikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKG9sZHBh
dGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwl2YXIgX3AyICpieXRlCisJX3Ay
LCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhuZXdwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQly
ZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3JlbmFtZShfcDEsIF9wMikKKwl2
YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5v
ID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlm
IHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFJtZGlyL3JtZGlyCisvL2V4dGVybiBybWRpcgor
ZnVuYyBjX3JtZGlyKHBhdGggKmJ5dGUpIF9DX2ludAorZnVuYyBSbWRpcihwYXRoIHN0cmluZykg
KGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3Ry
aW5nKHBhdGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwo
KQorCV9yIDo9IGNfcm1kaXIoX3AxKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZh
bHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1
ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0K
KwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0
ZG9tYWlubmFtZS9zZXRkb21haW5uYW1lCisvL2V4dGVybiBzZXRkb21haW5uYW1lCitmdW5jIGNf
c2V0ZG9tYWlubmFtZShuYW1lICpieXRlLCBsZW4gU2l6ZV90KSBfQ19pbnQKK2Z1bmMgU2V0ZG9t
YWlubmFtZShwIFtdYnl0ZSkgKGVyciBlcnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlpZiBsZW4o
cCkgPiAwIHsKKwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmcFswXSkpCisJfSBlbHNl
IHsKKwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQorCX0KKwlFbnRlcnN5
c2NhbGwoKQorCV9yIDo9IGNfc2V0ZG9tYWlubmFtZShfcDEsIFNpemVfdChsZW4ocCkpKQorCXZh
ciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8g
PSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYg
c2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0aG9zdG5hbWUvc2V0aG9zdG5hbWUKKy8vZXh0
ZXJuIHNldGhvc3RuYW1lCitmdW5jIGNfc2V0aG9zdG5hbWUobmFtZSAqYnl0ZSwgbGVuIFNpemVf
dCkgX0NfaW50CitmdW5jIFNldGhvc3RuYW1lKHAgW11ieXRlKSAoZXJyIGVycm9yKSB7CisJdmFy
IF9wMSAqYnl0ZQorCWlmIGxlbihwKSA+IDAgeworCQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2lu
dGVyKCZwWzBdKSkKKwl9IGVsc2UgeworCQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZf
emVybykpCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19zZXRob3N0bmFtZShfcDEsIFNp
emVfdChsZW4ocCkpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYg
X3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlF
eGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4K
K30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0Z2lkL3NldGdp
ZAorLy9leHRlcm4gc2V0Z2lkCitmdW5jIGNfc2V0Z2lkKGdpZCBHaWRfdCkgX0NfaW50CitmdW5j
IFNldGdpZChnaWQgaW50KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19zZXRnaWQoR2lkX3QoZ2lk
KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJ
CWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgU2V0cmVnaWQvc2V0cmVnaWQKKy8vZXh0ZXJuIHNldHJlZ2lkCitm
dW5jIGNfc2V0cmVnaWQocmdpZCBHaWRfdCwgZWdpZCBHaWRfdCkgX0NfaW50CitmdW5jIFNldHJl
Z2lkKHJnaWQgaW50LCBlZ2lkIGludCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNfc2V0cmVnaWQo
R2lkX3QocmdpZCksIEdpZF90KGVnaWQpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9
IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0g
dHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQor
CisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRwZ2lkL3NldHBnaWQK
K2Z1bmMgU2V0cGdpZChwaWQgaW50LCBwZ2lkIGludCkgKGVyciBlcnJvcikgeworCV9yIDo9IGNf
c2V0cGdpZChQaWRfdChwaWQpLCBQaWRfdChwZ2lkKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRF
cnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRF
cnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1
cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cHJpb3Jp
dHkvc2V0cHJpb3JpdHkKKy8vZXh0ZXJuIHNldHByaW9yaXR5CitmdW5jIGNfc2V0cHJpb3JpdHko
d2hpY2ggX0NfaW50LCB3aG8gX0NfaW50LCBwcmlvIF9DX2ludCkgX0NfaW50CitmdW5jIFNldHBy
aW9yaXR5KHdoaWNoIGludCwgd2hvIGludCwgcHJpbyBpbnQpIChlcnIgZXJyb3IpIHsKKwlFbnRl
cnN5c2NhbGwoKQorCV9yIDo9IGNfc2V0cHJpb3JpdHkoX0NfaW50KHdoaWNoKSwgX0NfaW50KHdo
byksIF9DX2ludChwcmlvKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQor
CWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9
CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldHJldWlk
L3NldHJldWlkCisvL2V4dGVybiBzZXRyZXVpZAorZnVuYyBjX3NldHJldWlkKHJ1aWQgVWlkX3Qs
IGV1aWQgVWlkX3QpIF9DX2ludAorZnVuYyBTZXRyZXVpZChydWlkIGludCwgZXVpZCBpbnQpIChl
cnIgZXJyb3IpIHsKKwlfciA6PSBjX3NldHJldWlkKFVpZF90KHJ1aWQpLCBVaWRfdChldWlkKSkK
Kwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVy
cm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgU2V0c2lkL3NldHNpZAorZnVuYyBTZXRzaWQoKSAocGlkIGludCwgZXJy
IGVycm9yKSB7CisJX3IgOj0gY19zZXRzaWQoKQorCXBpZCA9IChpbnQpKF9yKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBzZXR0aW1lb2ZkYXkvc2V0dGltZW9mZGF5CisvL2V4dGVybiBzZXR0aW1lb2ZkYXkKK2Z1
bmMgY19zZXR0aW1lb2ZkYXkodHYgKlRpbWV2YWwsIHR6ICpieXRlKSBfQ19pbnQKK2Z1bmMgc2V0
dGltZW9mZGF5KHR2ICpUaW1ldmFsLCB0eiAqYnl0ZSkgKGVyciBlcnJvcikgeworCV9yIDo9IGNf
c2V0dGltZW9mZGF5KHR2LCB0eikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxz
ZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUK
Kwl9CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0dWlkL3NldHVpZAorLy9leHRl
cm4gc2V0dWlkCitmdW5jIGNfc2V0dWlkKHVpZCBVaWRfdCkgX0NfaW50CitmdW5jIFNldHVpZCh1
aWQgaW50KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19zZXR1aWQoVWlkX3QodWlkKSkKKwl2YXIg
ZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0g
R2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgU3ltbGluay9zeW1saW5rCisvL2V4dGVybiBzeW1saW5rCitmdW5jIGNfc3ltbGlu
ayhvbGRwYXRoICpieXRlLCBuZXdwYXRoICpieXRlKSBfQ19pbnQKK2Z1bmMgU3ltbGluayhvbGRw
YXRoIHN0cmluZywgbmV3cGF0aCBzdHJpbmcpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRl
CisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhvbGRwYXRoKQorCWlmIGVyciAhPSBuaWwg
eworCQlyZXR1cm4KKwl9CisJdmFyIF9wMiAqYnl0ZQorCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21T
dHJpbmcobmV3cGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lz
Y2FsbCgpCisJX3IgOj0gY19zeW1saW5rKF9wMSwgX3AyKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgU3luYy9zeW5jCisvL2V4dGVybiBzeW5jCitmdW5jIGNfc3luYygpIAorZnVuYyBT
eW5jKCkgeworCUVudGVyc3lzY2FsbCgpCisJY19zeW5jKCkKKwlFeGl0c3lzY2FsbCgpCit9CisK
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFRpbWUvdGltZQorLy9leHRl
cm4gdGltZQorZnVuYyBjX3RpbWUodCAqVGltZV90KSBUaW1lX3QKK2Z1bmMgVGltZSh0ICpUaW1l
X3QpICh0dCBUaW1lX3QsIGVyciBlcnJvcikgeworCV9yIDo9IGNfdGltZSh0KQorCXR0ID0gKFRp
bWVfdCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8
IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNl
dEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFRpbWVzL3RpbWVzCisvL2V4dGVybiB0aW1lcworZnVu
YyBjX3RpbWVzKHRtcyAqVG1zKSBfY2xvY2tfdAorZnVuYyBUaW1lcyh0bXMgKlRtcykgKHRpY2tz
IHVpbnRwdHIsIGVyciBlcnJvcikgeworCV9yIDo9IGNfdGltZXModG1zKQorCXRpY2tzID0gKHVp
bnRwdHIpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBVbWFzay91bWFzaworLy9leHRlcm4gdW1hc2sKK2Z1
bmMgY191bWFzayhtYXNrIE1vZGVfdCkgTW9kZV90CitmdW5jIFVtYXNrKG1hc2sgaW50KSAob2xk
bWFzayBpbnQpIHsKKwlfciA6PSBjX3VtYXNrKE1vZGVfdChtYXNrKSkKKwlvbGRtYXNrID0gKGlu
dCkoX3IpCisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIFVubGluay91bmxpbmsKKy8vZXh0ZXJuIHVubGluaworZnVuYyBjX3VubGluayhwYXRoICpi
eXRlKSBfQ19pbnQKK2Z1bmMgVW5saW5rKHBhdGggc3RyaW5nKSAoZXJyIGVycm9yKSB7CisJdmFy
IF9wMSAqYnl0ZQorCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIg
IT0gbmlsIHsKKwkJcmV0dXJuCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY191bmxpbmso
X3AxKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsK
KwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2Fs
bCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVXRpbWUvdXRpbWUKKy8vZXh0ZXJu
IHV0aW1lCitmdW5jIGNfdXRpbWUocGF0aCAqYnl0ZSwgYnVmICpVdGltYnVmKSBfQ19pbnQKK2Z1
bmMgVXRpbWUocGF0aCBzdHJpbmcsIGJ1ZiAqVXRpbWJ1ZikgKGVyciBlcnJvcikgeworCXZhciBf
cDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYgZXJyICE9
IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfdXRpbWUoX3Ax
LCBidWYpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAg
eworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNj
YWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciB3cml0ZS93cml0ZQorZnVuYyB3
cml0ZShmZCBpbnQsIHAgW11ieXRlKSAobiBpbnQsIGVyciBlcnJvcikgeworCXZhciBfcDIgKmJ5
dGUKKwlpZiBsZW4ocCkgPiAwIHsKKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmcFsw
XSkpCisJfSBlbHNlIHsKKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQor
CX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfd3JpdGUoX0NfaW50KGZkKSwgX3AyLCBTaXpl
X3QobGVuKHApKSkKKwluID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8g
Oj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8g
PSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5v
CisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciB3cml0ZWxlbi93cml0ZQorZnVuYyB3cml0ZWxlbihmZCBpbnQsIHAgKmJ5dGUsIG5wIGludCkg
KG4gaW50LCBlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfd3JpdGUoX0Nf
aW50KGZkKSwgcCwgU2l6ZV90KG5wKSkKKwluID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5v
CisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkK
KwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJ
CWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCB3cmFwcGVyIGZvciBtdW5tYXAvbXVubWFwCisvL2V4dGVybiBtdW5tYXAKK2Z1bmMgY19tdW5t
YXAoYWRkciAqYnl0ZSwgbGVuZ3RoIFNpemVfdCkgX0NfaW50CitmdW5jIG11bm1hcChhZGRyIHVp
bnRwdHIsIGxlbmd0aCB1aW50cHRyKSAoZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlf
ciA6PSBjX211bm1hcCgoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKGFkZHIpKSwgU2l6ZV90KGxlbmd0
aCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgewor
CQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxs
KCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNYWR2aXNlL21hZHZpc2UKKy8vZXh0
ZXJuIG1hZHZpc2UKK2Z1bmMgY19tYWR2aXNlKGFkZHIgKmJ5dGUsIGxlbiBTaXplX3QsIGFkdmlj
ZSBfQ19pbnQpIF9DX2ludAorZnVuYyBNYWR2aXNlKGIgW11ieXRlLCBhZHZpY2UgaW50KSAoZXJy
IGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCWlmIGxlbihiKSA+IDAgeworCQlfcDEgPSAoKmJ5
dGUpKHVuc2FmZS5Qb2ludGVyKCZiWzBdKSkKKwl9IGVsc2UgeworCQlfcDEgPSAoKmJ5dGUpKHVu
c2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19tYWR2
aXNlKF9wMSwgU2l6ZV90KGxlbihiKSksIF9DX2ludChhZHZpY2UpKQorCXZhciBlcnJubyBFcnJu
bworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygp
CisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8gewor
CQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgTXByb3RlY3QvbXByb3RlY3QKKy8vZXh0ZXJuIG1wcm90ZWN0CitmdW5j
IGNfbXByb3RlY3QoYWRkciAqYnl0ZSwgbGVuIFNpemVfdCwgcHJvdCBfQ19pbnQpIF9DX2ludAor
ZnVuYyBNcHJvdGVjdChiIFtdYnl0ZSwgcHJvdCBpbnQpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3Ax
ICpieXRlCisJaWYgbGVuKGIpID4gMCB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIo
JmJbMF0pKQorCX0gZWxzZSB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJv
KSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX21wcm90ZWN0KF9wMSwgU2l6ZV90KGxl
bihiKSksIF9DX2ludChwcm90KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxz
ZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUK
Kwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJ
cmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE1sb2Nr
L21sb2NrCisvL2V4dGVybiBtbG9jaworZnVuYyBjX21sb2NrKGFkZHIgKmJ5dGUsIGxlbiBTaXpl
X3QpIF9DX2ludAorZnVuYyBNbG9jayhiIFtdYnl0ZSkgKGVyciBlcnJvcikgeworCXZhciBfcDEg
KmJ5dGUKKwlpZiBsZW4oYikgPiAwIHsKKwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigm
YlswXSkpCisJfSBlbHNlIHsKKwkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8p
KQorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbWxvY2soX3AxLCBTaXplX3QobGVuKGIp
KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJ
CWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwo
KQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE11bmxvY2svbXVubG9jaworLy9leHRl
cm4gbXVubG9jaworZnVuYyBjX211bmxvY2soYWRkciAqYnl0ZSwgbGVuIFNpemVfdCkgX0NfaW50
CitmdW5jIE11bmxvY2soYiBbXWJ5dGUpIChlcnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJ
aWYgbGVuKGIpID4gMCB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJmJbMF0pKQor
CX0gZWxzZSB7CisJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJ
RW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX211bmxvY2soX3AxLCBTaXplX3QobGVuKGIpKSkKKwl2
YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5v
ID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlm
IHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE1sb2NrYWxsL21sb2NrYWxsCisvL2V4dGVybiBt
bG9ja2FsbAorZnVuYyBjX21sb2NrYWxsKGZsYWdzIF9DX2ludCkgX0NfaW50CitmdW5jIE1sb2Nr
YWxsKGZsYWdzIGludCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19t
bG9ja2FsbChfQ19pbnQoZmxhZ3MpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZh
bHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1
ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0K
KwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTXVu
bG9ja2FsbC9tdW5sb2NrYWxsCisvL2V4dGVybiBtdW5sb2NrYWxsCitmdW5jIGNfbXVubG9ja2Fs
bCgpIF9DX2ludAorZnVuYyBNdW5sb2NrYWxsKCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2Fs
bCgpCisJX3IgOj0gY19tdW5sb2NrYWxsKCkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6
PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9
IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8K
Kwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IFRjZ2V0YXR0ci90Y2dldGF0dHIKKy8vZXh0ZXJuIHRjZ2V0YXR0cgorZnVuYyBjX3RjZ2V0YXR0
cihmZCBfQ19pbnQsIHAgKlRlcm1pb3MpIF9DX2ludAorZnVuYyBUY2dldGF0dHIoZmQgaW50LCBw
ICpUZXJtaW9zKSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY190Y2dldGF0dHIoX0NfaW50KGZkKSwg
cCkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJ
CWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgVGNzZXRhdHRyL3Rjc2V0YXR0cgorLy9leHRlcm4gdGNzZXRhdHRy
CitmdW5jIGNfdGNzZXRhdHRyKGZkIF9DX2ludCwgYWN0aW9ucyBfQ19pbnQsIHAgKlRlcm1pb3Mp
IF9DX2ludAorZnVuYyBUY3NldGF0dHIoZmQgaW50LCBhY3Rpb25zIGludCwgcCAqVGVybWlvcykg
KGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY190Y3NldGF0dHIoX0NfaW50
KGZkKSwgX0NfaW50KGFjdGlvbnMpLCBwKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9
IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0g
dHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubwor
CX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Ig
c3lzY29uZi9zeXNjb25mCisvL2V4dGVybiBzeXNjb25mCitmdW5jIGNfc3lzY29uZihuYW1lIF9D
X2ludCkgX0NfbG9uZworZnVuYyBzeXNjb25mKG5hbWUgaW50KSAocmV0IGludDY0LCBlcnIgZXJy
b3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfc3lzY29uZihfQ19pbnQobmFtZSkpCisJ
cmV0ID0gKGludDY0KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQor
CWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9
CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZzdGF0L2Zz
dGF0NjQKKy8vZXh0ZXJuIGZzdGF0NjQKK2Z1bmMgY19mc3RhdDY0KGZkIF9DX2ludCwgc3RhdCAq
U3RhdF90KSBfQ19pbnQKK2Z1bmMgRnN0YXQoZmQgaW50LCBzdGF0ICpTdGF0X3QpIChlcnIgZXJy
b3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfZnN0YXQ2NChfQ19pbnQoZmQpLCBzdGF0
KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJ
ZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgp
CisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRnRydW5jYXRlL2Z0cnVuY2F0ZTY0Cisv
L2V4dGVybiBmdHJ1bmNhdGU2NAorZnVuYyBjX2Z0cnVuY2F0ZTY0KGZkIF9DX2ludCwgbGVuZ3Ro
IE9mZnNldF90KSBfQ19pbnQKK2Z1bmMgRnRydW5jYXRlKGZkIGludCwgbGVuZ3RoIGludDY0KSAo
ZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2Z0cnVuY2F0ZTY0KF9DX2lu
dChmZCksIE9mZnNldF90KGxlbmd0aCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBH
ZXRybGltaXQvZ2V0cmxpbWl0NjQKKy8vZXh0ZXJuIGdldHJsaW1pdDY0CitmdW5jIGNfZ2V0cmxp
bWl0NjQocmVzb3VyY2UgX0NfaW50LCBybGltICpSbGltaXQpIF9DX2ludAorZnVuYyBHZXRybGlt
aXQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2dl
dHJsaW1pdDY0KF9DX2ludChyZXNvdXJjZSksIHJsaW0pCisJdmFyIGVycm5vIEVycm5vCisJc2V0
RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0
RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0
dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIExzdGF0L2xz
dGF0NjQKKy8vZXh0ZXJuIGxzdGF0NjQKK2Z1bmMgY19sc3RhdDY0KHBhdGggKmJ5dGUsIHN0YXQg
KlN0YXRfdCkgX0NfaW50CitmdW5jIExzdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChl
cnIgZXJyb3IpIHsKKwl2YXIgX3AxICpieXRlCisJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmlu
ZyhwYXRoKQorCWlmIGVyciAhPSBuaWwgeworCQlyZXR1cm4KKwl9CisJRW50ZXJzeXNjYWxsKCkK
KwlfciA6PSBjX2xzdGF0NjQoX3AxLCBzdGF0KQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5v
ID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJu
bworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgbW1hcC9tbWFwNjQKKy8vZXh0ZXJuIG1tYXA2NAorZnVuYyBjX21tYXA2NChhZGRyICpieXRl
LCBsZW5ndGggU2l6ZV90LCBwcm90IF9DX2ludCwgZmxhZ3MgX0NfaW50LCBmZCBfQ19pbnQsIG9m
ZnNldCBPZmZzZXRfdCkgKmJ5dGUKK2Z1bmMgbW1hcChhZGRyIHVpbnRwdHIsIGxlbmd0aCB1aW50
cHRyLCBwcm90IGludCwgZmxhZ3MgaW50LCBmZCBpbnQsIG9mZnNldCBpbnQ2NCkgKHhhZGRyIHVp
bnRwdHIsIGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19tbWFwNjQoKCpi
eXRlKSh1bnNhZmUuUG9pbnRlcihhZGRyKSksIFNpemVfdChsZW5ndGgpLCBfQ19pbnQocHJvdCks
IF9DX2ludChmbGFncyksIF9DX2ludChmZCksIE9mZnNldF90KG9mZnNldCkpCisJeGFkZHIgPSAo
dWludHB0cikodW5zYWZlLlBvaW50ZXIoX3IpKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPT0gbmlsIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVy
cm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBl
cnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgT3Blbi9fX2dvX29wZW42NAorLy9leHRlcm4gX19nb19vcGVuNjQKK2Z1bmMgY19fX2dv
X29wZW42NChwYXRoICpieXRlLCBtb2RlIF9DX2ludCwgcGVybSBNb2RlX3QpIF9DX2ludAorZnVu
YyBPcGVuKHBhdGggc3RyaW5nLCBtb2RlIGludCwgcGVybSB1aW50MzIpIChmZCBpbnQsIGVyciBl
cnJvcikgeworCXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBh
dGgpCisJaWYgZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9y
IDo9IGNfX19nb19vcGVuNjQoX3AxLCBfQ19pbnQobW9kZSksIE1vZGVfdChwZXJtKSkKKwlmZCA9
IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3Ig
PCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0
c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30K
KworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUHJlYWQvcHJlYWQ2NAor
Ly9leHRlcm4gcHJlYWQ2NAorZnVuYyBjX3ByZWFkNjQoZmQgX0NfaW50LCBidWYgKmJ5dGUsIGNv
dW50IFNpemVfdCwgb2Zmc2V0IE9mZnNldF90KSBTc2l6ZV90CitmdW5jIFByZWFkKGZkIGludCwg
cCBbXWJ5dGUsIG9mZnNldCBpbnQ2NCkgKG4gaW50LCBlcnIgZXJyb3IpIHsKKwl2YXIgX3AyICpi
eXRlCisJaWYgbGVuKHApID4gMCB7CisJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJnBb
MF0pKQorCX0gZWxzZSB7CisJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkK
Kwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX3ByZWFkNjQoX0NfaW50KGZkKSwgX3AyLCBT
aXplX3QobGVuKHApKSwgT2Zmc2V0X3Qob2Zmc2V0KSkKKwluID0gKGludCkoX3IpCisJdmFyIGVy
cm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdl
dEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRF
cnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5
IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBQd3JpdGUvcHdyaXRlNjQKKy8vZXh0ZXJuIHB3cml0ZTY0
CitmdW5jIGNfcHdyaXRlNjQoZmQgX0NfaW50LCBidWYgKmJ5dGUsIGNvdW50IFNpemVfdCwgb2Zm
c2V0IE9mZnNldF90KSBTc2l6ZV90CitmdW5jIFB3cml0ZShmZCBpbnQsIHAgW11ieXRlLCBvZmZz
ZXQgaW50NjQpIChuIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCWlmIGxlbihw
KSA+IDAgeworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkKKwl9IGVsc2Ug
eworCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVyc3lz
Y2FsbCgpCisJX3IgOj0gY19wd3JpdGU2NChfQ19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4ocCkp
LCBPZmZzZXRfdChvZmZzZXQpKQorCW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJy
ID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIFNlZWsvbHNlZWs2NAorLy9leHRlcm4gbHNlZWs2NAorZnVuYyBjX2xzZWVrNjQo
ZmQgX0NfaW50LCBvZmZzZXQgT2Zmc2V0X3QsIHdoZW5jZSBfQ19pbnQpIE9mZnNldF90CitmdW5j
IFNlZWsoZmQgaW50LCBvZmZzZXQgaW50NjQsIHdoZW5jZSBpbnQpIChvZmYgaW50NjQsIGVyciBl
cnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19sc2VlazY0KF9DX2ludChmZCksIE9m
ZnNldF90KG9mZnNldCksIF9DX2ludCh3aGVuY2UpKQorCW9mZiA9IChpbnQ2NCkoX3IpCisJdmFy
IGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9
IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBz
ZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRybGltaXQvc2V0cmxpbWl0NjQKKy8vZXh0ZXJu
IHNldHJsaW1pdDY0CitmdW5jIGNfc2V0cmxpbWl0NjQocmVzb3VyY2UgaW50LCBybGltICpSbGlt
aXQpIF9DX2ludAorZnVuYyBTZXRybGltaXQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIChl
cnIgZXJyb3IpIHsKKwlfciA6PSBjX3NldHJsaW1pdDY0KGludChyZXNvdXJjZSksIHJsaW0pCisJ
dmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJu
byA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIFN0YXQvc3RhdDY0CisvL2V4dGVybiBzdGF0NjQKK2Z1bmMgY19zdGF0NjQo
cGF0aCAqYnl0ZSwgc3RhdCAqU3RhdF90KSBfQ19pbnQKK2Z1bmMgU3RhdChwYXRoIHN0cmluZywg
c3RhdCAqU3RhdF90KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMSAqYnl0ZQorCV9wMSwgZXJyID0g
Qnl0ZVB0ckZyb21TdHJpbmcocGF0aCkKKwlpZiBlcnIgIT0gbmlsIHsKKwkJcmV0dXJuCisJfQor
CUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19zdGF0NjQoX3AxLCBzdGF0KQorCXZhciBlcnJubyBF
cnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJu
bygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgVHJ1bmNhdGUvdHJ1bmNhdGU2NAorLy9leHRlcm4gdHJ1bmNhdGU2
NAorZnVuYyBjX3RydW5jYXRlNjQocGF0aCAqYnl0ZSwgbGVuZ3RoIE9mZnNldF90KSBfQ19pbnQK
K2Z1bmMgVHJ1bmNhdGUocGF0aCBzdHJpbmcsIGxlbmd0aCBpbnQ2NCkgKGVyciBlcnJvcikgewor
CXZhciBfcDEgKmJ5dGUKKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpCisJaWYg
ZXJyICE9IG5pbCB7CisJCXJldHVybgorCX0KKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfdHJ1
bmNhdGU2NChfcDEsIE9mZnNldF90KGxlbmd0aCkpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJy
bm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJy
bm8gPSB0cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVy
cm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBVbmFtZS91bmFtZQorLy9leHRlcm4gdW5hbWUKK2Z1bmMgY191bmFtZShidWYgKlV0c25h
bWUpIF9DX2ludAorZnVuYyBVbmFtZShidWYgKlV0c25hbWUpIChlcnIgZXJyb3IpIHsKKwlfciA6
PSBjX3VuYW1lKGJ1ZikKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
aWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Igd2FpdDQvd2FpdDQKKy8vZXh0ZXJuIHdhaXQ0
CitmdW5jIGNfd2FpdDQocGlkIFBpZF90LCBzdGF0dXMgKl9DX2ludCwgb3B0aW9ucyBfQ19pbnQs
IHJ1c2FnZSAqUnVzYWdlKSBQaWRfdAorZnVuYyB3YWl0NChwaWQgUGlkX3QsIHN0YXR1cyAqX0Nf
aW50LCBvcHRpb25zIGludCwgcnVzYWdlICpSdXNhZ2UpICh3cGlkIFBpZF90LCBlcnIgZXJyb3Ip
IHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfd2FpdDQoUGlkX3QocGlkKSwgc3RhdHVzLCBf
Q19pbnQob3B0aW9ucyksIHJ1c2FnZSkKKwl3cGlkID0gKFBpZF90KShfcikKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5v
IHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIGFjY2VwdC9hY2NlcHQKKy8vZXh0ZXJuIGFjY2VwdAorZnVuYyBj
X2FjY2VwdChmZCBfQ19pbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVuX3QpIF9D
X2ludAorZnVuYyBhY2NlcHQoZmQgaW50LCBzYSAqUmF3U29ja2FkZHJBbnksIGxlbiAqU29ja2xl
bl90KSAobmZkIGludCwgZXJyIGVycm9yKSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2Fj
Y2VwdChfQ19pbnQoZmQpLCBzYSwgbGVuKQorCW5mZCA9IChpbnQpKF9yKQorCXZhciBlcnJubyBF
cnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJu
bygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8g
eworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgZ2V0c29ja25hbWUvZ2V0c29ja25hbWUKKy8vZXh0ZXJuIGdldHNv
Y2tuYW1lCitmdW5jIGNfZ2V0c29ja25hbWUoZmQgX0NfaW50LCBzYSAqUmF3U29ja2FkZHJBbnks
IGxlbiAqU29ja2xlbl90KSBfQ19pbnQKK2Z1bmMgZ2V0c29ja25hbWUoZmQgaW50LCBzYSAqUmF3
U29ja2FkZHJBbnksIGxlbiAqU29ja2xlbl90KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19nZXRz
b2NrbmFtZShfQ19pbnQoZmQpLCBzYSwgbGVuKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5v
IDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5v
ID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgor
fQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBnZXRwZWVybmFtZS9n
ZXRwZWVybmFtZQorLy9leHRlcm4gZ2V0cGVlcm5hbWUKK2Z1bmMgY19nZXRwZWVybmFtZShmZCBf
Q19pbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVuX3QpIF9DX2ludAorZnVuYyBn
ZXRwZWVybmFtZShmZCBpbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVuX3QpIChl
cnIgZXJyb3IpIHsKKwlfciA6PSBjX2dldHBlZXJuYW1lKF9DX2ludChmZCksIHNhLCBsZW4pCisJ
dmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJu
byA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIHNldHNvY2tvcHQvc2V0c29ja29wdAorLy9leHRlcm4gc2V0c29ja29wdAor
ZnVuYyBjX3NldHNvY2tvcHQocyBfQ19pbnQsIGxldmVsIF9DX2ludCwgb3B0bmFtZSBfQ19pbnQs
IHZhbCAqYnl0ZSwgdmFsbGVuIFNvY2tsZW5fdCkgX0NfaW50CitmdW5jIHNldHNvY2tvcHQocyBp
bnQsIGxldmVsIGludCwgbmFtZSBpbnQsIHZhbCB1bnNhZmUuUG9pbnRlciwgdmFsbGVuIFNvY2ts
ZW5fdCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19zZXRzb2Nrb3B0
KF9DX2ludChzKSwgX0NfaW50KGxldmVsKSwgX0NfaW50KG5hbWUpLCAoKmJ5dGUpKHZhbCksIFNv
Y2tsZW5fdCh2YWxsZW4pKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJ
aWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0K
KwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1
cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmVjdmZyb20v
cmVjdmZyb20KKy8vZXh0ZXJuIHJlY3Zmcm9tCitmdW5jIGNfcmVjdmZyb20oZmQgX0NfaW50LCBi
dWYgKmJ5dGUsIGxlbiBTaXplX3QsIGZsYWdzIF9DX2ludCwgZnJvbSAqUmF3U29ja2FkZHJBbnks
IGZyb21sZW4gKlNvY2tsZW5fdCkgU3NpemVfdAorZnVuYyByZWN2ZnJvbShmZCBpbnQsIHAgW11i
eXRlLCBmbGFncyBpbnQsIGZyb20gKlJhd1NvY2thZGRyQW55LCBmcm9tbGVuICpTb2NrbGVuX3Qp
IChuIGludCwgZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCWlmIGxlbihwKSA+IDAgewor
CQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkKKwl9IGVsc2UgeworCQlfcDIg
PSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpCisJfQorCUVudGVyc3lzY2FsbCgpCisJ
X3IgOj0gY19yZWN2ZnJvbShfQ19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4ocCkpLCBfQ19pbnQo
ZmxhZ3MpLCBmcm9tLCBmcm9tbGVuKQorCW4gPSAoaW50KShfcikKKwl2YXIgZXJybm8gRXJybm8K
KwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQor
CQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJ
ZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIExpc3Rlbi9saXN0ZW4KKy8vZXh0ZXJuIGxpc3RlbgorZnVuYyBjX2xpc3Rl
bihmZCBfQ19pbnQsIG4gX0NfaW50KSBfQ19pbnQKK2Z1bmMgTGlzdGVuKGZkIGludCwgbiBpbnQp
IChlcnIgZXJyb3IpIHsKKwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfbGlzdGVuKF9DX2ludChm
ZCksIF9DX2ludChuKSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlm
IF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJ
RXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJu
Cit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNodXRkb3duL3No
dXRkb3duCisvL2V4dGVybiBzaHV0ZG93bgorZnVuYyBjX3NodXRkb3duKGZkIF9DX2ludCwgaG93
IF9DX2ludCkgX0NfaW50CitmdW5jIFNodXRkb3duKGZkIGludCwgaG93IGludCkgKGVyciBlcnJv
cikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0gY19zaHV0ZG93bihfQ19pbnQoZmQpLCBfQ19p
bnQoaG93KSkKKwl2YXIgZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwg
MCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5
c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisK
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEVwb2xsQ3JlYXRlL2Vwb2xs
X2NyZWF0ZQorLy9leHRlcm4gZXBvbGxfY3JlYXRlCitmdW5jIGNfZXBvbGxfY3JlYXRlKHNpemUg
X0NfaW50KSBfQ19pbnQKK2Z1bmMgRXBvbGxDcmVhdGUoc2l6ZSBpbnQpIChmZCBpbnQsIGVyciBl
cnJvcikgeworCV9yIDo9IGNfZXBvbGxfY3JlYXRlKF9DX2ludChzaXplKSkKKwlmZCA9IChpbnQp
KF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsK
KwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJu
byB7CisJCWVyciA9IGVycm5vCisJfQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBFcG9sbENyZWF0ZTEvZXBvbGxfY3JlYXRlMQorLy9leHRlcm4g
ZXBvbGxfY3JlYXRlMQorZnVuYyBjX2Vwb2xsX2NyZWF0ZTEoZmxhZ3MgX0NfaW50KSBfQ19pbnQK
K2Z1bmMgRXBvbGxDcmVhdGUxKGZsYWdzIGludCkgKGZkIGludCwgZXJyIGVycm9yKSB7CisJX3Ig
Oj0gY19lcG9sbF9jcmVhdGUxKF9DX2ludChmbGFncykpCisJZmQgPSAoaW50KShfcikKKwl2YXIg
ZXJybm8gRXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0g
R2V0RXJybm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJaWYgc2V0RXJybm8geworCQllcnIg
PSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgRXBvbGxDdGwvZXBvbGxfY3RsCisvL2V4dGVybiBlcG9sbF9jdGwKK2Z1bmMgY19l
cG9sbF9jdGwoZXBmZCBfQ19pbnQsIG9wIF9DX2ludCwgZmQgX0NfaW50LCBldmVudCAqRXBvbGxF
dmVudCkgX0NfaW50CitmdW5jIEVwb2xsQ3RsKGVwZmQgaW50LCBvcCBpbnQsIGZkIGludCwgZXZl
bnQgKkVwb2xsRXZlbnQpIChlcnIgZXJyb3IpIHsKKwlfciA6PSBjX2Vwb2xsX2N0bChfQ19pbnQo
ZXBmZCksIF9DX2ludChvcCksIF9DX2ludChmZCksIGV2ZW50KQorCXZhciBlcnJubyBFcnJubwor
CXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJ
CXNldEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQor
CXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBFcG9s
bFdhaXQvZXBvbGxfd2FpdAorLy9leHRlcm4gZXBvbGxfd2FpdAorZnVuYyBjX2Vwb2xsX3dhaXQo
ZXBmZCBfQ19pbnQsIGV2ZW50cyAqRXBvbGxFdmVudCwgbWF4ZXZlbnRzIF9DX2ludCwgdGltZW91
dCBfQ19pbnQpIF9DX2ludAorZnVuYyBFcG9sbFdhaXQoZXBmZCBpbnQsIGV2ZW50cyBbXUVwb2xs
RXZlbnQsIG1zZWMgaW50KSAobiBpbnQsIGVyciBlcnJvcikgeworCXZhciBfcDIgKkVwb2xsRXZl
bnQKKwlpZiBsZW4oZXZlbnRzKSA+IDAgeworCQlfcDIgPSAoKkVwb2xsRXZlbnQpKHVuc2FmZS5Q
b2ludGVyKCZldmVudHNbMF0pKQorCX0gZWxzZSB7CisJCV9wMiA9ICgqRXBvbGxFdmVudCkodW5z
YWZlLlBvaW50ZXIoJl96ZXJvKSkKKwl9CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2Vwb2xs
X3dhaXQoX0NfaW50KGVwZmQpLCBfcDIsIF9DX2ludChsZW4oZXZlbnRzKSksIF9DX2ludChtc2Vj
KSkKKwluID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0gZmFsc2UK
KwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0cnVlCisJ
fQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBiaW5kL2Jp
bmQKKy8vZXh0ZXJuIGJpbmQKK2Z1bmMgY19iaW5kKGZkIF9DX2ludCwgc2EgKlJhd1NvY2thZGRy
QW55LCBsZW4gU29ja2xlbl90KSBfQ19pbnQKK2Z1bmMgYmluZChmZCBpbnQsIHNhICpSYXdTb2Nr
YWRkckFueSwgbGVuIFNvY2tsZW5fdCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJ
X3IgOj0gY19iaW5kKF9DX2ludChmZCksIHNhLCBTb2NrbGVuX3QobGVuKSkKKwl2YXIgZXJybm8g
RXJybm8KKwlzZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJy
bm8oKQorCQlzZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5v
IHsKKwkJZXJyID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIGNvbm5lY3QvY29ubmVjdAorLy9leHRlcm4gY29ubmVjdAorZnVu
YyBjX2Nvbm5lY3QocyBfQ19pbnQsIGFkZHIgKlJhd1NvY2thZGRyQW55LCBhZGRybGVuIFNvY2ts
ZW5fdCkgX0NfaW50CitmdW5jIGNvbm5lY3QocyBpbnQsIGFkZHIgKlJhd1NvY2thZGRyQW55LCBh
ZGRybGVuIFNvY2tsZW5fdCkgKGVyciBlcnJvcikgeworCUVudGVyc3lzY2FsbCgpCisJX3IgOj0g
Y19jb25uZWN0KF9DX2ludChzKSwgYWRkciwgU29ja2xlbl90KGFkZHJsZW4pKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJy
bm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3Igc29ja2V0L3NvY2tldAorLy9leHRlcm4gc29ja2V0CitmdW5j
IGNfc29ja2V0KGRvbWFpbiBfQ19pbnQsIHR5cCBfQ19pbnQsIHByb3RvY29sIF9DX2ludCkgX0Nf
aW50CitmdW5jIHNvY2tldChkb21haW4gaW50LCB0eXAgaW50LCBwcm90byBpbnQpIChmZCBpbnQs
IGVyciBlcnJvcikgeworCV9yIDo9IGNfc29ja2V0KF9DX2ludChkb21haW4pLCBfQ19pbnQodHlw
KSwgX0NfaW50KHByb3RvKSkKKwlmZCA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNl
dEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNl
dEVycm5vID0gdHJ1ZQorCX0KKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJfQorCXJl
dHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBzb2NrZXRw
YWlyL3NvY2tldHBhaXIKKy8vZXh0ZXJuIHNvY2tldHBhaXIKK2Z1bmMgY19zb2NrZXRwYWlyKGRv
bWFpbiBfQ19pbnQsIHR5cCBfQ19pbnQsIHByb3RvY29sIF9DX2ludCwgZmQgKlsyXV9DX2ludCkg
X0NfaW50CitmdW5jIHNvY2tldHBhaXIoZG9tYWluIGludCwgdHlwIGludCwgcHJvdG8gaW50LCBm
ZCAqWzJdX0NfaW50KSAoZXJyIGVycm9yKSB7CisJX3IgOj0gY19zb2NrZXRwYWlyKF9DX2ludChk
b21haW4pLCBfQ19pbnQodHlwKSwgX0NfaW50KHByb3RvKSwgZmQpCisJdmFyIGVycm5vIEVycm5v
CisJc2V0RXJybm8gOj0gZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkK
KwkJc2V0RXJybm8gPSB0cnVlCisJfQorCWlmIHNldEVycm5vIHsKKwkJZXJyID0gZXJybm8KKwl9
CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGdl
dHNvY2tvcHQvZ2V0c29ja29wdAorLy9leHRlcm4gZ2V0c29ja29wdAorZnVuYyBjX2dldHNvY2tv
cHQocyBfQ19pbnQsIGxldmVsIF9DX2ludCwgbmFtZSBfQ19pbnQsIHZhbCAqYnl0ZSwgdmFsbGVu
ICpTb2NrbGVuX3QpIF9DX2ludAorZnVuYyBnZXRzb2Nrb3B0KHMgaW50LCBsZXZlbCBpbnQsIG5h
bWUgaW50LCB2YWwgdW5zYWZlLlBvaW50ZXIsIHZhbGxlbiAqU29ja2xlbl90KSAoZXJyIGVycm9y
KSB7CisJRW50ZXJzeXNjYWxsKCkKKwlfciA6PSBjX2dldHNvY2tvcHQoX0NfaW50KHMpLCBfQ19p
bnQobGV2ZWwpLCBfQ19pbnQobmFtZSksICgqYnl0ZSkodmFsKSwgdmFsbGVuKQorCXZhciBlcnJu
byBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYgX3IgPCAwIHsKKwkJZXJybm8gPSBHZXRF
cnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlFeGl0c3lzY2FsbCgpCisJaWYgc2V0RXJy
bm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4KK30KKworLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3Igc2VuZHRvL3NlbmR0bworLy9leHRlcm4gc2VuZHRvCitmdW5j
IGNfc2VuZHRvKHMgX0NfaW50LCBidWYgKmJ5dGUsIGxlbiBTaXplX3QsIGZsYWdzIF9DX2ludCwg
dG8gKlJhd1NvY2thZGRyQW55LCB0b2xlbiBTb2NrbGVuX3QpIFNzaXplX3QKK2Z1bmMgc2VuZHRv
KHMgaW50LCBidWYgW11ieXRlLCBmbGFncyBpbnQsIHRvICpSYXdTb2NrYWRkckFueSwgdG9sZW4g
U29ja2xlbl90KSAoZXJyIGVycm9yKSB7CisJdmFyIF9wMiAqYnl0ZQorCWlmIGxlbihidWYpID4g
MCB7CisJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJmJ1ZlswXSkpCisJfSBlbHNlIHsK
KwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQorCX0KKwlFbnRlcnN5c2Nh
bGwoKQorCV9yIDo9IGNfc2VuZHRvKF9DX2ludChzKSwgX3AyLCBTaXplX3QobGVuKGJ1ZikpLCBf
Q19pbnQoZmxhZ3MpLCB0bywgU29ja2xlbl90KHRvbGVuKSkKKwl2YXIgZXJybm8gRXJybm8KKwlz
ZXRFcnJubyA6PSBmYWxzZQorCWlmIF9yIDwgMCB7CisJCWVycm5vID0gR2V0RXJybm8oKQorCQlz
ZXRFcnJubyA9IHRydWUKKwl9CisJRXhpdHN5c2NhbGwoKQorCWlmIHNldEVycm5vIHsKKwkJZXJy
ID0gZXJybm8KKwl9CisJcmV0dXJuCit9CisKKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIHJlY3Ztc2cvcmVjdm1zZworLy9leHRlcm4gcmVjdm1zZworZnVuYyBjX3JlY3Zt
c2cocyBfQ19pbnQsIG1zZyAqTXNnaGRyLCBmbGFncyBfQ19pbnQpIFNzaXplX3QKK2Z1bmMgcmVj
dm1zZyhzIGludCwgbXNnICpNc2doZHIsIGZsYWdzIGludCkgKG4gaW50LCBlcnIgZXJyb3IpIHsK
KwlFbnRlcnN5c2NhbGwoKQorCV9yIDo9IGNfcmVjdm1zZyhfQ19pbnQocyksIG1zZywgX0NfaW50
KGZsYWdzKSkKKwluID0gKGludCkoX3IpCisJdmFyIGVycm5vIEVycm5vCisJc2V0RXJybm8gOj0g
ZmFsc2UKKwlpZiBfciA8IDAgeworCQllcnJubyA9IEdldEVycm5vKCkKKwkJc2V0RXJybm8gPSB0
cnVlCisJfQorCUV4aXRzeXNjYWxsKCkKKwlpZiBzZXRFcnJubyB7CisJCWVyciA9IGVycm5vCisJ
fQorCXJldHVybgorfQorCisvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBz
ZW5kbXNnL3NlbmRtc2cKKy8vZXh0ZXJuIHNlbmRtc2cKK2Z1bmMgY19zZW5kbXNnKHMgX0NfaW50
LCBtc2cgKk1zZ2hkciwgZmxhZ3MgX0NfaW50KSBTc2l6ZV90CitmdW5jIHNlbmRtc2cocyBpbnQs
IG1zZyAqTXNnaGRyLCBmbGFncyBpbnQpIChuIGludCwgZXJyIGVycm9yKSB7CisJRW50ZXJzeXNj
YWxsKCkKKwlfciA6PSBjX3NlbmRtc2coX0NfaW50KHMpLCBtc2csIF9DX2ludChmbGFncykpCisJ
biA9IChpbnQpKF9yKQorCXZhciBlcnJubyBFcnJubworCXNldEVycm5vIDo9IGZhbHNlCisJaWYg
X3IgPCAwIHsKKwkJZXJybm8gPSBHZXRFcnJubygpCisJCXNldEVycm5vID0gdHJ1ZQorCX0KKwlF
eGl0c3lzY2FsbCgpCisJaWYgc2V0RXJybm8geworCQllcnIgPSBlcnJubworCX0KKwlyZXR1cm4K
K30KKwpkaWZmIC0tZ2l0IGEvZ2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbyBiL2dlbmVyYXRl
ZC9ydW50aW1lX3N5c2luZm8uZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
Njc3MDJkNQotLS0gL2Rldi9udWxsCisrKyBiL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28K
QEAgLTAsMCArMSw2MjE5IEBACitwYWNrYWdlIHJ1bnRpbWUKK3R5cGUgX3B0cmRpZmZfdCBpbnQ2
NAordHlwZSBfc2l6ZV90IHVpbnQ2NAordHlwZSBfd2NoYXJfdCBpbnQzMgordHlwZSBfX191X2No
YXIgdWludDgKK3R5cGUgX19fdV9zaG9ydCB1aW50MTYKK3R5cGUgX19fdV9pbnQgdWludDMyCit0
eXBlIF9fX3VfbG9uZyB1aW50NjQKK3R5cGUgX19faW50OF90IGludDgKK3R5cGUgX19fdWludDhf
dCB1aW50OAordHlwZSBfX19pbnQxNl90IGludDE2Cit0eXBlIF9fX3VpbnQxNl90IHVpbnQxNgor
dHlwZSBfX19pbnQzMl90IGludDMyCit0eXBlIF9fX3VpbnQzMl90IHVpbnQzMgordHlwZSBfX19p
bnQ2NF90IGludDY0Cit0eXBlIF9fX3VpbnQ2NF90IHVpbnQ2NAordHlwZSBfX19pbnRfbGVhc3Q4
X3QgaW50OAordHlwZSBfX191aW50X2xlYXN0OF90IHVpbnQ4Cit0eXBlIF9fX2ludF9sZWFzdDE2
X3QgaW50MTYKK3R5cGUgX19fdWludF9sZWFzdDE2X3QgdWludDE2Cit0eXBlIF9fX2ludF9sZWFz
dDMyX3QgaW50MzIKK3R5cGUgX19fdWludF9sZWFzdDMyX3QgdWludDMyCit0eXBlIF9fX2ludF9s
ZWFzdDY0X3QgaW50NjQKK3R5cGUgX19fdWludF9sZWFzdDY0X3QgdWludDY0Cit0eXBlIF9fX3F1
YWRfdCBpbnQ2NAordHlwZSBfX191X3F1YWRfdCB1aW50NjQKK3R5cGUgX19faW50bWF4X3QgaW50
NjQKK3R5cGUgX19fdWludG1heF90IHVpbnQ2NAordHlwZSBfX19kZXZfdCB1aW50NjQKK3R5cGUg
X19fdWlkX3QgdWludDMyCit0eXBlIF9fX2dpZF90IHVpbnQzMgordHlwZSBfX19pbm9fdCB1aW50
NjQKK3R5cGUgX19faW5vNjRfdCB1aW50NjQKK3R5cGUgX19fbW9kZV90IHVpbnQzMgordHlwZSBf
X19ubGlua190IHVpbnQ2NAordHlwZSBfX19vZmZfdCBpbnQ2NAordHlwZSBfX19vZmY2NF90IGlu
dDY0Cit0eXBlIF9fX3BpZF90IGludDMyCit0eXBlIF9fX2ZzaWRfdCBzdHJ1Y3QgeyBfX3ZhbCBb
MSsxXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX19fZnNpZF90ID0gOAordHlwZSBfX19jbG9ja190
IGludDY0Cit0eXBlIF9fX3JsaW1fdCB1aW50NjQKK3R5cGUgX19fcmxpbTY0X3QgdWludDY0Cit0
eXBlIF9fX2lkX3QgdWludDMyCit0eXBlIF9fX3RpbWVfdCBpbnQ2NAordHlwZSBfX191c2Vjb25k
c190IHVpbnQzMgordHlwZSBfX19zdXNlY29uZHNfdCBpbnQ2NAordHlwZSBfX19kYWRkcl90IGlu
dDMyCit0eXBlIF9fX2tleV90IGludDMyCit0eXBlIF9fX2Nsb2NraWRfdCBpbnQzMgordHlwZSBf
X190aW1lcl90ICpieXRlCit0eXBlIF9fX2Jsa3NpemVfdCBpbnQ2NAordHlwZSBfX19ibGtjbnRf
dCBpbnQ2NAordHlwZSBfX19ibGtjbnQ2NF90IGludDY0Cit0eXBlIF9fX2ZzYmxrY250X3QgdWlu
dDY0Cit0eXBlIF9fX2ZzYmxrY250NjRfdCB1aW50NjQKK3R5cGUgX19fZnNmaWxjbnRfdCB1aW50
NjQKK3R5cGUgX19fZnNmaWxjbnQ2NF90IHVpbnQ2NAordHlwZSBfX19mc3dvcmRfdCBpbnQ2NAor
dHlwZSBfX19zc2l6ZV90IGludDY0Cit0eXBlIF9fX3N5c2NhbGxfc2xvbmdfdCBpbnQ2NAordHlw
ZSBfX19zeXNjYWxsX3Vsb25nX3QgdWludDY0Cit0eXBlIF9fX2xvZmZfdCBpbnQ2NAordHlwZSBf
X19jYWRkcl90ICppbnQ4Cit0eXBlIF9fX2ludHB0cl90IGludDY0Cit0eXBlIF9fX3NvY2tsZW5f
dCB1aW50MzIKK3R5cGUgX19fc2lnX2F0b21pY190IGludDMyCit0eXBlIF91X2NoYXIgdWludDgK
K3R5cGUgX3Vfc2hvcnQgdWludDE2Cit0eXBlIF91X2ludCB1aW50MzIKK3R5cGUgX3VfbG9uZyB1
aW50NjQKK3R5cGUgX3F1YWRfdCBpbnQ2NAordHlwZSBfdV9xdWFkX3QgdWludDY0Cit0eXBlIF9m
c2lkX3Qgc3RydWN0IHsgX192YWwgWzErMV1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9mc2lkX3Qg
PSA4Cit0eXBlIF9sb2ZmX3QgaW50NjQKK3R5cGUgX2lub190IHVpbnQ2NAordHlwZSBfaW5vNjRf
dCB1aW50NjQKK3R5cGUgX2Rldl90IHVpbnQ2NAordHlwZSBfZ2lkX3QgdWludDMyCit0eXBlIF9t
b2RlX3QgdWludDMyCit0eXBlIF9ubGlua190IHVpbnQ2NAordHlwZSBfdWlkX3QgdWludDMyCit0
eXBlIF9vZmZfdCBpbnQ2NAordHlwZSBfb2ZmNjRfdCBpbnQ2NAordHlwZSBfcGlkX3QgaW50MzIK
K3R5cGUgX2lkX3QgdWludDMyCit0eXBlIF9zc2l6ZV90IGludDY0Cit0eXBlIF9kYWRkcl90IGlu
dDMyCit0eXBlIF9jYWRkcl90ICppbnQ4Cit0eXBlIF9rZXlfdCBpbnQzMgordHlwZSBfY2xvY2tf
dCBpbnQ2NAordHlwZSBfY2xvY2tpZF90IGludDMyCit0eXBlIF90aW1lX3QgaW50NjQKK3R5cGUg
X3RpbWVyX3QgKmJ5dGUKK3R5cGUgX3VzZWNvbmRzX3QgdWludDMyCit0eXBlIF9zdXNlY29uZHNf
dCBpbnQ2NAordHlwZSBfdWxvbmcgdWludDY0Cit0eXBlIF91c2hvcnQgdWludDE2Cit0eXBlIF91
aW50IHVpbnQzMgordHlwZSBfaW50OF90IGludDgKK3R5cGUgX2ludDE2X3QgaW50MTYKK3R5cGUg
X2ludDMyX3QgaW50MzIKK3R5cGUgX2ludDY0X3QgaW50NjQKK3R5cGUgX3VfaW50OF90IHVpbnQ4
Cit0eXBlIF91X2ludDE2X3QgdWludDE2Cit0eXBlIF91X2ludDMyX3QgdWludDMyCit0eXBlIF91
X2ludDY0X3QgdWludDY0Cit0eXBlIF9yZWdpc3Rlcl90IGludDY0Cit0eXBlIF9fX3NpZ3NldF90
IHN0cnVjdCB7IF9fdmFsIFsxNSsxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9fX3NpZ3NldF90
ID0gMTI4Cit0eXBlIF9zaWdzZXRfdCBzdHJ1Y3QgeyBfX3ZhbCBbMTUrMV11aW50NjQ7IH0KK2Nv
bnN0IF9zaXplb2Zfc2lnc2V0X3QgPSAxMjgKK2NvbnN0IF9zaXplb2ZfdGltZXZhbCA9IDE2Citj
b25zdCBfc2l6ZW9mX3RpbWVzcGVjID0gMTYKK3R5cGUgX19fZmRfbWFzayBpbnQ2NAordHlwZSBf
ZmRfc2V0IHN0cnVjdCB7IGZkc19iaXRzIFsxNSsxXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX2Zk
X3NldCA9IDEyOAordHlwZSBfZmRfbWFzayBpbnQ2NAordHlwZSBfYmxrc2l6ZV90IGludDY0Cit0
eXBlIF9ibGtjbnRfdCBpbnQ2NAordHlwZSBfZnNibGtjbnRfdCB1aW50NjQKK3R5cGUgX2ZzZmls
Y250X3QgdWludDY0Cit0eXBlIF9ibGtjbnQ2NF90IGludDY0Cit0eXBlIF9mc2Jsa2NudDY0X3Qg
dWludDY0Cit0eXBlIF9mc2ZpbGNudDY0X3QgdWludDY0Cit0eXBlIF9fX3B0aHJlYWRfcndsb2Nr
X2FyY2hfdCBzdHJ1Y3QgeyBfX3JlYWRlcnMgdWludDMyOyBfX3dyaXRlcnMgdWludDMyOyBfX3dy
cGhhc2VfZnV0ZXggdWludDMyOyBfX3dyaXRlcnNfZnV0ZXggdWludDMyOyBfX3BhZDMgdWludDMy
OyBfX3BhZDQgdWludDMyOyBfX2N1cl93cml0ZXIgaW50MzI7IF9fc2hhcmVkIGludDMyOyBfX3J3
ZWxpc2lvbiBpbnQ4OyBfX3BhZDEgWzYrMV11aW50ODsgX19wYWQyIHVpbnQ2NDsgX19mbGFncyB1
aW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX19fcHRocmVhZF9y
d2xvY2tfYXJjaF90ID0gNTYKK3R5cGUgX19fcHRocmVhZF9pbnRlcm5hbF9saXN0IHN0cnVjdCB7
IF9fcHJldiAqX19fcHRocmVhZF9pbnRlcm5hbF9saXN0OyBfX25leHQgKl9fX3B0aHJlYWRfaW50
ZXJuYWxfbGlzdDsgfQorY29uc3QgX3NpemVvZl9fX3B0aHJlYWRfaW50ZXJuYWxfbGlzdCA9IDE2
Cit0eXBlIF9fX3B0aHJlYWRfbGlzdF90IHN0cnVjdCB7IF9fcHJldiAqX19fcHRocmVhZF9pbnRl
cm5hbF9saXN0OyBfX25leHQgKl9fX3B0aHJlYWRfaW50ZXJuYWxfbGlzdDsgfQorY29uc3QgX3Np
emVvZl9fX3B0aHJlYWRfbGlzdF90ID0gMTYKK3R5cGUgX19fcHRocmVhZF9tdXRleF9zIHN0cnVj
dCB7IF9fbG9jayBpbnQzMjsgX19jb3VudCB1aW50MzI7IF9fb3duZXIgaW50MzI7IF9fbnVzZXJz
IHVpbnQzMjsgX19raW5kIGludDMyOyBfX3NwaW5zIGludDE2OyBfX2VsaXNpb24gaW50MTY7IF9f
bGlzdCBfX19wdGhyZWFkX2xpc3RfdDsgfQorY29uc3QgX3NpemVvZl9fX3B0aHJlYWRfbXV0ZXhf
cyA9IDQwCit0eXBlIF9fX3B0aHJlYWRfY29uZF9zIHN0cnVjdCB7IF9fd3NlcSB1aW50NjQ7IF9f
ZzFfc3RhcnQgdWludDY0OyBfX2dfcmVmcyBbMSsxXXVpbnQzMjsgX19nX3NpemUgWzErMV11aW50
MzI7IF9fZzFfb3JpZ19zaXplIHVpbnQzMjsgX193cmVmcyB1aW50MzI7IF9fZ19zaWduYWxzIFsx
KzFddWludDMyOyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9fX3B0
aHJlYWRfY29uZF9zID0gNDgKK3R5cGUgX3B0aHJlYWRfdCB1aW50NjQKK3R5cGUgX3B0aHJlYWRf
bXV0ZXhhdHRyX3Qgc3RydWN0IHsgX19zaXplIFszKzFdaW50ODsgR29kdW1wXzBfYWxpZ24gWzBd
aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9tdXRleGF0dHJfdCA9IDQKK3R5cGUgX3B0
aHJlYWRfY29uZGF0dHJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMrMV1pbnQ4OyBHb2R1bXBfMF9hbGln
biBbMF1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX2NvbmRhdHRyX3QgPSA0Cit0eXBl
IF9wdGhyZWFkX2tleV90IHVpbnQzMgordHlwZSBfcHRocmVhZF9vbmNlX3QgaW50MzIKK3R5cGUg
X3B0aHJlYWRfYXR0cl90IHN0cnVjdCB7IF9fc2l6ZSBbNTUrMV1pbnQ4OyBHb2R1bXBfMF9hbGln
biBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX2F0dHJfdCA9IDU2Cit0eXBlIF9w
dGhyZWFkX211dGV4X3Qgc3RydWN0IHsgX19kYXRhIF9fX3B0aHJlYWRfbXV0ZXhfczsgfQorY29u
c3QgX3NpemVvZl9wdGhyZWFkX211dGV4X3QgPSA0MAordHlwZSBfcHRocmVhZF9jb25kX3Qgc3Ry
dWN0IHsgX19kYXRhIF9fX3B0aHJlYWRfY29uZF9zOyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRf
Y29uZF90ID0gNDgKK3R5cGUgX3B0aHJlYWRfcndsb2NrX3Qgc3RydWN0IHsgX19kYXRhIF9fX3B0
aHJlYWRfcndsb2NrX2FyY2hfdDsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX3J3bG9ja190ID0g
NTYKK3R5cGUgX3B0aHJlYWRfcndsb2NrYXR0cl90IHN0cnVjdCB7IF9fc2l6ZSBbNysxXWludDg7
IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfcndsb2Nr
YXR0cl90ID0gOAordHlwZSBfcHRocmVhZF9zcGlubG9ja190IGludDMyCit0eXBlIF9wdGhyZWFk
X2JhcnJpZXJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMxKzFdaW50ODsgR29kdW1wXzBfYWxpZ24gWzBd
aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9iYXJyaWVyX3QgPSAzMgordHlwZSBfcHRo
cmVhZF9iYXJyaWVyYXR0cl90IHN0cnVjdCB7IF9fc2l6ZSBbMysxXWludDg7IEdvZHVtcF8wX2Fs
aWduIFswXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfYmFycmllcmF0dHJfdCA9IDQK
K3R5cGUgX2RpcmVudCBzdHJ1Y3QgeyBkX2lubyB1aW50NjQ7IGRfb2ZmIGludDY0OyBkX3JlY2xl
biB1aW50MTY7IGRfdHlwZSB1aW50ODsgZF9uYW1lIFsyNTUrMV1pbnQ4OyBHb2R1bXBfMF9wYWQg
WzVdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9kaXJlbnQgPSAyODAKK3R5cGUgX2RpcmVudDY0IHN0
cnVjdCB7IGRfaW5vIHVpbnQ2NDsgZF9vZmYgaW50NjQ7IGRfcmVjbGVuIHVpbnQxNjsgZF90eXBl
IHVpbnQ4OyBkX25hbWUgWzI1NSsxXWludDg7IEdvZHVtcF8wX3BhZCBbNV1ieXRlOyB9Citjb25z
dCBfc2l6ZW9mX2RpcmVudDY0ID0gMjgwCit0eXBlIF9ESVIgc3RydWN0IHsgfQordHlwZSBfZXJy
b3JfdCBpbnQzMgordHlwZSBfZmxvY2sgc3RydWN0IHsgbF90eXBlIGludDE2OyBsX3doZW5jZSBp
bnQxNjsgbF9zdGFydCBpbnQ2NDsgbF9sZW4gaW50NjQ7IGxfcGlkIGludDMyOyBHb2R1bXBfMF9w
YWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9mbG9jayA9IDMyCit0eXBlIF9mbG9jazY0IHN0
cnVjdCB7IGxfdHlwZSBpbnQxNjsgbF93aGVuY2UgaW50MTY7IGxfc3RhcnQgaW50NjQ7IGxfbGVu
IGludDY0OyBsX3BpZCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXpl
b2ZfZmxvY2s2NCA9IDMyCit0eXBlIF9pb3ZlYyBzdHJ1Y3QgeyBpb3ZfYmFzZSAqYnl0ZTsgaW92
X2xlbiB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfaW92ZWMgPSAxNgordHlwZSBfZl9vd25lcl9l
eCBzdHJ1Y3QgeyBfdHlwZSB1aW50MzI7IHBpZCBpbnQzMjsgfQorY29uc3QgX3NpemVvZl9mX293
bmVyX2V4ID0gOAordHlwZSBfZmlsZV9oYW5kbGUgc3RydWN0IHsgaGFuZGxlX2J5dGVzIHVpbnQz
MjsgaGFuZGxlX3R5cGUgaW50MzI7IGZfaGFuZGxlIFswXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9m
X2ZpbGVfaGFuZGxlID0gOAordHlwZSBfc3RhdCBzdHJ1Y3QgeyBzdF9kZXYgdWludDY0OyBzdF9p
bm8gdWludDY0OyBzdF9ubGluayB1aW50NjQ7IHN0X21vZGUgdWludDMyOyBzdF91aWQgdWludDMy
OyBzdF9naWQgdWludDMyOyBfX3BhZDAgaW50MzI7IHN0X3JkZXYgdWludDY0OyBzdF9zaXplIGlu
dDY0OyBzdF9ibGtzaXplIGludDY0OyBzdF9ibG9ja3MgaW50NjQ7IHN0X2F0aW0gdGltZXNwZWM7
IHN0X210aW0gdGltZXNwZWM7IHN0X2N0aW0gdGltZXNwZWM7IF9fZ2xpYmNfcmVzZXJ2ZWQgWzIr
MV1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zdGF0ID0gMTQ0Cit0eXBlIF9zdGF0NjQgc3RydWN0
IHsgc3RfZGV2IHVpbnQ2NDsgc3RfaW5vIHVpbnQ2NDsgc3RfbmxpbmsgdWludDY0OyBzdF9tb2Rl
IHVpbnQzMjsgc3RfdWlkIHVpbnQzMjsgc3RfZ2lkIHVpbnQzMjsgX19wYWQwIGludDMyOyBzdF9y
ZGV2IHVpbnQ2NDsgc3Rfc2l6ZSBpbnQ2NDsgc3RfYmxrc2l6ZSBpbnQ2NDsgc3RfYmxvY2tzIGlu
dDY0OyBzdF9hdGltIHRpbWVzcGVjOyBzdF9tdGltIHRpbWVzcGVjOyBzdF9jdGltIHRpbWVzcGVj
OyBfX2dsaWJjX3Jlc2VydmVkIFsyKzFdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2Zfc3RhdDY0ID0g
MTQ0Cit0eXBlIF9zdGFja190IHN0cnVjdCB7IHNzX3NwICpieXRlOyBzc19mbGFncyBpbnQzMjsg
c3Nfc2l6ZSB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2Zfc3RhY2tfdCA9IDI0Cit0eXBlIF9ncmVn
X3QgaW50NjQKK3R5cGUgX2dyZWdzZXRfdCBbMjIrMV1pbnQ2NAordHlwZSBfX2xpYmNfZnB4cmVn
IHN0cnVjdCB7IHNpZ25pZmljYW5kIFszKzFddWludDE2OyBleHBvbmVudCB1aW50MTY7IF9fZ2xp
YmNfcmVzZXJ2ZWQxIFsyKzFddWludDE2OyB9Citjb25zdCBfc2l6ZW9mX19saWJjX2ZweHJlZyA9
IDE2Cit0eXBlIF9fbGliY194bW1yZWcgc3RydWN0IHsgZWxlbWVudCBbMysxXXVpbnQzMjsgfQor
Y29uc3QgX3NpemVvZl9fbGliY194bW1yZWcgPSAxNgordHlwZSBfX2xpYmNfZnBzdGF0ZSBzdHJ1
Y3QgeyBjd2QgdWludDE2OyBzd2QgdWludDE2OyBmdHcgdWludDE2OyBmb3AgdWludDE2OyByaXAg
dWludDY0OyByZHAgdWludDY0OyBteGNzciB1aW50MzI7IG14Y3JfbWFzayB1aW50MzI7IF9zdCBb
NysxXV9fbGliY19mcHhyZWc7IF94bW0gWzE1KzFdX19saWJjX3htbXJlZzsgX19nbGliY19yZXNl
cnZlZDEgWzIzKzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX19saWJjX2Zwc3RhdGUgPSA1MTIK
K3R5cGUgX2ZwcmVnc2V0X3QgKl9fbGliY19mcHN0YXRlCit0eXBlIF9tY29udGV4dF90IHN0cnVj
dCB7IGdyZWdzIF9ncmVnc2V0X3Q7IGZwcmVncyBfZnByZWdzZXRfdDsgX19yZXNlcnZlZDEgWzcr
MV11aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfbWNvbnRleHRfdCA9IDI1NgordHlwZSBfdWNvbnRl
eHRfdCBzdHJ1Y3QgeyB1Y19mbGFncyB1aW50NjQ7IHVjX2xpbmsgKl91Y29udGV4dF90OyB1Y19z
dGFjayBfc3RhY2tfdDsgdWNfbWNvbnRleHQgX21jb250ZXh0X3Q7IHVjX3NpZ21hc2sgX3NpZ3Nl
dF90OyBfX2ZwcmVnc19tZW0gX19saWJjX2Zwc3RhdGU7IF9fc3NwIFszKzFddWludDY0OyB9Citj
b25zdCBfc2l6ZW9mX3Vjb250ZXh0X3QgPSA5NjgKK3R5cGUgX3VpbnQ4X3QgdWludDgKK3R5cGUg
X3VpbnQxNl90IHVpbnQxNgordHlwZSBfdWludDMyX3QgdWludDMyCit0eXBlIF91aW50NjRfdCB1
aW50NjQKK3R5cGUgX3NvY2tsZW5fdCB1aW50MzIKK3R5cGUgX3NhX2ZhbWlseV90IHVpbnQxNgor
dHlwZSBfc29ja2FkZHIgc3RydWN0IHsgc2FfZmFtaWx5IHVpbnQxNjsgc2FfZGF0YSBbMTMrMV1p
bnQ4OyB9Citjb25zdCBfc2l6ZW9mX3NvY2thZGRyID0gMTYKK3R5cGUgX3NvY2thZGRyX3N0b3Jh
Z2Ugc3RydWN0IHsgc3NfZmFtaWx5IHVpbnQxNjsgX19zc19wYWRkaW5nIFsxMTcrMV1pbnQ4OyBf
X3NzX2FsaWduIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zb2NrYWRkcl9zdG9yYWdlID0gMTI4
Cit0eXBlIF9tc2doZHIgc3RydWN0IHsgbXNnX25hbWUgKmJ5dGU7IG1zZ19uYW1lbGVuIHVpbnQz
MjsgbXNnX2lvdiAqX2lvdmVjOyBtc2dfaW92bGVuIHVpbnQ2NDsgbXNnX2NvbnRyb2wgKmJ5dGU7
IG1zZ19jb250cm9sbGVuIHVpbnQ2NDsgbXNnX2ZsYWdzIGludDMyOyBHb2R1bXBfMF9wYWQgWzRd
Ynl0ZTsgfQorY29uc3QgX3NpemVvZl9tc2doZHIgPSA1NgordHlwZSBfY21zZ2hkciBzdHJ1Y3Qg
eyBjbXNnX2xlbiB1aW50NjQ7IGNtc2dfbGV2ZWwgaW50MzI7IGNtc2dfdHlwZSBpbnQzMjsgX19j
bXNnX2RhdGEgWzBddWludDg7IH0KK2NvbnN0IF9zaXplb2ZfY21zZ2hkciA9IDE2Cit0eXBlIF91
Y3JlZCBzdHJ1Y3QgeyBwaWQgaW50MzI7IHVpZCB1aW50MzI7IGdpZCB1aW50MzI7IH0KK2NvbnN0
IF9zaXplb2ZfdWNyZWQgPSAxMgordHlwZSBfbGluZ2VyIHN0cnVjdCB7IGxfb25vZmYgaW50MzI7
IGxfbGluZ2VyIGludDMyOyB9Citjb25zdCBfc2l6ZW9mX2xpbmdlciA9IDgKK3R5cGUgX29zb2Nr
YWRkciBzdHJ1Y3QgeyBzYV9mYW1pbHkgdWludDE2OyBzYV9kYXRhIFsxMysxXXVpbnQ4OyB9Citj
b25zdCBfc2l6ZW9mX29zb2NrYWRkciA9IDE2Cit0eXBlIF9fX1NPQ0tBRERSX0FSRyBzdHJ1Y3Qg
eyBfX3NvY2thZGRyX18gKl9zb2NrYWRkcjsgfQorY29uc3QgX3NpemVvZl9fX1NPQ0tBRERSX0FS
RyA9IDgKK3R5cGUgX19fQ09OU1RfU09DS0FERFJfQVJHIHN0cnVjdCB7IF9fc29ja2FkZHJfXyAq
X3NvY2thZGRyOyB9Citjb25zdCBfc2l6ZW9mX19fQ09OU1RfU09DS0FERFJfQVJHID0gOAordHlw
ZSBfbW1zZ2hkciBzdHJ1Y3QgeyBtc2dfaGRyIF9tc2doZHI7IG1zZ19sZW4gdWludDMyOyBHb2R1
bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9tbXNnaGRyID0gNjQKK3R5cGUgX2lu
X2FkZHJfdCB1aW50MzIKK3R5cGUgX2luX2FkZHIgc3RydWN0IHsgc19hZGRyIHVpbnQzMjsgfQor
Y29uc3QgX3NpemVvZl9pbl9hZGRyID0gNAordHlwZSBfaXBfb3B0cyBzdHJ1Y3QgeyBpcF9kc3Qg
X2luX2FkZHI7IGlwX29wdHMgWzM5KzFdaW50ODsgfQorY29uc3QgX3NpemVvZl9pcF9vcHRzID0g
NDQKK3R5cGUgX2lwX21yZXFuIHN0cnVjdCB7IGltcl9tdWx0aWFkZHIgX2luX2FkZHI7IGltcl9h
ZGRyZXNzIF9pbl9hZGRyOyBpbXJfaWZpbmRleCBpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pcF9t
cmVxbiA9IDEyCit0eXBlIF9pbl9wa3RpbmZvIHN0cnVjdCB7IGlwaV9pZmluZGV4IGludDMyOyBp
cGlfc3BlY19kc3QgX2luX2FkZHI7IGlwaV9hZGRyIF9pbl9hZGRyOyB9Citjb25zdCBfc2l6ZW9m
X2luX3BrdGluZm8gPSAxMgordHlwZSBfaW5fcG9ydF90IHVpbnQxNgordHlwZSBfc29ja2FkZHJf
aW4gc3RydWN0IHsgc2luX2ZhbWlseSB1aW50MTY7IHNpbl9wb3J0IHVpbnQxNjsgc2luX2FkZHIg
X2luX2FkZHI7IHNpbl96ZXJvIFs3KzFddWludDg7IH0KK2NvbnN0IF9zaXplb2Zfc29ja2FkZHJf
aW4gPSAxNgordHlwZSBfaXBfbXJlcSBzdHJ1Y3QgeyBpbXJfbXVsdGlhZGRyIF9pbl9hZGRyOyBp
bXJfaW50ZXJmYWNlIF9pbl9hZGRyOyB9Citjb25zdCBfc2l6ZW9mX2lwX21yZXEgPSA4Cit0eXBl
IF9pcF9tcmVxX3NvdXJjZSBzdHJ1Y3QgeyBpbXJfbXVsdGlhZGRyIF9pbl9hZGRyOyBpbXJfaW50
ZXJmYWNlIF9pbl9hZGRyOyBpbXJfc291cmNlYWRkciBfaW5fYWRkcjsgfQorY29uc3QgX3NpemVv
Zl9pcF9tcmVxX3NvdXJjZSA9IDEyCitjb25zdCBfc2l6ZW9mX2lwdjZfbXJlcSA9IDIwCit0eXBl
IF9ncm91cF9yZXEgc3RydWN0IHsgZ3JfaW50ZXJmYWNlIHVpbnQzMjsgZ3JfZ3JvdXAgX3NvY2th
ZGRyX3N0b3JhZ2U7IH0KK2NvbnN0IF9zaXplb2ZfZ3JvdXBfcmVxID0gMTM2Cit0eXBlIF9ncm91
cF9zb3VyY2VfcmVxIHN0cnVjdCB7IGdzcl9pbnRlcmZhY2UgdWludDMyOyBnc3JfZ3JvdXAgX3Nv
Y2thZGRyX3N0b3JhZ2U7IGdzcl9zb3VyY2UgX3NvY2thZGRyX3N0b3JhZ2U7IH0KK2NvbnN0IF9z
aXplb2ZfZ3JvdXBfc291cmNlX3JlcSA9IDI2NAordHlwZSBfaXBfbXNmaWx0ZXIgc3RydWN0IHsg
aW1zZl9tdWx0aWFkZHIgX2luX2FkZHI7IGltc2ZfaW50ZXJmYWNlIF9pbl9hZGRyOyBpbXNmX2Zt
b2RlIHVpbnQzMjsgaW1zZl9udW1zcmMgdWludDMyOyBpbXNmX3NsaXN0IFswKzFdX2luX2FkZHI7
IH0KK2NvbnN0IF9zaXplb2ZfaXBfbXNmaWx0ZXIgPSAyMAordHlwZSBfZ3JvdXBfZmlsdGVyIHN0
cnVjdCB7IGdmX2ludGVyZmFjZSB1aW50MzI7IGdmX2dyb3VwIF9zb2NrYWRkcl9zdG9yYWdlOyBn
Zl9mbW9kZSB1aW50MzI7IGdmX251bXNyYyB1aW50MzI7IGdmX3NsaXN0IFswKzFdX3NvY2thZGRy
X3N0b3JhZ2U7IH0KK2NvbnN0IF9zaXplb2ZfZ3JvdXBfZmlsdGVyID0gMjcyCitjb25zdCBfc2l6
ZW9mX2luNl9wa3RpbmZvID0gMjAKK2NvbnN0IF9zaXplb2ZfaXA2X210dWluZm8gPSAzMgordHlw
ZSBfaW50X2xlYXN0OF90IGludDgKK3R5cGUgX2ludF9sZWFzdDE2X3QgaW50MTYKK3R5cGUgX2lu
dF9sZWFzdDMyX3QgaW50MzIKK3R5cGUgX2ludF9sZWFzdDY0X3QgaW50NjQKK3R5cGUgX3VpbnRf
bGVhc3Q4X3QgdWludDgKK3R5cGUgX3VpbnRfbGVhc3QxNl90IHVpbnQxNgordHlwZSBfdWludF9s
ZWFzdDMyX3QgdWludDMyCit0eXBlIF91aW50X2xlYXN0NjRfdCB1aW50NjQKK3R5cGUgX2ludF9m
YXN0OF90IGludDgKK3R5cGUgX2ludF9mYXN0MTZfdCBpbnQ2NAordHlwZSBfaW50X2Zhc3QzMl90
IGludDY0Cit0eXBlIF9pbnRfZmFzdDY0X3QgaW50NjQKK3R5cGUgX3VpbnRfZmFzdDhfdCB1aW50
OAordHlwZSBfdWludF9mYXN0MTZfdCB1aW50NjQKK3R5cGUgX3VpbnRfZmFzdDMyX3QgdWludDY0
Cit0eXBlIF91aW50X2Zhc3Q2NF90IHVpbnQ2NAordHlwZSBfaW50cHRyX3QgaW50NjQKK3R5cGUg
X3VpbnRwdHJfdCB1aW50NjQKK3R5cGUgX2ludG1heF90IGludDY0Cit0eXBlIF91aW50bWF4X3Qg
dWludDY0Cit0eXBlIF90Y3Bfc2VxIHVpbnQzMgordHlwZSBfdGNwaGRyIHN0cnVjdCB7IHRoX3Nw
b3J0IHVpbnQxNjsgdGhfZHBvcnQgdWludDE2OyB0aF9zZXEgdWludDMyOyB0aF9hY2sgdWludDMy
OyBHb2R1bXBfMF9wYWQgWzFdYnl0ZTsgdGhfZmxhZ3MgdWludDg7IHRoX3dpbiB1aW50MTY7IHRo
X3N1bSB1aW50MTY7IHRoX3VycCB1aW50MTY7IEdvZHVtcF8xX2FsaWduIFswXWludDMyOyB9Citj
b25zdCBfc2l6ZW9mX3RjcGhkciA9IDIwCit0eXBlIF90Y3BfaW5mbyBzdHJ1Y3QgeyB0Y3BpX3N0
YXRlIHVpbnQ4OyB0Y3BpX2NhX3N0YXRlIHVpbnQ4OyB0Y3BpX3JldHJhbnNtaXRzIHVpbnQ4OyB0
Y3BpX3Byb2JlcyB1aW50ODsgdGNwaV9iYWNrb2ZmIHVpbnQ4OyB0Y3BpX29wdGlvbnMgdWludDg7
IHRjcGlfcnRvIHVpbnQzMjsgdGNwaV9hdG8gdWludDMyOyB0Y3BpX3NuZF9tc3MgdWludDMyOyB0
Y3BpX3Jjdl9tc3MgdWludDMyOyB0Y3BpX3VuYWNrZWQgdWludDMyOyB0Y3BpX3NhY2tlZCB1aW50
MzI7IHRjcGlfbG9zdCB1aW50MzI7IHRjcGlfcmV0cmFucyB1aW50MzI7IHRjcGlfZmFja2V0cyB1
aW50MzI7IHRjcGlfbGFzdF9kYXRhX3NlbnQgdWludDMyOyB0Y3BpX2xhc3RfYWNrX3NlbnQgdWlu
dDMyOyB0Y3BpX2xhc3RfZGF0YV9yZWN2IHVpbnQzMjsgdGNwaV9sYXN0X2Fja19yZWN2IHVpbnQz
MjsgdGNwaV9wbXR1IHVpbnQzMjsgdGNwaV9yY3Zfc3N0aHJlc2ggdWludDMyOyB0Y3BpX3J0dCB1
aW50MzI7IHRjcGlfcnR0dmFyIHVpbnQzMjsgdGNwaV9zbmRfc3N0aHJlc2ggdWludDMyOyB0Y3Bp
X3NuZF9jd25kIHVpbnQzMjsgdGNwaV9hZHZtc3MgdWludDMyOyB0Y3BpX3Jlb3JkZXJpbmcgdWlu
dDMyOyB0Y3BpX3Jjdl9ydHQgdWludDMyOyB0Y3BpX3Jjdl9zcGFjZSB1aW50MzI7IHRjcGlfdG90
YWxfcmV0cmFucyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGNwX2luZm8gPSAxMDQKK3R5cGUg
X3RjcF9tZDVzaWcgc3RydWN0IHsgdGNwbV9hZGRyIF9zb2NrYWRkcl9zdG9yYWdlOyB0Y3BtX2Zs
YWdzIHVpbnQ4OyB0Y3BtX3ByZWZpeGxlbiB1aW50ODsgdGNwbV9rZXlsZW4gdWludDE2OyBfX3Rj
cG1fcGFkIHVpbnQzMjsgdGNwbV9rZXkgWzc5KzFddWludDg7IH0KK2NvbnN0IF9zaXplb2ZfdGNw
X21kNXNpZyA9IDIxNgordHlwZSBfdGNwX3JlcGFpcl9vcHQgc3RydWN0IHsgb3B0X2NvZGUgdWlu
dDMyOyBvcHRfdmFsIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl90Y3BfcmVwYWlyX29wdCA9IDgK
K3R5cGUgX3RjcF9jb29raWVfdHJhbnNhY3Rpb25zIHN0cnVjdCB7IHRjcGN0X2ZsYWdzIHVpbnQx
NjsgX190Y3BjdF9wYWQxIHVpbnQ4OyB0Y3BjdF9jb29raWVfZGVzaXJlZCB1aW50ODsgdGNwY3Rf
c19kYXRhX2Rlc2lyZWQgdWludDE2OyB0Y3BjdF91c2VkIHVpbnQxNjsgdGNwY3RfdmFsdWUgWzUz
NSsxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3RjcF9jb29raWVfdHJhbnNhY3Rpb25zID0gNTQ0
Cit0eXBlIF90Y3BfcmVwYWlyX3dpbmRvdyBzdHJ1Y3QgeyBzbmRfd2wxIHVpbnQzMjsgc25kX3du
ZCB1aW50MzI7IG1heF93aW5kb3cgdWludDMyOyByY3Zfd25kIHVpbnQzMjsgcmN2X3d1cCB1aW50
MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGNwX3JlcGFpcl93aW5kb3cgPSAyMAordHlwZSBfdGltZXN0
YW1wIHN0cnVjdCB7IGxlbiB1aW50ODsgcHRyIHVpbnQ4OyBkYXRhIFs4KzFddWludDMyOyB9Citj
b25zdCBfc2l6ZW9mX3RpbWVzdGFtcCA9IDQwCit0eXBlIF9pcGhkciBzdHJ1Y3QgeyBHb2R1bXBf
MF9wYWQgWzFdYnl0ZTsgdG9zIHVpbnQ4OyB0b3RfbGVuIHVpbnQxNjsgaWQgdWludDE2OyBmcmFn
X29mZiB1aW50MTY7IHR0bCB1aW50ODsgcHJvdG9jb2wgdWludDg7IGNoZWNrIHVpbnQxNjsgc2Fk
ZHIgdWludDMyOyBkYWRkciB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaXBoZHIgPSAyMAordHlw
ZSBfaXAgc3RydWN0IHsgR29kdW1wXzBfcGFkIFsxXWJ5dGU7IGlwX3RvcyB1aW50ODsgaXBfbGVu
IHVpbnQxNjsgaXBfaWQgdWludDE2OyBpcF9vZmYgdWludDE2OyBpcF90dGwgdWludDg7IGlwX3Ag
dWludDg7IGlwX3N1bSB1aW50MTY7IGlwX3NyYyBfaW5fYWRkcjsgaXBfZHN0IF9pbl9hZGRyOyB9
Citjb25zdCBfc2l6ZW9mX2lwID0gMjAKK3R5cGUgX2lwX3RpbWVzdGFtcCBzdHJ1Y3QgeyBpcHRf
Y29kZSB1aW50ODsgaXB0X2xlbiB1aW50ODsgaXB0X3B0ciB1aW50ODsgZGF0YSBbOCsxXXVpbnQz
MjsgfQorY29uc3QgX3NpemVvZl9pcF90aW1lc3RhbXAgPSA0MAordHlwZSBfX19zOCBpbnQ4Cit0
eXBlIF9fX3U4IHVpbnQ4Cit0eXBlIF9fX3MxNiBpbnQxNgordHlwZSBfX191MTYgdWludDE2Cit0
eXBlIF9fX3MzMiBpbnQzMgordHlwZSBfX191MzIgdWludDMyCit0eXBlIF9fX3M2NCBpbnQ2NAor
dHlwZSBfX191NjQgdWludDY0Cit0eXBlIF9fX2tlcm5lbF9mZF9zZXQgc3RydWN0IHsgZmRzX2Jp
dHMgWzE1KzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9mX19fa2VybmVsX2ZkX3NldCA9IDEyOAor
dHlwZSBfX19rZXJuZWxfc2lnaGFuZGxlcl90IGZ1bmMoaW50MzIpCit0eXBlIF9fX2tlcm5lbF9r
ZXlfdCBpbnQzMgordHlwZSBfX19rZXJuZWxfbXFkX3QgaW50MzIKK3R5cGUgX19fa2VybmVsX29s
ZF91aWRfdCB1aW50MTYKK3R5cGUgX19fa2VybmVsX29sZF9naWRfdCB1aW50MTYKK3R5cGUgX19f
a2VybmVsX29sZF9kZXZfdCB1aW50NjQKK3R5cGUgX19fa2VybmVsX2xvbmdfdCBpbnQ2NAordHlw
ZSBfX19rZXJuZWxfdWxvbmdfdCB1aW50NjQKK3R5cGUgX19fa2VybmVsX2lub190IHVpbnQ2NAor
dHlwZSBfX19rZXJuZWxfbW9kZV90IHVpbnQzMgordHlwZSBfX19rZXJuZWxfcGlkX3QgaW50MzIK
K3R5cGUgX19fa2VybmVsX2lwY19waWRfdCBpbnQzMgordHlwZSBfX19rZXJuZWxfdWlkX3QgdWlu
dDMyCit0eXBlIF9fX2tlcm5lbF9naWRfdCB1aW50MzIKK3R5cGUgX19fa2VybmVsX3N1c2Vjb25k
c190IGludDY0Cit0eXBlIF9fX2tlcm5lbF9kYWRkcl90IGludDMyCit0eXBlIF9fX2tlcm5lbF91
aWQzMl90IHVpbnQzMgordHlwZSBfX19rZXJuZWxfZ2lkMzJfdCB1aW50MzIKK3R5cGUgX19fa2Vy
bmVsX3NpemVfdCB1aW50NjQKK3R5cGUgX19fa2VybmVsX3NzaXplX3QgaW50NjQKK3R5cGUgX19f
a2VybmVsX3B0cmRpZmZfdCBpbnQ2NAordHlwZSBfX19rZXJuZWxfZnNpZF90IHN0cnVjdCB7IHZh
bCBbMSsxXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX19fa2VybmVsX2ZzaWRfdCA9IDgKK3R5cGUg
X19fa2VybmVsX29mZl90IGludDY0Cit0eXBlIF9fX2tlcm5lbF9sb2ZmX3QgaW50NjQKK3R5cGUg
X19fa2VybmVsX3RpbWVfdCBpbnQ2NAordHlwZSBfX19rZXJuZWxfdGltZTY0X3QgaW50NjQKK3R5
cGUgX19fa2VybmVsX2Nsb2NrX3QgaW50NjQKK3R5cGUgX19fa2VybmVsX3RpbWVyX3QgaW50MzIK
K3R5cGUgX19fa2VybmVsX2Nsb2NraWRfdCBpbnQzMgordHlwZSBfX19rZXJuZWxfY2FkZHJfdCAq
aW50OAordHlwZSBfX19rZXJuZWxfdWlkMTZfdCB1aW50MTYKK3R5cGUgX19fa2VybmVsX2dpZDE2
X3QgdWludDE2Cit0eXBlIF9fX2xlMTYgdWludDE2Cit0eXBlIF9fX2JlMTYgdWludDE2Cit0eXBl
IF9fX2xlMzIgdWludDMyCit0eXBlIF9fX2JlMzIgdWludDMyCit0eXBlIF9fX2xlNjQgdWludDY0
Cit0eXBlIF9fX2JlNjQgdWludDY0Cit0eXBlIF9fX3N1bTE2IHVpbnQxNgordHlwZSBfX193c3Vt
IHVpbnQzMgordHlwZSBfX19wb2xsX3QgdWludDMyCit0eXBlIF9ldGhoZHIgc3RydWN0IHsgaF9k
ZXN0IFs1KzFddWludDg7IGhfc291cmNlIFs1KzFddWludDg7IGhfcHJvdG8gdWludDE2OyB9Citj
b25zdCBfc2l6ZW9mX2V0aGhkciA9IDE0Cit0eXBlIF9ldGhlcl9hZGRyIHN0cnVjdCB7IGV0aGVy
X2FkZHJfb2N0ZXQgWzUrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9ldGhlcl9hZGRyID0gNgor
dHlwZSBfZXRoZXJfaGVhZGVyIHN0cnVjdCB7IGV0aGVyX2Rob3N0IFs1KzFddWludDg7IGV0aGVy
X3Nob3N0IFs1KzFddWludDg7IGV0aGVyX3R5cGUgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX2V0
aGVyX2hlYWRlciA9IDE0Cit0eXBlIF9hcnBoZHIgc3RydWN0IHsgYXJfaHJkIHVpbnQxNjsgYXJf
cHJvIHVpbnQxNjsgYXJfaGxuIHVpbnQ4OyBhcl9wbG4gdWludDg7IGFyX29wIHVpbnQxNjsgfQor
Y29uc3QgX3NpemVvZl9hcnBoZHIgPSA4Cit0eXBlIF9hcnByZXEgc3RydWN0IHsgYXJwX3BhIF9z
b2NrYWRkcjsgYXJwX2hhIF9zb2NrYWRkcjsgYXJwX2ZsYWdzIGludDMyOyBhcnBfbmV0bWFzayBf
c29ja2FkZHI7IGFycF9kZXYgWzE1KzFdaW50ODsgfQorY29uc3QgX3NpemVvZl9hcnByZXEgPSA2
OAordHlwZSBfYXJwcmVxX29sZCBzdHJ1Y3QgeyBhcnBfcGEgX3NvY2thZGRyOyBhcnBfaGEgX3Nv
Y2thZGRyOyBhcnBfZmxhZ3MgaW50MzI7IGFycF9uZXRtYXNrIF9zb2NrYWRkcjsgfQorY29uc3Qg
X3NpemVvZl9hcnByZXFfb2xkID0gNTIKK3R5cGUgX2FycGRfcmVxdWVzdCBzdHJ1Y3QgeyByZXEg
dWludDE2OyBpcCB1aW50MzI7IGRldiB1aW50NjQ7IHN0YW1wIHVpbnQ2NDsgdXBkYXRlZCB1aW50
NjQ7IGhhIFs2KzFddWludDg7IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB9Citjb25zdCBfc2l6ZW9m
X2FycGRfcmVxdWVzdCA9IDQwCit0eXBlIF9ldGhlcl9hcnAgc3RydWN0IHsgZWFfaGRyIF9hcnBo
ZHI7IGFycF9zaGEgWzUrMV11aW50ODsgYXJwX3NwYSBbMysxXXVpbnQ4OyBhcnBfdGhhIFs1KzFd
dWludDg7IGFycF90cGEgWzMrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9ldGhlcl9hcnAgPSAy
OAordHlwZSBfc2lnX2F0b21pY190IGludDMyCit0eXBlIF9zaWd2YWwgc3RydWN0IHsgc2l2YWxf
aW50IGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgR29kdW1wXzFfYWxpZ24gWzBdaW50NjQ7
IH0KK2NvbnN0IF9zaXplb2Zfc2lndmFsID0gOAordHlwZSBfX19zaWd2YWxfdCBzdHJ1Y3QgeyBz
aXZhbF9pbnQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyBHb2R1bXBfMV9hbGlnbiBbMF1p
bnQ2NDsgfQorY29uc3QgX3NpemVvZl9fX3NpZ3ZhbF90ID0gOAordHlwZSBfc2lnaW5mb190IHN0
cnVjdCB7IHNpX3NpZ25vIGludDMyOyBzaV9lcnJubyBpbnQzMjsgc2lfY29kZSBpbnQzMjsgX19w
YWQwIGludDMyOyBfc2lmaWVsZHMgc3RydWN0IHsgX3BhZCBbMjcrMV1pbnQzMjsgR29kdW1wXzBf
YWxpZ24gWzBdaW50NjQ7IH07IH0KK2NvbnN0IF9zaXplb2Zfc2lnaW5mb190ID0gMTI4Cit0eXBl
IF9zaWd2YWxfdCBzdHJ1Y3QgeyBzaXZhbF9pbnQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRl
OyBHb2R1bXBfMV9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zaWd2YWxfdCA9IDgK
K3R5cGUgX3NpZ2V2ZW50IHN0cnVjdCB7IHNpZ2V2X3ZhbHVlIF9fX3NpZ3ZhbF90OyBzaWdldl9z
aWdubyBpbnQzMjsgc2lnZXZfbm90aWZ5IGludDMyOyBfc2lnZXZfdW4gc3RydWN0IHsgX3BhZCBb
MTErMV1pbnQzMjsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH07IH0KK2NvbnN0IF9zaXplb2Zf
c2lnZXZlbnQgPSA2NAordHlwZSBfc2lnZXZlbnRfdCBzdHJ1Y3QgeyBzaWdldl92YWx1ZSBfX19z
aWd2YWxfdDsgc2lnZXZfc2lnbm8gaW50MzI7IHNpZ2V2X25vdGlmeSBpbnQzMjsgX3NpZ2V2X3Vu
IHN0cnVjdCB7IF9wYWQgWzExKzFdaW50MzI7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9OyB9
Citjb25zdCBfc2l6ZW9mX3NpZ2V2ZW50X3QgPSA2NAordHlwZSBfX19zaWdoYW5kbGVyX3QgZnVu
YyhpbnQzMikKK3R5cGUgX3NpZ2hhbmRsZXJfdCBmdW5jKGludDMyKQordHlwZSBfc2lnX3QgZnVu
YyhpbnQzMikKK3R5cGUgX3NpZ2FjdGlvbiBzdHJ1Y3QgeyBfX3NpZ2FjdGlvbl9oYW5kbGVyIHN0
cnVjdCB7IHNhX2hhbmRsZXIgX19fc2lnaGFuZGxlcl90OyB9OyBzYV9tYXNrIF9fX3NpZ3NldF90
OyBzYV9mbGFncyBpbnQzMjsgc2FfcmVzdG9yZXIgZnVuYygpOyB9Citjb25zdCBfc2l6ZW9mX3Np
Z2FjdGlvbiA9IDE1MgordHlwZSBfX2ZweF9zd19ieXRlcyBzdHJ1Y3QgeyBtYWdpYzEgdWludDMy
OyBleHRlbmRlZF9zaXplIHVpbnQzMjsgeHN0YXRlX2J2IHVpbnQ2NDsgeHN0YXRlX3NpemUgdWlu
dDMyOyBfX2dsaWJjX3Jlc2VydmVkMSBbNisxXXVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9fZnB4
X3N3X2J5dGVzID0gNDgKK3R5cGUgX19mcHJlZyBzdHJ1Y3QgeyBzaWduaWZpY2FuZCBbMysxXXVp
bnQxNjsgZXhwb25lbnQgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX19mcHJlZyA9IDEwCit0eXBl
IF9fZnB4cmVnIHN0cnVjdCB7IHNpZ25pZmljYW5kIFszKzFddWludDE2OyBleHBvbmVudCB1aW50
MTY7IF9fZ2xpYmNfcmVzZXJ2ZWQxIFsyKzFddWludDE2OyB9Citjb25zdCBfc2l6ZW9mX19mcHhy
ZWcgPSAxNgordHlwZSBfX3htbXJlZyBzdHJ1Y3QgeyBlbGVtZW50IFszKzFddWludDMyOyB9Citj
b25zdCBfc2l6ZW9mX194bW1yZWcgPSAxNgordHlwZSBfX2Zwc3RhdGUgc3RydWN0IHsgY3dkIHVp
bnQxNjsgc3dkIHVpbnQxNjsgZnR3IHVpbnQxNjsgZm9wIHVpbnQxNjsgcmlwIHVpbnQ2NDsgcmRw
IHVpbnQ2NDsgbXhjc3IgdWludDMyOyBteGNyX21hc2sgdWludDMyOyBfc3QgWzcrMV1fX2ZweHJl
ZzsgX3htbSBbMTUrMV1fX3htbXJlZzsgX19nbGliY19yZXNlcnZlZDEgWzIzKzFddWludDMyOyB9
Citjb25zdCBfc2l6ZW9mX19mcHN0YXRlID0gNTEyCit0eXBlIF9zaWdjb250ZXh0IHN0cnVjdCB7
IHI4IHVpbnQ2NDsgcjkgdWludDY0OyByMTAgdWludDY0OyByMTEgdWludDY0OyByMTIgdWludDY0
OyByMTMgdWludDY0OyByMTQgdWludDY0OyByMTUgdWludDY0OyByZGkgdWludDY0OyByc2kgdWlu
dDY0OyByYnAgdWludDY0OyByYnggdWludDY0OyByZHggdWludDY0OyByYXggdWludDY0OyByY3gg
dWludDY0OyByc3AgdWludDY0OyByaXAgdWludDY0OyBlZmxhZ3MgdWludDY0OyBjcyB1aW50MTY7
IGdzIHVpbnQxNjsgZnMgdWludDE2OyBfX3BhZDAgdWludDE2OyBlcnIgdWludDY0OyB0cmFwbm8g
dWludDY0OyBvbGRtYXNrIHVpbnQ2NDsgY3IyIHVpbnQ2NDsgZnBzdGF0ZSAqX19mcHN0YXRlOyBf
X3Jlc2VydmVkMSBbNysxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zaWdjb250ZXh0ID0gMjU2
Cit0eXBlIF9feHNhdmVfaGRyIHN0cnVjdCB7IHhzdGF0ZV9idiB1aW50NjQ7IF9fZ2xpYmNfcmVz
ZXJ2ZWQxIFsxKzFddWludDY0OyBfX2dsaWJjX3Jlc2VydmVkMiBbNCsxXXVpbnQ2NDsgfQorY29u
c3QgX3NpemVvZl9feHNhdmVfaGRyID0gNjQKK3R5cGUgX195bW1oX3N0YXRlIHN0cnVjdCB7IHlt
bWhfc3BhY2UgWzYzKzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX195bW1oX3N0YXRlID0gMjU2
Cit0eXBlIF9feHN0YXRlIHN0cnVjdCB7IGZwc3RhdGUgX19mcHN0YXRlOyB4c3RhdGVfaGRyIF9f
eHNhdmVfaGRyOyB5bW1oIF9feW1taF9zdGF0ZTsgfQorY29uc3QgX3NpemVvZl9feHN0YXRlID0g
ODMyCit0eXBlIF9zaWdzdGFjayBzdHJ1Y3QgeyBzc19zcCAqYnl0ZTsgc3Nfb25zdGFjayBpbnQz
MjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2Zfc2lnc3RhY2sgPSAxNgor
dHlwZSBfd2luc2l6ZSBzdHJ1Y3QgeyB3c19yb3cgdWludDE2OyB3c19jb2wgdWludDE2OyB3c194
cGl4ZWwgdWludDE2OyB3c195cGl4ZWwgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX3dpbnNpemUg
PSA4Cit0eXBlIF90ZXJtaW8gc3RydWN0IHsgY19pZmxhZyB1aW50MTY7IGNfb2ZsYWcgdWludDE2
OyBjX2NmbGFnIHVpbnQxNjsgY19sZmxhZyB1aW50MTY7IGNfbGluZSB1aW50ODsgY19jYyBbNysx
XXVpbnQ4OyBHb2R1bXBfMF9wYWQgWzFdYnl0ZTsgfQorY29uc3QgX3NpemVvZl90ZXJtaW8gPSAx
OAordHlwZSBfY2NfdCB1aW50OAordHlwZSBfc3BlZWRfdCB1aW50MzIKK3R5cGUgX3RjZmxhZ190
IHVpbnQzMgordHlwZSBfdGVybWlvcyBzdHJ1Y3QgeyBjX2lmbGFnIHVpbnQzMjsgY19vZmxhZyB1
aW50MzI7IGNfY2ZsYWcgdWludDMyOyBjX2xmbGFnIHVpbnQzMjsgY19saW5lIHVpbnQ4OyBjX2Nj
IFszMSsxXXVpbnQ4OyBjX2lzcGVlZCB1aW50MzI7IGNfb3NwZWVkIHVpbnQzMjsgfQorY29uc3Qg
X3NpemVvZl90ZXJtaW9zID0gNjAKK2NvbnN0IF9zaXplb2ZfZXBvbGxfZGF0YSA9IDgKK2NvbnN0
IF9zaXplb2ZfZXBvbGxfZGF0YV90ID0gOAorY29uc3QgX3NpemVvZl9lcG9sbF9ldmVudCA9IDEy
Cit0eXBlIF9wcmN0bF9tbV9tYXAgc3RydWN0IHsgc3RhcnRfY29kZSB1aW50NjQ7IGVuZF9jb2Rl
IHVpbnQ2NDsgc3RhcnRfZGF0YSB1aW50NjQ7IGVuZF9kYXRhIHVpbnQ2NDsgc3RhcnRfYnJrIHVp
bnQ2NDsgYnJrIHVpbnQ2NDsgc3RhcnRfc3RhY2sgdWludDY0OyBhcmdfc3RhcnQgdWludDY0OyBh
cmdfZW5kIHVpbnQ2NDsgZW52X3N0YXJ0IHVpbnQ2NDsgZW52X2VuZCB1aW50NjQ7IGF1eHYgKnVp
bnQ2NDsgYXV4dl9zaXplIHVpbnQzMjsgZXhlX2ZkIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9w
cmN0bF9tbV9tYXAgPSAxMDQKK3R5cGUgX19fcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3Mgc3RydWN0
IHsgb2ZmIHVpbnQ2NDsgZmxhZ3MgdWludDMyOyBuciBpbnQzMjsgfQorY29uc3QgX3NpemVvZl9f
X3B0cmFjZV9wZWVrc2lnaW5mb19hcmdzID0gMTYKK3R5cGUgX19fcHRyYWNlX3NlY2NvbXBfbWV0
YWRhdGEgc3RydWN0IHsgZmlsdGVyX29mZiB1aW50NjQ7IGZsYWdzIHVpbnQ2NDsgfQorY29uc3Qg
X3NpemVvZl9fX3B0cmFjZV9zZWNjb21wX21ldGFkYXRhID0gMTYKK3R5cGUgX3JsaW1fdCB1aW50
NjQKK3R5cGUgX3JsaW02NF90IHVpbnQ2NAordHlwZSBfcmxpbWl0IHN0cnVjdCB7IHJsaW1fY3Vy
IHVpbnQ2NDsgcmxpbV9tYXggdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3JsaW1pdCA9IDE2Cit0
eXBlIF9ybGltaXQ2NCBzdHJ1Y3QgeyBybGltX2N1ciB1aW50NjQ7IHJsaW1fbWF4IHVpbnQ2NDsg
fQorY29uc3QgX3NpemVvZl9ybGltaXQ2NCA9IDE2Cit0eXBlIF9ydXNhZ2Ugc3RydWN0IHsgcnVf
dXRpbWUgdGltZXZhbDsgcnVfc3RpbWUgdGltZXZhbDsgcnVfbWF4cnNzIGludDY0OyBydV9peHJz
cyBpbnQ2NDsgcnVfaWRyc3MgaW50NjQ7IHJ1X2lzcnNzIGludDY0OyBydV9taW5mbHQgaW50NjQ7
IHJ1X21hamZsdCBpbnQ2NDsgcnVfbnN3YXAgaW50NjQ7IHJ1X2luYmxvY2sgaW50NjQ7IHJ1X291
YmxvY2sgaW50NjQ7IHJ1X21zZ3NuZCBpbnQ2NDsgcnVfbXNncmN2IGludDY0OyBydV9uc2lnbmFs
cyBpbnQ2NDsgcnVfbnZjc3cgaW50NjQ7IHJ1X25pdmNzdyBpbnQ2NDsgfQorY29uc3QgX3NpemVv
Zl9ydXNhZ2UgPSAxNDQKK3R5cGUgX19fcmxpbWl0X3Jlc291cmNlX3QgdWludDMyCit0eXBlIF9f
X3J1c2FnZV93aG9fdCBpbnQzMgordHlwZSBfX19wcmlvcml0eV93aGljaF90IHVpbnQzMgordHlw
ZSBfc3RhdHhfdGltZXN0YW1wIHN0cnVjdCB7IHR2X3NlYyBpbnQ2NDsgdHZfbnNlYyB1aW50MzI7
IF9fc3RhdHhfdGltZXN0YW1wX3BhZDEgWzArMV1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9zdGF0
eF90aW1lc3RhbXAgPSAxNgordHlwZSBfc3RhdHggc3RydWN0IHsgc3R4X21hc2sgdWludDMyOyBz
dHhfYmxrc2l6ZSB1aW50MzI7IHN0eF9hdHRyaWJ1dGVzIHVpbnQ2NDsgc3R4X25saW5rIHVpbnQz
Mjsgc3R4X3VpZCB1aW50MzI7IHN0eF9naWQgdWludDMyOyBzdHhfbW9kZSB1aW50MTY7IF9fc3Rh
dHhfcGFkMSBbMCsxXXVpbnQxNjsgc3R4X2lubyB1aW50NjQ7IHN0eF9zaXplIHVpbnQ2NDsgc3R4
X2Jsb2NrcyB1aW50NjQ7IHN0eF9hdHRyaWJ1dGVzX21hc2sgdWludDY0OyBzdHhfYXRpbWUgX3N0
YXR4X3RpbWVzdGFtcDsgc3R4X2J0aW1lIF9zdGF0eF90aW1lc3RhbXA7IHN0eF9jdGltZSBfc3Rh
dHhfdGltZXN0YW1wOyBzdHhfbXRpbWUgX3N0YXR4X3RpbWVzdGFtcDsgc3R4X3JkZXZfbWFqb3Ig
dWludDMyOyBzdHhfcmRldl9taW5vciB1aW50MzI7IHN0eF9kZXZfbWFqb3IgdWludDMyOyBzdHhf
ZGV2X21pbm9yIHVpbnQzMjsgX19zdGF0eF9wYWQyIFsxMysxXXVpbnQ2NDsgfQorY29uc3QgX3Np
emVvZl9zdGF0eCA9IDI1NgordHlwZSBfdGltZXpvbmUgc3RydWN0IHsgdHpfbWludXRlc3dlc3Qg
aW50MzI7IHR6X2RzdHRpbWUgaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGltZXpvbmUgPSA4Cit0
eXBlIF9fX3RpbWV6b25lX3B0cl90ICpfdGltZXpvbmUKK3R5cGUgX2l0aW1lcnZhbCBzdHJ1Y3Qg
eyBpdF9pbnRlcnZhbCB0aW1ldmFsOyBpdF92YWx1ZSB0aW1ldmFsOyB9Citjb25zdCBfc2l6ZW9m
X2l0aW1lcnZhbCA9IDMyCit0eXBlIF9fX2l0aW1lcl93aGljaF90IHVpbnQzMgordHlwZSBfdG1z
IHN0cnVjdCB7IHRtc191dGltZSBpbnQ2NDsgdG1zX3N0aW1lIGludDY0OyB0bXNfY3V0aW1lIGlu
dDY0OyB0bXNfY3N0aW1lIGludDY0OyB9Citjb25zdCBfc2l6ZW9mX3RtcyA9IDMyCit0eXBlIF9p
ZHR5cGVfdCB1aW50MzIKK3R5cGUgX3NvY2thZGRyX3VuIHN0cnVjdCB7IHN1bl9mYW1pbHkgdWlu
dDE2OyBzdW5fcGF0aCBbMTA3KzFdaW50ODsgfQorY29uc3QgX3NpemVvZl9zb2NrYWRkcl91biA9
IDExMAordHlwZSBfX19sb2NhbGVfc3RydWN0IHN0cnVjdCB7IF9fbG9jYWxlcyBbMTIrMV0qX19f
bG9jYWxlX2RhdGE7IF9fY3R5cGVfYiAqdWludDE2OyBfX2N0eXBlX3RvbG93ZXIgKmludDMyOyBf
X2N0eXBlX3RvdXBwZXIgKmludDMyOyBfX25hbWVzIFsxMisxXSppbnQ4OyB9Citjb25zdCBfc2l6
ZW9mX19fbG9jYWxlX3N0cnVjdCA9IDIzMgordHlwZSBfX19sb2NhbGVfdCAqX19fbG9jYWxlX3N0
cnVjdAordHlwZSBfbG9jYWxlX3QgKl9fX2xvY2FsZV9zdHJ1Y3QKK3R5cGUgX3VzZXJfZnByZWdz
X3N0cnVjdCBzdHJ1Y3QgeyBjd2QgdWludDE2OyBzd2QgdWludDE2OyBmdHcgdWludDE2OyBmb3Ag
dWludDE2OyByaXAgdWludDY0OyByZHAgdWludDY0OyBteGNzciB1aW50MzI7IG14Y3JfbWFzayB1
aW50MzI7IHN0X3NwYWNlIFszMSsxXXVpbnQzMjsgeG1tX3NwYWNlIFs2MysxXXVpbnQzMjsgcGFk
ZGluZyBbMjMrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdXNlcl9mcHJlZ3Nfc3RydWN0ID0g
NTEyCit0eXBlIF91c2VyX3JlZ3Nfc3RydWN0IHN0cnVjdCB7IHIxNSB1aW50NjQ7IHIxNCB1aW50
NjQ7IHIxMyB1aW50NjQ7IHIxMiB1aW50NjQ7IHJicCB1aW50NjQ7IHJieCB1aW50NjQ7IHIxMSB1
aW50NjQ7IHIxMCB1aW50NjQ7IHI5IHVpbnQ2NDsgcjggdWludDY0OyByYXggdWludDY0OyByY3gg
dWludDY0OyByZHggdWludDY0OyByc2kgdWludDY0OyByZGkgdWludDY0OyBvcmlnX3JheCB1aW50
NjQ7IHJpcCB1aW50NjQ7IGNzIHVpbnQ2NDsgZWZsYWdzIHVpbnQ2NDsgcnNwIHVpbnQ2NDsgc3Mg
dWludDY0OyBmc19iYXNlIHVpbnQ2NDsgZ3NfYmFzZSB1aW50NjQ7IGRzIHVpbnQ2NDsgZXMgdWlu
dDY0OyBmcyB1aW50NjQ7IGdzIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl91c2VyX3JlZ3Nfc3Ry
dWN0ID0gMjE2Cit0eXBlIF91c2VyIHN0cnVjdCB7IHJlZ3MgX3VzZXJfcmVnc19zdHJ1Y3Q7IHVf
ZnB2YWxpZCBpbnQzMjsgaTM4NyBfdXNlcl9mcHJlZ3Nfc3RydWN0OyB1X3RzaXplIHVpbnQ2NDsg
dV9kc2l6ZSB1aW50NjQ7IHVfc3NpemUgdWludDY0OyBzdGFydF9jb2RlIHVpbnQ2NDsgc3RhcnRf
c3RhY2sgdWludDY0OyBzaWduYWwgaW50NjQ7IHJlc2VydmVkIGludDMyOyBHb2R1bXBfMF9wYWQg
WzRdYnl0ZTsgdV9hcjAgKl91c2VyX3JlZ3Nfc3RydWN0OyB1X2Zwc3RhdGUgKl91c2VyX2ZwcmVn
c19zdHJ1Y3Q7IG1hZ2ljIHVpbnQ2NDsgdV9jb21tIFszMSsxXWludDg7IHVfZGVidWdyZWcgWzcr
MV11aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfdXNlciA9IDkxMgordHlwZSBfdXRzbmFtZSBzdHJ1
Y3QgeyBzeXNuYW1lIFs2NCsxXWludDg7IG5vZGVuYW1lIFs2NCsxXWludDg7IHJlbGVhc2UgWzY0
KzFdaW50ODsgdmVyc2lvbiBbNjQrMV1pbnQ4OyBtYWNoaW5lIFs2NCsxXWludDg7IGRvbWFpbm5h
bWUgWzY0KzFdaW50ODsgfQorY29uc3QgX3NpemVvZl91dHNuYW1lID0gMzkwCit0eXBlIF90aW1l
eCBzdHJ1Y3QgeyBtb2RlcyB1aW50MzI7IG9mZnNldCBpbnQ2NDsgZnJlcSBpbnQ2NDsgbWF4ZXJy
b3IgaW50NjQ7IGVzdGVycm9yIGludDY0OyBzdGF0dXMgaW50MzI7IGNvbnN0YW50IGludDY0OyBw
cmVjaXNpb24gaW50NjQ7IHRvbGVyYW5jZSBpbnQ2NDsgdGltZSB0aW1ldmFsOyB0aWNrIGludDY0
OyBwcHNmcmVxIGludDY0OyBqaXR0ZXIgaW50NjQ7IHNoaWZ0IGludDMyOyBzdGFiaWwgaW50NjQ7
IGppdGNudCBpbnQ2NDsgY2FsY250IGludDY0OyBlcnJjbnQgaW50NjQ7IHN0YmNudCBpbnQ2NDsg
dGFpIGludDMyOyBHb2R1bXBfMCBpbnQzMjsgR29kdW1wXzEgaW50MzI7IEdvZHVtcF8yIGludDMy
OyBHb2R1bXBfMyBpbnQzMjsgR29kdW1wXzQgaW50MzI7IEdvZHVtcF81IGludDMyOyBHb2R1bXBf
NiBpbnQzMjsgR29kdW1wXzcgaW50MzI7IEdvZHVtcF84IGludDMyOyBHb2R1bXBfOSBpbnQzMjsg
R29kdW1wXzEwIGludDMyOyB9Citjb25zdCBfc2l6ZW9mX3RpbWV4ID0gMjA4Cit0eXBlIF90bSBz
dHJ1Y3QgeyB0bV9zZWMgaW50MzI7IHRtX21pbiBpbnQzMjsgdG1faG91ciBpbnQzMjsgdG1fbWRh
eSBpbnQzMjsgdG1fbW9uIGludDMyOyB0bV95ZWFyIGludDMyOyB0bV93ZGF5IGludDMyOyB0bV95
ZGF5IGludDMyOyB0bV9pc2RzdCBpbnQzMjsgdG1fZ210b2ZmIGludDY0OyB0bV96b25lICppbnQ4
OyB9Citjb25zdCBfc2l6ZW9mX3RtID0gNTYKK3R5cGUgX2l0aW1lcnNwZWMgc3RydWN0IHsgaXRf
aW50ZXJ2YWwgdGltZXNwZWM7IGl0X3ZhbHVlIHRpbWVzcGVjOyB9Citjb25zdCBfc2l6ZW9mX2l0
aW1lcnNwZWMgPSAzMgordHlwZSBfcnBjZW50IHN0cnVjdCB7IHJfbmFtZSAqaW50ODsgcl9hbGlh
c2VzICoqaW50ODsgcl9udW1iZXIgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25z
dCBfc2l6ZW9mX3JwY2VudCA9IDI0Cit0eXBlIF9uZXRlbnQgc3RydWN0IHsgbl9uYW1lICppbnQ4
OyBuX2FsaWFzZXMgKippbnQ4OyBuX2FkZHJ0eXBlIGludDMyOyBuX25ldCB1aW50MzI7IH0KK2Nv
bnN0IF9zaXplb2ZfbmV0ZW50ID0gMjQKK3R5cGUgX2hvc3RlbnQgc3RydWN0IHsgaF9uYW1lICpp
bnQ4OyBoX2FsaWFzZXMgKippbnQ4OyBoX2FkZHJ0eXBlIGludDMyOyBoX2xlbmd0aCBpbnQzMjsg
aF9hZGRyX2xpc3QgKippbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2hvc3RlbnQgPSAzMgordHlwZSBf
c2VydmVudCBzdHJ1Y3QgeyBzX25hbWUgKmludDg7IHNfYWxpYXNlcyAqKmludDg7IHNfcG9ydCBp
bnQzMjsgc19wcm90byAqaW50ODsgfQorY29uc3QgX3NpemVvZl9zZXJ2ZW50ID0gMzIKK3R5cGUg
X3Byb3RvZW50IHN0cnVjdCB7IHBfbmFtZSAqaW50ODsgcF9hbGlhc2VzICoqaW50ODsgcF9wcm90
byBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfcHJvdG9lbnQg
PSAyNAordHlwZSBfYWRkcmluZm8gc3RydWN0IHsgYWlfZmxhZ3MgaW50MzI7IGFpX2ZhbWlseSBp
bnQzMjsgYWlfc29ja3R5cGUgaW50MzI7IGFpX3Byb3RvY29sIGludDMyOyBhaV9hZGRybGVuIHVp
bnQzMjsgYWlfYWRkciAqX3NvY2thZGRyOyBhaV9jYW5vbm5hbWUgKmludDg7IGFpX25leHQgKl9h
ZGRyaW5mbzsgfQorY29uc3QgX3NpemVvZl9hZGRyaW5mbyA9IDQ4Cit0eXBlIF9nYWljYiBzdHJ1
Y3QgeyBhcl9uYW1lICppbnQ4OyBhcl9zZXJ2aWNlICppbnQ4OyBhcl9yZXF1ZXN0ICpfYWRkcmlu
Zm87IGFyX3Jlc3VsdCAqX2FkZHJpbmZvOyBfX3JldHVybiBpbnQzMjsgX19nbGliY19yZXNlcnZl
ZCBbNCsxXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2dhaWNiID0gNTYKK3R5cGUgX3Bhc3N3ZCBz
dHJ1Y3QgeyBwd19uYW1lICppbnQ4OyBwd19wYXNzd2QgKmludDg7IHB3X3VpZCB1aW50MzI7IHB3
X2dpZCB1aW50MzI7IHB3X2dlY29zICppbnQ4OyBwd19kaXIgKmludDg7IHB3X3NoZWxsICppbnQ4
OyB9Citjb25zdCBfc2l6ZW9mX3Bhc3N3ZCA9IDQ4Cit0eXBlIF9GSUxFIHN0cnVjdCB7IH0KK3R5
cGUgX2dyb3VwIHN0cnVjdCB7IGdyX25hbWUgKmludDg7IGdyX3Bhc3N3ZCAqaW50ODsgZ3JfZ2lk
IHVpbnQzMjsgZ3JfbWVtICoqaW50ODsgfQorY29uc3QgX3NpemVvZl9ncm91cCA9IDMyCit0eXBl
IF9zb2NrX2ZpbHRlciBzdHJ1Y3QgeyBjb2RlIHVpbnQxNjsganQgdWludDg7IGpmIHVpbnQ4OyBr
IHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9zb2NrX2ZpbHRlciA9IDgKK3R5cGUgX3NvY2tfZnBy
b2cgc3RydWN0IHsgbGVuIHVpbnQxNjsgZmlsdGVyICpfc29ja19maWx0ZXI7IH0KK2NvbnN0IF9z
aXplb2Zfc29ja19mcHJvZyA9IDE2Cit0eXBlIF9zeXNpbmZvIHN0cnVjdCB7IHVwdGltZSBpbnQ2
NDsgbG9hZHMgWzIrMV11aW50NjQ7IHRvdGFscmFtIHVpbnQ2NDsgZnJlZXJhbSB1aW50NjQ7IHNo
YXJlZHJhbSB1aW50NjQ7IGJ1ZmZlcnJhbSB1aW50NjQ7IHRvdGFsc3dhcCB1aW50NjQ7IGZyZWVz
d2FwIHVpbnQ2NDsgcHJvY3MgdWludDE2OyBwYWQgdWludDE2OyB0b3RhbGhpZ2ggdWludDY0OyBm
cmVlaGlnaCB1aW50NjQ7IG1lbV91bml0IHVpbnQzMjsgX2YgWzBdaW50ODsgR29kdW1wXzBfcGFk
IFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2Zfc3lzaW5mbyA9IDExMgordHlwZSBfX19rZXJuZWxf
c2FfZmFtaWx5X3QgdWludDE2Cit0eXBlIF9fX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIHN0cnVj
dCB7IHNzX2ZhbWlseSB1aW50MTY7IF9fZGF0YSBbMTI1KzFdaW50ODsgR29kdW1wXzBfYWxpZ24g
WzBdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSA9IDEy
OAordHlwZSBfc29ja2FkZHJfbmwgc3RydWN0IHsgbmxfZmFtaWx5IHVpbnQxNjsgbmxfcGFkIHVp
bnQxNjsgbmxfcGlkIHVpbnQzMjsgbmxfZ3JvdXBzIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9z
b2NrYWRkcl9ubCA9IDEyCit0eXBlIF9ubG1zZ2hkciBzdHJ1Y3QgeyBubG1zZ19sZW4gdWludDMy
OyBubG1zZ190eXBlIHVpbnQxNjsgbmxtc2dfZmxhZ3MgdWludDE2OyBubG1zZ19zZXEgdWludDMy
OyBubG1zZ19waWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25sbXNnaGRyID0gMTYKK3R5cGUg
X25sbXNnZXJyIHN0cnVjdCB7IGVycm9yIGludDMyOyBtc2cgX25sbXNnaGRyOyB9Citjb25zdCBf
c2l6ZW9mX25sbXNnZXJyID0gMjAKK3R5cGUgX25sX3BrdGluZm8gc3RydWN0IHsgZ3JvdXAgdWlu
dDMyOyB9Citjb25zdCBfc2l6ZW9mX25sX3BrdGluZm8gPSA0Cit0eXBlIF9ubF9tbWFwX3JlcSBz
dHJ1Y3QgeyBubV9ibG9ja19zaXplIHVpbnQzMjsgbm1fYmxvY2tfbnIgdWludDMyOyBubV9mcmFt
ZV9zaXplIHVpbnQzMjsgbm1fZnJhbWVfbnIgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25sX21t
YXBfcmVxID0gMTYKK3R5cGUgX25sX21tYXBfaGRyIHN0cnVjdCB7IG5tX3N0YXR1cyB1aW50MzI7
IG5tX2xlbiB1aW50MzI7IG5tX2dyb3VwIHVpbnQzMjsgbm1fcGlkIHVpbnQzMjsgbm1fdWlkIHVp
bnQzMjsgbm1fZ2lkIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9ubF9tbWFwX2hkciA9IDI0Cit0
eXBlIF9ubGF0dHIgc3RydWN0IHsgbmxhX2xlbiB1aW50MTY7IG5sYV90eXBlIHVpbnQxNjsgfQor
Y29uc3QgX3NpemVvZl9ubGF0dHIgPSA0Cit0eXBlIF9ubGFfYml0ZmllbGQzMiBzdHJ1Y3QgeyB2
YWx1ZSB1aW50MzI7IHNlbGVjdG9yIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9ubGFfYml0Zmll
bGQzMiA9IDgKK3R5cGUgX2lmYWRkcm1zZyBzdHJ1Y3QgeyBpZmFfZmFtaWx5IHVpbnQ4OyBpZmFf
cHJlZml4bGVuIHVpbnQ4OyBpZmFfZmxhZ3MgdWludDg7IGlmYV9zY29wZSB1aW50ODsgaWZhX2lu
ZGV4IHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmFkZHJtc2cgPSA4Cit0eXBlIF9pZmFfY2Fj
aGVpbmZvIHN0cnVjdCB7IGlmYV9wcmVmZXJlZCB1aW50MzI7IGlmYV92YWxpZCB1aW50MzI7IGNz
dGFtcCB1aW50MzI7IHRzdGFtcCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZhX2NhY2hlaW5m
byA9IDE2Cit0eXBlIF90dW5fcGkgc3RydWN0IHsgZmxhZ3MgdWludDE2OyBwcm90byB1aW50MTY7
IH0KK2NvbnN0IF9zaXplb2ZfdHVuX3BpID0gNAordHlwZSBfdHVuX2ZpbHRlciBzdHJ1Y3QgeyBm
bGFncyB1aW50MTY7IGNvdW50IHVpbnQxNjsgYWRkciBbMF1bNSsxXXVpbnQ4OyB9Citjb25zdCBf
c2l6ZW9mX3R1bl9maWx0ZXIgPSA0Cit0eXBlIF9wdHJhY2VfcGVla3NpZ2luZm9fYXJncyBzdHJ1
Y3QgeyBvZmYgdWludDY0OyBmbGFncyB1aW50MzI7IG5yIGludDMyOyB9Citjb25zdCBfc2l6ZW9m
X3B0cmFjZV9wZWVrc2lnaW5mb19hcmdzID0gMTYKK3R5cGUgX3NlY2NvbXBfbWV0YWRhdGEgc3Ry
dWN0IHsgZmlsdGVyX29mZiB1aW50NjQ7IGZsYWdzIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9z
ZWNjb21wX21ldGFkYXRhID0gMTYKK3R5cGUgX3B0X3JlZ3Mgc3RydWN0IHsgcjE1IHVpbnQ2NDsg
cjE0IHVpbnQ2NDsgcjEzIHVpbnQ2NDsgcjEyIHVpbnQ2NDsgcmJwIHVpbnQ2NDsgcmJ4IHVpbnQ2
NDsgcjExIHVpbnQ2NDsgcjEwIHVpbnQ2NDsgcjkgdWludDY0OyByOCB1aW50NjQ7IHJheCB1aW50
NjQ7IHJjeCB1aW50NjQ7IHJkeCB1aW50NjQ7IHJzaSB1aW50NjQ7IHJkaSB1aW50NjQ7IG9yaWdf
cmF4IHVpbnQ2NDsgcmlwIHVpbnQ2NDsgY3MgdWludDY0OyBlZmxhZ3MgdWludDY0OyByc3AgdWlu
dDY0OyBzcyB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcHRfcmVncyA9IDE2OAordHlwZSBfcnRu
bF9saW5rX3N0YXRzIHN0cnVjdCB7IHJ4X3BhY2tldHMgdWludDMyOyB0eF9wYWNrZXRzIHVpbnQz
MjsgcnhfYnl0ZXMgdWludDMyOyB0eF9ieXRlcyB1aW50MzI7IHJ4X2Vycm9ycyB1aW50MzI7IHR4
X2Vycm9ycyB1aW50MzI7IHJ4X2Ryb3BwZWQgdWludDMyOyB0eF9kcm9wcGVkIHVpbnQzMjsgbXVs
dGljYXN0IHVpbnQzMjsgY29sbGlzaW9ucyB1aW50MzI7IHJ4X2xlbmd0aF9lcnJvcnMgdWludDMy
OyByeF9vdmVyX2Vycm9ycyB1aW50MzI7IHJ4X2NyY19lcnJvcnMgdWludDMyOyByeF9mcmFtZV9l
cnJvcnMgdWludDMyOyByeF9maWZvX2Vycm9ycyB1aW50MzI7IHJ4X21pc3NlZF9lcnJvcnMgdWlu
dDMyOyB0eF9hYm9ydGVkX2Vycm9ycyB1aW50MzI7IHR4X2NhcnJpZXJfZXJyb3JzIHVpbnQzMjsg
dHhfZmlmb19lcnJvcnMgdWludDMyOyB0eF9oZWFydGJlYXRfZXJyb3JzIHVpbnQzMjsgdHhfd2lu
ZG93X2Vycm9ycyB1aW50MzI7IHJ4X2NvbXByZXNzZWQgdWludDMyOyB0eF9jb21wcmVzc2VkIHVp
bnQzMjsgcnhfbm9oYW5kbGVyIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9ydG5sX2xpbmtfc3Rh
dHMgPSA5NgordHlwZSBfcnRubF9saW5rX3N0YXRzNjQgc3RydWN0IHsgcnhfcGFja2V0cyB1aW50
NjQ7IHR4X3BhY2tldHMgdWludDY0OyByeF9ieXRlcyB1aW50NjQ7IHR4X2J5dGVzIHVpbnQ2NDsg
cnhfZXJyb3JzIHVpbnQ2NDsgdHhfZXJyb3JzIHVpbnQ2NDsgcnhfZHJvcHBlZCB1aW50NjQ7IHR4
X2Ryb3BwZWQgdWludDY0OyBtdWx0aWNhc3QgdWludDY0OyBjb2xsaXNpb25zIHVpbnQ2NDsgcnhf
bGVuZ3RoX2Vycm9ycyB1aW50NjQ7IHJ4X292ZXJfZXJyb3JzIHVpbnQ2NDsgcnhfY3JjX2Vycm9y
cyB1aW50NjQ7IHJ4X2ZyYW1lX2Vycm9ycyB1aW50NjQ7IHJ4X2ZpZm9fZXJyb3JzIHVpbnQ2NDsg
cnhfbWlzc2VkX2Vycm9ycyB1aW50NjQ7IHR4X2Fib3J0ZWRfZXJyb3JzIHVpbnQ2NDsgdHhfY2Fy
cmllcl9lcnJvcnMgdWludDY0OyB0eF9maWZvX2Vycm9ycyB1aW50NjQ7IHR4X2hlYXJ0YmVhdF9l
cnJvcnMgdWludDY0OyB0eF93aW5kb3dfZXJyb3JzIHVpbnQ2NDsgcnhfY29tcHJlc3NlZCB1aW50
NjQ7IHR4X2NvbXByZXNzZWQgdWludDY0OyByeF9ub2hhbmRsZXIgdWludDY0OyB9Citjb25zdCBf
c2l6ZW9mX3J0bmxfbGlua19zdGF0czY0ID0gMTkyCit0eXBlIF9ydG5sX2xpbmtfaWZtYXAgc3Ry
dWN0IHsgbWVtX3N0YXJ0IHVpbnQ2NDsgbWVtX2VuZCB1aW50NjQ7IGJhc2VfYWRkciB1aW50NjQ7
IGlycSB1aW50MTY7IGRtYSB1aW50ODsgcG9ydCB1aW50ODsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7
IH0KK2NvbnN0IF9zaXplb2ZfcnRubF9saW5rX2lmbWFwID0gMzIKK3R5cGUgX2lmbGFfYnJpZGdl
X2lkIHN0cnVjdCB7IHByaW8gWzErMV11aW50ODsgYWRkciBbNSsxXXVpbnQ4OyB9Citjb25zdCBf
c2l6ZW9mX2lmbGFfYnJpZGdlX2lkID0gOAordHlwZSBfaWZsYV9jYWNoZWluZm8gc3RydWN0IHsg
bWF4X3JlYXNtX2xlbiB1aW50MzI7IHRzdGFtcCB1aW50MzI7IHJlYWNoYWJsZV90aW1lIHVpbnQz
MjsgcmV0cmFuc190aW1lIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX2NhY2hlaW5mbyA9
IDE2Cit0eXBlIF9pZmxhX3ZsYW5fZmxhZ3Mgc3RydWN0IHsgZmxhZ3MgdWludDMyOyBtYXNrIHVp
bnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZsYW5fZmxhZ3MgPSA4Cit0eXBlIF9pZmxhX3Zs
YW5fcW9zX21hcHBpbmcgc3RydWN0IHsgZnJvbSB1aW50MzI7IHRvIHVpbnQzMjsgfQorY29uc3Qg
X3NpemVvZl9pZmxhX3ZsYW5fcW9zX21hcHBpbmcgPSA4Cit0eXBlIF9pZmxhX3Z4bGFuX3BvcnRf
cmFuZ2Ugc3RydWN0IHsgbG93IHVpbnQxNjsgaGlnaCB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2Zf
aWZsYV92eGxhbl9wb3J0X3JhbmdlID0gNAordHlwZSBfaWZsYV92Zl9tYWMgc3RydWN0IHsgdmYg
dWludDMyOyBtYWMgWzMxKzFddWludDg7IH0KK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9tYWMgPSAz
NgordHlwZSBfaWZsYV92Zl92bGFuIHN0cnVjdCB7IHZmIHVpbnQzMjsgdmxhbiB1aW50MzI7IHFv
cyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl92bGFuID0gMTIKK3R5cGUgX2lmbGFf
dmZfdmxhbl9pbmZvIHN0cnVjdCB7IHZmIHVpbnQzMjsgdmxhbiB1aW50MzI7IHFvcyB1aW50MzI7
IHZsYW5fcHJvdG8gdWludDE2OyBHb2R1bXBfMF9wYWQgWzJdYnl0ZTsgfQorY29uc3QgX3NpemVv
Zl9pZmxhX3ZmX3ZsYW5faW5mbyA9IDE2Cit0eXBlIF9pZmxhX3ZmX3R4X3JhdGUgc3RydWN0IHsg
dmYgdWludDMyOyByYXRlIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3R4X3JhdGUg
PSA4Cit0eXBlIF9pZmxhX3ZmX3JhdGUgc3RydWN0IHsgdmYgdWludDMyOyBtaW5fdHhfcmF0ZSB1
aW50MzI7IG1heF90eF9yYXRlIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3JhdGUg
PSAxMgordHlwZSBfaWZsYV92Zl9zcG9vZmNoayBzdHJ1Y3QgeyB2ZiB1aW50MzI7IHNldHRpbmcg
dWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZfc3Bvb2ZjaGsgPSA4Cit0eXBlIF9pZmxh
X3ZmX2d1aWQgc3RydWN0IHsgdmYgdWludDMyOyBndWlkIHVpbnQ2NDsgfQorY29uc3QgX3NpemVv
Zl9pZmxhX3ZmX2d1aWQgPSAxNgordHlwZSBfaWZsYV92Zl9saW5rX3N0YXRlIHN0cnVjdCB7IHZm
IHVpbnQzMjsgbGlua19zdGF0ZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9saW5r
X3N0YXRlID0gOAordHlwZSBfaWZsYV92Zl9yc3NfcXVlcnlfZW4gc3RydWN0IHsgdmYgdWludDMy
OyBzZXR0aW5nIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3Jzc19xdWVyeV9lbiA9
IDgKK3R5cGUgX2lmbGFfdmZfdHJ1c3Qgc3RydWN0IHsgdmYgdWludDMyOyBzZXR0aW5nIHVpbnQz
MjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3RydXN0ID0gOAordHlwZSBfaWZsYV9wb3J0X3Zz
aSBzdHJ1Y3QgeyB2c2lfbWdyX2lkIHVpbnQ4OyB2c2lfdHlwZV9pZCBbMisxXXVpbnQ4OyB2c2lf
dHlwZV92ZXJzaW9uIHVpbnQ4OyBwYWQgWzIrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9pZmxh
X3BvcnRfdnNpID0gOAordHlwZSBfaWZfc3RhdHNfbXNnIHN0cnVjdCB7IGZhbWlseSB1aW50ODsg
cGFkMSB1aW50ODsgcGFkMiB1aW50MTY7IGlmaW5kZXggdWludDMyOyBmaWx0ZXJfbWFzayB1aW50
MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZfc3RhdHNfbXNnID0gMTIKK3R5cGUgX2lmbGFfcm1uZXRf
ZmxhZ3Mgc3RydWN0IHsgZmxhZ3MgdWludDMyOyBtYXNrIHVpbnQzMjsgfQorY29uc3QgX3NpemVv
Zl9pZmxhX3JtbmV0X2ZsYWdzID0gOAordHlwZSBfbmRtc2cgc3RydWN0IHsgbmRtX2ZhbWlseSB1
aW50ODsgbmRtX3BhZDEgdWludDg7IG5kbV9wYWQyIHVpbnQxNjsgbmRtX2lmaW5kZXggaW50MzI7
IG5kbV9zdGF0ZSB1aW50MTY7IG5kbV9mbGFncyB1aW50ODsgbmRtX3R5cGUgdWludDg7IH0KK2Nv
bnN0IF9zaXplb2ZfbmRtc2cgPSAxMgordHlwZSBfbmRhX2NhY2hlaW5mbyBzdHJ1Y3QgeyBuZG1f
Y29uZmlybWVkIHVpbnQzMjsgbmRtX3VzZWQgdWludDMyOyBuZG1fdXBkYXRlZCB1aW50MzI7IG5k
bV9yZWZjbnQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25kYV9jYWNoZWluZm8gPSAxNgordHlw
ZSBfbmR0X3N0YXRzIHN0cnVjdCB7IG5kdHNfYWxsb2NzIHVpbnQ2NDsgbmR0c19kZXN0cm95cyB1
aW50NjQ7IG5kdHNfaGFzaF9ncm93cyB1aW50NjQ7IG5kdHNfcmVzX2ZhaWxlZCB1aW50NjQ7IG5k
dHNfbG9va3VwcyB1aW50NjQ7IG5kdHNfaGl0cyB1aW50NjQ7IG5kdHNfcmN2X3Byb2Jlc19tY2Fz
dCB1aW50NjQ7IG5kdHNfcmN2X3Byb2Jlc191Y2FzdCB1aW50NjQ7IG5kdHNfcGVyaW9kaWNfZ2Nf
cnVucyB1aW50NjQ7IG5kdHNfZm9yY2VkX2djX3J1bnMgdWludDY0OyBuZHRzX3RhYmxlX2Z1bGxz
IHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9uZHRfc3RhdHMgPSA4OAordHlwZSBfbmR0bXNnIHN0
cnVjdCB7IG5kdG1fZmFtaWx5IHVpbnQ4OyBuZHRtX3BhZDEgdWludDg7IG5kdG1fcGFkMiB1aW50
MTY7IH0KK2NvbnN0IF9zaXplb2ZfbmR0bXNnID0gNAordHlwZSBfbmR0X2NvbmZpZyBzdHJ1Y3Qg
eyBuZHRjX2tleV9sZW4gdWludDE2OyBuZHRjX2VudHJ5X3NpemUgdWludDE2OyBuZHRjX2VudHJp
ZXMgdWludDMyOyBuZHRjX2xhc3RfZmx1c2ggdWludDMyOyBuZHRjX2xhc3RfcmFuZCB1aW50MzI7
IG5kdGNfaGFzaF9ybmQgdWludDMyOyBuZHRjX2hhc2hfbWFzayB1aW50MzI7IG5kdGNfaGFzaF9j
aGFpbl9nYyB1aW50MzI7IG5kdGNfcHJveHlfcWxlbiB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zf
bmR0X2NvbmZpZyA9IDMyCit0eXBlIF9ydGF0dHIgc3RydWN0IHsgcnRhX2xlbiB1aW50MTY7IHJ0
YV90eXBlIHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl9ydGF0dHIgPSA0Cit0eXBlIF9ydG1zZyBz
dHJ1Y3QgeyBydG1fZmFtaWx5IHVpbnQ4OyBydG1fZHN0X2xlbiB1aW50ODsgcnRtX3NyY19sZW4g
dWludDg7IHJ0bV90b3MgdWludDg7IHJ0bV90YWJsZSB1aW50ODsgcnRtX3Byb3RvY29sIHVpbnQ4
OyBydG1fc2NvcGUgdWludDg7IHJ0bV90eXBlIHVpbnQ4OyBydG1fZmxhZ3MgdWludDMyOyB9Citj
b25zdCBfc2l6ZW9mX3J0bXNnID0gMTIKK3R5cGUgX3J0bmV4dGhvcCBzdHJ1Y3QgeyBydG5oX2xl
biB1aW50MTY7IHJ0bmhfZmxhZ3MgdWludDg7IHJ0bmhfaG9wcyB1aW50ODsgcnRuaF9pZmluZGV4
IGludDMyOyB9Citjb25zdCBfc2l6ZW9mX3J0bmV4dGhvcCA9IDgKK3R5cGUgX3J0dmlhIHN0cnVj
dCB7IHJ0dmlhX2ZhbWlseSB1aW50MTY7IHJ0dmlhX2FkZHIgWzBddWludDg7IH0KK2NvbnN0IF9z
aXplb2ZfcnR2aWEgPSAyCit0eXBlIF9ydGFfY2FjaGVpbmZvIHN0cnVjdCB7IHJ0YV9jbG50cmVm
IHVpbnQzMjsgcnRhX2xhc3R1c2UgdWludDMyOyBydGFfZXhwaXJlcyBpbnQzMjsgcnRhX2Vycm9y
IHVpbnQzMjsgcnRhX3VzZWQgdWludDMyOyBydGFfaWQgdWludDMyOyBydGFfdHMgdWludDMyOyBy
dGFfdHNhZ2UgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3J0YV9jYWNoZWluZm8gPSAzMgordHlw
ZSBfcnRhX3Nlc3Npb24gc3RydWN0IHsgcHJvdG8gdWludDg7IHBhZDEgdWludDg7IHBhZDIgdWlu
dDE2OyB1IHN0cnVjdCB7IHBvcnRzIHN0cnVjdCB7IHNwb3J0IHVpbnQxNjsgZHBvcnQgdWludDE2
OyB9OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQzMjsgfTsgfQorY29uc3QgX3NpemVvZl9ydGFfc2Vz
c2lvbiA9IDgKK3R5cGUgX3J0YV9tZmNfc3RhdHMgc3RydWN0IHsgbWZjc19wYWNrZXRzIHVpbnQ2
NDsgbWZjc19ieXRlcyB1aW50NjQ7IG1mY3Nfd3JvbmdfaWYgdWludDY0OyB9Citjb25zdCBfc2l6
ZW9mX3J0YV9tZmNfc3RhdHMgPSAyNAordHlwZSBfcnRnZW5tc2cgc3RydWN0IHsgcnRnZW5fZmFt
aWx5IHVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3J0Z2VubXNnID0gMQordHlwZSBfaWZpbmZvbXNn
IHN0cnVjdCB7IGlmaV9mYW1pbHkgdWludDg7IF9faWZpX3BhZCB1aW50ODsgaWZpX3R5cGUgdWlu
dDE2OyBpZmlfaW5kZXggaW50MzI7IGlmaV9mbGFncyB1aW50MzI7IGlmaV9jaGFuZ2UgdWludDMy
OyB9Citjb25zdCBfc2l6ZW9mX2lmaW5mb21zZyA9IDE2Cit0eXBlIF9wcmVmaXhtc2cgc3RydWN0
IHsgcHJlZml4X2ZhbWlseSB1aW50ODsgcHJlZml4X3BhZDEgdWludDg7IHByZWZpeF9wYWQyIHVp
bnQxNjsgcHJlZml4X2lmaW5kZXggaW50MzI7IHByZWZpeF90eXBlIHVpbnQ4OyBwcmVmaXhfbGVu
IHVpbnQ4OyBwcmVmaXhfZmxhZ3MgdWludDg7IHByZWZpeF9wYWQzIHVpbnQ4OyB9Citjb25zdCBf
c2l6ZW9mX3ByZWZpeG1zZyA9IDEyCit0eXBlIF9wcmVmaXhfY2FjaGVpbmZvIHN0cnVjdCB7IHBy
ZWZlcnJlZF90aW1lIHVpbnQzMjsgdmFsaWRfdGltZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zf
cHJlZml4X2NhY2hlaW5mbyA9IDgKK3R5cGUgX3RjbXNnIHN0cnVjdCB7IHRjbV9mYW1pbHkgdWlu
dDg7IHRjbV9fcGFkMSB1aW50ODsgdGNtX19wYWQyIHVpbnQxNjsgdGNtX2lmaW5kZXggaW50MzI7
IHRjbV9oYW5kbGUgdWludDMyOyB0Y21fcGFyZW50IHVpbnQzMjsgdGNtX2luZm8gdWludDMyOyB9
Citjb25zdCBfc2l6ZW9mX3RjbXNnID0gMjAKK3R5cGUgX25kdXNlcm9wdG1zZyBzdHJ1Y3QgeyBu
ZHVzZXJvcHRfZmFtaWx5IHVpbnQ4OyBuZHVzZXJvcHRfcGFkMSB1aW50ODsgbmR1c2Vyb3B0X29w
dHNfbGVuIHVpbnQxNjsgbmR1c2Vyb3B0X2lmaW5kZXggaW50MzI7IG5kdXNlcm9wdF9pY21wX3R5
cGUgdWludDg7IG5kdXNlcm9wdF9pY21wX2NvZGUgdWludDg7IG5kdXNlcm9wdF9wYWQyIHVpbnQx
NjsgbmR1c2Vyb3B0X3BhZDMgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25kdXNlcm9wdG1zZyA9
IDE2Cit0eXBlIF90Y2Ftc2cgc3RydWN0IHsgdGNhX2ZhbWlseSB1aW50ODsgdGNhX19wYWQxIHVp
bnQ4OyB0Y2FfX3BhZDIgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX3RjYW1zZyA9IDQKK3R5cGUg
X2lmX25hbWVpbmRleCBzdHJ1Y3QgeyBpZl9pbmRleCB1aW50MzI7IGlmX25hbWUgKmludDg7IH0K
K2NvbnN0IF9zaXplb2ZfaWZfbmFtZWluZGV4ID0gMTYKK3R5cGUgX2lmYWRkciBzdHJ1Y3QgeyBp
ZmFfYWRkciBfc29ja2FkZHI7IGlmYV9pZnUgc3RydWN0IHsgaWZ1X2Jyb2FkYWRkciBfc29ja2Fk
ZHI7IH07IGlmYV9pZnAgKl9pZmFjZTsgaWZhX25leHQgKl9pZmFkZHI7IH0KK2NvbnN0IF9zaXpl
b2ZfaWZhZGRyID0gNDgKK3R5cGUgX2lmbWFwIHN0cnVjdCB7IG1lbV9zdGFydCB1aW50NjQ7IG1l
bV9lbmQgdWludDY0OyBiYXNlX2FkZHIgdWludDE2OyBpcnEgdWludDg7IGRtYSB1aW50ODsgcG9y
dCB1aW50ODsgR29kdW1wXzBfcGFkIFszXWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfaWZtYXAgPSAy
NAordHlwZSBfaWZyZXEgc3RydWN0IHsgaWZyX2lmcm4gc3RydWN0IHsgaWZybl9uYW1lIFsxNSsx
XWludDg7IH07IGlmcl9pZnJ1IHN0cnVjdCB7IGlmcnVfYWRkciBfc29ja2FkZHI7IEdvZHVtcF8w
X3BhZCBbOF1ieXRlOyBHb2R1bXBfMV9hbGlnbiBbMF1pbnQ2NDsgfTsgfQorY29uc3QgX3NpemVv
Zl9pZnJlcSA9IDQwCit0eXBlIF9pZmNvbmYgc3RydWN0IHsgaWZjX2xlbiBpbnQzMjsgaWZjX2lm
Y3Ugc3RydWN0IHsgaWZjdV9idWYgX19fY2FkZHJfdDsgfTsgfQorY29uc3QgX3NpemVvZl9pZmNv
bmYgPSAxNgordHlwZSBfcnRlbnRyeSBzdHJ1Y3QgeyBydF9wYWQxIHVpbnQ2NDsgcnRfZHN0IF9z
b2NrYWRkcjsgcnRfZ2F0ZXdheSBfc29ja2FkZHI7IHJ0X2dlbm1hc2sgX3NvY2thZGRyOyBydF9m
bGFncyB1aW50MTY7IHJ0X3BhZDIgaW50MTY7IHJ0X3BhZDMgdWludDY0OyBydF90b3MgdWludDg7
IHJ0X2NsYXNzIHVpbnQ4OyBydF9wYWQ0IFsyKzFdaW50MTY7IHJ0X21ldHJpYyBpbnQxNjsgcnRf
ZGV2ICppbnQ4OyBydF9tdHUgdWludDY0OyBydF93aW5kb3cgdWludDY0OyBydF9pcnR0IHVpbnQx
NjsgR29kdW1wXzBfcGFkIFs2XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfcnRlbnRyeSA9IDEyMAor
Y29uc3QgX3NpemVvZl9pbjZfcnRtc2cgPSA4MAordHlwZSBfc29ja2FkZHJfbGwgc3RydWN0IHsg
c2xsX2ZhbWlseSB1aW50MTY7IHNsbF9wcm90b2NvbCB1aW50MTY7IHNsbF9pZmluZGV4IGludDMy
OyBzbGxfaGF0eXBlIHVpbnQxNjsgc2xsX3BrdHR5cGUgdWludDg7IHNsbF9oYWxlbiB1aW50ODsg
c2xsX2FkZHIgWzcrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9zb2NrYWRkcl9sbCA9IDIwCit0
eXBlIF9wYWNrZXRfbXJlcSBzdHJ1Y3QgeyBtcl9pZmluZGV4IGludDMyOyBtcl90eXBlIHVpbnQx
NjsgbXJfYWxlbiB1aW50MTY7IG1yX2FkZHJlc3MgWzcrMV11aW50ODsgfQorY29uc3QgX3NpemVv
Zl9wYWNrZXRfbXJlcSA9IDE2Cit0eXBlIF9zdGF0ZnMgc3RydWN0IHsgZl90eXBlIGludDY0OyBm
X2JzaXplIGludDY0OyBmX2Jsb2NrcyB1aW50NjQ7IGZfYmZyZWUgdWludDY0OyBmX2JhdmFpbCB1
aW50NjQ7IGZfZmlsZXMgdWludDY0OyBmX2ZmcmVlIHVpbnQ2NDsgZl9mc2lkIF9fX2ZzaWRfdDsg
Zl9uYW1lbGVuIGludDY0OyBmX2Zyc2l6ZSBpbnQ2NDsgZl9mbGFncyBpbnQ2NDsgZl9zcGFyZSBb
MysxXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3N0YXRmcyA9IDEyMAordHlwZSBfc3RhdGZzNjQg
c3RydWN0IHsgZl90eXBlIGludDY0OyBmX2JzaXplIGludDY0OyBmX2Jsb2NrcyB1aW50NjQ7IGZf
YmZyZWUgdWludDY0OyBmX2JhdmFpbCB1aW50NjQ7IGZfZmlsZXMgdWludDY0OyBmX2ZmcmVlIHVp
bnQ2NDsgZl9mc2lkIF9fX2ZzaWRfdDsgZl9uYW1lbGVuIGludDY0OyBmX2Zyc2l6ZSBpbnQ2NDsg
Zl9mbGFncyBpbnQ2NDsgZl9zcGFyZSBbMysxXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3N0YXRm
czY0ID0gMTIwCit0eXBlIF9udHB0aW1ldmFsIHN0cnVjdCB7IHRpbWUgdGltZXZhbDsgbWF4ZXJy
b3IgaW50NjQ7IGVzdGVycm9yIGludDY0OyB0YWkgaW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQxIGlu
dDY0OyBfX2dsaWJjX3Jlc2VydmVkMiBpbnQ2NDsgX19nbGliY19yZXNlcnZlZDMgaW50NjQ7IF9f
Z2xpYmNfcmVzZXJ2ZWQ0IGludDY0OyB9Citjb25zdCBfc2l6ZW9mX250cHRpbWV2YWwgPSA3Mgor
dHlwZSBfdXRpbWJ1ZiBzdHJ1Y3QgeyBhY3RpbWUgaW50NjQ7IG1vZHRpbWUgaW50NjQ7IH0KK2Nv
bnN0IF9zaXplb2ZfdXRpbWJ1ZiA9IDE2Cit0eXBlIF9maWxlX2Nsb25lX3JhbmdlIHN0cnVjdCB7
IHNyY19mZCBpbnQ2NDsgc3JjX29mZnNldCB1aW50NjQ7IHNyY19sZW5ndGggdWludDY0OyBkZXN0
X29mZnNldCB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZmlsZV9jbG9uZV9yYW5nZSA9IDMyCit0
eXBlIF9mc3RyaW1fcmFuZ2Ugc3RydWN0IHsgc3RhcnQgdWludDY0OyBsZW4gdWludDY0OyBtaW5s
ZW4gdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX2ZzdHJpbV9yYW5nZSA9IDI0Cit0eXBlIF9maWxl
X2RlZHVwZV9yYW5nZV9pbmZvIHN0cnVjdCB7IGRlc3RfZmQgaW50NjQ7IGRlc3Rfb2Zmc2V0IHVp
bnQ2NDsgYnl0ZXNfZGVkdXBlZCB1aW50NjQ7IHN0YXR1cyBpbnQzMjsgcmVzZXJ2ZWQgdWludDMy
OyB9Citjb25zdCBfc2l6ZW9mX2ZpbGVfZGVkdXBlX3JhbmdlX2luZm8gPSAzMgordHlwZSBfZmls
ZV9kZWR1cGVfcmFuZ2Ugc3RydWN0IHsgc3JjX29mZnNldCB1aW50NjQ7IHNyY19sZW5ndGggdWlu
dDY0OyBkZXN0X2NvdW50IHVpbnQxNjsgcmVzZXJ2ZWQxIHVpbnQxNjsgcmVzZXJ2ZWQyIHVpbnQz
MjsgaW5mbyBbMF1fZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbzsgfQorY29uc3QgX3NpemVvZl9maWxl
X2RlZHVwZV9yYW5nZSA9IDI0Cit0eXBlIF9maWxlc19zdGF0X3N0cnVjdCBzdHJ1Y3QgeyBucl9m
aWxlcyB1aW50NjQ7IG5yX2ZyZWVfZmlsZXMgdWludDY0OyBtYXhfZmlsZXMgdWludDY0OyB9Citj
b25zdCBfc2l6ZW9mX2ZpbGVzX3N0YXRfc3RydWN0ID0gMjQKK3R5cGUgX2lub2Rlc19zdGF0X3Qg
c3RydWN0IHsgbnJfaW5vZGVzIGludDY0OyBucl91bnVzZWQgaW50NjQ7IGR1bW15IFs0KzFdaW50
NjQ7IH0KK2NvbnN0IF9zaXplb2ZfaW5vZGVzX3N0YXRfdCA9IDU2Cit0eXBlIF9mc3hhdHRyIHN0
cnVjdCB7IGZzeF94ZmxhZ3MgdWludDMyOyBmc3hfZXh0c2l6ZSB1aW50MzI7IGZzeF9uZXh0ZW50
cyB1aW50MzI7IGZzeF9wcm9qaWQgdWludDMyOyBmc3hfY293ZXh0c2l6ZSB1aW50MzI7IGZzeF9w
YWQgWzcrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9mc3hhdHRyID0gMjgKK3R5cGUgX2ZzY3J5
cHRfcG9saWN5IHN0cnVjdCB7IHZlcnNpb24gdWludDg7IGNvbnRlbnRzX2VuY3J5cHRpb25fbW9k
ZSB1aW50ODsgZmlsZW5hbWVzX2VuY3J5cHRpb25fbW9kZSB1aW50ODsgZmxhZ3MgdWludDg7IG1h
c3Rlcl9rZXlfZGVzY3JpcHRvciBbNysxXXVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2ZzY3J5cHRf
cG9saWN5ID0gMTIKK3R5cGUgX2ZzY3J5cHRfa2V5IHN0cnVjdCB7IG1vZGUgdWludDMyOyByYXcg
WzYzKzFddWludDg7IHNpemUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2ZzY3J5cHRfa2V5ID0g
NzIKK3R5cGUgX19fa2VybmVsX3J3Zl90IGludDMyCit0eXBlIF9pbm90aWZ5X2V2ZW50IHN0cnVj
dCB7IHdkIGludDMyOyBtYXNrIHVpbnQzMjsgY29va2llIHVpbnQzMjsgbGVuIHVpbnQzMjsgbmFt
ZSBbMF1pbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2lub3RpZnlfZXZlbnQgPSAxNgordHlwZSBfX19n
d2NoYXJfdCBpbnQzMgordHlwZSBfaW1heGRpdl90IHN0cnVjdCB7IHF1b3QgaW50NjQ7IHJlbSBp
bnQ2NDsgfQorY29uc3QgX3NpemVvZl9pbWF4ZGl2X3QgPSAxNgordHlwZSBfaWNtcDZfZmlsdGVy
IHN0cnVjdCB7IGljbXA2X2ZpbHQgWzcrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWNtcDZf
ZmlsdGVyID0gMzIKK3R5cGUgX2ljbXA2X2hkciBzdHJ1Y3QgeyBpY21wNl90eXBlIHVpbnQ4OyBp
Y21wNl9jb2RlIHVpbnQ4OyBpY21wNl9ja3N1bSB1aW50MTY7IGljbXA2X2RhdGF1biBzdHJ1Y3Qg
eyBpY21wNl91bl9kYXRhMzIgWzArMV11aW50MzI7IH07IH0KK2NvbnN0IF9zaXplb2ZfaWNtcDZf
aGRyID0gOAordHlwZSBfbmRfcm91dGVyX3NvbGljaXQgc3RydWN0IHsgbmRfcnNfaGRyIF9pY21w
Nl9oZHI7IH0KK2NvbnN0IF9zaXplb2ZfbmRfcm91dGVyX3NvbGljaXQgPSA4Cit0eXBlIF9uZF9y
b3V0ZXJfYWR2ZXJ0IHN0cnVjdCB7IG5kX3JhX2hkciBfaWNtcDZfaGRyOyBuZF9yYV9yZWFjaGFi
bGUgdWludDMyOyBuZF9yYV9yZXRyYW5zbWl0IHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9uZF9y
b3V0ZXJfYWR2ZXJ0ID0gMTYKK2NvbnN0IF9zaXplb2ZfbmRfbmVpZ2hib3Jfc29saWNpdCA9IDI0
Citjb25zdCBfc2l6ZW9mX25kX25laWdoYm9yX2FkdmVydCA9IDI0Citjb25zdCBfc2l6ZW9mX25k
X3JlZGlyZWN0ID0gNDAKK3R5cGUgX25kX29wdF9oZHIgc3RydWN0IHsgbmRfb3B0X3R5cGUgdWlu
dDg7IG5kX29wdF9sZW4gdWludDg7IH0KK2NvbnN0IF9zaXplb2ZfbmRfb3B0X2hkciA9IDIKK2Nv
bnN0IF9zaXplb2ZfbmRfb3B0X3ByZWZpeF9pbmZvID0gMzIKK3R5cGUgX25kX29wdF9yZF9oZHIg
c3RydWN0IHsgbmRfb3B0X3JoX3R5cGUgdWludDg7IG5kX29wdF9yaF9sZW4gdWludDg7IG5kX29w
dF9yaF9yZXNlcnZlZDEgdWludDE2OyBuZF9vcHRfcmhfcmVzZXJ2ZWQyIHVpbnQzMjsgfQorY29u
c3QgX3NpemVvZl9uZF9vcHRfcmRfaGRyID0gOAordHlwZSBfbmRfb3B0X210dSBzdHJ1Y3QgeyBu
ZF9vcHRfbXR1X3R5cGUgdWludDg7IG5kX29wdF9tdHVfbGVuIHVpbnQ4OyBuZF9vcHRfbXR1X3Jl
c2VydmVkIHVpbnQxNjsgbmRfb3B0X210dV9tdHUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25k
X29wdF9tdHUgPSA4Citjb25zdCBfc2l6ZW9mX21sZF9oZHIgPSAyNAordHlwZSBfaWNtcDZfcm91
dGVyX3JlbnVtIHN0cnVjdCB7IHJyX2hkciBfaWNtcDZfaGRyOyBycl9zZWdudW0gdWludDg7IHJy
X2ZsYWdzIHVpbnQ4OyBycl9tYXhkZWxheSB1aW50MTY7IHJyX3Jlc2VydmVkIHVpbnQzMjsgfQor
Y29uc3QgX3NpemVvZl9pY21wNl9yb3V0ZXJfcmVudW0gPSAxNgorY29uc3QgX3NpemVvZl9ycl9w
Y29fbWF0Y2ggPSAyNAorY29uc3QgX3NpemVvZl9ycl9wY29fdXNlID0gMzIKK2NvbnN0IF9zaXpl
b2ZfcnJfcmVzdWx0ID0gMjQKK3R5cGUgX25kX29wdF9hZHZfaW50ZXJ2YWwgc3RydWN0IHsgbmRf
b3B0X2Fkdl9pbnRlcnZhbF90eXBlIHVpbnQ4OyBuZF9vcHRfYWR2X2ludGVydmFsX2xlbiB1aW50
ODsgbmRfb3B0X2Fkdl9pbnRlcnZhbF9yZXNlcnZlZCB1aW50MTY7IG5kX29wdF9hZHZfaW50ZXJ2
YWxfaXZhbCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmRfb3B0X2Fkdl9pbnRlcnZhbCA9IDgK
K3R5cGUgX25kX29wdF9ob21lX2FnZW50X2luZm8gc3RydWN0IHsgbmRfb3B0X2hvbWVfYWdlbnRf
aW5mb190eXBlIHVpbnQ4OyBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX2xlbiB1aW50ODsgbmRfb3B0
X2hvbWVfYWdlbnRfaW5mb19yZXNlcnZlZCB1aW50MTY7IG5kX29wdF9ob21lX2FnZW50X2luZm9f
cHJlZmVyZW5jZSB1aW50MTY7IG5kX29wdF9ob21lX2FnZW50X2luZm9fbGlmZXRpbWUgdWludDE2
OyB9Citjb25zdCBfc2l6ZW9mX25kX29wdF9ob21lX2FnZW50X2luZm8gPSA4Cit0eXBlIF9zY2hl
ZF9wYXJhbSBzdHJ1Y3QgeyBzY2hlZF9wcmlvcml0eSBpbnQzMjsgfQorY29uc3QgX3NpemVvZl9z
Y2hlZF9wYXJhbSA9IDQKK3R5cGUgX19fY3B1X21hc2sgdWludDY0Cit0eXBlIF9jcHVfc2V0X3Qg
c3RydWN0IHsgX19iaXRzIFsxNSsxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9jcHVfc2V0X3Qg
PSAxMjgKK3R5cGUgX3NlbV90IHN0cnVjdCB7IF9fc2l6ZSBbMzErMV1pbnQ4OyBHb2R1bXBfMF9h
bGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zZW1fdCA9IDMyCit0eXBlIF9mZmlfYXJn
IHVpbnQ2NAordHlwZSBfZmZpX3NhcmcgaW50NjQKK3R5cGUgX2ZmaV9hYmkgdWludDMyCit0eXBl
IF9fZmZpX3R5cGUgc3RydWN0IHsgc2l6ZSB1aW50NjQ7IGFsaWdubWVudCB1aW50MTY7IF90eXBl
IHVpbnQxNjsgZWxlbWVudHMgKipfX2ZmaV90eXBlOyB9Citjb25zdCBfc2l6ZW9mX19mZmlfdHlw
ZSA9IDI0Cit0eXBlIF9mZmlfdHlwZSBzdHJ1Y3QgeyBzaXplIHVpbnQ2NDsgYWxpZ25tZW50IHVp
bnQxNjsgX3R5cGUgdWludDE2OyBlbGVtZW50cyAqKl9fZmZpX3R5cGU7IH0KK2NvbnN0IF9zaXpl
b2ZfZmZpX3R5cGUgPSAyNAordHlwZSBfZmZpX3N0YXR1cyB1aW50MzIKK3R5cGUgX0ZGSV9UWVBF
IHVpbnQzMgordHlwZSBfZmZpX2NpZiBzdHJ1Y3QgeyBhYmkgdWludDMyOyBuYXJncyB1aW50MzI7
IGFyZ190eXBlcyAqKl9mZmlfdHlwZTsgcnR5cGUgKl9mZmlfdHlwZTsgYnl0ZXMgdWludDMyOyBm
bGFncyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfZmZpX2NpZiA9IDMyCit0eXBlIF9mZmlfcmF3
IHN0cnVjdCB7IHNpbnQgaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZmZpX3JhdyA9IDgKK3R5cGUg
X2ZmaV9qYXZhX3JhdyBzdHJ1Y3QgeyBzaW50IGludDY0OyB9Citjb25zdCBfc2l6ZW9mX2ZmaV9q
YXZhX3JhdyA9IDgKK3R5cGUgX2ZmaV9jbG9zdXJlIHN0cnVjdCB7IHRyYW1wIFsyMysxXWludDg7
IGNpZiAqX2ZmaV9jaWY7IGZ1biBmdW5jKCpfZmZpX2NpZiwgKmJ5dGUsICoqYnl0ZSwgKmJ5dGUp
OyB1c2VyX2RhdGEgKmJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfZmZpX2Nsb3N1cmUgPSA0OAordHlw
ZSBfZmZpX3Jhd19jbG9zdXJlIHN0cnVjdCB7IHRyYW1wIFsyMysxXWludDg7IGNpZiAqX2ZmaV9j
aWY7IHRyYW5zbGF0ZV9hcmdzIGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKipieXRlLCAqYnl0ZSk7
IHRoaXNfY2xvc3VyZSAqYnl0ZTsgZnVuIGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKl9mZmlfcmF3
LCAqYnl0ZSk7IHVzZXJfZGF0YSAqYnl0ZTsgfQorY29uc3QgX3NpemVvZl9mZmlfcmF3X2Nsb3N1
cmUgPSA2NAordHlwZSBfZmZpX2phdmFfcmF3X2Nsb3N1cmUgc3RydWN0IHsgdHJhbXAgWzIzKzFd
aW50ODsgY2lmICpfZmZpX2NpZjsgdHJhbnNsYXRlX2FyZ3MgZnVuYygqX2ZmaV9jaWYsICpieXRl
LCAqKmJ5dGUsICpieXRlKTsgdGhpc19jbG9zdXJlICpieXRlOyBmdW4gZnVuYygqX2ZmaV9jaWYs
ICpieXRlLCAqX2ZmaV9qYXZhX3JhdywgKmJ5dGUpOyB1c2VyX2RhdGEgKmJ5dGU7IH0KK2NvbnN0
IF9zaXplb2ZfZmZpX2phdmFfcmF3X2Nsb3N1cmUgPSA2NAorY29uc3QgX19QT1NJWF9BRFZJU09S
WV9JTkZPID0gMjAwODA5Citjb25zdCBfV05PSEFORyA9IDEKK2NvbnN0IF9fX0xEQkxfTUlOXzEw
X0VYUF9fID0gKC00OTMxKQorY29uc3QgX0lGTEFfQlJQT1JUX05FSUdIX1NVUFBSRVNTID0gMzIK
K2NvbnN0IF9fUENfUkVDX01JTl9YRkVSX1NJWkUgPSAxNgorY29uc3QgX19CSVRTX1BUSFJFQURU
WVBFU19DT01NT05fSCA9IDEKK2NvbnN0IF9fU0NfRVhQUl9ORVNUX01BWCA9IDQyCitjb25zdCBf
SU5UX0xFQVNUMTZfTUlOID0gKC0zMjc2Ny0xKQorY29uc3QgX1NZU191c2VsaWIgPSBfX19OUl91
c2VsaWIKK2NvbnN0IF9GRklfQkFEX1RZUEVERUYgPSAxCitjb25zdCBfSVBQUk9UT19UUCA9IDI5
Citjb25zdCBfVENQX0NPT0tJRV9UUkFOU0FDVElPTlMgPSAxNQorY29uc3QgX19fRkxUMzJYX0RJ
R19fID0gMTUKK2NvbnN0IF9BSU9fUFJJT19ERUxUQV9NQVggPSAyMAorY29uc3QgX05EQV9WTkkg
PSA3Citjb25zdCBfX19JTFAzMl9PRkYzMl9DRkxBR1MgPSAiLW0zMiIKK2NvbnN0IF9fX0ZMVDY0
X01JTl8xMF9FWFBfXyA9ICgtMzA3KQorY29uc3QgX19QQ19QQVRIX01BWCA9IDQKK2NvbnN0IF9J
UFBST1RPX1JPVVRJTkcgPSA0MworY29uc3QgX0lOVF9GQVNUOF9NSU4gPSAoLTEyOCkKK2NvbnN0
IF9CMTE1MjAwID0gMDAxMDAwMgorY29uc3QgX19CSVRTX1VJTlROX0lERU5USVRZX0ggPSAxCitj
b25zdCBfX19GTFQ2NF9NQU5UX0RJR19fID0gNTMKK2NvbnN0IF9fX0NIQVJfQklUX18gPSA4Citj
b25zdCBfX19OUl9mc3luYyA9IDc0Citjb25zdCBfX1NDX0xFVkVMNF9DQUNIRV9TSVpFID0gMTk3
Citjb25zdCBfUFRSQUNFX0VWRU5UX0VYRUMgPSA0Citjb25zdCBfUFJfU1ZFX1ZMX0lOSEVSSVQg
PSAoMSA8PCAxNykKK2NvbnN0IF9JUFBPUlRfU1VQRFVQID0gOTUKK2NvbnN0IF9TWVNfZnRydW5j
YXRlID0gX19fTlJfZnRydW5jYXRlCitjb25zdCBfU0NIQVJfV0lEVEggPSA4Citjb25zdCBfVENB
X1NUQUIgPSA4Citjb25zdCBfSUZMQV9WRl9MSU5LX1NUQVRFID0gNQorY29uc3QgX1JUTkxHUlBf
TlNJRCA9IDI4Citjb25zdCBfX19OUl9tcmVtYXAgPSAyNQorY29uc3QgX19fTlJfbHNldHhhdHRy
ID0gMTg5Citjb25zdCBfSVBWTEFOX01PREVfTDMgPSAxCitjb25zdCBfSUZMQV9CT05EX1VTRV9D
QVJSSUVSID0gNgorY29uc3QgX0lGTEFfT0ZGTE9BRF9YU1RBVFNfVU5TUEVDID0gMAorY29uc3Qg
X0lOVF9MRUFTVDMyX01JTiA9ICgtMjE0NzQ4MzY0Ny0xKQorY29uc3QgX0FURl9DT00gPSAweDAy
Citjb25zdCBfTUFQX0ZJTEUgPSAwCitjb25zdCBfX19ERUM2NF9NSU5fXyA9IDFFLTM4MworY29u
c3QgX0lGTEFfQlJfVE9QT0xPR1lfQ0hBTkdFX1RJTUVSID0gMTgKK2NvbnN0IF9TSUdFVl9OT05F
ID0gMQorY29uc3QgX05EVFBBX01DQVNUX1BST0JFUyA9IDExCitjb25zdCBfU1lTX21rbm9kYXQg
PSBfX19OUl9ta25vZGF0Citjb25zdCBfX1BPU0lYX0JBUlJJRVJTID0gMjAwODA5Citjb25zdCBf
VUlOVF9GQVNUMTZfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX0lQX1JGID0gMHg4MDAwCitj
b25zdCBfRVRIX1BfUFBQVEFMSyA9IDB4MDAxMAorY29uc3QgX1RVTlNFVFFVRVVFX3ZhbCA9IDEw
NzQwMjU2ODkKK2NvbnN0IF9EVF9DSFIgPSAyCitjb25zdCBfX19GTFRfTUFYX0VYUF9fID0gMTI4
Citjb25zdCBfUlROX01VTFRJQ0FTVCA9IDUKK2NvbnN0IF9fX05SX3NldHNpZCA9IDExMgorY29u
c3QgX19YT1BFTl9YUEcyID0gMQorY29uc3QgX0lQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AgPSAx
Citjb25zdCBfX1hPUEVOX1hQRzQgPSAxCitjb25zdCBfX19OUl9nZXRyZXNnaWQgPSAxMjAKK2Nv
bnN0IF9CUEZfSkdFID0gMHgzMAorY29uc3QgX0JQRl9MRCA9IDB4MDAKK2NvbnN0IF9UQ1BJX09Q
VF9FQ04gPSA4Citjb25zdCBfRVRYVEJTWSA9IDI2Citjb25zdCBfSUZMQV9STU5FVF9NVVhfSUQg
PSAxCitjb25zdCBfUFJfRlBfRVhDX1NXX0VOQUJMRSA9IDB4ODAKK2NvbnN0IF9fX05SX3RpbWUg
PSAyMDEKK2NvbnN0IF9IQVZFX1NZU19FUE9MTF9IID0gMQorY29uc3QgX0lGTEFfVkZfU1RBVFNf
UlhfQllURVMgPSAyCitjb25zdCBfUlRfU0NPUEVfVU5JVkVSU0UgPSAwCitjb25zdCBfU1lTX2Vw
b2xsX2N0bF9vbGQgPSBfX19OUl9lcG9sbF9jdGxfb2xkCitjb25zdCBfVUxPTkdfTUFYID0gKF9M
T05HX01BWCAqIDIgKyAxKQorY29uc3QgX0NMRF9UUkFQUEVEID0gNAorY29uc3QgX0xPTkdfQklU
ID0gNjQKK2NvbnN0IF9fX1JMSU1fVF9NQVRDSEVTX1JMSU02NF9UID0gMQorY29uc3QgX1RDUF9S
RVBBSVJfT1BUSU9OUyA9IDIyCitjb25zdCBfWDg2X0NSNF9PU1hNTUVYQ1BUX0JJVCA9IDEwCitj
b25zdCBfX1BPU0lYX0FJT19NQVggPSAxCitjb25zdCBfUlRGX1VQID0gMHgwMDAxCitjb25zdCBf
VENQX1NfREFUQV9JTiA9ICgxIDw8IDIpCitjb25zdCBfSUZMQV9CUl9NQVhfQUdFID0gMworY29u
c3QgX19TQ19NRU1PUllfUFJPVEVDVElPTiA9IDE5Citjb25zdCBfRk5PTkJMT0NLID0gX09fTk9O
QkxPQ0sKK2NvbnN0IF9JTl9BVFRSSUIgPSAweDAwMDAwMDA0Citjb25zdCBfQVRGX1BFUk0gPSAw
eDA0Citjb25zdCBfSUZMQV9HRU5FVkVfUkVNT1RFNiA9IDcKK2NvbnN0IF9JRkxBX0JPTkRfTU9E
RSA9IDEKK2NvbnN0IF9FSF9GUkFNRV9GTEFHUyA9ICJhdyIKK2NvbnN0IF9PX0FQUEVORCA9IDAy
MDAwCitjb25zdCBfX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTID0gMTY1Citjb25zdCBfRVRIRVJf
TUFYX0xFTiA9IChfRVRIX0ZSQU1FX0xFTiArIF9FVEhFUl9DUkNfTEVOKQorY29uc3QgX19fTlJf
bXNnc25kID0gNjkKK2NvbnN0IF9UQ0FfUEFEID0gOQorY29uc3QgX1BSX1NFVF9GUF9NT0RFID0g
NDUKK2NvbnN0IF9OTF9NTUFQX1NUQVRVU19WQUxJRCA9IDIKK2NvbnN0IF9fX05SX21vdW50ID0g
MTY1Citjb25zdCBfX0lPQ19UWVBFQklUUyA9IDgKK2NvbnN0IF9TT0NLX0RHUkFNID0gMgorY29u
c3QgX01PRF9PRkZTRVQgPSBfQURKX09GRlNFVAorY29uc3QgX0lGTEFfTUFQID0gMTQKK2NvbnN0
IF9FTDJOU1lOQyA9IDQ1Citjb25zdCBfSVBWNl9PUklHRFNUQUREUiA9IDc0Citjb25zdCBfU1lT
X211bmxvY2sgPSBfX19OUl9tdW5sb2NrCitjb25zdCBfVEhfQUNLID0gMHgxMAorY29uc3QgX0xf
WFRORCA9IDIKK2NvbnN0IF9TT19UWFRJTUUgPSA2MQorY29uc3QgX1JUTV9ERUxBQ1RJT04gPSA0
OQorY29uc3QgX1hUQUJTID0gMDAxNDAwMAorY29uc3QgX0hBVkVfU1lTX1NZU0NBTExfSCA9IDEK
K2NvbnN0IF9QUl9TRVRfU1BFQ1VMQVRJT05fQ1RSTCA9IDUzCitjb25zdCBfVElPQ0dERVZfdmFs
ID0gMjE0Nzc2NzM0NgorY29uc3QgX19fTlJfY29ubmVjdCA9IDQyCitjb25zdCBfWDg2X0NSNF9T
TUVQX0JJVCA9IDIwCitjb25zdCBfRlNfUE9MSUNZX0ZMQUdTX1ZBTElEID0gMHgwMworY29uc3Qg
X1RJT0NHSUNPVU5UID0gMHg1NDVECitjb25zdCBfU1lTX3N0YXRmcyA9IF9fX05SX3N0YXRmcwor
Y29uc3QgX05FVExJTktfUkRNQSA9IDIwCitjb25zdCBfSVBWNl8yMjkySE9QTElNSVQgPSA4Citj
b25zdCBfSUZGX09ORV9RVUVVRSA9IDB4MjAwMAorY29uc3QgX0lQUE9SVF9DTURTRVJWRVIgPSA1
MTQKK2NvbnN0IF9QRl9NQVggPSA0NAorY29uc3QgX1JUX0NMQVNTX01BWCA9IDI1NQorY29uc3Qg
X0lQUFJPVE9fSVBWNiA9IDQxCitjb25zdCBfU0lPQ1NJRkJSID0gMHg4OTQxCitjb25zdCBfX19J
TlRfTEVBU1Q4X01BWF9fID0gMHg3ZgorY29uc3QgX19fREVDMTI4X01BTlRfRElHX18gPSAzNAor
Y29uc3QgX0lDTVA2X1JSX1JFU1VMVF9GTEFHU19GT1JCSURERU4gPSAweDAxMDAKK2NvbnN0IF9N
QVBfU0hBUkVEID0gMHgwMQorY29uc3QgX0VVU0VSUyA9IDg3Citjb25zdCBfTUFYVEMgPSA2Citj
b25zdCBfVENQX1NZTl9TRU5UID0gMgorY29uc3QgX1BGX05FVExJTksgPSAxNgorY29uc3QgX1hE
UF9BVFRBQ0hFRF9OT05FID0gMAorY29uc3QgX19fREVDSU1BTF9ESUdfXyA9IDIxCitjb25zdCBf
RVRIRVJfQUREUl9MRU4gPSBfRVRIX0FMRU4KK2NvbnN0IF9GRklfVFlQRV9MQVNUID0gX0ZGSV9U
WVBFX0NPTVBMRVgKK2NvbnN0IF9QT1NJWF9NQURWX05PUk1BTCA9IDAKK2NvbnN0IF9BUlBIUkRf
SUVFRTgwMjExX1BSSVNNID0gODAyCitjb25zdCBfRVRIX1BfODAyMUFEID0gMHg4OEE4Citjb25z
dCBfTElOVVhfUkVCT09UX01BR0lDMkMgPSA1Mzc5OTMyMTYKK2NvbnN0IF9NTlRfREVUQUNIID0g
MgorY29uc3QgX0lQVE9TX0VDTl9OT1RfRUNUID0gMHgwMAorY29uc3QgX1NTX09OU1RBQ0sgPSAx
Citjb25zdCBfSU9DX0lOID0gKF9fSU9DX1dSSVRFIDw8IF9fSU9DX0RJUlNISUZUKQorY29uc3Qg
X0VUSF9QXzgwMjFBSCA9IDB4ODhFNworY29uc3QgX0lGTEFfVFVOX1ZORVRfSERSID0gNQorY29u
c3QgX01SRU1BUF9NQVlNT1ZFID0gMQorY29uc3QgX19fUkxJTUlUX05MSU1JVFMgPSAxNgorY29u
c3QgX0ZfR0VUTEs2NCA9IDUKK2NvbnN0IF9SVFBST1RfVU5TUEVDID0gMAorY29uc3QgX1BBUk9E
RCA9IDAwMDEwMDAKK2NvbnN0IF9fX05SX2tleGVjX2xvYWQgPSAyNDYKK2NvbnN0IF9fX0lGTEFf
VkZfUE9SVF9NQVggPSAyCitjb25zdCBfU1lTX3N3YXBvZmYgPSBfX19OUl9zd2Fwb2ZmCitjb25z
dCBfX19TVERDX1VURl8zMl9fID0gMQorY29uc3QgX1JUX1RBQkxFX0xPQ0FMID0gMjU1Citjb25z
dCBfRkZTWU5DID0gX09fRlNZTkMKK2NvbnN0IF9QRU5ESU4gPSAwMDQwMDAwCitjb25zdCBfX19J
TlQ4X01BWF9fID0gMHg3ZgorY29uc3QgX0VUSF9QX0FSQ05FVCA9IDB4MDAxQQorY29uc3QgX0ZE
X1NFVFNJWkUgPSBfX19GRF9TRVRTSVpFCitjb25zdCBfTVNHX0VPUiA9IDEyOAorY29uc3QgX19O
RVRfSUZfQVJQX0ggPSAxCitjb25zdCBfUlRNX0ZfQ0xPTkVEID0gMHgyMDAKK2NvbnN0IF9FSFdQ
T0lTT04gPSAxMzMKK2NvbnN0IF9JUFBST1RPX05PTkUgPSA1OQorY29uc3QgX1RDUF9DT09LSUVf
T1VUX05FVkVSID0gKDEgPDwgMSkKK2NvbnN0IF9FUFJPVE8gPSA3MQorY29uc3QgX19JT0NfTlJT
SElGVCA9IDAKK2NvbnN0IF9GX0VYTENLID0gNAorY29uc3QgX19fTlJfY2xvbmUgPSA1NgorY29u
c3QgX19fTlJfcHRyYWNlID0gMTAxCitjb25zdCBfX1BPU0lYX1Y3X0xQQklHX09GRkJJRyA9IC0x
Citjb25zdCBfSEFWRV9BQ09TTCA9IDEKK2NvbnN0IF9TSU9DR0lGRFNUQUREUiA9IDB4ODkxNwor
Y29uc3QgX19QT1NJWF9MT0dJTl9OQU1FX01BWCA9IDkKK2NvbnN0IF9SVE5MR1JQX0lQVjZfTkVU
Q09ORiA9IDI1Citjb25zdCBfUEFHRV9NQVNLID0gKF4oX1BBR0VfU0laRS0xKSkKK2NvbnN0IF9f
Q1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTID0gMTEwNworY29uc3QgX0ZGSV9UWVBFX1NJ
TlQ2NCA9IDEyCitjb25zdCBfX1NDX09QRU5fTUFYID0gNAorY29uc3QgX19TQ18yX1NXX0RFViA9
IDUxCitjb25zdCBfTkxNX0ZfQUNLID0gMHgwNAorY29uc3QgX1NDTmQ4ID0gImhoZCIKK2NvbnN0
IF9fX0ZMVDEyOF9NSU5fMTBfRVhQX18gPSAoLTQ5MzEpCitjb25zdCBfWERQX0ZMQUdTX1NLQl9N
T0RFID0gKDEgPDwgMSkKK2NvbnN0IF9TSU9DR1JBUlAgPSAweDg5NjEKK2NvbnN0IF9JRkxBX1ZG
X1BPUlRTID0gMjQKK2NvbnN0IF9DRVJBU0UgPSAwMTc3Citjb25zdCBfX19OUl9zZXRwZ2lkID0g
MTA5Citjb25zdCBfUlRGX0lOVEVSRkFDRSA9IDB4NDAwMDAwMDAKK2NvbnN0IF9JRkxBX0JSUE9S
VF9JU09MQVRFRCA9IDMzCitjb25zdCBfUFJJb0ZBU1Q4ID0gIm8iCitjb25zdCBfSUZMQV9CT05E
X1NMQVZFX0xJTktfRkFJTFVSRV9DT1VOVCA9IDMKK2NvbnN0IF9CUktJTlQgPSAwMDAwMDAyCitj
b25zdCBfX19ERUNJTUFMX0JJRF9GT1JNQVRfXyA9IDEKK2NvbnN0IF9TT0xfU09DS0VUID0gMQor
Y29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfTERGTEFHUyA9IDExMzcKK2NvbnN0IF9J
RkxBX1BSSU9SSVRZID0gOQorY29uc3QgX0lUSU1FUl9SRUFMID0gMAorY29uc3QgX1RDRkxTSCA9
IDB4NTQwQgorY29uc3QgX0ZGSV9USElTQ0FMTCA9IDMKK2NvbnN0IF9JUF9OT0RFRlJBRyA9IDIy
Citjb25zdCBfTkVUTElOS19GSVJFV0FMTCA9IDMKK2NvbnN0IF9fX05SX3NjaGVkX2dldGFmZmlu
aXR5ID0gMjA0Citjb25zdCBfSVBQUk9UT19VRFBMSVRFID0gMTM2Citjb25zdCBfRlNfUFJPSklO
SEVSSVRfRkwgPSAweDIwMDAwMDAwCitjb25zdCBfTUFEVl9ET05URk9SSyA9IDEwCitjb25zdCBf
TVNHX0NNU0dfQ0xPRVhFQyA9IDEwNzM3NDE4MjQKK2NvbnN0IF9FTk9FTlQgPSAyCitjb25zdCBf
SVBUT1NfRUNOX0VDVDEgPSAweDAxCitjb25zdCBfSUZMQV9WRl9JTkZPID0gMQorY29uc3QgX0xP
Q0tfV1JJVEUgPSAxMjgKK2NvbnN0IF9UQ1BfTElTVEVOID0gMTAKK2NvbnN0IF9JUE9QVF9UU19Q
UkVTUEVDID0gMworY29uc3QgX19fUE9TSVhfRkFEVl9OT1JFVVNFID0gNQorY29uc3QgX0FSUE9Q
X1JFUVVFU1QgPSAxCitjb25zdCBfUFRSQUNFX0VWRU5UX0VYSVQgPSA2Citjb25zdCBfWEFUVFJf
TkFNRV9NQVggPSAyNTUKK2NvbnN0IF9fX1NfSUZMTksgPSAwMTIwMDAwCitjb25zdCBfVENBX1JP
T1RfVEFCID0gMQorY29uc3QgX1NLRl9BRF9QUk9UT0NPTCA9IDAKK2NvbnN0IF9FTk9QS0cgPSA2
NQorY29uc3QgX19fQVRPTUlDX1JFTEFYRUQgPSAwCitjb25zdCBfU1lTX2dldHNvY2tvcHQgPSBf
X19OUl9nZXRzb2Nrb3B0Citjb25zdCBfSUZMQV9WRl9MSU5LX1NUQVRFX0VOQUJMRSA9IDEKK2Nv
bnN0IF9WVERMWSA9IDAwNDAwMDAKK2NvbnN0IF9fX05SX3RpbWVyX2RlbGV0ZSA9IDIyNgorY29u
c3QgX1JUTl9VTlNQRUMgPSAwCitjb25zdCBfU09fU05EVElNRU8gPSAyMQorY29uc3QgX0FGX1VO
U1BFQyA9IF9QRl9VTlNQRUMKK2NvbnN0IF9USU9DU0VSU0VUTVVMVEkgPSAweDU0NUIKK2NvbnN0
IF9BUlBIUkRfRkNQTCA9IDc4NgorY29uc3QgX0xPQ0tfUlcgPSAxOTIKK2NvbnN0IF9SRUdfQ1Iy
ID0gMjIKK2NvbnN0IF9fU0NfQVJHX01BWCA9IDAKK2NvbnN0IF9BUlBIUkRfRkNQUCA9IDc4NAor
Y29uc3QgX1VJTlRfV0lEVEggPSAzMgorY29uc3QgX0lGTEFfVlhMQU5fSUQgPSAxCitjb25zdCBf
X19VU0VfWE9QRU4gPSAxCitjb25zdCBfSVBPUFRfU0VDID0gX0lQT1BUX1NFQ1VSSVRZCitjb25z
dCBfSUZMQV9UWFFMRU4gPSAxMworY29uc3QgX1NZU191bW91bnQyID0gX19fTlJfdW1vdW50Mgor
Y29uc3QgX1RVTl9UWVBFX01BU0sgPSAweDAwMGYKK2NvbnN0IF9DTE9DS19SRUFMVElNRV9DT0FS
U0UgPSA1Citjb25zdCBfSUZMQV9CUl9GREJfRkxVU0ggPSAyMQorY29uc3QgX1JUTV9TRVRORUlH
SFRCTCA9IDY3Citjb25zdCBfSVBfQUREX01FTUJFUlNISVAgPSAzNQorY29uc3QgX1JUUFJPVF9E
SENQID0gMTYKK2NvbnN0IF9DTE9ORV9QVFJBQ0UgPSAweDAwMDAyMDAwCitjb25zdCBfUFJPVF9O
T05FID0gMHgwCitjb25zdCBfTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUID0gMHgwMTIzNDU2Nwor
Y29uc3QgX01BWF9JTlBVVCA9IDI1NQorY29uc3QgX1JUQV9VTlNQRUMgPSAwCitjb25zdCBfRl9B
RERfU0VBTFMgPSAxMDMzCitjb25zdCBfVUlPX01BWElPViA9IF9fX0lPVl9NQVgKK2NvbnN0IF9f
U0NfVFJBQ0VfU1lTX01BWCA9IDI0NAorY29uc3QgX1BBUk1SSyA9IDAwMDAwMTAKK2NvbnN0IF9f
U0NfWE9QRU5fWFBHMyA9IDk5Citjb25zdCBfUFJfR0VUX0ZQX01PREUgPSA0NgorY29uc3QgX19T
Q19YT1BFTl9YUEc0ID0gMTAwCitjb25zdCBfVUlOVF9MRUFTVDY0X1dJRFRIID0gNjQKK2NvbnN0
IF9fU1lTX1dBSVRfSCA9IDEKK2NvbnN0IF9FVEhfUF9UUkFJTEVSID0gMHgwMDFDCitjb25zdCBf
U09MX1RDUCA9IDYKK2NvbnN0IF9BREpfTUlDUk8gPSAweDEwMDAKK2NvbnN0IF9ORFRBX1RIUkVT
SDEgPSAyCitjb25zdCBfUlRBX0lQX1BST1RPID0gMjcKK2NvbnN0IF9JRkxBX0JSUE9SVF9GTFVT
SCA9IDI0Citjb25zdCBfVFVOU0VUR1JPVVBfdmFsID0gMTA3NDAyNTY3OAorY29uc3QgX1NPX0NO
WF9BRFZJQ0UgPSA1MworY29uc3QgX05EVEFfVEhSRVNIMyA9IDQKK2NvbnN0IF9MT0NLX1NIID0g
MQorY29uc3QgX19fU0laRU9GX1dDSEFSX1RfXyA9IDQKK2NvbnN0IF9TRU1fVkFMVUVfTUFYID0g
KDIxNDc0ODM2NDcpCitjb25zdCBfX19OUl9nZXR1aWQgPSAxMDIKK2NvbnN0IF9JRkxBX0JSUE9S
VF9NQ0FTVF9GTE9PRCA9IDI3Citjb25zdCBfU09MX0JMVUVUT09USCA9IDI3NAorY29uc3QgX0FS
UEhSRF9FVEhFUiA9IDEKK2NvbnN0IF9JUFBPUlRfTkFNRVNFUlZFUiA9IDQyCitjb25zdCBfX1ND
X0JBU0UgPSAxMzQKK2NvbnN0IF9IT1NUX05BTUVfTUFYID0gNjQKK2NvbnN0IF9YODZfQ1IwX0VU
X0JJVCA9IDQKK2NvbnN0IF9GX1NFVFBJUEVfU1ogPSAxMDMxCitjb25zdCBfX19VSU5UMTZfTUFY
X18gPSAweGZmZmYKK2NvbnN0IF9fX1NFR19GUyA9IDEKK2NvbnN0IF9TWVNfZnJlbW92ZXhhdHRy
ID0gX19fTlJfZnJlbW92ZXhhdHRyCitjb25zdCBfRkZJX1RZUEVfVUlOVDE2ID0gNworY29uc3Qg
X19fSUxQMzJfT0ZGMzJfTERGTEFHUyA9ICItbTMyIgorY29uc3QgX0lQUE9SVF9NVFAgPSA1Nwor
Y29uc3QgX1NZU19mc2V0eGF0dHIgPSBfX19OUl9mc2V0eGF0dHIKK2NvbnN0IF9fX05SX2V4aXQg
PSA2MAorY29uc3QgX0JQRl9IID0gMHgwOAorY29uc3QgX1BSX1NFVF9TRUNDT01QID0gMjIKK2Nv
bnN0IF9FVEhfUF9ESUFHID0gMHg2MDA1Citjb25zdCBfTE9HSU5fTkFNRV9NQVggPSAyNTYKK2Nv
bnN0IF9TX0lSV1hPID0gKF9TX0lSV1hHID4+IDMpCitjb25zdCBfRkZJX1NURENBTEwgPSA1Citj
b25zdCBfQVJQSFJEX0lORklOSUJBTkQgPSAzMgorY29uc3QgX19JT0NfV1JJVEUgPSAxCitjb25z
dCBfVElPQ0VYQ0wgPSAweDU0MEMKK2NvbnN0IF9fU0NfVEhSRUFEX1JPQlVTVF9QUklPX1BST1RF
Q1QgPSAyNDgKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRUNMT05FID0gOAorY29uc3QgX1NZU19wcmN0
bCA9IF9fX05SX3ByY3RsCitjb25zdCBfSVBfVFJBTlNQQVJFTlQgPSAxOQorY29uc3QgX0lGTEFf
UE9SVF9IT1NUX1VVSUQgPSA1Citjb25zdCBfX19OUl9mYW5vdGlmeV9tYXJrID0gMzAxCitjb25z
dCBfSUZGX1BPSU5UT1BPSU5UID0gMTYKK2NvbnN0IF9SVEZfRFlOQU1JQyA9IDB4MDAxMAorY29u
c3QgX1NJT0NHSUZNRVRSSUMgPSAweDg5MWQKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1NUQVRTX0VO
QUJMRUQgPSA0MgorY29uc3QgX1NZU19leGVjdmUgPSBfX19OUl9leGVjdmUKK2NvbnN0IF9PTkxS
RVQgPSAwMDAwMDQwCitjb25zdCBfUlRBWF9SVFRWQVIgPSA1Citjb25zdCBfSUZMQV9CUl9NQ0FT
VF9NTERfVkVSU0lPTiA9IDQ0Citjb25zdCBfX19GTFRfTUlOX0VYUF9fID0gKC0xMjUpCitjb25z
dCBfTlVEX0RFTEFZID0gMHgwOAorY29uc3QgX19fTlJfc2VuZG1tc2cgPSAzMDcKK2NvbnN0IF9J
RkxBX0JSX05GX0NBTExfSVBUQUJMRVMgPSAzNgorY29uc3QgX0lQUE9SVF9FQ0hPID0gNworY29u
c3QgX19fTlJfY2xvY2tfZ2V0cmVzID0gMjI5Citjb25zdCBfTUNBU1RfVU5CTE9DS19TT1VSQ0Ug
PSA0NAorY29uc3QgX0VUSF9QX0xPT1BCQUNLID0gMHg5MDAwCitjb25zdCBfSVRJTUVSX1ZJUlRV
QUwgPSAxCitjb25zdCBfUFJJaUxFQVNUOCA9ICJpIgorY29uc3QgX0VUSF9QX0NVU1QgPSAweDYw
MDYKK2NvbnN0IF9JRkxBX0JSUE9SVF9GQVNUX0xFQVZFID0gNworY29uc3QgX1NZU19zZXRyZXN1
aWQgPSBfX19OUl9zZXRyZXN1aWQKK2NvbnN0IF9SVEZfWFJFU09MVkUgPSAweDA4MDAKK2NvbnN0
IF9BUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQID0gODAzCitjb25zdCBfX19TX0lGQ0hSID0gMDAy
MDAwMAorY29uc3QgX0NNU1BBUiA9IDAxMDAwMDAwMDAwMAorY29uc3QgX0FSUEhSRF9WT0lEID0g
MHhGRkZGCitjb25zdCBfX19OUl9saXN0eGF0dHIgPSAxOTQKK2NvbnN0IF9SVEFfVUlEID0gMjUK
K2NvbnN0IF9fSU9DX05STUFTSyA9ICgoMSA8PCBfX0lPQ19OUkJJVFMpLTEpCitjb25zdCBfSU9D
U0laRV9TSElGVCA9IChfX0lPQ19TSVpFU0hJRlQpCitjb25zdCBfRUFHQUlOID0gMTEKK2NvbnN0
IF9fX0ZMVF9NQVhfMTBfRVhQX18gPSAzOAorY29uc3QgX0lQVjZfTVVMVElDQVNUX0xPT1AgPSAx
OQorY29uc3QgX19fTlJfZ2V0cGdpZCA9IDEyMQorY29uc3QgX1NPX1BSSU9SSVRZID0gMTIKK2Nv
bnN0IF9NU0dfRE9OVFdBSVQgPSA2NAorY29uc3QgX0lPQ1NJWkVfTUFTSyA9IChfX0lPQ19TSVpF
TUFTSyA8PCBfX0lPQ19TSVpFU0hJRlQpCitjb25zdCBfX19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9D
S19GUkVFID0gMgorY29uc3QgX19fRkxUMTI4X0VQU0lMT05fXyA9IDEuMQorY29uc3QgX0VJTlRS
ID0gNAorY29uc3QgX1JURl9OT1BNVFVESVNDID0gMHg0MDAwCitjb25zdCBfUlRQUk9UX1NUQVRJ
QyA9IDQKK2NvbnN0IF9JRkFfTEFCRUwgPSAzCitjb25zdCBfU09fUFJPVE9DT0wgPSAzOAorY29u
c3QgX19fTlJfcmVhZGFoZWFkID0gMTg3Citjb25zdCBfVEhfU1lOID0gMHgwMgorY29uc3QgX1JU
TkxHUlBfSVBWNl9QUkVGSVggPSAxOAorY29uc3QgX0lDTVA2X0RTVF9VTlJFQUNIX0FETUlOID0g
MQorY29uc3QgX1NJT0NHSUZQRkxBR1MgPSAweDg5MzUKK2NvbnN0IF9fU1lTX1NUQVRGU19IID0g
MQorY29uc3QgX19fU1REQ19fID0gMQorY29uc3QgX19fREVDMTI4X01BWF9fID0gOS45OTk5OTk5
OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTlFNjE0NAorY29uc3QgX0lONl9BRERSX0dFTl9NT0RF
X05PTkUgPSAxCitjb25zdCBfUlRNX1NFVExJTksgPSAxOQorY29uc3QgX0ZGSV9PSyA9IDAKK2Nv
bnN0IF9fX0lGTEFfU1RBVFNfTUFYID0gNgorY29uc3QgX05EX1JPVVRFUl9TT0xJQ0lUID0gMTMz
Citjb25zdCBfUFJfU1BFQ19TVE9SRV9CWVBBU1MgPSAwCitjb25zdCBfU1lTX3RlZSA9IF9fX05S
X3RlZQorY29uc3QgX0ZQRV9GTFRTVUIgPSA4Citjb25zdCBfTVNHX1dBSVRGT1JPTkUgPSA2NTUz
NgorY29uc3QgX19QQ19BTExPQ19TSVpFX01JTiA9IDE4Citjb25zdCBfU0lHSUxMID0gNAorY29u
c3QgX0ROX0RFTEVURSA9IDB4MDAwMDAwMDgKK2NvbnN0IF9OSV9OVU1FUklDU0VSViA9IDIKK2Nv
bnN0IF9QRl9JU0ROID0gMzQKK2NvbnN0IF9QUl9DQVBfQU1CSUVOVCA9IDQ3Citjb25zdCBfSVBU
T1NfVE9TX01BU0sgPSAweDFFCitjb25zdCBfX1NDX05MX0xBTkdNQVggPSAxMjAKK2NvbnN0IF9T
SUdDTEQgPSBfU0lHQ0hMRAorY29uc3QgX19fTlJfY2htb2QgPSA5MAorY29uc3QgX1NURE9VVF9G
SUxFTk8gPSAxCitjb25zdCBfX0xQNjQgPSAxCitjb25zdCBfX19OUl9tcV9nZXRzZXRhdHRyID0g
MjQ1Citjb25zdCBfU1lTX2xpc3RlbiA9IF9fX05SX2xpc3RlbgorY29uc3QgX0lGTEFfVkZfTElO
S19TVEFURV9BVVRPID0gMAorY29uc3QgX1g4Nl9FRkxBR1NfUkZfQklUID0gMTYKK2NvbnN0IF9U
Q1BfVEhJTl9EVVBBQ0sgPSAxNworY29uc3QgX19fTlJfc3luYyA9IDE2MgorY29uc3QgX1NPX0FU
VEFDSF9SRVVTRVBPUlRfRUJQRiA9IDUyCitjb25zdCBfX19TSVpFT0ZfRE9VQkxFX18gPSA4Citj
b25zdCBfRU1VTFRJSE9QID0gNzIKK2NvbnN0IF9fUE9TSVhfUUxJTUlUID0gMQorY29uc3QgX1NZ
U19nZXRpdGltZXIgPSBfX19OUl9nZXRpdGltZXIKK2NvbnN0IF9SVE1fR0VUUURJU0MgPSAzOAor
Y29uc3QgX0ZTX0NPTVBSQkxLX0ZMID0gMHgwMDAwMDIwMAorY29uc3QgX1NZU19nZXRwZ3JwID0g
X19fTlJfZ2V0cGdycAorY29uc3QgX19fRkxUMTI4X01BTlRfRElHX18gPSAxMTMKK2NvbnN0IF9T
QV9PTlNUQUNLID0gMHgwODAwMDAwMAorY29uc3QgX0lGTEFfQlJfTUNBU1RfSUdNUF9WRVJTSU9O
ID0gNDMKK2NvbnN0IF9TWVNfcGtleV9mcmVlID0gX19fTlJfcGtleV9mcmVlCitjb25zdCBfX19O
Ul9zaG1jdGwgPSAzMQorY29uc3QgX19NS05PRF9WRVIgPSAwCitjb25zdCBfRlNfRU5DUllQVElP
Tl9NT0RFX1NQRUNLMTI4XzI1Nl9YVFMgPSA3Citjb25zdCBfU1lTX2dldGRlbnRzNjQgPSBfX19O
Ul9nZXRkZW50czY0Citjb25zdCBfX19OUl9jbG9zZSA9IDMKK2NvbnN0IF9GU19CVFJFRV9GTCA9
IDB4MDAwMDEwMDAKK2NvbnN0IF9NU0dfUlNUID0gNDA5NgorY29uc3QgX19TQ19SRUFMVElNRV9T
SUdOQUxTID0gOQorY29uc3QgX0lOX0FMTF9FVkVOVFMgPSAoX0lOX0FDQ0VTUyB8IF9JTl9NT0RJ
RlkgfCBfSU5fQVRUUklCIHwgX0lOX0NMT1NFX1dSSVRFIHwgX0lOX0NMT1NFX05PV1JJVEUgfCBf
SU5fT1BFTiB8IF9JTl9NT1ZFRF9GUk9NIHwgX0lOX01PVkVEX1RPIHwgX0lOX0NSRUFURSB8IF9J
Tl9ERUxFVEUgfCBfSU5fREVMRVRFX1NFTEYgfCBfSU5fTU9WRV9TRUxGKQorY29uc3QgX1VJTlRf
RkFTVDE2X01BWCA9ICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkKK2NvbnN0IF9QVFJBQ0VfQVRUQUNI
ID0gMTYKK2NvbnN0IF9fX05SX21rbm9kYXQgPSAyNTkKK2NvbnN0IF9TQ05pOCA9ICJoaGkiCitj
b25zdCBfX1NDX0xFVkVMMV9EQ0FDSEVfQVNTT0MgPSAxODkKK2NvbnN0IF9SVE1fTkVXQ0FDSEVS
RVBPUlQgPSA5NgorY29uc3QgX1NPX1BFRVJOQU1FID0gMjgKK2NvbnN0IF9YODZfQ1I0X09TRlhT
Ul9CSVQgPSA5Citjb25zdCBfX19EQkxfTUlOXzEwX0VYUF9fID0gKC0zMDcpCitjb25zdCBfX1BP
U0lYMl9DSEFSQ0xBU1NfTkFNRV9NQVggPSAxNAorY29uc3QgX19fQklUX1RZUEVTX0RFRklORURf
XyA9IDEKK2NvbnN0IF9fQklUU19TVEFUX0ggPSAxCitjb25zdCBfU0lHS0lMTCA9IDkKK2NvbnN0
IF9fX05SX21tYXAgPSA5Citjb25zdCBfX0RJUkVOVF9IID0gMQorY29uc3QgX1JUQV9DQUNIRUlO
Rk8gPSAxMgorY29uc3QgX1JURl9NVFUgPSAweDAwNDAKK2NvbnN0IF9ORFRQQV9RVUVVRV9MRU5C
WVRFUyA9IDE2Citjb25zdCBfQ1g4Nl9DQ1I0ID0gMHhlOAorY29uc3QgX0lGQV9VTlNQRUMgPSAw
Citjb25zdCBfX19OUl9zZXRybGltaXQgPSAxNjAKK2NvbnN0IF9TT19NRU1JTkZPID0gNTUKK2Nv
bnN0IF9fU0NfTlBST0NFU1NPUlNfT05MTiA9IDg0Citjb25zdCBfTUNBU1RfSk9JTl9HUk9VUCA9
IDQyCitjb25zdCBfRU9WRVJGTE9XID0gNzUKK2NvbnN0IF9NQURWX1dJTExORUVEID0gMworY29u
c3QgX0FSUEhSRF9ISVBQSSA9IDc4MAorY29uc3QgX05TSUcgPSBfX05TSUcKK2NvbnN0IF9BRl9S
T1VURSA9IF9QRl9ST1VURQorY29uc3QgX1NJT0NHU1RBTVBOUyA9IDB4ODkwNworY29uc3QgX1BP
UlRfVkRQX1JFU1BPTlNFX1NVQ0NFU1MgPSAwCitjb25zdCBfSUZMQV9NQUNTRUNfUkVQTEFZX1BS
T1RFQ1QgPSAxMgorY29uc3QgX1RJT0NNU0VUID0gMHg1NDE4Citjb25zdCBfTkVUTElOS19LT0JK
RUNUX1VFVkVOVCA9IDE1Citjb25zdCBfX1BPU0lYMl9FWFBSX05FU1RfTUFYID0gMzIKK2NvbnN0
IF9JUF9NVUxUSUNBU1RfTE9PUCA9IDM0Citjb25zdCBfUlRNX0dFVE1EQiA9IDg2Citjb25zdCBf
X19JTlRfTEVBU1Q4X1dJRFRIX18gPSA4Citjb25zdCBfX19OUl9ydF9zaWdxdWV1ZWluZm8gPSAx
MjkKK2NvbnN0IF9YODZfQ1I0X1BLRV9CSVQgPSAyMgorY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9Q
RVJNX0hXQUREUiA9IDQKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVCA9IDIwMDgw
OQorY29uc3QgX0VQT0xMTVNHID0gMTAyNAorY29uc3QgX0lGTEFfR1NPX01BWF9TSVpFID0gNDEK
K2NvbnN0IF9fU0NfTEVWRUwxX0lDQUNIRV9MSU5FU0laRSA9IDE4NworY29uc3QgX19fTlJfbXN5
bmMgPSAyNgorY29uc3QgX1JUQV9NVUxUSVBBVEggPSA5Citjb25zdCBfRkYwID0gMDAwMDAwMAor
Y29uc3QgX0ZGMSA9IDAxMDAwMDAKK2NvbnN0IF9FVEhfUF9BVE1GQVRFID0gMHg4ODg0Citjb25z
dCBfWDg2X0VGTEFHU19JRF9CSVQgPSAyMQorY29uc3QgX19fTlJfYmluZCA9IDQ5Citjb25zdCBf
X0RFRkFVTFRfU09VUkNFID0gMQorY29uc3QgX0lQT1BUX1NFQ1VSX1JFU1RSID0gMHhhZjEzCitj
b25zdCBfSUZMQV9WWExBTl9DT0xMRUNUX01FVEFEQVRBID0gMjUKK2NvbnN0IF9TVEFUWF9VSUQg
PSAweDAwMDgKK2NvbnN0IF9QVFJBQ0VfR0VURlBYUkVHUyA9IDE4Citjb25zdCBfU1lTX2dldHBy
aW9yaXR5ID0gX19fTlJfZ2V0cHJpb3JpdHkKK2NvbnN0IF9IQVZFX1BJUEUyID0gMQorY29uc3Qg
X19fTlJfY2xvY2tfc2V0dGltZSA9IDIyNworY29uc3QgX19fTlJfbXVubG9jayA9IDE1MAorY29u
c3QgX1JUUFJPVF9PU1BGID0gMTg4Citjb25zdCBfUlRNX0dFVExJTksgPSAxOAorY29uc3QgX19f
TlJfYWxhcm0gPSAzNworY29uc3QgX19fT19EU1lOQyA9IDAxMDAwMAorY29uc3QgX1BSSU9fUEdS
UCA9IDEKK2NvbnN0IF9fX05SX3N5bmNmcyA9IDMwNgorY29uc3QgX0VOT1RTVVAgPSBfRU9QTk9U
U1VQUAorY29uc3QgX05FVExJTktfVU5VU0VEID0gMQorY29uc3QgX0lDTVA2X1JSX1BDT1VTRV9G
TEFHU19ERUNSVkxUSU1FID0gMHg4MAorY29uc3QgX0hBVkVfU1lTX1NPQ0tFVF9IID0gMQorY29u
c3QgX1NZU19zZXRfcm9idXN0X2xpc3QgPSBfX19OUl9zZXRfcm9idXN0X2xpc3QKK2NvbnN0IF9D
TE9DS19NT05PVE9OSUNfQ09BUlNFID0gNgorY29uc3QgX19DU19YQlM1X0xQQklHX09GRkJJR19D
RkxBR1MgPSAxMTEyCitjb25zdCBfX0FTTV9YODZfVU5JU1REXzY0X0ggPSAxCitjb25zdCBfU1lT
X3Byb2Nlc3Nfdm1fcmVhZHYgPSBfX19OUl9wcm9jZXNzX3ZtX3JlYWR2Citjb25zdCBfWDg2X0NS
MF9NUF9CSVQgPSAxCitjb25zdCBfSVBPUFRfTUlOT0ZGID0gNAorY29uc3QgX0lQVjZfVjZPTkxZ
ID0gMjYKK2NvbnN0IF9YODZfQ1I0X0ZTR1NCQVNFX0JJVCA9IDE2Citjb25zdCBfU0lHRVZfU0lH
TkFMID0gMAorY29uc3QgX1NZU19ydF9zaWdzdXNwZW5kID0gX19fTlJfcnRfc2lnc3VzcGVuZAor
Y29uc3QgX1JUTV9ORVdORUlHSCA9IDI4Citjb25zdCBfX19QVEhSRUFEX1JXTE9DS19JTlRfRkxB
R1NfU0hBUkVEID0gMQorY29uc3QgX19fSU5UX0xFQVNUNjRfV0lEVEhfXyA9IDY0Citjb25zdCBf
U1lTX2dldHBlZXJuYW1lID0gX19fTlJfZ2V0cGVlcm5hbWUKK2NvbnN0IF9fX05SX2NoZGlyID0g
ODAKK2NvbnN0IF9fX05SX2V4aXRfZ3JvdXAgPSAyMzEKK2NvbnN0IF9fX1BPU0lYMl9USElTX1ZF
UlNJT04gPSAyMDA4MDkKK2NvbnN0IF9OTDAgPSAwMDAwMDAwCitjb25zdCBfX19JRkxBX1JNTkVU
X01BWCA9IDMKK2NvbnN0IF9fU0NfMl9DX1ZFUlNJT04gPSA5NgorY29uc3QgX0FSUEhSRF9TTElQ
NiA9IDI1OAorY29uc3QgX1NZU19nZXRlZ2lkID0gX19fTlJfZ2V0ZWdpZAorY29uc3QgX19TQ19U
SFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TID0gNzMKK2NvbnN0IF9TSUdUU1RQID0gMjAKK2Nv
bnN0IF9NU0dfRklOID0gNTEyCitjb25zdCBfTkRVU0VST1BUX1NSQ0FERFIgPSAxCitjb25zdCBf
SU5fQ0xBU1NDX0hPU1QgPSAoMHhmZmZmZmZmZiAmIF5fSU5fQ0xBU1NDX05FVCkKK2NvbnN0IF9D
SEFSX0JJVCA9IF9fX0NIQVJfQklUX18KK2NvbnN0IF9NQ0xfRlVUVVJFID0gMgorY29uc3QgX1JU
QVhfVU5TUEVDID0gMAorY29uc3QgX0lGTEFfQk9ORF9GQUlMX09WRVJfTUFDID0gMTMKK2NvbnN0
IF9fX0xEQkxfSEFTX0RFTk9STV9fID0gMQorY29uc3QgX1NJR0lPVCA9IF9TSUdBQlJUCitjb25z
dCBfX19OUl92Zm9yayA9IDU4Citjb25zdCBfX0JJVFNfUFRIUkVBRFRZUEVTX0FSQ0hfSCA9IDEK
K2NvbnN0IF9ORFRBX1BBRCA9IDkKK2NvbnN0IF9fX05SX3N3YXBvZmYgPSAxNjgKK2NvbnN0IF9J
RkxBX01BQ1NFQ19QUk9URUNUID0gOAorY29uc3QgX0FUX1NZTUxJTktfRk9MTE9XID0gMHg0MDAK
K2NvbnN0IF9QUl9NQ0VfS0lMTF9MQVRFID0gMAorY29uc3QgX1BPUlRfUFJPRklMRV9SRVNQT05T
RV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VTID0gMjYwCitjb25zdCBfRlNfWEZMQUdfRVhUU0laRSA9
IDB4MDAwMDA4MDAKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUyA9IDExMDUK
K2NvbnN0IF9GU19YRkxBR19SVElOSEVSSVQgPSAweDAwMDAwMTAwCitjb25zdCBfRlBFX0lOVE9W
RiA9IDIKK2NvbnN0IF9TSFJUX01BWCA9IF9fX1NIUlRfTUFYX18KK2NvbnN0IF9fX05SX3Byb2Nl
c3Nfdm1fcmVhZHYgPSAzMTAKK2NvbnN0IF9NU19ESVJTWU5DID0gMTI4Citjb25zdCBfTl9TWU5D
X1BQUCA9IDE0Citjb25zdCBfX01LTk9EX1ZFUl9MSU5VWCA9IDAKK2NvbnN0IF9JUF9SRUNWRlJB
R1NJWkUgPSAyNQorY29uc3QgX0lGTEFfQlJfVkxBTl9TVEFUU19FTkFCTEVEID0gNDEKK2NvbnN0
IF9QQUdFX1NISUZUID0gMTIKK2NvbnN0IF9JTExfSUxMT1BOID0gMgorY29uc3QgX0xPQ0tfUkVB
RCA9IDY0Citjb25zdCBfSUZMQV9CT05EX1NMQVZFX0FEX0FHR1JFR0FUT1JfSUQgPSA2Citjb25z
dCBfU09MX1gyNSA9IDI2MgorY29uc3QgX0lQVE9TX0xPV0RFTEFZID0gMHgxMAorY29uc3QgX19T
WVNfSU9DVExfSCA9IDEKK2NvbnN0IF9TWVNfZ2V0c2lkID0gX19fTlJfZ2V0c2lkCitjb25zdCBf
X19TX0lGU09DSyA9IDAxNDAwMDAKK2NvbnN0IF9QUl9TRVRfTU1fQVJHX0VORCA9IDkKK2NvbnN0
IF9GRklfVFJBTVBPTElORV9TSVpFID0gMjQKK2NvbnN0IF9FVEhfUF9OQ1NJID0gMHg4OEY4Citj
b25zdCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOUFJPR1JFU1MgPSAyNTcKK2NvbnN0IF9TQV9T
VEFDSyA9IF9TQV9PTlNUQUNLCitjb25zdCBfSUZBX0FOWUNBU1QgPSA1Citjb25zdCBfUlRBWF9D
Q19BTEdPID0gMTYKK2NvbnN0IF9OVURfUFJPQkUgPSAweDEwCitjb25zdCBfUFRSQUNFX1BFRUtV
U0VSID0gMworY29uc3QgX0lDTVA2X1RJTUVfRVhDRUVEX1RSQU5TSVQgPSAwCitjb25zdCBfX1ND
X1BSSU9SSVRZX1NDSEVEVUxJTkcgPSAxMAorY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkZC
SUdfTElCUyA9IDExMzgKK2NvbnN0IF9TWVNfcmVhZGxpbmthdCA9IF9fX05SX3JlYWRsaW5rYXQK
K2NvbnN0IF9TX0lFWEVDID0gX1NfSVhVU1IKK2NvbnN0IF9UQ1BfQ0xPU0lORyA9IDExCitjb25z
dCBfX0JJVFNfVElNRV9IID0gMQorY29uc3QgX0lQX01TRklMVEVSID0gNDEKK2NvbnN0IF9IQVZF
X0FTX1g4Nl9BRVMgPSAxCitjb25zdCBfX19STElNSVRfTE9DS1MgPSAxMAorY29uc3QgX1RIX1VS
RyA9IDB4MjAKK2NvbnN0IF9PX1NZTkMgPSAwNDAxMDAwMAorY29uc3QgX19TWVNfVUlPX0ggPSAx
Citjb25zdCBfTUFDU0VDX1ZBTElEQVRFX0NIRUNLID0gMQorY29uc3QgX0lHTkNSID0gMDAwMDIw
MAorY29uc3QgX19fSU5UUFRSX1dJRFRIX18gPSA2NAorY29uc3QgX19DU19QT1NJWF9WN19MUDY0
X09GRjY0X0NGTEFHUyA9IDExNDAKK2NvbnN0IF9CVVNfT0JKRVJSID0gMworY29uc3QgX1RDUF9D
T05HRVNUSU9OID0gMTMKK2NvbnN0IF9fX05SX3F1ZXJ5X21vZHVsZSA9IDE3OAorY29uc3QgX05M
TV9GX1JPT1QgPSAweDEwMAorY29uc3QgX0VCQURSUUMgPSA1NgorY29uc3QgX1NZU19tc2djdGwg
PSBfX19OUl9tc2djdGwKK2NvbnN0IF9CUEZfTUVNV09SRFMgPSAxNgorY29uc3QgX0lGTEFfVkZf
VkxBTl9JTkZPID0gMQorY29uc3QgX1JUTkxHUlBfTkRfVVNFUk9QVCA9IDIwCitjb25zdCBfQVRG
X0RPTlRQVUIgPSAweDQwCitjb25zdCBfX19OUl9zaHV0ZG93biA9IDQ4Citjb25zdCBfUlROTEdS
UF9NUExTX05FVENPTkYgPSAyOQorY29uc3QgX19TQ19JTlRfTUFYID0gMTA0Citjb25zdCBfX19O
Ul9zZXR1aWQgPSAxMDUKK2NvbnN0IF9IVVBDTCA9IDAwMDIwMDAKK2NvbnN0IF9BRl9SRFMgPSBf
UEZfUkRTCitjb25zdCBfUFJfU0VUX1RJTUVSU0xBQ0sgPSAyOQorY29uc3QgX0NMT05FX1NJR0hB
TkQgPSAweDAwMDAwODAwCitjb25zdCBfUFJfU0VUX01NX0FSR19TVEFSVCA9IDgKK2NvbnN0IF9f
X05SX2R1cDIgPSAzMworY29uc3QgX19fTlJfZHVwMyA9IDI5MgorY29uc3QgX19QT1NJWF9USFJF
QURfUFJJT19QUk9URUNUID0gMjAwODA5Citjb25zdCBfUFJfU0VUX01NX01BUCA9IDE0Citjb25z
dCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MgPSAxMTIwCitjb25zdCBfX19OUl9z
Y2hlZF9nZXRzY2hlZHVsZXIgPSAxNDUKK2NvbnN0IF9fU0NfWE9QRU5fQ1JZUFQgPSA5MgorY29u
c3QgX1JUTV9ORVdST1VURSA9IDI0Citjb25zdCBfU0lfTE9BRF9TSElGVCA9IDE2Citjb25zdCBf
UFJJZExFQVNUMTYgPSAiZCIKK2NvbnN0IF9NT0RfRVNURVJST1IgPSBfQURKX0VTVEVSUk9SCitj
b25zdCBfSVBQT1JUX0VGU1NFUlZFUiA9IDUyMAorY29uc3QgX0FGX0lFRUU4MDIxNTQgPSBfUEZf
SUVFRTgwMjE1NAorY29uc3QgX1NZU19zaWduYWxmZDQgPSBfX19OUl9zaWduYWxmZDQKK2NvbnN0
IF9USU9DU1NPRlRDQVIgPSAweDU0MUEKK2NvbnN0IF9fX05SX3Vtb3VudDIgPSAxNjYKK2NvbnN0
IF9JRkxBX1ZSRl9UQUJMRSA9IDEKK2NvbnN0IF9TT19USU1FU1RBTVBJTkcgPSAzNworY29uc3Qg
X01TX1JET05MWSA9IDEKK2NvbnN0IF9TS0ZfTkVUX09GRiA9ICgtMHgxMDAwMDApCitjb25zdCBf
RE5fQUNDRVNTID0gMHgwMDAwMDAwMQorY29uc3QgX1NZU19hY2Nlc3MgPSBfX19OUl9hY2Nlc3MK
K2NvbnN0IF9fU0NfVjZfTFBCSUdfT0ZGQklHID0gMTc5Citjb25zdCBfSVBPUFRfUkVTRVJWRUQx
ID0gMHgyMAorY29uc3QgX1RDUF9DT09LSUVfTUFYID0gMTYKK2NvbnN0IF9STU5FVF9GTEFHU19J
TkdSRVNTX0RFQUdHUkVHQVRJT04gPSAoMSA8PCAwKQorY29uc3QgX01TX1NUUklDVEFUSU1FID0g
MTY3NzcyMTYKK2NvbnN0IF9fX05SX2Nsb2NrX2dldHRpbWUgPSAyMjgKK2NvbnN0IF9fX05SX3Nl
bXRpbWVkb3AgPSAyMjAKK2NvbnN0IF9fVVRTTkFNRV9SRUxFQVNFX0xFTkdUSCA9IF9fVVRTTkFN
RV9MRU5HVEgKK2NvbnN0IF9fX0RFQzMyX01JTl9FWFBfXyA9ICgtOTQpCitjb25zdCBfWDg2X0VG
TEFHU19GSVhFRF9CSVQgPSAxCitjb25zdCBfSEFWRV9TWVNfUFJDVExfSCA9IDEKK2NvbnN0IF9f
UE9TSVhfUkVFTlRSQU5UX0ZVTkNUSU9OUyA9IDEKK2NvbnN0IF9CTE9DS19TSVpFX0JJVFMgPSAx
MAorY29uc3QgX0VDT05OUkVTRVQgPSAxMDQKK2NvbnN0IF9JRkxBX1ZGX0lCX1BPUlRfR1VJRCA9
IDExCitjb25zdCBfX19EQkxfREVDSU1BTF9ESUdfXyA9IDE3Citjb25zdCBfSEFWRV9PUEVOQVQg
PSAxCitjb25zdCBfVFVOX1BLVF9TVFJJUCA9IDB4MDAwMQorY29uc3QgX1ZTVE9QID0gOQorY29u
c3QgX0lQVE9TX0RTQ1BfQUYxMSA9IDB4MjgKK2NvbnN0IF9JUFRPU19EU0NQX0FGMTIgPSAweDMw
Citjb25zdCBfSVBUT1NfRFNDUF9BRjEzID0gMHgzOAorY29uc3QgX19fTlJfcmVjdm1tc2cgPSAy
OTkKK2NvbnN0IF9fX1VTRV9YT1BFTjJLOCA9IDEKK2NvbnN0IF9QUl9GUF9FWENfRElWID0gMHgw
MTAwMDAKK2NvbnN0IF9DTE9ORV9ERVRBQ0hFRCA9IDB4MDA0MDAwMDAKK2NvbnN0IF9TWVNfZ2V0
X3JvYnVzdF9saXN0ID0gX19fTlJfZ2V0X3JvYnVzdF9saXN0Citjb25zdCBfU09fREVUQUNIX0JQ
RiA9IF9TT19ERVRBQ0hfRklMVEVSCitjb25zdCBfU1RBVFhfQVRUUl9BVVRPTU9VTlQgPSAweDEw
MDAKK2NvbnN0IF9fUE9TSVhfVElNRVJTID0gMjAwODA5Citjb25zdCBfVENQSV9PUFRfRUNOX1NF
RU4gPSAxNgorY29uc3QgX0FSUEhSRF9BU0ggPSA3ODEKK2NvbnN0IF9NU19STVRfTUFTSyA9IChf
TVNfUkRPTkxZfF9NU19TWU5DSFJPTk9VU3xfTVNfTUFORExPQ0t8X01TX0lfVkVSU0lPTnwgX01T
X0xBWllUSU1FKQorY29uc3QgX1NZU19tcV9ub3RpZnkgPSBfX19OUl9tcV9ub3RpZnkKK2NvbnN0
IF9JRkZfVVAgPSAxCitjb25zdCBfSVBQUk9UT19GUkFHTUVOVCA9IDQ0Citjb25zdCBfU0NOaUxF
QVNUMTYgPSAiaGkiCitjb25zdCBfRl9TRUFMX1NIUklOSyA9IDB4MDAwMgorY29uc3QgX0ZTX05P
VEFJTF9GTCA9IDB4MDAwMDgwMDAKK2NvbnN0IF9TVEFUWF9CVElNRSA9IDB4MDgwMAorY29uc3Qg
X19fSUZMQV9CUlBPUlRfTUFYID0gMzUKK2NvbnN0IF9fX05SX2V4ZWN2ZSA9IDU5Citjb25zdCBf
X19VU0VfRVhURVJOX0lOTElORVMgPSAxCitjb25zdCBfSVBfQklORF9BRERSRVNTX05PX1BPUlQg
PSAyNAorY29uc3QgX0lOVDhfTUFYID0gKDEyNykKK2NvbnN0IF9NQURWX1NFUVVFTlRJQUwgPSAy
Citjb25zdCBfRl9XUkxDSyA9IDEKK2NvbnN0IF9JUFBPUlRfVVNFUlJFU0VSVkVEID0gNTAwMAor
Y29uc3QgX0lQX1BNVFVESVNDX1dBTlQgPSAxCitjb25zdCBfU1lTX2NyZWF0ZV9tb2R1bGUgPSBf
X19OUl9jcmVhdGVfbW9kdWxlCitjb25zdCBfSUZMQV9CUl9ST09UX0lEID0gMTAKK2NvbnN0IF9T
WVNfcGl2b3Rfcm9vdCA9IF9fX05SX3Bpdm90X3Jvb3QKK2NvbnN0IF9CMjMwNDAwID0gMDAxMDAw
MworY29uc3QgX1NPTF9UTFMgPSAyODIKK2NvbnN0IF9fTkVUX1JPVVRFX0ggPSAxCitjb25zdCBf
RUxJQkJBRCA9IDgwCitjb25zdCBfUlBNX1BDT19TRVRHTE9CQUwgPSAzCitjb25zdCBfQlJJREdF
X01PREVfVU5TUEVDID0gMAorY29uc3QgX0VOT0JVRlMgPSAxMDUKK2NvbnN0IF9fX1NIUlRfV0lE
VEhfXyA9IDE2Citjb25zdCBfUlRfQ0xBU1NfVU5TUEVDID0gMAorY29uc3QgX19fRkxUMTI4X01B
WF9FWFBfXyA9IDE2Mzg0Citjb25zdCBfSVBUT1NfRFNDUF9BRjIxID0gMHg0OAorY29uc3QgX0lQ
VE9TX0RTQ1BfQUYyMiA9IDB4NTAKK2NvbnN0IF9JUFRPU19EU0NQX0FGMjMgPSAweDU4Citjb25z
dCBfX19GTFQzMlhfTUFYXzEwX0VYUF9fID0gMzA4Citjb25zdCBfX1NDX1VJT19NQVhJT1YgPSA2
MAorY29uc3QgX1g4Nl9DUjBfRU1fQklUID0gMgorY29uc3QgX05URl9PRkZMT0FERUQgPSAweDIw
Citjb25zdCBfU1lTX2lvcHJpb19zZXQgPSBfX19OUl9pb3ByaW9fc2V0Citjb25zdCBfX19OUl9n
ZXR0aW1lb2ZkYXkgPSA5NgorY29uc3QgX1BUUkFDRV9DT05UID0gNworY29uc3QgX1RJT0NTUFRM
Q0tfdmFsID0gMTA3NDAyNTUyMQorY29uc3QgX1BUUkFDRV9QRUVLVEVYVCA9IDEKK2NvbnN0IF9O
RVRMSU5LX1hGUk0gPSA2Citjb25zdCBfVENBX1VOU1BFQyA9IDAKK2NvbnN0IF9FVEhfUF84MDIx
USA9IDB4ODEwMAorY29uc3QgX0lGTEFfVkxBTl9JTkdSRVNTX1FPUyA9IDQKK2NvbnN0IF9FUE9M
TFJEQkFORCA9IDEyOAorY29uc3QgX1NZU191bWFzayA9IF9fX05SX3VtYXNrCitjb25zdCBfUEFD
S0VUX01SX1VOSUNBU1QgPSAzCitjb25zdCBfTkxNX0ZfRUNITyA9IDB4MDgKK2NvbnN0IF9GRklf
VFlQRV9TSU5UMTYgPSA4Citjb25zdCBfX1NDX1RSQUNFX1VTRVJfRVZFTlRfTUFYID0gMjQ1Citj
b25zdCBfU1lTX3JlY3Ztc2cgPSBfX19OUl9yZWN2bXNnCitjb25zdCBfX19OUl9zY2hlZF9nZXRf
cHJpb3JpdHlfbWluID0gMTQ3Citjb25zdCBfU1lTX3Bwb2xsID0gX19fTlJfcHBvbGwKK2NvbnN0
IF9GRklfVFlQRV9QT0lOVEVSID0gMTQKK2NvbnN0IF9JRkFfUlRfUFJJT1JJVFkgPSA5Citjb25z
dCBfUlRBWF9JTklUQ1dORCA9IDExCitjb25zdCBfSVBfUE1UVURJU0NfSU5URVJGQUNFID0gNAor
Y29uc3QgX0lGTEFfUE9SVF9VTlNQRUMgPSAwCitjb25zdCBfU0lHX1NFVE1BU0sgPSAyCitjb25z
dCBfU09MX0lDTVBWNiA9IDU4Citjb25zdCBfU0NOeDMyID0gIngiCitjb25zdCBfVENQX01TUyA9
IDUxMgorY29uc3QgX0VUSF9QXzgwMjIxID0gMHg4OTE3Citjb25zdCBfQ1IyID0gMDAwMjAwMAor
Y29uc3QgX0NSMyA9IDAwMDMwMDAKK2NvbnN0IF9TWVNfbHNlZWsgPSBfX19OUl9sc2VlaworY29u
c3QgX19GSUxFX09GRlNFVF9CSVRTID0gNjQKK2NvbnN0IF9fU0NfQ09MTF9XRUlHSFRTX01BWCA9
IDQwCitjb25zdCBfX1NDX1RIUkVBRF9DUFVUSU1FID0gMTM5Citjb25zdCBfUE9SVF9SRVFVRVNU
X1BSRUFTU09DSUFURV9SUiA9IDEKK2NvbnN0IF9JTl9VTk1PVU5UID0gMHgwMDAwMjAwMAorY29u
c3QgX0lQVE9TX0RTQ1BfQUYzMSA9IDB4NjgKK2NvbnN0IF9JUFRPU19EU0NQX0FGMzIgPSAweDcw
Citjb25zdCBfSVBUT1NfRFNDUF9BRjMzID0gMHg3OAorY29uc3QgX0lGTEFfVlhMQU5fUkVNQ1NV
TV9SWCA9IDIyCitjb25zdCBfRVBPTExFWENMVVNJVkUgPSAyNjg0MzU0NTYKK2NvbnN0IF9fX0dD
Q19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF8xID0gMQorY29uc3QgX1BUUkFDRV9HRVRFVkVO
VE1TRyA9IDE2ODk3Citjb25zdCBfTE9DS19NQU5EID0gMzIKK2NvbnN0IF9ORVRMSU5LX1VTRVJT
T0NLID0gMgorY29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9JTlZBTElEID0gMAorY29uc3QgX1RV
Tl9UWF9USU1FU1RBTVAgPSAxCitjb25zdCBfU1lTX3B3cml0ZXYyID0gX19fTlJfcHdyaXRldjIK
K2NvbnN0IF9fX0lOVF9MRUFTVDE2X01BWF9fID0gMHg3ZmZmCitjb25zdCBfU1lTX3ByZWFkNjQg
PSBfX19OUl9wcmVhZDY0Citjb25zdCBfUFJJb0xFQVNUMTYgPSAibyIKK2NvbnN0IF9TQ05pTEVB
U1QzMiA9ICJpIgorY29uc3QgX1NZU19zZW1jdGwgPSBfX19OUl9zZW1jdGwKK2NvbnN0IF9fUE9T
SVhfTkdST1VQU19NQVggPSA4Citjb25zdCBfQjQwMDAwMDAgPSAwMDEwMDE3Citjb25zdCBfUE9S
VF9QUk9GSUxFX1JFU1BPTlNFX0lOVkFMSUQgPSAyNTgKK2NvbnN0IF9QQUNLRVRfRkFOT1VUX0RB
VEEgPSAyMgorY29uc3QgX0NSRUFEID0gMDAwMDIwMAorY29uc3QgX0VUSF9QX1BQUF9NUCA9IDB4
MDAwOAorY29uc3QgX19fRkxUMzJYX0RFQ0lNQUxfRElHX18gPSAxNworY29uc3QgX1g4Nl9DUjRf
UFZJX0JJVCA9IDEKK2NvbnN0IF9TWVNfZXBvbGxfY3JlYXRlMSA9IF9fX05SX2Vwb2xsX2NyZWF0
ZTEKK2NvbnN0IF9JRkxBX0JSUE9SVF9DT05GSUdfUEVORElORyA9IDIwCitjb25zdCBfX19EQkxf
TUFYX0VYUF9fID0gMTAyNAorY29uc3QgX01BUF9TWU5DID0gMHg4MDAwMAorY29uc3QgX1JFR19S
QlAgPSAxMAorY29uc3QgX0VLRVlSRVZPS0VEID0gMTI4Citjb25zdCBfX1BPU0lYX1RSQUNFX0VW
RU5UX0ZJTFRFUiA9IC0xCitjb25zdCBfQUZfTE9DQUwgPSBfUEZfTE9DQUwKK2NvbnN0IF9SRUdf
UkJYID0gMTEKK2NvbnN0IF9TQ01fVElNRVNUQU1QSU5HID0gX1NPX1RJTUVTVEFNUElORworY29u
c3QgX19fTlJfZ2V0cGdycCA9IDExMQorY29uc3QgX19fTlJfcnRfc2lndGltZWR3YWl0ID0gMTI4
Citjb25zdCBfX19GRF9aRVJPX1NUT1MgPSAic3Rvc3EiCitjb25zdCBfUFRSQUNFX1BFRUtEQVRB
ID0gMgorY29uc3QgX1BUUkFDRV9TWVNDQUxMID0gMjQKK2NvbnN0IF9TQ051MzIgPSAidSIKK2Nv
bnN0IF9MSU5VWF9SRUJPT1RfQ01EX1NXX1NVU1BFTkQgPSAweEQwMDBGQ0UyCitjb25zdCBfT19E
SVJFQ1RPUlkgPSBfX19PX0RJUkVDVE9SWQorY29uc3QgX0VUSEVSVFlQRV9TUFJJVEUgPSAweDA1
MDAKK2NvbnN0IF9TT0NLX1JBVyA9IDMKK2NvbnN0IF9PX05PQVRJTUUgPSBfX19PX05PQVRJTUUK
K2NvbnN0IF9JUFRPU19EU0NQX0FGNDEgPSAweDg4Citjb25zdCBfSVBUT1NfRFNDUF9BRjQyID0g
MHg5MAorY29uc3QgX0lQVE9TX0RTQ1BfQUY0MyA9IDB4OTgKK2NvbnN0IF9USU9DU1BHUlAgPSAw
eDU0MTAKK2NvbnN0IF9ORF9PUFRfUkVESVJFQ1RFRF9IRUFERVIgPSA0Citjb25zdCBfUlRBWF9G
RUFUVVJFX0FMTEZSQUcgPSAoMSA8PCAzKQorY29uc3QgX0lDTVA2X0RTVF9VTlJFQUNIX0JFWU9O
RFNDT1BFID0gMgorY29uc3QgX0lQT1BUX1RJTUVTVEFNUCA9IF9JUE9QVF9UUworY29uc3QgX1JU
TV9HRVREQ0IgPSA3OAorY29uc3QgX1dPUkRfQklUID0gMzIKK2NvbnN0IF9UQ0FfU1RBVFMgPSAz
Citjb25zdCBfTl9TTElQID0gMQorY29uc3QgX1RDUF9TQVZFRF9TWU4gPSAyOAorY29uc3QgX19T
Q19CQ19TVFJJTkdfTUFYID0gMzkKK2NvbnN0IF9SVEFYX0ZFQVRVUkVfU0FDSyA9ICgxIDw8IDEp
Citjb25zdCBfX1hPUEVOX1NPVVJDRSA9IDcwMAorY29uc3QgX19BVEZJTEVfU09VUkNFID0gMQor
Y29uc3QgX1BUUkFDRV9FVkVOVF9WRk9SS19ET05FID0gNQorY29uc3QgX0lDTVA2X1JSX0ZMQUdT
X1BSRVZET05FID0gMHgwOAorY29uc3QgX0VMTlJORyA9IDQ4Citjb25zdCBfX1BPU0lYX0FJT19M
SVNUSU9fTUFYID0gMgorY29uc3QgX1JUTl9VTklDQVNUID0gMQorY29uc3QgX1JUQV9NQVJLID0g
MTYKK2NvbnN0IF9TSUdTRUdWID0gMTEKK2NvbnN0IF9OQU1FX01BWCA9IDI1NQorY29uc3QgX0FG
X1ZTT0NLID0gX1BGX1ZTT0NLCitjb25zdCBfRl9VTE9DSyA9IDAKK2NvbnN0IF9NU0dfQkFUQ0gg
PSAyNjIxNDQKK2NvbnN0IF9GUEVfRkxUVU5EID0gNQorY29uc3QgX19fSUZMQV9WRl9MSU5LX1NU
QVRFX01BWCA9IDMKK2NvbnN0IF9SVE5MR1JQX0RDQiA9IDIzCitjb25zdCBfRVBFUk0gPSAxCitj
b25zdCBfUkVHX1JDWCA9IDE0Citjb25zdCBfTVNfTk9ESVJBVElNRSA9IDIwNDgKK2NvbnN0IF9f
VEVSTUlPU19IID0gMQorY29uc3QgX19fSU5UTUFYX1dJRFRIX18gPSA2NAorY29uc3QgX0lGTEFf
QlJQT1JUX0dVQVJEID0gNQorY29uc3QgX1NZU19ydF9zaWdwZW5kaW5nID0gX19fTlJfcnRfc2ln
cGVuZGluZworY29uc3QgX0lGTEFfTUFTVEVSID0gMTAKK2NvbnN0IF9FT1BOT1RTVVBQID0gOTUK
K2NvbnN0IF9DUzUgPSAwMDAwMDAwCitjb25zdCBfX1BPU0lYMl9WRVJTSU9OID0gX19fUE9TSVgy
X1RISVNfVkVSU0lPTgorY29uc3QgX19TQ19HRVRQV19SX1NJWkVfTUFYID0gNzAKK2NvbnN0IF9J
UF9SRUNWRVJSID0gMTEKK2NvbnN0IF9IQVZFX1NJTkwgPSAxCitjb25zdCBfX0NTX1BPU0lYX1Y3
X0lMUDMyX09GRkJJR19DRkxBR1MgPSAxMTM2Citjb25zdCBfX0NTX0xGUzY0X0xJTlRGTEFHUyA9
IDEwMDcKK2NvbnN0IF9QUkl4RkFTVDggPSAieCIKK2NvbnN0IF9QUklvTEVBU1QzMiA9ICJvIgor
Y29uc3QgX1BSSU9fVVNFUiA9IDIKK2NvbnN0IF9JRkxBX05FV19JRklOREVYID0gNDkKK2NvbnN0
IF9JRkxBX1ZYTEFOX0xPQ0FMID0gNAorY29uc3QgX1BSX1NFVF9NTV9FWEVfRklMRSA9IDEzCitj
b25zdCBfVENQX1NfREFUQV9PVVQgPSAoMSA8PCAzKQorY29uc3QgX0FURl9NQUdJQyA9IDB4ODAK
K2NvbnN0IF9ORFRQQV9HQ19TVEFMRVRJTUUgPSA2Citjb25zdCBfX19rOCA9IDEKK2NvbnN0IF9f
X0lOVF9GQVNUMzJfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9fWEJTNV9MUEJJ
R19PRkZCSUcgPSAtMQorY29uc3QgX1NJT0NERUxNVUxUSSA9IDB4ODkzMgorY29uc3QgX1RVTlNF
VE5PQ1NVTV92YWwgPSAxMDc0MDI1NjcyCitjb25zdCBfX19MREJMX0RFTk9STV9NSU5fXyA9IDEu
MQorY29uc3QgX1BGX1VOU1BFQyA9IDAKK2NvbnN0IF9CUEZfTU9EID0gMHg5MAorY29uc3QgX1JF
R19SREkgPSA4Citjb25zdCBfQlBGX01JU0MgPSAweDA3Citjb25zdCBfRl9HRVRPV04gPSBfX19G
X0dFVE9XTgorY29uc3QgX0lGTEFfQlJfTUNBU1RfTEFTVF9NRU1CRVJfQ05UID0gMjgKK2NvbnN0
IF9UQ1BPUFRfU0FDS19QRVJNSVRURUQgPSA0Citjb25zdCBfX1NDX1RIUkVBRF9BVFRSX1NUQUNL
U0laRSA9IDc4Citjb25zdCBfX1BPU0lYX1Y3X0xQNjRfT0ZGNjQgPSAxCitjb25zdCBfUEZfSUVF
RTgwMjE1NCA9IDM2Citjb25zdCBfRUxJQk1BWCA9IDgyCitjb25zdCBfQjQ4MDAgPSAwMDAwMDE0
Citjb25zdCBfU1lTX3JlbmFtZWF0MiA9IF9fX05SX3JlbmFtZWF0MgorY29uc3QgX0lQUFJPVE9f
RU5DQVAgPSA5OAorY29uc3QgX1JFR19SRFggPSAxMgorY29uc3QgX0lQVjZfMjI5MkhPUE9QVFMg
PSAzCitjb25zdCBfX19ORVRJTkVUX0lQX0ggPSAxCitjb25zdCBfX19GTFQ2NFhfSEFTX0RFTk9S
TV9fID0gMQorY29uc3QgX0lGTEFfQlJQT1JUX0RFU0lHTkFURURfQ09TVCA9IDE2Citjb25zdCBf
SU5UX0xFQVNUOF9XSURUSCA9IDgKK2NvbnN0IF9OTE1TR0VSUl9BVFRSX09GRlMgPSAyCitjb25z
dCBfU1RBVFhfQVRUUl9FTkNSWVBURUQgPSAweDA4MDAKK2NvbnN0IF9SRUdfT0xETUFTSyA9IDIx
Citjb25zdCBfRlNfUE9MSUNZX0ZMQUdTX1BBRF80ID0gMHgwMAorY29uc3QgX1RJTUVfT09QID0g
MworY29uc3QgX1JUTUdSUF9JUFY2X0lGSU5GTyA9IDB4ODAwCitjb25zdCBfVENBX1JPT1RfVU5T
UEVDID0gMAorY29uc3QgX19fV19DT05USU5VRUQgPSAweGZmZmYKK2NvbnN0IF9JRkxBX1ZYTEFO
X0xBQkVMID0gMjYKK2NvbnN0IF9CUEZfSkEgPSAweDAwCitjb25zdCBfX19OUl9uYW5vc2xlZXAg
PSAzNQorY29uc3QgX0JQRl9NQUpPUl9WRVJTSU9OID0gMQorY29uc3QgX19fTlJfZ2V0ZWdpZCA9
IDEwOAorY29uc3QgX1BGX0lVQ1YgPSAzMgorY29uc3QgX1BSX0NBUF9BTUJJRU5UX0xPV0VSID0g
MworY29uc3QgX01BUF9OT1JFU0VSVkUgPSAweDA0MDAwCitjb25zdCBfSVBPUFRfRU5EID0gX0lQ
T1BUX0VPTAorY29uc3QgX0lGRl9UQVAgPSAweDAwMDIKK2NvbnN0IF9fU1lTX1VTRVJfSCA9IDEK
K2NvbnN0IF9UVU5HRVRJRkZfdmFsID0gMjE0Nzc2NzUwNgorY29uc3QgX0FESl9NQVhFUlJPUiA9
IDB4MDAwNAorY29uc3QgX1JUTkxHUlBfSVBWNl9JRklORk8gPSAxMgorY29uc3QgX0ZTX0RJUlRZ
X0ZMID0gMHgwMDAwMDEwMAorY29uc3QgX19fTlJfZmFsbG9jYXRlID0gMjg1Citjb25zdCBfX19O
Ul9zZXRfbWVtcG9saWN5ID0gMjM4Citjb25zdCBfX1BPU0lYX1RIUkVBRF9ST0JVU1RfUFJJT19J
TkhFUklUID0gMjAwODA5Citjb25zdCBfUlRBX01GQ19TVEFUUyA9IDE3Citjb25zdCBfQ1g4Nl9S
Q1JfQkFTRSA9IDB4ZGMKK2NvbnN0IF9SVFBST1RfS0VSTkVMID0gMgorY29uc3QgX0lDTVA2X0ZJ
TFRFUl9CTE9DS09USEVSUyA9IDMKK2NvbnN0IF9QUl9GUEVNVV9OT1BSSU5UID0gMQorY29uc3Qg
X19fRkxUX01BTlRfRElHX18gPSAyNAorY29uc3QgX19fTlJfZnN0YXQgPSA1Citjb25zdCBfUFRS
QUNFX09fRVhJVEtJTEwgPSAxMDQ4NTc2Citjb25zdCBfSUZMQV9CUl9NQ0FTVF9MQVNUX01FTUJF
Ul9JTlRWTCA9IDMwCitjb25zdCBfTkVUTElOS19JTkVUX0RJQUcgPSBfTkVUTElOS19TT0NLX0RJ
QUcKK2NvbnN0IF9ORVRMSU5LX1NDU0lUUkFOU1BPUlQgPSAxOAorY29uc3QgX19fTlJfc2VsZWN0
ID0gMjMKK2NvbnN0IF9JRkxBX1NUQVRTX0xJTktfT0ZGTE9BRF9YU1RBVFMgPSA0Citjb25zdCBf
X19OUl9waXBlID0gMjIKK2NvbnN0IF9TQV9OT0NMRFdBSVQgPSAyCitjb25zdCBfU1lTX2tleGVj
X2ZpbGVfbG9hZCA9IF9fX05SX2tleGVjX2ZpbGVfbG9hZAorY29uc3QgX0IyMDAgPSAwMDAwMDA2
Citjb25zdCBfX1BPU0lYX0RFTEFZVElNRVJfTUFYID0gMzIKK2NvbnN0IF9QUl9TRVRfRU5ESUFO
ID0gMjAKK2NvbnN0IF9TWVNfZXBvbGxfcHdhaXQgPSBfX19OUl9lcG9sbF9wd2FpdAorY29uc3Qg
X0VUSF9QX0xPQ0FMVEFMSyA9IDB4MDAwOQorY29uc3QgX1BSSWlGQVNUOCA9ICJpIgorY29uc3Qg
X1NFRUtfRU5EID0gMgorY29uc3QgX1RDQV9DSEFJTiA9IDExCitjb25zdCBfU1lTX3RpbWVyX2Rl
bGV0ZSA9IF9fX05SX3RpbWVyX2RlbGV0ZQorY29uc3QgX1JMSU1fSU5GSU5JVFkgPSAweGZmZmZm
ZmZmZmZmZmZmZmYKK2NvbnN0IF9fX09GRl9UX01BVENIRVNfT0ZGNjRfVCA9IDEKK2NvbnN0IF9S
VE5MR1JQX1BIT05FVF9ST1VURSA9IDIyCitjb25zdCBfX0lTT0MxMV9TT1VSQ0UgPSAxCitjb25z
dCBfU0lHWENQVSA9IDI0Citjb25zdCBfUlROX05BVCA9IDEwCitjb25zdCBfSUZMQV9UVU5fR1JP
VVAgPSAyCitjb25zdCBfX19MREJMX01BWF9fID0gMS4xCitjb25zdCBfVUlOVF9MRUFTVDhfTUFY
ID0gKDI1NSkKK2NvbnN0IF9JQ01QNl9EU1RfVU5SRUFDSF9BRERSID0gMworY29uc3QgX1BPU0lY
X0ZBRFZfU0VRVUVOVElBTCA9IDIKK2NvbnN0IF9SVE5fWFJFU09MVkUgPSAxMQorY29uc3QgX3Vu
aXggPSAxCitjb25zdCBfU0laRV9NQVggPSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpCitjb25zdCBf
U1RBX0RFTCA9IDB4MDAyMAorY29uc3QgX01CX0xFTl9NQVggPSAxNgorY29uc3QgX0NJQkFVRCA9
IDAwMjAwMzYwMDAwMAorY29uc3QgX19fY2xvY2tpZF90X2RlZmluZWQgPSAxCitjb25zdCBfX0NT
X1BPU0lYX1Y3X0xQQklHX09GRkJJR19MSU5URkxBR1MgPSAxMTQ3Citjb25zdCBfQUlfTlVNRVJJ
Q0hPU1QgPSAweDAwMDQKK2NvbnN0IF9SRV9EVVBfTUFYID0gKDB4N2ZmZikKK2NvbnN0IF9JRkxB
X1ZGX1JBVEUgPSA2Citjb25zdCBfUFJJWDMyID0gIlgiCitjb25zdCBfSVBUT1NfRUNOX0NFID0g
MHgwMworY29uc3QgX0lGTEFfQlJfUFJJT1JJVFkgPSA2Citjb25zdCBfSVBUT1NfUFJFQ19ORVRD
T05UUk9MID0gX0lQVE9TX0NMQVNTX0NTNworY29uc3QgX19fTlJfZ2V0cnVzYWdlID0gOTgKK2Nv
bnN0IF9OVURfUkVBQ0hBQkxFID0gMHgwMgorY29uc3QgX19fTlJfdXNlbGliID0gMTM0Citjb25z
dCBfRVBPTExXUk5PUk0gPSAyNTYKK2NvbnN0IF9fX0lGTEFfTUFYID0gNTIKK2NvbnN0IF9UQ1Bf
TElOR0VSMiA9IDgKK2NvbnN0IF9SVE5MR1JQX0lQVjRfUk9VVEUgPSA3Citjb25zdCBfX1NDX0lO
VF9NSU4gPSAxMDUKK2NvbnN0IF9FVElNRSA9IDYyCitjb25zdCBfSUZMQV9IU1JfU0VRX05SID0g
NQorY29uc3QgX19QT1NJWF9TWU1MSU5LX01BWCA9IDI1NQorY29uc3QgX0lGTEFfUE9SVF9SRVNQ
T05TRSA9IDcKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1JPVVRFUiA9IDIyCitjb25zdCBfVENBX0hX
X09GRkxPQUQgPSAxMgorY29uc3QgX0lGTEFfSU5FVDZfVE9LRU4gPSA3Citjb25zdCBfVElPQ1BL
VF9GTFVTSFJFQUQgPSAxCitjb25zdCBfU1lTX3NldF90aWRfYWRkcmVzcyA9IF9fX05SX3NldF90
aWRfYWRkcmVzcworY29uc3QgX0IxOTIwMCA9IDAwMDAwMTYKK2NvbnN0IF9JUF9ERUZBVUxUX01V
TFRJQ0FTVF9UVEwgPSAxCitjb25zdCBfX19TSUdfQVRPTUlDX01JTl9fID0gKC1fX19TSUdfQVRP
TUlDX01BWF9fIC0gMSkKK2NvbnN0IF9JRkxBX0JPTkRfTUlOX0xJTktTID0gMTgKK2NvbnN0IF9J
UFBST1RPX1JBVyA9IDI1NQorY29uc3QgX1NZU19nZXRyZXN1aWQgPSBfX19OUl9nZXRyZXN1aWQK
K2NvbnN0IF9SVEFfU1JDID0gMgorY29uc3QgX0lQVjZfUE1UVURJU0NfRE8gPSAyCitjb25zdCBf
UlRfU0NPUEVfTElOSyA9IDI1MworY29uc3QgX1NZU19zY2hlZF95aWVsZCA9IF9fX05SX3NjaGVk
X3lpZWxkCitjb25zdCBfU0FfTk9DTERTVE9QID0gMQorY29uc3QgX05MQV9GX05FU1RFRCA9ICgx
IDw8IDE1KQorY29uc3QgX0VOQVZBSUwgPSAxMTkKK2NvbnN0IF9FVEhfUF9FUlNQQU4yID0gMHgy
MkVCCitjb25zdCBfVElPQ1NFUl9URU1UID0gMHgwMQorY29uc3QgX0lGTEFfQlJQT1JUX01VTFRJ
Q0FTVF9ST1VURVIgPSAyNQorY29uc3QgX09QT1NUID0gMDAwMDAwMQorY29uc3QgX1dfT0sgPSAy
Citjb25zdCBfSVBPUFRfUkEgPSAxNDgKK2NvbnN0IF9FVEhFUlRZUEVfSVBYID0gMHg4MTM3Citj
b25zdCBfUlRNX0dFVE5FSUdIVEJMID0gNjYKK2NvbnN0IF9fU0NfVjZfTFA2NF9PRkY2NCA9IDE3
OAorY29uc3QgX0RFTEFZVElNRVJfTUFYID0gMjE0NzQ4MzY0NworY29uc3QgX1BSX0dFVF9OQU1F
ID0gMTYKK2NvbnN0IF9JRkxBX0JSUE9SVF9DT1NUID0gMworY29uc3QgX1NJT0NHSUZCUiA9IDB4
ODk0MAorY29uc3QgX0lGTEFfTUFDU0VDX0lOQ19TQ0kgPSA5Citjb25zdCBfSU5fT05FU0hPVCA9
IDB4ODAwMDAwMDAKK2NvbnN0IF9TWVNfYWRqdGltZXggPSBfX19OUl9hZGp0aW1leAorY29uc3Qg
X0lMTF9DT1BST0MgPSA3Citjb25zdCBfSVBPUFRfUlIgPSA3Citjb25zdCBfUFJfU1ZFX1NFVF9W
TF9PTkVYRUMgPSAoMSA8PCAxOCkKK2NvbnN0IF9TWVNfcHdyaXRlNjQgPSBfX19OUl9wd3JpdGU2
NAorY29uc3QgX1BSX1NFVF9OQU1FID0gMTUKK2NvbnN0IF9WUVVJVCA9IDEKK2NvbnN0IF9GU19Y
RkxBR19FWFRTWklOSEVSSVQgPSAweDAwMDAxMDAwCitjb25zdCBfSUZMQV9QT1JUX0lOU1RBTkNF
X1VVSUQgPSA0Citjb25zdCBfSVBUT1NfQ0xBU1NfQ1MzID0gMHg2MAorY29uc3QgX19fUFRSRElG
Rl9XSURUSF9fID0gNjQKK2NvbnN0IF9FVEhfUF9FRFNBID0gMHhEQURBCitjb25zdCBfU1lTX3Nl
dGl0aW1lciA9IF9fX05SX3NldGl0aW1lcgorY29uc3QgX19fRkxUMzJYX0VQU0lMT05fXyA9IDEu
MQorY29uc3QgX19fRkxUMTI4X01JTl9FWFBfXyA9ICgtMTYzODEpCitjb25zdCBfX19OUl9zZXRm
c3VpZCA9IDEyMgorY29uc3QgX0lQVE9TX0NMQVNTX0NTNiA9IDB4YzAKK2NvbnN0IF9JRkxBX0JS
UE9SVF9CUklER0VfSUQgPSAxNAorY29uc3QgX1JUTV9ERUxORVRDT05GID0gODEKK2NvbnN0IF9J
Q01QNl9USU1FX0VYQ0VFREVEID0gMworY29uc3QgX19fTlJfc2V0ZnNnaWQgPSAxMjMKK2NvbnN0
IF9TSU9DREVMRExDSSA9IDB4ODk4MQorY29uc3QgX0lQUE9SVF9UVFlMSU5LID0gODcKK2NvbnN0
IF9TSU9DR0FSUCA9IDB4ODk1NAorY29uc3QgX1JURl9ERUZBVUxUID0gMHgwMDAxMDAwMAorY29u
c3QgX1NZU19tcV9vcGVuID0gX19fTlJfbXFfb3BlbgorY29uc3QgX1NZU19jbG9ja19nZXRyZXMg
PSBfX19OUl9jbG9ja19nZXRyZXMKK2NvbnN0IF9NUV9QUklPX01BWCA9IDMyNzY4Citjb25zdCBf
X1NDX0NIQVJfTUFYID0gMTAyCitjb25zdCBfSVBWNl9BRERfTUVNQkVSU0hJUCA9IF9JUFY2X0pP
SU5fR1JPVVAKK2NvbnN0IF9fU1RBVF9WRVJfTElOVVggPSAxCitjb25zdCBfSUZMQV9CUlBPUlRf
TEVBUk5JTkdfU1lOQyA9IDExCitjb25zdCBfRU5PVE5BTSA9IDExOAorY29uc3QgX1RJT0NQS1Rf
RkxVU0hXUklURSA9IDIKK2NvbnN0IF9NQVBfSFVHRVRMQiA9IDB4NDAwMDAKK2NvbnN0IF9IQVZF
X0ZBQ0NFU1NBVCA9IDEKK2NvbnN0IF9fX0RCTF9NSU5fRVhQX18gPSAoLTEwMjEpCitjb25zdCBf
WDg2X0NSNF9QQ0lERV9CSVQgPSAxNworY29uc3QgX1NDTmlMRUFTVDggPSAiaGhpIgorY29uc3Qg
X0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzCitjb25zdCBfSVBQT1JUX0ZJTkdFUiA9IDc5Citjb25z
dCBfUE9SVF9VVUlEX01BWCA9IDE2Citjb25zdCBfTE9OR19MT05HX01BWCA9IF9fX0xPTkdfTE9O
R19NQVhfXworY29uc3QgX0lOVDhfTUlOID0gKC0xMjgpCitjb25zdCBfX19OUl93cml0ZSA9IDEK
K2NvbnN0IF9fX1NfSUZCTEsgPSAwMDYwMDAwCitjb25zdCBfU0NIRURfRklGTyA9IDEKK2NvbnN0
IF9fUEFUSF9IRVFVSVYgPSAiL2V0Yy9ob3N0cy5lcXVpdiIKK2NvbnN0IF9CUEZfTVNIID0gMHhh
MAorY29uc3QgX19QQ19TWU5DX0lPID0gOQorY29uc3QgX19TQ19BRFZJU09SWV9JTkZPID0gMTMy
Citjb25zdCBfX19OUl9yZWN2bXNnID0gNDcKK2NvbnN0IF9GQVNZTkMgPSBfT19BU1lOQworY29u
c3QgX1JUTUdSUF9JUFY2X01ST1VURSA9IDB4MjAwCitjb25zdCBfU1lTX2lvX3BnZXRldmVudHMg
PSBfX19OUl9pb19wZ2V0ZXZlbnRzCitjb25zdCBfSEFWRV9TWU5DX0JPT0xfQ09NUEFSRV9BTkRf
U1dBUF80ID0gMQorY29uc3QgX0VQT0xMX0NUTF9BREQgPSAxCitjb25zdCBfVVNIUlRfTUFYID0g
KF9TSFJUX01BWCAqIDIgKyAxKQorY29uc3QgX19TQ19UUkFDRSA9IDE4MQorY29uc3QgX1BUUkFD
RV9TSU5HTEVTVEVQID0gOQorY29uc3QgX0lGTEFfTElOSyA9IDUKK2NvbnN0IF9ORFRQQV9SRVRS
QU5TX1RJTUUgPSA1Citjb25zdCBfSEFWRV9TWU5DX0JPT0xfQ09NUEFSRV9BTkRfU1dBUF84ID0g
MQorY29uc3QgX1JUTV9HRVRURklMVEVSID0gNDYKK2NvbnN0IF9TWVNfbXNncmN2ID0gX19fTlJf
bXNncmN2Citjb25zdCBfX19OUl9tc2djdGwgPSA3MQorY29uc3QgX0hBVkVfUkVOQU1FQVQgPSAx
Citjb25zdCBfSUZGX05BUElfRlJBR1MgPSAweDAwMjAKK2NvbnN0IF9JRkxBX1hEUF9BVFRBQ0hF
RCA9IDIKK2NvbnN0IF9TWVNfZXBvbGxfY3JlYXRlID0gX19fTlJfZXBvbGxfY3JlYXRlCitjb25z
dCBfSUZMQV9WRl9TVEFUU19CUk9BRENBU1QgPSA0Citjb25zdCBfVENQX01ENVNJR19GTEFHX1BS
RUZJWCA9IDEKK2NvbnN0IF9JRkxBX0JPTkRfQURfVVNFUl9QT1JUX0tFWSA9IDI1Citjb25zdCBf
QVJQSFJEX0FEQVBUID0gMjY0Citjb25zdCBfVFVOQVRUQUNIRklMVEVSX3ZhbCA9IDEwNzQ4MTIx
MTcKK2NvbnN0IF9UQ1BfTUFYX1dJTlNISUZUID0gMTQKK2NvbnN0IF9JUFBST1RPX0lHTVAgPSAy
Citjb25zdCBfSVBfTUFYX01FTUJFUlNISVBTID0gMjAKK2NvbnN0IF9JRkxBX0JSUE9SVF9CQUNL
VVBfUE9SVCA9IDM0Citjb25zdCBfUlRNR1JQX0RFQ25ldF9JRkFERFIgPSAweDEwMDAKK2NvbnN0
IF9NQURWX0tFRVBPTkZPUksgPSAxOQorY29uc3QgX0FGX0FYMjUgPSBfUEZfQVgyNQorY29uc3Qg
X0lOVFBUUl9NQVggPSAoOTIyMzM3MjAzNjg1NDc3NTgwNykKK2NvbnN0IF9BUlBIUkRfRVVJNjQg
PSAyNworY29uc3QgX1JUQV9HQVRFV0FZID0gNQorY29uc3QgX1NDTnUxNiA9ICJodSIKK2NvbnN0
IF9fX05SX3RydW5jYXRlID0gNzYKK2NvbnN0IF9fX05SX2dldHJsaW1pdCA9IDk3Citjb25zdCBf
X1BPU0lYX0NIT1dOX1JFU1RSSUNURUQgPSAwCitjb25zdCBfX19OUl9wcmVhZDY0ID0gMTcKK2Nv
bnN0IF9QUl9TRVRfTU1fU1RBUlRfQlJLID0gNgorY29uc3QgX1JUQVhfTE9DSyA9IDEKK2NvbnN0
IF9TWVNfZ2V0ZGVudHMgPSBfX19OUl9nZXRkZW50cworY29uc3QgX1NPX0RPTUFJTiA9IDM5Citj
b25zdCBfU19JU1ZUWCA9IF9fX1NfSVNWVFgKK2NvbnN0IF9QVFJBQ0VfUE9LRURBVEEgPSA1Citj
b25zdCBfUEFDS0VUX09SSUdERVYgPSA5Citjb25zdCBfSVBPUFRfVFMgPSA2OAorY29uc3QgX19f
SUZMQV9PRkZMT0FEX1hTVEFUU19NQVggPSAyCitjb25zdCBfX1NDX1NIUlRfTUFYID0gMTEzCitj
b25zdCBfUkVHX1JJUCA9IDE2Citjb25zdCBfX19GTFQ2NFhfTUFYX18gPSAxLjEKK2NvbnN0IF9J
RkZfQUxMTVVMVEkgPSA1MTIKK2NvbnN0IF9TQV9TSUdJTkZPID0gNAorY29uc3QgX1JFR19DU0dT
RlMgPSAxOAorY29uc3QgX0lGTEFfVlhMQU5fR0JQID0gMjMKK2NvbnN0IF9fVElNRV9IID0gMQor
Y29uc3QgX1NZU19nZXR1aWQgPSBfX19OUl9nZXR1aWQKK2NvbnN0IF9JUFY2X1BNVFVESVNDX1dB
TlQgPSAxCitjb25zdCBfX1NDXzJfUEJTX01FU1NBR0UgPSAxNzEKK2NvbnN0IF9fX05SX21lbWJh
cnJpZXIgPSAzMjQKK2NvbnN0IF9TWVNfd2FpdDQgPSBfX19OUl93YWl0NAorY29uc3QgX0xPTkdf
V0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX0JQRl9LID0gMHgwMAorY29uc3QgX0VOT1RVTklR
ID0gNzYKK2NvbnN0IF9ORF9PUFRfSE9NRV9BR0VOVF9JTkZPID0gOAorY29uc3QgX05JX05BTUVS
RVFEID0gOAorY29uc3QgX19fcGljX18gPSAyCitjb25zdCBfTkxNX0ZfRFVNUF9JTlRSID0gMHgx
MAorY29uc3QgX0ZBTExPQ19GTF9VTlNIQVJFX1JBTkdFID0gMHg0MAorY29uc3QgX0xJTlVYX1JF
Qk9PVF9DTURfUE9XRVJfT0ZGID0gMHg0MzIxRkVEQworY29uc3QgX19fSUZMQV9WUkZfTUFYID0g
MgorY29uc3QgX0lGTEFfSU5FVDZfQUREUl9HRU5fTU9ERSA9IDgKK2NvbnN0IF9FTk9TUiA9IDYz
Citjb25zdCBfUFJfR0VUX1RJTUlORyA9IDEzCitjb25zdCBfX1BPU0lYX0NfU09VUkNFID0gMjAw
ODA5Citjb25zdCBfVFVOU0VUVFhGSUxURVJfdmFsID0gMTA3NDAyNTY4MQorY29uc3QgX1BSX0NB
UF9BTUJJRU5UX0lTX1NFVCA9IDEKK2NvbnN0IF9JVElNRVJfUFJPRiA9IDIKK2NvbnN0IF9fX1NJ
WkVPRl9QVEhSRUFEX01VVEVYQVRUUl9UID0gNAorY29uc3QgX1NZU19uYW1lX3RvX2hhbmRsZV9h
dCA9IF9fX05SX25hbWVfdG9faGFuZGxlX2F0Citjb25zdCBfQjU3NjAwMCA9IDAwMTAwMDYKK2Nv
bnN0IF9TRUVLX1NFVCA9IDAKK2NvbnN0IF9CUEZfT1IgPSAweDQwCitjb25zdCBfUEZfUk9VVEUg
PSBfUEZfTkVUTElOSworY29uc3QgX19fRkxUNjRfTUlOX0VYUF9fID0gKC0xMDIxKQorY29uc3Qg
X0lOX01BU0tfQUREID0gMHgyMDAwMDAwMAorY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkYz
Ml9DRkxBR1MgPSAxMTE2Citjb25zdCBfVENQX01BWFNFRyA9IDIKK2NvbnN0IF9OX0lSREEgPSAx
MQorY29uc3QgX0lQVjZfUlRIRFJfU1RSSUNUID0gMQorY29uc3QgX1BBQ0tFVF9SRUNWX09VVFBV
VCA9IDMKK2NvbnN0IF9NQURWX0RPTlRORUVEID0gNAorY29uc3QgX05EX1JFRElSRUNUID0gMTM3
Citjb25zdCBfX19zaWdpbmZvX3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9fX0dDQ19BVE9NSUNfQ0hB
UjE2X1RfTE9DS19GUkVFID0gMgorY29uc3QgX1JUQVhfUVVJQ0tBQ0sgPSAxNQorY29uc3QgX19f
RkxUMzJfTUFYXzEwX0VYUF9fID0gMzgKK2NvbnN0IF9CUEZfTVVMID0gMHgyMAorY29uc3QgX1NZ
U19lcG9sbF93YWl0X29sZCA9IF9fX05SX2Vwb2xsX3dhaXRfb2xkCitjb25zdCBfX19JRkxBX0lQ
VkxBTl9NQVggPSAzCitjb25zdCBfSVBfUE1UVURJU0NfUFJPQkUgPSAzCitjb25zdCBfU1lTX3N5
c2ZzID0gX19fTlJfc3lzZnMKK2NvbnN0IF9fX09QVElNSVpFX18gPSAxCitjb25zdCBfSVBUT1Nf
UFJFQ19JTlRFUk5FVENPTlRST0wgPSBfSVBUT1NfQ0xBU1NfQ1M2Citjb25zdCBfSEFWRV9BU0lO
TCA9IDEKK2NvbnN0IF9JUFY2X1VOSUNBU1RfSUYgPSA3NgorY29uc3QgX05MTV9GX0FUT01JQyA9
IDB4NDAwCitjb25zdCBfRlNfWEZMQUdfTk9TWU1MSU5LUyA9IDB4MDAwMDA0MDAKK2NvbnN0IF9G
X0xPQ0sgPSAxCitjb25zdCBfSUNNUDZfUEFSQU1QUk9CX0hFQURFUiA9IDAKK2NvbnN0IF9FVEhf
UF9JRUVFODAyMTU0ID0gMHgwMEY2Citjb25zdCBfU0lPQ0dJRkhXQUREUiA9IDB4ODkyNworY29u
c3QgX1NZU19zZW1nZXQgPSBfX19OUl9zZW1nZXQKK2NvbnN0IF9fX1BUSFJFQURfTVVURVhfTlVT
RVJTX0FGVEVSX0tJTkQgPSAwCitjb25zdCBfUFJfU0VUX01NX01BUF9TSVpFID0gMTUKK2NvbnN0
IF9SVE5fQkxBQ0tIT0xFID0gNgorY29uc3QgX1NZU19wa2V5X2FsbG9jID0gX19fTlJfcGtleV9h
bGxvYworY29uc3QgX0FGX0lORVQ2ID0gX1BGX0lORVQ2Citjb25zdCBfTkxBX0hEUkxFTl92YWwg
PSA0Citjb25zdCBfSEFWRV9SRU1PVkVYQVRUUiA9IDEKK2NvbnN0IF9JQ01QNl9SUl9GTEFHU19T
UEVDU0lURSA9IDB4MTAKK2NvbnN0IF9fX05SX3NldG5zID0gMzA4Citjb25zdCBfX19XTk9USFJF
QUQgPSAweDIwMDAwMDAwCitjb25zdCBfRVRIX1BfTE9PUCA9IDB4MDA2MAorY29uc3QgX1ZFT0wg
PSAxMQorY29uc3QgX01TX05PREVWID0gNAorY29uc3QgX1NPX1pFUk9DT1BZID0gNjAKK2NvbnN0
IF9fX05SX2dldHJhbmRvbSA9IDMxOAorY29uc3QgX1JURl9BTExPTkxJTksgPSAweDAwMDIwMDAw
Citjb25zdCBfUlROTEdSUF9ERUNuZXRfUlVMRSA9IDE2Citjb25zdCBfX19OUl9tYmluZCA9IDIz
NworY29uc3QgX01TX0tFUk5NT1VOVCA9IDQxOTQzMDQKK2NvbnN0IF9JVUNMQyA9IDAwMDEwMDAK
K2NvbnN0IF9IQVZFX1NFTV9USU1FRFdBSVQgPSAxCitjb25zdCBfX19QUkVGSVhfTUFYID0gMwor
Y29uc3QgX01BUF9TVEFDSyA9IDB4MjAwMDAKK2NvbnN0IF9TWVNfcGVyc29uYWxpdHkgPSBfX19O
Ul9wZXJzb25hbGl0eQorY29uc3QgX19QT1NJWF9NT05PVE9OSUNfQ0xPQ0sgPSAwCitjb25zdCBf
VVRJTUVfT01JVCA9ICgoMSA8PCAzMCkgLSAyKQorY29uc3QgX1BSSW9MRUFTVDggPSAibyIKK2Nv
bnN0IF9QUl9GUF9FWENfSU5WID0gMHgxMDAwMDAKK2NvbnN0IF9FVEhFUlRZUEVfVkxBTiA9IDB4
ODEwMAorY29uc3QgX1JUUFJPVF9HQVRFRCA9IDgKK2NvbnN0IF9NU19NT1ZFID0gODE5MgorY29u
c3QgX0lGTEFfQlJQT1JUX0RFU0lHTkFURURfUE9SVCA9IDE1Citjb25zdCBfUFJfU0VUX1RTQyA9
IDI2Citjb25zdCBfX1NURENfUFJFREVGX0ggPSAxCitjb25zdCBfSUZGX0FVVE9NRURJQSA9IDE2
Mzg0Citjb25zdCBfX19VU0VfRk9SVElGWV9MRVZFTCA9IDAKK2NvbnN0IF9FQkZPTlQgPSA1OQor
Y29uc3QgX19fTkRUQV9NQVggPSAxMAorY29uc3QgX19fU0laRU9GX0xPTkdfTE9OR19fID0gOAor
Y29uc3QgX0lQVjZfUE1UVURJU0NfRE9OVCA9IDAKK2NvbnN0IF9JUFZMQU5fTU9ERV9MM1MgPSAy
Citjb25zdCBfSUZMQV9UVU5fVFlQRSA9IDMKK2NvbnN0IF9PX0NMT0VYRUMgPSBfX19PX0NMT0VY
RUMKK2NvbnN0IF9TS0ZfQURfTUFSSyA9IDIwCitjb25zdCBfX19GTFQ2NFhfREVOT1JNX01JTl9f
ID0gMS4xCitjb25zdCBfSUZGX1NMQVZFID0gMjA0OAorY29uc3QgX0RUX1JFRyA9IDgKK2NvbnN0
IF9GQUxMT0NfRkxfUFVOQ0hfSE9MRSA9IDB4MDIKK2NvbnN0IF9BUlBIUkRfTkVUUk9NID0gMAor
Y29uc3QgX19fTERCTF9ESUdfXyA9IDE4Citjb25zdCBfX1NDX1VTRVJfR1JPVVBTID0gMTY2Citj
b25zdCBfX1VOSVNURF9IID0gMQorY29uc3QgX1RDUF9NQVhXSU4gPSA2NTUzNQorY29uc3QgX0ZT
X05PRFVNUF9GTCA9IDB4MDAwMDAwNDAKK2NvbnN0IF9USU9DU0xDS1RSTUlPUyA9IDB4NTQ1Nwor
Y29uc3QgX19fTlJfZmluaXRfbW9kdWxlID0gMzEzCitjb25zdCBfU0tGX0FEX01BWCA9IDY0Citj
b25zdCBfUkVHX1IxNCA9IDYKK2NvbnN0IF9GQUxMT0NfRkxfWkVST19SQU5HRSA9IDB4MTAKK2Nv
bnN0IF9JRkxBX0JSX0dDX1RJTUVSID0gMTkKK2NvbnN0IF9fX05SX2ZhZHZpc2U2NCA9IDIyMQor
Y29uc3QgX09fTkRFTEFZID0gX09fTk9OQkxPQ0sKK2NvbnN0IF9FUE9MTFBSSSA9IDIKK2NvbnN0
IF9FQUlfRkFJTCA9IC00Citjb25zdCBfX19nbGliY19jOTlfZmxleGFycl9hdmFpbGFibGUgPSAx
Citjb25zdCBfX19OUl9pb19zdWJtaXQgPSAyMDkKK2NvbnN0IF9SVEFfVFRMX1BST1BBR0FURSA9
IDI2Citjb25zdCBfTl9TTVNCTE9DSyA9IDEyCitjb25zdCBfX1BPU0lYX1RIUkVBRF9DUFVUSU1F
ID0gMAorY29uc3QgX1RDUElfT1BUX1NBQ0sgPSAyCitjb25zdCBfVElPQ0dFVEQgPSAweDU0MjQK
K2NvbnN0IF9DTE9ORV9TWVNWU0VNID0gMHgwMDA0MDAwMAorY29uc3QgX05FVExJTktfU0VMSU5V
WCA9IDcKK2NvbnN0IF9DTE9DS19USFJFQURfQ1BVVElNRV9JRCA9IDMKK2NvbnN0IF9fX05SX2Ns
b2NrX25hbm9zbGVlcCA9IDIzMAorY29uc3QgX19TQ19DSEFSX0JJVCA9IDEwMQorY29uc3QgX1NB
X1JFU0VUSEFORCA9IDB4ODAwMDAwMDAKK2NvbnN0IF9BREpfU1RBVFVTID0gMHgwMDEwCitjb25z
dCBfUFJfU0VUX1BUUkFDRVIgPSAweDU5NjE2ZDYxCitjb25zdCBfUFJfU0VUX01NX0JSSyA9IDcK
K2NvbnN0IF9fX0lMUDMyX09GRkJJR19DRkxBR1MgPSAiLW0zMiAtRF9MQVJHRUZJTEVfU09VUkNF
IC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQiCitjb25zdCBfVENQX0ZBU1RPUEVOX0tFWSA9IDMzCitj
b25zdCBfX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUyA9IDIyCitjb25zdCBfUlRNR1JQX0lQVjZf
Uk9VVEUgPSAweDQwMAorY29uc3QgX0lGTEFfQlJQT1JUX1BSSU9SSVRZID0gMgorY29uc3QgX0Iz
MDAwMDAwID0gMDAxMDAxNQorY29uc3QgX01TX01HQ19WQUwgPSAweEMwRUQwMDAwCitjb25zdCBf
QURKX0VTVEVSUk9SID0gMHgwMDA4Citjb25zdCBfUlROSF9GX0xJTktET1dOID0gMTYKK2NvbnN0
IF9FVEhfUF9ETkFfREwgPSAweDYwMDEKK2NvbnN0IF9QUl9TRVRfVElNSU5HID0gMTQKK2NvbnN0
IF9ORVRMSU5LX0lTQ1NJID0gOAorY29uc3QgX19fTkRBX01BWCA9IDEyCitjb25zdCBfX19OUl9z
ZXRncm91cHMgPSAxMTYKK2NvbnN0IF9fWE9QRU5fTElNX0ggPSAxCitjb25zdCBfX19PUkRFUl9C
SUdfRU5ESUFOX18gPSA0MzIxCitjb25zdCBfQVJQSFJEX1gyNSA9IDI3MQorY29uc3QgX0xMT05H
X01BWCA9IF9fX0xPTkdfTE9OR19NQVhfXworY29uc3QgX19DU19MRlNfQ0ZMQUdTID0gMTAwMAor
Y29uc3QgX19TWVNDQUxMX0ggPSAxCitjb25zdCBfQVJQSFJEX0VDT05FVCA9IDc4MgorY29uc3Qg
X19fR05VQ19TVERDX0lOTElORV9fID0gMQorY29uc3QgX01TX1BSSVZBVEUgPSAyNjIxNDQKK2Nv
bnN0IF9NQUNWTEFOX01BQ0FERFJfREVMID0gMQorY29uc3QgX1NDSEVEX1JFU0VUX09OX0ZPUksg
PSAweDQwMDAwMDAwCitjb25zdCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNFX1NVQ0NFU1MgPSAyNTYK
K2NvbnN0IF9QUl9HRVRfRFVNUEFCTEUgPSAzCitjb25zdCBfTkRBX1VOU1BFQyA9IDAKK2NvbnN0
IF9fU0NfUkVfRFVQX01BWCA9IDQ0Citjb25zdCBfSE9TVF9OT1RfRk9VTkQgPSAxCitjb25zdCBf
U1lTX3ByZWFkdiA9IF9fX05SX3ByZWFkdgorY29uc3QgX01PRF9NQVhFUlJPUiA9IF9BREpfTUFY
RVJST1IKK2NvbnN0IF9PX0RJUkVDVCA9IF9fX09fRElSRUNUCitjb25zdCBfSUZMQV9CT05EX0FM
TF9TTEFWRVNfQUNUSVZFID0gMTcKK2NvbnN0IF9fU0NfUElJX0lOVEVSTkVUID0gNTYKK2NvbnN0
IF9UVU5TRVRTTkRCVUZfdmFsID0gMTA3NDAyNTY4NAorY29uc3QgX1JUTkxHUlBfSVBWNl9JRkFE
RFIgPSA5Citjb25zdCBfU1RBVFhfTkxJTksgPSAweDAwMDQKK2NvbnN0IF9fX0lGTEFfUE9SVF9N
QVggPSA4Citjb25zdCBfQlVTX0FEUkVSUiA9IDIKK2NvbnN0IF9SVE1fTkVXQUREUiA9IDIwCitj
b25zdCBfVElPQ01JV0FJVCA9IDB4NTQ1QworY29uc3QgX1JUTV9ERUxOU0lEID0gODkKK2NvbnN0
IF9IQVZFX1NZU19TWVNJTkZPX0ggPSAxCitjb25zdCBfX19OUl9zdGF0ID0gNAorY29uc3QgX1NQ
TElDRV9GX01PUkUgPSA0Citjb25zdCBfSUZBX0ZfTUNBVVRPSk9JTiA9IDB4NDAwCitjb25zdCBf
U1lTX2lvcHJpb19nZXQgPSBfX19OUl9pb3ByaW9fZ2V0Citjb25zdCBfSEFWRV9ETF9JVEVSQVRF
X1BIRFIgPSAxCitjb25zdCBfX19JRkxBX1ZGX1NUQVRTX01BWCA9IDkKK2NvbnN0IF9TWVNfaW5p
dF9tb2R1bGUgPSBfX19OUl9pbml0X21vZHVsZQorY29uc3QgX1JUTV9HRVRBTllDQVNUID0gNjIK
K2NvbnN0IF9fUE9TSVhfTVFfT1BFTl9NQVggPSA4Citjb25zdCBfU1lTX2xnZXR4YXR0ciA9IF9f
X05SX2xnZXR4YXR0cgorY29uc3QgX1NZU19ybWRpciA9IF9fX05SX3JtZGlyCitjb25zdCBfRVRI
RVJUWVBFX0FBUlAgPSAweDgwRjMKK2NvbnN0IF9QQUNLQUdFX1RBUk5BTUUgPSAibGliZ28iCitj
b25zdCBfSU5UX0xFQVNUOF9NQVggPSAoMTI3KQorY29uc3QgX0lQVE9TX1BSRUNfUk9VVElORSA9
IF9JUFRPU19DTEFTU19DUzAKK2NvbnN0IF9JRkFfRl9PUFRJTUlTVElDID0gMHgwNAorY29uc3Qg
X05EVFBBX1VOU1BFQyA9IDAKK2NvbnN0IF9fX05SX3BzZWxlY3Q2ID0gMjcwCitjb25zdCBfRl9H
RVRTSUcgPSBfX19GX0dFVFNJRworY29uc3QgX1NPX1dJRklfU1RBVFVTID0gNDEKK2NvbnN0IF9T
X0lXT1RIID0gKF9TX0lXR1JQID4+IDMpCitjb25zdCBfSU5QQ0sgPSAwMDAwMDIwCitjb25zdCBf
TkRUUEFfQVBQX1BST0JFUyA9IDkKK2NvbnN0IF9fX09fTEFSR0VGSUxFID0gMAorY29uc3QgX1BP
UlRfVkRQX1JFU1BPTlNFX1ZUSURfVkVSU0lPTl9WSU9BTFRJT04gPSA1Citjb25zdCBfX19OUl9z
ZXR4YXR0ciA9IDE4OAorY29uc3QgX19fRkxUMzJfSEFTX0lORklOSVRZX18gPSAxCitjb25zdCBf
X0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTID0gMTEyOQorY29uc3QgX1BSX0dFVF9U
U0MgPSAyNQorY29uc3QgX1JUTV9HRVRORUlHSCA9IDMwCitjb25zdCBfUFRSQUNFX1NFVE9QVElP
TlMgPSAxNjg5NgorY29uc3QgX19fTlJfZXBvbGxfY3JlYXRlID0gMjEzCitjb25zdCBfSVBUT1Nf
UkVMSUFCSUxJVFkgPSAweDA0Citjb25zdCBfQVJQSFJEX0ZSQUQgPSA3NzAKK2NvbnN0IF9TSU9D
U0lGQlJEQUREUiA9IDB4ODkxYQorY29uc3QgX19fVUlOVFBUUl9NQVhfXyA9IDB4ZmZmZmZmZmZm
ZmZmZmZmZgorY29uc3QgX19fTlJfY2hvd24gPSA5MgorY29uc3QgX19fTlJfZmFub3RpZnlfaW5p
dCA9IDMwMAorY29uc3QgX0FUX05PX0FVVE9NT1VOVCA9IDB4ODAwCitjb25zdCBfX19OUl9lcG9s
bF9jcmVhdGUxID0gMjkxCitjb25zdCBfU1lTX3NldHJlc2dpZCA9IF9fX05SX3NldHJlc2dpZAor
Y29uc3QgX05fUFJPRklCVVNfRkRMID0gMTAKK2NvbnN0IF9CUEZfWE9SID0gMHhhMAorY29uc3Qg
X0lDTVA2X1JSX0ZMQUdTX1JFUVJFU1VMVCA9IDB4NDAKK2NvbnN0IF9JRkxBX0lQT0lCX01PREUg
PSAyCitjb25zdCBfTUFQX1NIQVJFRF9WQUxJREFURSA9IDB4MDMKK2NvbnN0IF9TWVNfcXVlcnlf
bW9kdWxlID0gX19fTlJfcXVlcnlfbW9kdWxlCitjb25zdCBfU1lTX3RpbWVyX2dldG92ZXJydW4g
PSBfX19OUl90aW1lcl9nZXRvdmVycnVuCitjb25zdCBfX19OUl9mcmVtb3ZleGF0dHIgPSAxOTkK
K2NvbnN0IF9TSVpFX1dJRFRIID0gX19fV09SRFNJWkUKK2NvbnN0IF9JRkFfRl9TRUNPTkRBUlkg
PSAweDAxCitjb25zdCBfX1NDX0pPQl9DT05UUk9MID0gNworY29uc3QgX19fTlJfbW92ZV9wYWdl
cyA9IDI3OQorY29uc3QgX0lGTEFfQ0FSUklFUl9DSEFOR0VTID0gMzUKK2NvbnN0IF9JTkVUNl9B
RERSU1RSTEVOID0gNDYKK2NvbnN0IF9JRkxBX0lQT0lCX1BLRVkgPSAxCitjb25zdCBfSVBQUk9U
T19EQ0NQID0gMzMKK2NvbnN0IF9TX0lSR1JQID0gKF9TX0lSVVNSID4+IDMpCitjb25zdCBfU09M
X0lSREEgPSAyNjYKK2NvbnN0IF9IQVZFX1VOU0hBUkUgPSAxCitjb25zdCBfU1RBVFhfQVRUUl9J
TU1VVEFCTEUgPSAweDAwMTAKK2NvbnN0IF9fU0NfRlNZTkMgPSAxNQorY29uc3QgX19fTlJfbGlz
dGVuID0gNTAKK2NvbnN0IF9TQ054TEVBU1QxNiA9ICJoeCIKK2NvbnN0IF9JRkxBX01BQ1NFQ19Q
QUQgPSAxNAorY29uc3QgX0FJX0NBTk9OSUROID0gMHgwMDgwCitjb25zdCBfUFJfTUNFX0tJTExf
R0VUID0gMzQKK2NvbnN0IF9UVU5fRl9DU1VNID0gMHgwMQorY29uc3QgX19fRkxUMzJYX01BWF9F
WFBfXyA9IDEwMjQKK2NvbnN0IF9BRl9QQUNLRVQgPSBfUEZfUEFDS0VUCitjb25zdCBfSUZMQV9C
UlBPUlRfTU9ERSA9IDQKK2NvbnN0IF9QQUNLRVRfTE9TUyA9IDE0Citjb25zdCBfV0NIQVJfV0lE
VEggPSAzMgorY29uc3QgX1NPTF9ORVRCRVVJID0gMjY3Citjb25zdCBfX19OUl9mZ2V0eGF0dHIg
PSAxOTMKK2NvbnN0IF9fU0NfWEJTNV9JTFAzMl9PRkYzMiA9IDEyNQorY29uc3QgX1RDUF9RVUlD
S0FDSyA9IDEyCitjb25zdCBfT19UTVBGSUxFID0gX19fT19UTVBGSUxFCitjb25zdCBfRUZCSUcg
PSAyNworY29uc3QgX19TQ18yX0NfQklORCA9IDQ3Citjb25zdCBfSVBUT1NfQ0xBU1NfQ1MwID0g
MHgwMAorY29uc3QgX0lQVE9TX0NMQVNTX0NTMSA9IDB4MjAKK2NvbnN0IF9JUFRPU19DTEFTU19D
UzIgPSAweDQwCitjb25zdCBfU1lTX2ZzeW5jID0gX19fTlJfZnN5bmMKK2NvbnN0IF9JUFRPU19D
TEFTU19DUzQgPSAweDgwCitjb25zdCBfSVBUT1NfQ0xBU1NfQ1M1ID0gMHhhMAorY29uc3QgX19J
T0NfRElSU0hJRlQgPSAoX19JT0NfU0laRVNISUZUK19fSU9DX1NJWkVCSVRTKQorY29uc3QgX0lQ
VE9TX0NMQVNTX0NTNyA9IDB4ZTAKK2NvbnN0IF9fX0ZMVDY0WF9ESUdfXyA9IDE4Citjb25zdCBf
VENQX0ZBU1RPUEVOX05PX0NPT0tJRSA9IDM0Citjb25zdCBfTElOVVhfUkVCT09UX01BR0lDMkEg
PSA4NTA3MjI3OAorY29uc3QgX1BSX01DRV9LSUxMX0NMRUFSID0gMAorY29uc3QgX1BUUkFDRV9P
X01BU0sgPSAzMTQ1OTgzCitjb25zdCBfRVhERVYgPSAxOAorY29uc3QgX05VRF9JTkNPTVBMRVRF
ID0gMHgwMQorY29uc3QgX0FGX0tFWSA9IF9QRl9LRVkKK2NvbnN0IF9YODZfQ1IzX1BDRF9CSVQg
PSA0Citjb25zdCBfUFRSQUNFX1NFVFNJR0lORk8gPSAxNjg5OQorY29uc3QgX0VMM0hMVCA9IDQ2
Citjb25zdCBfU1lTX2Zhbm90aWZ5X21hcmsgPSBfX19OUl9mYW5vdGlmeV9tYXJrCitjb25zdCBf
X0JJVFNfRVJSTk9fSCA9IDEKK2NvbnN0IF9fX05SX3RpbWVyX2dldG92ZXJydW4gPSAyMjUKK2Nv
bnN0IF9JUFY2X1RDTEFTUyA9IDY3Citjb25zdCBfTkRUQV9QQVJNUyA9IDYKK2NvbnN0IF9BRl9Y
MjUgPSBfUEZfWDI1Citjb25zdCBfQlNETFkgPSAwMDIwMDAwCitjb25zdCBfTVNHX1BST1hZID0g
MTYKK2NvbnN0IF9JRkxBX01BQ1NFQ19VTlNQRUMgPSAwCitjb25zdCBfX19OUl9hZnNfc3lzY2Fs
bCA9IDE4MworY29uc3QgX01GRF9DTE9FWEVDID0gMQorY29uc3QgX19fVUlOVF9GQVNUOF9NQVhf
XyA9IDB4ZmYKK2NvbnN0IF9TVEFUWF9TSVpFID0gMHgwMjAwCitjb25zdCBfX1NDX0NIQVJfTUlO
ID0gMTAzCitjb25zdCBfRlNfQ09NUFJfRkwgPSAweDAwMDAwMDA0Citjb25zdCBfSUNNUDZfUlJf
UkVTVUxUX0ZMQUdTX09PQiA9IDB4MDIwMAorY29uc3QgX1NDTV9USU1FU1RBTVBJTkdfUEtUSU5G
TyA9IDU4Citjb25zdCBfVkVPRiA9IDQKK2NvbnN0IF9fX05SX21xX29wZW4gPSAyNDAKK2NvbnN0
IF9JRkZfTUFTVEVSID0gMTAyNAorY29uc3QgX1BUUkFDRV9TSU5HTEVCTE9DSyA9IDMzCitjb25z
dCBfU1lTX2dldHRpbWVvZmRheSA9IF9fX05SX2dldHRpbWVvZmRheQorY29uc3QgX19fTlJfYWNj
ZXB0ID0gNDMKK2NvbnN0IF9fUE9TSVhfTUVTU0FHRV9QQVNTSU5HID0gMjAwODA5Citjb25zdCBf
X19QVFJESUZGX01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfU0lfS0VSTkVMID0g
MTI4Citjb25zdCBfX1NDX0JDX0JBU0VfTUFYID0gMzYKK2NvbnN0IF9UVU5TRVRMSU5LX3ZhbCA9
IDEwNzQwMjU2NzcKK2NvbnN0IF9TWVNfc3luY19maWxlX3JhbmdlID0gX19fTlJfc3luY19maWxl
X3JhbmdlCitjb25zdCBfQVJQSFJEX0NTTElQID0gMjU3Citjb25zdCBfUFJfRlBfRVhDX09WRiA9
IDB4MDIwMDAwCitjb25zdCBfX19OUl9zb2NrZXRwYWlyID0gNTMKK2NvbnN0IF9TWVNfdXNlcmZh
dWx0ZmQgPSBfX19OUl91c2VyZmF1bHRmZAorY29uc3QgX0lGTEFfQk9ORF9QUklNQVJZID0gMTEK
K2NvbnN0IF9DTERfRFVNUEVEID0gMworY29uc3QgX1NZU19taWdyYXRlX3BhZ2VzID0gX19fTlJf
bWlncmF0ZV9wYWdlcworY29uc3QgX0NTSVpFID0gMDAwMDA2MAorY29uc3QgX1JUTUdSUF9UQyA9
IDgKK2NvbnN0IF9SVE1fTkVXQ0hBSU4gPSAxMDAKK2NvbnN0IF9FQUNDRVMgPSAxMworY29uc3Qg
X19QT1NJWF9NQVhfQ0FOT04gPSAyNTUKK2NvbnN0IF9SVFBST1RfWkVCUkEgPSAxMQorY29uc3Qg
X19QT1NJWF9USFJFQURfVEhSRUFEU19NQVggPSA2NAorY29uc3QgX0NMT0NLX0JPT1RUSU1FID0g
NworY29uc3QgX19feDg2XzY0ID0gMQorY29uc3QgX0NRVUlUID0gMDM0Citjb25zdCBfVElPQ0dQ
VE5fdmFsID0gMjE0Nzc2NzM0NAorY29uc3QgX19TQ19YT1BFTl9WRVJTSU9OID0gODkKK2NvbnN0
IF9fX0lOVDE2X01BWF9fID0gMHg3ZmZmCitjb25zdCBfX1NDX05MX1NFVE1BWCA9IDEyMworY29u
c3QgX19fTlJfaW9fY2FuY2VsID0gMjEwCitjb25zdCBfX1NZU19DREVGU19IID0gMQorY29uc3Qg
X1NDTnhMRUFTVDMyID0gIngiCitjb25zdCBfRVRIX1BfTU9CSVRFWCA9IDB4MDAxNQorY29uc3Qg
X0lGTEFfRVZFTlRfQk9ORElOR19GQUlMT1ZFUiA9IDMKK2NvbnN0IF9TSV9USU1FUiA9IC0yCitj
b25zdCBfRU5PS0VZID0gMTI2Citjb25zdCBfSUZMQV9CUlBPUlRfVE9QT0xPR1lfQ0hBTkdFX0FD
SyA9IDE5Citjb25zdCBfQVJQSFJEX0NTTElQNiA9IDI1OQorY29uc3QgX19fV0lOVF9NSU5fXyA9
IDAKK2NvbnN0IF9fX1NfSUZSRUcgPSAwMTAwMDAwCitjb25zdCBfSU5UUFRSX01JTiA9ICgtOTIy
MzM3MjAzNjg1NDc3NTgwNy0xKQorY29uc3QgX19fU19JU1VJRCA9IDA0MDAwCitjb25zdCBfUFJf
U0VUX1NFQ1VSRUJJVFMgPSAyOAorY29uc3QgX0VQT0xMV1JCQU5EID0gNTEyCitjb25zdCBfX0xG
UzY0X0FTWU5DSFJPTk9VU19JTyA9IDEKK2NvbnN0IF9TS0ZfQURfUlhIQVNIID0gMzIKK2NvbnN0
IF9QRl9MT0NBTCA9IDEKK2NvbnN0IF9FTk9UU09DSyA9IDg4Citjb25zdCBfU19JRk1UID0gX19f
U19JRk1UCitjb25zdCBfX19OUl9rY21wID0gMzEyCitjb25zdCBfU1lTX3NwbGljZSA9IF9fX05S
X3NwbGljZQorY29uc3QgX19QT1NJWF9UUkFDRV9JTkhFUklUID0gLTEKK2NvbnN0IF9fU0NfU0hS
VF9NSU4gPSAxMTQKK2NvbnN0IF9BUlBIUkRfTEFQQiA9IDUxNgorY29uc3QgX0lGTEFfQk9ORF9B
RF9JTkZPX1BBUlRORVJfS0VZID0gNAorY29uc3QgX0NMT0NLX01PTk9UT05JQ19SQVcgPSA0Citj
b25zdCBfTUNBU1RfRVhDTFVERSA9IDAKK2NvbnN0IF9TSU9DU0lGTVRVID0gMHg4OTIyCitjb25z
dCBfQVRfU1RBVFhfRk9SQ0VfU1lOQyA9IDB4MjAwMAorY29uc3QgX1NJT0NHSUZDT05GID0gMHg4
OTEyCitjb25zdCBfRlNfU0VDUk1fRkwgPSAweDAwMDAwMDAxCitjb25zdCBfX19JTlRfRkFTVDMy
X1dJRFRIX18gPSA2NAorY29uc3QgX19QQ19NQVhfQ0FOT04gPSAxCitjb25zdCBfRklPQ0xFWCA9
IDB4NTQ1MQorY29uc3QgX19fSUxQMzJfT0ZGQklHX0xERkxBR1MgPSAiLW0zMiIKK2NvbnN0IF9J
RkxBX0hTUl9NVUxUSUNBU1RfU1BFQyA9IDMKK2NvbnN0IF9fX0lOVF9GQVNUMTZfTUFYX18gPSAw
eDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9TWVNfbWxvY2thbGwgPSBfX19OUl9tbG9ja2FsbAor
Y29uc3QgX1NZU19zZXRfdGhyZWFkX2FyZWEgPSBfX19OUl9zZXRfdGhyZWFkX2FyZWEKK2NvbnN0
IF9NU19CSU5EID0gNDA5NgorY29uc3QgX0FSUE9QX0luUkVRVUVTVCA9IDgKK2NvbnN0IF9TSVpF
T0ZfVk9JRF9QID0gOAorY29uc3QgX1NJT0NHSUZORVRNQVNLID0gMHg4OTFiCitjb25zdCBfU0NI
RURfQkFUQ0ggPSAzCitjb25zdCBfUlRNX05FV0FDVElPTiA9IDQ4Citjb25zdCBfQUZfS0NNID0g
X1BGX0tDTQorY29uc3QgX1NZU19jb3B5X2ZpbGVfcmFuZ2UgPSBfX19OUl9jb3B5X2ZpbGVfcmFu
Z2UKK2NvbnN0IF9BUlBIUkRfU0xJUCA9IDI1NgorY29uc3QgX01TX1JFTEFUSU1FID0gMjA5NzE1
MgorY29uc3QgX1JVU0FHRV9TRUxGID0gMAorY29uc3QgX19fRl9TRVRPV05fRVggPSAxNQorY29u
c3QgX19fUkxJTUlUX05JQ0UgPSAxMworY29uc3QgX1NPX0FUVEFDSF9GSUxURVIgPSAyNgorY29u
c3QgX0VQT0xMSU4gPSAxCitjb25zdCBfSUZBX0ZfSE9NRUFERFJFU1MgPSAweDEwCitjb25zdCBf
U0tGX0xMX09GRiA9ICgtMHgyMDAwMDApCitjb25zdCBfUlRGX1RIUk9XID0gMHgyMDAwCitjb25z
dCBfU1lTX29wZW5fYnlfaGFuZGxlX2F0ID0gX19fTlJfb3Blbl9ieV9oYW5kbGVfYXQKK2NvbnN0
IF9fX1NJWkVPRl9XSU5UX1RfXyA9IDQKK2NvbnN0IF9JRkxBX0JSUE9SVF9QUk9YWUFSUCA9IDEw
Citjb25zdCBfU1lTX21hZHZpc2UgPSBfX19OUl9tYWR2aXNlCitjb25zdCBfU1RBX0ZSRVFIT0xE
ID0gMHgwMDgwCitjb25zdCBfUEZfVlNPQ0sgPSA0MAorY29uc3QgX05DQ1MgPSAzMgorY29uc3Qg
X19fSUZMQV9WUkZfUE9SVF9NQVggPSAyCitjb25zdCBfX1NDX1Y2X0lMUDMyX09GRjMyID0gMTc2
Citjb25zdCBfQ0xEX0VYSVRFRCA9IDEKK2NvbnN0IF9FVE9PTUFOWVJFRlMgPSAxMDkKK2NvbnN0
IF9SVEFYX0ZFQVRVUkVfRUNOID0gKDEgPDwgMCkKK2NvbnN0IF9FVEhfUF9IU1IgPSAweDg5MkYK
K2NvbnN0IF9TWVNfaW9fc2V0dXAgPSBfX19OUl9pb19zZXR1cAorY29uc3QgX1JMSU1JVF9DT1JF
ID0gNAorY29uc3QgX1NZU19rZXljdGwgPSBfX19OUl9rZXljdGwKK2NvbnN0IF9fU0NfU0VNX05T
RU1TX01BWCA9IDMyCitjb25zdCBfRVBPTExXQUtFVVAgPSA1MzY4NzA5MTIKK2NvbnN0IF9fX05S
X2ZsaXN0eGF0dHIgPSAxOTYKK2NvbnN0IF9fU0NfQkFSUklFUlMgPSAxMzMKK2NvbnN0IF9TWVNf
c2V0Z2lkID0gX19fTlJfc2V0Z2lkCitjb25zdCBfX1NDX1dPUkRfQklUID0gMTA3Citjb25zdCBf
QVJQSFJEX1JPU0UgPSAyNzAKK2NvbnN0IF9TSV9VU0VSID0gMAorY29uc3QgX0lOX0NMQVNTQl9O
U0hJRlQgPSAxNgorY29uc3QgX05EVFBBX1BST1hZX1FMRU4gPSAxNAorY29uc3QgX1BSSWkxNiA9
ICJpIgorY29uc3QgX0lGTEFfQk9ORF9BRF9JTkZPX1BBUlRORVJfTUFDID0gNQorY29uc3QgX01T
R19DT05GSVJNID0gMjA0OAorY29uc3QgX19fTlJfc3ltbGlua2F0ID0gMjY2Citjb25zdCBfSEFW
RV9GVVRJTUVTQVQgPSAxCitjb25zdCBfX19QRFBfRU5ESUFOID0gMzQxMgorY29uc3QgX1BUSFJF
QURfS0VZU19NQVggPSAxMDI0Citjb25zdCBfTVNfTk9TVUlEID0gMgorY29uc3QgX0lGTEFfQlJf
TUNBU1RfUVVFUllfSU5UVkwgPSAzMworY29uc3QgX19fVUlOVE1BWF9NQVhfXyA9IDB4ZmZmZmZm
ZmZmZmZmZmZmZgorY29uc3QgX0lGTEFfV0VJR0hUID0gMTUKK2NvbnN0IF9JUFY2X1hGUk1fUE9M
SUNZID0gMzUKK2NvbnN0IF9fX05SX2FjY2VzcyA9IDIxCitjb25zdCBfX1NDX0xFVkVMMV9JQ0FD
SEVfU0laRSA9IDE4NQorY29uc3QgX1JUTUdSUF9JUFY2X0lGQUREUiA9IDB4MTAwCitjb25zdCBf
X19OUl9saW5rID0gODYKK2NvbnN0IF9GU19YRkxBR19SRUFMVElNRSA9IDB4MDAwMDAwMDEKK2Nv
bnN0IF9GQUxMT0NfRkxfSU5TRVJUX1JBTkdFID0gMHgyMAorY29uc3QgX19fUFJJUFRSX1BSRUZJ
WCA9ICJsIgorY29uc3QgX0lGTEFfWEZSTV9VTlNQRUMgPSAwCitjb25zdCBfU1RBVFhfQ1RJTUUg
PSAweDAwODAKK2NvbnN0IF9fX1NDSEFSX01BWF9fID0gMHg3ZgorY29uc3QgX1NIUlRfV0lEVEgg
PSAxNgorY29uc3QgX1NJT0NERUxSVCA9IDB4ODkwQworY29uc3QgX0FGX0lQWCA9IF9QRl9JUFgK
K2NvbnN0IF9NU19CT1JOID0gKDE8PDI5KQorY29uc3QgX0lGTEFfWERQID0gNDMKK2NvbnN0IF9J
RkxBX1NUQVRTID0gNworY29uc3QgX0VST0ZTID0gMzAKK2NvbnN0IF9TT19OT19DSEVDSyA9IDEx
Citjb25zdCBfQkNfQkFTRV9NQVggPSBfX1BPU0lYMl9CQ19CQVNFX01BWAorY29uc3QgX1g4Nl9F
RkxBR1NfSUZfQklUID0gOQorY29uc3QgX19YT1BFTl9TSE0gPSAxCitjb25zdCBfUkVHX1JTSSA9
IDkKK2NvbnN0IF9BUlBIUkRfTE9DQUxUTEsgPSA3NzMKK2NvbnN0IF9fU0NfREVWSUNFX1NQRUNJ
RklDX1IgPSAxNDIKK2NvbnN0IF9fU0NfU0VMRUNUID0gNTkKK2NvbnN0IF9fX0lGQV9NQVggPSAx
MAorY29uc3QgX1NZU19mYWNjZXNzYXQgPSBfX19OUl9mYWNjZXNzYXQKK2NvbnN0IF9DU1RPUEIg
PSAwMDAwMTAwCitjb25zdCBfTUFDVkxBTl9NQUNBRERSX1NFVCA9IDMKK2NvbnN0IF9VSU5UX01B
WCA9IChfSU5UX01BWCAqIDIgKyAxKQorY29uc3QgX1BSX1RJTUlOR19TVEFUSVNUSUNBTCA9IDAK
K2NvbnN0IF9TQ05kRkFTVDggPSAiaGhkIgorY29uc3QgX01BWFRUTCA9IDI1NQorY29uc3QgX0VB
SV9OT0RBVEEgPSAtNQorY29uc3QgX1RDUF9DQV9DV1IgPSAyCitjb25zdCBfSVhPTiA9IDAwMDIw
MDAKK2NvbnN0IF9fX2dudV9saW51eF9fID0gMQorY29uc3QgX19QQVRIX1NFUlZJQ0VTID0gIi9l
dGMvc2VydmljZXMiCitjb25zdCBfX19JRkxBX1ZGX1ZMQU5fSU5GT19NQVggPSAyCitjb25zdCBf
QUZfVU5JWCA9IF9QRl9VTklYCitjb25zdCBfRVRIX1BfSERMQyA9IDB4MDAxOQorY29uc3QgX1BS
X01QWF9FTkFCTEVfTUFOQUdFTUVOVCA9IDQzCitjb25zdCBfUlRQUk9UX0JJUkQgPSAxMgorY29u
c3QgX0FSUEhSRF9IV1gyNSA9IDI3MgorY29uc3QgX1JUTV9ERUxST1VURSA9IDI1Citjb25zdCBf
SUZMQV9CUl9WTEFOX1BST1RPQ09MID0gOAorY29uc3QgX0lGTEFfQlJQT1JUX1VOU1BFQyA9IDAK
K2NvbnN0IF9SVE1fR0VUQUREUiA9IDIyCitjb25zdCBfVENJT04gPSAzCitjb25zdCBfSVBfQ0hF
Q0tTVU0gPSAyMworY29uc3QgX1NZU19mY2htb2RhdCA9IF9fX05SX2ZjaG1vZGF0Citjb25zdCBf
Q0xPTkVfTkVXVVNFUiA9IDB4MTAwMDAwMDAKK2NvbnN0IF9USU9DTk9UVFkgPSAweDU0MjIKK2Nv
bnN0IF9TT19OT0ZDUyA9IDQzCitjb25zdCBfU1lTX2Nsb2NrX3NldHRpbWUgPSBfX19OUl9jbG9j
a19zZXR0aW1lCitjb25zdCBfSVBfUEtUT1BUSU9OUyA9IDkKK2NvbnN0IF9UQ1BfUVVFVUVTX05S
ID0gMworY29uc3QgX19fRkxUNjRfREVDSU1BTF9ESUdfXyA9IDE3Citjb25zdCBfSUNNUDZfVElN
RV9FWENFRURfUkVBU1NFTUJMWSA9IDEKK2NvbnN0IF9JUFRPU19EU0NQX01BU0sgPSAweGZjCitj
b25zdCBfU0lHSU5UID0gMgorY29uc3QgX0NMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCA9IDIKK2Nv
bnN0IF9JQ01QNl9EU1RfVU5SRUFDSCA9IDEKK2NvbnN0IF9JRkxBX0dFTkVWRV9UT1MgPSA0Citj
b25zdCBfUFJfRlBfRVhDX0RJU0FCTEVEID0gMAorY29uc3QgX01BRFZfRE9EVU1QID0gMTcKK2Nv
bnN0IF9TWVNfZ2V0X3RocmVhZF9hcmVhID0gX19fTlJfZ2V0X3RocmVhZF9hcmVhCitjb25zdCBf
U09MX1BOUElQRSA9IDI3NQorY29uc3QgX01BWF9MSU5LUyA9IDMyCitjb25zdCBfUlROTF9GQU1J
TFlfSVBNUiA9IDEyOAorY29uc3QgX05MX01NQVBfU1RBVFVTX0NPUFkgPSAzCitjb25zdCBfX1ND
X1JFQURFUl9XUklURVJfTE9DS1MgPSAxNTMKK2NvbnN0IF9fU0NfQUlPX1BSSU9fREVMVEFfTUFY
ID0gMjUKK2NvbnN0IF9SVE5MR1JQX1BIT05FVF9JRkFERFIgPSAyMQorY29uc3QgX0FSUEhSRF9G
Q0ZBQlJJQyA9IDc4NworY29uc3QgX0NMT05FX1BBUkVOVF9TRVRUSUQgPSAweDAwMTAwMDAwCitj
b25zdCBfU1lTX25ld2ZzdGF0YXQgPSBfX19OUl9uZXdmc3RhdGF0Citjb25zdCBfSUZGX05PVFJB
SUxFUlMgPSAzMgorY29uc3QgX1RDUF9TQVZFX1NZTiA9IDI3Citjb25zdCBfUFJJaTMyID0gImki
Citjb25zdCBfVElNRV9FUlJPUiA9IDUKK2NvbnN0IF9fX05SX3JlYWQgPSAwCitjb25zdCBfVkVP
TDIgPSAxNgorY29uc3QgX0VUSEVSVFlQRV9OVFJBSUxFUiA9IDE2Citjb25zdCBfX1NDX01PTk9U
T05JQ19DTE9DSyA9IDE0OQorY29uc3QgX1RDQV9ST09UX0NPVU5UID0gMworY29uc3QgX1BLRVlf
RElTQUJMRV9BQ0NFU1MgPSAweDEKK2NvbnN0IF9IQVZFX0FTX1g4Nl9QQ1JFTCA9IDEKK2NvbnN0
IF9fX2lvdmVjX2RlZmluZWQgPSAxCitjb25zdCBfVFVOX0ZMVF9BTExNVUxUSSA9IDB4MDAwMQor
Y29uc3QgX05FVExJTktfUlhfUklORyA9IDYKK2NvbnN0IF9FTk9UUkVDT1ZFUkFCTEUgPSAxMzEK
K2NvbnN0IF9QVFJBQ0VfSU5URVJSVVBUID0gMTY5MDMKK2NvbnN0IF9BRl9DQUlGID0gX1BGX0NB
SUYKK2NvbnN0IF9TT0xfSVBWNiA9IDQxCitjb25zdCBfSUZMQV9CUk9BRENBU1QgPSAyCitjb25z
dCBfX19MREJMX01BTlRfRElHX18gPSA2NAorY29uc3QgX0ZGSV9UWVBFX1NJTlQ4ID0gNgorY29u
c3QgX19fTlJfd2FpdGlkID0gMjQ3Citjb25zdCBfSVhBTlkgPSAwMDA0MDAwCitjb25zdCBfU1lT
X3NjaGVkX3NldGFmZmluaXR5ID0gX19fTlJfc2NoZWRfc2V0YWZmaW5pdHkKK2NvbnN0IF9fX0ZM
VDY0WF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBfX1NDX1NQT1JBRElDX1NFUlZFUiA9IDE2
MAorY29uc3QgX1BPTExfRVJSID0gNAorY29uc3QgX0lGTEFfWERQX1VOU1BFQyA9IDAKK2NvbnN0
IF9GX1JETENLID0gMAorY29uc3QgX0lQT1BUX0RFQk1FQVMgPSAweDQwCitjb25zdCBfQVRfRkRD
V0QgPSAtMTAwCitjb25zdCBfSU5UUFRSX1dJRFRIID0gX19fV09SRFNJWkUKK2NvbnN0IF9fU0Nf
UElJX09TSV9DTFRTID0gNjQKK2NvbnN0IF9TWVNfcGlwZTIgPSBfX19OUl9waXBlMgorY29uc3Qg
X0lGTEFfQk9ORF9TTEFWRV9BRF9QQVJUTkVSX09QRVJfUE9SVF9TVEFURSA9IDgKK2NvbnN0IF9f
Q1NfR05VX0xJQlBUSFJFQURfVkVSU0lPTiA9IDMKK2NvbnN0IF9UQ1NBRFJBSU4gPSAxCitjb25z
dCBfTE9OR19NQVggPSBfX19MT05HX01BWF9fCitjb25zdCBfUFJJZDE2ID0gImQiCitjb25zdCBf
X1NZU19JTk9USUZZX0ggPSAxCitjb25zdCBfU1lTX2JwZiA9IF9fX05SX2JwZgorY29uc3QgX1JU
TkxHUlBfTk9QNCA9IDE3Citjb25zdCBfX1NDX1hPUEVOX1hDVV9WRVJTSU9OID0gOTAKK2NvbnN0
IF9QUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UID0gNDQKK2NvbnN0IF9JTlRfTEVBU1Q4X01JTiA9
ICgtMTI4KQorY29uc3QgX1NJR0lPID0gX1NJR1BPTEwKK2NvbnN0IF9JUFY2X1JFQ1ZPUklHRFNU
QUREUiA9IF9JUFY2X09SSUdEU1RBRERSCitjb25zdCBfX1BDX0ZJTEVTSVpFQklUUyA9IDEzCitj
b25zdCBfVElPQ0dQR1JQID0gMHg1NDBGCitjb25zdCBfX19GTFQzMlhfTUlOX0VYUF9fID0gKC0x
MDIxKQorY29uc3QgX1RJT0NHV0lOU1pfdmFsID0gMjE1MjMKK2NvbnN0IF9fU0NfTEVWRUwyX0NB
Q0hFX0xJTkVTSVpFID0gMTkzCitjb25zdCBfRVRIX1BfQVRNTVBPQSA9IDB4ODg0YworY29uc3Qg
X0hBVkVfU1RSSU5HU19IID0gMQorY29uc3QgX0ROX0NSRUFURSA9IDB4MDAwMDAwMDQKK2NvbnN0
IF9GU19QT0xJQ1lfRkxBR1NfUEFEXzE2ID0gMHgwMgorY29uc3QgX1NPX09PQklOTElORSA9IDEw
Citjb25zdCBfUEFDS0VUX1JPTExPVkVSX1NUQVRTID0gMjEKK2NvbnN0IF9fUE9TSVhfQVNZTkNI
Uk9OT1VTX0lPID0gMjAwODA5Citjb25zdCBfX0NTX0xGU19MSUJTID0gMTAwMgorY29uc3QgX1BB
Q0tFVF9NUl9QUk9NSVNDID0gMQorY29uc3QgX19fRkxUNjRfTUFYX18gPSAxLjEKK2NvbnN0IF9f
X1VTRV9JU09DMTEgPSAxCitjb25zdCBfX1NDX0xFVkVMMl9DQUNIRV9BU1NPQyA9IDE5MgorY29u
c3QgX1RDU0JSSyA9IDB4NTQwOQorY29uc3QgX0lOVF9MRUFTVDMyX1dJRFRIID0gMzIKK2NvbnN0
IF9CUEZfTUlOT1JfVkVSU0lPTiA9IDEKK2NvbnN0IF9fX0dOVV9MSUJSQVJZX18gPSA2Citjb25z
dCBfX19TVERDX0lTT18xMDY0Nl9fID0gMjAxNzA2Citjb25zdCBfRUlTTkFNID0gMTIwCitjb25z
dCBfSVBWNl9BVVRPRkxPV0xBQkVMID0gNzAKK2NvbnN0IF9fU0NfTEVWRUw0X0NBQ0hFX0xJTkVT
SVpFID0gMTk5Citjb25zdCBfSUZMQV9MSU5LSU5GTyA9IDE4Citjb25zdCBfSVBfUE1UVURJU0Nf
RE8gPSAyCitjb25zdCBfUFRSQUNFX09MRFNFVE9QVElPTlMgPSAyMQorY29uc3QgX0lQX1BLVElO
Rk8gPSA4Citjb25zdCBfT19SU1lOQyA9IF9PX1NZTkMKK2NvbnN0IF9TUExJQ0VfRl9OT05CTE9D
SyA9IDIKK2NvbnN0IF9DTE9ORV9DSElMRF9DTEVBUlRJRCA9IDB4MDAyMDAwMDAKK2NvbnN0IF9I
QVZFX09GRjY0X1QgPSAxCitjb25zdCBfRlNfRU9GQkxPQ0tTX0ZMID0gMHgwMDQwMDAwMAorY29u
c3QgX19TQ19GSUxFX1NZU1RFTSA9IDE0OAorY29uc3QgX0NIQVJDTEFTU19OQU1FX01BWCA9IDIw
NDgKK2NvbnN0IF9JTlRfTUFYID0gX19fSU5UX01BWF9fCitjb25zdCBfX19MUDY0X09GRjY0X0NG
TEFHUyA9ICItbTY0IgorY29uc3QgX0lOVF9XSURUSCA9IDMyCitjb25zdCBfTkRUQV9VTlNQRUMg
PSAwCitjb25zdCBfVFVOX0ZfVFNPNCA9IDB4MDIKK2NvbnN0IF9fUE9TSVhfVEhSRUFEUyA9IDIw
MDgwOQorY29uc3QgX1JURVhUX0ZJTFRFUl9CUlZMQU4gPSAoMSA8PCAxKQorY29uc3QgX1JUQVhf
UkVPUkRFUklORyA9IDkKK2NvbnN0IF9QRl9BVE1TVkMgPSAyMAorY29uc3QgX05TU19CVUZMRU5f
R1JPVVAgPSAxMDI0Citjb25zdCBfUFJfVFNDX1NJR1NFR1YgPSAyCitjb25zdCBfX19OUl9zZW1j
dGwgPSA2NgorY29uc3QgX1NPTF9USVBDID0gMjcxCitjb25zdCBfTUxEX0xJU1RFTkVSX1JFUE9S
VCA9IDEzMQorY29uc3QgX1VQQUdFUyA9IDEKK2NvbnN0IF9fU0NfUElJX09TSV9NID0gNjUKK2Nv
bnN0IF9GU19YRkxBR19QUk9KSU5IRVJJVCA9IDB4MDAwMDAyMDAKK2NvbnN0IF9NU0dfRVJSUVVF
VUUgPSA4MTkyCitjb25zdCBfQVJQSFJEX0lFRUU4MDIxNTQgPSA4MDQKK2NvbnN0IF9USU9DUEtU
ID0gMHg1NDIwCitjb25zdCBfRVNSQ0ggPSAzCitjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9SV0xP
Q0tfVCA9IDU2Citjb25zdCBfX1BPU0lYMl9CQ19TVFJJTkdfTUFYID0gMTAwMAorY29uc3QgX0lG
TEFfSU5FVDZfVU5TUEVDID0gMAorY29uc3QgX0FURl9VU0VUUkFJTEVSUyA9IDB4MTAKK2NvbnN0
IF9JTl9NT1ZFX1NFTEYgPSAweDAwMDAwODAwCitjb25zdCBfX19TSUdfQVRPTUlDX1dJRFRIX18g
PSAzMgorY29uc3QgX19TQ19TWVNURU1fREFUQUJBU0VfUiA9IDE2MworY29uc3QgX1JUQV9EUE9S
VCA9IDI5Citjb25zdCBfUlRBX1NFU1NJT04gPSAxMworY29uc3QgX1BBQ0tBR0VfVkVSU0lPTiA9
ICJ2ZXJzaW9uLXVudXNlZCIKK2NvbnN0IF9fX0RFQzEyOF9TVUJOT1JNQUxfTUlOX18gPSAwLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUtNjE0MworY29uc3QgX0IyMDAwMDAwID0g
MDAxMDAxMworY29uc3QgX1NZU19jaG1vZCA9IF9fX05SX2NobW9kCitjb25zdCBfU1RBX1BQU1dB
TkRFUiA9IDB4MDQwMAorY29uc3QgX19fSU5UX01BWF9fID0gMHg3ZmZmZmZmZgorY29uc3QgX19f
VUlOVF9MRUFTVDhfTUFYX18gPSAweGZmCitjb25zdCBfX19JTlRfRkFTVDE2X1dJRFRIX18gPSA2
NAorY29uc3QgX1NZU19ldmVudGZkMiA9IF9fX05SX2V2ZW50ZmQyCitjb25zdCBfU0lHQlVTID0g
NworY29uc3QgX0ZQX1hTVEFURV9NQUdJQzEgPSAweDQ2NTA1ODUzCitjb25zdCBfRlBfWFNUQVRF
X01BR0lDMiA9IDB4NDY1MDU4NDUKK2NvbnN0IF9UQ0dFVFNfdmFsID0gMjE1MDUKK2NvbnN0IF9O
TE1fRl9SRVFVRVNUID0gMHgwMQorY29uc3QgX01BRFZfTk9IVUdFUEFHRSA9IDE1Citjb25zdCBf
SEFWRV9JTk9USUZZX0lOSVQgPSAxCitjb25zdCBfUlRNX05FV1FESVNDID0gMzYKK2NvbnN0IF9Q
Ul9TRVRfS0VFUENBUFMgPSA4Citjb25zdCBfUFJfRU5ESUFOX0JJRyA9IDAKK2NvbnN0IF9JUFBP
UlRfTE9HSU5TRVJWRVIgPSA1MTMKK2NvbnN0IF9TWVNfY2xvY2tfZ2V0dGltZSA9IF9fX05SX2Ns
b2NrX2dldHRpbWUKK2NvbnN0IF9NU0dfVFJZSEFSRCA9IDQKK2NvbnN0IF9QUl9TRVRfTU1fQVVY
ViA9IDEyCitjb25zdCBfX1BPU0lYX1NZTkNIUk9OSVpFRF9JTyA9IDIwMDgwOQorY29uc3QgX1NZ
U19jbG9zZSA9IF9fX05SX2Nsb3NlCitjb25zdCBfUFJfU0VUX1VOQUxJR04gPSA2Citjb25zdCBf
U1lTX2JyayA9IF9fX05SX2JyaworY29uc3QgX19OU0lHID0gKF9fX1NJR1JUTUFYICsgMSkKK2Nv
bnN0IF9fUE9TSVhfRkRfU0VUU0laRSA9IF9fUE9TSVhfT1BFTl9NQVgKK2NvbnN0IF9FTk9UVFkg
PSAyNQorY29uc3QgX1JUQV9QUklPUklUWSA9IDYKK2NvbnN0IF9FVEhfUF9MQVQgPSAweDYwMDQK
K2NvbnN0IF9GRklfTkFUSVZFX1JBV19BUEkgPSAwCitjb25zdCBfUFJfR0VUX05PX05FV19QUklW
UyA9IDM5Citjb25zdCBfRlBFX0ZMVFJFUyA9IDYKK2NvbnN0IF9GU19SRVNFUlZFRF9GTCA9IDB4
ODAwMDAwMDAKK2NvbnN0IF9GU19YRkxBR19DT1dFWFRTSVpFID0gMHgwMDAxMDAwMAorY29uc3Qg
X0VQT0xMT1VUID0gNAorY29uc3QgX1NDTV9UWFRJTUUgPSBfU09fVFhUSU1FCitjb25zdCBfQURK
X1RJTUVDT05TVCA9IDB4MDAyMAorY29uc3QgX1ZLSUxMID0gMworY29uc3QgX1JUTUdSUF9ERUNu
ZXRfUk9VVEUgPSAweDQwMDAKK2NvbnN0IF9BRl9RSVBDUlRSID0gX1BGX1FJUENSVFIKK2NvbnN0
IF9TT19BQ0NFUFRDT05OID0gMzAKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1RYX0RST1BQRUQgPSA4
Citjb25zdCBfUlROTF9GQU1JTFlfTUFYID0gMTI5Citjb25zdCBfX1BPU0lYX1RJTUVSX01BWCA9
IDMyCitjb25zdCBfX19OUl9ta25vZCA9IDEzMworY29uc3QgX1JFR19FRkwgPSAxNworY29uc3Qg
X19fU1NFMl9fID0gMQorY29uc3QgX0lQX01VTFRJQ0FTVF9UVEwgPSAzMworY29uc3QgX1NPQ0tf
U0VRUEFDS0VUID0gNQorY29uc3QgX19fV0FMTCA9IDB4NDAwMDAwMDAKK2NvbnN0IF9SVE1fREVM
TURCID0gODUKK2NvbnN0IF9JTExfSUxMT1BDID0gMQorY29uc3QgX05MTVNHX0VSUk9SID0gMHgy
Citjb25zdCBfUFJfR0VUX1RJRF9BRERSRVNTID0gNDAKK2NvbnN0IF9TWVNfdm1zcGxpY2UgPSBf
X19OUl92bXNwbGljZQorY29uc3QgX1RDUF9TWU5DTlQgPSA3Citjb25zdCBfUlRfU0NPUEVfU0lU
RSA9IDIwMAorY29uc3QgX1NZU19leGVjdmVhdCA9IF9fX05SX2V4ZWN2ZWF0Citjb25zdCBfSUZB
X0ZfVEVNUE9SQVJZID0gX0lGQV9GX1NFQ09OREFSWQorY29uc3QgX0NSRExZID0gMDAwMzAwMAor
Y29uc3QgX0VUSF9QX1BSRUFVVEggPSAweDg4QzcKK2NvbnN0IF9fX05SX3NjaGVkX3JyX2dldF9p
bnRlcnZhbCA9IDE0OAorY29uc3QgX1JFR19SMTIgPSA0Citjb25zdCBfSVBWNl8yMjkyUEtUSU5G
TyA9IDIKK2NvbnN0IF9fX0lPVl9NQVggPSAxMDI0Citjb25zdCBfQUlfQUxMID0gMHgwMDEwCitj
b25zdCBfRVRIX1BfRkNPRSA9IDB4ODkwNgorY29uc3QgX0lGTEFfQ0FSUklFUiA9IDMzCitjb25z
dCBfUlRBX05FV0RTVCA9IDE5Citjb25zdCBfX19OUl9hZGp0aW1leCA9IDE1OQorY29uc3QgX0JZ
VEVfT1JERVIgPSBfX19CWVRFX09SREVSCitjb25zdCBfX19GTFRfREVOT1JNX01JTl9fID0gMS4x
Citjb25zdCBfRUNIT1BSVCA9IDAwMDIwMDAKK2NvbnN0IF9JRkxBX1JNTkVUX1VOU1BFQyA9IDAK
K2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEzMgorY29uc3QgX0Zf
U0hMQ0sgPSA4Citjb25zdCBfRVRJTUVET1VUID0gMTEwCitjb25zdCBfX1NDX0ZJTEVfTE9DS0lO
RyA9IDE0NworY29uc3QgX01TR19QRUVLID0gMgorY29uc3QgX1NZU19tc3luYyA9IF9fX05SX21z
eW5jCitjb25zdCBfRVRIX1BfMTU4OCA9IDB4ODhGNworY29uc3QgX19TQ19QQVNTX01BWCA9IDg4
Citjb25zdCBfSUZMQV9IU1JfVU5TUEVDID0gMAorY29uc3QgX0JDX1NUUklOR19NQVggPSBfX1BP
U0lYMl9CQ19TVFJJTkdfTUFYCitjb25zdCBfRkxVU0hPID0gMDAxMDAwMAorY29uc3QgX1NZU19s
c3RhdCA9IF9fX05SX2xzdGF0Citjb25zdCBfVElPQ01fUlRTID0gMHgwMDQKK2NvbnN0IF9BUlBI
UkRfSVJEQSA9IDc4MworY29uc3QgX1RDU0JSS1AgPSAweDU0MjUKK2NvbnN0IF9FUElQRSA9IDMy
Citjb25zdCBfX19GTFQzMlhfSEFTX0RFTk9STV9fID0gMQorY29uc3QgX19CSVRTX1VJT19FWFRf
SCA9IDEKK2NvbnN0IF9JQ01QNl9SUl9GTEFHU19URVNUID0gMHg4MAorY29uc3QgX1NZU19hbGFy
bSA9IF9fX05SX2FsYXJtCitjb25zdCBfSUZGX1RVTiA9IDB4MDAwMQorY29uc3QgX19fRU5VTV9J
RFRZUEVfVCA9IDEKK2NvbnN0IF9QUl9GUF9NT0RFX0ZSRSA9ICgxIDw8IDEpCitjb25zdCBfTUFD
U0VDX1ZBTElEQVRFX0RJU0FCTEVEID0gMAorY29uc3QgX0lGTEFfR0VORVZFX1RUTCA9IDMKK2Nv
bnN0IF9IQVZFX0lOT1RJRllfQUREX1dBVENIID0gMQorY29uc3QgX1BSSVgxNiA9ICJYIgorY29u
c3QgX19fRkxUX0VWQUxfTUVUSE9EX1RTXzE4NjYxXzNfXyA9IDAKK2NvbnN0IF9ORF9OQV9GTEFH
X1JPVVRFUiA9IDB4MDAwMDAwODAKK2NvbnN0IF9JUFY2X1JFQ1ZQQVRITVRVID0gNjAKK2NvbnN0
IF9NQURWX05PUk1BTCA9IDAKK2NvbnN0IF9GRklfUkVHSVNURVIgPSA3Citjb25zdCBfUFJJZDMy
ID0gImQiCitjb25zdCBfTkxBX0ZfTkVUX0JZVEVPUkRFUiA9ICgxIDw8IDE0KQorY29uc3QgX0hB
VkVfRVhQTCA9IDEKK2NvbnN0IF9JUF9SRVRPUFRTID0gNworY29uc3QgX0lQX01VTFRJQ0FTVF9J
RiA9IDMyCitjb25zdCBfRVhQUl9ORVNUX01BWCA9IF9fUE9TSVgyX0VYUFJfTkVTVF9NQVgKK2Nv
bnN0IF9OX1BQUCA9IDMKK2NvbnN0IF9fX0dMSUJDX0xJTlVYX1ZFUlNJT05fQ09ERSA9IDI2NzAw
OAorY29uc3QgX0ZTX01BWF9LRVlfU0laRSA9IDY0Citjb25zdCBfUEZfSU5FVDYgPSAxMAorY29u
c3QgX1NZU19jaGRpciA9IF9fX05SX2NoZGlyCitjb25zdCBfUFRSQUNFX0VWRU5UX1ZGT1JLID0g
MgorY29uc3QgX1NPX1JDVlRJTUVPID0gMjAKK2NvbnN0IF9fX05SX3RpbWVzID0gMTAwCitjb25z
dCBfX1BPU0lYX1VJT19NQVhJT1YgPSAxNgorY29uc3QgX0lGTEFfQlJfTUNBU1RfUVVFUklFUl9J
TlRWTCA9IDMyCitjb25zdCBfSVBfVE9TID0gMQorY29uc3QgX19TQ18yX1BCU19MT0NBVEUgPSAx
NzAKK2NvbnN0IF9OTE1TR19OT09QID0gMHgxCitjb25zdCBfRlNfUE9MSUNZX0ZMQUdTX1BBRF8z
MiA9IDB4MDMKK2NvbnN0IF9BUlBEX1VQREFURSA9IDB4MDEKK2NvbnN0IF9fQ1NfTEZTX0xJTlRG
TEFHUyA9IDEwMDMKK2NvbnN0IF9fSU9DX0RJUk1BU0sgPSAoKDEgPDwgX19JT0NfRElSQklUUykt
MSkKK2NvbnN0IF9TWVNfY2Fwc2V0ID0gX19fTlJfY2Fwc2V0Citjb25zdCBfSUNNUDZfUk9VVEVS
X1JFTlVNQkVSSU5HID0gMTM4Citjb25zdCBfSUxMX0lMTEFEUiA9IDMKK2NvbnN0IF9fQklUU19Q
T1NJWF9PUFRfSCA9IDEKK2NvbnN0IF9QUl9HRVRfRlBFWEMgPSAxMQorY29uc3QgX1BSX0NBUEJT
RVRfUkVBRCA9IDIzCitjb25zdCBfVENQX01ENVNJRyA9IDE0Citjb25zdCBfSEFWRV9HRVRYQVRU
UiA9IDEKK2NvbnN0IF9SVE1fREVMUlVMRSA9IDMzCitjb25zdCBfUlRNX05FV1NUQVRTID0gOTIK
K2NvbnN0IF9UQ1NBRkxVU0ggPSAyCitjb25zdCBfSUZMQV9QT1JUX1ZGID0gMQorY29uc3QgX19C
SVRTX1NDSEVEX0ggPSAxCitjb25zdCBfSVBWNl9SVEhEUkRTVE9QVFMgPSA1NQorY29uc3QgX19f
TlJfbWFkdmlzZSA9IDI4Citjb25zdCBfUFJfU1BFQ19JTkRJUkVDVF9CUkFOQ0ggPSAxCitjb25z
dCBfWDg2X0NSNF9UU0RfQklUID0gMgorY29uc3QgX0lGTEFfQlJfTkZfQ0FMTF9JUDZUQUJMRVMg
PSAzNworY29uc3QgX1BUUkFDRV9UUkFDRU1FID0gMAorY29uc3QgX1g4Nl9DUjBfUEVfQklUID0g
MAorY29uc3QgX0ZGSV9DTE9TVVJFUyA9IDEKK2NvbnN0IF9JRkFfRl9NQU5BR0VURU1QQUREUiA9
IDB4MTAwCitjb25zdCBfU0lPQ0FERFJUID0gMHg4OTBCCitjb25zdCBfVENHRVRBID0gMHg1NDA1
Citjb25zdCBfSUZMQV9NVFUgPSA0Citjb25zdCBfSUZMQV9CUl9ST09UX1BPUlQgPSAxMgorY29u
c3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfTElOVEZMQUdTID0gMTEzOQorY29uc3QgX19f
U0laRU9GX1BUSFJFQURfQ09ORF9UID0gNDgKK2NvbnN0IF9fX1NfSUZJRk8gPSAwMDEwMDAwCitj
b25zdCBfX19QUkk2NF9QUkVGSVggPSAibCIKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZG
MzJfTElOVEZMQUdTID0gMTEzNQorY29uc3QgX0lGTEFfUFJPTUlTQ1VJVFkgPSAzMAorY29uc3Qg
X1BSX1NFVF9DSElMRF9TVUJSRUFQRVIgPSAzNgorY29uc3QgX1NJR1BJUEUgPSAxMworY29uc3Qg
X1RDR0VUUyA9IDB4NTQwMQorY29uc3QgX1NPTF9DQUlGID0gMjc4Citjb25zdCBfSUZMQV9CUl9N
Q0FTVF9NRU1CRVJTSElQX0lOVFZMID0gMzEKK2NvbnN0IF9SVEZfUkVJTlNUQVRFID0gMHgwMDA4
Citjb25zdCBfVENHRVRYID0gMHg1NDMyCitjb25zdCBfSUZMQV9QQUQgPSA0MgorY29uc3QgX0VU
SF9QX0ROQV9SQyA9IDB4NjAwMgorY29uc3QgX1JUTV9GX0ZJQl9NQVRDSCA9IDB4MjAwMAorY29u
c3QgX0lGTEFfQlJQT1JUX1ZMQU5fVFVOTkVMID0gMjkKK2NvbnN0IF9QUk9UX1JFQUQgPSAweDEK
K2NvbnN0IF9QUl9TUEVDX0RJU0FCTEUgPSAoMSA8PCAyKQorY29uc3QgX1BUUkFDRV9TRUlaRSA9
IDE2OTAyCitjb25zdCBfUlRGX0NBQ0hFID0gMHgwMTAwMDAwMAorY29uc3QgX19fREVDMTI4X01J
Tl9fID0gMUUtNjE0MworY29uc3QgX0lDTVA2X0VDSE9fUkVRVUVTVCA9IDEyOAorY29uc3QgX0ZT
X0VOQ1JZUFRJT05fTU9ERV9BRVNfMjU2X0dDTSA9IDIKK2NvbnN0IF9fU1lTX1RZUEVTX0ggPSAx
Citjb25zdCBfRVRIX1BfRE5BX1JUID0gMHg2MDAzCitjb25zdCBfX1NDX01FTUxPQ0sgPSAxNwor
Y29uc3QgX1NZU19maW5pdF9tb2R1bGUgPSBfX19OUl9maW5pdF9tb2R1bGUKK2NvbnN0IF9CUEZf
QSA9IDB4MTAKK2NvbnN0IF9CUEZfQiA9IDB4MTAKK2NvbnN0IF9QRl9JTkVUID0gMgorY29uc3Qg
X1NZU19ydF9zaWdwcm9jbWFzayA9IF9fX05SX3J0X3NpZ3Byb2NtYXNrCitjb25zdCBfU0lHX0FU
T01JQ19NSU4gPSAoLTIxNDc0ODM2NDctMSkKK2NvbnN0IF9fX0dDQ19IQVZFX1NZTkNfQ09NUEFS
RV9BTkRfU1dBUF8yID0gMQorY29uc3QgX19fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQ
XzQgPSAxCitjb25zdCBfU0lPQ0dJRkZMQUdTID0gMHg4OTEzCitjb25zdCBfUkVHX1I4ID0gMAor
Y29uc3QgX19fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzggPSAxCitjb25zdCBfRlNf
QVBQRU5EX0ZMID0gMHgwMDAwMDAyMAorY29uc3QgX1JUQVhfQ1dORCA9IDcKK2NvbnN0IF9fUE9T
SVgyX0NfQklORCA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04KK2NvbnN0IF9fWE9QRU5fUkVBTFRJ
TUVfVEhSRUFEUyA9IDEKK2NvbnN0IF9CUEZfVyA9IDB4MDAKK2NvbnN0IF9CUEZfWCA9IDB4MDgK
K2NvbnN0IF9SV0hfV1JJVEVfTElGRV9MT05HID0gNAorY29uc3QgX19fR0NDX0hBVkVfRFdBUkYy
X0NGSV9BU00gPSAxCitjb25zdCBfVENQT0xFTl9USU1FU1RBTVAgPSAxMAorY29uc3QgX0VUSF9Q
X0NBSUYgPSAweDAwRjcKK2NvbnN0IF9OREFfUE9SVCA9IDYKK2NvbnN0IF9FUE9MTFJESFVQID0g
ODE5MgorY29uc3QgX19fRkxUMTI4X01BWF9fID0gMS4xCitjb25zdCBfVElPQ1NSUzQ4NSA9IDB4
NTQyRgorY29uc3QgX19fSUZMQV9JTkVUX01BWCA9IDIKK2NvbnN0IF9SVEFYX0lOSVRSV05EID0g
MTQKK2NvbnN0IF9fQklUU19UWVBFU19MT0NBTEVfVF9IID0gMQorY29uc3QgX19fTERCTF9ERUNJ
TUFMX0RJR19fID0gMjEKK2NvbnN0IF9IQVZFX0FUQU5MID0gMQorY29uc3QgX1hEUF9BVFRBQ0hF
RF9EUlYgPSAxCitjb25zdCBfX19BVE9NSUNfQ09OU1VNRSA9IDEKK2NvbnN0IF9fX05SX21zZ2dl
dCA9IDY4Citjb25zdCBfX19OUl9nZXRzb2Nrb3B0ID0gNTUKK2NvbnN0IF9QVFJESUZGX01JTiA9
ICgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xKQorY29uc3QgX1dJTlRfV0lEVEggPSAzMgorY29uc3Qg
X05FVExJTktfRVhUX0FDSyA9IDExCitjb25zdCBfU0NOdTggPSAiaGh1IgorY29uc3QgX19TQ19U
SFJFQURfUk9CVVNUX1BSSU9fSU5IRVJJVCA9IDI0NworY29uc3QgX0lQX1JFQ1ZUT1MgPSAxMwor
Y29uc3QgX05EVFBBX0lGSU5ERVggPSAxCitjb25zdCBfRVRIX1RMRU4gPSAyCitjb25zdCBfQUlf
Q0FOT05OQU1FID0gMHgwMDAyCitjb25zdCBfX19OUl9tbG9ja2FsbCA9IDE1MQorY29uc3QgX1NL
Rl9BRF9IQVRZUEUgPSAyOAorY29uc3QgX19fTlJfcGlwZTIgPSAyOTMKK2NvbnN0IF9QVFJBQ0Vf
REVUQUNIID0gMTcKK2NvbnN0IF9TWVNfc2lnbmFsZmQgPSBfX19OUl9zaWduYWxmZAorY29uc3Qg
X19DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTID0gMTExMworY29uc3QgX0lQVjZfTkVYVEhP
UCA9IDkKK2NvbnN0IF9SVENGX0RPUkVESVJFQ1QgPSAweDAxMDAwMDAwCitjb25zdCBfTkRBX0lG
SU5ERVggPSA4Citjb25zdCBfX1NDX1BJSSA9IDUzCitjb25zdCBfQUZfQVRNU1ZDID0gX1BGX0FU
TVNWQworY29uc3QgX1BGX1BBQ0tFVCA9IDE3Citjb25zdCBfU1lTX2Z1dGltZXNhdCA9IF9fX05S
X2Z1dGltZXNhdAorY29uc3QgX0lQVE9TX1BSRUNfRkxBU0ggPSBfSVBUT1NfQ0xBU1NfQ1MzCitj
b25zdCBfQVJQSFJEX0lQR1JFID0gNzc4Citjb25zdCBfX1NDX1NIRUxMID0gMTU3Citjb25zdCBf
SEFWRV9MT0dMID0gMQorY29uc3QgX1BPUlRfVkRQX1JFU1BPTlNFX0lOVkFMSURfRk9STUFUID0g
MQorY29uc3QgX19fVVNFX1BPU0lYMiA9IDEKK2NvbnN0IF9FTk9NRU0gPSAxMgorY29uc3QgX1hE
UF9BVFRBQ0hFRF9TS0IgPSAyCitjb25zdCBfSU5fQ0xBU1NBX05FVCA9IDB4ZmYwMDAwMDAKK2Nv
bnN0IF9FU1JNTlQgPSA2OQorY29uc3QgX0lQVjZfTEVBVkVfQU5ZQ0FTVCA9IDI4Citjb25zdCBf
RU5PVEVNUFRZID0gMzkKK2NvbnN0IF9QVFJBQ0VfR0VUU0lHSU5GTyA9IDE2ODk4Citjb25zdCBf
X0lPQ19OUkJJVFMgPSA4Citjb25zdCBfUElQRV9CVUYgPSA0MDk2Citjb25zdCBfQUZfSVNETiA9
IF9QRl9JU0ROCitjb25zdCBfVUxPTkdfTE9OR19NQVggPSAoX0xPTkdfTE9OR19NQVggKiAyICsg
MSkKK2NvbnN0IF9MSU5LX1hTVEFUU19UWVBFX1VOU1BFQyA9IDAKK2NvbnN0IF9ORFRBX05BTUUg
PSAxCitjb25zdCBfUlRBX1BSRUYgPSAyMAorY29uc3QgX0FSUEhSRF9OT05FID0gMHhGRkZFCitj
b25zdCBfU1lTX2dldHNvY2tuYW1lID0gX19fTlJfZ2V0c29ja25hbWUKK2NvbnN0IF9FQ0hPQ1RM
ID0gMDAwMTAwMAorY29uc3QgX1JUTkxHUlBfSVBWNF9SVUxFID0gOAorY29uc3QgX0lGTEFfQk9O
RF9BRF9JTkZPID0gMjMKK2NvbnN0IF9JRkxBX0JSX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxBX0lG
X05FVE5TSUQgPSA0NgorY29uc3QgX09fUEFUSCA9IF9fX09fUEFUSAorY29uc3QgX1g4Nl9DUjNf
UENJRF9OT0ZMVVNIX0JJVCA9IDYzCitjb25zdCBfU1lTX3NjaGVkX2dldHBhcmFtID0gX19fTlJf
c2NoZWRfZ2V0cGFyYW0KK2NvbnN0IF9QUl9TRVRfTk9fTkVXX1BSSVZTID0gMzgKK2NvbnN0IF9J
RkxBX0JPTkRfQURfSU5GT19VTlNQRUMgPSAwCitjb25zdCBfUlRGX0ZMT1cgPSAweDAyMDAwMDAw
Citjb25zdCBfU1lTX3NldF9tZW1wb2xpY3kgPSBfX19OUl9zZXRfbWVtcG9saWN5Citjb25zdCBf
V0NPTlRJTlVFRCA9IDgKK2NvbnN0IF9fX0lGTEFfQk9ORF9NQVggPSAyOAorY29uc3QgX0lGRl9O
T0ZJTFRFUiA9IDB4MTAwMAorY29uc3QgX19fdGltZV90X2RlZmluZWQgPSAxCitjb25zdCBfSUZM
QV9ORVdfTkVUTlNJRCA9IDQ1Citjb25zdCBfQjYwMCA9IDAwMDAwMTAKK2NvbnN0IF9BUlBIUkRf
QklGID0gNzc1Citjb25zdCBfT19EU1lOQyA9IF9fX09fRFNZTkMKK2NvbnN0IF9fX05SX21zZ3Jj
diA9IDcwCitjb25zdCBfUlRQUk9UX1JBID0gOQorY29uc3QgX0lGTEFfVlJGX1VOU1BFQyA9IDAK
K2NvbnN0IF9QUl9TUEVDX05PVF9BRkZFQ1RFRCA9IDAKK2NvbnN0IF9OTE1fRl9EVU1QX0ZJTFRF
UkVEID0gMHgyMAorY29uc3QgX0lGTEFfVkxBTl9RT1NfVU5TUEVDID0gMAorY29uc3QgX19TQ19E
RVZJQ0VfSU8gPSAxNDAKK2NvbnN0IF9JRkxBX0lQT0lCX1VNQ0FTVCA9IDMKK2NvbnN0IF9TQ0hF
RF9SUiA9IDIKK2NvbnN0IF9QUklvOCA9ICJvIgorY29uc3QgX19MRlNfQVNZTkNIUk9OT1VTX0lP
ID0gMQorY29uc3QgX0lGTEFfUE9SVF9SRVFVRVNUID0gNgorY29uc3QgX0lGTEFfQk9ORF9BRF9J
TkZPX0FHR1JFR0FUT1IgPSAxCitjb25zdCBfUEFDS0VUX0xPT1BCQUNLID0gNQorY29uc3QgX1NZ
U19mZGF0YXN5bmMgPSBfX19OUl9mZGF0YXN5bmMKK2NvbnN0IF9TSU9DR0lGTUFQID0gMHg4OTcw
Citjb25zdCBfX19HQ0NfQVNNX0ZMQUdfT1VUUFVUU19fID0gMQorY29uc3QgX19fSUZMQV9CT05E
X1NMQVZFX01BWCA9IDkKK2NvbnN0IF9TSU9DU0FSUCA9IDB4ODk1NQorY29uc3QgX1NZU19wcmxp
bWl0NjQgPSBfX19OUl9wcmxpbWl0NjQKK2NvbnN0IF9fX0RFQzMyX01JTl9fID0gMUUtOTUKK2Nv
bnN0IF9OTE1fRl9SRVBMQUNFID0gMHgxMDAKK2NvbnN0IF9USU9DT1VUUSA9IDB4NTQxMQorY29u
c3QgX0lGQV9DQUNIRUlORk8gPSA2Citjb25zdCBfU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JF
ID0gMQorY29uc3QgX1NUQVRYX0JMT0NLUyA9IDB4MDQwMAorY29uc3QgX1BSX0ZQX0VYQ19VTkQg
PSAweDA0MDAwMAorY29uc3QgX0lGTEFfVlhMQU5fR1BFID0gMjcKK2NvbnN0IF9QQUNLQUdFX0JV
R1JFUE9SVCA9ICIiCitjb25zdCBfSVBWNl8yMjkyRFNUT1BUUyA9IDQKK2NvbnN0IF9JRkxBX0VY
VF9NQVNLID0gMjkKK2NvbnN0IF9fX0FUT01JQ19ITEVfQUNRVUlSRSA9IDY1NTM2Citjb25zdCBf
U1lTX3RpbWVyZmRfc2V0dGltZSA9IF9fX05SX3RpbWVyZmRfc2V0dGltZQorY29uc3QgX19fbGlu
dXhfXyA9IDEKK2NvbnN0IF9QT1NJWF9GQURWX1JBTkRPTSA9IDEKK2NvbnN0IF9QUklpTEVBU1Qx
NiA9ICJpIgorY29uc3QgX0lGTEFfR0VORVZFX0NPTExFQ1RfTUVUQURBVEEgPSA2Citjb25zdCBf
X19VU0VfSVNPQzk1ID0gMQorY29uc3QgX19IQVZFX1NUUlVDVF9URVJNSU9TX0NfT1NQRUVEID0g
MQorY29uc3QgX09fTk9GT0xMT1cgPSBfX19PX05PRk9MTE9XCitjb25zdCBfTkRBX0xJTktfTkVU
TlNJRCA9IDEwCitjb25zdCBfX19VU0VfSVNPQzk5ID0gMQorY29uc3QgX1JURl9NU1MgPSBfUlRG
X01UVQorY29uc3QgX19CSVRTX1NURElOVF9VSU5UTl9IID0gMQorY29uc3QgX0ZfT0ZEX1NFVExL
VyA9IDM4Citjb25zdCBfUlRBX0VOQ0FQID0gMjIKK2NvbnN0IF9FRVhJU1QgPSAxNworY29uc3Qg
X1BBQ0tFVF9WRVJTSU9OID0gMTAKK2NvbnN0IF9UQ1BfQ0xPU0UgPSA3Citjb25zdCBfU09fQVRU
QUNIX0JQRiA9IDUwCitjb25zdCBfUFRSQUNFX0VWRU5UX1NFQ0NPTVAgPSA3Citjb25zdCBfQVJQ
SFJEX0NIQU9TID0gNQorY29uc3QgX19fRkxUMzJfTUFOVF9ESUdfXyA9IDI0Citjb25zdCBfX19J
RkxBX1ZGX0lORk9fTUFYID0gMgorY29uc3QgX0VUSF9QX0JBVE1BTiA9IDB4NDMwNQorY29uc3Qg
X19TVEFUX1ZFUiA9IF9fU1RBVF9WRVJfTElOVVgKK2NvbnN0IF9QT0xMX01TRyA9IDMKK2NvbnN0
IF9TWVNfc3dhcG9uID0gX19fTlJfc3dhcG9uCitjb25zdCBfUlRGX0FERFJDT05GID0gMHgwMDA0
MDAwMAorY29uc3QgX19fTERCTF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBfUEZfTVBMUyA9
IDI4Citjb25zdCBfX0JJVFNfU0lHSU5GT19BUkNIX0ggPSAxCitjb25zdCBfSUNNUDZfRklMVEVS
X1BBU1NPTkxZID0gNAorY29uc3QgX0lQX1RUTCA9IDIKK2NvbnN0IF9TWVNfcnRfc2lncXVldWVp
bmZvID0gX19fTlJfcnRfc2lncXVldWVpbmZvCitjb25zdCBfX1NDX1hPUEVOX0VOSF9JMThOID0g
OTMKK2NvbnN0IF9fX05SX3RpbWVyX3NldHRpbWUgPSAyMjMKK2NvbnN0IF9QVFJBQ0VfT19TVVNQ
RU5EX1NFQ0NPTVAgPSAyMDk3MTUyCitjb25zdCBfU1lTX2dldHBtc2cgPSBfX19OUl9nZXRwbXNn
Citjb25zdCBfX1NZU19SRVNPVVJDRV9IID0gMQorY29uc3QgX0RFRkZJTEVNT0RFID0gKF9TX0lS
VVNSfF9TX0lXVVNSfF9TX0lSR1JQfF9TX0lXR1JQfF9TX0lST1RIfF9TX0lXT1RIKQorY29uc3Qg
X1JUQV9EU1QgPSAxCitjb25zdCBfX19TVERDX0lFQ181NTlfXyA9IDEKK2NvbnN0IF9TWVNfYXJj
aF9wcmN0bCA9IF9fX05SX2FyY2hfcHJjdGwKK2NvbnN0IF9BRl9ORVRST00gPSBfUEZfTkVUUk9N
Citjb25zdCBfSVBUT1NfVEhST1VHSFBVVCA9IDB4MDgKK2NvbnN0IF9ORFRBX1RIUkVTSDIgPSAz
Citjb25zdCBfQ0xPQ0tfQk9PVFRJTUVfQUxBUk0gPSA5Citjb25zdCBfSUZMQV9NQUNWTEFOX01P
REUgPSAxCitjb25zdCBfU19JV1JJVEUgPSBfU19JV1VTUgorY29uc3QgX0lDTVA2X1BBUkFNUFJP
Ql9PUFRJT04gPSAyCitjb25zdCBfX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfQ0ZMQUdTID0gMTEy
NAorY29uc3QgX0VUSF9QX1RSXzgwMl8yID0gMHgwMDExCitjb25zdCBfVElPQ01fRFRSID0gMHgw
MDIKK2NvbnN0IF9fU0NfVVNFUl9HUk9VUFNfUiA9IDE2NworY29uc3QgX0VUSF9QX0FMTCA9IDB4
MDAwMworY29uc3QgX1NZU19mY2hvd24gPSBfX19OUl9mY2hvd24KK2NvbnN0IF9JUFBPUlRfU1lT
VEFUID0gMTEKK2NvbnN0IF9fX0xPTkdfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0
IF9TSUdTVEtGTFQgPSAxNgorY29uc3QgX1JURl9NT0RJRklFRCA9IDB4MDAyMAorY29uc3QgX1BS
SU9fUFJPQ0VTUyA9IDAKK2NvbnN0IF9fX05SX3NlbWdldCA9IDY0Citjb25zdCBfSUZBX0ZfU1RB
QkxFX1BSSVZBQ1kgPSAweDgwMAorY29uc3QgX1JUTkhfQ09NUEFSRV9NQVNLID0gKF9SVE5IX0Zf
REVBRCB8IF9SVE5IX0ZfTElOS0RPV04gfCBfUlROSF9GX09GRkxPQUQpCitjb25zdCBfTkxNX0Zf
QUNLX1RMVlMgPSAweDIwMAorY29uc3QgX0xfSU5DUiA9IDEKK2NvbnN0IF9SV0hfV1JJVEVfTElG
RV9TSE9SVCA9IDIKK2NvbnN0IF9FQUZOT1NVUFBPUlQgPSA5NworY29uc3QgX0lGTEFfQk9ORF9B
RF9MQUNQX1JBVEUgPSAyMQorY29uc3QgX1NZU19zZWxlY3QgPSBfX19OUl9zZWxlY3QKK2NvbnN0
IF9JRkxBX1RVTl9OVU1fUVVFVUVTID0gOAorY29uc3QgX19fU0lfTUFYX1NJWkUgPSAxMjgKK2Nv
bnN0IF9JRkxBX0NPU1QgPSA4Citjb25zdCBfTkxNU0dfRE9ORSA9IDB4MworY29uc3QgX19fTlJf
c3RhdGZzID0gMTM3Citjb25zdCBfX19GX0dFVE9XTl9FWCA9IDE2Citjb25zdCBfX0NTX1BPU0lY
X1Y2X0lMUDMyX09GRkJJR19MSUJTID0gMTEyMgorY29uc3QgX19fTlJfZ2V0ZGVudHM2NCA9IDIx
NworY29uc3QgX0hBVkVfSU5PVElGWV9JTklUMSA9IDEKK2NvbnN0IF9BSV9WNE1BUFBFRCA9IDB4
MDAwOAorY29uc3QgX1NDTnVGQVNUOCA9ICJoaHUiCitjb25zdCBfX19OUl9lcG9sbF9jdGwgPSAy
MzMKK2NvbnN0IF9BQ0NFU1NQRVJNUyA9IChfU19JUldYVXxfU19JUldYR3xfU19JUldYTykKK2Nv
bnN0IF9UQ0FfRFVNUF9JTlZJU0lCTEUgPSAxMAorY29uc3QgX1NJR0VWX1RIUkVBRF9JRCA9IDQK
K2NvbnN0IF9GRklfVFlQRV9JTlQgPSAxCitjb25zdCBfTkxfQVJHTUFYID0gX19QT1NJWF9BUkdf
TUFYCitjb25zdCBfU1NfRElTQUJMRSA9IDIKK2NvbnN0IF9FVEhfUF9DQU4gPSAweDAwMEMKK2Nv
bnN0IF9fX1NJWkVPRl9QVEhSRUFEX0JBUlJJRVJBVFRSX1QgPSA0Citjb25zdCBfX19GTFRfRVZB
TF9NRVRIT0RfXyA9IDAKK2NvbnN0IF9fX05SX3NlbW9wID0gNjUKK2NvbnN0IF9QX0FMTCA9IDAK
K2NvbnN0IF9FVEhfUF9NUExTX01DID0gMHg4ODQ4Citjb25zdCBfX19OUl9wd3JpdGV2MiA9IDMy
OAorY29uc3QgX1NZU19hY2NlcHQ0ID0gX19fTlJfYWNjZXB0NAorY29uc3QgX19fU0laRU9GX1BU
UkRJRkZfVF9fID0gOAorY29uc3QgX19fRkxUMzJYX0RFTk9STV9NSU5fXyA9IDEuMQorY29uc3Qg
X0lGTEFfQk9ORF9TTEFWRV9RVUVVRV9JRCA9IDUKK2NvbnN0IF9SVFBST1RfWE9SUCA9IDE0Citj
b25zdCBfU1lTX3Byb2Nlc3Nfdm1fd3JpdGV2ID0gX19fTlJfcHJvY2Vzc192bV93cml0ZXYKK2Nv
bnN0IF9fX1RDQV9ST09UX01BWCA9IDUKK2NvbnN0IF9JRkxBX09QRVJTVEFURSA9IDE2Citjb25z
dCBfSUNNUDZfUlJfUENPVVNFX0ZMQUdTX0RFQ1JQTFRJTUUgPSAweDQwCitjb25zdCBfTkRUUEFf
UFJPWFlfREVMQVkgPSAxMworY29uc3QgX19fUkxJTUlUX05QUk9DID0gNgorY29uc3QgX1NZU19x
dW90YWN0bCA9IF9fX05SX3F1b3RhY3RsCitjb25zdCBfX0lPQ19OT05FID0gMAorY29uc3QgX0lG
TEFfQk9ORF9TTEFWRV9NSUlfU1RBVFVTID0gMgorY29uc3QgX1NPX1NFQ1VSSVRZX0VOQ1JZUFRJ
T05fVFJBTlNQT1JUID0gMjMKK2NvbnN0IF9TVEFUWF9NT0RFID0gMHgwMDAyCitjb25zdCBfRkZJ
X1RZUEVfVUlOVDggPSA1Citjb25zdCBfUFJPVF9HUk9XU0RPV04gPSAweDAxMDAwMDAwCitjb25z
dCBfTUFQX0dST1dTRE9XTiA9IDB4MDAxMDAKK2NvbnN0IF9FQkFETVNHID0gNzQKK2NvbnN0IF9N
QVBfUE9QVUxBVEUgPSAweDA4MDAwCitjb25zdCBfVElNRV9ERUwgPSAyCitjb25zdCBfX19GX1NF
VE9XTiA9IDgKK2NvbnN0IF9VSU5UMTZfTUFYID0gKDY1NTM1KQorY29uc3QgX05MX0xBTkdNQVgg
PSBfX1BPU0lYMl9MSU5FX01BWAorY29uc3QgX01TX0xBWllUSU1FID0gMzM1NTQ0MzIKK2NvbnN0
IF9TWVNfbWtkaXIgPSBfX19OUl9ta2RpcgorY29uc3QgX0lGTEFfTUFDU0VDX1dJTkRPVyA9IDUK
K2NvbnN0IF9fX05SX2lvX2dldGV2ZW50cyA9IDIwOAorY29uc3QgX0ZGSV9ERUZBVUxUX0FCSSA9
IDIKK2NvbnN0IF9TWVNfcmVuYW1lID0gX19fTlJfcmVuYW1lCitjb25zdCBfRVRIX1BfRFNBID0g
MHgwMDFCCitjb25zdCBfUFRSQUNFX1NFVF9USFJFQURfQVJFQSA9IDI2Citjb25zdCBfSVBfUkVD
VlRUTCA9IDEyCitjb25zdCBfWERQX0ZMQUdTX0hXX01PREUgPSAoMSA8PCAzKQorY29uc3QgX01B
WF9IQU5ETEVfU1ogPSAxMjgKK2NvbnN0IF9JRkZfREVCVUcgPSA0Citjb25zdCBfQUZfRUNPTkVU
ID0gX1BGX0VDT05FVAorY29uc3QgX1RDQV9SQVRFID0gNQorY29uc3QgX19YT1BFTl9FTkhfSTE4
TiA9IDEKK2NvbnN0IF9fU0NfMl9GT1JUX1JVTiA9IDUwCitjb25zdCBfTkxNU0dFUlJfQVRUUl9D
T09LSUUgPSAzCitjb25zdCBfX19ORFRQQV9NQVggPSAxOQorY29uc3QgX0lGTEFfTlVNX1ZGID0g
MjEKK2NvbnN0IF9SVEFfRVhQSVJFUyA9IDIzCitjb25zdCBfUE9MTF9PVVQgPSAyCitjb25zdCBf
X0JJVFNfU1NfRkxBR1NfSCA9IDEKK2NvbnN0IF9JUE9QVF9OT1AgPSAxCitjb25zdCBfSUZOQU1T
SVogPSBfSUZfTkFNRVNJWkUKK2NvbnN0IF9TWVNfdmhhbmd1cCA9IF9fX05SX3ZoYW5ndXAKK2Nv
bnN0IF9GU19IVUdFX0ZJTEVfRkwgPSAweDAwMDQwMDAwCitjb25zdCBfU0lHVFJBUCA9IDUKK2Nv
bnN0IF9fX0ZMVDEyOF9ESUdfXyA9IDMzCitjb25zdCBfU1lTX3RpbWVyZmRfZ2V0dGltZSA9IF9f
X05SX3RpbWVyZmRfZ2V0dGltZQorY29uc3QgX0JQRl9MRU4gPSAweDgwCitjb25zdCBfQklHX0VO
RElBTiA9IF9fX0JJR19FTkRJQU4KK2NvbnN0IF9SVE1HUlBfSVBWNF9ST1VURSA9IDB4NDAKK2Nv
bnN0IF9CMTAwMDAwMCA9IDAwMTAwMTAKK2NvbnN0IF9TWVNfZ2V0Y3B1ID0gX19fTlJfZ2V0Y3B1
Citjb25zdCBfX19OUl9tcV90aW1lZHJlY2VpdmUgPSAyNDMKK2NvbnN0IF9fUEFUSF9ORVRXT1JL
UyA9ICIvZXRjL25ldHdvcmtzIgorY29uc3QgX1VTSU5HX1NQTElUX1NUQUNLID0gMQorY29uc3Qg
X0ZGSV9UWVBFX1NJTlQzMiA9IDEwCitjb25zdCBfX19STElNSVRfT0ZJTEUgPSA3Citjb25zdCBf
SUZMQV9CUl9NQ0FTVF9RVUVSWV9SRVNQT05TRV9JTlRWTCA9IDM0Citjb25zdCBfU0lPQ0dJRk1F
TSA9IDB4ODkxZgorY29uc3QgX0lOVF9GQVNUMTZfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3Qg
X0hBVkVfU1lTX1NFTEVDVF9IID0gMQorY29uc3QgX09fV1JPTkxZID0gMDEKK2NvbnN0IF9fX05S
X3ByZWFkdiA9IDI5NQorY29uc3QgX1NZU19hY2N0ID0gX19fTlJfYWNjdAorY29uc3QgX0ROX1JF
TkFNRSA9IDB4MDAwMDAwMTAKK2NvbnN0IF9TWVNfc2V0cmV1aWQgPSBfX19OUl9zZXRyZXVpZAor
Y29uc3QgX0lGTEFfWERQX0RSVl9QUk9HX0lEID0gNQorY29uc3QgX0VBTFJFQURZID0gMTE0Citj
b25zdCBfTkRUUEFfUVVFVUVfTEVOID0gOAorY29uc3QgX19fR0xJQkNfVVNFX0lFQ182MDU1OV9G
VU5DU19FWFQgPSAxCitjb25zdCBfSUxMX1BSVk9QQyA9IDUKK2NvbnN0IF9UVU5HRVRGRUFUVVJF
U192YWwgPSAyMTQ3NzY3NTAzCitjb25zdCBfUlROTEdSUF9JUFY2X1JPVVRFID0gMTEKK2NvbnN0
IF9fX05SX3RpbWVyX2dldHRpbWUgPSAyMjQKK2NvbnN0IF9FVEhfUF9BT0UgPSAweDg4QTIKK2Nv
bnN0IF9fX05SX2dldGdyb3VwcyA9IDExNQorY29uc3QgX1NZU19yc2VxID0gX19fTlJfcnNlcQor
Y29uc3QgX0ZJT1FTSVpFID0gMHg1NDYwCitjb25zdCBfSVBPUFRfQ09OVFJPTCA9IDB4MDAKK2Nv
bnN0IF9fX1NJX0VSUk5PX1RIRU5fQ09ERSA9IDEKK2NvbnN0IF9GUEVfSU5URElWID0gMQorY29u
c3QgX01TX05PQVRJTUUgPSAxMDI0Citjb25zdCBfQ1g4Nl9ESVIwID0gMHhmZQorY29uc3QgX19f
TlJfcGVyZl9ldmVudF9vcGVuID0gMjk4Citjb25zdCBfRkZJX0JBRF9BQkkgPSAyCitjb25zdCBf
X19OUl9nZXRfbWVtcG9saWN5ID0gMjM5Citjb25zdCBfTUNMX0NVUlJFTlQgPSAxCitjb25zdCBf
SVBfWEZSTV9QT0xJQ1kgPSAxNworY29uc3QgX19fU0laRU9GX1NIT1JUX18gPSAyCitjb25zdCBf
U1lTX2ZzdGF0ID0gX19fTlJfZnN0YXQKK2NvbnN0IF9JRkxBX1ZGSU5GT19MSVNUID0gMjIKK2Nv
bnN0IF9UQ1BfRklOX1dBSVQyID0gNQorY29uc3QgX19TQ19DUFVUSU1FID0gMTM4Citjb25zdCBf
VFVOX0ZfVFNPX0VDTiA9IDB4MDgKK2NvbnN0IF9fX1dPUkRTSVpFX1RJTUU2NF9DT01QQVQzMiA9
IDEKK2NvbnN0IF9JRkxBX0lORk9fVU5TUEVDID0gMAorY29uc3QgX0VUSF9QX1hEU0EgPSAweDAw
RjgKK2NvbnN0IF9JUF9QTVRVRElTQyA9IDEwCitjb25zdCBfQVRfUkVNT1ZFRElSID0gMHgyMDAK
K2NvbnN0IF9USU9DU1dJTlNaID0gMHg1NDE0Citjb25zdCBfX19GTFQzMl9IQVNfREVOT1JNX18g
PSAxCitjb25zdCBfRlNMQUJFTF9NQVggPSAyNTYKK2NvbnN0IF9PX05PTkJMT0NLID0gMDQwMDAK
K2NvbnN0IF9GX0dFVF9TRUFMUyA9IDEwMzQKK2NvbnN0IF9QQUNLRVRfVFhfUklORyA9IDEzCitj
b25zdCBfVENQX01TU19ERUZBVUxUID0gNTM2Citjb25zdCBfQkNfRElNX01BWCA9IF9fUE9TSVgy
X0JDX0RJTV9NQVgKK2NvbnN0IF9JUE9QVF9MU1JSID0gMTMxCitjb25zdCBfX1NDX1Y3X0xQNjRf
T0ZGNjQgPSAyMzkKK2NvbnN0IF9QUl9HRVRfUERFQVRIU0lHID0gMgorY29uc3QgX1NZU19zeW1s
aW5rID0gX19fTlJfc3ltbGluaworY29uc3QgX19fREVDNjRfTUFOVF9ESUdfXyA9IDE2Citjb25z
dCBfUE9SVF9TRUxGX1ZGID0gLTEKK2NvbnN0IF9fU0NfU1lNTE9PUF9NQVggPSAxNzMKK2NvbnN0
IF9YRFBfRkxBR1NfVVBEQVRFX0lGX05PRVhJU1QgPSAoMSA8PCAwKQorY29uc3QgX01BQ1ZMQU5f
TUFDQUREUl9BREQgPSAwCitjb25zdCBfX0dSUF9IID0gMQorY29uc3QgX19fTlJfZGVsZXRlX21v
ZHVsZSA9IDE3NgorY29uc3QgX1NZU19zZW5kdG8gPSBfX19OUl9zZW5kdG8KK2NvbnN0IF9JRkxB
X1ZMQU5fUU9TX01BUFBJTkcgPSAxCitjb25zdCBfU0lHVEVSTSA9IDE1Citjb25zdCBfUFJfU1ZF
X0dFVF9WTCA9IDUxCitjb25zdCBfX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMgPSAxMTE0Citj
b25zdCBfSUZMQV9YRFBfSFdfUFJPR19JRCA9IDcKK2NvbnN0IF9fU1lTX1VDT05URVhUX0ggPSAx
Citjb25zdCBfX19OUl9yZWFkbGlua2F0ID0gMjY3Citjb25zdCBfSUZMQV9HVFBfVU5TUEVDID0g
MAorY29uc3QgX1ZMTkVYVCA9IDE1Citjb25zdCBfUE9TSVhfTUFEVl9XSUxMTkVFRCA9IDMKK2Nv
bnN0IF9fX3J1c2FnZV9kZWZpbmVkID0gMQorY29uc3QgX1NZU19zZWN1cml0eSA9IF9fX05SX3Nl
Y3VyaXR5Citjb25zdCBfWDg2X0NSNF9TTUFQX0JJVCA9IDIxCitjb25zdCBfVFVOX0ZfVFNPNiA9
IDB4MDQKK2NvbnN0IF9BRl9DQU4gPSBfUEZfQ0FOCitjb25zdCBfX19OUl9ydF9zaWdwcm9jbWFz
ayA9IDE0Citjb25zdCBfSU5UX0xFQVNUMTZfV0lEVEggPSAxNgorY29uc3QgX19fTlJfZmxvY2sg
PSA3MworY29uc3QgX0NMT05FX1BBUkVOVCA9IDB4MDAwMDgwMDAKK2NvbnN0IF9SVEFfQUxJR05U
TyA9IDQKK2NvbnN0IF9QT1NJWF9NQURWX1NFUVVFTlRJQUwgPSAyCitjb25zdCBfU1lTX3NldGhv
c3RuYW1lID0gX19fTlJfc2V0aG9zdG5hbWUKK2NvbnN0IF9TWVNfdnNlcnZlciA9IF9fX05SX3Zz
ZXJ2ZXIKK2NvbnN0IF9YODZfRUZMQUdTX05UX0JJVCA9IDE0Citjb25zdCBfTU5UX0VYUElSRSA9
IDQKK2NvbnN0IF9QRl9TTUMgPSA0MworY29uc3QgX0VBSV9OT05BTUUgPSAtMgorY29uc3QgX19f
TlJfcmVzdGFydF9zeXNjYWxsID0gMjE5Citjb25zdCBfX1NDX1RIUkVBRF9LRVlTX01BWCA9IDc0
Citjb25zdCBfSUZMQV9CUl9NQ0FTVF9TVEFSVFVQX1FVRVJZX0lOVFZMID0gMzUKK2NvbnN0IF9J
Q01QNl9JTkZPTVNHX01BU0sgPSAweDgwCitjb25zdCBfSVBPSUJfTU9ERV9DT05ORUNURUQgPSAx
Citjb25zdCBfQ0xPQ0FMID0gMDAwNDAwMAorY29uc3QgX0hBVkVfU1lTX1VTRVJfSCA9IDEKK2Nv
bnN0IF9YODZfRUZMQUdTX0lPUExfQklUID0gMTIKK2NvbnN0IF9JRkxBX0JSUE9SVF9ST09UX0lE
ID0gMTMKK2NvbnN0IF9UQ1NFVEEgPSAweDU0MDYKK2NvbnN0IF9TWVNfcmVhZGFoZWFkID0gX19f
TlJfcmVhZGFoZWFkCitjb25zdCBfSUZMQV9TVEFUUzY0ID0gMjMKK2NvbnN0IF9fU0NfVUlOVF9N
QVggPSAxMTYKK2NvbnN0IF9QVFJBQ0VfUEVFS1NJR0lORk8gPSAxNjkwNQorY29uc3QgX1g4Nl9D
UjRfVk1FX0JJVCA9IDAKK2NvbnN0IF9fWE9QRU5fU09VUkNFX0VYVEVOREVEID0gMQorY29uc3Qg
X19fVVNFX0xBUkdFRklMRSA9IDEKK2NvbnN0IF9fX1NJWkVfTUFYX18gPSAweGZmZmZmZmZmZmZm
ZmZmZmYKK2NvbnN0IF9TS0ZfQURfQUxVX1hPUl9YID0gNDAKK2NvbnN0IF9fSU5UVFlQRVNfSCA9
IDEKK2NvbnN0IF9SVE5IX0ZfUEVSVkFTSVZFID0gMgorY29uc3QgX1NPX1RJTUVTVEFNUCA9IDI5
Citjb25zdCBfUlRNU0dfT1ZFUlJVTiA9IF9OTE1TR19PVkVSUlVOCitjb25zdCBfQlVTX01DRUVS
Ul9BTyA9IDUKK2NvbnN0IF9fX0lGTEFfTUFDVkxBTl9NQVggPSA3Citjb25zdCBfSVBUT1NfRUNO
X01BU0sgPSAweDAzCitjb25zdCBfQlVTX01DRUVSUl9BUiA9IDQKK2NvbnN0IF9CNTAwMDAwID0g
MDAxMDAwNQorY29uc3QgX19fU1REQ19IT1NURURfXyA9IDEKK2NvbnN0IF9fX0lOVF9MRUFTVDMy
X1dJRFRIX18gPSAzMgorY29uc3QgX1NJT0NTSUZMSU5LID0gMHg4OTExCitjb25zdCBfUkVOQU1F
X0VYQ0hBTkdFID0gKDEgPDwgMSkKK2NvbnN0IF9NQURWX0RPRk9SSyA9IDExCitjb25zdCBfX1ND
X1hCUzVfTFA2NF9PRkY2NCA9IDEyNworY29uc3QgX19MQVJHRUZJTEU2NF9TT1VSQ0UgPSAxCitj
b25zdCBfU09fRE9OVFJPVVRFID0gNQorY29uc3QgX19TQ19UUkFDRV9FVkVOVF9GSUxURVIgPSAx
ODIKK2NvbnN0IF9GX1NFQUxfV1JJVEUgPSAweDAwMDgKK2NvbnN0IF9TVERFUlJfRklMRU5PID0g
MgorY29uc3QgX1RDUF9TRU5EX1FVRVVFID0gMgorY29uc3QgX0lQVkxBTl9NT0RFX01BWCA9IDMK
K2NvbnN0IF9fX09fTk9BVElNRSA9IDAxMDAwMDAwCitjb25zdCBfUEZfU05BID0gMjIKK2NvbnN0
IF9JRkxBX1ZGX1NUQVRTX1JYX0RST1BQRUQgPSA3Citjb25zdCBfU09fUEFTU1NFQyA9IDM0Citj
b25zdCBfSUdOUEFSID0gMDAwMDAwNAorY29uc3QgX1NZU190aW1lID0gX19fTlJfdGltZQorY29u
c3QgX1RDUF9OT1RTRU5UX0xPV0FUID0gMjUKK2NvbnN0IF9JRkxBX1ZYTEFOX0dST1VQID0gMgor
Y29uc3QgX05PRkxTSCA9IDAwMDAyMDAKK2NvbnN0IF9TT0xfRENDUCA9IDI2OQorY29uc3QgX1NZ
U19zeXNsb2cgPSBfX19OUl9zeXNsb2cKK2NvbnN0IF9TWVNfaW9fZ2V0ZXZlbnRzID0gX19fTlJf
aW9fZ2V0ZXZlbnRzCitjb25zdCBfUlRNX05FV01EQiA9IDg0Citjb25zdCBfSUZMQV9JTkZPX1NM
QVZFX0tJTkQgPSA0Citjb25zdCBfSUZMQV9WWExBTl9MMk1JU1MgPSAxMworY29uc3QgX19TQ19M
RVZFTDNfQ0FDSEVfU0laRSA9IDE5NAorY29uc3QgX0hBVkVfTElOVVhfSUZfQUREUl9IID0gMQor
Y29uc3QgX09fQ1JFQVQgPSAwMTAwCitjb25zdCBfRU5PREVWID0gMTkKK2NvbnN0IF9fX0ZMVDMy
X0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9USU9DR1BHUlBfdmFsID0gMjE1MTkKK2NvbnN0
IF9TQ051TEVBU1QxNiA9ICJodSIKK2NvbnN0IF9fX05SX3BvbGwgPSA3Citjb25zdCBfX1NDX1RI
UkVBRF9QUklPX0lOSEVSSVQgPSA4MAorY29uc3QgX0dBSV9OT1dBSVQgPSAxCitjb25zdCBfSUZB
X0ZfTk9QUkVGSVhST1VURSA9IDB4MjAwCitjb25zdCBfU1lTX3dyaXRlID0gX19fTlJfd3JpdGUK
K2NvbnN0IF9TWVNfZmFub3RpZnlfaW5pdCA9IF9fX05SX2Zhbm90aWZ5X2luaXQKK2NvbnN0IF9F
VEhfUF9BUlAgPSAweDA4MDYKK2NvbnN0IF9fX05SX2lvcGwgPSAxNzIKK2NvbnN0IF9fX0ZMVDMy
WF9NQVhfXyA9IDEuMQorY29uc3QgX0VDSE9FID0gMDAwMDAyMAorY29uc3QgX0lQT1BUX1RTX1RT
QU5EQUREUiA9IDEKK2NvbnN0IF9TT19QRUVSQ1JFRCA9IDE3Citjb25zdCBfSUZMQV9CUl9IRUxM
T19USU1FID0gMgorY29uc3QgX0ZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSA9IDB4MDgKK2NvbnN0
IF9fU0NfMl9QQlNfQ0hFQ0tQT0lOVCA9IDE3NQorY29uc3QgX0VDSE9LID0gMDAwMDA0MAorY29u
c3QgX0lGTEFfSVBWTEFOX01PREUgPSAxCitjb25zdCBfSVBWNl9KT0lOX0FOWUNBU1QgPSAyNwor
Y29uc3QgX0VBSV9JTlBST0dSRVNTID0gLTEwMAorY29uc3QgX1JUTkhfQUxJR05UTyA9IDQKK2Nv
bnN0IF9JUE9QVF9TSUQgPSBfSVBPUFRfU0FUSUQKK2NvbnN0IF9fX0ZMVDMyX01BWF9FWFBfXyA9
IDEyOAorY29uc3QgX05EX09QVF9UQVJHRVRfTElOS0FERFIgPSAyCitjb25zdCBfRl9HRVRfRklM
RV9SV19ISU5UID0gMTAzNworY29uc3QgX0ZGSV9GSVJTVF9BQkkgPSAwCitjb25zdCBfTkVUTElO
S19FQ1JZUFRGUyA9IDE5Citjb25zdCBfQ1g4Nl9HQ1IgPSAweGI4Citjb25zdCBfSVBfUk9VVEVS
X0FMRVJUID0gNQorY29uc3QgX19fTlJfc3BsaWNlID0gMjc1Citjb25zdCBfVElPQ1NDVFRZX3Zh
bCA9IDIxNTE4Citjb25zdCBfX19OUl9rZXljdGwgPSAyNTAKK2NvbnN0IF9NU19OT1NFQyA9ICgx
PDwyOCkKK2NvbnN0IF9OTE1fRl9DQVBQRUQgPSAweDEwMAorY29uc3QgX19TQ19ORVRXT1JLSU5H
ID0gMTUyCitjb25zdCBfX19BVE9NSUNfUkVMRUFTRSA9IDMKK2NvbnN0IF9JRkxBX1ZGX1VOU1BF
QyA9IDAKK2NvbnN0IF9fX05SX2ZjaG1vZGF0ID0gMjY4Citjb25zdCBfUlRGX0hPU1QgPSAweDAw
MDQKK2NvbnN0IF9JRkZfUEVSU0lTVCA9IDB4MDgwMAorY29uc3QgX0ZTX05PQ09NUF9GTCA9IDB4
MDAwMDA0MDAKK2NvbnN0IF9TT19TRUNVUklUWV9BVVRIRU5USUNBVElPTiA9IDIyCitjb25zdCBf
QlBGX0pFUSA9IDB4MTAKK2NvbnN0IF9GRklfVFlQRV9VSU5UMzIgPSA5Citjb25zdCBfU1lTX2lu
b3RpZnlfYWRkX3dhdGNoID0gX19fTlJfaW5vdGlmeV9hZGRfd2F0Y2gKK2NvbnN0IF9QT1NJWF9N
QURWX1JBTkRPTSA9IDEKK2NvbnN0IF9SVEZfTVVMVElDQVNUID0gMHgyMDAwMDAwMAorY29uc3Qg
X05UUF9BUEkgPSA0Citjb25zdCBfSVBWNl9NVUxUSUNBU1RfSUYgPSAxNworY29uc3QgX1NPX01B
WF9QQUNJTkdfUkFURSA9IDQ3Citjb25zdCBfSEFWRV9MT0cxMEwgPSAxCitjb25zdCBfSUZMQV9W
Rl9SU1NfUVVFUllfRU4gPSA3Citjb25zdCBfX19GTFQ2NF9NQVhfMTBfRVhQX18gPSAzMDgKK2Nv
bnN0IF9QVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAgPSAzMgorY29uc3QgX1NZU19kdXAgPSBfX19O
Ul9kdXAKK2NvbnN0IF9BUlBIUkRfSUVFRTgwMjE1NF9QSFkgPSA4MDUKK2NvbnN0IF9fX05SX2lv
X3NldHVwID0gMjA2Citjb25zdCBfSVBPUFRfU1NSUiA9IDEzNworY29uc3QgX19ESVJFTlRfTUFU
Q0hFU19ESVJFTlQ2NCA9IDEKK2NvbnN0IF9QQUNLRVRfSE9TVCA9IDAKK2NvbnN0IF9BUlBIUkRf
RExDSSA9IDE1Citjb25zdCBfSUZMQV9JTkVUNl9DT05GID0gMgorY29uc3QgX0lGTEFfVkZfTElO
S19TVEFURV9ESVNBQkxFID0gMgorY29uc3QgX19faXRpbWVyc3BlY19kZWZpbmVkID0gMQorY29u
c3QgX19fTlJfcGl2b3Rfcm9vdCA9IDE1NQorY29uc3QgX0ZTX0VOQ1JZUFRfRkwgPSAweDAwMDAw
ODAwCitjb25zdCBfX1NZU19QUkNUTF9IID0gMQorY29uc3QgX19fUkxJTUlUX1JUUFJJTyA9IDE0
Citjb25zdCBfQ0xPQ0tfTU9OT1RPTklDID0gMQorY29uc3QgX19fVUlOVF9GQVNUMzJfTUFYX18g
PSAweGZmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9ORVRMSU5LX0NSWVBUTyA9IDIxCitjb25zdCBf
RVRIX1BfRklQID0gMHg4OTE0Citjb25zdCBfT0NSTkwgPSAwMDAwMDEwCitjb25zdCBfX19OUl9z
ZXRnaWQgPSAxMDYKK2NvbnN0IF9JRkZfVk5FVF9IRFIgPSAweDQwMDAKK2NvbnN0IF9TQ051TEVB
U1QzMiA9ICJ1IgorY29uc3QgX1BSSXhMRUFTVDE2ID0gIngiCitjb25zdCBfX19OUl9pb3ByaW9f
c2V0ID0gMjUxCitjb25zdCBfX1NFTUFQSE9SRV9IID0gMQorY29uc3QgX1JURl9TVEFUSUMgPSAw
eDA0MDAKK2NvbnN0IF9QUl9FTkRJQU5fUFBDX0xJVFRMRSA9IDIKK2NvbnN0IF9fX0ZEX1NFVFNJ
WkUgPSAxMDI0Citjb25zdCBfU1lTX3NlY2NvbXAgPSBfX19OUl9zZWNjb21wCitjb25zdCBfX19M
REJMX01JTl9fID0gMS4xCitjb25zdCBfX19ERUMzMl9NQVhfXyA9IDkuOTk5OTk5RTk2Citjb25z
dCBfX19JTlRQVFJfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9fX0ZJTEVfZGVm
aW5lZCA9IDEKK2NvbnN0IF9NT0RfTkFOTyA9IF9BREpfTkFOTworY29uc3QgX19fRkxUMzJfRVBT
SUxPTl9fID0gMS4xCitjb25zdCBfWDg2X0VGTEFHU19BQ19CSVQgPSAxOAorY29uc3QgX1BST1Rf
RVhFQyA9IDB4NAorY29uc3QgX0lGTEFfU1RBVFNfVU5TUEVDID0gMAorY29uc3QgX0lGTEFfVkZf
UE9SVF9VTlNQRUMgPSAwCitjb25zdCBfU0NIRURfT1RIRVIgPSAwCitjb25zdCBfQUxMUEVSTVMg
PSAoX1NfSVNVSUR8X1NfSVNHSUR8X1NfSVNWVFh8X1NfSVJXWFV8X1NfSVJXWEd8X1NfSVJXWE8p
Citjb25zdCBfX19OUl9nZXRkZW50cyA9IDc4Citjb25zdCBfTkRUUEFfQkFTRV9SRUFDSEFCTEVf
VElNRSA9IDQKK2NvbnN0IF9FVEhfUF9XQ0NQID0gMHg4ODNFCitjb25zdCBfX0NTX1BPU0lYX1Y2
X0lMUDMyX09GRkJJR19MSU5URkxBR1MgPSAxMTIzCitjb25zdCBfSUZMQV9FVkVOVF9SRUJPT1Qg
PSAxCitjb25zdCBfQVJQSFJEX1JBV0hETEMgPSA1MTgKK2NvbnN0IF9DTERfU1RPUFBFRCA9IDUK
K2NvbnN0IF9fX0ZMVDMyX0RFQ0lNQUxfRElHX18gPSA5Citjb25zdCBfX19TX0lTVlRYID0gMDEw
MDAKK2NvbnN0IF9BRl9JVUNWID0gX1BGX0lVQ1YKK2NvbnN0IF9SVE5MR1JQX05PUDIgPSAxNAor
Y29uc3QgX19fY29kZV9tb2RlbF9zbWFsbF9fID0gMQorY29uc3QgX1RDUF9GQVNUT1BFTl9DT05O
RUNUID0gMzAKK2NvbnN0IF9fU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCA9IDgxCitjb25zdCBfX0JJ
VFNfU0lHTlVNX0dFTkVSSUNfSCA9IDEKK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9FWFRSRU1FID0g
NQorY29uc3QgX0lOVE1BWF9XSURUSCA9IDY0Citjb25zdCBfRURPTSA9IDMzCitjb25zdCBfU1lT
X3NjaGVkX2dldHNjaGVkdWxlciA9IF9fX05SX3NjaGVkX2dldHNjaGVkdWxlcgorY29uc3QgX0VY
VEEgPSBfQjE5MjAwCitjb25zdCBfRVhUQiA9IF9CMzg0MDAKK2NvbnN0IF9TWVNfcGVyZl9ldmVu
dF9vcGVuID0gX19fTlJfcGVyZl9ldmVudF9vcGVuCitjb25zdCBfU1lTX3NldG5zID0gX19fTlJf
c2V0bnMKK2NvbnN0IF9fSU9DX1NJWkVCSVRTID0gMTQKK2NvbnN0IF9fWE9QRU5fTEVHQUNZID0g
MQorY29uc3QgX19QT1NJWDJfTE9DQUxFREVGID0gX19fUE9TSVgyX1RISVNfVkVSU0lPTgorY29u
c3QgX1RUWV9OQU1FX01BWCA9IDMyCitjb25zdCBfX1BPU0lYX1JFX0RVUF9NQVggPSAyNTUKK2Nv
bnN0IF9JUFY2X1JFQ1ZIT1BPUFRTID0gNTMKK2NvbnN0IF9ORVRMSU5LX0JST0FEQ0FTVF9FUlJP
UiA9IDQKK2NvbnN0IF9QUl9TRVRfTU0gPSAzNQorY29uc3QgX19fRkxPQVRfV09SRF9PUkRFUiA9
IF9fX0JZVEVfT1JERVIKK2NvbnN0IF9fU0NfVUNIQVJfTUFYID0gMTE1Citjb25zdCBfRVRIX1Bf
TVBMU19VQyA9IDB4ODg0NworY29uc3QgX05MQV9UWVBFX01BU0sgPSBeKF9OTEFfRl9ORVNURUQg
fCBfTkxBX0ZfTkVUX0JZVEVPUkRFUikKK2NvbnN0IF9fU0NfWE9QRU5fU1RSRUFNUyA9IDI0Ngor
Y29uc3QgX0JQRl9KR1QgPSAweDIwCitjb25zdCBfX19JTlQ2NF9NQVhfXyA9IDB4N2ZmZmZmZmZm
ZmZmZmZmZgorY29uc3QgX01PRF9GUkVRVUVOQ1kgPSBfQURKX0ZSRVFVRU5DWQorY29uc3QgX19f
TlJfc2htZHQgPSA2NworY29uc3QgX1NZU19nZXRjd2QgPSBfX19OUl9nZXRjd2QKK2NvbnN0IF9f
X1NJWkVPRl9MT05HX18gPSA4Citjb25zdCBfQlBGX05FVF9PRkYgPSBfU0tGX05FVF9PRkYKK2Nv
bnN0IF9JUF9CTE9DS19TT1VSQ0UgPSAzOAorY29uc3QgX0VDSFJORyA9IDQ0Citjb25zdCBfRUFJ
X1NZU1RFTSA9IC0xMQorY29uc3QgX19fTlJfcmVxdWVzdF9rZXkgPSAyNDkKK2NvbnN0IF9fU0Nf
TEVWRUwzX0NBQ0hFX0FTU09DID0gMTk1Citjb25zdCBfUFJJWDggPSAiWCIKK2NvbnN0IF9IQVZF
X1RFRSA9IDEKK2NvbnN0IF9IQVZFX0NPTkZJR19IID0gMQorY29uc3QgX19QT1NJWF9DTE9DS19T
RUxFQ1RJT04gPSAyMDA4MDkKK2NvbnN0IF9UQ09PRkYgPSAwCitjb25zdCBfVENQX01TU19ERVNJ
UkVEID0gMTIyMAorY29uc3QgX0FJX1BBU1NJVkUgPSAweDAwMDEKK2NvbnN0IF9TX0lGTE5LID0g
X19fU19JRkxOSworY29uc3QgX0RUX1NPQ0sgPSAxMgorY29uc3QgX19TQ18yX1VQRSA9IDk3Citj
b25zdCBfTElOVVhfUkVCT09UX0NNRF9LRVhFQyA9IDB4NDU1ODQ1NDMKK2NvbnN0IF9fU0NfVVNI
UlRfTUFYID0gMTE4Citjb25zdCBfU09fQlNEQ09NUEFUID0gMTQKK2NvbnN0IF9fS19TU19NQVhT
SVpFID0gMTI4Citjb25zdCBfUlRDRl9WQUxWRSA9IDB4MDAyMDAwMDAKK2NvbnN0IF9JRkxBX1RV
Tl9OVU1fRElTQUJMRURfUVVFVUVTID0gOQorY29uc3QgX0hBVkVfTUVNT1JZX0ggPSAxCitjb25z
dCBfWDg2X0NSNF9VTUlQX0JJVCA9IDExCitjb25zdCBfSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0gg
PSAxCitjb25zdCBfQUZfTUFYID0gX1BGX01BWAorY29uc3QgX0hBVkVfRVhQTTFMID0gMQorY29u
c3QgX19fX19nd2NoYXJfdF9kZWZpbmVkID0gMQorY29uc3QgX05URl9TRUxGID0gMHgwMgorY29u
c3QgX19CSVRTX1NJR0FDVElPTl9IID0gMQorY29uc3QgX1NZU19yZWJvb3QgPSBfX19OUl9yZWJv
b3QKK2NvbnN0IF9SRUdfVFJBUE5PID0gMjAKK2NvbnN0IF9BREpfT0ZGU0VUX1NTX1JFQUQgPSAw
eGEwMDEKK2NvbnN0IF9JQ01QNl9QQVJBTV9QUk9CID0gNAorY29uc3QgX0VUSF9QX0lFRUVQVVBB
VCA9IDB4MGEwMQorY29uc3QgX0lQUFJPVE9fRUdQID0gOAorY29uc3QgX0lGTEFfVkZfU1RBVFNf
TVVMVElDQVNUID0gNQorY29uc3QgX1JUTV9ERUxUQ0xBU1MgPSA0MQorY29uc3QgX19QT1NJWF9T
UEFXTiA9IDIwMDgwOQorY29uc3QgX1JUQVhfUlRPX01JTiA9IDEzCitjb25zdCBfX1NZU19VVFNO
QU1FX0ggPSAxCitjb25zdCBfTkVUTElOS19QS1RJTkZPID0gMworY29uc3QgX0ZQRV9GTFRJTlYg
PSA3Citjb25zdCBfX19OUl9yZW1vdmV4YXR0ciA9IDE5NworY29uc3QgX0ZfTk9USUZZID0gMTAy
NgorY29uc3QgX01TX0lOVkFMSURBVEUgPSAyCitjb25zdCBfU0lPQ1BST1RPUFJJVkFURSA9IDB4
ODlFMAorY29uc3QgX19fTlJfdmhhbmd1cCA9IDE1MworY29uc3QgX0NMT05FX1VOVFJBQ0VEID0g
MHgwMDgwMDAwMAorY29uc3QgX0lGQV9GX1BFUk1BTkVOVCA9IDB4ODAKK2NvbnN0IF9JUF9NQVhQ
QUNLRVQgPSA2NTUzNQorY29uc3QgX19TQ19SRUdFWFAgPSAxNTUKK2NvbnN0IF9JUE9QVF9FT0wg
PSAwCitjb25zdCBfRURFQURMT0NLID0gX0VERUFETEsKK2NvbnN0IF9TWVNfZ2V0cGlkID0gX19f
TlJfZ2V0cGlkCitjb25zdCBfRVRIRVJUWVBFX0xPT1BCQUNLID0gMHg5MDAwCitjb25zdCBfX0NT
X0xGUzY0X0NGTEFHUyA9IDEwMDQKK2NvbnN0IF9TSUdGUEUgPSA4Citjb25zdCBfRUxJQlNDTiA9
IDgxCitjb25zdCBfX19ERUM2NF9FUFNJTE9OX18gPSAxRS0xNQorY29uc3QgX0lOVDE2X01BWCA9
ICgzMjc2NykKK2NvbnN0IF9TSU9DU0lGTkFNRSA9IDB4ODkyMworY29uc3QgX19fRkxUMzJfREVO
T1JNX01JTl9fID0gMS4xCitjb25zdCBfU0lHVlRBTFJNID0gMjYKK2NvbnN0IF9fU0NfTlpFUk8g
PSAxMDkKK2NvbnN0IF9fX05SX3BhdXNlID0gMzQKK2NvbnN0IF9FUE9MTFJETk9STSA9IDY0Citj
b25zdCBfSEFWRV9MSVNUWEFUVFIgPSAxCitjb25zdCBfRVRIX1BfWDI1ID0gMHgwODA1Citjb25z
dCBfX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUyA9IDExMDQKK2NvbnN0IF9JRkxBX0JPTkRf
VVBERUxBWSA9IDQKK2NvbnN0IF9MSU5VWF9SRUJPT1RfTUFHSUMyQiA9IDM2OTM2NzQ0OAorY29u
c3QgX05MTV9GX0VYQ0wgPSAweDIwMAorY29uc3QgX19fSU5UX0xFQVNUMTZfV0lEVEhfXyA9IDE2
Citjb25zdCBfX1NDX1RfSU9WX01BWCA9IDY2Citjb25zdCBfX19ERUMxMjhfRVBTSUxPTl9fID0g
MUUtMzMKK2NvbnN0IF9SVE1fTkVXVENMQVNTID0gNDAKK2NvbnN0IF9fX0ZfU0VUU0lHID0gMTAK
K2NvbnN0IF9QUl9DQVBfQU1CSUVOVF9SQUlTRSA9IDIKK2NvbnN0IF9OX1gyNSA9IDYKK2NvbnN0
IF9fQklUU19TSUdUSFJFQURfSCA9IDEKK2NvbnN0IF9TSU9DR0lGU0xBVkUgPSAweDg5MjkKK2Nv
bnN0IF9fX0ZMVDEyOF9NQVhfMTBfRVhQX18gPSA0OTMyCitjb25zdCBfT19SRFdSID0gMDIKK2Nv
bnN0IF9TX0lSV1hHID0gKF9TX0lSV1hVID4+IDMpCitjb25zdCBfSEFWRV9GQ0hPV05BVCA9IDEK
K2NvbnN0IF9TWVNfY2xvY2tfbmFub3NsZWVwID0gX19fTlJfY2xvY2tfbmFub3NsZWVwCitjb25z
dCBfTVNfUkVNT1VOVCA9IDMyCitjb25zdCBfRVRIX1BfQUZfSVVDViA9IDB4RkJGQgorY29uc3Qg
X1NPTF9ERUNORVQgPSAyNjEKK2NvbnN0IF9TT19ERVRBQ0hfRklMVEVSID0gMjcKK2NvbnN0IF9S
TElNX1NBVkVEX0NVUiA9IF9STElNX0lORklOSVRZCitjb25zdCBfSU5fQ0xBU1NCX01BWCA9IDY1
NTM2Citjb25zdCBfTklfTk9GUUROID0gNAorY29uc3QgX19fR1hYX0FCSV9WRVJTSU9OID0gMTAx
MworY29uc3QgX0VOT01TRyA9IDQyCitjb25zdCBfSUZMQV9CUl9UQ05fVElNRVIgPSAxNworY29u
c3QgX01BWE5BTUxFTiA9IF9OQU1FX01BWAorY29uc3QgX19fRkxUNjRYX01JTl9fID0gMS4xCitj
b25zdCBfX19ERUMzMl9NQVhfRVhQX18gPSA5NworY29uc3QgX0hBVkVfU1lTQ0FMTF9IID0gMQor
Y29uc3QgX0hBVkVfU1lTX1BUUkFDRV9IID0gMQorY29uc3QgX19TQ19QSVBFID0gMTQ1Citjb25z
dCBfU19JUldYVSA9IChfX19TX0lSRUFEfF9fX1NfSVdSSVRFfF9fX1NfSUVYRUMpCitjb25zdCBf
X19MREJMX0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX1NZU19tcV91bmxpbmsgPSBfX19OUl9t
cV91bmxpbmsKK2NvbnN0IF9fX1VTRV9GSUxFX09GRlNFVDY0ID0gMQorY29uc3QgX1JXRl9XUklU
RV9MSUZFX05PVF9TRVQgPSAwCitjb25zdCBfU0VHVl9QS1VFUlIgPSA0Citjb25zdCBfTUxPQ0tf
T05GQVVMVCA9IDEKK2NvbnN0IF9fU0NfQUlPX01BWCA9IDI0Citjb25zdCBfX19OUl9zeW1saW5r
ID0gODgKK2NvbnN0IF9FUkFOR0UgPSAzNAorY29uc3QgX0lQX0hEUklOQ0wgPSAzCitjb25zdCBf
V0NIQVJfTUFYID0gX19fV0NIQVJfTUFYCitjb25zdCBfRl9TRVRfRklMRV9SV19ISU5UID0gMTAz
OAorY29uc3QgX1RDUF9DQV9SZWNvdmVyeSA9IDMKK2NvbnN0IF9VSU5UX0xFQVNUMzJfV0lEVEgg
PSAzMgorY29uc3QgX1JUQV9FTkNBUF9UWVBFID0gMjEKK2NvbnN0IF9FUE9MTEVSUiA9IDgKK2Nv
bnN0IF9TWVNfY2hvd24gPSBfX19OUl9jaG93bgorY29uc3QgX1RBQjAgPSAwMDAwMDAwCitjb25z
dCBfVEFCMSA9IDAwMDQwMDAKK2NvbnN0IF9UQUIyID0gMDAxMDAwMAorY29uc3QgX1RBQjMgPSAw
MDE0MDAwCitjb25zdCBfVEhfUlNUID0gMHgwNAorY29uc3QgX1BUUkFDRV9PX1RSQUNFRk9SSyA9
IDIKK2NvbnN0IF9fX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggPSAxNDYKK2NvbnN0IF9fX05S
X3NjaGVkX2dldHBhcmFtID0gMTQzCitjb25zdCBfUlRORVRMSU5LX0hBVkVfUEVFUklORk8gPSAx
Citjb25zdCBfX0xGU19MQVJHRUZJTEUgPSAxCitjb25zdCBfU1RBVFhfQUxMID0gMHgwZmZmCitj
b25zdCBfX19OUl9zZXRpdGltZXIgPSAzOAorY29uc3QgX01PRF9NSUNSTyA9IF9BREpfTUlDUk8K
K2NvbnN0IF9fX05SX3VzdGF0ID0gMTM2Citjb25zdCBfSUZGX0FUVEFDSF9RVUVVRSA9IDB4MDIw
MAorY29uc3QgX19fUFRIUkVBRF9NVVRFWF9MT0NLX0VMSVNJT04gPSAxCitjb25zdCBfSU5fQ0xB
U1NBX0hPU1QgPSAoMHhmZmZmZmZmZiAmIF5fSU5fQ0xBU1NBX05FVCkKK2NvbnN0IF9SVEZfTkFU
ID0gMHgwODAwMDAwMAorY29uc3QgX0JQRl9BQlMgPSAweDIwCitjb25zdCBfRlNfVE9QRElSX0ZM
ID0gMHgwMDAyMDAwMAorY29uc3QgX1JUTUdSUF9MSU5LID0gMQorY29uc3QgX0ZTX0tFWV9ERVND
X1BSRUZJWCA9ICJmc2NyeXB0OiIKK2NvbnN0IF9fX05SX3ZzZXJ2ZXIgPSAyMzYKK2NvbnN0IF9U
SU9DU0JSSyA9IDB4NTQyNworY29uc3QgX19fR0xJQkNfXyA9IDIKK2NvbnN0IF9IQVZFX1NZTkNf
QUREX0FORF9GRVRDSF84ID0gMQorY29uc3QgX05EX1JBX0ZMQUdfTUFOQUdFRCA9IDB4ODAKK2Nv
bnN0IF9JTlRfTEVBU1QxNl9NQVggPSAoMzI3NjcpCitjb25zdCBfX19OUl9zY2hlZF9zZXRzY2hl
ZHVsZXIgPSAxNDQKK2NvbnN0IF9fU0NfU0VNQVBIT1JFUyA9IDIxCitjb25zdCBfX1VDT05URVhU
X0ggPSAxCitjb25zdCBfU1lTX3J0X3Rnc2lncXVldWVpbmZvID0gX19fTlJfcnRfdGdzaWdxdWV1
ZWluZm8KK2NvbnN0IF9QUl9GUF9FWENfUFJFQ0lTRSA9IDMKK2NvbnN0IF9TWVNfc3luYyA9IF9f
X05SX3N5bmMKK2NvbnN0IF9IQVZFX1NURElOVF9IID0gMQorY29uc3QgX0lDQU5PTiA9IDAwMDAw
MDIKK2NvbnN0IF9QUl9TRVRfVEhQX0RJU0FCTEUgPSA0MQorY29uc3QgX05FVExJTktfVU5DT05O
RUNURUQgPSAwCitjb25zdCBfSVVURjggPSAwMDQwMDAwCitjb25zdCBfQlBGX0FORCA9IDB4NTAK
K2NvbnN0IF9ORVRMSU5LX0xJU1RFTl9BTExfTlNJRCA9IDgKK2NvbnN0IF9JUFY2X1BBVEhNVFUg
PSA2MQorY29uc3QgX19TQ19BVEVYSVRfTUFYID0gODcKK2NvbnN0IF9TT0NLX1JETSA9IDQKK2Nv
bnN0IF9FVEhfUF9JUCA9IDB4MDgwMAorY29uc3QgX19QT1NJWF9TT1VSQ0UgPSAxCitjb25zdCBf
SUZMQV9HRU5FVkVfVURQX0NTVU0gPSA4Citjb25zdCBfX1NDX01RX1BSSU9fTUFYID0gMjgKK2Nv
bnN0IF9fTkVUSU5FVF9UQ1BfSCA9IDEKK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQy
ID0gMHhBMUIyQzNENAorY29uc3QgX1JUQ0ZfTkFUID0gMHgwMDgwMDAwMAorY29uc3QgX05EX05B
X0ZMQUdfT1ZFUlJJREUgPSAweDAwMDAwMDIwCitjb25zdCBfSEFWRV9TVERMSUJfSCA9IDEKK2Nv
bnN0IF9fU0NfU0lOR0xFX1BST0NFU1MgPSAxNTEKK2NvbnN0IF9JRkZfRFlOQU1JQyA9IDMyNzY4
Citjb25zdCBfVENQX05PX1FVRVVFID0gMAorY29uc3QgX19MSUJDX0xJTUlUU19IXyA9IDEKK2Nv
bnN0IF9JTl9ET05UX0ZPTExPVyA9IDB4MDIwMDAwMDAKK2NvbnN0IF9NQURWX1dJUEVPTkZPUksg
PSAxOAorY29uc3QgX19QT1NJWF9TVFJFQU1fTUFYID0gOAorY29uc3QgX19CSVRTX1NJR0lORk9f
Q09OU1RTX0ggPSAxCitjb25zdCBfV0FJVF9BTlkgPSAoLTEpCitjb25zdCBfTUFQXzMyQklUID0g
MHg0MAorY29uc3QgX0lORVRfQUREUlNUUkxFTiA9IDE2Citjb25zdCBfX19JRkxBX1ZGX01BWCA9
IDEzCitjb25zdCBfUFJfRlBfRVhDX0FTWU5DID0gMgorY29uc3QgX1RJT0NTRVJDT05GSUcgPSAw
eDU0NTMKK2NvbnN0IF9VSU5UUFRSX1dJRFRIID0gX19fV09SRFNJWkUKK2NvbnN0IF9NQ0FTVF9N
U0ZJTFRFUiA9IDQ4Citjb25zdCBfTkxNX0ZfTk9OUkVDID0gMHgxMDAKK2NvbnN0IF9FREVBRExL
ID0gMzUKK2NvbnN0IF9JUFBPUlRfVEZUUCA9IDY5Citjb25zdCBfU0lPQ0dTVEFNUCA9IDB4ODkw
NgorY29uc3QgX0ZTX0tFWV9ERVNDUklQVE9SX1NJWkUgPSA4Citjb25zdCBfX0NTX1BPU0lYX1Y3
X0xQQklHX09GRkJJR19MSUJTID0gMTE0NgorY29uc3QgX0lGTEFfR0VORVZFX1BPUlQgPSA1Citj
b25zdCBfU1lTX2NhcGdldCA9IF9fX05SX2NhcGdldAorY29uc3QgX19fTlJfbWxvY2sgPSAxNDkK
K2NvbnN0IF9fX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUgPSAyCitjb25zdCBfRVRIRVJfVFlQ
RV9MRU4gPSAyCitjb25zdCBfSEFWRV9UQU5MID0gMQorY29uc3QgX19QT1NJWF9TQVZFRF9JRFMg
PSAxCitjb25zdCBfVENNX0lGSU5ERVhfTUFHSUNfQkxPQ0sgPSAoMHhGRkZGRkZGRikKK2NvbnN0
IF9CUEZfU1RYID0gMHgwMworY29uc3QgX19fREJMX01BTlRfRElHX18gPSA1MworY29uc3QgX0lQ
VjZfTUlOSE9QQ09VTlQgPSA3MworY29uc3QgX1NJT0NHSUZOQU1FID0gMHg4OTEwCitjb25zdCBf
UlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPSAoMSA8PCAzKQorY29uc3QgX19fTlJfcnRfc2lnYWN0
aW9uID0gMTMKK2NvbnN0IF9JTlRfRkFTVDY0X1dJRFRIID0gNjQKK2NvbnN0IF9CUEZfTUVNID0g
MHg2MAorY29uc3QgX05EX05FSUdIQk9SX0FEVkVSVCA9IDEzNgorY29uc3QgX19QT1NJWF9DSElM
RF9NQVggPSAyNQorY29uc3QgX0NMT05FX0NISUxEX1NFVFRJRCA9IDB4MDEwMDAwMDAKK2NvbnN0
IF9SRUdfUkFYID0gMTMKK2NvbnN0IF9fX0lOVF9MRUFTVDY0X01BWF9fID0gMHg3ZmZmZmZmZmZm
ZmZmZmZmCitjb25zdCBfQlBGX0FERCA9IDB4MDAKK2NvbnN0IF9FVEhFUk1JTiA9IChfRVRIRVJf
TUlOX0xFTiAtIF9FVEhFUl9IRFJfTEVOIC0gX0VUSEVSX0NSQ19MRU4pCitjb25zdCBfSVBQT1JU
X1JKRSA9IDc3Citjb25zdCBfRlNfSU1BR0lDX0ZMID0gMHgwMDAwMjAwMAorY29uc3QgX0lQVjZf
UE1UVURJU0NfSU5URVJGQUNFID0gNAorY29uc3QgX19fSUZMQV9WTEFOX1FPU19NQVggPSAyCitj
b25zdCBfX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFID0gMgorY29uc3QgX1NZU19OTUxOID0g
X19VVFNOQU1FX0xFTkdUSAorY29uc3QgX0lTSUcgPSAwMDAwMDAxCitjb25zdCBfU1lTX2JpbmQg
PSBfX19OUl9iaW5kCitjb25zdCBfSVBWNl9NVFVfRElTQ09WRVIgPSAyMworY29uc3QgX0lGTEFf
V0lSRUxFU1MgPSAxMQorY29uc3QgX1JNTkVUX0ZMQUdTX0VHUkVTU19NQVBfQ0tTVU1WNCA9ICgx
IDw8IDMpCitjb25zdCBfX1BPU0lYX01BUFBFRF9GSUxFUyA9IDIwMDgwOQorY29uc3QgX1JUTV9O
RVdORFVTRVJPUFQgPSA2OAorY29uc3QgX1BUUkFDRV9HRVRTSUdNQVNLID0gMTY5MDYKK2NvbnN0
IF9SVE1HUlBfSVBWNF9NUk9VVEUgPSAweDIwCitjb25zdCBfSU42X0FERFJfR0VOX01PREVfU1RB
QkxFX1BSSVZBQ1kgPSAyCitjb25zdCBfX19OUl9zaWdhbHRzdGFjayA9IDEzMQorY29uc3QgX05F
VExJTktfQ0FQX0FDSyA9IDEwCitjb25zdCBfX19OUl9jcmVhdCA9IDg1Citjb25zdCBfX0dFVE9Q
VF9DT1JFX0ggPSAxCitjb25zdCBfRUFJX0FHQUlOID0gLTMKK2NvbnN0IF9fUE9TSVhfSk9CX0NP
TlRST0wgPSAxCitjb25zdCBfU0NOaTE2ID0gImhpIgorY29uc3QgX0JQRl9TVUIgPSAweDEwCitj
b25zdCBfUFJJeDE2ID0gIngiCitjb25zdCBfU0NIRURfSVNPID0gNAorY29uc3QgX19IQVZFX1NU
UlVDVF9URVJNSU9TX0NfSVNQRUVEID0gMQorY29uc3QgX05VRF9GQUlMRUQgPSAweDIwCitjb25z
dCBfRU1TR1NJWkUgPSA5MAorY29uc3QgX0ZBUFBFTkQgPSBfT19BUFBFTkQKK2NvbnN0IF9fX1VT
RV9QT1NJWCA9IDEKK2NvbnN0IF9USU9DSU5RID0gX0ZJT05SRUFECitjb25zdCBfU0hVVF9SRCA9
IDAKK2NvbnN0IF9fX05SX2Vwb2xsX3dhaXRfb2xkID0gMjE1Citjb25zdCBfWDg2X0VGTEFHU19P
Rl9CSVQgPSAxMQorY29uc3QgX19fRkxUMTI4X0RFQ0lNQUxfRElHX18gPSAzNgorY29uc3QgX19T
Q19HRVRHUl9SX1NJWkVfTUFYID0gNjkKK2NvbnN0IF9TWVNfdXRpbWUgPSBfX19OUl91dGltZQor
Y29uc3QgX1BSX0ZQRU1VX1NJR0ZQRSA9IDIKK2NvbnN0IF9BUlBIUkRfRkRESSA9IDc3NAorY29u
c3QgX1NFR1ZfTUFQRVJSID0gMQorY29uc3QgX1JUQV9NUF9BTEdPID0gMTQKK2NvbnN0IF9CUEZf
Sk1QID0gMHgwNQorY29uc3QgX1NZU19ydF9zaWdhY3Rpb24gPSBfX19OUl9ydF9zaWdhY3Rpb24K
K2NvbnN0IF9IQVZFX05FVF9JRl9IID0gMQorY29uc3QgX1JUTkxHUlBfREVDbmV0X0lGQUREUiA9
IDEzCitjb25zdCBfSUZGX0xPT1BCQUNLID0gOAorY29uc3QgX1JUQ0ZfTE9HID0gMHgwMjAwMDAw
MAorY29uc3QgX0RUX0JMSyA9IDYKK2NvbnN0IF9fX05SX2NhcHNldCA9IDEyNgorY29uc3QgX19T
Q19QSUlfT1NJID0gNTcKK2NvbnN0IF9JRkxBX0JSUE9SVF9GT1JXQVJEX0RFTEFZX1RJTUVSID0g
MjIKK2NvbnN0IF9VTU9VTlRfTk9GT0xMT1cgPSA4Citjb25zdCBfUEZfRUNPTkVUID0gMTkKK2Nv
bnN0IF9JUFY2X0FERFJfUFJFRkVSRU5DRVMgPSA3MgorY29uc3QgX01BQ1NFQ19WQUxJREFURV9N
QVggPSAyCitjb25zdCBfUlRfVEFCTEVfTUFYID0gNDI5NDk2NzI5NQorY29uc3QgX0ZGSV9QQVND
QUwgPSA2Citjb25zdCBfSUZMQV9YRlJNX0lGX0lEID0gMgorY29uc3QgX0I0NjA4MDAgPSAwMDEw
MDA0Citjb25zdCBfX0NTX1hCUzVfTFA2NF9PRkY2NF9MREZMQUdTID0gMTEwOQorY29uc3QgX1BS
SWlMRUFTVDMyID0gImkiCitjb25zdCBfSEFWRV9TWVNfRklMRV9IID0gMQorY29uc3QgX1NZU19l
cG9sbF93YWl0ID0gX19fTlJfZXBvbGxfd2FpdAorY29uc3QgX1BGX0ZJTEUgPSBfUEZfTE9DQUwK
K2NvbnN0IF9TWVNfbHNldHhhdHRyID0gX19fTlJfbHNldHhhdHRyCitjb25zdCBfRUNISUxEID0g
MTAKK2NvbnN0IF9fX0ZJTklURV9NQVRIX09OTFlfXyA9IDAKK2NvbnN0IF9fUE9TSVhfVEhSRUFE
X1JPQlVTVF9QUklPX1BST1RFQ1QgPSAtMQorY29uc3QgX19fTlJfc2V0dGltZW9mZGF5ID0gMTY0
Citjb25zdCBfUEFDS0VUX01SX01VTFRJQ0FTVCA9IDAKK2NvbnN0IF9TS0ZfQURfQ1BVID0gMzYK
K2NvbnN0IF9fX05SX3V0aW1lID0gMTMyCitjb25zdCBfX19JRkxBX1hEUF9NQVggPSA4Citjb25z
dCBfTUFDVkxBTl9NT0RFX1BBU1NUSFJVID0gOAorY29uc3QgX19fU0VHX0dTID0gMQorY29uc3Qg
X0FESl9PRkZTRVRfU0lOR0xFU0hPVCA9IDB4ODAwMQorY29uc3QgX1BPUlRfUkVRVUVTVF9BU1NP
Q0lBVEUgPSAyCitjb25zdCBfUFJJeExFQVNUMzIgPSAieCIKK2NvbnN0IF9fUE9TSVgyX0JDX0RJ
TV9NQVggPSAyMDQ4Citjb25zdCBfRVRIX1BfODAyXzIgPSAweDAwMDQKK2NvbnN0IF9FVEhfUF84
MDJfMyA9IDB4MDAwMQorY29uc3QgX1NPX0VSUk9SID0gNAorY29uc3QgX1RJT0NNQklTID0gMHg1
NDE2Citjb25zdCBfTVNfTk9SRU1PVEVMT0NLID0gKDE8PDI3KQorY29uc3QgX19fVVNFX1hPUEVO
MksgPSAxCitjb25zdCBfSVBWNl9IT1BMSU1JVCA9IDUyCitjb25zdCBfX19OUl93cml0ZXYgPSAy
MAorY29uc3QgX1NZU19zZXRzb2Nrb3B0ID0gX19fTlJfc2V0c29ja29wdAorY29uc3QgX1NZU19n
ZXRyZXNnaWQgPSBfX19OUl9nZXRyZXNnaWQKK2NvbnN0IF9FVEhfUF9QQUUgPSAweDg4OEUKK2Nv
bnN0IF9QQUNLRVRfU1RBVElTVElDUyA9IDYKK2NvbnN0IF9fX1VJTlQ4X01BWF9fID0gMHhmZgor
Y29uc3QgX0lQX01JTlRUTCA9IDIxCitjb25zdCBfTElORV9NQVggPSBfX1BPU0lYMl9MSU5FX01B
WAorY29uc3QgX19QQ19OT19UUlVOQyA9IDcKK2NvbnN0IF9fX0RCTF9NQVhfMTBfRVhQX18gPSAz
MDgKK2NvbnN0IF9NT0RfU1RBVFVTID0gX0FESl9TVEFUVVMKK2NvbnN0IF9QUl9FTkRJQU5fTElU
VExFID0gMQorY29uc3QgX01PRF9DTEtBID0gX0FESl9PRkZTRVRfU0lOR0xFU0hPVAorY29uc3Qg
X0FUX1NUQVRYX0RPTlRfU1lOQyA9IDB4NDAwMAorY29uc3QgX19TQ19DX0xBTkdfU1VQUE9SVF9S
ID0gMTM2Citjb25zdCBfRVRIX1BfUEFVU0UgPSAweDg4MDgKK2NvbnN0IF9TWVNfdW5saW5rYXQg
PSBfX19OUl91bmxpbmthdAorY29uc3QgX0lGTEFfR1RQX1BEUF9IQVNIU0laRSA9IDMKK2NvbnN0
IF9JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMAorY29uc3QgX1NDTmQzMiA9ICJkIgorY29uc3Qg
X1NJR1BXUiA9IDMwCitjb25zdCBfSUZMQV9CT05EX0FDVElWRV9TTEFWRSA9IDIKK2NvbnN0IF9Q
Ul9TRVRfTU1fRU5WX1NUQVJUID0gMTAKK2NvbnN0IF9QVFJESUZGX1dJRFRIID0gX19fV09SRFNJ
WkUKK2NvbnN0IF9QUkl4OCA9ICJ4IgorY29uc3QgX19TVERJTlRfSCA9IDEKK2NvbnN0IF9SVE1f
R0VUU1RBVFMgPSA5NAorY29uc3QgX1RJT0NNR0VUID0gMHg1NDE1Citjb25zdCBfTkRUUEFfQU5Z
Q0FTVF9ERUxBWSA9IDEyCitjb25zdCBfUFJJeDMyID0gIngiCitjb25zdCBfRVhUUFJPQyA9IDAy
MDAwMDAKK2NvbnN0IF9fX1dDSEFSX01BWF9fID0gMHg3ZmZmZmZmZgorY29uc3QgX0lPQ19JTk9V
VCA9ICgoX19JT0NfV1JJVEV8X19JT0NfUkVBRCkgPDwgX19JT0NfRElSU0hJRlQpCitjb25zdCBf
SUZMQV9JTkZPX0tJTkQgPSAxCitjb25zdCBfRUZBVUxUID0gMTQKK2NvbnN0IF9VSU5UOF9XSURU
SCA9IDgKK2NvbnN0IF9QUl9DQVBCU0VUX0RST1AgPSAyNAorY29uc3QgX0lGTEFfVkxBTl9VTlNQ
RUMgPSAwCitjb25zdCBfSUZGX01VTFRJQ0FTVCA9IDQwOTYKK2NvbnN0IF9QT1JUX1JFUVVFU1Rf
RElTQVNTT0NJQVRFID0gMworY29uc3QgX0lGTEFfQlJQT1JUX05PID0gMTgKK2NvbnN0IF9TT19E
RUJVRyA9IDEKK2NvbnN0IF9SVE5IX0ZfT0ZGTE9BRCA9IDgKK2NvbnN0IF9JTlRfRkFTVDMyX01B
WCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQorY29uc3QgX19TQ19NRU1MT0NLX1JBTkdFID0gMTgK
K2NvbnN0IF9SUE1fUENPX0NIQU5HRSA9IDIKK2NvbnN0IF9NU19TVUJNT1VOVCA9ICgxPDwyNikK
K2NvbnN0IF9ETl9NT0RJRlkgPSAweDAwMDAwMDAyCitjb25zdCBfSVBQUk9UT19VRFAgPSAxNwor
Y29uc3QgX0lGTEFfVlJGX1BPUlRfVU5TUEVDID0gMAorY29uc3QgX0lGTEFfSU5FVDZfTUNBU1Qg
PSA0Citjb25zdCBfUlROTEdSUF9ERUNuZXRfUk9VVEUgPSAxNQorY29uc3QgX19fTlJfdGVlID0g
Mjc2Citjb25zdCBfUlRBX0lJRiA9IDMKK2NvbnN0IF9JQ1JOTCA9IDAwMDA0MDAKK2NvbnN0IF9T
X0lXVVNSID0gX19fU19JV1JJVEUKK2NvbnN0IF9TWVNfZHVwMiA9IF9fX05SX2R1cDIKK2NvbnN0
IF9TWVNfZHVwMyA9IF9fX05SX2R1cDMKK2NvbnN0IF9SRUdfRVJSID0gMTkKK2NvbnN0IF9ORVRM
SU5LX05GTE9HID0gNQorY29uc3QgX1BSSVhMRUFTVDggPSAiWCIKK2NvbnN0IF9JRkxBX0hTUl9W
RVJTSU9OID0gNgorY29uc3QgX1NZU19saW5rYXQgPSBfX19OUl9saW5rYXQKK2NvbnN0IF9fX0RC
TF9IQVNfSU5GSU5JVFlfXyA9IDEKK2NvbnN0IF9JUFRPU19DTEFTU19NQVNLID0gMHhlMAorY29u
c3QgX19QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TID0gNAorY29uc3QgX05EX05F
SUdIQk9SX1NPTElDSVQgPSAxMzUKK2NvbnN0IF9IQVZFX0xJTlVYX0lGX0VUSEVSX0ggPSAxCitj
b25zdCBfX0NTX1Y3X1dJRFRIX1JFU1RSSUNURURfRU5WUyA9IDUKK2NvbnN0IF9QUl9TUEVDX0VO
QUJMRSA9ICgxIDw8IDEpCitjb25zdCBfQVJQSFJEX1BQUCA9IDUxMgorY29uc3QgX1NJX0FTWU5D
TkwgPSAtNjAKK2NvbnN0IF9TWVNfbW9kaWZ5X2xkdCA9IF9fX05SX21vZGlmeV9sZHQKK2NvbnN0
IF9fX0ZMVDY0X0VQU0lMT05fXyA9IDEuMQorY29uc3QgX19fT19UTVBGSUxFID0gKDAyMDAwMDAw
MCB8IF9fX09fRElSRUNUT1JZKQorY29uc3QgX1g4Nl9FRkxBR1NfU0ZfQklUID0gNworY29uc3Qg
X1NJT0NHSUZNVFUgPSAweDg5MjEKK2NvbnN0IF9CUEZfTExfT0ZGID0gX1NLRl9MTF9PRkYKK2Nv
bnN0IF9fU0NIRURfSCA9IDEKK2NvbnN0IF9JUE9QVF9TRUNVUl9FRlRPID0gMHg3ODlhCitjb25z
dCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0VSUk9SID0gMjYxCitjb25zdCBfX19OUl9zaG1hdCA9
IDMwCitjb25zdCBfX19OUl9wa2V5X2FsbG9jID0gMzMwCitjb25zdCBfUFRSQUNFX1BPS0VVU0VS
ID0gNgorY29uc3QgX0lGQV9GTEFHUyA9IDgKK2NvbnN0IF9fX0RFQzY0X01BWF9FWFBfXyA9IDM4
NQorY29uc3QgX1JUQVhfSE9QTElNSVQgPSAxMAorY29uc3QgX01BUF9MT0NLRUQgPSAweDAyMDAw
Citjb25zdCBfQlBGX0xEWCA9IDB4MDEKK2NvbnN0IF9SVEFfVklBID0gMTgKK2NvbnN0IF9fU0Nf
VjdfTFBCSUdfT0ZGQklHID0gMjQwCitjb25zdCBfQUZfSUIgPSBfUEZfSUIKK2NvbnN0IF9OTDEg
PSAwMDAwNDAwCitjb25zdCBfX1NDX0NMS19UQ0sgPSAyCitjb25zdCBfTU9EX0NMS0IgPSBfQURK
X1RJQ0sKK2NvbnN0IF9FTkVURE9XTiA9IDEwMAorY29uc3QgX0FGX0lSREEgPSBfUEZfSVJEQQor
Y29uc3QgX01DQVNUX0xFQVZFX0dST1VQID0gNDUKK2NvbnN0IF9SVE5MR1JQX0lQVjZfTVJPVVRF
ID0gMTAKK2NvbnN0IF9QVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyA9IF9fUE9TSVhfVEhS
RUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUworY29uc3QgX19JU09DOTVfU09VUkNFID0gMQorY29u
c3QgX19fREVDMTI4X01BWF9FWFBfXyA9IDYxNDUKK2NvbnN0IF9JRVhURU4gPSAwMTAwMDAwCitj
b25zdCBfSVBQT1JUX1JPVVRFU0VSVkVSID0gNTIwCitjb25zdCBfTkRUUEFfUkVGQ05UID0gMgor
Y29uc3QgX1g4Nl9FRkxBR1NfQ0ZfQklUID0gMAorY29uc3QgX1NZU19tb3VudCA9IF9fX05SX21v
dW50Citjb25zdCBfRlNfSU1NVVRBQkxFX0ZMID0gMHgwMDAwMDAxMAorY29uc3QgX19DU19YQlM1
X0lMUDMyX09GRkJJR19MSUJTID0gMTEwNgorY29uc3QgX1BSX0NBUF9BTUJJRU5UX0NMRUFSX0FM
TCA9IDQKK2NvbnN0IF9fX05SX3BrZXlfZnJlZSA9IDMzMQorY29uc3QgX0ZTX0VOQ1JZUFRJT05f
TU9ERV9BRVNfMTI4X0NUUyA9IDYKK2NvbnN0IF9SVEZfUE9MSUNZID0gMHgwNDAwMDAwMAorY29u
c3QgX0lGTEFfQk9ORF9ET1dOREVMQVkgPSA1Citjb25zdCBfTlRGX1JPVVRFUiA9IDB4ODAKK2Nv
bnN0IF9JRkxBX1ZGX1RYX1JBVEUgPSAzCitjb25zdCBfRl9TRVRfUldfSElOVCA9IDEwMzYKK2Nv
bnN0IF9EVF9XSFQgPSAxNAorY29uc3QgX1BUUkFDRV9TWVNFTVUgPSAzMQorY29uc3QgX1NJT0NE
SUZBRERSID0gMHg4OTM2Citjb25zdCBfRUJBREZEID0gNzcKK2NvbnN0IF9JUF9NU1MgPSA1NzYK
K2NvbnN0IF9TWVNfZ2V0Z2lkID0gX19fTlJfZ2V0Z2lkCitjb25zdCBfVElPQ05YQ0wgPSAweDU0
MEQKK2NvbnN0IF9fX1NIUlRfTUFYX18gPSAweDdmZmYKK2NvbnN0IF9NQVhfSVBPUFRMRU4gPSA0
MAorY29uc3QgX19fUFRIUkVBRF9NVVRFWF9IQVZFX1BSRVYgPSAxCitjb25zdCBfU0lPR0lGSU5E
RVggPSBfU0lPQ0dJRklOREVYCitjb25zdCBfSVBWNl9ET05URlJBRyA9IDYyCitjb25zdCBfQjI0
MDAgPSAwMDAwMDEzCitjb25zdCBfRUwySExUID0gNTEKK2NvbnN0IF9JRkxBX0JSUE9SVF9HUk9V
UF9GV0RfTUFTSyA9IDMxCitjb25zdCBfX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HID0g
NzkKK2NvbnN0IF9XQUlUX01ZUEdSUCA9IDAKK2NvbnN0IF9UQ0FfU1RBVFMyID0gNworY29uc3Qg
X0lGTEFfTUFDVkxBTl9GTEFHUyA9IDIKK2NvbnN0IF9fX05SX2Z0cnVuY2F0ZSA9IDc3Citjb25z
dCBfSUZMQV9WRl9TVEFUUyA9IDgKK2NvbnN0IF9JUFBST1RPX1NDVFAgPSAxMzIKK2NvbnN0IF9T
WVNfbXVubG9ja2FsbCA9IF9fX05SX211bmxvY2thbGwKK2NvbnN0IF9STElNSVRfQVMgPSA5Citj
b25zdCBfSU5UMzJfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpCitjb25zdCBfX0NTX1Y2X0VOViA9IDEx
NDgKK2NvbnN0IF9JUF9PRkZNQVNLID0gMHgxZmZmCitjb25zdCBfSU5UNjRfV0lEVEggPSA2NAor
Y29uc3QgX1BBQ0tBR0VfVVJMID0gIiIKK2NvbnN0IF9JTlRfRkFTVDMyX1dJRFRIID0gX19fV09S
RFNJWkUKK2NvbnN0IF9JRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEUgPSA0Citjb25zdCBfVUlOVE1B
WF9XSURUSCA9IDY0Citjb25zdCBfUlRNU0dfTkVXUlVMRSA9IDB4MzEKK2NvbnN0IF9fU0NfTkxf
Tk1BWCA9IDEyMgorY29uc3QgX19fRkxUNjRfSEFTX0lORklOSVRZX18gPSAxCitjb25zdCBfWDg2
X0VGTEFHU19WTV9CSVQgPSAxNworY29uc3QgX19QT1NJWF9USFJFQURfUFJPQ0VTU19TSEFSRUQg
PSAyMDA4MDkKK2NvbnN0IF9GTkRFTEFZID0gX09fTkRFTEFZCitjb25zdCBfSUZMQV9CUl9NQ0FT
VF9RVUVSWV9VU0VfSUZBRERSID0gMjQKK2NvbnN0IF9QUkl1TEVBU1QxNiA9ICJ1IgorY29uc3Qg
X1JURl9HQVRFV0FZID0gMHgwMDAyCitjb25zdCBfU1lTX2xjaG93biA9IF9fX05SX2xjaG93bgor
Y29uc3QgX1NZU19saW5rID0gX19fTlJfbGluaworY29uc3QgX0lGTEFfVlhMQU5fTE9DQUw2ID0g
MTcKK2NvbnN0IF9JUF9SRUNWT1JJR0RTVEFERFIgPSBfSVBfT1JJR0RTVEFERFIKK2NvbnN0IF9S
VE1fREVMTElOSyA9IDE3Citjb25zdCBfUlRNX05FV05FVENPTkYgPSA4MAorY29uc3QgX0lQVE9T
X0RTQ1BfRUYgPSAweGI4Citjb25zdCBfUFRSQUNFX0xJU1RFTiA9IDE2OTA0Citjb25zdCBfU0NN
X1RJTUVTVEFNUElOR19PUFRfU1RBVFMgPSA1NAorY29uc3QgX19QT1NJWF9TRU1BUEhPUkVTID0g
MjAwODA5Citjb25zdCBfX0lPQ19UWVBFTUFTSyA9ICgoMSA8PCBfX0lPQ19UWVBFQklUUyktMSkK
K2NvbnN0IF9YODZfQ1I0X01DRV9CSVQgPSA2Citjb25zdCBfX19GTFRfSEFTX0lORklOSVRZX18g
PSAxCitjb25zdCBfRVRIX1BfTUFDU0VDID0gMHg4OEU1Citjb25zdCBfX19MT05HX1dJRFRIX18g
PSA2NAorY29uc3QgX0hBVkVfTkVUX0lGX0FSUF9IID0gMQorY29uc3QgX19ORVRfSUZfSCA9IDEK
K2NvbnN0IF9USU9DU1RJID0gMHg1NDEyCitjb25zdCBfU1lTX3NlbmRmaWxlID0gX19fTlJfc2Vu
ZGZpbGUKK2NvbnN0IF9fX05SX3N3YXBvbiA9IDE2NworY29uc3QgX0lOTENSID0gMDAwMDEwMAor
Y29uc3QgX1NfSUZSRUcgPSBfX19TX0lGUkVHCitjb25zdCBfUkVHX1I5ID0gMQorY29uc3QgX1BP
U0lYX01BRFZfRE9OVE5FRUQgPSA0Citjb25zdCBfX19VU0VfVU5JWDk4ID0gMQorY29uc3QgX0lO
Nl9BRERSX0dFTl9NT0RFX0VVSTY0ID0gMAorY29uc3QgX0lGTEFfQlJQT1JUX1BST1hZQVJQX1dJ
RkkgPSAxMgorY29uc3QgX1NIVVRfV1IgPSAxCitjb25zdCBfRUNPTk5SRUZVU0VEID0gMTExCitj
b25zdCBfUEZfQUxHID0gMzgKK2NvbnN0IF9fX0lGTEFfSU5GT19NQVggPSA2Citjb25zdCBfX1ND
X1BPTEwgPSA1OAorY29uc3QgX19fSUZMQV9JTkVUNl9NQVggPSA5Citjb25zdCBfTUFQX0ZJWEVE
X05PUkVQTEFDRSA9IDB4MTAwMDAwCitjb25zdCBfX0NTX1BPU0lYX1Y3X0xQNjRfT0ZGNjRfTElO
VEZMQUdTID0gMTE0MworY29uc3QgX1BPUlRfUFJPRklMRV9NQVggPSA0MAorY29uc3QgX1RDUF9D
T09LSUVfUEFJUl9TSVpFID0gKDIqX1RDUF9DT09LSUVfTUFYKQorY29uc3QgX1BUUkFDRV9QRUVL
U0lHSU5GT19TSEFSRUQgPSAxCitjb25zdCBfTlVEX1NUQUxFID0gMHgwNAorY29uc3QgX05FVExJ
TktfRklCX0xPT0tVUCA9IDEwCitjb25zdCBfUlRNX0JBU0UgPSAxNgorY29uc3QgX1BGX1NFQ1VS
SVRZID0gMTQKK2NvbnN0IF9TUExJQ0VfRl9NT1ZFID0gMQorY29uc3QgX19fTlJfa2lsbCA9IDYy
Citjb25zdCBfU0lHU1RLU1ogPSA4MTkyCitjb25zdCBfQ1IwID0gMDAwMDAwMAorY29uc3QgX0NS
MSA9IDAwMDEwMDAKK2NvbnN0IF9fX1dDSEFSX1dJRFRIX18gPSAzMgorY29uc3QgX19fSU5UX0ZB
U1Q4X1dJRFRIX18gPSA4Citjb25zdCBfRVRIX1BfVEVCID0gMHg2NTU4Citjb25zdCBfSVBQT1JU
X0ZUUCA9IDIxCitjb25zdCBfU1RBX01PREUgPSAweDQwMDAKK2NvbnN0IF9CUEZfSU5EID0gMHg0
MAorY29uc3QgX0ZGSV9UWVBFX1NUUlVDVCA9IDEzCitjb25zdCBfTVNHX1pFUk9DT1BZID0gNjcx
MDg4NjQKK2NvbnN0IF9fRU5ESUFOX0ggPSAxCitjb25zdCBfX1BPU0lYX1RZUEVEX01FTU9SWV9P
QkpFQ1RTID0gLTEKK2NvbnN0IF9TWVNfbXFfdGltZWRyZWNlaXZlID0gX19fTlJfbXFfdGltZWRy
ZWNlaXZlCitjb25zdCBfZXBvbGxfZGF0YV9vZmZzZXQgPSA0Citjb25zdCBfR1RQX1JPTEVfU0dT
TiA9IDEKK2NvbnN0IF9ORFRBX1NUQVRTID0gNworY29uc3QgX1NDTV9SSUdIVFMgPSAxCitjb25z
dCBfVENQX1JFQ1ZfUVVFVUUgPSAxCitjb25zdCBfX1BPU0lYX1Y2X0xQNjRfT0ZGNjQgPSAxCitj
b25zdCBfQUZfQVBQTEVUQUxLID0gX1BGX0FQUExFVEFMSworY29uc3QgX19fU0laRU9GX0ZMT0FU
X18gPSA0Citjb25zdCBfUEZfQ0FOID0gMjkKK2NvbnN0IF9SVEZfTE9DQUwgPSAweDgwMDAwMDAw
Citjb25zdCBfTkxNU0dfQUxJR05UTyA9IDQKK2NvbnN0IF9fX1VJTlRfRkFTVDE2X01BWF9fID0g
MHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JL
ID0gMjQKK2NvbnN0IF9fX1NJWkVPRl9QT0lOVEVSX18gPSA4Citjb25zdCBfX19OUl9tZW1mZF9j
cmVhdGUgPSAzMTkKK2NvbnN0IF9TWVNfdGdraWxsID0gX19fTlJfdGdraWxsCitjb25zdCBfWENB
U0UgPSAwMDAwMDA0Citjb25zdCBfVk1JTiA9IDYKK2NvbnN0IF9CNTc2MDAgPSAwMDEwMDAxCitj
b25zdCBfSUZMQV9FVkVOVF9OT1RJRllfUEVFUlMgPSA0Citjb25zdCBfX0NTX1BPU0lYX1Y3X0lM
UDMyX09GRjMyX0xERkxBR1MgPSAxMTMzCitjb25zdCBfUlRQUk9UX0JPT1QgPSAzCitjb25zdCBf
VENQT1BUX1RJTUVTVEFNUCA9IDgKK2NvbnN0IF9QUkl4TEVBU1Q4ID0gIngiCitjb25zdCBfRUlO
UFJPR1JFU1MgPSAxMTUKK2NvbnN0IF9JTl9DTEFTU0NfTlNISUZUID0gOAorY29uc3QgX1NDTV9U
SU1FU1RBTVBOUyA9IF9TT19USU1FU1RBTVBOUworY29uc3QgX0lGTEFfQUREUkVTUyA9IDEKK2Nv
bnN0IF9JRkxBX1ZGX0lORk9fVU5TUEVDID0gMAorY29uc3QgX01TX1NZTkNIUk9OT1VTID0gMTYK
K2NvbnN0IF9TWVNfcmVuYW1lYXQgPSBfX19OUl9yZW5hbWVhdAorY29uc3QgX0VUSF9QX1FJTlEx
ID0gMHg5MTAwCitjb25zdCBfRVRIX1BfUUlOUTIgPSAweDkyMDAKK2NvbnN0IF9FVEhfUF9RSU5R
MyA9IDB4OTMwMAorY29uc3QgX19fTlJfcXVvdGFjdGwgPSAxNzkKK2NvbnN0IF9OU1NfQlVGTEVO
X1BBU1NXRCA9IDEwMjQKK2NvbnN0IF9fUE9TSVgyX1NXX0RFViA9IF9fX1BPU0lYMl9USElTX1ZF
UlNJT04KK2NvbnN0IF9UQ1NBTk9XID0gMAorY29uc3QgX0NTNiA9IDAwMDAwMjAKK2NvbnN0IF9D
UzcgPSAwMDAwMDQwCitjb25zdCBfQ1M4ID0gMDAwMDA2MAorY29uc3QgX1BSSWRMRUFTVDggPSAi
ZCIKK2NvbnN0IF9JUFBPUlRfVElNRVNFUlZFUiA9IDM3Citjb25zdCBfRl9PV05FUl9QR1JQID0g
MgorY29uc3QgX0FGX0FUTVBWQyA9IF9QRl9BVE1QVkMKK2NvbnN0IF9SVE1HUlBfSVBWNF9JRkFE
RFIgPSAweDEwCitjb25zdCBfU1lTX3JlY3Zmcm9tID0gX19fTlJfcmVjdmZyb20KK2NvbnN0IF9f
X0ZMVDY0WF9NSU5fMTBfRVhQX18gPSAoLTQ5MzEpCitjb25zdCBfU19JWEdSUCA9IChfU19JWFVT
UiA+PiAzKQorY29uc3QgX1NZU19ta25vZCA9IF9fX05SX21rbm9kCitjb25zdCBfTkVUTElOS19T
TUMgPSAyMgorY29uc3QgX1NZU191dGltZXMgPSBfX19OUl91dGltZXMKK2NvbnN0IF9GU19YRkxB
R19IQVNBVFRSID0gMHg4MDAwMDAwMAorY29uc3QgX19fREVDX0VWQUxfTUVUSE9EX18gPSAyCitj
b25zdCBfU0lHVFRJTiA9IDIxCitjb25zdCBfSVBQUk9UT19FU1AgPSA1MAorY29uc3QgX1NLRl9B
RF9OTEFUVFIgPSAxMgorY29uc3QgX0VBSV9NRU1PUlkgPSAtMTAKK2NvbnN0IF9TWVNfbGlzdHhh
dHRyID0gX19fTlJfbGlzdHhhdHRyCitjb25zdCBfQVJQT1BfTkFLID0gMTAKK2NvbnN0IF9CUEZf
SlNFVCA9IDB4NDAKK2NvbnN0IF9OX1RUWSA9IDAKK2NvbnN0IF9fUENfU09DS19NQVhCVUYgPSAx
MgorY29uc3QgX1RJT0NNX0RTUiA9IDB4MTAwCitjb25zdCBfX19GTFQzMl9NSU5fRVhQX18gPSAo
LTEyNSkKK2NvbnN0IF9UQ09GTFVTSCA9IDEKK2NvbnN0IF9UVU5ERVRBQ0hGSUxURVJfdmFsID0g
MTA3NDgxMjExOAorY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSU5URkxBR1MgPSAx
MTE5Citjb25zdCBfTUFEVl9IVUdFUEFHRSA9IDE0Citjb25zdCBfVENJT0ZMVVNIID0gMgorY29u
c3QgX0VUSF9QX05TSCA9IDB4ODk0RgorY29uc3QgX0lGTEFfQlJfTUNBU1RfSEFTSF9NQVggPSAy
NworY29uc3QgX0lGTEFfUFBQX0RFVl9GRCA9IDEKK2NvbnN0IF9TX0lTVUlEID0gX19fU19JU1VJ
RAorY29uc3QgX1ZTVEFSVCA9IDgKK2NvbnN0IF9FVEhfUF9DQU5GRCA9IDB4MDAwRAorY29uc3Qg
X19CSVRTX1NURElOVF9JTlROX0ggPSAxCitjb25zdCBfQlBGX0FMVSA9IDB4MDQKK2NvbnN0IF9f
X1NJWkVPRl9GTE9BVDgwX18gPSAxNgorY29uc3QgX19QT1NJWF9TU0laRV9NQVggPSAzMjc2Nwor
Y29uc3QgX19DU19QQVRIID0gMAorY29uc3QgX0hBVkVfVU5TRVRFTlYgPSAxCitjb25zdCBfRlJB
TUVfU0laRSA9IDE2OAorY29uc3QgX0lGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfVFggPSAxOQor
Y29uc3QgX19TWVNfVElNRVhfSCA9IDEKK2NvbnN0IF9JRkxBX1RVTl9VTlNQRUMgPSAwCitjb25z
dCBfTElOVVhfUkVCT09UX0NNRF9DQURfT0ZGID0gMHgwMDAwMDAwMAorY29uc3QgX1NJR1VTUjEg
PSAxMAorY29uc3QgX1NJR1VTUjIgPSAxMgorY29uc3QgX0hBVkVfU1lTX1NUQVRfSCA9IDEKK2Nv
bnN0IF9IQVZFX0ZBTExPQ0FURSA9IDEKK2NvbnN0IF9fX05SX3Vuc2hhcmUgPSAyNzIKK2NvbnN0
IF9DWDg2X0NDUjAgPSAweGMwCitjb25zdCBfQ1g4Nl9DQ1IxID0gMHhjMQorY29uc3QgX0NYODZf
Q0NSMiA9IDB4YzIKK2NvbnN0IF9DWDg2X0NDUjMgPSAweGMzCitjb25zdCBfU1lTX3J0X3NpZ3Rp
bWVkd2FpdCA9IF9fX05SX3J0X3NpZ3RpbWVkd2FpdAorY29uc3QgX19fTlJfdGtpbGwgPSAyMDAK
K2NvbnN0IF9DWDg2X0NDUjYgPSAweGVhCitjb25zdCBfQ1g4Nl9DQ1I3ID0gMHhlYgorY29uc3Qg
X01TR19NT1JFID0gMzI3NjgKK2NvbnN0IF9JUE9QVF9UU19UU09OTFkgPSAwCitjb25zdCBfSEFW
RV9MSU5VWF9SVE5FVExJTktfSCA9IDEKK2NvbnN0IF9QUklvMTYgPSAibyIKK2NvbnN0IF9QVFJB
Q0VfUE9LRVVTUiA9IDYKK2NvbnN0IF9fX05SX2dldGNwdSA9IDMwOQorY29uc3QgX0FGX0RFQ25l
dCA9IF9QRl9ERUNuZXQKK2NvbnN0IF9QQUNLQUdFX05BTUUgPSAicGFja2FnZS11bnVzZWQiCitj
b25zdCBfX1NDX1hPUEVOX1VOSVggPSA5MQorY29uc3QgX1g4Nl9DUjBfTldfQklUID0gMjkKK2Nv
bnN0IF9NRkRfQUxMT1dfU0VBTElORyA9IDIKK2NvbnN0IF9FQUlfQ0FOQ0VMRUQgPSAtMTAxCitj
b25zdCBfX19OUl9yZWFkdiA9IDE5Citjb25zdCBfX1BPU0lYMl9SRV9EVVBfTUFYID0gMjU1Citj
b25zdCBfVFVOU0VUSUZJTkRFWF92YWwgPSAxMDc0MDI1NjkwCitjb25zdCBfX1JQQ19ORVREQl9I
ID0gMQorY29uc3QgX01BUF9IVUdFX01BU0sgPSAweDNmCitjb25zdCBfTkRfTkFfRkxBR19TT0xJ
Q0lURUQgPSAweDAwMDAwMDQwCitjb25zdCBfVFVOU0VUVk5FVEhEUlNaX3ZhbCA9IDEwNzQwMjU2
ODgKK2NvbnN0IF9FQUlfQUREUkZBTUlMWSA9IC05Citjb25zdCBfX19TSVpFT0ZfRkxPQVQxMjhf
XyA9IDE2Citjb25zdCBfX19OUl92bXNwbGljZSA9IDI3OAorY29uc3QgX19fTlJfdW5hbWUgPSA2
MworY29uc3QgX1RDU0VUU192YWwgPSAyMTUwNgorY29uc3QgX19fTlJfZXhlY3ZlYXQgPSAzMjIK
K2NvbnN0IF9TWVNfdGltZXMgPSBfX19OUl90aW1lcworY29uc3QgX1JUTV9GX1BSRUZJWCA9IDB4
ODAwCitjb25zdCBfU0VFS19DVVIgPSAxCitjb25zdCBfSUZMQV9CUl9IRUxMT19USU1FUiA9IDE2
Citjb25zdCBfX1BDX1BJUEVfQlVGID0gNQorY29uc3QgX19DU19QT1NJWF9WNl9MUEJJR19PRkZC
SUdfTElOVEZMQUdTID0gMTEzMQorY29uc3QgX0lGTEFfR0VORVZFX1JFTU9URSA9IDIKK2NvbnN0
IF9SVE5MR1JQX01QTFNfUk9VVEUgPSAyNworY29uc3QgX1NZU190aW1lcl9zZXR0aW1lID0gX19f
TlJfdGltZXJfc2V0dGltZQorY29uc3QgX1BGX0xMQyA9IDI2Citjb25zdCBfRVRIX1BfTElOS19D
VEwgPSAweDg4NmMKK2NvbnN0IF9JUF9PUFRJT05TID0gNAorY29uc3QgX0NYODZfRElSMSA9IDB4
ZmYKK2NvbnN0IF9fUE9TSVhfUlRTSUdfTUFYID0gOAorY29uc3QgX1RJTUVfSU5TID0gMQorY29u
c3QgX0VJU0RJUiA9IDIxCitjb25zdCBfX0JJVFNfVFlQRVNfSCA9IDEKK2NvbnN0IF9fU1lTX1NP
Q0tFVF9IID0gMQorY29uc3QgX19fTlJfZnNldHhhdHRyID0gMTkwCitjb25zdCBfRUlPID0gNQor
Y29uc3QgX0lQUFJPVE9fSE9QT1BUUyA9IDAKK2NvbnN0IF9CTE9DS19TSVpFID0gKDE8PF9CTE9D
S19TSVpFX0JJVFMpCitjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX1NQRUNLMTI4XzI1Nl9DVFMg
PSA4Citjb25zdCBfSUZGX05PQVJQID0gMTI4Citjb25zdCBfX19GTFQ2NFhfTUFOVF9ESUdfXyA9
IDY0Citjb25zdCBfRVJFTU9URSA9IDY2Citjb25zdCBfX19GTFQ2NF9NSU5fXyA9IDEuMQorY29u
c3QgX05EX09QVF9SVFJfQURWX0lOVEVSVkFMID0gNworY29uc3QgX1NZU19waXBlID0gX19fTlJf
cGlwZQorY29uc3QgX05URl9FWFRfTEVBUk5FRCA9IDB4MTAKK2NvbnN0IF9TVEFfUFBTRVJST1Ig
PSAweDA4MDAKK2NvbnN0IF9FUkVNT1RFSU8gPSAxMjEKK2NvbnN0IF9JTlRfRkFTVDE2X01JTiA9
ICgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xKQorY29uc3QgX0hBVkVfTElOVVhfRklMVEVSX0ggPSAx
Citjb25zdCBfRUlEUk0gPSA0MworY29uc3QgX19TQ19GSUZPID0gMTQ0Citjb25zdCBfU0lfUVVF
VUUgPSAtMQorY29uc3QgX1NZU19nZXRfa2VybmVsX3N5bXMgPSBfX19OUl9nZXRfa2VybmVsX3N5
bXMKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElCUyA9IDExMTgKK2NvbnN0IF9U
Q09PTiA9IDEKK2NvbnN0IF9GX0RVUEZEID0gMAorY29uc3QgX1VJTlRfTEVBU1QxNl9XSURUSCA9
IDE2Citjb25zdCBfU1lTX3NldHJsaW1pdCA9IF9fX05SX3NldHJsaW1pdAorY29uc3QgX19QQVRI
X1BST1RPQ09MUyA9ICIvZXRjL3Byb3RvY29scyIKK2NvbnN0IF9NT0RfVEFJID0gX0FESl9UQUkK
K2NvbnN0IF9fU0NfVFJBQ0VfSU5IRVJJVCA9IDE4MworY29uc3QgX19fTlJfc2VuZHRvID0gNDQK
K2NvbnN0IF9ORVRMSU5LX1JPVVRFID0gMAorY29uc3QgX1BUUkFDRV9LSUxMID0gOAorY29uc3Qg
X1JUTkxHUlBfTURCID0gMjYKK2NvbnN0IF9ORVREQl9TVUNDRVNTID0gMAorY29uc3QgX0ZfU0VU
RkQgPSAyCitjb25zdCBfSEFWRV9NS0RJUkFUID0gMQorY29uc3QgX0lGTEFfVlhMQU5fTElNSVQg
PSA5Citjb25zdCBfX1NDX0hPU1RfTkFNRV9NQVggPSAxODAKK2NvbnN0IF9OTERMWSA9IDAwMDA0
MDAKK2NvbnN0IF9BREpfVElDSyA9IDB4NDAwMAorY29uc3QgX19QT1NJWDJfTElORV9NQVggPSAy
MDQ4Citjb25zdCBfRl9TRVRGTCA9IDQKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9M
REZMQUdTID0gMTE0MQorY29uc3QgX19fTlJfc2V0cmVzdWlkID0gMTE3Citjb25zdCBfX19ERUM2
NF9NSU5fRVhQX18gPSAoLTM4MikKK2NvbnN0IF9MX1NFVCA9IDAKK2NvbnN0IF9JRkxBX05VTV9S
WF9RVUVVRVMgPSAzMgorY29uc3QgX1NPX1NORExPV0FUID0gMTkKK2NvbnN0IF9TSU9DU0lGVFhR
TEVOID0gMHg4OTQzCitjb25zdCBfU09fVElNRVNUQU1QTlMgPSAzNQorY29uc3QgX0lOVF9GQVNU
MzJfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEpCitjb25zdCBfRlNfUE9MSUNZX0ZMQUdT
X1BBRF84ID0gMHgwMQorY29uc3QgX1NPX0JJTkRUT0RFVklDRSA9IDI1Citjb25zdCBfWERQX0ZM
QUdTX0RSVl9NT0RFID0gKDEgPDwgMikKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVNZU0dPT0QgPSAx
Citjb25zdCBfU0tGX0FEX05MQVRUUl9ORVNUID0gMTYKK2NvbnN0IF9SVEFfVEFCTEUgPSAxNQor
Y29uc3QgX1NJT0NEUkFSUCA9IDB4ODk2MAorY29uc3QgX1BSRUZJWF9VTlNQRUMgPSAwCitjb25z
dCBfSUNNUDZfRFNUX1VOUkVBQ0hfTk9QT1JUID0gNAorY29uc3QgX1BfUElEID0gMQorY29uc3Qg
X19VVFNOQU1FX1NZU05BTUVfTEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSAorY29uc3QgX19QT1NJ
WF9NRU1MT0NLX1JBTkdFID0gMjAwODA5Citjb25zdCBfX19ERUMxMjhfTUlOX0VYUF9fID0gKC02
MTQyKQorY29uc3QgX05MTV9GX01VTFRJID0gMHgwMgorY29uc3QgX1NPQ0tfQ0xPRVhFQyA9IDUy
NDI4OAorY29uc3QgX19fRkxUX01BWF9fID0gMS4xCitjb25zdCBfUE9TSVhfRkFEVl9OT1JFVVNF
ID0gX19fUE9TSVhfRkFEVl9OT1JFVVNFCitjb25zdCBfX19vc29ja2FkZHJfZGVmaW5lZCA9IDEK
K2NvbnN0IF9QVFJBQ0VfT19UUkFDRUVYRUMgPSAxNgorY29uc3QgX1VJTlRfRkFTVDY0X1dJRFRI
ID0gNjQKK2NvbnN0IF9FVEhfUF9TTkFQID0gMHgwMDA1Citjb25zdCBfX19TSVpFT0ZfUFRIUkVB
RF9CQVJSSUVSX1QgPSAzMgorY29uc3QgX0lGTEFfQlJfVE9QT0xPR1lfQ0hBTkdFID0gMTQKK2Nv
bnN0IF9fQklUU19VSU9fTElNX0ggPSAxCitjb25zdCBfUFRSQUNFX09fVFJBQ0VWRk9SS0RPTkUg
PSAzMgorY29uc3QgX19TQ19MT0dJTl9OQU1FX01BWCA9IDcxCitjb25zdCBfRVRIRVJNVFUgPSBf
RVRIX0RBVEFfTEVOCitjb25zdCBfUE9TSVhfRkFEVl9ET05UTkVFRCA9IF9fX1BPU0lYX0ZBRFZf
RE9OVE5FRUQKK2NvbnN0IF9SVFBST1RfQkFCRUwgPSA0MgorY29uc3QgX0ZfR0VUTEVBU0UgPSAx
MDI1Citjb25zdCBfX1NDX0xFVkVMNF9DQUNIRV9BU1NPQyA9IDE5OAorY29uc3QgX0lGTEFfVkxB
Tl9QUk9UT0NPTCA9IDUKK2NvbnN0IF9JUF9VTkJMT0NLX1NPVVJDRSA9IDM3Citjb25zdCBfU09f
UEFTU0NSRUQgPSAxNgorY29uc3QgX0NMT0NLX1RBSSA9IDExCitjb25zdCBfTkdST1VQU19NQVgg
PSA2NTUzNgorY29uc3QgX0ZJT1NFVE9XTiA9IDB4ODkwMQorY29uc3QgX19TQ19QSUlfT1NJX0NP
VFMgPSA2MworY29uc3QgX1NJT0NEQVJQID0gMHg4OTUzCitjb25zdCBfTUFQX0hVR0VfU0hJRlQg
PSAyNgorY29uc3QgX1VJTlRQVFJfTUFYID0gKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQorY29uc3Qg
X0VUSF9QX1dBTl9QUFAgPSAweDAwMDcKK2NvbnN0IF9JTl9FWENMX1VOTElOSyA9IDB4MDQwMDAw
MDAKK2NvbnN0IF9YODZfQ1IwX1dQX0JJVCA9IDE2Citjb25zdCBfT19FWENMID0gMDIwMAorY29u
c3QgX0JQRl9ORUcgPSAweDgwCitjb25zdCBfTVNHX05PU0lHTkFMID0gMTYzODQKK2NvbnN0IF9J
UFY2X1JYSE9QT1BUUyA9IF9JUFY2X0hPUE9QVFMKK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTUFDQURE
Ul9DT1VOVCA9IDYKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdTID0gMTEwMQor
Y29uc3QgX1BUUkFDRV9HRVRSRUdTRVQgPSAxNjkwMAorY29uc3QgX1NLRl9BRF9JRklOREVYID0g
OAorY29uc3QgX19TWVNfTU1BTl9IID0gMQorY29uc3QgX01TX0FDVElWRSA9IDEwNzM3NDE4MjQK
K2NvbnN0IF9SX09LID0gNAorY29uc3QgX0lQVjZfUkVDVkZSQUdTSVpFID0gNzcKK2NvbnN0IF9f
X05SX3J0X3NpZ3JldHVybiA9IDE1Citjb25zdCBfX19HTlVDX1BBVENITEVWRUxfXyA9IDAKK2Nv
bnN0IF9fX05SX2dldGl0aW1lciA9IDM2Citjb25zdCBfX19TSVpFT0ZfSU5UX18gPSA0Citjb25z
dCBfX19VSU5UX0xFQVNUNjRfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9ORFRQ
QV9VQ0FTVF9QUk9CRVMgPSAxMAorY29uc3QgX0lGTEFfQlJQT1JUX1BBRCA9IDI2Citjb25zdCBf
X1hCUzVfTFA2NF9PRkY2NCA9IDEKK2NvbnN0IF9TSUdBTFJNID0gMTQKK2NvbnN0IF9NU0dfT09C
ID0gMQorY29uc3QgX1JUTl9USFJPVyA9IDkKK2NvbnN0IF9VTE9OR19XSURUSCA9IF9fX1dPUkRT
SVpFCitjb25zdCBfWDg2X0NSNF9QU0VfQklUID0gNAorY29uc3QgX19TQ18yX0ZPUlRfREVWID0g
NDkKK2NvbnN0IF9fX05SX3N5c2xvZyA9IDEwMworY29uc3QgX19DU19QT1NJWF9WNl9MUEJJR19P
RkZCSUdfQ0ZMQUdTID0gMTEyOAorY29uc3QgX19fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUg
PSAyCitjb25zdCBfX19HTElCQ19VU0VfTElCX0VYVDIgPSAxCitjb25zdCBfVElPQ05PVFRZX3Zh
bCA9IDIxNTM4Citjb25zdCBfQUZfUEhPTkVUID0gX1BGX1BIT05FVAorY29uc3QgX05FVExJTktf
TkVURklMVEVSID0gMTIKK2NvbnN0IF9FVEhfRkNTX0xFTiA9IDQKK2NvbnN0IF9GU19YRkxBR19B
UFBFTkQgPSAweDAwMDAwMDEwCitjb25zdCBfX19OUl9pb2N0bCA9IDE2Citjb25zdCBfQ1g4Nl9B
UlJfQkFTRSA9IDB4YzQKK2NvbnN0IF9BSV9OVU1FUklDU0VSViA9IDB4MDQwMAorY29uc3QgX1BS
X1RTQ19FTkFCTEUgPSAxCitjb25zdCBfU0NIRURfSURMRSA9IDUKK2NvbnN0IF9GX09LID0gMAor
Y29uc3QgX19TQ19OTF9URVhUTUFYID0gMTI0Citjb25zdCBfSVBPUFRfTUVBU1VSRU1FTlQgPSBf
SVBPUFRfREVCTUVBUworY29uc3QgX1JUX1RBQkxFX0NPTVBBVCA9IDI1MgorY29uc3QgX19fTlJf
Z2V0cHJpb3JpdHkgPSAxNDAKK2NvbnN0IF9GU19OT0NPV19GTCA9IDB4MDA4MDAwMDAKK2NvbnN0
IF9JRkxBX05VTV9UWF9RVUVVRVMgPSAzMQorY29uc3QgX0lQVjZfSE9QT1BUUyA9IDU0Citjb25z
dCBfX19MT05HX0xPTkdfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9SVE1fTkVX
TkVJR0hUQkwgPSA2NAorY29uc3QgX1RDUF9RVUVVRV9TRVEgPSAyMQorY29uc3QgX0lGTEFfSU5G
T19TTEFWRV9EQVRBID0gNQorY29uc3QgX19fVkVSU0lPTl9fID0gIjguMy4wIgorY29uc3QgX0lG
TEFfR0VORVZFX0lEID0gMQorY29uc3QgX0lDTVA2X1BBUkFNUFJPQl9ORVhUSEVBREVSID0gMQor
Y29uc3QgX1NZU19kZWxldGVfbW9kdWxlID0gX19fTlJfZGVsZXRlX21vZHVsZQorY29uc3QgX0lQ
VjZfUlRIRFIgPSA1NworY29uc3QgX0xMT05HX01JTiA9ICgtX0xMT05HX01BWCAtIDEpCitjb25z
dCBfRUNPTU0gPSA3MAorY29uc3QgX1NZU190aW1lcl9nZXR0aW1lID0gX19fTlJfdGltZXJfZ2V0
dGltZQorY29uc3QgX19fTlJfbWlncmF0ZV9wYWdlcyA9IDI1NgorY29uc3QgX0lOX01PVkUgPSAo
X0lOX01PVkVEX0ZST00gfCBfSU5fTU9WRURfVE8pCitjb25zdCBfUE9SVF9SRVFVRVNUX1BSRUFT
U09DSUFURSA9IDAKK2NvbnN0IF9OX0FYMjUgPSA1Citjb25zdCBfX19PX0NMT0VYRUMgPSAwMjAw
MDAwMAorY29uc3QgX1ZXRVJBU0UgPSAxNAorY29uc3QgX19fSU5PX1RfTUFUQ0hFU19JTk82NF9U
ID0gMQorY29uc3QgX0VMSUJBQ0MgPSA3OQorY29uc3QgX0lQT1BUX1NFQ1VSX1VOQ0xBU1MgPSAw
eDAwMDAKK2NvbnN0IF9fUE9TSVhfU0hBUkVEX01FTU9SWV9PQkpFQ1RTID0gMjAwODA5Citjb25z
dCBfQVJQSFJEX0lQRERQID0gNzc3Citjb25zdCBfSUZMQV9CT05EX1NMQVZFX1NUQVRFID0gMQor
Y29uc3QgX1JMSU1JVF9TVEFDSyA9IDMKK2NvbnN0IF9QRl9BU0ggPSAxOAorY29uc3QgX19fTlJf
Z2V0cGVlcm5hbWUgPSA1MgorY29uc3QgX0lQVjZfUkVDVkVSUiA9IDI1Citjb25zdCBfTl9TVFJJ
UCA9IDQKK2NvbnN0IF9JUFBST1RPX0lDTVAgPSAxCitjb25zdCBfUFJfU1ZFX1ZMX0xFTl9NQVNL
ID0gMHhmZmZmCitjb25zdCBfRl9HRVRQSVBFX1NaID0gMTAzMgorY29uc3QgX0lPVl9NQVggPSBf
X19JT1ZfTUFYCitjb25zdCBfUlRQUk9UX1JJUCA9IDE4OQorY29uc3QgX19fTlJfbmV3ZnN0YXRh
dCA9IDI2MgorY29uc3QgX19TWVNfTU9VTlRfSCA9IDEKK2NvbnN0IF9QUl9UQVNLX1BFUkZfRVZF
TlRTX0VOQUJMRSA9IDMyCitjb25zdCBfSVBQUk9UT19QVVAgPSAxMgorY29uc3QgX0VUSF9QX1NM
T1cgPSAweDg4MDkKK2NvbnN0IF9TWVNfaW5vdGlmeV9ybV93YXRjaCA9IF9fX05SX2lub3RpZnlf
cm1fd2F0Y2gKK2NvbnN0IF9UQ1NFVEFXID0gMHg1NDA3Citjb25zdCBfUEFDS0VUX01VTFRJQ0FT
VCA9IDIKK2NvbnN0IF9fX0lOVDMyX01BWF9fID0gMHg3ZmZmZmZmZgorY29uc3QgX0xJTlVYX1JF
Qk9PVF9DTURfQ0FEX09OID0gMHg4OUFCQ0RFRgorY29uc3QgX0lGTEFfQk9ORF9BRF9BQ1RPUl9T
WVNfUFJJTyA9IDI0Citjb25zdCBfUFJfU0VUX0RVTVBBQkxFID0gNAorY29uc3QgX0VUSF9QX0VD
T05FVCA9IDB4MDAxOAorY29uc3QgX1NZU19zaG1jdGwgPSBfX19OUl9zaG1jdGwKK2NvbnN0IF9N
U19TSEFSRUQgPSAxMDQ4NTc2Citjb25zdCBfX19JRkxBX1BQUF9NQVggPSAyCitjb25zdCBfSEFW
RV9TWVNfU1RBVEZTX0ggPSAxCitjb25zdCBfWERQX0ZMQUdTX01BU0sgPSAoX1hEUF9GTEFHU19V
UERBVEVfSUZfTk9FWElTVCB8IF9YRFBfRkxBR1NfTU9ERVMpCitjb25zdCBfVElPQ0dSUzQ4NSA9
IDB4NTQyRQorY29uc3QgX0lQVjZfUkVDVlBLVElORk8gPSA0OQorY29uc3QgX0hBVkVfTElOVVhf
UkVCT09UX0ggPSAxCitjb25zdCBfVENQX05PREVMQVkgPSAxCitjb25zdCBfUFJFRklYX0FERFJF
U1MgPSAxCitjb25zdCBfUlBNX1BDT19BREQgPSAxCitjb25zdCBfVENQT1BUX01BWFNFRyA9IDIK
K2NvbnN0IF9TWVNfc2NoZWRfZ2V0YWZmaW5pdHkgPSBfX19OUl9zY2hlZF9nZXRhZmZpbml0eQor
Y29uc3QgX19SRUVOVFJBTlQgPSAxCitjb25zdCBfSVBWNl9EUk9QX01FTUJFUlNISVAgPSBfSVBW
Nl9MRUFWRV9HUk9VUAorY29uc3QgX19YT1BFTl9YUEczID0gMQorY29uc3QgX0VNRklMRSA9IDI0
Citjb25zdCBfX1NDX1hPUEVOX1JFQUxUSU1FID0gMTMwCitjb25zdCBfVEhfUFVTSCA9IDB4MDgK
K2NvbnN0IF9JRkxBX0JSX1BBRCA9IDQwCitjb25zdCBfQ0xEX0tJTExFRCA9IDIKK2NvbnN0IF9T
SUdUVE9VID0gMjIKK2NvbnN0IF9JRkxBX1ZGX1NQT09GQ0hLID0gNAorY29uc3QgX19TQ19NQl9M
RU5fTUFYID0gMTA4Citjb25zdCBfX19VSU5UNjRfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYK
K2NvbnN0IF9JRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9SWCA9IDEwCitjb25zdCBfX19saW51
eCA9IDEKK2NvbnN0IF9STElNSVRfTk9GSUxFID0gNworY29uc3QgX0lGTEFfQk9ORF9UTEJfRFlO
QU1JQ19MQiA9IDI3Citjb25zdCBfTkRUQV9DT05GSUcgPSA1Citjb25zdCBfX1BPU0lYMl9DX1ZF
UlNJT04gPSBfX19QT1NJWDJfVEhJU19WRVJTSU9OCitjb25zdCBfX1BPU0lYX01FTU9SWV9QUk9U
RUNUSU9OID0gMjAwODA5Citjb25zdCBfX1NDX1JFR0VYX1ZFUlNJT04gPSAxNTYKK2NvbnN0IF9J
RkxBX0lORVQ2X0lDTVA2U1RBVFMgPSA2Citjb25zdCBfX05FVERCX0ggPSAxCitjb25zdCBfRklP
QVNZTkMgPSAweDU0NTIKK2NvbnN0IF9JRkxBX1ZYTEFOX0wzTUlTUyA9IDE0Citjb25zdCBfX19T
X0lTR0lEID0gMDIwMDAKK2NvbnN0IF9NU19WRVJCT1NFID0gMzI3NjgKK2NvbnN0IF9ORFRBX0dD
X0lOVEVSVkFMID0gOAorY29uc3QgX0VUSF9QX0lSREEgPSAweDAwMTcKK2NvbnN0IF9fX05SX2lu
b3RpZnlfcm1fd2F0Y2ggPSAyNTUKK2NvbnN0IF9TWVNfcHdyaXRldiA9IF9fX05SX3B3cml0ZXYK
K2NvbnN0IF9fX3NpZ3N0YWNrX2RlZmluZWQgPSAxCitjb25zdCBfX19HQ0NfQVRPTUlDX1BPSU5U
RVJfTE9DS19GUkVFID0gMgorY29uc3QgX19TQ19DX0xBTkdfU1VQUE9SVCA9IDEzNQorY29uc3Qg
X0ZfU0VBTF9HUk9XID0gMHgwMDA0Citjb25zdCBfTkxfTU1BUF9TVEFUVVNfUkVTRVJWRUQgPSAx
Citjb25zdCBfSEFWRV9MT0ZGX1QgPSAxCitjb25zdCBfX1BPU0lYX0hJV0FUID0gX19QT1NJWF9Q
SVBFX0JVRgorY29uc3QgX1BSX0dFVF9USFBfRElTQUJMRSA9IDQyCitjb25zdCBfX0JJVFNfQllU
RVNXQVBfSCA9IDEKK2NvbnN0IF9GX1RFU1QgPSAzCitjb25zdCBfTVJFTUFQX0ZJWEVEID0gMgor
Y29uc3QgX01BWF9BRERSX0xFTiA9IDcKK2NvbnN0IF9fU0NfTE9OR19CSVQgPSAxMDYKK2NvbnN0
IF9PTk9DUiA9IDAwMDAwMjAKK2NvbnN0IF9TSV9NRVNHUSA9IC0zCitjb25zdCBfUFJJZEZBU1Q4
ID0gImQiCitjb25zdCBfSUZMQV9NQUNTRUNfUE9SVCA9IDIKK2NvbnN0IF9DQkFVRCA9IDAwMTAw
MTcKK2NvbnN0IF9TWVNfc2V0ZnN1aWQgPSBfX19OUl9zZXRmc3VpZAorY29uc3QgX19TQ19NQVBQ
RURfRklMRVMgPSAxNgorY29uc3QgX0ZGSV9MT05HX0xPTkdfTUFYID0gX0xPTkdfTE9OR19NQVgK
K2NvbnN0IF9ORF9SQV9GTEFHX09USEVSID0gMHg0MAorY29uc3QgX1RSQVBfVFJBQ0UgPSAyCitj
b25zdCBfX1NDX1JBV19TT0NLRVRTID0gMjM2Citjb25zdCBfRlNfWEZMQUdfU1lOQyA9IDB4MDAw
MDAwMjAKK2NvbnN0IF9JRkxBX0JPTkRfQVJQX0lQX1RBUkdFVCA9IDgKK2NvbnN0IF9fUE9TSVhf
UkVHRVhQID0gMQorY29uc3QgX1RDUF9JTkZPID0gMTEKK2NvbnN0IF9JRkxBX0JSUE9SVF9NQ0FT
VF9UT19VQ0FTVCA9IDI4Citjb25zdCBfUEZfTkZDID0gMzkKK2NvbnN0IF9TX0lGSUZPID0gX19f
U19JRklGTworY29uc3QgX0VBSV9OT1RDQU5DRUxFRCA9IC0xMDIKK2NvbnN0IF9QVFJBQ0VfT19U
UkFDRUVYSVQgPSA2NAorY29uc3QgX1NUQV9ST05MWSA9IChfU1RBX1BQU1NJR05BTCB8IF9TVEFf
UFBTSklUVEVSIHwgX1NUQV9QUFNXQU5ERVIgfCBfU1RBX1BQU0VSUk9SIHwgX1NUQV9DTE9DS0VS
UiB8IF9TVEFfTkFOTyB8IF9TVEFfTU9ERSB8IF9TVEFfQ0xLKQorY29uc3QgX1RDUF9GSU5fV0FJ
VDEgPSA0Citjb25zdCBfSUZMQV9JTkVUNl9TVEFUUyA9IDMKK2NvbnN0IF9fSU9DX1RZUEVTSElG
VCA9IChfX0lPQ19OUlNISUZUK19fSU9DX05SQklUUykKK2NvbnN0IF9fX0ZMVDEyOF9NSU5fXyA9
IDEuMQorY29uc3QgX1JURl9XSU5ET1cgPSAweDAwODAKK2NvbnN0IF9QUl9HRVRfQ0hJTERfU1VC
UkVBUEVSID0gMzcKK2NvbnN0IF9SVE5MR1JQX0lQVjRfTVJPVVRFID0gNgorY29uc3QgX05PX0FE
RFJFU1MgPSBfTk9fREFUQQorY29uc3QgX1NZU19mY2hvd25hdCA9IF9fX05SX2ZjaG93bmF0Citj
b25zdCBfX19OUl9nZXRjd2QgPSA3OQorY29uc3QgX1BSRUZJWF9DQUNIRUlORk8gPSAyCitjb25z
dCBfSVBPUFRfT0xFTiA9IDEKK2NvbnN0IF9TWVNfZmNobW9kID0gX19fTlJfZmNobW9kCitjb25z
dCBfX1NDX0JDX0RJTV9NQVggPSAzNworY29uc3QgX1NZU19zZW1vcCA9IF9fX05SX3NlbW9wCitj
b25zdCBfSUZMQV9WRl9TVEFUU19SWF9QQUNLRVRTID0gMAorY29uc3QgX19fUFRIUkVBRF9NVVRF
WF9VU0VfVU5JT04gPSAwCitjb25zdCBfVENJRkxVU0ggPSAwCitjb25zdCBfRUJBRFNMVCA9IDU3
Citjb25zdCBfRVRIRVJUWVBFX1JFVkFSUCA9IDB4ODAzNQorY29uc3QgX0hBVkVfRVBPTExfQ1JF
QVRFMSA9IDEKK2NvbnN0IF9fQklUU19UWVBFU19fX0xPQ0FMRV9UX0ggPSAxCitjb25zdCBfX19H
TlVDX18gPSA4Citjb25zdCBfU0NOZExFQVNUOCA9ICJoaGQiCitjb25zdCBfQjAgPSAwMDAwMDAw
Citjb25zdCBfSEFWRV9TWVNfSU5PVElGWV9IID0gMQorY29uc3QgX19fU19JRkRJUiA9IDAwNDAw
MDAKK2NvbnN0IF9UQ0FfUk9PVF9USU1FX0RFTFRBID0gNAorY29uc3QgX0NMT05FX1RIUkVBRCA9
IDB4MDAwMTAwMDAKK2NvbnN0IF9NU19QT1NJWEFDTCA9IDY1NTM2Citjb25zdCBfUEFUSF9NQVgg
PSA0MDk2Citjb25zdCBfSUZMQV9VTlNQRUMgPSAwCitjb25zdCBfX19OUl9yZWJvb3QgPSAxNjkK
K2NvbnN0IF9TT0xfSVAgPSAwCitjb25zdCBfVFVOX0ZfVUZPID0gMHgxMAorY29uc3QgX19fRkxU
NjRfSEFTX0RFTk9STV9fID0gMQorY29uc3QgX0lQVE9TX1BSRUNfQ1JJVElDX0VDUCA9IF9JUFRP
U19DTEFTU19DUzUKK2NvbnN0IF9JTl9MT09QQkFDS05FVCA9IDEyNworY29uc3QgX1NPTF9BQUwg
PSAyNjUKK2NvbnN0IF9TWVNfc2V0dGltZW9mZGF5ID0gX19fTlJfc2V0dGltZW9mZGF5Citjb25z
dCBfSVBQUk9UT19JRFAgPSAyMgorY29uc3QgX19TQ18yX0xPQ0FMRURFRiA9IDUyCitjb25zdCBf
SUZMQV9WRl9TVEFUU19QQUQgPSA2Citjb25zdCBfQUZfSU5FVCA9IF9QRl9JTkVUCitjb25zdCBf
Rl9TRVRMSyA9IF9GX1NFVExLNjQKK2NvbnN0IF9DWDg2X1BDUjEgPSAweGYwCitjb25zdCBfX19O
Ul9scmVtb3ZleGF0dHIgPSAxOTgKK2NvbnN0IF9JUE9QVF9OT09QID0gX0lQT1BUX05PUAorY29u
c3QgX1JUTVNHX05FV0RFVklDRSA9IDB4MTEKK2NvbnN0IF9IQVZFX1NFVFhBVFRSID0gMQorY29u
c3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9BRVNfMjU2X0NUUyA9IDQKK2NvbnN0IF9fQ1NfVjVfV0lE
VEhfUkVTVFJJQ1RFRF9FTlZTID0gNAorY29uc3QgX1NfSUZTT0NLID0gX19fU19JRlNPQ0sKK2Nv
bnN0IF9fX05SX3NpZ25hbGZkNCA9IDI4OQorY29uc3QgX19JU09DOTlfU09VUkNFID0gMQorY29u
c3QgX19fRkxUX0RJR19fID0gNgorY29uc3QgX19fTlJfZ2V0cGlkID0gMzkKK2NvbnN0IF9VTExP
TkdfV0lEVEggPSA2NAorY29uc3QgX19TQ19YT1BFTl9YUEcyID0gOTgKK2NvbnN0IF9TWVNfa2ls
bCA9IF9fX05SX2tpbGwKK2NvbnN0IF9CMTEwID0gMDAwMDAwMworY29uc3QgX1RDUF9SRVBBSVJf
UVVFVUUgPSAyMAorY29uc3QgX1JUTkxHUlBfSVBWNF9JRkFERFIgPSA1Citjb25zdCBfX19GWFNS
X18gPSAxCitjb25zdCBfTUFDVkxBTl9NT0RFX1BSSVZBVEUgPSAxCitjb25zdCBfX19OUl9zdGF0
eCA9IDMzMgorY29uc3QgX19fU0laRV9XSURUSF9fID0gNjQKK2NvbnN0IF9fUE9TSVhfVFRZX05B
TUVfTUFYID0gOQorY29uc3QgX0lGTEFfQk9ORF9BRF9BQ1RPUl9TWVNURU0gPSAyNgorY29uc3Qg
X1NPX0dFVF9GSUxURVIgPSBfU09fQVRUQUNIX0ZJTFRFUgorY29uc3QgX19VVElNRV9IID0gMQor
Y29uc3QgX1NUQVRYX0JBU0lDX1NUQVRTID0gMHgwN2ZmCitjb25zdCBfU1lTX3V0aW1lbnNhdCA9
IF9fX05SX3V0aW1lbnNhdAorY29uc3QgX19TQ18yX0NIQVJfVEVSTSA9IDk1Citjb25zdCBfVFVO
U0VUT1dORVJfdmFsID0gMTA3NDAyNTY3NgorY29uc3QgX1BUSFJFQURfU1RBQ0tfTUlOID0gMTYz
ODQKK2NvbnN0IF9TSUdQUk9GID0gMjcKK2NvbnN0IF9fU0NfTElORV9NQVggPSA0MworY29uc3Qg
X19fU0lHRVZfTUFYX1NJWkUgPSA2NAorY29uc3QgX0hBVkVfU0VURU5WID0gMQorY29uc3QgX19T
Q19TWVNURU1fREFUQUJBU0UgPSAxNjIKK2NvbnN0IF9GU19YRkxBR19OT0RVTVAgPSAweDAwMDAw
MDgwCitjb25zdCBfU1lTX3RpbWVyX2NyZWF0ZSA9IF9fX05SX3RpbWVyX2NyZWF0ZQorY29uc3Qg
X19QQ19MSU5LX01BWCA9IDAKK2NvbnN0IF9UQ1BPUFRfV0lORE9XID0gMworY29uc3QgX19CSVRT
X1BPU0lYMl9MSU1fSCA9IDEKK2NvbnN0IF9fX1VJTlRfTEVBU1QzMl9NQVhfXyA9IDB4ZmZmZmZm
ZmYKK2NvbnN0IF9fX05SX21xX25vdGlmeSA9IDI0NAorY29uc3QgX0lQUE9SVF9EQVlUSU1FID0g
MTMKK2NvbnN0IF9TWVNfc3RhdCA9IF9fX05SX3N0YXQKK2NvbnN0IF9QQVJFTkIgPSAwMDAwNDAw
Citjb25zdCBfRkFMTE9DX0ZMX0tFRVBfU0laRSA9IDB4MDEKK2NvbnN0IF9fU0NfU0NIQVJfTUFY
ID0gMTExCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9RVUVSSUVSID0gMjUKK2NvbnN0IF9NQURWX0hX
UE9JU09OID0gMTAwCitjb25zdCBfU09fQ09PS0lFID0gNTcKK2NvbnN0IF9fUE9TSVhfQVNZTkNf
SU8gPSAxCitjb25zdCBfUlRfU0NPUEVfTk9XSEVSRSA9IDI1NQorY29uc3QgX0lGTEFfQk9ORF9T
TEFWRV9BRF9BQ1RPUl9PUEVSX1BPUlRfU1RBVEUgPSA3Citjb25zdCBfTkRfT1BUX1BJX0ZMQUdf
T05MSU5LID0gMHg4MAorY29uc3QgX19TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQgPSA4MgorY29u
c3QgX1NZU19zZXRkb21haW5uYW1lID0gX19fTlJfc2V0ZG9tYWlubmFtZQorY29uc3QgX0ZfR0VU
T1dOX0VYID0gX19fRl9HRVRPV05fRVgKK2NvbnN0IF9FU1RBTEUgPSAxMTYKK2NvbnN0IF9fX05S
X2Z1dGV4ID0gMjAyCitjb25zdCBfSUZGX0RFVEFDSF9RVUVVRSA9IDB4MDQwMAorY29uc3QgX0lG
TEFfTElOS01PREUgPSAxNworY29uc3QgX0lQT1BUX1NFQ1VSSVRZID0gMTMwCitjb25zdCBfSUZM
QV9CUl9TVFBfU1RBVEUgPSA1Citjb25zdCBfX1BDX05BTUVfTUFYID0gMworY29uc3QgX0lGTEFf
R0VORVZFX1VEUF9aRVJPX0NTVU02X1RYID0gOQorY29uc3QgX1NJR0NPTlQgPSAxOAorY29uc3Qg
X19fTlJfZ2V0cG1zZyA9IDE4MQorY29uc3QgX1NZU19mY2hkaXIgPSBfX19OUl9mY2hkaXIKK2Nv
bnN0IF9JRkZfUE9SVFNFTCA9IDgxOTIKK2NvbnN0IF9TT19BVFRBQ0hfUkVVU0VQT1JUX0NCUEYg
PSA1MQorY29uc3QgX1RDQV9ST09UX0ZMQUdTID0gMgorY29uc3QgX19TQ19WNl9JTFAzMl9PRkZC
SUcgPSAxNzcKK2NvbnN0IF9NQVhfQ0FOT04gPSAyNTUKK2NvbnN0IF9JRkxBX0JPTkRfWE1JVF9I
QVNIX1BPTElDWSA9IDE0Citjb25zdCBfRVRIRVJfQ1JDX0xFTiA9IDQKK2NvbnN0IF9JRkxBX0lO
Rk9fREFUQSA9IDIKK2NvbnN0IF9fX0xJTktfWFNUQVRTX1RZUEVfTUFYID0gMgorY29uc3QgX05U
Rl9QUk9YWSA9IDB4MDgKK2NvbnN0IF9SVFBST1RfRUlHUlAgPSAxOTIKK2NvbnN0IF9fQ1NfVjdf
RU5WID0gMTE0OQorY29uc3QgX0FJX0lETiA9IDB4MDA0MAorY29uc3QgX1NfSVJPVEggPSAoX1Nf
SVJHUlAgPj4gMykKK2NvbnN0IF9SVE5MR1JQX05PTkUgPSAwCitjb25zdCBfSVBQUk9UT19HUkUg
PSA0NworY29uc3QgX1dFWElURUQgPSA0Citjb25zdCBfUEFDS0VUX1RYX1RJTUVTVEFNUCA9IDE2
Citjb25zdCBfRVBPTExIVVAgPSAxNgorY29uc3QgX0xUX09CSkRJUiA9ICIubGlicy8iCitjb25z
dCBfX19SVEFYX01BWCA9IDE4Citjb25zdCBfUEFDS0VUX0hEUkxFTiA9IDExCitjb25zdCBfQlBG
X0xTSCA9IDB4NjAKK2NvbnN0IF9UQ1BPTEVOX1NBQ0tfUEVSTUlUVEVEID0gMgorY29uc3QgX1BP
TExfUFJJID0gNQorY29uc3QgX19fTlJfc2V0cmV1aWQgPSAxMTMKK2NvbnN0IF9GU19YRkxBR19O
T0RFRlJBRyA9IDB4MDAwMDIwMDAKK2NvbnN0IF9fU0NfMl9QQlMgPSAxNjgKK2NvbnN0IF9TSU9D
U0lGRkxBR1MgPSAweDg5MTQKK2NvbnN0IF9fX0ZfR0VUT1dOID0gOQorY29uc3QgX19fSUZMQV9C
T05EX0FEX0lORk9fTUFYID0gNgorY29uc3QgX0JQRl9NQVhJTlNOUyA9IDQwOTYKK2NvbnN0IF9F
QUlfSUROX0VOQ09ERSA9IC0xMDUKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1RYX1BBQ0tFVFMgPSAx
Citjb25zdCBfUldIX1dSSVRFX0xJRkVfTUVESVVNID0gMworY29uc3QgX0ZJTEVfREVEVVBFX1JB
TkdFX1NBTUUgPSAwCitjb25zdCBfSVBQUk9UT19UQ1AgPSA2Citjb25zdCBfVElPQ01fQ0QgPSBf
VElPQ01fQ0FSCitjb25zdCBfQjEzNCA9IDAwMDAwMDQKK2NvbnN0IF9FQUlfRkFNSUxZID0gLTYK
K2NvbnN0IF9JRkxBX0JSUE9SVF9CQ0FTVF9GTE9PRCA9IDMwCitjb25zdCBfU1lTX2Zsb2NrID0g
X19fTlJfZmxvY2sKK2NvbnN0IF9IQVZFX05FVFBBQ0tFVF9QQUNLRVRfSCA9IDEKK2NvbnN0IF9F
VEhfUF9QUlAgPSAweDg4RkIKK2NvbnN0IF9PRklMTCA9IDAwMDAxMDAKK2NvbnN0IF9fQ1NfTEZT
NjRfTElCUyA9IDEwMDYKK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzI1Nl9YVFMgPSAx
Citjb25zdCBfSUZMQV9HVFBfRkQwID0gMQorY29uc3QgX0lGTEFfR1RQX0ZEMSA9IDIKK2NvbnN0
IF9IQVZFX1NZTkNfRklMRV9SQU5HRSA9IDEKK2NvbnN0IF9JRkFfTE9DQUwgPSAyCitjb25zdCBf
TkRfT1BUX1BJX0ZMQUdfUkFERFIgPSAweDIwCitjb25zdCBfVENQX0RFRkVSX0FDQ0VQVCA9IDkK
K2NvbnN0IF9NQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCA9IDQ2Citjb25zdCBfU1lTX3JlcXVlc3Rf
a2V5ID0gX19fTlJfcmVxdWVzdF9rZXkKK2NvbnN0IF9JQ01QNl9QQUNLRVRfVE9PX0JJRyA9IDIK
K2NvbnN0IF9YODZfQ1I0X1BDRV9CSVQgPSA4Citjb25zdCBfRUFJX0JBREZMQUdTID0gLTEKK2Nv
bnN0IF9fQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElOVEZMQUdTID0gMTExNQorY29uc3QgX1VUSU1F
X05PVyA9ICgoMSA8PCAzMCkgLSAxKQorY29uc3QgX19QT1NJWF9NQVhfSU5QVVQgPSAyNTUKK2Nv
bnN0IF9JRkxBX0JSUE9SVF9JRCA9IDE3Citjb25zdCBfRVRIX0RBVEFfTEVOID0gMTUwMAorY29u
c3QgX19fUkxJTUlUX1NJR1BFTkRJTkcgPSAxMQorY29uc3QgX1NZU19pb19kZXN0cm95ID0gX19f
TlJfaW9fZGVzdHJveQorY29uc3QgX1NPX0lOQ09NSU5HX05BUElfSUQgPSA1NgorY29uc3QgX0VU
SF9QX1BQUF9ESVNDID0gMHg4ODYzCitjb25zdCBfVENQT0xFTl9NQVhTRUcgPSA0Citjb25zdCBf
RVRIX1BfODAyXzNfTUlOID0gMHgwNjAwCitjb25zdCBfQVJQT1BfUlJFUExZID0gNAorY29uc3Qg
X0lQVjZfVU5JQ0FTVF9IT1BTID0gMTYKK2NvbnN0IF9ORVRMSU5LX05PX0VOT0JVRlMgPSA1Citj
b25zdCBfX19OUl9uYW1lX3RvX2hhbmRsZV9hdCA9IDMwMworY29uc3QgX19fRkxUMzJfTUFYX18g
PSAxLjEKK2NvbnN0IF9TWVNfdGltZXJmZF9jcmVhdGUgPSBfX19OUl90aW1lcmZkX2NyZWF0ZQor
Y29uc3QgX0lOX01PVkVEX1RPID0gMHgwMDAwMDA4MAorY29uc3QgX1NZU19nZXR0aWQgPSBfX19O
Ul9nZXR0aWQKK2NvbnN0IF9fUE9TSVhfSVBWNiA9IDIwMDgwOQorY29uc3QgX0FGX01QTFMgPSBf
UEZfTVBMUworY29uc3QgX1NZU19mYWxsb2NhdGUgPSBfX19OUl9mYWxsb2NhdGUKK2NvbnN0IF9B
Rl9XQU5QSVBFID0gX1BGX1dBTlBJUEUKK2NvbnN0IF9UQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMg
PSAxNgorY29uc3QgX19fTlJfc2V0ZG9tYWlubmFtZSA9IDE3MQorY29uc3QgX19fTkxNU0dFUlJf
QVRUUl9NQVggPSA0Citjb25zdCBfX19GTFQxMjhfSEFTX0RFTk9STV9fID0gMQorY29uc3QgX0VU
SEVSVFlQRV9QVVAgPSAweDAyMDAKK2NvbnN0IF9fQklUU19QT1NJWDFfTElNX0ggPSAxCitjb25z
dCBfX19HTElCQ19VU0VfSUVDXzYwNTU5X1RZUEVTX0VYVCA9IDEKK2NvbnN0IF9JUFY2X1JFQ1ZE
U1RPUFRTID0gNTgKK2NvbnN0IF9fX05SX3NlY3VyaXR5ID0gMTg1Citjb25zdCBfQVJQSFJEX1JB
V0lQID0gNTE5Citjb25zdCBfRVRIX1BfODAyX0VYMSA9IDB4ODhCNQorY29uc3QgX0lGQV9GX0RB
REZBSUxFRCA9IDB4MDgKK2NvbnN0IF9TQ054OCA9ICJoaHgiCitjb25zdCBfQ1NJR05BTCA9IDB4
MDAwMDAwZmYKK2NvbnN0IF9fX05SX2FjY2VwdDQgPSAyODgKK2NvbnN0IF9OSV9OVU1FUklDSE9T
VCA9IDEKK2NvbnN0IF9SVE5IX0ZfVU5SRVNPTFZFRCA9IDMyCitjb25zdCBfQjk2MDAgPSAwMDAw
MDE1Citjb25zdCBfTkxfTU1BUF9TVEFUVVNfVU5VU0VEID0gMAorY29uc3QgX1NPX0xPQ0tfRklM
VEVSID0gNDQKK2NvbnN0IF9JRkxBX1ZGX01BQyA9IDEKK2NvbnN0IF9JRkxBX1ZYTEFOX1JFTUNT
VU1fVFggPSAyMQorY29uc3QgX1VDSEFSX01BWCA9IChfU0NIQVJfTUFYICogMiArIDEpCitjb25z
dCBfSUZMQV9CT05EX0FSUF9WQUxJREFURSA9IDkKK2NvbnN0IF9JUFBST1RPX01QTFMgPSAxMzcK
K2NvbnN0IF9JRkxBX01JTl9NVFUgPSA1MAorY29uc3QgX0VUSF9QX0lQVjYgPSAweDg2REQKK2Nv
bnN0IF9FVEhfUF9BQVJQID0gMHg4MEYzCitjb25zdCBfU1lTX3NjaGVkX3NldHBhcmFtID0gX19f
TlJfc2NoZWRfc2V0cGFyYW0KK2NvbnN0IF9BVEZfUFVCTCA9IDB4MDgKK2NvbnN0IF9XQ09SRUZM
QUcgPSBfX19XQ09SRUZMQUcKK2NvbnN0IF9USU9DR1dJTlNaID0gMHg1NDEzCitjb25zdCBfX19V
U0VfWE9QRU4ySzhYU0kgPSAxCitjb25zdCBfUFJJaTggPSAiaSIKK2NvbnN0IF9BUlBIUkRfTE9P
UEJBQ0sgPSA3NzIKK2NvbnN0IF9fX0dDQ19JRUNfNTU5X0NPTVBMRVggPSAyCitjb25zdCBfU09f
QlJPQURDQVNUID0gNgorY29uc3QgX19fR0xJQkNfTUlOT1JfXyA9IDI4Citjb25zdCBfX1NDX1NU
UkVBTVMgPSAxNzQKK2NvbnN0IF9TWVNfc2htYXQgPSBfX19OUl9zaG1hdAorY29uc3QgX0lQVkxB
Tl9NT0RFX0wyID0gMAorY29uc3QgX19fTU1YX18gPSAxCitjb25zdCBfQjE1MCA9IDAwMDAwMDUK
K2NvbnN0IF9QT1NJWF9GQURWX1dJTExORUVEID0gMworY29uc3QgX0lGTEFfVlhMQU5fUlNDID0g
MTIKK2NvbnN0IF9QQUNLRVRfQlJPQURDQVNUID0gMQorY29uc3QgX1BGX0FUTVBWQyA9IDgKK2Nv
bnN0IF9TWVNfcHJlYWR2MiA9IF9fX05SX3ByZWFkdjIKK2NvbnN0IF9JTl9DTEFTU0NfTkVUID0g
MHhmZmZmZmYwMAorY29uc3QgX1BBQ0tFVF9DT1BZX1RIUkVTSCA9IDcKK2NvbnN0IF9FVEhfWkxF
TiA9IDYwCitjb25zdCBfVENQT1BUX0VPTCA9IDAKK2NvbnN0IF9JTjZfQUREUl9HRU5fTU9ERV9S
QU5ET00gPSAzCitjb25zdCBfSUZMQV9NQUNTRUNfRU5DT0RJTkdfU0EgPSA2Citjb25zdCBfX0NT
X1BPU0lYX1Y3X0xQNjRfT0ZGNjRfTElCUyA9IDExNDIKK2NvbnN0IF9FVEhfUF9QVVBBVCA9IDB4
MDIwMQorY29uc3QgX1NZU19nZXRydXNhZ2UgPSBfX19OUl9nZXRydXNhZ2UKK2NvbnN0IF9fUE9T
SVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSID0gMjAwODA5Citjb25zdCBfSUZMQV9QT1JUX1BST0ZJ
TEUgPSAyCitjb25zdCBfX19GTFQ2NF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBfVUlOVDY0
X1dJRFRIID0gNjQKK2NvbnN0IF9TWVNfa2NtcCA9IF9fX05SX2tjbXAKK2NvbnN0IF9JTl9NT1ZF
RF9GUk9NID0gMHgwMDAwMDA0MAorY29uc3QgX19VVFNOQU1FX01BQ0hJTkVfTEVOR1RIID0gX19V
VFNOQU1FX0xFTkdUSAorY29uc3QgX0lQVjZfTEVBVkVfR1JPVVAgPSAyMQorY29uc3QgX1NZU191
bmxpbmsgPSBfX19OUl91bmxpbmsKK2NvbnN0IF9IQVZFX1NUUlNJR05BTCA9IDEKK2NvbnN0IF9f
UENfQ0hPV05fUkVTVFJJQ1RFRCA9IDYKK2NvbnN0IF9fU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFE
UyA9IDEzMQorY29uc3QgX0VUSF9QX0lCT0UgPSAweDg5MTUKK2NvbnN0IF9PX0ZTWU5DID0gX09f
U1lOQworY29uc3QgX1JUTV9ORVdSVUxFID0gMzIKK2NvbnN0IF9JRkxBX1hEUF9GTEFHUyA9IDMK
K2NvbnN0IF9TSU9DR0lGQ09VTlQgPSAweDg5MzgKK2NvbnN0IF9QQUNLRVRfT1VUR09JTkcgPSA0
Citjb25zdCBfSVBUT1NfUFJFQ19NQVNLID0gX0lQVE9TX0NMQVNTX01BU0sKK2NvbnN0IF9fX05S
X3JlbmFtZWF0MiA9IDMxNgorY29uc3QgX19TQ19JUFY2ID0gMjM1Citjb25zdCBfVENQX0VTVEFC
TElTSEVEID0gMQorY29uc3QgX0FSUEhSRF9BUkNORVQgPSA3Citjb25zdCBfVElPQ1NFUlNXSUxE
ID0gMHg1NDU1Citjb25zdCBfRVRIX1BfUFVQID0gMHgwMjAwCitjb25zdCBfX1BPU0lYX1RIUkVB
RF9QUklPUklUWV9TQ0hFRFVMSU5HID0gMjAwODA5Citjb25zdCBfU0lHRVZfVEhSRUFEID0gMgor
Y29uc3QgX0hBVkVfVVRJTUVfSCA9IDEKK2NvbnN0IF9JUF9SRUNWT1BUUyA9IDYKK2NvbnN0IF9Q
Ul9TRVRfTU1fU1RBUlRfQ09ERSA9IDEKK2NvbnN0IF9fX0NQVV9TRVRTSVpFID0gMTAyNAorY29u
c3QgX1BGX0RFQ25ldCA9IDEyCitjb25zdCBfVElPQ01fQ0FSID0gMHgwNDAKK2NvbnN0IF9TWVNf
c2htZ2V0ID0gX19fTlJfc2htZ2V0Citjb25zdCBfUlRNX0ZfTE9PS1VQX1RBQkxFID0gMHgxMDAw
Citjb25zdCBfUlRQUk9UX05USyA9IDE1Citjb25zdCBfX19OUl9ldmVudGZkMiA9IDI5MAorY29u
c3QgX0lGTEFfRVZFTlRfQk9ORElOR19PUFRJT05TID0gNgorY29uc3QgX1NJT0NHSUZFTkNBUCA9
IDB4ODkyNQorY29uc3QgX19fTlJfdW5saW5rYXQgPSAyNjMKK2NvbnN0IF9JRkxBX0JSX1ZMQU5f
RklMVEVSSU5HID0gNworY29uc3QgX01TX0FTWU5DID0gMQorY29uc3QgX19JT0NfUkVBRCA9IDIK
K2NvbnN0IF9fVEhSRUFEX1NIQVJFRF9UWVBFU19IID0gMQorY29uc3QgX19fTlJfc2V0X3JvYnVz
dF9saXN0ID0gMjczCitjb25zdCBfSUZMQV9HUk9VUCA9IDI3Citjb25zdCBfU0NIRURfREVBRExJ
TkUgPSA2Citjb25zdCBfRUxJQkVYRUMgPSA4MworY29uc3QgX1dDSEFSX01JTiA9IF9fX1dDSEFS
X01JTgorY29uc3QgX19fTlJfcHV0cG1zZyA9IDE4MgorY29uc3QgX19fTlJfYXJjaF9wcmN0bCA9
IDE1OAorY29uc3QgX01TR19DVFJVTkMgPSA4Citjb25zdCBfSUZMQV9CUl9ST09UX1BBVEhfQ09T
VCA9IDEzCitjb25zdCBfTVNHX1NZTiA9IDEwMjQKK2NvbnN0IF9IQVZFX0xJTlVYX05FVExJTktf
SCA9IDEKK2NvbnN0IF9IQVZFX1NQTElDRSA9IDEKK2NvbnN0IF9QS0VZX0RJU0FCTEVfV1JJVEUg
PSAweDIKK2NvbnN0IF9GUEVfRkxURElWID0gMworY29uc3QgX19fTlJfcGtleV9tcHJvdGVjdCA9
IDMyOQorY29uc3QgX0lQUE9SVF9URUxORVQgPSAyMworY29uc3QgX1JUQV9TUE9SVCA9IDI4Citj
b25zdCBfX1hPUEVOX1ZFUlNJT04gPSA3MDAKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkYzMl9M
SUJTID0gMTEwMgorY29uc3QgX1JUTkxHUlBfTkVJR0ggPSAzCitjb25zdCBfX0NTX1BPU0lYX1Y2
X0lMUDMyX09GRjMyX0xERkxBR1MgPSAxMTE3Citjb25zdCBfVUlOVF9GQVNUOF9XSURUSCA9IDgK
K2NvbnN0IF9UQ1BPUFRfTk9QID0gMQorY29uc3QgX1RJTUVfQkFEID0gX1RJTUVfRVJST1IKK2Nv
bnN0IF9SVE1fREVMQUREUkxBQkVMID0gNzMKK2NvbnN0IF9fUE9TSVhfTk9fVFJVTkMgPSAxCitj
b25zdCBfUFJPVF9XUklURSA9IDB4MgorY29uc3QgX19fTlJfZXBvbGxfcHdhaXQgPSAyODEKK2Nv
bnN0IF9BUlBIUkRfU0lUID0gNzc2Citjb25zdCBfUlRNX05FV1BSRUZJWCA9IDUyCitjb25zdCBf
X19STElNSVRfTUVNTE9DSyA9IDgKK2NvbnN0IF9TWVNfbG9va3VwX2Rjb29raWUgPSBfX19OUl9s
b29rdXBfZGNvb2tpZQorY29uc3QgX19fT1JERVJfTElUVExFX0VORElBTl9fID0gMTIzNAorY29u
c3QgX1NZU19ta2RpcmF0ID0gX19fTlJfbWtkaXJhdAorY29uc3QgX1RDUE9MRU5fV0lORE9XID0g
MworY29uc3QgX0VUSF9QX1RJUEMgPSAweDg4Q0EKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX0tFWVNf
TUFYID0gMTI4Citjb25zdCBfQVRfRU1QVFlfUEFUSCA9IDB4MTAwMAorY29uc3QgX19fTlJfc2No
ZWRfeWllbGQgPSAyNAorY29uc3QgX1hEUF9GTEFHU19NT0RFUyA9IChfWERQX0ZMQUdTX1NLQl9N
T0RFIHwgX1hEUF9GTEFHU19EUlZfTU9ERSB8IF9YRFBfRkxBR1NfSFdfTU9ERSkKK2NvbnN0IF9I
QVZFX0lOT1RJRllfUk1fV0FUQ0ggPSAxCitjb25zdCBfX1NDX1NUUkVBTV9NQVggPSA1Citjb25z
dCBfX19GX0dFVFNJRyA9IDExCitjb25zdCBfRU1FRElVTVRZUEUgPSAxMjQKK2NvbnN0IF9TVEFf
Q0xLID0gMHg4MDAwCitjb25zdCBfSVBUT1NfTUlOQ09TVCA9IF9JUFRPU19MT1dDT1NUCitjb25z
dCBfX19GTFQ2NF9ERU5PUk1fTUlOX18gPSAxLjEKK2NvbnN0IF9STElNNjRfSU5GSU5JVFkgPSAw
eGZmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9GRklfVU5JWDY0ID0gMgorY29uc3QgX1JUTkxHUlBf
SVBWNF9ORVRDT05GID0gMjQKK2NvbnN0IF9SVEFYX0ZFQVRVUkVfVElNRVNUQU1QID0gKDEgPDwg
MikKK2NvbnN0IF9JTlQzMl9NQVggPSAoMjE0NzQ4MzY0NykKK2NvbnN0IF9FVEhFUlRZUEVfSVBW
NiA9IDB4ODZkZAorY29uc3QgX1RDUE9QVF9UU1RBTVBfSERSID0gKF9UQ1BPUFRfTk9QPDwyNHxf
VENQT1BUX05PUDw8MTZ8X1RDUE9QVF9USU1FU1RBTVA8PDh8X1RDUE9MRU5fVElNRVNUQU1QKQor
Y29uc3QgX0lGTEFfU1RBVFNfTElOS19YU1RBVFMgPSAyCitjb25zdCBfT19SRE9OTFkgPSAwMAor
Y29uc3QgX19fTlJfZ2V0cmVzdWlkID0gMTE4Citjb25zdCBfUFRSQUNFX0VWRU5UX0NMT05FID0g
MworY29uc3QgX0FSUEhSRF9QSU1SRUcgPSA3NzkKK2NvbnN0IF9JUFY2X01VTFRJQ0FTVF9IT1BT
ID0gMTgKK2NvbnN0IF9fX05SX2xpbmthdCA9IDI2NQorY29uc3QgX0ZTX05PQVRJTUVfRkwgPSAw
eDAwMDAwMDgwCitjb25zdCBfX1NDX1VMT05HX01BWCA9IDExNworY29uc3QgX0lQVE9TX0NMQVNT
X0RFRkFVTFQgPSBfSVBUT1NfQ0xBU1NfQ1MwCitjb25zdCBfU1lTX3NobWR0ID0gX19fTlJfc2ht
ZHQKK2NvbnN0IF9fX05SX29wZW4gPSAyCitjb25zdCBfVElNRV9PSyA9IDAKK2NvbnN0IF9CUEZf
VFhBID0gMHg4MAorY29uc3QgX19TQ19DSElMRF9NQVggPSAxCitjb25zdCBfU1lTX2FkZF9rZXkg
PSBfX19OUl9hZGRfa2V5Citjb25zdCBfU1REQ19IRUFERVJTID0gMQorY29uc3QgX01BUF9BTk9O
WU1PVVMgPSAweDIwCitjb25zdCBfWDg2X0NSNF9ERV9CSVQgPSAzCitjb25zdCBfVklOVFIgPSAw
Citjb25zdCBfTUlOU0lHU1RLU1ogPSAyMDQ4Citjb25zdCBfSVBUT1NfTE9XQ09TVCA9IDB4MDIK
K2NvbnN0IF9NQURWX01FUkdFQUJMRSA9IDEyCitjb25zdCBfSUZMQV9UVU5fUEVSU0lTVCA9IDYK
K2NvbnN0IF9IQVZFX05FVElORVRfSUNNUDZfSCA9IDEKK2NvbnN0IF9JRkxBX0JSUE9SVF9TVEFU
RSA9IDEKK2NvbnN0IF9DUFVfU0VUU0laRSA9IF9fX0NQVV9TRVRTSVpFCitjb25zdCBfSVBWRVJT
SU9OID0gNAorY29uc3QgX1NZU19leGl0X2dyb3VwID0gX19fTlJfZXhpdF9ncm91cAorY29uc3Qg
X1RJT0NDQlJLID0gMHg1NDI4Citjb25zdCBfX19MUDY0X09GRjY0X0xERkxBR1MgPSAiLW02NCIK
K2NvbnN0IF9QQUNLRVRfVk5FVF9IRFIgPSAxNQorY29uc3QgX19TQ19UUkFDRV9FVkVOVF9OQU1F
X01BWCA9IDI0MgorY29uc3QgX1BSX1NWRV9TRVRfVkwgPSA1MAorY29uc3QgX1NZU19mb3JrID0g
X19fTlJfZm9yaworY29uc3QgX0VUSEVSVFlQRV9UUkFJTCA9IDB4MTAwMAorY29uc3QgX1JURl9S
RUpFQ1QgPSAweDAyMDAKK2NvbnN0IF9DTE9ORV9GUyA9IDB4MDAwMDAyMDAKK2NvbnN0IF9VSU5U
MzJfV0lEVEggPSAzMgorY29uc3QgX1NJT0NHSUZUWFFMRU4gPSAweDg5NDIKK2NvbnN0IF9OREFf
VkxBTiA9IDUKK2NvbnN0IF9QVFJBQ0VfR0VUUkVHUyA9IDEyCitjb25zdCBfX1BPU0lYX0ZTWU5D
ID0gMjAwODA5Citjb25zdCBfU1lTX2dldHhhdHRyID0gX19fTlJfZ2V0eGF0dHIKK2NvbnN0IF9T
SU9DU0lGQUREUiA9IDB4ODkxNgorY29uc3QgX1NZU19tcHJvdGVjdCA9IF9fX05SX21wcm90ZWN0
Citjb25zdCBfX1BPU0lYX05BTUVfTUFYID0gMTQKK2NvbnN0IF9fUE9TSVhfT1BFTl9NQVggPSAy
MAorY29uc3QgX1RDU0VUQUYgPSAweDU0MDgKK2NvbnN0IF9UQ1BfTUQ1U0lHX01BWEtFWUxFTiA9
IDgwCitjb25zdCBfQlBGX0RJViA9IDB4MzAKK2NvbnN0IF9JUFY2X0FVVEhIRFIgPSAxMAorY29u
c3QgX01TR19UUlVOQyA9IDMyCitjb25zdCBfX1BPU0lYMl9DSEFSX1RFUk0gPSAyMDA4MDkKK2Nv
bnN0IF9TSUdBQlJUID0gNgorY29uc3QgX1NZU19yZWFkID0gX19fTlJfcmVhZAorY29uc3QgX19f
U0laRU9GX1BUSFJFQURfUldMT0NLQVRUUl9UID0gOAorY29uc3QgX0lGTEFfQlJfTUNBU1RfU05P
T1BJTkcgPSAyMworY29uc3QgX05FVExJTktfQ09OTkVDVEVEID0gMQorY29uc3QgX0ZTX0VYVEVO
VF9GTCA9IDB4MDAwODAwMDAKK2NvbnN0IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRV9ERVRFQ1RF
RCA9IDE1Citjb25zdCBfU1lTX2xsaXN0eGF0dHIgPSBfX19OUl9sbGlzdHhhdHRyCitjb25zdCBf
RVRIX0FMRU4gPSA2Citjb25zdCBfSUZGX05PX1BJID0gMHgxMDAwCitjb25zdCBfX19OUl9nZXRn
aWQgPSAxMDQKK2NvbnN0IF9UQ0FfS0lORCA9IDEKK2NvbnN0IF9fX0ZMVDMyWF9NSU5fXyA9IDEu
MQorY29uc3QgX19fREJMX0hBU19ERU5PUk1fXyA9IDEKK2NvbnN0IF9UQ1BfTEFTVF9BQ0sgPSA5
Citjb25zdCBfUlRfVEFCTEVfREVGQVVMVCA9IDI1MworY29uc3QgX05MX01NQVBfU1RBVFVTX1NL
SVAgPSA0Citjb25zdCBfSEFWRV9MT0cxUEwgPSAxCitjb25zdCBfRkFMTE9DX0ZMX05PX0hJREVf
U1RBTEUgPSAweDA0Citjb25zdCBfUlRfU0NPUEVfSE9TVCA9IDI1NAorY29uc3QgX1JUTVNHX0RF
TFJVTEUgPSAweDMyCitjb25zdCBfSVBQUk9UT19NQVggPSAyNTYKK2NvbnN0IF9JUE9QVF9DTEFT
U19NQVNLID0gMHg2MAorY29uc3QgX0FUX0VBQ0NFU1MgPSAweDIwMAorY29uc3QgX1NZU19wYXVz
ZSA9IF9fX05SX3BhdXNlCitjb25zdCBfTkRfT1BUX1BSRUZJWF9JTkZPUk1BVElPTiA9IDMKK2Nv
bnN0IF9TSUdVUkcgPSAyMworY29uc3QgX19TQ19USU1FUl9NQVggPSAzNQorY29uc3QgX05EX1JB
X0ZMQUdfSE9NRV9BR0VOVCA9IDB4MjAKK2NvbnN0IF9fU0NfU0NIQVJfTUlOID0gMTEyCitjb25z
dCBfVENQT0xFTl9UU1RBTVBfQVBQQSA9IChfVENQT0xFTl9USU1FU1RBTVArMikKK2NvbnN0IF9f
X0ZMVDMyX0RJR19fID0gNgorY29uc3QgX1BGX1BIT05FVCA9IDM1Citjb25zdCBfUlRQUk9UX1JF
RElSRUNUID0gMQorY29uc3QgX0lOX0RFTEVURV9TRUxGID0gMHgwMDAwMDQwMAorY29uc3QgX05J
X0lETiA9IDMyCitjb25zdCBfVFVOX1JFQURRX1NJWkUgPSA1MDAKK2NvbnN0IF9TVEFfUExMID0g
MHgwMDAxCitjb25zdCBfSVBfQUREX1NPVVJDRV9NRU1CRVJTSElQID0gMzkKK2NvbnN0IF9BRl9C
TFVFVE9PVEggPSBfUEZfQkxVRVRPT1RICitjb25zdCBfSUZMQV9CUlBPUlRfTUVTU0FHRV9BR0Vf
VElNRVIgPSAyMQorY29uc3QgX0VOT1RCTEsgPSAxNQorY29uc3QgX0ZGSV9TSVpFT0ZfQVJHID0g
OAorY29uc3QgX19CSVRTX0NQVV9TRVRfSCA9IDEKK2NvbnN0IF9TWVNfbXFfZ2V0c2V0YXR0ciA9
IF9fX05SX21xX2dldHNldGF0dHIKK2NvbnN0IF9TT0NLX0RDQ1AgPSA2Citjb25zdCBfX19YMzJf
U1lTQ0FMTF9CSVQgPSAweDQwMDAwMDAwCitjb25zdCBfSEFWRV9ETEZDTl9IID0gMQorY29uc3Qg
X0VUSEVSX0hEUl9MRU4gPSBfRVRIX0hMRU4KK2NvbnN0IF9TWVNfbWxvY2syID0gX19fTlJfbWxv
Y2syCitjb25zdCBfU1lTX2dldHJhbmRvbSA9IF9fX05SX2dldHJhbmRvbQorY29uc3QgX19HRVRP
UFRfUE9TSVhfSCA9IDEKK2NvbnN0IF9fX1NURENfSUVDXzU1OV9DT01QTEVYX18gPSAxCitjb25z
dCBfWDg2X0NSNF9PU1hTQVZFX0JJVCA9IDE4Citjb25zdCBfRU5PUFJPVE9PUFQgPSA5MgorY29u
c3QgX1JUQVhfRkVBVFVSRVMgPSAxMgorY29uc3QgX1NJT0NTSUZNQVAgPSAweDg5NzEKK2NvbnN0
IF9fX05SX2dldF9yb2J1c3RfbGlzdCA9IDI3NAorY29uc3QgX0lGTEFfRVZFTlQgPSA0NAorY29u
c3QgX0ZQRV9GTFRPVkYgPSA0Citjb25zdCBfSEFWRV9XQUlUNCA9IDEKK2NvbnN0IF9fU0NfQVZQ
SFlTX1BBR0VTID0gODYKK2NvbnN0IF9FQUlfSU5UUiA9IC0xMDQKK2NvbnN0IF9QUl9NQ0VfS0lM
TF9ERUZBVUxUID0gMgorY29uc3QgX1NPX1BFRVJHUk9VUFMgPSA1OQorY29uc3QgX0lGTEFfQk9O
RF9QQUNLRVRTX1BFUl9TTEFWRSA9IDIwCitjb25zdCBfU0lHSFVQID0gMQorY29uc3QgX1BUUkFD
RV9PX1RSQUNFVkZPUksgPSA0Citjb25zdCBfRU5PU1BDID0gMjgKK2NvbnN0IF9WRElTQ0FSRCA9
IDEzCitjb25zdCBfUlRNR1JQX05PVElGWSA9IDIKK2NvbnN0IF9TWVNfb3BlbmF0ID0gX19fTlJf
b3BlbmF0Citjb25zdCBfX19PUkRFUl9QRFBfRU5ESUFOX18gPSAzNDEyCitjb25zdCBfQVRfU1RB
VFhfU1lOQ19UWVBFID0gMHg2MDAwCitjb25zdCBfX19OUl90Z2tpbGwgPSAyMzQKK2NvbnN0IF9f
X05SX2dldF9rZXJuZWxfc3ltcyA9IDE3NworY29uc3QgX0VET1RET1QgPSA3MworY29uc3QgX1BG
X05FVEJFVUkgPSAxMworY29uc3QgX0VQT0xMT05FU0hPVCA9IDEwNzM3NDE4MjQKK2NvbnN0IF9N
QVBfQU5PTiA9IF9NQVBfQU5PTllNT1VTCitjb25zdCBfX19PX0RJUkVDVCA9IDA0MDAwMAorY29u
c3QgX0lQVFRMREVDID0gMQorY29uc3QgX19TQ19OR1JPVVBTX01BWCA9IDMKK2NvbnN0IF9JUFBP
UlRfRVhFQ1NFUlZFUiA9IDUxMgorY29uc3QgX19fTlJfb3Blbl9ieV9oYW5kbGVfYXQgPSAzMDQK
K2NvbnN0IF9fQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMgPSAxMTEwCitjb25zdCBfU09fS0VFUEFM
SVZFID0gOQorY29uc3QgX1NZU19ydF9zaWdyZXR1cm4gPSBfX19OUl9ydF9zaWdyZXR1cm4KK2Nv
bnN0IF9JQ01QNl9SUl9QQ09VU0VfUkFGTEFHU19BVVRPID0gMHgxMAorY29uc3QgX0FGX05FVExJ
TksgPSBfUEZfTkVUTElOSworY29uc3QgX05EX09QVF9QSV9GTEFHX0FVVE8gPSAweDQwCitjb25z
dCBfSVBWNl9BRERSRk9STSA9IDEKK2NvbnN0IF9USU1FX1dBSVQgPSA0Citjb25zdCBfSUZMQV9J
UE9JQl9VTlNQRUMgPSAwCitjb25zdCBfRUhPU1RET1dOID0gMTEyCitjb25zdCBfU1lTX2ZhZHZp
c2U2NCA9IF9fX05SX2ZhZHZpc2U2NAorY29uc3QgX0VUSF9QX0lGRSA9IDB4RUQzRQorY29uc3Qg
X0lQVjZfUkVDVkhPUExJTUlUID0gNTEKK2NvbnN0IF9USU9DR1NPRlRDQVIgPSAweDU0MTkKK2Nv
bnN0IF9QUl9HRVRfRU5ESUFOID0gMTkKK2NvbnN0IF9TWVNfdXN0YXQgPSBfX19OUl91c3RhdAor
Y29uc3QgX1NZU19pb19zdWJtaXQgPSBfX19OUl9pb19zdWJtaXQKK2NvbnN0IF9TT01BWENPTk4g
PSAxMjgKK2NvbnN0IF9JUF9NVFUgPSAxNAorY29uc3QgX19fRkxUMzJYX01JTl8xMF9FWFBfXyA9
ICgtMzA3KQorY29uc3QgX0lGTEFfR0VORVZFX1VOU1BFQyA9IDAKK2NvbnN0IF9TWVNfd3JpdGV2
ID0gX19fTlJfd3JpdGV2Citjb25zdCBfX19OUl9sZ2V0eGF0dHIgPSAxOTIKK2NvbnN0IF9fX1NJ
WkVPRl9QVEhSRUFEX0FUVFJfVCA9IDU2Citjb25zdCBfTU5UX0ZPUkNFID0gMQorY29uc3QgX19f
RkxUMTI4X0RFTk9STV9NSU5fXyA9IDEuMQorY29uc3QgX19fazhfXyA9IDEKK2NvbnN0IF9TWVNf
dW5zaGFyZSA9IF9fX05SX3Vuc2hhcmUKK2NvbnN0IF9NQURWX1JFTU9WRSA9IDkKK2NvbnN0IF9F
QURWID0gNjgKK2NvbnN0IF9TT0xfQUxHID0gMjc5Citjb25zdCBfQ0xPTkVfTkVXQ0dST1VQID0g
MHgwMjAwMDAwMAorY29uc3QgX19TQ19NRVNTQUdFX1BBU1NJTkcgPSAyMAorY29uc3QgX01TX01B
TkRMT0NLID0gNjQKK2NvbnN0IF9fVVRTTkFNRV9WRVJTSU9OX0xFTkdUSCA9IF9fVVRTTkFNRV9M
RU5HVEgKK2NvbnN0IF9SVE5MX0ZBTUlMWV9JUDZNUiA9IDEyOQorY29uc3QgX0lGTEFfUEhZU19Q
T1JUX0lEID0gMzQKK2NvbnN0IF9ETl9NVUxUSVNIT1QgPSAweDgwMDAwMDAwCitjb25zdCBfQjEy
MDAgPSAwMDAwMDExCitjb25zdCBfRVdPVUxEQkxPQ0sgPSBfRUFHQUlOCitjb25zdCBfSUZMQV9W
Rl9QT1JUID0gMQorY29uc3QgX19fU0lfSEFWRV9TSUdTWVMgPSAxCitjb25zdCBfTkxNX0ZfTUFU
Q0ggPSAweDIwMAorY29uc3QgX0FSUEhSRF9BWDI1ID0gMworY29uc3QgX19QT1NJWF9QUklPUklU
WV9TQ0hFRFVMSU5HID0gMjAwODA5Citjb25zdCBfUlRGX05PRk9SV0FSRCA9IDB4MTAwMAorY29u
c3QgX0ZfRFVQRkRfQ0xPRVhFQyA9IDEwMzAKK2NvbnN0IF9FQ0FOQ0VMRUQgPSAxMjUKK2NvbnN0
IF9JTlJfT1BFTl9NQVggPSA0MDk2Citjb25zdCBfQjMwMCA9IDAwMDAwMDcKK2NvbnN0IF9JTUFY
QkVMID0gMDAyMDAwMAorY29uc3QgX1BSSWRMRUFTVDMyID0gImQiCitjb25zdCBfUlVTQUdFX0NI
SUxEUkVOID0gLTEKK2NvbnN0IF9YODZfQ1I0X1ZNWEVfQklUID0gMTMKK2NvbnN0IF9GX09GRF9T
RVRMSyA9IDM3Citjb25zdCBfRU5PREFUQSA9IDYxCitjb25zdCBfU09MX0tDTSA9IDI4MQorY29u
c3QgX0FGX1BQUE9YID0gX1BGX1BQUE9YCitjb25zdCBfSEFWRV9TWVNfVFlQRVNfSCA9IDEKK2Nv
bnN0IF9TSU9DR0lGQUREUiA9IDB4ODkxNQorY29uc3QgX05EQV9EU1QgPSAxCitjb25zdCBfX19H
TElCQ19VU0VfREVQUkVDQVRFRF9HRVRTID0gMAorY29uc3QgX1RJT0NNX0xFID0gMHgwMDEKK2Nv
bnN0IF9TQ05vRkFTVDggPSAiaGhvIgorY29uc3QgX0FSUEhSRF9TS0lQID0gNzcxCitjb25zdCBf
X19ERUMzMl9TVUJOT1JNQUxfTUlOX18gPSAwLjAwMDAwMUUtOTUKK2NvbnN0IF9fX3BpZV9fID0g
MgorY29uc3QgX01TX1NMQVZFID0gNTI0Mjg4Citjb25zdCBfUkxJTUlUX0RBVEEgPSAyCitjb25z
dCBfX19MSVRUTEVfRU5ESUFOID0gMTIzNAorY29uc3QgX19QT1NJWF9SRUFMVElNRV9TSUdOQUxT
ID0gMjAwODA5Citjb25zdCBfU1lTX21zZ2dldCA9IF9fX05SX21zZ2dldAorY29uc3QgX0hBVkVf
QVRBTjJMID0gMQorY29uc3QgX0lGTEFfVlJGX1BPUlRfVEFCTEUgPSAxCitjb25zdCBfTkVUTElO
S19MSVNUX01FTUJFUlNISVBTID0gOQorY29uc3QgX19GQ05UTF9IID0gMQorY29uc3QgX19fTlJf
dXRpbWVzID0gMjM1Citjb25zdCBfUlRNX0dFVFJPVVRFID0gMjYKK2NvbnN0IF9VSU5UOF9NQVgg
PSAoMjU1KQorY29uc3QgX0FSUE9QX1JSRVFVRVNUID0gMworY29uc3QgX19fUkxJTV9OTElNSVRT
ID0gMTYKK2NvbnN0IF9JUFZMQU5fRl9WRVBBID0gMHgwMgorY29uc3QgX0lGTEFfTUFDVkxBTl9N
QUNBRERSX0RBVEEgPSA1Citjb25zdCBfX1BPU0lYX1BSSU9SSVRJWkVEX0lPID0gMjAwODA5Citj
b25zdCBfTk9fREFUQSA9IDQKK2NvbnN0IF9SVFBST1RfSVNJUyA9IDE4NworY29uc3QgX0hBVkVf
QVNfWDg2XzY0X1VOV0lORF9TRUNUSU9OX1RZUEUgPSAxCitjb25zdCBfSVBWNl8yMjkyUlRIRFIg
PSA1Citjb25zdCBfU1lTX21sb2NrID0gX19fTlJfbWxvY2sKK2NvbnN0IF9fRkVBVFVSRVNfSCA9
IDEKK2NvbnN0IF9TWVNfa2V4ZWNfbG9hZCA9IF9fX05SX2tleGVjX2xvYWQKK2NvbnN0IF9FUFJP
VE9UWVBFID0gOTEKK2NvbnN0IF9OWkVSTyA9IDIwCitjb25zdCBfU0lPQ1NJRk5FVE1BU0sgPSAw
eDg5MWMKK2NvbnN0IF9fX0lGTEFfWEZSTV9NQVggPSAzCitjb25zdCBfSUZMQV9NQUNTRUNfRU5D
UllQVCA9IDcKK2NvbnN0IF9fX05SX3BlcnNvbmFsaXR5ID0gMTM1Citjb25zdCBfU1lTX2dldF9t
ZW1wb2xpY3kgPSBfX19OUl9nZXRfbWVtcG9saWN5Citjb25zdCBfRUlMU0VRID0gODQKK2NvbnN0
IF9TWVNfc2V0cmVnaWQgPSBfX19OUl9zZXRyZWdpZAorY29uc3QgX1NPQ0tfU1RSRUFNID0gMQor
Y29uc3QgX1BSX0dFVF9TRUNDT01QID0gMjEKK2NvbnN0IF9JRkxBX01BQ1NFQ19TQ0kgPSAxCitj
b25zdCBfRVRIX0hMRU4gPSAxNAorY29uc3QgX1NDTV9DUkVERU5USUFMUyA9IDIKK2NvbnN0IF9f
X1VTRV9MQVJHRUZJTEU2NCA9IDEKK2NvbnN0IF9SVE1fR0VUUlVMRSA9IDM0Citjb25zdCBfX05F
VElORVRfSU5fSCA9IDEKK2NvbnN0IF9fU0NfTEVWRUwxX0RDQUNIRV9MSU5FU0laRSA9IDE5MAor
Y29uc3QgX0VEUVVPVCA9IDEyMgorY29uc3QgX0lGTEFfVlhMQU5fVE9TID0gNgorY29uc3QgX19f
U19JUkVBRCA9IDA0MDAKK2NvbnN0IF9GX0dFVEZEID0gMQorY29uc3QgX0FSUEhSRF9ERENNUCA9
IDUxNworY29uc3QgX19fTlJfdXNlcmZhdWx0ZmQgPSAzMjMKK2NvbnN0IF9GX0dFVEZMID0gMwor
Y29uc3QgX19fdGltZXZhbF9kZWZpbmVkID0gMQorY29uc3QgX0lQT1BUX0NPUFkgPSAweDgwCitj
b25zdCBfSVBWNl9DSEVDS1NVTSA9IDcKK2NvbnN0IF9TVEFUWF9BVFRSX0FQUEVORCA9IDB4MDAy
MAorY29uc3QgX0VUSF9QX1BQUF9TRVMgPSAweDg4NjQKK2NvbnN0IF9fU0NfTEVWRUwxX0RDQUNI
RV9TSVpFID0gMTg4Citjb25zdCBfVFVOR0VUU05EQlVGX3ZhbCA9IDIxNDc3Njc1MDcKK2NvbnN0
IF9GU19YRkxBR19QUkVBTExPQyA9IDB4MDAwMDAwMDIKK2NvbnN0IF9QUl9HRVRfU1BFQ1VMQVRJ
T05fQ1RSTCA9IDUyCitjb25zdCBfQ0JBVURFWCA9IDAwMTAwMDAKK2NvbnN0IF9TS0ZfQURfUEtU
VFlQRSA9IDQKK2NvbnN0IF9MSU5VWF9SRUJPT1RfTUFHSUMxID0gMHhmZWUxZGVhZAorY29uc3Qg
X0xJTlVYX1JFQk9PVF9NQUdJQzIgPSA2NzIyNzQ3OTMKK2NvbnN0IF9QRl9CUklER0UgPSA3Citj
b25zdCBfTVNfSV9WRVJTSU9OID0gODM4ODYwOAorY29uc3QgX01BRFZfUkFORE9NID0gMQorY29u
c3QgX19VVFNOQU1FX05PREVOQU1FX0xFTkdUSCA9IF9fVVRTTkFNRV9MRU5HVEgKK2NvbnN0IF9T
Q05vTEVBU1Q4ID0gImhobyIKK2NvbnN0IF9YODZfQ1IzX1BDSURfQklUUyA9IDEyCitjb25zdCBf
QUZfU01DID0gX1BGX1NNQworY29uc3QgX0FSUEhSRF9JRUVFODAyID0gNgorY29uc3QgX0FESl9P
RkZTRVQgPSAweDAwMDEKK2NvbnN0IF9FTE9PUCA9IDQwCitjb25zdCBfX19JRkxBX0dUUF9NQVgg
PSA1Citjb25zdCBfUlRQUk9UX0JHUCA9IDE4NgorY29uc3QgX0xJVFRMRV9FTkRJQU4gPSBfX19M
SVRUTEVfRU5ESUFOCitjb25zdCBfX19CWVRFX09SREVSID0gX19fTElUVExFX0VORElBTgorY29u
c3QgX1RDUElfT1BUX1RJTUVTVEFNUFMgPSAxCitjb25zdCBfX19UQ0FfTUFYID0gMTUKK2NvbnN0
IF9SVEFfTUVUUklDUyA9IDgKK2NvbnN0IF9TT0xfUFBQT0wyVFAgPSAyNzMKK2NvbnN0IF9fU0Nf
SU9WX01BWCA9IDYwCitjb25zdCBfX0xGUzY0X0xBUkdFRklMRSA9IDEKK2NvbnN0IF9NQVhfVkxB
Tl9MSVNUX0xFTiA9IDEKK2NvbnN0IF9TWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUiA9IDQKK2Nv
bnN0IF9fUE9TSVhfTVFfUFJJT19NQVggPSAzMgorY29uc3QgX19QT1NJWF9WRVJTSU9OID0gMjAw
ODA5Citjb25zdCBfX19OUl9wcG9sbCA9IDI3MQorY29uc3QgX0ZfT1dORVJfUElEID0gMQorY29u
c3QgX1RJT0NQS1RfSU9DVEwgPSA2NAorY29uc3QgX19fVVNFX1BPU0lYMTk5MzA5ID0gMQorY29u
c3QgX19fSU5UX0ZBU1Q4X01BWF9fID0gMHg3ZgorY29uc3QgX19TQ19CQ19TQ0FMRV9NQVggPSAz
OAorY29uc3QgX1NZU19jaHJvb3QgPSBfX19OUl9jaHJvb3QKK2NvbnN0IF9FUFJPVE9OT1NVUFBP
UlQgPSA5MworY29uc3QgX1NUQVRYX0dJRCA9IDB4MDAxMAorY29uc3QgX0lGTEFfQlJfR1JPVVBf
RldEX01BU0sgPSA5Citjb25zdCBfSVBQT1JUX1JFU0VSVkVEID0gMTAyNAorY29uc3QgX0lOX09O
TFlESVIgPSAweDAxMDAwMDAwCitjb25zdCBfU1RBX0ZMTCA9IDB4MDAwOAorY29uc3QgX0lGTEFf
TUFDU0VDX0VTID0gMTAKK2NvbnN0IF9fX1dJTlRfV0lEVEhfXyA9IDMyCitjb25zdCBfX1BPU0lY
X1BJUEVfQlVGID0gNTEyCitjb25zdCBfSVBPUFRfU0VDVVJfU0VDUkVUID0gMHhkNzg4Citjb25z
dCBfX19QSUNfXyA9IDIKK2NvbnN0IF9JU1RSSVAgPSAwMDAwMDQwCitjb25zdCBfX19SVE1fTUFY
ID0gMTAzCitjb25zdCBfSVBPUFRfU0VDVVJfQ09ORklEID0gMHhmMTM1Citjb25zdCBfRVNQSVBF
ID0gMjkKK2NvbnN0IF9BRl9TTkEgPSBfUEZfU05BCitjb25zdCBfUlRBX1BST1RPSU5GTyA9IDEw
Citjb25zdCBfX19OUl9icGYgPSAzMjEKK2NvbnN0IF9TWVNfYWZzX3N5c2NhbGwgPSBfX19OUl9h
ZnNfc3lzY2FsbAorY29uc3QgX1VJTlRfRkFTVDhfTUFYID0gKDI1NSkKK2NvbnN0IF9TVEFfTkFO
TyA9IDB4MjAwMAorY29uc3QgX1VTSFJUX1dJRFRIID0gMTYKK2NvbnN0IF9PX0xBUkdFRklMRSA9
IF9fX09fTEFSR0VGSUxFCitjb25zdCBfX19OUl9zY2hlZF9zZXRhZmZpbml0eSA9IDIwMworY29u
c3QgX1NPTF9MTEMgPSAyNjgKK2NvbnN0IF9fX0lGTEFfVlhMQU5fTUFYID0gMjkKK2NvbnN0IF9F
SVNDT05OID0gMTA2Citjb25zdCBfVElPQ1BLVF9TVEFSVCA9IDgKK2NvbnN0IF9JRkxBX0dTT19N
QVhfU0VHUyA9IDQwCitjb25zdCBfU09fTElOR0VSID0gMTMKK2NvbnN0IF9fX1VJTlRfTEVBU1Qx
Nl9NQVhfXyA9IDB4ZmZmZgorY29uc3QgX09MQ1VDID0gMDAwMDAwMgorY29uc3QgX1BSX0dFVF9U
SU1FUlNMQUNLID0gMzAKK2NvbnN0IF9fX05SX2xzdGF0ID0gNgorY29uc3QgX19QT1NJWF9TWU1M
T09QX01BWCA9IDgKK2NvbnN0IF9SVE5MR1JQX05PVElGWSA9IDIKK2NvbnN0IF9fX0RCTF9ESUdf
XyA9IDE1Citjb25zdCBfX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MgPSAxMTExCitjb25z
dCBfUlROX1VOUkVBQ0hBQkxFID0gNworY29uc3QgX19DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xE
RkxBR1MgPSAxMTI1Citjb25zdCBfX19ERUM2NF9NQVhfXyA9IDkuOTk5OTk5OTk5OTk5OTk5RTM4
NAorY29uc3QgX0lGTEFfSFNSX1NMQVZFMSA9IDEKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX0FUVFJf
U1RBQ0tTSVpFID0gMjAwODA5Citjb25zdCBfSEFWRV9ORVRJTkVUX0lQX0ggPSAxCitjb25zdCBf
SUZIV0FERFJMRU4gPSA2Citjb25zdCBfVENTRVRTRiA9IDB4NTQwNAorY29uc3QgX19CSVRTX1NJ
R0VWRU5UX0NPTlNUU19IID0gMQorY29uc3QgX1hEUF9BVFRBQ0hFRF9NVUxUSSA9IDQKK2NvbnN0
IF9OTE1TR0VSUl9BVFRSX1VOVVNFRCA9IDAKK2NvbnN0IF9NRkRfSFVHRVRMQiA9IDQKK2NvbnN0
IF9fX1dDSEFSX01BWCA9IF9fX1dDSEFSX01BWF9fCitjb25zdCBfX1NDX1NTSVpFX01BWCA9IDEx
MAorY29uc3QgX0lQX1VOSUNBU1RfSUYgPSA1MAorY29uc3QgX1NPX1JDVkJVRkZPUkNFID0gMzMK
K2NvbnN0IF9TWVNfbmZzc2VydmN0bCA9IF9fX05SX25mc3NlcnZjdGwKK2NvbnN0IF9CVVNfQURS
QUxOID0gMQorY29uc3QgX0lQVjZfUEtUSU5GTyA9IDUwCitjb25zdCBfU1lTX2xyZW1vdmV4YXR0
ciA9IF9fX05SX2xyZW1vdmV4YXR0cgorY29uc3QgX1RDU0VUU1cgPSAweDU0MDMKK2NvbnN0IF9F
QUlfU09DS1RZUEUgPSAtNworY29uc3QgX19TQ19WN19JTFAzMl9PRkYzMiA9IDIzNworY29uc3Qg
X1NZU19pb19jYW5jZWwgPSBfX19OUl9pb19jYW5jZWwKK2NvbnN0IF9JUFBST1RPX0lQSVAgPSA0
Citjb25zdCBfbGludXggPSAxCitjb25zdCBfV05PV0FJVCA9IDB4MDEwMDAwMDAKK2NvbnN0IF9f
X0xPQ0tfQVRPTUlDID0gMTYKK2NvbnN0IF9JUFY2X1JFQ1ZSVEhEUiA9IDU2Citjb25zdCBfVENQ
X0NBX09wZW4gPSAwCitjb25zdCBfX1NDX0xFVkVMM19DQUNIRV9MSU5FU0laRSA9IDE5NgorY29u
c3QgX0xJTlVYX1JFQk9PVF9DTURfSEFMVCA9IDB4Q0RFRjAxMjMKK2NvbnN0IF9JQ01QNl9GSUxU
RVIgPSAxCitjb25zdCBfSEFWRV9ORVRfUk9VVEVfSCA9IDEKK2NvbnN0IF9TT19CVVNZX1BPTEwg
PSA0NgorY29uc3QgX0VORklMRSA9IDIzCitjb25zdCBfX1NDX1RIUkVBRFMgPSA2NworY29uc3Qg
X19JT0NfU0laRU1BU0sgPSAoKDEgPDwgX19JT0NfU0laRUJJVFMpLTEpCitjb25zdCBfSVBfSVBT
RUNfUE9MSUNZID0gMTYKK2NvbnN0IF9SVE1TR19DT05UUk9MID0gMHg0MAorY29uc3QgX1NPX01B
UksgPSAzNgorY29uc3QgX01BUF9QUklWQVRFID0gMHgwMgorY29uc3QgX19QQ19SRUNfWEZFUl9B
TElHTiA9IDE3Citjb25zdCBfX0JJVFNfVFlQRVNJWkVTX0ggPSAxCitjb25zdCBfRkZJX1RZUEVf
TE9OR0RPVUJMRSA9IDQKK2NvbnN0IF9fX05SX2FkZF9rZXkgPSAyNDgKK2NvbnN0IF9fX1NJR19B
VE9NSUNfTUFYX18gPSAweDdmZmZmZmZmCitjb25zdCBfUF9QR0lEID0gMgorY29uc3QgX0VBSV9T
RVJWSUNFID0gLTgKK2NvbnN0IF9SVEFfRkxPVyA9IDExCitjb25zdCBfSU5fQ1JFQVRFID0gMHgw
MDAwMDEwMAorY29uc3QgX19QT1NJWF9UUkFDRV9MT0cgPSAtMQorY29uc3QgX1NDTmRMRUFTVDE2
ID0gImhkIgorY29uc3QgX1JUTl9CUk9BRENBU1QgPSAzCitjb25zdCBfUlRFWFRfRklMVEVSX0JS
VkxBTl9DT01QUkVTU0VEID0gKDEgPDwgMikKK2NvbnN0IF9JTlQxNl9NSU4gPSAoLTMyNzY3LTEp
Citjb25zdCBfSUZMQV9YRlJNX0xJTksgPSAxCitjb25zdCBfTkxNU0dFUlJfQVRUUl9NU0cgPSAx
Citjb25zdCBfQUZfUk9TRSA9IF9QRl9ST1NFCitjb25zdCBfU0NOZDE2ID0gImhkIgorY29uc3Qg
X19TQ19QSUlfSU5URVJORVRfREdSQU0gPSA2MgorY29uc3QgX0hBVkVfTUtOT0RBVCA9IDEKK2Nv
bnN0IF9JRkxBX0xJTktfTkVUTlNJRCA9IDM3Citjb25zdCBfU1lTX3NvY2tldCA9IF9fX05SX3Nv
Y2tldAorY29uc3QgX1NJT0NSVE1TRyA9IDB4ODkwRAorY29uc3QgX19FUlJOT19IID0gMQorY29u
c3QgX1BGX0FQUExFVEFMSyA9IDUKK2NvbnN0IF9fX1NTRV9fID0gMQorY29uc3QgX1hEUF9BVFRB
Q0hFRF9IVyA9IDMKK2NvbnN0IF9USU9DU0VSR0VUTVVMVEkgPSAweDU0NUEKK2NvbnN0IF9TRUdW
X0JOREVSUiA9IDMKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfVU5TUEVDID0gMAorY29uc3QgX0lG
TEFfQk9ORF9SRVNFTkRfSUdNUCA9IDE1Citjb25zdCBfUlRNX0RFTFFESVNDID0gMzcKK2NvbnN0
IF9JRkxBX0JPTkRfUFJJTUFSWV9SRVNFTEVDVCA9IDEyCitjb25zdCBfUkVOQU1FX05PUkVQTEFD
RSA9ICgxIDw8IDApCitjb25zdCBfVENQX0NMT1NFX1dBSVQgPSA4Citjb25zdCBfX19OUl9icmsg
PSAxMgorY29uc3QgX0VOQU1FVE9PTE9ORyA9IDM2Citjb25zdCBfX1NDX1RUWV9OQU1FX01BWCA9
IDcyCitjb25zdCBfQjUwID0gMDAwMDAwMQorY29uc3QgX1NZU19mZ2V0eGF0dHIgPSBfX19OUl9m
Z2V0eGF0dHIKK2NvbnN0IF9JRkxBX0lORVQ2X0ZMQUdTID0gMQorY29uc3QgX19fTlJfbXFfdGlt
ZWRzZW5kID0gMjQyCitjb25zdCBfX1NUUklOR19IID0gMQorY29uc3QgX05EVFBBX1BBRCA9IDE4
Citjb25zdCBfX19OUl9zZXRfdGlkX2FkZHJlc3MgPSAyMTgKK2NvbnN0IF9TVERJTl9GSUxFTk8g
PSAwCitjb25zdCBfX19OUl90aW1lcmZkX2NyZWF0ZSA9IDI4MworY29uc3QgX19fSUZMQV9JUE9J
Ql9NQVggPSA0Citjb25zdCBfX19zaWdzZXRfdF9kZWZpbmVkID0gMQorY29uc3QgX1BSX0ZQX0VY
Q19SRVMgPSAweDA4MDAwMAorY29uc3QgX1NZU19tZW1mZF9jcmVhdGUgPSBfX19OUl9tZW1mZF9j
cmVhdGUKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMgPSAxMTMwCitjb25z
dCBfSUNNUDZfRklMVEVSX1BBU1MgPSAyCitjb25zdCBfU0FfUkVTVEFSVCA9IDB4MTAwMDAwMDAK
K2NvbnN0IF9USU9DR0xDS1RSTUlPUyA9IDB4NTQ1NgorY29uc3QgX19TQ19QUklPUklUSVpFRF9J
TyA9IDEzCitjb25zdCBfUFRSQUNFX1NFQ0NPTVBfR0VUX0ZJTFRFUiA9IDE2OTA4Citjb25zdCBf
Q0xPTkVfTkVXSVBDID0gMHgwODAwMDAwMAorY29uc3QgX1VTRV9MSUJGRkkgPSAxCitjb25zdCBf
U0FfT05FU0hPVCA9IF9TQV9SRVNFVEhBTkQKK2NvbnN0IF9fX05SX2dldHBwaWQgPSAxMTAKK2Nv
bnN0IF9FTlhJTyA9IDYKK2NvbnN0IF9fX05SX2Vwb2xsX3dhaXQgPSAyMzIKK2NvbnN0IF9fU0Nf
WE9QRU5fU0hNID0gOTQKK2NvbnN0IF9JRkxBX1ZGX1ZMQU5fTElTVCA9IDEyCitjb25zdCBfQ0hB
Ul9NQVggPSBfU0NIQVJfTUFYCitjb25zdCBfSUZMQV9ORVRfTlNfRkQgPSAyOAorY29uc3QgX19f
UFJBR01BX1JFREVGSU5FX0VYVE5BTUUgPSAxCitjb25zdCBfX1NDX1JUU0lHX01BWCA9IDMxCitj
b25zdCBfU0lHV0lOQ0ggPSAyOAorY29uc3QgX01BRFZfRlJFRSA9IDgKK2NvbnN0IF9JRkxBX1BI
WVNfU1dJVENIX0lEID0gMzYKK2NvbnN0IF9TWVNfc3ltbGlua2F0ID0gX19fTlJfc3ltbGlua2F0
Citjb25zdCBfSUZBX0ZfVEVOVEFUSVZFID0gMHg0MAorY29uc3QgX0lQVjZfUkVDVlRDTEFTUyA9
IDY2Citjb25zdCBfX19GTFQzMlhfSEFTX1FVSUVUX05BTl9fID0gMQorY29uc3QgX1BPUlRfVkRQ
X1JFU1BPTlNFX09VVF9PRl9TWU5DID0gNgorY29uc3QgX1BGX05FVFJPTSA9IDYKK2NvbnN0IF9Q
Ul9TRVRfTU1fRU5EX0NPREUgPSAyCitjb25zdCBfU1RBX1BQU1RJTUUgPSAweDAwMDQKK2NvbnN0
IF9BUlBEX0xPT0tVUCA9IDB4MDIKK2NvbnN0IF9GX1NFVE9XTl9FWCA9IF9fX0ZfU0VUT1dOX0VY
Citjb25zdCBfQkNfU0NBTEVfTUFYID0gX19QT1NJWDJfQkNfU0NBTEVfTUFYCitjb25zdCBfU0lP
Q1NJRlNMQVZFID0gMHg4OTMwCitjb25zdCBfRU5PU1RSID0gNjAKK2NvbnN0IF9GU19TWU5DX0ZM
ID0gMHgwMDAwMDAwOAorY29uc3QgX19fTlJfc2NoZWRfc2V0cGFyYW0gPSAxNDIKK2NvbnN0IF9f
U0NfVEhSRUFEX1RIUkVBRFNfTUFYID0gNzYKK2NvbnN0IF9JRkxBX1RVTl9QSSA9IDQKK2NvbnN0
IF9TS0ZfQURfVkxBTl9UUElEID0gNjAKK2NvbnN0IF9JRkxBX0hTUl9TTEFWRTIgPSAyCitjb25z
dCBfUEFDS0VUX0ZBTk9VVCA9IDE4Citjb25zdCBfU0FfTk9ERUZFUiA9IDB4NDAwMDAwMDAKK2Nv
bnN0IF9OTE1TR19NSU5fVFlQRSA9IDB4MTAKK2NvbnN0IF9USU9DTV9SSSA9IF9USU9DTV9STkcK
K2NvbnN0IF9JUFRPU19FQ05fRUNUMCA9IDB4MDIKK2NvbnN0IF9TWVNfZmNudGwgPSBfX19OUl9m
Y250bAorY29uc3QgX1NJT0NTSUZNRU0gPSAweDg5MjAKK2NvbnN0IF9JRkxBX0lQVkxBTl9VTlNQ
RUMgPSAwCitjb25zdCBfU1lTX2dldGV1aWQgPSBfX19OUl9nZXRldWlkCitjb25zdCBfUlROX0xP
Q0FMID0gMgorY29uc3QgX1RVTlNFVE9GRkxPQURfdmFsID0gMTA3NDAyNTY4MAorY29uc3QgX05M
TVNHRVJSX0FUVFJfTUFYID0gMworY29uc3QgX0lGTEFfVlhMQU5fR1JPVVA2ID0gMTYKK2NvbnN0
IF9FVEhfTUlOX01UVSA9IDY4Citjb25zdCBfU0NOb0xFQVNUMTYgPSAiaG8iCitjb25zdCBfSUZG
X05BUEkgPSAweDAwMTAKK2NvbnN0IF9GRklfVFlQRV9VSU5UNjQgPSAxMQorY29uc3QgX1BGX0NB
SUYgPSAzNworY29uc3QgX0NMT05FX1NFVFRMUyA9IDB4MDAwODAwMDAKK2NvbnN0IF9fX0RFQzY0
X1NVQk5PUk1BTF9NSU5fXyA9IDAuMDAwMDAwMDAwMDAwMDAxRS0zODMKK2NvbnN0IF9fX09fTk9G
T0xMT1cgPSAwNDAwMDAwCitjb25zdCBfX0JJVFNfU0lHTlVNX0ggPSAxCitjb25zdCBfTkVUTElO
S19EUk9QX01FTUJFUlNISVAgPSAyCitjb25zdCBfX19OUl9pbm90aWZ5X2luaXQgPSAyNTMKK2Nv
bnN0IF9TVEFUWF9BVFRSX05PRFVNUCA9IDB4MDA0MAorY29uc3QgX19fTlJfdXRpbWVuc2F0ID0g
MjgwCitjb25zdCBfX19OUl90aW1lcmZkX3NldHRpbWUgPSAyODYKK2NvbnN0IF9JRkxBX0lORVRf
VU5TUEVDID0gMAorY29uc3QgX0FGX05FVEJFVUkgPSBfUEZfTkVUQkVVSQorY29uc3QgX1JUX1RB
QkxFX01BSU4gPSAyNTQKK2NvbnN0IF9TS0ZfQURfT0ZGID0gKC0weDEwMDApCitjb25zdCBfX19E
RUMzMl9NQU5UX0RJR19fID0gNworY29uc3QgX0JNQVBfSU9DVEwgPSAxCitjb25zdCBfUlRNX05F
V1RGSUxURVIgPSA0NAorY29uc3QgX1NBX05PTUFTSyA9IF9TQV9OT0RFRkVSCitjb25zdCBfTUFQ
X0VYRUNVVEFCTEUgPSAweDAxMDAwCitjb25zdCBfU1RBX1VOU1lOQyA9IDB4MDA0MAorY29uc3Qg
X0VOT1RESVIgPSAyMAorY29uc3QgX0VJTlZBTCA9IDIyCitjb25zdCBfVFVOR0VURklMVEVSX3Zh
bCA9IDIxNDg1NTM5NDcKK2NvbnN0IF9fX05SX3NjaGVkX2dldGF0dHIgPSAzMTUKK2NvbnN0IF9U
VU5TRVRERUJVR192YWwgPSAxMDc0MDI1NjczCitjb25zdCBfU0NOeDE2ID0gImh4IgorY29uc3Qg
X0lQX0ZSRUVCSU5EID0gMTUKK2NvbnN0IF9JTl9DTEFTU0FfTUFYID0gMTI4Citjb25zdCBfQjc1
ID0gMDAwMDAwMgorY29uc3QgX0VQT0xMX0NMT0VYRUMgPSA1MjQyODgKK2NvbnN0IF9ORVRMSU5L
X0dFTkVSSUMgPSAxNgorY29uc3QgX1BUUkFDRV9QRUVLVVNSID0gMworY29uc3QgX1BBQ0tFVF9P
VEhFUkhPU1QgPSAzCitjb25zdCBfX19GTFQ2NF9ESUdfXyA9IDE1Citjb25zdCBfQVJQSFJEX0lF
RUU4MDJfVFIgPSA4MDAKK2NvbnN0IF9JRkxBX0JSUE9SVF9MRUFSTklORyA9IDgKK2NvbnN0IF9U
Q0lPRkYgPSAyCitjb25zdCBfUlRfVEFCTEVfVU5TUEVDID0gMAorY29uc3QgX05EVFBBX0RFTEFZ
X1BST0JFX1RJTUUgPSA3Citjb25zdCBfX1NDX0FTWU5DSFJPTk9VU19JTyA9IDEyCitjb25zdCBf
TkRfUk9VVEVSX0FEVkVSVCA9IDEzNAorY29uc3QgX1BBQ0tFVF9EUk9QX01FTUJFUlNISVAgPSAy
Citjb25zdCBfSU5fQ0xPU0VfV1JJVEUgPSAweDAwMDAwMDA4Citjb25zdCBfTkVUTElOS19DT05O
RUNUT1IgPSAxMQorY29uc3QgX1RJT0NNX1NSID0gMHgwMTAKK2NvbnN0IF9GX0dFVExLID0gX0Zf
R0VUTEs2NAorY29uc3QgX1RJT0NNX1NUID0gMHgwMDgKK2NvbnN0IF9FS0VZRVhQSVJFRCA9IDEy
NworY29uc3QgX1NJT0NBVE1BUksgPSAweDg5MDUKK2NvbnN0IF9fU0NfTEVWRUwyX0NBQ0hFX1NJ
WkUgPSAxOTEKK2NvbnN0IF9VSU5UX0xFQVNUOF9XSURUSCA9IDgKK2NvbnN0IF9TSU9DR0lGQlJE
QUREUiA9IDB4ODkxOQorY29uc3QgX1JUTV9HRVRBQ1RJT04gPSA1MAorY29uc3QgX1NPTF9BVE0g
PSAyNjQKK2NvbnN0IF9fU0NfVFpOQU1FX01BWCA9IDYKK2NvbnN0IF9GX1NFVExLVyA9IF9GX1NF
VExLVzY0Citjb25zdCBfX19XQ0hBUl9NSU5fXyA9ICgtX19fV0NIQVJfTUFYX18gLSAxKQorY29u
c3QgX19TQ19YQlM1X0xQQklHX09GRkJJRyA9IDEyOAorY29uc3QgX1BPUlRfUFJPRklMRV9SRVNQ
T05TRV9CQURTVEFURSA9IDI1OQorY29uc3QgX1NFRUtfSE9MRSA9IDQKK2NvbnN0IF9JUFBPUlRf
U01UUCA9IDI1Citjb25zdCBfVElPQ0NPTlMgPSAweDU0MUQKK2NvbnN0IF9JRl9OQU1FU0laRSA9
IDE2Citjb25zdCBfRUJBREUgPSA1MgorY29uc3QgX0VCQURGID0gOQorY29uc3QgX19fTlJfY2xv
Y2tfYWRqdGltZSA9IDMwNQorY29uc3QgX1NZU19mc3RhdGZzID0gX19fTlJfZnN0YXRmcworY29u
c3QgX0VDSE9LRSA9IDAwMDQwMDAKK2NvbnN0IF9IQVZFX1NZU19VVFNOQU1FX0ggPSAxCitjb25z
dCBfUldIX1dSSVRFX0xJRkVfTk9ORSA9IDEKK2NvbnN0IF9CMzUwMDAwMCA9IDAwMTAwMTYKK2Nv
bnN0IF9fX05SX3NlbmRmaWxlID0gNDAKK2NvbnN0IF9fX05SX2ZjaG93bmF0ID0gMjYwCitjb25z
dCBfRUJBRFIgPSA1MworY29uc3QgX1JFR19SU1AgPSAxNQorY29uc3QgX1NJR0NITEQgPSAxNwor
Y29uc3QgX19fTlJfZm9yayA9IDU3Citjb25zdCBfQUZfRklMRSA9IF9QRl9GSUxFCitjb25zdCBf
Q0xPQ0tfUkVBTFRJTUVfQUxBUk0gPSA4Citjb25zdCBfX1NDX1RIUkVBRF9TVEFDS19NSU4gPSA3
NQorY29uc3QgX0lGTEFfVlhMQU5fUE9SVCA9IDE1Citjb25zdCBfSUZMQV9NQUNTRUNfVkFMSURB
VElPTiA9IDEzCitjb25zdCBfSUZMQV9CT05EX0FSUF9BTExfVEFSR0VUUyA9IDEwCitjb25zdCBf
X1hPUEVOX1VOSVggPSAxCitjb25zdCBfRUhPU1RVTlJFQUNIID0gMTEzCitjb25zdCBfUkxJTV9T
QVZFRF9NQVggPSBfUkxJTV9JTkZJTklUWQorY29uc3QgX1NfQkxLU0laRSA9IDUxMgorY29uc3Qg
X19fdW5peCA9IDEKK2NvbnN0IF9fX05SX2ZjaG1vZCA9IDkxCitjb25zdCBfU0NOb0xFQVNUMzIg
PSAibyIKK2NvbnN0IF9FTDNSU1QgPSA0NworY29uc3QgX0ZGSV9GQVNUQ0FMTCA9IDQKK2NvbnN0
IF9JRkxBX1ZGX1NUQVRTX1RYX0JZVEVTID0gMworY29uc3QgX1RDU0VUWEYgPSAweDU0MzQKK2Nv
bnN0IF9JRkxBX1BIWVNfUE9SVF9OQU1FID0gMzgKK2NvbnN0IF9JTlRfRkFTVDhfV0lEVEggPSA4
Citjb25zdCBfQ1JUU0NUUyA9IDAyMDAwMDAwMDAwMAorY29uc3QgX19fSUZMQV9NQUNTRUNfTUFY
ID0gMTUKK2NvbnN0IF9JRkxBX05FVF9OU19QSUQgPSAxOQorY29uc3QgX1NJT0NTSUZIV0FERFIg
PSAweDg5MjQKK2NvbnN0IF9fX1NJX0FTWU5DSU9fQUZURVJfU0lHSU8gPSAxCitjb25zdCBfVElP
Q1ZIQU5HVVAgPSAweDU0MzcKK2NvbnN0IF9BVEZfTkVUTUFTSyA9IDB4MjAKK2NvbnN0IF9UQ1NF
VFhXID0gMHg1NDM1Citjb25zdCBfU09MX05GQyA9IDI4MAorY29uc3QgX19fU0laRU9GX0lOVDEy
OF9fID0gMTYKK2NvbnN0IF9fX1NURENfVVRGXzE2X18gPSAxCitjb25zdCBfVElPQ1BLVF9ET1NU
T1AgPSAzMgorY29uc3QgX0RUX0xOSyA9IDEwCitjb25zdCBfX19GTFQzMl9NSU5fMTBfRVhQX18g
PSAoLTM3KQorY29uc3QgX0VOT0xDSyA9IDM3Citjb25zdCBfU1lTX3NjaGVkX3JyX2dldF9pbnRl
cnZhbCA9IF9fX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbAorY29uc3QgX0FGX1JYUlBDID0gX1BG
X1JYUlBDCitjb25zdCBfUFJfR0VUX1VOQUxJR04gPSA1Citjb25zdCBfSU5fQ0xBU1NCX0hPU1Qg
PSAoMHhmZmZmZmZmZiAmIF5fSU5fQ0xBU1NCX05FVCkKK2NvbnN0IF9UQ0FfRkxBR19MQVJHRV9E
VU1QX09OID0gKDEgPDwgMCkKK2NvbnN0IF9fX05SX21rZGlyID0gODMKK2NvbnN0IF9fU0NfVEhS
RUFEX1NBRkVfRlVOQ1RJT05TID0gNjgKK2NvbnN0IF9ORFRQQV9NQ0FTVF9SRVBST0JFUyA9IDE3
Citjb25zdCBfSVBWNl9SWERTVE9QVFMgPSBfSVBWNl9EU1RPUFRTCitjb25zdCBfX19OUl9mYWNj
ZXNzYXQgPSAyNjkKK2NvbnN0IF9FVEhfUF9NVlJQID0gMHg4OEY1Citjb25zdCBfX1NDX1hPUEVO
X0xFR0FDWSA9IDEyOQorY29uc3QgX1BBR0VfU0laRSA9ICgxIDw8IF9QQUdFX1NISUZUKQorY29u
c3QgX1JURl9OT05FWFRIT1AgPSAweDAwMjAwMDAwCitjb25zdCBfX0JJVFNfV0NIQVJfSCA9IDEK
K2NvbnN0IF9QUl9TRVRfUERFQVRIU0lHID0gMQorY29uc3QgX1NZU19pb3Blcm0gPSBfX19OUl9p
b3Blcm0KK2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfTElCUyA9IDExMzQKK2NvbnN0
IF9JRkxBX1ZGX1ZMQU5fSU5GT19VTlNQRUMgPSAwCitjb25zdCBfTVNfTk9FWEVDID0gOAorY29u
c3QgX1ZUSU1FID0gNQorY29uc3QgX19fSU5UX0ZBU1Q2NF9XSURUSF9fID0gNjQKK2NvbnN0IF9J
UFBPUlRfTkVUU1RBVCA9IDE1Citjb25zdCBfU0NObzE2ID0gImhvIgorY29uc3QgX05fSERMQyA9
IDEzCitjb25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfVlRJRF9WSU9MQVRJT04gPSA0Citjb25zdCBf
X1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiA9IDc3Citjb25zdCBfRVRIX1BfSVBYID0gMHg4MTM3
Citjb25zdCBfUFJJdUxFQVNUMzIgPSAidSIKK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTUFDQUREUl9N
T0RFID0gMworY29uc3QgX0ZTX0ZMX1VTRVJfTU9ESUZJQUJMRSA9IDB4MDAwMzgwRkYKK2NvbnN0
IF9fX0dDQ19BVE9NSUNfVEVTVF9BTkRfU0VUX1RSVUVWQUwgPSAxCitjb25zdCBfX19OUl9yZW5h
bWVhdCA9IDI2NAorY29uc3QgX01TR19ET05UUk9VVEUgPSA0Citjb25zdCBfVElPQ1NJR192YWwg
PSAxMDc0MDI1NTI2Citjb25zdCBfX1BBVEhfTlNTV0lUQ0hfQ09ORiA9ICIvZXRjL25zc3dpdGNo
LmNvbmYiCitjb25zdCBfU1lTX2FjY2VwdCA9IF9fX05SX2FjY2VwdAorY29uc3QgX1BBQ0tFVF9S
RVNFUlZFID0gMTIKK2NvbnN0IF9TVEFfUFBTSklUVEVSID0gMHgwMjAwCitjb25zdCBfX19OUl9z
aWduYWxmZCA9IDI4MgorY29uc3QgX1NPX1BFRVJTRUMgPSAzMQorY29uc3QgX19fSU5UX1dJRFRI
X18gPSAzMgorY29uc3QgX19YT1BFTl9JT1ZfTUFYID0gX19QT1NJWF9VSU9fTUFYSU9WCitjb25z
dCBfTlRGX1VTRSA9IDB4MDEKK2NvbnN0IF9fX0JJR19FTkRJQU4gPSA0MzIxCitjb25zdCBfVUlO
VDE2X1dJRFRIID0gMTYKK2NvbnN0IF9TRUdWX0FDQ0VSUiA9IDIKK2NvbnN0IF9TQ05vMzIgPSAi
byIKK2NvbnN0IF9fX05SX3JlY3Zmcm9tID0gNDUKK2NvbnN0IF9UQ1BfQ09PS0lFX0lOX0FMV0FZ
UyA9ICgxIDw8IDApCitjb25zdCBfU0tGX0FEX1BBWV9PRkZTRVQgPSA1MgorY29uc3QgX1NZU19y
ZWFkdiA9IF9fX05SX3JlYWR2Citjb25zdCBfUEZfUkRTID0gMjEKK2NvbnN0IF9JUFY2X0RTVE9Q
VFMgPSA1OQorY29uc3QgX19TWVNfUFRSQUNFX0ggPSAxCitjb25zdCBfUlRNX0ZfTk9USUZZID0g
MHgxMDAKK2NvbnN0IF9UQ1BPUFRfU0FDSyA9IDUKK2NvbnN0IF9UQ1BfTUQ1U0lHX0VYVCA9IDMy
Citjb25zdCBfSUZGX0JST0FEQ0FTVCA9IDIKK2NvbnN0IF9JUE9QVF9TQVRJRCA9IDEzNgorY29u
c3QgX1RJT0NNQklDID0gMHg1NDE3Citjb25zdCBfRlNfSU5ERVhfRkwgPSAweDAwMDAxMDAwCitj
b25zdCBfU1lTX3VuYW1lID0gX19fTlJfdW5hbWUKK2NvbnN0IF9NT0RfVElNRUNPTlNUID0gX0FE
Sl9USU1FQ09OU1QKK2NvbnN0IF9NQ0FTVF9JTkNMVURFID0gMQorY29uc3QgX0lGRl9UVU5fRVhD
TCA9IDB4ODAwMAorY29uc3QgX1BSX1RBU0tfUEVSRl9FVkVOVFNfRElTQUJMRSA9IDMxCitjb25z
dCBfSVBfTVRVX0RJU0NPVkVSID0gMTAKK2NvbnN0IF9JRkxBX1ZYTEFOX1BPUlRfUkFOR0UgPSAx
MAorY29uc3QgX19fTlJfc2NoZWRfc2V0YXR0ciA9IDMxNAorY29uc3QgX1NZU19zZXRwcmlvcml0
eSA9IF9fX05SX3NldHByaW9yaXR5Citjb25zdCBfRVNUUlBJUEUgPSA4NgorY29uc3QgX1JURl9J
UlRUID0gMHgwMTAwCitjb25zdCBfSUZMQV9FVkVOVF9OT05FID0gMAorY29uc3QgX1RDQV9PUFRJ
T05TID0gMgorY29uc3QgX1NFRUtfREFUQSA9IDMKK2NvbnN0IF9GX09XTkVSX0dJRCA9IDIKK2Nv
bnN0IF9FTk9MSU5LID0gNjcKK2NvbnN0IF9NQUNWTEFOX01PREVfVkVQQSA9IDIKK2NvbnN0IF9J
RkxBX0JSX1ZMQU5fREVGQVVMVF9QVklEID0gMzkKK2NvbnN0IF9WU1dUQyA9IDcKK2NvbnN0IF9T
QV9JTlRFUlJVUFQgPSAweDIwMDAwMDAwCitjb25zdCBfX19EQkxfSEFTX1FVSUVUX05BTl9fID0g
MQorY29uc3QgX0FSUE9QX0luUkVQTFkgPSA5Citjb25zdCBfU1lTX3NlbmRtc2cgPSBfX19OUl9z
ZW5kbXNnCitjb25zdCBfUlRNU0dfREVMUk9VVEUgPSAweDIyCitjb25zdCBfVElPQ0dTSUQgPSAw
eDU0MjkKK2NvbnN0IF9fUE9TSVhfTElOS19NQVggPSA4Citjb25zdCBfTl9NT1VTRSA9IDIKK2Nv
bnN0IF9TWVNfcmVhZGxpbmsgPSBfX19OUl9yZWFkbGluaworY29uc3QgX19fTlJfZmNoZGlyID0g
ODEKK2NvbnN0IF9fX0lOVF9GQVNUNjRfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0
IF9QVFJBQ0VfU0VUUkVHU0VUID0gMTY5MDEKK2NvbnN0IF9JTl9OT05CTE9DSyA9IDIwNDgKK2Nv
bnN0IF9fX05SX2lub3RpZnlfaW5pdDEgPSAyOTQKK2NvbnN0IF9GRklfVFlQRV9WT0lEID0gMAor
Y29uc3QgX0ZEX0NMT0VYRUMgPSAxCitjb25zdCBfX19OUl9zZXRzb2Nrb3B0ID0gNTQKK2NvbnN0
IF9FQ0hPTkwgPSAwMDAwMTAwCitjb25zdCBfX19NQVhfQkFVRCA9IF9CNDAwMDAwMAorY29uc3Qg
X0VUSF9NQVhfTVRVID0gMHhGRkZGCitjb25zdCBfUEFDS0VUX1FESVNDX0JZUEFTUyA9IDIwCitj
b25zdCBfQ0xPTkVfTkVXVVRTID0gMHgwNDAwMDAwMAorY29uc3QgX1NZU19zZW10aW1lZG9wID0g
X19fTlJfc2VtdGltZWRvcAorY29uc3QgX0VUSF9QX1BIT05FVCA9IDB4MDBGNQorY29uc3QgX0lG
TEFfT0ZGTE9BRF9YU1RBVFNfQ1BVX0hJVCA9IDEKK2NvbnN0IF9fUFdEX0ggPSAxCitjb25zdCBf
X1BPU0lYX1NIRUxMID0gMQorY29uc3QgX0ZGSV9TSVpFT0ZfSkFWQV9SQVcgPSBfRkZJX1NJWkVP
Rl9BUkcKK2NvbnN0IF9QUl9TUEVDX0ZPUkNFX0RJU0FCTEUgPSAoMSA8PCAzKQorY29uc3QgX05E
QV9TUkNfVk5JID0gMTEKK2NvbnN0IF9fX1dDSEFSX01JTiA9IF9fX1dDSEFSX01JTl9fCitjb25z
dCBfTkVUREJfSU5URVJOQUwgPSAtMQorY29uc3QgX19fVVNFX01JU0MgPSAxCitjb25zdCBfUFJJ
T19NQVggPSAyMAorY29uc3QgX19fc3RydWN0X3RtX2RlZmluZWQgPSAxCitjb25zdCBfRVRIRVJU
WVBFX0FSUCA9IDB4MDgwNgorY29uc3QgX19QT1NJWF9USU1FT1VUUyA9IDIwMDgwOQorY29uc3Qg
X0lGTEFfVlhMQU5fVFRMX0lOSEVSSVQgPSAyOAorY29uc3QgX1NQTElDRV9GX0dJRlQgPSA4Citj
b25zdCBfX19CWVRFX09SREVSX18gPSBfX19PUkRFUl9MSVRUTEVfRU5ESUFOX18KK2NvbnN0IF9f
X1JUTkxHUlBfTUFYID0gMzIKK2NvbnN0IF9fU0NfU0FWRURfSURTID0gOAorY29uc3QgX0xMT05H
X1dJRFRIID0gNjQKK2NvbnN0IF9TWVNfc2V0Z3JvdXBzID0gX19fTlJfc2V0Z3JvdXBzCitjb25z
dCBfU0NNX1RJTUVTVEFNUCA9IF9TT19USU1FU1RBTVAKK2NvbnN0IF9QUklvMzIgPSAibyIKK2Nv
bnN0IF9BREpfU0VUT0ZGU0VUID0gMHgwMTAwCitjb25zdCBfUFJJWExFQVNUMTYgPSAiWCIKK2Nv
bnN0IF9USF9GSU4gPSAweDAxCitjb25zdCBfVUNIQVJfV0lEVEggPSA4Citjb25zdCBfUlRNX0dF
VEFERFJMQUJFTCA9IDc0Citjb25zdCBfX19TSUdSVE1BWCA9IDY0Citjb25zdCBfRVJFU1RBUlQg
PSA4NQorY29uc3QgX19TQ19WN19JTFAzMl9PRkZCSUcgPSAyMzgKK2NvbnN0IF9fUENfQVNZTkNf
SU8gPSAxMAorY29uc3QgX19TVFJJTkdTX0ggPSAxCitjb25zdCBfX191bml4X18gPSAxCitjb25z
dCBfX19lcnJvcl90X2RlZmluZWQgPSAxCitjb25zdCBfX1NTX1NJWkUgPSAxMjgKK2NvbnN0IF9O
R1JFRyA9IF9fX05HUkVHCitjb25zdCBfU1RBX0NMT0NLRVJSID0gMHgxMDAwCitjb25zdCBfX19G
TFQ2NFhfRVBTSUxPTl9fID0gMS4xCitjb25zdCBfU1RBVFhfTVRJTUUgPSAweDAwNDAKK2NvbnN0
IF9CUEZfUkVUID0gMHgwNgorY29uc3QgX0hBVkVfU1RSRVJST1JfUiA9IDEKK2NvbnN0IF9TWVNf
c2VuZG1tc2cgPSBfX19OUl9zZW5kbW1zZworY29uc3QgX1JUTUdSUF9JUFY0X1JVTEUgPSAweDgw
Citjb25zdCBfU1lTX3NjaGVkX3NldHNjaGVkdWxlciA9IF9fX05SX3NjaGVkX3NldHNjaGVkdWxl
cgorY29uc3QgX05EQV9DQUNIRUlORk8gPSAzCitjb25zdCBfQ0xPTkVfVk0gPSAweDAwMDAwMTAw
Citjb25zdCBfRklMRV9ERURVUEVfUkFOR0VfRElGRkVSUyA9IDEKK2NvbnN0IF9fSU9DX0RJUkJJ
VFMgPSAyCitjb25zdCBfV1VOVFJBQ0VEID0gMgorY29uc3QgX1BSX01DRV9LSUxMX1NFVCA9IDEK
K2NvbnN0IF9TS0ZfQURfUVVFVUUgPSAyNAorY29uc3QgX19fTlJfbGNob3duID0gOTQKK2NvbnN0
IF9QUl9TRVRfTU1fU1RBUlRfU1RBQ0sgPSA1Citjb25zdCBfX19GTE9BVF9XT1JEX09SREVSX18g
PSBfX19PUkRFUl9MSVRUTEVfRU5ESUFOX18KK2NvbnN0IF9STU5FVF9GTEFHU19JTkdSRVNTX01B
UF9DT01NQU5EUyA9ICgxIDw8IDEpCitjb25zdCBfX1BPU0lYX1NJR1FVRVVFX01BWCA9IDMyCitj
b25zdCBfX1NZU19FUE9MTF9IID0gMQorY29uc3QgX0NIQVJfV0lEVEggPSA4Citjb25zdCBfX19T
SVpFT0ZfU0VNX1QgPSAzMgorY29uc3QgX1hBVFRSX1NJWkVfTUFYID0gNjU1MzYKK2NvbnN0IF9f
X05SX21vZGlmeV9sZHQgPSAxNTQKK2NvbnN0IF9TWVNfZXBvbGxfY3RsID0gX19fTlJfZXBvbGxf
Y3RsCitjb25zdCBfVENQSV9PUFRfV1NDQUxFID0gNAorY29uc3QgX19TQ19MRVZFTDFfSUNBQ0hF
X0FTU09DID0gMTg2Citjb25zdCBfSVBWNl9SVEhEUl9MT09TRSA9IDAKK2NvbnN0IF9TWVNfc2No
ZWRfZ2V0X3ByaW9yaXR5X21heCA9IF9fX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKK2NvbnN0
IF9JUFBPUlRfQklGRlVEUCA9IDUxMgorY29uc3QgX0ZJT05SRUFEID0gMHg1NDFCCitjb25zdCBf
TUxEX0xJU1RFTkVSX1JFRFVDVElPTiA9IDEzMgorY29uc3QgX0NYODZfQ0NSNSA9IDB4ZTkKK2Nv
bnN0IF9USU9DU0VSR1dJTEQgPSAweDU0NTQKK2NvbnN0IF9fX05SX2Vwb2xsX2N0bF9vbGQgPSAy
MTQKK2NvbnN0IF9FS0VZUkVKRUNURUQgPSAxMjkKK2NvbnN0IF9YODZfQ1IwX0NEX0JJVCA9IDMw
Citjb25zdCBfTUFQX05PTkJMT0NLID0gMHgxMDAwMAorY29uc3QgX1NZU19zeW5jZnMgPSBfX19O
Ul9zeW5jZnMKK2NvbnN0IF9UQUJETFkgPSAwMDE0MDAwCitjb25zdCBfX19HTlVDX01JTk9SX18g
PSAzCitjb25zdCBfSEFWRV9TRU1BUEhPUkVfSCA9IDEKK2NvbnN0IF9TSUdfVU5CTE9DSyA9IDEK
K2NvbnN0IF9fX05SX3ByY3RsID0gMTU3Citjb25zdCBfX19OUl9wcm9jZXNzX3ZtX3dyaXRldiA9
IDMxMQorY29uc3QgX0lGTEFfQlJfTUNBU1RfU1RBUlRVUF9RVUVSWV9DTlQgPSAyOQorY29uc3Qg
X0lQUE9SVF9ESVNDQVJEID0gOQorY29uc3QgX05CUEcgPSBfUEFHRV9TSVpFCitjb25zdCBfX0NT
X1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MgPSAxMTA4Citjb25zdCBfU1lTX2lvY3RsID0gX19fTlJf
aW9jdGwKK2NvbnN0IF9TWVNfcG9sbCA9IF9fX05SX3BvbGwKK2NvbnN0IF9STU5FVF9GTEFHU19J
TkdSRVNTX01BUF9DS1NVTVY0ID0gKDEgPDwgMikKK2NvbnN0IF9JUFY2XzIyOTJQS1RPUFRJT05T
ID0gNgorY29uc3QgX1RJT0NNX0NUUyA9IDB4MDIwCitjb25zdCBfUFRSRElGRl9NQVggPSAoOTIy
MzM3MjAzNjg1NDc3NTgwNykKK2NvbnN0IF9JRkxBX1NUQVRTX0FGX1NQRUMgPSA1Citjb25zdCBf
SUZMQV9UVU5fTVVMVElfUVVFVUUgPSA3Citjb25zdCBfUlRBX1BBRCA9IDI0Citjb25zdCBfU1lT
X2lvcGwgPSBfX19OUl9pb3BsCitjb25zdCBfTkVUX01BSk9SID0gMzYKK2NvbnN0IF9TWVNfbXNn
c25kID0gX19fTlJfbXNnc25kCitjb25zdCBfX19TX0lFWEVDID0gMDEwMAorY29uc3QgX19TQ19E
RUxBWVRJTUVSX01BWCA9IDI2Citjb25zdCBfU1lTX2V4aXQgPSBfX19OUl9leGl0Citjb25zdCBf
U1lTX3Jlc3RhcnRfc3lzY2FsbCA9IF9fX05SX3Jlc3RhcnRfc3lzY2FsbAorY29uc3QgX1BSSVhM
RUFTVDMyID0gIlgiCitjb25zdCBfSUZMQV9IU1JfU1VQRVJWSVNJT05fQUREUiA9IDQKK2NvbnN0
IF9TSUdTWVMgPSAzMQorY29uc3QgX0ZTX1hGTEFHX0ZJTEVTVFJFQU0gPSAweDAwMDA0MDAwCitj
b25zdCBfSVBQUk9UT19JQ01QVjYgPSA1OAorY29uc3QgX0VVQ0xFQU4gPSAxMTcKK2NvbnN0IF9Q
Ul9TRVRfRlBFTVUgPSAxMAorY29uc3QgX0VUSF9QX0FUQUxLID0gMHg4MDlCCitjb25zdCBfUEZf
SUIgPSAyNworY29uc3QgX19fVVNFX1BPU0lYMTk5NTA2ID0gMQorY29uc3QgX1NZU19uYW5vc2xl
ZXAgPSBfX19OUl9uYW5vc2xlZXAKK2NvbnN0IF9JUF9EUk9QX01FTUJFUlNISVAgPSAzNgorY29u
c3QgX1dJTlRfTUFYID0gKDQyOTQ5NjcyOTUpCitjb25zdCBfSUZMQV9WWExBTl9VRFBfWkVST19D
U1VNNl9SWCA9IDIwCitjb25zdCBfRUNPTk5BQk9SVEVEID0gMTAzCitjb25zdCBfUFJfVU5BTElH
Tl9OT1BSSU5UID0gMQorY29uc3QgX0ZTX0RJUlNZTkNfRkwgPSAweDAwMDEwMDAwCitjb25zdCBf
U0lPQ0RFVlBSSVZBVEUgPSAweDg5RjAKK2NvbnN0IF9fU0NfVElNRU9VVFMgPSAxNjQKK2NvbnN0
IF9fX0lOVF9MRUFTVDMyX01BWF9fID0gMHg3ZmZmZmZmZgorY29uc3QgX0lOX0NMT1NFID0gKF9J
Tl9DTE9TRV9XUklURSB8IF9JTl9DTE9TRV9OT1dSSVRFKQorY29uc3QgX1JUTV9ORVdOU0lEID0g
ODgKK2NvbnN0IF9fX05SX2lvX3BnZXRldmVudHMgPSAzMzMKK2NvbnN0IF9YODZfRUZMQUdTX1RG
X0JJVCA9IDgKK2NvbnN0IF9fX05SX3VubGluayA9IDg3Citjb25zdCBfSVBUT1NfUFJFQ19JTU1F
RElBVEUgPSBfSVBUT1NfQ0xBU1NfQ1MyCitjb25zdCBfVUlOVF9MRUFTVDE2X01BWCA9ICg2NTUz
NSkKK2NvbnN0IF9fX05SX2dldGV1aWQgPSAxMDcKK2NvbnN0IF9TX0lXR1JQID0gKF9TX0lXVVNS
ID4+IDMpCitjb25zdCBfX19QSUVfXyA9IDIKK2NvbnN0IF9USU9DUEtUX0RBVEEgPSAwCitjb25z
dCBfX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUyA9IDEKK2NvbnN0IF9GRklfVFlQRV9ET1VC
TEUgPSAzCitjb25zdCBfUlRDRl9ESVJFQ1RTUkMgPSAweDA0MDAwMDAwCitjb25zdCBfX19OUl9z
eW5jX2ZpbGVfcmFuZ2UgPSAyNzcKK2NvbnN0IF9JRkxBX1BPUlRfVlNJX1RZUEUgPSAzCitjb25z
dCBfQURKX1RBSSA9IDB4MDA4MAorY29uc3QgX05EVVNFUk9QVF9VTlNQRUMgPSAwCitjb25zdCBf
X1VUU05BTUVfRE9NQUlOX0xFTkdUSCA9IF9fVVRTTkFNRV9MRU5HVEgKK2NvbnN0IF9OUl9GSUxF
ID0gODE5MgorY29uc3QgX0ZfR0VUX1JXX0hJTlQgPSAxMDM1Citjb25zdCBfUEZfUFBQT1ggPSAy
NAorY29uc3QgX1NPX1BFRUtfT0ZGID0gNDIKK2NvbnN0IF9TT19SQ1ZCVUYgPSA4Citjb25zdCBf
X1NDX1hCUzVfSUxQMzJfT0ZGQklHID0gMTI2Citjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9DT05E
QVRUUl9UID0gNAorY29uc3QgX05fSENJID0gMTUKK2NvbnN0IF9QUkl1TEVBU1Q4ID0gInUiCitj
b25zdCBfUlRBWF9TU1RIUkVTSCA9IDYKK2NvbnN0IF9JRkZfTVVMVElfUVVFVUUgPSAweDAxMDAK
K2NvbnN0IF9SVF9DTEFTU19MT0NBTCA9IDI1NQorY29uc3QgX0ZJT0dFVE9XTiA9IDB4ODkwMwor
Y29uc3QgX19fTlJfc2htZ2V0ID0gMjkKK2NvbnN0IF9YODZfRUZMQUdTX0RGX0JJVCA9IDEwCitj
b25zdCBfU09fU0VMRUNUX0VSUl9RVUVVRSA9IDQ1Citjb25zdCBfU09DS19OT05CTE9DSyA9IDIw
NDgKK2NvbnN0IF9VSU5UX0xFQVNUMzJfTUFYID0gKDQyOTQ5NjcyOTUpCitjb25zdCBfU0lHWEZT
WiA9IDI1Citjb25zdCBfSUZMQV9QUk9USU5GTyA9IDEyCitjb25zdCBfX19OUl9tdW5sb2NrYWxs
ID0gMTUyCitjb25zdCBfSVBfTVVMVElDQVNUX0FMTCA9IDQ5Citjb25zdCBfRUNITyA9IDAwMDAw
MTAKK2NvbnN0IF9BUlBIUkRfRUVUSEVSID0gMgorY29uc3QgX0NMRF9DT05USU5VRUQgPSA2Citj
b25zdCBfRVRIRVJUWVBFX0FUID0gMHg4MDlCCitjb25zdCBfU0NIQVJfTUFYID0gX19fU0NIQVJf
TUFYX18KK2NvbnN0IF9JRkxBX01BQ1NFQ19TQ0IgPSAxMQorY29uc3QgX19fVUFQSV9ERUZfRVRI
SERSID0gMQorY29uc3QgX0lGTEFfQlJfTkZfQ0FMTF9BUlBUQUJMRVMgPSAzOAorY29uc3QgX05E
VFBBX1JFQUNIQUJMRV9USU1FID0gMworY29uc3QgX1RDUF9SRVBBSVJfV0lORE9XID0gMjkKK2Nv
bnN0IF9fX0lGTEFfVFVOX01BWCA9IDEwCitjb25zdCBfSEFWRV9BU19DT01EQVRfR0FTID0gMQor
Y29uc3QgX05FVExJTktfRE5SVE1TRyA9IDE0Citjb25zdCBfU1lTX21yZW1hcCA9IF9fX05SX21y
ZW1hcAorY29uc3QgX1g4Nl9DUjRfUEdFX0JJVCA9IDcKK2NvbnN0IF9JRkFfQUREUkVTUyA9IDEK
K2NvbnN0IF9TSU9DU0lGRFNUQUREUiA9IDB4ODkxOAorY29uc3QgX1ZSRVBSSU5UID0gMTIKK2Nv
bnN0IF9FUE9MTF9DVExfREVMID0gMgorY29uc3QgX0lGTEFfUURJU0MgPSA2Citjb25zdCBfX19F
TEZfXyA9IDEKK2NvbnN0IF9JTl9PUEVOID0gMHgwMDAwMDAyMAorY29uc3QgX0VUSF9QX1RTTiA9
IDB4MjJGMAorY29uc3QgX0VUSF9QX0NPTlRST0wgPSAweDAwMTYKK2NvbnN0IF9JRkxBX0JPTkRf
QURfSU5GT19OVU1fUE9SVFMgPSAyCitjb25zdCBfRFRfRklGTyA9IDEKK2NvbnN0IF9TQ05pRkFT
VDggPSAiaGhpIgorY29uc3QgX1RJT0NTRVREID0gMHg1NDIzCitjb25zdCBfX0NTX1hCUzVfSUxQ
MzJfT0ZGMzJfTElOVEZMQUdTID0gMTEwMworY29uc3QgX0lQT1BUX09GRlNFVCA9IDIKK2NvbnN0
IF9fX05SX2ZzdGF0ZnMgPSAxMzgKK2NvbnN0IF9fX05SX3NldF90aHJlYWRfYXJlYSA9IDIwNQor
Y29uc3QgX0lGTEFfQk9ORF9BUlBfSU5URVJWQUwgPSA3Citjb25zdCBfUFJfU0VUX01NX1NUQVJU
X0RBVEEgPSAzCitjb25zdCBfRVRIX1BfRVJTUEFOID0gMHg4OEJFCitjb25zdCBfU1lTX3N5c2lu
Zm8gPSBfX19OUl9zeXNpbmZvCitjb25zdCBfU1lTX3NldHNpZCA9IF9fX05SX3NldHNpZAorY29u
c3QgX09GREVMID0gMDAwMDIwMAorY29uc3QgX19QQ19QUklPX0lPID0gMTEKK2NvbnN0IF9fX0ZM
VF9NSU5fXyA9IDEuMQorY29uc3QgX19fTlJfY29weV9maWxlX3JhbmdlID0gMzI2Citjb25zdCBf
Q0xPTkVfTkVXTkVUID0gMHg0MDAwMDAwMAorY29uc3QgX1JUQV9PSUYgPSA0Citjb25zdCBfU0lf
U0lHSU8gPSAtNQorY29uc3QgX19YT1BFTl9SRUFMVElNRSA9IDEKK2NvbnN0IF9fX05SX3NlY2Nv
bXAgPSAzMTcKK2NvbnN0IF9JRkxBX0NBUlJJRVJfVVBfQ09VTlQgPSA0NworY29uc3QgX1RDUF9V
TFAgPSAzMQorY29uc3QgX19TQ19USU1FUlMgPSAxMQorY29uc3QgX1BSSXUxNiA9ICJ1IgorY29u
c3QgX05EX09QVF9TT1VSQ0VfTElOS0FERFIgPSAxCitjb25zdCBfSUZBX0ZfREVQUkVDQVRFRCA9
IDB4MjAKK2NvbnN0IF9SVE5IX0ZfREVBRCA9IDEKK2NvbnN0IF9GRklfVFlQRV9GTE9BVCA9IDIK
K2NvbnN0IF9WRVJBU0UgPSAyCitjb25zdCBfUlRfQ0xBU1NfTUFJTiA9IDI1NAorY29uc3QgX0VO
T0FOTyA9IDU1Citjb25zdCBfUlRQUk9UX01SVCA9IDEwCitjb25zdCBfX0JJVFNfVElNRVhfSCA9
IDEKK2NvbnN0IF9JRkxBX1hEUF9TS0JfUFJPR19JRCA9IDYKK2NvbnN0IF9fU0NfTkxfQVJHTUFY
ID0gMTE5Citjb25zdCBfSUZBX01VTFRJQ0FTVCA9IDcKK2NvbnN0IF9JUFBST1RPX0JFRVRQSCA9
IDk0Citjb25zdCBfSVBPUFRfU0VDVVJfVE9QU0VDUkVUID0gMHg2YmM1Citjb25zdCBfX19TX0lX
UklURSA9IDAyMDAKK2NvbnN0IF9FTk9UQ09OTiA9IDEwNworY29uc3QgX1BUUkFDRV9TRVRGUFhS
RUdTID0gMTkKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFBCSUdfT0ZGQklHX0xERkxBR1MgPSAxMTQ1
Citjb25zdCBfX19TX0lGTVQgPSAwMTcwMDAwCitjb25zdCBfSVBPSUJfTU9ERV9EQVRBR1JBTSA9
IDAKK2NvbnN0IF9fX0ZMVDY0WF9ERUNJTUFMX0RJR19fID0gMjEKK2NvbnN0IF9fU0NfUEFHRVNJ
WkUgPSAzMAorY29uc3QgX0FSUEhSRF9DSVNDTyA9IDUxMworY29uc3QgX19fSUZMQV9CUl9NQVgg
PSA0NQorY29uc3QgX0lQUFJPVE9fRFNUT1BUUyA9IDYwCitjb25zdCBfUkxJTUlUX0NQVSA9IDAK
K2NvbnN0IF9NQURWX0RPTlREVU1QID0gMTYKK2NvbnN0IF9fX0ZMVDEyOF9IQVNfSU5GSU5JVFlf
XyA9IDEKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSU5URkxBR1MgPSAxMTI3Citj
b25zdCBfX1NDX05QUk9DRVNTT1JTX0NPTkYgPSA4MworY29uc3QgX1RDQV9YU1RBVFMgPSA0Citj
b25zdCBfUEFDS0VUX01SX0FMTE1VTFRJID0gMgorY29uc3QgX19fU1NFMl9NQVRIX18gPSAxCitj
b25zdCBfT19OT0NUVFkgPSAwNDAwCitjb25zdCBfQ0xPTkVfSU8gPSAweDgwMDAwMDAwCitjb25z
dCBfU0lPQ1NJRkhXQlJPQURDQVNUID0gMHg4OTM3Citjb25zdCBfX19zaWdfYXRvbWljX3RfZGVm
aW5lZCA9IDEKK2NvbnN0IF9IQVZFX0FDQ0VQVDQgPSAxCitjb25zdCBfX0NTX0dOVV9MSUJDX1ZF
UlNJT04gPSAyCitjb25zdCBfTkxNX0ZfQ1JFQVRFID0gMHg0MDAKK2NvbnN0IF9SVF9DTEFTU19E
RUZBVUxUID0gMjUzCitjb25zdCBfSEFWRV9VTkxJTktBVCA9IDEKK2NvbnN0IF9FTk9TWVMgPSAz
OAorY29uc3QgX1JUTV9HRVRNVUxUSUNBU1QgPSA1OAorY29uc3QgX0lGTEFfRVZFTlRfRkVBVFVS
RVMgPSAyCitjb25zdCBfX19JRkxBX0hTUl9NQVggPSA3Citjb25zdCBfRVBPTExfQ1RMX01PRCA9
IDMKK2NvbnN0IF9GSU9OQklPID0gMHg1NDIxCitjb25zdCBfX1NDX1BJSV9YVEkgPSA1NAorY29u
c3QgX19QT1NJWDJfQ19ERVYgPSBfX19QT1NJWDJfVEhJU19WRVJTSU9OCitjb25zdCBfQUZfQUxH
ID0gX1BGX0FMRworY29uc3QgX0lGTEFfUFBQX1VOU1BFQyA9IDAKK2NvbnN0IF9TT19SQ1ZMT1dB
VCA9IDE4Citjb25zdCBfSU5UOF9XSURUSCA9IDgKK2NvbnN0IF9YODZfQ1IwX1BHX0JJVCA9IDMx
Citjb25zdCBfSVBQT1JUX1dIT1NFUlZFUiA9IDUxMworY29uc3QgX0hBVkVfU1lTX01NQU5fSCA9
IDEKK2NvbnN0IF9fX05SX3B3cml0ZTY0ID0gMTgKK2NvbnN0IF9JRkxBX1RVTl9PV05FUiA9IDEK
K2NvbnN0IF9SVEFYX0ZBU1RPUEVOX05PX0NPT0tJRSA9IDE3Citjb25zdCBfSUZMQV9CT05EX0xQ
X0lOVEVSVkFMID0gMTkKK2NvbnN0IF9QVFJBQ0VfR0VURlBSRUdTID0gMTQKK2NvbnN0IF9DTE9O
RV9GSUxFUyA9IDB4MDAwMDA0MDAKK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzEyOF9D
QkMgPSA1Citjb25zdCBfU0tGX0FEX1JBTkRPTSA9IDU2Citjb25zdCBfTVNHX1dBSVRBTEwgPSAy
NTYKK2NvbnN0IF9QUl9TRVRfTU1fRU5WX0VORCA9IDExCitjb25zdCBfX19OUl9zZW5kbXNnID0g
NDYKK2NvbnN0IF9FVEhfUF9NQVAgPSAweDAwRjkKK2NvbnN0IF9fX05SX2dldHNpZCA9IDEyNAor
Y29uc3QgX19fTlJfaW9wcmlvX2dldCA9IDI1MgorY29uc3QgX0lGTEFfVkZfSUJfTk9ERV9HVUlE
ID0gMTAKK2NvbnN0IF9NU19SRUMgPSAxNjM4NAorY29uc3QgX19QT1NJWF9UUkFDRSA9IC0xCitj
b25zdCBfX19GTFQxMjhfSEFTX1FVSUVUX05BTl9fID0gMQorY29uc3QgX0xPQ0tfTkIgPSA0Citj
b25zdCBfUERQX0VORElBTiA9IF9fX1BEUF9FTkRJQU4KK2NvbnN0IF9QUl9NQ0VfS0lMTF9FQVJM
WSA9IDEKK2NvbnN0IF9ORVRMSU5LX0FVRElUID0gOQorY29uc3QgX1NZU19zdGF0eCA9IF9fX05S
X3N0YXR4Citjb25zdCBfX1NDX1NQSU5fTE9DS1MgPSAxNTQKK2NvbnN0IF9JRkxBX0JPTkRfQURf
SU5GT19BQ1RPUl9LRVkgPSAzCitjb25zdCBfUFJfRlBfTU9ERV9GUiA9ICgxIDw8IDApCitjb25z
dCBfUlRNX0dFVFRDTEFTUyA9IDQyCitjb25zdCBfQUlfQUREUkNPTkZJRyA9IDB4MDAyMAorY29u
c3QgX1BSSXU4ID0gInUiCitjb25zdCBfTUFEVl9VTk1FUkdFQUJMRSA9IDEzCitjb25zdCBfUFJJ
dTMyID0gInUiCitjb25zdCBfU1lTX3NodXRkb3duID0gX19fTlJfc2h1dGRvd24KK2NvbnN0IF9I
QVZFX0xJTlVYX0ZTX0ggPSAxCitjb25zdCBfTl9SMzk2NCA9IDkKK2NvbnN0IF9JUFBST1RPX0FI
ID0gNTEKK2NvbnN0IF9FWEZVTEwgPSA1NAorY29uc3QgX19QT1NJWF9SQVdfU09DS0VUUyA9IDIw
MDgwOQorY29uc3QgX0VCVVNZID0gMTYKK2NvbnN0IF9CMjUwMDAwMCA9IDAwMTAwMTQKK2NvbnN0
IF9fX05SX2dldHNvY2tuYW1lID0gNTEKK2NvbnN0IF9QUklYRkFTVDggPSAiWCIKK2NvbnN0IF9T
WVNfdGtpbGwgPSBfX19OUl90a2lsbAorY29uc3QgX19fYW1kNjRfXyA9IDEKK2NvbnN0IF9JUFRP
U19QUkVDX1BSSU9SSVRZID0gX0lQVE9TX0NMQVNTX0NTMQorY29uc3QgX0NUSU1FID0gMAorY29u
c3QgX19fRkxUMzJYX0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX0VVTkFUQ0ggPSA0OQorY29u
c3QgX19TQ18yX1BCU19BQ0NPVU5USU5HID0gMTY5Citjb25zdCBfX1BPU0lYX1RIUkVBRF9TUE9S
QURJQ19TRVJWRVIgPSAtMQorY29uc3QgX19fTlJfbWxvY2syID0gMzI1Citjb25zdCBfSVBQT1JU
X1dIT0lTID0gNDMKK2NvbnN0IF9fX05SX2dldF90aHJlYWRfYXJlYSA9IDIxMQorY29uc3QgX0Zf
T0ZEX0dFVExLID0gMzYKK2NvbnN0IF9OTEFfQUxJR05UTyA9IDQKK2NvbnN0IF9FTk9NRURJVU0g
PSAxMjMKK2NvbnN0IF9fR05VX1NPVVJDRSA9IDEKK2NvbnN0IF9TWVNfcHRyYWNlID0gX19fTlJf
cHRyYWNlCitjb25zdCBfU0lPQ0dJRklOREVYID0gMHg4OTMzCitjb25zdCBfRTJCSUcgPSA3Citj
b25zdCBfSUNNUDZfUlJfRkxBR1NfRk9SQ0VBUFBMWSA9IDB4MjAKK2NvbnN0IF9TSV9US0lMTCA9
IC02Citjb25zdCBfX1NDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIgPSAxNjEKK2NvbnN0IF9fX3g4
Nl82NF9fID0gMQorY29uc3QgX1NZU19mdXRleCA9IF9fX05SX2Z1dGV4Citjb25zdCBfSU5fREVM
RVRFID0gMHgwMDAwMDIwMAorY29uc3QgX0ZGRExZID0gMDEwMDAwMAorY29uc3QgX01DQVNUX0xF
QVZFX1NPVVJDRV9HUk9VUCA9IDQ3Citjb25zdCBfU19JWFVTUiA9IF9fX1NfSUVYRUMKK2NvbnN0
IF9fU1lTX1NFTEVDVF9IID0gMQorY29uc3QgX1BSSWQ4ID0gImQiCitjb25zdCBfX19OUl9pbm90
aWZ5X2FkZF93YXRjaCA9IDI1NAorY29uc3QgX1NDTm84ID0gImhobyIKK2NvbnN0IF9NQ0xfT05G
QVVMVCA9IDQKK2NvbnN0IF9GU19FQV9JTk9ERV9GTCA9IDB4MDAyMDAwMDAKK2NvbnN0IF9fX05S
X29wZW5hdCA9IDI1NworY29uc3QgX1RVTlNFVFBFUlNJU1RfdmFsID0gMTA3NDAyNTY3NQorY29u
c3QgX19fTlJfZmRhdGFzeW5jID0gNzUKK2NvbnN0IF9GX1NFVExFQVNFID0gMTAyNAorY29uc3Qg
X19TQ19GRF9NR01UID0gMTQzCitjb25zdCBfX19CSVRTX1BFUl9MT05HID0gNjQKK2NvbnN0IF9Q
UklPX01JTiA9IC0yMAorY29uc3QgX19fTlJfcHJsaW1pdDY0ID0gMzAyCitjb25zdCBfUlRNX0RF
TFRGSUxURVIgPSA0NQorY29uc3QgX1JUTV9HRVRDSEFJTiA9IDEwMgorY29uc3QgX1JURVhUX0ZJ
TFRFUl9WRiA9ICgxIDw8IDApCitjb25zdCBfU1RBVFhfSU5PID0gMHgwMTAwCitjb25zdCBfX19O
RVRJTkVUX0lGX0VUSEVSX0ggPSAxCitjb25zdCBfU1lTX3JlY3ZtbXNnID0gX19fTlJfcmVjdm1t
c2cKK2NvbnN0IF9IQVZFX1NDSEVEX0ggPSAxCitjb25zdCBfRVRIX1BfUkFSUCA9IDB4ODAzNQor
Y29uc3QgX19TVFJVQ1RfVElNRVNQRUMgPSAxCitjb25zdCBfU09fUkVVU0VQT1JUID0gMTUKK2Nv
bnN0IF9fUE9TSVhfU0VNX05TRU1TX01BWCA9IDI1NgorY29uc3QgX19fTERCTF9FUFNJTE9OX18g
PSAxLjEKK2NvbnN0IF9fX2Nsb2NrX3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9NQVBfVFlQRSA9IDB4
MGYKK2NvbnN0IF9ORVRMSU5LX1NPQ0tfRElBRyA9IDQKK2NvbnN0IF9fX1VTRV9YT1BFTl9FWFRF
TkRFRCA9IDEKK2NvbnN0IF9SVE5fUFJPSElCSVQgPSA4Citjb25zdCBfUEFDS0VUX1RYX0hBU19P
RkYgPSAxOQorY29uc3QgX1RDUF9SRVBBSVIgPSAxOQorY29uc3QgX0lGTEFfVkxBTl9GTEFHUyA9
IDIKK2NvbnN0IF9fX05SX2R1cCA9IDMyCitjb25zdCBfQUZfVElQQyA9IF9QRl9USVBDCitjb25z
dCBfSUZMQV9HVFBfUk9MRSA9IDQKK2NvbnN0IF9fX05SX2Z1dGltZXNhdCA9IDI2MQorY29uc3Qg
X19fVVNFX0tFUk5FTF9JUFY2X0RFRlMgPSAwCitjb25zdCBfSUZMQV9WWExBTl9QUk9YWSA9IDEx
Citjb25zdCBfSEFWRV9VTklTVERfSCA9IDEKK2NvbnN0IF9YODZfQ1IwX0FNX0JJVCA9IDE4Citj
b25zdCBfSUZMQV9WWExBTl9SRU1DU1VNX05PUEFSVElBTCA9IDI0Citjb25zdCBfSUZMQV9NQUNW
TEFOX01BQ0FERFIgPSA0Citjb25zdCBfSVBUT1NfUFJFQ19GTEFTSE9WRVJSSURFID0gX0lQVE9T
X0NMQVNTX0NTNAorY29uc3QgX19fU0lHUlRNSU4gPSAzMgorY29uc3QgX19fTlJfZmNudGwgPSA3
MgorY29uc3QgX1NZU19fc3lzY3RsID0gX19fTlJfX3N5c2N0bAorY29uc3QgX0VORVRVTlJFQUNI
ID0gMTAxCitjb25zdCBfU1lTX21xX3RpbWVkc2VuZCA9IF9fX05SX21xX3RpbWVkc2VuZAorY29u
c3QgX1RJT0NTRVJHRVRMU1IgPSAweDU0NTkKK2NvbnN0IF9TT0xfSVVDViA9IDI3NworY29uc3Qg
X1JMSU1JVF9GU0laRSA9IDEKK2NvbnN0IF9fX1JUQV9NQVggPSAzMAorY29uc3QgX0JQRl9UQVgg
PSAweDAwCitjb25zdCBfU1RBVFhfX1JFU0VSVkVEID0gMHg4MDAwMDAwMAorY29uc3QgX19TQ19T
WU5DSFJPTklaRURfSU8gPSAxNAorY29uc3QgX19fUlROX01BWCA9IDEyCitjb25zdCBfSU5UMzJf
V0lEVEggPSAzMgorY29uc3QgX05EX09QVF9NVFUgPSA1Citjb25zdCBfU0lHX0FUT01JQ19XSURU
SCA9IDMyCitjb25zdCBfX1NDX0VRVUlWX0NMQVNTX01BWCA9IDQxCitjb25zdCBfX1BPU0lYX0NM
T0NLUkVTX01JTiA9IDIwMDAwMDAwCitjb25zdCBfX19HQ0NfQVRPTUlDX0lOVF9MT0NLX0ZSRUUg
PSAyCitjb25zdCBfUE9TSVhfRkFEVl9OT1JNQUwgPSAwCitjb25zdCBfSVBfRFJPUF9TT1VSQ0Vf
TUVNQkVSU0hJUCA9IDQwCitjb25zdCBfU0VFS19NQVggPSBfU0VFS19IT0xFCitjb25zdCBfQVJQ
SFJEX01FVFJJQ09NID0gMjMKK2NvbnN0IF9JRkxBX1ZMQU5fRUdSRVNTX1FPUyA9IDMKK2NvbnN0
IF9TWVNfY2xvbmUgPSBfX19OUl9jbG9uZQorY29uc3QgX19TWVNfVElNRVNfSCA9IDEKK2NvbnN0
IF9fX0ZMVDY0WF9NQVhfRVhQX18gPSAxNjM4NAorY29uc3QgX1NfSVNHSUQgPSBfX19TX0lTR0lE
Citjb25zdCBfSVBWNl9SVEhEUl9UWVBFXzAgPSAwCitjb25zdCBfU0lHU1RPUCA9IDE5Citjb25z
dCBfRlNfVU5STV9GTCA9IDB4MDAwMDAwMDIKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1NBRkVfRlVO
Q1RJT05TID0gMjAwODA5Citjb25zdCBfUFJfRlBfRVhDX05PTlJFQ09WID0gMQorY29uc3QgX1RV
TkdFVFZORVRIRFJTWl92YWwgPSAyMTQ3NzY3NTExCitjb25zdCBfSUdOQlJLID0gMDAwMDAwMQor
Y29uc3QgX19fTkVUUEFDS0VUX1BBQ0tFVF9IID0gMQorY29uc3QgX1NZU19zY2hlZF9nZXRfcHJp
b3JpdHlfbWluID0gX19fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorY29uc3QgX05fTUFTQyA9
IDgKK2NvbnN0IF9JRkxBX0JPTkRfQURfU0VMRUNUID0gMjIKK2NvbnN0IF9JUFY2X0lQU0VDX1BP
TElDWSA9IDM0Citjb25zdCBfQUZfTExDID0gX1BGX0xMQworY29uc3QgX1NJT0NTUkFSUCA9IDB4
ODk2MgorY29uc3QgX1JUQV9QUkVGU1JDID0gNworY29uc3QgX1NPX1NOREJVRkZPUkNFID0gMzIK
K2NvbnN0IF9fX1dDTE9ORSA9IDB4ODAwMDAwMDAKK2NvbnN0IF9fX0ZMVF9IQVNfREVOT1JNX18g
PSAxCitjb25zdCBfUlVTQUdFX1RIUkVBRCA9IDEKK2NvbnN0IF9JRkZfUFJPTUlTQyA9IDI1Ngor
Y29uc3QgX1BGX1RJUEMgPSAzMAorY29uc3QgX1NZU19wdXRwbXNnID0gX19fTlJfcHV0cG1zZwor
Y29uc3QgX01BQ1NFQ19WQUxJREFURV9TVFJJQ1QgPSAyCitjb25zdCBfVENBX0lOR1JFU1NfQkxP
Q0sgPSAxMworY29uc3QgX19fQVRPTUlDX0hMRV9SRUxFQVNFID0gMTMxMDcyCitjb25zdCBfU1lT
X2dldHJsaW1pdCA9IF9fX05SX2dldHJsaW1pdAorY29uc3QgX1JUTV9TRVREQ0IgPSA3OQorY29u
c3QgX1JUTVNHX0RFTERFVklDRSA9IDB4MTIKK2NvbnN0IF9JQ01QNl9SUl9QQ09VU0VfUkFGTEFH
U19PTkxJTksgPSAweDIwCitjb25zdCBfU1lTX21lbWJhcnJpZXIgPSBfX19OUl9tZW1iYXJyaWVy
Citjb25zdCBfU0lPQ0dQR1JQID0gMHg4OTA0Citjb25zdCBfX0NTX0xGUzY0X0xERkxBR1MgPSAx
MDA1Citjb25zdCBfQjM4NDAwID0gMDAwMDAxNworY29uc3QgX0hBVkVfTElOVVhfSUZfVFVOX0gg
PSAxCitjb25zdCBfQVJQSFJEX0FQUExFVExLID0gOAorY29uc3QgX1BSX0dFVF9TRUNVUkVCSVRT
ID0gMjcKK2NvbnN0IF9DTUlOID0gMQorY29uc3QgX05VRF9OT05FID0gMHgwMAorY29uc3QgX0lG
TEFfVlhMQU5fVFRMID0gNQorY29uc3QgX19fR0NDX0FUT01JQ19DSEFSMzJfVF9MT0NLX0ZSRUUg
PSAyCitjb25zdCBfSU5fQ0xPU0VfTk9XUklURSA9IDB4MDAwMDAwMTAKK2NvbnN0IF9fX0FUT01J
Q19TRVFfQ1NUID0gNQorY29uc3QgX1NZU19pbm90aWZ5X2luaXQgPSBfX19OUl9pbm90aWZ5X2lu
aXQKK2NvbnN0IF9USU9DU0VSR1NUUlVDVCA9IDB4NTQ1OAorY29uc3QgX05MTV9GX0RVTVAgPSAo
X05MTV9GX1JPT1R8X05MTV9GX01BVENIKQorY29uc3QgX19TQ19TUEFXTiA9IDE1OQorY29uc3Qg
X19QQ19SRUNfTUFYX1hGRVJfU0laRSA9IDE1Citjb25zdCBfU0lPQ0FERERMQ0kgPSAweDg5ODAK
K2NvbnN0IF9fX0xEQkxfTUFYX0VYUF9fID0gMTYzODQKK2NvbnN0IF9fTEZTNjRfU1RESU8gPSAx
Citjb25zdCBfU1lTX3R1eGNhbGwgPSBfX19OUl90dXhjYWxsCitjb25zdCBfX1NZU19VTl9IID0g
MQorY29uc3QgX0lDTVA2X0ZJTFRFUl9CTE9DSyA9IDEKK2NvbnN0IF9FUkVNQ0hHID0gNzgKK2Nv
bnN0IF9ORVRMSU5LX0FERF9NRU1CRVJTSElQID0gMQorY29uc3QgX1g4Nl9FRkxBR1NfVklQX0JJ
VCA9IDIwCitjb25zdCBfVENQSV9PUFRfU1lOX0RBVEEgPSAzMgorY29uc3QgX19fTlJfdW1hc2sg
PSA5NQorY29uc3QgX1dJTlRfTUlOID0gKDApCitjb25zdCBfX1BPU0lYX01FTUxPQ0sgPSAyMDA4
MDkKK2NvbnN0IF9fU0NfQ0hBUkNMQVNTX05BTUVfTUFYID0gNDUKK2NvbnN0IF9JRkxBX0lQVkxB
Tl9GTEFHUyA9IDIKK2NvbnN0IF9fUE9TSVhfUkVBREVSX1dSSVRFUl9MT0NLUyA9IDIwMDgwOQor
Y29uc3QgX0hBVkVfTElOVVhfUFRSQUNFX0ggPSAxCitjb25zdCBfWDg2X0NSNF9TTVhFX0JJVCA9
IDE0Citjb25zdCBfSVhPRkYgPSAwMDEwMDAwCitjb25zdCBfTVNfTk9VU0VSID0gLTIxNDc0ODM2
NDgKK2NvbnN0IF9fX0JJR0dFU1RfQUxJR05NRU5UX18gPSAxNgorY29uc3QgX0ZTX1BPTElDWV9G
TEFHU19QQURfTUFTSyA9IDB4MDMKK2NvbnN0IF9FVEhfUF9ERENNUCA9IDB4MDAwNgorY29uc3Qg
X19fTlJfcnRfc2lnc3VzcGVuZCA9IDEzMAorY29uc3QgX1hfT0sgPSAxCitjb25zdCBfT19BU1lO
QyA9IDAyMDAwMAorY29uc3QgX1RJT0NMSU5VWCA9IDB4NTQxQworY29uc3QgX19fU0laRU9GX1NJ
WkVfVF9fID0gOAorY29uc3QgX05VRF9OT0FSUCA9IDB4NDAKK2NvbnN0IF9TX0lGRElSID0gX19f
U19JRkRJUgorY29uc3QgX19fVVNFX1hPUEVOMktYU0kgPSAxCitjb25zdCBfX19VU0VfR05VID0g
MQorY29uc3QgX05URl9NQVNURVIgPSAweDA0Citjb25zdCBfX19BVE9NSUNfQUNRVUlSRSA9IDIK
K2NvbnN0IF9OXzZQQUNLID0gNworY29uc3QgX0lGTEFfRVZFTlRfSUdNUF9SRVNFTkQgPSA1Citj
b25zdCBfSVBfREYgPSAweDQwMDAKK2NvbnN0IF9JUE9QVF9PUFRWQUwgPSAwCitjb25zdCBfX1BB
VEhfSE9TVFMgPSAiL2V0Yy9ob3N0cyIKK2NvbnN0IF9fX05SX2V2ZW50ZmQgPSAyODQKK2NvbnN0
IF9TT19TTkRCVUYgPSA3Citjb25zdCBfX19OUl9sc2VlayA9IDgKK2NvbnN0IF9fX05SX21rZGly
YXQgPSAyNTgKK2NvbnN0IF9EVF9VTktOT1dOID0gMAorY29uc3QgX0lGTEFfVkxBTl9JRCA9IDEK
K2NvbnN0IF9fU0NfUElJX0lOVEVSTkVUX1NUUkVBTSA9IDYxCitjb25zdCBfRl9TRVRPV04gPSBf
X19GX1NFVE9XTgorY29uc3QgX19DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJQlMgPSAxMTI2Citj
b25zdCBfVElPQ1NTRVJJQUwgPSAweDU0MUYKK2NvbnN0IF9FTk9ORVQgPSA2NAorY29uc3QgX0FS
UEhSRF9BVE0gPSAxOQorY29uc3QgX1g4Nl9FRkxBR1NfQUZfQklUID0gNAorY29uc3QgX19fTlJf
c2V0cmVzZ2lkID0gMTE5Citjb25zdCBfU1lTX211bm1hcCA9IF9fX05SX211bm1hcAorY29uc3Qg
X0NYODZfUENSMCA9IDB4MjAKK2NvbnN0IF9fX0lOVE1BWF9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZm
ZmZmZgorY29uc3QgX19fTlJfY2hyb290ID0gMTYxCitjb25zdCBfX19HQ0NfQVRPTUlDX0NIQVJf
TE9DS19GUkVFID0gMgorY29uc3QgX0VUSF9GUkFNRV9MRU4gPSAxNTE0Citjb25zdCBfUFRSQUNF
X0VWRU5UX0ZPUksgPSAxCitjb25zdCBfSUZMQV9CT05EX05VTV9QRUVSX05PVElGID0gMTYKK2Nv
bnN0IF9DTE9DS19SRUFMVElNRSA9IDAKK2NvbnN0IF9OREFfUFJPQkVTID0gNAorY29uc3QgX19Q
Q19SRUNfSU5DUl9YRkVSX1NJWkUgPSAxNAorY29uc3QgX0lGTEFfUFJPVE9fRE9XTiA9IDM5Citj
b25zdCBfVUlOVF9GQVNUMzJfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX19TQ18yX1BCU19U
UkFDSyA9IDE3MgorY29uc3QgX0FSUERfRkxVU0ggPSAweDAzCitjb25zdCBfU0NOeExFQVNUOCA9
ICJoaHgiCitjb25zdCBfVFJZX0FHQUlOID0gMgorY29uc3QgX19TWVNfU1lTSU5GT19IID0gMQor
Y29uc3QgX0VUSEVSVFlQRV9JUCA9IDB4MDgwMAorY29uc3QgX0FSUEhSRF9JRUVFMTM5NCA9IDI0
Citjb25zdCBfSU5fQUNDRVNTID0gMHgwMDAwMDAwMQorY29uc3QgX0lGTEFfSUZOQU1FID0gMwor
Y29uc3QgX1RDUF9VU0VSX1RJTUVPVVQgPSAxOAorY29uc3QgX0FSUEhSRF9JRUVFODAyMTEgPSA4
MDEKK2NvbnN0IF9JRkxBX0FGX1NQRUMgPSAyNgorY29uc3QgX0IxMTUyMDAwID0gMDAxMDAxMQor
Y29uc3QgX0VUSF9QX1RETFMgPSAweDg5MEQKK2NvbnN0IF9fQklUU19TSUdTVEFDS19IID0gMQor
Y29uc3QgX1BGX0JMVUVUT09USCA9IDMxCitjb25zdCBfX0JJVFNfU0lHQ09OVEVYVF9IID0gMQor
Y29uc3QgX1RJT0NTV0lOU1pfdmFsID0gMjE1MjQKK2NvbnN0IF9FQUlfQUxMRE9ORSA9IC0xMDMK
K2NvbnN0IF9fX0xEQkxfTUFYXzEwX0VYUF9fID0gNDkzMgorY29uc3QgX0lGTEFfU1RBVFNfTElO
S182NCA9IDEKK2NvbnN0IF9VSU5UX0ZBU1QzMl9NQVggPSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUp
Citjb25zdCBfRkZJX1NZU1YgPSAxCitjb25zdCBfX1NZU19GSUxFX0ggPSAxCitjb25zdCBfSVBf
T1JJR0RTVEFERFIgPSAyMAorY29uc3QgX0VUSF9QX1NDQSA9IDB4NjAwNworY29uc3QgX1JUTUdS
UF9JUFY2X1BSRUZJWCA9IDB4MjAwMDAKK2NvbnN0IF9fX05SX3NldHByaW9yaXR5ID0gMTQxCitj
b25zdCBfVElPQ1BLVF9OT1NUT1AgPSAxNgorY29uc3QgX0lQX1BNVFVESVNDX09NSVQgPSA1Citj
b25zdCBfQ09MTF9XRUlHSFRTX01BWCA9IDI1NQorY29uc3QgX09fVFJVTkMgPSAwMTAwMAorY29u
c3QgX19fTlJfc2V0aG9zdG5hbWUgPSAxNzAKK2NvbnN0IF9GSU9OQ0xFWCA9IDB4NTQ1MAorY29u
c3QgX0ZTX1hGTEFHX0lNTVVUQUJMRSA9IDB4MDAwMDAwMDgKK2NvbnN0IF9GU19JTkxJTkVfREFU
QV9GTCA9IDB4MTAwMDAwMDAKK2NvbnN0IF9QRl9BWDI1ID0gMworY29uc3QgX19fQVRPTUlDX0FD
UV9SRUwgPSA0Citjb25zdCBfX19OUl9zeXNpbmZvID0gOTkKK2NvbnN0IF9GU19YRkxBR19EQVgg
PSAweDAwMDA4MDAwCitjb25zdCBfSVBWNl9ST1VURVJfQUxFUlQgPSAyMgorY29uc3QgX0lGTEFf
QlJfQlJJREdFX0lEID0gMTEKK2NvbnN0IF9YODZfQ1I0X0xBNTdfQklUID0gMTIKK2NvbnN0IF9f
U0NfVkVSU0lPTiA9IDI5Citjb25zdCBfU1RBVFhfQVRUUl9DT01QUkVTU0VEID0gMHgwMDA0Citj
b25zdCBfSVBWNl9IRFJJTkNMID0gMzYKK2NvbnN0IF9JRkxBX0JSUE9SVF9VTklDQVNUX0ZMT09E
ID0gOQorY29uc3QgX1JUTV9ERUxORUlHSCA9IDI5Citjb25zdCBfX19TVERDX1ZFUlNJT05fXyA9
IDE5OTkwMQorY29uc3QgX1BGX1FJUENSVFIgPSA0MgorY29uc3QgX0FESl9GUkVRVUVOQ1kgPSAw
eDAwMDIKK2NvbnN0IF9fX0xPTkdfTE9OR19XSURUSF9fID0gNjQKK2NvbnN0IF9BRl9BU0ggPSBf
UEZfQVNICitjb25zdCBfSVBfUE1UVURJU0NfRE9OVCA9IDAKK2NvbnN0IF9IQVZFX1NZTkNfRkVU
Q0hfQU5EX0FERF80ID0gMQorY29uc3QgX0lQVjZfSk9JTl9HUk9VUCA9IDIwCitjb25zdCBfU0tG
X0FEX1ZMQU5fVEFHID0gNDQKK2NvbnN0IF9QVFJBQ0VfR0VUX1RIUkVBRF9BUkVBID0gMjUKK2Nv
bnN0IF9SVE5MR1JQX0lQVjRfTVJPVVRFX1IgPSAzMAorY29uc3QgX1RDQV9FR1JFU1NfQkxPQ0sg
PSAxNAorY29uc3QgX19fU0laRU9GX1BUSFJFQURfTVVURVhfVCA9IDQwCitjb25zdCBfU09fVFlQ
RSA9IDMKK2NvbnN0IF9fX0lGTEFfVkxBTl9NQVggPSA2Citjb25zdCBfUFRSQUNFX1NFVFNJR01B
U0sgPSAxNjkwNworY29uc3QgX0NMT05FX1ZGT1JLID0gMHgwMDAwNDAwMAorY29uc3QgX0lQUFJP
VE9fSVAgPSAwCitjb25zdCBfRU5PRVhFQyA9IDgKK2NvbnN0IF9TT19JTkNPTUlOR19DUFUgPSA0
OQorY29uc3QgX1BSX1NFVF9GUEVYQyA9IDEyCitjb25zdCBfVENQX1dJTkRPV19DTEFNUCA9IDEw
Citjb25zdCBfU09fUlhRX09WRkwgPSA0MAorY29uc3QgX1NZU192Zm9yayA9IF9fX05SX3Zmb3Jr
Citjb25zdCBfSU5fQ0xPRVhFQyA9IDUyNDI4OAorY29uc3QgX1RDQV9GQ05UID0gNgorY29uc3Qg
X19fRkxUNjRYX0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX19TQ19TRU1fVkFMVUVfTUFYID0g
MzMKK2NvbnN0IF9fTkVUSU5FVF9JQ01QNl9IID0gMQorY29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9E
RV9BRVNfMjU2X0NCQyA9IDMKK2NvbnN0IF9fX1JMSU1JVF9NU0dRVUVVRSA9IDEyCitjb25zdCBf
SVBQUk9UT19DT01QID0gMTA4Citjb25zdCBfUEFDS0VUX1JYX1JJTkcgPSA1Citjb25zdCBfSUZM
QV9DQVJSSUVSX0RPV05fQ09VTlQgPSA0OAorY29uc3QgX1NPX0JQRl9FWFRFTlNJT05TID0gNDgK
K2NvbnN0IF9FQUREUk5PVEFWQUlMID0gOTkKK2NvbnN0IF9fX0ZMVDMyX01JTl9fID0gMS4xCitj
b25zdCBfSUZMQV9CUl9GT1JXQVJEX0RFTEFZID0gMQorY29uc3QgX19fU1NFX01BVEhfXyA9IDEK
K2NvbnN0IF9TWVNfd2FpdGlkID0gX19fTlJfd2FpdGlkCitjb25zdCBfU0NPUEVfREVMSU1JVEVS
ID0gJyUnCitjb25zdCBfX19OUl9zb2NrZXQgPSA0MQorY29uc3QgX19fTkVUX0VUSEVSTkVUX0gg
PSAxCitjb25zdCBfU19JUlVTUiA9IF9fX1NfSVJFQUQKK2NvbnN0IF9JRkxBX1hEUF9GRCA9IDEK
K2NvbnN0IF9JUFY2X01UVSA9IDI0Citjb25zdCBfRlNfWEZMQUdfTk9BVElNRSA9IDB4MDAwMDAw
NDAKK2NvbnN0IF9GU19KT1VSTkFMX0RBVEFfRkwgPSAweDAwMDA0MDAwCitjb25zdCBfX19OUl9j
YXBnZXQgPSAxMjUKK2NvbnN0IF9SVE5fQU5ZQ0FTVCA9IDQKK2NvbnN0IF9QT0xMX0hVUCA9IDYK
K2NvbnN0IF9IQVZFX0dFVElQSU5GTyA9IDEKK2NvbnN0IF9NU19VTkJJTkRBQkxFID0gMTMxMDcy
Citjb25zdCBfX1NUQVRfVkVSX0tFUk5FTCA9IDAKK2NvbnN0IF9QUl9NQ0VfS0lMTCA9IDMzCitj
b25zdCBfX1BPU0lYX1Y2X0xQQklHX09GRkJJRyA9IC0xCitjb25zdCBfQVJQSFJEX0ZDQUwgPSA3
ODUKK2NvbnN0IF9TX0lGQ0hSID0gX19fU19JRkNIUgorY29uc3QgX01DQVNUX0JMT0NLX1NPVVJD
RSA9IDQzCitjb25zdCBfU1lTX2dldGdyb3VwcyA9IF9fX05SX2dldGdyb3VwcworY29uc3QgX19f
TlJfcnRfdGdzaWdxdWV1ZWluZm8gPSAyOTcKK2NvbnN0IF9VSU5UMzJfTUFYID0gKDQyOTQ5Njcy
OTUpCitjb25zdCBfVElNRV9VVEMgPSAxCitjb25zdCBfSU5fUV9PVkVSRkxPVyA9IDB4MDAwMDQw
MDAKK2NvbnN0IF9JRkxBX0JSUE9SVF9IT0xEX1RJTUVSID0gMjMKK2NvbnN0IF9JRkxBX0lORVQ2
X0NBQ0hFSU5GTyA9IDUKK2NvbnN0IF9USU1FUl9BQlNUSU1FID0gMQorY29uc3QgX01BUF9GSVhF
RCA9IDB4MTAKK2NvbnN0IF9GX09XTkVSX1RJRCA9IDAKK2NvbnN0IF9fU0NfQ0xPQ0tfU0VMRUNU
SU9OID0gMTM3Citjb25zdCBfSEFWRV9GQ0hNT0RBVCA9IDEKK2NvbnN0IF9fQ1NfUE9TSVhfVjdf
TFBCSUdfT0ZGQklHX0NGTEFHUyA9IDExNDQKK2NvbnN0IF9BVF9TVEFUWF9TWU5DX0FTX1NUQVQg
PSAweDAwMDAKK2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05TRV9JTlNVRkZJQ0lFTlRfUkVTT1VSQ0VT
ID0gMgorY29uc3QgX1RDUF9USU1FX1dBSVQgPSA2Citjb25zdCBfQlBGX1NUID0gMHgwMgorY29u
c3QgX19QT1NJWF9TUE9SQURJQ19TRVJWRVIgPSAtMQorY29uc3QgX0FGX1NFQ1VSSVRZID0gX1BG
X1NFQ1VSSVRZCitjb25zdCBfUEZfWDI1ID0gOQorY29uc3QgX1BUUkFDRV9BUkNIX1BSQ1RMID0g
MzAKK2NvbnN0IF9FU09DS1ROT1NVUFBPUlQgPSA5NAorY29uc3QgX1RJT0NHU0VSSUFMID0gMHg1
NDFFCitjb25zdCBfU1lTX21iaW5kID0gX19fTlJfbWJpbmQKK2NvbnN0IF9JRkxBX1ZGX1ZMQU4g
PSAyCitjb25zdCBfU1lTX3BrZXlfbXByb3RlY3QgPSBfX19OUl9wa2V5X21wcm90ZWN0Citjb25z
dCBfSUZBX0JST0FEQ0FTVCA9IDQKK2NvbnN0IF9CUEZfUlNIID0gMHg3MAorY29uc3QgX0lGTEFf
QlJfTUNBU1RfSEFTSF9FTEFTVElDSVRZID0gMjYKK2NvbnN0IF9SVEFYX1dJTkRPVyA9IDMKK2Nv
bnN0IF9NU19TSUxFTlQgPSAzMjc2OAorY29uc3QgX1NDTV9XSUZJX1NUQVRVUyA9IF9TT19XSUZJ
X1NUQVRVUworY29uc3QgX19TQ19GSUxFX0FUVFJJQlVURVMgPSAxNDYKK2NvbnN0IF9fUE9TSVhf
U0VNX1ZBTFVFX01BWCA9IDMyNzY3Citjb25zdCBfX19GTFQ2NFhfTUlOX0VYUF9fID0gKC0xNjM4
MSkKK2NvbnN0IF9QUkl1RkFTVDggPSAidSIKK2NvbnN0IF9fX3RpbWVyX3RfZGVmaW5lZCA9IDEK
K2NvbnN0IF9fUE9TSVhfSE9TVF9OQU1FX01BWCA9IDI1NQorY29uc3QgX1RDUF9GQVNUT1BFTiA9
IDIzCitjb25zdCBfX1NDX1NJR1FVRVVFX01BWCA9IDM0Citjb25zdCBfSU9DX09VVCA9IChfX0lP
Q19SRUFEIDw8IF9fSU9DX0RJUlNISUZUKQorY29uc3QgX0VNTElOSyA9IDMxCitjb25zdCBfX19X
Q09SRUZMQUcgPSAweDgwCitjb25zdCBfRVJGS0lMTCA9IDEzMgorY29uc3QgX19VVFNOQU1FX0xF
TkdUSCA9IDY1Citjb25zdCBfU0lHX0JMT0NLID0gMAorY29uc3QgX1NZU19taW5jb3JlID0gX19f
TlJfbWluY29yZQorY29uc3QgX0VBSV9PVkVSRkxPVyA9IC0xMgorY29uc3QgX0FGX05GQyA9IF9Q
Rl9ORkMKK2NvbnN0IF9TWVNfZ2V0cHBpZCA9IF9fX05SX2dldHBwaWQKK2NvbnN0IF9NQUNWTEFO
X0ZMQUdfTk9QUk9NSVNDID0gMQorY29uc3QgX0lQT1BUX1NFQ1VSX01NTU0gPSAweGJjNGQKK2Nv
bnN0IF9JRkxBX01BWF9NVFUgPSA1MQorY29uc3QgX19fTlJfZ2V0eGF0dHIgPSAxOTEKK2NvbnN0
IF9fU0NfMl9DX0RFViA9IDQ4Citjb25zdCBfTkRBX0xMQUREUiA9IDIKK2NvbnN0IF9JUFY2X1RS
QU5TUEFSRU5UID0gNzUKK2NvbnN0IF9fX05SX21wcm90ZWN0ID0gMTAKK2NvbnN0IF9TSFVUX1JE
V1IgPSAyCitjb25zdCBfU0lPQ1NJRk1FVFJJQyA9IDB4ODkxZQorY29uc3QgX19TQ19BSU9fTElT
VElPX01BWCA9IDIzCitjb25zdCBfTUFQX0RFTllXUklURSA9IDB4MDA4MDAKK2NvbnN0IF9TSU9D
U1BHUlAgPSAweDg5MDIKK2NvbnN0IF9TSV9BU1lOQ0lPID0gLTQKK2NvbnN0IF9UVU5TRVRJRkZf
dmFsID0gMTA3NDAyNTY3NAorY29uc3QgX0lGTEFfSUZBTElBUyA9IDIwCitjb25zdCBfUFRSQUNF
X1NFQ0NPTVBfR0VUX01FVEFEQVRBID0gMTY5MDkKK2NvbnN0IF9fX0dDQ19JRUNfNTU5ID0gMgor
Y29uc3QgX1JURl9MSU5LUlQgPSAweDAwMTAwMDAwCitjb25zdCBfU1lTX21vdmVfcGFnZXMgPSBf
X19OUl9tb3ZlX3BhZ2VzCitjb25zdCBfU0tGX0FEX1ZMQU5fVEFHX1BSRVNFTlQgPSA0OAorY29u
c3QgX0hBVkVfTERFWFBMID0gMQorY29uc3QgX19fTlJfcHJlYWR2MiA9IDMyNworY29uc3QgX19f
TlJfY3JlYXRlX21vZHVsZSA9IDE3NAorY29uc3QgX01BQ1ZMQU5fTU9ERV9CUklER0UgPSA0Citj
b25zdCBfRFRfRElSID0gNAorY29uc3QgX1NUQV9QUFNTSUdOQUwgPSAweDAxMDAKK2NvbnN0IF9T
WVNfc2V0ZnNnaWQgPSBfX19OUl9zZXRmc2dpZAorY29uc3QgX19fUkxJTUlUX1JUVElNRSA9IDE1
Citjb25zdCBfX1NDXzJfVkVSU0lPTiA9IDQ2Citjb25zdCBfSEFWRV9PUEVONjQgPSAxCitjb25z
dCBfVFJBUF9CUktQVCA9IDEKK2NvbnN0IF9OSV9ER1JBTSA9IDE2Citjb25zdCBfX1NDX0RFVklD
RV9TUEVDSUZJQyA9IDE0MQorY29uc3QgX0lQRlJBR1RUTCA9IDYwCitjb25zdCBfX1NDX05MX01T
R01BWCA9IDEyMQorY29uc3QgX1NZU19zY2hlZF9zZXRhdHRyID0gX19fTlJfc2NoZWRfc2V0YXR0
cgorY29uc3QgX1BSX1NFVF9NTV9FTkRfREFUQSA9IDQKK2NvbnN0IF9SVEFYX0FEVk1TUyA9IDgK
K2NvbnN0IF9TT0xfUkFXID0gMjU1Citjb25zdCBfTE9DS19FWCA9IDIKK2NvbnN0IF9fX05SX211
bm1hcCA9IDExCitjb25zdCBfX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJFRSA9IDIKK2NvbnN0
IF9fU0NfUEhZU19QQUdFUyA9IDg1Citjb25zdCBfRlNfS0VZX0RFU0NfUFJFRklYX1NJWkUgPSA4
Citjb25zdCBfU1lTX3JlbWFwX2ZpbGVfcGFnZXMgPSBfX19OUl9yZW1hcF9maWxlX3BhZ2VzCitj
b25zdCBfTVNfU1lOQyA9IDQKK2NvbnN0IF9GX1VOTENLID0gMgorY29uc3QgX1BSX0dFVF9GUEVN
VSA9IDkKK2NvbnN0IF9fX05SX3JlbWFwX2ZpbGVfcGFnZXMgPSAyMTYKK2NvbnN0IF9JUE9QVF9O
VU1CRVJfTUFTSyA9IDB4MWYKK2NvbnN0IF9TWVNfc2V0dWlkID0gX19fTlJfc2V0dWlkCitjb25z
dCBfSVBfUEFTU1NFQyA9IDE4Citjb25zdCBfU1lTX3NvY2tldHBhaXIgPSBfX19OUl9zb2NrZXRw
YWlyCitjb25zdCBfTkRUUEFfTE9DS1RJTUUgPSAxNQorY29uc3QgX1RDUF9DT09LSUVfTUlOID0g
OAorY29uc3QgX1JUTVNHX0FSX0ZBSUxFRCA9IDB4NTEKK2NvbnN0IF9JTExfQkFEU1RLID0gOAor
Y29uc3QgX0FSUE9QX1JFUExZID0gMgorY29uc3QgX0hBVkVfU1RSSU5HX0ggPSAxCitjb25zdCBf
SU5UX0ZBU1Q4X01BWCA9ICgxMjcpCitjb25zdCBfX19OUl9fc3lzY3RsID0gMTU2Citjb25zdCBf
UlRGX0JST0FEQ0FTVCA9IDB4MTAwMDAwMDAKK2NvbnN0IF9QRl9LQ00gPSA0MQorY29uc3QgX19Q
Q19NQVhfSU5QVVQgPSAyCitjb25zdCBfSU5fTU9ESUZZID0gMHgwMDAwMDAwMgorY29uc3QgX1NJ
R1FVSVQgPSAzCitjb25zdCBfVENQX0NPUksgPSAzCitjb25zdCBfU1lTX3JlbW92ZXhhdHRyID0g
X19fTlJfcmVtb3ZleGF0dHIKK2NvbnN0IF9fX0ZMVF9FUFNJTE9OX18gPSAxLjEKK2NvbnN0IF9f
X1VJTlQzMl9NQVhfXyA9IDB4ZmZmZmZmZmYKK2NvbnN0IF9fX05SX2ZjaG93biA9IDkzCitjb25z
dCBfUlROTEdSUF9MSU5LID0gMQorY29uc3QgX19TQ19UUkFDRV9MT0cgPSAxODQKK2NvbnN0IF9U
Q1BfS0VFUElOVFZMID0gNQorY29uc3QgX1BSX0dFVF9LRUVQQ0FQUyA9IDcKK2NvbnN0IF9JTlRf
TEVBU1QzMl9NQVggPSAoMjE0NzQ4MzY0NykKK2NvbnN0IF9fX0xEQkxfTUlOX0VYUF9fID0gKC0x
NjM4MSkKK2NvbnN0IF9TQ05pMzIgPSAiaSIKK2NvbnN0IF9fX05SX3JlbmFtZSA9IDgyCitjb25z
dCBfUFRSQUNFX09fVFJBQ0VTRUNDT01QID0gMTI4Citjb25zdCBfSU5fSUdOT1JFRCA9IDB4MDAw
MDgwMDAKK2NvbnN0IF9CUEZfSU1NID0gMHgwMAorY29uc3QgX0lGTEFfVkZfVFJVU1QgPSA5Citj
b25zdCBfSVBQUk9UT19NSCA9IDEzNQorY29uc3QgX0lGTEFfVlhMQU5fTElOSyA9IDMKK2NvbnN0
IF9FU0hVVERPV04gPSAxMDgKK2NvbnN0IF9TT0xfUEFDS0VUID0gMjYzCitjb25zdCBfX19OUl9p
bml0X21vZHVsZSA9IDE3NQorY29uc3QgX0NMT05FX05FV05TID0gMHgwMDAyMDAwMAorY29uc3Qg
X1JUUFJPVF9NUk9VVEVEID0gMTcKK2NvbnN0IF9fU0NfU1NfUkVQTF9NQVggPSAyNDEKK2NvbnN0
IF9HVFBfUk9MRV9HR1NOID0gMAorY29uc3QgX1NZU190cnVuY2F0ZSA9IF9fX05SX3RydW5jYXRl
Citjb25zdCBfX19NQUNTRUNfVkFMSURBVEVfRU5EID0gMworY29uc3QgX1g4Nl9FRkxBR1NfVklG
X0JJVCA9IDE5Citjb25zdCBfX1NDX01VTFRJX1BST0NFU1MgPSAxNTAKK2NvbnN0IF9JUFBST1RP
X1BJTSA9IDEwMworY29uc3QgX0IxNTAwMDAwID0gMDAxMDAxMgorY29uc3QgX19fTlJfcHdyaXRl
diA9IDI5NgorY29uc3QgX1NPX1JFVVNFQUREUiA9IDIKK2NvbnN0IF9OQ0MgPSA4Citjb25zdCBf
VENQX0NBX0xvc3MgPSA0Citjb25zdCBfTVNfTUdDX01TSyA9IDB4ZmZmZjAwMDAKK2NvbnN0IF9T
X0lYT1RIID0gKF9TX0lYR1JQID4+IDMpCitjb25zdCBfU09MX05FVExJTksgPSAyNzAKK2NvbnN0
IF9JTExfUFJWUkVHID0gNgorY29uc3QgX19fRkxUMzJYX01BTlRfRElHX18gPSA1MworY29uc3Qg
X1NDTnVMRUFTVDggPSAiaGh1IgorY29uc3QgX1VMTE9OR19NQVggPSAoX0xMT05HX01BWCAqIDIg
KyAxKQorY29uc3QgX0lGTEFfVlhMQU5fQUdFSU5HID0gOAorY29uc3QgX1BSX1NQRUNfUFJDVEwg
PSAoMSA8PCAwKQorY29uc3QgX1JUTV9ERUxDSEFJTiA9IDEwMQorY29uc3QgX19JT0NfU0laRVNI
SUZUID0gKF9fSU9DX1RZUEVTSElGVCtfX0lPQ19UWVBFQklUUykKK2NvbnN0IF9fX05SX25mc3Nl
cnZjdGwgPSAxODAKK2NvbnN0IF9fX0ZMVF9NSU5fMTBfRVhQX18gPSAoLTM3KQorY29uc3QgX0lG
TEFfWERQX1BST0dfSUQgPSA0Citjb25zdCBfX0JJVFNfVFlQRVNfU1RSVUNUX1NDSEVEX1BBUkFN
ID0gMQorY29uc3QgX0FSUEhSRF9SU1JWRCA9IDI2MAorY29uc3QgX19QT1NJWDJfQkNfQkFTRV9N
QVggPSA5OQorY29uc3QgX1BBQ0tFVF9BRERfTUVNQkVSU0hJUCA9IDEKK2NvbnN0IF9fX05SX3J0
X3NpZ3BlbmRpbmcgPSAxMjcKK2NvbnN0IF9fX09fUEFUSCA9IDAxMDAwMDAwMAorY29uc3QgX0VU
SF9QX0JQUSA9IDB4MDhGRgorY29uc3QgX1RDUF9USU1FU1RBTVAgPSAyNAorY29uc3QgX1NJT0NT
SUZQRkxBR1MgPSAweDg5MzQKK2NvbnN0IF9SVE1fTkVXTElOSyA9IDE2Citjb25zdCBfSUZMQV9J
TkZPX1hTVEFUUyA9IDMKK2NvbnN0IF9fUE9TSVhfQ1BVVElNRSA9IDAKK2NvbnN0IF9QQUNLRVRf
RkFTVFJPVVRFID0gNgorY29uc3QgX0lOVF9MRUFTVDY0X1dJRFRIID0gNjQKK2NvbnN0IF9QRl9J
UFggPSA0Citjb25zdCBfTlVEX1BFUk1BTkVOVCA9IDB4ODAKK2NvbnN0IF9fX05SX2lvX2Rlc3Ry
b3kgPSAyMDcKK2NvbnN0IF9SVEFYX1JUVCA9IDQKK2NvbnN0IF9fX1JMSU1JVF9SU1MgPSA1Citj
b25zdCBfX19OUl9nZXR0aWQgPSAxODYKK2NvbnN0IF9fX05SX2lvcGVybSA9IDE3MworY29uc3Qg
X1NfSUZCTEsgPSBfX19TX0lGQkxLCitjb25zdCBfU0NOeEZBU1Q4ID0gImhoeCIKK2NvbnN0IF9f
X05SX3R1eGNhbGwgPSAxODQKK2NvbnN0IF9fX09fRElSRUNUT1JZID0gMDIwMDAwMAorY29uc3Qg
X1NZU19jb25uZWN0ID0gX19fTlJfY29ubmVjdAorY29uc3QgX1RDUF9DQ19JTkZPID0gMjYKK2Nv
bnN0IF9QQUNLQUdFX1NUUklORyA9ICJwYWNrYWdlLXVudXNlZCB2ZXJzaW9uLXVudXNlZCIKK2Nv
bnN0IF9TWVNfc2NoZWRfZ2V0YXR0ciA9IF9fX05SX3NjaGVkX2dldGF0dHIKK2NvbnN0IF9fUE9T
SVgyX0JDX1NDQUxFX01BWCA9IDk5Citjb25zdCBfUFRSQUNFX1BPS0VURVhUID0gNAorY29uc3Qg
X0VUSF9QX0RFQyA9IDB4NjAwMAorY29uc3QgX1NZU19mbGlzdHhhdHRyID0gX19fTlJfZmxpc3R4
YXR0cgorY29uc3QgX0lQVkxBTl9GX1BSSVZBVEUgPSAweDAxCitjb25zdCBfTkxNU0dfT1ZFUlJV
TiA9IDB4NAorY29uc3QgX05FVExJTktfSVA2X0ZXID0gMTMKK2NvbnN0IF9JRkxBX0JSX0FHRUlO
R19USU1FID0gNAorY29uc3QgX1RDU0VUUyA9IDB4NTQwMgorY29uc3QgX1JUTV9GX0VRVUFMSVpF
ID0gMHg0MDAKK2NvbnN0IF9IQVZFX0RVUDMgPSAxCitjb25zdCBfQlJJREdFX01PREVfSEFJUlBJ
TiA9IDEKK2NvbnN0IF9UQ1NFVFggPSAweDU0MzMKK2NvbnN0IF9WU1VTUCA9IDEwCitjb25zdCBf
X0JJVFNfU09DS0FERFJfSCA9IDEKK2NvbnN0IF9TSUdQT0xMID0gMjkKK2NvbnN0IF9QVFJBQ0Vf
RVZFTlRfU1RPUCA9IDEyOAorY29uc3QgX0FUX1NZTUxJTktfTk9GT0xMT1cgPSAweDEwMAorY29u
c3QgX0hBVkVfU1lTX1ZGU19IID0gMQorY29uc3QgX1BGX0tFWSA9IDE1Citjb25zdCBfSUZMQV9T
VEFUU19MSU5LX1hTVEFUU19TTEFWRSA9IDMKK2NvbnN0IF9OTF9NTUFQX01TR19BTElHTk1FTlQg
PSBfTkxNU0dfQUxJR05UTworY29uc3QgX0lGTEFfVlhMQU5fVURQX0NTVU0gPSAxOAorY29uc3Qg
X19fTlJfd2FpdDQgPSA2MQorY29uc3QgX0lGTEFfUk1ORVRfRkxBR1MgPSAyCitjb25zdCBfU09M
X1JEUyA9IDI3NgorY29uc3QgX1JUQVhfRkVBVFVSRV9NQVNLID0gKF9SVEFYX0ZFQVRVUkVfRUNO
IHwgX1JUQVhfRkVBVFVSRV9TQUNLIHwgX1JUQVhfRkVBVFVSRV9USU1FU1RBTVAgfCBfUlRBWF9G
RUFUVVJFX0FMTEZSQUcpCitjb25zdCBfUlRNX0dFVE5FVENPTkYgPSA4MgorY29uc3QgX19fRkxU
NjRfTUFYX0VYUF9fID0gMTAyNAorY29uc3QgX1RJT0NTUEdSUF92YWwgPSAyMTUyMAorY29uc3Qg
X0lQUFJPVE9fUlNWUCA9IDQ2Citjb25zdCBfUlRNX0dFVE5TSUQgPSA5MAorY29uc3QgX09OTENS
ID0gMDAwMDAwNAorY29uc3QgX19TQ19QSUlfU09DS0VUID0gNTUKK2NvbnN0IF9BUlBIUkRfVFVO
TkVMID0gNzY4Citjb25zdCBfSEFWRV9NSU5DT1JFID0gMQorY29uc3QgX19fSEFWRV9HRU5FUklD
X1NFTEVDVElPTiA9IDEKK2NvbnN0IF9UQ1BfS0VFUENOVCA9IDYKK2NvbnN0IF9UQ1BfU1lOX1JF
Q1YgPSAzCitjb25zdCBfTkxNX0ZfQVBQRU5EID0gMHg4MDAKK2NvbnN0IF9TWVNfbW1hcCA9IF9f
X05SX21tYXAKK2NvbnN0IF9TWVNfY2xvY2tfYWRqdGltZSA9IF9fX05SX2Nsb2NrX2FkanRpbWUK
K2NvbnN0IF9SVE5MR1JQX1RDID0gNAorY29uc3QgX0FESl9OQU5PID0gMHgyMDAwCitjb25zdCBf
TkVUTElOS19UWF9SSU5HID0gNworY29uc3QgX1NZU19ldmVudGZkID0gX19fTlJfZXZlbnRmZAor
Y29uc3QgX19TQ19UUkFDRV9OQU1FX01BWCA9IDI0MworY29uc3QgX1NUQVRYX0FUSU1FID0gMHgw
MDIwCitjb25zdCBfX0NTX0xGU19MREZMQUdTID0gMTAwMQorY29uc3QgX19fTlJfc2V0cmVnaWQg
PSAxMTQKK2NvbnN0IF9FT1dORVJERUFEID0gMTMwCitjb25zdCBfX19OUl9yZWFkbGluayA9IDg5
Citjb25zdCBfX19zdGFja190X2RlZmluZWQgPSAxCitjb25zdCBfX19GTFQ2NFhfTUFYXzEwX0VY
UF9fID0gNDkzMgorY29uc3QgX1JUU0lHX01BWCA9IDMyCitjb25zdCBfX19TSVpFT0ZfTE9OR19E
T1VCTEVfXyA9IDE2Citjb25zdCBfVlQwID0gMDAwMDAwMAorY29uc3QgX1ZUMSA9IDAwNDAwMDAK
K2NvbnN0IF9JTlRfRkFTVDE2X01BWCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQorY29uc3QgX1g4
Nl9DUjBfVFNfQklUID0gMworY29uc3QgX19fTlJfc3lzZnMgPSAxMzkKK2NvbnN0IF9YODZfQ1I0
X1BBRV9CSVQgPSA1Citjb25zdCBfX1BPU0lYX1RaTkFNRV9NQVggPSA2Citjb25zdCBfU1lTX29w
ZW4gPSBfX19OUl9vcGVuCitjb25zdCBfU0lPQ1NJRkVOQ0FQID0gMHg4OTI2Citjb25zdCBfVENQ
X0NBX0Rpc29yZGVyID0gMQorY29uc3QgX19fV09SRFNJWkUgPSA2NAorY29uc3QgX0lQX01GID0g
MHgyMDAwCitjb25zdCBfUFJPVF9HUk9XU1VQID0gMHgwMjAwMDAwMAorY29uc3QgX1JURl9BRERS
Q0xBU1NNQVNLID0gMHhGODAwMDAwMAorY29uc3QgX19fYW1kNjQgPSAxCitjb25zdCBfQVJQSFJE
X1BST05FVCA9IDQKK2NvbnN0IF9COTIxNjAwID0gMDAxMDAwNworY29uc3QgX0VBRERSSU5VU0Ug
PSA5OAorY29uc3QgX0ZTX0ZMX1VTRVJfVklTSUJMRSA9IDB4MDAwM0RGRkYKK2NvbnN0IF9fX05S
X3RpbWVyZmRfZ2V0dGltZSA9IDI4NworY29uc3QgX0NMT05FX05FV1BJRCA9IDB4MjAwMDAwMDAK
K2NvbnN0IF9SVE5MR1JQX0lQVjZfUlVMRSA9IDE5Citjb25zdCBfRVRIRVJfTUlOX0xFTiA9IChf
RVRIX1pMRU4gKyBfRVRIRVJfQ1JDX0xFTikKK2NvbnN0IF9QRl9ST1NFID0gMTEKK2NvbnN0IF9J
RkxBX1BPUlRfU0VMRiA9IDI1Citjb25zdCBfTElOS19YU1RBVFNfVFlQRV9CUklER0UgPSAxCitj
b25zdCBfX1NZU19TVEFUX0ggPSAxCitjb25zdCBfSUZMQV9CUl9HUk9VUF9BRERSID0gMjAKK2Nv
bnN0IF9GX1NFVFNJRyA9IF9fX0ZfU0VUU0lHCitjb25zdCBfV1NUT1BQRUQgPSAyCitjb25zdCBf
X1BDX1ZESVNBQkxFID0gOAorY29uc3QgX19TQ19NUV9PUEVOX01BWCA9IDI3Citjb25zdCBfWDg2
X0VGTEFHU19QRl9CSVQgPSAyCitjb25zdCBfUlRNX05FV0FERFJMQUJFTCA9IDcyCitjb25zdCBf
U09DS19QQUNLRVQgPSAxMAorY29uc3QgX19fTlJfbXFfdW5saW5rID0gMjQxCitjb25zdCBfUlRN
R1JQX05FSUdIID0gNAorY29uc3QgX1BGX1dBTlBJUEUgPSAyNQorY29uc3QgX1JUTV9ERUxBRERS
ID0gMjEKK2NvbnN0IF9MT0NLX1VOID0gOAorY29uc3QgX1BPTExfSU4gPSAxCitjb25zdCBfTUFD
VkxBTl9NQUNBRERSX0ZMVVNIID0gMgorY29uc3QgX1JUUFJPVF9ETlJPVVRFRCA9IDEzCitjb25z
dCBfTUFDVkxBTl9NT0RFX1NPVVJDRSA9IDE2Citjb25zdCBfU1lTX3NldHBnaWQgPSBfX19OUl9z
ZXRwZ2lkCitjb25zdCBfX19JRkxBX0dFTkVWRV9NQVggPSAxMgorY29uc3QgX1NJT0NBRERNVUxU
SSA9IDB4ODkzMQorY29uc3QgX1JUTVNHX05FV1JPVVRFID0gMHgyMQorY29uc3QgX0ZGSV9UWVBF
X0NPTVBMRVggPSAxNQorY29uc3QgX0hBVkVfQ09TTCA9IDEKK2NvbnN0IF9OSV9NQVhIT1NUID0g
MTAyNQorY29uc3QgX0hBVkVfU1lTX01PVU5UX0ggPSAxCitjb25zdCBfTk9fUkVDT1ZFUlkgPSAz
Citjb25zdCBfSUZMQV9WWExBTl9VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9CT05EX01JSU1PTiA9
IDMKK2NvbnN0IF9JUERFRlRUTCA9IDY0Citjb25zdCBfUlRBWF9NVFUgPSAyCitjb25zdCBfRU5F
VFJFU0VUID0gMTAyCitjb25zdCBfX19GTFRfSEFTX1FVSUVUX05BTl9fID0gMQorY29uc3QgX0lG
TEFfSU5FVF9DT05GID0gMQorY29uc3QgX1NJR19BVE9NSUNfTUFYID0gKDIxNDc0ODM2NDcpCitj
b25zdCBfU1RBX1BQU0ZSRVEgPSAweDAwMDIKK2NvbnN0IF9JTl9JU0RJUiA9IDB4NDAwMDAwMDAK
K2NvbnN0IF9JQ01QNl9FQ0hPX1JFUExZID0gMTI5Citjb25zdCBfVENYT05DID0gMHg1NDBBCitj
b25zdCBfUlRDRl9NQVNRID0gMHgwMDQwMDAwMAorY29uc3QgX0FGX0JSSURHRSA9IF9QRl9CUklE
R0UKK2NvbnN0IF9QUl9USU1JTkdfVElNRVNUQU1QID0gMQorY29uc3QgX0lQVjZfUE1UVURJU0Nf
T01JVCA9IDUKK2NvbnN0IF9JTExfSUxMVFJQID0gNAorY29uc3QgX0lQT1BUX1JFU0VSVkVEMiA9
IDB4NjAKK2NvbnN0IF9fX05EVVNFUk9QVF9NQVggPSAyCitjb25zdCBfU1lOQ19GSUxFX1JBTkdF
X1dSSVRFID0gMgorY29uc3QgX1NUQV9JTlMgPSAweDAwMTAKK2NvbnN0IF9fUE9TSVgyX0NPTExf
V0VJR0hUU19NQVggPSAyCitjb25zdCBfX1hPUEVOX1hDVV9WRVJTSU9OID0gNAorY29uc3QgX0VO
T0NTSSA9IDUwCitjb25zdCBfWEFUVFJfTElTVF9NQVggPSA2NTUzNgorY29uc3QgX1g4Nl9DUjBf
TkVfQklUID0gNQorY29uc3QgX1NZU19wc2VsZWN0NiA9IF9fX05SX3BzZWxlY3Q2Citjb25zdCBf
VE9TVE9QID0gMDAwMDQwMAorY29uc3QgX1RJT0NQS1RfU1RPUCA9IDQKK2NvbnN0IF9JRkxBX0JS
UE9SVF9QUk9URUNUID0gNgorY29uc3QgX19TQ19TSUdOQUxTID0gMTU4Citjb25zdCBfU1lTX3Nl
dHhhdHRyID0gX19fTlJfc2V0eGF0dHIKK2NvbnN0IF9SRU5BTUVfV0hJVEVPVVQgPSAoMSA8PCAy
KQorY29uc3QgX0lGQV9GX05PREFEID0gMHgwMgorY29uc3QgX19MQVJHRUZJTEVfU09VUkNFID0g
MQorY29uc3QgX19fV0lOVF9NQVhfXyA9IDB4ZmZmZmZmZmYKK2NvbnN0IF9FUEZOT1NVUFBPUlQg
PSA5NgorY29uc3QgX1NZU19zaWdhbHRzdGFjayA9IF9fX05SX3NpZ2FsdHN0YWNrCitjb25zdCBf
U0NOZExFQVNUMzIgPSAiZCIKK2NvbnN0IF9JTlQxNl9XSURUSCA9IDE2Citjb25zdCBfUlROSF9G
X09OTElOSyA9IDQKK2NvbnN0IF9HQUlfV0FJVCA9IDAKK2NvbnN0IF9fX05SX2xvb2t1cF9kY29v
a2llID0gMjEyCitjb25zdCBfX19OUl9taW5jb3JlID0gMjcKK2NvbnN0IF9BUlBIUkRfVFVOTkVM
NiA9IDc2OQorY29uc3QgX1NPTF9SWFJQQyA9IDI3MgorY29uc3QgX19QQ18yX1NZTUxJTktTID0g
MjAKK2NvbnN0IF9JQ01QNl9EU1RfVU5SRUFDSF9OT1JPVVRFID0gMAorY29uc3QgX0ROX0FUVFJJ
QiA9IDB4MDAwMDAwMjAKK2NvbnN0IF9QVFJBQ0VfU0VUUkVHUyA9IDEzCitjb25zdCBfX19MUDY0
X18gPSAxCitjb25zdCBfRl9TRUFMX1NFQUwgPSAweDAwMDEKK2NvbnN0IF9NTERfTElTVEVORVJf
UVVFUlkgPSAxMzAKK2NvbnN0IF9TWVNfaW5vdGlmeV9pbml0MSA9IF9fX05SX2lub3RpZnlfaW5p
dDEKK2NvbnN0IF9fX05SX2FjY3QgPSAxNjMKK2NvbnN0IF9NU0dfRkFTVE9QRU4gPSA1MzY4NzA5
MTIKK2NvbnN0IF9fX3NpZ2V2ZW50X3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9SVE5MR1JQX0lQVjZf
TVJPVVRFX1IgPSAzMQorY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTERGTEFHUyA9
IDExMjEKK2NvbnN0IF9JRkxBX01BQ1ZMQU5fVU5TUEVDID0gMAorY29uc3QgX1BBQ0tFVF9BVVhE
QVRBID0gOAorY29uc3QgX0lGTEFfQk9ORF9VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9HRU5FVkVf
TEFCRUwgPSAxMQorY29uc3QgX1BSX1VOQUxJR05fU0lHQlVTID0gMgorY29uc3QgX0ZfVExPQ0sg
PSAyCitjb25zdCBfU1RBVFhfVFlQRSA9IDB4MDAwMQorY29uc3QgX19QT1NJWF9TUElOX0xPQ0tT
ID0gMjAwODA5Citjb25zdCBfUEZfUlhSUEMgPSAzMworY29uc3QgX1RDUF9LRUVQSURMRSA9IDQK
K2NvbnN0IF9fX1VJTlRfRkFTVDY0X01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBf
X19OUl9sbGlzdHhhdHRyID0gMTk1Citjb25zdCBfX19OUl9yc2VxID0gMzM0Citjb25zdCBfX0NT
X1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMAorY29uc3QgX09fQUNDTU9ERSA9IDAwMDMK
K2NvbnN0IF9USU9DTV9STkcgPSAweDA4MAorY29uc3QgX19fTlJfa2V4ZWNfZmlsZV9sb2FkID0g
MzIwCitjb25zdCBfSU5SX09QRU5fQ1VSID0gMTAyNAorY29uc3QgX19fTlJfcm1kaXIgPSA4NAor
Y29uc3QgX0VUSF9QX0FYMjUgPSAweDAwMDIKK2NvbnN0IF9fQklUU19TSUdJTkZPX0NPTlNUU19B
UkNIX0ggPSAxCitjb25zdCBfSEFWRV9JTlRUWVBFU19IID0gMQorY29uc3QgX0VERVNUQUREUlJF
USA9IDg5Citjb25zdCBfX19OR1JFRyA9IDIzCitjb25zdCBfUkVHX1IxMCA9IDIKK2NvbnN0IF9S
RUdfUjExID0gMworY29uc3QgX0lQVjZfRlJFRUJJTkQgPSA3OAorY29uc3QgX1JFR19SMTMgPSA1
Citjb25zdCBfX19oYXZlX3B0aHJlYWRfYXR0cl90ID0gMQorY29uc3QgX1JFR19SMTUgPSA3Citj
b25zdCBfTklfTUFYU0VSViA9IDMyCitjb25zdCBfQVJQSFJEX0hETEMgPSBfQVJQSFJEX0NJU0NP
Citjb25zdCBfX19HTElCQ19VU0VfSUVDXzYwNTU5X0JGUF9FWFQgPSAxCitjb25zdCBfUEZfVU5J
WCA9IF9QRl9MT0NBTAorY29uc3QgX19fU1lTQ0FMTF9XT1JEU0laRSA9IDY0Citjb25zdCBfU1lT
X2NyZWF0ID0gX19fTlJfY3JlYXQKK2NvbnN0IF9USU9DU0NUVFkgPSAweDU0MEUKK2NvbnN0IF9G
RklfTEFTVF9BQkkgPSA4Citjb25zdCBfTkRBX01BU1RFUiA9IDkKK2NvbnN0IF9FVEhfUF9JRUVF
UFVQID0gMHgwYTAwCitjb25zdCBfUEZfSVJEQSA9IDIzCitjb25zdCBfSEFWRV9TWVNfVElNRVhf
SCA9IDEKK2NvbnN0IF9fX0ZMVF9ERUNJTUFMX0RJR19fID0gOQorY29uc3QgX19fTlJfdGltZXJf
Y3JlYXRlID0gMjIyCitjb25zdCBfU1lTX2dldHBnaWQgPSBfX19OUl9nZXRwZ2lkCitjb25zdCBf
RkZJXzY0X0JJVF9NQVggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3Citjb25zdCBfSUZMQV9NQUNTRUNf
SUNWX0xFTiA9IDMKK2NvbnN0IF9CMTgwMCA9IDAwMDAwMTIKK2NvbnN0IF9CUzAgPSAwMDAwMDAw
Citjb25zdCBfQlMxID0gMDAyMDAwMAorY29uc3QgX19TWVNfVElNRV9IID0gMQorY29uc3QgX19Q
T1NJWF9BUkdfTUFYID0gNDA5NgorY29uc3QgX19fU0NIQVJfV0lEVEhfXyA9IDgKK2NvbnN0IF9f
X0ZMVF9SQURJWF9fID0gMgorY29uc3QgX1g4Nl9DUjNfUFdUX0JJVCA9IDMKK2NvbnN0IF9QT1JU
X1ZEUF9SRVNQT05TRV9VTlVTRURfVlRJRCA9IDMKK2NvbnN0IF9fX0RFQzMyX0VQU0lMT05fXyA9
IDFFLTYKK2NvbnN0IF9JRkxBX1ZYTEFOX0xFQVJOSU5HID0gNworY29uc3QgX0VQT0xMRVQgPSAy
MTQ3NDgzNjQ4Citjb25zdCBfRl9TRVRMS1c2NCA9IDcKK2NvbnN0IF9fX1VTRV9BVEZJTEUgPSAx
Citjb25zdCBfU19JUkVBRCA9IF9TX0lSVVNSCitjb25zdCBfUFRSQUNFX1NFVEZQUkVHUyA9IDE1
Citjb25zdCBfSUZGX1JVTk5JTkcgPSA2NAorY29uc3QgX0hBVkVfVVRJTUVOU0FUID0gMQorY29u
c3QgX19QQ19TWU1MSU5LX01BWCA9IDE5Citjb25zdCBfWDg2X0VGTEFHU19aRl9CSVQgPSA2Citj
b25zdCBfRl9TRVRMSzY0ID0gNgorY29uc3QgX19QT1NJWF9QQVRIX01BWCA9IDI1NgorY29uc3Qg
X0lOX0NMQVNTQV9OU0hJRlQgPSAyNAorY29uc3QgX1BBQ0tFVF9USU1FU1RBTVAgPSAxNworY29u
c3QgX19fUE9TSVhfRkFEVl9ET05UTkVFRCA9IDQKK2NvbnN0IF9JUFBST1RPX01UUCA9IDkyCit0
eXBlIF9pZmFjZSBzdHJ1Y3Qge30KK3R5cGUgX19fbG9jYWxlX2RhdGEgc3RydWN0IHt9Cit0eXBl
IHRpbWV2YWxfc2VjX3QgaW50NjQKK3R5cGUgdGltZXZhbF91c2VjX3QgaW50NjQKK3R5cGUgdGlt
ZXZhbCBzdHJ1Y3QgeyB0dl9zZWMgdGltZXZhbF9zZWNfdDsgdHZfdXNlYyB0aW1ldmFsX3VzZWNf
dDsgfQorCitmdW5jICh0diAqdGltZXZhbCkgc2V0X3VzZWMoeCBpbnQzMikgeworCXR2LnR2X3Vz
ZWMgPSB0aW1ldmFsX3VzZWNfdCh4KQorfQordHlwZSB0aW1lc3BlY19zZWNfdCBpbnQ2NAordHlw
ZSB0aW1lc3BlY19uc2VjX3QgaW50NjQKK3R5cGUgdGltZXNwZWMgc3RydWN0IHsgdHZfc2VjIHRp
bWVzcGVjX3NlY190OyB0dl9uc2VjIHRpbWVzcGVjX25zZWNfdDsgfQorCitmdW5jICh0cyAqdGlt
ZXNwZWMpIHNldF9zZWMoeCBpbnQ2NCkgeworCXRzLnR2X3NlYyA9IHRpbWVzcGVjX3NlY190KHgp
Cit9CisKK2Z1bmMgKHRzICp0aW1lc3BlYykgc2V0X25zZWMoeCBpbnQzMikgeworCXRzLnR2X25z
ZWMgPSB0aW1lc3BlY19uc2VjX3QoeCkKK30KK3R5cGUgZXBvbGxldmVudCBzdHJ1Y3QgeyBldmVu
dHMgdWludDMyOyBkYXRhIFs4XWJ5dGUgfQorY29uc3QgX0VQT0xMRVRwb3MgPSBfRVBPTExFVAor
dHlwZSBzZW10IHN0cnVjdCB7IF9fc2l6ZSBbMzErMV1pbnQ4OyBHb2R1bXBfMF9hbGlnbiBbMF1p
bnQ2NDsgfQpkaWZmIC0tZ2l0IGEvZ2VuZXJhdGVkL3NpZ3RhYi5nbyBiL2dlbmVyYXRlZC9zaWd0
YWIuZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZiNDZhZgotLS0gL2Rl
di9udWxsCisrKyBiL2dlbmVyYXRlZC9zaWd0YWIuZ28KQEAgLTAsMCArMSw3MSBAQAorLy8gR2Vu
ZXJhdGVkIGJ5IG1rc2lndGFiLnNoLiAgRG8gbm90IGVkaXQuCisKK3BhY2thZ2UgcnVudGltZQor
Cit2YXIgc2lndGFibGUgPSBbLi4uXXNpZ1RhYlR7CisJMDogICAgICAgICAgezAsICJTSUdOT05F
OiBubyB0cmFwIn0sCisJX1NJR0hVUDogICAge19TaWdOb3RpZnkgKyBfU2lnS2lsbCwgIlNJR0hV
UDogdGVybWluYWwgbGluZSBoYW5ndXAifSwKKwlfU0lHSU5UOiAgICB7X1NpZ05vdGlmeSArIF9T
aWdLaWxsLCAiU0lHSU5UOiBpbnRlcnJ1cHQifSwKKwlfU0lHUVVJVDogICB7X1NpZ05vdGlmeSAr
IF9TaWdUaHJvdywgIlNJR1FVSVQ6IHF1aXQifSwKKwlfU0lHSUxMOiAgICB7X1NpZ1Rocm93ICsg
X1NpZ1VuYmxvY2ssICJTSUdJTEw6IGlsbGVnYWwgaW5zdHJ1Y3Rpb24ifSwKKwlfU0lHVFJBUDog
ICB7X1NpZ1Rocm93ICsgX1NpZ1VuYmxvY2ssICJTSUdUUkFQOiB0cmFjZSB0cmFwIn0sCisJX1NJ
R0FCUlQ6ICAge19TaWdOb3RpZnkgKyBfU2lnVGhyb3csICJTSUdBQlJUOiBhYm9ydCJ9LAorCV9T
SUdCVVM6ICAgIHtfU2lnUGFuaWMgKyBfU2lnVW5ibG9jaywgIlNJR0JVUzogYnVzIGVycm9yIn0s
CisJX1NJR0ZQRTogICAge19TaWdQYW5pYyArIF9TaWdVbmJsb2NrLCAiU0lHRlBFOiBmbG9hdGlu
Zy1wb2ludCBleGNlcHRpb24ifSwKKwlfU0lHS0lMTDogICB7MCwgIlNJR0tJTEw6IGtpbGwifSwK
KwlfU0lHVVNSMTogICB7X1NpZ05vdGlmeSwgIlNJR1VTUjE6IHVzZXItZGVmaW5lZCBzaWduYWwg
MSJ9LAorCV9TSUdTRUdWOiAgIHtfU2lnUGFuaWMgKyBfU2lnVW5ibG9jaywgIlNJR1NFR1Y6IHNl
Z21lbnRhdGlvbiB2aW9sYXRpb24ifSwKKwlfU0lHVVNSMjogICB7X1NpZ05vdGlmeSwgIlNJR1VT
UjI6IHVzZXItZGVmaW5lZCBzaWduYWwgMiJ9LAorCV9TSUdQSVBFOiAgIHtfU2lnTm90aWZ5LCAi
U0lHUElQRTogd3JpdGUgdG8gYnJva2VuIHBpcGUifSwKKwlfU0lHQUxSTTogICB7X1NpZ05vdGlm
eSwgIlNJR0FMUk06IGFsYXJtIGNsb2NrIn0sCisJX1NJR1RFUk06ICAge19TaWdOb3RpZnkgKyBf
U2lnS2lsbCwgIlNJR1RFUk06IHRlcm1pbmF0aW9uIn0sCisJX1NJR0NITEQ6ICAge19TaWdOb3Rp
ZnkgKyBfU2lnVW5ibG9jaywgIlNJR0NITEQ6IGNoaWxkIHN0YXR1cyBoYXMgY2hhbmdlZCJ9LAor
CV9TSUdDT05UOiAgIHtfU2lnTm90aWZ5ICsgX1NpZ0RlZmF1bHQsICJTSUdDT05UOiBjb250aW51
ZSJ9LAorCV9TSUdTVE9QOiAgIHswLCAiU0lHU1RPUDogc3RvcCJ9LAorCV9TSUdUU1RQOiAgIHtf
U2lnTm90aWZ5ICsgX1NpZ0RlZmF1bHQsICJTSUdUU1RQOiBrZXlib2FyZCBzdG9wIn0sCisJX1NJ
R1RUSU46ICAge19TaWdOb3RpZnkgKyBfU2lnRGVmYXVsdCwgIlNJR1RUSU46IGJhY2tncm91bmQg
cmVhZCBmcm9tIHR0eSJ9LAorCV9TSUdUVE9VOiAgIHtfU2lnTm90aWZ5ICsgX1NpZ0RlZmF1bHQs
ICJTSUdUVE9VOiBiYWNrZ3JvdW5kIHdyaXRlIHRvIHR0eSJ9LAorCV9TSUdVUkc6ICAgIHtfU2ln
Tm90aWZ5LCAiU0lHVVJHOiB1cmdlbnQgY29uZGl0aW9uIG9uIHNvY2tldCJ9LAorCV9TSUdYQ1BV
OiAgIHtfU2lnTm90aWZ5LCAiU0lHWENQVTogY3B1IGxpbWl0IGV4Y2VlZGVkIn0sCisJX1NJR1hG
U1o6ICAge19TaWdOb3RpZnksICJTSUdYRlNaOiBmaWxlIHNpemUgbGltaXQgZXhjZWVkZWQifSwK
KwlfU0lHVlRBTFJNOiB7X1NpZ05vdGlmeSwgIlNJR1ZUQUxSTTogdmlydHVhbCBhbGFybSBjbG9j
ayJ9LAorCV9TSUdQUk9GOiAgIHtfU2lnTm90aWZ5ICsgX1NpZ1VuYmxvY2ssICJTSUdQUk9GOiBw
cm9maWxpbmcgYWxhcm0gY2xvY2sifSwKKwlfU0lHV0lOQ0g6ICB7X1NpZ05vdGlmeSwgIlNJR1dJ
TkNIOiB3aW5kb3cgc2l6ZSBjaGFuZ2UifSwKKwlfU0lHU1lTOiAgICB7X1NpZ1Rocm93LCAiU0lH
U1lTOiBiYWQgc3lzdGVtIGNhbGwifSwKKwlfU0lHU1RLRkxUOiAge19TaWdUaHJvdyArIF9TaWdV
bmJsb2NrLCAiU0lHU1RLRkxUOiBzdGFjayBmYXVsdCJ9LAorCV9TSUdQV1I6ICAgICB7X1NpZ05v
dGlmeSwgIlNJR1BXUjogcG93ZXIgZmFpbHVyZSByZXN0YXJ0In0sCisJX1NJR1BPTEw6ICAgIHtf
U2lnTm90aWZ5LCAiU0lHUE9MTDogcG9sbGFibGUgZXZlbnQgb2NjdXJyZWQifSwKKwkzMjoge19T
aWdTZXRTdGFjayArIF9TaWdVbmJsb2NrLCAic2lnbmFsIDMyIn0sIC8qIFNJR0NBTkNFTDsgc2Vl
IGlzc3VlIDY5OTcgKi8KKwkzMzoge19TaWdTZXRTdGFjayArIF9TaWdVbmJsb2NrLCAic2lnbmFs
IDMzIn0sIC8qIFNJR1NFVFhJRDsgc2VlIGlzc3VlcyAzODcxLCA5NDAwLCAxMjQ5OCAqLworCTM0
OiB7X1NpZ05vdGlmeSwgInNpZ25hbCAzNCJ9LAorCTM1OiB7X1NpZ05vdGlmeSwgInNpZ25hbCAz
NSJ9LAorCTM2OiB7X1NpZ05vdGlmeSwgInNpZ25hbCAzNiJ9LAorCTM3OiB7X1NpZ05vdGlmeSwg
InNpZ25hbCAzNyJ9LAorCTM4OiB7X1NpZ05vdGlmeSwgInNpZ25hbCAzOCJ9LAorCTM5OiB7X1Np
Z05vdGlmeSwgInNpZ25hbCAzOSJ9LAorCTQwOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0MCJ9LAor
CTQxOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0MSJ9LAorCTQyOiB7X1NpZ05vdGlmeSwgInNpZ25h
bCA0MiJ9LAorCTQzOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0MyJ9LAorCTQ0OiB7X1NpZ05vdGlm
eSwgInNpZ25hbCA0NCJ9LAorCTQ1OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0NSJ9LAorCTQ2OiB7
X1NpZ05vdGlmeSwgInNpZ25hbCA0NiJ9LAorCTQ3OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0NyJ9
LAorCTQ4OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0OCJ9LAorCTQ5OiB7X1NpZ05vdGlmeSwgInNp
Z25hbCA0OSJ9LAorCTUwOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1MCJ9LAorCTUxOiB7X1NpZ05v
dGlmeSwgInNpZ25hbCA1MSJ9LAorCTUyOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1MiJ9LAorCTUz
OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1MyJ9LAorCTU0OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1
NCJ9LAorCTU1OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1NSJ9LAorCTU2OiB7X1NpZ05vdGlmeSwg
InNpZ25hbCA1NiJ9LAorCTU3OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1NyJ9LAorCTU4OiB7X1Np
Z05vdGlmeSwgInNpZ25hbCA1OCJ9LAorCTU5OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1OSJ9LAor
CTYwOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA2MCJ9LAorCTYxOiB7X1NpZ05vdGlmeSwgInNpZ25h
bCA2MSJ9LAorCTYyOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA2MiJ9LAorCTYzOiB7X1NpZ05vdGlm
eSwgInNpZ25hbCA2MyJ9LAorCTY0OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA2NCJ9LAorfQpkaWZm
IC0tZ2l0IGEvZ2VuZXJhdGVkL3N5c2NhbGxfYXJjaC5nbyBiL2dlbmVyYXRlZC9zeXNjYWxsX2Fy
Y2guZ28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q4ZDdhYwotLS0gL2Rl
di9udWxsCisrKyBiL2dlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28KQEAgLTAsMCArMSwzIEBACitw
YWNrYWdlIHN5c2NhbGwKK2NvbnN0IEFSQ0ggPSAiYW1kNjQiCitjb25zdCBPUyA9ICJsaW51eCIK
ZGlmZiAtLWdpdCBhL2dlbmVyYXRlZC9zeXNpbmZvLmdvIGIvZ2VuZXJhdGVkL3N5c2luZm8uZ28K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY2OGZmMAotLS0gL2Rldi9udWxs
CisrKyBiL2dlbmVyYXRlZC9zeXNpbmZvLmdvCkBAIC0wLDAgKzEsOTI4MiBAQAorcGFja2FnZSBz
eXNjYWxsCitpbXBvcnQgInVuc2FmZSIKK3R5cGUgXyB1bnNhZmUuUG9pbnRlcgordHlwZSBfcHRy
ZGlmZl90IGludDY0Cit0eXBlIF9zaXplX3QgdWludDY0Cit0eXBlIF93Y2hhcl90IGludDMyCit0
eXBlIF9fX3VfY2hhciB1aW50OAordHlwZSBfX191X3Nob3J0IHVpbnQxNgordHlwZSBfX191X2lu
dCB1aW50MzIKK3R5cGUgX19fdV9sb25nIHVpbnQ2NAordHlwZSBfX19pbnQ4X3QgaW50OAordHlw
ZSBfX191aW50OF90IHVpbnQ4Cit0eXBlIF9fX2ludDE2X3QgaW50MTYKK3R5cGUgX19fdWludDE2
X3QgdWludDE2Cit0eXBlIF9fX2ludDMyX3QgaW50MzIKK3R5cGUgX19fdWludDMyX3QgdWludDMy
Cit0eXBlIF9fX2ludDY0X3QgaW50NjQKK3R5cGUgX19fdWludDY0X3QgdWludDY0Cit0eXBlIF9f
X2ludF9sZWFzdDhfdCBpbnQ4Cit0eXBlIF9fX3VpbnRfbGVhc3Q4X3QgdWludDgKK3R5cGUgX19f
aW50X2xlYXN0MTZfdCBpbnQxNgordHlwZSBfX191aW50X2xlYXN0MTZfdCB1aW50MTYKK3R5cGUg
X19faW50X2xlYXN0MzJfdCBpbnQzMgordHlwZSBfX191aW50X2xlYXN0MzJfdCB1aW50MzIKK3R5
cGUgX19faW50X2xlYXN0NjRfdCBpbnQ2NAordHlwZSBfX191aW50X2xlYXN0NjRfdCB1aW50NjQK
K3R5cGUgX19fcXVhZF90IGludDY0Cit0eXBlIF9fX3VfcXVhZF90IHVpbnQ2NAordHlwZSBfX19p
bnRtYXhfdCBpbnQ2NAordHlwZSBfX191aW50bWF4X3QgdWludDY0Cit0eXBlIF9fX2Rldl90IHVp
bnQ2NAordHlwZSBfX191aWRfdCB1aW50MzIKK3R5cGUgX19fZ2lkX3QgdWludDMyCit0eXBlIF9f
X2lub190IHVpbnQ2NAordHlwZSBfX19pbm82NF90IHVpbnQ2NAordHlwZSBfX19tb2RlX3QgdWlu
dDMyCit0eXBlIF9fX25saW5rX3QgdWludDY0Cit0eXBlIF9fX29mZl90IGludDY0Cit0eXBlIF9f
X29mZjY0X3QgaW50NjQKK3R5cGUgX19fcGlkX3QgaW50MzIKK3R5cGUgX19fZnNpZF90IHN0cnVj
dCB7IF9fdmFsIFsxKzFdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfX19mc2lkX3QgPSA4Cit0eXBl
IF9fX2Nsb2NrX3QgaW50NjQKK3R5cGUgX19fcmxpbV90IHVpbnQ2NAordHlwZSBfX19ybGltNjRf
dCB1aW50NjQKK3R5cGUgX19faWRfdCB1aW50MzIKK3R5cGUgX19fdGltZV90IGludDY0Cit0eXBl
IF9fX3VzZWNvbmRzX3QgdWludDMyCit0eXBlIF9fX3N1c2Vjb25kc190IGludDY0Cit0eXBlIF9f
X2RhZGRyX3QgaW50MzIKK3R5cGUgX19fa2V5X3QgaW50MzIKK3R5cGUgX19fY2xvY2tpZF90IGlu
dDMyCit0eXBlIF9fX3RpbWVyX3QgKmJ5dGUKK3R5cGUgX19fYmxrc2l6ZV90IGludDY0Cit0eXBl
IF9fX2Jsa2NudF90IGludDY0Cit0eXBlIF9fX2Jsa2NudDY0X3QgaW50NjQKK3R5cGUgX19fZnNi
bGtjbnRfdCB1aW50NjQKK3R5cGUgX19fZnNibGtjbnQ2NF90IHVpbnQ2NAordHlwZSBfX19mc2Zp
bGNudF90IHVpbnQ2NAordHlwZSBfX19mc2ZpbGNudDY0X3QgdWludDY0Cit0eXBlIF9fX2Zzd29y
ZF90IGludDY0Cit0eXBlIF9fX3NzaXplX3QgaW50NjQKK3R5cGUgX19fc3lzY2FsbF9zbG9uZ190
IGludDY0Cit0eXBlIF9fX3N5c2NhbGxfdWxvbmdfdCB1aW50NjQKK3R5cGUgX19fbG9mZl90IGlu
dDY0Cit0eXBlIF9fX2NhZGRyX3QgKmludDgKK3R5cGUgX19faW50cHRyX3QgaW50NjQKK3R5cGUg
X19fc29ja2xlbl90IHVpbnQzMgordHlwZSBfX19zaWdfYXRvbWljX3QgaW50MzIKK3R5cGUgX3Vf
Y2hhciB1aW50OAordHlwZSBfdV9zaG9ydCB1aW50MTYKK3R5cGUgX3VfaW50IHVpbnQzMgordHlw
ZSBfdV9sb25nIHVpbnQ2NAordHlwZSBfcXVhZF90IGludDY0Cit0eXBlIF91X3F1YWRfdCB1aW50
NjQKK3R5cGUgX2ZzaWRfdCBzdHJ1Y3QgeyBfX3ZhbCBbMSsxXWludDMyOyB9Citjb25zdCBfc2l6
ZW9mX2ZzaWRfdCA9IDgKK3R5cGUgX2xvZmZfdCBpbnQ2NAordHlwZSBfaW5vX3QgdWludDY0Cit0
eXBlIF9pbm82NF90IHVpbnQ2NAordHlwZSBfZGV2X3QgdWludDY0Cit0eXBlIF9naWRfdCB1aW50
MzIKK3R5cGUgX21vZGVfdCB1aW50MzIKK3R5cGUgX25saW5rX3QgdWludDY0Cit0eXBlIF91aWRf
dCB1aW50MzIKK3R5cGUgX29mZl90IGludDY0Cit0eXBlIF9vZmY2NF90IGludDY0Cit0eXBlIF9w
aWRfdCBpbnQzMgordHlwZSBfaWRfdCB1aW50MzIKK3R5cGUgX3NzaXplX3QgaW50NjQKK3R5cGUg
X2RhZGRyX3QgaW50MzIKK3R5cGUgX2NhZGRyX3QgKmludDgKK3R5cGUgX2tleV90IGludDMyCit0
eXBlIF9jbG9ja190IGludDY0Cit0eXBlIF9jbG9ja2lkX3QgaW50MzIKK3R5cGUgX3RpbWVfdCBp
bnQ2NAordHlwZSBfdGltZXJfdCAqYnl0ZQordHlwZSBfdXNlY29uZHNfdCB1aW50MzIKK3R5cGUg
X3N1c2Vjb25kc190IGludDY0Cit0eXBlIF91bG9uZyB1aW50NjQKK3R5cGUgX3VzaG9ydCB1aW50
MTYKK3R5cGUgX3VpbnQgdWludDMyCit0eXBlIF9pbnQ4X3QgaW50OAordHlwZSBfaW50MTZfdCBp
bnQxNgordHlwZSBfaW50MzJfdCBpbnQzMgordHlwZSBfaW50NjRfdCBpbnQ2NAordHlwZSBfdV9p
bnQ4X3QgdWludDgKK3R5cGUgX3VfaW50MTZfdCB1aW50MTYKK3R5cGUgX3VfaW50MzJfdCB1aW50
MzIKK3R5cGUgX3VfaW50NjRfdCB1aW50NjQKK3R5cGUgX3JlZ2lzdGVyX3QgaW50NjQKK3R5cGUg
X19fc2lnc2V0X3Qgc3RydWN0IHsgX192YWwgWzE1KzFddWludDY0OyB9Citjb25zdCBfc2l6ZW9m
X19fc2lnc2V0X3QgPSAxMjgKK3R5cGUgX3NpZ3NldF90IHN0cnVjdCB7IF9fdmFsIFsxNSsxXXVp
bnQ2NDsgfQorY29uc3QgX3NpemVvZl9zaWdzZXRfdCA9IDEyOAorY29uc3QgX3NpemVvZl90aW1l
dmFsID0gMTYKK2NvbnN0IF9zaXplb2ZfdGltZXNwZWMgPSAxNgordHlwZSBfX19mZF9tYXNrIGlu
dDY0Cit0eXBlIF9mZF9zZXQgc3RydWN0IHsgZmRzX2JpdHMgWzE1KzFdaW50NjQ7IH0KK2NvbnN0
IF9zaXplb2ZfZmRfc2V0ID0gMTI4Cit0eXBlIF9mZF9tYXNrIGludDY0Cit0eXBlIF9ibGtzaXpl
X3QgaW50NjQKK3R5cGUgX2Jsa2NudF90IGludDY0Cit0eXBlIF9mc2Jsa2NudF90IHVpbnQ2NAor
dHlwZSBfZnNmaWxjbnRfdCB1aW50NjQKK3R5cGUgX2Jsa2NudDY0X3QgaW50NjQKK3R5cGUgX2Zz
YmxrY250NjRfdCB1aW50NjQKK3R5cGUgX2ZzZmlsY250NjRfdCB1aW50NjQKK3R5cGUgX19fcHRo
cmVhZF9yd2xvY2tfYXJjaF90IHN0cnVjdCB7IF9fcmVhZGVycyB1aW50MzI7IF9fd3JpdGVycyB1
aW50MzI7IF9fd3JwaGFzZV9mdXRleCB1aW50MzI7IF9fd3JpdGVyc19mdXRleCB1aW50MzI7IF9f
cGFkMyB1aW50MzI7IF9fcGFkNCB1aW50MzI7IF9fY3VyX3dyaXRlciBpbnQzMjsgX19zaGFyZWQg
aW50MzI7IF9fcndlbGlzaW9uIGludDg7IF9fcGFkMSBbNisxXXVpbnQ4OyBfX3BhZDIgdWludDY0
OyBfX2ZsYWdzIHVpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2Zf
X19wdGhyZWFkX3J3bG9ja19hcmNoX3QgPSA1NgordHlwZSBfX19wdGhyZWFkX2ludGVybmFsX2xp
c3Qgc3RydWN0IHsgX19wcmV2ICpfX19wdGhyZWFkX2ludGVybmFsX2xpc3Q7IF9fbmV4dCAqX19f
cHRocmVhZF9pbnRlcm5hbF9saXN0OyB9Citjb25zdCBfc2l6ZW9mX19fcHRocmVhZF9pbnRlcm5h
bF9saXN0ID0gMTYKK3R5cGUgX19fcHRocmVhZF9saXN0X3Qgc3RydWN0IHsgX19wcmV2ICpfX19w
dGhyZWFkX2ludGVybmFsX2xpc3Q7IF9fbmV4dCAqX19fcHRocmVhZF9pbnRlcm5hbF9saXN0OyB9
Citjb25zdCBfc2l6ZW9mX19fcHRocmVhZF9saXN0X3QgPSAxNgordHlwZSBfX19wdGhyZWFkX211
dGV4X3Mgc3RydWN0IHsgX19sb2NrIGludDMyOyBfX2NvdW50IHVpbnQzMjsgX19vd25lciBpbnQz
MjsgX19udXNlcnMgdWludDMyOyBfX2tpbmQgaW50MzI7IF9fc3BpbnMgaW50MTY7IF9fZWxpc2lv
biBpbnQxNjsgX19saXN0IF9fX3B0aHJlYWRfbGlzdF90OyB9Citjb25zdCBfc2l6ZW9mX19fcHRo
cmVhZF9tdXRleF9zID0gNDAKK3R5cGUgX19fcHRocmVhZF9jb25kX3Mgc3RydWN0IHsgX193c2Vx
IHVpbnQ2NDsgX19nMV9zdGFydCB1aW50NjQ7IF9fZ19yZWZzIFsxKzFddWludDMyOyBfX2dfc2l6
ZSBbMSsxXXVpbnQzMjsgX19nMV9vcmlnX3NpemUgdWludDMyOyBfX3dyZWZzIHVpbnQzMjsgX19n
X3NpZ25hbHMgWzErMV11aW50MzI7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBf
c2l6ZW9mX19fcHRocmVhZF9jb25kX3MgPSA0OAordHlwZSBfcHRocmVhZF90IHVpbnQ2NAordHlw
ZSBfcHRocmVhZF9tdXRleGF0dHJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMrMV1pbnQ4OyBHb2R1bXBf
MF9hbGlnbiBbMF1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX211dGV4YXR0cl90ID0g
NAordHlwZSBfcHRocmVhZF9jb25kYXR0cl90IHN0cnVjdCB7IF9fc2l6ZSBbMysxXWludDg7IEdv
ZHVtcF8wX2FsaWduIFswXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfY29uZGF0dHJf
dCA9IDQKK3R5cGUgX3B0aHJlYWRfa2V5X3QgdWludDMyCit0eXBlIF9wdGhyZWFkX29uY2VfdCBp
bnQzMgordHlwZSBfcHRocmVhZF9hdHRyX3Qgc3RydWN0IHsgX19zaXplIFs1NSsxXWludDg7IEdv
ZHVtcF8wX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfYXR0cl90ID0g
NTYKK3R5cGUgX3B0aHJlYWRfbXV0ZXhfdCBzdHJ1Y3QgeyBfX2RhdGEgX19fcHRocmVhZF9tdXRl
eF9zOyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRfbXV0ZXhfdCA9IDQwCit0eXBlIF9wdGhyZWFk
X2NvbmRfdCBzdHJ1Y3QgeyBfX2RhdGEgX19fcHRocmVhZF9jb25kX3M7IH0KK2NvbnN0IF9zaXpl
b2ZfcHRocmVhZF9jb25kX3QgPSA0OAordHlwZSBfcHRocmVhZF9yd2xvY2tfdCBzdHJ1Y3QgeyBf
X2RhdGEgX19fcHRocmVhZF9yd2xvY2tfYXJjaF90OyB9Citjb25zdCBfc2l6ZW9mX3B0aHJlYWRf
cndsb2NrX3QgPSA1NgordHlwZSBfcHRocmVhZF9yd2xvY2thdHRyX3Qgc3RydWN0IHsgX19zaXpl
IFs3KzFdaW50ODsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcHRo
cmVhZF9yd2xvY2thdHRyX3QgPSA4Cit0eXBlIF9wdGhyZWFkX3NwaW5sb2NrX3QgaW50MzIKK3R5
cGUgX3B0aHJlYWRfYmFycmllcl90IHN0cnVjdCB7IF9fc2l6ZSBbMzErMV1pbnQ4OyBHb2R1bXBf
MF9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9wdGhyZWFkX2JhcnJpZXJfdCA9IDMy
Cit0eXBlIF9wdGhyZWFkX2JhcnJpZXJhdHRyX3Qgc3RydWN0IHsgX19zaXplIFszKzFdaW50ODsg
R29kdW1wXzBfYWxpZ24gWzBdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9iYXJyaWVy
YXR0cl90ID0gNAordHlwZSBfZGlyZW50IHN0cnVjdCB7IGRfaW5vIHVpbnQ2NDsgZF9vZmYgaW50
NjQ7IGRfcmVjbGVuIHVpbnQxNjsgZF90eXBlIHVpbnQ4OyBkX25hbWUgWzI1NSsxXWludDg7IEdv
ZHVtcF8wX3BhZCBbNV1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX2RpcmVudCA9IDI4MAordHlwZSBf
ZGlyZW50NjQgc3RydWN0IHsgZF9pbm8gdWludDY0OyBkX29mZiBpbnQ2NDsgZF9yZWNsZW4gdWlu
dDE2OyBkX3R5cGUgdWludDg7IGRfbmFtZSBbMjU1KzFdaW50ODsgR29kdW1wXzBfcGFkIFs1XWJ5
dGU7IH0KK2NvbnN0IF9zaXplb2ZfZGlyZW50NjQgPSAyODAKK3R5cGUgX0RJUiBzdHJ1Y3QgeyB9
Cit2YXIgX3Byb2dyYW1faW52b2NhdGlvbl9uYW1lICppbnQ4Cit2YXIgX3Byb2dyYW1faW52b2Nh
dGlvbl9zaG9ydF9uYW1lICppbnQ4Cit0eXBlIF9lcnJvcl90IGludDMyCit0eXBlIF9mbG9jayBz
dHJ1Y3QgeyBsX3R5cGUgaW50MTY7IGxfd2hlbmNlIGludDE2OyBsX3N0YXJ0IGludDY0OyBsX2xl
biBpbnQ2NDsgbF9waWQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25zdCBfc2l6
ZW9mX2Zsb2NrID0gMzIKK3R5cGUgX2Zsb2NrNjQgc3RydWN0IHsgbF90eXBlIGludDE2OyBsX3do
ZW5jZSBpbnQxNjsgbF9zdGFydCBpbnQ2NDsgbF9sZW4gaW50NjQ7IGxfcGlkIGludDMyOyBHb2R1
bXBfMF9wYWQgWzRdYnl0ZTsgfQorY29uc3QgX3NpemVvZl9mbG9jazY0ID0gMzIKK3R5cGUgX2lv
dmVjIHN0cnVjdCB7IGlvdl9iYXNlICpieXRlOyBpb3ZfbGVuIHVpbnQ2NDsgfQorY29uc3QgX3Np
emVvZl9pb3ZlYyA9IDE2Cit0eXBlIF9mX293bmVyX2V4IHN0cnVjdCB7IF90eXBlIHVpbnQzMjsg
cGlkIGludDMyOyB9Citjb25zdCBfc2l6ZW9mX2Zfb3duZXJfZXggPSA4Cit0eXBlIF9maWxlX2hh
bmRsZSBzdHJ1Y3QgeyBoYW5kbGVfYnl0ZXMgdWludDMyOyBoYW5kbGVfdHlwZSBpbnQzMjsgZl9o
YW5kbGUgWzBddWludDg7IH0KK2NvbnN0IF9zaXplb2ZfZmlsZV9oYW5kbGUgPSA4Cit0eXBlIF9z
dGF0IHN0cnVjdCB7IHN0X2RldiB1aW50NjQ7IHN0X2lubyB1aW50NjQ7IHN0X25saW5rIHVpbnQ2
NDsgc3RfbW9kZSB1aW50MzI7IHN0X3VpZCB1aW50MzI7IHN0X2dpZCB1aW50MzI7IF9fcGFkMCBp
bnQzMjsgc3RfcmRldiB1aW50NjQ7IHN0X3NpemUgaW50NjQ7IHN0X2Jsa3NpemUgaW50NjQ7IHN0
X2Jsb2NrcyBpbnQ2NDsgc3RfYXRpbSBUaW1lc3BlYzsgc3RfbXRpbSBUaW1lc3BlYzsgc3RfY3Rp
bSBUaW1lc3BlYzsgX19nbGliY19yZXNlcnZlZCBbMisxXWludDY0OyB9Citjb25zdCBfc2l6ZW9m
X3N0YXQgPSAxNDQKK3R5cGUgX3N0YXQ2NCBzdHJ1Y3QgeyBzdF9kZXYgdWludDY0OyBzdF9pbm8g
dWludDY0OyBzdF9ubGluayB1aW50NjQ7IHN0X21vZGUgdWludDMyOyBzdF91aWQgdWludDMyOyBz
dF9naWQgdWludDMyOyBfX3BhZDAgaW50MzI7IHN0X3JkZXYgdWludDY0OyBzdF9zaXplIGludDY0
OyBzdF9ibGtzaXplIGludDY0OyBzdF9ibG9ja3MgaW50NjQ7IHN0X2F0aW0gVGltZXNwZWM7IHN0
X210aW0gVGltZXNwZWM7IHN0X2N0aW0gVGltZXNwZWM7IF9fZ2xpYmNfcmVzZXJ2ZWQgWzIrMV1p
bnQ2NDsgfQorY29uc3QgX3NpemVvZl9zdGF0NjQgPSAxNDQKK3R5cGUgX3N0YWNrX3Qgc3RydWN0
IHsgc3Nfc3AgKmJ5dGU7IHNzX2ZsYWdzIGludDMyOyBzc19zaXplIHVpbnQ2NDsgfQorY29uc3Qg
X3NpemVvZl9zdGFja190ID0gMjQKK3R5cGUgX2dyZWdfdCBpbnQ2NAordHlwZSBfZ3JlZ3NldF90
IFsyMisxXWludDY0Cit0eXBlIF9fbGliY19mcHhyZWcgc3RydWN0IHsgc2lnbmlmaWNhbmQgWzMr
MV11aW50MTY7IGV4cG9uZW50IHVpbnQxNjsgX19nbGliY19yZXNlcnZlZDEgWzIrMV11aW50MTY7
IH0KK2NvbnN0IF9zaXplb2ZfX2xpYmNfZnB4cmVnID0gMTYKK3R5cGUgX19saWJjX3htbXJlZyBz
dHJ1Y3QgeyBlbGVtZW50IFszKzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX19saWJjX3htbXJl
ZyA9IDE2Cit0eXBlIF9fbGliY19mcHN0YXRlIHN0cnVjdCB7IGN3ZCB1aW50MTY7IHN3ZCB1aW50
MTY7IGZ0dyB1aW50MTY7IGZvcCB1aW50MTY7IHJpcCB1aW50NjQ7IHJkcCB1aW50NjQ7IG14Y3Ny
IHVpbnQzMjsgbXhjcl9tYXNrIHVpbnQzMjsgX3N0IFs3KzFdX19saWJjX2ZweHJlZzsgX3htbSBb
MTUrMV1fX2xpYmNfeG1tcmVnOyBfX2dsaWJjX3Jlc2VydmVkMSBbMjMrMV11aW50MzI7IH0KK2Nv
bnN0IF9zaXplb2ZfX2xpYmNfZnBzdGF0ZSA9IDUxMgordHlwZSBfZnByZWdzZXRfdCAqX19saWJj
X2Zwc3RhdGUKK3R5cGUgX21jb250ZXh0X3Qgc3RydWN0IHsgZ3JlZ3MgX2dyZWdzZXRfdDsgZnBy
ZWdzIF9mcHJlZ3NldF90OyBfX3Jlc2VydmVkMSBbNysxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVv
Zl9tY29udGV4dF90ID0gMjU2Cit0eXBlIF91Y29udGV4dF90IHN0cnVjdCB7IHVjX2ZsYWdzIHVp
bnQ2NDsgdWNfbGluayAqX3Vjb250ZXh0X3Q7IHVjX3N0YWNrIF9zdGFja190OyB1Y19tY29udGV4
dCBfbWNvbnRleHRfdDsgdWNfc2lnbWFzayBfc2lnc2V0X3Q7IF9fZnByZWdzX21lbSBfX2xpYmNf
ZnBzdGF0ZTsgX19zc3AgWzMrMV11aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfdWNvbnRleHRfdCA9
IDk2OAordHlwZSBfdWludDhfdCB1aW50OAordHlwZSBfdWludDE2X3QgdWludDE2Cit0eXBlIF91
aW50MzJfdCB1aW50MzIKK3R5cGUgX3VpbnQ2NF90IHVpbnQ2NAordHlwZSBfc29ja2xlbl90IHVp
bnQzMgordHlwZSBfc2FfZmFtaWx5X3QgdWludDE2Cit0eXBlIF9zb2NrYWRkciBzdHJ1Y3QgeyBz
YV9mYW1pbHkgdWludDE2OyBzYV9kYXRhIFsxMysxXWludDg7IH0KK2NvbnN0IF9zaXplb2Zfc29j
a2FkZHIgPSAxNgordHlwZSBfc29ja2FkZHJfc3RvcmFnZSBzdHJ1Y3QgeyBzc19mYW1pbHkgdWlu
dDE2OyBfX3NzX3BhZGRpbmcgWzExNysxXWludDg7IF9fc3NfYWxpZ24gdWludDY0OyB9Citjb25z
dCBfc2l6ZW9mX3NvY2thZGRyX3N0b3JhZ2UgPSAxMjgKK3R5cGUgX21zZ2hkciBzdHJ1Y3QgeyBt
c2dfbmFtZSAqYnl0ZTsgbXNnX25hbWVsZW4gdWludDMyOyBtc2dfaW92ICpfaW92ZWM7IG1zZ19p
b3ZsZW4gdWludDY0OyBtc2dfY29udHJvbCAqYnl0ZTsgbXNnX2NvbnRyb2xsZW4gdWludDY0OyBt
c2dfZmxhZ3MgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25zdCBfc2l6ZW9mX21z
Z2hkciA9IDU2Cit0eXBlIF9jbXNnaGRyIHN0cnVjdCB7IGNtc2dfbGVuIHVpbnQ2NDsgY21zZ19s
ZXZlbCBpbnQzMjsgY21zZ190eXBlIGludDMyOyBfX2Ntc2dfZGF0YSBbMF11aW50ODsgfQorY29u
c3QgX3NpemVvZl9jbXNnaGRyID0gMTYKK3R5cGUgX3VjcmVkIHN0cnVjdCB7IHBpZCBpbnQzMjsg
dWlkIHVpbnQzMjsgZ2lkIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl91Y3JlZCA9IDEyCit0eXBl
IF9saW5nZXIgc3RydWN0IHsgbF9vbm9mZiBpbnQzMjsgbF9saW5nZXIgaW50MzI7IH0KK2NvbnN0
IF9zaXplb2ZfbGluZ2VyID0gOAordHlwZSBfb3NvY2thZGRyIHN0cnVjdCB7IHNhX2ZhbWlseSB1
aW50MTY7IHNhX2RhdGEgWzEzKzFddWludDg7IH0KK2NvbnN0IF9zaXplb2Zfb3NvY2thZGRyID0g
MTYKK3R5cGUgX19fU09DS0FERFJfQVJHIHN0cnVjdCB7IF9fc29ja2FkZHJfXyAqX3NvY2thZGRy
OyB9Citjb25zdCBfc2l6ZW9mX19fU09DS0FERFJfQVJHID0gOAordHlwZSBfX19DT05TVF9TT0NL
QUREUl9BUkcgc3RydWN0IHsgX19zb2NrYWRkcl9fICpfc29ja2FkZHI7IH0KK2NvbnN0IF9zaXpl
b2ZfX19DT05TVF9TT0NLQUREUl9BUkcgPSA4Cit0eXBlIF9tbXNnaGRyIHN0cnVjdCB7IG1zZ19o
ZHIgX21zZ2hkcjsgbXNnX2xlbiB1aW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25z
dCBfc2l6ZW9mX21tc2doZHIgPSA2NAordHlwZSBfaW5fYWRkcl90IHVpbnQzMgordHlwZSBfaW5f
YWRkciBzdHJ1Y3QgeyBzX2FkZHIgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2luX2FkZHIgPSA0
Cit0eXBlIF9pcF9vcHRzIHN0cnVjdCB7IGlwX2RzdCBfaW5fYWRkcjsgaXBfb3B0cyBbMzkrMV1p
bnQ4OyB9Citjb25zdCBfc2l6ZW9mX2lwX29wdHMgPSA0NAordHlwZSBfaXBfbXJlcW4gc3RydWN0
IHsgaW1yX211bHRpYWRkciBfaW5fYWRkcjsgaW1yX2FkZHJlc3MgX2luX2FkZHI7IGltcl9pZmlu
ZGV4IGludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lwX21yZXFuID0gMTIKK3R5cGUgX2luX3BrdGlu
Zm8gc3RydWN0IHsgaXBpX2lmaW5kZXggaW50MzI7IGlwaV9zcGVjX2RzdCBfaW5fYWRkcjsgaXBp
X2FkZHIgX2luX2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfaW5fcGt0aW5mbyA9IDEyCit0eXBlIF9p
bl9wb3J0X3QgdWludDE2Cit0eXBlIF9zb2NrYWRkcl9pbiBzdHJ1Y3QgeyBzaW5fZmFtaWx5IHVp
bnQxNjsgc2luX3BvcnQgdWludDE2OyBzaW5fYWRkciBfaW5fYWRkcjsgc2luX3plcm8gWzcrMV11
aW50ODsgfQorY29uc3QgX3NpemVvZl9zb2NrYWRkcl9pbiA9IDE2Cit0eXBlIF9pcF9tcmVxIHN0
cnVjdCB7IGltcl9tdWx0aWFkZHIgX2luX2FkZHI7IGltcl9pbnRlcmZhY2UgX2luX2FkZHI7IH0K
K2NvbnN0IF9zaXplb2ZfaXBfbXJlcSA9IDgKK3R5cGUgX2lwX21yZXFfc291cmNlIHN0cnVjdCB7
IGltcl9tdWx0aWFkZHIgX2luX2FkZHI7IGltcl9pbnRlcmZhY2UgX2luX2FkZHI7IGltcl9zb3Vy
Y2VhZGRyIF9pbl9hZGRyOyB9Citjb25zdCBfc2l6ZW9mX2lwX21yZXFfc291cmNlID0gMTIKK2Nv
bnN0IF9zaXplb2ZfaXB2Nl9tcmVxID0gMjAKK3R5cGUgX2dyb3VwX3JlcSBzdHJ1Y3QgeyBncl9p
bnRlcmZhY2UgdWludDMyOyBncl9ncm91cCBfc29ja2FkZHJfc3RvcmFnZTsgfQorY29uc3QgX3Np
emVvZl9ncm91cF9yZXEgPSAxMzYKK3R5cGUgX2dyb3VwX3NvdXJjZV9yZXEgc3RydWN0IHsgZ3Ny
X2ludGVyZmFjZSB1aW50MzI7IGdzcl9ncm91cCBfc29ja2FkZHJfc3RvcmFnZTsgZ3NyX3NvdXJj
ZSBfc29ja2FkZHJfc3RvcmFnZTsgfQorY29uc3QgX3NpemVvZl9ncm91cF9zb3VyY2VfcmVxID0g
MjY0Cit0eXBlIF9pcF9tc2ZpbHRlciBzdHJ1Y3QgeyBpbXNmX211bHRpYWRkciBfaW5fYWRkcjsg
aW1zZl9pbnRlcmZhY2UgX2luX2FkZHI7IGltc2ZfZm1vZGUgdWludDMyOyBpbXNmX251bXNyYyB1
aW50MzI7IGltc2Zfc2xpc3QgWzArMV1faW5fYWRkcjsgfQorY29uc3QgX3NpemVvZl9pcF9tc2Zp
bHRlciA9IDIwCit0eXBlIF9ncm91cF9maWx0ZXIgc3RydWN0IHsgZ2ZfaW50ZXJmYWNlIHVpbnQz
MjsgZ2ZfZ3JvdXAgX3NvY2thZGRyX3N0b3JhZ2U7IGdmX2Ztb2RlIHVpbnQzMjsgZ2ZfbnVtc3Jj
IHVpbnQzMjsgZ2Zfc2xpc3QgWzArMV1fc29ja2FkZHJfc3RvcmFnZTsgfQorY29uc3QgX3NpemVv
Zl9ncm91cF9maWx0ZXIgPSAyNzIKK2NvbnN0IF9zaXplb2ZfaW42X3BrdGluZm8gPSAyMAorY29u
c3QgX3NpemVvZl9pcDZfbXR1aW5mbyA9IDMyCit0eXBlIF9pbnRfbGVhc3Q4X3QgaW50OAordHlw
ZSBfaW50X2xlYXN0MTZfdCBpbnQxNgordHlwZSBfaW50X2xlYXN0MzJfdCBpbnQzMgordHlwZSBf
aW50X2xlYXN0NjRfdCBpbnQ2NAordHlwZSBfdWludF9sZWFzdDhfdCB1aW50OAordHlwZSBfdWlu
dF9sZWFzdDE2X3QgdWludDE2Cit0eXBlIF91aW50X2xlYXN0MzJfdCB1aW50MzIKK3R5cGUgX3Vp
bnRfbGVhc3Q2NF90IHVpbnQ2NAordHlwZSBfaW50X2Zhc3Q4X3QgaW50OAordHlwZSBfaW50X2Zh
c3QxNl90IGludDY0Cit0eXBlIF9pbnRfZmFzdDMyX3QgaW50NjQKK3R5cGUgX2ludF9mYXN0NjRf
dCBpbnQ2NAordHlwZSBfdWludF9mYXN0OF90IHVpbnQ4Cit0eXBlIF91aW50X2Zhc3QxNl90IHVp
bnQ2NAordHlwZSBfdWludF9mYXN0MzJfdCB1aW50NjQKK3R5cGUgX3VpbnRfZmFzdDY0X3QgdWlu
dDY0Cit0eXBlIF9pbnRwdHJfdCBpbnQ2NAordHlwZSBfdWludHB0cl90IHVpbnQ2NAordHlwZSBf
aW50bWF4X3QgaW50NjQKK3R5cGUgX3VpbnRtYXhfdCB1aW50NjQKK3R5cGUgX3RjcF9zZXEgdWlu
dDMyCit0eXBlIF90Y3BoZHIgc3RydWN0IHsgdGhfc3BvcnQgdWludDE2OyB0aF9kcG9ydCB1aW50
MTY7IHRoX3NlcSB1aW50MzI7IHRoX2FjayB1aW50MzI7IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB0
aF9mbGFncyB1aW50ODsgdGhfd2luIHVpbnQxNjsgdGhfc3VtIHVpbnQxNjsgdGhfdXJwIHVpbnQx
NjsgR29kdW1wXzFfYWxpZ24gWzBdaW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGNwaGRyID0gMjAK
K3R5cGUgX3RjcF9pbmZvIHN0cnVjdCB7IHRjcGlfc3RhdGUgdWludDg7IHRjcGlfY2Ffc3RhdGUg
dWludDg7IHRjcGlfcmV0cmFuc21pdHMgdWludDg7IHRjcGlfcHJvYmVzIHVpbnQ4OyB0Y3BpX2Jh
Y2tvZmYgdWludDg7IHRjcGlfb3B0aW9ucyB1aW50ODsgdGNwaV9ydG8gdWludDMyOyB0Y3BpX2F0
byB1aW50MzI7IHRjcGlfc25kX21zcyB1aW50MzI7IHRjcGlfcmN2X21zcyB1aW50MzI7IHRjcGlf
dW5hY2tlZCB1aW50MzI7IHRjcGlfc2Fja2VkIHVpbnQzMjsgdGNwaV9sb3N0IHVpbnQzMjsgdGNw
aV9yZXRyYW5zIHVpbnQzMjsgdGNwaV9mYWNrZXRzIHVpbnQzMjsgdGNwaV9sYXN0X2RhdGFfc2Vu
dCB1aW50MzI7IHRjcGlfbGFzdF9hY2tfc2VudCB1aW50MzI7IHRjcGlfbGFzdF9kYXRhX3JlY3Yg
dWludDMyOyB0Y3BpX2xhc3RfYWNrX3JlY3YgdWludDMyOyB0Y3BpX3BtdHUgdWludDMyOyB0Y3Bp
X3Jjdl9zc3RocmVzaCB1aW50MzI7IHRjcGlfcnR0IHVpbnQzMjsgdGNwaV9ydHR2YXIgdWludDMy
OyB0Y3BpX3NuZF9zc3RocmVzaCB1aW50MzI7IHRjcGlfc25kX2N3bmQgdWludDMyOyB0Y3BpX2Fk
dm1zcyB1aW50MzI7IHRjcGlfcmVvcmRlcmluZyB1aW50MzI7IHRjcGlfcmN2X3J0dCB1aW50MzI7
IHRjcGlfcmN2X3NwYWNlIHVpbnQzMjsgdGNwaV90b3RhbF9yZXRyYW5zIHVpbnQzMjsgfQorY29u
c3QgX3NpemVvZl90Y3BfaW5mbyA9IDEwNAordHlwZSBfdGNwX21kNXNpZyBzdHJ1Y3QgeyB0Y3Bt
X2FkZHIgX3NvY2thZGRyX3N0b3JhZ2U7IHRjcG1fZmxhZ3MgdWludDg7IHRjcG1fcHJlZml4bGVu
IHVpbnQ4OyB0Y3BtX2tleWxlbiB1aW50MTY7IF9fdGNwbV9wYWQgdWludDMyOyB0Y3BtX2tleSBb
NzkrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl90Y3BfbWQ1c2lnID0gMjE2Cit0eXBlIF90Y3Bf
cmVwYWlyX29wdCBzdHJ1Y3QgeyBvcHRfY29kZSB1aW50MzI7IG9wdF92YWwgdWludDMyOyB9Citj
b25zdCBfc2l6ZW9mX3RjcF9yZXBhaXJfb3B0ID0gOAordHlwZSBfdGNwX2Nvb2tpZV90cmFuc2Fj
dGlvbnMgc3RydWN0IHsgdGNwY3RfZmxhZ3MgdWludDE2OyBfX3RjcGN0X3BhZDEgdWludDg7IHRj
cGN0X2Nvb2tpZV9kZXNpcmVkIHVpbnQ4OyB0Y3BjdF9zX2RhdGFfZGVzaXJlZCB1aW50MTY7IHRj
cGN0X3VzZWQgdWludDE2OyB0Y3BjdF92YWx1ZSBbNTM1KzFddWludDg7IH0KK2NvbnN0IF9zaXpl
b2ZfdGNwX2Nvb2tpZV90cmFuc2FjdGlvbnMgPSA1NDQKK3R5cGUgX3RjcF9yZXBhaXJfd2luZG93
IHN0cnVjdCB7IHNuZF93bDEgdWludDMyOyBzbmRfd25kIHVpbnQzMjsgbWF4X3dpbmRvdyB1aW50
MzI7IHJjdl93bmQgdWludDMyOyByY3Zfd3VwIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl90Y3Bf
cmVwYWlyX3dpbmRvdyA9IDIwCit0eXBlIF90aW1lc3RhbXAgc3RydWN0IHsgbGVuIHVpbnQ4OyBw
dHIgdWludDg7IGRhdGEgWzgrMV11aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGltZXN0YW1wID0g
NDAKK3R5cGUgX2lwaGRyIHN0cnVjdCB7IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB0b3MgdWludDg7
IHRvdF9sZW4gdWludDE2OyBpZCB1aW50MTY7IGZyYWdfb2ZmIHVpbnQxNjsgdHRsIHVpbnQ4OyBw
cm90b2NvbCB1aW50ODsgY2hlY2sgdWludDE2OyBzYWRkciB1aW50MzI7IGRhZGRyIHVpbnQzMjsg
fQorY29uc3QgX3NpemVvZl9pcGhkciA9IDIwCit0eXBlIF9pcCBzdHJ1Y3QgeyBHb2R1bXBfMF9w
YWQgWzFdYnl0ZTsgaXBfdG9zIHVpbnQ4OyBpcF9sZW4gdWludDE2OyBpcF9pZCB1aW50MTY7IGlw
X29mZiB1aW50MTY7IGlwX3R0bCB1aW50ODsgaXBfcCB1aW50ODsgaXBfc3VtIHVpbnQxNjsgaXBf
c3JjIF9pbl9hZGRyOyBpcF9kc3QgX2luX2FkZHI7IH0KK2NvbnN0IF9zaXplb2ZfaXAgPSAyMAor
dHlwZSBfaXBfdGltZXN0YW1wIHN0cnVjdCB7IGlwdF9jb2RlIHVpbnQ4OyBpcHRfbGVuIHVpbnQ4
OyBpcHRfcHRyIHVpbnQ4OyBkYXRhIFs4KzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lwX3Rp
bWVzdGFtcCA9IDQwCit0eXBlIF9fX3M4IGludDgKK3R5cGUgX19fdTggdWludDgKK3R5cGUgX19f
czE2IGludDE2Cit0eXBlIF9fX3UxNiB1aW50MTYKK3R5cGUgX19fczMyIGludDMyCit0eXBlIF9f
X3UzMiB1aW50MzIKK3R5cGUgX19fczY0IGludDY0Cit0eXBlIF9fX3U2NCB1aW50NjQKK3R5cGUg
X19fa2VybmVsX2ZkX3NldCBzdHJ1Y3QgeyBmZHNfYml0cyBbMTUrMV11aW50NjQ7IH0KK2NvbnN0
IF9zaXplb2ZfX19rZXJuZWxfZmRfc2V0ID0gMTI4Cit0eXBlIF9fX2tlcm5lbF9zaWdoYW5kbGVy
X3QgZnVuYyhpbnQzMikKK3R5cGUgX19fa2VybmVsX2tleV90IGludDMyCit0eXBlIF9fX2tlcm5l
bF9tcWRfdCBpbnQzMgordHlwZSBfX19rZXJuZWxfb2xkX3VpZF90IHVpbnQxNgordHlwZSBfX19r
ZXJuZWxfb2xkX2dpZF90IHVpbnQxNgordHlwZSBfX19rZXJuZWxfb2xkX2Rldl90IHVpbnQ2NAor
dHlwZSBfX19rZXJuZWxfbG9uZ190IGludDY0Cit0eXBlIF9fX2tlcm5lbF91bG9uZ190IHVpbnQ2
NAordHlwZSBfX19rZXJuZWxfaW5vX3QgdWludDY0Cit0eXBlIF9fX2tlcm5lbF9tb2RlX3QgdWlu
dDMyCit0eXBlIF9fX2tlcm5lbF9waWRfdCBpbnQzMgordHlwZSBfX19rZXJuZWxfaXBjX3BpZF90
IGludDMyCit0eXBlIF9fX2tlcm5lbF91aWRfdCB1aW50MzIKK3R5cGUgX19fa2VybmVsX2dpZF90
IHVpbnQzMgordHlwZSBfX19rZXJuZWxfc3VzZWNvbmRzX3QgaW50NjQKK3R5cGUgX19fa2VybmVs
X2RhZGRyX3QgaW50MzIKK3R5cGUgX19fa2VybmVsX3VpZDMyX3QgdWludDMyCit0eXBlIF9fX2tl
cm5lbF9naWQzMl90IHVpbnQzMgordHlwZSBfX19rZXJuZWxfc2l6ZV90IHVpbnQ2NAordHlwZSBf
X19rZXJuZWxfc3NpemVfdCBpbnQ2NAordHlwZSBfX19rZXJuZWxfcHRyZGlmZl90IGludDY0Cit0
eXBlIF9fX2tlcm5lbF9mc2lkX3Qgc3RydWN0IHsgdmFsIFsxKzFdaW50MzI7IH0KK2NvbnN0IF9z
aXplb2ZfX19rZXJuZWxfZnNpZF90ID0gOAordHlwZSBfX19rZXJuZWxfb2ZmX3QgaW50NjQKK3R5
cGUgX19fa2VybmVsX2xvZmZfdCBpbnQ2NAordHlwZSBfX19rZXJuZWxfdGltZV90IGludDY0Cit0
eXBlIF9fX2tlcm5lbF90aW1lNjRfdCBpbnQ2NAordHlwZSBfX19rZXJuZWxfY2xvY2tfdCBpbnQ2
NAordHlwZSBfX19rZXJuZWxfdGltZXJfdCBpbnQzMgordHlwZSBfX19rZXJuZWxfY2xvY2tpZF90
IGludDMyCit0eXBlIF9fX2tlcm5lbF9jYWRkcl90ICppbnQ4Cit0eXBlIF9fX2tlcm5lbF91aWQx
Nl90IHVpbnQxNgordHlwZSBfX19rZXJuZWxfZ2lkMTZfdCB1aW50MTYKK3R5cGUgX19fbGUxNiB1
aW50MTYKK3R5cGUgX19fYmUxNiB1aW50MTYKK3R5cGUgX19fbGUzMiB1aW50MzIKK3R5cGUgX19f
YmUzMiB1aW50MzIKK3R5cGUgX19fbGU2NCB1aW50NjQKK3R5cGUgX19fYmU2NCB1aW50NjQKK3R5
cGUgX19fc3VtMTYgdWludDE2Cit0eXBlIF9fX3dzdW0gdWludDMyCit0eXBlIF9fX3BvbGxfdCB1
aW50MzIKK3R5cGUgX2V0aGhkciBzdHJ1Y3QgeyBoX2Rlc3QgWzUrMV11aW50ODsgaF9zb3VyY2Ug
WzUrMV11aW50ODsgaF9wcm90byB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfZXRoaGRyID0gMTQK
K3R5cGUgX2V0aGVyX2FkZHIgc3RydWN0IHsgZXRoZXJfYWRkcl9vY3RldCBbNSsxXXVpbnQ4OyB9
Citjb25zdCBfc2l6ZW9mX2V0aGVyX2FkZHIgPSA2Cit0eXBlIF9ldGhlcl9oZWFkZXIgc3RydWN0
IHsgZXRoZXJfZGhvc3QgWzUrMV11aW50ODsgZXRoZXJfc2hvc3QgWzUrMV11aW50ODsgZXRoZXJf
dHlwZSB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfZXRoZXJfaGVhZGVyID0gMTQKK3R5cGUgX2Fy
cGhkciBzdHJ1Y3QgeyBhcl9ocmQgdWludDE2OyBhcl9wcm8gdWludDE2OyBhcl9obG4gdWludDg7
IGFyX3BsbiB1aW50ODsgYXJfb3AgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX2FycGhkciA9IDgK
K3R5cGUgX2FycHJlcSBzdHJ1Y3QgeyBhcnBfcGEgX3NvY2thZGRyOyBhcnBfaGEgX3NvY2thZGRy
OyBhcnBfZmxhZ3MgaW50MzI7IGFycF9uZXRtYXNrIF9zb2NrYWRkcjsgYXJwX2RldiBbMTUrMV1p
bnQ4OyB9Citjb25zdCBfc2l6ZW9mX2FycHJlcSA9IDY4Cit0eXBlIF9hcnByZXFfb2xkIHN0cnVj
dCB7IGFycF9wYSBfc29ja2FkZHI7IGFycF9oYSBfc29ja2FkZHI7IGFycF9mbGFncyBpbnQzMjsg
YXJwX25ldG1hc2sgX3NvY2thZGRyOyB9Citjb25zdCBfc2l6ZW9mX2FycHJlcV9vbGQgPSA1Mgor
dHlwZSBfYXJwZF9yZXF1ZXN0IHN0cnVjdCB7IHJlcSB1aW50MTY7IGlwIHVpbnQzMjsgZGV2IHVp
bnQ2NDsgc3RhbXAgdWludDY0OyB1cGRhdGVkIHVpbnQ2NDsgaGEgWzYrMV11aW50ODsgR29kdW1w
XzBfcGFkIFsxXWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfYXJwZF9yZXF1ZXN0ID0gNDAKK3R5cGUg
X2V0aGVyX2FycCBzdHJ1Y3QgeyBlYV9oZHIgX2FycGhkcjsgYXJwX3NoYSBbNSsxXXVpbnQ4OyBh
cnBfc3BhIFszKzFddWludDg7IGFycF90aGEgWzUrMV11aW50ODsgYXJwX3RwYSBbMysxXXVpbnQ4
OyB9Citjb25zdCBfc2l6ZW9mX2V0aGVyX2FycCA9IDI4Cit0eXBlIF9zaWdfYXRvbWljX3QgaW50
MzIKK3R5cGUgX3NpZ3ZhbCBzdHJ1Y3QgeyBzaXZhbF9pbnQgaW50MzI7IEdvZHVtcF8wX3BhZCBb
NF1ieXRlOyBHb2R1bXBfMV9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zaWd2YWwg
PSA4Cit0eXBlIF9fX3NpZ3ZhbF90IHN0cnVjdCB7IHNpdmFsX2ludCBpbnQzMjsgR29kdW1wXzBf
cGFkIFs0XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX19f
c2lndmFsX3QgPSA4Cit0eXBlIF9zaWdpbmZvX3Qgc3RydWN0IHsgc2lfc2lnbm8gaW50MzI7IHNp
X2Vycm5vIGludDMyOyBzaV9jb2RlIGludDMyOyBfX3BhZDAgaW50MzI7IF9zaWZpZWxkcyBzdHJ1
Y3QgeyBfcGFkIFsyNysxXWludDMyOyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfTsgfQorY29u
c3QgX3NpemVvZl9zaWdpbmZvX3QgPSAxMjgKK3R5cGUgX3NpZ3ZhbF90IHN0cnVjdCB7IHNpdmFs
X2ludCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0
OyB9Citjb25zdCBfc2l6ZW9mX3NpZ3ZhbF90ID0gOAordHlwZSBfc2lnZXZlbnQgc3RydWN0IHsg
c2lnZXZfdmFsdWUgX19fc2lndmFsX3Q7IHNpZ2V2X3NpZ25vIGludDMyOyBzaWdldl9ub3RpZnkg
aW50MzI7IF9zaWdldl91biBzdHJ1Y3QgeyBfcGFkIFsxMSsxXWludDMyOyBHb2R1bXBfMF9hbGln
biBbMF1pbnQ2NDsgfTsgfQorY29uc3QgX3NpemVvZl9zaWdldmVudCA9IDY0Cit0eXBlIF9zaWdl
dmVudF90IHN0cnVjdCB7IHNpZ2V2X3ZhbHVlIF9fX3NpZ3ZhbF90OyBzaWdldl9zaWdubyBpbnQz
Mjsgc2lnZXZfbm90aWZ5IGludDMyOyBfc2lnZXZfdW4gc3RydWN0IHsgX3BhZCBbMTErMV1pbnQz
MjsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH07IH0KK2NvbnN0IF9zaXplb2Zfc2lnZXZlbnRf
dCA9IDY0Cit0eXBlIF9fX3NpZ2hhbmRsZXJfdCBmdW5jKGludDMyKQordHlwZSBfc2lnaGFuZGxl
cl90IGZ1bmMoaW50MzIpCit0eXBlIF9zaWdfdCBmdW5jKGludDMyKQordHlwZSBfc2lnYWN0aW9u
IHN0cnVjdCB7IF9fc2lnYWN0aW9uX2hhbmRsZXIgc3RydWN0IHsgc2FfaGFuZGxlciBfX19zaWdo
YW5kbGVyX3Q7IH07IHNhX21hc2sgX19fc2lnc2V0X3Q7IHNhX2ZsYWdzIGludDMyOyBzYV9yZXN0
b3JlciBmdW5jKCk7IH0KK2NvbnN0IF9zaXplb2Zfc2lnYWN0aW9uID0gMTUyCit2YXIgX19zeXNf
c2lnbGlzdCBbNjQrMV0qaW50OAordmFyIF9zeXNfc2lnbGlzdCBbNjQrMV0qaW50OAordHlwZSBf
X2ZweF9zd19ieXRlcyBzdHJ1Y3QgeyBtYWdpYzEgdWludDMyOyBleHRlbmRlZF9zaXplIHVpbnQz
MjsgeHN0YXRlX2J2IHVpbnQ2NDsgeHN0YXRlX3NpemUgdWludDMyOyBfX2dsaWJjX3Jlc2VydmVk
MSBbNisxXXVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9fZnB4X3N3X2J5dGVzID0gNDgKK3R5cGUg
X19mcHJlZyBzdHJ1Y3QgeyBzaWduaWZpY2FuZCBbMysxXXVpbnQxNjsgZXhwb25lbnQgdWludDE2
OyB9Citjb25zdCBfc2l6ZW9mX19mcHJlZyA9IDEwCit0eXBlIF9fZnB4cmVnIHN0cnVjdCB7IHNp
Z25pZmljYW5kIFszKzFddWludDE2OyBleHBvbmVudCB1aW50MTY7IF9fZ2xpYmNfcmVzZXJ2ZWQx
IFsyKzFddWludDE2OyB9Citjb25zdCBfc2l6ZW9mX19mcHhyZWcgPSAxNgordHlwZSBfX3htbXJl
ZyBzdHJ1Y3QgeyBlbGVtZW50IFszKzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX194bW1yZWcg
PSAxNgordHlwZSBfX2Zwc3RhdGUgc3RydWN0IHsgY3dkIHVpbnQxNjsgc3dkIHVpbnQxNjsgZnR3
IHVpbnQxNjsgZm9wIHVpbnQxNjsgcmlwIHVpbnQ2NDsgcmRwIHVpbnQ2NDsgbXhjc3IgdWludDMy
OyBteGNyX21hc2sgdWludDMyOyBfc3QgWzcrMV1fX2ZweHJlZzsgX3htbSBbMTUrMV1fX3htbXJl
ZzsgX19nbGliY19yZXNlcnZlZDEgWzIzKzFddWludDMyOyB9Citjb25zdCBfc2l6ZW9mX19mcHN0
YXRlID0gNTEyCit0eXBlIF9zaWdjb250ZXh0IHN0cnVjdCB7IHI4IHVpbnQ2NDsgcjkgdWludDY0
OyByMTAgdWludDY0OyByMTEgdWludDY0OyByMTIgdWludDY0OyByMTMgdWludDY0OyByMTQgdWlu
dDY0OyByMTUgdWludDY0OyByZGkgdWludDY0OyByc2kgdWludDY0OyByYnAgdWludDY0OyByYngg
dWludDY0OyByZHggdWludDY0OyByYXggdWludDY0OyByY3ggdWludDY0OyByc3AgdWludDY0OyBy
aXAgdWludDY0OyBlZmxhZ3MgdWludDY0OyBjcyB1aW50MTY7IGdzIHVpbnQxNjsgZnMgdWludDE2
OyBfX3BhZDAgdWludDE2OyBlcnIgdWludDY0OyB0cmFwbm8gdWludDY0OyBvbGRtYXNrIHVpbnQ2
NDsgY3IyIHVpbnQ2NDsgZnBzdGF0ZSAqX19mcHN0YXRlOyBfX3Jlc2VydmVkMSBbNysxXXVpbnQ2
NDsgfQorY29uc3QgX3NpemVvZl9zaWdjb250ZXh0ID0gMjU2Cit0eXBlIF9feHNhdmVfaGRyIHN0
cnVjdCB7IHhzdGF0ZV9idiB1aW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQxIFsxKzFddWludDY0OyBf
X2dsaWJjX3Jlc2VydmVkMiBbNCsxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9feHNhdmVfaGRy
ID0gNjQKK3R5cGUgX195bW1oX3N0YXRlIHN0cnVjdCB7IHltbWhfc3BhY2UgWzYzKzFddWludDMy
OyB9Citjb25zdCBfc2l6ZW9mX195bW1oX3N0YXRlID0gMjU2Cit0eXBlIF9feHN0YXRlIHN0cnVj
dCB7IGZwc3RhdGUgX19mcHN0YXRlOyB4c3RhdGVfaGRyIF9feHNhdmVfaGRyOyB5bW1oIF9feW1t
aF9zdGF0ZTsgfQorY29uc3QgX3NpemVvZl9feHN0YXRlID0gODMyCit0eXBlIF9zaWdzdGFjayBz
dHJ1Y3QgeyBzc19zcCAqYnl0ZTsgc3Nfb25zdGFjayBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5
dGU7IH0KK2NvbnN0IF9zaXplb2Zfc2lnc3RhY2sgPSAxNgordHlwZSBfd2luc2l6ZSBzdHJ1Y3Qg
eyB3c19yb3cgdWludDE2OyB3c19jb2wgdWludDE2OyB3c194cGl4ZWwgdWludDE2OyB3c195cGl4
ZWwgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX3dpbnNpemUgPSA4Cit0eXBlIF90ZXJtaW8gc3Ry
dWN0IHsgY19pZmxhZyB1aW50MTY7IGNfb2ZsYWcgdWludDE2OyBjX2NmbGFnIHVpbnQxNjsgY19s
ZmxhZyB1aW50MTY7IGNfbGluZSB1aW50ODsgY19jYyBbNysxXXVpbnQ4OyBHb2R1bXBfMF9wYWQg
WzFdYnl0ZTsgfQorY29uc3QgX3NpemVvZl90ZXJtaW8gPSAxOAordHlwZSBfY2NfdCB1aW50OAor
dHlwZSBfc3BlZWRfdCB1aW50MzIKK3R5cGUgX3RjZmxhZ190IHVpbnQzMgordHlwZSBfdGVybWlv
cyBzdHJ1Y3QgeyBjX2lmbGFnIHVpbnQzMjsgY19vZmxhZyB1aW50MzI7IGNfY2ZsYWcgdWludDMy
OyBjX2xmbGFnIHVpbnQzMjsgY19saW5lIHVpbnQ4OyBjX2NjIFszMSsxXXVpbnQ4OyBjX2lzcGVl
ZCB1aW50MzI7IGNfb3NwZWVkIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl90ZXJtaW9zID0gNjAK
K2NvbnN0IF9zaXplb2ZfZXBvbGxfZGF0YSA9IDgKK2NvbnN0IF9zaXplb2ZfZXBvbGxfZGF0YV90
ID0gOAorY29uc3QgX3NpemVvZl9lcG9sbF9ldmVudCA9IDEyCit0eXBlIF9wcmN0bF9tbV9tYXAg
c3RydWN0IHsgc3RhcnRfY29kZSB1aW50NjQ7IGVuZF9jb2RlIHVpbnQ2NDsgc3RhcnRfZGF0YSB1
aW50NjQ7IGVuZF9kYXRhIHVpbnQ2NDsgc3RhcnRfYnJrIHVpbnQ2NDsgYnJrIHVpbnQ2NDsgc3Rh
cnRfc3RhY2sgdWludDY0OyBhcmdfc3RhcnQgdWludDY0OyBhcmdfZW5kIHVpbnQ2NDsgZW52X3N0
YXJ0IHVpbnQ2NDsgZW52X2VuZCB1aW50NjQ7IGF1eHYgKnVpbnQ2NDsgYXV4dl9zaXplIHVpbnQz
MjsgZXhlX2ZkIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9wcmN0bF9tbV9tYXAgPSAxMDQKK3R5
cGUgX19fcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3Mgc3RydWN0IHsgb2ZmIHVpbnQ2NDsgZmxhZ3Mg
dWludDMyOyBuciBpbnQzMjsgfQorY29uc3QgX3NpemVvZl9fX3B0cmFjZV9wZWVrc2lnaW5mb19h
cmdzID0gMTYKK3R5cGUgX19fcHRyYWNlX3NlY2NvbXBfbWV0YWRhdGEgc3RydWN0IHsgZmlsdGVy
X29mZiB1aW50NjQ7IGZsYWdzIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9fX3B0cmFjZV9zZWNj
b21wX21ldGFkYXRhID0gMTYKK3R5cGUgX3JsaW1fdCB1aW50NjQKK3R5cGUgX3JsaW02NF90IHVp
bnQ2NAordHlwZSBfcmxpbWl0IHN0cnVjdCB7IHJsaW1fY3VyIHVpbnQ2NDsgcmxpbV9tYXggdWlu
dDY0OyB9Citjb25zdCBfc2l6ZW9mX3JsaW1pdCA9IDE2Cit0eXBlIF9ybGltaXQ2NCBzdHJ1Y3Qg
eyBybGltX2N1ciB1aW50NjQ7IHJsaW1fbWF4IHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9ybGlt
aXQ2NCA9IDE2Cit0eXBlIF9ydXNhZ2Ugc3RydWN0IHsgcnVfdXRpbWUgVGltZXZhbDsgcnVfc3Rp
bWUgVGltZXZhbDsgcnVfbWF4cnNzIGludDY0OyBydV9peHJzcyBpbnQ2NDsgcnVfaWRyc3MgaW50
NjQ7IHJ1X2lzcnNzIGludDY0OyBydV9taW5mbHQgaW50NjQ7IHJ1X21hamZsdCBpbnQ2NDsgcnVf
bnN3YXAgaW50NjQ7IHJ1X2luYmxvY2sgaW50NjQ7IHJ1X291YmxvY2sgaW50NjQ7IHJ1X21zZ3Nu
ZCBpbnQ2NDsgcnVfbXNncmN2IGludDY0OyBydV9uc2lnbmFscyBpbnQ2NDsgcnVfbnZjc3cgaW50
NjQ7IHJ1X25pdmNzdyBpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9ydXNhZ2UgPSAxNDQKK3R5cGUg
X19fcmxpbWl0X3Jlc291cmNlX3QgdWludDMyCit0eXBlIF9fX3J1c2FnZV93aG9fdCBpbnQzMgor
dHlwZSBfX19wcmlvcml0eV93aGljaF90IHVpbnQzMgordHlwZSBfc3RhdHhfdGltZXN0YW1wIHN0
cnVjdCB7IHR2X3NlYyBpbnQ2NDsgdHZfbnNlYyB1aW50MzI7IF9fc3RhdHhfdGltZXN0YW1wX3Bh
ZDEgWzArMV1pbnQzMjsgfQorY29uc3QgX3NpemVvZl9zdGF0eF90aW1lc3RhbXAgPSAxNgordHlw
ZSBfc3RhdHggc3RydWN0IHsgc3R4X21hc2sgdWludDMyOyBzdHhfYmxrc2l6ZSB1aW50MzI7IHN0
eF9hdHRyaWJ1dGVzIHVpbnQ2NDsgc3R4X25saW5rIHVpbnQzMjsgc3R4X3VpZCB1aW50MzI7IHN0
eF9naWQgdWludDMyOyBzdHhfbW9kZSB1aW50MTY7IF9fc3RhdHhfcGFkMSBbMCsxXXVpbnQxNjsg
c3R4X2lubyB1aW50NjQ7IHN0eF9zaXplIHVpbnQ2NDsgc3R4X2Jsb2NrcyB1aW50NjQ7IHN0eF9h
dHRyaWJ1dGVzX21hc2sgdWludDY0OyBzdHhfYXRpbWUgX3N0YXR4X3RpbWVzdGFtcDsgc3R4X2J0
aW1lIF9zdGF0eF90aW1lc3RhbXA7IHN0eF9jdGltZSBfc3RhdHhfdGltZXN0YW1wOyBzdHhfbXRp
bWUgX3N0YXR4X3RpbWVzdGFtcDsgc3R4X3JkZXZfbWFqb3IgdWludDMyOyBzdHhfcmRldl9taW5v
ciB1aW50MzI7IHN0eF9kZXZfbWFqb3IgdWludDMyOyBzdHhfZGV2X21pbm9yIHVpbnQzMjsgX19z
dGF0eF9wYWQyIFsxMysxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zdGF0eCA9IDI1NgordHlw
ZSBfdGltZXpvbmUgc3RydWN0IHsgdHpfbWludXRlc3dlc3QgaW50MzI7IHR6X2RzdHRpbWUgaW50
MzI7IH0KK2NvbnN0IF9zaXplb2ZfdGltZXpvbmUgPSA4Cit0eXBlIF9fX3RpbWV6b25lX3B0cl90
ICpfdGltZXpvbmUKK3R5cGUgX2l0aW1lcnZhbCBzdHJ1Y3QgeyBpdF9pbnRlcnZhbCBUaW1ldmFs
OyBpdF92YWx1ZSBUaW1ldmFsOyB9Citjb25zdCBfc2l6ZW9mX2l0aW1lcnZhbCA9IDMyCit0eXBl
IF9fX2l0aW1lcl93aGljaF90IHVpbnQzMgordHlwZSBfdG1zIHN0cnVjdCB7IHRtc191dGltZSBp
bnQ2NDsgdG1zX3N0aW1lIGludDY0OyB0bXNfY3V0aW1lIGludDY0OyB0bXNfY3N0aW1lIGludDY0
OyB9Citjb25zdCBfc2l6ZW9mX3RtcyA9IDMyCit0eXBlIF9pZHR5cGVfdCB1aW50MzIKK3R5cGUg
X3NvY2thZGRyX3VuIHN0cnVjdCB7IHN1bl9mYW1pbHkgdWludDE2OyBzdW5fcGF0aCBbMTA3KzFd
aW50ODsgfQorY29uc3QgX3NpemVvZl9zb2NrYWRkcl91biA9IDExMAordHlwZSBfX19sb2NhbGVf
c3RydWN0IHN0cnVjdCB7IF9fbG9jYWxlcyBbMTIrMV0qX19fbG9jYWxlX2RhdGE7IF9fY3R5cGVf
YiAqdWludDE2OyBfX2N0eXBlX3RvbG93ZXIgKmludDMyOyBfX2N0eXBlX3RvdXBwZXIgKmludDMy
OyBfX25hbWVzIFsxMisxXSppbnQ4OyB9Citjb25zdCBfc2l6ZW9mX19fbG9jYWxlX3N0cnVjdCA9
IDIzMgordHlwZSBfX19sb2NhbGVfdCAqX19fbG9jYWxlX3N0cnVjdAordHlwZSBfbG9jYWxlX3Qg
Kl9fX2xvY2FsZV9zdHJ1Y3QKK3R5cGUgX3VzZXJfZnByZWdzX3N0cnVjdCBzdHJ1Y3QgeyBjd2Qg
dWludDE2OyBzd2QgdWludDE2OyBmdHcgdWludDE2OyBmb3AgdWludDE2OyByaXAgdWludDY0OyBy
ZHAgdWludDY0OyBteGNzciB1aW50MzI7IG14Y3JfbWFzayB1aW50MzI7IHN0X3NwYWNlIFszMSsx
XXVpbnQzMjsgeG1tX3NwYWNlIFs2MysxXXVpbnQzMjsgcGFkZGluZyBbMjMrMV11aW50MzI7IH0K
K2NvbnN0IF9zaXplb2ZfdXNlcl9mcHJlZ3Nfc3RydWN0ID0gNTEyCit0eXBlIF91c2VyX3JlZ3Nf
c3RydWN0IHN0cnVjdCB7IHIxNSB1aW50NjQ7IHIxNCB1aW50NjQ7IHIxMyB1aW50NjQ7IHIxMiB1
aW50NjQ7IHJicCB1aW50NjQ7IHJieCB1aW50NjQ7IHIxMSB1aW50NjQ7IHIxMCB1aW50NjQ7IHI5
IHVpbnQ2NDsgcjggdWludDY0OyByYXggdWludDY0OyByY3ggdWludDY0OyByZHggdWludDY0OyBy
c2kgdWludDY0OyByZGkgdWludDY0OyBvcmlnX3JheCB1aW50NjQ7IHJpcCB1aW50NjQ7IGNzIHVp
bnQ2NDsgZWZsYWdzIHVpbnQ2NDsgcnNwIHVpbnQ2NDsgc3MgdWludDY0OyBmc19iYXNlIHVpbnQ2
NDsgZ3NfYmFzZSB1aW50NjQ7IGRzIHVpbnQ2NDsgZXMgdWludDY0OyBmcyB1aW50NjQ7IGdzIHVp
bnQ2NDsgfQorY29uc3QgX3NpemVvZl91c2VyX3JlZ3Nfc3RydWN0ID0gMjE2Cit0eXBlIF91c2Vy
IHN0cnVjdCB7IHJlZ3MgX3VzZXJfcmVnc19zdHJ1Y3Q7IHVfZnB2YWxpZCBpbnQzMjsgaTM4NyBf
dXNlcl9mcHJlZ3Nfc3RydWN0OyB1X3RzaXplIHVpbnQ2NDsgdV9kc2l6ZSB1aW50NjQ7IHVfc3Np
emUgdWludDY0OyBzdGFydF9jb2RlIHVpbnQ2NDsgc3RhcnRfc3RhY2sgdWludDY0OyBzaWduYWwg
aW50NjQ7IHJlc2VydmVkIGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgdV9hcjAgKl91c2Vy
X3JlZ3Nfc3RydWN0OyB1X2Zwc3RhdGUgKl91c2VyX2ZwcmVnc19zdHJ1Y3Q7IG1hZ2ljIHVpbnQ2
NDsgdV9jb21tIFszMSsxXWludDg7IHVfZGVidWdyZWcgWzcrMV11aW50NjQ7IH0KK2NvbnN0IF9z
aXplb2ZfdXNlciA9IDkxMgordHlwZSBfdXRzbmFtZSBzdHJ1Y3QgeyBzeXNuYW1lIFs2NCsxXWlu
dDg7IG5vZGVuYW1lIFs2NCsxXWludDg7IHJlbGVhc2UgWzY0KzFdaW50ODsgdmVyc2lvbiBbNjQr
MV1pbnQ4OyBtYWNoaW5lIFs2NCsxXWludDg7IGRvbWFpbm5hbWUgWzY0KzFdaW50ODsgfQorY29u
c3QgX3NpemVvZl91dHNuYW1lID0gMzkwCit0eXBlIF90aW1leCBzdHJ1Y3QgeyBtb2RlcyB1aW50
MzI7IG9mZnNldCBpbnQ2NDsgZnJlcSBpbnQ2NDsgbWF4ZXJyb3IgaW50NjQ7IGVzdGVycm9yIGlu
dDY0OyBzdGF0dXMgaW50MzI7IGNvbnN0YW50IGludDY0OyBwcmVjaXNpb24gaW50NjQ7IHRvbGVy
YW5jZSBpbnQ2NDsgdGltZSBUaW1ldmFsOyB0aWNrIGludDY0OyBwcHNmcmVxIGludDY0OyBqaXR0
ZXIgaW50NjQ7IHNoaWZ0IGludDMyOyBzdGFiaWwgaW50NjQ7IGppdGNudCBpbnQ2NDsgY2FsY250
IGludDY0OyBlcnJjbnQgaW50NjQ7IHN0YmNudCBpbnQ2NDsgdGFpIGludDMyOyBHb2R1bXBfMCBp
bnQzMjsgR29kdW1wXzEgaW50MzI7IEdvZHVtcF8yIGludDMyOyBHb2R1bXBfMyBpbnQzMjsgR29k
dW1wXzQgaW50MzI7IEdvZHVtcF81IGludDMyOyBHb2R1bXBfNiBpbnQzMjsgR29kdW1wXzcgaW50
MzI7IEdvZHVtcF84IGludDMyOyBHb2R1bXBfOSBpbnQzMjsgR29kdW1wXzEwIGludDMyOyB9Citj
b25zdCBfc2l6ZW9mX3RpbWV4ID0gMjA4Cit0eXBlIF90bSBzdHJ1Y3QgeyB0bV9zZWMgaW50MzI7
IHRtX21pbiBpbnQzMjsgdG1faG91ciBpbnQzMjsgdG1fbWRheSBpbnQzMjsgdG1fbW9uIGludDMy
OyB0bV95ZWFyIGludDMyOyB0bV93ZGF5IGludDMyOyB0bV95ZGF5IGludDMyOyB0bV9pc2RzdCBp
bnQzMjsgdG1fZ210b2ZmIGludDY0OyB0bV96b25lICppbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3Rt
ID0gNTYKK3R5cGUgX2l0aW1lcnNwZWMgc3RydWN0IHsgaXRfaW50ZXJ2YWwgVGltZXNwZWM7IGl0
X3ZhbHVlIFRpbWVzcGVjOyB9Citjb25zdCBfc2l6ZW9mX2l0aW1lcnNwZWMgPSAzMgordmFyIF9f
X3R6bmFtZSBbMSsxXSppbnQ4Cit2YXIgX19fZGF5bGlnaHQgaW50MzIKK3ZhciBfX190aW1lem9u
ZSBpbnQ2NAordmFyIF90em5hbWUgWzErMV0qaW50OAordmFyIF9kYXlsaWdodCBpbnQzMgordmFy
IF9nZXRkYXRlX2VyciBpbnQzMgordmFyIF9fX2Vudmlyb24gKippbnQ4Cit2YXIgX2Vudmlyb24g
KippbnQ4Cit2YXIgX29wdGFyZyAqaW50OAordmFyIF9vcHRpbmQgaW50MzIKK3ZhciBfb3B0ZXJy
IGludDMyCit2YXIgX29wdG9wdCBpbnQzMgordHlwZSBfcnBjZW50IHN0cnVjdCB7IHJfbmFtZSAq
aW50ODsgcl9hbGlhc2VzICoqaW50ODsgcl9udW1iZXIgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1i
eXRlOyB9Citjb25zdCBfc2l6ZW9mX3JwY2VudCA9IDI0Cit0eXBlIF9uZXRlbnQgc3RydWN0IHsg
bl9uYW1lICppbnQ4OyBuX2FsaWFzZXMgKippbnQ4OyBuX2FkZHJ0eXBlIGludDMyOyBuX25ldCB1
aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmV0ZW50ID0gMjQKK3R5cGUgX2hvc3RlbnQgc3RydWN0
IHsgaF9uYW1lICppbnQ4OyBoX2FsaWFzZXMgKippbnQ4OyBoX2FkZHJ0eXBlIGludDMyOyBoX2xl
bmd0aCBpbnQzMjsgaF9hZGRyX2xpc3QgKippbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2hvc3RlbnQg
PSAzMgordHlwZSBfc2VydmVudCBzdHJ1Y3QgeyBzX25hbWUgKmludDg7IHNfYWxpYXNlcyAqKmlu
dDg7IHNfcG9ydCBpbnQzMjsgc19wcm90byAqaW50ODsgfQorY29uc3QgX3NpemVvZl9zZXJ2ZW50
ID0gMzIKK3R5cGUgX3Byb3RvZW50IHN0cnVjdCB7IHBfbmFtZSAqaW50ODsgcF9hbGlhc2VzICoq
aW50ODsgcF9wcm90byBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXpl
b2ZfcHJvdG9lbnQgPSAyNAordHlwZSBfYWRkcmluZm8gc3RydWN0IHsgYWlfZmxhZ3MgaW50MzI7
IGFpX2ZhbWlseSBpbnQzMjsgYWlfc29ja3R5cGUgaW50MzI7IGFpX3Byb3RvY29sIGludDMyOyBh
aV9hZGRybGVuIHVpbnQzMjsgYWlfYWRkciAqX3NvY2thZGRyOyBhaV9jYW5vbm5hbWUgKmludDg7
IGFpX25leHQgKl9hZGRyaW5mbzsgfQorY29uc3QgX3NpemVvZl9hZGRyaW5mbyA9IDQ4Cit0eXBl
IF9nYWljYiBzdHJ1Y3QgeyBhcl9uYW1lICppbnQ4OyBhcl9zZXJ2aWNlICppbnQ4OyBhcl9yZXF1
ZXN0ICpfYWRkcmluZm87IGFyX3Jlc3VsdCAqX2FkZHJpbmZvOyBfX3JldHVybiBpbnQzMjsgX19n
bGliY19yZXNlcnZlZCBbNCsxXWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2dhaWNiID0gNTYKK3R5
cGUgX3Bhc3N3ZCBzdHJ1Y3QgeyBwd19uYW1lICppbnQ4OyBwd19wYXNzd2QgKmludDg7IHB3X3Vp
ZCB1aW50MzI7IHB3X2dpZCB1aW50MzI7IHB3X2dlY29zICppbnQ4OyBwd19kaXIgKmludDg7IHB3
X3NoZWxsICppbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3Bhc3N3ZCA9IDQ4Cit0eXBlIF9GSUxFIHN0
cnVjdCB7IH0KK3R5cGUgX2dyb3VwIHN0cnVjdCB7IGdyX25hbWUgKmludDg7IGdyX3Bhc3N3ZCAq
aW50ODsgZ3JfZ2lkIHVpbnQzMjsgZ3JfbWVtICoqaW50ODsgfQorY29uc3QgX3NpemVvZl9ncm91
cCA9IDMyCit0eXBlIF9zb2NrX2ZpbHRlciBzdHJ1Y3QgeyBjb2RlIHVpbnQxNjsganQgdWludDg7
IGpmIHVpbnQ4OyBrIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9zb2NrX2ZpbHRlciA9IDgKK3R5
cGUgX3NvY2tfZnByb2cgc3RydWN0IHsgbGVuIHVpbnQxNjsgZmlsdGVyICpfc29ja19maWx0ZXI7
IH0KK2NvbnN0IF9zaXplb2Zfc29ja19mcHJvZyA9IDE2Cit0eXBlIF9zeXNpbmZvIHN0cnVjdCB7
IHVwdGltZSBpbnQ2NDsgbG9hZHMgWzIrMV11aW50NjQ7IHRvdGFscmFtIHVpbnQ2NDsgZnJlZXJh
bSB1aW50NjQ7IHNoYXJlZHJhbSB1aW50NjQ7IGJ1ZmZlcnJhbSB1aW50NjQ7IHRvdGFsc3dhcCB1
aW50NjQ7IGZyZWVzd2FwIHVpbnQ2NDsgcHJvY3MgdWludDE2OyBwYWQgdWludDE2OyB0b3RhbGhp
Z2ggdWludDY0OyBmcmVlaGlnaCB1aW50NjQ7IG1lbV91bml0IHVpbnQzMjsgX2YgWzBdaW50ODsg
R29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2Zfc3lzaW5mbyA9IDExMgordHlw
ZSBfX19rZXJuZWxfc2FfZmFtaWx5X3QgdWludDE2Cit0eXBlIF9fX2tlcm5lbF9zb2NrYWRkcl9z
dG9yYWdlIHN0cnVjdCB7IHNzX2ZhbWlseSB1aW50MTY7IF9fZGF0YSBbMTI1KzFdaW50ODsgR29k
dW1wXzBfYWxpZ24gWzBdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfX19rZXJuZWxfc29ja2FkZHJf
c3RvcmFnZSA9IDEyOAordHlwZSBfc29ja2FkZHJfbmwgc3RydWN0IHsgbmxfZmFtaWx5IHVpbnQx
NjsgbmxfcGFkIHVpbnQxNjsgbmxfcGlkIHVpbnQzMjsgbmxfZ3JvdXBzIHVpbnQzMjsgfQorY29u
c3QgX3NpemVvZl9zb2NrYWRkcl9ubCA9IDEyCit0eXBlIF9ubG1zZ2hkciBzdHJ1Y3QgeyBubG1z
Z19sZW4gdWludDMyOyBubG1zZ190eXBlIHVpbnQxNjsgbmxtc2dfZmxhZ3MgdWludDE2OyBubG1z
Z19zZXEgdWludDMyOyBubG1zZ19waWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25sbXNnaGRy
ID0gMTYKK3R5cGUgX25sbXNnZXJyIHN0cnVjdCB7IGVycm9yIGludDMyOyBtc2cgX25sbXNnaGRy
OyB9Citjb25zdCBfc2l6ZW9mX25sbXNnZXJyID0gMjAKK3R5cGUgX25sX3BrdGluZm8gc3RydWN0
IHsgZ3JvdXAgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25sX3BrdGluZm8gPSA0Cit0eXBlIF9u
bF9tbWFwX3JlcSBzdHJ1Y3QgeyBubV9ibG9ja19zaXplIHVpbnQzMjsgbm1fYmxvY2tfbnIgdWlu
dDMyOyBubV9mcmFtZV9zaXplIHVpbnQzMjsgbm1fZnJhbWVfbnIgdWludDMyOyB9Citjb25zdCBf
c2l6ZW9mX25sX21tYXBfcmVxID0gMTYKK3R5cGUgX25sX21tYXBfaGRyIHN0cnVjdCB7IG5tX3N0
YXR1cyB1aW50MzI7IG5tX2xlbiB1aW50MzI7IG5tX2dyb3VwIHVpbnQzMjsgbm1fcGlkIHVpbnQz
Mjsgbm1fdWlkIHVpbnQzMjsgbm1fZ2lkIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9ubF9tbWFw
X2hkciA9IDI0Cit0eXBlIF9ubGF0dHIgc3RydWN0IHsgbmxhX2xlbiB1aW50MTY7IG5sYV90eXBl
IHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl9ubGF0dHIgPSA0Cit0eXBlIF9ubGFfYml0ZmllbGQz
MiBzdHJ1Y3QgeyB2YWx1ZSB1aW50MzI7IHNlbGVjdG9yIHVpbnQzMjsgfQorY29uc3QgX3NpemVv
Zl9ubGFfYml0ZmllbGQzMiA9IDgKK3R5cGUgX2lmYWRkcm1zZyBzdHJ1Y3QgeyBpZmFfZmFtaWx5
IHVpbnQ4OyBpZmFfcHJlZml4bGVuIHVpbnQ4OyBpZmFfZmxhZ3MgdWludDg7IGlmYV9zY29wZSB1
aW50ODsgaWZhX2luZGV4IHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmFkZHJtc2cgPSA4Cit0
eXBlIF9pZmFfY2FjaGVpbmZvIHN0cnVjdCB7IGlmYV9wcmVmZXJlZCB1aW50MzI7IGlmYV92YWxp
ZCB1aW50MzI7IGNzdGFtcCB1aW50MzI7IHRzdGFtcCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zf
aWZhX2NhY2hlaW5mbyA9IDE2Cit0eXBlIF90dW5fcGkgc3RydWN0IHsgZmxhZ3MgdWludDE2OyBw
cm90byB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfdHVuX3BpID0gNAordHlwZSBfdHVuX2ZpbHRl
ciBzdHJ1Y3QgeyBmbGFncyB1aW50MTY7IGNvdW50IHVpbnQxNjsgYWRkciBbMF1bNSsxXXVpbnQ4
OyB9Citjb25zdCBfc2l6ZW9mX3R1bl9maWx0ZXIgPSA0Cit0eXBlIF9wdHJhY2VfcGVla3NpZ2lu
Zm9fYXJncyBzdHJ1Y3QgeyBvZmYgdWludDY0OyBmbGFncyB1aW50MzI7IG5yIGludDMyOyB9Citj
b25zdCBfc2l6ZW9mX3B0cmFjZV9wZWVrc2lnaW5mb19hcmdzID0gMTYKK3R5cGUgX3NlY2NvbXBf
bWV0YWRhdGEgc3RydWN0IHsgZmlsdGVyX29mZiB1aW50NjQ7IGZsYWdzIHVpbnQ2NDsgfQorY29u
c3QgX3NpemVvZl9zZWNjb21wX21ldGFkYXRhID0gMTYKK3R5cGUgX3B0X3JlZ3Mgc3RydWN0IHsg
cjE1IHVpbnQ2NDsgcjE0IHVpbnQ2NDsgcjEzIHVpbnQ2NDsgcjEyIHVpbnQ2NDsgcmJwIHVpbnQ2
NDsgcmJ4IHVpbnQ2NDsgcjExIHVpbnQ2NDsgcjEwIHVpbnQ2NDsgcjkgdWludDY0OyByOCB1aW50
NjQ7IHJheCB1aW50NjQ7IHJjeCB1aW50NjQ7IHJkeCB1aW50NjQ7IHJzaSB1aW50NjQ7IHJkaSB1
aW50NjQ7IG9yaWdfcmF4IHVpbnQ2NDsgcmlwIHVpbnQ2NDsgY3MgdWludDY0OyBlZmxhZ3MgdWlu
dDY0OyByc3AgdWludDY0OyBzcyB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfcHRfcmVncyA9IDE2
OAordHlwZSBfcnRubF9saW5rX3N0YXRzIHN0cnVjdCB7IHJ4X3BhY2tldHMgdWludDMyOyB0eF9w
YWNrZXRzIHVpbnQzMjsgcnhfYnl0ZXMgdWludDMyOyB0eF9ieXRlcyB1aW50MzI7IHJ4X2Vycm9y
cyB1aW50MzI7IHR4X2Vycm9ycyB1aW50MzI7IHJ4X2Ryb3BwZWQgdWludDMyOyB0eF9kcm9wcGVk
IHVpbnQzMjsgbXVsdGljYXN0IHVpbnQzMjsgY29sbGlzaW9ucyB1aW50MzI7IHJ4X2xlbmd0aF9l
cnJvcnMgdWludDMyOyByeF9vdmVyX2Vycm9ycyB1aW50MzI7IHJ4X2NyY19lcnJvcnMgdWludDMy
OyByeF9mcmFtZV9lcnJvcnMgdWludDMyOyByeF9maWZvX2Vycm9ycyB1aW50MzI7IHJ4X21pc3Nl
ZF9lcnJvcnMgdWludDMyOyB0eF9hYm9ydGVkX2Vycm9ycyB1aW50MzI7IHR4X2NhcnJpZXJfZXJy
b3JzIHVpbnQzMjsgdHhfZmlmb19lcnJvcnMgdWludDMyOyB0eF9oZWFydGJlYXRfZXJyb3JzIHVp
bnQzMjsgdHhfd2luZG93X2Vycm9ycyB1aW50MzI7IHJ4X2NvbXByZXNzZWQgdWludDMyOyB0eF9j
b21wcmVzc2VkIHVpbnQzMjsgcnhfbm9oYW5kbGVyIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9y
dG5sX2xpbmtfc3RhdHMgPSA5NgordHlwZSBfcnRubF9saW5rX3N0YXRzNjQgc3RydWN0IHsgcnhf
cGFja2V0cyB1aW50NjQ7IHR4X3BhY2tldHMgdWludDY0OyByeF9ieXRlcyB1aW50NjQ7IHR4X2J5
dGVzIHVpbnQ2NDsgcnhfZXJyb3JzIHVpbnQ2NDsgdHhfZXJyb3JzIHVpbnQ2NDsgcnhfZHJvcHBl
ZCB1aW50NjQ7IHR4X2Ryb3BwZWQgdWludDY0OyBtdWx0aWNhc3QgdWludDY0OyBjb2xsaXNpb25z
IHVpbnQ2NDsgcnhfbGVuZ3RoX2Vycm9ycyB1aW50NjQ7IHJ4X292ZXJfZXJyb3JzIHVpbnQ2NDsg
cnhfY3JjX2Vycm9ycyB1aW50NjQ7IHJ4X2ZyYW1lX2Vycm9ycyB1aW50NjQ7IHJ4X2ZpZm9fZXJy
b3JzIHVpbnQ2NDsgcnhfbWlzc2VkX2Vycm9ycyB1aW50NjQ7IHR4X2Fib3J0ZWRfZXJyb3JzIHVp
bnQ2NDsgdHhfY2Fycmllcl9lcnJvcnMgdWludDY0OyB0eF9maWZvX2Vycm9ycyB1aW50NjQ7IHR4
X2hlYXJ0YmVhdF9lcnJvcnMgdWludDY0OyB0eF93aW5kb3dfZXJyb3JzIHVpbnQ2NDsgcnhfY29t
cHJlc3NlZCB1aW50NjQ7IHR4X2NvbXByZXNzZWQgdWludDY0OyByeF9ub2hhbmRsZXIgdWludDY0
OyB9Citjb25zdCBfc2l6ZW9mX3J0bmxfbGlua19zdGF0czY0ID0gMTkyCit0eXBlIF9ydG5sX2xp
bmtfaWZtYXAgc3RydWN0IHsgbWVtX3N0YXJ0IHVpbnQ2NDsgbWVtX2VuZCB1aW50NjQ7IGJhc2Vf
YWRkciB1aW50NjQ7IGlycSB1aW50MTY7IGRtYSB1aW50ODsgcG9ydCB1aW50ODsgR29kdW1wXzBf
cGFkIFs0XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfcnRubF9saW5rX2lmbWFwID0gMzIKK3R5cGUg
X2lmbGFfYnJpZGdlX2lkIHN0cnVjdCB7IHByaW8gWzErMV11aW50ODsgYWRkciBbNSsxXXVpbnQ4
OyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfYnJpZGdlX2lkID0gOAordHlwZSBfaWZsYV9jYWNoZWlu
Zm8gc3RydWN0IHsgbWF4X3JlYXNtX2xlbiB1aW50MzI7IHRzdGFtcCB1aW50MzI7IHJlYWNoYWJs
ZV90aW1lIHVpbnQzMjsgcmV0cmFuc190aW1lIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxh
X2NhY2hlaW5mbyA9IDE2Cit0eXBlIF9pZmxhX3ZsYW5fZmxhZ3Mgc3RydWN0IHsgZmxhZ3MgdWlu
dDMyOyBtYXNrIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZsYW5fZmxhZ3MgPSA4Cit0
eXBlIF9pZmxhX3ZsYW5fcW9zX21hcHBpbmcgc3RydWN0IHsgZnJvbSB1aW50MzI7IHRvIHVpbnQz
MjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZsYW5fcW9zX21hcHBpbmcgPSA4Cit0eXBlIF9pZmxh
X3Z4bGFuX3BvcnRfcmFuZ2Ugc3RydWN0IHsgbG93IHVpbnQxNjsgaGlnaCB1aW50MTY7IH0KK2Nv
bnN0IF9zaXplb2ZfaWZsYV92eGxhbl9wb3J0X3JhbmdlID0gNAordHlwZSBfaWZsYV92Zl9tYWMg
c3RydWN0IHsgdmYgdWludDMyOyBtYWMgWzMxKzFddWludDg7IH0KK2NvbnN0IF9zaXplb2ZfaWZs
YV92Zl9tYWMgPSAzNgordHlwZSBfaWZsYV92Zl92bGFuIHN0cnVjdCB7IHZmIHVpbnQzMjsgdmxh
biB1aW50MzI7IHFvcyB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl92bGFuID0gMTIK
K3R5cGUgX2lmbGFfdmZfdmxhbl9pbmZvIHN0cnVjdCB7IHZmIHVpbnQzMjsgdmxhbiB1aW50MzI7
IHFvcyB1aW50MzI7IHZsYW5fcHJvdG8gdWludDE2OyBHb2R1bXBfMF9wYWQgWzJdYnl0ZTsgfQor
Y29uc3QgX3NpemVvZl9pZmxhX3ZmX3ZsYW5faW5mbyA9IDE2Cit0eXBlIF9pZmxhX3ZmX3R4X3Jh
dGUgc3RydWN0IHsgdmYgdWludDMyOyByYXRlIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxh
X3ZmX3R4X3JhdGUgPSA4Cit0eXBlIF9pZmxhX3ZmX3JhdGUgc3RydWN0IHsgdmYgdWludDMyOyBt
aW5fdHhfcmF0ZSB1aW50MzI7IG1heF90eF9yYXRlIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9p
ZmxhX3ZmX3JhdGUgPSAxMgordHlwZSBfaWZsYV92Zl9zcG9vZmNoayBzdHJ1Y3QgeyB2ZiB1aW50
MzI7IHNldHRpbmcgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmbGFfdmZfc3Bvb2ZjaGsgPSA4
Cit0eXBlIF9pZmxhX3ZmX2d1aWQgc3RydWN0IHsgdmYgdWludDMyOyBndWlkIHVpbnQ2NDsgfQor
Y29uc3QgX3NpemVvZl9pZmxhX3ZmX2d1aWQgPSAxNgordHlwZSBfaWZsYV92Zl9saW5rX3N0YXRl
IHN0cnVjdCB7IHZmIHVpbnQzMjsgbGlua19zdGF0ZSB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2Zf
aWZsYV92Zl9saW5rX3N0YXRlID0gOAordHlwZSBfaWZsYV92Zl9yc3NfcXVlcnlfZW4gc3RydWN0
IHsgdmYgdWludDMyOyBzZXR0aW5nIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3Jz
c19xdWVyeV9lbiA9IDgKK3R5cGUgX2lmbGFfdmZfdHJ1c3Qgc3RydWN0IHsgdmYgdWludDMyOyBz
ZXR0aW5nIHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pZmxhX3ZmX3RydXN0ID0gOAordHlwZSBf
aWZsYV9wb3J0X3ZzaSBzdHJ1Y3QgeyB2c2lfbWdyX2lkIHVpbnQ4OyB2c2lfdHlwZV9pZCBbMisx
XXVpbnQ4OyB2c2lfdHlwZV92ZXJzaW9uIHVpbnQ4OyBwYWQgWzIrMV11aW50ODsgfQorY29uc3Qg
X3NpemVvZl9pZmxhX3BvcnRfdnNpID0gOAordHlwZSBfaWZfc3RhdHNfbXNnIHN0cnVjdCB7IGZh
bWlseSB1aW50ODsgcGFkMSB1aW50ODsgcGFkMiB1aW50MTY7IGlmaW5kZXggdWludDMyOyBmaWx0
ZXJfbWFzayB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfaWZfc3RhdHNfbXNnID0gMTIKK3R5cGUg
X2lmbGFfcm1uZXRfZmxhZ3Mgc3RydWN0IHsgZmxhZ3MgdWludDMyOyBtYXNrIHVpbnQzMjsgfQor
Y29uc3QgX3NpemVvZl9pZmxhX3JtbmV0X2ZsYWdzID0gOAordHlwZSBfbmRtc2cgc3RydWN0IHsg
bmRtX2ZhbWlseSB1aW50ODsgbmRtX3BhZDEgdWludDg7IG5kbV9wYWQyIHVpbnQxNjsgbmRtX2lm
aW5kZXggaW50MzI7IG5kbV9zdGF0ZSB1aW50MTY7IG5kbV9mbGFncyB1aW50ODsgbmRtX3R5cGUg
dWludDg7IH0KK2NvbnN0IF9zaXplb2ZfbmRtc2cgPSAxMgordHlwZSBfbmRhX2NhY2hlaW5mbyBz
dHJ1Y3QgeyBuZG1fY29uZmlybWVkIHVpbnQzMjsgbmRtX3VzZWQgdWludDMyOyBuZG1fdXBkYXRl
ZCB1aW50MzI7IG5kbV9yZWZjbnQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25kYV9jYWNoZWlu
Zm8gPSAxNgordHlwZSBfbmR0X3N0YXRzIHN0cnVjdCB7IG5kdHNfYWxsb2NzIHVpbnQ2NDsgbmR0
c19kZXN0cm95cyB1aW50NjQ7IG5kdHNfaGFzaF9ncm93cyB1aW50NjQ7IG5kdHNfcmVzX2ZhaWxl
ZCB1aW50NjQ7IG5kdHNfbG9va3VwcyB1aW50NjQ7IG5kdHNfaGl0cyB1aW50NjQ7IG5kdHNfcmN2
X3Byb2Jlc19tY2FzdCB1aW50NjQ7IG5kdHNfcmN2X3Byb2Jlc191Y2FzdCB1aW50NjQ7IG5kdHNf
cGVyaW9kaWNfZ2NfcnVucyB1aW50NjQ7IG5kdHNfZm9yY2VkX2djX3J1bnMgdWludDY0OyBuZHRz
X3RhYmxlX2Z1bGxzIHVpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9uZHRfc3RhdHMgPSA4OAordHlw
ZSBfbmR0bXNnIHN0cnVjdCB7IG5kdG1fZmFtaWx5IHVpbnQ4OyBuZHRtX3BhZDEgdWludDg7IG5k
dG1fcGFkMiB1aW50MTY7IH0KK2NvbnN0IF9zaXplb2ZfbmR0bXNnID0gNAordHlwZSBfbmR0X2Nv
bmZpZyBzdHJ1Y3QgeyBuZHRjX2tleV9sZW4gdWludDE2OyBuZHRjX2VudHJ5X3NpemUgdWludDE2
OyBuZHRjX2VudHJpZXMgdWludDMyOyBuZHRjX2xhc3RfZmx1c2ggdWludDMyOyBuZHRjX2xhc3Rf
cmFuZCB1aW50MzI7IG5kdGNfaGFzaF9ybmQgdWludDMyOyBuZHRjX2hhc2hfbWFzayB1aW50MzI7
IG5kdGNfaGFzaF9jaGFpbl9nYyB1aW50MzI7IG5kdGNfcHJveHlfcWxlbiB1aW50MzI7IH0KK2Nv
bnN0IF9zaXplb2ZfbmR0X2NvbmZpZyA9IDMyCit0eXBlIF9ydGF0dHIgc3RydWN0IHsgcnRhX2xl
biB1aW50MTY7IHJ0YV90eXBlIHVpbnQxNjsgfQorY29uc3QgX3NpemVvZl9ydGF0dHIgPSA0Cit0
eXBlIF9ydG1zZyBzdHJ1Y3QgeyBydG1fZmFtaWx5IHVpbnQ4OyBydG1fZHN0X2xlbiB1aW50ODsg
cnRtX3NyY19sZW4gdWludDg7IHJ0bV90b3MgdWludDg7IHJ0bV90YWJsZSB1aW50ODsgcnRtX3By
b3RvY29sIHVpbnQ4OyBydG1fc2NvcGUgdWludDg7IHJ0bV90eXBlIHVpbnQ4OyBydG1fZmxhZ3Mg
dWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3J0bXNnID0gMTIKK3R5cGUgX3J0bmV4dGhvcCBzdHJ1
Y3QgeyBydG5oX2xlbiB1aW50MTY7IHJ0bmhfZmxhZ3MgdWludDg7IHJ0bmhfaG9wcyB1aW50ODsg
cnRuaF9pZmluZGV4IGludDMyOyB9Citjb25zdCBfc2l6ZW9mX3J0bmV4dGhvcCA9IDgKK3R5cGUg
X3J0dmlhIHN0cnVjdCB7IHJ0dmlhX2ZhbWlseSB1aW50MTY7IHJ0dmlhX2FkZHIgWzBddWludDg7
IH0KK2NvbnN0IF9zaXplb2ZfcnR2aWEgPSAyCit0eXBlIF9ydGFfY2FjaGVpbmZvIHN0cnVjdCB7
IHJ0YV9jbG50cmVmIHVpbnQzMjsgcnRhX2xhc3R1c2UgdWludDMyOyBydGFfZXhwaXJlcyBpbnQz
MjsgcnRhX2Vycm9yIHVpbnQzMjsgcnRhX3VzZWQgdWludDMyOyBydGFfaWQgdWludDMyOyBydGFf
dHMgdWludDMyOyBydGFfdHNhZ2UgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3J0YV9jYWNoZWlu
Zm8gPSAzMgordHlwZSBfcnRhX3Nlc3Npb24gc3RydWN0IHsgcHJvdG8gdWludDg7IHBhZDEgdWlu
dDg7IHBhZDIgdWludDE2OyB1IHN0cnVjdCB7IHBvcnRzIHN0cnVjdCB7IHNwb3J0IHVpbnQxNjsg
ZHBvcnQgdWludDE2OyB9OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQzMjsgfTsgfQorY29uc3QgX3Np
emVvZl9ydGFfc2Vzc2lvbiA9IDgKK3R5cGUgX3J0YV9tZmNfc3RhdHMgc3RydWN0IHsgbWZjc19w
YWNrZXRzIHVpbnQ2NDsgbWZjc19ieXRlcyB1aW50NjQ7IG1mY3Nfd3JvbmdfaWYgdWludDY0OyB9
Citjb25zdCBfc2l6ZW9mX3J0YV9tZmNfc3RhdHMgPSAyNAordHlwZSBfcnRnZW5tc2cgc3RydWN0
IHsgcnRnZW5fZmFtaWx5IHVpbnQ4OyB9Citjb25zdCBfc2l6ZW9mX3J0Z2VubXNnID0gMQordHlw
ZSBfaWZpbmZvbXNnIHN0cnVjdCB7IGlmaV9mYW1pbHkgdWludDg7IF9faWZpX3BhZCB1aW50ODsg
aWZpX3R5cGUgdWludDE2OyBpZmlfaW5kZXggaW50MzI7IGlmaV9mbGFncyB1aW50MzI7IGlmaV9j
aGFuZ2UgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2lmaW5mb21zZyA9IDE2Cit0eXBlIF9wcmVm
aXhtc2cgc3RydWN0IHsgcHJlZml4X2ZhbWlseSB1aW50ODsgcHJlZml4X3BhZDEgdWludDg7IHBy
ZWZpeF9wYWQyIHVpbnQxNjsgcHJlZml4X2lmaW5kZXggaW50MzI7IHByZWZpeF90eXBlIHVpbnQ4
OyBwcmVmaXhfbGVuIHVpbnQ4OyBwcmVmaXhfZmxhZ3MgdWludDg7IHByZWZpeF9wYWQzIHVpbnQ4
OyB9Citjb25zdCBfc2l6ZW9mX3ByZWZpeG1zZyA9IDEyCit0eXBlIF9wcmVmaXhfY2FjaGVpbmZv
IHN0cnVjdCB7IHByZWZlcnJlZF90aW1lIHVpbnQzMjsgdmFsaWRfdGltZSB1aW50MzI7IH0KK2Nv
bnN0IF9zaXplb2ZfcHJlZml4X2NhY2hlaW5mbyA9IDgKK3R5cGUgX3RjbXNnIHN0cnVjdCB7IHRj
bV9mYW1pbHkgdWludDg7IHRjbV9fcGFkMSB1aW50ODsgdGNtX19wYWQyIHVpbnQxNjsgdGNtX2lm
aW5kZXggaW50MzI7IHRjbV9oYW5kbGUgdWludDMyOyB0Y21fcGFyZW50IHVpbnQzMjsgdGNtX2lu
Zm8gdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX3RjbXNnID0gMjAKK3R5cGUgX25kdXNlcm9wdG1z
ZyBzdHJ1Y3QgeyBuZHVzZXJvcHRfZmFtaWx5IHVpbnQ4OyBuZHVzZXJvcHRfcGFkMSB1aW50ODsg
bmR1c2Vyb3B0X29wdHNfbGVuIHVpbnQxNjsgbmR1c2Vyb3B0X2lmaW5kZXggaW50MzI7IG5kdXNl
cm9wdF9pY21wX3R5cGUgdWludDg7IG5kdXNlcm9wdF9pY21wX2NvZGUgdWludDg7IG5kdXNlcm9w
dF9wYWQyIHVpbnQxNjsgbmR1c2Vyb3B0X3BhZDMgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX25k
dXNlcm9wdG1zZyA9IDE2Cit0eXBlIF90Y2Ftc2cgc3RydWN0IHsgdGNhX2ZhbWlseSB1aW50ODsg
dGNhX19wYWQxIHVpbnQ4OyB0Y2FfX3BhZDIgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX3RjYW1z
ZyA9IDQKK3R5cGUgX2lmX25hbWVpbmRleCBzdHJ1Y3QgeyBpZl9pbmRleCB1aW50MzI7IGlmX25h
bWUgKmludDg7IH0KK2NvbnN0IF9zaXplb2ZfaWZfbmFtZWluZGV4ID0gMTYKK3R5cGUgX2lmYWRk
ciBzdHJ1Y3QgeyBpZmFfYWRkciBfc29ja2FkZHI7IGlmYV9pZnUgc3RydWN0IHsgaWZ1X2Jyb2Fk
YWRkciBfc29ja2FkZHI7IH07IGlmYV9pZnAgKl9pZmFjZTsgaWZhX25leHQgKl9pZmFkZHI7IH0K
K2NvbnN0IF9zaXplb2ZfaWZhZGRyID0gNDgKK3R5cGUgX2lmbWFwIHN0cnVjdCB7IG1lbV9zdGFy
dCB1aW50NjQ7IG1lbV9lbmQgdWludDY0OyBiYXNlX2FkZHIgdWludDE2OyBpcnEgdWludDg7IGRt
YSB1aW50ODsgcG9ydCB1aW50ODsgR29kdW1wXzBfcGFkIFszXWJ5dGU7IH0KK2NvbnN0IF9zaXpl
b2ZfaWZtYXAgPSAyNAordHlwZSBfaWZyZXEgc3RydWN0IHsgaWZyX2lmcm4gc3RydWN0IHsgaWZy
bl9uYW1lIFsxNSsxXWludDg7IH07IGlmcl9pZnJ1IHN0cnVjdCB7IGlmcnVfYWRkciBfc29ja2Fk
ZHI7IEdvZHVtcF8wX3BhZCBbOF1ieXRlOyBHb2R1bXBfMV9hbGlnbiBbMF1pbnQ2NDsgfTsgfQor
Y29uc3QgX3NpemVvZl9pZnJlcSA9IDQwCit0eXBlIF9pZmNvbmYgc3RydWN0IHsgaWZjX2xlbiBp
bnQzMjsgaWZjX2lmY3Ugc3RydWN0IHsgaWZjdV9idWYgX19fY2FkZHJfdDsgfTsgfQorY29uc3Qg
X3NpemVvZl9pZmNvbmYgPSAxNgordHlwZSBfcnRlbnRyeSBzdHJ1Y3QgeyBydF9wYWQxIHVpbnQ2
NDsgcnRfZHN0IF9zb2NrYWRkcjsgcnRfZ2F0ZXdheSBfc29ja2FkZHI7IHJ0X2dlbm1hc2sgX3Nv
Y2thZGRyOyBydF9mbGFncyB1aW50MTY7IHJ0X3BhZDIgaW50MTY7IHJ0X3BhZDMgdWludDY0OyBy
dF90b3MgdWludDg7IHJ0X2NsYXNzIHVpbnQ4OyBydF9wYWQ0IFsyKzFdaW50MTY7IHJ0X21ldHJp
YyBpbnQxNjsgcnRfZGV2ICppbnQ4OyBydF9tdHUgdWludDY0OyBydF93aW5kb3cgdWludDY0OyBy
dF9pcnR0IHVpbnQxNjsgR29kdW1wXzBfcGFkIFs2XWJ5dGU7IH0KK2NvbnN0IF9zaXplb2ZfcnRl
bnRyeSA9IDEyMAorY29uc3QgX3NpemVvZl9pbjZfcnRtc2cgPSA4MAordHlwZSBfc29ja2FkZHJf
bGwgc3RydWN0IHsgc2xsX2ZhbWlseSB1aW50MTY7IHNsbF9wcm90b2NvbCB1aW50MTY7IHNsbF9p
ZmluZGV4IGludDMyOyBzbGxfaGF0eXBlIHVpbnQxNjsgc2xsX3BrdHR5cGUgdWludDg7IHNsbF9o
YWxlbiB1aW50ODsgc2xsX2FkZHIgWzcrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9zb2NrYWRk
cl9sbCA9IDIwCit0eXBlIF9wYWNrZXRfbXJlcSBzdHJ1Y3QgeyBtcl9pZmluZGV4IGludDMyOyBt
cl90eXBlIHVpbnQxNjsgbXJfYWxlbiB1aW50MTY7IG1yX2FkZHJlc3MgWzcrMV11aW50ODsgfQor
Y29uc3QgX3NpemVvZl9wYWNrZXRfbXJlcSA9IDE2Cit0eXBlIF9zdGF0ZnMgc3RydWN0IHsgZl90
eXBlIGludDY0OyBmX2JzaXplIGludDY0OyBmX2Jsb2NrcyB1aW50NjQ7IGZfYmZyZWUgdWludDY0
OyBmX2JhdmFpbCB1aW50NjQ7IGZfZmlsZXMgdWludDY0OyBmX2ZmcmVlIHVpbnQ2NDsgZl9mc2lk
IF9fX2ZzaWRfdDsgZl9uYW1lbGVuIGludDY0OyBmX2Zyc2l6ZSBpbnQ2NDsgZl9mbGFncyBpbnQ2
NDsgZl9zcGFyZSBbMysxXWludDY0OyB9Citjb25zdCBfc2l6ZW9mX3N0YXRmcyA9IDEyMAordHlw
ZSBfc3RhdGZzNjQgc3RydWN0IHsgZl90eXBlIGludDY0OyBmX2JzaXplIGludDY0OyBmX2Jsb2Nr
cyB1aW50NjQ7IGZfYmZyZWUgdWludDY0OyBmX2JhdmFpbCB1aW50NjQ7IGZfZmlsZXMgdWludDY0
OyBmX2ZmcmVlIHVpbnQ2NDsgZl9mc2lkIF9fX2ZzaWRfdDsgZl9uYW1lbGVuIGludDY0OyBmX2Zy
c2l6ZSBpbnQ2NDsgZl9mbGFncyBpbnQ2NDsgZl9zcGFyZSBbMysxXWludDY0OyB9Citjb25zdCBf
c2l6ZW9mX3N0YXRmczY0ID0gMTIwCit0eXBlIF9udHB0aW1ldmFsIHN0cnVjdCB7IHRpbWUgVGlt
ZXZhbDsgbWF4ZXJyb3IgaW50NjQ7IGVzdGVycm9yIGludDY0OyB0YWkgaW50NjQ7IF9fZ2xpYmNf
cmVzZXJ2ZWQxIGludDY0OyBfX2dsaWJjX3Jlc2VydmVkMiBpbnQ2NDsgX19nbGliY19yZXNlcnZl
ZDMgaW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQ0IGludDY0OyB9Citjb25zdCBfc2l6ZW9mX250cHRp
bWV2YWwgPSA3MgordHlwZSBfdXRpbWJ1ZiBzdHJ1Y3QgeyBhY3RpbWUgaW50NjQ7IG1vZHRpbWUg
aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfdXRpbWJ1ZiA9IDE2Cit0eXBlIF9maWxlX2Nsb25lX3Jh
bmdlIHN0cnVjdCB7IHNyY19mZCBpbnQ2NDsgc3JjX29mZnNldCB1aW50NjQ7IHNyY19sZW5ndGgg
dWludDY0OyBkZXN0X29mZnNldCB1aW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZmlsZV9jbG9uZV9y
YW5nZSA9IDMyCit0eXBlIF9mc3RyaW1fcmFuZ2Ugc3RydWN0IHsgc3RhcnQgdWludDY0OyBsZW4g
dWludDY0OyBtaW5sZW4gdWludDY0OyB9Citjb25zdCBfc2l6ZW9mX2ZzdHJpbV9yYW5nZSA9IDI0
Cit0eXBlIF9maWxlX2RlZHVwZV9yYW5nZV9pbmZvIHN0cnVjdCB7IGRlc3RfZmQgaW50NjQ7IGRl
c3Rfb2Zmc2V0IHVpbnQ2NDsgYnl0ZXNfZGVkdXBlZCB1aW50NjQ7IHN0YXR1cyBpbnQzMjsgcmVz
ZXJ2ZWQgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2ZpbGVfZGVkdXBlX3JhbmdlX2luZm8gPSAz
MgordHlwZSBfZmlsZV9kZWR1cGVfcmFuZ2Ugc3RydWN0IHsgc3JjX29mZnNldCB1aW50NjQ7IHNy
Y19sZW5ndGggdWludDY0OyBkZXN0X2NvdW50IHVpbnQxNjsgcmVzZXJ2ZWQxIHVpbnQxNjsgcmVz
ZXJ2ZWQyIHVpbnQzMjsgaW5mbyBbMF1fZmlsZV9kZWR1cGVfcmFuZ2VfaW5mbzsgfQorY29uc3Qg
X3NpemVvZl9maWxlX2RlZHVwZV9yYW5nZSA9IDI0Cit0eXBlIF9maWxlc19zdGF0X3N0cnVjdCBz
dHJ1Y3QgeyBucl9maWxlcyB1aW50NjQ7IG5yX2ZyZWVfZmlsZXMgdWludDY0OyBtYXhfZmlsZXMg
dWludDY0OyB9Citjb25zdCBfc2l6ZW9mX2ZpbGVzX3N0YXRfc3RydWN0ID0gMjQKK3R5cGUgX2lu
b2Rlc19zdGF0X3Qgc3RydWN0IHsgbnJfaW5vZGVzIGludDY0OyBucl91bnVzZWQgaW50NjQ7IGR1
bW15IFs0KzFdaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfaW5vZGVzX3N0YXRfdCA9IDU2Cit0eXBl
IF9mc3hhdHRyIHN0cnVjdCB7IGZzeF94ZmxhZ3MgdWludDMyOyBmc3hfZXh0c2l6ZSB1aW50MzI7
IGZzeF9uZXh0ZW50cyB1aW50MzI7IGZzeF9wcm9qaWQgdWludDMyOyBmc3hfY293ZXh0c2l6ZSB1
aW50MzI7IGZzeF9wYWQgWzcrMV11aW50ODsgfQorY29uc3QgX3NpemVvZl9mc3hhdHRyID0gMjgK
K3R5cGUgX2ZzY3J5cHRfcG9saWN5IHN0cnVjdCB7IHZlcnNpb24gdWludDg7IGNvbnRlbnRzX2Vu
Y3J5cHRpb25fbW9kZSB1aW50ODsgZmlsZW5hbWVzX2VuY3J5cHRpb25fbW9kZSB1aW50ODsgZmxh
Z3MgdWludDg7IG1hc3Rlcl9rZXlfZGVzY3JpcHRvciBbNysxXXVpbnQ4OyB9Citjb25zdCBfc2l6
ZW9mX2ZzY3J5cHRfcG9saWN5ID0gMTIKK3R5cGUgX2ZzY3J5cHRfa2V5IHN0cnVjdCB7IG1vZGUg
dWludDMyOyByYXcgWzYzKzFddWludDg7IHNpemUgdWludDMyOyB9Citjb25zdCBfc2l6ZW9mX2Zz
Y3J5cHRfa2V5ID0gNzIKK3R5cGUgX19fa2VybmVsX3J3Zl90IGludDMyCit0eXBlIF9pbm90aWZ5
X2V2ZW50IHN0cnVjdCB7IHdkIGludDMyOyBtYXNrIHVpbnQzMjsgY29va2llIHVpbnQzMjsgbGVu
IHVpbnQzMjsgbmFtZSBbMF1pbnQ4OyB9Citjb25zdCBfc2l6ZW9mX2lub3RpZnlfZXZlbnQgPSAx
NgordHlwZSBfX19nd2NoYXJfdCBpbnQzMgordHlwZSBfaW1heGRpdl90IHN0cnVjdCB7IHF1b3Qg
aW50NjQ7IHJlbSBpbnQ2NDsgfQorY29uc3QgX3NpemVvZl9pbWF4ZGl2X3QgPSAxNgordHlwZSBf
aWNtcDZfZmlsdGVyIHN0cnVjdCB7IGljbXA2X2ZpbHQgWzcrMV11aW50MzI7IH0KK2NvbnN0IF9z
aXplb2ZfaWNtcDZfZmlsdGVyID0gMzIKK3R5cGUgX2ljbXA2X2hkciBzdHJ1Y3QgeyBpY21wNl90
eXBlIHVpbnQ4OyBpY21wNl9jb2RlIHVpbnQ4OyBpY21wNl9ja3N1bSB1aW50MTY7IGljbXA2X2Rh
dGF1biBzdHJ1Y3QgeyBpY21wNl91bl9kYXRhMzIgWzArMV11aW50MzI7IH07IH0KK2NvbnN0IF9z
aXplb2ZfaWNtcDZfaGRyID0gOAordHlwZSBfbmRfcm91dGVyX3NvbGljaXQgc3RydWN0IHsgbmRf
cnNfaGRyIF9pY21wNl9oZHI7IH0KK2NvbnN0IF9zaXplb2ZfbmRfcm91dGVyX3NvbGljaXQgPSA4
Cit0eXBlIF9uZF9yb3V0ZXJfYWR2ZXJ0IHN0cnVjdCB7IG5kX3JhX2hkciBfaWNtcDZfaGRyOyBu
ZF9yYV9yZWFjaGFibGUgdWludDMyOyBuZF9yYV9yZXRyYW5zbWl0IHVpbnQzMjsgfQorY29uc3Qg
X3NpemVvZl9uZF9yb3V0ZXJfYWR2ZXJ0ID0gMTYKK2NvbnN0IF9zaXplb2ZfbmRfbmVpZ2hib3Jf
c29saWNpdCA9IDI0Citjb25zdCBfc2l6ZW9mX25kX25laWdoYm9yX2FkdmVydCA9IDI0Citjb25z
dCBfc2l6ZW9mX25kX3JlZGlyZWN0ID0gNDAKK3R5cGUgX25kX29wdF9oZHIgc3RydWN0IHsgbmRf
b3B0X3R5cGUgdWludDg7IG5kX29wdF9sZW4gdWludDg7IH0KK2NvbnN0IF9zaXplb2ZfbmRfb3B0
X2hkciA9IDIKK2NvbnN0IF9zaXplb2ZfbmRfb3B0X3ByZWZpeF9pbmZvID0gMzIKK3R5cGUgX25k
X29wdF9yZF9oZHIgc3RydWN0IHsgbmRfb3B0X3JoX3R5cGUgdWludDg7IG5kX29wdF9yaF9sZW4g
dWludDg7IG5kX29wdF9yaF9yZXNlcnZlZDEgdWludDE2OyBuZF9vcHRfcmhfcmVzZXJ2ZWQyIHVp
bnQzMjsgfQorY29uc3QgX3NpemVvZl9uZF9vcHRfcmRfaGRyID0gOAordHlwZSBfbmRfb3B0X210
dSBzdHJ1Y3QgeyBuZF9vcHRfbXR1X3R5cGUgdWludDg7IG5kX29wdF9tdHVfbGVuIHVpbnQ4OyBu
ZF9vcHRfbXR1X3Jlc2VydmVkIHVpbnQxNjsgbmRfb3B0X210dV9tdHUgdWludDMyOyB9Citjb25z
dCBfc2l6ZW9mX25kX29wdF9tdHUgPSA4Citjb25zdCBfc2l6ZW9mX21sZF9oZHIgPSAyNAordHlw
ZSBfaWNtcDZfcm91dGVyX3JlbnVtIHN0cnVjdCB7IHJyX2hkciBfaWNtcDZfaGRyOyBycl9zZWdu
dW0gdWludDg7IHJyX2ZsYWdzIHVpbnQ4OyBycl9tYXhkZWxheSB1aW50MTY7IHJyX3Jlc2VydmVk
IHVpbnQzMjsgfQorY29uc3QgX3NpemVvZl9pY21wNl9yb3V0ZXJfcmVudW0gPSAxNgorY29uc3Qg
X3NpemVvZl9ycl9wY29fbWF0Y2ggPSAyNAorY29uc3QgX3NpemVvZl9ycl9wY29fdXNlID0gMzIK
K2NvbnN0IF9zaXplb2ZfcnJfcmVzdWx0ID0gMjQKK3R5cGUgX25kX29wdF9hZHZfaW50ZXJ2YWwg
c3RydWN0IHsgbmRfb3B0X2Fkdl9pbnRlcnZhbF90eXBlIHVpbnQ4OyBuZF9vcHRfYWR2X2ludGVy
dmFsX2xlbiB1aW50ODsgbmRfb3B0X2Fkdl9pbnRlcnZhbF9yZXNlcnZlZCB1aW50MTY7IG5kX29w
dF9hZHZfaW50ZXJ2YWxfaXZhbCB1aW50MzI7IH0KK2NvbnN0IF9zaXplb2ZfbmRfb3B0X2Fkdl9p
bnRlcnZhbCA9IDgKK3R5cGUgX25kX29wdF9ob21lX2FnZW50X2luZm8gc3RydWN0IHsgbmRfb3B0
X2hvbWVfYWdlbnRfaW5mb190eXBlIHVpbnQ4OyBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX2xlbiB1
aW50ODsgbmRfb3B0X2hvbWVfYWdlbnRfaW5mb19yZXNlcnZlZCB1aW50MTY7IG5kX29wdF9ob21l
X2FnZW50X2luZm9fcHJlZmVyZW5jZSB1aW50MTY7IG5kX29wdF9ob21lX2FnZW50X2luZm9fbGlm
ZXRpbWUgdWludDE2OyB9Citjb25zdCBfc2l6ZW9mX25kX29wdF9ob21lX2FnZW50X2luZm8gPSA4
Cit0eXBlIF9zY2hlZF9wYXJhbSBzdHJ1Y3QgeyBzY2hlZF9wcmlvcml0eSBpbnQzMjsgfQorY29u
c3QgX3NpemVvZl9zY2hlZF9wYXJhbSA9IDQKK3R5cGUgX19fY3B1X21hc2sgdWludDY0Cit0eXBl
IF9jcHVfc2V0X3Qgc3RydWN0IHsgX19iaXRzIFsxNSsxXXVpbnQ2NDsgfQorY29uc3QgX3NpemVv
Zl9jcHVfc2V0X3QgPSAxMjgKK3R5cGUgX3NlbV90IHN0cnVjdCB7IF9fc2l6ZSBbMzErMV1pbnQ4
OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfQorY29uc3QgX3NpemVvZl9zZW1fdCA9IDMyCit0
eXBlIF9mZmlfYXJnIHVpbnQ2NAordHlwZSBfZmZpX3NhcmcgaW50NjQKK3R5cGUgX2ZmaV9hYmkg
dWludDMyCit0eXBlIF9fZmZpX3R5cGUgc3RydWN0IHsgc2l6ZSB1aW50NjQ7IGFsaWdubWVudCB1
aW50MTY7IF90eXBlIHVpbnQxNjsgZWxlbWVudHMgKipfX2ZmaV90eXBlOyB9Citjb25zdCBfc2l6
ZW9mX19mZmlfdHlwZSA9IDI0Cit0eXBlIF9mZmlfdHlwZSBzdHJ1Y3QgeyBzaXplIHVpbnQ2NDsg
YWxpZ25tZW50IHVpbnQxNjsgX3R5cGUgdWludDE2OyBlbGVtZW50cyAqKl9fZmZpX3R5cGU7IH0K
K2NvbnN0IF9zaXplb2ZfZmZpX3R5cGUgPSAyNAordmFyIF9mZmlfdHlwZV92b2lkIF9mZmlfdHlw
ZQordmFyIF9mZmlfdHlwZV91aW50OCBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfc2ludDggX2Zm
aV90eXBlCit2YXIgX2ZmaV90eXBlX3VpbnQxNiBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfc2lu
dDE2IF9mZmlfdHlwZQordmFyIF9mZmlfdHlwZV91aW50MzIgX2ZmaV90eXBlCit2YXIgX2ZmaV90
eXBlX3NpbnQzMiBfZmZpX3R5cGUKK3ZhciBfZmZpX3R5cGVfdWludDY0IF9mZmlfdHlwZQordmFy
IF9mZmlfdHlwZV9zaW50NjQgX2ZmaV90eXBlCit2YXIgX2ZmaV90eXBlX2Zsb2F0IF9mZmlfdHlw
ZQordmFyIF9mZmlfdHlwZV9kb3VibGUgX2ZmaV90eXBlCit2YXIgX2ZmaV90eXBlX3BvaW50ZXIg
X2ZmaV90eXBlCit2YXIgX2ZmaV90eXBlX2xvbmdkb3VibGUgX2ZmaV90eXBlCit2YXIgX2ZmaV90
eXBlX2NvbXBsZXhfZmxvYXQgX2ZmaV90eXBlCit2YXIgX2ZmaV90eXBlX2NvbXBsZXhfZG91Ymxl
IF9mZmlfdHlwZQordmFyIF9mZmlfdHlwZV9jb21wbGV4X2xvbmdkb3VibGUgX2ZmaV90eXBlCit0
eXBlIF9mZmlfc3RhdHVzIHVpbnQzMgordHlwZSBfRkZJX1RZUEUgdWludDMyCit0eXBlIF9mZmlf
Y2lmIHN0cnVjdCB7IGFiaSB1aW50MzI7IG5hcmdzIHVpbnQzMjsgYXJnX3R5cGVzICoqX2ZmaV90
eXBlOyBydHlwZSAqX2ZmaV90eXBlOyBieXRlcyB1aW50MzI7IGZsYWdzIHVpbnQzMjsgfQorY29u
c3QgX3NpemVvZl9mZmlfY2lmID0gMzIKK3R5cGUgX2ZmaV9yYXcgc3RydWN0IHsgc2ludCBpbnQ2
NDsgfQorY29uc3QgX3NpemVvZl9mZmlfcmF3ID0gOAordHlwZSBfZmZpX2phdmFfcmF3IHN0cnVj
dCB7IHNpbnQgaW50NjQ7IH0KK2NvbnN0IF9zaXplb2ZfZmZpX2phdmFfcmF3ID0gOAordHlwZSBf
ZmZpX2Nsb3N1cmUgc3RydWN0IHsgdHJhbXAgWzIzKzFdaW50ODsgY2lmICpfZmZpX2NpZjsgZnVu
IGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKipieXRlLCAqYnl0ZSk7IHVzZXJfZGF0YSAqYnl0ZTsg
fQorY29uc3QgX3NpemVvZl9mZmlfY2xvc3VyZSA9IDQ4Cit0eXBlIF9mZmlfcmF3X2Nsb3N1cmUg
c3RydWN0IHsgdHJhbXAgWzIzKzFdaW50ODsgY2lmICpfZmZpX2NpZjsgdHJhbnNsYXRlX2FyZ3Mg
ZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqKmJ5dGUsICpieXRlKTsgdGhpc19jbG9zdXJlICpieXRl
OyBmdW4gZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqX2ZmaV9yYXcsICpieXRlKTsgdXNlcl9kYXRh
ICpieXRlOyB9Citjb25zdCBfc2l6ZW9mX2ZmaV9yYXdfY2xvc3VyZSA9IDY0Cit0eXBlIF9mZmlf
amF2YV9yYXdfY2xvc3VyZSBzdHJ1Y3QgeyB0cmFtcCBbMjMrMV1pbnQ4OyBjaWYgKl9mZmlfY2lm
OyB0cmFuc2xhdGVfYXJncyBmdW5jKCpfZmZpX2NpZiwgKmJ5dGUsICoqYnl0ZSwgKmJ5dGUpOyB0
aGlzX2Nsb3N1cmUgKmJ5dGU7IGZ1biBmdW5jKCpfZmZpX2NpZiwgKmJ5dGUsICpfZmZpX2phdmFf
cmF3LCAqYnl0ZSk7IHVzZXJfZGF0YSAqYnl0ZTsgfQorY29uc3QgX3NpemVvZl9mZmlfamF2YV9y
YXdfY2xvc3VyZSA9IDY0Citjb25zdCBfX1BPU0lYX0FEVklTT1JZX0lORk8gPSAyMDA4MDkKK2Nv
bnN0IF9XTk9IQU5HID0gMQorY29uc3QgX19fTERCTF9NSU5fMTBfRVhQX18gPSAoLTQ5MzEpCitj
b25zdCBfSUZMQV9CUlBPUlRfTkVJR0hfU1VQUFJFU1MgPSAzMgorY29uc3QgX19QQ19SRUNfTUlO
X1hGRVJfU0laRSA9IDE2Citjb25zdCBfX0JJVFNfUFRIUkVBRFRZUEVTX0NPTU1PTl9IID0gMQor
Y29uc3QgX19TQ19FWFBSX05FU1RfTUFYID0gNDIKK2NvbnN0IF9JTlRfTEVBU1QxNl9NSU4gPSAo
LTMyNzY3LTEpCitjb25zdCBfU1lTX3VzZWxpYiA9IF9fX05SX3VzZWxpYgorY29uc3QgX0ZGSV9C
QURfVFlQRURFRiA9IDEKK2NvbnN0IF9JUFBST1RPX1RQID0gMjkKK2NvbnN0IF9UQ1BfQ09PS0lF
X1RSQU5TQUNUSU9OUyA9IDE1Citjb25zdCBfX19GTFQzMlhfRElHX18gPSAxNQorY29uc3QgX0FJ
T19QUklPX0RFTFRBX01BWCA9IDIwCitjb25zdCBfTkRBX1ZOSSA9IDcKK2NvbnN0IF9fX0lMUDMy
X09GRjMyX0NGTEFHUyA9ICItbTMyIgorY29uc3QgX19fRkxUNjRfTUlOXzEwX0VYUF9fID0gKC0z
MDcpCitjb25zdCBfX1BDX1BBVEhfTUFYID0gNAorY29uc3QgX0lQUFJPVE9fUk9VVElORyA9IDQz
Citjb25zdCBfSU5UX0ZBU1Q4X01JTiA9ICgtMTI4KQorY29uc3QgX0IxMTUyMDAgPSAwMDEwMDAy
Citjb25zdCBfX0JJVFNfVUlOVE5fSURFTlRJVFlfSCA9IDEKK2NvbnN0IF9fX0ZMVDY0X01BTlRf
RElHX18gPSA1MworY29uc3QgX19fQ0hBUl9CSVRfXyA9IDgKK2NvbnN0IF9fX05SX2ZzeW5jID0g
NzQKK2NvbnN0IF9fU0NfTEVWRUw0X0NBQ0hFX1NJWkUgPSAxOTcKK2NvbnN0IF9QVFJBQ0VfRVZF
TlRfRVhFQyA9IDQKK2NvbnN0IF9QUl9TVkVfVkxfSU5IRVJJVCA9ICgxIDw8IDE3KQorY29uc3Qg
X0lQUE9SVF9TVVBEVVAgPSA5NQorY29uc3QgX1NZU19mdHJ1bmNhdGUgPSBfX19OUl9mdHJ1bmNh
dGUKK2NvbnN0IF9TQ0hBUl9XSURUSCA9IDgKK2NvbnN0IF9UQ0FfU1RBQiA9IDgKK2NvbnN0IF9J
RkxBX1ZGX0xJTktfU1RBVEUgPSA1Citjb25zdCBfUlROTEdSUF9OU0lEID0gMjgKK2NvbnN0IF9f
X05SX21yZW1hcCA9IDI1Citjb25zdCBfX19OUl9sc2V0eGF0dHIgPSAxODkKK2NvbnN0IF9JUFZM
QU5fTU9ERV9MMyA9IDEKK2NvbnN0IF9JRkxBX0JPTkRfVVNFX0NBUlJJRVIgPSA2Citjb25zdCBf
SUZMQV9PRkZMT0FEX1hTVEFUU19VTlNQRUMgPSAwCitjb25zdCBfSU5UX0xFQVNUMzJfTUlOID0g
KC0yMTQ3NDgzNjQ3LTEpCitjb25zdCBfQVRGX0NPTSA9IDB4MDIKK2NvbnN0IF9NQVBfRklMRSA9
IDAKK2NvbnN0IF9fX0RFQzY0X01JTl9fID0gMUUtMzgzCitjb25zdCBfSUZMQV9CUl9UT1BPTE9H
WV9DSEFOR0VfVElNRVIgPSAxOAorY29uc3QgX1NJR0VWX05PTkUgPSAxCitjb25zdCBfTkRUUEFf
TUNBU1RfUFJPQkVTID0gMTEKK2NvbnN0IF9TWVNfbWtub2RhdCA9IF9fX05SX21rbm9kYXQKK2Nv
bnN0IF9fUE9TSVhfQkFSUklFUlMgPSAyMDA4MDkKK2NvbnN0IF9VSU5UX0ZBU1QxNl9XSURUSCA9
IF9fX1dPUkRTSVpFCitjb25zdCBfSVBfUkYgPSAweDgwMDAKK2NvbnN0IF9FVEhfUF9QUFBUQUxL
ID0gMHgwMDEwCitjb25zdCBfVFVOU0VUUVVFVUVfdmFsID0gMTA3NDAyNTY4OQorY29uc3QgX0RU
X0NIUiA9IDIKK2NvbnN0IF9fX0ZMVF9NQVhfRVhQX18gPSAxMjgKK2NvbnN0IF9SVE5fTVVMVElD
QVNUID0gNQorY29uc3QgX19fTlJfc2V0c2lkID0gMTEyCitjb25zdCBfX1hPUEVOX1hQRzIgPSAx
Citjb25zdCBfSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCA9IDEKK2NvbnN0IF9fWE9QRU5fWFBH
NCA9IDEKK2NvbnN0IF9fX05SX2dldHJlc2dpZCA9IDEyMAorY29uc3QgX0JQRl9KR0UgPSAweDMw
Citjb25zdCBfQlBGX0xEID0gMHgwMAorY29uc3QgX1RDUElfT1BUX0VDTiA9IDgKK2NvbnN0IF9F
VFhUQlNZID0gMjYKK2NvbnN0IF9JRkxBX1JNTkVUX01VWF9JRCA9IDEKK2NvbnN0IF9QUl9GUF9F
WENfU1dfRU5BQkxFID0gMHg4MAorY29uc3QgX19fTlJfdGltZSA9IDIwMQorY29uc3QgX0hBVkVf
U1lTX0VQT0xMX0ggPSAxCitjb25zdCBfSUZMQV9WRl9TVEFUU19SWF9CWVRFUyA9IDIKK2NvbnN0
IF9SVF9TQ09QRV9VTklWRVJTRSA9IDAKK2NvbnN0IF9TWVNfZXBvbGxfY3RsX29sZCA9IF9fX05S
X2Vwb2xsX2N0bF9vbGQKK2NvbnN0IF9VTE9OR19NQVggPSAoX0xPTkdfTUFYICogMiArIDEpCitj
b25zdCBfQ0xEX1RSQVBQRUQgPSA0Citjb25zdCBfTE9OR19CSVQgPSA2NAorY29uc3QgX19fUkxJ
TV9UX01BVENIRVNfUkxJTTY0X1QgPSAxCitjb25zdCBfVENQX1JFUEFJUl9PUFRJT05TID0gMjIK
K2NvbnN0IF9YODZfQ1I0X09TWE1NRVhDUFRfQklUID0gMTAKK2NvbnN0IF9fUE9TSVhfQUlPX01B
WCA9IDEKK2NvbnN0IF9SVEZfVVAgPSAweDAwMDEKK2NvbnN0IF9UQ1BfU19EQVRBX0lOID0gKDEg
PDwgMikKK2NvbnN0IF9JRkxBX0JSX01BWF9BR0UgPSAzCitjb25zdCBfX1NDX01FTU9SWV9QUk9U
RUNUSU9OID0gMTkKK2NvbnN0IF9GTk9OQkxPQ0sgPSBfT19OT05CTE9DSworY29uc3QgX0lOX0FU
VFJJQiA9IDB4MDAwMDAwMDQKK2NvbnN0IF9BVEZfUEVSTSA9IDB4MDQKK2NvbnN0IF9JRkxBX0dF
TkVWRV9SRU1PVEU2ID0gNworY29uc3QgX0lGTEFfQk9ORF9NT0RFID0gMQorY29uc3QgX0VIX0ZS
QU1FX0ZMQUdTID0gImF3IgorY29uc3QgX09fQVBQRU5EID0gMDIwMDAKK2NvbnN0IF9fU0NfVFlQ
RURfTUVNT1JZX09CSkVDVFMgPSAxNjUKK2NvbnN0IF9FVEhFUl9NQVhfTEVOID0gKF9FVEhfRlJB
TUVfTEVOICsgX0VUSEVSX0NSQ19MRU4pCitjb25zdCBfX19OUl9tc2dzbmQgPSA2OQorY29uc3Qg
X1RDQV9QQUQgPSA5Citjb25zdCBfUFJfU0VUX0ZQX01PREUgPSA0NQorY29uc3QgX05MX01NQVBf
U1RBVFVTX1ZBTElEID0gMgorY29uc3QgX19fTlJfbW91bnQgPSAxNjUKK2NvbnN0IF9fSU9DX1RZ
UEVCSVRTID0gOAorY29uc3QgX1NPQ0tfREdSQU0gPSAyCitjb25zdCBfTU9EX09GRlNFVCA9IF9B
REpfT0ZGU0VUCitjb25zdCBfSUZMQV9NQVAgPSAxNAorY29uc3QgX0VMMk5TWU5DID0gNDUKK2Nv
bnN0IF9JUFY2X09SSUdEU1RBRERSID0gNzQKK2NvbnN0IF9TWVNfbXVubG9jayA9IF9fX05SX211
bmxvY2sKK2NvbnN0IF9USF9BQ0sgPSAweDEwCitjb25zdCBfTF9YVE5EID0gMgorY29uc3QgX1NP
X1RYVElNRSA9IDYxCitjb25zdCBfUlRNX0RFTEFDVElPTiA9IDQ5Citjb25zdCBfWFRBQlMgPSAw
MDE0MDAwCitjb25zdCBfSEFWRV9TWVNfU1lTQ0FMTF9IID0gMQorY29uc3QgX1BSX1NFVF9TUEVD
VUxBVElPTl9DVFJMID0gNTMKK2NvbnN0IF9USU9DR0RFVl92YWwgPSAyMTQ3NzY3MzQ2Citjb25z
dCBfX19OUl9jb25uZWN0ID0gNDIKK2NvbnN0IF9YODZfQ1I0X1NNRVBfQklUID0gMjAKK2NvbnN0
IF9GU19QT0xJQ1lfRkxBR1NfVkFMSUQgPSAweDAzCitjb25zdCBfVElPQ0dJQ09VTlQgPSAweDU0
NUQKK2NvbnN0IF9TWVNfc3RhdGZzID0gX19fTlJfc3RhdGZzCitjb25zdCBfTkVUTElOS19SRE1B
ID0gMjAKK2NvbnN0IF9JUFY2XzIyOTJIT1BMSU1JVCA9IDgKK2NvbnN0IF9JRkZfT05FX1FVRVVF
ID0gMHgyMDAwCitjb25zdCBfSVBQT1JUX0NNRFNFUlZFUiA9IDUxNAorY29uc3QgX1BGX01BWCA9
IDQ0Citjb25zdCBfUlRfQ0xBU1NfTUFYID0gMjU1Citjb25zdCBfSVBQUk9UT19JUFY2ID0gNDEK
K2NvbnN0IF9TSU9DU0lGQlIgPSAweDg5NDEKK2NvbnN0IF9fX0lOVF9MRUFTVDhfTUFYX18gPSAw
eDdmCitjb25zdCBfX19ERUMxMjhfTUFOVF9ESUdfXyA9IDM0Citjb25zdCBfSUNNUDZfUlJfUkVT
VUxUX0ZMQUdTX0ZPUkJJRERFTiA9IDB4MDEwMAorY29uc3QgX01BUF9TSEFSRUQgPSAweDAxCitj
b25zdCBfRVVTRVJTID0gODcKK2NvbnN0IF9NQVhUQyA9IDYKK2NvbnN0IF9UQ1BfU1lOX1NFTlQg
PSAyCitjb25zdCBfUEZfTkVUTElOSyA9IDE2Citjb25zdCBfWERQX0FUVEFDSEVEX05PTkUgPSAw
Citjb25zdCBfX19ERUNJTUFMX0RJR19fID0gMjEKK2NvbnN0IF9FVEhFUl9BRERSX0xFTiA9IF9F
VEhfQUxFTgorY29uc3QgX0ZGSV9UWVBFX0xBU1QgPSBfRkZJX1RZUEVfQ09NUExFWAorY29uc3Qg
X1BPU0lYX01BRFZfTk9STUFMID0gMAorY29uc3QgX0FSUEhSRF9JRUVFODAyMTFfUFJJU00gPSA4
MDIKK2NvbnN0IF9FVEhfUF84MDIxQUQgPSAweDg4QTgKK2NvbnN0IF9MSU5VWF9SRUJPT1RfTUFH
SUMyQyA9IDUzNzk5MzIxNgorY29uc3QgX01OVF9ERVRBQ0ggPSAyCitjb25zdCBfSVBUT1NfRUNO
X05PVF9FQ1QgPSAweDAwCitjb25zdCBfU1NfT05TVEFDSyA9IDEKK2NvbnN0IF9JT0NfSU4gPSAo
X19JT0NfV1JJVEUgPDwgX19JT0NfRElSU0hJRlQpCitjb25zdCBfRVRIX1BfODAyMUFIID0gMHg4
OEU3Citjb25zdCBfSUZMQV9UVU5fVk5FVF9IRFIgPSA1Citjb25zdCBfTVJFTUFQX01BWU1PVkUg
PSAxCitjb25zdCBfX19STElNSVRfTkxJTUlUUyA9IDE2Citjb25zdCBfRl9HRVRMSzY0ID0gNQor
Y29uc3QgX1JUUFJPVF9VTlNQRUMgPSAwCitjb25zdCBfUEFST0REID0gMDAwMTAwMAorY29uc3Qg
X19fTlJfa2V4ZWNfbG9hZCA9IDI0NgorY29uc3QgX19fSUZMQV9WRl9QT1JUX01BWCA9IDIKK2Nv
bnN0IF9TWVNfc3dhcG9mZiA9IF9fX05SX3N3YXBvZmYKK2NvbnN0IF9fX1NURENfVVRGXzMyX18g
PSAxCitjb25zdCBfUlRfVEFCTEVfTE9DQUwgPSAyNTUKK2NvbnN0IF9GRlNZTkMgPSBfT19GU1lO
QworY29uc3QgX1BFTkRJTiA9IDAwNDAwMDAKK2NvbnN0IF9fX0lOVDhfTUFYX18gPSAweDdmCitj
b25zdCBfRVRIX1BfQVJDTkVUID0gMHgwMDFBCitjb25zdCBfRkRfU0VUU0laRSA9IF9fX0ZEX1NF
VFNJWkUKK2NvbnN0IF9NU0dfRU9SID0gMTI4Citjb25zdCBfX05FVF9JRl9BUlBfSCA9IDEKK2Nv
bnN0IF9SVE1fRl9DTE9ORUQgPSAweDIwMAorY29uc3QgX0VIV1BPSVNPTiA9IDEzMworY29uc3Qg
X0lQUFJPVE9fTk9ORSA9IDU5Citjb25zdCBfVENQX0NPT0tJRV9PVVRfTkVWRVIgPSAoMSA8PCAx
KQorY29uc3QgX0VQUk9UTyA9IDcxCitjb25zdCBfX0lPQ19OUlNISUZUID0gMAorY29uc3QgX0Zf
RVhMQ0sgPSA0Citjb25zdCBfX19OUl9jbG9uZSA9IDU2Citjb25zdCBfX19OUl9wdHJhY2UgPSAx
MDEKK2NvbnN0IF9fUE9TSVhfVjdfTFBCSUdfT0ZGQklHID0gLTEKK2NvbnN0IF9IQVZFX0FDT1NM
ID0gMQorY29uc3QgX1NJT0NHSUZEU1RBRERSID0gMHg4OTE3Citjb25zdCBfX1BPU0lYX0xPR0lO
X05BTUVfTUFYID0gOQorY29uc3QgX1JUTkxHUlBfSVBWNl9ORVRDT05GID0gMjUKK2NvbnN0IF9Q
QUdFX01BU0sgPSAoXihfUEFHRV9TSVpFLTEpKQorY29uc3QgX19DU19YQlM1X0lMUDMyX09GRkJJ
R19MSU5URkxBR1MgPSAxMTA3Citjb25zdCBfRkZJX1RZUEVfU0lOVDY0ID0gMTIKK2NvbnN0IF9f
U0NfT1BFTl9NQVggPSA0Citjb25zdCBfX1NDXzJfU1dfREVWID0gNTEKK2NvbnN0IF9OTE1fRl9B
Q0sgPSAweDA0Citjb25zdCBfU0NOZDggPSAiaGhkIgorY29uc3QgX19fRkxUMTI4X01JTl8xMF9F
WFBfXyA9ICgtNDkzMSkKK2NvbnN0IF9YRFBfRkxBR1NfU0tCX01PREUgPSAoMSA8PCAxKQorY29u
c3QgX1NJT0NHUkFSUCA9IDB4ODk2MQorY29uc3QgX0lGTEFfVkZfUE9SVFMgPSAyNAorY29uc3Qg
X0NFUkFTRSA9IDAxNzcKK2NvbnN0IF9fX05SX3NldHBnaWQgPSAxMDkKK2NvbnN0IF9SVEZfSU5U
RVJGQUNFID0gMHg0MDAwMDAwMAorY29uc3QgX0lGTEFfQlJQT1JUX0lTT0xBVEVEID0gMzMKK2Nv
bnN0IF9QUklvRkFTVDggPSAibyIKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfTElOS19GQUlMVVJF
X0NPVU5UID0gMworY29uc3QgX0JSS0lOVCA9IDAwMDAwMDIKK2NvbnN0IF9fX0RFQ0lNQUxfQklE
X0ZPUk1BVF9fID0gMQorY29uc3QgX1NPTF9TT0NLRVQgPSAxCitjb25zdCBfX0NTX1BPU0lYX1Y3
X0lMUDMyX09GRkJJR19MREZMQUdTID0gMTEzNworY29uc3QgX0lGTEFfUFJJT1JJVFkgPSA5Citj
b25zdCBfSVRJTUVSX1JFQUwgPSAwCitjb25zdCBfVENGTFNIID0gMHg1NDBCCitjb25zdCBfRkZJ
X1RISVNDQUxMID0gMworY29uc3QgX0lQX05PREVGUkFHID0gMjIKK2NvbnN0IF9ORVRMSU5LX0ZJ
UkVXQUxMID0gMworY29uc3QgX19fTlJfc2NoZWRfZ2V0YWZmaW5pdHkgPSAyMDQKK2NvbnN0IF9J
UFBST1RPX1VEUExJVEUgPSAxMzYKK2NvbnN0IF9GU19QUk9KSU5IRVJJVF9GTCA9IDB4MjAwMDAw
MDAKK2NvbnN0IF9NQURWX0RPTlRGT1JLID0gMTAKK2NvbnN0IF9NU0dfQ01TR19DTE9FWEVDID0g
MTA3Mzc0MTgyNAorY29uc3QgX0VOT0VOVCA9IDIKK2NvbnN0IF9JUFRPU19FQ05fRUNUMSA9IDB4
MDEKK2NvbnN0IF9JRkxBX1ZGX0lORk8gPSAxCitjb25zdCBfTE9DS19XUklURSA9IDEyOAorY29u
c3QgX1RDUF9MSVNURU4gPSAxMAorY29uc3QgX0lQT1BUX1RTX1BSRVNQRUMgPSAzCitjb25zdCBf
X19QT1NJWF9GQURWX05PUkVVU0UgPSA1Citjb25zdCBfQVJQT1BfUkVRVUVTVCA9IDEKK2NvbnN0
IF9QVFJBQ0VfRVZFTlRfRVhJVCA9IDYKK2NvbnN0IF9YQVRUUl9OQU1FX01BWCA9IDI1NQorY29u
c3QgX19fU19JRkxOSyA9IDAxMjAwMDAKK2NvbnN0IF9UQ0FfUk9PVF9UQUIgPSAxCitjb25zdCBf
U0tGX0FEX1BST1RPQ09MID0gMAorY29uc3QgX0VOT1BLRyA9IDY1Citjb25zdCBfX19BVE9NSUNf
UkVMQVhFRCA9IDAKK2NvbnN0IF9TWVNfZ2V0c29ja29wdCA9IF9fX05SX2dldHNvY2tvcHQKK2Nv
bnN0IF9JRkxBX1ZGX0xJTktfU1RBVEVfRU5BQkxFID0gMQorY29uc3QgX1ZURExZID0gMDA0MDAw
MAorY29uc3QgX19fTlJfdGltZXJfZGVsZXRlID0gMjI2Citjb25zdCBfUlROX1VOU1BFQyA9IDAK
K2NvbnN0IF9TT19TTkRUSU1FTyA9IDIxCitjb25zdCBfQUZfVU5TUEVDID0gX1BGX1VOU1BFQwor
Y29uc3QgX1RJT0NTRVJTRVRNVUxUSSA9IDB4NTQ1QgorY29uc3QgX0FSUEhSRF9GQ1BMID0gNzg2
Citjb25zdCBfTE9DS19SVyA9IDE5MgorY29uc3QgX1JFR19DUjIgPSAyMgorY29uc3QgX19TQ19B
UkdfTUFYID0gMAorY29uc3QgX0FSUEhSRF9GQ1BQID0gNzg0Citjb25zdCBfVUlOVF9XSURUSCA9
IDMyCitjb25zdCBfSUZMQV9WWExBTl9JRCA9IDEKK2NvbnN0IF9fX1VTRV9YT1BFTiA9IDEKK2Nv
bnN0IF9JUE9QVF9TRUMgPSBfSVBPUFRfU0VDVVJJVFkKK2NvbnN0IF9JRkxBX1RYUUxFTiA9IDEz
Citjb25zdCBfU1lTX3Vtb3VudDIgPSBfX19OUl91bW91bnQyCitjb25zdCBfVFVOX1RZUEVfTUFT
SyA9IDB4MDAwZgorY29uc3QgX0NMT0NLX1JFQUxUSU1FX0NPQVJTRSA9IDUKK2NvbnN0IF9JRkxB
X0JSX0ZEQl9GTFVTSCA9IDIxCitjb25zdCBfUlRNX1NFVE5FSUdIVEJMID0gNjcKK2NvbnN0IF9J
UF9BRERfTUVNQkVSU0hJUCA9IDM1Citjb25zdCBfUlRQUk9UX0RIQ1AgPSAxNgorY29uc3QgX0NM
T05FX1BUUkFDRSA9IDB4MDAwMDIwMDAKK2NvbnN0IF9QUk9UX05PTkUgPSAweDAKK2NvbnN0IF9M
SU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQgPSAweDAxMjM0NTY3Citjb25zdCBfTUFYX0lOUFVUID0g
MjU1Citjb25zdCBfUlRBX1VOU1BFQyA9IDAKK2NvbnN0IF9GX0FERF9TRUFMUyA9IDEwMzMKK2Nv
bnN0IF9VSU9fTUFYSU9WID0gX19fSU9WX01BWAorY29uc3QgX19TQ19UUkFDRV9TWVNfTUFYID0g
MjQ0Citjb25zdCBfUEFSTVJLID0gMDAwMDAxMAorY29uc3QgX19TQ19YT1BFTl9YUEczID0gOTkK
K2NvbnN0IF9QUl9HRVRfRlBfTU9ERSA9IDQ2Citjb25zdCBfX1NDX1hPUEVOX1hQRzQgPSAxMDAK
K2NvbnN0IF9VSU5UX0xFQVNUNjRfV0lEVEggPSA2NAorY29uc3QgX19TWVNfV0FJVF9IID0gMQor
Y29uc3QgX0VUSF9QX1RSQUlMRVIgPSAweDAwMUMKK2NvbnN0IF9TT0xfVENQID0gNgorY29uc3Qg
X0FESl9NSUNSTyA9IDB4MTAwMAorY29uc3QgX05EVEFfVEhSRVNIMSA9IDIKK2NvbnN0IF9SVEFf
SVBfUFJPVE8gPSAyNworY29uc3QgX0lGTEFfQlJQT1JUX0ZMVVNIID0gMjQKK2NvbnN0IF9UVU5T
RVRHUk9VUF92YWwgPSAxMDc0MDI1Njc4Citjb25zdCBfU09fQ05YX0FEVklDRSA9IDUzCitjb25z
dCBfTkRUQV9USFJFU0gzID0gNAorY29uc3QgX0xPQ0tfU0ggPSAxCitjb25zdCBfX19TSVpFT0Zf
V0NIQVJfVF9fID0gNAorY29uc3QgX1NFTV9WQUxVRV9NQVggPSAoMjE0NzQ4MzY0NykKK2NvbnN0
IF9fX05SX2dldHVpZCA9IDEwMgorY29uc3QgX0lGTEFfQlJQT1JUX01DQVNUX0ZMT09EID0gMjcK
K2NvbnN0IF9TT0xfQkxVRVRPT1RIID0gMjc0Citjb25zdCBfQVJQSFJEX0VUSEVSID0gMQorY29u
c3QgX0lQUE9SVF9OQU1FU0VSVkVSID0gNDIKK2NvbnN0IF9fU0NfQkFTRSA9IDEzNAorY29uc3Qg
X0hPU1RfTkFNRV9NQVggPSA2NAorY29uc3QgX1g4Nl9DUjBfRVRfQklUID0gNAorY29uc3QgX0Zf
U0VUUElQRV9TWiA9IDEwMzEKK2NvbnN0IF9fX1VJTlQxNl9NQVhfXyA9IDB4ZmZmZgorY29uc3Qg
X19fU0VHX0ZTID0gMQorY29uc3QgX1NZU19mcmVtb3ZleGF0dHIgPSBfX19OUl9mcmVtb3ZleGF0
dHIKK2NvbnN0IF9GRklfVFlQRV9VSU5UMTYgPSA3Citjb25zdCBfX19JTFAzMl9PRkYzMl9MREZM
QUdTID0gIi1tMzIiCitjb25zdCBfSVBQT1JUX01UUCA9IDU3Citjb25zdCBfU1lTX2ZzZXR4YXR0
ciA9IF9fX05SX2ZzZXR4YXR0cgorY29uc3QgX19fTlJfZXhpdCA9IDYwCitjb25zdCBfQlBGX0gg
PSAweDA4Citjb25zdCBfUFJfU0VUX1NFQ0NPTVAgPSAyMgorY29uc3QgX0VUSF9QX0RJQUcgPSAw
eDYwMDUKK2NvbnN0IF9MT0dJTl9OQU1FX01BWCA9IDI1NgorY29uc3QgX1NfSVJXWE8gPSAoX1Nf
SVJXWEcgPj4gMykKK2NvbnN0IF9GRklfU1REQ0FMTCA9IDUKK2NvbnN0IF9BUlBIUkRfSU5GSU5J
QkFORCA9IDMyCitjb25zdCBfX0lPQ19XUklURSA9IDEKK2NvbnN0IF9USU9DRVhDTCA9IDB4NTQw
QworY29uc3QgX19TQ19USFJFQURfUk9CVVNUX1BSSU9fUFJPVEVDVCA9IDI0OAorY29uc3QgX1BU
UkFDRV9PX1RSQUNFQ0xPTkUgPSA4Citjb25zdCBfU1lTX3ByY3RsID0gX19fTlJfcHJjdGwKK2Nv
bnN0IF9JUF9UUkFOU1BBUkVOVCA9IDE5Citjb25zdCBfSUZMQV9QT1JUX0hPU1RfVVVJRCA9IDUK
K2NvbnN0IF9fX05SX2Zhbm90aWZ5X21hcmsgPSAzMDEKK2NvbnN0IF9JRkZfUE9JTlRPUE9JTlQg
PSAxNgorY29uc3QgX1JURl9EWU5BTUlDID0gMHgwMDEwCitjb25zdCBfU0lPQ0dJRk1FVFJJQyA9
IDB4ODkxZAorY29uc3QgX0lGTEFfQlJfTUNBU1RfU1RBVFNfRU5BQkxFRCA9IDQyCitjb25zdCBf
U1lTX2V4ZWN2ZSA9IF9fX05SX2V4ZWN2ZQorY29uc3QgX09OTFJFVCA9IDAwMDAwNDAKK2NvbnN0
IF9SVEFYX1JUVFZBUiA9IDUKK2NvbnN0IF9JRkxBX0JSX01DQVNUX01MRF9WRVJTSU9OID0gNDQK
K2NvbnN0IF9fX0ZMVF9NSU5fRVhQX18gPSAoLTEyNSkKK2NvbnN0IF9OVURfREVMQVkgPSAweDA4
Citjb25zdCBfX19OUl9zZW5kbW1zZyA9IDMwNworY29uc3QgX0lGTEFfQlJfTkZfQ0FMTF9JUFRB
QkxFUyA9IDM2Citjb25zdCBfSVBQT1JUX0VDSE8gPSA3Citjb25zdCBfX19OUl9jbG9ja19nZXRy
ZXMgPSAyMjkKK2NvbnN0IF9NQ0FTVF9VTkJMT0NLX1NPVVJDRSA9IDQ0Citjb25zdCBfRVRIX1Bf
TE9PUEJBQ0sgPSAweDkwMDAKK2NvbnN0IF9JVElNRVJfVklSVFVBTCA9IDEKK2NvbnN0IF9QUklp
TEVBU1Q4ID0gImkiCitjb25zdCBfRVRIX1BfQ1VTVCA9IDB4NjAwNgorY29uc3QgX0lGTEFfQlJQ
T1JUX0ZBU1RfTEVBVkUgPSA3Citjb25zdCBfU1lTX3NldHJlc3VpZCA9IF9fX05SX3NldHJlc3Vp
ZAorY29uc3QgX1JURl9YUkVTT0xWRSA9IDB4MDgwMAorY29uc3QgX0FSUEhSRF9JRUVFODAyMTFf
UkFESU9UQVAgPSA4MDMKK2NvbnN0IF9fX1NfSUZDSFIgPSAwMDIwMDAwCitjb25zdCBfQ01TUEFS
ID0gMDEwMDAwMDAwMDAwCitjb25zdCBfQVJQSFJEX1ZPSUQgPSAweEZGRkYKK2NvbnN0IF9fX05S
X2xpc3R4YXR0ciA9IDE5NAorY29uc3QgX1JUQV9VSUQgPSAyNQorY29uc3QgX19JT0NfTlJNQVNL
ID0gKCgxIDw8IF9fSU9DX05SQklUUyktMSkKK2NvbnN0IF9JT0NTSVpFX1NISUZUID0gKF9fSU9D
X1NJWkVTSElGVCkKK2NvbnN0IF9FQUdBSU4gPSAxMQorY29uc3QgX19fRkxUX01BWF8xMF9FWFBf
XyA9IDM4Citjb25zdCBfSVBWNl9NVUxUSUNBU1RfTE9PUCA9IDE5Citjb25zdCBfX19OUl9nZXRw
Z2lkID0gMTIxCitjb25zdCBfU09fUFJJT1JJVFkgPSAxMgorY29uc3QgX01TR19ET05UV0FJVCA9
IDY0Citjb25zdCBfSU9DU0laRV9NQVNLID0gKF9fSU9DX1NJWkVNQVNLIDw8IF9fSU9DX1NJWkVT
SElGVCkKK2NvbnN0IF9fX0dDQ19BVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUgPSAyCitjb25zdCBf
X19GTFQxMjhfRVBTSUxPTl9fID0gMS4xCitjb25zdCBfRUlOVFIgPSA0Citjb25zdCBfUlRGX05P
UE1UVURJU0MgPSAweDQwMDAKK2NvbnN0IF9SVFBST1RfU1RBVElDID0gNAorY29uc3QgX0lGQV9M
QUJFTCA9IDMKK2NvbnN0IF9TT19QUk9UT0NPTCA9IDM4Citjb25zdCBfX19OUl9yZWFkYWhlYWQg
PSAxODcKK2NvbnN0IF9USF9TWU4gPSAweDAyCitjb25zdCBfUlROTEdSUF9JUFY2X1BSRUZJWCA9
IDE4Citjb25zdCBfSUNNUDZfRFNUX1VOUkVBQ0hfQURNSU4gPSAxCitjb25zdCBfU0lPQ0dJRlBG
TEFHUyA9IDB4ODkzNQorY29uc3QgX19TWVNfU1RBVEZTX0ggPSAxCitjb25zdCBfX19TVERDX18g
PSAxCitjb25zdCBfX19ERUMxMjhfTUFYX18gPSA5Ljk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5
OTk5OTk5OUU2MTQ0Citjb25zdCBfSU42X0FERFJfR0VOX01PREVfTk9ORSA9IDEKK2NvbnN0IF9S
VE1fU0VUTElOSyA9IDE5Citjb25zdCBfRkZJX09LID0gMAorY29uc3QgX19fSUZMQV9TVEFUU19N
QVggPSA2Citjb25zdCBfTkRfUk9VVEVSX1NPTElDSVQgPSAxMzMKK2NvbnN0IF9QUl9TUEVDX1NU
T1JFX0JZUEFTUyA9IDAKK2NvbnN0IF9TWVNfdGVlID0gX19fTlJfdGVlCitjb25zdCBfRlBFX0ZM
VFNVQiA9IDgKK2NvbnN0IF9NU0dfV0FJVEZPUk9ORSA9IDY1NTM2Citjb25zdCBfX1BDX0FMTE9D
X1NJWkVfTUlOID0gMTgKK2NvbnN0IF9TSUdJTEwgPSA0Citjb25zdCBfRE5fREVMRVRFID0gMHgw
MDAwMDAwOAorY29uc3QgX05JX05VTUVSSUNTRVJWID0gMgorY29uc3QgX1BGX0lTRE4gPSAzNAor
Y29uc3QgX1BSX0NBUF9BTUJJRU5UID0gNDcKK2NvbnN0IF9JUFRPU19UT1NfTUFTSyA9IDB4MUUK
K2NvbnN0IF9fU0NfTkxfTEFOR01BWCA9IDEyMAorY29uc3QgX1NJR0NMRCA9IF9TSUdDSExECitj
b25zdCBfX19OUl9jaG1vZCA9IDkwCitjb25zdCBfU1RET1VUX0ZJTEVOTyA9IDEKK2NvbnN0IF9f
TFA2NCA9IDEKK2NvbnN0IF9fX05SX21xX2dldHNldGF0dHIgPSAyNDUKK2NvbnN0IF9TWVNfbGlz
dGVuID0gX19fTlJfbGlzdGVuCitjb25zdCBfSUZMQV9WRl9MSU5LX1NUQVRFX0FVVE8gPSAwCitj
b25zdCBfWDg2X0VGTEFHU19SRl9CSVQgPSAxNgorY29uc3QgX1RDUF9USElOX0RVUEFDSyA9IDE3
Citjb25zdCBfX19OUl9zeW5jID0gMTYyCitjb25zdCBfU09fQVRUQUNIX1JFVVNFUE9SVF9FQlBG
ID0gNTIKK2NvbnN0IF9fX1NJWkVPRl9ET1VCTEVfXyA9IDgKK2NvbnN0IF9FTVVMVElIT1AgPSA3
MgorY29uc3QgX19QT1NJWF9RTElNSVQgPSAxCitjb25zdCBfU1lTX2dldGl0aW1lciA9IF9fX05S
X2dldGl0aW1lcgorY29uc3QgX1JUTV9HRVRRRElTQyA9IDM4Citjb25zdCBfRlNfQ09NUFJCTEtf
RkwgPSAweDAwMDAwMjAwCitjb25zdCBfU1lTX2dldHBncnAgPSBfX19OUl9nZXRwZ3JwCitjb25z
dCBfX19GTFQxMjhfTUFOVF9ESUdfXyA9IDExMworY29uc3QgX1NBX09OU1RBQ0sgPSAweDA4MDAw
MDAwCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9JR01QX1ZFUlNJT04gPSA0MworY29uc3QgX1NZU19w
a2V5X2ZyZWUgPSBfX19OUl9wa2V5X2ZyZWUKK2NvbnN0IF9fX05SX3NobWN0bCA9IDMxCitjb25z
dCBfX01LTk9EX1ZFUiA9IDAKK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfU1BFQ0sxMjhfMjU2
X1hUUyA9IDcKK2NvbnN0IF9TWVNfZ2V0ZGVudHM2NCA9IF9fX05SX2dldGRlbnRzNjQKK2NvbnN0
IF9fX05SX2Nsb3NlID0gMworY29uc3QgX0ZTX0JUUkVFX0ZMID0gMHgwMDAwMTAwMAorY29uc3Qg
X01TR19SU1QgPSA0MDk2Citjb25zdCBfX1NDX1JFQUxUSU1FX1NJR05BTFMgPSA5Citjb25zdCBf
SU5fQUxMX0VWRU5UUyA9IChfSU5fQUNDRVNTIHwgX0lOX01PRElGWSB8IF9JTl9BVFRSSUIgfCBf
SU5fQ0xPU0VfV1JJVEUgfCBfSU5fQ0xPU0VfTk9XUklURSB8IF9JTl9PUEVOIHwgX0lOX01PVkVE
X0ZST00gfCBfSU5fTU9WRURfVE8gfCBfSU5fQ1JFQVRFIHwgX0lOX0RFTEVURSB8IF9JTl9ERUxF
VEVfU0VMRiB8IF9JTl9NT1ZFX1NFTEYpCitjb25zdCBfVUlOVF9GQVNUMTZfTUFYID0gKDE4NDQ2
NzQ0MDczNzA5NTUxNjE1KQorY29uc3QgX1BUUkFDRV9BVFRBQ0ggPSAxNgorY29uc3QgX19fTlJf
bWtub2RhdCA9IDI1OQorY29uc3QgX1NDTmk4ID0gImhoaSIKK2NvbnN0IF9fU0NfTEVWRUwxX0RD
QUNIRV9BU1NPQyA9IDE4OQorY29uc3QgX1JUTV9ORVdDQUNIRVJFUE9SVCA9IDk2Citjb25zdCBf
U09fUEVFUk5BTUUgPSAyOAorY29uc3QgX1g4Nl9DUjRfT1NGWFNSX0JJVCA9IDkKK2NvbnN0IF9f
X0RCTF9NSU5fMTBfRVhQX18gPSAoLTMwNykKK2NvbnN0IF9fUE9TSVgyX0NIQVJDTEFTU19OQU1F
X01BWCA9IDE0Citjb25zdCBfX19CSVRfVFlQRVNfREVGSU5FRF9fID0gMQorY29uc3QgX19CSVRT
X1NUQVRfSCA9IDEKK2NvbnN0IF9TSUdLSUxMID0gOQorY29uc3QgX19fTlJfbW1hcCA9IDkKK2Nv
bnN0IF9fRElSRU5UX0ggPSAxCitjb25zdCBfUlRBX0NBQ0hFSU5GTyA9IDEyCitjb25zdCBfUlRG
X01UVSA9IDB4MDA0MAorY29uc3QgX05EVFBBX1FVRVVFX0xFTkJZVEVTID0gMTYKK2NvbnN0IF9D
WDg2X0NDUjQgPSAweGU4Citjb25zdCBfSUZBX1VOU1BFQyA9IDAKK2NvbnN0IF9fX05SX3NldHJs
aW1pdCA9IDE2MAorY29uc3QgX1NPX01FTUlORk8gPSA1NQorY29uc3QgX19TQ19OUFJPQ0VTU09S
U19PTkxOID0gODQKK2NvbnN0IF9NQ0FTVF9KT0lOX0dST1VQID0gNDIKK2NvbnN0IF9FT1ZFUkZM
T1cgPSA3NQorY29uc3QgX01BRFZfV0lMTE5FRUQgPSAzCitjb25zdCBfQVJQSFJEX0hJUFBJID0g
NzgwCitjb25zdCBfTlNJRyA9IF9fTlNJRworY29uc3QgX0FGX1JPVVRFID0gX1BGX1JPVVRFCitj
b25zdCBfU0lPQ0dTVEFNUE5TID0gMHg4OTA3Citjb25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfU1VD
Q0VTUyA9IDAKK2NvbnN0IF9JRkxBX01BQ1NFQ19SRVBMQVlfUFJPVEVDVCA9IDEyCitjb25zdCBf
VElPQ01TRVQgPSAweDU0MTgKK2NvbnN0IF9ORVRMSU5LX0tPQkpFQ1RfVUVWRU5UID0gMTUKK2Nv
bnN0IF9fUE9TSVgyX0VYUFJfTkVTVF9NQVggPSAzMgorY29uc3QgX0lQX01VTFRJQ0FTVF9MT09Q
ID0gMzQKK2NvbnN0IF9SVE1fR0VUTURCID0gODYKK2NvbnN0IF9fX0lOVF9MRUFTVDhfV0lEVEhf
XyA9IDgKK2NvbnN0IF9fX05SX3J0X3NpZ3F1ZXVlaW5mbyA9IDEyOQorY29uc3QgX1g4Nl9DUjRf
UEtFX0JJVCA9IDIyCitjb25zdCBfSUZMQV9CT05EX1NMQVZFX1BFUk1fSFdBRERSID0gNAorY29u
c3QgX19QT1NJWF9USFJFQURfUFJJT19JTkhFUklUID0gMjAwODA5Citjb25zdCBfRVBPTExNU0cg
PSAxMDI0Citjb25zdCBfSUZMQV9HU09fTUFYX1NJWkUgPSA0MQorY29uc3QgX19TQ19MRVZFTDFf
SUNBQ0hFX0xJTkVTSVpFID0gMTg3Citjb25zdCBfX19OUl9tc3luYyA9IDI2Citjb25zdCBfUlRB
X01VTFRJUEFUSCA9IDkKK2NvbnN0IF9GRjAgPSAwMDAwMDAwCitjb25zdCBfRkYxID0gMDEwMDAw
MAorY29uc3QgX0VUSF9QX0FUTUZBVEUgPSAweDg4ODQKK2NvbnN0IF9YODZfRUZMQUdTX0lEX0JJ
VCA9IDIxCitjb25zdCBfX19OUl9iaW5kID0gNDkKK2NvbnN0IF9fREVGQVVMVF9TT1VSQ0UgPSAx
Citjb25zdCBfSVBPUFRfU0VDVVJfUkVTVFIgPSAweGFmMTMKK2NvbnN0IF9JRkxBX1ZYTEFOX0NP
TExFQ1RfTUVUQURBVEEgPSAyNQorY29uc3QgX1NUQVRYX1VJRCA9IDB4MDAwOAorY29uc3QgX1BU
UkFDRV9HRVRGUFhSRUdTID0gMTgKK2NvbnN0IF9TWVNfZ2V0cHJpb3JpdHkgPSBfX19OUl9nZXRw
cmlvcml0eQorY29uc3QgX0hBVkVfUElQRTIgPSAxCitjb25zdCBfX19OUl9jbG9ja19zZXR0aW1l
ID0gMjI3Citjb25zdCBfX19OUl9tdW5sb2NrID0gMTUwCitjb25zdCBfUlRQUk9UX09TUEYgPSAx
ODgKK2NvbnN0IF9SVE1fR0VUTElOSyA9IDE4Citjb25zdCBfX19OUl9hbGFybSA9IDM3Citjb25z
dCBfX19PX0RTWU5DID0gMDEwMDAwCitjb25zdCBfUFJJT19QR1JQID0gMQorY29uc3QgX19fTlJf
c3luY2ZzID0gMzA2Citjb25zdCBfRU5PVFNVUCA9IF9FT1BOT1RTVVBQCitjb25zdCBfTkVUTElO
S19VTlVTRUQgPSAxCitjb25zdCBfSUNNUDZfUlJfUENPVVNFX0ZMQUdTX0RFQ1JWTFRJTUUgPSAw
eDgwCitjb25zdCBfSEFWRV9TWVNfU09DS0VUX0ggPSAxCitjb25zdCBfU1lTX3NldF9yb2J1c3Rf
bGlzdCA9IF9fX05SX3NldF9yb2J1c3RfbGlzdAorY29uc3QgX0NMT0NLX01PTk9UT05JQ19DT0FS
U0UgPSA2Citjb25zdCBfX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0NGTEFHUyA9IDExMTIKK2NvbnN0
IF9fQVNNX1g4Nl9VTklTVERfNjRfSCA9IDEKK2NvbnN0IF9TWVNfcHJvY2Vzc192bV9yZWFkdiA9
IF9fX05SX3Byb2Nlc3Nfdm1fcmVhZHYKK2NvbnN0IF9YODZfQ1IwX01QX0JJVCA9IDEKK2NvbnN0
IF9JUE9QVF9NSU5PRkYgPSA0Citjb25zdCBfSVBWNl9WNk9OTFkgPSAyNgorY29uc3QgX1g4Nl9D
UjRfRlNHU0JBU0VfQklUID0gMTYKK2NvbnN0IF9TSUdFVl9TSUdOQUwgPSAwCitjb25zdCBfU1lT
X3J0X3NpZ3N1c3BlbmQgPSBfX19OUl9ydF9zaWdzdXNwZW5kCitjb25zdCBfUlRNX05FV05FSUdI
ID0gMjgKK2NvbnN0IF9fX1BUSFJFQURfUldMT0NLX0lOVF9GTEFHU19TSEFSRUQgPSAxCitjb25z
dCBfX19JTlRfTEVBU1Q2NF9XSURUSF9fID0gNjQKK2NvbnN0IF9TWVNfZ2V0cGVlcm5hbWUgPSBf
X19OUl9nZXRwZWVybmFtZQorY29uc3QgX19fTlJfY2hkaXIgPSA4MAorY29uc3QgX19fTlJfZXhp
dF9ncm91cCA9IDIzMQorY29uc3QgX19fUE9TSVgyX1RISVNfVkVSU0lPTiA9IDIwMDgwOQorY29u
c3QgX05MMCA9IDAwMDAwMDAKK2NvbnN0IF9fX0lGTEFfUk1ORVRfTUFYID0gMworY29uc3QgX19T
Q18yX0NfVkVSU0lPTiA9IDk2Citjb25zdCBfQVJQSFJEX1NMSVA2ID0gMjU4Citjb25zdCBfU1lT
X2dldGVnaWQgPSBfX19OUl9nZXRlZ2lkCitjb25zdCBfX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lU
RVJBVElPTlMgPSA3MworY29uc3QgX1NJR1RTVFAgPSAyMAorY29uc3QgX01TR19GSU4gPSA1MTIK
K2NvbnN0IF9ORFVTRVJPUFRfU1JDQUREUiA9IDEKK2NvbnN0IF9JTl9DTEFTU0NfSE9TVCA9ICgw
eGZmZmZmZmZmICYgXl9JTl9DTEFTU0NfTkVUKQorY29uc3QgX0NIQVJfQklUID0gX19fQ0hBUl9C
SVRfXworY29uc3QgX01DTF9GVVRVUkUgPSAyCitjb25zdCBfUlRBWF9VTlNQRUMgPSAwCitjb25z
dCBfSUZMQV9CT05EX0ZBSUxfT1ZFUl9NQUMgPSAxMworY29uc3QgX19fTERCTF9IQVNfREVOT1JN
X18gPSAxCitjb25zdCBfU0lHSU9UID0gX1NJR0FCUlQKK2NvbnN0IF9fX05SX3Zmb3JrID0gNTgK
K2NvbnN0IF9fQklUU19QVEhSRUFEVFlQRVNfQVJDSF9IID0gMQorY29uc3QgX05EVEFfUEFEID0g
OQorY29uc3QgX19fTlJfc3dhcG9mZiA9IDE2OAorY29uc3QgX0lGTEFfTUFDU0VDX1BST1RFQ1Qg
PSA4Citjb25zdCBfQVRfU1lNTElOS19GT0xMT1cgPSAweDQwMAorY29uc3QgX1BSX01DRV9LSUxM
X0xBVEUgPSAwCitjb25zdCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNP
VVJDRVMgPSAyNjAKK2NvbnN0IF9GU19YRkxBR19FWFRTSVpFID0gMHgwMDAwMDgwMAorY29uc3Qg
X19DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdTID0gMTEwNQorY29uc3QgX0ZTX1hGTEFHX1JU
SU5IRVJJVCA9IDB4MDAwMDAxMDAKK2NvbnN0IF9GUEVfSU5UT1ZGID0gMgorY29uc3QgX1NIUlRf
TUFYID0gX19fU0hSVF9NQVhfXworY29uc3QgX19fTlJfcHJvY2Vzc192bV9yZWFkdiA9IDMxMAor
Y29uc3QgX01TX0RJUlNZTkMgPSAxMjgKK2NvbnN0IF9OX1NZTkNfUFBQID0gMTQKK2NvbnN0IF9f
TUtOT0RfVkVSX0xJTlVYID0gMAorY29uc3QgX0lQX1JFQ1ZGUkFHU0laRSA9IDI1Citjb25zdCBf
SUZMQV9CUl9WTEFOX1NUQVRTX0VOQUJMRUQgPSA0MQorY29uc3QgX1BBR0VfU0hJRlQgPSAxMgor
Y29uc3QgX0lMTF9JTExPUE4gPSAyCitjb25zdCBfTE9DS19SRUFEID0gNjQKK2NvbnN0IF9JRkxB
X0JPTkRfU0xBVkVfQURfQUdHUkVHQVRPUl9JRCA9IDYKK2NvbnN0IF9TT0xfWDI1ID0gMjYyCitj
b25zdCBfSVBUT1NfTE9XREVMQVkgPSAweDEwCitjb25zdCBfX1NZU19JT0NUTF9IID0gMQorY29u
c3QgX1NZU19nZXRzaWQgPSBfX19OUl9nZXRzaWQKK2NvbnN0IF9fX1NfSUZTT0NLID0gMDE0MDAw
MAorY29uc3QgX1BSX1NFVF9NTV9BUkdfRU5EID0gOQorY29uc3QgX0ZGSV9UUkFNUE9MSU5FX1NJ
WkUgPSAyNAorY29uc3QgX0VUSF9QX05DU0kgPSAweDg4RjgKK2NvbnN0IF9QT1JUX1BST0ZJTEVf
UkVTUE9OU0VfSU5QUk9HUkVTUyA9IDI1NworY29uc3QgX1NBX1NUQUNLID0gX1NBX09OU1RBQ0sK
K2NvbnN0IF9JRkFfQU5ZQ0FTVCA9IDUKK2NvbnN0IF9SVEFYX0NDX0FMR08gPSAxNgorY29uc3Qg
X05VRF9QUk9CRSA9IDB4MTAKK2NvbnN0IF9QVFJBQ0VfUEVFS1VTRVIgPSAzCitjb25zdCBfSUNN
UDZfVElNRV9FWENFRURfVFJBTlNJVCA9IDAKK2NvbnN0IF9fU0NfUFJJT1JJVFlfU0NIRURVTElO
RyA9IDEwCitjb25zdCBfX0NTX1BPU0lYX1Y3X0lMUDMyX09GRkJJR19MSUJTID0gMTEzOAorY29u
c3QgX1NZU19yZWFkbGlua2F0ID0gX19fTlJfcmVhZGxpbmthdAorY29uc3QgX1NfSUVYRUMgPSBf
U19JWFVTUgorY29uc3QgX1RDUF9DTE9TSU5HID0gMTEKK2NvbnN0IF9fQklUU19USU1FX0ggPSAx
Citjb25zdCBfSVBfTVNGSUxURVIgPSA0MQorY29uc3QgX0hBVkVfQVNfWDg2X0FFUyA9IDEKK2Nv
bnN0IF9fX1JMSU1JVF9MT0NLUyA9IDEwCitjb25zdCBfVEhfVVJHID0gMHgyMAorY29uc3QgX09f
U1lOQyA9IDA0MDEwMDAwCitjb25zdCBfX1NZU19VSU9fSCA9IDEKK2NvbnN0IF9NQUNTRUNfVkFM
SURBVEVfQ0hFQ0sgPSAxCitjb25zdCBfSUdOQ1IgPSAwMDAwMjAwCitjb25zdCBfX19JTlRQVFJf
V0lEVEhfXyA9IDY0Citjb25zdCBfX0NTX1BPU0lYX1Y3X0xQNjRfT0ZGNjRfQ0ZMQUdTID0gMTE0
MAorY29uc3QgX0JVU19PQkpFUlIgPSAzCitjb25zdCBfVENQX0NPTkdFU1RJT04gPSAxMworY29u
c3QgX19fTlJfcXVlcnlfbW9kdWxlID0gMTc4Citjb25zdCBfTkxNX0ZfUk9PVCA9IDB4MTAwCitj
b25zdCBfRUJBRFJRQyA9IDU2Citjb25zdCBfU1lTX21zZ2N0bCA9IF9fX05SX21zZ2N0bAorY29u
c3QgX0JQRl9NRU1XT1JEUyA9IDE2Citjb25zdCBfSUZMQV9WRl9WTEFOX0lORk8gPSAxCitjb25z
dCBfUlROTEdSUF9ORF9VU0VST1BUID0gMjAKK2NvbnN0IF9BVEZfRE9OVFBVQiA9IDB4NDAKK2Nv
bnN0IF9fX05SX3NodXRkb3duID0gNDgKK2NvbnN0IF9SVE5MR1JQX01QTFNfTkVUQ09ORiA9IDI5
Citjb25zdCBfX1NDX0lOVF9NQVggPSAxMDQKK2NvbnN0IF9fX05SX3NldHVpZCA9IDEwNQorY29u
c3QgX0hVUENMID0gMDAwMjAwMAorY29uc3QgX0FGX1JEUyA9IF9QRl9SRFMKK2NvbnN0IF9QUl9T
RVRfVElNRVJTTEFDSyA9IDI5Citjb25zdCBfQ0xPTkVfU0lHSEFORCA9IDB4MDAwMDA4MDAKK2Nv
bnN0IF9QUl9TRVRfTU1fQVJHX1NUQVJUID0gOAorY29uc3QgX19fTlJfZHVwMiA9IDMzCitjb25z
dCBfX19OUl9kdXAzID0gMjkyCitjb25zdCBfX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1QgPSAy
MDA4MDkKK2NvbnN0IF9QUl9TRVRfTU1fTUFQID0gMTQKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQ
MzJfT0ZGQklHX0NGTEFHUyA9IDExMjAKK2NvbnN0IF9fX05SX3NjaGVkX2dldHNjaGVkdWxlciA9
IDE0NQorY29uc3QgX19TQ19YT1BFTl9DUllQVCA9IDkyCitjb25zdCBfUlRNX05FV1JPVVRFID0g
MjQKK2NvbnN0IF9TSV9MT0FEX1NISUZUID0gMTYKK2NvbnN0IF9QUklkTEVBU1QxNiA9ICJkIgor
Y29uc3QgX01PRF9FU1RFUlJPUiA9IF9BREpfRVNURVJST1IKK2NvbnN0IF9JUFBPUlRfRUZTU0VS
VkVSID0gNTIwCitjb25zdCBfQUZfSUVFRTgwMjE1NCA9IF9QRl9JRUVFODAyMTU0Citjb25zdCBf
U1lTX3NpZ25hbGZkNCA9IF9fX05SX3NpZ25hbGZkNAorY29uc3QgX1RJT0NTU09GVENBUiA9IDB4
NTQxQQorY29uc3QgX19fTlJfdW1vdW50MiA9IDE2NgorY29uc3QgX0lGTEFfVlJGX1RBQkxFID0g
MQorY29uc3QgX1NPX1RJTUVTVEFNUElORyA9IDM3Citjb25zdCBfTVNfUkRPTkxZID0gMQorY29u
c3QgX1NLRl9ORVRfT0ZGID0gKC0weDEwMDAwMCkKK2NvbnN0IF9ETl9BQ0NFU1MgPSAweDAwMDAw
MDAxCitjb25zdCBfU1lTX2FjY2VzcyA9IF9fX05SX2FjY2VzcworY29uc3QgX19TQ19WNl9MUEJJ
R19PRkZCSUcgPSAxNzkKK2NvbnN0IF9JUE9QVF9SRVNFUlZFRDEgPSAweDIwCitjb25zdCBfVENQ
X0NPT0tJRV9NQVggPSAxNgorY29uc3QgX1JNTkVUX0ZMQUdTX0lOR1JFU1NfREVBR0dSRUdBVElP
TiA9ICgxIDw8IDApCitjb25zdCBfTVNfU1RSSUNUQVRJTUUgPSAxNjc3NzIxNgorY29uc3QgX19f
TlJfY2xvY2tfZ2V0dGltZSA9IDIyOAorY29uc3QgX19fTlJfc2VtdGltZWRvcCA9IDIyMAorY29u
c3QgX19VVFNOQU1FX1JFTEVBU0VfTEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSAorY29uc3QgX19f
REVDMzJfTUlOX0VYUF9fID0gKC05NCkKK2NvbnN0IF9YODZfRUZMQUdTX0ZJWEVEX0JJVCA9IDEK
K2NvbnN0IF9IQVZFX1NZU19QUkNUTF9IID0gMQorY29uc3QgX19QT1NJWF9SRUVOVFJBTlRfRlVO
Q1RJT05TID0gMQorY29uc3QgX0JMT0NLX1NJWkVfQklUUyA9IDEwCitjb25zdCBfRUNPTk5SRVNF
VCA9IDEwNAorY29uc3QgX0lGTEFfVkZfSUJfUE9SVF9HVUlEID0gMTEKK2NvbnN0IF9fX0RCTF9E
RUNJTUFMX0RJR19fID0gMTcKK2NvbnN0IF9IQVZFX09QRU5BVCA9IDEKK2NvbnN0IF9UVU5fUEtU
X1NUUklQID0gMHgwMDAxCitjb25zdCBfVlNUT1AgPSA5Citjb25zdCBfSVBUT1NfRFNDUF9BRjEx
ID0gMHgyOAorY29uc3QgX0lQVE9TX0RTQ1BfQUYxMiA9IDB4MzAKK2NvbnN0IF9JUFRPU19EU0NQ
X0FGMTMgPSAweDM4Citjb25zdCBfX19OUl9yZWN2bW1zZyA9IDI5OQorY29uc3QgX19fVVNFX1hP
UEVOMks4ID0gMQorY29uc3QgX1BSX0ZQX0VYQ19ESVYgPSAweDAxMDAwMAorY29uc3QgX0NMT05F
X0RFVEFDSEVEID0gMHgwMDQwMDAwMAorY29uc3QgX1NZU19nZXRfcm9idXN0X2xpc3QgPSBfX19O
Ul9nZXRfcm9idXN0X2xpc3QKK2NvbnN0IF9TT19ERVRBQ0hfQlBGID0gX1NPX0RFVEFDSF9GSUxU
RVIKK2NvbnN0IF9TVEFUWF9BVFRSX0FVVE9NT1VOVCA9IDB4MTAwMAorY29uc3QgX19QT1NJWF9U
SU1FUlMgPSAyMDA4MDkKK2NvbnN0IF9UQ1BJX09QVF9FQ05fU0VFTiA9IDE2Citjb25zdCBfQVJQ
SFJEX0FTSCA9IDc4MQorY29uc3QgX01TX1JNVF9NQVNLID0gKF9NU19SRE9OTFl8X01TX1NZTkNI
Uk9OT1VTfF9NU19NQU5ETE9DS3xfTVNfSV9WRVJTSU9OfCBfTVNfTEFaWVRJTUUpCitjb25zdCBf
U1lTX21xX25vdGlmeSA9IF9fX05SX21xX25vdGlmeQorY29uc3QgX0lGRl9VUCA9IDEKK2NvbnN0
IF9JUFBST1RPX0ZSQUdNRU5UID0gNDQKK2NvbnN0IF9TQ05pTEVBU1QxNiA9ICJoaSIKK2NvbnN0
IF9GX1NFQUxfU0hSSU5LID0gMHgwMDAyCitjb25zdCBfRlNfTk9UQUlMX0ZMID0gMHgwMDAwODAw
MAorY29uc3QgX1NUQVRYX0JUSU1FID0gMHgwODAwCitjb25zdCBfX19JRkxBX0JSUE9SVF9NQVgg
PSAzNQorY29uc3QgX19fTlJfZXhlY3ZlID0gNTkKK2NvbnN0IF9fX1VTRV9FWFRFUk5fSU5MSU5F
UyA9IDEKK2NvbnN0IF9JUF9CSU5EX0FERFJFU1NfTk9fUE9SVCA9IDI0Citjb25zdCBfSU5UOF9N
QVggPSAoMTI3KQorY29uc3QgX01BRFZfU0VRVUVOVElBTCA9IDIKK2NvbnN0IF9GX1dSTENLID0g
MQorY29uc3QgX0lQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwCitjb25zdCBfSVBfUE1UVURJU0Nf
V0FOVCA9IDEKK2NvbnN0IF9TWVNfY3JlYXRlX21vZHVsZSA9IF9fX05SX2NyZWF0ZV9tb2R1bGUK
K2NvbnN0IF9JRkxBX0JSX1JPT1RfSUQgPSAxMAorY29uc3QgX1NZU19waXZvdF9yb290ID0gX19f
TlJfcGl2b3Rfcm9vdAorY29uc3QgX0IyMzA0MDAgPSAwMDEwMDAzCitjb25zdCBfU09MX1RMUyA9
IDI4MgorY29uc3QgX19ORVRfUk9VVEVfSCA9IDEKK2NvbnN0IF9FTElCQkFEID0gODAKK2NvbnN0
IF9SUE1fUENPX1NFVEdMT0JBTCA9IDMKK2NvbnN0IF9CUklER0VfTU9ERV9VTlNQRUMgPSAwCitj
b25zdCBfRU5PQlVGUyA9IDEwNQorY29uc3QgX19fU0hSVF9XSURUSF9fID0gMTYKK2NvbnN0IF9S
VF9DTEFTU19VTlNQRUMgPSAwCitjb25zdCBfX19GTFQxMjhfTUFYX0VYUF9fID0gMTYzODQKK2Nv
bnN0IF9JUFRPU19EU0NQX0FGMjEgPSAweDQ4Citjb25zdCBfSVBUT1NfRFNDUF9BRjIyID0gMHg1
MAorY29uc3QgX0lQVE9TX0RTQ1BfQUYyMyA9IDB4NTgKK2NvbnN0IF9fX0ZMVDMyWF9NQVhfMTBf
RVhQX18gPSAzMDgKK2NvbnN0IF9fU0NfVUlPX01BWElPViA9IDYwCitjb25zdCBfWDg2X0NSMF9F
TV9CSVQgPSAyCitjb25zdCBfTlRGX09GRkxPQURFRCA9IDB4MjAKK2NvbnN0IF9TWVNfaW9wcmlv
X3NldCA9IF9fX05SX2lvcHJpb19zZXQKK2NvbnN0IF9fX05SX2dldHRpbWVvZmRheSA9IDk2Citj
b25zdCBfUFRSQUNFX0NPTlQgPSA3Citjb25zdCBfVElPQ1NQVExDS192YWwgPSAxMDc0MDI1NTIx
Citjb25zdCBfUFRSQUNFX1BFRUtURVhUID0gMQorY29uc3QgX05FVExJTktfWEZSTSA9IDYKK2Nv
bnN0IF9UQ0FfVU5TUEVDID0gMAorY29uc3QgX0VUSF9QXzgwMjFRID0gMHg4MTAwCitjb25zdCBf
SUZMQV9WTEFOX0lOR1JFU1NfUU9TID0gNAorY29uc3QgX0VQT0xMUkRCQU5EID0gMTI4Citjb25z
dCBfU1lTX3VtYXNrID0gX19fTlJfdW1hc2sKK2NvbnN0IF9QQUNLRVRfTVJfVU5JQ0FTVCA9IDMK
K2NvbnN0IF9OTE1fRl9FQ0hPID0gMHgwOAorY29uc3QgX0ZGSV9UWVBFX1NJTlQxNiA9IDgKK2Nv
bnN0IF9fU0NfVFJBQ0VfVVNFUl9FVkVOVF9NQVggPSAyNDUKK2NvbnN0IF9TWVNfcmVjdm1zZyA9
IF9fX05SX3JlY3Ztc2cKK2NvbnN0IF9fX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gPSAxNDcK
K2NvbnN0IF9TWVNfcHBvbGwgPSBfX19OUl9wcG9sbAorY29uc3QgX0ZGSV9UWVBFX1BPSU5URVIg
PSAxNAorY29uc3QgX0lGQV9SVF9QUklPUklUWSA9IDkKK2NvbnN0IF9SVEFYX0lOSVRDV05EID0g
MTEKK2NvbnN0IF9JUF9QTVRVRElTQ19JTlRFUkZBQ0UgPSA0Citjb25zdCBfSUZMQV9QT1JUX1VO
U1BFQyA9IDAKK2NvbnN0IF9TSUdfU0VUTUFTSyA9IDIKK2NvbnN0IF9TT0xfSUNNUFY2ID0gNTgK
K2NvbnN0IF9TQ054MzIgPSAieCIKK2NvbnN0IF9UQ1BfTVNTID0gNTEyCitjb25zdCBfRVRIX1Bf
ODAyMjEgPSAweDg5MTcKK2NvbnN0IF9DUjIgPSAwMDAyMDAwCitjb25zdCBfQ1IzID0gMDAwMzAw
MAorY29uc3QgX1NZU19sc2VlayA9IF9fX05SX2xzZWVrCitjb25zdCBfX0ZJTEVfT0ZGU0VUX0JJ
VFMgPSA2NAorY29uc3QgX19TQ19DT0xMX1dFSUdIVFNfTUFYID0gNDAKK2NvbnN0IF9fU0NfVEhS
RUFEX0NQVVRJTUUgPSAxMzkKK2NvbnN0IF9QT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFX1JSID0g
MQorY29uc3QgX0lOX1VOTU9VTlQgPSAweDAwMDAyMDAwCitjb25zdCBfSVBUT1NfRFNDUF9BRjMx
ID0gMHg2OAorY29uc3QgX0lQVE9TX0RTQ1BfQUYzMiA9IDB4NzAKK2NvbnN0IF9JUFRPU19EU0NQ
X0FGMzMgPSAweDc4Citjb25zdCBfSUZMQV9WWExBTl9SRU1DU1VNX1JYID0gMjIKK2NvbnN0IF9F
UE9MTEVYQ0xVU0lWRSA9IDI2ODQzNTQ1NgorY29uc3QgX19fR0NDX0hBVkVfU1lOQ19DT01QQVJF
X0FORF9TV0FQXzEgPSAxCitjb25zdCBfUFRSQUNFX0dFVEVWRU5UTVNHID0gMTY4OTcKK2NvbnN0
IF9MT0NLX01BTkQgPSAzMgorY29uc3QgX05FVExJTktfVVNFUlNPQ0sgPSAyCitjb25zdCBfRlNf
RU5DUllQVElPTl9NT0RFX0lOVkFMSUQgPSAwCitjb25zdCBfVFVOX1RYX1RJTUVTVEFNUCA9IDEK
K2NvbnN0IF9TWVNfcHdyaXRldjIgPSBfX19OUl9wd3JpdGV2MgorY29uc3QgX19fSU5UX0xFQVNU
MTZfTUFYX18gPSAweDdmZmYKK2NvbnN0IF9TWVNfcHJlYWQ2NCA9IF9fX05SX3ByZWFkNjQKK2Nv
bnN0IF9QUklvTEVBU1QxNiA9ICJvIgorY29uc3QgX1NDTmlMRUFTVDMyID0gImkiCitjb25zdCBf
U1lTX3NlbWN0bCA9IF9fX05SX3NlbWN0bAorY29uc3QgX19QT1NJWF9OR1JPVVBTX01BWCA9IDgK
K2NvbnN0IF9CNDAwMDAwMCA9IDAwMTAwMTcKK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0Vf
SU5WQUxJRCA9IDI1OAorY29uc3QgX1BBQ0tFVF9GQU5PVVRfREFUQSA9IDIyCitjb25zdCBfQ1JF
QUQgPSAwMDAwMjAwCitjb25zdCBfRVRIX1BfUFBQX01QID0gMHgwMDA4Citjb25zdCBfX19GTFQz
MlhfREVDSU1BTF9ESUdfXyA9IDE3Citjb25zdCBfWDg2X0NSNF9QVklfQklUID0gMQorY29uc3Qg
X1NZU19lcG9sbF9jcmVhdGUxID0gX19fTlJfZXBvbGxfY3JlYXRlMQorY29uc3QgX0lGTEFfQlJQ
T1JUX0NPTkZJR19QRU5ESU5HID0gMjAKK2NvbnN0IF9fX0RCTF9NQVhfRVhQX18gPSAxMDI0Citj
b25zdCBfTUFQX1NZTkMgPSAweDgwMDAwCitjb25zdCBfUkVHX1JCUCA9IDEwCitjb25zdCBfRUtF
WVJFVk9LRUQgPSAxMjgKK2NvbnN0IF9fUE9TSVhfVFJBQ0VfRVZFTlRfRklMVEVSID0gLTEKK2Nv
bnN0IF9BRl9MT0NBTCA9IF9QRl9MT0NBTAorY29uc3QgX1JFR19SQlggPSAxMQorY29uc3QgX1ND
TV9USU1FU1RBTVBJTkcgPSBfU09fVElNRVNUQU1QSU5HCitjb25zdCBfX19OUl9nZXRwZ3JwID0g
MTExCitjb25zdCBfX19OUl9ydF9zaWd0aW1lZHdhaXQgPSAxMjgKK2NvbnN0IF9fX0ZEX1pFUk9f
U1RPUyA9ICJzdG9zcSIKK2NvbnN0IF9QVFJBQ0VfUEVFS0RBVEEgPSAyCitjb25zdCBfUFRSQUNF
X1NZU0NBTEwgPSAyNAorY29uc3QgX1NDTnUzMiA9ICJ1IgorY29uc3QgX0xJTlVYX1JFQk9PVF9D
TURfU1dfU1VTUEVORCA9IDB4RDAwMEZDRTIKK2NvbnN0IF9PX0RJUkVDVE9SWSA9IF9fX09fRElS
RUNUT1JZCitjb25zdCBfRVRIRVJUWVBFX1NQUklURSA9IDB4MDUwMAorY29uc3QgX1NPQ0tfUkFX
ID0gMworY29uc3QgX09fTk9BVElNRSA9IF9fX09fTk9BVElNRQorY29uc3QgX0lQVE9TX0RTQ1Bf
QUY0MSA9IDB4ODgKK2NvbnN0IF9JUFRPU19EU0NQX0FGNDIgPSAweDkwCitjb25zdCBfSVBUT1Nf
RFNDUF9BRjQzID0gMHg5OAorY29uc3QgX1RJT0NTUEdSUCA9IDB4NTQxMAorY29uc3QgX05EX09Q
VF9SRURJUkVDVEVEX0hFQURFUiA9IDQKK2NvbnN0IF9SVEFYX0ZFQVRVUkVfQUxMRlJBRyA9ICgx
IDw8IDMpCitjb25zdCBfSUNNUDZfRFNUX1VOUkVBQ0hfQkVZT05EU0NPUEUgPSAyCitjb25zdCBf
SVBPUFRfVElNRVNUQU1QID0gX0lQT1BUX1RTCitjb25zdCBfUlRNX0dFVERDQiA9IDc4Citjb25z
dCBfV09SRF9CSVQgPSAzMgorY29uc3QgX1RDQV9TVEFUUyA9IDMKK2NvbnN0IF9OX1NMSVAgPSAx
Citjb25zdCBfVENQX1NBVkVEX1NZTiA9IDI4Citjb25zdCBfX1NDX0JDX1NUUklOR19NQVggPSAz
OQorY29uc3QgX1JUQVhfRkVBVFVSRV9TQUNLID0gKDEgPDwgMSkKK2NvbnN0IF9fWE9QRU5fU09V
UkNFID0gNzAwCitjb25zdCBfX0FURklMRV9TT1VSQ0UgPSAxCitjb25zdCBfUFRSQUNFX0VWRU5U
X1ZGT1JLX0RPTkUgPSA1Citjb25zdCBfSUNNUDZfUlJfRkxBR1NfUFJFVkRPTkUgPSAweDA4Citj
b25zdCBfRUxOUk5HID0gNDgKK2NvbnN0IF9fUE9TSVhfQUlPX0xJU1RJT19NQVggPSAyCitjb25z
dCBfUlROX1VOSUNBU1QgPSAxCitjb25zdCBfUlRBX01BUksgPSAxNgorY29uc3QgX1NJR1NFR1Yg
PSAxMQorY29uc3QgX05BTUVfTUFYID0gMjU1Citjb25zdCBfQUZfVlNPQ0sgPSBfUEZfVlNPQ0sK
K2NvbnN0IF9GX1VMT0NLID0gMAorY29uc3QgX01TR19CQVRDSCA9IDI2MjE0NAorY29uc3QgX0ZQ
RV9GTFRVTkQgPSA1Citjb25zdCBfX19JRkxBX1ZGX0xJTktfU1RBVEVfTUFYID0gMworY29uc3Qg
X1JUTkxHUlBfRENCID0gMjMKK2NvbnN0IF9FUEVSTSA9IDEKK2NvbnN0IF9SRUdfUkNYID0gMTQK
K2NvbnN0IF9NU19OT0RJUkFUSU1FID0gMjA0OAorY29uc3QgX19URVJNSU9TX0ggPSAxCitjb25z
dCBfX19JTlRNQVhfV0lEVEhfXyA9IDY0Citjb25zdCBfSUZMQV9CUlBPUlRfR1VBUkQgPSA1Citj
b25zdCBfU1lTX3J0X3NpZ3BlbmRpbmcgPSBfX19OUl9ydF9zaWdwZW5kaW5nCitjb25zdCBfSUZM
QV9NQVNURVIgPSAxMAorY29uc3QgX0VPUE5PVFNVUFAgPSA5NQorY29uc3QgX0NTNSA9IDAwMDAw
MDAKK2NvbnN0IF9fUE9TSVgyX1ZFUlNJT04gPSBfX19QT1NJWDJfVEhJU19WRVJTSU9OCitjb25z
dCBfX1NDX0dFVFBXX1JfU0laRV9NQVggPSA3MAorY29uc3QgX0lQX1JFQ1ZFUlIgPSAxMQorY29u
c3QgX0hBVkVfU0lOTCA9IDEKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGQklHX0NGTEFH
UyA9IDExMzYKK2NvbnN0IF9fQ1NfTEZTNjRfTElOVEZMQUdTID0gMTAwNworY29uc3QgX1BSSXhG
QVNUOCA9ICJ4IgorY29uc3QgX1BSSW9MRUFTVDMyID0gIm8iCitjb25zdCBfUFJJT19VU0VSID0g
MgorY29uc3QgX0lGTEFfTkVXX0lGSU5ERVggPSA0OQorY29uc3QgX0lGTEFfVlhMQU5fTE9DQUwg
PSA0Citjb25zdCBfUFJfU0VUX01NX0VYRV9GSUxFID0gMTMKK2NvbnN0IF9UQ1BfU19EQVRBX09V
VCA9ICgxIDw8IDMpCitjb25zdCBfQVRGX01BR0lDID0gMHg4MAorY29uc3QgX05EVFBBX0dDX1NU
QUxFVElNRSA9IDYKK2NvbnN0IF9fX2s4ID0gMQorY29uc3QgX19fSU5UX0ZBU1QzMl9NQVhfXyA9
IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX19YQlM1X0xQQklHX09GRkJJRyA9IC0xCitjb25z
dCBfU0lPQ0RFTE1VTFRJID0gMHg4OTMyCitjb25zdCBfVFVOU0VUTk9DU1VNX3ZhbCA9IDEwNzQw
MjU2NzIKK2NvbnN0IF9fX0xEQkxfREVOT1JNX01JTl9fID0gMS4xCitjb25zdCBfUEZfVU5TUEVD
ID0gMAorY29uc3QgX0JQRl9NT0QgPSAweDkwCitjb25zdCBfUkVHX1JESSA9IDgKK2NvbnN0IF9C
UEZfTUlTQyA9IDB4MDcKK2NvbnN0IF9GX0dFVE9XTiA9IF9fX0ZfR0VUT1dOCitjb25zdCBfSUZM
QV9CUl9NQ0FTVF9MQVNUX01FTUJFUl9DTlQgPSAyOAorY29uc3QgX1RDUE9QVF9TQUNLX1BFUk1J
VFRFRCA9IDQKK2NvbnN0IF9fU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFID0gNzgKK2NvbnN0IF9f
UE9TSVhfVjdfTFA2NF9PRkY2NCA9IDEKK2NvbnN0IF9QRl9JRUVFODAyMTU0ID0gMzYKK2NvbnN0
IF9FTElCTUFYID0gODIKK2NvbnN0IF9CNDgwMCA9IDAwMDAwMTQKK2NvbnN0IF9TWVNfcmVuYW1l
YXQyID0gX19fTlJfcmVuYW1lYXQyCitjb25zdCBfSVBQUk9UT19FTkNBUCA9IDk4Citjb25zdCBf
UkVHX1JEWCA9IDEyCitjb25zdCBfSVBWNl8yMjkySE9QT1BUUyA9IDMKK2NvbnN0IF9fX05FVElO
RVRfSVBfSCA9IDEKK2NvbnN0IF9fX0ZMVDY0WF9IQVNfREVOT1JNX18gPSAxCitjb25zdCBfSUZM
QV9CUlBPUlRfREVTSUdOQVRFRF9DT1NUID0gMTYKK2NvbnN0IF9JTlRfTEVBU1Q4X1dJRFRIID0g
OAorY29uc3QgX05MTVNHRVJSX0FUVFJfT0ZGUyA9IDIKK2NvbnN0IF9TVEFUWF9BVFRSX0VOQ1JZ
UFRFRCA9IDB4MDgwMAorY29uc3QgX1JFR19PTERNQVNLID0gMjEKK2NvbnN0IF9GU19QT0xJQ1lf
RkxBR1NfUEFEXzQgPSAweDAwCitjb25zdCBfVElNRV9PT1AgPSAzCitjb25zdCBfUlRNR1JQX0lQ
VjZfSUZJTkZPID0gMHg4MDAKK2NvbnN0IF9UQ0FfUk9PVF9VTlNQRUMgPSAwCitjb25zdCBfX19X
X0NPTlRJTlVFRCA9IDB4ZmZmZgorY29uc3QgX0lGTEFfVlhMQU5fTEFCRUwgPSAyNgorY29uc3Qg
X0JQRl9KQSA9IDB4MDAKK2NvbnN0IF9fX05SX25hbm9zbGVlcCA9IDM1Citjb25zdCBfQlBGX01B
Sk9SX1ZFUlNJT04gPSAxCitjb25zdCBfX19OUl9nZXRlZ2lkID0gMTA4Citjb25zdCBfUEZfSVVD
ViA9IDMyCitjb25zdCBfUFJfQ0FQX0FNQklFTlRfTE9XRVIgPSAzCitjb25zdCBfTUFQX05PUkVT
RVJWRSA9IDB4MDQwMDAKK2NvbnN0IF9JUE9QVF9FTkQgPSBfSVBPUFRfRU9MCitjb25zdCBfSUZG
X1RBUCA9IDB4MDAwMgorY29uc3QgX19TWVNfVVNFUl9IID0gMQorY29uc3QgX1RVTkdFVElGRl92
YWwgPSAyMTQ3NzY3NTA2Citjb25zdCBfQURKX01BWEVSUk9SID0gMHgwMDA0Citjb25zdCBfUlRO
TEdSUF9JUFY2X0lGSU5GTyA9IDEyCitjb25zdCBfRlNfRElSVFlfRkwgPSAweDAwMDAwMTAwCitj
b25zdCBfX19OUl9mYWxsb2NhdGUgPSAyODUKK2NvbnN0IF9fX05SX3NldF9tZW1wb2xpY3kgPSAy
MzgKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1JPQlVTVF9QUklPX0lOSEVSSVQgPSAyMDA4MDkKK2Nv
bnN0IF9SVEFfTUZDX1NUQVRTID0gMTcKK2NvbnN0IF9DWDg2X1JDUl9CQVNFID0gMHhkYworY29u
c3QgX1JUUFJPVF9LRVJORUwgPSAyCitjb25zdCBfSUNNUDZfRklMVEVSX0JMT0NLT1RIRVJTID0g
MworY29uc3QgX1BSX0ZQRU1VX05PUFJJTlQgPSAxCitjb25zdCBfX19GTFRfTUFOVF9ESUdfXyA9
IDI0Citjb25zdCBfX19OUl9mc3RhdCA9IDUKK2NvbnN0IF9QVFJBQ0VfT19FWElUS0lMTCA9IDEw
NDg1NzYKK2NvbnN0IF9JRkxBX0JSX01DQVNUX0xBU1RfTUVNQkVSX0lOVFZMID0gMzAKK2NvbnN0
IF9ORVRMSU5LX0lORVRfRElBRyA9IF9ORVRMSU5LX1NPQ0tfRElBRworY29uc3QgX05FVExJTktf
U0NTSVRSQU5TUE9SVCA9IDE4Citjb25zdCBfX19OUl9zZWxlY3QgPSAyMworY29uc3QgX0lGTEFf
U1RBVFNfTElOS19PRkZMT0FEX1hTVEFUUyA9IDQKK2NvbnN0IF9fX05SX3BpcGUgPSAyMgorY29u
c3QgX1NBX05PQ0xEV0FJVCA9IDIKK2NvbnN0IF9TWVNfa2V4ZWNfZmlsZV9sb2FkID0gX19fTlJf
a2V4ZWNfZmlsZV9sb2FkCitjb25zdCBfQjIwMCA9IDAwMDAwMDYKK2NvbnN0IF9fUE9TSVhfREVM
QVlUSU1FUl9NQVggPSAzMgorY29uc3QgX1BSX1NFVF9FTkRJQU4gPSAyMAorY29uc3QgX1NZU19l
cG9sbF9wd2FpdCA9IF9fX05SX2Vwb2xsX3B3YWl0Citjb25zdCBfRVRIX1BfTE9DQUxUQUxLID0g
MHgwMDA5Citjb25zdCBfUFJJaUZBU1Q4ID0gImkiCitjb25zdCBfU0VFS19FTkQgPSAyCitjb25z
dCBfVENBX0NIQUlOID0gMTEKK2NvbnN0IF9TWVNfdGltZXJfZGVsZXRlID0gX19fTlJfdGltZXJf
ZGVsZXRlCitjb25zdCBfUkxJTV9JTkZJTklUWSA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3Qg
X19fT0ZGX1RfTUFUQ0hFU19PRkY2NF9UID0gMQorY29uc3QgX1JUTkxHUlBfUEhPTkVUX1JPVVRF
ID0gMjIKK2NvbnN0IF9fSVNPQzExX1NPVVJDRSA9IDEKK2NvbnN0IF9TSUdYQ1BVID0gMjQKK2Nv
bnN0IF9SVE5fTkFUID0gMTAKK2NvbnN0IF9JRkxBX1RVTl9HUk9VUCA9IDIKK2NvbnN0IF9fX0xE
QkxfTUFYX18gPSAxLjEKK2NvbnN0IF9VSU5UX0xFQVNUOF9NQVggPSAoMjU1KQorY29uc3QgX0lD
TVA2X0RTVF9VTlJFQUNIX0FERFIgPSAzCitjb25zdCBfUE9TSVhfRkFEVl9TRVFVRU5USUFMID0g
MgorY29uc3QgX1JUTl9YUkVTT0xWRSA9IDExCitjb25zdCBfdW5peCA9IDEKK2NvbnN0IF9TSVpF
X01BWCA9ICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkKK2NvbnN0IF9TVEFfREVMID0gMHgwMDIwCitj
b25zdCBfTUJfTEVOX01BWCA9IDE2Citjb25zdCBfQ0lCQVVEID0gMDAyMDAzNjAwMDAwCitjb25z
dCBfX19jbG9ja2lkX3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFBCSUdfT0ZG
QklHX0xJTlRGTEFHUyA9IDExNDcKK2NvbnN0IF9BSV9OVU1FUklDSE9TVCA9IDB4MDAwNAorY29u
c3QgX1JFX0RVUF9NQVggPSAoMHg3ZmZmKQorY29uc3QgX0lGTEFfVkZfUkFURSA9IDYKK2NvbnN0
IF9QUklYMzIgPSAiWCIKK2NvbnN0IF9JUFRPU19FQ05fQ0UgPSAweDAzCitjb25zdCBfSUZMQV9C
Ul9QUklPUklUWSA9IDYKK2NvbnN0IF9JUFRPU19QUkVDX05FVENPTlRST0wgPSBfSVBUT1NfQ0xB
U1NfQ1M3Citjb25zdCBfX19OUl9nZXRydXNhZ2UgPSA5OAorY29uc3QgX05VRF9SRUFDSEFCTEUg
PSAweDAyCitjb25zdCBfX19OUl91c2VsaWIgPSAxMzQKK2NvbnN0IF9FUE9MTFdSTk9STSA9IDI1
NgorY29uc3QgX19fSUZMQV9NQVggPSA1MgorY29uc3QgX1RDUF9MSU5HRVIyID0gOAorY29uc3Qg
X1JUTkxHUlBfSVBWNF9ST1VURSA9IDcKK2NvbnN0IF9fU0NfSU5UX01JTiA9IDEwNQorY29uc3Qg
X0VUSU1FID0gNjIKK2NvbnN0IF9JRkxBX0hTUl9TRVFfTlIgPSA1Citjb25zdCBfX1BPU0lYX1NZ
TUxJTktfTUFYID0gMjU1Citjb25zdCBfSUZMQV9QT1JUX1JFU1BPTlNFID0gNworY29uc3QgX0lG
TEFfQlJfTUNBU1RfUk9VVEVSID0gMjIKK2NvbnN0IF9UQ0FfSFdfT0ZGTE9BRCA9IDEyCitjb25z
dCBfSUZMQV9JTkVUNl9UT0tFTiA9IDcKK2NvbnN0IF9USU9DUEtUX0ZMVVNIUkVBRCA9IDEKK2Nv
bnN0IF9TWVNfc2V0X3RpZF9hZGRyZXNzID0gX19fTlJfc2V0X3RpZF9hZGRyZXNzCitjb25zdCBf
QjE5MjAwID0gMDAwMDAxNgorY29uc3QgX0lQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCA9IDEKK2Nv
bnN0IF9fX1NJR19BVE9NSUNfTUlOX18gPSAoLV9fX1NJR19BVE9NSUNfTUFYX18gLSAxKQorY29u
c3QgX0lGTEFfQk9ORF9NSU5fTElOS1MgPSAxOAorY29uc3QgX0lQUFJPVE9fUkFXID0gMjU1Citj
b25zdCBfU1lTX2dldHJlc3VpZCA9IF9fX05SX2dldHJlc3VpZAorY29uc3QgX1JUQV9TUkMgPSAy
Citjb25zdCBfSVBWNl9QTVRVRElTQ19ETyA9IDIKK2NvbnN0IF9SVF9TQ09QRV9MSU5LID0gMjUz
Citjb25zdCBfU1lTX3NjaGVkX3lpZWxkID0gX19fTlJfc2NoZWRfeWllbGQKK2NvbnN0IF9TQV9O
T0NMRFNUT1AgPSAxCitjb25zdCBfTkxBX0ZfTkVTVEVEID0gKDEgPDwgMTUpCitjb25zdCBfRU5B
VkFJTCA9IDExOQorY29uc3QgX0VUSF9QX0VSU1BBTjIgPSAweDIyRUIKK2NvbnN0IF9USU9DU0VS
X1RFTVQgPSAweDAxCitjb25zdCBfSUZMQV9CUlBPUlRfTVVMVElDQVNUX1JPVVRFUiA9IDI1Citj
b25zdCBfT1BPU1QgPSAwMDAwMDAxCitjb25zdCBfV19PSyA9IDIKK2NvbnN0IF9JUE9QVF9SQSA9
IDE0OAorY29uc3QgX0VUSEVSVFlQRV9JUFggPSAweDgxMzcKK2NvbnN0IF9SVE1fR0VUTkVJR0hU
QkwgPSA2NgorY29uc3QgX19TQ19WNl9MUDY0X09GRjY0ID0gMTc4Citjb25zdCBfREVMQVlUSU1F
Ul9NQVggPSAyMTQ3NDgzNjQ3Citjb25zdCBfUFJfR0VUX05BTUUgPSAxNgorY29uc3QgX0lGTEFf
QlJQT1JUX0NPU1QgPSAzCitjb25zdCBfU0lPQ0dJRkJSID0gMHg4OTQwCitjb25zdCBfSUZMQV9N
QUNTRUNfSU5DX1NDSSA9IDkKK2NvbnN0IF9JTl9PTkVTSE9UID0gMHg4MDAwMDAwMAorY29uc3Qg
X1NZU19hZGp0aW1leCA9IF9fX05SX2FkanRpbWV4Citjb25zdCBfSUxMX0NPUFJPQyA9IDcKK2Nv
bnN0IF9JUE9QVF9SUiA9IDcKK2NvbnN0IF9QUl9TVkVfU0VUX1ZMX09ORVhFQyA9ICgxIDw8IDE4
KQorY29uc3QgX1NZU19wd3JpdGU2NCA9IF9fX05SX3B3cml0ZTY0Citjb25zdCBfUFJfU0VUX05B
TUUgPSAxNQorY29uc3QgX1ZRVUlUID0gMQorY29uc3QgX0ZTX1hGTEFHX0VYVFNaSU5IRVJJVCA9
IDB4MDAwMDEwMDAKK2NvbnN0IF9JRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRCA9IDQKK2NvbnN0IF9J
UFRPU19DTEFTU19DUzMgPSAweDYwCitjb25zdCBfX19QVFJESUZGX1dJRFRIX18gPSA2NAorY29u
c3QgX0VUSF9QX0VEU0EgPSAweERBREEKK2NvbnN0IF9TWVNfc2V0aXRpbWVyID0gX19fTlJfc2V0
aXRpbWVyCitjb25zdCBfX19GTFQzMlhfRVBTSUxPTl9fID0gMS4xCitjb25zdCBfX19GTFQxMjhf
TUlOX0VYUF9fID0gKC0xNjM4MSkKK2NvbnN0IF9fX05SX3NldGZzdWlkID0gMTIyCitjb25zdCBf
SVBUT1NfQ0xBU1NfQ1M2ID0gMHhjMAorY29uc3QgX0lGTEFfQlJQT1JUX0JSSURHRV9JRCA9IDE0
Citjb25zdCBfUlRNX0RFTE5FVENPTkYgPSA4MQorY29uc3QgX0lDTVA2X1RJTUVfRVhDRUVERUQg
PSAzCitjb25zdCBfX19OUl9zZXRmc2dpZCA9IDEyMworY29uc3QgX1NJT0NERUxETENJID0gMHg4
OTgxCitjb25zdCBfSVBQT1JUX1RUWUxJTksgPSA4NworY29uc3QgX1NJT0NHQVJQID0gMHg4OTU0
Citjb25zdCBfUlRGX0RFRkFVTFQgPSAweDAwMDEwMDAwCitjb25zdCBfU1lTX21xX29wZW4gPSBf
X19OUl9tcV9vcGVuCitjb25zdCBfU1lTX2Nsb2NrX2dldHJlcyA9IF9fX05SX2Nsb2NrX2dldHJl
cworY29uc3QgX01RX1BSSU9fTUFYID0gMzI3NjgKK2NvbnN0IF9fU0NfQ0hBUl9NQVggPSAxMDIK
K2NvbnN0IF9JUFY2X0FERF9NRU1CRVJTSElQID0gX0lQVjZfSk9JTl9HUk9VUAorY29uc3QgX19T
VEFUX1ZFUl9MSU5VWCA9IDEKK2NvbnN0IF9JRkxBX0JSUE9SVF9MRUFSTklOR19TWU5DID0gMTEK
K2NvbnN0IF9FTk9UTkFNID0gMTE4Citjb25zdCBfVElPQ1BLVF9GTFVTSFdSSVRFID0gMgorY29u
c3QgX01BUF9IVUdFVExCID0gMHg0MDAwMAorY29uc3QgX0hBVkVfRkFDQ0VTU0FUID0gMQorY29u
c3QgX19fREJMX01JTl9FWFBfXyA9ICgtMTAyMSkKK2NvbnN0IF9YODZfQ1I0X1BDSURFX0JJVCA9
IDE3Citjb25zdCBfU0NOaUxFQVNUOCA9ICJoaGkiCitjb25zdCBfSVBWNl9QTVRVRElTQ19QUk9C
RSA9IDMKK2NvbnN0IF9JUFBPUlRfRklOR0VSID0gNzkKK2NvbnN0IF9QT1JUX1VVSURfTUFYID0g
MTYKK2NvbnN0IF9MT05HX0xPTkdfTUFYID0gX19fTE9OR19MT05HX01BWF9fCitjb25zdCBfSU5U
OF9NSU4gPSAoLTEyOCkKK2NvbnN0IF9fX05SX3dyaXRlID0gMQorY29uc3QgX19fU19JRkJMSyA9
IDAwNjAwMDAKK2NvbnN0IF9TQ0hFRF9GSUZPID0gMQorY29uc3QgX19QQVRIX0hFUVVJViA9ICIv
ZXRjL2hvc3RzLmVxdWl2IgorY29uc3QgX0JQRl9NU0ggPSAweGEwCitjb25zdCBfX1BDX1NZTkNf
SU8gPSA5Citjb25zdCBfX1NDX0FEVklTT1JZX0lORk8gPSAxMzIKK2NvbnN0IF9fX05SX3JlY3Zt
c2cgPSA0NworY29uc3QgX0ZBU1lOQyA9IF9PX0FTWU5DCitjb25zdCBfUlRNR1JQX0lQVjZfTVJP
VVRFID0gMHgyMDAKK2NvbnN0IF9TWVNfaW9fcGdldGV2ZW50cyA9IF9fX05SX2lvX3BnZXRldmVu
dHMKK2NvbnN0IF9IQVZFX1NZTkNfQk9PTF9DT01QQVJFX0FORF9TV0FQXzQgPSAxCitjb25zdCBf
RVBPTExfQ1RMX0FERCA9IDEKK2NvbnN0IF9VU0hSVF9NQVggPSAoX1NIUlRfTUFYICogMiArIDEp
Citjb25zdCBfX1NDX1RSQUNFID0gMTgxCitjb25zdCBfUFRSQUNFX1NJTkdMRVNURVAgPSA5Citj
b25zdCBfSUZMQV9MSU5LID0gNQorY29uc3QgX05EVFBBX1JFVFJBTlNfVElNRSA9IDUKK2NvbnN0
IF9IQVZFX1NZTkNfQk9PTF9DT01QQVJFX0FORF9TV0FQXzggPSAxCitjb25zdCBfUlRNX0dFVFRG
SUxURVIgPSA0NgorY29uc3QgX1NZU19tc2dyY3YgPSBfX19OUl9tc2dyY3YKK2NvbnN0IF9fX05S
X21zZ2N0bCA9IDcxCitjb25zdCBfSEFWRV9SRU5BTUVBVCA9IDEKK2NvbnN0IF9JRkZfTkFQSV9G
UkFHUyA9IDB4MDAyMAorY29uc3QgX0lGTEFfWERQX0FUVEFDSEVEID0gMgorY29uc3QgX1NZU19l
cG9sbF9jcmVhdGUgPSBfX19OUl9lcG9sbF9jcmVhdGUKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX0JS
T0FEQ0FTVCA9IDQKK2NvbnN0IF9UQ1BfTUQ1U0lHX0ZMQUdfUFJFRklYID0gMQorY29uc3QgX0lG
TEFfQk9ORF9BRF9VU0VSX1BPUlRfS0VZID0gMjUKK2NvbnN0IF9BUlBIUkRfQURBUFQgPSAyNjQK
K2NvbnN0IF9UVU5BVFRBQ0hGSUxURVJfdmFsID0gMTA3NDgxMjExNworY29uc3QgX1RDUF9NQVhf
V0lOU0hJRlQgPSAxNAorY29uc3QgX0lQUFJPVE9fSUdNUCA9IDIKK2NvbnN0IF9JUF9NQVhfTUVN
QkVSU0hJUFMgPSAyMAorY29uc3QgX0lGTEFfQlJQT1JUX0JBQ0tVUF9QT1JUID0gMzQKK2NvbnN0
IF9SVE1HUlBfREVDbmV0X0lGQUREUiA9IDB4MTAwMAorY29uc3QgX01BRFZfS0VFUE9ORk9SSyA9
IDE5Citjb25zdCBfQUZfQVgyNSA9IF9QRl9BWDI1Citjb25zdCBfSU5UUFRSX01BWCA9ICg5MjIz
MzcyMDM2ODU0Nzc1ODA3KQorY29uc3QgX0FSUEhSRF9FVUk2NCA9IDI3Citjb25zdCBfUlRBX0dB
VEVXQVkgPSA1Citjb25zdCBfU0NOdTE2ID0gImh1IgorY29uc3QgX19fTlJfdHJ1bmNhdGUgPSA3
NgorY29uc3QgX19fTlJfZ2V0cmxpbWl0ID0gOTcKK2NvbnN0IF9fUE9TSVhfQ0hPV05fUkVTVFJJ
Q1RFRCA9IDAKK2NvbnN0IF9fX05SX3ByZWFkNjQgPSAxNworY29uc3QgX1BSX1NFVF9NTV9TVEFS
VF9CUksgPSA2Citjb25zdCBfUlRBWF9MT0NLID0gMQorY29uc3QgX1NZU19nZXRkZW50cyA9IF9f
X05SX2dldGRlbnRzCitjb25zdCBfU09fRE9NQUlOID0gMzkKK2NvbnN0IF9TX0lTVlRYID0gX19f
U19JU1ZUWAorY29uc3QgX1BUUkFDRV9QT0tFREFUQSA9IDUKK2NvbnN0IF9QQUNLRVRfT1JJR0RF
ViA9IDkKK2NvbnN0IF9JUE9QVF9UUyA9IDY4Citjb25zdCBfX19JRkxBX09GRkxPQURfWFNUQVRT
X01BWCA9IDIKK2NvbnN0IF9fU0NfU0hSVF9NQVggPSAxMTMKK2NvbnN0IF9SRUdfUklQID0gMTYK
K2NvbnN0IF9fX0ZMVDY0WF9NQVhfXyA9IDEuMQorY29uc3QgX0lGRl9BTExNVUxUSSA9IDUxMgor
Y29uc3QgX1NBX1NJR0lORk8gPSA0Citjb25zdCBfUkVHX0NTR1NGUyA9IDE4Citjb25zdCBfSUZM
QV9WWExBTl9HQlAgPSAyMworY29uc3QgX19USU1FX0ggPSAxCitjb25zdCBfU1lTX2dldHVpZCA9
IF9fX05SX2dldHVpZAorY29uc3QgX0lQVjZfUE1UVURJU0NfV0FOVCA9IDEKK2NvbnN0IF9fU0Nf
Ml9QQlNfTUVTU0FHRSA9IDE3MQorY29uc3QgX19fTlJfbWVtYmFycmllciA9IDMyNAorY29uc3Qg
X1NZU193YWl0NCA9IF9fX05SX3dhaXQ0Citjb25zdCBfTE9OR19XSURUSCA9IF9fX1dPUkRTSVpF
Citjb25zdCBfQlBGX0sgPSAweDAwCitjb25zdCBfRU5PVFVOSVEgPSA3NgorY29uc3QgX05EX09Q
VF9IT01FX0FHRU5UX0lORk8gPSA4Citjb25zdCBfTklfTkFNRVJFUUQgPSA4Citjb25zdCBfX19w
aWNfXyA9IDIKK2NvbnN0IF9OTE1fRl9EVU1QX0lOVFIgPSAweDEwCitjb25zdCBfRkFMTE9DX0ZM
X1VOU0hBUkVfUkFOR0UgPSAweDQwCitjb25zdCBfTElOVVhfUkVCT09UX0NNRF9QT1dFUl9PRkYg
PSAweDQzMjFGRURDCitjb25zdCBfX19JRkxBX1ZSRl9NQVggPSAyCitjb25zdCBfSUZMQV9JTkVU
Nl9BRERSX0dFTl9NT0RFID0gOAorY29uc3QgX0VOT1NSID0gNjMKK2NvbnN0IF9QUl9HRVRfVElN
SU5HID0gMTMKK2NvbnN0IF9fUE9TSVhfQ19TT1VSQ0UgPSAyMDA4MDkKK2NvbnN0IF9UVU5TRVRU
WEZJTFRFUl92YWwgPSAxMDc0MDI1NjgxCitjb25zdCBfUFJfQ0FQX0FNQklFTlRfSVNfU0VUID0g
MQorY29uc3QgX0lUSU1FUl9QUk9GID0gMgorY29uc3QgX19fU0laRU9GX1BUSFJFQURfTVVURVhB
VFRSX1QgPSA0Citjb25zdCBfU1lTX25hbWVfdG9faGFuZGxlX2F0ID0gX19fTlJfbmFtZV90b19o
YW5kbGVfYXQKK2NvbnN0IF9CNTc2MDAwID0gMDAxMDAwNgorY29uc3QgX1NFRUtfU0VUID0gMAor
Y29uc3QgX0JQRl9PUiA9IDB4NDAKK2NvbnN0IF9QRl9ST1VURSA9IF9QRl9ORVRMSU5LCitjb25z
dCBfX19GTFQ2NF9NSU5fRVhQX18gPSAoLTEwMjEpCitjb25zdCBfSU5fTUFTS19BREQgPSAweDIw
MDAwMDAwCitjb25zdCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMTYKK2Nv
bnN0IF9UQ1BfTUFYU0VHID0gMgorY29uc3QgX05fSVJEQSA9IDExCitjb25zdCBfSVBWNl9SVEhE
Ul9TVFJJQ1QgPSAxCitjb25zdCBfUEFDS0VUX1JFQ1ZfT1VUUFVUID0gMworY29uc3QgX01BRFZf
RE9OVE5FRUQgPSA0Citjb25zdCBfTkRfUkVESVJFQ1QgPSAxMzcKK2NvbnN0IF9fX3NpZ2luZm9f
dF9kZWZpbmVkID0gMQorY29uc3QgX19fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUgPSAy
Citjb25zdCBfUlRBWF9RVUlDS0FDSyA9IDE1Citjb25zdCBfX19GTFQzMl9NQVhfMTBfRVhQX18g
PSAzOAorY29uc3QgX0JQRl9NVUwgPSAweDIwCitjb25zdCBfU1lTX2Vwb2xsX3dhaXRfb2xkID0g
X19fTlJfZXBvbGxfd2FpdF9vbGQKK2NvbnN0IF9fX0lGTEFfSVBWTEFOX01BWCA9IDMKK2NvbnN0
IF9JUF9QTVRVRElTQ19QUk9CRSA9IDMKK2NvbnN0IF9TWVNfc3lzZnMgPSBfX19OUl9zeXNmcwor
Y29uc3QgX19fT1BUSU1JWkVfXyA9IDEKK2NvbnN0IF9JUFRPU19QUkVDX0lOVEVSTkVUQ09OVFJP
TCA9IF9JUFRPU19DTEFTU19DUzYKK2NvbnN0IF9IQVZFX0FTSU5MID0gMQorY29uc3QgX0lQVjZf
VU5JQ0FTVF9JRiA9IDc2Citjb25zdCBfTkxNX0ZfQVRPTUlDID0gMHg0MDAKK2NvbnN0IF9GU19Y
RkxBR19OT1NZTUxJTktTID0gMHgwMDAwMDQwMAorY29uc3QgX0ZfTE9DSyA9IDEKK2NvbnN0IF9J
Q01QNl9QQVJBTVBST0JfSEVBREVSID0gMAorY29uc3QgX0VUSF9QX0lFRUU4MDIxNTQgPSAweDAw
RjYKK2NvbnN0IF9TSU9DR0lGSFdBRERSID0gMHg4OTI3Citjb25zdCBfU1lTX3NlbWdldCA9IF9f
X05SX3NlbWdldAorY29uc3QgX19fUFRIUkVBRF9NVVRFWF9OVVNFUlNfQUZURVJfS0lORCA9IDAK
K2NvbnN0IF9QUl9TRVRfTU1fTUFQX1NJWkUgPSAxNQorY29uc3QgX1JUTl9CTEFDS0hPTEUgPSA2
Citjb25zdCBfU1lTX3BrZXlfYWxsb2MgPSBfX19OUl9wa2V5X2FsbG9jCitjb25zdCBfQUZfSU5F
VDYgPSBfUEZfSU5FVDYKK2NvbnN0IF9OTEFfSERSTEVOX3ZhbCA9IDQKK2NvbnN0IF9IQVZFX1JF
TU9WRVhBVFRSID0gMQorY29uc3QgX0lDTVA2X1JSX0ZMQUdTX1NQRUNTSVRFID0gMHgxMAorY29u
c3QgX19fTlJfc2V0bnMgPSAzMDgKK2NvbnN0IF9fX1dOT1RIUkVBRCA9IDB4MjAwMDAwMDAKK2Nv
bnN0IF9FVEhfUF9MT09QID0gMHgwMDYwCitjb25zdCBfVkVPTCA9IDExCitjb25zdCBfTVNfTk9E
RVYgPSA0Citjb25zdCBfU09fWkVST0NPUFkgPSA2MAorY29uc3QgX19fTlJfZ2V0cmFuZG9tID0g
MzE4Citjb25zdCBfUlRGX0FMTE9OTElOSyA9IDB4MDAwMjAwMDAKK2NvbnN0IF9SVE5MR1JQX0RF
Q25ldF9SVUxFID0gMTYKK2NvbnN0IF9fX05SX21iaW5kID0gMjM3Citjb25zdCBfTVNfS0VSTk1P
VU5UID0gNDE5NDMwNAorY29uc3QgX0lVQ0xDID0gMDAwMTAwMAorY29uc3QgX0hBVkVfU0VNX1RJ
TUVEV0FJVCA9IDEKK2NvbnN0IF9fX1BSRUZJWF9NQVggPSAzCitjb25zdCBfTUFQX1NUQUNLID0g
MHgyMDAwMAorY29uc3QgX1NZU19wZXJzb25hbGl0eSA9IF9fX05SX3BlcnNvbmFsaXR5Citjb25z
dCBfX1BPU0lYX01PTk9UT05JQ19DTE9DSyA9IDAKK2NvbnN0IF9VVElNRV9PTUlUID0gKCgxIDw8
IDMwKSAtIDIpCitjb25zdCBfUFJJb0xFQVNUOCA9ICJvIgorY29uc3QgX1BSX0ZQX0VYQ19JTlYg
PSAweDEwMDAwMAorY29uc3QgX0VUSEVSVFlQRV9WTEFOID0gMHg4MTAwCitjb25zdCBfUlRQUk9U
X0dBVEVEID0gOAorY29uc3QgX01TX01PVkUgPSA4MTkyCitjb25zdCBfSUZMQV9CUlBPUlRfREVT
SUdOQVRFRF9QT1JUID0gMTUKK2NvbnN0IF9QUl9TRVRfVFNDID0gMjYKK2NvbnN0IF9fU1REQ19Q
UkVERUZfSCA9IDEKK2NvbnN0IF9JRkZfQVVUT01FRElBID0gMTYzODQKK2NvbnN0IF9fX1VTRV9G
T1JUSUZZX0xFVkVMID0gMAorY29uc3QgX0VCRk9OVCA9IDU5Citjb25zdCBfX19ORFRBX01BWCA9
IDEwCitjb25zdCBfX19TSVpFT0ZfTE9OR19MT05HX18gPSA4Citjb25zdCBfSVBWNl9QTVRVRElT
Q19ET05UID0gMAorY29uc3QgX0lQVkxBTl9NT0RFX0wzUyA9IDIKK2NvbnN0IF9JRkxBX1RVTl9U
WVBFID0gMworY29uc3QgX09fQ0xPRVhFQyA9IF9fX09fQ0xPRVhFQworY29uc3QgX1NLRl9BRF9N
QVJLID0gMjAKK2NvbnN0IF9fX0ZMVDY0WF9ERU5PUk1fTUlOX18gPSAxLjEKK2NvbnN0IF9JRkZf
U0xBVkUgPSAyMDQ4Citjb25zdCBfRFRfUkVHID0gOAorY29uc3QgX0ZBTExPQ19GTF9QVU5DSF9I
T0xFID0gMHgwMgorY29uc3QgX0FSUEhSRF9ORVRST00gPSAwCitjb25zdCBfX19MREJMX0RJR19f
ID0gMTgKK2NvbnN0IF9fU0NfVVNFUl9HUk9VUFMgPSAxNjYKK2NvbnN0IF9fVU5JU1REX0ggPSAx
Citjb25zdCBfVENQX01BWFdJTiA9IDY1NTM1Citjb25zdCBfRlNfTk9EVU1QX0ZMID0gMHgwMDAw
MDA0MAorY29uc3QgX1RJT0NTTENLVFJNSU9TID0gMHg1NDU3Citjb25zdCBfX19OUl9maW5pdF9t
b2R1bGUgPSAzMTMKK2NvbnN0IF9TS0ZfQURfTUFYID0gNjQKK2NvbnN0IF9SRUdfUjE0ID0gNgor
Y29uc3QgX0ZBTExPQ19GTF9aRVJPX1JBTkdFID0gMHgxMAorY29uc3QgX0lGTEFfQlJfR0NfVElN
RVIgPSAxOQorY29uc3QgX19fTlJfZmFkdmlzZTY0ID0gMjIxCitjb25zdCBfT19OREVMQVkgPSBf
T19OT05CTE9DSworY29uc3QgX0VQT0xMUFJJID0gMgorY29uc3QgX0VBSV9GQUlMID0gLTQKK2Nv
bnN0IF9fX2dsaWJjX2M5OV9mbGV4YXJyX2F2YWlsYWJsZSA9IDEKK2NvbnN0IF9fX05SX2lvX3N1
Ym1pdCA9IDIwOQorY29uc3QgX1JUQV9UVExfUFJPUEFHQVRFID0gMjYKK2NvbnN0IF9OX1NNU0JM
T0NLID0gMTIKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX0NQVVRJTUUgPSAwCitjb25zdCBfVENQSV9P
UFRfU0FDSyA9IDIKK2NvbnN0IF9USU9DR0VURCA9IDB4NTQyNAorY29uc3QgX0NMT05FX1NZU1ZT
RU0gPSAweDAwMDQwMDAwCitjb25zdCBfTkVUTElOS19TRUxJTlVYID0gNworY29uc3QgX0NMT0NL
X1RIUkVBRF9DUFVUSU1FX0lEID0gMworY29uc3QgX19fTlJfY2xvY2tfbmFub3NsZWVwID0gMjMw
Citjb25zdCBfX1NDX0NIQVJfQklUID0gMTAxCitjb25zdCBfU0FfUkVTRVRIQU5EID0gMHg4MDAw
MDAwMAorY29uc3QgX0FESl9TVEFUVVMgPSAweDAwMTAKK2NvbnN0IF9QUl9TRVRfUFRSQUNFUiA9
IDB4NTk2MTZkNjEKK2NvbnN0IF9QUl9TRVRfTU1fQlJLID0gNworY29uc3QgX19fSUxQMzJfT0ZG
QklHX0NGTEFHUyA9ICItbTMyIC1EX0xBUkdFRklMRV9TT1VSQ0UgLURfRklMRV9PRkZTRVRfQklU
Uz02NCIKK2NvbnN0IF9UQ1BfRkFTVE9QRU5fS0VZID0gMzMKK2NvbnN0IF9fU0NfU0hBUkVEX01F
TU9SWV9PQkpFQ1RTID0gMjIKK2NvbnN0IF9SVE1HUlBfSVBWNl9ST1VURSA9IDB4NDAwCitjb25z
dCBfSUZMQV9CUlBPUlRfUFJJT1JJVFkgPSAyCitjb25zdCBfQjMwMDAwMDAgPSAwMDEwMDE1Citj
b25zdCBfTVNfTUdDX1ZBTCA9IDB4QzBFRDAwMDAKK2NvbnN0IF9BREpfRVNURVJST1IgPSAweDAw
MDgKK2NvbnN0IF9SVE5IX0ZfTElOS0RPV04gPSAxNgorY29uc3QgX0VUSF9QX0ROQV9ETCA9IDB4
NjAwMQorY29uc3QgX1BSX1NFVF9USU1JTkcgPSAxNAorY29uc3QgX05FVExJTktfSVNDU0kgPSA4
Citjb25zdCBfX19OREFfTUFYID0gMTIKK2NvbnN0IF9fX05SX3NldGdyb3VwcyA9IDExNgorY29u
c3QgX19YT1BFTl9MSU1fSCA9IDEKK2NvbnN0IF9fX09SREVSX0JJR19FTkRJQU5fXyA9IDQzMjEK
K2NvbnN0IF9BUlBIUkRfWDI1ID0gMjcxCitjb25zdCBfTExPTkdfTUFYID0gX19fTE9OR19MT05H
X01BWF9fCitjb25zdCBfX0NTX0xGU19DRkxBR1MgPSAxMDAwCitjb25zdCBfX1NZU0NBTExfSCA9
IDEKK2NvbnN0IF9BUlBIUkRfRUNPTkVUID0gNzgyCitjb25zdCBfX19HTlVDX1NURENfSU5MSU5F
X18gPSAxCitjb25zdCBfTVNfUFJJVkFURSA9IDI2MjE0NAorY29uc3QgX01BQ1ZMQU5fTUFDQURE
Ul9ERUwgPSAxCitjb25zdCBfU0NIRURfUkVTRVRfT05fRk9SSyA9IDB4NDAwMDAwMDAKK2NvbnN0
IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfU1VDQ0VTUyA9IDI1NgorY29uc3QgX1BSX0dFVF9EVU1Q
QUJMRSA9IDMKK2NvbnN0IF9OREFfVU5TUEVDID0gMAorY29uc3QgX19TQ19SRV9EVVBfTUFYID0g
NDQKK2NvbnN0IF9IT1NUX05PVF9GT1VORCA9IDEKK2NvbnN0IF9TWVNfcHJlYWR2ID0gX19fTlJf
cHJlYWR2Citjb25zdCBfTU9EX01BWEVSUk9SID0gX0FESl9NQVhFUlJPUgorY29uc3QgX09fRElS
RUNUID0gX19fT19ESVJFQ1QKK2NvbnN0IF9JRkxBX0JPTkRfQUxMX1NMQVZFU19BQ1RJVkUgPSAx
NworY29uc3QgX19TQ19QSUlfSU5URVJORVQgPSA1NgorY29uc3QgX1RVTlNFVFNOREJVRl92YWwg
PSAxMDc0MDI1Njg0Citjb25zdCBfUlROTEdSUF9JUFY2X0lGQUREUiA9IDkKK2NvbnN0IF9TVEFU
WF9OTElOSyA9IDB4MDAwNAorY29uc3QgX19fSUZMQV9QT1JUX01BWCA9IDgKK2NvbnN0IF9CVVNf
QURSRVJSID0gMgorY29uc3QgX1JUTV9ORVdBRERSID0gMjAKK2NvbnN0IF9USU9DTUlXQUlUID0g
MHg1NDVDCitjb25zdCBfUlRNX0RFTE5TSUQgPSA4OQorY29uc3QgX0hBVkVfU1lTX1NZU0lORk9f
SCA9IDEKK2NvbnN0IF9fX05SX3N0YXQgPSA0Citjb25zdCBfU1BMSUNFX0ZfTU9SRSA9IDQKK2Nv
bnN0IF9JRkFfRl9NQ0FVVE9KT0lOID0gMHg0MDAKK2NvbnN0IF9TWVNfaW9wcmlvX2dldCA9IF9f
X05SX2lvcHJpb19nZXQKK2NvbnN0IF9IQVZFX0RMX0lURVJBVEVfUEhEUiA9IDEKK2NvbnN0IF9f
X0lGTEFfVkZfU1RBVFNfTUFYID0gOQorY29uc3QgX1NZU19pbml0X21vZHVsZSA9IF9fX05SX2lu
aXRfbW9kdWxlCitjb25zdCBfUlRNX0dFVEFOWUNBU1QgPSA2MgorY29uc3QgX19QT1NJWF9NUV9P
UEVOX01BWCA9IDgKK2NvbnN0IF9TWVNfbGdldHhhdHRyID0gX19fTlJfbGdldHhhdHRyCitjb25z
dCBfU1lTX3JtZGlyID0gX19fTlJfcm1kaXIKK2NvbnN0IF9FVEhFUlRZUEVfQUFSUCA9IDB4ODBG
MworY29uc3QgX1BBQ0tBR0VfVEFSTkFNRSA9ICJsaWJnbyIKK2NvbnN0IF9JTlRfTEVBU1Q4X01B
WCA9ICgxMjcpCitjb25zdCBfSVBUT1NfUFJFQ19ST1VUSU5FID0gX0lQVE9TX0NMQVNTX0NTMAor
Y29uc3QgX0lGQV9GX09QVElNSVNUSUMgPSAweDA0Citjb25zdCBfTkRUUEFfVU5TUEVDID0gMAor
Y29uc3QgX19fTlJfcHNlbGVjdDYgPSAyNzAKK2NvbnN0IF9GX0dFVFNJRyA9IF9fX0ZfR0VUU0lH
Citjb25zdCBfU09fV0lGSV9TVEFUVVMgPSA0MQorY29uc3QgX1NfSVdPVEggPSAoX1NfSVdHUlAg
Pj4gMykKK2NvbnN0IF9JTlBDSyA9IDAwMDAwMjAKK2NvbnN0IF9ORFRQQV9BUFBfUFJPQkVTID0g
OQorY29uc3QgX19fT19MQVJHRUZJTEUgPSAwCitjb25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfVlRJ
RF9WRVJTSU9OX1ZJT0FMVElPTiA9IDUKK2NvbnN0IF9fX05SX3NldHhhdHRyID0gMTg4Citjb25z
dCBfX19GTFQzMl9IQVNfSU5GSU5JVFlfXyA9IDEKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdf
T0ZGQklHX0xERkxBR1MgPSAxMTI5Citjb25zdCBfUFJfR0VUX1RTQyA9IDI1Citjb25zdCBfUlRN
X0dFVE5FSUdIID0gMzAKK2NvbnN0IF9QVFJBQ0VfU0VUT1BUSU9OUyA9IDE2ODk2Citjb25zdCBf
X19OUl9lcG9sbF9jcmVhdGUgPSAyMTMKK2NvbnN0IF9JUFRPU19SRUxJQUJJTElUWSA9IDB4MDQK
K2NvbnN0IF9BUlBIUkRfRlJBRCA9IDc3MAorY29uc3QgX1NJT0NTSUZCUkRBRERSID0gMHg4OTFh
Citjb25zdCBfX19VSU5UUFRSX01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfX19O
Ul9jaG93biA9IDkyCitjb25zdCBfX19OUl9mYW5vdGlmeV9pbml0ID0gMzAwCitjb25zdCBfQVRf
Tk9fQVVUT01PVU5UID0gMHg4MDAKK2NvbnN0IF9fX05SX2Vwb2xsX2NyZWF0ZTEgPSAyOTEKK2Nv
bnN0IF9TWVNfc2V0cmVzZ2lkID0gX19fTlJfc2V0cmVzZ2lkCitjb25zdCBfTl9QUk9GSUJVU19G
REwgPSAxMAorY29uc3QgX0JQRl9YT1IgPSAweGEwCitjb25zdCBfSUNNUDZfUlJfRkxBR1NfUkVR
UkVTVUxUID0gMHg0MAorY29uc3QgX0lGTEFfSVBPSUJfTU9ERSA9IDIKK2NvbnN0IF9NQVBfU0hB
UkVEX1ZBTElEQVRFID0gMHgwMworY29uc3QgX1NZU19xdWVyeV9tb2R1bGUgPSBfX19OUl9xdWVy
eV9tb2R1bGUKK2NvbnN0IF9TWVNfdGltZXJfZ2V0b3ZlcnJ1biA9IF9fX05SX3RpbWVyX2dldG92
ZXJydW4KK2NvbnN0IF9fX05SX2ZyZW1vdmV4YXR0ciA9IDE5OQorY29uc3QgX1NJWkVfV0lEVEgg
PSBfX19XT1JEU0laRQorY29uc3QgX0lGQV9GX1NFQ09OREFSWSA9IDB4MDEKK2NvbnN0IF9fU0Nf
Sk9CX0NPTlRST0wgPSA3Citjb25zdCBfX19OUl9tb3ZlX3BhZ2VzID0gMjc5Citjb25zdCBfSUZM
QV9DQVJSSUVSX0NIQU5HRVMgPSAzNQorY29uc3QgX0lORVQ2X0FERFJTVFJMRU4gPSA0NgorY29u
c3QgX0lGTEFfSVBPSUJfUEtFWSA9IDEKK2NvbnN0IF9JUFBST1RPX0RDQ1AgPSAzMworY29uc3Qg
X1NfSVJHUlAgPSAoX1NfSVJVU1IgPj4gMykKK2NvbnN0IF9TT0xfSVJEQSA9IDI2NgorY29uc3Qg
X0hBVkVfVU5TSEFSRSA9IDEKK2NvbnN0IF9TVEFUWF9BVFRSX0lNTVVUQUJMRSA9IDB4MDAxMAor
Y29uc3QgX19TQ19GU1lOQyA9IDE1Citjb25zdCBfX19OUl9saXN0ZW4gPSA1MAorY29uc3QgX1ND
TnhMRUFTVDE2ID0gImh4IgorY29uc3QgX0lGTEFfTUFDU0VDX1BBRCA9IDE0Citjb25zdCBfQUlf
Q0FOT05JRE4gPSAweDAwODAKK2NvbnN0IF9QUl9NQ0VfS0lMTF9HRVQgPSAzNAorY29uc3QgX1RV
Tl9GX0NTVU0gPSAweDAxCitjb25zdCBfX19GTFQzMlhfTUFYX0VYUF9fID0gMTAyNAorY29uc3Qg
X0FGX1BBQ0tFVCA9IF9QRl9QQUNLRVQKK2NvbnN0IF9JRkxBX0JSUE9SVF9NT0RFID0gNAorY29u
c3QgX1BBQ0tFVF9MT1NTID0gMTQKK2NvbnN0IF9XQ0hBUl9XSURUSCA9IDMyCitjb25zdCBfU09M
X05FVEJFVUkgPSAyNjcKK2NvbnN0IF9fX05SX2ZnZXR4YXR0ciA9IDE5MworY29uc3QgX19TQ19Y
QlM1X0lMUDMyX09GRjMyID0gMTI1Citjb25zdCBfVENQX1FVSUNLQUNLID0gMTIKK2NvbnN0IF9P
X1RNUEZJTEUgPSBfX19PX1RNUEZJTEUKK2NvbnN0IF9FRkJJRyA9IDI3Citjb25zdCBfX1NDXzJf
Q19CSU5EID0gNDcKK2NvbnN0IF9JUFRPU19DTEFTU19DUzAgPSAweDAwCitjb25zdCBfSVBUT1Nf
Q0xBU1NfQ1MxID0gMHgyMAorY29uc3QgX0lQVE9TX0NMQVNTX0NTMiA9IDB4NDAKK2NvbnN0IF9T
WVNfZnN5bmMgPSBfX19OUl9mc3luYworY29uc3QgX0lQVE9TX0NMQVNTX0NTNCA9IDB4ODAKK2Nv
bnN0IF9JUFRPU19DTEFTU19DUzUgPSAweGEwCitjb25zdCBfX0lPQ19ESVJTSElGVCA9IChfX0lP
Q19TSVpFU0hJRlQrX19JT0NfU0laRUJJVFMpCitjb25zdCBfSVBUT1NfQ0xBU1NfQ1M3ID0gMHhl
MAorY29uc3QgX19fRkxUNjRYX0RJR19fID0gMTgKK2NvbnN0IF9UQ1BfRkFTVE9QRU5fTk9fQ09P
S0lFID0gMzQKK2NvbnN0IF9MSU5VWF9SRUJPT1RfTUFHSUMyQSA9IDg1MDcyMjc4Citjb25zdCBf
UFJfTUNFX0tJTExfQ0xFQVIgPSAwCitjb25zdCBfUFRSQUNFX09fTUFTSyA9IDMxNDU5ODMKK2Nv
bnN0IF9FWERFViA9IDE4Citjb25zdCBfTlVEX0lOQ09NUExFVEUgPSAweDAxCitjb25zdCBfQUZf
S0VZID0gX1BGX0tFWQorY29uc3QgX1g4Nl9DUjNfUENEX0JJVCA9IDQKK2NvbnN0IF9QVFJBQ0Vf
U0VUU0lHSU5GTyA9IDE2ODk5Citjb25zdCBfRUwzSExUID0gNDYKK2NvbnN0IF9TWVNfZmFub3Rp
ZnlfbWFyayA9IF9fX05SX2Zhbm90aWZ5X21hcmsKK2NvbnN0IF9fQklUU19FUlJOT19IID0gMQor
Y29uc3QgX19fTlJfdGltZXJfZ2V0b3ZlcnJ1biA9IDIyNQorY29uc3QgX0lQVjZfVENMQVNTID0g
NjcKK2NvbnN0IF9ORFRBX1BBUk1TID0gNgorY29uc3QgX0FGX1gyNSA9IF9QRl9YMjUKK2NvbnN0
IF9CU0RMWSA9IDAwMjAwMDAKK2NvbnN0IF9NU0dfUFJPWFkgPSAxNgorY29uc3QgX0lGTEFfTUFD
U0VDX1VOU1BFQyA9IDAKK2NvbnN0IF9fX05SX2Fmc19zeXNjYWxsID0gMTgzCitjb25zdCBfTUZE
X0NMT0VYRUMgPSAxCitjb25zdCBfX19VSU5UX0ZBU1Q4X01BWF9fID0gMHhmZgorY29uc3QgX1NU
QVRYX1NJWkUgPSAweDAyMDAKK2NvbnN0IF9fU0NfQ0hBUl9NSU4gPSAxMDMKK2NvbnN0IF9GU19D
T01QUl9GTCA9IDB4MDAwMDAwMDQKK2NvbnN0IF9JQ01QNl9SUl9SRVNVTFRfRkxBR1NfT09CID0g
MHgwMjAwCitjb25zdCBfU0NNX1RJTUVTVEFNUElOR19QS1RJTkZPID0gNTgKK2NvbnN0IF9WRU9G
ID0gNAorY29uc3QgX19fTlJfbXFfb3BlbiA9IDI0MAorY29uc3QgX0lGRl9NQVNURVIgPSAxMDI0
Citjb25zdCBfUFRSQUNFX1NJTkdMRUJMT0NLID0gMzMKK2NvbnN0IF9TWVNfZ2V0dGltZW9mZGF5
ID0gX19fTlJfZ2V0dGltZW9mZGF5Citjb25zdCBfX19OUl9hY2NlcHQgPSA0MworY29uc3QgX19Q
T1NJWF9NRVNTQUdFX1BBU1NJTkcgPSAyMDA4MDkKK2NvbnN0IF9fX1BUUkRJRkZfTUFYX18gPSAw
eDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9TSV9LRVJORUwgPSAxMjgKK2NvbnN0IF9fU0NfQkNf
QkFTRV9NQVggPSAzNgorY29uc3QgX1RVTlNFVExJTktfdmFsID0gMTA3NDAyNTY3NworY29uc3Qg
X1NZU19zeW5jX2ZpbGVfcmFuZ2UgPSBfX19OUl9zeW5jX2ZpbGVfcmFuZ2UKK2NvbnN0IF9BUlBI
UkRfQ1NMSVAgPSAyNTcKK2NvbnN0IF9QUl9GUF9FWENfT1ZGID0gMHgwMjAwMDAKK2NvbnN0IF9f
X05SX3NvY2tldHBhaXIgPSA1MworY29uc3QgX1NZU191c2VyZmF1bHRmZCA9IF9fX05SX3VzZXJm
YXVsdGZkCitjb25zdCBfSUZMQV9CT05EX1BSSU1BUlkgPSAxMQorY29uc3QgX0NMRF9EVU1QRUQg
PSAzCitjb25zdCBfU1lTX21pZ3JhdGVfcGFnZXMgPSBfX19OUl9taWdyYXRlX3BhZ2VzCitjb25z
dCBfQ1NJWkUgPSAwMDAwMDYwCitjb25zdCBfUlRNR1JQX1RDID0gOAorY29uc3QgX1JUTV9ORVdD
SEFJTiA9IDEwMAorY29uc3QgX0VBQ0NFUyA9IDEzCitjb25zdCBfX1BPU0lYX01BWF9DQU5PTiA9
IDI1NQorY29uc3QgX1JUUFJPVF9aRUJSQSA9IDExCitjb25zdCBfX1BPU0lYX1RIUkVBRF9USFJF
QURTX01BWCA9IDY0Citjb25zdCBfQ0xPQ0tfQk9PVFRJTUUgPSA3Citjb25zdCBfX194ODZfNjQg
PSAxCitjb25zdCBfQ1FVSVQgPSAwMzQKK2NvbnN0IF9USU9DR1BUTl92YWwgPSAyMTQ3NzY3MzQ0
Citjb25zdCBfX1NDX1hPUEVOX1ZFUlNJT04gPSA4OQorY29uc3QgX19fSU5UMTZfTUFYX18gPSAw
eDdmZmYKK2NvbnN0IF9fU0NfTkxfU0VUTUFYID0gMTIzCitjb25zdCBfX19OUl9pb19jYW5jZWwg
PSAyMTAKK2NvbnN0IF9fU1lTX0NERUZTX0ggPSAxCitjb25zdCBfU0NOeExFQVNUMzIgPSAieCIK
K2NvbnN0IF9FVEhfUF9NT0JJVEVYID0gMHgwMDE1Citjb25zdCBfSUZMQV9FVkVOVF9CT05ESU5H
X0ZBSUxPVkVSID0gMworY29uc3QgX1NJX1RJTUVSID0gLTIKK2NvbnN0IF9FTk9LRVkgPSAxMjYK
K2NvbnN0IF9JRkxBX0JSUE9SVF9UT1BPTE9HWV9DSEFOR0VfQUNLID0gMTkKK2NvbnN0IF9BUlBI
UkRfQ1NMSVA2ID0gMjU5Citjb25zdCBfX19XSU5UX01JTl9fID0gMAorY29uc3QgX19fU19JRlJF
RyA9IDAxMDAwMDAKK2NvbnN0IF9JTlRQVFJfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEp
Citjb25zdCBfX19TX0lTVUlEID0gMDQwMDAKK2NvbnN0IF9QUl9TRVRfU0VDVVJFQklUUyA9IDI4
Citjb25zdCBfRVBPTExXUkJBTkQgPSA1MTIKK2NvbnN0IF9fTEZTNjRfQVNZTkNIUk9OT1VTX0lP
ID0gMQorY29uc3QgX1NLRl9BRF9SWEhBU0ggPSAzMgorY29uc3QgX1BGX0xPQ0FMID0gMQorY29u
c3QgX0VOT1RTT0NLID0gODgKK2NvbnN0IF9TX0lGTVQgPSBfX19TX0lGTVQKK2NvbnN0IF9fX05S
X2tjbXAgPSAzMTIKK2NvbnN0IF9TWVNfc3BsaWNlID0gX19fTlJfc3BsaWNlCitjb25zdCBfX1BP
U0lYX1RSQUNFX0lOSEVSSVQgPSAtMQorY29uc3QgX19TQ19TSFJUX01JTiA9IDExNAorY29uc3Qg
X0FSUEhSRF9MQVBCID0gNTE2Citjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9LRVkg
PSA0Citjb25zdCBfQ0xPQ0tfTU9OT1RPTklDX1JBVyA9IDQKK2NvbnN0IF9NQ0FTVF9FWENMVURF
ID0gMAorY29uc3QgX1NJT0NTSUZNVFUgPSAweDg5MjIKK2NvbnN0IF9BVF9TVEFUWF9GT1JDRV9T
WU5DID0gMHgyMDAwCitjb25zdCBfU0lPQ0dJRkNPTkYgPSAweDg5MTIKK2NvbnN0IF9GU19TRUNS
TV9GTCA9IDB4MDAwMDAwMDEKK2NvbnN0IF9fX0lOVF9GQVNUMzJfV0lEVEhfXyA9IDY0Citjb25z
dCBfX1BDX01BWF9DQU5PTiA9IDEKK2NvbnN0IF9GSU9DTEVYID0gMHg1NDUxCitjb25zdCBfX19J
TFAzMl9PRkZCSUdfTERGTEFHUyA9ICItbTMyIgorY29uc3QgX0lGTEFfSFNSX01VTFRJQ0FTVF9T
UEVDID0gMworY29uc3QgX19fSU5UX0ZBU1QxNl9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgor
Y29uc3QgX1NZU19tbG9ja2FsbCA9IF9fX05SX21sb2NrYWxsCitjb25zdCBfU1lTX3NldF90aHJl
YWRfYXJlYSA9IF9fX05SX3NldF90aHJlYWRfYXJlYQorY29uc3QgX01TX0JJTkQgPSA0MDk2Citj
b25zdCBfQVJQT1BfSW5SRVFVRVNUID0gOAorY29uc3QgX1NJWkVPRl9WT0lEX1AgPSA4Citjb25z
dCBfU0lPQ0dJRk5FVE1BU0sgPSAweDg5MWIKK2NvbnN0IF9TQ0hFRF9CQVRDSCA9IDMKK2NvbnN0
IF9SVE1fTkVXQUNUSU9OID0gNDgKK2NvbnN0IF9BRl9LQ00gPSBfUEZfS0NNCitjb25zdCBfU1lT
X2NvcHlfZmlsZV9yYW5nZSA9IF9fX05SX2NvcHlfZmlsZV9yYW5nZQorY29uc3QgX0FSUEhSRF9T
TElQID0gMjU2Citjb25zdCBfTVNfUkVMQVRJTUUgPSAyMDk3MTUyCitjb25zdCBfUlVTQUdFX1NF
TEYgPSAwCitjb25zdCBfX19GX1NFVE9XTl9FWCA9IDE1Citjb25zdCBfX19STElNSVRfTklDRSA9
IDEzCitjb25zdCBfU09fQVRUQUNIX0ZJTFRFUiA9IDI2Citjb25zdCBfRVBPTExJTiA9IDEKK2Nv
bnN0IF9JRkFfRl9IT01FQUREUkVTUyA9IDB4MTAKK2NvbnN0IF9TS0ZfTExfT0ZGID0gKC0weDIw
MDAwMCkKK2NvbnN0IF9SVEZfVEhST1cgPSAweDIwMDAKK2NvbnN0IF9TWVNfb3Blbl9ieV9oYW5k
bGVfYXQgPSBfX19OUl9vcGVuX2J5X2hhbmRsZV9hdAorY29uc3QgX19fU0laRU9GX1dJTlRfVF9f
ID0gNAorY29uc3QgX0lGTEFfQlJQT1JUX1BST1hZQVJQID0gMTAKK2NvbnN0IF9TWVNfbWFkdmlz
ZSA9IF9fX05SX21hZHZpc2UKK2NvbnN0IF9TVEFfRlJFUUhPTEQgPSAweDAwODAKK2NvbnN0IF9Q
Rl9WU09DSyA9IDQwCitjb25zdCBfTkNDUyA9IDMyCitjb25zdCBfX19JRkxBX1ZSRl9QT1JUX01B
WCA9IDIKK2NvbnN0IF9fU0NfVjZfSUxQMzJfT0ZGMzIgPSAxNzYKK2NvbnN0IF9DTERfRVhJVEVE
ID0gMQorY29uc3QgX0VUT09NQU5ZUkVGUyA9IDEwOQorY29uc3QgX1JUQVhfRkVBVFVSRV9FQ04g
PSAoMSA8PCAwKQorY29uc3QgX0VUSF9QX0hTUiA9IDB4ODkyRgorY29uc3QgX1NZU19pb19zZXR1
cCA9IF9fX05SX2lvX3NldHVwCitjb25zdCBfUkxJTUlUX0NPUkUgPSA0Citjb25zdCBfU1lTX2tl
eWN0bCA9IF9fX05SX2tleWN0bAorY29uc3QgX19TQ19TRU1fTlNFTVNfTUFYID0gMzIKK2NvbnN0
IF9FUE9MTFdBS0VVUCA9IDUzNjg3MDkxMgorY29uc3QgX19fTlJfZmxpc3R4YXR0ciA9IDE5Ngor
Y29uc3QgX19TQ19CQVJSSUVSUyA9IDEzMworY29uc3QgX1NZU19zZXRnaWQgPSBfX19OUl9zZXRn
aWQKK2NvbnN0IF9fU0NfV09SRF9CSVQgPSAxMDcKK2NvbnN0IF9BUlBIUkRfUk9TRSA9IDI3MAor
Y29uc3QgX1NJX1VTRVIgPSAwCitjb25zdCBfSU5fQ0xBU1NCX05TSElGVCA9IDE2Citjb25zdCBf
TkRUUEFfUFJPWFlfUUxFTiA9IDE0Citjb25zdCBfUFJJaTE2ID0gImkiCitjb25zdCBfSUZMQV9C
T05EX0FEX0lORk9fUEFSVE5FUl9NQUMgPSA1Citjb25zdCBfTVNHX0NPTkZJUk0gPSAyMDQ4Citj
b25zdCBfX19OUl9zeW1saW5rYXQgPSAyNjYKK2NvbnN0IF9IQVZFX0ZVVElNRVNBVCA9IDEKK2Nv
bnN0IF9fX1BEUF9FTkRJQU4gPSAzNDEyCitjb25zdCBfUFRIUkVBRF9LRVlTX01BWCA9IDEwMjQK
K2NvbnN0IF9NU19OT1NVSUQgPSAyCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9RVUVSWV9JTlRWTCA9
IDMzCitjb25zdCBfX19VSU5UTUFYX01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZmCitjb25zdCBf
SUZMQV9XRUlHSFQgPSAxNQorY29uc3QgX0lQVjZfWEZSTV9QT0xJQ1kgPSAzNQorY29uc3QgX19f
TlJfYWNjZXNzID0gMjEKK2NvbnN0IF9fU0NfTEVWRUwxX0lDQUNIRV9TSVpFID0gMTg1Citjb25z
dCBfUlRNR1JQX0lQVjZfSUZBRERSID0gMHgxMDAKK2NvbnN0IF9fX05SX2xpbmsgPSA4NgorY29u
c3QgX0ZTX1hGTEFHX1JFQUxUSU1FID0gMHgwMDAwMDAwMQorY29uc3QgX0ZBTExPQ19GTF9JTlNF
UlRfUkFOR0UgPSAweDIwCitjb25zdCBfX19QUklQVFJfUFJFRklYID0gImwiCitjb25zdCBfSUZM
QV9YRlJNX1VOU1BFQyA9IDAKK2NvbnN0IF9TVEFUWF9DVElNRSA9IDB4MDA4MAorY29uc3QgX19f
U0NIQVJfTUFYX18gPSAweDdmCitjb25zdCBfU0hSVF9XSURUSCA9IDE2Citjb25zdCBfU0lPQ0RF
TFJUID0gMHg4OTBDCitjb25zdCBfQUZfSVBYID0gX1BGX0lQWAorY29uc3QgX01TX0JPUk4gPSAo
MTw8MjkpCitjb25zdCBfSUZMQV9YRFAgPSA0MworY29uc3QgX0lGTEFfU1RBVFMgPSA3Citjb25z
dCBfRVJPRlMgPSAzMAorY29uc3QgX1NPX05PX0NIRUNLID0gMTEKK2NvbnN0IF9CQ19CQVNFX01B
WCA9IF9fUE9TSVgyX0JDX0JBU0VfTUFYCitjb25zdCBfWDg2X0VGTEFHU19JRl9CSVQgPSA5Citj
b25zdCBfX1hPUEVOX1NITSA9IDEKK2NvbnN0IF9SRUdfUlNJID0gOQorY29uc3QgX0FSUEhSRF9M
T0NBTFRMSyA9IDc3MworY29uc3QgX19TQ19ERVZJQ0VfU1BFQ0lGSUNfUiA9IDE0MgorY29uc3Qg
X19TQ19TRUxFQ1QgPSA1OQorY29uc3QgX19fSUZBX01BWCA9IDEwCitjb25zdCBfU1lTX2ZhY2Nl
c3NhdCA9IF9fX05SX2ZhY2Nlc3NhdAorY29uc3QgX0NTVE9QQiA9IDAwMDAxMDAKK2NvbnN0IF9N
QUNWTEFOX01BQ0FERFJfU0VUID0gMworY29uc3QgX1VJTlRfTUFYID0gKF9JTlRfTUFYICogMiAr
IDEpCitjb25zdCBfUFJfVElNSU5HX1NUQVRJU1RJQ0FMID0gMAorY29uc3QgX1NDTmRGQVNUOCA9
ICJoaGQiCitjb25zdCBfTUFYVFRMID0gMjU1Citjb25zdCBfRUFJX05PREFUQSA9IC01Citjb25z
dCBfVENQX0NBX0NXUiA9IDIKK2NvbnN0IF9JWE9OID0gMDAwMjAwMAorY29uc3QgX19fZ251X2xp
bnV4X18gPSAxCitjb25zdCBfX1BBVEhfU0VSVklDRVMgPSAiL2V0Yy9zZXJ2aWNlcyIKK2NvbnN0
IF9fX0lGTEFfVkZfVkxBTl9JTkZPX01BWCA9IDIKK2NvbnN0IF9BRl9VTklYID0gX1BGX1VOSVgK
K2NvbnN0IF9FVEhfUF9IRExDID0gMHgwMDE5Citjb25zdCBfUFJfTVBYX0VOQUJMRV9NQU5BR0VN
RU5UID0gNDMKK2NvbnN0IF9SVFBST1RfQklSRCA9IDEyCitjb25zdCBfQVJQSFJEX0hXWDI1ID0g
MjcyCitjb25zdCBfUlRNX0RFTFJPVVRFID0gMjUKK2NvbnN0IF9JRkxBX0JSX1ZMQU5fUFJPVE9D
T0wgPSA4Citjb25zdCBfSUZMQV9CUlBPUlRfVU5TUEVDID0gMAorY29uc3QgX1JUTV9HRVRBRERS
ID0gMjIKK2NvbnN0IF9UQ0lPTiA9IDMKK2NvbnN0IF9JUF9DSEVDS1NVTSA9IDIzCitjb25zdCBf
U1lTX2ZjaG1vZGF0ID0gX19fTlJfZmNobW9kYXQKK2NvbnN0IF9DTE9ORV9ORVdVU0VSID0gMHgx
MDAwMDAwMAorY29uc3QgX1RJT0NOT1RUWSA9IDB4NTQyMgorY29uc3QgX1NPX05PRkNTID0gNDMK
K2NvbnN0IF9TWVNfY2xvY2tfc2V0dGltZSA9IF9fX05SX2Nsb2NrX3NldHRpbWUKK2NvbnN0IF9J
UF9QS1RPUFRJT05TID0gOQorY29uc3QgX1RDUF9RVUVVRVNfTlIgPSAzCitjb25zdCBfX19GTFQ2
NF9ERUNJTUFMX0RJR19fID0gMTcKK2NvbnN0IF9JQ01QNl9USU1FX0VYQ0VFRF9SRUFTU0VNQkxZ
ID0gMQorY29uc3QgX0lQVE9TX0RTQ1BfTUFTSyA9IDB4ZmMKK2NvbnN0IF9TSUdJTlQgPSAyCitj
b25zdCBfQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEID0gMgorY29uc3QgX0lDTVA2X0RTVF9VTlJF
QUNIID0gMQorY29uc3QgX0lGTEFfR0VORVZFX1RPUyA9IDQKK2NvbnN0IF9QUl9GUF9FWENfRElT
QUJMRUQgPSAwCitjb25zdCBfTUFEVl9ET0RVTVAgPSAxNworY29uc3QgX1NZU19nZXRfdGhyZWFk
X2FyZWEgPSBfX19OUl9nZXRfdGhyZWFkX2FyZWEKK2NvbnN0IF9TT0xfUE5QSVBFID0gMjc1Citj
b25zdCBfTUFYX0xJTktTID0gMzIKK2NvbnN0IF9SVE5MX0ZBTUlMWV9JUE1SID0gMTI4Citjb25z
dCBfTkxfTU1BUF9TVEFUVVNfQ09QWSA9IDMKK2NvbnN0IF9fU0NfUkVBREVSX1dSSVRFUl9MT0NL
UyA9IDE1MworY29uc3QgX19TQ19BSU9fUFJJT19ERUxUQV9NQVggPSAyNQorY29uc3QgX1JUTkxH
UlBfUEhPTkVUX0lGQUREUiA9IDIxCitjb25zdCBfQVJQSFJEX0ZDRkFCUklDID0gNzg3Citjb25z
dCBfQ0xPTkVfUEFSRU5UX1NFVFRJRCA9IDB4MDAxMDAwMDAKK2NvbnN0IF9TWVNfbmV3ZnN0YXRh
dCA9IF9fX05SX25ld2ZzdGF0YXQKK2NvbnN0IF9JRkZfTk9UUkFJTEVSUyA9IDMyCitjb25zdCBf
VENQX1NBVkVfU1lOID0gMjcKK2NvbnN0IF9QUklpMzIgPSAiaSIKK2NvbnN0IF9USU1FX0VSUk9S
ID0gNQorY29uc3QgX19fTlJfcmVhZCA9IDAKK2NvbnN0IF9WRU9MMiA9IDE2Citjb25zdCBfRVRI
RVJUWVBFX05UUkFJTEVSID0gMTYKK2NvbnN0IF9fU0NfTU9OT1RPTklDX0NMT0NLID0gMTQ5Citj
b25zdCBfVENBX1JPT1RfQ09VTlQgPSAzCitjb25zdCBfUEtFWV9ESVNBQkxFX0FDQ0VTUyA9IDB4
MQorY29uc3QgX0hBVkVfQVNfWDg2X1BDUkVMID0gMQorY29uc3QgX19faW92ZWNfZGVmaW5lZCA9
IDEKK2NvbnN0IF9UVU5fRkxUX0FMTE1VTFRJID0gMHgwMDAxCitjb25zdCBfTkVUTElOS19SWF9S
SU5HID0gNgorY29uc3QgX0VOT1RSRUNPVkVSQUJMRSA9IDEzMQorY29uc3QgX1BUUkFDRV9JTlRF
UlJVUFQgPSAxNjkwMworY29uc3QgX0FGX0NBSUYgPSBfUEZfQ0FJRgorY29uc3QgX1NPTF9JUFY2
ID0gNDEKK2NvbnN0IF9JRkxBX0JST0FEQ0FTVCA9IDIKK2NvbnN0IF9fX0xEQkxfTUFOVF9ESUdf
XyA9IDY0Citjb25zdCBfRkZJX1RZUEVfU0lOVDggPSA2Citjb25zdCBfX19OUl93YWl0aWQgPSAy
NDcKK2NvbnN0IF9JWEFOWSA9IDAwMDQwMDAKK2NvbnN0IF9TWVNfc2NoZWRfc2V0YWZmaW5pdHkg
PSBfX19OUl9zY2hlZF9zZXRhZmZpbml0eQorY29uc3QgX19fRkxUNjRYX0hBU19RVUlFVF9OQU5f
XyA9IDEKK2NvbnN0IF9fU0NfU1BPUkFESUNfU0VSVkVSID0gMTYwCitjb25zdCBfUE9MTF9FUlIg
PSA0Citjb25zdCBfSUZMQV9YRFBfVU5TUEVDID0gMAorY29uc3QgX0ZfUkRMQ0sgPSAwCitjb25z
dCBfSVBPUFRfREVCTUVBUyA9IDB4NDAKK2NvbnN0IF9BVF9GRENXRCA9IC0xMDAKK2NvbnN0IF9J
TlRQVFJfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX19TQ19QSUlfT1NJX0NMVFMgPSA2NAor
Y29uc3QgX1NZU19waXBlMiA9IF9fX05SX3BpcGUyCitjb25zdCBfSUZMQV9CT05EX1NMQVZFX0FE
X1BBUlRORVJfT1BFUl9QT1JUX1NUQVRFID0gOAorY29uc3QgX19DU19HTlVfTElCUFRIUkVBRF9W
RVJTSU9OID0gMworY29uc3QgX1RDU0FEUkFJTiA9IDEKK2NvbnN0IF9MT05HX01BWCA9IF9fX0xP
TkdfTUFYX18KK2NvbnN0IF9QUklkMTYgPSAiZCIKK2NvbnN0IF9fU1lTX0lOT1RJRllfSCA9IDEK
K2NvbnN0IF9TWVNfYnBmID0gX19fTlJfYnBmCitjb25zdCBfUlROTEdSUF9OT1A0ID0gMTcKK2Nv
bnN0IF9fU0NfWE9QRU5fWENVX1ZFUlNJT04gPSA5MAorY29uc3QgX1BSX01QWF9ESVNBQkxFX01B
TkFHRU1FTlQgPSA0NAorY29uc3QgX0lOVF9MRUFTVDhfTUlOID0gKC0xMjgpCitjb25zdCBfU0lH
SU8gPSBfU0lHUE9MTAorY29uc3QgX0lQVjZfUkVDVk9SSUdEU1RBRERSID0gX0lQVjZfT1JJR0RT
VEFERFIKK2NvbnN0IF9fUENfRklMRVNJWkVCSVRTID0gMTMKK2NvbnN0IF9USU9DR1BHUlAgPSAw
eDU0MEYKK2NvbnN0IF9fX0ZMVDMyWF9NSU5fRVhQX18gPSAoLTEwMjEpCitjb25zdCBfVElPQ0dX
SU5TWl92YWwgPSAyMTUyMworY29uc3QgX19TQ19MRVZFTDJfQ0FDSEVfTElORVNJWkUgPSAxOTMK
K2NvbnN0IF9FVEhfUF9BVE1NUE9BID0gMHg4ODRjCitjb25zdCBfSEFWRV9TVFJJTkdTX0ggPSAx
Citjb25zdCBfRE5fQ1JFQVRFID0gMHgwMDAwMDAwNAorY29uc3QgX0ZTX1BPTElDWV9GTEFHU19Q
QURfMTYgPSAweDAyCitjb25zdCBfU09fT09CSU5MSU5FID0gMTAKK2NvbnN0IF9QQUNLRVRfUk9M
TE9WRVJfU1RBVFMgPSAyMQorY29uc3QgX19QT1NJWF9BU1lOQ0hST05PVVNfSU8gPSAyMDA4MDkK
K2NvbnN0IF9fQ1NfTEZTX0xJQlMgPSAxMDAyCitjb25zdCBfUEFDS0VUX01SX1BST01JU0MgPSAx
Citjb25zdCBfX19GTFQ2NF9NQVhfXyA9IDEuMQorY29uc3QgX19fVVNFX0lTT0MxMSA9IDEKK2Nv
bnN0IF9fU0NfTEVWRUwyX0NBQ0hFX0FTU09DID0gMTkyCitjb25zdCBfVENTQlJLID0gMHg1NDA5
Citjb25zdCBfSU5UX0xFQVNUMzJfV0lEVEggPSAzMgorY29uc3QgX0JQRl9NSU5PUl9WRVJTSU9O
ID0gMQorY29uc3QgX19fR05VX0xJQlJBUllfXyA9IDYKK2NvbnN0IF9fX1NURENfSVNPXzEwNjQ2
X18gPSAyMDE3MDYKK2NvbnN0IF9FSVNOQU0gPSAxMjAKK2NvbnN0IF9JUFY2X0FVVE9GTE9XTEFC
RUwgPSA3MAorY29uc3QgX19TQ19MRVZFTDRfQ0FDSEVfTElORVNJWkUgPSAxOTkKK2NvbnN0IF9J
RkxBX0xJTktJTkZPID0gMTgKK2NvbnN0IF9JUF9QTVRVRElTQ19ETyA9IDIKK2NvbnN0IF9QVFJB
Q0VfT0xEU0VUT1BUSU9OUyA9IDIxCitjb25zdCBfSVBfUEtUSU5GTyA9IDgKK2NvbnN0IF9PX1JT
WU5DID0gX09fU1lOQworY29uc3QgX1NQTElDRV9GX05PTkJMT0NLID0gMgorY29uc3QgX0NMT05F
X0NISUxEX0NMRUFSVElEID0gMHgwMDIwMDAwMAorY29uc3QgX0hBVkVfT0ZGNjRfVCA9IDEKK2Nv
bnN0IF9GU19FT0ZCTE9DS1NfRkwgPSAweDAwNDAwMDAwCitjb25zdCBfX1NDX0ZJTEVfU1lTVEVN
ID0gMTQ4Citjb25zdCBfQ0hBUkNMQVNTX05BTUVfTUFYID0gMjA0OAorY29uc3QgX0lOVF9NQVgg
PSBfX19JTlRfTUFYX18KK2NvbnN0IF9fX0xQNjRfT0ZGNjRfQ0ZMQUdTID0gIi1tNjQiCitjb25z
dCBfSU5UX1dJRFRIID0gMzIKK2NvbnN0IF9ORFRBX1VOU1BFQyA9IDAKK2NvbnN0IF9UVU5fRl9U
U080ID0gMHgwMgorY29uc3QgX19QT1NJWF9USFJFQURTID0gMjAwODA5Citjb25zdCBfUlRFWFRf
RklMVEVSX0JSVkxBTiA9ICgxIDw8IDEpCitjb25zdCBfUlRBWF9SRU9SREVSSU5HID0gOQorY29u
c3QgX1BGX0FUTVNWQyA9IDIwCitjb25zdCBfTlNTX0JVRkxFTl9HUk9VUCA9IDEwMjQKK2NvbnN0
IF9QUl9UU0NfU0lHU0VHViA9IDIKK2NvbnN0IF9fX05SX3NlbWN0bCA9IDY2Citjb25zdCBfU09M
X1RJUEMgPSAyNzEKK2NvbnN0IF9NTERfTElTVEVORVJfUkVQT1JUID0gMTMxCitjb25zdCBfVVBB
R0VTID0gMQorY29uc3QgX19TQ19QSUlfT1NJX00gPSA2NQorY29uc3QgX0ZTX1hGTEFHX1BST0pJ
TkhFUklUID0gMHgwMDAwMDIwMAorY29uc3QgX01TR19FUlJRVUVVRSA9IDgxOTIKK2NvbnN0IF9B
UlBIUkRfSUVFRTgwMjE1NCA9IDgwNAorY29uc3QgX1RJT0NQS1QgPSAweDU0MjAKK2NvbnN0IF9F
U1JDSCA9IDMKK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX1JXTE9DS19UID0gNTYKK2NvbnN0IF9f
UE9TSVgyX0JDX1NUUklOR19NQVggPSAxMDAwCitjb25zdCBfSUZMQV9JTkVUNl9VTlNQRUMgPSAw
Citjb25zdCBfQVRGX1VTRVRSQUlMRVJTID0gMHgxMAorY29uc3QgX0lOX01PVkVfU0VMRiA9IDB4
MDAwMDA4MDAKK2NvbnN0IF9fX1NJR19BVE9NSUNfV0lEVEhfXyA9IDMyCitjb25zdCBfX1NDX1NZ
U1RFTV9EQVRBQkFTRV9SID0gMTYzCitjb25zdCBfUlRBX0RQT1JUID0gMjkKK2NvbnN0IF9SVEFf
U0VTU0lPTiA9IDEzCitjb25zdCBfUEFDS0FHRV9WRVJTSU9OID0gInZlcnNpb24tdW51c2VkIgor
Y29uc3QgX19fREVDMTI4X1NVQk5PUk1BTF9NSU5fXyA9IDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAxRS02MTQzCitjb25zdCBfQjIwMDAwMDAgPSAwMDEwMDEzCitjb25zdCBfU1lT
X2NobW9kID0gX19fTlJfY2htb2QKK2NvbnN0IF9TVEFfUFBTV0FOREVSID0gMHgwNDAwCitjb25z
dCBfX19JTlRfTUFYX18gPSAweDdmZmZmZmZmCitjb25zdCBfX19VSU5UX0xFQVNUOF9NQVhfXyA9
IDB4ZmYKK2NvbnN0IF9fX0lOVF9GQVNUMTZfV0lEVEhfXyA9IDY0Citjb25zdCBfU1lTX2V2ZW50
ZmQyID0gX19fTlJfZXZlbnRmZDIKK2NvbnN0IF9TSUdCVVMgPSA3Citjb25zdCBfRlBfWFNUQVRF
X01BR0lDMSA9IDB4NDY1MDU4NTMKK2NvbnN0IF9GUF9YU1RBVEVfTUFHSUMyID0gMHg0NjUwNTg0
NQorY29uc3QgX1RDR0VUU192YWwgPSAyMTUwNQorY29uc3QgX05MTV9GX1JFUVVFU1QgPSAweDAx
Citjb25zdCBfTUFEVl9OT0hVR0VQQUdFID0gMTUKK2NvbnN0IF9IQVZFX0lOT1RJRllfSU5JVCA9
IDEKK2NvbnN0IF9SVE1fTkVXUURJU0MgPSAzNgorY29uc3QgX1BSX1NFVF9LRUVQQ0FQUyA9IDgK
K2NvbnN0IF9QUl9FTkRJQU5fQklHID0gMAorY29uc3QgX0lQUE9SVF9MT0dJTlNFUlZFUiA9IDUx
MworY29uc3QgX1NZU19jbG9ja19nZXR0aW1lID0gX19fTlJfY2xvY2tfZ2V0dGltZQorY29uc3Qg
X01TR19UUllIQVJEID0gNAorY29uc3QgX1BSX1NFVF9NTV9BVVhWID0gMTIKK2NvbnN0IF9fUE9T
SVhfU1lOQ0hST05JWkVEX0lPID0gMjAwODA5Citjb25zdCBfU1lTX2Nsb3NlID0gX19fTlJfY2xv
c2UKK2NvbnN0IF9QUl9TRVRfVU5BTElHTiA9IDYKK2NvbnN0IF9TWVNfYnJrID0gX19fTlJfYnJr
Citjb25zdCBfX05TSUcgPSAoX19fU0lHUlRNQVggKyAxKQorY29uc3QgX19QT1NJWF9GRF9TRVRT
SVpFID0gX19QT1NJWF9PUEVOX01BWAorY29uc3QgX0VOT1RUWSA9IDI1Citjb25zdCBfUlRBX1BS
SU9SSVRZID0gNgorY29uc3QgX0VUSF9QX0xBVCA9IDB4NjAwNAorY29uc3QgX0ZGSV9OQVRJVkVf
UkFXX0FQSSA9IDAKK2NvbnN0IF9QUl9HRVRfTk9fTkVXX1BSSVZTID0gMzkKK2NvbnN0IF9GUEVf
RkxUUkVTID0gNgorY29uc3QgX0ZTX1JFU0VSVkVEX0ZMID0gMHg4MDAwMDAwMAorY29uc3QgX0ZT
X1hGTEFHX0NPV0VYVFNJWkUgPSAweDAwMDEwMDAwCitjb25zdCBfRVBPTExPVVQgPSA0Citjb25z
dCBfU0NNX1RYVElNRSA9IF9TT19UWFRJTUUKK2NvbnN0IF9BREpfVElNRUNPTlNUID0gMHgwMDIw
Citjb25zdCBfVktJTEwgPSAzCitjb25zdCBfUlRNR1JQX0RFQ25ldF9ST1VURSA9IDB4NDAwMAor
Y29uc3QgX0FGX1FJUENSVFIgPSBfUEZfUUlQQ1JUUgorY29uc3QgX1NPX0FDQ0VQVENPTk4gPSAz
MAorY29uc3QgX0lGTEFfVkZfU1RBVFNfVFhfRFJPUFBFRCA9IDgKK2NvbnN0IF9SVE5MX0ZBTUlM
WV9NQVggPSAxMjkKK2NvbnN0IF9fUE9TSVhfVElNRVJfTUFYID0gMzIKK2NvbnN0IF9fX05SX21r
bm9kID0gMTMzCitjb25zdCBfUkVHX0VGTCA9IDE3Citjb25zdCBfX19TU0UyX18gPSAxCitjb25z
dCBfSVBfTVVMVElDQVNUX1RUTCA9IDMzCitjb25zdCBfU09DS19TRVFQQUNLRVQgPSA1Citjb25z
dCBfX19XQUxMID0gMHg0MDAwMDAwMAorY29uc3QgX1JUTV9ERUxNREIgPSA4NQorY29uc3QgX0lM
TF9JTExPUEMgPSAxCitjb25zdCBfTkxNU0dfRVJST1IgPSAweDIKK2NvbnN0IF9QUl9HRVRfVElE
X0FERFJFU1MgPSA0MAorY29uc3QgX1NZU192bXNwbGljZSA9IF9fX05SX3Ztc3BsaWNlCitjb25z
dCBfVENQX1NZTkNOVCA9IDcKK2NvbnN0IF9SVF9TQ09QRV9TSVRFID0gMjAwCitjb25zdCBfU1lT
X2V4ZWN2ZWF0ID0gX19fTlJfZXhlY3ZlYXQKK2NvbnN0IF9JRkFfRl9URU1QT1JBUlkgPSBfSUZB
X0ZfU0VDT05EQVJZCitjb25zdCBfQ1JETFkgPSAwMDAzMDAwCitjb25zdCBfRVRIX1BfUFJFQVVU
SCA9IDB4ODhDNworY29uc3QgX19fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsID0gMTQ4Citjb25z
dCBfUkVHX1IxMiA9IDQKK2NvbnN0IF9JUFY2XzIyOTJQS1RJTkZPID0gMgorY29uc3QgX19fSU9W
X01BWCA9IDEwMjQKK2NvbnN0IF9BSV9BTEwgPSAweDAwMTAKK2NvbnN0IF9FVEhfUF9GQ09FID0g
MHg4OTA2Citjb25zdCBfSUZMQV9DQVJSSUVSID0gMzMKK2NvbnN0IF9SVEFfTkVXRFNUID0gMTkK
K2NvbnN0IF9fX05SX2FkanRpbWV4ID0gMTU5Citjb25zdCBfQllURV9PUkRFUiA9IF9fX0JZVEVf
T1JERVIKK2NvbnN0IF9fX0ZMVF9ERU5PUk1fTUlOX18gPSAxLjEKK2NvbnN0IF9FQ0hPUFJUID0g
MDAwMjAwMAorY29uc3QgX0lGTEFfUk1ORVRfVU5TUEVDID0gMAorY29uc3QgX19DU19QT1NJWF9W
N19JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTMyCitjb25zdCBfRl9TSExDSyA9IDgKK2NvbnN0IF9F
VElNRURPVVQgPSAxMTAKK2NvbnN0IF9fU0NfRklMRV9MT0NLSU5HID0gMTQ3Citjb25zdCBfTVNH
X1BFRUsgPSAyCitjb25zdCBfU1lTX21zeW5jID0gX19fTlJfbXN5bmMKK2NvbnN0IF9FVEhfUF8x
NTg4ID0gMHg4OEY3Citjb25zdCBfX1NDX1BBU1NfTUFYID0gODgKK2NvbnN0IF9JRkxBX0hTUl9V
TlNQRUMgPSAwCitjb25zdCBfQkNfU1RSSU5HX01BWCA9IF9fUE9TSVgyX0JDX1NUUklOR19NQVgK
K2NvbnN0IF9GTFVTSE8gPSAwMDEwMDAwCitjb25zdCBfU1lTX2xzdGF0ID0gX19fTlJfbHN0YXQK
K2NvbnN0IF9USU9DTV9SVFMgPSAweDAwNAorY29uc3QgX0FSUEhSRF9JUkRBID0gNzgzCitjb25z
dCBfVENTQlJLUCA9IDB4NTQyNQorY29uc3QgX0VQSVBFID0gMzIKK2NvbnN0IF9fX0ZMVDMyWF9I
QVNfREVOT1JNX18gPSAxCitjb25zdCBfX0JJVFNfVUlPX0VYVF9IID0gMQorY29uc3QgX0lDTVA2
X1JSX0ZMQUdTX1RFU1QgPSAweDgwCitjb25zdCBfU1lTX2FsYXJtID0gX19fTlJfYWxhcm0KK2Nv
bnN0IF9JRkZfVFVOID0gMHgwMDAxCitjb25zdCBfX19FTlVNX0lEVFlQRV9UID0gMQorY29uc3Qg
X1BSX0ZQX01PREVfRlJFID0gKDEgPDwgMSkKK2NvbnN0IF9NQUNTRUNfVkFMSURBVEVfRElTQUJM
RUQgPSAwCitjb25zdCBfSUZMQV9HRU5FVkVfVFRMID0gMworY29uc3QgX0hBVkVfSU5PVElGWV9B
RERfV0FUQ0ggPSAxCitjb25zdCBfUFJJWDE2ID0gIlgiCitjb25zdCBfX19GTFRfRVZBTF9NRVRI
T0RfVFNfMTg2NjFfM19fID0gMAorY29uc3QgX05EX05BX0ZMQUdfUk9VVEVSID0gMHgwMDAwMDA4
MAorY29uc3QgX0lQVjZfUkVDVlBBVEhNVFUgPSA2MAorY29uc3QgX01BRFZfTk9STUFMID0gMAor
Y29uc3QgX0ZGSV9SRUdJU1RFUiA9IDcKK2NvbnN0IF9QUklkMzIgPSAiZCIKK2NvbnN0IF9OTEFf
Rl9ORVRfQllURU9SREVSID0gKDEgPDwgMTQpCitjb25zdCBfSEFWRV9FWFBMID0gMQorY29uc3Qg
X0lQX1JFVE9QVFMgPSA3Citjb25zdCBfSVBfTVVMVElDQVNUX0lGID0gMzIKK2NvbnN0IF9FWFBS
X05FU1RfTUFYID0gX19QT1NJWDJfRVhQUl9ORVNUX01BWAorY29uc3QgX05fUFBQID0gMworY29u
c3QgX19fR0xJQkNfTElOVVhfVkVSU0lPTl9DT0RFID0gMjY3MDA4Citjb25zdCBfRlNfTUFYX0tF
WV9TSVpFID0gNjQKK2NvbnN0IF9QRl9JTkVUNiA9IDEwCitjb25zdCBfU1lTX2NoZGlyID0gX19f
TlJfY2hkaXIKK2NvbnN0IF9QVFJBQ0VfRVZFTlRfVkZPUksgPSAyCitjb25zdCBfU09fUkNWVElN
RU8gPSAyMAorY29uc3QgX19fTlJfdGltZXMgPSAxMDAKK2NvbnN0IF9fUE9TSVhfVUlPX01BWElP
ViA9IDE2Citjb25zdCBfSUZMQV9CUl9NQ0FTVF9RVUVSSUVSX0lOVFZMID0gMzIKK2NvbnN0IF9J
UF9UT1MgPSAxCitjb25zdCBfX1NDXzJfUEJTX0xPQ0FURSA9IDE3MAorY29uc3QgX05MTVNHX05P
T1AgPSAweDEKK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEXzMyID0gMHgwMworY29uc3QgX0FS
UERfVVBEQVRFID0gMHgwMQorY29uc3QgX19DU19MRlNfTElOVEZMQUdTID0gMTAwMworY29uc3Qg
X19JT0NfRElSTUFTSyA9ICgoMSA8PCBfX0lPQ19ESVJCSVRTKS0xKQorY29uc3QgX1NZU19jYXBz
ZXQgPSBfX19OUl9jYXBzZXQKK2NvbnN0IF9JQ01QNl9ST1VURVJfUkVOVU1CRVJJTkcgPSAxMzgK
K2NvbnN0IF9JTExfSUxMQURSID0gMworY29uc3QgX19CSVRTX1BPU0lYX09QVF9IID0gMQorY29u
c3QgX1BSX0dFVF9GUEVYQyA9IDExCitjb25zdCBfUFJfQ0FQQlNFVF9SRUFEID0gMjMKK2NvbnN0
IF9UQ1BfTUQ1U0lHID0gMTQKK2NvbnN0IF9IQVZFX0dFVFhBVFRSID0gMQorY29uc3QgX1JUTV9E
RUxSVUxFID0gMzMKK2NvbnN0IF9SVE1fTkVXU1RBVFMgPSA5MgorY29uc3QgX1RDU0FGTFVTSCA9
IDIKK2NvbnN0IF9JRkxBX1BPUlRfVkYgPSAxCitjb25zdCBfX0JJVFNfU0NIRURfSCA9IDEKK2Nv
bnN0IF9JUFY2X1JUSERSRFNUT1BUUyA9IDU1Citjb25zdCBfX19OUl9tYWR2aXNlID0gMjgKK2Nv
bnN0IF9QUl9TUEVDX0lORElSRUNUX0JSQU5DSCA9IDEKK2NvbnN0IF9YODZfQ1I0X1RTRF9CSVQg
PSAyCitjb25zdCBfSUZMQV9CUl9ORl9DQUxMX0lQNlRBQkxFUyA9IDM3Citjb25zdCBfUFRSQUNF
X1RSQUNFTUUgPSAwCitjb25zdCBfWDg2X0NSMF9QRV9CSVQgPSAwCitjb25zdCBfRkZJX0NMT1NV
UkVTID0gMQorY29uc3QgX0lGQV9GX01BTkFHRVRFTVBBRERSID0gMHgxMDAKK2NvbnN0IF9TSU9D
QUREUlQgPSAweDg5MEIKK2NvbnN0IF9UQ0dFVEEgPSAweDU0MDUKK2NvbnN0IF9JRkxBX01UVSA9
IDQKK2NvbnN0IF9JRkxBX0JSX1JPT1RfUE9SVCA9IDEyCitjb25zdCBfX0NTX1BPU0lYX1Y3X0lM
UDMyX09GRkJJR19MSU5URkxBR1MgPSAxMTM5Citjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9DT05E
X1QgPSA0OAorY29uc3QgX19fU19JRklGTyA9IDAwMTAwMDAKK2NvbnN0IF9fX1BSSTY0X1BSRUZJ
WCA9ICJsIgorY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkYzMl9MSU5URkxBR1MgPSAxMTM1
Citjb25zdCBfSUZMQV9QUk9NSVNDVUlUWSA9IDMwCitjb25zdCBfUFJfU0VUX0NISUxEX1NVQlJF
QVBFUiA9IDM2Citjb25zdCBfU0lHUElQRSA9IDEzCitjb25zdCBfVENHRVRTID0gMHg1NDAxCitj
b25zdCBfU09MX0NBSUYgPSAyNzgKK2NvbnN0IF9JRkxBX0JSX01DQVNUX01FTUJFUlNISVBfSU5U
VkwgPSAzMQorY29uc3QgX1JURl9SRUlOU1RBVEUgPSAweDAwMDgKK2NvbnN0IF9UQ0dFVFggPSAw
eDU0MzIKK2NvbnN0IF9JRkxBX1BBRCA9IDQyCitjb25zdCBfRVRIX1BfRE5BX1JDID0gMHg2MDAy
Citjb25zdCBfUlRNX0ZfRklCX01BVENIID0gMHgyMDAwCitjb25zdCBfSUZMQV9CUlBPUlRfVkxB
Tl9UVU5ORUwgPSAyOQorY29uc3QgX1BST1RfUkVBRCA9IDB4MQorY29uc3QgX1BSX1NQRUNfRElT
QUJMRSA9ICgxIDw8IDIpCitjb25zdCBfUFRSQUNFX1NFSVpFID0gMTY5MDIKK2NvbnN0IF9SVEZf
Q0FDSEUgPSAweDAxMDAwMDAwCitjb25zdCBfX19ERUMxMjhfTUlOX18gPSAxRS02MTQzCitjb25z
dCBfSUNNUDZfRUNIT19SRVFVRVNUID0gMTI4Citjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FF
U18yNTZfR0NNID0gMgorY29uc3QgX19TWVNfVFlQRVNfSCA9IDEKK2NvbnN0IF9FVEhfUF9ETkFf
UlQgPSAweDYwMDMKK2NvbnN0IF9fU0NfTUVNTE9DSyA9IDE3Citjb25zdCBfU1lTX2Zpbml0X21v
ZHVsZSA9IF9fX05SX2Zpbml0X21vZHVsZQorY29uc3QgX0JQRl9BID0gMHgxMAorY29uc3QgX0JQ
Rl9CID0gMHgxMAorY29uc3QgX1BGX0lORVQgPSAyCitjb25zdCBfU1lTX3J0X3NpZ3Byb2NtYXNr
ID0gX19fTlJfcnRfc2lncHJvY21hc2sKK2NvbnN0IF9TSUdfQVRPTUlDX01JTiA9ICgtMjE0NzQ4
MzY0Ny0xKQorY29uc3QgX19fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzIgPSAxCitj
b25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfNCA9IDEKK2NvbnN0IF9TSU9D
R0lGRkxBR1MgPSAweDg5MTMKK2NvbnN0IF9SRUdfUjggPSAwCitjb25zdCBfX19HQ0NfSEFWRV9T
WU5DX0NPTVBBUkVfQU5EX1NXQVBfOCA9IDEKK2NvbnN0IF9GU19BUFBFTkRfRkwgPSAweDAwMDAw
MDIwCitjb25zdCBfUlRBWF9DV05EID0gNworY29uc3QgX19QT1NJWDJfQ19CSU5EID0gX19fUE9T
SVgyX1RISVNfVkVSU0lPTgorY29uc3QgX19YT1BFTl9SRUFMVElNRV9USFJFQURTID0gMQorY29u
c3QgX0JQRl9XID0gMHgwMAorY29uc3QgX0JQRl9YID0gMHgwOAorY29uc3QgX1JXSF9XUklURV9M
SUZFX0xPTkcgPSA0Citjb25zdCBfX19HQ0NfSEFWRV9EV0FSRjJfQ0ZJX0FTTSA9IDEKK2NvbnN0
IF9UQ1BPTEVOX1RJTUVTVEFNUCA9IDEwCitjb25zdCBfRVRIX1BfQ0FJRiA9IDB4MDBGNworY29u
c3QgX05EQV9QT1JUID0gNgorY29uc3QgX0VQT0xMUkRIVVAgPSA4MTkyCitjb25zdCBfX19GTFQx
MjhfTUFYX18gPSAxLjEKK2NvbnN0IF9USU9DU1JTNDg1ID0gMHg1NDJGCitjb25zdCBfX19JRkxB
X0lORVRfTUFYID0gMgorY29uc3QgX1JUQVhfSU5JVFJXTkQgPSAxNAorY29uc3QgX19CSVRTX1RZ
UEVTX0xPQ0FMRV9UX0ggPSAxCitjb25zdCBfX19MREJMX0RFQ0lNQUxfRElHX18gPSAyMQorY29u
c3QgX0hBVkVfQVRBTkwgPSAxCitjb25zdCBfWERQX0FUVEFDSEVEX0RSViA9IDEKK2NvbnN0IF9f
X0FUT01JQ19DT05TVU1FID0gMQorY29uc3QgX19fTlJfbXNnZ2V0ID0gNjgKK2NvbnN0IF9fX05S
X2dldHNvY2tvcHQgPSA1NQorY29uc3QgX1BUUkRJRkZfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1
ODA3LTEpCitjb25zdCBfV0lOVF9XSURUSCA9IDMyCitjb25zdCBfTkVUTElOS19FWFRfQUNLID0g
MTEKK2NvbnN0IF9TQ051OCA9ICJoaHUiCitjb25zdCBfX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19J
TkhFUklUID0gMjQ3Citjb25zdCBfSVBfUkVDVlRPUyA9IDEzCitjb25zdCBfTkRUUEFfSUZJTkRF
WCA9IDEKK2NvbnN0IF9FVEhfVExFTiA9IDIKK2NvbnN0IF9BSV9DQU5PTk5BTUUgPSAweDAwMDIK
K2NvbnN0IF9fX05SX21sb2NrYWxsID0gMTUxCitjb25zdCBfU0tGX0FEX0hBVFlQRSA9IDI4Citj
b25zdCBfX19OUl9waXBlMiA9IDI5MworY29uc3QgX1BUUkFDRV9ERVRBQ0ggPSAxNworY29uc3Qg
X1NZU19zaWduYWxmZCA9IF9fX05SX3NpZ25hbGZkCitjb25zdCBfX0NTX1hCUzVfTFBCSUdfT0ZG
QklHX0xERkxBR1MgPSAxMTEzCitjb25zdCBfSVBWNl9ORVhUSE9QID0gOQorY29uc3QgX1JUQ0Zf
RE9SRURJUkVDVCA9IDB4MDEwMDAwMDAKK2NvbnN0IF9OREFfSUZJTkRFWCA9IDgKK2NvbnN0IF9f
U0NfUElJID0gNTMKK2NvbnN0IF9BRl9BVE1TVkMgPSBfUEZfQVRNU1ZDCitjb25zdCBfUEZfUEFD
S0VUID0gMTcKK2NvbnN0IF9TWVNfZnV0aW1lc2F0ID0gX19fTlJfZnV0aW1lc2F0Citjb25zdCBf
SVBUT1NfUFJFQ19GTEFTSCA9IF9JUFRPU19DTEFTU19DUzMKK2NvbnN0IF9BUlBIUkRfSVBHUkUg
PSA3NzgKK2NvbnN0IF9fU0NfU0hFTEwgPSAxNTcKK2NvbnN0IF9IQVZFX0xPR0wgPSAxCitjb25z
dCBfUE9SVF9WRFBfUkVTUE9OU0VfSU5WQUxJRF9GT1JNQVQgPSAxCitjb25zdCBfX19VU0VfUE9T
SVgyID0gMQorY29uc3QgX0VOT01FTSA9IDEyCitjb25zdCBfWERQX0FUVEFDSEVEX1NLQiA9IDIK
K2NvbnN0IF9JTl9DTEFTU0FfTkVUID0gMHhmZjAwMDAwMAorY29uc3QgX0VTUk1OVCA9IDY5Citj
b25zdCBfSVBWNl9MRUFWRV9BTllDQVNUID0gMjgKK2NvbnN0IF9FTk9URU1QVFkgPSAzOQorY29u
c3QgX1BUUkFDRV9HRVRTSUdJTkZPID0gMTY4OTgKK2NvbnN0IF9fSU9DX05SQklUUyA9IDgKK2Nv
bnN0IF9QSVBFX0JVRiA9IDQwOTYKK2NvbnN0IF9BRl9JU0ROID0gX1BGX0lTRE4KK2NvbnN0IF9V
TE9OR19MT05HX01BWCA9IChfTE9OR19MT05HX01BWCAqIDIgKyAxKQorY29uc3QgX0xJTktfWFNU
QVRTX1RZUEVfVU5TUEVDID0gMAorY29uc3QgX05EVEFfTkFNRSA9IDEKK2NvbnN0IF9SVEFfUFJF
RiA9IDIwCitjb25zdCBfQVJQSFJEX05PTkUgPSAweEZGRkUKK2NvbnN0IF9TWVNfZ2V0c29ja25h
bWUgPSBfX19OUl9nZXRzb2NrbmFtZQorY29uc3QgX0VDSE9DVEwgPSAwMDAxMDAwCitjb25zdCBf
UlROTEdSUF9JUFY0X1JVTEUgPSA4Citjb25zdCBfSUZMQV9CT05EX0FEX0lORk8gPSAyMworY29u
c3QgX0lGTEFfQlJfVU5TUEVDID0gMAorY29uc3QgX0lGTEFfSUZfTkVUTlNJRCA9IDQ2Citjb25z
dCBfT19QQVRIID0gX19fT19QQVRICitjb25zdCBfWDg2X0NSM19QQ0lEX05PRkxVU0hfQklUID0g
NjMKK2NvbnN0IF9TWVNfc2NoZWRfZ2V0cGFyYW0gPSBfX19OUl9zY2hlZF9nZXRwYXJhbQorY29u
c3QgX1BSX1NFVF9OT19ORVdfUFJJVlMgPSAzOAorY29uc3QgX0lGTEFfQk9ORF9BRF9JTkZPX1VO
U1BFQyA9IDAKK2NvbnN0IF9SVEZfRkxPVyA9IDB4MDIwMDAwMDAKK2NvbnN0IF9TWVNfc2V0X21l
bXBvbGljeSA9IF9fX05SX3NldF9tZW1wb2xpY3kKK2NvbnN0IF9XQ09OVElOVUVEID0gOAorY29u
c3QgX19fSUZMQV9CT05EX01BWCA9IDI4Citjb25zdCBfSUZGX05PRklMVEVSID0gMHgxMDAwCitj
b25zdCBfX190aW1lX3RfZGVmaW5lZCA9IDEKK2NvbnN0IF9JRkxBX05FV19ORVROU0lEID0gNDUK
K2NvbnN0IF9CNjAwID0gMDAwMDAxMAorY29uc3QgX0FSUEhSRF9CSUYgPSA3NzUKK2NvbnN0IF9P
X0RTWU5DID0gX19fT19EU1lOQworY29uc3QgX19fTlJfbXNncmN2ID0gNzAKK2NvbnN0IF9SVFBS
T1RfUkEgPSA5Citjb25zdCBfSUZMQV9WUkZfVU5TUEVDID0gMAorY29uc3QgX1BSX1NQRUNfTk9U
X0FGRkVDVEVEID0gMAorY29uc3QgX05MTV9GX0RVTVBfRklMVEVSRUQgPSAweDIwCitjb25zdCBf
SUZMQV9WTEFOX1FPU19VTlNQRUMgPSAwCitjb25zdCBfX1NDX0RFVklDRV9JTyA9IDE0MAorY29u
c3QgX0lGTEFfSVBPSUJfVU1DQVNUID0gMworY29uc3QgX1NDSEVEX1JSID0gMgorY29uc3QgX1BS
SW84ID0gIm8iCitjb25zdCBfX0xGU19BU1lOQ0hST05PVVNfSU8gPSAxCitjb25zdCBfSUZMQV9Q
T1JUX1JFUVVFU1QgPSA2Citjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fQUdHUkVHQVRPUiA9IDEK
K2NvbnN0IF9QQUNLRVRfTE9PUEJBQ0sgPSA1Citjb25zdCBfU1lTX2ZkYXRhc3luYyA9IF9fX05S
X2ZkYXRhc3luYworY29uc3QgX1NJT0NHSUZNQVAgPSAweDg5NzAKK2NvbnN0IF9fX0dDQ19BU01f
RkxBR19PVVRQVVRTX18gPSAxCitjb25zdCBfX19JRkxBX0JPTkRfU0xBVkVfTUFYID0gOQorY29u
c3QgX1NJT0NTQVJQID0gMHg4OTU1Citjb25zdCBfU1lTX3BybGltaXQ2NCA9IF9fX05SX3BybGlt
aXQ2NAorY29uc3QgX19fREVDMzJfTUlOX18gPSAxRS05NQorY29uc3QgX05MTV9GX1JFUExBQ0Ug
PSAweDEwMAorY29uc3QgX1RJT0NPVVRRID0gMHg1NDExCitjb25zdCBfSUZBX0NBQ0hFSU5GTyA9
IDYKK2NvbnN0IF9TWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgPSAxCitjb25zdCBfU1RBVFhf
QkxPQ0tTID0gMHgwNDAwCitjb25zdCBfUFJfRlBfRVhDX1VORCA9IDB4MDQwMDAwCitjb25zdCBf
SUZMQV9WWExBTl9HUEUgPSAyNworY29uc3QgX1BBQ0tBR0VfQlVHUkVQT1JUID0gIiIKK2NvbnN0
IF9JUFY2XzIyOTJEU1RPUFRTID0gNAorY29uc3QgX0lGTEFfRVhUX01BU0sgPSAyOQorY29uc3Qg
X19fQVRPTUlDX0hMRV9BQ1FVSVJFID0gNjU1MzYKK2NvbnN0IF9TWVNfdGltZXJmZF9zZXR0aW1l
ID0gX19fTlJfdGltZXJmZF9zZXR0aW1lCitjb25zdCBfX19saW51eF9fID0gMQorY29uc3QgX1BP
U0lYX0ZBRFZfUkFORE9NID0gMQorY29uc3QgX1BSSWlMRUFTVDE2ID0gImkiCitjb25zdCBfSUZM
QV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQSA9IDYKK2NvbnN0IF9fX1VTRV9JU09DOTUgPSAxCitj
b25zdCBfX0hBVkVfU1RSVUNUX1RFUk1JT1NfQ19PU1BFRUQgPSAxCitjb25zdCBfT19OT0ZPTExP
VyA9IF9fX09fTk9GT0xMT1cKK2NvbnN0IF9OREFfTElOS19ORVROU0lEID0gMTAKK2NvbnN0IF9f
X1VTRV9JU09DOTkgPSAxCitjb25zdCBfUlRGX01TUyA9IF9SVEZfTVRVCitjb25zdCBfX0JJVFNf
U1RESU5UX1VJTlROX0ggPSAxCitjb25zdCBfRl9PRkRfU0VUTEtXID0gMzgKK2NvbnN0IF9SVEFf
RU5DQVAgPSAyMgorY29uc3QgX0VFWElTVCA9IDE3Citjb25zdCBfUEFDS0VUX1ZFUlNJT04gPSAx
MAorY29uc3QgX1RDUF9DTE9TRSA9IDcKK2NvbnN0IF9TT19BVFRBQ0hfQlBGID0gNTAKK2NvbnN0
IF9QVFJBQ0VfRVZFTlRfU0VDQ09NUCA9IDcKK2NvbnN0IF9BUlBIUkRfQ0hBT1MgPSA1Citjb25z
dCBfX19GTFQzMl9NQU5UX0RJR19fID0gMjQKK2NvbnN0IF9fX0lGTEFfVkZfSU5GT19NQVggPSAy
Citjb25zdCBfRVRIX1BfQkFUTUFOID0gMHg0MzA1Citjb25zdCBfX1NUQVRfVkVSID0gX19TVEFU
X1ZFUl9MSU5VWAorY29uc3QgX1BPTExfTVNHID0gMworY29uc3QgX1NZU19zd2Fwb24gPSBfX19O
Ul9zd2Fwb24KK2NvbnN0IF9SVEZfQUREUkNPTkYgPSAweDAwMDQwMDAwCitjb25zdCBfX19MREJM
X0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9QRl9NUExTID0gMjgKK2NvbnN0IF9fQklUU19T
SUdJTkZPX0FSQ0hfSCA9IDEKK2NvbnN0IF9JQ01QNl9GSUxURVJfUEFTU09OTFkgPSA0Citjb25z
dCBfSVBfVFRMID0gMgorY29uc3QgX1NZU19ydF9zaWdxdWV1ZWluZm8gPSBfX19OUl9ydF9zaWdx
dWV1ZWluZm8KK2NvbnN0IF9fU0NfWE9QRU5fRU5IX0kxOE4gPSA5MworY29uc3QgX19fTlJfdGlt
ZXJfc2V0dGltZSA9IDIyMworY29uc3QgX1BUUkFDRV9PX1NVU1BFTkRfU0VDQ09NUCA9IDIwOTcx
NTIKK2NvbnN0IF9TWVNfZ2V0cG1zZyA9IF9fX05SX2dldHBtc2cKK2NvbnN0IF9fU1lTX1JFU09V
UkNFX0ggPSAxCitjb25zdCBfREVGRklMRU1PREUgPSAoX1NfSVJVU1J8X1NfSVdVU1J8X1NfSVJH
UlB8X1NfSVdHUlB8X1NfSVJPVEh8X1NfSVdPVEgpCitjb25zdCBfUlRBX0RTVCA9IDEKK2NvbnN0
IF9fX1NURENfSUVDXzU1OV9fID0gMQorY29uc3QgX1NZU19hcmNoX3ByY3RsID0gX19fTlJfYXJj
aF9wcmN0bAorY29uc3QgX0FGX05FVFJPTSA9IF9QRl9ORVRST00KK2NvbnN0IF9JUFRPU19USFJP
VUdIUFVUID0gMHgwOAorY29uc3QgX05EVEFfVEhSRVNIMiA9IDMKK2NvbnN0IF9DTE9DS19CT09U
VElNRV9BTEFSTSA9IDkKK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTU9ERSA9IDEKK2NvbnN0IF9TX0lX
UklURSA9IF9TX0lXVVNSCitjb25zdCBfSUNNUDZfUEFSQU1QUk9CX09QVElPTiA9IDIKK2NvbnN0
IF9fQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9DRkxBR1MgPSAxMTI0Citjb25zdCBfRVRIX1BfVFJf
ODAyXzIgPSAweDAwMTEKK2NvbnN0IF9USU9DTV9EVFIgPSAweDAwMgorY29uc3QgX19TQ19VU0VS
X0dST1VQU19SID0gMTY3Citjb25zdCBfRVRIX1BfQUxMID0gMHgwMDAzCitjb25zdCBfU1lTX2Zj
aG93biA9IF9fX05SX2ZjaG93bgorY29uc3QgX0lQUE9SVF9TWVNUQVQgPSAxMQorY29uc3QgX19f
TE9OR19NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX1NJR1NUS0ZMVCA9IDE2Citj
b25zdCBfUlRGX01PRElGSUVEID0gMHgwMDIwCitjb25zdCBfUFJJT19QUk9DRVNTID0gMAorY29u
c3QgX19fTlJfc2VtZ2V0ID0gNjQKK2NvbnN0IF9JRkFfRl9TVEFCTEVfUFJJVkFDWSA9IDB4ODAw
Citjb25zdCBfUlROSF9DT01QQVJFX01BU0sgPSAoX1JUTkhfRl9ERUFEIHwgX1JUTkhfRl9MSU5L
RE9XTiB8IF9SVE5IX0ZfT0ZGTE9BRCkKK2NvbnN0IF9OTE1fRl9BQ0tfVExWUyA9IDB4MjAwCitj
b25zdCBfTF9JTkNSID0gMQorY29uc3QgX1JXSF9XUklURV9MSUZFX1NIT1JUID0gMgorY29uc3Qg
X0VBRk5PU1VQUE9SVCA9IDk3Citjb25zdCBfSUZMQV9CT05EX0FEX0xBQ1BfUkFURSA9IDIxCitj
b25zdCBfU1lTX3NlbGVjdCA9IF9fX05SX3NlbGVjdAorY29uc3QgX0lGTEFfVFVOX05VTV9RVUVV
RVMgPSA4Citjb25zdCBfX19TSV9NQVhfU0laRSA9IDEyOAorY29uc3QgX0lGTEFfQ09TVCA9IDgK
K2NvbnN0IF9OTE1TR19ET05FID0gMHgzCitjb25zdCBfX19OUl9zdGF0ZnMgPSAxMzcKK2NvbnN0
IF9fX0ZfR0VUT1dOX0VYID0gMTYKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJ
QlMgPSAxMTIyCitjb25zdCBfX19OUl9nZXRkZW50czY0ID0gMjE3Citjb25zdCBfSEFWRV9JTk9U
SUZZX0lOSVQxID0gMQorY29uc3QgX0FJX1Y0TUFQUEVEID0gMHgwMDA4Citjb25zdCBfU0NOdUZB
U1Q4ID0gImhodSIKK2NvbnN0IF9fX05SX2Vwb2xsX2N0bCA9IDIzMworY29uc3QgX0FDQ0VTU1BF
Uk1TID0gKF9TX0lSV1hVfF9TX0lSV1hHfF9TX0lSV1hPKQorY29uc3QgX1RDQV9EVU1QX0lOVklT
SUJMRSA9IDEwCitjb25zdCBfU0lHRVZfVEhSRUFEX0lEID0gNAorY29uc3QgX0ZGSV9UWVBFX0lO
VCA9IDEKK2NvbnN0IF9OTF9BUkdNQVggPSBfX1BPU0lYX0FSR19NQVgKK2NvbnN0IF9TU19ESVNB
QkxFID0gMgorY29uc3QgX0VUSF9QX0NBTiA9IDB4MDAwQworY29uc3QgX19fU0laRU9GX1BUSFJF
QURfQkFSUklFUkFUVFJfVCA9IDQKK2NvbnN0IF9fX0ZMVF9FVkFMX01FVEhPRF9fID0gMAorY29u
c3QgX19fTlJfc2Vtb3AgPSA2NQorY29uc3QgX1BfQUxMID0gMAorY29uc3QgX0VUSF9QX01QTFNf
TUMgPSAweDg4NDgKK2NvbnN0IF9fX05SX3B3cml0ZXYyID0gMzI4Citjb25zdCBfU1lTX2FjY2Vw
dDQgPSBfX19OUl9hY2NlcHQ0Citjb25zdCBfX19TSVpFT0ZfUFRSRElGRl9UX18gPSA4Citjb25z
dCBfX19GTFQzMlhfREVOT1JNX01JTl9fID0gMS4xCitjb25zdCBfSUZMQV9CT05EX1NMQVZFX1FV
RVVFX0lEID0gNQorY29uc3QgX1JUUFJPVF9YT1JQID0gMTQKK2NvbnN0IF9TWVNfcHJvY2Vzc192
bV93cml0ZXYgPSBfX19OUl9wcm9jZXNzX3ZtX3dyaXRldgorY29uc3QgX19fVENBX1JPT1RfTUFY
ID0gNQorY29uc3QgX0lGTEFfT1BFUlNUQVRFID0gMTYKK2NvbnN0IF9JQ01QNl9SUl9QQ09VU0Vf
RkxBR1NfREVDUlBMVElNRSA9IDB4NDAKK2NvbnN0IF9ORFRQQV9QUk9YWV9ERUxBWSA9IDEzCitj
b25zdCBfX19STElNSVRfTlBST0MgPSA2Citjb25zdCBfU1lTX3F1b3RhY3RsID0gX19fTlJfcXVv
dGFjdGwKK2NvbnN0IF9fSU9DX05PTkUgPSAwCitjb25zdCBfSUZMQV9CT05EX1NMQVZFX01JSV9T
VEFUVVMgPSAyCitjb25zdCBfU09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQgPSAyMwor
Y29uc3QgX1NUQVRYX01PREUgPSAweDAwMDIKK2NvbnN0IF9GRklfVFlQRV9VSU5UOCA9IDUKK2Nv
bnN0IF9QUk9UX0dST1dTRE9XTiA9IDB4MDEwMDAwMDAKK2NvbnN0IF9NQVBfR1JPV1NET1dOID0g
MHgwMDEwMAorY29uc3QgX0VCQURNU0cgPSA3NAorY29uc3QgX01BUF9QT1BVTEFURSA9IDB4MDgw
MDAKK2NvbnN0IF9USU1FX0RFTCA9IDIKK2NvbnN0IF9fX0ZfU0VUT1dOID0gOAorY29uc3QgX1VJ
TlQxNl9NQVggPSAoNjU1MzUpCitjb25zdCBfTkxfTEFOR01BWCA9IF9fUE9TSVgyX0xJTkVfTUFY
Citjb25zdCBfTVNfTEFaWVRJTUUgPSAzMzU1NDQzMgorY29uc3QgX1NZU19ta2RpciA9IF9fX05S
X21rZGlyCitjb25zdCBfSUZMQV9NQUNTRUNfV0lORE9XID0gNQorY29uc3QgX19fTlJfaW9fZ2V0
ZXZlbnRzID0gMjA4Citjb25zdCBfRkZJX0RFRkFVTFRfQUJJID0gMgorY29uc3QgX1NZU19yZW5h
bWUgPSBfX19OUl9yZW5hbWUKK2NvbnN0IF9FVEhfUF9EU0EgPSAweDAwMUIKK2NvbnN0IF9QVFJB
Q0VfU0VUX1RIUkVBRF9BUkVBID0gMjYKK2NvbnN0IF9JUF9SRUNWVFRMID0gMTIKK2NvbnN0IF9Y
RFBfRkxBR1NfSFdfTU9ERSA9ICgxIDw8IDMpCitjb25zdCBfTUFYX0hBTkRMRV9TWiA9IDEyOAor
Y29uc3QgX0lGRl9ERUJVRyA9IDQKK2NvbnN0IF9BRl9FQ09ORVQgPSBfUEZfRUNPTkVUCitjb25z
dCBfVENBX1JBVEUgPSA1Citjb25zdCBfX1hPUEVOX0VOSF9JMThOID0gMQorY29uc3QgX19TQ18y
X0ZPUlRfUlVOID0gNTAKK2NvbnN0IF9OTE1TR0VSUl9BVFRSX0NPT0tJRSA9IDMKK2NvbnN0IF9f
X05EVFBBX01BWCA9IDE5Citjb25zdCBfSUZMQV9OVU1fVkYgPSAyMQorY29uc3QgX1JUQV9FWFBJ
UkVTID0gMjMKK2NvbnN0IF9QT0xMX09VVCA9IDIKK2NvbnN0IF9fQklUU19TU19GTEFHU19IID0g
MQorY29uc3QgX0lQT1BUX05PUCA9IDEKK2NvbnN0IF9JRk5BTVNJWiA9IF9JRl9OQU1FU0laRQor
Y29uc3QgX1NZU192aGFuZ3VwID0gX19fTlJfdmhhbmd1cAorY29uc3QgX0ZTX0hVR0VfRklMRV9G
TCA9IDB4MDAwNDAwMDAKK2NvbnN0IF9TSUdUUkFQID0gNQorY29uc3QgX19fRkxUMTI4X0RJR19f
ID0gMzMKK2NvbnN0IF9TWVNfdGltZXJmZF9nZXR0aW1lID0gX19fTlJfdGltZXJmZF9nZXR0aW1l
Citjb25zdCBfQlBGX0xFTiA9IDB4ODAKK2NvbnN0IF9CSUdfRU5ESUFOID0gX19fQklHX0VORElB
TgorY29uc3QgX1JUTUdSUF9JUFY0X1JPVVRFID0gMHg0MAorY29uc3QgX0IxMDAwMDAwID0gMDAx
MDAxMAorY29uc3QgX1NZU19nZXRjcHUgPSBfX19OUl9nZXRjcHUKK2NvbnN0IF9fX05SX21xX3Rp
bWVkcmVjZWl2ZSA9IDI0MworY29uc3QgX19QQVRIX05FVFdPUktTID0gIi9ldGMvbmV0d29ya3Mi
Citjb25zdCBfVVNJTkdfU1BMSVRfU1RBQ0sgPSAxCitjb25zdCBfRkZJX1RZUEVfU0lOVDMyID0g
MTAKK2NvbnN0IF9fX1JMSU1JVF9PRklMRSA9IDcKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1FVRVJZ
X1JFU1BPTlNFX0lOVFZMID0gMzQKK2NvbnN0IF9TSU9DR0lGTUVNID0gMHg4OTFmCitjb25zdCBf
SU5UX0ZBU1QxNl9XSURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfSEFWRV9TWVNfU0VMRUNUX0gg
PSAxCitjb25zdCBfT19XUk9OTFkgPSAwMQorY29uc3QgX19fTlJfcHJlYWR2ID0gMjk1Citjb25z
dCBfU1lTX2FjY3QgPSBfX19OUl9hY2N0Citjb25zdCBfRE5fUkVOQU1FID0gMHgwMDAwMDAxMAor
Y29uc3QgX1NZU19zZXRyZXVpZCA9IF9fX05SX3NldHJldWlkCitjb25zdCBfSUZMQV9YRFBfRFJW
X1BST0dfSUQgPSA1Citjb25zdCBfRUFMUkVBRFkgPSAxMTQKK2NvbnN0IF9ORFRQQV9RVUVVRV9M
RU4gPSA4Citjb25zdCBfX19HTElCQ19VU0VfSUVDXzYwNTU5X0ZVTkNTX0VYVCA9IDEKK2NvbnN0
IF9JTExfUFJWT1BDID0gNQorY29uc3QgX1RVTkdFVEZFQVRVUkVTX3ZhbCA9IDIxNDc3Njc1MDMK
K2NvbnN0IF9SVE5MR1JQX0lQVjZfUk9VVEUgPSAxMQorY29uc3QgX19fTlJfdGltZXJfZ2V0dGlt
ZSA9IDIyNAorY29uc3QgX0VUSF9QX0FPRSA9IDB4ODhBMgorY29uc3QgX19fTlJfZ2V0Z3JvdXBz
ID0gMTE1Citjb25zdCBfU1lTX3JzZXEgPSBfX19OUl9yc2VxCitjb25zdCBfRklPUVNJWkUgPSAw
eDU0NjAKK2NvbnN0IF9JUE9QVF9DT05UUk9MID0gMHgwMAorY29uc3QgX19fU0lfRVJSTk9fVEhF
Tl9DT0RFID0gMQorY29uc3QgX0ZQRV9JTlRESVYgPSAxCitjb25zdCBfTVNfTk9BVElNRSA9IDEw
MjQKK2NvbnN0IF9DWDg2X0RJUjAgPSAweGZlCitjb25zdCBfX19OUl9wZXJmX2V2ZW50X29wZW4g
PSAyOTgKK2NvbnN0IF9GRklfQkFEX0FCSSA9IDIKK2NvbnN0IF9fX05SX2dldF9tZW1wb2xpY3kg
PSAyMzkKK2NvbnN0IF9NQ0xfQ1VSUkVOVCA9IDEKK2NvbnN0IF9JUF9YRlJNX1BPTElDWSA9IDE3
Citjb25zdCBfX19TSVpFT0ZfU0hPUlRfXyA9IDIKK2NvbnN0IF9TWVNfZnN0YXQgPSBfX19OUl9m
c3RhdAorY29uc3QgX0lGTEFfVkZJTkZPX0xJU1QgPSAyMgorY29uc3QgX1RDUF9GSU5fV0FJVDIg
PSA1Citjb25zdCBfX1NDX0NQVVRJTUUgPSAxMzgKK2NvbnN0IF9UVU5fRl9UU09fRUNOID0gMHgw
OAorY29uc3QgX19fV09SRFNJWkVfVElNRTY0X0NPTVBBVDMyID0gMQorY29uc3QgX0lGTEFfSU5G
T19VTlNQRUMgPSAwCitjb25zdCBfRVRIX1BfWERTQSA9IDB4MDBGOAorY29uc3QgX0lQX1BNVFVE
SVNDID0gMTAKK2NvbnN0IF9BVF9SRU1PVkVESVIgPSAweDIwMAorY29uc3QgX1RJT0NTV0lOU1og
PSAweDU0MTQKK2NvbnN0IF9fX0ZMVDMyX0hBU19ERU5PUk1fXyA9IDEKK2NvbnN0IF9GU0xBQkVM
X01BWCA9IDI1NgorY29uc3QgX09fTk9OQkxPQ0sgPSAwNDAwMAorY29uc3QgX0ZfR0VUX1NFQUxT
ID0gMTAzNAorY29uc3QgX1BBQ0tFVF9UWF9SSU5HID0gMTMKK2NvbnN0IF9UQ1BfTVNTX0RFRkFV
TFQgPSA1MzYKK2NvbnN0IF9CQ19ESU1fTUFYID0gX19QT1NJWDJfQkNfRElNX01BWAorY29uc3Qg
X0lQT1BUX0xTUlIgPSAxMzEKK2NvbnN0IF9fU0NfVjdfTFA2NF9PRkY2NCA9IDIzOQorY29uc3Qg
X1BSX0dFVF9QREVBVEhTSUcgPSAyCitjb25zdCBfU1lTX3N5bWxpbmsgPSBfX19OUl9zeW1saW5r
Citjb25zdCBfX19ERUM2NF9NQU5UX0RJR19fID0gMTYKK2NvbnN0IF9QT1JUX1NFTEZfVkYgPSAt
MQorY29uc3QgX19TQ19TWU1MT09QX01BWCA9IDE3MworY29uc3QgX1hEUF9GTEFHU19VUERBVEVf
SUZfTk9FWElTVCA9ICgxIDw8IDApCitjb25zdCBfTUFDVkxBTl9NQUNBRERSX0FERCA9IDAKK2Nv
bnN0IF9fR1JQX0ggPSAxCitjb25zdCBfX19OUl9kZWxldGVfbW9kdWxlID0gMTc2Citjb25zdCBf
U1lTX3NlbmR0byA9IF9fX05SX3NlbmR0bworY29uc3QgX0lGTEFfVkxBTl9RT1NfTUFQUElORyA9
IDEKK2NvbnN0IF9TSUdURVJNID0gMTUKK2NvbnN0IF9QUl9TVkVfR0VUX1ZMID0gNTEKK2NvbnN0
IF9fQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUyA9IDExMTQKK2NvbnN0IF9JRkxBX1hEUF9IV19Q
Uk9HX0lEID0gNworY29uc3QgX19TWVNfVUNPTlRFWFRfSCA9IDEKK2NvbnN0IF9fX05SX3JlYWRs
aW5rYXQgPSAyNjcKK2NvbnN0IF9JRkxBX0dUUF9VTlNQRUMgPSAwCitjb25zdCBfVkxORVhUID0g
MTUKK2NvbnN0IF9QT1NJWF9NQURWX1dJTExORUVEID0gMworY29uc3QgX19fcnVzYWdlX2RlZmlu
ZWQgPSAxCitjb25zdCBfU1lTX3NlY3VyaXR5ID0gX19fTlJfc2VjdXJpdHkKK2NvbnN0IF9YODZf
Q1I0X1NNQVBfQklUID0gMjEKK2NvbnN0IF9UVU5fRl9UU082ID0gMHgwNAorY29uc3QgX0FGX0NB
TiA9IF9QRl9DQU4KK2NvbnN0IF9fX05SX3J0X3NpZ3Byb2NtYXNrID0gMTQKK2NvbnN0IF9JTlRf
TEVBU1QxNl9XSURUSCA9IDE2Citjb25zdCBfX19OUl9mbG9jayA9IDczCitjb25zdCBfQ0xPTkVf
UEFSRU5UID0gMHgwMDAwODAwMAorY29uc3QgX1JUQV9BTElHTlRPID0gNAorY29uc3QgX1BPU0lY
X01BRFZfU0VRVUVOVElBTCA9IDIKK2NvbnN0IF9TWVNfc2V0aG9zdG5hbWUgPSBfX19OUl9zZXRo
b3N0bmFtZQorY29uc3QgX1NZU192c2VydmVyID0gX19fTlJfdnNlcnZlcgorY29uc3QgX1g4Nl9F
RkxBR1NfTlRfQklUID0gMTQKK2NvbnN0IF9NTlRfRVhQSVJFID0gNAorY29uc3QgX1BGX1NNQyA9
IDQzCitjb25zdCBfRUFJX05PTkFNRSA9IC0yCitjb25zdCBfX19OUl9yZXN0YXJ0X3N5c2NhbGwg
PSAyMTkKK2NvbnN0IF9fU0NfVEhSRUFEX0tFWVNfTUFYID0gNzQKK2NvbnN0IF9JRkxBX0JSX01D
QVNUX1NUQVJUVVBfUVVFUllfSU5UVkwgPSAzNQorY29uc3QgX0lDTVA2X0lORk9NU0dfTUFTSyA9
IDB4ODAKK2NvbnN0IF9JUE9JQl9NT0RFX0NPTk5FQ1RFRCA9IDEKK2NvbnN0IF9DTE9DQUwgPSAw
MDA0MDAwCitjb25zdCBfSEFWRV9TWVNfVVNFUl9IID0gMQorY29uc3QgX1g4Nl9FRkxBR1NfSU9Q
TF9CSVQgPSAxMgorY29uc3QgX0lGTEFfQlJQT1JUX1JPT1RfSUQgPSAxMworY29uc3QgX1RDU0VU
QSA9IDB4NTQwNgorY29uc3QgX1NZU19yZWFkYWhlYWQgPSBfX19OUl9yZWFkYWhlYWQKK2NvbnN0
IF9JRkxBX1NUQVRTNjQgPSAyMworY29uc3QgX19TQ19VSU5UX01BWCA9IDExNgorY29uc3QgX1BU
UkFDRV9QRUVLU0lHSU5GTyA9IDE2OTA1Citjb25zdCBfWDg2X0NSNF9WTUVfQklUID0gMAorY29u
c3QgX19YT1BFTl9TT1VSQ0VfRVhURU5ERUQgPSAxCitjb25zdCBfX19VU0VfTEFSR0VGSUxFID0g
MQorY29uc3QgX19fU0laRV9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3QgX1NLRl9B
RF9BTFVfWE9SX1ggPSA0MAorY29uc3QgX19JTlRUWVBFU19IID0gMQorY29uc3QgX1JUTkhfRl9Q
RVJWQVNJVkUgPSAyCitjb25zdCBfU09fVElNRVNUQU1QID0gMjkKK2NvbnN0IF9SVE1TR19PVkVS
UlVOID0gX05MTVNHX09WRVJSVU4KK2NvbnN0IF9CVVNfTUNFRVJSX0FPID0gNQorY29uc3QgX19f
SUZMQV9NQUNWTEFOX01BWCA9IDcKK2NvbnN0IF9JUFRPU19FQ05fTUFTSyA9IDB4MDMKK2NvbnN0
IF9CVVNfTUNFRVJSX0FSID0gNAorY29uc3QgX0I1MDAwMDAgPSAwMDEwMDA1Citjb25zdCBfX19T
VERDX0hPU1RFRF9fID0gMQorY29uc3QgX19fSU5UX0xFQVNUMzJfV0lEVEhfXyA9IDMyCitjb25z
dCBfU0lPQ1NJRkxJTksgPSAweDg5MTEKK2NvbnN0IF9SRU5BTUVfRVhDSEFOR0UgPSAoMSA8PCAx
KQorY29uc3QgX01BRFZfRE9GT1JLID0gMTEKK2NvbnN0IF9fU0NfWEJTNV9MUDY0X09GRjY0ID0g
MTI3Citjb25zdCBfX0xBUkdFRklMRTY0X1NPVVJDRSA9IDEKK2NvbnN0IF9TT19ET05UUk9VVEUg
PSA1Citjb25zdCBfX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiA9IDE4MgorY29uc3QgX0ZfU0VBTF9X
UklURSA9IDB4MDAwOAorY29uc3QgX1NUREVSUl9GSUxFTk8gPSAyCitjb25zdCBfVENQX1NFTkRf
UVVFVUUgPSAyCitjb25zdCBfSVBWTEFOX01PREVfTUFYID0gMworY29uc3QgX19fT19OT0FUSU1F
ID0gMDEwMDAwMDAKK2NvbnN0IF9QRl9TTkEgPSAyMgorY29uc3QgX0lGTEFfVkZfU1RBVFNfUlhf
RFJPUFBFRCA9IDcKK2NvbnN0IF9TT19QQVNTU0VDID0gMzQKK2NvbnN0IF9JR05QQVIgPSAwMDAw
MDA0Citjb25zdCBfU1lTX3RpbWUgPSBfX19OUl90aW1lCitjb25zdCBfVENQX05PVFNFTlRfTE9X
QVQgPSAyNQorY29uc3QgX0lGTEFfVlhMQU5fR1JPVVAgPSAyCitjb25zdCBfTk9GTFNIID0gMDAw
MDIwMAorY29uc3QgX1NPTF9EQ0NQID0gMjY5Citjb25zdCBfU1lTX3N5c2xvZyA9IF9fX05SX3N5
c2xvZworY29uc3QgX1NZU19pb19nZXRldmVudHMgPSBfX19OUl9pb19nZXRldmVudHMKK2NvbnN0
IF9SVE1fTkVXTURCID0gODQKK2NvbnN0IF9JRkxBX0lORk9fU0xBVkVfS0lORCA9IDQKK2NvbnN0
IF9JRkxBX1ZYTEFOX0wyTUlTUyA9IDEzCitjb25zdCBfX1NDX0xFVkVMM19DQUNIRV9TSVpFID0g
MTk0Citjb25zdCBfSEFWRV9MSU5VWF9JRl9BRERSX0ggPSAxCitjb25zdCBfT19DUkVBVCA9IDAx
MDAKK2NvbnN0IF9FTk9ERVYgPSAxOQorY29uc3QgX19fRkxUMzJfSEFTX1FVSUVUX05BTl9fID0g
MQorY29uc3QgX1RJT0NHUEdSUF92YWwgPSAyMTUxOQorY29uc3QgX1NDTnVMRUFTVDE2ID0gImh1
IgorY29uc3QgX19fTlJfcG9sbCA9IDcKK2NvbnN0IF9fU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCA9
IDgwCitjb25zdCBfR0FJX05PV0FJVCA9IDEKK2NvbnN0IF9JRkFfRl9OT1BSRUZJWFJPVVRFID0g
MHgyMDAKK2NvbnN0IF9TWVNfd3JpdGUgPSBfX19OUl93cml0ZQorY29uc3QgX1NZU19mYW5vdGlm
eV9pbml0ID0gX19fTlJfZmFub3RpZnlfaW5pdAorY29uc3QgX0VUSF9QX0FSUCA9IDB4MDgwNgor
Y29uc3QgX19fTlJfaW9wbCA9IDE3MgorY29uc3QgX19fRkxUMzJYX01BWF9fID0gMS4xCitjb25z
dCBfRUNIT0UgPSAwMDAwMDIwCitjb25zdCBfSVBPUFRfVFNfVFNBTkRBRERSID0gMQorY29uc3Qg
X1NPX1BFRVJDUkVEID0gMTcKK2NvbnN0IF9JRkxBX0JSX0hFTExPX1RJTUUgPSAyCitjb25zdCBf
RkFMTE9DX0ZMX0NPTExBUFNFX1JBTkdFID0gMHgwOAorY29uc3QgX19TQ18yX1BCU19DSEVDS1BP
SU5UID0gMTc1Citjb25zdCBfRUNIT0sgPSAwMDAwMDQwCitjb25zdCBfSUZMQV9JUFZMQU5fTU9E
RSA9IDEKK2NvbnN0IF9JUFY2X0pPSU5fQU5ZQ0FTVCA9IDI3Citjb25zdCBfRUFJX0lOUFJPR1JF
U1MgPSAtMTAwCitjb25zdCBfUlROSF9BTElHTlRPID0gNAorY29uc3QgX0lQT1BUX1NJRCA9IF9J
UE9QVF9TQVRJRAorY29uc3QgX19fRkxUMzJfTUFYX0VYUF9fID0gMTI4Citjb25zdCBfTkRfT1BU
X1RBUkdFVF9MSU5LQUREUiA9IDIKK2NvbnN0IF9GX0dFVF9GSUxFX1JXX0hJTlQgPSAxMDM3Citj
b25zdCBfRkZJX0ZJUlNUX0FCSSA9IDAKK2NvbnN0IF9ORVRMSU5LX0VDUllQVEZTID0gMTkKK2Nv
bnN0IF9DWDg2X0dDUiA9IDB4YjgKK2NvbnN0IF9JUF9ST1VURVJfQUxFUlQgPSA1Citjb25zdCBf
X19OUl9zcGxpY2UgPSAyNzUKK2NvbnN0IF9USU9DU0NUVFlfdmFsID0gMjE1MTgKK2NvbnN0IF9f
X05SX2tleWN0bCA9IDI1MAorY29uc3QgX01TX05PU0VDID0gKDE8PDI4KQorY29uc3QgX05MTV9G
X0NBUFBFRCA9IDB4MTAwCitjb25zdCBfX1NDX05FVFdPUktJTkcgPSAxNTIKK2NvbnN0IF9fX0FU
T01JQ19SRUxFQVNFID0gMworY29uc3QgX0lGTEFfVkZfVU5TUEVDID0gMAorY29uc3QgX19fTlJf
ZmNobW9kYXQgPSAyNjgKK2NvbnN0IF9SVEZfSE9TVCA9IDB4MDAwNAorY29uc3QgX0lGRl9QRVJT
SVNUID0gMHgwODAwCitjb25zdCBfRlNfTk9DT01QX0ZMID0gMHgwMDAwMDQwMAorY29uc3QgX1NP
X1NFQ1VSSVRZX0FVVEhFTlRJQ0FUSU9OID0gMjIKK2NvbnN0IF9CUEZfSkVRID0gMHgxMAorY29u
c3QgX0ZGSV9UWVBFX1VJTlQzMiA9IDkKK2NvbnN0IF9TWVNfaW5vdGlmeV9hZGRfd2F0Y2ggPSBf
X19OUl9pbm90aWZ5X2FkZF93YXRjaAorY29uc3QgX1BPU0lYX01BRFZfUkFORE9NID0gMQorY29u
c3QgX1JURl9NVUxUSUNBU1QgPSAweDIwMDAwMDAwCitjb25zdCBfTlRQX0FQSSA9IDQKK2NvbnN0
IF9JUFY2X01VTFRJQ0FTVF9JRiA9IDE3Citjb25zdCBfU09fTUFYX1BBQ0lOR19SQVRFID0gNDcK
K2NvbnN0IF9IQVZFX0xPRzEwTCA9IDEKK2NvbnN0IF9JRkxBX1ZGX1JTU19RVUVSWV9FTiA9IDcK
K2NvbnN0IF9fX0ZMVDY0X01BWF8xMF9FWFBfXyA9IDMwOAorY29uc3QgX1BUUkFDRV9TWVNFTVVf
U0lOR0xFU1RFUCA9IDMyCitjb25zdCBfU1lTX2R1cCA9IF9fX05SX2R1cAorY29uc3QgX0FSUEhS
RF9JRUVFODAyMTU0X1BIWSA9IDgwNQorY29uc3QgX19fTlJfaW9fc2V0dXAgPSAyMDYKK2NvbnN0
IF9JUE9QVF9TU1JSID0gMTM3Citjb25zdCBfX0RJUkVOVF9NQVRDSEVTX0RJUkVOVDY0ID0gMQor
Y29uc3QgX1BBQ0tFVF9IT1NUID0gMAorY29uc3QgX0FSUEhSRF9ETENJID0gMTUKK2NvbnN0IF9J
RkxBX0lORVQ2X0NPTkYgPSAyCitjb25zdCBfSUZMQV9WRl9MSU5LX1NUQVRFX0RJU0FCTEUgPSAy
Citjb25zdCBfX19pdGltZXJzcGVjX2RlZmluZWQgPSAxCitjb25zdCBfX19OUl9waXZvdF9yb290
ID0gMTU1Citjb25zdCBfRlNfRU5DUllQVF9GTCA9IDB4MDAwMDA4MDAKK2NvbnN0IF9fU1lTX1BS
Q1RMX0ggPSAxCitjb25zdCBfX19STElNSVRfUlRQUklPID0gMTQKK2NvbnN0IF9DTE9DS19NT05P
VE9OSUMgPSAxCitjb25zdCBfX19VSU5UX0ZBU1QzMl9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZm
ZgorY29uc3QgX05FVExJTktfQ1JZUFRPID0gMjEKK2NvbnN0IF9FVEhfUF9GSVAgPSAweDg5MTQK
K2NvbnN0IF9PQ1JOTCA9IDAwMDAwMTAKK2NvbnN0IF9fX05SX3NldGdpZCA9IDEwNgorY29uc3Qg
X0lGRl9WTkVUX0hEUiA9IDB4NDAwMAorY29uc3QgX1NDTnVMRUFTVDMyID0gInUiCitjb25zdCBf
UFJJeExFQVNUMTYgPSAieCIKK2NvbnN0IF9fX05SX2lvcHJpb19zZXQgPSAyNTEKK2NvbnN0IF9f
U0VNQVBIT1JFX0ggPSAxCitjb25zdCBfUlRGX1NUQVRJQyA9IDB4MDQwMAorY29uc3QgX1BSX0VO
RElBTl9QUENfTElUVExFID0gMgorY29uc3QgX19fRkRfU0VUU0laRSA9IDEwMjQKK2NvbnN0IF9T
WVNfc2VjY29tcCA9IF9fX05SX3NlY2NvbXAKK2NvbnN0IF9fX0xEQkxfTUlOX18gPSAxLjEKK2Nv
bnN0IF9fX0RFQzMyX01BWF9fID0gOS45OTk5OTlFOTYKK2NvbnN0IF9fX0lOVFBUUl9NQVhfXyA9
IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX19fRklMRV9kZWZpbmVkID0gMQorY29uc3QgX01P
RF9OQU5PID0gX0FESl9OQU5PCitjb25zdCBfX19GTFQzMl9FUFNJTE9OX18gPSAxLjEKK2NvbnN0
IF9YODZfRUZMQUdTX0FDX0JJVCA9IDE4Citjb25zdCBfUFJPVF9FWEVDID0gMHg0Citjb25zdCBf
SUZMQV9TVEFUU19VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9WRl9QT1JUX1VOU1BFQyA9IDAKK2Nv
bnN0IF9TQ0hFRF9PVEhFUiA9IDAKK2NvbnN0IF9BTExQRVJNUyA9IChfU19JU1VJRHxfU19JU0dJ
RHxfU19JU1ZUWHxfU19JUldYVXxfU19JUldYR3xfU19JUldYTykKK2NvbnN0IF9fX05SX2dldGRl
bnRzID0gNzgKK2NvbnN0IF9ORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FID0gNAorY29uc3QgX0VU
SF9QX1dDQ1AgPSAweDg4M0UKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJTlRG
TEFHUyA9IDExMjMKK2NvbnN0IF9JRkxBX0VWRU5UX1JFQk9PVCA9IDEKK2NvbnN0IF9BUlBIUkRf
UkFXSERMQyA9IDUxOAorY29uc3QgX0NMRF9TVE9QUEVEID0gNQorY29uc3QgX19fRkxUMzJfREVD
SU1BTF9ESUdfXyA9IDkKK2NvbnN0IF9fX1NfSVNWVFggPSAwMTAwMAorY29uc3QgX0FGX0lVQ1Yg
PSBfUEZfSVVDVgorY29uc3QgX1JUTkxHUlBfTk9QMiA9IDE0Citjb25zdCBfX19jb2RlX21vZGVs
X3NtYWxsX18gPSAxCitjb25zdCBfVENQX0ZBU1RPUEVOX0NPTk5FQ1QgPSAzMAorY29uc3QgX19T
Q19USFJFQURfUFJJT19QUk9URUNUID0gODEKK2NvbnN0IF9fQklUU19TSUdOVU1fR0VORVJJQ19I
ID0gMQorY29uc3QgX1JXSF9XUklURV9MSUZFX0VYVFJFTUUgPSA1Citjb25zdCBfSU5UTUFYX1dJ
RFRIID0gNjQKK2NvbnN0IF9FRE9NID0gMzMKK2NvbnN0IF9TWVNfc2NoZWRfZ2V0c2NoZWR1bGVy
ID0gX19fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCitjb25zdCBfRVhUQSA9IF9CMTkyMDAKK2NvbnN0
IF9FWFRCID0gX0IzODQwMAorY29uc3QgX1NZU19wZXJmX2V2ZW50X29wZW4gPSBfX19OUl9wZXJm
X2V2ZW50X29wZW4KK2NvbnN0IF9TWVNfc2V0bnMgPSBfX19OUl9zZXRucworY29uc3QgX19JT0Nf
U0laRUJJVFMgPSAxNAorY29uc3QgX19YT1BFTl9MRUdBQ1kgPSAxCitjb25zdCBfX1BPU0lYMl9M
T0NBTEVERUYgPSBfX19QT1NJWDJfVEhJU19WRVJTSU9OCitjb25zdCBfVFRZX05BTUVfTUFYID0g
MzIKK2NvbnN0IF9fUE9TSVhfUkVfRFVQX01BWCA9IDI1NQorY29uc3QgX0lQVjZfUkVDVkhPUE9Q
VFMgPSA1MworY29uc3QgX05FVExJTktfQlJPQURDQVNUX0VSUk9SID0gNAorY29uc3QgX1BSX1NF
VF9NTSA9IDM1Citjb25zdCBfX19GTE9BVF9XT1JEX09SREVSID0gX19fQllURV9PUkRFUgorY29u
c3QgX19TQ19VQ0hBUl9NQVggPSAxMTUKK2NvbnN0IF9FVEhfUF9NUExTX1VDID0gMHg4ODQ3Citj
b25zdCBfTkxBX1RZUEVfTUFTSyA9IF4oX05MQV9GX05FU1RFRCB8IF9OTEFfRl9ORVRfQllURU9S
REVSKQorY29uc3QgX19TQ19YT1BFTl9TVFJFQU1TID0gMjQ2Citjb25zdCBfQlBGX0pHVCA9IDB4
MjAKK2NvbnN0IF9fX0lOVDY0X01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfTU9E
X0ZSRVFVRU5DWSA9IF9BREpfRlJFUVVFTkNZCitjb25zdCBfX19OUl9zaG1kdCA9IDY3Citjb25z
dCBfU1lTX2dldGN3ZCA9IF9fX05SX2dldGN3ZAorY29uc3QgX19fU0laRU9GX0xPTkdfXyA9IDgK
K2NvbnN0IF9CUEZfTkVUX09GRiA9IF9TS0ZfTkVUX09GRgorY29uc3QgX0lQX0JMT0NLX1NPVVJD
RSA9IDM4Citjb25zdCBfRUNIUk5HID0gNDQKK2NvbnN0IF9FQUlfU1lTVEVNID0gLTExCitjb25z
dCBfX19OUl9yZXF1ZXN0X2tleSA9IDI0OQorY29uc3QgX19TQ19MRVZFTDNfQ0FDSEVfQVNTT0Mg
PSAxOTUKK2NvbnN0IF9QUklYOCA9ICJYIgorY29uc3QgX0hBVkVfVEVFID0gMQorY29uc3QgX0hB
VkVfQ09ORklHX0ggPSAxCitjb25zdCBfX1BPU0lYX0NMT0NLX1NFTEVDVElPTiA9IDIwMDgwOQor
Y29uc3QgX1RDT09GRiA9IDAKK2NvbnN0IF9UQ1BfTVNTX0RFU0lSRUQgPSAxMjIwCitjb25zdCBf
QUlfUEFTU0lWRSA9IDB4MDAwMQorY29uc3QgX1NfSUZMTksgPSBfX19TX0lGTE5LCitjb25zdCBf
RFRfU09DSyA9IDEyCitjb25zdCBfX1NDXzJfVVBFID0gOTcKK2NvbnN0IF9MSU5VWF9SRUJPT1Rf
Q01EX0tFWEVDID0gMHg0NTU4NDU0MworY29uc3QgX19TQ19VU0hSVF9NQVggPSAxMTgKK2NvbnN0
IF9TT19CU0RDT01QQVQgPSAxNAorY29uc3QgX19LX1NTX01BWFNJWkUgPSAxMjgKK2NvbnN0IF9S
VENGX1ZBTFZFID0gMHgwMDIwMDAwMAorY29uc3QgX0lGTEFfVFVOX05VTV9ESVNBQkxFRF9RVUVV
RVMgPSA5Citjb25zdCBfSEFWRV9NRU1PUllfSCA9IDEKK2NvbnN0IF9YODZfQ1I0X1VNSVBfQklU
ID0gMTEKK2NvbnN0IF9IQVZFX05FVElORVRfSUZfRVRIRVJfSCA9IDEKK2NvbnN0IF9BRl9NQVgg
PSBfUEZfTUFYCitjb25zdCBfSEFWRV9FWFBNMUwgPSAxCitjb25zdCBfX19fX2d3Y2hhcl90X2Rl
ZmluZWQgPSAxCitjb25zdCBfTlRGX1NFTEYgPSAweDAyCitjb25zdCBfX0JJVFNfU0lHQUNUSU9O
X0ggPSAxCitjb25zdCBfU1lTX3JlYm9vdCA9IF9fX05SX3JlYm9vdAorY29uc3QgX1JFR19UUkFQ
Tk8gPSAyMAorY29uc3QgX0FESl9PRkZTRVRfU1NfUkVBRCA9IDB4YTAwMQorY29uc3QgX0lDTVA2
X1BBUkFNX1BST0IgPSA0Citjb25zdCBfRVRIX1BfSUVFRVBVUEFUID0gMHgwYTAxCitjb25zdCBf
SVBQUk9UT19FR1AgPSA4Citjb25zdCBfSUZMQV9WRl9TVEFUU19NVUxUSUNBU1QgPSA1Citjb25z
dCBfUlRNX0RFTFRDTEFTUyA9IDQxCitjb25zdCBfX1BPU0lYX1NQQVdOID0gMjAwODA5Citjb25z
dCBfUlRBWF9SVE9fTUlOID0gMTMKK2NvbnN0IF9fU1lTX1VUU05BTUVfSCA9IDEKK2NvbnN0IF9O
RVRMSU5LX1BLVElORk8gPSAzCitjb25zdCBfRlBFX0ZMVElOViA9IDcKK2NvbnN0IF9fX05SX3Jl
bW92ZXhhdHRyID0gMTk3Citjb25zdCBfRl9OT1RJRlkgPSAxMDI2Citjb25zdCBfTVNfSU5WQUxJ
REFURSA9IDIKK2NvbnN0IF9TSU9DUFJPVE9QUklWQVRFID0gMHg4OUUwCitjb25zdCBfX19OUl92
aGFuZ3VwID0gMTUzCitjb25zdCBfQ0xPTkVfVU5UUkFDRUQgPSAweDAwODAwMDAwCitjb25zdCBf
SUZBX0ZfUEVSTUFORU5UID0gMHg4MAorY29uc3QgX0lQX01BWFBBQ0tFVCA9IDY1NTM1Citjb25z
dCBfX1NDX1JFR0VYUCA9IDE1NQorY29uc3QgX0lQT1BUX0VPTCA9IDAKK2NvbnN0IF9FREVBRExP
Q0sgPSBfRURFQURMSworY29uc3QgX1NZU19nZXRwaWQgPSBfX19OUl9nZXRwaWQKK2NvbnN0IF9F
VEhFUlRZUEVfTE9PUEJBQ0sgPSAweDkwMDAKK2NvbnN0IF9fQ1NfTEZTNjRfQ0ZMQUdTID0gMTAw
NAorY29uc3QgX1NJR0ZQRSA9IDgKK2NvbnN0IF9FTElCU0NOID0gODEKK2NvbnN0IF9fX0RFQzY0
X0VQU0lMT05fXyA9IDFFLTE1Citjb25zdCBfSU5UMTZfTUFYID0gKDMyNzY3KQorY29uc3QgX1NJ
T0NTSUZOQU1FID0gMHg4OTIzCitjb25zdCBfX19GTFQzMl9ERU5PUk1fTUlOX18gPSAxLjEKK2Nv
bnN0IF9TSUdWVEFMUk0gPSAyNgorY29uc3QgX19TQ19OWkVSTyA9IDEwOQorY29uc3QgX19fTlJf
cGF1c2UgPSAzNAorY29uc3QgX0VQT0xMUkROT1JNID0gNjQKK2NvbnN0IF9IQVZFX0xJU1RYQVRU
UiA9IDEKK2NvbnN0IF9FVEhfUF9YMjUgPSAweDA4MDUKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9P
RkZCSUdfQ0ZMQUdTID0gMTEwNAorY29uc3QgX0lGTEFfQk9ORF9VUERFTEFZID0gNAorY29uc3Qg
X0xJTlVYX1JFQk9PVF9NQUdJQzJCID0gMzY5MzY3NDQ4Citjb25zdCBfTkxNX0ZfRVhDTCA9IDB4
MjAwCitjb25zdCBfX19JTlRfTEVBU1QxNl9XSURUSF9fID0gMTYKK2NvbnN0IF9fU0NfVF9JT1Zf
TUFYID0gNjYKK2NvbnN0IF9fX0RFQzEyOF9FUFNJTE9OX18gPSAxRS0zMworY29uc3QgX1JUTV9O
RVdUQ0xBU1MgPSA0MAorY29uc3QgX19fRl9TRVRTSUcgPSAxMAorY29uc3QgX1BSX0NBUF9BTUJJ
RU5UX1JBSVNFID0gMgorY29uc3QgX05fWDI1ID0gNgorY29uc3QgX19CSVRTX1NJR1RIUkVBRF9I
ID0gMQorY29uc3QgX1NJT0NHSUZTTEFWRSA9IDB4ODkyOQorY29uc3QgX19fRkxUMTI4X01BWF8x
MF9FWFBfXyA9IDQ5MzIKK2NvbnN0IF9PX1JEV1IgPSAwMgorY29uc3QgX1NfSVJXWEcgPSAoX1Nf
SVJXWFUgPj4gMykKK2NvbnN0IF9IQVZFX0ZDSE9XTkFUID0gMQorY29uc3QgX1NZU19jbG9ja19u
YW5vc2xlZXAgPSBfX19OUl9jbG9ja19uYW5vc2xlZXAKK2NvbnN0IF9NU19SRU1PVU5UID0gMzIK
K2NvbnN0IF9FVEhfUF9BRl9JVUNWID0gMHhGQkZCCitjb25zdCBfU09MX0RFQ05FVCA9IDI2MQor
Y29uc3QgX1NPX0RFVEFDSF9GSUxURVIgPSAyNworY29uc3QgX1JMSU1fU0FWRURfQ1VSID0gX1JM
SU1fSU5GSU5JVFkKK2NvbnN0IF9JTl9DTEFTU0JfTUFYID0gNjU1MzYKK2NvbnN0IF9OSV9OT0ZR
RE4gPSA0Citjb25zdCBfX19HWFhfQUJJX1ZFUlNJT04gPSAxMDEzCitjb25zdCBfRU5PTVNHID0g
NDIKK2NvbnN0IF9JRkxBX0JSX1RDTl9USU1FUiA9IDE3Citjb25zdCBfTUFYTkFNTEVOID0gX05B
TUVfTUFYCitjb25zdCBfX19GTFQ2NFhfTUlOX18gPSAxLjEKK2NvbnN0IF9fX0RFQzMyX01BWF9F
WFBfXyA9IDk3Citjb25zdCBfSEFWRV9TWVNDQUxMX0ggPSAxCitjb25zdCBfSEFWRV9TWVNfUFRS
QUNFX0ggPSAxCitjb25zdCBfX1NDX1BJUEUgPSAxNDUKK2NvbnN0IF9TX0lSV1hVID0gKF9fX1Nf
SVJFQUR8X19fU19JV1JJVEV8X19fU19JRVhFQykKK2NvbnN0IF9fX0xEQkxfSEFTX0lORklOSVRZ
X18gPSAxCitjb25zdCBfU1lTX21xX3VubGluayA9IF9fX05SX21xX3VubGluaworY29uc3QgX19f
VVNFX0ZJTEVfT0ZGU0VUNjQgPSAxCitjb25zdCBfUldGX1dSSVRFX0xJRkVfTk9UX1NFVCA9IDAK
K2NvbnN0IF9TRUdWX1BLVUVSUiA9IDQKK2NvbnN0IF9NTE9DS19PTkZBVUxUID0gMQorY29uc3Qg
X19TQ19BSU9fTUFYID0gMjQKK2NvbnN0IF9fX05SX3N5bWxpbmsgPSA4OAorY29uc3QgX0VSQU5H
RSA9IDM0Citjb25zdCBfSVBfSERSSU5DTCA9IDMKK2NvbnN0IF9XQ0hBUl9NQVggPSBfX19XQ0hB
Ul9NQVgKK2NvbnN0IF9GX1NFVF9GSUxFX1JXX0hJTlQgPSAxMDM4Citjb25zdCBfVENQX0NBX1Jl
Y292ZXJ5ID0gMworY29uc3QgX1VJTlRfTEVBU1QzMl9XSURUSCA9IDMyCitjb25zdCBfUlRBX0VO
Q0FQX1RZUEUgPSAyMQorY29uc3QgX0VQT0xMRVJSID0gOAorY29uc3QgX1NZU19jaG93biA9IF9f
X05SX2Nob3duCitjb25zdCBfVEFCMCA9IDAwMDAwMDAKK2NvbnN0IF9UQUIxID0gMDAwNDAwMAor
Y29uc3QgX1RBQjIgPSAwMDEwMDAwCitjb25zdCBfVEFCMyA9IDAwMTQwMDAKK2NvbnN0IF9USF9S
U1QgPSAweDA0Citjb25zdCBfUFRSQUNFX09fVFJBQ0VGT1JLID0gMgorY29uc3QgX19fTlJfc2No
ZWRfZ2V0X3ByaW9yaXR5X21heCA9IDE0NgorY29uc3QgX19fTlJfc2NoZWRfZ2V0cGFyYW0gPSAx
NDMKK2NvbnN0IF9SVE5FVExJTktfSEFWRV9QRUVSSU5GTyA9IDEKK2NvbnN0IF9fTEZTX0xBUkdF
RklMRSA9IDEKK2NvbnN0IF9TVEFUWF9BTEwgPSAweDBmZmYKK2NvbnN0IF9fX05SX3NldGl0aW1l
ciA9IDM4Citjb25zdCBfTU9EX01JQ1JPID0gX0FESl9NSUNSTworY29uc3QgX19fTlJfdXN0YXQg
PSAxMzYKK2NvbnN0IF9JRkZfQVRUQUNIX1FVRVVFID0gMHgwMjAwCitjb25zdCBfX19QVEhSRUFE
X01VVEVYX0xPQ0tfRUxJU0lPTiA9IDEKK2NvbnN0IF9JTl9DTEFTU0FfSE9TVCA9ICgweGZmZmZm
ZmZmICYgXl9JTl9DTEFTU0FfTkVUKQorY29uc3QgX1JURl9OQVQgPSAweDA4MDAwMDAwCitjb25z
dCBfQlBGX0FCUyA9IDB4MjAKK2NvbnN0IF9GU19UT1BESVJfRkwgPSAweDAwMDIwMDAwCitjb25z
dCBfUlRNR1JQX0xJTksgPSAxCitjb25zdCBfRlNfS0VZX0RFU0NfUFJFRklYID0gImZzY3J5cHQ6
IgorY29uc3QgX19fTlJfdnNlcnZlciA9IDIzNgorY29uc3QgX1RJT0NTQlJLID0gMHg1NDI3Citj
b25zdCBfX19HTElCQ19fID0gMgorY29uc3QgX0hBVkVfU1lOQ19BRERfQU5EX0ZFVENIXzggPSAx
Citjb25zdCBfTkRfUkFfRkxBR19NQU5BR0VEID0gMHg4MAorY29uc3QgX0lOVF9MRUFTVDE2X01B
WCA9ICgzMjc2NykKK2NvbnN0IF9fX05SX3NjaGVkX3NldHNjaGVkdWxlciA9IDE0NAorY29uc3Qg
X19TQ19TRU1BUEhPUkVTID0gMjEKK2NvbnN0IF9fVUNPTlRFWFRfSCA9IDEKK2NvbnN0IF9TWVNf
cnRfdGdzaWdxdWV1ZWluZm8gPSBfX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbworY29uc3QgX1BSX0ZQ
X0VYQ19QUkVDSVNFID0gMworY29uc3QgX1NZU19zeW5jID0gX19fTlJfc3luYworY29uc3QgX0hB
VkVfU1RESU5UX0ggPSAxCitjb25zdCBfSUNBTk9OID0gMDAwMDAwMgorY29uc3QgX1BSX1NFVF9U
SFBfRElTQUJMRSA9IDQxCitjb25zdCBfTkVUTElOS19VTkNPTk5FQ1RFRCA9IDAKK2NvbnN0IF9J
VVRGOCA9IDAwNDAwMDAKK2NvbnN0IF9CUEZfQU5EID0gMHg1MAorY29uc3QgX05FVExJTktfTElT
VEVOX0FMTF9OU0lEID0gOAorY29uc3QgX0lQVjZfUEFUSE1UVSA9IDYxCitjb25zdCBfX1NDX0FU
RVhJVF9NQVggPSA4NworY29uc3QgX1NPQ0tfUkRNID0gNAorY29uc3QgX0VUSF9QX0lQID0gMHgw
ODAwCitjb25zdCBfX1BPU0lYX1NPVVJDRSA9IDEKK2NvbnN0IF9JRkxBX0dFTkVWRV9VRFBfQ1NV
TSA9IDgKK2NvbnN0IF9fU0NfTVFfUFJJT19NQVggPSAyOAorY29uc3QgX19ORVRJTkVUX1RDUF9I
ID0gMQorY29uc3QgX0xJTlVYX1JFQk9PVF9DTURfUkVTVEFSVDIgPSAweEExQjJDM0Q0Citjb25z
dCBfUlRDRl9OQVQgPSAweDAwODAwMDAwCitjb25zdCBfTkRfTkFfRkxBR19PVkVSUklERSA9IDB4
MDAwMDAwMjAKK2NvbnN0IF9IQVZFX1NURExJQl9IID0gMQorY29uc3QgX19TQ19TSU5HTEVfUFJP
Q0VTUyA9IDE1MQorY29uc3QgX0lGRl9EWU5BTUlDID0gMzI3NjgKK2NvbnN0IF9UQ1BfTk9fUVVF
VUUgPSAwCitjb25zdCBfX0xJQkNfTElNSVRTX0hfID0gMQorY29uc3QgX0lOX0RPTlRfRk9MTE9X
ID0gMHgwMjAwMDAwMAorY29uc3QgX01BRFZfV0lQRU9ORk9SSyA9IDE4Citjb25zdCBfX1BPU0lY
X1NUUkVBTV9NQVggPSA4Citjb25zdCBfX0JJVFNfU0lHSU5GT19DT05TVFNfSCA9IDEKK2NvbnN0
IF9XQUlUX0FOWSA9ICgtMSkKK2NvbnN0IF9NQVBfMzJCSVQgPSAweDQwCitjb25zdCBfSU5FVF9B
RERSU1RSTEVOID0gMTYKK2NvbnN0IF9fX0lGTEFfVkZfTUFYID0gMTMKK2NvbnN0IF9QUl9GUF9F
WENfQVNZTkMgPSAyCitjb25zdCBfVElPQ1NFUkNPTkZJRyA9IDB4NTQ1MworY29uc3QgX1VJTlRQ
VFJfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX01DQVNUX01TRklMVEVSID0gNDgKK2NvbnN0
IF9OTE1fRl9OT05SRUMgPSAweDEwMAorY29uc3QgX0VERUFETEsgPSAzNQorY29uc3QgX0lQUE9S
VF9URlRQID0gNjkKK2NvbnN0IF9TSU9DR1NUQU1QID0gMHg4OTA2Citjb25zdCBfRlNfS0VZX0RF
U0NSSVBUT1JfU0laRSA9IDgKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFBCSUdfT0ZGQklHX0xJQlMg
PSAxMTQ2Citjb25zdCBfSUZMQV9HRU5FVkVfUE9SVCA9IDUKK2NvbnN0IF9TWVNfY2FwZ2V0ID0g
X19fTlJfY2FwZ2V0Citjb25zdCBfX19OUl9tbG9jayA9IDE0OQorY29uc3QgX19fR0NDX0FUT01J
Q19MT05HX0xPQ0tfRlJFRSA9IDIKK2NvbnN0IF9FVEhFUl9UWVBFX0xFTiA9IDIKK2NvbnN0IF9I
QVZFX1RBTkwgPSAxCitjb25zdCBfX1BPU0lYX1NBVkVEX0lEUyA9IDEKK2NvbnN0IF9UQ01fSUZJ
TkRFWF9NQUdJQ19CTE9DSyA9ICgweEZGRkZGRkZGKQorY29uc3QgX0JQRl9TVFggPSAweDAzCitj
b25zdCBfX19EQkxfTUFOVF9ESUdfXyA9IDUzCitjb25zdCBfSVBWNl9NSU5IT1BDT1VOVCA9IDcz
Citjb25zdCBfU0lPQ0dJRk5BTUUgPSAweDg5MTAKK2NvbnN0IF9SVEVYVF9GSUxURVJfU0tJUF9T
VEFUUyA9ICgxIDw8IDMpCitjb25zdCBfX19OUl9ydF9zaWdhY3Rpb24gPSAxMworY29uc3QgX0lO
VF9GQVNUNjRfV0lEVEggPSA2NAorY29uc3QgX0JQRl9NRU0gPSAweDYwCitjb25zdCBfTkRfTkVJ
R0hCT1JfQURWRVJUID0gMTM2Citjb25zdCBfX1BPU0lYX0NISUxEX01BWCA9IDI1Citjb25zdCBf
Q0xPTkVfQ0hJTERfU0VUVElEID0gMHgwMTAwMDAwMAorY29uc3QgX1JFR19SQVggPSAxMworY29u
c3QgX19fSU5UX0xFQVNUNjRfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9CUEZf
QUREID0gMHgwMAorY29uc3QgX0VUSEVSTUlOID0gKF9FVEhFUl9NSU5fTEVOIC0gX0VUSEVSX0hE
Ul9MRU4gLSBfRVRIRVJfQ1JDX0xFTikKK2NvbnN0IF9JUFBPUlRfUkpFID0gNzcKK2NvbnN0IF9G
U19JTUFHSUNfRkwgPSAweDAwMDAyMDAwCitjb25zdCBfSVBWNl9QTVRVRElTQ19JTlRFUkZBQ0Ug
PSA0Citjb25zdCBfX19JRkxBX1ZMQU5fUU9TX01BWCA9IDIKK2NvbnN0IF9fX0dDQ19BVE9NSUNf
Qk9PTF9MT0NLX0ZSRUUgPSAyCitjb25zdCBfU1lTX05NTE4gPSBfX1VUU05BTUVfTEVOR1RICitj
b25zdCBfSVNJRyA9IDAwMDAwMDEKK2NvbnN0IF9TWVNfYmluZCA9IF9fX05SX2JpbmQKK2NvbnN0
IF9JUFY2X01UVV9ESVNDT1ZFUiA9IDIzCitjb25zdCBfSUZMQV9XSVJFTEVTUyA9IDExCitjb25z
dCBfUk1ORVRfRkxBR1NfRUdSRVNTX01BUF9DS1NVTVY0ID0gKDEgPDwgMykKK2NvbnN0IF9fUE9T
SVhfTUFQUEVEX0ZJTEVTID0gMjAwODA5Citjb25zdCBfUlRNX05FV05EVVNFUk9QVCA9IDY4Citj
b25zdCBfUFRSQUNFX0dFVFNJR01BU0sgPSAxNjkwNgorY29uc3QgX1JUTUdSUF9JUFY0X01ST1VU
RSA9IDB4MjAKK2NvbnN0IF9JTjZfQUREUl9HRU5fTU9ERV9TVEFCTEVfUFJJVkFDWSA9IDIKK2Nv
bnN0IF9fX05SX3NpZ2FsdHN0YWNrID0gMTMxCitjb25zdCBfTkVUTElOS19DQVBfQUNLID0gMTAK
K2NvbnN0IF9fX05SX2NyZWF0ID0gODUKK2NvbnN0IF9fR0VUT1BUX0NPUkVfSCA9IDEKK2NvbnN0
IF9FQUlfQUdBSU4gPSAtMworY29uc3QgX19QT1NJWF9KT0JfQ09OVFJPTCA9IDEKK2NvbnN0IF9T
Q05pMTYgPSAiaGkiCitjb25zdCBfQlBGX1NVQiA9IDB4MTAKK2NvbnN0IF9QUkl4MTYgPSAieCIK
K2NvbnN0IF9TQ0hFRF9JU08gPSA0Citjb25zdCBfX0hBVkVfU1RSVUNUX1RFUk1JT1NfQ19JU1BF
RUQgPSAxCitjb25zdCBfTlVEX0ZBSUxFRCA9IDB4MjAKK2NvbnN0IF9FTVNHU0laRSA9IDkwCitj
b25zdCBfRkFQUEVORCA9IF9PX0FQUEVORAorY29uc3QgX19fVVNFX1BPU0lYID0gMQorY29uc3Qg
X1RJT0NJTlEgPSBfRklPTlJFQUQKK2NvbnN0IF9TSFVUX1JEID0gMAorY29uc3QgX19fTlJfZXBv
bGxfd2FpdF9vbGQgPSAyMTUKK2NvbnN0IF9YODZfRUZMQUdTX09GX0JJVCA9IDExCitjb25zdCBf
X19GTFQxMjhfREVDSU1BTF9ESUdfXyA9IDM2Citjb25zdCBfX1NDX0dFVEdSX1JfU0laRV9NQVgg
PSA2OQorY29uc3QgX1NZU191dGltZSA9IF9fX05SX3V0aW1lCitjb25zdCBfUFJfRlBFTVVfU0lH
RlBFID0gMgorY29uc3QgX0FSUEhSRF9GRERJID0gNzc0Citjb25zdCBfU0VHVl9NQVBFUlIgPSAx
Citjb25zdCBfUlRBX01QX0FMR08gPSAxNAorY29uc3QgX0JQRl9KTVAgPSAweDA1Citjb25zdCBf
U1lTX3J0X3NpZ2FjdGlvbiA9IF9fX05SX3J0X3NpZ2FjdGlvbgorY29uc3QgX0hBVkVfTkVUX0lG
X0ggPSAxCitjb25zdCBfUlROTEdSUF9ERUNuZXRfSUZBRERSID0gMTMKK2NvbnN0IF9JRkZfTE9P
UEJBQ0sgPSA4Citjb25zdCBfUlRDRl9MT0cgPSAweDAyMDAwMDAwCitjb25zdCBfRFRfQkxLID0g
NgorY29uc3QgX19fTlJfY2Fwc2V0ID0gMTI2Citjb25zdCBfX1NDX1BJSV9PU0kgPSA1NworY29u
c3QgX0lGTEFfQlJQT1JUX0ZPUldBUkRfREVMQVlfVElNRVIgPSAyMgorY29uc3QgX1VNT1VOVF9O
T0ZPTExPVyA9IDgKK2NvbnN0IF9QRl9FQ09ORVQgPSAxOQorY29uc3QgX0lQVjZfQUREUl9QUkVG
RVJFTkNFUyA9IDcyCitjb25zdCBfTUFDU0VDX1ZBTElEQVRFX01BWCA9IDIKK2NvbnN0IF9SVF9U
QUJMRV9NQVggPSA0Mjk0OTY3Mjk1Citjb25zdCBfRkZJX1BBU0NBTCA9IDYKK2NvbnN0IF9JRkxB
X1hGUk1fSUZfSUQgPSAyCitjb25zdCBfQjQ2MDgwMCA9IDAwMTAwMDQKK2NvbnN0IF9fQ1NfWEJT
NV9MUDY0X09GRjY0X0xERkxBR1MgPSAxMTA5Citjb25zdCBfUFJJaUxFQVNUMzIgPSAiaSIKK2Nv
bnN0IF9IQVZFX1NZU19GSUxFX0ggPSAxCitjb25zdCBfU1lTX2Vwb2xsX3dhaXQgPSBfX19OUl9l
cG9sbF93YWl0Citjb25zdCBfUEZfRklMRSA9IF9QRl9MT0NBTAorY29uc3QgX1NZU19sc2V0eGF0
dHIgPSBfX19OUl9sc2V0eGF0dHIKK2NvbnN0IF9FQ0hJTEQgPSAxMAorY29uc3QgX19fRklOSVRF
X01BVEhfT05MWV9fID0gMAorY29uc3QgX19QT1NJWF9USFJFQURfUk9CVVNUX1BSSU9fUFJPVEVD
VCA9IC0xCitjb25zdCBfX19OUl9zZXR0aW1lb2ZkYXkgPSAxNjQKK2NvbnN0IF9QQUNLRVRfTVJf
TVVMVElDQVNUID0gMAorY29uc3QgX1NLRl9BRF9DUFUgPSAzNgorY29uc3QgX19fTlJfdXRpbWUg
PSAxMzIKK2NvbnN0IF9fX0lGTEFfWERQX01BWCA9IDgKK2NvbnN0IF9NQUNWTEFOX01PREVfUEFT
U1RIUlUgPSA4Citjb25zdCBfX19TRUdfR1MgPSAxCitjb25zdCBfQURKX09GRlNFVF9TSU5HTEVT
SE9UID0gMHg4MDAxCitjb25zdCBfUE9SVF9SRVFVRVNUX0FTU09DSUFURSA9IDIKK2NvbnN0IF9Q
Ukl4TEVBU1QzMiA9ICJ4IgorY29uc3QgX19QT1NJWDJfQkNfRElNX01BWCA9IDIwNDgKK2NvbnN0
IF9FVEhfUF84MDJfMiA9IDB4MDAwNAorY29uc3QgX0VUSF9QXzgwMl8zID0gMHgwMDAxCitjb25z
dCBfU09fRVJST1IgPSA0Citjb25zdCBfVElPQ01CSVMgPSAweDU0MTYKK2NvbnN0IF9NU19OT1JF
TU9URUxPQ0sgPSAoMTw8MjcpCitjb25zdCBfX19VU0VfWE9QRU4ySyA9IDEKK2NvbnN0IF9JUFY2
X0hPUExJTUlUID0gNTIKK2NvbnN0IF9fX05SX3dyaXRldiA9IDIwCitjb25zdCBfU1lTX3NldHNv
Y2tvcHQgPSBfX19OUl9zZXRzb2Nrb3B0Citjb25zdCBfU1lTX2dldHJlc2dpZCA9IF9fX05SX2dl
dHJlc2dpZAorY29uc3QgX0VUSF9QX1BBRSA9IDB4ODg4RQorY29uc3QgX1BBQ0tFVF9TVEFUSVNU
SUNTID0gNgorY29uc3QgX19fVUlOVDhfTUFYX18gPSAweGZmCitjb25zdCBfSVBfTUlOVFRMID0g
MjEKK2NvbnN0IF9MSU5FX01BWCA9IF9fUE9TSVgyX0xJTkVfTUFYCitjb25zdCBfX1BDX05PX1RS
VU5DID0gNworY29uc3QgX19fREJMX01BWF8xMF9FWFBfXyA9IDMwOAorY29uc3QgX01PRF9TVEFU
VVMgPSBfQURKX1NUQVRVUworY29uc3QgX1BSX0VORElBTl9MSVRUTEUgPSAxCitjb25zdCBfTU9E
X0NMS0EgPSBfQURKX09GRlNFVF9TSU5HTEVTSE9UCitjb25zdCBfQVRfU1RBVFhfRE9OVF9TWU5D
ID0gMHg0MDAwCitjb25zdCBfX1NDX0NfTEFOR19TVVBQT1JUX1IgPSAxMzYKK2NvbnN0IF9FVEhf
UF9QQVVTRSA9IDB4ODgwOAorY29uc3QgX1NZU191bmxpbmthdCA9IF9fX05SX3VubGlua2F0Citj
b25zdCBfSUZMQV9HVFBfUERQX0hBU0hTSVpFID0gMworY29uc3QgX0lOX0NMQVNTQl9ORVQgPSAw
eGZmZmYwMDAwCitjb25zdCBfU0NOZDMyID0gImQiCitjb25zdCBfU0lHUFdSID0gMzAKK2NvbnN0
IF9JRkxBX0JPTkRfQUNUSVZFX1NMQVZFID0gMgorY29uc3QgX1BSX1NFVF9NTV9FTlZfU1RBUlQg
PSAxMAorY29uc3QgX1BUUkRJRkZfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX1BSSXg4ID0g
IngiCitjb25zdCBfX1NURElOVF9IID0gMQorY29uc3QgX1JUTV9HRVRTVEFUUyA9IDk0Citjb25z
dCBfVElPQ01HRVQgPSAweDU0MTUKK2NvbnN0IF9ORFRQQV9BTllDQVNUX0RFTEFZID0gMTIKK2Nv
bnN0IF9QUkl4MzIgPSAieCIKK2NvbnN0IF9FWFRQUk9DID0gMDIwMDAwMAorY29uc3QgX19fV0NI
QVJfTUFYX18gPSAweDdmZmZmZmZmCitjb25zdCBfSU9DX0lOT1VUID0gKChfX0lPQ19XUklURXxf
X0lPQ19SRUFEKSA8PCBfX0lPQ19ESVJTSElGVCkKK2NvbnN0IF9JRkxBX0lORk9fS0lORCA9IDEK
K2NvbnN0IF9FRkFVTFQgPSAxNAorY29uc3QgX1VJTlQ4X1dJRFRIID0gOAorY29uc3QgX1BSX0NB
UEJTRVRfRFJPUCA9IDI0Citjb25zdCBfSUZMQV9WTEFOX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkZf
TVVMVElDQVNUID0gNDA5NgorY29uc3QgX1BPUlRfUkVRVUVTVF9ESVNBU1NPQ0lBVEUgPSAzCitj
b25zdCBfSUZMQV9CUlBPUlRfTk8gPSAxOAorY29uc3QgX1NPX0RFQlVHID0gMQorY29uc3QgX1JU
TkhfRl9PRkZMT0FEID0gOAorY29uc3QgX0lOVF9GQVNUMzJfTUFYID0gKDkyMjMzNzIwMzY4NTQ3
NzU4MDcpCitjb25zdCBfX1NDX01FTUxPQ0tfUkFOR0UgPSAxOAorY29uc3QgX1JQTV9QQ09fQ0hB
TkdFID0gMgorY29uc3QgX01TX1NVQk1PVU5UID0gKDE8PDI2KQorY29uc3QgX0ROX01PRElGWSA9
IDB4MDAwMDAwMDIKK2NvbnN0IF9JUFBST1RPX1VEUCA9IDE3Citjb25zdCBfSUZMQV9WUkZfUE9S
VF9VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9JTkVUNl9NQ0FTVCA9IDQKK2NvbnN0IF9SVE5MR1JQ
X0RFQ25ldF9ST1VURSA9IDE1Citjb25zdCBfX19OUl90ZWUgPSAyNzYKK2NvbnN0IF9SVEFfSUlG
ID0gMworY29uc3QgX0lDUk5MID0gMDAwMDQwMAorY29uc3QgX1NfSVdVU1IgPSBfX19TX0lXUklU
RQorY29uc3QgX1NZU19kdXAyID0gX19fTlJfZHVwMgorY29uc3QgX1NZU19kdXAzID0gX19fTlJf
ZHVwMworY29uc3QgX1JFR19FUlIgPSAxOQorY29uc3QgX05FVExJTktfTkZMT0cgPSA1Citjb25z
dCBfUFJJWExFQVNUOCA9ICJYIgorY29uc3QgX0lGTEFfSFNSX1ZFUlNJT04gPSA2Citjb25zdCBf
U1lTX2xpbmthdCA9IF9fX05SX2xpbmthdAorY29uc3QgX19fREJMX0hBU19JTkZJTklUWV9fID0g
MQorY29uc3QgX0lQVE9TX0NMQVNTX01BU0sgPSAweGUwCitjb25zdCBfX1BPU0lYX1RIUkVBRF9E
RVNUUlVDVE9SX0lURVJBVElPTlMgPSA0Citjb25zdCBfTkRfTkVJR0hCT1JfU09MSUNJVCA9IDEz
NQorY29uc3QgX0hBVkVfTElOVVhfSUZfRVRIRVJfSCA9IDEKK2NvbnN0IF9fQ1NfVjdfV0lEVEhf
UkVTVFJJQ1RFRF9FTlZTID0gNQorY29uc3QgX1BSX1NQRUNfRU5BQkxFID0gKDEgPDwgMSkKK2Nv
bnN0IF9BUlBIUkRfUFBQID0gNTEyCitjb25zdCBfU0lfQVNZTkNOTCA9IC02MAorY29uc3QgX1NZ
U19tb2RpZnlfbGR0ID0gX19fTlJfbW9kaWZ5X2xkdAorY29uc3QgX19fRkxUNjRfRVBTSUxPTl9f
ID0gMS4xCitjb25zdCBfX19PX1RNUEZJTEUgPSAoMDIwMDAwMDAwIHwgX19fT19ESVJFQ1RPUlkp
Citjb25zdCBfWDg2X0VGTEFHU19TRl9CSVQgPSA3Citjb25zdCBfU0lPQ0dJRk1UVSA9IDB4ODky
MQorY29uc3QgX0JQRl9MTF9PRkYgPSBfU0tGX0xMX09GRgorY29uc3QgX19TQ0hFRF9IID0gMQor
Y29uc3QgX0lQT1BUX1NFQ1VSX0VGVE8gPSAweDc4OWEKK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVT
UE9OU0VfRVJST1IgPSAyNjEKK2NvbnN0IF9fX05SX3NobWF0ID0gMzAKK2NvbnN0IF9fX05SX3Br
ZXlfYWxsb2MgPSAzMzAKK2NvbnN0IF9QVFJBQ0VfUE9LRVVTRVIgPSA2Citjb25zdCBfSUZBX0ZM
QUdTID0gOAorY29uc3QgX19fREVDNjRfTUFYX0VYUF9fID0gMzg1Citjb25zdCBfUlRBWF9IT1BM
SU1JVCA9IDEwCitjb25zdCBfTUFQX0xPQ0tFRCA9IDB4MDIwMDAKK2NvbnN0IF9CUEZfTERYID0g
MHgwMQorY29uc3QgX1JUQV9WSUEgPSAxOAorY29uc3QgX19TQ19WN19MUEJJR19PRkZCSUcgPSAy
NDAKK2NvbnN0IF9BRl9JQiA9IF9QRl9JQgorY29uc3QgX05MMSA9IDAwMDA0MDAKK2NvbnN0IF9f
U0NfQ0xLX1RDSyA9IDIKK2NvbnN0IF9NT0RfQ0xLQiA9IF9BREpfVElDSworY29uc3QgX0VORVRE
T1dOID0gMTAwCitjb25zdCBfQUZfSVJEQSA9IF9QRl9JUkRBCitjb25zdCBfTUNBU1RfTEVBVkVf
R1JPVVAgPSA0NQorY29uc3QgX1JUTkxHUlBfSVBWNl9NUk9VVEUgPSAxMAorY29uc3QgX1BUSFJF
QURfREVTVFJVQ1RPUl9JVEVSQVRJT05TID0gX19QT1NJWF9USFJFQURfREVTVFJVQ1RPUl9JVEVS
QVRJT05TCitjb25zdCBfX0lTT0M5NV9TT1VSQ0UgPSAxCitjb25zdCBfX19ERUMxMjhfTUFYX0VY
UF9fID0gNjE0NQorY29uc3QgX0lFWFRFTiA9IDAxMDAwMDAKK2NvbnN0IF9JUFBPUlRfUk9VVEVT
RVJWRVIgPSA1MjAKK2NvbnN0IF9ORFRQQV9SRUZDTlQgPSAyCitjb25zdCBfWDg2X0VGTEFHU19D
Rl9CSVQgPSAwCitjb25zdCBfU1lTX21vdW50ID0gX19fTlJfbW91bnQKK2NvbnN0IF9GU19JTU1V
VEFCTEVfRkwgPSAweDAwMDAwMDEwCitjb25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJQlMg
PSAxMTA2Citjb25zdCBfUFJfQ0FQX0FNQklFTlRfQ0xFQVJfQUxMID0gNAorY29uc3QgX19fTlJf
cGtleV9mcmVlID0gMzMxCitjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18xMjhfQ1RTID0g
NgorY29uc3QgX1JURl9QT0xJQ1kgPSAweDA0MDAwMDAwCitjb25zdCBfSUZMQV9CT05EX0RPV05E
RUxBWSA9IDUKK2NvbnN0IF9OVEZfUk9VVEVSID0gMHg4MAorY29uc3QgX0lGTEFfVkZfVFhfUkFU
RSA9IDMKK2NvbnN0IF9GX1NFVF9SV19ISU5UID0gMTAzNgorY29uc3QgX0RUX1dIVCA9IDE0Citj
b25zdCBfUFRSQUNFX1NZU0VNVSA9IDMxCitjb25zdCBfU0lPQ0RJRkFERFIgPSAweDg5MzYKK2Nv
bnN0IF9FQkFERkQgPSA3NworY29uc3QgX0lQX01TUyA9IDU3NgorY29uc3QgX1NZU19nZXRnaWQg
PSBfX19OUl9nZXRnaWQKK2NvbnN0IF9USU9DTlhDTCA9IDB4NTQwRAorY29uc3QgX19fU0hSVF9N
QVhfXyA9IDB4N2ZmZgorY29uc3QgX01BWF9JUE9QVExFTiA9IDQwCitjb25zdCBfX19QVEhSRUFE
X01VVEVYX0hBVkVfUFJFViA9IDEKK2NvbnN0IF9TSU9HSUZJTkRFWCA9IF9TSU9DR0lGSU5ERVgK
K2NvbnN0IF9JUFY2X0RPTlRGUkFHID0gNjIKK2NvbnN0IF9CMjQwMCA9IDAwMDAwMTMKK2NvbnN0
IF9FTDJITFQgPSA1MQorY29uc3QgX0lGTEFfQlJQT1JUX0dST1VQX0ZXRF9NQVNLID0gMzEKK2Nv
bnN0IF9fU0NfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJTkcgPSA3OQorY29uc3QgX1dBSVRfTVlQ
R1JQID0gMAorY29uc3QgX1RDQV9TVEFUUzIgPSA3Citjb25zdCBfSUZMQV9NQUNWTEFOX0ZMQUdT
ID0gMgorY29uc3QgX19fTlJfZnRydW5jYXRlID0gNzcKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTID0g
OAorY29uc3QgX0lQUFJPVE9fU0NUUCA9IDEzMgorY29uc3QgX1NZU19tdW5sb2NrYWxsID0gX19f
TlJfbXVubG9ja2FsbAorY29uc3QgX1JMSU1JVF9BUyA9IDkKK2NvbnN0IF9JTlQzMl9NSU4gPSAo
LTIxNDc0ODM2NDctMSkKK2NvbnN0IF9fQ1NfVjZfRU5WID0gMTE0OAorY29uc3QgX0lQX09GRk1B
U0sgPSAweDFmZmYKK2NvbnN0IF9JTlQ2NF9XSURUSCA9IDY0Citjb25zdCBfUEFDS0FHRV9VUkwg
PSAiIgorY29uc3QgX0lOVF9GQVNUMzJfV0lEVEggPSBfX19XT1JEU0laRQorY29uc3QgX0lGTEFf
TUFDU0VDX0NJUEhFUl9TVUlURSA9IDQKK2NvbnN0IF9VSU5UTUFYX1dJRFRIID0gNjQKK2NvbnN0
IF9SVE1TR19ORVdSVUxFID0gMHgzMQorY29uc3QgX19TQ19OTF9OTUFYID0gMTIyCitjb25zdCBf
X19GTFQ2NF9IQVNfSU5GSU5JVFlfXyA9IDEKK2NvbnN0IF9YODZfRUZMQUdTX1ZNX0JJVCA9IDE3
Citjb25zdCBfX1BPU0lYX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCA9IDIwMDgwOQorY29uc3QgX0ZO
REVMQVkgPSBfT19OREVMQVkKK2NvbnN0IF9JRkxBX0JSX01DQVNUX1FVRVJZX1VTRV9JRkFERFIg
PSAyNAorY29uc3QgX1BSSXVMRUFTVDE2ID0gInUiCitjb25zdCBfUlRGX0dBVEVXQVkgPSAweDAw
MDIKK2NvbnN0IF9TWVNfbGNob3duID0gX19fTlJfbGNob3duCitjb25zdCBfU1lTX2xpbmsgPSBf
X19OUl9saW5rCitjb25zdCBfSUZMQV9WWExBTl9MT0NBTDYgPSAxNworY29uc3QgX0lQX1JFQ1ZP
UklHRFNUQUREUiA9IF9JUF9PUklHRFNUQUREUgorY29uc3QgX1JUTV9ERUxMSU5LID0gMTcKK2Nv
bnN0IF9SVE1fTkVXTkVUQ09ORiA9IDgwCitjb25zdCBfSVBUT1NfRFNDUF9FRiA9IDB4YjgKK2Nv
bnN0IF9QVFJBQ0VfTElTVEVOID0gMTY5MDQKK2NvbnN0IF9TQ01fVElNRVNUQU1QSU5HX09QVF9T
VEFUUyA9IDU0Citjb25zdCBfX1BPU0lYX1NFTUFQSE9SRVMgPSAyMDA4MDkKK2NvbnN0IF9fSU9D
X1RZUEVNQVNLID0gKCgxIDw8IF9fSU9DX1RZUEVCSVRTKS0xKQorY29uc3QgX1g4Nl9DUjRfTUNF
X0JJVCA9IDYKK2NvbnN0IF9fX0ZMVF9IQVNfSU5GSU5JVFlfXyA9IDEKK2NvbnN0IF9FVEhfUF9N
QUNTRUMgPSAweDg4RTUKK2NvbnN0IF9fX0xPTkdfV0lEVEhfXyA9IDY0Citjb25zdCBfSEFWRV9O
RVRfSUZfQVJQX0ggPSAxCitjb25zdCBfX05FVF9JRl9IID0gMQorY29uc3QgX1RJT0NTVEkgPSAw
eDU0MTIKK2NvbnN0IF9TWVNfc2VuZGZpbGUgPSBfX19OUl9zZW5kZmlsZQorY29uc3QgX19fTlJf
c3dhcG9uID0gMTY3Citjb25zdCBfSU5MQ1IgPSAwMDAwMTAwCitjb25zdCBfU19JRlJFRyA9IF9f
X1NfSUZSRUcKK2NvbnN0IF9SRUdfUjkgPSAxCitjb25zdCBfUE9TSVhfTUFEVl9ET05UTkVFRCA9
IDQKK2NvbnN0IF9fX1VTRV9VTklYOTggPSAxCitjb25zdCBfSU42X0FERFJfR0VOX01PREVfRVVJ
NjQgPSAwCitjb25zdCBfSUZMQV9CUlBPUlRfUFJPWFlBUlBfV0lGSSA9IDEyCitjb25zdCBfU0hV
VF9XUiA9IDEKK2NvbnN0IF9FQ09OTlJFRlVTRUQgPSAxMTEKK2NvbnN0IF9QRl9BTEcgPSAzOAor
Y29uc3QgX19fSUZMQV9JTkZPX01BWCA9IDYKK2NvbnN0IF9fU0NfUE9MTCA9IDU4Citjb25zdCBf
X19JRkxBX0lORVQ2X01BWCA9IDkKK2NvbnN0IF9NQVBfRklYRURfTk9SRVBMQUNFID0gMHgxMDAw
MDAKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9MSU5URkxBR1MgPSAxMTQzCitjb25z
dCBfUE9SVF9QUk9GSUxFX01BWCA9IDQwCitjb25zdCBfVENQX0NPT0tJRV9QQUlSX1NJWkUgPSAo
MipfVENQX0NPT0tJRV9NQVgpCitjb25zdCBfUFRSQUNFX1BFRUtTSUdJTkZPX1NIQVJFRCA9IDEK
K2NvbnN0IF9OVURfU1RBTEUgPSAweDA0Citjb25zdCBfTkVUTElOS19GSUJfTE9PS1VQID0gMTAK
K2NvbnN0IF9SVE1fQkFTRSA9IDE2Citjb25zdCBfUEZfU0VDVVJJVFkgPSAxNAorY29uc3QgX1NQ
TElDRV9GX01PVkUgPSAxCitjb25zdCBfX19OUl9raWxsID0gNjIKK2NvbnN0IF9TSUdTVEtTWiA9
IDgxOTIKK2NvbnN0IF9DUjAgPSAwMDAwMDAwCitjb25zdCBfQ1IxID0gMDAwMTAwMAorY29uc3Qg
X19fV0NIQVJfV0lEVEhfXyA9IDMyCitjb25zdCBfX19JTlRfRkFTVDhfV0lEVEhfXyA9IDgKK2Nv
bnN0IF9FVEhfUF9URUIgPSAweDY1NTgKK2NvbnN0IF9JUFBPUlRfRlRQID0gMjEKK2NvbnN0IF9T
VEFfTU9ERSA9IDB4NDAwMAorY29uc3QgX0JQRl9JTkQgPSAweDQwCitjb25zdCBfRkZJX1RZUEVf
U1RSVUNUID0gMTMKK2NvbnN0IF9NU0dfWkVST0NPUFkgPSA2NzEwODg2NAorY29uc3QgX19FTkRJ
QU5fSCA9IDEKK2NvbnN0IF9fUE9TSVhfVFlQRURfTUVNT1JZX09CSkVDVFMgPSAtMQorY29uc3Qg
X1NZU19tcV90aW1lZHJlY2VpdmUgPSBfX19OUl9tcV90aW1lZHJlY2VpdmUKK2NvbnN0IF9lcG9s
bF9kYXRhX29mZnNldCA9IDQKK2NvbnN0IF9HVFBfUk9MRV9TR1NOID0gMQorY29uc3QgX05EVEFf
U1RBVFMgPSA3Citjb25zdCBfU0NNX1JJR0hUUyA9IDEKK2NvbnN0IF9UQ1BfUkVDVl9RVUVVRSA9
IDEKK2NvbnN0IF9fUE9TSVhfVjZfTFA2NF9PRkY2NCA9IDEKK2NvbnN0IF9BRl9BUFBMRVRBTEsg
PSBfUEZfQVBQTEVUQUxLCitjb25zdCBfX19TSVpFT0ZfRkxPQVRfXyA9IDQKK2NvbnN0IF9QRl9D
QU4gPSAyOQorY29uc3QgX1JURl9MT0NBTCA9IDB4ODAwMDAwMDAKK2NvbnN0IF9OTE1TR19BTElH
TlRPID0gNAorY29uc3QgX19fVUlOVF9GQVNUMTZfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYK
K2NvbnN0IF9TT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksgPSAyNAorY29uc3QgX19fU0la
RU9GX1BPSU5URVJfXyA9IDgKK2NvbnN0IF9fX05SX21lbWZkX2NyZWF0ZSA9IDMxOQorY29uc3Qg
X1NZU190Z2tpbGwgPSBfX19OUl90Z2tpbGwKK2NvbnN0IF9YQ0FTRSA9IDAwMDAwMDQKK2NvbnN0
IF9WTUlOID0gNgorY29uc3QgX0I1NzYwMCA9IDAwMTAwMDEKK2NvbnN0IF9JRkxBX0VWRU5UX05P
VElGWV9QRUVSUyA9IDQKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfTERGTEFHUyA9
IDExMzMKK2NvbnN0IF9SVFBST1RfQk9PVCA9IDMKK2NvbnN0IF9UQ1BPUFRfVElNRVNUQU1QID0g
OAorY29uc3QgX1BSSXhMRUFTVDggPSAieCIKK2NvbnN0IF9FSU5QUk9HUkVTUyA9IDExNQorY29u
c3QgX0lOX0NMQVNTQ19OU0hJRlQgPSA4Citjb25zdCBfU0NNX1RJTUVTVEFNUE5TID0gX1NPX1RJ
TUVTVEFNUE5TCitjb25zdCBfSUZMQV9BRERSRVNTID0gMQorY29uc3QgX0lGTEFfVkZfSU5GT19V
TlNQRUMgPSAwCitjb25zdCBfTVNfU1lOQ0hST05PVVMgPSAxNgorY29uc3QgX1NZU19yZW5hbWVh
dCA9IF9fX05SX3JlbmFtZWF0Citjb25zdCBfRVRIX1BfUUlOUTEgPSAweDkxMDAKK2NvbnN0IF9F
VEhfUF9RSU5RMiA9IDB4OTIwMAorY29uc3QgX0VUSF9QX1FJTlEzID0gMHg5MzAwCitjb25zdCBf
X19OUl9xdW90YWN0bCA9IDE3OQorY29uc3QgX05TU19CVUZMRU5fUEFTU1dEID0gMTAyNAorY29u
c3QgX19QT1NJWDJfU1dfREVWID0gX19fUE9TSVgyX1RISVNfVkVSU0lPTgorY29uc3QgX1RDU0FO
T1cgPSAwCitjb25zdCBfQ1M2ID0gMDAwMDAyMAorY29uc3QgX0NTNyA9IDAwMDAwNDAKK2NvbnN0
IF9DUzggPSAwMDAwMDYwCitjb25zdCBfUFJJZExFQVNUOCA9ICJkIgorY29uc3QgX0lQUE9SVF9U
SU1FU0VSVkVSID0gMzcKK2NvbnN0IF9GX09XTkVSX1BHUlAgPSAyCitjb25zdCBfQUZfQVRNUFZD
ID0gX1BGX0FUTVBWQworY29uc3QgX1JUTUdSUF9JUFY0X0lGQUREUiA9IDB4MTAKK2NvbnN0IF9T
WVNfcmVjdmZyb20gPSBfX19OUl9yZWN2ZnJvbQorY29uc3QgX19fRkxUNjRYX01JTl8xMF9FWFBf
XyA9ICgtNDkzMSkKK2NvbnN0IF9TX0lYR1JQID0gKF9TX0lYVVNSID4+IDMpCitjb25zdCBfU1lT
X21rbm9kID0gX19fTlJfbWtub2QKK2NvbnN0IF9ORVRMSU5LX1NNQyA9IDIyCitjb25zdCBfU1lT
X3V0aW1lcyA9IF9fX05SX3V0aW1lcworY29uc3QgX0ZTX1hGTEFHX0hBU0FUVFIgPSAweDgwMDAw
MDAwCitjb25zdCBfX19ERUNfRVZBTF9NRVRIT0RfXyA9IDIKK2NvbnN0IF9TSUdUVElOID0gMjEK
K2NvbnN0IF9JUFBST1RPX0VTUCA9IDUwCitjb25zdCBfU0tGX0FEX05MQVRUUiA9IDEyCitjb25z
dCBfRUFJX01FTU9SWSA9IC0xMAorY29uc3QgX1NZU19saXN0eGF0dHIgPSBfX19OUl9saXN0eGF0
dHIKK2NvbnN0IF9BUlBPUF9OQUsgPSAxMAorY29uc3QgX0JQRl9KU0VUID0gMHg0MAorY29uc3Qg
X05fVFRZID0gMAorY29uc3QgX19QQ19TT0NLX01BWEJVRiA9IDEyCitjb25zdCBfVElPQ01fRFNS
ID0gMHgxMDAKK2NvbnN0IF9fX0ZMVDMyX01JTl9FWFBfXyA9ICgtMTI1KQorY29uc3QgX1RDT0ZM
VVNIID0gMQorY29uc3QgX1RVTkRFVEFDSEZJTFRFUl92YWwgPSAxMDc0ODEyMTE4Citjb25zdCBf
X0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRGTEFHUyA9IDExMTkKK2NvbnN0IF9NQURWX0hV
R0VQQUdFID0gMTQKK2NvbnN0IF9UQ0lPRkxVU0ggPSAyCitjb25zdCBfRVRIX1BfTlNIID0gMHg4
OTRGCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9IQVNIX01BWCA9IDI3Citjb25zdCBfSUZMQV9QUFBf
REVWX0ZEID0gMQorY29uc3QgX1NfSVNVSUQgPSBfX19TX0lTVUlECitjb25zdCBfVlNUQVJUID0g
OAorY29uc3QgX0VUSF9QX0NBTkZEID0gMHgwMDBECitjb25zdCBfX0JJVFNfU1RESU5UX0lOVE5f
SCA9IDEKK2NvbnN0IF9CUEZfQUxVID0gMHgwNAorY29uc3QgX19fU0laRU9GX0ZMT0FUODBfXyA9
IDE2Citjb25zdCBfX1BPU0lYX1NTSVpFX01BWCA9IDMyNzY3Citjb25zdCBfX0NTX1BBVEggPSAw
Citjb25zdCBfSEFWRV9VTlNFVEVOViA9IDEKK2NvbnN0IF9GUkFNRV9TSVpFID0gMTY4Citjb25z
dCBfSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9UWCA9IDE5Citjb25zdCBfX1NZU19USU1FWF9I
ID0gMQorY29uc3QgX0lGTEFfVFVOX1VOU1BFQyA9IDAKK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01E
X0NBRF9PRkYgPSAweDAwMDAwMDAwCitjb25zdCBfU0lHVVNSMSA9IDEwCitjb25zdCBfU0lHVVNS
MiA9IDEyCitjb25zdCBfSEFWRV9TWVNfU1RBVF9IID0gMQorY29uc3QgX0hBVkVfRkFMTE9DQVRF
ID0gMQorY29uc3QgX19fTlJfdW5zaGFyZSA9IDI3MgorY29uc3QgX0NYODZfQ0NSMCA9IDB4YzAK
K2NvbnN0IF9DWDg2X0NDUjEgPSAweGMxCitjb25zdCBfQ1g4Nl9DQ1IyID0gMHhjMgorY29uc3Qg
X0NYODZfQ0NSMyA9IDB4YzMKK2NvbnN0IF9TWVNfcnRfc2lndGltZWR3YWl0ID0gX19fTlJfcnRf
c2lndGltZWR3YWl0Citjb25zdCBfX19OUl90a2lsbCA9IDIwMAorY29uc3QgX0NYODZfQ0NSNiA9
IDB4ZWEKK2NvbnN0IF9DWDg2X0NDUjcgPSAweGViCitjb25zdCBfTVNHX01PUkUgPSAzMjc2OAor
Y29uc3QgX0lQT1BUX1RTX1RTT05MWSA9IDAKK2NvbnN0IF9IQVZFX0xJTlVYX1JUTkVUTElOS19I
ID0gMQorY29uc3QgX1BSSW8xNiA9ICJvIgorY29uc3QgX1BUUkFDRV9QT0tFVVNSID0gNgorY29u
c3QgX19fTlJfZ2V0Y3B1ID0gMzA5Citjb25zdCBfQUZfREVDbmV0ID0gX1BGX0RFQ25ldAorY29u
c3QgX1BBQ0tBR0VfTkFNRSA9ICJwYWNrYWdlLXVudXNlZCIKK2NvbnN0IF9fU0NfWE9QRU5fVU5J
WCA9IDkxCitjb25zdCBfWDg2X0NSMF9OV19CSVQgPSAyOQorY29uc3QgX01GRF9BTExPV19TRUFM
SU5HID0gMgorY29uc3QgX0VBSV9DQU5DRUxFRCA9IC0xMDEKK2NvbnN0IF9fX05SX3JlYWR2ID0g
MTkKK2NvbnN0IF9fUE9TSVgyX1JFX0RVUF9NQVggPSAyNTUKK2NvbnN0IF9UVU5TRVRJRklOREVY
X3ZhbCA9IDEwNzQwMjU2OTAKK2NvbnN0IF9fUlBDX05FVERCX0ggPSAxCitjb25zdCBfTUFQX0hV
R0VfTUFTSyA9IDB4M2YKK2NvbnN0IF9ORF9OQV9GTEFHX1NPTElDSVRFRCA9IDB4MDAwMDAwNDAK
K2NvbnN0IF9UVU5TRVRWTkVUSERSU1pfdmFsID0gMTA3NDAyNTY4OAorY29uc3QgX0VBSV9BRERS
RkFNSUxZID0gLTkKK2NvbnN0IF9fX1NJWkVPRl9GTE9BVDEyOF9fID0gMTYKK2NvbnN0IF9fX05S
X3Ztc3BsaWNlID0gMjc4Citjb25zdCBfX19OUl91bmFtZSA9IDYzCitjb25zdCBfVENTRVRTX3Zh
bCA9IDIxNTA2Citjb25zdCBfX19OUl9leGVjdmVhdCA9IDMyMgorY29uc3QgX1NZU190aW1lcyA9
IF9fX05SX3RpbWVzCitjb25zdCBfUlRNX0ZfUFJFRklYID0gMHg4MDAKK2NvbnN0IF9TRUVLX0NV
UiA9IDEKK2NvbnN0IF9JRkxBX0JSX0hFTExPX1RJTUVSID0gMTYKK2NvbnN0IF9fUENfUElQRV9C
VUYgPSA1Citjb25zdCBfX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MgPSAxMTMx
Citjb25zdCBfSUZMQV9HRU5FVkVfUkVNT1RFID0gMgorY29uc3QgX1JUTkxHUlBfTVBMU19ST1VU
RSA9IDI3Citjb25zdCBfU1lTX3RpbWVyX3NldHRpbWUgPSBfX19OUl90aW1lcl9zZXR0aW1lCitj
b25zdCBfUEZfTExDID0gMjYKK2NvbnN0IF9FVEhfUF9MSU5LX0NUTCA9IDB4ODg2YworY29uc3Qg
X0lQX09QVElPTlMgPSA0Citjb25zdCBfQ1g4Nl9ESVIxID0gMHhmZgorY29uc3QgX19QT1NJWF9S
VFNJR19NQVggPSA4Citjb25zdCBfVElNRV9JTlMgPSAxCitjb25zdCBfRUlTRElSID0gMjEKK2Nv
bnN0IF9fQklUU19UWVBFU19IID0gMQorY29uc3QgX19TWVNfU09DS0VUX0ggPSAxCitjb25zdCBf
X19OUl9mc2V0eGF0dHIgPSAxOTAKK2NvbnN0IF9FSU8gPSA1Citjb25zdCBfSVBQUk9UT19IT1BP
UFRTID0gMAorY29uc3QgX0JMT0NLX1NJWkUgPSAoMTw8X0JMT0NLX1NJWkVfQklUUykKK2NvbnN0
IF9GU19FTkNSWVBUSU9OX01PREVfU1BFQ0sxMjhfMjU2X0NUUyA9IDgKK2NvbnN0IF9JRkZfTk9B
UlAgPSAxMjgKK2NvbnN0IF9fX0ZMVDY0WF9NQU5UX0RJR19fID0gNjQKK2NvbnN0IF9FUkVNT1RF
ID0gNjYKK2NvbnN0IF9fX0ZMVDY0X01JTl9fID0gMS4xCitjb25zdCBfTkRfT1BUX1JUUl9BRFZf
SU5URVJWQUwgPSA3Citjb25zdCBfU1lTX3BpcGUgPSBfX19OUl9waXBlCitjb25zdCBfTlRGX0VY
VF9MRUFSTkVEID0gMHgxMAorY29uc3QgX1NUQV9QUFNFUlJPUiA9IDB4MDgwMAorY29uc3QgX0VS
RU1PVEVJTyA9IDEyMQorY29uc3QgX0lOVF9GQVNUMTZfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1
ODA3LTEpCitjb25zdCBfSEFWRV9MSU5VWF9GSUxURVJfSCA9IDEKK2NvbnN0IF9FSURSTSA9IDQz
Citjb25zdCBfX1NDX0ZJRk8gPSAxNDQKK2NvbnN0IF9TSV9RVUVVRSA9IC0xCitjb25zdCBfU1lT
X2dldF9rZXJuZWxfc3ltcyA9IF9fX05SX2dldF9rZXJuZWxfc3ltcworY29uc3QgX19DU19QT1NJ
WF9WNl9JTFAzMl9PRkYzMl9MSUJTID0gMTExOAorY29uc3QgX1RDT09OID0gMQorY29uc3QgX0Zf
RFVQRkQgPSAwCitjb25zdCBfVUlOVF9MRUFTVDE2X1dJRFRIID0gMTYKK2NvbnN0IF9TWVNfc2V0
cmxpbWl0ID0gX19fTlJfc2V0cmxpbWl0Citjb25zdCBfX1BBVEhfUFJPVE9DT0xTID0gIi9ldGMv
cHJvdG9jb2xzIgorY29uc3QgX01PRF9UQUkgPSBfQURKX1RBSQorY29uc3QgX19TQ19UUkFDRV9J
TkhFUklUID0gMTgzCitjb25zdCBfX19OUl9zZW5kdG8gPSA0NAorY29uc3QgX05FVExJTktfUk9V
VEUgPSAwCitjb25zdCBfUFRSQUNFX0tJTEwgPSA4Citjb25zdCBfUlROTEdSUF9NREIgPSAyNgor
Y29uc3QgX05FVERCX1NVQ0NFU1MgPSAwCitjb25zdCBfRl9TRVRGRCA9IDIKK2NvbnN0IF9IQVZF
X01LRElSQVQgPSAxCitjb25zdCBfSUZMQV9WWExBTl9MSU1JVCA9IDkKK2NvbnN0IF9fU0NfSE9T
VF9OQU1FX01BWCA9IDE4MAorY29uc3QgX05MRExZID0gMDAwMDQwMAorY29uc3QgX0FESl9USUNL
ID0gMHg0MDAwCitjb25zdCBfX1BPU0lYMl9MSU5FX01BWCA9IDIwNDgKK2NvbnN0IF9GX1NFVEZM
ID0gNAorY29uc3QgX19DU19QT1NJWF9WN19MUDY0X09GRjY0X0xERkxBR1MgPSAxMTQxCitjb25z
dCBfX19OUl9zZXRyZXN1aWQgPSAxMTcKK2NvbnN0IF9fX0RFQzY0X01JTl9FWFBfXyA9ICgtMzgy
KQorY29uc3QgX0xfU0VUID0gMAorY29uc3QgX0lGTEFfTlVNX1JYX1FVRVVFUyA9IDMyCitjb25z
dCBfU09fU05ETE9XQVQgPSAxOQorY29uc3QgX1NJT0NTSUZUWFFMRU4gPSAweDg5NDMKK2NvbnN0
IF9TT19USU1FU1RBTVBOUyA9IDM1Citjb25zdCBfSU5UX0ZBU1QzMl9NSU4gPSAoLTkyMjMzNzIw
MzY4NTQ3NzU4MDctMSkKK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEXzggPSAweDAxCitjb25z
dCBfU09fQklORFRPREVWSUNFID0gMjUKK2NvbnN0IF9YRFBfRkxBR1NfRFJWX01PREUgPSAoMSA8
PCAyKQorY29uc3QgX1BUUkFDRV9PX1RSQUNFU1lTR09PRCA9IDEKK2NvbnN0IF9TS0ZfQURfTkxB
VFRSX05FU1QgPSAxNgorY29uc3QgX1JUQV9UQUJMRSA9IDE1Citjb25zdCBfU0lPQ0RSQVJQID0g
MHg4OTYwCitjb25zdCBfUFJFRklYX1VOU1BFQyA9IDAKK2NvbnN0IF9JQ01QNl9EU1RfVU5SRUFD
SF9OT1BPUlQgPSA0Citjb25zdCBfUF9QSUQgPSAxCitjb25zdCBfX1VUU05BTUVfU1lTTkFNRV9M
RU5HVEggPSBfX1VUU05BTUVfTEVOR1RICitjb25zdCBfX1BPU0lYX01FTUxPQ0tfUkFOR0UgPSAy
MDA4MDkKK2NvbnN0IF9fX0RFQzEyOF9NSU5fRVhQX18gPSAoLTYxNDIpCitjb25zdCBfTkxNX0Zf
TVVMVEkgPSAweDAyCitjb25zdCBfU09DS19DTE9FWEVDID0gNTI0Mjg4Citjb25zdCBfX19GTFRf
TUFYX18gPSAxLjEKK2NvbnN0IF9QT1NJWF9GQURWX05PUkVVU0UgPSBfX19QT1NJWF9GQURWX05P
UkVVU0UKK2NvbnN0IF9fX29zb2NrYWRkcl9kZWZpbmVkID0gMQorY29uc3QgX1BUUkFDRV9PX1RS
QUNFRVhFQyA9IDE2Citjb25zdCBfVUlOVF9GQVNUNjRfV0lEVEggPSA2NAorY29uc3QgX0VUSF9Q
X1NOQVAgPSAweDAwMDUKK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX0JBUlJJRVJfVCA9IDMyCitj
b25zdCBfSUZMQV9CUl9UT1BPTE9HWV9DSEFOR0UgPSAxNAorY29uc3QgX19CSVRTX1VJT19MSU1f
SCA9IDEKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVZGT1JLRE9ORSA9IDMyCitjb25zdCBfX1NDX0xP
R0lOX05BTUVfTUFYID0gNzEKK2NvbnN0IF9FVEhFUk1UVSA9IF9FVEhfREFUQV9MRU4KK2NvbnN0
IF9QT1NJWF9GQURWX0RPTlRORUVEID0gX19fUE9TSVhfRkFEVl9ET05UTkVFRAorY29uc3QgX1JU
UFJPVF9CQUJFTCA9IDQyCitjb25zdCBfRl9HRVRMRUFTRSA9IDEwMjUKK2NvbnN0IF9fU0NfTEVW
RUw0X0NBQ0hFX0FTU09DID0gMTk4Citjb25zdCBfSUZMQV9WTEFOX1BST1RPQ09MID0gNQorY29u
c3QgX0lQX1VOQkxPQ0tfU09VUkNFID0gMzcKK2NvbnN0IF9TT19QQVNTQ1JFRCA9IDE2Citjb25z
dCBfQ0xPQ0tfVEFJID0gMTEKK2NvbnN0IF9OR1JPVVBTX01BWCA9IDY1NTM2Citjb25zdCBfRklP
U0VUT1dOID0gMHg4OTAxCitjb25zdCBfX1NDX1BJSV9PU0lfQ09UUyA9IDYzCitjb25zdCBfU0lP
Q0RBUlAgPSAweDg5NTMKK2NvbnN0IF9NQVBfSFVHRV9TSElGVCA9IDI2Citjb25zdCBfVUlOVFBU
Ul9NQVggPSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpCitjb25zdCBfRVRIX1BfV0FOX1BQUCA9IDB4
MDAwNworY29uc3QgX0lOX0VYQ0xfVU5MSU5LID0gMHgwNDAwMDAwMAorY29uc3QgX1g4Nl9DUjBf
V1BfQklUID0gMTYKK2NvbnN0IF9PX0VYQ0wgPSAwMjAwCitjb25zdCBfQlBGX05FRyA9IDB4ODAK
K2NvbnN0IF9NU0dfTk9TSUdOQUwgPSAxNjM4NAorY29uc3QgX0lQVjZfUlhIT1BPUFRTID0gX0lQ
VjZfSE9QT1BUUworY29uc3QgX0lGTEFfTUFDVkxBTl9NQUNBRERSX0NPVU5UID0gNgorY29uc3Qg
X19DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MgPSAxMTAxCitjb25zdCBfUFRSQUNFX0dFVFJF
R1NFVCA9IDE2OTAwCitjb25zdCBfU0tGX0FEX0lGSU5ERVggPSA4Citjb25zdCBfX1NZU19NTUFO
X0ggPSAxCitjb25zdCBfTVNfQUNUSVZFID0gMTA3Mzc0MTgyNAorY29uc3QgX1JfT0sgPSA0Citj
b25zdCBfSVBWNl9SRUNWRlJBR1NJWkUgPSA3NworY29uc3QgX19fTlJfcnRfc2lncmV0dXJuID0g
MTUKK2NvbnN0IF9fX0dOVUNfUEFUQ0hMRVZFTF9fID0gMAorY29uc3QgX19fTlJfZ2V0aXRpbWVy
ID0gMzYKK2NvbnN0IF9fX1NJWkVPRl9JTlRfXyA9IDQKK2NvbnN0IF9fX1VJTlRfTEVBU1Q2NF9N
QVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3QgX05EVFBBX1VDQVNUX1BST0JFUyA9IDEw
Citjb25zdCBfSUZMQV9CUlBPUlRfUEFEID0gMjYKK2NvbnN0IF9fWEJTNV9MUDY0X09GRjY0ID0g
MQorY29uc3QgX1NJR0FMUk0gPSAxNAorY29uc3QgX01TR19PT0IgPSAxCitjb25zdCBfUlROX1RI
Uk9XID0gOQorY29uc3QgX1VMT05HX1dJRFRIID0gX19fV09SRFNJWkUKK2NvbnN0IF9YODZfQ1I0
X1BTRV9CSVQgPSA0Citjb25zdCBfX1NDXzJfRk9SVF9ERVYgPSA0OQorY29uc3QgX19fTlJfc3lz
bG9nID0gMTAzCitjb25zdCBfX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19DRkxBR1MgPSAxMTI4
Citjb25zdCBfX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJFRSA9IDIKK2NvbnN0IF9fX0dMSUJD
X1VTRV9MSUJfRVhUMiA9IDEKK2NvbnN0IF9USU9DTk9UVFlfdmFsID0gMjE1MzgKK2NvbnN0IF9B
Rl9QSE9ORVQgPSBfUEZfUEhPTkVUCitjb25zdCBfTkVUTElOS19ORVRGSUxURVIgPSAxMgorY29u
c3QgX0VUSF9GQ1NfTEVOID0gNAorY29uc3QgX0ZTX1hGTEFHX0FQUEVORCA9IDB4MDAwMDAwMTAK
K2NvbnN0IF9fX05SX2lvY3RsID0gMTYKK2NvbnN0IF9DWDg2X0FSUl9CQVNFID0gMHhjNAorY29u
c3QgX0FJX05VTUVSSUNTRVJWID0gMHgwNDAwCitjb25zdCBfUFJfVFNDX0VOQUJMRSA9IDEKK2Nv
bnN0IF9TQ0hFRF9JRExFID0gNQorY29uc3QgX0ZfT0sgPSAwCitjb25zdCBfX1NDX05MX1RFWFRN
QVggPSAxMjQKK2NvbnN0IF9JUE9QVF9NRUFTVVJFTUVOVCA9IF9JUE9QVF9ERUJNRUFTCitjb25z
dCBfUlRfVEFCTEVfQ09NUEFUID0gMjUyCitjb25zdCBfX19OUl9nZXRwcmlvcml0eSA9IDE0MAor
Y29uc3QgX0ZTX05PQ09XX0ZMID0gMHgwMDgwMDAwMAorY29uc3QgX0lGTEFfTlVNX1RYX1FVRVVF
UyA9IDMxCitjb25zdCBfSVBWNl9IT1BPUFRTID0gNTQKK2NvbnN0IF9fX0xPTkdfTE9OR19NQVhf
XyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX1JUTV9ORVdORUlHSFRCTCA9IDY0Citjb25z
dCBfVENQX1FVRVVFX1NFUSA9IDIxCitjb25zdCBfSUZMQV9JTkZPX1NMQVZFX0RBVEEgPSA1Citj
b25zdCBfX19WRVJTSU9OX18gPSAiOC4zLjAiCitjb25zdCBfSUZMQV9HRU5FVkVfSUQgPSAxCitj
b25zdCBfSUNNUDZfUEFSQU1QUk9CX05FWFRIRUFERVIgPSAxCitjb25zdCBfU1lTX2RlbGV0ZV9t
b2R1bGUgPSBfX19OUl9kZWxldGVfbW9kdWxlCitjb25zdCBfSVBWNl9SVEhEUiA9IDU3Citjb25z
dCBfTExPTkdfTUlOID0gKC1fTExPTkdfTUFYIC0gMSkKK2NvbnN0IF9FQ09NTSA9IDcwCitjb25z
dCBfU1lTX3RpbWVyX2dldHRpbWUgPSBfX19OUl90aW1lcl9nZXR0aW1lCitjb25zdCBfX19OUl9t
aWdyYXRlX3BhZ2VzID0gMjU2Citjb25zdCBfSU5fTU9WRSA9IChfSU5fTU9WRURfRlJPTSB8IF9J
Tl9NT1ZFRF9UTykKK2NvbnN0IF9QT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFID0gMAorY29uc3Qg
X05fQVgyNSA9IDUKK2NvbnN0IF9fX09fQ0xPRVhFQyA9IDAyMDAwMDAwCitjb25zdCBfVldFUkFT
RSA9IDE0Citjb25zdCBfX19JTk9fVF9NQVRDSEVTX0lOTzY0X1QgPSAxCitjb25zdCBfRUxJQkFD
QyA9IDc5Citjb25zdCBfSVBPUFRfU0VDVVJfVU5DTEFTUyA9IDB4MDAwMAorY29uc3QgX19QT1NJ
WF9TSEFSRURfTUVNT1JZX09CSkVDVFMgPSAyMDA4MDkKK2NvbnN0IF9BUlBIUkRfSVBERFAgPSA3
NzcKK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfU1RBVEUgPSAxCitjb25zdCBfUkxJTUlUX1NUQUNL
ID0gMworY29uc3QgX1BGX0FTSCA9IDE4Citjb25zdCBfX19OUl9nZXRwZWVybmFtZSA9IDUyCitj
b25zdCBfSVBWNl9SRUNWRVJSID0gMjUKK2NvbnN0IF9OX1NUUklQID0gNAorY29uc3QgX0lQUFJP
VE9fSUNNUCA9IDEKK2NvbnN0IF9QUl9TVkVfVkxfTEVOX01BU0sgPSAweGZmZmYKK2NvbnN0IF9G
X0dFVFBJUEVfU1ogPSAxMDMyCitjb25zdCBfSU9WX01BWCA9IF9fX0lPVl9NQVgKK2NvbnN0IF9S
VFBST1RfUklQID0gMTg5Citjb25zdCBfX19OUl9uZXdmc3RhdGF0ID0gMjYyCitjb25zdCBfX1NZ
U19NT1VOVF9IID0gMQorY29uc3QgX1BSX1RBU0tfUEVSRl9FVkVOVFNfRU5BQkxFID0gMzIKK2Nv
bnN0IF9JUFBST1RPX1BVUCA9IDEyCitjb25zdCBfRVRIX1BfU0xPVyA9IDB4ODgwOQorY29uc3Qg
X1NZU19pbm90aWZ5X3JtX3dhdGNoID0gX19fTlJfaW5vdGlmeV9ybV93YXRjaAorY29uc3QgX1RD
U0VUQVcgPSAweDU0MDcKK2NvbnN0IF9QQUNLRVRfTVVMVElDQVNUID0gMgorY29uc3QgX19fSU5U
MzJfTUFYX18gPSAweDdmZmZmZmZmCitjb25zdCBfTElOVVhfUkVCT09UX0NNRF9DQURfT04gPSAw
eDg5QUJDREVGCitjb25zdCBfSUZMQV9CT05EX0FEX0FDVE9SX1NZU19QUklPID0gMjQKK2NvbnN0
IF9QUl9TRVRfRFVNUEFCTEUgPSA0Citjb25zdCBfRVRIX1BfRUNPTkVUID0gMHgwMDE4Citjb25z
dCBfU1lTX3NobWN0bCA9IF9fX05SX3NobWN0bAorY29uc3QgX01TX1NIQVJFRCA9IDEwNDg1NzYK
K2NvbnN0IF9fX0lGTEFfUFBQX01BWCA9IDIKK2NvbnN0IF9IQVZFX1NZU19TVEFURlNfSCA9IDEK
K2NvbnN0IF9YRFBfRkxBR1NfTUFTSyA9IChfWERQX0ZMQUdTX1VQREFURV9JRl9OT0VYSVNUIHwg
X1hEUF9GTEFHU19NT0RFUykKK2NvbnN0IF9USU9DR1JTNDg1ID0gMHg1NDJFCitjb25zdCBfSVBW
Nl9SRUNWUEtUSU5GTyA9IDQ5Citjb25zdCBfSEFWRV9MSU5VWF9SRUJPT1RfSCA9IDEKK2NvbnN0
IF9UQ1BfTk9ERUxBWSA9IDEKK2NvbnN0IF9QUkVGSVhfQUREUkVTUyA9IDEKK2NvbnN0IF9SUE1f
UENPX0FERCA9IDEKK2NvbnN0IF9UQ1BPUFRfTUFYU0VHID0gMgorY29uc3QgX1NZU19zY2hlZF9n
ZXRhZmZpbml0eSA9IF9fX05SX3NjaGVkX2dldGFmZmluaXR5Citjb25zdCBfX1JFRU5UUkFOVCA9
IDEKK2NvbnN0IF9JUFY2X0RST1BfTUVNQkVSU0hJUCA9IF9JUFY2X0xFQVZFX0dST1VQCitjb25z
dCBfX1hPUEVOX1hQRzMgPSAxCitjb25zdCBfRU1GSUxFID0gMjQKK2NvbnN0IF9fU0NfWE9QRU5f
UkVBTFRJTUUgPSAxMzAKK2NvbnN0IF9USF9QVVNIID0gMHgwOAorY29uc3QgX0lGTEFfQlJfUEFE
ID0gNDAKK2NvbnN0IF9DTERfS0lMTEVEID0gMgorY29uc3QgX1NJR1RUT1UgPSAyMgorY29uc3Qg
X0lGTEFfVkZfU1BPT0ZDSEsgPSA0Citjb25zdCBfX1NDX01CX0xFTl9NQVggPSAxMDgKK2NvbnN0
IF9fX1VJTlQ2NF9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZgorY29uc3QgX0lGTEFfR0VORVZF
X1VEUF9aRVJPX0NTVU02X1JYID0gMTAKK2NvbnN0IF9fX2xpbnV4ID0gMQorY29uc3QgX1JMSU1J
VF9OT0ZJTEUgPSA3Citjb25zdCBfSUZMQV9CT05EX1RMQl9EWU5BTUlDX0xCID0gMjcKK2NvbnN0
IF9ORFRBX0NPTkZJRyA9IDUKK2NvbnN0IF9fUE9TSVgyX0NfVkVSU0lPTiA9IF9fX1BPU0lYMl9U
SElTX1ZFUlNJT04KK2NvbnN0IF9fUE9TSVhfTUVNT1JZX1BST1RFQ1RJT04gPSAyMDA4MDkKK2Nv
bnN0IF9fU0NfUkVHRVhfVkVSU0lPTiA9IDE1NgorY29uc3QgX0lGTEFfSU5FVDZfSUNNUDZTVEFU
UyA9IDYKK2NvbnN0IF9fTkVUREJfSCA9IDEKK2NvbnN0IF9GSU9BU1lOQyA9IDB4NTQ1MgorY29u
c3QgX0lGTEFfVlhMQU5fTDNNSVNTID0gMTQKK2NvbnN0IF9fX1NfSVNHSUQgPSAwMjAwMAorY29u
c3QgX01TX1ZFUkJPU0UgPSAzMjc2OAorY29uc3QgX05EVEFfR0NfSU5URVJWQUwgPSA4Citjb25z
dCBfRVRIX1BfSVJEQSA9IDB4MDAxNworY29uc3QgX19fTlJfaW5vdGlmeV9ybV93YXRjaCA9IDI1
NQorY29uc3QgX1NZU19wd3JpdGV2ID0gX19fTlJfcHdyaXRldgorY29uc3QgX19fc2lnc3RhY2tf
ZGVmaW5lZCA9IDEKK2NvbnN0IF9fX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUgPSAyCitj
b25zdCBfX1NDX0NfTEFOR19TVVBQT1JUID0gMTM1Citjb25zdCBfRl9TRUFMX0dST1cgPSAweDAw
MDQKK2NvbnN0IF9OTF9NTUFQX1NUQVRVU19SRVNFUlZFRCA9IDEKK2NvbnN0IF9IQVZFX0xPRkZf
VCA9IDEKK2NvbnN0IF9fUE9TSVhfSElXQVQgPSBfX1BPU0lYX1BJUEVfQlVGCitjb25zdCBfUFJf
R0VUX1RIUF9ESVNBQkxFID0gNDIKK2NvbnN0IF9fQklUU19CWVRFU1dBUF9IID0gMQorY29uc3Qg
X0ZfVEVTVCA9IDMKK2NvbnN0IF9NUkVNQVBfRklYRUQgPSAyCitjb25zdCBfTUFYX0FERFJfTEVO
ID0gNworY29uc3QgX19TQ19MT05HX0JJVCA9IDEwNgorY29uc3QgX09OT0NSID0gMDAwMDAyMAor
Y29uc3QgX1NJX01FU0dRID0gLTMKK2NvbnN0IF9QUklkRkFTVDggPSAiZCIKK2NvbnN0IF9JRkxB
X01BQ1NFQ19QT1JUID0gMgorY29uc3QgX0NCQVVEID0gMDAxMDAxNworY29uc3QgX1NZU19zZXRm
c3VpZCA9IF9fX05SX3NldGZzdWlkCitjb25zdCBfX1NDX01BUFBFRF9GSUxFUyA9IDE2Citjb25z
dCBfRkZJX0xPTkdfTE9OR19NQVggPSBfTE9OR19MT05HX01BWAorY29uc3QgX05EX1JBX0ZMQUdf
T1RIRVIgPSAweDQwCitjb25zdCBfVFJBUF9UUkFDRSA9IDIKK2NvbnN0IF9fU0NfUkFXX1NPQ0tF
VFMgPSAyMzYKK2NvbnN0IF9GU19YRkxBR19TWU5DID0gMHgwMDAwMDAyMAorY29uc3QgX0lGTEFf
Qk9ORF9BUlBfSVBfVEFSR0VUID0gOAorY29uc3QgX19QT1NJWF9SRUdFWFAgPSAxCitjb25zdCBf
VENQX0lORk8gPSAxMQorY29uc3QgX0lGTEFfQlJQT1JUX01DQVNUX1RPX1VDQVNUID0gMjgKK2Nv
bnN0IF9QRl9ORkMgPSAzOQorY29uc3QgX1NfSUZJRk8gPSBfX19TX0lGSUZPCitjb25zdCBfRUFJ
X05PVENBTkNFTEVEID0gLTEwMgorY29uc3QgX1BUUkFDRV9PX1RSQUNFRVhJVCA9IDY0Citjb25z
dCBfU1RBX1JPTkxZID0gKF9TVEFfUFBTU0lHTkFMIHwgX1NUQV9QUFNKSVRURVIgfCBfU1RBX1BQ
U1dBTkRFUiB8IF9TVEFfUFBTRVJST1IgfCBfU1RBX0NMT0NLRVJSIHwgX1NUQV9OQU5PIHwgX1NU
QV9NT0RFIHwgX1NUQV9DTEspCitjb25zdCBfVENQX0ZJTl9XQUlUMSA9IDQKK2NvbnN0IF9JRkxB
X0lORVQ2X1NUQVRTID0gMworY29uc3QgX19JT0NfVFlQRVNISUZUID0gKF9fSU9DX05SU0hJRlQr
X19JT0NfTlJCSVRTKQorY29uc3QgX19fRkxUMTI4X01JTl9fID0gMS4xCitjb25zdCBfUlRGX1dJ
TkRPVyA9IDB4MDA4MAorY29uc3QgX1BSX0dFVF9DSElMRF9TVUJSRUFQRVIgPSAzNworY29uc3Qg
X1JUTkxHUlBfSVBWNF9NUk9VVEUgPSA2Citjb25zdCBfTk9fQUREUkVTUyA9IF9OT19EQVRBCitj
b25zdCBfU1lTX2ZjaG93bmF0ID0gX19fTlJfZmNob3duYXQKK2NvbnN0IF9fX05SX2dldGN3ZCA9
IDc5Citjb25zdCBfUFJFRklYX0NBQ0hFSU5GTyA9IDIKK2NvbnN0IF9JUE9QVF9PTEVOID0gMQor
Y29uc3QgX1NZU19mY2htb2QgPSBfX19OUl9mY2htb2QKK2NvbnN0IF9fU0NfQkNfRElNX01BWCA9
IDM3Citjb25zdCBfU1lTX3NlbW9wID0gX19fTlJfc2Vtb3AKK2NvbnN0IF9JRkxBX1ZGX1NUQVRT
X1JYX1BBQ0tFVFMgPSAwCitjb25zdCBfX19QVEhSRUFEX01VVEVYX1VTRV9VTklPTiA9IDAKK2Nv
bnN0IF9UQ0lGTFVTSCA9IDAKK2NvbnN0IF9FQkFEU0xUID0gNTcKK2NvbnN0IF9FVEhFUlRZUEVf
UkVWQVJQID0gMHg4MDM1Citjb25zdCBfSEFWRV9FUE9MTF9DUkVBVEUxID0gMQorY29uc3QgX19C
SVRTX1RZUEVTX19fTE9DQUxFX1RfSCA9IDEKK2NvbnN0IF9fX0dOVUNfXyA9IDgKK2NvbnN0IF9T
Q05kTEVBU1Q4ID0gImhoZCIKK2NvbnN0IF9CMCA9IDAwMDAwMDAKK2NvbnN0IF9IQVZFX1NZU19J
Tk9USUZZX0ggPSAxCitjb25zdCBfX19TX0lGRElSID0gMDA0MDAwMAorY29uc3QgX1RDQV9ST09U
X1RJTUVfREVMVEEgPSA0Citjb25zdCBfQ0xPTkVfVEhSRUFEID0gMHgwMDAxMDAwMAorY29uc3Qg
X01TX1BPU0lYQUNMID0gNjU1MzYKK2NvbnN0IF9QQVRIX01BWCA9IDQwOTYKK2NvbnN0IF9JRkxB
X1VOU1BFQyA9IDAKK2NvbnN0IF9fX05SX3JlYm9vdCA9IDE2OQorY29uc3QgX1NPTF9JUCA9IDAK
K2NvbnN0IF9UVU5fRl9VRk8gPSAweDEwCitjb25zdCBfX19GTFQ2NF9IQVNfREVOT1JNX18gPSAx
Citjb25zdCBfSVBUT1NfUFJFQ19DUklUSUNfRUNQID0gX0lQVE9TX0NMQVNTX0NTNQorY29uc3Qg
X0lOX0xPT1BCQUNLTkVUID0gMTI3Citjb25zdCBfU09MX0FBTCA9IDI2NQorY29uc3QgX1NZU19z
ZXR0aW1lb2ZkYXkgPSBfX19OUl9zZXR0aW1lb2ZkYXkKK2NvbnN0IF9JUFBST1RPX0lEUCA9IDIy
Citjb25zdCBfX1NDXzJfTE9DQUxFREVGID0gNTIKK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1BBRCA9
IDYKK2NvbnN0IF9BRl9JTkVUID0gX1BGX0lORVQKK2NvbnN0IF9GX1NFVExLID0gX0ZfU0VUTEs2
NAorY29uc3QgX0NYODZfUENSMSA9IDB4ZjAKK2NvbnN0IF9fX05SX2xyZW1vdmV4YXR0ciA9IDE5
OAorY29uc3QgX0lQT1BUX05PT1AgPSBfSVBPUFRfTk9QCitjb25zdCBfUlRNU0dfTkVXREVWSUNF
ID0gMHgxMQorY29uc3QgX0hBVkVfU0VUWEFUVFIgPSAxCitjb25zdCBfRlNfRU5DUllQVElPTl9N
T0RFX0FFU18yNTZfQ1RTID0gNAorY29uc3QgX19DU19WNV9XSURUSF9SRVNUUklDVEVEX0VOVlMg
PSA0Citjb25zdCBfU19JRlNPQ0sgPSBfX19TX0lGU09DSworY29uc3QgX19fTlJfc2lnbmFsZmQ0
ID0gMjg5Citjb25zdCBfX0lTT0M5OV9TT1VSQ0UgPSAxCitjb25zdCBfX19GTFRfRElHX18gPSA2
Citjb25zdCBfX19OUl9nZXRwaWQgPSAzOQorY29uc3QgX1VMTE9OR19XSURUSCA9IDY0Citjb25z
dCBfX1NDX1hPUEVOX1hQRzIgPSA5OAorY29uc3QgX1NZU19raWxsID0gX19fTlJfa2lsbAorY29u
c3QgX0IxMTAgPSAwMDAwMDAzCitjb25zdCBfVENQX1JFUEFJUl9RVUVVRSA9IDIwCitjb25zdCBf
UlROTEdSUF9JUFY0X0lGQUREUiA9IDUKK2NvbnN0IF9fX0ZYU1JfXyA9IDEKK2NvbnN0IF9NQUNW
TEFOX01PREVfUFJJVkFURSA9IDEKK2NvbnN0IF9fX05SX3N0YXR4ID0gMzMyCitjb25zdCBfX19T
SVpFX1dJRFRIX18gPSA2NAorY29uc3QgX19QT1NJWF9UVFlfTkFNRV9NQVggPSA5Citjb25zdCBf
SUZMQV9CT05EX0FEX0FDVE9SX1NZU1RFTSA9IDI2Citjb25zdCBfU09fR0VUX0ZJTFRFUiA9IF9T
T19BVFRBQ0hfRklMVEVSCitjb25zdCBfX1VUSU1FX0ggPSAxCitjb25zdCBfU1RBVFhfQkFTSUNf
U1RBVFMgPSAweDA3ZmYKK2NvbnN0IF9TWVNfdXRpbWVuc2F0ID0gX19fTlJfdXRpbWVuc2F0Citj
b25zdCBfX1NDXzJfQ0hBUl9URVJNID0gOTUKK2NvbnN0IF9UVU5TRVRPV05FUl92YWwgPSAxMDc0
MDI1Njc2Citjb25zdCBfUFRIUkVBRF9TVEFDS19NSU4gPSAxNjM4NAorY29uc3QgX1NJR1BST0Yg
PSAyNworY29uc3QgX19TQ19MSU5FX01BWCA9IDQzCitjb25zdCBfX19TSUdFVl9NQVhfU0laRSA9
IDY0Citjb25zdCBfSEFWRV9TRVRFTlYgPSAxCitjb25zdCBfX1NDX1NZU1RFTV9EQVRBQkFTRSA9
IDE2MgorY29uc3QgX0ZTX1hGTEFHX05PRFVNUCA9IDB4MDAwMDAwODAKK2NvbnN0IF9TWVNfdGlt
ZXJfY3JlYXRlID0gX19fTlJfdGltZXJfY3JlYXRlCitjb25zdCBfX1BDX0xJTktfTUFYID0gMAor
Y29uc3QgX1RDUE9QVF9XSU5ET1cgPSAzCitjb25zdCBfX0JJVFNfUE9TSVgyX0xJTV9IID0gMQor
Y29uc3QgX19fVUlOVF9MRUFTVDMyX01BWF9fID0gMHhmZmZmZmZmZgorY29uc3QgX19fTlJfbXFf
bm90aWZ5ID0gMjQ0Citjb25zdCBfSVBQT1JUX0RBWVRJTUUgPSAxMworY29uc3QgX1NZU19zdGF0
ID0gX19fTlJfc3RhdAorY29uc3QgX1BBUkVOQiA9IDAwMDA0MDAKK2NvbnN0IF9GQUxMT0NfRkxf
S0VFUF9TSVpFID0gMHgwMQorY29uc3QgX19TQ19TQ0hBUl9NQVggPSAxMTEKK2NvbnN0IF9JRkxB
X0JSX01DQVNUX1FVRVJJRVIgPSAyNQorY29uc3QgX01BRFZfSFdQT0lTT04gPSAxMDAKK2NvbnN0
IF9TT19DT09LSUUgPSA1NworY29uc3QgX19QT1NJWF9BU1lOQ19JTyA9IDEKK2NvbnN0IF9SVF9T
Q09QRV9OT1dIRVJFID0gMjU1Citjb25zdCBfSUZMQV9CT05EX1NMQVZFX0FEX0FDVE9SX09QRVJf
UE9SVF9TVEFURSA9IDcKK2NvbnN0IF9ORF9PUFRfUElfRkxBR19PTkxJTksgPSAweDgwCitjb25z
dCBfX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCA9IDgyCitjb25zdCBfU1lTX3NldGRvbWFpbm5h
bWUgPSBfX19OUl9zZXRkb21haW5uYW1lCitjb25zdCBfRl9HRVRPV05fRVggPSBfX19GX0dFVE9X
Tl9FWAorY29uc3QgX0VTVEFMRSA9IDExNgorY29uc3QgX19fTlJfZnV0ZXggPSAyMDIKK2NvbnN0
IF9JRkZfREVUQUNIX1FVRVVFID0gMHgwNDAwCitjb25zdCBfSUZMQV9MSU5LTU9ERSA9IDE3Citj
b25zdCBfSVBPUFRfU0VDVVJJVFkgPSAxMzAKK2NvbnN0IF9JRkxBX0JSX1NUUF9TVEFURSA9IDUK
K2NvbnN0IF9fUENfTkFNRV9NQVggPSAzCitjb25zdCBfSUZMQV9HRU5FVkVfVURQX1pFUk9fQ1NV
TTZfVFggPSA5Citjb25zdCBfU0lHQ09OVCA9IDE4Citjb25zdCBfX19OUl9nZXRwbXNnID0gMTgx
Citjb25zdCBfU1lTX2ZjaGRpciA9IF9fX05SX2ZjaGRpcgorY29uc3QgX0lGRl9QT1JUU0VMID0g
ODE5MgorY29uc3QgX1NPX0FUVEFDSF9SRVVTRVBPUlRfQ0JQRiA9IDUxCitjb25zdCBfVENBX1JP
T1RfRkxBR1MgPSAyCitjb25zdCBfX1NDX1Y2X0lMUDMyX09GRkJJRyA9IDE3NworY29uc3QgX01B
WF9DQU5PTiA9IDI1NQorY29uc3QgX0lGTEFfQk9ORF9YTUlUX0hBU0hfUE9MSUNZID0gMTQKK2Nv
bnN0IF9FVEhFUl9DUkNfTEVOID0gNAorY29uc3QgX0lGTEFfSU5GT19EQVRBID0gMgorY29uc3Qg
X19fTElOS19YU1RBVFNfVFlQRV9NQVggPSAyCitjb25zdCBfTlRGX1BST1hZID0gMHgwOAorY29u
c3QgX1JUUFJPVF9FSUdSUCA9IDE5MgorY29uc3QgX19DU19WN19FTlYgPSAxMTQ5Citjb25zdCBf
QUlfSUROID0gMHgwMDQwCitjb25zdCBfU19JUk9USCA9IChfU19JUkdSUCA+PiAzKQorY29uc3Qg
X1JUTkxHUlBfTk9ORSA9IDAKK2NvbnN0IF9JUFBST1RPX0dSRSA9IDQ3Citjb25zdCBfV0VYSVRF
RCA9IDQKK2NvbnN0IF9QQUNLRVRfVFhfVElNRVNUQU1QID0gMTYKK2NvbnN0IF9FUE9MTEhVUCA9
IDE2Citjb25zdCBfTFRfT0JKRElSID0gIi5saWJzLyIKK2NvbnN0IF9fX1JUQVhfTUFYID0gMTgK
K2NvbnN0IF9QQUNLRVRfSERSTEVOID0gMTEKK2NvbnN0IF9CUEZfTFNIID0gMHg2MAorY29uc3Qg
X1RDUE9MRU5fU0FDS19QRVJNSVRURUQgPSAyCitjb25zdCBfUE9MTF9QUkkgPSA1Citjb25zdCBf
X19OUl9zZXRyZXVpZCA9IDExMworY29uc3QgX0ZTX1hGTEFHX05PREVGUkFHID0gMHgwMDAwMjAw
MAorY29uc3QgX19TQ18yX1BCUyA9IDE2OAorY29uc3QgX1NJT0NTSUZGTEFHUyA9IDB4ODkxNAor
Y29uc3QgX19fRl9HRVRPV04gPSA5Citjb25zdCBfX19JRkxBX0JPTkRfQURfSU5GT19NQVggPSA2
Citjb25zdCBfQlBGX01BWElOU05TID0gNDA5NgorY29uc3QgX0VBSV9JRE5fRU5DT0RFID0gLTEw
NQorY29uc3QgX0lGTEFfVkZfU1RBVFNfVFhfUEFDS0VUUyA9IDEKK2NvbnN0IF9SV0hfV1JJVEVf
TElGRV9NRURJVU0gPSAzCitjb25zdCBfRklMRV9ERURVUEVfUkFOR0VfU0FNRSA9IDAKK2NvbnN0
IF9JUFBST1RPX1RDUCA9IDYKK2NvbnN0IF9USU9DTV9DRCA9IF9USU9DTV9DQVIKK2NvbnN0IF9C
MTM0ID0gMDAwMDAwNAorY29uc3QgX0VBSV9GQU1JTFkgPSAtNgorY29uc3QgX0lGTEFfQlJQT1JU
X0JDQVNUX0ZMT09EID0gMzAKK2NvbnN0IF9TWVNfZmxvY2sgPSBfX19OUl9mbG9jaworY29uc3Qg
X0hBVkVfTkVUUEFDS0VUX1BBQ0tFVF9IID0gMQorY29uc3QgX0VUSF9QX1BSUCA9IDB4ODhGQgor
Y29uc3QgX09GSUxMID0gMDAwMDEwMAorY29uc3QgX19DU19MRlM2NF9MSUJTID0gMTAwNgorY29u
c3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9BRVNfMjU2X1hUUyA9IDEKK2NvbnN0IF9JRkxBX0dUUF9G
RDAgPSAxCitjb25zdCBfSUZMQV9HVFBfRkQxID0gMgorY29uc3QgX0hBVkVfU1lOQ19GSUxFX1JB
TkdFID0gMQorY29uc3QgX0lGQV9MT0NBTCA9IDIKK2NvbnN0IF9ORF9PUFRfUElfRkxBR19SQURE
UiA9IDB4MjAKK2NvbnN0IF9UQ1BfREVGRVJfQUNDRVBUID0gOQorY29uc3QgX01DQVNUX0pPSU5f
U09VUkNFX0dST1VQID0gNDYKK2NvbnN0IF9TWVNfcmVxdWVzdF9rZXkgPSBfX19OUl9yZXF1ZXN0
X2tleQorY29uc3QgX0lDTVA2X1BBQ0tFVF9UT09fQklHID0gMgorY29uc3QgX1g4Nl9DUjRfUENF
X0JJVCA9IDgKK2NvbnN0IF9FQUlfQkFERkxBR1MgPSAtMQorY29uc3QgX19DU19YQlM1X0xQQklH
X09GRkJJR19MSU5URkxBR1MgPSAxMTE1Citjb25zdCBfVVRJTUVfTk9XID0gKCgxIDw8IDMwKSAt
IDEpCitjb25zdCBfX1BPU0lYX01BWF9JTlBVVCA9IDI1NQorY29uc3QgX0lGTEFfQlJQT1JUX0lE
ID0gMTcKK2NvbnN0IF9FVEhfREFUQV9MRU4gPSAxNTAwCitjb25zdCBfX19STElNSVRfU0lHUEVO
RElORyA9IDExCitjb25zdCBfU1lTX2lvX2Rlc3Ryb3kgPSBfX19OUl9pb19kZXN0cm95Citjb25z
dCBfU09fSU5DT01JTkdfTkFQSV9JRCA9IDU2Citjb25zdCBfRVRIX1BfUFBQX0RJU0MgPSAweDg4
NjMKK2NvbnN0IF9UQ1BPTEVOX01BWFNFRyA9IDQKK2NvbnN0IF9FVEhfUF84MDJfM19NSU4gPSAw
eDA2MDAKK2NvbnN0IF9BUlBPUF9SUkVQTFkgPSA0Citjb25zdCBfSVBWNl9VTklDQVNUX0hPUFMg
PSAxNgorY29uc3QgX05FVExJTktfTk9fRU5PQlVGUyA9IDUKK2NvbnN0IF9fX05SX25hbWVfdG9f
aGFuZGxlX2F0ID0gMzAzCitjb25zdCBfX19GTFQzMl9NQVhfXyA9IDEuMQorY29uc3QgX1NZU190
aW1lcmZkX2NyZWF0ZSA9IF9fX05SX3RpbWVyZmRfY3JlYXRlCitjb25zdCBfSU5fTU9WRURfVE8g
PSAweDAwMDAwMDgwCitjb25zdCBfU1lTX2dldHRpZCA9IF9fX05SX2dldHRpZAorY29uc3QgX19Q
T1NJWF9JUFY2ID0gMjAwODA5Citjb25zdCBfQUZfTVBMUyA9IF9QRl9NUExTCitjb25zdCBfU1lT
X2ZhbGxvY2F0ZSA9IF9fX05SX2ZhbGxvY2F0ZQorY29uc3QgX0FGX1dBTlBJUEUgPSBfUEZfV0FO
UElQRQorY29uc3QgX1RDUF9USElOX0xJTkVBUl9USU1FT1VUUyA9IDE2Citjb25zdCBfX19OUl9z
ZXRkb21haW5uYW1lID0gMTcxCitjb25zdCBfX19OTE1TR0VSUl9BVFRSX01BWCA9IDQKK2NvbnN0
IF9fX0ZMVDEyOF9IQVNfREVOT1JNX18gPSAxCitjb25zdCBfRVRIRVJUWVBFX1BVUCA9IDB4MDIw
MAorY29uc3QgX19CSVRTX1BPU0lYMV9MSU1fSCA9IDEKK2NvbnN0IF9fX0dMSUJDX1VTRV9JRUNf
NjA1NTlfVFlQRVNfRVhUID0gMQorY29uc3QgX0lQVjZfUkVDVkRTVE9QVFMgPSA1OAorY29uc3Qg
X19fTlJfc2VjdXJpdHkgPSAxODUKK2NvbnN0IF9BUlBIUkRfUkFXSVAgPSA1MTkKK2NvbnN0IF9F
VEhfUF84MDJfRVgxID0gMHg4OEI1Citjb25zdCBfSUZBX0ZfREFERkFJTEVEID0gMHgwOAorY29u
c3QgX1NDTng4ID0gImhoeCIKK2NvbnN0IF9DU0lHTkFMID0gMHgwMDAwMDBmZgorY29uc3QgX19f
TlJfYWNjZXB0NCA9IDI4OAorY29uc3QgX05JX05VTUVSSUNIT1NUID0gMQorY29uc3QgX1JUTkhf
Rl9VTlJFU09MVkVEID0gMzIKK2NvbnN0IF9COTYwMCA9IDAwMDAwMTUKK2NvbnN0IF9OTF9NTUFQ
X1NUQVRVU19VTlVTRUQgPSAwCitjb25zdCBfU09fTE9DS19GSUxURVIgPSA0NAorY29uc3QgX0lG
TEFfVkZfTUFDID0gMQorY29uc3QgX0lGTEFfVlhMQU5fUkVNQ1NVTV9UWCA9IDIxCitjb25zdCBf
VUNIQVJfTUFYID0gKF9TQ0hBUl9NQVggKiAyICsgMSkKK2NvbnN0IF9JRkxBX0JPTkRfQVJQX1ZB
TElEQVRFID0gOQorY29uc3QgX0lQUFJPVE9fTVBMUyA9IDEzNworY29uc3QgX0lGTEFfTUlOX01U
VSA9IDUwCitjb25zdCBfRVRIX1BfSVBWNiA9IDB4ODZERAorY29uc3QgX0VUSF9QX0FBUlAgPSAw
eDgwRjMKK2NvbnN0IF9TWVNfc2NoZWRfc2V0cGFyYW0gPSBfX19OUl9zY2hlZF9zZXRwYXJhbQor
Y29uc3QgX0FURl9QVUJMID0gMHgwOAorY29uc3QgX1dDT1JFRkxBRyA9IF9fX1dDT1JFRkxBRwor
Y29uc3QgX1RJT0NHV0lOU1ogPSAweDU0MTMKK2NvbnN0IF9fX1VTRV9YT1BFTjJLOFhTSSA9IDEK
K2NvbnN0IF9QUklpOCA9ICJpIgorY29uc3QgX0FSUEhSRF9MT09QQkFDSyA9IDc3MgorY29uc3Qg
X19fR0NDX0lFQ181NTlfQ09NUExFWCA9IDIKK2NvbnN0IF9TT19CUk9BRENBU1QgPSA2Citjb25z
dCBfX19HTElCQ19NSU5PUl9fID0gMjgKK2NvbnN0IF9fU0NfU1RSRUFNUyA9IDE3NAorY29uc3Qg
X1NZU19zaG1hdCA9IF9fX05SX3NobWF0Citjb25zdCBfSVBWTEFOX01PREVfTDIgPSAwCitjb25z
dCBfX19NTVhfXyA9IDEKK2NvbnN0IF9CMTUwID0gMDAwMDAwNQorY29uc3QgX1BPU0lYX0ZBRFZf
V0lMTE5FRUQgPSAzCitjb25zdCBfSUZMQV9WWExBTl9SU0MgPSAxMgorY29uc3QgX1BBQ0tFVF9C
Uk9BRENBU1QgPSAxCitjb25zdCBfUEZfQVRNUFZDID0gOAorY29uc3QgX1NZU19wcmVhZHYyID0g
X19fTlJfcHJlYWR2MgorY29uc3QgX0lOX0NMQVNTQ19ORVQgPSAweGZmZmZmZjAwCitjb25zdCBf
UEFDS0VUX0NPUFlfVEhSRVNIID0gNworY29uc3QgX0VUSF9aTEVOID0gNjAKK2NvbnN0IF9UQ1BP
UFRfRU9MID0gMAorY29uc3QgX0lONl9BRERSX0dFTl9NT0RFX1JBTkRPTSA9IDMKK2NvbnN0IF9J
RkxBX01BQ1NFQ19FTkNPRElOR19TQSA9IDYKK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2
NF9MSUJTID0gMTE0MgorY29uc3QgX0VUSF9QX1BVUEFUID0gMHgwMjAxCitjb25zdCBfU1lTX2dl
dHJ1c2FnZSA9IF9fX05SX2dldHJ1c2FnZQorY29uc3QgX19QT1NJWF9USFJFQURfQVRUUl9TVEFD
S0FERFIgPSAyMDA4MDkKK2NvbnN0IF9JRkxBX1BPUlRfUFJPRklMRSA9IDIKK2NvbnN0IF9fX0ZM
VDY0X0hBU19RVUlFVF9OQU5fXyA9IDEKK2NvbnN0IF9VSU5UNjRfV0lEVEggPSA2NAorY29uc3Qg
X1NZU19rY21wID0gX19fTlJfa2NtcAorY29uc3QgX0lOX01PVkVEX0ZST00gPSAweDAwMDAwMDQw
Citjb25zdCBfX1VUU05BTUVfTUFDSElORV9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RICitjb25z
dCBfSVBWNl9MRUFWRV9HUk9VUCA9IDIxCitjb25zdCBfU1lTX3VubGluayA9IF9fX05SX3VubGlu
aworY29uc3QgX0hBVkVfU1RSU0lHTkFMID0gMQorY29uc3QgX19QQ19DSE9XTl9SRVNUUklDVEVE
ID0gNgorY29uc3QgX19TQ19YT1BFTl9SRUFMVElNRV9USFJFQURTID0gMTMxCitjb25zdCBfRVRI
X1BfSUJPRSA9IDB4ODkxNQorY29uc3QgX09fRlNZTkMgPSBfT19TWU5DCitjb25zdCBfUlRNX05F
V1JVTEUgPSAzMgorY29uc3QgX0lGTEFfWERQX0ZMQUdTID0gMworY29uc3QgX1NJT0NHSUZDT1VO
VCA9IDB4ODkzOAorY29uc3QgX1BBQ0tFVF9PVVRHT0lORyA9IDQKK2NvbnN0IF9JUFRPU19QUkVD
X01BU0sgPSBfSVBUT1NfQ0xBU1NfTUFTSworY29uc3QgX19fTlJfcmVuYW1lYXQyID0gMzE2Citj
b25zdCBfX1NDX0lQVjYgPSAyMzUKK2NvbnN0IF9UQ1BfRVNUQUJMSVNIRUQgPSAxCitjb25zdCBf
QVJQSFJEX0FSQ05FVCA9IDcKK2NvbnN0IF9USU9DU0VSU1dJTEQgPSAweDU0NTUKK2NvbnN0IF9F
VEhfUF9QVVAgPSAweDAyMDAKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVEVUxJ
TkcgPSAyMDA4MDkKK2NvbnN0IF9TSUdFVl9USFJFQUQgPSAyCitjb25zdCBfSEFWRV9VVElNRV9I
ID0gMQorY29uc3QgX0lQX1JFQ1ZPUFRTID0gNgorY29uc3QgX1BSX1NFVF9NTV9TVEFSVF9DT0RF
ID0gMQorY29uc3QgX19fQ1BVX1NFVFNJWkUgPSAxMDI0Citjb25zdCBfUEZfREVDbmV0ID0gMTIK
K2NvbnN0IF9USU9DTV9DQVIgPSAweDA0MAorY29uc3QgX1NZU19zaG1nZXQgPSBfX19OUl9zaG1n
ZXQKK2NvbnN0IF9SVE1fRl9MT09LVVBfVEFCTEUgPSAweDEwMDAKK2NvbnN0IF9SVFBST1RfTlRL
ID0gMTUKK2NvbnN0IF9fX05SX2V2ZW50ZmQyID0gMjkwCitjb25zdCBfSUZMQV9FVkVOVF9CT05E
SU5HX09QVElPTlMgPSA2Citjb25zdCBfU0lPQ0dJRkVOQ0FQID0gMHg4OTI1Citjb25zdCBfX19O
Ul91bmxpbmthdCA9IDI2MworY29uc3QgX0lGTEFfQlJfVkxBTl9GSUxURVJJTkcgPSA3Citjb25z
dCBfTVNfQVNZTkMgPSAxCitjb25zdCBfX0lPQ19SRUFEID0gMgorY29uc3QgX19USFJFQURfU0hB
UkVEX1RZUEVTX0ggPSAxCitjb25zdCBfX19OUl9zZXRfcm9idXN0X2xpc3QgPSAyNzMKK2NvbnN0
IF9JRkxBX0dST1VQID0gMjcKK2NvbnN0IF9TQ0hFRF9ERUFETElORSA9IDYKK2NvbnN0IF9FTElC
RVhFQyA9IDgzCitjb25zdCBfV0NIQVJfTUlOID0gX19fV0NIQVJfTUlOCitjb25zdCBfX19OUl9w
dXRwbXNnID0gMTgyCitjb25zdCBfX19OUl9hcmNoX3ByY3RsID0gMTU4Citjb25zdCBfTVNHX0NU
UlVOQyA9IDgKK2NvbnN0IF9JRkxBX0JSX1JPT1RfUEFUSF9DT1NUID0gMTMKK2NvbnN0IF9NU0df
U1lOID0gMTAyNAorY29uc3QgX0hBVkVfTElOVVhfTkVUTElOS19IID0gMQorY29uc3QgX0hBVkVf
U1BMSUNFID0gMQorY29uc3QgX1BLRVlfRElTQUJMRV9XUklURSA9IDB4MgorY29uc3QgX0ZQRV9G
TFRESVYgPSAzCitjb25zdCBfX19OUl9wa2V5X21wcm90ZWN0ID0gMzI5Citjb25zdCBfSVBQT1JU
X1RFTE5FVCA9IDIzCitjb25zdCBfUlRBX1NQT1JUID0gMjgKK2NvbnN0IF9fWE9QRU5fVkVSU0lP
TiA9IDcwMAorY29uc3QgX19DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMgPSAxMTAyCitjb25zdCBf
UlROTEdSUF9ORUlHSCA9IDMKK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFH
UyA9IDExMTcKK2NvbnN0IF9VSU5UX0ZBU1Q4X1dJRFRIID0gOAorY29uc3QgX1RDUE9QVF9OT1Ag
PSAxCitjb25zdCBfVElNRV9CQUQgPSBfVElNRV9FUlJPUgorY29uc3QgX1JUTV9ERUxBRERSTEFC
RUwgPSA3MworY29uc3QgX19QT1NJWF9OT19UUlVOQyA9IDEKK2NvbnN0IF9QUk9UX1dSSVRFID0g
MHgyCitjb25zdCBfX19OUl9lcG9sbF9wd2FpdCA9IDI4MQorY29uc3QgX0FSUEhSRF9TSVQgPSA3
NzYKK2NvbnN0IF9SVE1fTkVXUFJFRklYID0gNTIKK2NvbnN0IF9fX1JMSU1JVF9NRU1MT0NLID0g
OAorY29uc3QgX1NZU19sb29rdXBfZGNvb2tpZSA9IF9fX05SX2xvb2t1cF9kY29va2llCitjb25z
dCBfX19PUkRFUl9MSVRUTEVfRU5ESUFOX18gPSAxMjM0Citjb25zdCBfU1lTX21rZGlyYXQgPSBf
X19OUl9ta2RpcmF0Citjb25zdCBfVENQT0xFTl9XSU5ET1cgPSAzCitjb25zdCBfRVRIX1BfVElQ
QyA9IDB4ODhDQQorY29uc3QgX19QT1NJWF9USFJFQURfS0VZU19NQVggPSAxMjgKK2NvbnN0IF9B
VF9FTVBUWV9QQVRIID0gMHgxMDAwCitjb25zdCBfX19OUl9zY2hlZF95aWVsZCA9IDI0Citjb25z
dCBfWERQX0ZMQUdTX01PREVTID0gKF9YRFBfRkxBR1NfU0tCX01PREUgfCBfWERQX0ZMQUdTX0RS
Vl9NT0RFIHwgX1hEUF9GTEFHU19IV19NT0RFKQorY29uc3QgX0hBVkVfSU5PVElGWV9STV9XQVRD
SCA9IDEKK2NvbnN0IF9fU0NfU1RSRUFNX01BWCA9IDUKK2NvbnN0IF9fX0ZfR0VUU0lHID0gMTEK
K2NvbnN0IF9FTUVESVVNVFlQRSA9IDEyNAorY29uc3QgX1NUQV9DTEsgPSAweDgwMDAKK2NvbnN0
IF9JUFRPU19NSU5DT1NUID0gX0lQVE9TX0xPV0NPU1QKK2NvbnN0IF9fX0ZMVDY0X0RFTk9STV9N
SU5fXyA9IDEuMQorY29uc3QgX1JMSU02NF9JTkZJTklUWSA9IDB4ZmZmZmZmZmZmZmZmZmZmZgor
Y29uc3QgX0ZGSV9VTklYNjQgPSAyCitjb25zdCBfUlROTEdSUF9JUFY0X05FVENPTkYgPSAyNAor
Y29uc3QgX1JUQVhfRkVBVFVSRV9USU1FU1RBTVAgPSAoMSA8PCAyKQorY29uc3QgX0lOVDMyX01B
WCA9ICgyMTQ3NDgzNjQ3KQorY29uc3QgX0VUSEVSVFlQRV9JUFY2ID0gMHg4NmRkCitjb25zdCBf
VENQT1BUX1RTVEFNUF9IRFIgPSAoX1RDUE9QVF9OT1A8PDI0fF9UQ1BPUFRfTk9QPDwxNnxfVENQ
T1BUX1RJTUVTVEFNUDw8OHxfVENQT0xFTl9USU1FU1RBTVApCitjb25zdCBfSUZMQV9TVEFUU19M
SU5LX1hTVEFUUyA9IDIKK2NvbnN0IF9PX1JET05MWSA9IDAwCitjb25zdCBfX19OUl9nZXRyZXN1
aWQgPSAxMTgKK2NvbnN0IF9QVFJBQ0VfRVZFTlRfQ0xPTkUgPSAzCitjb25zdCBfQVJQSFJEX1BJ
TVJFRyA9IDc3OQorY29uc3QgX0lQVjZfTVVMVElDQVNUX0hPUFMgPSAxOAorY29uc3QgX19fTlJf
bGlua2F0ID0gMjY1Citjb25zdCBfRlNfTk9BVElNRV9GTCA9IDB4MDAwMDAwODAKK2NvbnN0IF9f
U0NfVUxPTkdfTUFYID0gMTE3Citjb25zdCBfSVBUT1NfQ0xBU1NfREVGQVVMVCA9IF9JUFRPU19D
TEFTU19DUzAKK2NvbnN0IF9TWVNfc2htZHQgPSBfX19OUl9zaG1kdAorY29uc3QgX19fTlJfb3Bl
biA9IDIKK2NvbnN0IF9USU1FX09LID0gMAorY29uc3QgX0JQRl9UWEEgPSAweDgwCitjb25zdCBf
X1NDX0NISUxEX01BWCA9IDEKK2NvbnN0IF9TWVNfYWRkX2tleSA9IF9fX05SX2FkZF9rZXkKK2Nv
bnN0IF9TVERDX0hFQURFUlMgPSAxCitjb25zdCBfTUFQX0FOT05ZTU9VUyA9IDB4MjAKK2NvbnN0
IF9YODZfQ1I0X0RFX0JJVCA9IDMKK2NvbnN0IF9WSU5UUiA9IDAKK2NvbnN0IF9NSU5TSUdTVEtT
WiA9IDIwNDgKK2NvbnN0IF9JUFRPU19MT1dDT1NUID0gMHgwMgorY29uc3QgX01BRFZfTUVSR0VB
QkxFID0gMTIKK2NvbnN0IF9JRkxBX1RVTl9QRVJTSVNUID0gNgorY29uc3QgX0hBVkVfTkVUSU5F
VF9JQ01QNl9IID0gMQorY29uc3QgX0lGTEFfQlJQT1JUX1NUQVRFID0gMQorY29uc3QgX0NQVV9T
RVRTSVpFID0gX19fQ1BVX1NFVFNJWkUKK2NvbnN0IF9JUFZFUlNJT04gPSA0Citjb25zdCBfU1lT
X2V4aXRfZ3JvdXAgPSBfX19OUl9leGl0X2dyb3VwCitjb25zdCBfVElPQ0NCUksgPSAweDU0MjgK
K2NvbnN0IF9fX0xQNjRfT0ZGNjRfTERGTEFHUyA9ICItbTY0IgorY29uc3QgX1BBQ0tFVF9WTkVU
X0hEUiA9IDE1Citjb25zdCBfX1NDX1RSQUNFX0VWRU5UX05BTUVfTUFYID0gMjQyCitjb25zdCBf
UFJfU1ZFX1NFVF9WTCA9IDUwCitjb25zdCBfU1lTX2ZvcmsgPSBfX19OUl9mb3JrCitjb25zdCBf
RVRIRVJUWVBFX1RSQUlMID0gMHgxMDAwCitjb25zdCBfUlRGX1JFSkVDVCA9IDB4MDIwMAorY29u
c3QgX0NMT05FX0ZTID0gMHgwMDAwMDIwMAorY29uc3QgX1VJTlQzMl9XSURUSCA9IDMyCitjb25z
dCBfU0lPQ0dJRlRYUUxFTiA9IDB4ODk0MgorY29uc3QgX05EQV9WTEFOID0gNQorY29uc3QgX1BU
UkFDRV9HRVRSRUdTID0gMTIKK2NvbnN0IF9fUE9TSVhfRlNZTkMgPSAyMDA4MDkKK2NvbnN0IF9T
WVNfZ2V0eGF0dHIgPSBfX19OUl9nZXR4YXR0cgorY29uc3QgX1NJT0NTSUZBRERSID0gMHg4OTE2
Citjb25zdCBfU1lTX21wcm90ZWN0ID0gX19fTlJfbXByb3RlY3QKK2NvbnN0IF9fUE9TSVhfTkFN
RV9NQVggPSAxNAorY29uc3QgX19QT1NJWF9PUEVOX01BWCA9IDIwCitjb25zdCBfVENTRVRBRiA9
IDB4NTQwOAorY29uc3QgX1RDUF9NRDVTSUdfTUFYS0VZTEVOID0gODAKK2NvbnN0IF9CUEZfRElW
ID0gMHgzMAorY29uc3QgX0lQVjZfQVVUSEhEUiA9IDEwCitjb25zdCBfTVNHX1RSVU5DID0gMzIK
K2NvbnN0IF9fUE9TSVgyX0NIQVJfVEVSTSA9IDIwMDgwOQorY29uc3QgX1NJR0FCUlQgPSA2Citj
b25zdCBfU1lTX3JlYWQgPSBfX19OUl9yZWFkCitjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9SV0xP
Q0tBVFRSX1QgPSA4Citjb25zdCBfSUZMQV9CUl9NQ0FTVF9TTk9PUElORyA9IDIzCitjb25zdCBf
TkVUTElOS19DT05ORUNURUQgPSAxCitjb25zdCBfRlNfRVhURU5UX0ZMID0gMHgwMDA4MDAwMAor
Y29uc3QgX0lGTEFfQlJfVE9QT0xPR1lfQ0hBTkdFX0RFVEVDVEVEID0gMTUKK2NvbnN0IF9TWVNf
bGxpc3R4YXR0ciA9IF9fX05SX2xsaXN0eGF0dHIKK2NvbnN0IF9FVEhfQUxFTiA9IDYKK2NvbnN0
IF9JRkZfTk9fUEkgPSAweDEwMDAKK2NvbnN0IF9fX05SX2dldGdpZCA9IDEwNAorY29uc3QgX1RD
QV9LSU5EID0gMQorY29uc3QgX19fRkxUMzJYX01JTl9fID0gMS4xCitjb25zdCBfX19EQkxfSEFT
X0RFTk9STV9fID0gMQorY29uc3QgX1RDUF9MQVNUX0FDSyA9IDkKK2NvbnN0IF9SVF9UQUJMRV9E
RUZBVUxUID0gMjUzCitjb25zdCBfTkxfTU1BUF9TVEFUVVNfU0tJUCA9IDQKK2NvbnN0IF9IQVZF
X0xPRzFQTCA9IDEKK2NvbnN0IF9GQUxMT0NfRkxfTk9fSElERV9TVEFMRSA9IDB4MDQKK2NvbnN0
IF9SVF9TQ09QRV9IT1NUID0gMjU0Citjb25zdCBfUlRNU0dfREVMUlVMRSA9IDB4MzIKK2NvbnN0
IF9JUFBST1RPX01BWCA9IDI1NgorY29uc3QgX0lQT1BUX0NMQVNTX01BU0sgPSAweDYwCitjb25z
dCBfQVRfRUFDQ0VTUyA9IDB4MjAwCitjb25zdCBfU1lTX3BhdXNlID0gX19fTlJfcGF1c2UKK2Nv
bnN0IF9ORF9PUFRfUFJFRklYX0lORk9STUFUSU9OID0gMworY29uc3QgX1NJR1VSRyA9IDIzCitj
b25zdCBfX1NDX1RJTUVSX01BWCA9IDM1Citjb25zdCBfTkRfUkFfRkxBR19IT01FX0FHRU5UID0g
MHgyMAorY29uc3QgX19TQ19TQ0hBUl9NSU4gPSAxMTIKK2NvbnN0IF9UQ1BPTEVOX1RTVEFNUF9B
UFBBID0gKF9UQ1BPTEVOX1RJTUVTVEFNUCsyKQorY29uc3QgX19fRkxUMzJfRElHX18gPSA2Citj
b25zdCBfUEZfUEhPTkVUID0gMzUKK2NvbnN0IF9SVFBST1RfUkVESVJFQ1QgPSAxCitjb25zdCBf
SU5fREVMRVRFX1NFTEYgPSAweDAwMDAwNDAwCitjb25zdCBfTklfSUROID0gMzIKK2NvbnN0IF9U
VU5fUkVBRFFfU0laRSA9IDUwMAorY29uc3QgX1NUQV9QTEwgPSAweDAwMDEKK2NvbnN0IF9JUF9B
RERfU09VUkNFX01FTUJFUlNISVAgPSAzOQorY29uc3QgX0FGX0JMVUVUT09USCA9IF9QRl9CTFVF
VE9PVEgKK2NvbnN0IF9JRkxBX0JSUE9SVF9NRVNTQUdFX0FHRV9USU1FUiA9IDIxCitjb25zdCBf
RU5PVEJMSyA9IDE1Citjb25zdCBfRkZJX1NJWkVPRl9BUkcgPSA4Citjb25zdCBfX0JJVFNfQ1BV
X1NFVF9IID0gMQorY29uc3QgX1NZU19tcV9nZXRzZXRhdHRyID0gX19fTlJfbXFfZ2V0c2V0YXR0
cgorY29uc3QgX1NPQ0tfRENDUCA9IDYKK2NvbnN0IF9fX1gzMl9TWVNDQUxMX0JJVCA9IDB4NDAw
MDAwMDAKK2NvbnN0IF9IQVZFX0RMRkNOX0ggPSAxCitjb25zdCBfRVRIRVJfSERSX0xFTiA9IF9F
VEhfSExFTgorY29uc3QgX1NZU19tbG9jazIgPSBfX19OUl9tbG9jazIKK2NvbnN0IF9TWVNfZ2V0
cmFuZG9tID0gX19fTlJfZ2V0cmFuZG9tCitjb25zdCBfX0dFVE9QVF9QT1NJWF9IID0gMQorY29u
c3QgX19fU1REQ19JRUNfNTU5X0NPTVBMRVhfXyA9IDEKK2NvbnN0IF9YODZfQ1I0X09TWFNBVkVf
QklUID0gMTgKK2NvbnN0IF9FTk9QUk9UT09QVCA9IDkyCitjb25zdCBfUlRBWF9GRUFUVVJFUyA9
IDEyCitjb25zdCBfU0lPQ1NJRk1BUCA9IDB4ODk3MQorY29uc3QgX19fTlJfZ2V0X3JvYnVzdF9s
aXN0ID0gMjc0Citjb25zdCBfSUZMQV9FVkVOVCA9IDQ0Citjb25zdCBfRlBFX0ZMVE9WRiA9IDQK
K2NvbnN0IF9IQVZFX1dBSVQ0ID0gMQorY29uc3QgX19TQ19BVlBIWVNfUEFHRVMgPSA4NgorY29u
c3QgX0VBSV9JTlRSID0gLTEwNAorY29uc3QgX1BSX01DRV9LSUxMX0RFRkFVTFQgPSAyCitjb25z
dCBfU09fUEVFUkdST1VQUyA9IDU5Citjb25zdCBfSUZMQV9CT05EX1BBQ0tFVFNfUEVSX1NMQVZF
ID0gMjAKK2NvbnN0IF9TSUdIVVAgPSAxCitjb25zdCBfUFRSQUNFX09fVFJBQ0VWRk9SSyA9IDQK
K2NvbnN0IF9FTk9TUEMgPSAyOAorY29uc3QgX1ZESVNDQVJEID0gMTMKK2NvbnN0IF9SVE1HUlBf
Tk9USUZZID0gMgorY29uc3QgX1NZU19vcGVuYXQgPSBfX19OUl9vcGVuYXQKK2NvbnN0IF9fX09S
REVSX1BEUF9FTkRJQU5fXyA9IDM0MTIKK2NvbnN0IF9BVF9TVEFUWF9TWU5DX1RZUEUgPSAweDYw
MDAKK2NvbnN0IF9fX05SX3Rna2lsbCA9IDIzNAorY29uc3QgX19fTlJfZ2V0X2tlcm5lbF9zeW1z
ID0gMTc3Citjb25zdCBfRURPVERPVCA9IDczCitjb25zdCBfUEZfTkVUQkVVSSA9IDEzCitjb25z
dCBfRVBPTExPTkVTSE9UID0gMTA3Mzc0MTgyNAorY29uc3QgX01BUF9BTk9OID0gX01BUF9BTk9O
WU1PVVMKK2NvbnN0IF9fX09fRElSRUNUID0gMDQwMDAwCitjb25zdCBfSVBUVExERUMgPSAxCitj
b25zdCBfX1NDX05HUk9VUFNfTUFYID0gMworY29uc3QgX0lQUE9SVF9FWEVDU0VSVkVSID0gNTEy
Citjb25zdCBfX19OUl9vcGVuX2J5X2hhbmRsZV9hdCA9IDMwNAorY29uc3QgX19DU19YQlM1X0xQ
NjRfT0ZGNjRfTElCUyA9IDExMTAKK2NvbnN0IF9TT19LRUVQQUxJVkUgPSA5Citjb25zdCBfU1lT
X3J0X3NpZ3JldHVybiA9IF9fX05SX3J0X3NpZ3JldHVybgorY29uc3QgX0lDTVA2X1JSX1BDT1VT
RV9SQUZMQUdTX0FVVE8gPSAweDEwCitjb25zdCBfQUZfTkVUTElOSyA9IF9QRl9ORVRMSU5LCitj
b25zdCBfTkRfT1BUX1BJX0ZMQUdfQVVUTyA9IDB4NDAKK2NvbnN0IF9JUFY2X0FERFJGT1JNID0g
MQorY29uc3QgX1RJTUVfV0FJVCA9IDQKK2NvbnN0IF9JRkxBX0lQT0lCX1VOU1BFQyA9IDAKK2Nv
bnN0IF9FSE9TVERPV04gPSAxMTIKK2NvbnN0IF9TWVNfZmFkdmlzZTY0ID0gX19fTlJfZmFkdmlz
ZTY0Citjb25zdCBfRVRIX1BfSUZFID0gMHhFRDNFCitjb25zdCBfSVBWNl9SRUNWSE9QTElNSVQg
PSA1MQorY29uc3QgX1RJT0NHU09GVENBUiA9IDB4NTQxOQorY29uc3QgX1BSX0dFVF9FTkRJQU4g
PSAxOQorY29uc3QgX1NZU191c3RhdCA9IF9fX05SX3VzdGF0Citjb25zdCBfU1lTX2lvX3N1Ym1p
dCA9IF9fX05SX2lvX3N1Ym1pdAorY29uc3QgX1NPTUFYQ09OTiA9IDEyOAorY29uc3QgX0lQX01U
VSA9IDE0Citjb25zdCBfX19GTFQzMlhfTUlOXzEwX0VYUF9fID0gKC0zMDcpCitjb25zdCBfSUZM
QV9HRU5FVkVfVU5TUEVDID0gMAorY29uc3QgX1NZU193cml0ZXYgPSBfX19OUl93cml0ZXYKK2Nv
bnN0IF9fX05SX2xnZXR4YXR0ciA9IDE5MgorY29uc3QgX19fU0laRU9GX1BUSFJFQURfQVRUUl9U
ID0gNTYKK2NvbnN0IF9NTlRfRk9SQ0UgPSAxCitjb25zdCBfX19GTFQxMjhfREVOT1JNX01JTl9f
ID0gMS4xCitjb25zdCBfX19rOF9fID0gMQorY29uc3QgX1NZU191bnNoYXJlID0gX19fTlJfdW5z
aGFyZQorY29uc3QgX01BRFZfUkVNT1ZFID0gOQorY29uc3QgX0VBRFYgPSA2OAorY29uc3QgX1NP
TF9BTEcgPSAyNzkKK2NvbnN0IF9DTE9ORV9ORVdDR1JPVVAgPSAweDAyMDAwMDAwCitjb25zdCBf
X1NDX01FU1NBR0VfUEFTU0lORyA9IDIwCitjb25zdCBfTVNfTUFORExPQ0sgPSA2NAorY29uc3Qg
X19VVFNOQU1FX1ZFUlNJT05fTEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSAorY29uc3QgX1JUTkxf
RkFNSUxZX0lQNk1SID0gMTI5Citjb25zdCBfSUZMQV9QSFlTX1BPUlRfSUQgPSAzNAorY29uc3Qg
X0ROX01VTFRJU0hPVCA9IDB4ODAwMDAwMDAKK2NvbnN0IF9CMTIwMCA9IDAwMDAwMTEKK2NvbnN0
IF9FV09VTERCTE9DSyA9IF9FQUdBSU4KK2NvbnN0IF9JRkxBX1ZGX1BPUlQgPSAxCitjb25zdCBf
X19TSV9IQVZFX1NJR1NZUyA9IDEKK2NvbnN0IF9OTE1fRl9NQVRDSCA9IDB4MjAwCitjb25zdCBf
QVJQSFJEX0FYMjUgPSAzCitjb25zdCBfX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcgPSAyMDA4
MDkKK2NvbnN0IF9SVEZfTk9GT1JXQVJEID0gMHgxMDAwCitjb25zdCBfRl9EVVBGRF9DTE9FWEVD
ID0gMTAzMAorY29uc3QgX0VDQU5DRUxFRCA9IDEyNQorY29uc3QgX0lOUl9PUEVOX01BWCA9IDQw
OTYKK2NvbnN0IF9CMzAwID0gMDAwMDAwNworY29uc3QgX0lNQVhCRUwgPSAwMDIwMDAwCitjb25z
dCBfUFJJZExFQVNUMzIgPSAiZCIKK2NvbnN0IF9SVVNBR0VfQ0hJTERSRU4gPSAtMQorY29uc3Qg
X1g4Nl9DUjRfVk1YRV9CSVQgPSAxMworY29uc3QgX0ZfT0ZEX1NFVExLID0gMzcKK2NvbnN0IF9F
Tk9EQVRBID0gNjEKK2NvbnN0IF9TT0xfS0NNID0gMjgxCitjb25zdCBfQUZfUFBQT1ggPSBfUEZf
UFBQT1gKK2NvbnN0IF9IQVZFX1NZU19UWVBFU19IID0gMQorY29uc3QgX1NJT0NHSUZBRERSID0g
MHg4OTE1Citjb25zdCBfTkRBX0RTVCA9IDEKK2NvbnN0IF9fX0dMSUJDX1VTRV9ERVBSRUNBVEVE
X0dFVFMgPSAwCitjb25zdCBfVElPQ01fTEUgPSAweDAwMQorY29uc3QgX1NDTm9GQVNUOCA9ICJo
aG8iCitjb25zdCBfQVJQSFJEX1NLSVAgPSA3NzEKK2NvbnN0IF9fX0RFQzMyX1NVQk5PUk1BTF9N
SU5fXyA9IDAuMDAwMDAxRS05NQorY29uc3QgX19fcGllX18gPSAyCitjb25zdCBfTVNfU0xBVkUg
PSA1MjQyODgKK2NvbnN0IF9STElNSVRfREFUQSA9IDIKK2NvbnN0IF9fX0xJVFRMRV9FTkRJQU4g
PSAxMjM0Citjb25zdCBfX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMgPSAyMDA4MDkKK2NvbnN0IF9T
WVNfbXNnZ2V0ID0gX19fTlJfbXNnZ2V0Citjb25zdCBfSEFWRV9BVEFOMkwgPSAxCitjb25zdCBf
SUZMQV9WUkZfUE9SVF9UQUJMRSA9IDEKK2NvbnN0IF9ORVRMSU5LX0xJU1RfTUVNQkVSU0hJUFMg
PSA5Citjb25zdCBfX0ZDTlRMX0ggPSAxCitjb25zdCBfX19OUl91dGltZXMgPSAyMzUKK2NvbnN0
IF9SVE1fR0VUUk9VVEUgPSAyNgorY29uc3QgX1VJTlQ4X01BWCA9ICgyNTUpCitjb25zdCBfQVJQ
T1BfUlJFUVVFU1QgPSAzCitjb25zdCBfX19STElNX05MSU1JVFMgPSAxNgorY29uc3QgX0lQVkxB
Tl9GX1ZFUEEgPSAweDAyCitjb25zdCBfSUZMQV9NQUNWTEFOX01BQ0FERFJfREFUQSA9IDUKK2Nv
bnN0IF9fUE9TSVhfUFJJT1JJVElaRURfSU8gPSAyMDA4MDkKK2NvbnN0IF9OT19EQVRBID0gNAor
Y29uc3QgX1JUUFJPVF9JU0lTID0gMTg3Citjb25zdCBfSEFWRV9BU19YODZfNjRfVU5XSU5EX1NF
Q1RJT05fVFlQRSA9IDEKK2NvbnN0IF9JUFY2XzIyOTJSVEhEUiA9IDUKK2NvbnN0IF9TWVNfbWxv
Y2sgPSBfX19OUl9tbG9jaworY29uc3QgX19GRUFUVVJFU19IID0gMQorY29uc3QgX1NZU19rZXhl
Y19sb2FkID0gX19fTlJfa2V4ZWNfbG9hZAorY29uc3QgX0VQUk9UT1RZUEUgPSA5MQorY29uc3Qg
X05aRVJPID0gMjAKK2NvbnN0IF9TSU9DU0lGTkVUTUFTSyA9IDB4ODkxYworY29uc3QgX19fSUZM
QV9YRlJNX01BWCA9IDMKK2NvbnN0IF9JRkxBX01BQ1NFQ19FTkNSWVBUID0gNworY29uc3QgX19f
TlJfcGVyc29uYWxpdHkgPSAxMzUKK2NvbnN0IF9TWVNfZ2V0X21lbXBvbGljeSA9IF9fX05SX2dl
dF9tZW1wb2xpY3kKK2NvbnN0IF9FSUxTRVEgPSA4NAorY29uc3QgX1NZU19zZXRyZWdpZCA9IF9f
X05SX3NldHJlZ2lkCitjb25zdCBfU09DS19TVFJFQU0gPSAxCitjb25zdCBfUFJfR0VUX1NFQ0NP
TVAgPSAyMQorY29uc3QgX0lGTEFfTUFDU0VDX1NDSSA9IDEKK2NvbnN0IF9FVEhfSExFTiA9IDE0
Citjb25zdCBfU0NNX0NSRURFTlRJQUxTID0gMgorY29uc3QgX19fVVNFX0xBUkdFRklMRTY0ID0g
MQorY29uc3QgX1JUTV9HRVRSVUxFID0gMzQKK2NvbnN0IF9fTkVUSU5FVF9JTl9IID0gMQorY29u
c3QgX19TQ19MRVZFTDFfRENBQ0hFX0xJTkVTSVpFID0gMTkwCitjb25zdCBfRURRVU9UID0gMTIy
Citjb25zdCBfSUZMQV9WWExBTl9UT1MgPSA2Citjb25zdCBfX19TX0lSRUFEID0gMDQwMAorY29u
c3QgX0ZfR0VURkQgPSAxCitjb25zdCBfQVJQSFJEX0REQ01QID0gNTE3Citjb25zdCBfX19OUl91
c2VyZmF1bHRmZCA9IDMyMworY29uc3QgX0ZfR0VURkwgPSAzCitjb25zdCBfX190aW1ldmFsX2Rl
ZmluZWQgPSAxCitjb25zdCBfSVBPUFRfQ09QWSA9IDB4ODAKK2NvbnN0IF9JUFY2X0NIRUNLU1VN
ID0gNworY29uc3QgX1NUQVRYX0FUVFJfQVBQRU5EID0gMHgwMDIwCitjb25zdCBfRVRIX1BfUFBQ
X1NFUyA9IDB4ODg2NAorY29uc3QgX19TQ19MRVZFTDFfRENBQ0hFX1NJWkUgPSAxODgKK2NvbnN0
IF9UVU5HRVRTTkRCVUZfdmFsID0gMjE0Nzc2NzUwNworY29uc3QgX0ZTX1hGTEFHX1BSRUFMTE9D
ID0gMHgwMDAwMDAwMgorY29uc3QgX1BSX0dFVF9TUEVDVUxBVElPTl9DVFJMID0gNTIKK2NvbnN0
IF9DQkFVREVYID0gMDAxMDAwMAorY29uc3QgX1NLRl9BRF9QS1RUWVBFID0gNAorY29uc3QgX0xJ
TlVYX1JFQk9PVF9NQUdJQzEgPSAweGZlZTFkZWFkCitjb25zdCBfTElOVVhfUkVCT09UX01BR0lD
MiA9IDY3MjI3NDc5MworY29uc3QgX1BGX0JSSURHRSA9IDcKK2NvbnN0IF9NU19JX1ZFUlNJT04g
PSA4Mzg4NjA4Citjb25zdCBfTUFEVl9SQU5ET00gPSAxCitjb25zdCBfX1VUU05BTUVfTk9ERU5B
TUVfTEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSAorY29uc3QgX1NDTm9MRUFTVDggPSAiaGhvIgor
Y29uc3QgX1g4Nl9DUjNfUENJRF9CSVRTID0gMTIKK2NvbnN0IF9BRl9TTUMgPSBfUEZfU01DCitj
b25zdCBfQVJQSFJEX0lFRUU4MDIgPSA2Citjb25zdCBfQURKX09GRlNFVCA9IDB4MDAwMQorY29u
c3QgX0VMT09QID0gNDAKK2NvbnN0IF9fX0lGTEFfR1RQX01BWCA9IDUKK2NvbnN0IF9SVFBST1Rf
QkdQID0gMTg2Citjb25zdCBfTElUVExFX0VORElBTiA9IF9fX0xJVFRMRV9FTkRJQU4KK2NvbnN0
IF9fX0JZVEVfT1JERVIgPSBfX19MSVRUTEVfRU5ESUFOCitjb25zdCBfVENQSV9PUFRfVElNRVNU
QU1QUyA9IDEKK2NvbnN0IF9fX1RDQV9NQVggPSAxNQorY29uc3QgX1JUQV9NRVRSSUNTID0gOAor
Y29uc3QgX1NPTF9QUFBPTDJUUCA9IDI3MworY29uc3QgX19TQ19JT1ZfTUFYID0gNjAKK2NvbnN0
IF9fTEZTNjRfTEFSR0VGSUxFID0gMQorY29uc3QgX01BWF9WTEFOX0xJU1RfTEVOID0gMQorY29u
c3QgX1NZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSID0gNAorY29uc3QgX19QT1NJWF9NUV9QUklP
X01BWCA9IDMyCitjb25zdCBfX1BPU0lYX1ZFUlNJT04gPSAyMDA4MDkKK2NvbnN0IF9fX05SX3Bw
b2xsID0gMjcxCitjb25zdCBfRl9PV05FUl9QSUQgPSAxCitjb25zdCBfVElPQ1BLVF9JT0NUTCA9
IDY0Citjb25zdCBfX19VU0VfUE9TSVgxOTkzMDkgPSAxCitjb25zdCBfX19JTlRfRkFTVDhfTUFY
X18gPSAweDdmCitjb25zdCBfX1NDX0JDX1NDQUxFX01BWCA9IDM4Citjb25zdCBfU1lTX2Nocm9v
dCA9IF9fX05SX2Nocm9vdAorY29uc3QgX0VQUk9UT05PU1VQUE9SVCA9IDkzCitjb25zdCBfU1RB
VFhfR0lEID0gMHgwMDEwCitjb25zdCBfSUZMQV9CUl9HUk9VUF9GV0RfTUFTSyA9IDkKK2NvbnN0
IF9JUFBPUlRfUkVTRVJWRUQgPSAxMDI0Citjb25zdCBfSU5fT05MWURJUiA9IDB4MDEwMDAwMDAK
K2NvbnN0IF9TVEFfRkxMID0gMHgwMDA4Citjb25zdCBfSUZMQV9NQUNTRUNfRVMgPSAxMAorY29u
c3QgX19fV0lOVF9XSURUSF9fID0gMzIKK2NvbnN0IF9fUE9TSVhfUElQRV9CVUYgPSA1MTIKK2Nv
bnN0IF9JUE9QVF9TRUNVUl9TRUNSRVQgPSAweGQ3ODgKK2NvbnN0IF9fX1BJQ19fID0gMgorY29u
c3QgX0lTVFJJUCA9IDAwMDAwNDAKK2NvbnN0IF9fX1JUTV9NQVggPSAxMDMKK2NvbnN0IF9JUE9Q
VF9TRUNVUl9DT05GSUQgPSAweGYxMzUKK2NvbnN0IF9FU1BJUEUgPSAyOQorY29uc3QgX0FGX1NO
QSA9IF9QRl9TTkEKK2NvbnN0IF9SVEFfUFJPVE9JTkZPID0gMTAKK2NvbnN0IF9fX05SX2JwZiA9
IDMyMQorY29uc3QgX1NZU19hZnNfc3lzY2FsbCA9IF9fX05SX2Fmc19zeXNjYWxsCitjb25zdCBf
VUlOVF9GQVNUOF9NQVggPSAoMjU1KQorY29uc3QgX1NUQV9OQU5PID0gMHgyMDAwCitjb25zdCBf
VVNIUlRfV0lEVEggPSAxNgorY29uc3QgX09fTEFSR0VGSUxFID0gX19fT19MQVJHRUZJTEUKK2Nv
bnN0IF9fX05SX3NjaGVkX3NldGFmZmluaXR5ID0gMjAzCitjb25zdCBfU09MX0xMQyA9IDI2OAor
Y29uc3QgX19fSUZMQV9WWExBTl9NQVggPSAyOQorY29uc3QgX0VJU0NPTk4gPSAxMDYKK2NvbnN0
IF9USU9DUEtUX1NUQVJUID0gOAorY29uc3QgX0lGTEFfR1NPX01BWF9TRUdTID0gNDAKK2NvbnN0
IF9TT19MSU5HRVIgPSAxMworY29uc3QgX19fVUlOVF9MRUFTVDE2X01BWF9fID0gMHhmZmZmCitj
b25zdCBfT0xDVUMgPSAwMDAwMDAyCitjb25zdCBfUFJfR0VUX1RJTUVSU0xBQ0sgPSAzMAorY29u
c3QgX19fTlJfbHN0YXQgPSA2Citjb25zdCBfX1BPU0lYX1NZTUxPT1BfTUFYID0gOAorY29uc3Qg
X1JUTkxHUlBfTk9USUZZID0gMgorY29uc3QgX19fREJMX0RJR19fID0gMTUKK2NvbnN0IF9fQ1Nf
WEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUyA9IDExMTEKK2NvbnN0IF9SVE5fVU5SRUFDSEFCTEUg
PSA3Citjb25zdCBfX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUyA9IDExMjUKK2NvbnN0
IF9fX0RFQzY0X01BWF9fID0gOS45OTk5OTk5OTk5OTk5OTlFMzg0Citjb25zdCBfSUZMQV9IU1Jf
U0xBVkUxID0gMQorY29uc3QgX19QT1NJWF9USFJFQURfQVRUUl9TVEFDS1NJWkUgPSAyMDA4MDkK
K2NvbnN0IF9IQVZFX05FVElORVRfSVBfSCA9IDEKK2NvbnN0IF9JRkhXQUREUkxFTiA9IDYKK2Nv
bnN0IF9UQ1NFVFNGID0gMHg1NDA0Citjb25zdCBfX0JJVFNfU0lHRVZFTlRfQ09OU1RTX0ggPSAx
Citjb25zdCBfWERQX0FUVEFDSEVEX01VTFRJID0gNAorY29uc3QgX05MTVNHRVJSX0FUVFJfVU5V
U0VEID0gMAorY29uc3QgX01GRF9IVUdFVExCID0gNAorY29uc3QgX19fV0NIQVJfTUFYID0gX19f
V0NIQVJfTUFYX18KK2NvbnN0IF9fU0NfU1NJWkVfTUFYID0gMTEwCitjb25zdCBfSVBfVU5JQ0FT
VF9JRiA9IDUwCitjb25zdCBfU09fUkNWQlVGRk9SQ0UgPSAzMworY29uc3QgX1NZU19uZnNzZXJ2
Y3RsID0gX19fTlJfbmZzc2VydmN0bAorY29uc3QgX0JVU19BRFJBTE4gPSAxCitjb25zdCBfSVBW
Nl9QS1RJTkZPID0gNTAKK2NvbnN0IF9TWVNfbHJlbW92ZXhhdHRyID0gX19fTlJfbHJlbW92ZXhh
dHRyCitjb25zdCBfVENTRVRTVyA9IDB4NTQwMworY29uc3QgX0VBSV9TT0NLVFlQRSA9IC03Citj
b25zdCBfX1NDX1Y3X0lMUDMyX09GRjMyID0gMjM3Citjb25zdCBfU1lTX2lvX2NhbmNlbCA9IF9f
X05SX2lvX2NhbmNlbAorY29uc3QgX0lQUFJPVE9fSVBJUCA9IDQKK2NvbnN0IF9saW51eCA9IDEK
K2NvbnN0IF9XTk9XQUlUID0gMHgwMTAwMDAwMAorY29uc3QgX19fTE9DS19BVE9NSUMgPSAxNgor
Y29uc3QgX0lQVjZfUkVDVlJUSERSID0gNTYKK2NvbnN0IF9UQ1BfQ0FfT3BlbiA9IDAKK2NvbnN0
IF9fU0NfTEVWRUwzX0NBQ0hFX0xJTkVTSVpFID0gMTk2Citjb25zdCBfTElOVVhfUkVCT09UX0NN
RF9IQUxUID0gMHhDREVGMDEyMworY29uc3QgX0lDTVA2X0ZJTFRFUiA9IDEKK2NvbnN0IF9IQVZF
X05FVF9ST1VURV9IID0gMQorY29uc3QgX1NPX0JVU1lfUE9MTCA9IDQ2Citjb25zdCBfRU5GSUxF
ID0gMjMKK2NvbnN0IF9fU0NfVEhSRUFEUyA9IDY3Citjb25zdCBfX0lPQ19TSVpFTUFTSyA9ICgo
MSA8PCBfX0lPQ19TSVpFQklUUyktMSkKK2NvbnN0IF9JUF9JUFNFQ19QT0xJQ1kgPSAxNgorY29u
c3QgX1JUTVNHX0NPTlRST0wgPSAweDQwCitjb25zdCBfU09fTUFSSyA9IDM2Citjb25zdCBfTUFQ
X1BSSVZBVEUgPSAweDAyCitjb25zdCBfX1BDX1JFQ19YRkVSX0FMSUdOID0gMTcKK2NvbnN0IF9f
QklUU19UWVBFU0laRVNfSCA9IDEKK2NvbnN0IF9GRklfVFlQRV9MT05HRE9VQkxFID0gNAorY29u
c3QgX19fTlJfYWRkX2tleSA9IDI0OAorY29uc3QgX19fU0lHX0FUT01JQ19NQVhfXyA9IDB4N2Zm
ZmZmZmYKK2NvbnN0IF9QX1BHSUQgPSAyCitjb25zdCBfRUFJX1NFUlZJQ0UgPSAtOAorY29uc3Qg
X1JUQV9GTE9XID0gMTEKK2NvbnN0IF9JTl9DUkVBVEUgPSAweDAwMDAwMTAwCitjb25zdCBfX1BP
U0lYX1RSQUNFX0xPRyA9IC0xCitjb25zdCBfU0NOZExFQVNUMTYgPSAiaGQiCitjb25zdCBfUlRO
X0JST0FEQ0FTVCA9IDMKK2NvbnN0IF9SVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgPSAo
MSA8PCAyKQorY29uc3QgX0lOVDE2X01JTiA9ICgtMzI3NjctMSkKK2NvbnN0IF9JRkxBX1hGUk1f
TElOSyA9IDEKK2NvbnN0IF9OTE1TR0VSUl9BVFRSX01TRyA9IDEKK2NvbnN0IF9BRl9ST1NFID0g
X1BGX1JPU0UKK2NvbnN0IF9TQ05kMTYgPSAiaGQiCitjb25zdCBfX1NDX1BJSV9JTlRFUk5FVF9E
R1JBTSA9IDYyCitjb25zdCBfSEFWRV9NS05PREFUID0gMQorY29uc3QgX0lGTEFfTElOS19ORVRO
U0lEID0gMzcKK2NvbnN0IF9TWVNfc29ja2V0ID0gX19fTlJfc29ja2V0Citjb25zdCBfU0lPQ1JU
TVNHID0gMHg4OTBECitjb25zdCBfX0VSUk5PX0ggPSAxCitjb25zdCBfUEZfQVBQTEVUQUxLID0g
NQorY29uc3QgX19fU1NFX18gPSAxCitjb25zdCBfWERQX0FUVEFDSEVEX0hXID0gMworY29uc3Qg
X1RJT0NTRVJHRVRNVUxUSSA9IDB4NTQ1QQorY29uc3QgX1NFR1ZfQk5ERVJSID0gMworY29uc3Qg
X0lGTEFfQk9ORF9TTEFWRV9VTlNQRUMgPSAwCitjb25zdCBfSUZMQV9CT05EX1JFU0VORF9JR01Q
ID0gMTUKK2NvbnN0IF9SVE1fREVMUURJU0MgPSAzNworY29uc3QgX0lGTEFfQk9ORF9QUklNQVJZ
X1JFU0VMRUNUID0gMTIKK2NvbnN0IF9SRU5BTUVfTk9SRVBMQUNFID0gKDEgPDwgMCkKK2NvbnN0
IF9UQ1BfQ0xPU0VfV0FJVCA9IDgKK2NvbnN0IF9fX05SX2JyayA9IDEyCitjb25zdCBfRU5BTUVU
T09MT05HID0gMzYKK2NvbnN0IF9fU0NfVFRZX05BTUVfTUFYID0gNzIKK2NvbnN0IF9CNTAgPSAw
MDAwMDAxCitjb25zdCBfU1lTX2ZnZXR4YXR0ciA9IF9fX05SX2ZnZXR4YXR0cgorY29uc3QgX0lG
TEFfSU5FVDZfRkxBR1MgPSAxCitjb25zdCBfX19OUl9tcV90aW1lZHNlbmQgPSAyNDIKK2NvbnN0
IF9fU1RSSU5HX0ggPSAxCitjb25zdCBfTkRUUEFfUEFEID0gMTgKK2NvbnN0IF9fX05SX3NldF90
aWRfYWRkcmVzcyA9IDIxOAorY29uc3QgX1NURElOX0ZJTEVOTyA9IDAKK2NvbnN0IF9fX05SX3Rp
bWVyZmRfY3JlYXRlID0gMjgzCitjb25zdCBfX19JRkxBX0lQT0lCX01BWCA9IDQKK2NvbnN0IF9f
X3NpZ3NldF90X2RlZmluZWQgPSAxCitjb25zdCBfUFJfRlBfRVhDX1JFUyA9IDB4MDgwMDAwCitj
b25zdCBfU1lTX21lbWZkX2NyZWF0ZSA9IF9fX05SX21lbWZkX2NyZWF0ZQorY29uc3QgX19DU19Q
T1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUyA9IDExMzAKK2NvbnN0IF9JQ01QNl9GSUxURVJfUEFT
UyA9IDIKK2NvbnN0IF9TQV9SRVNUQVJUID0gMHgxMDAwMDAwMAorY29uc3QgX1RJT0NHTENLVFJN
SU9TID0gMHg1NDU2Citjb25zdCBfX1NDX1BSSU9SSVRJWkVEX0lPID0gMTMKK2NvbnN0IF9QVFJB
Q0VfU0VDQ09NUF9HRVRfRklMVEVSID0gMTY5MDgKK2NvbnN0IF9DTE9ORV9ORVdJUEMgPSAweDA4
MDAwMDAwCitjb25zdCBfVVNFX0xJQkZGSSA9IDEKK2NvbnN0IF9TQV9PTkVTSE9UID0gX1NBX1JF
U0VUSEFORAorY29uc3QgX19fTlJfZ2V0cHBpZCA9IDExMAorY29uc3QgX0VOWElPID0gNgorY29u
c3QgX19fTlJfZXBvbGxfd2FpdCA9IDIzMgorY29uc3QgX19TQ19YT1BFTl9TSE0gPSA5NAorY29u
c3QgX0lGTEFfVkZfVkxBTl9MSVNUID0gMTIKK2NvbnN0IF9DSEFSX01BWCA9IF9TQ0hBUl9NQVgK
K2NvbnN0IF9JRkxBX05FVF9OU19GRCA9IDI4Citjb25zdCBfX19QUkFHTUFfUkVERUZJTkVfRVhU
TkFNRSA9IDEKK2NvbnN0IF9fU0NfUlRTSUdfTUFYID0gMzEKK2NvbnN0IF9TSUdXSU5DSCA9IDI4
Citjb25zdCBfTUFEVl9GUkVFID0gOAorY29uc3QgX0lGTEFfUEhZU19TV0lUQ0hfSUQgPSAzNgor
Y29uc3QgX1NZU19zeW1saW5rYXQgPSBfX19OUl9zeW1saW5rYXQKK2NvbnN0IF9JRkFfRl9URU5U
QVRJVkUgPSAweDQwCitjb25zdCBfSVBWNl9SRUNWVENMQVNTID0gNjYKK2NvbnN0IF9fX0ZMVDMy
WF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfT1VUX09GX1NZ
TkMgPSA2Citjb25zdCBfUEZfTkVUUk9NID0gNgorY29uc3QgX1BSX1NFVF9NTV9FTkRfQ09ERSA9
IDIKK2NvbnN0IF9TVEFfUFBTVElNRSA9IDB4MDAwNAorY29uc3QgX0FSUERfTE9PS1VQID0gMHgw
MgorY29uc3QgX0ZfU0VUT1dOX0VYID0gX19fRl9TRVRPV05fRVgKK2NvbnN0IF9CQ19TQ0FMRV9N
QVggPSBfX1BPU0lYMl9CQ19TQ0FMRV9NQVgKK2NvbnN0IF9TSU9DU0lGU0xBVkUgPSAweDg5MzAK
K2NvbnN0IF9FTk9TVFIgPSA2MAorY29uc3QgX0ZTX1NZTkNfRkwgPSAweDAwMDAwMDA4Citjb25z
dCBfX19OUl9zY2hlZF9zZXRwYXJhbSA9IDE0MgorY29uc3QgX19TQ19USFJFQURfVEhSRUFEU19N
QVggPSA3NgorY29uc3QgX0lGTEFfVFVOX1BJID0gNAorY29uc3QgX1NLRl9BRF9WTEFOX1RQSUQg
PSA2MAorY29uc3QgX0lGTEFfSFNSX1NMQVZFMiA9IDIKK2NvbnN0IF9QQUNLRVRfRkFOT1VUID0g
MTgKK2NvbnN0IF9TQV9OT0RFRkVSID0gMHg0MDAwMDAwMAorY29uc3QgX05MTVNHX01JTl9UWVBF
ID0gMHgxMAorY29uc3QgX1RJT0NNX1JJID0gX1RJT0NNX1JORworY29uc3QgX0lQVE9TX0VDTl9F
Q1QwID0gMHgwMgorY29uc3QgX1NZU19mY250bCA9IF9fX05SX2ZjbnRsCitjb25zdCBfU0lPQ1NJ
Rk1FTSA9IDB4ODkyMAorY29uc3QgX0lGTEFfSVBWTEFOX1VOU1BFQyA9IDAKK2NvbnN0IF9TWVNf
Z2V0ZXVpZCA9IF9fX05SX2dldGV1aWQKK2NvbnN0IF9SVE5fTE9DQUwgPSAyCitjb25zdCBfVFVO
U0VUT0ZGTE9BRF92YWwgPSAxMDc0MDI1NjgwCitjb25zdCBfTkxNU0dFUlJfQVRUUl9NQVggPSAz
Citjb25zdCBfSUZMQV9WWExBTl9HUk9VUDYgPSAxNgorY29uc3QgX0VUSF9NSU5fTVRVID0gNjgK
K2NvbnN0IF9TQ05vTEVBU1QxNiA9ICJobyIKK2NvbnN0IF9JRkZfTkFQSSA9IDB4MDAxMAorY29u
c3QgX0ZGSV9UWVBFX1VJTlQ2NCA9IDExCitjb25zdCBfUEZfQ0FJRiA9IDM3Citjb25zdCBfQ0xP
TkVfU0VUVExTID0gMHgwMDA4MDAwMAorY29uc3QgX19fREVDNjRfU1VCTk9STUFMX01JTl9fID0g
MC4wMDAwMDAwMDAwMDAwMDFFLTM4MworY29uc3QgX19fT19OT0ZPTExPVyA9IDA0MDAwMDAKK2Nv
bnN0IF9fQklUU19TSUdOVU1fSCA9IDEKK2NvbnN0IF9ORVRMSU5LX0RST1BfTUVNQkVSU0hJUCA9
IDIKK2NvbnN0IF9fX05SX2lub3RpZnlfaW5pdCA9IDI1MworY29uc3QgX1NUQVRYX0FUVFJfTk9E
VU1QID0gMHgwMDQwCitjb25zdCBfX19OUl91dGltZW5zYXQgPSAyODAKK2NvbnN0IF9fX05SX3Rp
bWVyZmRfc2V0dGltZSA9IDI4NgorY29uc3QgX0lGTEFfSU5FVF9VTlNQRUMgPSAwCitjb25zdCBf
QUZfTkVUQkVVSSA9IF9QRl9ORVRCRVVJCitjb25zdCBfUlRfVEFCTEVfTUFJTiA9IDI1NAorY29u
c3QgX1NLRl9BRF9PRkYgPSAoLTB4MTAwMCkKK2NvbnN0IF9fX0RFQzMyX01BTlRfRElHX18gPSA3
Citjb25zdCBfQk1BUF9JT0NUTCA9IDEKK2NvbnN0IF9SVE1fTkVXVEZJTFRFUiA9IDQ0Citjb25z
dCBfU0FfTk9NQVNLID0gX1NBX05PREVGRVIKK2NvbnN0IF9NQVBfRVhFQ1VUQUJMRSA9IDB4MDEw
MDAKK2NvbnN0IF9TVEFfVU5TWU5DID0gMHgwMDQwCitjb25zdCBfRU5PVERJUiA9IDIwCitjb25z
dCBfRUlOVkFMID0gMjIKK2NvbnN0IF9UVU5HRVRGSUxURVJfdmFsID0gMjE0ODU1Mzk0NworY29u
c3QgX19fTlJfc2NoZWRfZ2V0YXR0ciA9IDMxNQorY29uc3QgX1RVTlNFVERFQlVHX3ZhbCA9IDEw
NzQwMjU2NzMKK2NvbnN0IF9TQ054MTYgPSAiaHgiCitjb25zdCBfSVBfRlJFRUJJTkQgPSAxNQor
Y29uc3QgX0lOX0NMQVNTQV9NQVggPSAxMjgKK2NvbnN0IF9CNzUgPSAwMDAwMDAyCitjb25zdCBf
RVBPTExfQ0xPRVhFQyA9IDUyNDI4OAorY29uc3QgX05FVExJTktfR0VORVJJQyA9IDE2Citjb25z
dCBfUFRSQUNFX1BFRUtVU1IgPSAzCitjb25zdCBfUEFDS0VUX09USEVSSE9TVCA9IDMKK2NvbnN0
IF9fX0ZMVDY0X0RJR19fID0gMTUKK2NvbnN0IF9BUlBIUkRfSUVFRTgwMl9UUiA9IDgwMAorY29u
c3QgX0lGTEFfQlJQT1JUX0xFQVJOSU5HID0gOAorY29uc3QgX1RDSU9GRiA9IDIKK2NvbnN0IF9S
VF9UQUJMRV9VTlNQRUMgPSAwCitjb25zdCBfTkRUUEFfREVMQVlfUFJPQkVfVElNRSA9IDcKK2Nv
bnN0IF9fU0NfQVNZTkNIUk9OT1VTX0lPID0gMTIKK2NvbnN0IF9ORF9ST1VURVJfQURWRVJUID0g
MTM0Citjb25zdCBfUEFDS0VUX0RST1BfTUVNQkVSU0hJUCA9IDIKK2NvbnN0IF9JTl9DTE9TRV9X
UklURSA9IDB4MDAwMDAwMDgKK2NvbnN0IF9ORVRMSU5LX0NPTk5FQ1RPUiA9IDExCitjb25zdCBf
VElPQ01fU1IgPSAweDAxMAorY29uc3QgX0ZfR0VUTEsgPSBfRl9HRVRMSzY0Citjb25zdCBfVElP
Q01fU1QgPSAweDAwOAorY29uc3QgX0VLRVlFWFBJUkVEID0gMTI3Citjb25zdCBfU0lPQ0FUTUFS
SyA9IDB4ODkwNQorY29uc3QgX19TQ19MRVZFTDJfQ0FDSEVfU0laRSA9IDE5MQorY29uc3QgX1VJ
TlRfTEVBU1Q4X1dJRFRIID0gOAorY29uc3QgX1NJT0NHSUZCUkRBRERSID0gMHg4OTE5Citjb25z
dCBfUlRNX0dFVEFDVElPTiA9IDUwCitjb25zdCBfU09MX0FUTSA9IDI2NAorY29uc3QgX19TQ19U
Wk5BTUVfTUFYID0gNgorY29uc3QgX0ZfU0VUTEtXID0gX0ZfU0VUTEtXNjQKK2NvbnN0IF9fX1dD
SEFSX01JTl9fID0gKC1fX19XQ0hBUl9NQVhfXyAtIDEpCitjb25zdCBfX1NDX1hCUzVfTFBCSUdf
T0ZGQklHID0gMTI4Citjb25zdCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0JBRFNUQVRFID0gMjU5
Citjb25zdCBfU0VFS19IT0xFID0gNAorY29uc3QgX0lQUE9SVF9TTVRQID0gMjUKK2NvbnN0IF9U
SU9DQ09OUyA9IDB4NTQxRAorY29uc3QgX0lGX05BTUVTSVpFID0gMTYKK2NvbnN0IF9FQkFERSA9
IDUyCitjb25zdCBfRUJBREYgPSA5Citjb25zdCBfX19OUl9jbG9ja19hZGp0aW1lID0gMzA1Citj
b25zdCBfU1lTX2ZzdGF0ZnMgPSBfX19OUl9mc3RhdGZzCitjb25zdCBfRUNIT0tFID0gMDAwNDAw
MAorY29uc3QgX0hBVkVfU1lTX1VUU05BTUVfSCA9IDEKK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9O
T05FID0gMQorY29uc3QgX0IzNTAwMDAwID0gMDAxMDAxNgorY29uc3QgX19fTlJfc2VuZGZpbGUg
PSA0MAorY29uc3QgX19fTlJfZmNob3duYXQgPSAyNjAKK2NvbnN0IF9FQkFEUiA9IDUzCitjb25z
dCBfUkVHX1JTUCA9IDE1Citjb25zdCBfU0lHQ0hMRCA9IDE3Citjb25zdCBfX19OUl9mb3JrID0g
NTcKK2NvbnN0IF9BRl9GSUxFID0gX1BGX0ZJTEUKK2NvbnN0IF9DTE9DS19SRUFMVElNRV9BTEFS
TSA9IDgKK2NvbnN0IF9fU0NfVEhSRUFEX1NUQUNLX01JTiA9IDc1Citjb25zdCBfSUZMQV9WWExB
Tl9QT1JUID0gMTUKK2NvbnN0IF9JRkxBX01BQ1NFQ19WQUxJREFUSU9OID0gMTMKK2NvbnN0IF9J
RkxBX0JPTkRfQVJQX0FMTF9UQVJHRVRTID0gMTAKK2NvbnN0IF9fWE9QRU5fVU5JWCA9IDEKK2Nv
bnN0IF9FSE9TVFVOUkVBQ0ggPSAxMTMKK2NvbnN0IF9STElNX1NBVkVEX01BWCA9IF9STElNX0lO
RklOSVRZCitjb25zdCBfU19CTEtTSVpFID0gNTEyCitjb25zdCBfX191bml4ID0gMQorY29uc3Qg
X19fTlJfZmNobW9kID0gOTEKK2NvbnN0IF9TQ05vTEVBU1QzMiA9ICJvIgorY29uc3QgX0VMM1JT
VCA9IDQ3Citjb25zdCBfRkZJX0ZBU1RDQUxMID0gNAorY29uc3QgX0lGTEFfVkZfU1RBVFNfVFhf
QllURVMgPSAzCitjb25zdCBfVENTRVRYRiA9IDB4NTQzNAorY29uc3QgX0lGTEFfUEhZU19QT1JU
X05BTUUgPSAzOAorY29uc3QgX0lOVF9GQVNUOF9XSURUSCA9IDgKK2NvbnN0IF9DUlRTQ1RTID0g
MDIwMDAwMDAwMDAwCitjb25zdCBfX19JRkxBX01BQ1NFQ19NQVggPSAxNQorY29uc3QgX0lGTEFf
TkVUX05TX1BJRCA9IDE5Citjb25zdCBfU0lPQ1NJRkhXQUREUiA9IDB4ODkyNAorY29uc3QgX19f
U0lfQVNZTkNJT19BRlRFUl9TSUdJTyA9IDEKK2NvbnN0IF9USU9DVkhBTkdVUCA9IDB4NTQzNwor
Y29uc3QgX0FURl9ORVRNQVNLID0gMHgyMAorY29uc3QgX1RDU0VUWFcgPSAweDU0MzUKK2NvbnN0
IF9TT0xfTkZDID0gMjgwCitjb25zdCBfX19TSVpFT0ZfSU5UMTI4X18gPSAxNgorY29uc3QgX19f
U1REQ19VVEZfMTZfXyA9IDEKK2NvbnN0IF9USU9DUEtUX0RPU1RPUCA9IDMyCitjb25zdCBfRFRf
TE5LID0gMTAKK2NvbnN0IF9fX0ZMVDMyX01JTl8xMF9FWFBfXyA9ICgtMzcpCitjb25zdCBfRU5P
TENLID0gMzcKK2NvbnN0IF9TWVNfc2NoZWRfcnJfZ2V0X2ludGVydmFsID0gX19fTlJfc2NoZWRf
cnJfZ2V0X2ludGVydmFsCitjb25zdCBfQUZfUlhSUEMgPSBfUEZfUlhSUEMKK2NvbnN0IF9QUl9H
RVRfVU5BTElHTiA9IDUKK2NvbnN0IF9JTl9DTEFTU0JfSE9TVCA9ICgweGZmZmZmZmZmICYgXl9J
Tl9DTEFTU0JfTkVUKQorY29uc3QgX1RDQV9GTEFHX0xBUkdFX0RVTVBfT04gPSAoMSA8PCAwKQor
Y29uc3QgX19fTlJfbWtkaXIgPSA4MworY29uc3QgX19TQ19USFJFQURfU0FGRV9GVU5DVElPTlMg
PSA2OAorY29uc3QgX05EVFBBX01DQVNUX1JFUFJPQkVTID0gMTcKK2NvbnN0IF9JUFY2X1JYRFNU
T1BUUyA9IF9JUFY2X0RTVE9QVFMKK2NvbnN0IF9fX05SX2ZhY2Nlc3NhdCA9IDI2OQorY29uc3Qg
X0VUSF9QX01WUlAgPSAweDg4RjUKK2NvbnN0IF9fU0NfWE9QRU5fTEVHQUNZID0gMTI5Citjb25z
dCBfUEFHRV9TSVpFID0gKDEgPDwgX1BBR0VfU0hJRlQpCitjb25zdCBfUlRGX05PTkVYVEhPUCA9
IDB4MDAyMDAwMDAKK2NvbnN0IF9fQklUU19XQ0hBUl9IID0gMQorY29uc3QgX1BSX1NFVF9QREVB
VEhTSUcgPSAxCitjb25zdCBfU1lTX2lvcGVybSA9IF9fX05SX2lvcGVybQorY29uc3QgX19DU19Q
T1NJWF9WN19JTFAzMl9PRkYzMl9MSUJTID0gMTEzNAorY29uc3QgX0lGTEFfVkZfVkxBTl9JTkZP
X1VOU1BFQyA9IDAKK2NvbnN0IF9NU19OT0VYRUMgPSA4Citjb25zdCBfVlRJTUUgPSA1Citjb25z
dCBfX19JTlRfRkFTVDY0X1dJRFRIX18gPSA2NAorY29uc3QgX0lQUE9SVF9ORVRTVEFUID0gMTUK
K2NvbnN0IF9TQ05vMTYgPSAiaG8iCitjb25zdCBfTl9IRExDID0gMTMKK2NvbnN0IF9QT1JUX1ZE
UF9SRVNQT05TRV9WVElEX1ZJT0xBVElPTiA9IDQKK2NvbnN0IF9fU0NfVEhSRUFEX0FUVFJfU1RB
Q0tBRERSID0gNzcKK2NvbnN0IF9FVEhfUF9JUFggPSAweDgxMzcKK2NvbnN0IF9QUkl1TEVBU1Qz
MiA9ICJ1IgorY29uc3QgX0lGTEFfTUFDVkxBTl9NQUNBRERSX01PREUgPSAzCitjb25zdCBfRlNf
RkxfVVNFUl9NT0RJRklBQkxFID0gMHgwMDAzODBGRgorY29uc3QgX19fR0NDX0FUT01JQ19URVNU
X0FORF9TRVRfVFJVRVZBTCA9IDEKK2NvbnN0IF9fX05SX3JlbmFtZWF0ID0gMjY0Citjb25zdCBf
TVNHX0RPTlRST1VURSA9IDQKK2NvbnN0IF9USU9DU0lHX3ZhbCA9IDEwNzQwMjU1MjYKK2NvbnN0
IF9fUEFUSF9OU1NXSVRDSF9DT05GID0gIi9ldGMvbnNzd2l0Y2guY29uZiIKK2NvbnN0IF9TWVNf
YWNjZXB0ID0gX19fTlJfYWNjZXB0Citjb25zdCBfUEFDS0VUX1JFU0VSVkUgPSAxMgorY29uc3Qg
X1NUQV9QUFNKSVRURVIgPSAweDAyMDAKK2NvbnN0IF9fX05SX3NpZ25hbGZkID0gMjgyCitjb25z
dCBfU09fUEVFUlNFQyA9IDMxCitjb25zdCBfX19JTlRfV0lEVEhfXyA9IDMyCitjb25zdCBfX1hP
UEVOX0lPVl9NQVggPSBfX1BPU0lYX1VJT19NQVhJT1YKK2NvbnN0IF9OVEZfVVNFID0gMHgwMQor
Y29uc3QgX19fQklHX0VORElBTiA9IDQzMjEKK2NvbnN0IF9VSU5UMTZfV0lEVEggPSAxNgorY29u
c3QgX1NFR1ZfQUNDRVJSID0gMgorY29uc3QgX1NDTm8zMiA9ICJvIgorY29uc3QgX19fTlJfcmVj
dmZyb20gPSA0NQorY29uc3QgX1RDUF9DT09LSUVfSU5fQUxXQVlTID0gKDEgPDwgMCkKK2NvbnN0
IF9TS0ZfQURfUEFZX09GRlNFVCA9IDUyCitjb25zdCBfU1lTX3JlYWR2ID0gX19fTlJfcmVhZHYK
K2NvbnN0IF9QRl9SRFMgPSAyMQorY29uc3QgX0lQVjZfRFNUT1BUUyA9IDU5Citjb25zdCBfX1NZ
U19QVFJBQ0VfSCA9IDEKK2NvbnN0IF9SVE1fRl9OT1RJRlkgPSAweDEwMAorY29uc3QgX1RDUE9Q
VF9TQUNLID0gNQorY29uc3QgX1RDUF9NRDVTSUdfRVhUID0gMzIKK2NvbnN0IF9JRkZfQlJPQURD
QVNUID0gMgorY29uc3QgX0lQT1BUX1NBVElEID0gMTM2Citjb25zdCBfVElPQ01CSUMgPSAweDU0
MTcKK2NvbnN0IF9GU19JTkRFWF9GTCA9IDB4MDAwMDEwMDAKK2NvbnN0IF9TWVNfdW5hbWUgPSBf
X19OUl91bmFtZQorY29uc3QgX01PRF9USU1FQ09OU1QgPSBfQURKX1RJTUVDT05TVAorY29uc3Qg
X01DQVNUX0lOQ0xVREUgPSAxCitjb25zdCBfSUZGX1RVTl9FWENMID0gMHg4MDAwCitjb25zdCBf
UFJfVEFTS19QRVJGX0VWRU5UU19ESVNBQkxFID0gMzEKK2NvbnN0IF9JUF9NVFVfRElTQ09WRVIg
PSAxMAorY29uc3QgX0lGTEFfVlhMQU5fUE9SVF9SQU5HRSA9IDEwCitjb25zdCBfX19OUl9zY2hl
ZF9zZXRhdHRyID0gMzE0Citjb25zdCBfU1lTX3NldHByaW9yaXR5ID0gX19fTlJfc2V0cHJpb3Jp
dHkKK2NvbnN0IF9FU1RSUElQRSA9IDg2Citjb25zdCBfUlRGX0lSVFQgPSAweDAxMDAKK2NvbnN0
IF9JRkxBX0VWRU5UX05PTkUgPSAwCitjb25zdCBfVENBX09QVElPTlMgPSAyCitjb25zdCBfU0VF
S19EQVRBID0gMworY29uc3QgX0ZfT1dORVJfR0lEID0gMgorY29uc3QgX0VOT0xJTksgPSA2Nwor
Y29uc3QgX01BQ1ZMQU5fTU9ERV9WRVBBID0gMgorY29uc3QgX0lGTEFfQlJfVkxBTl9ERUZBVUxU
X1BWSUQgPSAzOQorY29uc3QgX1ZTV1RDID0gNworY29uc3QgX1NBX0lOVEVSUlVQVCA9IDB4MjAw
MDAwMDAKK2NvbnN0IF9fX0RCTF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBfQVJQT1BfSW5S
RVBMWSA9IDkKK2NvbnN0IF9TWVNfc2VuZG1zZyA9IF9fX05SX3NlbmRtc2cKK2NvbnN0IF9SVE1T
R19ERUxST1VURSA9IDB4MjIKK2NvbnN0IF9USU9DR1NJRCA9IDB4NTQyOQorY29uc3QgX19QT1NJ
WF9MSU5LX01BWCA9IDgKK2NvbnN0IF9OX01PVVNFID0gMgorY29uc3QgX1NZU19yZWFkbGluayA9
IF9fX05SX3JlYWRsaW5rCitjb25zdCBfX19OUl9mY2hkaXIgPSA4MQorY29uc3QgX19fSU5UX0ZB
U1Q2NF9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZgorY29uc3QgX1BUUkFDRV9TRVRSRUdTRVQg
PSAxNjkwMQorY29uc3QgX0lOX05PTkJMT0NLID0gMjA0OAorY29uc3QgX19fTlJfaW5vdGlmeV9p
bml0MSA9IDI5NAorY29uc3QgX0ZGSV9UWVBFX1ZPSUQgPSAwCitjb25zdCBfRkRfQ0xPRVhFQyA9
IDEKK2NvbnN0IF9fX05SX3NldHNvY2tvcHQgPSA1NAorY29uc3QgX0VDSE9OTCA9IDAwMDAxMDAK
K2NvbnN0IF9fX01BWF9CQVVEID0gX0I0MDAwMDAwCitjb25zdCBfRVRIX01BWF9NVFUgPSAweEZG
RkYKK2NvbnN0IF9QQUNLRVRfUURJU0NfQllQQVNTID0gMjAKK2NvbnN0IF9DTE9ORV9ORVdVVFMg
PSAweDA0MDAwMDAwCitjb25zdCBfU1lTX3NlbXRpbWVkb3AgPSBfX19OUl9zZW10aW1lZG9wCitj
b25zdCBfRVRIX1BfUEhPTkVUID0gMHgwMEY1Citjb25zdCBfSUZMQV9PRkZMT0FEX1hTVEFUU19D
UFVfSElUID0gMQorY29uc3QgX19QV0RfSCA9IDEKK2NvbnN0IF9fUE9TSVhfU0hFTEwgPSAxCitj
b25zdCBfRkZJX1NJWkVPRl9KQVZBX1JBVyA9IF9GRklfU0laRU9GX0FSRworY29uc3QgX1BSX1NQ
RUNfRk9SQ0VfRElTQUJMRSA9ICgxIDw8IDMpCitjb25zdCBfTkRBX1NSQ19WTkkgPSAxMQorY29u
c3QgX19fV0NIQVJfTUlOID0gX19fV0NIQVJfTUlOX18KK2NvbnN0IF9ORVREQl9JTlRFUk5BTCA9
IC0xCitjb25zdCBfX19VU0VfTUlTQyA9IDEKK2NvbnN0IF9QUklPX01BWCA9IDIwCitjb25zdCBf
X19zdHJ1Y3RfdG1fZGVmaW5lZCA9IDEKK2NvbnN0IF9FVEhFUlRZUEVfQVJQID0gMHgwODA2Citj
b25zdCBfX1BPU0lYX1RJTUVPVVRTID0gMjAwODA5Citjb25zdCBfSUZMQV9WWExBTl9UVExfSU5I
RVJJVCA9IDI4Citjb25zdCBfU1BMSUNFX0ZfR0lGVCA9IDgKK2NvbnN0IF9fX0JZVEVfT1JERVJf
XyA9IF9fX09SREVSX0xJVFRMRV9FTkRJQU5fXworY29uc3QgX19fUlROTEdSUF9NQVggPSAzMgor
Y29uc3QgX19TQ19TQVZFRF9JRFMgPSA4Citjb25zdCBfTExPTkdfV0lEVEggPSA2NAorY29uc3Qg
X1NZU19zZXRncm91cHMgPSBfX19OUl9zZXRncm91cHMKK2NvbnN0IF9TQ01fVElNRVNUQU1QID0g
X1NPX1RJTUVTVEFNUAorY29uc3QgX1BSSW8zMiA9ICJvIgorY29uc3QgX0FESl9TRVRPRkZTRVQg
PSAweDAxMDAKK2NvbnN0IF9QUklYTEVBU1QxNiA9ICJYIgorY29uc3QgX1RIX0ZJTiA9IDB4MDEK
K2NvbnN0IF9VQ0hBUl9XSURUSCA9IDgKK2NvbnN0IF9SVE1fR0VUQUREUkxBQkVMID0gNzQKK2Nv
bnN0IF9fX1NJR1JUTUFYID0gNjQKK2NvbnN0IF9FUkVTVEFSVCA9IDg1Citjb25zdCBfX1NDX1Y3
X0lMUDMyX09GRkJJRyA9IDIzOAorY29uc3QgX19QQ19BU1lOQ19JTyA9IDEwCitjb25zdCBfX1NU
UklOR1NfSCA9IDEKK2NvbnN0IF9fX3VuaXhfXyA9IDEKK2NvbnN0IF9fX2Vycm9yX3RfZGVmaW5l
ZCA9IDEKK2NvbnN0IF9fU1NfU0laRSA9IDEyOAorY29uc3QgX05HUkVHID0gX19fTkdSRUcKK2Nv
bnN0IF9TVEFfQ0xPQ0tFUlIgPSAweDEwMDAKK2NvbnN0IF9fX0ZMVDY0WF9FUFNJTE9OX18gPSAx
LjEKK2NvbnN0IF9TVEFUWF9NVElNRSA9IDB4MDA0MAorY29uc3QgX0JQRl9SRVQgPSAweDA2Citj
b25zdCBfSEFWRV9TVFJFUlJPUl9SID0gMQorY29uc3QgX1NZU19zZW5kbW1zZyA9IF9fX05SX3Nl
bmRtbXNnCitjb25zdCBfUlRNR1JQX0lQVjRfUlVMRSA9IDB4ODAKK2NvbnN0IF9TWVNfc2NoZWRf
c2V0c2NoZWR1bGVyID0gX19fTlJfc2NoZWRfc2V0c2NoZWR1bGVyCitjb25zdCBfTkRBX0NBQ0hF
SU5GTyA9IDMKK2NvbnN0IF9DTE9ORV9WTSA9IDB4MDAwMDAxMDAKK2NvbnN0IF9GSUxFX0RFRFVQ
RV9SQU5HRV9ESUZGRVJTID0gMQorY29uc3QgX19JT0NfRElSQklUUyA9IDIKK2NvbnN0IF9XVU5U
UkFDRUQgPSAyCitjb25zdCBfUFJfTUNFX0tJTExfU0VUID0gMQorY29uc3QgX1NLRl9BRF9RVUVV
RSA9IDI0Citjb25zdCBfX19OUl9sY2hvd24gPSA5NAorY29uc3QgX1BSX1NFVF9NTV9TVEFSVF9T
VEFDSyA9IDUKK2NvbnN0IF9fX0ZMT0FUX1dPUkRfT1JERVJfXyA9IF9fX09SREVSX0xJVFRMRV9F
TkRJQU5fXworY29uc3QgX1JNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NPTU1BTkRTID0gKDEgPDwg
MSkKK2NvbnN0IF9fUE9TSVhfU0lHUVVFVUVfTUFYID0gMzIKK2NvbnN0IF9fU1lTX0VQT0xMX0gg
PSAxCitjb25zdCBfQ0hBUl9XSURUSCA9IDgKK2NvbnN0IF9fX1NJWkVPRl9TRU1fVCA9IDMyCitj
b25zdCBfWEFUVFJfU0laRV9NQVggPSA2NTUzNgorY29uc3QgX19fTlJfbW9kaWZ5X2xkdCA9IDE1
NAorY29uc3QgX1NZU19lcG9sbF9jdGwgPSBfX19OUl9lcG9sbF9jdGwKK2NvbnN0IF9UQ1BJX09Q
VF9XU0NBTEUgPSA0Citjb25zdCBfX1NDX0xFVkVMMV9JQ0FDSEVfQVNTT0MgPSAxODYKK2NvbnN0
IF9JUFY2X1JUSERSX0xPT1NFID0gMAorY29uc3QgX1NZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4
ID0gX19fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorY29uc3QgX0lQUE9SVF9CSUZGVURQID0g
NTEyCitjb25zdCBfRklPTlJFQUQgPSAweDU0MUIKK2NvbnN0IF9NTERfTElTVEVORVJfUkVEVUNU
SU9OID0gMTMyCitjb25zdCBfQ1g4Nl9DQ1I1ID0gMHhlOQorY29uc3QgX1RJT0NTRVJHV0lMRCA9
IDB4NTQ1NAorY29uc3QgX19fTlJfZXBvbGxfY3RsX29sZCA9IDIxNAorY29uc3QgX0VLRVlSRUpF
Q1RFRCA9IDEyOQorY29uc3QgX1g4Nl9DUjBfQ0RfQklUID0gMzAKK2NvbnN0IF9NQVBfTk9OQkxP
Q0sgPSAweDEwMDAwCitjb25zdCBfU1lTX3N5bmNmcyA9IF9fX05SX3N5bmNmcworY29uc3QgX1RB
QkRMWSA9IDAwMTQwMDAKK2NvbnN0IF9fX0dOVUNfTUlOT1JfXyA9IDMKK2NvbnN0IF9IQVZFX1NF
TUFQSE9SRV9IID0gMQorY29uc3QgX1NJR19VTkJMT0NLID0gMQorY29uc3QgX19fTlJfcHJjdGwg
PSAxNTcKK2NvbnN0IF9fX05SX3Byb2Nlc3Nfdm1fd3JpdGV2ID0gMzExCitjb25zdCBfSUZMQV9C
Ul9NQ0FTVF9TVEFSVFVQX1FVRVJZX0NOVCA9IDI5Citjb25zdCBfSVBQT1JUX0RJU0NBUkQgPSA5
Citjb25zdCBfTkJQRyA9IF9QQUdFX1NJWkUKK2NvbnN0IF9fQ1NfWEJTNV9MUDY0X09GRjY0X0NG
TEFHUyA9IDExMDgKK2NvbnN0IF9TWVNfaW9jdGwgPSBfX19OUl9pb2N0bAorY29uc3QgX1NZU19w
b2xsID0gX19fTlJfcG9sbAorY29uc3QgX1JNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NLU1VNVjQg
PSAoMSA8PCAyKQorY29uc3QgX0lQVjZfMjI5MlBLVE9QVElPTlMgPSA2Citjb25zdCBfVElPQ01f
Q1RTID0gMHgwMjAKK2NvbnN0IF9QVFJESUZGX01BWCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQor
Y29uc3QgX0lGTEFfU1RBVFNfQUZfU1BFQyA9IDUKK2NvbnN0IF9JRkxBX1RVTl9NVUxUSV9RVUVV
RSA9IDcKK2NvbnN0IF9SVEFfUEFEID0gMjQKK2NvbnN0IF9TWVNfaW9wbCA9IF9fX05SX2lvcGwK
K2NvbnN0IF9ORVRfTUFKT1IgPSAzNgorY29uc3QgX1NZU19tc2dzbmQgPSBfX19OUl9tc2dzbmQK
K2NvbnN0IF9fX1NfSUVYRUMgPSAwMTAwCitjb25zdCBfX1NDX0RFTEFZVElNRVJfTUFYID0gMjYK
K2NvbnN0IF9TWVNfZXhpdCA9IF9fX05SX2V4aXQKK2NvbnN0IF9TWVNfcmVzdGFydF9zeXNjYWxs
ID0gX19fTlJfcmVzdGFydF9zeXNjYWxsCitjb25zdCBfUFJJWExFQVNUMzIgPSAiWCIKK2NvbnN0
IF9JRkxBX0hTUl9TVVBFUlZJU0lPTl9BRERSID0gNAorY29uc3QgX1NJR1NZUyA9IDMxCitjb25z
dCBfRlNfWEZMQUdfRklMRVNUUkVBTSA9IDB4MDAwMDQwMDAKK2NvbnN0IF9JUFBST1RPX0lDTVBW
NiA9IDU4Citjb25zdCBfRVVDTEVBTiA9IDExNworY29uc3QgX1BSX1NFVF9GUEVNVSA9IDEwCitj
b25zdCBfRVRIX1BfQVRBTEsgPSAweDgwOUIKK2NvbnN0IF9QRl9JQiA9IDI3Citjb25zdCBfX19V
U0VfUE9TSVgxOTk1MDYgPSAxCitjb25zdCBfU1lTX25hbm9zbGVlcCA9IF9fX05SX25hbm9zbGVl
cAorY29uc3QgX0lQX0RST1BfTUVNQkVSU0hJUCA9IDM2Citjb25zdCBfV0lOVF9NQVggPSAoNDI5
NDk2NzI5NSkKK2NvbnN0IF9JRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1JYID0gMjAKK2NvbnN0
IF9FQ09OTkFCT1JURUQgPSAxMDMKK2NvbnN0IF9QUl9VTkFMSUdOX05PUFJJTlQgPSAxCitjb25z
dCBfRlNfRElSU1lOQ19GTCA9IDB4MDAwMTAwMDAKK2NvbnN0IF9TSU9DREVWUFJJVkFURSA9IDB4
ODlGMAorY29uc3QgX19TQ19USU1FT1VUUyA9IDE2NAorY29uc3QgX19fSU5UX0xFQVNUMzJfTUFY
X18gPSAweDdmZmZmZmZmCitjb25zdCBfSU5fQ0xPU0UgPSAoX0lOX0NMT1NFX1dSSVRFIHwgX0lO
X0NMT1NFX05PV1JJVEUpCitjb25zdCBfUlRNX05FV05TSUQgPSA4OAorY29uc3QgX19fTlJfaW9f
cGdldGV2ZW50cyA9IDMzMworY29uc3QgX1g4Nl9FRkxBR1NfVEZfQklUID0gOAorY29uc3QgX19f
TlJfdW5saW5rID0gODcKK2NvbnN0IF9JUFRPU19QUkVDX0lNTUVESUFURSA9IF9JUFRPU19DTEFT
U19DUzIKK2NvbnN0IF9VSU5UX0xFQVNUMTZfTUFYID0gKDY1NTM1KQorY29uc3QgX19fTlJfZ2V0
ZXVpZCA9IDEwNworY29uc3QgX1NfSVdHUlAgPSAoX1NfSVdVU1IgPj4gMykKK2NvbnN0IF9fX1BJ
RV9fID0gMgorY29uc3QgX1RJT0NQS1RfREFUQSA9IDAKK2NvbnN0IF9fQ1NfVjZfV0lEVEhfUkVT
VFJJQ1RFRF9FTlZTID0gMQorY29uc3QgX0ZGSV9UWVBFX0RPVUJMRSA9IDMKK2NvbnN0IF9SVENG
X0RJUkVDVFNSQyA9IDB4MDQwMDAwMDAKK2NvbnN0IF9fX05SX3N5bmNfZmlsZV9yYW5nZSA9IDI3
NworY29uc3QgX0lGTEFfUE9SVF9WU0lfVFlQRSA9IDMKK2NvbnN0IF9BREpfVEFJID0gMHgwMDgw
Citjb25zdCBfTkRVU0VST1BUX1VOU1BFQyA9IDAKK2NvbnN0IF9fVVRTTkFNRV9ET01BSU5fTEVO
R1RIID0gX19VVFNOQU1FX0xFTkdUSAorY29uc3QgX05SX0ZJTEUgPSA4MTkyCitjb25zdCBfRl9H
RVRfUldfSElOVCA9IDEwMzUKK2NvbnN0IF9QRl9QUFBPWCA9IDI0Citjb25zdCBfU09fUEVFS19P
RkYgPSA0MgorY29uc3QgX1NPX1JDVkJVRiA9IDgKK2NvbnN0IF9fU0NfWEJTNV9JTFAzMl9PRkZC
SUcgPSAxMjYKK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX0NPTkRBVFRSX1QgPSA0Citjb25zdCBf
Tl9IQ0kgPSAxNQorY29uc3QgX1BSSXVMRUFTVDggPSAidSIKK2NvbnN0IF9SVEFYX1NTVEhSRVNI
ID0gNgorY29uc3QgX0lGRl9NVUxUSV9RVUVVRSA9IDB4MDEwMAorY29uc3QgX1JUX0NMQVNTX0xP
Q0FMID0gMjU1Citjb25zdCBfRklPR0VUT1dOID0gMHg4OTAzCitjb25zdCBfX19OUl9zaG1nZXQg
PSAyOQorY29uc3QgX1g4Nl9FRkxBR1NfREZfQklUID0gMTAKK2NvbnN0IF9TT19TRUxFQ1RfRVJS
X1FVRVVFID0gNDUKK2NvbnN0IF9TT0NLX05PTkJMT0NLID0gMjA0OAorY29uc3QgX1VJTlRfTEVB
U1QzMl9NQVggPSAoNDI5NDk2NzI5NSkKK2NvbnN0IF9TSUdYRlNaID0gMjUKK2NvbnN0IF9JRkxB
X1BST1RJTkZPID0gMTIKK2NvbnN0IF9fX05SX211bmxvY2thbGwgPSAxNTIKK2NvbnN0IF9JUF9N
VUxUSUNBU1RfQUxMID0gNDkKK2NvbnN0IF9FQ0hPID0gMDAwMDAxMAorY29uc3QgX0FSUEhSRF9F
RVRIRVIgPSAyCitjb25zdCBfQ0xEX0NPTlRJTlVFRCA9IDYKK2NvbnN0IF9FVEhFUlRZUEVfQVQg
PSAweDgwOUIKK2NvbnN0IF9TQ0hBUl9NQVggPSBfX19TQ0hBUl9NQVhfXworY29uc3QgX0lGTEFf
TUFDU0VDX1NDQiA9IDExCitjb25zdCBfX19VQVBJX0RFRl9FVEhIRFIgPSAxCitjb25zdCBfSUZM
QV9CUl9ORl9DQUxMX0FSUFRBQkxFUyA9IDM4Citjb25zdCBfTkRUUEFfUkVBQ0hBQkxFX1RJTUUg
PSAzCitjb25zdCBfVENQX1JFUEFJUl9XSU5ET1cgPSAyOQorY29uc3QgX19fSUZMQV9UVU5fTUFY
ID0gMTAKK2NvbnN0IF9IQVZFX0FTX0NPTURBVF9HQVMgPSAxCitjb25zdCBfTkVUTElOS19ETlJU
TVNHID0gMTQKK2NvbnN0IF9TWVNfbXJlbWFwID0gX19fTlJfbXJlbWFwCitjb25zdCBfWDg2X0NS
NF9QR0VfQklUID0gNworY29uc3QgX0lGQV9BRERSRVNTID0gMQorY29uc3QgX1NJT0NTSUZEU1RB
RERSID0gMHg4OTE4Citjb25zdCBfVlJFUFJJTlQgPSAxMgorY29uc3QgX0VQT0xMX0NUTF9ERUwg
PSAyCitjb25zdCBfSUZMQV9RRElTQyA9IDYKK2NvbnN0IF9fX0VMRl9fID0gMQorY29uc3QgX0lO
X09QRU4gPSAweDAwMDAwMDIwCitjb25zdCBfRVRIX1BfVFNOID0gMHgyMkYwCitjb25zdCBfRVRI
X1BfQ09OVFJPTCA9IDB4MDAxNgorY29uc3QgX0lGTEFfQk9ORF9BRF9JTkZPX05VTV9QT1JUUyA9
IDIKK2NvbnN0IF9EVF9GSUZPID0gMQorY29uc3QgX1NDTmlGQVNUOCA9ICJoaGkiCitjb25zdCBf
VElPQ1NFVEQgPSAweDU0MjMKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1Mg
PSAxMTAzCitjb25zdCBfSVBPUFRfT0ZGU0VUID0gMgorY29uc3QgX19fTlJfZnN0YXRmcyA9IDEz
OAorY29uc3QgX19fTlJfc2V0X3RocmVhZF9hcmVhID0gMjA1Citjb25zdCBfSUZMQV9CT05EX0FS
UF9JTlRFUlZBTCA9IDcKK2NvbnN0IF9QUl9TRVRfTU1fU1RBUlRfREFUQSA9IDMKK2NvbnN0IF9F
VEhfUF9FUlNQQU4gPSAweDg4QkUKK2NvbnN0IF9TWVNfc3lzaW5mbyA9IF9fX05SX3N5c2luZm8K
K2NvbnN0IF9TWVNfc2V0c2lkID0gX19fTlJfc2V0c2lkCitjb25zdCBfT0ZERUwgPSAwMDAwMjAw
Citjb25zdCBfX1BDX1BSSU9fSU8gPSAxMQorY29uc3QgX19fRkxUX01JTl9fID0gMS4xCitjb25z
dCBfX19OUl9jb3B5X2ZpbGVfcmFuZ2UgPSAzMjYKK2NvbnN0IF9DTE9ORV9ORVdORVQgPSAweDQw
MDAwMDAwCitjb25zdCBfUlRBX09JRiA9IDQKK2NvbnN0IF9TSV9TSUdJTyA9IC01Citjb25zdCBf
X1hPUEVOX1JFQUxUSU1FID0gMQorY29uc3QgX19fTlJfc2VjY29tcCA9IDMxNworY29uc3QgX0lG
TEFfQ0FSUklFUl9VUF9DT1VOVCA9IDQ3Citjb25zdCBfVENQX1VMUCA9IDMxCitjb25zdCBfX1ND
X1RJTUVSUyA9IDExCitjb25zdCBfUFJJdTE2ID0gInUiCitjb25zdCBfTkRfT1BUX1NPVVJDRV9M
SU5LQUREUiA9IDEKK2NvbnN0IF9JRkFfRl9ERVBSRUNBVEVEID0gMHgyMAorY29uc3QgX1JUTkhf
Rl9ERUFEID0gMQorY29uc3QgX0ZGSV9UWVBFX0ZMT0FUID0gMgorY29uc3QgX1ZFUkFTRSA9IDIK
K2NvbnN0IF9SVF9DTEFTU19NQUlOID0gMjU0Citjb25zdCBfRU5PQU5PID0gNTUKK2NvbnN0IF9S
VFBST1RfTVJUID0gMTAKK2NvbnN0IF9fQklUU19USU1FWF9IID0gMQorY29uc3QgX0lGTEFfWERQ
X1NLQl9QUk9HX0lEID0gNgorY29uc3QgX19TQ19OTF9BUkdNQVggPSAxMTkKK2NvbnN0IF9JRkFf
TVVMVElDQVNUID0gNworY29uc3QgX0lQUFJPVE9fQkVFVFBIID0gOTQKK2NvbnN0IF9JUE9QVF9T
RUNVUl9UT1BTRUNSRVQgPSAweDZiYzUKK2NvbnN0IF9fX1NfSVdSSVRFID0gMDIwMAorY29uc3Qg
X0VOT1RDT05OID0gMTA3Citjb25zdCBfUFRSQUNFX1NFVEZQWFJFR1MgPSAxOQorY29uc3QgX19D
U19QT1NJWF9WN19MUEJJR19PRkZCSUdfTERGTEFHUyA9IDExNDUKK2NvbnN0IF9fX1NfSUZNVCA9
IDAxNzAwMDAKK2NvbnN0IF9JUE9JQl9NT0RFX0RBVEFHUkFNID0gMAorY29uc3QgX19fRkxUNjRY
X0RFQ0lNQUxfRElHX18gPSAyMQorY29uc3QgX19TQ19QQUdFU0laRSA9IDMwCitjb25zdCBfQVJQ
SFJEX0NJU0NPID0gNTEzCitjb25zdCBfX19JRkxBX0JSX01BWCA9IDQ1Citjb25zdCBfSVBQUk9U
T19EU1RPUFRTID0gNjAKK2NvbnN0IF9STElNSVRfQ1BVID0gMAorY29uc3QgX01BRFZfRE9OVERV
TVAgPSAxNgorY29uc3QgX19fRkxUMTI4X0hBU19JTkZJTklUWV9fID0gMQorY29uc3QgX19DU19Q
T1NJWF9WNl9MUDY0X09GRjY0X0xJTlRGTEFHUyA9IDExMjcKK2NvbnN0IF9fU0NfTlBST0NFU1NP
UlNfQ09ORiA9IDgzCitjb25zdCBfVENBX1hTVEFUUyA9IDQKK2NvbnN0IF9QQUNLRVRfTVJfQUxM
TVVMVEkgPSAyCitjb25zdCBfX19TU0UyX01BVEhfXyA9IDEKK2NvbnN0IF9PX05PQ1RUWSA9IDA0
MDAKK2NvbnN0IF9DTE9ORV9JTyA9IDB4ODAwMDAwMDAKK2NvbnN0IF9TSU9DU0lGSFdCUk9BRENB
U1QgPSAweDg5MzcKK2NvbnN0IF9fX3NpZ19hdG9taWNfdF9kZWZpbmVkID0gMQorY29uc3QgX0hB
VkVfQUNDRVBUNCA9IDEKK2NvbnN0IF9fQ1NfR05VX0xJQkNfVkVSU0lPTiA9IDIKK2NvbnN0IF9O
TE1fRl9DUkVBVEUgPSAweDQwMAorY29uc3QgX1JUX0NMQVNTX0RFRkFVTFQgPSAyNTMKK2NvbnN0
IF9IQVZFX1VOTElOS0FUID0gMQorY29uc3QgX0VOT1NZUyA9IDM4Citjb25zdCBfUlRNX0dFVE1V
TFRJQ0FTVCA9IDU4Citjb25zdCBfSUZMQV9FVkVOVF9GRUFUVVJFUyA9IDIKK2NvbnN0IF9fX0lG
TEFfSFNSX01BWCA9IDcKK2NvbnN0IF9FUE9MTF9DVExfTU9EID0gMworY29uc3QgX0ZJT05CSU8g
PSAweDU0MjEKK2NvbnN0IF9fU0NfUElJX1hUSSA9IDU0Citjb25zdCBfX1BPU0lYMl9DX0RFViA9
IF9fX1BPU0lYMl9USElTX1ZFUlNJT04KK2NvbnN0IF9BRl9BTEcgPSBfUEZfQUxHCitjb25zdCBf
SUZMQV9QUFBfVU5TUEVDID0gMAorY29uc3QgX1NPX1JDVkxPV0FUID0gMTgKK2NvbnN0IF9JTlQ4
X1dJRFRIID0gOAorY29uc3QgX1g4Nl9DUjBfUEdfQklUID0gMzEKK2NvbnN0IF9JUFBPUlRfV0hP
U0VSVkVSID0gNTEzCitjb25zdCBfSEFWRV9TWVNfTU1BTl9IID0gMQorY29uc3QgX19fTlJfcHdy
aXRlNjQgPSAxOAorY29uc3QgX0lGTEFfVFVOX09XTkVSID0gMQorY29uc3QgX1JUQVhfRkFTVE9Q
RU5fTk9fQ09PS0lFID0gMTcKK2NvbnN0IF9JRkxBX0JPTkRfTFBfSU5URVJWQUwgPSAxOQorY29u
c3QgX1BUUkFDRV9HRVRGUFJFR1MgPSAxNAorY29uc3QgX0NMT05FX0ZJTEVTID0gMHgwMDAwMDQw
MAorY29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9BRVNfMTI4X0NCQyA9IDUKK2NvbnN0IF9TS0Zf
QURfUkFORE9NID0gNTYKK2NvbnN0IF9NU0dfV0FJVEFMTCA9IDI1NgorY29uc3QgX1BSX1NFVF9N
TV9FTlZfRU5EID0gMTEKK2NvbnN0IF9fX05SX3NlbmRtc2cgPSA0NgorY29uc3QgX0VUSF9QX01B
UCA9IDB4MDBGOQorY29uc3QgX19fTlJfZ2V0c2lkID0gMTI0Citjb25zdCBfX19OUl9pb3ByaW9f
Z2V0ID0gMjUyCitjb25zdCBfSUZMQV9WRl9JQl9OT0RFX0dVSUQgPSAxMAorY29uc3QgX01TX1JF
QyA9IDE2Mzg0Citjb25zdCBfX1BPU0lYX1RSQUNFID0gLTEKK2NvbnN0IF9fX0ZMVDEyOF9IQVNf
UVVJRVRfTkFOX18gPSAxCitjb25zdCBfTE9DS19OQiA9IDQKK2NvbnN0IF9QRFBfRU5ESUFOID0g
X19fUERQX0VORElBTgorY29uc3QgX1BSX01DRV9LSUxMX0VBUkxZID0gMQorY29uc3QgX05FVExJ
TktfQVVESVQgPSA5Citjb25zdCBfU1lTX3N0YXR4ID0gX19fTlJfc3RhdHgKK2NvbnN0IF9fU0Nf
U1BJTl9MT0NLUyA9IDE1NAorY29uc3QgX0lGTEFfQk9ORF9BRF9JTkZPX0FDVE9SX0tFWSA9IDMK
K2NvbnN0IF9QUl9GUF9NT0RFX0ZSID0gKDEgPDwgMCkKK2NvbnN0IF9SVE1fR0VUVENMQVNTID0g
NDIKK2NvbnN0IF9BSV9BRERSQ09ORklHID0gMHgwMDIwCitjb25zdCBfUFJJdTggPSAidSIKK2Nv
bnN0IF9NQURWX1VOTUVSR0VBQkxFID0gMTMKK2NvbnN0IF9QUkl1MzIgPSAidSIKK2NvbnN0IF9T
WVNfc2h1dGRvd24gPSBfX19OUl9zaHV0ZG93bgorY29uc3QgX0hBVkVfTElOVVhfRlNfSCA9IDEK
K2NvbnN0IF9OX1IzOTY0ID0gOQorY29uc3QgX0lQUFJPVE9fQUggPSA1MQorY29uc3QgX0VYRlVM
TCA9IDU0Citjb25zdCBfX1BPU0lYX1JBV19TT0NLRVRTID0gMjAwODA5Citjb25zdCBfRUJVU1kg
PSAxNgorY29uc3QgX0IyNTAwMDAwID0gMDAxMDAxNAorY29uc3QgX19fTlJfZ2V0c29ja25hbWUg
PSA1MQorY29uc3QgX1BSSVhGQVNUOCA9ICJYIgorY29uc3QgX1NZU190a2lsbCA9IF9fX05SX3Rr
aWxsCitjb25zdCBfX19hbWQ2NF9fID0gMQorY29uc3QgX0lQVE9TX1BSRUNfUFJJT1JJVFkgPSBf
SVBUT1NfQ0xBU1NfQ1MxCitjb25zdCBfQ1RJTUUgPSAwCitjb25zdCBfX19GTFQzMlhfSEFTX0lO
RklOSVRZX18gPSAxCitjb25zdCBfRVVOQVRDSCA9IDQ5Citjb25zdCBfX1NDXzJfUEJTX0FDQ09V
TlRJTkcgPSAxNjkKK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiA9IC0xCitj
b25zdCBfX19OUl9tbG9jazIgPSAzMjUKK2NvbnN0IF9JUFBPUlRfV0hPSVMgPSA0MworY29uc3Qg
X19fTlJfZ2V0X3RocmVhZF9hcmVhID0gMjExCitjb25zdCBfRl9PRkRfR0VUTEsgPSAzNgorY29u
c3QgX05MQV9BTElHTlRPID0gNAorY29uc3QgX0VOT01FRElVTSA9IDEyMworY29uc3QgX19HTlVf
U09VUkNFID0gMQorY29uc3QgX1NZU19wdHJhY2UgPSBfX19OUl9wdHJhY2UKK2NvbnN0IF9TSU9D
R0lGSU5ERVggPSAweDg5MzMKK2NvbnN0IF9FMkJJRyA9IDcKK2NvbnN0IF9JQ01QNl9SUl9GTEFH
U19GT1JDRUFQUExZID0gMHgyMAorY29uc3QgX1NJX1RLSUxMID0gLTYKK2NvbnN0IF9fU0NfVEhS
RUFEX1NQT1JBRElDX1NFUlZFUiA9IDE2MQorY29uc3QgX19feDg2XzY0X18gPSAxCitjb25zdCBf
U1lTX2Z1dGV4ID0gX19fTlJfZnV0ZXgKK2NvbnN0IF9JTl9ERUxFVEUgPSAweDAwMDAwMjAwCitj
b25zdCBfRkZETFkgPSAwMTAwMDAwCitjb25zdCBfTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQID0g
NDcKK2NvbnN0IF9TX0lYVVNSID0gX19fU19JRVhFQworY29uc3QgX19TWVNfU0VMRUNUX0ggPSAx
Citjb25zdCBfUFJJZDggPSAiZCIKK2NvbnN0IF9fX05SX2lub3RpZnlfYWRkX3dhdGNoID0gMjU0
Citjb25zdCBfU0NObzggPSAiaGhvIgorY29uc3QgX01DTF9PTkZBVUxUID0gNAorY29uc3QgX0ZT
X0VBX0lOT0RFX0ZMID0gMHgwMDIwMDAwMAorY29uc3QgX19fTlJfb3BlbmF0ID0gMjU3Citjb25z
dCBfVFVOU0VUUEVSU0lTVF92YWwgPSAxMDc0MDI1Njc1Citjb25zdCBfX19OUl9mZGF0YXN5bmMg
PSA3NQorY29uc3QgX0ZfU0VUTEVBU0UgPSAxMDI0Citjb25zdCBfX1NDX0ZEX01HTVQgPSAxNDMK
K2NvbnN0IF9fX0JJVFNfUEVSX0xPTkcgPSA2NAorY29uc3QgX1BSSU9fTUlOID0gLTIwCitjb25z
dCBfX19OUl9wcmxpbWl0NjQgPSAzMDIKK2NvbnN0IF9SVE1fREVMVEZJTFRFUiA9IDQ1Citjb25z
dCBfUlRNX0dFVENIQUlOID0gMTAyCitjb25zdCBfUlRFWFRfRklMVEVSX1ZGID0gKDEgPDwgMCkK
K2NvbnN0IF9TVEFUWF9JTk8gPSAweDAxMDAKK2NvbnN0IF9fX05FVElORVRfSUZfRVRIRVJfSCA9
IDEKK2NvbnN0IF9TWVNfcmVjdm1tc2cgPSBfX19OUl9yZWN2bW1zZworY29uc3QgX0hBVkVfU0NI
RURfSCA9IDEKK2NvbnN0IF9FVEhfUF9SQVJQID0gMHg4MDM1Citjb25zdCBfX1NUUlVDVF9USU1F
U1BFQyA9IDEKK2NvbnN0IF9TT19SRVVTRVBPUlQgPSAxNQorY29uc3QgX19QT1NJWF9TRU1fTlNF
TVNfTUFYID0gMjU2Citjb25zdCBfX19MREJMX0VQU0lMT05fXyA9IDEuMQorY29uc3QgX19fY2xv
Y2tfdF9kZWZpbmVkID0gMQorY29uc3QgX01BUF9UWVBFID0gMHgwZgorY29uc3QgX05FVExJTktf
U09DS19ESUFHID0gNAorY29uc3QgX19fVVNFX1hPUEVOX0VYVEVOREVEID0gMQorY29uc3QgX1JU
Tl9QUk9ISUJJVCA9IDgKK2NvbnN0IF9QQUNLRVRfVFhfSEFTX09GRiA9IDE5Citjb25zdCBfVENQ
X1JFUEFJUiA9IDE5Citjb25zdCBfSUZMQV9WTEFOX0ZMQUdTID0gMgorY29uc3QgX19fTlJfZHVw
ID0gMzIKK2NvbnN0IF9BRl9USVBDID0gX1BGX1RJUEMKK2NvbnN0IF9JRkxBX0dUUF9ST0xFID0g
NAorY29uc3QgX19fTlJfZnV0aW1lc2F0ID0gMjYxCitjb25zdCBfX19VU0VfS0VSTkVMX0lQVjZf
REVGUyA9IDAKK2NvbnN0IF9JRkxBX1ZYTEFOX1BST1hZID0gMTEKK2NvbnN0IF9IQVZFX1VOSVNU
RF9IID0gMQorY29uc3QgX1g4Nl9DUjBfQU1fQklUID0gMTgKK2NvbnN0IF9JRkxBX1ZYTEFOX1JF
TUNTVU1fTk9QQVJUSUFMID0gMjQKK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTUFDQUREUiA9IDQKK2Nv
bnN0IF9JUFRPU19QUkVDX0ZMQVNIT1ZFUlJJREUgPSBfSVBUT1NfQ0xBU1NfQ1M0Citjb25zdCBf
X19TSUdSVE1JTiA9IDMyCitjb25zdCBfX19OUl9mY250bCA9IDcyCitjb25zdCBfU1lTX19zeXNj
dGwgPSBfX19OUl9fc3lzY3RsCitjb25zdCBfRU5FVFVOUkVBQ0ggPSAxMDEKK2NvbnN0IF9TWVNf
bXFfdGltZWRzZW5kID0gX19fTlJfbXFfdGltZWRzZW5kCitjb25zdCBfVElPQ1NFUkdFVExTUiA9
IDB4NTQ1OQorY29uc3QgX1NPTF9JVUNWID0gMjc3Citjb25zdCBfUkxJTUlUX0ZTSVpFID0gMQor
Y29uc3QgX19fUlRBX01BWCA9IDMwCitjb25zdCBfQlBGX1RBWCA9IDB4MDAKK2NvbnN0IF9TVEFU
WF9fUkVTRVJWRUQgPSAweDgwMDAwMDAwCitjb25zdCBfX1NDX1NZTkNIUk9OSVpFRF9JTyA9IDE0
Citjb25zdCBfX19SVE5fTUFYID0gMTIKK2NvbnN0IF9JTlQzMl9XSURUSCA9IDMyCitjb25zdCBf
TkRfT1BUX01UVSA9IDUKK2NvbnN0IF9TSUdfQVRPTUlDX1dJRFRIID0gMzIKK2NvbnN0IF9fU0Nf
RVFVSVZfQ0xBU1NfTUFYID0gNDEKK2NvbnN0IF9fUE9TSVhfQ0xPQ0tSRVNfTUlOID0gMjAwMDAw
MDAKK2NvbnN0IF9fX0dDQ19BVE9NSUNfSU5UX0xPQ0tfRlJFRSA9IDIKK2NvbnN0IF9QT1NJWF9G
QURWX05PUk1BTCA9IDAKK2NvbnN0IF9JUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQID0gNDAKK2Nv
bnN0IF9TRUVLX01BWCA9IF9TRUVLX0hPTEUKK2NvbnN0IF9BUlBIUkRfTUVUUklDT00gPSAyMwor
Y29uc3QgX0lGTEFfVkxBTl9FR1JFU1NfUU9TID0gMworY29uc3QgX1NZU19jbG9uZSA9IF9fX05S
X2Nsb25lCitjb25zdCBfX1NZU19USU1FU19IID0gMQorY29uc3QgX19fRkxUNjRYX01BWF9FWFBf
XyA9IDE2Mzg0Citjb25zdCBfU19JU0dJRCA9IF9fX1NfSVNHSUQKK2NvbnN0IF9JUFY2X1JUSERS
X1RZUEVfMCA9IDAKK2NvbnN0IF9TSUdTVE9QID0gMTkKK2NvbnN0IF9GU19VTlJNX0ZMID0gMHgw
MDAwMDAwMgorY29uc3QgX19QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgPSAyMDA4MDkKK2Nv
bnN0IF9QUl9GUF9FWENfTk9OUkVDT1YgPSAxCitjb25zdCBfVFVOR0VUVk5FVEhEUlNaX3ZhbCA9
IDIxNDc3Njc1MTEKK2NvbnN0IF9JR05CUksgPSAwMDAwMDAxCitjb25zdCBfX19ORVRQQUNLRVRf
UEFDS0VUX0ggPSAxCitjb25zdCBfU1lTX3NjaGVkX2dldF9wcmlvcml0eV9taW4gPSBfX19OUl9z
Y2hlZF9nZXRfcHJpb3JpdHlfbWluCitjb25zdCBfTl9NQVNDID0gOAorY29uc3QgX0lGTEFfQk9O
RF9BRF9TRUxFQ1QgPSAyMgorY29uc3QgX0lQVjZfSVBTRUNfUE9MSUNZID0gMzQKK2NvbnN0IF9B
Rl9MTEMgPSBfUEZfTExDCitjb25zdCBfU0lPQ1NSQVJQID0gMHg4OTYyCitjb25zdCBfUlRBX1BS
RUZTUkMgPSA3Citjb25zdCBfU09fU05EQlVGRk9SQ0UgPSAzMgorY29uc3QgX19fV0NMT05FID0g
MHg4MDAwMDAwMAorY29uc3QgX19fRkxUX0hBU19ERU5PUk1fXyA9IDEKK2NvbnN0IF9SVVNBR0Vf
VEhSRUFEID0gMQorY29uc3QgX0lGRl9QUk9NSVNDID0gMjU2Citjb25zdCBfUEZfVElQQyA9IDMw
Citjb25zdCBfU1lTX3B1dHBtc2cgPSBfX19OUl9wdXRwbXNnCitjb25zdCBfTUFDU0VDX1ZBTElE
QVRFX1NUUklDVCA9IDIKK2NvbnN0IF9UQ0FfSU5HUkVTU19CTE9DSyA9IDEzCitjb25zdCBfX19B
VE9NSUNfSExFX1JFTEVBU0UgPSAxMzEwNzIKK2NvbnN0IF9TWVNfZ2V0cmxpbWl0ID0gX19fTlJf
Z2V0cmxpbWl0Citjb25zdCBfUlRNX1NFVERDQiA9IDc5Citjb25zdCBfUlRNU0dfREVMREVWSUNF
ID0gMHgxMgorY29uc3QgX0lDTVA2X1JSX1BDT1VTRV9SQUZMQUdTX09OTElOSyA9IDB4MjAKK2Nv
bnN0IF9TWVNfbWVtYmFycmllciA9IF9fX05SX21lbWJhcnJpZXIKK2NvbnN0IF9TSU9DR1BHUlAg
PSAweDg5MDQKK2NvbnN0IF9fQ1NfTEZTNjRfTERGTEFHUyA9IDEwMDUKK2NvbnN0IF9CMzg0MDAg
PSAwMDAwMDE3Citjb25zdCBfSEFWRV9MSU5VWF9JRl9UVU5fSCA9IDEKK2NvbnN0IF9BUlBIUkRf
QVBQTEVUTEsgPSA4Citjb25zdCBfUFJfR0VUX1NFQ1VSRUJJVFMgPSAyNworY29uc3QgX0NNSU4g
PSAxCitjb25zdCBfTlVEX05PTkUgPSAweDAwCitjb25zdCBfSUZMQV9WWExBTl9UVEwgPSA1Citj
b25zdCBfX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRSA9IDIKK2NvbnN0IF9JTl9DTE9T
RV9OT1dSSVRFID0gMHgwMDAwMDAxMAorY29uc3QgX19fQVRPTUlDX1NFUV9DU1QgPSA1Citjb25z
dCBfU1lTX2lub3RpZnlfaW5pdCA9IF9fX05SX2lub3RpZnlfaW5pdAorY29uc3QgX1RJT0NTRVJH
U1RSVUNUID0gMHg1NDU4Citjb25zdCBfTkxNX0ZfRFVNUCA9IChfTkxNX0ZfUk9PVHxfTkxNX0Zf
TUFUQ0gpCitjb25zdCBfX1NDX1NQQVdOID0gMTU5Citjb25zdCBfX1BDX1JFQ19NQVhfWEZFUl9T
SVpFID0gMTUKK2NvbnN0IF9TSU9DQURERExDSSA9IDB4ODk4MAorY29uc3QgX19fTERCTF9NQVhf
RVhQX18gPSAxNjM4NAorY29uc3QgX19MRlM2NF9TVERJTyA9IDEKK2NvbnN0IF9TWVNfdHV4Y2Fs
bCA9IF9fX05SX3R1eGNhbGwKK2NvbnN0IF9fU1lTX1VOX0ggPSAxCitjb25zdCBfSUNNUDZfRklM
VEVSX0JMT0NLID0gMQorY29uc3QgX0VSRU1DSEcgPSA3OAorY29uc3QgX05FVExJTktfQUREX01F
TUJFUlNISVAgPSAxCitjb25zdCBfWDg2X0VGTEFHU19WSVBfQklUID0gMjAKK2NvbnN0IF9UQ1BJ
X09QVF9TWU5fREFUQSA9IDMyCitjb25zdCBfX19OUl91bWFzayA9IDk1Citjb25zdCBfV0lOVF9N
SU4gPSAoMCkKK2NvbnN0IF9fUE9TSVhfTUVNTE9DSyA9IDIwMDgwOQorY29uc3QgX19TQ19DSEFS
Q0xBU1NfTkFNRV9NQVggPSA0NQorY29uc3QgX0lGTEFfSVBWTEFOX0ZMQUdTID0gMgorY29uc3Qg
X19QT1NJWF9SRUFERVJfV1JJVEVSX0xPQ0tTID0gMjAwODA5Citjb25zdCBfSEFWRV9MSU5VWF9Q
VFJBQ0VfSCA9IDEKK2NvbnN0IF9YODZfQ1I0X1NNWEVfQklUID0gMTQKK2NvbnN0IF9JWE9GRiA9
IDAwMTAwMDAKK2NvbnN0IF9NU19OT1VTRVIgPSAtMjE0NzQ4MzY0OAorY29uc3QgX19fQklHR0VT
VF9BTElHTk1FTlRfXyA9IDE2Citjb25zdCBfRlNfUE9MSUNZX0ZMQUdTX1BBRF9NQVNLID0gMHgw
MworY29uc3QgX0VUSF9QX0REQ01QID0gMHgwMDA2Citjb25zdCBfX19OUl9ydF9zaWdzdXNwZW5k
ID0gMTMwCitjb25zdCBfWF9PSyA9IDEKK2NvbnN0IF9PX0FTWU5DID0gMDIwMDAwCitjb25zdCBf
VElPQ0xJTlVYID0gMHg1NDFDCitjb25zdCBfX19TSVpFT0ZfU0laRV9UX18gPSA4Citjb25zdCBf
TlVEX05PQVJQID0gMHg0MAorY29uc3QgX1NfSUZESVIgPSBfX19TX0lGRElSCitjb25zdCBfX19V
U0VfWE9QRU4yS1hTSSA9IDEKK2NvbnN0IF9fX1VTRV9HTlUgPSAxCitjb25zdCBfTlRGX01BU1RF
UiA9IDB4MDQKK2NvbnN0IF9fX0FUT01JQ19BQ1FVSVJFID0gMgorY29uc3QgX05fNlBBQ0sgPSA3
Citjb25zdCBfSUZMQV9FVkVOVF9JR01QX1JFU0VORCA9IDUKK2NvbnN0IF9JUF9ERiA9IDB4NDAw
MAorY29uc3QgX0lQT1BUX09QVFZBTCA9IDAKK2NvbnN0IF9fUEFUSF9IT1NUUyA9ICIvZXRjL2hv
c3RzIgorY29uc3QgX19fTlJfZXZlbnRmZCA9IDI4NAorY29uc3QgX1NPX1NOREJVRiA9IDcKK2Nv
bnN0IF9fX05SX2xzZWVrID0gOAorY29uc3QgX19fTlJfbWtkaXJhdCA9IDI1OAorY29uc3QgX0RU
X1VOS05PV04gPSAwCitjb25zdCBfSUZMQV9WTEFOX0lEID0gMQorY29uc3QgX19TQ19QSUlfSU5U
RVJORVRfU1RSRUFNID0gNjEKK2NvbnN0IF9GX1NFVE9XTiA9IF9fX0ZfU0VUT1dOCitjb25zdCBf
X0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUyA9IDExMjYKK2NvbnN0IF9USU9DU1NFUklBTCA9
IDB4NTQxRgorY29uc3QgX0VOT05FVCA9IDY0Citjb25zdCBfQVJQSFJEX0FUTSA9IDE5Citjb25z
dCBfWDg2X0VGTEFHU19BRl9CSVQgPSA0Citjb25zdCBfX19OUl9zZXRyZXNnaWQgPSAxMTkKK2Nv
bnN0IF9TWVNfbXVubWFwID0gX19fTlJfbXVubWFwCitjb25zdCBfQ1g4Nl9QQ1IwID0gMHgyMAor
Y29uc3QgX19fSU5UTUFYX01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmCitjb25zdCBfX19OUl9j
aHJvb3QgPSAxNjEKK2NvbnN0IF9fX0dDQ19BVE9NSUNfQ0hBUl9MT0NLX0ZSRUUgPSAyCitjb25z
dCBfRVRIX0ZSQU1FX0xFTiA9IDE1MTQKK2NvbnN0IF9QVFJBQ0VfRVZFTlRfRk9SSyA9IDEKK2Nv
bnN0IF9JRkxBX0JPTkRfTlVNX1BFRVJfTk9USUYgPSAxNgorY29uc3QgX0NMT0NLX1JFQUxUSU1F
ID0gMAorY29uc3QgX05EQV9QUk9CRVMgPSA0Citjb25zdCBfX1BDX1JFQ19JTkNSX1hGRVJfU0la
RSA9IDE0Citjb25zdCBfSUZMQV9QUk9UT19ET1dOID0gMzkKK2NvbnN0IF9VSU5UX0ZBU1QzMl9X
SURUSCA9IF9fX1dPUkRTSVpFCitjb25zdCBfX1NDXzJfUEJTX1RSQUNLID0gMTcyCitjb25zdCBf
QVJQRF9GTFVTSCA9IDB4MDMKK2NvbnN0IF9TQ054TEVBU1Q4ID0gImhoeCIKK2NvbnN0IF9UUllf
QUdBSU4gPSAyCitjb25zdCBfX1NZU19TWVNJTkZPX0ggPSAxCitjb25zdCBfRVRIRVJUWVBFX0lQ
ID0gMHgwODAwCitjb25zdCBfQVJQSFJEX0lFRUUxMzk0ID0gMjQKK2NvbnN0IF9JTl9BQ0NFU1Mg
PSAweDAwMDAwMDAxCitjb25zdCBfSUZMQV9JRk5BTUUgPSAzCitjb25zdCBfVENQX1VTRVJfVElN
RU9VVCA9IDE4Citjb25zdCBfQVJQSFJEX0lFRUU4MDIxMSA9IDgwMQorY29uc3QgX0lGTEFfQUZf
U1BFQyA9IDI2Citjb25zdCBfQjExNTIwMDAgPSAwMDEwMDExCitjb25zdCBfRVRIX1BfVERMUyA9
IDB4ODkwRAorY29uc3QgX19CSVRTX1NJR1NUQUNLX0ggPSAxCitjb25zdCBfUEZfQkxVRVRPT1RI
ID0gMzEKK2NvbnN0IF9fQklUU19TSUdDT05URVhUX0ggPSAxCitjb25zdCBfVElPQ1NXSU5TWl92
YWwgPSAyMTUyNAorY29uc3QgX0VBSV9BTExET05FID0gLTEwMworY29uc3QgX19fTERCTF9NQVhf
MTBfRVhQX18gPSA0OTMyCitjb25zdCBfSUZMQV9TVEFUU19MSU5LXzY0ID0gMQorY29uc3QgX1VJ
TlRfRkFTVDMyX01BWCA9ICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkKK2NvbnN0IF9GRklfU1lTViA9
IDEKK2NvbnN0IF9fU1lTX0ZJTEVfSCA9IDEKK2NvbnN0IF9JUF9PUklHRFNUQUREUiA9IDIwCitj
b25zdCBfRVRIX1BfU0NBID0gMHg2MDA3Citjb25zdCBfUlRNR1JQX0lQVjZfUFJFRklYID0gMHgy
MDAwMAorY29uc3QgX19fTlJfc2V0cHJpb3JpdHkgPSAxNDEKK2NvbnN0IF9USU9DUEtUX05PU1RP
UCA9IDE2Citjb25zdCBfSVBfUE1UVURJU0NfT01JVCA9IDUKK2NvbnN0IF9DT0xMX1dFSUdIVFNf
TUFYID0gMjU1Citjb25zdCBfT19UUlVOQyA9IDAxMDAwCitjb25zdCBfX19OUl9zZXRob3N0bmFt
ZSA9IDE3MAorY29uc3QgX0ZJT05DTEVYID0gMHg1NDUwCitjb25zdCBfRlNfWEZMQUdfSU1NVVRB
QkxFID0gMHgwMDAwMDAwOAorY29uc3QgX0ZTX0lOTElORV9EQVRBX0ZMID0gMHgxMDAwMDAwMAor
Y29uc3QgX1BGX0FYMjUgPSAzCitjb25zdCBfX19BVE9NSUNfQUNRX1JFTCA9IDQKK2NvbnN0IF9f
X05SX3N5c2luZm8gPSA5OQorY29uc3QgX0ZTX1hGTEFHX0RBWCA9IDB4MDAwMDgwMDAKK2NvbnN0
IF9JUFY2X1JPVVRFUl9BTEVSVCA9IDIyCitjb25zdCBfSUZMQV9CUl9CUklER0VfSUQgPSAxMQor
Y29uc3QgX1g4Nl9DUjRfTEE1N19CSVQgPSAxMgorY29uc3QgX19TQ19WRVJTSU9OID0gMjkKK2Nv
bnN0IF9TVEFUWF9BVFRSX0NPTVBSRVNTRUQgPSAweDAwMDQKK2NvbnN0IF9JUFY2X0hEUklOQ0wg
PSAzNgorY29uc3QgX0lGTEFfQlJQT1JUX1VOSUNBU1RfRkxPT0QgPSA5Citjb25zdCBfUlRNX0RF
TE5FSUdIID0gMjkKK2NvbnN0IF9fX1NURENfVkVSU0lPTl9fID0gMTk5OTAxCitjb25zdCBfUEZf
UUlQQ1JUUiA9IDQyCitjb25zdCBfQURKX0ZSRVFVRU5DWSA9IDB4MDAwMgorY29uc3QgX19fTE9O
R19MT05HX1dJRFRIX18gPSA2NAorY29uc3QgX0FGX0FTSCA9IF9QRl9BU0gKK2NvbnN0IF9JUF9Q
TVRVRElTQ19ET05UID0gMAorY29uc3QgX0hBVkVfU1lOQ19GRVRDSF9BTkRfQUREXzQgPSAxCitj
b25zdCBfSVBWNl9KT0lOX0dST1VQID0gMjAKK2NvbnN0IF9TS0ZfQURfVkxBTl9UQUcgPSA0NAor
Y29uc3QgX1BUUkFDRV9HRVRfVEhSRUFEX0FSRUEgPSAyNQorY29uc3QgX1JUTkxHUlBfSVBWNF9N
Uk9VVEVfUiA9IDMwCitjb25zdCBfVENBX0VHUkVTU19CTE9DSyA9IDE0Citjb25zdCBfX19TSVpF
T0ZfUFRIUkVBRF9NVVRFWF9UID0gNDAKK2NvbnN0IF9TT19UWVBFID0gMworY29uc3QgX19fSUZM
QV9WTEFOX01BWCA9IDYKK2NvbnN0IF9QVFJBQ0VfU0VUU0lHTUFTSyA9IDE2OTA3Citjb25zdCBf
Q0xPTkVfVkZPUksgPSAweDAwMDA0MDAwCitjb25zdCBfSVBQUk9UT19JUCA9IDAKK2NvbnN0IF9F
Tk9FWEVDID0gOAorY29uc3QgX1NPX0lOQ09NSU5HX0NQVSA9IDQ5Citjb25zdCBfUFJfU0VUX0ZQ
RVhDID0gMTIKK2NvbnN0IF9UQ1BfV0lORE9XX0NMQU1QID0gMTAKK2NvbnN0IF9TT19SWFFfT1ZG
TCA9IDQwCitjb25zdCBfU1lTX3Zmb3JrID0gX19fTlJfdmZvcmsKK2NvbnN0IF9JTl9DTE9FWEVD
ID0gNTI0Mjg4Citjb25zdCBfVENBX0ZDTlQgPSA2Citjb25zdCBfX19GTFQ2NFhfSEFTX0lORklO
SVRZX18gPSAxCitjb25zdCBfX1NDX1NFTV9WQUxVRV9NQVggPSAzMworY29uc3QgX19ORVRJTkVU
X0lDTVA2X0ggPSAxCitjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfQ0JDID0gMwor
Y29uc3QgX19fUkxJTUlUX01TR1FVRVVFID0gMTIKK2NvbnN0IF9JUFBST1RPX0NPTVAgPSAxMDgK
K2NvbnN0IF9QQUNLRVRfUlhfUklORyA9IDUKK2NvbnN0IF9JRkxBX0NBUlJJRVJfRE9XTl9DT1VO
VCA9IDQ4Citjb25zdCBfU09fQlBGX0VYVEVOU0lPTlMgPSA0OAorY29uc3QgX0VBRERSTk9UQVZB
SUwgPSA5OQorY29uc3QgX19fRkxUMzJfTUlOX18gPSAxLjEKK2NvbnN0IF9JRkxBX0JSX0ZPUldB
UkRfREVMQVkgPSAxCitjb25zdCBfX19TU0VfTUFUSF9fID0gMQorY29uc3QgX1NZU193YWl0aWQg
PSBfX19OUl93YWl0aWQKK2NvbnN0IF9TQ09QRV9ERUxJTUlURVIgPSAnJScKK2NvbnN0IF9fX05S
X3NvY2tldCA9IDQxCitjb25zdCBfX19ORVRfRVRIRVJORVRfSCA9IDEKK2NvbnN0IF9TX0lSVVNS
ID0gX19fU19JUkVBRAorY29uc3QgX0lGTEFfWERQX0ZEID0gMQorY29uc3QgX0lQVjZfTVRVID0g
MjQKK2NvbnN0IF9GU19YRkxBR19OT0FUSU1FID0gMHgwMDAwMDA0MAorY29uc3QgX0ZTX0pPVVJO
QUxfREFUQV9GTCA9IDB4MDAwMDQwMDAKK2NvbnN0IF9fX05SX2NhcGdldCA9IDEyNQorY29uc3Qg
X1JUTl9BTllDQVNUID0gNAorY29uc3QgX1BPTExfSFVQID0gNgorY29uc3QgX0hBVkVfR0VUSVBJ
TkZPID0gMQorY29uc3QgX01TX1VOQklOREFCTEUgPSAxMzEwNzIKK2NvbnN0IF9fU1RBVF9WRVJf
S0VSTkVMID0gMAorY29uc3QgX1BSX01DRV9LSUxMID0gMzMKK2NvbnN0IF9fUE9TSVhfVjZfTFBC
SUdfT0ZGQklHID0gLTEKK2NvbnN0IF9BUlBIUkRfRkNBTCA9IDc4NQorY29uc3QgX1NfSUZDSFIg
PSBfX19TX0lGQ0hSCitjb25zdCBfTUNBU1RfQkxPQ0tfU09VUkNFID0gNDMKK2NvbnN0IF9TWVNf
Z2V0Z3JvdXBzID0gX19fTlJfZ2V0Z3JvdXBzCitjb25zdCBfX19OUl9ydF90Z3NpZ3F1ZXVlaW5m
byA9IDI5NworY29uc3QgX1VJTlQzMl9NQVggPSAoNDI5NDk2NzI5NSkKK2NvbnN0IF9USU1FX1VU
QyA9IDEKK2NvbnN0IF9JTl9RX09WRVJGTE9XID0gMHgwMDAwNDAwMAorY29uc3QgX0lGTEFfQlJQ
T1JUX0hPTERfVElNRVIgPSAyMworY29uc3QgX0lGTEFfSU5FVDZfQ0FDSEVJTkZPID0gNQorY29u
c3QgX1RJTUVSX0FCU1RJTUUgPSAxCitjb25zdCBfTUFQX0ZJWEVEID0gMHgxMAorY29uc3QgX0Zf
T1dORVJfVElEID0gMAorY29uc3QgX19TQ19DTE9DS19TRUxFQ1RJT04gPSAxMzcKK2NvbnN0IF9I
QVZFX0ZDSE1PREFUID0gMQorY29uc3QgX19DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfQ0ZMQUdT
ID0gMTE0NAorY29uc3QgX0FUX1NUQVRYX1NZTkNfQVNfU1RBVCA9IDB4MDAwMAorY29uc3QgX1BP
UlRfVkRQX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMgPSAyCitjb25zdCBfVENQX1RJ
TUVfV0FJVCA9IDYKK2NvbnN0IF9CUEZfU1QgPSAweDAyCitjb25zdCBfX1BPU0lYX1NQT1JBRElD
X1NFUlZFUiA9IC0xCitjb25zdCBfQUZfU0VDVVJJVFkgPSBfUEZfU0VDVVJJVFkKK2NvbnN0IF9Q
Rl9YMjUgPSA5Citjb25zdCBfUFRSQUNFX0FSQ0hfUFJDVEwgPSAzMAorY29uc3QgX0VTT0NLVE5P
U1VQUE9SVCA9IDk0Citjb25zdCBfVElPQ0dTRVJJQUwgPSAweDU0MUUKK2NvbnN0IF9TWVNfbWJp
bmQgPSBfX19OUl9tYmluZAorY29uc3QgX0lGTEFfVkZfVkxBTiA9IDIKK2NvbnN0IF9TWVNfcGtl
eV9tcHJvdGVjdCA9IF9fX05SX3BrZXlfbXByb3RlY3QKK2NvbnN0IF9JRkFfQlJPQURDQVNUID0g
NAorY29uc3QgX0JQRl9SU0ggPSAweDcwCitjb25zdCBfSUZMQV9CUl9NQ0FTVF9IQVNIX0VMQVNU
SUNJVFkgPSAyNgorY29uc3QgX1JUQVhfV0lORE9XID0gMworY29uc3QgX01TX1NJTEVOVCA9IDMy
NzY4Citjb25zdCBfU0NNX1dJRklfU1RBVFVTID0gX1NPX1dJRklfU1RBVFVTCitjb25zdCBfX1ND
X0ZJTEVfQVRUUklCVVRFUyA9IDE0NgorY29uc3QgX19QT1NJWF9TRU1fVkFMVUVfTUFYID0gMzI3
NjcKK2NvbnN0IF9fX0ZMVDY0WF9NSU5fRVhQX18gPSAoLTE2MzgxKQorY29uc3QgX1BSSXVGQVNU
OCA9ICJ1IgorY29uc3QgX19fdGltZXJfdF9kZWZpbmVkID0gMQorY29uc3QgX19QT1NJWF9IT1NU
X05BTUVfTUFYID0gMjU1Citjb25zdCBfVENQX0ZBU1RPUEVOID0gMjMKK2NvbnN0IF9fU0NfU0lH
UVVFVUVfTUFYID0gMzQKK2NvbnN0IF9JT0NfT1VUID0gKF9fSU9DX1JFQUQgPDwgX19JT0NfRElS
U0hJRlQpCitjb25zdCBfRU1MSU5LID0gMzEKK2NvbnN0IF9fX1dDT1JFRkxBRyA9IDB4ODAKK2Nv
bnN0IF9FUkZLSUxMID0gMTMyCitjb25zdCBfX1VUU05BTUVfTEVOR1RIID0gNjUKK2NvbnN0IF9T
SUdfQkxPQ0sgPSAwCitjb25zdCBfU1lTX21pbmNvcmUgPSBfX19OUl9taW5jb3JlCitjb25zdCBf
RUFJX09WRVJGTE9XID0gLTEyCitjb25zdCBfQUZfTkZDID0gX1BGX05GQworY29uc3QgX1NZU19n
ZXRwcGlkID0gX19fTlJfZ2V0cHBpZAorY29uc3QgX01BQ1ZMQU5fRkxBR19OT1BST01JU0MgPSAx
Citjb25zdCBfSVBPUFRfU0VDVVJfTU1NTSA9IDB4YmM0ZAorY29uc3QgX0lGTEFfTUFYX01UVSA9
IDUxCitjb25zdCBfX19OUl9nZXR4YXR0ciA9IDE5MQorY29uc3QgX19TQ18yX0NfREVWID0gNDgK
K2NvbnN0IF9OREFfTExBRERSID0gMgorY29uc3QgX0lQVjZfVFJBTlNQQVJFTlQgPSA3NQorY29u
c3QgX19fTlJfbXByb3RlY3QgPSAxMAorY29uc3QgX1NIVVRfUkRXUiA9IDIKK2NvbnN0IF9TSU9D
U0lGTUVUUklDID0gMHg4OTFlCitjb25zdCBfX1NDX0FJT19MSVNUSU9fTUFYID0gMjMKK2NvbnN0
IF9NQVBfREVOWVdSSVRFID0gMHgwMDgwMAorY29uc3QgX1NJT0NTUEdSUCA9IDB4ODkwMgorY29u
c3QgX1NJX0FTWU5DSU8gPSAtNAorY29uc3QgX1RVTlNFVElGRl92YWwgPSAxMDc0MDI1Njc0Citj
b25zdCBfSUZMQV9JRkFMSUFTID0gMjAKK2NvbnN0IF9QVFJBQ0VfU0VDQ09NUF9HRVRfTUVUQURB
VEEgPSAxNjkwOQorY29uc3QgX19fR0NDX0lFQ181NTkgPSAyCitjb25zdCBfUlRGX0xJTktSVCA9
IDB4MDAxMDAwMDAKK2NvbnN0IF9TWVNfbW92ZV9wYWdlcyA9IF9fX05SX21vdmVfcGFnZXMKK2Nv
bnN0IF9TS0ZfQURfVkxBTl9UQUdfUFJFU0VOVCA9IDQ4Citjb25zdCBfSEFWRV9MREVYUEwgPSAx
Citjb25zdCBfX19OUl9wcmVhZHYyID0gMzI3Citjb25zdCBfX19OUl9jcmVhdGVfbW9kdWxlID0g
MTc0Citjb25zdCBfTUFDVkxBTl9NT0RFX0JSSURHRSA9IDQKK2NvbnN0IF9EVF9ESVIgPSA0Citj
b25zdCBfU1RBX1BQU1NJR05BTCA9IDB4MDEwMAorY29uc3QgX1NZU19zZXRmc2dpZCA9IF9fX05S
X3NldGZzZ2lkCitjb25zdCBfX19STElNSVRfUlRUSU1FID0gMTUKK2NvbnN0IF9fU0NfMl9WRVJT
SU9OID0gNDYKK2NvbnN0IF9IQVZFX09QRU42NCA9IDEKK2NvbnN0IF9UUkFQX0JSS1BUID0gMQor
Y29uc3QgX05JX0RHUkFNID0gMTYKK2NvbnN0IF9fU0NfREVWSUNFX1NQRUNJRklDID0gMTQxCitj
b25zdCBfSVBGUkFHVFRMID0gNjAKK2NvbnN0IF9fU0NfTkxfTVNHTUFYID0gMTIxCitjb25zdCBf
U1lTX3NjaGVkX3NldGF0dHIgPSBfX19OUl9zY2hlZF9zZXRhdHRyCitjb25zdCBfUFJfU0VUX01N
X0VORF9EQVRBID0gNAorY29uc3QgX1JUQVhfQURWTVNTID0gOAorY29uc3QgX1NPTF9SQVcgPSAy
NTUKK2NvbnN0IF9MT0NLX0VYID0gMgorY29uc3QgX19fTlJfbXVubWFwID0gMTEKK2NvbnN0IF9f
X0dDQ19BVE9NSUNfTExPTkdfTE9DS19GUkVFID0gMgorY29uc3QgX19TQ19QSFlTX1BBR0VTID0g
ODUKK2NvbnN0IF9GU19LRVlfREVTQ19QUkVGSVhfU0laRSA9IDgKK2NvbnN0IF9TWVNfcmVtYXBf
ZmlsZV9wYWdlcyA9IF9fX05SX3JlbWFwX2ZpbGVfcGFnZXMKK2NvbnN0IF9NU19TWU5DID0gNAor
Y29uc3QgX0ZfVU5MQ0sgPSAyCitjb25zdCBfUFJfR0VUX0ZQRU1VID0gOQorY29uc3QgX19fTlJf
cmVtYXBfZmlsZV9wYWdlcyA9IDIxNgorY29uc3QgX0lQT1BUX05VTUJFUl9NQVNLID0gMHgxZgor
Y29uc3QgX1NZU19zZXR1aWQgPSBfX19OUl9zZXR1aWQKK2NvbnN0IF9JUF9QQVNTU0VDID0gMTgK
K2NvbnN0IF9TWVNfc29ja2V0cGFpciA9IF9fX05SX3NvY2tldHBhaXIKK2NvbnN0IF9ORFRQQV9M
T0NLVElNRSA9IDE1Citjb25zdCBfVENQX0NPT0tJRV9NSU4gPSA4Citjb25zdCBfUlRNU0dfQVJf
RkFJTEVEID0gMHg1MQorY29uc3QgX0lMTF9CQURTVEsgPSA4Citjb25zdCBfQVJQT1BfUkVQTFkg
PSAyCitjb25zdCBfSEFWRV9TVFJJTkdfSCA9IDEKK2NvbnN0IF9JTlRfRkFTVDhfTUFYID0gKDEy
NykKK2NvbnN0IF9fX05SX19zeXNjdGwgPSAxNTYKK2NvbnN0IF9SVEZfQlJPQURDQVNUID0gMHgx
MDAwMDAwMAorY29uc3QgX1BGX0tDTSA9IDQxCitjb25zdCBfX1BDX01BWF9JTlBVVCA9IDIKK2Nv
bnN0IF9JTl9NT0RJRlkgPSAweDAwMDAwMDAyCitjb25zdCBfU0lHUVVJVCA9IDMKK2NvbnN0IF9U
Q1BfQ09SSyA9IDMKK2NvbnN0IF9TWVNfcmVtb3ZleGF0dHIgPSBfX19OUl9yZW1vdmV4YXR0cgor
Y29uc3QgX19fRkxUX0VQU0lMT05fXyA9IDEuMQorY29uc3QgX19fVUlOVDMyX01BWF9fID0gMHhm
ZmZmZmZmZgorY29uc3QgX19fTlJfZmNob3duID0gOTMKK2NvbnN0IF9SVE5MR1JQX0xJTksgPSAx
Citjb25zdCBfX1NDX1RSQUNFX0xPRyA9IDE4NAorY29uc3QgX1RDUF9LRUVQSU5UVkwgPSA1Citj
b25zdCBfUFJfR0VUX0tFRVBDQVBTID0gNworY29uc3QgX0lOVF9MRUFTVDMyX01BWCA9ICgyMTQ3
NDgzNjQ3KQorY29uc3QgX19fTERCTF9NSU5fRVhQX18gPSAoLTE2MzgxKQorY29uc3QgX1NDTmkz
MiA9ICJpIgorY29uc3QgX19fTlJfcmVuYW1lID0gODIKK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVNF
Q0NPTVAgPSAxMjgKK2NvbnN0IF9JTl9JR05PUkVEID0gMHgwMDAwODAwMAorY29uc3QgX0JQRl9J
TU0gPSAweDAwCitjb25zdCBfSUZMQV9WRl9UUlVTVCA9IDkKK2NvbnN0IF9JUFBST1RPX01IID0g
MTM1Citjb25zdCBfSUZMQV9WWExBTl9MSU5LID0gMworY29uc3QgX0VTSFVURE9XTiA9IDEwOAor
Y29uc3QgX1NPTF9QQUNLRVQgPSAyNjMKK2NvbnN0IF9fX05SX2luaXRfbW9kdWxlID0gMTc1Citj
b25zdCBfQ0xPTkVfTkVXTlMgPSAweDAwMDIwMDAwCitjb25zdCBfUlRQUk9UX01ST1VURUQgPSAx
NworY29uc3QgX19TQ19TU19SRVBMX01BWCA9IDI0MQorY29uc3QgX0dUUF9ST0xFX0dHU04gPSAw
Citjb25zdCBfU1lTX3RydW5jYXRlID0gX19fTlJfdHJ1bmNhdGUKK2NvbnN0IF9fX01BQ1NFQ19W
QUxJREFURV9FTkQgPSAzCitjb25zdCBfWDg2X0VGTEFHU19WSUZfQklUID0gMTkKK2NvbnN0IF9f
U0NfTVVMVElfUFJPQ0VTUyA9IDE1MAorY29uc3QgX0lQUFJPVE9fUElNID0gMTAzCitjb25zdCBf
QjE1MDAwMDAgPSAwMDEwMDEyCitjb25zdCBfX19OUl9wd3JpdGV2ID0gMjk2Citjb25zdCBfU09f
UkVVU0VBRERSID0gMgorY29uc3QgX05DQyA9IDgKK2NvbnN0IF9UQ1BfQ0FfTG9zcyA9IDQKK2Nv
bnN0IF9NU19NR0NfTVNLID0gMHhmZmZmMDAwMAorY29uc3QgX1NfSVhPVEggPSAoX1NfSVhHUlAg
Pj4gMykKK2NvbnN0IF9TT0xfTkVUTElOSyA9IDI3MAorY29uc3QgX0lMTF9QUlZSRUcgPSA2Citj
b25zdCBfX19GTFQzMlhfTUFOVF9ESUdfXyA9IDUzCitjb25zdCBfU0NOdUxFQVNUOCA9ICJoaHUi
Citjb25zdCBfVUxMT05HX01BWCA9IChfTExPTkdfTUFYICogMiArIDEpCitjb25zdCBfSUZMQV9W
WExBTl9BR0VJTkcgPSA4Citjb25zdCBfUFJfU1BFQ19QUkNUTCA9ICgxIDw8IDApCitjb25zdCBf
UlRNX0RFTENIQUlOID0gMTAxCitjb25zdCBfX0lPQ19TSVpFU0hJRlQgPSAoX19JT0NfVFlQRVNI
SUZUK19fSU9DX1RZUEVCSVRTKQorY29uc3QgX19fTlJfbmZzc2VydmN0bCA9IDE4MAorY29uc3Qg
X19fRkxUX01JTl8xMF9FWFBfXyA9ICgtMzcpCitjb25zdCBfSUZMQV9YRFBfUFJPR19JRCA9IDQK
K2NvbnN0IF9fQklUU19UWVBFU19TVFJVQ1RfU0NIRURfUEFSQU0gPSAxCitjb25zdCBfQVJQSFJE
X1JTUlZEID0gMjYwCitjb25zdCBfX1BPU0lYMl9CQ19CQVNFX01BWCA9IDk5Citjb25zdCBfUEFD
S0VUX0FERF9NRU1CRVJTSElQID0gMQorY29uc3QgX19fTlJfcnRfc2lncGVuZGluZyA9IDEyNwor
Y29uc3QgX19fT19QQVRIID0gMDEwMDAwMDAwCitjb25zdCBfRVRIX1BfQlBRID0gMHgwOEZGCitj
b25zdCBfVENQX1RJTUVTVEFNUCA9IDI0Citjb25zdCBfU0lPQ1NJRlBGTEFHUyA9IDB4ODkzNAor
Y29uc3QgX1JUTV9ORVdMSU5LID0gMTYKK2NvbnN0IF9JRkxBX0lORk9fWFNUQVRTID0gMworY29u
c3QgX19QT1NJWF9DUFVUSU1FID0gMAorY29uc3QgX1BBQ0tFVF9GQVNUUk9VVEUgPSA2Citjb25z
dCBfSU5UX0xFQVNUNjRfV0lEVEggPSA2NAorY29uc3QgX1BGX0lQWCA9IDQKK2NvbnN0IF9OVURf
UEVSTUFORU5UID0gMHg4MAorY29uc3QgX19fTlJfaW9fZGVzdHJveSA9IDIwNworY29uc3QgX1JU
QVhfUlRUID0gNAorY29uc3QgX19fUkxJTUlUX1JTUyA9IDUKK2NvbnN0IF9fX05SX2dldHRpZCA9
IDE4NgorY29uc3QgX19fTlJfaW9wZXJtID0gMTczCitjb25zdCBfU19JRkJMSyA9IF9fX1NfSUZC
TEsKK2NvbnN0IF9TQ054RkFTVDggPSAiaGh4IgorY29uc3QgX19fTlJfdHV4Y2FsbCA9IDE4NAor
Y29uc3QgX19fT19ESVJFQ1RPUlkgPSAwMjAwMDAwCitjb25zdCBfU1lTX2Nvbm5lY3QgPSBfX19O
Ul9jb25uZWN0Citjb25zdCBfVENQX0NDX0lORk8gPSAyNgorY29uc3QgX1BBQ0tBR0VfU1RSSU5H
ID0gInBhY2thZ2UtdW51c2VkIHZlcnNpb24tdW51c2VkIgorY29uc3QgX1NZU19zY2hlZF9nZXRh
dHRyID0gX19fTlJfc2NoZWRfZ2V0YXR0cgorY29uc3QgX19QT1NJWDJfQkNfU0NBTEVfTUFYID0g
OTkKK2NvbnN0IF9QVFJBQ0VfUE9LRVRFWFQgPSA0Citjb25zdCBfRVRIX1BfREVDID0gMHg2MDAw
Citjb25zdCBfU1lTX2ZsaXN0eGF0dHIgPSBfX19OUl9mbGlzdHhhdHRyCitjb25zdCBfSVBWTEFO
X0ZfUFJJVkFURSA9IDB4MDEKK2NvbnN0IF9OTE1TR19PVkVSUlVOID0gMHg0Citjb25zdCBfTkVU
TElOS19JUDZfRlcgPSAxMworY29uc3QgX0lGTEFfQlJfQUdFSU5HX1RJTUUgPSA0Citjb25zdCBf
VENTRVRTID0gMHg1NDAyCitjb25zdCBfUlRNX0ZfRVFVQUxJWkUgPSAweDQwMAorY29uc3QgX0hB
VkVfRFVQMyA9IDEKK2NvbnN0IF9CUklER0VfTU9ERV9IQUlSUElOID0gMQorY29uc3QgX1RDU0VU
WCA9IDB4NTQzMworY29uc3QgX1ZTVVNQID0gMTAKK2NvbnN0IF9fQklUU19TT0NLQUREUl9IID0g
MQorY29uc3QgX1NJR1BPTEwgPSAyOQorY29uc3QgX1BUUkFDRV9FVkVOVF9TVE9QID0gMTI4Citj
b25zdCBfQVRfU1lNTElOS19OT0ZPTExPVyA9IDB4MTAwCitjb25zdCBfSEFWRV9TWVNfVkZTX0gg
PSAxCitjb25zdCBfUEZfS0VZID0gMTUKK2NvbnN0IF9JRkxBX1NUQVRTX0xJTktfWFNUQVRTX1NM
QVZFID0gMworY29uc3QgX05MX01NQVBfTVNHX0FMSUdOTUVOVCA9IF9OTE1TR19BTElHTlRPCitj
b25zdCBfSUZMQV9WWExBTl9VRFBfQ1NVTSA9IDE4Citjb25zdCBfX19OUl93YWl0NCA9IDYxCitj
b25zdCBfSUZMQV9STU5FVF9GTEFHUyA9IDIKK2NvbnN0IF9TT0xfUkRTID0gMjc2Citjb25zdCBf
UlRBWF9GRUFUVVJFX01BU0sgPSAoX1JUQVhfRkVBVFVSRV9FQ04gfCBfUlRBWF9GRUFUVVJFX1NB
Q0sgfCBfUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCB8IF9SVEFYX0ZFQVRVUkVfQUxMRlJBRykKK2Nv
bnN0IF9SVE1fR0VUTkVUQ09ORiA9IDgyCitjb25zdCBfX19GTFQ2NF9NQVhfRVhQX18gPSAxMDI0
Citjb25zdCBfVElPQ1NQR1JQX3ZhbCA9IDIxNTIwCitjb25zdCBfSVBQUk9UT19SU1ZQID0gNDYK
K2NvbnN0IF9SVE1fR0VUTlNJRCA9IDkwCitjb25zdCBfT05MQ1IgPSAwMDAwMDA0Citjb25zdCBf
X1NDX1BJSV9TT0NLRVQgPSA1NQorY29uc3QgX0FSUEhSRF9UVU5ORUwgPSA3NjgKK2NvbnN0IF9I
QVZFX01JTkNPUkUgPSAxCitjb25zdCBfX19IQVZFX0dFTkVSSUNfU0VMRUNUSU9OID0gMQorY29u
c3QgX1RDUF9LRUVQQ05UID0gNgorY29uc3QgX1RDUF9TWU5fUkVDViA9IDMKK2NvbnN0IF9OTE1f
Rl9BUFBFTkQgPSAweDgwMAorY29uc3QgX1NZU19tbWFwID0gX19fTlJfbW1hcAorY29uc3QgX1NZ
U19jbG9ja19hZGp0aW1lID0gX19fTlJfY2xvY2tfYWRqdGltZQorY29uc3QgX1JUTkxHUlBfVEMg
PSA0Citjb25zdCBfQURKX05BTk8gPSAweDIwMDAKK2NvbnN0IF9ORVRMSU5LX1RYX1JJTkcgPSA3
Citjb25zdCBfU1lTX2V2ZW50ZmQgPSBfX19OUl9ldmVudGZkCitjb25zdCBfX1NDX1RSQUNFX05B
TUVfTUFYID0gMjQzCitjb25zdCBfU1RBVFhfQVRJTUUgPSAweDAwMjAKK2NvbnN0IF9fQ1NfTEZT
X0xERkxBR1MgPSAxMDAxCitjb25zdCBfX19OUl9zZXRyZWdpZCA9IDExNAorY29uc3QgX0VPV05F
UkRFQUQgPSAxMzAKK2NvbnN0IF9fX05SX3JlYWRsaW5rID0gODkKK2NvbnN0IF9fX3N0YWNrX3Rf
ZGVmaW5lZCA9IDEKK2NvbnN0IF9fX0ZMVDY0WF9NQVhfMTBfRVhQX18gPSA0OTMyCitjb25zdCBf
UlRTSUdfTUFYID0gMzIKK2NvbnN0IF9fX1NJWkVPRl9MT05HX0RPVUJMRV9fID0gMTYKK2NvbnN0
IF9WVDAgPSAwMDAwMDAwCitjb25zdCBfVlQxID0gMDA0MDAwMAorY29uc3QgX0lOVF9GQVNUMTZf
TUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4MDcpCitjb25zdCBfWDg2X0NSMF9UU19CSVQgPSAzCitj
b25zdCBfX19OUl9zeXNmcyA9IDEzOQorY29uc3QgX1g4Nl9DUjRfUEFFX0JJVCA9IDUKK2NvbnN0
IF9fUE9TSVhfVFpOQU1FX01BWCA9IDYKK2NvbnN0IF9TWVNfb3BlbiA9IF9fX05SX29wZW4KK2Nv
bnN0IF9TSU9DU0lGRU5DQVAgPSAweDg5MjYKK2NvbnN0IF9UQ1BfQ0FfRGlzb3JkZXIgPSAxCitj
b25zdCBfX19XT1JEU0laRSA9IDY0Citjb25zdCBfSVBfTUYgPSAweDIwMDAKK2NvbnN0IF9QUk9U
X0dST1dTVVAgPSAweDAyMDAwMDAwCitjb25zdCBfUlRGX0FERFJDTEFTU01BU0sgPSAweEY4MDAw
MDAwCitjb25zdCBfX19hbWQ2NCA9IDEKK2NvbnN0IF9BUlBIUkRfUFJPTkVUID0gNAorY29uc3Qg
X0I5MjE2MDAgPSAwMDEwMDA3Citjb25zdCBfRUFERFJJTlVTRSA9IDk4Citjb25zdCBfRlNfRkxf
VVNFUl9WSVNJQkxFID0gMHgwMDAzREZGRgorY29uc3QgX19fTlJfdGltZXJmZF9nZXR0aW1lID0g
Mjg3Citjb25zdCBfQ0xPTkVfTkVXUElEID0gMHgyMDAwMDAwMAorY29uc3QgX1JUTkxHUlBfSVBW
Nl9SVUxFID0gMTkKK2NvbnN0IF9FVEhFUl9NSU5fTEVOID0gKF9FVEhfWkxFTiArIF9FVEhFUl9D
UkNfTEVOKQorY29uc3QgX1BGX1JPU0UgPSAxMQorY29uc3QgX0lGTEFfUE9SVF9TRUxGID0gMjUK
K2NvbnN0IF9MSU5LX1hTVEFUU19UWVBFX0JSSURHRSA9IDEKK2NvbnN0IF9fU1lTX1NUQVRfSCA9
IDEKK2NvbnN0IF9JRkxBX0JSX0dST1VQX0FERFIgPSAyMAorY29uc3QgX0ZfU0VUU0lHID0gX19f
Rl9TRVRTSUcKK2NvbnN0IF9XU1RPUFBFRCA9IDIKK2NvbnN0IF9fUENfVkRJU0FCTEUgPSA4Citj
b25zdCBfX1NDX01RX09QRU5fTUFYID0gMjcKK2NvbnN0IF9YODZfRUZMQUdTX1BGX0JJVCA9IDIK
K2NvbnN0IF9SVE1fTkVXQUREUkxBQkVMID0gNzIKK2NvbnN0IF9TT0NLX1BBQ0tFVCA9IDEwCitj
b25zdCBfX19OUl9tcV91bmxpbmsgPSAyNDEKK2NvbnN0IF9SVE1HUlBfTkVJR0ggPSA0Citjb25z
dCBfUEZfV0FOUElQRSA9IDI1Citjb25zdCBfUlRNX0RFTEFERFIgPSAyMQorY29uc3QgX0xPQ0tf
VU4gPSA4Citjb25zdCBfUE9MTF9JTiA9IDEKK2NvbnN0IF9NQUNWTEFOX01BQ0FERFJfRkxVU0gg
PSAyCitjb25zdCBfUlRQUk9UX0ROUk9VVEVEID0gMTMKK2NvbnN0IF9NQUNWTEFOX01PREVfU09V
UkNFID0gMTYKK2NvbnN0IF9TWVNfc2V0cGdpZCA9IF9fX05SX3NldHBnaWQKK2NvbnN0IF9fX0lG
TEFfR0VORVZFX01BWCA9IDEyCitjb25zdCBfU0lPQ0FERE1VTFRJID0gMHg4OTMxCitjb25zdCBf
UlRNU0dfTkVXUk9VVEUgPSAweDIxCitjb25zdCBfRkZJX1RZUEVfQ09NUExFWCA9IDE1Citjb25z
dCBfSEFWRV9DT1NMID0gMQorY29uc3QgX05JX01BWEhPU1QgPSAxMDI1Citjb25zdCBfSEFWRV9T
WVNfTU9VTlRfSCA9IDEKK2NvbnN0IF9OT19SRUNPVkVSWSA9IDMKK2NvbnN0IF9JRkxBX1ZYTEFO
X1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxBX0JPTkRfTUlJTU9OID0gMworY29uc3QgX0lQREVGVFRM
ID0gNjQKK2NvbnN0IF9SVEFYX01UVSA9IDIKK2NvbnN0IF9FTkVUUkVTRVQgPSAxMDIKK2NvbnN0
IF9fX0ZMVF9IQVNfUVVJRVRfTkFOX18gPSAxCitjb25zdCBfSUZMQV9JTkVUX0NPTkYgPSAxCitj
b25zdCBfU0lHX0FUT01JQ19NQVggPSAoMjE0NzQ4MzY0NykKK2NvbnN0IF9TVEFfUFBTRlJFUSA9
IDB4MDAwMgorY29uc3QgX0lOX0lTRElSID0gMHg0MDAwMDAwMAorY29uc3QgX0lDTVA2X0VDSE9f
UkVQTFkgPSAxMjkKK2NvbnN0IF9UQ1hPTkMgPSAweDU0MEEKK2NvbnN0IF9SVENGX01BU1EgPSAw
eDAwNDAwMDAwCitjb25zdCBfQUZfQlJJREdFID0gX1BGX0JSSURHRQorY29uc3QgX1BSX1RJTUlO
R19USU1FU1RBTVAgPSAxCitjb25zdCBfSVBWNl9QTVRVRElTQ19PTUlUID0gNQorY29uc3QgX0lM
TF9JTExUUlAgPSA0Citjb25zdCBfSVBPUFRfUkVTRVJWRUQyID0gMHg2MAorY29uc3QgX19fTkRV
U0VST1BUX01BWCA9IDIKK2NvbnN0IF9TWU5DX0ZJTEVfUkFOR0VfV1JJVEUgPSAyCitjb25zdCBf
U1RBX0lOUyA9IDB4MDAxMAorY29uc3QgX19QT1NJWDJfQ09MTF9XRUlHSFRTX01BWCA9IDIKK2Nv
bnN0IF9fWE9QRU5fWENVX1ZFUlNJT04gPSA0Citjb25zdCBfRU5PQ1NJID0gNTAKK2NvbnN0IF9Y
QVRUUl9MSVNUX01BWCA9IDY1NTM2Citjb25zdCBfWDg2X0NSMF9ORV9CSVQgPSA1Citjb25zdCBf
U1lTX3BzZWxlY3Q2ID0gX19fTlJfcHNlbGVjdDYKK2NvbnN0IF9UT1NUT1AgPSAwMDAwNDAwCitj
b25zdCBfVElPQ1BLVF9TVE9QID0gNAorY29uc3QgX0lGTEFfQlJQT1JUX1BST1RFQ1QgPSA2Citj
b25zdCBfX1NDX1NJR05BTFMgPSAxNTgKK2NvbnN0IF9TWVNfc2V0eGF0dHIgPSBfX19OUl9zZXR4
YXR0cgorY29uc3QgX1JFTkFNRV9XSElURU9VVCA9ICgxIDw8IDIpCitjb25zdCBfSUZBX0ZfTk9E
QUQgPSAweDAyCitjb25zdCBfX0xBUkdFRklMRV9TT1VSQ0UgPSAxCitjb25zdCBfX19XSU5UX01B
WF9fID0gMHhmZmZmZmZmZgorY29uc3QgX0VQRk5PU1VQUE9SVCA9IDk2Citjb25zdCBfU1lTX3Np
Z2FsdHN0YWNrID0gX19fTlJfc2lnYWx0c3RhY2sKK2NvbnN0IF9TQ05kTEVBU1QzMiA9ICJkIgor
Y29uc3QgX0lOVDE2X1dJRFRIID0gMTYKK2NvbnN0IF9SVE5IX0ZfT05MSU5LID0gNAorY29uc3Qg
X0dBSV9XQUlUID0gMAorY29uc3QgX19fTlJfbG9va3VwX2Rjb29raWUgPSAyMTIKK2NvbnN0IF9f
X05SX21pbmNvcmUgPSAyNworY29uc3QgX0FSUEhSRF9UVU5ORUw2ID0gNzY5Citjb25zdCBfU09M
X1JYUlBDID0gMjcyCitjb25zdCBfX1BDXzJfU1lNTElOS1MgPSAyMAorY29uc3QgX0lDTVA2X0RT
VF9VTlJFQUNIX05PUk9VVEUgPSAwCitjb25zdCBfRE5fQVRUUklCID0gMHgwMDAwMDAyMAorY29u
c3QgX1BUUkFDRV9TRVRSRUdTID0gMTMKK2NvbnN0IF9fX0xQNjRfXyA9IDEKK2NvbnN0IF9GX1NF
QUxfU0VBTCA9IDB4MDAwMQorY29uc3QgX01MRF9MSVNURU5FUl9RVUVSWSA9IDEzMAorY29uc3Qg
X1NZU19pbm90aWZ5X2luaXQxID0gX19fTlJfaW5vdGlmeV9pbml0MQorY29uc3QgX19fTlJfYWNj
dCA9IDE2MworY29uc3QgX01TR19GQVNUT1BFTiA9IDUzNjg3MDkxMgorY29uc3QgX19fc2lnZXZl
bnRfdF9kZWZpbmVkID0gMQorY29uc3QgX1JUTkxHUlBfSVBWNl9NUk9VVEVfUiA9IDMxCitjb25z
dCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MREZMQUdTID0gMTEyMQorY29uc3QgX0lGTEFf
TUFDVkxBTl9VTlNQRUMgPSAwCitjb25zdCBfUEFDS0VUX0FVWERBVEEgPSA4Citjb25zdCBfSUZM
QV9CT05EX1VOU1BFQyA9IDAKK2NvbnN0IF9JRkxBX0dFTkVWRV9MQUJFTCA9IDExCitjb25zdCBf
UFJfVU5BTElHTl9TSUdCVVMgPSAyCitjb25zdCBfRl9UTE9DSyA9IDIKK2NvbnN0IF9TVEFUWF9U
WVBFID0gMHgwMDAxCitjb25zdCBfX1BPU0lYX1NQSU5fTE9DS1MgPSAyMDA4MDkKK2NvbnN0IF9Q
Rl9SWFJQQyA9IDMzCitjb25zdCBfVENQX0tFRVBJRExFID0gNAorY29uc3QgX19fVUlOVF9GQVNU
NjRfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYKK2NvbnN0IF9fX05SX2xsaXN0eGF0dHIgPSAx
OTUKK2NvbnN0IF9fX05SX3JzZXEgPSAzMzQKK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkYzMl9D
RkxBR1MgPSAxMTAwCitjb25zdCBfT19BQ0NNT0RFID0gMDAwMworY29uc3QgX1RJT0NNX1JORyA9
IDB4MDgwCitjb25zdCBfX19OUl9rZXhlY19maWxlX2xvYWQgPSAzMjAKK2NvbnN0IF9JTlJfT1BF
Tl9DVVIgPSAxMDI0Citjb25zdCBfX19OUl9ybWRpciA9IDg0Citjb25zdCBfRVRIX1BfQVgyNSA9
IDB4MDAwMgorY29uc3QgX19CSVRTX1NJR0lORk9fQ09OU1RTX0FSQ0hfSCA9IDEKK2NvbnN0IF9I
QVZFX0lOVFRZUEVTX0ggPSAxCitjb25zdCBfRURFU1RBRERSUkVRID0gODkKK2NvbnN0IF9fX05H
UkVHID0gMjMKK2NvbnN0IF9SRUdfUjEwID0gMgorY29uc3QgX1JFR19SMTEgPSAzCitjb25zdCBf
SVBWNl9GUkVFQklORCA9IDc4Citjb25zdCBfUkVHX1IxMyA9IDUKK2NvbnN0IF9fX2hhdmVfcHRo
cmVhZF9hdHRyX3QgPSAxCitjb25zdCBfUkVHX1IxNSA9IDcKK2NvbnN0IF9OSV9NQVhTRVJWID0g
MzIKK2NvbnN0IF9BUlBIUkRfSERMQyA9IF9BUlBIUkRfQ0lTQ08KK2NvbnN0IF9fX0dMSUJDX1VT
RV9JRUNfNjA1NTlfQkZQX0VYVCA9IDEKK2NvbnN0IF9QRl9VTklYID0gX1BGX0xPQ0FMCitjb25z
dCBfX19TWVNDQUxMX1dPUkRTSVpFID0gNjQKK2NvbnN0IF9TWVNfY3JlYXQgPSBfX19OUl9jcmVh
dAorY29uc3QgX1RJT0NTQ1RUWSA9IDB4NTQwRQorY29uc3QgX0ZGSV9MQVNUX0FCSSA9IDgKK2Nv
bnN0IF9OREFfTUFTVEVSID0gOQorY29uc3QgX0VUSF9QX0lFRUVQVVAgPSAweDBhMDAKK2NvbnN0
IF9QRl9JUkRBID0gMjMKK2NvbnN0IF9IQVZFX1NZU19USU1FWF9IID0gMQorY29uc3QgX19fRkxU
X0RFQ0lNQUxfRElHX18gPSA5Citjb25zdCBfX19OUl90aW1lcl9jcmVhdGUgPSAyMjIKK2NvbnN0
IF9TWVNfZ2V0cGdpZCA9IF9fX05SX2dldHBnaWQKK2NvbnN0IF9GRklfNjRfQklUX01BWCA9IDky
MjMzNzIwMzY4NTQ3NzU4MDcKK2NvbnN0IF9JRkxBX01BQ1NFQ19JQ1ZfTEVOID0gMworY29uc3Qg
X0IxODAwID0gMDAwMDAxMgorY29uc3QgX0JTMCA9IDAwMDAwMDAKK2NvbnN0IF9CUzEgPSAwMDIw
MDAwCitjb25zdCBfX1NZU19USU1FX0ggPSAxCitjb25zdCBfX1BPU0lYX0FSR19NQVggPSA0MDk2
Citjb25zdCBfX19TQ0hBUl9XSURUSF9fID0gOAorY29uc3QgX19fRkxUX1JBRElYX18gPSAyCitj
b25zdCBfWDg2X0NSM19QV1RfQklUID0gMworY29uc3QgX1BPUlRfVkRQX1JFU1BPTlNFX1VOVVNF
RF9WVElEID0gMworY29uc3QgX19fREVDMzJfRVBTSUxPTl9fID0gMUUtNgorY29uc3QgX0lGTEFf
VlhMQU5fTEVBUk5JTkcgPSA3Citjb25zdCBfRVBPTExFVCA9IDIxNDc0ODM2NDgKK2NvbnN0IF9G
X1NFVExLVzY0ID0gNworY29uc3QgX19fVVNFX0FURklMRSA9IDEKK2NvbnN0IF9TX0lSRUFEID0g
X1NfSVJVU1IKK2NvbnN0IF9QVFJBQ0VfU0VURlBSRUdTID0gMTUKK2NvbnN0IF9JRkZfUlVOTklO
RyA9IDY0Citjb25zdCBfSEFWRV9VVElNRU5TQVQgPSAxCitjb25zdCBfX1BDX1NZTUxJTktfTUFY
ID0gMTkKK2NvbnN0IF9YODZfRUZMQUdTX1pGX0JJVCA9IDYKK2NvbnN0IF9GX1NFVExLNjQgPSA2
Citjb25zdCBfX1BPU0lYX1BBVEhfTUFYID0gMjU2Citjb25zdCBfSU5fQ0xBU1NBX05TSElGVCA9
IDI0Citjb25zdCBfUEFDS0VUX1RJTUVTVEFNUCA9IDE3Citjb25zdCBfX19QT1NJWF9GQURWX0RP
TlRORUVEID0gNAorY29uc3QgX0lQUFJPVE9fTVRQID0gOTIKK3R5cGUgX2lmYWNlIHN0cnVjdCB7
fQordHlwZSBfX19sb2NhbGVfZGF0YSBzdHJ1Y3Qge30KK2NvbnN0IEVNVUxUSUhPUCA9IEVycm5v
KF9FTVVMVElIT1ApCitjb25zdCBFVU5BVENIID0gRXJybm8oX0VVTkFUQ0gpCitjb25zdCBFQUZO
T1NVUFBPUlQgPSBFcnJubyhfRUFGTk9TVVBQT1JUKQorY29uc3QgRVJFTUNIRyA9IEVycm5vKF9F
UkVNQ0hHKQorY29uc3QgRUFDQ0VTID0gRXJybm8oX0VBQ0NFUykKK2NvbnN0IEVERVNUQUREUlJF
USA9IEVycm5vKF9FREVTVEFERFJSRVEpCitjb25zdCBFSUxTRVEgPSBFcnJubyhfRUlMU0VRKQor
Y29uc3QgRVNQSVBFID0gRXJybm8oX0VTUElQRSkKK2NvbnN0IEVNTElOSyA9IEVycm5vKF9FTUxJ
TkspCitjb25zdCBFT1dORVJERUFEID0gRXJybm8oX0VPV05FUkRFQUQpCitjb25zdCBFTk9UVFkg
PSBFcnJubyhfRU5PVFRZKQorY29uc3QgRUJBREUgPSBFcnJubyhfRUJBREUpCitjb25zdCBFQkFE
RiA9IEVycm5vKF9FQkFERikKK2NvbnN0IEVCQURSID0gRXJybm8oX0VCQURSKQorY29uc3QgRUFE
ViA9IEVycm5vKF9FQURWKQorY29uc3QgRVJBTkdFID0gRXJybm8oX0VSQU5HRSkKK2NvbnN0IEVD
QU5DRUxFRCA9IEVycm5vKF9FQ0FOQ0VMRUQpCitjb25zdCBFVFhUQlNZID0gRXJybm8oX0VUWFRC
U1kpCitjb25zdCBFTk9NRU0gPSBFcnJubyhfRU5PTUVNKQorY29uc3QgRUlOUFJPR1JFU1MgPSBF
cnJubyhfRUlOUFJPR1JFU1MpCitjb25zdCBFTk9UQkxLID0gRXJybm8oX0VOT1RCTEspCitjb25z
dCBFUFJPVE9UWVBFID0gRXJybm8oX0VQUk9UT1RZUEUpCitjb25zdCBFUkVTVEFSVCA9IEVycm5v
KF9FUkVTVEFSVCkKK2NvbnN0IEVJU05BTSA9IEVycm5vKF9FSVNOQU0pCitjb25zdCBFTk9NU0cg
PSBFcnJubyhfRU5PTVNHKQorY29uc3QgRUFMUkVBRFkgPSBFcnJubyhfRUFMUkVBRFkpCitjb25z
dCBFVElNRURPVVQgPSBFcnJubyhfRVRJTUVET1VUKQorY29uc3QgRU5PREFUQSA9IEVycm5vKF9F
Tk9EQVRBKQorY29uc3QgRUlOVFIgPSBFcnJubyhfRUlOVFIpCitjb25zdCBFTk9MSU5LID0gRXJy
bm8oX0VOT0xJTkspCitjb25zdCBFUEVSTSA9IEVycm5vKF9FUEVSTSkKK2NvbnN0IEVMT09QID0g
RXJybm8oX0VMT09QKQorY29uc3QgRU5FVERPV04gPSBFcnJubyhfRU5FVERPV04pCitjb25zdCBF
U1RBTEUgPSBFcnJubyhfRVNUQUxFKQorY29uc3QgRU5PU1IgPSBFcnJubyhfRU5PU1IpCitjb25z
dCBFTE5STkcgPSBFcnJubyhfRUxOUk5HKQorY29uc3QgRVBJUEUgPSBFcnJubyhfRVBJUEUpCitj
b25zdCBFQ0hJTEQgPSBFcnJubyhfRUNISUxEKQorY29uc3QgRUJBRE1TRyA9IEVycm5vKF9FQkFE
TVNHKQorY29uc3QgRUJGT05UID0gRXJybm8oX0VCRk9OVCkKK2NvbnN0IEVSRU1PVEUgPSBFcnJu
byhfRVJFTU9URSkKK2NvbnN0IEVUT09NQU5ZUkVGUyA9IEVycm5vKF9FVE9PTUFOWVJFRlMpCitj
b25zdCBFTk9ORVQgPSBFcnJubyhfRU5PTkVUKQorY29uc3QgRVhGVUxMID0gRXJybm8oX0VYRlVM
TCkKK2NvbnN0IEVOT1RFTVBUWSA9IEVycm5vKF9FTk9URU1QVFkpCitjb25zdCBFTk9UTkFNID0g
RXJybm8oX0VOT1ROQU0pCitjb25zdCBFS0VZUkVKRUNURUQgPSBFcnJubyhfRUtFWVJFSkVDVEVE
KQorY29uc3QgRU5PQ1NJID0gRXJybm8oX0VOT0NTSSkKK2NvbnN0IEVBRERSSU5VU0UgPSBFcnJu
byhfRUFERFJJTlVTRSkKK2NvbnN0IEVORVRSRVNFVCA9IEVycm5vKF9FTkVUUkVTRVQpCitjb25z
dCBFSVNESVIgPSBFcnJubyhfRUlTRElSKQorY29uc3QgRUlEUk0gPSBFcnJubyhfRUlEUk0pCitj
b25zdCBFTk9UU09DSyA9IEVycm5vKF9FTk9UU09DSykKK2NvbnN0IEVIT1NUVU5SRUFDSCA9IEVy
cm5vKF9FSE9TVFVOUkVBQ0gpCitjb25zdCBFQkFERkQgPSBFcnJubyhfRUJBREZEKQorY29uc3Qg
RUwzSExUID0gRXJybm8oX0VMM0hMVCkKK2NvbnN0IEVMMkhMVCA9IEVycm5vKF9FTDJITFQpCitj
b25zdCBFTk9LRVkgPSBFcnJubyhfRU5PS0VZKQorY29uc3QgRUlOVkFMID0gRXJybm8oX0VJTlZB
TCkKK2NvbnN0IEVTSFVURE9XTiA9IEVycm5vKF9FU0hVVERPV04pCitjb25zdCBFTk9NRURJVU0g
PSBFcnJubyhfRU5PTUVESVVNKQorY29uc3QgRUxJQlNDTiA9IEVycm5vKF9FTElCU0NOKQorY29u
c3QgRU5BVkFJTCA9IEVycm5vKF9FTkFWQUlMKQorY29uc3QgRU9WRVJGTE9XID0gRXJybm8oX0VP
VkVSRkxPVykKK2NvbnN0IEVVQ0xFQU4gPSBFcnJubyhfRVVDTEVBTikKK2NvbnN0IEVCVVNZID0g
RXJybm8oX0VCVVNZKQorY29uc3QgRVBST1RPID0gRXJybm8oX0VQUk9UTykKK2NvbnN0IEVOT0RF
ViA9IEVycm5vKF9FTk9ERVYpCitjb25zdCBFS0VZRVhQSVJFRCA9IEVycm5vKF9FS0VZRVhQSVJF
RCkKK2NvbnN0IEVST0ZTID0gRXJybm8oX0VST0ZTKQorY29uc3QgRUxJQkFDQyA9IEVycm5vKF9F
TElCQUNDKQorY29uc3QgRUhXUE9JU09OID0gRXJybm8oX0VIV1BPSVNPTikKK2NvbnN0IEUyQklH
ID0gRXJybm8oX0UyQklHKQorY29uc3QgRURFQURMSyA9IEVycm5vKF9FREVBRExLKQorY29uc3Qg
RUwzUlNUID0gRXJybm8oX0VMM1JTVCkKK2NvbnN0IEVOT1RESVIgPSBFcnJubyhfRU5PVERJUikK
K2NvbnN0IEVDT05OUkVTRVQgPSBFcnJubyhfRUNPTk5SRVNFVCkKK2NvbnN0IEVOWElPID0gRXJy
bm8oX0VOWElPKQorY29uc3QgRUJBRFJRQyA9IEVycm5vKF9FQkFEUlFDKQorY29uc3QgRU5PU1RS
ID0gRXJybm8oX0VOT1NUUikKK2NvbnN0IEVOQU1FVE9PTE9ORyA9IEVycm5vKF9FTkFNRVRPT0xP
TkcpCitjb25zdCBFU09DS1ROT1NVUFBPUlQgPSBFcnJubyhfRVNPQ0tUTk9TVVBQT1JUKQorY29u
c3QgRUxJQkVYRUMgPSBFcnJubyhfRUxJQkVYRUMpCitjb25zdCBFRE9URE9UID0gRXJybm8oX0VE
T1RET1QpCitjb25zdCBFQUREUk5PVEFWQUlMID0gRXJybm8oX0VBRERSTk9UQVZBSUwpCitjb25z
dCBFVElNRSA9IEVycm5vKF9FVElNRSkKK2NvbnN0IEVQUk9UT05PU1VQUE9SVCA9IEVycm5vKF9F
UFJPVE9OT1NVUFBPUlQpCitjb25zdCBFTk9UUkVDT1ZFUkFCTEUgPSBFcnJubyhfRU5PVFJFQ09W
RVJBQkxFKQorY29uc3QgRUlPID0gRXJybm8oX0VJTykKK2NvbnN0IEVORVRVTlJFQUNIID0gRXJy
bm8oX0VORVRVTlJFQUNIKQorY29uc3QgRVhERVYgPSBFcnJubyhfRVhERVYpCitjb25zdCBFRFFV
T1QgPSBFcnJubyhfRURRVU9UKQorY29uc3QgRVJFTU9URUlPID0gRXJybm8oX0VSRU1PVEVJTykK
K2NvbnN0IEVOT1NQQyA9IEVycm5vKF9FTk9TUEMpCitjb25zdCBFTk9FWEVDID0gRXJybm8oX0VO
T0VYRUMpCitjb25zdCBFTVNHU0laRSA9IEVycm5vKF9FTVNHU0laRSkKK2NvbnN0IEVET00gPSBF
cnJubyhfRURPTSkKK2NvbnN0IEVGQklHID0gRXJybm8oX0VGQklHKQorY29uc3QgRVNSQ0ggPSBF
cnJubyhfRVNSQ0gpCitjb25zdCBFQ0hSTkcgPSBFcnJubyhfRUNIUk5HKQorY29uc3QgRUhPU1RE
T1dOID0gRXJybm8oX0VIT1NURE9XTikKK2NvbnN0IEVOT0xDSyA9IEVycm5vKF9FTk9MQ0spCitj
b25zdCBFTkZJTEUgPSBFcnJubyhfRU5GSUxFKQorY29uc3QgRU5PU1lTID0gRXJybm8oX0VOT1NZ
UykKK2NvbnN0IEVOT1RDT05OID0gRXJybm8oX0VOT1RDT05OKQorY29uc3QgRVBGTk9TVVBQT1JU
ID0gRXJybm8oX0VQRk5PU1VQUE9SVCkKK2NvbnN0IEVOT1RTVVAgPSBFcnJubyhfRU5PVFNVUCkK
K2NvbnN0IEVTUk1OVCA9IEVycm5vKF9FU1JNTlQpCitjb25zdCBFREVBRExPQ0sgPSBFcnJubyhf
RURFQURMT0NLKQorY29uc3QgRUNPTk5BQk9SVEVEID0gRXJybm8oX0VDT05OQUJPUlRFRCkKK2Nv
bnN0IEVOT0FOTyA9IEVycm5vKF9FTk9BTk8pCitjb25zdCBFSVNDT05OID0gRXJybm8oX0VJU0NP
Tk4pCitjb25zdCBFVVNFUlMgPSBFcnJubyhfRVVTRVJTKQorY29uc3QgRU5PUFJPVE9PUFQgPSBF
cnJubyhfRU5PUFJPVE9PUFQpCitjb25zdCBFQ09NTSA9IEVycm5vKF9FQ09NTSkKK2NvbnN0IEVN
RklMRSA9IEVycm5vKF9FTUZJTEUpCitjb25zdCBFUkZLSUxMID0gRXJybm8oX0VSRktJTEwpCitj
b25zdCBFTk9CVUZTID0gRXJybm8oX0VOT0JVRlMpCitjb25zdCBFRkFVTFQgPSBFcnJubyhfRUZB
VUxUKQorY29uc3QgRVdPVUxEQkxPQ0sgPSBFcnJubyhfRVdPVUxEQkxPQ0spCitjb25zdCBFTElC
QkFEID0gRXJybm8oX0VMSUJCQUQpCitjb25zdCBFU1RSUElQRSA9IEVycm5vKF9FU1RSUElQRSkK
K2NvbnN0IEVDT05OUkVGVVNFRCA9IEVycm5vKF9FQ09OTlJFRlVTRUQpCitjb25zdCBFQUdBSU4g
PSBFcnJubyhfRUFHQUlOKQorY29uc3QgRUxJQk1BWCA9IEVycm5vKF9FTElCTUFYKQorY29uc3Qg
RUVYSVNUID0gRXJybm8oX0VFWElTVCkKK2NvbnN0IEVMMk5TWU5DID0gRXJybm8oX0VMMk5TWU5D
KQorY29uc3QgRU5PRU5UID0gRXJybm8oX0VOT0VOVCkKK2NvbnN0IEVOT1BLRyA9IEVycm5vKF9F
Tk9QS0cpCitjb25zdCBFQkFEU0xUID0gRXJybm8oX0VCQURTTFQpCitjb25zdCBFS0VZUkVWT0tF
RCA9IEVycm5vKF9FS0VZUkVWT0tFRCkKK2NvbnN0IEVOT1RVTklRID0gRXJybm8oX0VOT1RVTklR
KQorY29uc3QgRU9QTk9UU1VQUCA9IEVycm5vKF9FT1BOT1RTVVBQKQorY29uc3QgRU1FRElVTVRZ
UEUgPSBFcnJubyhfRU1FRElVTVRZUEUpCitjb25zdCBPX0FQUEVORCA9IF9PX0FQUEVORAorY29u
c3QgRl9HRVRMSzY0ID0gX0ZfR0VUTEs2NAorY29uc3QgRkRfU0VUU0laRSA9IF9GRF9TRVRTSVpF
Citjb25zdCBGX0VYTENLID0gX0ZfRVhMQ0sKK2NvbnN0IEZfQUREX1NFQUxTID0gX0ZfQUREX1NF
QUxTCitjb25zdCBGX1NFVFBJUEVfU1ogPSBfRl9TRVRQSVBFX1NaCitjb25zdCBPX1NZTkMgPSBf
T19TWU5DCitjb25zdCBGX1NFQUxfU0hSSU5LID0gX0ZfU0VBTF9TSFJJTksKK2NvbnN0IEZfV1JM
Q0sgPSBfRl9XUkxDSworY29uc3QgT19ESVJFQ1RPUlkgPSBfT19ESVJFQ1RPUlkKK2NvbnN0IE9f
Tk9BVElNRSA9IF9PX05PQVRJTUUKK2NvbnN0IEZfVUxPQ0sgPSBfRl9VTE9DSworY29uc3QgRl9H
RVRPV04gPSBfRl9HRVRPV04KK2NvbnN0IEZfTE9DSyA9IF9GX0xPQ0sKK2NvbnN0IE9fQ0xPRVhF
QyA9IF9PX0NMT0VYRUMKK2NvbnN0IE9fTkRFTEFZID0gX09fTkRFTEFZCitjb25zdCBPX0RJUkVD
VCA9IF9PX0RJUkVDVAorY29uc3QgRl9HRVRTSUcgPSBfRl9HRVRTSUcKK2NvbnN0IE9fVE1QRklM
RSA9IF9PX1RNUEZJTEUKK2NvbnN0IEZfUkRMQ0sgPSBfRl9SRExDSworY29uc3QgT19SU1lOQyA9
IF9PX1JTWU5DCitjb25zdCBGX1NITENLID0gX0ZfU0hMQ0sKK2NvbnN0IE9fUEFUSCA9IF9PX1BB
VEgKK2NvbnN0IE9fRFNZTkMgPSBfT19EU1lOQworY29uc3QgT19OT0ZPTExPVyA9IF9PX05PRk9M
TE9XCitjb25zdCBGX09GRF9TRVRMS1cgPSBfRl9PRkRfU0VUTEtXCitjb25zdCBPX1dST05MWSA9
IF9PX1dST05MWQorY29uc3QgT19OT05CTE9DSyA9IF9PX05PTkJMT0NLCitjb25zdCBGX0dFVF9T
RUFMUyA9IF9GX0dFVF9TRUFMUworY29uc3QgRl9TRUFMX1dSSVRFID0gX0ZfU0VBTF9XUklURQor
Y29uc3QgT19DUkVBVCA9IF9PX0NSRUFUCitjb25zdCBGX0dFVF9GSUxFX1JXX0hJTlQgPSBfRl9H
RVRfRklMRV9SV19ISU5UCitjb25zdCBGX05PVElGWSA9IF9GX05PVElGWQorY29uc3QgT19SRFdS
ID0gX09fUkRXUgorY29uc3QgRl9TRVRfRklMRV9SV19ISU5UID0gX0ZfU0VUX0ZJTEVfUldfSElO
VAorY29uc3QgRl9TRVRfUldfSElOVCA9IF9GX1NFVF9SV19ISU5UCitjb25zdCBGX09XTkVSX1BH
UlAgPSBfRl9PV05FUl9QR1JQCitjb25zdCBGX0RVUEZEID0gX0ZfRFVQRkQKK2NvbnN0IEZfU0VU
RkQgPSBfRl9TRVRGRAorY29uc3QgRl9TRVRGTCA9IF9GX1NFVEZMCitjb25zdCBGX0dFVExFQVNF
ID0gX0ZfR0VUTEVBU0UKK2NvbnN0IE9fRVhDTCA9IF9PX0VYQ0wKK2NvbnN0IEZfT0sgPSBfRl9P
SworY29uc3QgRl9HRVRQSVBFX1NaID0gX0ZfR0VUUElQRV9TWgorY29uc3QgRl9TRUFMX0dST1cg
PSBfRl9TRUFMX0dST1cKK2NvbnN0IEZfVEVTVCA9IF9GX1RFU1QKK2NvbnN0IEZfU0VUTEsgPSBf
Rl9TRVRMSworY29uc3QgRl9HRVRPV05fRVggPSBfRl9HRVRPV05fRVgKK2NvbnN0IE9fRlNZTkMg
PSBfT19GU1lOQworY29uc3QgT19SRE9OTFkgPSBfT19SRE9OTFkKK2NvbnN0IEZfRFVQRkRfQ0xP
RVhFQyA9IF9GX0RVUEZEX0NMT0VYRUMKK2NvbnN0IEZfT0ZEX1NFVExLID0gX0ZfT0ZEX1NFVExL
Citjb25zdCBGX0dFVEZEID0gX0ZfR0VURkQKK2NvbnN0IEZfR0VURkwgPSBfRl9HRVRGTAorY29u
c3QgRl9PV05FUl9QSUQgPSBfRl9PV05FUl9QSUQKK2NvbnN0IE9fTEFSR0VGSUxFID0gX09fTEFS
R0VGSUxFCitjb25zdCBGX1NFVE9XTl9FWCA9IF9GX1NFVE9XTl9FWAorY29uc3QgRl9HRVRMSyA9
IF9GX0dFVExLCitjb25zdCBGX1NFVExLVyA9IF9GX1NFVExLVworY29uc3QgRl9PV05FUl9HSUQg
PSBfRl9PV05FUl9HSUQKK2NvbnN0IEZEX0NMT0VYRUMgPSBfRkRfQ0xPRVhFQworY29uc3QgRl9H
RVRfUldfSElOVCA9IF9GX0dFVF9SV19ISU5UCitjb25zdCBPX05PQ1RUWSA9IF9PX05PQ1RUWQor
Y29uc3QgRl9PRkRfR0VUTEsgPSBfRl9PRkRfR0VUTEsKK2NvbnN0IEZfU0VUTEVBU0UgPSBfRl9T
RVRMRUFTRQorY29uc3QgT19BU1lOQyA9IF9PX0FTWU5DCitjb25zdCBGX1NFVE9XTiA9IF9GX1NF
VE9XTgorY29uc3QgT19UUlVOQyA9IF9PX1RSVU5DCitjb25zdCBGX09XTkVSX1RJRCA9IF9GX09X
TkVSX1RJRAorY29uc3QgRl9VTkxDSyA9IF9GX1VOTENLCitjb25zdCBGX1NFVFNJRyA9IF9GX1NF
VFNJRworY29uc3QgRl9TRUFMX1NFQUwgPSBfRl9TRUFMX1NFQUwKK2NvbnN0IEZfVExPQ0sgPSBf
Rl9UTE9DSworY29uc3QgT19BQ0NNT0RFID0gX09fQUNDTU9ERQorY29uc3QgRl9TRVRMS1c2NCA9
IF9GX1NFVExLVzY0Citjb25zdCBGX1NFVExLNjQgPSBfRl9TRVRMSzY0Cit0eXBlIEZsb2NrX3Qg
c3RydWN0IHsgVHlwZSBpbnQxNjsgV2hlbmNlIGludDE2OyBTdGFydCBpbnQ2NDsgTGVuIGludDY0
OyBQaWQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9Citjb25zdCBTSUdJTEwgPSBTaWdu
YWwoX1NJR0lMTCkKK2NvbnN0IFNJR0NMRCA9IFNpZ25hbChfU0lHQ0xEKQorY29uc3QgU0lHS0lM
TCA9IFNpZ25hbChfU0lHS0lMTCkKK2NvbnN0IFNJR1RTVFAgPSBTaWduYWwoX1NJR1RTVFApCitj
b25zdCBTSUdJT1QgPSBTaWduYWwoX1NJR0lPVCkKK2NvbnN0IFNJR1NFR1YgPSBTaWduYWwoX1NJ
R1NFR1YpCitjb25zdCBTSUdYQ1BVID0gU2lnbmFsKF9TSUdYQ1BVKQorY29uc3QgU0lHSU5UID0g
U2lnbmFsKF9TSUdJTlQpCitjb25zdCBTSUdJTyA9IFNpZ25hbChfU0lHSU8pCitjb25zdCBTSUdC
VVMgPSBTaWduYWwoX1NJR0JVUykKK2NvbnN0IFNJR1BJUEUgPSBTaWduYWwoX1NJR1BJUEUpCitj
b25zdCBTSUdTVEtGTFQgPSBTaWduYWwoX1NJR1NUS0ZMVCkKK2NvbnN0IFNJR1RSQVAgPSBTaWdu
YWwoX1NJR1RSQVApCitjb25zdCBTSUdURVJNID0gU2lnbmFsKF9TSUdURVJNKQorY29uc3QgU0lH
RlBFID0gU2lnbmFsKF9TSUdGUEUpCitjb25zdCBTSUdWVEFMUk0gPSBTaWduYWwoX1NJR1ZUQUxS
TSkKK2NvbnN0IFNJR1BXUiA9IFNpZ25hbChfU0lHUFdSKQorY29uc3QgU0lHU1RLU1ogPSBTaWdu
YWwoX1NJR1NUS1NaKQorY29uc3QgU0lHVFRJTiA9IFNpZ25hbChfU0lHVFRJTikKK2NvbnN0IFNJ
R1VTUjEgPSBTaWduYWwoX1NJR1VTUjEpCitjb25zdCBTSUdVU1IyID0gU2lnbmFsKF9TSUdVU1Iy
KQorY29uc3QgU0lHQUxSTSA9IFNpZ25hbChfU0lHQUxSTSkKK2NvbnN0IFNJR1RUT1UgPSBTaWdu
YWwoX1NJR1RUT1UpCitjb25zdCBTSUdQUk9GID0gU2lnbmFsKF9TSUdQUk9GKQorY29uc3QgU0lH
Q09OVCA9IFNpZ25hbChfU0lHQ09OVCkKK2NvbnN0IFNJR0FCUlQgPSBTaWduYWwoX1NJR0FCUlQp
Citjb25zdCBTSUdVUkcgPSBTaWduYWwoX1NJR1VSRykKK2NvbnN0IFNJR0hVUCA9IFNpZ25hbChf
U0lHSFVQKQorY29uc3QgU0lHV0lOQ0ggPSBTaWduYWwoX1NJR1dJTkNIKQorY29uc3QgU0lHQ0hM
RCA9IFNpZ25hbChfU0lHQ0hMRCkKK2NvbnN0IFNJR1NZUyA9IFNpZ25hbChfU0lHU1lTKQorY29u
c3QgU0lHWEZTWiA9IFNpZ25hbChfU0lHWEZTWikKK2NvbnN0IFNJR1NUT1AgPSBTaWduYWwoX1NJ
R1NUT1ApCitjb25zdCBTSUdRVUlUID0gU2lnbmFsKF9TSUdRVUlUKQorY29uc3QgU0lHUE9MTCA9
IFNpZ25hbChfU0lHUE9MTCkKK2NvbnN0IFNZU19VU0VMSUIgPSBfU1lTX3VzZWxpYgorY29uc3Qg
U1lTX0ZUUlVOQ0FURSA9IF9TWVNfZnRydW5jYXRlCitjb25zdCBTWVNfTUtOT0RBVCA9IF9TWVNf
bWtub2RhdAorY29uc3QgU1lTX0VQT0xMX0NUTF9PTEQgPSBfU1lTX2Vwb2xsX2N0bF9vbGQKK2Nv
bnN0IFNZU19NVU5MT0NLID0gX1NZU19tdW5sb2NrCitjb25zdCBTWVNfU1RBVEZTID0gX1NZU19z
dGF0ZnMKK2NvbnN0IFNZU19TV0FQT0ZGID0gX1NZU19zd2Fwb2ZmCitjb25zdCBTWVNfR0VUU09D
S09QVCA9IF9TWVNfZ2V0c29ja29wdAorY29uc3QgU1lTX1VNT1VOVDIgPSBfU1lTX3Vtb3VudDIK
K2NvbnN0IFNZU19GUkVNT1ZFWEFUVFIgPSBfU1lTX2ZyZW1vdmV4YXR0cgorY29uc3QgU1lTX0ZT
RVRYQVRUUiA9IF9TWVNfZnNldHhhdHRyCitjb25zdCBTWVNfUFJDVEwgPSBfU1lTX3ByY3RsCitj
b25zdCBTWVNfRVhFQ1ZFID0gX1NZU19leGVjdmUKK2NvbnN0IFNZU19TRVRSRVNVSUQgPSBfU1lT
X3NldHJlc3VpZAorY29uc3QgU1lTX1RFRSA9IF9TWVNfdGVlCitjb25zdCBTWVNfTElTVEVOID0g
X1NZU19saXN0ZW4KK2NvbnN0IFNZU19HRVRJVElNRVIgPSBfU1lTX2dldGl0aW1lcgorY29uc3Qg
U1lTX0dFVFBHUlAgPSBfU1lTX2dldHBncnAKK2NvbnN0IFNZU19QS0VZX0ZSRUUgPSBfU1lTX3Br
ZXlfZnJlZQorY29uc3QgU1lTX0dFVERFTlRTNjQgPSBfU1lTX2dldGRlbnRzNjQKK2NvbnN0IFNZ
U19HRVRQUklPUklUWSA9IF9TWVNfZ2V0cHJpb3JpdHkKK2NvbnN0IFNZU19TRVRfUk9CVVNUX0xJ
U1QgPSBfU1lTX3NldF9yb2J1c3RfbGlzdAorY29uc3QgU1lTX1BST0NFU1NfVk1fUkVBRFYgPSBf
U1lTX3Byb2Nlc3Nfdm1fcmVhZHYKK2NvbnN0IFNZU19SVF9TSUdTVVNQRU5EID0gX1NZU19ydF9z
aWdzdXNwZW5kCitjb25zdCBTWVNfR0VUUEVFUk5BTUUgPSBfU1lTX2dldHBlZXJuYW1lCitjb25z
dCBTWVNfR0VURUdJRCA9IF9TWVNfZ2V0ZWdpZAorY29uc3QgU1lTX0dFVFNJRCA9IF9TWVNfZ2V0
c2lkCitjb25zdCBTWVNfUkVBRExJTktBVCA9IF9TWVNfcmVhZGxpbmthdAorY29uc3QgU1lTX01T
R0NUTCA9IF9TWVNfbXNnY3RsCitjb25zdCBTWVNfU0lHTkFMRkQ0ID0gX1NZU19zaWduYWxmZDQK
K2NvbnN0IFNZU19BQ0NFU1MgPSBfU1lTX2FjY2VzcworY29uc3QgU1lTX0dFVF9ST0JVU1RfTElT
VCA9IF9TWVNfZ2V0X3JvYnVzdF9saXN0Citjb25zdCBTWVNfTVFfTk9USUZZID0gX1NZU19tcV9u
b3RpZnkKK2NvbnN0IFNZU19DUkVBVEVfTU9EVUxFID0gX1NZU19jcmVhdGVfbW9kdWxlCitjb25z
dCBTWVNfUElWT1RfUk9PVCA9IF9TWVNfcGl2b3Rfcm9vdAorY29uc3QgU1lTX0lPUFJJT19TRVQg
PSBfU1lTX2lvcHJpb19zZXQKK2NvbnN0IFNZU19VTUFTSyA9IF9TWVNfdW1hc2sKK2NvbnN0IFNZ
U19SRUNWTVNHID0gX1NZU19yZWN2bXNnCitjb25zdCBTWVNfUFBPTEwgPSBfU1lTX3Bwb2xsCitj
b25zdCBTWVNfTFNFRUsgPSBfU1lTX2xzZWVrCitjb25zdCBTWVNfUFdSSVRFVjIgPSBfU1lTX3B3
cml0ZXYyCitjb25zdCBTWVNfUFJFQUQ2NCA9IF9TWVNfcHJlYWQ2NAorY29uc3QgU1lTX1NFTUNU
TCA9IF9TWVNfc2VtY3RsCitjb25zdCBTWVNfRVBPTExfQ1JFQVRFMSA9IF9TWVNfZXBvbGxfY3Jl
YXRlMQorY29uc3QgU1lTX1JUX1NJR1BFTkRJTkcgPSBfU1lTX3J0X3NpZ3BlbmRpbmcKK2NvbnN0
IFNZU19SRU5BTUVBVDIgPSBfU1lTX3JlbmFtZWF0MgorY29uc3QgU1lTX0tFWEVDX0ZJTEVfTE9B
RCA9IF9TWVNfa2V4ZWNfZmlsZV9sb2FkCitjb25zdCBTWVNfRVBPTExfUFdBSVQgPSBfU1lTX2Vw
b2xsX3B3YWl0Citjb25zdCBTWVNfVElNRVJfREVMRVRFID0gX1NZU190aW1lcl9kZWxldGUKK2Nv
bnN0IFNZU19TRVRfVElEX0FERFJFU1MgPSBfU1lTX3NldF90aWRfYWRkcmVzcworY29uc3QgU1lT
X0dFVFJFU1VJRCA9IF9TWVNfZ2V0cmVzdWlkCitjb25zdCBTWVNfU0NIRURfWUlFTEQgPSBfU1lT
X3NjaGVkX3lpZWxkCitjb25zdCBTWVNfQURKVElNRVggPSBfU1lTX2FkanRpbWV4Citjb25zdCBT
WVNfUFdSSVRFNjQgPSBfU1lTX3B3cml0ZTY0Citjb25zdCBTWVNfU0VUSVRJTUVSID0gX1NZU19z
ZXRpdGltZXIKK2NvbnN0IFNZU19NUV9PUEVOID0gX1NZU19tcV9vcGVuCitjb25zdCBTWVNfQ0xP
Q0tfR0VUUkVTID0gX1NZU19jbG9ja19nZXRyZXMKK2NvbnN0IFNZU19JT19QR0VURVZFTlRTID0g
X1NZU19pb19wZ2V0ZXZlbnRzCitjb25zdCBTWVNfTVNHUkNWID0gX1NZU19tc2dyY3YKK2NvbnN0
IFNZU19FUE9MTF9DUkVBVEUgPSBfU1lTX2Vwb2xsX2NyZWF0ZQorY29uc3QgU1lTX0dFVERFTlRT
ID0gX1NZU19nZXRkZW50cworY29uc3QgU1lTX0dFVFVJRCA9IF9TWVNfZ2V0dWlkCitjb25zdCBT
WVNfV0FJVDQgPSBfU1lTX3dhaXQ0Citjb25zdCBTWVNfTkFNRV9UT19IQU5ETEVfQVQgPSBfU1lT
X25hbWVfdG9faGFuZGxlX2F0Citjb25zdCBTWVNfRVBPTExfV0FJVF9PTEQgPSBfU1lTX2Vwb2xs
X3dhaXRfb2xkCitjb25zdCBTWVNfU1lTRlMgPSBfU1lTX3N5c2ZzCitjb25zdCBTWVNfU0VNR0VU
ID0gX1NZU19zZW1nZXQKK2NvbnN0IFNZU19QS0VZX0FMTE9DID0gX1NZU19wa2V5X2FsbG9jCitj
b25zdCBTWVNfUEVSU09OQUxJVFkgPSBfU1lTX3BlcnNvbmFsaXR5Citjb25zdCBTWVNfUFJFQURW
ID0gX1NZU19wcmVhZHYKK2NvbnN0IFNZU19JT1BSSU9fR0VUID0gX1NZU19pb3ByaW9fZ2V0Citj
b25zdCBTWVNfSU5JVF9NT0RVTEUgPSBfU1lTX2luaXRfbW9kdWxlCitjb25zdCBTWVNfTEdFVFhB
VFRSID0gX1NZU19sZ2V0eGF0dHIKK2NvbnN0IFNZU19STURJUiA9IF9TWVNfcm1kaXIKK2NvbnN0
IFNZU19TRVRSRVNHSUQgPSBfU1lTX3NldHJlc2dpZAorY29uc3QgU1lTX1FVRVJZX01PRFVMRSA9
IF9TWVNfcXVlcnlfbW9kdWxlCitjb25zdCBTWVNfVElNRVJfR0VUT1ZFUlJVTiA9IF9TWVNfdGlt
ZXJfZ2V0b3ZlcnJ1bgorY29uc3QgU1lTX0ZTWU5DID0gX1NZU19mc3luYworY29uc3QgU1lTX0ZB
Tk9USUZZX01BUksgPSBfU1lTX2Zhbm90aWZ5X21hcmsKK2NvbnN0IFNZU19HRVRUSU1FT0ZEQVkg
PSBfU1lTX2dldHRpbWVvZmRheQorY29uc3QgU1lTX1NZTkNfRklMRV9SQU5HRSA9IF9TWVNfc3lu
Y19maWxlX3JhbmdlCitjb25zdCBTWVNfVVNFUkZBVUxURkQgPSBfU1lTX3VzZXJmYXVsdGZkCitj
b25zdCBTWVNfTUlHUkFURV9QQUdFUyA9IF9TWVNfbWlncmF0ZV9wYWdlcworY29uc3QgU1lTX1NQ
TElDRSA9IF9TWVNfc3BsaWNlCitjb25zdCBTWVNfTUxPQ0tBTEwgPSBfU1lTX21sb2NrYWxsCitj
b25zdCBTWVNfU0VUX1RIUkVBRF9BUkVBID0gX1NZU19zZXRfdGhyZWFkX2FyZWEKK2NvbnN0IFNZ
U19DT1BZX0ZJTEVfUkFOR0UgPSBfU1lTX2NvcHlfZmlsZV9yYW5nZQorY29uc3QgU1lTX09QRU5f
QllfSEFORExFX0FUID0gX1NZU19vcGVuX2J5X2hhbmRsZV9hdAorY29uc3QgU1lTX01BRFZJU0Ug
PSBfU1lTX21hZHZpc2UKK2NvbnN0IFNZU19JT19TRVRVUCA9IF9TWVNfaW9fc2V0dXAKK2NvbnN0
IFNZU19LRVlDVEwgPSBfU1lTX2tleWN0bAorY29uc3QgU1lTX1NFVEdJRCA9IF9TWVNfc2V0Z2lk
Citjb25zdCBTWVNfRkFDQ0VTU0FUID0gX1NZU19mYWNjZXNzYXQKK2NvbnN0IFNZU19GQ0hNT0RB
VCA9IF9TWVNfZmNobW9kYXQKK2NvbnN0IFNZU19DTE9DS19TRVRUSU1FID0gX1NZU19jbG9ja19z
ZXR0aW1lCitjb25zdCBTWVNfR0VUX1RIUkVBRF9BUkVBID0gX1NZU19nZXRfdGhyZWFkX2FyZWEK
K2NvbnN0IFNZU19ORVdGU1RBVEFUID0gX1NZU19uZXdmc3RhdGF0Citjb25zdCBTWVNfU0NIRURf
U0VUQUZGSU5JVFkgPSBfU1lTX3NjaGVkX3NldGFmZmluaXR5Citjb25zdCBTWVNfUElQRTIgPSBf
U1lTX3BpcGUyCitjb25zdCBTWVNfQlBGID0gX1NZU19icGYKK2NvbnN0IFNZU19DSE1PRCA9IF9T
WVNfY2htb2QKK2NvbnN0IFNZU19FVkVOVEZEMiA9IF9TWVNfZXZlbnRmZDIKK2NvbnN0IFNZU19D
TE9DS19HRVRUSU1FID0gX1NZU19jbG9ja19nZXR0aW1lCitjb25zdCBTWVNfQ0xPU0UgPSBfU1lT
X2Nsb3NlCitjb25zdCBTWVNfQlJLID0gX1NZU19icmsKK2NvbnN0IFNZU19WTVNQTElDRSA9IF9T
WVNfdm1zcGxpY2UKK2NvbnN0IFNZU19FWEVDVkVBVCA9IF9TWVNfZXhlY3ZlYXQKK2NvbnN0IFNZ
U19NU1lOQyA9IF9TWVNfbXN5bmMKK2NvbnN0IFNZU19MU1RBVCA9IF9TWVNfbHN0YXQKK2NvbnN0
IFNZU19BTEFSTSA9IF9TWVNfYWxhcm0KK2NvbnN0IFNZU19DSERJUiA9IF9TWVNfY2hkaXIKK2Nv
bnN0IFNZU19DQVBTRVQgPSBfU1lTX2NhcHNldAorY29uc3QgU1lTX0ZJTklUX01PRFVMRSA9IF9T
WVNfZmluaXRfbW9kdWxlCitjb25zdCBTWVNfUlRfU0lHUFJPQ01BU0sgPSBfU1lTX3J0X3NpZ3By
b2NtYXNrCitjb25zdCBTWVNfU0lHTkFMRkQgPSBfU1lTX3NpZ25hbGZkCitjb25zdCBTWVNfRlVU
SU1FU0FUID0gX1NZU19mdXRpbWVzYXQKK2NvbnN0IFNZU19HRVRTT0NLTkFNRSA9IF9TWVNfZ2V0
c29ja25hbWUKK2NvbnN0IFNZU19TQ0hFRF9HRVRQQVJBTSA9IF9TWVNfc2NoZWRfZ2V0cGFyYW0K
K2NvbnN0IFNZU19TRVRfTUVNUE9MSUNZID0gX1NZU19zZXRfbWVtcG9saWN5Citjb25zdCBTWVNf
RkRBVEFTWU5DID0gX1NZU19mZGF0YXN5bmMKK2NvbnN0IFNZU19QUkxJTUlUNjQgPSBfU1lTX3By
bGltaXQ2NAorY29uc3QgU1lTX1RJTUVSRkRfU0VUVElNRSA9IF9TWVNfdGltZXJmZF9zZXR0aW1l
Citjb25zdCBTWVNfU1dBUE9OID0gX1NZU19zd2Fwb24KK2NvbnN0IFNZU19SVF9TSUdRVUVVRUlO
Rk8gPSBfU1lTX3J0X3NpZ3F1ZXVlaW5mbworY29uc3QgU1lTX0dFVFBNU0cgPSBfU1lTX2dldHBt
c2cKK2NvbnN0IFNZU19BUkNIX1BSQ1RMID0gX1NZU19hcmNoX3ByY3RsCitjb25zdCBTWVNfRkNI
T1dOID0gX1NZU19mY2hvd24KK2NvbnN0IFNZU19TRUxFQ1QgPSBfU1lTX3NlbGVjdAorY29uc3Qg
U1lTX0FDQ0VQVDQgPSBfU1lTX2FjY2VwdDQKK2NvbnN0IFNZU19QUk9DRVNTX1ZNX1dSSVRFViA9
IF9TWVNfcHJvY2Vzc192bV93cml0ZXYKK2NvbnN0IFNZU19RVU9UQUNUTCA9IF9TWVNfcXVvdGFj
dGwKK2NvbnN0IFNZU19NS0RJUiA9IF9TWVNfbWtkaXIKK2NvbnN0IFNZU19SRU5BTUUgPSBfU1lT
X3JlbmFtZQorY29uc3QgU1lTX1ZIQU5HVVAgPSBfU1lTX3ZoYW5ndXAKK2NvbnN0IFNZU19USU1F
UkZEX0dFVFRJTUUgPSBfU1lTX3RpbWVyZmRfZ2V0dGltZQorY29uc3QgU1lTX0dFVENQVSA9IF9T
WVNfZ2V0Y3B1Citjb25zdCBTWVNfQUNDVCA9IF9TWVNfYWNjdAorY29uc3QgU1lTX1NFVFJFVUlE
ID0gX1NZU19zZXRyZXVpZAorY29uc3QgU1lTX1JTRVEgPSBfU1lTX3JzZXEKK2NvbnN0IFNZU19G
U1RBVCA9IF9TWVNfZnN0YXQKK2NvbnN0IFNZU19TWU1MSU5LID0gX1NZU19zeW1saW5rCitjb25z
dCBTWVNfU0VORFRPID0gX1NZU19zZW5kdG8KK2NvbnN0IFNZU19TRUNVUklUWSA9IF9TWVNfc2Vj
dXJpdHkKK2NvbnN0IFNZU19TRVRIT1NUTkFNRSA9IF9TWVNfc2V0aG9zdG5hbWUKK2NvbnN0IFNZ
U19WU0VSVkVSID0gX1NZU192c2VydmVyCitjb25zdCBTWVNfUkVBREFIRUFEID0gX1NZU19yZWFk
YWhlYWQKK2NvbnN0IFNZU19USU1FID0gX1NZU190aW1lCitjb25zdCBTWVNfU1lTTE9HID0gX1NZ
U19zeXNsb2cKK2NvbnN0IFNZU19JT19HRVRFVkVOVFMgPSBfU1lTX2lvX2dldGV2ZW50cworY29u
c3QgU1lTX1dSSVRFID0gX1NZU193cml0ZQorY29uc3QgU1lTX0ZBTk9USUZZX0lOSVQgPSBfU1lT
X2Zhbm90aWZ5X2luaXQKK2NvbnN0IFNZU19JTk9USUZZX0FERF9XQVRDSCA9IF9TWVNfaW5vdGlm
eV9hZGRfd2F0Y2gKK2NvbnN0IFNZU19EVVAgPSBfU1lTX2R1cAorY29uc3QgU1lTX1NFQ0NPTVAg
PSBfU1lTX3NlY2NvbXAKK2NvbnN0IFNZU19TQ0hFRF9HRVRTQ0hFRFVMRVIgPSBfU1lTX3NjaGVk
X2dldHNjaGVkdWxlcgorY29uc3QgU1lTX1BFUkZfRVZFTlRfT1BFTiA9IF9TWVNfcGVyZl9ldmVu
dF9vcGVuCitjb25zdCBTWVNfU0VUTlMgPSBfU1lTX3NldG5zCitjb25zdCBTWVNfR0VUQ1dEID0g
X1NZU19nZXRjd2QKK2NvbnN0IFNZU19SRUJPT1QgPSBfU1lTX3JlYm9vdAorY29uc3QgU1lTX0dF
VFBJRCA9IF9TWVNfZ2V0cGlkCitjb25zdCBTWVNfQ0xPQ0tfTkFOT1NMRUVQID0gX1NZU19jbG9j
a19uYW5vc2xlZXAKK2NvbnN0IFNZU19NUV9VTkxJTksgPSBfU1lTX21xX3VubGluaworY29uc3Qg
U1lTX0NIT1dOID0gX1NZU19jaG93bgorY29uc3QgU1lTX1JUX1RHU0lHUVVFVUVJTkZPID0gX1NZ
U19ydF90Z3NpZ3F1ZXVlaW5mbworY29uc3QgU1lTX1NZTkMgPSBfU1lTX3N5bmMKK2NvbnN0IFNZ
U19DQVBHRVQgPSBfU1lTX2NhcGdldAorY29uc3QgU1lTX05NTE4gPSBfU1lTX05NTE4KK2NvbnN0
IFNZU19CSU5EID0gX1NZU19iaW5kCitjb25zdCBTWVNfVVRJTUUgPSBfU1lTX3V0aW1lCitjb25z
dCBTWVNfUlRfU0lHQUNUSU9OID0gX1NZU19ydF9zaWdhY3Rpb24KK2NvbnN0IFNZU19FUE9MTF9X
QUlUID0gX1NZU19lcG9sbF93YWl0Citjb25zdCBTWVNfTFNFVFhBVFRSID0gX1NZU19sc2V0eGF0
dHIKK2NvbnN0IFNZU19TRVRTT0NLT1BUID0gX1NZU19zZXRzb2Nrb3B0Citjb25zdCBTWVNfR0VU
UkVTR0lEID0gX1NZU19nZXRyZXNnaWQKK2NvbnN0IFNZU19VTkxJTktBVCA9IF9TWVNfdW5saW5r
YXQKK2NvbnN0IFNZU19EVVAyID0gX1NZU19kdXAyCitjb25zdCBTWVNfRFVQMyA9IF9TWVNfZHVw
MworY29uc3QgU1lTX0xJTktBVCA9IF9TWVNfbGlua2F0Citjb25zdCBTWVNfTU9ESUZZX0xEVCA9
IF9TWVNfbW9kaWZ5X2xkdAorY29uc3QgU1lTX01PVU5UID0gX1NZU19tb3VudAorY29uc3QgU1lT
X0dFVEdJRCA9IF9TWVNfZ2V0Z2lkCitjb25zdCBTWVNfTVVOTE9DS0FMTCA9IF9TWVNfbXVubG9j
a2FsbAorY29uc3QgU1lTX0xDSE9XTiA9IF9TWVNfbGNob3duCitjb25zdCBTWVNfTElOSyA9IF9T
WVNfbGluaworY29uc3QgU1lTX1NFTkRGSUxFID0gX1NZU19zZW5kZmlsZQorY29uc3QgU1lTX01R
X1RJTUVEUkVDRUlWRSA9IF9TWVNfbXFfdGltZWRyZWNlaXZlCitjb25zdCBTWVNfVEdLSUxMID0g
X1NZU190Z2tpbGwKK2NvbnN0IFNZU19SRU5BTUVBVCA9IF9TWVNfcmVuYW1lYXQKK2NvbnN0IFNZ
U19SRUNWRlJPTSA9IF9TWVNfcmVjdmZyb20KK2NvbnN0IFNZU19NS05PRCA9IF9TWVNfbWtub2QK
K2NvbnN0IFNZU19VVElNRVMgPSBfU1lTX3V0aW1lcworY29uc3QgU1lTX0xJU1RYQVRUUiA9IF9T
WVNfbGlzdHhhdHRyCitjb25zdCBTWVNfUlRfU0lHVElNRURXQUlUID0gX1NZU19ydF9zaWd0aW1l
ZHdhaXQKK2NvbnN0IFNZU19USU1FUyA9IF9TWVNfdGltZXMKK2NvbnN0IFNZU19USU1FUl9TRVRU
SU1FID0gX1NZU190aW1lcl9zZXR0aW1lCitjb25zdCBTWVNfUElQRSA9IF9TWVNfcGlwZQorY29u
c3QgU1lTX0dFVF9LRVJORUxfU1lNUyA9IF9TWVNfZ2V0X2tlcm5lbF9zeW1zCitjb25zdCBTWVNf
U0VUUkxJTUlUID0gX1NZU19zZXRybGltaXQKK2NvbnN0IFNZU19ERUxFVEVfTU9EVUxFID0gX1NZ
U19kZWxldGVfbW9kdWxlCitjb25zdCBTWVNfVElNRVJfR0VUVElNRSA9IF9TWVNfdGltZXJfZ2V0
dGltZQorY29uc3QgU1lTX0lOT1RJRllfUk1fV0FUQ0ggPSBfU1lTX2lub3RpZnlfcm1fd2F0Y2gK
K2NvbnN0IFNZU19TSE1DVEwgPSBfU1lTX3NobWN0bAorY29uc3QgU1lTX1NDSEVEX0dFVEFGRklO
SVRZID0gX1NZU19zY2hlZF9nZXRhZmZpbml0eQorY29uc3QgU1lTX1BXUklURVYgPSBfU1lTX3B3
cml0ZXYKK2NvbnN0IFNZU19TRVRGU1VJRCA9IF9TWVNfc2V0ZnN1aWQKK2NvbnN0IFNZU19GQ0hP
V05BVCA9IF9TWVNfZmNob3duYXQKK2NvbnN0IFNZU19GQ0hNT0QgPSBfU1lTX2ZjaG1vZAorY29u
c3QgU1lTX1NFTU9QID0gX1NZU19zZW1vcAorY29uc3QgU1lTX1NFVFRJTUVPRkRBWSA9IF9TWVNf
c2V0dGltZW9mZGF5Citjb25zdCBTWVNfS0lMTCA9IF9TWVNfa2lsbAorY29uc3QgU1lTX1VUSU1F
TlNBVCA9IF9TWVNfdXRpbWVuc2F0Citjb25zdCBTWVNfVElNRVJfQ1JFQVRFID0gX1NZU190aW1l
cl9jcmVhdGUKK2NvbnN0IFNZU19TVEFUID0gX1NZU19zdGF0Citjb25zdCBTWVNfU0VURE9NQUlO
TkFNRSA9IF9TWVNfc2V0ZG9tYWlubmFtZQorY29uc3QgU1lTX0ZDSERJUiA9IF9TWVNfZmNoZGly
Citjb25zdCBTWVNfRkxPQ0sgPSBfU1lTX2Zsb2NrCitjb25zdCBTWVNfUkVRVUVTVF9LRVkgPSBf
U1lTX3JlcXVlc3Rfa2V5Citjb25zdCBTWVNfSU9fREVTVFJPWSA9IF9TWVNfaW9fZGVzdHJveQor
Y29uc3QgU1lTX1RJTUVSRkRfQ1JFQVRFID0gX1NZU190aW1lcmZkX2NyZWF0ZQorY29uc3QgU1lT
X0dFVFRJRCA9IF9TWVNfZ2V0dGlkCitjb25zdCBTWVNfRkFMTE9DQVRFID0gX1NZU19mYWxsb2Nh
dGUKK2NvbnN0IFNZU19TQ0hFRF9TRVRQQVJBTSA9IF9TWVNfc2NoZWRfc2V0cGFyYW0KK2NvbnN0
IFNZU19TSE1BVCA9IF9TWVNfc2htYXQKK2NvbnN0IFNZU19QUkVBRFYyID0gX1NZU19wcmVhZHYy
Citjb25zdCBTWVNfR0VUUlVTQUdFID0gX1NZU19nZXRydXNhZ2UKK2NvbnN0IFNZU19LQ01QID0g
X1NZU19rY21wCitjb25zdCBTWVNfVU5MSU5LID0gX1NZU191bmxpbmsKK2NvbnN0IFNZU19TSE1H
RVQgPSBfU1lTX3NobWdldAorY29uc3QgU1lTX0xPT0tVUF9EQ09PS0lFID0gX1NZU19sb29rdXBf
ZGNvb2tpZQorY29uc3QgU1lTX01LRElSQVQgPSBfU1lTX21rZGlyYXQKK2NvbnN0IFNZU19TSE1E
VCA9IF9TWVNfc2htZHQKK2NvbnN0IFNZU19BRERfS0VZID0gX1NZU19hZGRfa2V5Citjb25zdCBT
WVNfRVhJVF9HUk9VUCA9IF9TWVNfZXhpdF9ncm91cAorY29uc3QgU1lTX0ZPUksgPSBfU1lTX2Zv
cmsKK2NvbnN0IFNZU19HRVRYQVRUUiA9IF9TWVNfZ2V0eGF0dHIKK2NvbnN0IFNZU19NUFJPVEVD
VCA9IF9TWVNfbXByb3RlY3QKK2NvbnN0IFNZU19SRUFEID0gX1NZU19yZWFkCitjb25zdCBTWVNf
TExJU1RYQVRUUiA9IF9TWVNfbGxpc3R4YXR0cgorY29uc3QgU1lTX1BBVVNFID0gX1NZU19wYXVz
ZQorY29uc3QgU1lTX01RX0dFVFNFVEFUVFIgPSBfU1lTX21xX2dldHNldGF0dHIKK2NvbnN0IFNZ
U19NTE9DSzIgPSBfU1lTX21sb2NrMgorY29uc3QgU1lTX0dFVFJBTkRPTSA9IF9TWVNfZ2V0cmFu
ZG9tCitjb25zdCBTWVNfT1BFTkFUID0gX1NZU19vcGVuYXQKK2NvbnN0IFNZU19SVF9TSUdSRVRV
Uk4gPSBfU1lTX3J0X3NpZ3JldHVybgorY29uc3QgU1lTX0ZBRFZJU0U2NCA9IF9TWVNfZmFkdmlz
ZTY0Citjb25zdCBTWVNfVVNUQVQgPSBfU1lTX3VzdGF0Citjb25zdCBTWVNfSU9fU1VCTUlUID0g
X1NZU19pb19zdWJtaXQKK2NvbnN0IFNZU19XUklURVYgPSBfU1lTX3dyaXRldgorY29uc3QgU1lT
X1VOU0hBUkUgPSBfU1lTX3Vuc2hhcmUKK2NvbnN0IFNZU19NU0dHRVQgPSBfU1lTX21zZ2dldAor
Y29uc3QgU1lTX01MT0NLID0gX1NZU19tbG9jaworY29uc3QgU1lTX0tFWEVDX0xPQUQgPSBfU1lT
X2tleGVjX2xvYWQKK2NvbnN0IFNZU19HRVRfTUVNUE9MSUNZID0gX1NZU19nZXRfbWVtcG9saWN5
Citjb25zdCBTWVNfU0VUUkVHSUQgPSBfU1lTX3NldHJlZ2lkCitjb25zdCBTWVNfQ0hST09UID0g
X1NZU19jaHJvb3QKK2NvbnN0IFNZU19BRlNfU1lTQ0FMTCA9IF9TWVNfYWZzX3N5c2NhbGwKK2Nv
bnN0IFNZU19ORlNTRVJWQ1RMID0gX1NZU19uZnNzZXJ2Y3RsCitjb25zdCBTWVNfTFJFTU9WRVhB
VFRSID0gX1NZU19scmVtb3ZleGF0dHIKK2NvbnN0IFNZU19JT19DQU5DRUwgPSBfU1lTX2lvX2Nh
bmNlbAorY29uc3QgU1lTX1NPQ0tFVCA9IF9TWVNfc29ja2V0Citjb25zdCBTWVNfRkdFVFhBVFRS
ID0gX1NZU19mZ2V0eGF0dHIKK2NvbnN0IFNZU19NRU1GRF9DUkVBVEUgPSBfU1lTX21lbWZkX2Ny
ZWF0ZQorY29uc3QgU1lTX1NZTUxJTktBVCA9IF9TWVNfc3ltbGlua2F0Citjb25zdCBTWVNfRkNO
VEwgPSBfU1lTX2ZjbnRsCitjb25zdCBTWVNfR0VURVVJRCA9IF9TWVNfZ2V0ZXVpZAorY29uc3Qg
U1lTX0ZTVEFURlMgPSBfU1lTX2ZzdGF0ZnMKK2NvbnN0IFNZU19TQ0hFRF9SUl9HRVRfSU5URVJW
QUwgPSBfU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbAorY29uc3QgU1lTX0lPUEVSTSA9IF9TWVNf
aW9wZXJtCitjb25zdCBTWVNfQUNDRVBUID0gX1NZU19hY2NlcHQKK2NvbnN0IFNZU19SRUFEViA9
IF9TWVNfcmVhZHYKK2NvbnN0IFNZU19VTkFNRSA9IF9TWVNfdW5hbWUKK2NvbnN0IFNZU19TRVRQ
UklPUklUWSA9IF9TWVNfc2V0cHJpb3JpdHkKK2NvbnN0IFNZU19TRU5ETVNHID0gX1NZU19zZW5k
bXNnCitjb25zdCBTWVNfUkVBRExJTksgPSBfU1lTX3JlYWRsaW5rCitjb25zdCBTWVNfU0VNVElN
RURPUCA9IF9TWVNfc2VtdGltZWRvcAorY29uc3QgU1lTX1NFVEdST1VQUyA9IF9TWVNfc2V0Z3Jv
dXBzCitjb25zdCBTWVNfU0VORE1NU0cgPSBfU1lTX3NlbmRtbXNnCitjb25zdCBTWVNfU0NIRURf
U0VUU0NIRURVTEVSID0gX1NZU19zY2hlZF9zZXRzY2hlZHVsZXIKK2NvbnN0IFNZU19FUE9MTF9D
VEwgPSBfU1lTX2Vwb2xsX2N0bAorY29uc3QgU1lTX1NDSEVEX0dFVF9QUklPUklUWV9NQVggPSBf
U1lTX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKK2NvbnN0IFNZU19TWU5DRlMgPSBfU1lTX3N5bmNm
cworY29uc3QgU1lTX0lPQ1RMID0gX1NZU19pb2N0bAorY29uc3QgU1lTX1BPTEwgPSBfU1lTX3Bv
bGwKK2NvbnN0IFNZU19JT1BMID0gX1NZU19pb3BsCitjb25zdCBTWVNfTVNHU05EID0gX1NZU19t
c2dzbmQKK2NvbnN0IFNZU19FWElUID0gX1NZU19leGl0Citjb25zdCBTWVNfUkVTVEFSVF9TWVND
QUxMID0gX1NZU19yZXN0YXJ0X3N5c2NhbGwKK2NvbnN0IFNZU19OQU5PU0xFRVAgPSBfU1lTX25h
bm9zbGVlcAorY29uc3QgU1lTX01SRU1BUCA9IF9TWVNfbXJlbWFwCitjb25zdCBTWVNfU1lTSU5G
TyA9IF9TWVNfc3lzaW5mbworY29uc3QgU1lTX1NFVFNJRCA9IF9TWVNfc2V0c2lkCitjb25zdCBT
WVNfU1RBVFggPSBfU1lTX3N0YXR4Citjb25zdCBTWVNfU0hVVERPV04gPSBfU1lTX3NodXRkb3du
Citjb25zdCBTWVNfVEtJTEwgPSBfU1lTX3RraWxsCitjb25zdCBTWVNfUFRSQUNFID0gX1NZU19w
dHJhY2UKK2NvbnN0IFNZU19GVVRFWCA9IF9TWVNfZnV0ZXgKK2NvbnN0IFNZU19SRUNWTU1TRyA9
IF9TWVNfcmVjdm1tc2cKK2NvbnN0IFNZU19fU1lTQ1RMID0gX1NZU19fc3lzY3RsCitjb25zdCBT
WVNfTVFfVElNRURTRU5EID0gX1NZU19tcV90aW1lZHNlbmQKK2NvbnN0IFNZU19DTE9ORSA9IF9T
WVNfY2xvbmUKK2NvbnN0IFNZU19TQ0hFRF9HRVRfUFJJT1JJVFlfTUlOID0gX1NZU19zY2hlZF9n
ZXRfcHJpb3JpdHlfbWluCitjb25zdCBTWVNfUFVUUE1TRyA9IF9TWVNfcHV0cG1zZworY29uc3Qg
U1lTX0dFVFJMSU1JVCA9IF9TWVNfZ2V0cmxpbWl0Citjb25zdCBTWVNfTUVNQkFSUklFUiA9IF9T
WVNfbWVtYmFycmllcgorY29uc3QgU1lTX0lOT1RJRllfSU5JVCA9IF9TWVNfaW5vdGlmeV9pbml0
Citjb25zdCBTWVNfVFVYQ0FMTCA9IF9TWVNfdHV4Y2FsbAorY29uc3QgU1lTX01VTk1BUCA9IF9T
WVNfbXVubWFwCitjb25zdCBTWVNfVkZPUksgPSBfU1lTX3Zmb3JrCitjb25zdCBTWVNfV0FJVElE
ID0gX1NZU193YWl0aWQKK2NvbnN0IFNZU19HRVRHUk9VUFMgPSBfU1lTX2dldGdyb3VwcworY29u
c3QgU1lTX01CSU5EID0gX1NZU19tYmluZAorY29uc3QgU1lTX1BLRVlfTVBST1RFQ1QgPSBfU1lT
X3BrZXlfbXByb3RlY3QKK2NvbnN0IFNZU19NSU5DT1JFID0gX1NZU19taW5jb3JlCitjb25zdCBT
WVNfR0VUUFBJRCA9IF9TWVNfZ2V0cHBpZAorY29uc3QgU1lTX01PVkVfUEFHRVMgPSBfU1lTX21v
dmVfcGFnZXMKK2NvbnN0IFNZU19TRVRGU0dJRCA9IF9TWVNfc2V0ZnNnaWQKK2NvbnN0IFNZU19T
Q0hFRF9TRVRBVFRSID0gX1NZU19zY2hlZF9zZXRhdHRyCitjb25zdCBTWVNfUkVNQVBfRklMRV9Q
QUdFUyA9IF9TWVNfcmVtYXBfZmlsZV9wYWdlcworY29uc3QgU1lTX1NFVFVJRCA9IF9TWVNfc2V0
dWlkCitjb25zdCBTWVNfU09DS0VUUEFJUiA9IF9TWVNfc29ja2V0cGFpcgorY29uc3QgU1lTX1JF
TU9WRVhBVFRSID0gX1NZU19yZW1vdmV4YXR0cgorY29uc3QgU1lTX1RSVU5DQVRFID0gX1NZU190
cnVuY2F0ZQorY29uc3QgU1lTX0NPTk5FQ1QgPSBfU1lTX2Nvbm5lY3QKK2NvbnN0IFNZU19TQ0hF
RF9HRVRBVFRSID0gX1NZU19zY2hlZF9nZXRhdHRyCitjb25zdCBTWVNfRkxJU1RYQVRUUiA9IF9T
WVNfZmxpc3R4YXR0cgorY29uc3QgU1lTX01NQVAgPSBfU1lTX21tYXAKK2NvbnN0IFNZU19DTE9D
S19BREpUSU1FID0gX1NZU19jbG9ja19hZGp0aW1lCitjb25zdCBTWVNfRVZFTlRGRCA9IF9TWVNf
ZXZlbnRmZAorY29uc3QgU1lTX09QRU4gPSBfU1lTX29wZW4KK2NvbnN0IFNZU19TRVRQR0lEID0g
X1NZU19zZXRwZ2lkCitjb25zdCBTWVNfUFNFTEVDVDYgPSBfU1lTX3BzZWxlY3Q2Citjb25zdCBT
WVNfU0VUWEFUVFIgPSBfU1lTX3NldHhhdHRyCitjb25zdCBTWVNfU0lHQUxUU1RBQ0sgPSBfU1lT
X3NpZ2FsdHN0YWNrCitjb25zdCBTWVNfSU5PVElGWV9JTklUMSA9IF9TWVNfaW5vdGlmeV9pbml0
MQorY29uc3QgU1lTX0NSRUFUID0gX1NZU19jcmVhdAorY29uc3QgU1lTX0dFVFBHSUQgPSBfU1lT
X2dldHBnaWQKK2NvbnN0IFNfSVJXWE8gPSBfU19JUldYTworY29uc3QgU19JRVhFQyA9IF9TX0lF
WEVDCitjb25zdCBTX0lTVlRYID0gX1NfSVNWVFgKK2NvbnN0IFNfSVdPVEggPSBfU19JV09USAor
Y29uc3QgU19JUkdSUCA9IF9TX0lSR1JQCitjb25zdCBTX0lGTVQgPSBfU19JRk1UCitjb25zdCBT
X0lXUklURSA9IF9TX0lXUklURQorY29uc3QgU19JRkxOSyA9IF9TX0lGTE5LCitjb25zdCBTX0lS
V1hHID0gX1NfSVJXWEcKK2NvbnN0IFNfSVJXWFUgPSBfU19JUldYVQorY29uc3QgU19JV1VTUiA9
IF9TX0lXVVNSCitjb25zdCBTX0lGUkVHID0gX1NfSUZSRUcKK2NvbnN0IFNfSVhHUlAgPSBfU19J
WEdSUAorY29uc3QgU19JU1VJRCA9IF9TX0lTVUlECitjb25zdCBTX0lGSUZPID0gX1NfSUZJRk8K
K2NvbnN0IFNfSUZTT0NLID0gX1NfSUZTT0NLCitjb25zdCBTX0lST1RIID0gX1NfSVJPVEgKK2Nv
bnN0IFNfQkxLU0laRSA9IF9TX0JMS1NJWkUKK2NvbnN0IFNfSVdHUlAgPSBfU19JV0dSUAorY29u
c3QgU19JWFVTUiA9IF9TX0lYVVNSCitjb25zdCBTX0lTR0lEID0gX1NfSVNHSUQKK2NvbnN0IFNf
SUZESVIgPSBfU19JRkRJUgorY29uc3QgU19JUlVTUiA9IF9TX0lSVVNSCitjb25zdCBTX0lGQ0hS
ID0gX1NfSUZDSFIKK2NvbnN0IFNfSVhPVEggPSBfU19JWE9USAorY29uc3QgU19JRkJMSyA9IF9T
X0lGQkxLCitjb25zdCBTX0lSRUFEID0gX1NfSVJFQUQKK2NvbnN0IFBST1RfTk9ORSA9IF9QUk9U
X05PTkUKK2NvbnN0IFBST1RfUkVBRCA9IF9QUk9UX1JFQUQKK2NvbnN0IFBST1RfR1JPV1NET1dO
ID0gX1BST1RfR1JPV1NET1dOCitjb25zdCBQUk9UX0VYRUMgPSBfUFJPVF9FWEVDCitjb25zdCBQ
Uk9UX1dSSVRFID0gX1BST1RfV1JJVEUKK2NvbnN0IFBST1RfR1JPV1NVUCA9IF9QUk9UX0dST1dT
VVAKK2NvbnN0IE1BUF9GSUxFID0gX01BUF9GSUxFCitjb25zdCBNQVBfU0hBUkVEID0gX01BUF9T
SEFSRUQKK2NvbnN0IE1BUF9TWU5DID0gX01BUF9TWU5DCitjb25zdCBNQVBfTk9SRVNFUlZFID0g
X01BUF9OT1JFU0VSVkUKK2NvbnN0IE1BUF9IVUdFVExCID0gX01BUF9IVUdFVExCCitjb25zdCBN
QVBfU1RBQ0sgPSBfTUFQX1NUQUNLCitjb25zdCBNQVBfU0hBUkVEX1ZBTElEQVRFID0gX01BUF9T
SEFSRURfVkFMSURBVEUKK2NvbnN0IE1BUF9HUk9XU0RPV04gPSBfTUFQX0dST1dTRE9XTgorY29u
c3QgTUFQX1BPUFVMQVRFID0gX01BUF9QT1BVTEFURQorY29uc3QgTUFQXzMyQklUID0gX01BUF8z
MkJJVAorY29uc3QgTUFQX0xPQ0tFRCA9IF9NQVBfTE9DS0VECitjb25zdCBNQVBfRklYRURfTk9S
RVBMQUNFID0gX01BUF9GSVhFRF9OT1JFUExBQ0UKK2NvbnN0IE1BUF9IVUdFX01BU0sgPSBfTUFQ
X0hVR0VfTUFTSworY29uc3QgTUFQX0hVR0VfU0hJRlQgPSBfTUFQX0hVR0VfU0hJRlQKK2NvbnN0
IE1BUF9BTk9OWU1PVVMgPSBfTUFQX0FOT05ZTU9VUworY29uc3QgTUFQX0FOT04gPSBfTUFQX0FO
T04KK2NvbnN0IE1BUF9QUklWQVRFID0gX01BUF9QUklWQVRFCitjb25zdCBNQVBfRVhFQ1VUQUJM
RSA9IF9NQVBfRVhFQ1VUQUJMRQorY29uc3QgTUFQX05PTkJMT0NLID0gX01BUF9OT05CTE9DSwor
Y29uc3QgTUFQX1RZUEUgPSBfTUFQX1RZUEUKK2NvbnN0IE1BUF9GSVhFRCA9IF9NQVBfRklYRUQK
K2NvbnN0IE1BUF9ERU5ZV1JJVEUgPSBfTUFQX0RFTllXUklURQorY29uc3QgTUFEVl9ET05URk9S
SyA9IF9NQURWX0RPTlRGT1JLCitjb25zdCBNQURWX1dJTExORUVEID0gX01BRFZfV0lMTE5FRUQK
K2NvbnN0IE1BRFZfU0VRVUVOVElBTCA9IF9NQURWX1NFUVVFTlRJQUwKK2NvbnN0IE1BRFZfS0VF
UE9ORk9SSyA9IF9NQURWX0tFRVBPTkZPUksKK2NvbnN0IE1BRFZfRE9OVE5FRUQgPSBfTUFEVl9E
T05UTkVFRAorY29uc3QgTUFEVl9ET0RVTVAgPSBfTUFEVl9ET0RVTVAKK2NvbnN0IE1BRFZfTk9I
VUdFUEFHRSA9IF9NQURWX05PSFVHRVBBR0UKK2NvbnN0IE1BRFZfTk9STUFMID0gX01BRFZfTk9S
TUFMCitjb25zdCBNQURWX0RPRk9SSyA9IF9NQURWX0RPRk9SSworY29uc3QgTUFEVl9XSVBFT05G
T1JLID0gX01BRFZfV0lQRU9ORk9SSworY29uc3QgTUFEVl9IVUdFUEFHRSA9IF9NQURWX0hVR0VQ
QUdFCitjb25zdCBNQURWX0hXUE9JU09OID0gX01BRFZfSFdQT0lTT04KK2NvbnN0IE1BRFZfTUVS
R0VBQkxFID0gX01BRFZfTUVSR0VBQkxFCitjb25zdCBNQURWX1JFTU9WRSA9IF9NQURWX1JFTU9W
RQorY29uc3QgTUFEVl9SQU5ET00gPSBfTUFEVl9SQU5ET00KK2NvbnN0IE1BRFZfRlJFRSA9IF9N
QURWX0ZSRUUKK2NvbnN0IE1BRFZfRE9OVERVTVAgPSBfTUFEVl9ET05URFVNUAorY29uc3QgTUFE
Vl9VTk1FUkdFQUJMRSA9IF9NQURWX1VOTUVSR0VBQkxFCitjb25zdCBNQ0xfRlVUVVJFID0gX01D
TF9GVVRVUkUKK2NvbnN0IE1DTF9DVVJSRU5UID0gX01DTF9DVVJSRU5UCitjb25zdCBNQ0xfT05G
QVVMVCA9IF9NQ0xfT05GQVVMVAorY29uc3QgV05PSEFORyA9IF9XTk9IQU5HCitjb25zdCBXT1JE
X0JJVCA9IF9XT1JEX0JJVAorY29uc3QgV19PSyA9IF9XX09LCitjb25zdCBXQ0hBUl9XSURUSCA9
IF9XQ0hBUl9XSURUSAorY29uc3QgV0lOVF9XSURUSCA9IF9XSU5UX1dJRFRICitjb25zdCBXQ09O
VElOVUVEID0gX1dDT05USU5VRUQKK2NvbnN0IFdDSEFSX01BWCA9IF9XQ0hBUl9NQVgKK2NvbnN0
IFdBSVRfQU5ZID0gX1dBSVRfQU5ZCitjb25zdCBXQUlUX01ZUEdSUCA9IF9XQUlUX01ZUEdSUAor
Y29uc3QgV0VYSVRFRCA9IF9XRVhJVEVECitjb25zdCBXQ09SRUZMQUcgPSBfV0NPUkVGTEFHCitj
b25zdCBXQ0hBUl9NSU4gPSBfV0NIQVJfTUlOCitjb25zdCBXTk9XQUlUID0gX1dOT1dBSVQKK2Nv
bnN0IFdVTlRSQUNFRCA9IF9XVU5UUkFDRUQKK2NvbnN0IFdJTlRfTUFYID0gX1dJTlRfTUFYCitj
b25zdCBXSU5UX01JTiA9IF9XSU5UX01JTgorY29uc3QgV1NUT1BQRUQgPSBfV1NUT1BQRUQKK2Nv
bnN0IFdBTEwgPSBfX19XQUxMCitjb25zdCBJUFBST1RPX1RQID0gX0lQUFJPVE9fVFAKK2NvbnN0
IFRDUF9DT09LSUVfVFJBTlNBQ1RJT05TID0gX1RDUF9DT09LSUVfVFJBTlNBQ1RJT05TCitjb25z
dCBJUFBST1RPX1JPVVRJTkcgPSBfSVBQUk9UT19ST1VUSU5HCitjb25zdCBJUF9SRiA9IF9JUF9S
RgorY29uc3QgRVRIX1BfUFBQVEFMSyA9IF9FVEhfUF9QUFBUQUxLCitjb25zdCBJUF9ERUZBVUxU
X01VTFRJQ0FTVF9MT09QID0gX0lQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AKK2NvbnN0IFRDUF9S
RVBBSVJfT1BUSU9OUyA9IF9UQ1BfUkVQQUlSX09QVElPTlMKK2NvbnN0IFRDUF9TX0RBVEFfSU4g
PSBfVENQX1NfREFUQV9JTgorY29uc3QgSU5fQVRUUklCID0gX0lOX0FUVFJJQgorY29uc3QgU09D
S19ER1JBTSA9IF9TT0NLX0RHUkFNCitjb25zdCBJUFY2X09SSUdEU1RBRERSID0gX0lQVjZfT1JJ
R0RTVEFERFIKK2NvbnN0IFNPX1RYVElNRSA9IF9TT19UWFRJTUUKK2NvbnN0IElQVjZfMjI5MkhP
UExJTUlUID0gX0lQVjZfMjI5MkhPUExJTUlUCitjb25zdCBJUFBST1RPX0lQVjYgPSBfSVBQUk9U
T19JUFY2Citjb25zdCBUQ1BfU1lOX1NFTlQgPSBfVENQX1NZTl9TRU5UCitjb25zdCBBUlBIUkRf
SUVFRTgwMjExX1BSSVNNID0gX0FSUEhSRF9JRUVFODAyMTFfUFJJU00KK2NvbnN0IEVUSF9QXzgw
MjFBRCA9IF9FVEhfUF84MDIxQUQKK2NvbnN0IEVUSF9QXzgwMjFBSCA9IF9FVEhfUF84MDIxQUgK
K2NvbnN0IEVUSF9QX0FSQ05FVCA9IF9FVEhfUF9BUkNORVQKK2NvbnN0IElQUFJPVE9fTk9ORSA9
IF9JUFBST1RPX05PTkUKK2NvbnN0IFRDUF9DT09LSUVfT1VUX05FVkVSID0gX1RDUF9DT09LSUVf
T1VUX05FVkVSCitjb25zdCBTT0xfU09DS0VUID0gX1NPTF9TT0NLRVQKK2NvbnN0IElQX05PREVG
UkFHID0gX0lQX05PREVGUkFHCitjb25zdCBJUFBST1RPX1VEUExJVEUgPSBfSVBQUk9UT19VRFBM
SVRFCitjb25zdCBUQ1BfTElTVEVOID0gX1RDUF9MSVNURU4KK2NvbnN0IFNPX1NORFRJTUVPID0g
X1NPX1NORFRJTUVPCitjb25zdCBBRl9VTlNQRUMgPSBfQUZfVU5TUEVDCitjb25zdCBBUlBIUkRf
RkNQTCA9IF9BUlBIUkRfRkNQTAorY29uc3QgQVJQSFJEX0ZDUFAgPSBfQVJQSFJEX0ZDUFAKK2Nv
bnN0IElQX0FERF9NRU1CRVJTSElQID0gX0lQX0FERF9NRU1CRVJTSElQCitjb25zdCBFVEhfUF9U
UkFJTEVSID0gX0VUSF9QX1RSQUlMRVIKK2NvbnN0IFNPTF9UQ1AgPSBfU09MX1RDUAorY29uc3Qg
U09fQ05YX0FEVklDRSA9IF9TT19DTlhfQURWSUNFCitjb25zdCBTT0xfQkxVRVRPT1RIID0gX1NP
TF9CTFVFVE9PVEgKK2NvbnN0IEFSUEhSRF9FVEhFUiA9IF9BUlBIUkRfRVRIRVIKK2NvbnN0IEVU
SF9QX0RJQUcgPSBfRVRIX1BfRElBRworY29uc3QgQVJQSFJEX0lORklOSUJBTkQgPSBfQVJQSFJE
X0lORklOSUJBTkQKK2NvbnN0IElQX1RSQU5TUEFSRU5UID0gX0lQX1RSQU5TUEFSRU5UCitjb25z
dCBFVEhfUF9MT09QQkFDSyA9IF9FVEhfUF9MT09QQkFDSworY29uc3QgRVRIX1BfQ1VTVCA9IF9F
VEhfUF9DVVNUCitjb25zdCBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQID0gX0FSUEhSRF9JRUVF
ODAyMTFfUkFESU9UQVAKK2NvbnN0IEFSUEhSRF9WT0lEID0gX0FSUEhSRF9WT0lECitjb25zdCBJ
UFY2X01VTFRJQ0FTVF9MT09QID0gX0lQVjZfTVVMVElDQVNUX0xPT1AKK2NvbnN0IFNPX1BSSU9S
SVRZID0gX1NPX1BSSU9SSVRZCitjb25zdCBTT19QUk9UT0NPTCA9IF9TT19QUk9UT0NPTAorY29u
c3QgVENQX1RISU5fRFVQQUNLID0gX1RDUF9USElOX0RVUEFDSworY29uc3QgU09fQVRUQUNIX1JF
VVNFUE9SVF9FQlBGID0gX1NPX0FUVEFDSF9SRVVTRVBPUlRfRUJQRgorY29uc3QgSU5fQUxMX0VW
RU5UUyA9IF9JTl9BTExfRVZFTlRTCitjb25zdCBTT19QRUVSTkFNRSA9IF9TT19QRUVSTkFNRQor
Y29uc3QgU09fTUVNSU5GTyA9IF9TT19NRU1JTkZPCitjb25zdCBBUlBIUkRfSElQUEkgPSBfQVJQ
SFJEX0hJUFBJCitjb25zdCBBRl9ST1VURSA9IF9BRl9ST1VURQorY29uc3QgSVBfTVVMVElDQVNU
X0xPT1AgPSBfSVBfTVVMVElDQVNUX0xPT1AKK2NvbnN0IEVUSF9QX0FUTUZBVEUgPSBfRVRIX1Bf
QVRNRkFURQorY29uc3QgSVBWNl9WNk9OTFkgPSBfSVBWNl9WNk9OTFkKK2NvbnN0IEFSUEhSRF9T
TElQNiA9IF9BUlBIUkRfU0xJUDYKK2NvbnN0IElOX0NMQVNTQ19IT1NUID0gX0lOX0NMQVNTQ19I
T1NUCitjb25zdCBJUF9SRUNWRlJBR1NJWkUgPSBfSVBfUkVDVkZSQUdTSVpFCitjb25zdCBTT0xf
WDI1ID0gX1NPTF9YMjUKK2NvbnN0IEVUSF9QX05DU0kgPSBfRVRIX1BfTkNTSQorY29uc3QgVENQ
X0NMT1NJTkcgPSBfVENQX0NMT1NJTkcKK2NvbnN0IElQX01TRklMVEVSID0gX0lQX01TRklMVEVS
Citjb25zdCBUQ1BfQ09OR0VTVElPTiA9IF9UQ1BfQ09OR0VTVElPTgorY29uc3QgQUZfUkRTID0g
X0FGX1JEUworY29uc3QgQUZfSUVFRTgwMjE1NCA9IF9BRl9JRUVFODAyMTU0Citjb25zdCBTT19U
SU1FU1RBTVBJTkcgPSBfU09fVElNRVNUQU1QSU5HCitjb25zdCBUQ1BfQ09PS0lFX01BWCA9IF9U
Q1BfQ09PS0lFX01BWAorY29uc3QgU09fREVUQUNIX0JQRiA9IF9TT19ERVRBQ0hfQlBGCitjb25z
dCBBUlBIUkRfQVNIID0gX0FSUEhSRF9BU0gKK2NvbnN0IElQUFJPVE9fRlJBR01FTlQgPSBfSVBQ
Uk9UT19GUkFHTUVOVAorY29uc3QgSVBfQklORF9BRERSRVNTX05PX1BPUlQgPSBfSVBfQklORF9B
RERSRVNTX05PX1BPUlQKK2NvbnN0IElQX1BNVFVESVNDX1dBTlQgPSBfSVBfUE1UVURJU0NfV0FO
VAorY29uc3QgU09MX1RMUyA9IF9TT0xfVExTCitjb25zdCBFVEhfUF84MDIxUSA9IF9FVEhfUF84
MDIxUQorY29uc3QgSVBfUE1UVURJU0NfSU5URVJGQUNFID0gX0lQX1BNVFVESVNDX0lOVEVSRkFD
RQorY29uc3QgU09MX0lDTVBWNiA9IF9TT0xfSUNNUFY2Citjb25zdCBUQ1BfTVNTID0gX1RDUF9N
U1MKK2NvbnN0IEVUSF9QXzgwMjIxID0gX0VUSF9QXzgwMjIxCitjb25zdCBJTl9VTk1PVU5UID0g
X0lOX1VOTU9VTlQKK2NvbnN0IEVUSF9QX1BQUF9NUCA9IF9FVEhfUF9QUFBfTVAKK2NvbnN0IEFG
X0xPQ0FMID0gX0FGX0xPQ0FMCitjb25zdCBTT0NLX1JBVyA9IF9TT0NLX1JBVworY29uc3QgVENQ
X1NBVkVEX1NZTiA9IF9UQ1BfU0FWRURfU1lOCitjb25zdCBBRl9WU09DSyA9IF9BRl9WU09DSwor
Y29uc3QgSVBfUkVDVkVSUiA9IF9JUF9SRUNWRVJSCitjb25zdCBUQ1BfU19EQVRBX09VVCA9IF9U
Q1BfU19EQVRBX09VVAorY29uc3QgSVBQUk9UT19FTkNBUCA9IF9JUFBST1RPX0VOQ0FQCitjb25z
dCBJUFY2XzIyOTJIT1BPUFRTID0gX0lQVjZfMjI5MkhPUE9QVFMKK2NvbnN0IEVUSF9QX0xPQ0FM
VEFMSyA9IF9FVEhfUF9MT0NBTFRBTEsKK2NvbnN0IFRDUF9MSU5HRVIyID0gX1RDUF9MSU5HRVIy
Citjb25zdCBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwgPSBfSVBfREVGQVVMVF9NVUxUSUNBU1Rf
VFRMCitjb25zdCBJUFBST1RPX1JBVyA9IF9JUFBST1RPX1JBVworY29uc3QgSVBWNl9QTVRVRElT
Q19ETyA9IF9JUFY2X1BNVFVESVNDX0RPCitjb25zdCBFVEhfUF9FUlNQQU4yID0gX0VUSF9QX0VS
U1BBTjIKK2NvbnN0IElOX09ORVNIT1QgPSBfSU5fT05FU0hPVAorY29uc3QgRVRIX1BfRURTQSA9
IF9FVEhfUF9FRFNBCitjb25zdCBJUFY2X0FERF9NRU1CRVJTSElQID0gX0lQVjZfQUREX01FTUJF
UlNISVAKK2NvbnN0IElQVjZfUE1UVURJU0NfUFJPQkUgPSBfSVBWNl9QTVRVRElTQ19QUk9CRQor
Y29uc3QgVENQX01ENVNJR19GTEFHX1BSRUZJWCA9IF9UQ1BfTUQ1U0lHX0ZMQUdfUFJFRklYCitj
b25zdCBBUlBIUkRfQURBUFQgPSBfQVJQSFJEX0FEQVBUCitjb25zdCBUQ1BfTUFYX1dJTlNISUZU
ID0gX1RDUF9NQVhfV0lOU0hJRlQKK2NvbnN0IElQUFJPVE9fSUdNUCA9IF9JUFBST1RPX0lHTVAK
K2NvbnN0IElQX01BWF9NRU1CRVJTSElQUyA9IF9JUF9NQVhfTUVNQkVSU0hJUFMKK2NvbnN0IEFG
X0FYMjUgPSBfQUZfQVgyNQorY29uc3QgQVJQSFJEX0VVSTY0ID0gX0FSUEhSRF9FVUk2NAorY29u
c3QgU09fRE9NQUlOID0gX1NPX0RPTUFJTgorY29uc3QgSVBWNl9QTVRVRElTQ19XQU5UID0gX0lQ
VjZfUE1UVURJU0NfV0FOVAorY29uc3QgSU5fTUFTS19BREQgPSBfSU5fTUFTS19BREQKK2NvbnN0
IFRDUF9NQVhTRUcgPSBfVENQX01BWFNFRworY29uc3QgSVBWNl9SVEhEUl9TVFJJQ1QgPSBfSVBW
Nl9SVEhEUl9TVFJJQ1QKK2NvbnN0IElQX1BNVFVESVNDX1BST0JFID0gX0lQX1BNVFVESVNDX1BS
T0JFCitjb25zdCBJUFY2X1VOSUNBU1RfSUYgPSBfSVBWNl9VTklDQVNUX0lGCitjb25zdCBFVEhf
UF9JRUVFODAyMTU0ID0gX0VUSF9QX0lFRUU4MDIxNTQKK2NvbnN0IEFGX0lORVQ2ID0gX0FGX0lO
RVQ2Citjb25zdCBFVEhfUF9MT09QID0gX0VUSF9QX0xPT1AKK2NvbnN0IFNPX1pFUk9DT1BZID0g
X1NPX1pFUk9DT1BZCitjb25zdCBJUFY2X1BNVFVESVNDX0RPTlQgPSBfSVBWNl9QTVRVRElTQ19E
T05UCitjb25zdCBBUlBIUkRfTkVUUk9NID0gX0FSUEhSRF9ORVRST00KK2NvbnN0IFRDUF9NQVhX
SU4gPSBfVENQX01BWFdJTgorY29uc3QgVENQX0ZBU1RPUEVOX0tFWSA9IF9UQ1BfRkFTVE9QRU5f
S0VZCitjb25zdCBFVEhfUF9ETkFfREwgPSBfRVRIX1BfRE5BX0RMCitjb25zdCBBUlBIUkRfWDI1
ID0gX0FSUEhSRF9YMjUKK2NvbnN0IEFSUEhSRF9FQ09ORVQgPSBfQVJQSFJEX0VDT05FVAorY29u
c3QgU09fV0lGSV9TVEFUVVMgPSBfU09fV0lGSV9TVEFUVVMKK2NvbnN0IEFSUEhSRF9GUkFEID0g
X0FSUEhSRF9GUkFECitjb25zdCBJUFBST1RPX0RDQ1AgPSBfSVBQUk9UT19EQ0NQCitjb25zdCBT
T0xfSVJEQSA9IF9TT0xfSVJEQQorY29uc3QgQUZfUEFDS0VUID0gX0FGX1BBQ0tFVAorY29uc3Qg
U09MX05FVEJFVUkgPSBfU09MX05FVEJFVUkKK2NvbnN0IFRDUF9RVUlDS0FDSyA9IF9UQ1BfUVVJ
Q0tBQ0sKK2NvbnN0IFRDUF9GQVNUT1BFTl9OT19DT09LSUUgPSBfVENQX0ZBU1RPUEVOX05PX0NP
T0tJRQorY29uc3QgQUZfS0VZID0gX0FGX0tFWQorY29uc3QgSVBWNl9UQ0xBU1MgPSBfSVBWNl9U
Q0xBU1MKK2NvbnN0IEFGX1gyNSA9IF9BRl9YMjUKK2NvbnN0IEFSUEhSRF9DU0xJUCA9IF9BUlBI
UkRfQ1NMSVAKK2NvbnN0IEVUSF9QX01PQklURVggPSBfRVRIX1BfTU9CSVRFWAorY29uc3QgQVJQ
SFJEX0NTTElQNiA9IF9BUlBIUkRfQ1NMSVA2Citjb25zdCBBUlBIUkRfTEFQQiA9IF9BUlBIUkRf
TEFQQgorY29uc3QgQUZfS0NNID0gX0FGX0tDTQorY29uc3QgQVJQSFJEX1NMSVAgPSBfQVJQSFJE
X1NMSVAKK2NvbnN0IFNPX0FUVEFDSF9GSUxURVIgPSBfU09fQVRUQUNIX0ZJTFRFUgorY29uc3Qg
RVRIX1BfSFNSID0gX0VUSF9QX0hTUgorY29uc3QgQVJQSFJEX1JPU0UgPSBfQVJQSFJEX1JPU0UK
K2NvbnN0IElOX0NMQVNTQl9OU0hJRlQgPSBfSU5fQ0xBU1NCX05TSElGVAorY29uc3QgSVBWNl9Y
RlJNX1BPTElDWSA9IF9JUFY2X1hGUk1fUE9MSUNZCitjb25zdCBBRl9JUFggPSBfQUZfSVBYCitj
b25zdCBTT19OT19DSEVDSyA9IF9TT19OT19DSEVDSworY29uc3QgQVJQSFJEX0xPQ0FMVExLID0g
X0FSUEhSRF9MT0NBTFRMSworY29uc3QgVENQX0NBX0NXUiA9IF9UQ1BfQ0FfQ1dSCitjb25zdCBB
Rl9VTklYID0gX0FGX1VOSVgKK2NvbnN0IEVUSF9QX0hETEMgPSBfRVRIX1BfSERMQworY29uc3Qg
QVJQSFJEX0hXWDI1ID0gX0FSUEhSRF9IV1gyNQorY29uc3QgSVBfQ0hFQ0tTVU0gPSBfSVBfQ0hF
Q0tTVU0KK2NvbnN0IFNPX05PRkNTID0gX1NPX05PRkNTCitjb25zdCBJUF9QS1RPUFRJT05TID0g
X0lQX1BLVE9QVElPTlMKK2NvbnN0IFRDUF9RVUVVRVNfTlIgPSBfVENQX1FVRVVFU19OUgorY29u
c3QgU09MX1BOUElQRSA9IF9TT0xfUE5QSVBFCitjb25zdCBBUlBIUkRfRkNGQUJSSUMgPSBfQVJQ
SFJEX0ZDRkFCUklDCitjb25zdCBUQ1BfU0FWRV9TWU4gPSBfVENQX1NBVkVfU1lOCitjb25zdCBB
Rl9DQUlGID0gX0FGX0NBSUYKK2NvbnN0IFNPTF9JUFY2ID0gX1NPTF9JUFY2Citjb25zdCBJUFY2
X1JFQ1ZPUklHRFNUQUREUiA9IF9JUFY2X1JFQ1ZPUklHRFNUQUREUgorY29uc3QgRVRIX1BfQVRN
TVBPQSA9IF9FVEhfUF9BVE1NUE9BCitjb25zdCBTT19PT0JJTkxJTkUgPSBfU09fT09CSU5MSU5F
Citjb25zdCBJUFY2X0FVVE9GTE9XTEFCRUwgPSBfSVBWNl9BVVRPRkxPV0xBQkVMCitjb25zdCBJ
UF9QTVRVRElTQ19ETyA9IF9JUF9QTVRVRElTQ19ETworY29uc3QgSVBfUEtUSU5GTyA9IF9JUF9Q
S1RJTkZPCitjb25zdCBTT0xfVElQQyA9IF9TT0xfVElQQworY29uc3QgQVJQSFJEX0lFRUU4MDIx
NTQgPSBfQVJQSFJEX0lFRUU4MDIxNTQKK2NvbnN0IElOX01PVkVfU0VMRiA9IF9JTl9NT1ZFX1NF
TEYKK2NvbnN0IEVUSF9QX0xBVCA9IF9FVEhfUF9MQVQKK2NvbnN0IEFGX1FJUENSVFIgPSBfQUZf
UUlQQ1JUUgorY29uc3QgU09fQUNDRVBUQ09OTiA9IF9TT19BQ0NFUFRDT05OCitjb25zdCBJUF9N
VUxUSUNBU1RfVFRMID0gX0lQX01VTFRJQ0FTVF9UVEwKK2NvbnN0IFNPQ0tfU0VRUEFDS0VUID0g
X1NPQ0tfU0VRUEFDS0VUCitjb25zdCBUQ1BfU1lOQ05UID0gX1RDUF9TWU5DTlQKK2NvbnN0IEVU
SF9QX1BSRUFVVEggPSBfRVRIX1BfUFJFQVVUSAorY29uc3QgSVBWNl8yMjkyUEtUSU5GTyA9IF9J
UFY2XzIyOTJQS1RJTkZPCitjb25zdCBFVEhfUF9GQ09FID0gX0VUSF9QX0ZDT0UKK2NvbnN0IEVU
SF9QXzE1ODggPSBfRVRIX1BfMTU4OAorY29uc3QgQVJQSFJEX0lSREEgPSBfQVJQSFJEX0lSREEK
K2NvbnN0IElQVjZfUkVDVlBBVEhNVFUgPSBfSVBWNl9SRUNWUEFUSE1UVQorY29uc3QgSVBfUkVU
T1BUUyA9IF9JUF9SRVRPUFRTCitjb25zdCBJUF9NVUxUSUNBU1RfSUYgPSBfSVBfTVVMVElDQVNU
X0lGCitjb25zdCBTT19SQ1ZUSU1FTyA9IF9TT19SQ1ZUSU1FTworY29uc3QgSVBfVE9TID0gX0lQ
X1RPUworY29uc3QgVENQX01ENVNJRyA9IF9UQ1BfTUQ1U0lHCitjb25zdCBJUFY2X1JUSERSRFNU
T1BUUyA9IF9JUFY2X1JUSERSRFNUT1BUUworY29uc3QgU09MX0NBSUYgPSBfU09MX0NBSUYKK2Nv
bnN0IEVUSF9QX0ROQV9SQyA9IF9FVEhfUF9ETkFfUkMKK2NvbnN0IEVUSF9QX0ROQV9SVCA9IF9F
VEhfUF9ETkFfUlQKK2NvbnN0IEVUSF9QX0NBSUYgPSBfRVRIX1BfQ0FJRgorY29uc3QgSVBfUkVD
VlRPUyA9IF9JUF9SRUNWVE9TCitjb25zdCBFVEhfVExFTiA9IF9FVEhfVExFTgorY29uc3QgSVBW
Nl9ORVhUSE9QID0gX0lQVjZfTkVYVEhPUAorY29uc3QgQUZfQVRNU1ZDID0gX0FGX0FUTVNWQwor
Y29uc3QgQVJQSFJEX0lQR1JFID0gX0FSUEhSRF9JUEdSRQorY29uc3QgSU5fQ0xBU1NBX05FVCA9
IF9JTl9DTEFTU0FfTkVUCitjb25zdCBJUFY2X0xFQVZFX0FOWUNBU1QgPSBfSVBWNl9MRUFWRV9B
TllDQVNUCitjb25zdCBBRl9JU0ROID0gX0FGX0lTRE4KK2NvbnN0IEFSUEhSRF9OT05FID0gX0FS
UEhSRF9OT05FCitjb25zdCBBUlBIUkRfQklGID0gX0FSUEhSRF9CSUYKK2NvbnN0IElQVjZfMjI5
MkRTVE9QVFMgPSBfSVBWNl8yMjkyRFNUT1BUUworY29uc3QgVENQX0NMT1NFID0gX1RDUF9DTE9T
RQorY29uc3QgU09fQVRUQUNIX0JQRiA9IF9TT19BVFRBQ0hfQlBGCitjb25zdCBBUlBIUkRfQ0hB
T1MgPSBfQVJQSFJEX0NIQU9TCitjb25zdCBFVEhfUF9CQVRNQU4gPSBfRVRIX1BfQkFUTUFOCitj
b25zdCBJUF9UVEwgPSBfSVBfVFRMCitjb25zdCBBRl9ORVRST00gPSBfQUZfTkVUUk9NCitjb25z
dCBFVEhfUF9UUl84MDJfMiA9IF9FVEhfUF9UUl84MDJfMgorY29uc3QgRVRIX1BfQUxMID0gX0VU
SF9QX0FMTAorY29uc3QgRVRIX1BfQ0FOID0gX0VUSF9QX0NBTgorY29uc3QgRVRIX1BfTVBMU19N
QyA9IF9FVEhfUF9NUExTX01DCitjb25zdCBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9S
VCA9IF9TT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVAorY29uc3QgRVRIX1BfRFNBID0g
X0VUSF9QX0RTQQorY29uc3QgSVBfUkVDVlRUTCA9IF9JUF9SRUNWVFRMCitjb25zdCBBRl9FQ09O
RVQgPSBfQUZfRUNPTkVUCitjb25zdCBFVEhfUF9BT0UgPSBfRVRIX1BfQU9FCitjb25zdCBJUF9Y
RlJNX1BPTElDWSA9IF9JUF9YRlJNX1BPTElDWQorY29uc3QgVENQX0ZJTl9XQUlUMiA9IF9UQ1Bf
RklOX1dBSVQyCitjb25zdCBFVEhfUF9YRFNBID0gX0VUSF9QX1hEU0EKK2NvbnN0IElQX1BNVFVE
SVNDID0gX0lQX1BNVFVESVNDCitjb25zdCBUQ1BfTVNTX0RFRkFVTFQgPSBfVENQX01TU19ERUZB
VUxUCitjb25zdCBBRl9DQU4gPSBfQUZfQ0FOCitjb25zdCBTT19USU1FU1RBTVAgPSBfU09fVElN
RVNUQU1QCitjb25zdCBTT19ET05UUk9VVEUgPSBfU09fRE9OVFJPVVRFCitjb25zdCBUQ1BfU0VO
RF9RVUVVRSA9IF9UQ1BfU0VORF9RVUVVRQorY29uc3QgU09fUEFTU1NFQyA9IF9TT19QQVNTU0VD
Citjb25zdCBUQ1BfTk9UU0VOVF9MT1dBVCA9IF9UQ1BfTk9UU0VOVF9MT1dBVAorY29uc3QgU09M
X0RDQ1AgPSBfU09MX0RDQ1AKK2NvbnN0IEVUSF9QX0FSUCA9IF9FVEhfUF9BUlAKK2NvbnN0IFNP
X1BFRVJDUkVEID0gX1NPX1BFRVJDUkVECitjb25zdCBJUFY2X0pPSU5fQU5ZQ0FTVCA9IF9JUFY2
X0pPSU5fQU5ZQ0FTVAorY29uc3QgSVBfUk9VVEVSX0FMRVJUID0gX0lQX1JPVVRFUl9BTEVSVAor
Y29uc3QgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04gPSBfU09fU0VDVVJJVFlfQVVUSEVOVElD
QVRJT04KK2NvbnN0IElQVjZfTVVMVElDQVNUX0lGID0gX0lQVjZfTVVMVElDQVNUX0lGCitjb25z
dCBTT19NQVhfUEFDSU5HX1JBVEUgPSBfU09fTUFYX1BBQ0lOR19SQVRFCitjb25zdCBBUlBIUkRf
SUVFRTgwMjE1NF9QSFkgPSBfQVJQSFJEX0lFRUU4MDIxNTRfUEhZCitjb25zdCBBUlBIUkRfRExD
SSA9IF9BUlBIUkRfRExDSQorY29uc3QgRVRIX1BfRklQID0gX0VUSF9QX0ZJUAorY29uc3QgRVRI
X1BfV0NDUCA9IF9FVEhfUF9XQ0NQCitjb25zdCBBUlBIUkRfUkFXSERMQyA9IF9BUlBIUkRfUkFX
SERMQworY29uc3QgQUZfSVVDViA9IF9BRl9JVUNWCitjb25zdCBUQ1BfRkFTVE9QRU5fQ09OTkVD
VCA9IF9UQ1BfRkFTVE9QRU5fQ09OTkVDVAorY29uc3QgSVBWNl9SRUNWSE9QT1BUUyA9IF9JUFY2
X1JFQ1ZIT1BPUFRTCitjb25zdCBFVEhfUF9NUExTX1VDID0gX0VUSF9QX01QTFNfVUMKK2NvbnN0
IElQX0JMT0NLX1NPVVJDRSA9IF9JUF9CTE9DS19TT1VSQ0UKK2NvbnN0IFRDUF9NU1NfREVTSVJF
RCA9IF9UQ1BfTVNTX0RFU0lSRUQKK2NvbnN0IFNPX0JTRENPTVBBVCA9IF9TT19CU0RDT01QQVQK
K2NvbnN0IEFGX01BWCA9IF9BRl9NQVgKK2NvbnN0IEVUSF9QX0lFRUVQVVBBVCA9IF9FVEhfUF9J
RUVFUFVQQVQKK2NvbnN0IElQUFJPVE9fRUdQID0gX0lQUFJPVE9fRUdQCitjb25zdCBJUF9NQVhQ
QUNLRVQgPSBfSVBfTUFYUEFDS0VUCitjb25zdCBFVEhfUF9YMjUgPSBfRVRIX1BfWDI1Citjb25z
dCBFVEhfUF9BRl9JVUNWID0gX0VUSF9QX0FGX0lVQ1YKK2NvbnN0IFNPTF9ERUNORVQgPSBfU09M
X0RFQ05FVAorY29uc3QgU09fREVUQUNIX0ZJTFRFUiA9IF9TT19ERVRBQ0hfRklMVEVSCitjb25z
dCBJTl9DTEFTU0JfTUFYID0gX0lOX0NMQVNTQl9NQVgKK2NvbnN0IElQX0hEUklOQ0wgPSBfSVBf
SERSSU5DTAorY29uc3QgVENQX0NBX1JlY292ZXJ5ID0gX1RDUF9DQV9SZWNvdmVyeQorY29uc3Qg
SU5fQ0xBU1NBX0hPU1QgPSBfSU5fQ0xBU1NBX0hPU1QKK2NvbnN0IElQVjZfUEFUSE1UVSA9IF9J
UFY2X1BBVEhNVFUKK2NvbnN0IFNPQ0tfUkRNID0gX1NPQ0tfUkRNCitjb25zdCBFVEhfUF9JUCA9
IF9FVEhfUF9JUAorY29uc3QgVENQX05PX1FVRVVFID0gX1RDUF9OT19RVUVVRQorY29uc3QgSU5f
RE9OVF9GT0xMT1cgPSBfSU5fRE9OVF9GT0xMT1cKK2NvbnN0IElQVjZfTUlOSE9QQ09VTlQgPSBf
SVBWNl9NSU5IT1BDT1VOVAorY29uc3QgSVBWNl9QTVRVRElTQ19JTlRFUkZBQ0UgPSBfSVBWNl9Q
TVRVRElTQ19JTlRFUkZBQ0UKK2NvbnN0IElQVjZfTVRVX0RJU0NPVkVSID0gX0lQVjZfTVRVX0RJ
U0NPVkVSCitjb25zdCBBUlBIUkRfRkRESSA9IF9BUlBIUkRfRkRESQorY29uc3QgSVBWNl9BRERS
X1BSRUZFUkVOQ0VTID0gX0lQVjZfQUREUl9QUkVGRVJFTkNFUworY29uc3QgRVRIX1BfODAyXzIg
PSBfRVRIX1BfODAyXzIKK2NvbnN0IEVUSF9QXzgwMl8zID0gX0VUSF9QXzgwMl8zCitjb25zdCBT
T19FUlJPUiA9IF9TT19FUlJPUgorY29uc3QgSVBWNl9IT1BMSU1JVCA9IF9JUFY2X0hPUExJTUlU
Citjb25zdCBFVEhfUF9QQUUgPSBfRVRIX1BfUEFFCitjb25zdCBJUF9NSU5UVEwgPSBfSVBfTUlO
VFRMCitjb25zdCBFVEhfUF9QQVVTRSA9IF9FVEhfUF9QQVVTRQorY29uc3QgSU5fQ0xBU1NCX05F
VCA9IF9JTl9DTEFTU0JfTkVUCitjb25zdCBTT19ERUJVRyA9IF9TT19ERUJVRworY29uc3QgSVBQ
Uk9UT19VRFAgPSBfSVBQUk9UT19VRFAKK2NvbnN0IEFSUEhSRF9QUFAgPSBfQVJQSFJEX1BQUAor
Y29uc3QgQUZfSUIgPSBfQUZfSUIKK2NvbnN0IEFGX0lSREEgPSBfQUZfSVJEQQorY29uc3QgSVBf
TVNTID0gX0lQX01TUworY29uc3QgSVBWNl9ET05URlJBRyA9IF9JUFY2X0RPTlRGUkFHCitjb25z
dCBJUFBST1RPX1NDVFAgPSBfSVBQUk9UT19TQ1RQCitjb25zdCBJUF9PRkZNQVNLID0gX0lQX09G
Rk1BU0sKK2NvbnN0IElQX1JFQ1ZPUklHRFNUQUREUiA9IF9JUF9SRUNWT1JJR0RTVEFERFIKK2Nv
bnN0IEVUSF9QX01BQ1NFQyA9IF9FVEhfUF9NQUNTRUMKK2NvbnN0IFRDUF9DT09LSUVfUEFJUl9T
SVpFID0gX1RDUF9DT09LSUVfUEFJUl9TSVpFCitjb25zdCBFVEhfUF9URUIgPSBfRVRIX1BfVEVC
Citjb25zdCBUQ1BfUkVDVl9RVUVVRSA9IF9UQ1BfUkVDVl9RVUVVRQorY29uc3QgQUZfQVBQTEVU
QUxLID0gX0FGX0FQUExFVEFMSworY29uc3QgU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JL
ID0gX1NPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSworY29uc3QgSU5fQ0xBU1NDX05TSElG
VCA9IF9JTl9DTEFTU0NfTlNISUZUCitjb25zdCBFVEhfUF9RSU5RMSA9IF9FVEhfUF9RSU5RMQor
Y29uc3QgRVRIX1BfUUlOUTIgPSBfRVRIX1BfUUlOUTIKK2NvbnN0IEVUSF9QX1FJTlEzID0gX0VU
SF9QX1FJTlEzCitjb25zdCBBRl9BVE1QVkMgPSBfQUZfQVRNUFZDCitjb25zdCBJUFBST1RPX0VT
UCA9IF9JUFBST1RPX0VTUAorY29uc3QgRVRIX1BfTlNIID0gX0VUSF9QX05TSAorY29uc3QgRVRI
X1BfQ0FORkQgPSBfRVRIX1BfQ0FORkQKK2NvbnN0IEFGX0RFQ25ldCA9IF9BRl9ERUNuZXQKK2Nv
bnN0IEVUSF9QX0xJTktfQ1RMID0gX0VUSF9QX0xJTktfQ1RMCitjb25zdCBJUF9PUFRJT05TID0g
X0lQX09QVElPTlMKK2NvbnN0IElQUFJPVE9fSE9QT1BUUyA9IF9JUFBST1RPX0hPUE9QVFMKK2Nv
bnN0IFNPX1NORExPV0FUID0gX1NPX1NORExPV0FUCitjb25zdCBTT19USU1FU1RBTVBOUyA9IF9T
T19USU1FU1RBTVBOUworY29uc3QgU09fQklORFRPREVWSUNFID0gX1NPX0JJTkRUT0RFVklDRQor
Y29uc3QgU09DS19DTE9FWEVDID0gX1NPQ0tfQ0xPRVhFQworY29uc3QgRVRIX1BfU05BUCA9IF9F
VEhfUF9TTkFQCitjb25zdCBJUF9VTkJMT0NLX1NPVVJDRSA9IF9JUF9VTkJMT0NLX1NPVVJDRQor
Y29uc3QgU09fUEFTU0NSRUQgPSBfU09fUEFTU0NSRUQKK2NvbnN0IEVUSF9QX1dBTl9QUFAgPSBf
RVRIX1BfV0FOX1BQUAorY29uc3QgSU5fRVhDTF9VTkxJTksgPSBfSU5fRVhDTF9VTkxJTksKK2Nv
bnN0IElQVjZfUlhIT1BPUFRTID0gX0lQVjZfUlhIT1BPUFRTCitjb25zdCBJUFY2X1JFQ1ZGUkFH
U0laRSA9IF9JUFY2X1JFQ1ZGUkFHU0laRQorY29uc3QgQUZfUEhPTkVUID0gX0FGX1BIT05FVAor
Y29uc3QgRVRIX0ZDU19MRU4gPSBfRVRIX0ZDU19MRU4KK2NvbnN0IElQVjZfSE9QT1BUUyA9IF9J
UFY2X0hPUE9QVFMKK2NvbnN0IFRDUF9RVUVVRV9TRVEgPSBfVENQX1FVRVVFX1NFUQorY29uc3Qg
SVBWNl9SVEhEUiA9IF9JUFY2X1JUSERSCitjb25zdCBJTl9NT1ZFID0gX0lOX01PVkUKK2NvbnN0
IEFSUEhSRF9JUEREUCA9IF9BUlBIUkRfSVBERFAKK2NvbnN0IElQVjZfUkVDVkVSUiA9IF9JUFY2
X1JFQ1ZFUlIKK2NvbnN0IElQUFJPVE9fSUNNUCA9IF9JUFBST1RPX0lDTVAKK2NvbnN0IElQUFJP
VE9fUFVQID0gX0lQUFJPVE9fUFVQCitjb25zdCBFVEhfUF9TTE9XID0gX0VUSF9QX1NMT1cKK2Nv
bnN0IEVUSF9QX0VDT05FVCA9IF9FVEhfUF9FQ09ORVQKK2NvbnN0IElQVjZfUkVDVlBLVElORk8g
PSBfSVBWNl9SRUNWUEtUSU5GTworY29uc3QgVENQX05PREVMQVkgPSBfVENQX05PREVMQVkKK2Nv
bnN0IElQVjZfRFJPUF9NRU1CRVJTSElQID0gX0lQVjZfRFJPUF9NRU1CRVJTSElQCitjb25zdCBF
VEhfUF9JUkRBID0gX0VUSF9QX0lSREEKK2NvbnN0IFRDUF9JTkZPID0gX1RDUF9JTkZPCitjb25z
dCBUQ1BfRklOX1dBSVQxID0gX1RDUF9GSU5fV0FJVDEKK2NvbnN0IFNPTF9JUCA9IF9TT0xfSVAK
K2NvbnN0IElOX0xPT1BCQUNLTkVUID0gX0lOX0xPT1BCQUNLTkVUCitjb25zdCBTT0xfQUFMID0g
X1NPTF9BQUwKK2NvbnN0IElQUFJPVE9fSURQID0gX0lQUFJPVE9fSURQCitjb25zdCBBRl9JTkVU
ID0gX0FGX0lORVQKK2NvbnN0IFRDUF9SRVBBSVJfUVVFVUUgPSBfVENQX1JFUEFJUl9RVUVVRQor
Y29uc3QgU09fR0VUX0ZJTFRFUiA9IF9TT19HRVRfRklMVEVSCitjb25zdCBTT19DT09LSUUgPSBf
U09fQ09PS0lFCitjb25zdCBTT19BVFRBQ0hfUkVVU0VQT1JUX0NCUEYgPSBfU09fQVRUQUNIX1JF
VVNFUE9SVF9DQlBGCitjb25zdCBJUFBST1RPX0dSRSA9IF9JUFBST1RPX0dSRQorY29uc3QgSVBQ
Uk9UT19UQ1AgPSBfSVBQUk9UT19UQ1AKK2NvbnN0IEVUSF9QX1BSUCA9IF9FVEhfUF9QUlAKK2Nv
bnN0IFRDUF9ERUZFUl9BQ0NFUFQgPSBfVENQX0RFRkVSX0FDQ0VQVAorY29uc3QgRVRIX0RBVEFf
TEVOID0gX0VUSF9EQVRBX0xFTgorY29uc3QgU09fSU5DT01JTkdfTkFQSV9JRCA9IF9TT19JTkNP
TUlOR19OQVBJX0lECitjb25zdCBFVEhfUF9QUFBfRElTQyA9IF9FVEhfUF9QUFBfRElTQworY29u
c3QgRVRIX1BfODAyXzNfTUlOID0gX0VUSF9QXzgwMl8zX01JTgorY29uc3QgSVBWNl9VTklDQVNU
X0hPUFMgPSBfSVBWNl9VTklDQVNUX0hPUFMKK2NvbnN0IElOX01PVkVEX1RPID0gX0lOX01PVkVE
X1RPCitjb25zdCBBRl9NUExTID0gX0FGX01QTFMKK2NvbnN0IEFGX1dBTlBJUEUgPSBfQUZfV0FO
UElQRQorY29uc3QgVENQX1RISU5fTElORUFSX1RJTUVPVVRTID0gX1RDUF9USElOX0xJTkVBUl9U
SU1FT1VUUworY29uc3QgSVBWNl9SRUNWRFNUT1BUUyA9IF9JUFY2X1JFQ1ZEU1RPUFRTCitjb25z
dCBBUlBIUkRfUkFXSVAgPSBfQVJQSFJEX1JBV0lQCitjb25zdCBFVEhfUF84MDJfRVgxID0gX0VU
SF9QXzgwMl9FWDEKK2NvbnN0IFNPX0xPQ0tfRklMVEVSID0gX1NPX0xPQ0tfRklMVEVSCitjb25z
dCBJUFBST1RPX01QTFMgPSBfSVBQUk9UT19NUExTCitjb25zdCBFVEhfUF9JUFY2ID0gX0VUSF9Q
X0lQVjYKK2NvbnN0IEVUSF9QX0FBUlAgPSBfRVRIX1BfQUFSUAorY29uc3QgQVJQSFJEX0xPT1BC
QUNLID0gX0FSUEhSRF9MT09QQkFDSworY29uc3QgU09fQlJPQURDQVNUID0gX1NPX0JST0FEQ0FT
VAorY29uc3QgSU5fQ0xBU1NDX05FVCA9IF9JTl9DTEFTU0NfTkVUCitjb25zdCBFVEhfWkxFTiA9
IF9FVEhfWkxFTgorY29uc3QgRVRIX1BfUFVQQVQgPSBfRVRIX1BfUFVQQVQKK2NvbnN0IElOX01P
VkVEX0ZST00gPSBfSU5fTU9WRURfRlJPTQorY29uc3QgSVBWNl9MRUFWRV9HUk9VUCA9IF9JUFY2
X0xFQVZFX0dST1VQCitjb25zdCBFVEhfUF9JQk9FID0gX0VUSF9QX0lCT0UKK2NvbnN0IFRDUF9F
U1RBQkxJU0hFRCA9IF9UQ1BfRVNUQUJMSVNIRUQKK2NvbnN0IEFSUEhSRF9BUkNORVQgPSBfQVJQ
SFJEX0FSQ05FVAorY29uc3QgRVRIX1BfUFVQID0gX0VUSF9QX1BVUAorY29uc3QgSVBfUkVDVk9Q
VFMgPSBfSVBfUkVDVk9QVFMKK2NvbnN0IEFSUEhSRF9TSVQgPSBfQVJQSFJEX1NJVAorY29uc3Qg
RVRIX1BfVElQQyA9IF9FVEhfUF9USVBDCitjb25zdCBBUlBIUkRfUElNUkVHID0gX0FSUEhSRF9Q
SU1SRUcKK2NvbnN0IElQVjZfTVVMVElDQVNUX0hPUFMgPSBfSVBWNl9NVUxUSUNBU1RfSE9QUwor
Y29uc3QgVENQX01ENVNJR19NQVhLRVlMRU4gPSBfVENQX01ENVNJR19NQVhLRVlMRU4KK2NvbnN0
IElQVjZfQVVUSEhEUiA9IF9JUFY2X0FVVEhIRFIKK2NvbnN0IEVUSF9BTEVOID0gX0VUSF9BTEVO
Citjb25zdCBUQ1BfTEFTVF9BQ0sgPSBfVENQX0xBU1RfQUNLCitjb25zdCBJUFBST1RPX01BWCA9
IF9JUFBST1RPX01BWAorY29uc3QgSU5fREVMRVRFX1NFTEYgPSBfSU5fREVMRVRFX1NFTEYKK2Nv
bnN0IElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUCA9IF9JUF9BRERfU09VUkNFX01FTUJFUlNISVAK
K2NvbnN0IEFGX0JMVUVUT09USCA9IF9BRl9CTFVFVE9PVEgKK2NvbnN0IFNPQ0tfRENDUCA9IF9T
T0NLX0RDQ1AKK2NvbnN0IFNPX1BFRVJHUk9VUFMgPSBfU09fUEVFUkdST1VQUworY29uc3QgU09f
S0VFUEFMSVZFID0gX1NPX0tFRVBBTElWRQorY29uc3QgQUZfTkVUTElOSyA9IF9BRl9ORVRMSU5L
Citjb25zdCBJUFY2X0FERFJGT1JNID0gX0lQVjZfQUREUkZPUk0KK2NvbnN0IEVUSF9QX0lGRSA9
IF9FVEhfUF9JRkUKK2NvbnN0IElQVjZfUkVDVkhPUExJTUlUID0gX0lQVjZfUkVDVkhPUExJTUlU
Citjb25zdCBJUF9NVFUgPSBfSVBfTVRVCitjb25zdCBTT0xfQUxHID0gX1NPTF9BTEcKK2NvbnN0
IEFSUEhSRF9BWDI1ID0gX0FSUEhSRF9BWDI1Citjb25zdCBTT0xfS0NNID0gX1NPTF9LQ00KK2Nv
bnN0IEFGX1BQUE9YID0gX0FGX1BQUE9YCitjb25zdCBBUlBIUkRfU0tJUCA9IF9BUlBIUkRfU0tJ
UAorY29uc3QgSVBWNl8yMjkyUlRIRFIgPSBfSVBWNl8yMjkyUlRIRFIKK2NvbnN0IFNPQ0tfU1RS
RUFNID0gX1NPQ0tfU1RSRUFNCitjb25zdCBFVEhfSExFTiA9IF9FVEhfSExFTgorY29uc3QgQVJQ
SFJEX0REQ01QID0gX0FSUEhSRF9ERENNUAorY29uc3QgSVBWNl9DSEVDS1NVTSA9IF9JUFY2X0NI
RUNLU1VNCitjb25zdCBFVEhfUF9QUFBfU0VTID0gX0VUSF9QX1BQUF9TRVMKK2NvbnN0IEFGX1NN
QyA9IF9BRl9TTUMKK2NvbnN0IEFSUEhSRF9JRUVFODAyID0gX0FSUEhSRF9JRUVFODAyCitjb25z
dCBTT0xfUFBQT0wyVFAgPSBfU09MX1BQUE9MMlRQCitjb25zdCBJTl9PTkxZRElSID0gX0lOX09O
TFlESVIKK2NvbnN0IEFGX1NOQSA9IF9BRl9TTkEKK2NvbnN0IFNPTF9MTEMgPSBfU09MX0xMQwor
Y29uc3QgU09fTElOR0VSID0gX1NPX0xJTkdFUgorY29uc3QgSVBfVU5JQ0FTVF9JRiA9IF9JUF9V
TklDQVNUX0lGCitjb25zdCBTT19SQ1ZCVUZGT1JDRSA9IF9TT19SQ1ZCVUZGT1JDRQorY29uc3Qg
SVBWNl9QS1RJTkZPID0gX0lQVjZfUEtUSU5GTworY29uc3QgSVBQUk9UT19JUElQID0gX0lQUFJP
VE9fSVBJUAorY29uc3QgSVBWNl9SRUNWUlRIRFIgPSBfSVBWNl9SRUNWUlRIRFIKK2NvbnN0IFRD
UF9DQV9PcGVuID0gX1RDUF9DQV9PcGVuCitjb25zdCBTT19CVVNZX1BPTEwgPSBfU09fQlVTWV9Q
T0xMCitjb25zdCBJUF9JUFNFQ19QT0xJQ1kgPSBfSVBfSVBTRUNfUE9MSUNZCitjb25zdCBTT19N
QVJLID0gX1NPX01BUksKK2NvbnN0IElOX0NSRUFURSA9IF9JTl9DUkVBVEUKK2NvbnN0IEFGX1JP
U0UgPSBfQUZfUk9TRQorY29uc3QgVENQX0NMT1NFX1dBSVQgPSBfVENQX0NMT1NFX1dBSVQKK2Nv
bnN0IElQVjZfUkVDVlRDTEFTUyA9IF9JUFY2X1JFQ1ZUQ0xBU1MKK2NvbnN0IEVUSF9NSU5fTVRV
ID0gX0VUSF9NSU5fTVRVCitjb25zdCBBRl9ORVRCRVVJID0gX0FGX05FVEJFVUkKK2NvbnN0IElQ
X0ZSRUVCSU5EID0gX0lQX0ZSRUVCSU5ECitjb25zdCBJTl9DTEFTU0FfTUFYID0gX0lOX0NMQVNT
QV9NQVgKK2NvbnN0IEFSUEhSRF9JRUVFODAyX1RSID0gX0FSUEhSRF9JRUVFODAyX1RSCitjb25z
dCBJTl9DTE9TRV9XUklURSA9IF9JTl9DTE9TRV9XUklURQorY29uc3QgU09MX0FUTSA9IF9TT0xf
QVRNCitjb25zdCBBRl9GSUxFID0gX0FGX0ZJTEUKK2NvbnN0IFNPTF9ORkMgPSBfU09MX05GQwor
Y29uc3QgQUZfUlhSUEMgPSBfQUZfUlhSUEMKK2NvbnN0IElOX0NMQVNTQl9IT1NUID0gX0lOX0NM
QVNTQl9IT1NUCitjb25zdCBJUFY2X1JYRFNUT1BUUyA9IF9JUFY2X1JYRFNUT1BUUworY29uc3Qg
RVRIX1BfTVZSUCA9IF9FVEhfUF9NVlJQCitjb25zdCBFVEhfUF9JUFggPSBfRVRIX1BfSVBYCitj
b25zdCBTT19QRUVSU0VDID0gX1NPX1BFRVJTRUMKK2NvbnN0IFRDUF9DT09LSUVfSU5fQUxXQVlT
ID0gX1RDUF9DT09LSUVfSU5fQUxXQVlTCitjb25zdCBJUFY2X0RTVE9QVFMgPSBfSVBWNl9EU1RP
UFRTCitjb25zdCBUQ1BfTUQ1U0lHX0VYVCA9IF9UQ1BfTUQ1U0lHX0VYVAorY29uc3QgSVBfTVRV
X0RJU0NPVkVSID0gX0lQX01UVV9ESVNDT1ZFUgorY29uc3QgSU5fTk9OQkxPQ0sgPSBfSU5fTk9O
QkxPQ0sKK2NvbnN0IEVUSF9NQVhfTVRVID0gX0VUSF9NQVhfTVRVCitjb25zdCBFVEhfUF9QSE9O
RVQgPSBfRVRIX1BfUEhPTkVUCitjb25zdCBJUFY2X1JUSERSX0xPT1NFID0gX0lQVjZfUlRIRFJf
TE9PU0UKK2NvbnN0IElQVjZfMjI5MlBLVE9QVElPTlMgPSBfSVBWNl8yMjkyUEtUT1BUSU9OUwor
Y29uc3QgSVBQUk9UT19JQ01QVjYgPSBfSVBQUk9UT19JQ01QVjYKK2NvbnN0IEVUSF9QX0FUQUxL
ID0gX0VUSF9QX0FUQUxLCitjb25zdCBJUF9EUk9QX01FTUJFUlNISVAgPSBfSVBfRFJPUF9NRU1C
RVJTSElQCitjb25zdCBJTl9DTE9TRSA9IF9JTl9DTE9TRQorY29uc3QgU09fUEVFS19PRkYgPSBf
U09fUEVFS19PRkYKK2NvbnN0IFNPX1JDVkJVRiA9IF9TT19SQ1ZCVUYKK2NvbnN0IFNPX1NFTEVD
VF9FUlJfUVVFVUUgPSBfU09fU0VMRUNUX0VSUl9RVUVVRQorY29uc3QgU09DS19OT05CTE9DSyA9
IF9TT0NLX05PTkJMT0NLCitjb25zdCBJUF9NVUxUSUNBU1RfQUxMID0gX0lQX01VTFRJQ0FTVF9B
TEwKK2NvbnN0IEFSUEhSRF9FRVRIRVIgPSBfQVJQSFJEX0VFVEhFUgorY29uc3QgVENQX1JFUEFJ
Ul9XSU5ET1cgPSBfVENQX1JFUEFJUl9XSU5ET1cKK2NvbnN0IElOX09QRU4gPSBfSU5fT1BFTgor
Y29uc3QgRVRIX1BfVFNOID0gX0VUSF9QX1RTTgorY29uc3QgRVRIX1BfQ09OVFJPTCA9IF9FVEhf
UF9DT05UUk9MCitjb25zdCBFVEhfUF9FUlNQQU4gPSBfRVRIX1BfRVJTUEFOCitjb25zdCBUQ1Bf
VUxQID0gX1RDUF9VTFAKK2NvbnN0IElQUFJPVE9fQkVFVFBIID0gX0lQUFJPVE9fQkVFVFBICitj
b25zdCBBUlBIUkRfQ0lTQ08gPSBfQVJQSFJEX0NJU0NPCitjb25zdCBJUFBST1RPX0RTVE9QVFMg
PSBfSVBQUk9UT19EU1RPUFRTCitjb25zdCBBRl9BTEcgPSBfQUZfQUxHCitjb25zdCBTT19SQ1ZM
T1dBVCA9IF9TT19SQ1ZMT1dBVAorY29uc3QgRVRIX1BfTUFQID0gX0VUSF9QX01BUAorY29uc3Qg
SVBQUk9UT19BSCA9IF9JUFBST1RPX0FICitjb25zdCBJTl9ERUxFVEUgPSBfSU5fREVMRVRFCitj
b25zdCBFVEhfUF9SQVJQID0gX0VUSF9QX1JBUlAKK2NvbnN0IFNPX1JFVVNFUE9SVCA9IF9TT19S
RVVTRVBPUlQKK2NvbnN0IFRDUF9SRVBBSVIgPSBfVENQX1JFUEFJUgorY29uc3QgQUZfVElQQyA9
IF9BRl9USVBDCitjb25zdCBTT0xfSVVDViA9IF9TT0xfSVVDVgorY29uc3QgSVBfRFJPUF9TT1VS
Q0VfTUVNQkVSU0hJUCA9IF9JUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQCitjb25zdCBBUlBIUkRf
TUVUUklDT00gPSBfQVJQSFJEX01FVFJJQ09NCitjb25zdCBJUFY2X1JUSERSX1RZUEVfMCA9IF9J
UFY2X1JUSERSX1RZUEVfMAorY29uc3QgSVBWNl9JUFNFQ19QT0xJQ1kgPSBfSVBWNl9JUFNFQ19Q
T0xJQ1kKK2NvbnN0IEFGX0xMQyA9IF9BRl9MTEMKK2NvbnN0IFNPX1NOREJVRkZPUkNFID0gX1NP
X1NOREJVRkZPUkNFCitjb25zdCBBUlBIUkRfQVBQTEVUTEsgPSBfQVJQSFJEX0FQUExFVExLCitj
b25zdCBJTl9DTE9TRV9OT1dSSVRFID0gX0lOX0NMT1NFX05PV1JJVEUKK2NvbnN0IEVUSF9QX0RE
Q01QID0gX0VUSF9QX0REQ01QCitjb25zdCBJUF9ERiA9IF9JUF9ERgorY29uc3QgU09fU05EQlVG
ID0gX1NPX1NOREJVRgorY29uc3QgQVJQSFJEX0FUTSA9IF9BUlBIUkRfQVRNCitjb25zdCBFVEhf
RlJBTUVfTEVOID0gX0VUSF9GUkFNRV9MRU4KK2NvbnN0IEFSUEhSRF9JRUVFMTM5NCA9IF9BUlBI
UkRfSUVFRTEzOTQKK2NvbnN0IElOX0FDQ0VTUyA9IF9JTl9BQ0NFU1MKK2NvbnN0IFRDUF9VU0VS
X1RJTUVPVVQgPSBfVENQX1VTRVJfVElNRU9VVAorY29uc3QgQVJQSFJEX0lFRUU4MDIxMSA9IF9B
UlBIUkRfSUVFRTgwMjExCitjb25zdCBFVEhfUF9URExTID0gX0VUSF9QX1RETFMKK2NvbnN0IElQ
X09SSUdEU1RBRERSID0gX0lQX09SSUdEU1RBRERSCitjb25zdCBFVEhfUF9TQ0EgPSBfRVRIX1Bf
U0NBCitjb25zdCBJUF9QTVRVRElTQ19PTUlUID0gX0lQX1BNVFVESVNDX09NSVQKK2NvbnN0IElQ
VjZfUk9VVEVSX0FMRVJUID0gX0lQVjZfUk9VVEVSX0FMRVJUCitjb25zdCBJUFY2X0hEUklOQ0wg
PSBfSVBWNl9IRFJJTkNMCitjb25zdCBBRl9BU0ggPSBfQUZfQVNICitjb25zdCBJUF9QTVRVRElT
Q19ET05UID0gX0lQX1BNVFVESVNDX0RPTlQKK2NvbnN0IElQVjZfSk9JTl9HUk9VUCA9IF9JUFY2
X0pPSU5fR1JPVVAKK2NvbnN0IFNPX1RZUEUgPSBfU09fVFlQRQorY29uc3QgSVBQUk9UT19JUCA9
IF9JUFBST1RPX0lQCitjb25zdCBTT19JTkNPTUlOR19DUFUgPSBfU09fSU5DT01JTkdfQ1BVCitj
b25zdCBUQ1BfV0lORE9XX0NMQU1QID0gX1RDUF9XSU5ET1dfQ0xBTVAKK2NvbnN0IFNPX1JYUV9P
VkZMID0gX1NPX1JYUV9PVkZMCitjb25zdCBJTl9DTE9FWEVDID0gX0lOX0NMT0VYRUMKK2NvbnN0
IElQUFJPVE9fQ09NUCA9IF9JUFBST1RPX0NPTVAKK2NvbnN0IFNPX0JQRl9FWFRFTlNJT05TID0g
X1NPX0JQRl9FWFRFTlNJT05TCitjb25zdCBJUFY2X01UVSA9IF9JUFY2X01UVQorY29uc3QgQVJQ
SFJEX0ZDQUwgPSBfQVJQSFJEX0ZDQUwKK2NvbnN0IElOX1FfT1ZFUkZMT1cgPSBfSU5fUV9PVkVS
RkxPVworY29uc3QgVENQX1RJTUVfV0FJVCA9IF9UQ1BfVElNRV9XQUlUCitjb25zdCBBRl9TRUNV
UklUWSA9IF9BRl9TRUNVUklUWQorY29uc3QgVENQX0ZBU1RPUEVOID0gX1RDUF9GQVNUT1BFTgor
Y29uc3QgQUZfTkZDID0gX0FGX05GQworY29uc3QgSVBWNl9UUkFOU1BBUkVOVCA9IF9JUFY2X1RS
QU5TUEFSRU5UCitjb25zdCBTT0xfUkFXID0gX1NPTF9SQVcKK2NvbnN0IElQX1BBU1NTRUMgPSBf
SVBfUEFTU1NFQworY29uc3QgVENQX0NPT0tJRV9NSU4gPSBfVENQX0NPT0tJRV9NSU4KK2NvbnN0
IElOX01PRElGWSA9IF9JTl9NT0RJRlkKK2NvbnN0IFRDUF9DT1JLID0gX1RDUF9DT1JLCitjb25z
dCBUQ1BfS0VFUElOVFZMID0gX1RDUF9LRUVQSU5UVkwKK2NvbnN0IElOX0lHTk9SRUQgPSBfSU5f
SUdOT1JFRAorY29uc3QgSVBQUk9UT19NSCA9IF9JUFBST1RPX01ICitjb25zdCBTT0xfUEFDS0VU
ID0gX1NPTF9QQUNLRVQKK2NvbnN0IElQUFJPVE9fUElNID0gX0lQUFJPVE9fUElNCitjb25zdCBT
T19SRVVTRUFERFIgPSBfU09fUkVVU0VBRERSCitjb25zdCBUQ1BfQ0FfTG9zcyA9IF9UQ1BfQ0Ff
TG9zcworY29uc3QgU09MX05FVExJTksgPSBfU09MX05FVExJTksKK2NvbnN0IEFSUEhSRF9SU1JW
RCA9IF9BUlBIUkRfUlNSVkQKK2NvbnN0IEVUSF9QX0JQUSA9IF9FVEhfUF9CUFEKK2NvbnN0IFRD
UF9USU1FU1RBTVAgPSBfVENQX1RJTUVTVEFNUAorY29uc3QgVENQX0NDX0lORk8gPSBfVENQX0ND
X0lORk8KK2NvbnN0IEVUSF9QX0RFQyA9IF9FVEhfUF9ERUMKK2NvbnN0IFNPTF9SRFMgPSBfU09M
X1JEUworY29uc3QgSVBQUk9UT19SU1ZQID0gX0lQUFJPVE9fUlNWUAorY29uc3QgQVJQSFJEX1RV
Tk5FTCA9IF9BUlBIUkRfVFVOTkVMCitjb25zdCBUQ1BfS0VFUENOVCA9IF9UQ1BfS0VFUENOVAor
Y29uc3QgVENQX1NZTl9SRUNWID0gX1RDUF9TWU5fUkVDVgorY29uc3QgVENQX0NBX0Rpc29yZGVy
ID0gX1RDUF9DQV9EaXNvcmRlcgorY29uc3QgSVBfTUYgPSBfSVBfTUYKK2NvbnN0IEFSUEhSRF9Q
Uk9ORVQgPSBfQVJQSFJEX1BST05FVAorY29uc3QgU09DS19QQUNLRVQgPSBfU09DS19QQUNLRVQK
K2NvbnN0IElOX0lTRElSID0gX0lOX0lTRElSCitjb25zdCBBRl9CUklER0UgPSBfQUZfQlJJREdF
Citjb25zdCBJUFY2X1BNVFVESVNDX09NSVQgPSBfSVBWNl9QTVRVRElTQ19PTUlUCitjb25zdCBB
UlBIUkRfVFVOTkVMNiA9IF9BUlBIUkRfVFVOTkVMNgorY29uc3QgU09MX1JYUlBDID0gX1NPTF9S
WFJQQworY29uc3QgVENQX0tFRVBJRExFID0gX1RDUF9LRUVQSURMRQorY29uc3QgRVRIX1BfQVgy
NSA9IF9FVEhfUF9BWDI1Citjb25zdCBJUFY2X0ZSRUVCSU5EID0gX0lQVjZfRlJFRUJJTkQKK2Nv
bnN0IEFSUEhSRF9IRExDID0gX0FSUEhSRF9IRExDCitjb25zdCBFVEhfUF9JRUVFUFVQID0gX0VU
SF9QX0lFRUVQVVAKK2NvbnN0IElOX0NMQVNTQV9OU0hJRlQgPSBfSU5fQ0xBU1NBX05TSElGVAor
Y29uc3QgSVBQUk9UT19NVFAgPSBfSVBQUk9UT19NVFAKK2NvbnN0IFNPTUFYQ09OTiA9IF9TT01B
WENPTk4KK2NvbnN0IFNIVVRfUkQgPSBfU0hVVF9SRAorY29uc3QgU0hVVF9XUiA9IF9TSFVUX1dS
Citjb25zdCBTSFVUX1JEV1IgPSBfU0hVVF9SRFdSCitjb25zdCBTQ19FWFBSX05FU1RfTUFYID0g
X19TQ19FWFBSX05FU1RfTUFYCitjb25zdCBTQ19MRVZFTDRfQ0FDSEVfU0laRSA9IF9fU0NfTEVW
RUw0X0NBQ0hFX1NJWkUKK2NvbnN0IFNDX01FTU9SWV9QUk9URUNUSU9OID0gX19TQ19NRU1PUllf
UFJPVEVDVElPTgorY29uc3QgU0NfVFlQRURfTUVNT1JZX09CSkVDVFMgPSBfX1NDX1RZUEVEX01F
TU9SWV9PQkpFQ1RTCitjb25zdCBTQ19PUEVOX01BWCA9IF9fU0NfT1BFTl9NQVgKK2NvbnN0IFND
XzJfU1dfREVWID0gX19TQ18yX1NXX0RFVgorY29uc3QgU0NfQVJHX01BWCA9IF9fU0NfQVJHX01B
WAorY29uc3QgU0NfVFJBQ0VfU1lTX01BWCA9IF9fU0NfVFJBQ0VfU1lTX01BWAorY29uc3QgU0Nf
WE9QRU5fWFBHMyA9IF9fU0NfWE9QRU5fWFBHMworY29uc3QgU0NfWE9QRU5fWFBHNCA9IF9fU0Nf
WE9QRU5fWFBHNAorY29uc3QgU0NfQkFTRSA9IF9fU0NfQkFTRQorY29uc3QgU0NfVEhSRUFEX1JP
QlVTVF9QUklPX1BST1RFQ1QgPSBfX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19QUk9URUNUCitjb25z
dCBTQ19OTF9MQU5HTUFYID0gX19TQ19OTF9MQU5HTUFYCitjb25zdCBTQ19SRUFMVElNRV9TSUdO
QUxTID0gX19TQ19SRUFMVElNRV9TSUdOQUxTCitjb25zdCBTQ19MRVZFTDFfRENBQ0hFX0FTU09D
ID0gX19TQ19MRVZFTDFfRENBQ0hFX0FTU09DCitjb25zdCBTQ19OUFJPQ0VTU09SU19PTkxOID0g
X19TQ19OUFJPQ0VTU09SU19PTkxOCitjb25zdCBTQ19MRVZFTDFfSUNBQ0hFX0xJTkVTSVpFID0g
X19TQ19MRVZFTDFfSUNBQ0hFX0xJTkVTSVpFCitjb25zdCBTQ18yX0NfVkVSU0lPTiA9IF9fU0Nf
Ml9DX1ZFUlNJT04KK2NvbnN0IFNDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgPSBfX1ND
X1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMKK2NvbnN0IFNDX1BSSU9SSVRZX1NDSEVEVUxJ
TkcgPSBfX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkcKK2NvbnN0IFNDX0lOVF9NQVggPSBfX1NDX0lO
VF9NQVgKK2NvbnN0IFNDX1hPUEVOX0NSWVBUID0gX19TQ19YT1BFTl9DUllQVAorY29uc3QgU0Nf
VjZfTFBCSUdfT0ZGQklHID0gX19TQ19WNl9MUEJJR19PRkZCSUcKK2NvbnN0IFNDX1VJT19NQVhJ
T1YgPSBfX1NDX1VJT19NQVhJT1YKK2NvbnN0IFNDX1RSQUNFX1VTRVJfRVZFTlRfTUFYID0gX19T
Q19UUkFDRV9VU0VSX0VWRU5UX01BWAorY29uc3QgU0NfQ09MTF9XRUlHSFRTX01BWCA9IF9fU0Nf
Q09MTF9XRUlHSFRTX01BWAorY29uc3QgU0NfVEhSRUFEX0NQVVRJTUUgPSBfX1NDX1RIUkVBRF9D
UFVUSU1FCitjb25zdCBTQ19CQ19TVFJJTkdfTUFYID0gX19TQ19CQ19TVFJJTkdfTUFYCitjb25z
dCBTQ19HRVRQV19SX1NJWkVfTUFYID0gX19TQ19HRVRQV19SX1NJWkVfTUFYCitjb25zdCBTQ19U
SFJFQURfQVRUUl9TVEFDS1NJWkUgPSBfX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRQorY29uc3Qg
U0NfSU5UX01JTiA9IF9fU0NfSU5UX01JTgorY29uc3QgU0NfVjZfTFA2NF9PRkY2NCA9IF9fU0Nf
VjZfTFA2NF9PRkY2NAorY29uc3QgU0NfQ0hBUl9NQVggPSBfX1NDX0NIQVJfTUFYCitjb25zdCBT
Q19BRFZJU09SWV9JTkZPID0gX19TQ19BRFZJU09SWV9JTkZPCitjb25zdCBTQ19UUkFDRSA9IF9f
U0NfVFJBQ0UKK2NvbnN0IFNDX1NIUlRfTUFYID0gX19TQ19TSFJUX01BWAorY29uc3QgU0NfMl9Q
QlNfTUVTU0FHRSA9IF9fU0NfMl9QQlNfTUVTU0FHRQorY29uc3QgU0NfVVNFUl9HUk9VUFMgPSBf
X1NDX1VTRVJfR1JPVVBTCitjb25zdCBTQ19DSEFSX0JJVCA9IF9fU0NfQ0hBUl9CSVQKK2NvbnN0
IFNDX1NIQVJFRF9NRU1PUllfT0JKRUNUUyA9IF9fU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTCitj
b25zdCBTQ19SRV9EVVBfTUFYID0gX19TQ19SRV9EVVBfTUFYCitjb25zdCBTQ19QSUlfSU5URVJO
RVQgPSBfX1NDX1BJSV9JTlRFUk5FVAorY29uc3QgU0NfSk9CX0NPTlRST0wgPSBfX1NDX0pPQl9D
T05UUk9MCitjb25zdCBTQ19GU1lOQyA9IF9fU0NfRlNZTkMKK2NvbnN0IFNDX1hCUzVfSUxQMzJf
T0ZGMzIgPSBfX1NDX1hCUzVfSUxQMzJfT0ZGMzIKK2NvbnN0IFNDXzJfQ19CSU5EID0gX19TQ18y
X0NfQklORAorY29uc3QgU0NfQ0hBUl9NSU4gPSBfX1NDX0NIQVJfTUlOCitjb25zdCBTQ19CQ19C
QVNFX01BWCA9IF9fU0NfQkNfQkFTRV9NQVgKK2NvbnN0IFNDX1hPUEVOX1ZFUlNJT04gPSBfX1ND
X1hPUEVOX1ZFUlNJT04KK2NvbnN0IFNDX05MX1NFVE1BWCA9IF9fU0NfTkxfU0VUTUFYCitjb25z
dCBTQ19TSFJUX01JTiA9IF9fU0NfU0hSVF9NSU4KK2NvbnN0IFNDX1Y2X0lMUDMyX09GRjMyID0g
X19TQ19WNl9JTFAzMl9PRkYzMgorY29uc3QgU0NfU0VNX05TRU1TX01BWCA9IF9fU0NfU0VNX05T
RU1TX01BWAorY29uc3QgU0NfQkFSUklFUlMgPSBfX1NDX0JBUlJJRVJTCitjb25zdCBTQ19XT1JE
X0JJVCA9IF9fU0NfV09SRF9CSVQKK2NvbnN0IFNDX0xFVkVMMV9JQ0FDSEVfU0laRSA9IF9fU0Nf
TEVWRUwxX0lDQUNIRV9TSVpFCitjb25zdCBTQ19ERVZJQ0VfU1BFQ0lGSUNfUiA9IF9fU0NfREVW
SUNFX1NQRUNJRklDX1IKK2NvbnN0IFNDX1NFTEVDVCA9IF9fU0NfU0VMRUNUCitjb25zdCBTQ19S
RUFERVJfV1JJVEVSX0xPQ0tTID0gX19TQ19SRUFERVJfV1JJVEVSX0xPQ0tTCitjb25zdCBTQ19B
SU9fUFJJT19ERUxUQV9NQVggPSBfX1NDX0FJT19QUklPX0RFTFRBX01BWAorY29uc3QgU0NfTU9O
T1RPTklDX0NMT0NLID0gX19TQ19NT05PVE9OSUNfQ0xPQ0sKK2NvbnN0IFNDX1NQT1JBRElDX1NF
UlZFUiA9IF9fU0NfU1BPUkFESUNfU0VSVkVSCitjb25zdCBTQ19QSUlfT1NJX0NMVFMgPSBfX1ND
X1BJSV9PU0lfQ0xUUworY29uc3QgU0NfWE9QRU5fWENVX1ZFUlNJT04gPSBfX1NDX1hPUEVOX1hD
VV9WRVJTSU9OCitjb25zdCBTQ19MRVZFTDJfQ0FDSEVfTElORVNJWkUgPSBfX1NDX0xFVkVMMl9D
QUNIRV9MSU5FU0laRQorY29uc3QgU0NfTEVWRUwyX0NBQ0hFX0FTU09DID0gX19TQ19MRVZFTDJf
Q0FDSEVfQVNTT0MKK2NvbnN0IFNDX0xFVkVMNF9DQUNIRV9MSU5FU0laRSA9IF9fU0NfTEVWRUw0
X0NBQ0hFX0xJTkVTSVpFCitjb25zdCBTQ19GSUxFX1NZU1RFTSA9IF9fU0NfRklMRV9TWVNURU0K
K2NvbnN0IFNDX1BJSV9PU0lfTSA9IF9fU0NfUElJX09TSV9NCitjb25zdCBTQ19TWVNURU1fREFU
QUJBU0VfUiA9IF9fU0NfU1lTVEVNX0RBVEFCQVNFX1IKK2NvbnN0IFNDX0ZJTEVfTE9DS0lORyA9
IF9fU0NfRklMRV9MT0NLSU5HCitjb25zdCBTQ19QQVNTX01BWCA9IF9fU0NfUEFTU19NQVgKK2Nv
bnN0IFNDXzJfUEJTX0xPQ0FURSA9IF9fU0NfMl9QQlNfTE9DQVRFCitjb25zdCBTQ19NRU1MT0NL
ID0gX19TQ19NRU1MT0NLCitjb25zdCBTQ19USFJFQURfUk9CVVNUX1BSSU9fSU5IRVJJVCA9IF9f
U0NfVEhSRUFEX1JPQlVTVF9QUklPX0lOSEVSSVQKK2NvbnN0IFNDX1BJSSA9IF9fU0NfUElJCitj
b25zdCBTQ19TSEVMTCA9IF9fU0NfU0hFTEwKK2NvbnN0IFNDX0RFVklDRV9JTyA9IF9fU0NfREVW
SUNFX0lPCitjb25zdCBTQ19YT1BFTl9FTkhfSTE4TiA9IF9fU0NfWE9QRU5fRU5IX0kxOE4KK2Nv
bnN0IFNDX1VTRVJfR1JPVVBTX1IgPSBfX1NDX1VTRVJfR1JPVVBTX1IKK2NvbnN0IFNDXzJfRk9S
VF9SVU4gPSBfX1NDXzJfRk9SVF9SVU4KK2NvbnN0IFNDX0NQVVRJTUUgPSBfX1NDX0NQVVRJTUUK
K2NvbnN0IFNDX1Y3X0xQNjRfT0ZGNjQgPSBfX1NDX1Y3X0xQNjRfT0ZGNjQKK2NvbnN0IFNDX1NZ
TUxPT1BfTUFYID0gX19TQ19TWU1MT09QX01BWAorY29uc3QgU0NfVEhSRUFEX0tFWVNfTUFYID0g
X19TQ19USFJFQURfS0VZU19NQVgKK2NvbnN0IFNDX1VJTlRfTUFYID0gX19TQ19VSU5UX01BWAor
Y29uc3QgU0NfWEJTNV9MUDY0X09GRjY0ID0gX19TQ19YQlM1X0xQNjRfT0ZGNjQKK2NvbnN0IFND
X1RSQUNFX0VWRU5UX0ZJTFRFUiA9IF9fU0NfVFJBQ0VfRVZFTlRfRklMVEVSCitjb25zdCBTQ19M
RVZFTDNfQ0FDSEVfU0laRSA9IF9fU0NfTEVWRUwzX0NBQ0hFX1NJWkUKK2NvbnN0IFNDX1RIUkVB
RF9QUklPX0lOSEVSSVQgPSBfX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQKK2NvbnN0IFNDXzJfUEJT
X0NIRUNLUE9JTlQgPSBfX1NDXzJfUEJTX0NIRUNLUE9JTlQKK2NvbnN0IFNDX05FVFdPUktJTkcg
PSBfX1NDX05FVFdPUktJTkcKK2NvbnN0IFNDX1RIUkVBRF9QUklPX1BST1RFQ1QgPSBfX1NDX1RI
UkVBRF9QUklPX1BST1RFQ1QKK2NvbnN0IFNDX1VDSEFSX01BWCA9IF9fU0NfVUNIQVJfTUFYCitj
b25zdCBTQ19YT1BFTl9TVFJFQU1TID0gX19TQ19YT1BFTl9TVFJFQU1TCitjb25zdCBTQ19MRVZF
TDNfQ0FDSEVfQVNTT0MgPSBfX1NDX0xFVkVMM19DQUNIRV9BU1NPQworY29uc3QgU0NfMl9VUEUg
PSBfX1NDXzJfVVBFCitjb25zdCBTQ19VU0hSVF9NQVggPSBfX1NDX1VTSFJUX01BWAorY29uc3Qg
U0NfUkVHRVhQID0gX19TQ19SRUdFWFAKK2NvbnN0IFNDX05aRVJPID0gX19TQ19OWkVSTworY29u
c3QgU0NfVF9JT1ZfTUFYID0gX19TQ19UX0lPVl9NQVgKK2NvbnN0IFNDX1BJUEUgPSBfX1NDX1BJ
UEUKK2NvbnN0IFNDX0FJT19NQVggPSBfX1NDX0FJT19NQVgKK2NvbnN0IFNDX1NFTUFQSE9SRVMg
PSBfX1NDX1NFTUFQSE9SRVMKK2NvbnN0IFNDX0FURVhJVF9NQVggPSBfX1NDX0FURVhJVF9NQVgK
K2NvbnN0IFNDX01RX1BSSU9fTUFYID0gX19TQ19NUV9QUklPX01BWAorY29uc3QgU0NfU0lOR0xF
X1BST0NFU1MgPSBfX1NDX1NJTkdMRV9QUk9DRVNTCitjb25zdCBTQ19HRVRHUl9SX1NJWkVfTUFY
ID0gX19TQ19HRVRHUl9SX1NJWkVfTUFYCitjb25zdCBTQ19QSUlfT1NJID0gX19TQ19QSUlfT1NJ
Citjb25zdCBTQ19DX0xBTkdfU1VQUE9SVF9SID0gX19TQ19DX0xBTkdfU1VQUE9SVF9SCitjb25z
dCBTQ19NRU1MT0NLX1JBTkdFID0gX19TQ19NRU1MT0NLX1JBTkdFCitjb25zdCBTQ0hFRF9IID0g
X19TQ0hFRF9ICitjb25zdCBTQ19WN19MUEJJR19PRkZCSUcgPSBfX1NDX1Y3X0xQQklHX09GRkJJ
RworY29uc3QgU0NfQ0xLX1RDSyA9IF9fU0NfQ0xLX1RDSworY29uc3QgU0NfVEhSRUFEX1BSSU9S
SVRZX1NDSEVEVUxJTkcgPSBfX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HCitjb25zdCBT
Q19OTF9OTUFYID0gX19TQ19OTF9OTUFYCitjb25zdCBTQ19QT0xMID0gX19TQ19QT0xMCitjb25z
dCBTQ19YT1BFTl9VTklYID0gX19TQ19YT1BFTl9VTklYCitjb25zdCBTQ19GSUZPID0gX19TQ19G
SUZPCitjb25zdCBTQ19UUkFDRV9JTkhFUklUID0gX19TQ19UUkFDRV9JTkhFUklUCitjb25zdCBT
Q19IT1NUX05BTUVfTUFYID0gX19TQ19IT1NUX05BTUVfTUFYCitjb25zdCBTQ19MT0dJTl9OQU1F
X01BWCA9IF9fU0NfTE9HSU5fTkFNRV9NQVgKK2NvbnN0IFNDX0xFVkVMNF9DQUNIRV9BU1NPQyA9
IF9fU0NfTEVWRUw0X0NBQ0hFX0FTU09DCitjb25zdCBTQ19QSUlfT1NJX0NPVFMgPSBfX1NDX1BJ
SV9PU0lfQ09UUworY29uc3QgU0NfMl9GT1JUX0RFViA9IF9fU0NfMl9GT1JUX0RFVgorY29uc3Qg
U0NfTkxfVEVYVE1BWCA9IF9fU0NfTkxfVEVYVE1BWAorY29uc3QgU0NfWE9QRU5fUkVBTFRJTUUg
PSBfX1NDX1hPUEVOX1JFQUxUSU1FCitjb25zdCBTQ19NQl9MRU5fTUFYID0gX19TQ19NQl9MRU5f
TUFYCitjb25zdCBTQ19SRUdFWF9WRVJTSU9OID0gX19TQ19SRUdFWF9WRVJTSU9OCitjb25zdCBT
Q19DX0xBTkdfU1VQUE9SVCA9IF9fU0NfQ19MQU5HX1NVUFBPUlQKK2NvbnN0IFNDX0xPTkdfQklU
ID0gX19TQ19MT05HX0JJVAorY29uc3QgU0NfTUFQUEVEX0ZJTEVTID0gX19TQ19NQVBQRURfRklM
RVMKK2NvbnN0IFNDX1JBV19TT0NLRVRTID0gX19TQ19SQVdfU09DS0VUUworY29uc3QgU0NfQkNf
RElNX01BWCA9IF9fU0NfQkNfRElNX01BWAorY29uc3QgU0NfMl9MT0NBTEVERUYgPSBfX1NDXzJf
TE9DQUxFREVGCitjb25zdCBTQ19YT1BFTl9YUEcyID0gX19TQ19YT1BFTl9YUEcyCitjb25zdCBT
Q18yX0NIQVJfVEVSTSA9IF9fU0NfMl9DSEFSX1RFUk0KK2NvbnN0IFNDX0xJTkVfTUFYID0gX19T
Q19MSU5FX01BWAorY29uc3QgU0NfU1lTVEVNX0RBVEFCQVNFID0gX19TQ19TWVNURU1fREFUQUJB
U0UKK2NvbnN0IFNDX1NDSEFSX01BWCA9IF9fU0NfU0NIQVJfTUFYCitjb25zdCBTQ19USFJFQURf
UFJPQ0VTU19TSEFSRUQgPSBfX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRAorY29uc3QgU0NfVjZf
SUxQMzJfT0ZGQklHID0gX19TQ19WNl9JTFAzMl9PRkZCSUcKK2NvbnN0IFNDXzJfUEJTID0gX19T
Q18yX1BCUworY29uc3QgU0NfU1RSRUFNUyA9IF9fU0NfU1RSRUFNUworY29uc3QgU0NfWE9QRU5f
UkVBTFRJTUVfVEhSRUFEUyA9IF9fU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUworY29uc3QgU0Nf
SVBWNiA9IF9fU0NfSVBWNgorY29uc3QgU0NfU1RSRUFNX01BWCA9IF9fU0NfU1RSRUFNX01BWAor
Y29uc3QgU0NfVUxPTkdfTUFYID0gX19TQ19VTE9OR19NQVgKK2NvbnN0IFNDX0NISUxEX01BWCA9
IF9fU0NfQ0hJTERfTUFYCitjb25zdCBTQ19UUkFDRV9FVkVOVF9OQU1FX01BWCA9IF9fU0NfVFJB
Q0VfRVZFTlRfTkFNRV9NQVgKK2NvbnN0IFNDX1RJTUVSX01BWCA9IF9fU0NfVElNRVJfTUFYCitj
b25zdCBTQ19TQ0hBUl9NSU4gPSBfX1NDX1NDSEFSX01JTgorY29uc3QgU0NfQVZQSFlTX1BBR0VT
ID0gX19TQ19BVlBIWVNfUEFHRVMKK2NvbnN0IFNDX05HUk9VUFNfTUFYID0gX19TQ19OR1JPVVBT
X01BWAorY29uc3QgU0NfTUVTU0FHRV9QQVNTSU5HID0gX19TQ19NRVNTQUdFX1BBU1NJTkcKK2Nv
bnN0IFNDX0xFVkVMMV9EQ0FDSEVfTElORVNJWkUgPSBfX1NDX0xFVkVMMV9EQ0FDSEVfTElORVNJ
WkUKK2NvbnN0IFNDX0xFVkVMMV9EQ0FDSEVfU0laRSA9IF9fU0NfTEVWRUwxX0RDQUNIRV9TSVpF
Citjb25zdCBTQ19JT1ZfTUFYID0gX19TQ19JT1ZfTUFYCitjb25zdCBTQ19CQ19TQ0FMRV9NQVgg
PSBfX1NDX0JDX1NDQUxFX01BWAorY29uc3QgU0NfU1NJWkVfTUFYID0gX19TQ19TU0laRV9NQVgK
K2NvbnN0IFNDX1Y3X0lMUDMyX09GRjMyID0gX19TQ19WN19JTFAzMl9PRkYzMgorY29uc3QgU0Nf
TEVWRUwzX0NBQ0hFX0xJTkVTSVpFID0gX19TQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUKK2NvbnN0
IFNDX1RIUkVBRFMgPSBfX1NDX1RIUkVBRFMKK2NvbnN0IFNDX1BJSV9JTlRFUk5FVF9ER1JBTSA9
IF9fU0NfUElJX0lOVEVSTkVUX0RHUkFNCitjb25zdCBTQ19UVFlfTkFNRV9NQVggPSBfX1NDX1RU
WV9OQU1FX01BWAorY29uc3QgU0NfUFJJT1JJVElaRURfSU8gPSBfX1NDX1BSSU9SSVRJWkVEX0lP
Citjb25zdCBTQ19YT1BFTl9TSE0gPSBfX1NDX1hPUEVOX1NITQorY29uc3QgU0NfUlRTSUdfTUFY
ID0gX19TQ19SVFNJR19NQVgKK2NvbnN0IFNDX1RIUkVBRF9USFJFQURTX01BWCA9IF9fU0NfVEhS
RUFEX1RIUkVBRFNfTUFYCitjb25zdCBTQ19BU1lOQ0hST05PVVNfSU8gPSBfX1NDX0FTWU5DSFJP
Tk9VU19JTworY29uc3QgU0NfTEVWRUwyX0NBQ0hFX1NJWkUgPSBfX1NDX0xFVkVMMl9DQUNIRV9T
SVpFCitjb25zdCBTQ19UWk5BTUVfTUFYID0gX19TQ19UWk5BTUVfTUFYCitjb25zdCBTQ19YQlM1
X0xQQklHX09GRkJJRyA9IF9fU0NfWEJTNV9MUEJJR19PRkZCSUcKK2NvbnN0IFNDX1RIUkVBRF9T
VEFDS19NSU4gPSBfX1NDX1RIUkVBRF9TVEFDS19NSU4KK2NvbnN0IFNDX1RIUkVBRF9TQUZFX0ZV
TkNUSU9OUyA9IF9fU0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TCitjb25zdCBTQ19YT1BFTl9MRUdB
Q1kgPSBfX1NDX1hPUEVOX0xFR0FDWQorY29uc3QgU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSID0g
X19TQ19USFJFQURfQVRUUl9TVEFDS0FERFIKK2NvbnN0IFNDX1NBVkVEX0lEUyA9IF9fU0NfU0FW
RURfSURTCitjb25zdCBTQ19WN19JTFAzMl9PRkZCSUcgPSBfX1NDX1Y3X0lMUDMyX09GRkJJRwor
Y29uc3QgU0NfTEVWRUwxX0lDQUNIRV9BU1NPQyA9IF9fU0NfTEVWRUwxX0lDQUNIRV9BU1NPQwor
Y29uc3QgU0NfREVMQVlUSU1FUl9NQVggPSBfX1NDX0RFTEFZVElNRVJfTUFYCitjb25zdCBTQ19U
SU1FT1VUUyA9IF9fU0NfVElNRU9VVFMKK2NvbnN0IFNDX1hCUzVfSUxQMzJfT0ZGQklHID0gX19T
Q19YQlM1X0lMUDMyX09GRkJJRworY29uc3QgU0NfVElNRVJTID0gX19TQ19USU1FUlMKK2NvbnN0
IFNDX05MX0FSR01BWCA9IF9fU0NfTkxfQVJHTUFYCitjb25zdCBTQ19QQUdFU0laRSA9IF9fU0Nf
UEFHRVNJWkUKK2NvbnN0IFNDX05QUk9DRVNTT1JTX0NPTkYgPSBfX1NDX05QUk9DRVNTT1JTX0NP
TkYKK2NvbnN0IFNDX1BJSV9YVEkgPSBfX1NDX1BJSV9YVEkKK2NvbnN0IFNDX1NQSU5fTE9DS1Mg
PSBfX1NDX1NQSU5fTE9DS1MKK2NvbnN0IFNDXzJfUEJTX0FDQ09VTlRJTkcgPSBfX1NDXzJfUEJT
X0FDQ09VTlRJTkcKK2NvbnN0IFNDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIgPSBfX1NDX1RIUkVB
RF9TUE9SQURJQ19TRVJWRVIKK2NvbnN0IFNDX0ZEX01HTVQgPSBfX1NDX0ZEX01HTVQKK2NvbnN0
IFNDX1NZTkNIUk9OSVpFRF9JTyA9IF9fU0NfU1lOQ0hST05JWkVEX0lPCitjb25zdCBTQ19FUVVJ
Vl9DTEFTU19NQVggPSBfX1NDX0VRVUlWX0NMQVNTX01BWAorY29uc3QgU0NfU1BBV04gPSBfX1ND
X1NQQVdOCitjb25zdCBTQ19DSEFSQ0xBU1NfTkFNRV9NQVggPSBfX1NDX0NIQVJDTEFTU19OQU1F
X01BWAorY29uc3QgU0NfUElJX0lOVEVSTkVUX1NUUkVBTSA9IF9fU0NfUElJX0lOVEVSTkVUX1NU
UkVBTQorY29uc3QgU0NfMl9QQlNfVFJBQ0sgPSBfX1NDXzJfUEJTX1RSQUNLCitjb25zdCBTQ19W
RVJTSU9OID0gX19TQ19WRVJTSU9OCitjb25zdCBTQ19TRU1fVkFMVUVfTUFYID0gX19TQ19TRU1f
VkFMVUVfTUFYCitjb25zdCBTQ19DTE9DS19TRUxFQ1RJT04gPSBfX1NDX0NMT0NLX1NFTEVDVElP
TgorY29uc3QgU0NfRklMRV9BVFRSSUJVVEVTID0gX19TQ19GSUxFX0FUVFJJQlVURVMKK2NvbnN0
IFNDX1NJR1FVRVVFX01BWCA9IF9fU0NfU0lHUVVFVUVfTUFYCitjb25zdCBTQ18yX0NfREVWID0g
X19TQ18yX0NfREVWCitjb25zdCBTQ19BSU9fTElTVElPX01BWCA9IF9fU0NfQUlPX0xJU1RJT19N
QVgKK2NvbnN0IFNDXzJfVkVSU0lPTiA9IF9fU0NfMl9WRVJTSU9OCitjb25zdCBTQ19ERVZJQ0Vf
U1BFQ0lGSUMgPSBfX1NDX0RFVklDRV9TUEVDSUZJQworY29uc3QgU0NfTkxfTVNHTUFYID0gX19T
Q19OTF9NU0dNQVgKK2NvbnN0IFNDX1BIWVNfUEFHRVMgPSBfX1NDX1BIWVNfUEFHRVMKK2NvbnN0
IFNDX1RSQUNFX0xPRyA9IF9fU0NfVFJBQ0VfTE9HCitjb25zdCBTQ19TU19SRVBMX01BWCA9IF9f
U0NfU1NfUkVQTF9NQVgKK2NvbnN0IFNDX01VTFRJX1BST0NFU1MgPSBfX1NDX01VTFRJX1BST0NF
U1MKK2NvbnN0IFNDX1BJSV9TT0NLRVQgPSBfX1NDX1BJSV9TT0NLRVQKK2NvbnN0IFNDX1RSQUNF
X05BTUVfTUFYID0gX19TQ19UUkFDRV9OQU1FX01BWAorY29uc3QgU0NfTVFfT1BFTl9NQVggPSBf
X1NDX01RX09QRU5fTUFYCitjb25zdCBTQ19TSUdOQUxTID0gX19TQ19TSUdOQUxTCitjb25zdCBQ
Q19SRUNfTUlOX1hGRVJfU0laRSA9IF9fUENfUkVDX01JTl9YRkVSX1NJWkUKK2NvbnN0IFBDX1BB
VEhfTUFYID0gX19QQ19QQVRIX01BWAorY29uc3QgUENfQUxMT0NfU0laRV9NSU4gPSBfX1BDX0FM
TE9DX1NJWkVfTUlOCitjb25zdCBQQ19TWU5DX0lPID0gX19QQ19TWU5DX0lPCitjb25zdCBQQ19N
QVhfQ0FOT04gPSBfX1BDX01BWF9DQU5PTgorY29uc3QgUENfRklMRVNJWkVCSVRTID0gX19QQ19G
SUxFU0laRUJJVFMKK2NvbnN0IFBDX05PX1RSVU5DID0gX19QQ19OT19UUlVOQworY29uc3QgUENf
U09DS19NQVhCVUYgPSBfX1BDX1NPQ0tfTUFYQlVGCitjb25zdCBQQ19QSVBFX0JVRiA9IF9fUENf
UElQRV9CVUYKK2NvbnN0IFBDX0xJTktfTUFYID0gX19QQ19MSU5LX01BWAorY29uc3QgUENfTkFN
RV9NQVggPSBfX1BDX05BTUVfTUFYCitjb25zdCBQQ19DSE9XTl9SRVNUUklDVEVEID0gX19QQ19D
SE9XTl9SRVNUUklDVEVECitjb25zdCBQQ19SRUNfWEZFUl9BTElHTiA9IF9fUENfUkVDX1hGRVJf
QUxJR04KK2NvbnN0IFBDX0FTWU5DX0lPID0gX19QQ19BU1lOQ19JTworY29uc3QgUENfUFJJT19J
TyA9IF9fUENfUFJJT19JTworY29uc3QgUENfUkVDX01BWF9YRkVSX1NJWkUgPSBfX1BDX1JFQ19N
QVhfWEZFUl9TSVpFCitjb25zdCBQQ19SRUNfSU5DUl9YRkVSX1NJWkUgPSBfX1BDX1JFQ19JTkNS
X1hGRVJfU0laRQorY29uc3QgUENfTUFYX0lOUFVUID0gX19QQ19NQVhfSU5QVVQKK2NvbnN0IFBD
X1ZESVNBQkxFID0gX19QQ19WRElTQUJMRQorY29uc3QgUENfMl9TWU1MSU5LUyA9IF9fUENfMl9T
WU1MSU5LUworY29uc3QgUENfU1lNTElOS19NQVggPSBfX1BDX1NZTUxJTktfTUFYCitjb25zdCBQ
YXRoTWF4ID0gX1BBVEhfTUFYCitjb25zdCBFUE9MTE1TRyA9IF9FUE9MTE1TRworY29uc3QgRVBP
TExSREJBTkQgPSBfRVBPTExSREJBTkQKK2NvbnN0IEVQT0xMRVhDTFVTSVZFID0gX0VQT0xMRVhD
TFVTSVZFCitjb25zdCBFUE9MTFdSTk9STSA9IF9FUE9MTFdSTk9STQorY29uc3QgRVBPTExfQ1RM
X0FERCA9IF9FUE9MTF9DVExfQURECitjb25zdCBFUE9MTFBSSSA9IF9FUE9MTFBSSQorY29uc3Qg
RVBPTExXUkJBTkQgPSBfRVBPTExXUkJBTkQKK2NvbnN0IEVQT0xMSU4gPSBfRVBPTExJTgorY29u
c3QgRVBPTExXQUtFVVAgPSBfRVBPTExXQUtFVVAKK2NvbnN0IEVQT0xMT1VUID0gX0VQT0xMT1VU
Citjb25zdCBFUE9MTFJESFVQID0gX0VQT0xMUkRIVVAKK2NvbnN0IEVQT0xMUkROT1JNID0gX0VQ
T0xMUkROT1JNCitjb25zdCBFUE9MTEVSUiA9IF9FUE9MTEVSUgorY29uc3QgRVBPTExIVVAgPSBf
RVBPTExIVVAKK2NvbnN0IEVQT0xMT05FU0hPVCA9IF9FUE9MTE9ORVNIT1QKK2NvbnN0IEVQT0xM
X0NMT0VYRUMgPSBfRVBPTExfQ0xPRVhFQworY29uc3QgRVBPTExfQ1RMX0RFTCA9IF9FUE9MTF9D
VExfREVMCitjb25zdCBFUE9MTF9DVExfTU9EID0gX0VQT0xMX0NUTF9NT0QKK2NvbnN0IEVQT0xM
RVQgPSBfRVBPTExFVAorY29uc3QgUFJfU1ZFX1ZMX0lOSEVSSVQgPSBfUFJfU1ZFX1ZMX0lOSEVS
SVQKK2NvbnN0IFBSX0ZQX0VYQ19TV19FTkFCTEUgPSBfUFJfRlBfRVhDX1NXX0VOQUJMRQorY29u
c3QgUFJfU0VUX0ZQX01PREUgPSBfUFJfU0VUX0ZQX01PREUKK2NvbnN0IFBSX1NFVF9TUEVDVUxB
VElPTl9DVFJMID0gX1BSX1NFVF9TUEVDVUxBVElPTl9DVFJMCitjb25zdCBQUl9HRVRfRlBfTU9E
RSA9IF9QUl9HRVRfRlBfTU9ERQorY29uc3QgUFJfU0VUX1NFQ0NPTVAgPSBfUFJfU0VUX1NFQ0NP
TVAKK2NvbnN0IFBSX1NQRUNfU1RPUkVfQllQQVNTID0gX1BSX1NQRUNfU1RPUkVfQllQQVNTCitj
b25zdCBQUl9DQVBfQU1CSUVOVCA9IF9QUl9DQVBfQU1CSUVOVAorY29uc3QgUFJfTUNFX0tJTExf
TEFURSA9IF9QUl9NQ0VfS0lMTF9MQVRFCitjb25zdCBQUl9TRVRfTU1fQVJHX0VORCA9IF9QUl9T
RVRfTU1fQVJHX0VORAorY29uc3QgUFJfU0VUX1RJTUVSU0xBQ0sgPSBfUFJfU0VUX1RJTUVSU0xB
Q0sKK2NvbnN0IFBSX1NFVF9NTV9BUkdfU1RBUlQgPSBfUFJfU0VUX01NX0FSR19TVEFSVAorY29u
c3QgUFJfU0VUX01NX01BUCA9IF9QUl9TRVRfTU1fTUFQCitjb25zdCBQUl9GUF9FWENfRElWID0g
X1BSX0ZQX0VYQ19ESVYKK2NvbnN0IFBSX1NFVF9NTV9FWEVfRklMRSA9IF9QUl9TRVRfTU1fRVhF
X0ZJTEUKK2NvbnN0IFBSX0NBUF9BTUJJRU5UX0xPV0VSID0gX1BSX0NBUF9BTUJJRU5UX0xPV0VS
Citjb25zdCBQUl9GUEVNVV9OT1BSSU5UID0gX1BSX0ZQRU1VX05PUFJJTlQKK2NvbnN0IFBSX1NF
VF9FTkRJQU4gPSBfUFJfU0VUX0VORElBTgorY29uc3QgUFJfR0VUX05BTUUgPSBfUFJfR0VUX05B
TUUKK2NvbnN0IFBSX1NWRV9TRVRfVkxfT05FWEVDID0gX1BSX1NWRV9TRVRfVkxfT05FWEVDCitj
b25zdCBQUl9TRVRfTkFNRSA9IF9QUl9TRVRfTkFNRQorY29uc3QgUFJfU0VUX01NX1NUQVJUX0JS
SyA9IF9QUl9TRVRfTU1fU1RBUlRfQlJLCitjb25zdCBQUl9HRVRfVElNSU5HID0gX1BSX0dFVF9U
SU1JTkcKK2NvbnN0IFBSX0NBUF9BTUJJRU5UX0lTX1NFVCA9IF9QUl9DQVBfQU1CSUVOVF9JU19T
RVQKK2NvbnN0IFBSX1NFVF9NTV9NQVBfU0laRSA9IF9QUl9TRVRfTU1fTUFQX1NJWkUKK2NvbnN0
IFBSX0ZQX0VYQ19JTlYgPSBfUFJfRlBfRVhDX0lOVgorY29uc3QgUFJfU0VUX1RTQyA9IF9QUl9T
RVRfVFNDCitjb25zdCBQUl9TRVRfUFRSQUNFUiA9IF9QUl9TRVRfUFRSQUNFUgorY29uc3QgUFJf
U0VUX01NX0JSSyA9IF9QUl9TRVRfTU1fQlJLCitjb25zdCBQUl9TRVRfVElNSU5HID0gX1BSX1NF
VF9USU1JTkcKK2NvbnN0IFBSX0dFVF9EVU1QQUJMRSA9IF9QUl9HRVRfRFVNUEFCTEUKK2NvbnN0
IFBSX0dFVF9UU0MgPSBfUFJfR0VUX1RTQworY29uc3QgUFJfTUNFX0tJTExfR0VUID0gX1BSX01D
RV9LSUxMX0dFVAorY29uc3QgUFJfTUNFX0tJTExfQ0xFQVIgPSBfUFJfTUNFX0tJTExfQ0xFQVIK
K2NvbnN0IFBSX0ZQX0VYQ19PVkYgPSBfUFJfRlBfRVhDX09WRgorY29uc3QgUFJfU0VUX1NFQ1VS
RUJJVFMgPSBfUFJfU0VUX1NFQ1VSRUJJVFMKK2NvbnN0IFBSX1RJTUlOR19TVEFUSVNUSUNBTCA9
IF9QUl9USU1JTkdfU1RBVElTVElDQUwKK2NvbnN0IFBSX01QWF9FTkFCTEVfTUFOQUdFTUVOVCA9
IF9QUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQKK2NvbnN0IFBSX0ZQX0VYQ19ESVNBQkxFRCA9IF9Q
Ul9GUF9FWENfRElTQUJMRUQKK2NvbnN0IFBSX01QWF9ESVNBQkxFX01BTkFHRU1FTlQgPSBfUFJf
TVBYX0RJU0FCTEVfTUFOQUdFTUVOVAorY29uc3QgUFJfVFNDX1NJR1NFR1YgPSBfUFJfVFNDX1NJ
R1NFR1YKK2NvbnN0IFBSX1NFVF9LRUVQQ0FQUyA9IF9QUl9TRVRfS0VFUENBUFMKK2NvbnN0IFBS
X0VORElBTl9CSUcgPSBfUFJfRU5ESUFOX0JJRworY29uc3QgUFJfU0VUX01NX0FVWFYgPSBfUFJf
U0VUX01NX0FVWFYKK2NvbnN0IFBSX1NFVF9VTkFMSUdOID0gX1BSX1NFVF9VTkFMSUdOCitjb25z
dCBQUl9HRVRfTk9fTkVXX1BSSVZTID0gX1BSX0dFVF9OT19ORVdfUFJJVlMKK2NvbnN0IFBSX0dF
VF9USURfQUREUkVTUyA9IF9QUl9HRVRfVElEX0FERFJFU1MKK2NvbnN0IFBSX0ZQX01PREVfRlJF
ID0gX1BSX0ZQX01PREVfRlJFCitjb25zdCBQUl9HRVRfRlBFWEMgPSBfUFJfR0VUX0ZQRVhDCitj
b25zdCBQUl9DQVBCU0VUX1JFQUQgPSBfUFJfQ0FQQlNFVF9SRUFECitjb25zdCBQUl9TUEVDX0lO
RElSRUNUX0JSQU5DSCA9IF9QUl9TUEVDX0lORElSRUNUX0JSQU5DSAorY29uc3QgUFJfU0VUX0NI
SUxEX1NVQlJFQVBFUiA9IF9QUl9TRVRfQ0hJTERfU1VCUkVBUEVSCitjb25zdCBQUl9TUEVDX0RJ
U0FCTEUgPSBfUFJfU1BFQ19ESVNBQkxFCitjb25zdCBQUl9TRVRfTk9fTkVXX1BSSVZTID0gX1BS
X1NFVF9OT19ORVdfUFJJVlMKK2NvbnN0IFBSX1NQRUNfTk9UX0FGRkVDVEVEID0gX1BSX1NQRUNf
Tk9UX0FGRkVDVEVECitjb25zdCBQUl9GUF9FWENfVU5EID0gX1BSX0ZQX0VYQ19VTkQKK2NvbnN0
IFBSX0dFVF9QREVBVEhTSUcgPSBfUFJfR0VUX1BERUFUSFNJRworY29uc3QgUFJfU1ZFX0dFVF9W
TCA9IF9QUl9TVkVfR0VUX1ZMCitjb25zdCBQUl9FTkRJQU5fUFBDX0xJVFRMRSA9IF9QUl9FTkRJ
QU5fUFBDX0xJVFRMRQorY29uc3QgUFJfU0VUX01NID0gX1BSX1NFVF9NTQorY29uc3QgUFJfQ0FQ
X0FNQklFTlRfUkFJU0UgPSBfUFJfQ0FQX0FNQklFTlRfUkFJU0UKK2NvbnN0IFBSX0ZQX0VYQ19Q
UkVDSVNFID0gX1BSX0ZQX0VYQ19QUkVDSVNFCitjb25zdCBQUl9TRVRfVEhQX0RJU0FCTEUgPSBf
UFJfU0VUX1RIUF9ESVNBQkxFCitjb25zdCBQUl9GUF9FWENfQVNZTkMgPSBfUFJfRlBfRVhDX0FT
WU5DCitjb25zdCBQUl9GUEVNVV9TSUdGUEUgPSBfUFJfRlBFTVVfU0lHRlBFCitjb25zdCBQUl9F
TkRJQU5fTElUVExFID0gX1BSX0VORElBTl9MSVRUTEUKK2NvbnN0IFBSX1NFVF9NTV9FTlZfU1RB
UlQgPSBfUFJfU0VUX01NX0VOVl9TVEFSVAorY29uc3QgUFJfQ0FQQlNFVF9EUk9QID0gX1BSX0NB
UEJTRVRfRFJPUAorY29uc3QgUFJfU1BFQ19FTkFCTEUgPSBfUFJfU1BFQ19FTkFCTEUKK2NvbnN0
IFBSX0NBUF9BTUJJRU5UX0NMRUFSX0FMTCA9IF9QUl9DQVBfQU1CSUVOVF9DTEVBUl9BTEwKK2Nv
bnN0IFBSX1RTQ19FTkFCTEUgPSBfUFJfVFNDX0VOQUJMRQorY29uc3QgUFJfU1ZFX1ZMX0xFTl9N
QVNLID0gX1BSX1NWRV9WTF9MRU5fTUFTSworY29uc3QgUFJfVEFTS19QRVJGX0VWRU5UU19FTkFC
TEUgPSBfUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUKK2NvbnN0IFBSX1NFVF9EVU1QQUJMRSA9
IF9QUl9TRVRfRFVNUEFCTEUKK2NvbnN0IFBSX0dFVF9USFBfRElTQUJMRSA9IF9QUl9HRVRfVEhQ
X0RJU0FCTEUKK2NvbnN0IFBSX0dFVF9DSElMRF9TVUJSRUFQRVIgPSBfUFJfR0VUX0NISUxEX1NV
QlJFQVBFUgorY29uc3QgUFJfU0VUX01NX1NUQVJUX0NPREUgPSBfUFJfU0VUX01NX1NUQVJUX0NP
REUKK2NvbnN0IFBSX1NWRV9TRVRfVkwgPSBfUFJfU1ZFX1NFVF9WTAorY29uc3QgUFJfTUNFX0tJ
TExfREVGQVVMVCA9IF9QUl9NQ0VfS0lMTF9ERUZBVUxUCitjb25zdCBQUl9HRVRfRU5ESUFOID0g
X1BSX0dFVF9FTkRJQU4KK2NvbnN0IFBSX0dFVF9TRUNDT01QID0gX1BSX0dFVF9TRUNDT01QCitj
b25zdCBQUl9HRVRfU1BFQ1VMQVRJT05fQ1RSTCA9IF9QUl9HRVRfU1BFQ1VMQVRJT05fQ1RSTAor
Y29uc3QgUFJfR0VUX1RJTUVSU0xBQ0sgPSBfUFJfR0VUX1RJTUVSU0xBQ0sKK2NvbnN0IFBSX0ZQ
X0VYQ19SRVMgPSBfUFJfRlBfRVhDX1JFUworY29uc3QgUFJfU0VUX01NX0VORF9DT0RFID0gX1BS
X1NFVF9NTV9FTkRfQ09ERQorY29uc3QgUFJfR0VUX1VOQUxJR04gPSBfUFJfR0VUX1VOQUxJR04K
K2NvbnN0IFBSX1NFVF9QREVBVEhTSUcgPSBfUFJfU0VUX1BERUFUSFNJRworY29uc3QgUFJfVEFT
S19QRVJGX0VWRU5UU19ESVNBQkxFID0gX1BSX1RBU0tfUEVSRl9FVkVOVFNfRElTQUJMRQorY29u
c3QgUFJfU1BFQ19GT1JDRV9ESVNBQkxFID0gX1BSX1NQRUNfRk9SQ0VfRElTQUJMRQorY29uc3Qg
UFJfTUNFX0tJTExfU0VUID0gX1BSX01DRV9LSUxMX1NFVAorY29uc3QgUFJfU0VUX01NX1NUQVJU
X1NUQUNLID0gX1BSX1NFVF9NTV9TVEFSVF9TVEFDSworY29uc3QgUFJfU0VUX0ZQRU1VID0gX1BS
X1NFVF9GUEVNVQorY29uc3QgUFJfVU5BTElHTl9OT1BSSU5UID0gX1BSX1VOQUxJR05fTk9QUklO
VAorY29uc3QgUFJfU0VUX01NX1NUQVJUX0RBVEEgPSBfUFJfU0VUX01NX1NUQVJUX0RBVEEKK2Nv
bnN0IFBSX1NFVF9NTV9FTlZfRU5EID0gX1BSX1NFVF9NTV9FTlZfRU5ECitjb25zdCBQUl9NQ0Vf
S0lMTF9FQVJMWSA9IF9QUl9NQ0VfS0lMTF9FQVJMWQorY29uc3QgUFJfRlBfTU9ERV9GUiA9IF9Q
Ul9GUF9NT0RFX0ZSCitjb25zdCBQUl9GUF9FWENfTk9OUkVDT1YgPSBfUFJfRlBfRVhDX05PTlJF
Q09WCitjb25zdCBQUl9HRVRfU0VDVVJFQklUUyA9IF9QUl9HRVRfU0VDVVJFQklUUworY29uc3Qg
UFJfU0VUX0ZQRVhDID0gX1BSX1NFVF9GUEVYQworY29uc3QgUFJfTUNFX0tJTEwgPSBfUFJfTUNF
X0tJTEwKK2NvbnN0IFBSX1NFVF9NTV9FTkRfREFUQSA9IF9QUl9TRVRfTU1fRU5EX0RBVEEKK2Nv
bnN0IFBSX0dFVF9GUEVNVSA9IF9QUl9HRVRfRlBFTVUKK2NvbnN0IFBSX0dFVF9LRUVQQ0FQUyA9
IF9QUl9HRVRfS0VFUENBUFMKK2NvbnN0IFBSX1NQRUNfUFJDVEwgPSBfUFJfU1BFQ19QUkNUTAor
Y29uc3QgUFJfVElNSU5HX1RJTUVTVEFNUCA9IF9QUl9USU1JTkdfVElNRVNUQU1QCitjb25zdCBQ
Ul9VTkFMSUdOX1NJR0JVUyA9IF9QUl9VTkFMSUdOX1NJR0JVUworY29uc3QgUFRSQUNFX0VWRU5U
X0VYRUMgPSBfUFRSQUNFX0VWRU5UX0VYRUMKK2NvbnN0IFBUUkFDRV9FVkVOVF9FWElUID0gX1BU
UkFDRV9FVkVOVF9FWElUCitjb25zdCBQVFJBQ0VfT19UUkFDRUNMT05FID0gX1BUUkFDRV9PX1RS
QUNFQ0xPTkUKK2NvbnN0IFBUUkFDRV9BVFRBQ0ggPSBfUFRSQUNFX0FUVEFDSAorY29uc3QgUFRS
QUNFX0dFVEZQWFJFR1MgPSBfUFRSQUNFX0dFVEZQWFJFR1MKK2NvbnN0IFBUUkFDRV9QRUVLVVNF
UiA9IF9QVFJBQ0VfUEVFS1VTRVIKK2NvbnN0IFBUUkFDRV9DT05UID0gX1BUUkFDRV9DT05UCitj
b25zdCBQVFJBQ0VfUEVFS1RFWFQgPSBfUFRSQUNFX1BFRUtURVhUCitjb25zdCBQVFJBQ0VfR0VU
RVZFTlRNU0cgPSBfUFRSQUNFX0dFVEVWRU5UTVNHCitjb25zdCBQVFJBQ0VfUEVFS0RBVEEgPSBf
UFRSQUNFX1BFRUtEQVRBCitjb25zdCBQVFJBQ0VfU1lTQ0FMTCA9IF9QVFJBQ0VfU1lTQ0FMTAor
Y29uc3QgUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUgPSBfUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUK
K2NvbnN0IFBUUkFDRV9PX0VYSVRLSUxMID0gX1BUUkFDRV9PX0VYSVRLSUxMCitjb25zdCBQVFJB
Q0VfU0lOR0xFU1RFUCA9IF9QVFJBQ0VfU0lOR0xFU1RFUAorY29uc3QgUFRSQUNFX1BPS0VEQVRB
ID0gX1BUUkFDRV9QT0tFREFUQQorY29uc3QgUFRSQUNFX1NFVE9QVElPTlMgPSBfUFRSQUNFX1NF
VE9QVElPTlMKK2NvbnN0IFBUUkFDRV9PX01BU0sgPSBfUFRSQUNFX09fTUFTSworY29uc3QgUFRS
QUNFX1NFVFNJR0lORk8gPSBfUFRSQUNFX1NFVFNJR0lORk8KK2NvbnN0IFBUUkFDRV9TSU5HTEVC
TE9DSyA9IF9QVFJBQ0VfU0lOR0xFQkxPQ0sKK2NvbnN0IFBUUkFDRV9JTlRFUlJVUFQgPSBfUFRS
QUNFX0lOVEVSUlVQVAorY29uc3QgUFRSQUNFX09MRFNFVE9QVElPTlMgPSBfUFRSQUNFX09MRFNF
VE9QVElPTlMKK2NvbnN0IFBUUkFDRV9FVkVOVF9WRk9SSyA9IF9QVFJBQ0VfRVZFTlRfVkZPUksK
K2NvbnN0IFBUUkFDRV9UUkFDRU1FID0gX1BUUkFDRV9UUkFDRU1FCitjb25zdCBQVFJBQ0VfU0VJ
WkUgPSBfUFRSQUNFX1NFSVpFCitjb25zdCBQVFJBQ0VfREVUQUNIID0gX1BUUkFDRV9ERVRBQ0gK
K2NvbnN0IFBUUkFDRV9HRVRTSUdJTkZPID0gX1BUUkFDRV9HRVRTSUdJTkZPCitjb25zdCBQVFJB
Q0VfRVZFTlRfU0VDQ09NUCA9IF9QVFJBQ0VfRVZFTlRfU0VDQ09NUAorY29uc3QgUFRSQUNFX09f
U1VTUEVORF9TRUNDT01QID0gX1BUUkFDRV9PX1NVU1BFTkRfU0VDQ09NUAorY29uc3QgUFRSQUNF
X1NFVF9USFJFQURfQVJFQSA9IF9QVFJBQ0VfU0VUX1RIUkVBRF9BUkVBCitjb25zdCBQVFJBQ0Vf
UEVFS1NJR0lORk8gPSBfUFRSQUNFX1BFRUtTSUdJTkZPCitjb25zdCBQVFJBQ0VfU1lTRU1VX1NJ
TkdMRVNURVAgPSBfUFRSQUNFX1NZU0VNVV9TSU5HTEVTVEVQCitjb25zdCBQVFJBQ0VfT19UUkFD
RUZPUksgPSBfUFRSQUNFX09fVFJBQ0VGT1JLCitjb25zdCBQVFJBQ0VfR0VUU0lHTUFTSyA9IF9Q
VFJBQ0VfR0VUU0lHTUFTSworY29uc3QgUFRSQUNFX1BPS0VVU0VSID0gX1BUUkFDRV9QT0tFVVNF
UgorY29uc3QgUFRSQUNFX1NZU0VNVSA9IF9QVFJBQ0VfU1lTRU1VCitjb25zdCBQVFJBQ0VfTElT
VEVOID0gX1BUUkFDRV9MSVNURU4KK2NvbnN0IFBUUkFDRV9QRUVLU0lHSU5GT19TSEFSRUQgPSBf
UFRSQUNFX1BFRUtTSUdJTkZPX1NIQVJFRAorY29uc3QgUFRSQUNFX1BPS0VVU1IgPSBfUFRSQUNF
X1BPS0VVU1IKK2NvbnN0IFBUUkFDRV9LSUxMID0gX1BUUkFDRV9LSUxMCitjb25zdCBQVFJBQ0Vf
T19UUkFDRVNZU0dPT0QgPSBfUFRSQUNFX09fVFJBQ0VTWVNHT09ECitjb25zdCBQVFJBQ0VfT19U
UkFDRUVYRUMgPSBfUFRSQUNFX09fVFJBQ0VFWEVDCitjb25zdCBQVFJBQ0VfT19UUkFDRVZGT1JL
RE9ORSA9IF9QVFJBQ0VfT19UUkFDRVZGT1JLRE9ORQorY29uc3QgUFRSQUNFX0dFVFJFR1NFVCA9
IF9QVFJBQ0VfR0VUUkVHU0VUCitjb25zdCBQVFJBQ0VfT19UUkFDRUVYSVQgPSBfUFRSQUNFX09f
VFJBQ0VFWElUCitjb25zdCBQVFJBQ0VfRVZFTlRfQ0xPTkUgPSBfUFRSQUNFX0VWRU5UX0NMT05F
Citjb25zdCBQVFJBQ0VfR0VUUkVHUyA9IF9QVFJBQ0VfR0VUUkVHUworY29uc3QgUFRSQUNFX09f
VFJBQ0VWRk9SSyA9IF9QVFJBQ0VfT19UUkFDRVZGT1JLCitjb25zdCBQVFJBQ0VfU0VDQ09NUF9H
RVRfRklMVEVSID0gX1BUUkFDRV9TRUNDT01QX0dFVF9GSUxURVIKK2NvbnN0IFBUUkFDRV9QRUVL
VVNSID0gX1BUUkFDRV9QRUVLVVNSCitjb25zdCBQVFJBQ0VfU0VUUkVHU0VUID0gX1BUUkFDRV9T
RVRSRUdTRVQKK2NvbnN0IFBUUkFDRV9TRVRGUFhSRUdTID0gX1BUUkFDRV9TRVRGUFhSRUdTCitj
b25zdCBQVFJBQ0VfR0VURlBSRUdTID0gX1BUUkFDRV9HRVRGUFJFR1MKK2NvbnN0IFBUUkFDRV9F
VkVOVF9GT1JLID0gX1BUUkFDRV9FVkVOVF9GT1JLCitjb25zdCBQVFJBQ0VfR0VUX1RIUkVBRF9B
UkVBID0gX1BUUkFDRV9HRVRfVEhSRUFEX0FSRUEKK2NvbnN0IFBUUkFDRV9TRVRTSUdNQVNLID0g
X1BUUkFDRV9TRVRTSUdNQVNLCitjb25zdCBQVFJBQ0VfQVJDSF9QUkNUTCA9IF9QVFJBQ0VfQVJD
SF9QUkNUTAorY29uc3QgUFRSQUNFX1NFQ0NPTVBfR0VUX01FVEFEQVRBID0gX1BUUkFDRV9TRUND
T01QX0dFVF9NRVRBREFUQQorY29uc3QgUFRSQUNFX09fVFJBQ0VTRUNDT01QID0gX1BUUkFDRV9P
X1RSQUNFU0VDQ09NUAorY29uc3QgUFRSQUNFX1BPS0VURVhUID0gX1BUUkFDRV9QT0tFVEVYVAor
Y29uc3QgUFRSQUNFX0VWRU5UX1NUT1AgPSBfUFRSQUNFX0VWRU5UX1NUT1AKK2NvbnN0IFBUUkFD
RV9TRVRSRUdTID0gX1BUUkFDRV9TRVRSRUdTCitjb25zdCBQVFJBQ0VfU0VURlBSRUdTID0gX1BU
UkFDRV9TRVRGUFJFR1MKK3R5cGUgUHRyYWNlUmVncyBzdHJ1Y3QgeyBSMTUgdWludDY0OyBSMTQg
dWludDY0OyBSMTMgdWludDY0OyBSMTIgdWludDY0OyBSYnAgdWludDY0OyBSYnggdWludDY0OyBS
MTEgdWludDY0OyBSMTAgdWludDY0OyBSOSB1aW50NjQ7IFI4IHVpbnQ2NDsgUmF4IHVpbnQ2NDsg
UmN4IHVpbnQ2NDsgUmR4IHVpbnQ2NDsgUnNpIHVpbnQ2NDsgUmRpIHVpbnQ2NDsgT3JpZ19yYXgg
dWludDY0OyBSaXAgdWludDY0OyBDcyB1aW50NjQ7IEVmbGFncyB1aW50NjQ7IFJzcCB1aW50NjQ7
IFNzIHVpbnQ2NDsgRnNfYmFzZSB1aW50NjQ7IEdzX2Jhc2UgdWludDY0OyBEcyB1aW50NjQ7IEVz
IHVpbnQ2NDsgRnMgdWludDY0OyBHcyB1aW50NjQ7IH0KK3R5cGUgU2l6ZV90IF9zaXplX3QKK3R5
cGUgU3NpemVfdCBfc3NpemVfdAordHlwZSBPZmZzZXRfdCBfb2ZmNjRfdAordHlwZSBNb2RlX3Qg
X21vZGVfdAordHlwZSBQaWRfdCBfcGlkX3QKK3R5cGUgVWlkX3QgX3VpZF90Cit0eXBlIEdpZF90
IF9naWRfdAordHlwZSBTb2NrbGVuX3QgX3NvY2tsZW5fdAordHlwZSBfQ19pbnQgaW50MzIKK3R5
cGUgX0NfdWludCB1aW50MzIKK3R5cGUgX0NfbG9uZyBpbnQ2NAordHlwZSBfQ191bG9uZyB1aW50
NjQKK3R5cGUgVGltZV90IF90aW1lX3QKK3R5cGUgVGltZXZhbF9zZWNfdCBpbnQ2NAordHlwZSBU
aW1ldmFsX3VzZWNfdCBpbnQ2NAordHlwZSBUaW1ldmFsIHN0cnVjdCB7IFNlYyBUaW1ldmFsX3Nl
Y190OyBVc2VjIFRpbWV2YWxfdXNlY190OyB9Cit0eXBlIFRpbWVzcGVjX3NlY190IGludDY0Cit0
eXBlIFRpbWVzcGVjX25zZWNfdCBpbnQ2NAordHlwZSBUaW1lc3BlYyBzdHJ1Y3QgeyBTZWMgVGlt
ZXNwZWNfc2VjX3Q7IE5zZWMgVGltZXNwZWNfbnNlY190OyB9Cit0eXBlIFRtcyBzdHJ1Y3QgeyBV
dGltZSBpbnQ2NDsgU3RpbWUgaW50NjQ7IEN1dGltZSBpbnQ2NDsgQ3N0aW1lIGludDY0OyB9Cit0
eXBlIFN0YXRfdCBzdHJ1Y3QgeyBEZXYgdWludDY0OyBJbm8gdWludDY0OyBObGluayB1aW50NjQ7
IE1vZGUgdWludDMyOyBVaWQgdWludDMyOyBHaWQgdWludDMyOyBfX3BhZDAgaW50MzI7IFJkZXYg
dWludDY0OyBTaXplIGludDY0OyBCbGtzaXplIGludDY0OyBCbG9ja3MgaW50NjQ7IEF0aW0gVGlt
ZXNwZWM7IE10aW0gVGltZXNwZWM7IEN0aW0gVGltZXNwZWM7IF9fZ2xpYmNfcmVzZXJ2ZWQgWzIr
MV1pbnQ2NDsgfQordHlwZSBEaXJlbnQgc3RydWN0IHsgSW5vIHVpbnQ2NDsgT2ZmIGludDY0OyBS
ZWNsZW4gdWludDE2OyBUeXBlIHVpbnQ4OyBOYW1lIFsyNTUrMV1ieXRlOyBHb2R1bXBfMF9wYWQg
WzVdYnl0ZTsgfQordHlwZSBESVIgX0RJUgorY29uc3QgRFRfQ0hSID0gX0RUX0NIUgorY29uc3Qg
RFRfUkVHID0gX0RUX1JFRworY29uc3QgRFRfU09DSyA9IF9EVF9TT0NLCitjb25zdCBEVF9CTEsg
PSBfRFRfQkxLCitjb25zdCBEVF9XSFQgPSBfRFRfV0hUCitjb25zdCBEVF9MTksgPSBfRFRfTE5L
Citjb25zdCBEVF9GSUZPID0gX0RUX0ZJRk8KK2NvbnN0IERUX1VOS05PV04gPSBfRFRfVU5LTk9X
TgorY29uc3QgRFRfRElSID0gX0RUX0RJUgordHlwZSBSdXNhZ2Ugc3RydWN0IHsgVXRpbWUgVGlt
ZXZhbDsgU3RpbWUgVGltZXZhbDsgTWF4cnNzIGludDY0OyBJeHJzcyBpbnQ2NDsgSWRyc3MgaW50
NjQ7IElzcnNzIGludDY0OyBNaW5mbHQgaW50NjQ7IE1hamZsdCBpbnQ2NDsgTnN3YXAgaW50NjQ7
IEluYmxvY2sgaW50NjQ7IE91YmxvY2sgaW50NjQ7IE1zZ3NuZCBpbnQ2NDsgTXNncmN2IGludDY0
OyBOc2lnbmFscyBpbnQ2NDsgTnZjc3cgaW50NjQ7IE5pdmNzdyBpbnQ2NDsgfQorY29uc3QgUlVT
QUdFX1NFTEYgPSBfUlVTQUdFX1NFTEYKK2NvbnN0IFJVU0FHRV9DSElMRFJFTiA9IF9SVVNBR0Vf
Q0hJTERSRU4KK2NvbnN0IFJVU0FHRV9USFJFQUQgPSBfUlVTQUdFX1RIUkVBRAordHlwZSBVdHNu
YW1lIHN0cnVjdCB7IFN5c25hbWUgWzY0KzFdaW50ODsgTm9kZW5hbWUgWzY0KzFdaW50ODsgUmVs
ZWFzZSBbNjQrMV1pbnQ4OyBWZXJzaW9uIFs2NCsxXWludDg7IE1hY2hpbmUgWzY0KzFdaW50ODsg
RG9tYWlubmFtZSBbNjQrMV1pbnQ4OyB9Cit0eXBlIElvdmVjX2xlbl90IHVpbnQ2NAordHlwZSBJ
b3ZlYyBzdHJ1Y3QgeyBCYXNlICpieXRlOyBMZW4gSW92ZWNfbGVuX3Q7IH0KK3R5cGUgTXNnaGRy
X2NvbnRyb2xsZW5fdCB1aW50NjQKK3R5cGUgTXNnaGRyIHN0cnVjdCB7IE5hbWUgKmJ5dGU7IE5h
bWVsZW4gdWludDMyOyBJb3YgKklvdmVjOyBJb3ZsZW4gdWludDY0OyBDb250cm9sICpieXRlOyBD
b250cm9sbGVuIE1zZ2hkcl9jb250cm9sbGVuX3Q7IEZsYWdzIGludDMyOyBHb2R1bXBfMF9wYWQg
WzRdYnl0ZTsgfQorY29uc3QgTVNHX0VPUiA9IF9NU0dfRU9SCitjb25zdCBNU0dfQ01TR19DTE9F
WEVDID0gX01TR19DTVNHX0NMT0VYRUMKK2NvbnN0IE1TR19ET05UV0FJVCA9IF9NU0dfRE9OVFdB
SVQKK2NvbnN0IE1TR19XQUlURk9ST05FID0gX01TR19XQUlURk9ST05FCitjb25zdCBNU0dfUlNU
ID0gX01TR19SU1QKK2NvbnN0IE1TR19GSU4gPSBfTVNHX0ZJTgorY29uc3QgTVNHX0JBVENIID0g
X01TR19CQVRDSAorY29uc3QgTVNHX1BST1hZID0gX01TR19QUk9YWQorY29uc3QgTVNHX0NPTkZJ
Uk0gPSBfTVNHX0NPTkZJUk0KK2NvbnN0IE1TR19FUlJRVUVVRSA9IF9NU0dfRVJSUVVFVUUKK2Nv
bnN0IE1TR19UUllIQVJEID0gX01TR19UUllIQVJECitjb25zdCBNU0dfUEVFSyA9IF9NU0dfUEVF
SworY29uc3QgTVNHX1pFUk9DT1BZID0gX01TR19aRVJPQ09QWQorY29uc3QgTVNHX01PUkUgPSBf
TVNHX01PUkUKK2NvbnN0IE1TR19OT1NJR05BTCA9IF9NU0dfTk9TSUdOQUwKK2NvbnN0IE1TR19P
T0IgPSBfTVNHX09PQgorY29uc3QgTVNHX0NUUlVOQyA9IF9NU0dfQ1RSVU5DCitjb25zdCBNU0df
U1lOID0gX01TR19TWU4KK2NvbnN0IE1TR19UUlVOQyA9IF9NU0dfVFJVTkMKK2NvbnN0IE1TR19E
T05UUk9VVEUgPSBfTVNHX0RPTlRST1VURQorY29uc3QgTVNHX1dBSVRBTEwgPSBfTVNHX1dBSVRB
TEwKK2NvbnN0IE1TR19GQVNUT1BFTiA9IF9NU0dfRkFTVE9QRU4KK3R5cGUgQ21zZ2hkcl9sZW5f
dCB1aW50NjQKK3R5cGUgQ21zZ2hkciBzdHJ1Y3QgeyBMZW4gQ21zZ2hkcl9sZW5fdDsgTGV2ZWwg
aW50MzI7IFR5cGUgaW50MzI7IF9fY21zZ19kYXRhIFswXXVpbnQ4OyB9Citjb25zdCBTQ01fVElN
RVNUQU1QSU5HID0gX1NDTV9USU1FU1RBTVBJTkcKK2NvbnN0IFNDTV9USU1FU1RBTVBJTkdfUEtU
SU5GTyA9IF9TQ01fVElNRVNUQU1QSU5HX1BLVElORk8KK2NvbnN0IFNDTV9UWFRJTUUgPSBfU0NN
X1RYVElNRQorY29uc3QgU0NNX1RJTUVTVEFNUElOR19PUFRfU1RBVFMgPSBfU0NNX1RJTUVTVEFN
UElOR19PUFRfU1RBVFMKK2NvbnN0IFNDTV9SSUdIVFMgPSBfU0NNX1JJR0hUUworY29uc3QgU0NN
X1RJTUVTVEFNUE5TID0gX1NDTV9USU1FU1RBTVBOUworY29uc3QgU0NNX0NSRURFTlRJQUxTID0g
X1NDTV9DUkVERU5USUFMUworY29uc3QgU0NNX1RJTUVTVEFNUCA9IF9TQ01fVElNRVNUQU1QCitj
b25zdCBTQ01fV0lGSV9TVEFUVVMgPSBfU0NNX1dJRklfU1RBVFVTCit0eXBlIFVjcmVkIHN0cnVj
dCB7IFBpZCBpbnQzMjsgVWlkIHVpbnQzMjsgR2lkIHVpbnQzMjsgfQordHlwZSBJUE1yZXEgc3Ry
dWN0IHsgTXVsdGlhZGRyIFs0XWJ5dGU7IEludGVyZmFjZSBbNF1ieXRlOyB9Cit0eXBlIElQdjZN
cmVxIHN0cnVjdCB7IE11bHRpYWRkciBbMTZdYnl0ZTsgSW50ZXJmYWNlIHVpbnQzMjsgfQordHlw
ZSBJUE1yZXFuIHN0cnVjdCB7IE11bHRpYWRkciBbNF1ieXRlOyBBZGRyZXNzIFs0XWJ5dGU7IElm
aW5kZXggaW50MzI7IH0KK3R5cGUgSUNNUHY2RmlsdGVyIHN0cnVjdCB7IGljbXA2X0ZpbHQgWzcr
MV11aW50MzI7IH0KK3R5cGUgSVB2Nk1UVUluZm8gc3RydWN0IHsgQWRkciBSYXdTb2NrYWRkcklu
ZXQ2OyBNdHUgdWludDMyOyB9Cit0eXBlIGZkc19iaXRzX3R5cGUgaW50NjQKK3R5cGUgQWRkcmlu
Zm8gc3RydWN0IHsgQWlfZmxhZ3MgaW50MzI7IEFpX2ZhbWlseSBpbnQzMjsgQWlfc29ja3R5cGUg
aW50MzI7IEFpX3Byb3RvY29sIGludDMyOyBBaV9hZGRybGVuIHVpbnQzMjsgQWlfYWRkciAqX3Nv
Y2thZGRyOyBBaV9jYW5vbm5hbWUgKmludDg7IEFpX25leHQgKkFkZHJpbmZvOyB9Citjb25zdCBB
SV9OVU1FUklDSE9TVCA9IF9BSV9OVU1FUklDSE9TVAorY29uc3QgQUlfQ0FOT05JRE4gPSBfQUlf
Q0FOT05JRE4KK2NvbnN0IEFJX0FMTCA9IF9BSV9BTEwKK2NvbnN0IEFJX0NBTk9OTkFNRSA9IF9B
SV9DQU5PTk5BTUUKK2NvbnN0IEFJX1Y0TUFQUEVEID0gX0FJX1Y0TUFQUEVECitjb25zdCBBSV9Q
QVNTSVZFID0gX0FJX1BBU1NJVkUKK2NvbnN0IEFJX05VTUVSSUNTRVJWID0gX0FJX05VTUVSSUNT
RVJWCitjb25zdCBBSV9JRE4gPSBfQUlfSUROCitjb25zdCBBSV9BRERSQ09ORklHID0gX0FJX0FE
RFJDT05GSUcKK2NvbnN0IEVBSV9GQUlMID0gX0VBSV9GQUlMCitjb25zdCBFQUlfTk9EQVRBID0g
X0VBSV9OT0RBVEEKK2NvbnN0IEVBSV9OT05BTUUgPSBfRUFJX05PTkFNRQorY29uc3QgRUFJX0lO
UFJPR1JFU1MgPSBfRUFJX0lOUFJPR1JFU1MKK2NvbnN0IEVBSV9TWVNURU0gPSBfRUFJX1NZU1RF
TQorY29uc3QgRUFJX0FHQUlOID0gX0VBSV9BR0FJTgorY29uc3QgRUFJX01FTU9SWSA9IF9FQUlf
TUVNT1JZCitjb25zdCBFQUlfQ0FOQ0VMRUQgPSBfRUFJX0NBTkNFTEVECitjb25zdCBFQUlfQURE
UkZBTUlMWSA9IF9FQUlfQUREUkZBTUlMWQorY29uc3QgRUFJX05PVENBTkNFTEVEID0gX0VBSV9O
T1RDQU5DRUxFRAorY29uc3QgRUFJX0lETl9FTkNPREUgPSBfRUFJX0lETl9FTkNPREUKK2NvbnN0
IEVBSV9GQU1JTFkgPSBfRUFJX0ZBTUlMWQorY29uc3QgRUFJX0JBREZMQUdTID0gX0VBSV9CQURG
TEFHUworY29uc3QgRUFJX0lOVFIgPSBfRUFJX0lOVFIKK2NvbnN0IEVBSV9TT0NLVFlQRSA9IF9F
QUlfU09DS1RZUEUKK2NvbnN0IEVBSV9TRVJWSUNFID0gX0VBSV9TRVJWSUNFCitjb25zdCBFQUlf
QUxMRE9ORSA9IF9FQUlfQUxMRE9ORQorY29uc3QgRUFJX09WRVJGTE9XID0gX0VBSV9PVkVSRkxP
VworY29uc3QgTklfTlVNRVJJQ1NFUlYgPSBfTklfTlVNRVJJQ1NFUlYKK2NvbnN0IE5JX05BTUVS
RVFEID0gX05JX05BTUVSRVFECitjb25zdCBOSV9OT0ZRRE4gPSBfTklfTk9GUUROCitjb25zdCBO
SV9OVU1FUklDSE9TVCA9IF9OSV9OVU1FUklDSE9TVAorY29uc3QgTklfSUROID0gX05JX0lETgor
Y29uc3QgTklfREdSQU0gPSBfTklfREdSQU0KK2NvbnN0IE5JX01BWEhPU1QgPSBfTklfTUFYSE9T
VAorY29uc3QgTklfTUFYU0VSViA9IF9OSV9NQVhTRVJWCit0eXBlIFBhc3N3ZCBzdHJ1Y3QgeyBQ
d19uYW1lICppbnQ4OyBQd19wYXNzd2QgKmludDg7IFB3X3VpZCB1aW50MzI7IFB3X2dpZCB1aW50
MzI7IFB3X2dlY29zICppbnQ4OyBQd19kaXIgKmludDg7IFB3X3NoZWxsICppbnQ4OyB9Cit0eXBl
IEdyb3VwIHN0cnVjdCB7IEdyX25hbWUgKmludDg7IEdyX3Bhc3N3ZCAqaW50ODsgR3JfZ2lkIHVp
bnQzMjsgR3JfbWVtICoqaW50ODsgfQorY29uc3QgVElPQ0dJQ09VTlQgPSBfVElPQ0dJQ09VTlQK
K2NvbnN0IFRJT0NTRVJTRVRNVUxUSSA9IF9USU9DU0VSU0VUTVVMVEkKK2NvbnN0IFRJT0NFWENM
ID0gX1RJT0NFWENMCitjb25zdCBUSU9DTVNFVCA9IF9USU9DTVNFVAorY29uc3QgVElPQ1NTT0ZU
Q0FSID0gX1RJT0NTU09GVENBUgorY29uc3QgVElPQ1NQR1JQID0gX1RJT0NTUEdSUAorY29uc3Qg
VElPQ1BLVF9GTFVTSFJFQUQgPSBfVElPQ1BLVF9GTFVTSFJFQUQKK2NvbnN0IFRJT0NTRVJfVEVN
VCA9IF9USU9DU0VSX1RFTVQKK2NvbnN0IFRJT0NQS1RfRkxVU0hXUklURSA9IF9USU9DUEtUX0ZM
VVNIV1JJVEUKK2NvbnN0IFRJT0NTTENLVFJNSU9TID0gX1RJT0NTTENLVFJNSU9TCitjb25zdCBU
SU9DR0VURCA9IF9USU9DR0VURAorY29uc3QgVElPQ01JV0FJVCA9IF9USU9DTUlXQUlUCitjb25z
dCBUSU9DTk9UVFkgPSBfVElPQ05PVFRZCitjb25zdCBUSU9DR1BHUlAgPSBfVElPQ0dQR1JQCitj
b25zdCBUSU9DUEtUID0gX1RJT0NQS1QKK2NvbnN0IFRJT0NNX1JUUyA9IF9USU9DTV9SVFMKK2Nv
bnN0IFRJT0NTUlM0ODUgPSBfVElPQ1NSUzQ4NQorY29uc3QgVElPQ09VVFEgPSBfVElPQ09VVFEK
K2NvbnN0IFRJT0NNX0RUUiA9IF9USU9DTV9EVFIKK2NvbnN0IFRJT0NTV0lOU1ogPSBfVElPQ1NX
SU5TWgorY29uc3QgVElPQ1NCUksgPSBfVElPQ1NCUksKK2NvbnN0IFRJT0NTRVJDT05GSUcgPSBf
VElPQ1NFUkNPTkZJRworY29uc3QgVElPQ0lOUSA9IF9USU9DSU5RCitjb25zdCBUSU9DTUJJUyA9
IF9USU9DTUJJUworY29uc3QgVElPQ01HRVQgPSBfVElPQ01HRVQKK2NvbnN0IFRJT0NOWENMID0g
X1RJT0NOWENMCitjb25zdCBUSU9DU1RJID0gX1RJT0NTVEkKK2NvbnN0IFRJT0NNX0RTUiA9IF9U
SU9DTV9EU1IKK2NvbnN0IFRJT0NHUlM0ODUgPSBfVElPQ0dSUzQ4NQorY29uc3QgVElPQ01fQ0Qg
PSBfVElPQ01fQ0QKK2NvbnN0IFRJT0NHV0lOU1ogPSBfVElPQ0dXSU5TWgorY29uc3QgVElPQ1NF
UlNXSUxEID0gX1RJT0NTRVJTV0lMRAorY29uc3QgVElPQ01fQ0FSID0gX1RJT0NNX0NBUgorY29u
c3QgVElPQ0NCUksgPSBfVElPQ0NCUksKK2NvbnN0IFRJT0NHU09GVENBUiA9IF9USU9DR1NPRlRD
QVIKK2NvbnN0IFRJT0NNX0xFID0gX1RJT0NNX0xFCitjb25zdCBUSU9DUEtUX0lPQ1RMID0gX1RJ
T0NQS1RfSU9DVEwKK2NvbnN0IFRJT0NQS1RfU1RBUlQgPSBfVElPQ1BLVF9TVEFSVAorY29uc3Qg
VElPQ1NFUkdFVE1VTFRJID0gX1RJT0NTRVJHRVRNVUxUSQorY29uc3QgVElPQ0dMQ0tUUk1JT1Mg
PSBfVElPQ0dMQ0tUUk1JT1MKK2NvbnN0IFRJT0NNX1JJID0gX1RJT0NNX1JJCitjb25zdCBUSU9D
TV9TUiA9IF9USU9DTV9TUgorY29uc3QgVElPQ01fU1QgPSBfVElPQ01fU1QKK2NvbnN0IFRJT0ND
T05TID0gX1RJT0NDT05TCitjb25zdCBUSU9DVkhBTkdVUCA9IF9USU9DVkhBTkdVUAorY29uc3Qg
VElPQ1BLVF9ET1NUT1AgPSBfVElPQ1BLVF9ET1NUT1AKK2NvbnN0IFRJT0NNQklDID0gX1RJT0NN
QklDCitjb25zdCBUSU9DR1NJRCA9IF9USU9DR1NJRAorY29uc3QgVElPQ1NFUkdXSUxEID0gX1RJ
T0NTRVJHV0lMRAorY29uc3QgVElPQ01fQ1RTID0gX1RJT0NNX0NUUworY29uc3QgVElPQ1BLVF9E
QVRBID0gX1RJT0NQS1RfREFUQQorY29uc3QgVElPQ1NFVEQgPSBfVElPQ1NFVEQKK2NvbnN0IFRJ
T0NTRVJHRVRMU1IgPSBfVElPQ1NFUkdFVExTUgorY29uc3QgVElPQ1NFUkdTVFJVQ1QgPSBfVElP
Q1NFUkdTVFJVQ1QKK2NvbnN0IFRJT0NMSU5VWCA9IF9USU9DTElOVVgKK2NvbnN0IFRJT0NTU0VS
SUFMID0gX1RJT0NTU0VSSUFMCitjb25zdCBUSU9DUEtUX05PU1RPUCA9IF9USU9DUEtUX05PU1RP
UAorY29uc3QgVElPQ0dTRVJJQUwgPSBfVElPQ0dTRVJJQUwKK2NvbnN0IFRJT0NQS1RfU1RPUCA9
IF9USU9DUEtUX1NUT1AKK2NvbnN0IFRJT0NNX1JORyA9IF9USU9DTV9STkcKK2NvbnN0IFRJT0NT
Q1RUWSA9IF9USU9DU0NUVFkKK2NvbnN0IFRJT0NHUFROID0gX1RJT0NHUFROX3ZhbAorY29uc3Qg
VElPQ1NQVExDSyA9IF9USU9DU1BUTENLX3ZhbAorY29uc3QgVElPQ0dERVYgPSBfVElPQ0dERVZf
dmFsCitjb25zdCBUSU9DU0lHID0gX1RJT0NTSUdfdmFsCitjb25zdCBUVU5TRVROT0NTVU0gPSBf
VFVOU0VUTk9DU1VNX3ZhbAorY29uc3QgVFVOU0VUREVCVUcgPSBfVFVOU0VUREVCVUdfdmFsCitj
b25zdCBUVU5TRVRJRkYgPSBfVFVOU0VUSUZGX3ZhbAorY29uc3QgVFVOU0VUUEVSU0lTVCA9IF9U
VU5TRVRQRVJTSVNUX3ZhbAorY29uc3QgVFVOU0VUT1dORVIgPSBfVFVOU0VUT1dORVJfdmFsCitj
b25zdCBUVU5TRVRMSU5LID0gX1RVTlNFVExJTktfdmFsCitjb25zdCBUVU5TRVRHUk9VUCA9IF9U
VU5TRVRHUk9VUF92YWwKK2NvbnN0IFRVTkdFVEZFQVRVUkVTID0gX1RVTkdFVEZFQVRVUkVTX3Zh
bAorY29uc3QgVFVOU0VUT0ZGTE9BRCA9IF9UVU5TRVRPRkZMT0FEX3ZhbAorY29uc3QgVFVOU0VU
VFhGSUxURVIgPSBfVFVOU0VUVFhGSUxURVJfdmFsCitjb25zdCBUVU5HRVRJRkYgPSBfVFVOR0VU
SUZGX3ZhbAorY29uc3QgVFVOR0VUU05EQlVGID0gX1RVTkdFVFNOREJVRl92YWwKK2NvbnN0IFRV
TlNFVFNOREJVRiA9IF9UVU5TRVRTTkRCVUZfdmFsCitjb25zdCBUVU5BVFRBQ0hGSUxURVIgPSBf
VFVOQVRUQUNIRklMVEVSX3ZhbAorY29uc3QgVFVOREVUQUNIRklMVEVSID0gX1RVTkRFVEFDSEZJ
TFRFUl92YWwKK2NvbnN0IFRVTkdFVFZORVRIRFJTWiA9IF9UVU5HRVRWTkVUSERSU1pfdmFsCitj
b25zdCBUVU5TRVRWTkVUSERSU1ogPSBfVFVOU0VUVk5FVEhEUlNaX3ZhbAorY29uc3QgVFVOU0VU
UVVFVUUgPSBfVFVOU0VUUVVFVUVfdmFsCitjb25zdCBUVU5TRVRJRklOREVYID0gX1RVTlNFVElG
SU5ERVhfdmFsCitjb25zdCBUVU5HRVRGSUxURVIgPSBfVFVOR0VURklMVEVSX3ZhbAorY29uc3Qg
VENHRVRBID0gX1RDR0VUQQorY29uc3QgVENHRVRTID0gX1RDR0VUUworY29uc3QgVENHRVRYID0g
X1RDR0VUWAorY29uc3QgVENTRVRBID0gX1RDU0VUQQorY29uc3QgVENTRVRBVyA9IF9UQ1NFVEFX
Citjb25zdCBUQ1NFVEFGID0gX1RDU0VUQUYKK2NvbnN0IFRDU0VUU0YgPSBfVENTRVRTRgorY29u
c3QgVENTRVRTVyA9IF9UQ1NFVFNXCitjb25zdCBUQ1NFVFhGID0gX1RDU0VUWEYKK2NvbnN0IFRD
U0VUWFcgPSBfVENTRVRYVworY29uc3QgVENTRVRTID0gX1RDU0VUUworY29uc3QgVENTRVRYID0g
X1RDU0VUWAordHlwZSBObE1zZ2hkciBzdHJ1Y3QgeyBMZW4gdWludDMyOyBUeXBlIHVpbnQxNjsg
RmxhZ3MgdWludDE2OyBTZXEgdWludDMyOyBQaWQgdWludDMyOyB9Citjb25zdCBOTE1fRl9BQ0sg
PSBfTkxNX0ZfQUNLCitjb25zdCBOTE1fRl9ST09UID0gX05MTV9GX1JPT1QKK2NvbnN0IE5MTV9G
X0VDSE8gPSBfTkxNX0ZfRUNITworY29uc3QgTkxNU0dFUlJfQVRUUl9PRkZTID0gX05MTVNHRVJS
X0FUVFJfT0ZGUworY29uc3QgTkxNX0ZfRFVNUF9JTlRSID0gX05MTV9GX0RVTVBfSU5UUgorY29u
c3QgTkxNX0ZfQVRPTUlDID0gX05MTV9GX0FUT01JQworY29uc3QgTkxNX0ZfUkVRVUVTVCA9IF9O
TE1fRl9SRVFVRVNUCitjb25zdCBOTE1TR19FUlJPUiA9IF9OTE1TR19FUlJPUgorY29uc3QgTkxN
U0dfTk9PUCA9IF9OTE1TR19OT09QCitjb25zdCBOTE1fRl9EVU1QX0ZJTFRFUkVEID0gX05MTV9G
X0RVTVBfRklMVEVSRUQKK2NvbnN0IE5MTV9GX1JFUExBQ0UgPSBfTkxNX0ZfUkVQTEFDRQorY29u
c3QgTkxNX0ZfQUNLX1RMVlMgPSBfTkxNX0ZfQUNLX1RMVlMKK2NvbnN0IE5MTVNHX0RPTkUgPSBf
TkxNU0dfRE9ORQorY29uc3QgTkxNU0dFUlJfQVRUUl9DT09LSUUgPSBfTkxNU0dFUlJfQVRUUl9D
T09LSUUKK2NvbnN0IE5MTV9GX0NBUFBFRCA9IF9OTE1fRl9DQVBQRUQKK2NvbnN0IE5MTV9GX0VY
Q0wgPSBfTkxNX0ZfRVhDTAorY29uc3QgTkxNX0ZfTk9OUkVDID0gX05MTV9GX05PTlJFQworY29u
c3QgTkxNU0dfQUxJR05UTyA9IF9OTE1TR19BTElHTlRPCitjb25zdCBOTE1fRl9NVUxUSSA9IF9O
TE1fRl9NVUxUSQorY29uc3QgTkxNX0ZfTUFUQ0ggPSBfTkxNX0ZfTUFUQ0gKK2NvbnN0IE5MTVNH
RVJSX0FUVFJfVU5VU0VEID0gX05MTVNHRVJSX0FUVFJfVU5VU0VECitjb25zdCBOTE1TR0VSUl9B
VFRSX01TRyA9IF9OTE1TR0VSUl9BVFRSX01TRworY29uc3QgTkxNU0dfTUlOX1RZUEUgPSBfTkxN
U0dfTUlOX1RZUEUKK2NvbnN0IE5MTVNHRVJSX0FUVFJfTUFYID0gX05MTVNHRVJSX0FUVFJfTUFY
Citjb25zdCBOTE1fRl9DUkVBVEUgPSBfTkxNX0ZfQ1JFQVRFCitjb25zdCBOTE1fRl9EVU1QID0g
X05MTV9GX0RVTVAKK2NvbnN0IE5MTVNHX09WRVJSVU4gPSBfTkxNU0dfT1ZFUlJVTgorY29uc3Qg
TkxNX0ZfQVBQRU5EID0gX05MTV9GX0FQUEVORAorY29uc3QgTkxNU0dfSERSTEVOID0gKF9zaXpl
b2Zfbmxtc2doZHIgKyAoTkxNU0dfQUxJR05UTy0xKSkgJl4gKE5MTVNHX0FMSUdOVE8tMSkKK3R5
cGUgUnRNc2cgc3RydWN0IHsgRmFtaWx5IHVpbnQ4OyBEc3RfbGVuIHVpbnQ4OyBTcmNfbGVuIHVp
bnQ4OyBUb3MgdWludDg7IFRhYmxlIHVpbnQ4OyBQcm90b2NvbCB1aW50ODsgU2NvcGUgdWludDg7
IFR5cGUgdWludDg7IEZsYWdzIHVpbnQzMjsgfQordHlwZSBSdEdlbm1zZyBzdHJ1Y3QgeyBGYW1p
bHkgdWludDg7IH0KK2NvbnN0IFJUX1NDT1BFX1VOSVZFUlNFID0gX1JUX1NDT1BFX1VOSVZFUlNF
Citjb25zdCBSVF9DTEFTU19NQVggPSBfUlRfQ0xBU1NfTUFYCitjb25zdCBSVF9UQUJMRV9MT0NB
TCA9IF9SVF9UQUJMRV9MT0NBTAorY29uc3QgUlRfQ0xBU1NfVU5TUEVDID0gX1JUX0NMQVNTX1VO
U1BFQworY29uc3QgUlRfU0NPUEVfTElOSyA9IF9SVF9TQ09QRV9MSU5LCitjb25zdCBSVF9TQ09Q
RV9TSVRFID0gX1JUX1NDT1BFX1NJVEUKK2NvbnN0IFJUX1RBQkxFX01BWCA9IF9SVF9UQUJMRV9N
QVgKK2NvbnN0IFJUX1RBQkxFX0NPTVBBVCA9IF9SVF9UQUJMRV9DT01QQVQKK2NvbnN0IFJUX1ND
T1BFX05PV0hFUkUgPSBfUlRfU0NPUEVfTk9XSEVSRQorY29uc3QgUlRfVEFCTEVfREVGQVVMVCA9
IF9SVF9UQUJMRV9ERUZBVUxUCitjb25zdCBSVF9TQ09QRV9IT1NUID0gX1JUX1NDT1BFX0hPU1QK
K2NvbnN0IFJUX1RBQkxFX01BSU4gPSBfUlRfVEFCTEVfTUFJTgorY29uc3QgUlRfVEFCTEVfVU5T
UEVDID0gX1JUX1RBQkxFX1VOU1BFQworY29uc3QgUlRfQ0xBU1NfTE9DQUwgPSBfUlRfQ0xBU1Nf
TE9DQUwKK2NvbnN0IFJUX0NMQVNTX01BSU4gPSBfUlRfQ0xBU1NfTUFJTgorY29uc3QgUlRfQ0xB
U1NfREVGQVVMVCA9IF9SVF9DTEFTU19ERUZBVUxUCitjb25zdCBSVEFfVU5TUEVDID0gX1JUQV9V
TlNQRUMKK2NvbnN0IFJUQV9JUF9QUk9UTyA9IF9SVEFfSVBfUFJPVE8KK2NvbnN0IFJUQVhfUlRU
VkFSID0gX1JUQVhfUlRUVkFSCitjb25zdCBSVEFfVUlEID0gX1JUQV9VSUQKK2NvbnN0IFJUQV9D
QUNIRUlORk8gPSBfUlRBX0NBQ0hFSU5GTworY29uc3QgUlRBX01VTFRJUEFUSCA9IF9SVEFfTVVM
VElQQVRICitjb25zdCBSVEFYX1VOU1BFQyA9IF9SVEFYX1VOU1BFQworY29uc3QgUlRBWF9DQ19B
TEdPID0gX1JUQVhfQ0NfQUxHTworY29uc3QgUlRBWF9JTklUQ1dORCA9IF9SVEFYX0lOSVRDV05E
Citjb25zdCBSVEFYX0ZFQVRVUkVfQUxMRlJBRyA9IF9SVEFYX0ZFQVRVUkVfQUxMRlJBRworY29u
c3QgUlRBWF9GRUFUVVJFX1NBQ0sgPSBfUlRBWF9GRUFUVVJFX1NBQ0sKK2NvbnN0IFJUQV9NQVJL
ID0gX1JUQV9NQVJLCitjb25zdCBSVEFfTUZDX1NUQVRTID0gX1JUQV9NRkNfU1RBVFMKK2NvbnN0
IFJUQV9TUkMgPSBfUlRBX1NSQworY29uc3QgUlRBX0dBVEVXQVkgPSBfUlRBX0dBVEVXQVkKK2Nv
bnN0IFJUQVhfTE9DSyA9IF9SVEFYX0xPQ0sKK2NvbnN0IFJUQVhfUVVJQ0tBQ0sgPSBfUlRBWF9R
VUlDS0FDSworY29uc3QgUlRBX1RUTF9QUk9QQUdBVEUgPSBfUlRBX1RUTF9QUk9QQUdBVEUKK2Nv
bnN0IFJUQVhfRkVBVFVSRV9FQ04gPSBfUlRBWF9GRUFUVVJFX0VDTgorY29uc3QgUlRBWF9SRU9S
REVSSU5HID0gX1JUQVhfUkVPUkRFUklORworY29uc3QgUlRBX0RQT1JUID0gX1JUQV9EUE9SVAor
Y29uc3QgUlRBX1NFU1NJT04gPSBfUlRBX1NFU1NJT04KK2NvbnN0IFJUQV9QUklPUklUWSA9IF9S
VEFfUFJJT1JJVFkKK2NvbnN0IFJUQV9ORVdEU1QgPSBfUlRBX05FV0RTVAorY29uc3QgUlRBWF9D
V05EID0gX1JUQVhfQ1dORAorY29uc3QgUlRBWF9JTklUUldORCA9IF9SVEFYX0lOSVRSV05ECitj
b25zdCBSVEFfUFJFRiA9IF9SVEFfUFJFRgorY29uc3QgUlRBX0VOQ0FQID0gX1JUQV9FTkNBUAor
Y29uc3QgUlRBX0RTVCA9IF9SVEFfRFNUCitjb25zdCBSVEFfRVhQSVJFUyA9IF9SVEFfRVhQSVJF
UworY29uc3QgUlRBX0FMSUdOVE8gPSBfUlRBX0FMSUdOVE8KK2NvbnN0IFJUQVhfUlRPX01JTiA9
IF9SVEFYX1JUT19NSU4KK2NvbnN0IFJUQV9FTkNBUF9UWVBFID0gX1JUQV9FTkNBUF9UWVBFCitj
b25zdCBSVEFfTVBfQUxHTyA9IF9SVEFfTVBfQUxHTworY29uc3QgUlRBX0lJRiA9IF9SVEFfSUlG
Citjb25zdCBSVEFYX0hPUExJTUlUID0gX1JUQVhfSE9QTElNSVQKK2NvbnN0IFJUQV9WSUEgPSBf
UlRBX1ZJQQorY29uc3QgUlRBX1RBQkxFID0gX1JUQV9UQUJMRQorY29uc3QgUlRBX1NQT1JUID0g
X1JUQV9TUE9SVAorY29uc3QgUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCA9IF9SVEFYX0ZFQVRVUkVf
VElNRVNUQU1QCitjb25zdCBSVEFYX0ZFQVRVUkVTID0gX1JUQVhfRkVBVFVSRVMKK2NvbnN0IFJU
QV9NRVRSSUNTID0gX1JUQV9NRVRSSUNTCitjb25zdCBSVEFfUFJPVE9JTkZPID0gX1JUQV9QUk9U
T0lORk8KK2NvbnN0IFJUQV9GTE9XID0gX1JUQV9GTE9XCitjb25zdCBSVEFfUEFEID0gX1JUQV9Q
QUQKK2NvbnN0IFJUQVhfU1NUSFJFU0ggPSBfUlRBWF9TU1RIUkVTSAorY29uc3QgUlRBX09JRiA9
IF9SVEFfT0lGCitjb25zdCBSVEFYX0ZBU1RPUEVOX05PX0NPT0tJRSA9IF9SVEFYX0ZBU1RPUEVO
X05PX0NPT0tJRQorY29uc3QgUlRBX1BSRUZTUkMgPSBfUlRBX1BSRUZTUkMKK2NvbnN0IFJUQVhf
V0lORE9XID0gX1JUQVhfV0lORE9XCitjb25zdCBSVEFYX0FEVk1TUyA9IF9SVEFYX0FEVk1TUwor
Y29uc3QgUlRBWF9SVFQgPSBfUlRBWF9SVFQKK2NvbnN0IFJUQVhfRkVBVFVSRV9NQVNLID0gX1JU
QVhfRkVBVFVSRV9NQVNLCitjb25zdCBSVEFYX01UVSA9IF9SVEFYX01UVQorY29uc3QgUlRGX1VQ
ID0gX1JURl9VUAorY29uc3QgUlRGX0lOVEVSRkFDRSA9IF9SVEZfSU5URVJGQUNFCitjb25zdCBS
VEZfRFlOQU1JQyA9IF9SVEZfRFlOQU1JQworY29uc3QgUlRGX1hSRVNPTFZFID0gX1JURl9YUkVT
T0xWRQorY29uc3QgUlRGX05PUE1UVURJU0MgPSBfUlRGX05PUE1UVURJU0MKK2NvbnN0IFJURl9N
VFUgPSBfUlRGX01UVQorY29uc3QgUlRGX0RFRkFVTFQgPSBfUlRGX0RFRkFVTFQKK2NvbnN0IFJU
Rl9BTExPTkxJTksgPSBfUlRGX0FMTE9OTElOSworY29uc3QgUlRGX1RIUk9XID0gX1JURl9USFJP
VworY29uc3QgUlRGX1JFSU5TVEFURSA9IF9SVEZfUkVJTlNUQVRFCitjb25zdCBSVEZfQ0FDSEUg
PSBfUlRGX0NBQ0hFCitjb25zdCBSVEZfRkxPVyA9IF9SVEZfRkxPVworY29uc3QgUlRGX01TUyA9
IF9SVEZfTVNTCitjb25zdCBSVEZfQUREUkNPTkYgPSBfUlRGX0FERFJDT05GCitjb25zdCBSVEZf
TU9ESUZJRUQgPSBfUlRGX01PRElGSUVECitjb25zdCBSVEZfSE9TVCA9IF9SVEZfSE9TVAorY29u
c3QgUlRGX01VTFRJQ0FTVCA9IF9SVEZfTVVMVElDQVNUCitjb25zdCBSVEZfU1RBVElDID0gX1JU
Rl9TVEFUSUMKK2NvbnN0IFJURl9OQVQgPSBfUlRGX05BVAorY29uc3QgUlRGX1BPTElDWSA9IF9S
VEZfUE9MSUNZCitjb25zdCBSVEZfR0FURVdBWSA9IF9SVEZfR0FURVdBWQorY29uc3QgUlRGX0xP
Q0FMID0gX1JURl9MT0NBTAorY29uc3QgUlRGX1dJTkRPVyA9IF9SVEZfV0lORE9XCitjb25zdCBS
VEZfUkVKRUNUID0gX1JURl9SRUpFQ1QKK2NvbnN0IFJURl9OT0ZPUldBUkQgPSBfUlRGX05PRk9S
V0FSRAorY29uc3QgUlRGX05PTkVYVEhPUCA9IF9SVEZfTk9ORVhUSE9QCitjb25zdCBSVEZfSVJU
VCA9IF9SVEZfSVJUVAorY29uc3QgUlRGX0xJTktSVCA9IF9SVEZfTElOS1JUCitjb25zdCBSVEZf
QlJPQURDQVNUID0gX1JURl9CUk9BRENBU1QKK2NvbnN0IFJURl9BRERSQ0xBU1NNQVNLID0gX1JU
Rl9BRERSQ0xBU1NNQVNLCitjb25zdCBSVENGX0RPUkVESVJFQ1QgPSBfUlRDRl9ET1JFRElSRUNU
Citjb25zdCBSVENGX1ZBTFZFID0gX1JUQ0ZfVkFMVkUKK2NvbnN0IFJUQ0ZfTkFUID0gX1JUQ0Zf
TkFUCitjb25zdCBSVENGX0xPRyA9IF9SVENGX0xPRworY29uc3QgUlRDRl9ESVJFQ1RTUkMgPSBf
UlRDRl9ESVJFQ1RTUkMKK2NvbnN0IFJUQ0ZfTUFTUSA9IF9SVENGX01BU1EKK2NvbnN0IFJUTV9E
RUxBQ1RJT04gPSBfUlRNX0RFTEFDVElPTgorY29uc3QgUlRNX0ZfQ0xPTkVEID0gX1JUTV9GX0NM
T05FRAorY29uc3QgUlRNX1NFVE5FSUdIVEJMID0gX1JUTV9TRVRORUlHSFRCTAorY29uc3QgUlRN
X1NFVExJTksgPSBfUlRNX1NFVExJTksKK2NvbnN0IFJUTV9HRVRRRElTQyA9IF9SVE1fR0VUUURJ
U0MKK2NvbnN0IFJUTV9ORVdDQUNIRVJFUE9SVCA9IF9SVE1fTkVXQ0FDSEVSRVBPUlQKK2NvbnN0
IFJUTV9HRVRNREIgPSBfUlRNX0dFVE1EQgorY29uc3QgUlRNX0dFVExJTksgPSBfUlRNX0dFVExJ
TksKK2NvbnN0IFJUTV9ORVdORUlHSCA9IF9SVE1fTkVXTkVJR0gKK2NvbnN0IFJUTV9ORVdST1VU
RSA9IF9SVE1fTkVXUk9VVEUKK2NvbnN0IFJUTV9HRVREQ0IgPSBfUlRNX0dFVERDQgorY29uc3Qg
UlRNR1JQX0lQVjZfSUZJTkZPID0gX1JUTUdSUF9JUFY2X0lGSU5GTworY29uc3QgUlRNX0dFVE5F
SUdIVEJMID0gX1JUTV9HRVRORUlHSFRCTAorY29uc3QgUlRNX0RFTE5FVENPTkYgPSBfUlRNX0RF
TE5FVENPTkYKK2NvbnN0IFJUTUdSUF9JUFY2X01ST1VURSA9IF9SVE1HUlBfSVBWNl9NUk9VVEUK
K2NvbnN0IFJUTV9HRVRURklMVEVSID0gX1JUTV9HRVRURklMVEVSCitjb25zdCBSVE1HUlBfREVD
bmV0X0lGQUREUiA9IF9SVE1HUlBfREVDbmV0X0lGQUREUgorY29uc3QgUlRNR1JQX0lQVjZfUk9V
VEUgPSBfUlRNR1JQX0lQVjZfUk9VVEUKK2NvbnN0IFJUTV9ORVdBRERSID0gX1JUTV9ORVdBRERS
Citjb25zdCBSVE1fREVMTlNJRCA9IF9SVE1fREVMTlNJRAorY29uc3QgUlRNX0dFVEFOWUNBU1Qg
PSBfUlRNX0dFVEFOWUNBU1QKK2NvbnN0IFJUTV9HRVRORUlHSCA9IF9SVE1fR0VUTkVJR0gKK2Nv
bnN0IFJUTUdSUF9UQyA9IF9SVE1HUlBfVEMKK2NvbnN0IFJUTV9ORVdDSEFJTiA9IF9SVE1fTkVX
Q0hBSU4KK2NvbnN0IFJUTV9ORVdBQ1RJT04gPSBfUlRNX05FV0FDVElPTgorY29uc3QgUlRNR1JQ
X0lQVjZfSUZBRERSID0gX1JUTUdSUF9JUFY2X0lGQUREUgorY29uc3QgUlRNX0RFTFJPVVRFID0g
X1JUTV9ERUxST1VURQorY29uc3QgUlRNX0dFVEFERFIgPSBfUlRNX0dFVEFERFIKK2NvbnN0IFJU
TV9ORVdRRElTQyA9IF9SVE1fTkVXUURJU0MKK2NvbnN0IFJUTUdSUF9ERUNuZXRfUk9VVEUgPSBf
UlRNR1JQX0RFQ25ldF9ST1VURQorY29uc3QgUlRNX0RFTE1EQiA9IF9SVE1fREVMTURCCitjb25z
dCBSVE1fREVMUlVMRSA9IF9SVE1fREVMUlVMRQorY29uc3QgUlRNX05FV1NUQVRTID0gX1JUTV9O
RVdTVEFUUworY29uc3QgUlRNX0ZfRklCX01BVENIID0gX1JUTV9GX0ZJQl9NQVRDSAorY29uc3Qg
UlRNR1JQX0lQVjRfUk9VVEUgPSBfUlRNR1JQX0lQVjRfUk9VVEUKK2NvbnN0IFJUTVNHX09WRVJS
VU4gPSBfUlRNU0dfT1ZFUlJVTgorY29uc3QgUlRNX05FV01EQiA9IF9SVE1fTkVXTURCCitjb25z
dCBSVE1fREVMVENMQVNTID0gX1JUTV9ERUxUQ0xBU1MKK2NvbnN0IFJUTV9ORVdUQ0xBU1MgPSBf
UlRNX05FV1RDTEFTUworY29uc3QgUlRNR1JQX0xJTksgPSBfUlRNR1JQX0xJTksKK2NvbnN0IFJU
TV9ORVdORFVTRVJPUFQgPSBfUlRNX05FV05EVVNFUk9QVAorY29uc3QgUlRNR1JQX0lQVjRfTVJP
VVRFID0gX1JUTUdSUF9JUFY0X01ST1VURQorY29uc3QgUlRNX0dFVFNUQVRTID0gX1JUTV9HRVRT
VEFUUworY29uc3QgUlRNU0dfTkVXUlVMRSA9IF9SVE1TR19ORVdSVUxFCitjb25zdCBSVE1fREVM
TElOSyA9IF9SVE1fREVMTElOSworY29uc3QgUlRNX05FV05FVENPTkYgPSBfUlRNX05FV05FVENP
TkYKK2NvbnN0IFJUTV9CQVNFID0gX1JUTV9CQVNFCitjb25zdCBSVE1HUlBfSVBWNF9JRkFERFIg
PSBfUlRNR1JQX0lQVjRfSUZBRERSCitjb25zdCBSVE1fRl9QUkVGSVggPSBfUlRNX0ZfUFJFRklY
Citjb25zdCBSVE1fTkVXTkVJR0hUQkwgPSBfUlRNX05FV05FSUdIVEJMCitjb25zdCBSVE1TR19O
RVdERVZJQ0UgPSBfUlRNU0dfTkVXREVWSUNFCitjb25zdCBSVE1fTkVXUlVMRSA9IF9SVE1fTkVX
UlVMRQorY29uc3QgUlRNX0ZfTE9PS1VQX1RBQkxFID0gX1JUTV9GX0xPT0tVUF9UQUJMRQorY29u
c3QgUlRNX0RFTEFERFJMQUJFTCA9IF9SVE1fREVMQUREUkxBQkVMCitjb25zdCBSVE1fTkVXUFJF
RklYID0gX1JUTV9ORVdQUkVGSVgKK2NvbnN0IFJUTVNHX0RFTFJVTEUgPSBfUlRNU0dfREVMUlVM
RQorY29uc3QgUlRNR1JQX05PVElGWSA9IF9SVE1HUlBfTk9USUZZCitjb25zdCBSVE1fR0VUUk9V
VEUgPSBfUlRNX0dFVFJPVVRFCitjb25zdCBSVE1fR0VUUlVMRSA9IF9SVE1fR0VUUlVMRQorY29u
c3QgUlRNU0dfQ09OVFJPTCA9IF9SVE1TR19DT05UUk9MCitjb25zdCBSVE1fREVMUURJU0MgPSBf
UlRNX0RFTFFESVNDCitjb25zdCBSVE1fTkVXVEZJTFRFUiA9IF9SVE1fTkVXVEZJTFRFUgorY29u
c3QgUlRNX0dFVEFDVElPTiA9IF9SVE1fR0VUQUNUSU9OCitjb25zdCBSVE1fRl9OT1RJRlkgPSBf
UlRNX0ZfTk9USUZZCitjb25zdCBSVE1TR19ERUxST1VURSA9IF9SVE1TR19ERUxST1VURQorY29u
c3QgUlRNX0dFVEFERFJMQUJFTCA9IF9SVE1fR0VUQUREUkxBQkVMCitjb25zdCBSVE1HUlBfSVBW
NF9SVUxFID0gX1JUTUdSUF9JUFY0X1JVTEUKK2NvbnN0IFJUTV9ORVdOU0lEID0gX1JUTV9ORVdO
U0lECitjb25zdCBSVE1fR0VUTVVMVElDQVNUID0gX1JUTV9HRVRNVUxUSUNBU1QKK2NvbnN0IFJU
TV9HRVRUQ0xBU1MgPSBfUlRNX0dFVFRDTEFTUworY29uc3QgUlRNX0RFTFRGSUxURVIgPSBfUlRN
X0RFTFRGSUxURVIKK2NvbnN0IFJUTV9HRVRDSEFJTiA9IF9SVE1fR0VUQ0hBSU4KK2NvbnN0IFJU
TV9TRVREQ0IgPSBfUlRNX1NFVERDQgorY29uc3QgUlRNU0dfREVMREVWSUNFID0gX1JUTVNHX0RF
TERFVklDRQorY29uc3QgUlRNR1JQX0lQVjZfUFJFRklYID0gX1JUTUdSUF9JUFY2X1BSRUZJWAor
Y29uc3QgUlRNX0RFTE5FSUdIID0gX1JUTV9ERUxORUlHSAorY29uc3QgUlRNU0dfQVJfRkFJTEVE
ID0gX1JUTVNHX0FSX0ZBSUxFRAorY29uc3QgUlRNX0RFTENIQUlOID0gX1JUTV9ERUxDSEFJTgor
Y29uc3QgUlRNX05FV0xJTksgPSBfUlRNX05FV0xJTksKK2NvbnN0IFJUTV9GX0VRVUFMSVpFID0g
X1JUTV9GX0VRVUFMSVpFCitjb25zdCBSVE1fR0VUTkVUQ09ORiA9IF9SVE1fR0VUTkVUQ09ORgor
Y29uc3QgUlRNX0dFVE5TSUQgPSBfUlRNX0dFVE5TSUQKK2NvbnN0IFJUTV9ORVdBRERSTEFCRUwg
PSBfUlRNX05FV0FERFJMQUJFTAorY29uc3QgUlRNR1JQX05FSUdIID0gX1JUTUdSUF9ORUlHSAor
Y29uc3QgUlRNX0RFTEFERFIgPSBfUlRNX0RFTEFERFIKK2NvbnN0IFJUTVNHX05FV1JPVVRFID0g
X1JUTVNHX05FV1JPVVRFCitjb25zdCBSVE5MR1JQX05TSUQgPSBfUlROTEdSUF9OU0lECitjb25z
dCBSVE5fTVVMVElDQVNUID0gX1JUTl9NVUxUSUNBU1QKK2NvbnN0IFJUTkxHUlBfSVBWNl9ORVRD
T05GID0gX1JUTkxHUlBfSVBWNl9ORVRDT05GCitjb25zdCBSVE5fVU5TUEVDID0gX1JUTl9VTlNQ
RUMKK2NvbnN0IFJUTkxHUlBfSVBWNl9QUkVGSVggPSBfUlROTEdSUF9JUFY2X1BSRUZJWAorY29u
c3QgUlROTEdSUF9ORF9VU0VST1BUID0gX1JUTkxHUlBfTkRfVVNFUk9QVAorY29uc3QgUlROTEdS
UF9NUExTX05FVENPTkYgPSBfUlROTEdSUF9NUExTX05FVENPTkYKK2NvbnN0IFJUTl9VTklDQVNU
ID0gX1JUTl9VTklDQVNUCitjb25zdCBSVE5MR1JQX0RDQiA9IF9SVE5MR1JQX0RDQgorY29uc3Qg
UlROTEdSUF9JUFY2X0lGSU5GTyA9IF9SVE5MR1JQX0lQVjZfSUZJTkZPCitjb25zdCBSVE5MR1JQ
X1BIT05FVF9ST1VURSA9IF9SVE5MR1JQX1BIT05FVF9ST1VURQorY29uc3QgUlROX05BVCA9IF9S
VE5fTkFUCitjb25zdCBSVE5fWFJFU09MVkUgPSBfUlROX1hSRVNPTFZFCitjb25zdCBSVE5MR1JQ
X0lQVjRfUk9VVEUgPSBfUlROTEdSUF9JUFY0X1JPVVRFCitjb25zdCBSVE5fQkxBQ0tIT0xFID0g
X1JUTl9CTEFDS0hPTEUKK2NvbnN0IFJUTkxHUlBfREVDbmV0X1JVTEUgPSBfUlROTEdSUF9ERUNu
ZXRfUlVMRQorY29uc3QgUlROSF9GX0xJTktET1dOID0gX1JUTkhfRl9MSU5LRE9XTgorY29uc3Qg
UlROTEdSUF9JUFY2X0lGQUREUiA9IF9SVE5MR1JQX0lQVjZfSUZBRERSCitjb25zdCBSVE5MX0ZB
TUlMWV9JUE1SID0gX1JUTkxfRkFNSUxZX0lQTVIKK2NvbnN0IFJUTkxHUlBfUEhPTkVUX0lGQURE
UiA9IF9SVE5MR1JQX1BIT05FVF9JRkFERFIKK2NvbnN0IFJUTkxHUlBfTk9QNCA9IF9SVE5MR1JQ
X05PUDQKK2NvbnN0IFJUTkxfRkFNSUxZX01BWCA9IF9SVE5MX0ZBTUlMWV9NQVgKK2NvbnN0IFJU
TkxHUlBfSVBWNF9SVUxFID0gX1JUTkxHUlBfSVBWNF9SVUxFCitjb25zdCBSVE5IX0NPTVBBUkVf
TUFTSyA9IF9SVE5IX0NPTVBBUkVfTUFTSworY29uc3QgUlROTEdSUF9JUFY2X1JPVVRFID0gX1JU
TkxHUlBfSVBWNl9ST1VURQorY29uc3QgUlROSF9GX1BFUlZBU0lWRSA9IF9SVE5IX0ZfUEVSVkFT
SVZFCitjb25zdCBSVE5IX0FMSUdOVE8gPSBfUlROSF9BTElHTlRPCitjb25zdCBSVE5MR1JQX05P
UDIgPSBfUlROTEdSUF9OT1AyCitjb25zdCBSVE5FVExJTktfSEFWRV9QRUVSSU5GTyA9IF9SVE5F
VExJTktfSEFWRV9QRUVSSU5GTworY29uc3QgUlROTEdSUF9ERUNuZXRfSUZBRERSID0gX1JUTkxH
UlBfREVDbmV0X0lGQUREUgorY29uc3QgUlROSF9GX09GRkxPQUQgPSBfUlROSF9GX09GRkxPQUQK
K2NvbnN0IFJUTkxHUlBfREVDbmV0X1JPVVRFID0gX1JUTkxHUlBfREVDbmV0X1JPVVRFCitjb25z
dCBSVE5MR1JQX0lQVjZfTVJPVVRFID0gX1JUTkxHUlBfSVBWNl9NUk9VVEUKK2NvbnN0IFJUTkxH
UlBfTVBMU19ST1VURSA9IF9SVE5MR1JQX01QTFNfUk9VVEUKK2NvbnN0IFJUTkxHUlBfTURCID0g
X1JUTkxHUlBfTURCCitjb25zdCBSVE5fVEhST1cgPSBfUlROX1RIUk9XCitjb25zdCBSVE5MR1JQ
X0lQVjRfTVJPVVRFID0gX1JUTkxHUlBfSVBWNF9NUk9VVEUKK2NvbnN0IFJUTkxHUlBfSVBWNF9J
RkFERFIgPSBfUlROTEdSUF9JUFY0X0lGQUREUgorY29uc3QgUlROTEdSUF9OT05FID0gX1JUTkxH
UlBfTk9ORQorY29uc3QgUlROSF9GX1VOUkVTT0xWRUQgPSBfUlROSF9GX1VOUkVTT0xWRUQKK2Nv
bnN0IFJUTkxHUlBfTkVJR0ggPSBfUlROTEdSUF9ORUlHSAorY29uc3QgUlROTEdSUF9JUFY0X05F
VENPTkYgPSBfUlROTEdSUF9JUFY0X05FVENPTkYKK2NvbnN0IFJUTkxfRkFNSUxZX0lQNk1SID0g
X1JUTkxfRkFNSUxZX0lQNk1SCitjb25zdCBSVE5MR1JQX05PVElGWSA9IF9SVE5MR1JQX05PVElG
WQorY29uc3QgUlROX1VOUkVBQ0hBQkxFID0gX1JUTl9VTlJFQUNIQUJMRQorY29uc3QgUlROX0JS
T0FEQ0FTVCA9IF9SVE5fQlJPQURDQVNUCitjb25zdCBSVE5fTE9DQUwgPSBfUlROX0xPQ0FMCitj
b25zdCBSVE5IX0ZfREVBRCA9IF9SVE5IX0ZfREVBRAorY29uc3QgUlROX1BST0hJQklUID0gX1JU
Tl9QUk9ISUJJVAorY29uc3QgUlROTEdSUF9JUFY0X01ST1VURV9SID0gX1JUTkxHUlBfSVBWNF9N
Uk9VVEVfUgorY29uc3QgUlROX0FOWUNBU1QgPSBfUlROX0FOWUNBU1QKK2NvbnN0IFJUTkxHUlBf
TElOSyA9IF9SVE5MR1JQX0xJTksKK2NvbnN0IFJUTkxHUlBfVEMgPSBfUlROTEdSUF9UQworY29u
c3QgUlROTEdSUF9JUFY2X1JVTEUgPSBfUlROTEdSUF9JUFY2X1JVTEUKK2NvbnN0IFJUTkhfRl9P
TkxJTksgPSBfUlROSF9GX09OTElOSworY29uc3QgUlROTEdSUF9JUFY2X01ST1VURV9SID0gX1JU
TkxHUlBfSVBWNl9NUk9VVEVfUgorY29uc3QgUlRQUk9UX1VOU1BFQyA9IF9SVFBST1RfVU5TUEVD
Citjb25zdCBSVFBST1RfREhDUCA9IF9SVFBST1RfREhDUAorY29uc3QgUlRQUk9UX1NUQVRJQyA9
IF9SVFBST1RfU1RBVElDCitjb25zdCBSVFBST1RfT1NQRiA9IF9SVFBST1RfT1NQRgorY29uc3Qg
UlRQUk9UX0tFUk5FTCA9IF9SVFBST1RfS0VSTkVMCitjb25zdCBSVFBST1RfR0FURUQgPSBfUlRQ
Uk9UX0dBVEVECitjb25zdCBSVFBST1RfWkVCUkEgPSBfUlRQUk9UX1pFQlJBCitjb25zdCBSVFBS
T1RfQklSRCA9IF9SVFBST1RfQklSRAorY29uc3QgUlRQUk9UX1JBID0gX1JUUFJPVF9SQQorY29u
c3QgUlRQUk9UX1hPUlAgPSBfUlRQUk9UX1hPUlAKK2NvbnN0IFJUUFJPVF9CT09UID0gX1JUUFJP
VF9CT09UCitjb25zdCBSVFBST1RfQkFCRUwgPSBfUlRQUk9UX0JBQkVMCitjb25zdCBSVFBST1Rf
UklQID0gX1JUUFJPVF9SSVAKK2NvbnN0IFJUUFJPVF9FSUdSUCA9IF9SVFBST1RfRUlHUlAKK2Nv
bnN0IFJUUFJPVF9OVEsgPSBfUlRQUk9UX05USworY29uc3QgUlRQUk9UX1JFRElSRUNUID0gX1JU
UFJPVF9SRURJUkVDVAorY29uc3QgUlRQUk9UX0lTSVMgPSBfUlRQUk9UX0lTSVMKK2NvbnN0IFJU
UFJPVF9CR1AgPSBfUlRQUk9UX0JHUAorY29uc3QgUlRQUk9UX01SVCA9IF9SVFBST1RfTVJUCitj
b25zdCBSVFBST1RfTVJPVVRFRCA9IF9SVFBST1RfTVJPVVRFRAorY29uc3QgUlRQUk9UX0ROUk9V
VEVEID0gX1JUUFJPVF9ETlJPVVRFRAordHlwZSBJZkluZm9tc2cgc3RydWN0IHsgRmFtaWx5IHVp
bnQ4OyBfX2lmaV9wYWQgdWludDg7IFR5cGUgdWludDE2OyBJbmRleCBpbnQzMjsgRmxhZ3MgdWlu
dDMyOyBDaGFuZ2UgdWludDMyOyB9Citjb25zdCBJRkFfTEFCRUwgPSBfSUZBX0xBQkVMCitjb25z
dCBJRkFfVU5TUEVDID0gX0lGQV9VTlNQRUMKK2NvbnN0IElGQV9BTllDQVNUID0gX0lGQV9BTllD
QVNUCitjb25zdCBJRkFfUlRfUFJJT1JJVFkgPSBfSUZBX1JUX1BSSU9SSVRZCitjb25zdCBJRkFf
Rl9NQ0FVVE9KT0lOID0gX0lGQV9GX01DQVVUT0pPSU4KK2NvbnN0IElGQV9GX09QVElNSVNUSUMg
PSBfSUZBX0ZfT1BUSU1JU1RJQworY29uc3QgSUZBX0ZfU0VDT05EQVJZID0gX0lGQV9GX1NFQ09O
REFSWQorY29uc3QgSUZBX0ZfSE9NRUFERFJFU1MgPSBfSUZBX0ZfSE9NRUFERFJFU1MKK2NvbnN0
IElGQV9GX1RFTVBPUkFSWSA9IF9JRkFfRl9URU1QT1JBUlkKK2NvbnN0IElGQV9GX01BTkFHRVRF
TVBBRERSID0gX0lGQV9GX01BTkFHRVRFTVBBRERSCitjb25zdCBJRkFfQ0FDSEVJTkZPID0gX0lG
QV9DQUNIRUlORk8KK2NvbnN0IElGQV9GX1NUQUJMRV9QUklWQUNZID0gX0lGQV9GX1NUQUJMRV9Q
UklWQUNZCitjb25zdCBJRkFfRl9OT1BSRUZJWFJPVVRFID0gX0lGQV9GX05PUFJFRklYUk9VVEUK
K2NvbnN0IElGQV9GX1BFUk1BTkVOVCA9IF9JRkFfRl9QRVJNQU5FTlQKK2NvbnN0IElGQV9GTEFH
UyA9IF9JRkFfRkxBR1MKK2NvbnN0IElGQV9MT0NBTCA9IF9JRkFfTE9DQUwKK2NvbnN0IElGQV9G
X0RBREZBSUxFRCA9IF9JRkFfRl9EQURGQUlMRUQKK2NvbnN0IElGQV9GX1RFTlRBVElWRSA9IF9J
RkFfRl9URU5UQVRJVkUKK2NvbnN0IElGQV9BRERSRVNTID0gX0lGQV9BRERSRVNTCitjb25zdCBJ
RkFfRl9ERVBSRUNBVEVEID0gX0lGQV9GX0RFUFJFQ0FURUQKK2NvbnN0IElGQV9NVUxUSUNBU1Qg
PSBfSUZBX01VTFRJQ0FTVAorY29uc3QgSUZBX0JST0FEQ0FTVCA9IF9JRkFfQlJPQURDQVNUCitj
b25zdCBJRkFfRl9OT0RBRCA9IF9JRkFfRl9OT0RBRAorY29uc3QgSUZMQV9CUlBPUlRfTkVJR0hf
U1VQUFJFU1MgPSBfSUZMQV9CUlBPUlRfTkVJR0hfU1VQUFJFU1MKK2NvbnN0IElGTEFfVkZfTElO
S19TVEFURSA9IF9JRkxBX1ZGX0xJTktfU1RBVEUKK2NvbnN0IElGTEFfQk9ORF9VU0VfQ0FSUklF
UiA9IF9JRkxBX0JPTkRfVVNFX0NBUlJJRVIKK2NvbnN0IElGTEFfT0ZGTE9BRF9YU1RBVFNfVU5T
UEVDID0gX0lGTEFfT0ZGTE9BRF9YU1RBVFNfVU5TUEVDCitjb25zdCBJRkxBX0JSX1RPUE9MT0dZ
X0NIQU5HRV9USU1FUiA9IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRV9USU1FUgorY29uc3QgSUZM
QV9STU5FVF9NVVhfSUQgPSBfSUZMQV9STU5FVF9NVVhfSUQKK2NvbnN0IElGTEFfVkZfU1RBVFNf
UlhfQllURVMgPSBfSUZMQV9WRl9TVEFUU19SWF9CWVRFUworY29uc3QgSUZMQV9CUl9NQVhfQUdF
ID0gX0lGTEFfQlJfTUFYX0FHRQorY29uc3QgSUZMQV9HRU5FVkVfUkVNT1RFNiA9IF9JRkxBX0dF
TkVWRV9SRU1PVEU2Citjb25zdCBJRkxBX0JPTkRfTU9ERSA9IF9JRkxBX0JPTkRfTU9ERQorY29u
c3QgSUZMQV9NQVAgPSBfSUZMQV9NQVAKK2NvbnN0IElGTEFfVFVOX1ZORVRfSERSID0gX0lGTEFf
VFVOX1ZORVRfSERSCitjb25zdCBJRkxBX1ZGX1BPUlRTID0gX0lGTEFfVkZfUE9SVFMKK2NvbnN0
IElGTEFfQlJQT1JUX0lTT0xBVEVEID0gX0lGTEFfQlJQT1JUX0lTT0xBVEVECitjb25zdCBJRkxB
X0JPTkRfU0xBVkVfTElOS19GQUlMVVJFX0NPVU5UID0gX0lGTEFfQk9ORF9TTEFWRV9MSU5LX0ZB
SUxVUkVfQ09VTlQKK2NvbnN0IElGTEFfUFJJT1JJVFkgPSBfSUZMQV9QUklPUklUWQorY29uc3Qg
SUZMQV9WRl9JTkZPID0gX0lGTEFfVkZfSU5GTworY29uc3QgSUZMQV9WRl9MSU5LX1NUQVRFX0VO
QUJMRSA9IF9JRkxBX1ZGX0xJTktfU1RBVEVfRU5BQkxFCitjb25zdCBJRkxBX1ZYTEFOX0lEID0g
X0lGTEFfVlhMQU5fSUQKK2NvbnN0IElGTEFfVFhRTEVOID0gX0lGTEFfVFhRTEVOCitjb25zdCBJ
RkxBX0JSX0ZEQl9GTFVTSCA9IF9JRkxBX0JSX0ZEQl9GTFVTSAorY29uc3QgSUZMQV9CUlBPUlRf
RkxVU0ggPSBfSUZMQV9CUlBPUlRfRkxVU0gKK2NvbnN0IElGTEFfQlJQT1JUX01DQVNUX0ZMT09E
ID0gX0lGTEFfQlJQT1JUX01DQVNUX0ZMT09ECitjb25zdCBJRkxBX1BPUlRfSE9TVF9VVUlEID0g
X0lGTEFfUE9SVF9IT1NUX1VVSUQKK2NvbnN0IElGTEFfQlJfTUNBU1RfU1RBVFNfRU5BQkxFRCA9
IF9JRkxBX0JSX01DQVNUX1NUQVRTX0VOQUJMRUQKK2NvbnN0IElGTEFfQlJfTUNBU1RfTUxEX1ZF
UlNJT04gPSBfSUZMQV9CUl9NQ0FTVF9NTERfVkVSU0lPTgorY29uc3QgSUZMQV9CUl9ORl9DQUxM
X0lQVEFCTEVTID0gX0lGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFUworY29uc3QgSUZMQV9CUlBPUlRf
RkFTVF9MRUFWRSA9IF9JRkxBX0JSUE9SVF9GQVNUX0xFQVZFCitjb25zdCBJRkxBX1ZGX0xJTktf
U1RBVEVfQVVUTyA9IF9JRkxBX1ZGX0xJTktfU1RBVEVfQVVUTworY29uc3QgSUZMQV9CUl9NQ0FT
VF9JR01QX1ZFUlNJT04gPSBfSUZMQV9CUl9NQ0FTVF9JR01QX1ZFUlNJT04KK2NvbnN0IElGTEFf
TUFDU0VDX1JFUExBWV9QUk9URUNUID0gX0lGTEFfTUFDU0VDX1JFUExBWV9QUk9URUNUCitjb25z
dCBJRkxBX0JPTkRfU0xBVkVfUEVSTV9IV0FERFIgPSBfSUZMQV9CT05EX1NMQVZFX1BFUk1fSFdB
RERSCitjb25zdCBJRkxBX0dTT19NQVhfU0laRSA9IF9JRkxBX0dTT19NQVhfU0laRQorY29uc3Qg
SUZMQV9WWExBTl9DT0xMRUNUX01FVEFEQVRBID0gX0lGTEFfVlhMQU5fQ09MTEVDVF9NRVRBREFU
QQorY29uc3QgSUZMQV9CT05EX0ZBSUxfT1ZFUl9NQUMgPSBfSUZMQV9CT05EX0ZBSUxfT1ZFUl9N
QUMKK2NvbnN0IElGTEFfTUFDU0VDX1BST1RFQ1QgPSBfSUZMQV9NQUNTRUNfUFJPVEVDVAorY29u
c3QgSUZMQV9CUl9WTEFOX1NUQVRTX0VOQUJMRUQgPSBfSUZMQV9CUl9WTEFOX1NUQVRTX0VOQUJM
RUQKK2NvbnN0IElGTEFfQk9ORF9TTEFWRV9BRF9BR0dSRUdBVE9SX0lEID0gX0lGTEFfQk9ORF9T
TEFWRV9BRF9BR0dSRUdBVE9SX0lECitjb25zdCBJRkxBX1ZGX1ZMQU5fSU5GTyA9IF9JRkxBX1ZG
X1ZMQU5fSU5GTworY29uc3QgSUZMQV9WUkZfVEFCTEUgPSBfSUZMQV9WUkZfVEFCTEUKK2NvbnN0
IElGTEFfVkZfSUJfUE9SVF9HVUlEID0gX0lGTEFfVkZfSUJfUE9SVF9HVUlECitjb25zdCBJRkxB
X0JSX1JPT1RfSUQgPSBfSUZMQV9CUl9ST09UX0lECitjb25zdCBJRkxBX1ZMQU5fSU5HUkVTU19R
T1MgPSBfSUZMQV9WTEFOX0lOR1JFU1NfUU9TCitjb25zdCBJRkxBX1BPUlRfVU5TUEVDID0gX0lG
TEFfUE9SVF9VTlNQRUMKK2NvbnN0IElGTEFfVlhMQU5fUkVNQ1NVTV9SWCA9IF9JRkxBX1ZYTEFO
X1JFTUNTVU1fUlgKK2NvbnN0IElGTEFfQlJQT1JUX0NPTkZJR19QRU5ESU5HID0gX0lGTEFfQlJQ
T1JUX0NPTkZJR19QRU5ESU5HCitjb25zdCBJRkxBX0JSUE9SVF9HVUFSRCA9IF9JRkxBX0JSUE9S
VF9HVUFSRAorY29uc3QgSUZMQV9NQVNURVIgPSBfSUZMQV9NQVNURVIKK2NvbnN0IElGTEFfTkVX
X0lGSU5ERVggPSBfSUZMQV9ORVdfSUZJTkRFWAorY29uc3QgSUZMQV9WWExBTl9MT0NBTCA9IF9J
RkxBX1ZYTEFOX0xPQ0FMCitjb25zdCBJRkxBX0JSX01DQVNUX0xBU1RfTUVNQkVSX0NOVCA9IF9J
RkxBX0JSX01DQVNUX0xBU1RfTUVNQkVSX0NOVAorY29uc3QgSUZMQV9CUlBPUlRfREVTSUdOQVRF
RF9DT1NUID0gX0lGTEFfQlJQT1JUX0RFU0lHTkFURURfQ09TVAorY29uc3QgSUZMQV9WWExBTl9M
QUJFTCA9IF9JRkxBX1ZYTEFOX0xBQkVMCitjb25zdCBJRkxBX0JSX01DQVNUX0xBU1RfTUVNQkVS
X0lOVFZMID0gX0lGTEFfQlJfTUNBU1RfTEFTVF9NRU1CRVJfSU5UVkwKK2NvbnN0IElGTEFfU1RB
VFNfTElOS19PRkZMT0FEX1hTVEFUUyA9IF9JRkxBX1NUQVRTX0xJTktfT0ZGTE9BRF9YU1RBVFMK
K2NvbnN0IElGTEFfVFVOX0dST1VQID0gX0lGTEFfVFVOX0dST1VQCitjb25zdCBJRkxBX1ZGX1JB
VEUgPSBfSUZMQV9WRl9SQVRFCitjb25zdCBJRkxBX0JSX1BSSU9SSVRZID0gX0lGTEFfQlJfUFJJ
T1JJVFkKK2NvbnN0IElGTEFfSFNSX1NFUV9OUiA9IF9JRkxBX0hTUl9TRVFfTlIKK2NvbnN0IElG
TEFfUE9SVF9SRVNQT05TRSA9IF9JRkxBX1BPUlRfUkVTUE9OU0UKK2NvbnN0IElGTEFfQlJfTUNB
U1RfUk9VVEVSID0gX0lGTEFfQlJfTUNBU1RfUk9VVEVSCitjb25zdCBJRkxBX0lORVQ2X1RPS0VO
ID0gX0lGTEFfSU5FVDZfVE9LRU4KK2NvbnN0IElGTEFfQk9ORF9NSU5fTElOS1MgPSBfSUZMQV9C
T05EX01JTl9MSU5LUworY29uc3QgSUZMQV9CUlBPUlRfTVVMVElDQVNUX1JPVVRFUiA9IF9JRkxB
X0JSUE9SVF9NVUxUSUNBU1RfUk9VVEVSCitjb25zdCBJRkxBX0JSUE9SVF9DT1NUID0gX0lGTEFf
QlJQT1JUX0NPU1QKK2NvbnN0IElGTEFfTUFDU0VDX0lOQ19TQ0kgPSBfSUZMQV9NQUNTRUNfSU5D
X1NDSQorY29uc3QgSUZMQV9QT1JUX0lOU1RBTkNFX1VVSUQgPSBfSUZMQV9QT1JUX0lOU1RBTkNF
X1VVSUQKK2NvbnN0IElGTEFfQlJQT1JUX0JSSURHRV9JRCA9IF9JRkxBX0JSUE9SVF9CUklER0Vf
SUQKK2NvbnN0IElGTEFfQlJQT1JUX0xFQVJOSU5HX1NZTkMgPSBfSUZMQV9CUlBPUlRfTEVBUk5J
TkdfU1lOQworY29uc3QgSUZMQV9MSU5LID0gX0lGTEFfTElOSworY29uc3QgSUZMQV9YRFBfQVRU
QUNIRUQgPSBfSUZMQV9YRFBfQVRUQUNIRUQKK2NvbnN0IElGTEFfVkZfU1RBVFNfQlJPQURDQVNU
ID0gX0lGTEFfVkZfU1RBVFNfQlJPQURDQVNUCitjb25zdCBJRkxBX0JPTkRfQURfVVNFUl9QT1JU
X0tFWSA9IF9JRkxBX0JPTkRfQURfVVNFUl9QT1JUX0tFWQorY29uc3QgSUZMQV9CUlBPUlRfQkFD
S1VQX1BPUlQgPSBfSUZMQV9CUlBPUlRfQkFDS1VQX1BPUlQKK2NvbnN0IElGTEFfVlhMQU5fR0JQ
ID0gX0lGTEFfVlhMQU5fR0JQCitjb25zdCBJRkxBX0lORVQ2X0FERFJfR0VOX01PREUgPSBfSUZM
QV9JTkVUNl9BRERSX0dFTl9NT0RFCitjb25zdCBJRkxBX0JSUE9SVF9ERVNJR05BVEVEX1BPUlQg
PSBfSUZMQV9CUlBPUlRfREVTSUdOQVRFRF9QT1JUCitjb25zdCBJRkxBX1RVTl9UWVBFID0gX0lG
TEFfVFVOX1RZUEUKK2NvbnN0IElGTEFfQlJfR0NfVElNRVIgPSBfSUZMQV9CUl9HQ19USU1FUgor
Y29uc3QgSUZMQV9CUlBPUlRfUFJJT1JJVFkgPSBfSUZMQV9CUlBPUlRfUFJJT1JJVFkKK2NvbnN0
IElGTEFfQk9ORF9BTExfU0xBVkVTX0FDVElWRSA9IF9JRkxBX0JPTkRfQUxMX1NMQVZFU19BQ1RJ
VkUKK2NvbnN0IElGTEFfSVBPSUJfTU9ERSA9IF9JRkxBX0lQT0lCX01PREUKK2NvbnN0IElGTEFf
Q0FSUklFUl9DSEFOR0VTID0gX0lGTEFfQ0FSUklFUl9DSEFOR0VTCitjb25zdCBJRkxBX0lQT0lC
X1BLRVkgPSBfSUZMQV9JUE9JQl9QS0VZCitjb25zdCBJRkxBX01BQ1NFQ19QQUQgPSBfSUZMQV9N
QUNTRUNfUEFECitjb25zdCBJRkxBX0JSUE9SVF9NT0RFID0gX0lGTEFfQlJQT1JUX01PREUKK2Nv
bnN0IElGTEFfTUFDU0VDX1VOU1BFQyA9IF9JRkxBX01BQ1NFQ19VTlNQRUMKK2NvbnN0IElGTEFf
Qk9ORF9QUklNQVJZID0gX0lGTEFfQk9ORF9QUklNQVJZCitjb25zdCBJRkxBX0VWRU5UX0JPTkRJ
TkdfRkFJTE9WRVIgPSBfSUZMQV9FVkVOVF9CT05ESU5HX0ZBSUxPVkVSCitjb25zdCBJRkxBX0JS
UE9SVF9UT1BPTE9HWV9DSEFOR0VfQUNLID0gX0lGTEFfQlJQT1JUX1RPUE9MT0dZX0NIQU5HRV9B
Q0sKK2NvbnN0IElGTEFfQk9ORF9BRF9JTkZPX1BBUlRORVJfS0VZID0gX0lGTEFfQk9ORF9BRF9J
TkZPX1BBUlRORVJfS0VZCitjb25zdCBJRkxBX0hTUl9NVUxUSUNBU1RfU1BFQyA9IF9JRkxBX0hT
Ul9NVUxUSUNBU1RfU1BFQworY29uc3QgSUZMQV9CUlBPUlRfUFJPWFlBUlAgPSBfSUZMQV9CUlBP
UlRfUFJPWFlBUlAKK2NvbnN0IElGTEFfQk9ORF9BRF9JTkZPX1BBUlRORVJfTUFDID0gX0lGTEFf
Qk9ORF9BRF9JTkZPX1BBUlRORVJfTUFDCitjb25zdCBJRkxBX0JSX01DQVNUX1FVRVJZX0lOVFZM
ID0gX0lGTEFfQlJfTUNBU1RfUVVFUllfSU5UVkwKK2NvbnN0IElGTEFfV0VJR0hUID0gX0lGTEFf
V0VJR0hUCitjb25zdCBJRkxBX1hGUk1fVU5TUEVDID0gX0lGTEFfWEZSTV9VTlNQRUMKK2NvbnN0
IElGTEFfWERQID0gX0lGTEFfWERQCitjb25zdCBJRkxBX1NUQVRTID0gX0lGTEFfU1RBVFMKK2Nv
bnN0IElGTEFfQlJfVkxBTl9QUk9UT0NPTCA9IF9JRkxBX0JSX1ZMQU5fUFJPVE9DT0wKK2NvbnN0
IElGTEFfQlJQT1JUX1VOU1BFQyA9IF9JRkxBX0JSUE9SVF9VTlNQRUMKK2NvbnN0IElGTEFfR0VO
RVZFX1RPUyA9IF9JRkxBX0dFTkVWRV9UT1MKK2NvbnN0IElGTEFfQlJPQURDQVNUID0gX0lGTEFf
QlJPQURDQVNUCitjb25zdCBJRkxBX1hEUF9VTlNQRUMgPSBfSUZMQV9YRFBfVU5TUEVDCitjb25z
dCBJRkxBX0JPTkRfU0xBVkVfQURfUEFSVE5FUl9PUEVSX1BPUlRfU1RBVEUgPSBfSUZMQV9CT05E
X1NMQVZFX0FEX1BBUlRORVJfT1BFUl9QT1JUX1NUQVRFCitjb25zdCBJRkxBX0xJTktJTkZPID0g
X0lGTEFfTElOS0lORk8KK2NvbnN0IElGTEFfSU5FVDZfVU5TUEVDID0gX0lGTEFfSU5FVDZfVU5T
UEVDCitjb25zdCBJRkxBX1ZGX1NUQVRTX1RYX0RST1BQRUQgPSBfSUZMQV9WRl9TVEFUU19UWF9E
Uk9QUEVECitjb25zdCBJRkxBX0NBUlJJRVIgPSBfSUZMQV9DQVJSSUVSCitjb25zdCBJRkxBX1JN
TkVUX1VOU1BFQyA9IF9JRkxBX1JNTkVUX1VOU1BFQworY29uc3QgSUZMQV9IU1JfVU5TUEVDID0g
X0lGTEFfSFNSX1VOU1BFQworY29uc3QgSUZMQV9HRU5FVkVfVFRMID0gX0lGTEFfR0VORVZFX1RU
TAorY29uc3QgSUZMQV9CUl9NQ0FTVF9RVUVSSUVSX0lOVFZMID0gX0lGTEFfQlJfTUNBU1RfUVVF
UklFUl9JTlRWTAorY29uc3QgSUZMQV9QT1JUX1ZGID0gX0lGTEFfUE9SVF9WRgorY29uc3QgSUZM
QV9CUl9ORl9DQUxMX0lQNlRBQkxFUyA9IF9JRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTCitjb25z
dCBJRkxBX01UVSA9IF9JRkxBX01UVQorY29uc3QgSUZMQV9CUl9ST09UX1BPUlQgPSBfSUZMQV9C
Ul9ST09UX1BPUlQKK2NvbnN0IElGTEFfUFJPTUlTQ1VJVFkgPSBfSUZMQV9QUk9NSVNDVUlUWQor
Y29uc3QgSUZMQV9CUl9NQ0FTVF9NRU1CRVJTSElQX0lOVFZMID0gX0lGTEFfQlJfTUNBU1RfTUVN
QkVSU0hJUF9JTlRWTAorY29uc3QgSUZMQV9QQUQgPSBfSUZMQV9QQUQKK2NvbnN0IElGTEFfQlJQ
T1JUX1ZMQU5fVFVOTkVMID0gX0lGTEFfQlJQT1JUX1ZMQU5fVFVOTkVMCitjb25zdCBJRkxBX0JP
TkRfQURfSU5GTyA9IF9JRkxBX0JPTkRfQURfSU5GTworY29uc3QgSUZMQV9CUl9VTlNQRUMgPSBf
SUZMQV9CUl9VTlNQRUMKK2NvbnN0IElGTEFfSUZfTkVUTlNJRCA9IF9JRkxBX0lGX05FVE5TSUQK
K2NvbnN0IElGTEFfQk9ORF9BRF9JTkZPX1VOU1BFQyA9IF9JRkxBX0JPTkRfQURfSU5GT19VTlNQ
RUMKK2NvbnN0IElGTEFfTkVXX05FVE5TSUQgPSBfSUZMQV9ORVdfTkVUTlNJRAorY29uc3QgSUZM
QV9WUkZfVU5TUEVDID0gX0lGTEFfVlJGX1VOU1BFQworY29uc3QgSUZMQV9WTEFOX1FPU19VTlNQ
RUMgPSBfSUZMQV9WTEFOX1FPU19VTlNQRUMKK2NvbnN0IElGTEFfSVBPSUJfVU1DQVNUID0gX0lG
TEFfSVBPSUJfVU1DQVNUCitjb25zdCBJRkxBX1BPUlRfUkVRVUVTVCA9IF9JRkxBX1BPUlRfUkVR
VUVTVAorY29uc3QgSUZMQV9CT05EX0FEX0lORk9fQUdHUkVHQVRPUiA9IF9JRkxBX0JPTkRfQURf
SU5GT19BR0dSRUdBVE9SCitjb25zdCBJRkxBX1ZYTEFOX0dQRSA9IF9JRkxBX1ZYTEFOX0dQRQor
Y29uc3QgSUZMQV9FWFRfTUFTSyA9IF9JRkxBX0VYVF9NQVNLCitjb25zdCBJRkxBX0dFTkVWRV9D
T0xMRUNUX01FVEFEQVRBID0gX0lGTEFfR0VORVZFX0NPTExFQ1RfTUVUQURBVEEKK2NvbnN0IElG
TEFfTUFDVkxBTl9NT0RFID0gX0lGTEFfTUFDVkxBTl9NT0RFCitjb25zdCBJRkxBX0JPTkRfQURf
TEFDUF9SQVRFID0gX0lGTEFfQk9ORF9BRF9MQUNQX1JBVEUKK2NvbnN0IElGTEFfVFVOX05VTV9R
VUVVRVMgPSBfSUZMQV9UVU5fTlVNX1FVRVVFUworY29uc3QgSUZMQV9DT1NUID0gX0lGTEFfQ09T
VAorY29uc3QgSUZMQV9CT05EX1NMQVZFX1FVRVVFX0lEID0gX0lGTEFfQk9ORF9TTEFWRV9RVUVV
RV9JRAorY29uc3QgSUZMQV9PUEVSU1RBVEUgPSBfSUZMQV9PUEVSU1RBVEUKK2NvbnN0IElGTEFf
Qk9ORF9TTEFWRV9NSUlfU1RBVFVTID0gX0lGTEFfQk9ORF9TTEFWRV9NSUlfU1RBVFVTCitjb25z
dCBJRkxBX01BQ1NFQ19XSU5ET1cgPSBfSUZMQV9NQUNTRUNfV0lORE9XCitjb25zdCBJRkxBX05V
TV9WRiA9IF9JRkxBX05VTV9WRgorY29uc3QgSUZMQV9CUl9NQ0FTVF9RVUVSWV9SRVNQT05TRV9J
TlRWTCA9IF9JRkxBX0JSX01DQVNUX1FVRVJZX1JFU1BPTlNFX0lOVFZMCitjb25zdCBJRkxBX1hE
UF9EUlZfUFJPR19JRCA9IF9JRkxBX1hEUF9EUlZfUFJPR19JRAorY29uc3QgSUZMQV9WRklORk9f
TElTVCA9IF9JRkxBX1ZGSU5GT19MSVNUCitjb25zdCBJRkxBX0lORk9fVU5TUEVDID0gX0lGTEFf
SU5GT19VTlNQRUMKK2NvbnN0IElGTEFfVkxBTl9RT1NfTUFQUElORyA9IF9JRkxBX1ZMQU5fUU9T
X01BUFBJTkcKK2NvbnN0IElGTEFfWERQX0hXX1BST0dfSUQgPSBfSUZMQV9YRFBfSFdfUFJPR19J
RAorY29uc3QgSUZMQV9HVFBfVU5TUEVDID0gX0lGTEFfR1RQX1VOU1BFQworY29uc3QgSUZMQV9C
Ul9NQ0FTVF9TVEFSVFVQX1FVRVJZX0lOVFZMID0gX0lGTEFfQlJfTUNBU1RfU1RBUlRVUF9RVUVS
WV9JTlRWTAorY29uc3QgSUZMQV9CUlBPUlRfUk9PVF9JRCA9IF9JRkxBX0JSUE9SVF9ST09UX0lE
Citjb25zdCBJRkxBX1NUQVRTNjQgPSBfSUZMQV9TVEFUUzY0Citjb25zdCBJRkxBX1ZGX1NUQVRT
X1JYX0RST1BQRUQgPSBfSUZMQV9WRl9TVEFUU19SWF9EUk9QUEVECitjb25zdCBJRkxBX1ZYTEFO
X0dST1VQID0gX0lGTEFfVlhMQU5fR1JPVVAKK2NvbnN0IElGTEFfSU5GT19TTEFWRV9LSU5EID0g
X0lGTEFfSU5GT19TTEFWRV9LSU5ECitjb25zdCBJRkxBX1ZYTEFOX0wyTUlTUyA9IF9JRkxBX1ZY
TEFOX0wyTUlTUworY29uc3QgSUZMQV9CUl9IRUxMT19USU1FID0gX0lGTEFfQlJfSEVMTE9fVElN
RQorY29uc3QgSUZMQV9JUFZMQU5fTU9ERSA9IF9JRkxBX0lQVkxBTl9NT0RFCitjb25zdCBJRkxB
X1ZGX1VOU1BFQyA9IF9JRkxBX1ZGX1VOU1BFQworY29uc3QgSUZMQV9WRl9SU1NfUVVFUllfRU4g
PSBfSUZMQV9WRl9SU1NfUVVFUllfRU4KK2NvbnN0IElGTEFfSU5FVDZfQ09ORiA9IF9JRkxBX0lO
RVQ2X0NPTkYKK2NvbnN0IElGTEFfVkZfTElOS19TVEFURV9ESVNBQkxFID0gX0lGTEFfVkZfTElO
S19TVEFURV9ESVNBQkxFCitjb25zdCBJRkxBX1NUQVRTX1VOU1BFQyA9IF9JRkxBX1NUQVRTX1VO
U1BFQworY29uc3QgSUZMQV9WRl9QT1JUX1VOU1BFQyA9IF9JRkxBX1ZGX1BPUlRfVU5TUEVDCitj
b25zdCBJRkxBX0VWRU5UX1JFQk9PVCA9IF9JRkxBX0VWRU5UX1JFQk9PVAorY29uc3QgSUZMQV9U
VU5fTlVNX0RJU0FCTEVEX1FVRVVFUyA9IF9JRkxBX1RVTl9OVU1fRElTQUJMRURfUVVFVUVTCitj
b25zdCBJRkxBX1ZGX1NUQVRTX01VTFRJQ0FTVCA9IF9JRkxBX1ZGX1NUQVRTX01VTFRJQ0FTVAor
Y29uc3QgSUZMQV9CT05EX1VQREVMQVkgPSBfSUZMQV9CT05EX1VQREVMQVkKK2NvbnN0IElGTEFf
QlJfVENOX1RJTUVSID0gX0lGTEFfQlJfVENOX1RJTUVSCitjb25zdCBJRkxBX0dFTkVWRV9VRFBf
Q1NVTSA9IF9JRkxBX0dFTkVWRV9VRFBfQ1NVTQorY29uc3QgSUZMQV9HRU5FVkVfUE9SVCA9IF9J
RkxBX0dFTkVWRV9QT1JUCitjb25zdCBJRkxBX1dJUkVMRVNTID0gX0lGTEFfV0lSRUxFU1MKK2Nv
bnN0IElGTEFfQlJQT1JUX0ZPUldBUkRfREVMQVlfVElNRVIgPSBfSUZMQV9CUlBPUlRfRk9SV0FS
RF9ERUxBWV9USU1FUgorY29uc3QgSUZMQV9YRlJNX0lGX0lEID0gX0lGTEFfWEZSTV9JRl9JRAor
Y29uc3QgSUZMQV9HVFBfUERQX0hBU0hTSVpFID0gX0lGTEFfR1RQX1BEUF9IQVNIU0laRQorY29u
c3QgSUZMQV9CT05EX0FDVElWRV9TTEFWRSA9IF9JRkxBX0JPTkRfQUNUSVZFX1NMQVZFCitjb25z
dCBJRkxBX0lORk9fS0lORCA9IF9JRkxBX0lORk9fS0lORAorY29uc3QgSUZMQV9WTEFOX1VOU1BF
QyA9IF9JRkxBX1ZMQU5fVU5TUEVDCitjb25zdCBJRkxBX0JSUE9SVF9OTyA9IF9JRkxBX0JSUE9S
VF9OTworY29uc3QgSUZMQV9WUkZfUE9SVF9VTlNQRUMgPSBfSUZMQV9WUkZfUE9SVF9VTlNQRUMK
K2NvbnN0IElGTEFfSU5FVDZfTUNBU1QgPSBfSUZMQV9JTkVUNl9NQ0FTVAorY29uc3QgSUZMQV9I
U1JfVkVSU0lPTiA9IF9JRkxBX0hTUl9WRVJTSU9OCitjb25zdCBJRkxBX0JPTkRfRE9XTkRFTEFZ
ID0gX0lGTEFfQk9ORF9ET1dOREVMQVkKK2NvbnN0IElGTEFfVkZfVFhfUkFURSA9IF9JRkxBX1ZG
X1RYX1JBVEUKK2NvbnN0IElGTEFfQlJQT1JUX0dST1VQX0ZXRF9NQVNLID0gX0lGTEFfQlJQT1JU
X0dST1VQX0ZXRF9NQVNLCitjb25zdCBJRkxBX01BQ1ZMQU5fRkxBR1MgPSBfSUZMQV9NQUNWTEFO
X0ZMQUdTCitjb25zdCBJRkxBX1ZGX1NUQVRTID0gX0lGTEFfVkZfU1RBVFMKK2NvbnN0IElGTEFf
TUFDU0VDX0NJUEhFUl9TVUlURSA9IF9JRkxBX01BQ1NFQ19DSVBIRVJfU1VJVEUKK2NvbnN0IElG
TEFfQlJfTUNBU1RfUVVFUllfVVNFX0lGQUREUiA9IF9JRkxBX0JSX01DQVNUX1FVRVJZX1VTRV9J
RkFERFIKK2NvbnN0IElGTEFfVlhMQU5fTE9DQUw2ID0gX0lGTEFfVlhMQU5fTE9DQUw2Citjb25z
dCBJRkxBX0JSUE9SVF9QUk9YWUFSUF9XSUZJID0gX0lGTEFfQlJQT1JUX1BST1hZQVJQX1dJRkkK
K2NvbnN0IElGTEFfRVZFTlRfTk9USUZZX1BFRVJTID0gX0lGTEFfRVZFTlRfTk9USUZZX1BFRVJT
Citjb25zdCBJRkxBX0FERFJFU1MgPSBfSUZMQV9BRERSRVNTCitjb25zdCBJRkxBX1ZGX0lORk9f
VU5TUEVDID0gX0lGTEFfVkZfSU5GT19VTlNQRUMKK2NvbnN0IElGTEFfQlJfTUNBU1RfSEFTSF9N
QVggPSBfSUZMQV9CUl9NQ0FTVF9IQVNIX01BWAorY29uc3QgSUZMQV9QUFBfREVWX0ZEID0gX0lG
TEFfUFBQX0RFVl9GRAorY29uc3QgSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9UWCA9IF9JRkxB
X1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYCitjb25zdCBJRkxBX1RVTl9VTlNQRUMgPSBfSUZMQV9U
VU5fVU5TUEVDCitjb25zdCBJRkxBX0JSX0hFTExPX1RJTUVSID0gX0lGTEFfQlJfSEVMTE9fVElN
RVIKK2NvbnN0IElGTEFfR0VORVZFX1JFTU9URSA9IF9JRkxBX0dFTkVWRV9SRU1PVEUKK2NvbnN0
IElGTEFfVlhMQU5fTElNSVQgPSBfSUZMQV9WWExBTl9MSU1JVAorY29uc3QgSUZMQV9OVU1fUlhf
UVVFVUVTID0gX0lGTEFfTlVNX1JYX1FVRVVFUworY29uc3QgSUZMQV9CUl9UT1BPTE9HWV9DSEFO
R0UgPSBfSUZMQV9CUl9UT1BPTE9HWV9DSEFOR0UKK2NvbnN0IElGTEFfVkxBTl9QUk9UT0NPTCA9
IF9JRkxBX1ZMQU5fUFJPVE9DT0wKK2NvbnN0IElGTEFfTUFDVkxBTl9NQUNBRERSX0NPVU5UID0g
X0lGTEFfTUFDVkxBTl9NQUNBRERSX0NPVU5UCitjb25zdCBJRkxBX0JSUE9SVF9QQUQgPSBfSUZM
QV9CUlBPUlRfUEFECitjb25zdCBJRkxBX05VTV9UWF9RVUVVRVMgPSBfSUZMQV9OVU1fVFhfUVVF
VUVTCitjb25zdCBJRkxBX0lORk9fU0xBVkVfREFUQSA9IF9JRkxBX0lORk9fU0xBVkVfREFUQQor
Y29uc3QgSUZMQV9HRU5FVkVfSUQgPSBfSUZMQV9HRU5FVkVfSUQKK2NvbnN0IElGTEFfQk9ORF9T
TEFWRV9TVEFURSA9IF9JRkxBX0JPTkRfU0xBVkVfU1RBVEUKK2NvbnN0IElGTEFfQk9ORF9BRF9B
Q1RPUl9TWVNfUFJJTyA9IF9JRkxBX0JPTkRfQURfQUNUT1JfU1lTX1BSSU8KK2NvbnN0IElGTEFf
QlJfUEFEID0gX0lGTEFfQlJfUEFECitjb25zdCBJRkxBX1ZGX1NQT09GQ0hLID0gX0lGTEFfVkZf
U1BPT0ZDSEsKK2NvbnN0IElGTEFfR0VORVZFX1VEUF9aRVJPX0NTVU02X1JYID0gX0lGTEFfR0VO
RVZFX1VEUF9aRVJPX0NTVU02X1JYCitjb25zdCBJRkxBX0JPTkRfVExCX0RZTkFNSUNfTEIgPSBf
SUZMQV9CT05EX1RMQl9EWU5BTUlDX0xCCitjb25zdCBJRkxBX0lORVQ2X0lDTVA2U1RBVFMgPSBf
SUZMQV9JTkVUNl9JQ01QNlNUQVRTCitjb25zdCBJRkxBX1ZYTEFOX0wzTUlTUyA9IF9JRkxBX1ZY
TEFOX0wzTUlTUworY29uc3QgSUZMQV9NQUNTRUNfUE9SVCA9IF9JRkxBX01BQ1NFQ19QT1JUCitj
b25zdCBJRkxBX0JPTkRfQVJQX0lQX1RBUkdFVCA9IF9JRkxBX0JPTkRfQVJQX0lQX1RBUkdFVAor
Y29uc3QgSUZMQV9CUlBPUlRfTUNBU1RfVE9fVUNBU1QgPSBfSUZMQV9CUlBPUlRfTUNBU1RfVE9f
VUNBU1QKK2NvbnN0IElGTEFfSU5FVDZfU1RBVFMgPSBfSUZMQV9JTkVUNl9TVEFUUworY29uc3Qg
SUZMQV9WRl9TVEFUU19SWF9QQUNLRVRTID0gX0lGTEFfVkZfU1RBVFNfUlhfUEFDS0VUUworY29u
c3QgSUZMQV9VTlNQRUMgPSBfSUZMQV9VTlNQRUMKK2NvbnN0IElGTEFfVkZfU1RBVFNfUEFEID0g
X0lGTEFfVkZfU1RBVFNfUEFECitjb25zdCBJRkxBX0JPTkRfQURfQUNUT1JfU1lTVEVNID0gX0lG
TEFfQk9ORF9BRF9BQ1RPUl9TWVNURU0KK2NvbnN0IElGTEFfQlJfTUNBU1RfUVVFUklFUiA9IF9J
RkxBX0JSX01DQVNUX1FVRVJJRVIKK2NvbnN0IElGTEFfQk9ORF9TTEFWRV9BRF9BQ1RPUl9PUEVS
X1BPUlRfU1RBVEUgPSBfSUZMQV9CT05EX1NMQVZFX0FEX0FDVE9SX09QRVJfUE9SVF9TVEFURQor
Y29uc3QgSUZMQV9MSU5LTU9ERSA9IF9JRkxBX0xJTktNT0RFCitjb25zdCBJRkxBX0JSX1NUUF9T
VEFURSA9IF9JRkxBX0JSX1NUUF9TVEFURQorY29uc3QgSUZMQV9HRU5FVkVfVURQX1pFUk9fQ1NV
TTZfVFggPSBfSUZMQV9HRU5FVkVfVURQX1pFUk9fQ1NVTTZfVFgKK2NvbnN0IElGTEFfQk9ORF9Y
TUlUX0hBU0hfUE9MSUNZID0gX0lGTEFfQk9ORF9YTUlUX0hBU0hfUE9MSUNZCitjb25zdCBJRkxB
X0lORk9fREFUQSA9IF9JRkxBX0lORk9fREFUQQorY29uc3QgSUZMQV9WRl9TVEFUU19UWF9QQUNL
RVRTID0gX0lGTEFfVkZfU1RBVFNfVFhfUEFDS0VUUworY29uc3QgSUZMQV9CUlBPUlRfQkNBU1Rf
RkxPT0QgPSBfSUZMQV9CUlBPUlRfQkNBU1RfRkxPT0QKK2NvbnN0IElGTEFfR1RQX0ZEMCA9IF9J
RkxBX0dUUF9GRDAKK2NvbnN0IElGTEFfR1RQX0ZEMSA9IF9JRkxBX0dUUF9GRDEKK2NvbnN0IElG
TEFfQlJQT1JUX0lEID0gX0lGTEFfQlJQT1JUX0lECitjb25zdCBJRkxBX1ZGX01BQyA9IF9JRkxB
X1ZGX01BQworY29uc3QgSUZMQV9WWExBTl9SRU1DU1VNX1RYID0gX0lGTEFfVlhMQU5fUkVNQ1NV
TV9UWAorY29uc3QgSUZMQV9CT05EX0FSUF9WQUxJREFURSA9IF9JRkxBX0JPTkRfQVJQX1ZBTElE
QVRFCitjb25zdCBJRkxBX01JTl9NVFUgPSBfSUZMQV9NSU5fTVRVCitjb25zdCBJRkxBX1ZYTEFO
X1JTQyA9IF9JRkxBX1ZYTEFOX1JTQworY29uc3QgSUZMQV9NQUNTRUNfRU5DT0RJTkdfU0EgPSBf
SUZMQV9NQUNTRUNfRU5DT0RJTkdfU0EKK2NvbnN0IElGTEFfUE9SVF9QUk9GSUxFID0gX0lGTEFf
UE9SVF9QUk9GSUxFCitjb25zdCBJRkxBX1hEUF9GTEFHUyA9IF9JRkxBX1hEUF9GTEFHUworY29u
c3QgSUZMQV9FVkVOVF9CT05ESU5HX09QVElPTlMgPSBfSUZMQV9FVkVOVF9CT05ESU5HX09QVElP
TlMKK2NvbnN0IElGTEFfQlJfVkxBTl9GSUxURVJJTkcgPSBfSUZMQV9CUl9WTEFOX0ZJTFRFUklO
RworY29uc3QgSUZMQV9HUk9VUCA9IF9JRkxBX0dST1VQCitjb25zdCBJRkxBX0JSX1JPT1RfUEFU
SF9DT1NUID0gX0lGTEFfQlJfUk9PVF9QQVRIX0NPU1QKK2NvbnN0IElGTEFfU1RBVFNfTElOS19Y
U1RBVFMgPSBfSUZMQV9TVEFUU19MSU5LX1hTVEFUUworY29uc3QgSUZMQV9UVU5fUEVSU0lTVCA9
IF9JRkxBX1RVTl9QRVJTSVNUCitjb25zdCBJRkxBX0JSUE9SVF9TVEFURSA9IF9JRkxBX0JSUE9S
VF9TVEFURQorY29uc3QgSUZMQV9CUl9NQ0FTVF9TTk9PUElORyA9IF9JRkxBX0JSX01DQVNUX1NO
T09QSU5HCitjb25zdCBJRkxBX0JSX1RPUE9MT0dZX0NIQU5HRV9ERVRFQ1RFRCA9IF9JRkxBX0JS
X1RPUE9MT0dZX0NIQU5HRV9ERVRFQ1RFRAorY29uc3QgSUZMQV9CUlBPUlRfTUVTU0FHRV9BR0Vf
VElNRVIgPSBfSUZMQV9CUlBPUlRfTUVTU0FHRV9BR0VfVElNRVIKK2NvbnN0IElGTEFfRVZFTlQg
PSBfSUZMQV9FVkVOVAorY29uc3QgSUZMQV9CT05EX1BBQ0tFVFNfUEVSX1NMQVZFID0gX0lGTEFf
Qk9ORF9QQUNLRVRTX1BFUl9TTEFWRQorY29uc3QgSUZMQV9JUE9JQl9VTlNQRUMgPSBfSUZMQV9J
UE9JQl9VTlNQRUMKK2NvbnN0IElGTEFfR0VORVZFX1VOU1BFQyA9IF9JRkxBX0dFTkVWRV9VTlNQ
RUMKK2NvbnN0IElGTEFfUEhZU19QT1JUX0lEID0gX0lGTEFfUEhZU19QT1JUX0lECitjb25zdCBJ
RkxBX1ZGX1BPUlQgPSBfSUZMQV9WRl9QT1JUCitjb25zdCBJRkxBX1ZSRl9QT1JUX1RBQkxFID0g
X0lGTEFfVlJGX1BPUlRfVEFCTEUKK2NvbnN0IElGTEFfTUFDVkxBTl9NQUNBRERSX0RBVEEgPSBf
SUZMQV9NQUNWTEFOX01BQ0FERFJfREFUQQorY29uc3QgSUZMQV9NQUNTRUNfRU5DUllQVCA9IF9J
RkxBX01BQ1NFQ19FTkNSWVBUCitjb25zdCBJRkxBX01BQ1NFQ19TQ0kgPSBfSUZMQV9NQUNTRUNf
U0NJCitjb25zdCBJRkxBX1ZYTEFOX1RPUyA9IF9JRkxBX1ZYTEFOX1RPUworY29uc3QgSUZMQV9C
Ul9HUk9VUF9GV0RfTUFTSyA9IF9JRkxBX0JSX0dST1VQX0ZXRF9NQVNLCitjb25zdCBJRkxBX01B
Q1NFQ19FUyA9IF9JRkxBX01BQ1NFQ19FUworY29uc3QgSUZMQV9HU09fTUFYX1NFR1MgPSBfSUZM
QV9HU09fTUFYX1NFR1MKK2NvbnN0IElGTEFfSFNSX1NMQVZFMSA9IF9JRkxBX0hTUl9TTEFWRTEK
K2NvbnN0IElGTEFfWEZSTV9MSU5LID0gX0lGTEFfWEZSTV9MSU5LCitjb25zdCBJRkxBX0xJTktf
TkVUTlNJRCA9IF9JRkxBX0xJTktfTkVUTlNJRAorY29uc3QgSUZMQV9CT05EX1NMQVZFX1VOU1BF
QyA9IF9JRkxBX0JPTkRfU0xBVkVfVU5TUEVDCitjb25zdCBJRkxBX0JPTkRfUkVTRU5EX0lHTVAg
PSBfSUZMQV9CT05EX1JFU0VORF9JR01QCitjb25zdCBJRkxBX0JPTkRfUFJJTUFSWV9SRVNFTEVD
VCA9IF9JRkxBX0JPTkRfUFJJTUFSWV9SRVNFTEVDVAorY29uc3QgSUZMQV9JTkVUNl9GTEFHUyA9
IF9JRkxBX0lORVQ2X0ZMQUdTCitjb25zdCBJRkxBX1ZGX1ZMQU5fTElTVCA9IF9JRkxBX1ZGX1ZM
QU5fTElTVAorY29uc3QgSUZMQV9ORVRfTlNfRkQgPSBfSUZMQV9ORVRfTlNfRkQKK2NvbnN0IElG
TEFfUEhZU19TV0lUQ0hfSUQgPSBfSUZMQV9QSFlTX1NXSVRDSF9JRAorY29uc3QgSUZMQV9UVU5f
UEkgPSBfSUZMQV9UVU5fUEkKK2NvbnN0IElGTEFfSFNSX1NMQVZFMiA9IF9JRkxBX0hTUl9TTEFW
RTIKK2NvbnN0IElGTEFfSVBWTEFOX1VOU1BFQyA9IF9JRkxBX0lQVkxBTl9VTlNQRUMKK2NvbnN0
IElGTEFfVlhMQU5fR1JPVVA2ID0gX0lGTEFfVlhMQU5fR1JPVVA2Citjb25zdCBJRkxBX0lORVRf
VU5TUEVDID0gX0lGTEFfSU5FVF9VTlNQRUMKK2NvbnN0IElGTEFfQlJQT1JUX0xFQVJOSU5HID0g
X0lGTEFfQlJQT1JUX0xFQVJOSU5HCitjb25zdCBJRkxBX1ZYTEFOX1BPUlQgPSBfSUZMQV9WWExB
Tl9QT1JUCitjb25zdCBJRkxBX01BQ1NFQ19WQUxJREFUSU9OID0gX0lGTEFfTUFDU0VDX1ZBTElE
QVRJT04KK2NvbnN0IElGTEFfQk9ORF9BUlBfQUxMX1RBUkdFVFMgPSBfSUZMQV9CT05EX0FSUF9B
TExfVEFSR0VUUworY29uc3QgSUZMQV9WRl9TVEFUU19UWF9CWVRFUyA9IF9JRkxBX1ZGX1NUQVRT
X1RYX0JZVEVTCitjb25zdCBJRkxBX1BIWVNfUE9SVF9OQU1FID0gX0lGTEFfUEhZU19QT1JUX05B
TUUKK2NvbnN0IElGTEFfTkVUX05TX1BJRCA9IF9JRkxBX05FVF9OU19QSUQKK2NvbnN0IElGTEFf
VkZfVkxBTl9JTkZPX1VOU1BFQyA9IF9JRkxBX1ZGX1ZMQU5fSU5GT19VTlNQRUMKK2NvbnN0IElG
TEFfTUFDVkxBTl9NQUNBRERSX01PREUgPSBfSUZMQV9NQUNWTEFOX01BQ0FERFJfTU9ERQorY29u
c3QgSUZMQV9WWExBTl9QT1JUX1JBTkdFID0gX0lGTEFfVlhMQU5fUE9SVF9SQU5HRQorY29uc3Qg
SUZMQV9FVkVOVF9OT05FID0gX0lGTEFfRVZFTlRfTk9ORQorY29uc3QgSUZMQV9CUl9WTEFOX0RF
RkFVTFRfUFZJRCA9IF9JRkxBX0JSX1ZMQU5fREVGQVVMVF9QVklECitjb25zdCBJRkxBX09GRkxP
QURfWFNUQVRTX0NQVV9ISVQgPSBfSUZMQV9PRkZMT0FEX1hTVEFUU19DUFVfSElUCitjb25zdCBJ
RkxBX1ZYTEFOX1RUTF9JTkhFUklUID0gX0lGTEFfVlhMQU5fVFRMX0lOSEVSSVQKK2NvbnN0IElG
TEFfQlJfTUNBU1RfU1RBUlRVUF9RVUVSWV9DTlQgPSBfSUZMQV9CUl9NQ0FTVF9TVEFSVFVQX1FV
RVJZX0NOVAorY29uc3QgSUZMQV9TVEFUU19BRl9TUEVDID0gX0lGTEFfU1RBVFNfQUZfU1BFQwor
Y29uc3QgSUZMQV9UVU5fTVVMVElfUVVFVUUgPSBfSUZMQV9UVU5fTVVMVElfUVVFVUUKK2NvbnN0
IElGTEFfSFNSX1NVUEVSVklTSU9OX0FERFIgPSBfSUZMQV9IU1JfU1VQRVJWSVNJT05fQUREUgor
Y29uc3QgSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9SWCA9IF9JRkxBX1ZYTEFOX1VEUF9aRVJP
X0NTVU02X1JYCitjb25zdCBJRkxBX1BPUlRfVlNJX1RZUEUgPSBfSUZMQV9QT1JUX1ZTSV9UWVBF
Citjb25zdCBJRkxBX1BST1RJTkZPID0gX0lGTEFfUFJPVElORk8KK2NvbnN0IElGTEFfTUFDU0VD
X1NDQiA9IF9JRkxBX01BQ1NFQ19TQ0IKK2NvbnN0IElGTEFfQlJfTkZfQ0FMTF9BUlBUQUJMRVMg
PSBfSUZMQV9CUl9ORl9DQUxMX0FSUFRBQkxFUworY29uc3QgSUZMQV9RRElTQyA9IF9JRkxBX1FE
SVNDCitjb25zdCBJRkxBX0JPTkRfQURfSU5GT19OVU1fUE9SVFMgPSBfSUZMQV9CT05EX0FEX0lO
Rk9fTlVNX1BPUlRTCitjb25zdCBJRkxBX0JPTkRfQVJQX0lOVEVSVkFMID0gX0lGTEFfQk9ORF9B
UlBfSU5URVJWQUwKK2NvbnN0IElGTEFfQ0FSUklFUl9VUF9DT1VOVCA9IF9JRkxBX0NBUlJJRVJf
VVBfQ09VTlQKK2NvbnN0IElGTEFfWERQX1NLQl9QUk9HX0lEID0gX0lGTEFfWERQX1NLQl9QUk9H
X0lECitjb25zdCBJRkxBX0VWRU5UX0ZFQVRVUkVTID0gX0lGTEFfRVZFTlRfRkVBVFVSRVMKK2Nv
bnN0IElGTEFfUFBQX1VOU1BFQyA9IF9JRkxBX1BQUF9VTlNQRUMKK2NvbnN0IElGTEFfVFVOX09X
TkVSID0gX0lGTEFfVFVOX09XTkVSCitjb25zdCBJRkxBX0JPTkRfTFBfSU5URVJWQUwgPSBfSUZM
QV9CT05EX0xQX0lOVEVSVkFMCitjb25zdCBJRkxBX1ZGX0lCX05PREVfR1VJRCA9IF9JRkxBX1ZG
X0lCX05PREVfR1VJRAorY29uc3QgSUZMQV9CT05EX0FEX0lORk9fQUNUT1JfS0VZID0gX0lGTEFf
Qk9ORF9BRF9JTkZPX0FDVE9SX0tFWQorY29uc3QgSUZMQV9WTEFOX0ZMQUdTID0gX0lGTEFfVkxB
Tl9GTEFHUworY29uc3QgSUZMQV9HVFBfUk9MRSA9IF9JRkxBX0dUUF9ST0xFCitjb25zdCBJRkxB
X1ZYTEFOX1BST1hZID0gX0lGTEFfVlhMQU5fUFJPWFkKK2NvbnN0IElGTEFfVlhMQU5fUkVNQ1NV
TV9OT1BBUlRJQUwgPSBfSUZMQV9WWExBTl9SRU1DU1VNX05PUEFSVElBTAorY29uc3QgSUZMQV9N
QUNWTEFOX01BQ0FERFIgPSBfSUZMQV9NQUNWTEFOX01BQ0FERFIKK2NvbnN0IElGTEFfVkxBTl9F
R1JFU1NfUU9TID0gX0lGTEFfVkxBTl9FR1JFU1NfUU9TCitjb25zdCBJRkxBX0JPTkRfQURfU0VM
RUNUID0gX0lGTEFfQk9ORF9BRF9TRUxFQ1QKK2NvbnN0IElGTEFfVlhMQU5fVFRMID0gX0lGTEFf
VlhMQU5fVFRMCitjb25zdCBJRkxBX0lQVkxBTl9GTEFHUyA9IF9JRkxBX0lQVkxBTl9GTEFHUwor
Y29uc3QgSUZMQV9FVkVOVF9JR01QX1JFU0VORCA9IF9JRkxBX0VWRU5UX0lHTVBfUkVTRU5ECitj
b25zdCBJRkxBX1ZMQU5fSUQgPSBfSUZMQV9WTEFOX0lECitjb25zdCBJRkxBX0JPTkRfTlVNX1BF
RVJfTk9USUYgPSBfSUZMQV9CT05EX05VTV9QRUVSX05PVElGCitjb25zdCBJRkxBX1BST1RPX0RP
V04gPSBfSUZMQV9QUk9UT19ET1dOCitjb25zdCBJRkxBX0lGTkFNRSA9IF9JRkxBX0lGTkFNRQor
Y29uc3QgSUZMQV9BRl9TUEVDID0gX0lGTEFfQUZfU1BFQworY29uc3QgSUZMQV9TVEFUU19MSU5L
XzY0ID0gX0lGTEFfU1RBVFNfTElOS182NAorY29uc3QgSUZMQV9CUl9CUklER0VfSUQgPSBfSUZM
QV9CUl9CUklER0VfSUQKK2NvbnN0IElGTEFfQlJQT1JUX1VOSUNBU1RfRkxPT0QgPSBfSUZMQV9C
UlBPUlRfVU5JQ0FTVF9GTE9PRAorY29uc3QgSUZMQV9DQVJSSUVSX0RPV05fQ09VTlQgPSBfSUZM
QV9DQVJSSUVSX0RPV05fQ09VTlQKK2NvbnN0IElGTEFfQlJfRk9SV0FSRF9ERUxBWSA9IF9JRkxB
X0JSX0ZPUldBUkRfREVMQVkKK2NvbnN0IElGTEFfWERQX0ZEID0gX0lGTEFfWERQX0ZECitjb25z
dCBJRkxBX0JSUE9SVF9IT0xEX1RJTUVSID0gX0lGTEFfQlJQT1JUX0hPTERfVElNRVIKK2NvbnN0
IElGTEFfSU5FVDZfQ0FDSEVJTkZPID0gX0lGTEFfSU5FVDZfQ0FDSEVJTkZPCitjb25zdCBJRkxB
X1ZGX1ZMQU4gPSBfSUZMQV9WRl9WTEFOCitjb25zdCBJRkxBX0JSX01DQVNUX0hBU0hfRUxBU1RJ
Q0lUWSA9IF9JRkxBX0JSX01DQVNUX0hBU0hfRUxBU1RJQ0lUWQorY29uc3QgSUZMQV9NQVhfTVRV
ID0gX0lGTEFfTUFYX01UVQorY29uc3QgSUZMQV9JRkFMSUFTID0gX0lGTEFfSUZBTElBUworY29u
c3QgSUZMQV9WRl9UUlVTVCA9IF9JRkxBX1ZGX1RSVVNUCitjb25zdCBJRkxBX1ZYTEFOX0xJTksg
PSBfSUZMQV9WWExBTl9MSU5LCitjb25zdCBJRkxBX1ZYTEFOX0FHRUlORyA9IF9JRkxBX1ZYTEFO
X0FHRUlORworY29uc3QgSUZMQV9YRFBfUFJPR19JRCA9IF9JRkxBX1hEUF9QUk9HX0lECitjb25z
dCBJRkxBX0lORk9fWFNUQVRTID0gX0lGTEFfSU5GT19YU1RBVFMKK2NvbnN0IElGTEFfQlJfQUdF
SU5HX1RJTUUgPSBfSUZMQV9CUl9BR0VJTkdfVElNRQorY29uc3QgSUZMQV9TVEFUU19MSU5LX1hT
VEFUU19TTEFWRSA9IF9JRkxBX1NUQVRTX0xJTktfWFNUQVRTX1NMQVZFCitjb25zdCBJRkxBX1ZY
TEFOX1VEUF9DU1VNID0gX0lGTEFfVlhMQU5fVURQX0NTVU0KK2NvbnN0IElGTEFfUk1ORVRfRkxB
R1MgPSBfSUZMQV9STU5FVF9GTEFHUworY29uc3QgSUZMQV9QT1JUX1NFTEYgPSBfSUZMQV9QT1JU
X1NFTEYKK2NvbnN0IElGTEFfQlJfR1JPVVBfQUREUiA9IF9JRkxBX0JSX0dST1VQX0FERFIKK2Nv
bnN0IElGTEFfVlhMQU5fVU5TUEVDID0gX0lGTEFfVlhMQU5fVU5TUEVDCitjb25zdCBJRkxBX0JP
TkRfTUlJTU9OID0gX0lGTEFfQk9ORF9NSUlNT04KK2NvbnN0IElGTEFfSU5FVF9DT05GID0gX0lG
TEFfSU5FVF9DT05GCitjb25zdCBJRkxBX0JSUE9SVF9QUk9URUNUID0gX0lGTEFfQlJQT1JUX1BS
T1RFQ1QKK2NvbnN0IElGTEFfTUFDVkxBTl9VTlNQRUMgPSBfSUZMQV9NQUNWTEFOX1VOU1BFQwor
Y29uc3QgSUZMQV9CT05EX1VOU1BFQyA9IF9JRkxBX0JPTkRfVU5TUEVDCitjb25zdCBJRkxBX0dF
TkVWRV9MQUJFTCA9IF9JRkxBX0dFTkVWRV9MQUJFTAorY29uc3QgSUZMQV9NQUNTRUNfSUNWX0xF
TiA9IF9JRkxBX01BQ1NFQ19JQ1ZfTEVOCitjb25zdCBJRkxBX1ZYTEFOX0xFQVJOSU5HID0gX0lG
TEFfVlhMQU5fTEVBUk5JTkcKK2NvbnN0IElGRl9PTkVfUVVFVUUgPSBfSUZGX09ORV9RVUVVRQor
Y29uc3QgSUZGX1BPSU5UT1BPSU5UID0gX0lGRl9QT0lOVE9QT0lOVAorY29uc3QgSUZGX1VQID0g
X0lGRl9VUAorY29uc3QgSUZGX1RBUCA9IF9JRkZfVEFQCitjb25zdCBJRkZfTkFQSV9GUkFHUyA9
IF9JRkZfTkFQSV9GUkFHUworY29uc3QgSUZGX0FMTE1VTFRJID0gX0lGRl9BTExNVUxUSQorY29u
c3QgSUZGX0FVVE9NRURJQSA9IF9JRkZfQVVUT01FRElBCitjb25zdCBJRkZfU0xBVkUgPSBfSUZG
X1NMQVZFCitjb25zdCBJRkZfTUFTVEVSID0gX0lGRl9NQVNURVIKK2NvbnN0IElGRl9OT1RSQUlM
RVJTID0gX0lGRl9OT1RSQUlMRVJTCitjb25zdCBJRkZfVFVOID0gX0lGRl9UVU4KK2NvbnN0IElG
Rl9OT0ZJTFRFUiA9IF9JRkZfTk9GSUxURVIKK2NvbnN0IElGRl9ERUJVRyA9IF9JRkZfREVCVUcK
K2NvbnN0IElGRl9QRVJTSVNUID0gX0lGRl9QRVJTSVNUCitjb25zdCBJRkZfVk5FVF9IRFIgPSBf
SUZGX1ZORVRfSERSCitjb25zdCBJRkZfQVRUQUNIX1FVRVVFID0gX0lGRl9BVFRBQ0hfUVVFVUUK
K2NvbnN0IElGRl9EWU5BTUlDID0gX0lGRl9EWU5BTUlDCitjb25zdCBJRkZfTE9PUEJBQ0sgPSBf
SUZGX0xPT1BCQUNLCitjb25zdCBJRkZfTVVMVElDQVNUID0gX0lGRl9NVUxUSUNBU1QKK2NvbnN0
IElGRl9OT0FSUCA9IF9JRkZfTk9BUlAKK2NvbnN0IElGRl9ERVRBQ0hfUVVFVUUgPSBfSUZGX0RF
VEFDSF9RVUVVRQorY29uc3QgSUZGX1BPUlRTRUwgPSBfSUZGX1BPUlRTRUwKK2NvbnN0IElGRl9O
T19QSSA9IF9JRkZfTk9fUEkKK2NvbnN0IElGRl9OQVBJID0gX0lGRl9OQVBJCitjb25zdCBJRkZf
QlJPQURDQVNUID0gX0lGRl9CUk9BRENBU1QKK2NvbnN0IElGRl9UVU5fRVhDTCA9IF9JRkZfVFVO
X0VYQ0wKK2NvbnN0IElGRl9NVUxUSV9RVUVVRSA9IF9JRkZfTVVMVElfUVVFVUUKK2NvbnN0IElG
Rl9QUk9NSVNDID0gX0lGRl9QUk9NSVNDCitjb25zdCBJRkZfUlVOTklORyA9IF9JRkZfUlVOTklO
RworY29uc3QgSUZOQU1TSVogPSBfSUZOQU1TSVoKK2NvbnN0IFNJT0NTSUZCUiA9IF9TSU9DU0lG
QlIKK2NvbnN0IFNJT0NHSUZEU1RBRERSID0gX1NJT0NHSUZEU1RBRERSCitjb25zdCBTSU9DR1JB
UlAgPSBfU0lPQ0dSQVJQCitjb25zdCBTSU9DR0lGTUVUUklDID0gX1NJT0NHSUZNRVRSSUMKK2Nv
bnN0IFNJT0NHSUZQRkxBR1MgPSBfU0lPQ0dJRlBGTEFHUworY29uc3QgU0lPQ0dTVEFNUE5TID0g
X1NJT0NHU1RBTVBOUworY29uc3QgU0lPQ0RFTE1VTFRJID0gX1NJT0NERUxNVUxUSQorY29uc3Qg
U0lPQ0dJRkJSID0gX1NJT0NHSUZCUgorY29uc3QgU0lPQ0RFTERMQ0kgPSBfU0lPQ0RFTERMQ0kK
K2NvbnN0IFNJT0NHQVJQID0gX1NJT0NHQVJQCitjb25zdCBTSU9DR0lGSFdBRERSID0gX1NJT0NH
SUZIV0FERFIKK2NvbnN0IFNJT0NTSUZCUkRBRERSID0gX1NJT0NTSUZCUkRBRERSCitjb25zdCBT
SU9DU0lGTVRVID0gX1NJT0NTSUZNVFUKK2NvbnN0IFNJT0NHSUZDT05GID0gX1NJT0NHSUZDT05G
Citjb25zdCBTSU9DR0lGTkVUTUFTSyA9IF9TSU9DR0lGTkVUTUFTSworY29uc3QgU0lPQ0RFTFJU
ID0gX1NJT0NERUxSVAorY29uc3QgU0lPQ0FERFJUID0gX1NJT0NBRERSVAorY29uc3QgU0lPQ0dJ
RkZMQUdTID0gX1NJT0NHSUZGTEFHUworY29uc3QgU0lPQ0dJRk1BUCA9IF9TSU9DR0lGTUFQCitj
b25zdCBTSU9DU0FSUCA9IF9TSU9DU0FSUAorY29uc3QgU0lPQ0dJRk1FTSA9IF9TSU9DR0lGTUVN
Citjb25zdCBTSU9DU0lGTElOSyA9IF9TSU9DU0lGTElOSworY29uc3QgU0lPQ1BST1RPUFJJVkFU
RSA9IF9TSU9DUFJPVE9QUklWQVRFCitjb25zdCBTSU9DU0lGTkFNRSA9IF9TSU9DU0lGTkFNRQor
Y29uc3QgU0lPQ0dJRlNMQVZFID0gX1NJT0NHSUZTTEFWRQorY29uc3QgU0lPQ0dTVEFNUCA9IF9T
SU9DR1NUQU1QCitjb25zdCBTSU9DR0lGTkFNRSA9IF9TSU9DR0lGTkFNRQorY29uc3QgU0lPQ0dJ
Rk1UVSA9IF9TSU9DR0lGTVRVCitjb25zdCBTSU9DRElGQUREUiA9IF9TSU9DRElGQUREUgorY29u
c3QgU0lPQ1NJRlRYUUxFTiA9IF9TSU9DU0lGVFhRTEVOCitjb25zdCBTSU9DRFJBUlAgPSBfU0lP
Q0RSQVJQCitjb25zdCBTSU9DREFSUCA9IF9TSU9DREFSUAorY29uc3QgU0lPQ1NJRkZMQUdTID0g
X1NJT0NTSUZGTEFHUworY29uc3QgU0lPQ0dJRkNPVU5UID0gX1NJT0NHSUZDT1VOVAorY29uc3Qg
U0lPQ0dJRkVOQ0FQID0gX1NJT0NHSUZFTkNBUAorY29uc3QgU0lPQ0dJRlRYUUxFTiA9IF9TSU9D
R0lGVFhRTEVOCitjb25zdCBTSU9DU0lGQUREUiA9IF9TSU9DU0lGQUREUgorY29uc3QgU0lPQ1NJ
Rk1BUCA9IF9TSU9DU0lGTUFQCitjb25zdCBTSU9DR0lGQUREUiA9IF9TSU9DR0lGQUREUgorY29u
c3QgU0lPQ1NJRk5FVE1BU0sgPSBfU0lPQ1NJRk5FVE1BU0sKK2NvbnN0IFNJT0NSVE1TRyA9IF9T
SU9DUlRNU0cKK2NvbnN0IFNJT0NTSUZTTEFWRSA9IF9TSU9DU0lGU0xBVkUKK2NvbnN0IFNJT0NT
SUZNRU0gPSBfU0lPQ1NJRk1FTQorY29uc3QgU0lPQ0FUTUFSSyA9IF9TSU9DQVRNQVJLCitjb25z
dCBTSU9DR0lGQlJEQUREUiA9IF9TSU9DR0lGQlJEQUREUgorY29uc3QgU0lPQ1NJRkhXQUREUiA9
IF9TSU9DU0lGSFdBRERSCitjb25zdCBTSU9DREVWUFJJVkFURSA9IF9TSU9DREVWUFJJVkFURQor
Y29uc3QgU0lPQ1NJRkRTVEFERFIgPSBfU0lPQ1NJRkRTVEFERFIKK2NvbnN0IFNJT0NTSUZIV0JS
T0FEQ0FTVCA9IF9TSU9DU0lGSFdCUk9BRENBU1QKK2NvbnN0IFNJT0NHSUZJTkRFWCA9IF9TSU9D
R0lGSU5ERVgKK2NvbnN0IFNJT0NTUkFSUCA9IF9TSU9DU1JBUlAKK2NvbnN0IFNJT0NHUEdSUCA9
IF9TSU9DR1BHUlAKK2NvbnN0IFNJT0NBRERETENJID0gX1NJT0NBRERETENJCitjb25zdCBTSU9D
U0lGTUVUUklDID0gX1NJT0NTSUZNRVRSSUMKK2NvbnN0IFNJT0NTUEdSUCA9IF9TSU9DU1BHUlAK
K2NvbnN0IFNJT0NTSUZQRkxBR1MgPSBfU0lPQ1NJRlBGTEFHUworY29uc3QgU0lPQ1NJRkVOQ0FQ
ID0gX1NJT0NTSUZFTkNBUAorY29uc3QgU0lPQ0FERE1VTFRJID0gX1NJT0NBRERNVUxUSQordHlw
ZSBJZkFkZHJtc2cgc3RydWN0IHsgRmFtaWx5IHVpbnQ4OyBQcmVmaXhsZW4gdWludDg7IEZsYWdz
IHVpbnQ4OyBTY29wZSB1aW50ODsgSW5kZXggdWludDMyOyB9Cit0eXBlIFJ0QXR0ciBzdHJ1Y3Qg
eyBMZW4gdWludDE2OyBUeXBlIHVpbnQxNjsgfQordHlwZSBJbmV0NFBrdGluZm8gc3RydWN0IHsg
SWZpbmRleCBpbnQzMjsgU3BlY19kc3QgWzRdYnl0ZTsgQWRkciBbNF1ieXRlOyB9Cit0eXBlIElu
ZXQ2UGt0aW5mbyBzdHJ1Y3QgeyBBZGRyIFsxNl1ieXRlOyBJZmluZGV4IHVpbnQzMjsgfQordHlw
ZSBUZXJtaW9zIHN0cnVjdCB7IElmbGFnIHVpbnQzMjsgT2ZsYWcgdWludDMyOyBDZmxhZyB1aW50
MzI7IExmbGFnIHVpbnQzMjsgTGluZSB1aW50ODsgQ2MgWzMxKzFddWludDg7IElzcGVlZCB1aW50
MzI7IE9zcGVlZCB1aW50MzI7IH0KK2NvbnN0IElHTkJSSyAgPSBfSUdOQlJLIAorY29uc3QgQlJL
SU5UICA9IF9CUktJTlQgCitjb25zdCBJR05QQVIgID0gX0lHTlBBUiAKK2NvbnN0IFBBUk1SSyAg
PSBfUEFSTVJLIAorY29uc3QgSU5QQ0sgID0gX0lOUENLIAorY29uc3QgSVNUUklQICA9IF9JU1RS
SVAgCitjb25zdCBJTkxDUiAgPSBfSU5MQ1IgCitjb25zdCBJR05DUiAgPSBfSUdOQ1IgCitjb25z
dCBJQ1JOTCAgPSBfSUNSTkwgCitjb25zdCBJVUNMQyAgPSBfSVVDTEMgCitjb25zdCBJWE9OICA9
IF9JWE9OIAorY29uc3QgSVhBTlkgID0gX0lYQU5ZIAorY29uc3QgSVhPRkYgID0gX0lYT0ZGIAor
Y29uc3QgSU1BWEJFTCAgPSBfSU1BWEJFTCAKK2NvbnN0IElVVEY4ICA9IF9JVVRGOCAKK2NvbnN0
IE9QT1NUICA9IF9PUE9TVCAKK2NvbnN0IE9MQ1VDICA9IF9PTENVQyAKK2NvbnN0IE9OTENSICA9
IF9PTkxDUiAKK2NvbnN0IE9DUk5MICA9IF9PQ1JOTCAKK2NvbnN0IE9OT0NSICA9IF9PTk9DUiAK
K2NvbnN0IE9OTFJFVCAgPSBfT05MUkVUIAorY29uc3QgT0ZJTEwgID0gX09GSUxMIAorY29uc3Qg
T0ZERUwgID0gX09GREVMIAorY29uc3QgTkxETFkgID0gX05MRExZIAorY29uc3QgTkwwICA9IF9O
TDAgCitjb25zdCBOTDEgID0gX05MMSAKK2NvbnN0IENSRExZICA9IF9DUkRMWSAKK2NvbnN0IENS
MCAgPSBfQ1IwIAorY29uc3QgQ1IxICA9IF9DUjEgCitjb25zdCBDUjIgID0gX0NSMiAKK2NvbnN0
IENSMyAgPSBfQ1IzIAorY29uc3QgQ1M1ICA9IF9DUzUgCitjb25zdCBDUzYgID0gX0NTNiAKK2Nv
bnN0IENTNyAgPSBfQ1M3IAorY29uc3QgQ1M4ICA9IF9DUzggCitjb25zdCBUQUJETFkgID0gX1RB
QkRMWSAKK2NvbnN0IEJTRExZICA9IF9CU0RMWSAKK2NvbnN0IFZURExZICA9IF9WVERMWSAKK2Nv
bnN0IEZGRExZICA9IF9GRkRMWSAKK2NvbnN0IENCQVVEICA9IF9DQkFVRCAKK2NvbnN0IENCQVVE
RVggID0gX0NCQVVERVggCitjb25zdCBDU0laRSAgPSBfQ1NJWkUgCitjb25zdCBDU1RPUEIgID0g
X0NTVE9QQiAKK2NvbnN0IENSRUFEICA9IF9DUkVBRCAKK2NvbnN0IFBBUkVOQiAgPSBfUEFSRU5C
IAorY29uc3QgUEFST0REICA9IF9QQVJPREQgCitjb25zdCBIVVBDTCAgPSBfSFVQQ0wgCitjb25z
dCBDTE9DQUwgID0gX0NMT0NBTCAKK2NvbnN0IENJQkFVRCAgPSBfQ0lCQVVEIAorY29uc3QgQ01T
UEFSICA9IF9DTVNQQVIgCitjb25zdCBDUlRTQ1RTICA9IF9DUlRTQ1RTIAorY29uc3QgSVNJRyAg
PSBfSVNJRyAKK2NvbnN0IElDQU5PTiAgPSBfSUNBTk9OIAorY29uc3QgWENBU0UgID0gX1hDQVNF
IAorY29uc3QgRUNITyAgPSBfRUNITyAKK2NvbnN0IEVDSE9FICA9IF9FQ0hPRSAKK2NvbnN0IEVD
SE9LICA9IF9FQ0hPSyAKK2NvbnN0IEVDSE9OTCAgPSBfRUNIT05MIAorY29uc3QgRUNIT0NUTCAg
PSBfRUNIT0NUTCAKK2NvbnN0IEVDSE9QUlQgID0gX0VDSE9QUlQgCitjb25zdCBFQ0hPS0UgID0g
X0VDSE9LRSAKK2NvbnN0IEZMVVNITyAgPSBfRkxVU0hPIAorY29uc3QgTk9GTFNIICA9IF9OT0ZM
U0ggCitjb25zdCBUT1NUT1AgID0gX1RPU1RPUCAKK2NvbnN0IFBFTkRJTiAgPSBfUEVORElOIAor
Y29uc3QgSUVYVEVOICA9IF9JRVhURU4gCitjb25zdCBWSU5UUiAgPSBfVklOVFIgCitjb25zdCBW
UVVJVCAgPSBfVlFVSVQgCitjb25zdCBWRVJBU0UgID0gX1ZFUkFTRSAKK2NvbnN0IFZLSUxMICA9
IF9WS0lMTCAKK2NvbnN0IFZFT0YgID0gX1ZFT0YgCitjb25zdCBWTUlOICA9IF9WTUlOIAorY29u
c3QgVkVPTCAgPSBfVkVPTCAKK2NvbnN0IFZUSU1FICA9IF9WVElNRSAKK2NvbnN0IFZFT0wyICA9
IF9WRU9MMiAKK2NvbnN0IFZTVEFSVCAgPSBfVlNUQVJUIAorY29uc3QgVlNUT1AgID0gX1ZTVE9Q
IAorY29uc3QgVlNVU1AgID0gX1ZTVVNQIAorY29uc3QgVkxORVhUICA9IF9WTE5FWFQgCitjb25z
dCBWV0VSQVNFICA9IF9WV0VSQVNFIAorY29uc3QgVlJFUFJJTlQgID0gX1ZSRVBSSU5UIAorY29u
c3QgVkRJU0NBUkQgID0gX1ZESVNDQVJEIAorY29uc3QgVENTQU5PVyAgPSBfVENTQU5PVyAKK2Nv
bnN0IFRDU0FEUkFJTiAgPSBfVENTQURSQUlOIAorY29uc3QgVENTQUZMVVNIICA9IF9UQ1NBRkxV
U0ggCitjb25zdCBUQ0lGTFVTSCAgPSBfVENJRkxVU0ggCitjb25zdCBUQ09GTFVTSCAgPSBfVENP
RkxVU0ggCitjb25zdCBUQ0lPRkxVU0ggID0gX1RDSU9GTFVTSCAKK2NvbnN0IFRDT09GRiAgPSBf
VENPT0ZGIAorY29uc3QgVENPT04gID0gX1RDT09OIAorY29uc3QgVENJT0ZGICA9IF9UQ0lPRkYg
Citjb25zdCBUQ0lPTiAgPSBfVENJT04gCitjb25zdCBCMCAgPSBfQjAgCitjb25zdCBCNTAgID0g
X0I1MCAKK2NvbnN0IEI3NSAgPSBfQjc1IAorY29uc3QgQjExMCAgPSBfQjExMCAKK2NvbnN0IEIx
MzQgID0gX0IxMzQgCitjb25zdCBCMTUwICA9IF9CMTUwIAorY29uc3QgQjIwMCAgPSBfQjIwMCAK
K2NvbnN0IEIzMDAgID0gX0IzMDAgCitjb25zdCBCNjAwICA9IF9CNjAwIAorY29uc3QgQjEyMDAg
ID0gX0IxMjAwIAorY29uc3QgQjE4MDAgID0gX0IxODAwIAorY29uc3QgQjI0MDAgID0gX0IyNDAw
IAorY29uc3QgQjQ4MDAgID0gX0I0ODAwIAorY29uc3QgQjk2MDAgID0gX0I5NjAwIAorY29uc3Qg
QjE5MjAwICA9IF9CMTkyMDAgCitjb25zdCBCMzg0MDAgID0gX0IzODQwMCAKK2NvbnN0IEI1NzYw
MCAgPSBfQjU3NjAwIAorY29uc3QgQjExNTIwMCAgPSBfQjExNTIwMCAKK2NvbnN0IEIyMzA0MDAg
ID0gX0IyMzA0MDAgCitjb25zdCBCNDYwODAwICA9IF9CNDYwODAwIAorY29uc3QgQjUwMDAwMCAg
PSBfQjUwMDAwMCAKK2NvbnN0IEI1NzYwMDAgID0gX0I1NzYwMDAgCitjb25zdCBCOTIxNjAwICA9
IF9COTIxNjAwIAorY29uc3QgQjEwMDAwMDAgID0gX0IxMDAwMDAwIAorY29uc3QgQjExNTIwMDAg
ID0gX0IxMTUyMDAwIAorY29uc3QgQjE1MDAwMDAgID0gX0IxNTAwMDAwIAorY29uc3QgQjIwMDAw
MDAgID0gX0IyMDAwMDAwIAorY29uc3QgQjI1MDAwMDAgID0gX0IyNTAwMDAwIAorY29uc3QgQjMw
MDAwMDAgID0gX0IzMDAwMDAwIAorY29uc3QgQjM1MDAwMDAgID0gX0IzNTAwMDAwIAorY29uc3Qg
QjQwMDAwMDAgID0gX0I0MDAwMDAwIAorY29uc3QgTU5UX0RFVEFDSCA9IF9NTlRfREVUQUNICitj
b25zdCBNTlRfRVhQSVJFID0gX01OVF9FWFBJUkUKK2NvbnN0IE1OVF9GT1JDRSA9IF9NTlRfRk9S
Q0UKK2NvbnN0IE1TX0RJUlNZTkMgPSBfTVNfRElSU1lOQworY29uc3QgTVNfUkRPTkxZID0gX01T
X1JET05MWQorY29uc3QgTVNfU1RSSUNUQVRJTUUgPSBfTVNfU1RSSUNUQVRJTUUKK2NvbnN0IE1T
X1JNVF9NQVNLID0gX01TX1JNVF9NQVNLCitjb25zdCBNU19OT0RJUkFUSU1FID0gX01TX05PRElS
QVRJTUUKK2NvbnN0IE1TX05PREVWID0gX01TX05PREVWCitjb25zdCBNU19LRVJOTU9VTlQgPSBf
TVNfS0VSTk1PVU5UCitjb25zdCBNU19NT1ZFID0gX01TX01PVkUKK2NvbnN0IE1TX01HQ19WQUwg
PSBfTVNfTUdDX1ZBTAorY29uc3QgTVNfUFJJVkFURSA9IF9NU19QUklWQVRFCitjb25zdCBNU19C
SU5EID0gX01TX0JJTkQKK2NvbnN0IE1TX1JFTEFUSU1FID0gX01TX1JFTEFUSU1FCitjb25zdCBN
U19OT1NVSUQgPSBfTVNfTk9TVUlECitjb25zdCBNU19CT1JOID0gX01TX0JPUk4KK2NvbnN0IE1T
X0xBWllUSU1FID0gX01TX0xBWllUSU1FCitjb25zdCBNU19OT0FUSU1FID0gX01TX05PQVRJTUUK
K2NvbnN0IE1TX05PU0VDID0gX01TX05PU0VDCitjb25zdCBNU19JTlZBTElEQVRFID0gX01TX0lO
VkFMSURBVEUKK2NvbnN0IE1TX1JFTU9VTlQgPSBfTVNfUkVNT1VOVAorY29uc3QgTVNfTk9SRU1P
VEVMT0NLID0gX01TX05PUkVNT1RFTE9DSworY29uc3QgTVNfU1VCTU9VTlQgPSBfTVNfU1VCTU9V
TlQKK2NvbnN0IE1TX1NZTkNIUk9OT1VTID0gX01TX1NZTkNIUk9OT1VTCitjb25zdCBNU19BQ1RJ
VkUgPSBfTVNfQUNUSVZFCitjb25zdCBNU19TSEFSRUQgPSBfTVNfU0hBUkVECitjb25zdCBNU19W
RVJCT1NFID0gX01TX1ZFUkJPU0UKK2NvbnN0IE1TX1BPU0lYQUNMID0gX01TX1BPU0lYQUNMCitj
b25zdCBNU19BU1lOQyA9IF9NU19BU1lOQworY29uc3QgTVNfTUFORExPQ0sgPSBfTVNfTUFORExP
Q0sKK2NvbnN0IE1TX1NMQVZFID0gX01TX1NMQVZFCitjb25zdCBNU19JX1ZFUlNJT04gPSBfTVNf
SV9WRVJTSU9OCitjb25zdCBNU19OT0VYRUMgPSBfTVNfTk9FWEVDCitjb25zdCBNU19SRUMgPSBf
TVNfUkVDCitjb25zdCBNU19OT1VTRVIgPSBfTVNfTk9VU0VSCitjb25zdCBNU19VTkJJTkRBQkxF
ID0gX01TX1VOQklOREFCTEUKK2NvbnN0IE1TX1NJTEVOVCA9IF9NU19TSUxFTlQKK2NvbnN0IE1T
X1NZTkMgPSBfTVNfU1lOQworY29uc3QgTVNfTUdDX01TSyA9IF9NU19NR0NfTVNLCitjb25zdCBG
QUxMT0NfRkxfVU5TSEFSRV9SQU5HRSA9IF9GQUxMT0NfRkxfVU5TSEFSRV9SQU5HRQorY29uc3Qg
RkFMTE9DX0ZMX1BVTkNIX0hPTEUgPSBfRkFMTE9DX0ZMX1BVTkNIX0hPTEUKK2NvbnN0IEZBTExP
Q19GTF9aRVJPX1JBTkdFID0gX0ZBTExPQ19GTF9aRVJPX1JBTkdFCitjb25zdCBGQUxMT0NfRkxf
SU5TRVJUX1JBTkdFID0gX0ZBTExPQ19GTF9JTlNFUlRfUkFOR0UKK2NvbnN0IEZBTExPQ19GTF9D
T0xMQVBTRV9SQU5HRSA9IF9GQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UKK2NvbnN0IEZBTExPQ19G
TF9LRUVQX1NJWkUgPSBfRkFMTE9DX0ZMX0tFRVBfU0laRQorY29uc3QgRkFMTE9DX0ZMX05PX0hJ
REVfU1RBTEUgPSBfRkFMTE9DX0ZMX05PX0hJREVfU1RBTEUKK3R5cGUgU3RhdGZzX3Qgc3RydWN0
IHsgVHlwZSBpbnQ2NDsgQnNpemUgaW50NjQ7IEJsb2NrcyB1aW50NjQ7IEJmcmVlIHVpbnQ2NDsg
QmF2YWlsIHVpbnQ2NDsgRmlsZXMgdWludDY0OyBGZnJlZSB1aW50NjQ7IEZzaWQgX19fZnNpZF90
OyBOYW1lbGVuIGludDY0OyBGcnNpemUgaW50NjQ7IEZsYWdzIGludDY0OyBTcGFyZSBbMysxXWlu
dDY0OyB9Cit0eXBlIFRpbWV4IHN0cnVjdCB7IE1vZGVzIHVpbnQzMjsgT2Zmc2V0IGludDY0OyBG
cmVxIGludDY0OyBNYXhlcnJvciBpbnQ2NDsgRXN0ZXJyb3IgaW50NjQ7IFN0YXR1cyBpbnQzMjsg
Q29uc3RhbnQgaW50NjQ7IFByZWNpc2lvbiBpbnQ2NDsgVG9sZXJhbmNlIGludDY0OyBUaW1lIFRp
bWV2YWw7IFRpY2sgaW50NjQ7IFBwc2ZyZXEgaW50NjQ7IEppdHRlciBpbnQ2NDsgU2hpZnQgaW50
MzI7IFN0YWJpbCBpbnQ2NDsgSml0Y250IGludDY0OyBDYWxjbnQgaW50NjQ7IEVycmNudCBpbnQ2
NDsgU3RiY250IGludDY0OyBUYWkgaW50MzI7IEdvZHVtcF8wIGludDMyOyBHb2R1bXBfMSBpbnQz
MjsgR29kdW1wXzIgaW50MzI7IEdvZHVtcF8zIGludDMyOyBHb2R1bXBfNCBpbnQzMjsgR29kdW1w
XzUgaW50MzI7IEdvZHVtcF82IGludDMyOyBHb2R1bXBfNyBpbnQzMjsgR29kdW1wXzggaW50MzI7
IEdvZHVtcF85IGludDMyOyBHb2R1bXBfMTAgaW50MzI7IH0KK3R5cGUgUmxpbWl0IHN0cnVjdCB7
IEN1ciB1aW50NjQ7IE1heCB1aW50NjQ7IH0KK2NvbnN0IFJMSU1JVF9DT1JFID0gX1JMSU1JVF9D
T1JFCitjb25zdCBSTElNSVRfQVMgPSBfUkxJTUlUX0FTCitjb25zdCBSTElNSVRfU1RBQ0sgPSBf
UkxJTUlUX1NUQUNLCitjb25zdCBSTElNSVRfTk9GSUxFID0gX1JMSU1JVF9OT0ZJTEUKK2NvbnN0
IFJMSU1JVF9EQVRBID0gX1JMSU1JVF9EQVRBCitjb25zdCBSTElNSVRfQ1BVID0gX1JMSU1JVF9D
UFUKK2NvbnN0IFJMSU1JVF9GU0laRSA9IF9STElNSVRfRlNJWkUKK2NvbnN0IFJMSU1fSU5GSU5J
VFkgPSBfUkxJTV9JTkZJTklUWQorY29uc3QgUkxJTV9TQVZFRF9DVVIgPSBfUkxJTV9TQVZFRF9D
VVIKK2NvbnN0IFJMSU1fU0FWRURfTUFYID0gX1JMSU1fU0FWRURfTUFYCit0eXBlIFN5c2luZm9f
dCBzdHJ1Y3QgeyBVcHRpbWUgaW50NjQ7IExvYWRzIFsyKzFddWludDY0OyBUb3RhbHJhbSB1aW50
NjQ7IEZyZWVyYW0gdWludDY0OyBTaGFyZWRyYW0gdWludDY0OyBCdWZmZXJyYW0gdWludDY0OyBU
b3RhbHN3YXAgdWludDY0OyBGcmVlc3dhcCB1aW50NjQ7IFByb2NzIHVpbnQxNjsgcGFkIHVpbnQx
NjsgVG90YWxoaWdoIHVpbnQ2NDsgRnJlZWhpZ2ggdWludDY0OyBVbml0IHVpbnQzMjsgX2YgWzBd
aW50ODsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0KK3R5cGUgVXN0YXRfdCBzdHJ1Y3QgeyBUZnJl
ZSBpbnQzMjsgVGlub2UgdWludDY0OyBGbmFtZSBbNSsxXWludDg7IEZwYWNrIFs1KzFdaW50ODsg
fQordHlwZSBVdGltYnVmIHN0cnVjdCB7IEFjdGltZSBpbnQ2NDsgTW9kdGltZSBpbnQ2NDsgfQor
Y29uc3QgTE9DS19XUklURSA9IF9MT0NLX1dSSVRFCitjb25zdCBMT0NLX1JXID0gX0xPQ0tfUlcK
K2NvbnN0IExPQ0tfU0ggPSBfTE9DS19TSAorY29uc3QgTE9DS19SRUFEID0gX0xPQ0tfUkVBRAor
Y29uc3QgTE9DS19NQU5EID0gX0xPQ0tfTUFORAorY29uc3QgTE9DS19OQiA9IF9MT0NLX05CCitj
b25zdCBMT0NLX0VYID0gX0xPQ0tfRVgKK2NvbnN0IExPQ0tfVU4gPSBfTE9DS19VTgorY29uc3Qg
UFJJT19QR1JQID0gX1BSSU9fUEdSUAorY29uc3QgUFJJT19VU0VSID0gX1BSSU9fVVNFUgorY29u
c3QgUFJJT19QUk9DRVNTID0gX1BSSU9fUFJPQ0VTUworY29uc3QgUFJJT19NQVggPSBfUFJJT19N
QVgKK2NvbnN0IFBSSU9fTUlOID0gX1BSSU9fTUlOCitjb25zdCBMSU5VWF9SRUJPT1RfTUFHSUMy
QyA9IF9MSU5VWF9SRUJPT1RfTUFHSUMyQworY29uc3QgTElOVVhfUkVCT09UX0NNRF9SRVNUQVJU
ID0gX0xJTlVYX1JFQk9PVF9DTURfUkVTVEFSVAorY29uc3QgTElOVVhfUkVCT09UX0NNRF9TV19T
VVNQRU5EID0gX0xJTlVYX1JFQk9PVF9DTURfU1dfU1VTUEVORAorY29uc3QgTElOVVhfUkVCT09U
X0NNRF9QT1dFUl9PRkYgPSBfTElOVVhfUkVCT09UX0NNRF9QT1dFUl9PRkYKK2NvbnN0IExJTlVY
X1JFQk9PVF9NQUdJQzJBID0gX0xJTlVYX1JFQk9PVF9NQUdJQzJBCitjb25zdCBMSU5VWF9SRUJP
T1RfQ01EX0tFWEVDID0gX0xJTlVYX1JFQk9PVF9DTURfS0VYRUMKK2NvbnN0IExJTlVYX1JFQk9P
VF9NQUdJQzJCID0gX0xJTlVYX1JFQk9PVF9NQUdJQzJCCitjb25zdCBMSU5VWF9SRUJPT1RfQ01E
X1JFU1RBUlQyID0gX0xJTlVYX1JFQk9PVF9DTURfUkVTVEFSVDIKK2NvbnN0IExJTlVYX1JFQk9P
VF9DTURfQ0FEX09GRiA9IF9MSU5VWF9SRUJPT1RfQ01EX0NBRF9PRkYKK2NvbnN0IExJTlVYX1JF
Qk9PVF9DTURfQ0FEX09OID0gX0xJTlVYX1JFQk9PVF9DTURfQ0FEX09OCitjb25zdCBMSU5VWF9S
RUJPT1RfTUFHSUMxID0gX0xJTlVYX1JFQk9PVF9NQUdJQzEKK2NvbnN0IExJTlVYX1JFQk9PVF9N
QUdJQzIgPSBfTElOVVhfUkVCT09UX01BR0lDMgorY29uc3QgTElOVVhfUkVCT09UX0NNRF9IQUxU
ID0gX0xJTlVYX1JFQk9PVF9DTURfSEFMVAordHlwZSBTb2NrRmlsdGVyIHN0cnVjdCB7IENvZGUg
dWludDE2OyBKdCB1aW50ODsgSmYgdWludDg7IEsgdWludDMyOyB9Cit0eXBlIFNvY2tGcHJvZyBz
dHJ1Y3QgeyBMZW4gdWludDE2OyBGaWx0ZXIgKlNvY2tGaWx0ZXI7IH0KK2NvbnN0IEJQRl9KR0Ug
PSBfQlBGX0pHRQorY29uc3QgQlBGX0xEID0gX0JQRl9MRAorY29uc3QgQlBGX0ggPSBfQlBGX0gK
K2NvbnN0IEJQRl9NRU1XT1JEUyA9IF9CUEZfTUVNV09SRFMKK2NvbnN0IEJQRl9NT0QgPSBfQlBG
X01PRAorY29uc3QgQlBGX01JU0MgPSBfQlBGX01JU0MKK2NvbnN0IEJQRl9KQSA9IF9CUEZfSkEK
K2NvbnN0IEJQRl9NQUpPUl9WRVJTSU9OID0gX0JQRl9NQUpPUl9WRVJTSU9OCitjb25zdCBCUEZf
TVNIID0gX0JQRl9NU0gKK2NvbnN0IEJQRl9LID0gX0JQRl9LCitjb25zdCBCUEZfT1IgPSBfQlBG
X09SCitjb25zdCBCUEZfTVVMID0gX0JQRl9NVUwKK2NvbnN0IEJQRl9YT1IgPSBfQlBGX1hPUgor
Y29uc3QgQlBGX01JTk9SX1ZFUlNJT04gPSBfQlBGX01JTk9SX1ZFUlNJT04KK2NvbnN0IEJQRl9B
ID0gX0JQRl9BCitjb25zdCBCUEZfQiA9IF9CUEZfQgorY29uc3QgQlBGX1cgPSBfQlBGX1cKK2Nv
bnN0IEJQRl9YID0gX0JQRl9YCitjb25zdCBCUEZfTEVOID0gX0JQRl9MRU4KK2NvbnN0IEJQRl9K
RVEgPSBfQlBGX0pFUQorY29uc3QgQlBGX0pHVCA9IF9CUEZfSkdUCitjb25zdCBCUEZfTkVUX09G
RiA9IF9CUEZfTkVUX09GRgorY29uc3QgQlBGX0FCUyA9IF9CUEZfQUJTCitjb25zdCBCUEZfQU5E
ID0gX0JQRl9BTkQKK2NvbnN0IEJQRl9TVFggPSBfQlBGX1NUWAorY29uc3QgQlBGX01FTSA9IF9C
UEZfTUVNCitjb25zdCBCUEZfQUREID0gX0JQRl9BREQKK2NvbnN0IEJQRl9TVUIgPSBfQlBGX1NV
QgorY29uc3QgQlBGX0pNUCA9IF9CUEZfSk1QCitjb25zdCBCUEZfTExfT0ZGID0gX0JQRl9MTF9P
RkYKK2NvbnN0IEJQRl9MRFggPSBfQlBGX0xEWAorY29uc3QgQlBGX0lORCA9IF9CUEZfSU5ECitj
b25zdCBCUEZfSlNFVCA9IF9CUEZfSlNFVAorY29uc3QgQlBGX0FMVSA9IF9CUEZfQUxVCitjb25z
dCBCUEZfTkVHID0gX0JQRl9ORUcKK2NvbnN0IEJQRl9MU0ggPSBfQlBGX0xTSAorY29uc3QgQlBG
X01BWElOU05TID0gX0JQRl9NQVhJTlNOUworY29uc3QgQlBGX1RYQSA9IF9CUEZfVFhBCitjb25z
dCBCUEZfRElWID0gX0JQRl9ESVYKK2NvbnN0IEJQRl9SRVQgPSBfQlBGX1JFVAorY29uc3QgQlBG
X1RBWCA9IF9CUEZfVEFYCitjb25zdCBCUEZfU1QgPSBfQlBGX1NUCitjb25zdCBCUEZfUlNIID0g
X0JQRl9SU0gKK2NvbnN0IEJQRl9JTU0gPSBfQlBGX0lNTQordHlwZSBObEF0dHIgc3RydWN0IHsg
TGVuIHVpbnQxNjsgVHlwZSB1aW50MTY7IH0KK3R5cGUgTmxNc2dlcnIgc3RydWN0IHsgRXJyb3Ig
aW50MzI7IE1zZyBObE1zZ2hkcjsgfQordHlwZSBSdE5leHRob3Agc3RydWN0IHsgTGVuIHVpbnQx
NjsgRmxhZ3MgdWludDg7IEhvcHMgdWludDg7IElmaW5kZXggaW50MzI7IH0KK2NvbnN0IE5FVExJ
TktfUkRNQSA9IF9ORVRMSU5LX1JETUEKK2NvbnN0IE5FVExJTktfRklSRVdBTEwgPSBfTkVUTElO
S19GSVJFV0FMTAorY29uc3QgTkVUTElOS19LT0JKRUNUX1VFVkVOVCA9IF9ORVRMSU5LX0tPQkpF
Q1RfVUVWRU5UCitjb25zdCBORVRMSU5LX1VOVVNFRCA9IF9ORVRMSU5LX1VOVVNFRAorY29uc3Qg
TkVUTElOS19YRlJNID0gX05FVExJTktfWEZSTQorY29uc3QgTkVUTElOS19VU0VSU09DSyA9IF9O
RVRMSU5LX1VTRVJTT0NLCitjb25zdCBORVRMSU5LX0lORVRfRElBRyA9IF9ORVRMSU5LX0lORVRf
RElBRworY29uc3QgTkVUTElOS19TQ1NJVFJBTlNQT1JUID0gX05FVExJTktfU0NTSVRSQU5TUE9S
VAorY29uc3QgTkVUTElOS19TRUxJTlVYID0gX05FVExJTktfU0VMSU5VWAorY29uc3QgTkVUTElO
S19JU0NTSSA9IF9ORVRMSU5LX0lTQ1NJCitjb25zdCBORVRMSU5LX1JYX1JJTkcgPSBfTkVUTElO
S19SWF9SSU5HCitjb25zdCBORVRMSU5LX0VYVF9BQ0sgPSBfTkVUTElOS19FWFRfQUNLCitjb25z
dCBORVRMSU5LX0VDUllQVEZTID0gX05FVExJTktfRUNSWVBURlMKK2NvbnN0IE5FVExJTktfQ1JZ
UFRPID0gX05FVExJTktfQ1JZUFRPCitjb25zdCBORVRMSU5LX0JST0FEQ0FTVF9FUlJPUiA9IF9O
RVRMSU5LX0JST0FEQ0FTVF9FUlJPUgorY29uc3QgTkVUTElOS19QS1RJTkZPID0gX05FVExJTktf
UEtUSU5GTworY29uc3QgTkVUTElOS19VTkNPTk5FQ1RFRCA9IF9ORVRMSU5LX1VOQ09OTkVDVEVE
Citjb25zdCBORVRMSU5LX0xJU1RFTl9BTExfTlNJRCA9IF9ORVRMSU5LX0xJU1RFTl9BTExfTlNJ
RAorY29uc3QgTkVUTElOS19DQVBfQUNLID0gX05FVExJTktfQ0FQX0FDSworY29uc3QgTkVUTElO
S19ORkxPRyA9IF9ORVRMSU5LX05GTE9HCitjb25zdCBORVRMSU5LX0ZJQl9MT09LVVAgPSBfTkVU
TElOS19GSUJfTE9PS1VQCitjb25zdCBORVRMSU5LX1NNQyA9IF9ORVRMSU5LX1NNQworY29uc3Qg
TkVUTElOS19ST1VURSA9IF9ORVRMSU5LX1JPVVRFCitjb25zdCBORVRMSU5LX05FVEZJTFRFUiA9
IF9ORVRMSU5LX05FVEZJTFRFUgorY29uc3QgTkVUTElOS19OT19FTk9CVUZTID0gX05FVExJTktf
Tk9fRU5PQlVGUworY29uc3QgTkVUTElOS19DT05ORUNURUQgPSBfTkVUTElOS19DT05ORUNURUQK
K2NvbnN0IE5FVExJTktfTElTVF9NRU1CRVJTSElQUyA9IF9ORVRMSU5LX0xJU1RfTUVNQkVSU0hJ
UFMKK2NvbnN0IE5FVExJTktfRFJPUF9NRU1CRVJTSElQID0gX05FVExJTktfRFJPUF9NRU1CRVJT
SElQCitjb25zdCBORVRMSU5LX0dFTkVSSUMgPSBfTkVUTElOS19HRU5FUklDCitjb25zdCBORVRM
SU5LX0NPTk5FQ1RPUiA9IF9ORVRMSU5LX0NPTk5FQ1RPUgorY29uc3QgTkVUTElOS19ETlJUTVNH
ID0gX05FVExJTktfRE5SVE1TRworY29uc3QgTkVUTElOS19BVURJVCA9IF9ORVRMSU5LX0FVRElU
Citjb25zdCBORVRMSU5LX1NPQ0tfRElBRyA9IF9ORVRMSU5LX1NPQ0tfRElBRworY29uc3QgTkVU
TElOS19BRERfTUVNQkVSU0hJUCA9IF9ORVRMSU5LX0FERF9NRU1CRVJTSElQCitjb25zdCBORVRM
SU5LX0lQNl9GVyA9IF9ORVRMSU5LX0lQNl9GVworY29uc3QgTkVUTElOS19UWF9SSU5HID0gX05F
VExJTktfVFhfUklORworY29uc3QgTkxBX0ZfTkVTVEVEID0gX05MQV9GX05FU1RFRAorY29uc3Qg
TkxBX0ZfTkVUX0JZVEVPUkRFUiA9IF9OTEFfRl9ORVRfQllURU9SREVSCitjb25zdCBOTEFfVFlQ
RV9NQVNLID0gX05MQV9UWVBFX01BU0sKK2NvbnN0IE5MQV9BTElHTlRPID0gX05MQV9BTElHTlRP
Citjb25zdCBOTEFfSERSTEVOID0gX05MQV9IRFJMRU5fdmFsCitjb25zdCBQQUNLRVRfTVJfVU5J
Q0FTVCA9IF9QQUNLRVRfTVJfVU5JQ0FTVAorY29uc3QgUEFDS0VUX0ZBTk9VVF9EQVRBID0gX1BB
Q0tFVF9GQU5PVVRfREFUQQorY29uc3QgUEFDS0VUX09SSUdERVYgPSBfUEFDS0VUX09SSUdERVYK
K2NvbnN0IFBBQ0tFVF9SRUNWX09VVFBVVCA9IF9QQUNLRVRfUkVDVl9PVVRQVVQKK2NvbnN0IFBB
Q0tFVF9MT1NTID0gX1BBQ0tFVF9MT1NTCitjb25zdCBQQUNLRVRfUk9MTE9WRVJfU1RBVFMgPSBf
UEFDS0VUX1JPTExPVkVSX1NUQVRTCitjb25zdCBQQUNLRVRfTVJfUFJPTUlTQyA9IF9QQUNLRVRf
TVJfUFJPTUlTQworY29uc3QgUEFDS0VUX0xPT1BCQUNLID0gX1BBQ0tFVF9MT09QQkFDSworY29u
c3QgUEFDS0VUX1ZFUlNJT04gPSBfUEFDS0VUX1ZFUlNJT04KK2NvbnN0IFBBQ0tFVF9UWF9SSU5H
ID0gX1BBQ0tFVF9UWF9SSU5HCitjb25zdCBQQUNLRVRfSE9TVCA9IF9QQUNLRVRfSE9TVAorY29u
c3QgUEFDS0VUX01SX01VTFRJQ0FTVCA9IF9QQUNLRVRfTVJfTVVMVElDQVNUCitjb25zdCBQQUNL
RVRfU1RBVElTVElDUyA9IF9QQUNLRVRfU1RBVElTVElDUworY29uc3QgUEFDS0VUX01VTFRJQ0FT
VCA9IF9QQUNLRVRfTVVMVElDQVNUCitjb25zdCBQQUNLRVRfVFhfVElNRVNUQU1QID0gX1BBQ0tF
VF9UWF9USU1FU1RBTVAKK2NvbnN0IFBBQ0tFVF9IRFJMRU4gPSBfUEFDS0VUX0hEUkxFTgorY29u
c3QgUEFDS0VUX0JST0FEQ0FTVCA9IF9QQUNLRVRfQlJPQURDQVNUCitjb25zdCBQQUNLRVRfQ09Q
WV9USFJFU0ggPSBfUEFDS0VUX0NPUFlfVEhSRVNICitjb25zdCBQQUNLRVRfT1VUR09JTkcgPSBf
UEFDS0VUX09VVEdPSU5HCitjb25zdCBQQUNLRVRfVk5FVF9IRFIgPSBfUEFDS0VUX1ZORVRfSERS
Citjb25zdCBQQUNLRVRfRkFOT1VUID0gX1BBQ0tFVF9GQU5PVVQKK2NvbnN0IFBBQ0tFVF9PVEhF
UkhPU1QgPSBfUEFDS0VUX09USEVSSE9TVAorY29uc3QgUEFDS0VUX0RST1BfTUVNQkVSU0hJUCA9
IF9QQUNLRVRfRFJPUF9NRU1CRVJTSElQCitjb25zdCBQQUNLRVRfUkVTRVJWRSA9IF9QQUNLRVRf
UkVTRVJWRQorY29uc3QgUEFDS0VUX1FESVNDX0JZUEFTUyA9IF9QQUNLRVRfUURJU0NfQllQQVNT
Citjb25zdCBQQUNLRVRfTVJfQUxMTVVMVEkgPSBfUEFDS0VUX01SX0FMTE1VTFRJCitjb25zdCBQ
QUNLRVRfVFhfSEFTX09GRiA9IF9QQUNLRVRfVFhfSEFTX09GRgorY29uc3QgUEFDS0VUX1JYX1JJ
TkcgPSBfUEFDS0VUX1JYX1JJTkcKK2NvbnN0IFBBQ0tFVF9BRERfTUVNQkVSU0hJUCA9IF9QQUNL
RVRfQUREX01FTUJFUlNISVAKK2NvbnN0IFBBQ0tFVF9GQVNUUk9VVEUgPSBfUEFDS0VUX0ZBU1RS
T1VURQorY29uc3QgUEFDS0VUX0FVWERBVEEgPSBfUEFDS0VUX0FVWERBVEEKK2NvbnN0IFBBQ0tF
VF9USU1FU1RBTVAgPSBfUEFDS0VUX1RJTUVTVEFNUAordHlwZSBJbm90aWZ5RXZlbnQgc3RydWN0
IHsgV2QgaW50MzI7IE1hc2sgdWludDMyOyBDb29raWUgdWludDMyOyBMZW4gdWludDMyOyBOYW1l
IFswXWludDg7IH0KK2NvbnN0IENMT05FX1BUUkFDRSA9IF9DTE9ORV9QVFJBQ0UKK2NvbnN0IENM
T05FX1NJR0hBTkQgPSBfQ0xPTkVfU0lHSEFORAorY29uc3QgQ0xPTkVfREVUQUNIRUQgPSBfQ0xP
TkVfREVUQUNIRUQKK2NvbnN0IENMT05FX1NZU1ZTRU0gPSBfQ0xPTkVfU1lTVlNFTQorY29uc3Qg
Q0xPTkVfTkVXVVNFUiA9IF9DTE9ORV9ORVdVU0VSCitjb25zdCBDTE9ORV9QQVJFTlRfU0VUVElE
ID0gX0NMT05FX1BBUkVOVF9TRVRUSUQKK2NvbnN0IENMT05FX0NISUxEX0NMRUFSVElEID0gX0NM
T05FX0NISUxEX0NMRUFSVElECitjb25zdCBDTE9ORV9QQVJFTlQgPSBfQ0xPTkVfUEFSRU5UCitj
b25zdCBDTE9ORV9VTlRSQUNFRCA9IF9DTE9ORV9VTlRSQUNFRAorY29uc3QgQ0xPTkVfQ0hJTERf
U0VUVElEID0gX0NMT05FX0NISUxEX1NFVFRJRAorY29uc3QgQ0xPTkVfVEhSRUFEID0gX0NMT05F
X1RIUkVBRAorY29uc3QgQ0xPTkVfRlMgPSBfQ0xPTkVfRlMKK2NvbnN0IENMT05FX05FV0NHUk9V
UCA9IF9DTE9ORV9ORVdDR1JPVVAKK2NvbnN0IENMT05FX05FV0lQQyA9IF9DTE9ORV9ORVdJUEMK
K2NvbnN0IENMT05FX1NFVFRMUyA9IF9DTE9ORV9TRVRUTFMKK2NvbnN0IENMT05FX05FV1VUUyA9
IF9DTE9ORV9ORVdVVFMKK2NvbnN0IENMT05FX1ZNID0gX0NMT05FX1ZNCitjb25zdCBDTE9ORV9O
RVdORVQgPSBfQ0xPTkVfTkVXTkVUCitjb25zdCBDTE9ORV9JTyA9IF9DTE9ORV9JTworY29uc3Qg
Q0xPTkVfRklMRVMgPSBfQ0xPTkVfRklMRVMKK2NvbnN0IENMT05FX1ZGT1JLID0gX0NMT05FX1ZG
T1JLCitjb25zdCBDTE9ORV9ORVdOUyA9IF9DTE9ORV9ORVdOUworY29uc3QgQ0xPTkVfTkVXUElE
ID0gX0NMT05FX05FV1BJRAorY29uc3QgU2l6ZW9mQ21zZ2hkciA9IF9zaXplb2ZfY21zZ2hkcgor
Y29uc3QgU2l6ZW9mSVBNcmVxID0gX3NpemVvZl9pcF9tcmVxCitjb25zdCBTaXplb2ZJUE1yZXFu
ID0gX3NpemVvZl9pcF9tcmVxbgorY29uc3QgU2l6ZW9mSVB2Nk1yZXEgPSBfc2l6ZW9mX2lwdjZf
bXJlcQorY29uc3QgU2l6ZW9mSWZBZGRybXNnID0gX3NpemVvZl9pZmFkZHJtc2cKK2NvbnN0IFNp
emVvZklmSW5mb21zZyA9IF9zaXplb2ZfaWZpbmZvbXNnCitjb25zdCBTaXplb2ZJbmV0NFBrdGlu
Zm8gPSBfc2l6ZW9mX2luX3BrdGluZm8KK2NvbnN0IFNpemVvZkluZXQ2UGt0aW5mbyA9IF9zaXpl
b2ZfaW42X3BrdGluZm8KK2NvbnN0IFNpemVvZklub3RpZnlFdmVudCA9IF9zaXplb2ZfaW5vdGlm
eV9ldmVudAorY29uc3QgU2l6ZW9mTGluZ2VyID0gX3NpemVvZl9saW5nZXIKK2NvbnN0IFNpemVv
Zk1zZ2hkciA9IF9zaXplb2ZfbXNnaGRyCitjb25zdCBTaXplb2ZObEF0dHIgPSBfc2l6ZW9mX25s
YXR0cgorY29uc3QgU2l6ZW9mTmxNc2dlcnIgPSBfc2l6ZW9mX25sbXNnZXJyCitjb25zdCBTaXpl
b2ZObE1zZ2hkciA9IF9zaXplb2Zfbmxtc2doZHIKK2NvbnN0IFNpemVvZlJ0QXR0ciA9IF9zaXpl
b2ZfcnRhdHRyCitjb25zdCBTaXplb2ZSdEdlbm1zZyA9IF9zaXplb2ZfcnRnZW5tc2cKK2NvbnN0
IFNpemVvZlJ0TXNnID0gX3NpemVvZl9ydG1zZworY29uc3QgU2l6ZW9mUnROZXh0aG9wID0gX3Np
emVvZl9ydG5leHRob3AKK2NvbnN0IFNpemVvZlNvY2tGaWx0ZXIgPSBfc2l6ZW9mX3NvY2tfZmls
dGVyCitjb25zdCBTaXplb2ZTb2NrRnByb2cgPSBfc2l6ZW9mX3NvY2tfZnByb2cKK2NvbnN0IFNp
emVvZlVjcmVkID0gX3NpemVvZl91Y3JlZAorY29uc3QgU2l6ZW9mSUNNUHY2RmlsdGVyID0gX3Np
emVvZl9pY21wNl9maWx0ZXIKK2NvbnN0IFNpemVvZklQdjZNVFVJbmZvID0gX3NpemVvZl9pcDZf
bXR1aW5mbwpkaWZmIC0tZ2l0IGEvZ2VuZXJhdGVkL3ZlcnNpb24uZ28gYi9nZW5lcmF0ZWQvdmVy
c2lvbi5nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjRhODM2Ci0tLSAv
ZGV2L251bGwKKysrIGIvZ2VuZXJhdGVkL3ZlcnNpb24uZ28KQEAgLTAsMCArMSw3NyBAQAorcGFj
a2FnZSBzeXMKK2NvbnN0IERlZmF1bHRHb3Jvb3QgPSAiL3Vzci9sb2NhbCIKK2NvbnN0IFRoZVZl
cnNpb24gPSAiZ28xLjguMyBnY2Nnby03IChEZWJpYW4gNy40LjAtNikgNy40LjAiCitjb25zdCBH
T0FSQ0ggPSAiYW1kNjQiCitjb25zdCBHT09TID0gImxpbnV4IgorY29uc3QgR2NjZ29Ub29sRGly
ID0gIi91c3IvbG9jYWwvbGliZXhlYy9nY2MvLzciCisKK3R5cGUgQXJjaEZhbWlseVR5cGUgaW50
CisKK2NvbnN0ICgKKwlVTktOT1dOIEFyY2hGYW1pbHlUeXBlID0gaW90YQorCUkzODYKKwlBTFBI
QQorCUFNRDY0CisJQVJNCisJQVJNNjQKKwlJQTY0CisJTTY4SworCU1JUFMKKwlNSVBTNjQKKwlQ
UEMKKwlQUEM2NAorCVMzOTAKKwlTMzkwWAorCVNQQVJDCisJU1BBUkM2NAorKQorCitjb25zdCBH
b2FyY2gzODYgPSAwCitjb25zdCBHb2FyY2hBbHBoYSA9IDAKK2NvbnN0IEdvYXJjaEFtZDY0ID0g
MQorY29uc3QgR29hcmNoQW1kNjRwMzIgPSAwCitjb25zdCBHb2FyY2hBcm0gPSAwCitjb25zdCBH
b2FyY2hBcm1iZSA9IDAKK2NvbnN0IEdvYXJjaEFybTY0ID0gMAorY29uc3QgR29hcmNoQXJtNjRi
ZSA9IDAKK2NvbnN0IEdvYXJjaElhNjQgPSAwCitjb25zdCBHb2FyY2hNNjhrID0gMAorY29uc3Qg
R29hcmNoTWlwcyA9IDAKK2NvbnN0IEdvYXJjaE1pcHNsZSA9IDAKK2NvbnN0IEdvYXJjaE1pcHM2
NCA9IDAKK2NvbnN0IEdvYXJjaE1pcHM2NGxlID0gMAorY29uc3QgR29hcmNoTWlwczY0cDMyID0g
MAorY29uc3QgR29hcmNoTWlwczY0cDMybGUgPSAwCitjb25zdCBHb2FyY2hQcGMgPSAwCitjb25z
dCBHb2FyY2hQcGM2NCA9IDAKK2NvbnN0IEdvYXJjaFBwYzY0bGUgPSAwCitjb25zdCBHb2FyY2hT
MzkwID0gMAorY29uc3QgR29hcmNoUzM5MHggPSAwCitjb25zdCBHb2FyY2hTcGFyYyA9IDAKK2Nv
bnN0IEdvYXJjaFNwYXJjNjQgPSAwCisKK2NvbnN0ICgKKwlBcmNoRmFtaWx5ID0gQU1ENjQKKwlC
aWdFbmRpYW4gPSAwCisJQ2FjaGVMaW5lU2l6ZSA9IDY0CisJUGh5c1BhZ2VTaXplID0gNDA5Ngor
CVBDUXVhbnR1bSA9IDEKKwlJbnQ2NEFsaWduID0gOAorCUh1Z2VQYWdlU2l6ZSA9IDEgPDwgMjEK
KwlNaW5GcmFtZVNpemUgPSAwCispCisKK2NvbnN0IEdvb3NBbmRyb2lkID0gMAorY29uc3QgR29v
c0RhcndpbiA9IDAKK2NvbnN0IEdvb3NEcmFnb25mbHkgPSAwCitjb25zdCBHb29zRnJlZWJzZCA9
IDAKK2NvbnN0IEdvb3NJcml4ID0gMAorY29uc3QgR29vc0xpbnV4ID0gMQorY29uc3QgR29vc05l
dGJzZCA9IDAKK2NvbnN0IEdvb3NPcGVuYnNkID0gMAorY29uc3QgR29vc1BsYW45ID0gMAorY29u
c3QgR29vc1J0ZW1zID0gMAorY29uc3QgR29vc1NvbGFyaXMgPSAwCitjb25zdCBHb29zV2luZG93
cyA9IDAKKwordHlwZSBVaW50cmVnIHVpbnRwdHIKZGlmZiAtLWdpdCBhL3BhY2thZ2VzLnVrIGIv
cGFja2FnZXMudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxYzEzNwot
LS0gL2Rldi9udWxsCisrKyBiL3BhY2thZ2VzLnVrCkBAIC0wLDAgKzEsOTgxIEBACisjIFRoaXMg
ZmlsZSB3YXMgZ2VuZXJhdGVkCiskKExJQkdPX0JVSUxEKS9ydW50aW1lL2ludGVybmFsL2F0b21p
Yy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9pbnRlcm5hbC9hdG9taWMvZ2NjZ28u
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaW50ZXJuYWwvYXRvbWljL3N0dWJzLmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9cnVudGltZS9pbnRlcm5hbC9hdG9taWMgLWZnby1j
b21waWxpbmctcnVudGltZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3J1bnRpbWUvaW50ZXJuYWwvc3lzLm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2ludGVybmFsL3N5cy9pbnRyaW5zaWNzLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2ludGVybmFsL3N5cy9zdHVicy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9pbnRlcm5hbC9zeXMvc3lzLmdvICQoTElCR09fQkFTRSkv
Z2VuZXJhdGVkL3ZlcnNpb24uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90
ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkg
JiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lL2lu
dGVybmFsL3N5cyAtZmdvLWNvbXBpbGluZy1ydW50aW1lICReIC1vICRAICYmIFwKKwlvYmpjb3B5
IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvZXJyb3JzLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9lcnJvcnMvZXJyb3JzLmdvCisJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJ
JChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVycm9ycyAkXiAtbyAkQCAm
JiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJ
TEQpL2ludGVybmFsL3JhY2UubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3JhY2Uv
ZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9yYWNlL25vcmFjZS5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPWludGVybmFsL3JhY2UgJF4gLW8gJEAgJiYgXAorCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8v
aW50ZXJuYWwvY2lwaGVyaHcubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9pbnRlcm5h
bC9jaXBoZXJody9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9pbnRlcm5hbC9j
aXBoZXJody9nZW5lcmljLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYm
IFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2ludGVy
bmFsL2NpcGhlcmh3ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvdW5pY29kZS91dGY4Lm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby91bmljb2RlL3V0ZjgvdXRmOC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXVu
aWNvZGUvdXRmOCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NyeXB0by9zdWJ0bGUubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NyeXB0by9zdWJ0bGUvY29uc3RhbnRfdGltZS5nbworCSQoY2FsbCB2ZXJib3NlX2Nt
ZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1r
ZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1w
a2dwYXRoPWNyeXB0by9zdWJ0bGUgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jb250YWluZXIvbGlzdC5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vY29udGFpbmVyL2xpc3QvbGlzdC5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWNvbnRhaW5lci9saXN0ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbWF0aC5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbWF0aC9hYnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYWNvc2gu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYXNpbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWF0aC9hc2luaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9hdGFuLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2F0YW4yLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRo
L2F0YW5oLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpdHMuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL21hdGgvY2JydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jb25zdC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jb3B5c2lnbi5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbWF0aC9kaW0uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvZXJmLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2V4cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9l
eHBtMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9mbG9vci5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbWF0aC9mcmV4cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9nYW1tYS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9oeXBvdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWF0aC9qMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9qMS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbWF0aC9qbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9sZGV4cC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9sZ2FtbWEuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL21hdGgvbG9nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2xvZzEwLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2xvZzFwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRo
L2xvZ2IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvbW9kLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL21vZGYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvbmV4dGFmdGVy
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL3Bvdy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWF0aC9wb3cxMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yZW1haW5kZXIuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvc2lnbmJpdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWF0aC9zaW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvc2luY29zLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL3NpbmguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgv
c3FydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC90YW4uZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL21hdGgvdGFuaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC91bnNhZmUuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9
bWF0aCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL2NvbnRhaW5lci9yaW5nLm86ICQoTElCR09fRVhUUkFDVEVEKS9n
by9jb250YWluZXIvcmluZy9yaW5nLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAk
KG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIg
JEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y29udGFp
bmVyL3JpbmcgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89
LmdveCkpCiskKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvY3J5cHRvL2N1cnZlMjU1MTkubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vY3VydmUyNTUxOS9jdXJ2
ZTI1NTE5LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvY3J5cHRvL2N1cnZl
MjU1MTkvZG9jLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFuZ19vcmcv
eC9jcnlwdG8vY3VydmUyNTUxOSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2ludGVybmFsL25ldHRyYWNlLm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9uZXR0cmFjZS9uZXR0cmFjZS5nbworCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWludGVybmFsL25ldHRyYWNlICReIC1vICRAICYmIFwKKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvc3luYy9h
dG9taWMubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3N5bmMvYXRvbWljL2RvYy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3luYy9hdG9taWMvdmFsdWUuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2Rp
ciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD1zeW5jL2F0b21pYyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3VuaWNvZGUubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL3VuaWNvZGUvY2FzZXRhYmxlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdW5pY29k
ZS9kaWdpdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdW5pY29kZS9ncmFwaGljLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby91bmljb2RlL2xldHRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
dW5pY29kZS90YWJsZXMuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9dW5pY29kZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29f
ZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2VuY29kaW5nLm86ICQoTElC
R09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9lbmNvZGluZy5nbworCSQoY2FsbCB2ZXJib3NlX2Nt
ZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQo
R09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZyAkXiAtbyAkQCAm
JiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJ
TEQpL3VuaWNvZGUvdXRmMTYubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3VuaWNvZGUvdXRmMTYv
dXRmMTYuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD11bmljb2RlL3V0ZjE2ICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvaW1hZ2UvY29sb3IubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2NvbG9yL2Nv
bG9yLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9jb2xvci95Y2Jjci5nbworCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWltYWdlL2NvbG9yICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1q
IC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvcnVudGltZS5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9hbGcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvY2dvX2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2NoYW4u
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY29tcGlsZXIuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvY3B1cHJvZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9jcHV0aWNrcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9kZWJ1Zy5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9lbnZfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvZXJyb3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZXh0ZXJu
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2ZmaS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9oYXNoNjQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaGFz
aG1hcC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9oYXNobWFwX2Zhc3QuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaWZhY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3J1bnRpbWUvbGZzdGFjay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sZnN0YWNr
XzY0Yml0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2xvY2tfZnV0ZXguZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbWNhY2hlLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL21wcm9mLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21zYW4wLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21zdGF0cy5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9uZXRwb2xsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL25l
dHBvbGxfZXBvbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvb3NfZ2NjZ28uZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvb3NfbGludXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvcGFuaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJp
bnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJvYy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9yYWNlMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9y
ZGVidWcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9ydW50aW1lMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
cnVudGltZS9ydW50aW1lMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zZWxlY3Qu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2VtYS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9zaWduYWxfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvc2lnbmFsX3NpZ2hhbmRsZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2ln
bmFsX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lncXVldWUuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2l6ZWNsYXNzZXMuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvc2xpY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc3Ry
aW5nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3N0dWJzLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL3N0dWJzMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9zeW10YWIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdGltZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS90cmFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS90cmFjZWJhY2tfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHlw
ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90eXBla2luZC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS91bmFsaWduZWQxLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL3V0ZjguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvd3JpdGVfZXJyLmdv
ICQoTElCR09fQkFTRSkvZ2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbyAkKExJQkdPX0JBU0Up
L2dlbmVyYXRlZC9zaWd0YWIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90
ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZM
QUdTKSAtYyAtZmdvLXBrZ3BhdGg9cnVudGltZSAtZmdvLWMtaGVhZGVyPSQoTElCR09fQkFTRSkv
Z2VuZXJhdGVkL3J1bnRpbWUuaW5jLnRtcCAtZmdvLWNvbXBpbGluZy1ydW50aW1lICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvaW1hZ2UvY29sb3IvcGFsZXR0ZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2Uv
Y29sb3IvcGFsZXR0ZS9nZW5lcmF0ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvY29s
b3IvcGFsZXR0ZS9wYWxldHRlLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5v
dGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aW1hZ2UvY29s
b3IvcGFsZXR0ZSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9jcnlwdG8vcG9seTEzMDUubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vcG9seTEzMDUvcG9seTEz
MDUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vcG9seTEzMDUv
c3VtX3JlZi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXZlbmRvci9nb2xhbmdfb3JnL3gv
Y3J5cHRvL3BvbHkxMzA1ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAg
JChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbWF0aC9jbXBseC5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbWF0aC9jbXBseC9hYnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21w
bHgvYXNpbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9jb25qLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L2V4cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bWF0aC9jbXBseC9pc2luZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9pc25h
bi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9sb2cuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL21hdGgvY21wbHgvcGhhc2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgv
Y21wbHgvcG9sYXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21wbHgvcG93LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L3JlY3QuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL21hdGgvY21wbHgvc2luLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L3Nx
cnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21wbHgvdGFuLmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9bWF0aC9jbXBseCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29f
ZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3N5bmMubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL3N5bmMvY29uZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3luYy9tdXRl
eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3luYy9vbmNlLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9zeW5jL3Bvb2wuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5bmMvcnVudGltZS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vc3luYy9yd211dGV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9zeW5jL3dhaXRncm91cC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1zeW5jICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvc3RyY29udi5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3RyY29udi9hdG9iLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJj
b252L2F0b2YuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmNvbnYvYXRvaS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3RyY29udi9kZWNpbWFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9z
dHJjb252L2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9leHRmbG9hdC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9mdG9hLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9zdHJjb252L2lzcHJpbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmNvbnYvaXRvYS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9xdW90ZS5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1zdHJjb252ICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvaW8ubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2lvL2lvLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9pby9tdWx0aS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW8vcGlwZS5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbyAk
XiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQo
TElCR09fQlVJTEQpL2ludGVybmFsL3NpbmdsZWZsaWdodC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vaW50ZXJuYWwvc2luZ2xlZmxpZ2h0L3NpbmdsZWZsaWdodC5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWludGVybmFsL3NpbmdsZWZsaWdodCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAt
aiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL21hdGgvcmFuZC5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yYW5kL2V4cC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbWF0aC9yYW5kL25vcm1hbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yYW5k
L3JhbmQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvcmFuZC9ybmcuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL21hdGgvcmFuZC96aXBmLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxp
YmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAg
JChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9
bWF0aC9yYW5kICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvc3lzY2FsbC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9kaXJlbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZW5kaWFuX2xp
dHRsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lbnZfdW5peC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJzdHJfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3N5c2NhbGwvZXhlY19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9l
eGVjX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4X2FtZDY0LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfbGludXhfdXN0YXQuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eF91dGltZXNuYW5vLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfcG9zaXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeF9sYXJnZWZpbGUuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvbGliY2FsbF9zdXBwb3J0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9z
eXNjYWxsL2xpYmNhbGxfdW5hbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGli
Y2FsbF93YWl0NC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9sc2ZfbGludXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbXNhbjAuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3N5c2NhbGwvbmV0bGlua19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2Fs
bC9zZXR1aWRnaWRfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc2xlZXBf
c2VsZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tjbXNnX2xpbnV4Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tjbXNnX3VuaXguZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNj
YWxsL3NvY2tldF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrZXRf
bGludXhfdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrZXRfcG9zaXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3RyLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9zeXNjYWxsL3N5c2NhbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lz
Y2FsbF9lcnJuby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsX2xpbnV4
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfbGludXhfYW1kNjQuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF91bml4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9zeXNjYWxsL3RpbWVzdHJ1Y3QuZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQv
bGliY2FsbHMuZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQvc3lzaW5mby5nbyAkKExJQkdPX0JB
U0UpL2dlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQvZXBv
bGwuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9c3lzY2FsbCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2hhc2gubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2hhc2gvaGFzaC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1oYXNoICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQg
JEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvcnVudGltZS90cmFjZS5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS90cmFjZS90cmFjZS5nbworCSQoY2FsbCB2ZXJib3NlX2Nt
ZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1r
ZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1w
a2dwYXRoPXJ1bnRpbWUvdHJhY2UgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9zdHJpbmdzLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9zdHJpbmdzL2NvbXBhcmUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmlu
Z3MvcmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJpbmdzL3JlcGxhY2UuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3N0cmluZ3Mvc2VhcmNoLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9zdHJpbmdzL3N0cmluZ3MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmluZ3Mvc3RyaW5n
c19kZWNsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJpbmdzL3N0cmluZ3NfZ2VuZXJpYy5n
bworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD1zdHJpbmdzICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvYnl0ZXMubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2J5
dGVzL2J1ZmZlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYnl0ZXMvYnl0ZXMuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2J5dGVzL2J5dGVzX2RlY2wuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2J5dGVzL2J5dGVzX2dlbmVyaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2J5dGVzL3JlYWRl
ci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD1ieXRlcyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NyeXB0by9jaXBoZXIubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NyeXB0by9jaXBoZXIvY2JjLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8v
Y2lwaGVyL2NmYi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2NpcGhlci9jaXBoZXIu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIvY3RyLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8vY2lwaGVyL2djbS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5
cHRvL2NpcGhlci9pby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2NpcGhlci9vZmIu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIveG9yLmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2NpcGhlciAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAu
Z29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2hhc2gvY3JjMzIubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2hhc2gvY3JjMzIvY3JjMzIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2hhc2gvY3JjMzIvY3JjMzJfZ2VuZXJpYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
aGFzaC9jcmMzMi9jcmMzMl9vdGhlcmFyY2guZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGli
Z286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAk
KGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1o
YXNoL2NyYzMyICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvaGFzaC9mbnYubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2hhc2gvZm52L2Zudi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWhhc2gvZm52ICReIC1v
ICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJH
T19CVUlMRCkvY3J5cHRvL2htYWMubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9obWFj
L2htYWMuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vaG1hYyAkXiAtbyAkQCAm
JiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJ
TEQpL2hhc2gvYWRsZXIzMi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaGFzaC9hZGxlcjMyL2Fk
bGVyMzIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1oYXNoL2FkbGVyMzIgJF4gLW8gJEAg
JiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JV
SUxEKS9oYXNoL2NyYzY0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9oYXNoL2NyYzY0L2NyYzY0
LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElC
R09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChM
SUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aGFzaC9jcmM2NCAkXiAtbyAkQCAmJiBcCisJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2Ny
eXB0by5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2NyeXB0by5nbworCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8gJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9yZWZsZWN0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWZsZWN0L2RlZXBl
cXVhbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVmbGVjdC9tYWtlZnVuYy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcmVmbGVjdC9tYWtlZnVuY19mZmkuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3JlZmxlY3Qvc3dhcHBlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVmbGVjdC90eXBl
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWZsZWN0L3ZhbHVlLmdvCisJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXJlZmxlY3QgJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9lbmNvZGluZy9iYXNlNjQubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5n
L2Jhc2U2NC9iYXNlNjQuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy9iYXNl
NjQgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
CiskKExJQkdPX0JVSUxEKS9jcnlwdG8vcmM0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlw
dG8vcmM0L3JjNC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3JjNC9yYzRfcmVmLmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL3JjNCAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2VuY29k
aW5nL2FzY2lpODUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2FzY2lpODUvYXNj
aWk4NS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAk
KExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL2FzY2lpODUgJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9jcnlwdG8vYWVzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vYWVzL2Js
b2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vYWVzL2NpcGhlci5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2Flcy9jaXBoZXJfZ2VuZXJpYy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vY3J5cHRvL2Flcy9jb25zdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L2Flcy9tb2Rlcy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJ
JChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9hZXMgJF4gLW8g
JEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdP
X0JVSUxEKS9jcnlwdG8vbWQ1Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vbWQ1L21k
NS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL21kNS9tZDVibG9jay5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vY3J5cHRvL21kNS9tZDVibG9ja19nZW5lcmljLmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL21kNSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29f
ZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NyeXB0by9zaGE1MTIubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9zaGE1MTIvc2hhNTEyLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8vc2hhNTEyL3NoYTUxMmJsb2NrLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9jcnlwdG8vc2hhNTEyL3NoYTUxMmJsb2NrX2dlbmVyaWMuZ28KKwkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwK
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1jcnlwdG8vc2hhNTEyICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY3J5cHRvL3NoYTI1Ni5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3NoYTI1Ni9zaGEyNTYuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2NyeXB0by9zaGEyNTYvc2hhMjU2YmxvY2suZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2NyeXB0by9zaGEyNTYvc2hhMjU2YmxvY2tfZ2VuZXJpYy5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWNyeXB0by9zaGEyNTYgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4
cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8vc2hhMS5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3NoYTEvc2hhMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vY3J5cHRvL3NoYTEvc2hhMWJsb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8v
c2hhMS9zaGExYmxvY2tfZ2VuZXJpYy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0
by9zaGExICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQorJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L3RleHQvdHJhbnNmb3JtLm86ICQoTElC
R09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC90cmFuc2Zvcm0vdHJhbnNmb3JtLmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFuZ19vcmcveC90ZXh0L3RyYW5z
Zm9ybSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL2J1ZmlvLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9idWZpby9i
dWZpby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYnVmaW8vc2Nhbi5nbworCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1idWZpbyAkXiAtbyAk
QCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09f
QlVJTEQpL3RleHQvdGFid3JpdGVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0L3RhYndy
aXRlci90YWJ3cml0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXh0L3RhYndyaXRl
ciAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkK
KyQoTElCR09fQlVJTEQpL2VuY29kaW5nL2Jhc2UzMi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
ZW5jb2RpbmcvYmFzZTMyL2Jhc2UzMi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29k
aW5nL2Jhc2UzMiAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3BhdGgubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3Bh
dGgvbWF0Y2guZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3BhdGgvcGF0aC5nbworCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1wYXRoICReIC1v
ICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJH
T19CVUlMRCkvaHRtbC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC9lbnRpdHkuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2h0bWwvZXNjYXBlLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWh0bWwgJF4gLW8gJEAgJiYgXAorCW9i
amNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9pbWFn
ZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvZm9ybWF0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9pbWFnZS9nZW9tLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9pbWFnZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvbmFtZXMuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2ltYWdlL3ljYmNyLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWltYWdlICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvaW1hZ2UvaW50ZXJuYWwvaW1h
Z2V1dGlsLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9pbnRlcm5hbC9pbWFnZXV0aWwv
aW1hZ2V1dGlsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9pbnRlcm5hbC9pbWFnZXV0
aWwvaW1wbC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWltYWdlL2ludGVybmFsL2ltYWdl
dXRpbCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL2ltYWdlL2pwZWcubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2lt
YWdlL2pwZWcvZmRjdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvanBlZy9odWZmbWFu
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9qcGVnL2lkY3QuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2ltYWdlL2pwZWcvcmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFn
ZS9qcGVnL3NjYW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2pwZWcvd3JpdGVyLmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aW1hZ2UvanBlZyAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2ltYWdl
L2RyYXcubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2RyYXcvZHJhdy5nbworCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWltYWdlL2RyYXcgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9lbmNvZGluZy9iaW5h
cnkubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2JpbmFyeS9iaW5hcnkuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2JpbmFyeS92YXJpbnQuZ28KKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1lbmNvZGluZy9iaW5hcnkgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9zb3J0Lm86ICQoTElC
R09fRVhUUkFDVEVEKS9nby9zb3J0L3NlYXJjaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc29y
dC9zb3J0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zb3J0L3pmdW5jdmVyc2lvbi5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1zb3J0
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvaW50ZXJuYWwvc3lzY2FsbC91bml4Lm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9pbnRlcm5hbC9zeXNjYWxsL3VuaXgvZHVtbXkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2ludGVybmFsL3N5c2NhbGwvdW5peC9nZXRyYW5kb21fbGludXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2ludGVybmFsL3N5c2NhbGwvdW5peC9nZXRyYW5kb21fbGludXhfYW1kNjQuZ28KKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbnRlcm5hbC9zeXNjYWxsL3VuaXggJF4gLW8gJEAgJiYg
XAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxE
KS9leHAvdGVybWluYWwubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2V4cC90ZXJtaW5hbC90ZXJt
aW5hbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZXhwL3Rlcm1pbmFsL3V0aWwuZ28KKwkkKGNh
bGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNU
RUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1leHAvdGVybWluYWwgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS90aW1lLm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby90aW1lL2Zvcm1hdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
dGltZS9zbGVlcC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGltZS9zeXNfdW5peC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vdGltZS90aWNrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90aW1l
L3RpbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RpbWUvem9uZWluZm8uZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3RpbWUvem9uZWluZm9fcmVhZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
dGltZS96b25laW5mb191bml4LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5v
dGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPXRpbWUgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jb21wcmVzcy9iemlwMi5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvYnppcDIvYml0X3JlYWRlci5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvYnppcDIvYnppcDIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NvbXByZXNzL2J6aXAyL2h1ZmZtYW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Nv
bXByZXNzL2J6aXAyL21vdmVfdG9fZnJvbnQuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGli
Z286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAk
KGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1j
b21wcmVzcy9iemlwMiAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NvbnRhaW5lci9oZWFwLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9jb250YWluZXIvaGVhcC9oZWFwLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIg
LXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9Y29udGFpbmVyL2hlYXAgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9yZWdleHAvc3ludGF4Lm86ICQoTElCR09f
RVhUUkFDVEVEKS9nby9yZWdleHAvc3ludGF4L2NvbXBpbGUuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3JlZ2V4cC9zeW50YXgvZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWdleHAvc3lu
dGF4L3BhcnNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWdleHAvc3ludGF4L3BlcmxfZ3Jv
dXBzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWdleHAvc3ludGF4L3Byb2cuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3JlZ2V4cC9zeW50YXgvcmVnZXhwLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9yZWdleHAvc3ludGF4L3NpbXBsaWZ5LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxp
YmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAg
JChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9
cmVnZXhwL3N5bnRheCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2VuY29kaW5nL3BlbS5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vZW5jb2RpbmcvcGVtL3BlbS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVu
Y29kaW5nL3BlbSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NyeXB0by9kZXMubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2NyeXB0by9kZXMvYmxvY2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9kZXMv
Y2lwaGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vZGVzL2NvbnN0LmdvCisJJChj
YWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFD
VEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZM
QUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2RlcyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAt
aiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcv
eC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS9pbnRlcm5hbC9jaGFjaGEyMC5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1L2ludGVybmFs
L2NoYWNoYTIwL2NoYWNoYV9nZW5lcmljLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdv
OiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChk
aXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVu
ZG9yL2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS9pbnRlcm5hbC9jaGFjaGEy
MCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkK
KyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1
L2NoYWNoYTIwcG9seTEzMDUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9j
cnlwdG8vY2hhY2hhMjBwb2x5MTMwNS9jaGFjaGEyMHBvbHkxMzA1X2dlbmVyaWMuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS9jaGFj
aGEyMHBvbHkxMzA1X25vYXNtLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gv
Y3J5cHRvL2NoYWNoYTIwcG9seTEzMDUvY2hhY2hhMjBwb2x5MTMwNV90ZXN0X3ZlY3RvcnMuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L2NyeXB0by9jaGFj
aGEyMHBvbHkxMzA1ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvb3MubzogJChMSUJHT19FWFRSQUNURUQpL2dvL29z
L2Rpci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX2djY2dvLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9vcy9kaXJfbGFyZ2VmaWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9k
aXJfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZW52LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9vcy9lcnJvci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJyb3JfdW5peC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3MvZXhlY19wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY191bml4LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9vcy9leGVjdXRhYmxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9vcy9leGVjdXRhYmxlX3Byb2Nmcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZmlsZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZmlsZV9wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vb3MvZmlsZV91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9nZXR3ZC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGF0aC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mv
cGF0aF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9waXBlX2xpbnV4LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9vcy9wcm9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zdGF0
X2F0aW0uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0YXRfdW5peC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3Mvc3RpY2t5X25vdGJzZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mv
c3RyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zeXMuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL3N5c19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3lzX3VuaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL29zL3R5cGVzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9v
cy90eXBlc191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy93YWl0X3dhaXRpZC5nbwor
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1v
cyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkK
KyQoTElCR09fQlVJTEQpL3JlZ2V4cC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVnZXhwL2Jh
Y2t0cmFjay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVnZXhwL2V4ZWMuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3JlZ2V4cC9vbmVwYXNzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWdl
eHAvcmVnZXhwLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMg
LWZnby1wa2dwYXRoPXJlZ2V4cCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL3J1bnRpbWUvZGVidWcubzogJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZGVidWcvZ2FyYmFnZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9kZWJ1Zy9zdGFjay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9kZWJ1Zy9zdHVicy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXJ1bnRpbWUvZGVidWcg
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9mbXQubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ZtdC9kb2MuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2ZtdC9mb3JtYXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Zt
dC9wcmludC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZm10L3NjYW4uZ28KKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Zm10ICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvcGF0aC9maWxlcGF0aC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcGF0aC9maWxlcGF0
aC9tYXRjaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcGF0aC9maWxlcGF0aC9wYXRoLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9wYXRoL2ZpbGVwYXRoL3BhdGhfdW5peC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcGF0aC9maWxlcGF0aC9zeW1saW5rLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9wYXRoL2ZpbGVwYXRoL3N5bWxpbmtfdW5peC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PXBhdGgvZmlsZXBhdGggJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAk
KEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9vcy9zaWduYWwubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL29zL3NpZ25hbC9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3NpZ25hbC9z
aWduYWwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3NpZ25hbC9zaWduYWxfdW5peC5nbwor
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09f
R09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW9zL3NpZ25hbCAkXiAtbyAkQCAmJiBcCisJb2JqY29w
eSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2luZGV4L3N1
ZmZpeGFycmF5Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbmRleC9zdWZmaXhhcnJheS9xc3Vm
c29ydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW5kZXgvc3VmZml4YXJyYXkvc3VmZml4YXJy
YXkuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbmRleC9zdWZmaXhhcnJheSAkXiAtbyAk
QCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09f
QlVJTEQpL2lvL2lvdXRpbC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW8vaW91dGlsL2lvdXRp
bC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW8vaW91dGlsL3RlbXBmaWxlLmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9aW8vaW91dGlsICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbWF0aC9iaWcubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL2FjY3VyYWN5X3N0cmluZy5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbWF0aC9iaWcvYXJpdGguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgv
YmlnL2FyaXRoX2RlY2xfcHVyZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9iaWcvZGVj
aW1hbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9iaWcvZG9jLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9tYXRoL2JpZy9mbG9hdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9i
aWcvZmxvYXRjb252LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9mbG9hdG1hcnNo
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9mdG9hLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL2JpZy9pbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL2lu
dGNvbnYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL2ludG1hcnNoLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9uYXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21h
dGgvYmlnL25hdGNvbnYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL3ByaW1lLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9yYXQuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL21hdGgvYmlnL3JhdGNvbnYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL3Jh
dG1hcnNoLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9yb3VuZGluZ21vZGVfc3Ry
aW5nLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQo
TElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykg
JChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bWF0aC9iaWcgJF4gLW8gJEAgJiYgXAor
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9k
ZWJ1Zy9wbGFuOW9iai5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvcGxhbjlvYmovZmls
ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvcGxhbjlvYmovcGxhbjlvYmouZ28KKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1kZWJ1Zy9wbGFuOW9iaiAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2RlYnVn
L2R3YXJmLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9kd2FyZi9idWYuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2RlYnVnL2R3YXJmL2NsYXNzX3N0cmluZy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vZGVidWcvZHdhcmYvY29uc3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVn
L2R3YXJmL2VudHJ5LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9kd2FyZi9saW5lLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9kd2FyZi9vcGVuLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9kZWJ1Zy9kd2FyZi90eXBlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9k
d2FyZi90eXBldW5pdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZHdhcmYvdW5pdC5n
bworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWRlYnVnL2R3YXJmICReIC1vICRAICYmIFwKKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY29t
cHJlc3MvbHp3Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9sencvcmVhZGVyLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9sencvd3JpdGVyLmdvCisJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9Y29tcHJlc3MvbHp3ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvYXJjaGl2ZS90YXIubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUvdGFyL2NvbW1vbi5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vYXJjaGl2ZS90YXIvZm9ybWF0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9hcmNo
aXZlL3Rhci9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUvdGFyL3N0YXRf
YXRpbS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYXJjaGl2ZS90YXIvc3RhdF91bml4LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9hcmNoaXZlL3Rhci9zdHJjb252LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9hcmNoaXZlL3Rhci93cml0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGli
Z286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAk
KGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1h
cmNoaXZlL3RhciAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2VuY29kaW5nL2hleC5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZW5jb2RpbmcvaGV4L2hleC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29k
aW5nL2hleCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkKKyQoTElCR09fQlVJTEQpL2VuY29kaW5nL3htbC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZW5jb2RpbmcveG1sL21hcnNoYWwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5n
L3htbC9yZWFkLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy94bWwvdHlwZWluZm8u
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL3htbC94bWwuZ28KKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1lbmNvZGluZy94bWwgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jb21wcmVzcy9mbGF0ZS5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvZmxhdGUvZGVmbGF0ZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvZmxhdGUvZGVmbGF0ZWZhc3QuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2NvbXByZXNzL2ZsYXRlL2RpY3RfZGVjb2Rlci5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vY29tcHJlc3MvZmxhdGUvaHVmZm1hbl9iaXRfd3JpdGVyLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9jb21wcmVzcy9mbGF0ZS9odWZmbWFuX2NvZGUuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2NvbXByZXNzL2ZsYXRlL2luZmxhdGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NvbXBy
ZXNzL2ZsYXRlL3JldmVyc2VfYml0cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3Mv
ZmxhdGUvdG9rZW4uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAor
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jb21wcmVzcy9mbGF0ZSAk
XiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQo
TElCR09fQlVJTEQpL2VuY29kaW5nL2Nzdi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2Rp
bmcvY3N2L3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvY3N2L3dyaXRl
ci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL2NzdiAkXiAtbyAkQCAmJiBc
CisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQp
L2dvbGFuZ19vcmcveC9uZXQvaHR0cDIvaHBhY2subzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
bGFuZ19vcmcveC9uZXQvaHR0cDIvaHBhY2svZW5jb2RlLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9nb2xhbmdfb3JnL3gvbmV0L2h0dHAyL2hwYWNrL2hwYWNrLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9nb2xhbmdfb3JnL3gvbmV0L2h0dHAyL2hwYWNrL2h1ZmZtYW4uZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvbGFuZ19vcmcveC9uZXQvaHR0cDIvaHBhY2svdGFibGVzLmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFuZ19vcmcveC9uZXQvaHR0cDIvaHBhY2sgJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9lbmNvZGluZy9nb2IubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5n
L2dvYi9kZWNfaGVscGVycy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvZ29iL2Rl
Y29kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvZ29iL2RlY29kZXIuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2VuY29kaW5nL2dvYi9lbmNfaGVscGVycy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5j
b2RpbmcvZ29iL2VuY29kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvZ29iL2Vu
Y29kZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9lcnJvci5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvZ29iL3R5cGUuZ28KKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlt
a2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28t
cGtncGF0aD1lbmNvZGluZy9nb2IgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9uZXQvdXJsLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9uZXQvdXJsL3VybC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC91
cmwgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
CiskKExJQkdPX0JVSUxEKS9jb250ZXh0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb250ZXh0
L2NvbnRleHQuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwg
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9Y29udGV4dCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2VuY29kaW5nL2pzb24ubzogJChMSUJH
T19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2pzb24vZGVjb2RlLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9lbmNvZGluZy9qc29uL2VuY29kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2Rp
bmcvanNvbi9mb2xkLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9qc29uL2luZGVu
dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvanNvbi9zY2FubmVyLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9qc29uL3N0cmVhbS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZW5jb2RpbmcvanNvbi90YWJsZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29k
aW5nL2pzb24vdGFncy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL2pzb24g
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9sb2cubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2xvZy9sb2cuZ28KKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bG9n
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvZGVidWcvZ29zeW0ubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVn
L2dvc3ltL3BjbG50YWIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2dvc3ltL3N5bXRh
Yi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWRlYnVnL2dvc3ltICReIC1vICRAICYmIFwK
KwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkv
Z29sYW5nX29yZy94L25ldC9pZG5hLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3Jn
L3gvbmV0L2lkbmEvaWRuYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L25l
dC9pZG5hL3B1bnljb2RlLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYm
IFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFu
Z19vcmcveC9uZXQvaWRuYSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC90ZXh0L3VuaWNvZGUv
bm9ybS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9u
b3JtL2NvbXBvc2l0aW9uLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4
dC91bmljb2RlL25vcm0vZm9ybWluZm8uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19v
cmcveC90ZXh0L3VuaWNvZGUvbm9ybS9pbnB1dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29s
YW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL2l0ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2dvbGFuZ19vcmcveC90ZXh0L3VuaWNvZGUvbm9ybS9ub3JtYWxpemUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3VuaWNvZGUvbm9ybS9yZWFkd3JpdGVyLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC91bmljb2RlL25vcm0vdGFibGVz
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC91bmljb2RlL25vcm0v
dHJhbnNmb3JtLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC91bmlj
b2RlL25vcm0vdHJpZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXZlbmRvci9nb2xhbmdf
b3JnL3gvdGV4dC91bmljb2RlL25vcm0gJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4
cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9taW1lLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9taW1lL2VuY29kZWR3b3JkLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9taW1l
L2dyYW1tYXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21pbWUvbWVkaWF0eXBlLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9taW1lL3R5cGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21pbWUv
dHlwZV91bml4LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMg
LWZnby1wa2dwYXRoPW1pbWUgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvdGV4dC93aWR0aC5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvd2lkdGgva2luZF9zdHJp
bmcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3dpZHRoL3RhYmxl
cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvd2lkdGgvdHJhbnNm
b3JtLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC93aWR0aC90cmll
dmFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC93aWR0aC93aWR0
aC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXZlbmRvci9nb2xhbmdfb3JnL3gvdGV4dC93
aWR0aCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL21pbWUvcXVvdGVkcHJpbnRhYmxlLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9taW1lL3F1b3RlZHByaW50YWJsZS9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL21pbWUvcXVvdGVkcHJpbnRhYmxlL3dyaXRlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPW1pbWUvcXVvdGVkcHJpbnRhYmxlICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvaW50ZXJuYWwu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2ludGVybmFsL2NodW5rZWQuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2ludGVybmFsL3Rlc3RjZXJ0LmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9bmV0L2h0dHAvaW50ZXJuYWwgJF4gLW8gJEAgJiYgXAorCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9mbGFnLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9mbGFnL2ZsYWcuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZmxhZyAkXiAtbyAkQCAmJiBcCisJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dv
L3Rva2VuLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90b2tlbi9wb3NpdGlvbi5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vZ28vdG9rZW4vc2VyaWFsaXplLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9nby90b2tlbi90b2tlbi5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL3Rva2Vu
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvdGV4dC90ZW1wbGF0ZS9wYXJzZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vdGV4dC90ZW1wbGF0ZS9wYXJzZS9sZXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQv
dGVtcGxhdGUvcGFyc2Uvbm9kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90ZW1wbGF0
ZS9wYXJzZS9wYXJzZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXRleHQvdGVtcGxhdGUv
cGFyc2UgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpCiskKExJQkdPX0JVSUxEKS90ZXh0L3NjYW5uZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L3RleHQvc2Nhbm5lci9zY2FubmVyLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAk
KG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIg
JEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dGV4dC9z
Y2FubmVyICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQorJChMSUJHT19CVUlMRCkvb3MvdXNlci5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mv
dXNlci9kZWNsc191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy91c2VyL2xpc3Rncm91
cHNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvdXNlci9sb29rdXAuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL29zL3VzZXIvbG9va3VwX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL3VzZXIvdXNlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW9zL3VzZXIgJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9uZXQvaW50ZXJuYWwvc29ja3Rlc3QubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9pbnRlcm5hbC9zb2NrdGVzdC9zd2l0Y2guZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9pbnRlcm5hbC9zb2NrdGVzdC9zd2l0Y2hfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9pbnRlcm5hbC9zb2NrdGVzdC9zd2l0Y2hfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbmV0L2ludGVybmFsL3NvY2t0ZXN0L3N5c19jbG9leGVjLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9uZXQvaW50ZXJuYWwvc29ja3Rlc3Qvc3lzX3VuaXguZ28KKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlt
a2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28t
cGtncGF0aD1uZXQvaW50ZXJuYWwvc29ja3Rlc3QgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nby9zY2FubmVyLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9zY2FubmVyL2Vycm9ycy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vZ28vc2Nhbm5lci9zY2FubmVyLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxp
YmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAg
JChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9
Z28vc2Nhbm5lciAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2ltYWdlL2dpZi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vaW1hZ2UvZ2lmL3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvZ2lmL3dy
aXRlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAk
KExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWltYWdlL2dpZiAkXiAtbyAkQCAmJiBc
CisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQp
L3Rlc3RpbmcvcXVpY2subzogJChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3RpbmcvcXVpY2svcXVp
Y2suZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXN0aW5nL3F1aWNrICReIC1vICRAICYm
IFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlM
RCkvb3MvZXhlYy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlYy9leGVjLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9vcy9leGVjL2V4ZWNfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL2V4ZWMvbHBfdW5peC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW9zL2V4ZWMg
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9kYXRhYmFzZS9zcWwvZHJpdmVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9n
by9kYXRhYmFzZS9zcWwvZHJpdmVyL2RyaXZlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGF0
YWJhc2Uvc3FsL2RyaXZlci90eXBlcy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWRhdGFi
YXNlL3NxbC9kcml2ZXIgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAk
KEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS90ZXN0aW5nL2lvdGVzdC5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vdGVzdGluZy9pb3Rlc3QvbG9nZ2VyLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by90ZXN0aW5nL2lvdGVzdC9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3Rpbmcv
aW90ZXN0L3dyaXRlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXRlc3RpbmcvaW90ZXN0
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvdGVzdGluZy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGVzdGluZy9h
bGxvY3MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3RpbmcvYmVuY2htYXJrLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby90ZXN0aW5nL2NvdmVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90
ZXN0aW5nL2V4YW1wbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3RpbmcvbWF0Y2guZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3RpbmcvdGVzdGluZy5nbworCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAor
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXN0aW5nICReIC1vICRA
ICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19C
VUlMRCkvbmV0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvYWRkcnNlbGVjdC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2Nnb19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bmV0L2Nnb19yZXNuZXcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9jZ29fc29ja25ldy5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2Nnb191bml4LmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9uZXQvY29uZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2RpYWwuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL25ldC9kbnNjbGllbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9kbnNjbGllbnRfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2Ruc2NvbmZpZ191
bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvZG5zbXNnLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9uZXQvZmRfbXV0ZXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9mZF9wb2xs
X3J1bnRpbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9mZF9wb3NpeC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbmV0L2ZkX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9m
aWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvZmlsZV91bml4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9uZXQvaG9vay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2hvb2tfY2xv
ZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2hvb2tfdW5peC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L2hvc3RzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaW50ZXJm
YWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaW50ZXJmYWNlX2xpbnV4LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvaXAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9pcHJh
d3NvY2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9pcHJhd3NvY2tfcG9zaXguZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9pcHNvY2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9pcHNvY2tfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9sb29rdXAuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9sb29rdXBfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbmV0L21hYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L25ldC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L25zcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3BhcnNlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvcGlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bmV0L3BvcnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9wb3J0X3VuaXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL25ldC9zZW5kZmlsZV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbmV0L3NvY2tfY2xvZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3NvY2tfbGlu
dXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zb2NrX3Bvc2l4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9uZXQvc29ja29wdF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L3NvY2tvcHRfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zb2Nrb3B0aXBfbGlu
dXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zb2Nrb3B0aXBfcG9zaXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL25ldC90Y3Bzb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQv
dGNwc29ja19wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3RjcHNvY2tvcHRfcG9z
aXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC90Y3Bzb2Nrb3B0X3VuaXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL25ldC91ZHBzb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQv
dWRwc29ja19wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3VuaXhzb2NrLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9uZXQvdW5peHNvY2tfcG9zaXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC93cml0ZXZfdW5peC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9kZWJ1Zy9tYWNoby5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvbWFjaG8vZmF0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9kZWJ1Zy9tYWNoby9maWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9t
YWNoby9tYWNoby5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJ
JChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWRlYnVnL21hY2hvICReIC1v
ICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJH
T19CVUlMRCkvZGVidWcvcGUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL3BlL2ZpbGUu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL3BlL3BlLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9kZWJ1Zy9wZS9zZWN0aW9uLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9wZS9z
dHJpbmcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL3BlL3N5bWJvbC5nbworCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWRlYnVnL3BlICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvYXJjaGl2ZS96aXAubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUvemlwL3JlYWRlci5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vYXJjaGl2ZS96aXAvcmVnaXN0ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Fy
Y2hpdmUvemlwL3N0cnVjdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYXJjaGl2ZS96aXAvd3Jp
dGVyLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQo
TElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykg
JChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9YXJjaGl2ZS96aXAgJF4gLW8gJEAgJiYg
XAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxE
KS9jb21wcmVzcy9nemlwLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9nemlwL2d1
bnppcC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvZ3ppcC9nemlwLmdvCisJJChj
YWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFD
VEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZM
QUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y29tcHJlc3MvZ3ppcCAkXiAtbyAkQCAmJiBcCisJb2JqY29w
eSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2NvbXByZXNz
L3psaWIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NvbXByZXNzL3psaWIvcmVhZGVyLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy96bGliL3dyaXRlci5nbworCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMg
LWZnby1wa2dwYXRoPWNvbXByZXNzL3psaWIgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8vZWxsaXB0aWMu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9lbGxpcHRpYy9lbGxpcHRpYy5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2VsbGlwdGljL3AyMjQuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NyeXB0by9lbGxpcHRpYy9wMjU2LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlw
dG8vZWxsaXB0aWMvcDI1Nl9nZW5lcmljLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdv
OiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChk
aXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5
cHRvL2VsbGlwdGljICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY3J5cHRvL2RzYS5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vY3J5cHRvL2RzYS9kc2EuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQo
bm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAk
QCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8v
ZHNhICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQorJChMSUJHT19CVUlMRCkvZ28vY29uc3RhbnQubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
L2NvbnN0YW50L3ZhbHVlLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYm
IFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Z28vY29uc3RhbnQg
JF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCisk
KExJQkdPX0JVSUxEKS9jcnlwdG8vcmFuZC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L3JhbmQvZWFnYWluLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vcmFuZC9yYW5kLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vcmFuZC9yYW5kX2xpbnV4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9jcnlwdG8vcmFuZC9yYW5kX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2NyeXB0by9yYW5kL3V0aWwuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQo
bm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAk
QCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8v
cmFuZCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkKKyQoTElCR09fQlVJTEQpL2VuY29kaW5nL2FzbjEubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2VuY29kaW5nL2FzbjEvYXNuMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvYXNu
MS9jb21tb24uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2FzbjEvbWFyc2hhbC5n
bworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL2FzbjEgJF4gLW8gJEAgJiYgXAor
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9k
YXRhYmFzZS9zcWwubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2RhdGFiYXNlL3NxbC9jb252ZXJ0
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kYXRhYmFzZS9zcWwvY3R4dXRpbC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZGF0YWJhc2Uvc3FsL3NxbC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPWRhdGFiYXNlL3NxbCAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvL2FzdC5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZ28vYXN0L2FzdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYXN0L2NvbW1lbnRt
YXAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2FzdC9maWx0ZXIuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvL2FzdC9pbXBvcnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2FzdC9w
cmludC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYXN0L3Jlc29sdmUuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvL2FzdC9zY29wZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYXN0
L3dhbGsuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby9hc3QgJF4gLW8gJEAgJiYgXAor
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9p
bnRlcm5hbC9wcHJvZi9wcm9maWxlLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9w
cHJvZi9wcm9maWxlL2VuY29kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvcHBy
b2YvcHJvZmlsZS9maWx0ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3Bwcm9m
L3Byb2ZpbGUvbGVnYWN5X3Byb2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFs
L3Bwcm9mL3Byb2ZpbGUvcHJvZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwv
cHByb2YvcHJvZmlsZS9wcm90by5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvcHBy
b2YvcHJvZmlsZS9wcnVuZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWludGVybmFsL3Bw
cm9mL3Byb2ZpbGUgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6
Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9pbWFnZS9wbmcubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2ltYWdlL3BuZy9wYWV0aC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvcG5nL3Jl
YWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvcG5nL3dyaXRlci5nbworCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWltYWdlL3BuZyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAu
Z29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2RlYnVnL2VsZi5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZWxmL2VsZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZGVidWcvZWxmL2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2VsZi9yZWFk
ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1kZWJ1Zy9lbGYgJF4gLW8gJEAgJiYgXAor
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS90
ZXh0L3RlbXBsYXRlLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0L3RlbXBsYXRlL2RvYy5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90ZW1wbGF0ZS9leGVjLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby90ZXh0L3RlbXBsYXRlL2Z1bmNzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90
ZXh0L3RlbXBsYXRlL2hlbHBlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90ZW1wbGF0
ZS9vcHRpb24uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQvdGVtcGxhdGUvdGVtcGxhdGUu
Z28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJH
T19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJ
QkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXh0L3RlbXBsYXRlICReIC1vICRAICYmIFwK
KwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkv
aW50ZXJuYWwvdHJhY2UubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3RyYWNlL2dv
cm91dGluZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3RyYWNlL29yZGVyLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC90cmFjZS9wYXJzZXIuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2ludGVybmFsL3RyYWNlL3dyaXRlci5nbworCSQoY2FsbCB2ZXJib3NlX2Nt
ZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1r
ZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1w
a2dwYXRoPWludGVybmFsL3RyYWNlICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY21kL2ludGVybmFsL2Jyb3dzZXIu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NtZC9pbnRlcm5hbC9icm93c2VyL2Jyb3dzZXIuZ28K
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jbWQvaW50ZXJuYWwvYnJvd3NlciAkXiAtbyAkQCAm
JiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJ
TEQpL2NyeXB0by9yc2EubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9yc2EvcGtjczF2
MTUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9yc2EvcHNzLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8vcnNhL3JzYS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNy
eXB0by9yc2EgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89
LmdveCkpCiskKExJQkdPX0JVSUxEKS9pbnRlcm5hbC90ZXN0ZW52Lm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9pbnRlcm5hbC90ZXN0ZW52L3Rlc3RlbnYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2ludGVybmFsL3Rlc3RlbnYvdGVzdGVudl9jZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2lu
dGVybmFsL3Rlc3RlbnYvdGVzdGVudl9ub3R3aW4uZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08s
bGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAt
cCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD1pbnRlcm5hbC90ZXN0ZW52ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQg
JEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvY3J5cHRvL2VjZHNhLm86ICQoTElCR09f
RVhUUkFDVEVEKS9nby9jcnlwdG8vZWNkc2EvZWNkc2EuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2Rp
ciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD1jcnlwdG8vZWNkc2EgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8veDUwOS9wa2l4Lm86ICQoTElC
R09fRVhUUkFDVEVEKS9nby9jcnlwdG8veDUwOS9wa2l4L3BraXguZ28KKwkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwK
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1jcnlwdG8veDUwOS9wa2l4ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvcnVudGltZS9wcHJvZi9p
bnRlcm5hbC9wcm90b3Bwcm9mLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3Bwcm9m
L2ludGVybmFsL3Byb3RvcHByb2YvcHJvdG9tZW1wcm9maWxlLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9ydW50aW1lL3Bwcm9mL2ludGVybmFsL3Byb3RvcHByb2YvcHJvdG9wcHJvZi5nbworCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPXJ1bnRpbWUvcHByb2YvaW50ZXJuYWwvcHJvdG9wcHJvZiAk
XiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQo
TElCR09fQlVJTEQpL2dvL3BhcnNlci5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vcGFyc2Vy
L2ludGVyZmFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vcGFyc2VyL3BhcnNlci5nbwor
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09f
R09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL3BhcnNlciAkXiAtbyAkQCAmJiBcCisJb2JqY29w
eSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvL3ByaW50
ZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3ByaW50ZXIvbm9kZXMuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvL3ByaW50ZXIvcHJpbnRlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPWdvL3ByaW50ZXIgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAk
KEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9ydW50aW1lL3Bwcm9mLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL3Bwcm9mL3Bwcm9mLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIg
LXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9cnVudGltZS9wcHJvZiAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvL2RvYy5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZ28vZG9jL2NvbW1lbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2RvYy9kb2Mu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2RvYy9leGFtcGxlLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9nby9kb2MvZXhwb3J0cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vZG9jL2Zp
bHRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vZG9jL3JlYWRlci5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZ28vZG9jL3N5bm9wc2lzLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxp
YmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAg
JChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9
Z28vZG9jICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQorJChMSUJHT19CVUlMRCkvaHRtbC90ZW1wbGF0ZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vaHRtbC90ZW1wbGF0ZS9hdHRyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBs
YXRlL2NvbnRlbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2h0bWwvdGVtcGxhdGUvY29udGV4
dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0ZS9jc3MuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2h0bWwvdGVtcGxhdGUvZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9o
dG1sL3RlbXBsYXRlL2Vycm9yLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRl
L2VzY2FwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0ZS9odG1sLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL2pzLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9odG1sL3RlbXBsYXRlL3RlbXBsYXRlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1s
L3RlbXBsYXRlL3RyYW5zaXRpb24uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2h0bWwvdGVtcGxh
dGUvdXJsLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aHRtbC90ZW1wbGF0ZSAkXiAtbyAk
QCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09f
QlVJTEQpL3Rlc3RpbmcvaW50ZXJuYWwvdGVzdGRlcHMubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L3Rlc3RpbmcvaW50ZXJuYWwvdGVzdGRlcHMvZGVwcy5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPXRlc3RpbmcvaW50ZXJuYWwvdGVzdGRlcHMgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nby90eXBlcy5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvYXBpLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9nby90eXBlcy9hc3NpZ25tZW50cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMv
YnVpbHRpbnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2NhbGwuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2NoZWNrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9n
by90eXBlcy9jb252ZXJzaW9ucy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvZGVj
bC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvZXJyb3JzLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9nby90eXBlcy9ldmFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBl
cy9leHByLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9leHByc3RyaW5nLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9pbml0b3JkZXIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2dvL3R5cGVzL2xhYmVscy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMv
bG9va3VwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9tZXRob2RzZXQuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL29iamVjdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZ28vdHlwZXMvb2Jqc2V0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9vcGVy
YW5kLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9vcmRlcmluZy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvcGFja2FnZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z28vdHlwZXMvcHJlZGljYXRlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvcmVz
b2x2ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3JldHVybi5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvc2NvcGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
L3R5cGVzL3NlbGVjdGlvbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvc2l6ZXMu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3N0bXQuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2dvL3R5cGVzL3R5cGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3R5
cGVzdHJpbmcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3R5cGV4cHIuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL3VuaXZlcnNlLmdvCisJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJ
bWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdv
LXBrZ3BhdGg9Z28vdHlwZXMgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9nby9mb3JtYXQubzogJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvL2Zvcm1hdC9mb3JtYXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2Zv
cm1hdC9pbnRlcm5hbC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
CisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2Zvcm1hdCAkXiAt
byAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElC
R09fQlVJTEQpL2dvL2J1aWxkLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9idWlsZC9idWls
ZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYnVpbGQvZG9jLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9nby9idWlsZC9yZWFkLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9idWlsZC9z
eXNsaXN0LmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Z28vYnVpbGQgJF4gLW8gJEAgJiYg
XAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxE
KS9uZXQvdGV4dHByb3RvLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvdGV4dHByb3RvL2hl
YWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3RleHRwcm90by9waXBlbGluZS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3RleHRwcm90by9yZWFkZXIuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL25ldC90ZXh0cHJvdG8vdGV4dHByb3RvLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvdGV4dHByb3RvL3dyaXRlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC90
ZXh0cHJvdG8gJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89
LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8veDUwOS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vY3J5cHRvL3g1MDkvY2VydF9wb29sLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8v
eDUwOS9wZW1fZGVjcnlwdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3g1MDkvcGtj
czEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5L3BrY3M4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9jcnlwdG8veDUwOS9yb290LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9j
cnlwdG8veDUwOS9yb290X2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8veDUw
OS9yb290X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5L3NlYzEuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5L3ZlcmlmeS5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vY3J5cHRvL3g1MDkveDUwOS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNy
eXB0by94NTA5ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQorJChMSUJHT19CVUlMRCkvZXhwL3Byb3h5Lm86ICQoTElCR09fRVhUUkFDVEVEKS9n
by9leHAvcHJveHkvZGlyZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9leHAvcHJveHkvcGVy
X2hvc3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2V4cC9wcm94eS9wcm94eS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZXhwL3Byb3h5L3NvY2tzNS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPWV4cC9wcm94eSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9uZXQvbGV4L2h0dHBsZXgu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9uZXQvbGV4L2h0dHBsZXgvaHR0
cGxleC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAk
KExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXZlbmRvci9nb2xhbmdfb3JnL3gvbmV0
L2xleC9odHRwbGV4ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbG9nL3N5c2xvZy5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbG9nL3N5c2xvZy9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2xvZy9zeXNsb2cv
c3lzbG9nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9sb2cvc3lzbG9nL3N5c2xvZ191bml4Lmdv
CisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bG9nL3N5c2xvZyAkXiAtbyAkQCAmJiBcCisJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL25ldC9t
YWlsLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvbWFpbC9tZXNzYWdlLmdvCisJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9bmV0L21haWwgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9taW1lL211bHRpcGFydC5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWltZS9tdWx0aXBhcnQvZm9ybWRhdGEuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL21pbWUvbXVsdGlwYXJ0L211bHRpcGFydC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbWltZS9tdWx0aXBhcnQvd3JpdGVyLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIg
LXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9bWltZS9tdWx0aXBhcnQgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9jcnlwdG8vdGxzLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8vdGxzL2FsZXJ0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlw
dG8vdGxzL2NpcGhlcl9zdWl0ZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by90bHMv
Y29tbW9uLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vdGxzL2Nvbm4uZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2NyeXB0by90bHMvaGFuZHNoYWtlX2NsaWVudC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vY3J5cHRvL3Rscy9oYW5kc2hha2VfbWVzc2FnZXMuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2NyeXB0by90bHMvaGFuZHNoYWtlX3NlcnZlci5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vY3J5cHRvL3Rscy9rZXlfYWdyZWVtZW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9j
cnlwdG8vdGxzL3ByZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3Rscy90aWNrZXQu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by90bHMvdGxzLmdvCisJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
CisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9Y3J5cHRvL3RscyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhw
b3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL2dvL2ludGVybmFsL2djaW1wb3J0
ZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2ludGVybmFsL2djaW1wb3J0ZXIvYmltcG9y
dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vaW50ZXJuYWwvZ2NpbXBvcnRlci9leHBvcnRk
YXRhLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9pbnRlcm5hbC9nY2ltcG9ydGVyL2djaW1w
b3J0ZXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby9pbnRlcm5hbC9nY2ltcG9ydGVy
ICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQor
JChMSUJHT19CVUlMRCkvZ28vaW50ZXJuYWwvZ2NjZ29pbXBvcnRlci5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vZ28vaW50ZXJuYWwvZ2NjZ29pbXBvcnRlci9nY2Nnb2luc3RhbGxhdGlvbi5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vaW50ZXJuYWwvZ2NjZ29pbXBvcnRlci9pbXBvcnRlci5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vaW50ZXJuYWwvZ2NjZ29pbXBvcnRlci9wYXJzZXIu
Z28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJH
T19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJ
QkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby9pbnRlcm5hbC9nY2Nnb2ltcG9ydGVyICRe
IC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChM
SUJHT19CVUlMRCkvZ28vaW1wb3J0ZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2ltcG9y
dGVyL2ltcG9ydGVyLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAk
QCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIgJEApICYmIFwK
KwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Z28vaW1wb3J0ZXIgJF4g
LW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJ
QkdPX0JVSUxEKS9uZXQvc210cC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3NtdHAvYXV0
aC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3NtdHAvc210cC5nbworCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XAorCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMg
LWZnby1wa2dwYXRoPW5ldC9zbXRwICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvaHR0cHRyYWNlLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9odHRwdHJhY2UvdHJhY2UuZ28KKwkkKGNh
bGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNU
RUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvaHR0cC9odHRwdHJhY2UgJF4gLW8gJEAgJiYgXAorCW9i
amNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9uZXQv
aHR0cC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvY2xpZW50LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9uZXQvaHR0cC9jb29raWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9odHRwL2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvZmlsZXRyYW5zcG9y
dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvZnMuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC9odHRwL2gyX2J1bmRsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0
dHAvaGVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9odHRwLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9qYXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9odHRwL21ldGhvZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvcmVxdWVzdC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvcmVzcG9uc2UuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL25ldC9odHRwL3NlcnZlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0
dHAvc25pZmYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL3N0YXR1cy5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvdHJhbnNmZXIuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL25ldC9odHRwL3RyYW5zcG9ydC5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9o
dHRwICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQorJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvcHByb2YubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9odHRwL3Bwcm9mL3Bwcm9mLmdvCisJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAk
KG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtkaXIgLXAgJChkaXIg
JEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bmV0L2h0
dHAvcHByb2YgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89
LmdveCkpCiskKExJQkdPX0JVSUxEKS9leHB2YXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2V4
cHZhci9leHB2YXIuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9ZXhwdmFyICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvaHR0cHRlc3Qubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2h0dHB0ZXN0L2h0dHB0ZXN0LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9odHRwdGVzdC9yZWNvcmRlci5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L2h0dHAvaHR0cHRlc3Qvc2VydmVyLmdvCisJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJ
bWtkaXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdv
LXBrZ3BhdGg9bmV0L2h0dHAvaHR0cHRlc3QgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9jZ2kubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2NnaS9jaGlsZC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbmV0L2h0dHAvY2dpL2hvc3QuZ28KKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGli
Z286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwKKwlta2RpciAtcCAk
KGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1u
ZXQvaHR0cC9jZ2kgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6
Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9jb29raWVqYXIubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL25ldC9odHRwL2Nvb2tpZWphci9qYXIuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL25ldC9odHRwL2Nvb2tpZWphci9wdW55Y29kZS5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPW5ldC9odHRwL2Nvb2tpZWphciAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhw
b3J0ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL25ldC9odHRwL2h0dHB1dGlsLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9odHRwdXRpbC9kdW1wLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9uZXQvaHR0cC9odHRwdXRpbC9odHRwdXRpbC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbmV0L2h0dHAvaHR0cHV0aWwvcGVyc2lzdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbmV0L2h0dHAvaHR0cHV0aWwvcmV2ZXJzZXByb3h5LmdvCisJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9bmV0L2h0dHAvaHR0cHV0aWwgJF4gLW8gJEAgJiYgXAorCW9iamNvcHkgLWogLmdvX2V4
cG9ydCAkQCAkKEA6Lm89LmdveCkpCiskKExJQkdPX0JVSUxEKS9uZXQvcnBjLm86ICQoTElCR09f
RVhUUkFDVEVEKS9nby9uZXQvcnBjL2NsaWVudC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L3JwYy9kZWJ1Zy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3JwYy9zZXJ2ZXIuZ28KKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwKKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXAorCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvcnBjICReIC1vICRAICYmIFwKKwlvYmpjb3B5IC1q
IC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQorJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvZmNn
aS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvZmNnaS9jaGlsZC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvZmNnaS9mY2dpLmdvCisJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcCisJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwKKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9bmV0L2h0dHAvZmNnaSAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkKKyQoTElCR09fQlVJTEQpL25ldC9ycGMvanNvbnJwYy5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3JwYy9qc29ucnBjL2NsaWVudC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbmV0L3JwYy9qc29ucnBjL3NlcnZlci5nbworCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXAorCW1rZGly
IC1wICQoZGlyICRAKSAmJiBcCisJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPW5ldC9ycGMvanNvbnJwYyAkXiAtbyAkQCAmJiBcCisJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkKKworTElCR09fT0JKUyArPSAkKExJQkdPX0JVSUxEKS9ydW50aW1l
L2ludGVybmFsL2F0b21pYy5vXAorCSQoTElCR09fQlVJTEQpL3J1bnRpbWUvaW50ZXJuYWwvc3lz
Lm8gXAorCSQoTElCR09fQlVJTEQpL2Vycm9ycy5vIFwKKwkkKExJQkdPX0JVSUxEKS9pbnRlcm5h
bC9yYWNlLm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9pbnRlcm5hbC9jaXBoZXJody5vIFwK
KwkkKExJQkdPX0JVSUxEKS91bmljb2RlL3V0ZjgubyBcCisJJChMSUJHT19CVUlMRCkvY3J5cHRv
L3N1YnRsZS5vIFwKKwkkKExJQkdPX0JVSUxEKS9jb250YWluZXIvbGlzdC5vIFwKKwkkKExJQkdP
X0JVSUxEKS9tYXRoLm8gXAorCSQoTElCR09fQlVJTEQpL2NvbnRhaW5lci9yaW5nLm8gXAorCSQo
TElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9jcnlwdG8vY3VydmUyNTUxOS5vIFwKKwkkKExJQkdP
X0JVSUxEKS9pbnRlcm5hbC9uZXR0cmFjZS5vIFwKKwkkKExJQkdPX0JVSUxEKS9zeW5jL2F0b21p
Yy5vIFwKKwkkKExJQkdPX0JVSUxEKS91bmljb2RlLm8gXAorCSQoTElCR09fQlVJTEQpL2VuY29k
aW5nLm8gXAorCSQoTElCR09fQlVJTEQpL3VuaWNvZGUvdXRmMTYubyBcCisJJChMSUJHT19CVUlM
RCkvaW1hZ2UvY29sb3IubyBcCisJJChMSUJHT19CVUlMRCkvcnVudGltZS5vIFwKKwkkKExJQkdP
X0JVSUxEKS9pbWFnZS9jb2xvci9wYWxldHRlLm8gXAorCSQoTElCR09fQlVJTEQpL2dvbGFuZ19v
cmcveC9jcnlwdG8vcG9seTEzMDUubyBcCisJJChMSUJHT19CVUlMRCkvbWF0aC9jbXBseC5vIFwK
KwkkKExJQkdPX0JVSUxEKS9zeW5jLm8gXAorCSQoTElCR09fQlVJTEQpL3N0cmNvbnYubyBcCisJ
JChMSUJHT19CVUlMRCkvaW8ubyBcCisJJChMSUJHT19CVUlMRCkvaW50ZXJuYWwvc2luZ2xlZmxp
Z2h0Lm8gXAorCSQoTElCR09fQlVJTEQpL21hdGgvcmFuZC5vIFwKKwkkKExJQkdPX0JVSUxEKS9z
eXNjYWxsLm8gXAorCSQoTElCR09fQlVJTEQpL2hhc2gubyBcCisJJChMSUJHT19CVUlMRCkvcnVu
dGltZS90cmFjZS5vIFwKKwkkKExJQkdPX0JVSUxEKS9zdHJpbmdzLm8gXAorCSQoTElCR09fQlVJ
TEQpL2J5dGVzLm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9jaXBoZXIubyBcCisJJChMSUJH
T19CVUlMRCkvaGFzaC9jcmMzMi5vIFwKKwkkKExJQkdPX0JVSUxEKS9oYXNoL2Zudi5vIFwKKwkk
KExJQkdPX0JVSUxEKS9jcnlwdG8vaG1hYy5vIFwKKwkkKExJQkdPX0JVSUxEKS9oYXNoL2FkbGVy
MzIubyBcCisJJChMSUJHT19CVUlMRCkvaGFzaC9jcmM2NC5vIFwKKwkkKExJQkdPX0JVSUxEKS9j
cnlwdG8ubyBcCisJJChMSUJHT19CVUlMRCkvcmVmbGVjdC5vIFwKKwkkKExJQkdPX0JVSUxEKS9l
bmNvZGluZy9iYXNlNjQubyBcCisJJChMSUJHT19CVUlMRCkvY3J5cHRvL3JjNC5vIFwKKwkkKExJ
QkdPX0JVSUxEKS9lbmNvZGluZy9hc2NpaTg1Lm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9h
ZXMubyBcCisJJChMSUJHT19CVUlMRCkvY3J5cHRvL21kNS5vIFwKKwkkKExJQkdPX0JVSUxEKS9j
cnlwdG8vc2hhNTEyLm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9zaGEyNTYubyBcCisJJChM
SUJHT19CVUlMRCkvY3J5cHRvL3NoYTEubyBcCisJJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94
L3RleHQvdHJhbnNmb3JtLm8gXAorCSQoTElCR09fQlVJTEQpL2J1ZmlvLm8gXAorCSQoTElCR09f
QlVJTEQpL3RleHQvdGFid3JpdGVyLm8gXAorCSQoTElCR09fQlVJTEQpL2VuY29kaW5nL2Jhc2Uz
Mi5vIFwKKwkkKExJQkdPX0JVSUxEKS9wYXRoLm8gXAorCSQoTElCR09fQlVJTEQpL2h0bWwubyBc
CisJJChMSUJHT19CVUlMRCkvaW1hZ2UubyBcCisJJChMSUJHT19CVUlMRCkvaW1hZ2UvaW50ZXJu
YWwvaW1hZ2V1dGlsLm8gXAorCSQoTElCR09fQlVJTEQpL2ltYWdlL2pwZWcubyBcCisJJChMSUJH
T19CVUlMRCkvaW1hZ2UvZHJhdy5vIFwKKwkkKExJQkdPX0JVSUxEKS9lbmNvZGluZy9iaW5hcnku
byBcCisJJChMSUJHT19CVUlMRCkvc29ydC5vIFwKKwkkKExJQkdPX0JVSUxEKS9pbnRlcm5hbC9z
eXNjYWxsL3VuaXgubyBcCisJJChMSUJHT19CVUlMRCkvZXhwL3Rlcm1pbmFsLm8gXAorCSQoTElC
R09fQlVJTEQpL3RpbWUubyBcCisJJChMSUJHT19CVUlMRCkvY29tcHJlc3MvYnppcDIubyBcCisJ
JChMSUJHT19CVUlMRCkvY29udGFpbmVyL2hlYXAubyBcCisJJChMSUJHT19CVUlMRCkvcmVnZXhw
L3N5bnRheC5vIFwKKwkkKExJQkdPX0JVSUxEKS9lbmNvZGluZy9wZW0ubyBcCisJJChMSUJHT19C
VUlMRCkvY3J5cHRvL2Rlcy5vIFwKKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvY3J5cHRv
L2NoYWNoYTIwcG9seTEzMDUvaW50ZXJuYWwvY2hhY2hhMjAubyBcCisJJChMSUJHT19CVUlMRCkv
Z29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1Lm8gXAorCSQoTElCR09fQlVJTEQp
L29zLm8gXAorCSQoTElCR09fQlVJTEQpL3JlZ2V4cC5vIFwKKwkkKExJQkdPX0JVSUxEKS9ydW50
aW1lL2RlYnVnLm8gXAorCSQoTElCR09fQlVJTEQpL2ZtdC5vIFwKKwkkKExJQkdPX0JVSUxEKS9w
YXRoL2ZpbGVwYXRoLm8gXAorCSQoTElCR09fQlVJTEQpL29zL3NpZ25hbC5vIFwKKwkkKExJQkdP
X0JVSUxEKS9pbmRleC9zdWZmaXhhcnJheS5vIFwKKwkkKExJQkdPX0JVSUxEKS9pby9pb3V0aWwu
byBcCisJJChMSUJHT19CVUlMRCkvbWF0aC9iaWcubyBcCisJJChMSUJHT19CVUlMRCkvZGVidWcv
cGxhbjlvYmoubyBcCisJJChMSUJHT19CVUlMRCkvZGVidWcvZHdhcmYubyBcCisJJChMSUJHT19C
VUlMRCkvY29tcHJlc3MvbHp3Lm8gXAorCSQoTElCR09fQlVJTEQpL2FyY2hpdmUvdGFyLm8gXAor
CSQoTElCR09fQlVJTEQpL2VuY29kaW5nL2hleC5vIFwKKwkkKExJQkdPX0JVSUxEKS9lbmNvZGlu
Zy94bWwubyBcCisJJChMSUJHT19CVUlMRCkvY29tcHJlc3MvZmxhdGUubyBcCisJJChMSUJHT19C
VUlMRCkvZW5jb2RpbmcvY3N2Lm8gXAorCSQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9uZXQv
aHR0cDIvaHBhY2subyBcCisJJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvZ29iLm8gXAorCSQoTElC
R09fQlVJTEQpL25ldC91cmwubyBcCisJJChMSUJHT19CVUlMRCkvY29udGV4dC5vIFwKKwkkKExJ
QkdPX0JVSUxEKS9lbmNvZGluZy9qc29uLm8gXAorCSQoTElCR09fQlVJTEQpL2xvZy5vIFwKKwkk
KExJQkdPX0JVSUxEKS9kZWJ1Zy9nb3N5bS5vIFwKKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3Jn
L3gvbmV0L2lkbmEubyBcCisJJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L3RleHQvdW5pY29k
ZS9ub3JtLm8gXAorCSQoTElCR09fQlVJTEQpL21pbWUubyBcCisJJChMSUJHT19CVUlMRCkvZ29s
YW5nX29yZy94L3RleHQvd2lkdGgubyBcCisJJChMSUJHT19CVUlMRCkvbWltZS9xdW90ZWRwcmlu
dGFibGUubyBcCisJJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvaW50ZXJuYWwubyBcCisJJChMSUJH
T19CVUlMRCkvZmxhZy5vIFwKKwkkKExJQkdPX0JVSUxEKS9nby90b2tlbi5vIFwKKwkkKExJQkdP
X0JVSUxEKS90ZXh0L3RlbXBsYXRlL3BhcnNlLm8gXAorCSQoTElCR09fQlVJTEQpL3RleHQvc2Nh
bm5lci5vIFwKKwkkKExJQkdPX0JVSUxEKS9vcy91c2VyLm8gXAorCSQoTElCR09fQlVJTEQpL25l
dC9pbnRlcm5hbC9zb2NrdGVzdC5vIFwKKwkkKExJQkdPX0JVSUxEKS9nby9zY2FubmVyLm8gXAor
CSQoTElCR09fQlVJTEQpL2ltYWdlL2dpZi5vIFwKKwkkKExJQkdPX0JVSUxEKS90ZXN0aW5nL3F1
aWNrLm8gXAorCSQoTElCR09fQlVJTEQpL29zL2V4ZWMubyBcCisJJChMSUJHT19CVUlMRCkvZGF0
YWJhc2Uvc3FsL2RyaXZlci5vIFwKKwkkKExJQkdPX0JVSUxEKS90ZXN0aW5nL2lvdGVzdC5vIFwK
KwkkKExJQkdPX0JVSUxEKS90ZXN0aW5nLm8gXAorCSQoTElCR09fQlVJTEQpL25ldC5vIFwKKwkk
KExJQkdPX0JVSUxEKS9kZWJ1Zy9tYWNoby5vIFwKKwkkKExJQkdPX0JVSUxEKS9kZWJ1Zy9wZS5v
IFwKKwkkKExJQkdPX0JVSUxEKS9hcmNoaXZlL3ppcC5vIFwKKwkkKExJQkdPX0JVSUxEKS9jb21w
cmVzcy9nemlwLm8gXAorCSQoTElCR09fQlVJTEQpL2NvbXByZXNzL3psaWIubyBcCisJJChMSUJH
T19CVUlMRCkvY3J5cHRvL2VsbGlwdGljLm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by9kc2Eu
byBcCisJJChMSUJHT19CVUlMRCkvZ28vY29uc3RhbnQubyBcCisJJChMSUJHT19CVUlMRCkvY3J5
cHRvL3JhbmQubyBcCisJJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvYXNuMS5vIFwKKwkkKExJQkdP
X0JVSUxEKS9kYXRhYmFzZS9zcWwubyBcCisJJChMSUJHT19CVUlMRCkvZ28vYXN0Lm8gXAorCSQo
TElCR09fQlVJTEQpL2ludGVybmFsL3Bwcm9mL3Byb2ZpbGUubyBcCisJJChMSUJHT19CVUlMRCkv
aW1hZ2UvcG5nLm8gXAorCSQoTElCR09fQlVJTEQpL2RlYnVnL2VsZi5vIFwKKwkkKExJQkdPX0JV
SUxEKS90ZXh0L3RlbXBsYXRlLm8gXAorCSQoTElCR09fQlVJTEQpL2ludGVybmFsL3RyYWNlLm8g
XAorCSQoTElCR09fQlVJTEQpL2NtZC9pbnRlcm5hbC9icm93c2VyLm8gXAorCSQoTElCR09fQlVJ
TEQpL2NyeXB0by9yc2EubyBcCisJJChMSUJHT19CVUlMRCkvaW50ZXJuYWwvdGVzdGVudi5vIFwK
KwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vZWNkc2EubyBcCisJJChMSUJHT19CVUlMRCkvY3J5cHRv
L3g1MDkvcGtpeC5vIFwKKwkkKExJQkdPX0JVSUxEKS9ydW50aW1lL3Bwcm9mL2ludGVybmFsL3By
b3RvcHByb2YubyBcCisJJChMSUJHT19CVUlMRCkvZ28vcGFyc2VyLm8gXAorCSQoTElCR09fQlVJ
TEQpL2dvL3ByaW50ZXIubyBcCisJJChMSUJHT19CVUlMRCkvcnVudGltZS9wcHJvZi5vIFwKKwkk
KExJQkdPX0JVSUxEKS9nby9kb2MubyBcCisJJChMSUJHT19CVUlMRCkvaHRtbC90ZW1wbGF0ZS5v
IFwKKwkkKExJQkdPX0JVSUxEKS90ZXN0aW5nL2ludGVybmFsL3Rlc3RkZXBzLm8gXAorCSQoTElC
R09fQlVJTEQpL2dvL3R5cGVzLm8gXAorCSQoTElCR09fQlVJTEQpL2dvL2Zvcm1hdC5vIFwKKwkk
KExJQkdPX0JVSUxEKS9nby9idWlsZC5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvdGV4dHByb3Rv
Lm8gXAorCSQoTElCR09fQlVJTEQpL2NyeXB0by94NTA5Lm8gXAorCSQoTElCR09fQlVJTEQpL2V4
cC9wcm94eS5vIFwKKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvbmV0L2xleC9odHRwbGV4
Lm8gXAorCSQoTElCR09fQlVJTEQpL2xvZy9zeXNsb2cubyBcCisJJChMSUJHT19CVUlMRCkvbmV0
L21haWwubyBcCisJJChMSUJHT19CVUlMRCkvbWltZS9tdWx0aXBhcnQubyBcCisJJChMSUJHT19C
VUlMRCkvY3J5cHRvL3Rscy5vIFwKKwkkKExJQkdPX0JVSUxEKS9nby9pbnRlcm5hbC9nY2ltcG9y
dGVyLm8gXAorCSQoTElCR09fQlVJTEQpL2dvL2ludGVybmFsL2djY2dvaW1wb3J0ZXIubyBcCisJ
JChMSUJHT19CVUlMRCkvZ28vaW1wb3J0ZXIubyBcCisJJChMSUJHT19CVUlMRCkvbmV0L3NtdHAu
byBcCisJJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvaHR0cHRyYWNlLm8gXAorCSQoTElCR09fQlVJ
TEQpL25ldC9odHRwLm8gXAorCSQoTElCR09fQlVJTEQpL25ldC9odHRwL3Bwcm9mLm8gXAorCSQo
TElCR09fQlVJTEQpL2V4cHZhci5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9odHRwdGVz
dC5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9jZ2kubyBcCisJJChMSUJHT19CVUlMRCkv
bmV0L2h0dHAvY29va2llamFyLm8gXAorCSQoTElCR09fQlVJTEQpL25ldC9odHRwL2h0dHB1dGls
Lm8gXAorCSQoTElCR09fQlVJTEQpL25ldC9ycGMubyBcCisJJChMSUJHT19CVUlMRCkvbmV0L2h0
dHAvZmNnaS5vIFwKKwkkKExJQkdPX0JVSUxEKS9uZXQvcnBjL2pzb25ycGMubyBcCisKLS0gCjIu
MTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:59:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:59:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDl9r-0005LV-F2; Fri, 27 Sep 2019 07:59:19 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=opzP=XW=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDl9p-0005LI-QU
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 07:59:17 +0000
X-Inumbo-ID: b2f7e43e-e0fc-11e9-966f-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id b2f7e43e-e0fc-11e9-966f-12813bfff9fa;
 Fri, 27 Sep 2019 07:59:15 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id AE0CF41393;
 Fri, 27 Sep 2019 09:59:14 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Fri, 27 Sep 2019 10:00:01 +0200
Message-Id: <20190927080004.32333-1-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [UNIKRAFT/HTTP_PARSER PATCH v4 0/3] Initial port of
 http-parser to Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIGh0dHAtcGFyc2VyIHRvIFVuaWtyYWZ0IGFzIGFu
IGV4dGVybmFsCmxpYnJhcnkuIE5ld2xpYmMgaXMgcmVxdWlyZWQuCgpUZXN0ZWQgd2l0aCAndGVz
dC5jJyBzdXBwb3J0ZWQgYnkgdGhlIGxpYnJhcnkuIEFsbW9zdCBhbGwgdGVzdCBhcmUKcGFzc2lu
Zywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICd0ZXN0IHZlcnkgbGFyZ2UgY2h1bmtlZCByZXNwb25z
ZScKdGhlICdyZXNwb25zZSBzY2FuIC4uLicgdGVzdHMuCgpDaGFuZ2VzOgp2My0+djQ6Ci0gTm8g
Y2hhbmdlcy4gUmVzdWJtaXNzaW9uIGR1ZSB0byBQYXRjaHdvcmtzIGlzc3VlLgp2Mi0+djM6Ci0g
RWRpdGVkIHRoZSB2ZXJzaW9uIG51bWJlciB0byByZW1vdmUgdGhlICd2JyBzbyB3ZSBjYW4gcmUt
dXNlIHRoZSB2YXJpYWJsZSBmb3IgdGhlIHN1YmRpcgotIFByZXBhcmUgYW4gaW5jbHVkZSBmb2xk
ZXIgdGhhdCBqdXN0IGhhcyBsaW5rcyB0byB0aGUgaGVhZGVyIGZpbGVzCi0gQWRkZWQgcnVsZXMg
Zm9yIGxpbmtpbmcgdGhlIGhlYWRlciBmaWxlcyBpbiB0aGUgbmV3IGluY2x1ZGUgZm9sZGVyCnYx
LT52MjoKLSBFZGl0ZWQgQ29uZmlnLnVrIHRvIHVzZSAnY29uZmlnJyBpbnN0ZWFkIG9mICdtZW51
Y29uZmlnJwotIEVkaXRlZCBDb25maWcudWsgYW5kIGNoYW5nZWQgdGhlICdzZWxlY3QgSEFWRV9M
SUJDJyB0byAnc2VsZWN0IExJQk5FV0xJQkMnIGFzIGl0IGRlcGVuZHMgbmV3bGliCi0gRWRpdGVk
IENvbmZpZy51ayBhbmQgY2hhbmdlZCB3aGl0ZSBzcGFjZXMgZm9yIHRhYnMKLSBFZGl0ZWQgTWFr
ZWZpbGUudWsgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IGZyb20gJ2h0dHBfcGFy
c2VyJyB0byAnbGliaHR0cF9wYXJzZXInCi0gRWRpdGVkIE1ha2VmaWxlLnVrIHRvIHJlbW92ZSB0
aGUgL2luY2x1ZGUgZm9sZGVyIGFzIHRoZXJlIGlzIG5vbmUgaW4gdGhlIGFyY2hpdmUKClNhbnRp
YWdvIFBhZ2FuaSAoMyk6CiAgSW50cm9kdWNlIGxpYnJhcnkgc2tlbGV0b24KICBBZGQgTWFrZWZp
bGUudWsKICBFeHBvcnQgc3ltYm9scwoKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKwogQ09OVFJJ
QlVUSU5HLm1kIHwgIDQgKysrCiBDT1BZSU5HLm1kICAgICAgfCAzOSArKysrKysrKysrKysrKysr
KysrKysrKysrCiBDb25maWcudWsgICAgICAgfCAgNCArKysKIE1BSU5UQUlORVJTLm1kICB8IDEx
ICsrKysrKysrCiBNYWtlZmlsZS51ayAgICAgfCA3NSArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrCiBSRUFETUUubWQgICAgICAgfCAgNSArKysrCiBleHBv
cnRzeW1zLnVrICAgfCAxNCArKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMTU2IGluc2VydGlv
bnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT0RJTkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBDT05UUklCVVRJTkcubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCiBjcmVh
dGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBjcmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMu
bWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awogY3JlYXRlIG1vZGUgMTAwNjQ0IFJF
QURNRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsKCi0tIAoyLjE3LjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:59:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:59:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDl9u-0005M7-Gq; Fri, 27 Sep 2019 07:59:22 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=opzP=XW=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDl9s-0005Lq-Uq
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 07:59:20 +0000
X-Inumbo-ID: b4dca94c-e0fc-11e9-97fb-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id b4dca94c-e0fc-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 07:59:18 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id 0635E41393;
 Fri, 27 Sep 2019 09:59:18 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Fri, 27 Sep 2019 10:00:03 +0200
Message-Id: <20190927080004.32333-3-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927080004.32333-1-santiago.pagani@neclab.eu>
References: <20190927080004.32333-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/HTTP_PARSER PATCH v4 2/3] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogTWFrZWZpbGUudWsgfCA3NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDc1IGluc2VydGlvbnMoKykKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBNYWtlZmlsZS51awoKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFr
ZWZpbGUudWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA3OWZiZgotLS0g
L2Rldi9udWxsCisrKyBiL01ha2VmaWxlLnVrCkBAIC0wLDAgKzEsNzUgQEAKKyMgIGh0dHAtcGFy
c2VyIE1ha2VmaWxlLnVjCisjCisjICBBdXRob3JzOiBGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWlj
aUBuZWNsYWIuZXU+CisjCisjCisjICBDb3B5cmlnaHQgKGMpIDIwMTksIE5FQyBFdXJvcGUgTHRk
LiwgTkVDIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgIGFyZSBtZXQ6CisjCisjICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjICAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyAgICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElT
IgorIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklC
VVRPUlMgQkUKKyMgIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjICBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyAgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorIworIyAgVEhJUyBIRUFERVIg
TUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyMKKworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKKyMgTGlicmFyeSByZWdpc3RyYXRpb24KKyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCiskKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmh0dHBfcGFyc2VyLCQoQ09ORklH
X0xJQkhUVFBfUEFSU0VSKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNvdXJjZXMK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9WRVJTSU9OPTIuOC4xCitM
SUJIVFRQX1BBUlNFUl9VUkw9aHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9odHRwLXBhcnNlci9h
cmNoaXZlL3YkKExJQkhUVFBfUEFSU0VSX1ZFUlNJT04pLnppcAorTElCSFRUUF9QQVJTRVJfU1VC
RElSPWh0dHAtcGFyc2VyLSQoTElCSFRUUF9QQVJTRVJfVkVSU0lPTikKKyQoZXZhbCAkKGNhbGwg
ZmV0Y2gsbGliaHR0cF9wYXJzZXIsJChMSUJIVFRQX1BBUlNFUl9VUkwpLHYkKExJQkhUVFBfUEFS
U0VSX1ZFUlNJT04pLnppcCkpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEhlbHBlcnMK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQ9JChMSUJI
VFRQX1BBUlNFUl9PUklHSU4pLyQoTElCSFRUUF9QQVJTRVJfU1VCRElSKQorCisjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IGluY2x1ZGVzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworJChjYWxsIG1rX3N1Yl9idWlsZF9kaXIsbGliaHR0cF9wYXJzZXIvaW5jbHVkZSkKK0NJTkNM
VURFUy0kKENPTkZJR19MSUJIVFRQX1BBUlNFUikgKz0gLUkkKExJQkhUVFBfUEFSU0VSX0JVSUxE
KS9pbmNsdWRlCitDUFBJTkNMVURFUy0kKENPTkZJR19MSUJIVFRQX1BBUlNFUikgKz0gLUkkKExJ
QkhUVFBfUEFSU0VSX0JVSUxEKS9pbmNsdWRlCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisj
IFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJIVFRQX1BBUlNFUl9TUkNTLXkg
Kz0gJChMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQpL2h0dHBfcGFyc2VyLmMKKworIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKyMgTGlicmF5IEFQSSBoZWFkZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIworJChMSUJIVFRQX1BBUlNFUl9FWFRSQUNURUQpLyUuaDogJChMSUJIVFRQX1BBUlNFUl9C
VUlMRCkvLm9yaWdpbgorCUAjIGVtcHR5IHJlY2lwZSB0byBlbmZvcmNlIGRlcGVuZGVuY3kgdG8g
YXJjaGl2ZSBleHRyYWN0aW9uCisKKyQoTElCSFRUUF9QQVJTRVJfQlVJTEQpL2luY2x1ZGUvJS5o
OiAkKExJQkhUVFBfUEFSU0VSX0VYVFJBQ1RFRCkvJS5oCisJJChjYWxsIGJ1aWxkX2NtZCxMTixs
aWJodHRwX3BhcnNlciwkQCxsbiAtc2YgJDwgJEApCisKK1VLX1BSRVBBUkUgKz0gJChMSUJIVFRQ
X1BBUlNFUl9CVUlMRCkvaW5jbHVkZS9odHRwX3BhcnNlci5oCi0tIAoyLjE3LjEKCgpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFp
bGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:59:24 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:59:24 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDl9w-0005Mo-Iy; Fri, 27 Sep 2019 07:59:24 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=opzP=XW=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDl9u-0005MQ-QY
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 07:59:22 +0000
X-Inumbo-ID: b4272086-e0fc-11e9-966f-12813bfff9fa
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id b4272086-e0fc-11e9-966f-12813bfff9fa;
 Fri, 27 Sep 2019 07:59:17 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id C98DE44612;
 Fri, 27 Sep 2019 09:59:16 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Fri, 27 Sep 2019 10:00:02 +0200
Message-Id: <20190927080004.32333-2-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927080004.32333-1-santiago.pagani@neclab.eu>
References: <20190927080004.32333-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/HTTP_PARSER PATCH v4 1/3] Introduce
 library skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKwogQ09OVFJJQlVUSU5HLm1kIHwgIDQgKysrKwog
Q09QWUlORy5tZCAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCiBDb25maWcudWsgICAgICAgfCAgNCArKysrCiBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysr
KysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDUgKysrKysKIGV4cG9ydHN5bXMudWsgICB8ICAw
CiA3IGZpbGVzIGNoYW5nZWQsIDY3IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBD
T0RJTkdfU1RZTEUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT05UUklCVVRJTkcubWQKIGNyZWF0
ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1kCiBjcmVhdGUgbW9kZSAxMDA2NDQgQ29uZmlnLnVrCiBj
cmVhdGUgbW9kZSAxMDA2NDQgTUFJTlRBSU5FUlMubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFE
TUUubWQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBleHBvcnRzeW1zLnVrCgpkaWZmIC0tZ2l0IGEvQ09E
SU5HX1NUWUxFLm1kIGIvQ09ESU5HX1NUWUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU3MzAwNDEKLS0tIC9kZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQKQEAg
LTAsMCArMSw0IEBACitDb2RpbmcgU3R5bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIg
dG8gdGhlIGBDT0RJTkdfU1RZTEUubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3Np
dG9yeS4KZGlmZiAtLWdpdCBhL0NPTlRSSUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjU1ZWNhCi0tLSAvZGV2L251bGwKKysr
IGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0wLDAgKzEsNCBAQAorQ29udHJpYnV0aW5nIHRvIFVuaWty
YWZ0Cis9PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05U
UklCVVRJTkcubWRgIGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAt
LWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZSU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjFjZmUyYTUKLS0tIC9kZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0wLDAg
KzEsMzkgQEAKK0xpY2Vuc2UKKz09PT09PT0KKworVW5pa3JhZnQgaHR0cC1wYXJzZXIgd3JhcHBl
cnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMg
d3JhcHBlciBjb2RlIHRvIGJ1aWxkIGh0dHAtcGFyc2VyIHdpdGggVW5pa3JhZnQuCitFYWNoIEMg
Y29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBzaG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlCitj
b3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBj
b2RlIGlzCitsaWNlbnNlZC4gSWYgc3VjaCBhIGxpY2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUg
Zm9sbG93aW5nIGxpY2Vuc2UKK25vdGljZSB3aWxsIGFwcGx5OgorCisJQ29weXJpZ2h0IChjKSAy
MDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworCWFyZSBtZXQ6CisKKwkxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorCSAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKwkyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKwkgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCTMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorCSAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKwlUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKwlBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisJSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKwlBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisJTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorCUNPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisJSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KwlDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisJUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBiL0NvbmZpZy51awpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmZmNTJmCi0tLSAvZGV2L251bGwKKysrIGIvQ29u
ZmlnLnVrCkBAIC0wLDAgKzEsNCBAQAorY29uZmlnIExJQkhUVFBfUEFSU0VSCisJYm9vbCAiaHR0
cC1wYXJzZXIgLSBhIHBhcnNlciBmb3IgSFRUUCBtZXNzYWdlcyIKKwlkZWZhdWx0IHkKKwlzZWxl
Y3QgTElCTkVXTElCQwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQgYi9NQUlOVEFJTkVSUy5t
ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWRjYjc0Ci0tLSAvZGV2L251
bGwKKysrIGIvTUFJTlRBSU5FUlMubWQKQEAgLTAsMCArMSwxMSBAQAorTWFpbnRhaW5lcnMgTGlz
dAorPT09PT09PT09PT09PT09PQorCitGb3Igbm90ZXMgb24gaG93IHRvIHJlYWQgdGhpcyBpbmZv
cm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAgaW4KK3RoZSBtYWluIFVu
aWtyYWZ0IHJlcG9zaXRvcnkuCisKKwlMSUJIVFRQX1BBUlNFUi1VTklLUkFGVAorCU06CUZlbGlw
ZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5ldT4KKwlNOglTYW50aWFnbyBQYWdhbmkgPHNh
bnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+CisJTDoJbWluaW9zLWRldmVsQGxpc3RzLnhlbi5vcmcK
KwlGOiAqCmRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMGZjYjUzZQotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5t
ZApAQCAtMCwwICsxLDUgQEAKK2h0dHAtcGFyc2VyIGZvciBVbmlrcmFmdAorPT09PT09PT09PT09
PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhl
IGRvY3VtZW50YXRpb24gaW4gdGhlIGBkb2MvYAorc3ViZGlyZWN0b3J5IG9mIHRoZSBtYWluIHVu
aWtyYWZ0IHJlcG9zaXRvcnkuCmRpZmYgLS1naXQgYS9leHBvcnRzeW1zLnVrIGIvZXhwb3J0c3lt
cy51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tIAoyLjE3
LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5p
b3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpo
dHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 07:59:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 07:59:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDl9z-0005NY-KQ; Fri, 27 Sep 2019 07:59:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=opzP=XW=neclab.eu=santiago.pagani@srs-us1.protection.inumbo.net>)
 id 1iDl9x-0005NF-SU
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 07:59:25 +0000
X-Inumbo-ID: b55bad8c-e0fc-11e9-97fb-bc764e2007e4
Received: from queen.nlehd.de (unknown [195.37.154.80])
 by localhost (Halon) with ESMTP
 id b55bad8c-e0fc-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 07:59:19 +0000 (UTC)
Received: from localhost (c133.ant-net [192.168.0.7])
 by queen.nlehd.de (Postfix) with ESMTP id D37D344612;
 Fri, 27 Sep 2019 09:59:18 +0200 (CEST)
From: Santiago Pagani <santiago.pagani@neclab.eu>
To: minios-devel@lists.xen.org
Date: Fri, 27 Sep 2019 10:00:04 +0200
Message-Id: <20190927080004.32333-4-santiago.pagani@neclab.eu>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927080004.32333-1-santiago.pagani@neclab.eu>
References: <20190927080004.32333-1-santiago.pagani@neclab.eu>
Subject: [Minios-devel] [UNIKRAFT/HTTP_PARSER PATCH v4 3/3] Export symbols
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Santiago Pagani <santiago.pagani@neclab.eu>
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PgpTaWdu
ZWQtb2ZmLWJ5OiBTYW50aWFnbyBQYWdhbmkgPHNhbnRpYWdvLnBhZ2FuaUBuZWNsYWIuZXU+Ci0t
LQogZXhwb3J0c3ltcy51ayB8IDE0ICsrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTQg
aW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2V4cG9ydHN5bXMudWsgYi9leHBvcnRzeW1zLnVr
CmluZGV4IGU2OWRlMjkuLjk5NWIyNTYgMTAwNjQ0Ci0tLSBhL2V4cG9ydHN5bXMudWsKKysrIGIv
ZXhwb3J0c3ltcy51awpAQCAtMCwwICsxLDE0IEBACitodHRwX2JvZHlfaXNfZmluYWwKK2h0dHBf
ZXJybm9fZGVzY3JpcHRpb24KK2h0dHBfZXJybm9fbmFtZQoraHR0cF9tZXNzYWdlX25lZWRzX2Vv
ZgoraHR0cF9tZXRob2Rfc3RyCitodHRwX3BhcnNlcl9leGVjdXRlCitodHRwX3BhcnNlcl9pbml0
CitodHRwX3BhcnNlcl9wYXJzZV91cmwKK2h0dHBfcGFyc2VyX3BhdXNlCitodHRwX3BhcnNlcl9z
ZXR0aW5nc19pbml0CitodHRwX3BhcnNlcl91cmxfaW5pdAoraHR0cF9wYXJzZXJfdmVyc2lvbgor
aHR0cF9zaG91bGRfa2VlcF9hbGl2ZQoraHR0cF9zdHJlcnJvcl90YWIKLS0gCjIuMTcuMQoKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:20:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:20:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlUn-0000Kh-RQ; Fri, 27 Sep 2019 08:20:57 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlUm-0000KQ-LW
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:20:56 +0000
X-Inumbo-ID: b9683f5b-e0ff-11e9-9670-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id b9683f5b-e0ff-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:20:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 8FDCC105739;
 Fri, 27 Sep 2019 10:20:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id hqlPJqfAhTGD; Fri, 27 Sep 2019 10:20:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 6A3E3105735;
 Fri, 27 Sep 2019 10:20:54 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:20:54 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:20:54
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/GCC PATCH v2 1/5] Introduce library skeleton
Thread-Index: AQHVdH3Qj2mvA6FWNUyd0oa2GarVIqc/L/mA
Date: Fri, 27 Sep 2019 08:20:53 +0000
Message-ID: <0B6B989F-428E-4B7C-BBCA-EAE08FA3CDAA@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
 <20190926151911.11587-2-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926151911.11587-2-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <A3126DBC44CC3B49A1894F3474CE3CE3@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/GCC PATCH v2 1/5] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsIHRoaXMgcGF0Y2ggbG9va3MgZ29vZC4NCg0KVGhhbmtzLA0KDQotLSBG
ZWxpcGUNCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4NCg0KT24gMjYuMDkuMTksIDE3OjE5LCAiQ2hhcmFsYW1wb3MgTWFpbmFzIiA8Q2hhcmFsYW1w
b3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBXZSB1c2UgdGhlIEJTRC0zLUNsYXVz
ZSBsaWNlbnNlIGZvciB0aGlzIGxpYnJhcnkgZ2x1ZSBjb2RlLg0KICAgIA0KICAgIFNpZ25lZC1v
ZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4N
CiAgICBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0K
ICAgIC0tLQ0KICAgICAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysr
KysrKysNCiAgICAgQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKw0KICAgICBDT05UUklCVVRJTkcu
bWQgfCAgNCArKysrDQogICAgIENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKw0KICAgICBDb25maWcudWsgICAgICAgfCAgOSArKysrKysr
KysNCiAgICAgTUFJTlRBSU5FUlMubWQgIHwgMTEgKysrKysrKysrKysNCiAgICAgUkVBRE1FLm1k
ICAgICAgIHwgIDcgKysrKysrKw0KICAgICBleHBvcnRzeW1zLnVrICAgfCAgMSArDQogICAgIDgg
ZmlsZXMgY2hhbmdlZCwgMTAyIGluc2VydGlvbnMoKykNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0
IC5naXRpZ25vcmUNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZA0KICAg
ICBjcmVhdGUgbW9kZSAxMDA2NDQgQ09OVFJJQlVUSU5HLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBDT1BZSU5HLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsNCiAgICAg
Y3JlYXRlIG1vZGUgMTAwNjQ0IE1BSU5UQUlORVJTLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBSRUFETUUubWQNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGV4cG9ydHN5bXMudWsNCiAgICAN
CiAgICBkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUNCiAgICBuZXcgZmlsZSBt
b2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjc1ZDJmZDMNCiAgICAtLS0gL2Rldi9udWxs
DQogICAgKysrIGIvLmdpdGlnbm9yZQ0KICAgIEBAIC0wLDAgKzEsMjcgQEANCiAgICArKi5kZXBl
bmQNCiAgICArKi5vDQogICAgKyouYQ0KICAgICsqLmQNCiAgICArKi5zbw0KICAgICsqLm9yaWcN
CiAgICArKi5yZWoNCiAgICArKi5iYWsNCiAgICArKi5zd3ANCiAgICArKn4NCiAgICArLCoNCiAg
ICArXCMqXCMNCiAgICArLlwjKg0KICAgICtcI18qXCMNCiAgICArLlwjXyoNCiAgICArIS5naXRp
Z25vcmUNCiAgICArLioNCiAgICArDQogICAgKyMgZ251IGdsb2JhbCBmaWxlcw0KICAgICtHUEFU
SA0KICAgICtHUlRBR1MNCiAgICArR1NZTVMNCiAgICArR1RBR1MNCiAgICArDQogICAgKyMgY3Nj
b3BlIGZpbGVzDQogICAgK2NzY29wZS4qDQogICAgK25jc2NvcGUuKg0KICAgIGRpZmYgLS1naXQg
YS9DT0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZTEUubWQNCiAgICBuZXcgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjU3MzAwNDENCiAgICAtLS0gL2Rldi9udWxsDQogICAg
KysrIGIvQ09ESU5HX1NUWUxFLm1kDQogICAgQEAgLTAsMCArMSw0IEBADQogICAgK0NvZGluZyBT
dHlsZQ0KICAgICs9PT09PT09PT09PT0NCiAgICArDQogICAgK1BsZWFzZSByZWZlciB0byB0aGUg
YENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lg0K
ICAgIGRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcubWQgYi9DT05UUklCVVRJTkcubWQNCiAgICBu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjE0ZjZhYzYNCiAgICAtLS0g
L2Rldi9udWxsDQogICAgKysrIGIvQ09OVFJJQlVUSU5HLm1kDQogICAgQEAgLTAsMCArMSw0IEBA
DQogICAgK0NvbnRyaWJ1dGluZyB0byBVbmlrcmFmdA0KICAgICs9PT09PT09PT09PT09PT09PT09
PT09PT0NCiAgICArDQogICAgK1BsZWFzZSByZWZlciB0byB0aGUgYENPTlRSSUJVVElORy5tZGAg
ZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lg0KICAgIGRpZmYgLS1naXQgYS9D
T1BZSU5HLm1kIGIvQ09QWUlORy5tZA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uZDM0OWYzYQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9DT1BZSU5H
Lm1kDQogICAgQEAgLTAsMCArMSwzOSBAQA0KICAgICtMaWNlbnNlDQogICAgKz09PT09PT0NCiAg
ICArDQogICAgK1VuaWtyYWZ0IGdjYyB3cmFwcGVycw0KICAgICstLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tDQogICAgKw0KICAgICtUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMgd3Jh
cHBlciBjb2RlIHRvIGJ1aWxkIGdjYyB3aXRoIFVuaWtyYWZ0Lg0KICAgICtFYWNoIEMgY29kZSBm
aWxlIGluIHRoaXMgcmVwb3NpdG9yeSBzaG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlDQogICAgK2Nv
cHlyaWdodCBvd25lciBhbmQgdW5kZXIgd2hpY2ggdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhlIGNv
ZGUgaXMNCiAgICArbGljZW5zZWQuIElmIHN1Y2ggYSBsaWNlbmNlIG5vdGUgaXMgbWlzc2luZywg
dGhlIGZvbGxvd2luZyBjb3B5cmlnaHQNCiAgICArbm90aWNlIHdpbGwgYXBwbHk6DQogICAgKw0K
ICAgICsJQ29weXJpZ2h0IChjKSBZZWFyLCBJbnN0aXR1dGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4NCiAgICArDQogICAgKwlSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCiAgICArCW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KICAgICsJYXJlIG1l
dDoNCiAgICArDQogICAgKwkxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICsJICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICsJMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQNCiAgICArCSAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAgICArCSAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgKwkzLiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2Yg
aXRzDQogICAgKwkgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KICAgICsJICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAgICArDQogICAgKwlUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTICJBUyBJUyINCiAgICArCUFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCiAgICArCUlNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFDQogICAgKwlBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFDQogICAgKwlMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SDQogICAgKwlDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRg0KICAgICsJU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQogICAgKwlJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTg0KICAg
ICsJQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkNCiAgICArCUFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQogICAgKwlQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4NCiAgICArDQogICAgZGlmZiAtLWdpdCBhL0NvbmZpZy51ayBi
L0NvbmZpZy51aw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
ZmE0ZGEwNw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9Db25maWcudWsNCiAgICBAQCAt
MCwwICsxLDkgQEANCiAgICArbWVudWNvbmZpZyBMSUJHQ0MNCiAgICArCWJvb2wgImdjYyAtIEdO
VSBDb21waWxlciBDb2xsZWN0aW9uIGxpYnJhcmllcyINCiAgICArCWRlZmF1bHQgbg0KICAgICsJ
c2VsZWN0IExJQk5PTElCQyBpZiAhSEFWRV9MSUJDDQogICAgKwlzZWxlY3QgTElCVUtERUJVRw0K
ICAgICsJc2VsZWN0IExJQlVLQUxMT0MNCiAgICArDQogICAgK2lmIExJQkdDQw0KICAgICtlbmRp
Zg0KICAgIGRpZmYgLS1naXQgYS9NQUlOVEFJTkVSUy5tZCBiL01BSU5UQUlORVJTLm1kDQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi4zMjM4YjMwDQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL01BSU5UQUlORVJTLm1kDQogICAgQEAgLTAsMCArMSwxMSBA
QA0KICAgICtNYWludGFpbmVycyBMaXN0DQogICAgKz09PT09PT09PT09PT09PT0NCiAgICArDQog
ICAgK0ZvciBub3RlcyBvbiBob3cgdG8gcmVhZCB0aGlzIGluZm9ybWF0aW9uLCBwbGVhc2UgcmVm
ZXIgdG8gYE1BSU5UQUlORVJTLm1kYCBpbg0KICAgICt0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0
b3J5Lg0KICAgICsNCiAgICArCUxJQkdDQy1VTklLUkFGVA0KICAgICsJTToJQ29zdGluIEx1cHUg
PGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAgICArCU06CUZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1
aWNpQG5lY2xhYi5ldT4NCiAgICArCUw6CW1pbmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnDQogICAg
KwlGOiAqDQogICAgZGlmZiAtLWdpdCBhL1JFQURNRS5tZCBiL1JFQURNRS5tZA0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNWNlNjY3Nw0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9SRUFETUUubWQNCiAgICBAQCAtMCwwICsxLDcgQEANCiAgICArZ2Nj
IGZvciBVbmlrcmFmdA0KICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICsN
CiAgICArVGhpcyBpcyB0aGUgcG9ydCBvZiBnY2MgZm9yIFVuaWtyYWZ0IGFzIGV4dGVybmFsIGxp
YnJhcnkuDQogICAgKw0KICAgICtQbGVhc2UgcmVmZXIgdG8gdGhlIGBSRUFETUUubWRgIGFzIHdl
bGwgYXMgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIGBkb2MvYA0KICAgICtzdWJkaXJlY3Rvcnkg
b2YgdGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4NCiAgICBkaWZmIC0tZ2l0IGEvZXhwb3J0
c3ltcy51ayBiL2V4cG9ydHN5bXMudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGlu
ZGV4IDAwMDAwMDAuLmM4NmMzZjMNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvZXhwb3J0
c3ltcy51aw0KICAgIEBAIC0wLDAgKzEgQEANCiAgICArbm9uZQ0KICAgIFwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQ0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KDQpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFp
bGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:22:00 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:22:00 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlVn-0000R5-Um; Fri, 27 Sep 2019 08:21:59 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlVn-0000Qz-Bz
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:21:59 +0000
X-Inumbo-ID: de96bf0e-e0ff-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id de96bf0e-e0ff-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 08:21:57 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 66CCAF200A;
 Fri, 27 Sep 2019 10:21:56 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id T0ZIcSDpPqEJ; Fri, 27 Sep 2019 10:21:56 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 3BF58F2006;
 Fri, 27 Sep 2019 10:21:52 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:21:51 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:21:51
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/GCC PATCH v2 2/5] Add Makefile.uk
Thread-Index: AQHVdH3Twgj9fKzT1U6sflQRyDtus6c/MD6A
Date: Fri, 27 Sep 2019 08:21:51 +0000
Message-ID: <58B7098E-145D-4DBE-B1A4-775C78F223D5@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
 <20190926151911.11587-3-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926151911.11587-3-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <7C28805EB204014F849DD0AFF5F21CDC@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/GCC PATCH v2 2/5] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsIHRoaXMgcGF0Y2ggbG9va3MgZ29vZC4NCg0KVGhhbmtzLA0KDQotLSBG
ZWxpcGUNCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjE5LCAiQ2hhcmFsYW1wb3MgTWFpbmFzIiA8Q2hhcmFs
YW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBHQ0MgaXMgYSBzdWl0ZSBvZiBt
dWx0aXBsZSBsaWJyYXJpZXMuIEluIHRoaXMgcGF0Y2ggd2UgaW50cm9kdWNlIG9ubHkgdGhlIGJh
c2ljDQogICAgY29udGVudHMgZm9yIHRoZSBNYWtlZmlsZS4NCiAgICANCiAgICBTaWduZWQtb2Zm
LWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+DQog
ICAgU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAg
ICAtLS0NCiAgICAgTWFrZWZpbGUudWsgfCA2MSArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKw0KICAgICAxIGZpbGUgY2hhbmdlZCwgNjEgaW5zZXJ0
aW9ucygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgTWFrZWZpbGUudWsNCiAgICANCiAgICBk
aWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51aw0KICAgIG5ldyBmaWxlIG1vZGUg
MTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uMmE1NzJkZA0KICAgIC0tLSAvZGV2L251bGwNCiAg
ICArKysgYi9NYWtlZmlsZS51aw0KICAgIEBAIC0wLDAgKzEsNjEgQEANCiAgICArIyAgU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KICAgICsjDQogICAgKyMgIGdjYyBNYWtl
ZmlsZS51aw0KICAgICsjDQogICAgKyMgIEF1dGhvcnM6IENoYXJhbGFtcG9zIE1haW5hcyA8Y2hh
cmFsYW1wb3MubWFpbmFzQG5lY2xhYi5ldT4NCiAgICArIyAgICAgICAgICAgQ29zdGluIEx1cHUg
PGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAgICArIw0KICAgICsjICBDb3B5cmlnaHQgKGMpIDIw
MTksIE5FQyBFdXJvcGUgTHRkLiwgTkVDIENvcnBvcmF0aW9uDQogICAgKyMgICAgICAgICAgICAg
ICAgMjAxOSwgVW5pdmVyc2l0eSBQb2xpdGVobmljYSBvZiBCdWNoYXJlc3QNCiAgICArIw0KICAg
ICsjICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQNCiAgICArIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQogICAgKyMgIGFyZSBtZXQ6DQogICAg
KyMNCiAgICArIyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICArIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICsjICAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dA0KICAgICsjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogICAgKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQogICAgKyMg
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1l
cyBvZiBpdHMNCiAgICArIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCiAgICArIyAgICAgdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCiAgICArIw0KICAg
ICsjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCiAgICArIyAgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KICAgICsj
ICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQ0KICAgICsjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFDQogICAgKyMgIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1INCiAgICArIyAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCiAgICArIyAgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTDQog
ICAgKyMgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElODQogICAgKyMgIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQogICAgKyMgIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFDQogICAgKyMgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLg0KICAg
ICsjDQogICAgKyMgIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVE
IElOIEFOWSBXQVkuDQogICAgKyMNCiAgICArDQogICAgKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
DQogICAgKyMgTGlicmFyeSByZWdpc3RyYXRpb24NCiAgICArIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMNCiAgICArJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJnY2MsJChDT05GSUdfTElCR0NDKSkp
DQogICAgKw0KICAgICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICsjIE9yaWdpbmFsIHNv
dXJjZXMNCiAgICArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICArTElCR0NDX1ZFUlNJT049
Ny4zLjANCiAgICArTElCR0NDX1VSTD1odHRwczovL2Z0cC5nbnUub3JnL2dudS9nY2MvZ2NjLSQo
TElCR0NDX1ZFUlNJT04pL2djYy0kKExJQkdDQ19WRVJTSU9OKS50YXIuZ3oNCiAgICArTElCR0ND
X1NVQkRJUj1nY2MtJChMSUJHQ0NfVkVSU0lPTikNCiAgICArJChldmFsICQoY2FsbCBmZXRjaCxs
aWJnY2MsJChMSUJHQ0NfVVJMKSkpDQogICAgKw0KICAgICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iw0KICAgICsjIEhlbHBlcnMNCiAgICArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICArTElC
R0NDX0VYVFJBQ1RFRCA9ICQoTElCR0NDX09SSUdJTikvZ2NjLSQoTElCR0NDX1ZFUlNJT04pDQog
ICAgKw0KICAgICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICsjIExpYnJhcnkgaW5jbHVk
ZXMNCiAgICArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICArQ0lOQ0xVREVTLSQoQ09ORklH
X0xJQkdDQykgICArPSAtSSQoTElCR0NDX0JBU0UpL2luY2x1ZGUNCiAgICArQ1hYSU5DTFVERVMt
JChDT05GSUdfTElCR0NDKSArPSAtSSQoTElCR0NDX0JBU0UpL2luY2x1ZGUNCiAgICAtLSANCiAg
ICAyLjE3LjENCiAgICANCiAgICANCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:23:51 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:23:51 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlXb-0000U6-5h; Fri, 27 Sep 2019 08:23:51 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlXZ-0000U1-Rh
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:23:49 +0000
X-Inumbo-ID: 1f3cdc00-e100-11e9-9670-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 1f3cdc00-e100-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:23:46 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id CABE8F200A;
 Fri, 27 Sep 2019 10:23:44 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kYLzJ_aUKPUY; Fri, 27 Sep 2019 10:23:44 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 83155F2006;
 Fri, 27 Sep 2019 10:23:40 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:23:40 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:23:40
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/GCC PATCH v2 3/5] Port libbacktrace library
Thread-Index: AQHVdH3U/+WNTuJKqECD13UEIAd6mac/ML6A
Date: Fri, 27 Sep 2019 08:23:39 +0000
Message-ID: <A1ADAC5D-0BAC-44E9-8D7F-1ABAC82B29E3@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
 <20190926151911.11587-4-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926151911.11587-4-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <0886B2269F0C36499BF30F110F4999EE@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/GCC PATCH v2 3/5] Port libbacktrace
 library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsIHRoaXMgcGF0Y2ggbG9va3MgZ29vZC4gSSBtaWdodCBtb2RpZnkgdGhl
IGNvbW1pdCBtZXNzYWdlIHNsaWdodGx5ICh0aGVyZSdzIG5vIG5lZWQgdG8gc3RhdGUgdGhhdCB3
ZSBjb3VsZCBoYXZlIGdlbmVyYXRlZCB0aGUgaGVhZGVycyBkdXJpbmcgYnVpbGQpLg0KDQpUaGFu
a3MsDQoNCi0tIEZlbGlwZQ0KDQpSZXZpZXdlZC1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVp
Y2lAbmVjbGFiLmV1Pg0K77u/DQpPbiAyNi4wOS4xOSwgMTc6MTksICJDaGFyYWxhbXBvcyBNYWlu
YXMiIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFRoaXMgcG9y
dCBhbHNvIGFkZHMgdGhlIGdlbmVyYXRlZCBjb25maWcuaCBhbmQgYmFja3RyYWNlLXN1cHBvcnRl
ZC5oIGhlYWRlcnMuDQogICAgQW5vdGhlciBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGdlbmVy
YXRlIHRoZW0gZHVyaW5nIHRoZSBidWlsZA0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IENoYXJh
bGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4NCiAgICBTaWduZWQt
b2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgIC0tLQ0KICAg
ICBDb25maWcudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTQgKysNCiAg
ICAgTWFrZWZpbGUudWsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDMzICsrKysN
CiAgICAgbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsgICAgICAgICAgICAgICAgIHwgICA2ICsN
CiAgICAgbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oIHwgIDY2ICsr
KysrKysNCiAgICAgbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLmggICAgICAgICAgIHwg
MjAwICsrKysrKysrKysrKysrKysrKysrKw0KICAgICBsaWJiYWNrdHJhY2UvaW5jbHVkZS9jb25m
aWcvY29uZmlnLmggICAgICAgfCAxMzUgKysrKysrKysrKysrKysNCiAgICAgNiBmaWxlcyBjaGFu
Z2VkLCA0NTQgaW5zZXJ0aW9ucygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYmFja3Ry
YWNlL2V4cG9ydHN5bXMudWsNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmJhY2t0cmFjZS9p
bmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQuaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgbGli
YmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLmgNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxp
YmJhY2t0cmFjZS9pbmNsdWRlL2NvbmZpZy9jb25maWcuaA0KICAgIA0KICAgIGRpZmYgLS1naXQg
YS9Db25maWcudWsgYi9Db25maWcudWsNCiAgICBpbmRleCBmYTRkYTA3Li5lYTQxMWIwIDEwMDY0
NA0KICAgIC0tLSBhL0NvbmZpZy51aw0KICAgICsrKyBiL0NvbmZpZy51aw0KICAgIEBAIC02LDQg
KzYsMTggQEAgbWVudWNvbmZpZyBMSUJHQ0MNCiAgICAgCXNlbGVjdCBMSUJVS0FMTE9DDQogICAg
IA0KICAgICBpZiBMSUJHQ0MNCiAgICArDQogICAgK2NvbmZpZyBMSUJCQUNLVFJBQ0UNCiAgICAr
CWJvb2wgImxpYmJhY2t0cmFjZSBsaWJyYXJ5Ig0KICAgICsJZGVmYXVsdCBuDQogICAgKwlzZWxl
Y3QgTElCTkVXTElCQw0KICAgICsJc2VsZWN0IExJQkNPTVBJTEVSX1JUDQogICAgKwlzZWxlY3Qg
TElCVU5XSU5EDQogICAgKwlzZWxlY3QgTElCQ1hYDQogICAgKwlzZWxlY3QgTElCQ1hYQUJJDQog
ICAgKwlzZWxlY3QgTElCVUtNTUFQDQogICAgKwlzZWxlY3QgVUtTWVNJTkZPDQogICAgK2lmIExJ
QkJBQ0tUUkFDRQ0KICAgICtlbmRpZg0KICAgICsNCiAgICAgZW5kaWYNCiAgICBkaWZmIC0tZ2l0
IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51aw0KICAgIGluZGV4IDJhNTcyZGQuLjJlNzYzZjkg
MTAwNjQ0DQogICAgLS0tIGEvTWFrZWZpbGUudWsNCiAgICArKysgYi9NYWtlZmlsZS51aw0KICAg
IEBAIC00MCw2ICs0MCw3IEBADQogICAgICMgTGlicmFyeSByZWdpc3RyYXRpb24NCiAgICAgIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJnY2Ms
JChDT05GSUdfTElCR0NDKSkpDQogICAgKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliYmFja3Ry
YWNlLCQoQ09ORklHX0xJQkJBQ0tUUkFDRSkpKQ0KICAgICANCiAgICAgIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMNCiAgICAgIyBPcmlnaW5hbCBzb3VyY2VzDQogICAgQEAgLTUzLDkgKzU0LDQxIEBA
ICQoZXZhbCAkKGNhbGwgZmV0Y2gsbGliZ2NjLCQoTElCR0NDX1VSTCkpKQ0KICAgICAjIEhlbHBl
cnMNCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgTElCR0NDX0VYVFJBQ1RFRCA9
ICQoTElCR0NDX09SSUdJTikvZ2NjLSQoTElCR0NDX1ZFUlNJT04pDQogICAgK0xJQkJBQ0tUUkFD
RV9FWFRSQUNURUQgPSAkKExJQkdDQ19FWFRSQUNURUQpL2xpYmJhY2t0cmFjZQ0KICAgICANCiAg
ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgIyBMaWJyYXJ5IGluY2x1ZGVzDQogICAg
ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgIENJTkNMVURFUy0kKENPTkZJR19MSUJHQ0Mp
ICAgKz0gLUkkKExJQkdDQ19CQVNFKS9pbmNsdWRlDQogICAgIENYWElOQ0xVREVTLSQoQ09ORklH
X0xJQkdDQykgKz0gLUkkKExJQkdDQ19CQVNFKS9pbmNsdWRlDQogICAgKw0KICAgICtDSU5DTFVE
RVMtJChDT05GSUdfTElCQkFDS1RSQUNFKSAgICs9IC1JJChMSUJHQ0NfQkFTRSkvbGliYmFja3Ry
YWNlL2luY2x1ZGUNCiAgICArQ1hYSU5DTFVERVMtJChDT05GSUdfTElCQkFDS1RSQUNFKSArPSAt
SSQoTElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9pbmNsdWRlDQogICAgKw0KICAgICsjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KICAgICsjIGxpYmJhY2t0cmFjZSBjb2RlDQogICAgKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjDQogICAgK0xJQkJBQ0tUUkFDRV9DSU5DTFVERVMteSA9IC1JJChMSUJH
Q0NfQkFTRSkvbGliYmFja3RyYWNlL2luY2x1ZGUgXA0KICAgICsJLUkkKExJQkdDQ19FWFRSQUNU
RUQpL2luY2x1ZGUgLUkkKExJQkJBQ0tUUkFDRV9FWFRSQUNURUQpIFwNCiAgICArCS1JJChMSUJH
Q0NfQkFTRSkvbGliYmFja3RyYWNlL2luY2x1ZGUvY29uZmlnDQogICAgKw0KICAgICtMSUJCQUNL
VFJBQ0VfQ0ZMQUdTLXkgKz0gLURIQVZFX0NPTkZJR19IIC1ESEFWRV9TVERJTlRfSFwNCiAgICAr
CS1mdW53aW5kLXRhYmxlcyBcDQogICAgKwktVyAtV2FsbCAtV3dyaXRlLXN0cmluZ3MgLVdzdHJp
Y3QtcHJvdG90eXBlcyAtV21pc3NpbmctcHJvdG90eXBlcyBcDQogICAgKwktV29sZC1zdHlsZS1k
ZWZpbml0aW9uIC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIC1XY2FzdC1xdWFsDQogICAgKw0K
ICAgICtMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvYXRv
bWljLmMNCiAgICArTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFDRV9FWFRSQUNU
RUQpL2R3YXJmLmMNCiAgICArTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFDRV9F
WFRSQUNURUQpL2ZpbGVsaW5lLmMNCiAgICArTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJB
Q0tUUkFDRV9FWFRSQUNURUQpL3Bvc2l4LmMNCiAgICArTElCQkFDS1RSQUNFX1NSQ1MteSArPSAk
KExJQkJBQ0tUUkFDRV9FWFRSQUNURUQpL3ByaW50LmMNCiAgICArTElCQkFDS1RSQUNFX1NSQ1Mt
eSArPSAkKExJQkJBQ0tUUkFDRV9FWFRSQUNURUQpL3NvcnQuYw0KICAgICtMSUJCQUNLVFJBQ0Vf
U1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvc3RhdGUuYw0KICAgICtMSUJCQUNL
VFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCkvYmFja3RyYWNlLmMNCiAg
ICArTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFDRV9FWFRSQUNURUQpL3NpbXBs
ZS5jDQogICAgK0xJQkJBQ0tUUkFDRV9TUkNTLXkgKz0gJChMSUJCQUNLVFJBQ0VfRVhUUkFDVEVE
KS9lbGYuYw0KICAgICtMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFDS1RSQUNFX0VYVFJB
Q1RFRCkvbW1hcGlvLmMNCiAgICArTElCQkFDS1RSQUNFX1NSQ1MteSArPSAkKExJQkJBQ0tUUkFD
RV9FWFRSQUNURUQpL21tYXAuYw0KICAgICsNCiAgICArTElCQkFDS1RSQUNFX0VYUE9SVFMgPSAk
KExJQkdDQ19CQVNFKS9saWJiYWNrdHJhY2UvZXhwb3J0c3ltcy51aw0KICAgICsNCiAgICBkaWZm
IC0tZ2l0IGEvbGliYmFja3RyYWNlL2V4cG9ydHN5bXMudWsgYi9saWJiYWNrdHJhY2UvZXhwb3J0
c3ltcy51aw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uOTZm
M2U4Ng0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWJiYWNrdHJhY2UvZXhwb3J0c3lt
cy51aw0KICAgIEBAIC0wLDAgKzEsNiBAQA0KICAgICtiYWNrdHJhY2VfY3JlYXRlX3N0YXRlDQog
ICAgK2JhY2t0cmFjZV9mdWxsDQogICAgK2JhY2t0cmFjZV9wY2luZm8NCiAgICArYmFja3RyYWNl
X3ByaW50DQogICAgK2JhY2t0cmFjZV9zaW1wbGUNCiAgICArYmFja3RyYWNlX3N5bWluZm8NCiAg
ICBkaWZmIC0tZ2l0IGEvbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5o
IGIvbGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLXN1cHBvcnRlZC5oDQogICAgbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5jMDNhOThkDQogICAgLS0tIC9kZXYv
bnVsbA0KICAgICsrKyBiL2xpYmJhY2t0cmFjZS9pbmNsdWRlL2JhY2t0cmFjZS1zdXBwb3J0ZWQu
aA0KICAgIEBAIC0wLDAgKzEsNjYgQEANCiAgICArLyogYmFja3RyYWNlLXN1cHBvcnRlZC5oLmlu
IC0tIFdoZXRoZXIgc3RhY2sgYmFja3RyYWNlIGlzIHN1cHBvcnRlZC4NCiAgICArICAgQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQogICAgKyAg
IFdyaXR0ZW4gYnkgSWFuIExhbmNlIFRheWxvciwgR29vZ2xlLg0KICAgICsNCiAgICArUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0DQogICAgK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUNCiAgICArbWV0Og0KICAgICsNCiAgICArICAgICgxKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodA0KICAgICsgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLg0KICAgICsNCiAgICArICAgICgyKSBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICsg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluDQogICAgKyAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlDQogICAgKyAgICBkaXN0cmlidXRpb24uDQogICAgKw0KICAg
ICsgICAgKDMpIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvDQogICAg
KyAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dA0KICAgICsgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0K
ICAgICsNCiAgICArVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMg
SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1INCiAgICArSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQNCiAgICArV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0K
ICAgICtESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwNCiAgICArSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTDQogICAgKyhJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUg0KICAgICtTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikNCiAgICArSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULA0KICAgICtTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcNCiAgICArSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
DQogICAgK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgKi8NCiAgICArDQogICAgKy8qIFRo
ZSBmaWxlIGJhY2t0cmFjZS1zdXBwb3J0ZWQuaC5pbiBpcyB1c2VkIGJ5IGNvbmZpZ3VyZSB0byBn
ZW5lcmF0ZQ0KICAgICsgICB0aGUgZmlsZSBiYWNrdHJhY2Utc3VwcG9ydGVkLmguICBUaGUgZmls
ZSBiYWNrdHJhY2Utc3VwcG9ydGVkLmggbWF5DQogICAgKyAgIGJlICNpbmNsdWRlJ2QgdG8gc2Vl
IHdoZXRoZXIgdGhlIGJhY2t0cmFjZSBsaWJyYXJ5IHdpbGwgYmUgYWJsZSB0bw0KICAgICsgICBn
ZXQgYSBiYWNrdHJhY2UgYW5kIHByb2R1Y2Ugc3ltYm9saWMgaW5mb3JtYXRpb24uICAqLw0KICAg
ICsNCiAgICArDQogICAgKy8qIEJBQ0tUUkFDRV9TVVBQT1JURUQgd2lsbCBiZSAjZGVmaW5lJ2Qg
YXMgMSBpZiB0aGUgYmFja3RyYWNlIGxpYnJhcnkNCiAgICArICAgc2hvdWxkIHdvcmssIDAgaWYg
aXQgd2lsbCBub3QuICBMaWJyYXJpZXMgbWF5ICNpbmNsdWRlIHRoaXMgdG8gbWFrZQ0KICAgICsg
ICBvdGhlciBhcnJhbmdlbWVudHMuICAqLw0KICAgICsNCiAgICArI2RlZmluZSBCQUNLVFJBQ0Vf
U1VQUE9SVEVEIDENCiAgICArDQogICAgKy8qIEJBQ0tUUkFDRV9VU0VTX01BTExPQyB3aWxsIGJl
ICNkZWZpbmUnZCBhcyAxIGlmIHRoZSBiYWNrdHJhY2UNCiAgICArICAgbGlicmFyeSB3aWxsIGNh
bGwgbWFsbG9jIGFzIGl0IHdvcmtzLCAwIGlmIGl0IHdpbGwgY2FsbCBtbWFwDQogICAgKyAgIGlu
c3RlYWQuICBUaGlzIG1heSBiZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIHNhZmUg
dG8gY2FsbA0KICAgICsgICB0aGUgYmFja3RyYWNlIGZ1bmN0aW9ucyBmcm9tIGEgc2lnbmFsIGhh
bmRsZXIuICBJbiBnZW5lcmFsIHRoaXMNCiAgICArICAgb25seSBhcHBsaWVzIHRvIGNhbGxzIGxp
a2UgYmFja3RyYWNlIGFuZCBiYWNrdHJhY2VfcGNpbmZvLiAgSXQgZG9lcw0KICAgICsgICBub3Qg
YXBwbHkgdG8gYmFja3RyYWNlX3NpbXBsZSwgd2hpY2ggbmV2ZXIgY2FsbHMgbWFsbG9jLiAgSXQg
ZG9lcw0KICAgICsgICBub3QgYXBwbHkgdG8gYmFja3RyYWNlX3ByaW50LCB3aGljaCBhbHdheXMg
Y2FsbHMgZnByaW50ZiBhbmQNCiAgICArICAgdGhlcmVmb3JlIG1hbGxvYy4gICovDQogICAgKw0K
ICAgICsjZGVmaW5lIEJBQ0tUUkFDRV9VU0VTX01BTExPQyAwDQogICAgKw0KICAgICsvKiBCQUNL
VFJBQ0VfU1VQUE9SVFNfVEhSRUFEUyB3aWxsIGJlICNkZWZpbmUnZCBhcyAxIGlmIHRoZSBiYWNr
dHJhY2UNCiAgICArICAgbGlicmFyeSBpcyBjb25maWd1cmVkIHdpdGggdGhyZWFkaW5nIHN1cHBv
cnQsIDAgaWYgbm90LiAgSWYgdGhpcyBpcw0KICAgICsgICAwLCB0aGUgdGhyZWFkZWQgcGFyYW1l
dGVyIHRvIGJhY2t0cmFjZV9jcmVhdGVfc3RhdGUgbXVzdCBiZSBwYXNzZWQNCiAgICArICAgYXMg
MC4gICovDQogICAgKw0KICAgICsjZGVmaW5lIEJBQ0tUUkFDRV9TVVBQT1JUU19USFJFQURTIDEN
CiAgICArDQogICAgKy8qIEJBQ0tUUkFDRV9TVVBQT1JUU19EQVRBIHdpbGwgYmUgI2RlZmluZWQn
ZCBhcyAxIGlmIHRoZSBiYWNrdHJhY2Vfc3ltaW5mbw0KICAgICsgICB3aWxsIHdvcmsgZm9yIHZh
cmlhYmxlcy4gIEl0IHdpbGwgYWx3YXlzIHdvcmsgZm9yIGZ1bmN0aW9ucy4gICovDQogICAgKw0K
ICAgICsjZGVmaW5lIEJBQ0tUUkFDRV9TVVBQT1JUU19EQVRBIDENCiAgICBkaWZmIC0tZ2l0IGEv
bGliYmFja3RyYWNlL2luY2x1ZGUvYmFja3RyYWNlLmggYi9saWJiYWNrdHJhY2UvaW5jbHVkZS9i
YWNrdHJhY2UuaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4u
ZTIzOWIzNA0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWJiYWNrdHJhY2UvaW5jbHVk
ZS9iYWNrdHJhY2UuaA0KICAgIEBAIC0wLDAgKzEsMjAwIEBADQogICAgKy8qIGJhY2t0cmFjZS5o
IC0tIFB1YmxpYyBoZWFkZXIgZmlsZSBmb3Igc3RhY2sgYmFja3RyYWNlIGxpYnJhcnkuDQogICAg
KyAgIENvcHlyaWdodCAoQykgMjAxMi0yMDE3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
Lg0KICAgICsgICBXcml0dGVuIGJ5IElhbiBMYW5jZSBUYXlsb3IsIEdvb2dsZS4NCiAgICArDQog
ICAgK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dA0KICAgICttb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQogICAgK21ldDoNCiAgICArDQogICAg
KyAgICAoMSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQNCiAgICArICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICArDQogICAgKyAgICAoMikgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQNCiAgICArICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbg0KICAgICsgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KICAgICsgICAgZGlzdHJpYnV0aW9uLg0K
ICAgICsNCiAgICArICAgICgzKSBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNl
ZCB0bw0KICAgICsgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQNCiAgICArICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4NCiAgICArDQogICAgK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SDQogICAgK0lNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEDQogICAgK1dBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUNCiAgICArRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsDQogICAgK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUw0KICAgICsoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IN
CiAgICArU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pDQogICAgK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwNCiAgICArU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HDQogICAg
K0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRQ0KICAgICtQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gICovDQogICAgKw0K
ICAgICsjaWZuZGVmIEJBQ0tUUkFDRV9IDQogICAgKyNkZWZpbmUgQkFDS1RSQUNFX0gNCiAgICAr
DQogICAgKyNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAg
Kw0KICAgICsvKiBXZSB3YW50IHRvIGdldCBhIGRlZmluaXRpb24gZm9yIHVpbnRwdHJfdCwgYnV0
IHdlIHN0aWxsIGNhcmUgYWJvdXQNCiAgICArICAgc3lzdGVtcyB0aGF0IGRvbid0IGhhdmUgPHN0
ZGludC5oPi4gICovDQogICAgKyNpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgX19HTElCQ19fID49
IDINCiAgICArDQogICAgKyNpbmNsdWRlIDxzdGRpbnQuaD4NCiAgICArDQogICAgKyNlbGlmIGRl
ZmluZWQoSEFWRV9TVERJTlRfSCkNCiAgICArDQogICAgKyNpbmNsdWRlIDxzdGRpbnQuaD4NCiAg
ICArDQogICAgKyNlbHNlDQogICAgKw0KICAgICsvKiBTeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSA8
c3RkaW50Lmg+IG11c3QgcHJvdmlkZSBnc3RkaW50LmgsIGUuZy4sDQogICAgKyAgIGZyb20gR0ND
X0hFQURFUl9TVERJTlQgaW4gY29uZmlndXJlLmFjLiAgKi8NCiAgICArLy8jaW5jbHVkZSAiZ3N0
ZGludC5oIg0KICAgICsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWZkZWYgX19jcGx1c3Bs
dXMNCiAgICArZXh0ZXJuICJDIiB7DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogVGhlIGJh
Y2t0cmFjZSBzdGF0ZS4gIFRoaXMgc3RydWN0IGlzIGludGVudGlvbmFsbHkgbm90IGRlZmluZWQg
aW4NCiAgICArICAgdGhlIHB1YmxpYyBpbnRlcmZhY2UuICAqLw0KICAgICsNCiAgICArc3RydWN0
IGJhY2t0cmFjZV9zdGF0ZTsNCiAgICArDQogICAgKy8qIFRoZSB0eXBlIG9mIHRoZSBlcnJvciBj
YWxsYmFjayBhcmd1bWVudCB0byBiYWNrdHJhY2UgZnVuY3Rpb25zLg0KICAgICsgICBUaGlzIGZ1
bmN0aW9uLCBpZiBub3QgTlVMTCwgd2lsbCBiZSBjYWxsZWQgZm9yIGNlcnRhaW4gZXJyb3IgY2Fz
ZXMuDQogICAgKyAgIFRoZSBEQVRBIGFyZ3VtZW50IGlzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24g
dGhhdCBjYWxscyB0aGlzIG9uZS4NCiAgICArICAgVGhlIE1TRyBhcmd1bWVudCBpcyBhbiBlcnJv
ciBtZXNzYWdlLiAgVGhlIEVSUk5VTSBhcmd1bWVudCwgaWYNCiAgICArICAgZ3JlYXRlciB0aGFu
IDAsIGhvbGRzIGFuIGVycm5vIHZhbHVlLiAgVGhlIE1TRyBidWZmZXIgbWF5IGJlY29tZQ0KICAg
ICsgICBpbnZhbGlkIGFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucy4NCiAgICArDQogICAgKyAg
IEFzIGEgc3BlY2lhbCBjYXNlLCB0aGUgRVJSTlVNIGFyZ3VtZW50IHdpbGwgYmUgcGFzc2VkIGFz
IC0xIGlmIG5vDQogICAgKyAgIGRlYnVnIGluZm8gY2FuIGJlIGZvdW5kIGZvciB0aGUgZXhlY3V0
YWJsZSwgYnV0IHRoZSBmdW5jdGlvbg0KICAgICsgICByZXF1aXJlcyBkZWJ1ZyBpbmZvIChlLmcu
LCBiYWNrdHJhY2VfZnVsbCwgYmFja3RyYWNlX3BjaW5mbykuICBUaGUNCiAgICArICAgTVNHIGlu
IHRoaXMgY2FzZSB3aWxsIGJlIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgIm5vIGRlYnVn
DQogICAgKyAgIGluZm8iLiAgU2ltaWxhcmx5LCBFUlJOVU0gd2lsbCBiZSBwYXNzZWQgYXMgLTEg
aWYgdGhlcmUgaXMgbm8NCiAgICArICAgc3ltYm9sIHRhYmxlLCBidXQgdGhlIGZ1bmN0aW9uIHJl
cXVpcmVzIGEgc3ltYm9sIHRhYmxlIChlLmcuLA0KICAgICsgICBiYWNrdHJhY2Vfc3ltaW5mbyku
ICBUaGlzIG1heSBiZSB1c2VkIGFzIGEgc2lnbmFsIHRoYXQgc29tZSBvdGhlcg0KICAgICsgICBh
cHByb2FjaCBzaG91bGQgYmUgdHJpZWQuICAqLw0KICAgICsNCiAgICArdHlwZWRlZiB2b2lkICgq
YmFja3RyYWNlX2Vycm9yX2NhbGxiYWNrKSAodm9pZCAqZGF0YSwgY29uc3QgY2hhciAqbXNnLA0K
ICAgICsJCQkJCSAgaW50IGVycm51bSk7DQogICAgKw0KICAgICsvKiBDcmVhdGUgc3RhdGUgaW5m
b3JtYXRpb24gZm9yIHRoZSBiYWNrdHJhY2Ugcm91dGluZXMuICBUaGlzIG11c3QgYmUNCiAgICAr
ICAgY2FsbGVkIGJlZm9yZSBhbnkgb2YgdGhlIG90aGVyIHJvdXRpbmVzLCBhbmQgaXRzIHJldHVy
biB2YWx1ZSBtdXN0DQogICAgKyAgIGJlIHBhc3NlZCB0byBhbGwgb2YgdGhlIG90aGVyIHJvdXRp
bmVzLiAgRklMRU5BTUUgaXMgdGhlIHBhdGggbmFtZQ0KICAgICsgICBvZiB0aGUgZXhlY3V0YWJs
ZSBmaWxlOyBpZiBpdCBpcyBOVUxMIHRoZSBsaWJyYXJ5IHdpbGwgdHJ5DQogICAgKyAgIHN5c3Rl
bS1zcGVjaWZpYyBwYXRoIG5hbWVzLiAgSWYgbm90IE5VTEwsIEZJTEVOQU1FIG11c3QgcG9pbnQg
dG8gYQ0KICAgICsgICBwZXJtYW5lbnQgYnVmZmVyLiAgSWYgVEhSRUFERUQgaXMgbm9uLXplcm8g
dGhlIHN0YXRlIG1heSBiZQ0KICAgICsgICBhY2Nlc3NlZCBieSBtdWx0aXBsZSB0aHJlYWRzIHNp
bXVsdGFuZW91c2x5LCBhbmQgdGhlIGxpYnJhcnkgd2lsbA0KICAgICsgICB1c2UgYXBwcm9wcmlh
dGUgYXRvbWljIG9wZXJhdGlvbnMuICBJZiBUSFJFQURFRCBpcyB6ZXJvIHRoZSBzdGF0ZQ0KICAg
ICsgICBtYXkgb25seSBiZSBhY2Nlc3NlZCBieSBvbmUgdGhyZWFkIGF0IGEgdGltZS4gIFRoaXMg
cmV0dXJucyBhIHN0YXRlDQogICAgKyAgIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBlcnJv
ci4gIElmIGFuIGVycm9yIG9jY3VycywgdGhpcyB3aWxsDQogICAgKyAgIGNhbGwgdGhlIEVSUk9S
X0NBTExCQUNLIHJvdXRpbmUuICAqLw0KICAgICsNCiAgICArZXh0ZXJuIHN0cnVjdCBiYWNrdHJh
Y2Vfc3RhdGUgKmJhY2t0cmFjZV9jcmVhdGVfc3RhdGUgKA0KICAgICsgICAgY29uc3QgY2hhciAq
ZmlsZW5hbWUsIGludCB0aHJlYWRlZCwNCiAgICArICAgIGJhY2t0cmFjZV9lcnJvcl9jYWxsYmFj
ayBlcnJvcl9jYWxsYmFjaywgdm9pZCAqZGF0YSk7DQogICAgKw0KICAgICsvKiBUaGUgdHlwZSBv
ZiB0aGUgY2FsbGJhY2sgYXJndW1lbnQgdG8gdGhlIGJhY2t0cmFjZV9mdWxsIGZ1bmN0aW9uLg0K
ICAgICsgICBEQVRBIGlzIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gYmFja3RyYWNlX2Z1bGwuICBQ
QyBpcyB0aGUgcHJvZ3JhbQ0KICAgICsgICBjb3VudGVyLiAgRklMRU5BTUUgaXMgdGhlIG5hbWUg
b2YgdGhlIGZpbGUgY29udGFpbmluZyBQQywgb3IgTlVMTA0KICAgICsgICBpZiBub3QgYXZhaWxh
YmxlLiAgTElORU5PIGlzIHRoZSBsaW5lIG51bWJlciBpbiBGSUxFTkFNRSBjb250YWluaW5nDQog
ICAgKyAgIFBDLCBvciAwIGlmIG5vdCBhdmFpbGFibGUuICBGVU5DVElPTiBpcyB0aGUgbmFtZSBv
ZiB0aGUgZnVuY3Rpb24NCiAgICArICAgY29udGFpbmluZyBQQywgb3IgTlVMTCBpZiBub3QgYXZh
aWxhYmxlLiAgVGhpcyBzaG91bGQgcmV0dXJuIDAgdG8NCiAgICArICAgY29udGludWluZyB0cmFj
aW5nLiAgVGhlIEZJTEVOQU1FIGFuZCBGVU5DVElPTiBidWZmZXJzIG1heSBiZWNvbWUNCiAgICAr
ICAgaW52YWxpZCBhZnRlciB0aGlzIGZ1bmN0aW9uIHJldHVybnMuICAqLw0KICAgICsNCiAgICAr
dHlwZWRlZiBpbnQgKCpiYWNrdHJhY2VfZnVsbF9jYWxsYmFjaykgKHZvaWQgKmRhdGEsIHVpbnRw
dHJfdCBwYywNCiAgICArCQkJCQljb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywNCiAg
ICArCQkJCQljb25zdCBjaGFyICpmdW5jdGlvbik7DQogICAgKw0KICAgICsvKiBHZXQgYSBmdWxs
IHN0YWNrIGJhY2t0cmFjZS4gIFNLSVAgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8gc2tpcDsN
CiAgICArICAgcGFzc2luZyAwIHdpbGwgc3RhcnQgdGhlIHRyYWNlIHdpdGggdGhlIGZ1bmN0aW9u
IGNhbGxpbmcNCiAgICArICAgYmFja3RyYWNlX2Z1bGwuICBEQVRBIGlzIHBhc3NlZCB0byB0aGUg
Y2FsbGJhY2sgcm91dGluZS4gIElmIGFueQ0KICAgICsgICBjYWxsIHRvIENBTExCQUNLIHJldHVy
bnMgYSBub24temVybyB2YWx1ZSwgdGhlIHN0YWNrIGJhY2t0cmFjZQ0KICAgICsgICBzdG9wcywg
YW5kIGJhY2t0cmFjZSByZXR1cm5zIHRoYXQgdmFsdWU7IHRoaXMgbWF5IGJlIHVzZWQgdG8gbGlt
aXQNCiAgICArICAgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgZGVzaXJlZC4gIElmIGFsbCBj
YWxscyB0byBDQUxMQkFDSw0KICAgICsgICByZXR1cm4gMCwgYmFja3RyYWNlIHJldHVybnMgMC4g
IFRoZSBiYWNrdHJhY2VfZnVsbCBmdW5jdGlvbiB3aWxsDQogICAgKyAgIG1ha2UgYXQgbGVhc3Qg
b25lIGNhbGwgdG8gZWl0aGVyIENBTExCQUNLIG9yIEVSUk9SX0NBTExCQUNLLiAgVGhpcw0KICAg
ICsgICBmdW5jdGlvbiByZXF1aXJlcyBkZWJ1ZyBpbmZvIGZvciB0aGUgZXhlY3V0YWJsZS4gICov
DQogICAgKw0KICAgICtleHRlcm4gaW50IGJhY2t0cmFjZV9mdWxsIChzdHJ1Y3QgYmFja3RyYWNl
X3N0YXRlICpzdGF0ZSwgaW50IHNraXAsDQogICAgKwkJCSAgIGJhY2t0cmFjZV9mdWxsX2NhbGxi
YWNrIGNhbGxiYWNrLA0KICAgICsJCQkgICBiYWNrdHJhY2VfZXJyb3JfY2FsbGJhY2sgZXJyb3Jf
Y2FsbGJhY2ssDQogICAgKwkJCSAgIHZvaWQgKmRhdGEpOw0KICAgICsNCiAgICArLyogVGhlIHR5
cGUgb2YgdGhlIGNhbGxiYWNrIGFyZ3VtZW50IHRvIHRoZSBiYWNrdHJhY2Vfc2ltcGxlIGZ1bmN0
aW9uLg0KICAgICsgICBEQVRBIGlzIHRoZSBhcmd1bWVudCBwYXNzZWQgdG8gc2ltcGxlX2JhY2t0
cmFjZS4gIFBDIGlzIHRoZSBwcm9ncmFtDQogICAgKyAgIGNvdW50ZXIuICBUaGlzIHNob3VsZCBy
ZXR1cm4gMCB0byBjb250aW51ZSB0cmFjaW5nLiAgKi8NCiAgICArDQogICAgK3R5cGVkZWYgaW50
ICgqYmFja3RyYWNlX3NpbXBsZV9jYWxsYmFjaykgKHZvaWQgKmRhdGEsIHVpbnRwdHJfdCBwYyk7
DQogICAgKw0KICAgICsvKiBHZXQgYSBzaW1wbGUgYmFja3RyYWNlLiAgU0tJUCBpcyB0aGUgbnVt
YmVyIG9mIGZyYW1lcyB0byBza2lwLCBhcw0KICAgICsgICBpbiBiYWNrdHJhY2UuICBEQVRBIGlz
IHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgcm91dGluZS4gIElmIGFueSBjYWxsDQogICAgKyAgIHRv
IENBTExCQUNLIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhlIHN0YWNrIGJhY2t0cmFjZSBz
dG9wcywNCiAgICArICAgYW5kIGJhY2t0cmFjZV9zaW1wbGUgcmV0dXJucyB0aGF0IHZhbHVlLiAg
T3RoZXJ3aXNlDQogICAgKyAgIGJhY2t0cmFjZV9zaW1wbGUgcmV0dXJucyAwLiAgVGhlIGJhY2t0
cmFjZV9zaW1wbGUgZnVuY3Rpb24gd2lsbA0KICAgICsgICBtYWtlIGF0IGxlYXN0IG9uZSBjYWxs
IHRvIGVpdGhlciBDQUxMQkFDSyBvciBFUlJPUl9DQUxMQkFDSy4gIFRoaXMNCiAgICArICAgZnVu
Y3Rpb24gZG9lcyBub3QgcmVxdWlyZSBhbnkgZGVidWcgaW5mbyBmb3IgdGhlIGV4ZWN1dGFibGUu
ICAqLw0KICAgICsNCiAgICArZXh0ZXJuIGludCBiYWNrdHJhY2Vfc2ltcGxlIChzdHJ1Y3QgYmFj
a3RyYWNlX3N0YXRlICpzdGF0ZSwgaW50IHNraXAsDQogICAgKwkJCSAgICAgYmFja3RyYWNlX3Np
bXBsZV9jYWxsYmFjayBjYWxsYmFjaywNCiAgICArCQkJICAgICBiYWNrdHJhY2VfZXJyb3JfY2Fs
bGJhY2sgZXJyb3JfY2FsbGJhY2ssDQogICAgKwkJCSAgICAgdm9pZCAqZGF0YSk7DQogICAgKw0K
ICAgICsvKiBQcmludCB0aGUgY3VycmVudCBiYWNrdHJhY2UgaW4gYSB1c2VyIHJlYWRhYmxlIGZv
cm1hdCB0byBhIEZJTEUuDQogICAgKyAgIFNLSVAgaXMgdGhlIG51bWJlciBvZiBmcmFtZXMgdG8g
c2tpcCwgYXMgaW4gYmFja3RyYWNlX2Z1bGwuICBBbnkNCiAgICArICAgZXJyb3IgbWVzc2FnZXMg
YXJlIHByaW50ZWQgdG8gc3RkZXJyLiAgVGhpcyBmdW5jdGlvbiByZXF1aXJlcyBkZWJ1Zw0KICAg
ICsgICBpbmZvIGZvciB0aGUgZXhlY3V0YWJsZS4gICovDQogICAgKw0KICAgICtleHRlcm4gdm9p
ZCBiYWNrdHJhY2VfcHJpbnQgKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRlLCBpbnQgc2tp
cCwgRklMRSAqKTsNCiAgICArDQogICAgKy8qIEdpdmVuIFBDLCBhIHByb2dyYW0gY291bnRlciBp
biB0aGUgY3VycmVudCBwcm9ncmFtLCBjYWxsIHRoZQ0KICAgICsgICBjYWxsYmFjayBmdW5jdGlv
biB3aXRoIGZpbGVuYW1lLCBsaW5lIG51bWJlciwgYW5kIGZ1bmN0aW9uIG5hbWUNCiAgICArICAg
aW5mb3JtYXRpb24uICBUaGlzIHdpbGwgbm9ybWFsbHkgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rp
b24gZXhhY3RseQ0KICAgICsgICBvbmNlLiAgSG93ZXZlciwgaWYgdGhlIFBDIGhhcHBlbnMgdG8g
ZGVzY3JpYmUgYW4gaW5saW5lZCBjYWxsLCBhbmQNCiAgICArICAgdGhlIGRlYnVnZ2luZyBpbmZv
cm1hdGlvbiBjb250YWlucyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uLCB0aGVuDQogICAgKyAg
IHRoaXMgbWF5IGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG11bHRpcGxlIHRpbWVzLiAgVGhp
cyB3aWxsIG1ha2UNCiAgICArICAgYXQgbGVhc3Qgb25lIGNhbGwgdG8gZWl0aGVyIENBTExCQUNL
IG9yIEVSUk9SX0NBTExCQUNLLiAgVGhpcw0KICAgICsgICByZXR1cm5zIHRoZSBmaXJzdCBub24t
emVybyB2YWx1ZSByZXR1cm5lZCBieSBDQUxMQkFDSywgb3IgMC4gICovDQogICAgKw0KICAgICtl
eHRlcm4gaW50IGJhY2t0cmFjZV9wY2luZm8gKHN0cnVjdCBiYWNrdHJhY2Vfc3RhdGUgKnN0YXRl
LCB1aW50cHRyX3QgcGMsDQogICAgKwkJCSAgICAgYmFja3RyYWNlX2Z1bGxfY2FsbGJhY2sgY2Fs
bGJhY2ssDQogICAgKwkJCSAgICAgYmFja3RyYWNlX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxi
YWNrLA0KICAgICsJCQkgICAgIHZvaWQgKmRhdGEpOw0KICAgICsNCiAgICArLyogVGhlIHR5cGUg
b2YgdGhlIGNhbGxiYWNrIGFyZ3VtZW50IHRvIGJhY2t0cmFjZV9zeW1pbmZvLiAgREFUQSBhbmQN
CiAgICArICAgUEMgYXJlIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGJhY2t0cmFjZV9zeW1pbmZv
LiAgU1lNTkFNRSBpcyB0aGUNCiAgICArICAgbmFtZSBvZiB0aGUgc3ltYm9sIGZvciB0aGUgY29y
cmVzcG9uZGluZyBjb2RlLiAgU1lNVkFMIGlzIHRoZQ0KICAgICsgICB2YWx1ZSBhbmQgU1lNU0la
RSBpcyB0aGUgc2l6ZSBvZiB0aGUgc3ltYm9sLiAgU1lNTkFNRSB3aWxsIGJlIE5VTEwNCiAgICAr
ICAgaWYgbm8gZXJyb3Igb2NjdXJyZWQgYnV0IHRoZSBzeW1ib2wgY291bGQgbm90IGJlIGZvdW5k
LiAgKi8NCiAgICArDQogICAgK3R5cGVkZWYgdm9pZCAoKmJhY2t0cmFjZV9zeW1pbmZvX2NhbGxi
YWNrKSAodm9pZCAqZGF0YSwgdWludHB0cl90IHBjLA0KICAgICsJCQkJCSAgICBjb25zdCBjaGFy
ICpzeW1uYW1lLA0KICAgICsJCQkJCSAgICB1aW50cHRyX3Qgc3ltdmFsLA0KICAgICsJCQkJCSAg
ICB1aW50cHRyX3Qgc3ltc2l6ZSk7DQogICAgKw0KICAgICsvKiBHaXZlbiBBRERSLCBhbiBhZGRy
ZXNzIG9yIHByb2dyYW0gY291bnRlciBpbiB0aGUgY3VycmVudCBwcm9ncmFtLA0KICAgICsgICBj
YWxsIHRoZSBjYWxsYmFjayBpbmZvcm1hdGlvbiB3aXRoIHRoZSBzeW1ib2wgbmFtZSBhbmQgdmFs
dWUNCiAgICArICAgZGVzY3JpYmluZyB0aGUgZnVuY3Rpb24gb3IgdmFyaWFibGUgaW4gd2hpY2gg
QUREUiBtYXkgYmUgZm91bmQuDQogICAgKyAgIFRoaXMgd2lsbCBjYWxsIGVpdGhlciBDQUxMQkFD
SyBvciBFUlJPUl9DQUxMQkFDSyBleGFjdGx5IG9uY2UuDQogICAgKyAgIFRoaXMgcmV0dXJucyAx
IG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZS4gIFRoaXMgZnVuY3Rpb24gcmVxdWlyZXMNCiAgICAr
ICAgdGhlIHN5bWJvbCB0YWJsZSBidXQgZG9lcyBub3QgcmVxdWlyZSB0aGUgZGVidWcgaW5mby4g
IE5vdGUgdGhhdCBpZg0KICAgICsgICB0aGUgc3ltYm9sIHRhYmxlIGlzIHByZXNlbnQgYnV0IEFE
RFIgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZQ0KICAgICsgICB0YWJsZSwgQ0FMTEJBQ0sgd2ls
bCBiZSBjYWxsZWQgd2l0aCBhIE5VTEwgU1lNTkFNRSBhcmd1bWVudC4NCiAgICArICAgUmV0dXJu
cyAxIG9uIHN1Y2Nlc3MsIDAgb24gZXJyb3IuICAqLw0KICAgICsNCiAgICArZXh0ZXJuIGludCBi
YWNrdHJhY2Vfc3ltaW5mbyAoc3RydWN0IGJhY2t0cmFjZV9zdGF0ZSAqc3RhdGUsIHVpbnRwdHJf
dCBhZGRyLA0KICAgICsJCQkgICAgICBiYWNrdHJhY2Vfc3ltaW5mb19jYWxsYmFjayBjYWxsYmFj
aywNCiAgICArCQkJICAgICAgYmFja3RyYWNlX2Vycm9yX2NhbGxiYWNrIGVycm9yX2NhbGxiYWNr
LA0KICAgICsJCQkgICAgICB2b2lkICpkYXRhKTsNCiAgICArDQogICAgKyNpZmRlZiBfX2NwbHVz
cGx1cw0KICAgICt9IC8qIEVuZCBleHRlcm4gIkMiLiAgKi8NCiAgICArI2VuZGlmDQogICAgKw0K
ICAgICsjZW5kaWYNCiAgICArDQogICAgZGlmZiAtLWdpdCBhL2xpYmJhY2t0cmFjZS9pbmNsdWRl
L2NvbmZpZy9jb25maWcuaCBiL2xpYmJhY2t0cmFjZS9pbmNsdWRlL2NvbmZpZy9jb25maWcuaA0K
ICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNTA4NmY0ZA0KICAg
IC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWJiYWNrdHJhY2UvaW5jbHVkZS9jb25maWcvY29u
ZmlnLmgNCiAgICBAQCAtMCwwICsxLDEzNSBAQA0KICAgICsvKiBjb25maWcuaC4gIEdlbmVyYXRl
ZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovDQogICAgKy8qIGNvbmZpZy5oLmlu
LiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmFjIGJ5IGF1dG9oZWFkZXIuICAqLw0KICAgICsN
CiAgICArLyogRUxGIHNpemU6IDMyIG9yIDY0ICovDQogICAgKyNkZWZpbmUgQkFDS1RSQUNFX0VM
Rl9TSVpFIDY0DQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgX19h
dG9taWMgZnVuY3Rpb25zICovDQogICAgKyNkZWZpbmUgSEFWRV9BVE9NSUNfRlVOQ1RJT05TIDEN
CiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBkZWNsYXJhdGlvbiBv
ZiBgc3RybmxlbicsIGFuZCB0byAwIGlmIHlvdQ0KICAgICsgICBkb24ndC4gKi8NCiAgICArI2Rl
ZmluZSBIQVZFX0RFQ0xfU1RSTkxFTiAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVf
RExGQ05fSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgZGxfaXRlcmF0ZV9waGRyIGlzIGF2
YWlsYWJsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX0RMX0lURVJBVEVfUEhEUiAxDQogICAgKw0K
ICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZmNudGwgZnVuY3Rpb24gKi8NCiAg
ICArI2RlZmluZSBIQVZFX0ZDTlRMIDENCiAgICArDQogICAgKy8qIERlZmluZSBpZiBnZXRleGVj
bmFtZSBpcyBhdmFpbGFibGUuICovDQogICAgKy8qICN1bmRlZiBIQVZFX0dFVEVYRUNOQU1FICov
DQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgX1Vud2luZF9HZXRJUEluZm8gaXMgYXZhaWxhYmxl
LiAqLw0KICAgICsjZGVmaW5lIEhBVkVfR0VUSVBJTkZPIDENCiAgICArDQogICAgKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovDQogICAg
KyNkZWZpbmUgSEFWRV9JTlRUWVBFU19IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSA8bGluay5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZF
X0xJTktfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1l
bW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX01FTU9SWV9IIDENCiAg
ICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRl
ciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQ0KICAgICsNCiAgICArLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovDQog
ICAgKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUg
SEFWRV9TVFJJTkdTX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUg
dGhlIDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9TVFJJTkdf
SCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgX19zeW5jIGZ1
bmN0aW9ucyAqLw0KICAgICsjZGVmaW5lIEhBVkVfU1lOQ19GVU5DVElPTlMgMQ0KICAgICsNCiAg
ICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvbW1hbi5oPiBoZWFkZXIgZmls
ZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NZU19NTUFOX0ggMQ0KICAgICsNCiAgICArLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8NCiAg
ICArI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZp
bmUgSEFWRV9TWVNfVFlQRVNfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3Ug
aGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1VO
SVNURF9IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3
aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuDQogICAgKyAgICovDQog
ICAgKyNkZWZpbmUgTFRfT0JKRElSICIubGlicy8iDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8g
dGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUg
c2VudC4gKi8NCiAgICArI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiIg0KICAgICsNCiAgICAr
LyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLw0KICAgICsjZGVm
aW5lIFBBQ0tBR0VfTkFNRSAicGFja2FnZS11bnVzZWQiDQogICAgKw0KICAgICsvKiBEZWZpbmUg
dG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovDQogICAgKyNk
ZWZpbmUgUEFDS0FHRV9TVFJJTkcgInBhY2thZ2UtdW51c2VkIHZlcnNpb24tdW51c2VkIg0KICAg
ICsNCiAgICArLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBw
YWNrYWdlLiAqLw0KICAgICsjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibGliYmFja3RyYWNlIg0K
ICAgICsNCiAgICArLyogRGVmaW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4g
Ki8NCiAgICArI2RlZmluZSBQQUNLQUdFX1VSTCAiIg0KICAgICsNCiAgICArLyogRGVmaW5lIHRv
IHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8NCiAgICArI2RlZmluZSBQQUNLQUdFX1ZF
UlNJT04gInZlcnNpb24tdW51c2VkIg0KICAgICsNCiAgICArLyogVGhlIHNpemUgb2YgYGNoYXIn
LCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovDQogICAgKy8qICN1bmRlZiBTSVpFT0ZfQ0hBUiAq
Lw0KICAgICsNCiAgICArLyogVGhlIHNpemUgb2YgYGludCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVv
Zi4gKi8NCiAgICArLyogI3VuZGVmIFNJWkVPRl9JTlQgKi8NCiAgICArDQogICAgKy8qIFRoZSBz
aXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLw0KICAgICsvKiAjdW5kZWYg
U0laRU9GX0xPTkcgKi8NCiAgICArDQogICAgKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNv
bXB1dGVkIGJ5IHNpemVvZi4gKi8NCiAgICArLyogI3VuZGVmIFNJWkVPRl9TSE9SVCAqLw0KICAg
ICsNCiAgICArLyogVGhlIHNpemUgb2YgYHZvaWQgKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4g
Ki8NCiAgICArLyogI3VuZGVmIFNJWkVPRl9WT0lEX1AgKi8NCiAgICArDQogICAgKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLw0KICAgICsjZGVm
aW5lIFNURENfSEVBREVSUyAxDQogICAgKw0KICAgICsvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBB
SVggMywgSW50ZXJpeC4gICovDQogICAgKyNpZm5kZWYgX0FMTF9TT1VSQ0UNCiAgICArIyBkZWZp
bmUgX0FMTF9TT1VSQ0UgMQ0KICAgICsjZW5kaWYNCiAgICArLyogRW5hYmxlIEdOVSBleHRlbnNp
b25zIG9uIHN5c3RlbXMgdGhhdCBoYXZlIHRoZW0uICAqLw0KICAgICsjaWZuZGVmIF9HTlVfU09V
UkNFDQogICAgKyMgZGVmaW5lIF9HTlVfU09VUkNFIDENCiAgICArI2VuZGlmDQogICAgKy8qIEVu
YWJsZSB0aHJlYWRpbmcgZXh0ZW5zaW9ucyBvbiBTb2xhcmlzLiAgKi8NCiAgICArI2lmbmRlZiBf
UE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MNCiAgICArIyBkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VN
QU5USUNTIDENCiAgICArI2VuZGlmDQogICAgKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEhQIE5v
blN0b3AuICAqLw0KICAgICsjaWZuZGVmIF9UQU5ERU1fU09VUkNFDQogICAgKyMgZGVmaW5lIF9U
QU5ERU1fU09VUkNFIDENCiAgICArI2VuZGlmDQogICAgKy8qIEVuYWJsZSBnZW5lcmFsIGV4dGVu
c2lvbnMgb24gU29sYXJpcy4gICovDQogICAgKyNpZm5kZWYgX19FWFRFTlNJT05TX18NCiAgICAr
IyBkZWZpbmUgX19FWFRFTlNJT05TX18gMQ0KICAgICsjZW5kaWYNCiAgICArDQogICAgKw0KICAg
ICsvKiBEZWZpbmUgdG8gMSBpZiBvbiBNSU5JWC4gKi8NCiAgICArLyogI3VuZGVmIF9NSU5JWCAq
Lw0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDIgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBwcm92
aWRlIFBPU0lYLjEgZmVhdHVyZXMgZXhjZXB0IHdpdGgNCiAgICArICAgdGhpcyBkZWZpbmVkLiAq
Lw0KICAgICsvKiAjdW5kZWYgX1BPU0lYXzFfU09VUkNFICovDQogICAgKw0KICAgICsvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3IgYHN0YXQnIGFuZCBvdGhlciB0aGlu
Z3MgdG8gd29yay4gKi8NCiAgICArLyogI3VuZGVmIF9QT1NJWF9TT1VSQ0UgKi8NCiAgICAtLSAN
CiAgICAyLjE3LjENCiAgICANCiAgICANCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxA
bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu
L2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:24:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:24:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlYB-0000Vj-9p; Fri, 27 Sep 2019 08:24:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlYA-0000Va-4A
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:24:26 +0000
X-Inumbo-ID: 35c312be-e100-11e9-9670-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 35c312be-e100-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:24:23 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id AAD38105739;
 Fri, 27 Sep 2019 10:24:22 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id kzR7fsI9XqeS; Fri, 27 Sep 2019 10:24:22 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 71C14105735;
 Fri, 27 Sep 2019 10:24:22 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:24:22 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:24:22
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/GCC PATCH v2 4/5] Port libffi library
Thread-Index: AQHVdH3UGBPmdWAl1kC4LlU/uc9bGac/MPCA
Date: Fri, 27 Sep 2019 08:24:21 +0000
Message-ID: <78EB788C-08A6-4643-89C3-1D3169BF128B@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
 <20190926151911.11587-5-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926151911.11587-5-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <CFCC979557EC904C96F4863501164C2B@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/GCC PATCH v2 4/5] Port libffi library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsIHRoaXMgcGF0Y2ggbG9va3MgZ29vZC4NCg0KVGhhbmtzLA0KDQotLSBG
ZWxpcGUNCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjE5LCAiQ2hhcmFsYW1wb3MgTWFpbmFzIiA8Q2hhcmFs
YW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBUaGlzIHBvcnQgYWxzbyBhZGRz
IHRoZSBnZW5lcmF0ZWQgZmZpLmggYW5kIGZmaWNvbmZpZy5oIGhlYWRlcnMuIEFub3RoZXINCiAg
ICBvcHRpb24gd291bGQgaGF2ZSBiZWVuIHRvIGdlbmVyYXRlIHRoZW0gZHVyaW5nIHRoZSBidWls
ZC4NCiAgICANCiAgICBTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFt
cG9zLk1haW5hc0BuZWNsYWIuZXU+DQogICAgU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUgPGNv
c3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAgICAtLS0NCiAgICAgQ29uZmlnLnVrICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgIDE0ICstDQogICAgIE1ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAg
ICAgICB8ICAyOCArKw0KICAgICBsaWJmZmkvZXhwb3J0c3ltcy51ayAgICAgICAgICAgICAgfCAg
MjEgKysNCiAgICAgbGliZmZpL2luY2x1ZGUvY29uZmlnL2ZmaWNvbmZpZy5oIHwgMjA2ICsrKysr
KysrKysrKw0KICAgICBsaWJmZmkvaW5jbHVkZS9mZmkuaCAgICAgICAgICAgICAgfCA1MDkgKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrDQogICAgIGxpYmZmaS9pbmNsdWRlL2ZmaXRhcmdl
dC5oICAgICAgICB8IDE0MSArKysrKysrKysNCiAgICAgNiBmaWxlcyBjaGFuZ2VkLCA5MTUgaW5z
ZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZm
aS9leHBvcnRzeW1zLnVrDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJmZmkvaW5jbHVkZS9j
b25maWcvZmZpY29uZmlnLmgNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmZmaS9pbmNsdWRl
L2ZmaS5oDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJmZmkvaW5jbHVkZS9mZml0YXJnZXQu
aA0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9Db25maWcudWsgYi9Db25maWcudWsNCiAgICBpbmRl
eCBlYTQxMWIwLi41YWFjYTdjIDEwMDY0NA0KICAgIC0tLSBhL0NvbmZpZy51aw0KICAgICsrKyBi
L0NvbmZpZy51aw0KICAgIEBAIC0xLDIzICsxLDI5IEBADQogICAgIG1lbnVjb25maWcgTElCR0ND
DQogICAgIAlib29sICJnY2MgLSBHTlUgQ29tcGlsZXIgQ29sbGVjdGlvbiBsaWJyYXJpZXMiDQog
ICAgIAlkZWZhdWx0IG4NCiAgICAtCXNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQw0KICAg
ICAJc2VsZWN0IExJQlVLREVCVUcNCiAgICAgCXNlbGVjdCBMSUJVS0FMTE9DDQogICAgKwlzZWxl
Y3QgTElCTkVXTElCQw0KICAgICsJc2VsZWN0IExJQlVLTU1BUA0KICAgICsJc2VsZWN0IFVLU1lT
SU5GTw0KICAgICANCiAgICAgaWYgTElCR0NDDQogICAgIA0KICAgICBjb25maWcgTElCQkFDS1RS
QUNFDQogICAgIAlib29sICJsaWJiYWNrdHJhY2UgbGlicmFyeSINCiAgICAgCWRlZmF1bHQgbg0K
ICAgIC0Jc2VsZWN0IExJQk5FV0xJQkMNCiAgICAgCXNlbGVjdCBMSUJDT01QSUxFUl9SVA0KICAg
ICAJc2VsZWN0IExJQlVOV0lORA0KICAgICAJc2VsZWN0IExJQkNYWA0KICAgICAJc2VsZWN0IExJ
QkNYWEFCSQ0KICAgIC0Jc2VsZWN0IExJQlVLTU1BUA0KICAgIC0Jc2VsZWN0IFVLU1lTSU5GTw0K
ICAgICBpZiBMSUJCQUNLVFJBQ0UNCiAgICAgZW5kaWYNCiAgICAgDQogICAgK2NvbmZpZyBMSUJG
RkkNCiAgICArICAgICAgIGJvb2wgImxpYmZmaSAtIEEgUG9ydGFibGUgRm9yZWlnbiBGdW5jdGlv
biBJbnRlcmZhY2UgTGlicmFyeSINCiAgICArICAgICAgIGRlZmF1bHQgbg0KICAgICsgICAgICAg
c2VsZWN0IExJQlBUSFJFQURfRU1CRURERUQNCiAgICAraWYgTElCRkZJDQogICAgK2VuZGlmDQog
ICAgKw0KICAgICBlbmRpZg0KICAgIGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxl
LnVrDQogICAgaW5kZXggMmU3NjNmOS4uY2U4NmNmYiAxMDA2NDQNCiAgICAtLS0gYS9NYWtlZmls
ZS51aw0KICAgICsrKyBiL01ha2VmaWxlLnVrDQogICAgQEAgLTQxLDYgKzQxLDcgQEANCiAgICAg
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAgJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJn
Y2MsJChDT05GSUdfTElCR0NDKSkpDQogICAgICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliYmFj
a3RyYWNlLCQoQ09ORklHX0xJQkJBQ0tUUkFDRSkpKQ0KICAgICskKGV2YWwgJChjYWxsIGFkZGxp
Yl9zLGxpYmZmaSwkKENPTkZJR19MSUJGRkkpKSkNCiAgICAgDQogICAgICMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjDQogICAgICMgT3JpZ2luYWwgc291cmNlcw0KICAgIEBAIC01NSw2ICs1Niw3IEBA
ICQoZXZhbCAkKGNhbGwgZmV0Y2gsbGliZ2NjLCQoTElCR0NDX1VSTCkpKQ0KICAgICAjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIw0KICAgICBMSUJHQ0NfRVhUUkFDVEVEID0gJChMSUJHQ0NfT1JJR0lO
KS9nY2MtJChMSUJHQ0NfVkVSU0lPTikNCiAgICAgTElCQkFDS1RSQUNFX0VYVFJBQ1RFRCA9ICQo
TElCR0NDX0VYVFJBQ1RFRCkvbGliYmFja3RyYWNlDQogICAgK0xJQkZGSV9FWFRSQUNURUQgPSAk
KExJQkdDQ19FWFRSQUNURUQpL2xpYmZmaQ0KICAgICANCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMNCiAgICAgIyBMaWJyYXJ5IGluY2x1ZGVzDQogICAgQEAgLTY1LDYgKzY3LDkgQEAgQ1hY
SU5DTFVERVMtJChDT05GSUdfTElCR0NDKSArPSAtSSQoTElCR0NDX0JBU0UpL2luY2x1ZGUNCiAg
ICAgQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkJBQ0tUUkFDRSkgICArPSAtSSQoTElCR0NDX0JBU0Up
L2xpYmJhY2t0cmFjZS9pbmNsdWRlDQogICAgIENYWElOQ0xVREVTLSQoQ09ORklHX0xJQkJBQ0tU
UkFDRSkgKz0gLUkkKExJQkdDQ19CQVNFKS9saWJiYWNrdHJhY2UvaW5jbHVkZQ0KICAgICANCiAg
ICArQ0lOQ0xVREVTLSQoQ09ORklHX0xJQkZGSSkgICArPSAtSSQoTElCR0NDX0JBU0UpL2xpYmZm
aS9pbmNsdWRlDQogICAgK0NYWElOQ0xVREVTLSQoQ09ORklHX0xJQkZGSSkgKz0gLUkkKExJQkdD
Q19CQVNFKS9saWJmZmkvaW5jbHVkZQ0KICAgICsNCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMNCiAgICAgIyBsaWJiYWNrdHJhY2UgY29kZQ0KICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iw0KICAgIEBAIC05MiwzICs5NywyNiBAQCBMSUJCQUNLVFJBQ0VfU1JDUy15ICs9ICQoTElCQkFD
S1RSQUNFX0VYVFJBQ1RFRCkvbW1hcC5jDQogICAgIA0KICAgICBMSUJCQUNLVFJBQ0VfRVhQT1JU
UyA9ICQoTElCR0NDX0JBU0UpL2xpYmJhY2t0cmFjZS9leHBvcnRzeW1zLnVrDQogICAgIA0KICAg
ICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICsjIGxpYmZmaSBjb2RlDQogICAgKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjDQogICAgK0xJQkZGSV9DT01NT05fQ0lOQ0xVREVTLXkgPSAtSSQo
TElCR0NDX0JBU0UpL2xpYmZmaS9pbmNsdWRlIFwNCiAgICArICAgICAgIC1JJChMSUJHQ0NfRVhU
UkFDVEVEKS9pbmNsdWRlIC1JJChMSUJGRklfRVhUUkFDVEVEKS9pbmNsdWRlIFwNCiAgICArICAg
ICAgIC1JJChMSUJHQ0NfQkFTRSkvbGliZmZpL2luY2x1ZGUvY29uZmlnDQogICAgK0xJQkZGSV9D
T01NT05fQ0lOQ0xVREVTLSQoQ09ORklHX0FSQ0hfWDg2XzY0KSArPSAtSSQoTElCRkZJX0VYVFJB
Q1RFRCkvc3JjL3g4Ng0KICAgICtMSUJGRklfQVNJTkNMVURFUy15ID0gJChMSUJGRklfQ09NTU9O
X0NJTkNMVURFUy15KQ0KICAgICtMSUJGRklfQ0lOQ0xVREVTLXkgID0gJChMSUJGRklfQ09NTU9O
X0NJTkNMVURFUy15KQ0KICAgICsNCiAgICArTElCRkZJX0NGTEFHUy15ICs9IC1ESEFWRV9DT05G
SUdfSCAtZmV4Y2VwdGlvbnMgLVdhbGwgXA0KICAgICsJLVduby1pbXBsaWNpdC1mdW5jdGlvbi1k
ZWNsYXJhdGlvbiAtV25vLXNpZ24tY29tcGFyZSBcDQogICAgKwktV25vLXVudXNlZC1wYXJhbWV0
ZXIgLVduby1lbXB0eS1ib2R5IC1Xbm8taW1wbGljaXQtZmFsbHRocm91Z2gNCiAgICArDQogICAg
K0xJQkZGSV9TUkNTLXkgKz0gJChMSUJGRklfRVhUUkFDVEVEKS9zcmMvY2xvc3VyZXMuYw0KICAg
ICtMSUJGRklfU1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL2phdmFfcmF3X2FwaS5j
DQogICAgK0xJQkZGSV9TUkNTLXkgKz0gJChMSUJGRklfRVhUUkFDVEVEKS9zcmMvcHJlcF9jaWYu
Yw0KICAgICtMSUJGRklfU1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3Jhd19hcGku
Yw0KICAgICtMSUJGRklfU1JDUy15ICs9ICQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3R5cGVzLmMN
CiAgICArTElCRkZJX1NSQ1MtJChDT05GSUdfQVJDSF9YODZfNjQpICs9ICQoTElCRkZJX0VYVFJB
Q1RFRCkvc3JjL3g4Ni9mZmk2NC5jDQogICAgK0xJQkZGSV9TUkNTLSQoQ09ORklHX0FSQ0hfWDg2
XzY0KSArPSAkKExJQkZGSV9FWFRSQUNURUQpL3NyYy94ODYvdW5peDY0LlMNCiAgICArDQogICAg
K0xJQkZGSV9FWFBPUlRTID0gJChMSUJHQ0NfQkFTRSkvbGliZmZpL2V4cG9ydHN5bXMudWsNCiAg
ICBkaWZmIC0tZ2l0IGEvbGliZmZpL2V4cG9ydHN5bXMudWsgYi9saWJmZmkvZXhwb3J0c3ltcy51
aw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uYzc2NDBhNg0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWJmZmkvZXhwb3J0c3ltcy51aw0KICAgIEBA
IC0wLDAgKzEsMjEgQEANCiAgICArZmZpX2NhbGwNCiAgICArZmZpX2NhbGxfZ28NCiAgICArZmZp
X3ByZXBfY2lmDQogICAgK2ZmaV9wcmVwX2NpZl92YXINCiAgICArZmZpX3ByZXBfZ29fY2xvc3Vy
ZQ0KICAgICtmZmlfdHlwZV9jb21wbGV4X2RvdWJsZQ0KICAgICtmZmlfdHlwZV9jb21wbGV4X2Zs
b2F0DQogICAgK2ZmaV90eXBlX2NvbXBsZXhfbG9uZ2RvdWJsZQ0KICAgICtmZmlfdHlwZV9kb3Vi
bGUNCiAgICArZmZpX3R5cGVfZmxvYXQNCiAgICArZmZpX3R5cGVfbG9uZ2RvdWJsZQ0KICAgICtm
ZmlfdHlwZV9wb2ludGVyDQogICAgK2ZmaV90eXBlX3NpbnQxNg0KICAgICtmZmlfdHlwZV9zaW50
MzINCiAgICArZmZpX3R5cGVfc2ludDY0DQogICAgK2ZmaV90eXBlX3NpbnQ4DQogICAgK2ZmaV90
eXBlX3VpbnQxNg0KICAgICtmZmlfdHlwZV91aW50MzINCiAgICArZmZpX3R5cGVfdWludDY0DQog
ICAgK2ZmaV90eXBlX3VpbnQ4DQogICAgK2ZmaV90eXBlX3ZvaWQNCiAgICBkaWZmIC0tZ2l0IGEv
bGliZmZpL2luY2x1ZGUvY29uZmlnL2ZmaWNvbmZpZy5oIGIvbGliZmZpL2luY2x1ZGUvY29uZmln
L2ZmaWNvbmZpZy5oDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li5iZjNmMTJjDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL2xpYmZmaS9pbmNsdWRlL2Nv
bmZpZy9mZmljb25maWcuaA0KICAgIEBAIC0wLDAgKzEsMjA2IEBADQogICAgKy8qIGZmaWNvbmZp
Zy5oLiAgR2VuZXJhdGVkIGZyb20gZmZpY29uZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8NCiAg
ICArLyogZmZpY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0
b2hlYWRlci4gICovDQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2Fs
IChpbnRlcm5hbCBoZWxwZXIgbWFjcm8pICovDQogICAgKy8qICN1bmRlZiBBQ19BUFBMRV9VTklW
RVJTQUxfQlVJTEQgKi8NCiAgICArDQogICAgKy8qIERlZmluZSB0byBvbmUgb2YgYF9nZXRiNjcn
LCBgR0VUQjY3JywgYGdldGI2NycgZm9yIENyYXktMiBhbmQgQ3JheS1ZTVANCiAgICArICAgc3lz
dGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0IG9u
IHRob3NlIHN5c3RlbXMuDQogICAgKyAgICovDQogICAgKy8qICN1bmRlZiBDUkFZX1NUQUNLU0VH
X0VORCAqLw0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgdXNpbmcgYGFsbG9jYS5jJy4g
Ki8NCiAgICArLyogI3VuZGVmIENfQUxMT0NBICovDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8g
dGhlIGZsYWdzIG5lZWRlZCBmb3IgdGhlIC5zZWN0aW9uIC5laF9mcmFtZSBkaXJlY3RpdmUuICov
DQogICAgKyNkZWZpbmUgRUhfRlJBTUVfRkxBR1MgImEiDQogICAgKw0KICAgICsvKiBEZWZpbmUg
dGhpcyBpZiB5b3Ugd2FudCBleHRyYSBkZWJ1Z2dpbmcuICovDQogICAgKy8qICN1bmRlZiBGRklf
REVCVUcgKi8NCiAgICArDQogICAgKy8qIENhbm5vdCB1c2UgUFJPVF9FWEVDIG9uIHRoaXMgdGFy
Z2V0LCBzbywgd2UgcmV2ZXJ0IHRvIGFsdGVybmF0aXZlIG1lYW5zICovDQogICAgKy8qICN1bmRl
ZiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFICovDQogICAgKw0KICAgICsvKiBEZWZpbmUgdGhp
cyBpZiB5b3Ugd2FudCB0byBlbmFibGUgcGF4IGVtdWxhdGVkIHRyYW1wb2xpbmVzICovDQogICAg
Ky8qICN1bmRlZiBGRklfTU1BUF9FWEVDX0VNVVRSQU1QX1BBWCAqLw0KICAgICsNCiAgICArLyog
Q2Fubm90IHVzZSBtYWxsb2Mgb24gdGhpcyB0YXJnZXQsIHNvLCB3ZSByZXZlcnQgdG8gYWx0ZXJu
YXRpdmUgbWVhbnMgKi8NCiAgICArLyogI3VuZGVmIEZGSV9NTUFQX0VYRUNfV1JJVCAqLw0KICAg
ICsNCiAgICArLyogRGVmaW5lIHRoaXMgaWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIHRo
ZSByYXcgQVBJLiAqLw0KICAgICsvKiAjdW5kZWYgRkZJX05PX1JBV19BUEkgKi8NCiAgICArDQog
ICAgKy8qIERlZmluZSB0aGlzIGlmIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciBhZ2dyZWdh
dGUgdHlwZXMuICovDQogICAgKy8qICN1bmRlZiBGRklfTk9fU1RSVUNUUyAqLw0KICAgICsNCiAg
ICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgYGFsbG9jYScsIGFzIGEgZnVuY3Rpb24gb3Ig
bWFjcm8uICovDQogICAgKyNkZWZpbmUgSEFWRV9BTExPQ0EgMQ0KICAgICsNCiAgICArLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgPGFsbG9jYS5oPiBhbmQgaXQgc2hvdWxkIGJlIHVzZWQgKG5v
dCBvbiBVbHRyaXgpLg0KICAgICsgICAqLw0KICAgICsjZGVmaW5lIEhBVkVfQUxMT0NBX0ggMQ0K
ICAgICsNCiAgICArLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIC5jZmlfKiBk
aXJlY3RpdmVzLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfQVNfQ0ZJX1BTRVVET19PUCAxDQogICAg
Kw0KICAgICsvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgLnJlZ2lzdGVyLiAq
Lw0KICAgICsvKiAjdW5kZWYgSEFWRV9BU19SRUdJU1RFUl9QU0VVRE9fT1AgKi8NCiAgICArDQog
ICAgKy8qIERlZmluZSBpZiB0aGUgY29tcGlsZXIgdXNlcyB6YXJjaCBmZWF0dXJlcy4gKi8NCiAg
ICArLyogI3VuZGVmIEhBVkVfQVNfUzM5MF9aQVJDSCAqLw0KICAgICsNCiAgICArLyogRGVmaW5l
IGlmIHlvdXIgYXNzZW1ibGVyIGFuZCBsaW5rZXIgc3VwcG9ydCB1bmFsaWduZWQgUEMgcmVsYXRp
dmUgcmVsb2NzLg0KICAgICsgICAqLw0KICAgICsvKiAjdW5kZWYgSEFWRV9BU19TUEFSQ19VQV9Q
Q1JFTCAqLw0KICAgICsNCiAgICArLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRz
IHVud2luZCBzZWN0aW9uIHR5cGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9BU19YODZfNjRfVU5X
SU5EX1NFQ1RJT05fVFlQRSAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJs
ZXIgc3VwcG9ydHMgUEMgcmVsYXRpdmUgcmVsb2NzLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfQVNf
WDg2X1BDUkVMIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8
ZGxmY24uaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9ETEZDTl9IIDENCiAg
ICArDQogICAgKy8qIERlZmluZSBpZiBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJoaWRkZW4i
KSkpIGlzIHN1cHBvcnRlZC4gKi8NCiAgICArI2RlZmluZSBIQVZFX0hJRERFTl9WSVNJQklMSVRZ
X0FUVFJJQlVURSAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
PGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfSU5UVFlQRVNf
SCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxvbmcgZG91YmxlIHR5
cGUgYW5kIGl0IGlzIGJpZ2dlciB0aGFuIGEgZG91YmxlICovDQogICAgKyNkZWZpbmUgSEFWRV9M
T05HX0RPVUJMRSAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgeW91IHN1cHBvcnQgbW9yZSB0
aGFuIG9uZSBzaXplIG9mIHRoZSBsb25nIGRvdWJsZSB0eXBlICovDQogICAgKy8qICN1bmRlZiBI
QVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQgKi8NCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlm
IHlvdSBoYXZlIHRoZSBgbWVtY3B5JyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX01F
TUNQWSAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9y
eS5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX01FTU9SWV9IIDENCiAgICAr
DQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWtvc3RlbXAnIGZ1bmN0aW9u
LiAqLw0KICAgICsjZGVmaW5lIEhBVkVfTUtPU1RFTVAgMQ0KICAgICsNCiAgICArLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtbWFwJyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBI
QVZFX01NQVAgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIGlmIG1tYXAgd2l0aCBNQVBfQU5PTihZ
TU9VUykgd29ya3MuICovDQogICAgKyNkZWZpbmUgSEFWRV9NTUFQX0FOT04gMQ0KICAgICsNCiAg
ICArLyogRGVmaW5lIGlmIG1tYXAgb2YgL2Rldi96ZXJvIHdvcmtzLiAqLw0KICAgICsjZGVmaW5l
IEhBVkVfTU1BUF9ERVZfWkVSTyAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgcmVhZC1vbmx5
IG1tYXAgb2YgYSBwbGFpbiBmaWxlIHdvcmtzLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfTU1BUF9G
SUxFIDENCiAgICArDQogICAgKy8qIERlZmluZSBpZiAuZWhfZnJhbWUgc2VjdGlvbnMgc2hvdWxk
IGJlIHJlYWQtb25seS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1JPX0VIX0ZSQU1FIDENCiAgICAr
DQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBm
aWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQ0KICAgICsNCiAgICArLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRsaWIuaD4gaGVhZGVyIGZpbGUuICovDQogICAg
KyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5
b3UgaGF2ZSB0aGUgPHN0cmluZ3MuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFW
RV9TVFJJTkdTX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxzdHJpbmcuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAx
DQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tbWFuLmg+
IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxDQogICAgKw0K
ICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0Lmg+IGhlYWRlciBm
aWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxDQogICAgKw0KICAgICsvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8N
CiAgICArI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSA8dW5pc3RkLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVm
aW5lIEhBVkVfVU5JU1REX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIHRoZSBzdWItZGly
ZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4NCiAg
ICArICAgKi8NCiAgICArI2RlZmluZSBMVF9PQkpESVIgIi5saWJzLyINCiAgICArDQogICAgKy8q
IERlZmluZSB0byAxIGlmIHlvdXIgQyBjb21waWxlciBkb2Vzbid0IGFjY2VwdCAtYyBhbmQgLW8g
dG9nZXRoZXIuICovDQogICAgKy8qICN1bmRlZiBOT19NSU5VU19DX01JTlVTX08gKi8NCiAgICAr
DQogICAgKy8qIE5hbWUgb2YgcGFja2FnZSAqLw0KICAgICsjZGVmaW5lIFBBQ0tBR0UgImxpYmZm
aSINCiAgICArDQogICAgKy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0
cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLw0KICAgICsjZGVmaW5lIFBBQ0tB
R0VfQlVHUkVQT1JUICJodHRwOi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXMiDQog
ICAgKw0KICAgICsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICov
DQogICAgKyNkZWZpbmUgUEFDS0FHRV9OQU1FICJsaWJmZmkiDQogICAgKw0KICAgICsvKiBEZWZp
bmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovDQogICAg
KyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgImxpYmZmaSAzLjk5OTk5Ig0KICAgICsNCiAgICArLyog
RGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLw0K
ICAgICsjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibGliZmZpIg0KICAgICsNCiAgICArLyogRGVm
aW5lIHRvIHRoZSBob21lIHBhZ2UgZm9yIHRoaXMgcGFja2FnZS4gKi8NCiAgICArI2RlZmluZSBQ
QUNLQUdFX1VSTCAiIg0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRo
aXMgcGFja2FnZS4gKi8NCiAgICArI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gIjMuOTk5OTkiDQog
ICAgKw0KICAgICsvKiBUaGUgc2l6ZSBvZiBgZG91YmxlJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9m
LiAqLw0KICAgICsjZGVmaW5lIFNJWkVPRl9ET1VCTEUgOA0KICAgICsNCiAgICArLyogVGhlIHNp
emUgb2YgYGxvbmcgZG91YmxlJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLw0KICAgICsjZGVm
aW5lIFNJWkVPRl9MT05HX0RPVUJMRSAxNg0KICAgICsNCiAgICArLyogVGhlIHNpemUgb2YgYHNp
emVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8NCiAgICArI2RlZmluZSBTSVpFT0ZfU0la
RV9UIDgNCiAgICArDQogICAgKy8qIElmIHVzaW5nIHRoZSBDIGltcGxlbWVudGF0aW9uIG9mIGFs
bG9jYSwgZGVmaW5lIGlmIHlvdSBrbm93IHRoZQ0KICAgICsgICBkaXJlY3Rpb24gb2Ygc3RhY2sg
Z3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdpbGwgYmUNCiAgICArICAgYXV0
b21hdGljYWxseSBkZWR1Y2VkIGF0IHJ1bnRpbWUuDQogICAgKwlTVEFDS19ESVJFQ1RJT04gPiAw
ID0+IGdyb3dzIHRvd2FyZCBoaWdoZXIgYWRkcmVzc2VzDQogICAgKwlTVEFDS19ESVJFQ1RJT04g
PCAwID0+IGdyb3dzIHRvd2FyZCBsb3dlciBhZGRyZXNzZXMNCiAgICArCVNUQUNLX0RJUkVDVElP
TiA9IDAgPT4gZGlyZWN0aW9uIG9mIGdyb3d0aCB1bmtub3duICovDQogICAgKy8qICN1bmRlZiBT
VEFDS19ESVJFQ1RJT04gKi8NCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLw0KICAgICsjZGVmaW5lIFNURENfSEVBREVSUyAx
DQogICAgKw0KICAgICsvKiBEZWZpbmUgdGhpcyBpZiB5b3UgYXJlIHVzaW5nIFB1cmlmeSBhbmQg
d2FudCB0byBzdXBwcmVzcyBzcHVyaW91cyBtZXNzYWdlcy4NCiAgICArICAgKi8NCiAgICArLyog
I3VuZGVmIFVTSU5HX1BVUklGWSAqLw0KICAgICsNCiAgICArLyogVmVyc2lvbiBudW1iZXIgb2Yg
cGFja2FnZSAqLw0KICAgICsjZGVmaW5lIFZFUlNJT04gIjMuOTk5OTkiDQogICAgKw0KICAgICsv
KiBEZWZpbmUgV09SRFNfQklHRU5ESUFOIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdv
cmRzIHdpdGggdGhlIG1vc3QNCiAgICArICAgc2lnbmlmaWNhbnQgYnl0ZSBmaXJzdCAobGlrZSBN
b3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCkuICovDQogICAgKyNpZiBkZWZpbmVkIEFD
X0FQUExFX1VOSVZFUlNBTF9CVUlMRA0KICAgICsjIGlmIGRlZmluZWQgX19CSUdfRU5ESUFOX18N
CiAgICArIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxDQogICAgKyMgZW5kaWYNCiAgICArI2Vs
c2UNCiAgICArIyBpZm5kZWYgV09SRFNfQklHRU5ESUFODQogICAgKy8qICMgIHVuZGVmIFdPUkRT
X0JJR0VORElBTiAqLw0KICAgICsjIGVuZGlmDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArDQog
ICAgKyNpZmRlZiBIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURQ0KICAgICsjaWZkZWYg
TElCRkZJX0FTTQ0KICAgICsjZGVmaW5lIEZGSV9ISURERU4obmFtZSkgLmhpZGRlbiBuYW1lDQog
ICAgKyNlbHNlDQogICAgKyNkZWZpbmUgRkZJX0hJRERFTiBfX2F0dHJpYnV0ZV9fICgodmlzaWJp
bGl0eSAoImhpZGRlbiIpKSkNCiAgICArI2VuZGlmDQogICAgKyNlbHNlDQogICAgKyNpZmRlZiBM
SUJGRklfQVNNDQogICAgKyNkZWZpbmUgRkZJX0hJRERFTihuYW1lKQ0KICAgICsjZWxzZQ0KICAg
ICsjZGVmaW5lIEZGSV9ISURERU4NCiAgICArI2VuZGlmDQogICAgKyNlbmRpZg0KICAgICsNCiAg
ICBkaWZmIC0tZ2l0IGEvbGliZmZpL2luY2x1ZGUvZmZpLmggYi9saWJmZmkvaW5jbHVkZS9mZmku
aA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZGU3NzEwOQ0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWJmZmkvaW5jbHVkZS9mZmkuaA0KICAgIEBA
IC0wLDAgKzEsNTA5IEBADQogICAgKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi1DLSotDQogICAgKyAgIGxpYmZmaSAz
Ljk5OTk5IC0gQ29weXJpZ2h0IChjKSAyMDExLCAyMDE0IEFudGhvbnkgR3JlZW4NCiAgICArICAg
ICAgICAgICAgICAgICAgICAtIENvcHlyaWdodCAoYykgMTk5Ni0yMDAzLCAyMDA3LCAyMDA4IFJl
ZCBIYXQsIEluYy4NCiAgICArDQogICAgKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uDQogICAgKyAgIG9idGFpbmluZyBhIGNvcHkg
b2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uDQogICAgKyAgIGZp
bGVzICh0aGUgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dA0K
ICAgICsgICByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmln
aHRzIHRvIHVzZSwgY29weSwNCiAgICArICAgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp
YnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzDQogICAgKyAgIG9mIHRoZSBTb2Z0
d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQogICAg
KyAgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnM6DQogICAgKw0KICAgICsgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBw
ZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQ0KICAgICsgICBpbmNsdWRlZCBpbiBhbGwgY29waWVz
IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCiAgICArDQogICAgKyAg
IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg
QU5ZIEtJTkQsDQogICAgKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1Qg
TElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRg0KICAgICsgICBNRVJDSEFOVEFCSUxJVFksIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORA0KICAgICsgICBOT05JTkZSSU5HRU1F
TlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCiAgICArICAg
SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJ
VFksDQogICAgKyAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U
SEVSV0lTRSwgQVJJU0lORyBGUk9NLA0KICAgICsgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX
SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSDQogICAgKyAgIERFQUxJTkdTIElO
IFRIRSBTT0ZUV0FSRS4NCiAgICArDQogICAgKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQogICAgKw0K
ICAgICsvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tDQogICAgKyAgIFRoZSBiYXNpYyBBUEkgaXMgZGVzY3JpYmVkIGlu
IHRoZSBSRUFETUUgZmlsZS4NCiAgICArDQogICAgKyAgIFRoZSByYXcgQVBJIGlzIGRlc2lnbmVk
IHRvIGJ5cGFzcyBzb21lIG9mIHRoZSBhcmd1bWVudCBwYWNraW5nDQogICAgKyAgIGFuZCB1bnBh
Y2tpbmcgb24gYXJjaGl0ZWN0dXJlcyBmb3Igd2hpY2ggaXQgY2FuIGJlIGF2b2lkZWQuDQogICAg
Kw0KICAgICsgICBUaGUgY2xvc3VyZSBBUEkgYWxsb3dzIGludGVycHJldGVkIGZ1bmN0aW9ucyB0
byBiZSBwYWNrYWdlZCB1cA0KICAgICsgICBpbnNpZGUgYSBDIGZ1bmN0aW9uIHBvaW50ZXIsIHNv
IHRoYXQgdGhleSBjYW4gYmUgY2FsbGVkIGFzIEMgZnVuY3Rpb25zLA0KICAgICsgICB3aXRoIG5v
IHVuZGVyc3RhbmRpbmcgb24gdGhlIGNsaWVudCBzaWRlIHRoYXQgdGhleSBhcmUgaW50ZXJwcmV0
ZWQuDQogICAgKyAgIEl0IGNhbiBhbHNvIGJlIHVzZWQgaW4gb3RoZXIgY2FzZXMgaW4gd2hpY2gg
aXQgaXMgbmVjZXNzYXJ5IHRvIHBhY2thZ2UNCiAgICArICAgdXAgYSB1c2VyIHNwZWNpZmllZCBw
YXJhbWV0ZXIgYW5kIGEgZnVuY3Rpb24gcG9pbnRlciBhcyBhIHNpbmdsZQ0KICAgICsgICBmdW5j
dGlvbiBwb2ludGVyLg0KICAgICsNCiAgICArICAgVGhlIGNsb3N1cmUgQVBJIG11c3QgYmUgaW1w
bGVtZW50ZWQgaW4gb3JkZXIgdG8gZ2V0IGl0cyBmdW5jdGlvbmFsaXR5LA0KICAgICsgICBlLmcu
IGZvciB1c2UgYnkgZ2lqLiAgUm91dGluZXMgYXJlIHByb3ZpZGVkIHRvIGVtdWxhdGUgdGhlIHJh
dyBBUEkNCiAgICArICAgaWYgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0gZG9lc24ndCBhbGxvdyBm
YXN0ZXIgaW1wbGVtZW50YXRpb24uDQogICAgKw0KICAgICsgICBNb3JlIGRldGFpbHMgb24gdGhl
IHJhdyBhbmQgY2xvdXJlIEFQSSBjYW4gYmUgZm91bmQgaW46DQogICAgKw0KICAgICsgICBodHRw
Oi8vZ2NjLmdudS5vcmcvbWwvamF2YS8xOTk5LXEzL21zZzAwMTM4Lmh0bWwNCiAgICArDQogICAg
KyAgIGFuZA0KICAgICsNCiAgICArICAgaHR0cDovL2djYy5nbnUub3JnL21sL2phdmEvMTk5OS1x
My9tc2cwMDE3NC5odG1sDQogICAgKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQogICAgKw0KICAgICsjaWZu
ZGVmIExJQkZGSV9IDQogICAgKyNkZWZpbmUgTElCRkZJX0gNCiAgICArDQogICAgKyNpZmRlZiBf
X2NwbHVzcGx1cw0KICAgICtleHRlcm4gIkMiIHsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsv
KiBTcGVjaWZ5IHdoaWNoIGFyY2hpdGVjdHVyZSBsaWJmZmkgaXMgY29uZmlndXJlZCBmb3IuICov
DQogICAgKyNpZm5kZWYgWDg2XzY0DQogICAgKyNkZWZpbmUgWDg2XzY0DQogICAgKyNlbmRpZg0K
ICAgICsNCiAgICArLyogLS0tLSBTeXN0ZW0gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiAgICArDQogICAgKyNpbmNsdWRlIDxm
Zml0YXJnZXQuaD4NCiAgICArDQogICAgKyNpZm5kZWYgTElCRkZJX0FTTQ0KICAgICsNCiAgICAr
I2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fY2xhbmdfXykNCiAgICArI2RlZmlu
ZSBfX2F0dHJpYnV0ZV9fKFgpDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2luY2x1ZGUgPHN0
ZGRlZi5oPg0KICAgICsjaW5jbHVkZSA8bGltaXRzLmg+DQogICAgKw0KICAgICsvKiBMT05HX0xP
TkdfTUFYIGlzIG5vdCBhbHdheXMgZGVmaW5lZCAobm90IGlmIFNUUklDVF9BTlNJLCBmb3IgZXhh
bXBsZSkuDQogICAgKyAgIEJ1dCB3ZSBjYW4gZmluZCBpdCBlaXRoZXIgdW5kZXIgdGhlIGNvcnJl
Y3QgQU5TSSBuYW1lLCBvciB1bmRlciBHTlUNCiAgICArICAgQydzIGludGVybmFsIG5hbWUuICAq
Lw0KICAgICsNCiAgICArI2RlZmluZSBGRklfNjRfQklUX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3
DQogICAgKw0KICAgICsjaWZkZWYgTE9OR19MT05HX01BWA0KICAgICsjIGRlZmluZSBGRklfTE9O
R19MT05HX01BWCBMT05HX0xPTkdfTUFYDQogICAgKyNlbHNlDQogICAgKyMgaWZkZWYgTExPTkdf
TUFYDQogICAgKyMgIGRlZmluZSBGRklfTE9OR19MT05HX01BWCBMTE9OR19NQVgNCiAgICArIyAg
aWZkZWYgX0FJWDUyIC8qIG9yIG5ld2VyIGhhcyBDOTkgTExPTkdfTUFYICovDQogICAgKyMgICB1
bmRlZiBGRklfNjRfQklUX01BWA0KICAgICsjICAgZGVmaW5lIEZGSV82NF9CSVRfTUFYIDkyMjMz
NzIwMzY4NTQ3NzU4MDdMTA0KICAgICsjICBlbmRpZiAvKiBfQUlYNTIgb3IgbmV3ZXIgKi8NCiAg
ICArIyBlbHNlDQogICAgKyMgIGlmZGVmIF9fR05VQ19fDQogICAgKyMgICBkZWZpbmUgRkZJX0xP
TkdfTE9OR19NQVggX19MT05HX0xPTkdfTUFYX18NCiAgICArIyAgZW5kaWYNCiAgICArIyAgaWZk
ZWYgX0FJWCAvKiBBSVggNS4xIGFuZCBlYXJsaWVyIGhhdmUgTE9OR0xPTkdfTUFYICovDQogICAg
KyMgICBpZm5kZWYgX19QUEM2NF9fDQogICAgKyMgICAgaWYgZGVmaW5lZCAoX19JQk1DX18pIHx8
IGRlZmluZWQgKF9fSUJNQ1BQX18pDQogICAgKyMgICAgIGRlZmluZSBGRklfTE9OR19MT05HX01B
WCBMT05HTE9OR19NQVgNCiAgICArIyAgICBlbmRpZg0KICAgICsjICAgZW5kaWYgLyogX19QUEM2
NF9fICovDQogICAgKyMgICB1bmRlZiAgRkZJXzY0X0JJVF9NQVgNCiAgICArIyAgIGRlZmluZSBG
RklfNjRfQklUX01BWCA5MjIzMzcyMDM2ODU0Nzc1ODA3TEwNCiAgICArIyAgZW5kaWYNCiAgICAr
IyBlbmRpZg0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIFRoZSBjbG9zdXJlIGNvZGUgYXNz
dW1lcyB0aGF0IHRoaXMgd29ya3Mgb24gcG9pbnRlcnMsIGkuZS4gYSBzaXplX3QJKi8NCiAgICAr
LyogY2FuIGhvbGQgYSBwb2ludGVyLgkJCQkJCQkqLw0KICAgICsNCiAgICArdHlwZWRlZiBzdHJ1
Y3QgX2ZmaV90eXBlDQogICAgK3sNCiAgICArICBzaXplX3Qgc2l6ZTsNCiAgICArICB1bnNpZ25l
ZCBzaG9ydCBhbGlnbm1lbnQ7DQogICAgKyAgdW5zaWduZWQgc2hvcnQgdHlwZTsNCiAgICArICBz
dHJ1Y3QgX2ZmaV90eXBlICoqZWxlbWVudHM7DQogICAgK30gZmZpX3R5cGU7DQogICAgKw0KICAg
ICsjaWZuZGVmIExJQkZGSV9ISURFX0JBU0lDX1RZUEVTDQogICAgKyNpZiBTQ0hBUl9NQVggPT0g
MTI3DQogICAgKyMgZGVmaW5lIGZmaV90eXBlX3VjaGFyICAgICAgICAgICAgICAgIGZmaV90eXBl
X3VpbnQ4DQogICAgKyMgZGVmaW5lIGZmaV90eXBlX3NjaGFyICAgICAgICAgICAgICAgIGZmaV90
eXBlX3NpbnQ4DQogICAgKyNlbHNlDQogICAgKyAvLyNlcnJvciAiY2hhciBzaXplIG5vdCBzdXBw
b3J0ZWQiDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmIFNIUlRfTUFYID09IDMyNzY3DQog
ICAgKyMgZGVmaW5lIGZmaV90eXBlX3VzaG9ydCAgICAgICBmZmlfdHlwZV91aW50MTYNCiAgICAr
IyBkZWZpbmUgZmZpX3R5cGVfc3Nob3J0ICAgICAgIGZmaV90eXBlX3NpbnQxNg0KICAgICsjZWxp
ZiBTSFJUX01BWCA9PSAyMTQ3NDgzNjQ3DQogICAgKyMgZGVmaW5lIGZmaV90eXBlX3VzaG9ydCAg
ICAgICBmZmlfdHlwZV91aW50MzINCiAgICArIyBkZWZpbmUgZmZpX3R5cGVfc3Nob3J0ICAgICAg
IGZmaV90eXBlX3NpbnQzMg0KICAgICsjZWxzZQ0KICAgICsgI2Vycm9yICJzaG9ydCBzaXplIG5v
dCBzdXBwb3J0ZWQiDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmIElOVF9NQVggPT0gMzI3
NjcNCiAgICArIyBkZWZpbmUgZmZpX3R5cGVfdWludCAgICAgICAgIGZmaV90eXBlX3VpbnQxNg0K
ICAgICsjIGRlZmluZSBmZmlfdHlwZV9zaW50ICAgICAgICAgZmZpX3R5cGVfc2ludDE2DQogICAg
KyNlbGlmIElOVF9NQVggPT0gMjE0NzQ4MzY0Nw0KICAgICsjIGRlZmluZSBmZmlfdHlwZV91aW50
ICAgICAgICAgZmZpX3R5cGVfdWludDMyDQogICAgKyMgZGVmaW5lIGZmaV90eXBlX3NpbnQgICAg
ICAgICBmZmlfdHlwZV9zaW50MzINCiAgICArI2VsaWYgSU5UX01BWCA9PSA5MjIzMzcyMDM2ODU0
Nzc1ODA3DQogICAgKyMgZGVmaW5lIGZmaV90eXBlX3VpbnQgICAgICAgICBmZmlfdHlwZV91aW50
NjQNCiAgICArIyBkZWZpbmUgZmZpX3R5cGVfc2ludCAgICAgICAgIGZmaV90eXBlX3NpbnQ2NA0K
ICAgICsjZWxzZQ0KICAgICsgI2Vycm9yICJpbnQgc2l6ZSBub3Qgc3VwcG9ydGVkIg0KICAgICsj
ZW5kaWYNCiAgICArDQogICAgKyNpZiBMT05HX01BWCA9PSAyMTQ3NDgzNjQ3DQogICAgKyMgaWYg
RkZJX0xPTkdfTE9OR19NQVggIT0gRkZJXzY0X0JJVF9NQVgNCiAgICArICNlcnJvciAibm8gNjQt
Yml0IGRhdGEgdHlwZSBzdXBwb3J0ZWQiDQogICAgKyMgZW5kaWYNCiAgICArI2VsaWYgTE9OR19N
QVggIT0gRkZJXzY0X0JJVF9NQVgNCiAgICArICNlcnJvciAibG9uZyBzaXplIG5vdCBzdXBwb3J0
ZWQiDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArI2lmIExPTkdfTUFYID09IDIxNDc0ODM2NDcN
CiAgICArIyBkZWZpbmUgZmZpX3R5cGVfdWxvbmcgICAgICAgIGZmaV90eXBlX3VpbnQzMg0KICAg
ICsjIGRlZmluZSBmZmlfdHlwZV9zbG9uZyAgICAgICAgZmZpX3R5cGVfc2ludDMyDQogICAgKyNl
bGlmIExPTkdfTUFYID09IEZGSV82NF9CSVRfTUFYDQogICAgKyMgZGVmaW5lIGZmaV90eXBlX3Vs
b25nICAgICAgICBmZmlfdHlwZV91aW50NjQNCiAgICArIyBkZWZpbmUgZmZpX3R5cGVfc2xvbmcg
ICAgICAgIGZmaV90eXBlX3NpbnQ2NA0KICAgICsjZWxzZQ0KICAgICsgI2Vycm9yICJsb25nIHNp
emUgbm90IHN1cHBvcnRlZCINCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiBOZWVkIG1pbmlt
YWwgZGVjb3JhdGlvbnMgZm9yIERMTHMgdG8gd29ya3Mgb24gV2luZG93cy4gKi8NCiAgICArLyog
R0NDIGhhcyBhdXRvaW1wb3J0IGFuZCBhdXRvZXhwb3J0LiAgUmVseSBvbiBMaWJ0b29sIHRvICov
DQogICAgKy8qIGhlbHAgTVNWQyBleHBvcnQgZnJvbSBhIERMTCwgYnV0IGFsd2F5cyBkZWNsYXJl
IGRhdGEgICAqLw0KICAgICsvKiB0byBiZSBpbXBvcnRlZCBmb3IgTVNWQyBjbGllbnRzLiAgVGhp
cyBjb3N0cyBhbiBleHRyYSAgKi8NCiAgICArLyogaW5kaXJlY3Rpb24gZm9yIE1TVkMgY2xpZW50
cyB1c2luZyB0aGUgc3RhdGljIHZlcnNpb24gICovDQogICAgKy8qIG9mIHRoZSBsaWJyYXJ5LCBi
dXQgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdC4gIEJlc2lkZXMsICAqLw0KICAgICsvKiBhcyBhIHdv
cmthcm91bmQsIHRoZXkgY2FuIGRlZmluZSBGRklfQlVJTERJTkcgaWYgdGhleSAgKi8NCiAgICAr
LyogKmtub3cqIHRoZXkgYXJlIGdvaW5nIHRvIGxpbmsgd2l0aCB0aGUgc3RhdGljIGxpYnJhcnku
ICovDQogICAgKyNpZiBkZWZpbmVkIF9NU0NfVkVSICYmICFkZWZpbmVkIEZGSV9CVUlMRElORw0K
ICAgICsjZGVmaW5lIEZGSV9FWFRFUk4gZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQ0KICAg
ICsjZWxzZQ0KICAgICsjZGVmaW5lIEZGSV9FWFRFUk4gZXh0ZXJuDQogICAgKyNlbmRpZg0KICAg
ICsNCiAgICArLyogVGhlc2UgYXJlIGRlZmluZWQgaW4gdHlwZXMuYyAqLw0KICAgICtGRklfRVhU
RVJOIGZmaV90eXBlIGZmaV90eXBlX3ZvaWQ7DQogICAgK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZp
X3R5cGVfdWludDg7DQogICAgK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfc2ludDg7DQog
ICAgK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfdWludDE2Ow0KICAgICtGRklfRVhURVJO
IGZmaV90eXBlIGZmaV90eXBlX3NpbnQxNjsNCiAgICArRkZJX0VYVEVSTiBmZmlfdHlwZSBmZmlf
dHlwZV91aW50MzI7DQogICAgK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfc2ludDMyOw0K
ICAgICtGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3VpbnQ2NDsNCiAgICArRkZJX0VYVEVS
TiBmZmlfdHlwZSBmZmlfdHlwZV9zaW50NjQ7DQogICAgK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZp
X3R5cGVfZmxvYXQ7DQogICAgK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfZG91YmxlOw0K
ICAgICtGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX3BvaW50ZXI7DQogICAgKw0KICAgICsj
aWYgMQ0KICAgICtGRklfRVhURVJOIGZmaV90eXBlIGZmaV90eXBlX2xvbmdkb3VibGU7DQogICAg
KyNlbHNlDQogICAgKyNkZWZpbmUgZmZpX3R5cGVfbG9uZ2RvdWJsZSBmZmlfdHlwZV9kb3VibGUN
CiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWZkZWYgRkZJX1RBUkdFVF9IQVNfQ09NUExFWF9U
WVBFDQogICAgK0ZGSV9FWFRFUk4gZmZpX3R5cGUgZmZpX3R5cGVfY29tcGxleF9mbG9hdDsNCiAg
ICArRkZJX0VYVEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9jb21wbGV4X2RvdWJsZTsNCiAgICArI2lm
IDENCiAgICArRkZJX0VYVEVSTiBmZmlfdHlwZSBmZmlfdHlwZV9jb21wbGV4X2xvbmdkb3VibGU7
DQogICAgKyNlbHNlDQogICAgKyNkZWZpbmUgZmZpX3R5cGVfY29tcGxleF9sb25nZG91YmxlIGZm
aV90eXBlX2NvbXBsZXhfZG91YmxlDQogICAgKyNlbmRpZg0KICAgICsjZW5kaWYNCiAgICArI2Vu
ZGlmIC8qIExJQkZGSV9ISURFX0JBU0lDX1RZUEVTICovDQogICAgKw0KICAgICt0eXBlZGVmIGVu
dW0gew0KICAgICsgIEZGSV9PSyA9IDAsDQogICAgKyAgRkZJX0JBRF9UWVBFREVGLA0KICAgICsg
IEZGSV9CQURfQUJJDQogICAgK30gZmZpX3N0YXR1czsNCiAgICArDQogICAgK3R5cGVkZWYgdW5z
aWduZWQgRkZJX1RZUEU7DQogICAgKw0KICAgICt0eXBlZGVmIHN0cnVjdCB7DQogICAgKyAgZmZp
X2FiaSBhYmk7DQogICAgKyAgdW5zaWduZWQgbmFyZ3M7DQogICAgKyAgZmZpX3R5cGUgKiphcmdf
dHlwZXM7DQogICAgKyAgZmZpX3R5cGUgKnJ0eXBlOw0KICAgICsgIHVuc2lnbmVkIGJ5dGVzOw0K
ICAgICsgIHVuc2lnbmVkIGZsYWdzOw0KICAgICsjaWZkZWYgRkZJX0VYVFJBX0NJRl9GSUVMRFMN
CiAgICArICBGRklfRVhUUkFfQ0lGX0ZJRUxEUzsNCiAgICArI2VuZGlmDQogICAgK30gZmZpX2Np
ZjsNCiAgICArDQogICAgKyNpZiAwDQogICAgKy8qIFVzZWQgdG8gYWRqdXN0IHNpemUvYWxpZ25t
ZW50IG9mIGZmaSB0eXBlcy4gICovDQogICAgK3ZvaWQgZmZpX3ByZXBfdHlwZXMgKGZmaV9hYmkg
YWJpKTsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiBVc2VkIGludGVybmFsbHksIGJ1dCBv
dmVycmlkZGVuIGJ5IHNvbWUgYXJjaGl0ZWN0dXJlcyAqLw0KICAgICtmZmlfc3RhdHVzIGZmaV9w
cmVwX2NpZl9jb3JlKGZmaV9jaWYgKmNpZiwNCiAgICArCQkJICAgICBmZmlfYWJpIGFiaSwNCiAg
ICArCQkJICAgICB1bnNpZ25lZCBpbnQgaXN2YXJpYWRpYywNCiAgICArCQkJICAgICB1bnNpZ25l
ZCBpbnQgbmZpeGVkYXJncywNCiAgICArCQkJICAgICB1bnNpZ25lZCBpbnQgbnRvdGFsYXJncywN
CiAgICArCQkJICAgICBmZmlfdHlwZSAqcnR5cGUsDQogICAgKwkJCSAgICAgZmZpX3R5cGUgKiph
dHlwZXMpOw0KICAgICsNCiAgICArLyogLS0tLSBEZWZpbml0aW9ucyBmb3IgdGhlIHJhdyBBUEkg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiAgICArDQogICAgKyNp
Zm5kZWYgRkZJX1NJWkVPRl9BUkcNCiAgICArIyBpZiBMT05HX01BWCA9PSAyMTQ3NDgzNjQ3DQog
ICAgKyMgIGRlZmluZSBGRklfU0laRU9GX0FSRyAgICAgICAgNA0KICAgICsjIGVsaWYgTE9OR19N
QVggPT0gRkZJXzY0X0JJVF9NQVgNCiAgICArIyAgZGVmaW5lIEZGSV9TSVpFT0ZfQVJHICAgICAg
ICA4DQogICAgKyMgZW5kaWYNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjaWZuZGVmIEZGSV9T
SVpFT0ZfSkFWQV9SQVcNCiAgICArIyAgZGVmaW5lIEZGSV9TSVpFT0ZfSkFWQV9SQVcgRkZJX1NJ
WkVPRl9BUkcNCiAgICArI2VuZGlmDQogICAgKw0KICAgICt0eXBlZGVmIHVuaW9uIHsNCiAgICAr
ICBmZmlfc2FyZyAgc2ludDsNCiAgICArICBmZmlfYXJnICAgdWludDsNCiAgICArICBmbG9hdAkg
ICAgZmx0Ow0KICAgICsgIGNoYXIgICAgICBkYXRhW0ZGSV9TSVpFT0ZfQVJHXTsNCiAgICArICB2
b2lkKiAgICAgcHRyOw0KICAgICt9IGZmaV9yYXc7DQogICAgKw0KICAgICsjaWYgRkZJX1NJWkVP
Rl9KQVZBX1JBVyA9PSA0ICYmIEZGSV9TSVpFT0ZfQVJHID09IDgNCiAgICArLyogVGhpcyBpcyBh
IHNwZWNpYWwgY2FzZSBmb3IgbWlwczY0L24zMiBBQkkgKGFuZCBwZXJoYXBzIG90aGVycykgd2hl
cmUNCiAgICArICAgc2l6ZW9mKHZvaWQgKikgaXMgNCBhbmQgRkZJX1NJWkVPRl9BUkcgaXMgOC4g
ICovDQogICAgK3R5cGVkZWYgdW5pb24gew0KICAgICsgIHNpZ25lZCBpbnQJc2ludDsNCiAgICAr
ICB1bnNpZ25lZCBpbnQJdWludDsNCiAgICArICBmbG9hdAkJZmx0Ow0KICAgICsgIGNoYXIJCWRh
dGFbRkZJX1NJWkVPRl9KQVZBX1JBV107DQogICAgKyAgdm9pZCoJCXB0cjsNCiAgICArfSBmZmlf
amF2YV9yYXc7DQogICAgKyNlbHNlDQogICAgK3R5cGVkZWYgZmZpX3JhdyBmZmlfamF2YV9yYXc7
DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArDQogICAgK3ZvaWQgZmZpX3Jhd19jYWxsIChmZmlf
Y2lmICpjaWYsDQogICAgKwkJICAgdm9pZCAoKmZuKSh2b2lkKSwNCiAgICArCQkgICB2b2lkICpy
dmFsdWUsDQogICAgKwkJICAgZmZpX3JhdyAqYXZhbHVlKTsNCiAgICArDQogICAgK3ZvaWQgZmZp
X3B0cmFycmF5X3RvX3JhdyAoZmZpX2NpZiAqY2lmLCB2b2lkICoqYXJncywgZmZpX3JhdyAqcmF3
KTsNCiAgICArdm9pZCBmZmlfcmF3X3RvX3B0cmFycmF5IChmZmlfY2lmICpjaWYsIGZmaV9yYXcg
KnJhdywgdm9pZCAqKmFyZ3MpOw0KICAgICtzaXplX3QgZmZpX3Jhd19zaXplIChmZmlfY2lmICpj
aWYpOw0KICAgICsNCiAgICArLyogVGhpcyBpcyBhbmFsb2dvdXMgdG8gdGhlIHJhdyBBUEksIGV4
Y2VwdCBpdCB1c2VzIEphdmEgcGFyYW1ldGVyCSovDQogICAgKy8qIHBhY2tpbmcsIGV2ZW4gb24g
NjQtYml0IG1hY2hpbmVzLiAgSS5lLiBvbiA2NC1iaXQgbWFjaGluZXMJCSovDQogICAgKy8qIGxv
bmdzIGFuZCBkb3VibGVzIGFyZSBmb2xsb3dlZCBieSBhbiBlbXB0eSA2NC1iaXQgd29yZC4JCSov
DQogICAgKw0KICAgICt2b2lkIGZmaV9qYXZhX3Jhd19jYWxsIChmZmlfY2lmICpjaWYsDQogICAg
KwkJCXZvaWQgKCpmbikodm9pZCksDQogICAgKwkJCXZvaWQgKnJ2YWx1ZSwNCiAgICArCQkJZmZp
X2phdmFfcmF3ICphdmFsdWUpOw0KICAgICsNCiAgICArdm9pZCBmZmlfamF2YV9wdHJhcnJheV90
b19yYXcgKGZmaV9jaWYgKmNpZiwgdm9pZCAqKmFyZ3MsIGZmaV9qYXZhX3JhdyAqcmF3KTsNCiAg
ICArdm9pZCBmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkgKGZmaV9jaWYgKmNpZiwgZmZpX2phdmFf
cmF3ICpyYXcsIHZvaWQgKiphcmdzKTsNCiAgICArc2l6ZV90IGZmaV9qYXZhX3Jhd19zaXplIChm
ZmlfY2lmICpjaWYpOw0KICAgICsNCiAgICArLyogLS0tLSBEZWZpbml0aW9ucyBmb3IgY2xvc3Vy
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiAgICArDQog
ICAgKyNpZiBGRklfQ0xPU1VSRVMNCiAgICArDQogICAgKyNpZmRlZiBfTVNDX1ZFUg0KICAgICtf
X2RlY2xzcGVjKGFsaWduKDgpKQ0KICAgICsjZW5kaWYNCiAgICArdHlwZWRlZiBzdHJ1Y3Qgew0K
ICAgICsjaWYgMA0KICAgICsgIHZvaWQgKnRyYW1wb2xpbmVfdGFibGU7DQogICAgKyAgdm9pZCAq
dHJhbXBvbGluZV90YWJsZV9lbnRyeTsNCiAgICArI2Vsc2UNCiAgICArICBjaGFyIHRyYW1wW0ZG
SV9UUkFNUE9MSU5FX1NJWkVdOw0KICAgICsjZW5kaWYNCiAgICArICBmZmlfY2lmICAgKmNpZjsN
CiAgICArICB2b2lkICAgICAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKTsNCiAg
ICArICB2b2lkICAgICAgKnVzZXJfZGF0YTsNCiAgICArI2lmZGVmIF9fR05VQ19fDQogICAgK30g
ZmZpX2Nsb3N1cmUgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCAoOCkpKTsNCiAgICArI2Vsc2UNCiAg
ICArfSBmZmlfY2xvc3VyZTsNCiAgICArIyBpZmRlZiBfX3NnaQ0KICAgICsjICBwcmFnbWEgcGFj
ayAwDQogICAgKyMgZW5kaWYNCiAgICArI2VuZGlmDQogICAgKw0KICAgICt2b2lkICpmZmlfY2xv
c3VyZV9hbGxvYyAoc2l6ZV90IHNpemUsIHZvaWQgKipjb2RlKTsNCiAgICArdm9pZCBmZmlfY2xv
c3VyZV9mcmVlICh2b2lkICopOw0KICAgICsNCiAgICArZmZpX3N0YXR1cw0KICAgICtmZmlfcHJl
cF9jbG9zdXJlIChmZmlfY2xvc3VyZSosDQogICAgKwkJICBmZmlfY2lmICosDQogICAgKwkJICB2
b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLA0KICAgICsJCSAgdm9pZCAq
dXNlcl9kYXRhKTsNCiAgICArDQogICAgK2ZmaV9zdGF0dXMNCiAgICArZmZpX3ByZXBfY2xvc3Vy
ZV9sb2MgKGZmaV9jbG9zdXJlKiwNCiAgICArCQkgICAgICBmZmlfY2lmICosDQogICAgKwkJICAg
ICAgdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQqKSwNCiAgICArCQkgICAg
ICB2b2lkICp1c2VyX2RhdGEsDQogICAgKwkJICAgICAgdm9pZCpjb2RlbG9jKTsNCiAgICArDQog
ICAgKyNpZmRlZiBfX3NnaQ0KICAgICsjIHByYWdtYSBwYWNrIDgNCiAgICArI2VuZGlmDQogICAg
K3R5cGVkZWYgc3RydWN0IHsNCiAgICArI2lmIDANCiAgICArICB2b2lkICp0cmFtcG9saW5lX3Rh
YmxlOw0KICAgICsgIHZvaWQgKnRyYW1wb2xpbmVfdGFibGVfZW50cnk7DQogICAgKyNlbHNlDQog
ICAgKyAgY2hhciB0cmFtcFtGRklfVFJBTVBPTElORV9TSVpFXTsNCiAgICArI2VuZGlmDQogICAg
KyAgZmZpX2NpZiAgICpjaWY7DQogICAgKw0KICAgICsjaWYgIUZGSV9OQVRJVkVfUkFXX0FQSQ0K
ICAgICsNCiAgICArICAvKiBpZiB0aGlzIGlzIGVuYWJsZWQsIHRoZW4gYSByYXcgY2xvc3VyZSBo
YXMgdGhlIHNhbWUgbGF5b3V0IA0KICAgICsgICAgIGFzIGEgcmVndWxhciBjbG9zdXJlLiAgV2Ug
dXNlIHRoaXMgdG8gaW5zdGFsbCBhbiBpbnRlcm1lZGlhdGUgDQogICAgKyAgICAgaGFuZGxlciB0
byBkbyB0aGUgdHJhbnNhbHRpb24sIHZvaWQqKiAtPiBmZmlfcmF3Ki4gKi8NCiAgICArDQogICAg
KyAgdm9pZCAgICAgKCp0cmFuc2xhdGVfYXJncykoZmZpX2NpZiosdm9pZCosdm9pZCoqLHZvaWQq
KTsNCiAgICArICB2b2lkICAgICAgKnRoaXNfY2xvc3VyZTsNCiAgICArDQogICAgKyNlbmRpZg0K
ICAgICsNCiAgICArICB2b2lkICAgICAoKmZ1bikoZmZpX2NpZiosdm9pZCosZmZpX3Jhdyosdm9p
ZCopOw0KICAgICsgIHZvaWQgICAgICAqdXNlcl9kYXRhOw0KICAgICsNCiAgICArfSBmZmlfcmF3
X2Nsb3N1cmU7DQogICAgKw0KICAgICt0eXBlZGVmIHN0cnVjdCB7DQogICAgKyNpZiAwDQogICAg
KyAgdm9pZCAqdHJhbXBvbGluZV90YWJsZTsNCiAgICArICB2b2lkICp0cmFtcG9saW5lX3RhYmxl
X2VudHJ5Ow0KICAgICsjZWxzZQ0KICAgICsgIGNoYXIgdHJhbXBbRkZJX1RSQU1QT0xJTkVfU0la
RV07DQogICAgKyNlbmRpZg0KICAgICsNCiAgICArICBmZmlfY2lmICAgKmNpZjsNCiAgICArDQog
ICAgKyNpZiAhRkZJX05BVElWRV9SQVdfQVBJDQogICAgKw0KICAgICsgIC8qIGlmIHRoaXMgaXMg
ZW5hYmxlZCwgdGhlbiBhIHJhdyBjbG9zdXJlIGhhcyB0aGUgc2FtZSBsYXlvdXQgDQogICAgKyAg
ICAgYXMgYSByZWd1bGFyIGNsb3N1cmUuICBXZSB1c2UgdGhpcyB0byBpbnN0YWxsIGFuIGludGVy
bWVkaWF0ZSANCiAgICArICAgICBoYW5kbGVyIHRvIGRvIHRoZSB0cmFuc2FsdGlvbiwgdm9pZCoq
IC0+IGZmaV9yYXcqLiAqLw0KICAgICsNCiAgICArICB2b2lkICAgICAoKnRyYW5zbGF0ZV9hcmdz
KShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopOw0KICAgICsgIHZvaWQgICAgICAqdGhpc19j
bG9zdXJlOw0KICAgICsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsgIHZvaWQgICAgICgqZnVu
KShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKTsNCiAgICArICB2b2lkICAgICAg
KnVzZXJfZGF0YTsNCiAgICArDQogICAgK30gZmZpX2phdmFfcmF3X2Nsb3N1cmU7DQogICAgKw0K
ICAgICtmZmlfc3RhdHVzDQogICAgK2ZmaV9wcmVwX3Jhd19jbG9zdXJlIChmZmlfcmF3X2Nsb3N1
cmUqLA0KICAgICsJCSAgICAgIGZmaV9jaWYgKmNpZiwNCiAgICArCQkgICAgICB2b2lkICgqZnVu
KShmZmlfY2lmKix2b2lkKixmZmlfcmF3Kix2b2lkKiksDQogICAgKwkJICAgICAgdm9pZCAqdXNl
cl9kYXRhKTsNCiAgICArDQogICAgK2ZmaV9zdGF0dXMNCiAgICArZmZpX3ByZXBfcmF3X2Nsb3N1
cmVfbG9jIChmZmlfcmF3X2Nsb3N1cmUqLA0KICAgICsJCQkgIGZmaV9jaWYgKmNpZiwNCiAgICAr
CQkJICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfcmF3Kix2b2lkKiksDQogICAgKwkJ
CSAgdm9pZCAqdXNlcl9kYXRhLA0KICAgICsJCQkgIHZvaWQgKmNvZGVsb2MpOw0KICAgICsNCiAg
ICArZmZpX3N0YXR1cw0KICAgICtmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlIChmZmlfamF2YV9y
YXdfY2xvc3VyZSosDQogICAgKwkJICAgICAgICAgICBmZmlfY2lmICpjaWYsDQogICAgKwkJICAg
ICAgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwN
CiAgICArCQkgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSk7DQogICAgKw0KICAgICtmZmlfc3Rh
dHVzDQogICAgK2ZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jIChmZmlfamF2YV9yYXdfY2xv
c3VyZSosDQogICAgKwkJCSAgICAgICBmZmlfY2lmICpjaWYsDQogICAgKwkJCSAgICAgICB2b2lk
ICgqZnVuKShmZmlfY2lmKix2b2lkKixmZmlfamF2YV9yYXcqLHZvaWQqKSwNCiAgICArCQkJICAg
ICAgIHZvaWQgKnVzZXJfZGF0YSwNCiAgICArCQkJICAgICAgIHZvaWQgKmNvZGVsb2MpOw0KICAg
ICsNCiAgICArI2VuZGlmIC8qIEZGSV9DTE9TVVJFUyAqLw0KICAgICsNCiAgICArI2lmIEZGSV9H
T19DTE9TVVJFUw0KICAgICsNCiAgICArdHlwZWRlZiBzdHJ1Y3Qgew0KICAgICsgIHZvaWQgICAg
ICAqdHJhbXA7DQogICAgKyAgZmZpX2NpZiAgICpjaWY7DQogICAgKyAgdm9pZCAgICAgKCpmdW4p
KGZmaV9jaWYqLHZvaWQqLHZvaWQqKix2b2lkKik7DQogICAgK30gZmZpX2dvX2Nsb3N1cmU7DQog
ICAgKw0KICAgICtmZmlfc3RhdHVzIGZmaV9wcmVwX2dvX2Nsb3N1cmUgKGZmaV9nb19jbG9zdXJl
KiwgZmZpX2NpZiAqLA0KICAgICsJCQkJdm9pZCAoKmZ1bikoZmZpX2NpZiosdm9pZCosdm9pZCoq
LHZvaWQqKSk7DQogICAgKw0KICAgICt2b2lkIGZmaV9jYWxsX2dvIChmZmlfY2lmICpjaWYsIHZv
aWQgKCpmbikodm9pZCksIHZvaWQgKnJ2YWx1ZSwNCiAgICArCQkgIHZvaWQgKiphdmFsdWUsIHZv
aWQgKmNsb3N1cmUpOw0KICAgICsNCiAgICArI2VuZGlmIC8qIEZGSV9HT19DTE9TVVJFUyAqLw0K
ICAgICsNCiAgICArLyogLS0tLSBQdWJsaWMgaW50ZXJmYWNlIGRlZmluaXRpb24gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8NCiAgICArDQogICAgK2ZmaV9zdGF0dXMg
ZmZpX3ByZXBfY2lmKGZmaV9jaWYgKmNpZiwNCiAgICArCQkJZmZpX2FiaSBhYmksDQogICAgKwkJ
CXVuc2lnbmVkIGludCBuYXJncywNCiAgICArCQkJZmZpX3R5cGUgKnJ0eXBlLA0KICAgICsJCQlm
ZmlfdHlwZSAqKmF0eXBlcyk7DQogICAgKw0KICAgICtmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl92
YXIoZmZpX2NpZiAqY2lmLA0KICAgICsJCQkgICAgZmZpX2FiaSBhYmksDQogICAgKwkJCSAgICB1
bnNpZ25lZCBpbnQgbmZpeGVkYXJncywNCiAgICArCQkJICAgIHVuc2lnbmVkIGludCBudG90YWxh
cmdzLA0KICAgICsJCQkgICAgZmZpX3R5cGUgKnJ0eXBlLA0KICAgICsJCQkgICAgZmZpX3R5cGUg
KiphdHlwZXMpOw0KICAgICsNCiAgICArdm9pZCBmZmlfY2FsbChmZmlfY2lmICpjaWYsDQogICAg
KwkgICAgICB2b2lkICgqZm4pKHZvaWQpLA0KICAgICsJICAgICAgdm9pZCAqcnZhbHVlLA0KICAg
ICsJICAgICAgdm9pZCAqKmF2YWx1ZSk7DQogICAgKw0KICAgICsvKiBVc2VmdWwgZm9yIGVsaW1p
bmF0aW5nIGNvbXBpbGVyIHdhcm5pbmdzICovDQogICAgKyNkZWZpbmUgRkZJX0ZOKGYpICgodm9p
ZCAoKikodm9pZCkpZikNCiAgICArDQogICAgKy8qIC0tLS0gRGVmaW5pdGlvbnMgc2hhcmVkIHdp
dGggYXNzZW1ibHkgY29kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQogICAgKw0K
ICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIElmIHRoZXNlIGNoYW5nZSwgdXBkYXRlIHNyYy9t
aXBzL2ZmaXRhcmdldC5oLiAqLw0KICAgICsjZGVmaW5lIEZGSV9UWVBFX1ZPSUQgICAgICAgMCAg
ICANCiAgICArI2RlZmluZSBGRklfVFlQRV9JTlQgICAgICAgIDENCiAgICArI2RlZmluZSBGRklf
VFlQRV9GTE9BVCAgICAgIDIgICAgDQogICAgKyNkZWZpbmUgRkZJX1RZUEVfRE9VQkxFICAgICAz
DQogICAgKyNpZiAxDQogICAgKyNkZWZpbmUgRkZJX1RZUEVfTE9OR0RPVUJMRSA0DQogICAgKyNl
bHNlDQogICAgKyNkZWZpbmUgRkZJX1RZUEVfTE9OR0RPVUJMRSBGRklfVFlQRV9ET1VCTEUNCiAg
ICArI2VuZGlmDQogICAgKyNkZWZpbmUgRkZJX1RZUEVfVUlOVDggICAgICA1ICAgDQogICAgKyNk
ZWZpbmUgRkZJX1RZUEVfU0lOVDggICAgICA2DQogICAgKyNkZWZpbmUgRkZJX1RZUEVfVUlOVDE2
ICAgICA3IA0KICAgICsjZGVmaW5lIEZGSV9UWVBFX1NJTlQxNiAgICAgOA0KICAgICsjZGVmaW5l
IEZGSV9UWVBFX1VJTlQzMiAgICAgOQ0KICAgICsjZGVmaW5lIEZGSV9UWVBFX1NJTlQzMiAgICAg
MTANCiAgICArI2RlZmluZSBGRklfVFlQRV9VSU5UNjQgICAgIDExDQogICAgKyNkZWZpbmUgRkZJ
X1RZUEVfU0lOVDY0ICAgICAxMg0KICAgICsjZGVmaW5lIEZGSV9UWVBFX1NUUlVDVCAgICAgMTMN
CiAgICArI2RlZmluZSBGRklfVFlQRV9QT0lOVEVSICAgIDE0DQogICAgKyNkZWZpbmUgRkZJX1RZ
UEVfQ09NUExFWCAgICAxNQ0KICAgICsNCiAgICArLyogVGhpcyBzaG91bGQgYWx3YXlzIHJlZmVy
IHRvIHRoZSBsYXN0IHR5cGUgY29kZSAoZm9yIHNhbml0eSBjaGVja3MpICovDQogICAgKy8qID8/
PyBJZGVhbGx5LCBhbnl3YXkuICBUaGVyZSBhcmUgYXNzZW1ibHkgZmlsZXMgdGhhdCBzdGlsbCBk
ZXBlbmQNCiAgICArICAgb24gdGhpcyBub3QgaW5jbHVkaW5nIENPTVBMRVguICAqLw0KICAgICsj
aWZkZWYgRkZJX1RBUkdFVF9IQVNfQ09NUExFWF9UWVBFDQogICAgKyMgZGVmaW5lIEZGSV9UWVBF
X0xBU1QgICAgICBGRklfVFlQRV9DT01QTEVYDQogICAgKyNlbHNlDQogICAgKyMgZGVmaW5lIEZG
SV9UWVBFX0xBU1QgICAgICBGRklfVFlQRV9QT0lOVEVSDQogICAgKyNlbmRpZg0KICAgICsNCiAg
ICArI2lmZGVmIF9fY3BsdXNwbHVzDQogICAgK30NCiAgICArI2VuZGlmDQogICAgKw0KICAgICsj
ZW5kaWYNCiAgICBkaWZmIC0tZ2l0IGEvbGliZmZpL2luY2x1ZGUvZmZpdGFyZ2V0LmggYi9saWJm
ZmkvaW5jbHVkZS9mZml0YXJnZXQuaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uOGE3YzY4ZQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9saWJmZmkv
aW5jbHVkZS9mZml0YXJnZXQuaA0KICAgIEBAIC0wLDAgKzEsMTQxIEBADQogICAgKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi1DLSotDQogICAgKyAgIGZmaXRhcmdldC5oIC0gQ29weXJpZ2h0IChjKSAyMDEyLCAyMDE0
ICBBbnRob255IEdyZWVuDQogICAgKyAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk2
LTIwMDMsIDIwMTAgIFJlZCBIYXQsIEluYy4NCiAgICArICAgICAgICAgICAgICAgICBDb3B5cmln
aHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KICAgICsNCiAgICAr
ICAgVGFyZ2V0IGNvbmZpZ3VyYXRpb24gbWFjcm9zIGZvciB4ODYgYW5kIHg4Ni02NC4NCiAgICAr
DQogICAgKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0
byBhbnkgcGVyc29uIG9idGFpbmluZw0KICAgICsgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBh
bmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUNCiAgICArICAgYGBTb2Z0d2Fy
ZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk
aW5nDQogICAgKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg
bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwNCiAgICArICAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwg
YW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvDQogICAgKyAgIHBlcm1p
dCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3Vi
amVjdCB0bw0KICAgICsgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQogICAgKw0KICAgICsg
ICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBz
aGFsbCBiZSBpbmNsdWRlZA0KICAgICsgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv
cnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4NCiAgICArDQogICAgKyAgIFRIRSBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsDQogICAgKyAg
IEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FS
UkFOVElFUyBPRg0KICAgICsgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFORA0KICAgICsgICBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQNCiAgICArICAgSE9MREVSUyBCRSBMSUFCTEUg
Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksDQogICAgKyAgIFdIRVRI
RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBG
Uk9NLA0KICAgICsgICBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBP
UiBUSEUgVVNFIE9SIE9USEVSDQogICAgKyAgIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCiAg
ICArDQogICAgKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQogICAgKw0KICAgICsjaWZuZGVmIExJQkZG
SV9UQVJHRVRfSA0KICAgICsjZGVmaW5lIExJQkZGSV9UQVJHRVRfSA0KICAgICsNCiAgICArI2lm
bmRlZiBMSUJGRklfSA0KICAgICsjZXJyb3IgIlBsZWFzZSBkbyBub3QgaW5jbHVkZSBmZml0YXJn
ZXQuaCBkaXJlY3RseSBpbnRvIHlvdXIgc291cmNlLiAgVXNlIGZmaS5oIGluc3RlYWQuIg0KICAg
ICsjZW5kaWYNCiAgICArDQogICAgKy8qIC0tLS0gU3lzdGVtIHNwZWNpZmljIGNvbmZpZ3VyYXRp
b25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovDQogICAgKw0KICAgICsv
KiBGb3IgY29kZSBjb21tb24gdG8gYWxsIHBsYXRmb3JtcyBvbiB4ODYgYW5kIHg4Nl82NC4gKi8N
CiAgICArI2RlZmluZSBYODZfQU5ZDQogICAgKw0KICAgICsjaWYgZGVmaW5lZCAoWDg2XzY0KSAm
JiBkZWZpbmVkIChfX2kzODZfXykNCiAgICArI3VuZGVmIFg4Nl82NA0KICAgICsjZGVmaW5lIFg4
Ng0KICAgICsjZW5kaWYNCiAgICArDQogICAgKyNpZmRlZiBYODZfV0lONjQNCiAgICArI2RlZmlu
ZSBGRklfU0laRU9GX0FSRyA4DQogICAgKyNkZWZpbmUgVVNFX0JVSUxUSU5fRkZTIDAgLyogbm90
IHlldCBpbXBsZW1lbnRlZCBpbiBtaW5ndy02NCAqLw0KICAgICsjZW5kaWYNCiAgICArDQogICAg
KyNkZWZpbmUgRkZJX1RBUkdFVF9TUEVDSUZJQ19TVEFDS19TUEFDRV9BTExPQ0FUSU9ODQogICAg
Kw0KICAgICsjaWYgIWRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKFg4Nl9EQVJXSU4pICYm
ICFkZWZpbmVkKFg4Nl82NF9EQVJXSU4pDQogICAgKyNkZWZpbmUgRkZJX1RBUkdFVF9IQVNfQ09N
UExFWF9UWVBFDQogICAgKyNlbmRpZg0KICAgICsNCiAgICArLyogLS0tLSBHZW5lcmljIHR5cGUg
ZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8N
CiAgICArDQogICAgKyNpZm5kZWYgTElCRkZJX0FTTQ0KICAgICsjaWZkZWYgWDg2X1dJTjY0DQog
ICAgKyNpZmRlZiBfTVNDX1ZFUg0KICAgICt0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICAgICAg
ZmZpX2FyZzsNCiAgICArdHlwZWRlZiBfX2ludDY0ICAgICAgICAgICAgICAgIGZmaV9zYXJnOw0K
ICAgICsjZWxzZQ0KICAgICt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyAgICAgZmZpX2FyZzsN
CiAgICArdHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgICAgIGZmaV9zYXJnOw0KICAgICsjZW5k
aWYNCiAgICArI2Vsc2UNCiAgICArI2lmIGRlZmluZWQgX194ODZfNjRfXyAmJiBkZWZpbmVkIF9f
SUxQMzJfXw0KICAgICsjZGVmaW5lIEZGSV9TSVpFT0ZfQVJHIDgNCiAgICArI2RlZmluZSBGRklf
U0laRU9GX0pBVkFfUkFXICA0DQogICAgK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nICAgICBm
ZmlfYXJnOw0KICAgICt0eXBlZGVmIGxvbmcgbG9uZyAgICAgICAgICAgICAgZmZpX3Nhcmc7DQog
ICAgKyNlbHNlDQogICAgK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgICAgICAgICBmZmlfYXJnOw0K
ICAgICt0eXBlZGVmIHNpZ25lZCBsb25nICAgICAgICAgICAgZmZpX3Nhcmc7DQogICAgKyNlbmRp
Zg0KICAgICsjZW5kaWYNCiAgICArDQogICAgK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsNCiAgICAr
I2lmIGRlZmluZWQoWDg2X1dJTjY0KQ0KICAgICsgIEZGSV9GSVJTVF9BQkkgPSAwLA0KICAgICsg
IEZGSV9XSU42NCwNCiAgICArICBGRklfTEFTVF9BQkksDQogICAgKyAgRkZJX0RFRkFVTFRfQUJJ
ID0gRkZJX1dJTjY0DQogICAgKw0KICAgICsjZWxpZiBkZWZpbmVkKFg4Nl82NCkgfHwgZGVmaW5l
ZChYODZfNjRfREFSV0lOKQ0KICAgICsgIEZGSV9GSVJTVF9BQkkgPSAxLA0KICAgICsgIEZGSV9V
TklYNjQsDQogICAgKyAgRkZJX0xBU1RfQUJJLA0KICAgICsgIEZGSV9ERUZBVUxUX0FCSSA9IEZG
SV9VTklYNjQNCiAgICArDQogICAgKyNlbGlmIGRlZmluZWQoWDg2X1dJTjMyKQ0KICAgICsgIEZG
SV9GSVJTVF9BQkkgPSAwLA0KICAgICsgIEZGSV9TWVNWICAgICAgPSAxLA0KICAgICsgIEZGSV9T
VERDQUxMICAgPSAyLA0KICAgICsgIEZGSV9USElTQ0FMTCAgPSAzLA0KICAgICsgIEZGSV9GQVNU
Q0FMTCAgPSA0LA0KICAgICsgIEZGSV9NU19DREVDTCAgPSA1LA0KICAgICsgIEZGSV9QQVNDQUwg
ICAgPSA2LA0KICAgICsgIEZGSV9SRUdJU1RFUiAgPSA3LA0KICAgICsgIEZGSV9MQVNUX0FCSSwN
CiAgICArICBGRklfREVGQVVMVF9BQkkgPSBGRklfTVNfQ0RFQ0wNCiAgICArI2Vsc2UNCiAgICAr
ICBGRklfRklSU1RfQUJJID0gMCwNCiAgICArICBGRklfU1lTViAgICAgID0gMSwNCiAgICArICBG
RklfVEhJU0NBTEwgID0gMywNCiAgICArICBGRklfRkFTVENBTEwgID0gNCwNCiAgICArICBGRklf
U1REQ0FMTCAgID0gNSwNCiAgICArICBGRklfUEFTQ0FMICAgID0gNiwNCiAgICArICBGRklfUkVH
SVNURVIgID0gNywNCiAgICArICBGRklfTVNfQ0RFQ0wgID0gOCwNCiAgICArICBGRklfTEFTVF9B
QkksDQogICAgKyAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX1NZU1YNCiAgICArI2VuZGlmDQogICAg
K30gZmZpX2FiaTsNCiAgICArI2VuZGlmDQogICAgKw0KICAgICsvKiAtLS0tIERlZmluaXRpb25z
IGZvciBjbG9zdXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
Lw0KICAgICsNCiAgICArI2RlZmluZSBGRklfQ0xPU1VSRVMgMQ0KICAgICsNCiAgICArI2lmICFk
ZWZpbmVkKFg4Nl9EQVJXSU4pICYmICFkZWZpbmVkKFg4Nl82NF9EQVJXSU4pDQogICAgKyNkZWZp
bmUgRkZJX0dPX0NMT1NVUkVTIDENCiAgICArI2VuZGlmDQogICAgKw0KICAgICsjZGVmaW5lIEZG
SV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAoRkZJX1RZUEVfTEFTVCArIDEpDQogICAgKyNkZWZpbmUg
RkZJX1RZUEVfU01BTExfU1RSVUNUXzJCIChGRklfVFlQRV9MQVNUICsgMikNCiAgICArI2RlZmlu
ZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKEZGSV9UWVBFX0xBU1QgKyAzKQ0KICAgICsjZGVm
aW5lIEZGSV9UWVBFX01TX1NUUlVDVCAgICAgICAoRkZJX1RZUEVfTEFTVCArIDQpDQogICAgKw0K
ICAgICsjaWYgZGVmaW5lZCAoWDg2XzY0KSB8fCBkZWZpbmVkKFg4Nl9XSU42NCkgfHwgZGVmaW5l
ZChYODZfNjRfREFSV0lOKQ0KICAgICsjIGRlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDI0DQog
ICAgKyMgZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwDQogICAgKyNlbHNlDQogICAgKyMgZGVm
aW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMTINCiAgICArIyBkZWZpbmUgRkZJX05BVElWRV9SQVdf
QVBJIDEgIC8qIHg4NiBoYXMgbmF0aXZlIHJhdyBhcGkgc3VwcG9ydCAqLw0KICAgICsjZW5kaWYN
CiAgICArDQogICAgKyNlbmRpZg0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KDQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:25:22 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:25:22 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlZ4-0000X6-F1; Fri, 27 Sep 2019 08:25:22 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlZ3-0000X1-7w
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:25:21 +0000
X-Inumbo-ID: 57a48854-e100-11e9-9670-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 57a48854-e100-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:25:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8B3B4F200A;
 Fri, 27 Sep 2019 10:25:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id i-lrm9CUgD6O; Fri, 27 Sep 2019 10:25:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 5DCA6F2006;
 Fri, 27 Sep 2019 10:25:15 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:25:15 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:25:15
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/GCC PATCH v2 5/5] Adding extra information
Thread-Index: AQHVdH3VewkivaHZ+UqJMOGvDlTZA6c/MTAA
Date: Fri, 27 Sep 2019 08:25:14 +0000
Message-ID: <1C4090FA-C4B5-4E61-9105-C01DBF37EE4C@neclab.eu>
References: <20190926151911.11587-1-Charalampos.Mainas@neclab.eu>
 <20190926151911.11587-6-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926151911.11587-6-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <FF5DE685530F524888E23C0100C9061D@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/GCC PATCH v2 5/5] Adding extra
 information
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsIHRoaXMgcGF0Y2ggbG9va3MgZ29vZC4NCg0KVGhhbmtzLA0KDQotLSBG
ZWxpcGUNCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjE5LCAiQ2hhcmFsYW1wb3MgTWFpbmFzIiA8Q2hhcmFs
YW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBBZGQgZXh0ZXJuYWwgbGlicmFy
eSBkZXBlZGVuY2llcyBhbmQga25vd24gYnVnIG5vdGljZS4NCiAgICANCiAgICBTaWduZWQtb2Zm
LWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+DQog
ICAgLS0tDQogICAgIFJFQURNRS5tZCB8IDE1ICsrKysrKysrKysrKysrKw0KICAgICAxIGZpbGUg
Y2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQ0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9SRUFETUUu
bWQgYi9SRUFETUUubWQNCiAgICBpbmRleCA1Y2U2Njc3Li4yZWJmZjhhIDEwMDY0NA0KICAgIC0t
LSBhL1JFQURNRS5tZA0KICAgICsrKyBiL1JFQURNRS5tZA0KICAgIEBAIC0zLDUgKzMsMjAgQEAg
Z2NjIGZvciBVbmlrcmFmdA0KICAgICANCiAgICAgVGhpcyBpcyB0aGUgcG9ydCBvZiBnY2MgZm9y
IFVuaWtyYWZ0IGFzIGV4dGVybmFsIGxpYnJhcnkuDQogICAgIA0KICAgICtGb3IgdGhlIHRpbWUg
YmVpbmcgb25seSBsaWJiYWNrdHJhY2UgYW5kIGxpYmZmaSBsaWJyYXJpZXMgYXJlIHBvcnRlZCBi
ZWNhdXNlIHRoZXkgYXJlIA0KICAgICtuZWVkZWQgZm9yIHRoZSBsaWJnbyBwb3J0LiBZb3Ugd2ls
bCBuZWVkIG5ld2xpYiBmb3IgYm90aCBsaWJyYXJpZXMuIA0KICAgICsNCiAgICArRm9yIGxpYmZm
aSB5b3Ugd2lsbCBuZWVkIHB0aHJlYWRcX2VtYmVkZGVkIGV4dGVybmFsIGxpYnJhcnkgdG9vLg0K
ICAgICsNCiAgICArQWxzbyBmb3IgbGliYmFja3RyYWNlIHlvdSB3aWxsIG5lZWQgdGhlIGJlbG93
IGV4dGVybmFsIGxpYnJhcmllczoNCiAgICArKyBjb21waWxlci1ydCANCiAgICArKyBsaWJ1bndp
bmQNCiAgICArKyBsaWJjeHgNCiAgICArKyBsaWJjeHhhYmkNCiAgICArDQogICAgK01vcmVvdmVy
IGJlY2F1c2Ugb2YgYSBidWcgaW4gbGlidW53aW5kOiBgdW53X2dldGNvbnRleHRgIGxlYWRzIHRv
IHBhZ2UgZmF1bHQsIA0KICAgICtgYmFja3RyYWNlX2Z1bGxgIGZ1bmN0aW9uIHdpbGwgYWxzbyBs
ZWFkIHRvIHBhZ2UgZmF1bHQsIGFzIGl0IHVzZXMgYF9VbndpbmRfQmFja3RyYWNlYA0KICAgICt3
aGljaCBjYWxscyBgdW53X2dldGNvbnRleHRgLg0KICAgICsNCiAgICAgUGxlYXNlIHJlZmVyIHRv
IHRoZSBgUkVBRE1FLm1kYCBhcyB3ZWxsIGFzIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZSBgZG9j
L2ANCiAgICAgc3ViZGlyZWN0b3J5IG9mIHRoZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuDQog
ICAgLS0gDQogICAgMi4xNy4xDQogICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:37:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:37:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlkb-0001oF-DE; Fri, 27 Sep 2019 08:37:17 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlka-0001oA-VN
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:37:16 +0000
X-Inumbo-ID: 01db3a56-e102-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 01db3a56-e102-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 08:37:15 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 8DA73F200A;
 Fri, 27 Sep 2019 10:37:14 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id vXGxjrCt9utW; Fri, 27 Sep 2019 10:37:14 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 60F19F2006;
 Fri, 27 Sep 2019 10:37:10 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:37:10 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:37:10
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 01/11] Introduce library skeleton
Thread-Index: AQHVdH+H0AjUL1YInki/5dVp+9Ba7ac/NIGA
Date: Fri, 27 Sep 2019 08:37:09 +0000
Message-ID: <4DE313D7-E41E-41CE-8156-40ECD33E86BD@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-2-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-2-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <0609981F52DBE747B1ACB50A309B8CEB@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 01/11] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgQ2hhcmFsYW1wb3MsIHRoaXMgcGF0Y2ggbG9va3MgZ29vZC4NCg0KVGhhbmtzLA0KDQotLSBG
ZWxpcGUNCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNpQG5lY2xhYi5l
dT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMxLCAiQ2hhcmFsYW1wb3MgTWFpbmFzIiA8Q2hhcmFs
YW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBXZSB1c2UgdGhlIEJTRC0zLUNs
YXVzZSBsaWNlbnNlIGZvciB0aGlzIGxpYnJhcnkgZ2x1ZSBjb2RlLg0KICAgIA0KICAgIFNpZ25l
ZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5l
dT4NCiAgICBTaWduZWQtb2ZmLWJ5OiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJv
Pg0KICAgIC0tLQ0KICAgICAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysr
KysrKysrKysNCiAgICAgQ09ESU5HX1NUWUxFLm1kIHwgIDQgKysrKw0KICAgICBDT05UUklCVVRJ
TkcubWQgfCAgNCArKysrDQogICAgIENPUFlJTkcubWQgICAgICB8IDM5ICsrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKw0KICAgICBDb25maWcudWsgICAgICAgfCAyMCArKysr
KysrKysrKysrKysrKysrKw0KICAgICBNQUlOVEFJTkVSUy5tZCAgfCAxMSArKysrKysrKysrKw0K
ICAgICBSRUFETUUubWQgICAgICAgfCAgNyArKysrKysrDQogICAgIDcgZmlsZXMgY2hhbmdlZCwg
MTEyIGluc2VydGlvbnMoKykNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IC5naXRpZ25vcmUNCiAg
ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZA0KICAgICBjcmVhdGUgbW9kZSAx
MDA2NDQgQ09OVFJJQlVUSU5HLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDT1BZSU5HLm1k
DQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBDb25maWcudWsNCiAgICAgY3JlYXRlIG1vZGUgMTAw
NjQ0IE1BSU5UQUlORVJTLm1kDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBSRUFETUUubWQNCiAg
ICANCiAgICBkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUNCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjc1ZDJmZDMNCiAgICAtLS0gL2Rldi9u
dWxsDQogICAgKysrIGIvLmdpdGlnbm9yZQ0KICAgIEBAIC0wLDAgKzEsMjcgQEANCiAgICArKi5k
ZXBlbmQNCiAgICArKi5vDQogICAgKyouYQ0KICAgICsqLmQNCiAgICArKi5zbw0KICAgICsqLm9y
aWcNCiAgICArKi5yZWoNCiAgICArKi5iYWsNCiAgICArKi5zd3ANCiAgICArKn4NCiAgICArLCoN
CiAgICArXCMqXCMNCiAgICArLlwjKg0KICAgICtcI18qXCMNCiAgICArLlwjXyoNCiAgICArIS5n
aXRpZ25vcmUNCiAgICArLioNCiAgICArDQogICAgKyMgZ251IGdsb2JhbCBmaWxlcw0KICAgICtH
UEFUSA0KICAgICtHUlRBR1MNCiAgICArR1NZTVMNCiAgICArR1RBR1MNCiAgICArDQogICAgKyMg
Y3Njb3BlIGZpbGVzDQogICAgK2NzY29wZS4qDQogICAgK25jc2NvcGUuKg0KICAgIGRpZmYgLS1n
aXQgYS9DT0RJTkdfU1RZTEUubWQgYi9DT0RJTkdfU1RZTEUubWQNCiAgICBuZXcgZmlsZSBtb2Rl
IDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjU3MzAwNDENCiAgICAtLS0gL2Rldi9udWxsDQog
ICAgKysrIGIvQ09ESU5HX1NUWUxFLm1kDQogICAgQEAgLTAsMCArMSw0IEBADQogICAgK0NvZGlu
ZyBTdHlsZQ0KICAgICs9PT09PT09PT09PT0NCiAgICArDQogICAgK1BsZWFzZSByZWZlciB0byB0
aGUgYENPRElOR19TVFlMRS5tZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5
Lg0KICAgIGRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcubWQgYi9DT05UUklCVVRJTkcubWQNCiAg
ICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjE0ZjZhYzYNCiAgICAt
LS0gL2Rldi9udWxsDQogICAgKysrIGIvQ09OVFJJQlVUSU5HLm1kDQogICAgQEAgLTAsMCArMSw0
IEBADQogICAgK0NvbnRyaWJ1dGluZyB0byBVbmlrcmFmdA0KICAgICs9PT09PT09PT09PT09PT09
PT09PT09PT0NCiAgICArDQogICAgK1BsZWFzZSByZWZlciB0byB0aGUgYENPTlRSSUJVVElORy5t
ZGAgZmlsZSBpbiB0aGUgbWFpbiBVbmlrcmFmdCByZXBvc2l0b3J5Lg0KICAgIGRpZmYgLS1naXQg
YS9DT1BZSU5HLm1kIGIvQ09QWUlORy5tZA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAg
aW5kZXggMDAwMDAwMC4uZDM0OWYzYQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9DT1BZ
SU5HLm1kDQogICAgQEAgLTAsMCArMSwzOSBAQA0KICAgICtMaWNlbnNlDQogICAgKz09PT09PT0N
CiAgICArDQogICAgK1VuaWtyYWZ0IGxpYmdvIHdyYXBwZXJzDQogICAgKy0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgICArDQogICAgK1RoaXMgcmVwb3NpdG9yeSBjb250YWlu
cyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQgbGliZ28gd2l0aCBVbmlrcmFmdC4NCiAgICArRWFjaCBD
IGNvZGUgZmlsZSBpbiB0aGlzIHJlcG9zaXRvcnkgc2hvdWxkIGRlY2xhcmUgd2hvIGlzIHRoZQ0K
ICAgICtjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNoIHRlcm1zIGFuZCBjb25kaXRpb25z
IHRoZSBjb2RlIGlzDQogICAgK2xpY2Vuc2VkLiBJZiBzdWNoIGEgbGljZW5jZSBub3RlIGlzIG1p
c3NpbmcsIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0DQogICAgK25vdGljZSB3aWxsIGFwcGx5Og0K
ICAgICsNCiAgICArCUNvcHlyaWdodCAoYykgWWVhciwgSW5zdGl0dXRpb24uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQogICAgKw0KICAgICsJUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogICAgKwltb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCiAgICAr
CWFyZSBtZXQ6DQogICAgKw0KICAgICsJMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCiAgICArCSAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICArCTIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0DQogICAgKwkgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQogICAgKwkgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAg
ICsJMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5h
bWVzIG9mIGl0cw0KICAgICsJICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20NCiAgICArCSAgIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgKw0KICAgICsJ
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUyAiQVMgSVMiDQogICAgKwlBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQogICAgKwlJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQ0KICAgICsJQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQ0KICAgICsJTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUg0KICAg
ICsJQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YNCiAgICArCVNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0KICAgICsJSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4NCiAgICArCUNPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpDQogICAgKwlBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQ0KICAgICsJ
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQogICAgKw0KICAgIGRpZmYgLS1naXQgYS9Db25m
aWcudWsgYi9Db25maWcudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAw
MDAwMDAuLjQxNDNhNDANCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvQ29uZmlnLnVrDQog
ICAgQEAgLTAsMCArMSwyMCBAQA0KICAgICtjb25maWcgTElCR08NCiAgICArCWJvb2wgImxpYmdv
IC0gR28gbGlicmFyeSINCiAgICArCWRlZmF1bHQgbg0KICAgICsJc2VsZWN0IExJQlVLREVCVUcN
CiAgICArCXNlbGVjdCBMSUJVS0FMTE9DDQogICAgKwlzZWxlY3QgTElCTkVXTElCQw0KICAgICsJ
c2VsZWN0IExJQlVLTU1BUA0KICAgICsJc2VsZWN0IFVLU1lTSU5GTw0KICAgICsJc2VsZWN0IExJ
QkNPTVBJTEVSX1JUDQogICAgKwlzZWxlY3QgTElCVU5XSU5EDQogICAgKwlzZWxlY3QgTElCQ1hY
DQogICAgKwlzZWxlY3QgTElCQ1hYQUJJDQogICAgKwlzZWxlY3QgTElCUFRIUkVBRF9FTUJFRERF
RA0KICAgICsJc2VsZWN0IExJQkdDQw0KICAgICsJc2VsZWN0IExJQkZGSQ0KICAgICsJc2VsZWN0
IExJQkJBQ0tUUkFDRQ0KICAgICsJc2VsZWN0IExJQkxXSVANCiAgICArCXNlbGVjdCBMSUJVQ09O
VEVYVA0KICAgICsJc2VsZWN0IFVLVU5JU1REDQogICAgKwlzZWxlY3QgTElCU1lTQ0FMTF9TSElN
DQogICAgZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTLm1kIGIvTUFJTlRBSU5FUlMubWQNCiAgICBu
ZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjMyMzhiMzANCiAgICAtLS0g
L2Rldi9udWxsDQogICAgKysrIGIvTUFJTlRBSU5FUlMubWQNCiAgICBAQCAtMCwwICsxLDExIEBA
DQogICAgK01haW50YWluZXJzIExpc3QNCiAgICArPT09PT09PT09PT09PT09PQ0KICAgICsNCiAg
ICArRm9yIG5vdGVzIG9uIGhvdyB0byByZWFkIHRoaXMgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZl
ciB0byBgTUFJTlRBSU5FUlMubWRgIGluDQogICAgK3RoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRv
cnkuDQogICAgKw0KICAgICsJTElCR08tVU5JS1JBRlQNCiAgICArCU06CUNvc3RpbiBMdXB1IDxj
b3N0aW4ubHVwdUBjcy5wdWIucm8+DQogICAgKwlNOglGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWlj
aUBuZWNsYWIuZXU+DQogICAgKwlMOgltaW5pb3MtZGV2ZWxAbGlzdHMueGVuLm9yZw0KICAgICsJ
RjogKg0KICAgIGRpZmYgLS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQNCiAgICBuZXcgZmls
ZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjVjZTY2NzcNCiAgICAtLS0gL2Rldi9u
dWxsDQogICAgKysrIGIvUkVBRE1FLm1kDQogICAgQEAgLTAsMCArMSw3IEBADQogICAgK2xpYmdv
IGZvciBVbmlrcmFmdA0KICAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICsN
CiAgICArVGhpcyBpcyB0aGUgcG9ydCBvZiBsaWJnbyBmb3IgVW5pa3JhZnQgYXMgZXh0ZXJuYWwg
bGlicmFyeS4NCiAgICArDQogICAgK1BsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAgYXMg
d2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gDQogICAgK3N1YmRpcmVjdG9y
eSBvZiB0aGUgbWFpbiB1bmlrcmFmdCByZXBvc2l0b3J5Lg0KICAgIC0tIA0KICAgIDIuMTcuMQ0K
ICAgIA0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:38:35 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:38:35 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDllq-000229-I4; Fri, 27 Sep 2019 08:38:34 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDllp-000224-Kf
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:38:33 +0000
X-Inumbo-ID: 2ece3af4-e102-11e9-8628-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 2ece3af4-e102-11e9-8628-bc764e2007e4;
 Fri, 27 Sep 2019 08:38:30 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 0EC34F200A;
 Fri, 27 Sep 2019 10:38:30 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id W-1HSn91pab2; Fri, 27 Sep 2019 10:38:29 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C324FF2006;
 Fri, 27 Sep 2019 10:38:25 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:38:25 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:38:25
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 02/11] Add Makefile.uk
Thread-Index: AQHVdH+ezO/o40PqxUm6VZ92NEhNUac/NNoA
Date: Fri, 27 Sep 2019 08:38:25 +0000
Message-ID: <4BC0E433-9B31-4C25-B20F-0AFE6FE1EB43@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-3-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-3-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <9273940F9414D844B37ABB8529092069@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 02/11] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCg0K77u/T24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBUaGlzIHBhdGNo
IGFsc28gYWRkcyB0aGUgZ2VuZXJhdGVkIGNvbmZpZy5oIGFuZCBydW50aW1lLmluYyBoZWFkZXJz
Lg0KICAgIEFub3RoZXIgb3B0aW9uIHdvdWxkIGhhdmUgYmVlbiB0byBnZW5lcmF0ZSB0aGVtIGR1
cmluZyB0aGUgYnVpbGQuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFp
bmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pg0KICAgIFNpZ25lZC1vZmYtYnk6IENv
c3RpbiBMdXB1IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQogICAgLS0tDQogICAgIE1ha2VmaWxl
LnVrICAgICAgICAgICAgICAgICAgIHwgMTY3ICsrKysrKw0KICAgICBnZW5lcmF0ZWQvaW5jbHVk
ZS9jb25maWcuaCAgICB8IDQxNSArKysrKysrKysrKysrKw0KICAgICBnZW5lcmF0ZWQvaW5jbHVk
ZS9ydW50aW1lLmluYyB8IDk4OCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQog
ICAgIGluY2x1ZGUvbW1fbWFsbG9jLmggICAgICAgICAgIHwgICAwDQogICAgIDQgZmlsZXMgY2hh
bmdlZCwgMTU3MCBpbnNlcnRpb25zKCspDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBNYWtlZmls
ZS51aw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmgN
CiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9pbmNsdWRlL3J1bnRpbWUuaW5jDQog
ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL21tX21hbGxvYy5oDQogICAgDQogICAgZGlm
ZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEw
MDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjQyZWVmYjENCiAgICAtLS0gL2Rldi9udWxsDQogICAg
KysrIGIvTWFrZWZpbGUudWsNCiAgICBAQCAtMCwwICsxLDE2NyBAQA0KICAgICsjICBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQogICAgKyMNCiAgICArIyAgbGliZ28gTWFr
ZWZpbGUudWsNCiAgICArIw0KICAgICsjICBBdXRob3JzOiBDaGFyYWxhbXBvcyBNYWluYXMgPGNo
YXJhbGFtcG9zLm1haW5hc0BuZWNsYWIuZXU+DQogICAgKyMgICAgICAgICAgIENvc3RpbiBMdXB1
IDxjb3N0aW4ubHVwdUBjcy5wdWIucm8+DQogICAgKyMNCiAgICArIyAgQ29weXJpZ2h0IChjKSAy
MDE5LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbg0KICAgICsjICAgICAgICAgICAg
ICAgIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0DQogICAgKyMNCiAg
ICArIyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0DQogICAgKyMgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KICAgICsjICBhcmUgbWV0Og0KICAg
ICsjDQogICAgKyMgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0DQogICAgKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgICArIyAgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQNCiAgICArIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KICAgICsjICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAgICsj
ICAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFt
ZXMgb2YgaXRzDQogICAgKyMgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tDQogICAgKyMgICAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQogICAgKyMNCiAg
ICArIyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQogICAgKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCiAgICAr
IyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UNCiAgICArIyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQ0KICAgICsjICBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SDQogICAgKyMgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GDQogICAgKyMgIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUw0K
ICAgICsjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTg0KICAgICsjICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQ0KICAgICsjICBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRQ0KICAgICsjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAg
ICArIw0KICAgICsjICBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklF
RCBJTiBBTlkgV0FZLg0KICAgICsjDQogICAgKw0KICAgICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iw0KICAgICsjIExpYnJhcnkgcmVnaXN0cmF0aW9uDQogICAgKyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjDQogICAgKyQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZ28sJChDT05GSUdfTElCR08pKSkN
CiAgICArDQogICAgKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgKyMgT3JpZ2luYWwgc291
cmNlcw0KICAgICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICtMSUJHQ0NfVkVSU0lPTj03
LjMuMA0KICAgICtMSUJHQ0NfVVJMPWh0dHBzOi8vZnRwLmdudS5vcmcvZ251L2djYy9nY2MtJChM
SUJHQ0NfVkVSU0lPTikvZ2NjLSQoTElCR0NDX1ZFUlNJT04pLnRhci5neg0KICAgICtMSUJHT19Q
QVRDSERJUj0kKExJQkdPX0JBU0UpL3BhdGNoZXMNCiAgICArTElCR0NDX1NVQkRJUj1nY2MtJChM
SUJHQ0NfVkVSU0lPTikNCiAgICArIyMgUGF0Y2ggZ2NjIHNvdXJjZXMgd2l0aCBsaWJnbyBwYXRj
aGVzDQogICAgKyQoZXZhbCAkKGNhbGwgcGF0Y2gsbGliZ2NjLCQoTElCR09fUEFUQ0hESVIpLCQo
TElCR0NDX1NVQkRJUikpKQ0KICAgICsNCiAgICArIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAg
ICArIyBIZWxwZXJzDQogICAgKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgK0xJQkdDQ19F
WFRSQUNURUQgPSAkKExJQkdDQ19PUklHSU4pL2djYy0kKExJQkdDQ19WRVJTSU9OKQ0KICAgICtM
SUJHT19FWFRSQUNURUQgPSAkKExJQkdDQ19FWFRSQUNURUQpL2xpYmdvDQogICAgKw0KICAgICsj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICsjIExpYnJhcnkgaW5jbHVkZXMNCiAgICArIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICArTElCR09fQ09NTU9OX0lOQ0xVREVTLXkgPSAtSSQo
TElCR09fQkFTRSkvaW5jbHVkZSAtSSQoTElCR09fQkFTRSkvZ2VuZXJhdGVkL2luY2x1ZGUgXA0K
ICAgICsJLUkkKExJQkdPX0VYVFJBQ1RFRCkgLUkkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZSBc
DQogICAgKwktSSQoTElCR0NDX0VYVFJBQ1RFRCkvbGliZmZpL2luY2x1ZGUgLUkkKExJQkdDQ19C
QVNFKS9saWJmZmkvaW5jbHVkZSBcDQogICAgKwktSSQoTElCR0NDX0VYVFJBQ1RFRCkvbGliZ2Nj
IFwNCiAgICArCS1JJChMSUJCQUNLVFJBQ0VfRVhUUkFDVEVEKSBcDQogICAgKwktSSQoTElCR0ND
X0VYVFJBQ1RFRCkvZ2NjL2luY2x1ZGUNCiAgICArTElCR09fQ09NTU9OX0lOQ0xVREVTLSQoQ09O
RklHX0FSQ0hfWDg2XzY0KSArPSAtSSQoTElCRkZJX0VYVFJBQ1RFRCkvc3JjL3g4Ng0KICAgICtM
SUJHT19DT01NT05fSU5DTFVERVMtJChDT05GSUdfQVJDSF9YODZfNjQpICs9IC1JJChMSUJHQ0Nf
RVhUUkFDVEVEKS9nY2MvY29uZmlnL2kzODYNCiAgICArTElCR09fQVNJTkNMVURFUy15ID0gJChM
SUJHT19DT01NT05fSU5DTFVERVMteSkNCiAgICArTElCR09fQ0lOQ0xVREVTLXkgID0gJChMSUJH
T19DT01NT05fSU5DTFVERVMteSkNCiAgICArDQogICAgKw0KICAgICsjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIw0KICAgICsjIEdsb2JhbCBmbGFncw0KICAgICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Iw0KICAgICtMSUJHT19DRkxBR1MteSArPSAtREhBVkVfQ09ORklHX0ggLURfSU5DTFVERV9NQUxM
T0NfSF8gXA0KICAgICsJLWZleGNlcHRpb25zIC1mbm9uLWNhbGwtZXhjZXB0aW9ucyAtZnBsYW45
LWV4dGVuc2lvbnMgLWZuby1zcGxpdC1zdGFjayBcDQogICAgKwktV2FsbCAtV2V4dHJhIC1Xd3Jp
dGUtc3RyaW5ncyAtV2Nhc3QtcXVhbCAtV25vLXVudXNlZC1mdW5jdGlvbiBcDQogICAgKwktbWlu
bGluZS1hbGwtc3RyaW5nb3BzIC1Xbm8taW1wbGljaXQtZnVuY3Rpb24tZGVjbGFyYXRpb24gXA0K
ICAgICsJLURfR05VX1NPVVJDRSAtRF9MQVJHRUZJTEVfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJ
VFM9NjQNCiAgICArTElCR09fQ0ZMQUdTLXkgKz0gLVduby1jYXN0LXF1YWwgLVduby11bnVzZWQt
dmFsdWUNCiAgICArDQogICAgKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQogICAgKyMgbGliZ28g
Y29kZQ0KICAgICsjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICsNCiAgICArTElCR09fU1JD
Uy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9pbmRleGJ5dGUuY3xieXRlcw0KICAg
ICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL2dvL2xvZy9zeXNsb2cvc3lzbG9n
X2MuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZmxlY3Qv
bWFrZWZ1bmNfZmZpX2MuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvaW50ZXJuYWwvYXRvbWljL2F0b21pYy5jfHJ1bnRpbWUuaW50ZXJuYWwNCiAg
ICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJpbmdzL2luZGV4Ynl0
ZS5jfHN0cmluZ3MNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9nby9z
eW5jL2F0b21pYy9hdG9taWMuY3xzeW5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9jbG9uZV9saW51eC5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJuby5jDQogICAgK0xJQkdPX1NSQ1MteSAr
PSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zaWduYW1lLmMNCiAgICArTElCR09fU1JD
Uy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3dhaXQuYw0KICAgICtMSUJHT19T
UkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvYWVzaGFzaC5jDQogICAgK0xJQkdP
X1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9lbnZfcG9zaXguYw0KICAgICtM
SUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ2V0bmNwdS1saW51eC5j
DQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1hc3Nl
cnQuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28t
YnJlYWtwb2ludC5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVu
dGltZS9nby1jYWxsZXIuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQp
L3J1bnRpbWUvZ28tY2FsbGVycy5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby1jZGl2LmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhU
UkFDVEVEKS9ydW50aW1lL2dvLWNnby5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VY
VFJBQ1RFRCkvcnVudGltZS9nby1jb25zdHJ1Y3QtbWFwLmMNCiAgICArTElCR09fU1JDUy15ICs9
ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLWZmaS5jDQogICAgK0xJQkdPX1NSQ1MteSAr
PSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1maWVsZHRyYWNrLmMNCiAgICArTElCR09f
U1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLW1hdGhlcnIuYw0KICAgICtM
SUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tbWVtY2xyLmMNCiAg
ICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLW1lbWNtcC5j
DQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1tZW1l
cXVhbC5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9n
by1tZW1tb3ZlLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50
aW1lL2dvLW5hbm90aW1lLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVE
KS9ydW50aW1lL2dvLW5ldy5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RF
RCkvcnVudGltZS9nby1ub3N5cy5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJB
Q1RFRCkvcnVudGltZS9nby1ub3cuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRS
QUNURUQpL3J1bnRpbWUvZ28tcmVmbGVjdC1jYWxsLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQo
TElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLXJ1bnRpbWUtZXJyb3IuYw0KICAgICtMSUJHT19T
UkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tc2V0ZW52LmMNCiAgICArTElC
R09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1lL2dvLXNpZ25hbC5jDQogICAg
K0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby1zdHJzbGljZS5j
DQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby10eXBl
ZGVzYy1lcXVhbC5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVu
dGltZS9nby11bnNhZmUtbmV3YXJyYXkuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19F
WFRSQUNURUQpL3J1bnRpbWUvZ28tdW5zYWZlLW5ldy5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAk
KExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby11bnNhZmUtcG9pbnRlci5jDQogICAgK0xJQkdP
X1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby11bnNldGVudi5jDQogICAg
K0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9nby11bndpbmQuYw0K
ICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvZ28tdmFyYXJn
cy5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9oZWFw
ZHVtcC5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVudGltZS9t
Y2FjaGUuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUv
bWNlbnRyYWwuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQpL3J1bnRp
bWUvbWVtLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50aW1l
L21maXhhbGxvYy5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVu
dGltZS9tZ2MwLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50
aW1lL21oZWFwLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50
aW1lL21zaXplLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50
aW1lL3BhbmljLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50
aW1lL3BhcmZvci5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVu
dGltZS9wcmludC5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvcnVu
dGltZS9wcm9jLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhUUkFDVEVEKS9ydW50
aW1lL3J1bnRpbWVfYy5jDQogICAgK0xJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkv
cnVudGltZS90aHJlYWQuYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNURUQp
L3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhU
UkFDVEVEKS9ydW50aW1lL3lpZWxkLmMNCiAgICArTElCR09fU1JDUy15ICs9ICQoTElCR09fRVhU
UkFDVEVEKS9ydW50aW1lL2dvLW1haW4uYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19F
WFRSQUNURUQpL3N5c2luZm8uYw0KICAgICtMSUJHT19TUkNTLXkgKz0gJChMSUJHT19FWFRSQUNU
RUQpL21hbGxvYy5jICMgZ2VuZXJhdGVkDQogICAgKw0KICAgICsjIEdlbmVyYXRlIGdvMmMgdG9v
bA0KICAgICskKExJQkdPX0JVSUxEKS9nb2MyYzogJChMSUJHQ0NfQlVJTEQpLy5wYXRjaGVkDQog
ICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR0VOLGxpYmdvOiAkKG5vdGRpciAkQCksIFwNCiAgICAr
CQljZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgZ2NjIC1vICRAICQoTElCR09fRVhUUkFDVEVEKS9y
dW50aW1lL2dvYzJjLmMpDQogICAgKw0KICAgICsjIEdlbmVyYXRlIG1hbGxvYy5jDQogICAgKyQo
TElCR09fRVhUUkFDVEVEKS9tYWxsb2MuYzogJChMSUJHT19FWFRSQUNURUQpL3J1bnRpbWUvbWFs
bG9jLmdvYyAkKExJQkdPX0JVSUxEKS9nb2MyYw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdF
TixsaWJnbzogJChub3RkaXIgJEApLCBcDQogICAgKwkJY2QgJChMSUJHT19FWFRSQUNURUQpICYm
ICQoTElCR09fQlVJTEQpL2dvYzJjICQ8ID4gJEApDQogICAgKw0KICAgICtVS19QUkVQQVJFICs9
ICQoTElCR09fQlVJTEQpL2dvYzJjICQoTElCR09fRVhUUkFDVEVEKS9tYWxsb2MuYw0KICAgICsN
CiAgICArIyBHbyBwYWNrYWdlcw0KICAgICtMSUJHT19HT0ZMQUdTLXkgKz0gLW1pbmxpbmUtYWxs
LXN0cmluZ29wcyAtZm5vLXNwbGl0LXN0YWNrDQogICAgK0xJQkdPX0dPRkxBR1MteSArPSAtSSQo
TElCR09fQlVJTEQpDQogICAgK0xJQkdPX0dPRkxBR1MgPSAkKExJQkdPX0dPRkxBR1MteSkNCiAg
ICBkaWZmIC0tZ2l0IGEvZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmggYi9nZW5lcmF0ZWQvaW5j
bHVkZS9jb25maWcuaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MC4uN2M0NzNmMg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9nZW5lcmF0ZWQvaW5jbHVk
ZS9jb25maWcuaA0KICAgIEBAIC0wLDAgKzEsNDE1IEBADQogICAgKy8qIGNvbmZpZy5oLiAgR2Vu
ZXJhdGVkIGZyb20gY29uZmlnLmguaW4gYnkgY29uZmlndXJlLiAgKi8NCiAgICArLyogY29uZmln
LmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovDQog
ICAgKw0KICAgICsvKiBEZWZpbmUgaWYgYnVpbGRpbmcgdW5pdmVyc2FsIChpbnRlcm5hbCBoZWxw
ZXIgbWFjcm8pICovDQogICAgKy8qICN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgKi8N
CiAgICArDQogICAgKy8qIERlZmluZSB0byB0aGUgZmxhZ3MgbmVlZGVkIGZvciB0aGUgLnNlY3Rp
b24gLmVoX2ZyYW1lIGRpcmVjdGl2ZS4gKi8NCiAgICArI2RlZmluZSBFSF9GUkFNRV9GTEFHUyAi
YXciDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFjY2VwdDQn
IGZ1bmN0aW9uLiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9BQ0NFUFQ0IDENCiAgICArDQogICAg
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWNvc2wnIGZ1bmN0aW9uLiAqLw0KICAg
ICsjZGVmaW5lIEhBVkVfQUNPU0wgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIGBhc2lubCcgZnVuY3Rpb24uICovDQogICAgKyNkZWZpbmUgSEFWRV9BU0lOTCAx
DQogICAgKw0KICAgICsvKiBEZWZpbmUgaWYgeW91ciBhc3NlbWJsZXIgc3VwcG9ydHMgR05VIGNv
bWRhdCBncm91cCBzeW50YXguICovDQogICAgKyNkZWZpbmUgSEFWRV9BU19DT01EQVRfR0FTIDEN
CiAgICArDQogICAgKy8qIERlZmluZSBpZiB5b3VyIGFzc2VtYmxlciBzdXBwb3J0cyB1bndpbmQg
c2VjdGlvbiB0eXBlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfQVNfWDg2XzY0X1VOV0lORF9TRUNU
SU9OX1RZUEUgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBv
cnRzIEFFUyBpbnN0cnVjdGlvbnMuICovDQogICAgKy8vI2RlZmluZSBIQVZFX0FTX1g4Nl9BRVMg
MQ0KICAgICsNCiAgICArLyogRGVmaW5lIGlmIHlvdXIgYXNzZW1ibGVyIHN1cHBvcnRzIFBDIHJl
bGF0aXZlIHJlbG9jcy4gKi8NCiAgICArI2RlZmluZSBIQVZFX0FTX1g4Nl9QQ1JFTCAxDQogICAg
Kw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0YW4ybCcgZnVuY3Rpb24u
ICovDQogICAgKyNkZWZpbmUgSEFWRV9BVEFOMkwgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIGBhdGFubCcgZnVuY3Rpb24uICovDQogICAgKyNkZWZpbmUgSEFW
RV9BVEFOTCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNv
c2wnIGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfQ09TTCAxDQogICAgKw0KICAgICsv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLw0K
ICAgICsjZGVmaW5lIEhBVkVfRExGQ05fSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYGRsX2l0ZXJhdGVfcGhkcicgZnVuY3Rpb24uICovDQogICAgKyNkZWZp
bmUgSEFWRV9ETF9JVEVSQVRFX1BIRFIgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBkdXAzJyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX0RVUDMg
MQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBlcG9sbF9jcmVh
dGUxJyBmdW5jdGlvbi4gKi8NCiAgICArLy8jZGVmaW5lIEhBVkVfRVBPTExfQ1JFQVRFMSAxDQog
ICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV4cGwnIGZ1bmN0aW9u
LiAqLw0KICAgICsjZGVmaW5lIEhBVkVfRVhQTCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgYGV4cG0xbCcgZnVuY3Rpb24uICovDQogICAgKyNkZWZpbmUgSEFW
RV9FWFBNMUwgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBm
YWNjZXNzYXQnIGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfRkFDQ0VTU0FUIDENCiAg
ICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmFsbG9jYXRlJyBmdW5j
dGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX0ZBTExPQ0FURSAxDQogICAgKw0KICAgICsvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZjaG1vZGF0JyBmdW5jdGlvbi4gKi8NCiAgICAr
I2RlZmluZSBIQVZFX0ZDSE1PREFUIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgZmNob3duYXQnIGZ1bmN0aW9uLiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9G
Q0hPV05BVCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZ1
dGltZXNhdCcgZnVuY3Rpb24uICovDQogICAgKy8vI2RlZmluZSBIQVZFX0ZVVElNRVNBVCAxDQog
ICAgKw0KICAgICsvKiBEZWZpbmUgaWYgX1Vud2luZF9HZXRJUEluZm8gaXMgYXZhaWxhYmxlLiAq
Lw0KICAgICsjZGVmaW5lIEhBVkVfR0VUSVBJTkZPIDENCiAgICArDQogICAgKy8qIERlZmluZSB0
byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0eGF0dHInIGZ1bmN0aW9uLiAqLw0KICAgICsvLyNkZWZp
bmUgSEFWRV9HRVRYQVRUUiAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgYGlub3RpZnlfYWRkX3dhdGNoJyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZF
X0lOT1RJRllfQUREX1dBVENIIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBo
YXZlIHRoZSBgaW5vdGlmeV9pbml0JyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX0lO
T1RJRllfSU5JVCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YGlub3RpZnlfaW5pdDEnIGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfSU5PVElGWV9J
TklUMSAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlub3Rp
Znlfcm1fd2F0Y2gnIGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfSU5PVElGWV9STV9X
QVRDSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5
cGVzLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfSU5UVFlQRVNfSCAxDQog
ICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxkZXhwbCcgZnVuY3Rp
b24uICovDQogICAgKyNkZWZpbmUgSEFWRV9MREVYUEwgMQ0KICAgICsNCiAgICArLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9ldGhlci5oPiBoZWFkZXIgZmlsZS4gKi8NCiAg
ICArLyogI3VuZGVmIEhBVkVfTElOVVhfRVRIRVJfSCAqLw0KICAgICsNCiAgICArLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9maWx0ZXIuaD4gaGVhZGVyIGZpbGUuICovDQog
ICAgKy8vI2RlZmluZSBIQVZFX0xJTlVYX0ZJTFRFUl9IIDENCiAgICArDQogICAgKy8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvZnMuaD4gaGVhZGVyIGZpbGUuICovDQogICAg
Ky8vI2RlZmluZSBIQVZFX0xJTlVYX0ZTX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxsaW51eC9pZl9hZGRyLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsv
LyNkZWZpbmUgSEFWRV9MSU5VWF9JRl9BRERSX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9pZl9ldGhlci5oPiBoZWFkZXIgZmlsZS4gKi8NCiAg
ICArLy8jZGVmaW5lIEhBVkVfTElOVVhfSUZfRVRIRVJfSCAxDQogICAgKw0KICAgICsvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2lmX3R1bi5oPiBoZWFkZXIgZmlsZS4gKi8N
CiAgICArLy8jZGVmaW5lIEhBVkVfTElOVVhfSUZfVFVOX0ggMQ0KICAgICsNCiAgICArLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5rLmg+IGhlYWRlciBmaWxlLiAq
Lw0KICAgICsvLyNkZWZpbmUgSEFWRV9MSU5VWF9ORVRMSU5LX0ggMQ0KICAgICsNCiAgICArLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9wdHJhY2UuaD4gaGVhZGVyIGZpbGUu
ICovDQogICAgKy8vI2RlZmluZSBIQVZFX0xJTlVYX1BUUkFDRV9IIDENCiAgICArDQogICAgKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvcmVib290Lmg+IGhlYWRlciBmaWxl
LiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9MSU5VWF9SRUJPT1RfSCAxDQogICAgKw0KICAgICsv
KiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L3J0bmV0bGluay5oPiBoZWFkZXIg
ZmlsZS4gKi8NCiAgICArLy8jZGVmaW5lIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggMQ0KICAgICsN
CiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaXN0eGF0dHInIGZ1bmN0aW9u
LiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9MSVNUWEFUVFIgMQ0KICAgICsNCiAgICArLyogRGVm
aW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGxvZmZfdCcuICovDQogICAgKyNk
ZWZpbmUgSEFWRV9MT0ZGX1QgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhh
dmUgdGhlIGBsb2cxMGwnIGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfTE9HMTBMIDEN
CiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9nMXBsJyBmdW5j
dGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX0xPRzFQTCAxDQogICAgKw0KICAgICsvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvZ2wnIGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5l
IEhBVkVfTE9HTCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUg
YG1hdGhlcnInIGZ1bmN0aW9uLiAqLw0KICAgICsvKiAjdW5kZWYgSEFWRV9NQVRIRVJSICovDQog
ICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFk
ZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX01FTU9SWV9IIDENCiAgICArDQogICAgKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWluY29yZScgZnVuY3Rpb24uICovDQogICAg
Ky8vI2RlZmluZSBIQVZFX01JTkNPUkUgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBta2RpcmF0JyBmdW5jdGlvbi4gKi8NCiAgICArLy8jZGVmaW5lIEhBVkVf
TUtESVJBVCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1r
bm9kYXQnIGZ1bmN0aW9uLiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9NS05PREFUIDENCiAgICAr
DQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pY21wNi5oPiBo
ZWFkZXIgZmlsZS4gKi8NCiAgICArLy8jZGVmaW5lIEhBVkVfTkVUSU5FVF9JQ01QNl9IIDENCiAg
ICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pZl9ldGhl
ci5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArLy8jZGVmaW5lIEhBVkVfTkVUSU5FVF9JRl9FVEhF
Ul9IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5l
dC9pbl9zeXN0Lmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsvKiAjdW5kZWYgSEFWRV9ORVRJTkVU
X0lOX1NZU1RfSCAqLw0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDxuZXRpbmV0L2lwLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9ORVRJ
TkVUX0lQX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxu
ZXRpbmV0L2lwX21yb3V0ZS5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArLyogI3VuZGVmIEhBVkVf
TkVUSU5FVF9JUF9NUk9VVEVfSCAqLw0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDxuZXRwYWNrZXQvcGFja2V0Lmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsvLyNk
ZWZpbmUgSEFWRV9ORVRQQUNLRVRfUEFDS0VUX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRv
IDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWZfYXJwLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsv
LyNkZWZpbmUgSEFWRV9ORVRfSUZfQVJQX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIDxuZXQvaWYuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKy8vI2RlZmlu
ZSBIQVZFX05FVF9JRl9IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSA8bmV0L3JvdXRlLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9O
RVRfUk9VVEVfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhh
cyB0aGUgdHlwZSBgb2ZmNjRfdCcuICovDQogICAgKyNkZWZpbmUgSEFWRV9PRkY2NF9UIDENCiAg
ICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgb3BlbjY0JyBmdW5jdGlv
bi4gKi8NCiAgICArI2RlZmluZSBIQVZFX09QRU42NCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUg
dG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG9wZW5hdCcgZnVuY3Rpb24uICovDQogICAgKyNkZWZpbmUg
SEFWRV9PUEVOQVQgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBwaXBlMicgZnVuY3Rpb24uICovDQogICAgKy8vI2RlZmluZSBIQVZFX1BJUEUyIDENCiAgICAr
DQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cG9ydC5oPiBoZWFkZXIgZmls
ZS4gKi8NCiAgICArLyogI3VuZGVmIEhBVkVfUE9SVF9IICovDQogICAgKw0KICAgICsvKiBEZWZp
bmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJlbW92ZXhhdHRyJyBmdW5jdGlvbi4gKi8NCiAgICAr
Ly8jZGVmaW5lIEhBVkVfUkVNT1ZFWEFUVFIgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEg
aWYgeW91IGhhdmUgdGhlIGByZW5hbWVhdCcgZnVuY3Rpb24uICovDQogICAgKy8vI2RlZmluZSBI
QVZFX1JFTkFNRUFUIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSA8c2NoZWQuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9TQ0hFRF9IIDEN
CiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c2VtYXBob3JlLmg+
IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfU0VNQVBIT1JFX0ggMQ0KICAgICsN
CiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZW1fdGltZWR3YWl0JyBmdW5j
dGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NFTV9USU1FRFdBSVQgMQ0KICAgICsNCiAgICAr
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRlbnYnIGZ1bmN0aW9uLiAqLw0KICAg
ICsjZGVmaW5lIEhBVkVfU0VURU5WIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgc2V0eGF0dHInIGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfU0VU
WEFUVFIgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaW5s
JyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NJTkwgMQ0KICAgICsNCiAgICArLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzcGxpY2UnIGZ1bmN0aW9uLiAqLw0KICAgICsv
LyNkZWZpbmUgSEFWRV9TUExJQ0UgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9T
VERJTlRfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0
ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NURExJQl9IIDENCiAg
ICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZXJyb3JfcicgZnVu
Y3Rpb24uICovDQogICAgKyNkZWZpbmUgSEFWRV9TVFJFUlJPUl9SIDENCiAgICArDQogICAgKy8q
IERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5ncy5oPiBoZWFkZXIgZmlsZS4gKi8N
CiAgICArI2RlZmluZSBIQVZFX1NUUklOR1NfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8g
MSBpZiB5b3UgaGF2ZSB0aGUgPHN0cmluZy5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmlu
ZSBIQVZFX1NUUklOR19IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZl
IHRoZSBgc3Ryc2lnbmFsJyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NUUlNJR05B
TCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiA8bWF0aC5oPiBkZWZpbmVzIHN0cnVj
dCBleGNlcHRpb24gKi8NCiAgICArLyogI3VuZGVmIEhBVkVfU1RSVUNUX0VYQ0VQVElPTiAqLw0K
ICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgdGhlIGNvbXBpbGVyIHByb3ZpZGVzIHRoZSBf
X3N5bmNfYWRkX2FuZF9mZXRjaCBmdW5jdGlvbiBmb3INCiAgICArICAgdWludDY0ICovDQogICAg
KyNkZWZpbmUgSEFWRV9TWU5DX0FERF9BTkRfRkVUQ0hfOCAxDQogICAgKw0KICAgICsvKiBEZWZp
bmUgdG8gMSBpZiB0aGUgY29tcGlsZXIgcHJvdmlkZXMgdGhlIF9fc3luY19ib29sX2NvbXBhcmVf
YW5kX3N3YXANCiAgICArICAgZnVuY3Rpb24gZm9yIHVpbnQzMiAqLw0KICAgICsjZGVmaW5lIEhB
VkVfU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfNCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUg
dG8gMSBpZiB0aGUgY29tcGlsZXIgcHJvdmlkZXMgdGhlIF9fc3luY19ib29sX2NvbXBhcmVfYW5k
X3N3YXANCiAgICArICAgZnVuY3Rpb24gZm9yIHVpbnQ2NCAqLw0KICAgICsjZGVmaW5lIEhBVkVf
U1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfOCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8g
MSBpZiB0aGUgY29tcGlsZXIgcHJvdmlkZXMgdGhlIF9fc3luY19mZXRjaF9hbmRfYWRkIGZ1bmN0
aW9uIGZvcg0KICAgICsgICB1aW50MzIgKi8NCiAgICArI2RlZmluZSBIQVZFX1NZTkNfRkVUQ0hf
QU5EX0FERF80IDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
c3luY19maWxlX3JhbmdlJyBmdW5jdGlvbi4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NZTkNfRklM
RV9SQU5HRSAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5
c2NhbGwuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9TWVNDQUxMX0ggMQ0K
ICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZXBvbGwuaD4g
aGVhZGVyIGZpbGUuICovDQogICAgKy8vI2RlZmluZSBIQVZFX1NZU19FUE9MTF9IIDENCiAgICAr
DQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2V2ZW50Lmg+IGhlYWRl
ciBmaWxlLiAqLw0KICAgICsvKiAjdW5kZWYgSEFWRV9TWVNfRVZFTlRfSCAqLw0KICAgICsNCiAg
ICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZmlsZS5oPiBoZWFkZXIgZmls
ZS4gKi8NCiAgICArLy8jZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxDQogICAgKw0KICAgICsvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9pbm90aWZ5Lmg+IGhlYWRlciBmaWxlLiAq
Lw0KICAgICsvLyNkZWZpbmUgSEFWRV9TWVNfSU5PVElGWV9IIDENCiAgICArDQogICAgKy8qIERl
ZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL21tYW4uaD4gaGVhZGVyIGZpbGUuICovDQog
ICAgKyNkZWZpbmUgSEFWRV9TWVNfTU1BTl9IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSA8c3lzL21vdW50Lmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVm
aW5lIEhBVkVfU1lTX01PVU5UX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91
IGhhdmUgdGhlIDxzeXMvcHJjdGwuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFW
RV9TWVNfUFJDVExfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPHN5cy9wdHJhY2UuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9TWVNf
UFRSQUNFX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxz
eXMvc2VsZWN0Lmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfU1lTX1NFTEVD
VF9IIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3Nv
Y2tldC5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NZU19TT0NLRVRfSCAx
DQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zdGF0ZnMu
aD4gaGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9TWVNfU1RBVEZTX0ggMQ0KICAg
ICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3RhdC5oPiBoZWFk
ZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQ0KICAgICsNCiAgICAr
LyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3lzY2FsbC5oPiBoZWFkZXIgZmls
ZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1NZU19TWVNDQUxMX0ggMQ0KICAgICsNCiAgICArLyog
RGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvc3lzaW5mby5oPiBoZWFkZXIgZmlsZS4g
Ki8NCiAgICArLy8jZGVmaW5lIEhBVkVfU1lTX1NZU0lORk9fSCAxDQogICAgKw0KICAgICsvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1leC5oPiBoZWFkZXIgZmlsZS4gKi8N
CiAgICArLy8jZGVmaW5lIEhBVkVfU1lTX1RJTUVYX0ggMQ0KICAgICsNCiAgICArLyogRGVmaW5l
IHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovDQogICAg
KyNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgPHN5cy91c2VyLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5l
IEhBVkVfU1lTX1VTRVJfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2
ZSB0aGUgPHN5cy91dHNuYW1lLmg+IGhlYWRlciBmaWxlLiAqLw0KICAgICsjZGVmaW5lIEhBVkVf
U1lTX1VUU05BTUVfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPHN5cy92ZnMuaD4gaGVhZGVyIGZpbGUuICovDQogICAgKy8vI2RlZmluZSBIQVZFX1NZU19W
RlNfSCAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRhbmwn
IGZ1bmN0aW9uLiAqLw0KICAgICsjZGVmaW5lIEhBVkVfVEFOTCAxDQogICAgKw0KICAgICsvKiBE
ZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHRlZScgZnVuY3Rpb24uICovDQogICAgKy8vI2Rl
ZmluZSBIQVZFX1RFRSAxDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0
aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8NCiAgICArI2RlZmluZSBIQVZFX1VOSVNURF9I
IDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW5saW5rYXQn
IGZ1bmN0aW9uLiAqLw0KICAgICsvLyNkZWZpbmUgSEFWRV9VTkxJTktBVCAxDQogICAgKw0KICAg
ICsvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHVuc2V0ZW52JyBmdW5jdGlvbi4gKi8N
CiAgICArI2RlZmluZSBIQVZFX1VOU0VURU5WIDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAx
IGlmIHlvdSBoYXZlIHRoZSBgdW5zaGFyZScgZnVuY3Rpb24uICovDQogICAgKy8vI2RlZmluZSBI
QVZFX1VOU0hBUkUgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IDx1c3RhdC5oPiBoZWFkZXIgZmlsZSBhbmQgaXQgd29ya3MuICovDQogICAgKy8qICN1bmRlZiBI
QVZFX1VTVEFUX0ggKi8NCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRo
ZSBgdXRpbWVuc2F0JyBmdW5jdGlvbi4gKi8NCiAgICArLy8jZGVmaW5lIEhBVkVfVVRJTUVOU0FU
IDENCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4g
aGVhZGVyIGZpbGUuICovDQogICAgKyNkZWZpbmUgSEFWRV9VVElNRV9IIDENCiAgICArDQogICAg
Ky8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgd2FpdDQnIGZ1bmN0aW9uLiAqLw0KICAg
ICsjZGVmaW5lIEhBVkVfV0FJVDQgMQ0KICAgICsNCiAgICArLyogRGVmaW5lIGlmIHRoZSBsaW5r
ZXIgc3VwcG9ydCBzcGxpdCBzdGFjayBhZGp1c3RtZW50cyAqLw0KICAgICsvKiAjdW5kZWYgTElO
S0VSX1NVUFBPUlRTX1NQTElUX1NUQUNLICovDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gdGhl
IHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFy
aWVzLg0KICAgICsgICAqLw0KICAgICsjZGVmaW5lIExUX09CSkRJUiAiLmxpYnMvIg0KICAgICsN
CiAgICArLyogTmFtZSBvZiBwYWNrYWdlICovDQogICAgKy8qICN1bmRlZiBQQUNLQUdFICovDQog
ICAgKw0KICAgICsvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9y
IHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8NCiAgICArI2RlZmluZSBQQUNLQUdFX0JV
R1JFUE9SVCAiIg0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhp
cyBwYWNrYWdlLiAqLw0KICAgICsjZGVmaW5lIFBBQ0tBR0VfTkFNRSAicGFja2FnZS11bnVzZWQi
DQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0
aGlzIHBhY2thZ2UuICovDQogICAgKyNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgInBhY2thZ2UtdW51
c2VkIHZlcnNpb24tdW51c2VkIg0KICAgICsNCiAgICArLyogRGVmaW5lIHRvIHRoZSBvbmUgc3lt
Ym9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLw0KICAgICsjZGVmaW5lIFBBQ0tBR0Vf
VEFSTkFNRSAibGliZ28iDQogICAgKw0KICAgICsvKiBEZWZpbmUgdG8gdGhlIGhvbWUgcGFnZSBm
b3IgdGhpcyBwYWNrYWdlLiAqLw0KICAgICsjZGVmaW5lIFBBQ0tBR0VfVVJMICIiDQogICAgKw0K
ICAgICsvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLw0KICAgICsj
ZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAidmVyc2lvbi11bnVzZWQiDQogICAgKw0KICAgICsvKiBE
ZWZpbmUgaWYgc2V0Y29udGV4dCBjbG9iYmVycyBUTFMgdmFyaWFibGVzICovDQogICAgKy8qICN1
bmRlZiBTRVRDT05URVhUX0NMT0JCRVJTX1RMUyAqLw0KICAgICsNCiAgICArLyogVGhlIHNpemUg
b2YgYHZvaWQgKicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8NCiAgICArI2RlZmluZSBTSVpF
T0ZfVk9JRF9QIDgNCiAgICArDQogICAgKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBB
TlNJIEMgaGVhZGVyIGZpbGVzLiAqLw0KICAgICsjZGVmaW5lIFNURENfSEVBREVSUyAxDQogICAg
Kw0KICAgICsvKiBEZWZpbmUgaWYgd2UncmUgdG8gdXNlIGxpYmZmaS4gKi8NCiAgICArI2RlZmlu
ZSBVU0VfTElCRkZJIDENCiAgICArDQogICAgKy8qIERlZmluZSBpZiB0aGUgY29tcGlsZXIgc3Vw
cG9ydHMgLWZzcGxpdC1zdGFjayAqLw0KICAgICsvLyNkZWZpbmUgVVNJTkdfU1BMSVRfU1RBQ0sg
MQ0KICAgICsNCiAgICArLyogVmVyc2lvbiBudW1iZXIgb2YgcGFja2FnZSAqLw0KICAgICsvKiAj
dW5kZWYgVkVSU0lPTiAqLw0KICAgICsNCiAgICArLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0
byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0DQogICAgKyAg
IHNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2Ug
SW50ZWwpLiAqLw0KICAgICsjaWYgZGVmaW5lZCBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQNCiAg
ICArIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fDQogICAgKyMgIGRlZmluZSBXT1JEU19CSUdF
TkRJQU4gMQ0KICAgICsjIGVuZGlmDQogICAgKyNlbHNlDQogICAgKyMgaWZuZGVmIFdPUkRTX0JJ
R0VORElBTg0KICAgICsvKiAjICB1bmRlZiBXT1JEU19CSUdFTkRJQU4gKi8NCiAgICArIyBlbmRp
Zg0KICAgICsjZW5kaWYNCiAgICArDQogICAgKy8qIERlZmluZSB0byBgbG9uZyBpbnQnIGlmIDxz
eXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLw0KICAgICsvKiAjdW5kZWYgb2ZmX3QgKi8N
CiAgICBkaWZmIC0tZ2l0IGEvZ2VuZXJhdGVkL2luY2x1ZGUvcnVudGltZS5pbmMgYi9nZW5lcmF0
ZWQvaW5jbHVkZS9ydW50aW1lLmluYw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5k
ZXggMDAwMDAwMC4uOTg2NmU0MQ0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9nZW5lcmF0
ZWQvaW5jbHVkZS9ydW50aW1lLmluYw0KICAgIEBAIC0wLDAgKzEsOTg4IEBADQogICAgKyNkZWZp
bmUgaGFzaFJhbmRvbUJ5dGVzIDEyOA0KICAgICsjZGVmaW5lIG1heEFsaWduIDgNCiAgICArI2Rl
ZmluZSBoY2hhblNpemUgOTYNCiAgICArI2RlZmluZSBudW1CdWNrZXRzIDEwMjQNCiAgICArI2Rl
ZmluZSBsb2dTaXplIDEzMTA3Mg0KICAgICsjZGVmaW5lIGFzc29jIDQNCiAgICArI2RlZmluZSBt
YXhDUFVQcm9mU3RhY2sgNjQNCiAgICArI2RlZmluZSBidWNrZXRDbnRCaXRzIDMNCiAgICArI2Rl
ZmluZSBidWNrZXRDbnQgOA0KICAgICsjZGVmaW5lIG1heEtleVNpemUgMTI4DQogICAgKyNkZWZp
bmUgbWF4VmFsdWVTaXplIDEyOA0KICAgICsjZGVmaW5lIGRhdGFPZmZzZXQgOA0KICAgICsjZGVm
aW5lIGVtcHR5IDANCiAgICArI2RlZmluZSBldmFjdWF0ZWRFbXB0eSAxDQogICAgKyNkZWZpbmUg
ZXZhY3VhdGVkWCAyDQogICAgKyNkZWZpbmUgZXZhY3VhdGVkWSAzDQogICAgKyNkZWZpbmUgbWlu
VG9wSGFzaCA0DQogICAgKyNkZWZpbmUgaXRlcmF0b3IgMQ0KICAgICsjZGVmaW5lIG9sZEl0ZXJh
dG9yIDINCiAgICArI2RlZmluZSBoYXNoV3JpdGluZyA0DQogICAgKyNkZWZpbmUgc2FtZVNpemVH
cm93IDgNCiAgICArI2RlZmluZSBub0NoZWNrIDE4NDQ2NzQ0MDczNzA5NTUxNjE1DQogICAgKyNk
ZWZpbmUgbWF4WmVybyAxMDI0DQogICAgKyNkZWZpbmUgYWRkckJpdHMgNDgNCiAgICArI2RlZmlu
ZSBjbnRCaXRzIDE5DQogICAgKyNkZWZpbmUgbXV0ZXhfdW5sb2NrZWQgMA0KICAgICsjZGVmaW5l
IG11dGV4X2xvY2tlZCAxDQogICAgKyNkZWZpbmUgbXV0ZXhfc2xlZXBpbmcgMg0KICAgICsjZGVm
aW5lIGFjdGl2ZV9zcGluIDQNCiAgICArI2RlZmluZSBhY3RpdmVfc3Bpbl9jbnQgMzANCiAgICAr
I2RlZmluZSBwYXNzaXZlX3NwaW4gMQ0KICAgICsjZGVmaW5lIG1lbVByb2ZpbGUgMQ0KICAgICsj
ZGVmaW5lIGJsb2NrUHJvZmlsZSAyDQogICAgKyNkZWZpbmUgbXV0ZXhQcm9maWxlIDMNCiAgICAr
I2RlZmluZSBidWNrSGFzaFNpemUgMTc5OTk5DQogICAgKyNkZWZpbmUgbWF4U3RhY2sgMzINCiAg
ICArI2RlZmluZSBwZFJlYWR5IDENCiAgICArI2RlZmluZSBwZFdhaXQgMg0KICAgICsjZGVmaW5l
IHBvbGxCbG9ja1NpemUgNDA5Ng0KICAgICsjZGVmaW5lIGZyZWV6ZVN0b3BXYWl0IDIxNDc0ODM2
NDcNCiAgICArI2RlZmluZSBmb3JjZVByZWVtcHROUyAxMDAwMDAwMA0KICAgICsjZGVmaW5lIHRy
YWNlYmFja0NyYXNoIDENCiAgICArI2RlZmluZSB0cmFjZWJhY2tBbGwgMg0KICAgICsjZGVmaW5l
IHRyYWNlYmFja1NoaWZ0IDINCiAgICArI2RlZmluZSBjYXNlUmVjdiAxDQogICAgKyNkZWZpbmUg
Y2FzZVNlbmQgMg0KICAgICsjZGVmaW5lIGNhc2VEZWZhdWx0IDMNCiAgICArI2RlZmluZSAkc2lu
a2NvbnN0MCAwDQogICAgKyNkZWZpbmUgc2VsZWN0U2VuZCAxDQogICAgKyNkZWZpbmUgc2VsZWN0
UmVjdiAyDQogICAgKyNkZWZpbmUgc2VsZWN0RGVmYXVsdCAzDQogICAgKyNkZWZpbmUgc2VtVGFi
U2l6ZSAyNTENCiAgICArI2RlZmluZSBzZW1hQmxvY2tQcm9maWxlIDENCiAgICArI2RlZmluZSBz
ZW1hTXV0ZXhQcm9maWxlIDINCiAgICArI2RlZmluZSBzaWdJZGxlIDANCiAgICArI2RlZmluZSBz
aWdSZWNlaXZpbmcgMQ0KICAgICsjZGVmaW5lIHNpZ1NlbmRpbmcgMg0KICAgICsjZGVmaW5lIHNt
YWxsU2l6ZURpdiA4DQogICAgKyNkZWZpbmUgc21hbGxTaXplTWF4IDEwMjQNCiAgICArI2RlZmlu
ZSBsYXJnZVNpemVEaXYgMTI4DQogICAgKyNkZWZpbmUgdG1wU3RyaW5nQnVmU2l6ZSAzMg0KICAg
ICsjZGVmaW5lIG1heFVpbnQgMTg0NDY3NDQwNzM3MDk1NTE2MTUNCiAgICArI2RlZmluZSBtYXhJ
bnQgOTIyMzM3MjAzNjg1NDc3NTgwNw0KICAgICsjZGVmaW5lIGdjTWFya1dvcmtlckRlZGljYXRl
ZE1vZGUgMA0KICAgICsjZGVmaW5lIGdjTWFya1dvcmtlckZyYWN0aW9uYWxNb2RlIDENCiAgICAr
I2RlZmluZSBnY01hcmtXb3JrZXJJZGxlTW9kZSAyDQogICAgKyNkZWZpbmUgdHJhY2VFdk5vbmUg
MA0KICAgICsjZGVmaW5lIHRyYWNlRXZCYXRjaCAxDQogICAgKyNkZWZpbmUgdHJhY2VFdkZyZXF1
ZW5jeSAyDQogICAgKyNkZWZpbmUgdHJhY2VFdlN0YWNrIDMNCiAgICArI2RlZmluZSB0cmFjZUV2
R29tYXhwcm9jcyA0DQogICAgKyNkZWZpbmUgdHJhY2VFdlByb2NTdGFydCA1DQogICAgKyNkZWZp
bmUgdHJhY2VFdlByb2NTdG9wIDYNCiAgICArI2RlZmluZSB0cmFjZUV2R0NTdGFydCA3DQogICAg
KyNkZWZpbmUgdHJhY2VFdkdDRG9uZSA4DQogICAgKyNkZWZpbmUgdHJhY2VFdkdDU2NhblN0YXJ0
IDkNCiAgICArI2RlZmluZSB0cmFjZUV2R0NTY2FuRG9uZSAxMA0KICAgICsjZGVmaW5lIHRyYWNl
RXZHQ1N3ZWVwU3RhcnQgMTENCiAgICArI2RlZmluZSB0cmFjZUV2R0NTd2VlcERvbmUgMTINCiAg
ICArI2RlZmluZSB0cmFjZUV2R29DcmVhdGUgMTMNCiAgICArI2RlZmluZSB0cmFjZUV2R29TdGFy
dCAxNA0KICAgICsjZGVmaW5lIHRyYWNlRXZHb0VuZCAxNQ0KICAgICsjZGVmaW5lIHRyYWNlRXZH
b1N0b3AgMTYNCiAgICArI2RlZmluZSB0cmFjZUV2R29TY2hlZCAxNw0KICAgICsjZGVmaW5lIHRy
YWNlRXZHb1ByZWVtcHQgMTgNCiAgICArI2RlZmluZSB0cmFjZUV2R29TbGVlcCAxOQ0KICAgICsj
ZGVmaW5lIHRyYWNlRXZHb0Jsb2NrIDIwDQogICAgKyNkZWZpbmUgdHJhY2VFdkdvVW5ibG9jayAy
MQ0KICAgICsjZGVmaW5lIHRyYWNlRXZHb0Jsb2NrU2VuZCAyMg0KICAgICsjZGVmaW5lIHRyYWNl
RXZHb0Jsb2NrUmVjdiAyMw0KICAgICsjZGVmaW5lIHRyYWNlRXZHb0Jsb2NrU2VsZWN0IDI0DQog
ICAgKyNkZWZpbmUgdHJhY2VFdkdvQmxvY2tTeW5jIDI1DQogICAgKyNkZWZpbmUgdHJhY2VFdkdv
QmxvY2tDb25kIDI2DQogICAgKyNkZWZpbmUgdHJhY2VFdkdvQmxvY2tOZXQgMjcNCiAgICArI2Rl
ZmluZSB0cmFjZUV2R29TeXNDYWxsIDI4DQogICAgKyNkZWZpbmUgdHJhY2VFdkdvU3lzRXhpdCAy
OQ0KICAgICsjZGVmaW5lIHRyYWNlRXZHb1N5c0Jsb2NrIDMwDQogICAgKyNkZWZpbmUgdHJhY2VF
dkdvV2FpdGluZyAzMQ0KICAgICsjZGVmaW5lIHRyYWNlRXZHb0luU3lzY2FsbCAzMg0KICAgICsj
ZGVmaW5lIHRyYWNlRXZIZWFwQWxsb2MgMzMNCiAgICArI2RlZmluZSB0cmFjZUV2TmV4dEdDIDM0
DQogICAgKyNkZWZpbmUgdHJhY2VFdlRpbWVyR29yb3V0aW5lIDM1DQogICAgKyNkZWZpbmUgdHJh
Y2VFdkZ1dGlsZVdha2V1cCAzNg0KICAgICsjZGVmaW5lIHRyYWNlRXZTdHJpbmcgMzcNCiAgICAr
I2RlZmluZSB0cmFjZUV2R29TdGFydExvY2FsIDM4DQogICAgKyNkZWZpbmUgdHJhY2VFdkdvVW5i
bG9ja0xvY2FsIDM5DQogICAgKyNkZWZpbmUgdHJhY2VFdkdvU3lzRXhpdExvY2FsIDQwDQogICAg
KyNkZWZpbmUgdHJhY2VFdkdvU3RhcnRMYWJlbCA0MQ0KICAgICsjZGVmaW5lIHRyYWNlRXZHb0Js
b2NrR0MgNDINCiAgICArI2RlZmluZSB0cmFjZUV2Q291bnQgNDMNCiAgICArI2RlZmluZSB0cmFj
ZVRpY2tEaXYgNjQNCiAgICArI2RlZmluZSB0cmFjZVN0YWNrU2l6ZSAxMjgNCiAgICArI2RlZmlu
ZSB0cmFjZUJ5dGVzUGVyTnVtYmVyIDEwDQogICAgKyNkZWZpbmUgdHJhY2VBcmdDb3VudFNoaWZ0
IDYNCiAgICArI2RlZmluZSB0cmFjZUZ1dGlsZVdha2V1cCAxMjgNCiAgICArI2RlZmluZSBraW5k
Qm9vbCAxDQogICAgKyNkZWZpbmUga2luZEludCAyDQogICAgKyNkZWZpbmUga2luZEludDggMw0K
ICAgICsjZGVmaW5lIGtpbmRJbnQxNiA0DQogICAgKyNkZWZpbmUga2luZEludDMyIDUNCiAgICAr
I2RlZmluZSBraW5kSW50NjQgNg0KICAgICsjZGVmaW5lIGtpbmRVaW50IDcNCiAgICArI2RlZmlu
ZSBraW5kVWludDggOA0KICAgICsjZGVmaW5lIGtpbmRVaW50MTYgOQ0KICAgICsjZGVmaW5lIGtp
bmRVaW50MzIgMTANCiAgICArI2RlZmluZSBraW5kVWludDY0IDExDQogICAgKyNkZWZpbmUga2lu
ZFVpbnRwdHIgMTINCiAgICArI2RlZmluZSBraW5kRmxvYXQzMiAxMw0KICAgICsjZGVmaW5lIGtp
bmRGbG9hdDY0IDE0DQogICAgKyNkZWZpbmUga2luZENvbXBsZXg2NCAxNQ0KICAgICsjZGVmaW5l
IGtpbmRDb21wbGV4MTI4IDE2DQogICAgKyNkZWZpbmUga2luZEFycmF5IDE3DQogICAgKyNkZWZp
bmUga2luZENoYW4gMTgNCiAgICArI2RlZmluZSBraW5kRnVuYyAxOQ0KICAgICsjZGVmaW5lIGtp
bmRJbnRlcmZhY2UgMjANCiAgICArI2RlZmluZSBraW5kTWFwIDIxDQogICAgKyNkZWZpbmUga2lu
ZFB0ciAyMg0KICAgICsjZGVmaW5lIGtpbmRTbGljZSAyMw0KICAgICsjZGVmaW5lIGtpbmRTdHJp
bmcgMjQNCiAgICArI2RlZmluZSBraW5kU3RydWN0IDI1DQogICAgKyNkZWZpbmUga2luZFVuc2Fm
ZVBvaW50ZXIgMjYNCiAgICArI2RlZmluZSBraW5kRGlyZWN0SWZhY2UgMzINCiAgICArI2RlZmlu
ZSBraW5kR0NQcm9nIDY0DQogICAgKyNkZWZpbmUga2luZE5vUG9pbnRlcnMgMTI4DQogICAgKyNk
ZWZpbmUga2luZE1hc2sgMzENCiAgICArI2RlZmluZSBydW5lRXJyb3IgNjU1MzMNCiAgICArI2Rl
ZmluZSBydW5lU2VsZiAxMjgNCiAgICArI2RlZmluZSBtYXhSdW5lIDExMTQxMTENCiAgICArI2Rl
ZmluZSBzdXJyb2dhdGVNaW4gNTUyOTYNCiAgICArI2RlZmluZSBzdXJyb2dhdGVNYXggNTczNDMN
CiAgICArI2RlZmluZSB0MSAwDQogICAgKyNkZWZpbmUgdHggMTI4DQogICAgKyNkZWZpbmUgdDIg
MTkyDQogICAgKyNkZWZpbmUgdDMgMjI0DQogICAgKyNkZWZpbmUgdDQgMjQwDQogICAgKyNkZWZp
bmUgdDUgMjQ4DQogICAgKyNkZWZpbmUgbWFza3ggNjMNCiAgICArI2RlZmluZSBtYXNrMiAzMQ0K
ICAgICsjZGVmaW5lIG1hc2szIDE1DQogICAgKyNkZWZpbmUgbWFzazQgNw0KICAgICsjZGVmaW5l
IHJ1bmUxTWF4IDEyNw0KICAgICsjZGVmaW5lIHJ1bmUyTWF4IDIwNDcNCiAgICArI2RlZmluZSBy
dW5lM01heCA2NTUzNQ0KICAgICsjZGVmaW5lIGxvY2IgMTI4DQogICAgKyNkZWZpbmUgaGljYiAx
OTENCiAgICArDQogICAgK3N0cnVjdCBzdWRvZzsNCiAgICArDQogICAgK3N0cnVjdCB3YWl0cSB7
DQogICAgKwlzdHJ1Y3Qgc3Vkb2cqIGZpcnN0Ow0KICAgICsJc3RydWN0IHN1ZG9nKiBsYXN0Ow0K
ICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IGNwdXByb2ZFbnRyeSB7DQogICAgKwl1aW50cHRy
X3QgY291bnQ7DQogICAgKwlpbnQ2NF90IGRlcHRoOw0KICAgICsJdWludHB0cl90IHN0YWNrWzY0
XTsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBUeXBlQXNzZXJ0aW9uRXJyb3Igew0KICAg
ICsJU3RyaW5nIGludGVyZmFjZVN0cmluZzsNCiAgICArCVN0cmluZyBjb25jcmV0ZVN0cmluZzsN
CiAgICArCVN0cmluZyBhc3NlcnRlZFN0cmluZzsNCiAgICArCVN0cmluZyBtaXNzaW5nTWV0aG9k
Ow0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IGVycm9yQ1N0cmluZyB7DQogICAgKwl1aW50
cHRyX3QgY3N0cjsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBibWFwIHsNCiAgICArCXVp
bnQ4X3QgdG9waGFzaFs4XTsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBoaXRlciB7DQog
ICAgKwl2b2lkKiBrZXk7DQogICAgKwl2b2lkKiB2YWx1ZTsNCiAgICArCXZvaWQqIHQ7DQogICAg
Kwl2b2lkKiBoOw0KICAgICsJdm9pZCogYnVja2V0czsNCiAgICArCXN0cnVjdCBibWFwKiBicHRy
Ow0KICAgICsJU2xpY2UqIG92ZXJmbG93WzJdOw0KICAgICsJdWludHB0cl90IHN0YXJ0QnVja2V0
Ow0KICAgICsJdWludDhfdCBvZmZzZXQ7DQogICAgKwlfQm9vbCB3cmFwcGVkOw0KICAgICsJdWlu
dDhfdCBCOw0KICAgICsJdWludDhfdCBpOw0KICAgICsJdWludHB0cl90IGJ1Y2tldDsNCiAgICAr
CXVpbnRwdHJfdCBjaGVja0J1Y2tldDsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBtbGlu
azsNCiAgICArDQogICAgK3N0cnVjdCBtY2FjaGVsaXN0IHsNCiAgICArCXN0cnVjdCBtbGluayog
bGlzdDsNCiAgICArCXVpbnQzMl90IG5saXN0Ow0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0
IG1zcGFuOw0KICAgICsNCiAgICArc3RydWN0IG1jYWNoZSB7DQogICAgKwlpbnQzMl90IG5leHRf
c2FtcGxlOw0KICAgICsJdWludHB0cl90IGxvY2FsX2NhY2hlYWxsb2M7DQogICAgKwl2b2lkKiB0
aW55Ow0KICAgICsJdWludHB0cl90IHRpbnlzaXplOw0KICAgICsJc3RydWN0IG1zcGFuKiBhbGxv
Y1s2N107DQogICAgKwlzdHJ1Y3QgbWNhY2hlbGlzdCBmcmVlWzY3XTsNCiAgICArCXVpbnRwdHJf
dCBsb2NhbF9ubG9va3VwOw0KICAgICsJdWludHB0cl90IGxvY2FsX2xhcmdlZnJlZTsNCiAgICAr
CXVpbnRwdHJfdCBsb2NhbF9ubGFyZ2VmcmVlOw0KICAgICsJdWludHB0cl90IGxvY2FsX25zbWFs
bGZyZWVbNjddOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IG10eXBlcyB7DQogICAgKwl1
aW50OF90IGNvbXByZXNzaW9uOw0KICAgICsJdWludHB0cl90IGRhdGE7DQogICAgK307DQogICAg
Kw0KICAgICtzdHJ1Y3Qgc3BlY2lhbCB7DQogICAgKwlzdHJ1Y3Qgc3BlY2lhbCogbmV4dDsNCiAg
ICArCXVpbnQxNl90IG9mZnNldDsNCiAgICArCXVpbnQ4X3Qga2luZDsNCiAgICArfTsNCiAgICAr
DQogICAgK3N0cnVjdCBtbGluayB7DQogICAgKwlzdHJ1Y3QgbWxpbmsqIG5leHQ7DQogICAgK307
DQogICAgKw0KICAgICtzdHJ1Y3QgYnVja2V0IHsNCiAgICArCXN0cnVjdCBidWNrZXQqIG5leHQ7
DQogICAgKwlzdHJ1Y3QgYnVja2V0KiBhbGxuZXh0Ow0KICAgICsJaW50NjRfdCB0eXA7DQogICAg
Kwl1aW50cHRyX3QgaGFzaDsNCiAgICArCXVpbnRwdHJfdCBzaXplOw0KICAgICsJdWludHB0cl90
IG5zdGs7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgbWVtUmVjb3JkIHsNCiAgICArCXVp
bnRwdHJfdCBhbGxvY3M7DQogICAgKwl1aW50cHRyX3QgZnJlZXM7DQogICAgKwl1aW50cHRyX3Qg
YWxsb2NfYnl0ZXM7DQogICAgKwl1aW50cHRyX3QgZnJlZV9ieXRlczsNCiAgICArCXVpbnRwdHJf
dCBwcmV2X2FsbG9jczsNCiAgICArCXVpbnRwdHJfdCBwcmV2X2ZyZWVzOw0KICAgICsJdWludHB0
cl90IHByZXZfYWxsb2NfYnl0ZXM7DQogICAgKwl1aW50cHRyX3QgcHJldl9mcmVlX2J5dGVzOw0K
ICAgICsJdWludHB0cl90IHJlY2VudF9hbGxvY3M7DQogICAgKwl1aW50cHRyX3QgcmVjZW50X2Zy
ZWVzOw0KICAgICsJdWludHB0cl90IHJlY2VudF9hbGxvY19ieXRlczsNCiAgICArCXVpbnRwdHJf
dCByZWNlbnRfZnJlZV9ieXRlczsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBibG9ja1Jl
Y29yZCB7DQogICAgKwlpbnQ2NF90IGNvdW50Ow0KICAgICsJaW50NjRfdCBjeWNsZXM7DQogICAg
K307DQogICAgKw0KICAgICtzdHJ1Y3QgU3RhY2tSZWNvcmQgew0KICAgICsJdWludHB0cl90IFN0
YWNrMFszMl07DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgTWVtUHJvZmlsZVJlY29yZCB7
DQogICAgKwlpbnQ2NF90IEFsbG9jQnl0ZXM7DQogICAgKwlpbnQ2NF90IEZyZWVCeXRlczsNCiAg
ICArCWludDY0X3QgQWxsb2NPYmplY3RzOw0KICAgICsJaW50NjRfdCBGcmVlT2JqZWN0czsNCiAg
ICArCXVpbnRwdHJfdCBTdGFjazBbMzJdOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IG1z
dGF0cyB7DQogICAgKwl1aW50NjRfdCBhbGxvYzsNCiAgICArCXVpbnQ2NF90IHRvdGFsX2FsbG9j
Ow0KICAgICsJdWludDY0X3Qgc3lzOw0KICAgICsJdWludDY0X3Qgbmxvb2t1cDsNCiAgICArCXVp
bnQ2NF90IG5tYWxsb2M7DQogICAgKwl1aW50NjRfdCBuZnJlZTsNCiAgICArCXVpbnQ2NF90IGhl
YXBfYWxsb2M7DQogICAgKwl1aW50NjRfdCBoZWFwX3N5czsNCiAgICArCXVpbnQ2NF90IGhlYXBf
aWRsZTsNCiAgICArCXVpbnQ2NF90IGhlYXBfaW51c2U7DQogICAgKwl1aW50NjRfdCBoZWFwX3Jl
bGVhc2VkOw0KICAgICsJdWludDY0X3QgaGVhcF9vYmplY3RzOw0KICAgICsJdWludDY0X3Qgc3Rh
Y2tzX2ludXNlOw0KICAgICsJdWludDY0X3Qgc3RhY2tzX3N5czsNCiAgICArCXVpbnQ2NF90IG1z
cGFuX2ludXNlOw0KICAgICsJdWludDY0X3QgbXNwYW5fc3lzOw0KICAgICsJdWludDY0X3QgbWNh
Y2hlX2ludXNlOw0KICAgICsJdWludDY0X3QgbWNhY2hlX3N5czsNCiAgICArCXVpbnQ2NF90IGJ1
Y2toYXNoX3N5czsNCiAgICArCXVpbnQ2NF90IGdjX3N5czsNCiAgICArCXVpbnQ2NF90IG90aGVy
X3N5czsNCiAgICArCXVpbnQ2NF90IG5leHRfZ2M7DQogICAgKwl1aW50NjRfdCBsYXN0X2djOw0K
ICAgICsJdWludDY0X3QgcGF1c2VfdG90YWxfbnM7DQogICAgKwl1aW50NjRfdCBwYXVzZV9uc1sy
NTZdOw0KICAgICsJdWludDY0X3QgcGF1c2VfZW5kWzI1Nl07DQogICAgKwl1aW50MzJfdCBudW1n
YzsNCiAgICArCXVpbnQzMl90IG51bWZvcmNlZGdjOw0KICAgICsJZG91YmxlIGdjX2NwdV9mcmFj
dGlvbjsNCiAgICArCV9Cb29sIGVuYWJsZWdjOw0KICAgICsJX0Jvb2wgZGVidWdnYzsNCiAgICAr
CXN0cnVjdCB7DQogICAgKwl1aW50MzJfdCBzaXplOw0KICAgICsJdWludDY0X3Qgbm1hbGxvYzsN
CiAgICArCXVpbnQ2NF90IG5mcmVlOw0KICAgICsJfSBieV9zaXplWzY3XTsNCiAgICArCXVpbnQ2
NF90IHRpbnlhbGxvY3M7DQogICAgKwl1aW50NjRfdCBnY190cmlnZ2VyOw0KICAgICsJdWludDY0
X3QgaGVhcF9saXZlOw0KICAgICsJdWludDY0X3QgaGVhcF9zY2FuOw0KICAgICsJdWludDY0X3Qg
aGVhcF9tYXJrZWQ7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgTWVtU3RhdHMgew0KICAg
ICsJdWludDY0X3QgQWxsb2M7DQogICAgKwl1aW50NjRfdCBUb3RhbEFsbG9jOw0KICAgICsJdWlu
dDY0X3QgU3lzOw0KICAgICsJdWludDY0X3QgTG9va3VwczsNCiAgICArCXVpbnQ2NF90IE1hbGxv
Y3M7DQogICAgKwl1aW50NjRfdCBGcmVlczsNCiAgICArCXVpbnQ2NF90IEhlYXBBbGxvYzsNCiAg
ICArCXVpbnQ2NF90IEhlYXBTeXM7DQogICAgKwl1aW50NjRfdCBIZWFwSWRsZTsNCiAgICArCXVp
bnQ2NF90IEhlYXBJbnVzZTsNCiAgICArCXVpbnQ2NF90IEhlYXBSZWxlYXNlZDsNCiAgICArCXVp
bnQ2NF90IEhlYXBPYmplY3RzOw0KICAgICsJdWludDY0X3QgU3RhY2tJbnVzZTsNCiAgICArCXVp
bnQ2NF90IFN0YWNrU3lzOw0KICAgICsJdWludDY0X3QgTVNwYW5JbnVzZTsNCiAgICArCXVpbnQ2
NF90IE1TcGFuU3lzOw0KICAgICsJdWludDY0X3QgTUNhY2hlSW51c2U7DQogICAgKwl1aW50NjRf
dCBNQ2FjaGVTeXM7DQogICAgKwl1aW50NjRfdCBCdWNrSGFzaFN5czsNCiAgICArCXVpbnQ2NF90
IEdDU3lzOw0KICAgICsJdWludDY0X3QgT3RoZXJTeXM7DQogICAgKwl1aW50NjRfdCBOZXh0R0M7
DQogICAgKwl1aW50NjRfdCBMYXN0R0M7DQogICAgKwl1aW50NjRfdCBQYXVzZVRvdGFsTnM7DQog
ICAgKwl1aW50NjRfdCBQYXVzZU5zWzI1Nl07DQogICAgKwl1aW50NjRfdCBQYXVzZUVuZFsyNTZd
Ow0KICAgICsJdWludDMyX3QgTnVtR0M7DQogICAgKwl1aW50MzJfdCBOdW1Gb3JjZWRHQzsNCiAg
ICArCWRvdWJsZSBHQ0NQVUZyYWN0aW9uOw0KICAgICsJX0Jvb2wgRW5hYmxlR0M7DQogICAgKwlf
Qm9vbCBEZWJ1Z0dDOw0KICAgICsJc3RydWN0IHsNCiAgICArCXVpbnQzMl90IFNpemU7DQogICAg
Kwl1aW50NjRfdCBNYWxsb2NzOw0KICAgICsJdWludDY0X3QgRnJlZXM7DQogICAgKwl9IEJ5U2l6
ZVs2MV07DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgbU9TIHsNCiAgICArCXVpbnQ4X3Qg
dW51c2VkOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IHJhbmRvbU9yZGVyIHsNCiAgICAr
CXVpbnQzMl90IGNvdW50Ow0KICAgICsJU2xpY2UgY29wcmltZXM7DQogICAgK307DQogICAgKw0K
ICAgICtzdHJ1Y3QgcmFuZG9tRW51bSB7DQogICAgKwl1aW50MzJfdCBpOw0KICAgICsJdWludDMy
X3QgY291bnQ7DQogICAgKwl1aW50MzJfdCBwb3M7DQogICAgKwl1aW50MzJfdCBpbmM7DQogICAg
K307DQogICAgKw0KICAgICtzdHJ1Y3QgZGJnVmFyIHsNCiAgICArCVN0cmluZyBuYW1lOw0KICAg
ICsJaW50MzJfdCogdmFsdWU7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgZGVidWdWYXJz
IHsNCiAgICArCWludDMyX3QgYWxsb2NmcmVldHJhY2U7DQogICAgKwlpbnQzMl90IGNnb2NoZWNr
Ow0KICAgICsJaW50MzJfdCBlZmVuY2U7DQogICAgKwlpbnQzMl90IGdjY2hlY2ttYXJrOw0KICAg
ICsJaW50MzJfdCBnY3BhY2VydHJhY2U7DQogICAgKwlpbnQzMl90IGdjc2hyaW5rc3RhY2tvZmY7
DQogICAgKwlpbnQzMl90IGdjc3RhY2tiYXJyaWVyb2ZmOw0KICAgICsJaW50MzJfdCBnY3N0YWNr
YmFycmllcmFsbDsNCiAgICArCWludDMyX3QgZ2NyZXNjYW5zdGFja3M7DQogICAgKwlpbnQzMl90
IGdjc3RvcHRoZXdvcmxkOw0KICAgICsJaW50MzJfdCBnY3RyYWNlOw0KICAgICsJaW50MzJfdCBp
bnZhbGlkcHRyOw0KICAgICsJaW50MzJfdCBzYnJrOw0KICAgICsJaW50MzJfdCBzY2F2ZW5nZTsN
CiAgICArCWludDMyX3Qgc2NoZWRkZXRhaWw7DQogICAgKwlpbnQzMl90IHNjaGVkdHJhY2U7DQog
ICAgKwlpbnQzMl90IHdic2hhZG93Ow0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IG11dGV4
IHsNCiAgICArCXVpbnRwdHJfdCBrZXk7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3Qgbm90
ZSB7DQogICAgKwl1aW50cHRyX3Qga2V5Ow0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IGZ1
bmN2YWwgew0KICAgICsJdWludHB0cl90IGZuOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0
IGlmYWNlIHsNCiAgICArCXZvaWQqIHRhYjsNCiAgICArCXZvaWQqIGRhdGE7DQogICAgK307DQog
ICAgKw0KICAgICtzdHJ1Y3QgZWZhY2Ugew0KICAgICsJdm9pZCogX3R5cGU7DQogICAgKwl2b2lk
KiBkYXRhOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IGc7DQogICAgKw0KICAgICtzdHJ1
Y3QgaGNoYW47DQogICAgKw0KICAgICtzdHJ1Y3Qgc3Vkb2cgew0KICAgICsJc3RydWN0IGcqIGc7
DQogICAgKwl1aW50MzJfdCogc2VsZWN0ZG9uZTsNCiAgICArCXN0cnVjdCBzdWRvZyogbmV4dDsN
CiAgICArCXN0cnVjdCBzdWRvZyogcHJldjsNCiAgICArCXZvaWQqIGVsZW07DQogICAgKwlpbnQ2
NF90IGFjcXVpcmV0aW1lOw0KICAgICsJaW50NjRfdCByZWxlYXNldGltZTsNCiAgICArCXVpbnQz
Ml90IHRpY2tldDsNCiAgICArCXN0cnVjdCBzdWRvZyogd2FpdGxpbms7DQogICAgKwlzdHJ1Y3Qg
aGNoYW4qIGM7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgZ2NzdGF0cyB7DQogICAgKwl1
aW50NjRfdCBuaGFuZG9mZjsNCiAgICArCXVpbnQ2NF90IG5oYW5kb2ZmY250Ow0KICAgICsJdWlu
dDY0X3QgbnByb2N5aWVsZDsNCiAgICArCXVpbnQ2NF90IG5vc3lpZWxkOw0KICAgICsJdWludDY0
X3QgbnNsZWVwOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IF9wYW5pYzsNCiAgICArDQog
ICAgK3N0cnVjdCBfZGVmZXI7DQogICAgKw0KICAgICtzdHJ1Y3QgbTsNCiAgICArDQogICAgK3N0
cnVjdCB0cmFjZWJhY2tnOw0KICAgICsNCiAgICArc3RydWN0IGcgew0KICAgICsJc3RydWN0IF9w
YW5pYyogX3BhbmljOw0KICAgICsJc3RydWN0IF9kZWZlciogX2RlZmVyOw0KICAgICsJc3RydWN0
IG0qIG07DQogICAgKwl1aW50cHRyX3Qgc3lzY2FsbHNwOw0KICAgICsJdWludHB0cl90IHN5c2Nh
bGxwYzsNCiAgICArCXZvaWQqIHBhcmFtOw0KICAgICsJdWludDMyX3QgYXRvbWljc3RhdHVzOw0K
ICAgICsJaW50NjRfdCBnb2lkOw0KICAgICsJaW50NjRfdCB3YWl0c2luY2U7DQogICAgKwlTdHJp
bmcgd2FpdHJlYXNvbjsNCiAgICArCXVpbnQ2NF90IHNjaGVkbGluazsNCiAgICArCV9Cb29sIHBy
ZWVtcHQ7DQogICAgKwlfQm9vbCBwYW5pY29uZmF1bHQ7DQogICAgKwlfQm9vbCBwcmVlbXB0c2Nh
bjsNCiAgICArCV9Cb29sIGdjc2NhbmRvbmU7DQogICAgKwlfQm9vbCBnY3NjYW52YWxpZDsNCiAg
ICArCV9Cb29sIHRocm93c3BsaXQ7DQogICAgKwlpbnQ4X3QgcmFjZWlnbm9yZTsNCiAgICArCV9C
b29sIHN5c2Jsb2NrdHJhY2VkOw0KICAgICsJaW50NjRfdCBzeXNleGl0dGlja3M7DQogICAgKwl1
aW50NjRfdCB0cmFjZXNlcTsNCiAgICArCXVpbnQ2NF90IHRyYWNlbGFzdHA7DQogICAgKwlzdHJ1
Y3QgbSogbG9ja2VkbTsNCiAgICArCXVpbnQzMl90IHNpZzsNCiAgICArCVNsaWNlIHdyaXRlYnVm
Ow0KICAgICsJdWludHB0cl90IHNpZ2NvZGUwOw0KICAgICsJdWludHB0cl90IHNpZ2NvZGUxOw0K
ICAgICsJdWludHB0cl90IHNpZ3BjOw0KICAgICsJdWludHB0cl90IGdvcGM7DQogICAgKwl1aW50
cHRyX3Qgc3RhcnRwYzsNCiAgICArCXN0cnVjdCBzdWRvZyogd2FpdGluZzsNCiAgICArCWludDMy
X3QgZ2NSZXNjYW47DQogICAgKwlpbnQ2NF90IGdjQXNzaXN0Qnl0ZXM7DQogICAgKwl2b2lkKiBl
eGNlcHRpb247DQogICAgKwlfQm9vbCBpc2ZvcmVpZ247DQogICAgKwl2b2lkKiBnY3N0YWNrOw0K
ICAgICsJdWludHB0cl90IGdjc3RhY2tzaXplOw0KICAgICsJdm9pZCogZ2NuZXh0c2VnbWVudDsN
CiAgICArCXZvaWQqIGdjbmV4dHNwOw0KICAgICsJdm9pZCogZ2Npbml0aWFsc3A7DQogICAgKwl2
b2lkKiBnY3JlZ3NbMTIyXTsNCiAgICArCXZvaWQqIGVudHJ5Ow0KICAgICsJX0Jvb2wgZnJvbWdv
Z287DQogICAgKwlfQm9vbCBpc3N5c3RlbTsNCiAgICArCV9Cb29sIGlzYmFja2dyb3VuZDsNCiAg
ICArCXN0cnVjdCB0cmFjZWJhY2tnKiB0cmFjZWJhY2s7DQogICAgKwl2b2lkKiBjb250ZXh0WzEy
Ml07DQogICAgKwl2b2lkKiBzdGFja2NvbnRleHRbMTBdOw0KICAgICt9Ow0KICAgICsNCiAgICAr
c3RydWN0IHAgew0KICAgICsJc3RydWN0IG11dGV4IGxvY2s7DQogICAgKwlpbnQzMl90IGlkOw0K
ICAgICsJdWludDMyX3Qgc3RhdHVzOw0KICAgICsJdWludDY0X3QgbGluazsNCiAgICArCXVpbnQz
Ml90IHNjaGVkdGljazsNCiAgICArCXVpbnQzMl90IHN5c2NhbGx0aWNrOw0KICAgICsJdWludDY0
X3QgbTsNCiAgICArCXN0cnVjdCBtY2FjaGUqIG1jYWNoZTsNCiAgICArCVNsaWNlIGRlZmVycG9v
bDsNCiAgICArCXN0cnVjdCBfZGVmZXIqIGRlZmVycG9vbGJ1ZlszMl07DQogICAgKwl1aW50NjRf
dCBnb2lkY2FjaGU7DQogICAgKwl1aW50NjRfdCBnb2lkY2FjaGVlbmQ7DQogICAgKwl1aW50MzJf
dCBydW5xaGVhZDsNCiAgICArCXVpbnQzMl90IHJ1bnF0YWlsOw0KICAgICsJdWludDY0X3QgcnVu
cVsyNTZdOw0KICAgICsJdWludDY0X3QgcnVubmV4dDsNCiAgICArCXN0cnVjdCBnKiBnZnJlZTsN
CiAgICArCWludDMyX3QgZ2ZyZWVjbnQ7DQogICAgKwlTbGljZSBzdWRvZ2NhY2hlOw0KICAgICsJ
c3RydWN0IHN1ZG9nKiBzdWRvZ2J1ZlsxMjhdOw0KICAgICsJdWludDY0X3QgdHJhY2VidWY7DQog
ICAgKwlpbnQ2NF90IGdjQXNzaXN0VGltZTsNCiAgICArCXVpbnQ2NF90IGdjQmdNYXJrV29ya2Vy
Ow0KICAgICsJaW50NjRfdCBnY01hcmtXb3JrZXJNb2RlOw0KICAgICsJdWludDMyX3QgcnVuU2Fm
ZVBvaW50Rm47DQogICAgKwl1aW50OF90IHBhZFs2NF07DQogICAgK307DQogICAgKw0KICAgICtz
dHJ1Y3Qgc2NoZWR0IHsNCiAgICArCXVpbnQ2NF90IGdvaWRnZW47DQogICAgKwl1aW50NjRfdCBs
YXN0cG9sbDsNCiAgICArCXN0cnVjdCBtdXRleCBsb2NrOw0KICAgICsJdWludDY0X3QgbWlkbGU7
DQogICAgKwlpbnQzMl90IG5taWRsZTsNCiAgICArCWludDMyX3Qgbm1pZGxlbG9ja2VkOw0KICAg
ICsJaW50MzJfdCBtY291bnQ7DQogICAgKwlpbnQzMl90IG1heG1jb3VudDsNCiAgICArCXVpbnQz
Ml90IG5nc3lzOw0KICAgICsJdWludDY0X3QgcGlkbGU7DQogICAgKwl1aW50MzJfdCBucGlkbGU7
DQogICAgKwl1aW50MzJfdCBubXNwaW5uaW5nOw0KICAgICsJdWludDY0X3QgcnVucWhlYWQ7DQog
ICAgKwl1aW50NjRfdCBydW5xdGFpbDsNCiAgICArCWludDMyX3QgcnVucXNpemU7DQogICAgKwlz
dHJ1Y3QgbXV0ZXggZ2Zsb2NrOw0KICAgICsJc3RydWN0IGcqIGdmcmVlOw0KICAgICsJaW50MzJf
dCBuZ2ZyZWU7DQogICAgKwlzdHJ1Y3QgbXV0ZXggc3Vkb2dsb2NrOw0KICAgICsJc3RydWN0IHN1
ZG9nKiBzdWRvZ2NhY2hlOw0KICAgICsJc3RydWN0IG11dGV4IGRlZmVybG9jazsNCiAgICArCXN0
cnVjdCBfZGVmZXIqIGRlZmVycG9vbDsNCiAgICArCXVpbnQzMl90IGdjd2FpdGluZzsNCiAgICAr
CWludDMyX3Qgc3RvcHdhaXQ7DQogICAgKwlzdHJ1Y3Qgbm90ZSBzdG9wbm90ZTsNCiAgICArCXVp
bnQzMl90IHN5c21vbndhaXQ7DQogICAgKwlzdHJ1Y3Qgbm90ZSBzeXNtb25ub3RlOw0KICAgICsJ
RnVuY1ZhbCogc2FmZVBvaW50Rm47DQogICAgKwlpbnQzMl90IHNhZmVQb2ludFdhaXQ7DQogICAg
KwlzdHJ1Y3Qgbm90ZSBzYWZlUG9pbnROb3RlOw0KICAgICsJaW50MzJfdCBwcm9maWxlaHo7DQog
ICAgKwlpbnQ2NF90IHByb2NyZXNpemV0aW1lOw0KICAgICsJaW50NjRfdCB0b3RhbHRpbWU7DQog
ICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgbGZub2RlIHsNCiAgICArCXVpbnQ2NF90IG5leHQ7
DQogICAgKwl1aW50cHRyX3QgcHVzaGNudDsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBm
b3JjZWdjc3RhdGUgew0KICAgICsJc3RydWN0IG11dGV4IGxvY2s7DQogICAgKwlzdHJ1Y3QgZyog
ZzsNCiAgICArCXVpbnQzMl90IGlkbGU7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgX2Rl
ZmVyIHsNCiAgICArCXN0cnVjdCBfZGVmZXIqIGxpbms7DQogICAgKwlfQm9vbCogZnJhbWU7DQog
ICAgKwlzdHJ1Y3QgX3BhbmljKiBfcGFuaWM7DQogICAgKwl1aW50cHRyX3QgcGZuOw0KICAgICsJ
dm9pZCogYXJnOw0KICAgICsJdWludHB0cl90IHJldGFkZHI7DQogICAgKwlfQm9vbCBtYWtlZnVu
Y2NhbnJlY292ZXI7DQogICAgKwlfQm9vbCBzcGVjaWFsOw0KICAgICt9Ow0KICAgICsNCiAgICAr
c3RydWN0IF9wYW5pYyB7DQogICAgKwlzdHJ1Y3QgX3BhbmljKiBsaW5rOw0KICAgICsJRWZhY2Ug
YXJnOw0KICAgICsJX0Jvb2wgcmVjb3ZlcmVkOw0KICAgICsJX0Jvb2wgaXNmb3JlaWduOw0KICAg
ICt9Ow0KICAgICsNCiAgICArc3RydWN0IHNpZ3NldCB7DQogICAgKwl1aW50NjRfdCBfX3ZhbFsx
Nl07DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3Qgc2Nhc2Ugew0KICAgICsJdm9pZCogZWxl
bTsNCiAgICArCXN0cnVjdCBoY2hhbiogYzsNCiAgICArCXVpbnRwdHJfdCBwYzsNCiAgICArCXVp
bnQxNl90IGtpbmQ7DQogICAgKwl1aW50MTZfdCBpbmRleDsNCiAgICArCV9Cb29sKiByZWNlaXZl
ZHA7DQogICAgKwlpbnQ2NF90IHJlbGVhc2V0aW1lOw0KICAgICt9Ow0KICAgICsNCiAgICArc3Ry
dWN0IHJ1bnRpbWVTZWxlY3Qgew0KICAgICsJaW50NjRfdCBkaXI7DQogICAgKwl2b2lkKiB0eXA7
DQogICAgKwlzdHJ1Y3QgaGNoYW4qIGNoOw0KICAgICsJdm9pZCogdmFsOw0KICAgICt9Ow0KICAg
ICsNCiAgICArc3RydWN0IHNlbWFSb290IHsNCiAgICArCXN0cnVjdCBtdXRleCBsb2NrOw0KICAg
ICsJc3RydWN0IHN1ZG9nKiBoZWFkOw0KICAgICsJc3RydWN0IHN1ZG9nKiB0YWlsOw0KICAgICsJ
dWludDMyX3QgbndhaXQ7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3Qgbm90aWZ5TGlzdCB7
DQogICAgKwl1aW50MzJfdCB3YWl0Ow0KICAgICsJdWludDMyX3Qgbm90aWZ5Ow0KICAgICsJc3Ry
dWN0IG11dGV4IGxvY2s7DQogICAgKwlzdHJ1Y3Qgc3Vkb2cqIGhlYWQ7DQogICAgKwlzdHJ1Y3Qg
c3Vkb2cqIHRhaWw7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3Qgc2lnVGFiVCB7DQogICAg
KwlpbnQzMl90IGZsYWdzOw0KICAgICsJU3RyaW5nIG5hbWU7DQogICAgK307DQogICAgKw0KICAg
ICtzdHJ1Y3QgX3NpZ2luZm9fdDsNCiAgICArDQogICAgK3N0cnVjdCBzaWdjdHh0IHsNCiAgICAr
CXN0cnVjdCBfc2lnaW5mb190KiBpbmZvOw0KICAgICsJdm9pZCogY3R4dDsNCiAgICArfTsNCiAg
ICArDQogICAgK3N0cnVjdCBkaXZNYWdpYyB7DQogICAgKwl1aW50OF90IHNoaWZ0Ow0KICAgICsJ
dWludDhfdCBzaGlmdDI7DQogICAgKwl1aW50MTZfdCBtdWw7DQogICAgKwl1aW50MTZfdCBiYXNl
TWFzazsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBzbGljZSB7DQogICAgKwl2b2lkKiBh
cnJheTsNCiAgICArCWludDY0X3QgbGVuOw0KICAgICsJaW50NjRfdCBjYXA7DQogICAgK307DQog
ICAgKw0KICAgICtzdHJ1Y3Qgc3RyaW5nU3RydWN0IHsNCiAgICArCXZvaWQqIHN0cjsNCiAgICAr
CWludDY0X3QgbGVuOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IHN0cmluZ1N0cnVjdERX
QVJGIHsNCiAgICArCXVpbnQ4X3QqIHN0cjsNCiAgICArCWludDY0X3QgbGVuOw0KICAgICt9Ow0K
ICAgICsNCiAgICArc3RydWN0IEZyYW1lcyB7DQogICAgKwlTbGljZSBjYWxsZXJzOw0KICAgICsJ
dWludHB0cl90IGxhc3Q7DQogICAgKwlpbnQ2NF90IGxhc3RDb3VudDsNCiAgICArfTsNCiAgICAr
DQogICAgK3N0cnVjdCBGdW5jOw0KICAgICsNCiAgICArc3RydWN0IEZyYW1lIHsNCiAgICArCXVp
bnRwdHJfdCBQQzsNCiAgICArCXN0cnVjdCBGdW5jKiBGdW5jOw0KICAgICsJU3RyaW5nIEZ1bmN0
aW9uOw0KICAgICsJU3RyaW5nIEZpbGU7DQogICAgKwlpbnQ2NF90IExpbmU7DQogICAgKwl1aW50
cHRyX3QgRW50cnk7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgRnVuYyB7DQogICAgKwlT
dHJpbmcgbmFtZTsNCiAgICArCXVpbnRwdHJfdCBlbnRyeTsNCiAgICArfTsNCiAgICArDQogICAg
K3N0cnVjdCB0aW1lciB7DQogICAgKwlpbnQ2NF90IGk7DQogICAgKwlpbnQ2NF90IHdoZW47DQog
ICAgKwlpbnQ2NF90IHBlcmlvZDsNCiAgICArCUZ1bmNWYWwqIGY7DQogICAgKwlFZmFjZSBhcmc7
DQogICAgKwl1aW50cHRyX3Qgc2VxOw0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0IHRyYWNl
RnJhbWUgew0KICAgICsJdWludDY0X3QgZnVuY0lEOw0KICAgICsJdWludDY0X3QgZmlsZUlEOw0K
ICAgICsJdWludDY0X3QgbGluZTsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCB0cmFjZUFs
bG9jIHsNCiAgICArCXVpbnQ2NF90IGhlYWQ7DQogICAgKwl1aW50cHRyX3Qgb2ZmOw0KICAgICt9
Ow0KICAgICsNCiAgICArc3RydWN0IHRyYWNlQWxsb2NCbG9jayB7DQogICAgKwl1aW50NjRfdCBu
ZXh0Ow0KICAgICsJdWludDhfdCBkYXRhWzY1NTI4XTsNCiAgICArfTsNCiAgICArDQogICAgK3N0
cnVjdCBsb2NhdGlvbiB7DQogICAgKwl1aW50cHRyX3QgcGM7DQogICAgKwlTdHJpbmcgZmlsZW5h
bWU7DQogICAgKwlTdHJpbmcgZnVuY3Rpb247DQogICAgKwlpbnQ2NF90IGxpbmVubzsNCiAgICAr
fTsNCiAgICArDQogICAgK3N0cnVjdCBtZXRob2Qgew0KICAgICsJU3RyaW5nKiBuYW1lOw0KICAg
ICsJU3RyaW5nKiBwa2dQYXRoOw0KICAgICsJdm9pZCogbXR5cDsNCiAgICArCXZvaWQqIHR5cDsN
CiAgICArCXZvaWQqIHRmbjsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCB1bmNvbW1vbnR5
cGUgew0KICAgICsJU3RyaW5nKiBuYW1lOw0KICAgICsJU3RyaW5nKiBwa2dQYXRoOw0KICAgICsJ
U2xpY2UgbWV0aG9kczsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBpbWV0aG9kIHsNCiAg
ICArCVN0cmluZyogbmFtZTsNCiAgICArCVN0cmluZyogcGtnUGF0aDsNCiAgICArCXZvaWQqIHR5
cDsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBzdHJ1Y3RmaWVsZCB7DQogICAgKwlTdHJp
bmcqIG5hbWU7DQogICAgKwlTdHJpbmcqIHBrZ1BhdGg7DQogICAgKwl2b2lkKiB0eXA7DQogICAg
KwlTdHJpbmcqIHRhZzsNCiAgICArCXVpbnRwdHJfdCBvZmZzZXQ7DQogICAgK307DQogICAgKw0K
ICAgICtzdHJ1Y3QgdGltZXZhbCB7DQogICAgKwlpbnQ2NF90IHR2X3NlYzsNCiAgICArCWludDY0
X3QgdHZfdXNlYzsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCB0aW1lc3BlYyB7DQogICAg
KwlpbnQ2NF90IHR2X3NlYzsNCiAgICArCWludDY0X3QgdHZfbnNlYzsNCiAgICArfTsNCiAgICAr
DQogICAgK3N0cnVjdCBlcG9sbGV2ZW50IHsNCiAgICArCXVpbnQzMl90IGV2ZW50czsNCiAgICAr
CXVpbnQ4X3QgZGF0YVs4XTsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBzZW10IHsNCiAg
ICArCWludDhfdCBfX3NpemVbMzJdOw0KICAgICsJaW50NjRfdCBHb2R1bXBfMF9hbGlnblswXTsN
CiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCBoY2hhbiB7DQogICAgKwl1aW50NjRfdCBxY291
bnQ7DQogICAgKwl1aW50NjRfdCBkYXRhcXNpejsNCiAgICArCXZvaWQqIGJ1ZjsNCiAgICArCXVp
bnQxNl90IGVsZW1zaXplOw0KICAgICsJdWludDMyX3QgY2xvc2VkOw0KICAgICsJdm9pZCogZWxl
bXR5cGU7DQogICAgKwl1aW50NjRfdCBzZW5keDsNCiAgICArCXVpbnQ2NF90IHJlY3Z4Ow0KICAg
ICsJc3RydWN0IHdhaXRxIHJlY3ZxOw0KICAgICsJc3RydWN0IHdhaXRxIHNlbmRxOw0KICAgICsJ
c3RydWN0IG11dGV4IGxvY2s7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgY3B1UHJvZmls
ZSB7DQogICAgKwlfQm9vbCBvbjsNCiAgICArCXN0cnVjdCBub3RlIHdhaXQ7DQogICAgKwl1aW50
cHRyX3QgY291bnQ7DQogICAgKwl1aW50cHRyX3QgZXZpY3RzOw0KICAgICsJdWludHB0cl90IGxv
c3Q7DQogICAgKwlzdHJ1Y3Qgew0KICAgICsJc3RydWN0IGNwdXByb2ZFbnRyeSBlbnRyeVs0XTsN
CiAgICArCX0gaGFzaFsxMDI0XTsNCiAgICArCXVpbnRwdHJfdCBsb2dbNjU1MzZdWzJdOw0KICAg
ICsJaW50NjRfdCBubG9nOw0KICAgICsJaW50MzJfdCB0b2dnbGU7DQogICAgKwl1aW50MzJfdCBo
YW5kb2ZmOw0KICAgICsJdWludDMyX3Qgd3RvZ2dsZTsNCiAgICArCV9Cb29sIHdob2xkaW5nOw0K
ICAgICsJX0Jvb2wgZmx1c2hpbmc7DQogICAgKwlfQm9vbCBlb2RTZW50Ow0KICAgICt9Ow0KICAg
ICsNCiAgICArc3RydWN0IG1zcGFuIHsNCiAgICArCXN0cnVjdCBtc3BhbiogbmV4dDsNCiAgICAr
CXN0cnVjdCBtc3BhbiogcHJldjsNCiAgICArCXVpbnRwdHJfdCBzdGFydDsNCiAgICArCXVpbnRw
dHJfdCBucGFnZXM7DQogICAgKwlzdHJ1Y3QgbWxpbmsqIGZyZWVsaXN0Ow0KICAgICsJdWludDMy
X3Qgc3dlZXBnZW47DQogICAgKwl1aW50MTZfdCByZWY7DQogICAgKwl1aW50OF90IHNpemVjbGFz
czsNCiAgICArCV9Cb29sIGluY2FjaGU7DQogICAgKwl1aW50OF90IHN0YXRlOw0KICAgICsJdWlu
dDhfdCBuZWVkemVybzsNCiAgICArCXVpbnRwdHJfdCBlbGVtc2l6ZTsNCiAgICArCWludDY0X3Qg
dW51c2Vkc2luY2U7DQogICAgKwl1aW50cHRyX3QgbnByZWxlYXNlZDsNCiAgICArCXVpbnRwdHJf
dCBsaW1pdDsNCiAgICArCXN0cnVjdCBtdHlwZXMgdHlwZXM7DQogICAgKwlzdHJ1Y3QgbXV0ZXgg
c3BlY2lhbGxvY2s7DQogICAgKwlzdHJ1Y3Qgc3BlY2lhbCogc3BlY2lhbHM7DQogICAgKwlzdHJ1
Y3QgbWxpbmsqIGZyZWVidWY7DQogICAgK307DQogICAgKw0KICAgICtzdHJ1Y3QgcG9sbERlc2Mg
ew0KICAgICsJc3RydWN0IHBvbGxEZXNjKiBsaW5rOw0KICAgICsJc3RydWN0IG11dGV4IGxvY2s7
DQogICAgKwl1aW50cHRyX3QgZmQ7DQogICAgKwlfQm9vbCBjbG9zaW5nOw0KICAgICsJdWludHB0
cl90IHNlcTsNCiAgICArCXVpbnRwdHJfdCByZzsNCiAgICArCXN0cnVjdCB0aW1lciBydDsNCiAg
ICArCWludDY0X3QgcmQ7DQogICAgKwl1aW50cHRyX3Qgd2c7DQogICAgKwlzdHJ1Y3QgdGltZXIg
d3Q7DQogICAgKwlpbnQ2NF90IHdkOw0KICAgICsJdWludDMyX3QgdXNlcjsNCiAgICArfTsNCiAg
ICArDQogICAgK3N0cnVjdCBwb2xsQ2FjaGUgew0KICAgICsJc3RydWN0IG11dGV4IGxvY2s7DQog
ICAgKwlzdHJ1Y3QgcG9sbERlc2MqIGZpcnN0Ow0KICAgICt9Ow0KICAgICsNCiAgICArc3RydWN0
IG0gew0KICAgICsJc3RydWN0IGcqIGcwOw0KICAgICsJdWludDY0X3QgcHJvY2lkOw0KICAgICsJ
c3RydWN0IGcqIGdzaWduYWw7DQogICAgKwlzdHJ1Y3Qgc2lnc2V0IHNpZ21hc2s7DQogICAgKwl1
aW50cHRyX3QgbXN0YXJ0Zm47DQogICAgKwlzdHJ1Y3QgZyogY3VyZzsNCiAgICArCXVpbnQ2NF90
IGNhdWdodHNpZzsNCiAgICArCXVpbnQ2NF90IHA7DQogICAgKwl1aW50NjRfdCBuZXh0cDsNCiAg
ICArCWludDMyX3QgaWQ7DQogICAgKwlpbnQzMl90IG1hbGxvY2luZzsNCiAgICArCWludDMyX3Qg
dGhyb3dpbmc7DQogICAgKwlTdHJpbmcgcHJlZW1wdG9mZjsNCiAgICArCWludDMyX3QgbG9ja3M7
DQogICAgKwlpbnQzMl90IHNvZnRmbG9hdDsNCiAgICArCWludDMyX3QgZHlpbmc7DQogICAgKwlp
bnQzMl90IHByb2ZpbGVoejsNCiAgICArCWludDMyX3QgaGVscGdjOw0KICAgICsJX0Jvb2wgc3Bp
bm5pbmc7DQogICAgKwlfQm9vbCBibG9ja2VkOw0KICAgICsJX0Jvb2wgaW53YjsNCiAgICArCV9C
b29sIG5ld1NpZ3N0YWNrOw0KICAgICsJaW50OF90IHByaW50bG9jazsNCiAgICArCXVpbnQzMl90
IGZhc3RyYW5kOw0KICAgICsJdWludDY0X3QgbmNnb2NhbGw7DQogICAgKwlpbnQzMl90IG5jZ287
DQogICAgKwlzdHJ1Y3Qgbm90ZSBwYXJrOw0KICAgICsJc3RydWN0IG0qIGFsbGxpbms7DQogICAg
Kwl1aW50NjRfdCBzY2hlZGxpbms7DQogICAgKwlzdHJ1Y3QgbWNhY2hlKiBtY2FjaGU7DQogICAg
KwlzdHJ1Y3QgZyogbG9ja2VkZzsNCiAgICArCXN0cnVjdCBsb2NhdGlvbiBjcmVhdGVzdGFja1sz
Ml07DQogICAgKwl1aW50MzJfdCBsb2NrZWQ7DQogICAgKwl1aW50cHRyX3QgbmV4dHdhaXRtOw0K
ICAgICsJc3RydWN0IGdjc3RhdHMgZ2NzdGF0czsNCiAgICArCV9Cb29sIG5lZWRleHRyYW07DQog
ICAgKwl1aW50OF90IHRyYWNlYmFjazsNCiAgICArCXZvaWQqIHdhaXR1bmxvY2tmOw0KICAgICsJ
dm9pZCogd2FpdGxvY2s7DQogICAgKwl1aW50OF90IHdhaXR0cmFjZWV2Ow0KICAgICsJaW50NjRf
dCB3YWl0dHJhY2Vza2lwOw0KICAgICsJX0Jvb2wgc3RhcnRpbmd0cmFjZTsNCiAgICArCXVpbnQz
Ml90IHN5c2NhbGx0aWNrOw0KICAgICsJc3RydWN0IG1PUyBtb3M7DQogICAgKwl2b2lkKiBnc2ln
bmFsc3RhY2s7DQogICAgKwl1aW50cHRyX3QgZ3NpZ25hbHN0YWNrc2l6ZTsNCiAgICArCV9Cb29s
IGRyb3BleHRyYW07DQogICAgKwlpbnQzMl90IGdjaW5nOw0KICAgICt9Ow0KICAgICsNCiAgICAr
c3RydWN0IGhzZWxlY3Qgew0KICAgICsJdWludDE2X3QgdGNhc2U7DQogICAgKwl1aW50MTZfdCBu
Y2FzZTsNCiAgICArCXVpbnQxNl90KiBwb2xsb3JkZXI7DQogICAgKwl1aW50MTZfdCogbG9ja29y
ZGVyOw0KICAgICsJc3RydWN0IHNjYXNlIHNjYXNlWzFdOw0KICAgICt9Ow0KICAgICsNCiAgICAr
c3RydWN0IHRyYWNlQnVmSGVhZGVyIHsNCiAgICArCXVpbnQ2NF90IGxpbms7DQogICAgKwl1aW50
NjRfdCBsYXN0VGlja3M7DQogICAgKwlpbnQ2NF90IHBvczsNCiAgICArCXN0cnVjdCBsb2NhdGlv
biBzdGtbMTI4XTsNCiAgICArfTsNCiAgICArDQogICAgK3N0cnVjdCB0cmFjZVN0YWNrVGFibGUg
ew0KICAgICsJc3RydWN0IG11dGV4IGxvY2s7DQogICAgKwl1aW50MzJfdCBzZXE7DQogICAgKwlz
dHJ1Y3QgdHJhY2VBbGxvYyBtZW07DQogICAgKwl1aW50NjRfdCB0YWJbODE5Ml07DQogICAgK307
DQogICAgKw0KICAgICtzdHJ1Y3QgdHJhY2VTdGFjayB7DQogICAgKwl1aW50NjRfdCBsaW5rOw0K
ICAgICsJdWludHB0cl90IGhhc2g7DQogICAgKwl1aW50MzJfdCBpZDsNCiAgICArCWludDY0X3Qg
bjsNCiAgICArCXN0cnVjdCBsb2NhdGlvbiBzdGtbMF07DQogICAgK307DQogICAgKw0KICAgICtz
dHJ1Y3QgdHJhY2ViYWNrZyB7DQogICAgKwlzdHJ1Y3QgZyogZ3A7DQogICAgKwlzdHJ1Y3QgbG9j
YXRpb24gbG9jYnVmWzEwMF07DQogICAgKwlpbnQ2NF90IGM7DQogICAgK307DQogICAgKyNkZWZp
bmUgX0dpZGxlIDANCiAgICArI2RlZmluZSBfR3J1bm5hYmxlIDENCiAgICArI2RlZmluZSBfR3J1
bm5pbmcgMg0KICAgICsjZGVmaW5lIF9Hc3lzY2FsbCAzDQogICAgKyNkZWZpbmUgX0d3YWl0aW5n
IDQNCiAgICArI2RlZmluZSBfR21vcmlidW5kX3VudXNlZCA1DQogICAgKyNkZWZpbmUgX0dkZWFk
IDYNCiAgICArI2RlZmluZSBfR2VucXVldWVfdW51c2VkIDcNCiAgICArI2RlZmluZSBfR2NvcHlz
dGFjayA4DQogICAgKyNkZWZpbmUgX0dzY2FuIDQwOTYNCiAgICArI2RlZmluZSBfR3NjYW5ydW5u
YWJsZSA0MDk3DQogICAgKyNkZWZpbmUgX0dzY2FucnVubmluZyA0MDk4DQogICAgKyNkZWZpbmUg
X0dzY2Fuc3lzY2FsbCA0MDk5DQogICAgKyNkZWZpbmUgX0dzY2Fud2FpdGluZyA0MTAwDQogICAg
KyNkZWZpbmUgX1BpZGxlIDANCiAgICArI2RlZmluZSBfUHJ1bm5pbmcgMQ0KICAgICsjZGVmaW5l
IF9Qc3lzY2FsbCAyDQogICAgKyNkZWZpbmUgX1BnY3N0b3AgMw0KICAgICsjZGVmaW5lIF9QZGVh
ZCA0DQogICAgKyNkZWZpbmUgX1BhZ2VTaGlmdCAxMw0KICAgICsjZGVmaW5lIF9NYXhHb21heHBy
b2NzIDI1Ng0KICAgICsjZGVmaW5lIF9NYXhTbWFsbFNpemUgMzI3NjgNCiAgICArI2RlZmluZSBf
TWF4TWVtIDU0OTc1NTgxMzg4Nw0KICAgICsjZGVmaW5lIF9NYXhHY3Byb2MgMzINCiAgICArI2Rl
ZmluZSBfTG9ja0V4dGVybmFsIDENCiAgICArI2RlZmluZSBfTG9ja0ludGVybmFsIDINCiAgICAr
I2RlZmluZSBfU2lnTm90aWZ5IDENCiAgICArI2RlZmluZSBfU2lnS2lsbCAyDQogICAgKyNkZWZp
bmUgX1NpZ1Rocm93IDQNCiAgICArI2RlZmluZSBfU2lnUGFuaWMgOA0KICAgICsjZGVmaW5lIF9T
aWdEZWZhdWx0IDE2DQogICAgKyNkZWZpbmUgX1NpZ0hhbmRsaW5nIDMyDQogICAgKyNkZWZpbmUg
X1NpZ0dvRXhpdCA2NA0KICAgICsjZGVmaW5lIF9TaWdTZXRTdGFjayAxMjgNCiAgICArI2RlZmlu
ZSBfU2lnVW5ibG9jayAyNTYNCiAgICArI2RlZmluZSBfVHJhY2VSdW50aW1lRnJhbWVzIDENCiAg
ICArI2RlZmluZSBfVHJhY2VUcmFwIDINCiAgICArI2RlZmluZSBfVHJhY2VKdW1wU3RhY2sgNA0K
ICAgICsjZGVmaW5lIF9UcmFjZWJhY2tNYXhGcmFtZXMgMTAwDQogICAgKyNkZWZpbmUgX01IZWFw
TWFwX1RvdGFsQml0cyAzOQ0KICAgICsjZGVmaW5lIF9OdW1TaXplQ2xhc3NlcyA2Nw0KICAgIGRp
ZmYgLS1naXQgYS9pbmNsdWRlL21tX21hbGxvYy5oIGIvaW5jbHVkZS9tbV9tYWxsb2MuaA0KICAg
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQ0KICAgIC0t
IA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:39:40 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:39:40 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlmu-00024J-1N; Fri, 27 Sep 2019 08:39:40 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlms-00024E-KN
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:39:38 +0000
X-Inumbo-ID: 56a35910-e102-11e9-bf31-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 56a35910-e102-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 08:39:37 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id EA2FA10573B;
 Fri, 27 Sep 2019 10:39:36 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id FqEgBygSqLQn; Fri, 27 Sep 2019 10:39:36 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id C59AD105739;
 Fri, 27 Sep 2019 10:39:36 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:39:36 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:39:36
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 04/11] Add patches to build the library
Thread-Index: AQHVdH+gSxPTeTOo7kOD5lDFv3ap2ac/NTAA
Date: Fri, 27 Sep 2019 08:39:36 +0000
Message-ID: <368D0AB5-59D9-4936-9444-0AA60626D7A2@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-5-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-5-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <CCF2A96B1FE9F24B89C92E73B6FC977F@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 04/11] Add patches to
 build the library
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBGcm9tOiBDb3N0
aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgIA0KICAgIGxpYmdvIGV4cGVjdHMg
YSB1bndpbmQuaCBoZWFkZXIgYWx0aG91Z2ggaXQgY29tZXMgd2l0aCBpdHMgb3duIGhlYWRlciwN
CiAgICB1bndpbmQtZ2VuZXJpYy5oLCBzbyB3ZSB3aWxsIGJlIHVzaW5nIHRoYXQgb25lIGluc3Rl
YWQuDQogICAgDQogICAgVGhlIHNlY29uZCBwYXRjaCBzaG91bGQgYmUgYWxzbyB1cHN0cmVhbWVk
IHNpbmNlIGl0IHNlZW1zIHRvIHJlbW92ZSBhbg0KICAgIHVubmVjZXNzYXJ5IGluY2x1ZGUgZGly
ZWN0aXZlLg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVw
dUBjcy5wdWIucm8+DQogICAgLS0tDQogICAgIC4uLi11bndpbmQtaGVhZGVyLWluc3RlYWQtb2Yt
c3lzdGVtLW9uZS5wYXRjaCB8IDI1ICsrKysrKysrKysrKysrKysrKysNCiAgICAgcGF0Y2hlcy8w
MDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0Y2ggICAgIHwgMjUgKysrKysrKysrKysrKysr
KysrKw0KICAgICAyIGZpbGVzIGNoYW5nZWQsIDUwIGluc2VydGlvbnMoKykNCiAgICAgY3JlYXRl
IG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAwMS1saWJnby1Vc2UtZ2NjLW93bi11bndpbmQtaGVhZGVy
LWluc3RlYWQtb2Ytc3lzdGVtLW9uZS5wYXRjaA0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0
Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0Y2gNCiAgICANCiAgICBkaWZmIC0t
Z2l0IGEvcGF0Y2hlcy8wMDAxLWxpYmdvLVVzZS1nY2Mtb3duLXVud2luZC1oZWFkZXItaW5zdGVh
ZC1vZi1zeXN0ZW0tb25lLnBhdGNoIGIvcGF0Y2hlcy8wMDAxLWxpYmdvLVVzZS1nY2Mtb3duLXVu
d2luZC1oZWFkZXItaW5zdGVhZC1vZi1zeXN0ZW0tb25lLnBhdGNoDQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi43ZWMwOWJjDQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL3BhdGNoZXMvMDAwMS1saWJnby1Vc2UtZ2NjLW93bi11bndpbmQtaGVhZGVyLWlu
c3RlYWQtb2Ytc3lzdGVtLW9uZS5wYXRjaA0KICAgIEBAIC0wLDAgKzEsMjUgQEANCiAgICArRnJv
bSA1OTZiM2IzM2U3MmM1YzY0Y2I3ZWFkNGFlZTI5ODM4NjkwMDhhZDQ0IE1vbiBTZXAgMTcgMDA6
MDA6MDAgMjAwMQ0KICAgICtEYXRlOiBGcmksIDE2IEF1ZyAyMDE5IDIzOjEzOjAzICswMjAwDQog
ICAgK1N1YmplY3Q6IFtQQVRDSCAxLzJdIGxpYmdvOiBVc2UgZ2NjIG93biB1bndpbmQgaGVhZGVy
IGluc3RlYWQgb2Ygc3lzdGVtIG9uZQ0KICAgICsNCiAgICArU2lnbmVkLW9mZi1ieTogQ29zdGlu
IEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAgICArLS0tDQogICAgKyBsaWJnby9ydW50
aW1lL2dvLXVud2luZC5jIHwgMiArLQ0KICAgICsgMSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9u
KCspLCAxIGRlbGV0aW9uKC0pDQogICAgKw0KICAgICtkaWZmIC0tZ2l0IGEvbGliZ28vcnVudGlt
ZS9nby11bndpbmQuYyBiL2xpYmdvL3J1bnRpbWUvZ28tdW53aW5kLmMNCiAgICAraW5kZXggNGM5
ZmI0OWM5Li45MDdiYTAzMzYgMTAwNjQ0DQogICAgKy0tLSBhL2xpYmdvL3J1bnRpbWUvZ28tdW53
aW5kLmMNCiAgICArKysrIGIvbGliZ28vcnVudGltZS9nby11bndpbmQuYw0KICAgICtAQCAtOSw3
ICs5LDcgQEANCiAgICArICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICArICNpbmNsdWRlIDx1bmlz
dGQuaD4NCiAgICArIA0KICAgICstI2luY2x1ZGUgInVud2luZC5oIg0KICAgICsrI2luY2x1ZGUg
InVud2luZC1nZW5lcmljLmgiDQogICAgKyAjZGVmaW5lIE5PX1NJWkVfT0ZfRU5DT0RFRF9WQUxV
RQ0KICAgICsgI2luY2x1ZGUgInVud2luZC1wZS5oIg0KICAgICsgDQogICAgKy0tIA0KICAgICsy
LjIwLjENCiAgICArDQogICAgZGlmZiAtLWdpdCBhL3BhdGNoZXMvMDAwMi1saWJnby1Oby1mdXRl
eC10b25pZ2h0LnBhdGNoIGIvcGF0Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4LXRvbmlnaHQucGF0
Y2gNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjc4OTJlNDcN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvcGF0Y2hlcy8wMDAyLWxpYmdvLU5vLWZ1dGV4
LXRvbmlnaHQucGF0Y2gNCiAgICBAQCAtMCwwICsxLDI1IEBADQogICAgK0Zyb20gNWVhOWQ3NjA2
MGIwMzQ3MDAyNDY4MTU5ZmM1MGI4ZjgxYmM3MjZiMSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEN
CiAgICArRnJvbTogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXBAZ21haWwuY29tPg0KICAgICtEYXRl
OiBGcmksIDE2IEF1ZyAyMDE5IDIzOjE0OjM0ICswMjAwDQogICAgK1N1YmplY3Q6IFtQQVRDSCAy
LzJdIGxpYmdvOiBObyBmdXRleCB0b25pZ2h0DQogICAgKw0KICAgICtTaWduZWQtb2ZmLWJ5OiBD
b3N0aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgICstLS0NCiAgICArIGxpYmdv
L3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMgfCAxIC0NCiAgICArIDEgZmlsZSBjaGFuZ2VkLCAxIGRl
bGV0aW9uKC0pDQogICAgKw0KICAgICtkaWZmIC0tZ2l0IGEvbGliZ28vcnVudGltZS90aHJlYWQt
bGludXguYyBiL2xpYmdvL3J1bnRpbWUvdGhyZWFkLWxpbnV4LmMNCiAgICAraW5kZXggODFhZDBm
OWM5Li5mZDVhMzExODIgMTAwNjQ0DQogICAgKy0tLSBhL2xpYmdvL3J1bnRpbWUvdGhyZWFkLWxp
bnV4LmMNCiAgICArKysrIGIvbGliZ28vcnVudGltZS90aHJlYWQtbGludXguYw0KICAgICtAQCAt
OSw3ICs5LDYgQEANCiAgICArIA0KICAgICsgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICsgI2lu
Y2x1ZGUgPHN5c2NhbGwuaD4NCiAgICArLSNpbmNsdWRlIDxsaW51eC9mdXRleC5oPg0KICAgICsg
DQogICAgKyB2b2lkDQogICAgKyBydW50aW1lX29zaW5pdCh2b2lkKQ0KICAgICstLSANCiAgICAr
Mi4yMC4xDQogICAgKw0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KDQpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFp
bGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3Rz
LnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:40:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:40:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlnY-0002fy-4y; Fri, 27 Sep 2019 08:40:20 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlnX-0002ft-1t
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:40:19 +0000
X-Inumbo-ID: 6eb12ca8-e102-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 6eb12ca8-e102-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 08:40:18 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 499DFF200A;
 Fri, 27 Sep 2019 10:40:17 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 2LtEmd6-PC2w; Fri, 27 Sep 2019 10:40:17 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 1EB1AF2006;
 Fri, 27 Sep 2019 10:40:13 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:40:12 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:40:12
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 05/11] Add patches to enable runtime
Thread-Index: AQHVdH+fuodNJYHhtEC9TOtnTjcDPKc/NVsA
Date: Fri, 27 Sep 2019 08:40:12 +0000
Message-ID: <E068216B-9FC9-458B-9917-7FEB6F69D09E@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-6-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-6-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <06B17AF2CEE0E447A30DE39B80B8C3F5@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 05/11] Add patches to
 enable runtime
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBsaWJnbyB1c2Vz
IGJhY2t0cmFja2luZyBidXQgaXQgbGVhZHMgdG8gcGFnZSBmYXVsdHMuIEZvciB0aGUgdGltZSBi
ZWluZw0KICAgIGl0IGlzIGRpc2FibGVkIGJ1dCBpdCBzaG91bGQgYmUgcmV2aXNpdGVkIGluIHRo
ZSBmdXR1cmUuDQogICAgDQogICAgVGhlIHNlY29uZCBwYXRjaCBkZWNyZWFzZXMgdGhlIGFtb3Vu
dCBvZiBtZW1vcnkgbWFwcywgY2F1c2UgaXQgd2FzDQogICAgZXhjZWVkaW5nIDFHLg0KICAgIA0K
ICAgIEF0IGxhc3QgR28gdXNlcyBjb250ZXh0IHN3aXRjaGluZyB0byBtYW5hZ2UgZ29yb3V0aW5l
cy4gVGhpcyBwYXRjaCBhZGQNCiAgICBzb21lIGNoYW5nZXMgdG8gdGhlIHdheSBjb250ZXh0cyBh
cmUgaGFuZGxlZCBzbyB0aGV5IGNhbiBiZSBjb21wYXRpYmxlDQogICAgd2l0aCB0aHJlYWRpbmcg
aW4gVW5pa3JhZnQuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFz
IDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAgICBwYXRjaGVzLzAw
MDMtbGliZ28tRGlzYWJsZS1iYWNrdHJhY2luZy5wYXRjaCAgfCAyOCArKysrKysrKysNCiAgICAg
Li4uMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1zaXplLnBhdGNoIHwgMjcgKysrKysr
KysrDQogICAgIC4uLi8wMDA1LWxpYmdvLVVzZS1vdXItY29udGV4dC1sb2dpYy5wYXRjaCAgICB8
IDU3ICsrKysrKysrKysrKysrKysrKysNCiAgICAgMyBmaWxlcyBjaGFuZ2VkLCAxMTIgaW5zZXJ0
aW9ucygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAzLWxpYmdvLURpc2Fi
bGUtYmFja3RyYWNpbmcucGF0Y2gNCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHBhdGNoZXMvMDAw
NC1saWJnby1SZWR1Y2UtbWF4aW11bS1tZW1vcnktc2l6ZS5wYXRjaA0KICAgICBjcmVhdGUgbW9k
ZSAxMDA2NDQgcGF0Y2hlcy8wMDA1LWxpYmdvLVVzZS1vdXItY29udGV4dC1sb2dpYy5wYXRjaA0K
ICAgIA0KICAgIGRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDMtbGliZ28tRGlzYWJsZS1iYWNrdHJh
Y2luZy5wYXRjaCBiL3BhdGNoZXMvMDAwMy1saWJnby1EaXNhYmxlLWJhY2t0cmFjaW5nLnBhdGNo
DQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi41MTk0MzYzDQog
ICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3BhdGNoZXMvMDAwMy1saWJnby1EaXNhYmxlLWJh
Y2t0cmFjaW5nLnBhdGNoDQogICAgQEAgLTAsMCArMSwyOCBAQA0KICAgICtGcm9tIDE3M2IwN2Ri
M2I4NWQ1NjVkNjUwZTkzNjgxMzJlMzExNjE3ZWEzZjEgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAx
DQogICAgK0Zyb206IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwQGdtYWlsLmNvbT4NCiAgICArRGF0
ZTogV2VkLCAyMSBBdWcgMjAxOSAxNzowMzoyNSArMDMwMA0KICAgICtTdWJqZWN0OiBbUEFUQ0gg
MS8zXSBsaWJnbzogRGlzYWJsZSBiYWNrdHJhY2luZw0KICAgICsNCiAgICArU2lnbmVkLW9mZi1i
eTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxjaGFyYWxhbXBvcy5tYWluYXNAbmVjbGFiLmV1Pg0KICAg
ICstLS0NCiAgICArIGxpYmdvL3J1bnRpbWUvZ28tY2FsbGVycy5jIHwgNCArKy0tDQogICAgKyAx
IGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQ0KICAgICsNCiAg
ICArZGlmZiAtLWdpdCBhL2xpYmdvL3J1bnRpbWUvZ28tY2FsbGVycy5jIGIvbGliZ28vcnVudGlt
ZS9nby1jYWxsZXJzLmMNCiAgICAraW5kZXggMGMxYzYwMzE0Li5hODBiYzU2ZjUgMTAwNjQ0DQog
ICAgKy0tLSBhL2xpYmdvL3J1bnRpbWUvZ28tY2FsbGVycy5jDQogICAgKysrKyBiL2xpYmdvL3J1
bnRpbWUvZ28tY2FsbGVycy5jDQogICAgK0BAIC0xNjcsOCArMTY3LDggQEAgcnVudGltZV9jYWxs
ZXJzIChpbnQzMiBza2lwLCBMb2NhdGlvbiAqbG9jYnVmLCBpbnQzMiBtLCBib29sIGtlZXBfdGh1
bmtzKQ0KICAgICsgICBkYXRhLm1heCA9IG07DQogICAgKyAgIGRhdGEua2VlcF90aHVua3MgPSBr
ZWVwX3RodW5rczsNCiAgICArICAgcnVudGltZV94YWRkICgmcnVudGltZV9pbl9jYWxsZXJzLCAx
KTsNCiAgICArLSAgYmFja3RyYWNlX2Z1bGwgKF9fZ29fZ2V0X2JhY2t0cmFjZV9zdGF0ZSAoKSwg
MCwgY2FsbGJhY2ssIGVycm9yX2NhbGxiYWNrLA0KICAgICstCQkgICZkYXRhKTsNCiAgICArKy8v
ICBiYWNrdHJhY2VfZnVsbCAoX19nb19nZXRfYmFja3RyYWNlX3N0YXRlICgpLCAwLCBjYWxsYmFj
aywgZXJyb3JfY2FsbGJhY2ssDQogICAgKysvLwkJICAmZGF0YSk7DQogICAgKyAgIHJ1bnRpbWVf
eGFkZCAoJnJ1bnRpbWVfaW5fY2FsbGVycywgLTEpOw0KICAgICsgICByZXR1cm4gZGF0YS5pbmRl
eDsNCiAgICArIH0NCiAgICArLS0gDQogICAgKzIuMjAuMQ0KICAgICsNCiAgICBkaWZmIC0tZ2l0
IGEvcGF0Y2hlcy8wMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1zaXplLnBhdGNoIGIv
cGF0Y2hlcy8wMDA0LWxpYmdvLVJlZHVjZS1tYXhpbXVtLW1lbW9yeS1zaXplLnBhdGNoDQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi43ZmJmNGVhDQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL3BhdGNoZXMvMDAwNC1saWJnby1SZWR1Y2UtbWF4aW11bS1t
ZW1vcnktc2l6ZS5wYXRjaA0KICAgIEBAIC0wLDAgKzEsMjcgQEANCiAgICArRnJvbSBjYWFlZjcz
OWVjZjRlODdiOTk5NDc0N2NiZTZjN2U2MjdjODY3OGQ5IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw
MQ0KICAgICtGcm9tOiBDb3N0aW4gTHVwdSA8Y29zdGluLmx1cEBnbWFpbC5jb20+DQogICAgK0Rh
dGU6IFdlZCwgMjEgQXVnIDIwMTkgMTc6MDM6NDkgKzAzMDANCiAgICArU3ViamVjdDogW1BBVENI
IDIvM10gbGliZ286IFJlZHVjZSBtYXhpbXVtIG1lbW9yeSBzaXplDQogICAgKw0KICAgICtTaWdu
ZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPGNoYXJhbGFtcG9zLm1haW5hc0BuZWNsYWIu
ZXU+DQogICAgKy0tLQ0KICAgICsgbGliZ28vcnVudGltZS9tYWxsb2MuZ29jIHwgMyArKy0NCiAg
ICArIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCiAgICAr
DQogICAgK2RpZmYgLS1naXQgYS9saWJnby9ydW50aW1lL21hbGxvYy5nb2MgYi9saWJnby9ydW50
aW1lL21hbGxvYy5nb2MNCiAgICAraW5kZXggMjMyMjEwZmM0Li4yMTFiODQ3NDggMTAwNjQ0DQog
ICAgKy0tLSBhL2xpYmdvL3J1bnRpbWUvbWFsbG9jLmdvYw0KICAgICsrKysgYi9saWJnby9ydW50
aW1lL21hbGxvYy5nb2MNCiAgICArQEAgLTQ0OCw3ICs0NDgsOCBAQCBydW50aW1lX21hbGxvY2lu
aXQodm9pZCkNCiAgICArIAkJLy8gYnV0IGl0IGhhcmRseSBtYXR0ZXJzOiBlMCAwMCBpcyBub3Qg
dmFsaWQgVVRGLTggZWl0aGVyLg0KICAgICsgCQkvLw0KICAgICsgCQkvLyBJZiB0aGlzIGZhaWxz
IHdlIGZhbGwgYmFjayB0byB0aGUgMzIgYml0IG1lbW9yeSBtZWNoYW5pc20NCiAgICArLQkJYXJl
bmFfc2l6ZSA9IE1heE1lbTsNCiAgICArKwkJLy9hcmVuYV9zaXplID0gTWF4TWVtOw0KICAgICsr
CQlhcmVuYV9zaXplID0gMTA0ODU3NjAwOw0KICAgICsgCQliaXRtYXBfc2l6ZSA9IGFyZW5hX3Np
emUgLyAoc2l6ZW9mKHZvaWQqKSo4LzQpOw0KICAgICsgCQlzcGFuc19zaXplID0gYXJlbmFfc2l6
ZSAvIFBhZ2VTaXplICogc2l6ZW9mKHJ1bnRpbWVfbWhlYXAuc3BhbnNbMF0pOw0KICAgICsgCQlz
cGFuc19zaXplID0gUk9VTkQoc3BhbnNfc2l6ZSwgUGFnZVNpemUpOw0KICAgICstLSANCiAgICAr
Mi4yMC4xDQogICAgKw0KICAgIGRpZmYgLS1naXQgYS9wYXRjaGVzLzAwMDUtbGliZ28tVXNlLW91
ci1jb250ZXh0LWxvZ2ljLnBhdGNoIGIvcGF0Y2hlcy8wMDA1LWxpYmdvLVVzZS1vdXItY29udGV4
dC1sb2dpYy5wYXRjaA0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAw
MC4uMjM5MDU4Zg0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9wYXRjaGVzLzAwMDUtbGli
Z28tVXNlLW91ci1jb250ZXh0LWxvZ2ljLnBhdGNoDQogICAgQEAgLTAsMCArMSw1NyBAQA0KICAg
ICtGcm9tIDhlMjJkZWRmMmRmNzI1ZDI1NjIzNWQ5YmQyMmZiOTdmMjkwZmQxMmQgTW9uIFNlcCAx
NyAwMDowMDowMCAyMDAxDQogICAgK0Zyb206IENvc3RpbiBMdXB1IDxjb3N0aW4ubHVwQGdtYWls
LmNvbT4NCiAgICArRGF0ZTogV2VkLCAyMSBBdWcgMjAxOSAxNzowNDoxMyArMDMwMA0KICAgICtT
dWJqZWN0OiBbUEFUQ0ggMy8zXSBsaWJnbzogVXNlIG91ciBjb250ZXh0IGxvZ2ljDQogICAgKw0K
ICAgICtTaWduZWQtb2ZmLWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPGNoYXJhbGFtcG9zLm1haW5h
c0BuZWNsYWIuZXU+DQogICAgKy0tLQ0KICAgICsgbGliZ28vcnVudGltZS9wcm9jLmMgfCAxMiAr
KysrKysrKystLS0NCiAgICArIDEgZmlsZSBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDMgZGVs
ZXRpb25zKC0pDQogICAgKw0KICAgICtkaWZmIC0tZ2l0IGEvbGliZ28vcnVudGltZS9wcm9jLmMg
Yi9saWJnby9ydW50aW1lL3Byb2MuYw0KICAgICtpbmRleCAwNmE5YzJhZDYuLmU4YTQzMjcyZSAx
MDA2NDQNCiAgICArLS0tIGEvbGliZ28vcnVudGltZS9wcm9jLmMNCiAgICArKysrIGIvbGliZ28v
cnVudGltZS9wcm9jLmMNCiAgICArQEAgLTQzLDYgKzQzLDEwIEBAIGV4dGVybiB2b2lkIF9fc3Bs
aXRzdGFja19ibG9ja19zaWduYWxzX2NvbnRleHQgKHZvaWQgKmNvbnRleHRbMTBdLCBpbnQgKiwN
CiAgICArIA0KICAgICsgI2VuZGlmDQogICAgKyANCiAgICArK2V4dGVybiBzaXplX3QgZ2V0X3N0
YWNrX3NpemUoKTsNCiAgICArK2V4dGVybiB2b2lkIG1ha2Vjb250ZXh0MSh1Y29udGV4dF90ICos
IHZvaWQgKiwgaW50KTsNCiAgICArK2V4dGVybiB2b2lkICphbGxvY19zdGFjaygpOw0KICAgICsr
DQogICAgKyAjaWZuZGVmIFBUSFJFQURfU1RBQ0tfTUlODQogICAgKyAjIGRlZmluZSBQVEhSRUFE
X1NUQUNLX01JTiA4MTkyDQogICAgKyAjZW5kaWYNCiAgICArQEAgLTgzMSw3ICs4MzUsNyBAQCBt
YWtlR0NvbnRleHQoRyogZ3AsIGJ5dGUqIHNwLCB1aW50cHRyIHNwc2l6ZSkgew0KICAgICsgCWdl
dGNvbnRleHQodWMpOw0KICAgICsgCXVjLT51Y19zdGFjay5zc19zcCA9IHNwOw0KICAgICsgCXVj
LT51Y19zdGFjay5zc19zaXplID0gKHNpemVfdClzcHNpemU7DQogICAgKy0JbWFrZWNvbnRleHQo
dWMsIGtpY2tvZmYsIDApOw0KICAgICsrCW1ha2Vjb250ZXh0MSh1Yywga2lja29mZiwgMCk7DQog
ICAgKyB9DQogICAgKyANCiAgICArIC8vIENyZWF0ZSBhIG5ldyBtLiAgSXQgd2lsbCBzdGFydCBv
ZmYgd2l0aCBhIGNhbGwgdG8gZm4sIG9yIGVsc2UgdGhlIHNjaGVkdWxlci4NCiAgICArQEAgLTEz
NDgsNyArMTM1Miw4IEBAIHJ1bnRpbWVfbWFsZyhib29sIGFsbG9jYXRlc3RhY2ssIGJvb2wgc2ln
bmFsc3RhY2ssIGJ5dGUqKiByZXRfc3RhY2ssIHVpbnRwdHIqIHJlDQogICAgKyAJfQ0KICAgICsg
CW5ld2cgPSBhbGxvY2coKTsNCiAgICArIAlpZihhbGxvY2F0ZXN0YWNrKSB7DQogICAgKy0JCXN0
YWNrc2l6ZSA9IFN0YWNrTWluOw0KICAgICsrCQkvL3N0YWNrc2l6ZSA9IFN0YWNrTWluOw0KICAg
ICsrCQlzdGFja3NpemUgPSBnZXRfc3RhY2tfc2l6ZSgpOw0KICAgICsgCQlpZihzaWduYWxzdGFj
aykgew0KICAgICsgCQkJc3RhY2tzaXplID0gMzIgKiAxMDI0OyAvLyBPUyBYIHdhbnRzID49IDhL
LCBHTlUvTGludXggPj0gMksNCiAgICArICNpZmRlZiBTSUdTVEtTWg0KICAgICtAQCAtMTM3Miw3
ICsxMzc3LDggQEAgcnVudGltZV9tYWxnKGJvb2wgYWxsb2NhdGVzdGFjaywgYm9vbCBzaWduYWxz
dGFjaywgYnl0ZSoqIHJldF9zdGFjaywgdWludHB0ciogcmUNCiAgICArICAgICAgICAgICAgICAg
ICAvLyAzMi1iaXQgbW9kZSwgdGhlIEdvIGFsbG9jYXRpb24gc3BhY2UgaXMgYWxsIG9mDQogICAg
KyAgICAgICAgICAgICAgICAgLy8gbWVtb3J5IGFueWhvdy4NCiAgICArIAkJaWYoc2l6ZW9mKHZv
aWQqKSA9PSA4KSB7DQogICAgKy0JCQl2b2lkICpwID0gcnVudGltZV9TeXNBbGxvYyhzdGFja3Np
emUsICZtc3RhdHMoKS0+b3RoZXJfc3lzKTsNCiAgICArKwkJCS8vdm9pZCAqcCA9IHJ1bnRpbWVf
U3lzQWxsb2Moc3RhY2tzaXplLCAmbXN0YXRzKCktPm90aGVyX3N5cyk7DQogICAgKysJCQl2b2lk
ICpwID0gYWxsb2Nfc3RhY2soKTsNCiAgICArIAkJCWlmKHAgPT0gbmlsKQ0KICAgICsgCQkJCXJ1
bnRpbWVfdGhyb3coInJ1bnRpbWU6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGdvcm91dGlu
ZSBzdGFjayIpOw0KICAgICsgCQkJKnJldF9zdGFjayA9IChieXRlKilwOw0KICAgICstLSANCiAg
ICArMi4yMC4xDQogICAgKw0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KDQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:40:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:40:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlnf-0002gb-6v; Fri, 27 Sep 2019 08:40:27 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlne-0002gU-5O
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:40:26 +0000
X-Inumbo-ID: 7302bcae-e102-11e9-97fb-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 7302bcae-e102-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 08:40:25 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 8773210573C;
 Fri, 27 Sep 2019 10:40:24 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 5oni3K_hSb6B; Fri, 27 Sep 2019 10:40:24 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 553AA105739;
 Fri, 27 Sep 2019 10:40:24 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:40:23 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:40:23
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 06/11] Update config.h
Thread-Index: AQHVdH+fVztT1qcCjk2g58i6bUh5rKc/NWiA
Date: Fri, 27 Sep 2019 08:40:23 +0000
Message-ID: <6C693383-87A6-4599-B93B-E60AD251ECCA@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-7-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-7-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <B4512C1126CBF24AAC58BAD929B363EA@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 06/11] Update config.h
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBVcGRhdGUgY29u
ZmlnLmggdG8gZGVjcmVhc2Ugc3R1YnMuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogQ2hhcmFs
YW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAg
ICBnZW5lcmF0ZWQvaW5jbHVkZS9jb25maWcuaCB8IDE2ICsrKysrKysrLS0tLS0tLS0NCiAgICAg
MSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKSwgOCBkZWxldGlvbnMoLSkNCiAgICANCiAg
ICBkaWZmIC0tZ2l0IGEvZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmggYi9nZW5lcmF0ZWQvaW5j
bHVkZS9jb25maWcuaA0KICAgIGluZGV4IDdjNDczZjIuLmE3NmIzZDggMTAwNjQ0DQogICAgLS0t
IGEvZ2VuZXJhdGVkL2luY2x1ZGUvY29uZmlnLmgNCiAgICArKysgYi9nZW5lcmF0ZWQvaW5jbHVk
ZS9jb25maWcuaA0KICAgIEBAIC02Miw3ICs2Miw3IEBADQogICAgICNkZWZpbmUgSEFWRV9GQUxM
T0NBVEUgMQ0KICAgICANCiAgICAgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmY2ht
b2RhdCcgZnVuY3Rpb24uICovDQogICAgLSNkZWZpbmUgSEFWRV9GQ0hNT0RBVCAxDQogICAgKy8v
I2RlZmluZSBIQVZFX0ZDSE1PREFUIDENCiAgICAgDQogICAgIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgZmNob3duYXQnIGZ1bmN0aW9uLiAqLw0KICAgICAvLyNkZWZpbmUgSEFWRV9G
Q0hPV05BVCAxDQogICAgQEAgLTc3LDE2ICs3NywxNiBAQA0KICAgICAvLyNkZWZpbmUgSEFWRV9H
RVRYQVRUUiAxDQogICAgIA0KICAgICAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlu
b3RpZnlfYWRkX3dhdGNoJyBmdW5jdGlvbi4gKi8NCiAgICAtI2RlZmluZSBIQVZFX0lOT1RJRllf
QUREX1dBVENIIDENCiAgICArLy8jZGVmaW5lIEhBVkVfSU5PVElGWV9BRERfV0FUQ0ggMQ0KICAg
ICANCiAgICAgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbm90aWZ5X2luaXQnIGZ1
bmN0aW9uLiAqLw0KICAgIC0jZGVmaW5lIEhBVkVfSU5PVElGWV9JTklUIDENCiAgICArLy8jZGVm
aW5lIEhBVkVfSU5PVElGWV9JTklUIDENCiAgICAgDQogICAgIC8qIERlZmluZSB0byAxIGlmIHlv
dSBoYXZlIHRoZSBgaW5vdGlmeV9pbml0MScgZnVuY3Rpb24uICovDQogICAgLSNkZWZpbmUgSEFW
RV9JTk9USUZZX0lOSVQxIDENCiAgICArLy8jZGVmaW5lIEhBVkVfSU5PVElGWV9JTklUMSAxDQog
ICAgIA0KICAgICAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlub3RpZnlfcm1fd2F0
Y2gnIGZ1bmN0aW9uLiAqLw0KICAgIC0jZGVmaW5lIEhBVkVfSU5PVElGWV9STV9XQVRDSCAxDQog
ICAgKy8vI2RlZmluZSBIQVZFX0lOT1RJRllfUk1fV0FUQ0ggMQ0KICAgICANCiAgICAgLyogRGVm
aW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8NCiAg
ICAgI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQ0KICAgIEBAIC0xODUsNyArMTg1LDcgQEANCiAg
ICAgI2RlZmluZSBIQVZFX09GRjY0X1QgMQ0KICAgICANCiAgICAgLyogRGVmaW5lIHRvIDEgaWYg
eW91IGhhdmUgdGhlIGBvcGVuNjQnIGZ1bmN0aW9uLiAqLw0KICAgIC0jZGVmaW5lIEhBVkVfT1BF
TjY0IDENCiAgICArLy8jZGVmaW5lIEhBVkVfT1BFTjY0IDENCiAgICAgDQogICAgIC8qIERlZmlu
ZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgb3BlbmF0JyBmdW5jdGlvbi4gKi8NCiAgICAgI2RlZmlu
ZSBIQVZFX09QRU5BVCAxDQogICAgQEAgLTIxNSw3ICsyMTUsNyBAQA0KICAgICAjZGVmaW5lIEhB
VkVfU0VURU5WIDENCiAgICAgDQogICAgIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBg
c2V0eGF0dHInIGZ1bmN0aW9uLiAqLw0KICAgIC0jZGVmaW5lIEhBVkVfU0VUWEFUVFIgMQ0KICAg
ICsvLyNkZWZpbmUgSEFWRV9TRVRYQVRUUiAxDQogICAgIA0KICAgICAvKiBEZWZpbmUgdG8gMSBp
ZiB5b3UgaGF2ZSB0aGUgYHNpbmwnIGZ1bmN0aW9uLiAqLw0KICAgICAjZGVmaW5lIEhBVkVfU0lO
TCAxDQogICAgQEAgLTI2MSw3ICsyNjEsNyBAQA0KICAgICAjZGVmaW5lIEhBVkVfU1lOQ19GRVRD
SF9BTkRfQUREXzQgMQ0KICAgICANCiAgICAgLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhl
IGBzeW5jX2ZpbGVfcmFuZ2UnIGZ1bmN0aW9uLiAqLw0KICAgIC0jZGVmaW5lIEhBVkVfU1lOQ19G
SUxFX1JBTkdFIDENCiAgICArLy8jZGVmaW5lIEhBVkVfU1lOQ19GSUxFX1JBTkdFIDENCiAgICAg
DQogICAgIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzY2FsbC5oPiBoZWFkZXIg
ZmlsZS4gKi8NCiAgICAgI2RlZmluZSBIQVZFX1NZU0NBTExfSCAxDQogICAgLS0gDQogICAgMi4x
Ny4xDQogICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:40:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:40:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlo4-0002hW-9k; Fri, 27 Sep 2019 08:40:52 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlo2-0002hR-Pc
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:40:50 +0000
X-Inumbo-ID: 81137dd8-e102-11e9-8628-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 81137dd8-e102-11e9-8628-bc764e2007e4;
 Fri, 27 Sep 2019 08:40:48 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2204BF200A;
 Fri, 27 Sep 2019 10:40:48 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id bP594pfb9OMu; Fri, 27 Sep 2019 10:40:47 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id E38EBF2006;
 Fri, 27 Sep 2019 10:40:43 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:40:43 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:40:43
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 07/11] Update libcalls.go
Thread-Index: AQHVdH+fFg2DQqPHlEqHM7yNiceXeac/NYCA
Date: Fri, 27 Sep 2019 08:40:43 +0000
Message-ID: <3F01F9FF-B129-4584-A530-151D6997D6F7@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-8-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-8-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <F4BB0F567FCA984BBD5CBA124171BEC4@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 07/11] Update libcalls.go
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBVcGRhdGUgbGli
Y2FsbHMuZ28gdG8gZGVjcmVhc2Ugc3R1YnMuIFRoaXMgcGF0Y2ggcmVtb3ZlcyB3cmFwcGVycyBm
b3INCiAgICBzeXN0ZW0gY2FsbHMgdGhhdCBhcmUgbm90IHVzZWQgZnJvbSBsaWJnbyBhbmQgdGhl
eSBhcmUgbm90IGltcGxlbWVudGVkDQogICAgb24gVW5pa3JhZnQuDQogICAgDQogICAgU2lnbmVk
LW9mZi1ieTogQ2hhcmFsYW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1
Pg0KICAgIC0tLQ0KICAgICBnZW5lcmF0ZWQvbGliY2FsbHMuZ28gfCA0OTcgKysrKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgIDEgZmlsZSBjaGFuZ2VkLCA0OCBp
bnNlcnRpb25zKCspLCA0NDkgZGVsZXRpb25zKC0pDQogICAgDQogICAgZGlmZiAtLWdpdCBhL2dl
bmVyYXRlZC9saWJjYWxscy5nbyBiL2dlbmVyYXRlZC9saWJjYWxscy5nbw0KICAgIGluZGV4IDU1
NjU2NDEuLjAxMmZlZGMgMTAwNjQ0DQogICAgLS0tIGEvZ2VuZXJhdGVkL2xpYmNhbGxzLmdvDQog
ICAgKysrIGIvZ2VuZXJhdGVkL2xpYmNhbGxzLmdvDQogICAgQEAgLTQyNiw0OSArNDI2LDYgQEAg
ZnVuYyBhY2NlcHQ0KGZkIGludCwgc2EgKlJhd1NvY2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCwg
ZmxhZ3MgaW50KSAobmZkIGludCwgZXINCiAgICAgCXJldHVybg0KICAgICB9DQogICAgIA0KICAg
IC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBBY2N0L2FjY3QNCiAgICAt
Ly9leHRlcm4gYWNjdA0KICAgIC1mdW5jIGNfYWNjdChwYXRoICpieXRlKSBfQ19pbnQNCiAgICAt
ZnVuYyBBY2N0KHBhdGggc3RyaW5nKSAoZXJyIGVycm9yKSB7DQogICAgLQl2YXIgX3AxICpieXRl
DQogICAgLQlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpDQogICAgLQlpZiBlcnIg
IT0gbmlsIHsNCiAgICAtCQlyZXR1cm4NCiAgICAtCX0NCiAgICAtCUVudGVyc3lzY2FsbCgpDQog
ICAgLQlfciA6PSBjX2FjY3QoX3AxKQ0KICAgIC0JdmFyIGVycm5vIEVycm5vDQogICAgLQlzZXRF
cnJubyA6PSBmYWxzZQ0KICAgIC0JaWYgX3IgPCAwIHsNCiAgICAtCQllcnJubyA9IEdldEVycm5v
KCkNCiAgICAtCQlzZXRFcnJubyA9IHRydWUNCiAgICAtCX0NCiAgICAtCUV4aXRzeXNjYWxsKCkN
CiAgICAtCWlmIHNldEVycm5vIHsNCiAgICAtCQllcnIgPSBlcnJubw0KICAgIC0JfQ0KICAgIC0J
cmV0dXJuDQogICAgLX0NCiAgICAtDQogICAgLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIEFkanRpbWV4L2FkanRpbWV4DQogICAgLS8vZXh0ZXJuIGFkanRpbWV4DQogICAg
LWZ1bmMgY19hZGp0aW1leChidWYgKlRpbWV4KSBfQ19pbnQNCiAgICAtZnVuYyBBZGp0aW1leChi
dWYgKlRpbWV4KSAoc3RhdGUgaW50LCBlcnIgZXJyb3IpIHsNCiAgICAtCUVudGVyc3lzY2FsbCgp
DQogICAgLQlfciA6PSBjX2FkanRpbWV4KGJ1ZikNCiAgICAtCXN0YXRlID0gKGludCkoX3IpDQog
ICAgLQl2YXIgZXJybm8gRXJybm8NCiAgICAtCXNldEVycm5vIDo9IGZhbHNlDQogICAgLQlpZiBf
ciA8IDAgew0KICAgIC0JCWVycm5vID0gR2V0RXJybm8oKQ0KICAgIC0JCXNldEVycm5vID0gdHJ1
ZQ0KICAgIC0JfQ0KICAgIC0JRXhpdHN5c2NhbGwoKQ0KICAgIC0JaWYgc2V0RXJybm8gew0KICAg
IC0JCWVyciA9IGVycm5vDQogICAgLQl9DQogICAgLQlyZXR1cm4NCiAgICAtfQ0KICAgICANCiAg
ICAgLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRHVwMy9kdXAzDQogICAg
IC8vZXh0ZXJuIGR1cDMNCiAgICBAQCAtNzMxLDMxICs2ODgsNiBAQCBmdW5jIElub3RpZnlSbVdh
dGNoKGZkIGludCwgd2F0Y2hkZXNjIHVpbnQzMikgKHN1Y2Nlc3MgaW50LCBlcnIgZXJyb3IpIHsN
CiAgICAgCXJldHVybg0KICAgICB9DQogICAgIA0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBLbG9nY3RsL2tsb2djdGwNCiAgICAtLy9leHRlcm4ga2xvZ2N0bA0K
ICAgIC1mdW5jIGNfa2xvZ2N0bCh0eXAgX0NfaW50LCBidWZwICpieXRlLCBsZW4gX0NfaW50KSBf
Q19pbnQNCiAgICAtZnVuYyBLbG9nY3RsKHR5cCBpbnQsIGJ1ZiBbXWJ5dGUpIChuIGludCwgZXJy
IGVycm9yKSB7DQogICAgLQl2YXIgX3AyICpieXRlDQogICAgLQlpZiBsZW4oYnVmKSA+IDAgew0K
ICAgIC0JCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJmJ1ZlswXSkpDQogICAgLQl9IGVs
c2Ugew0KICAgIC0JCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICAt
CX0NCiAgICAtCUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX2tsb2djdGwoX0NfaW50KHR5
cCksIF9wMiwgX0NfaW50KGxlbihidWYpKSkNCiAgICAtCW4gPSAoaW50KShfcikNCiAgICAtCXZh
ciBlcnJubyBFcnJubw0KICAgIC0Jc2V0RXJybm8gOj0gZmFsc2UNCiAgICAtCWlmIF9yIDwgMCB7
DQogICAgLQkJZXJybm8gPSBHZXRFcnJubygpDQogICAgLQkJc2V0RXJybm8gPSB0cnVlDQogICAg
LQl9DQogICAgLQlFeGl0c3lzY2FsbCgpDQogICAgLQlpZiBzZXRFcnJubyB7DQogICAgLQkJZXJy
ID0gZXJybm8NCiAgICAtCX0NCiAgICAtCXJldHVybg0KICAgIC19DQogICAgIA0KICAgICAvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBMaXN0eGF0dHIvbGlzdHhhdHRyDQog
ICAgIC8vZXh0ZXJuIGxpc3R4YXR0cg0KICAgIEBAIC04NTMsMzQgKzc4NSw2IEBAIGZ1bmMgcGlw
ZTIocCAqWzJdX0NfaW50LCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICAgCXJldHVybg0K
ICAgICB9DQogICAgIA0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBQaXZvdFJvb3QvcGl2b3Rfcm9vdA0KICAgIC0vL2V4dGVybiBwaXZvdF9yb290DQogICAgLWZ1
bmMgY19waXZvdF9yb290KG5ld3Jvb3QgKmJ5dGUsIHB1dG9sZCAqYnl0ZSkgX0NfaW50DQogICAg
LWZ1bmMgUGl2b3RSb290KG5ld3Jvb3Qgc3RyaW5nLCBwdXRvbGQgc3RyaW5nKSAoZXJyIGVycm9y
KSB7DQogICAgLQl2YXIgX3AxICpieXRlDQogICAgLQlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3Ry
aW5nKG5ld3Jvb3QpDQogICAgLQlpZiBlcnIgIT0gbmlsIHsNCiAgICAtCQlyZXR1cm4NCiAgICAt
CX0NCiAgICAtCXZhciBfcDIgKmJ5dGUNCiAgICAtCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJp
bmcocHV0b2xkKQ0KICAgIC0JaWYgZXJyICE9IG5pbCB7DQogICAgLQkJcmV0dXJuDQogICAgLQl9
DQogICAgLQlFbnRlcnN5c2NhbGwoKQ0KICAgIC0JX3IgOj0gY19waXZvdF9yb290KF9wMSwgX3Ay
KQ0KICAgIC0JdmFyIGVycm5vIEVycm5vDQogICAgLQlzZXRFcnJubyA6PSBmYWxzZQ0KICAgIC0J
aWYgX3IgPCAwIHsNCiAgICAtCQllcnJubyA9IEdldEVycm5vKCkNCiAgICAtCQlzZXRFcnJubyA9
IHRydWUNCiAgICAtCX0NCiAgICAtCUV4aXRzeXNjYWxsKCkNCiAgICAtCWlmIHNldEVycm5vIHsN
CiAgICAtCQllcnIgPSBlcnJubw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuDQogICAgLX0NCiAgICAg
DQogICAgIC8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFJlbW92ZXhhdHRy
L3JlbW92ZXhhdHRyDQogICAgIC8vZXh0ZXJuIHJlbW92ZXhhdHRyDQogICAgQEAgLTk2MCw2MSAr
ODY0LDYgQEAgZnVuYyBzZW5kZmlsZShvdXRmZCBpbnQsIGluZmQgaW50LCBvZmZzZXQgKk9mZnNl
dF90LCBjb3VudCBpbnQpICh3cml0dGVuIGludCwgZXINCiAgICAgCXJldHVybg0KICAgICB9DQog
ICAgIA0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRmc2dp
ZC9zZXRmc2dpZA0KICAgIC0vL2V4dGVybiBzZXRmc2dpZA0KICAgIC1mdW5jIGNfc2V0ZnNnaWQo
Z2lkIEdpZF90KSBfQ19pbnQNCiAgICAtZnVuYyBTZXRmc2dpZChnaWQgaW50KSAoZXJyIGVycm9y
KSB7DQogICAgLQlFbnRlcnN5c2NhbGwoKQ0KICAgIC0JX3IgOj0gY19zZXRmc2dpZChHaWRfdChn
aWQpKQ0KICAgIC0JdmFyIGVycm5vIEVycm5vDQogICAgLQlzZXRFcnJubyA6PSBmYWxzZQ0KICAg
IC0JaWYgX3IgPCAwIHsNCiAgICAtCQllcnJubyA9IEdldEVycm5vKCkNCiAgICAtCQlzZXRFcnJu
byA9IHRydWUNCiAgICAtCX0NCiAgICAtCUV4aXRzeXNjYWxsKCkNCiAgICAtCWlmIHNldEVycm5v
IHsNCiAgICAtCQllcnIgPSBlcnJubw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuDQogICAgLX0NCiAg
ICAtDQogICAgLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldGZzdWlk
L3NldGZzdWlkDQogICAgLS8vZXh0ZXJuIHNldGZzdWlkDQogICAgLWZ1bmMgY19zZXRmc3VpZCh1
aWQgVWlkX3QpIF9DX2ludA0KICAgIC1mdW5jIFNldGZzdWlkKHVpZCBpbnQpIChlcnIgZXJyb3Ip
IHsNCiAgICAtCUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX3NldGZzdWlkKFVpZF90KHVp
ZCkpDQogICAgLQl2YXIgZXJybm8gRXJybm8NCiAgICAtCXNldEVycm5vIDo9IGZhbHNlDQogICAg
LQlpZiBfciA8IDAgew0KICAgIC0JCWVycm5vID0gR2V0RXJybm8oKQ0KICAgIC0JCXNldEVycm5v
ID0gdHJ1ZQ0KICAgIC0JfQ0KICAgIC0JRXhpdHN5c2NhbGwoKQ0KICAgIC0JaWYgc2V0RXJybm8g
ew0KICAgIC0JCWVyciA9IGVycm5vDQogICAgLQl9DQogICAgLQlyZXR1cm4NCiAgICAtfQ0KICAg
IC0NCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmVzZ2lk
L3NldHJlc2dpZA0KICAgIC0vL2V4dGVybiBzZXRyZXNnaWQNCiAgICAtZnVuYyBjX3NldHJlc2dp
ZChyZ2lkIEdpZF90LCBlZ2lkIEdpZF90LCBzZ2lkIEdpZF90KSBfQ19pbnQNCiAgICAtZnVuYyBT
ZXRyZXNnaWQocmdpZCBpbnQsIGVnaWQgaW50LCBzZ2lkIGludCkgKGVyciBlcnJvcikgew0KICAg
IC0JX3IgOj0gY19zZXRyZXNnaWQoR2lkX3QocmdpZCksIEdpZF90KGVnaWQpLCBHaWRfdChzZ2lk
KSkNCiAgICAtCXZhciBlcnJubyBFcnJubw0KICAgIC0Jc2V0RXJybm8gOj0gZmFsc2UNCiAgICAt
CWlmIF9yIDwgMCB7DQogICAgLQkJZXJybm8gPSBHZXRFcnJubygpDQogICAgLQkJc2V0RXJybm8g
PSB0cnVlDQogICAgLQl9DQogICAgLQlpZiBzZXRFcnJubyB7DQogICAgLQkJZXJyID0gZXJybm8N
CiAgICAtCX0NCiAgICAtCXJldHVybg0KICAgIC19DQogICAgLQ0KICAgICAvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRyZXN1aWQvc2V0cmVzdWlkDQogICAgIC8vZXh0
ZXJuIHNldHJlc3VpZA0KICAgICBmdW5jIGNfc2V0cmVzdWlkKHJ1aWQgVWlkX3QsIGV1aWQgVWlk
X3QsIHN1aWQgVWlkX3QpIF9DX2ludA0KICAgIEBAIC0xMTMwLDIzICs5NzksNiBAQCBmdW5jIFN5
bmNGaWxlUmFuZ2UoZmQgaW50LCBvZmYgaW50NjQsIG4gaW50NjQsIGZsYWdzIGludCkgKGVyciBl
cnJvcikgew0KICAgICAJcmV0dXJuDQogICAgIH0NCiAgICAgDQogICAgLS8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFN5c2luZm8vc3lzaW5mbw0KICAgIC0vL2V4dGVybiBz
eXNpbmZvDQogICAgLWZ1bmMgY19zeXNpbmZvKGluZm8gKlN5c2luZm9fdCkgX0NfaW50DQogICAg
LWZ1bmMgU3lzaW5mbyhpbmZvICpTeXNpbmZvX3QpIChlcnIgZXJyb3IpIHsNCiAgICAtCV9yIDo9
IGNfc3lzaW5mbyhpbmZvKQ0KICAgIC0JdmFyIGVycm5vIEVycm5vDQogICAgLQlzZXRFcnJubyA6
PSBmYWxzZQ0KICAgIC0JaWYgX3IgPCAwIHsNCiAgICAtCQllcnJubyA9IEdldEVycm5vKCkNCiAg
ICAtCQlzZXRFcnJubyA9IHRydWUNCiAgICAtCX0NCiAgICAtCWlmIHNldEVycm5vIHsNCiAgICAt
CQllcnIgPSBlcnJubw0KICAgIC0JfQ0KICAgIC0JcmV0dXJuDQogICAgLX0NCiAgICAtDQogICAg
IC8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFRlZS90ZWUNCiAgICAgLy9l
eHRlcm4gdGVlDQogICAgIGZ1bmMgY190ZWUocmZkIF9DX2ludCwgd2ZkIF9DX2ludCwgbGVuIFNp
emVfdCwgZmxhZ3MgX0NfdWludCkgU3NpemVfdA0KICAgIEBAIC0xMjM0LDYzICsxMDY2LDYgQEAg
ZnVuYyBVbnNoYXJlKGZsYWdzIGludCkgKGVyciBlcnJvcikgew0KICAgICAJcmV0dXJuDQogICAg
IH0NCiAgICAgDQogICAgLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIElv
cGVybS9pb3Blcm0NCiAgICAtLy9leHRlcm4gaW9wZXJtDQogICAgLWZ1bmMgY19pb3Blcm0oZnJv
bSBfQ19sb25nLCBudW0gX0NfbG9uZywgb24gX0NfaW50KSBfQ19pbnQNCiAgICAtZnVuYyBJb3Bl
cm0oZnJvbSBpbnQsIG51bSBpbnQsIG9uIGludCkgKGVyciBlcnJvcikgew0KICAgIC0JRW50ZXJz
eXNjYWxsKCkNCiAgICAtCV9yIDo9IGNfaW9wZXJtKF9DX2xvbmcoZnJvbSksIF9DX2xvbmcobnVt
KSwgX0NfaW50KG9uKSkNCiAgICAtCXZhciBlcnJubyBFcnJubw0KICAgIC0Jc2V0RXJybm8gOj0g
ZmFsc2UNCiAgICAtCWlmIF9yIDwgMCB7DQogICAgLQkJZXJybm8gPSBHZXRFcnJubygpDQogICAg
LQkJc2V0RXJybm8gPSB0cnVlDQogICAgLQl9DQogICAgLQlFeGl0c3lzY2FsbCgpDQogICAgLQlp
ZiBzZXRFcnJubyB7DQogICAgLQkJZXJyID0gZXJybm8NCiAgICAtCX0NCiAgICAtCXJldHVybg0K
ICAgIC19DQogICAgLQ0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBJb3BsL2lvcGwNCiAgICAtLy9leHRlcm4gaW9wbA0KICAgIC1mdW5jIGNfaW9wbChsZXZlbCBf
Q19pbnQpIF9DX2ludA0KICAgIC1mdW5jIElvcGwobGV2ZWwgaW50KSAoZXJyIGVycm9yKSB7DQog
ICAgLQlFbnRlcnN5c2NhbGwoKQ0KICAgIC0JX3IgOj0gY19pb3BsKF9DX2ludChsZXZlbCkpDQog
ICAgLQl2YXIgZXJybm8gRXJybm8NCiAgICAtCXNldEVycm5vIDo9IGZhbHNlDQogICAgLQlpZiBf
ciA8IDAgew0KICAgIC0JCWVycm5vID0gR2V0RXJybm8oKQ0KICAgIC0JCXNldEVycm5vID0gdHJ1
ZQ0KICAgIC0JfQ0KICAgIC0JRXhpdHN5c2NhbGwoKQ0KICAgIC0JaWYgc2V0RXJybm8gew0KICAg
IC0JCWVyciA9IGVycm5vDQogICAgLQl9DQogICAgLQlyZXR1cm4NCiAgICAtfQ0KICAgIC0NCiAg
ICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVXN0YXQvdXN0YXQNCiAg
ICAtLy9leHRlcm4gdXN0YXQNCiAgICAtZnVuYyBjX3VzdGF0KGRldiBfZGV2X3QsIHVidWYgKlVz
dGF0X3QpIF9DX2ludA0KICAgIC1mdW5jIFVzdGF0KGRldiBpbnQsIHVidWYgKlVzdGF0X3QpIChl
cnIgZXJyb3IpIHsNCiAgICAtCUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX3VzdGF0KF9k
ZXZfdChkZXYpLCB1YnVmKQ0KICAgIC0JdmFyIGVycm5vIEVycm5vDQogICAgLQlzZXRFcnJubyA6
PSBmYWxzZQ0KICAgIC0JaWYgX3IgPCAwIHsNCiAgICAtCQllcnJubyA9IEdldEVycm5vKCkNCiAg
ICAtCQlzZXRFcnJubyA9IHRydWUNCiAgICAtCX0NCiAgICAtCUV4aXRzeXNjYWxsKCkNCiAgICAt
CWlmIHNldEVycm5vIHsNCiAgICAtCQllcnIgPSBlcnJubw0KICAgIC0JfQ0KICAgIC0JcmV0dXJu
DQogICAgLX0NCiAgICAtDQogICAgIC8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIHV0aW1lbnNhdC91dGltZW5zYXQNCiAgICAgLy9leHRlcm4gdXRpbWVuc2F0DQogICAgIGZ1
bmMgY191dGltZW5zYXQoZGlyZmQgX0NfaW50LCBwYXRoICpieXRlLCB0aW1lcyAqWzJdVGltZXNw
ZWMsIGZsYWdzIF9DX2ludCkgX0NfaW50DQogICAgQEAgLTE0MDgsMzAgKzExODMsNiBAQCBmdW5j
IHNldGdyb3VwcyhuIGludCwgbGlzdCAqR2lkX3QpIChlcnIgZXJyb3IpIHsNCiAgICAgCXJldHVy
bg0KICAgICB9DQogICAgIA0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBNa2ZpZm8vbWtmaWZvDQogICAgLS8vZXh0ZXJuIG1rZmlmbw0KICAgIC1mdW5jIGNfbWtm
aWZvKHBhdGggKmJ5dGUsIG1vZGUgTW9kZV90KSBfQ19pbnQNCiAgICAtZnVuYyBNa2ZpZm8ocGF0
aCBzdHJpbmcsIG1vZGUgdWludDMyKSAoZXJyIGVycm9yKSB7DQogICAgLQl2YXIgX3AxICpieXRl
DQogICAgLQlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpDQogICAgLQlpZiBlcnIg
IT0gbmlsIHsNCiAgICAtCQlyZXR1cm4NCiAgICAtCX0NCiAgICAtCUVudGVyc3lzY2FsbCgpDQog
ICAgLQlfciA6PSBjX21rZmlmbyhfcDEsIE1vZGVfdChtb2RlKSkNCiAgICAtCXZhciBlcnJubyBF
cnJubw0KICAgIC0Jc2V0RXJybm8gOj0gZmFsc2UNCiAgICAtCWlmIF9yIDwgMCB7DQogICAgLQkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgLQkJc2V0RXJybm8gPSB0cnVlDQogICAgLQl9DQogICAg
LQlFeGl0c3lzY2FsbCgpDQogICAgLQlpZiBzZXRFcnJubyB7DQogICAgLQkJZXJyID0gZXJybm8N
CiAgICAtCX0NCiAgICAtCXJldHVybg0KICAgIC19DQogICAgLQ0KICAgICAvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZWxlY3Qvc2VsZWN0DQogICAgIC8vZXh0ZXJuIHNl
bGVjdA0KICAgICBmdW5jIGNfc2VsZWN0KG5mZCBfQ19pbnQsIHIgKkZkU2V0LCB3ICpGZFNldCwg
ZSAqRmRTZXQsIHRpbWVvdXQgKlRpbWV2YWwpIF9DX2ludA0KICAgIEBAIC0xODUyLDI2ICsxNjAz
LDYgQEAgZnVuYyBHZXRwcGlkKCkgKHBwaWQgaW50KSB7DQogICAgIAlyZXR1cm4NCiAgICAgfQ0K
ICAgICANCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cHJp
b3JpdHkvZ2V0cHJpb3JpdHkNCiAgICAtLy9leHRlcm4gZ2V0cHJpb3JpdHkNCiAgICAtZnVuYyBj
X2dldHByaW9yaXR5KHdoaWNoIF9DX2ludCwgd2hvIF9DX2ludCkgX0NfaW50DQogICAgLWZ1bmMg
R2V0cHJpb3JpdHkod2hpY2ggaW50LCB3aG8gaW50KSAocHJpbyBpbnQsIGVyciBlcnJvcikgew0K
ICAgIC0JRW50ZXJzeXNjYWxsKCkNCiAgICAtCV9yIDo9IGNfZ2V0cHJpb3JpdHkoX0NfaW50KHdo
aWNoKSwgX0NfaW50KHdobykpDQogICAgLQlwcmlvID0gKGludCkoX3IpDQogICAgLQl2YXIgZXJy
bm8gRXJybm8NCiAgICAtCXNldEVycm5vIDo9IGZhbHNlDQogICAgLQlpZiBfciA8IDAgew0KICAg
IC0JCWVycm5vID0gR2V0RXJybm8oKQ0KICAgIC0JCXNldEVycm5vID0gdHJ1ZQ0KICAgIC0JfQ0K
ICAgIC0JRXhpdHN5c2NhbGwoKQ0KICAgIC0JaWYgc2V0RXJybm8gew0KICAgIC0JCWVyciA9IGVy
cm5vDQogICAgLQl9DQogICAgLQlyZXR1cm4NCiAgICAtfQ0KICAgIC0NCiAgICAgLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cnVzYWdlL2dldHJ1c2FnZQ0KICAgICAv
L2V4dGVybiBnZXRydXNhZ2UNCiAgICAgZnVuYyBjX2dldHJ1c2FnZSh3aG8gX0NfaW50LCBydXNh
Z2UgKlJ1c2FnZSkgX0NfaW50DQogICAgQEAgLTIyMzYsMzEgKzE5NjcsNiBAQCBmdW5jIFJtZGly
KHBhdGggc3RyaW5nKSAoZXJyIGVycm9yKSB7DQogICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICAN
CiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0ZG9tYWlubmFt
ZS9zZXRkb21haW5uYW1lDQogICAgLS8vZXh0ZXJuIHNldGRvbWFpbm5hbWUNCiAgICAtZnVuYyBj
X3NldGRvbWFpbm5hbWUobmFtZSAqYnl0ZSwgbGVuIFNpemVfdCkgX0NfaW50DQogICAgLWZ1bmMg
U2V0ZG9tYWlubmFtZShwIFtdYnl0ZSkgKGVyciBlcnJvcikgew0KICAgIC0JdmFyIF9wMSAqYnl0
ZQ0KICAgIC0JaWYgbGVuKHApID4gMCB7DQogICAgLQkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9p
bnRlcigmcFswXSkpDQogICAgLQl9IGVsc2Ugew0KICAgIC0JCV9wMSA9ICgqYnl0ZSkodW5zYWZl
LlBvaW50ZXIoJl96ZXJvKSkNCiAgICAtCX0NCiAgICAtCUVudGVyc3lzY2FsbCgpDQogICAgLQlf
ciA6PSBjX3NldGRvbWFpbm5hbWUoX3AxLCBTaXplX3QobGVuKHApKSkNCiAgICAtCXZhciBlcnJu
byBFcnJubw0KICAgIC0Jc2V0RXJybm8gOj0gZmFsc2UNCiAgICAtCWlmIF9yIDwgMCB7DQogICAg
LQkJZXJybm8gPSBHZXRFcnJubygpDQogICAgLQkJc2V0RXJybm8gPSB0cnVlDQogICAgLQl9DQog
ICAgLQlFeGl0c3lzY2FsbCgpDQogICAgLQlpZiBzZXRFcnJubyB7DQogICAgLQkJZXJyID0gZXJy
bm8NCiAgICAtCX0NCiAgICAtCXJldHVybg0KICAgIC19DQogICAgLQ0KICAgICAvLyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRob3N0bmFtZS9zZXRob3N0bmFtZQ0KICAg
ICAvL2V4dGVybiBzZXRob3N0bmFtZQ0KICAgICBmdW5jIGNfc2V0aG9zdG5hbWUobmFtZSAqYnl0
ZSwgbGVuIFNpemVfdCkgX0NfaW50DQogICAgQEAgLTIzMzUsMjUgKzIwNDEsNiBAQCBmdW5jIFNl
dHBnaWQocGlkIGludCwgcGdpZCBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICAgCXJldHVybg0KICAg
ICB9DQogICAgIA0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBT
ZXRwcmlvcml0eS9zZXRwcmlvcml0eQ0KICAgIC0vL2V4dGVybiBzZXRwcmlvcml0eQ0KICAgIC1m
dW5jIGNfc2V0cHJpb3JpdHkod2hpY2ggX0NfaW50LCB3aG8gX0NfaW50LCBwcmlvIF9DX2ludCkg
X0NfaW50DQogICAgLWZ1bmMgU2V0cHJpb3JpdHkod2hpY2ggaW50LCB3aG8gaW50LCBwcmlvIGlu
dCkgKGVyciBlcnJvcikgew0KICAgIC0JRW50ZXJzeXNjYWxsKCkNCiAgICAtCV9yIDo9IGNfc2V0
cHJpb3JpdHkoX0NfaW50KHdoaWNoKSwgX0NfaW50KHdobyksIF9DX2ludChwcmlvKSkNCiAgICAt
CXZhciBlcnJubyBFcnJubw0KICAgIC0Jc2V0RXJybm8gOj0gZmFsc2UNCiAgICAtCWlmIF9yIDwg
MCB7DQogICAgLQkJZXJybm8gPSBHZXRFcnJubygpDQogICAgLQkJc2V0RXJybm8gPSB0cnVlDQog
ICAgLQl9DQogICAgLQlFeGl0c3lzY2FsbCgpDQogICAgLQlpZiBzZXRFcnJubyB7DQogICAgLQkJ
ZXJyID0gZXJybm8NCiAgICAtCX0NCiAgICAtCXJldHVybg0KICAgIC19DQogICAgLQ0KICAgICAv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRyZXVpZC9zZXRyZXVpZA0K
ICAgICAvL2V4dGVybiBzZXRyZXVpZA0KICAgICBmdW5jIGNfc2V0cmV1aWQocnVpZCBVaWRfdCwg
ZXVpZCBVaWRfdCkgX0NfaW50DQogICAgQEAgLTI2NjMsOTQgKzIzNTAsNiBAQCBmdW5jIE1wcm90
ZWN0KGIgW11ieXRlLCBwcm90IGludCkgKGVyciBlcnJvcikgew0KICAgICAJcmV0dXJuDQogICAg
IH0NCiAgICAgDQogICAgLS8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE1s
b2NrL21sb2NrDQogICAgLS8vZXh0ZXJuIG1sb2NrDQogICAgLWZ1bmMgY19tbG9jayhhZGRyICpi
eXRlLCBsZW4gU2l6ZV90KSBfQ19pbnQNCiAgICAtZnVuYyBNbG9jayhiIFtdYnl0ZSkgKGVyciBl
cnJvcikgew0KICAgIC0JdmFyIF9wMSAqYnl0ZQ0KICAgIC0JaWYgbGVuKGIpID4gMCB7DQogICAg
LQkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkpDQogICAgLQl9IGVsc2Ugew0K
ICAgIC0JCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICAtCX0NCiAg
ICAtCUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX21sb2NrKF9wMSwgU2l6ZV90KGxlbihi
KSkpDQogICAgLQl2YXIgZXJybm8gRXJybm8NCiAgICAtCXNldEVycm5vIDo9IGZhbHNlDQogICAg
LQlpZiBfciA8IDAgew0KICAgIC0JCWVycm5vID0gR2V0RXJybm8oKQ0KICAgIC0JCXNldEVycm5v
ID0gdHJ1ZQ0KICAgIC0JfQ0KICAgIC0JRXhpdHN5c2NhbGwoKQ0KICAgIC0JaWYgc2V0RXJybm8g
ew0KICAgIC0JCWVyciA9IGVycm5vDQogICAgLQl9DQogICAgLQlyZXR1cm4NCiAgICAtfQ0KICAg
IC0NCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTXVubG9jay9t
dW5sb2NrDQogICAgLS8vZXh0ZXJuIG11bmxvY2sNCiAgICAtZnVuYyBjX211bmxvY2soYWRkciAq
Ynl0ZSwgbGVuIFNpemVfdCkgX0NfaW50DQogICAgLWZ1bmMgTXVubG9jayhiIFtdYnl0ZSkgKGVy
ciBlcnJvcikgew0KICAgIC0JdmFyIF9wMSAqYnl0ZQ0KICAgIC0JaWYgbGVuKGIpID4gMCB7DQog
ICAgLQkJX3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkpDQogICAgLQl9IGVsc2Ug
ew0KICAgIC0JCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICAtCX0N
CiAgICAtCUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX211bmxvY2soX3AxLCBTaXplX3Qo
bGVuKGIpKSkNCiAgICAtCXZhciBlcnJubyBFcnJubw0KICAgIC0Jc2V0RXJybm8gOj0gZmFsc2UN
CiAgICAtCWlmIF9yIDwgMCB7DQogICAgLQkJZXJybm8gPSBHZXRFcnJubygpDQogICAgLQkJc2V0
RXJybm8gPSB0cnVlDQogICAgLQl9DQogICAgLQlFeGl0c3lzY2FsbCgpDQogICAgLQlpZiBzZXRF
cnJubyB7DQogICAgLQkJZXJyID0gZXJybm8NCiAgICAtCX0NCiAgICAtCXJldHVybg0KICAgIC19
DQogICAgLQ0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNbG9j
a2FsbC9tbG9ja2FsbA0KICAgIC0vL2V4dGVybiBtbG9ja2FsbA0KICAgIC1mdW5jIGNfbWxvY2th
bGwoZmxhZ3MgX0NfaW50KSBfQ19pbnQNCiAgICAtZnVuYyBNbG9ja2FsbChmbGFncyBpbnQpIChl
cnIgZXJyb3IpIHsNCiAgICAtCUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX21sb2NrYWxs
KF9DX2ludChmbGFncykpDQogICAgLQl2YXIgZXJybm8gRXJybm8NCiAgICAtCXNldEVycm5vIDo9
IGZhbHNlDQogICAgLQlpZiBfciA8IDAgew0KICAgIC0JCWVycm5vID0gR2V0RXJybm8oKQ0KICAg
IC0JCXNldEVycm5vID0gdHJ1ZQ0KICAgIC0JfQ0KICAgIC0JRXhpdHN5c2NhbGwoKQ0KICAgIC0J
aWYgc2V0RXJybm8gew0KICAgIC0JCWVyciA9IGVycm5vDQogICAgLQl9DQogICAgLQlyZXR1cm4N
CiAgICAtfQ0KICAgIC0NCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgTXVubG9ja2FsbC9tdW5sb2NrYWxsDQogICAgLS8vZXh0ZXJuIG11bmxvY2thbGwNCiAgICAt
ZnVuYyBjX211bmxvY2thbGwoKSBfQ19pbnQNCiAgICAtZnVuYyBNdW5sb2NrYWxsKCkgKGVyciBl
cnJvcikgew0KICAgIC0JRW50ZXJzeXNjYWxsKCkNCiAgICAtCV9yIDo9IGNfbXVubG9ja2FsbCgp
DQogICAgLQl2YXIgZXJybm8gRXJybm8NCiAgICAtCXNldEVycm5vIDo9IGZhbHNlDQogICAgLQlp
ZiBfciA8IDAgew0KICAgIC0JCWVycm5vID0gR2V0RXJybm8oKQ0KICAgIC0JCXNldEVycm5vID0g
dHJ1ZQ0KICAgIC0JfQ0KICAgIC0JRXhpdHN5c2NhbGwoKQ0KICAgIC0JaWYgc2V0RXJybm8gew0K
ICAgIC0JCWVyciA9IGVycm5vDQogICAgLQl9DQogICAgLQlyZXR1cm4NCiAgICAtfQ0KICAgIC0N
CiAgICAgLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVGNnZXRhdHRyL3Rj
Z2V0YXR0cg0KICAgICAvL2V4dGVybiB0Y2dldGF0dHINCiAgICAgZnVuYyBjX3RjZ2V0YXR0cihm
ZCBfQ19pbnQsIHAgKlRlcm1pb3MpIF9DX2ludA0KICAgIEBAIC0yODA3LDEyICsyNDA2LDEyIEBA
IGZ1bmMgc3lzY29uZihuYW1lIGludCkgKHJldCBpbnQ2NCwgZXJyIGVycm9yKSB7DQogICAgIAly
ZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgRnN0YXQvZnN0YXQ2NA0KICAgIC0vL2V4dGVybiBmc3RhdDY0DQogICAgLWZ1bmMg
Y19mc3RhdDY0KGZkIF9DX2ludCwgc3RhdCAqU3RhdF90KSBfQ19pbnQNCiAgICArLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRnN0YXQvZnN0YXQNCiAgICArLy9leHRlcm4g
ZnN0YXQNCiAgICArZnVuYyBjX2ZzdGF0KGZkIF9DX2ludCwgc3RhdCAqU3RhdF90KSBfQ19pbnQN
CiAgICAgZnVuYyBGc3RhdChmZCBpbnQsIHN0YXQgKlN0YXRfdCkgKGVyciBlcnJvcikgew0KICAg
ICAJRW50ZXJzeXNjYWxsKCkNCiAgICAtCV9yIDo9IGNfZnN0YXQ2NChfQ19pbnQoZmQpLCBzdGF0
KQ0KICAgICsJX3IgOj0gY19mc3RhdChfQ19pbnQoZmQpLCBzdGF0KQ0KICAgICAJdmFyIGVycm5v
IEVycm5vDQogICAgIAlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICAJaWYgX3IgPCAwIHsNCiAgICBA
QCAtMjgyNiwxMiArMjQyNSwxMiBAQCBmdW5jIEZzdGF0KGZkIGludCwgc3RhdCAqU3RhdF90KSAo
ZXJyIGVycm9yKSB7DQogICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8gQXV0b21h
dGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRnRydW5jYXRlL2Z0cnVuY2F0ZTY0DQogICAg
LS8vZXh0ZXJuIGZ0cnVuY2F0ZTY0DQogICAgLWZ1bmMgY19mdHJ1bmNhdGU2NChmZCBfQ19pbnQs
IGxlbmd0aCBPZmZzZXRfdCkgX0NfaW50DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIEZ0cnVuY2F0ZS9mdHJ1bmNhdGUNCiAgICArLy9leHRlcm4gZnRydW5jYXRl
DQogICAgK2Z1bmMgY19mdHJ1bmNhdGUoZmQgX0NfaW50LCBsZW5ndGggT2Zmc2V0X3QpIF9DX2lu
dA0KICAgICBmdW5jIEZ0cnVuY2F0ZShmZCBpbnQsIGxlbmd0aCBpbnQ2NCkgKGVyciBlcnJvcikg
ew0KICAgICAJRW50ZXJzeXNjYWxsKCkNCiAgICAtCV9yIDo9IGNfZnRydW5jYXRlNjQoX0NfaW50
KGZkKSwgT2Zmc2V0X3QobGVuZ3RoKSkNCiAgICArCV9yIDo9IGNfZnRydW5jYXRlKF9DX2ludChm
ZCksIE9mZnNldF90KGxlbmd0aCkpDQogICAgIAl2YXIgZXJybm8gRXJybm8NCiAgICAgCXNldEVy
cm5vIDo9IGZhbHNlDQogICAgIAlpZiBfciA8IDAgew0KICAgIEBAIC0yODQ1LDExICsyNDQ0LDEx
IEBAIGZ1bmMgRnRydW5jYXRlKGZkIGludCwgbGVuZ3RoIGludDY0KSAoZXJyIGVycm9yKSB7DQog
ICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgR2V0cmxpbWl0L2dldHJsaW1pdDY0DQogICAgLS8vZXh0ZXJuIGdldHJs
aW1pdDY0DQogICAgLWZ1bmMgY19nZXRybGltaXQ2NChyZXNvdXJjZSBfQ19pbnQsIHJsaW0gKlJs
aW1pdCkgX0NfaW50DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IEdldHJsaW1pdC9nZXRybGltaXQNCiAgICArLy9leHRlcm4gZ2V0cmxpbWl0DQogICAgK2Z1bmMg
Y19nZXRybGltaXQocmVzb3VyY2UgX0NfaW50LCBybGltICpSbGltaXQpIF9DX2ludA0KICAgICBm
dW5jIEdldHJsaW1pdChyZXNvdXJjZSBpbnQsIHJsaW0gKlJsaW1pdCkgKGVyciBlcnJvcikgew0K
ICAgIC0JX3IgOj0gY19nZXRybGltaXQ2NChfQ19pbnQocmVzb3VyY2UpLCBybGltKQ0KICAgICsJ
X3IgOj0gY19nZXRybGltaXQoX0NfaW50KHJlc291cmNlKSwgcmxpbSkNCiAgICAgCXZhciBlcnJu
byBFcnJubw0KICAgICAJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAgCWlmIF9yIDwgMCB7DQogICAg
QEAgLTI4NjIsOSArMjQ2MSw5IEBAIGZ1bmMgR2V0cmxpbWl0KHJlc291cmNlIGludCwgcmxpbSAq
UmxpbWl0KSAoZXJyIGVycm9yKSB7DQogICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAt
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTHN0YXQvbHN0YXQ2NA0KICAg
IC0vL2V4dGVybiBsc3RhdDY0DQogICAgLWZ1bmMgY19sc3RhdDY0KHBhdGggKmJ5dGUsIHN0YXQg
KlN0YXRfdCkgX0NfaW50DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIExzdGF0L2xzdGF0DQogICAgKy8vZXh0ZXJuIGxzdGF0DQogICAgK2Z1bmMgY19sc3RhdChw
YXRoICpieXRlLCBzdGF0ICpTdGF0X3QpIF9DX2ludA0KICAgICBmdW5jIExzdGF0KHBhdGggc3Ry
aW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsNCiAgICAgCXZhciBfcDEgKmJ5dGUNCiAg
ICAgCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICBAQCAtMjg3Miw3ICsy
NDcxLDcgQEAgZnVuYyBMc3RhdChwYXRoIHN0cmluZywgc3RhdCAqU3RhdF90KSAoZXJyIGVycm9y
KSB7DQogICAgIAkJcmV0dXJuDQogICAgIAl9DQogICAgIAlFbnRlcnN5c2NhbGwoKQ0KICAgIC0J
X3IgOj0gY19sc3RhdDY0KF9wMSwgc3RhdCkNCiAgICArCV9yIDo9IGNfbHN0YXQoX3AxLCBzdGF0
KQ0KICAgICAJdmFyIGVycm5vIEVycm5vDQogICAgIAlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICAJ
aWYgX3IgPCAwIHsNCiAgICBAQCAtMjg4NiwxMiArMjQ4NSwxMiBAQCBmdW5jIExzdGF0KHBhdGgg
c3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsNCiAgICAgCXJldHVybg0KICAgICB9
DQogICAgIA0KICAgIC0vLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBtbWFw
L21tYXA2NA0KICAgIC0vL2V4dGVybiBtbWFwNjQNCiAgICAtZnVuYyBjX21tYXA2NChhZGRyICpi
eXRlLCBsZW5ndGggU2l6ZV90LCBwcm90IF9DX2ludCwgZmxhZ3MgX0NfaW50LCBmZCBfQ19pbnQs
IG9mZnNldCBPZmZzZXRfdCkgKmJ5dGUNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgbW1hcC9tbWFwDQogICAgKy8vZXh0ZXJuIG1tYXANCiAgICArZnVuYyBjX21t
YXAoYWRkciAqYnl0ZSwgbGVuZ3RoIFNpemVfdCwgcHJvdCBfQ19pbnQsIGZsYWdzIF9DX2ludCwg
ZmQgX0NfaW50LCBvZmZzZXQgT2Zmc2V0X3QpICpieXRlDQogICAgIGZ1bmMgbW1hcChhZGRyIHVp
bnRwdHIsIGxlbmd0aCB1aW50cHRyLCBwcm90IGludCwgZmxhZ3MgaW50LCBmZCBpbnQsIG9mZnNl
dCBpbnQ2NCkgKHhhZGRyIHVpbnRwdHIsIGVyciBlcnJvcikgew0KICAgICAJRW50ZXJzeXNjYWxs
KCkNCiAgICAtCV9yIDo9IGNfbW1hcDY0KCgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoYWRkcikpLCBT
aXplX3QobGVuZ3RoKSwgX0NfaW50KHByb3QpLCBfQ19pbnQoZmxhZ3MpLCBfQ19pbnQoZmQpLCBP
ZmZzZXRfdChvZmZzZXQpKQ0KICAgICsJX3IgOj0gY19tbWFwKCgqYnl0ZSkodW5zYWZlLlBvaW50
ZXIoYWRkcikpLCBTaXplX3QobGVuZ3RoKSwgX0NfaW50KHByb3QpLCBfQ19pbnQoZmxhZ3MpLCBf
Q19pbnQoZmQpLCBPZmZzZXRfdChvZmZzZXQpKQ0KICAgICAJeGFkZHIgPSAodWludHB0cikodW5z
YWZlLlBvaW50ZXIoX3IpKQ0KICAgICAJdmFyIGVycm5vIEVycm5vDQogICAgIAlzZXRFcnJubyA6
PSBmYWxzZQ0KICAgIEBAIC0yOTA2LDkgKzI1MDUsOSBAQCBmdW5jIG1tYXAoYWRkciB1aW50cHRy
LCBsZW5ndGggdWludHB0ciwgcHJvdCBpbnQsIGZsYWdzIGludCwgZmQgaW50LCBvZmZzZXQgaW50
Ng0KICAgICAJcmV0dXJuDQogICAgIH0NCiAgICAgDQogICAgLS8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIE9wZW4vX19nb19vcGVuNjQNCiAgICAtLy9leHRlcm4gX19nb19v
cGVuNjQNCiAgICAtZnVuYyBjX19fZ29fb3BlbjY0KHBhdGggKmJ5dGUsIG1vZGUgX0NfaW50LCBw
ZXJtIE1vZGVfdCkgX0NfaW50DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIE9wZW4vX19nb19vcGVuDQogICAgKy8vZXh0ZXJuIF9fZ29fb3Blbg0KICAgICtmdW5j
IGNfX19nb19vcGVuKHBhdGggKmJ5dGUsIG1vZGUgX0NfaW50LCBwZXJtIE1vZGVfdCkgX0NfaW50
DQogICAgIGZ1bmMgT3BlbihwYXRoIHN0cmluZywgbW9kZSBpbnQsIHBlcm0gdWludDMyKSAoZmQg
aW50LCBlcnIgZXJyb3IpIHsNCiAgICAgCXZhciBfcDEgKmJ5dGUNCiAgICAgCV9wMSwgZXJyID0g
Qnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICBAQCAtMjkxNiw3ICsyNTE1LDcgQEAgZnVuYyBP
cGVuKHBhdGggc3RyaW5nLCBtb2RlIGludCwgcGVybSB1aW50MzIpIChmZCBpbnQsIGVyciBlcnJv
cikgew0KICAgICAJCXJldHVybg0KICAgICAJfQ0KICAgICAJRW50ZXJzeXNjYWxsKCkNCiAgICAt
CV9yIDo9IGNfX19nb19vcGVuNjQoX3AxLCBfQ19pbnQobW9kZSksIE1vZGVfdChwZXJtKSkNCiAg
ICArCV9yIDo9IGNfX19nb19vcGVuKF9wMSwgX0NfaW50KG1vZGUpLCBNb2RlX3QocGVybSkpDQog
ICAgIAlmZCA9IChpbnQpKF9yKQ0KICAgICAJdmFyIGVycm5vIEVycm5vDQogICAgIAlzZXRFcnJu
byA6PSBmYWxzZQ0KICAgIEBAIC0yOTMxLDkgKzI1MzAsOSBAQCBmdW5jIE9wZW4ocGF0aCBzdHJp
bmcsIG1vZGUgaW50LCBwZXJtIHVpbnQzMikgKGZkIGludCwgZXJyIGVycm9yKSB7DQogICAgIAly
ZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgUHJlYWQvcHJlYWQ2NA0KICAgIC0vL2V4dGVybiBwcmVhZDY0DQogICAgLWZ1bmMg
Y19wcmVhZDY0KGZkIF9DX2ludCwgYnVmICpieXRlLCBjb3VudCBTaXplX3QsIG9mZnNldCBPZmZz
ZXRfdCkgU3NpemVfdA0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBQcmVhZC9wcmVhZA0KICAgICsvL2V4dGVybiBwcmVhZA0KICAgICtmdW5jIGNfcHJlYWQoZmQg
X0NfaW50LCBidWYgKmJ5dGUsIGNvdW50IFNpemVfdCwgb2Zmc2V0IE9mZnNldF90KSBTc2l6ZV90
DQogICAgIGZ1bmMgUHJlYWQoZmQgaW50LCBwIFtdYnl0ZSwgb2Zmc2V0IGludDY0KSAobiBpbnQs
IGVyciBlcnJvcikgew0KICAgICAJdmFyIF9wMiAqYnl0ZQ0KICAgICAJaWYgbGVuKHApID4gMCB7
DQogICAgQEAgLTI5NDIsNyArMjU0MSw3IEBAIGZ1bmMgUHJlYWQoZmQgaW50LCBwIFtdYnl0ZSwg
b2Zmc2V0IGludDY0KSAobiBpbnQsIGVyciBlcnJvcikgew0KICAgICAJCV9wMiA9ICgqYnl0ZSko
dW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICAgCX0NCiAgICAgCUVudGVyc3lzY2FsbCgpDQog
ICAgLQlfciA6PSBjX3ByZWFkNjQoX0NfaW50KGZkKSwgX3AyLCBTaXplX3QobGVuKHApKSwgT2Zm
c2V0X3Qob2Zmc2V0KSkNCiAgICArCV9yIDo9IGNfcHJlYWQoX0NfaW50KGZkKSwgX3AyLCBTaXpl
X3QobGVuKHApKSwgT2Zmc2V0X3Qob2Zmc2V0KSkNCiAgICAgCW4gPSAoaW50KShfcikNCiAgICAg
CXZhciBlcnJubyBFcnJubw0KICAgICAJc2V0RXJybm8gOj0gZmFsc2UNCiAgICBAQCAtMjk1Nyw5
ICsyNTU2LDkgQEAgZnVuYyBQcmVhZChmZCBpbnQsIHAgW11ieXRlLCBvZmZzZXQgaW50NjQpIChu
IGludCwgZXJyIGVycm9yKSB7DQogICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUHdyaXRlL3B3cml0ZTY0DQogICAg
LS8vZXh0ZXJuIHB3cml0ZTY0DQogICAgLWZ1bmMgY19wd3JpdGU2NChmZCBfQ19pbnQsIGJ1ZiAq
Ynl0ZSwgY291bnQgU2l6ZV90LCBvZmZzZXQgT2Zmc2V0X3QpIFNzaXplX3QNCiAgICArLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgUHdyaXRlL3B3cml0ZQ0KICAgICsvL2V4
dGVybiBwd3JpdGUNCiAgICArZnVuYyBjX3B3cml0ZShmZCBfQ19pbnQsIGJ1ZiAqYnl0ZSwgY291
bnQgU2l6ZV90LCBvZmZzZXQgT2Zmc2V0X3QpIFNzaXplX3QNCiAgICAgZnVuYyBQd3JpdGUoZmQg
aW50LCBwIFtdYnl0ZSwgb2Zmc2V0IGludDY0KSAobiBpbnQsIGVyciBlcnJvcikgew0KICAgICAJ
dmFyIF9wMiAqYnl0ZQ0KICAgICAJaWYgbGVuKHApID4gMCB7DQogICAgQEAgLTI5NjgsNyArMjU2
Nyw3IEBAIGZ1bmMgUHdyaXRlKGZkIGludCwgcCBbXWJ5dGUsIG9mZnNldCBpbnQ2NCkgKG4gaW50
LCBlcnIgZXJyb3IpIHsNCiAgICAgCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVy
bykpDQogICAgIAl9DQogICAgIAlFbnRlcnN5c2NhbGwoKQ0KICAgIC0JX3IgOj0gY19wd3JpdGU2
NChfQ19pbnQoZmQpLCBfcDIsIFNpemVfdChsZW4ocCkpLCBPZmZzZXRfdChvZmZzZXQpKQ0KICAg
ICsJX3IgOj0gY19wd3JpdGUoX0NfaW50KGZkKSwgX3AyLCBTaXplX3QobGVuKHApKSwgT2Zmc2V0
X3Qob2Zmc2V0KSkNCiAgICAgCW4gPSAoaW50KShfcikNCiAgICAgCXZhciBlcnJubyBFcnJubw0K
ICAgICAJc2V0RXJybm8gOj0gZmFsc2UNCiAgICBAQCAtMjk4MywxMiArMjU4MiwxMiBAQCBmdW5j
IFB3cml0ZShmZCBpbnQsIHAgW11ieXRlLCBvZmZzZXQgaW50NjQpIChuIGludCwgZXJyIGVycm9y
KSB7DQogICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2Vlay9sc2VlazY0DQogICAgLS8vZXh0ZXJuIGxzZWVrNjQN
CiAgICAtZnVuYyBjX2xzZWVrNjQoZmQgX0NfaW50LCBvZmZzZXQgT2Zmc2V0X3QsIHdoZW5jZSBf
Q19pbnQpIE9mZnNldF90DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIFNlZWsvbHNlZWsNCiAgICArLy9leHRlcm4gbHNlZWsNCiAgICArZnVuYyBjX2xzZWVrKGZk
IF9DX2ludCwgb2Zmc2V0IE9mZnNldF90LCB3aGVuY2UgX0NfaW50KSBPZmZzZXRfdA0KICAgICBm
dW5jIFNlZWsoZmQgaW50LCBvZmZzZXQgaW50NjQsIHdoZW5jZSBpbnQpIChvZmYgaW50NjQsIGVy
ciBlcnJvcikgew0KICAgICAJRW50ZXJzeXNjYWxsKCkNCiAgICAtCV9yIDo9IGNfbHNlZWs2NChf
Q19pbnQoZmQpLCBPZmZzZXRfdChvZmZzZXQpLCBfQ19pbnQod2hlbmNlKSkNCiAgICArCV9yIDo9
IGNfbHNlZWsoX0NfaW50KGZkKSwgT2Zmc2V0X3Qob2Zmc2V0KSwgX0NfaW50KHdoZW5jZSkpDQog
ICAgIAlvZmYgPSAoaW50NjQpKF9yKQ0KICAgICAJdmFyIGVycm5vIEVycm5vDQogICAgIAlzZXRF
cnJubyA6PSBmYWxzZQ0KICAgIEBAIC0zMDAzLDExICsyNjAyLDExIEBAIGZ1bmMgU2VlayhmZCBp
bnQsIG9mZnNldCBpbnQ2NCwgd2hlbmNlIGludCkgKG9mZiBpbnQ2NCwgZXJyIGVycm9yKSB7DQog
ICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgU2V0cmxpbWl0L3NldHJsaW1pdDY0DQogICAgLS8vZXh0ZXJuIHNldHJs
aW1pdDY0DQogICAgLWZ1bmMgY19zZXRybGltaXQ2NChyZXNvdXJjZSBpbnQsIHJsaW0gKlJsaW1p
dCkgX0NfaW50DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNl
dHJsaW1pdC9zZXRybGltaXQNCiAgICArLy9leHRlcm4gc2V0cmxpbWl0DQogICAgK2Z1bmMgY19z
ZXRybGltaXQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQpIF9DX2ludA0KICAgICBmdW5jIFNl
dHJsaW1pdChyZXNvdXJjZSBpbnQsIHJsaW0gKlJsaW1pdCkgKGVyciBlcnJvcikgew0KICAgIC0J
X3IgOj0gY19zZXRybGltaXQ2NChpbnQocmVzb3VyY2UpLCBybGltKQ0KICAgICsJX3IgOj0gY19z
ZXRybGltaXQoaW50KHJlc291cmNlKSwgcmxpbSkNCiAgICAgCXZhciBlcnJubyBFcnJubw0KICAg
ICAJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAgCWlmIF9yIDwgMCB7DQogICAgQEAgLTMwMjAsOSAr
MjYxOSw5IEBAIGZ1bmMgU2V0cmxpbWl0KHJlc291cmNlIGludCwgcmxpbSAqUmxpbWl0KSAoZXJy
IGVycm9yKSB7DQogICAgIAlyZXR1cm4NCiAgICAgfQ0KICAgICANCiAgICAtLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3RhdC9zdGF0NjQNCiAgICAtLy9leHRlcm4gc3Rh
dDY0DQogICAgLWZ1bmMgY19zdGF0NjQocGF0aCAqYnl0ZSwgc3RhdCAqU3RhdF90KSBfQ19pbnQN
CiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3RhdC9zdGF0DQog
ICAgKy8vZXh0ZXJuIHN0YXQNCiAgICArZnVuYyBjX3N0YXQocGF0aCAqYnl0ZSwgc3RhdCAqU3Rh
dF90KSBfQ19pbnQNCiAgICAgZnVuYyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChl
cnIgZXJyb3IpIHsNCiAgICAgCXZhciBfcDEgKmJ5dGUNCiAgICAgCV9wMSwgZXJyID0gQnl0ZVB0
ckZyb21TdHJpbmcocGF0aCkNCiAgICBAQCAtMzAzMCw3ICsyNjI5LDcgQEAgZnVuYyBTdGF0KHBh
dGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsNCiAgICAgCQlyZXR1cm4NCiAg
ICAgCX0NCiAgICAgCUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX3N0YXQ2NChfcDEsIHN0
YXQpDQogICAgKwlfciA6PSBjX3N0YXQoX3AxLCBzdGF0KQ0KICAgICAJdmFyIGVycm5vIEVycm5v
DQogICAgIAlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICAJaWYgX3IgPCAwIHsNCiAgICBAQCAtMzA0
NCw5ICsyNjQzLDkgQEAgZnVuYyBTdGF0KHBhdGggc3RyaW5nLCBzdGF0ICpTdGF0X3QpIChlcnIg
ZXJyb3IpIHsNCiAgICAgCXJldHVybg0KICAgICB9DQogICAgIA0KICAgIC0vLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBUcnVuY2F0ZS90cnVuY2F0ZTY0DQogICAgLS8vZXh0
ZXJuIHRydW5jYXRlNjQNCiAgICAtZnVuYyBjX3RydW5jYXRlNjQocGF0aCAqYnl0ZSwgbGVuZ3Ro
IE9mZnNldF90KSBfQ19pbnQNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgVHJ1bmNhdGUvdHJ1bmNhdGUNCiAgICArLy9leHRlcm4gdHJ1bmNhdGUNCiAgICArZnVu
YyBjX3RydW5jYXRlKHBhdGggKmJ5dGUsIGxlbmd0aCBPZmZzZXRfdCkgX0NfaW50DQogICAgIGZ1
bmMgVHJ1bmNhdGUocGF0aCBzdHJpbmcsIGxlbmd0aCBpbnQ2NCkgKGVyciBlcnJvcikgew0KICAg
ICAJdmFyIF9wMSAqYnl0ZQ0KICAgICAJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRo
KQ0KICAgIEBAIC0zMDU0LDcgKzI2NTMsNyBAQCBmdW5jIFRydW5jYXRlKHBhdGggc3RyaW5nLCBs
ZW5ndGggaW50NjQpIChlcnIgZXJyb3IpIHsNCiAgICAgCQlyZXR1cm4NCiAgICAgCX0NCiAgICAg
CUVudGVyc3lzY2FsbCgpDQogICAgLQlfciA6PSBjX3RydW5jYXRlNjQoX3AxLCBPZmZzZXRfdChs
ZW5ndGgpKQ0KICAgICsJX3IgOj0gY190cnVuY2F0ZShfcDEsIE9mZnNldF90KGxlbmd0aCkpDQog
ICAgIAl2YXIgZXJybm8gRXJybm8NCiAgICAgCXNldEVycm5vIDo9IGZhbHNlDQogICAgIAlpZiBf
ciA8IDAgew0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KDQpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:41:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:41:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDloR-0002jn-DP; Fri, 27 Sep 2019 08:41:15 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDloQ-0002ji-D9
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:41:14 +0000
X-Inumbo-ID: 8ef4dc6c-e102-11e9-9670-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 8ef4dc6c-e102-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:41:12 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 42B9E10573E;
 Fri, 27 Sep 2019 10:41:11 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id taK9KelFB8tL; Fri, 27 Sep 2019 10:41:11 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 020A610573D;
 Fri, 27 Sep 2019 10:41:11 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:41:10 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:41:10
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 08/11] Update packages.uk
Thread-Index: AQHVdH+fs5ZS9tqSI0SQ+hzm/4eLUqc/NaAA
Date: Fri, 27 Sep 2019 08:41:10 +0000
Message-ID: <5A771129-2C09-48C9-ABF9-EB91C0004054@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-9-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-9-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <166E220B5CFAEA4EBDE39D11BD7E5E82@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 08/11] Update packages.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCg0K77u/T24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBVc2UgKnJlZ2Zp
bGUuZ28gaW5zdGVhZCBvZiAqbGFyZ2VmaWxlLmdvIHRvIGF2b2lkIHVzYWdlIG9mDQogICAgKjY0
IChvcGVuNjQgZXRjKSBmdW5jdGlvbnMuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogQ2hhcmFs
YW1wb3MgTWFpbmFzIDxDaGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1Pg0KICAgIC0tLQ0KICAg
ICBwYWNrYWdlcy51ayB8IDQgKystLQ0KICAgICAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25z
KCspLCAyIGRlbGV0aW9ucygtKQ0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9wYWNrYWdlcy51ayBi
L3BhY2thZ2VzLnVrDQogICAgaW5kZXggNDQxYzEzNy4uNjBmMGVmMSAxMDA2NDQNCiAgICAtLS0g
YS9wYWNrYWdlcy51aw0KICAgICsrKyBiL3BhY2thZ2VzLnVrDQogICAgQEAgLTEyMSw3ICsxMjEs
NyBAQCAkKExJQkdPX0JVSUxEKS9tYXRoL3JhbmQubzogJChMSUJHT19FWFRSQUNURUQpL2dvL21h
dGgvcmFuZC9leHAuZ28gJChMSUJHT19FWFRSQQ0KICAgICAJbWtkaXIgLXAgJChkaXIgJEApICYm
IFwNCiAgICAgCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1tYXRoL3Jh
bmQgJF4gLW8gJEAgJiYgXA0KICAgICAJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkNCiAgICAtJChMSUJHT19CVUlMRCkvc3lzY2FsbC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3lzY2FsbC9kaXJlbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZW5kaWFu
X2xpdHRsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lbnZfdW5peC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJzdHJfbGludXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvZXhlY19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2Fs
bC9leGVjX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51
eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4X2FtZDY0Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfbGludXhfdXN0YXQuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eF91dGltZXNuYW5vLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfcG9zaXguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeF9sYXJnZWZpbGUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9zdXBwb3J0LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9zeXNjYWxsL2xpYmNhbGxfdW5hbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwv
bGliY2FsbF93YWl0NC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9sc2ZfbGludXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbXNhbjAuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvbmV0bGlua19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lz
Y2FsbC9zZXR1aWRnaWRfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc2xl
ZXBfc2VsZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tjbXNnX2xpbnV4
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tjbXNnX3VuaXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9z
eXNjYWxsL3NvY2tldF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2Nr
ZXRfbGludXhfdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrZXRfcG9z
aXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3RyLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zeXNjYWxsL3N5c2NhbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwv
c3lzY2FsbF9lcnJuby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsX2xp
bnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfbGludXhfYW1kNjQu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF91bml4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9zeXNjYWxsL3RpbWVzdHJ1Y3QuZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0
ZWQvbGliY2FsbHMuZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQvc3lzaW5mby5nbyAkKExJQkdP
X0JBU0UpL2dlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQv
ZXBvbGwuZ28NCiAgICArJChMSUJHT19CVUlMRCkvc3lzY2FsbC5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vc3lzY2FsbC9kaXJlbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZW5k
aWFuX2xpdHRsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lbnZfdW5peC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJzdHJfbGludXguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvZXhlY19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lz
Y2FsbC9leGVjX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9s
aW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJjYWxsX2xpbnV4X2FtZDY0
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfbGludXhfdXN0YXQuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51eF91dGltZXNuYW5vLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfcG9zaXguZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeF9yZWdmaWxlLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfc3VwcG9ydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3lzY2FsbC9saWJjYWxsX3VuYW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxs
L2xpYmNhbGxfd2FpdDQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbHNmX2xpbnV4
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL21zYW4wLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zeXNjYWxsL25ldGxpbmtfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5
c2NhbGwvc2V0dWlkZ2lkX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3Ns
ZWVwX3NlbGVjdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrY21zZ19saW51
eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zb2NrY21zZ191bml4LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tldC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9zb2NrZXRfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29j
a2V0X2xpbnV4X3R5cGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0X3Bv
c2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N0ci5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxs
L3N5c2NhbGxfZXJybm8uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF9s
aW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zeXNjYWxsX2xpbnV4X2FtZDY0
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGxfdW5peC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC90aW1lc3RydWN0LmdvICQoTElCR09fQkFTRSkvZ2VuZXJh
dGVkL2xpYmNhbGxzLmdvICQoTElCR09fQkFTRSkvZ2VuZXJhdGVkL3N5c2luZm8uZ28gJChMSUJH
T19CQVNFKS9nZW5lcmF0ZWQvc3lzY2FsbF9hcmNoLmdvICQoTElCR09fQkFTRSkvZ2VuZXJhdGVk
L2Vwb2xsLmdvDQogICAgIAkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICAgCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1zeXNjYWxsICReIC1vICRAICYmIFwNCiAgICAgCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgQEAgLTMyNCw3ICszMjQsNyBAQCAk
KExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL2dvbA0KICAgICAJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAg
ICAgCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5n
X29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1ICReIC1vICRAICYmIFwNCiAgICAgCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgLSQoTElCR09fQlVJTEQpL29z
Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9kaXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L29zL2Rpcl9nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX2xhcmdlZmlsZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL2Vudi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJyb3IuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL29zL2Vycm9yX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4
ZWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWNfcG9zaXguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL29zL2V4ZWNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0
YWJsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZV9wcm9jZnMuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Zp
bGVfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVfdW5peC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vb3MvZ2V0d2QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3BhdGgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3BhdGhfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vb3MvcGlwZV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcHJvYy5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3RhdF9hdGltLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9vcy9zdGF0X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0aWNreV9ub3Ric2Qu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3Mvc3lzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zeXNfbGludXguZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL29zL3N5c191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy90eXBl
cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvdHlwZXNfdW5peC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vb3Mvd2FpdF93YWl0aWQuZ28NCiAgICArJChMSUJHT19CVUlMRCkvb3MubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL29zL2Rpci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGly
X2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9kaXJfcmVnZmlsZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vb3MvZGlyX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Vu
di5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJyb3IuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL2Vycm9yX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWMuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWNfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L29zL2V4ZWNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZV9wcm9jZnMuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL29zL2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVfcG9zaXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vb3MvZ2V0d2QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3BhdGguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL29zL3BhdGhfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mv
cGlwZV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcHJvYy5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3Mvc3RhdF9hdGltLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zdGF0
X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0aWNreV9ub3Ric2QuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL29zL3N0ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3lzLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zeXNfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL29zL3N5c191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy90eXBlcy5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vb3MvdHlwZXNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
b3Mvd2FpdF93YWl0aWQuZ28NCiAgICAgCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICAJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW9zICReIC1vICRAICYmIFwNCiAgICAgCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgLS0gDQogICAgMi4xNy4xDQog
ICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:42:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:42:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlpA-0002lL-Gy; Fri, 27 Sep 2019 08:42:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlp9-0002lC-JP
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:41:59 +0000
X-Inumbo-ID: aa6f8bae-e102-11e9-9670-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id aa6f8bae-e102-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:41:58 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 79312105739;
 Fri, 27 Sep 2019 10:41:57 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id s5iqJ6LhG9nO; Fri, 27 Sep 2019 10:41:57 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 53054105721;
 Fri, 27 Sep 2019 10:41:57 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:41:56 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:41:56
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 09/11] Use semaphores instead of futexes
Thread-Index: AQHVdH+gHdhSO+wQuUqunboC61XBkac/NdcA
Date: Fri, 27 Sep 2019 08:41:56 +0000
Message-ID: <3A0687E9-61C4-4C5A-9E2E-FD935D8FD679@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-10-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-10-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <B9840C65CC24874EBF54388F2748F673@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 09/11] Use semaphores
 instead of futexes
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBHbyB1c2VzIGZ1
dGV4ZXMgZm9yIGxvY2tpbmcgaW4gbGludXggYnV0IHRoZXkgYXJlIG5vdCBpbXBsZW1lbnRlZCBp
bg0KICAgIFVuaWtyYWZ0LiBBcyBhIHJlc3VsdCB3ZSBuZWVkIHRvIHN3aXRjaCB0byBzZW1hcGhv
cmVzLg0KICAgIA0KICAgIFNpZ25lZC1vZmYtYnk6IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFs
YW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4NCiAgICAtLS0NCiAgICAgcGFja2FnZXMudWsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstDQogICAgIC4uLmdvLVVzZS1zZW1h
cGhvcmVzLWluc3RlYWQtb2YtZnV0ZXhlcy5wYXRjaCB8IDEzMSArKysrKysrKysrKysrKysrKysN
CiAgICAgMiBmaWxlcyBjaGFuZ2VkLCAxMzIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0K
ICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDA2LWxpYmdvLVVzZS1zZW1hcGhvcmVz
LWluc3RlYWQtb2YtZnV0ZXhlcy5wYXRjaA0KICAgIA0KICAgIGRpZmYgLS1naXQgYS9wYWNrYWdl
cy51ayBiL3BhY2thZ2VzLnVrDQogICAgaW5kZXggNjBmMGVmMS4uZWM5NzQwOCAxMDA2NDQNCiAg
ICAtLS0gYS9wYWNrYWdlcy51aw0KICAgICsrKyBiL3BhY2thZ2VzLnVrDQogICAgQEAgLTgwLDcg
KzgwLDcgQEAgJChMSUJHT19CVUlMRCkvaW1hZ2UvY29sb3IubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2ltYWdlL2NvbG9yL2NvbG9yLmdvICQoTElCR08NCiAgICAgCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcDQogICAgIAkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aW1h
Z2UvY29sb3IgJF4gLW8gJEAgJiYgXA0KICAgICAJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkNCiAgICAtJChMSUJHT19CVUlMRCkvcnVudGltZS5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9hbGcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY2dv
X2djY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2NoYW4uZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvY29tcGlsZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1
bnRpbWUvY3B1cHJvZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jcHV0aWNrcy5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9kZWJ1Zy5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9lbnZfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUv
ZXJyb3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZXh0ZXJuLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9ydW50aW1lL2ZmaS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9oYXNoNjQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaGFzaG1hcC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9oYXNobWFwX2Zhc3QuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvaWZhY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbGZz
dGFjay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sZnN0YWNrXzY0Yml0LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2xvY2tfZnV0ZXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvbWNhY2hlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21w
cm9mLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL21zYW4wLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL21zdGF0cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9uZXRwb2xsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL25ldHBvbGxfZXBvbGwu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvb3NfZ2NjZ28uZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvb3NfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvcGFuaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJpbnQuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcHJvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS9yYWNlMC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9yZGVidWcuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvcnVudGltZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS9ydW50aW1lMS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9ydW50
aW1lMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zZWxlY3QuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvc2VtYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9zaWduYWxfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lnbmFsX3Np
Z2hhbmRsZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lnbmFsX3VuaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc2lncXVldWUuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvc2l6ZWNsYXNzZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvc2xpY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc3RyaW5nLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3N0dWJzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL3N0dWJzMi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zeW10YWIuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdGltZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS90cmFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90cmFjZWJh
Y2tfZ2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHlwZS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS90eXBla2luZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
cnVudGltZS91bmFsaWduZWQxLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3V0Zjgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvd3JpdGVfZXJyLmdvICQoTElCR09fQkFT
RSkvZ2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbyAkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9z
aWd0YWIuZ28NCiAgICArJChMSUJHT19CVUlMRCkvcnVudGltZS5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9hbGcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY2dvX2dj
Y2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2NoYW4uZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvY29tcGlsZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvY3B1cHJvZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jcHV0aWNrcy5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9kZWJ1Zy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS9lbnZfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZXJy
b3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvZXh0ZXJuLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL2ZmaS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9o
YXNoNjQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvaGFzaG1hcC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9oYXNobWFwX2Zhc3QuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3J1bnRpbWUvaWZhY2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbGZzdGFj
ay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sZnN0YWNrXzY0Yml0LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2xvY2tfc2VtYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS9tY2FjaGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbXByb2Yu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbXNhbjAuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3J1bnRpbWUvbXN0YXRzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL25l
dHBvbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbmV0cG9sbF9lcG9sbC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9vc19nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9vc19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9w
YW5pYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9wcmludC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS9wcm9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L3JhY2UwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3JkZWJ1Zy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9ydW50aW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL3J1bnRpbWUxLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3J1bnRpbWUy
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NlbGVjdC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9zZW1hLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3Np
Z25hbF9nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zaWduYWxfc2lnaGFu
ZGxlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zaWduYWxfdW5peC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zaWdxdWV1ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcnVudGltZS9zaXplY2xhc3Nlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9z
bGljZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zdHJpbmcuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvc3R1YnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRp
bWUvc3R1YnMyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3N5bXRhYi5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90aW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL3RyYWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3RyYWNlYmFja19n
Y2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90eXBlLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9ydW50aW1lL3R5cGVraW5kLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL3VuYWxpZ25lZDEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdXRmOC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS93cml0ZV9lcnIuZ28gJChMSUJHT19CQVNFKS9n
ZW5lcmF0ZWQvcnVudGltZV9zeXNpbmZvLmdvICQoTElCR09fQkFTRSkvZ2VuZXJhdGVkL3NpZ3Rh
Yi5nbw0KICAgICAJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgIAkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9cnVudGltZSAtZmdvLWMtaGVhZGVyPSQoTElCR09fQkFTRSkvZ2VuZXJh
dGVkL3J1bnRpbWUuaW5jLnRtcCAtZmdvLWNvbXBpbGluZy1ydW50aW1lICReIC1vICRAICYmIFwN
CiAgICAgCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgZGlmZiAt
LWdpdCBhL3BhdGNoZXMvMDAwNi1saWJnby1Vc2Utc2VtYXBob3Jlcy1pbnN0ZWFkLW9mLWZ1dGV4
ZXMucGF0Y2ggYi9wYXRjaGVzLzAwMDYtbGliZ28tVXNlLXNlbWFwaG9yZXMtaW5zdGVhZC1vZi1m
dXRleGVzLnBhdGNoDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAw
Li5mZGMxMmUzDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsrKyBiL3BhdGNoZXMvMDAwNi1saWJn
by1Vc2Utc2VtYXBob3Jlcy1pbnN0ZWFkLW9mLWZ1dGV4ZXMucGF0Y2gNCiAgICBAQCAtMCwwICsx
LDEzMSBAQA0KICAgICtGcm9tIGFkNTJhNjdjYTA4NGQ0MDc2OGFkOGZkZjQ5MmVlMjZmNDE5MDI2
NzAgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxDQogICAgK0Zyb206IENoYXJhbGFtcG9zIE1haW5h
cyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4NCiAgICArRGF0ZTogRnJpLCA2IFNlcCAy
MDE5IDEyOjA4OjUzICswMjAwDQogICAgK1N1YmplY3Q6IFtQQVRDSF0gVXNlIHNlbWFwaG9yZXMg
aW5zdGVhZCBvZiBmdXRleGVzDQogICAgKw0KICAgICtmdXRleGVzIGFyZSBub3QgaW1wbGVtZW50
ZWQgb24gVW5pa3JhZnQuIEluIGxpYmdvIHRoZXJlIGFyZSBzb21lIG90aGVyDQogICAgK3Rhcmdl
dHMgKGxpa2Ugb3BlbmJzZCkgd2hpY2ggdXNlIHNlbWFwaG9yZXMgaW5zdGVhZCBvZiBmdXRleGVz
Lg0KICAgICtGb2xsb3dpbmcgdGhlIHNhbWUgYXBwcm9hY2ggYXMgaW4gdGhlc2UgdGFyZ2V0cywg
d2l0aCB0aGlzIHBhdGNoIA0KICAgICtsb2NraW5nIGlzIGRvbmUgdXNpbmcgc2VtYXBob3Jlcy4N
CiAgICArDQogICAgKy0tLQ0KICAgICsgbGliZ28vZ28vcnVudGltZS9vc19saW51eC5nbyB8IDk5
ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQ0KICAgICsgMSBmaWxlIGNoYW5n
ZWQsIDk2IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pDQogICAgKw0KICAgICtkaWZmIC0t
Z2l0IGEvbGliZ28vZ28vcnVudGltZS9vc19saW51eC5nbyBiL2xpYmdvL2dvL3J1bnRpbWUvb3Nf
bGludXguZ28NCiAgICAraW5kZXggYWQzMzQ4NjllLi43NzVmMzQ4NTkgMTAwNjQ0DQogICAgKy0t
LSBhL2xpYmdvL2dvL3J1bnRpbWUvb3NfbGludXguZ28NCiAgICArKysrIGIvbGliZ28vZ28vcnVu
dGltZS9vc19saW51eC5nbw0KICAgICtAQCAtOSw5ICs5LDkgQEAgaW1wb3J0ICgNCiAgICArIAki
dW5zYWZlIg0KICAgICsgKQ0KICAgICsgDQogICAgKy10eXBlIG1PUyBzdHJ1Y3Qgew0KICAgICst
CXVudXNlZCBieXRlDQogICAgKy19DQogICAgKysvL3R5cGUgbU9TIHN0cnVjdCB7DQogICAgKysv
Lwl1bnVzZWQgYnl0ZQ0KICAgICsrLy99DQogICAgKyANCiAgICArIGZ1bmMgZnV0ZXgoYWRkciB1
bnNhZmUuUG9pbnRlciwgb3AgaW50MzIsIHZhbCB1aW50MzIsIHRzLCBhZGRyMiB1bnNhZmUuUG9p
bnRlciwgdmFsMyB1aW50MzIpIGludDMyIHsNCiAgICArIAlyZXR1cm4gaW50MzIoc3lzY2FsbChf
U1lTX2Z1dGV4LCB1aW50cHRyKGFkZHIpLCB1aW50cHRyKG9wKSwgdWludHB0cih2YWwpLCB1aW50
cHRyKHRzKSwgdWludHB0cihhZGRyMiksIHVpbnRwdHIodmFsMykpKQ0KICAgICtAQCAtMTY5LDMg
KzE2OSw5NiBAQCBmdW5jIHN5c2F1eHYoYXV4diBbXXVpbnRwdHIpIGludCB7DQogICAgKyANCiAg
ICArIC8vIFRlbXBvcmFyeSBmb3IgZ2NjZ28gdW50aWwgd2UgcG9ydCBtZW1fR09PUy5nby4NCiAg
ICArIHZhciBhZGRyc3BhY2VfdmVjIFsxXWJ5dGUNCiAgICArKw0KICAgICsrLy8gQ29weXJpZ2h0
IDIwMTEgVGhlIEdvIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQogICAgKysvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQ0KICAgICsrLy8g
bGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLg0KICAgICsrDQog
ICAgKyt0eXBlIG1PUyBzdHJ1Y3Qgew0KICAgICsrCXdhaXRzZW1hIHVpbnRwdHIgLy8gc2VtYXBo
b3JlIGZvciBwYXJraW5nIG9uIGxvY2tzDQogICAgKyt9DQogICAgKysNCiAgICArKy8vZXh0ZXJu
IG1hbGxvYw0KICAgICsrZnVuYyBsaWJjX21hbGxvYyh1aW50cHRyKSB1bnNhZmUuUG9pbnRlcg0K
ICAgICsrDQogICAgKysvL2dvOm5vZXNjYXBlDQogICAgKysvL2V4dGVybiBzZW1faW5pdA0KICAg
ICsrZnVuYyBzZW1faW5pdChzZW0gKnNlbXQsIHBzaGFyZWQgaW50MzIsIHZhbHVlIHVpbnQzMikg
aW50MzINCiAgICArKw0KICAgICsrLy9nbzpub2VzY2FwZQ0KICAgICsrLy9leHRlcm4gc2VtX3dh
aXQNCiAgICArK2Z1bmMgc2VtX3dhaXQoc2VtICpzZW10KSBpbnQzMg0KICAgICsrDQogICAgKysv
L2dvOm5vZXNjYXBlDQogICAgKysvL2V4dGVybiBzZW1fcG9zdA0KICAgICsrZnVuYyBzZW1fcG9z
dChzZW0gKnNlbXQpIGludDMyDQogICAgKysNCiAgICArKy8vZ286bm9lc2NhcGUNCiAgICArKy8v
ZXh0ZXJuIHNlbV90aW1lZHdhaXQNCiAgICArK2Z1bmMgc2VtX3RpbWVkd2FpdChzZW0gKnNlbXQs
IHRpbWVvdXQgKnRpbWVzcGVjKSBpbnQzMg0KICAgICsrDQogICAgKysvL2dvOm5vc3BsaXQNCiAg
ICArK2Z1bmMgc2VtYWNyZWF0ZShtcCAqbSkgew0KICAgICsrCWlmIG1wLm1vcy53YWl0c2VtYSAh
PSAwIHsNCiAgICArKwkJcmV0dXJuDQogICAgKysJfQ0KICAgICsrDQogICAgKysJdmFyIHNlbSAq
c2VtdA0KICAgICsrDQogICAgKysJLy8gQ2FsbCBsaWJjJ3MgbWFsbG9jIHJhdGhlciB0aGFuIG1h
bGxvYy4gVGhpcyB3aWxsDQogICAgKysJLy8gYWxsb2NhdGUgc3BhY2Ugb24gdGhlIEMgaGVhcC4g
V2UgY2FuJ3QgY2FsbCBtYWxsb2MNCiAgICArKwkvLyBoZXJlIGJlY2F1c2UgaXQgY291bGQgY2F1
c2UgYSBkZWFkbG9jay4NCiAgICArKwlzZW0gPSAoKnNlbXQpKGxpYmNfbWFsbG9jKHVuc2FmZS5T
aXplb2YoKnNlbSkpKQ0KICAgICsrCWlmIHNlbV9pbml0KHNlbSwgMCwgMCkgIT0gMCB7DQogICAg
KysJCXRocm93KCJzZW1faW5pdCIpDQogICAgKysJfQ0KICAgICsrCW1wLm1vcy53YWl0c2VtYSA9
IHVpbnRwdHIodW5zYWZlLlBvaW50ZXIoc2VtKSkNCiAgICArK30NCiAgICArKw0KICAgICsrLy9n
bzpub3NwbGl0DQogICAgKytmdW5jIHNlbWFzbGVlcChucyBpbnQ2NCkgaW50MzIgew0KICAgICsr
CV9tXyA6PSBnZXRnKCkubQ0KICAgICsrCWlmIG5zID49IDAgew0KICAgICsrCQl2YXIgdHMgdGlt
ZXNwZWMNCiAgICArKwkJLy90cy5zZXRfc2VjKG5zIC8gMTAwMDAwMDAwMCkNCiAgICArKwkJLy90
cy5zZXRfbnNlYyhpbnQzMihucyAlIDEwMDAwMDAwMDApKQ0KICAgICsrCQlucyArPSBuYW5vdGlt
ZSgpDQogICAgKysJCWlmIHN5cy5QdHJTaXplID09IDggew0KICAgICsrCQkJdHMuc2V0X3NlYyhu
cyAvIDEwMDAwMDAwMDApDQogICAgKysJCQl0cy5zZXRfbnNlYyhpbnQzMihucyAlIDEwMDAwMDAw
MDApKQ0KICAgICsrCQl9IGVsc2Ugew0KICAgICsrCQkJdHMudHZfbnNlYyA9IDANCiAgICArKwkJ
CXRzLnNldF9zZWMoaW50NjQodGltZWRpdihucywgMTAwMDAwMDAwMCwgKCppbnQzMikodW5zYWZl
LlBvaW50ZXIoJnRzLnR2X25zZWMpKSkpKQ0KICAgICsrCQl9DQogICAgKysJCS8vdmFyIG5zZWMg
aW50MzINCiAgICArKwkJLy90cy5zZXRfc2VjKGludDY0KHRpbWVkaXYobnMsIDEwMDAwMDAwMDAs
ICZuc2VjKSkpDQogICAgKysJCS8vdHMuc2V0X25zZWMobnNlYykNCiAgICArKw0KICAgICsrCQlp
ZiBzZW1fdGltZWR3YWl0KCgqc2VtdCkodW5zYWZlLlBvaW50ZXIoX21fLm1vcy53YWl0c2VtYSkp
LCAmdHMpICE9IDAgew0KICAgICsrCQkJZXJyIDo9IGVycm5vKCkNCiAgICArKwkJCWlmIGVyciA9
PSBfRVRJTUVET1VUIHx8IGVyciA9PSBfRUFHQUlOIHx8IGVyciA9PSBfRUlOVFIgew0KICAgICsr
CQkJCXJldHVybiAtMQ0KICAgICsrCQkJfQ0KICAgICsrCQkJdGhyb3coInNlbV90aW1lZHdhaXQi
KQ0KICAgICsrCQl9DQogICAgKysJCXJldHVybiAwDQogICAgKysJfQ0KICAgICsrCWZvciB7DQog
ICAgKysJCXIxIDo9IHNlbV93YWl0KCgqc2VtdCkodW5zYWZlLlBvaW50ZXIoX21fLm1vcy53YWl0
c2VtYSkpKQ0KICAgICsrCQlpZiByMSA9PSAwIHsNCiAgICArKwkJCWJyZWFrDQogICAgKysJCX0N
CiAgICArKwkJaWYgZXJybm8oKSA9PSBfRUlOVFIgew0KICAgICsrCQkJY29udGludWUNCiAgICAr
KwkJfQ0KICAgICsrCQl0aHJvdygic2VtX3dhaXQiKQ0KICAgICsrCX0NCiAgICArKwlyZXR1cm4g
MA0KICAgICsrfQ0KICAgICsrDQogICAgKysvL2dvOm5vc3BsaXQNCiAgICArK2Z1bmMgc2VtYXdh
a2V1cChtcCAqbSkgew0KICAgICsrCWlmIHNlbV9wb3N0KCgqc2VtdCkodW5zYWZlLlBvaW50ZXIo
bXAubW9zLndhaXRzZW1hKSkpICE9IDAgew0KICAgICsrCQl0aHJvdygic2VtX3Bvc3QiKQ0KICAg
ICsrCX0NCiAgICArK30NCiAgICArLS0gDQogICAgKzIuMTcuMQ0KICAgICsNCiAgICAtLSANCiAg
ICAyLjE3LjENCiAgICANCiAgICANCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:42:29 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:42:29 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlpc-0002mW-ST; Fri, 27 Sep 2019 08:42:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlpb-0002mM-Ir
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:42:27 +0000
X-Inumbo-ID: bb2eb1f4-e102-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id bb2eb1f4-e102-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 08:42:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 9265FF200A;
 Fri, 27 Sep 2019 10:42:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id UWCda1a3X9_O; Fri, 27 Sep 2019 10:42:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 6297FF2006;
 Fri, 27 Sep 2019 10:42:21 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:42:21 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:42:21
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 10/11] Add glue code and stubs
Thread-Index: AQHVdH+tuPZm7jowlUSB/lrZMZbRdac/NfMA
Date: Fri, 27 Sep 2019 08:42:20 +0000
Message-ID: <DA728D45-C908-4BD9-BEE1-F16DB55AEE54@neclab.eu>
References: <20190926153248.30763-1-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153248.30763-1-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <863DE0C5C776F0409C68886A16C99DDE@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 10/11] Add glue code and
 stubs
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBTaWduZWQtb2Zm
LWJ5OiBDaGFyYWxhbXBvcyBNYWluYXMgPENoYXJhbGFtcG9zLk1haW5hc0BuZWNsYWIuZXU+DQog
ICAgLS0tDQogICAgIE1ha2VmaWxlLnVrIHwgICAyICsNCiAgICAgZ2x1ZS5jICAgICAgfCAxOTkg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KICAg
ICAyIGZpbGVzIGNoYW5nZWQsIDIwMSBpbnNlcnRpb25zKCspDQogICAgIGNyZWF0ZSBtb2RlIDEw
MDY0NCBnbHVlLmMNCiAgICANCiAgICBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmls
ZS51aw0KICAgIGluZGV4IGYyMDk1OTguLjcxNDM4NWMgMTAwNjQ0DQogICAgLS0tIGEvTWFrZWZp
bGUudWsNCiAgICArKysgYi9NYWtlZmlsZS51aw0KICAgIEBAIC04Niw2ICs4Niw4IEBAIExJQkdP
X0NGTEFHUy15ICs9IC1Xbm8tY2FzdC1xdWFsIC1Xbm8tdW51c2VkLXZhbHVlDQogICAgICMgbGli
Z28gY29kZQ0KICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgICANCiAgICArTElCR09f
U1JDUy15ICs9ICQoTElCR09fQkFTRSkvZ2x1ZS5jDQogICAgKw0KICAgICBMSUJHT19TUkNTLXkg
Kz0gJChMSUJHT19FWFRSQUNURUQpL2dvL2J5dGVzL2luZGV4Ynl0ZS5jfGJ5dGVzDQogICAgIExJ
QkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbG9nL3N5c2xvZy9zeXNsb2dfYy5j
DQogICAgIExJQkdPX1NSQ1MteSArPSAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVmbGVjdC9tYWtl
ZnVuY19mZmlfYy5jDQogICAgZGlmZiAtLWdpdCBhL2dsdWUuYyBiL2dsdWUuYw0KICAgIG5ldyBm
aWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uZGU0Y2JjYg0KICAgIC0tLSAvZGV2
L251bGwNCiAgICArKysgYi9nbHVlLmMNCiAgICBAQCAtMCwwICsxLDE5OSBAQA0KICAgICsvKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovDQogICAgKy8qDQogICAgKyAq
DQogICAgKyAqIEF1dGhvcnM6IENoYXJhbGFtcG9zIE1haW5hcyA8Y2hhcmFsYW1wb3MubWFpbmFz
QG5lY2xhYi5ldT4NCiAgICArICoNCiAgICArICoNCiAgICArICogQ29weXJpZ2h0IChjKSAyMDE5
LCBORUMgRXVyb3BlIEx0ZC4sIE5FQyBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4N
CiAgICArICoNCiAgICArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQogICAgKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KICAgICsgKiBh
cmUgbWV0Og0KICAgICsgKg0KICAgICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KICAgICsgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQogICAg
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0DQogICAgKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUNCiAgICArICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4NCiAgICArICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRl
ciBub3IgdGhlIG5hbWVzIG9mIGl0cw0KICAgICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KICAgICsgKiAg
ICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
Lg0KICAgICsgKg0KICAgICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyINCiAgICArICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQ0KICAgICsgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KICAgICsgKiBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JT
IEJFDQogICAgKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1INCiAgICArICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YNCiAgICArICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTDQogICAgKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElODQogICAgKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpDQogICAgKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFDQogICAgKyAqIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLg0KICAgICsgKg0KICAgICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJB
Q1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLg0KICAgICsgKi8NCiAgICArDQogICAgKy8qDQog
ICAgKyAqIHN0dWJzDQogICAgKyAqLw0KICAgICsNCiAgICArI2luY2x1ZGUgPHN0ZGlvLmg+DQog
ICAgKyNpbmNsdWRlIDxlcnJuby5oPg0KICAgICsjaW5jbHVkZSA8c3lzL21tYW4uaD4NCiAgICAr
I2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4NCiAgICArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogICAg
KyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+DQogICAgKyNpbmNsdWRlIDxwdGVfdHlwZXMuaD4N
CiAgICArDQogICAgK2ludCBlcG9sbF9jcmVhdGUoaW50IHNpemUgX191bnVzZWQpDQogICAgK3sN
CiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtpbnQgZXBvbGxfY3RsKGludCBl
cGZkIF9fdW51c2VkLCBpbnQgb3AgX191bnVzZWQsIGludCBmZCBfX3VudXNlZCwgc3RydWN0IGVw
b2xsX2V2ZW50ICpldmVudCBfX3VudXNlZCkNCiAgICArew0KICAgICsJcmV0dXJuIDA7DQogICAg
K30NCiAgICArDQogICAgK2ludCBlcG9sbF93YWl0KGludCBlcGZkIF9fdW51c2VkLCBzdHJ1Y3Qg
ZXBvbGxfZXZlbnQgKmV2ZW50cyBfX3VudXNlZCwgaW50IG1heGV2ZW50cyBfX3VudXNlZCwgaW50
IHRpbWVvdXQgX191bnVzZWQpDQogICAgK3sNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAg
Kw0KICAgICtpbnQgbWFkdmlzZSh2b2lkICphZGRyIF9fdW51c2VkLCBzaXplX3QgbGVuZ3RoIF9f
dW51c2VkLCBpbnQgYWR2aWNlIF9fdW51c2VkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gMDsNCiAg
ICArfQ0KICAgICsNCiAgICAraW50IG1pbmNvcmUodm9pZCAqYWRkciBfX3VudXNlZCwgc2l6ZV90
IGxlbmd0aCBfX3VudXNlZCwgdW5zaWduZWQgY2hhciAqdmVjIF9fdW51c2VkKQ0KICAgICt7DQog
ICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICAraW50IHByY3RsKGludCBvcHRpb24g
X191bnVzZWQsIHVuc2lnbmVkIGxvbmcgYXJnMiBfX3VudXNlZCwgdW5zaWduZWQgbG9uZyBhcmcz
IF9fdW51c2VkLCB1bnNpZ25lZCBsb25nIGFyZzQgX191bnVzZWQsIHVuc2lnbmVkIGxvbmcgYXJn
NSBfX3VudXNlZCkNCiAgICArew0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAg
K2ludCBwdGhyZWFkX3NpZ21hc2soaW50IGhvdyBfX3VudXNlZCwgY29uc3Qgc2lnc2V0X3QgKnNl
dCBfX3VudXNlZCwgc2lnc2V0X3QgKm9sZHNldCBfX3VudXNlZCkNCiAgICArew0KICAgICsJcmV0
dXJuIDA7DQogICAgK30NCiAgICArDQogICAgK2xvbmcgcHRyYWNlKHZvaWQpDQogICAgK3sNCiAg
ICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtpbnQgcmVib290KGludCBtYWdpYyBf
X3VudXNlZCwgaW50IG1hZ2ljMiBfX3VudXNlZCwgaW50IGNtZCBfX3VudXNlZCwgdm9pZCAqYXJn
IF9fdW51c2VkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICAr
aW50IHNjaGVkX2dldGFmZmluaXR5KHZvaWQpDQogICAgK3sNCiAgICArCXJldHVybiAwOw0KICAg
ICt9DQogICAgKw0KICAgICtpbnQgc2V0aXRpbWVyKGludCB3aGljaCBfX3VudXNlZCwgY29uc3Qg
c3RydWN0IGl0aW1lcnZhbCAqbmV3X3ZhbHVlIF9fdW51c2VkLCBzdHJ1Y3QgaXRpbWVydmFsICpv
bGRfdmFsdWUgX191bnVzZWQpDQogICAgK3sNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAg
Kw0KICAgICtpbnQgc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0diBfX3VudXNl
ZCwgY29uc3Qgc3RydWN0IHRpbWV6b25lICp0eiBfX3VudXNlZCkNCiAgICArew0KICAgICsJcmV0
dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKyN1bmRlZiBzaWdhZGRzZXQNCiAgICAraW50IHNp
Z2FkZHNldChzaWdzZXRfdCAqc2V0IF9fdW51c2VkLCBpbnQgc2lnbnVtIF9fdW51c2VkKQ0KICAg
ICt7DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICAraW50IHNpZ2FsdHN0YWNr
KGNvbnN0IHN0YWNrX3QgKnNzIF9fdW51c2VkLCBzdGFja190ICpvbGRfc3MgX191bnVzZWQpDQog
ICAgK3sNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICsjdW5kZWYgc2lnZGVs
c2V0DQogICAgK2ludCBzaWdkZWxzZXQoc2lnc2V0X3QgKnNldCBfX3VudXNlZCwgaW50IHNpZ251
bSBfX3VudXNlZCkNCiAgICArew0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAg
KyN1bmRlZiBzaWdlbXB0eXNldA0KICAgICtpbnQgc2lnZW1wdHlzZXQoc2lnc2V0X3QgKnNldCBf
X3VudXNlZCkNCiAgICArew0KICAgICsJcmV0dXJuIDA7DQogICAgK30NCiAgICArDQogICAgKyN1
bmRlZiBzaWdmaWxsc2V0DQogICAgK2ludCBzaWdmaWxsc2V0KHNpZ3NldF90ICpzZXQgX191bnVz
ZWQpDQogICAgK3sNCiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICtsb25nIHN5
c2NhbGwobG9uZyBudW1iZXIgX191bnVzZWQsIC4uLikNCiAgICArew0KICAgICsJcmV0dXJuIDA7
DQogICAgK30NCiAgICArDQogICAgK3NzaXplX3Qgc2VuZGZpbGU2NChpbnQgb3V0X2ZkIF9fdW51
c2VkLCBpbnQgaW5fZmQgX191bnVzZWQsIG9mZl90ICpvZmZzZXQgIF9fdW51c2VkLCBzaXplX3Qg
IGNvdW50IF9fdW51c2VkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gMTsNCiAgICArfQ0KICAgICsN
CiAgICAraW50IGdldGdyb3VwbGlzdChjb25zdCBjaGFyICp1c2VyIF9fdW51c2VkLCBnaWRfdCBn
cm91cCBfX3VudXNlZCwgZ2lkX3QgKmdyb3VwcyBfX3VudXNlZCwgaW50ICpuZ3JvdXBzIF9fdW51
c2VkKQ0KICAgICt7DQogICAgKwlyZXR1cm4gMDsNCiAgICArfQ0KICAgICsNCiAgICAraW50IGdl
dGdybmFtX3IoY29uc3QgY2hhciAqbmFtZSBfX3VudXNlZCwgc3RydWN0IGdyb3VwICpncnAgX191
bnVzZWQsDQogICAgKwkJY2hhciAqYnVmIF9fdW51c2VkLCBzaXplX3QgYnVmbGVuIF9fdW51c2Vk
LCBzdHJ1Y3QgZ3JvdXAgKipyZXN1bHQgX191bnVzZWQpDQogICAgK3sNCiAgICArCXJldHVybiAw
Ow0KICAgICt9DQogICAgK2ludCBnZXRncmdpZF9yKGdpZF90IGdpZCBfX3VudXNlZCwgc3RydWN0
IGdyb3VwICpncnAgX191bnVzZWQsDQogICAgKwkJY2hhciAqYnVmIF9fdW51c2VkLCBzaXplX3Qg
YnVmbGVuIF9fdW51c2VkLCBzdHJ1Y3QgZ3JvdXAgKipyZXN1bHQgX191bnVzZWQpDQogICAgK3sN
CiAgICArCXJldHVybiAwOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkIHVrX3N5c2NhbGxfZm5f
X19OUl9jbG9uZSh2b2lkKQ0KICAgICt7DQogICAgK30NCiAgICArDQogICAgKy8qDQogICAgKyAq
IEdsdWUgY29kZQ0KICAgICsgKi8NCiAgICArDQogICAgKyNpbmNsdWRlIDx1Y29udGV4dC5oPg0K
ICAgICsjaW5jbHVkZSA8dWsvc2NoZWQuaD4NCiAgICArI2luY2x1ZGUgPHVrL3RocmVhZC5oPg0K
ICAgICsjaW5jbHVkZSA8dWsvYXNtL2xpbWl0cy5oPg0KICAgICsNCiAgICArI2RlZmluZSBfX2Vy
cm5vX2xvY2F0aW9uIF9fZXJybm8NCiAgICArDQogICAgK3ZvaWQgbWFrZWNvbnRleHQxICh1Y29u
dGV4dF90ICpfX3VjcCwgdm9pZCAoKl9fZnVuYykgKHZvaWQpLCBpbnQgX19hcmdjLCAuLi4pDQog
ICAgK3sNCiAgICArCXN0cnVjdCB1a190aHJlYWQgKmN1cnJlbnQgPSB1a190aHJlYWRfY3VycmVu
dCgpOw0KICAgICsJKigodW5zaWduZWQgbG9uZyAqKSBfX3VjcC0+dWNfc3RhY2suc3Nfc3ApID0g
KHVuc2lnbmVkIGxvbmcpIGN1cnJlbnQ7DQogICAgKwltYWtlY29udGV4dChfX3VjcCwgX19mdW5j
LCBfX2FyZ2MpOw0KICAgICt9DQogICAgKw0KICAgICt2b2lkICphbGxvY19zdGFjaygpDQogICAg
K3sNCiAgICArCXN0cnVjdCB1a19zY2hlZCAqc2NoZWQgPSB1a19zY2hlZF9nZXRfZGVmYXVsdCgp
Ow0KICAgICsJdm9pZCAqc3RhY2sgPSB1a19wYWxsb2Moc2NoZWQtPmFsbG9jYXRvciwgX19TVEFD
S19TSVpFX1BBR0VfT1JERVIpOw0KICAgICsJaWYgKHN0YWNrID09IE5VTEwpDQogICAgKwkJcHJp
bnRmKCJlcnJvciBhbGxvY2F0aW5nIHN0YWNrXG4iKTsNCiAgICArCXJldHVybiBzdGFjazsNCiAg
ICArfQ0KICAgICsNCiAgICArc2l6ZV90IGdldF9zdGFja19zaXplKHZvaWQpDQogICAgK3sNCiAg
ICArCXJldHVybiBfX1NUQUNLX1NJWkU7DQogICAgK30NCiAgICArDQogICAgLS0gDQogICAgMi4x
Ny4xDQogICAgDQogICAgDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhl
bnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5m
by9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:42:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:42:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDlq1-0002pf-WF; Fri, 27 Sep 2019 08:42:53 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlq0-0002oy-4V
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:42:52 +0000
X-Inumbo-ID: ca013e7c-e102-11e9-9670-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id ca013e7c-e102-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:42:51 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 67DBDF200A;
 Fri, 27 Sep 2019 10:42:50 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id MZ8F97-Hk-FD; Fri, 27 Sep 2019 10:42:50 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 40456F2006;
 Fri, 27 Sep 2019 10:42:46 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by puck.office.hd
 (192.168.24.91) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:42:45 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:42:45
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 11/11] Adding extra information
Thread-Index: AQHVdH+t7OdlSNBNTkK44OJ1N5qqFKc/NhGA
Date: Fri, 27 Sep 2019 08:42:45 +0000
Message-ID: <E627F4C4-BBC2-4FE9-9A7D-0964B6F3ABD0@neclab.eu>
References: <20190926153248.30763-1-Charalampos.Mainas@neclab.eu>
 <20190926153248.30763-2-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153248.30763-2-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <BF5F780A136FA7488D10254E7A05887E@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 11/11] Adding extra
 information
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLCBtaWdodCBhZGQgYSBmZXcgbW9yZSBub3RlcyB0byB0aGUgcmVhZG1lIG9u
IHVwc3RyZWFtLg0KDQpSZXZpZXdlZC1ieTogRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVj
bGFiLmV1Pg0KDQrvu79PbiAyNi4wOS4xOSwgMTc6MzIsICJDaGFyYWxhbXBvcyBNYWluYXMiIDxD
aGFyYWxhbXBvcy5NYWluYXNAbmVjbGFiLmV1PiB3cm90ZToNCg0KICAgIFNpZ25lZC1vZmYtYnk6
IENoYXJhbGFtcG9zIE1haW5hcyA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4NCiAgICAt
LS0NCiAgICAgUkVBRE1FLm1kIHwgMTkgKysrKysrKysrKysrKysrKysrLQ0KICAgICAxIGZpbGUg
Y2hhbmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0KICAgIA0KICAgIGRpZmYg
LS1naXQgYS9SRUFETUUubWQgYi9SRUFETUUubWQNCiAgICBpbmRleCA1Y2U2Njc3Li5iZDhjNDVm
IDEwMDY0NA0KICAgIC0tLSBhL1JFQURNRS5tZA0KICAgICsrKyBiL1JFQURNRS5tZA0KICAgIEBA
IC0xLDcgKzEsMjQgQEANCiAgICAgbGliZ28gZm9yIFVuaWtyYWZ0DQogICAgID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09DQogICAgIA0KICAgIC1UaGlzIGlzIHRoZSBwb3J0IG9mIGxpYmdv
IGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5Lg0KICAgICtUaGlzIGlzIHRoZSBwb3J0
IG9mIGxpYmdvIGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5LiBZb3Ugd2lsbCBuZWVk
IHRoZSBmb2xsb3dpbmcNCiAgICArZXh0ZXJuYWwgbGlicmFyaWVzIHRvIG1ha2UgaXQgd29yay4g
DQogICAgKw0KICAgICsrIG5ld2xpYg0KICAgICsrIGNvbXBpbGVyLXJ0DQogICAgKysgbGlidW53
aW5kDQogICAgKysgbGliY3h4DQogICAgKysgbGliY3h4YWJpDQogICAgKysgcHRocmVhZC1lbWJl
ZGRlZA0KICAgICsrIGdjYw0KICAgICsrIGx3aXANCiAgICArKyBsaWJ1Y29udGV4dA0KICAgICsN
CiAgICArV2hlbiBhZGRpbmcgdGhlIGxpYnJhcnkgaW4gdGhlIGRlcGVuZGVuY3kgbGlzdCwgZ2Nj
IHNob3VsZCBzdGF5IGJlZm9yZSBsaWJnbywgZS5nLjoNCiAgICArDQogICAgK2BgYA0KICAgICsu
Li4kKFVLX0xJQlMpL2djYzokKFVLX0xJQlMpL2xpYmdvOi4uLg0KICAgICtgYGANCiAgICAgDQog
ICAgIFBsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAgYXMgd2VsbCBhcyB0aGUgZG9jdW1l
bnRhdGlvbiBpbiB0aGUgYGRvYy9gDQogICAgIHN1YmRpcmVjdG9yeSBvZiB0aGUgbWFpbiB1bmlr
cmFmdCByZXBvc2l0b3J5Lg0KICAgIC0tIA0KICAgIDIuMTcuMQ0KICAgIA0KICAgIA0KDQpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwg
bWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp
c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 08:59:27 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 08:59:27 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDm63-0004U1-Oj; Fri, 27 Sep 2019 08:59:27 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=CKAD=XW=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1iDm62-0004Tr-AG
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 08:59:26 +0000
X-Inumbo-ID: 153bbb68-e105-11e9-9670-12813bfff9fa
Received: from mx1.suse.de (unknown [195.135.220.15])
 by localhost (Halon) with ESMTPS
 id 153bbb68-e105-11e9-9670-12813bfff9fa;
 Fri, 27 Sep 2019 08:59:16 +0000 (UTC)
X-Virus-Scanned: by amavisd-new at test-mx.suse.de
Received: from relay2.suse.de (unknown [195.135.220.254])
 by mx1.suse.de (Postfix) with ESMTP id 6B33FAFCF;
 Fri, 27 Sep 2019 08:59:15 +0000 (UTC)
To: Lars Kurth <lars.kurth@xenproject.org>
References: <cover.1569525222.git.lars.kurth@citrix.com>
 <cover.1569525222.git.lars.kurth@citrix.com>
 <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <10b633de-2238-bad7-3d2a-13899b7497d6@suse.com>
Date: Fri, 27 Sep 2019 10:59:18 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [PATCH v2 5/6] Add guide on Communication Best
 Practice
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, xen-devel@lists.xenproject.org,
 win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMjYuMDkuMjAxOSAyMTozOSwgTGFycyBLdXJ0aCB3cm90ZToKPiArIyMjIEV4cHJlc3MgYXBw
cmVjaWF0aW9uCj4gK0FzIHRoZSBuYXR1cmUgb2YgY29kZSByZXZpZXcgdG8gZmluZCBidWdzIGFu
ZCBwb3NzaWJsZSBpc3N1ZXMsIGl0IGlzIHZlcnkgZWFzeSBmb3IKPiArcmV2aWV3ZXJzIHRvIGdl
dCBpbnRvIGEgbW9kZSBvZiBvcGVyYXRpb24gd2hlcmUgdGhlIHBhdGNoIHJldmlldyBlbmRzIHVw
IGJlaW5nIGEgbGlzdAo+ICtvZiBpc3N1ZXMsIG5vdCBtZW50aW9uaW5nIHdoYXQgaXMgcmlnaHQg
YW5kIHdlbGwgZG9uZS4gVGhpcyBjYW4gbGVhZCB0byB0aGUgY29kZQo+ICtzdWJtaXR0ZXIgaW50
ZXJwcmV0aW5nIHlvdXIgZmVlZGJhY2sgaW4gYSBuZWdhdGl2ZSB3YXkuCj4gKwo+ICtUaGUgb3Bl
bmluZyBvZiBhIGNvZGUgcmV2aWV3IHByb3ZpZGVzIGFuIG9wcG9ydHVuaXR5IHRvIGFkZHJlc3Mg
dGhpcyBhbmQgYWxzbyBzZXRzIHRoZQo+ICt0b25lIGZvciB0aGUgcmVzdCBvZiB0aGUgY29kZSBy
ZXZpZXcuIFN0YXJ0aW5nICoqZXZlcnkqKiByZXZpZXcgb24gYSBwb3NpdGl2ZSBub3RlLCBoZWxw
cwo+ICtzZXQgdGhlIHRvbmUgZm9yIHRoZSByZXN0IG9mIHRoZSByZXZpZXcuCj4gKwo+ICtGb3Ig
YW4gaW5pdGlhbCBwYXRjaCwgeW91IGNhbiB1c2UgcGhyYXNlcyBzdWNoIGFzCj4gKz4gVGhhbmtz
IGZvciB0aGUgcGF0Y2gKPiArPiBUaGFua3MgZm9yIGRvaW5nIHRoaXMKPiArCj4gK0ZvciBmdXJ0
aGVyIHJldmlzaW9ucyB3aXRoaW4gYSByZXZpZXcsIHBocmFzZXMgc3VjaCBhcwo+ICs+IFRoYW5r
IHlvdSBmb3IgYWRkcmVzc2luZyB0aGUgbGFzdCBzZXQgb2YgY2hhbmdlcwo+ICsKPiArSWYgeW91
IGJlbGlldmUgdGhlIGNvZGUgd2FzIGdvb2QsIGl0IGlzIGdvb2QgcHJhY3RpY2UgdG8gaGlnaGxp
Z2h0IHRoaXMgYnkgdXNpbmcgcGhyYXNlcwo+ICtzdWNoIGFzCj4gKz4gTG9va3MgZ29vZCwganVz
dCBhIGZldyBjb21tZW50cwo+ICs+IFRoZSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgc2luY2UgdGhl
IGxhc3QgdmVyc2lvbiBsb29rIGdvb2QKPiArCj4gK0lmIHlvdSB0aGluayB0aGVyZSB3ZXJlIGlz
c3VlcyB0b28gbWFueSB3aXRoIHRoZSBjb2RlIHRvIHVzZSBvbmUgb2YgdGhlIHBocmFzZXMsCj4g
K3lvdSBjYW4gc3RpbGwgc3RhcnQgb24gYSBwb3NpdGl2ZSBub3RlLCBieSBmb3IgZXhhbXBsZSBz
YXlpbmcKPiArPiBJIHRoaW5rIHRoaXMgaXMgYSBnb29kIGNoYW5nZQo+ICs+IEkgdGhpbmsgdGhp
cyBpcyBhIGdvb2QgZmVhdHVyZSBwcm9wb3NhbAo+ICsKPiArSXQgaXMgYWxzbyBlbnRpcmVseSBm
aW5lIHRvIGhpZ2hsaWdodCBzcGVjaWZpYyBjaGFuZ2VzIGFzIGdvb2QuIFRoZSBiZXN0IHBsYWNl
IHRvCj4gK2RvIHRoaXMsIGlzIGF0IHRvcCBvZiBhIHBhdGNoLCBhcyBhZGRyZXNzaW5nIGNvZGUg
cmV2aWV3IGNvbW1lbnRzIHR5cGljYWxseSByZXF1aXJlcwo+ICthIGNvbnRyaWJ1dG9yIHRvIGdv
IHRocm91Z2ggdGhlIGxpc3Qgb2YgdGhpbmdzIHRvIGFkZHJlc3MgYW5kIGFuIGluLWxpbmVkIHBv
c2l0aXZlCj4gK2NvbW1lbnQgaXMgbGlrZWx5IHRvIGJyZWFrIHRoYXQgd29ya2Zsb3cuCj4gKwo+
ICtZb3Ugc2hvdWxkIGFsc28gY29uc2lkZXIsIHRoYXQgaWYgeW91IHJldmlldyBhIHBhdGNoIG9m
IGFuIGV4cGVyaWVuY2VkCj4gK2NvbnRyaWJ1dG9yIHBocmFzZXMgc3VjaCBhcyAqVGhhbmtzIGZv
ciB0aGUgcGF0Y2gqIGNvdWxkIGNvbWUgYWNyb3NzIGFzCj4gK3BhdHJvbml6aW5nLCB3aGlsZSB1
c2luZyAqVGhhbmtzIGZvciBkb2luZyB0aGlzKiBpcyBsZXNzIGxpa2VseSB0byBiZSBpbnRlcnBy
ZXRlZAo+ICthcyBzdWNoLgo+ICsKPiArQXBwcmVjaWF0aW9uIHNob3VsZCBhbHNvIGJlIGV4cHJl
c3NlZCBieSBwYXRjaCBhdXRob3JzIHdoZW4gYXNraW5nIGZvciBjbGFyaWZpY2F0aW9ucwo+ICt0
byBhIHJldmlldyBvciByZXNwb25kaW5nIHRvIHF1ZXN0aW9ucy4gQSBzaW1wbGUKPiArPiBUaGFu
ayB5b3UgZm9yIHlvdXIgZmVlZGJhY2sKPiArPiBUaGFuayB5b3UgZm9yIHlvdXIgcmVwbHkKPiAr
PiBUaGFuayB5b3UgWFhYIQo+ICsKPiAraXMgbm9ybWFsbHkgc3VmZmljaWVudC4KClRvIGFsbCBv
ZiB0aGlzIEkgY2FuJ3QgcmVzaXN0IGdpdmluZyBhIHJlbWFyayB0aGF0IEkndmUgYWxyZWFkeSBn
aXZlbgp3aGVuIGRpc2N1c3NpbmcgdGhlIG1hdHRlciBpbiBwZXJzb246IEknbSBub3Qgc3VyZSBh
Ym91dCBFbmdsaXNoLCBidXQKaW4gR2VybWFuIHRoZSB3b3JkICJQaHJhc2UiIGFsc28gaGFzIGFu
LCBhdCB0aW1lcyB2ZXJ5LCBuZWdhdGl2ZQptZWFuaW5nLiBXaGVuIEkgZ2V0IHJldmlldyBmZWVk
YmFjayBzdGFydGluZyBsaWtlIHN1Z2dlc3RlZCBhYm92ZSwgaXQKZGVmaW5pdGVseSBmZWVscyB0
byBtZSBtb3JlIGxpa2UgdGhpcyAodGhlIHN0YXRlbWVudCB3YXMgYWRkZWQgdGhlcmUKanVzdCBm
b3IgaXQgdG8gYmUgdGhlcmUpLiBJIHJlYWxpemUgdGhpcyBtYXkgbm90IGFsd2F5cyAoYW5kIHBl
cmhhcHMKZXZlbiBpbiBhIG1ham9yaXR5IG9mIHNpdHVhdGlvbnMpIGJlIHRoZSBjYXNlLCBidXQg
dGhhdCdzIGhvdyBpdCBmZWVscwp0byBtZSBuZXZlcnRoZWxlc3MuIEFzIGEgcmVzdWx0IEkgd291
bGQgcmF0aGVyIHJhcmVseSwgaWYgZXZlciwgc3RhcnQKbGlrZSB0aGlzIChvbiB0aGUgYmFzaXMg
b2YgImRvbid0IGRvIHRvIG90aGVycyB3aGF0IHlvdSBkaXNsaWtlCnlvdXJzZWxmIik7IGEgY2Fz
ZSB3aGVyZSBJIG1pZ2h0IGRvIHNvIHdvdWxkIGJlIHdoZW4gSSBoYWQgYXNrZWQgZm9yCihvciBv
ZmZsb2FkZWQpIHRoZSBwdXR0aW5nIHRvZ2V0aGVyIG9mIGEgcGFydGljdWxhciBjaGFuZ2UuCgpF
dmVuIHdvcnNlLCB0aGVyZSBoYXZlIGJlZW4gKGFsc28gdmVyeSByZWNlbnQpIGV4YW1wbGVzIHdo
ZXJlIHJlcGxpZXMKY29tZSBiYWNrIHNheWluZyBqdXN0ICJUaGFuayB5b3UiIChlLmcuIGZvciBh
biBhY2spLiBTdWNoIGNlcnRhaW5seQpnZXQgc2VudCB3aXRoIGdvb2QgaW50ZW50aW9ucywgYnV0
IHBlb3BsZSBkb2luZyBzbyBsaWtlbHkgb3Zlcmxvb2sKdGhlIGZhY3QgdGhhdCB0aGVyZSdzIGFs
cmVhZHkgd2F5IHRvbyBtdWNoIGVtYWlsIHRvIHJlYWQgZm9yIG1hbnkgb2YKdXMuIChUaGUgc2Ft
ZSBhcHBsaWVzIHRvIG90aGVyIG5ldGlxdWV0dGUgYXNwZWN0cyB0aGF0IEkga2VlcAptZW50aW9u
aW5nIG9uIGUuZy4gc3VtbWl0cywgYnV0IHdpdGggYXBwYXJlbnRseSBsaXR0bGUgdG8gbm8gZWZm
ZWN0OgpQZW9wbGUgZnJlcXVlbnRseSBmYWlsIHRvIHN0cmlwIHVubmVjZXNzYXJ5IGNvbnRleHQg
d2hlbiByZXBseWluZywKcmVxdWlyaW5nIF9ldmVyeV8gcmVhZGVyIHRvIHNjcm9sbCB0aHJvdWdo
IGEgcGVyaGFwcyBsb25nIG1haWwganVzdAp0byBmaW5kIHRoYXQgdGhlcmUncyBhbG1vc3Qgbm90
aGluZyBvZiBpbnRlcmVzdC4gUGVvcGxlIGFsc28gc2VlbSB0bwpoYXZlIGRpZmZpY3VsdHkgdW5k
ZXJzdGFuZGluZyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFRvIGFuZCBDYy4pCgpUaGUgYm90dG9t
IGxpbmUgb2YgdGhpcyBpcyAtIHRoZSAiYmVpbmcga2luZCB0byBvbmUgYW5vdGhlciIgYXNwZWN0
Cm9mIGFza2luZyBmb3IgdGhpcyBiZWhhdmlvciBuZWVkcyB0byBiZSB3ZWlnaGVkIGNhcmVmdWxs
eSBhZ2FpbnN0IGl0cwplZmZlY3RzIG9mIHVuZHVseSBjb25zdW1pbmcgZXZlcnlib2R5J3MgdGlt
ZS4KCkphbgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
TWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5v
cmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1k
ZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 09:04:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 09:04:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDmAS-0006Ht-UP; Fri, 27 Sep 2019 09:04:00 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=tE9W=XW=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iDmAR-0006Hj-AX
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 09:03:59 +0000
X-Inumbo-ID: bd68b002-e105-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id bd68b002-e105-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 09:03:58 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id CD20B337;
 Fri, 27 Sep 2019 02:03:57 -0700 (PDT)
Received: from [10.1.196.50] (e108454-lin.cambridge.arm.com [10.1.196.50])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id B09843F739;
 Fri, 27 Sep 2019 02:03:56 -0700 (PDT)
To: Jia He <justin.he@arm.com>, minios-devel@lists.xenproject.org,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190927065351.70074-1-justin.he@arm.com>
 <20190927065351.70074-4-justin.he@arm.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <84782260-395f-13e9-41c6-84fcdc6a0fee@arm.com>
Date: Fri, 27 Sep 2019 10:03:55 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190927065351.70074-4-justin.he@arm.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 3/6] plat/kvm: Implement stub
 of ukplat_stack_set_current_thread for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSmlhLAoKT24gMjcvMDkvMjAxOSAwNzo1MywgSmlhIEhlIHdyb3RlOgo+IFRoaXMgcGF0Y2gg
aXMgdG8gZml4IHRoZSBjb21waWxhdGlvbiBlcnJvciB3aGVuIGJ1aWxkaW5nIGFybTY0IGt2bSBp
bWFnZQo+IGJ1aWxkL3VuaWtyYWZ0X2t2bS1hcm02NC5vOiBJbiBmdW5jdGlvbiBgc2NoZWRjb29w
X3NjaGVkdWxlJzoKPiBsaWIvdWtzY2hlZGNvb3Avc2NoZWRjb29wLmM6MTA3OiB1bmRlZmluZWQg
cmVmZXJlbmNlIHRvCj4gYHVrcGxhdF9zdGFja19zZXRfY3VycmVudF90aHJlYWQnCgpJdCB3b3Vs
ZCBiZSBnb29kIGlmIHlvdSBleHBsYWluIHRoZSByZWFzb24gd2h5IHRoZSBzdHViIGlzIGVtcHR5
LgoKQ2hlZXJzLAoKPiAKPiBTaWduZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29t
Pgo+IC0tLQo+ICAgcGxhdC9rdm0vTWFrZWZpbGUudWsgIHwgIDEgKwo+ICAgcGxhdC9rdm0vYXJt
L21lbW9yeS5jIHwgMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g
ICAyIGZpbGVzIGNoYW5nZWQsIDQwIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0
NCBwbGF0L2t2bS9hcm0vbWVtb3J5LmMKPiAKPiBkaWZmIC0tZ2l0IGEvcGxhdC9rdm0vTWFrZWZp
bGUudWsgYi9wbGF0L2t2bS9NYWtlZmlsZS51awo+IGluZGV4IDdjZTkyODguLjYzYmQ1YjAgMTAw
NjQ0Cj4gLS0tIGEvcGxhdC9rdm0vTWFrZWZpbGUudWsKPiArKysgYi9wbGF0L2t2bS9NYWtlZmls
ZS51awo+IEBAIC04NCw2ICs4NCw3IEBAIExJQktWTVBMQVRfU1JDUy0kKENPTkZJR19BUkNIX0FS
TV82NCkgKz0gJChVS19QTEFUX0NPTU1PTl9CQVNFKS9hcm0vdGhyZWFkX3N0YXJ0Cj4gICBMSUJL
Vk1QTEFUX1NSQ1MteSArPSAkKFVLX1BMQVRfQ09NTU9OX0JBU0UpL3RocmVhZC5jfGNvbW1vbgo+
ICAgTElCS1ZNUExBVF9TUkNTLXkgKz0gJChVS19QTEFUX0NPTU1PTl9CQVNFKS9zd19jdHguY3xj
b21tb24KPiAgIGVuZGlmCj4gK0xJQktWTVBMQVRfU1JDUy0kKENPTkZJR19BUkNIX0FSTV82NCkg
Kz0gJChMSUJLVk1QTEFUX0JBU0UpL2FybS9tZW1vcnkuY3xhcm0KPiAgIExJQktWTVBMQVRfU1JD
Uy0kKENPTkZJR19BUkNIX0FSTV82NCkgKz0gJChMSUJLVk1QTEFUX0JBU0UpL2FybS9lbnRyeTY0
LlMKPiAgIExJQktWTVBMQVRfU1JDUy0kKENPTkZJR19BUkNIX0FSTV82NCkgKz0gJChMSUJLVk1Q
TEFUX0JBU0UpL2FybS9leGNlcHRpb25zLlMKPiAgIExJQktWTVBMQVRfU1JDUy0kKENPTkZJR19B
UkNIX0FSTV82NCkgKz0gJChMSUJLVk1QTEFUX0JBU0UpL2FybS9wYWdldGFibGU2NC5TCj4gZGlm
ZiAtLWdpdCBhL3BsYXQva3ZtL2FybS9tZW1vcnkuYyBiL3BsYXQva3ZtL2FybS9tZW1vcnkuYwo+
IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYzQwZDIxMwo+IC0tLSAvZGV2
L251bGwKPiArKysgYi9wbGF0L2t2bS9hcm0vbWVtb3J5LmMKPiBAQCAtMCwwICsxLDM5IEBACj4g
Ky8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KPiArLyoKPiArICog
QXV0aG9yczogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KPiArICoKPiArICog
Q29weXJpZ2h0IChjKSAyMDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KPiArICoKPiArICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cj4gKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwo+ICsgKiBhcmUgbWV0Ogo+ICsgKgo+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+ICsgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCj4gKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKPiArICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KPiAr
ICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5h
bWVzIG9mIGl0cwo+ICsgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQo+ICsgKiAgICB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgo+ICsgKgo+ICsgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTICJBUyBJUyIKPiArICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQo+ICsgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQo+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCj4gKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKPiArICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKPiArICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCj4gKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCj4gKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCj4gKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCj4gKyAqIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgo+ICsgKgo+ICsgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJBQ1RF
RCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx1ay9lc3Nl
bnRpYWxzLmg+Cj4gKwo+ICt2b2lkIHVrcGxhdF9zdGFja19zZXRfY3VycmVudF90aHJlYWQodm9p
ZCAqdGhyZWFkX2FkZHIgX191bnVzZWQpCj4gK3sKPiArfQo+IAoKLS0gCkp1bGllbiBHcmFsbAoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 09:07:46 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 09:07:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDmE6-0006Pa-JA; Fri, 27 Sep 2019 09:07:46 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=tE9W=XW=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iDmE4-0006PL-JJ
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 09:07:44 +0000
X-Inumbo-ID: 4403cd36-e106-11e9-9671-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 4403cd36-e106-11e9-9671-12813bfff9fa;
 Fri, 27 Sep 2019 09:07:43 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 81262337;
 Fri, 27 Sep 2019 02:07:43 -0700 (PDT)
Received: from [10.1.196.50] (e108454-lin.cambridge.arm.com [10.1.196.50])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 917BE3F739;
 Fri, 27 Sep 2019 02:07:42 -0700 (PDT)
To: Jia He <justin.he@arm.com>, minios-devel@lists.xenproject.org,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190927065351.70074-1-justin.he@arm.com>
 <20190927065351.70074-6-justin.he@arm.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <4aa45f9c-7d9e-0154-0468-34421a620a5b@arm.com>
Date: Fri, 27 Sep 2019 10:07:41 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190927065351.70074-6-justin.he@arm.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 5/6] plat/common: Add macro
 to avoid nested including header file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGksCgpPbiAyNy8wOS8yMDE5IDA3OjUzLCBKaWEgSGUgd3JvdGU6Cj4gVGhpcyBpcyB0byBhZGQg
dGhlIG1hY3JvIHRvIGF2b2lkIGF2b2lkIG5lc3RlZCBpbmNsdWRpbmcgaGVhZGVyIGZpbGUKCnMv
dGhlIG1hY3JvL3RoZSBoZWFkZXIgZ3VhcmRzLwoKQnV0IHRoZSBoZWFkZXIgZ3VhcmQgZG9lcyBu
b3QgcHJldmVudCBuZXN0aW5nICh3aGljaCBJIHVuZGVyc3RhbmQgYXMgY2FsbGluZyAKI2luY2x1
ZGUgImNwdS5oIiksIGl0IG9ubHkgZW5zdXJlIHRoZSBkZWZpbml0aW9ucyBwcmVzZW50IGluIHRo
ZSBoZWFkZXIgYXJlIG9ubHkgCmFkZCBvbmUgZXZlbiBpZiB0aGUgaGVhZGVyIGlzIGluY2x1ZGVk
IG11bHRpcGxlIHRpbWVzLgoKQ2hlZXJzLAoKPiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02
NC9jcHUuaAo+IAo+IFNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Cj4g
LS0tCj4gICBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaCB8IDUgKysrKysKPiAg
IDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKPiAKPiBkaWZmIC0tZ2l0IGEvcGxhdC9j
b21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9h
cm02NC9jcHUuaAo+IGluZGV4IDIzYWRmOGQuLmZmMzNmN2MgMTAwNjQ0Cj4gLS0tIGEvcGxhdC9j
b21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmgKPiArKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRl
L2FybS9hcm02NC9jcHUuaAo+IEBAIC0zMiw2ICszMiw5IEBACj4gICAgKiBUSElTIEhFQURFUiBN
QVkgTk9UIEJFIEVYVFJBQ1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLgo+ICAgICovCj4gICAK
PiArI2lmbmRlZiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18KPiArI2RlZmluZSBfX1BMQVRf
Q09NTU9OX0FSTTY0X0NQVV9IX18KPiArCj4gICAjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiAgICNp
bmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+Cj4gICAjaW5jbHVkZSA8c3dfY3R4Lmg+Cj4gQEAgLTEz
NiwzICsxMzksNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pbml0X2V4dHJlZ3Moc3RydWN0
IHN3X2N0eCAqY3R4KQo+ICAgewo+ICAgCWN0eC0+ZXh0cmVncyA9ICh1aW50cHRyX3QpY3R4ICsg
c2l6ZW9mKHN0cnVjdCBzd19jdHgpOwo+ICAgfQo+ICsKPiArI2VuZGlmIC8qIF9fUExBVF9DT01N
T05fQVJNNjRfQ1BVX0hfXyAqLwo+IAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 09:14:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 09:14:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDmKX-0007R8-DT; Fri, 27 Sep 2019 09:14:25 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=CKAD=XW=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1iDmKW-0007Qx-Pl
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 09:14:24 +0000
X-Inumbo-ID: 27c39916-e107-11e9-9671-12813bfff9fa
Received: from mx1.suse.de (unknown [195.135.220.15])
 by localhost (Halon) with ESMTPS
 id 27c39916-e107-11e9-9671-12813bfff9fa;
 Fri, 27 Sep 2019 09:14:06 +0000 (UTC)
X-Virus-Scanned: by amavisd-new at test-mx.suse.de
Received: from relay2.suse.de (unknown [195.135.220.254])
 by mx1.suse.de (Postfix) with ESMTP id 5D50FAFCB;
 Fri, 27 Sep 2019 09:14:05 +0000 (UTC)
To: Lars Kurth <lars.kurth@xenproject.org>
References: <cover.1569525222.git.lars.kurth@citrix.com>
 <cover.1569525222.git.lars.kurth@citrix.com>
 <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <f28e67ef-2f93-3b61-bc52-304f82c3e44a@suse.com>
Date: Fri, 27 Sep 2019 11:14:08 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [PATCH v2 5/6] Add guide on Communication Best
 Practice
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Lars Kurth <lars.kurth@citrix.com>, xen-api@lists.xenproject.org,
 minios-devel@lists.xenproject.org, committers@xenproject.org,
 mirageos-devel@lists.xenproject.org, xen-devel@lists.xenproject.org,
 win-pv-devel@lists.xenproject.org
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMjYuMDkuMjAxOSAyMTozOSwgTGFycyBLdXJ0aCB3cm90ZToKPiArIyMjIFZlcmJvc2UgdnMu
IHRlcnNlCj4gK0R1ZSB0byB0aGUgdGltZSBpdCB0YWtlcyB0byByZXZpZXcgYW5kIGNvbXBvc2Ug
Y29kZSByZXZpZXdlciwgcmV2aWV3ZXJzIG9mdGVuIGFkb3B0IGEKPiArdGVyc2Ugc3R5bGUuIEl0
IGlzIG5vdCB1bnVzdWFsIHRvIHNlZSByZXZpZXcgY29tbWVudHMgc3VjaCBhcwo+ICs+IHR5cG8K
PiArPiBzL3Jlc2lvbnMvcmVnaW9ucy8KPiArPiBjb2Rpbmcgc3R5bGUKPiArPiBjb2Rpbmcgc3R5
bGU6IGJyYWNrZXRzIG5vdCBuZWVkZWQKPiArZXRjLgo+ICsKPiArVGVyc2UgY29kZSByZXZpZXcg
c3R5bGUgaGFzIGl0cyBwbGFjZSBhbmQgY2FuIGJlIHByb2R1Y3RpdmUgZm9yIGJvdGggdGhlIHJl
dmlld2VyIGFuZAo+ICt0aGUgYXV0aG9yLiBIb3dldmVyLCBvdmVydXNlIGNhbiBjb21lIGFjcm9z
cyBhcyB1bmZyaWVuZGx5LCBsYWNraW5nIGVtcGF0aHkgYW5kCj4gK2NhbiB0aHVzIGNyZWF0ZSBh
IG5lZ2F0aXZlIGltcHJlc3Npb24gd2l0aCB0aGUgYXV0aG9yIG9mIGEgcGF0Y2guIFRoaXMgaXMg
aW4gcGFydGljdWxhcgo+ICt0cnVlLCB3aGVuIHlvdSBkbyBub3Qga25vdyB0aGUgYXV0aG9yIG9y
IHRoZSBhdXRob3IgaXMgYSBuZXdjb21lci4gVGVyc2UKPiArY29tbXVuaWNhdGlvbiBzdHlsZXMg
Y2FuIGFsc28gYmUgcGVyY2VpdmVkIGFzIHJ1ZGUgaW4gc29tZSBjdWx0dXJlcy4KCkFuZCBhbm90
aGVyIHJlbWFyayBoZXJlOiBOb3QgYmVpbmcgdGVyc2UgaW4gc2l0dWF0aW9ucyBsaWtlIHRoZSBv
bmVzCmVudW1lcmF0ZWQgYXMgZXhhbXBsZXMgYWJvdmUgaXMgYSBkb3VibGUgd2FzdGUgb2YgdGhl
IHJldmlld2VyJ3MgdGltZToKVGhleSBzaG91bGRuJ3QgZXZlbiBuZWVkIHRvIG1ha2Ugc3VjaCBj
b21tZW50cywgZXNwZWNpYWxseSBub3QgbWFueQp0aW1lcyBmb3IgYSBzaW5nbGUgcGF0Y2ggKHNl
ZSB5b3VyIG1lbnRpb24gb2YgIm92ZXJ1c2UiKS4gSSByZWFsaXplCndlIHN0aWxsIGhhdmUgbm8g
YXV0b21hdGVkIG1lY2hhbmlzbSB0byBjaGVjayBzdHlsZSBhc3BlY3RzLCBidXQKYW55Ym9keSBj
YW4gZWFzaWx5IGxvb2sgb3ZlciB0aGVpciBwYXRjaGVzIGJlZm9yZSBzdWJtaXR0aW5nIHRoZW0u
CkFuZCBmb3IgYW4gb2NjYXNpb25hbCBpc3N1ZSBJIHRoaW5rIGEgdGVyc2UgcmVwbHkgaXMgcXVp
dGUgcmVhc29uYWJsZQp0byBoYXZlLgoKT3ZlcmFsbCBJJ20gc2VlaW5nIHRoZSBnb29kIGludGVu
dGlvbnMgb2YgdGhpcyBkb2N1bWVudCwgeWV0IEknZCBzdGlsbAp2b3RlIGF0IGxlYXN0IC0xIG9u
IGl0IGlmIGl0IGNhbWUgdG8gYSB2b3RlLiBGb2xsb3dpbmcgZXZlbiBqdXN0IGEKZmFpciBwYXJ0
IG9mIGl0IGlzIGEgY29uc2lkZXJhYmxlIGV4dHJhIGFtb3VudCBvZiB0aW1lIHRvIGludmVzdCBp
bgpyZXZpZXdzLCB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhIHNldmVyZSByZXZpZXdpbmcgYm90dGxl
bmVjay4gSWYgSSBoYXZlCnRvIGp1ZGdlIGJldHdlZW4gZG9pbmcgYSBiYWQgKHN0eWxpc3RpY2Fs
bHkgYWNjb3JkaW5nIHRvIHRoaXMgZG9jLCBub3QKdGVjaG5pY2FsbHkpIHJldmlldyBvciBub25l
IGF0IGFsbCAoYmVjYXVzZSBvZiB0aW1lIGNvbnN0cmFpbnRzKSwgSSdkCmZhdm9yIHRoZSBmb3Jt
ZXIuIFVubGVzcyBvZiBjb3Vyc2UgSSdtIGFza2VkIHRvIHN0b3AgZG9pbmcgc28sIGluCndoaWNo
IGNhc2UgSSdkIGV4cGVjdCB3aG9ldmVyIGFza3MgdG8gYXJyYW5nZSBmb3IgdGhlIHJldmlld3Mg
dG8gYmUKZG9uZSBieSBzb21lb25lIGVsc2UgaW4gZHVlIGNvdXJzZS4KCkknbSBzb3JyeSBmb3Ig
KGxpa2VseSkgc291bmRpbmcgZGVzdHJ1Y3RpdmUgaGVyZS4KCkphbgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 09:26:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 09:26:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDmWS-0000T2-Ki; Fri, 27 Sep 2019 09:26:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDmWR-0000St-C1
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 09:26:43 +0000
X-Inumbo-ID: e85fb636-e108-11e9-97fb-bc764e2007e4
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [2a01:111:f400:fe06::612]) by localhost (Halon) with ESMTPS
 id e85fb636-e108-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 09:26:39 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=nkSOc72CqLwymjfj/CXGLwrlmRwa7y+EOjSWHlq3Yuk=;
 b=GbUcIt1Bdv/HpYOuBo1nDjwSTMHK8uGqrRDuFEuSirbWQEtZkoRw3jPf5eGxj+3/+nIctbOvgFeFpow4LIwyrJrpNMdLdbvP21jvP4qrjzPnNcLfVC1GwsD02VuPhbQNO/5nS8S4WU259J5IsI4xciWQM5yqjPJmQDFT5DhZQ/0=
Received: from VI1PR0801CA0068.eurprd08.prod.outlook.com
 (2603:10a6:800:7d::12) by AM0PR08MB3970.eurprd08.prod.outlook.com
 (2603:10a6:208:131::21) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.18; Fri, 27 Sep
 2019 09:26:35 +0000
Received: from DB5EUR03FT020.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e0a::206) by VI1PR0801CA0068.outlook.office365.com
 (2603:10a6:800:7d::12) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2305.17 via Frontend
 Transport; Fri, 27 Sep 2019 09:26:35 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 DB5EUR03FT020.mail.protection.outlook.com (10.152.20.134) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id
 15.20.2305.15 via Frontend Transport; Fri, 27 Sep 2019 09:26:34 +0000
Received: ("Tessian outbound 851a1162fca7:v33");
 Fri, 27 Sep 2019 09:26:32 +0000
X-CR-MTA-TID: 64aa7808
Received: from 2b09b6d36659.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.13.51]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 5D17052E-55BD-4E51-95D9-FE29B6E3ED71.1; 
 Fri, 27 Sep 2019 09:26:27 +0000
Received: from EUR04-HE1-obe.outbound.protection.outlook.com
 (mail-he1eur04lp2051.outbound.protection.outlook.com [104.47.13.51])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2b09b6d36659.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Fri, 27 Sep 2019 09:26:27 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=WfTYrJSiwJKUQOD00OsKgiDR4WAhleOlDHze6ZBCbf/a2YSOt80GjdXHeZXeiNHa6qKXSdWHfmKFIp3W9t5t42yyI5zB1h7Olf+NS32yFYAsQd4wE6ENk9Q3fp9Zqe5jt6BShU5c+QKUlU4RPgHOUzv61x3XT/YB+az1mQyRh1Zcp3mepArUqhetpZl5xb2hIQACddAh0VG/k5ePLVLM4BQ4UYqS3cQj5dhGRX0EhSIdIyjn3vO2O3VlUeh/Hp8Evv3awg5wypid18lqbLlsMGyonANB8zKcOnSPkxf5LVT4+EiZ1kf4DAKw/oTFaMqdKenrfeX44LR3JlZdnLbClA==
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=f03YdR6GFkPL+RJbO/NJSt+97iC4AZHxuY3Ro7jxRag=;
 b=T76qP92pVkUJhL4mXB8BeeLnMFuQIuPw2jmXbej2IC3S2IiNrD64bZXe5nWAqZB/1zvrlqVBZ0a10YAdBwxtsmBlEFVH6aHtyE9HKStp3xTXc2K4/uG3U3WWcyU8yhuNbkdOm6NoQemYEDkkeY/pmtyn5DUhsi3XspQglWHJ8z1Et9gJaYtN4view6xnZge95bMtzdbN9HwIVBIizYby22YSQn8znHzwgcXqRhvlkppwzdGhIOy17P1X5PwuiaTGxYN1qylFz3RaZTixZEghMV6ftQaHo522cDIvQ3zsXYk4un8JZSlAkMfSbQQ3oAFvgdPHT4Cq9pMfxZL7d/2Gyg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=f03YdR6GFkPL+RJbO/NJSt+97iC4AZHxuY3Ro7jxRag=;
 b=QbX3QXsVvf9oQU3rkPLaeUTdZ7Oj8JaNm+NHAp5AjlDBKzAFD2O0tO3PaVRoLPxhAV3GwUrq85C3rX38MSfjScmr5w2I4fdlmqkUGJ6YCCApM1SCX6qfRHc9cNxn9Akg/m06gidYYbEf9RdyhRAXEqn4ngLivciQYBWstFGOnB0=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3643.eurprd08.prod.outlook.com (20.176.237.224) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.23; Fri, 27 Sep 2019 09:26:25 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2305.017; Fri, 27 Sep 2019
 09:26:25 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCH v2 5/6] plat/common: Add macro to avoid nested
 including header file
Thread-Index: AQHVdQBlHrrC9d2UsEGp7u6OmuZsvqc/PAeAgAAFCSA=
Date: Fri, 27 Sep 2019 09:26:25 +0000
Message-ID: <DB7PR08MB30829EA928E03444BA35FC3BF7810@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190927065351.70074-1-justin.he@arm.com>
 <20190927065351.70074-6-justin.he@arm.com>
 <4aa45f9c-7d9e-0154-0468-34421a620a5b@arm.com>
In-Reply-To: <4aa45f9c-7d9e-0154-0468-34421a620a5b@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: e798a1eb-0ca9-42fa-9c88-84eeb239aab9.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 08b19b14-74fb-4b53-8f8c-08d7432cc9f9
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3643; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3643:|DB7PR08MB3643:|AM0PR08MB3970:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <AM0PR08MB39707B24C3C83B33EC92B0B2F7810@AM0PR08MB3970.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:9508;OLM:9508;
x-forefront-prvs: 0173C6D4D5
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(346002)(366004)(396003)(376002)(136003)(189003)(199004)(13464003)(14454004)(8936002)(2501003)(229853002)(6436002)(66946007)(9686003)(86362001)(4326008)(186003)(71190400001)(71200400001)(5660300002)(26005)(8676002)(316002)(2906002)(110136005)(102836004)(6246003)(55236004)(76116006)(53546011)(6506007)(54906003)(7696005)(7736002)(76176011)(478600001)(476003)(33656002)(486006)(11346002)(81166006)(55016002)(81156014)(3846002)(305945005)(256004)(52536014)(64756008)(66556008)(66446008)(25786009)(74316002)(6116002)(446003)(99286004)(66066001)(66476007);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3643;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: 3qzZhDpfOIEEMt0Qj/6rf07vskRdsaeHDS1ibKlv96/70jNCDamWLUQIt2ZaibjuZJRMEvpfH4v0kdkjZyRpSW0xncPWCgIE692HcQKyua/COT/pBc9Cz9WseLyWsJWg6PFF11Lk5I9zi4Iv6SIiVgt8y8FA2Nxf2BlSrrdOOod/iXc0UqwjN4yr6iayCswi0I3gvBY9bi0SMDuQ0XRTNPPR/bL4d7Vs1Zxp/liDGTHYcRhY84L/jAkd2RrH1JcLGoG+dVgF52HQPqktkdqWJXYTyB6jZpSaJioTeuLkCXpoqasxPwxVPfIFBeIXSVBq6F1O95GerW2NJ/WClKP5c9af4bdXRbgNmo9CrbaYfZkbmN+qKKS0/EL8pvvSBXMmoi33/ugMiQTnxtle8Zem9z1pTRrg5yUuN7EtSxw1hhU=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3643
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: DB5EUR03FT020.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(346002)(39860400002)(376002)(396003)(136003)(40434004)(13464003)(199004)(189003)(70586007)(70206006)(25786009)(7696005)(26826003)(99286004)(8936002)(81166006)(81156014)(486006)(8676002)(2906002)(76130400001)(50466002)(6116002)(3846002)(478600001)(2486003)(52536014)(66066001)(47776003)(86362001)(5660300002)(102836004)(22756006)(55016002)(14444005)(5024004)(356004)(186003)(316002)(6246003)(107886003)(436003)(14454004)(53546011)(6506007)(33656002)(23676004)(4326008)(74316002)(11346002)(54906003)(2501003)(446003)(229853002)(126002)(76176011)(63350400001)(9686003)(7736002)(305945005)(26005)(476003)(336012)(110136005);
 DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR08MB3970;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: 93e1e51a-9916-4ec1-07c3-08d7432cc4a0
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:AM0PR08MB3970; 
X-Forefront-PRVS: 0173C6D4D5
X-Microsoft-Antispam-Message-Info: LPjnxQAgEXxwove4FFYX069ZiRfKvrp/S5Ttsp1yUbCUsvvsDUAHDTVVD0o9iGyK4HhDXbWBjUE88Nw2CKtRLFNtY1zpSpNoBtyX0+mrBSq2ON4ivaxSCpX3lUJ/7oNKRnjdhPLSEnXeJoNIlyqiL0XT6AKYpd2JxJoPvYrP87d6HN+D0/huoWLu24NTwkOA/M/ZTk/WasNdnJR2QuSjWnNk6jdPQrnuo3GN8lXy6TverP4vp7CvnNGOg666qmzdzhpsBSl5UEisuIV0lg6I+3hB5tMXSar5FQ+7qhHFYpBnjSRtzd8uxcijuRxBNZPnH6W1+ZkDDjbnFMV0jCWys/d48NpkPeZpnjFL2YQjxQw3Q7VziQMEMsLAuIDG+qXCUzm1qCy/ea6MOb9xInKsLqzZkWehUuC5sDzp7NSHT7A=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2019 09:26:34.1921 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 08b19b14-74fb-4b53-8f8c-08d7432cc9f9
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB3970
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 5/6] plat/common: Add macro
 to avoid nested including header file
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gU2VudDogMjAxOeW5tDnmnIgyN+aXpSAx
NzowOA0KPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBh
cm0uY29tPjsgbWluaW9zLQ0KPiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vl
bnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IENjOiBTaGFyYW4uU2FudGhhbmFtQG5l
Y2xhYi5ldTsgRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PjsNCj4gS2FseSBY
aW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47DQo+IFNhbnRpYWdv
LlBhZ2FuaUBuZWNsYWIuZXUNCj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSCB2MiA1LzZd
IHBsYXQvY29tbW9uOiBBZGQgbWFjcm8gdG8gYXZvaWQNCj4gbmVzdGVkIGluY2x1ZGluZyBoZWFk
ZXIgZmlsZQ0KPg0KPiBIaSwNCj4NCj4gT24gMjcvMDkvMjAxOSAwNzo1MywgSmlhIEhlIHdyb3Rl
Og0KPiA+IFRoaXMgaXMgdG8gYWRkIHRoZSBtYWNybyB0byBhdm9pZCBhdm9pZCBuZXN0ZWQgaW5j
bHVkaW5nIGhlYWRlciBmaWxlDQo+DQo+IHMvdGhlIG1hY3JvL3RoZSBoZWFkZXIgZ3VhcmRzLw0K
Pg0KPiBCdXQgdGhlIGhlYWRlciBndWFyZCBkb2VzIG5vdCBwcmV2ZW50IG5lc3RpbmcgKHdoaWNo
IEkgdW5kZXJzdGFuZCBhcw0KPiBjYWxsaW5nDQo+ICNpbmNsdWRlICJjcHUuaCIpLCBpdCBvbmx5
IGVuc3VyZSB0aGUgZGVmaW5pdGlvbnMgcHJlc2VudCBpbiB0aGUgaGVhZGVyIGFyZQ0KPiBvbmx5
DQo+IGFkZCBvbmUgZXZlbiBpZiB0aGUgaGVhZGVyIGlzIGluY2x1ZGVkIG11bHRpcGxlIHRpbWVz
Lg0KWWVzLCBpdCBpcyBtb3JlIGNsZWFyDQpUaGFua3MNCg0KLS0NCkNoZWVycywNCkp1c3RpbiAo
SmlhIEhlKQ0KDQoNCj4NCj4gQ2hlZXJzLA0KPg0KPiA+IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJt
L2FybTY0L2NwdS5oDQo+ID4NCj4gPiBTaWduZWQtb2ZmLWJ5OiBKaWEgSGUgPGp1c3Rpbi5oZUBh
cm0uY29tPg0KPiA+IC0tLQ0KPiA+ICAgcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1
LmggfCA1ICsrKysrDQo+ID4gICAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspDQo+ID4N
Cj4gPiBkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmgNCj4g
Yi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaA0KPiA+IGluZGV4IDIzYWRmOGQu
LmZmMzNmN2MgMTAwNjQ0DQo+ID4gLS0tIGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQv
Y3B1LmgNCj4gPiArKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaA0KPiA+
IEBAIC0zMiw2ICszMiw5IEBADQo+ID4gICAgKiBUSElTIEhFQURFUiBNQVkgTk9UIEJFIEVYVFJB
Q1RFRCBPUiBNT0RJRklFRCBJTiBBTlkgV0FZLg0KPiA+ICAgICovDQo+ID4NCj4gPiArI2lmbmRl
ZiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18NCj4gPiArI2RlZmluZSBfX1BMQVRfQ09NTU9O
X0FSTTY0X0NQVV9IX18NCj4gPiArDQo+ID4gICAjaW5jbHVkZSA8aW50dHlwZXMuaD4NCj4gPiAg
ICNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+DQo+ID4gICAjaW5jbHVkZSA8c3dfY3R4Lmg+DQo+
ID4gQEAgLTEzNiwzICsxMzksNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pbml0X2V4dHJl
Z3Moc3RydWN0IHN3X2N0eA0KPiAqY3R4KQ0KPiA+ICAgew0KPiA+ICAgICBjdHgtPmV4dHJlZ3Mg
PSAodWludHB0cl90KWN0eCArIHNpemVvZihzdHJ1Y3Qgc3dfY3R4KTsNCj4gPiAgIH0NCj4gPiAr
DQo+ID4gKyNlbmRpZiAvKiBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18gKi8NCj4gPg0KPg0K
PiAtLQ0KPiBKdWxpZW4gR3JhbGwNCklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0
aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFs
c28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwg
cGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2Ug
dGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2Us
IG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlv
dS4NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 09:42:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 09:42:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDmlJ-0002cv-Rl; Fri, 27 Sep 2019 09:42:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=tE9W=XW=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iDmlI-0002cq-W6
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 09:42:05 +0000
X-Inumbo-ID: 0f0d378e-e10b-11e9-97fb-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 0f0d378e-e10b-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 09:42:02 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2515428;
 Fri, 27 Sep 2019 02:42:02 -0700 (PDT)
Received: from [10.1.196.50] (e108454-lin.cambridge.arm.com [10.1.196.50])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 3B6E33F534;
 Fri, 27 Sep 2019 02:42:01 -0700 (PDT)
To: Jia He <justin.he@arm.com>, minios-devel@lists.xenproject.org,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190927065351.70074-1-justin.he@arm.com>
 <20190927065351.70074-7-justin.he@arm.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <bb4be802-9053-a3c5-acec-d96c545505ef@arm.com>
Date: Fri, 27 Sep 2019 10:42:00 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190927065351.70074-7-justin.he@arm.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 6/6] arch/arm64: Implement
 bitops for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Kaly Xin <Kaly.Xin@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSmlhLAoKT24gMjcvMDkvMjAxOSAwNzo1MywgSmlhIEhlIHdyb3RlOgo+IFdpdGhvdXQgdGhp
cyBwYXRjaCwgY29tcGlsZXIgd2lsbCByZXBvcnQgd2FybmluZyBhcyBmb2xsb3dzOgo+ICAgIElu
IGZpbGUgaW5jbHVkZWQgZnJvbSBwbGF0L2NvbW1vbi9hcm0vdGltZS5jOjQxOjA6Cj4gaW5jbHVk
ZS91ay9iaXRvcHMuaDogSW4gZnVuY3Rpb24gJ3VrX2dldF9jb3VudF9vcmRlcic6Cj4gaW5jbHVk
ZS91ay9iaXRvcHMuaDo4OToxMDogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRpb24gb2YgZnVu
Y3Rpb24KPiAndWthcmNoX2Zscyc7IGRpZCB5b3UgbWVhbiAndWthcmNoX2Zmc2wnPyBbLVdpbXBs
aWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0KPiAgICBvcmRlciA9IHVrYXJjaF9mbHMoY291bnQp
Owo+ICAgICAgICAgICAgXn5+fn5+fn5+fgo+ICAgICAgICAgICAgdWthcmNoX2Zmc2wKPiBpbmNs
dWRlL3VrL2JpdG9wcy5oOiBJbiBmdW5jdGlvbiAndWtfZmluZF9sYXN0X2JpdCc6Cj4gaW5jbHVk
ZS91ay9iaXRvcHMuaDoxNTQ6MTg6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1
bmN0aW9uCj4gJ3VrYXJjaF9mbHNsJzsgZGlkIHlvdSBtZWFuICd1a2FyY2hfZmZzbCc/IFstV2lt
cGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQo+ICAgICAgcmV0dXJuIChiaXQgKyB1a2FyY2hf
ZmxzbChtYXNrKSk7Cj4gICAgICAgICAgICAgICAgICAgIF5+fn5+fn5+fn5+Cj4gICAgICAgICAg
ICAgICAgICAgIHVrYXJjaF9mZnNsCgpUaGlzIGV4cGxhaW5zIHdoeSB5b3UgYWRkIHVrYXJjaF9m
bHMgYW5kIHVrYXJjaF9mbHNsLiBCdXQgdGhpcyBkb2VzIG5vdCBleHBsYWluIAp3aHkgeW91IHJl
aW1wbGVtZW50ZWQgdWthcmNoX2Zmc2wgd2l0aCBhIGJ1aWx0aW4uCgpDaGVlcnMsCgo+IAo+IFNp
Z25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Cj4gLS0tCj4gICBhcmNoL2Fy
bS9hcm02NC9pbmNsdWRlL3VrL2FzbS9hdG9taWMuaCB8IDU1ICsrKysrKysrKysrKysrKystLS0t
LS0tLS0tCj4gICAxIGZpbGUgY2hhbmdlZCwgMzQgaW5zZXJ0aW9ucygrKSwgMjEgZGVsZXRpb25z
KC0pCj4gCj4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2F0b21p
Yy5oIGIvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmgKPiBpbmRleCA3ZWU2
NjY3Li5jYjliODI5IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNt
L2F0b21pYy5oCj4gKysrIGIvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmgK
PiBAQCAtMzgsMzMgKzM4LDQ2IEBACj4gICAjZW5kaWYKPiAgIAo+ICAgLyoqCj4gLSAqIHVrYXJj
aF9mZnNsIC0gZmluZCBmaXJzdCAobG93ZXN0KSBzZXQgYml0IGluIHdvcmQuCj4gKyAqIHVrYXJj
aF9mZnMgLSBmaW5kIGZpcnN0IChsb3dlc3QpIHNldCBiaXQgaW4gd29yZC4KPiAgICAqIEB3b3Jk
OiBUaGUgd29yZCB0byBzZWFyY2gKPiAgICAqCj4gICAgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4
aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0Lgo+ICAgICovCj4gLXN0
YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1a2FyY2hfZmZzbCh1bnNpZ25lZCBsb25nIHdvcmQp
Cj4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVrYXJjaF9mZnModW5zaWduZWQgaW50IHgp
Cj4gICB7Cj4gLQlpbnQgY2x6Owo+ICsJcmV0dXJuIF9fYnVpbHRpbl9mZnMoeCk7Cj4gK30KPiAg
IAo+IC0JLyogeHh4eHgxMDAwMCA9IHdvcmQKPiAtCSAqIHh4eHh4MDExMTEgPSB3b3JkIC0gMQo+
IC0JICogMDAwMDAxMTExMSA9IHdvcmQgXiAod29yZCAtIDEpCj4gLQkgKiAgICAgIDQgICAgID0g
NjMgLSBjbHood29yZCBeICh3b3JkIC0gMSkpCj4gLQkgKi8KPiArLyoqCj4gKyAqIHVrYXJjaF9m
bHMgLSBmaW5kIGxhc3QgKGhpZ2hlc3QpIHNldCBiaXQgaW4gd29yZC4KPiArICogQHdvcmQ6IFRo
ZSB3b3JkIHRvIHNlYXJjaAo+ICsgKgo+ICsgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0cywg
c28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0LgpIZXJlIHlvdSBzYXkgdGhhdCBm
bHMoMCkgaXMgdW5kZWZpbmVkIGJ1dC4uLgoKPiArICogTm90ZSBmbHMoMCkgPSAwLCBmbHMoMSkg
PSAxLCBmbHMoMHg4MDAwMDAwMCkgPSAzMi4KCi4uLiBoZXJlIHlvdSBkZWZpbmUgZmxzKDApLgoK
WW91ciBjb2RlIHNlZW1zIHRvIGltcGxlbWVudCB0aGUgbGF0ZXIgYmVoYXZpb3IuIEZ1cnRoZXJt
b3JlLCB0aGUgeDg2IGNvZGUgaXMgCm5vdCBhYmxlIHRvIGRlYWwgd2l0aCBmbHMoMCkuIFNvIGlz
IHRoZXJlIGFueSByZWFzb24gdG8gYWxsb3cgaXQgZm9yIEFybT8KCj4gKyAqLwo+ICtzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGludCB1a2FyY2hfZmxzKHVuc2lnbmVkIGludCB4KQo+ICt7Cj4gKwly
ZXR1cm4geCA/IHNpemVvZih4KSAqIDggLSBfX2J1aWx0aW5fY2x6KHgpIDogMDsKPiArfQo+ICAg
Cj4gLQlfX2FzbV9fKCJzdWIgeDAsICVbd29yZF0sICMxXG4iCj4gLQkJImVvciB4MCwgeDAsICVb
d29yZF1cbiIKPiAtCQkiY2x6ICVbY2x6XSwgeDBcbiIKPiAtCQk6Cj4gLQkJLyogT3V0cHV0czog
Ki8KPiAtCQlbY2x6XSAiPXIiKGNseikKPiAtCQk6Cj4gLQkJLyogSW5wdXRzOiAqLwo+IC0JCVt3
b3JkXSAiciIod29yZCkKPiAtCQk6Cj4gLQkJLyogQ2xvYmJlcnM6ICovCj4gLQkJIngwIik7Cj4g
Ky8qKgo+ICsgKiB1a2FyY2hfZmZzbCAtIGZpbmQgZmlyc3QgKGxvd2VzdCkgc2V0IGJpdCBpbiB3
b3JkLgo+ICsgKiBAd29yZDogVGhlIHdvcmQgdG8gc2VhcmNoCj4gKyAqCj4gKyAqIFVuZGVmaW5l
ZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3Qu
Cj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdWthcmNoX2Zmc2wodW5zaWdu
ZWQgbG9uZyB4KQo+ICt7Cj4gKwlyZXR1cm4gX19idWlsdGluX2Zmc2woeCk7Cj4gK30KPiAgIAo+
IC0JcmV0dXJuIDYzIC0gY2x6Owo+ICsvKioKPiArICogdWthcmNoX2Zsc2wgLSBmaW5kIGxhc3Qg
KGhpZ2hlc3QpIHNldCBiaXQgaW4gd29yZC4KPiArICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJj
aAo+ICsgKiA+ICsgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQg
Y2hlY2sgYWdhaW5zdCAwIGZpcnN0LgoKU2ltaWxhciByZW1hcmsgaGVyZS4KCj4gKyAqLwo+ICtz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdWthcmNoX2Zsc2wodW5zaWduZWQgbG9uZyB4KQo+
ICt7Cj4gKwlyZXR1cm4geCA/IHNpemVvZih4KSAqIDggLSBfX2J1aWx0aW5fY2x6bCh4KSA6IDA7
Cj4gICB9Cj4gCgpDaGVlcnMsCgotLSAKSnVsaWVuIEdyYWxsCgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1p
bmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu
b3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 09:53:50 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 09:53:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDmwf-0003sx-OH; Fri, 27 Sep 2019 09:53:49 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=t+55=XW=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDmwf-0003sn-CB
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 09:53:49 +0000
X-Inumbo-ID: b184aeb0-e10c-11e9-9674-12813bfff9fa
Received: from esa1.hc3370-68.iphmx.com (unknown [216.71.145.142])
 by localhost (Halon) with ESMTPS
 id b184aeb0-e10c-11e9-9674-12813bfff9fa;
 Fri, 27 Sep 2019 09:53:45 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1569578025;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-id:content-transfer-encoding: mime-version;
 bh=oOxqcnAfl8DKlep5srI0Y1YgKTJNhv8KZZhULsKMvQc=;
 b=WZAqUw9ydfGIlQpQdqvTQMI+dXKZNd3rpF1S8nNpWsBDiutm0x0u9Pw0
 qrjP4sFLxALdxwrVcqWXOhNCJ4u1p7ndHBoaDD2unUMM6P1Ux3sMHTkIH
 5FluzCwNOzygGYO0h79BPpPByJiahGO8VvCJucJ3QClI99B58Y9yiyjLg I=;
Authentication-Results: esa1.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa1.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa1.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa1.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa1.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: KD8gwZV1hgXdgePQ6C80NN2bghuyBINFKo9mAO7FJdWirTHXpf21b0acdaz9zVqfJuhmed293U
 tKh8Zq05/63XmTYF/NYFu+GJwSSpieAhyZdAEWEJwMpicCwJy/omalgkmWGrDH0QUI2XnImrqw
 uSGR93sUE2dzPDRRQQVj8N7+w5/iiz97eQ/XwcoeUlWhS63g7YoSKVVKn3KjCofJHUQJJ9fmEF
 iA6tqRWhfNrCdgtw6RLdrdBn+RjRGsMKZFydSkpBXWfqWcba4DIBkMSIQRSYk4QTqq1F+EOM0o
 CSs=
X-SBRS: 2.7
X-MesageID: 6229932
X-Ironport-Server: esa1.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,555,1559534400"; 
   d="scan'208";a="6229932"
From: Lars Kurth <lars.kurth@citrix.com>
To: Jan Beulich <jbeulich@suse.com>, Lars Kurth <lars.kurth@xenproject.org>
Thread-Topic: [PATCH v2 5/6] Add guide on Communication Best Practice
Thread-Index: AQHVdKIoBNlHjnrbLUK7o4oIKuieK6c/GOUAgAAf64A=
Date: Fri, 27 Sep 2019 09:53:39 +0000
Message-ID: <8B4C0CAE-98AC-48C8-91B0-C33998D5E47D@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
 <cover.1569525222.git.lars.kurth@citrix.com>
 <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
 <10b633de-2238-bad7-3d2a-13899b7497d6@suse.com>
In-Reply-To: <10b633de-2238-bad7-3d2a-13899b7497d6@suse.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <0570CBF598F239429B8B5DEB08E2157B@citrix.com>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [PATCH v2 5/6] Add guide on Communication Best
 Practice
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQoNCu+7v09uIDI3LzA5LzIwMTksIDA5OjU5LCAiSmFuIEJldWxpY2giIDxqYmV1bGljaEBzdXNl
LmNvbT4gd3JvdGU6DQoNCiAgICBPbiAyNi4wOS4yMDE5IDIxOjM5LCBMYXJzIEt1cnRoIHdyb3Rl
Og0KICAgID4gKyMjIyBFeHByZXNzIGFwcHJlY2lhdGlvbg0KICAgID4gK0FzIHRoZSBuYXR1cmUg
b2YgY29kZSByZXZpZXcgdG8gZmluZCBidWdzIGFuZCBwb3NzaWJsZSBpc3N1ZXMsIGl0IGlzIHZl
cnkgZWFzeSBmb3INCiAgICA+ICtyZXZpZXdlcnMgdG8gZ2V0IGludG8gYSBtb2RlIG9mIG9wZXJh
dGlvbiB3aGVyZSB0aGUgcGF0Y2ggcmV2aWV3IGVuZHMgdXAgYmVpbmcgYSBsaXN0DQogICAgPiAr
b2YgaXNzdWVzLCBub3QgbWVudGlvbmluZyB3aGF0IGlzIHJpZ2h0IGFuZCB3ZWxsIGRvbmUuIFRo
aXMgY2FuIGxlYWQgdG8gdGhlIGNvZGUNCiAgICA+ICtzdWJtaXR0ZXIgaW50ZXJwcmV0aW5nIHlv
dXIgZmVlZGJhY2sgaW4gYSBuZWdhdGl2ZSB3YXkuDQogICAgPiArDQogICAgPiArVGhlIG9wZW5p
bmcgb2YgYSBjb2RlIHJldmlldyBwcm92aWRlcyBhbiBvcHBvcnR1bml0eSB0byBhZGRyZXNzIHRo
aXMgYW5kIGFsc28gc2V0cyB0aGUNCiAgICA+ICt0b25lIGZvciB0aGUgcmVzdCBvZiB0aGUgY29k
ZSByZXZpZXcuIFN0YXJ0aW5nICoqZXZlcnkqKiByZXZpZXcgb24gYSBwb3NpdGl2ZSBub3RlLCBo
ZWxwcw0KICAgID4gK3NldCB0aGUgdG9uZSBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJldmlldy4NCiAg
ICA+ICsNCiAgICA+ICtGb3IgYW4gaW5pdGlhbCBwYXRjaCwgeW91IGNhbiB1c2UgcGhyYXNlcyBz
dWNoIGFzDQogICAgPiArPiBUaGFua3MgZm9yIHRoZSBwYXRjaA0KICAgID4gKz4gVGhhbmtzIGZv
ciBkb2luZyB0aGlzDQogICAgPiArDQogICAgPiArRm9yIGZ1cnRoZXIgcmV2aXNpb25zIHdpdGhp
biBhIHJldmlldywgcGhyYXNlcyBzdWNoIGFzDQogICAgPiArPiBUaGFuayB5b3UgZm9yIGFkZHJl
c3NpbmcgdGhlIGxhc3Qgc2V0IG9mIGNoYW5nZXMNCiAgICA+ICsNCiAgICA+ICtJZiB5b3UgYmVs
aWV2ZSB0aGUgY29kZSB3YXMgZ29vZCwgaXQgaXMgZ29vZCBwcmFjdGljZSB0byBoaWdobGlnaHQg
dGhpcyBieSB1c2luZyBwaHJhc2VzDQogICAgPiArc3VjaCBhcw0KICAgID4gKz4gTG9va3MgZ29v
ZCwganVzdCBhIGZldyBjb21tZW50cw0KICAgID4gKz4gVGhlIGNoYW5nZXMgeW91IGhhdmUgbWFk
ZSBzaW5jZSB0aGUgbGFzdCB2ZXJzaW9uIGxvb2sgZ29vZA0KICAgID4gKw0KICAgID4gK0lmIHlv
dSB0aGluayB0aGVyZSB3ZXJlIGlzc3VlcyB0b28gbWFueSB3aXRoIHRoZSBjb2RlIHRvIHVzZSBv
bmUgb2YgdGhlIHBocmFzZXMsDQogICAgPiAreW91IGNhbiBzdGlsbCBzdGFydCBvbiBhIHBvc2l0
aXZlIG5vdGUsIGJ5IGZvciBleGFtcGxlIHNheWluZw0KICAgID4gKz4gSSB0aGluayB0aGlzIGlz
IGEgZ29vZCBjaGFuZ2UNCiAgICA+ICs+IEkgdGhpbmsgdGhpcyBpcyBhIGdvb2QgZmVhdHVyZSBw
cm9wb3NhbA0KICAgID4gKw0KICAgID4gK0l0IGlzIGFsc28gZW50aXJlbHkgZmluZSB0byBoaWdo
bGlnaHQgc3BlY2lmaWMgY2hhbmdlcyBhcyBnb29kLiBUaGUgYmVzdCBwbGFjZSB0bw0KICAgID4g
K2RvIHRoaXMsIGlzIGF0IHRvcCBvZiBhIHBhdGNoLCBhcyBhZGRyZXNzaW5nIGNvZGUgcmV2aWV3
IGNvbW1lbnRzIHR5cGljYWxseSByZXF1aXJlcw0KICAgID4gK2EgY29udHJpYnV0b3IgdG8gZ28g
dGhyb3VnaCB0aGUgbGlzdCBvZiB0aGluZ3MgdG8gYWRkcmVzcyBhbmQgYW4gaW4tbGluZWQgcG9z
aXRpdmUNCiAgICA+ICtjb21tZW50IGlzIGxpa2VseSB0byBicmVhayB0aGF0IHdvcmtmbG93Lg0K
ICAgID4gKw0KICAgID4gK1lvdSBzaG91bGQgYWxzbyBjb25zaWRlciwgdGhhdCBpZiB5b3UgcmV2
aWV3IGEgcGF0Y2ggb2YgYW4gZXhwZXJpZW5jZWQNCiAgICA+ICtjb250cmlidXRvciBwaHJhc2Vz
IHN1Y2ggYXMgKlRoYW5rcyBmb3IgdGhlIHBhdGNoKiBjb3VsZCBjb21lIGFjcm9zcyBhcw0KICAg
ID4gK3BhdHJvbml6aW5nLCB3aGlsZSB1c2luZyAqVGhhbmtzIGZvciBkb2luZyB0aGlzKiBpcyBs
ZXNzIGxpa2VseSB0byBiZSBpbnRlcnByZXRlZA0KICAgID4gK2FzIHN1Y2guDQogICAgPiArDQog
ICAgPiArQXBwcmVjaWF0aW9uIHNob3VsZCBhbHNvIGJlIGV4cHJlc3NlZCBieSBwYXRjaCBhdXRo
b3JzIHdoZW4gYXNraW5nIGZvciBjbGFyaWZpY2F0aW9ucw0KICAgID4gK3RvIGEgcmV2aWV3IG9y
IHJlc3BvbmRpbmcgdG8gcXVlc3Rpb25zLiBBIHNpbXBsZQ0KICAgID4gKz4gVGhhbmsgeW91IGZv
ciB5b3VyIGZlZWRiYWNrDQogICAgPiArPiBUaGFuayB5b3UgZm9yIHlvdXIgcmVwbHkNCiAgICA+
ICs+IFRoYW5rIHlvdSBYWFghDQogICAgPiArDQogICAgPiAraXMgbm9ybWFsbHkgc3VmZmljaWVu
dC4NCiAgICANCiAgICBUbyBhbGwgb2YgdGhpcyBJIGNhbid0IHJlc2lzdCBnaXZpbmcgYSByZW1h
cmsgdGhhdCBJJ3ZlIGFscmVhZHkgZ2l2ZW4NCiAgICB3aGVuIGRpc2N1c3NpbmcgdGhlIG1hdHRl
ciBpbiBwZXJzb246IEknbSBub3Qgc3VyZSBhYm91dCBFbmdsaXNoLCBidXQNCiAgICBpbiBHZXJt
YW4gdGhlIHdvcmQgIlBocmFzZSIgYWxzbyBoYXMgYW4sIGF0IHRpbWVzIHZlcnksIG5lZ2F0aXZl
DQogICAgbWVhbmluZy4gV2hlbiBJIGdldCByZXZpZXcgZmVlZGJhY2sgc3RhcnRpbmcgbGlrZSBz
dWdnZXN0ZWQgYWJvdmUsIGl0DQogICAgZGVmaW5pdGVseSBmZWVscyB0byBtZSBtb3JlIGxpa2Ug
dGhpcyAodGhlIHN0YXRlbWVudCB3YXMgYWRkZWQgdGhlcmUNCiAgICBqdXN0IGZvciBpdCB0byBi
ZSB0aGVyZSkuIEkgcmVhbGl6ZSB0aGlzIG1heSBub3QgYWx3YXlzIChhbmQgcGVyaGFwcw0KICAg
IGV2ZW4gaW4gYSBtYWpvcml0eSBvZiBzaXR1YXRpb25zKSBiZSB0aGUgY2FzZSwgYnV0IHRoYXQn
cyBob3cgaXQgZmVlbHMNCiAgICB0byBtZSBuZXZlcnRoZWxlc3MuIEFzIGEgcmVzdWx0IEkgd291
bGQgcmF0aGVyIHJhcmVseSwgaWYgZXZlciwgc3RhcnQNCiAgICBsaWtlIHRoaXMgKG9uIHRoZSBi
YXNpcyBvZiAiZG9uJ3QgZG8gdG8gb3RoZXJzIHdoYXQgeW91IGRpc2xpa2UNCiAgICB5b3Vyc2Vs
ZiIpOyBhIGNhc2Ugd2hlcmUgSSBtaWdodCBkbyBzbyB3b3VsZCBiZSB3aGVuIEkgaGFkIGFza2Vk
IGZvcg0KICAgIChvciBvZmZsb2FkZWQpIHRoZSBwdXR0aW5nIHRvZ2V0aGVyIG9mIGEgcGFydGlj
dWxhciBjaGFuZ2UuDQoNCkkgdGhpbmsgeW91ciByZXBseSBwcm92ZXMgYWxtb3N0IGVudGlyZWx5
IHRoZSBwb2ludCBvZiB0aGUgYXJ0aWNsZS4gSW4gdGhlDQplbmQgYWxsIG9mIHRoaXMgZGVwZW5k
cyBvbiBjb21tdW5pY2F0aW9uIHN0eWxlcyAoYm90aCBwZXJzb25hbCBhbmQNCmN1bHR1cmFsKS4g
TXkgdGFrZSB0byBpdCBpcyB0aGF0IHRoZXJlIGlzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuDQoNCmEp
IFNvbWVvbmUgeW91IGtub3c6IHdoYXQgdWx0aW1hdGVseSB3aWxsIGhhcHBlbiBpcyB0aGF0IA0K
d2hlbiB5b3UgZW5nYWdlIHdpdGggc29tZW9uZSB5b3Uga25vdyBhbmQgaGFkIGRvbmUgcmV2aWV3
cyBiZWZvcmUNCnlvdSB1bHRpbWF0ZWx5IGJlY29tZSBtb3JlIHRlcnNlIGFuZCBhbHNvIGRyb3Ag
bmljZXRpZXMuDQpXaGljaCBpcyBPSw0KDQpiKSBTb21lb25lIHlvdSBkb27igJl0IGtub3c6IGlu
IHRoYXQgY2FzZSwgd2Ugc2hvdWxkIHN0YXJ0IGZyb20NCmEgcmVhc29uYWJsZSBtaWRkbGUgZ3Jv
dW5kIGFuZCBwdXQgaW4gYSBiaXQgbW9yZSBlZmZvcnQNCg0KICAgIEV2ZW4gd29yc2UsIHRoZXJl
IGhhdmUgYmVlbiAoYWxzbyB2ZXJ5IHJlY2VudCkgZXhhbXBsZXMgd2hlcmUgcmVwbGllcw0KICAg
IGNvbWUgYmFjayBzYXlpbmcganVzdCAiVGhhbmsgeW91IiAoZS5nLiBmb3IgYW4gYWNrKS4gU3Vj
aCBjZXJ0YWlubHkNCiAgICBnZXQgc2VudCB3aXRoIGdvb2QgaW50ZW50aW9ucywgYnV0IHBlb3Bs
ZSBkb2luZyBzbyBsaWtlbHkgb3Zlcmxvb2sNCiAgICB0aGUgZmFjdCB0aGF0IHRoZXJlJ3MgYWxy
ZWFkeSB3YXkgdG9vIG11Y2ggZW1haWwgdG8gcmVhZCBmb3IgbWFueSBvZg0KICAgIHVzLiAoVGhl
IHNhbWUgYXBwbGllcyB0byBvdGhlciBuZXRpcXVldHRlIGFzcGVjdHMgdGhhdCBJIGtlZXANCiAg
ICBtZW50aW9uaW5nIG9uIGUuZy4gc3VtbWl0cywgYnV0IHdpdGggYXBwYXJlbnRseSBsaXR0bGUg
dG8gbm8gZWZmZWN0Og0KICAgIFBlb3BsZSBmcmVxdWVudGx5IGZhaWwgdG8gc3RyaXAgdW5uZWNl
c3NhcnkgY29udGV4dCB3aGVuIHJlcGx5aW5nLA0KICAgIHJlcXVpcmluZyBfZXZlcnlfIHJlYWRl
ciB0byBzY3JvbGwgdGhyb3VnaCBhIHBlcmhhcHMgbG9uZyBtYWlsIGp1c3QNCiAgICB0byBmaW5k
IHRoYXQgdGhlcmUncyBhbG1vc3Qgbm90aGluZyBvZiBpbnRlcmVzdC4gUGVvcGxlIGFsc28gc2Vl
bSB0bw0KICAgIGhhdmUgZGlmZmljdWx0eSB1bmRlcnN0YW5kaW5nIHRoZSBkaWZmZXJlbmNlIGJl
dHdlZW4gVG8gYW5kIENjLikNCg0KVGhhdCBpcyBhIGdvb2QgcG9pbnQgYW5kIEkgaGFkIGZvcmdv
dHRlbiBhYm91dCBpdA0KVGhhbmtzIGZvciByZW1pbmRpbmcgbWUNCg0KSSBjYW4gYWRkIGEgc2Vj
dGlvbiBvbiB0aGlzIHdoaWNoIGxvb2tzIGZvciBiYWxhbmNlIGluIHRoZSBpbnRlcmVzdA0Kb2Yg
c2F2aW5nIHlvdXIgY29tbXVuaWNhdGlvbiBwYXJ0bmVyJ3MgdGltZS4gVWx0aW1hdGVseSB0aGlz
IGlzIGENCmFsc28gc2hvd2luZyBhIGRlZ3JlZSBvZiB0aG91Z2h0ZnVsbmVzcy4gDQoNCkFuZCB3
ZSBjYW4gc3RhdGUgaW4gdGhlcmUgdGhpbmdzIGxpa2UgdGhlIENDL1RPIGxpc3QNCkFuZCBub3Qg
dG8gdGhhbmsgY29kZSByZXZpZXdlcnMgZm9yIEFDS3Mgb3Igb3RoZXJ3aXNlIGluIGEgDQpzdGFu
ZC1hbG9uZSBlLW1haWwNCiAgICANCiAgICBUaGUgYm90dG9tIGxpbmUgb2YgdGhpcyBpcyAtIHRo
ZSAiYmVpbmcga2luZCB0byBvbmUgYW5vdGhlciIgYXNwZWN0DQogICAgb2YgYXNraW5nIGZvciB0
aGlzIGJlaGF2aW9yIG5lZWRzIHRvIGJlIHdlaWdoZWQgY2FyZWZ1bGx5IGFnYWluc3QgaXRzDQog
ICAgZWZmZWN0cyBvZiB1bmR1bHkgY29uc3VtaW5nIGV2ZXJ5Ym9keSdzIHRpbWUuDQogICAgDQpJ
IGFtIGZ1bGx5IGF3YXJlIG9mIHRoaXMsIGFuZCB3YXMgdHJ5aW5nIHRvIGFwcHJvYWNoIHRoaXMg
ZnJvbSB0aGlzDQp2aWV3cG9pbnQgb2YgdHJ5aW5nIHRvIGFjaGlldmUgYSBzZW5zaWJsZSBiYWxh
bmNlDQoNCkJ1dCBhZnRlciB5b3VyIGNvbW1lbnQsIG1heWJlIHRoYXQgd2FzIG5vdCBjbGVhciBl
bm91Z2gNCg0KQmVzdCBSZWdhcmRzDQpMYXJzICAgIA0KDQpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlv
cy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3Jn
L21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 09:56:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 09:56:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDmzF-0004BE-NN; Fri, 27 Sep 2019 09:56:29 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDmzE-0004B6-2A
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 09:56:28 +0000
X-Inumbo-ID: 113ddbe2-e10d-11e9-9674-12813bfff9fa
Received: from EUR02-VE1-obe.outbound.protection.outlook.com (unknown
 [40.107.2.60]) by localhost (Halon) with ESMTPS
 id 113ddbe2-e10d-11e9-9674-12813bfff9fa;
 Fri, 27 Sep 2019 09:56:25 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=5BShOsJixhKGt7gvHAfG+8w5fNeEbeDrNhNt/SckNy0=;
 b=Z/SKqAqaE2kTt+rXXi3uzQ485owONfxxmDPJvD7wJFAdxeiRZ105COIU2HVinMeLrCfzDhzSmVwE2NgmLAkgbd+Lj2v+gpKg5xdhCFLDN6jylwGpeFCXGde1oIeuEvtQeab+KkfPAtEOrMMAMLuTqOgYgPGDW2hyGn5CH6A/3Fg=
Received: from AM6PR08CA0036.eurprd08.prod.outlook.com (2603:10a6:20b:c0::24)
 by VI1PR08MB4479.eurprd08.prod.outlook.com (2603:10a6:803:fc::18)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2284.23; Fri, 27 Sep
 2019 09:56:22 +0000
Received: from AM5EUR03FT041.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::205) by AM6PR08CA0036.outlook.office365.com
 (2603:10a6:20b:c0::24) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.15 via Frontend
 Transport; Fri, 27 Sep 2019 09:56:22 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT041.mail.protection.outlook.com (10.152.17.186) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2305.15 via Frontend Transport; Fri, 27 Sep 2019 09:56:21 +0000
Received: ("Tessian outbound 3fba803f6da3:v33");
 Fri, 27 Sep 2019 09:56:19 +0000
X-CR-MTA-TID: 64aa7808
Received: from 04a8a3fba744.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.8.55]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 DD04C2A0-1058-4C29-930D-8F9FCDF86B2D.1; 
 Fri, 27 Sep 2019 09:56:14 +0000
Received: from EUR03-AM5-obe.outbound.protection.outlook.com
 (mail-am5eur03lp2055.outbound.protection.outlook.com [104.47.8.55])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 04a8a3fba744.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384);
 Fri, 27 Sep 2019 09:56:14 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=mybWfUBqvoZt/JiNE59jPnWsje9HajPaOpk57essG/I3/ts4lK8mNDQTxNqmo/u2KidoWTNYTCq2byd9c7HwagYObnDTe03RBZnyiByvRH/J9zgvEVXoIKvqNWU8gEM6hWoIkZbXUx4N8njHFwRtQtLehVzKiqDa4sCisHbjoLzttiWFWjJpsU36oOKSIuX2RGxqqLhnXcMFF1HvSbam+wFAUF9zckVOeYw1HzkoSj0eqWfBO52mcfuVyoLpcQZ7wiQDocLs2cBgBEbKN1foxw7pXsMeN0NTUpAfj1ha5ffsuYixb90kEUztV+n19yJr18w+o7af5sQj0uQRIedtmQ==
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=eQwaEQXfeOd69j5s0whfVvjgQxb1j4FyvOW9iPQ6Q8k=;
 b=SbYnBU+u8BptrxOmhSx8cOeSme/I/78IBdZQLj9M2TwBgLHFXLePEwdHNh+cuIczr1pAlleo8T6zKVxOLMO4fxN2wrX9oKiih7HgNx7yzm4eyCaP59kYv2tdgx6MEDgVCS0Bxj7V8k+hOk1gej9jOPUVl7KweWawTHuPLynFwN/eXtlyixNzxrHL8YKN0r9AN1oLEf611YtSSLL9xL0T5G/UDVXygl6JnIJuoXEUNd0jACfOCe3ijFpLbzibx+qKzXxPmSd3SsfLXr5RNYTGL5ziwnNCMXDK69auWkxXEpqUHCHq2tOPTTp9pv6Xw8vOppiEm73LmCvEPOLBp5ogSw==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=eQwaEQXfeOd69j5s0whfVvjgQxb1j4FyvOW9iPQ6Q8k=;
 b=18YNdga58U09xmfSJFQmAv2Oy4uZdw3OdVngqUbgndKFPUh9kkH23NgSo/waTRliUB9McdlHAY2j91utmO9A4zSRJYnTJksHNoHS03G2HEJ87GazQM6iAIsruPYqkXsLLaf+VKpffD9/S1ycHZc6P0MEsvPIamntsDc6b7t4oc0=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3868.eurprd08.prod.outlook.com (20.178.84.155) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2284.21; Fri, 27 Sep 2019 09:56:13 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2305.017; Fri, 27 Sep 2019
 09:56:13 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCH v2 6/6] arch/arm64: Implement bitops for arm64
Thread-Index: AQHVdQBnigPC/ebbFkSAhXTmsHYqTKc/RZ0AgAACVjA=
Date: Fri, 27 Sep 2019 09:56:13 +0000
Message-ID: <DB7PR08MB3082F0453F2D4DD84BCBDF01F7810@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190927065351.70074-1-justin.he@arm.com>
 <20190927065351.70074-7-justin.he@arm.com>
 <bb4be802-9053-a3c5-acec-d96c545505ef@arm.com>
In-Reply-To: <bb4be802-9053-a3c5-acec-d96c545505ef@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 29925dec-fdec-4c38-b86e-b4f039e4112a.0
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: 7f607e75-43cb-4d93-f25a-08d74330f396
X-MS-Office365-Filtering-HT: Tenant
X-Microsoft-Antispam-Untrusted: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4618075)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);
 SRVR:DB7PR08MB3868; 
X-MS-TrafficTypeDiagnostic: DB7PR08MB3868:|DB7PR08MB3868:|VI1PR08MB4479:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <VI1PR08MB447953AD97A6D7AABA38209EF7810@VI1PR08MB4479.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:499;OLM:499;
x-forefront-prvs: 0173C6D4D5
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(376002)(366004)(136003)(346002)(39860400002)(396003)(189003)(199004)(13464003)(86362001)(6246003)(5660300002)(2906002)(53546011)(26005)(186003)(478600001)(81156014)(55016002)(8676002)(81166006)(3846002)(8936002)(6436002)(25786009)(476003)(9686003)(110136005)(7736002)(316002)(486006)(11346002)(6506007)(52536014)(74316002)(55236004)(6116002)(229853002)(4326008)(99286004)(66446008)(66946007)(446003)(2501003)(256004)(66476007)(14444005)(14454004)(305945005)(54906003)(71200400001)(7696005)(64756008)(102836004)(71190400001)(76116006)(66556008)(76176011)(66066001)(33656002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3868;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; MX:1; A:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Message-Info-Original: yGTgKJa/rx4FV4Bx2u6wtd2j6eBUUE0rJu5mxi6rppU1yll0f5wG/H9Bz1cDhwE2on3oi9D6Q6Wb8gDJzY1KfsHS5q+9oS5hP1Oy2/EDqOsTEBH9ssb5PDLJLF1vRwSt+2VQCvI4Xigm/k4TDwkIEH7OzpqO+TAarPdZmIm8eZqwHTW1LxubQjtMmIDDGHTxngtLB8DX/U5jA039MN2LsIPjwgeux1zqrpp7f7AC9dfTKF2I5pjmb5nLPp0BZUwDP9wwKkMM+kOFXpe2cwMeUcp35ZjwlcikGdiI/POeG4KYXSsToR4KZyry2U7a1aYO4Vrc//x03iOqtztZI0XXPTxBJ2/EmOoAVwJ/rPrnT0NHUn/BuTyA7TP4Hpver0qI1Bk3/x10JSToE2oCtloJx0FGYvbQu1C1r8xysFM0+6w=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3868
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT041.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(396003)(136003)(346002)(376002)(199004)(189003)(40434004)(13464003)(86362001)(47776003)(110136005)(55016002)(316002)(36906005)(14454004)(81156014)(229853002)(107886003)(5660300002)(25786009)(6246003)(4326008)(2501003)(52536014)(8676002)(9686003)(81166006)(26005)(186003)(14444005)(7736002)(305945005)(5024004)(336012)(99286004)(66066001)(102836004)(50466002)(436003)(70586007)(2906002)(74316002)(22756006)(11346002)(33656002)(3846002)(6116002)(53546011)(446003)(6506007)(26826003)(2486003)(7696005)(54906003)(8936002)(356004)(486006)(23676004)(76130400001)(126002)(476003)(478600001)(76176011)(70206006)(63350400001);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR08MB4479;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; A:1; MX:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: e57b2169-f4aa-462f-c144-08d74330ee5b
X-Microsoft-Antispam: BCL:0; PCL:0;
 RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600167)(710020)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);
 SRVR:VI1PR08MB4479; 
X-Forefront-PRVS: 0173C6D4D5
X-Microsoft-Antispam-Message-Info: lGPg93aYaQO1FBqcZNz3hGsYSwBpG3vP+oJvSGBUNpOnD1NQhrR/sjlN8UjjOox2PuwpbA6bMO12bUUtHjrM2gQT+/2VFBT1RN+hAOGrS5E6Wk/tWlrFvZCbpGKWtqR9v1TloPV1MVtlX7IRNAst4PEiwrrvt+A9rgTzsZy3cPhP7AR5jXEwDyLiVVhBiKmXBP9J2Ooi7tgukcsTmxdXw1eJlzEJfNd+wm+x+D7VqXHOkVMWsZCLZ0qYG5ZOwLDExN/pqc3141Rl36fVUTfzZ/mfvvoZtaBGMdUcsIRluiXwiD7+fXJaPQb319kVFetwNWf3nyDjb0WCbFQ9aHRDhzWXgeNcuD2nw7RXvjOOEUK1A3VDMmcc57TzcsZQGi0ASH3r+z3jrsnOghN7MN6d3iObKQmor5ZOuLJ2PhNuHpg=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2019 09:56:21.9931 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: 7f607e75-43cb-4d93-f25a-08d74330f396
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4479
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 6/6] arch/arm64: Implement
 bitops for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gU2VudDogMjAxOeW5tDnmnIgyN+aXpSAx
Nzo0Mg0KPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBh
cm0uY29tPjsgbWluaW9zLQ0KPiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vl
bnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IENjOiBTaGFyYW4uU2FudGhhbmFtQG5l
Y2xhYi5ldTsgRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PjsNCj4gS2FseSBY
aW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47DQo+IFNhbnRpYWdv
LlBhZ2FuaUBuZWNsYWIuZXUNCj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSCB2MiA2LzZd
IGFyY2gvYXJtNjQ6IEltcGxlbWVudCBiaXRvcHMgZm9yDQo+IGFybTY0DQo+DQo+IEhpIEppYSwN
Cj4NCj4gT24gMjcvMDkvMjAxOSAwNzo1MywgSmlhIEhlIHdyb3RlOg0KPiA+IFdpdGhvdXQgdGhp
cyBwYXRjaCwgY29tcGlsZXIgd2lsbCByZXBvcnQgd2FybmluZyBhcyBmb2xsb3dzOg0KPiA+ICAg
IEluIGZpbGUgaW5jbHVkZWQgZnJvbSBwbGF0L2NvbW1vbi9hcm0vdGltZS5jOjQxOjA6DQo+ID4g
aW5jbHVkZS91ay9iaXRvcHMuaDogSW4gZnVuY3Rpb24gJ3VrX2dldF9jb3VudF9vcmRlcic6DQo+
ID4gaW5jbHVkZS91ay9iaXRvcHMuaDo4OToxMDogd2FybmluZzogaW1wbGljaXQgZGVjbGFyYXRp
b24gb2YgZnVuY3Rpb24NCj4gPiAndWthcmNoX2Zscyc7IGRpZCB5b3UgbWVhbiAndWthcmNoX2Zm
c2wnPyBbLVdpbXBsaWNpdC1mdW5jdGlvbi1kZWNsYXJhdGlvbl0NCj4gPiAgICBvcmRlciA9IHVr
YXJjaF9mbHMoY291bnQpOw0KPiA+ICAgICAgICAgICAgXn5+fn5+fn5+fg0KPiA+ICAgICAgICAg
ICAgdWthcmNoX2Zmc2wNCj4gPiBpbmNsdWRlL3VrL2JpdG9wcy5oOiBJbiBmdW5jdGlvbiAndWtf
ZmluZF9sYXN0X2JpdCc6DQo+ID4gaW5jbHVkZS91ay9iaXRvcHMuaDoxNTQ6MTg6IHdhcm5pbmc6
IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uDQo+ID4gJ3VrYXJjaF9mbHNsJzsgZGlk
IHlvdSBtZWFuICd1a2FyY2hfZmZzbCc/IFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9u
XQ0KPiA+ICAgICAgcmV0dXJuIChiaXQgKyB1a2FyY2hfZmxzbChtYXNrKSk7DQo+ID4gICAgICAg
ICAgICAgICAgICAgIF5+fn5+fn5+fn5+DQo+ID4gICAgICAgICAgICAgICAgICAgIHVrYXJjaF9m
ZnNsDQo+DQo+IFRoaXMgZXhwbGFpbnMgd2h5IHlvdSBhZGQgdWthcmNoX2ZscyBhbmQgdWthcmNo
X2Zsc2wuIEJ1dCB0aGlzIGRvZXMgbm90DQo+IGV4cGxhaW4NCj4gd2h5IHlvdSByZWltcGxlbWVu
dGVkIHVrYXJjaF9mZnNsIHdpdGggYSBidWlsdGluLg0KPg0KT2theSwgSSB3aWxsIHBvc3QgbXkg
dGVzdCByZXN1bHQuDQpJIGNvbXBhcmVkIHRoZSB0d28gaW1wbGVtZW50YXRpb24gKGdjYyBidWls
dGluIGFuZCB1a2FyY2hfZmZzbCBvcmlnaW5hbCBvbmUgKQ0KDQpmb3IgKHg9MDsgeDwweGZmZmZm
ZmY7IHgrKykNCg0Kb3JpZ2luYWw6DQpyZWFsICAgIDBtMS43MjNzDQp1c2VyICAgIDBtMS43MjNz
DQpzeXMgICAgIDBtMC4wMDBzDQoNCmdjYyBidWlsdGluOg0KcmVhbCAgICAwbTEuNTUwcw0KdXNl
ciAgICAwbTEuNTQ2cw0Kc3lzICAgICAwbTAuMDA0cw0KDQo+IENoZWVycywNCj4NCj4gPg0KPiA+
IFNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+DQo+ID4gLS0tDQo+ID4g
ICBhcmNoL2FybS9hcm02NC9pbmNsdWRlL3VrL2FzbS9hdG9taWMuaCB8IDU1ICsrKysrKysrKysr
KysrKystLS0tDQo+IC0tLS0tLQ0KPiA+ICAgMSBmaWxlIGNoYW5nZWQsIDM0IGluc2VydGlvbnMo
KyksIDIxIGRlbGV0aW9ucygtKQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2FybTY0
L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oDQo+IGIvYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9h
c20vYXRvbWljLmgNCj4gPiBpbmRleCA3ZWU2NjY3Li5jYjliODI5IDEwMDY0NA0KPiA+IC0tLSBh
L2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oDQo+ID4gKysrIGIvYXJjaC9h
cm0vYXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmgNCj4gPiBAQCAtMzgsMzMgKzM4LDQ2IEBA
DQo+ID4gICAjZW5kaWYNCj4gPg0KPiA+ICAgLyoqDQo+ID4gLSAqIHVrYXJjaF9mZnNsIC0gZmlu
ZCBmaXJzdCAobG93ZXN0KSBzZXQgYml0IGluIHdvcmQuDQo+ID4gKyAqIHVrYXJjaF9mZnMgLSBm
aW5kIGZpcnN0IChsb3dlc3QpIHNldCBiaXQgaW4gd29yZC4NCj4gPiAgICAqIEB3b3JkOiBUaGUg
d29yZCB0byBzZWFyY2gNCj4gPiAgICAqDQo+ID4gICAgKiBVbmRlZmluZWQgaWYgbm8gYml0IGV4
aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0Lg0KPiA+ICAgICovDQo+
ID4gLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1a2FyY2hfZmZzbCh1bnNpZ25lZCBsb25n
IHdvcmQpDQo+ID4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHVrYXJjaF9mZnModW5zaWdu
ZWQgaW50IHgpDQo+ID4gICB7DQo+ID4gLSAgIGludCBjbHo7DQo+ID4gKyAgIHJldHVybiBfX2J1
aWx0aW5fZmZzKHgpOw0KPiA+ICt9DQo+ID4NCj4gPiAtICAgLyogeHh4eHgxMDAwMCA9IHdvcmQN
Cj4gPiAtICAgICogeHh4eHgwMTExMSA9IHdvcmQgLSAxDQo+ID4gLSAgICAqIDAwMDAwMTExMTEg
PSB3b3JkIF4gKHdvcmQgLSAxKQ0KPiA+IC0gICAgKiAgICAgIDQgICAgID0gNjMgLSBjbHood29y
ZCBeICh3b3JkIC0gMSkpDQo+ID4gLSAgICAqLw0KPiA+ICsvKioNCj4gPiArICogdWthcmNoX2Zs
cyAtIGZpbmQgbGFzdCAoaGlnaGVzdCkgc2V0IGJpdCBpbiB3b3JkLg0KPiA+ICsgKiBAd29yZDog
VGhlIHdvcmQgdG8gc2VhcmNoDQo+ID4gKyAqDQo+ID4gKyAqIFVuZGVmaW5lZCBpZiBubyBiaXQg
ZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuDQo+IEhlcmUgeW91
IHNheSB0aGF0IGZscygwKSBpcyB1bmRlZmluZWQgYnV0Li4uDQo+DQo+ID4gKyAqIE5vdGUgZmxz
KDApID0gMCwgZmxzKDEpID0gMSwgZmxzKDB4ODAwMDAwMDApID0gMzIuDQo+DQo+IC4uLiBoZXJl
IHlvdSBkZWZpbmUgZmxzKDApLg0KPg0KPiBZb3VyIGNvZGUgc2VlbXMgdG8gaW1wbGVtZW50IHRo
ZSBsYXRlciBiZWhhdmlvci4gRnVydGhlcm1vcmUsIHRoZSB4ODYNCj4gY29kZSBpcw0KPiBub3Qg
YWJsZSB0byBkZWFsIHdpdGggZmxzKDApLiBTbyBpcyB0aGVyZSBhbnkgcmVhc29uIHRvIGFsbG93
IGl0IGZvciBBcm0/DQo+DQpPaywgSSB3aWxsIGtlZXAgdGhlIHNhbWUgcGFnZSB3aXRoIFg4Nidz
IGJlaGF2aW9yLg0KDQotLQ0KQ2hlZXJzLA0KSnVzdGluIChKaWEgSGUpDQoNCg0KPiA+ICsgKi8N
Cj4gPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWthcmNoX2Zscyh1bnNpZ25lZCBpbnQg
eCkNCj4gPiArew0KPiA+ICsgICByZXR1cm4geCA/IHNpemVvZih4KSAqIDggLSBfX2J1aWx0aW5f
Y2x6KHgpIDogMDsNCj4gPiArfQ0KPiA+DQo+ID4gLSAgIF9fYXNtX18oInN1YiB4MCwgJVt3b3Jk
XSwgIzFcbiINCj4gPiAtICAgICAgICAgICAiZW9yIHgwLCB4MCwgJVt3b3JkXVxuIg0KPiA+IC0g
ICAgICAgICAgICJjbHogJVtjbHpdLCB4MFxuIg0KPiA+IC0gICAgICAgICAgIDoNCj4gPiAtICAg
ICAgICAgICAvKiBPdXRwdXRzOiAqLw0KPiA+IC0gICAgICAgICAgIFtjbHpdICI9ciIoY2x6KQ0K
PiA+IC0gICAgICAgICAgIDoNCj4gPiAtICAgICAgICAgICAvKiBJbnB1dHM6ICovDQo+ID4gLSAg
ICAgICAgICAgW3dvcmRdICJyIih3b3JkKQ0KPiA+IC0gICAgICAgICAgIDoNCj4gPiAtICAgICAg
ICAgICAvKiBDbG9iYmVyczogKi8NCj4gPiAtICAgICAgICAgICAieDAiKTsNCj4gPiArLyoqDQo+
ID4gKyAqIHVrYXJjaF9mZnNsIC0gZmluZCBmaXJzdCAobG93ZXN0KSBzZXQgYml0IGluIHdvcmQu
DQo+ID4gKyAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gNCj4gPiArICoNCj4gPiArICogVW5k
ZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMsIHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBm
aXJzdC4NCj4gPiArICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1a2FyY2hf
ZmZzbCh1bnNpZ25lZCBsb25nIHgpDQo+ID4gK3sNCj4gPiArICAgcmV0dXJuIF9fYnVpbHRpbl9m
ZnNsKHgpOw0KPiA+ICt9DQo+ID4NCj4gPiAtICAgcmV0dXJuIDYzIC0gY2x6Ow0KPiA+ICsvKioN
Cj4gPiArICogdWthcmNoX2Zsc2wgLSBmaW5kIGxhc3QgKGhpZ2hlc3QpIHNldCBiaXQgaW4gd29y
ZC4NCj4gPiArICogQHdvcmQ6IFRoZSB3b3JkIHRvIHNlYXJjaA0KPiA+ICsgKiA+ICsgKiBVbmRl
ZmluZWQgaWYgbm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZp
cnN0Lg0KPg0KPiBTaW1pbGFyIHJlbWFyayBoZXJlLg0KPg0KPiA+ICsgKi8NCj4gPiArc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBsb25nIHVrYXJjaF9mbHNsKHVuc2lnbmVkIGxvbmcgeCkNCj4gPiAr
ew0KPiA+ICsgICByZXR1cm4geCA/IHNpemVvZih4KSAqIDggLSBfX2J1aWx0aW5fY2x6bCh4KSA6
IDA7DQo+ID4gICB9DQo+ID4NCj4NCj4gQ2hlZXJzLA0KPg0KPiAtLQ0KPiBKdWxpZW4gR3JhbGwN
CklNUE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0
YWNobWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYg
eW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2Vu
ZGVyIGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBv
dGhlciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhl
IGluZm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QK
TWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVj
dC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 10:01:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 10:01:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDn3d-0005BL-A0; Fri, 27 Sep 2019 10:01:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=tE9W=XW=arm.com=julien.grall@srs-us1.protection.inumbo.net>)
 id 1iDn3b-0005BG-OZ
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 10:00:59 +0000
X-Inumbo-ID: b3908264-e10d-11e9-97fb-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id b3908264-e10d-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 10:00:57 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4DC9728;
 Fri, 27 Sep 2019 03:00:57 -0700 (PDT)
Received: from [10.1.196.50] (e108454-lin.cambridge.arm.com [10.1.196.50])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 5D7653F534;
 Fri, 27 Sep 2019 03:00:56 -0700 (PDT)
To: "Justin He (Arm Technology China)" <Justin.He@arm.com>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
References: <20190927065351.70074-1-justin.he@arm.com>
 <20190927065351.70074-7-justin.he@arm.com>
 <bb4be802-9053-a3c5-acec-d96c545505ef@arm.com>
 <DB7PR08MB3082F0453F2D4DD84BCBDF01F7810@DB7PR08MB3082.eurprd08.prod.outlook.com>
From: Julien Grall <julien.grall@arm.com>
Message-ID: <d4727913-bc22-07c9-9fbe-6fd508d2db18@arm.com>
Date: Fri, 27 Sep 2019 11:00:55 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <DB7PR08MB3082F0453F2D4DD84BCBDF01F7810@DB7PR08MB3082.eurprd08.prod.outlook.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 6/6] arch/arm64: Implement
 bitops for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

CgpPbiAyNy8wOS8yMDE5IDEwOjU2LCBKdXN0aW4gSGUgKEFybSBUZWNobm9sb2d5IENoaW5hKSB3
cm90ZToKPiBIaSBKdWxpZW4KCkhpLAoKPiAKPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0K
Pj4gRnJvbTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPj4gU2VudDogMjAx
OeW5tDnmnIgyN+aXpSAxNzo0Mgo+PiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGlu
YSkgPEp1c3Rpbi5IZUBhcm0uY29tPjsgbWluaW9zLQo+PiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZzsgU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Cj4+IENjOiBTaGFy
YW4uU2FudGhhbmFtQG5lY2xhYi5ldTsgRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFi
LmV1PjsKPj4gS2FseSBYaW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNv
bT47Cj4+IFNhbnRpYWdvLlBhZ2FuaUBuZWNsYWIuZXUKPj4gU3ViamVjdDogUmU6IFtVTklLUkFG
VCBQQVRDSCB2MiA2LzZdIGFyY2gvYXJtNjQ6IEltcGxlbWVudCBiaXRvcHMgZm9yCj4+IGFybTY0
Cj4+Cj4+IEhpIEppYSwKPj4KPj4gT24gMjcvMDkvMjAxOSAwNzo1MywgSmlhIEhlIHdyb3RlOgo+
Pj4gV2l0aG91dCB0aGlzIHBhdGNoLCBjb21waWxlciB3aWxsIHJlcG9ydCB3YXJuaW5nIGFzIGZv
bGxvd3M6Cj4+PiAgICAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHBsYXQvY29tbW9uL2FybS90aW1l
LmM6NDE6MDoKPj4+IGluY2x1ZGUvdWsvYml0b3BzLmg6IEluIGZ1bmN0aW9uICd1a19nZXRfY291
bnRfb3JkZXInOgo+Pj4gaW5jbHVkZS91ay9iaXRvcHMuaDo4OToxMDogd2FybmluZzogaW1wbGlj
aXQgZGVjbGFyYXRpb24gb2YgZnVuY3Rpb24KPj4+ICd1a2FyY2hfZmxzJzsgZGlkIHlvdSBtZWFu
ICd1a2FyY2hfZmZzbCc/IFstV2ltcGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQo+Pj4gICAg
IG9yZGVyID0gdWthcmNoX2Zscyhjb3VudCk7Cj4+PiAgICAgICAgICAgICBefn5+fn5+fn5+Cj4+
PiAgICAgICAgICAgICB1a2FyY2hfZmZzbAo+Pj4gaW5jbHVkZS91ay9iaXRvcHMuaDogSW4gZnVu
Y3Rpb24gJ3VrX2ZpbmRfbGFzdF9iaXQnOgo+Pj4gaW5jbHVkZS91ay9iaXRvcHMuaDoxNTQ6MTg6
IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9uCj4+PiAndWthcmNoX2Zs
c2wnOyBkaWQgeW91IG1lYW4gJ3VrYXJjaF9mZnNsJz8gWy1XaW1wbGljaXQtZnVuY3Rpb24tZGVj
bGFyYXRpb25dCj4+PiAgICAgICByZXR1cm4gKGJpdCArIHVrYXJjaF9mbHNsKG1hc2spKTsKPj4+
ICAgICAgICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4KPj4+ICAgICAgICAgICAgICAgICAgICAg
dWthcmNoX2Zmc2wKPj4KPj4gVGhpcyBleHBsYWlucyB3aHkgeW91IGFkZCB1a2FyY2hfZmxzIGFu
ZCB1a2FyY2hfZmxzbC4gQnV0IHRoaXMgZG9lcyBub3QKPj4gZXhwbGFpbgo+PiB3aHkgeW91IHJl
aW1wbGVtZW50ZWQgdWthcmNoX2Zmc2wgd2l0aCBhIGJ1aWx0aW4uCj4+Cj4gT2theSwgSSB3aWxs
IHBvc3QgbXkgdGVzdCByZXN1bHQuCj4gSSBjb21wYXJlZCB0aGUgdHdvIGltcGxlbWVudGF0aW9u
IChnY2MgYnVpbHRpbiBhbmQgdWthcmNoX2Zmc2wgb3JpZ2luYWwgb25lICkKClRCSCwgdXNpbmcg
YnVpbHRpbiBpcyBiZXR0ZXIgYXMgeW91IGNhbiBsZXQgdGhlIEdDQyBmb2xrcyB0byBtYWludGFp
biB0aGUgCmZ1bmN0aW9uIGFuZCB0aGVyZWZvcmUgb25lIGxlc3MgZm9yIFVuaWtyYWZ0IGNvbW11
bml0eSB0byB0YWtlIGNhcmUgb2YgOikuCgpUaGVyZSBhcmUgYSBmZXcgY2FzZXMgKHN1Y2ggYXMg
YXRvbWljcykgd2hlcmUgdGhpcyBtYXkgbm90IGJlIHRoZSBiZXN0IHNvbHV0aW9uIAp0byB1c2Ug
YnVpbHRpbiBhcyB5b3UgbWF5IHdhbnQgdG8gZnVydGhlciBvcHRpbWl6ZSBpdCBhdCBydW50aW1l
LiBCdXQgdGhhdCdzIGEgCmRpZmZlcmVudCB0b3BpYyA7KS4KCkFueXdheSwgSSB3b3VsZCBzdWdn
ZXN0IHRvIG1vdmUgdGhlIHJld29yayBvZiB1a2FyY2hfZmZzbCBpbiBhIHNlcGFyYXRlIHBhdGNo
LgoKPiAKPiBmb3IgKHg9MDsgeDwweGZmZmZmZmY7IHgrKykKPiAKPiBvcmlnaW5hbDoKPiByZWFs
ICAgIDBtMS43MjNzCj4gdXNlciAgICAwbTEuNzIzcwo+IHN5cyAgICAgMG0wLjAwMHMKPiAKPiBn
Y2MgYnVpbHRpbjoKPiByZWFsICAgIDBtMS41NTBzCj4gdXNlciAgICAwbTEuNTQ2cwo+IHN5cyAg
ICAgMG0wLjAwNHMKCklmIHlvdSBwbGFuIHRvIGFkZCB0aGUgdGVzdCByZXN1bHQgaW4gdGhlIGNv
bW1pdCBtZXNzYWdlLCB0aGVuIHBsZWFzZSBtZW50aW9uIAp0aGUgY29tcGlsZXIgdmVyc2lvbiB1
c2VkIGFuZCBhbHNvIHRoZSBwbGF0Zm9ybSBmb3IgdGVzdGluZy4KCkNoZWVycywKCi0tIApKdWxp
ZW4gR3JhbGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
Ck1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qu
b3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 10:06:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 10:06:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDn8T-0005H4-Pp; Fri, 27 Sep 2019 10:06:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDn8T-0005Gz-4L
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 10:06:01 +0000
X-Inumbo-ID: 66d45990-e10e-11e9-97fb-bc764e2007e4
Received: from EUR04-HE1-obe.outbound.protection.outlook.com (unknown
 [40.107.7.89]) by localhost (Halon) with ESMTPS
 id 66d45990-e10e-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 10:05:59 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=kTxS49IhK6gdp8rwpRwqeFXR7aHVUamnDRgZMHOCZG8=;
 b=BVDPc2qvXsbOvovxDlQdWp8O76WZnrGp1vptlEBPDSWQN2w9OjvSpRLo06lDpL4IiQZkvD7jMZ58/PfbFJRDSrxZ/i5VE+qoiIuUnXNWOQoNDXyGFau7J6edhd74TIF3ecKOlEmxLxNPwMbS0MHVMt2wDJANPq3SMBxo38ODuYQ=
Received: from VI1PR0802CA0037.eurprd08.prod.outlook.com
 (2603:10a6:800:a9::23) by VI1PR0802MB2528.eurprd08.prod.outlook.com
 (2603:10a6:800:ad::7) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.15; Fri, 27 Sep
 2019 10:05:55 +0000
Received: from AM5EUR03FT003.eop-EUR03.prod.protection.outlook.com
 (2a01:111:f400:7e08::200) by VI1PR0802CA0037.outlook.office365.com
 (2603:10a6:800:a9::23) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.15 via Frontend
 Transport; Fri, 27 Sep 2019 10:05:55 +0000
Authentication-Results: spf=temperror (sender IP is 63.35.35.123)
 smtp.mailfrom=arm.com; lists.xenproject.org; dkim=pass (signature was
 verified) header.d=armh.onmicrosoft.com;lists.xenproject.org; dmarc=none
 action=none header.from=arm.com;
Received-SPF: TempError (protection.outlook.com: error in processing during
 lookup of arm.com: DNS Timeout)
Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by
 AM5EUR03FT003.mail.protection.outlook.com (10.152.16.149) with
 Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2305.15 via Frontend Transport; Fri, 27 Sep 2019 10:05:53 +0000
Received: ("Tessian outbound e4042aced47b:v33");
 Fri, 27 Sep 2019 10:05:52 +0000
X-CR-MTA-TID: 64aa7808
Received: from 2e2a6be6e041.3 (ip-172-16-0-2.eu-west-1.compute.internal
 [104.47.2.52]) by 64aa7808-outbound-1.mta.getcheckrecipient.com id
 AC69C042-8DA5-4580-AEFF-C05321097118.1; 
 Fri, 27 Sep 2019 10:05:47 +0000
Received: from EUR01-DB5-obe.outbound.protection.outlook.com
 (mail-db5eur01lp2052.outbound.protection.outlook.com [104.47.2.52])
 by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 2e2a6be6e041.3
 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384);
 Fri, 27 Sep 2019 10:05:47 +0000
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=EIF27OxqP+0whPNroK6glBb4DSZzpWSmgXuGVMBQGA7v7iVP3wZ19UPTxb1rPWYcoVYiXD2TWWKBlOYZCBywJwCt0sU4zu0uDoYlQpfMzNdftx5nXWBkaBodbVX+zbMO1U93mpmG0Vn6ZbMtAHor6KC0bqr4dkIpShbZgN+scIOyEM7nGZxFzFtNJETfp28EzN2hKRlSFlI4eHkZCsecm10QLHyt1P+Q/p8UKmbA6c9XSUYDsJLHMx4sKA6RUQgao5iz7gUfbKuBiRHUp344wrIY7oOYViRqkSC7x/KmptWOtU7/9/Ge59obMI0nsdtUu5Ken272nK5FBIiLb66irQ==
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=2a5+p5knrbilmPbxZtshboOGrbSzbh5WbKK3iDsllqg=;
 b=UZOfGiMLtxemX2z5Z0WvX3U7wGVxIwASspGVJZfX5Nv4iI5Y2nwgaCse2pMuPiQNbAZYuIBkh3SfEeTpWIIpSElTnYtwuanMkSAk59jSU9xaZT7bNT9KNKR+C4muFaV+eTRkkv6bYZquLKKUYKtu1ycxyGMO1iGsgdaI8Ig/ymNWunnr3EmSP8WpOpb5n+ys90dWVWDXrGcwTTac3H0BMLAdXZISMnF+r3iaU68mMB9qnSuVw3Szt5W59FprrKZGe59jXLvci7ai3J3TOPih3AlxMZRRqwkBWnkOGz8Vz+XXwW6UKsT6KgDrQ381AO0TWp8wPkda6JiMJc0//6ke5g==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass
 header.d=arm.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; 
 s=selector2-armh-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=2a5+p5knrbilmPbxZtshboOGrbSzbh5WbKK3iDsllqg=;
 b=8DxLlepoSLCqQOegcx2s4WY4QJX8ke93liw0j5YptgO9p52HUl6rJaYEwymlSzAeCxdFC9zNfIv+iy31nA4fPQONHMKXt7O478aQzrBvBM8gcPnqmWZ4f3YG9D+u1De4EaIriyuFc+az4KKb03O4xOy4WqzL53V3rL6OMQRJr2M=
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com (52.134.110.24) by
 DB7PR08MB3737.eurprd08.prod.outlook.com (20.178.84.219) with Microsoft SMTP
 Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.2305.17; Fri, 27 Sep 2019 10:05:46 +0000
Received: from DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d]) by DB7PR08MB3082.eurprd08.prod.outlook.com
 ([fe80::3dcd:d5e4:c17:489d%5]) with mapi id 15.20.2305.017; Fri, 27 Sep 2019
 10:05:46 +0000
From: "Justin He (Arm Technology China)" <Justin.He@arm.com>
To: Julien Grall <Julien.Grall@arm.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>, Simon Kuenzer <simon.kuenzer@neclab.eu>
Thread-Topic: [UNIKRAFT PATCH v2 6/6] arch/arm64: Implement bitops for arm64
Thread-Index: AQHVdQBnigPC/ebbFkSAhXTmsHYqTKc/RZ0AgAACVjCAAALzgIAAAOJA
Date: Fri, 27 Sep 2019 10:05:46 +0000
Message-ID: <DB7PR08MB30822B089D53E0316084A5A4F7810@DB7PR08MB3082.eurprd08.prod.outlook.com>
References: <20190927065351.70074-1-justin.he@arm.com>
 <20190927065351.70074-7-justin.he@arm.com>
 <bb4be802-9053-a3c5-acec-d96c545505ef@arm.com>
 <DB7PR08MB3082F0453F2D4DD84BCBDF01F7810@DB7PR08MB3082.eurprd08.prod.outlook.com>
 <d4727913-bc22-07c9-9fbe-6fd508d2db18@arm.com>
In-Reply-To: <d4727913-bc22-07c9-9fbe-6fd508d2db18@arm.com>
Accept-Language: en-US, zh-CN
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-ts-tracking-id: 88ab939f-a640-4787-809f-14bc389dd69e.1
x-checkrecipientchecked: true
Authentication-Results-Original: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
x-originating-ip: [113.29.88.7]
x-ms-publictraffictype: Email
X-MS-Office365-Filtering-Correlation-Id: b20b7538-5150-48b8-4de0-08d74332486d
X-MS-Office365-Filtering-HT: Tenant
X-MS-TrafficTypeDiagnostic: DB7PR08MB3737:|DB7PR08MB3737:|VI1PR0802MB2528:
x-ms-exchange-transport-forked: True
X-Microsoft-Antispam-PRVS: <VI1PR0802MB25280EFB757A59235BCD0C61F7810@VI1PR0802MB2528.eurprd08.prod.outlook.com>
x-checkrecipientrouted: true
x-ms-oob-tlc-oobclassifiers: OLM:1201;OLM:1201;
x-forefront-prvs: 0173C6D4D5
X-Forefront-Antispam-Report-Untrusted: SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(346002)(376002)(396003)(136003)(366004)(13464003)(43544003)(52314003)(199004)(189003)(25786009)(11346002)(7696005)(52536014)(66066001)(5660300002)(26005)(486006)(9686003)(186003)(55016002)(102836004)(71200400001)(71190400001)(7736002)(2501003)(99286004)(3846002)(6116002)(305945005)(55236004)(478600001)(8936002)(66446008)(76176011)(53546011)(66556008)(64756008)(14454004)(66476007)(33656002)(6246003)(8676002)(446003)(6506007)(110136005)(4326008)(86362001)(81156014)(6436002)(76116006)(74316002)(81166006)(66946007)(229853002)(2906002)(54906003)(14444005)(476003)(316002)(256004);
 DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR08MB3737;
 H:DB7PR08MB3082.eurprd08.prod.outlook.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:1; MX:1; 
received-spf: None (protection.outlook.com: arm.com does not designate
 permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam-Untrusted: BCL:0;
X-Microsoft-Antispam-Message-Info-Original: SF5IPD14KysGaSg3sg6tvHycJpDRr1uyx8/cs8gubPAl7DFoxVdudN+szME1w62RIx6FvgQSbO6l4kjvVJLUQyHRdQkV2ojI4cjkWs1yWSrUHWzpysZx7p+HhqxkRP9h6K9KXb5DHoLAdhJZ4a5d3vmBbYkBp9vsTHFevEg9oxC0x8HdQJ8eT5H7/CF9kzOPc+Kk6TLRRg8MKYx2dzMAbDmkbm33h1JZ5/tiZsSjAlNjsxRO5ELe/jmNSp3gmpTV94VsrUf+pEKveC8jeP7QCdd/AW3X+7Nmcivf/2eR7XKdoP1TKhDH8x2mGz3TmCf9i++xIWXVlvIqJgVMpQ8TgjILaS6/eaD1cfMBRY/6c6/hKeVbnfe5pj0pvSuD1cRgD3pgzfg/UG8UG9e+yUCUp7a/xCzsjQZpu8EtOCWGF9k=
MIME-Version: 1.0
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR08MB3737
Original-Authentication-Results: spf=none (sender IP is )
 smtp.mailfrom=Justin.He@arm.com; 
X-EOPAttributedMessage: 0
X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM5EUR03FT003.eop-EUR03.prod.protection.outlook.com
X-Forefront-Antispam-Report: CIP:63.35.35.123; IPV:CAL; SCL:-1; CTRY:IE;
 EFV:NLI; SFV:NSPM;
 SFS:(10009020)(4636009)(39860400002)(396003)(346002)(136003)(376002)(189003)(199004)(13464003)(52314003)(40434004)(43544003)(70206006)(70586007)(2501003)(99286004)(26005)(11346002)(446003)(23676004)(55016002)(2486003)(63350400001)(436003)(126002)(476003)(74316002)(6506007)(53546011)(102836004)(305945005)(336012)(229853002)(186003)(486006)(76176011)(36906005)(86362001)(316002)(3846002)(54906003)(4326008)(33656002)(7696005)(6116002)(2906002)(76130400001)(107886003)(6246003)(9686003)(7736002)(22756006)(50466002)(14454004)(110136005)(47776003)(66066001)(52536014)(5660300002)(81166006)(8936002)(8676002)(356004)(81156014)(25786009)(478600001)(14444005)(5024004)(26826003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:VI1PR0802MB2528;
 H:64aa7808-outbound-1.mta.getcheckrecipient.com; FPR:; SPF:TempError; LANG:en;
 PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com; MX:1; A:1; 
X-MS-Office365-Filtering-Correlation-Id-Prvs: add9738c-8d19-406d-27c8-08d743324413
X-Forefront-PRVS: 0173C6D4D5
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: YwJCJnA7qmpOCERE2caRMW0TQS2GzT5Ks5A7rLPclccNdOy2g+ndyrpGWyBVgLMMTnYcTel9gzFiWG66V8OyxV8XBvIXBzkDtdHlMPnWobBdEw0tCUgtLNMS8mdWNbcxmX8yzE8cRPQy6G02uo9Kpz/ALm57ZLGv+2/klQNjYBbPDbG8AP8Cur1sLhVdKrsM0+w/hXlq9nJLkkLtKjGUxfVM3h1R5fUgQka16KK0qgiVEICMA27qw2BKXuQCCoLTyttMqsYNKeDl/ne0My8tkmFArN77e41Whne5bhwA1BgMHPLwcXtRyjWxm8nUSxwdfcegUcUJt8TZNTH15piVXoapHS+rY81FHgXK5uzWHlAH9G1P4iWWDLJH5/KgySuL8OyBhmorcdXYJFt8cHEEIbA6EKWorn7JrGEAAv29kvc=
X-OriginatorOrg: arm.com
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2019 10:05:53.8202 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: b20b7538-5150-48b8-4de0-08d74332486d
X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d; Ip=[63.35.35.123];
 Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com]
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0802MB2528
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v2 6/6] arch/arm64: Implement
 bitops for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 "Kaly Xin \(Arm Technology China\)" <Kaly.Xin@arm.com>,
 "Sharan.Santhanam@neclab.eu" <Sharan.Santhanam@neclab.eu>,
 "Santiago.Pagani@neclab.eu" <Santiago.Pagani@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgSnVsaWVuDQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogSnVsaWVu
IEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4NCj4gU2VudDogMjAxOeW5tDnmnIgyN+aXpSAx
ODowMQ0KPiBUbzogSnVzdGluIEhlIChBcm0gVGVjaG5vbG9neSBDaGluYSkgPEp1c3Rpbi5IZUBh
cm0uY29tPjsgbWluaW9zLQ0KPiBkZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZzsgU2ltb24gS3Vl
bnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+DQo+IENjOiBTaGFyYW4uU2FudGhhbmFtQG5l
Y2xhYi5ldTsgRmVsaXBlIEh1aWNpIDxmZWxpcGUuaHVpY2lAbmVjbGFiLmV1PjsNCj4gS2FseSBY
aW4gKEFybSBUZWNobm9sb2d5IENoaW5hKSA8S2FseS5YaW5AYXJtLmNvbT47DQo+IFNhbnRpYWdv
LlBhZ2FuaUBuZWNsYWIuZXUNCj4gU3ViamVjdDogUmU6IFtVTklLUkFGVCBQQVRDSCB2MiA2LzZd
IGFyY2gvYXJtNjQ6IEltcGxlbWVudCBiaXRvcHMgZm9yDQo+IGFybTY0DQo+DQo+DQo+DQo+IE9u
IDI3LzA5LzIwMTkgMTA6NTYsIEp1c3RpbiBIZSAoQXJtIFRlY2hub2xvZ3kgQ2hpbmEpIHdyb3Rl
Og0KPiA+IEhpIEp1bGllbg0KPg0KPiBIaSwNCj4NCj4gPg0KPiA+PiAtLS0tLU9yaWdpbmFsIE1l
c3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBKdWxpZW4gR3JhbGwgPGp1bGllbi5ncmFsbEBhcm0uY29t
Pg0KPiA+PiBTZW50OiAyMDE55bm0OeaciDI35pelIDE3OjQyDQo+ID4+IFRvOiBKdXN0aW4gSGUg
KEFybSBUZWNobm9sb2d5IENoaW5hKSA8SnVzdGluLkhlQGFybS5jb20+OyBtaW5pb3MtDQo+ID4+
IGRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnOyBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVy
QG5lY2xhYi5ldT4NCj4gPj4gQ2M6IFNoYXJhbi5TYW50aGFuYW1AbmVjbGFiLmV1OyBGZWxpcGUg
SHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+Ow0KPiA+PiBLYWx5IFhpbiAoQXJtIFRlY2hu
b2xvZ3kgQ2hpbmEpIDxLYWx5LlhpbkBhcm0uY29tPjsNCj4gPj4gU2FudGlhZ28uUGFnYW5pQG5l
Y2xhYi5ldQ0KPiA+PiBTdWJqZWN0OiBSZTogW1VOSUtSQUZUIFBBVENIIHYyIDYvNl0gYXJjaC9h
cm02NDogSW1wbGVtZW50IGJpdG9wcw0KPiBmb3INCj4gPj4gYXJtNjQNCj4gPj4NCj4gPj4gSGkg
SmlhLA0KPiA+Pg0KPiA+PiBPbiAyNy8wOS8yMDE5IDA3OjUzLCBKaWEgSGUgd3JvdGU6DQo+ID4+
PiBXaXRob3V0IHRoaXMgcGF0Y2gsIGNvbXBpbGVyIHdpbGwgcmVwb3J0IHdhcm5pbmcgYXMgZm9s
bG93czoNCj4gPj4+ICAgICBJbiBmaWxlIGluY2x1ZGVkIGZyb20gcGxhdC9jb21tb24vYXJtL3Rp
bWUuYzo0MTowOg0KPiA+Pj4gaW5jbHVkZS91ay9iaXRvcHMuaDogSW4gZnVuY3Rpb24gJ3VrX2dl
dF9jb3VudF9vcmRlcic6DQo+ID4+PiBpbmNsdWRlL3VrL2JpdG9wcy5oOjg5OjEwOiB3YXJuaW5n
OiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbg0KPiA+Pj4gJ3VrYXJjaF9mbHMnOyBk
aWQgeW91IG1lYW4gJ3VrYXJjaF9mZnNsJz8gWy1XaW1wbGljaXQtZnVuY3Rpb24tDQo+IGRlY2xh
cmF0aW9uXQ0KPiA+Pj4gICAgIG9yZGVyID0gdWthcmNoX2Zscyhjb3VudCk7DQo+ID4+PiAgICAg
ICAgICAgICBefn5+fn5+fn5+DQo+ID4+PiAgICAgICAgICAgICB1a2FyY2hfZmZzbA0KPiA+Pj4g
aW5jbHVkZS91ay9iaXRvcHMuaDogSW4gZnVuY3Rpb24gJ3VrX2ZpbmRfbGFzdF9iaXQnOg0KPiA+
Pj4gaW5jbHVkZS91ay9iaXRvcHMuaDoxNTQ6MTg6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0
aW9uIG9mIGZ1bmN0aW9uDQo+ID4+PiAndWthcmNoX2Zsc2wnOyBkaWQgeW91IG1lYW4gJ3VrYXJj
aF9mZnNsJz8gWy1XaW1wbGljaXQtZnVuY3Rpb24tDQo+IGRlY2xhcmF0aW9uXQ0KPiA+Pj4gICAg
ICAgcmV0dXJuIChiaXQgKyB1a2FyY2hfZmxzbChtYXNrKSk7DQo+ID4+PiAgICAgICAgICAgICAg
ICAgICAgIF5+fn5+fn5+fn5+DQo+ID4+PiAgICAgICAgICAgICAgICAgICAgIHVrYXJjaF9mZnNs
DQo+ID4+DQo+ID4+IFRoaXMgZXhwbGFpbnMgd2h5IHlvdSBhZGQgdWthcmNoX2ZscyBhbmQgdWth
cmNoX2Zsc2wuIEJ1dCB0aGlzIGRvZXMgbm90DQo+ID4+IGV4cGxhaW4NCj4gPj4gd2h5IHlvdSBy
ZWltcGxlbWVudGVkIHVrYXJjaF9mZnNsIHdpdGggYSBidWlsdGluLg0KPiA+Pg0KPiA+IE9rYXks
IEkgd2lsbCBwb3N0IG15IHRlc3QgcmVzdWx0Lg0KPiA+IEkgY29tcGFyZWQgdGhlIHR3byBpbXBs
ZW1lbnRhdGlvbiAoZ2NjIGJ1aWx0aW4gYW5kIHVrYXJjaF9mZnNsIG9yaWdpbmFsDQo+IG9uZSAp
DQo+DQo+IFRCSCwgdXNpbmcgYnVpbHRpbiBpcyBiZXR0ZXIgYXMgeW91IGNhbiBsZXQgdGhlIEdD
QyBmb2xrcyB0byBtYWludGFpbiB0aGUNCj4gZnVuY3Rpb24gYW5kIHRoZXJlZm9yZSBvbmUgbGVz
cyBmb3IgVW5pa3JhZnQgY29tbXVuaXR5IHRvIHRha2UgY2FyZSBvZiA6KS4NCj4NCj4gVGhlcmUg
YXJlIGEgZmV3IGNhc2VzIChzdWNoIGFzIGF0b21pY3MpIHdoZXJlIHRoaXMgbWF5IG5vdCBiZSB0
aGUgYmVzdA0KPiBzb2x1dGlvbg0KPiB0byB1c2UgYnVpbHRpbiBhcyB5b3UgbWF5IHdhbnQgdG8g
ZnVydGhlciBvcHRpbWl6ZSBpdCBhdCBydW50aW1lLiBCdXQgdGhhdCdzDQo+IGENCj4gZGlmZmVy
ZW50IHRvcGljIDspLg0KPg0KPiBBbnl3YXksIEkgd291bGQgc3VnZ2VzdCB0byBtb3ZlIHRoZSBy
ZXdvcmsgb2YgdWthcmNoX2Zmc2wgaW4gYSBzZXBhcmF0ZQ0KPiBwYXRjaC4NCg0KVGhhbmtzLCBv
ayB3aXRoIHRoYXQNCg0KPg0KPiA+DQo+ID4gZm9yICh4PTA7IHg8MHhmZmZmZmZmOyB4KyspDQo+
ID4NCj4gPiBvcmlnaW5hbDoNCj4gPiByZWFsICAgIDBtMS43MjNzDQo+ID4gdXNlciAgICAwbTEu
NzIzcw0KPiA+IHN5cyAgICAgMG0wLjAwMHMNCj4gPg0KPiA+IGdjYyBidWlsdGluOg0KPiA+IHJl
YWwgICAgMG0xLjU1MHMNCj4gPiB1c2VyICAgIDBtMS41NDZzDQo+ID4gc3lzICAgICAwbTAuMDA0
cw0KPg0KPiBJZiB5b3UgcGxhbiB0byBhZGQgdGhlIHRlc3QgcmVzdWx0IGluIHRoZSBjb21taXQg
bWVzc2FnZSwgdGhlbiBwbGVhc2UNCj4gbWVudGlvbg0KPiB0aGUgY29tcGlsZXIgdmVyc2lvbiB1
c2VkIGFuZCBhbHNvIHRoZSBwbGF0Zm9ybSBmb3IgdGVzdGluZy4NCj4NCg0KU3VyZSwgdGhhbmtz
DQoNCj4gQ2hlZXJzLA0KPg0KPiAtLQ0KPiBKdWxpZW4gR3JhbGwNCklNUE9SVEFOVCBOT1RJQ0U6
IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNvbmZp
ZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhlIGlu
dGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5IGFu
ZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVzZSBp
dCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGluIGFu
eSBtZWRpdW0uIFRoYW5rIHlvdS4NCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 10:17:42 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 10:17:42 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDnJm-0006I0-7A; Fri, 27 Sep 2019 10:17:42 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=t+55=XW=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDnJl-0006Hh-4Z
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 10:17:41 +0000
X-Inumbo-ID: ff120b02-e10f-11e9-bf31-bc764e2007e4
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by localhost (Halon) with ESMTPS
 id ff120b02-e10f-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 10:17:23 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1569579443;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-id:content-transfer-encoding: mime-version;
 bh=JhICq+a6rY7gUgwkAu2+RBq+zq27VzyAVX6UjNOOgss=;
 b=Aeu3ojPLHGDMPdJ11+iI9lmNPHpL/kdRhpNuNsWYFUqKz2W+wV0M/KY/
 itBv604IPazhpdwjMctwuOC1RicVat1TJ8xfGlnIUeBFAdsX+tbRcQaIg
 qb9cO+nYrqOCY3uRVl4rfWhOwQH5eEQQIE9IUCJkrQml8GW4uVjnnhnEN 0=;
Authentication-Results: esa4.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: 4hDsgImO4z/Cn13tixrof/9k0jUrRtCddwR1l6TX/xof+7zkh3c8TFt69oBI36pTWo166B1PB/
 9wmwY3Ug8bVEoDsfia4GB5zvR5nXv9IcA0aHxRTEaIatTX1FrJL7/+7IJtfzJJwpxAfC7u2Vtm
 PGMjlApiGy3Rhw2YBnLF8cYOSnujLIbU2BDb0gg29XoPSqqZm6qC0DwOjrCo39ibdEyTkh7ZOs
 QKBHA2+FGn01w/4k0NuRvvW7JPjFM+8T99VmspRoQZZGgsESsVypyiB2b6KAoanFiXz77S1dSs
 qAk=
X-SBRS: 2.7
X-MesageID: 6505884
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,555,1559534400"; 
   d="scan'208";a="6505884"
From: Lars Kurth <lars.kurth@citrix.com>
To: Jan Beulich <jbeulich@suse.com>, Lars Kurth <lars.kurth@xenproject.org>
Thread-Topic: [PATCH v2 5/6] Add guide on Communication Best Practice
Thread-Index: AQHVdKIoBNlHjnrbLUK7o4oIKuieK6c/HQoAgAAiaoA=
Date: Fri, 27 Sep 2019 10:17:19 +0000
Message-ID: <FB6109D7-6FDC-41AF-95F8-3CC65FAA1215@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
 <cover.1569525222.git.lars.kurth@citrix.com>
 <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
 <f28e67ef-2f93-3b61-bc52-304f82c3e44a@suse.com>
In-Reply-To: <f28e67ef-2f93-3b61-bc52-304f82c3e44a@suse.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <F67218B68914C84BB65931461A988674@citrix.com>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [PATCH v2 5/6] Add guide on Communication Best
 Practice
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQoNCu+7v09uIDI3LzA5LzIwMTksIDEwOjE0LCAiSmFuIEJldWxpY2giIDxqYmV1bGljaEBzdXNl
LmNvbT4gd3JvdGU6DQoNCiAgICBPbiAyNi4wOS4yMDE5IDIxOjM5LCBMYXJzIEt1cnRoIHdyb3Rl
Og0KICAgID4gKyMjIyBWZXJib3NlIHZzLiB0ZXJzZQ0KICAgID4gK0R1ZSB0byB0aGUgdGltZSBp
dCB0YWtlcyB0byByZXZpZXcgYW5kIGNvbXBvc2UgY29kZSByZXZpZXdlciwgcmV2aWV3ZXJzIG9m
dGVuIGFkb3B0IGENCiAgICA+ICt0ZXJzZSBzdHlsZS4gSXQgaXMgbm90IHVudXN1YWwgdG8gc2Vl
IHJldmlldyBjb21tZW50cyBzdWNoIGFzDQogICAgPiArPiB0eXBvDQogICAgPiArPiBzL3Jlc2lv
bnMvcmVnaW9ucy8NCiAgICA+ICs+IGNvZGluZyBzdHlsZQ0KICAgID4gKz4gY29kaW5nIHN0eWxl
OiBicmFja2V0cyBub3QgbmVlZGVkDQogICAgPiArZXRjLg0KICAgID4gKw0KICAgID4gK1RlcnNl
IGNvZGUgcmV2aWV3IHN0eWxlIGhhcyBpdHMgcGxhY2UgYW5kIGNhbiBiZSBwcm9kdWN0aXZlIGZv
ciBib3RoIHRoZSByZXZpZXdlciBhbmQNCiAgICA+ICt0aGUgYXV0aG9yLiBIb3dldmVyLCBvdmVy
dXNlIGNhbiBjb21lIGFjcm9zcyBhcyB1bmZyaWVuZGx5LCBsYWNraW5nIGVtcGF0aHkgYW5kDQog
ICAgPiArY2FuIHRodXMgY3JlYXRlIGEgbmVnYXRpdmUgaW1wcmVzc2lvbiB3aXRoIHRoZSBhdXRo
b3Igb2YgYSBwYXRjaC4gVGhpcyBpcyBpbiBwYXJ0aWN1bGFyDQogICAgPiArdHJ1ZSwgd2hlbiB5
b3UgZG8gbm90IGtub3cgdGhlIGF1dGhvciBvciB0aGUgYXV0aG9yIGlzIGEgbmV3Y29tZXIuIFRl
cnNlDQogICAgPiArY29tbXVuaWNhdGlvbiBzdHlsZXMgY2FuIGFsc28gYmUgcGVyY2VpdmVkIGFz
IHJ1ZGUgaW4gc29tZSBjdWx0dXJlcy4NCiAgICANCiAgICBBbmQgYW5vdGhlciByZW1hcmsgaGVy
ZTogTm90IGJlaW5nIHRlcnNlIGluIHNpdHVhdGlvbnMgbGlrZSB0aGUgb25lcw0KICAgIGVudW1l
cmF0ZWQgYXMgZXhhbXBsZXMgYWJvdmUgaXMgYSBkb3VibGUgd2FzdGUgb2YgdGhlIHJldmlld2Vy
J3MgdGltZToNCiAgICBUaGV5IHNob3VsZG4ndCBldmVuIG5lZWQgdG8gbWFrZSBzdWNoIGNvbW1l
bnRzLCBlc3BlY2lhbGx5IG5vdCBtYW55DQogICAgdGltZXMgZm9yIGEgc2luZ2xlIHBhdGNoIChz
ZWUgeW91ciBtZW50aW9uIG9mICJvdmVydXNlIikuIEkgcmVhbGl6ZQ0KICAgIHdlIHN0aWxsIGhh
dmUgbm8gYXV0b21hdGVkIG1lY2hhbmlzbSB0byBjaGVjayBzdHlsZSBhc3BlY3RzLCBidXQNCiAg
ICBhbnlib2R5IGNhbiBlYXNpbHkgbG9vayBvdmVyIHRoZWlyIHBhdGNoZXMgYmVmb3JlIHN1Ym1p
dHRpbmcgdGhlbS4NCiAgICBBbmQgZm9yIGFuIG9jY2FzaW9uYWwgaXNzdWUgSSB0aGluayBhIHRl
cnNlIHJlcGx5IGlzIHF1aXRlIHJlYXNvbmFibGUNCiAgICB0byBoYXZlLg0KDQpBdCB0aGUgZW5k
IG9mIHRoZSBkYXksIG5vbmUgaWYgdGhpcyBpcyBtYW5kYXRvcnkuIFRoZSBkb2N1bWVudCBhbHNv
DQpoYXMgdHdvIGF1ZGllbmNlcw0KKiBBdXRob3JzIHdoaWNoIGdldCByZXZpZXcgZmVlZGJhY2sg
OiBmb3IgZXhhbXBsZSBieSBqdXN0IGhhdmluZw0KdGhpcyBzZWN0aW9uIGluIHRoZXJlIGl0IGhl
bHBzIA0KDQpJIGFkZGVkIHRoaXMgc2VjdGlvbiBwcmltYXJpbHkgYmVjYXVzZSB3ZSBkbyBzZWUg
dGhlIG9jY2FzaW9uYWwNCnZlcnkgdGVyc2UgcmV2aWV3IHN0eWxlIGFuZCBldmVuIEkgdGhpbmsg
c29tZXRpbWVzOiB3b3csIHRoYXQgY29tZXMNCmFjcm9zcyBhcyBoYXJzaC4gQnV0IEkgYWxzbyBr
bm93LCB0aGF0IGl0IGlzbid0IGludGVudGlvbmFsIGFuZCB0aGF0DQpJIGhhdmUgYSBmYWlybHkg
dGhpY2sgc2tpbi4gQW5kIGl0IGlzIG5vdCBleGNsdXNpdmUgdG8gdHlwb3MgYW5kIG1pbm9yIGlz
c3Vlcy4NCg0KV2hhdCBJIHdhcyB0cnlpbmcgdG8gZG8gaW4gdGhpcyBkb2N1bWVudCBpcyB0byBw
cm92aWRlDQphIGd1aWRlIHdoaWNoIHNob3dzIHRoZSBkaWZmZXJlbnQgcGF0dGVybnMgZnJvbSBi
b3RoIHBlcnNwZWN0aXZlcy4NCkkgaG9wZSBJIHN1Y2NlZWRlZCBpbiB0aGlzLCBidXQgSSBiZWxp
ZXZlIHRoYXQgeW91IHByaW1hcmlseQ0KcmV2aWV3ZWQgdGhlIGRvY3VtZW50IGZyb20gdGhlIHZp
ZXcgcG9pbnQgb2YgYSBjb2RlIHJldmlld2VyLg0KICAgIA0KICAgIE92ZXJhbGwgSSdtIHNlZWlu
ZyB0aGUgZ29vZCBpbnRlbnRpb25zIG9mIHRoaXMgZG9jdW1lbnQsIHlldCBJJ2Qgc3RpbGwNCiAg
ICB2b3RlIGF0IGxlYXN0IC0xIG9uIGl0IGlmIGl0IGNhbWUgdG8gYSB2b3RlLiBGb2xsb3dpbmcg
ZXZlbiBqdXN0IGENCiAgICBmYWlyIHBhcnQgb2YgaXQgaXMgYSBjb25zaWRlcmFibGUgZXh0cmEg
YW1vdW50IG9mIHRpbWUgdG8gaW52ZXN0IGluDQogICAgcmV2aWV3cywgd2hlbiB3ZSBhbHJlYWR5
IGhhdmUgYSBzZXZlcmUgcmV2aWV3aW5nIGJvdHRsZW5lY2suIElmIEkgaGF2ZQ0KICAgIHRvIGp1
ZGdlIGJldHdlZW4gZG9pbmcgYSBiYWQgKHN0eWxpc3RpY2FsbHkgYWNjb3JkaW5nIHRvIHRoaXMg
ZG9jLCBub3QNCiAgICB0ZWNobmljYWxseSkgcmV2aWV3IG9yIG5vbmUgYXQgYWxsIChiZWNhdXNl
IG9mIHRpbWUgY29uc3RyYWludHMpLCBJJ2QNCiAgICBmYXZvciB0aGUgZm9ybWVyLiBVbmxlc3Mg
b2YgY291cnNlIEknbSBhc2tlZCB0byBzdG9wIGRvaW5nIHNvLCBpbg0KICAgIHdoaWNoIGNhc2Ug
SSdkIGV4cGVjdCB3aG9ldmVyIGFza3MgdG8gYXJyYW5nZSBmb3IgdGhlIHJldmlld3MgdG8gYmUN
CiAgICBkb25lIGJ5IHNvbWVvbmUgZWxzZSBpbiBkdWUgY291cnNlLg0KDQpGaXJzdCBvZiBhbGw6
IHRoaXMgd291bGQgYmUgb3VyIGdvbGQgc3RhbmRhcmQgYW5kIGFzIHBvaW50ZWQgb3V0IGVhcmxp
ZXINClNvIGl0IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgdGhlIHRvb2xzIHRvIGRvIGJldHRlcjog
Zm9yIGV4YW1wbGUsIGZyb20gDQpteSBwb2ludCBvZiB2aWV3IGlmIHlvdSBmb2xsb3dlZCBzb21l
IG9mIGl0IGZvciBleGFtcGxlIGZvciBuZXdjb21lcnMNCmFuZCBzcGFyaW5nbHkgd2hlbiB5b3Ug
ZmVlbCBpdCBpcyByaWdodCwgdGhhdCB3b3VsZCBhbHJlYWR5IGJlIGEgDQp3aW4td2luLiBBbHNv
LCBjb25zaWRlciB0aGF0IGEgbW9yZSBwb3NpdGl2ZSB0b25lIHNob3VsZCBhbHNvIGhhdmUgdGhl
DQplZmZlY3QgdGhhdCB0aGVyZSBtYXkgYmUgbGVzcyB1bm5lY2Vzc2FyeSBkaXNjdXNzaW9uLiBJ
IHRoaW5rIHRoaXMNCmlzIHBhcnRpY3VsYXJseSB0cnVlIHdoZW4gaXQgY29tZXMgdG8gdGhlIHNl
Y3Rpb25zIG9uIGZhY3QtYmFzZWQgDQpyZXNwb25zZXMgdnMuIHNvbWUgd2hpY2ggYXJlIHVuY2xl
YXIuIFVuZm9ydHVuYXRlbHksIEkgZG9uJ3QgaGF2ZSBkYXRhDQpvbiB0aGlzIHRvIHByb3ZlIGl0
Lg0KICAgIA0KQ2FuIEkgbWF5YmUgZ2V0IHlvdSB0byByZWNvbnNpZGVyIGFuZCByZS1yZXZpZXcg
dGhlIG5leHQgdmVyc2lvbiBmcm9tIHRoZQ0KdmlldyBwb2ludCBvZiBhbiBhdXRob3IgYW5kIG1h
eWJlIG1ha2Ugc3VnZ2VzdGlvbnMgb24gaG93IHRvIGNyZWF0ZSBtb3JlDQpiYWxhbmNlDQoNCiAg
ICBJJ20gc29ycnkgZm9yIChsaWtlbHkpIHNvdW5kaW5nIGRlc3RydWN0aXZlIGhlcmUuDQoNCkkg
ZG9uJ3Qgc2VlIHRoaXMgeW91ciBmZWVkYmFjayBhcyBkZXN0cnVjdGl2ZSBhbmQgZG8gaG9wZSB0
aGF0IEkNCmNhbiBjb252aW5jZSB5b3UgdGhhdCBkb2N1bWVudGluZyBzb21lIG9mIHRoZSBwYXR0
ZXJucyB3aGljaA0KaGFwcGVuIG9uIHRoZSBsaXN0IGFyZSBpbiBmYWN0IGEgbmV0LXBvc2l0aXZl
DQoNClJlZ2FyZHMNCkxhcnMgDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 10:23:06 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 10:23:06 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDnP0-0007Sw-QT; Fri, 27 Sep 2019 10:23:06 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=t+55=XW=citrix.com=lars.kurth@srs-us1.protection.inumbo.net>)
 id 1iDnOz-0007Sf-UI
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 10:23:05 +0000
X-Inumbo-ID: ae3c6384-e110-11e9-bf31-bc764e2007e4
Received: from esa4.hc3370-68.iphmx.com (unknown [216.71.155.144])
 by localhost (Halon) with ESMTPS
 id ae3c6384-e110-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 10:22:17 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple;
 d=citrix.com; s=securemail; t=1569579737;
 h=from:to:cc:subject:date:message-id:references:
 in-reply-to:content-id:content-transfer-encoding: mime-version;
 bh=wIbFe2iuvmvCXJIhc1Jmux7uJ5bvAEpc3Mbf87dxNEk=;
 b=D+k7CCLwUoiHTYL/b0OFfcr9zicOrPwG3Q04nAcY2Yv6N7TaGF+3woVE
 H2J3JGtJzeD4RmwX8+JOSBNH/eEG5BTyWLcaLrS5zSWvuXJBD6BlZv2Wr
 MYbNU02yQ9D5BKA4g3kq+OmSc/wd4Hwyl9PHij2IrrWIPatF8UfF3GUCo 0=;
Authentication-Results: esa4.hc3370-68.iphmx.com;
 dkim=none (message not signed) header.i=none;
 spf=None smtp.pra=lars.kurth@citrix.com;
 spf=Pass smtp.mailfrom=lars.kurth@citrix.com;
 spf=None smtp.helo=postmaster@mail.citrix.com
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 lars.kurth@citrix.com) identity=pra;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com"; x-conformance=sidf_compatible
Received-SPF: Pass (esa4.hc3370-68.iphmx.com: domain of
 lars.kurth@citrix.com designates 162.221.158.21 as permitted
 sender) identity=mailfrom; client-ip=162.221.158.21;
 receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="lars.kurth@citrix.com";
 x-conformance=sidf_compatible; x-record-type="v=spf1";
 x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133
 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4
 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88
 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ~all"
Received-SPF: None (esa4.hc3370-68.iphmx.com: no sender
 authenticity information available from domain of
 postmaster@mail.citrix.com) identity=helo;
 client-ip=162.221.158.21; receiver=esa4.hc3370-68.iphmx.com;
 envelope-from="lars.kurth@citrix.com";
 x-sender="postmaster@mail.citrix.com";
 x-conformance=sidf_compatible
IronPort-SDR: 1SdL+PXP5eajKMbK771A0fFEoTGn8Oytfxe/N6sJh0FNzzTpt78/7I1fPizdWf8LE25qiqznaB
 KdJA445XFDY6dU2q3eCaK/XDptlD5MGgmyEszR5z2e8pAWpxtEh9Y4GU6uKVrs0FnKU60uqLcQ
 iH++v0YzvimxGfXZhQWkDeGyJrsrnVEZdo5hHCNDzDcLYUGA4ykRRSOGFHaBoOG6HmiVbwDmOR
 XjbvRLi0g2XW95HReqCkKB3g+Slg0cO+Flq9PCJugvKPaNcgJ6kMnsMNC6sRhJHhdKSEGj/Kzt
 pWM=
X-SBRS: 2.7
X-MesageID: 6506075
X-Ironport-Server: esa4.hc3370-68.iphmx.com
X-Remote-IP: 162.221.158.21
X-Policy: $RELAYED
X-IronPort-AV: E=Sophos;i="5.64,555,1559534400"; 
   d="scan'208";a="6506075"
From: Lars Kurth <lars.kurth@citrix.com>
To: Jan Beulich <jbeulich@suse.com>, Lars Kurth <lars.kurth@xenproject.org>
Thread-Topic: [PATCH v2 5/6] Add guide on Communication Best Practice
Thread-Index: AQHVdKIoBNlHjnrbLUK7o4oIKuieK6c/HQoAgAAiaoCAAAFfgA==
Date: Fri, 27 Sep 2019 10:22:13 +0000
Message-ID: <DBFDB335-D9DB-4AE3-AD5B-20C8E92AFD60@citrix.com>
References: <cover.1569525222.git.lars.kurth@citrix.com>
 <cover.1569525222.git.lars.kurth@citrix.com>
 <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
 <f28e67ef-2f93-3b61-bc52-304f82c3e44a@suse.com>
 <FB6109D7-6FDC-41AF-95F8-3CC65FAA1215@citrix.com>
In-Reply-To: <FB6109D7-6FDC-41AF-95F8-3CC65FAA1215@citrix.com>
Accept-Language: en-GB, en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-ms-exchange-messagesentrepresentingtype: 1
x-ms-exchange-transport-fromentityheader: Hosted
Content-ID: <4D744ACF4FBD494BA66FA47DD34A2A51@citrix.com>
MIME-Version: 1.0
Subject: Re: [Minios-devel] [PATCH v2 5/6] Add guide on Communication Best
 Practice
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

DQoNCu+7v09uIDI3LzA5LzIwMTksIDExOjE3LCAiTGFycyBLdXJ0aCIgPGxhcnMua3VydGhAY2l0
cml4LmNvbT4gd3JvdGU6DQoNCiAgICANCiAgICANCiAgICBPbiAyNy8wOS8yMDE5LCAxMDoxNCwg
IkphbiBCZXVsaWNoIiA8amJldWxpY2hAc3VzZS5jb20+IHdyb3RlOg0KICAgIA0KICAgICAgICBP
biAyNi4wOS4yMDE5IDIxOjM5LCBMYXJzIEt1cnRoIHdyb3RlOg0KICAgICAgICA+ICsjIyMgVmVy
Ym9zZSB2cy4gdGVyc2UNCiAgICAgICAgPiArRHVlIHRvIHRoZSB0aW1lIGl0IHRha2VzIHRvIHJl
dmlldyBhbmQgY29tcG9zZSBjb2RlIHJldmlld2VyLCByZXZpZXdlcnMgb2Z0ZW4gYWRvcHQgYQ0K
ICAgICAgICA+ICt0ZXJzZSBzdHlsZS4gSXQgaXMgbm90IHVudXN1YWwgdG8gc2VlIHJldmlldyBj
b21tZW50cyBzdWNoIGFzDQogICAgICAgID4gKz4gdHlwbw0KICAgICAgICA+ICs+IHMvcmVzaW9u
cy9yZWdpb25zLw0KICAgICAgICA+ICs+IGNvZGluZyBzdHlsZQ0KICAgICAgICA+ICs+IGNvZGlu
ZyBzdHlsZTogYnJhY2tldHMgbm90IG5lZWRlZA0KICAgICAgICA+ICtldGMuDQogICAgICAgID4g
Kw0KICAgICAgICA+ICtUZXJzZSBjb2RlIHJldmlldyBzdHlsZSBoYXMgaXRzIHBsYWNlIGFuZCBj
YW4gYmUgcHJvZHVjdGl2ZSBmb3IgYm90aCB0aGUgcmV2aWV3ZXIgYW5kDQogICAgICAgID4gK3Ro
ZSBhdXRob3IuIEhvd2V2ZXIsIG92ZXJ1c2UgY2FuIGNvbWUgYWNyb3NzIGFzIHVuZnJpZW5kbHks
IGxhY2tpbmcgZW1wYXRoeSBhbmQNCiAgICAgICAgPiArY2FuIHRodXMgY3JlYXRlIGEgbmVnYXRp
dmUgaW1wcmVzc2lvbiB3aXRoIHRoZSBhdXRob3Igb2YgYSBwYXRjaC4gVGhpcyBpcyBpbiBwYXJ0
aWN1bGFyDQogICAgICAgID4gK3RydWUsIHdoZW4geW91IGRvIG5vdCBrbm93IHRoZSBhdXRob3Ig
b3IgdGhlIGF1dGhvciBpcyBhIG5ld2NvbWVyLiBUZXJzZQ0KICAgICAgICA+ICtjb21tdW5pY2F0
aW9uIHN0eWxlcyBjYW4gYWxzbyBiZSBwZXJjZWl2ZWQgYXMgcnVkZSBpbiBzb21lIGN1bHR1cmVz
Lg0KICAgICAgICANCiAgICAgICAgQW5kIGFub3RoZXIgcmVtYXJrIGhlcmU6IE5vdCBiZWluZyB0
ZXJzZSBpbiBzaXR1YXRpb25zIGxpa2UgdGhlIG9uZXMNCiAgICAgICAgZW51bWVyYXRlZCBhcyBl
eGFtcGxlcyBhYm92ZSBpcyBhIGRvdWJsZSB3YXN0ZSBvZiB0aGUgcmV2aWV3ZXIncyB0aW1lOg0K
ICAgICAgICBUaGV5IHNob3VsZG4ndCBldmVuIG5lZWQgdG8gbWFrZSBzdWNoIGNvbW1lbnRzLCBl
c3BlY2lhbGx5IG5vdCBtYW55DQogICAgICAgIHRpbWVzIGZvciBhIHNpbmdsZSBwYXRjaCAoc2Vl
IHlvdXIgbWVudGlvbiBvZiAib3ZlcnVzZSIpLiBJIHJlYWxpemUNCiAgICAgICAgd2Ugc3RpbGwg
aGF2ZSBubyBhdXRvbWF0ZWQgbWVjaGFuaXNtIHRvIGNoZWNrIHN0eWxlIGFzcGVjdHMsIGJ1dA0K
ICAgICAgICBhbnlib2R5IGNhbiBlYXNpbHkgbG9vayBvdmVyIHRoZWlyIHBhdGNoZXMgYmVmb3Jl
IHN1Ym1pdHRpbmcgdGhlbS4NCiAgICAgICAgQW5kIGZvciBhbiBvY2Nhc2lvbmFsIGlzc3VlIEkg
dGhpbmsgYSB0ZXJzZSByZXBseSBpcyBxdWl0ZSByZWFzb25hYmxlDQogICAgICAgIHRvIGhhdmUu
DQogICAgDQogICAgQXQgdGhlIGVuZCBvZiB0aGUgZGF5LCBub25lIGlmIHRoaXMgaXMgbWFuZGF0
b3J5LiBUaGUgZG9jdW1lbnQgYWxzbw0KICAgIGhhcyB0d28gYXVkaWVuY2VzDQogICAgKiBBdXRo
b3JzIHdoaWNoIGdldCByZXZpZXcgZmVlZGJhY2sgOiBmb3IgZXhhbXBsZSBieSBqdXN0IGhhdmlu
Zw0KICAgIHRoaXMgc2VjdGlvbiBpbiB0aGVyZSBpdCBoZWxwcyANCg0KVGhpcyB3YXMgbWVhbnQg
dG8gcmVhZDogaXQgaGVscHMgc2V0IGV4cGVjdGF0aW9ucyBhbmQgcHJvbW90ZXMgDQp1bmRlcnN0
YW5kaW5nIGZvciBzb21lIG9mIHRoZSBwYXR0ZXJucyB1c2VkDQogICAgDQogICAgSSBhZGRlZCB0
aGlzIHNlY3Rpb24gcHJpbWFyaWx5IGJlY2F1c2Ugd2UgZG8gc2VlIHRoZSBvY2Nhc2lvbmFsDQog
ICAgdmVyeSB0ZXJzZSByZXZpZXcgc3R5bGUgYW5kIGV2ZW4gSSB0aGluayBzb21ldGltZXM6IHdv
dywgdGhhdCBjb21lcw0KICAgIGFjcm9zcyBhcyBoYXJzaC4gQnV0IEkgYWxzbyBrbm93LCB0aGF0
IGl0IGlzbid0IGludGVudGlvbmFsIGFuZCB0aGF0DQogICAgSSBoYXZlIGEgZmFpcmx5IHRoaWNr
IHNraW4uIEFuZCBpdCBpcyBub3QgZXhjbHVzaXZlIHRvIHR5cG9zIGFuZCBtaW5vciBpc3N1ZXMu
DQogICAgDQogTGFycw0KDQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5w
cm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8v
bWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 11:27:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 11:27:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDoPk-0006PY-0P; Fri, 27 Sep 2019 11:27:56 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDoPj-0006P2-39
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 11:27:55 +0000
X-Inumbo-ID: d777186c-e119-11e9-9675-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id d777186c-e119-11e9-9675-12813bfff9fa;
 Fri, 27 Sep 2019 11:27:52 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 4F267F200A;
 Fri, 27 Sep 2019 13:27:51 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id NgyHoThTosPi; Fri, 27 Sep 2019 13:27:51 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from titania.office.hd (titania.office.hd [192.168.24.89])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 20424F2006;
 Fri, 27 Sep 2019 13:27:47 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by titania.office.hd
 (192.168.24.89) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 13:27:46 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 13:27:46
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Peter Smith <salerio@gmail.com>, "minios-devel@lists.xenproject.org"
 <minios-devel@lists.xenproject.org>
Thread-Topic: [Minios-devel] Support for Xen platform on aarch64
Thread-Index: AQHVdI/RFSGogxRF6UqwQ384qBRidqc/ZAsA
Date: Fri, 27 Sep 2019 11:27:46 +0000
Message-ID: <C6D2FDC2-5555-4946-8DBE-77E295494214@neclab.eu>
References: <CAOx=Z6F1jW2rYntgTuGhFSBBwap3eSSox-ei9xpHdMTvhdWTyA@mail.gmail.com>
In-Reply-To: <CAOx=Z6F1jW2rYntgTuGhFSBBwap3eSSox-ei9xpHdMTvhdWTyA@mail.gmail.com>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <79E6A735EF44F24EA65A675386D51B12@office.hd>
MIME-Version: 1.0
Subject: Re: [Minios-devel] Support for Xen platform on aarch64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGkgUGV0ZXIsDQoNCkFyZSB5b3UgYXNraW5nIGFib3V0IGhvdyB0byBidWlsZCBhIG1pbmlvcyBv
ciBVbmlrcmFmdCB1bmlrZXJuZWwvZ3Vlc3QgZm9yIEFSTT8gT3IgaXMgeW91ciBxdWVzdGlvbiBh
Ym91dCBhIFhlbiBpbnN0YWxsYXRpb24gb24gYW4gQVJNIGRldmljZT8NCg0KVGhhbmtzLA0KDQot
LSBGZWxpcGUNCg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09DQpEci4gRmVsaXBlIEh1aWNpDQpDaGllZiBSZXNlYXJjaGVyLCBTeXN0
ZW1zIGFuZCBNYWNoaW5lIExlYXJuaW5nIEdyb3VwDQpORUMgTGFib3JhdG9yaWVzIEV1cm9wZSBH
bWJIDQpLdXJmdWVyc3RlbmFubGFnZSAzNiwgRC02OTExNSBIZWlkZWxiZXJnDQpUZWwuICArNDkN
CigwKTYyMjEgNDM0Mi0yNDENCkZheDogICs0OQ0KKDApNjIyMSA0MzQyLTE1NQ0KIA0KZS1tYWls
Og0KZmVsaXBlLmh1aWNpQG5lY2xhYi5ldQ0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpSZWdpc3RlcmVkIGF0IEFtdHNnZXJpY2h0
IE1hbm5oZWltLCBHZXJtYW55LCBIUkI3Mjg1NTgNCg0K77u/T24gMjYuMDkuMTksIDE5OjI4LCAi
TWluaW9zLWRldmVsIG9uIGJlaGFsZiBvZiBQZXRlciBTbWl0aCIgPG1pbmlvcy1kZXZlbC1ib3Vu
Y2VzQGxpc3RzLnhlbnByb2plY3Qub3JnIG9uIGJlaGFsZiBvZiBzYWxlcmlvQGdtYWlsLmNvbT4g
d3JvdGU6DQoNCiAgICANCiAgICBOZXdiaWUgcXVlc3Rpb24sIHdoYXQgbmVlZHMgdG8gYmUgZG9u
ZSB0byBjcmVhdGUgYW4gYWFyY2g2NCBYZW4gcGxhdGZvcm0/IEl0IHdvdWxkIGJlIGdyZWF0IGlm
IHNvbWVvbmUga25vd2xlZGdlYWJsZSBjb3VsZCBvdXRsaW5lIHRoZSBzdGVwcyByZXF1aXJlZCwg
d2UgYXJlIHBvc3NpYmx5IGludGVyZXN0ZWQgaW4gY29udHJpYnV0aW5nLi4uDQogICAgDQogICAg
DQogICAgQmVzdCBSZWdhcmRzDQogICAgUGV0ZXINCiAgICANCiAgICANCiAgICANCiAgICANCiAg
ICANCg0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcK
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 12:05:44 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 12:05:44 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDp0K-0003nh-90; Fri, 27 Sep 2019 12:05:44 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ERjp=XW=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iDp0I-0003nY-B9
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 12:05:42 +0000
X-Inumbo-ID: 1f5e55aa-e11f-11e9-97fb-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 1f5e55aa-e11f-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 12:05:40 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 8B60A105735;
 Fri, 27 Sep 2019 14:05:39 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id TUfsev6iRjfh; Fri, 27 Sep 2019 14:05:39 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 676B7105721
 for <minios-devel@lists.xenproject.org>; Fri, 27 Sep 2019 14:05:39 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 14:05:39 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-2-simon.kuenzer@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <bda24ce2-b188-22cd-35ed-0334d78624ec@neclab.eu>
Date: Fri, 27 Sep 2019 14:05:38 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190924100716.3462-2-simon.kuenzer@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 1/5] lib/vfscore,
 lib/*fs: Ignore incompatible function pointer typecast
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gU2ltb24sCgpUaGlzIHBhdGNoIGlzIGZpbmUgZm9yIG1vc3QgcGFydHMuIFRoZXJlIGlz
IG1pbm9yIGNvbW1lbnQuLgoKUGxlYXNlIGZpbmQgdGhlIGNvbW1lbnQgaW5saW5lOgoKVGhhbmtz
ICYgUmVnYXJkcwoKU2hhcmFuCgpPbiA5LzI0LzE5IDEyOjA3IFBNLCBTaW1vbiBLdWVuemVyIHdy
b3RlOgo+IFZub2RlIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIHdpdGggZnVuY3Rpb24gY2Fs
bHMuIEluIG9yZGVyIHRvIHN0dWIKPiBzb21lIG9mIHRoZSBvcGVyYXRpb25zIGEgbm8tb3AgZnVu
Y3Rpb24gaXMgZmlsbGVkIHRvIHRob3NlIHN0cnVjdAo+IGVudHJpZXMuIFN1Y2ggYSBzdHViIGZ1
bmN0aW9uIGp1c3QgcmV0dXJucyBhbiBlcnJvciBjb2RlIHRoYXQgdGVsbHMgdGhhdAo+IHRoZSBm
dW5jdGlvbmFsaXR5IGlzIG5vdCBpbXBsZW1lbnRlZC4gSG93ZXZlciwgdGhlIGZ1bmN0aW9uIHNp
Z25hdHVyZQo+IG1heSBub3QgbWF0Y2ggd2l0aCB0aGUgc3R1YmJlZCB2bm9kZSBvcGVyYXRpb24s
IHNvIGl0IGlzIHR5cGVjYXN0ZWQuCj4gR0NDIDggaW50cm9kdWNlcyBhIHdhcm5pbmcgd2hlbiBm
dW5jdGlvbiBwb2ludGVyIHR5cGVjYXN0cyBhcmUKPiBpbmNvbXBhdGlibGUuIFRoaXMgcGF0Y2gg
YWRkcyBhIENGTEFHIHRvIGlnbm9yZSB0aGlzIHdhcm5pbmcgZm9yCj4gdmZzY29yZSBhbmQgYWxs
IGN1cnJlbnQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuCj4KPiBTaWduZWQtb2ZmLWJ5OiBT
aW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KPiAtLS0KPiAgIGxpYi85cGZz
L01ha2VmaWxlLnVrICAgIHwgMiArKwo+ICAgbGliL2RldmZzL01ha2VmaWxlLnVrICAgfCAyICsr
Cj4gICBsaWIvcmFtZnMvTWFrZWZpbGUudWsgICB8IDIgKysKPiAgIGxpYi92ZnNjb3JlL01ha2Vm
aWxlLnVrIHwgMiArKwo+ICAgNCBmaWxlcyBjaGFuZ2VkLCA4IGluc2VydGlvbnMoKykKPgo+IGRp
ZmYgLS1naXQgYS9saWIvOXBmcy9NYWtlZmlsZS51ayBiL2xpYi85cGZzL01ha2VmaWxlLnVrCj4g
aW5kZXggOWQ0ZGZiNTcuLjhhNjY3ZWZhIDEwMDY0NAo+IC0tLSBhL2xpYi85cGZzL01ha2VmaWxl
LnVrCj4gKysrIGIvbGliLzlwZnMvTWFrZWZpbGUudWsKPiBAQCAtMSw0ICsxLDYgQEAKPiAgICQo
ZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliOXBmcywkKENPTkZJR19MSUI5UEZTKSkpCj4gICAKPiAr
TElCOVBGU19DRkxBR1MtJChjYWxsIGdjY192ZXJzaW9uX2dlLDgsMCkgKz0gLVduby1jYXN0LWZ1
bmN0aW9uLXR5cGUKPiArCj4gICBMSUI5UEZTX1NSQ1MteSArPSAkKExJQjlQRlNfQkFTRSkvOXBm
c192ZnNvcHMuYwo+ICAgTElCOVBGU19TUkNTLXkgKz0gJChMSUI5UEZTX0JBU0UpLzlwZnNfdm5v
cHMuYwo+IGRpZmYgLS1naXQgYS9saWIvZGV2ZnMvTWFrZWZpbGUudWsgYi9saWIvZGV2ZnMvTWFr
ZWZpbGUudWsKPiBpbmRleCBmODllNjU3Ny4uYzQ5NmZkNTYgMTAwNjQ0Cj4gLS0tIGEvbGliL2Rl
dmZzL01ha2VmaWxlLnVrCj4gKysrIGIvbGliL2RldmZzL01ha2VmaWxlLnVrCj4gQEAgLTIsNSAr
Miw3IEBAICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliZGV2ZnMsJChDT05GSUdfTElCREVWRlMp
KSkKPiAgIAo+ICAgQ0lOQ0xVREVTLXkgKz0gLUkkKExJQkRFVkZTX0JBU0UpL2luY2x1ZGUKPiAg
IAo+ICtMSUJERVZGU19DRkxBR1MtJChjYWxsIGdjY192ZXJzaW9uX2dlLDgsMCkgKz0gLVduby1j
YXN0LWZ1bmN0aW9uLXR5cGUKPiArCj4gICBMSUJERVZGU19TUkNTLXkgKz0gJChMSUJERVZGU19C
QVNFKS9kZXZpY2UuYwo+ICAgTElCREVWRlNfU1JDUy15ICs9ICQoTElCREVWRlNfQkFTRSkvZGV2
ZnNfdm5vcHMuYwo+IGRpZmYgLS1naXQgYS9saWIvcmFtZnMvTWFrZWZpbGUudWsgYi9saWIvcmFt
ZnMvTWFrZWZpbGUudWsKPiBpbmRleCA5YTQ0MzM1OC4uYmVjMGE5NTcgMTAwNjQ0Cj4gLS0tIGEv
bGliL3JhbWZzL01ha2VmaWxlLnVrCj4gKysrIGIvbGliL3JhbWZzL01ha2VmaWxlLnVrCj4gQEAg
LTEsNCArMSw2IEBACj4gICAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnJhbWZzLCQoQ09ORklH
X0xJQlJBTUZTKSkpCj4gICAKPiArTElCUkFNRlNfQ0ZMQUdTLSQoY2FsbCBnY2NfdmVyc2lvbl9n
ZSw4LDApICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10eXBlCj4gKwo+ICAgTElCUkFNRlNfU1JDUy15
ICs9ICQoTElCUkFNRlNfQkFTRSkvcmFtZnNfdmZzb3BzLmMKPiAgIExJQlJBTUZTX1NSQ1MteSAr
PSAkKExJQlJBTUZTX0JBU0UpL3JhbWZzX3Zub3BzLmMKPiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2Nv
cmUvTWFrZWZpbGUudWsgYi9saWIvdmZzY29yZS9NYWtlZmlsZS51awo+IGluZGV4IGUzNmM5MjE3
Li4xZTVmYzExNCAxMDA2NDQKPiAtLS0gYS9saWIvdmZzY29yZS9NYWtlZmlsZS51awo+ICsrKyBi
L2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrCj4gQEAgLTIsNiArMiw4IEBAICQoZXZhbCAkKGNhbGwg
YWRkbGliX3MsbGlidmZzY29yZSwkKENPTkZJR19MSUJWRlNDT1JFKSkpCj4gICAKPiAgIENJTkNM
VURFUy15ICs9IC1JJChMSUJWRlNDT1JFX0JBU0UpL2luY2x1ZGUKPiAgIAo+ICtMSUJWRlNDT1JF
X0NGTEFHUy0kKGNhbGwgZ2NjX3ZlcnNpb25fZ2UsOCwwKSArPSAtV25vLWNhc3QtZnVuY3Rpb24t
dHlwZQpUaGVyZSBpcyBhIGR1cGxpY2F0ZSBkZWZpbml0aW9uIHNwZWNpZmljIHRvIHRoZSBwaXBl
LmMgYXQgbGluZSAyMC4gVGhpcyAKY2FuIGJlIHJlbW92ZWQgb3Igd2Ugc3BlY2lmeSB0aGUgd2Fy
bmluZyBzcGVjaWZpYyB0byB0aGUgcGlwZS5jIGFsb25lLgo+ICsKPiAgIExJQlZGU0NPUkVfU1JD
Uy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9mZC5jCj4gICBMSUJWRlNDT1JFX1NSQ1MteSArPSAk
KExJQlZGU0NPUkVfQkFTRSkvZmlsZS5jCj4gICBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZG
U0NPUkVfQkFTRSkvc3RkaW8uYwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMu
eGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3Rp
bmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 12:47:25 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 12:47:25 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDpee-0000fQ-Fa; Fri, 27 Sep 2019 12:47:24 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=JqDM=XW=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iDpec-0000fD-W5
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 12:47:23 +0000
X-Inumbo-ID: f1faa41e-e124-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id f1faa41e-e124-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 12:47:21 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 5A7C7F200A;
 Fri, 27 Sep 2019 14:47:20 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id qK63Xq9IcfIO; Fri, 27 Sep 2019 14:47:20 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 2B431F2006
 for <minios-devel@lists.xenproject.org>; Fri, 27 Sep 2019 14:47:18 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 14:47:17 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-2-simon.kuenzer@neclab.eu>
 <bda24ce2-b188-22cd-35ed-0334d78624ec@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <0ba38d38-fad7-e4be-e4d5-9699456c5fbf@neclab.eu>
Date: Fri, 27 Sep 2019 14:47:17 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <bda24ce2-b188-22cd-35ed-0334d78624ec@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 1/5] lib/vfscore,
 lib/*fs: Ignore incompatible function pointer typecast
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

CgpPbiAyNy4wOS4xOSAxNDowNSwgU2hhcmFuIFNhbnRoYW5hbSB3cm90ZToKPiBIZWxsbyBTaW1v
biwKPiAKPiBUaGlzIHBhdGNoIGlzIGZpbmUgZm9yIG1vc3QgcGFydHMuIFRoZXJlIGlzIG1pbm9y
IGNvbW1lbnQuLgo+IAo+IFBsZWFzZSBmaW5kIHRoZSBjb21tZW50IGlubGluZToKPiAKPiBUaGFu
a3MgJiBSZWdhcmRzCj4gCj4gU2hhcmFuCj4gCj4gT24gOS8yNC8xOSAxMjowNyBQTSwgU2ltb24g
S3VlbnplciB3cm90ZToKPj4gVm5vZGUgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBm
dW5jdGlvbiBjYWxscy4gSW4gb3JkZXIgdG8gc3R1Ygo+PiBzb21lIG9mIHRoZSBvcGVyYXRpb25z
IGEgbm8tb3AgZnVuY3Rpb24gaXMgZmlsbGVkIHRvIHRob3NlIHN0cnVjdAo+PiBlbnRyaWVzLiBT
dWNoIGEgc3R1YiBmdW5jdGlvbiBqdXN0IHJldHVybnMgYW4gZXJyb3IgY29kZSB0aGF0IHRlbGxz
IHRoYXQKPj4gdGhlIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGltcGxlbWVudGVkLiBIb3dldmVyLCB0
aGUgZnVuY3Rpb24gc2lnbmF0dXJlCj4+IG1heSBub3QgbWF0Y2ggd2l0aCB0aGUgc3R1YmJlZCB2
bm9kZSBvcGVyYXRpb24sIHNvIGl0IGlzIHR5cGVjYXN0ZWQuCj4+IEdDQyA4IGludHJvZHVjZXMg
YSB3YXJuaW5nIHdoZW4gZnVuY3Rpb24gcG9pbnRlciB0eXBlY2FzdHMgYXJlCj4+IGluY29tcGF0
aWJsZS4gVGhpcyBwYXRjaCBhZGRzIGEgQ0ZMQUcgdG8gaWdub3JlIHRoaXMgd2FybmluZyBmb3IK
Pj4gdmZzY29yZSBhbmQgYWxsIGN1cnJlbnQgZmlsZXN5c3RlbSBpbXBsZW1lbnRhdGlvbnMuCj4+
Cj4+IFNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1
Pgo+PiAtLS0KPj4gwqAgbGliLzlwZnMvTWFrZWZpbGUudWvCoMKgwqAgfCAyICsrCj4+IMKgIGxp
Yi9kZXZmcy9NYWtlZmlsZS51a8KgwqAgfCAyICsrCj4+IMKgIGxpYi9yYW1mcy9NYWtlZmlsZS51
a8KgwqAgfCAyICsrCj4+IMKgIGxpYi92ZnNjb3JlL01ha2VmaWxlLnVrIHwgMiArKwo+PiDCoCA0
IGZpbGVzIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygrKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvbGliLzlw
ZnMvTWFrZWZpbGUudWsgYi9saWIvOXBmcy9NYWtlZmlsZS51awo+PiBpbmRleCA5ZDRkZmI1Ny4u
OGE2NjdlZmEgMTAwNjQ0Cj4+IC0tLSBhL2xpYi85cGZzL01ha2VmaWxlLnVrCj4+ICsrKyBiL2xp
Yi85cGZzL01ha2VmaWxlLnVrCj4+IEBAIC0xLDQgKzEsNiBAQAo+PiDCoCAkKGV2YWwgJChjYWxs
IGFkZGxpYl9zLGxpYjlwZnMsJChDT05GSUdfTElCOVBGUykpKQo+PiArTElCOVBGU19DRkxBR1Mt
JChjYWxsIGdjY192ZXJzaW9uX2dlLDgsMCkgKz0gLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUKPj4g
Kwo+PiDCoCBMSUI5UEZTX1NSQ1MteSArPSAkKExJQjlQRlNfQkFTRSkvOXBmc192ZnNvcHMuYwo+
PiDCoCBMSUI5UEZTX1NSQ1MteSArPSAkKExJQjlQRlNfQkFTRSkvOXBmc192bm9wcy5jCj4+IGRp
ZmYgLS1naXQgYS9saWIvZGV2ZnMvTWFrZWZpbGUudWsgYi9saWIvZGV2ZnMvTWFrZWZpbGUudWsK
Pj4gaW5kZXggZjg5ZTY1NzcuLmM0OTZmZDU2IDEwMDY0NAo+PiAtLS0gYS9saWIvZGV2ZnMvTWFr
ZWZpbGUudWsKPj4gKysrIGIvbGliL2RldmZzL01ha2VmaWxlLnVrCj4+IEBAIC0yLDUgKzIsNyBA
QCAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmRldmZzLCQoQ09ORklHX0xJQkRFVkZTKSkpCj4+
IMKgIENJTkNMVURFUy15ICs9IC1JJChMSUJERVZGU19CQVNFKS9pbmNsdWRlCj4+ICtMSUJERVZG
U19DRkxBR1MtJChjYWxsIGdjY192ZXJzaW9uX2dlLDgsMCkgKz0gLVduby1jYXN0LWZ1bmN0aW9u
LXR5cGUKPj4gKwo+PiDCoCBMSUJERVZGU19TUkNTLXkgKz0gJChMSUJERVZGU19CQVNFKS9kZXZp
Y2UuYwo+PiDCoCBMSUJERVZGU19TUkNTLXkgKz0gJChMSUJERVZGU19CQVNFKS9kZXZmc192bm9w
cy5jCj4+IGRpZmYgLS1naXQgYS9saWIvcmFtZnMvTWFrZWZpbGUudWsgYi9saWIvcmFtZnMvTWFr
ZWZpbGUudWsKPj4gaW5kZXggOWE0NDMzNTguLmJlYzBhOTU3IDEwMDY0NAo+PiAtLS0gYS9saWIv
cmFtZnMvTWFrZWZpbGUudWsKPj4gKysrIGIvbGliL3JhbWZzL01ha2VmaWxlLnVrCj4+IEBAIC0x
LDQgKzEsNiBAQAo+PiDCoCAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYnJhbWZzLCQoQ09ORklH
X0xJQlJBTUZTKSkpCj4+ICtMSUJSQU1GU19DRkxBR1MtJChjYWxsIGdjY192ZXJzaW9uX2dlLDgs
MCkgKz0gLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUKPj4gKwo+PiDCoCBMSUJSQU1GU19TUkNTLXkg
Kz0gJChMSUJSQU1GU19CQVNFKS9yYW1mc192ZnNvcHMuYwo+PiDCoCBMSUJSQU1GU19TUkNTLXkg
Kz0gJChMSUJSQU1GU19CQVNFKS9yYW1mc192bm9wcy5jCj4+IGRpZmYgLS1naXQgYS9saWIvdmZz
Y29yZS9NYWtlZmlsZS51ayBiL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrCj4+IGluZGV4IGUzNmM5
MjE3Li4xZTVmYzExNCAxMDA2NDQKPj4gLS0tIGEvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKPj4g
KysrIGIvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKPj4gQEAgLTIsNiArMiw4IEBAICQoZXZhbCAk
KGNhbGwgYWRkbGliX3MsbGlidmZzY29yZSwkKENPTkZJR19MSUJWRlNDT1JFKSkpCj4+IMKgIENJ
TkNMVURFUy15ICs9IC1JJChMSUJWRlNDT1JFX0JBU0UpL2luY2x1ZGUKPj4gK0xJQlZGU0NPUkVf
Q0ZMQUdTLSQoY2FsbCBnY2NfdmVyc2lvbl9nZSw4LDApICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10
eXBlCj4gVGhlcmUgaXMgYSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBzcGVjaWZpYyB0byB0aGUgcGlw
ZS5jIGF0IGxpbmUgMjAuIFRoaXMgCj4gY2FuIGJlIHJlbW92ZWQgb3Igd2Ugc3BlY2lmeSB0aGUg
d2FybmluZyBzcGVjaWZpYyB0byB0aGUgcGlwZS5jIGFsb25lLgoKU29ycnksIEkgZGlkIG5vdCBu
b3RpY2VkIHRoaXMuIEkgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gcmVtb3ZlIGl0IGZyb20gCmxp
bmUgMjAuIEVzcGVjaWFsbHkgc2luY2UgdGhhdCBvbmUgaXMgbm90IGNoZWNraW5nIHRoZSBHQ0Mg
dmVyc2lvbiB3aGljaCAKbWF5IGNhdXNlIHRoZSBidWlsZCBmYWlsIHdpdGggYW4gb2xkZXIgdmVy
c2lvbi4KCj4+ICsKPj4gwqAgTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0Up
L2ZkLmMKPj4gwqAgTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2ZpbGUu
Ywo+PiDCoCBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvc3RkaW8uYwo+
IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gTWlu
aW9zLWRldmVsIG1haWxpbmcgbGlzdAo+IE1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
Zwo+IGh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3Mt
ZGV2ZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1p
bmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3Jn
Cmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2
ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 13:58:11 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 13:58:11 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDql8-0001dr-9F; Fri, 27 Sep 2019 13:58:10 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=JqDM=XW=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iDql7-0001dl-6J
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 13:58:09 +0000
X-Inumbo-ID: d47d61a6-e12e-11e9-b588-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id d47d61a6-e12e-11e9-b588-bc764e2007e4;
 Fri, 27 Sep 2019 13:58:07 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id D5CCD10573D;
 Fri, 27 Sep 2019 15:58:05 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id FeWw20XzqLAl; Fri, 27 Sep 2019 15:58:05 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id B692A10573B
 for <minios-devel@lists.xen.org>; Fri, 27 Sep 2019 15:58:05 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 15:58:05 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 27 Sep 2019 15:58:03 +0200
Message-ID: <20190927135803.21820-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH] build: Introduce DBGFLAGS,
 DBGFLAGS-y
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIG9yaWdpbmFsIHByb2JsZW0gaXMgdGhhdCBhc3NlbWJseSBzb3VyY2UgZmlsZXMgYXJlIGN1
cnJlbnRseSBjb21waWxlZAp3aXRob3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gR0NDJ3MgYC1n
WzAtM11gIGZsYWcgaXMgbm90IGhhbmRlZCBvdmVyCnRvIHRoZSBhc3NlbWJsZXIgYnVpbGQgcnVs
ZXMuIFRoaXMgY2F1c2VzIHRoZSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24Kb2YgdGhlIGZpbmFsIGlt
YWdlIHRvIGJlIGluY29tcGxldGUuClVuZm9ydHVuYXRlbHkgdGhlIGRlYnVnIG9wdGlvbiBmbGFn
IGNhbm5vdCBiZSBzaW1wbHkgYWRkZWQgdG8KYEFTRkxBR1NgIGJlY2F1c2UgdGhlIGxpbmtlciBz
Y3JpcHQgcHJvY2Vzc2luZyBydWxlcyB1c2UKdGhlbSwgdG9vLiBUaG9zZSBvbmVzIHVzZSB0aGUg
R0NDIHByZXByb2Nlc3NvciBvbmx5IGFuZCB0aGUgZGVidWcKZmxhZ3MgY2F1c2VzIGl0IHRvIGR1
bXAgdGhlIGludGVybmFsIHByZXByb2Nlc3NvciBzdGF0ZSBpbnRvCnRoZSBnZW5lcmF0ZWQgb3V0
cHV0IHRleHQgZmlsZS4KQmVjYXVzZSBhbGwgb2YgdGhpcywgdGhpcyBwYXRjaCBpbnRyb2R1Y2Vz
IHRoZSBidWlsZCBzeXN0ZW0gdmFyaWFibGVzCmBEQkdGTEFHU2AgYW5kIGBEQkdGTEFHUy15YC4g
VGhvc2Ugb25lcyBhcmUgaW50ZW5kZWQgdG8gY2FycnkKZGVidWctcmVsYXRlZCBjb21waWxlIGZs
YWdzIChsaWtlIGAtZ1swLTNdYCkuIFRoZXkgYXJlIGhhbmRlZCBvdmVyIHRvCm9ubHkgdG8gdGhl
IEFTLCBDLCBDKyssIGFuZCBHTyBjb21waWxlIHJ1bGVzLgoKU2lnbmVkLW9mZi1ieTogU2ltb24g
S3VlbnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Ci0tLQogTWFrZWZpbGUudWsgICAgICAg
ICAgICAgICAgICB8IDE2ICsrKystLS0tLS0tLS0tLS0KIHN1cHBvcnQvYnVpbGQvTWFrZWZpbGUu
cnVsZXMgfCAxMCArKysrKy0tLS0tCiAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKSwg
MTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awpp
bmRleCAyNmVlMGZkYS4uNjdjMzcyZTUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnVrCisrKyBiL01h
a2VmaWxlLnVrCkBAIC01MCwxOCArNTAsMTAgQEAgR09DRkxBR1MtJChDT05GSUdfT1BUSU1JWkVf
TFRPKSAgICAgICAgICAgKz0gLWZsdG8KIExJQkxERkxBR1MtJChDT05GSUdfT1BUSU1JWkVfTFRP
KSAgICAgICAgICs9ICQoQ0ZMQUdTKSAkKENGTEFHUy15KQogTERGTEFHUy0kKENPTkZJR19PUFRJ
TUlaRV9MVE8pICAgICAgICAgICAgKz0gJChDRkxBR1MpICQoQ0ZMQUdTLXkpCiAKLUNGTEFHUy0k
KENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDApICAgICAgICs9IC1nMAotQ1hYRkxBR1MtJChDT05G
SUdfREVCVUdfU1lNQk9MU19MVkwwKSAgICAgKz0gLWcwCi1HT0NGTEFHUy0kKENPTkZJR19ERUJV
R19TWU1CT0xTX0xWTDApICAgICArPSAtZzAKLUNGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xT
X0xWTDEpICAgICAgICs9IC1nMQotQ1hYRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwx
KSAgICAgKz0gLWcxCi1HT0NGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDApICAgICAr
PSAtZzEKLUNGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDIpICAgICAgICs9IC1nMgot
Q1hYRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwyKSAgICAgKz0gLWcyCi1HT0NGTEFH
Uy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDApICAgICArPSAtZzIKLUNGTEFHUy0kKENPTkZJ
R19ERUJVR19TWU1CT0xTX0xWTDMpICAgICAgICs9IC1nMwotQ1hYRkxBR1MtJChDT05GSUdfREVC
VUdfU1lNQk9MU19MVkwzKSAgICAgKz0gLWczCi1HT0NGTEFHUy0kKENPTkZJR19ERUJVR19TWU1C
T0xTX0xWTDApICAgICArPSAtZzMKK0RCR0ZMQUdTLSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZM
MCkgICAgICs9IC1nMAorREJHRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwxKSAgICAg
Kz0gLWcxCitEQkdGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDIpICAgICArPSAtZzIK
K0RCR0ZMQUdTLSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZMMykgICAgICs9IC1nMwogCiBBU0ZM
QUdTICArPSAtRCBfX1VuaWtyYWZ0X18gLURVS19DT0RFTkFNRT0iJChVS19DT0RFTkFNRSkiCiBB
U0ZMQUdTICArPSAtRFVLX1ZFUlNJT049JChVS19WRVJTSU9OKS4kKFVLX1NVQlZFUlNJT04pCmRp
ZmYgLS1naXQgYS9zdXBwb3J0L2J1aWxkL01ha2VmaWxlLnJ1bGVzIGIvc3VwcG9ydC9idWlsZC9N
YWtlZmlsZS5ydWxlcwppbmRleCA5MDZhMGE2ZS4uZDYwYzZkOTIgMTAwNjQ0Ci0tLSBhL3N1cHBv
cnQvYnVpbGQvTWFrZWZpbGUucnVsZXMKKysrIGIvc3VwcG9ydC9idWlsZC9NYWtlZmlsZS5ydWxl
cwpAQCAtMzU1LDcgKzM1NSw3IEBAICQoMyk6ICQoMikgfCBwcmVwYXJlCiAJJChjYWxsIGJ1aWxk
X2NtZF9maXhkZXAsQVMsJCgxKSwkKDMpLFwKIAkJJChBUykgICQoQVNJTkNMVURFUykgJChBU0lO
Q0xVREVTLXkpIFwKIAkJICAgICAgICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQVNJTkNMVURF
UykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQVNJTkNMVURFUy15KSkgXAotCQkgICAgICAg
JChBU0ZMQUdTKSAkKEFTRkxBR1MteSkgXAorCQkgICAgICAgJChBU0ZMQUdTKSAkKEFTRkxBR1Mt
eSkgJChEQkdGTEFHUykgJChEQkdGTEFHUy15KSBcCiAJCSAgICAgICAkKCQoY2FsbCB2cHJlZml4
X2xpYiwkKDEpLEFTRkxBR1MpKSAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLEFTRkxBR1MteSkp
IFwKIAkJICAgICAgICQoNCkgLURfX0xJQk5BTUVfXz0kKDEpIC1EX19CQVNFTkFNRV9fPSQobm90
ZGlyICQoMikpIFwKIAkJICAgICAgIC1jICQoMikgLW8gJCgzKSAkKGRlcGZsYWdzKQpAQCAtMzcz
LDcgKzM3Myw3IEBAICQoMyk6ICQoMikgfCBwcmVwYXJlCiAJJChjYWxsIGJ1aWxkX2NtZCxBUywk
KDEpLCQoMyksXAogCQkkKEFTKSAgJChBU0lOQ0xVREVTKSAkKEFTSU5DTFVERVMteSkgXAogCQkg
ICAgICAgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxBU0lOQ0xVREVTKSkgJCgkKGNhbGwgdnBy
ZWZpeF9saWIsJCgxKSxBU0lOQ0xVREVTLXkpKSBcCi0JCSAgICAgICAkKEFTRkxBR1MpICQoQVNG
TEFHUy15KSBcCisJCSAgICAgICAkKEFTRkxBR1MpICQoQVNGTEFHUy15KSAkKERCR0ZMQUdTKSAk
KERCR0ZMQUdTLXkpIFwKIAkJICAgICAgICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQVNGTEFH
UykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQVNGTEFHUy15KSkgXAogCQkgICAgICAgJCg0
KSAtRF9fTElCTkFNRV9fPSQoMSkgLURfX0JBU0VOQU1FX189JChub3RkaXIgJCgyKSkgXAogCQkg
ICAgICAgLWMgJCgyKSAtbyAkKDMpCkBAIC0zOTEsNyArMzkxLDcgQEAgJCgzKTogJCgyKSB8IHBy
ZXBhcmUKIAkkKGNhbGwgYnVpbGRfY21kX2ZpeGRlcCxDQywkKDEpLCQoMyksXAogCQkkKENDKSAg
JChDSU5DTFVERVMpICQoQ0lOQ0xVREVTLXkpIFwKIAkJICAgICAgICQoJChjYWxsIHZwcmVmaXhf
bGliLCQoMSksQ0lOQ0xVREVTKSkgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxDSU5DTFVERVMt
eSkpIFwKLQkJICAgICAgICQoQ0ZMQUdTKSAkKENGTEFHUy15KSBcCisJCSAgICAgICAkKENGTEFH
UykgJChDRkxBR1MteSkgJChEQkdGTEFHUykgJChEQkdGTEFHUy15KSBcCiAJCSAgICAgICAkKCQo
Y2FsbCB2cHJlZml4X2xpYiwkKDEpLENGTEFHUykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSks
Q0ZMQUdTLXkpKSBcCiAJCSAgICAgICAkKDQpIC1EX19MSUJOQU1FX189JCgxKSAtRF9fQkFTRU5B
TUVfXz0kKG5vdGRpciAkKDIpKSBcCiAJCSAgICAgICAtYyAkKDIpIC1vICQoMykgJChkZXBmbGFn
cykKQEAgLTQwOSw3ICs0MDksNyBAQCAkKDMpOiAkKDIpIHwgcHJlcGFyZQogCSQoY2FsbCBidWls
ZF9jbWRfZml4ZGVwLENYWCwkKDEpLCQoMyksXAogCQkkKENYWCkgJChDWFhJTkNMVURFUykgJChD
WFhJTkNMVURFUy15KSBcCiAJCSAgICAgICAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLENYWElO
Q0xVREVTKSkgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxDWFhJTkNMVURFUy15KSkgXAotCQkg
ICAgICAgJChDWFhGTEFHUykgJChDWFhGTEFHUy15KSBcCisJCSAgICAgICAkKENYWEZMQUdTKSAk
KENYWEZMQUdTLXkpICQoREJHRkxBR1MpICQoREJHRkxBR1MteSkgXAogCQkgICAgICAgJCgkKGNh
bGwgdnByZWZpeF9saWIsJCgxKSxDWFhGTEFHUykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSks
Q1hYRkxBR1MteSkpIFwKIAkJICAgICAgICQoNCkgLURfX0xJQk5BTUVfXz0kKDEpIC1EX19CQVNF
TkFNRV9fPSQobm90ZGlyICQoMikpIFwKIAkJICAgICAgIC1jICQoMikgLW8gJCgzKSAkKGRlcGZs
YWdzKQpAQCAtNDI3LDcgKzQyNyw3IEBAICQoMyk6ICQoMikgfCBwcmVwYXJlCiAJJChjYWxsIGJ1
aWxkX2NtZCxHT0MsJCgxKSwkKDMpLFwKIAkJJChHT0MpICQoR09DSU5DTFVERVMpICQoR09DSU5D
TFVERVMteSkgXAogCQkJJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxHT0NJTkNMVURFUykpICQo
JChjYWxsIHZwcmVmaXhfbGliLCQoMSksR09DSU5DTFVERVMteSkpIFwKLQkJCSQoR09DRkxBR1Mp
ICQoR09DRkxBR1MteSkgXAorCQkJJChHT0NGTEFHUykgJChHT0NGTEFHUy15KSAkKERCR0ZMQUdT
KSAkKERCR0ZMQUdTLXkpIFwKIAkJCSQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksR09DRkxBR1Mp
KSAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLEdPQ0ZMQUdTLXkpKSBcCiAJCQkkKDQpIC1EX19M
SUJOQU1FX189JCgxKSAtRF9fQkFTRU5BTUVfXz0kKG5vdGRpciAkKDIpKSBcCiAJCQktYyAkKDIp
IC1vICQoMykgJChkZXBmbGFncykKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 14:19:50 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 14:19:50 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDr66-0004Ge-7U; Fri, 27 Sep 2019 14:19:50 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=CKAD=XW=suse.com=jbeulich@srs-us1.protection.inumbo.net>)
 id 1iDr64-0004G6-Fe
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 14:19:48 +0000
X-Inumbo-ID: d24184f0-e131-11e9-97fb-bc764e2007e4
Received: from mx1.suse.de (unknown [195.135.220.15])
 by localhost (Halon) with ESMTPS
 id d24184f0-e131-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 14:19:31 +0000 (UTC)
X-Virus-Scanned: by amavisd-new at test-mx.suse.de
Received: from relay2.suse.de (unknown [195.135.220.254])
 by mx1.suse.de (Postfix) with ESMTP id 681C3B168;
 Fri, 27 Sep 2019 14:19:30 +0000 (UTC)
To: Lars Kurth <lars.kurth@citrix.com>, Lars Kurth <lars.kurth@xenproject.org>
References: <cover.1569525222.git.lars.kurth@citrix.com>
 <cover.1569525222.git.lars.kurth@citrix.com>
 <749f082bdb996ba7c7362847b22030882dc2903f.1569525222.git.lars.kurth@citrix.com>
 <f28e67ef-2f93-3b61-bc52-304f82c3e44a@suse.com>
 <FB6109D7-6FDC-41AF-95F8-3CC65FAA1215@citrix.com>
From: Jan Beulich <jbeulich@suse.com>
Message-ID: <1746ff41-cc4c-a64d-fe25-393819a1717b@suse.com>
Date: Fri, 27 Sep 2019 16:19:32 +0200
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101
 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <FB6109D7-6FDC-41AF-95F8-3CC65FAA1215@citrix.com>
Content-Language: en-US
Subject: Re: [Minios-devel] [PATCH v2 5/6] Add guide on Communication Best
 Practice
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "xen-api@lists.xenproject.org" <xen-api@lists.xenproject.org>,
 "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>,
 "committers@xenproject.org" <committers@xenproject.org>,
 "mirageos-devel@lists.xenproject.org" <mirageos-devel@lists.xenproject.org>,
 "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
 "win-pv-devel@lists.xenproject.org" <win-pv-devel@lists.xenproject.org>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMjcuMDkuMjAxOSAxMjoxNywgTGFycyBLdXJ0aCB3cm90ZToKPiBDYW4gSSBtYXliZSBnZXQg
eW91IHRvIHJlY29uc2lkZXIgYW5kIHJlLXJldmlldyB0aGUgbmV4dCB2ZXJzaW9uIGZyb20gdGhl
Cj4gdmlldyBwb2ludCBvZiBhbiBhdXRob3IgYW5kIG1heWJlIG1ha2Ugc3VnZ2VzdGlvbnMgb24g
aG93IHRvIGNyZWF0ZSBtb3JlCj4gYmFsYW5jZQoKSSdsbCBjZXJ0YWlubHkgbWFrZSBhbiBhdHRl
bXB0LgoKSmFuCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0
Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9z
LWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 14:27:38 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 14:27:38 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDrDd-0005ND-RM; Fri, 27 Sep 2019 14:27:37 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ERjp=XW=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iDrDc-0005N8-8d
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 14:27:36 +0000
X-Inumbo-ID: f1cb5070-e132-11e9-967a-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id f1cb5070-e132-11e9-967a-12813bfff9fa;
 Fri, 27 Sep 2019 14:27:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id EF3E610573D;
 Fri, 27 Sep 2019 16:27:32 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id F8qWl4M2SJwZ; Fri, 27 Sep 2019 16:27:32 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id CD49C105721
 for <minios-devel@lists.xenproject.org>; Fri, 27 Sep 2019 16:27:32 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 16:27:32 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-3-simon.kuenzer@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <981ec5c8-de24-584d-b497-5ee451387661@neclab.eu>
Date: Fri, 27 Sep 2019 16:27:32 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190924100716.3462-3-simon.kuenzer@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 2/5] lib/vfscore: fs_getfs():
 Return NULL on failed lookup
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gU2ltb24sCgpUaGlzIHBhdGNoIHNlZW1zIGZpbmUuIFdoaWxlIHJ1bm5pbmcgc29tZSB0
ZXN0IG9uIHRoZSBtb3VudCBmdW5jdGlvbiBJIApvYnNlcnZlZCB0aGF0LCBpZiB3ZSBwYXNzIHRo
ZSBpbnZhbGlkIGZpbGUgc3lzdGVtwqAgdG8gbW91bnQgd2UgcmV0dXJuIAplcnJubyBhcyB0aGUg
cmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgLTEuIEJ1dCBzaW5jZSBpdCBub3QgcmVsYXRlZCB0byAK
dGhpcyBwYXRjaCB3ZSBhY2NlcHQgdGhpcyBwYXRjaCBhbmQgY2FuIGZpeCBpdCBzZXBhcmF0ZWx5
LgoKUmV2aWV3ZWQtYnk6IFNoYXJhbiBTYW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFi
LmV1PgoKVGhhbmtzICYgUmVnYXJkcwoKU2hhcmFuCgpPbiA5LzI0LzE5IDEyOjA3IFBNLCBTaW1v
biBLdWVuemVyIHdyb3RlOgo+IE1vdW50IG5ldmVyIGZhaWxlZCB3aGVuIHRoZSBmaWxlc3lzdGVt
IG5hbWUgd2FzIGluY29ycmVjdC4gVGhpcyB3YXMKPiBkdWUgdG8gdGhlIHZmc2NvcmUtaW50ZXJu
YWwgZnVuY3Rpb24gZnNfZ2V0ZnMoKSB0aGF0IHJldHVybmVkIHRoZSBsYXN0Cj4gcmVnaXN0ZXJl
ZCBmaWxlc3lzdGVtIGluc3RlYWQgb2YgTlVMTCB3aGVuZXZlciB0aGUgbmFtZSB3YXMgaW52YWxp
ZC4KPgo+IFNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFi
LmV1Pgo+IC0tLQo+ICAgbGliL3Zmc2NvcmUvbW91bnQuYyB8IDEzICsrKysrKystLS0tLS0KPiAg
IDEgZmlsZSBjaGFuZ2VkLCA3IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCj4KPiBkaWZm
IC0tZ2l0IGEvbGliL3Zmc2NvcmUvbW91bnQuYyBiL2xpYi92ZnNjb3JlL21vdW50LmMKPiBpbmRl
eCAyNjI5ZDEzMi4uOWQ3YWNlMTUgMTAwNjQ0Cj4gLS0tIGEvbGliL3Zmc2NvcmUvbW91bnQuYwo+
ICsrKyBiL2xpYi92ZnNjb3JlL21vdW50LmMKPiBAQCAtODAsMTcgKzgwLDE4IEBAIGZzX2dldGZz
KGNvbnN0IGNoYXIgKm5hbWUpCj4gICB7Cj4gICAJY29uc3Qgc3RydWN0IHZmc2NvcmVfZnNfdHlw
ZSAqZnMgPSBOVUxMLCAqKl9fZnM7Cj4gICAKPiArCVVLX0FTU0VSVChuYW1lICE9IE5VTEwpOwo+
ICsKPiAgIAlmb3JfZWFjaF9mcyhfX2ZzKSB7Cj4gICAJCWZzID0gKl9fZnM7Cj4gLQkJaWYgKGZz
ID09IE5VTEwpCj4gKwkJaWYgKCFmcyB8fCAhZnMtPnZzX25hbWUpCj4gICAJCQljb250aW51ZTsK
PiAgIAo+IC0JCWlmICghc3RybmNtcChuYW1lLCBmcy0+dnNfbmFtZSwgRlNNQVhOQU1FUykpCj4g
LQkJCWJyZWFrOwo+ICsJCWlmIChzdHJuY21wKG5hbWUsIGZzLT52c19uYW1lLCBGU01BWE5BTUVT
KSA9PSAwKQo+ICsJCQlyZXR1cm4gZnM7Cj4gICAJfQo+IC0JaWYgKCFmcyB8fCAhZnMtPnZzX25h
bWUpCj4gLQkJcmV0dXJuIE5VTEw7Cj4gLQlyZXR1cm4gZnM7Cj4gKwo+ICsJcmV0dXJuIE5VTEw7
Cj4gICB9Cj4gICAKPiAgIGludCBkZXZpY2Vfb3Blbihjb25zdCBjaGFyICpuYW1lIF9fdW51c2Vk
LCBpbnQgbW9kZSBfX3VudXNlZCwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 14:52:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 14:52:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDrc7-0000KZ-RB; Fri, 27 Sep 2019 14:52:55 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=JqDM=XW=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iDrc6-0000KL-QG
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 14:52:54 +0000
X-Inumbo-ID: 7ada1c18-e136-11e9-967a-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 7ada1c18-e136-11e9-967a-12813bfff9fa;
 Fri, 27 Sep 2019 14:52:52 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 6414A105740;
 Fri, 27 Sep 2019 16:52:51 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id eiJuIuokf1uF; Fri, 27 Sep 2019 16:52:51 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 4384310573D
 for <minios-devel@lists.xen.org>; Fri, 27 Sep 2019 16:52:51 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 16:52:50 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Fri, 27 Sep 2019 16:52:48 +0200
Message-ID: <20190927145248.22574-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v2] build: Introduce DBGFLAGS,
 DBGFLAGS-y
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>,
 Simon Kuenzer <simon.kuenzer@neclab.eu>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIG9yaWdpbmFsIHByb2JsZW0gaXMgdGhhdCBhc3NlbWJseSBzb3VyY2UgZmlsZXMgYXJlIGNv
bXBpbGVkCndpdGhvdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uLiBHQ0MncyBgLWdbMC0zXWAgZmxh
ZyBpcyBub3QgaGFuZGVkIG92ZXIKdG8gdGhlIGFzc2VtYmxlciBidWlsZCBydWxlcy4gVGhpcyBj
YXVzZXMgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgpvZiB0aGUgZmluYWwgaW1hZ2UgdG8gYmUg
aW5jb21wbGV0ZS4KVW5mb3J0dW5hdGVseSB0aGUgZGVidWcgb3B0aW9uIGZsYWcgY2Fubm90IGJl
IHNpbXBseSBhZGRlZCB0bwpgQVNGTEFHU2AgYmVjYXVzZSB0aGUgbGlua2VyIHNjcmlwdCBidWls
ZCBydWxlIHVzZXMgdGhlbSwgdG9vLiBUaG9zZQpydWxlcyB1c2UgR0NDJ3MgcHJlcHJvY2Vzc29y
IG9ubHkgYnV0IHRoZSBkZWJ1ZyBmbGFnIGNhdXNlcyBHQ0MgdG8KZHVtcCB0aGUgaW50ZXJuYWwg
cHJlcHJvY2Vzc29yIHN0YXRlIGludG8gdGhlIGdlbmVyYXRlZCBvdXRwdXQgdGV4dApmaWxlLgpC
ZWNhdXNlIGFsbCBvZiB0aGlzLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgdGhlIGJ1aWxkIHN5c3Rl
bSB2YXJpYWJsZXMKYERCR0ZMQUdTYCBhbmQgYERCR0ZMQUdTLXlgLiBUaGV5IGFyZSBpbnRlbmRl
ZCB0byBjYXJyeSBkZWJ1Zy1yZWxhdGVkCmNvbXBpbGUgZmxhZ3MgKGxpa2UgYC1nWzAtM11gKS4g
VGhleSBhcmUgaGFuZGVkIG92ZXIgdG8gb25seSB0byB0aGUKQVMsIEMsIEMrKywgYW5kIEdPIGNv
bXBpbGUgcnVsZXMuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVy
QG5lY2xhYi5ldT4KLS0tCiBNYWtlZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgIDIgKysKIE1h
a2VmaWxlLnVrICAgICAgICAgICAgICAgICAgfCAxNiArKysrLS0tLS0tLS0tLS0tCiBzdXBwb3J0
L2J1aWxkL01ha2VmaWxlLnJ1bGVzIHwgMTAgKysrKystLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAx
MSBpbnNlcnRpb25zKCspLCAxNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBi
L01ha2VmaWxlCmluZGV4IDk5MzY5Y2RjLi45YmM4ZmI1NyAxMDA2NDQKLS0tIGEvTWFrZWZpbGUK
KysrIGIvTWFrZWZpbGUKQEAgLTI2Nyw2ICsyNjcsOCBAQCBHT0NGTEFHUyA6PQogR09DRkxBR1Mt
eSA6PQogR09DSU5DTFVERVMgOj0KIEdPQ0lOQ0xVREVTLXkgOj0KK0RCR0ZMQUdTIDo9CitEQkdG
TEFHUy15IDo9CiBMREZMQUdTIDo9CiBMREZMQUdTLXkgOj0KIElNQUdFX0xERkxBR1MgOj0KZGlm
ZiAtLWdpdCBhL01ha2VmaWxlLnVrIGIvTWFrZWZpbGUudWsKaW5kZXggMjZlZTBmZGEuLjY3YzM3
MmU1IDEwMDY0NAotLS0gYS9NYWtlZmlsZS51aworKysgYi9NYWtlZmlsZS51awpAQCAtNTAsMTgg
KzUwLDEwIEBAIEdPQ0ZMQUdTLSQoQ09ORklHX09QVElNSVpFX0xUTykgICAgICAgICAgICs9IC1m
bHRvCiBMSUJMREZMQUdTLSQoQ09ORklHX09QVElNSVpFX0xUTykgICAgICAgICArPSAkKENGTEFH
UykgJChDRkxBR1MteSkKIExERkxBR1MtJChDT05GSUdfT1BUSU1JWkVfTFRPKSAgICAgICAgICAg
ICs9ICQoQ0ZMQUdTKSAkKENGTEFHUy15KQogCi1DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9M
U19MVkwwKSAgICAgICArPSAtZzAKLUNYWEZMQUdTLSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZM
MCkgICAgICs9IC1nMAotR09DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwwKSAgICAg
Kz0gLWcwCi1DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwxKSAgICAgICArPSAtZzEK
LUNYWEZMQUdTLSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZMMSkgICAgICs9IC1nMQotR09DRkxB
R1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwwKSAgICAgKz0gLWcxCi1DRkxBR1MtJChDT05G
SUdfREVCVUdfU1lNQk9MU19MVkwyKSAgICAgICArPSAtZzIKLUNYWEZMQUdTLSQoQ09ORklHX0RF
QlVHX1NZTUJPTFNfTFZMMikgICAgICs9IC1nMgotR09DRkxBR1MtJChDT05GSUdfREVCVUdfU1lN
Qk9MU19MVkwwKSAgICAgKz0gLWcyCi1DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwz
KSAgICAgICArPSAtZzMKLUNYWEZMQUdTLSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZMMykgICAg
ICs9IC1nMwotR09DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwwKSAgICAgKz0gLWcz
CitEQkdGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDApICAgICArPSAtZzAKK0RCR0ZM
QUdTLSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZMMSkgICAgICs9IC1nMQorREJHRkxBR1MtJChD
T05GSUdfREVCVUdfU1lNQk9MU19MVkwyKSAgICAgKz0gLWcyCitEQkdGTEFHUy0kKENPTkZJR19E
RUJVR19TWU1CT0xTX0xWTDMpICAgICArPSAtZzMKIAogQVNGTEFHUyAgKz0gLUQgX19VbmlrcmFm
dF9fIC1EVUtfQ09ERU5BTUU9IiQoVUtfQ09ERU5BTUUpIgogQVNGTEFHUyAgKz0gLURVS19WRVJT
SU9OPSQoVUtfVkVSU0lPTikuJChVS19TVUJWRVJTSU9OKQpkaWZmIC0tZ2l0IGEvc3VwcG9ydC9i
dWlsZC9NYWtlZmlsZS5ydWxlcyBiL3N1cHBvcnQvYnVpbGQvTWFrZWZpbGUucnVsZXMKaW5kZXgg
OTA2YTBhNmUuLmQ2MGM2ZDkyIDEwMDY0NAotLS0gYS9zdXBwb3J0L2J1aWxkL01ha2VmaWxlLnJ1
bGVzCisrKyBiL3N1cHBvcnQvYnVpbGQvTWFrZWZpbGUucnVsZXMKQEAgLTM1NSw3ICszNTUsNyBA
QCAkKDMpOiAkKDIpIHwgcHJlcGFyZQogCSQoY2FsbCBidWlsZF9jbWRfZml4ZGVwLEFTLCQoMSks
JCgzKSxcCiAJCSQoQVMpICAkKEFTSU5DTFVERVMpICQoQVNJTkNMVURFUy15KSBcCiAJCSAgICAg
ICAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLEFTSU5DTFVERVMpKSAkKCQoY2FsbCB2cHJlZml4
X2xpYiwkKDEpLEFTSU5DTFVERVMteSkpIFwKLQkJICAgICAgICQoQVNGTEFHUykgJChBU0ZMQUdT
LXkpIFwKKwkJICAgICAgICQoQVNGTEFHUykgJChBU0ZMQUdTLXkpICQoREJHRkxBR1MpICQoREJH
RkxBR1MteSkgXAogCQkgICAgICAgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxBU0ZMQUdTKSkg
JCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxBU0ZMQUdTLXkpKSBcCiAJCSAgICAgICAkKDQpIC1E
X19MSUJOQU1FX189JCgxKSAtRF9fQkFTRU5BTUVfXz0kKG5vdGRpciAkKDIpKSBcCiAJCSAgICAg
ICAtYyAkKDIpIC1vICQoMykgJChkZXBmbGFncykKQEAgLTM3Myw3ICszNzMsNyBAQCAkKDMpOiAk
KDIpIHwgcHJlcGFyZQogCSQoY2FsbCBidWlsZF9jbWQsQVMsJCgxKSwkKDMpLFwKIAkJJChBUykg
ICQoQVNJTkNMVURFUykgJChBU0lOQ0xVREVTLXkpIFwKIAkJICAgICAgICQoJChjYWxsIHZwcmVm
aXhfbGliLCQoMSksQVNJTkNMVURFUykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQVNJTkNM
VURFUy15KSkgXAotCQkgICAgICAgJChBU0ZMQUdTKSAkKEFTRkxBR1MteSkgXAorCQkgICAgICAg
JChBU0ZMQUdTKSAkKEFTRkxBR1MteSkgJChEQkdGTEFHUykgJChEQkdGTEFHUy15KSBcCiAJCSAg
ICAgICAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLEFTRkxBR1MpKSAkKCQoY2FsbCB2cHJlZml4
X2xpYiwkKDEpLEFTRkxBR1MteSkpIFwKIAkJICAgICAgICQoNCkgLURfX0xJQk5BTUVfXz0kKDEp
IC1EX19CQVNFTkFNRV9fPSQobm90ZGlyICQoMikpIFwKIAkJICAgICAgIC1jICQoMikgLW8gJCgz
KQpAQCAtMzkxLDcgKzM5MSw3IEBAICQoMyk6ICQoMikgfCBwcmVwYXJlCiAJJChjYWxsIGJ1aWxk
X2NtZF9maXhkZXAsQ0MsJCgxKSwkKDMpLFwKIAkJJChDQykgICQoQ0lOQ0xVREVTKSAkKENJTkNM
VURFUy15KSBcCiAJCSAgICAgICAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLENJTkNMVURFUykp
ICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQ0lOQ0xVREVTLXkpKSBcCi0JCSAgICAgICAkKENG
TEFHUykgJChDRkxBR1MteSkgXAorCQkgICAgICAgJChDRkxBR1MpICQoQ0ZMQUdTLXkpICQoREJH
RkxBR1MpICQoREJHRkxBR1MteSkgXAogCQkgICAgICAgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgx
KSxDRkxBR1MpKSAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLENGTEFHUy15KSkgXAogCQkgICAg
ICAgJCg0KSAtRF9fTElCTkFNRV9fPSQoMSkgLURfX0JBU0VOQU1FX189JChub3RkaXIgJCgyKSkg
XAogCQkgICAgICAgLWMgJCgyKSAtbyAkKDMpICQoZGVwZmxhZ3MpCkBAIC00MDksNyArNDA5LDcg
QEAgJCgzKTogJCgyKSB8IHByZXBhcmUKIAkkKGNhbGwgYnVpbGRfY21kX2ZpeGRlcCxDWFgsJCgx
KSwkKDMpLFwKIAkJJChDWFgpICQoQ1hYSU5DTFVERVMpICQoQ1hYSU5DTFVERVMteSkgXAogCQkg
ICAgICAgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxDWFhJTkNMVURFUykpICQoJChjYWxsIHZw
cmVmaXhfbGliLCQoMSksQ1hYSU5DTFVERVMteSkpIFwKLQkJICAgICAgICQoQ1hYRkxBR1MpICQo
Q1hYRkxBR1MteSkgXAorCQkgICAgICAgJChDWFhGTEFHUykgJChDWFhGTEFHUy15KSAkKERCR0ZM
QUdTKSAkKERCR0ZMQUdTLXkpIFwKIAkJICAgICAgICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSks
Q1hYRkxBR1MpKSAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLENYWEZMQUdTLXkpKSBcCiAJCSAg
ICAgICAkKDQpIC1EX19MSUJOQU1FX189JCgxKSAtRF9fQkFTRU5BTUVfXz0kKG5vdGRpciAkKDIp
KSBcCiAJCSAgICAgICAtYyAkKDIpIC1vICQoMykgJChkZXBmbGFncykKQEAgLTQyNyw3ICs0Mjcs
NyBAQCAkKDMpOiAkKDIpIHwgcHJlcGFyZQogCSQoY2FsbCBidWlsZF9jbWQsR09DLCQoMSksJCgz
KSxcCiAJCSQoR09DKSAkKEdPQ0lOQ0xVREVTKSAkKEdPQ0lOQ0xVREVTLXkpIFwKIAkJCSQoJChj
YWxsIHZwcmVmaXhfbGliLCQoMSksR09DSU5DTFVERVMpKSAkKCQoY2FsbCB2cHJlZml4X2xpYiwk
KDEpLEdPQ0lOQ0xVREVTLXkpKSBcCi0JCQkkKEdPQ0ZMQUdTKSAkKEdPQ0ZMQUdTLXkpIFwKKwkJ
CSQoR09DRkxBR1MpICQoR09DRkxBR1MteSkgJChEQkdGTEFHUykgJChEQkdGTEFHUy15KSBcCiAJ
CQkkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLEdPQ0ZMQUdTKSkgJCgkKGNhbGwgdnByZWZpeF9s
aWIsJCgxKSxHT0NGTEFHUy15KSkgXAogCQkJJCg0KSAtRF9fTElCTkFNRV9fPSQoMSkgLURfX0JB
U0VOQU1FX189JChub3RkaXIgJCgyKSkgXAogCQkJLWMgJCgyKSAtbyAkKDMpICQoZGVwZmxhZ3Mp
Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:00:33 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:00:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDrjU-0001Yt-Cq; Fri, 27 Sep 2019 15:00:32 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=JqDM=XW=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iDrjT-0001Yn-Af
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 15:00:31 +0000
X-Inumbo-ID: 8b2fa8de-e137-11e9-967c-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 8b2fa8de-e137-11e9-967c-12813bfff9fa;
 Fri, 27 Sep 2019 15:00:29 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 3F80CF200B;
 Fri, 27 Sep 2019 17:00:28 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id mQ_bIyrDb6-U; Fri, 27 Sep 2019 17:00:28 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 12314F200A
 for <minios-devel@lists.xen.org>; Fri, 27 Sep 2019 17:00:26 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 17:00:25 +0200
To: <minios-devel@lists.xen.org>
References: <20190927135803.21820-1-simon.kuenzer@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <8e39f62e-dfa0-bbd8-26da-66d5690ad0ff@neclab.eu>
Date: Fri, 27 Sep 2019 17:00:25 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <20190927135803.21820-1-simon.kuenzer@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH] build: Introduce DBGFLAGS,
 DBGFLAGS-y
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U29ycnksIEkgZm9yZ290IHRvIHByb3Blcmx5IGluaXRpYWxpemUgdGhlIG5ldyB2YXJhaWJsZSBh
cyB3ZSBkbyBhbHNvIAp3aXRoIHRoZSBvdGhlciBmbGFncy4gSSBzZW50IGEgdjIuIElnbm9yZSB0
aGlzIHBhdGNoLgoKVGhhbmtzLAoKU2ltb24KCk9uIDI3LjA5LjE5IDE1OjU4LCBTaW1vbiBLdWVu
emVyIHdyb3RlOgo+IFRoZSBvcmlnaW5hbCBwcm9ibGVtIGlzIHRoYXQgYXNzZW1ibHkgc291cmNl
IGZpbGVzIGFyZSBjdXJyZW50bHkgY29tcGlsZWQKPiB3aXRob3V0IGRlYnVnZ2luZyBpbmZvcm1h
dGlvbi4gR0NDJ3MgYC1nWzAtM11gIGZsYWcgaXMgbm90IGhhbmRlZCBvdmVyCj4gdG8gdGhlIGFz
c2VtYmxlciBidWlsZCBydWxlcy4gVGhpcyBjYXVzZXMgdGhlIGRlYnVnZ2luZyBpbmZvcm1hdGlv
bgo+IG9mIHRoZSBmaW5hbCBpbWFnZSB0byBiZSBpbmNvbXBsZXRlLgo+IFVuZm9ydHVuYXRlbHkg
dGhlIGRlYnVnIG9wdGlvbiBmbGFnIGNhbm5vdCBiZSBzaW1wbHkgYWRkZWQgdG8KPiBgQVNGTEFH
U2AgYmVjYXVzZSB0aGUgbGlua2VyIHNjcmlwdCBwcm9jZXNzaW5nIHJ1bGVzIHVzZQo+IHRoZW0s
IHRvby4gVGhvc2Ugb25lcyB1c2UgdGhlIEdDQyBwcmVwcm9jZXNzb3Igb25seSBhbmQgdGhlIGRl
YnVnCj4gZmxhZ3MgY2F1c2VzIGl0IHRvIGR1bXAgdGhlIGludGVybmFsIHByZXByb2Nlc3NvciBz
dGF0ZSBpbnRvCj4gdGhlIGdlbmVyYXRlZCBvdXRwdXQgdGV4dCBmaWxlLgo+IEJlY2F1c2UgYWxs
IG9mIHRoaXMsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aGUgYnVpbGQgc3lzdGVtIHZhcmlhYmxl
cwo+IGBEQkdGTEFHU2AgYW5kIGBEQkdGTEFHUy15YC4gVGhvc2Ugb25lcyBhcmUgaW50ZW5kZWQg
dG8gY2FycnkKPiBkZWJ1Zy1yZWxhdGVkIGNvbXBpbGUgZmxhZ3MgKGxpa2UgYC1nWzAtM11gKS4g
VGhleSBhcmUgaGFuZGVkIG92ZXIgdG8KPiBvbmx5IHRvIHRoZSBBUywgQywgQysrLCBhbmQgR08g
Y29tcGlsZSBydWxlcy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5r
dWVuemVyQG5lY2xhYi5ldT4KPiAtLS0KPiAgIE1ha2VmaWxlLnVrICAgICAgICAgICAgICAgICAg
fCAxNiArKysrLS0tLS0tLS0tLS0tCj4gICBzdXBwb3J0L2J1aWxkL01ha2VmaWxlLnJ1bGVzIHwg
MTAgKysrKystLS0tLQo+ICAgMiBmaWxlcyBjaGFuZ2VkLCA5IGluc2VydGlvbnMoKyksIDE3IGRl
bGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9NYWtlZmlsZS51ayBiL01ha2VmaWxlLnVrCj4g
aW5kZXggMjZlZTBmZGEuLjY3YzM3MmU1IDEwMDY0NAo+IC0tLSBhL01ha2VmaWxlLnVrCj4gKysr
IGIvTWFrZWZpbGUudWsKPiBAQCAtNTAsMTggKzUwLDEwIEBAIEdPQ0ZMQUdTLSQoQ09ORklHX09Q
VElNSVpFX0xUTykgICAgICAgICAgICs9IC1mbHRvCj4gICBMSUJMREZMQUdTLSQoQ09ORklHX09Q
VElNSVpFX0xUTykgICAgICAgICArPSAkKENGTEFHUykgJChDRkxBR1MteSkKPiAgIExERkxBR1Mt
JChDT05GSUdfT1BUSU1JWkVfTFRPKSAgICAgICAgICAgICs9ICQoQ0ZMQUdTKSAkKENGTEFHUy15
KQo+ICAgCj4gLUNGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDApICAgICAgICs9IC1n
MAo+IC1DWFhGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDApICAgICArPSAtZzAKPiAt
R09DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwwKSAgICAgKz0gLWcwCj4gLUNGTEFH
Uy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDEpICAgICAgICs9IC1nMQo+IC1DWFhGTEFHUy0k
KENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDEpICAgICArPSAtZzEKPiAtR09DRkxBR1MtJChDT05G
SUdfREVCVUdfU1lNQk9MU19MVkwwKSAgICAgKz0gLWcxCj4gLUNGTEFHUy0kKENPTkZJR19ERUJV
R19TWU1CT0xTX0xWTDIpICAgICAgICs9IC1nMgo+IC1DWFhGTEFHUy0kKENPTkZJR19ERUJVR19T
WU1CT0xTX0xWTDIpICAgICArPSAtZzIKPiAtR09DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9M
U19MVkwwKSAgICAgKz0gLWcyCj4gLUNGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDMp
ICAgICAgICs9IC1nMwo+IC1DWFhGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDMpICAg
ICArPSAtZzMKPiAtR09DRkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwwKSAgICAgKz0g
LWczCj4gK0RCR0ZMQUdTLSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZMMCkgICAgICs9IC1nMAo+
ICtEQkdGTEFHUy0kKENPTkZJR19ERUJVR19TWU1CT0xTX0xWTDEpICAgICArPSAtZzEKPiArREJH
RkxBR1MtJChDT05GSUdfREVCVUdfU1lNQk9MU19MVkwyKSAgICAgKz0gLWcyCj4gK0RCR0ZMQUdT
LSQoQ09ORklHX0RFQlVHX1NZTUJPTFNfTFZMMykgICAgICs9IC1nMwo+ICAgCj4gICBBU0ZMQUdT
ICArPSAtRCBfX1VuaWtyYWZ0X18gLURVS19DT0RFTkFNRT0iJChVS19DT0RFTkFNRSkiCj4gICBB
U0ZMQUdTICArPSAtRFVLX1ZFUlNJT049JChVS19WRVJTSU9OKS4kKFVLX1NVQlZFUlNJT04pCj4g
ZGlmZiAtLWdpdCBhL3N1cHBvcnQvYnVpbGQvTWFrZWZpbGUucnVsZXMgYi9zdXBwb3J0L2J1aWxk
L01ha2VmaWxlLnJ1bGVzCj4gaW5kZXggOTA2YTBhNmUuLmQ2MGM2ZDkyIDEwMDY0NAo+IC0tLSBh
L3N1cHBvcnQvYnVpbGQvTWFrZWZpbGUucnVsZXMKPiArKysgYi9zdXBwb3J0L2J1aWxkL01ha2Vm
aWxlLnJ1bGVzCj4gQEAgLTM1NSw3ICszNTUsNyBAQCAkKDMpOiAkKDIpIHwgcHJlcGFyZQo+ICAg
CSQoY2FsbCBidWlsZF9jbWRfZml4ZGVwLEFTLCQoMSksJCgzKSxcCj4gICAJCSQoQVMpICAkKEFT
SU5DTFVERVMpICQoQVNJTkNMVURFUy15KSBcCj4gICAJCSAgICAgICAkKCQoY2FsbCB2cHJlZml4
X2xpYiwkKDEpLEFTSU5DTFVERVMpKSAkKCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLEFTSU5DTFVE
RVMteSkpIFwKPiAtCQkgICAgICAgJChBU0ZMQUdTKSAkKEFTRkxBR1MteSkgXAo+ICsJCSAgICAg
ICAkKEFTRkxBR1MpICQoQVNGTEFHUy15KSAkKERCR0ZMQUdTKSAkKERCR0ZMQUdTLXkpIFwKPiAg
IAkJICAgICAgICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQVNGTEFHUykpICQoJChjYWxsIHZw
cmVmaXhfbGliLCQoMSksQVNGTEFHUy15KSkgXAo+ICAgCQkgICAgICAgJCg0KSAtRF9fTElCTkFN
RV9fPSQoMSkgLURfX0JBU0VOQU1FX189JChub3RkaXIgJCgyKSkgXAo+ICAgCQkgICAgICAgLWMg
JCgyKSAtbyAkKDMpICQoZGVwZmxhZ3MpCj4gQEAgLTM3Myw3ICszNzMsNyBAQCAkKDMpOiAkKDIp
IHwgcHJlcGFyZQo+ICAgCSQoY2FsbCBidWlsZF9jbWQsQVMsJCgxKSwkKDMpLFwKPiAgIAkJJChB
UykgICQoQVNJTkNMVURFUykgJChBU0lOQ0xVREVTLXkpIFwKPiAgIAkJICAgICAgICQoJChjYWxs
IHZwcmVmaXhfbGliLCQoMSksQVNJTkNMVURFUykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSks
QVNJTkNMVURFUy15KSkgXAo+IC0JCSAgICAgICAkKEFTRkxBR1MpICQoQVNGTEFHUy15KSBcCj4g
KwkJICAgICAgICQoQVNGTEFHUykgJChBU0ZMQUdTLXkpICQoREJHRkxBR1MpICQoREJHRkxBR1Mt
eSkgXAo+ICAgCQkgICAgICAgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxBU0ZMQUdTKSkgJCgk
KGNhbGwgdnByZWZpeF9saWIsJCgxKSxBU0ZMQUdTLXkpKSBcCj4gICAJCSAgICAgICAkKDQpIC1E
X19MSUJOQU1FX189JCgxKSAtRF9fQkFTRU5BTUVfXz0kKG5vdGRpciAkKDIpKSBcCj4gICAJCSAg
ICAgICAtYyAkKDIpIC1vICQoMykKPiBAQCAtMzkxLDcgKzM5MSw3IEBAICQoMyk6ICQoMikgfCBw
cmVwYXJlCj4gICAJJChjYWxsIGJ1aWxkX2NtZF9maXhkZXAsQ0MsJCgxKSwkKDMpLFwKPiAgIAkJ
JChDQykgICQoQ0lOQ0xVREVTKSAkKENJTkNMVURFUy15KSBcCj4gICAJCSAgICAgICAkKCQoY2Fs
bCB2cHJlZml4X2xpYiwkKDEpLENJTkNMVURFUykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSks
Q0lOQ0xVREVTLXkpKSBcCj4gLQkJICAgICAgICQoQ0ZMQUdTKSAkKENGTEFHUy15KSBcCj4gKwkJ
ICAgICAgICQoQ0ZMQUdTKSAkKENGTEFHUy15KSAkKERCR0ZMQUdTKSAkKERCR0ZMQUdTLXkpIFwK
PiAgIAkJICAgICAgICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksQ0ZMQUdTKSkgJCgkKGNhbGwg
dnByZWZpeF9saWIsJCgxKSxDRkxBR1MteSkpIFwKPiAgIAkJICAgICAgICQoNCkgLURfX0xJQk5B
TUVfXz0kKDEpIC1EX19CQVNFTkFNRV9fPSQobm90ZGlyICQoMikpIFwKPiAgIAkJICAgICAgIC1j
ICQoMikgLW8gJCgzKSAkKGRlcGZsYWdzKQo+IEBAIC00MDksNyArNDA5LDcgQEAgJCgzKTogJCgy
KSB8IHByZXBhcmUKPiAgIAkkKGNhbGwgYnVpbGRfY21kX2ZpeGRlcCxDWFgsJCgxKSwkKDMpLFwK
PiAgIAkJJChDWFgpICQoQ1hYSU5DTFVERVMpICQoQ1hYSU5DTFVERVMteSkgXAo+ICAgCQkgICAg
ICAgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxDWFhJTkNMVURFUykpICQoJChjYWxsIHZwcmVm
aXhfbGliLCQoMSksQ1hYSU5DTFVERVMteSkpIFwKPiAtCQkgICAgICAgJChDWFhGTEFHUykgJChD
WFhGTEFHUy15KSBcCj4gKwkJICAgICAgICQoQ1hYRkxBR1MpICQoQ1hYRkxBR1MteSkgJChEQkdG
TEFHUykgJChEQkdGTEFHUy15KSBcCj4gICAJCSAgICAgICAkKCQoY2FsbCB2cHJlZml4X2xpYiwk
KDEpLENYWEZMQUdTKSkgJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxDWFhGTEFHUy15KSkgXAo+
ICAgCQkgICAgICAgJCg0KSAtRF9fTElCTkFNRV9fPSQoMSkgLURfX0JBU0VOQU1FX189JChub3Rk
aXIgJCgyKSkgXAo+ICAgCQkgICAgICAgLWMgJCgyKSAtbyAkKDMpICQoZGVwZmxhZ3MpCj4gQEAg
LTQyNyw3ICs0MjcsNyBAQCAkKDMpOiAkKDIpIHwgcHJlcGFyZQo+ICAgCSQoY2FsbCBidWlsZF9j
bWQsR09DLCQoMSksJCgzKSxcCj4gICAJCSQoR09DKSAkKEdPQ0lOQ0xVREVTKSAkKEdPQ0lOQ0xV
REVTLXkpIFwKPiAgIAkJCSQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksR09DSU5DTFVERVMpKSAk
KCQoY2FsbCB2cHJlZml4X2xpYiwkKDEpLEdPQ0lOQ0xVREVTLXkpKSBcCj4gLQkJCSQoR09DRkxB
R1MpICQoR09DRkxBR1MteSkgXAo+ICsJCQkkKEdPQ0ZMQUdTKSAkKEdPQ0ZMQUdTLXkpICQoREJH
RkxBR1MpICQoREJHRkxBR1MteSkgXAo+ICAgCQkJJCgkKGNhbGwgdnByZWZpeF9saWIsJCgxKSxH
T0NGTEFHUykpICQoJChjYWxsIHZwcmVmaXhfbGliLCQoMSksR09DRkxBR1MteSkpIFwKPiAgIAkJ
CSQoNCkgLURfX0xJQk5BTUVfXz0kKDEpIC1EX19CQVNFTkFNRV9fPSQobm90ZGlyICQoMikpIFwK
PiAgIAkJCS1jICQoMikgLW8gJCgzKSAkKGRlcGZsYWdzKQo+IAoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:47:45 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:47:45 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTA-0006q0-K5; Fri, 27 Sep 2019 15:47:44 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsT9-0006ps-4i
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:47:43 +0000
X-Inumbo-ID: 2406fb9c-e13e-11e9-967e-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 2406fb9c-e13e-11e9-967e-12813bfff9fa;
 Fri, 27 Sep 2019 15:47:42 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id AD5D928;
 Fri, 27 Sep 2019 08:47:41 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id B549A3F534;
 Fri, 27 Sep 2019 08:47:39 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:20 +0800
Message-Id: <20190927154727.73734-1-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
Subject: [Minios-devel] [UNIKRAFT PATCH v3 0/7] Fix issues when starting
 helloworld on arm64 kvm plat
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXQgbWlnaHQgbm90IGRlcGVuZCBvbiBteSBwcmV2aW91cyB0aW1lci9tdWx0
aS10aHJlYWQgcGF0Y2gKc2VyaWVzIGV4Y2VwdCBmb3IgdGhlIGNoYW5nZXMgaW4gTWFrZWZpbGUu
dWsuCkl0IHJlc29sdmVzIHNldmVyYWwgaXNzdWVzIHdoaWNoIHdlcmUgaW50cm9kdWNlZCByZWNl
bnRseS4gU29tZSBpc3N1ZXMKd2VyZSBleHBvc2VkIGFmdGVyIGFwcGx5aW5nIG15IHRpbWVyL211
bHRpLXRocmVhZCBwYXRjaCBzZXJpZXMuCgpXaXRob3V0IHRoaXMsIGhlbGxvd29ybGQgYXBwIG9u
IGFybTY0IGt2bSBjYW4ndCBiZSBidWlsdCBzdWNjZXNzZnVsbHkuCgpUZXN0ZWQgb24gYXJtNjQg
a3ZtLCBhbmQgbWFkZSBoZWxsd29ybGRpbmcgc3RhcnRzIHVwIHN1Y2Nlc3NmdWxseS4KVGVzdGVk
IG9uIFg4NiBwbGF0LCBwYXNzZWQgdGhlIGNvbXBpbGF0aW9uLgoKQ2hhbmdlczoKdjM6IGFkZCBw
YXRjaCAwNwogICAgcmVmaW5lIHRoZSBjb21taXQgbXNnCnYyOiBhZGRyZXNzIHRoZSBjb21tZW50
cyBmcm9tIEp1bGllbgogICAgY2hhbmdlIHRoZSBwYXRjaCAwMwogICAgYWRkIHBhdGNoIDA0LTA2
CgpKaWEgSGUgKDcpOgogIHBsYXQ6IEltcGxlbWVudCB0bHMgc3R1YiBmb3IgYXJtNjQKICBwbGF0
L2NvbW1vbjogSW1wbGVtZW50IGEgZmV3IGV4dHJhIHJlZ2lzdGVycyBzdHViIGhlbHBlcnMgb24g
YXJtNjQKICBwbGF0L2t2bTogSW1wbGVtZW50IHN0dWIgb2YgdWtwbGF0X3N0YWNrX3NldF9jdXJy
ZW50X3RocmVhZCBmb3IgYXJtNjQKICBwbGF0L2t2bS9hcm06IEVsaW1pbmF0ZSB1bnVzZWQgcGFy
YW1ldGVyIHdhcm5pbmcgb2YgaW50Y3RybF9hY2tfaXJxKCkKICBwbGF0L2NvbW1vbjogQWRkIGhl
YWRlciBndWFyZHMgdG8gYXZvaWQgaW5jbHVkaW5nIGhlYWRlciBmaWxlIGZvcgogICAgbXVsdGlw
bGUgdGltZXMKICBhcmNoL2FybTY0OiBJbXBsZW1lbnQgYml0b3BzIGZvciBhcm02NAogIGFyY2gv
YXJtNjQ6IFJlaW1wbGVtZW50IHVrYXJjaF9mZnNsIHdpdGggZ2NjIGJ1aWx0aW4KCiBhcmNoL2Fy
bS9hcm02NC9pbmNsdWRlL3VrL2FzbS9hdG9taWMuaCB8IDU3ICsrKysrKysrKysrKysrKystLS0t
LS0tLS0tCiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaCAgICB8IDMzICsrKysr
KysrKysrKysrKwogcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvdGxzLmggICAgfCAzNyAr
KysrKysrKysrKysrKysrKwogcGxhdC9jb21tb24vaW5jbHVkZS90bHMuaCAgICAgICAgICAgICAg
fCAgMiArCiBwbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaCAgICAgICAgICB8IDI0ICsrKysr
KysrKysrCiBwbGF0L2NvbW1vbi9zd19jdHguYyAgICAgICAgICAgICAgICAgICB8IDE2ICsrLS0t
LS0tCiBwbGF0L2t2bS9NYWtlZmlsZS51ayAgICAgICAgICAgICAgICAgICB8ICAxICsKIHBsYXQv
a3ZtL2FybS9pbnRjdHJsLmMgICAgICAgICAgICAgICAgIHwgIDMgKy0KIHBsYXQva3ZtL2FybS9t
ZW1vcnkuYyAgICAgICAgICAgICAgICAgIHwgMzkgKysrKysrKysrKysrKysrKysrCiA5IGZpbGVz
IGNoYW5nZWQsIDE3NyBpbnNlcnRpb25zKCspLCAzNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90bHMuaAogY3JlYXRlIG1vZGUg
MTAwNjQ0IHBsYXQva3ZtL2FybS9tZW1vcnkuYwoKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:47:46 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:47:46 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTC-0006qV-LV; Fri, 27 Sep 2019 15:47:46 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsTB-0006qL-RY
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:47:45 +0000
X-Inumbo-ID: 255ab844-e13e-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 255ab844-e13e-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 15:47:44 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 0CC5D1570;
 Fri, 27 Sep 2019 08:47:44 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0DB533F534;
 Fri, 27 Sep 2019 08:47:41 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:21 +0800
Message-Id: <20190927154727.73734-2-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927154727.73734-1-justin.he@arm.com>
References: <20190927154727.73734-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 1/7] plat: Implement tls stub for
 arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2l0aG91dCB0aGlzIHBhdGNoLCBjb21waWxlciB3aWxsIHJlcG9ydDoKdW5pa3JhZnQvcGxhdC9j
b21tb24vaW5jbHVkZS90bHMuaDozODoyOiBlcnJvcjogI2Vycm9yICJGb3IgdGhyZWFkLWxvY2Fs
CnN0b3JhZ2Ugc3VwcG9ydCwgYWRkIHRscy5oIGZvciBjdXJyZW50IGFyY2hpdGVjdHVyZS4iCiAj
ZXJyb3IgIkZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBzdXBwb3J0LCBhZGQgdGxzLmggZm9yIGN1
cnJlbnQgYXJjaGl0ZWN0dXJlLiIKQW5kIGFybTY0IGt2bSBwbGF0IHRhcmdldCB3aWxsIG5vdCBi
ZSBidWlsdC4KCk5vdyBJIGRvbid0IHJlbW92ZSB0aGUgcHJlLWNvbXBpbGF0aW9uICN3YXJuIGFz
IGZvbGxvd3MgaW4KYXJjaC9hcm0vYXJtNjQvaW5jbHVkZS91ay9hc20vdGxzLmggYmVjYXVzZSBJ
IHRob3VnaHQgYXJtNjQgdGxzIGltcGxlbWVudGF0aW9uCnNob3VsZCB1c2UgdHBpZHJfZWwxLiBJ
IHdpbGwgZG8gaXQgaW4gdGhlIGZ1dHVyZS4KIiN3YXJuaW5nIFRocmVhZC1sb2NhbCBzdG9yYWdl
IGhhcyBub3QgYmVlbiB0ZXN0ZWQgb24gYWFyY2g2NCEiCgpTaWduZWQtb2ZmLWJ5OiBKaWEgSGUg
PGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3Rs
cy5oIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHBsYXQvY29tbW9uL2luY2x1
ZGUvdGxzLmggICAgICAgICAgIHwgIDIgKysKIDIgZmlsZXMgY2hhbmdlZCwgMzkgaW5zZXJ0aW9u
cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L3Rs
cy5oCgpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvdGxzLmggYi9w
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC90bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5lZDkyYWI5Ci0tLSAvZGV2L251bGwKKysrIGIvcGxhdC9jb21tb24vaW5j
bHVkZS9hcm0vYXJtNjQvdGxzLmgKQEAgLTAsMCArMSwzNyBAQAorLyogU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEJTRC0zLUNsYXVzZSAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAxOSwgTkVD
IEV1cm9wZSBMdGQuLCBORUMgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqICAgIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgor
ICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJRUQgSU4gQU5ZIFdB
WS4KKyAqLworI2lmbmRlZiBfX1BMQVRfQ01OX0FSTTY0X1RMU19IX18KKyNkZWZpbmUgX19QTEFU
X0NNTl9BUk02NF9UTFNfSF9fCisKKyNkZWZpbmUgc2V0X3Rsc19wb2ludGVyKHB0cikgZG8geyB9
IHdoaWxlICgwKQorCisjZW5kaWYgLyogX19QTEFUX0NNTl9YODZfVExTX0hfXyAqLwpkaWZmIC0t
Z2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS90bHMuaCBiL3BsYXQvY29tbW9uL2luY2x1ZGUvdGxz
LmgKaW5kZXggYjkxNzZmOS4uNDU2NTlkOCAxMDA2NDQKLS0tIGEvcGxhdC9jb21tb24vaW5jbHVk
ZS90bHMuaAorKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL3Rscy5oCkBAIC0zNCw2ICszNCw4IEBA
CiAKICNpZiBkZWZpbmVkKF9fWDg2XzY0X18pCiAjaW5jbHVkZSA8eDg2L3Rscy5oPgorI2VsaWYg
ZGVmaW5lZChfX0FSTV82NF9fKQorI2luY2x1ZGUgPGFybS9hcm02NC90bHMuaD4KICNlbHNlCiAj
ZXJyb3IgIkZvciB0aHJlYWQtbG9jYWwgc3RvcmFnZSBzdXBwb3J0LCBhZGQgdGxzLmggZm9yIGN1
cnJlbnQgYXJjaGl0ZWN0dXJlLiIKICNlbmRpZgotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlz
dApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9q
ZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:47:52 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:47:52 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTH-0006rS-NI; Fri, 27 Sep 2019 15:47:51 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsTG-0006rI-Oc
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:47:50 +0000
X-Inumbo-ID: 26b46c4e-e13e-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 26b46c4e-e13e-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 15:47:46 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 58DAE28;
 Fri, 27 Sep 2019 08:47:46 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 61F3F3F534;
 Fri, 27 Sep 2019 08:47:44 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:22 +0800
Message-Id: <20190927154727.73734-3-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927154727.73734-1-justin.he@arm.com>
References: <20190927154727.73734-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 2/7] plat/common: Implement a few
 extra registers stub helpers on arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gYXJtNjQsIHdlIGRvbid0IG5lZWQgdGhlIGV4dHJhIHJlZ2lzdGVycyBkdXJpbmcgY29udGV4
dCBzd2l0Y2hpbmcgc28KZmFyLiBUaGlzIHBhdGNoIGRlY291cGxlIHRoZSBhcmNoIHNwZWNpZmlj
IHN0cnVjdHVyZXMvZnVuY3Rpb25zIGluZm8gYXJjaApyZWxhdGVkIGZpbGVzLgoKV2l0aG91dCB0
aGlzIHBhdGNoLCBpdCB3aWxsIHJlcG9ydCBjb21waWxhdGlvbiBlcnJvciBhcyBmb2xsb3dzOgpw
bGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaC86OiBJbiBmdW5jdGlvbiAnc2F2ZV9leHRyZWdz
JzoKcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1Lmg6NzI6MzogZXJyb3I6IGltcG9zc2libGUg
Y29uc3RyYWludCBpbiAnYXNtJwogICBhc20gdm9sYXRpbGUoInhzYXZlICglMCkiIDo6ICJyIihj
dHgtPmV4dHJlZ3MpLAogICBefn4KcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1Lmg6NzY6Mzog
ZXJyb3I6IGltcG9zc2libGUgY29uc3RyYWludCBpbiAnYXNtJwogICBhc20gdm9sYXRpbGUoInhz
YXZlb3B0ICglMCkiIDo6ICJyIihjdHgtPmV4dHJlZ3MpLAoKU2lnbmVkLW9mZi1ieTogSmlhIEhl
IDxqdXN0aW4uaGVAYXJtLmNvbT4KLS0tCiBwbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9j
cHUuaCB8IDI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHBsYXQvY29tbW9uL2luY2x1
ZGUveDg2L2NwdS5oICAgICAgIHwgMjQgKysrKysrKysrKysrKysrKysrKysrKysrCiBwbGF0L2Nv
bW1vbi9zd19jdHguYyAgICAgICAgICAgICAgICB8IDE2ICsrKystLS0tLS0tLS0tLS0KIDMgZmls
ZXMgY2hhbmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0
IGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmggYi9wbGF0L2NvbW1vbi9pbmNs
dWRlL2FybS9hcm02NC9jcHUuaAppbmRleCAxNDk1MTkyLi4yM2FkZjhkIDEwMDY0NAotLS0gYS9w
bGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaAorKysgYi9wbGF0L2NvbW1vbi9pbmNs
dWRlL2FybS9hcm02NC9jcHUuaApAQCAtMzMsNiArMzMsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8
aW50dHlwZXMuaD4KKyNpbmNsdWRlIDx1ay9lc3NlbnRpYWxzLmg+CisjaW5jbHVkZSA8c3dfY3R4
Lmg+CisjaW5jbHVkZSA8dWsvYWxsb2MuaD4KKyNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KIAogLyog
RGVmaW5lIG1hY3JvcyB0byBhY2Nlc3MgSU8gcmVnaXN0ZXJzICovCiAjZGVmaW5lIF9fSU9SRUdf
UkVBRChiaXRzKSBcCkBAIC0xMDgsMyArMTEyLDI3IEBAIGludDMyX3Qgc21jY19wc2NpX3NtY19j
YWxsKHVpbnQzMl90LCB1aW50NjRfdCwgdWludDY0X3QsIHVpbnQ2NF90KTsKIHZvaWQgaGFsdCh2
b2lkKTsKIHZvaWQgcmVzZXQodm9pZCk7CiB2b2lkIHN5c3RlbV9vZmYodm9pZCk7CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzYXZlX2V4dHJlZ3Moc3RydWN0IHN3X2N0eCAqY3R4IF9fdW51c2VkKQor
eworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9leHRyZWdzKHN0cnVjdCBzd19jdHgg
KmN0eCBfX3VudXNlZCkKK3sKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dfY3R4ICphcmNo
X2FsbG9jX3N3X2N0eChzdHJ1Y3QgdWtfYWxsb2MgKmFsbG9jYXRvcikKK3sKKwlzdHJ1Y3Qgc3df
Y3R4ICpjdHg7CisKKwljdHggPSB1a19tYWxsb2MoYWxsb2NhdG9yLCBzaXplb2Yoc3RydWN0IHN3
X2N0eCkpOworCXVrX3ByX2RlYnVnKCJBbGxvY2F0aW5nICVsdSBieXRlcyBmb3Igc3cgY3R4IGF0
ICVwXG4iLAorCQkgICBzaXplb2Yoc3RydWN0IHN3X2N0eCksIGN0eCk7CisKKwlyZXR1cm4gY3R4
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pbml0X2V4dHJlZ3Moc3RydWN0IHN3X2N0
eCAqY3R4KQoreworCWN0eC0+ZXh0cmVncyA9ICh1aW50cHRyX3QpY3R4ICsgc2l6ZW9mKHN0cnVj
dCBzd19jdHgpOworfQpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS94ODYvY3B1Lmgg
Yi9wbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaAppbmRleCA4YWNkNzFlLi5kMmNmNTNhIDEw
MDY0NAotLS0gYS9wbGF0L2NvbW1vbi9pbmNsdWRlL3g4Ni9jcHUuaAorKysgYi9wbGF0L2NvbW1v
bi9pbmNsdWRlL3g4Ni9jcHUuaApAQCAtMzQsNiArMzQsOSBAQAogI2luY2x1ZGUgPHg4Ni9jcHVf
ZGVmcy5oPgogI2luY2x1ZGUgPHN3X2N0eC5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1
ZGUgPHVrL2Fzc2VydC5oPgorI2luY2x1ZGUgPHVrL2FsbG9jLmg+CisjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAKIHZvaWQgaGFsdCh2b2lkKTsKIHZvaWQgc3lzdGVtX29mZih2b2lkKTsKQEAgLTk4LDYg
KzEwMSwyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVzdG9yZV9leHRyZWdzKHN0cnVjdCBzd19j
dHggKmN0eCkKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN3X2N0eCAqYXJjaF9hbGxv
Y19zd19jdHgoc3RydWN0IHVrX2FsbG9jICphbGxvY2F0b3IpCit7CisJc3RydWN0IHN3X2N0eCAq
Y3R4OworCXNpemVfdCBzejsKKworCXN6ID0gQUxJR05fVVAoc2l6ZW9mKHN0cnVjdCBzd19jdHgp
LCB4ODZfY3B1X2ZlYXR1cmVzLmV4dHJlZ3NfYWxpZ24pCisJCSsgeDg2X2NwdV9mZWF0dXJlcy5l
eHRyZWdzX3NpemU7CisJY3R4ID0gdWtfbWFsbG9jKGFsbG9jYXRvciwgc3opOworCXVrX3ByX2Rl
YnVnKCJBbGxvY2F0aW5nICVsdSBieXRlcyBmb3Igc3cgY3R4IGF0ICVwXG4iLCBzeiwgY3R4KTsK
KworCXJldHVybiBjdHg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2luaXRfZXh0cmVn
cyhzdHJ1Y3Qgc3dfY3R4ICpjdHgpCit7CisJY3R4LT5leHRyZWdzID0gQUxJR05fVVAoKCh1aW50
cHRyX3QpY3R4ICsgc2l6ZW9mKHN0cnVjdCBzd19jdHgpKSwKKwkJCQl4ODZfY3B1X2ZlYXR1cmVz
LmV4dHJlZ3NfYWxpZ24pOworCS8vIEluaXRpYWxpemUgZXh0cmVncyBhcmVhOiB6ZXJvIG91dCwg
dGhlbiBzYXZlIGEgdmFsaWQgbGF5b3V0IHRvIGl0LgorCW1lbXNldCgodm9pZCAqKWN0eC0+ZXh0
cmVncywgMCwgeDg2X2NwdV9mZWF0dXJlcy5leHRyZWdzX3NpemUpOworfQorCiBzdGF0aWMgaW5s
aW5lIHZvaWQgX2luaXRfY3B1ZmVhdHVyZXModm9pZCkKIHsKIAlfX3UzMiBlYXgsIGVieCwgZWN4
LCBlZHg7CmRpZmYgLS1naXQgYS9wbGF0L2NvbW1vbi9zd19jdHguYyBiL3BsYXQvY29tbW9uL3N3
X2N0eC5jCmluZGV4IDg4YTM3N2YuLjJjNzhhYmUgMTAwNjQ0Ci0tLSBhL3BsYXQvY29tbW9uL3N3
X2N0eC5jCisrKyBiL3BsYXQvY29tbW9uL3N3X2N0eC5jCkBAIC0zNCwxMyArMzQsMTEgQEAKIAog
I2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmlu
Zy5oPgogI2luY2x1ZGUgPHVrL3BsYXQvdGhyZWFkLmg+Ci0jaW5jbHVkZSA8dWsvYWxsb2MuaD4K
ICNpbmNsdWRlIDxzd19jdHguaD4KICNpbmNsdWRlIDx1ay9hc3NlcnQuaD4KICNpbmNsdWRlIDx0
bHMuaD4KLSNpbmNsdWRlIDx4ODYvY3B1Lmg+CisjaW5jbHVkZSA8Y3B1Lmg+CiAKIHN0YXRpYyB2
b2lkICpzd19jdHhfY3JlYXRlKHN0cnVjdCB1a19hbGxvYyAqYWxsb2NhdG9yLCB1bnNpZ25lZCBs
b25nIHNwLAogCQkJCXVuc2lnbmVkIGxvbmcgdGxzcCk7CkBAIC01NywxNCArNTUsMTAgQEAgc3Rh
dGljIHZvaWQgKnN3X2N0eF9jcmVhdGUoc3RydWN0IHVrX2FsbG9jICphbGxvY2F0b3IsIHVuc2ln
bmVkIGxvbmcgc3AsCiAJCQkJdW5zaWduZWQgbG9uZyB0bHNwKQogewogCXN0cnVjdCBzd19jdHgg
KmN0eDsKLQlzaXplX3Qgc3o7CiAKIAlVS19BU1NFUlQoYWxsb2NhdG9yICE9IE5VTEwpOwogCi0J
c3ogPSBBTElHTl9VUChzaXplb2Yoc3RydWN0IHN3X2N0eCksIHg4Nl9jcHVfZmVhdHVyZXMuZXh0
cmVnc19hbGlnbikKLQkJKyB4ODZfY3B1X2ZlYXR1cmVzLmV4dHJlZ3Nfc2l6ZTsKLQljdHggPSB1
a19tYWxsb2MoYWxsb2NhdG9yLCBzeik7Ci0JdWtfcHJfZGVidWcoIkFsbG9jYXRpbmcgJWx1IGJ5
dGVzIGZvciBzdyBjdHggYXQgJXBcbiIsIHN6LCBjdHgpOworCWN0eCA9IGFyY2hfYWxsb2Nfc3df
Y3R4KGFsbG9jYXRvcik7CiAJaWYgKGN0eCA9PSBOVUxMKSB7CiAJCXVrX3ByX3dhcm4oIkVycm9y
IGFsbG9jYXRpbmcgc29mdHdhcmUgY29udGV4dC4iKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC03Mywx
MCArNjcsOCBAQCBzdGF0aWMgdm9pZCAqc3dfY3R4X2NyZWF0ZShzdHJ1Y3QgdWtfYWxsb2MgKmFs
bG9jYXRvciwgdW5zaWduZWQgbG9uZyBzcCwKIAljdHgtPnNwID0gc3A7CiAJY3R4LT50bHNwID0g
dGxzcDsKIAljdHgtPmlwID0gKHVuc2lnbmVkIGxvbmcpIGFzbV90aHJlYWRfc3RhcnRlcjsKLQlj
dHgtPmV4dHJlZ3MgPSBBTElHTl9VUCgoKHVpbnRwdHJfdCljdHggKyBzaXplb2Yoc3RydWN0IHN3
X2N0eCkpLAotCQkJCXg4Nl9jcHVfZmVhdHVyZXMuZXh0cmVnc19hbGlnbik7Ci0JLy8gSW5pdGlh
bGl6ZSBleHRyZWdzIGFyZWE6IHplcm8gb3V0LCB0aGVuIHNhdmUgYSB2YWxpZCBsYXlvdXQgdG8g
aXQuCi0JbWVtc2V0KCh2b2lkICopY3R4LT5leHRyZWdzLCAwLCB4ODZfY3B1X2ZlYXR1cmVzLmV4
dHJlZ3Nfc2l6ZSk7CisJYXJjaF9pbml0X2V4dHJlZ3MoY3R4KTsKKwogCXNhdmVfZXh0cmVncyhj
dHgpOwogCiAJcmV0dXJuIGN0eDsKLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9z
LWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcv
bWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:47:56 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:47:56 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTM-0006yt-Ou; Fri, 27 Sep 2019 15:47:56 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsTL-0006yg-Ow
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:47:55 +0000
X-Inumbo-ID: 281f394c-e13e-11e9-8628-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 281f394c-e13e-11e9-8628-bc764e2007e4;
 Fri, 27 Sep 2019 15:47:48 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A51E81570;
 Fri, 27 Sep 2019 08:47:48 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id AE0AD3F534;
 Fri, 27 Sep 2019 08:47:46 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:23 +0800
Message-Id: <20190927154727.73734-4-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927154727.73734-1-justin.he@arm.com>
References: <20190927154727.73734-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 3/7] plat/kvm: Implement stub of
 ukplat_stack_set_current_thread for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBpcyB0byBmaXggdGhlIGNvbXBpbGF0aW9uIGVycm9yIHdoZW4gYnVpbGRpbmcg
YXJtNjQga3ZtIGltYWdlCmJ1aWxkL3VuaWtyYWZ0X2t2bS1hcm02NC5vOiBJbiBmdW5jdGlvbiBg
c2NoZWRjb29wX3NjaGVkdWxlJzoKbGliL3Vrc2NoZWRjb29wL3NjaGVkY29vcC5jOjEwNzogdW5k
ZWZpbmVkIHJlZmVyZW5jZSB0bwpgdWtwbGF0X3N0YWNrX3NldF9jdXJyZW50X3RocmVhZCcKCklu
IGNvbW1pdCAwMTdmZmZkNTllY2UgKCJwbGF0Lyo6IFNldCBjdXJyZW50IHRocmVhZCBvbiBJUlEg
c3RhY2siKSwgaXQKaW50cm9kdWNlIHVrcGxhdF9zdGFja19zZXRfY3VycmVudF90aHJlYWQgb24g
eDg2IHRvIHNldCB0aGUgdGhyZWFkX2FkZHIKb24gY3B1X2ludHJfc3RhY2suIFRoZXJlIGFyZSBu
byBpc29sYXRpbmcgc3RhY2sgZm9yIGludGVycnVwdCBvbiBhcm02NAp1cCB0byBub3cuIFNvIG1h
a2UgYW4gZW1wdHkgc3R1YiBoZXJlLgoKU2lnbmVkLW9mZi1ieTogSmlhIEhlIDxqdXN0aW4uaGVA
YXJtLmNvbT4KLS0tCiBwbGF0L2t2bS9NYWtlZmlsZS51ayAgfCAgMSArCiBwbGF0L2t2bS9hcm0v
bWVtb3J5LmMgfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIg
ZmlsZXMgY2hhbmdlZCwgNDAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHBsYXQv
a3ZtL2FybS9tZW1vcnkuYwoKZGlmZiAtLWdpdCBhL3BsYXQva3ZtL01ha2VmaWxlLnVrIGIvcGxh
dC9rdm0vTWFrZWZpbGUudWsKaW5kZXggN2NlOTI4OC4uNjNiZDViMCAxMDA2NDQKLS0tIGEvcGxh
dC9rdm0vTWFrZWZpbGUudWsKKysrIGIvcGxhdC9rdm0vTWFrZWZpbGUudWsKQEAgLTg0LDYgKzg0
LDcgQEAgTElCS1ZNUExBVF9TUkNTLSQoQ09ORklHX0FSQ0hfQVJNXzY0KSArPSAkKFVLX1BMQVRf
Q09NTU9OX0JBU0UpL2FybS90aHJlYWRfc3RhcnQKIExJQktWTVBMQVRfU1JDUy15ICs9ICQoVUtf
UExBVF9DT01NT05fQkFTRSkvdGhyZWFkLmN8Y29tbW9uCiBMSUJLVk1QTEFUX1NSQ1MteSArPSAk
KFVLX1BMQVRfQ09NTU9OX0JBU0UpL3N3X2N0eC5jfGNvbW1vbgogZW5kaWYKK0xJQktWTVBMQVRf
U1JDUy0kKENPTkZJR19BUkNIX0FSTV82NCkgKz0gJChMSUJLVk1QTEFUX0JBU0UpL2FybS9tZW1v
cnkuY3xhcm0KIExJQktWTVBMQVRfU1JDUy0kKENPTkZJR19BUkNIX0FSTV82NCkgKz0gJChMSUJL
Vk1QTEFUX0JBU0UpL2FybS9lbnRyeTY0LlMKIExJQktWTVBMQVRfU1JDUy0kKENPTkZJR19BUkNI
X0FSTV82NCkgKz0gJChMSUJLVk1QTEFUX0JBU0UpL2FybS9leGNlcHRpb25zLlMKIExJQktWTVBM
QVRfU1JDUy0kKENPTkZJR19BUkNIX0FSTV82NCkgKz0gJChMSUJLVk1QTEFUX0JBU0UpL2FybS9w
YWdldGFibGU2NC5TCmRpZmYgLS1naXQgYS9wbGF0L2t2bS9hcm0vbWVtb3J5LmMgYi9wbGF0L2t2
bS9hcm0vbWVtb3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwZDIx
MwotLS0gL2Rldi9udWxsCisrKyBiL3BsYXQva3ZtL2FybS9tZW1vcnkuYwpAQCAtMCwwICsxLDM5
IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgorICog
QXV0aG9yczogQ29zdGluIEx1cHUgPGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4KKyAqCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIGNvcHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiAgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVE
IE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMu
aD4KKwordm9pZCB1a3BsYXRfc3RhY2tfc2V0X2N1cnJlbnRfdGhyZWFkKHZvaWQgKnRocmVhZF9h
ZGRyIF9fdW51c2VkKQoreworfQotLSAKMi4xNy4xCgoKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3Mt
ZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9t
YWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:47:58 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:47:58 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTO-0006zR-QU; Fri, 27 Sep 2019 15:47:58 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsTN-0006z8-24
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:47:57 +0000
X-Inumbo-ID: 2c868fee-e13e-11e9-967e-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 2c868fee-e13e-11e9-967e-12813bfff9fa;
 Fri, 27 Sep 2019 15:47:56 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 2076028;
 Fri, 27 Sep 2019 08:47:56 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 2087F3F534;
 Fri, 27 Sep 2019 08:47:53 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:26 +0800
Message-Id: <20190927154727.73734-7-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927154727.73734-1-justin.he@arm.com>
References: <20190927154727.73734-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 6/7] arch/arm64: Implement bitops
 for arm64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2l0aG91dCB0aGlzIHBhdGNoLCBjb21waWxlciB3aWxsIHJlcG9ydCB3YXJuaW5nIGFzIGZvbGxv
d3M6CiAgSW4gZmlsZSBpbmNsdWRlZCBmcm9tIHBsYXQvY29tbW9uL2FybS90aW1lLmM6NDE6MDoK
aW5jbHVkZS91ay9iaXRvcHMuaDogSW4gZnVuY3Rpb24gJ3VrX2dldF9jb3VudF9vcmRlcic6Cmlu
Y2x1ZGUvdWsvYml0b3BzLmg6ODk6MTA6IHdhcm5pbmc6IGltcGxpY2l0IGRlY2xhcmF0aW9uIG9m
IGZ1bmN0aW9uCid1a2FyY2hfZmxzJzsgZGlkIHlvdSBtZWFuICd1a2FyY2hfZmZzbCc/IFstV2lt
cGxpY2l0LWZ1bmN0aW9uLWRlY2xhcmF0aW9uXQogIG9yZGVyID0gdWthcmNoX2Zscyhjb3VudCk7
CiAgICAgICAgICBefn5+fn5+fn5+CiAgICAgICAgICB1a2FyY2hfZmZzbAppbmNsdWRlL3VrL2Jp
dG9wcy5oOiBJbiBmdW5jdGlvbiAndWtfZmluZF9sYXN0X2JpdCc6CmluY2x1ZGUvdWsvYml0b3Bz
Lmg6MTU0OjE4OiB3YXJuaW5nOiBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbgondWth
cmNoX2Zsc2wnOyBkaWQgeW91IG1lYW4gJ3VrYXJjaF9mZnNsJz8gWy1XaW1wbGljaXQtZnVuY3Rp
b24tZGVjbGFyYXRpb25dCiAgICByZXR1cm4gKGJpdCArIHVrYXJjaF9mbHNsKG1hc2spKTsKICAg
ICAgICAgICAgICAgICAgXn5+fn5+fn5+fn4KICAgICAgICAgICAgICAgICAgdWthcmNoX2Zmc2wK
ClNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogYXJjaC9hcm0v
YXJtNjQvaW5jbHVkZS91ay9hc20vYXRvbWljLmggfCAzNCArKysrKysrKysrKysrKysrKysrKysr
KysrKwogMSBmaWxlIGNoYW5nZWQsIDM0IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9hcmNo
L2FybS9hcm02NC9pbmNsdWRlL3VrL2FzbS9hdG9taWMuaCBiL2FyY2gvYXJtL2FybTY0L2luY2x1
ZGUvdWsvYXNtL2F0b21pYy5oCmluZGV4IDdlZTY2NjcuLmZiN2QzYmMgMTAwNjQ0Ci0tLSBhL2Fy
Y2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvYXJtL2FybTY0
L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oCkBAIC0zNyw2ICszNywyOSBAQAogI2Vycm9yIERvIG5v
dCBpbmNsdWRlIHRoaXMgaGVhZGVyIGRpcmVjdGx5CiAjZW5kaWYKIAorLyoqCisgKiB1a2FyY2hf
ZmZzIC0gZmluZCBmaXJzdCAobG93ZXN0KSBzZXQgYml0IGluIHdvcmQuCisgKiBAd29yZDogVGhl
IHdvcmQgdG8gc2VhcmNoCisgKgorICogUmV0dXJucyBvbmUgcGx1cyB0aGUgaW5kZXggb2YgdGhl
IGxlYXN0IHNpZ25pZmljYW50IDEtYml0IG9mIHgsIG9yCisgKiBpZiB4IGlzIHplcm8sIHJldHVy
bnMgemVyby4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdWthcmNoX2Zmcyh1bnNp
Z25lZCBpbnQgeCkKK3sKKwlyZXR1cm4gX19idWlsdGluX2Zmcyh4KTsKK30KKworLyoqCisgKiB1
a2FyY2hfZmxzIC0gZmluZCBsYXN0IChoaWdoZXN0KSBzZXQgYml0IGluIHdvcmQuCisgKiBAd29y
ZDogVGhlIHdvcmQgdG8gc2VhcmNoCisgKgorICogVW5kZWZpbmVkIGlmIG5vIGJpdCBleGlzdHMs
IHNvIGNvZGUgc2hvdWxkIGNoZWNrIGFnYWluc3QgMCBmaXJzdC4KKyAqLworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBpbnQgdWthcmNoX2Zscyh1bnNpZ25lZCBpbnQgeCkKK3sKKwlyZXR1cm4gc2l6
ZW9mKHgpICogOCAtIF9fYnVpbHRpbl9jbHooeCk7Cit9CisKIC8qKgogICogdWthcmNoX2Zmc2wg
LSBmaW5kIGZpcnN0IChsb3dlc3QpIHNldCBiaXQgaW4gd29yZC4KICAqIEB3b3JkOiBUaGUgd29y
ZCB0byBzZWFyY2gKQEAgLTY4LDMgKzkxLDE0IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9u
ZyB1a2FyY2hfZmZzbCh1bnNpZ25lZCBsb25nIHdvcmQpCiAKIAlyZXR1cm4gNjMgLSBjbHo7CiB9
CisKKy8qKgorICogdWthcmNoX2Zsc2wgLSBmaW5kIGxhc3QgKGhpZ2hlc3QpIHNldCBiaXQgaW4g
d29yZC4KKyAqIEB3b3JkOiBUaGUgd29yZCB0byBzZWFyY2gKKyAqCisgKiBVbmRlZmluZWQgaWYg
bm8gYml0IGV4aXN0cywgc28gY29kZSBzaG91bGQgY2hlY2sgYWdhaW5zdCAwIGZpcnN0LgorICov
CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdWthcmNoX2Zsc2wodW5zaWduZWQgbG9uZyB4
KQoreworCXJldHVybiBzaXplb2YoeCkgKiA4IC0gX19idWlsdGluX2NsemwoeCk7Cit9Ci0tIAoy
LjE3LjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:48:01 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:48:01 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTQ-00073f-Tm; Fri, 27 Sep 2019 15:48:00 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsTP-0006zs-Bn
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:47:59 +0000
X-Inumbo-ID: 2dfd2040-e13e-11e9-967e-12813bfff9fa
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 2dfd2040-e13e-11e9-967e-12813bfff9fa;
 Fri, 27 Sep 2019 15:47:58 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6C4A61570;
 Fri, 27 Sep 2019 08:47:58 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 75A673F534;
 Fri, 27 Sep 2019 08:47:56 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:27 +0800
Message-Id: <20190927154727.73734-8-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927154727.73734-1-justin.he@arm.com>
References: <20190927154727.73734-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 7/7] arch/arm64: Reimplement
 ukarch_ffsl with gcc builtin
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VXNpbmcgYnVpbHRpbiBpcyBiZXR0ZXIgYXMgeW91IGNhbiBsZXQgdGhlIEdDQyBmb2xrcyB0byBt
YWludGFpbiB0aGUKZnVuY3Rpb24uCgpJJ3ZlIGNvbXBhcmVkIHRoZSBwZXJmb3JtYW5jZSBiZXR3
ZWVuIG9yaWdpbmFsIGZmc2wgYW5kIGdjYyBidWlsdGluCm9uIGEgVGh1bmRlclgyIGhvc3QoZ2Nj
IHZlcnNpb24gNy40LjApLCBkZWZhdWx0IGdjYyBvcHRpbWl6YXRpb24Kb3B0aW9ucy4KCiBmb3Ig
KHg9MDsgeDwweGZmZmZmZmY7IHgrKykKCiBvcmlnaW5hbDoKIHJlYWwgICAgMG0xLjcyM3MKIHVz
ZXIgICAgMG0xLjcyM3MKIHN5cyAgICAgMG0wLjAwMHMKCiBnY2MgYnVpbHRpbjoKIHJlYWwgICAg
MG0xLjU1MHMKIHVzZXIgICAgMG0xLjU0NnMKIHN5cyAgICAgMG0wLjAwNHMKClNpZ25lZC1vZmYt
Ynk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogYXJjaC9hcm0vYXJtNjQvaW5jbHVk
ZS91ay9hc20vYXRvbWljLmggfCAyNSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg
Y2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9h
cmNoL2FybS9hcm02NC9pbmNsdWRlL3VrL2FzbS9hdG9taWMuaCBiL2FyY2gvYXJtL2FybTY0L2lu
Y2x1ZGUvdWsvYXNtL2F0b21pYy5oCmluZGV4IGZiN2QzYmMuLjAyOWZjMTIgMTAwNjQ0Ci0tLSBh
L2FyY2gvYXJtL2FybTY0L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oCisrKyBiL2FyY2gvYXJtL2Fy
bTY0L2luY2x1ZGUvdWsvYXNtL2F0b21pYy5oCkBAIC02NiwzMCArNjYsOSBAQCBzdGF0aWMgaW5s
aW5lIHVuc2lnbmVkIGludCB1a2FyY2hfZmxzKHVuc2lnbmVkIGludCB4KQogICoKICAqIFVuZGVm
aW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmly
c3QuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB1a2FyY2hfZmZzbCh1bnNpZ25l
ZCBsb25nIHdvcmQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdWthcmNoX2Zmc2wodW5z
aWduZWQgbG9uZyB4KQogewotCWludCBjbHo7Ci0KLQkvKiB4eHh4eDEwMDAwID0gd29yZAotCSAq
IHh4eHh4MDExMTEgPSB3b3JkIC0gMQotCSAqIDAwMDAwMTExMTEgPSB3b3JkIF4gKHdvcmQgLSAx
KQotCSAqICAgICAgNCAgICAgPSA2MyAtIGNseih3b3JkIF4gKHdvcmQgLSAxKSkKLQkgKi8KLQot
CV9fYXNtX18oInN1YiB4MCwgJVt3b3JkXSwgIzFcbiIKLQkJImVvciB4MCwgeDAsICVbd29yZF1c
biIKLQkJImNseiAlW2Nsel0sIHgwXG4iCi0JCToKLQkJLyogT3V0cHV0czogKi8KLQkJW2Nsel0g
Ij1yIihjbHopCi0JCToKLQkJLyogSW5wdXRzOiAqLwotCQlbd29yZF0gInIiKHdvcmQpCi0JCToK
LQkJLyogQ2xvYmJlcnM6ICovCi0JCSJ4MCIpOwotCi0JcmV0dXJuIDYzIC0gY2x6OworCXJldHVy
biBfX2J1aWx0aW5fZmZzbCh4KTsKIH0KIAogLyoqCi0tIAoyLjE3LjEKCgpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBs
aXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy
b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:48:02 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:48:02 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTR-00076h-VR; Fri, 27 Sep 2019 15:48:01 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsTQ-00071s-Nq
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:48:00 +0000
X-Inumbo-ID: 29bf726c-e13e-11e9-bf31-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 29bf726c-e13e-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 15:47:51 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 6979428;
 Fri, 27 Sep 2019 08:47:51 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 065423F534;
 Fri, 27 Sep 2019 08:47:48 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:24 +0800
Message-Id: <20190927154727.73734-5-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927154727.73734-1-justin.he@arm.com>
References: <20190927154727.73734-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 4/7] plat/kvm/arm: Eliminate
 unused parameter warning of intctrl_ack_irq()
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2l0aG91dCB0aGlzIHBhdGNoLCBjb21waWxlciB3aWxsIHJlcG9ydCBhIHdhcm5pbmc6CnBsYXQv
a3ZtL2FybS9pbnRjdHJsLmM6IEluIGZ1bmN0aW9uICdpbnRjdHJsX2Fja19pcnEnOgpwbGF0L2t2
bS9hcm0vaW50Y3RybC5jOjUyOjM1OiB3YXJuaW5nOiB1bnVzZWQgcGFyYW1ldGVyICdpcnEnIFst
V3VudXNlZC1wYXJhbWV0ZXJdCiB2b2lkIGludGN0cmxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJx
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5+fgpTaWduZWQtb2ZmLWJ5OiBK
aWEgSGUgPGp1c3Rpbi5oZUBhcm0uY29tPgotLS0KIHBsYXQva3ZtL2FybS9pbnRjdHJsLmMgfCAz
ICsrLQogMSBmaWxlIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlm
ZiAtLWdpdCBhL3BsYXQva3ZtL2FybS9pbnRjdHJsLmMgYi9wbGF0L2t2bS9hcm0vaW50Y3RybC5j
CmluZGV4IGRiZDdmNzMuLmY2MjUwMjQgMTAwNjQ0Ci0tLSBhL3BsYXQva3ZtL2FybS9pbnRjdHJs
LmMKKysrIGIvcGxhdC9rdm0vYXJtL2ludGN0cmwuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1
ZGUgPGFybS9pcnEuaD4KICNpbmNsdWRlIDxnaWMvZ2ljLXYyLmg+CiAjaW5jbHVkZSA8a3ZtL2Nv
bmZpZy5oPgorI2luY2x1ZGUgPHVrL2Vzc2VudGlhbHMuaD4KIAogdm9pZCBpbnRjdHJsX2luaXQo
dm9pZCkKIHsKQEAgLTQ5LDcgKzUwLDcgQEAgdm9pZCBpbnRjdHJsX2luaXQodm9pZCkKIAogfQog
Ci12b2lkIGludGN0cmxfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQordm9pZCBpbnRjdHJsX2Fj
a19pcnEodW5zaWduZWQgaW50IGlycSBfX3VudXNlZCkKIHsKIAkvL05PUAogfQotLSAKMi4xNy4x
CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 15:48:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 15:48:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDsTX-00078c-0s; Fri, 27 Sep 2019 15:48:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1lQP=XW=arm.com=justin.he@srs-us1.protection.inumbo.net>)
 id 1iDsTV-00077g-Ot
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 15:48:05 +0000
X-Inumbo-ID: 2b2e91aa-e13e-11e9-97fb-bc764e2007e4
Received: from foss.arm.com (unknown [217.140.110.172])
 by localhost (Halon) with ESMTP
 id 2b2e91aa-e13e-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 15:47:54 +0000 (UTC)
Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14])
 by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id BF58C1570;
 Fri, 27 Sep 2019 08:47:53 -0700 (PDT)
Received: from localhost.localdomain (entos-thunderx2-02.shanghai.arm.com
 [10.169.40.54])
 by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id BE81A3F534;
 Fri, 27 Sep 2019 08:47:51 -0700 (PDT)
From: Jia He <justin.he@arm.com>
To: minios-devel@lists.xenproject.org, Simon Kuenzer <simon.kuenzer@neclab.eu>
Date: Fri, 27 Sep 2019 23:47:25 +0800
Message-Id: <20190927154727.73734-6-justin.he@arm.com>
X-Mailer: git-send-email 2.17.1
In-Reply-To: <20190927154727.73734-1-justin.he@arm.com>
References: <20190927154727.73734-1-justin.he@arm.com>
Subject: [Minios-devel] [UNIKRAFT PATCH v3 5/7] plat/common: Add header
 guards to avoid including header file for multiple times
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Felipe Huici <felipe.huici@neclab.eu>, Jia He <justin.he@arm.com>,
 Kaly Xin <Kaly.Xin@arm.com>, Julien Grall <julien.grall@arm.com>,
 Sharan.Santhanam@neclab.eu, Santiago.Pagani@neclab.eu, nd@arm.com
MIME-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyB0byBhZGQgdGhlIGhlYWRlciBndWFyZHMgdG8gYXZvaWQgaW5jbHVkaW5nIGhlYWRl
ciBmaWxlCnBsYXQvY29tbW9uL2luY2x1ZGUvYXJtL2FybTY0L2NwdS5oIGZvciBtdWx0aXBsZSB0
aW1lcy4KClNpZ25lZC1vZmYtYnk6IEppYSBIZSA8anVzdGluLmhlQGFybS5jb20+Ci0tLQogcGxh
dC9jb21tb24vaW5jbHVkZS9hcm0vYXJtNjQvY3B1LmggfCA1ICsrKysrCiAxIGZpbGUgY2hhbmdl
ZCwgNSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvcGxhdC9jb21tb24vaW5jbHVkZS9hcm0v
YXJtNjQvY3B1LmggYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaAppbmRleCAy
M2FkZjhkLi5mZjMzZjdjIDEwMDY0NAotLS0gYS9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02
NC9jcHUuaAorKysgYi9wbGF0L2NvbW1vbi9pbmNsdWRlL2FybS9hcm02NC9jcHUuaApAQCAtMzIs
NiArMzIsOSBAQAogICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQgT1IgTU9ESUZJ
RUQgSU4gQU5ZIFdBWS4KICAqLwogCisjaWZuZGVmIF9fUExBVF9DT01NT05fQVJNNjRfQ1BVX0hf
XworI2RlZmluZSBfX1BMQVRfQ09NTU9OX0FSTTY0X0NQVV9IX18KKwogI2luY2x1ZGUgPGludHR5
cGVzLmg+CiAjaW5jbHVkZSA8dWsvZXNzZW50aWFscy5oPgogI2luY2x1ZGUgPHN3X2N0eC5oPgpA
QCAtMTM2LDMgKzEzOSw1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2luaXRfZXh0cmVncyhz
dHJ1Y3Qgc3dfY3R4ICpjdHgpCiB7CiAJY3R4LT5leHRyZWdzID0gKHVpbnRwdHJfdCljdHggKyBz
aXplb2Yoc3RydWN0IHN3X2N0eCk7CiB9CisKKyNlbmRpZiAvKiBfX1BMQVRfQ09NTU9OX0FSTTY0
X0NQVV9IX18gKi8KLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxp
c3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9s
aXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 16:44:20 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 16:44:20 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDtLv-0005VR-9v; Fri, 27 Sep 2019 16:44:19 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89)
 (envelope-from <SRS0=1vWP=XW=gmail.com=salerio@srs-us1.protection.inumbo.net>)
 id 1iDtLt-0005VM-Kl
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 16:44:17 +0000
X-Inumbo-ID: 0b823890-e146-11e9-97fb-bc764e2007e4
Received: from mail-vs1-xe33.google.com (unknown [2607:f8b0:4864:20::e33])
 by localhost (Halon) with ESMTPS
 id 0b823890-e146-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 16:44:17 +0000 (UTC)
Received: by mail-vs1-xe33.google.com with SMTP id p13so2306226vsr.4
 for <minios-devel@lists.xenproject.org>; Fri, 27 Sep 2019 09:44:16 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;
 h=mime-version:references:in-reply-to:from:date:message-id:subject:to
 :cc; bh=ZNmaiiFpC7j84/j6GhEIwC8TiV86mmE5rTumO6goITI=;
 b=UJDroedsKoDfyHu/bkXS9Wd9MLQdj6mKxatKC0p8ZQmtwAEoLLRQGK53V6GxzXpPkK
 SzOoULYuYJtTG2jvuwdjTmFTNSCx3n1jUXxAQsu7mNc6XUULSrrjz+eKN8JS/Izyt9Cl
 Yc1VO0xm1Oexmf6Jjreajm29fVIGseJvAfysG+bUwnWoXeJDl1OqKHcJoezxngVRDop7
 7jkFLpLJhBqzrXXMSNBq0f9yH6Uq1A6ZJMglvdY+ImJjGvS+Wqsjj0V6BS2eqDAiBSmT
 XsYAQfkMdDCS3f6y/xE+UwFAbUivVLehGIQH1Bb70VDU+qURcVind3E8FTgmZtaCSqkg
 vZBQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:mime-version:references:in-reply-to:from:date
 :message-id:subject:to:cc;
 bh=ZNmaiiFpC7j84/j6GhEIwC8TiV86mmE5rTumO6goITI=;
 b=EE0wQ/S77jxq55o1P9MEW5fSvjdmbTAT36FAv3+XEEJQaPaLLNucug7Nkh8ZecfBwG
 aiOADtrj5K1PnWmil3ommmKpEFFajuejXfA9EldjGKBfQUTciedz5i3EixWFpRwi4VMI
 PqfFNgmMZ5CWWH5tyt/6YLAY7vLHrZI/6945fCRG+pylBQ+NB+aVnOd49lTzQp8+gisk
 RQ4kwcAIQRQgeSNCEXObpCllXa1z+8rswH+A2PhlR1Ou7MxUzmDSDjgL/YYlq7n6VGHm
 OVduIvRgKmW6cpxFKWpESubPRacKc9H/79fr8wVXDeahZBufzzi0hH03i8CfitwBlPsD
 xXkg==
X-Gm-Message-State: APjAAAUTRiQii5It/ilThJMkDEoM3q3wBWzOLa8/Ghr5nHmBcYwN+McY
 bkTgPC/SVcVjgIFoinjCMIXjtKaLY/+cpJroiT2i0Q==
X-Google-Smtp-Source: APXvYqwXTCDEWWl0vXesd3jx/wTW/8niZvJ4yIc5meSr4c2LtLYtRh3boBfI5UrwFChQHvhUAHbpDYbpy9XWkqZnkXQ=
X-Received: by 2002:a67:cf82:: with SMTP id g2mr563979vsm.218.1569602656446;
 Fri, 27 Sep 2019 09:44:16 -0700 (PDT)
MIME-Version: 1.0
References: <CAOx=Z6F1jW2rYntgTuGhFSBBwap3eSSox-ei9xpHdMTvhdWTyA@mail.gmail.com>
 <C6D2FDC2-5555-4946-8DBE-77E295494214@neclab.eu>
In-Reply-To: <C6D2FDC2-5555-4946-8DBE-77E295494214@neclab.eu>
From: Peter Smith <salerio@gmail.com>
Date: Fri, 27 Sep 2019 17:44:05 +0100
Message-ID: <CAOx=Z6E0VQ=ZfVqNqqspfS1OScwjXFbh7QY=ki6fdMHsnLV09g@mail.gmail.com>
To: Felipe Huici <Felipe.Huici@neclab.eu>
Subject: Re: [Minios-devel] Support for Xen platform on aarch64
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "minios-devel@lists.xenproject.org" <minios-devel@lists.xenproject.org>
Content-Type: multipart/mixed; boundary="===============8280413477055114181=="
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

--===============8280413477055114181==
Content-Type: multipart/alternative; boundary="000000000000c6aaa605938b98ca"

--000000000000c6aaa605938b98ca
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

The question about how a Unikraft kernel can be built for ARMv8, I=E2=80=99=
m
interested in running a Unikraft kernel on Xilinx US+ MPSoC (A53) on top on
Xilinx=E2=80=99s Xen.

Peter

On Fri, 27 Sep 2019 at 12:27, Felipe Huici <Felipe.Huici@neclab.eu> wrote:

> Hi Peter,
>
> Are you asking about how to build a minios or Unikraft unikernel/guest fo=
r
> ARM? Or is your question about a Xen installation on an ARM device?
>
> Thanks,
>
> -- Felipe
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> Dr. Felipe Huici
> Chief Researcher, Systems and Machine Learning Group
> NEC Laboratories Europe GmbH
> Kurfuerstenanlage 36, D-69115 Heidelberg
> <https://www.google.com/maps/search/Kurfuerstenanlage+36,+D-69115+Heidelb=
erg?entry=3Dgmail&source=3Dg>
> Tel.  +49
> (0)6221 4342-241
> Fax:  +49
> (0)6221 4342-155
>
> e-mail:
> felipe.huici@neclab.eu
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> Registered at Amtsgericht Mannheim, Germany, HRB728558
>
> =EF=BB=BFOn 26.09.19, 19:28, "Minios-devel on behalf of Peter Smith" <
> minios-devel-bounces@lists.xenproject.org on behalf of salerio@gmail.com>
> wrote:
>
>
>     Newbie question, what needs to be done to create an aarch64 Xen
> platform? It would be great if someone knowledgeable could outline the
> steps required, we are possibly interested in contributing...
>
>
>     Best Regards
>     Peter
>
>
>
>
>
>
> --
Best Regards
Peter

--000000000000c6aaa605938b98ca
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div><div dir=3D"auto">The question about how a Unikraft kernel can be buil=
t for ARMv8, I=E2=80=99m interested in running a Unikraft kernel on Xilinx =
US+ MPSoC (A53) on top on Xilinx=E2=80=99s Xen.=C2=A0</div></div><div dir=
=3D"auto"><br></div><div dir=3D"auto">Peter</div><div><br><div class=3D"gma=
il_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, 27 Sep 2019 at 12:2=
7, Felipe Huici &lt;<a href=3D"mailto:Felipe.Huici@neclab.eu">Felipe.Huici@=
neclab.eu</a>&gt; wrote:<br></div><blockquote class=3D"gmail_quote" style=
=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Peter=
,<br>
<br>
Are you asking about how to build a minios or Unikraft unikernel/guest for =
ARM? Or is your question about a Xen installation on an ARM device?<br>
<br>
Thanks,<br>
<br>
-- Felipe<br>
<br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
Dr. Felipe Huici<br>
Chief Researcher, Systems and Machine Learning Group<br>
NEC Laboratories Europe GmbH<br>
<a href=3D"https://www.google.com/maps/search/Kurfuerstenanlage+36,+D-69115=
+Heidelberg?entry=3Dgmail&amp;source=3Dg">Kurfuerstenanlage 36, D-69115 Hei=
delberg</a><br>
Tel.=C2=A0 +49<br>
(0)6221 4342-241<br>
Fax:=C2=A0 +49<br>
(0)6221 4342-155<br>
<br>
e-mail:<br>
<a href=3D"mailto:felipe.huici@neclab.eu" target=3D"_blank">felipe.huici@ne=
clab.eu</a><br>
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br>
Registered at Amtsgericht Mannheim, Germany, HRB728558<br>
<br>
=EF=BB=BFOn 26.09.19, 19:28, &quot;Minios-devel on behalf of Peter Smith&qu=
ot; &lt;<a href=3D"mailto:minios-devel-bounces@lists.xenproject.org" target=
=3D"_blank">minios-devel-bounces@lists.xenproject.org</a> on behalf of <a h=
ref=3D"mailto:salerio@gmail.com" target=3D"_blank">salerio@gmail.com</a>&gt=
; wrote:<br>
<br>
<br>
=C2=A0 =C2=A0 Newbie question, what needs to be done to create an aarch64 X=
en platform? It would be great if someone knowledgeable could outline the s=
teps required, we are possibly interested in contributing...<br>
<br>
<br>
=C2=A0 =C2=A0 Best Regards<br>
=C2=A0 =C2=A0 Peter<br>
<br>
<br>
<br>
<br>
<br>
<br>
</blockquote></div></div>-- <br><div dir=3D"ltr" class=3D"gmail_signature" =
data-smartmail=3D"gmail_signature"><div dir=3D"ltr">Best Regards<div>Peter<=
/div></div></div>

--000000000000c6aaa605938b98ca--


--===============8280413477055114181==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: inline

X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

--===============8280413477055114181==--


From minios-devel-bounces@lists.xenproject.org Fri Sep 27 16:59:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 16:59:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDtaP-0006o1-Da; Fri, 27 Sep 2019 16:59:17 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ERjp=XW=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iDtaN-0006nw-L4
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 16:59:15 +0000
X-Inumbo-ID: 2121c510-e148-11e9-967f-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 2121c510-e148-11e9-967f-12813bfff9fa;
 Fri, 27 Sep 2019 16:59:13 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id C0B2FF200A;
 Fri, 27 Sep 2019 18:59:11 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id PyaQB1-tcXzt; Fri, 27 Sep 2019 18:59:11 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 7E249F2006
 for <minios-devel@lists.xenproject.org>; Fri, 27 Sep 2019 18:59:09 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 18:59:09 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-4-simon.kuenzer@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <44f7632b-fa75-45f0-13b6-77156d8f7518@neclab.eu>
Date: Fri, 27 Sep 2019 18:59:08 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190924100716.3462-4-simon.kuenzer@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 3/5] lib/vfscore: Automount
 option
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gU2ltb24sCgpUaGUgcGF0Y2ggc2VlbXMgdG8gZnVuY3Rpb25hbGx5IGNvcnJlY3QgYnV0
IHRoZXJlIHNlZW1zIHRvIHByb2JsZW0gaW4gCnRoZSBkaXNwbGF5IG9mIFJhbWZzIGNvbmZpZyBv
cHRpb25zLiBTaW5jZSB0aGUgUkFNRlMgY29uZmlnIGRlcGVuZHMgb24gCnRoZSBMSUJWRlNDT1JF
IGFuZCB0aGUgTElCVkZTQ09SRSBpcyBhIG1lbnVjb25maWcsIHRoZSBSQU1GUyAKY29uZmlndXJh
dGlvbiBpcyBzdWNrZWQgaW4gYXMgYSBvcHRpb24gd2l0aGluIExJQlZGU0NPUkUgbWVudWNvbmZp
Zy4gClRoaXMgYmVoYXZpb3Igb2YgUkFNRlMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGJlaGF2aW9y
IG9mIHRoZSByZXN0IG9mIHRoZSAKZmlsZXN5c3RlbSBsaWtlIDlQcyBhbmQgZGV2ZnMuCgpNeSBz
dWdnZXN0aW9uIHdvdWxkIGJlIHRvIGNvbnZlcnQgdGhlIG1lbnVjb25maWcgdG8gbWVudSBhcyB0
aGVyZSBpcyAKZGVmaW5pdGUgd2F5IG9mIGRlZmluaW5nIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRo
ZSBtZW51LiBUaGUgYW5ub3lhbmNlIAp3aXRoIHRoaXMgb3B0aW9uIHdvdWxkIGJlIGl0IGNyZWF0
ZXMgYSBzZXBhcmF0ZSBwcm9tcHQuCgpBIHNuaXBwZXQgb2YgaG93IEkgd291bGQgcmVzdHJ1Y3R1
cmUgaXQuCgogwqBjb25maWcgTElCVkZTQ09SRQogwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgInZm
c2NvcmU6IFZGUyBDb3JlIEludGVyZmFjZSIKIMKgwqDCoMKgwqDCoMKgwqDCoCBkZWZhdWx0IG4K
IMKgwqDCoMKgwqDCoMKgwqDCoCBzZWxlY3QgTElCTk9MSUJDIGlmICFIQVZFX0xJQkMKIMKgwqDC
oMKgwqDCoMKgwqDCoCBzZWxlY3QgTElCVUtERUJVRwogwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGVj
dCBMSUJVS0xPQ0sKCm1lbnUgIlZGUyBPcHRpb25zIgogwqDCoMKgwqDCoMKgwqDCoCB2aXNpYmxl
IGlmIExJQlZGU0NPUkUKCiDCoMKgwqDCoCAjIFdlIGNhbiBhZGQgdmZzY29yZSBvcHRpb25zIGhl
cmUKCmVuZG1lbnUKCkkgb2JzZXJ2ZWQgdGhlcmUgYXJlIGFsc28gY2hlY2twYXRjaCBlcnJvci4K
ClRoYW5rcyAmIFJlZ2FyZHMKClNoYXJhbgoKT24gOS8yNC8xOSAxMjowNyBQTSwgU2ltb24gS3Vl
bnplciB3cm90ZToKPiBNb3ZlcyB0aGUgb3B0aW9uIG9mIGF1dG9tYXRpY2FsbHkgYSByb290ZnMg
dG8gbGliL3Zmc2NvcmUuIFRoaXMKPiBmZWF0dXJlIGlzIG5vdCBvbmx5IHVzZWZ1bCBmb3IgaW5p
dGlhbGl6aW5nIGRldmZzLiBMaWJyYXJ5IHBhcmFtZXRlcnMKPiB0byBpbmZsdWVuY2UgdGhlIGRl
ZmF1bHQgc2V0dGluZ3MgYXJlIHByb3ZpZGVkLgo+Cj4gU2lnbmVkLW9mZi1ieTogU2ltb24gS3Vl
bnplciA8c2ltb24ua3VlbnplckBuZWNsYWIuZXU+Cj4gLS0tCj4gICBsaWIvZGV2ZnMvQ29uZmln
LnVrICAgICB8ICA5ICsrLS0KPiAgIGxpYi9kZXZmcy9kZXZmc192bm9wcy5jIHwgIDggKy0tLQo+
ICAgbGliL3Zmc2NvcmUvQ29uZmlnLnVrICAgfCA3NiArKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwo+ICAgbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsgfCAgNSArKysKPiAgIGxpYi92ZnNj
b3JlL3Jvb3Rmcy5jICAgIHwgOTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysKPiAgIDUgZmlsZXMgY2hhbmdlZCwgMTg0IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9u
cygtKQo+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi92ZnNjb3JlL3Jvb3Rmcy5jCj4KPiBkaWZm
IC0tZ2l0IGEvbGliL2RldmZzL0NvbmZpZy51ayBiL2xpYi9kZXZmcy9Db25maWcudWsKPiBpbmRl
eCBlMzhhNjE2ZS4uNmYyMWMwMWMgMTAwNjQ0Cj4gLS0tIGEvbGliL2RldmZzL0NvbmZpZy51awo+
ICsrKyBiL2xpYi9kZXZmcy9Db25maWcudWsKPiBAQCAtMSwxMCArMSwxMSBAQAo+IC1jb25maWcg
TElCREVWRlMKPiArbWVudWNvbmZpZyBMSUJERVZGUwo+ICAgCWJvb2wgImRldmZzOiBkZXZmcyBm
aWxlIHN5c3RlbSIKPiAgIAlkZWZhdWx0IG4KPiAgIAlkZXBlbmRzIG9uIExJQlZGU0NPUkUKPiAr
Cj4gICBpZiBMSUJERVZGUwo+IC0gICAgICAgIGNvbmZpZyBMSUJERVZGU19VU0VfUkFNRlMKPiAt
ICAgICAgICBib29sICJVc2UgcmFtZnMgYXMgcm9vdCIKPiArCWNvbmZpZyBMSUJERVZGU19BVVRP
TU9VTlQKPiArICAgICAgICBib29sICJNb3VudCAvZGV2IGR1cmluZyBib290Igo+ICsJZGVwZW5k
cyBvbiBMSUJWRlNDT1JFX0FVVE9NT1VOVF9ST09URlMKPiAgICAgICAgICAgZGVmYXVsdCBuCj4g
LSAgICAgICAgc2VsZWN0IExJQlJBTUZTCj4gICBlbmRpZgo+IGRpZmYgLS1naXQgYS9saWIvZGV2
ZnMvZGV2ZnNfdm5vcHMuYyBiL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jCj4gaW5kZXggMTFhM2Vh
MDUuLmQ4NzJlNjIyIDEwMDY0NAo+IC0tLSBhL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jCj4gKysr
IGIvbGliL2RldmZzL2RldmZzX3Zub3BzLmMKPiBAQCAtMzEyLDE1ICszMTIsOSBAQCBVS19GU19S
RUdJU1RFUihmc19kZXZmcyk7Cj4gICAKPiAgIF9fY29uc3RydWN0b3JfcHJpbygxMDEpIHN0YXRp
YyB2b2lkIGRldmZzX2luaXQodm9pZCkKPiAgIHsKPiAtI2lmZGVmIENPTkZJR19MSUJERVZGU19V
U0VfUkFNRlMKPiArI2lmZGVmIENPTkZJR19MSUJERVZGU19BVVRPTU9VTlQKPiAgIAlpbnQgcmV0
Owo+ICAgCj4gLQlyZXQgPSBtb3VudCgiIiwgIi8iLCAicmFtZnMiLCAwLCBOVUxMKTsKPiAtCWlm
IChyZXQgIT0gMCkgewo+IC0JCXVrX3ByX2RlYnVnKCJGYWlsZWQgdG8gbW91bnQgLyBpbiAlc1xu
IiwgX19mdW5jX18pOwo+IC0JCXJldHVybjsKPiAtCX0KPiAtCj4gICAJcmV0ID0gIG1rZGlyKCIv
ZGV2IiwgU19JUldYVSk7Cj4gICAJaWYgKHJldCAhPSAwKSB7Cj4gICAJCXVrX3ByX2RlYnVnKCJG
YWlsZWQgdG8gbWtkaXIgL2RldiBpbiAlc1xuIiwgX19mdW5jX18pOwo+IGRpZmYgLS1naXQgYS9s
aWIvdmZzY29yZS9Db25maWcudWsgYi9saWIvdmZzY29yZS9Db25maWcudWsKPiBpbmRleCA1ZGVi
N2QwNC4uMTZmZmUwNDMgMTAwNjQ0Cj4gLS0tIGEvbGliL3Zmc2NvcmUvQ29uZmlnLnVrCj4gKysr
IGIvbGliL3Zmc2NvcmUvQ29uZmlnLnVrCj4gQEAgLTEzLDQgKzEzLDgwIEBAIGNvbmZpZyBMSUJW
RlNDT1JFX1BJUEVfU0laRV9PUkRFUgo+ICAgCWhlbHAKPiAgIAkJVGhlIHNpemUgb2YgdGhlIGlu
dGVybmFsIGJ1ZmZlciBmb3IgYW5vbnltb3VzIHBpcGVzIGlzIDJeb3JkZXIuCj4gICAKPiArbWVu
dWNvbmZpZyBMSUJWRlNDT1JFX0FVVE9NT1VOVF9ST09URlMKPiArYm9vbCAiQXV0b21hdGljYWx5
IG1vdW50IGEgcm9vdCBmaWxlc3lzeXRlbSAoLykiCj4gK2RlZmF1bHQgbgo+ICtoZWxwCj4gKwlB
dXRvbWF0aWNhbGx5IG1vdW50cyAnLycgZHVyaW5nIGJvb3QuIElmIGBsaWJ1a2xpYnBhcmFtYCBp
cwo+ICsJY29tcGlsZWQgaW4sIHRoZSBkZWZhdWx0IHJvb3QgZmlsZXN5c3RlbSBhbmQgbW91bnQg
b3B0aW9ucyBjYW4KPiArCWJlIGNoYW5nZWQgd2l0aCB0aGUgZm9sbG93aW5nIGxpYnJhcnkgcGFy
YW1ldGVyczoKPiArCSd2ZnMucm9vdGZzJywgJ3Zmcy5yb290ZGV2JywgJ3Zmcy5yb290ZmxhZ3Mn
LCBhbmQgJ3Zmcy5yb290b3B0cycKPiArCj4gK2lmIExJQlZGU0NPUkVfQVVUT01PVU5UX1JPT1RG
Uwo+ICsJY2hvaWNlIExJQlZGU0NPUkVfUk9PVEZTCj4gKwlwcm9tcHQgIkRlZmF1bHQgcm9vdCBm
aWxlc3lzdGVtIgo+ICsJZGVmYXVsdCBMSUJWRlNDT1JFX1JPT1RGU19SQU1GUwo+ICsKPiArCQlj
b25maWcgTElCVkZTQ09SRV9ST09URlNfUkFNRlMKPiArCQlib29sICJSYW1GUyIKPiArCQlzZWxl
Y3QgTElCUkFNRlMKPiArCj4gKwkJY29uZmlnIExJQlZGU0NPUkVfUk9PVEZTXzlQRlMKPiArCQli
b29sICI5UEZTIgo+ICsJCXNlbGVjdCBMSUJVSzlQCj4gKwkJc2VsZWN0IExJQjlQRlMKPiArCj4g
KwkJY29uZmlnIExJQlZGU0NPUkVfUk9PVEZTX0NVU1RPTQo+ICsJCWJvb2wgIkN1c3RvbSBhcmd1
bWVudCIKPiArCQloZWxwCj4gKwkJCVBsZWFzZSBzZXQgTElCVkZTQ09SRV9ST09URlNfQ1VTVE9N
X0FSRwo+ICsJCQl0byBhIGZpbGVzeXN0ZW0gbmFtZSB0aGF0IHNob3VsZCBiZSB1c2VkCj4gKwkJ
CWFzIGRlZmF1bHQuCj4gKwllbmRjaG9pY2UKPiArCj4gKwljb25maWcgTElCVkZTQ09SRV9ST09U
RlNfQ1VTVE9NX0FSRwo+ICsJc3RyaW5nICJEZWZhdWx0IGN1c3RvbSByb290IGZpbGVzeXN0ZW0i
Cj4gKwlkZWZhdWx0ICIiCj4gKwlkZXBlbmRzIG9uIExJQlZGU0NPUkVfUk9PVEZTX0NVU1RPTQo+
ICsJaGVscAo+ICsJCUN1c3RvbSBuYW1lIG9mIGEgZmlsZXN5c3RlbSB0byBtb3VudCAoZS5nLiwg
cmFtZnMsCj4gKwkJOXBmcykuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZpZWQgZmlsZXN5c3Rl
bQo+ICsJCWlzIGF2YWlsYWJsZSBmb3IgbGlidmZzY29yZS4KPiArCj4gKwkjIEhpZGRlbiBjb25m
aWd1cmF0aW9uIG9wdGlvbiB0aGF0IGdldHMgYXV0b21hdGljYWxseSBmaWxsZWQKPiArCSMgd2l0
aCB0aGUgc2VsZWN0ZWQgZmlsZXN5c3RlbSBuYW1lCj4gKwljb25maWcgTElCVkZTQ09SRV9ST09U
RlMKPiArCXN0cmluZwo+ICsJZGVmYXVsdCAicmFtZnMiIGlmIExJQlZGU0NPUkVfUk9PVEZTX1JB
TUZTCj4gKwlkZWZhdWx0ICI5cGZzIiBpZiBMSUJWRlNDT1JFX1JPT1RGU185UEZTCj4gKwlkZWZh
dWx0IExJQlZGU0NPUkVfUk9PVEZTX0NVU1RPTV9BUkcgaWYgTElCVkZTQ09SRV9ST09URlNfQ1VT
VE9NCj4gKwlkZWZhdWx0ICIiCj4gKwo+ICsJIyBUaGUgcm9vdCBkZXZpY2Ugb3B0aW9uIGlzIGhp
ZGRlbiBmb3IgUmFtRlMgYW5kIDlQRlMKPiArCWNvbmZpZyBMSUJWRlNDT1JFX1JPT1RERVYKPiAr
CXN0cmluZyAiRGVmYXVsdCByb290IGRldmljZSIKPiArCWRlcGVuZHMgb24gIUxJQlZGU0NPUkVf
Uk9PVEZTX1JBTUZTICYmICFMSUJWRlNDT1JFX1JPT1RGU185UEZTCj4gKwlkZWZhdWx0ICIiCj4g
KwloZWxwCj4gKwkJRGV2aWNlIHRvIG1vdW50IHRoZSBmaWxlc3lzdGVtIGZyb20uIERlcGVuZGlu
ZyBvbiB0aGUKPiArCQlzZWxlY3RlZCBmaWxlc3lzdGVtLCB0aGlzIG9wdGlvbiBtYXkgbm90IGJl
IHJlcXVpcmVkLgo+ICsKPiArCSMgVGhlIHJvb3QgZmxhZ3MgaXMgaGlkZGVuIGZvciBSYW1GUwo+
ICsJY29uZmlnIExJQlZGU0NPUkVfUk9PVEZMQUdTCj4gKwloZXggIkRlZmF1bHQgcm9vdCBtb3Vu
dCBmbGFncyIKPiArCWRlcGVuZHMgb24gIUxJQlZGU0NPUkVfUk9PVEZTX1JBTUZTCj4gKwlkZWZh
dWx0IDB4MAo+ICsJaGVscAo+ICsJCU1vdW50IGZsYWdzLgo+ICsKPiArCSMgVGhlIHJvb3Qgb3B0
aW9ucyBhcmUgaGlkZGVuIGZvciBSYW1GUwo+ICsJY29uZmlnIExJQlZGU0NPUkVfUk9PVE9QVFMK
PiArCXN0cmluZyAiRGVmYXVsdCByb290IG1vdW50IG9wdGlvbnMiCj4gKwlkZXBlbmRzIG9uICFM
SUJWRlNDT1JFX1JPT1RGU19SQU1GUwo+ICsJZGVmYXVsdCAiIgo+ICsJaGVscAo+ICsJCVVzdWFs
bHkgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBhZGRpdGlvbmFsIG1vdW50Cj4gKwkJb3B0aW9u
cyB0aGF0IGFyZSBkaXJlY3RseSBpbnRlcnByZXRlZCBieSB0aGUgdGFyZ2V0Cj4gKwkJZmlsZXN5
c3RlbS4KPiArZW5kaWYKPiAgIGVuZGlmCj4gZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL01ha2Vm
aWxlLnVrIGIvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKPiBpbmRleCAxZTVmYzExNC4uODcyNjk2
MDYgMTAwNjQ0Cj4gLS0tIGEvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKPiArKysgYi9saWIvdmZz
Y29yZS9NYWtlZmlsZS51awo+IEBAIC0xLDUgKzEsOCBAQAo+ICAgJChldmFsICQoY2FsbCBhZGRs
aWJfcyxsaWJ2ZnNjb3JlLCQoQ09ORklHX0xJQlZGU0NPUkUpKSkKPiAgIAo+ICsjIFJlZ2lzdGVy
IHRvIHVrbGlicGFyYW0sIHNldHMgInZmcyIgYXMgcGFyYW1ldGVyIHByZWZpeCAodmZzLiopCj4g
KyQoZXZhbCAkKGNhbGwgYWRkbGliX3BhcmFtcHJlZml4LGxpYnZmc2NvcmUsdmZzKSkKPiArCj4g
ICBDSU5DTFVERVMteSArPSAtSSQoTElCVkZTQ09SRV9CQVNFKS9pbmNsdWRlCj4gICAKPiAgIExJ
QlZGU0NPUkVfQ0ZMQUdTLSQoY2FsbCBnY2NfdmVyc2lvbl9nZSw4LDApICs9IC1Xbm8tY2FzdC1m
dW5jdGlvbi10eXBlCj4gQEAgLTE5LDYgKzIyLDggQEAgTElCVkZTQ09SRV9TUkNTLXkgKz0gJChM
SUJWRlNDT1JFX0JBU0UpL3N1YnJfdWlvLmMKPiAgIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElC
VkZTQ09SRV9CQVNFKS9waXBlLmMKPiAgIExJQlZGU0NPUkVfUElQRV9GTEFHUy15ICs9IC1Xbm8t
Y2FzdC1mdW5jdGlvbi10eXBlCj4gICBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVf
QkFTRSkvZXh0cmEubGQKPiArTElCVkZTQ09SRV9TUkNTLSQoQ09ORklHX0xJQlZGU0NPUkVfQVVU
T01PVU5UX1JPT1RGUykgKz0gXAo+ICsJJChMSUJWRlNDT1JFX0JBU0UpL3Jvb3Rmcy5jCj4gICAK
PiAgIAo+ICAgVUtfUFJPVklERURfU1lTQ0FMTFMtJChDT05GSUdfTElCVkZTQ09SRSkgKz0gd3Jp
dGV2LTMKPiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvcm9vdGZzLmMgYi9saWIvdmZzY29yZS9y
b290ZnMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAuLmVlM2NmZjgw
Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi92ZnNjb3JlL3Jvb3Rmcy5jCj4gQEAgLTAsMCAr
MSw5NyBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4g
Ky8qCj4gKyAqIE1vdW50IFZGUyByb290Cj4gKyAqCj4gKyAqIEF1dGhvcnM6IFNpbW9uIEt1ZW56
ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1Pgo+ICsgKgo+ICsgKgo+ICsgKiBDb3B5cmlnaHQg
KGMpIDIwMTksIE5FQyBMYWJvcmF0b3JpZXMgRXVyb3BlIEdtYkgsIE5FQyBDb3Jwb3JhdGlvbi4K
PiArICogICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgo+ICsgKgo+ICsg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKPiArICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCj4gKyAqIGFyZSBtZXQ6Cj4gKyAqCj4gKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Cj4gKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KPiArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKPiArICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQo+ICsgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgo+ICsgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBj
b3B5cmlnaHQgaG9sZGVyIG5vciB0aGUgbmFtZXMgb2YgaXRzCj4gKyAqICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Cj4gKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCj4gKyAqCj4gKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgo+ICsgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCj4gKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCj4gKyAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKPiAr
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgo+ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgo+ICsgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKPiAr
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KPiArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKPiArICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUKPiArICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCj4gKyAqCj4gKyAqIFRISVMg
SEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCj4gKyAq
Lwo+ICsjaW5jbHVkZSA8ZXJybm8uaD4KPiArI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgo+ICsjaW5j
bHVkZSA8dWsvYXJjaC90eXBlcy5oPgo+ICsjaW5jbHVkZSA8dWsvbGlicGFyYW0uaD4KPiArI2lu
Y2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KPiArI2luY2x1ZGUg
PHVrL2luaXQuaD4KPiArCj4gK3N0YXRpYyBjb25zdCBjaGFyICpyb290ZnMgICA9IENPTkZJR19M
SUJWRlNDT1JFX1JPT1RGUzsKPiArCj4gKyNpZm5kZWYgQ09ORklHX0xJQlZGU0NPUkVfUk9PVERF
Vgo+ICtzdGF0aWMgY29uc3QgY2hhciAqcm9vdGRldiAgPSAiIjsKPiArI2Vsc2UKPiArc3RhdGlj
IGNvbnN0IGNoYXIgKnJvb3RkZXYgID0gQ09ORklHX0xJQlZGU0NPUkVfUk9PVERFVjsKPiArI2Vu
ZGlmCj4gKwo+ICsjaWZuZGVmIENPTkZJR19MSUJWRlNDT1JFX1JPT1RPUFRTCj4gK3N0YXRpYyBj
b25zdCBjaGFyICpyb290b3B0cyA9ICIiOwo+ICsjZWxzZQo+ICtzdGF0aWMgY29uc3QgY2hhciAq
cm9vdG9wdHMgPSBDT05GSUdfTElCVkZTQ09SRV9ST09UT1BUUzsKPiArI2VuZGlmCj4gKwo+ICsj
aWZuZGVmIENPTkZJR19MSUJWRlNDT1JFX1JPT1RGTEFHUwo+ICtzdGF0aWMgX191NjQgcm9vdGZs
YWdzICAgICAgPSAweDA7Cj4gKyNlbHNlCj4gK3N0YXRpYyBfX3U2NCByb290ZmxhZ3MgICAgICA9
IChfX3U2NCkgQ09ORklHX0xJQlZGU0NPUkVfUk9PVEZMQUdTOwo+ICsjZW5kaWYKPiArCj4gK1VL
X0xJQl9QQVJBTV9TVFIocm9vdGZzKTsKPiArVUtfTElCX1BBUkFNX1NUUihyb290ZGV2KTsKPiAr
VUtfTElCX1BBUkFNX1NUUihyb290b3B0cyk7Cj4gK1VLX0xJQl9QQVJBTShyb290ZmxhZ3MsIF9f
dTY0KTsKPiArCj4gK3N0YXRpYyBpbnQgdmZzY29yZV9yb290ZnModm9pZCkKPiArewo+ICsJLyoK
PiArCSAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSByb290IGZpbGVzeXN0ZW0gJy8nCj4gKwkgKiBO
T1RFOiBBbnkgYWRkaXRpb25hbCBzdWIgbW91bnQgcG9pbnRzIChsaWtlICcvZGV2JyB3aXRoIGRl
dmZzKQo+ICsJICogaGF2ZSB0byBiZSBtb3VudGVkIGxhdGVyLgo+ICsJICovCj4gKwlpZiAoIXJv
b3RmcyB8fCByb290ZnNbMF0gPT0gJ1wwJykgewo+ICsJCXVrX3ByX2NyaXQoIlBhcmFtZXRlciAn
dmZzLnJvb3RmcycgaXMgaW52YWxpZFxuIik7Cj4gKwkJcmV0dXJuIC0xOwo+ICsJfQo+ICsKPiAr
CXVrX3ByX2luZm8oIk1vdW50ICVzIHRvIC8uLi5cbiIsIHJvb3Rmcyk7Cj4gKwlpZiAobW91bnQo
cm9vdGRldiwgIi8iLCByb290ZnMsIHJvb3RmbGFncywgcm9vdG9wdHMpICE9IDApIHsKPiArCQl1
a19wcl9jcml0KCJGYWlsZWQgdG8gbW91bnQgLzogJWRcbiIsIGVycm5vKTsKPiArCQlyZXR1cm4g
LTE7Cj4gKwl9Cj4gKwo+ICsJLyoKPiArCSAqIFRPRE86IEFsdGVybmF0aXZlbHkgd2UgY291bGQg
ZXh0cmFjdCBhbiBhcmNoaXZlIGZvdW5kCj4gKwkgKiBhcyBpbml0cmQgdG8gYSByYW1mcyAnLycg
aWYgd2UgaGF2ZSBnb3QgZnNuYW1lICdpbml0cmQnCj4gKwkgKi8KPiArCj4gKwlyZXR1cm4gMDsK
PiArfQo+ICsKPiArdWtfcm9vdGZzX2luaXRjYWxsX3ByaW8odmZzY29yZV9yb290ZnMsIDApOwoK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRl
dmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6
Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 17:00:36 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 17:00:36 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDtbg-0007Rb-J1; Fri, 27 Sep 2019 17:00:36 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ERjp=XW=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iDtbf-0007RW-0N
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 17:00:35 +0000
X-Inumbo-ID: 517e3f36-e148-11e9-967f-12813bfff9fa
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 517e3f36-e148-11e9-967f-12813bfff9fa;
 Fri, 27 Sep 2019 17:00:34 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 03AAA105740;
 Fri, 27 Sep 2019 19:00:33 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id OHmPek_Q5f8T; Fri, 27 Sep 2019 19:00:32 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id D64BD10573D
 for <minios-devel@lists.xenproject.org>; Fri, 27 Sep 2019 19:00:32 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 19:00:32 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-5-simon.kuenzer@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <de345b50-8193-5962-ac74-d9a0c23a576e@neclab.eu>
Date: Fri, 27 Sep 2019 19:00:32 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190924100716.3462-5-simon.kuenzer@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 4/5] lib/devfs: Automount
 through inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gU2ltb24sCgpQbGVhc2UgZmluZCB0aGUgY29tbWVudCBpbmxpbmUuCgpUaGFua3MgJiBS
ZWdhcmRzClNoYXJhbgoKT24gOS8yNC8xOSAxMjowNyBQTSwgU2ltb24gS3VlbnplciB3cm90ZToK
PiBUaGUgYXV0b21vdW50IG9wdGlvbiBvZiBkZXZmcyB0byBgL2RldmAgaXMgbW92ZWQgdG8gYW4g
aW5pdHRhYiBlbnRyeS4KPgo+IFNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1ZW56ZXIgPHNpbW9uLmt1
ZW56ZXJAbmVjbGFiLmV1Pgo+IC0tLQo+ICAgbGliL2RldmZzL2RldmZzX3Zub3BzLmMgICAgICAg
ICAgfCAyOSArKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQo+ICAgbGliL2RldmZzL2luY2x1
ZGUvZGV2ZnMvZGV2aWNlLmggfCAgMyArKysKPiAgIDIgZmlsZXMgY2hhbmdlZCwgMjMgaW5zZXJ0
aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9saWIvZGV2ZnMvZGV2ZnNf
dm5vcHMuYyBiL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jCj4gaW5kZXggZDg3MmU2MjIuLjI3OGEx
YTYxIDEwMDY0NAo+IC0tLSBhL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jCj4gKysrIGIvbGliL2Rl
dmZzL2RldmZzX3Zub3BzLmMKPiBAQCAtNTksNyArNTksOCBAQAo+ICAgCj4gICAjaW5jbHVkZSA8
dmZzY29yZS9mcy5oPgo+ICAgCj4gLSNpbmNsdWRlIDx1ay9jdG9ycy5oPgo+ICsjaW5jbHVkZSA8
dWsvaW5pdC5oPgo+ICsjaW5jbHVkZSA8dWsvcHJpbnQuaD4KPiAgIAo+ICAgI2luY2x1ZGUgImRl
dmZzLmgiCj4gICAjaW5jbHVkZSA8ZGV2ZnMvZGV2aWNlLmg+Cj4gQEAgLTMxMCwyMSArMzExLDMx
IEBAIHN0YXRpYyBzdHJ1Y3QgdmZzY29yZV9mc190eXBlIGZzX2RldmZzID0gewo+ICAgCj4gICBV
S19GU19SRUdJU1RFUihmc19kZXZmcyk7Cj4gICAKPiAtX19jb25zdHJ1Y3Rvcl9wcmlvKDEwMSkg
c3RhdGljIHZvaWQgZGV2ZnNfaW5pdCh2b2lkKQo+IC17Cj4gICAjaWZkZWYgQ09ORklHX0xJQkRF
VkZTX0FVVE9NT1VOVAo+ICtzdGF0aWMgaW50IGRldmZzX2F1dG9tb3VudCh2b2lkKQo+ICt7Cj4g
ICAJaW50IHJldDsKPiAgIAo+ICsJdWtfcHJfaW5mbygiTW91bnQgZGV2ZnMgdG8gL2Rldi4uLiIp
Owo+ICsKPiArCS8qCj4gKwkgKiBUcnkgdG8gY3JlYXRlIHRhcmdldCBtb3VudHBvaW50IGAvZGV2
YC4gSWYgY3JlYXRpb24gZmFpbHMKPiArCSAqIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMsIHdl
IGFyZSBjb250aW51aW5nLgo+ICsJICovCj4gICAJcmV0ID0gIG1rZGlyKCIvZGV2IiwgU19JUldY
VSk7Cj4gLQlpZiAocmV0ICE9IDApIHsKPiAtCQl1a19wcl9kZWJ1ZygiRmFpbGVkIHRvIG1rZGly
IC9kZXYgaW4gJXNcbiIsIF9fZnVuY19fKTsKPiAtCQlyZXR1cm47Cj4gKwlpZiAocmV0ICE9IDAg
JiYgZXJybm8gIT0gRUVYSVNUKSB7Cj4gKwkJdWtfcHJfZXJyKCJGYWlsZWQgdG8gY3JlYXRlIC9k
ZXY6ICVkXG4iLCBlcnJubyk7Cj4gKwkJcmV0dXJuIC0xOwo+ICAgCX0KPiAgIAo+ICAgCXJldCA9
IG1vdW50KCIiLCAiL2RldiIsICJkZXZmcyIsIDAsIE5VTEwpOwo+ICAgCWlmIChyZXQgIT0gMCkg
ewo+IC0JCXVrX3ByX2RlYnVnKCJGYWlsZWQgdG8gbW91bnQgL2RldiBhcyBkZXZmcyBpbiAlc1xu
IiwgX19mdW5jX18pOwo+IC0JCXJldHVybjsKPiArCQl1a19wcl9lcnIoIkZhaWxlZCB0byBtb3Vu
dCBkZXZmcyB0byAvZGV2OiAlZFxuIiwgZXJybm8pOwo+ICsJCXJldHVybiAtMTsKPiAgIAl9Cj4g
LSNlbmRpZgo+ICsKPiArCXJldHVybiAwOwo+ICAgfQo+ICsKPiArdWtfcm9vdGZzX2luaXRjYWxs
X3ByaW8oZGV2ZnNfYXV0b21vdW50LCAxKTsKPiArI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2xpYi9k
ZXZmcy9pbmNsdWRlL2RldmZzL2RldmljZS5oIGIvbGliL2RldmZzL2luY2x1ZGUvZGV2ZnMvZGV2
aWNlLmgKPiBpbmRleCAyOTg4OWU0ZS4uNTY5ZWY2MGIgMTAwNjQ0Cj4gLS0tIGEvbGliL2RldmZz
L2luY2x1ZGUvZGV2ZnMvZGV2aWNlLmgKPiArKysgYi9saWIvZGV2ZnMvaW5jbHVkZS9kZXZmcy9k
ZXZpY2UuaAo+IEBAIC0zNCw2ICszNCw3IEBACj4gICAjZGVmaW5lIF9ERVZJQ0VfSAo+ICAgCj4g
ICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDx1ay9pbml0Lmg+Cj4gICAKPiAg
ICNpbmNsdWRlIDx2ZnNjb3JlL3Vpby5oPgo+ICAgCj4gQEAgLTIwOCw0ICsyMDksNiBAQCBpbnQg
ZGV2aWNlX2Rlc3Ryb3lfbG9ja2VkKHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gICB2b2lkIGRldmlj
ZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBm
bGFncyk7Cj4gICB2b2lkIHJlYWRfcGFydGl0aW9uX3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldmlj
ZSk7Cj4gICAKPiArI2RlZmluZSBkZXZmc19pbml0Y2FsbChmbikgdWtfbGliX2luaXRjYWxsKGZu
KQpXaHkgZG8gd2UgbmVlZCB0aGlzPyBXZSBjb3VsZCBhZGQgZG9jdW1lbnRhdGlvbiBvZiB0aGlz
IEFQSS4KPiArCj4gICAjZW5kaWYgLyogIV9ERVZJQ0VfSCAqLwoKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApN
aW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0
Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Fri Sep 27 17:16:30 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Fri, 27 Sep 2019 17:16:30 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iDtr2-0008Tw-SQ; Fri, 27 Sep 2019 17:16:28 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=ERjp=XW=neclab.eu=sharan.santhanam@srs-us1.protection.inumbo.net>)
 id 1iDtr2-0008Tr-FE
 for minios-devel@lists.xenproject.org; Fri, 27 Sep 2019 17:16:28 +0000
X-Inumbo-ID: 89406e88-e14a-11e9-bf31-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 89406e88-e14a-11e9-bf31-bc764e2007e4;
 Fri, 27 Sep 2019 17:16:26 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 8721D105740;
 Fri, 27 Sep 2019 19:16:25 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id fsv5XgENq0PW; Fri, 27 Sep 2019 19:16:25 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 64CB010573D
 for <minios-devel@lists.xenproject.org>; Fri, 27 Sep 2019 19:16:25 +0200 (CEST)
Received: from [10.1.2.241] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 19:16:25 +0200
To: <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-6-simon.kuenzer@neclab.eu>
From: Sharan Santhanam <sharan.santhanam@neclab.eu>
Message-ID: <9dd1d139-4a07-a55d-1b3d-c28d045caf13@neclab.eu>
Date: Fri, 27 Sep 2019 19:16:24 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.8.0
MIME-Version: 1.0
In-Reply-To: <20190924100716.3462-6-simon.kuenzer@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 5/5] lib/ukswrand: Clean-up
 devfs integration
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGVsbG8gU2ltb24sCgpUaGUgcGF0Y2ggc2VlbSBmaW5lLgoKUmV2aWV3ZWQtYnk6IFNoYXJhbiBT
YW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgoKVGhhbmtzICYgUmVnYXJkcwoK
U2hhcmFuCgpPbiA5LzI0LzE5IDEyOjA3IFBNLCBTaW1vbiBLdWVuemVyIHdyb3RlOgo+IFRoaXMg
cGF0Y2ggY2xlYW5zIHVwIHRoZSBkZXZmcyBpbnRlZ3JhdGlvbiBvZiB1a3N3cmFuZDoKPiAtIFRo
ZSBjb25maWcgb3B0aW9uIGlzIHByb3Blcmx5IG5hbWVzcGFjZWQuCj4gLSBtd2NfZGV2LmMgaXMg
YWN0dWFsbHkgaW5kZXBlbmRlbnQgb2YgdGhlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIE1XQy4K
PiAgICBXZSByZW5hbWUgdGhpcyBmaWxlIHRvIGRldi5jCj4gLSBUdXJucyB0aGUgZGV2ZnMgcmVn
aXN0cmF0aW9uIGZ1bmN0aW9uIGludG8gYW4gaW5pdGNhbGwuCj4KPiBTaWduZWQtb2ZmLWJ5OiBT
aW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KPiAtLS0KPiAgIGxpYi91a3N3
cmFuZC9Db25maWcudWsgICAgICAgICAgICB8ICA1ICsrKy0tCj4gICBsaWIvdWtzd3JhbmQvTWFr
ZWZpbGUudWsgICAgICAgICAgfCAgNCArLS0tCj4gICBsaWIvdWtzd3JhbmQve213Y19kZXYuYyA9
PiBkZXYuY30gfCAyMyArKysrKysrKysrKysrKysrKy0tLS0tLQo+ICAgMyBmaWxlcyBjaGFuZ2Vk
LCAyMSBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKPiAgIHJlbmFtZSBsaWIvdWtzd3Jh
bmQve213Y19kZXYuYyA9PiBkZXYuY30gKDg5JSkKPgo+IGRpZmYgLS1naXQgYS9saWIvdWtzd3Jh
bmQvQ29uZmlnLnVrIGIvbGliL3Vrc3dyYW5kL0NvbmZpZy51awo+IGluZGV4IGExYTg0YmM1Li5j
NTgzNzFiYiAxMDA2NDQKPiAtLS0gYS9saWIvdWtzd3JhbmQvQ29uZmlnLnVrCj4gKysrIGIvbGli
L3Vrc3dyYW5kL0NvbmZpZy51awo+IEBAIC0xOCw5ICsxOCwxMCBAQCBjb25maWcgTElCVUtTV1JB
TkRfSU5JVElBTFNFRUQKPiAgIAlpbnQgIkluaXRpYWwgcmFuZG9tIHNlZWQiCj4gICAJZGVmYXVs
dCAyMwo+ICAgCj4gLWNvbmZpZyBERVZfUkFORE9NCj4gLQlib29sICIvZGV2L3JhbmRvbSBkZXZp
Y2UiCj4gK2NvbmZpZyBMSUJVS1NXUkFORF9ERVZGUwo+ICsJYm9vbCAiUmVnaXN0ZXIgcmFuZG9t
IGFuZCB1cmFuZG9tIGRldmljZSB0byBkZXZmcyIKPiAgIAlzZWxlY3QgTElCREVWRlMKPiArCXNl
bGVjdCBMSUJWRlNDT1JFCj4gICAJZGVmYXVsdCBuCj4gICAKPiAgIGVuZGlmCj4gZGlmZiAtLWdp
dCBhL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51ayBiL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51awo+
IGluZGV4IDI1MjQ3NDc0Li4wNTU2OTlkZSAxMDA2NDQKPiAtLS0gYS9saWIvdWtzd3JhbmQvTWFr
ZWZpbGUudWsKPiArKysgYi9saWIvdWtzd3JhbmQvTWFrZWZpbGUudWsKPiBAQCAtNCw2ICs0LDQg
QEAgQ0lOQ0xVREVTLSQoQ09ORklHX0xJQlVLU1dSQU5EKQkrPSAtSSQoTElCVUtTV1JBTkRfQkFT
RSkvaW5jbHVkZQo+ICAgQ1hYSU5DTFVERVMtJChDT05GSUdfTElCVUtTV1JBTkQpICs9IC1JJChM
SUJVS1NXUkFORF9CQVNFKS9pbmNsdWRlCj4gICAKPiAgIExJQlVLU1dSQU5EX1NSQ1MtJChDT05G
SUdfTElCVUtTV1JBTkRfTVdDKSArPSAkKExJQlVLU1dSQU5EX0JBU0UpL213Yy5jCj4gLWlmZGVm
IENPTkZJR19ERVZfUkFORE9NCj4gLUxJQlVLU1dSQU5EX1NSQ1MtJChDT05GSUdfTElCVUtTV1JB
TkRfTVdDKSArPSAkKExJQlVLU1dSQU5EX0JBU0UpL213Y19kZXYuYwo+IC1lbmRpZgo+ICtMSUJV
S1NXUkFORF9TUkNTLSQoQ09ORklHX0xJQlVLU1dSQU5EX0RFVkZTKSArPSAkKExJQlVLU1dSQU5E
X0JBU0UpL2Rldi5jCj4gZGlmZiAtLWdpdCBhL2xpYi91a3N3cmFuZC9td2NfZGV2LmMgYi9saWIv
dWtzd3JhbmQvZGV2LmMKPiBzaW1pbGFyaXR5IGluZGV4IDg5JQo+IHJlbmFtZSBmcm9tIGxpYi91
a3N3cmFuZC9td2NfZGV2LmMKPiByZW5hbWUgdG8gbGliL3Vrc3dyYW5kL2Rldi5jCj4gaW5kZXgg
NWE0Y2IxMDAuLmFkY2E2NTY2IDEwMDY0NAo+IC0tLSBhL2xpYi91a3N3cmFuZC9td2NfZGV2LmMK
PiArKysgYi9saWIvdWtzd3JhbmQvZGV2LmMKPiBAQCAtMTAxLDE5ICsxMDEsMzAgQEAgc3RhdGlj
IHN0cnVjdCBkcml2ZXIgZHJ2X3VyYW5kb20gPSB7Cj4gICAJLm5hbWUgPSBERVZfVVJBTkRPTV9O
QU1FCj4gICB9Owo+ICAgCj4gLV9fY29uc3RydWN0b3JfcHJpbygxMDIpIHN0YXRpYyB2b2lkIF91
a19kZXZfc3dyYW5kX2N0b3Iodm9pZCkKPiArc3RhdGljIGludCBkZXZmc19yZWdpc3Rlcih2b2lk
KQo+ICAgewo+ICAgCXN0cnVjdCBkZXZpY2UgKmRldjsKPiAgIAo+IC0JdWtfcHJfaW5mbygiQWRk
IC9kZXYvcmFuZG9tIGFuZCAvZGV2L3VyYW5kb21cbiIpOwo+ICsJdWtfcHJfaW5mbygiUmVnaXN0
ZXIgJyVzJyBhbmQgJyVzJyB0byBkZXZmc1xuIiwKPiArCQkgICBERVZfVVJBTkRPTV9OQU1FLCBE
RVZfUkFORE9NX05BTUUpOwo+ICAgCj4gICAJLyogcmVnaXN0ZXIgL2Rldi91cmFuZG9tICovCj4g
ICAJZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZHJ2X3VyYW5kb20sIERFVl9VUkFORE9NX05BTUUsIERf
Q0hSKTsKPiAtCWlmIChkZXYgPT0gTlVMTCkKPiAtCQl1a19wcl9pbmZvKCJGYWlsZWQgdG8gcmVn
aXN0ZXIgL2Rldi91cmFuZG9tXG4iKTsKPiArCWlmIChkZXYgPT0gTlVMTCkgewo+ICsJCXVrX3By
X2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyICclcycgdG8gZGV2ZnNcbiIsCj4gKwkJCSAgREVWX1VS
QU5ET01fTkFNRSk7Cj4gKwkJcmV0dXJuIC0xOwo+ICsJfQo+ICAgCj4gICAJLyogcmVnaXN0ZXIg
L2Rldi9yYW5kb20gKi8KPiAgIAlkZXYgPSBkZXZpY2VfY3JlYXRlKCZkcnZfcmFuZG9tLCBERVZf
UkFORE9NX05BTUUsIERfQ0hSKTsKPiAtCWlmIChkZXYgPT0gTlVMTCkKPiAtCQl1a19wcl9pbmZv
KCJGYWlsZWQgdG8gcmVnaXN0ZXIgL2Rldi9yYW5kb21cbiIpOwo+ICsJaWYgKGRldiA9PSBOVUxM
KSB7Cj4gKwkJdWtfcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgJyVzJyB0byBkZXZmc1xuIiwK
PiArCQkJICBERVZfUkFORE9NX05BTUUpOwo+ICsJCXJldHVybiAtMTsKPiArCX0KPiArCj4gKwly
ZXR1cm4gMDsKPiAgIH0KPiArCj4gK2RldmZzX2luaXRjYWxsKGRldmZzX3JlZ2lzdGVyKTsKCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZl
bCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8v
bGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 09:33:07 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 09:33:07 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iEs3F-00011d-RR; Mon, 30 Sep 2019 09:33:05 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=xZ2a=XW=neclab.eu=felipe.huici@srs-us1.protection.inumbo.net>)
 id 1iDlmc-00023l-72
 for minios-devel@lists.xen.org; Fri, 27 Sep 2019 08:39:22 +0000
X-Inumbo-ID: 4c956710-e102-11e9-97fb-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 4c956710-e102-11e9-97fb-bc764e2007e4;
 Fri, 27 Sep 2019 08:39:20 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id E0679105739;
 Fri, 27 Sep 2019 10:39:19 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id Hvn7w--_s4OO; Fri, 27 Sep 2019 10:39:19 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from Oberon.office.hd (Oberon.office.hd [192.168.24.90])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id 32021105735;
 Fri, 27 Sep 2019 10:39:19 +0200 (CEST)
Received: from oberon.office.hd (192.168.24.90) by Oberon.office.hd
 (192.168.24.90) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 27 Sep
 2019 10:39:16 +0200
Received: from oberon.office.hd ([192.168.126.11]) by Oberon.office.hd
 ([192.168.126.11]) with mapi id 15.01.1713.009; Fri, 27 Sep 2019 10:39:16
 +0200
From: Felipe Huici <Felipe.Huici@neclab.eu>
To: Charalampos Mainas <Charalampos.Mainas@neclab.eu>,
 "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBGO PATCH 03/11] Add rules for building runtime Go
 packages
Thread-Index: AQHVdH+gtTy37x3stE2DPaCG8HqhdKc/NRMA
Date: Fri, 27 Sep 2019 08:39:15 +0000
Message-ID: <8D8AF86E-10D5-4F4F-A56A-519DDEA714ED@neclab.eu>
References: <20190926153136.29689-1-Charalampos.Mainas@neclab.eu>
 <20190926153136.29689-4-Charalampos.Mainas@neclab.eu>
In-Reply-To: <20190926153136.29689-4-Charalampos.Mainas@neclab.eu>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
user-agent: Microsoft-MacOutlook/10.10.e.190909
x-originating-ip: [192.168.24.96]
Content-ID: <56DEF9E817B9E5478F5F506F8C3A5B55@office.hd>
MIME-Version: 1.0
X-Mailman-Approved-At: Mon, 30 Sep 2019 09:33:04 +0000
Subject: Re: [Minios-devel] [UNIKRAFT/LIBGO PATCH 03/11] Add rules for
 building runtime Go packages
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "costin.lupu@cs.pub.ro" <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhhbmtzIGFnYWluLiANCg0KUmV2aWV3ZWQtYnk6IEZlbGlwZSBIdWljaSA8ZmVsaXBlLmh1aWNp
QG5lY2xhYi5ldT4NCu+7vw0KT24gMjYuMDkuMTksIDE3OjMyLCAiQ2hhcmFsYW1wb3MgTWFpbmFz
IiA8Q2hhcmFsYW1wb3MuTWFpbmFzQG5lY2xhYi5ldT4gd3JvdGU6DQoNCiAgICBGcm9tOiBDb3N0
aW4gTHVwdSA8Y29zdGluLmx1cHVAY3MucHViLnJvPg0KICAgIA0KICAgIFRoZSBwYWNrYWdlcy51
ayBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgY2FwdHVyaW5nIHRoZSBidWlsZGluZyBjb21tYW5kcyBm
cm9tIHRoZQ0KICAgIG91dHB1dCBvZiB0aGUgb3JpZ2luYWwgbGliZ28gYnVpbGQuIFRoaXMgcGF0
Y2ggYWxzbyBhZGRzIHRoZSBnZW5lcmF0ZWQgLmdvDQogICAgZmlsZXMgbmVlZGVkIGZvciB0aGUg
YnVpbGQgb2YgcGFja2FnZXMuDQogICAgDQogICAgU2lnbmVkLW9mZi1ieTogQ29zdGluIEx1cHUg
PGNvc3Rpbi5sdXB1QGNzLnB1Yi5ybz4NCiAgICAtLS0NCiAgICAgTWFrZWZpbGUudWsgICAgICAg
ICAgICAgICAgICB8ICAgIDYgKw0KICAgICBnZW5lcmF0ZWQvZXBvbGwuZ28gICAgICAgICAgIHwg
ICAgNiArDQogICAgIGdlbmVyYXRlZC9saWJjYWxscy5nbyAgICAgICAgfCAzNDgwICsrKysrKysr
KysrKysNCiAgICAgZ2VuZXJhdGVkL3J1bnRpbWVfc3lzaW5mby5nbyB8IDYyMTkgKysrKysrKysr
KysrKysrKysrKysrKysNCiAgICAgZ2VuZXJhdGVkL3NpZ3RhYi5nbyAgICAgICAgICB8ICAgNzEg
Kw0KICAgICBnZW5lcmF0ZWQvc3lzY2FsbF9hcmNoLmdvICAgIHwgICAgMyArDQogICAgIGdlbmVy
YXRlZC9zeXNpbmZvLmdvICAgICAgICAgfCA5MjgyICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysNCiAgICAgZ2VuZXJhdGVkL3ZlcnNpb24uZ28gICAgICAgICB8ICAgNzcgKw0KICAg
ICBwYWNrYWdlcy51ayAgICAgICAgICAgICAgICAgIHwgIDk4MSArKysrDQogICAgIDkgZmlsZXMg
Y2hhbmdlZCwgMjAxMjUgaW5zZXJ0aW9ucygrKQ0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgZ2Vu
ZXJhdGVkL2Vwb2xsLmdvDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBnZW5lcmF0ZWQvbGliY2Fs
bHMuZ28NCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8u
Z28NCiAgICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9zaWd0YWIuZ28NCiAgICAgY3Jl
YXRlIG1vZGUgMTAwNjQ0IGdlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28NCiAgICAgY3JlYXRlIG1v
ZGUgMTAwNjQ0IGdlbmVyYXRlZC9zeXNpbmZvLmdvDQogICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBn
ZW5lcmF0ZWQvdmVyc2lvbi5nbw0KICAgICBjcmVhdGUgbW9kZSAxMDA2NDQgcGFja2FnZXMudWsN
CiAgICANCiAgICBkaWZmIC0tZ2l0IGEvTWFrZWZpbGUudWsgYi9NYWtlZmlsZS51aw0KICAgIGlu
ZGV4IDQyZWVmYjEuLmYyMDk1OTggMTAwNjQ0DQogICAgLS0tIGEvTWFrZWZpbGUudWsNCiAgICAr
KysgYi9NYWtlZmlsZS51aw0KICAgIEBAIC0xNjMsNSArMTYzLDExIEBAIFVLX1BSRVBBUkUgKz0g
JChMSUJHT19CVUlMRCkvZ29jMmMgJChMSUJHT19FWFRSQUNURUQpL21hbGxvYy5jDQogICAgIA0K
ICAgICAjIEdvIHBhY2thZ2VzDQogICAgIExJQkdPX0dPRkxBR1MteSArPSAtbWlubGluZS1hbGwt
c3RyaW5nb3BzIC1mbm8tc3BsaXQtc3RhY2sNCiAgICArTElCR09fR09GTEFHUy0kKENPTkZJR19E
RUJVR19TWU1CT0xTX0xWTDApICs9IC1nMA0KICAgICtMSUJHT19HT0ZMQUdTLSQoQ09ORklHX0RF
QlVHX1NZTUJPTFNfTFZMMSkgKz0gLWcxDQogICAgK0xJQkdPX0dPRkxBR1MtJChDT05GSUdfREVC
VUdfU1lNQk9MU19MVkwyKSArPSAtZzINCiAgICArTElCR09fR09GTEFHUy0kKENPTkZJR19ERUJV
R19TWU1CT0xTX0xWTDMpICs9IC1nMw0KICAgICBMSUJHT19HT0ZMQUdTLXkgKz0gLUkkKExJQkdP
X0JVSUxEKQ0KICAgICBMSUJHT19HT0ZMQUdTID0gJChMSUJHT19HT0ZMQUdTLXkpDQogICAgKw0K
ICAgICtpbmNsdWRlICQoTElCR09fQkFTRSkvcGFja2FnZXMudWsNCiAgICBkaWZmIC0tZ2l0IGEv
Z2VuZXJhdGVkL2Vwb2xsLmdvIGIvZ2VuZXJhdGVkL2Vwb2xsLmdvDQogICAgbmV3IGZpbGUgbW9k
ZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi5iNzEzZGU4DQogICAgLS0tIC9kZXYvbnVsbA0K
ICAgICsrKyBiL2dlbmVyYXRlZC9lcG9sbC5nbw0KICAgIEBAIC0wLDAgKzEsNiBAQA0KICAgICtw
YWNrYWdlIHN5c2NhbGwNCiAgICArdHlwZSBFcG9sbEV2ZW50IHN0cnVjdCB7DQogICAgKwlFdmVu
dHMgdWludDMyDQogICAgKwlGZCBpbnQzMg0KICAgICsJUGFkIFs0XWJ5dGUNCiAgICArfQ0KICAg
IGRpZmYgLS1naXQgYS9nZW5lcmF0ZWQvbGliY2FsbHMuZ28gYi9nZW5lcmF0ZWQvbGliY2FsbHMu
Z28NCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAwMDAuLjU1NjU2NDEN
CiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvZ2VuZXJhdGVkL2xpYmNhbGxzLmdvDQogICAg
QEAgLTAsMCArMSwzNDgwIEBADQogICAgKy8vIFRoaXMgZmlsZSB3YXMgYXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgYnkgbWtzeXNjYWxsLmF3aw0KICAgICsNCiAgICArcGFja2FnZSBzeXNjYWxsDQog
ICAgKw0KICAgICtpbXBvcnQgInVuc2FmZSINCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIHN0cmVycm9yX3Ivc3RyZXJyb3Jfcg0KICAgICsvL2V4dGVy
biBzdHJlcnJvcl9yDQogICAgK2Z1bmMgY19zdHJlcnJvcl9yKGVycm51bSBfQ19pbnQsIGIgKmJ5
dGUsIGxlbiBTaXplX3QpICpieXRlDQogICAgK2Z1bmMgc3RyZXJyb3JfcihlcnJudW0gaW50LCBi
IFtdYnl0ZSkgKGVycnN0ciAqYnl0ZSkgew0KICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJaWYg
bGVuKGIpID4gMCB7DQogICAgKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkp
DQogICAgKwl9IGVsc2Ugew0KICAgICsJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96
ZXJvKSkNCiAgICArCX0NCiAgICArCV9yIDo9IGNfc3RyZXJyb3JfcihfQ19pbnQoZXJybnVtKSwg
X3AyLCBTaXplX3QobGVuKGIpKSkNCiAgICArCWVycnN0ciA9ICgqYnl0ZSkoX3IpDQogICAgKwly
ZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgcmF3X3ByY3RsL3ByY3RsDQogICAgKy8vZXh0ZXJuIHByY3RsDQogICAgK2Z1bmMg
Y19wcmN0bChvcHRpb24gX0NfaW50LCBhcmcyIF9DX2xvbmcsIGFyZzMgX0NfbG9uZywgYXJnNCBf
Q19sb25nLCBhcmc1IF9DX2xvbmcpIF9DX2ludA0KICAgICtmdW5jIHJhd19wcmN0bChvcHRpb24g
aW50LCBhcmcyIGludCwgYXJnMyBpbnQsIGFyZzQgaW50LCBhcmc1IGludCkgKHJldCBpbnQsIGVy
ciBFcnJubykgew0KICAgICsJX3IgOj0gY19wcmN0bChfQ19pbnQob3B0aW9uKSwgX0NfbG9uZyhh
cmcyKSwgX0NfbG9uZyhhcmczKSwgX0NfbG9uZyhhcmc0KSwgX0NfbG9uZyhhcmc1KSkNCiAgICAr
CXJldCA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6
PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAg
ICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICAr
CQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAg
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19mb3JrL2ZvcmsNCiAg
ICArLy9leHRlcm4gZm9yaw0KICAgICtmdW5jIGNfZm9yaygpIFBpZF90DQogICAgK2Z1bmMgcmF3
X2ZvcmsoKSAocGlkIFBpZF90LCBlcnIgRXJybm8pIHsNCiAgICArCV9yIDo9IGNfZm9yaygpDQog
ICAgKwlwaWQgPSAoUGlkX3QpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRF
cnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5v
KCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsN
CiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICAr
DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19nZXRwaWQv
Z2V0cGlkDQogICAgKy8vZXh0ZXJuIGdldHBpZA0KICAgICtmdW5jIGNfZ2V0cGlkKCkgUGlkX3QN
CiAgICArZnVuYyByYXdfZ2V0cGlkKCkgKHBpZCBQaWRfdCkgew0KICAgICsJX3IgOj0gY19nZXRw
aWQoKQ0KICAgICsJcGlkID0gKFBpZF90KShfcikNCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfZ2V0cHBp
ZC9nZXRwcGlkDQogICAgKy8vZXh0ZXJuIGdldHBwaWQNCiAgICArZnVuYyBjX2dldHBwaWQoKSBQ
aWRfdA0KICAgICtmdW5jIHJhd19nZXRwcGlkKCkgKHBpZCBQaWRfdCkgew0KICAgICsJX3IgOj0g
Y19nZXRwcGlkKCkNCiAgICArCXBpZCA9IChQaWRfdCkoX3IpDQogICAgKwlyZXR1cm4NCiAgICAr
fQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3
X3NldHNpZC9zZXRzaWQNCiAgICArLy9leHRlcm4gc2V0c2lkDQogICAgK2Z1bmMgY19zZXRzaWQo
KSBQaWRfdA0KICAgICtmdW5jIHJhd19zZXRzaWQoKSAoZXJyIEVycm5vKSB7DQogICAgKwlfciA6
PSBjX3NldHNpZCgpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZh
bHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJ
CXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVy
ciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X3NldHBnaWQvc2V0cGdpZA0K
ICAgICsvL2V4dGVybiBzZXRwZ2lkDQogICAgK2Z1bmMgY19zZXRwZ2lkKHBpZCBQaWRfdCwgcGdp
ZCBQaWRfdCkgX0NfaW50DQogICAgK2Z1bmMgcmF3X3NldHBnaWQocGlkIGludCwgcGdpZCBpbnQp
IChlcnIgRXJybm8pIHsNCiAgICArCV9yIDo9IGNfc2V0cGdpZChQaWRfdChwaWQpLCBQaWRfdChw
Z2lkKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAg
ICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJy
bm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJy
bm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfY2hyb290L2Nocm9vdA0KICAgICsvL2V4
dGVybiBjaHJvb3QNCiAgICArZnVuYyBjX2Nocm9vdChwYXRoICpieXRlKSBfQ19pbnQNCiAgICAr
ZnVuYyByYXdfY2hyb290KHBhdGggKmJ5dGUpIChlcnIgRXJybm8pIHsNCiAgICArCV9yIDo9IGNf
Y2hyb290KHBhdGgpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZh
bHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJ
CXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVy
ciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2NoZGlyL2NoZGlyDQogICAg
Ky8vZXh0ZXJuIGNoZGlyDQogICAgK2Z1bmMgY19jaGRpcihwYXRoICpieXRlKSBfQ19pbnQNCiAg
ICArZnVuYyByYXdfY2hkaXIocGF0aCAqYnl0ZSkgKGVyciBFcnJubykgew0KICAgICsJX3IgOj0g
Y19jaGRpcihwYXRoKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBm
YWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICAr
CQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQll
cnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8v
IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19mY250bC9fX2dvX2ZjbnRs
DQogICAgKy8vZXh0ZXJuIF9fZ29fZmNudGwNCiAgICArZnVuYyBjX19fZ29fZmNudGwoZmQgX0Nf
aW50LCBjbWQgX0NfaW50LCBhcmcgX0NfaW50KSBfQ19pbnQNCiAgICArZnVuYyByYXdfZmNudGwo
ZmQgaW50LCBjbWQgaW50LCBhcmcgaW50KSAodmFsIGludCwgZXJyIEVycm5vKSB7DQogICAgKwlf
ciA6PSBjX19fZ29fZmNudGwoX0NfaW50KGZkKSwgX0NfaW50KGNtZCksIF9DX2ludChhcmcpKQ0K
ICAgICsJdmFsID0gKGludCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVy
cm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8o
KQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0K
ICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsN
CiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2Nsb3NlL2Ns
b3NlDQogICAgKy8vZXh0ZXJuIGNsb3NlDQogICAgK2Z1bmMgY19jbG9zZShmZCBfQ19pbnQpIF9D
X2ludA0KICAgICtmdW5jIHJhd19jbG9zZShmZCBpbnQpIChlcnIgRXJybm8pIHsNCiAgICArCV9y
IDo9IGNfY2xvc2UoX0NfaW50KGZkKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0
RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJu
bygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfaW9jdGwv
X19nb19pb2N0bA0KICAgICsvL2V4dGVybiBfX2dvX2lvY3RsDQogICAgK2Z1bmMgY19fX2dvX2lv
Y3RsKGZkIF9DX2ludCwgY21kIF9DX2ludCwgdmFsIF9DX2ludCkgX0NfaW50DQogICAgK2Z1bmMg
cmF3X2lvY3RsKGZkIGludCwgY21kIHVpbnRwdHIsIHZhbCBpbnQpIChydmFsIGludCwgZXJyIEVy
cm5vKSB7DQogICAgKwlfciA6PSBjX19fZ29faW9jdGwoX0NfaW50KGZkKSwgX0NfaW50KGNtZCks
IF9DX2ludCh2YWwpKQ0KICAgICsJcnZhbCA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJu
DQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIHJhd19pb2N0bF9wdHIvX19nb19pb2N0bF9wdHINCiAgICArLy9leHRlcm4gX19nb19pb2N0
bF9wdHINCiAgICArZnVuYyBjX19fZ29faW9jdGxfcHRyKGZkIF9DX2ludCwgY21kIF9DX2ludCwg
dmFsIHVuc2FmZS5Qb2ludGVyKSBfQ19pbnQNCiAgICArZnVuYyByYXdfaW9jdGxfcHRyKGZkIGlu
dCwgY21kIHVpbnRwdHIsIHZhbCB1bnNhZmUuUG9pbnRlcikgKHJ2YWwgaW50LCBlcnIgRXJybm8p
IHsNCiAgICArCV9yIDo9IGNfX19nb19pb2N0bF9wdHIoX0NfaW50KGZkKSwgX0NfaW50KGNtZCks
IHVuc2FmZS5Qb2ludGVyKHZhbCkpDQogICAgKwlydmFsID0gKGludCkoX3IpDQogICAgKwl2YXIg
ZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0K
ICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJ
fQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAg
KwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgcmF3X2V4ZWN2ZS9leGVjdmUNCiAgICArLy9leHRlcm4gZXhlY3ZlDQogICAg
K2Z1bmMgY19leGVjdmUoYXJndjAgKmJ5dGUsIGFyZ3YgKipieXRlLCBlbnZ2ICoqYnl0ZSkgX0Nf
aW50DQogICAgK2Z1bmMgcmF3X2V4ZWN2ZShhcmd2MCAqYnl0ZSwgYXJndiAqKmJ5dGUsIGVudnYg
KipieXRlKSAoZXJyIEVycm5vKSB7DQogICAgKwlfciA6PSBjX2V4ZWN2ZShhcmd2MCwgYXJndiwg
ZW52dikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAg
ICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJy
bm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJy
bm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0
aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfd3JpdGUvd3JpdGUNCiAgICArLy9leHRl
cm4gd3JpdGUNCiAgICArZnVuYyBjX3dyaXRlKGZkIF9DX2ludCwgYnVmICpieXRlLCBjb3VudCBT
aXplX3QpIFNzaXplX3QNCiAgICArZnVuYyByYXdfd3JpdGUoZmQgaW50LCBidWYgKmJ5dGUsIGNv
dW50IGludCkgKGVyciBFcnJubykgew0KICAgICsJX3IgOj0gY193cml0ZShfQ19pbnQoZmQpLCBi
dWYsIFNpemVfdChjb3VudCkpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5v
IDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0K
ICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAg
ICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAg
ICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgcmF3X2V4aXQvX2V4aXQN
CiAgICArLy9leHRlcm4gX2V4aXQNCiAgICArZnVuYyBjX19leGl0KHN0YXR1cyBfQ19pbnQpIA0K
ICAgICtmdW5jIHJhd19leGl0KHN0YXR1cyBpbnQpIHsNCiAgICArCWNfX2V4aXQoX0NfaW50KHN0
YXR1cykpDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIHJhd19kdXAyL2R1cDINCiAgICArLy9leHRlcm4gZHVwMg0KICAgICtmdW5jIGNf
ZHVwMihvbGRmZCBfQ19pbnQsIG5ld2ZkIF9DX2ludCkgX0NfaW50DQogICAgK2Z1bmMgcmF3X2R1
cDIob2xkZmQgaW50LCBuZXdmZCBpbnQpIChlcnIgRXJybm8pIHsNCiAgICArCV9yIDo9IGNfZHVw
MihfQ19pbnQob2xkZmQpLCBfQ19pbnQobmV3ZmQpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQog
ICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9
IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNl
dEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAg
K30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJh
d19raWxsL2tpbGwNCiAgICArLy9leHRlcm4ga2lsbA0KICAgICtmdW5jIGNfa2lsbChwaWQgUGlk
X3QsIHNpZyBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIHJhd19raWxsKHBpZCBQaWRfdCwgc2ln
IFNpZ25hbCkgKGVyciBFcnJubykgew0KICAgICsJX3IgOj0gY19raWxsKFBpZF90KHBpZCksIF9D
X2ludChzaWcpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxz
ZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlz
ZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIg
PSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJhd19zZXRncm91cHMvc2V0Z3JvdXBz
DQogICAgKy8vZXh0ZXJuIHNldGdyb3Vwcw0KICAgICtmdW5jIGNfc2V0Z3JvdXBzKHNpemUgU2l6
ZV90LCBsaXN0ICpHaWRfdCkgX0NfaW50DQogICAgK2Z1bmMgcmF3X3NldGdyb3VwcyhzaXplIGlu
dCwgbGlzdCB1bnNhZmUuUG9pbnRlcikgKGVyciBFcnJubykgew0KICAgICsJX3IgOj0gY19zZXRn
cm91cHMoU2l6ZV90KHNpemUpLCAoKkdpZF90KShsaXN0KSkNCiAgICArCXZhciBlcnJubyBFcnJu
bw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJy
bm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlp
ZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0K
ICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBPcGVuYXQvX19nb19vcGVuYXQNCiAgICArLy9leHRlcm4gX19nb19vcGVuYXQNCiAgICArZnVu
YyBjX19fZ29fb3BlbmF0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgZmxhZ3MgX0NfaW50LCBt
b2RlIE1vZGVfdCkgX0NfaW50DQogICAgK2Z1bmMgT3BlbmF0KGRpcmZkIGludCwgcGF0aCBzdHJp
bmcsIGZsYWdzIGludCwgbW9kZSB1aW50MzIpIChmZCBpbnQsIGVyciBlcnJvcikgew0KICAgICsJ
dmFyIF9wMiAqYnl0ZQ0KICAgICsJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQ0K
ICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRl
cnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19fX2dvX29wZW5hdChfQ19pbnQoZGlyZmQpLCBfcDIs
IF9DX2ludChmbGFncyksIE1vZGVfdChtb2RlKSkNCiAgICArCWZkID0gKGludCkoX3IpDQogICAg
Kwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8
IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0K
ICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJ
CWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICAr
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgZnV0aW1lc2F0L2Z1dGltZXNh
dA0KICAgICsvL2V4dGVybiBmdXRpbWVzYXQNCiAgICArZnVuYyBjX2Z1dGltZXNhdChkaXJmZCBf
Q19pbnQsIHBhdGggKmJ5dGUsIHRpbWVzICpbMl1UaW1ldmFsKSBfQ19pbnQNCiAgICArZnVuYyBm
dXRpbWVzYXQoZGlyZmQgaW50LCBwYXRoICpieXRlLCB0aW1lcyAqWzJdVGltZXZhbCkgKGVyciBl
cnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfZnV0aW1lc2F0KF9D
X2ludChkaXJmZCksIHBhdGgsIHRpbWVzKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlz
ZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVy
cm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxs
KCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAg
ICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIHB0cmFjZS9wdHJhY2UNCiAgICArLy9leHRlcm4gcHRyYWNlDQogICAgK2Z1
bmMgY19wdHJhY2UocmVxdWVzdCBfQ19pbnQsIHBpZCBQaWRfdCwgYWRkciAqYnl0ZSwgZGF0YSAq
Ynl0ZSkgX0NfbG9uZw0KICAgICtmdW5jIHB0cmFjZShyZXF1ZXN0IGludCwgcGlkIGludCwgYWRk
ciB1aW50cHRyLCBkYXRhIHVpbnRwdHIpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2Fs
bCgpDQogICAgKwlfciA6PSBjX3B0cmFjZShfQ19pbnQocmVxdWVzdCksIFBpZF90KHBpZCksICgq
Ynl0ZSkodW5zYWZlLlBvaW50ZXIoYWRkcikpLCAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKGRhdGEp
KSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAr
CWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8g
PSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciByYXdfcHRyYWNl
L3B0cmFjZQ0KICAgICtmdW5jIHJhd19wdHJhY2UocmVxdWVzdCBpbnQsIHBpZCBpbnQsIGFkZHIg
KmJ5dGUsIGRhdGEgKmJ5dGUpIChlcnIgRXJybm8pIHsNCiAgICArCV9yIDo9IGNfcHRyYWNlKF9D
X2ludChyZXF1ZXN0KSwgUGlkX3QocGlkKSwgYWRkciwgZGF0YSkNCiAgICArCXZhciBlcnJubyBF
cnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAg
KwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVy
bg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciByZWJvb3QvcmVib290DQogICAgKy8vZXh0ZXJuIHJlYm9vdA0KICAgICtmdW5jIGNfcmVi
b290KG1hZ2ljMSBfQ191aW50LCBtYWdpYzIgX0NfdWludCwgY21kIF9DX2ludCwgYXJnICpieXRl
KSBfQ19pbnQNCiAgICArZnVuYyByZWJvb3QobWFnaWMxIHVpbnQsIG1hZ2ljMiB1aW50LCBjbWQg
aW50LCBhcmcgc3RyaW5nKSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3A0ICpieXRlDQogICAg
KwlfcDQsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKGFyZykNCiAgICArCWlmIGVyciAhPSBuaWwg
ew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9y
IDo9IGNfcmVib290KF9DX3VpbnQobWFnaWMxKSwgX0NfdWludChtYWdpYzIpLCBfQ19pbnQoY21k
KSwgX3A0KQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0K
ICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRF
cnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVy
cm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30N
CiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGFjY2Vw
dDQvYWNjZXB0NA0KICAgICsvL2V4dGVybiBhY2NlcHQ0DQogICAgK2Z1bmMgY19hY2NlcHQ0KGZk
IF9DX2ludCwgc2EgKlJhd1NvY2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCwgZmxhZ3MgX0NfaW50
KSBfQ19pbnQNCiAgICArZnVuYyBhY2NlcHQ0KGZkIGludCwgc2EgKlJhd1NvY2thZGRyQW55LCBs
ZW4gKlNvY2tsZW5fdCwgZmxhZ3MgaW50KSAobmZkIGludCwgZXJyIGVycm9yKSB7DQogICAgKwlF
bnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19hY2NlcHQ0KF9DX2ludChmZCksIHNhLCBsZW4s
IF9DX2ludChmbGFncykpDQogICAgKwluZmQgPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBF
cnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAg
KwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8N
CiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBBY2N0L2FjY3QNCiAgICArLy9leHRlcm4gYWNjdA0K
ICAgICtmdW5jIGNfYWNjdChwYXRoICpieXRlKSBfQ19pbnQNCiAgICArZnVuYyBBY2N0KHBhdGgg
c3RyaW5nKSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEsIGVy
ciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICAr
CQlyZXR1cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX2Fj
Y3QoX3AxKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0K
ICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRF
cnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVy
cm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30N
CiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEFkanRp
bWV4L2FkanRpbWV4DQogICAgKy8vZXh0ZXJuIGFkanRpbWV4DQogICAgK2Z1bmMgY19hZGp0aW1l
eChidWYgKlRpbWV4KSBfQ19pbnQNCiAgICArZnVuYyBBZGp0aW1leChidWYgKlRpbWV4KSAoc3Rh
dGUgaW50LCBlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBj
X2FkanRpbWV4KGJ1ZikNCiAgICArCXN0YXRlID0gKGludCkoX3IpDQogICAgKwl2YXIgZXJybm8g
RXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJ
CWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAg
ICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5v
DQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRHVwMy9kdXAzDQogICAgKy8vZXh0ZXJuIGR1cDMN
CiAgICArZnVuYyBjX2R1cDMob2xkZmQgX0NfaW50LCBuZXdmZCBfQ19pbnQsIGZsYWdzIF9DX2lu
dCkgX0NfaW50DQogICAgK2Z1bmMgRHVwMyhvbGRmZCBpbnQsIG5ld2ZkIGludCwgZmxhZ3MgaW50
KSAoZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX2R1cDMoX0NfaW50KG9sZGZkKSwgX0NfaW50
KG5ld2ZkKSwgX0NfaW50KGZsYWdzKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0
RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJu
bygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGYWNjZXNzYXQv
ZmFjY2Vzc2F0DQogICAgKy8vZXh0ZXJuIGZhY2Nlc3NhdA0KICAgICtmdW5jIGNfZmFjY2Vzc2F0
KGRpcmZkIF9DX2ludCwgcGF0aG5hbWUgKmJ5dGUsIG1vZGUgX0NfaW50LCBmbGFncyBfQ19pbnQp
IF9DX2ludA0KICAgICtmdW5jIEZhY2Nlc3NhdChkaXJmZCBpbnQsIHBhdGggc3RyaW5nLCBtb2Rl
IHVpbnQzMiwgZmxhZ3MgaW50KSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AyICpieXRlDQog
ICAgKwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpDQogICAgKwlpZiBlcnIgIT0g
bmlsIHsNCiAgICArCQlyZXR1cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAg
KwlfciA6PSBjX2ZhY2Nlc3NhdChfQ19pbnQoZGlyZmQpLCBfcDIsIF9DX2ludChtb2RlKSwgX0Nf
aW50KGZsYWdzKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFs
c2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJ
c2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBz
ZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAg
ICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBG
YWxsb2NhdGUvZmFsbG9jYXRlDQogICAgKy8vZXh0ZXJuIGZhbGxvY2F0ZQ0KICAgICtmdW5jIGNf
ZmFsbG9jYXRlKGZkIF9DX2ludCwgbW9kZSBfQ19pbnQsIG9mZnNldCBPZmZzZXRfdCwgbGVuIE9m
ZnNldF90KSBfQ19pbnQNCiAgICArZnVuYyBGYWxsb2NhdGUoZmQgaW50LCBtb2RlIHVpbnQzMiwg
b2ZmIGludDY0LCBsZW4gaW50NjQpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgp
DQogICAgKwlfciA6PSBjX2ZhbGxvY2F0ZShfQ19pbnQoZmQpLCBfQ19pbnQobW9kZSksIE9mZnNl
dF90KG9mZiksIE9mZnNldF90KGxlbikpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNl
dEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJy
bm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwo
KQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAg
KwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgRmNobW9kYXQvZmNobW9kYXQNCiAgICArLy9leHRlcm4gZmNobW9kYXQNCiAg
ICArZnVuYyBjX2ZjaG1vZGF0KGRpcmZkIF9DX2ludCwgcGF0aG5hbWUgKmJ5dGUsIG1vZGUgTW9k
ZV90LCBmbGFncyBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIEZjaG1vZGF0KGRpcmZkIGludCwg
cGF0aCBzdHJpbmcsIG1vZGUgdWludDMyLCBmbGFncyBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICAr
CXZhciBfcDIgKmJ5dGUNCiAgICArCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkN
CiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50
ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfZmNobW9kYXQoX0NfaW50KGRpcmZkKSwgX3AyLCBN
b2RlX3QobW9kZSksIF9DX2ludChmbGFncykpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICAr
CXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0
RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2Nh
bGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQog
ICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgRmNob3duYXQvZmNob3duYXQNCiAgICArLy9leHRlcm4gZmNob3duYXQN
CiAgICArZnVuYyBjX2ZjaG93bmF0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgb3duZXIgVWlk
X3QsIGdyb3VwIEdpZF90LCBmbGFncyBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIEZjaG93bmF0
KGRpcmZkIGludCwgcGF0aCBzdHJpbmcsIHVpZCBpbnQsIGdpZCBpbnQsIGZsYWdzIGludCkgKGVy
ciBlcnJvcikgew0KICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJX3AyLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQog
ICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19mY2hvd25hdChfQ19p
bnQoZGlyZmQpLCBfcDIsIFVpZF90KHVpZCksIEdpZF90KGdpZCksIF9DX2ludChmbGFncykpDQog
ICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBf
ciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1
ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAg
ICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAg
ICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgRmxvY2svZmxvY2sNCiAg
ICArLy9leHRlcm4gZmxvY2sNCiAgICArZnVuYyBjX2Zsb2NrKGZkIF9DX2ludCwgaG93IF9DX2lu
dCkgX0NfaW50DQogICAgK2Z1bmMgRmxvY2soZmQgaW50LCBob3cgaW50KSAoZXJyIGVycm9yKSB7
DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19mbG9jayhfQ19pbnQoZmQpLCBf
Q19pbnQoaG93KSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFs
c2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJ
c2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBz
ZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAg
ICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBG
c3RhdGZzL2ZzdGF0ZnMNCiAgICArLy9leHRlcm4gZnN0YXRmcw0KICAgICtmdW5jIGNfZnN0YXRm
cyhmZCBfQ19pbnQsIGJ1ZiAqU3RhdGZzX3QpIF9DX2ludA0KICAgICtmdW5jIEZzdGF0ZnMoZmQg
aW50LCBidWYgKlN0YXRmc190KSAoZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0K
ICAgICsJX3IgOj0gY19mc3RhdGZzKF9DX2ludChmZCksIGJ1ZikNCiAgICArCXZhciBlcnJubyBF
cnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAg
KwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8N
CiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXR4YXR0ci9nZXR4YXR0cg0KICAgICsvL2V4dGVy
biBnZXR4YXR0cg0KICAgICtmdW5jIGNfZ2V0eGF0dHIocGF0aCAqYnl0ZSwgYXR0ciAqYnl0ZSwg
YnVmICpieXRlLCBjb3VudCBTaXplX3QpIFNzaXplX3QNCiAgICArZnVuYyBHZXR4YXR0cihwYXRo
IHN0cmluZywgYXR0ciBzdHJpbmcsIGRlc3QgW11ieXRlKSAoc3ogaW50LCBlcnIgZXJyb3IpIHsN
CiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmco
cGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAg
ICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhhdHRy
KQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwl2
YXIgX3AzICpieXRlDQogICAgKwlpZiBsZW4oZGVzdCkgPiAwIHsNCiAgICArCQlfcDMgPSAoKmJ5
dGUpKHVuc2FmZS5Qb2ludGVyKCZkZXN0WzBdKSkNCiAgICArCX0gZWxzZSB7DQogICAgKwkJX3Az
ID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJfQ0KICAgICsJRW50ZXJz
eXNjYWxsKCkNCiAgICArCV9yIDo9IGNfZ2V0eGF0dHIoX3AxLCBfcDIsIF9wMywgU2l6ZV90KGxl
bihkZXN0KSkpDQogICAgKwlzeiA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQog
ICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9
IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRz
eXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJ
fQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIElub3RpZnlBZGRXYXRjaC9pbm90aWZ5X2FkZF93YXRjaA0KICAg
ICsvL2V4dGVybiBpbm90aWZ5X2FkZF93YXRjaA0KICAgICtmdW5jIGNfaW5vdGlmeV9hZGRfd2F0
Y2goZmQgX0NfaW50LCBwYXRobmFtZSAqYnl0ZSwgbWFzayB1aW50MzIpIF9DX2ludA0KICAgICtm
dW5jIElub3RpZnlBZGRXYXRjaChmZCBpbnQsIHBhdGhuYW1lIHN0cmluZywgbWFzayB1aW50MzIp
ICh3YXRjaGRlc2MgaW50LCBlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDIgKmJ5dGUNCiAgICAr
CV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aG5hbWUpDQogICAgKwlpZiBlcnIgIT0g
bmlsIHsNCiAgICArCQlyZXR1cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAg
KwlfciA6PSBjX2lub3RpZnlfYWRkX3dhdGNoKF9DX2ludChmZCksIF9wMiwgdWludDMyKG1hc2sp
KQ0KICAgICsJd2F0Y2hkZXNjID0gKGludCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAg
ICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0g
R2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5
c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9
DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgSW5vdGlmeUluaXQvaW5vdGlmeV9pbml0DQogICAgKy8vZXh0ZXJu
IGlub3RpZnlfaW5pdA0KICAgICtmdW5jIGNfaW5vdGlmeV9pbml0KCkgX0NfaW50DQogICAgK2Z1
bmMgSW5vdGlmeUluaXQoKSAoZmQgaW50LCBlcnIgZXJyb3IpIHsNCiAgICArCV9yIDo9IGNfaW5v
dGlmeV9pbml0KCkNCiAgICArCWZkID0gKGludCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8N
CiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5v
ID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYg
c2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAg
ICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Ig
SW5vdGlmeUluaXQxL2lub3RpZnlfaW5pdDENCiAgICArLy9leHRlcm4gaW5vdGlmeV9pbml0MQ0K
ICAgICtmdW5jIGNfaW5vdGlmeV9pbml0MShmbGFncyBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5j
IElub3RpZnlJbml0MShmbGFncyBpbnQpIChmZCBpbnQsIGVyciBlcnJvcikgew0KICAgICsJX3Ig
Oj0gY19pbm90aWZ5X2luaXQxKF9DX2ludChmbGFncykpDQogICAgKwlmZCA9IChpbnQpKF9yKQ0K
ICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYg
X3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRy
dWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAg
ICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIElub3RpZnlSbVdhdGNoL2lub3RpZnlfcm1fd2F0Y2gNCiAg
ICArLy9leHRlcm4gaW5vdGlmeV9ybV93YXRjaA0KICAgICtmdW5jIGNfaW5vdGlmeV9ybV93YXRj
aChmZCBfQ19pbnQsIHdkIHVpbnQzMikgX0NfaW50DQogICAgK2Z1bmMgSW5vdGlmeVJtV2F0Y2go
ZmQgaW50LCB3YXRjaGRlc2MgdWludDMyKSAoc3VjY2VzcyBpbnQsIGVyciBlcnJvcikgew0KICAg
ICsJX3IgOj0gY19pbm90aWZ5X3JtX3dhdGNoKF9DX2ludChmZCksIHVpbnQzMih3YXRjaGRlc2Mp
KQ0KICAgICsJc3VjY2VzcyA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAg
KwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdl
dEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVy
cm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30N
CiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEtsb2dj
dGwva2xvZ2N0bA0KICAgICsvL2V4dGVybiBrbG9nY3RsDQogICAgK2Z1bmMgY19rbG9nY3RsKHR5
cCBfQ19pbnQsIGJ1ZnAgKmJ5dGUsIGxlbiBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIEtsb2dj
dGwodHlwIGludCwgYnVmIFtdYnl0ZSkgKG4gaW50LCBlcnIgZXJyb3IpIHsNCiAgICArCXZhciBf
cDIgKmJ5dGUNCiAgICArCWlmIGxlbihidWYpID4gMCB7DQogICAgKwkJX3AyID0gKCpieXRlKSh1
bnNhZmUuUG9pbnRlcigmYnVmWzBdKSkNCiAgICArCX0gZWxzZSB7DQogICAgKwkJX3AyID0gKCpi
eXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxs
KCkNCiAgICArCV9yIDo9IGNfa2xvZ2N0bChfQ19pbnQodHlwKSwgX3AyLCBfQ19pbnQobGVuKGJ1
ZikpKQ0KICAgICsJbiA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlz
ZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVy
cm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxs
KCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAg
ICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIExpc3R4YXR0ci9saXN0eGF0dHINCiAgICArLy9leHRlcm4gbGlzdHhhdHRy
DQogICAgK2Z1bmMgY19saXN0eGF0dHIocGF0aCAqYnl0ZSwgbGlzdCAqYnl0ZSwgc2l6ZSBTaXpl
X3QpIFNzaXplX3QNCiAgICArZnVuYyBMaXN0eGF0dHIocGF0aCBzdHJpbmcsIGRlc3QgW11ieXRl
KSAoc3ogaW50LCBlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCV9wMSwg
ZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAg
ICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJaWYgbGVuKGRl
c3QpID4gMCB7DQogICAgKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmZGVzdFswXSkp
DQogICAgKwl9IGVsc2Ugew0KICAgICsJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96
ZXJvKSkNCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX2xpc3R4
YXR0cihfcDEsIF9wMiwgU2l6ZV90KGxlbihkZXN0KSkpDQogICAgKwlzeiA9IChpbnQpKF9yKQ0K
ICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYg
X3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRy
dWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAg
ICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQog
ICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE1rZGlyYXQvbWtkaXJh
dA0KICAgICsvL2V4dGVybiBta2RpcmF0DQogICAgK2Z1bmMgY19ta2RpcmF0KGRpcmZkIF9DX2lu
dCwgcGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3QpIF9DX2ludA0KICAgICtmdW5jIE1rZGlyYXQoZGly
ZmQgaW50LCBwYXRoIHN0cmluZywgbW9kZSB1aW50MzIpIChlcnIgZXJyb3IpIHsNCiAgICArCXZh
ciBfcDIgKmJ5dGUNCiAgICArCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAg
ICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJz
eXNjYWxsKCkNCiAgICArCV9yIDo9IGNfbWtkaXJhdChfQ19pbnQoZGlyZmQpLCBfcDIsIE1vZGVf
dChtb2RlKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UN
CiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0
RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRF
cnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9
DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNa25v
ZGF0L21rbm9kYXQNCiAgICArLy9leHRlcm4gbWtub2RhdA0KICAgICtmdW5jIGNfbWtub2RhdChk
aXJmZCBfQ19pbnQsIHBhdGggKmJ5dGUsIG1vZGUgTW9kZV90LCBkZXYgX2Rldl90KSBfQ19pbnQN
CiAgICArZnVuYyBNa25vZGF0KGRpcmZkIGludCwgcGF0aCBzdHJpbmcsIG1vZGUgdWludDMyLCBk
ZXYgaW50KSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AyICpieXRlDQogICAgKwlfcDIsIGVy
ciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICAr
CQlyZXR1cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX21r
bm9kYXQoX0NfaW50KGRpcmZkKSwgX3AyLCBNb2RlX3QobW9kZSksIF9kZXZfdChkZXYpKQ0KICAg
ICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3Ig
PCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUN
CiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICAr
CQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAg
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHBpcGUyL3BpcGUyDQogICAg
Ky8vZXh0ZXJuIHBpcGUyDQogICAgK2Z1bmMgY19waXBlMihwICpbMl1fQ19pbnQsIGZsYWdzIF9D
X2ludCkgX0NfaW50DQogICAgK2Z1bmMgcGlwZTIocCAqWzJdX0NfaW50LCBmbGFncyBpbnQpIChl
cnIgZXJyb3IpIHsNCiAgICArCV9yIDo9IGNfcGlwZTIocCwgX0NfaW50KGZsYWdzKSkNCiAgICAr
CXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwg
MCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQog
ICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0N
CiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBQaXZvdFJvb3QvcGl2b3Rfcm9vdA0KICAgICsvL2V4dGVybiBwaXZv
dF9yb290DQogICAgK2Z1bmMgY19waXZvdF9yb290KG5ld3Jvb3QgKmJ5dGUsIHB1dG9sZCAqYnl0
ZSkgX0NfaW50DQogICAgK2Z1bmMgUGl2b3RSb290KG5ld3Jvb3Qgc3RyaW5nLCBwdXRvbGQgc3Ry
aW5nKSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEsIGVyciA9
IEJ5dGVQdHJGcm9tU3RyaW5nKG5ld3Jvb3QpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICAr
CQlyZXR1cm4NCiAgICArCX0NCiAgICArCXZhciBfcDIgKmJ5dGUNCiAgICArCV9wMiwgZXJyID0g
Qnl0ZVB0ckZyb21TdHJpbmcocHV0b2xkKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJ
cmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19waXZv
dF9yb290KF9wMSwgX3AyKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6
PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAg
ICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICAr
CWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJu
DQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIFJlbW92ZXhhdHRyL3JlbW92ZXhhdHRyDQogICAgKy8vZXh0ZXJuIHJlbW92ZXhhdHRyDQog
ICAgK2Z1bmMgY19yZW1vdmV4YXR0cihwYXRoICpieXRlLCBuYW1lICpieXRlKSBfQ19pbnQNCiAg
ICArZnVuYyBSZW1vdmV4YXR0cihwYXRoIHN0cmluZywgYXR0ciBzdHJpbmcpIChlcnIgZXJyb3Ip
IHsNCiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJp
bmcocGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0K
ICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJX3AyLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhh
dHRyKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAg
KwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19yZW1vdmV4YXR0cihfcDEsIF9wMikNCiAg
ICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9y
IDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVl
DQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAg
KwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAg
ICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBSZW5hbWVhdC9yZW5hbWVh
dA0KICAgICsvL2V4dGVybiByZW5hbWVhdA0KICAgICtmdW5jIGNfcmVuYW1lYXQob2xkZGlyZmQg
X0NfaW50LCBvbGRwYXRoICpieXRlLCBuZXdkaXJmZCBfQ19pbnQsIG5ld3BhdGggKmJ5dGUpIF9D
X2ludA0KICAgICtmdW5jIFJlbmFtZWF0KG9sZGRpcmZkIGludCwgb2xkcGF0aCBzdHJpbmcsIG5l
d2RpcmZkIGludCwgbmV3cGF0aCBzdHJpbmcpIChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDIg
KmJ5dGUNCiAgICArCV9wMiwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcob2xkcGF0aCkNCiAgICAr
CWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJdmFyIF9wNCAq
Ynl0ZQ0KICAgICsJX3A0LCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhuZXdwYXRoKQ0KICAgICsJ
aWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRlcnN5c2Nh
bGwoKQ0KICAgICsJX3IgOj0gY19yZW5hbWVhdChfQ19pbnQob2xkZGlyZmQpLCBfcDIsIF9DX2lu
dChuZXdkaXJmZCksIF9wNCkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8g
Oj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQog
ICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAg
KwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVy
bg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBzZW5kZmlsZS9zZW5kZmlsZTY0DQogICAgKy8vZXh0ZXJuIHNlbmRmaWxlNjQNCiAgICAr
ZnVuYyBjX3NlbmRmaWxlNjQob3V0ZmQgX0NfaW50LCBpbmZkIF9DX2ludCwgb2Zmc2V0ICpPZmZz
ZXRfdCwgY291bnQgU2l6ZV90KSBTc2l6ZV90DQogICAgK2Z1bmMgc2VuZGZpbGUob3V0ZmQgaW50
LCBpbmZkIGludCwgb2Zmc2V0ICpPZmZzZXRfdCwgY291bnQgaW50KSAod3JpdHRlbiBpbnQsIGVy
ciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfc2VuZGZpbGU2
NChfQ19pbnQob3V0ZmQpLCBfQ19pbnQoaW5mZCksIG9mZnNldCwgU2l6ZV90KGNvdW50KSkNCiAg
ICArCXdyaXR0ZW4gPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0
RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJu
bygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgp
DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICAr
CXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBTZXRmc2dpZC9zZXRmc2dpZA0KICAgICsvL2V4dGVybiBzZXRmc2dpZA0KICAg
ICtmdW5jIGNfc2V0ZnNnaWQoZ2lkIEdpZF90KSBfQ19pbnQNCiAgICArZnVuYyBTZXRmc2dpZChn
aWQgaW50KSAoZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0g
Y19zZXRmc2dpZChHaWRfdChnaWQpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRF
cnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5v
KCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkN
CiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJ
cmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIFNldGZzdWlkL3NldGZzdWlkDQogICAgKy8vZXh0ZXJuIHNldGZzdWlkDQogICAg
K2Z1bmMgY19zZXRmc3VpZCh1aWQgVWlkX3QpIF9DX2ludA0KICAgICtmdW5jIFNldGZzdWlkKHVp
ZCBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBj
X3NldGZzdWlkKFVpZF90KHVpZCkpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVy
cm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8o
KQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0K
ICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwly
ZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgU2V0cmVzZ2lkL3NldHJlc2dpZA0KICAgICsvL2V4dGVybiBzZXRyZXNnaWQNCiAg
ICArZnVuYyBjX3NldHJlc2dpZChyZ2lkIEdpZF90LCBlZ2lkIEdpZF90LCBzZ2lkIEdpZF90KSBf
Q19pbnQNCiAgICArZnVuYyBTZXRyZXNnaWQocmdpZCBpbnQsIGVnaWQgaW50LCBzZ2lkIGludCkg
KGVyciBlcnJvcikgew0KICAgICsJX3IgOj0gY19zZXRyZXNnaWQoR2lkX3QocmdpZCksIEdpZF90
KGVnaWQpLCBHaWRfdChzZ2lkKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJy
bm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygp
DQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQog
ICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0K
ICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRyZXN1aWQvc2V0
cmVzdWlkDQogICAgKy8vZXh0ZXJuIHNldHJlc3VpZA0KICAgICtmdW5jIGNfc2V0cmVzdWlkKHJ1
aWQgVWlkX3QsIGV1aWQgVWlkX3QsIHN1aWQgVWlkX3QpIF9DX2ludA0KICAgICtmdW5jIFNldHJl
c3VpZChydWlkIGludCwgZWd1aWQgaW50LCBzdWlkIGludCkgKGVyciBlcnJvcikgew0KICAgICsJ
X3IgOj0gY19zZXRyZXN1aWQoVWlkX3QocnVpZCksIFVpZF90KGVndWlkKSwgVWlkX3Qoc3VpZCkp
DQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlp
ZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0g
dHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQog
ICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0eGF0dHIvc2V0eGF0dHINCiAgICArLy9leHRlcm4g
c2V0eGF0dHINCiAgICArZnVuYyBjX3NldHhhdHRyKHBhdGggKmJ5dGUsIG5hbWUgKmJ5dGUsIHZh
bHVlICpieXRlLCBzaXplIFNpemVfdCwgZmxhZ3MgX0NfaW50KSBfQ19pbnQNCiAgICArZnVuYyBT
ZXR4YXR0cihwYXRoIHN0cmluZywgYXR0ciBzdHJpbmcsIGRhdGEgW11ieXRlLCBmbGFncyBpbnQp
IChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCV9wMSwgZXJyID0gQnl0
ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVy
bg0KICAgICsJfQ0KICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJX3AyLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhhdHRyKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQog
ICAgKwl9DQogICAgKwl2YXIgX3AzICpieXRlDQogICAgKwlpZiBsZW4oZGF0YSkgPiAwIHsNCiAg
ICArCQlfcDMgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZkYXRhWzBdKSkNCiAgICArCX0gZWxz
ZSB7DQogICAgKwkJX3AzID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJ
fQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfc2V0eGF0dHIoX3AxLCBfcDIs
IF9wMywgU2l6ZV90KGxlbihkYXRhKSksIF9DX2ludChmbGFncykpDQogICAgKwl2YXIgZXJybm8g
RXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJ
CWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAg
ICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5v
DQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Igc3BsaWNlL3NwbGljZQ0KICAgICsvL2V4dGVybiBz
cGxpY2UNCiAgICArZnVuYyBjX3NwbGljZShyZmQgX0NfaW50LCByb2ZmICpfbG9mZl90LCB3ZmQg
X0NfaW50LCB3b2ZmICpfbG9mZl90LCBsZW4gU2l6ZV90LCBmbGFncyBfQ191aW50KSBTc2l6ZV90
DQogICAgK2Z1bmMgc3BsaWNlKHJmZCBpbnQsIHJvZmYgKl9sb2ZmX3QsIHdmZCBpbnQsIHdvZmYg
Kl9sb2ZmX3QsIGxlbiBpbnQsIGZsYWdzIGludCkgKG4gaW50NjQsIGVyciBlcnJvcikgew0KICAg
ICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfc3BsaWNlKF9DX2ludChyZmQpLCByb2Zm
LCBfQ19pbnQod2ZkKSwgd29mZiwgU2l6ZV90KGxlbiksIF9DX3VpbnQoZmxhZ3MpKQ0KICAgICsJ
biA9IChpbnQ2NCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9
IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAg
ICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJ
aWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4N
CiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgU3RhdGZzL3N0YXRmcw0KICAgICsvL2V4dGVybiBzdGF0ZnMNCiAgICArZnVuYyBjX3N0YXRm
cyhwYXRoICpieXRlLCBidWYgKlN0YXRmc190KSBfQ19pbnQNCiAgICArZnVuYyBTdGF0ZnMocGF0
aCBzdHJpbmcsIGJ1ZiAqU3RhdGZzX3QpIChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDEgKmJ5
dGUNCiAgICArCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICArCWlmIGVy
ciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkN
CiAgICArCV9yIDo9IGNfc3RhdGZzKF9wMSwgYnVmKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQog
ICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9
IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRz
eXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJ
fQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIFN5bmNGaWxlUmFuZ2Uvc3luY19maWxlX3JhbmdlDQogICAgKy8v
ZXh0ZXJuIHN5bmNfZmlsZV9yYW5nZQ0KICAgICtmdW5jIGNfc3luY19maWxlX3JhbmdlKGZkIF9D
X2ludCwgb2ZmIE9mZnNldF90LCBuIE9mZnNldF90LCBmbGFncyBfQ191aW50KSBfQ19pbnQNCiAg
ICArZnVuYyBTeW5jRmlsZVJhbmdlKGZkIGludCwgb2ZmIGludDY0LCBuIGludDY0LCBmbGFncyBp
bnQpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3N5
bmNfZmlsZV9yYW5nZShfQ19pbnQoZmQpLCBPZmZzZXRfdChvZmYpLCBPZmZzZXRfdChuKSwgX0Nf
dWludChmbGFncykpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZh
bHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJ
CXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYg
c2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAg
ICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Ig
U3lzaW5mby9zeXNpbmZvDQogICAgKy8vZXh0ZXJuIHN5c2luZm8NCiAgICArZnVuYyBjX3N5c2lu
Zm8oaW5mbyAqU3lzaW5mb190KSBfQ19pbnQNCiAgICArZnVuYyBTeXNpbmZvKGluZm8gKlN5c2lu
Zm9fdCkgKGVyciBlcnJvcikgew0KICAgICsJX3IgOj0gY19zeXNpbmZvKGluZm8pDQogICAgKwl2
YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAg
ew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAg
ICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQog
ICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgVGVlL3RlZQ0KICAgICsvL2V4dGVybiB0ZWUNCiAgICArZnVuYyBjX3Rl
ZShyZmQgX0NfaW50LCB3ZmQgX0NfaW50LCBsZW4gU2l6ZV90LCBmbGFncyBfQ191aW50KSBTc2l6
ZV90DQogICAgK2Z1bmMgVGVlKHJmZCBpbnQsIHdmZCBpbnQsIGxlbiBpbnQsIGZsYWdzIGludCkg
KG4gaW50NjQsIGVyciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9
IGNfdGVlKF9DX2ludChyZmQpLCBfQ19pbnQod2ZkKSwgU2l6ZV90KGxlbiksIF9DX3VpbnQoZmxh
Z3MpKQ0KICAgICsJbiA9IChpbnQ2NCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICAr
CXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0
RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2Nh
bGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQog
ICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgdW5saW5rYXQvdW5saW5rYXQNCiAgICArLy9leHRlcm4gdW5saW5rYXQN
CiAgICArZnVuYyBjX3VubGlua2F0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgZmxhZ3MgX0Nf
aW50KSBfQ19pbnQNCiAgICArZnVuYyB1bmxpbmthdChkaXJmZCBpbnQsIHBhdGggc3RyaW5nLCBm
bGFncyBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDIgKmJ5dGUNCiAgICArCV9wMiwg
ZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAg
ICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNf
dW5saW5rYXQoX0NfaW50KGRpcmZkKSwgX3AyLCBfQ19pbnQoZmxhZ3MpKQ0KICAgICsJdmFyIGVy
cm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAg
ICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0N
CiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBl
cnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFVubW91bnQvdW1vdW50Mg0KICAgICsvL2V4
dGVybiB1bW91bnQyDQogICAgK2Z1bmMgY191bW91bnQyKHRhcmdldCAqYnl0ZSwgZmxhZ3MgX0Nf
aW50KSBfQ19pbnQNCiAgICArZnVuYyBVbm1vdW50KHRhcmdldCBzdHJpbmcsIGZsYWdzIGludCkg
KGVyciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRl
UHRyRnJvbVN0cmluZyh0YXJnZXQpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1
cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3Vtb3VudDIo
X3AxLCBfQ19pbnQoZmxhZ3MpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJu
byA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkN
CiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAg
ICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0
dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIFVuc2hhcmUvdW5zaGFyZQ0KICAgICsvL2V4dGVybiB1bnNoYXJlDQogICAgK2Z1bmMg
Y191bnNoYXJlKGZsYWdzIF9DX2ludCkgX0NfaW50DQogICAgK2Z1bmMgVW5zaGFyZShmbGFncyBp
bnQpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3Vu
c2hhcmUoX0NfaW50KGZsYWdzKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJy
bm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygp
DQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQog
ICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJl
dHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBJb3Blcm0vaW9wZXJtDQogICAgKy8vZXh0ZXJuIGlvcGVybQ0KICAgICtmdW5jIGNf
aW9wZXJtKGZyb20gX0NfbG9uZywgbnVtIF9DX2xvbmcsIG9uIF9DX2ludCkgX0NfaW50DQogICAg
K2Z1bmMgSW9wZXJtKGZyb20gaW50LCBudW0gaW50LCBvbiBpbnQpIChlcnIgZXJyb3IpIHsNCiAg
ICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX2lvcGVybShfQ19sb25nKGZyb20pLCBf
Q19sb25nKG51bSksIF9DX2ludChvbikpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNl
dEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJy
bm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwo
KQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAg
KwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgSW9wbC9pb3BsDQogICAgKy8vZXh0ZXJuIGlvcGwNCiAgICArZnVuYyBjX2lv
cGwobGV2ZWwgX0NfaW50KSBfQ19pbnQNCiAgICArZnVuYyBJb3BsKGxldmVsIGludCkgKGVyciBl
cnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfaW9wbChfQ19pbnQo
bGV2ZWwpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0K
ICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRF
cnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVy
cm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30N
CiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFVzdGF0
L3VzdGF0DQogICAgKy8vZXh0ZXJuIHVzdGF0DQogICAgK2Z1bmMgY191c3RhdChkZXYgX2Rldl90
LCB1YnVmICpVc3RhdF90KSBfQ19pbnQNCiAgICArZnVuYyBVc3RhdChkZXYgaW50LCB1YnVmICpV
c3RhdF90KSAoZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0g
Y191c3RhdChfZGV2X3QoZGV2KSwgdWJ1ZikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJ
c2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRF
cnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2Fs
bCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAg
ICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCB3cmFwcGVyIGZvciB1dGltZW5zYXQvdXRpbWVuc2F0DQogICAgKy8vZXh0ZXJuIHV0aW1lbnNh
dA0KICAgICtmdW5jIGNfdXRpbWVuc2F0KGRpcmZkIF9DX2ludCwgcGF0aCAqYnl0ZSwgdGltZXMg
KlsyXVRpbWVzcGVjLCBmbGFncyBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIHV0aW1lbnNhdChk
aXJmZCBpbnQsIHBhdGggc3RyaW5nLCB0aW1lcyAqWzJdVGltZXNwZWMsIGZsYWdzIGludCkgKGVy
ciBlcnJvcikgew0KICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJX3AyLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQog
ICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY191dGltZW5zYXQoX0Nf
aW50KGRpcmZkKSwgX3AyLCB0aW1lcywgX0NfaW50KGZsYWdzKSkNCiAgICArCXZhciBlcnJubyBF
cnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAg
KwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8N
CiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBwaXBlL3BpcGUNCiAgICArLy9leHRlcm4gcGlwZQ0K
ICAgICtmdW5jIGNfcGlwZShwICpbMl1fQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIHBpcGUocCAq
WzJdX0NfaW50KSAoZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX3BpcGUocCkNCiAgICArCXZh
ciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7
DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAg
Kwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAg
ICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRl
ZCB3cmFwcGVyIGZvciB1dGltZXMvdXRpbWVzDQogICAgKy8vZXh0ZXJuIHV0aW1lcw0KICAgICtm
dW5jIGNfdXRpbWVzKHBhdGggKmJ5dGUsIHRpbWVzICpbMl1UaW1ldmFsKSBfQ19pbnQNCiAgICAr
ZnVuYyB1dGltZXMocGF0aCBzdHJpbmcsIHRpbWVzICpbMl1UaW1ldmFsKSAoZXJyIGVycm9yKSB7
DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5n
KHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1cm4NCiAgICArCX0NCiAg
ICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3V0aW1lcyhfcDEsIHRpbWVzKQ0KICAg
ICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3Ig
PCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUN
CiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICAr
CQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAg
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGdldGN3ZC9nZXRjd2QNCiAg
ICArLy9leHRlcm4gZ2V0Y3dkDQogICAgK2Z1bmMgY19nZXRjd2QoYnVmICpieXRlLCBzaXplIFNp
emVfdCkgKmJ5dGUNCiAgICArZnVuYyBnZXRjd2QoYnVmICpieXRlLCBzaXplIFNpemVfdCkgKGVy
ciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfZ2V0Y3dkKGJ1
ZiwgU2l6ZV90KHNpemUpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6
PSBmYWxzZQ0KICAgICsJaWYgX3IgPT0gbmlsIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkN
CiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAg
ICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0
dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIGdldGdyb3Vwcy9nZXRncm91cHMNCiAgICArLy9leHRlcm4gZ2V0Z3JvdXBzDQogICAg
K2Z1bmMgY19nZXRncm91cHMoc2l6ZSBfQ19pbnQsIGxpc3QgKkdpZF90KSBfQ19pbnQNCiAgICAr
ZnVuYyBnZXRncm91cHMoc2l6ZSBpbnQsIGxpc3QgKkdpZF90KSAobm4gaW50LCBlcnIgZXJyb3Ip
IHsNCiAgICArCV9yIDo9IGNfZ2V0Z3JvdXBzKF9DX2ludChzaXplKSwgbGlzdCkNCiAgICArCW5u
ID0gKGludCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZh
bHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJ
CXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVy
ciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Igc2V0Z3JvdXBzL3NldGdyb3Vwcw0K
ICAgICtmdW5jIHNldGdyb3VwcyhuIGludCwgbGlzdCAqR2lkX3QpIChlcnIgZXJyb3IpIHsNCiAg
ICArCV9yIDo9IGNfc2V0Z3JvdXBzKFNpemVfdChuKSwgbGlzdCkNCiAgICArCXZhciBlcnJubyBF
cnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAg
KwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVy
bg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBNa2ZpZm8vbWtmaWZvDQogICAgKy8vZXh0ZXJuIG1rZmlmbw0KICAgICtmdW5jIGNfbWtm
aWZvKHBhdGggKmJ5dGUsIG1vZGUgTW9kZV90KSBfQ19pbnQNCiAgICArZnVuYyBNa2ZpZm8ocGF0
aCBzdHJpbmcsIG1vZGUgdWludDMyKSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRl
DQogICAgKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpDQogICAgKwlpZiBlcnIg
IT0gbmlsIHsNCiAgICArCQlyZXR1cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQog
ICAgKwlfciA6PSBjX21rZmlmbyhfcDEsIE1vZGVfdChtb2RlKSkNCiAgICArCXZhciBlcnJubyBF
cnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAg
KwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8N
CiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZWxlY3Qvc2VsZWN0DQogICAgKy8vZXh0ZXJuIHNl
bGVjdA0KICAgICtmdW5jIGNfc2VsZWN0KG5mZCBfQ19pbnQsIHIgKkZkU2V0LCB3ICpGZFNldCwg
ZSAqRmRTZXQsIHRpbWVvdXQgKlRpbWV2YWwpIF9DX2ludA0KICAgICtmdW5jIFNlbGVjdChuZmQg
aW50LCByICpGZFNldCwgdyAqRmRTZXQsIGUgKkZkU2V0LCB0aW1lb3V0ICpUaW1ldmFsKSAobiBp
bnQsIGVyciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfc2Vs
ZWN0KF9DX2ludChuZmQpLCByLCB3LCBlLCB0aW1lb3V0KQ0KICAgICsJbiA9IChpbnQpKF9yKQ0K
ICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYg
X3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRy
dWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAg
ICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQog
ICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEFjY2Vzcy9hY2Nlc3MN
CiAgICArLy9leHRlcm4gYWNjZXNzDQogICAgK2Z1bmMgY19hY2Nlc3MocGF0aCAqYnl0ZSwgbW9k
ZSBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIEFjY2VzcyhwYXRoIHN0cmluZywgbW9kZSB1aW50
MzIpIChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCV9wMSwgZXJyID0g
Qnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJl
dHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfYWNjZXNz
KF9wMSwgX0NfaW50KG1vZGUpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJu
byA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkN
CiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAg
ICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0
dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBw
ZXIgZm9yIENoZGlyL2NoZGlyDQogICAgK2Z1bmMgQ2hkaXIocGF0aCBzdHJpbmcpIChlcnIgZXJy
b3IpIHsNCiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21T
dHJpbmcocGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJ
fQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfY2hkaXIoX3AxKQ0KICAgICsJ
dmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAw
IHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAg
ICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQll
cnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8v
IEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIENobW9kL2NobW9kDQogICAgKy8v
ZXh0ZXJuIGNobW9kDQogICAgK2Z1bmMgY19jaG1vZChwYXRoICpieXRlLCBtb2RlIE1vZGVfdCkg
X0NfaW50DQogICAgK2Z1bmMgQ2htb2QocGF0aCBzdHJpbmcsIG1vZGUgdWludDMyKSAoZXJyIGVy
cm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9t
U3RyaW5nKHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1cm4NCiAgICAr
CX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX2NobW9kKF9wMSwgTW9kZV90
KG1vZGUpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0K
ICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRF
cnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVy
cm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30N
CiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIENob3du
L2Nob3duDQogICAgKy8vZXh0ZXJuIGNob3duDQogICAgK2Z1bmMgY19jaG93bihwYXRoICpieXRl
LCB1aWQgVWlkX3QsIGdpZCBHaWRfdCkgX0NfaW50DQogICAgK2Z1bmMgQ2hvd24ocGF0aCBzdHJp
bmcsIHVpZCBpbnQsIGdpZCBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDEgKmJ5dGUN
CiAgICArCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICArCWlmIGVyciAh
PSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAg
ICArCV9yIDo9IGNfY2hvd24oX3AxLCBVaWRfdCh1aWQpLCBHaWRfdChnaWQpKQ0KICAgICsJdmFy
IGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsN
CiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICAr
CX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIg
PSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIENocm9vdC9jaHJvb3QNCiAgICArZnVu
YyBDaHJvb3QocGF0aCBzdHJpbmcpIChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDEgKmJ5dGUN
CiAgICArCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkNCiAgICArCWlmIGVyciAh
PSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAg
ICArCV9yIDo9IGNfY2hyb290KF9wMSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0
RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJu
bygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgp
DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICAr
CXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBDbG9zZS9jbG9zZQ0KICAgICtmdW5jIENsb3NlKGZkIGludCkgKGVyciBlcnJv
cikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfY2xvc2UoX0NfaW50KGZk
KSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAr
CWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8g
PSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBDcmVhdC9jcmVh
dA0KICAgICsvL2V4dGVybiBjcmVhdA0KICAgICtmdW5jIGNfY3JlYXQocGF0aCAqYnl0ZSwgbW9k
ZSBNb2RlX3QpIF9DX2ludA0KICAgICtmdW5jIENyZWF0KHBhdGggc3RyaW5nLCBtb2RlIHVpbnQz
MikgKGZkIGludCwgZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEs
IGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAg
ICArCQlyZXR1cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBj
X2NyZWF0KF9wMSwgTW9kZV90KG1vZGUpKQ0KICAgICsJZmQgPSAoaW50KShfcikNCiAgICArCXZh
ciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7
DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAg
Kwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJy
ID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBB
dXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBEdXAvZHVwDQogICAgKy8vZXh0ZXJu
IGR1cA0KICAgICtmdW5jIGNfZHVwKG9sZGZkIF9DX2ludCkgX0NfaW50DQogICAgK2Z1bmMgRHVw
KG9sZGZkIGludCkgKGZkIGludCwgZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX2R1cChfQ19p
bnQob2xkZmQpKQ0KICAgICsJZmQgPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0K
ICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8g
PSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBz
ZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAg
ICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBE
dXAyL2R1cDINCiAgICArZnVuYyBEdXAyKG9sZGZkIGludCwgbmV3ZmQgaW50KSAoZXJyIGVycm9y
KSB7DQogICAgKwlfciA6PSBjX2R1cDIoX0NfaW50KG9sZGZkKSwgX0NfaW50KG5ld2ZkKSkNCiAg
ICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9y
IDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVl
DQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICAr
CX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBFeGl0L2V4aXQNCiAgICArLy9leHRlcm4gZXhpdA0KICAgICtm
dW5jIGNfZXhpdChjb2RlIF9DX2ludCkgDQogICAgK2Z1bmMgRXhpdChjb2RlIGludCkgew0KICAg
ICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCWNfZXhpdChfQ19pbnQoY29kZSkpDQogICAgKwlFeGl0
c3lzY2FsbCgpDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIEZjaGRpci9mY2hkaXINCiAgICArLy9leHRlcm4gZmNoZGlyDQogICAgK2Z1
bmMgY19mY2hkaXIoZmQgX0NfaW50KSBfQ19pbnQNCiAgICArZnVuYyBGY2hkaXIoZmQgaW50KSAo
ZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19mY2hkaXIo
X0NfaW50KGZkKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFs
c2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJ
c2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBz
ZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAg
ICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBG
Y2htb2QvZmNobW9kDQogICAgKy8vZXh0ZXJuIGZjaG1vZA0KICAgICtmdW5jIGNfZmNobW9kKGZk
IF9DX2ludCwgbW9kZSBNb2RlX3QpIF9DX2ludA0KICAgICtmdW5jIEZjaG1vZChmZCBpbnQsIG1v
ZGUgdWludDMyKSAoZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3Ig
Oj0gY19mY2htb2QoX0NfaW50KGZkKSwgTW9kZV90KG1vZGUpKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0K
ICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZjaG93bi9mY2hvd24NCiAgICArLy9leHRlcm4gZmNo
b3duDQogICAgK2Z1bmMgY19mY2hvd24oZmQgX0NfaW50LCB1aWQgVWlkX3QsIGdpZCBHaWRfdCkg
X0NfaW50DQogICAgK2Z1bmMgRmNob3duKGZkIGludCwgdWlkIGludCwgZ2lkIGludCkgKGVyciBl
cnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfZmNob3duKF9DX2lu
dChmZCksIFVpZF90KHVpZCksIEdpZF90KGdpZCkpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAg
ICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0g
R2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5
c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9
DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgZmNudGwvX19nb19mY250bA0KICAgICtmdW5jIGZjbnRsKGZkIGlu
dCwgY21kIGludCwgYXJnIGludCkgKHZhbCBpbnQsIGVyciBlcnJvcikgew0KICAgICsJRW50ZXJz
eXNjYWxsKCkNCiAgICArCV9yIDo9IGNfX19nb19mY250bChfQ19pbnQoZmQpLCBfQ19pbnQoY21k
KSwgX0NfaW50KGFyZykpDQogICAgKwl2YWwgPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBF
cnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJ
ZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAg
KwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8N
CiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGY250bEZsb2NrL19fZ29fZmNudGxfZmxvY2sNCiAg
ICArLy9leHRlcm4gX19nb19mY250bF9mbG9jaw0KICAgICtmdW5jIGNfX19nb19mY250bF9mbG9j
ayhmZCBfQ19pbnQsIGNtZCBfQ19pbnQsIGFyZyAqRmxvY2tfdCkgX0NfaW50DQogICAgK2Z1bmMg
RmNudGxGbG9jayhmZCB1aW50cHRyLCBjbWQgaW50LCBsayAqRmxvY2tfdCkgKGVyciBlcnJvcikg
ew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfX19nb19mY250bF9mbG9jayhf
Q19pbnQoZmQpLCBfQ19pbnQoY21kKSwgbGspDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICAr
CXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0
RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2Nh
bGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQog
ICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgRmRhdGFzeW5jL2ZkYXRhc3luYw0KICAgICsvL2V4dGVybiBmZGF0YXN5
bmMNCiAgICArZnVuYyBjX2ZkYXRhc3luYyhmZCBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIEZk
YXRhc3luYyhmZCBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAg
KwlfciA6PSBjX2ZkYXRhc3luYyhfQ19pbnQoZmQpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQog
ICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9
IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRz
eXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJ
fQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIEZzeW5jL2ZzeW5jDQogICAgKy8vZXh0ZXJuIGZzeW5jDQogICAg
K2Z1bmMgY19mc3luYyhmZCBfQ19pbnQpIF9DX2ludA0KICAgICtmdW5jIEZzeW5jKGZkIGludCkg
KGVyciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfZnN5bmMo
X0NfaW50KGZkKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFs
c2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJ
c2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBz
ZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAg
ICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBH
ZXRlZ2lkL2dldGVnaWQNCiAgICArLy9leHRlcm4gZ2V0ZWdpZA0KICAgICtmdW5jIGNfZ2V0ZWdp
ZCgpIEdpZF90DQogICAgK2Z1bmMgR2V0ZWdpZCgpIChlZ2lkIGludCkgew0KICAgICsJX3IgOj0g
Y19nZXRlZ2lkKCkNCiAgICArCWVnaWQgPSAoaW50KShfcikNCiAgICArCXJldHVybg0KICAgICt9
DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXRl
dWlkL2dldGV1aWQNCiAgICArLy9leHRlcm4gZ2V0ZXVpZA0KICAgICtmdW5jIGNfZ2V0ZXVpZCgp
IFVpZF90DQogICAgK2Z1bmMgR2V0ZXVpZCgpIChldWlkIGludCkgew0KICAgICsJX3IgOj0gY19n
ZXRldWlkKCkNCiAgICArCWV1aWQgPSAoaW50KShfcikNCiAgICArCXJldHVybg0KICAgICt9DQog
ICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBHZXRnaWQv
Z2V0Z2lkDQogICAgKy8vZXh0ZXJuIGdldGdpZA0KICAgICtmdW5jIGNfZ2V0Z2lkKCkgR2lkX3QN
CiAgICArZnVuYyBHZXRnaWQoKSAoZ2lkIGludCkgew0KICAgICsJX3IgOj0gY19nZXRnaWQoKQ0K
ICAgICsJZ2lkID0gKGludCkoX3IpDQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICAr
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cGdpZC9nZXRwZ2lkDQog
ICAgKy8vZXh0ZXJuIGdldHBnaWQNCiAgICArZnVuYyBjX2dldHBnaWQocGlkIFBpZF90KSBQaWRf
dA0KICAgICtmdW5jIEdldHBnaWQocGlkIGludCkgKHBnaWQgaW50LCBlcnIgZXJyb3IpIHsNCiAg
ICArCV9yIDo9IGNfZ2V0cGdpZChQaWRfdChwaWQpKQ0KICAgICsJcGdpZCA9IChpbnQpKF9yKQ0K
ICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYg
X3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRy
dWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAg
ICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIEdldHBncnAvZ2V0cGdycA0KICAgICsvL2V4dGVybiBnZXRw
Z3JwDQogICAgK2Z1bmMgY19nZXRwZ3JwKCkgUGlkX3QNCiAgICArZnVuYyBHZXRwZ3JwKCkgKHBp
ZCBpbnQpIHsNCiAgICArCV9yIDo9IGNfZ2V0cGdycCgpDQogICAgKwlwaWQgPSAoaW50KShfcikN
CiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVy
YXRlZCB3cmFwcGVyIGZvciBHZXRwaWQvZ2V0cGlkDQogICAgK2Z1bmMgR2V0cGlkKCkgKHBpZCBp
bnQpIHsNCiAgICArCV9yIDo9IGNfZ2V0cGlkKCkNCiAgICArCXBpZCA9IChpbnQpKF9yKQ0KICAg
ICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIEdldHBwaWQvZ2V0cHBpZA0KICAgICtmdW5jIEdldHBwaWQoKSAocHBpZCBp
bnQpIHsNCiAgICArCV9yIDo9IGNfZ2V0cHBpZCgpDQogICAgKwlwcGlkID0gKGludCkoX3IpDQog
ICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgR2V0cHJpb3JpdHkvZ2V0cHJpb3JpdHkNCiAgICArLy9leHRlcm4gZ2V0
cHJpb3JpdHkNCiAgICArZnVuYyBjX2dldHByaW9yaXR5KHdoaWNoIF9DX2ludCwgd2hvIF9DX2lu
dCkgX0NfaW50DQogICAgK2Z1bmMgR2V0cHJpb3JpdHkod2hpY2ggaW50LCB3aG8gaW50KSAocHJp
byBpbnQsIGVyciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNf
Z2V0cHJpb3JpdHkoX0NfaW50KHdoaWNoKSwgX0NfaW50KHdobykpDQogICAgKwlwcmlvID0gKGlu
dCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQog
ICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVy
cm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJy
bm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0K
ICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cnVz
YWdlL2dldHJ1c2FnZQ0KICAgICsvL2V4dGVybiBnZXRydXNhZ2UNCiAgICArZnVuYyBjX2dldHJ1
c2FnZSh3aG8gX0NfaW50LCBydXNhZ2UgKlJ1c2FnZSkgX0NfaW50DQogICAgK2Z1bmMgR2V0cnVz
YWdlKHdobyBpbnQsIHJ1c2FnZSAqUnVzYWdlKSAoZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBj
X2dldHJ1c2FnZShfQ19pbnQod2hvKSwgcnVzYWdlKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQog
ICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9
IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNl
dEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAg
K30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGdl
dHRpbWVvZmRheS9nZXR0aW1lb2ZkYXkNCiAgICArLy9leHRlcm4gZ2V0dGltZW9mZGF5DQogICAg
K2Z1bmMgY19nZXR0aW1lb2ZkYXkodHYgKlRpbWV2YWwsIHR6ICpieXRlKSBfQ19pbnQNCiAgICAr
ZnVuYyBnZXR0aW1lb2ZkYXkodHYgKlRpbWV2YWwsIHR6ICpieXRlKSAoZXJyIGVycm9yKSB7DQog
ICAgKwlfciA6PSBjX2dldHRpbWVvZmRheSh0diwgdHopDQogICAgKwl2YXIgZXJybm8gRXJybm8N
CiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5v
ID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYg
c2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAg
ICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Ig
R2V0dWlkL2dldHVpZA0KICAgICsvL2V4dGVybiBnZXR1aWQNCiAgICArZnVuYyBjX2dldHVpZCgp
IFVpZF90DQogICAgK2Z1bmMgR2V0dWlkKCkgKHVpZCBpbnQpIHsNCiAgICArCV9yIDo9IGNfZ2V0
dWlkKCkNCiAgICArCXVpZCA9IChpbnQpKF9yKQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICAr
DQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEtpbGwva2lsbA0K
ICAgICtmdW5jIEtpbGwocGlkIGludCwgc2lnIFNpZ25hbCkgKGVyciBlcnJvcikgew0KICAgICsJ
X3IgOj0gY19raWxsKFBpZF90KHBpZCksIF9DX2ludChzaWcpKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJu
DQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIExjaG93bi9sY2hvd24NCiAgICArLy9leHRlcm4gbGNob3duDQogICAgK2Z1bmMgY19sY2hv
d24ocGF0aCAqYnl0ZSwgdWlkIFVpZF90LCBnaWQgR2lkX3QpIF9DX2ludA0KICAgICtmdW5jIExj
aG93bihwYXRoIHN0cmluZywgdWlkIGludCwgZ2lkIGludCkgKGVyciBlcnJvcikgew0KICAgICsJ
dmFyIF9wMSAqYnl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQ0K
ICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRl
cnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19sY2hvd24oX3AxLCBVaWRfdCh1aWQpLCBHaWRfdChn
aWQpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAg
ICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJu
byA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5v
IHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAg
ICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIExpbmsvbGlu
aw0KICAgICsvL2V4dGVybiBsaW5rDQogICAgK2Z1bmMgY19saW5rKG9sZHBhdGggKmJ5dGUsIG5l
d3BhdGggKmJ5dGUpIF9DX2ludA0KICAgICtmdW5jIExpbmsob2xkcGF0aCBzdHJpbmcsIG5ld3Bh
dGggc3RyaW5nKSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEs
IGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKG9sZHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsN
CiAgICArCQlyZXR1cm4NCiAgICArCX0NCiAgICArCXZhciBfcDIgKmJ5dGUNCiAgICArCV9wMiwg
ZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcobmV3cGF0aCkNCiAgICArCWlmIGVyciAhPSBuaWwgew0K
ICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9
IGNfbGluayhfcDEsIF9wMikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8g
Oj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQog
ICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAg
KwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVy
bg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVy
IGZvciBNa2Rpci9ta2Rpcg0KICAgICsvL2V4dGVybiBta2Rpcg0KICAgICtmdW5jIGNfbWtkaXIo
cGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3QpIF9DX2ludA0KICAgICtmdW5jIE1rZGlyKHBhdGggc3Ry
aW5nLCBtb2RlIHVpbnQzMikgKGVyciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAg
ICsJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJyICE9IG5p
bCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJ
X3IgOj0gY19ta2RpcihfcDEsIE1vZGVfdChtb2RlKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0K
ICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8g
PSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0
c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICAr
CX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciBNa25vZC9ta25vZA0KICAgICsvL2V4dGVybiBta25vZA0KICAg
ICtmdW5jIGNfbWtub2QocGF0aCAqYnl0ZSwgbW9kZSBNb2RlX3QsIGRldiBfZGV2X3QpIF9DX2lu
dA0KICAgICtmdW5jIE1rbm9kKHBhdGggc3RyaW5nLCBtb2RlIHVpbnQzMiwgZGV2IGludCkgKGVy
ciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQog
ICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19ta25vZChfcDEsIE1v
ZGVfdChtb2RlKSwgX2Rldl90KGRldikpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNl
dEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJy
bm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwo
KQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAg
KwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQg
d3JhcHBlciBmb3IgTW91bnQvbW91bnQNCiAgICArLy9leHRlcm4gbW91bnQNCiAgICArZnVuYyBj
X21vdW50KHNvdXJjZSAqYnl0ZSwgdGFyZ2V0ICpieXRlLCBmc3R5cGUgKmJ5dGUsIGZsYWdzIF9D
X2xvbmcsIGRhdGEgKmJ5dGUpIF9DX2ludA0KICAgICtmdW5jIE1vdW50KHNvdXJjZSBzdHJpbmcs
IHRhcmdldCBzdHJpbmcsIGZzdHlwZSBzdHJpbmcsIGZsYWdzIHVpbnRwdHIsIGRhdGEgc3RyaW5n
KSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEsIGVyciA9IEJ5
dGVQdHJGcm9tU3RyaW5nKHNvdXJjZSkNCiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJl
dHVybg0KICAgICsJfQ0KICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJX3AyLCBlcnIgPSBCeXRl
UHRyRnJvbVN0cmluZyh0YXJnZXQpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1
cm4NCiAgICArCX0NCiAgICArCXZhciBfcDMgKmJ5dGUNCiAgICArCV9wMywgZXJyID0gQnl0ZVB0
ckZyb21TdHJpbmcoZnN0eXBlKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJu
DQogICAgKwl9DQogICAgKwl2YXIgX3A1ICpieXRlDQogICAgKwlfcDUsIGVyciA9IEJ5dGVQdHJG
cm9tU3RyaW5nKGRhdGEpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1cm4NCiAg
ICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX21vdW50KF9wMSwgX3Ay
LCBfcDMsIF9DX2xvbmcoZmxhZ3MpLCBfcDUpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICAr
CXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0
RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2Nh
bGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQog
ICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgTmFub3NsZWVwL25hbm9zbGVlcA0KICAgICsvL2V4dGVybiBuYW5vc2xl
ZXANCiAgICArZnVuYyBjX25hbm9zbGVlcCh0aW1lICpUaW1lc3BlYywgbGVmdG92ZXIgKlRpbWVz
cGVjKSBfQ19pbnQNCiAgICArZnVuYyBOYW5vc2xlZXAodGltZSAqVGltZXNwZWMsIGxlZnRvdmVy
ICpUaW1lc3BlYykgKGVyciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9y
IDo9IGNfbmFub3NsZWVwKHRpbWUsIGxlZnRvdmVyKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQog
ICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9
IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRz
eXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJ
fQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2Vu
ZXJhdGVkIHdyYXBwZXIgZm9yIFBhdXNlL3BhdXNlDQogICAgKy8vZXh0ZXJuIHBhdXNlDQogICAg
K2Z1bmMgY19wYXVzZSgpIF9DX2ludA0KICAgICtmdW5jIFBhdXNlKCkgKGVyciBlcnJvcikgew0K
ICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfcGF1c2UoKQ0KICAgICsJdmFyIGVy
cm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAg
ICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0N
CiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBl
cnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJlYWQvcmVhZA0KICAgICsvL2V4dGVybiBy
ZWFkDQogICAgK2Z1bmMgY19yZWFkKGZkIF9DX2ludCwgYnVmICpieXRlLCBjb3VudCBTaXplX3Qp
IFNzaXplX3QNCiAgICArZnVuYyByZWFkKGZkIGludCwgcCBbXWJ5dGUpIChuIGludCwgZXJyIGVy
cm9yKSB7DQogICAgKwl2YXIgX3AyICpieXRlDQogICAgKwlpZiBsZW4ocCkgPiAwIHsNCiAgICAr
CQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkNCiAgICArCX0gZWxzZSB7DQog
ICAgKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJfQ0KICAg
ICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfcmVhZChfQ19pbnQoZmQpLCBfcDIsIFNp
emVfdChsZW4ocCkpKQ0KICAgICsJbiA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5v
DQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJu
byA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4
aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAg
ICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkg
Z2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJlYWRsZW4vcmVhZA0KICAgICtmdW5jIHJlYWRsZW4oZmQg
aW50LCBwICpieXRlLCBucCBpbnQpIChuIGludCwgZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5
c2NhbGwoKQ0KICAgICsJX3IgOj0gY19yZWFkKF9DX2ludChmZCksIHAsIFNpemVfdChucCkpDQog
ICAgKwluID0gKGludCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5v
IDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0K
ICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAg
ICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1
cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgUmVhZGxpbmsvcmVhZGxpbmsNCiAgICArLy9leHRlcm4gcmVhZGxpbmsNCiAgICArZnVu
YyBjX3JlYWRsaW5rKHBhdGggKmJ5dGUsIGJ1ZiAqYnl0ZSwgYnVmc2l6IFNpemVfdCkgU3NpemVf
dA0KICAgICtmdW5jIFJlYWRsaW5rKHBhdGggc3RyaW5nLCBidWYgW11ieXRlKSAobiBpbnQsIGVy
ciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQog
ICAgKwl9DQogICAgKwl2YXIgX3AyICpieXRlDQogICAgKwlpZiBsZW4oYnVmKSA+IDAgew0KICAg
ICsJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJmJ1ZlswXSkpDQogICAgKwl9IGVsc2Ug
ew0KICAgICsJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICArCX0N
CiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3JlYWRsaW5rKF9wMSwgX3AyLCBT
aXplX3QobGVuKGJ1ZikpKQ0KICAgICsJbiA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0K
ICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFJlbmFtZS9yZW5hbWUNCiAgICArLy9leHRlcm4gcmVu
YW1lDQogICAgK2Z1bmMgY19yZW5hbWUob2xkcGF0aCAqYnl0ZSwgbmV3cGF0aCAqYnl0ZSkgX0Nf
aW50DQogICAgK2Z1bmMgUmVuYW1lKG9sZHBhdGggc3RyaW5nLCBuZXdwYXRoIHN0cmluZykgKGVy
ciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRlUHRy
RnJvbVN0cmluZyhvbGRwYXRoKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJu
DQogICAgKwl9DQogICAgKwl2YXIgX3AyICpieXRlDQogICAgKwlfcDIsIGVyciA9IEJ5dGVQdHJG
cm9tU3RyaW5nKG5ld3BhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1cm4N
CiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3JlbmFtZShfcDEs
IF9wMikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAg
ICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJy
bm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJu
byB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQog
ICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBSbWRpci9y
bWRpcg0KICAgICsvL2V4dGVybiBybWRpcg0KICAgICtmdW5jIGNfcm1kaXIocGF0aCAqYnl0ZSkg
X0NfaW50DQogICAgK2Z1bmMgUm1kaXIocGF0aCBzdHJpbmcpIChlcnIgZXJyb3IpIHsNCiAgICAr
CXZhciBfcDEgKmJ5dGUNCiAgICArCV9wMSwgZXJyID0gQnl0ZVB0ckZyb21TdHJpbmcocGF0aCkN
CiAgICArCWlmIGVyciAhPSBuaWwgew0KICAgICsJCXJldHVybg0KICAgICsJfQ0KICAgICsJRW50
ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfcm1kaXIoX3AxKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0K
ICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldGRvbWFpbm5hbWUvc2V0ZG9tYWlubmFtZQ0KICAg
ICsvL2V4dGVybiBzZXRkb21haW5uYW1lDQogICAgK2Z1bmMgY19zZXRkb21haW5uYW1lKG5hbWUg
KmJ5dGUsIGxlbiBTaXplX3QpIF9DX2ludA0KICAgICtmdW5jIFNldGRvbWFpbm5hbWUocCBbXWJ5
dGUpIChlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCWlmIGxlbihwKSA+
IDAgew0KICAgICsJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJnBbMF0pKQ0KICAgICsJ
fSBlbHNlIHsNCiAgICArCQlfcDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpDQog
ICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19zZXRkb21haW5uYW1l
KF9wMSwgU2l6ZV90KGxlbihwKSkpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVy
cm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8o
KQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0K
ICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwly
ZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3Jh
cHBlciBmb3IgU2V0aG9zdG5hbWUvc2V0aG9zdG5hbWUNCiAgICArLy9leHRlcm4gc2V0aG9zdG5h
bWUNCiAgICArZnVuYyBjX3NldGhvc3RuYW1lKG5hbWUgKmJ5dGUsIGxlbiBTaXplX3QpIF9DX2lu
dA0KICAgICtmdW5jIFNldGhvc3RuYW1lKHAgW11ieXRlKSAoZXJyIGVycm9yKSB7DQogICAgKwl2
YXIgX3AxICpieXRlDQogICAgKwlpZiBsZW4ocCkgPiAwIHsNCiAgICArCQlfcDEgPSAoKmJ5dGUp
KHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkNCiAgICArCX0gZWxzZSB7DQogICAgKwkJX3AxID0gKCpi
eXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxs
KCkNCiAgICArCV9yIDo9IGNfc2V0aG9zdG5hbWUoX3AxLCBTaXplX3QobGVuKHApKSkNCiAgICAr
CXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwg
MCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQog
ICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJ
ZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTZXRnaWQvc2V0Z2lkDQogICAg
Ky8vZXh0ZXJuIHNldGdpZA0KICAgICtmdW5jIGNfc2V0Z2lkKGdpZCBHaWRfdCkgX0NfaW50DQog
ICAgK2Z1bmMgU2V0Z2lkKGdpZCBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICArCV9yIDo9IGNfc2V0
Z2lkKEdpZF90KGdpZCkpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9
IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAg
ICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJ
CWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICAr
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cmVnaWQvc2V0cmVnaWQN
CiAgICArLy9leHRlcm4gc2V0cmVnaWQNCiAgICArZnVuYyBjX3NldHJlZ2lkKHJnaWQgR2lkX3Qs
IGVnaWQgR2lkX3QpIF9DX2ludA0KICAgICtmdW5jIFNldHJlZ2lkKHJnaWQgaW50LCBlZ2lkIGlu
dCkgKGVyciBlcnJvcikgew0KICAgICsJX3IgOj0gY19zZXRyZWdpZChHaWRfdChyZ2lkKSwgR2lk
X3QoZWdpZCkpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNl
DQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNl
dEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9
IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0
b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU2V0cGdpZC9zZXRwZ2lkDQogICAgK2Z1
bmMgU2V0cGdpZChwaWQgaW50LCBwZ2lkIGludCkgKGVyciBlcnJvcikgew0KICAgICsJX3IgOj0g
Y19zZXRwZ2lkKFBpZF90KHBpZCksIFBpZF90KHBnaWQpKQ0KICAgICsJdmFyIGVycm5vIEVycm5v
DQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJu
byA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlm
IHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQog
ICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IFNldHByaW9yaXR5L3NldHByaW9yaXR5DQogICAgKy8vZXh0ZXJuIHNldHByaW9yaXR5DQogICAg
K2Z1bmMgY19zZXRwcmlvcml0eSh3aGljaCBfQ19pbnQsIHdobyBfQ19pbnQsIHByaW8gX0NfaW50
KSBfQ19pbnQNCiAgICArZnVuYyBTZXRwcmlvcml0eSh3aGljaCBpbnQsIHdobyBpbnQsIHByaW8g
aW50KSAoZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19z
ZXRwcmlvcml0eShfQ19pbnQod2hpY2gpLCBfQ19pbnQod2hvKSwgX0NfaW50KHByaW8pKQ0KICAg
ICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3Ig
PCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUN
CiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICAr
CQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAg
Ky8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldHJldWlkL3NldHJldWlk
DQogICAgKy8vZXh0ZXJuIHNldHJldWlkDQogICAgK2Z1bmMgY19zZXRyZXVpZChydWlkIFVpZF90
LCBldWlkIFVpZF90KSBfQ19pbnQNCiAgICArZnVuYyBTZXRyZXVpZChydWlkIGludCwgZXVpZCBp
bnQpIChlcnIgZXJyb3IpIHsNCiAgICArCV9yIDo9IGNfc2V0cmV1aWQoVWlkX3QocnVpZCksIFVp
ZF90KGV1aWQpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxz
ZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlz
ZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIg
PSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1
dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldHNpZC9zZXRzaWQNCiAgICArZnVu
YyBTZXRzaWQoKSAocGlkIGludCwgZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX3NldHNpZCgp
DQogICAgKwlwaWQgPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0
RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJu
bygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBzZXR0aW1lb2Zk
YXkvc2V0dGltZW9mZGF5DQogICAgKy8vZXh0ZXJuIHNldHRpbWVvZmRheQ0KICAgICtmdW5jIGNf
c2V0dGltZW9mZGF5KHR2ICpUaW1ldmFsLCB0eiAqYnl0ZSkgX0NfaW50DQogICAgK2Z1bmMgc2V0
dGltZW9mZGF5KHR2ICpUaW1ldmFsLCB0eiAqYnl0ZSkgKGVyciBlcnJvcikgew0KICAgICsJX3Ig
Oj0gY19zZXR0aW1lb2ZkYXkodHYsIHR6KQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlz
ZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVy
cm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5v
IHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAg
ICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFNldHVpZC9z
ZXR1aWQNCiAgICArLy9leHRlcm4gc2V0dWlkDQogICAgK2Z1bmMgY19zZXR1aWQodWlkIFVpZF90
KSBfQ19pbnQNCiAgICArZnVuYyBTZXR1aWQodWlkIGludCkgKGVyciBlcnJvcikgew0KICAgICsJ
X3IgOj0gY19zZXR1aWQoVWlkX3QodWlkKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJ
c2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRF
cnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJu
byB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQog
ICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTeW1saW5r
L3N5bWxpbmsNCiAgICArLy9leHRlcm4gc3ltbGluaw0KICAgICtmdW5jIGNfc3ltbGluayhvbGRw
YXRoICpieXRlLCBuZXdwYXRoICpieXRlKSBfQ19pbnQNCiAgICArZnVuYyBTeW1saW5rKG9sZHBh
dGggc3RyaW5nLCBuZXdwYXRoIHN0cmluZykgKGVyciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAq
Ynl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhvbGRwYXRoKQ0KICAgICsJ
aWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwl2YXIgX3AyICpi
eXRlDQogICAgKwlfcDIsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5nKG5ld3BhdGgpDQogICAgKwlp
ZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1cm4NCiAgICArCX0NCiAgICArCUVudGVyc3lzY2Fs
bCgpDQogICAgKwlfciA6PSBjX3N5bWxpbmsoX3AxLCBfcDIpDQogICAgKwl2YXIgZXJybm8gRXJy
bm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVy
cm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJ
RXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQog
ICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxs
eSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgU3luYy9zeW5jDQogICAgKy8vZXh0ZXJuIHN5bmMNCiAg
ICArZnVuYyBjX3N5bmMoKSANCiAgICArZnVuYyBTeW5jKCkgew0KICAgICsJRW50ZXJzeXNjYWxs
KCkNCiAgICArCWNfc3luYygpDQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgK30NCiAgICArDQog
ICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFRpbWUvdGltZQ0KICAg
ICsvL2V4dGVybiB0aW1lDQogICAgK2Z1bmMgY190aW1lKHQgKlRpbWVfdCkgVGltZV90DQogICAg
K2Z1bmMgVGltZSh0ICpUaW1lX3QpICh0dCBUaW1lX3QsIGVyciBlcnJvcikgew0KICAgICsJX3Ig
Oj0gY190aW1lKHQpDQogICAgKwl0dCA9IChUaW1lX3QpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJu
DQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIFRpbWVzL3RpbWVzDQogICAgKy8vZXh0ZXJuIHRpbWVzDQogICAgK2Z1bmMgY190aW1lcyh0
bXMgKlRtcykgX2Nsb2NrX3QNCiAgICArZnVuYyBUaW1lcyh0bXMgKlRtcykgKHRpY2tzIHVpbnRw
dHIsIGVyciBlcnJvcikgew0KICAgICsJX3IgOj0gY190aW1lcyh0bXMpDQogICAgKwl0aWNrcyA9
ICh1aW50cHRyKShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0g
ZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAg
KwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJ
ZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBVbWFzay91bWFzaw0KICAgICsv
L2V4dGVybiB1bWFzaw0KICAgICtmdW5jIGNfdW1hc2sobWFzayBNb2RlX3QpIE1vZGVfdA0KICAg
ICtmdW5jIFVtYXNrKG1hc2sgaW50KSAob2xkbWFzayBpbnQpIHsNCiAgICArCV9yIDo9IGNfdW1h
c2soTW9kZV90KG1hc2spKQ0KICAgICsJb2xkbWFzayA9IChpbnQpKF9yKQ0KICAgICsJcmV0dXJu
DQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIg
Zm9yIFVubGluay91bmxpbmsNCiAgICArLy9leHRlcm4gdW5saW5rDQogICAgK2Z1bmMgY191bmxp
bmsocGF0aCAqYnl0ZSkgX0NfaW50DQogICAgK2Z1bmMgVW5saW5rKHBhdGggc3RyaW5nKSAoZXJy
IGVycm9yKSB7DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEsIGVyciA9IEJ5dGVQdHJG
cm9tU3RyaW5nKHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1cm4NCiAg
ICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3VubGluayhfcDEpDQog
ICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBf
ciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1
ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAg
ICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAg
ICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVXRpbWUvdXRpbWUNCiAg
ICArLy9leHRlcm4gdXRpbWUNCiAgICArZnVuYyBjX3V0aW1lKHBhdGggKmJ5dGUsIGJ1ZiAqVXRp
bWJ1ZikgX0NfaW50DQogICAgK2Z1bmMgVXRpbWUocGF0aCBzdHJpbmcsIGJ1ZiAqVXRpbWJ1Zikg
KGVyciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRl
UHRyRnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJu
DQogICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY191dGltZShfcDEs
IGJ1ZikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAg
ICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJy
bm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJu
byB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQog
ICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciB3cml0ZS93
cml0ZQ0KICAgICtmdW5jIHdyaXRlKGZkIGludCwgcCBbXWJ5dGUpIChuIGludCwgZXJyIGVycm9y
KSB7DQogICAgKwl2YXIgX3AyICpieXRlDQogICAgKwlpZiBsZW4ocCkgPiAwIHsNCiAgICArCQlf
cDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZwWzBdKSkNCiAgICArCX0gZWxzZSB7DQogICAg
KwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJfQ0KICAgICsJ
RW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfd3JpdGUoX0NfaW50KGZkKSwgX3AyLCBTaXpl
X3QobGVuKHApKSkNCiAgICArCW4gPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0K
ICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8g
PSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0
c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICAr
CX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdl
bmVyYXRlZCB3cmFwcGVyIGZvciB3cml0ZWxlbi93cml0ZQ0KICAgICtmdW5jIHdyaXRlbGVuKGZk
IGludCwgcCAqYnl0ZSwgbnAgaW50KSAobiBpbnQsIGVyciBlcnJvcikgew0KICAgICsJRW50ZXJz
eXNjYWxsKCkNCiAgICArCV9yIDo9IGNfd3JpdGUoX0NfaW50KGZkKSwgcCwgU2l6ZV90KG5wKSkN
CiAgICArCW4gPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJy
bm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygp
DQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQog
ICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJl
dHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBtdW5tYXAvbXVubWFwDQogICAgKy8vZXh0ZXJuIG11bm1hcA0KICAgICtmdW5jIGNf
bXVubWFwKGFkZHIgKmJ5dGUsIGxlbmd0aCBTaXplX3QpIF9DX2ludA0KICAgICtmdW5jIG11bm1h
cChhZGRyIHVpbnRwdHIsIGxlbmd0aCB1aW50cHRyKSAoZXJyIGVycm9yKSB7DQogICAgKwlFbnRl
cnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19tdW5tYXAoKCpieXRlKSh1bnNhZmUuUG9pbnRlcihh
ZGRyKSksIFNpemVfdChsZW5ndGgpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRF
cnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5v
KCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkN
CiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJ
cmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdy
YXBwZXIgZm9yIE1hZHZpc2UvbWFkdmlzZQ0KICAgICsvL2V4dGVybiBtYWR2aXNlDQogICAgK2Z1
bmMgY19tYWR2aXNlKGFkZHIgKmJ5dGUsIGxlbiBTaXplX3QsIGFkdmljZSBfQ19pbnQpIF9DX2lu
dA0KICAgICtmdW5jIE1hZHZpc2UoYiBbXWJ5dGUsIGFkdmljZSBpbnQpIChlcnIgZXJyb3IpIHsN
CiAgICArCXZhciBfcDEgKmJ5dGUNCiAgICArCWlmIGxlbihiKSA+IDAgew0KICAgICsJCV9wMSA9
ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJmJbMF0pKQ0KICAgICsJfSBlbHNlIHsNCiAgICArCQlf
cDEgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZfemVybykpDQogICAgKwl9DQogICAgKwlFbnRl
cnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19tYWR2aXNlKF9wMSwgU2l6ZV90KGxlbihiKSksIF9D
X2ludChhZHZpY2UpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBm
YWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICAr
CQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlm
IHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQog
ICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9y
IE1wcm90ZWN0L21wcm90ZWN0DQogICAgKy8vZXh0ZXJuIG1wcm90ZWN0DQogICAgK2Z1bmMgY19t
cHJvdGVjdChhZGRyICpieXRlLCBsZW4gU2l6ZV90LCBwcm90IF9DX2ludCkgX0NfaW50DQogICAg
K2Z1bmMgTXByb3RlY3QoYiBbXWJ5dGUsIHByb3QgaW50KSAoZXJyIGVycm9yKSB7DQogICAgKwl2
YXIgX3AxICpieXRlDQogICAgKwlpZiBsZW4oYikgPiAwIHsNCiAgICArCQlfcDEgPSAoKmJ5dGUp
KHVuc2FmZS5Qb2ludGVyKCZiWzBdKSkNCiAgICArCX0gZWxzZSB7DQogICAgKwkJX3AxID0gKCpi
eXRlKSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxs
KCkNCiAgICArCV9yIDo9IGNfbXByb3RlY3QoX3AxLCBTaXplX3QobGVuKGIpKSwgX0NfaW50KHBy
b3QpKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAg
ICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJu
byA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5v
IHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAg
ICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIE1sb2NrL21s
b2NrDQogICAgKy8vZXh0ZXJuIG1sb2NrDQogICAgK2Z1bmMgY19tbG9jayhhZGRyICpieXRlLCBs
ZW4gU2l6ZV90KSBfQ19pbnQNCiAgICArZnVuYyBNbG9jayhiIFtdYnl0ZSkgKGVyciBlcnJvcikg
ew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAgICsJaWYgbGVuKGIpID4gMCB7DQogICAgKwkJX3Ax
ID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkpDQogICAgKwl9IGVsc2Ugew0KICAgICsJ
CV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICArCX0NCiAgICArCUVu
dGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX21sb2NrKF9wMSwgU2l6ZV90KGxlbihiKSkpDQog
ICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBf
ciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1
ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAg
ICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAg
ICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTXVubG9jay9tdW5sb2Nr
DQogICAgKy8vZXh0ZXJuIG11bmxvY2sNCiAgICArZnVuYyBjX211bmxvY2soYWRkciAqYnl0ZSwg
bGVuIFNpemVfdCkgX0NfaW50DQogICAgK2Z1bmMgTXVubG9jayhiIFtdYnl0ZSkgKGVyciBlcnJv
cikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0KICAgICsJaWYgbGVuKGIpID4gMCB7DQogICAgKwkJ
X3AxID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmYlswXSkpDQogICAgKwl9IGVsc2Ugew0KICAg
ICsJCV9wMSA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICArCX0NCiAgICAr
CUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX211bmxvY2soX3AxLCBTaXplX3QobGVuKGIp
KSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAr
CWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8g
PSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBNbG9ja2FsbC9t
bG9ja2FsbA0KICAgICsvL2V4dGVybiBtbG9ja2FsbA0KICAgICtmdW5jIGNfbWxvY2thbGwoZmxh
Z3MgX0NfaW50KSBfQ19pbnQNCiAgICArZnVuYyBNbG9ja2FsbChmbGFncyBpbnQpIChlcnIgZXJy
b3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX21sb2NrYWxsKF9DX2lu
dChmbGFncykpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNl
DQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNl
dEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0
RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICAr
fQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTXVu
bG9ja2FsbC9tdW5sb2NrYWxsDQogICAgKy8vZXh0ZXJuIG11bmxvY2thbGwNCiAgICArZnVuYyBj
X211bmxvY2thbGwoKSBfQ19pbnQNCiAgICArZnVuYyBNdW5sb2NrYWxsKCkgKGVyciBlcnJvcikg
ew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfbXVubG9ja2FsbCgpDQogICAg
Kwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8
IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0K
ICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJ
CWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICAr
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVGNnZXRhdHRyL3RjZ2V0YXR0
cg0KICAgICsvL2V4dGVybiB0Y2dldGF0dHINCiAgICArZnVuYyBjX3RjZ2V0YXR0cihmZCBfQ19p
bnQsIHAgKlRlcm1pb3MpIF9DX2ludA0KICAgICtmdW5jIFRjZ2V0YXR0cihmZCBpbnQsIHAgKlRl
cm1pb3MpIChlcnIgZXJyb3IpIHsNCiAgICArCV9yIDo9IGNfdGNnZXRhdHRyKF9DX2ludChmZCks
IHApDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAg
KwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5v
ID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5v
DQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGlj
YWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVGNzZXRhdHRyL3Rjc2V0YXR0cg0KICAgICsvL2V4
dGVybiB0Y3NldGF0dHINCiAgICArZnVuYyBjX3Rjc2V0YXR0cihmZCBfQ19pbnQsIGFjdGlvbnMg
X0NfaW50LCBwICpUZXJtaW9zKSBfQ19pbnQNCiAgICArZnVuYyBUY3NldGF0dHIoZmQgaW50LCBh
Y3Rpb25zIGludCwgcCAqVGVybWlvcykgKGVyciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxs
KCkNCiAgICArCV9yIDo9IGNfdGNzZXRhdHRyKF9DX2ludChmZCksIF9DX2ludChhY3Rpb25zKSwg
cCkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAr
CWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8g
PSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBzeXNjb25mL3N5
c2NvbmYNCiAgICArLy9leHRlcm4gc3lzY29uZg0KICAgICtmdW5jIGNfc3lzY29uZihuYW1lIF9D
X2ludCkgX0NfbG9uZw0KICAgICtmdW5jIHN5c2NvbmYobmFtZSBpbnQpIChyZXQgaW50NjQsIGVy
ciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfc3lzY29uZihf
Q19pbnQobmFtZSkpDQogICAgKwlyZXQgPSAoaW50NjQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0K
ICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEZzdGF0L2ZzdGF0NjQNCiAgICArLy9leHRlcm4gZnN0
YXQ2NA0KICAgICtmdW5jIGNfZnN0YXQ2NChmZCBfQ19pbnQsIHN0YXQgKlN0YXRfdCkgX0NfaW50
DQogICAgK2Z1bmMgRnN0YXQoZmQgaW50LCBzdGF0ICpTdGF0X3QpIChlcnIgZXJyb3IpIHsNCiAg
ICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX2ZzdGF0NjQoX0NfaW50KGZkKSwgc3Rh
dCkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAr
CWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8g
PSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7
DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAg
Kw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBGdHJ1bmNhdGUv
ZnRydW5jYXRlNjQNCiAgICArLy9leHRlcm4gZnRydW5jYXRlNjQNCiAgICArZnVuYyBjX2Z0cnVu
Y2F0ZTY0KGZkIF9DX2ludCwgbGVuZ3RoIE9mZnNldF90KSBfQ19pbnQNCiAgICArZnVuYyBGdHJ1
bmNhdGUoZmQgaW50LCBsZW5ndGggaW50NjQpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lz
Y2FsbCgpDQogICAgKwlfciA6PSBjX2Z0cnVuY2F0ZTY0KF9DX2ludChmZCksIE9mZnNldF90KGxl
bmd0aCkpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQog
ICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVy
cm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJy
bm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0K
ICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgR2V0cmxp
bWl0L2dldHJsaW1pdDY0DQogICAgKy8vZXh0ZXJuIGdldHJsaW1pdDY0DQogICAgK2Z1bmMgY19n
ZXRybGltaXQ2NChyZXNvdXJjZSBfQ19pbnQsIHJsaW0gKlJsaW1pdCkgX0NfaW50DQogICAgK2Z1
bmMgR2V0cmxpbWl0KHJlc291cmNlIGludCwgcmxpbSAqUmxpbWl0KSAoZXJyIGVycm9yKSB7DQog
ICAgKwlfciA6PSBjX2dldHJsaW1pdDY0KF9DX2ludChyZXNvdXJjZSksIHJsaW0pDQogICAgKwl2
YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAg
ew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAg
ICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQog
ICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0
ZWQgd3JhcHBlciBmb3IgTHN0YXQvbHN0YXQ2NA0KICAgICsvL2V4dGVybiBsc3RhdDY0DQogICAg
K2Z1bmMgY19sc3RhdDY0KHBhdGggKmJ5dGUsIHN0YXQgKlN0YXRfdCkgX0NfaW50DQogICAgK2Z1
bmMgTHN0YXQocGF0aCBzdHJpbmcsIHN0YXQgKlN0YXRfdCkgKGVyciBlcnJvcikgew0KICAgICsJ
dmFyIF9wMSAqYnl0ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQ0K
ICAgICsJaWYgZXJyICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRl
cnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19sc3RhdDY0KF9wMSwgc3RhdCkNCiAgICArCXZhciBl
cnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQog
ICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9
DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0g
ZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBtbWFwL21tYXA2NA0KICAgICsvL2V4dGVy
biBtbWFwNjQNCiAgICArZnVuYyBjX21tYXA2NChhZGRyICpieXRlLCBsZW5ndGggU2l6ZV90LCBw
cm90IF9DX2ludCwgZmxhZ3MgX0NfaW50LCBmZCBfQ19pbnQsIG9mZnNldCBPZmZzZXRfdCkgKmJ5
dGUNCiAgICArZnVuYyBtbWFwKGFkZHIgdWludHB0ciwgbGVuZ3RoIHVpbnRwdHIsIHByb3QgaW50
LCBmbGFncyBpbnQsIGZkIGludCwgb2Zmc2V0IGludDY0KSAoeGFkZHIgdWludHB0ciwgZXJyIGVy
cm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19tbWFwNjQoKCpieXRl
KSh1bnNhZmUuUG9pbnRlcihhZGRyKSksIFNpemVfdChsZW5ndGgpLCBfQ19pbnQocHJvdCksIF9D
X2ludChmbGFncyksIF9DX2ludChmZCksIE9mZnNldF90KG9mZnNldCkpDQogICAgKwl4YWRkciA9
ICh1aW50cHRyKSh1bnNhZmUuUG9pbnRlcihfcikpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAg
ICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA9PSBuaWwgew0KICAgICsJCWVycm5v
ID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhp
dHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAg
Kwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3IgT3Blbi9fX2dvX29wZW42NA0KICAgICsvL2V4dGVybiBfX2dv
X29wZW42NA0KICAgICtmdW5jIGNfX19nb19vcGVuNjQocGF0aCAqYnl0ZSwgbW9kZSBfQ19pbnQs
IHBlcm0gTW9kZV90KSBfQ19pbnQNCiAgICArZnVuYyBPcGVuKHBhdGggc3RyaW5nLCBtb2RlIGlu
dCwgcGVybSB1aW50MzIpIChmZCBpbnQsIGVyciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0
ZQ0KICAgICsJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJy
ICE9IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0K
ICAgICsJX3IgOj0gY19fX2dvX29wZW42NChfcDEsIF9DX2ludChtb2RlKSwgTW9kZV90KHBlcm0p
KQ0KICAgICsJZmQgPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0
RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJu
bygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgp
DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICAr
CXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBQcmVhZC9wcmVhZDY0DQogICAgKy8vZXh0ZXJuIHByZWFkNjQNCiAgICArZnVu
YyBjX3ByZWFkNjQoZmQgX0NfaW50LCBidWYgKmJ5dGUsIGNvdW50IFNpemVfdCwgb2Zmc2V0IE9m
ZnNldF90KSBTc2l6ZV90DQogICAgK2Z1bmMgUHJlYWQoZmQgaW50LCBwIFtdYnl0ZSwgb2Zmc2V0
IGludDY0KSAobiBpbnQsIGVyciBlcnJvcikgew0KICAgICsJdmFyIF9wMiAqYnl0ZQ0KICAgICsJ
aWYgbGVuKHApID4gMCB7DQogICAgKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRlcigmcFsw
XSkpDQogICAgKwl9IGVsc2Ugew0KICAgICsJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIo
Jl96ZXJvKSkNCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3By
ZWFkNjQoX0NfaW50KGZkKSwgX3AyLCBTaXplX3QobGVuKHApKSwgT2Zmc2V0X3Qob2Zmc2V0KSkN
CiAgICArCW4gPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJy
bm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygp
DQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQog
ICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJl
dHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFw
cGVyIGZvciBQd3JpdGUvcHdyaXRlNjQNCiAgICArLy9leHRlcm4gcHdyaXRlNjQNCiAgICArZnVu
YyBjX3B3cml0ZTY0KGZkIF9DX2ludCwgYnVmICpieXRlLCBjb3VudCBTaXplX3QsIG9mZnNldCBP
ZmZzZXRfdCkgU3NpemVfdA0KICAgICtmdW5jIFB3cml0ZShmZCBpbnQsIHAgW11ieXRlLCBvZmZz
ZXQgaW50NjQpIChuIGludCwgZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AyICpieXRlDQogICAg
KwlpZiBsZW4ocCkgPiAwIHsNCiAgICArCQlfcDIgPSAoKmJ5dGUpKHVuc2FmZS5Qb2ludGVyKCZw
WzBdKSkNCiAgICArCX0gZWxzZSB7DQogICAgKwkJX3AyID0gKCpieXRlKSh1bnNhZmUuUG9pbnRl
cigmX3plcm8pKQ0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNf
cHdyaXRlNjQoX0NfaW50KGZkKSwgX3AyLCBTaXplX3QobGVuKHApKSwgT2Zmc2V0X3Qob2Zmc2V0
KSkNCiAgICArCW4gPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0
RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJu
bygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgp
DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICAr
CXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3
cmFwcGVyIGZvciBTZWVrL2xzZWVrNjQNCiAgICArLy9leHRlcm4gbHNlZWs2NA0KICAgICtmdW5j
IGNfbHNlZWs2NChmZCBfQ19pbnQsIG9mZnNldCBPZmZzZXRfdCwgd2hlbmNlIF9DX2ludCkgT2Zm
c2V0X3QNCiAgICArZnVuYyBTZWVrKGZkIGludCwgb2Zmc2V0IGludDY0LCB3aGVuY2UgaW50KSAo
b2ZmIGludDY0LCBlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6
PSBjX2xzZWVrNjQoX0NfaW50KGZkKSwgT2Zmc2V0X3Qob2Zmc2V0KSwgX0NfaW50KHdoZW5jZSkp
DQogICAgKwlvZmYgPSAoaW50NjQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlz
ZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVy
cm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxs
KCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAg
ICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVk
IHdyYXBwZXIgZm9yIFNldHJsaW1pdC9zZXRybGltaXQ2NA0KICAgICsvL2V4dGVybiBzZXRybGlt
aXQ2NA0KICAgICtmdW5jIGNfc2V0cmxpbWl0NjQocmVzb3VyY2UgaW50LCBybGltICpSbGltaXQp
IF9DX2ludA0KICAgICtmdW5jIFNldHJsaW1pdChyZXNvdXJjZSBpbnQsIHJsaW0gKlJsaW1pdCkg
KGVyciBlcnJvcikgew0KICAgICsJX3IgOj0gY19zZXRybGltaXQ2NChpbnQocmVzb3VyY2UpLCBy
bGltKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAg
ICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJu
byA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJu
bw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIFN0YXQvc3RhdDY0DQogICAgKy8vZXh0ZXJuIHN0
YXQ2NA0KICAgICtmdW5jIGNfc3RhdDY0KHBhdGggKmJ5dGUsIHN0YXQgKlN0YXRfdCkgX0NfaW50
DQogICAgK2Z1bmMgU3RhdChwYXRoIHN0cmluZywgc3RhdCAqU3RhdF90KSAoZXJyIGVycm9yKSB7
DQogICAgKwl2YXIgX3AxICpieXRlDQogICAgKwlfcDEsIGVyciA9IEJ5dGVQdHJGcm9tU3RyaW5n
KHBhdGgpDQogICAgKwlpZiBlcnIgIT0gbmlsIHsNCiAgICArCQlyZXR1cm4NCiAgICArCX0NCiAg
ICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3N0YXQ2NChfcDEsIHN0YXQpDQogICAg
Kwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8
IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0K
ICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJ
CWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICAr
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgVHJ1bmNhdGUvdHJ1bmNhdGU2
NA0KICAgICsvL2V4dGVybiB0cnVuY2F0ZTY0DQogICAgK2Z1bmMgY190cnVuY2F0ZTY0KHBhdGgg
KmJ5dGUsIGxlbmd0aCBPZmZzZXRfdCkgX0NfaW50DQogICAgK2Z1bmMgVHJ1bmNhdGUocGF0aCBz
dHJpbmcsIGxlbmd0aCBpbnQ2NCkgKGVyciBlcnJvcikgew0KICAgICsJdmFyIF9wMSAqYnl0ZQ0K
ICAgICsJX3AxLCBlcnIgPSBCeXRlUHRyRnJvbVN0cmluZyhwYXRoKQ0KICAgICsJaWYgZXJyICE9
IG5pbCB7DQogICAgKwkJcmV0dXJuDQogICAgKwl9DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAg
ICsJX3IgOj0gY190cnVuY2F0ZTY0KF9wMSwgT2Zmc2V0X3QobGVuZ3RoKSkNCiAgICArCXZhciBl
cnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQog
ICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9
DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0g
ZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRv
bWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBVbmFtZS91bmFtZQ0KICAgICsvL2V4dGVy
biB1bmFtZQ0KICAgICtmdW5jIGNfdW5hbWUoYnVmICpVdHNuYW1lKSBfQ19pbnQNCiAgICArZnVu
YyBVbmFtZShidWYgKlV0c25hbWUpIChlcnIgZXJyb3IpIHsNCiAgICArCV9yIDo9IGNfdW5hbWUo
YnVmKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAg
ICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJu
byA9IHRydWUNCiAgICArCX0NCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJu
bw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRp
Y2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHdhaXQ0L3dhaXQ0DQogICAgKy8vZXh0ZXJuIHdh
aXQ0DQogICAgK2Z1bmMgY193YWl0NChwaWQgUGlkX3QsIHN0YXR1cyAqX0NfaW50LCBvcHRpb25z
IF9DX2ludCwgcnVzYWdlICpSdXNhZ2UpIFBpZF90DQogICAgK2Z1bmMgd2FpdDQocGlkIFBpZF90
LCBzdGF0dXMgKl9DX2ludCwgb3B0aW9ucyBpbnQsIHJ1c2FnZSAqUnVzYWdlKSAod3BpZCBQaWRf
dCwgZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY193YWl0
NChQaWRfdChwaWQpLCBzdGF0dXMsIF9DX2ludChvcHRpb25zKSwgcnVzYWdlKQ0KICAgICsJd3Bp
ZCA9IChQaWRfdCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9
IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAg
ICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJ
aWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4N
CiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgYWNjZXB0L2FjY2VwdA0KICAgICsvL2V4dGVybiBhY2NlcHQNCiAgICArZnVuYyBjX2FjY2Vw
dChmZCBfQ19pbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVuX3QpIF9DX2ludA0K
ICAgICtmdW5jIGFjY2VwdChmZCBpbnQsIHNhICpSYXdTb2NrYWRkckFueSwgbGVuICpTb2NrbGVu
X3QpIChuZmQgaW50LCBlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlf
ciA6PSBjX2FjY2VwdChfQ19pbnQoZmQpLCBzYSwgbGVuKQ0KICAgICsJbmZkID0gKGludCkoX3Ip
DQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlp
ZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0g
dHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0K
ICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsN
CiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgZ2V0c29ja25hbWUv
Z2V0c29ja25hbWUNCiAgICArLy9leHRlcm4gZ2V0c29ja25hbWUNCiAgICArZnVuYyBjX2dldHNv
Y2tuYW1lKGZkIF9DX2ludCwgc2EgKlJhd1NvY2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCkgX0Nf
aW50DQogICAgK2Z1bmMgZ2V0c29ja25hbWUoZmQgaW50LCBzYSAqUmF3U29ja2FkZHJBbnksIGxl
biAqU29ja2xlbl90KSAoZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX2dldHNvY2tuYW1lKF9D
X2ludChmZCksIHNhLCBsZW4pDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5v
IDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0K
ICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAg
ICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAg
ICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgZ2V0cGVlcm5hbWUvZ2V0
cGVlcm5hbWUNCiAgICArLy9leHRlcm4gZ2V0cGVlcm5hbWUNCiAgICArZnVuYyBjX2dldHBlZXJu
YW1lKGZkIF9DX2ludCwgc2EgKlJhd1NvY2thZGRyQW55LCBsZW4gKlNvY2tsZW5fdCkgX0NfaW50
DQogICAgK2Z1bmMgZ2V0cGVlcm5hbWUoZmQgaW50LCBzYSAqUmF3U29ja2FkZHJBbnksIGxlbiAq
U29ja2xlbl90KSAoZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX2dldHBlZXJuYW1lKF9DX2lu
dChmZCksIHNhLCBsZW4pDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9
IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAg
ICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJ
CWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICAr
Ly8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3Igc2V0c29ja29wdC9zZXRzb2Nr
b3B0DQogICAgKy8vZXh0ZXJuIHNldHNvY2tvcHQNCiAgICArZnVuYyBjX3NldHNvY2tvcHQocyBf
Q19pbnQsIGxldmVsIF9DX2ludCwgb3B0bmFtZSBfQ19pbnQsIHZhbCAqYnl0ZSwgdmFsbGVuIFNv
Y2tsZW5fdCkgX0NfaW50DQogICAgK2Z1bmMgc2V0c29ja29wdChzIGludCwgbGV2ZWwgaW50LCBu
YW1lIGludCwgdmFsIHVuc2FmZS5Qb2ludGVyLCB2YWxsZW4gU29ja2xlbl90KSAoZXJyIGVycm9y
KSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0KICAgICsJX3IgOj0gY19zZXRzb2Nrb3B0KF9DX2lu
dChzKSwgX0NfaW50KGxldmVsKSwgX0NfaW50KG5hbWUpLCAoKmJ5dGUpKHZhbCksIFNvY2tsZW5f
dCh2YWxsZW4pKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxz
ZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlz
ZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNl
dEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAg
K30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIHJl
Y3Zmcm9tL3JlY3Zmcm9tDQogICAgKy8vZXh0ZXJuIHJlY3Zmcm9tDQogICAgK2Z1bmMgY19yZWN2
ZnJvbShmZCBfQ19pbnQsIGJ1ZiAqYnl0ZSwgbGVuIFNpemVfdCwgZmxhZ3MgX0NfaW50LCBmcm9t
ICpSYXdTb2NrYWRkckFueSwgZnJvbWxlbiAqU29ja2xlbl90KSBTc2l6ZV90DQogICAgK2Z1bmMg
cmVjdmZyb20oZmQgaW50LCBwIFtdYnl0ZSwgZmxhZ3MgaW50LCBmcm9tICpSYXdTb2NrYWRkckFu
eSwgZnJvbWxlbiAqU29ja2xlbl90KSAobiBpbnQsIGVyciBlcnJvcikgew0KICAgICsJdmFyIF9w
MiAqYnl0ZQ0KICAgICsJaWYgbGVuKHApID4gMCB7DQogICAgKwkJX3AyID0gKCpieXRlKSh1bnNh
ZmUuUG9pbnRlcigmcFswXSkpDQogICAgKwl9IGVsc2Ugew0KICAgICsJCV9wMiA9ICgqYnl0ZSko
dW5zYWZlLlBvaW50ZXIoJl96ZXJvKSkNCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQog
ICAgKwlfciA6PSBjX3JlY3Zmcm9tKF9DX2ludChmZCksIF9wMiwgU2l6ZV90KGxlbihwKSksIF9D
X2ludChmbGFncyksIGZyb20sIGZyb21sZW4pDQogICAgKwluID0gKGludCkoX3IpDQogICAgKwl2
YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAg
ew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAg
ICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVy
ciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8g
QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBmb3IgTGlzdGVuL2xpc3Rlbg0KICAgICsv
L2V4dGVybiBsaXN0ZW4NCiAgICArZnVuYyBjX2xpc3RlbihmZCBfQ19pbnQsIG4gX0NfaW50KSBf
Q19pbnQNCiAgICArZnVuYyBMaXN0ZW4oZmQgaW50LCBuIGludCkgKGVyciBlcnJvcikgew0KICAg
ICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfbGlzdGVuKF9DX2ludChmZCksIF9DX2lu
dChuKSkNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAg
ICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJy
bm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJu
byB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQog
ICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBTaHV0ZG93
bi9zaHV0ZG93bg0KICAgICsvL2V4dGVybiBzaHV0ZG93bg0KICAgICtmdW5jIGNfc2h1dGRvd24o
ZmQgX0NfaW50LCBob3cgX0NfaW50KSBfQ19pbnQNCiAgICArZnVuYyBTaHV0ZG93bihmZCBpbnQs
IGhvdyBpbnQpIChlcnIgZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6
PSBjX3NodXRkb3duKF9DX2ludChmZCksIF9DX2ludChob3cpKQ0KICAgICsJdmFyIGVycm5vIEVy
cm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQll
cnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICAr
CUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0K
ICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9tYXRpY2Fs
bHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIEVwb2xsQ3JlYXRlL2Vwb2xsX2NyZWF0ZQ0KICAgICsv
L2V4dGVybiBlcG9sbF9jcmVhdGUNCiAgICArZnVuYyBjX2Vwb2xsX2NyZWF0ZShzaXplIF9DX2lu
dCkgX0NfaW50DQogICAgK2Z1bmMgRXBvbGxDcmVhdGUoc2l6ZSBpbnQpIChmZCBpbnQsIGVyciBl
cnJvcikgew0KICAgICsJX3IgOj0gY19lcG9sbF9jcmVhdGUoX0NfaW50KHNpemUpKQ0KICAgICsJ
ZmQgPSAoaW50KShfcikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0g
ZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAg
KwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJ
ZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBFcG9sbENyZWF0ZTEvZXBvbGxf
Y3JlYXRlMQ0KICAgICsvL2V4dGVybiBlcG9sbF9jcmVhdGUxDQogICAgK2Z1bmMgY19lcG9sbF9j
cmVhdGUxKGZsYWdzIF9DX2ludCkgX0NfaW50DQogICAgK2Z1bmMgRXBvbGxDcmVhdGUxKGZsYWdz
IGludCkgKGZkIGludCwgZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX2Vwb2xsX2NyZWF0ZTEo
X0NfaW50KGZsYWdzKSkNCiAgICArCWZkID0gKGludCkoX3IpDQogICAgKwl2YXIgZXJybm8gRXJy
bm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVy
cm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJ
aWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1cm4N
CiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBlciBm
b3IgRXBvbGxDdGwvZXBvbGxfY3RsDQogICAgKy8vZXh0ZXJuIGVwb2xsX2N0bA0KICAgICtmdW5j
IGNfZXBvbGxfY3RsKGVwZmQgX0NfaW50LCBvcCBfQ19pbnQsIGZkIF9DX2ludCwgZXZlbnQgKkVw
b2xsRXZlbnQpIF9DX2ludA0KICAgICtmdW5jIEVwb2xsQ3RsKGVwZmQgaW50LCBvcCBpbnQsIGZk
IGludCwgZXZlbnQgKkVwb2xsRXZlbnQpIChlcnIgZXJyb3IpIHsNCiAgICArCV9yIDo9IGNfZXBv
bGxfY3RsKF9DX2ludChlcGZkKSwgX0NfaW50KG9wKSwgX0NfaW50KGZkKSwgZXZlbnQpDQogICAg
Kwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8
IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0K
ICAgICsJfQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9
DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5l
cmF0ZWQgd3JhcHBlciBmb3IgRXBvbGxXYWl0L2Vwb2xsX3dhaXQNCiAgICArLy9leHRlcm4gZXBv
bGxfd2FpdA0KICAgICtmdW5jIGNfZXBvbGxfd2FpdChlcGZkIF9DX2ludCwgZXZlbnRzICpFcG9s
bEV2ZW50LCBtYXhldmVudHMgX0NfaW50LCB0aW1lb3V0IF9DX2ludCkgX0NfaW50DQogICAgK2Z1
bmMgRXBvbGxXYWl0KGVwZmQgaW50LCBldmVudHMgW11FcG9sbEV2ZW50LCBtc2VjIGludCkgKG4g
aW50LCBlcnIgZXJyb3IpIHsNCiAgICArCXZhciBfcDIgKkVwb2xsRXZlbnQNCiAgICArCWlmIGxl
bihldmVudHMpID4gMCB7DQogICAgKwkJX3AyID0gKCpFcG9sbEV2ZW50KSh1bnNhZmUuUG9pbnRl
cigmZXZlbnRzWzBdKSkNCiAgICArCX0gZWxzZSB7DQogICAgKwkJX3AyID0gKCpFcG9sbEV2ZW50
KSh1bnNhZmUuUG9pbnRlcigmX3plcm8pKQ0KICAgICsJfQ0KICAgICsJRW50ZXJzeXNjYWxsKCkN
CiAgICArCV9yIDo9IGNfZXBvbGxfd2FpdChfQ19pbnQoZXBmZCksIF9wMiwgX0NfaW50KGxlbihl
dmVudHMpKSwgX0NfaW50KG1zZWMpKQ0KICAgICsJbiA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVy
cm5vIEVycm5vDQogICAgKwlzZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAg
ICArCQllcnJubyA9IEdldEVycm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0N
CiAgICArCUV4aXRzeXNjYWxsKCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBl
cnJubw0KICAgICsJfQ0KICAgICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgKy8vIEF1dG9t
YXRpY2FsbHkgZ2VuZXJhdGVkIHdyYXBwZXIgZm9yIGJpbmQvYmluZA0KICAgICsvL2V4dGVybiBi
aW5kDQogICAgK2Z1bmMgY19iaW5kKGZkIF9DX2ludCwgc2EgKlJhd1NvY2thZGRyQW55LCBsZW4g
U29ja2xlbl90KSBfQ19pbnQNCiAgICArZnVuYyBiaW5kKGZkIGludCwgc2EgKlJhd1NvY2thZGRy
QW55LCBsZW4gU29ja2xlbl90KSAoZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5c2NhbGwoKQ0K
ICAgICsJX3IgOj0gY19iaW5kKF9DX2ludChmZCksIHNhLCBTb2NrbGVuX3QobGVuKSkNCiAgICAr
CXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwg
MCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQog
ICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJ
ZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBjb25uZWN0L2Nvbm5lY3QNCiAg
ICArLy9leHRlcm4gY29ubmVjdA0KICAgICtmdW5jIGNfY29ubmVjdChzIF9DX2ludCwgYWRkciAq
UmF3U29ja2FkZHJBbnksIGFkZHJsZW4gU29ja2xlbl90KSBfQ19pbnQNCiAgICArZnVuYyBjb25u
ZWN0KHMgaW50LCBhZGRyICpSYXdTb2NrYWRkckFueSwgYWRkcmxlbiBTb2NrbGVuX3QpIChlcnIg
ZXJyb3IpIHsNCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX2Nvbm5lY3QoX0Nf
aW50KHMpLCBhZGRyLCBTb2NrbGVuX3QoYWRkcmxlbikpDQogICAgKwl2YXIgZXJybm8gRXJybm8N
CiAgICArCXNldEVycm5vIDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5v
ID0gR2V0RXJybm8oKQ0KICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhp
dHN5c2NhbGwoKQ0KICAgICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAg
Kwl9DQogICAgKwlyZXR1cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBn
ZW5lcmF0ZWQgd3JhcHBlciBmb3Igc29ja2V0L3NvY2tldA0KICAgICsvL2V4dGVybiBzb2NrZXQN
CiAgICArZnVuYyBjX3NvY2tldChkb21haW4gX0NfaW50LCB0eXAgX0NfaW50LCBwcm90b2NvbCBf
Q19pbnQpIF9DX2ludA0KICAgICtmdW5jIHNvY2tldChkb21haW4gaW50LCB0eXAgaW50LCBwcm90
byBpbnQpIChmZCBpbnQsIGVyciBlcnJvcikgew0KICAgICsJX3IgOj0gY19zb2NrZXQoX0NfaW50
KGRvbWFpbiksIF9DX2ludCh0eXApLCBfQ19pbnQocHJvdG8pKQ0KICAgICsJZmQgPSAoaW50KShf
cikNCiAgICArCXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICAr
CWlmIF9yIDwgMCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8g
PSB0cnVlDQogICAgKwl9DQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8N
CiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNh
bGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBzb2NrZXRwYWlyL3NvY2tldHBhaXINCiAgICArLy9l
eHRlcm4gc29ja2V0cGFpcg0KICAgICtmdW5jIGNfc29ja2V0cGFpcihkb21haW4gX0NfaW50LCB0
eXAgX0NfaW50LCBwcm90b2NvbCBfQ19pbnQsIGZkICpbMl1fQ19pbnQpIF9DX2ludA0KICAgICtm
dW5jIHNvY2tldHBhaXIoZG9tYWluIGludCwgdHlwIGludCwgcHJvdG8gaW50LCBmZCAqWzJdX0Nf
aW50KSAoZXJyIGVycm9yKSB7DQogICAgKwlfciA6PSBjX3NvY2tldHBhaXIoX0NfaW50KGRvbWFp
biksIF9DX2ludCh0eXApLCBfQ19pbnQocHJvdG8pLCBmZCkNCiAgICArCXZhciBlcnJubyBFcnJu
bw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwgMCB7DQogICAgKwkJZXJy
bm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQogICAgKwl9DQogICAgKwlp
ZiBzZXRFcnJubyB7DQogICAgKwkJZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0K
ICAgICt9DQogICAgKw0KICAgICsvLyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZv
ciBnZXRzb2Nrb3B0L2dldHNvY2tvcHQNCiAgICArLy9leHRlcm4gZ2V0c29ja29wdA0KICAgICtm
dW5jIGNfZ2V0c29ja29wdChzIF9DX2ludCwgbGV2ZWwgX0NfaW50LCBuYW1lIF9DX2ludCwgdmFs
ICpieXRlLCB2YWxsZW4gKlNvY2tsZW5fdCkgX0NfaW50DQogICAgK2Z1bmMgZ2V0c29ja29wdChz
IGludCwgbGV2ZWwgaW50LCBuYW1lIGludCwgdmFsIHVuc2FmZS5Qb2ludGVyLCB2YWxsZW4gKlNv
Y2tsZW5fdCkgKGVyciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9
IGNfZ2V0c29ja29wdChfQ19pbnQocyksIF9DX2ludChsZXZlbCksIF9DX2ludChuYW1lKSwgKCpi
eXRlKSh2YWwpLCB2YWxsZW4pDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5v
IDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0K
ICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAg
ICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1
cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3Igc2VuZHRvL3NlbmR0bw0KICAgICsvL2V4dGVybiBzZW5kdG8NCiAgICArZnVuYyBjX3Nl
bmR0byhzIF9DX2ludCwgYnVmICpieXRlLCBsZW4gU2l6ZV90LCBmbGFncyBfQ19pbnQsIHRvICpS
YXdTb2NrYWRkckFueSwgdG9sZW4gU29ja2xlbl90KSBTc2l6ZV90DQogICAgK2Z1bmMgc2VuZHRv
KHMgaW50LCBidWYgW11ieXRlLCBmbGFncyBpbnQsIHRvICpSYXdTb2NrYWRkckFueSwgdG9sZW4g
U29ja2xlbl90KSAoZXJyIGVycm9yKSB7DQogICAgKwl2YXIgX3AyICpieXRlDQogICAgKwlpZiBs
ZW4oYnVmKSA+IDAgew0KICAgICsJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIoJmJ1Zlsw
XSkpDQogICAgKwl9IGVsc2Ugew0KICAgICsJCV9wMiA9ICgqYnl0ZSkodW5zYWZlLlBvaW50ZXIo
Jl96ZXJvKSkNCiAgICArCX0NCiAgICArCUVudGVyc3lzY2FsbCgpDQogICAgKwlfciA6PSBjX3Nl
bmR0byhfQ19pbnQocyksIF9wMiwgU2l6ZV90KGxlbihidWYpKSwgX0NfaW50KGZsYWdzKSwgdG8s
IFNvY2tsZW5fdCh0b2xlbikpDQogICAgKwl2YXIgZXJybm8gRXJybm8NCiAgICArCXNldEVycm5v
IDo9IGZhbHNlDQogICAgKwlpZiBfciA8IDAgew0KICAgICsJCWVycm5vID0gR2V0RXJybm8oKQ0K
ICAgICsJCXNldEVycm5vID0gdHJ1ZQ0KICAgICsJfQ0KICAgICsJRXhpdHN5c2NhbGwoKQ0KICAg
ICsJaWYgc2V0RXJybm8gew0KICAgICsJCWVyciA9IGVycm5vDQogICAgKwl9DQogICAgKwlyZXR1
cm4NCiAgICArfQ0KICAgICsNCiAgICArLy8gQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgd3JhcHBl
ciBmb3IgcmVjdm1zZy9yZWN2bXNnDQogICAgKy8vZXh0ZXJuIHJlY3Ztc2cNCiAgICArZnVuYyBj
X3JlY3Ztc2cocyBfQ19pbnQsIG1zZyAqTXNnaGRyLCBmbGFncyBfQ19pbnQpIFNzaXplX3QNCiAg
ICArZnVuYyByZWN2bXNnKHMgaW50LCBtc2cgKk1zZ2hkciwgZmxhZ3MgaW50KSAobiBpbnQsIGVy
ciBlcnJvcikgew0KICAgICsJRW50ZXJzeXNjYWxsKCkNCiAgICArCV9yIDo9IGNfcmVjdm1zZyhf
Q19pbnQocyksIG1zZywgX0NfaW50KGZsYWdzKSkNCiAgICArCW4gPSAoaW50KShfcikNCiAgICAr
CXZhciBlcnJubyBFcnJubw0KICAgICsJc2V0RXJybm8gOj0gZmFsc2UNCiAgICArCWlmIF9yIDwg
MCB7DQogICAgKwkJZXJybm8gPSBHZXRFcnJubygpDQogICAgKwkJc2V0RXJybm8gPSB0cnVlDQog
ICAgKwl9DQogICAgKwlFeGl0c3lzY2FsbCgpDQogICAgKwlpZiBzZXRFcnJubyB7DQogICAgKwkJ
ZXJyID0gZXJybm8NCiAgICArCX0NCiAgICArCXJldHVybg0KICAgICt9DQogICAgKw0KICAgICsv
LyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3cmFwcGVyIGZvciBzZW5kbXNnL3NlbmRtc2cNCiAg
ICArLy9leHRlcm4gc2VuZG1zZw0KICAgICtmdW5jIGNfc2VuZG1zZyhzIF9DX2ludCwgbXNnICpN
c2doZHIsIGZsYWdzIF9DX2ludCkgU3NpemVfdA0KICAgICtmdW5jIHNlbmRtc2cocyBpbnQsIG1z
ZyAqTXNnaGRyLCBmbGFncyBpbnQpIChuIGludCwgZXJyIGVycm9yKSB7DQogICAgKwlFbnRlcnN5
c2NhbGwoKQ0KICAgICsJX3IgOj0gY19zZW5kbXNnKF9DX2ludChzKSwgbXNnLCBfQ19pbnQoZmxh
Z3MpKQ0KICAgICsJbiA9IChpbnQpKF9yKQ0KICAgICsJdmFyIGVycm5vIEVycm5vDQogICAgKwlz
ZXRFcnJubyA6PSBmYWxzZQ0KICAgICsJaWYgX3IgPCAwIHsNCiAgICArCQllcnJubyA9IEdldEVy
cm5vKCkNCiAgICArCQlzZXRFcnJubyA9IHRydWUNCiAgICArCX0NCiAgICArCUV4aXRzeXNjYWxs
KCkNCiAgICArCWlmIHNldEVycm5vIHsNCiAgICArCQllcnIgPSBlcnJubw0KICAgICsJfQ0KICAg
ICsJcmV0dXJuDQogICAgK30NCiAgICArDQogICAgZGlmZiAtLWdpdCBhL2dlbmVyYXRlZC9ydW50
aW1lX3N5c2luZm8uZ28gYi9nZW5lcmF0ZWQvcnVudGltZV9zeXNpbmZvLmdvDQogICAgbmV3IGZp
bGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi42NzcwMmQ1DQogICAgLS0tIC9kZXYv
bnVsbA0KICAgICsrKyBiL2dlbmVyYXRlZC9ydW50aW1lX3N5c2luZm8uZ28NCiAgICBAQCAtMCww
ICsxLDYyMTkgQEANCiAgICArcGFja2FnZSBydW50aW1lDQogICAgK3R5cGUgX3B0cmRpZmZfdCBp
bnQ2NA0KICAgICt0eXBlIF9zaXplX3QgdWludDY0DQogICAgK3R5cGUgX3djaGFyX3QgaW50MzIN
CiAgICArdHlwZSBfX191X2NoYXIgdWludDgNCiAgICArdHlwZSBfX191X3Nob3J0IHVpbnQxNg0K
ICAgICt0eXBlIF9fX3VfaW50IHVpbnQzMg0KICAgICt0eXBlIF9fX3VfbG9uZyB1aW50NjQNCiAg
ICArdHlwZSBfX19pbnQ4X3QgaW50OA0KICAgICt0eXBlIF9fX3VpbnQ4X3QgdWludDgNCiAgICAr
dHlwZSBfX19pbnQxNl90IGludDE2DQogICAgK3R5cGUgX19fdWludDE2X3QgdWludDE2DQogICAg
K3R5cGUgX19faW50MzJfdCBpbnQzMg0KICAgICt0eXBlIF9fX3VpbnQzMl90IHVpbnQzMg0KICAg
ICt0eXBlIF9fX2ludDY0X3QgaW50NjQNCiAgICArdHlwZSBfX191aW50NjRfdCB1aW50NjQNCiAg
ICArdHlwZSBfX19pbnRfbGVhc3Q4X3QgaW50OA0KICAgICt0eXBlIF9fX3VpbnRfbGVhc3Q4X3Qg
dWludDgNCiAgICArdHlwZSBfX19pbnRfbGVhc3QxNl90IGludDE2DQogICAgK3R5cGUgX19fdWlu
dF9sZWFzdDE2X3QgdWludDE2DQogICAgK3R5cGUgX19faW50X2xlYXN0MzJfdCBpbnQzMg0KICAg
ICt0eXBlIF9fX3VpbnRfbGVhc3QzMl90IHVpbnQzMg0KICAgICt0eXBlIF9fX2ludF9sZWFzdDY0
X3QgaW50NjQNCiAgICArdHlwZSBfX191aW50X2xlYXN0NjRfdCB1aW50NjQNCiAgICArdHlwZSBf
X19xdWFkX3QgaW50NjQNCiAgICArdHlwZSBfX191X3F1YWRfdCB1aW50NjQNCiAgICArdHlwZSBf
X19pbnRtYXhfdCBpbnQ2NA0KICAgICt0eXBlIF9fX3VpbnRtYXhfdCB1aW50NjQNCiAgICArdHlw
ZSBfX19kZXZfdCB1aW50NjQNCiAgICArdHlwZSBfX191aWRfdCB1aW50MzINCiAgICArdHlwZSBf
X19naWRfdCB1aW50MzINCiAgICArdHlwZSBfX19pbm9fdCB1aW50NjQNCiAgICArdHlwZSBfX19p
bm82NF90IHVpbnQ2NA0KICAgICt0eXBlIF9fX21vZGVfdCB1aW50MzINCiAgICArdHlwZSBfX19u
bGlua190IHVpbnQ2NA0KICAgICt0eXBlIF9fX29mZl90IGludDY0DQogICAgK3R5cGUgX19fb2Zm
NjRfdCBpbnQ2NA0KICAgICt0eXBlIF9fX3BpZF90IGludDMyDQogICAgK3R5cGUgX19fZnNpZF90
IHN0cnVjdCB7IF9fdmFsIFsxKzFdaW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9fX2ZzaWRf
dCA9IDgNCiAgICArdHlwZSBfX19jbG9ja190IGludDY0DQogICAgK3R5cGUgX19fcmxpbV90IHVp
bnQ2NA0KICAgICt0eXBlIF9fX3JsaW02NF90IHVpbnQ2NA0KICAgICt0eXBlIF9fX2lkX3QgdWlu
dDMyDQogICAgK3R5cGUgX19fdGltZV90IGludDY0DQogICAgK3R5cGUgX19fdXNlY29uZHNfdCB1
aW50MzINCiAgICArdHlwZSBfX19zdXNlY29uZHNfdCBpbnQ2NA0KICAgICt0eXBlIF9fX2RhZGRy
X3QgaW50MzINCiAgICArdHlwZSBfX19rZXlfdCBpbnQzMg0KICAgICt0eXBlIF9fX2Nsb2NraWRf
dCBpbnQzMg0KICAgICt0eXBlIF9fX3RpbWVyX3QgKmJ5dGUNCiAgICArdHlwZSBfX19ibGtzaXpl
X3QgaW50NjQNCiAgICArdHlwZSBfX19ibGtjbnRfdCBpbnQ2NA0KICAgICt0eXBlIF9fX2Jsa2Nu
dDY0X3QgaW50NjQNCiAgICArdHlwZSBfX19mc2Jsa2NudF90IHVpbnQ2NA0KICAgICt0eXBlIF9f
X2ZzYmxrY250NjRfdCB1aW50NjQNCiAgICArdHlwZSBfX19mc2ZpbGNudF90IHVpbnQ2NA0KICAg
ICt0eXBlIF9fX2ZzZmlsY250NjRfdCB1aW50NjQNCiAgICArdHlwZSBfX19mc3dvcmRfdCBpbnQ2
NA0KICAgICt0eXBlIF9fX3NzaXplX3QgaW50NjQNCiAgICArdHlwZSBfX19zeXNjYWxsX3Nsb25n
X3QgaW50NjQNCiAgICArdHlwZSBfX19zeXNjYWxsX3Vsb25nX3QgdWludDY0DQogICAgK3R5cGUg
X19fbG9mZl90IGludDY0DQogICAgK3R5cGUgX19fY2FkZHJfdCAqaW50OA0KICAgICt0eXBlIF9f
X2ludHB0cl90IGludDY0DQogICAgK3R5cGUgX19fc29ja2xlbl90IHVpbnQzMg0KICAgICt0eXBl
IF9fX3NpZ19hdG9taWNfdCBpbnQzMg0KICAgICt0eXBlIF91X2NoYXIgdWludDgNCiAgICArdHlw
ZSBfdV9zaG9ydCB1aW50MTYNCiAgICArdHlwZSBfdV9pbnQgdWludDMyDQogICAgK3R5cGUgX3Vf
bG9uZyB1aW50NjQNCiAgICArdHlwZSBfcXVhZF90IGludDY0DQogICAgK3R5cGUgX3VfcXVhZF90
IHVpbnQ2NA0KICAgICt0eXBlIF9mc2lkX3Qgc3RydWN0IHsgX192YWwgWzErMV1pbnQzMjsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX2ZzaWRfdCA9IDgNCiAgICArdHlwZSBfbG9mZl90IGludDY0DQog
ICAgK3R5cGUgX2lub190IHVpbnQ2NA0KICAgICt0eXBlIF9pbm82NF90IHVpbnQ2NA0KICAgICt0
eXBlIF9kZXZfdCB1aW50NjQNCiAgICArdHlwZSBfZ2lkX3QgdWludDMyDQogICAgK3R5cGUgX21v
ZGVfdCB1aW50MzINCiAgICArdHlwZSBfbmxpbmtfdCB1aW50NjQNCiAgICArdHlwZSBfdWlkX3Qg
dWludDMyDQogICAgK3R5cGUgX29mZl90IGludDY0DQogICAgK3R5cGUgX29mZjY0X3QgaW50NjQN
CiAgICArdHlwZSBfcGlkX3QgaW50MzINCiAgICArdHlwZSBfaWRfdCB1aW50MzINCiAgICArdHlw
ZSBfc3NpemVfdCBpbnQ2NA0KICAgICt0eXBlIF9kYWRkcl90IGludDMyDQogICAgK3R5cGUgX2Nh
ZGRyX3QgKmludDgNCiAgICArdHlwZSBfa2V5X3QgaW50MzINCiAgICArdHlwZSBfY2xvY2tfdCBp
bnQ2NA0KICAgICt0eXBlIF9jbG9ja2lkX3QgaW50MzINCiAgICArdHlwZSBfdGltZV90IGludDY0
DQogICAgK3R5cGUgX3RpbWVyX3QgKmJ5dGUNCiAgICArdHlwZSBfdXNlY29uZHNfdCB1aW50MzIN
CiAgICArdHlwZSBfc3VzZWNvbmRzX3QgaW50NjQNCiAgICArdHlwZSBfdWxvbmcgdWludDY0DQog
ICAgK3R5cGUgX3VzaG9ydCB1aW50MTYNCiAgICArdHlwZSBfdWludCB1aW50MzINCiAgICArdHlw
ZSBfaW50OF90IGludDgNCiAgICArdHlwZSBfaW50MTZfdCBpbnQxNg0KICAgICt0eXBlIF9pbnQz
Ml90IGludDMyDQogICAgK3R5cGUgX2ludDY0X3QgaW50NjQNCiAgICArdHlwZSBfdV9pbnQ4X3Qg
dWludDgNCiAgICArdHlwZSBfdV9pbnQxNl90IHVpbnQxNg0KICAgICt0eXBlIF91X2ludDMyX3Qg
dWludDMyDQogICAgK3R5cGUgX3VfaW50NjRfdCB1aW50NjQNCiAgICArdHlwZSBfcmVnaXN0ZXJf
dCBpbnQ2NA0KICAgICt0eXBlIF9fX3NpZ3NldF90IHN0cnVjdCB7IF9fdmFsIFsxNSsxXXVpbnQ2
NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fc2lnc2V0X3QgPSAxMjgNCiAgICArdHlwZSBfc2ln
c2V0X3Qgc3RydWN0IHsgX192YWwgWzE1KzFddWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2Zf
c2lnc2V0X3QgPSAxMjgNCiAgICArY29uc3QgX3NpemVvZl90aW1ldmFsID0gMTYNCiAgICArY29u
c3QgX3NpemVvZl90aW1lc3BlYyA9IDE2DQogICAgK3R5cGUgX19fZmRfbWFzayBpbnQ2NA0KICAg
ICt0eXBlIF9mZF9zZXQgc3RydWN0IHsgZmRzX2JpdHMgWzE1KzFdaW50NjQ7IH0NCiAgICArY29u
c3QgX3NpemVvZl9mZF9zZXQgPSAxMjgNCiAgICArdHlwZSBfZmRfbWFzayBpbnQ2NA0KICAgICt0
eXBlIF9ibGtzaXplX3QgaW50NjQNCiAgICArdHlwZSBfYmxrY250X3QgaW50NjQNCiAgICArdHlw
ZSBfZnNibGtjbnRfdCB1aW50NjQNCiAgICArdHlwZSBfZnNmaWxjbnRfdCB1aW50NjQNCiAgICAr
dHlwZSBfYmxrY250NjRfdCBpbnQ2NA0KICAgICt0eXBlIF9mc2Jsa2NudDY0X3QgdWludDY0DQog
ICAgK3R5cGUgX2ZzZmlsY250NjRfdCB1aW50NjQNCiAgICArdHlwZSBfX19wdGhyZWFkX3J3bG9j
a19hcmNoX3Qgc3RydWN0IHsgX19yZWFkZXJzIHVpbnQzMjsgX193cml0ZXJzIHVpbnQzMjsgX193
cnBoYXNlX2Z1dGV4IHVpbnQzMjsgX193cml0ZXJzX2Z1dGV4IHVpbnQzMjsgX19wYWQzIHVpbnQz
MjsgX19wYWQ0IHVpbnQzMjsgX19jdXJfd3JpdGVyIGludDMyOyBfX3NoYXJlZCBpbnQzMjsgX19y
d2VsaXNpb24gaW50ODsgX19wYWQxIFs2KzFddWludDg7IF9fcGFkMiB1aW50NjQ7IF9fZmxhZ3Mg
dWludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fcHRo
cmVhZF9yd2xvY2tfYXJjaF90ID0gNTYNCiAgICArdHlwZSBfX19wdGhyZWFkX2ludGVybmFsX2xp
c3Qgc3RydWN0IHsgX19wcmV2ICpfX19wdGhyZWFkX2ludGVybmFsX2xpc3Q7IF9fbmV4dCAqX19f
cHRocmVhZF9pbnRlcm5hbF9saXN0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX19wdGhyZWFkX2lu
dGVybmFsX2xpc3QgPSAxNg0KICAgICt0eXBlIF9fX3B0aHJlYWRfbGlzdF90IHN0cnVjdCB7IF9f
cHJldiAqX19fcHRocmVhZF9pbnRlcm5hbF9saXN0OyBfX25leHQgKl9fX3B0aHJlYWRfaW50ZXJu
YWxfbGlzdDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fcHRocmVhZF9saXN0X3QgPSAxNg0KICAg
ICt0eXBlIF9fX3B0aHJlYWRfbXV0ZXhfcyBzdHJ1Y3QgeyBfX2xvY2sgaW50MzI7IF9fY291bnQg
dWludDMyOyBfX293bmVyIGludDMyOyBfX251c2VycyB1aW50MzI7IF9fa2luZCBpbnQzMjsgX19z
cGlucyBpbnQxNjsgX19lbGlzaW9uIGludDE2OyBfX2xpc3QgX19fcHRocmVhZF9saXN0X3Q7IH0N
CiAgICArY29uc3QgX3NpemVvZl9fX3B0aHJlYWRfbXV0ZXhfcyA9IDQwDQogICAgK3R5cGUgX19f
cHRocmVhZF9jb25kX3Mgc3RydWN0IHsgX193c2VxIHVpbnQ2NDsgX19nMV9zdGFydCB1aW50NjQ7
IF9fZ19yZWZzIFsxKzFddWludDMyOyBfX2dfc2l6ZSBbMSsxXXVpbnQzMjsgX19nMV9vcmlnX3Np
emUgdWludDMyOyBfX3dyZWZzIHVpbnQzMjsgX19nX3NpZ25hbHMgWzErMV11aW50MzI7IEdvZHVt
cF8wX2FsaWduIFswXWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX19wdGhyZWFkX2NvbmRf
cyA9IDQ4DQogICAgK3R5cGUgX3B0aHJlYWRfdCB1aW50NjQNCiAgICArdHlwZSBfcHRocmVhZF9t
dXRleGF0dHJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMrMV1pbnQ4OyBHb2R1bXBfMF9hbGlnbiBbMF1p
bnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3B0aHJlYWRfbXV0ZXhhdHRyX3QgPSA0DQogICAg
K3R5cGUgX3B0aHJlYWRfY29uZGF0dHJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMrMV1pbnQ4OyBHb2R1
bXBfMF9hbGlnbiBbMF1pbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3B0aHJlYWRfY29uZGF0
dHJfdCA9IDQNCiAgICArdHlwZSBfcHRocmVhZF9rZXlfdCB1aW50MzINCiAgICArdHlwZSBfcHRo
cmVhZF9vbmNlX3QgaW50MzINCiAgICArdHlwZSBfcHRocmVhZF9hdHRyX3Qgc3RydWN0IHsgX19z
aXplIFs1NSsxXWludDg7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfcHRocmVhZF9hdHRyX3QgPSA1Ng0KICAgICt0eXBlIF9wdGhyZWFkX211dGV4X3Qgc3Ry
dWN0IHsgX19kYXRhIF9fX3B0aHJlYWRfbXV0ZXhfczsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3B0
aHJlYWRfbXV0ZXhfdCA9IDQwDQogICAgK3R5cGUgX3B0aHJlYWRfY29uZF90IHN0cnVjdCB7IF9f
ZGF0YSBfX19wdGhyZWFkX2NvbmRfczsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3B0aHJlYWRfY29u
ZF90ID0gNDgNCiAgICArdHlwZSBfcHRocmVhZF9yd2xvY2tfdCBzdHJ1Y3QgeyBfX2RhdGEgX19f
cHRocmVhZF9yd2xvY2tfYXJjaF90OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcHRocmVhZF9yd2xv
Y2tfdCA9IDU2DQogICAgK3R5cGUgX3B0aHJlYWRfcndsb2NrYXR0cl90IHN0cnVjdCB7IF9fc2l6
ZSBbNysxXWludDg7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9DQogICAgK2NvbnN0IF9zaXpl
b2ZfcHRocmVhZF9yd2xvY2thdHRyX3QgPSA4DQogICAgK3R5cGUgX3B0aHJlYWRfc3BpbmxvY2tf
dCBpbnQzMg0KICAgICt0eXBlIF9wdGhyZWFkX2JhcnJpZXJfdCBzdHJ1Y3QgeyBfX3NpemUgWzMx
KzFdaW50ODsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9w
dGhyZWFkX2JhcnJpZXJfdCA9IDMyDQogICAgK3R5cGUgX3B0aHJlYWRfYmFycmllcmF0dHJfdCBz
dHJ1Y3QgeyBfX3NpemUgWzMrMV1pbnQ4OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQzMjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX3B0aHJlYWRfYmFycmllcmF0dHJfdCA9IDQNCiAgICArdHlwZSBfZGly
ZW50IHN0cnVjdCB7IGRfaW5vIHVpbnQ2NDsgZF9vZmYgaW50NjQ7IGRfcmVjbGVuIHVpbnQxNjsg
ZF90eXBlIHVpbnQ4OyBkX25hbWUgWzI1NSsxXWludDg7IEdvZHVtcF8wX3BhZCBbNV1ieXRlOyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfZGlyZW50ID0gMjgwDQogICAgK3R5cGUgX2RpcmVudDY0IHN0
cnVjdCB7IGRfaW5vIHVpbnQ2NDsgZF9vZmYgaW50NjQ7IGRfcmVjbGVuIHVpbnQxNjsgZF90eXBl
IHVpbnQ4OyBkX25hbWUgWzI1NSsxXWludDg7IEdvZHVtcF8wX3BhZCBbNV1ieXRlOyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfZGlyZW50NjQgPSAyODANCiAgICArdHlwZSBfRElSIHN0cnVjdCB7IH0N
CiAgICArdHlwZSBfZXJyb3JfdCBpbnQzMg0KICAgICt0eXBlIF9mbG9jayBzdHJ1Y3QgeyBsX3R5
cGUgaW50MTY7IGxfd2hlbmNlIGludDE2OyBsX3N0YXJ0IGludDY0OyBsX2xlbiBpbnQ2NDsgbF9w
aWQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZmxv
Y2sgPSAzMg0KICAgICt0eXBlIF9mbG9jazY0IHN0cnVjdCB7IGxfdHlwZSBpbnQxNjsgbF93aGVu
Y2UgaW50MTY7IGxfc3RhcnQgaW50NjQ7IGxfbGVuIGludDY0OyBsX3BpZCBpbnQzMjsgR29kdW1w
XzBfcGFkIFs0XWJ5dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9mbG9jazY0ID0gMzINCiAgICAr
dHlwZSBfaW92ZWMgc3RydWN0IHsgaW92X2Jhc2UgKmJ5dGU7IGlvdl9sZW4gdWludDY0OyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfaW92ZWMgPSAxNg0KICAgICt0eXBlIF9mX293bmVyX2V4IHN0cnVj
dCB7IF90eXBlIHVpbnQzMjsgcGlkIGludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZl9vd25l
cl9leCA9IDgNCiAgICArdHlwZSBfZmlsZV9oYW5kbGUgc3RydWN0IHsgaGFuZGxlX2J5dGVzIHVp
bnQzMjsgaGFuZGxlX3R5cGUgaW50MzI7IGZfaGFuZGxlIFswXXVpbnQ4OyB9DQogICAgK2NvbnN0
IF9zaXplb2ZfZmlsZV9oYW5kbGUgPSA4DQogICAgK3R5cGUgX3N0YXQgc3RydWN0IHsgc3RfZGV2
IHVpbnQ2NDsgc3RfaW5vIHVpbnQ2NDsgc3RfbmxpbmsgdWludDY0OyBzdF9tb2RlIHVpbnQzMjsg
c3RfdWlkIHVpbnQzMjsgc3RfZ2lkIHVpbnQzMjsgX19wYWQwIGludDMyOyBzdF9yZGV2IHVpbnQ2
NDsgc3Rfc2l6ZSBpbnQ2NDsgc3RfYmxrc2l6ZSBpbnQ2NDsgc3RfYmxvY2tzIGludDY0OyBzdF9h
dGltIHRpbWVzcGVjOyBzdF9tdGltIHRpbWVzcGVjOyBzdF9jdGltIHRpbWVzcGVjOyBfX2dsaWJj
X3Jlc2VydmVkIFsyKzFdaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9zdGF0ID0gMTQ0DQog
ICAgK3R5cGUgX3N0YXQ2NCBzdHJ1Y3QgeyBzdF9kZXYgdWludDY0OyBzdF9pbm8gdWludDY0OyBz
dF9ubGluayB1aW50NjQ7IHN0X21vZGUgdWludDMyOyBzdF91aWQgdWludDMyOyBzdF9naWQgdWlu
dDMyOyBfX3BhZDAgaW50MzI7IHN0X3JkZXYgdWludDY0OyBzdF9zaXplIGludDY0OyBzdF9ibGtz
aXplIGludDY0OyBzdF9ibG9ja3MgaW50NjQ7IHN0X2F0aW0gdGltZXNwZWM7IHN0X210aW0gdGlt
ZXNwZWM7IHN0X2N0aW0gdGltZXNwZWM7IF9fZ2xpYmNfcmVzZXJ2ZWQgWzIrMV1pbnQ2NDsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX3N0YXQ2NCA9IDE0NA0KICAgICt0eXBlIF9zdGFja190IHN0cnVj
dCB7IHNzX3NwICpieXRlOyBzc19mbGFncyBpbnQzMjsgc3Nfc2l6ZSB1aW50NjQ7IH0NCiAgICAr
Y29uc3QgX3NpemVvZl9zdGFja190ID0gMjQNCiAgICArdHlwZSBfZ3JlZ190IGludDY0DQogICAg
K3R5cGUgX2dyZWdzZXRfdCBbMjIrMV1pbnQ2NA0KICAgICt0eXBlIF9fbGliY19mcHhyZWcgc3Ry
dWN0IHsgc2lnbmlmaWNhbmQgWzMrMV11aW50MTY7IGV4cG9uZW50IHVpbnQxNjsgX19nbGliY19y
ZXNlcnZlZDEgWzIrMV11aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl9fbGliY19mcHhyZWcg
PSAxNg0KICAgICt0eXBlIF9fbGliY194bW1yZWcgc3RydWN0IHsgZWxlbWVudCBbMysxXXVpbnQz
MjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19saWJjX3htbXJlZyA9IDE2DQogICAgK3R5cGUgX19s
aWJjX2Zwc3RhdGUgc3RydWN0IHsgY3dkIHVpbnQxNjsgc3dkIHVpbnQxNjsgZnR3IHVpbnQxNjsg
Zm9wIHVpbnQxNjsgcmlwIHVpbnQ2NDsgcmRwIHVpbnQ2NDsgbXhjc3IgdWludDMyOyBteGNyX21h
c2sgdWludDMyOyBfc3QgWzcrMV1fX2xpYmNfZnB4cmVnOyBfeG1tIFsxNSsxXV9fbGliY194bW1y
ZWc7IF9fZ2xpYmNfcmVzZXJ2ZWQxIFsyMysxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X19saWJjX2Zwc3RhdGUgPSA1MTINCiAgICArdHlwZSBfZnByZWdzZXRfdCAqX19saWJjX2Zwc3Rh
dGUNCiAgICArdHlwZSBfbWNvbnRleHRfdCBzdHJ1Y3QgeyBncmVncyBfZ3JlZ3NldF90OyBmcHJl
Z3MgX2ZwcmVnc2V0X3Q7IF9fcmVzZXJ2ZWQxIFs3KzFddWludDY0OyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfbWNvbnRleHRfdCA9IDI1Ng0KICAgICt0eXBlIF91Y29udGV4dF90IHN0cnVjdCB7IHVj
X2ZsYWdzIHVpbnQ2NDsgdWNfbGluayAqX3Vjb250ZXh0X3Q7IHVjX3N0YWNrIF9zdGFja190OyB1
Y19tY29udGV4dCBfbWNvbnRleHRfdDsgdWNfc2lnbWFzayBfc2lnc2V0X3Q7IF9fZnByZWdzX21l
bSBfX2xpYmNfZnBzdGF0ZTsgX19zc3AgWzMrMV11aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVv
Zl91Y29udGV4dF90ID0gOTY4DQogICAgK3R5cGUgX3VpbnQ4X3QgdWludDgNCiAgICArdHlwZSBf
dWludDE2X3QgdWludDE2DQogICAgK3R5cGUgX3VpbnQzMl90IHVpbnQzMg0KICAgICt0eXBlIF91
aW50NjRfdCB1aW50NjQNCiAgICArdHlwZSBfc29ja2xlbl90IHVpbnQzMg0KICAgICt0eXBlIF9z
YV9mYW1pbHlfdCB1aW50MTYNCiAgICArdHlwZSBfc29ja2FkZHIgc3RydWN0IHsgc2FfZmFtaWx5
IHVpbnQxNjsgc2FfZGF0YSBbMTMrMV1pbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc29ja2Fk
ZHIgPSAxNg0KICAgICt0eXBlIF9zb2NrYWRkcl9zdG9yYWdlIHN0cnVjdCB7IHNzX2ZhbWlseSB1
aW50MTY7IF9fc3NfcGFkZGluZyBbMTE3KzFdaW50ODsgX19zc19hbGlnbiB1aW50NjQ7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9zb2NrYWRkcl9zdG9yYWdlID0gMTI4DQogICAgK3R5cGUgX21zZ2hk
ciBzdHJ1Y3QgeyBtc2dfbmFtZSAqYnl0ZTsgbXNnX25hbWVsZW4gdWludDMyOyBtc2dfaW92ICpf
aW92ZWM7IG1zZ19pb3ZsZW4gdWludDY0OyBtc2dfY29udHJvbCAqYnl0ZTsgbXNnX2NvbnRyb2xs
ZW4gdWludDY0OyBtc2dfZmxhZ3MgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfbXNnaGRyID0gNTYNCiAgICArdHlwZSBfY21zZ2hkciBzdHJ1Y3QgeyBj
bXNnX2xlbiB1aW50NjQ7IGNtc2dfbGV2ZWwgaW50MzI7IGNtc2dfdHlwZSBpbnQzMjsgX19jbXNn
X2RhdGEgWzBddWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9jbXNnaGRyID0gMTYNCiAgICAr
dHlwZSBfdWNyZWQgc3RydWN0IHsgcGlkIGludDMyOyB1aWQgdWludDMyOyBnaWQgdWludDMyOyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfdWNyZWQgPSAxMg0KICAgICt0eXBlIF9saW5nZXIgc3RydWN0
IHsgbF9vbm9mZiBpbnQzMjsgbF9saW5nZXIgaW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9s
aW5nZXIgPSA4DQogICAgK3R5cGUgX29zb2NrYWRkciBzdHJ1Y3QgeyBzYV9mYW1pbHkgdWludDE2
OyBzYV9kYXRhIFsxMysxXXVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2Zfb3NvY2thZGRyID0g
MTYNCiAgICArdHlwZSBfX19TT0NLQUREUl9BUkcgc3RydWN0IHsgX19zb2NrYWRkcl9fICpfc29j
a2FkZHI7IH0NCiAgICArY29uc3QgX3NpemVvZl9fX1NPQ0tBRERSX0FSRyA9IDgNCiAgICArdHlw
ZSBfX19DT05TVF9TT0NLQUREUl9BUkcgc3RydWN0IHsgX19zb2NrYWRkcl9fICpfc29ja2FkZHI7
IH0NCiAgICArY29uc3QgX3NpemVvZl9fX0NPTlNUX1NPQ0tBRERSX0FSRyA9IDgNCiAgICArdHlw
ZSBfbW1zZ2hkciBzdHJ1Y3QgeyBtc2dfaGRyIF9tc2doZHI7IG1zZ19sZW4gdWludDMyOyBHb2R1
bXBfMF9wYWQgWzRdYnl0ZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX21tc2doZHIgPSA2NA0KICAg
ICt0eXBlIF9pbl9hZGRyX3QgdWludDMyDQogICAgK3R5cGUgX2luX2FkZHIgc3RydWN0IHsgc19h
ZGRyIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2luX2FkZHIgPSA0DQogICAgK3R5cGUg
X2lwX29wdHMgc3RydWN0IHsgaXBfZHN0IF9pbl9hZGRyOyBpcF9vcHRzIFszOSsxXWludDg7IH0N
CiAgICArY29uc3QgX3NpemVvZl9pcF9vcHRzID0gNDQNCiAgICArdHlwZSBfaXBfbXJlcW4gc3Ry
dWN0IHsgaW1yX211bHRpYWRkciBfaW5fYWRkcjsgaW1yX2FkZHJlc3MgX2luX2FkZHI7IGltcl9p
ZmluZGV4IGludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaXBfbXJlcW4gPSAxMg0KICAgICt0
eXBlIF9pbl9wa3RpbmZvIHN0cnVjdCB7IGlwaV9pZmluZGV4IGludDMyOyBpcGlfc3BlY19kc3Qg
X2luX2FkZHI7IGlwaV9hZGRyIF9pbl9hZGRyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaW5fcGt0
aW5mbyA9IDEyDQogICAgK3R5cGUgX2luX3BvcnRfdCB1aW50MTYNCiAgICArdHlwZSBfc29ja2Fk
ZHJfaW4gc3RydWN0IHsgc2luX2ZhbWlseSB1aW50MTY7IHNpbl9wb3J0IHVpbnQxNjsgc2luX2Fk
ZHIgX2luX2FkZHI7IHNpbl96ZXJvIFs3KzFddWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9z
b2NrYWRkcl9pbiA9IDE2DQogICAgK3R5cGUgX2lwX21yZXEgc3RydWN0IHsgaW1yX211bHRpYWRk
ciBfaW5fYWRkcjsgaW1yX2ludGVyZmFjZSBfaW5fYWRkcjsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X2lwX21yZXEgPSA4DQogICAgK3R5cGUgX2lwX21yZXFfc291cmNlIHN0cnVjdCB7IGltcl9tdWx0
aWFkZHIgX2luX2FkZHI7IGltcl9pbnRlcmZhY2UgX2luX2FkZHI7IGltcl9zb3VyY2VhZGRyIF9p
bl9hZGRyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaXBfbXJlcV9zb3VyY2UgPSAxMg0KICAgICtj
b25zdCBfc2l6ZW9mX2lwdjZfbXJlcSA9IDIwDQogICAgK3R5cGUgX2dyb3VwX3JlcSBzdHJ1Y3Qg
eyBncl9pbnRlcmZhY2UgdWludDMyOyBncl9ncm91cCBfc29ja2FkZHJfc3RvcmFnZTsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX2dyb3VwX3JlcSA9IDEzNg0KICAgICt0eXBlIF9ncm91cF9zb3VyY2Vf
cmVxIHN0cnVjdCB7IGdzcl9pbnRlcmZhY2UgdWludDMyOyBnc3JfZ3JvdXAgX3NvY2thZGRyX3N0
b3JhZ2U7IGdzcl9zb3VyY2UgX3NvY2thZGRyX3N0b3JhZ2U7IH0NCiAgICArY29uc3QgX3NpemVv
Zl9ncm91cF9zb3VyY2VfcmVxID0gMjY0DQogICAgK3R5cGUgX2lwX21zZmlsdGVyIHN0cnVjdCB7
IGltc2ZfbXVsdGlhZGRyIF9pbl9hZGRyOyBpbXNmX2ludGVyZmFjZSBfaW5fYWRkcjsgaW1zZl9m
bW9kZSB1aW50MzI7IGltc2ZfbnVtc3JjIHVpbnQzMjsgaW1zZl9zbGlzdCBbMCsxXV9pbl9hZGRy
OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaXBfbXNmaWx0ZXIgPSAyMA0KICAgICt0eXBlIF9ncm91
cF9maWx0ZXIgc3RydWN0IHsgZ2ZfaW50ZXJmYWNlIHVpbnQzMjsgZ2ZfZ3JvdXAgX3NvY2thZGRy
X3N0b3JhZ2U7IGdmX2Ztb2RlIHVpbnQzMjsgZ2ZfbnVtc3JjIHVpbnQzMjsgZ2Zfc2xpc3QgWzAr
MV1fc29ja2FkZHJfc3RvcmFnZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2dyb3VwX2ZpbHRlciA9
IDI3Mg0KICAgICtjb25zdCBfc2l6ZW9mX2luNl9wa3RpbmZvID0gMjANCiAgICArY29uc3QgX3Np
emVvZl9pcDZfbXR1aW5mbyA9IDMyDQogICAgK3R5cGUgX2ludF9sZWFzdDhfdCBpbnQ4DQogICAg
K3R5cGUgX2ludF9sZWFzdDE2X3QgaW50MTYNCiAgICArdHlwZSBfaW50X2xlYXN0MzJfdCBpbnQz
Mg0KICAgICt0eXBlIF9pbnRfbGVhc3Q2NF90IGludDY0DQogICAgK3R5cGUgX3VpbnRfbGVhc3Q4
X3QgdWludDgNCiAgICArdHlwZSBfdWludF9sZWFzdDE2X3QgdWludDE2DQogICAgK3R5cGUgX3Vp
bnRfbGVhc3QzMl90IHVpbnQzMg0KICAgICt0eXBlIF91aW50X2xlYXN0NjRfdCB1aW50NjQNCiAg
ICArdHlwZSBfaW50X2Zhc3Q4X3QgaW50OA0KICAgICt0eXBlIF9pbnRfZmFzdDE2X3QgaW50NjQN
CiAgICArdHlwZSBfaW50X2Zhc3QzMl90IGludDY0DQogICAgK3R5cGUgX2ludF9mYXN0NjRfdCBp
bnQ2NA0KICAgICt0eXBlIF91aW50X2Zhc3Q4X3QgdWludDgNCiAgICArdHlwZSBfdWludF9mYXN0
MTZfdCB1aW50NjQNCiAgICArdHlwZSBfdWludF9mYXN0MzJfdCB1aW50NjQNCiAgICArdHlwZSBf
dWludF9mYXN0NjRfdCB1aW50NjQNCiAgICArdHlwZSBfaW50cHRyX3QgaW50NjQNCiAgICArdHlw
ZSBfdWludHB0cl90IHVpbnQ2NA0KICAgICt0eXBlIF9pbnRtYXhfdCBpbnQ2NA0KICAgICt0eXBl
IF91aW50bWF4X3QgdWludDY0DQogICAgK3R5cGUgX3RjcF9zZXEgdWludDMyDQogICAgK3R5cGUg
X3RjcGhkciBzdHJ1Y3QgeyB0aF9zcG9ydCB1aW50MTY7IHRoX2Rwb3J0IHVpbnQxNjsgdGhfc2Vx
IHVpbnQzMjsgdGhfYWNrIHVpbnQzMjsgR29kdW1wXzBfcGFkIFsxXWJ5dGU7IHRoX2ZsYWdzIHVp
bnQ4OyB0aF93aW4gdWludDE2OyB0aF9zdW0gdWludDE2OyB0aF91cnAgdWludDE2OyBHb2R1bXBf
MV9hbGlnbiBbMF1pbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3RjcGhkciA9IDIwDQogICAg
K3R5cGUgX3RjcF9pbmZvIHN0cnVjdCB7IHRjcGlfc3RhdGUgdWludDg7IHRjcGlfY2Ffc3RhdGUg
dWludDg7IHRjcGlfcmV0cmFuc21pdHMgdWludDg7IHRjcGlfcHJvYmVzIHVpbnQ4OyB0Y3BpX2Jh
Y2tvZmYgdWludDg7IHRjcGlfb3B0aW9ucyB1aW50ODsgdGNwaV9ydG8gdWludDMyOyB0Y3BpX2F0
byB1aW50MzI7IHRjcGlfc25kX21zcyB1aW50MzI7IHRjcGlfcmN2X21zcyB1aW50MzI7IHRjcGlf
dW5hY2tlZCB1aW50MzI7IHRjcGlfc2Fja2VkIHVpbnQzMjsgdGNwaV9sb3N0IHVpbnQzMjsgdGNw
aV9yZXRyYW5zIHVpbnQzMjsgdGNwaV9mYWNrZXRzIHVpbnQzMjsgdGNwaV9sYXN0X2RhdGFfc2Vu
dCB1aW50MzI7IHRjcGlfbGFzdF9hY2tfc2VudCB1aW50MzI7IHRjcGlfbGFzdF9kYXRhX3JlY3Yg
dWludDMyOyB0Y3BpX2xhc3RfYWNrX3JlY3YgdWludDMyOyB0Y3BpX3BtdHUgdWludDMyOyB0Y3Bp
X3Jjdl9zc3RocmVzaCB1aW50MzI7IHRjcGlfcnR0IHVpbnQzMjsgdGNwaV9ydHR2YXIgdWludDMy
OyB0Y3BpX3NuZF9zc3RocmVzaCB1aW50MzI7IHRjcGlfc25kX2N3bmQgdWludDMyOyB0Y3BpX2Fk
dm1zcyB1aW50MzI7IHRjcGlfcmVvcmRlcmluZyB1aW50MzI7IHRjcGlfcmN2X3J0dCB1aW50MzI7
IHRjcGlfcmN2X3NwYWNlIHVpbnQzMjsgdGNwaV90b3RhbF9yZXRyYW5zIHVpbnQzMjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX3RjcF9pbmZvID0gMTA0DQogICAgK3R5cGUgX3RjcF9tZDVzaWcgc3Ry
dWN0IHsgdGNwbV9hZGRyIF9zb2NrYWRkcl9zdG9yYWdlOyB0Y3BtX2ZsYWdzIHVpbnQ4OyB0Y3Bt
X3ByZWZpeGxlbiB1aW50ODsgdGNwbV9rZXlsZW4gdWludDE2OyBfX3RjcG1fcGFkIHVpbnQzMjsg
dGNwbV9rZXkgWzc5KzFddWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl90Y3BfbWQ1c2lnID0g
MjE2DQogICAgK3R5cGUgX3RjcF9yZXBhaXJfb3B0IHN0cnVjdCB7IG9wdF9jb2RlIHVpbnQzMjsg
b3B0X3ZhbCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl90Y3BfcmVwYWlyX29wdCA9IDgN
CiAgICArdHlwZSBfdGNwX2Nvb2tpZV90cmFuc2FjdGlvbnMgc3RydWN0IHsgdGNwY3RfZmxhZ3Mg
dWludDE2OyBfX3RjcGN0X3BhZDEgdWludDg7IHRjcGN0X2Nvb2tpZV9kZXNpcmVkIHVpbnQ4OyB0
Y3BjdF9zX2RhdGFfZGVzaXJlZCB1aW50MTY7IHRjcGN0X3VzZWQgdWludDE2OyB0Y3BjdF92YWx1
ZSBbNTM1KzFddWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl90Y3BfY29va2llX3RyYW5zYWN0
aW9ucyA9IDU0NA0KICAgICt0eXBlIF90Y3BfcmVwYWlyX3dpbmRvdyBzdHJ1Y3QgeyBzbmRfd2wx
IHVpbnQzMjsgc25kX3duZCB1aW50MzI7IG1heF93aW5kb3cgdWludDMyOyByY3Zfd25kIHVpbnQz
MjsgcmN2X3d1cCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl90Y3BfcmVwYWlyX3dpbmRv
dyA9IDIwDQogICAgK3R5cGUgX3RpbWVzdGFtcCBzdHJ1Y3QgeyBsZW4gdWludDg7IHB0ciB1aW50
ODsgZGF0YSBbOCsxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3RpbWVzdGFtcCA9IDQw
DQogICAgK3R5cGUgX2lwaGRyIHN0cnVjdCB7IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB0b3MgdWlu
dDg7IHRvdF9sZW4gdWludDE2OyBpZCB1aW50MTY7IGZyYWdfb2ZmIHVpbnQxNjsgdHRsIHVpbnQ4
OyBwcm90b2NvbCB1aW50ODsgY2hlY2sgdWludDE2OyBzYWRkciB1aW50MzI7IGRhZGRyIHVpbnQz
MjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lwaGRyID0gMjANCiAgICArdHlwZSBfaXAgc3RydWN0
IHsgR29kdW1wXzBfcGFkIFsxXWJ5dGU7IGlwX3RvcyB1aW50ODsgaXBfbGVuIHVpbnQxNjsgaXBf
aWQgdWludDE2OyBpcF9vZmYgdWludDE2OyBpcF90dGwgdWludDg7IGlwX3AgdWludDg7IGlwX3N1
bSB1aW50MTY7IGlwX3NyYyBfaW5fYWRkcjsgaXBfZHN0IF9pbl9hZGRyOyB9DQogICAgK2NvbnN0
IF9zaXplb2ZfaXAgPSAyMA0KICAgICt0eXBlIF9pcF90aW1lc3RhbXAgc3RydWN0IHsgaXB0X2Nv
ZGUgdWludDg7IGlwdF9sZW4gdWludDg7IGlwdF9wdHIgdWludDg7IGRhdGEgWzgrMV11aW50MzI7
IH0NCiAgICArY29uc3QgX3NpemVvZl9pcF90aW1lc3RhbXAgPSA0MA0KICAgICt0eXBlIF9fX3M4
IGludDgNCiAgICArdHlwZSBfX191OCB1aW50OA0KICAgICt0eXBlIF9fX3MxNiBpbnQxNg0KICAg
ICt0eXBlIF9fX3UxNiB1aW50MTYNCiAgICArdHlwZSBfX19zMzIgaW50MzINCiAgICArdHlwZSBf
X191MzIgdWludDMyDQogICAgK3R5cGUgX19fczY0IGludDY0DQogICAgK3R5cGUgX19fdTY0IHVp
bnQ2NA0KICAgICt0eXBlIF9fX2tlcm5lbF9mZF9zZXQgc3RydWN0IHsgZmRzX2JpdHMgWzE1KzFd
dWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX19rZXJuZWxfZmRfc2V0ID0gMTI4DQogICAg
K3R5cGUgX19fa2VybmVsX3NpZ2hhbmRsZXJfdCBmdW5jKGludDMyKQ0KICAgICt0eXBlIF9fX2tl
cm5lbF9rZXlfdCBpbnQzMg0KICAgICt0eXBlIF9fX2tlcm5lbF9tcWRfdCBpbnQzMg0KICAgICt0
eXBlIF9fX2tlcm5lbF9vbGRfdWlkX3QgdWludDE2DQogICAgK3R5cGUgX19fa2VybmVsX29sZF9n
aWRfdCB1aW50MTYNCiAgICArdHlwZSBfX19rZXJuZWxfb2xkX2Rldl90IHVpbnQ2NA0KICAgICt0
eXBlIF9fX2tlcm5lbF9sb25nX3QgaW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfdWxvbmdfdCB1
aW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfaW5vX3QgdWludDY0DQogICAgK3R5cGUgX19fa2Vy
bmVsX21vZGVfdCB1aW50MzINCiAgICArdHlwZSBfX19rZXJuZWxfcGlkX3QgaW50MzINCiAgICAr
dHlwZSBfX19rZXJuZWxfaXBjX3BpZF90IGludDMyDQogICAgK3R5cGUgX19fa2VybmVsX3VpZF90
IHVpbnQzMg0KICAgICt0eXBlIF9fX2tlcm5lbF9naWRfdCB1aW50MzINCiAgICArdHlwZSBfX19r
ZXJuZWxfc3VzZWNvbmRzX3QgaW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfZGFkZHJfdCBpbnQz
Mg0KICAgICt0eXBlIF9fX2tlcm5lbF91aWQzMl90IHVpbnQzMg0KICAgICt0eXBlIF9fX2tlcm5l
bF9naWQzMl90IHVpbnQzMg0KICAgICt0eXBlIF9fX2tlcm5lbF9zaXplX3QgdWludDY0DQogICAg
K3R5cGUgX19fa2VybmVsX3NzaXplX3QgaW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfcHRyZGlm
Zl90IGludDY0DQogICAgK3R5cGUgX19fa2VybmVsX2ZzaWRfdCBzdHJ1Y3QgeyB2YWwgWzErMV1p
bnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fa2VybmVsX2ZzaWRfdCA9IDgNCiAgICArdHlw
ZSBfX19rZXJuZWxfb2ZmX3QgaW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfbG9mZl90IGludDY0
DQogICAgK3R5cGUgX19fa2VybmVsX3RpbWVfdCBpbnQ2NA0KICAgICt0eXBlIF9fX2tlcm5lbF90
aW1lNjRfdCBpbnQ2NA0KICAgICt0eXBlIF9fX2tlcm5lbF9jbG9ja190IGludDY0DQogICAgK3R5
cGUgX19fa2VybmVsX3RpbWVyX3QgaW50MzINCiAgICArdHlwZSBfX19rZXJuZWxfY2xvY2tpZF90
IGludDMyDQogICAgK3R5cGUgX19fa2VybmVsX2NhZGRyX3QgKmludDgNCiAgICArdHlwZSBfX19r
ZXJuZWxfdWlkMTZfdCB1aW50MTYNCiAgICArdHlwZSBfX19rZXJuZWxfZ2lkMTZfdCB1aW50MTYN
CiAgICArdHlwZSBfX19sZTE2IHVpbnQxNg0KICAgICt0eXBlIF9fX2JlMTYgdWludDE2DQogICAg
K3R5cGUgX19fbGUzMiB1aW50MzINCiAgICArdHlwZSBfX19iZTMyIHVpbnQzMg0KICAgICt0eXBl
IF9fX2xlNjQgdWludDY0DQogICAgK3R5cGUgX19fYmU2NCB1aW50NjQNCiAgICArdHlwZSBfX19z
dW0xNiB1aW50MTYNCiAgICArdHlwZSBfX193c3VtIHVpbnQzMg0KICAgICt0eXBlIF9fX3BvbGxf
dCB1aW50MzINCiAgICArdHlwZSBfZXRoaGRyIHN0cnVjdCB7IGhfZGVzdCBbNSsxXXVpbnQ4OyBo
X3NvdXJjZSBbNSsxXXVpbnQ4OyBoX3Byb3RvIHVpbnQxNjsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X2V0aGhkciA9IDE0DQogICAgK3R5cGUgX2V0aGVyX2FkZHIgc3RydWN0IHsgZXRoZXJfYWRkcl9v
Y3RldCBbNSsxXXVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZXRoZXJfYWRkciA9IDYNCiAg
ICArdHlwZSBfZXRoZXJfaGVhZGVyIHN0cnVjdCB7IGV0aGVyX2Rob3N0IFs1KzFddWludDg7IGV0
aGVyX3Nob3N0IFs1KzFddWludDg7IGV0aGVyX3R5cGUgdWludDE2OyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfZXRoZXJfaGVhZGVyID0gMTQNCiAgICArdHlwZSBfYXJwaGRyIHN0cnVjdCB7IGFyX2hy
ZCB1aW50MTY7IGFyX3BybyB1aW50MTY7IGFyX2hsbiB1aW50ODsgYXJfcGxuIHVpbnQ4OyBhcl9v
cCB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl9hcnBoZHIgPSA4DQogICAgK3R5cGUgX2Fy
cHJlcSBzdHJ1Y3QgeyBhcnBfcGEgX3NvY2thZGRyOyBhcnBfaGEgX3NvY2thZGRyOyBhcnBfZmxh
Z3MgaW50MzI7IGFycF9uZXRtYXNrIF9zb2NrYWRkcjsgYXJwX2RldiBbMTUrMV1pbnQ4OyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfYXJwcmVxID0gNjgNCiAgICArdHlwZSBfYXJwcmVxX29sZCBzdHJ1
Y3QgeyBhcnBfcGEgX3NvY2thZGRyOyBhcnBfaGEgX3NvY2thZGRyOyBhcnBfZmxhZ3MgaW50MzI7
IGFycF9uZXRtYXNrIF9zb2NrYWRkcjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2FycHJlcV9vbGQg
PSA1Mg0KICAgICt0eXBlIF9hcnBkX3JlcXVlc3Qgc3RydWN0IHsgcmVxIHVpbnQxNjsgaXAgdWlu
dDMyOyBkZXYgdWludDY0OyBzdGFtcCB1aW50NjQ7IHVwZGF0ZWQgdWludDY0OyBoYSBbNisxXXVp
bnQ4OyBHb2R1bXBfMF9wYWQgWzFdYnl0ZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2FycGRfcmVx
dWVzdCA9IDQwDQogICAgK3R5cGUgX2V0aGVyX2FycCBzdHJ1Y3QgeyBlYV9oZHIgX2FycGhkcjsg
YXJwX3NoYSBbNSsxXXVpbnQ4OyBhcnBfc3BhIFszKzFddWludDg7IGFycF90aGEgWzUrMV11aW50
ODsgYXJwX3RwYSBbMysxXXVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZXRoZXJfYXJwID0g
MjgNCiAgICArdHlwZSBfc2lnX2F0b21pY190IGludDMyDQogICAgK3R5cGUgX3NpZ3ZhbCBzdHJ1
Y3QgeyBzaXZhbF9pbnQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyBHb2R1bXBfMV9hbGln
biBbMF1pbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NpZ3ZhbCA9IDgNCiAgICArdHlwZSBf
X19zaWd2YWxfdCBzdHJ1Y3QgeyBzaXZhbF9pbnQgaW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRl
OyBHb2R1bXBfMV9hbGlnbiBbMF1pbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fc2lndmFs
X3QgPSA4DQogICAgK3R5cGUgX3NpZ2luZm9fdCBzdHJ1Y3QgeyBzaV9zaWdubyBpbnQzMjsgc2lf
ZXJybm8gaW50MzI7IHNpX2NvZGUgaW50MzI7IF9fcGFkMCBpbnQzMjsgX3NpZmllbGRzIHN0cnVj
dCB7IF9wYWQgWzI3KzFdaW50MzI7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9OyB9DQogICAg
K2NvbnN0IF9zaXplb2Zfc2lnaW5mb190ID0gMTI4DQogICAgK3R5cGUgX3NpZ3ZhbF90IHN0cnVj
dCB7IHNpdmFsX2ludCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IEdvZHVtcF8xX2FsaWdu
IFswXWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc2lndmFsX3QgPSA4DQogICAgK3R5cGUg
X3NpZ2V2ZW50IHN0cnVjdCB7IHNpZ2V2X3ZhbHVlIF9fX3NpZ3ZhbF90OyBzaWdldl9zaWdubyBp
bnQzMjsgc2lnZXZfbm90aWZ5IGludDMyOyBfc2lnZXZfdW4gc3RydWN0IHsgX3BhZCBbMTErMV1p
bnQzMjsgR29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH07IH0NCiAgICArY29uc3QgX3NpemVvZl9z
aWdldmVudCA9IDY0DQogICAgK3R5cGUgX3NpZ2V2ZW50X3Qgc3RydWN0IHsgc2lnZXZfdmFsdWUg
X19fc2lndmFsX3Q7IHNpZ2V2X3NpZ25vIGludDMyOyBzaWdldl9ub3RpZnkgaW50MzI7IF9zaWdl
dl91biBzdHJ1Y3QgeyBfcGFkIFsxMSsxXWludDMyOyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsg
fTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NpZ2V2ZW50X3QgPSA2NA0KICAgICt0eXBlIF9fX3Np
Z2hhbmRsZXJfdCBmdW5jKGludDMyKQ0KICAgICt0eXBlIF9zaWdoYW5kbGVyX3QgZnVuYyhpbnQz
MikNCiAgICArdHlwZSBfc2lnX3QgZnVuYyhpbnQzMikNCiAgICArdHlwZSBfc2lnYWN0aW9uIHN0
cnVjdCB7IF9fc2lnYWN0aW9uX2hhbmRsZXIgc3RydWN0IHsgc2FfaGFuZGxlciBfX19zaWdoYW5k
bGVyX3Q7IH07IHNhX21hc2sgX19fc2lnc2V0X3Q7IHNhX2ZsYWdzIGludDMyOyBzYV9yZXN0b3Jl
ciBmdW5jKCk7IH0NCiAgICArY29uc3QgX3NpemVvZl9zaWdhY3Rpb24gPSAxNTINCiAgICArdHlw
ZSBfX2ZweF9zd19ieXRlcyBzdHJ1Y3QgeyBtYWdpYzEgdWludDMyOyBleHRlbmRlZF9zaXplIHVp
bnQzMjsgeHN0YXRlX2J2IHVpbnQ2NDsgeHN0YXRlX3NpemUgdWludDMyOyBfX2dsaWJjX3Jlc2Vy
dmVkMSBbNisxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19mcHhfc3dfYnl0ZXMgPSA0
OA0KICAgICt0eXBlIF9fZnByZWcgc3RydWN0IHsgc2lnbmlmaWNhbmQgWzMrMV11aW50MTY7IGV4
cG9uZW50IHVpbnQxNjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19mcHJlZyA9IDEwDQogICAgK3R5
cGUgX19mcHhyZWcgc3RydWN0IHsgc2lnbmlmaWNhbmQgWzMrMV11aW50MTY7IGV4cG9uZW50IHVp
bnQxNjsgX19nbGliY19yZXNlcnZlZDEgWzIrMV11aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVv
Zl9fZnB4cmVnID0gMTYNCiAgICArdHlwZSBfX3htbXJlZyBzdHJ1Y3QgeyBlbGVtZW50IFszKzFd
dWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX3htbXJlZyA9IDE2DQogICAgK3R5cGUgX19m
cHN0YXRlIHN0cnVjdCB7IGN3ZCB1aW50MTY7IHN3ZCB1aW50MTY7IGZ0dyB1aW50MTY7IGZvcCB1
aW50MTY7IHJpcCB1aW50NjQ7IHJkcCB1aW50NjQ7IG14Y3NyIHVpbnQzMjsgbXhjcl9tYXNrIHVp
bnQzMjsgX3N0IFs3KzFdX19mcHhyZWc7IF94bW0gWzE1KzFdX194bW1yZWc7IF9fZ2xpYmNfcmVz
ZXJ2ZWQxIFsyMysxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19mcHN0YXRlID0gNTEy
DQogICAgK3R5cGUgX3NpZ2NvbnRleHQgc3RydWN0IHsgcjggdWludDY0OyByOSB1aW50NjQ7IHIx
MCB1aW50NjQ7IHIxMSB1aW50NjQ7IHIxMiB1aW50NjQ7IHIxMyB1aW50NjQ7IHIxNCB1aW50NjQ7
IHIxNSB1aW50NjQ7IHJkaSB1aW50NjQ7IHJzaSB1aW50NjQ7IHJicCB1aW50NjQ7IHJieCB1aW50
NjQ7IHJkeCB1aW50NjQ7IHJheCB1aW50NjQ7IHJjeCB1aW50NjQ7IHJzcCB1aW50NjQ7IHJpcCB1
aW50NjQ7IGVmbGFncyB1aW50NjQ7IGNzIHVpbnQxNjsgZ3MgdWludDE2OyBmcyB1aW50MTY7IF9f
cGFkMCB1aW50MTY7IGVyciB1aW50NjQ7IHRyYXBubyB1aW50NjQ7IG9sZG1hc2sgdWludDY0OyBj
cjIgdWludDY0OyBmcHN0YXRlICpfX2Zwc3RhdGU7IF9fcmVzZXJ2ZWQxIFs3KzFddWludDY0OyB9
DQogICAgK2NvbnN0IF9zaXplb2Zfc2lnY29udGV4dCA9IDI1Ng0KICAgICt0eXBlIF9feHNhdmVf
aGRyIHN0cnVjdCB7IHhzdGF0ZV9idiB1aW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQxIFsxKzFddWlu
dDY0OyBfX2dsaWJjX3Jlc2VydmVkMiBbNCsxXXVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X194c2F2ZV9oZHIgPSA2NA0KICAgICt0eXBlIF9feW1taF9zdGF0ZSBzdHJ1Y3QgeyB5bW1oX3Nw
YWNlIFs2MysxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX195bW1oX3N0YXRlID0gMjU2
DQogICAgK3R5cGUgX194c3RhdGUgc3RydWN0IHsgZnBzdGF0ZSBfX2Zwc3RhdGU7IHhzdGF0ZV9o
ZHIgX194c2F2ZV9oZHI7IHltbWggX195bW1oX3N0YXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2Zf
X3hzdGF0ZSA9IDgzMg0KICAgICt0eXBlIF9zaWdzdGFjayBzdHJ1Y3QgeyBzc19zcCAqYnl0ZTsg
c3Nfb25zdGFjayBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0NCiAgICArY29uc3QgX3Np
emVvZl9zaWdzdGFjayA9IDE2DQogICAgK3R5cGUgX3dpbnNpemUgc3RydWN0IHsgd3Nfcm93IHVp
bnQxNjsgd3NfY29sIHVpbnQxNjsgd3NfeHBpeGVsIHVpbnQxNjsgd3NfeXBpeGVsIHVpbnQxNjsg
fQ0KICAgICtjb25zdCBfc2l6ZW9mX3dpbnNpemUgPSA4DQogICAgK3R5cGUgX3Rlcm1pbyBzdHJ1
Y3QgeyBjX2lmbGFnIHVpbnQxNjsgY19vZmxhZyB1aW50MTY7IGNfY2ZsYWcgdWludDE2OyBjX2xm
bGFnIHVpbnQxNjsgY19saW5lIHVpbnQ4OyBjX2NjIFs3KzFddWludDg7IEdvZHVtcF8wX3BhZCBb
MV1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdGVybWlvID0gMTgNCiAgICArdHlwZSBfY2Nf
dCB1aW50OA0KICAgICt0eXBlIF9zcGVlZF90IHVpbnQzMg0KICAgICt0eXBlIF90Y2ZsYWdfdCB1
aW50MzINCiAgICArdHlwZSBfdGVybWlvcyBzdHJ1Y3QgeyBjX2lmbGFnIHVpbnQzMjsgY19vZmxh
ZyB1aW50MzI7IGNfY2ZsYWcgdWludDMyOyBjX2xmbGFnIHVpbnQzMjsgY19saW5lIHVpbnQ4OyBj
X2NjIFszMSsxXXVpbnQ4OyBjX2lzcGVlZCB1aW50MzI7IGNfb3NwZWVkIHVpbnQzMjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX3Rlcm1pb3MgPSA2MA0KICAgICtjb25zdCBfc2l6ZW9mX2Vwb2xsX2Rh
dGEgPSA4DQogICAgK2NvbnN0IF9zaXplb2ZfZXBvbGxfZGF0YV90ID0gOA0KICAgICtjb25zdCBf
c2l6ZW9mX2Vwb2xsX2V2ZW50ID0gMTINCiAgICArdHlwZSBfcHJjdGxfbW1fbWFwIHN0cnVjdCB7
IHN0YXJ0X2NvZGUgdWludDY0OyBlbmRfY29kZSB1aW50NjQ7IHN0YXJ0X2RhdGEgdWludDY0OyBl
bmRfZGF0YSB1aW50NjQ7IHN0YXJ0X2JyayB1aW50NjQ7IGJyayB1aW50NjQ7IHN0YXJ0X3N0YWNr
IHVpbnQ2NDsgYXJnX3N0YXJ0IHVpbnQ2NDsgYXJnX2VuZCB1aW50NjQ7IGVudl9zdGFydCB1aW50
NjQ7IGVudl9lbmQgdWludDY0OyBhdXh2ICp1aW50NjQ7IGF1eHZfc2l6ZSB1aW50MzI7IGV4ZV9m
ZCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9wcmN0bF9tbV9tYXAgPSAxMDQNCiAgICAr
dHlwZSBfX19wdHJhY2VfcGVla3NpZ2luZm9fYXJncyBzdHJ1Y3QgeyBvZmYgdWludDY0OyBmbGFn
cyB1aW50MzI7IG5yIGludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX19wdHJhY2VfcGVla3Np
Z2luZm9fYXJncyA9IDE2DQogICAgK3R5cGUgX19fcHRyYWNlX3NlY2NvbXBfbWV0YWRhdGEgc3Ry
dWN0IHsgZmlsdGVyX29mZiB1aW50NjQ7IGZsYWdzIHVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6
ZW9mX19fcHRyYWNlX3NlY2NvbXBfbWV0YWRhdGEgPSAxNg0KICAgICt0eXBlIF9ybGltX3QgdWlu
dDY0DQogICAgK3R5cGUgX3JsaW02NF90IHVpbnQ2NA0KICAgICt0eXBlIF9ybGltaXQgc3RydWN0
IHsgcmxpbV9jdXIgdWludDY0OyBybGltX21heCB1aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVv
Zl9ybGltaXQgPSAxNg0KICAgICt0eXBlIF9ybGltaXQ2NCBzdHJ1Y3QgeyBybGltX2N1ciB1aW50
NjQ7IHJsaW1fbWF4IHVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3JsaW1pdDY0ID0gMTYN
CiAgICArdHlwZSBfcnVzYWdlIHN0cnVjdCB7IHJ1X3V0aW1lIHRpbWV2YWw7IHJ1X3N0aW1lIHRp
bWV2YWw7IHJ1X21heHJzcyBpbnQ2NDsgcnVfaXhyc3MgaW50NjQ7IHJ1X2lkcnNzIGludDY0OyBy
dV9pc3JzcyBpbnQ2NDsgcnVfbWluZmx0IGludDY0OyBydV9tYWpmbHQgaW50NjQ7IHJ1X25zd2Fw
IGludDY0OyBydV9pbmJsb2NrIGludDY0OyBydV9vdWJsb2NrIGludDY0OyBydV9tc2dzbmQgaW50
NjQ7IHJ1X21zZ3JjdiBpbnQ2NDsgcnVfbnNpZ25hbHMgaW50NjQ7IHJ1X252Y3N3IGludDY0OyBy
dV9uaXZjc3cgaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9ydXNhZ2UgPSAxNDQNCiAgICAr
dHlwZSBfX19ybGltaXRfcmVzb3VyY2VfdCB1aW50MzINCiAgICArdHlwZSBfX19ydXNhZ2Vfd2hv
X3QgaW50MzINCiAgICArdHlwZSBfX19wcmlvcml0eV93aGljaF90IHVpbnQzMg0KICAgICt0eXBl
IF9zdGF0eF90aW1lc3RhbXAgc3RydWN0IHsgdHZfc2VjIGludDY0OyB0dl9uc2VjIHVpbnQzMjsg
X19zdGF0eF90aW1lc3RhbXBfcGFkMSBbMCsxXWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2Zf
c3RhdHhfdGltZXN0YW1wID0gMTYNCiAgICArdHlwZSBfc3RhdHggc3RydWN0IHsgc3R4X21hc2sg
dWludDMyOyBzdHhfYmxrc2l6ZSB1aW50MzI7IHN0eF9hdHRyaWJ1dGVzIHVpbnQ2NDsgc3R4X25s
aW5rIHVpbnQzMjsgc3R4X3VpZCB1aW50MzI7IHN0eF9naWQgdWludDMyOyBzdHhfbW9kZSB1aW50
MTY7IF9fc3RhdHhfcGFkMSBbMCsxXXVpbnQxNjsgc3R4X2lubyB1aW50NjQ7IHN0eF9zaXplIHVp
bnQ2NDsgc3R4X2Jsb2NrcyB1aW50NjQ7IHN0eF9hdHRyaWJ1dGVzX21hc2sgdWludDY0OyBzdHhf
YXRpbWUgX3N0YXR4X3RpbWVzdGFtcDsgc3R4X2J0aW1lIF9zdGF0eF90aW1lc3RhbXA7IHN0eF9j
dGltZSBfc3RhdHhfdGltZXN0YW1wOyBzdHhfbXRpbWUgX3N0YXR4X3RpbWVzdGFtcDsgc3R4X3Jk
ZXZfbWFqb3IgdWludDMyOyBzdHhfcmRldl9taW5vciB1aW50MzI7IHN0eF9kZXZfbWFqb3IgdWlu
dDMyOyBzdHhfZGV2X21pbm9yIHVpbnQzMjsgX19zdGF0eF9wYWQyIFsxMysxXXVpbnQ2NDsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX3N0YXR4ID0gMjU2DQogICAgK3R5cGUgX3RpbWV6b25lIHN0cnVj
dCB7IHR6X21pbnV0ZXN3ZXN0IGludDMyOyB0el9kc3R0aW1lIGludDMyOyB9DQogICAgK2NvbnN0
IF9zaXplb2ZfdGltZXpvbmUgPSA4DQogICAgK3R5cGUgX19fdGltZXpvbmVfcHRyX3QgKl90aW1l
em9uZQ0KICAgICt0eXBlIF9pdGltZXJ2YWwgc3RydWN0IHsgaXRfaW50ZXJ2YWwgdGltZXZhbDsg
aXRfdmFsdWUgdGltZXZhbDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2l0aW1lcnZhbCA9IDMyDQog
ICAgK3R5cGUgX19faXRpbWVyX3doaWNoX3QgdWludDMyDQogICAgK3R5cGUgX3RtcyBzdHJ1Y3Qg
eyB0bXNfdXRpbWUgaW50NjQ7IHRtc19zdGltZSBpbnQ2NDsgdG1zX2N1dGltZSBpbnQ2NDsgdG1z
X2NzdGltZSBpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3RtcyA9IDMyDQogICAgK3R5cGUg
X2lkdHlwZV90IHVpbnQzMg0KICAgICt0eXBlIF9zb2NrYWRkcl91biBzdHJ1Y3QgeyBzdW5fZmFt
aWx5IHVpbnQxNjsgc3VuX3BhdGggWzEwNysxXWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9z
b2NrYWRkcl91biA9IDExMA0KICAgICt0eXBlIF9fX2xvY2FsZV9zdHJ1Y3Qgc3RydWN0IHsgX19s
b2NhbGVzIFsxMisxXSpfX19sb2NhbGVfZGF0YTsgX19jdHlwZV9iICp1aW50MTY7IF9fY3R5cGVf
dG9sb3dlciAqaW50MzI7IF9fY3R5cGVfdG91cHBlciAqaW50MzI7IF9fbmFtZXMgWzEyKzFdKmlu
dDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9fX2xvY2FsZV9zdHJ1Y3QgPSAyMzINCiAgICArdHlw
ZSBfX19sb2NhbGVfdCAqX19fbG9jYWxlX3N0cnVjdA0KICAgICt0eXBlIF9sb2NhbGVfdCAqX19f
bG9jYWxlX3N0cnVjdA0KICAgICt0eXBlIF91c2VyX2ZwcmVnc19zdHJ1Y3Qgc3RydWN0IHsgY3dk
IHVpbnQxNjsgc3dkIHVpbnQxNjsgZnR3IHVpbnQxNjsgZm9wIHVpbnQxNjsgcmlwIHVpbnQ2NDsg
cmRwIHVpbnQ2NDsgbXhjc3IgdWludDMyOyBteGNyX21hc2sgdWludDMyOyBzdF9zcGFjZSBbMzEr
MV11aW50MzI7IHhtbV9zcGFjZSBbNjMrMV11aW50MzI7IHBhZGRpbmcgWzIzKzFddWludDMyOyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfdXNlcl9mcHJlZ3Nfc3RydWN0ID0gNTEyDQogICAgK3R5cGUg
X3VzZXJfcmVnc19zdHJ1Y3Qgc3RydWN0IHsgcjE1IHVpbnQ2NDsgcjE0IHVpbnQ2NDsgcjEzIHVp
bnQ2NDsgcjEyIHVpbnQ2NDsgcmJwIHVpbnQ2NDsgcmJ4IHVpbnQ2NDsgcjExIHVpbnQ2NDsgcjEw
IHVpbnQ2NDsgcjkgdWludDY0OyByOCB1aW50NjQ7IHJheCB1aW50NjQ7IHJjeCB1aW50NjQ7IHJk
eCB1aW50NjQ7IHJzaSB1aW50NjQ7IHJkaSB1aW50NjQ7IG9yaWdfcmF4IHVpbnQ2NDsgcmlwIHVp
bnQ2NDsgY3MgdWludDY0OyBlZmxhZ3MgdWludDY0OyByc3AgdWludDY0OyBzcyB1aW50NjQ7IGZz
X2Jhc2UgdWludDY0OyBnc19iYXNlIHVpbnQ2NDsgZHMgdWludDY0OyBlcyB1aW50NjQ7IGZzIHVp
bnQ2NDsgZ3MgdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdXNlcl9yZWdzX3N0cnVjdCA9
IDIxNg0KICAgICt0eXBlIF91c2VyIHN0cnVjdCB7IHJlZ3MgX3VzZXJfcmVnc19zdHJ1Y3Q7IHVf
ZnB2YWxpZCBpbnQzMjsgaTM4NyBfdXNlcl9mcHJlZ3Nfc3RydWN0OyB1X3RzaXplIHVpbnQ2NDsg
dV9kc2l6ZSB1aW50NjQ7IHVfc3NpemUgdWludDY0OyBzdGFydF9jb2RlIHVpbnQ2NDsgc3RhcnRf
c3RhY2sgdWludDY0OyBzaWduYWwgaW50NjQ7IHJlc2VydmVkIGludDMyOyBHb2R1bXBfMF9wYWQg
WzRdYnl0ZTsgdV9hcjAgKl91c2VyX3JlZ3Nfc3RydWN0OyB1X2Zwc3RhdGUgKl91c2VyX2ZwcmVn
c19zdHJ1Y3Q7IG1hZ2ljIHVpbnQ2NDsgdV9jb21tIFszMSsxXWludDg7IHVfZGVidWdyZWcgWzcr
MV11aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl91c2VyID0gOTEyDQogICAgK3R5cGUgX3V0
c25hbWUgc3RydWN0IHsgc3lzbmFtZSBbNjQrMV1pbnQ4OyBub2RlbmFtZSBbNjQrMV1pbnQ4OyBy
ZWxlYXNlIFs2NCsxXWludDg7IHZlcnNpb24gWzY0KzFdaW50ODsgbWFjaGluZSBbNjQrMV1pbnQ4
OyBkb21haW5uYW1lIFs2NCsxXWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl91dHNuYW1lID0g
MzkwDQogICAgK3R5cGUgX3RpbWV4IHN0cnVjdCB7IG1vZGVzIHVpbnQzMjsgb2Zmc2V0IGludDY0
OyBmcmVxIGludDY0OyBtYXhlcnJvciBpbnQ2NDsgZXN0ZXJyb3IgaW50NjQ7IHN0YXR1cyBpbnQz
MjsgY29uc3RhbnQgaW50NjQ7IHByZWNpc2lvbiBpbnQ2NDsgdG9sZXJhbmNlIGludDY0OyB0aW1l
IHRpbWV2YWw7IHRpY2sgaW50NjQ7IHBwc2ZyZXEgaW50NjQ7IGppdHRlciBpbnQ2NDsgc2hpZnQg
aW50MzI7IHN0YWJpbCBpbnQ2NDsgaml0Y250IGludDY0OyBjYWxjbnQgaW50NjQ7IGVycmNudCBp
bnQ2NDsgc3RiY250IGludDY0OyB0YWkgaW50MzI7IEdvZHVtcF8wIGludDMyOyBHb2R1bXBfMSBp
bnQzMjsgR29kdW1wXzIgaW50MzI7IEdvZHVtcF8zIGludDMyOyBHb2R1bXBfNCBpbnQzMjsgR29k
dW1wXzUgaW50MzI7IEdvZHVtcF82IGludDMyOyBHb2R1bXBfNyBpbnQzMjsgR29kdW1wXzggaW50
MzI7IEdvZHVtcF85IGludDMyOyBHb2R1bXBfMTAgaW50MzI7IH0NCiAgICArY29uc3QgX3NpemVv
Zl90aW1leCA9IDIwOA0KICAgICt0eXBlIF90bSBzdHJ1Y3QgeyB0bV9zZWMgaW50MzI7IHRtX21p
biBpbnQzMjsgdG1faG91ciBpbnQzMjsgdG1fbWRheSBpbnQzMjsgdG1fbW9uIGludDMyOyB0bV95
ZWFyIGludDMyOyB0bV93ZGF5IGludDMyOyB0bV95ZGF5IGludDMyOyB0bV9pc2RzdCBpbnQzMjsg
dG1fZ210b2ZmIGludDY0OyB0bV96b25lICppbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdG0g
PSA1Ng0KICAgICt0eXBlIF9pdGltZXJzcGVjIHN0cnVjdCB7IGl0X2ludGVydmFsIHRpbWVzcGVj
OyBpdF92YWx1ZSB0aW1lc3BlYzsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2l0aW1lcnNwZWMgPSAz
Mg0KICAgICt0eXBlIF9ycGNlbnQgc3RydWN0IHsgcl9uYW1lICppbnQ4OyByX2FsaWFzZXMgKipp
bnQ4OyByX251bWJlciBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0NCiAgICArY29uc3Qg
X3NpemVvZl9ycGNlbnQgPSAyNA0KICAgICt0eXBlIF9uZXRlbnQgc3RydWN0IHsgbl9uYW1lICpp
bnQ4OyBuX2FsaWFzZXMgKippbnQ4OyBuX2FkZHJ0eXBlIGludDMyOyBuX25ldCB1aW50MzI7IH0N
CiAgICArY29uc3QgX3NpemVvZl9uZXRlbnQgPSAyNA0KICAgICt0eXBlIF9ob3N0ZW50IHN0cnVj
dCB7IGhfbmFtZSAqaW50ODsgaF9hbGlhc2VzICoqaW50ODsgaF9hZGRydHlwZSBpbnQzMjsgaF9s
ZW5ndGggaW50MzI7IGhfYWRkcl9saXN0ICoqaW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2hv
c3RlbnQgPSAzMg0KICAgICt0eXBlIF9zZXJ2ZW50IHN0cnVjdCB7IHNfbmFtZSAqaW50ODsgc19h
bGlhc2VzICoqaW50ODsgc19wb3J0IGludDMyOyBzX3Byb3RvICppbnQ4OyB9DQogICAgK2NvbnN0
IF9zaXplb2Zfc2VydmVudCA9IDMyDQogICAgK3R5cGUgX3Byb3RvZW50IHN0cnVjdCB7IHBfbmFt
ZSAqaW50ODsgcF9hbGlhc2VzICoqaW50ODsgcF9wcm90byBpbnQzMjsgR29kdW1wXzBfcGFkIFs0
XWJ5dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9wcm90b2VudCA9IDI0DQogICAgK3R5cGUgX2Fk
ZHJpbmZvIHN0cnVjdCB7IGFpX2ZsYWdzIGludDMyOyBhaV9mYW1pbHkgaW50MzI7IGFpX3NvY2t0
eXBlIGludDMyOyBhaV9wcm90b2NvbCBpbnQzMjsgYWlfYWRkcmxlbiB1aW50MzI7IGFpX2FkZHIg
Kl9zb2NrYWRkcjsgYWlfY2Fub25uYW1lICppbnQ4OyBhaV9uZXh0ICpfYWRkcmluZm87IH0NCiAg
ICArY29uc3QgX3NpemVvZl9hZGRyaW5mbyA9IDQ4DQogICAgK3R5cGUgX2dhaWNiIHN0cnVjdCB7
IGFyX25hbWUgKmludDg7IGFyX3NlcnZpY2UgKmludDg7IGFyX3JlcXVlc3QgKl9hZGRyaW5mbzsg
YXJfcmVzdWx0ICpfYWRkcmluZm87IF9fcmV0dXJuIGludDMyOyBfX2dsaWJjX3Jlc2VydmVkIFs0
KzFdaW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9nYWljYiA9IDU2DQogICAgK3R5cGUgX3Bh
c3N3ZCBzdHJ1Y3QgeyBwd19uYW1lICppbnQ4OyBwd19wYXNzd2QgKmludDg7IHB3X3VpZCB1aW50
MzI7IHB3X2dpZCB1aW50MzI7IHB3X2dlY29zICppbnQ4OyBwd19kaXIgKmludDg7IHB3X3NoZWxs
ICppbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcGFzc3dkID0gNDgNCiAgICArdHlwZSBfRklM
RSBzdHJ1Y3QgeyB9DQogICAgK3R5cGUgX2dyb3VwIHN0cnVjdCB7IGdyX25hbWUgKmludDg7IGdy
X3Bhc3N3ZCAqaW50ODsgZ3JfZ2lkIHVpbnQzMjsgZ3JfbWVtICoqaW50ODsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX2dyb3VwID0gMzINCiAgICArdHlwZSBfc29ja19maWx0ZXIgc3RydWN0IHsgY29k
ZSB1aW50MTY7IGp0IHVpbnQ4OyBqZiB1aW50ODsgayB1aW50MzI7IH0NCiAgICArY29uc3QgX3Np
emVvZl9zb2NrX2ZpbHRlciA9IDgNCiAgICArdHlwZSBfc29ja19mcHJvZyBzdHJ1Y3QgeyBsZW4g
dWludDE2OyBmaWx0ZXIgKl9zb2NrX2ZpbHRlcjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NvY2tf
ZnByb2cgPSAxNg0KICAgICt0eXBlIF9zeXNpbmZvIHN0cnVjdCB7IHVwdGltZSBpbnQ2NDsgbG9h
ZHMgWzIrMV11aW50NjQ7IHRvdGFscmFtIHVpbnQ2NDsgZnJlZXJhbSB1aW50NjQ7IHNoYXJlZHJh
bSB1aW50NjQ7IGJ1ZmZlcnJhbSB1aW50NjQ7IHRvdGFsc3dhcCB1aW50NjQ7IGZyZWVzd2FwIHVp
bnQ2NDsgcHJvY3MgdWludDE2OyBwYWQgdWludDE2OyB0b3RhbGhpZ2ggdWludDY0OyBmcmVlaGln
aCB1aW50NjQ7IG1lbV91bml0IHVpbnQzMjsgX2YgWzBdaW50ODsgR29kdW1wXzBfcGFkIFs0XWJ5
dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9zeXNpbmZvID0gMTEyDQogICAgK3R5cGUgX19fa2Vy
bmVsX3NhX2ZhbWlseV90IHVpbnQxNg0KICAgICt0eXBlIF9fX2tlcm5lbF9zb2NrYWRkcl9zdG9y
YWdlIHN0cnVjdCB7IHNzX2ZhbWlseSB1aW50MTY7IF9fZGF0YSBbMTI1KzFdaW50ODsgR29kdW1w
XzBfYWxpZ24gWzBdaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9fX2tlcm5lbF9zb2NrYWRk
cl9zdG9yYWdlID0gMTI4DQogICAgK3R5cGUgX3NvY2thZGRyX25sIHN0cnVjdCB7IG5sX2ZhbWls
eSB1aW50MTY7IG5sX3BhZCB1aW50MTY7IG5sX3BpZCB1aW50MzI7IG5sX2dyb3VwcyB1aW50MzI7
IH0NCiAgICArY29uc3QgX3NpemVvZl9zb2NrYWRkcl9ubCA9IDEyDQogICAgK3R5cGUgX25sbXNn
aGRyIHN0cnVjdCB7IG5sbXNnX2xlbiB1aW50MzI7IG5sbXNnX3R5cGUgdWludDE2OyBubG1zZ19m
bGFncyB1aW50MTY7IG5sbXNnX3NlcSB1aW50MzI7IG5sbXNnX3BpZCB1aW50MzI7IH0NCiAgICAr
Y29uc3QgX3NpemVvZl9ubG1zZ2hkciA9IDE2DQogICAgK3R5cGUgX25sbXNnZXJyIHN0cnVjdCB7
IGVycm9yIGludDMyOyBtc2cgX25sbXNnaGRyOyB9DQogICAgK2NvbnN0IF9zaXplb2Zfbmxtc2dl
cnIgPSAyMA0KICAgICt0eXBlIF9ubF9wa3RpbmZvIHN0cnVjdCB7IGdyb3VwIHVpbnQzMjsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX25sX3BrdGluZm8gPSA0DQogICAgK3R5cGUgX25sX21tYXBfcmVx
IHN0cnVjdCB7IG5tX2Jsb2NrX3NpemUgdWludDMyOyBubV9ibG9ja19uciB1aW50MzI7IG5tX2Zy
YW1lX3NpemUgdWludDMyOyBubV9mcmFtZV9uciB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVv
Zl9ubF9tbWFwX3JlcSA9IDE2DQogICAgK3R5cGUgX25sX21tYXBfaGRyIHN0cnVjdCB7IG5tX3N0
YXR1cyB1aW50MzI7IG5tX2xlbiB1aW50MzI7IG5tX2dyb3VwIHVpbnQzMjsgbm1fcGlkIHVpbnQz
Mjsgbm1fdWlkIHVpbnQzMjsgbm1fZ2lkIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX25s
X21tYXBfaGRyID0gMjQNCiAgICArdHlwZSBfbmxhdHRyIHN0cnVjdCB7IG5sYV9sZW4gdWludDE2
OyBubGFfdHlwZSB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl9ubGF0dHIgPSA0DQogICAg
K3R5cGUgX25sYV9iaXRmaWVsZDMyIHN0cnVjdCB7IHZhbHVlIHVpbnQzMjsgc2VsZWN0b3IgdWlu
dDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmxhX2JpdGZpZWxkMzIgPSA4DQogICAgK3R5cGUg
X2lmYWRkcm1zZyBzdHJ1Y3QgeyBpZmFfZmFtaWx5IHVpbnQ4OyBpZmFfcHJlZml4bGVuIHVpbnQ4
OyBpZmFfZmxhZ3MgdWludDg7IGlmYV9zY29wZSB1aW50ODsgaWZhX2luZGV4IHVpbnQzMjsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX2lmYWRkcm1zZyA9IDgNCiAgICArdHlwZSBfaWZhX2NhY2hlaW5m
byBzdHJ1Y3QgeyBpZmFfcHJlZmVyZWQgdWludDMyOyBpZmFfdmFsaWQgdWludDMyOyBjc3RhbXAg
dWludDMyOyB0c3RhbXAgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZhX2NhY2hlaW5m
byA9IDE2DQogICAgK3R5cGUgX3R1bl9waSBzdHJ1Y3QgeyBmbGFncyB1aW50MTY7IHByb3RvIHVp
bnQxNjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3R1bl9waSA9IDQNCiAgICArdHlwZSBfdHVuX2Zp
bHRlciBzdHJ1Y3QgeyBmbGFncyB1aW50MTY7IGNvdW50IHVpbnQxNjsgYWRkciBbMF1bNSsxXXVp
bnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdHVuX2ZpbHRlciA9IDQNCiAgICArdHlwZSBfcHRy
YWNlX3BlZWtzaWdpbmZvX2FyZ3Mgc3RydWN0IHsgb2ZmIHVpbnQ2NDsgZmxhZ3MgdWludDMyOyBu
ciBpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3B0cmFjZV9wZWVrc2lnaW5mb19hcmdzID0g
MTYNCiAgICArdHlwZSBfc2VjY29tcF9tZXRhZGF0YSBzdHJ1Y3QgeyBmaWx0ZXJfb2ZmIHVpbnQ2
NDsgZmxhZ3MgdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc2VjY29tcF9tZXRhZGF0YSA9
IDE2DQogICAgK3R5cGUgX3B0X3JlZ3Mgc3RydWN0IHsgcjE1IHVpbnQ2NDsgcjE0IHVpbnQ2NDsg
cjEzIHVpbnQ2NDsgcjEyIHVpbnQ2NDsgcmJwIHVpbnQ2NDsgcmJ4IHVpbnQ2NDsgcjExIHVpbnQ2
NDsgcjEwIHVpbnQ2NDsgcjkgdWludDY0OyByOCB1aW50NjQ7IHJheCB1aW50NjQ7IHJjeCB1aW50
NjQ7IHJkeCB1aW50NjQ7IHJzaSB1aW50NjQ7IHJkaSB1aW50NjQ7IG9yaWdfcmF4IHVpbnQ2NDsg
cmlwIHVpbnQ2NDsgY3MgdWludDY0OyBlZmxhZ3MgdWludDY0OyByc3AgdWludDY0OyBzcyB1aW50
NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9wdF9yZWdzID0gMTY4DQogICAgK3R5cGUgX3J0bmxf
bGlua19zdGF0cyBzdHJ1Y3QgeyByeF9wYWNrZXRzIHVpbnQzMjsgdHhfcGFja2V0cyB1aW50MzI7
IHJ4X2J5dGVzIHVpbnQzMjsgdHhfYnl0ZXMgdWludDMyOyByeF9lcnJvcnMgdWludDMyOyB0eF9l
cnJvcnMgdWludDMyOyByeF9kcm9wcGVkIHVpbnQzMjsgdHhfZHJvcHBlZCB1aW50MzI7IG11bHRp
Y2FzdCB1aW50MzI7IGNvbGxpc2lvbnMgdWludDMyOyByeF9sZW5ndGhfZXJyb3JzIHVpbnQzMjsg
cnhfb3Zlcl9lcnJvcnMgdWludDMyOyByeF9jcmNfZXJyb3JzIHVpbnQzMjsgcnhfZnJhbWVfZXJy
b3JzIHVpbnQzMjsgcnhfZmlmb19lcnJvcnMgdWludDMyOyByeF9taXNzZWRfZXJyb3JzIHVpbnQz
MjsgdHhfYWJvcnRlZF9lcnJvcnMgdWludDMyOyB0eF9jYXJyaWVyX2Vycm9ycyB1aW50MzI7IHR4
X2ZpZm9fZXJyb3JzIHVpbnQzMjsgdHhfaGVhcnRiZWF0X2Vycm9ycyB1aW50MzI7IHR4X3dpbmRv
d19lcnJvcnMgdWludDMyOyByeF9jb21wcmVzc2VkIHVpbnQzMjsgdHhfY29tcHJlc3NlZCB1aW50
MzI7IHJ4X25vaGFuZGxlciB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9ydG5sX2xpbmtf
c3RhdHMgPSA5Ng0KICAgICt0eXBlIF9ydG5sX2xpbmtfc3RhdHM2NCBzdHJ1Y3QgeyByeF9wYWNr
ZXRzIHVpbnQ2NDsgdHhfcGFja2V0cyB1aW50NjQ7IHJ4X2J5dGVzIHVpbnQ2NDsgdHhfYnl0ZXMg
dWludDY0OyByeF9lcnJvcnMgdWludDY0OyB0eF9lcnJvcnMgdWludDY0OyByeF9kcm9wcGVkIHVp
bnQ2NDsgdHhfZHJvcHBlZCB1aW50NjQ7IG11bHRpY2FzdCB1aW50NjQ7IGNvbGxpc2lvbnMgdWlu
dDY0OyByeF9sZW5ndGhfZXJyb3JzIHVpbnQ2NDsgcnhfb3Zlcl9lcnJvcnMgdWludDY0OyByeF9j
cmNfZXJyb3JzIHVpbnQ2NDsgcnhfZnJhbWVfZXJyb3JzIHVpbnQ2NDsgcnhfZmlmb19lcnJvcnMg
dWludDY0OyByeF9taXNzZWRfZXJyb3JzIHVpbnQ2NDsgdHhfYWJvcnRlZF9lcnJvcnMgdWludDY0
OyB0eF9jYXJyaWVyX2Vycm9ycyB1aW50NjQ7IHR4X2ZpZm9fZXJyb3JzIHVpbnQ2NDsgdHhfaGVh
cnRiZWF0X2Vycm9ycyB1aW50NjQ7IHR4X3dpbmRvd19lcnJvcnMgdWludDY0OyByeF9jb21wcmVz
c2VkIHVpbnQ2NDsgdHhfY29tcHJlc3NlZCB1aW50NjQ7IHJ4X25vaGFuZGxlciB1aW50NjQ7IH0N
CiAgICArY29uc3QgX3NpemVvZl9ydG5sX2xpbmtfc3RhdHM2NCA9IDE5Mg0KICAgICt0eXBlIF9y
dG5sX2xpbmtfaWZtYXAgc3RydWN0IHsgbWVtX3N0YXJ0IHVpbnQ2NDsgbWVtX2VuZCB1aW50NjQ7
IGJhc2VfYWRkciB1aW50NjQ7IGlycSB1aW50MTY7IGRtYSB1aW50ODsgcG9ydCB1aW50ODsgR29k
dW1wXzBfcGFkIFs0XWJ5dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9ydG5sX2xpbmtfaWZtYXAg
PSAzMg0KICAgICt0eXBlIF9pZmxhX2JyaWRnZV9pZCBzdHJ1Y3QgeyBwcmlvIFsxKzFddWludDg7
IGFkZHIgWzUrMV11aW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfYnJpZGdlX2lkID0g
OA0KICAgICt0eXBlIF9pZmxhX2NhY2hlaW5mbyBzdHJ1Y3QgeyBtYXhfcmVhc21fbGVuIHVpbnQz
MjsgdHN0YW1wIHVpbnQzMjsgcmVhY2hhYmxlX3RpbWUgdWludDMyOyByZXRyYW5zX3RpbWUgdWlu
dDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZsYV9jYWNoZWluZm8gPSAxNg0KICAgICt0eXBl
IF9pZmxhX3ZsYW5fZmxhZ3Mgc3RydWN0IHsgZmxhZ3MgdWludDMyOyBtYXNrIHVpbnQzMjsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfdmxhbl9mbGFncyA9IDgNCiAgICArdHlwZSBfaWZsYV92
bGFuX3Fvc19tYXBwaW5nIHN0cnVjdCB7IGZyb20gdWludDMyOyB0byB1aW50MzI7IH0NCiAgICAr
Y29uc3QgX3NpemVvZl9pZmxhX3ZsYW5fcW9zX21hcHBpbmcgPSA4DQogICAgK3R5cGUgX2lmbGFf
dnhsYW5fcG9ydF9yYW5nZSBzdHJ1Y3QgeyBsb3cgdWludDE2OyBoaWdoIHVpbnQxNjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX2lmbGFfdnhsYW5fcG9ydF9yYW5nZSA9IDQNCiAgICArdHlwZSBfaWZs
YV92Zl9tYWMgc3RydWN0IHsgdmYgdWludDMyOyBtYWMgWzMxKzFddWludDg7IH0NCiAgICArY29u
c3QgX3NpemVvZl9pZmxhX3ZmX21hYyA9IDM2DQogICAgK3R5cGUgX2lmbGFfdmZfdmxhbiBzdHJ1
Y3QgeyB2ZiB1aW50MzI7IHZsYW4gdWludDMyOyBxb3MgdWludDMyOyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfaWZsYV92Zl92bGFuID0gMTINCiAgICArdHlwZSBfaWZsYV92Zl92bGFuX2luZm8gc3Ry
dWN0IHsgdmYgdWludDMyOyB2bGFuIHVpbnQzMjsgcW9zIHVpbnQzMjsgdmxhbl9wcm90byB1aW50
MTY7IEdvZHVtcF8wX3BhZCBbMl1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl92
bGFuX2luZm8gPSAxNg0KICAgICt0eXBlIF9pZmxhX3ZmX3R4X3JhdGUgc3RydWN0IHsgdmYgdWlu
dDMyOyByYXRlIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfdmZfdHhfcmF0ZSA9
IDgNCiAgICArdHlwZSBfaWZsYV92Zl9yYXRlIHN0cnVjdCB7IHZmIHVpbnQzMjsgbWluX3R4X3Jh
dGUgdWludDMyOyBtYXhfdHhfcmF0ZSB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZmxh
X3ZmX3JhdGUgPSAxMg0KICAgICt0eXBlIF9pZmxhX3ZmX3Nwb29mY2hrIHN0cnVjdCB7IHZmIHVp
bnQzMjsgc2V0dGluZyB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZmxhX3ZmX3Nwb29m
Y2hrID0gOA0KICAgICt0eXBlIF9pZmxhX3ZmX2d1aWQgc3RydWN0IHsgdmYgdWludDMyOyBndWlk
IHVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfdmZfZ3VpZCA9IDE2DQogICAgK3R5
cGUgX2lmbGFfdmZfbGlua19zdGF0ZSBzdHJ1Y3QgeyB2ZiB1aW50MzI7IGxpbmtfc3RhdGUgdWlu
dDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9saW5rX3N0YXRlID0gOA0KICAgICt0
eXBlIF9pZmxhX3ZmX3Jzc19xdWVyeV9lbiBzdHJ1Y3QgeyB2ZiB1aW50MzI7IHNldHRpbmcgdWlu
dDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9yc3NfcXVlcnlfZW4gPSA4DQogICAg
K3R5cGUgX2lmbGFfdmZfdHJ1c3Qgc3RydWN0IHsgdmYgdWludDMyOyBzZXR0aW5nIHVpbnQzMjsg
fQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfdmZfdHJ1c3QgPSA4DQogICAgK3R5cGUgX2lmbGFf
cG9ydF92c2kgc3RydWN0IHsgdnNpX21ncl9pZCB1aW50ODsgdnNpX3R5cGVfaWQgWzIrMV11aW50
ODsgdnNpX3R5cGVfdmVyc2lvbiB1aW50ODsgcGFkIFsyKzFddWludDg7IH0NCiAgICArY29uc3Qg
X3NpemVvZl9pZmxhX3BvcnRfdnNpID0gOA0KICAgICt0eXBlIF9pZl9zdGF0c19tc2cgc3RydWN0
IHsgZmFtaWx5IHVpbnQ4OyBwYWQxIHVpbnQ4OyBwYWQyIHVpbnQxNjsgaWZpbmRleCB1aW50MzI7
IGZpbHRlcl9tYXNrIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmX3N0YXRzX21zZyA9
IDEyDQogICAgK3R5cGUgX2lmbGFfcm1uZXRfZmxhZ3Mgc3RydWN0IHsgZmxhZ3MgdWludDMyOyBt
YXNrIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfcm1uZXRfZmxhZ3MgPSA4DQog
ICAgK3R5cGUgX25kbXNnIHN0cnVjdCB7IG5kbV9mYW1pbHkgdWludDg7IG5kbV9wYWQxIHVpbnQ4
OyBuZG1fcGFkMiB1aW50MTY7IG5kbV9pZmluZGV4IGludDMyOyBuZG1fc3RhdGUgdWludDE2OyBu
ZG1fZmxhZ3MgdWludDg7IG5kbV90eXBlIHVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmRt
c2cgPSAxMg0KICAgICt0eXBlIF9uZGFfY2FjaGVpbmZvIHN0cnVjdCB7IG5kbV9jb25maXJtZWQg
dWludDMyOyBuZG1fdXNlZCB1aW50MzI7IG5kbV91cGRhdGVkIHVpbnQzMjsgbmRtX3JlZmNudCB1
aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9uZGFfY2FjaGVpbmZvID0gMTYNCiAgICArdHlw
ZSBfbmR0X3N0YXRzIHN0cnVjdCB7IG5kdHNfYWxsb2NzIHVpbnQ2NDsgbmR0c19kZXN0cm95cyB1
aW50NjQ7IG5kdHNfaGFzaF9ncm93cyB1aW50NjQ7IG5kdHNfcmVzX2ZhaWxlZCB1aW50NjQ7IG5k
dHNfbG9va3VwcyB1aW50NjQ7IG5kdHNfaGl0cyB1aW50NjQ7IG5kdHNfcmN2X3Byb2Jlc19tY2Fz
dCB1aW50NjQ7IG5kdHNfcmN2X3Byb2Jlc191Y2FzdCB1aW50NjQ7IG5kdHNfcGVyaW9kaWNfZ2Nf
cnVucyB1aW50NjQ7IG5kdHNfZm9yY2VkX2djX3J1bnMgdWludDY0OyBuZHRzX3RhYmxlX2Z1bGxz
IHVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX25kdF9zdGF0cyA9IDg4DQogICAgK3R5cGUg
X25kdG1zZyBzdHJ1Y3QgeyBuZHRtX2ZhbWlseSB1aW50ODsgbmR0bV9wYWQxIHVpbnQ4OyBuZHRt
X3BhZDIgdWludDE2OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmR0bXNnID0gNA0KICAgICt0eXBl
IF9uZHRfY29uZmlnIHN0cnVjdCB7IG5kdGNfa2V5X2xlbiB1aW50MTY7IG5kdGNfZW50cnlfc2l6
ZSB1aW50MTY7IG5kdGNfZW50cmllcyB1aW50MzI7IG5kdGNfbGFzdF9mbHVzaCB1aW50MzI7IG5k
dGNfbGFzdF9yYW5kIHVpbnQzMjsgbmR0Y19oYXNoX3JuZCB1aW50MzI7IG5kdGNfaGFzaF9tYXNr
IHVpbnQzMjsgbmR0Y19oYXNoX2NoYWluX2djIHVpbnQzMjsgbmR0Y19wcm94eV9xbGVuIHVpbnQz
MjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX25kdF9jb25maWcgPSAzMg0KICAgICt0eXBlIF9ydGF0
dHIgc3RydWN0IHsgcnRhX2xlbiB1aW50MTY7IHJ0YV90eXBlIHVpbnQxNjsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX3J0YXR0ciA9IDQNCiAgICArdHlwZSBfcnRtc2cgc3RydWN0IHsgcnRtX2ZhbWls
eSB1aW50ODsgcnRtX2RzdF9sZW4gdWludDg7IHJ0bV9zcmNfbGVuIHVpbnQ4OyBydG1fdG9zIHVp
bnQ4OyBydG1fdGFibGUgdWludDg7IHJ0bV9wcm90b2NvbCB1aW50ODsgcnRtX3Njb3BlIHVpbnQ4
OyBydG1fdHlwZSB1aW50ODsgcnRtX2ZsYWdzIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X3J0bXNnID0gMTINCiAgICArdHlwZSBfcnRuZXh0aG9wIHN0cnVjdCB7IHJ0bmhfbGVuIHVpbnQx
NjsgcnRuaF9mbGFncyB1aW50ODsgcnRuaF9ob3BzIHVpbnQ4OyBydG5oX2lmaW5kZXggaW50MzI7
IH0NCiAgICArY29uc3QgX3NpemVvZl9ydG5leHRob3AgPSA4DQogICAgK3R5cGUgX3J0dmlhIHN0
cnVjdCB7IHJ0dmlhX2ZhbWlseSB1aW50MTY7IHJ0dmlhX2FkZHIgWzBddWludDg7IH0NCiAgICAr
Y29uc3QgX3NpemVvZl9ydHZpYSA9IDINCiAgICArdHlwZSBfcnRhX2NhY2hlaW5mbyBzdHJ1Y3Qg
eyBydGFfY2xudHJlZiB1aW50MzI7IHJ0YV9sYXN0dXNlIHVpbnQzMjsgcnRhX2V4cGlyZXMgaW50
MzI7IHJ0YV9lcnJvciB1aW50MzI7IHJ0YV91c2VkIHVpbnQzMjsgcnRhX2lkIHVpbnQzMjsgcnRh
X3RzIHVpbnQzMjsgcnRhX3RzYWdlIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3J0YV9j
YWNoZWluZm8gPSAzMg0KICAgICt0eXBlIF9ydGFfc2Vzc2lvbiBzdHJ1Y3QgeyBwcm90byB1aW50
ODsgcGFkMSB1aW50ODsgcGFkMiB1aW50MTY7IHUgc3RydWN0IHsgcG9ydHMgc3RydWN0IHsgc3Bv
cnQgdWludDE2OyBkcG9ydCB1aW50MTY7IH07IEdvZHVtcF8wX2FsaWduIFswXWludDMyOyB9OyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfcnRhX3Nlc3Npb24gPSA4DQogICAgK3R5cGUgX3J0YV9tZmNf
c3RhdHMgc3RydWN0IHsgbWZjc19wYWNrZXRzIHVpbnQ2NDsgbWZjc19ieXRlcyB1aW50NjQ7IG1m
Y3Nfd3JvbmdfaWYgdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcnRhX21mY19zdGF0cyA9
IDI0DQogICAgK3R5cGUgX3J0Z2VubXNnIHN0cnVjdCB7IHJ0Z2VuX2ZhbWlseSB1aW50ODsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX3J0Z2VubXNnID0gMQ0KICAgICt0eXBlIF9pZmluZm9tc2cgc3Ry
dWN0IHsgaWZpX2ZhbWlseSB1aW50ODsgX19pZmlfcGFkIHVpbnQ4OyBpZmlfdHlwZSB1aW50MTY7
IGlmaV9pbmRleCBpbnQzMjsgaWZpX2ZsYWdzIHVpbnQzMjsgaWZpX2NoYW5nZSB1aW50MzI7IH0N
CiAgICArY29uc3QgX3NpemVvZl9pZmluZm9tc2cgPSAxNg0KICAgICt0eXBlIF9wcmVmaXhtc2cg
c3RydWN0IHsgcHJlZml4X2ZhbWlseSB1aW50ODsgcHJlZml4X3BhZDEgdWludDg7IHByZWZpeF9w
YWQyIHVpbnQxNjsgcHJlZml4X2lmaW5kZXggaW50MzI7IHByZWZpeF90eXBlIHVpbnQ4OyBwcmVm
aXhfbGVuIHVpbnQ4OyBwcmVmaXhfZmxhZ3MgdWludDg7IHByZWZpeF9wYWQzIHVpbnQ4OyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfcHJlZml4bXNnID0gMTINCiAgICArdHlwZSBfcHJlZml4X2NhY2hl
aW5mbyBzdHJ1Y3QgeyBwcmVmZXJyZWRfdGltZSB1aW50MzI7IHZhbGlkX3RpbWUgdWludDMyOyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfcHJlZml4X2NhY2hlaW5mbyA9IDgNCiAgICArdHlwZSBfdGNt
c2cgc3RydWN0IHsgdGNtX2ZhbWlseSB1aW50ODsgdGNtX19wYWQxIHVpbnQ4OyB0Y21fX3BhZDIg
dWludDE2OyB0Y21faWZpbmRleCBpbnQzMjsgdGNtX2hhbmRsZSB1aW50MzI7IHRjbV9wYXJlbnQg
dWludDMyOyB0Y21faW5mbyB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl90Y21zZyA9IDIw
DQogICAgK3R5cGUgX25kdXNlcm9wdG1zZyBzdHJ1Y3QgeyBuZHVzZXJvcHRfZmFtaWx5IHVpbnQ4
OyBuZHVzZXJvcHRfcGFkMSB1aW50ODsgbmR1c2Vyb3B0X29wdHNfbGVuIHVpbnQxNjsgbmR1c2Vy
b3B0X2lmaW5kZXggaW50MzI7IG5kdXNlcm9wdF9pY21wX3R5cGUgdWludDg7IG5kdXNlcm9wdF9p
Y21wX2NvZGUgdWludDg7IG5kdXNlcm9wdF9wYWQyIHVpbnQxNjsgbmR1c2Vyb3B0X3BhZDMgdWlu
dDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmR1c2Vyb3B0bXNnID0gMTYNCiAgICArdHlwZSBf
dGNhbXNnIHN0cnVjdCB7IHRjYV9mYW1pbHkgdWludDg7IHRjYV9fcGFkMSB1aW50ODsgdGNhX19w
YWQyIHVpbnQxNjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3RjYW1zZyA9IDQNCiAgICArdHlwZSBf
aWZfbmFtZWluZGV4IHN0cnVjdCB7IGlmX2luZGV4IHVpbnQzMjsgaWZfbmFtZSAqaW50ODsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX2lmX25hbWVpbmRleCA9IDE2DQogICAgK3R5cGUgX2lmYWRkciBz
dHJ1Y3QgeyBpZmFfYWRkciBfc29ja2FkZHI7IGlmYV9pZnUgc3RydWN0IHsgaWZ1X2Jyb2FkYWRk
ciBfc29ja2FkZHI7IH07IGlmYV9pZnAgKl9pZmFjZTsgaWZhX25leHQgKl9pZmFkZHI7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9pZmFkZHIgPSA0OA0KICAgICt0eXBlIF9pZm1hcCBzdHJ1Y3QgeyBt
ZW1fc3RhcnQgdWludDY0OyBtZW1fZW5kIHVpbnQ2NDsgYmFzZV9hZGRyIHVpbnQxNjsgaXJxIHVp
bnQ4OyBkbWEgdWludDg7IHBvcnQgdWludDg7IEdvZHVtcF8wX3BhZCBbM11ieXRlOyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfaWZtYXAgPSAyNA0KICAgICt0eXBlIF9pZnJlcSBzdHJ1Y3QgeyBpZnJf
aWZybiBzdHJ1Y3QgeyBpZnJuX25hbWUgWzE1KzFdaW50ODsgfTsgaWZyX2lmcnUgc3RydWN0IHsg
aWZydV9hZGRyIF9zb2NrYWRkcjsgR29kdW1wXzBfcGFkIFs4XWJ5dGU7IEdvZHVtcF8xX2FsaWdu
IFswXWludDY0OyB9OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZyZXEgPSA0MA0KICAgICt0eXBl
IF9pZmNvbmYgc3RydWN0IHsgaWZjX2xlbiBpbnQzMjsgaWZjX2lmY3Ugc3RydWN0IHsgaWZjdV9i
dWYgX19fY2FkZHJfdDsgfTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmY29uZiA9IDE2DQogICAg
K3R5cGUgX3J0ZW50cnkgc3RydWN0IHsgcnRfcGFkMSB1aW50NjQ7IHJ0X2RzdCBfc29ja2FkZHI7
IHJ0X2dhdGV3YXkgX3NvY2thZGRyOyBydF9nZW5tYXNrIF9zb2NrYWRkcjsgcnRfZmxhZ3MgdWlu
dDE2OyBydF9wYWQyIGludDE2OyBydF9wYWQzIHVpbnQ2NDsgcnRfdG9zIHVpbnQ4OyBydF9jbGFz
cyB1aW50ODsgcnRfcGFkNCBbMisxXWludDE2OyBydF9tZXRyaWMgaW50MTY7IHJ0X2RldiAqaW50
ODsgcnRfbXR1IHVpbnQ2NDsgcnRfd2luZG93IHVpbnQ2NDsgcnRfaXJ0dCB1aW50MTY7IEdvZHVt
cF8wX3BhZCBbNl1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcnRlbnRyeSA9IDEyMA0KICAg
ICtjb25zdCBfc2l6ZW9mX2luNl9ydG1zZyA9IDgwDQogICAgK3R5cGUgX3NvY2thZGRyX2xsIHN0
cnVjdCB7IHNsbF9mYW1pbHkgdWludDE2OyBzbGxfcHJvdG9jb2wgdWludDE2OyBzbGxfaWZpbmRl
eCBpbnQzMjsgc2xsX2hhdHlwZSB1aW50MTY7IHNsbF9wa3R0eXBlIHVpbnQ4OyBzbGxfaGFsZW4g
dWludDg7IHNsbF9hZGRyIFs3KzFddWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9zb2NrYWRk
cl9sbCA9IDIwDQogICAgK3R5cGUgX3BhY2tldF9tcmVxIHN0cnVjdCB7IG1yX2lmaW5kZXggaW50
MzI7IG1yX3R5cGUgdWludDE2OyBtcl9hbGVuIHVpbnQxNjsgbXJfYWRkcmVzcyBbNysxXXVpbnQ4
OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcGFja2V0X21yZXEgPSAxNg0KICAgICt0eXBlIF9zdGF0
ZnMgc3RydWN0IHsgZl90eXBlIGludDY0OyBmX2JzaXplIGludDY0OyBmX2Jsb2NrcyB1aW50NjQ7
IGZfYmZyZWUgdWludDY0OyBmX2JhdmFpbCB1aW50NjQ7IGZfZmlsZXMgdWludDY0OyBmX2ZmcmVl
IHVpbnQ2NDsgZl9mc2lkIF9fX2ZzaWRfdDsgZl9uYW1lbGVuIGludDY0OyBmX2Zyc2l6ZSBpbnQ2
NDsgZl9mbGFncyBpbnQ2NDsgZl9zcGFyZSBbMysxXWludDY0OyB9DQogICAgK2NvbnN0IF9zaXpl
b2Zfc3RhdGZzID0gMTIwDQogICAgK3R5cGUgX3N0YXRmczY0IHN0cnVjdCB7IGZfdHlwZSBpbnQ2
NDsgZl9ic2l6ZSBpbnQ2NDsgZl9ibG9ja3MgdWludDY0OyBmX2JmcmVlIHVpbnQ2NDsgZl9iYXZh
aWwgdWludDY0OyBmX2ZpbGVzIHVpbnQ2NDsgZl9mZnJlZSB1aW50NjQ7IGZfZnNpZCBfX19mc2lk
X3Q7IGZfbmFtZWxlbiBpbnQ2NDsgZl9mcnNpemUgaW50NjQ7IGZfZmxhZ3MgaW50NjQ7IGZfc3Bh
cmUgWzMrMV1pbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3N0YXRmczY0ID0gMTIwDQogICAg
K3R5cGUgX250cHRpbWV2YWwgc3RydWN0IHsgdGltZSB0aW1ldmFsOyBtYXhlcnJvciBpbnQ2NDsg
ZXN0ZXJyb3IgaW50NjQ7IHRhaSBpbnQ2NDsgX19nbGliY19yZXNlcnZlZDEgaW50NjQ7IF9fZ2xp
YmNfcmVzZXJ2ZWQyIGludDY0OyBfX2dsaWJjX3Jlc2VydmVkMyBpbnQ2NDsgX19nbGliY19yZXNl
cnZlZDQgaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9udHB0aW1ldmFsID0gNzINCiAgICAr
dHlwZSBfdXRpbWJ1ZiBzdHJ1Y3QgeyBhY3RpbWUgaW50NjQ7IG1vZHRpbWUgaW50NjQ7IH0NCiAg
ICArY29uc3QgX3NpemVvZl91dGltYnVmID0gMTYNCiAgICArdHlwZSBfZmlsZV9jbG9uZV9yYW5n
ZSBzdHJ1Y3QgeyBzcmNfZmQgaW50NjQ7IHNyY19vZmZzZXQgdWludDY0OyBzcmNfbGVuZ3RoIHVp
bnQ2NDsgZGVzdF9vZmZzZXQgdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZmlsZV9jbG9u
ZV9yYW5nZSA9IDMyDQogICAgK3R5cGUgX2ZzdHJpbV9yYW5nZSBzdHJ1Y3QgeyBzdGFydCB1aW50
NjQ7IGxlbiB1aW50NjQ7IG1pbmxlbiB1aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9mc3Ry
aW1fcmFuZ2UgPSAyNA0KICAgICt0eXBlIF9maWxlX2RlZHVwZV9yYW5nZV9pbmZvIHN0cnVjdCB7
IGRlc3RfZmQgaW50NjQ7IGRlc3Rfb2Zmc2V0IHVpbnQ2NDsgYnl0ZXNfZGVkdXBlZCB1aW50NjQ7
IHN0YXR1cyBpbnQzMjsgcmVzZXJ2ZWQgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZmls
ZV9kZWR1cGVfcmFuZ2VfaW5mbyA9IDMyDQogICAgK3R5cGUgX2ZpbGVfZGVkdXBlX3JhbmdlIHN0
cnVjdCB7IHNyY19vZmZzZXQgdWludDY0OyBzcmNfbGVuZ3RoIHVpbnQ2NDsgZGVzdF9jb3VudCB1
aW50MTY7IHJlc2VydmVkMSB1aW50MTY7IHJlc2VydmVkMiB1aW50MzI7IGluZm8gWzBdX2ZpbGVf
ZGVkdXBlX3JhbmdlX2luZm87IH0NCiAgICArY29uc3QgX3NpemVvZl9maWxlX2RlZHVwZV9yYW5n
ZSA9IDI0DQogICAgK3R5cGUgX2ZpbGVzX3N0YXRfc3RydWN0IHN0cnVjdCB7IG5yX2ZpbGVzIHVp
bnQ2NDsgbnJfZnJlZV9maWxlcyB1aW50NjQ7IG1heF9maWxlcyB1aW50NjQ7IH0NCiAgICArY29u
c3QgX3NpemVvZl9maWxlc19zdGF0X3N0cnVjdCA9IDI0DQogICAgK3R5cGUgX2lub2Rlc19zdGF0
X3Qgc3RydWN0IHsgbnJfaW5vZGVzIGludDY0OyBucl91bnVzZWQgaW50NjQ7IGR1bW15IFs0KzFd
aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9pbm9kZXNfc3RhdF90ID0gNTYNCiAgICArdHlw
ZSBfZnN4YXR0ciBzdHJ1Y3QgeyBmc3hfeGZsYWdzIHVpbnQzMjsgZnN4X2V4dHNpemUgdWludDMy
OyBmc3hfbmV4dGVudHMgdWludDMyOyBmc3hfcHJvamlkIHVpbnQzMjsgZnN4X2Nvd2V4dHNpemUg
dWludDMyOyBmc3hfcGFkIFs3KzFddWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9mc3hhdHRy
ID0gMjgNCiAgICArdHlwZSBfZnNjcnlwdF9wb2xpY3kgc3RydWN0IHsgdmVyc2lvbiB1aW50ODsg
Y29udGVudHNfZW5jcnlwdGlvbl9tb2RlIHVpbnQ4OyBmaWxlbmFtZXNfZW5jcnlwdGlvbl9tb2Rl
IHVpbnQ4OyBmbGFncyB1aW50ODsgbWFzdGVyX2tleV9kZXNjcmlwdG9yIFs3KzFddWludDg7IH0N
CiAgICArY29uc3QgX3NpemVvZl9mc2NyeXB0X3BvbGljeSA9IDEyDQogICAgK3R5cGUgX2ZzY3J5
cHRfa2V5IHN0cnVjdCB7IG1vZGUgdWludDMyOyByYXcgWzYzKzFddWludDg7IHNpemUgdWludDMy
OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZnNjcnlwdF9rZXkgPSA3Mg0KICAgICt0eXBlIF9fX2tl
cm5lbF9yd2ZfdCBpbnQzMg0KICAgICt0eXBlIF9pbm90aWZ5X2V2ZW50IHN0cnVjdCB7IHdkIGlu
dDMyOyBtYXNrIHVpbnQzMjsgY29va2llIHVpbnQzMjsgbGVuIHVpbnQzMjsgbmFtZSBbMF1pbnQ4
OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaW5vdGlmeV9ldmVudCA9IDE2DQogICAgK3R5cGUgX19f
Z3djaGFyX3QgaW50MzINCiAgICArdHlwZSBfaW1heGRpdl90IHN0cnVjdCB7IHF1b3QgaW50NjQ7
IHJlbSBpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2ltYXhkaXZfdCA9IDE2DQogICAgK3R5
cGUgX2ljbXA2X2ZpbHRlciBzdHJ1Y3QgeyBpY21wNl9maWx0IFs3KzFddWludDMyOyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfaWNtcDZfZmlsdGVyID0gMzINCiAgICArdHlwZSBfaWNtcDZfaGRyIHN0
cnVjdCB7IGljbXA2X3R5cGUgdWludDg7IGljbXA2X2NvZGUgdWludDg7IGljbXA2X2Nrc3VtIHVp
bnQxNjsgaWNtcDZfZGF0YXVuIHN0cnVjdCB7IGljbXA2X3VuX2RhdGEzMiBbMCsxXXVpbnQzMjsg
fTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2ljbXA2X2hkciA9IDgNCiAgICArdHlwZSBfbmRfcm91
dGVyX3NvbGljaXQgc3RydWN0IHsgbmRfcnNfaGRyIF9pY21wNl9oZHI7IH0NCiAgICArY29uc3Qg
X3NpemVvZl9uZF9yb3V0ZXJfc29saWNpdCA9IDgNCiAgICArdHlwZSBfbmRfcm91dGVyX2FkdmVy
dCBzdHJ1Y3QgeyBuZF9yYV9oZHIgX2ljbXA2X2hkcjsgbmRfcmFfcmVhY2hhYmxlIHVpbnQzMjsg
bmRfcmFfcmV0cmFuc21pdCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9uZF9yb3V0ZXJf
YWR2ZXJ0ID0gMTYNCiAgICArY29uc3QgX3NpemVvZl9uZF9uZWlnaGJvcl9zb2xpY2l0ID0gMjQN
CiAgICArY29uc3QgX3NpemVvZl9uZF9uZWlnaGJvcl9hZHZlcnQgPSAyNA0KICAgICtjb25zdCBf
c2l6ZW9mX25kX3JlZGlyZWN0ID0gNDANCiAgICArdHlwZSBfbmRfb3B0X2hkciBzdHJ1Y3QgeyBu
ZF9vcHRfdHlwZSB1aW50ODsgbmRfb3B0X2xlbiB1aW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X25kX29wdF9oZHIgPSAyDQogICAgK2NvbnN0IF9zaXplb2ZfbmRfb3B0X3ByZWZpeF9pbmZvID0g
MzINCiAgICArdHlwZSBfbmRfb3B0X3JkX2hkciBzdHJ1Y3QgeyBuZF9vcHRfcmhfdHlwZSB1aW50
ODsgbmRfb3B0X3JoX2xlbiB1aW50ODsgbmRfb3B0X3JoX3Jlc2VydmVkMSB1aW50MTY7IG5kX29w
dF9yaF9yZXNlcnZlZDIgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmRfb3B0X3JkX2hk
ciA9IDgNCiAgICArdHlwZSBfbmRfb3B0X210dSBzdHJ1Y3QgeyBuZF9vcHRfbXR1X3R5cGUgdWlu
dDg7IG5kX29wdF9tdHVfbGVuIHVpbnQ4OyBuZF9vcHRfbXR1X3Jlc2VydmVkIHVpbnQxNjsgbmRf
b3B0X210dV9tdHUgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmRfb3B0X210dSA9IDgN
CiAgICArY29uc3QgX3NpemVvZl9tbGRfaGRyID0gMjQNCiAgICArdHlwZSBfaWNtcDZfcm91dGVy
X3JlbnVtIHN0cnVjdCB7IHJyX2hkciBfaWNtcDZfaGRyOyBycl9zZWdudW0gdWludDg7IHJyX2Zs
YWdzIHVpbnQ4OyBycl9tYXhkZWxheSB1aW50MTY7IHJyX3Jlc2VydmVkIHVpbnQzMjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX2ljbXA2X3JvdXRlcl9yZW51bSA9IDE2DQogICAgK2NvbnN0IF9zaXpl
b2ZfcnJfcGNvX21hdGNoID0gMjQNCiAgICArY29uc3QgX3NpemVvZl9ycl9wY29fdXNlID0gMzIN
CiAgICArY29uc3QgX3NpemVvZl9ycl9yZXN1bHQgPSAyNA0KICAgICt0eXBlIF9uZF9vcHRfYWR2
X2ludGVydmFsIHN0cnVjdCB7IG5kX29wdF9hZHZfaW50ZXJ2YWxfdHlwZSB1aW50ODsgbmRfb3B0
X2Fkdl9pbnRlcnZhbF9sZW4gdWludDg7IG5kX29wdF9hZHZfaW50ZXJ2YWxfcmVzZXJ2ZWQgdWlu
dDE2OyBuZF9vcHRfYWR2X2ludGVydmFsX2l2YWwgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXpl
b2ZfbmRfb3B0X2Fkdl9pbnRlcnZhbCA9IDgNCiAgICArdHlwZSBfbmRfb3B0X2hvbWVfYWdlbnRf
aW5mbyBzdHJ1Y3QgeyBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3R5cGUgdWludDg7IG5kX29wdF9o
b21lX2FnZW50X2luZm9fbGVuIHVpbnQ4OyBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX3Jlc2VydmVk
IHVpbnQxNjsgbmRfb3B0X2hvbWVfYWdlbnRfaW5mb19wcmVmZXJlbmNlIHVpbnQxNjsgbmRfb3B0
X2hvbWVfYWdlbnRfaW5mb19saWZldGltZSB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl9u
ZF9vcHRfaG9tZV9hZ2VudF9pbmZvID0gOA0KICAgICt0eXBlIF9zY2hlZF9wYXJhbSBzdHJ1Y3Qg
eyBzY2hlZF9wcmlvcml0eSBpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NjaGVkX3BhcmFt
ID0gNA0KICAgICt0eXBlIF9fX2NwdV9tYXNrIHVpbnQ2NA0KICAgICt0eXBlIF9jcHVfc2V0X3Qg
c3RydWN0IHsgX19iaXRzIFsxNSsxXXVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2NwdV9z
ZXRfdCA9IDEyOA0KICAgICt0eXBlIF9zZW1fdCBzdHJ1Y3QgeyBfX3NpemUgWzMxKzFdaW50ODsg
R29kdW1wXzBfYWxpZ24gWzBdaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9zZW1fdCA9IDMy
DQogICAgK3R5cGUgX2ZmaV9hcmcgdWludDY0DQogICAgK3R5cGUgX2ZmaV9zYXJnIGludDY0DQog
ICAgK3R5cGUgX2ZmaV9hYmkgdWludDMyDQogICAgK3R5cGUgX19mZmlfdHlwZSBzdHJ1Y3QgeyBz
aXplIHVpbnQ2NDsgYWxpZ25tZW50IHVpbnQxNjsgX3R5cGUgdWludDE2OyBlbGVtZW50cyAqKl9f
ZmZpX3R5cGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9fZmZpX3R5cGUgPSAyNA0KICAgICt0eXBl
IF9mZmlfdHlwZSBzdHJ1Y3QgeyBzaXplIHVpbnQ2NDsgYWxpZ25tZW50IHVpbnQxNjsgX3R5cGUg
dWludDE2OyBlbGVtZW50cyAqKl9fZmZpX3R5cGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9mZmlf
dHlwZSA9IDI0DQogICAgK3R5cGUgX2ZmaV9zdGF0dXMgdWludDMyDQogICAgK3R5cGUgX0ZGSV9U
WVBFIHVpbnQzMg0KICAgICt0eXBlIF9mZmlfY2lmIHN0cnVjdCB7IGFiaSB1aW50MzI7IG5hcmdz
IHVpbnQzMjsgYXJnX3R5cGVzICoqX2ZmaV90eXBlOyBydHlwZSAqX2ZmaV90eXBlOyBieXRlcyB1
aW50MzI7IGZsYWdzIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2ZmaV9jaWYgPSAzMg0K
ICAgICt0eXBlIF9mZmlfcmF3IHN0cnVjdCB7IHNpbnQgaW50NjQ7IH0NCiAgICArY29uc3QgX3Np
emVvZl9mZmlfcmF3ID0gOA0KICAgICt0eXBlIF9mZmlfamF2YV9yYXcgc3RydWN0IHsgc2ludCBp
bnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2ZmaV9qYXZhX3JhdyA9IDgNCiAgICArdHlwZSBf
ZmZpX2Nsb3N1cmUgc3RydWN0IHsgdHJhbXAgWzIzKzFdaW50ODsgY2lmICpfZmZpX2NpZjsgZnVu
IGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKipieXRlLCAqYnl0ZSk7IHVzZXJfZGF0YSAqYnl0ZTsg
fQ0KICAgICtjb25zdCBfc2l6ZW9mX2ZmaV9jbG9zdXJlID0gNDgNCiAgICArdHlwZSBfZmZpX3Jh
d19jbG9zdXJlIHN0cnVjdCB7IHRyYW1wIFsyMysxXWludDg7IGNpZiAqX2ZmaV9jaWY7IHRyYW5z
bGF0ZV9hcmdzIGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKipieXRlLCAqYnl0ZSk7IHRoaXNfY2xv
c3VyZSAqYnl0ZTsgZnVuIGZ1bmMoKl9mZmlfY2lmLCAqYnl0ZSwgKl9mZmlfcmF3LCAqYnl0ZSk7
IHVzZXJfZGF0YSAqYnl0ZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2ZmaV9yYXdfY2xvc3VyZSA9
IDY0DQogICAgK3R5cGUgX2ZmaV9qYXZhX3Jhd19jbG9zdXJlIHN0cnVjdCB7IHRyYW1wIFsyMysx
XWludDg7IGNpZiAqX2ZmaV9jaWY7IHRyYW5zbGF0ZV9hcmdzIGZ1bmMoKl9mZmlfY2lmLCAqYnl0
ZSwgKipieXRlLCAqYnl0ZSk7IHRoaXNfY2xvc3VyZSAqYnl0ZTsgZnVuIGZ1bmMoKl9mZmlfY2lm
LCAqYnl0ZSwgKl9mZmlfamF2YV9yYXcsICpieXRlKTsgdXNlcl9kYXRhICpieXRlOyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfZmZpX2phdmFfcmF3X2Nsb3N1cmUgPSA2NA0KICAgICtjb25zdCBfX1BP
U0lYX0FEVklTT1JZX0lORk8gPSAyMDA4MDkNCiAgICArY29uc3QgX1dOT0hBTkcgPSAxDQogICAg
K2NvbnN0IF9fX0xEQkxfTUlOXzEwX0VYUF9fID0gKC00OTMxKQ0KICAgICtjb25zdCBfSUZMQV9C
UlBPUlRfTkVJR0hfU1VQUFJFU1MgPSAzMg0KICAgICtjb25zdCBfX1BDX1JFQ19NSU5fWEZFUl9T
SVpFID0gMTYNCiAgICArY29uc3QgX19CSVRTX1BUSFJFQURUWVBFU19DT01NT05fSCA9IDENCiAg
ICArY29uc3QgX19TQ19FWFBSX05FU1RfTUFYID0gNDINCiAgICArY29uc3QgX0lOVF9MRUFTVDE2
X01JTiA9ICgtMzI3NjctMSkNCiAgICArY29uc3QgX1NZU191c2VsaWIgPSBfX19OUl91c2VsaWIN
CiAgICArY29uc3QgX0ZGSV9CQURfVFlQRURFRiA9IDENCiAgICArY29uc3QgX0lQUFJPVE9fVFAg
PSAyOQ0KICAgICtjb25zdCBfVENQX0NPT0tJRV9UUkFOU0FDVElPTlMgPSAxNQ0KICAgICtjb25z
dCBfX19GTFQzMlhfRElHX18gPSAxNQ0KICAgICtjb25zdCBfQUlPX1BSSU9fREVMVEFfTUFYID0g
MjANCiAgICArY29uc3QgX05EQV9WTkkgPSA3DQogICAgK2NvbnN0IF9fX0lMUDMyX09GRjMyX0NG
TEFHUyA9ICItbTMyIg0KICAgICtjb25zdCBfX19GTFQ2NF9NSU5fMTBfRVhQX18gPSAoLTMwNykN
CiAgICArY29uc3QgX19QQ19QQVRIX01BWCA9IDQNCiAgICArY29uc3QgX0lQUFJPVE9fUk9VVElO
RyA9IDQzDQogICAgK2NvbnN0IF9JTlRfRkFTVDhfTUlOID0gKC0xMjgpDQogICAgK2NvbnN0IF9C
MTE1MjAwID0gMDAxMDAwMg0KICAgICtjb25zdCBfX0JJVFNfVUlOVE5fSURFTlRJVFlfSCA9IDEN
CiAgICArY29uc3QgX19fRkxUNjRfTUFOVF9ESUdfXyA9IDUzDQogICAgK2NvbnN0IF9fX0NIQVJf
QklUX18gPSA4DQogICAgK2NvbnN0IF9fX05SX2ZzeW5jID0gNzQNCiAgICArY29uc3QgX19TQ19M
RVZFTDRfQ0FDSEVfU0laRSA9IDE5Nw0KICAgICtjb25zdCBfUFRSQUNFX0VWRU5UX0VYRUMgPSA0
DQogICAgK2NvbnN0IF9QUl9TVkVfVkxfSU5IRVJJVCA9ICgxIDw8IDE3KQ0KICAgICtjb25zdCBf
SVBQT1JUX1NVUERVUCA9IDk1DQogICAgK2NvbnN0IF9TWVNfZnRydW5jYXRlID0gX19fTlJfZnRy
dW5jYXRlDQogICAgK2NvbnN0IF9TQ0hBUl9XSURUSCA9IDgNCiAgICArY29uc3QgX1RDQV9TVEFC
ID0gOA0KICAgICtjb25zdCBfSUZMQV9WRl9MSU5LX1NUQVRFID0gNQ0KICAgICtjb25zdCBfUlRO
TEdSUF9OU0lEID0gMjgNCiAgICArY29uc3QgX19fTlJfbXJlbWFwID0gMjUNCiAgICArY29uc3Qg
X19fTlJfbHNldHhhdHRyID0gMTg5DQogICAgK2NvbnN0IF9JUFZMQU5fTU9ERV9MMyA9IDENCiAg
ICArY29uc3QgX0lGTEFfQk9ORF9VU0VfQ0FSUklFUiA9IDYNCiAgICArY29uc3QgX0lGTEFfT0ZG
TE9BRF9YU1RBVFNfVU5TUEVDID0gMA0KICAgICtjb25zdCBfSU5UX0xFQVNUMzJfTUlOID0gKC0y
MTQ3NDgzNjQ3LTEpDQogICAgK2NvbnN0IF9BVEZfQ09NID0gMHgwMg0KICAgICtjb25zdCBfTUFQ
X0ZJTEUgPSAwDQogICAgK2NvbnN0IF9fX0RFQzY0X01JTl9fID0gMUUtMzgzDQogICAgK2NvbnN0
IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRV9USU1FUiA9IDE4DQogICAgK2NvbnN0IF9TSUdFVl9O
T05FID0gMQ0KICAgICtjb25zdCBfTkRUUEFfTUNBU1RfUFJPQkVTID0gMTENCiAgICArY29uc3Qg
X1NZU19ta25vZGF0ID0gX19fTlJfbWtub2RhdA0KICAgICtjb25zdCBfX1BPU0lYX0JBUlJJRVJT
ID0gMjAwODA5DQogICAgK2NvbnN0IF9VSU5UX0ZBU1QxNl9XSURUSCA9IF9fX1dPUkRTSVpFDQog
ICAgK2NvbnN0IF9JUF9SRiA9IDB4ODAwMA0KICAgICtjb25zdCBfRVRIX1BfUFBQVEFMSyA9IDB4
MDAxMA0KICAgICtjb25zdCBfVFVOU0VUUVVFVUVfdmFsID0gMTA3NDAyNTY4OQ0KICAgICtjb25z
dCBfRFRfQ0hSID0gMg0KICAgICtjb25zdCBfX19GTFRfTUFYX0VYUF9fID0gMTI4DQogICAgK2Nv
bnN0IF9SVE5fTVVMVElDQVNUID0gNQ0KICAgICtjb25zdCBfX19OUl9zZXRzaWQgPSAxMTINCiAg
ICArY29uc3QgX19YT1BFTl9YUEcyID0gMQ0KICAgICtjb25zdCBfSVBfREVGQVVMVF9NVUxUSUNB
U1RfTE9PUCA9IDENCiAgICArY29uc3QgX19YT1BFTl9YUEc0ID0gMQ0KICAgICtjb25zdCBfX19O
Ul9nZXRyZXNnaWQgPSAxMjANCiAgICArY29uc3QgX0JQRl9KR0UgPSAweDMwDQogICAgK2NvbnN0
IF9CUEZfTEQgPSAweDAwDQogICAgK2NvbnN0IF9UQ1BJX09QVF9FQ04gPSA4DQogICAgK2NvbnN0
IF9FVFhUQlNZID0gMjYNCiAgICArY29uc3QgX0lGTEFfUk1ORVRfTVVYX0lEID0gMQ0KICAgICtj
b25zdCBfUFJfRlBfRVhDX1NXX0VOQUJMRSA9IDB4ODANCiAgICArY29uc3QgX19fTlJfdGltZSA9
IDIwMQ0KICAgICtjb25zdCBfSEFWRV9TWVNfRVBPTExfSCA9IDENCiAgICArY29uc3QgX0lGTEFf
VkZfU1RBVFNfUlhfQllURVMgPSAyDQogICAgK2NvbnN0IF9SVF9TQ09QRV9VTklWRVJTRSA9IDAN
CiAgICArY29uc3QgX1NZU19lcG9sbF9jdGxfb2xkID0gX19fTlJfZXBvbGxfY3RsX29sZA0KICAg
ICtjb25zdCBfVUxPTkdfTUFYID0gKF9MT05HX01BWCAqIDIgKyAxKQ0KICAgICtjb25zdCBfQ0xE
X1RSQVBQRUQgPSA0DQogICAgK2NvbnN0IF9MT05HX0JJVCA9IDY0DQogICAgK2NvbnN0IF9fX1JM
SU1fVF9NQVRDSEVTX1JMSU02NF9UID0gMQ0KICAgICtjb25zdCBfVENQX1JFUEFJUl9PUFRJT05T
ID0gMjINCiAgICArY29uc3QgX1g4Nl9DUjRfT1NYTU1FWENQVF9CSVQgPSAxMA0KICAgICtjb25z
dCBfX1BPU0lYX0FJT19NQVggPSAxDQogICAgK2NvbnN0IF9SVEZfVVAgPSAweDAwMDENCiAgICAr
Y29uc3QgX1RDUF9TX0RBVEFfSU4gPSAoMSA8PCAyKQ0KICAgICtjb25zdCBfSUZMQV9CUl9NQVhf
QUdFID0gMw0KICAgICtjb25zdCBfX1NDX01FTU9SWV9QUk9URUNUSU9OID0gMTkNCiAgICArY29u
c3QgX0ZOT05CTE9DSyA9IF9PX05PTkJMT0NLDQogICAgK2NvbnN0IF9JTl9BVFRSSUIgPSAweDAw
MDAwMDA0DQogICAgK2NvbnN0IF9BVEZfUEVSTSA9IDB4MDQNCiAgICArY29uc3QgX0lGTEFfR0VO
RVZFX1JFTU9URTYgPSA3DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfTU9ERSA9IDENCiAgICArY29u
c3QgX0VIX0ZSQU1FX0ZMQUdTID0gImF3Ig0KICAgICtjb25zdCBfT19BUFBFTkQgPSAwMjAwMA0K
ICAgICtjb25zdCBfX1NDX1RZUEVEX01FTU9SWV9PQkpFQ1RTID0gMTY1DQogICAgK2NvbnN0IF9F
VEhFUl9NQVhfTEVOID0gKF9FVEhfRlJBTUVfTEVOICsgX0VUSEVSX0NSQ19MRU4pDQogICAgK2Nv
bnN0IF9fX05SX21zZ3NuZCA9IDY5DQogICAgK2NvbnN0IF9UQ0FfUEFEID0gOQ0KICAgICtjb25z
dCBfUFJfU0VUX0ZQX01PREUgPSA0NQ0KICAgICtjb25zdCBfTkxfTU1BUF9TVEFUVVNfVkFMSUQg
PSAyDQogICAgK2NvbnN0IF9fX05SX21vdW50ID0gMTY1DQogICAgK2NvbnN0IF9fSU9DX1RZUEVC
SVRTID0gOA0KICAgICtjb25zdCBfU09DS19ER1JBTSA9IDINCiAgICArY29uc3QgX01PRF9PRkZT
RVQgPSBfQURKX09GRlNFVA0KICAgICtjb25zdCBfSUZMQV9NQVAgPSAxNA0KICAgICtjb25zdCBf
RUwyTlNZTkMgPSA0NQ0KICAgICtjb25zdCBfSVBWNl9PUklHRFNUQUREUiA9IDc0DQogICAgK2Nv
bnN0IF9TWVNfbXVubG9jayA9IF9fX05SX211bmxvY2sNCiAgICArY29uc3QgX1RIX0FDSyA9IDB4
MTANCiAgICArY29uc3QgX0xfWFRORCA9IDINCiAgICArY29uc3QgX1NPX1RYVElNRSA9IDYxDQog
ICAgK2NvbnN0IF9SVE1fREVMQUNUSU9OID0gNDkNCiAgICArY29uc3QgX1hUQUJTID0gMDAxNDAw
MA0KICAgICtjb25zdCBfSEFWRV9TWVNfU1lTQ0FMTF9IID0gMQ0KICAgICtjb25zdCBfUFJfU0VU
X1NQRUNVTEFUSU9OX0NUUkwgPSA1Mw0KICAgICtjb25zdCBfVElPQ0dERVZfdmFsID0gMjE0Nzc2
NzM0Ng0KICAgICtjb25zdCBfX19OUl9jb25uZWN0ID0gNDINCiAgICArY29uc3QgX1g4Nl9DUjRf
U01FUF9CSVQgPSAyMA0KICAgICtjb25zdCBfRlNfUE9MSUNZX0ZMQUdTX1ZBTElEID0gMHgwMw0K
ICAgICtjb25zdCBfVElPQ0dJQ09VTlQgPSAweDU0NUQNCiAgICArY29uc3QgX1NZU19zdGF0ZnMg
PSBfX19OUl9zdGF0ZnMNCiAgICArY29uc3QgX05FVExJTktfUkRNQSA9IDIwDQogICAgK2NvbnN0
IF9JUFY2XzIyOTJIT1BMSU1JVCA9IDgNCiAgICArY29uc3QgX0lGRl9PTkVfUVVFVUUgPSAweDIw
MDANCiAgICArY29uc3QgX0lQUE9SVF9DTURTRVJWRVIgPSA1MTQNCiAgICArY29uc3QgX1BGX01B
WCA9IDQ0DQogICAgK2NvbnN0IF9SVF9DTEFTU19NQVggPSAyNTUNCiAgICArY29uc3QgX0lQUFJP
VE9fSVBWNiA9IDQxDQogICAgK2NvbnN0IF9TSU9DU0lGQlIgPSAweDg5NDENCiAgICArY29uc3Qg
X19fSU5UX0xFQVNUOF9NQVhfXyA9IDB4N2YNCiAgICArY29uc3QgX19fREVDMTI4X01BTlRfRElH
X18gPSAzNA0KICAgICtjb25zdCBfSUNNUDZfUlJfUkVTVUxUX0ZMQUdTX0ZPUkJJRERFTiA9IDB4
MDEwMA0KICAgICtjb25zdCBfTUFQX1NIQVJFRCA9IDB4MDENCiAgICArY29uc3QgX0VVU0VSUyA9
IDg3DQogICAgK2NvbnN0IF9NQVhUQyA9IDYNCiAgICArY29uc3QgX1RDUF9TWU5fU0VOVCA9IDIN
CiAgICArY29uc3QgX1BGX05FVExJTksgPSAxNg0KICAgICtjb25zdCBfWERQX0FUVEFDSEVEX05P
TkUgPSAwDQogICAgK2NvbnN0IF9fX0RFQ0lNQUxfRElHX18gPSAyMQ0KICAgICtjb25zdCBfRVRI
RVJfQUREUl9MRU4gPSBfRVRIX0FMRU4NCiAgICArY29uc3QgX0ZGSV9UWVBFX0xBU1QgPSBfRkZJ
X1RZUEVfQ09NUExFWA0KICAgICtjb25zdCBfUE9TSVhfTUFEVl9OT1JNQUwgPSAwDQogICAgK2Nv
bnN0IF9BUlBIUkRfSUVFRTgwMjExX1BSSVNNID0gODAyDQogICAgK2NvbnN0IF9FVEhfUF84MDIx
QUQgPSAweDg4QTgNCiAgICArY29uc3QgX0xJTlVYX1JFQk9PVF9NQUdJQzJDID0gNTM3OTkzMjE2
DQogICAgK2NvbnN0IF9NTlRfREVUQUNIID0gMg0KICAgICtjb25zdCBfSVBUT1NfRUNOX05PVF9F
Q1QgPSAweDAwDQogICAgK2NvbnN0IF9TU19PTlNUQUNLID0gMQ0KICAgICtjb25zdCBfSU9DX0lO
ID0gKF9fSU9DX1dSSVRFIDw8IF9fSU9DX0RJUlNISUZUKQ0KICAgICtjb25zdCBfRVRIX1BfODAy
MUFIID0gMHg4OEU3DQogICAgK2NvbnN0IF9JRkxBX1RVTl9WTkVUX0hEUiA9IDUNCiAgICArY29u
c3QgX01SRU1BUF9NQVlNT1ZFID0gMQ0KICAgICtjb25zdCBfX19STElNSVRfTkxJTUlUUyA9IDE2
DQogICAgK2NvbnN0IF9GX0dFVExLNjQgPSA1DQogICAgK2NvbnN0IF9SVFBST1RfVU5TUEVDID0g
MA0KICAgICtjb25zdCBfUEFST0REID0gMDAwMTAwMA0KICAgICtjb25zdCBfX19OUl9rZXhlY19s
b2FkID0gMjQ2DQogICAgK2NvbnN0IF9fX0lGTEFfVkZfUE9SVF9NQVggPSAyDQogICAgK2NvbnN0
IF9TWVNfc3dhcG9mZiA9IF9fX05SX3N3YXBvZmYNCiAgICArY29uc3QgX19fU1REQ19VVEZfMzJf
XyA9IDENCiAgICArY29uc3QgX1JUX1RBQkxFX0xPQ0FMID0gMjU1DQogICAgK2NvbnN0IF9GRlNZ
TkMgPSBfT19GU1lOQw0KICAgICtjb25zdCBfUEVORElOID0gMDA0MDAwMA0KICAgICtjb25zdCBf
X19JTlQ4X01BWF9fID0gMHg3Zg0KICAgICtjb25zdCBfRVRIX1BfQVJDTkVUID0gMHgwMDFBDQog
ICAgK2NvbnN0IF9GRF9TRVRTSVpFID0gX19fRkRfU0VUU0laRQ0KICAgICtjb25zdCBfTVNHX0VP
UiA9IDEyOA0KICAgICtjb25zdCBfX05FVF9JRl9BUlBfSCA9IDENCiAgICArY29uc3QgX1JUTV9G
X0NMT05FRCA9IDB4MjAwDQogICAgK2NvbnN0IF9FSFdQT0lTT04gPSAxMzMNCiAgICArY29uc3Qg
X0lQUFJPVE9fTk9ORSA9IDU5DQogICAgK2NvbnN0IF9UQ1BfQ09PS0lFX09VVF9ORVZFUiA9ICgx
IDw8IDEpDQogICAgK2NvbnN0IF9FUFJPVE8gPSA3MQ0KICAgICtjb25zdCBfX0lPQ19OUlNISUZU
ID0gMA0KICAgICtjb25zdCBfRl9FWExDSyA9IDQNCiAgICArY29uc3QgX19fTlJfY2xvbmUgPSA1
Ng0KICAgICtjb25zdCBfX19OUl9wdHJhY2UgPSAxMDENCiAgICArY29uc3QgX19QT1NJWF9WN19M
UEJJR19PRkZCSUcgPSAtMQ0KICAgICtjb25zdCBfSEFWRV9BQ09TTCA9IDENCiAgICArY29uc3Qg
X1NJT0NHSUZEU1RBRERSID0gMHg4OTE3DQogICAgK2NvbnN0IF9fUE9TSVhfTE9HSU5fTkFNRV9N
QVggPSA5DQogICAgK2NvbnN0IF9SVE5MR1JQX0lQVjZfTkVUQ09ORiA9IDI1DQogICAgK2NvbnN0
IF9QQUdFX01BU0sgPSAoXihfUEFHRV9TSVpFLTEpKQ0KICAgICtjb25zdCBfX0NTX1hCUzVfSUxQ
MzJfT0ZGQklHX0xJTlRGTEFHUyA9IDExMDcNCiAgICArY29uc3QgX0ZGSV9UWVBFX1NJTlQ2NCA9
IDEyDQogICAgK2NvbnN0IF9fU0NfT1BFTl9NQVggPSA0DQogICAgK2NvbnN0IF9fU0NfMl9TV19E
RVYgPSA1MQ0KICAgICtjb25zdCBfTkxNX0ZfQUNLID0gMHgwNA0KICAgICtjb25zdCBfU0NOZDgg
PSAiaGhkIg0KICAgICtjb25zdCBfX19GTFQxMjhfTUlOXzEwX0VYUF9fID0gKC00OTMxKQ0KICAg
ICtjb25zdCBfWERQX0ZMQUdTX1NLQl9NT0RFID0gKDEgPDwgMSkNCiAgICArY29uc3QgX1NJT0NH
UkFSUCA9IDB4ODk2MQ0KICAgICtjb25zdCBfSUZMQV9WRl9QT1JUUyA9IDI0DQogICAgK2NvbnN0
IF9DRVJBU0UgPSAwMTc3DQogICAgK2NvbnN0IF9fX05SX3NldHBnaWQgPSAxMDkNCiAgICArY29u
c3QgX1JURl9JTlRFUkZBQ0UgPSAweDQwMDAwMDAwDQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9J
U09MQVRFRCA9IDMzDQogICAgK2NvbnN0IF9QUklvRkFTVDggPSAibyINCiAgICArY29uc3QgX0lG
TEFfQk9ORF9TTEFWRV9MSU5LX0ZBSUxVUkVfQ09VTlQgPSAzDQogICAgK2NvbnN0IF9CUktJTlQg
PSAwMDAwMDAyDQogICAgK2NvbnN0IF9fX0RFQ0lNQUxfQklEX0ZPUk1BVF9fID0gMQ0KICAgICtj
b25zdCBfU09MX1NPQ0tFVCA9IDENCiAgICArY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkZC
SUdfTERGTEFHUyA9IDExMzcNCiAgICArY29uc3QgX0lGTEFfUFJJT1JJVFkgPSA5DQogICAgK2Nv
bnN0IF9JVElNRVJfUkVBTCA9IDANCiAgICArY29uc3QgX1RDRkxTSCA9IDB4NTQwQg0KICAgICtj
b25zdCBfRkZJX1RISVNDQUxMID0gMw0KICAgICtjb25zdCBfSVBfTk9ERUZSQUcgPSAyMg0KICAg
ICtjb25zdCBfTkVUTElOS19GSVJFV0FMTCA9IDMNCiAgICArY29uc3QgX19fTlJfc2NoZWRfZ2V0
YWZmaW5pdHkgPSAyMDQNCiAgICArY29uc3QgX0lQUFJPVE9fVURQTElURSA9IDEzNg0KICAgICtj
b25zdCBfRlNfUFJPSklOSEVSSVRfRkwgPSAweDIwMDAwMDAwDQogICAgK2NvbnN0IF9NQURWX0RP
TlRGT1JLID0gMTANCiAgICArY29uc3QgX01TR19DTVNHX0NMT0VYRUMgPSAxMDczNzQxODI0DQog
ICAgK2NvbnN0IF9FTk9FTlQgPSAyDQogICAgK2NvbnN0IF9JUFRPU19FQ05fRUNUMSA9IDB4MDEN
CiAgICArY29uc3QgX0lGTEFfVkZfSU5GTyA9IDENCiAgICArY29uc3QgX0xPQ0tfV1JJVEUgPSAx
MjgNCiAgICArY29uc3QgX1RDUF9MSVNURU4gPSAxMA0KICAgICtjb25zdCBfSVBPUFRfVFNfUFJF
U1BFQyA9IDMNCiAgICArY29uc3QgX19fUE9TSVhfRkFEVl9OT1JFVVNFID0gNQ0KICAgICtjb25z
dCBfQVJQT1BfUkVRVUVTVCA9IDENCiAgICArY29uc3QgX1BUUkFDRV9FVkVOVF9FWElUID0gNg0K
ICAgICtjb25zdCBfWEFUVFJfTkFNRV9NQVggPSAyNTUNCiAgICArY29uc3QgX19fU19JRkxOSyA9
IDAxMjAwMDANCiAgICArY29uc3QgX1RDQV9ST09UX1RBQiA9IDENCiAgICArY29uc3QgX1NLRl9B
RF9QUk9UT0NPTCA9IDANCiAgICArY29uc3QgX0VOT1BLRyA9IDY1DQogICAgK2NvbnN0IF9fX0FU
T01JQ19SRUxBWEVEID0gMA0KICAgICtjb25zdCBfU1lTX2dldHNvY2tvcHQgPSBfX19OUl9nZXRz
b2Nrb3B0DQogICAgK2NvbnN0IF9JRkxBX1ZGX0xJTktfU1RBVEVfRU5BQkxFID0gMQ0KICAgICtj
b25zdCBfVlRETFkgPSAwMDQwMDAwDQogICAgK2NvbnN0IF9fX05SX3RpbWVyX2RlbGV0ZSA9IDIy
Ng0KICAgICtjb25zdCBfUlROX1VOU1BFQyA9IDANCiAgICArY29uc3QgX1NPX1NORFRJTUVPID0g
MjENCiAgICArY29uc3QgX0FGX1VOU1BFQyA9IF9QRl9VTlNQRUMNCiAgICArY29uc3QgX1RJT0NT
RVJTRVRNVUxUSSA9IDB4NTQ1Qg0KICAgICtjb25zdCBfQVJQSFJEX0ZDUEwgPSA3ODYNCiAgICAr
Y29uc3QgX0xPQ0tfUlcgPSAxOTINCiAgICArY29uc3QgX1JFR19DUjIgPSAyMg0KICAgICtjb25z
dCBfX1NDX0FSR19NQVggPSAwDQogICAgK2NvbnN0IF9BUlBIUkRfRkNQUCA9IDc4NA0KICAgICtj
b25zdCBfVUlOVF9XSURUSCA9IDMyDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX0lEID0gMQ0KICAg
ICtjb25zdCBfX19VU0VfWE9QRU4gPSAxDQogICAgK2NvbnN0IF9JUE9QVF9TRUMgPSBfSVBPUFRf
U0VDVVJJVFkNCiAgICArY29uc3QgX0lGTEFfVFhRTEVOID0gMTMNCiAgICArY29uc3QgX1NZU191
bW91bnQyID0gX19fTlJfdW1vdW50Mg0KICAgICtjb25zdCBfVFVOX1RZUEVfTUFTSyA9IDB4MDAw
Zg0KICAgICtjb25zdCBfQ0xPQ0tfUkVBTFRJTUVfQ09BUlNFID0gNQ0KICAgICtjb25zdCBfSUZM
QV9CUl9GREJfRkxVU0ggPSAyMQ0KICAgICtjb25zdCBfUlRNX1NFVE5FSUdIVEJMID0gNjcNCiAg
ICArY29uc3QgX0lQX0FERF9NRU1CRVJTSElQID0gMzUNCiAgICArY29uc3QgX1JUUFJPVF9ESENQ
ID0gMTYNCiAgICArY29uc3QgX0NMT05FX1BUUkFDRSA9IDB4MDAwMDIwMDANCiAgICArY29uc3Qg
X1BST1RfTk9ORSA9IDB4MA0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUID0g
MHgwMTIzNDU2Nw0KICAgICtjb25zdCBfTUFYX0lOUFVUID0gMjU1DQogICAgK2NvbnN0IF9SVEFf
VU5TUEVDID0gMA0KICAgICtjb25zdCBfRl9BRERfU0VBTFMgPSAxMDMzDQogICAgK2NvbnN0IF9V
SU9fTUFYSU9WID0gX19fSU9WX01BWA0KICAgICtjb25zdCBfX1NDX1RSQUNFX1NZU19NQVggPSAy
NDQNCiAgICArY29uc3QgX1BBUk1SSyA9IDAwMDAwMTANCiAgICArY29uc3QgX19TQ19YT1BFTl9Y
UEczID0gOTkNCiAgICArY29uc3QgX1BSX0dFVF9GUF9NT0RFID0gNDYNCiAgICArY29uc3QgX19T
Q19YT1BFTl9YUEc0ID0gMTAwDQogICAgK2NvbnN0IF9VSU5UX0xFQVNUNjRfV0lEVEggPSA2NA0K
ICAgICtjb25zdCBfX1NZU19XQUlUX0ggPSAxDQogICAgK2NvbnN0IF9FVEhfUF9UUkFJTEVSID0g
MHgwMDFDDQogICAgK2NvbnN0IF9TT0xfVENQID0gNg0KICAgICtjb25zdCBfQURKX01JQ1JPID0g
MHgxMDAwDQogICAgK2NvbnN0IF9ORFRBX1RIUkVTSDEgPSAyDQogICAgK2NvbnN0IF9SVEFfSVBf
UFJPVE8gPSAyNw0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfRkxVU0ggPSAyNA0KICAgICtjb25z
dCBfVFVOU0VUR1JPVVBfdmFsID0gMTA3NDAyNTY3OA0KICAgICtjb25zdCBfU09fQ05YX0FEVklD
RSA9IDUzDQogICAgK2NvbnN0IF9ORFRBX1RIUkVTSDMgPSA0DQogICAgK2NvbnN0IF9MT0NLX1NI
ID0gMQ0KICAgICtjb25zdCBfX19TSVpFT0ZfV0NIQVJfVF9fID0gNA0KICAgICtjb25zdCBfU0VN
X1ZBTFVFX01BWCA9ICgyMTQ3NDgzNjQ3KQ0KICAgICtjb25zdCBfX19OUl9nZXR1aWQgPSAxMDIN
CiAgICArY29uc3QgX0lGTEFfQlJQT1JUX01DQVNUX0ZMT09EID0gMjcNCiAgICArY29uc3QgX1NP
TF9CTFVFVE9PVEggPSAyNzQNCiAgICArY29uc3QgX0FSUEhSRF9FVEhFUiA9IDENCiAgICArY29u
c3QgX0lQUE9SVF9OQU1FU0VSVkVSID0gNDINCiAgICArY29uc3QgX19TQ19CQVNFID0gMTM0DQog
ICAgK2NvbnN0IF9IT1NUX05BTUVfTUFYID0gNjQNCiAgICArY29uc3QgX1g4Nl9DUjBfRVRfQklU
ID0gNA0KICAgICtjb25zdCBfRl9TRVRQSVBFX1NaID0gMTAzMQ0KICAgICtjb25zdCBfX19VSU5U
MTZfTUFYX18gPSAweGZmZmYNCiAgICArY29uc3QgX19fU0VHX0ZTID0gMQ0KICAgICtjb25zdCBf
U1lTX2ZyZW1vdmV4YXR0ciA9IF9fX05SX2ZyZW1vdmV4YXR0cg0KICAgICtjb25zdCBfRkZJX1RZ
UEVfVUlOVDE2ID0gNw0KICAgICtjb25zdCBfX19JTFAzMl9PRkYzMl9MREZMQUdTID0gIi1tMzIi
DQogICAgK2NvbnN0IF9JUFBPUlRfTVRQID0gNTcNCiAgICArY29uc3QgX1NZU19mc2V0eGF0dHIg
PSBfX19OUl9mc2V0eGF0dHINCiAgICArY29uc3QgX19fTlJfZXhpdCA9IDYwDQogICAgK2NvbnN0
IF9CUEZfSCA9IDB4MDgNCiAgICArY29uc3QgX1BSX1NFVF9TRUNDT01QID0gMjINCiAgICArY29u
c3QgX0VUSF9QX0RJQUcgPSAweDYwMDUNCiAgICArY29uc3QgX0xPR0lOX05BTUVfTUFYID0gMjU2
DQogICAgK2NvbnN0IF9TX0lSV1hPID0gKF9TX0lSV1hHID4+IDMpDQogICAgK2NvbnN0IF9GRklf
U1REQ0FMTCA9IDUNCiAgICArY29uc3QgX0FSUEhSRF9JTkZJTklCQU5EID0gMzINCiAgICArY29u
c3QgX19JT0NfV1JJVEUgPSAxDQogICAgK2NvbnN0IF9USU9DRVhDTCA9IDB4NTQwQw0KICAgICtj
b25zdCBfX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19QUk9URUNUID0gMjQ4DQogICAgK2NvbnN0IF9Q
VFJBQ0VfT19UUkFDRUNMT05FID0gOA0KICAgICtjb25zdCBfU1lTX3ByY3RsID0gX19fTlJfcHJj
dGwNCiAgICArY29uc3QgX0lQX1RSQU5TUEFSRU5UID0gMTkNCiAgICArY29uc3QgX0lGTEFfUE9S
VF9IT1NUX1VVSUQgPSA1DQogICAgK2NvbnN0IF9fX05SX2Zhbm90aWZ5X21hcmsgPSAzMDENCiAg
ICArY29uc3QgX0lGRl9QT0lOVE9QT0lOVCA9IDE2DQogICAgK2NvbnN0IF9SVEZfRFlOQU1JQyA9
IDB4MDAxMA0KICAgICtjb25zdCBfU0lPQ0dJRk1FVFJJQyA9IDB4ODkxZA0KICAgICtjb25zdCBf
SUZMQV9CUl9NQ0FTVF9TVEFUU19FTkFCTEVEID0gNDINCiAgICArY29uc3QgX1NZU19leGVjdmUg
PSBfX19OUl9leGVjdmUNCiAgICArY29uc3QgX09OTFJFVCA9IDAwMDAwNDANCiAgICArY29uc3Qg
X1JUQVhfUlRUVkFSID0gNQ0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9NTERfVkVSU0lPTiA9
IDQ0DQogICAgK2NvbnN0IF9fX0ZMVF9NSU5fRVhQX18gPSAoLTEyNSkNCiAgICArY29uc3QgX05V
RF9ERUxBWSA9IDB4MDgNCiAgICArY29uc3QgX19fTlJfc2VuZG1tc2cgPSAzMDcNCiAgICArY29u
c3QgX0lGTEFfQlJfTkZfQ0FMTF9JUFRBQkxFUyA9IDM2DQogICAgK2NvbnN0IF9JUFBPUlRfRUNI
TyA9IDcNCiAgICArY29uc3QgX19fTlJfY2xvY2tfZ2V0cmVzID0gMjI5DQogICAgK2NvbnN0IF9N
Q0FTVF9VTkJMT0NLX1NPVVJDRSA9IDQ0DQogICAgK2NvbnN0IF9FVEhfUF9MT09QQkFDSyA9IDB4
OTAwMA0KICAgICtjb25zdCBfSVRJTUVSX1ZJUlRVQUwgPSAxDQogICAgK2NvbnN0IF9QUklpTEVB
U1Q4ID0gImkiDQogICAgK2NvbnN0IF9FVEhfUF9DVVNUID0gMHg2MDA2DQogICAgK2NvbnN0IF9J
RkxBX0JSUE9SVF9GQVNUX0xFQVZFID0gNw0KICAgICtjb25zdCBfU1lTX3NldHJlc3VpZCA9IF9f
X05SX3NldHJlc3VpZA0KICAgICtjb25zdCBfUlRGX1hSRVNPTFZFID0gMHgwODAwDQogICAgK2Nv
bnN0IF9BUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQID0gODAzDQogICAgK2NvbnN0IF9fX1NfSUZD
SFIgPSAwMDIwMDAwDQogICAgK2NvbnN0IF9DTVNQQVIgPSAwMTAwMDAwMDAwMDANCiAgICArY29u
c3QgX0FSUEhSRF9WT0lEID0gMHhGRkZGDQogICAgK2NvbnN0IF9fX05SX2xpc3R4YXR0ciA9IDE5
NA0KICAgICtjb25zdCBfUlRBX1VJRCA9IDI1DQogICAgK2NvbnN0IF9fSU9DX05STUFTSyA9ICgo
MSA8PCBfX0lPQ19OUkJJVFMpLTEpDQogICAgK2NvbnN0IF9JT0NTSVpFX1NISUZUID0gKF9fSU9D
X1NJWkVTSElGVCkNCiAgICArY29uc3QgX0VBR0FJTiA9IDExDQogICAgK2NvbnN0IF9fX0ZMVF9N
QVhfMTBfRVhQX18gPSAzOA0KICAgICtjb25zdCBfSVBWNl9NVUxUSUNBU1RfTE9PUCA9IDE5DQog
ICAgK2NvbnN0IF9fX05SX2dldHBnaWQgPSAxMjENCiAgICArY29uc3QgX1NPX1BSSU9SSVRZID0g
MTINCiAgICArY29uc3QgX01TR19ET05UV0FJVCA9IDY0DQogICAgK2NvbnN0IF9JT0NTSVpFX01B
U0sgPSAoX19JT0NfU0laRU1BU0sgPDwgX19JT0NfU0laRVNISUZUKQ0KICAgICtjb25zdCBfX19H
Q0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFID0gMg0KICAgICtjb25zdCBfX19GTFQxMjhfRVBT
SUxPTl9fID0gMS4xDQogICAgK2NvbnN0IF9FSU5UUiA9IDQNCiAgICArY29uc3QgX1JURl9OT1BN
VFVESVNDID0gMHg0MDAwDQogICAgK2NvbnN0IF9SVFBST1RfU1RBVElDID0gNA0KICAgICtjb25z
dCBfSUZBX0xBQkVMID0gMw0KICAgICtjb25zdCBfU09fUFJPVE9DT0wgPSAzOA0KICAgICtjb25z
dCBfX19OUl9yZWFkYWhlYWQgPSAxODcNCiAgICArY29uc3QgX1RIX1NZTiA9IDB4MDINCiAgICAr
Y29uc3QgX1JUTkxHUlBfSVBWNl9QUkVGSVggPSAxOA0KICAgICtjb25zdCBfSUNNUDZfRFNUX1VO
UkVBQ0hfQURNSU4gPSAxDQogICAgK2NvbnN0IF9TSU9DR0lGUEZMQUdTID0gMHg4OTM1DQogICAg
K2NvbnN0IF9fU1lTX1NUQVRGU19IID0gMQ0KICAgICtjb25zdCBfX19TVERDX18gPSAxDQogICAg
K2NvbnN0IF9fX0RFQzEyOF9NQVhfXyA9IDkuOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5
OTk5RTYxNDQNCiAgICArY29uc3QgX0lONl9BRERSX0dFTl9NT0RFX05PTkUgPSAxDQogICAgK2Nv
bnN0IF9SVE1fU0VUTElOSyA9IDE5DQogICAgK2NvbnN0IF9GRklfT0sgPSAwDQogICAgK2NvbnN0
IF9fX0lGTEFfU1RBVFNfTUFYID0gNg0KICAgICtjb25zdCBfTkRfUk9VVEVSX1NPTElDSVQgPSAx
MzMNCiAgICArY29uc3QgX1BSX1NQRUNfU1RPUkVfQllQQVNTID0gMA0KICAgICtjb25zdCBfU1lT
X3RlZSA9IF9fX05SX3RlZQ0KICAgICtjb25zdCBfRlBFX0ZMVFNVQiA9IDgNCiAgICArY29uc3Qg
X01TR19XQUlURk9ST05FID0gNjU1MzYNCiAgICArY29uc3QgX19QQ19BTExPQ19TSVpFX01JTiA9
IDE4DQogICAgK2NvbnN0IF9TSUdJTEwgPSA0DQogICAgK2NvbnN0IF9ETl9ERUxFVEUgPSAweDAw
MDAwMDA4DQogICAgK2NvbnN0IF9OSV9OVU1FUklDU0VSViA9IDINCiAgICArY29uc3QgX1BGX0lT
RE4gPSAzNA0KICAgICtjb25zdCBfUFJfQ0FQX0FNQklFTlQgPSA0Nw0KICAgICtjb25zdCBfSVBU
T1NfVE9TX01BU0sgPSAweDFFDQogICAgK2NvbnN0IF9fU0NfTkxfTEFOR01BWCA9IDEyMA0KICAg
ICtjb25zdCBfU0lHQ0xEID0gX1NJR0NITEQNCiAgICArY29uc3QgX19fTlJfY2htb2QgPSA5MA0K
ICAgICtjb25zdCBfU1RET1VUX0ZJTEVOTyA9IDENCiAgICArY29uc3QgX19MUDY0ID0gMQ0KICAg
ICtjb25zdCBfX19OUl9tcV9nZXRzZXRhdHRyID0gMjQ1DQogICAgK2NvbnN0IF9TWVNfbGlzdGVu
ID0gX19fTlJfbGlzdGVuDQogICAgK2NvbnN0IF9JRkxBX1ZGX0xJTktfU1RBVEVfQVVUTyA9IDAN
CiAgICArY29uc3QgX1g4Nl9FRkxBR1NfUkZfQklUID0gMTYNCiAgICArY29uc3QgX1RDUF9USElO
X0RVUEFDSyA9IDE3DQogICAgK2NvbnN0IF9fX05SX3N5bmMgPSAxNjINCiAgICArY29uc3QgX1NP
X0FUVEFDSF9SRVVTRVBPUlRfRUJQRiA9IDUyDQogICAgK2NvbnN0IF9fX1NJWkVPRl9ET1VCTEVf
XyA9IDgNCiAgICArY29uc3QgX0VNVUxUSUhPUCA9IDcyDQogICAgK2NvbnN0IF9fUE9TSVhfUUxJ
TUlUID0gMQ0KICAgICtjb25zdCBfU1lTX2dldGl0aW1lciA9IF9fX05SX2dldGl0aW1lcg0KICAg
ICtjb25zdCBfUlRNX0dFVFFESVNDID0gMzgNCiAgICArY29uc3QgX0ZTX0NPTVBSQkxLX0ZMID0g
MHgwMDAwMDIwMA0KICAgICtjb25zdCBfU1lTX2dldHBncnAgPSBfX19OUl9nZXRwZ3JwDQogICAg
K2NvbnN0IF9fX0ZMVDEyOF9NQU5UX0RJR19fID0gMTEzDQogICAgK2NvbnN0IF9TQV9PTlNUQUNL
ID0gMHgwODAwMDAwMA0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9JR01QX1ZFUlNJT04gPSA0
Mw0KICAgICtjb25zdCBfU1lTX3BrZXlfZnJlZSA9IF9fX05SX3BrZXlfZnJlZQ0KICAgICtjb25z
dCBfX19OUl9zaG1jdGwgPSAzMQ0KICAgICtjb25zdCBfX01LTk9EX1ZFUiA9IDANCiAgICArY29u
c3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9TUEVDSzEyOF8yNTZfWFRTID0gNw0KICAgICtjb25zdCBf
U1lTX2dldGRlbnRzNjQgPSBfX19OUl9nZXRkZW50czY0DQogICAgK2NvbnN0IF9fX05SX2Nsb3Nl
ID0gMw0KICAgICtjb25zdCBfRlNfQlRSRUVfRkwgPSAweDAwMDAxMDAwDQogICAgK2NvbnN0IF9N
U0dfUlNUID0gNDA5Ng0KICAgICtjb25zdCBfX1NDX1JFQUxUSU1FX1NJR05BTFMgPSA5DQogICAg
K2NvbnN0IF9JTl9BTExfRVZFTlRTID0gKF9JTl9BQ0NFU1MgfCBfSU5fTU9ESUZZIHwgX0lOX0FU
VFJJQiB8IF9JTl9DTE9TRV9XUklURSB8IF9JTl9DTE9TRV9OT1dSSVRFIHwgX0lOX09QRU4gfCBf
SU5fTU9WRURfRlJPTSB8IF9JTl9NT1ZFRF9UTyB8IF9JTl9DUkVBVEUgfCBfSU5fREVMRVRFIHwg
X0lOX0RFTEVURV9TRUxGIHwgX0lOX01PVkVfU0VMRikNCiAgICArY29uc3QgX1VJTlRfRkFTVDE2
X01BWCA9ICgxODQ0Njc0NDA3MzcwOTU1MTYxNSkNCiAgICArY29uc3QgX1BUUkFDRV9BVFRBQ0gg
PSAxNg0KICAgICtjb25zdCBfX19OUl9ta25vZGF0ID0gMjU5DQogICAgK2NvbnN0IF9TQ05pOCA9
ICJoaGkiDQogICAgK2NvbnN0IF9fU0NfTEVWRUwxX0RDQUNIRV9BU1NPQyA9IDE4OQ0KICAgICtj
b25zdCBfUlRNX05FV0NBQ0hFUkVQT1JUID0gOTYNCiAgICArY29uc3QgX1NPX1BFRVJOQU1FID0g
MjgNCiAgICArY29uc3QgX1g4Nl9DUjRfT1NGWFNSX0JJVCA9IDkNCiAgICArY29uc3QgX19fREJM
X01JTl8xMF9FWFBfXyA9ICgtMzA3KQ0KICAgICtjb25zdCBfX1BPU0lYMl9DSEFSQ0xBU1NfTkFN
RV9NQVggPSAxNA0KICAgICtjb25zdCBfX19CSVRfVFlQRVNfREVGSU5FRF9fID0gMQ0KICAgICtj
b25zdCBfX0JJVFNfU1RBVF9IID0gMQ0KICAgICtjb25zdCBfU0lHS0lMTCA9IDkNCiAgICArY29u
c3QgX19fTlJfbW1hcCA9IDkNCiAgICArY29uc3QgX19ESVJFTlRfSCA9IDENCiAgICArY29uc3Qg
X1JUQV9DQUNIRUlORk8gPSAxMg0KICAgICtjb25zdCBfUlRGX01UVSA9IDB4MDA0MA0KICAgICtj
b25zdCBfTkRUUEFfUVVFVUVfTEVOQllURVMgPSAxNg0KICAgICtjb25zdCBfQ1g4Nl9DQ1I0ID0g
MHhlOA0KICAgICtjb25zdCBfSUZBX1VOU1BFQyA9IDANCiAgICArY29uc3QgX19fTlJfc2V0cmxp
bWl0ID0gMTYwDQogICAgK2NvbnN0IF9TT19NRU1JTkZPID0gNTUNCiAgICArY29uc3QgX19TQ19O
UFJPQ0VTU09SU19PTkxOID0gODQNCiAgICArY29uc3QgX01DQVNUX0pPSU5fR1JPVVAgPSA0Mg0K
ICAgICtjb25zdCBfRU9WRVJGTE9XID0gNzUNCiAgICArY29uc3QgX01BRFZfV0lMTE5FRUQgPSAz
DQogICAgK2NvbnN0IF9BUlBIUkRfSElQUEkgPSA3ODANCiAgICArY29uc3QgX05TSUcgPSBfX05T
SUcNCiAgICArY29uc3QgX0FGX1JPVVRFID0gX1BGX1JPVVRFDQogICAgK2NvbnN0IF9TSU9DR1NU
QU1QTlMgPSAweDg5MDcNCiAgICArY29uc3QgX1BPUlRfVkRQX1JFU1BPTlNFX1NVQ0NFU1MgPSAw
DQogICAgK2NvbnN0IF9JRkxBX01BQ1NFQ19SRVBMQVlfUFJPVEVDVCA9IDEyDQogICAgK2NvbnN0
IF9USU9DTVNFVCA9IDB4NTQxOA0KICAgICtjb25zdCBfTkVUTElOS19LT0JKRUNUX1VFVkVOVCA9
IDE1DQogICAgK2NvbnN0IF9fUE9TSVgyX0VYUFJfTkVTVF9NQVggPSAzMg0KICAgICtjb25zdCBf
SVBfTVVMVElDQVNUX0xPT1AgPSAzNA0KICAgICtjb25zdCBfUlRNX0dFVE1EQiA9IDg2DQogICAg
K2NvbnN0IF9fX0lOVF9MRUFTVDhfV0lEVEhfXyA9IDgNCiAgICArY29uc3QgX19fTlJfcnRfc2ln
cXVldWVpbmZvID0gMTI5DQogICAgK2NvbnN0IF9YODZfQ1I0X1BLRV9CSVQgPSAyMg0KICAgICtj
b25zdCBfSUZMQV9CT05EX1NMQVZFX1BFUk1fSFdBRERSID0gNA0KICAgICtjb25zdCBfX1BPU0lY
X1RIUkVBRF9QUklPX0lOSEVSSVQgPSAyMDA4MDkNCiAgICArY29uc3QgX0VQT0xMTVNHID0gMTAy
NA0KICAgICtjb25zdCBfSUZMQV9HU09fTUFYX1NJWkUgPSA0MQ0KICAgICtjb25zdCBfX1NDX0xF
VkVMMV9JQ0FDSEVfTElORVNJWkUgPSAxODcNCiAgICArY29uc3QgX19fTlJfbXN5bmMgPSAyNg0K
ICAgICtjb25zdCBfUlRBX01VTFRJUEFUSCA9IDkNCiAgICArY29uc3QgX0ZGMCA9IDAwMDAwMDAN
CiAgICArY29uc3QgX0ZGMSA9IDAxMDAwMDANCiAgICArY29uc3QgX0VUSF9QX0FUTUZBVEUgPSAw
eDg4ODQNCiAgICArY29uc3QgX1g4Nl9FRkxBR1NfSURfQklUID0gMjENCiAgICArY29uc3QgX19f
TlJfYmluZCA9IDQ5DQogICAgK2NvbnN0IF9fREVGQVVMVF9TT1VSQ0UgPSAxDQogICAgK2NvbnN0
IF9JUE9QVF9TRUNVUl9SRVNUUiA9IDB4YWYxMw0KICAgICtjb25zdCBfSUZMQV9WWExBTl9DT0xM
RUNUX01FVEFEQVRBID0gMjUNCiAgICArY29uc3QgX1NUQVRYX1VJRCA9IDB4MDAwOA0KICAgICtj
b25zdCBfUFRSQUNFX0dFVEZQWFJFR1MgPSAxOA0KICAgICtjb25zdCBfU1lTX2dldHByaW9yaXR5
ID0gX19fTlJfZ2V0cHJpb3JpdHkNCiAgICArY29uc3QgX0hBVkVfUElQRTIgPSAxDQogICAgK2Nv
bnN0IF9fX05SX2Nsb2NrX3NldHRpbWUgPSAyMjcNCiAgICArY29uc3QgX19fTlJfbXVubG9jayA9
IDE1MA0KICAgICtjb25zdCBfUlRQUk9UX09TUEYgPSAxODgNCiAgICArY29uc3QgX1JUTV9HRVRM
SU5LID0gMTgNCiAgICArY29uc3QgX19fTlJfYWxhcm0gPSAzNw0KICAgICtjb25zdCBfX19PX0RT
WU5DID0gMDEwMDAwDQogICAgK2NvbnN0IF9QUklPX1BHUlAgPSAxDQogICAgK2NvbnN0IF9fX05S
X3N5bmNmcyA9IDMwNg0KICAgICtjb25zdCBfRU5PVFNVUCA9IF9FT1BOT1RTVVBQDQogICAgK2Nv
bnN0IF9ORVRMSU5LX1VOVVNFRCA9IDENCiAgICArY29uc3QgX0lDTVA2X1JSX1BDT1VTRV9GTEFH
U19ERUNSVkxUSU1FID0gMHg4MA0KICAgICtjb25zdCBfSEFWRV9TWVNfU09DS0VUX0ggPSAxDQog
ICAgK2NvbnN0IF9TWVNfc2V0X3JvYnVzdF9saXN0ID0gX19fTlJfc2V0X3JvYnVzdF9saXN0DQog
ICAgK2NvbnN0IF9DTE9DS19NT05PVE9OSUNfQ09BUlNFID0gNg0KICAgICtjb25zdCBfX0NTX1hC
UzVfTFBCSUdfT0ZGQklHX0NGTEFHUyA9IDExMTINCiAgICArY29uc3QgX19BU01fWDg2X1VOSVNU
RF82NF9IID0gMQ0KICAgICtjb25zdCBfU1lTX3Byb2Nlc3Nfdm1fcmVhZHYgPSBfX19OUl9wcm9j
ZXNzX3ZtX3JlYWR2DQogICAgK2NvbnN0IF9YODZfQ1IwX01QX0JJVCA9IDENCiAgICArY29uc3Qg
X0lQT1BUX01JTk9GRiA9IDQNCiAgICArY29uc3QgX0lQVjZfVjZPTkxZID0gMjYNCiAgICArY29u
c3QgX1g4Nl9DUjRfRlNHU0JBU0VfQklUID0gMTYNCiAgICArY29uc3QgX1NJR0VWX1NJR05BTCA9
IDANCiAgICArY29uc3QgX1NZU19ydF9zaWdzdXNwZW5kID0gX19fTlJfcnRfc2lnc3VzcGVuZA0K
ICAgICtjb25zdCBfUlRNX05FV05FSUdIID0gMjgNCiAgICArY29uc3QgX19fUFRIUkVBRF9SV0xP
Q0tfSU5UX0ZMQUdTX1NIQVJFRCA9IDENCiAgICArY29uc3QgX19fSU5UX0xFQVNUNjRfV0lEVEhf
XyA9IDY0DQogICAgK2NvbnN0IF9TWVNfZ2V0cGVlcm5hbWUgPSBfX19OUl9nZXRwZWVybmFtZQ0K
ICAgICtjb25zdCBfX19OUl9jaGRpciA9IDgwDQogICAgK2NvbnN0IF9fX05SX2V4aXRfZ3JvdXAg
PSAyMzENCiAgICArY29uc3QgX19fUE9TSVgyX1RISVNfVkVSU0lPTiA9IDIwMDgwOQ0KICAgICtj
b25zdCBfTkwwID0gMDAwMDAwMA0KICAgICtjb25zdCBfX19JRkxBX1JNTkVUX01BWCA9IDMNCiAg
ICArY29uc3QgX19TQ18yX0NfVkVSU0lPTiA9IDk2DQogICAgK2NvbnN0IF9BUlBIUkRfU0xJUDYg
PSAyNTgNCiAgICArY29uc3QgX1NZU19nZXRlZ2lkID0gX19fTlJfZ2V0ZWdpZA0KICAgICtjb25z
dCBfX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgPSA3Mw0KICAgICtjb25zdCBfU0lH
VFNUUCA9IDIwDQogICAgK2NvbnN0IF9NU0dfRklOID0gNTEyDQogICAgK2NvbnN0IF9ORFVTRVJP
UFRfU1JDQUREUiA9IDENCiAgICArY29uc3QgX0lOX0NMQVNTQ19IT1NUID0gKDB4ZmZmZmZmZmYg
JiBeX0lOX0NMQVNTQ19ORVQpDQogICAgK2NvbnN0IF9DSEFSX0JJVCA9IF9fX0NIQVJfQklUX18N
CiAgICArY29uc3QgX01DTF9GVVRVUkUgPSAyDQogICAgK2NvbnN0IF9SVEFYX1VOU1BFQyA9IDAN
CiAgICArY29uc3QgX0lGTEFfQk9ORF9GQUlMX09WRVJfTUFDID0gMTMNCiAgICArY29uc3QgX19f
TERCTF9IQVNfREVOT1JNX18gPSAxDQogICAgK2NvbnN0IF9TSUdJT1QgPSBfU0lHQUJSVA0KICAg
ICtjb25zdCBfX19OUl92Zm9yayA9IDU4DQogICAgK2NvbnN0IF9fQklUU19QVEhSRUFEVFlQRVNf
QVJDSF9IID0gMQ0KICAgICtjb25zdCBfTkRUQV9QQUQgPSA5DQogICAgK2NvbnN0IF9fX05SX3N3
YXBvZmYgPSAxNjgNCiAgICArY29uc3QgX0lGTEFfTUFDU0VDX1BST1RFQ1QgPSA4DQogICAgK2Nv
bnN0IF9BVF9TWU1MSU5LX0ZPTExPVyA9IDB4NDAwDQogICAgK2NvbnN0IF9QUl9NQ0VfS0lMTF9M
QVRFID0gMA0KICAgICtjb25zdCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9S
RVNPVVJDRVMgPSAyNjANCiAgICArY29uc3QgX0ZTX1hGTEFHX0VYVFNJWkUgPSAweDAwMDAwODAw
DQogICAgK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFHUyA9IDExMDUNCiAgICAr
Y29uc3QgX0ZTX1hGTEFHX1JUSU5IRVJJVCA9IDB4MDAwMDAxMDANCiAgICArY29uc3QgX0ZQRV9J
TlRPVkYgPSAyDQogICAgK2NvbnN0IF9TSFJUX01BWCA9IF9fX1NIUlRfTUFYX18NCiAgICArY29u
c3QgX19fTlJfcHJvY2Vzc192bV9yZWFkdiA9IDMxMA0KICAgICtjb25zdCBfTVNfRElSU1lOQyA9
IDEyOA0KICAgICtjb25zdCBfTl9TWU5DX1BQUCA9IDE0DQogICAgK2NvbnN0IF9fTUtOT0RfVkVS
X0xJTlVYID0gMA0KICAgICtjb25zdCBfSVBfUkVDVkZSQUdTSVpFID0gMjUNCiAgICArY29uc3Qg
X0lGTEFfQlJfVkxBTl9TVEFUU19FTkFCTEVEID0gNDENCiAgICArY29uc3QgX1BBR0VfU0hJRlQg
PSAxMg0KICAgICtjb25zdCBfSUxMX0lMTE9QTiA9IDINCiAgICArY29uc3QgX0xPQ0tfUkVBRCA9
IDY0DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfQURfQUdHUkVHQVRPUl9JRCA9IDYNCiAg
ICArY29uc3QgX1NPTF9YMjUgPSAyNjINCiAgICArY29uc3QgX0lQVE9TX0xPV0RFTEFZID0gMHgx
MA0KICAgICtjb25zdCBfX1NZU19JT0NUTF9IID0gMQ0KICAgICtjb25zdCBfU1lTX2dldHNpZCA9
IF9fX05SX2dldHNpZA0KICAgICtjb25zdCBfX19TX0lGU09DSyA9IDAxNDAwMDANCiAgICArY29u
c3QgX1BSX1NFVF9NTV9BUkdfRU5EID0gOQ0KICAgICtjb25zdCBfRkZJX1RSQU1QT0xJTkVfU0la
RSA9IDI0DQogICAgK2NvbnN0IF9FVEhfUF9OQ1NJID0gMHg4OEY4DQogICAgK2NvbnN0IF9QT1JU
X1BST0ZJTEVfUkVTUE9OU0VfSU5QUk9HUkVTUyA9IDI1Nw0KICAgICtjb25zdCBfU0FfU1RBQ0sg
PSBfU0FfT05TVEFDSw0KICAgICtjb25zdCBfSUZBX0FOWUNBU1QgPSA1DQogICAgK2NvbnN0IF9S
VEFYX0NDX0FMR08gPSAxNg0KICAgICtjb25zdCBfTlVEX1BST0JFID0gMHgxMA0KICAgICtjb25z
dCBfUFRSQUNFX1BFRUtVU0VSID0gMw0KICAgICtjb25zdCBfSUNNUDZfVElNRV9FWENFRURfVFJB
TlNJVCA9IDANCiAgICArY29uc3QgX19TQ19QUklPUklUWV9TQ0hFRFVMSU5HID0gMTANCiAgICAr
Y29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfTElCUyA9IDExMzgNCiAgICArY29uc3Qg
X1NZU19yZWFkbGlua2F0ID0gX19fTlJfcmVhZGxpbmthdA0KICAgICtjb25zdCBfU19JRVhFQyA9
IF9TX0lYVVNSDQogICAgK2NvbnN0IF9UQ1BfQ0xPU0lORyA9IDExDQogICAgK2NvbnN0IF9fQklU
U19USU1FX0ggPSAxDQogICAgK2NvbnN0IF9JUF9NU0ZJTFRFUiA9IDQxDQogICAgK2NvbnN0IF9I
QVZFX0FTX1g4Nl9BRVMgPSAxDQogICAgK2NvbnN0IF9fX1JMSU1JVF9MT0NLUyA9IDEwDQogICAg
K2NvbnN0IF9USF9VUkcgPSAweDIwDQogICAgK2NvbnN0IF9PX1NZTkMgPSAwNDAxMDAwMA0KICAg
ICtjb25zdCBfX1NZU19VSU9fSCA9IDENCiAgICArY29uc3QgX01BQ1NFQ19WQUxJREFURV9DSEVD
SyA9IDENCiAgICArY29uc3QgX0lHTkNSID0gMDAwMDIwMA0KICAgICtjb25zdCBfX19JTlRQVFJf
V0lEVEhfXyA9IDY0DQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9DRkxBR1Mg
PSAxMTQwDQogICAgK2NvbnN0IF9CVVNfT0JKRVJSID0gMw0KICAgICtjb25zdCBfVENQX0NPTkdF
U1RJT04gPSAxMw0KICAgICtjb25zdCBfX19OUl9xdWVyeV9tb2R1bGUgPSAxNzgNCiAgICArY29u
c3QgX05MTV9GX1JPT1QgPSAweDEwMA0KICAgICtjb25zdCBfRUJBRFJRQyA9IDU2DQogICAgK2Nv
bnN0IF9TWVNfbXNnY3RsID0gX19fTlJfbXNnY3RsDQogICAgK2NvbnN0IF9CUEZfTUVNV09SRFMg
PSAxNg0KICAgICtjb25zdCBfSUZMQV9WRl9WTEFOX0lORk8gPSAxDQogICAgK2NvbnN0IF9SVE5M
R1JQX05EX1VTRVJPUFQgPSAyMA0KICAgICtjb25zdCBfQVRGX0RPTlRQVUIgPSAweDQwDQogICAg
K2NvbnN0IF9fX05SX3NodXRkb3duID0gNDgNCiAgICArY29uc3QgX1JUTkxHUlBfTVBMU19ORVRD
T05GID0gMjkNCiAgICArY29uc3QgX19TQ19JTlRfTUFYID0gMTA0DQogICAgK2NvbnN0IF9fX05S
X3NldHVpZCA9IDEwNQ0KICAgICtjb25zdCBfSFVQQ0wgPSAwMDAyMDAwDQogICAgK2NvbnN0IF9B
Rl9SRFMgPSBfUEZfUkRTDQogICAgK2NvbnN0IF9QUl9TRVRfVElNRVJTTEFDSyA9IDI5DQogICAg
K2NvbnN0IF9DTE9ORV9TSUdIQU5EID0gMHgwMDAwMDgwMA0KICAgICtjb25zdCBfUFJfU0VUX01N
X0FSR19TVEFSVCA9IDgNCiAgICArY29uc3QgX19fTlJfZHVwMiA9IDMzDQogICAgK2NvbnN0IF9f
X05SX2R1cDMgPSAyOTINCiAgICArY29uc3QgX19QT1NJWF9USFJFQURfUFJJT19QUk9URUNUID0g
MjAwODA5DQogICAgK2NvbnN0IF9QUl9TRVRfTU1fTUFQID0gMTQNCiAgICArY29uc3QgX19DU19Q
T1NJWF9WNl9JTFAzMl9PRkZCSUdfQ0ZMQUdTID0gMTEyMA0KICAgICtjb25zdCBfX19OUl9zY2hl
ZF9nZXRzY2hlZHVsZXIgPSAxNDUNCiAgICArY29uc3QgX19TQ19YT1BFTl9DUllQVCA9IDkyDQog
ICAgK2NvbnN0IF9SVE1fTkVXUk9VVEUgPSAyNA0KICAgICtjb25zdCBfU0lfTE9BRF9TSElGVCA9
IDE2DQogICAgK2NvbnN0IF9QUklkTEVBU1QxNiA9ICJkIg0KICAgICtjb25zdCBfTU9EX0VTVEVS
Uk9SID0gX0FESl9FU1RFUlJPUg0KICAgICtjb25zdCBfSVBQT1JUX0VGU1NFUlZFUiA9IDUyMA0K
ICAgICtjb25zdCBfQUZfSUVFRTgwMjE1NCA9IF9QRl9JRUVFODAyMTU0DQogICAgK2NvbnN0IF9T
WVNfc2lnbmFsZmQ0ID0gX19fTlJfc2lnbmFsZmQ0DQogICAgK2NvbnN0IF9USU9DU1NPRlRDQVIg
PSAweDU0MUENCiAgICArY29uc3QgX19fTlJfdW1vdW50MiA9IDE2Ng0KICAgICtjb25zdCBfSUZM
QV9WUkZfVEFCTEUgPSAxDQogICAgK2NvbnN0IF9TT19USU1FU1RBTVBJTkcgPSAzNw0KICAgICtj
b25zdCBfTVNfUkRPTkxZID0gMQ0KICAgICtjb25zdCBfU0tGX05FVF9PRkYgPSAoLTB4MTAwMDAw
KQ0KICAgICtjb25zdCBfRE5fQUNDRVNTID0gMHgwMDAwMDAwMQ0KICAgICtjb25zdCBfU1lTX2Fj
Y2VzcyA9IF9fX05SX2FjY2Vzcw0KICAgICtjb25zdCBfX1NDX1Y2X0xQQklHX09GRkJJRyA9IDE3
OQ0KICAgICtjb25zdCBfSVBPUFRfUkVTRVJWRUQxID0gMHgyMA0KICAgICtjb25zdCBfVENQX0NP
T0tJRV9NQVggPSAxNg0KICAgICtjb25zdCBfUk1ORVRfRkxBR1NfSU5HUkVTU19ERUFHR1JFR0FU
SU9OID0gKDEgPDwgMCkNCiAgICArY29uc3QgX01TX1NUUklDVEFUSU1FID0gMTY3NzcyMTYNCiAg
ICArY29uc3QgX19fTlJfY2xvY2tfZ2V0dGltZSA9IDIyOA0KICAgICtjb25zdCBfX19OUl9zZW10
aW1lZG9wID0gMjIwDQogICAgK2NvbnN0IF9fVVRTTkFNRV9SRUxFQVNFX0xFTkdUSCA9IF9fVVRT
TkFNRV9MRU5HVEgNCiAgICArY29uc3QgX19fREVDMzJfTUlOX0VYUF9fID0gKC05NCkNCiAgICAr
Y29uc3QgX1g4Nl9FRkxBR1NfRklYRURfQklUID0gMQ0KICAgICtjb25zdCBfSEFWRV9TWVNfUFJD
VExfSCA9IDENCiAgICArY29uc3QgX19QT1NJWF9SRUVOVFJBTlRfRlVOQ1RJT05TID0gMQ0KICAg
ICtjb25zdCBfQkxPQ0tfU0laRV9CSVRTID0gMTANCiAgICArY29uc3QgX0VDT05OUkVTRVQgPSAx
MDQNCiAgICArY29uc3QgX0lGTEFfVkZfSUJfUE9SVF9HVUlEID0gMTENCiAgICArY29uc3QgX19f
REJMX0RFQ0lNQUxfRElHX18gPSAxNw0KICAgICtjb25zdCBfSEFWRV9PUEVOQVQgPSAxDQogICAg
K2NvbnN0IF9UVU5fUEtUX1NUUklQID0gMHgwMDAxDQogICAgK2NvbnN0IF9WU1RPUCA9IDkNCiAg
ICArY29uc3QgX0lQVE9TX0RTQ1BfQUYxMSA9IDB4MjgNCiAgICArY29uc3QgX0lQVE9TX0RTQ1Bf
QUYxMiA9IDB4MzANCiAgICArY29uc3QgX0lQVE9TX0RTQ1BfQUYxMyA9IDB4MzgNCiAgICArY29u
c3QgX19fTlJfcmVjdm1tc2cgPSAyOTkNCiAgICArY29uc3QgX19fVVNFX1hPUEVOMks4ID0gMQ0K
ICAgICtjb25zdCBfUFJfRlBfRVhDX0RJViA9IDB4MDEwMDAwDQogICAgK2NvbnN0IF9DTE9ORV9E
RVRBQ0hFRCA9IDB4MDA0MDAwMDANCiAgICArY29uc3QgX1NZU19nZXRfcm9idXN0X2xpc3QgPSBf
X19OUl9nZXRfcm9idXN0X2xpc3QNCiAgICArY29uc3QgX1NPX0RFVEFDSF9CUEYgPSBfU09fREVU
QUNIX0ZJTFRFUg0KICAgICtjb25zdCBfU1RBVFhfQVRUUl9BVVRPTU9VTlQgPSAweDEwMDANCiAg
ICArY29uc3QgX19QT1NJWF9USU1FUlMgPSAyMDA4MDkNCiAgICArY29uc3QgX1RDUElfT1BUX0VD
Tl9TRUVOID0gMTYNCiAgICArY29uc3QgX0FSUEhSRF9BU0ggPSA3ODENCiAgICArY29uc3QgX01T
X1JNVF9NQVNLID0gKF9NU19SRE9OTFl8X01TX1NZTkNIUk9OT1VTfF9NU19NQU5ETE9DS3xfTVNf
SV9WRVJTSU9OfCBfTVNfTEFaWVRJTUUpDQogICAgK2NvbnN0IF9TWVNfbXFfbm90aWZ5ID0gX19f
TlJfbXFfbm90aWZ5DQogICAgK2NvbnN0IF9JRkZfVVAgPSAxDQogICAgK2NvbnN0IF9JUFBST1RP
X0ZSQUdNRU5UID0gNDQNCiAgICArY29uc3QgX1NDTmlMRUFTVDE2ID0gImhpIg0KICAgICtjb25z
dCBfRl9TRUFMX1NIUklOSyA9IDB4MDAwMg0KICAgICtjb25zdCBfRlNfTk9UQUlMX0ZMID0gMHgw
MDAwODAwMA0KICAgICtjb25zdCBfU1RBVFhfQlRJTUUgPSAweDA4MDANCiAgICArY29uc3QgX19f
SUZMQV9CUlBPUlRfTUFYID0gMzUNCiAgICArY29uc3QgX19fTlJfZXhlY3ZlID0gNTkNCiAgICAr
Y29uc3QgX19fVVNFX0VYVEVSTl9JTkxJTkVTID0gMQ0KICAgICtjb25zdCBfSVBfQklORF9BRERS
RVNTX05PX1BPUlQgPSAyNA0KICAgICtjb25zdCBfSU5UOF9NQVggPSAoMTI3KQ0KICAgICtjb25z
dCBfTUFEVl9TRVFVRU5USUFMID0gMg0KICAgICtjb25zdCBfRl9XUkxDSyA9IDENCiAgICArY29u
c3QgX0lQUE9SVF9VU0VSUkVTRVJWRUQgPSA1MDAwDQogICAgK2NvbnN0IF9JUF9QTVRVRElTQ19X
QU5UID0gMQ0KICAgICtjb25zdCBfU1lTX2NyZWF0ZV9tb2R1bGUgPSBfX19OUl9jcmVhdGVfbW9k
dWxlDQogICAgK2NvbnN0IF9JRkxBX0JSX1JPT1RfSUQgPSAxMA0KICAgICtjb25zdCBfU1lTX3Bp
dm90X3Jvb3QgPSBfX19OUl9waXZvdF9yb290DQogICAgK2NvbnN0IF9CMjMwNDAwID0gMDAxMDAw
Mw0KICAgICtjb25zdCBfU09MX1RMUyA9IDI4Mg0KICAgICtjb25zdCBfX05FVF9ST1VURV9IID0g
MQ0KICAgICtjb25zdCBfRUxJQkJBRCA9IDgwDQogICAgK2NvbnN0IF9SUE1fUENPX1NFVEdMT0JB
TCA9IDMNCiAgICArY29uc3QgX0JSSURHRV9NT0RFX1VOU1BFQyA9IDANCiAgICArY29uc3QgX0VO
T0JVRlMgPSAxMDUNCiAgICArY29uc3QgX19fU0hSVF9XSURUSF9fID0gMTYNCiAgICArY29uc3Qg
X1JUX0NMQVNTX1VOU1BFQyA9IDANCiAgICArY29uc3QgX19fRkxUMTI4X01BWF9FWFBfXyA9IDE2
Mzg0DQogICAgK2NvbnN0IF9JUFRPU19EU0NQX0FGMjEgPSAweDQ4DQogICAgK2NvbnN0IF9JUFRP
U19EU0NQX0FGMjIgPSAweDUwDQogICAgK2NvbnN0IF9JUFRPU19EU0NQX0FGMjMgPSAweDU4DQog
ICAgK2NvbnN0IF9fX0ZMVDMyWF9NQVhfMTBfRVhQX18gPSAzMDgNCiAgICArY29uc3QgX19TQ19V
SU9fTUFYSU9WID0gNjANCiAgICArY29uc3QgX1g4Nl9DUjBfRU1fQklUID0gMg0KICAgICtjb25z
dCBfTlRGX09GRkxPQURFRCA9IDB4MjANCiAgICArY29uc3QgX1NZU19pb3ByaW9fc2V0ID0gX19f
TlJfaW9wcmlvX3NldA0KICAgICtjb25zdCBfX19OUl9nZXR0aW1lb2ZkYXkgPSA5Ng0KICAgICtj
b25zdCBfUFRSQUNFX0NPTlQgPSA3DQogICAgK2NvbnN0IF9USU9DU1BUTENLX3ZhbCA9IDEwNzQw
MjU1MjENCiAgICArY29uc3QgX1BUUkFDRV9QRUVLVEVYVCA9IDENCiAgICArY29uc3QgX05FVExJ
TktfWEZSTSA9IDYNCiAgICArY29uc3QgX1RDQV9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9FVEhf
UF84MDIxUSA9IDB4ODEwMA0KICAgICtjb25zdCBfSUZMQV9WTEFOX0lOR1JFU1NfUU9TID0gNA0K
ICAgICtjb25zdCBfRVBPTExSREJBTkQgPSAxMjgNCiAgICArY29uc3QgX1NZU191bWFzayA9IF9f
X05SX3VtYXNrDQogICAgK2NvbnN0IF9QQUNLRVRfTVJfVU5JQ0FTVCA9IDMNCiAgICArY29uc3Qg
X05MTV9GX0VDSE8gPSAweDA4DQogICAgK2NvbnN0IF9GRklfVFlQRV9TSU5UMTYgPSA4DQogICAg
K2NvbnN0IF9fU0NfVFJBQ0VfVVNFUl9FVkVOVF9NQVggPSAyNDUNCiAgICArY29uc3QgX1NZU19y
ZWN2bXNnID0gX19fTlJfcmVjdm1zZw0KICAgICtjb25zdCBfX19OUl9zY2hlZF9nZXRfcHJpb3Jp
dHlfbWluID0gMTQ3DQogICAgK2NvbnN0IF9TWVNfcHBvbGwgPSBfX19OUl9wcG9sbA0KICAgICtj
b25zdCBfRkZJX1RZUEVfUE9JTlRFUiA9IDE0DQogICAgK2NvbnN0IF9JRkFfUlRfUFJJT1JJVFkg
PSA5DQogICAgK2NvbnN0IF9SVEFYX0lOSVRDV05EID0gMTENCiAgICArY29uc3QgX0lQX1BNVFVE
SVNDX0lOVEVSRkFDRSA9IDQNCiAgICArY29uc3QgX0lGTEFfUE9SVF9VTlNQRUMgPSAwDQogICAg
K2NvbnN0IF9TSUdfU0VUTUFTSyA9IDINCiAgICArY29uc3QgX1NPTF9JQ01QVjYgPSA1OA0KICAg
ICtjb25zdCBfU0NOeDMyID0gIngiDQogICAgK2NvbnN0IF9UQ1BfTVNTID0gNTEyDQogICAgK2Nv
bnN0IF9FVEhfUF84MDIyMSA9IDB4ODkxNw0KICAgICtjb25zdCBfQ1IyID0gMDAwMjAwMA0KICAg
ICtjb25zdCBfQ1IzID0gMDAwMzAwMA0KICAgICtjb25zdCBfU1lTX2xzZWVrID0gX19fTlJfbHNl
ZWsNCiAgICArY29uc3QgX19GSUxFX09GRlNFVF9CSVRTID0gNjQNCiAgICArY29uc3QgX19TQ19D
T0xMX1dFSUdIVFNfTUFYID0gNDANCiAgICArY29uc3QgX19TQ19USFJFQURfQ1BVVElNRSA9IDEz
OQ0KICAgICtjb25zdCBfUE9SVF9SRVFVRVNUX1BSRUFTU09DSUFURV9SUiA9IDENCiAgICArY29u
c3QgX0lOX1VOTU9VTlQgPSAweDAwMDAyMDAwDQogICAgK2NvbnN0IF9JUFRPU19EU0NQX0FGMzEg
PSAweDY4DQogICAgK2NvbnN0IF9JUFRPU19EU0NQX0FGMzIgPSAweDcwDQogICAgK2NvbnN0IF9J
UFRPU19EU0NQX0FGMzMgPSAweDc4DQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX1JFTUNTVU1fUlgg
PSAyMg0KICAgICtjb25zdCBfRVBPTExFWENMVVNJVkUgPSAyNjg0MzU0NTYNCiAgICArY29uc3Qg
X19fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzEgPSAxDQogICAgK2NvbnN0IF9QVFJB
Q0VfR0VURVZFTlRNU0cgPSAxNjg5Nw0KICAgICtjb25zdCBfTE9DS19NQU5EID0gMzINCiAgICAr
Y29uc3QgX05FVExJTktfVVNFUlNPQ0sgPSAyDQogICAgK2NvbnN0IF9GU19FTkNSWVBUSU9OX01P
REVfSU5WQUxJRCA9IDANCiAgICArY29uc3QgX1RVTl9UWF9USU1FU1RBTVAgPSAxDQogICAgK2Nv
bnN0IF9TWVNfcHdyaXRldjIgPSBfX19OUl9wd3JpdGV2Mg0KICAgICtjb25zdCBfX19JTlRfTEVB
U1QxNl9NQVhfXyA9IDB4N2ZmZg0KICAgICtjb25zdCBfU1lTX3ByZWFkNjQgPSBfX19OUl9wcmVh
ZDY0DQogICAgK2NvbnN0IF9QUklvTEVBU1QxNiA9ICJvIg0KICAgICtjb25zdCBfU0NOaUxFQVNU
MzIgPSAiaSINCiAgICArY29uc3QgX1NZU19zZW1jdGwgPSBfX19OUl9zZW1jdGwNCiAgICArY29u
c3QgX19QT1NJWF9OR1JPVVBTX01BWCA9IDgNCiAgICArY29uc3QgX0I0MDAwMDAwID0gMDAxMDAx
Nw0KICAgICtjb25zdCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNFX0lOVkFMSUQgPSAyNTgNCiAgICAr
Y29uc3QgX1BBQ0tFVF9GQU5PVVRfREFUQSA9IDIyDQogICAgK2NvbnN0IF9DUkVBRCA9IDAwMDAy
MDANCiAgICArY29uc3QgX0VUSF9QX1BQUF9NUCA9IDB4MDAwOA0KICAgICtjb25zdCBfX19GTFQz
MlhfREVDSU1BTF9ESUdfXyA9IDE3DQogICAgK2NvbnN0IF9YODZfQ1I0X1BWSV9CSVQgPSAxDQog
ICAgK2NvbnN0IF9TWVNfZXBvbGxfY3JlYXRlMSA9IF9fX05SX2Vwb2xsX2NyZWF0ZTENCiAgICAr
Y29uc3QgX0lGTEFfQlJQT1JUX0NPTkZJR19QRU5ESU5HID0gMjANCiAgICArY29uc3QgX19fREJM
X01BWF9FWFBfXyA9IDEwMjQNCiAgICArY29uc3QgX01BUF9TWU5DID0gMHg4MDAwMA0KICAgICtj
b25zdCBfUkVHX1JCUCA9IDEwDQogICAgK2NvbnN0IF9FS0VZUkVWT0tFRCA9IDEyOA0KICAgICtj
b25zdCBfX1BPU0lYX1RSQUNFX0VWRU5UX0ZJTFRFUiA9IC0xDQogICAgK2NvbnN0IF9BRl9MT0NB
TCA9IF9QRl9MT0NBTA0KICAgICtjb25zdCBfUkVHX1JCWCA9IDExDQogICAgK2NvbnN0IF9TQ01f
VElNRVNUQU1QSU5HID0gX1NPX1RJTUVTVEFNUElORw0KICAgICtjb25zdCBfX19OUl9nZXRwZ3Jw
ID0gMTExDQogICAgK2NvbnN0IF9fX05SX3J0X3NpZ3RpbWVkd2FpdCA9IDEyOA0KICAgICtjb25z
dCBfX19GRF9aRVJPX1NUT1MgPSAic3Rvc3EiDQogICAgK2NvbnN0IF9QVFJBQ0VfUEVFS0RBVEEg
PSAyDQogICAgK2NvbnN0IF9QVFJBQ0VfU1lTQ0FMTCA9IDI0DQogICAgK2NvbnN0IF9TQ051MzIg
PSAidSINCiAgICArY29uc3QgX0xJTlVYX1JFQk9PVF9DTURfU1dfU1VTUEVORCA9IDB4RDAwMEZD
RTINCiAgICArY29uc3QgX09fRElSRUNUT1JZID0gX19fT19ESVJFQ1RPUlkNCiAgICArY29uc3Qg
X0VUSEVSVFlQRV9TUFJJVEUgPSAweDA1MDANCiAgICArY29uc3QgX1NPQ0tfUkFXID0gMw0KICAg
ICtjb25zdCBfT19OT0FUSU1FID0gX19fT19OT0FUSU1FDQogICAgK2NvbnN0IF9JUFRPU19EU0NQ
X0FGNDEgPSAweDg4DQogICAgK2NvbnN0IF9JUFRPU19EU0NQX0FGNDIgPSAweDkwDQogICAgK2Nv
bnN0IF9JUFRPU19EU0NQX0FGNDMgPSAweDk4DQogICAgK2NvbnN0IF9USU9DU1BHUlAgPSAweDU0
MTANCiAgICArY29uc3QgX05EX09QVF9SRURJUkVDVEVEX0hFQURFUiA9IDQNCiAgICArY29uc3Qg
X1JUQVhfRkVBVFVSRV9BTExGUkFHID0gKDEgPDwgMykNCiAgICArY29uc3QgX0lDTVA2X0RTVF9V
TlJFQUNIX0JFWU9ORFNDT1BFID0gMg0KICAgICtjb25zdCBfSVBPUFRfVElNRVNUQU1QID0gX0lQ
T1BUX1RTDQogICAgK2NvbnN0IF9SVE1fR0VURENCID0gNzgNCiAgICArY29uc3QgX1dPUkRfQklU
ID0gMzINCiAgICArY29uc3QgX1RDQV9TVEFUUyA9IDMNCiAgICArY29uc3QgX05fU0xJUCA9IDEN
CiAgICArY29uc3QgX1RDUF9TQVZFRF9TWU4gPSAyOA0KICAgICtjb25zdCBfX1NDX0JDX1NUUklO
R19NQVggPSAzOQ0KICAgICtjb25zdCBfUlRBWF9GRUFUVVJFX1NBQ0sgPSAoMSA8PCAxKQ0KICAg
ICtjb25zdCBfX1hPUEVOX1NPVVJDRSA9IDcwMA0KICAgICtjb25zdCBfX0FURklMRV9TT1VSQ0Ug
PSAxDQogICAgK2NvbnN0IF9QVFJBQ0VfRVZFTlRfVkZPUktfRE9ORSA9IDUNCiAgICArY29uc3Qg
X0lDTVA2X1JSX0ZMQUdTX1BSRVZET05FID0gMHgwOA0KICAgICtjb25zdCBfRUxOUk5HID0gNDgN
CiAgICArY29uc3QgX19QT1NJWF9BSU9fTElTVElPX01BWCA9IDINCiAgICArY29uc3QgX1JUTl9V
TklDQVNUID0gMQ0KICAgICtjb25zdCBfUlRBX01BUksgPSAxNg0KICAgICtjb25zdCBfU0lHU0VH
ViA9IDExDQogICAgK2NvbnN0IF9OQU1FX01BWCA9IDI1NQ0KICAgICtjb25zdCBfQUZfVlNPQ0sg
PSBfUEZfVlNPQ0sNCiAgICArY29uc3QgX0ZfVUxPQ0sgPSAwDQogICAgK2NvbnN0IF9NU0dfQkFU
Q0ggPSAyNjIxNDQNCiAgICArY29uc3QgX0ZQRV9GTFRVTkQgPSA1DQogICAgK2NvbnN0IF9fX0lG
TEFfVkZfTElOS19TVEFURV9NQVggPSAzDQogICAgK2NvbnN0IF9SVE5MR1JQX0RDQiA9IDIzDQog
ICAgK2NvbnN0IF9FUEVSTSA9IDENCiAgICArY29uc3QgX1JFR19SQ1ggPSAxNA0KICAgICtjb25z
dCBfTVNfTk9ESVJBVElNRSA9IDIwNDgNCiAgICArY29uc3QgX19URVJNSU9TX0ggPSAxDQogICAg
K2NvbnN0IF9fX0lOVE1BWF9XSURUSF9fID0gNjQNCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX0dV
QVJEID0gNQ0KICAgICtjb25zdCBfU1lTX3J0X3NpZ3BlbmRpbmcgPSBfX19OUl9ydF9zaWdwZW5k
aW5nDQogICAgK2NvbnN0IF9JRkxBX01BU1RFUiA9IDEwDQogICAgK2NvbnN0IF9FT1BOT1RTVVBQ
ID0gOTUNCiAgICArY29uc3QgX0NTNSA9IDAwMDAwMDANCiAgICArY29uc3QgX19QT1NJWDJfVkVS
U0lPTiA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04NCiAgICArY29uc3QgX19TQ19HRVRQV19SX1NJ
WkVfTUFYID0gNzANCiAgICArY29uc3QgX0lQX1JFQ1ZFUlIgPSAxMQ0KICAgICtjb25zdCBfSEFW
RV9TSU5MID0gMQ0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y3X0lMUDMyX09GRkJJR19DRkxBR1Mg
PSAxMTM2DQogICAgK2NvbnN0IF9fQ1NfTEZTNjRfTElOVEZMQUdTID0gMTAwNw0KICAgICtjb25z
dCBfUFJJeEZBU1Q4ID0gIngiDQogICAgK2NvbnN0IF9QUklvTEVBU1QzMiA9ICJvIg0KICAgICtj
b25zdCBfUFJJT19VU0VSID0gMg0KICAgICtjb25zdCBfSUZMQV9ORVdfSUZJTkRFWCA9IDQ5DQog
ICAgK2NvbnN0IF9JRkxBX1ZYTEFOX0xPQ0FMID0gNA0KICAgICtjb25zdCBfUFJfU0VUX01NX0VY
RV9GSUxFID0gMTMNCiAgICArY29uc3QgX1RDUF9TX0RBVEFfT1VUID0gKDEgPDwgMykNCiAgICAr
Y29uc3QgX0FURl9NQUdJQyA9IDB4ODANCiAgICArY29uc3QgX05EVFBBX0dDX1NUQUxFVElNRSA9
IDYNCiAgICArY29uc3QgX19fazggPSAxDQogICAgK2NvbnN0IF9fX0lOVF9GQVNUMzJfTUFYX18g
PSAweDdmZmZmZmZmZmZmZmZmZmYNCiAgICArY29uc3QgX19YQlM1X0xQQklHX09GRkJJRyA9IC0x
DQogICAgK2NvbnN0IF9TSU9DREVMTVVMVEkgPSAweDg5MzINCiAgICArY29uc3QgX1RVTlNFVE5P
Q1NVTV92YWwgPSAxMDc0MDI1NjcyDQogICAgK2NvbnN0IF9fX0xEQkxfREVOT1JNX01JTl9fID0g
MS4xDQogICAgK2NvbnN0IF9QRl9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9CUEZfTU9EID0gMHg5
MA0KICAgICtjb25zdCBfUkVHX1JESSA9IDgNCiAgICArY29uc3QgX0JQRl9NSVNDID0gMHgwNw0K
ICAgICtjb25zdCBfRl9HRVRPV04gPSBfX19GX0dFVE9XTg0KICAgICtjb25zdCBfSUZMQV9CUl9N
Q0FTVF9MQVNUX01FTUJFUl9DTlQgPSAyOA0KICAgICtjb25zdCBfVENQT1BUX1NBQ0tfUEVSTUlU
VEVEID0gNA0KICAgICtjb25zdCBfX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSA9IDc4DQogICAg
K2NvbnN0IF9fUE9TSVhfVjdfTFA2NF9PRkY2NCA9IDENCiAgICArY29uc3QgX1BGX0lFRUU4MDIx
NTQgPSAzNg0KICAgICtjb25zdCBfRUxJQk1BWCA9IDgyDQogICAgK2NvbnN0IF9CNDgwMCA9IDAw
MDAwMTQNCiAgICArY29uc3QgX1NZU19yZW5hbWVhdDIgPSBfX19OUl9yZW5hbWVhdDINCiAgICAr
Y29uc3QgX0lQUFJPVE9fRU5DQVAgPSA5OA0KICAgICtjb25zdCBfUkVHX1JEWCA9IDEyDQogICAg
K2NvbnN0IF9JUFY2XzIyOTJIT1BPUFRTID0gMw0KICAgICtjb25zdCBfX19ORVRJTkVUX0lQX0gg
PSAxDQogICAgK2NvbnN0IF9fX0ZMVDY0WF9IQVNfREVOT1JNX18gPSAxDQogICAgK2NvbnN0IF9J
RkxBX0JSUE9SVF9ERVNJR05BVEVEX0NPU1QgPSAxNg0KICAgICtjb25zdCBfSU5UX0xFQVNUOF9X
SURUSCA9IDgNCiAgICArY29uc3QgX05MTVNHRVJSX0FUVFJfT0ZGUyA9IDINCiAgICArY29uc3Qg
X1NUQVRYX0FUVFJfRU5DUllQVEVEID0gMHgwODAwDQogICAgK2NvbnN0IF9SRUdfT0xETUFTSyA9
IDIxDQogICAgK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEXzQgPSAweDAwDQogICAgK2NvbnN0
IF9USU1FX09PUCA9IDMNCiAgICArY29uc3QgX1JUTUdSUF9JUFY2X0lGSU5GTyA9IDB4ODAwDQog
ICAgK2NvbnN0IF9UQ0FfUk9PVF9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9fX1dfQ09OVElOVUVE
ID0gMHhmZmZmDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX0xBQkVMID0gMjYNCiAgICArY29uc3Qg
X0JQRl9KQSA9IDB4MDANCiAgICArY29uc3QgX19fTlJfbmFub3NsZWVwID0gMzUNCiAgICArY29u
c3QgX0JQRl9NQUpPUl9WRVJTSU9OID0gMQ0KICAgICtjb25zdCBfX19OUl9nZXRlZ2lkID0gMTA4
DQogICAgK2NvbnN0IF9QRl9JVUNWID0gMzINCiAgICArY29uc3QgX1BSX0NBUF9BTUJJRU5UX0xP
V0VSID0gMw0KICAgICtjb25zdCBfTUFQX05PUkVTRVJWRSA9IDB4MDQwMDANCiAgICArY29uc3Qg
X0lQT1BUX0VORCA9IF9JUE9QVF9FT0wNCiAgICArY29uc3QgX0lGRl9UQVAgPSAweDAwMDINCiAg
ICArY29uc3QgX19TWVNfVVNFUl9IID0gMQ0KICAgICtjb25zdCBfVFVOR0VUSUZGX3ZhbCA9IDIx
NDc3Njc1MDYNCiAgICArY29uc3QgX0FESl9NQVhFUlJPUiA9IDB4MDAwNA0KICAgICtjb25zdCBf
UlROTEdSUF9JUFY2X0lGSU5GTyA9IDEyDQogICAgK2NvbnN0IF9GU19ESVJUWV9GTCA9IDB4MDAw
MDAxMDANCiAgICArY29uc3QgX19fTlJfZmFsbG9jYXRlID0gMjg1DQogICAgK2NvbnN0IF9fX05S
X3NldF9tZW1wb2xpY3kgPSAyMzgNCiAgICArY29uc3QgX19QT1NJWF9USFJFQURfUk9CVVNUX1BS
SU9fSU5IRVJJVCA9IDIwMDgwOQ0KICAgICtjb25zdCBfUlRBX01GQ19TVEFUUyA9IDE3DQogICAg
K2NvbnN0IF9DWDg2X1JDUl9CQVNFID0gMHhkYw0KICAgICtjb25zdCBfUlRQUk9UX0tFUk5FTCA9
IDINCiAgICArY29uc3QgX0lDTVA2X0ZJTFRFUl9CTE9DS09USEVSUyA9IDMNCiAgICArY29uc3Qg
X1BSX0ZQRU1VX05PUFJJTlQgPSAxDQogICAgK2NvbnN0IF9fX0ZMVF9NQU5UX0RJR19fID0gMjQN
CiAgICArY29uc3QgX19fTlJfZnN0YXQgPSA1DQogICAgK2NvbnN0IF9QVFJBQ0VfT19FWElUS0lM
TCA9IDEwNDg1NzYNCiAgICArY29uc3QgX0lGTEFfQlJfTUNBU1RfTEFTVF9NRU1CRVJfSU5UVkwg
PSAzMA0KICAgICtjb25zdCBfTkVUTElOS19JTkVUX0RJQUcgPSBfTkVUTElOS19TT0NLX0RJQUcN
CiAgICArY29uc3QgX05FVExJTktfU0NTSVRSQU5TUE9SVCA9IDE4DQogICAgK2NvbnN0IF9fX05S
X3NlbGVjdCA9IDIzDQogICAgK2NvbnN0IF9JRkxBX1NUQVRTX0xJTktfT0ZGTE9BRF9YU1RBVFMg
PSA0DQogICAgK2NvbnN0IF9fX05SX3BpcGUgPSAyMg0KICAgICtjb25zdCBfU0FfTk9DTERXQUlU
ID0gMg0KICAgICtjb25zdCBfU1lTX2tleGVjX2ZpbGVfbG9hZCA9IF9fX05SX2tleGVjX2ZpbGVf
bG9hZA0KICAgICtjb25zdCBfQjIwMCA9IDAwMDAwMDYNCiAgICArY29uc3QgX19QT1NJWF9ERUxB
WVRJTUVSX01BWCA9IDMyDQogICAgK2NvbnN0IF9QUl9TRVRfRU5ESUFOID0gMjANCiAgICArY29u
c3QgX1NZU19lcG9sbF9wd2FpdCA9IF9fX05SX2Vwb2xsX3B3YWl0DQogICAgK2NvbnN0IF9FVEhf
UF9MT0NBTFRBTEsgPSAweDAwMDkNCiAgICArY29uc3QgX1BSSWlGQVNUOCA9ICJpIg0KICAgICtj
b25zdCBfU0VFS19FTkQgPSAyDQogICAgK2NvbnN0IF9UQ0FfQ0hBSU4gPSAxMQ0KICAgICtjb25z
dCBfU1lTX3RpbWVyX2RlbGV0ZSA9IF9fX05SX3RpbWVyX2RlbGV0ZQ0KICAgICtjb25zdCBfUkxJ
TV9JTkZJTklUWSA9IDB4ZmZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfX19PRkZfVF9NQVRD
SEVTX09GRjY0X1QgPSAxDQogICAgK2NvbnN0IF9SVE5MR1JQX1BIT05FVF9ST1VURSA9IDIyDQog
ICAgK2NvbnN0IF9fSVNPQzExX1NPVVJDRSA9IDENCiAgICArY29uc3QgX1NJR1hDUFUgPSAyNA0K
ICAgICtjb25zdCBfUlROX05BVCA9IDEwDQogICAgK2NvbnN0IF9JRkxBX1RVTl9HUk9VUCA9IDIN
CiAgICArY29uc3QgX19fTERCTF9NQVhfXyA9IDEuMQ0KICAgICtjb25zdCBfVUlOVF9MRUFTVDhf
TUFYID0gKDI1NSkNCiAgICArY29uc3QgX0lDTVA2X0RTVF9VTlJFQUNIX0FERFIgPSAzDQogICAg
K2NvbnN0IF9QT1NJWF9GQURWX1NFUVVFTlRJQUwgPSAyDQogICAgK2NvbnN0IF9SVE5fWFJFU09M
VkUgPSAxMQ0KICAgICtjb25zdCBfdW5peCA9IDENCiAgICArY29uc3QgX1NJWkVfTUFYID0gKDE4
NDQ2NzQ0MDczNzA5NTUxNjE1KQ0KICAgICtjb25zdCBfU1RBX0RFTCA9IDB4MDAyMA0KICAgICtj
b25zdCBfTUJfTEVOX01BWCA9IDE2DQogICAgK2NvbnN0IF9DSUJBVUQgPSAwMDIwMDM2MDAwMDAN
CiAgICArY29uc3QgX19fY2xvY2tpZF90X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9fQ1NfUE9T
SVhfVjdfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUyA9IDExNDcNCiAgICArY29uc3QgX0FJX05VTUVS
SUNIT1NUID0gMHgwMDA0DQogICAgK2NvbnN0IF9SRV9EVVBfTUFYID0gKDB4N2ZmZikNCiAgICAr
Y29uc3QgX0lGTEFfVkZfUkFURSA9IDYNCiAgICArY29uc3QgX1BSSVgzMiA9ICJYIg0KICAgICtj
b25zdCBfSVBUT1NfRUNOX0NFID0gMHgwMw0KICAgICtjb25zdCBfSUZMQV9CUl9QUklPUklUWSA9
IDYNCiAgICArY29uc3QgX0lQVE9TX1BSRUNfTkVUQ09OVFJPTCA9IF9JUFRPU19DTEFTU19DUzcN
CiAgICArY29uc3QgX19fTlJfZ2V0cnVzYWdlID0gOTgNCiAgICArY29uc3QgX05VRF9SRUFDSEFC
TEUgPSAweDAyDQogICAgK2NvbnN0IF9fX05SX3VzZWxpYiA9IDEzNA0KICAgICtjb25zdCBfRVBP
TExXUk5PUk0gPSAyNTYNCiAgICArY29uc3QgX19fSUZMQV9NQVggPSA1Mg0KICAgICtjb25zdCBf
VENQX0xJTkdFUjIgPSA4DQogICAgK2NvbnN0IF9SVE5MR1JQX0lQVjRfUk9VVEUgPSA3DQogICAg
K2NvbnN0IF9fU0NfSU5UX01JTiA9IDEwNQ0KICAgICtjb25zdCBfRVRJTUUgPSA2Mg0KICAgICtj
b25zdCBfSUZMQV9IU1JfU0VRX05SID0gNQ0KICAgICtjb25zdCBfX1BPU0lYX1NZTUxJTktfTUFY
ID0gMjU1DQogICAgK2NvbnN0IF9JRkxBX1BPUlRfUkVTUE9OU0UgPSA3DQogICAgK2NvbnN0IF9J
RkxBX0JSX01DQVNUX1JPVVRFUiA9IDIyDQogICAgK2NvbnN0IF9UQ0FfSFdfT0ZGTE9BRCA9IDEy
DQogICAgK2NvbnN0IF9JRkxBX0lORVQ2X1RPS0VOID0gNw0KICAgICtjb25zdCBfVElPQ1BLVF9G
TFVTSFJFQUQgPSAxDQogICAgK2NvbnN0IF9TWVNfc2V0X3RpZF9hZGRyZXNzID0gX19fTlJfc2V0
X3RpZF9hZGRyZXNzDQogICAgK2NvbnN0IF9CMTkyMDAgPSAwMDAwMDE2DQogICAgK2NvbnN0IF9J
UF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwgPSAxDQogICAgK2NvbnN0IF9fX1NJR19BVE9NSUNfTUlO
X18gPSAoLV9fX1NJR19BVE9NSUNfTUFYX18gLSAxKQ0KICAgICtjb25zdCBfSUZMQV9CT05EX01J
Tl9MSU5LUyA9IDE4DQogICAgK2NvbnN0IF9JUFBST1RPX1JBVyA9IDI1NQ0KICAgICtjb25zdCBf
U1lTX2dldHJlc3VpZCA9IF9fX05SX2dldHJlc3VpZA0KICAgICtjb25zdCBfUlRBX1NSQyA9IDIN
CiAgICArY29uc3QgX0lQVjZfUE1UVURJU0NfRE8gPSAyDQogICAgK2NvbnN0IF9SVF9TQ09QRV9M
SU5LID0gMjUzDQogICAgK2NvbnN0IF9TWVNfc2NoZWRfeWllbGQgPSBfX19OUl9zY2hlZF95aWVs
ZA0KICAgICtjb25zdCBfU0FfTk9DTERTVE9QID0gMQ0KICAgICtjb25zdCBfTkxBX0ZfTkVTVEVE
ID0gKDEgPDwgMTUpDQogICAgK2NvbnN0IF9FTkFWQUlMID0gMTE5DQogICAgK2NvbnN0IF9FVEhf
UF9FUlNQQU4yID0gMHgyMkVCDQogICAgK2NvbnN0IF9USU9DU0VSX1RFTVQgPSAweDAxDQogICAg
K2NvbnN0IF9JRkxBX0JSUE9SVF9NVUxUSUNBU1RfUk9VVEVSID0gMjUNCiAgICArY29uc3QgX09Q
T1NUID0gMDAwMDAwMQ0KICAgICtjb25zdCBfV19PSyA9IDINCiAgICArY29uc3QgX0lQT1BUX1JB
ID0gMTQ4DQogICAgK2NvbnN0IF9FVEhFUlRZUEVfSVBYID0gMHg4MTM3DQogICAgK2NvbnN0IF9S
VE1fR0VUTkVJR0hUQkwgPSA2Ng0KICAgICtjb25zdCBfX1NDX1Y2X0xQNjRfT0ZGNjQgPSAxNzgN
CiAgICArY29uc3QgX0RFTEFZVElNRVJfTUFYID0gMjE0NzQ4MzY0Nw0KICAgICtjb25zdCBfUFJf
R0VUX05BTUUgPSAxNg0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfQ09TVCA9IDMNCiAgICArY29u
c3QgX1NJT0NHSUZCUiA9IDB4ODk0MA0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfSU5DX1NDSSA9
IDkNCiAgICArY29uc3QgX0lOX09ORVNIT1QgPSAweDgwMDAwMDAwDQogICAgK2NvbnN0IF9TWVNf
YWRqdGltZXggPSBfX19OUl9hZGp0aW1leA0KICAgICtjb25zdCBfSUxMX0NPUFJPQyA9IDcNCiAg
ICArY29uc3QgX0lQT1BUX1JSID0gNw0KICAgICtjb25zdCBfUFJfU1ZFX1NFVF9WTF9PTkVYRUMg
PSAoMSA8PCAxOCkNCiAgICArY29uc3QgX1NZU19wd3JpdGU2NCA9IF9fX05SX3B3cml0ZTY0DQog
ICAgK2NvbnN0IF9QUl9TRVRfTkFNRSA9IDE1DQogICAgK2NvbnN0IF9WUVVJVCA9IDENCiAgICAr
Y29uc3QgX0ZTX1hGTEFHX0VYVFNaSU5IRVJJVCA9IDB4MDAwMDEwMDANCiAgICArY29uc3QgX0lG
TEFfUE9SVF9JTlNUQU5DRV9VVUlEID0gNA0KICAgICtjb25zdCBfSVBUT1NfQ0xBU1NfQ1MzID0g
MHg2MA0KICAgICtjb25zdCBfX19QVFJESUZGX1dJRFRIX18gPSA2NA0KICAgICtjb25zdCBfRVRI
X1BfRURTQSA9IDB4REFEQQ0KICAgICtjb25zdCBfU1lTX3NldGl0aW1lciA9IF9fX05SX3NldGl0
aW1lcg0KICAgICtjb25zdCBfX19GTFQzMlhfRVBTSUxPTl9fID0gMS4xDQogICAgK2NvbnN0IF9f
X0ZMVDEyOF9NSU5fRVhQX18gPSAoLTE2MzgxKQ0KICAgICtjb25zdCBfX19OUl9zZXRmc3VpZCA9
IDEyMg0KICAgICtjb25zdCBfSVBUT1NfQ0xBU1NfQ1M2ID0gMHhjMA0KICAgICtjb25zdCBfSUZM
QV9CUlBPUlRfQlJJREdFX0lEID0gMTQNCiAgICArY29uc3QgX1JUTV9ERUxORVRDT05GID0gODEN
CiAgICArY29uc3QgX0lDTVA2X1RJTUVfRVhDRUVERUQgPSAzDQogICAgK2NvbnN0IF9fX05SX3Nl
dGZzZ2lkID0gMTIzDQogICAgK2NvbnN0IF9TSU9DREVMRExDSSA9IDB4ODk4MQ0KICAgICtjb25z
dCBfSVBQT1JUX1RUWUxJTksgPSA4Nw0KICAgICtjb25zdCBfU0lPQ0dBUlAgPSAweDg5NTQNCiAg
ICArY29uc3QgX1JURl9ERUZBVUxUID0gMHgwMDAxMDAwMA0KICAgICtjb25zdCBfU1lTX21xX29w
ZW4gPSBfX19OUl9tcV9vcGVuDQogICAgK2NvbnN0IF9TWVNfY2xvY2tfZ2V0cmVzID0gX19fTlJf
Y2xvY2tfZ2V0cmVzDQogICAgK2NvbnN0IF9NUV9QUklPX01BWCA9IDMyNzY4DQogICAgK2NvbnN0
IF9fU0NfQ0hBUl9NQVggPSAxMDINCiAgICArY29uc3QgX0lQVjZfQUREX01FTUJFUlNISVAgPSBf
SVBWNl9KT0lOX0dST1VQDQogICAgK2NvbnN0IF9fU1RBVF9WRVJfTElOVVggPSAxDQogICAgK2Nv
bnN0IF9JRkxBX0JSUE9SVF9MRUFSTklOR19TWU5DID0gMTENCiAgICArY29uc3QgX0VOT1ROQU0g
PSAxMTgNCiAgICArY29uc3QgX1RJT0NQS1RfRkxVU0hXUklURSA9IDINCiAgICArY29uc3QgX01B
UF9IVUdFVExCID0gMHg0MDAwMA0KICAgICtjb25zdCBfSEFWRV9GQUNDRVNTQVQgPSAxDQogICAg
K2NvbnN0IF9fX0RCTF9NSU5fRVhQX18gPSAoLTEwMjEpDQogICAgK2NvbnN0IF9YODZfQ1I0X1BD
SURFX0JJVCA9IDE3DQogICAgK2NvbnN0IF9TQ05pTEVBU1Q4ID0gImhoaSINCiAgICArY29uc3Qg
X0lQVjZfUE1UVURJU0NfUFJPQkUgPSAzDQogICAgK2NvbnN0IF9JUFBPUlRfRklOR0VSID0gNzkN
CiAgICArY29uc3QgX1BPUlRfVVVJRF9NQVggPSAxNg0KICAgICtjb25zdCBfTE9OR19MT05HX01B
WCA9IF9fX0xPTkdfTE9OR19NQVhfXw0KICAgICtjb25zdCBfSU5UOF9NSU4gPSAoLTEyOCkNCiAg
ICArY29uc3QgX19fTlJfd3JpdGUgPSAxDQogICAgK2NvbnN0IF9fX1NfSUZCTEsgPSAwMDYwMDAw
DQogICAgK2NvbnN0IF9TQ0hFRF9GSUZPID0gMQ0KICAgICtjb25zdCBfX1BBVEhfSEVRVUlWID0g
Ii9ldGMvaG9zdHMuZXF1aXYiDQogICAgK2NvbnN0IF9CUEZfTVNIID0gMHhhMA0KICAgICtjb25z
dCBfX1BDX1NZTkNfSU8gPSA5DQogICAgK2NvbnN0IF9fU0NfQURWSVNPUllfSU5GTyA9IDEzMg0K
ICAgICtjb25zdCBfX19OUl9yZWN2bXNnID0gNDcNCiAgICArY29uc3QgX0ZBU1lOQyA9IF9PX0FT
WU5DDQogICAgK2NvbnN0IF9SVE1HUlBfSVBWNl9NUk9VVEUgPSAweDIwMA0KICAgICtjb25zdCBf
U1lTX2lvX3BnZXRldmVudHMgPSBfX19OUl9pb19wZ2V0ZXZlbnRzDQogICAgK2NvbnN0IF9IQVZF
X1NZTkNfQk9PTF9DT01QQVJFX0FORF9TV0FQXzQgPSAxDQogICAgK2NvbnN0IF9FUE9MTF9DVExf
QUREID0gMQ0KICAgICtjb25zdCBfVVNIUlRfTUFYID0gKF9TSFJUX01BWCAqIDIgKyAxKQ0KICAg
ICtjb25zdCBfX1NDX1RSQUNFID0gMTgxDQogICAgK2NvbnN0IF9QVFJBQ0VfU0lOR0xFU1RFUCA9
IDkNCiAgICArY29uc3QgX0lGTEFfTElOSyA9IDUNCiAgICArY29uc3QgX05EVFBBX1JFVFJBTlNf
VElNRSA9IDUNCiAgICArY29uc3QgX0hBVkVfU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfOCA9
IDENCiAgICArY29uc3QgX1JUTV9HRVRURklMVEVSID0gNDYNCiAgICArY29uc3QgX1NZU19tc2dy
Y3YgPSBfX19OUl9tc2dyY3YNCiAgICArY29uc3QgX19fTlJfbXNnY3RsID0gNzENCiAgICArY29u
c3QgX0hBVkVfUkVOQU1FQVQgPSAxDQogICAgK2NvbnN0IF9JRkZfTkFQSV9GUkFHUyA9IDB4MDAy
MA0KICAgICtjb25zdCBfSUZMQV9YRFBfQVRUQUNIRUQgPSAyDQogICAgK2NvbnN0IF9TWVNfZXBv
bGxfY3JlYXRlID0gX19fTlJfZXBvbGxfY3JlYXRlDQogICAgK2NvbnN0IF9JRkxBX1ZGX1NUQVRT
X0JST0FEQ0FTVCA9IDQNCiAgICArY29uc3QgX1RDUF9NRDVTSUdfRkxBR19QUkVGSVggPSAxDQog
ICAgK2NvbnN0IF9JRkxBX0JPTkRfQURfVVNFUl9QT1JUX0tFWSA9IDI1DQogICAgK2NvbnN0IF9B
UlBIUkRfQURBUFQgPSAyNjQNCiAgICArY29uc3QgX1RVTkFUVEFDSEZJTFRFUl92YWwgPSAxMDc0
ODEyMTE3DQogICAgK2NvbnN0IF9UQ1BfTUFYX1dJTlNISUZUID0gMTQNCiAgICArY29uc3QgX0lQ
UFJPVE9fSUdNUCA9IDINCiAgICArY29uc3QgX0lQX01BWF9NRU1CRVJTSElQUyA9IDIwDQogICAg
K2NvbnN0IF9JRkxBX0JSUE9SVF9CQUNLVVBfUE9SVCA9IDM0DQogICAgK2NvbnN0IF9SVE1HUlBf
REVDbmV0X0lGQUREUiA9IDB4MTAwMA0KICAgICtjb25zdCBfTUFEVl9LRUVQT05GT1JLID0gMTkN
CiAgICArY29uc3QgX0FGX0FYMjUgPSBfUEZfQVgyNQ0KICAgICtjb25zdCBfSU5UUFRSX01BWCA9
ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQ0KICAgICtjb25zdCBfQVJQSFJEX0VVSTY0ID0gMjcNCiAg
ICArY29uc3QgX1JUQV9HQVRFV0FZID0gNQ0KICAgICtjb25zdCBfU0NOdTE2ID0gImh1Ig0KICAg
ICtjb25zdCBfX19OUl90cnVuY2F0ZSA9IDc2DQogICAgK2NvbnN0IF9fX05SX2dldHJsaW1pdCA9
IDk3DQogICAgK2NvbnN0IF9fUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRCA9IDANCiAgICArY29uc3Qg
X19fTlJfcHJlYWQ2NCA9IDE3DQogICAgK2NvbnN0IF9QUl9TRVRfTU1fU1RBUlRfQlJLID0gNg0K
ICAgICtjb25zdCBfUlRBWF9MT0NLID0gMQ0KICAgICtjb25zdCBfU1lTX2dldGRlbnRzID0gX19f
TlJfZ2V0ZGVudHMNCiAgICArY29uc3QgX1NPX0RPTUFJTiA9IDM5DQogICAgK2NvbnN0IF9TX0lT
VlRYID0gX19fU19JU1ZUWA0KICAgICtjb25zdCBfUFRSQUNFX1BPS0VEQVRBID0gNQ0KICAgICtj
b25zdCBfUEFDS0VUX09SSUdERVYgPSA5DQogICAgK2NvbnN0IF9JUE9QVF9UUyA9IDY4DQogICAg
K2NvbnN0IF9fX0lGTEFfT0ZGTE9BRF9YU1RBVFNfTUFYID0gMg0KICAgICtjb25zdCBfX1NDX1NI
UlRfTUFYID0gMTEzDQogICAgK2NvbnN0IF9SRUdfUklQID0gMTYNCiAgICArY29uc3QgX19fRkxU
NjRYX01BWF9fID0gMS4xDQogICAgK2NvbnN0IF9JRkZfQUxMTVVMVEkgPSA1MTINCiAgICArY29u
c3QgX1NBX1NJR0lORk8gPSA0DQogICAgK2NvbnN0IF9SRUdfQ1NHU0ZTID0gMTgNCiAgICArY29u
c3QgX0lGTEFfVlhMQU5fR0JQID0gMjMNCiAgICArY29uc3QgX19USU1FX0ggPSAxDQogICAgK2Nv
bnN0IF9TWVNfZ2V0dWlkID0gX19fTlJfZ2V0dWlkDQogICAgK2NvbnN0IF9JUFY2X1BNVFVESVND
X1dBTlQgPSAxDQogICAgK2NvbnN0IF9fU0NfMl9QQlNfTUVTU0FHRSA9IDE3MQ0KICAgICtjb25z
dCBfX19OUl9tZW1iYXJyaWVyID0gMzI0DQogICAgK2NvbnN0IF9TWVNfd2FpdDQgPSBfX19OUl93
YWl0NA0KICAgICtjb25zdCBfTE9OR19XSURUSCA9IF9fX1dPUkRTSVpFDQogICAgK2NvbnN0IF9C
UEZfSyA9IDB4MDANCiAgICArY29uc3QgX0VOT1RVTklRID0gNzYNCiAgICArY29uc3QgX05EX09Q
VF9IT01FX0FHRU5UX0lORk8gPSA4DQogICAgK2NvbnN0IF9OSV9OQU1FUkVRRCA9IDgNCiAgICAr
Y29uc3QgX19fcGljX18gPSAyDQogICAgK2NvbnN0IF9OTE1fRl9EVU1QX0lOVFIgPSAweDEwDQog
ICAgK2NvbnN0IF9GQUxMT0NfRkxfVU5TSEFSRV9SQU5HRSA9IDB4NDANCiAgICArY29uc3QgX0xJ
TlVYX1JFQk9PVF9DTURfUE9XRVJfT0ZGID0gMHg0MzIxRkVEQw0KICAgICtjb25zdCBfX19JRkxB
X1ZSRl9NQVggPSAyDQogICAgK2NvbnN0IF9JRkxBX0lORVQ2X0FERFJfR0VOX01PREUgPSA4DQog
ICAgK2NvbnN0IF9FTk9TUiA9IDYzDQogICAgK2NvbnN0IF9QUl9HRVRfVElNSU5HID0gMTMNCiAg
ICArY29uc3QgX19QT1NJWF9DX1NPVVJDRSA9IDIwMDgwOQ0KICAgICtjb25zdCBfVFVOU0VUVFhG
SUxURVJfdmFsID0gMTA3NDAyNTY4MQ0KICAgICtjb25zdCBfUFJfQ0FQX0FNQklFTlRfSVNfU0VU
ID0gMQ0KICAgICtjb25zdCBfSVRJTUVSX1BST0YgPSAyDQogICAgK2NvbnN0IF9fX1NJWkVPRl9Q
VEhSRUFEX01VVEVYQVRUUl9UID0gNA0KICAgICtjb25zdCBfU1lTX25hbWVfdG9faGFuZGxlX2F0
ID0gX19fTlJfbmFtZV90b19oYW5kbGVfYXQNCiAgICArY29uc3QgX0I1NzYwMDAgPSAwMDEwMDA2
DQogICAgK2NvbnN0IF9TRUVLX1NFVCA9IDANCiAgICArY29uc3QgX0JQRl9PUiA9IDB4NDANCiAg
ICArY29uc3QgX1BGX1JPVVRFID0gX1BGX05FVExJTksNCiAgICArY29uc3QgX19fRkxUNjRfTUlO
X0VYUF9fID0gKC0xMDIxKQ0KICAgICtjb25zdCBfSU5fTUFTS19BREQgPSAweDIwMDAwMDAwDQog
ICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTExNg0KICAgICtj
b25zdCBfVENQX01BWFNFRyA9IDINCiAgICArY29uc3QgX05fSVJEQSA9IDExDQogICAgK2NvbnN0
IF9JUFY2X1JUSERSX1NUUklDVCA9IDENCiAgICArY29uc3QgX1BBQ0tFVF9SRUNWX09VVFBVVCA9
IDMNCiAgICArY29uc3QgX01BRFZfRE9OVE5FRUQgPSA0DQogICAgK2NvbnN0IF9ORF9SRURJUkVD
VCA9IDEzNw0KICAgICtjb25zdCBfX19zaWdpbmZvX3RfZGVmaW5lZCA9IDENCiAgICArY29uc3Qg
X19fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NLX0ZSRUUgPSAyDQogICAgK2NvbnN0IF9SVEFYX1FV
SUNLQUNLID0gMTUNCiAgICArY29uc3QgX19fRkxUMzJfTUFYXzEwX0VYUF9fID0gMzgNCiAgICAr
Y29uc3QgX0JQRl9NVUwgPSAweDIwDQogICAgK2NvbnN0IF9TWVNfZXBvbGxfd2FpdF9vbGQgPSBf
X19OUl9lcG9sbF93YWl0X29sZA0KICAgICtjb25zdCBfX19JRkxBX0lQVkxBTl9NQVggPSAzDQog
ICAgK2NvbnN0IF9JUF9QTVRVRElTQ19QUk9CRSA9IDMNCiAgICArY29uc3QgX1NZU19zeXNmcyA9
IF9fX05SX3N5c2ZzDQogICAgK2NvbnN0IF9fX09QVElNSVpFX18gPSAxDQogICAgK2NvbnN0IF9J
UFRPU19QUkVDX0lOVEVSTkVUQ09OVFJPTCA9IF9JUFRPU19DTEFTU19DUzYNCiAgICArY29uc3Qg
X0hBVkVfQVNJTkwgPSAxDQogICAgK2NvbnN0IF9JUFY2X1VOSUNBU1RfSUYgPSA3Ng0KICAgICtj
b25zdCBfTkxNX0ZfQVRPTUlDID0gMHg0MDANCiAgICArY29uc3QgX0ZTX1hGTEFHX05PU1lNTElO
S1MgPSAweDAwMDAwNDAwDQogICAgK2NvbnN0IF9GX0xPQ0sgPSAxDQogICAgK2NvbnN0IF9JQ01Q
Nl9QQVJBTVBST0JfSEVBREVSID0gMA0KICAgICtjb25zdCBfRVRIX1BfSUVFRTgwMjE1NCA9IDB4
MDBGNg0KICAgICtjb25zdCBfU0lPQ0dJRkhXQUREUiA9IDB4ODkyNw0KICAgICtjb25zdCBfU1lT
X3NlbWdldCA9IF9fX05SX3NlbWdldA0KICAgICtjb25zdCBfX19QVEhSRUFEX01VVEVYX05VU0VS
U19BRlRFUl9LSU5EID0gMA0KICAgICtjb25zdCBfUFJfU0VUX01NX01BUF9TSVpFID0gMTUNCiAg
ICArY29uc3QgX1JUTl9CTEFDS0hPTEUgPSA2DQogICAgK2NvbnN0IF9TWVNfcGtleV9hbGxvYyA9
IF9fX05SX3BrZXlfYWxsb2MNCiAgICArY29uc3QgX0FGX0lORVQ2ID0gX1BGX0lORVQ2DQogICAg
K2NvbnN0IF9OTEFfSERSTEVOX3ZhbCA9IDQNCiAgICArY29uc3QgX0hBVkVfUkVNT1ZFWEFUVFIg
PSAxDQogICAgK2NvbnN0IF9JQ01QNl9SUl9GTEFHU19TUEVDU0lURSA9IDB4MTANCiAgICArY29u
c3QgX19fTlJfc2V0bnMgPSAzMDgNCiAgICArY29uc3QgX19fV05PVEhSRUFEID0gMHgyMDAwMDAw
MA0KICAgICtjb25zdCBfRVRIX1BfTE9PUCA9IDB4MDA2MA0KICAgICtjb25zdCBfVkVPTCA9IDEx
DQogICAgK2NvbnN0IF9NU19OT0RFViA9IDQNCiAgICArY29uc3QgX1NPX1pFUk9DT1BZID0gNjAN
CiAgICArY29uc3QgX19fTlJfZ2V0cmFuZG9tID0gMzE4DQogICAgK2NvbnN0IF9SVEZfQUxMT05M
SU5LID0gMHgwMDAyMDAwMA0KICAgICtjb25zdCBfUlROTEdSUF9ERUNuZXRfUlVMRSA9IDE2DQog
ICAgK2NvbnN0IF9fX05SX21iaW5kID0gMjM3DQogICAgK2NvbnN0IF9NU19LRVJOTU9VTlQgPSA0
MTk0MzA0DQogICAgK2NvbnN0IF9JVUNMQyA9IDAwMDEwMDANCiAgICArY29uc3QgX0hBVkVfU0VN
X1RJTUVEV0FJVCA9IDENCiAgICArY29uc3QgX19fUFJFRklYX01BWCA9IDMNCiAgICArY29uc3Qg
X01BUF9TVEFDSyA9IDB4MjAwMDANCiAgICArY29uc3QgX1NZU19wZXJzb25hbGl0eSA9IF9fX05S
X3BlcnNvbmFsaXR5DQogICAgK2NvbnN0IF9fUE9TSVhfTU9OT1RPTklDX0NMT0NLID0gMA0KICAg
ICtjb25zdCBfVVRJTUVfT01JVCA9ICgoMSA8PCAzMCkgLSAyKQ0KICAgICtjb25zdCBfUFJJb0xF
QVNUOCA9ICJvIg0KICAgICtjb25zdCBfUFJfRlBfRVhDX0lOViA9IDB4MTAwMDAwDQogICAgK2Nv
bnN0IF9FVEhFUlRZUEVfVkxBTiA9IDB4ODEwMA0KICAgICtjb25zdCBfUlRQUk9UX0dBVEVEID0g
OA0KICAgICtjb25zdCBfTVNfTU9WRSA9IDgxOTINCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX0RF
U0lHTkFURURfUE9SVCA9IDE1DQogICAgK2NvbnN0IF9QUl9TRVRfVFNDID0gMjYNCiAgICArY29u
c3QgX19TVERDX1BSRURFRl9IID0gMQ0KICAgICtjb25zdCBfSUZGX0FVVE9NRURJQSA9IDE2Mzg0
DQogICAgK2NvbnN0IF9fX1VTRV9GT1JUSUZZX0xFVkVMID0gMA0KICAgICtjb25zdCBfRUJGT05U
ID0gNTkNCiAgICArY29uc3QgX19fTkRUQV9NQVggPSAxMA0KICAgICtjb25zdCBfX19TSVpFT0Zf
TE9OR19MT05HX18gPSA4DQogICAgK2NvbnN0IF9JUFY2X1BNVFVESVNDX0RPTlQgPSAwDQogICAg
K2NvbnN0IF9JUFZMQU5fTU9ERV9MM1MgPSAyDQogICAgK2NvbnN0IF9JRkxBX1RVTl9UWVBFID0g
Mw0KICAgICtjb25zdCBfT19DTE9FWEVDID0gX19fT19DTE9FWEVDDQogICAgK2NvbnN0IF9TS0Zf
QURfTUFSSyA9IDIwDQogICAgK2NvbnN0IF9fX0ZMVDY0WF9ERU5PUk1fTUlOX18gPSAxLjENCiAg
ICArY29uc3QgX0lGRl9TTEFWRSA9IDIwNDgNCiAgICArY29uc3QgX0RUX1JFRyA9IDgNCiAgICAr
Y29uc3QgX0ZBTExPQ19GTF9QVU5DSF9IT0xFID0gMHgwMg0KICAgICtjb25zdCBfQVJQSFJEX05F
VFJPTSA9IDANCiAgICArY29uc3QgX19fTERCTF9ESUdfXyA9IDE4DQogICAgK2NvbnN0IF9fU0Nf
VVNFUl9HUk9VUFMgPSAxNjYNCiAgICArY29uc3QgX19VTklTVERfSCA9IDENCiAgICArY29uc3Qg
X1RDUF9NQVhXSU4gPSA2NTUzNQ0KICAgICtjb25zdCBfRlNfTk9EVU1QX0ZMID0gMHgwMDAwMDA0
MA0KICAgICtjb25zdCBfVElPQ1NMQ0tUUk1JT1MgPSAweDU0NTcNCiAgICArY29uc3QgX19fTlJf
ZmluaXRfbW9kdWxlID0gMzEzDQogICAgK2NvbnN0IF9TS0ZfQURfTUFYID0gNjQNCiAgICArY29u
c3QgX1JFR19SMTQgPSA2DQogICAgK2NvbnN0IF9GQUxMT0NfRkxfWkVST19SQU5HRSA9IDB4MTAN
CiAgICArY29uc3QgX0lGTEFfQlJfR0NfVElNRVIgPSAxOQ0KICAgICtjb25zdCBfX19OUl9mYWR2
aXNlNjQgPSAyMjENCiAgICArY29uc3QgX09fTkRFTEFZID0gX09fTk9OQkxPQ0sNCiAgICArY29u
c3QgX0VQT0xMUFJJID0gMg0KICAgICtjb25zdCBfRUFJX0ZBSUwgPSAtNA0KICAgICtjb25zdCBf
X19nbGliY19jOTlfZmxleGFycl9hdmFpbGFibGUgPSAxDQogICAgK2NvbnN0IF9fX05SX2lvX3N1
Ym1pdCA9IDIwOQ0KICAgICtjb25zdCBfUlRBX1RUTF9QUk9QQUdBVEUgPSAyNg0KICAgICtjb25z
dCBfTl9TTVNCTE9DSyA9IDEyDQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX0NQVVRJTUUgPSAw
DQogICAgK2NvbnN0IF9UQ1BJX09QVF9TQUNLID0gMg0KICAgICtjb25zdCBfVElPQ0dFVEQgPSAw
eDU0MjQNCiAgICArY29uc3QgX0NMT05FX1NZU1ZTRU0gPSAweDAwMDQwMDAwDQogICAgK2NvbnN0
IF9ORVRMSU5LX1NFTElOVVggPSA3DQogICAgK2NvbnN0IF9DTE9DS19USFJFQURfQ1BVVElNRV9J
RCA9IDMNCiAgICArY29uc3QgX19fTlJfY2xvY2tfbmFub3NsZWVwID0gMjMwDQogICAgK2NvbnN0
IF9fU0NfQ0hBUl9CSVQgPSAxMDENCiAgICArY29uc3QgX1NBX1JFU0VUSEFORCA9IDB4ODAwMDAw
MDANCiAgICArY29uc3QgX0FESl9TVEFUVVMgPSAweDAwMTANCiAgICArY29uc3QgX1BSX1NFVF9Q
VFJBQ0VSID0gMHg1OTYxNmQ2MQ0KICAgICtjb25zdCBfUFJfU0VUX01NX0JSSyA9IDcNCiAgICAr
Y29uc3QgX19fSUxQMzJfT0ZGQklHX0NGTEFHUyA9ICItbTMyIC1EX0xBUkdFRklMRV9TT1VSQ0Ug
LURfRklMRV9PRkZTRVRfQklUUz02NCINCiAgICArY29uc3QgX1RDUF9GQVNUT1BFTl9LRVkgPSAz
Mw0KICAgICtjb25zdCBfX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUyA9IDIyDQogICAgK2NvbnN0
IF9SVE1HUlBfSVBWNl9ST1VURSA9IDB4NDAwDQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9QUklP
UklUWSA9IDINCiAgICArY29uc3QgX0IzMDAwMDAwID0gMDAxMDAxNQ0KICAgICtjb25zdCBfTVNf
TUdDX1ZBTCA9IDB4QzBFRDAwMDANCiAgICArY29uc3QgX0FESl9FU1RFUlJPUiA9IDB4MDAwOA0K
ICAgICtjb25zdCBfUlROSF9GX0xJTktET1dOID0gMTYNCiAgICArY29uc3QgX0VUSF9QX0ROQV9E
TCA9IDB4NjAwMQ0KICAgICtjb25zdCBfUFJfU0VUX1RJTUlORyA9IDE0DQogICAgK2NvbnN0IF9O
RVRMSU5LX0lTQ1NJID0gOA0KICAgICtjb25zdCBfX19OREFfTUFYID0gMTINCiAgICArY29uc3Qg
X19fTlJfc2V0Z3JvdXBzID0gMTE2DQogICAgK2NvbnN0IF9fWE9QRU5fTElNX0ggPSAxDQogICAg
K2NvbnN0IF9fX09SREVSX0JJR19FTkRJQU5fXyA9IDQzMjENCiAgICArY29uc3QgX0FSUEhSRF9Y
MjUgPSAyNzENCiAgICArY29uc3QgX0xMT05HX01BWCA9IF9fX0xPTkdfTE9OR19NQVhfXw0KICAg
ICtjb25zdCBfX0NTX0xGU19DRkxBR1MgPSAxMDAwDQogICAgK2NvbnN0IF9fU1lTQ0FMTF9IID0g
MQ0KICAgICtjb25zdCBfQVJQSFJEX0VDT05FVCA9IDc4Mg0KICAgICtjb25zdCBfX19HTlVDX1NU
RENfSU5MSU5FX18gPSAxDQogICAgK2NvbnN0IF9NU19QUklWQVRFID0gMjYyMTQ0DQogICAgK2Nv
bnN0IF9NQUNWTEFOX01BQ0FERFJfREVMID0gMQ0KICAgICtjb25zdCBfU0NIRURfUkVTRVRfT05f
Rk9SSyA9IDB4NDAwMDAwMDANCiAgICArY29uc3QgX1BPUlRfUFJPRklMRV9SRVNQT05TRV9TVUND
RVNTID0gMjU2DQogICAgK2NvbnN0IF9QUl9HRVRfRFVNUEFCTEUgPSAzDQogICAgK2NvbnN0IF9O
REFfVU5TUEVDID0gMA0KICAgICtjb25zdCBfX1NDX1JFX0RVUF9NQVggPSA0NA0KICAgICtjb25z
dCBfSE9TVF9OT1RfRk9VTkQgPSAxDQogICAgK2NvbnN0IF9TWVNfcHJlYWR2ID0gX19fTlJfcHJl
YWR2DQogICAgK2NvbnN0IF9NT0RfTUFYRVJST1IgPSBfQURKX01BWEVSUk9SDQogICAgK2NvbnN0
IF9PX0RJUkVDVCA9IF9fX09fRElSRUNUDQogICAgK2NvbnN0IF9JRkxBX0JPTkRfQUxMX1NMQVZF
U19BQ1RJVkUgPSAxNw0KICAgICtjb25zdCBfX1NDX1BJSV9JTlRFUk5FVCA9IDU2DQogICAgK2Nv
bnN0IF9UVU5TRVRTTkRCVUZfdmFsID0gMTA3NDAyNTY4NA0KICAgICtjb25zdCBfUlROTEdSUF9J
UFY2X0lGQUREUiA9IDkNCiAgICArY29uc3QgX1NUQVRYX05MSU5LID0gMHgwMDA0DQogICAgK2Nv
bnN0IF9fX0lGTEFfUE9SVF9NQVggPSA4DQogICAgK2NvbnN0IF9CVVNfQURSRVJSID0gMg0KICAg
ICtjb25zdCBfUlRNX05FV0FERFIgPSAyMA0KICAgICtjb25zdCBfVElPQ01JV0FJVCA9IDB4NTQ1
Qw0KICAgICtjb25zdCBfUlRNX0RFTE5TSUQgPSA4OQ0KICAgICtjb25zdCBfSEFWRV9TWVNfU1lT
SU5GT19IID0gMQ0KICAgICtjb25zdCBfX19OUl9zdGF0ID0gNA0KICAgICtjb25zdCBfU1BMSUNF
X0ZfTU9SRSA9IDQNCiAgICArY29uc3QgX0lGQV9GX01DQVVUT0pPSU4gPSAweDQwMA0KICAgICtj
b25zdCBfU1lTX2lvcHJpb19nZXQgPSBfX19OUl9pb3ByaW9fZ2V0DQogICAgK2NvbnN0IF9IQVZF
X0RMX0lURVJBVEVfUEhEUiA9IDENCiAgICArY29uc3QgX19fSUZMQV9WRl9TVEFUU19NQVggPSA5
DQogICAgK2NvbnN0IF9TWVNfaW5pdF9tb2R1bGUgPSBfX19OUl9pbml0X21vZHVsZQ0KICAgICtj
b25zdCBfUlRNX0dFVEFOWUNBU1QgPSA2Mg0KICAgICtjb25zdCBfX1BPU0lYX01RX09QRU5fTUFY
ID0gOA0KICAgICtjb25zdCBfU1lTX2xnZXR4YXR0ciA9IF9fX05SX2xnZXR4YXR0cg0KICAgICtj
b25zdCBfU1lTX3JtZGlyID0gX19fTlJfcm1kaXINCiAgICArY29uc3QgX0VUSEVSVFlQRV9BQVJQ
ID0gMHg4MEYzDQogICAgK2NvbnN0IF9QQUNLQUdFX1RBUk5BTUUgPSAibGliZ28iDQogICAgK2Nv
bnN0IF9JTlRfTEVBU1Q4X01BWCA9ICgxMjcpDQogICAgK2NvbnN0IF9JUFRPU19QUkVDX1JPVVRJ
TkUgPSBfSVBUT1NfQ0xBU1NfQ1MwDQogICAgK2NvbnN0IF9JRkFfRl9PUFRJTUlTVElDID0gMHgw
NA0KICAgICtjb25zdCBfTkRUUEFfVU5TUEVDID0gMA0KICAgICtjb25zdCBfX19OUl9wc2VsZWN0
NiA9IDI3MA0KICAgICtjb25zdCBfRl9HRVRTSUcgPSBfX19GX0dFVFNJRw0KICAgICtjb25zdCBf
U09fV0lGSV9TVEFUVVMgPSA0MQ0KICAgICtjb25zdCBfU19JV09USCA9IChfU19JV0dSUCA+PiAz
KQ0KICAgICtjb25zdCBfSU5QQ0sgPSAwMDAwMDIwDQogICAgK2NvbnN0IF9ORFRQQV9BUFBfUFJP
QkVTID0gOQ0KICAgICtjb25zdCBfX19PX0xBUkdFRklMRSA9IDANCiAgICArY29uc3QgX1BPUlRf
VkRQX1JFU1BPTlNFX1ZUSURfVkVSU0lPTl9WSU9BTFRJT04gPSA1DQogICAgK2NvbnN0IF9fX05S
X3NldHhhdHRyID0gMTg4DQogICAgK2NvbnN0IF9fX0ZMVDMyX0hBU19JTkZJTklUWV9fID0gMQ0K
ICAgICtjb25zdCBfX0NTX1BPU0lYX1Y2X0xQQklHX09GRkJJR19MREZMQUdTID0gMTEyOQ0KICAg
ICtjb25zdCBfUFJfR0VUX1RTQyA9IDI1DQogICAgK2NvbnN0IF9SVE1fR0VUTkVJR0ggPSAzMA0K
ICAgICtjb25zdCBfUFRSQUNFX1NFVE9QVElPTlMgPSAxNjg5Ng0KICAgICtjb25zdCBfX19OUl9l
cG9sbF9jcmVhdGUgPSAyMTMNCiAgICArY29uc3QgX0lQVE9TX1JFTElBQklMSVRZID0gMHgwNA0K
ICAgICtjb25zdCBfQVJQSFJEX0ZSQUQgPSA3NzANCiAgICArY29uc3QgX1NJT0NTSUZCUkRBRERS
ID0gMHg4OTFhDQogICAgK2NvbnN0IF9fX1VJTlRQVFJfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZm
ZmYNCiAgICArY29uc3QgX19fTlJfY2hvd24gPSA5Mg0KICAgICtjb25zdCBfX19OUl9mYW5vdGlm
eV9pbml0ID0gMzAwDQogICAgK2NvbnN0IF9BVF9OT19BVVRPTU9VTlQgPSAweDgwMA0KICAgICtj
b25zdCBfX19OUl9lcG9sbF9jcmVhdGUxID0gMjkxDQogICAgK2NvbnN0IF9TWVNfc2V0cmVzZ2lk
ID0gX19fTlJfc2V0cmVzZ2lkDQogICAgK2NvbnN0IF9OX1BST0ZJQlVTX0ZETCA9IDEwDQogICAg
K2NvbnN0IF9CUEZfWE9SID0gMHhhMA0KICAgICtjb25zdCBfSUNNUDZfUlJfRkxBR1NfUkVRUkVT
VUxUID0gMHg0MA0KICAgICtjb25zdCBfSUZMQV9JUE9JQl9NT0RFID0gMg0KICAgICtjb25zdCBf
TUFQX1NIQVJFRF9WQUxJREFURSA9IDB4MDMNCiAgICArY29uc3QgX1NZU19xdWVyeV9tb2R1bGUg
PSBfX19OUl9xdWVyeV9tb2R1bGUNCiAgICArY29uc3QgX1NZU190aW1lcl9nZXRvdmVycnVuID0g
X19fTlJfdGltZXJfZ2V0b3ZlcnJ1bg0KICAgICtjb25zdCBfX19OUl9mcmVtb3ZleGF0dHIgPSAx
OTkNCiAgICArY29uc3QgX1NJWkVfV0lEVEggPSBfX19XT1JEU0laRQ0KICAgICtjb25zdCBfSUZB
X0ZfU0VDT05EQVJZID0gMHgwMQ0KICAgICtjb25zdCBfX1NDX0pPQl9DT05UUk9MID0gNw0KICAg
ICtjb25zdCBfX19OUl9tb3ZlX3BhZ2VzID0gMjc5DQogICAgK2NvbnN0IF9JRkxBX0NBUlJJRVJf
Q0hBTkdFUyA9IDM1DQogICAgK2NvbnN0IF9JTkVUNl9BRERSU1RSTEVOID0gNDYNCiAgICArY29u
c3QgX0lGTEFfSVBPSUJfUEtFWSA9IDENCiAgICArY29uc3QgX0lQUFJPVE9fRENDUCA9IDMzDQog
ICAgK2NvbnN0IF9TX0lSR1JQID0gKF9TX0lSVVNSID4+IDMpDQogICAgK2NvbnN0IF9TT0xfSVJE
QSA9IDI2Ng0KICAgICtjb25zdCBfSEFWRV9VTlNIQVJFID0gMQ0KICAgICtjb25zdCBfU1RBVFhf
QVRUUl9JTU1VVEFCTEUgPSAweDAwMTANCiAgICArY29uc3QgX19TQ19GU1lOQyA9IDE1DQogICAg
K2NvbnN0IF9fX05SX2xpc3RlbiA9IDUwDQogICAgK2NvbnN0IF9TQ054TEVBU1QxNiA9ICJoeCIN
CiAgICArY29uc3QgX0lGTEFfTUFDU0VDX1BBRCA9IDE0DQogICAgK2NvbnN0IF9BSV9DQU5PTklE
TiA9IDB4MDA4MA0KICAgICtjb25zdCBfUFJfTUNFX0tJTExfR0VUID0gMzQNCiAgICArY29uc3Qg
X1RVTl9GX0NTVU0gPSAweDAxDQogICAgK2NvbnN0IF9fX0ZMVDMyWF9NQVhfRVhQX18gPSAxMDI0
DQogICAgK2NvbnN0IF9BRl9QQUNLRVQgPSBfUEZfUEFDS0VUDQogICAgK2NvbnN0IF9JRkxBX0JS
UE9SVF9NT0RFID0gNA0KICAgICtjb25zdCBfUEFDS0VUX0xPU1MgPSAxNA0KICAgICtjb25zdCBf
V0NIQVJfV0lEVEggPSAzMg0KICAgICtjb25zdCBfU09MX05FVEJFVUkgPSAyNjcNCiAgICArY29u
c3QgX19fTlJfZmdldHhhdHRyID0gMTkzDQogICAgK2NvbnN0IF9fU0NfWEJTNV9JTFAzMl9PRkYz
MiA9IDEyNQ0KICAgICtjb25zdCBfVENQX1FVSUNLQUNLID0gMTINCiAgICArY29uc3QgX09fVE1Q
RklMRSA9IF9fX09fVE1QRklMRQ0KICAgICtjb25zdCBfRUZCSUcgPSAyNw0KICAgICtjb25zdCBf
X1NDXzJfQ19CSU5EID0gNDcNCiAgICArY29uc3QgX0lQVE9TX0NMQVNTX0NTMCA9IDB4MDANCiAg
ICArY29uc3QgX0lQVE9TX0NMQVNTX0NTMSA9IDB4MjANCiAgICArY29uc3QgX0lQVE9TX0NMQVNT
X0NTMiA9IDB4NDANCiAgICArY29uc3QgX1NZU19mc3luYyA9IF9fX05SX2ZzeW5jDQogICAgK2Nv
bnN0IF9JUFRPU19DTEFTU19DUzQgPSAweDgwDQogICAgK2NvbnN0IF9JUFRPU19DTEFTU19DUzUg
PSAweGEwDQogICAgK2NvbnN0IF9fSU9DX0RJUlNISUZUID0gKF9fSU9DX1NJWkVTSElGVCtfX0lP
Q19TSVpFQklUUykNCiAgICArY29uc3QgX0lQVE9TX0NMQVNTX0NTNyA9IDB4ZTANCiAgICArY29u
c3QgX19fRkxUNjRYX0RJR19fID0gMTgNCiAgICArY29uc3QgX1RDUF9GQVNUT1BFTl9OT19DT09L
SUUgPSAzNA0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX01BR0lDMkEgPSA4NTA3MjI3OA0KICAg
ICtjb25zdCBfUFJfTUNFX0tJTExfQ0xFQVIgPSAwDQogICAgK2NvbnN0IF9QVFJBQ0VfT19NQVNL
ID0gMzE0NTk4Mw0KICAgICtjb25zdCBfRVhERVYgPSAxOA0KICAgICtjb25zdCBfTlVEX0lOQ09N
UExFVEUgPSAweDAxDQogICAgK2NvbnN0IF9BRl9LRVkgPSBfUEZfS0VZDQogICAgK2NvbnN0IF9Y
ODZfQ1IzX1BDRF9CSVQgPSA0DQogICAgK2NvbnN0IF9QVFJBQ0VfU0VUU0lHSU5GTyA9IDE2ODk5
DQogICAgK2NvbnN0IF9FTDNITFQgPSA0Ng0KICAgICtjb25zdCBfU1lTX2Zhbm90aWZ5X21hcmsg
PSBfX19OUl9mYW5vdGlmeV9tYXJrDQogICAgK2NvbnN0IF9fQklUU19FUlJOT19IID0gMQ0KICAg
ICtjb25zdCBfX19OUl90aW1lcl9nZXRvdmVycnVuID0gMjI1DQogICAgK2NvbnN0IF9JUFY2X1RD
TEFTUyA9IDY3DQogICAgK2NvbnN0IF9ORFRBX1BBUk1TID0gNg0KICAgICtjb25zdCBfQUZfWDI1
ID0gX1BGX1gyNQ0KICAgICtjb25zdCBfQlNETFkgPSAwMDIwMDAwDQogICAgK2NvbnN0IF9NU0df
UFJPWFkgPSAxNg0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfVU5TUEVDID0gMA0KICAgICtjb25z
dCBfX19OUl9hZnNfc3lzY2FsbCA9IDE4Mw0KICAgICtjb25zdCBfTUZEX0NMT0VYRUMgPSAxDQog
ICAgK2NvbnN0IF9fX1VJTlRfRkFTVDhfTUFYX18gPSAweGZmDQogICAgK2NvbnN0IF9TVEFUWF9T
SVpFID0gMHgwMjAwDQogICAgK2NvbnN0IF9fU0NfQ0hBUl9NSU4gPSAxMDMNCiAgICArY29uc3Qg
X0ZTX0NPTVBSX0ZMID0gMHgwMDAwMDAwNA0KICAgICtjb25zdCBfSUNNUDZfUlJfUkVTVUxUX0ZM
QUdTX09PQiA9IDB4MDIwMA0KICAgICtjb25zdCBfU0NNX1RJTUVTVEFNUElOR19QS1RJTkZPID0g
NTgNCiAgICArY29uc3QgX1ZFT0YgPSA0DQogICAgK2NvbnN0IF9fX05SX21xX29wZW4gPSAyNDAN
CiAgICArY29uc3QgX0lGRl9NQVNURVIgPSAxMDI0DQogICAgK2NvbnN0IF9QVFJBQ0VfU0lOR0xF
QkxPQ0sgPSAzMw0KICAgICtjb25zdCBfU1lTX2dldHRpbWVvZmRheSA9IF9fX05SX2dldHRpbWVv
ZmRheQ0KICAgICtjb25zdCBfX19OUl9hY2NlcHQgPSA0Mw0KICAgICtjb25zdCBfX1BPU0lYX01F
U1NBR0VfUEFTU0lORyA9IDIwMDgwOQ0KICAgICtjb25zdCBfX19QVFJESUZGX01BWF9fID0gMHg3
ZmZmZmZmZmZmZmZmZmZmDQogICAgK2NvbnN0IF9TSV9LRVJORUwgPSAxMjgNCiAgICArY29uc3Qg
X19TQ19CQ19CQVNFX01BWCA9IDM2DQogICAgK2NvbnN0IF9UVU5TRVRMSU5LX3ZhbCA9IDEwNzQw
MjU2NzcNCiAgICArY29uc3QgX1NZU19zeW5jX2ZpbGVfcmFuZ2UgPSBfX19OUl9zeW5jX2ZpbGVf
cmFuZ2UNCiAgICArY29uc3QgX0FSUEhSRF9DU0xJUCA9IDI1Nw0KICAgICtjb25zdCBfUFJfRlBf
RVhDX09WRiA9IDB4MDIwMDAwDQogICAgK2NvbnN0IF9fX05SX3NvY2tldHBhaXIgPSA1Mw0KICAg
ICtjb25zdCBfU1lTX3VzZXJmYXVsdGZkID0gX19fTlJfdXNlcmZhdWx0ZmQNCiAgICArY29uc3Qg
X0lGTEFfQk9ORF9QUklNQVJZID0gMTENCiAgICArY29uc3QgX0NMRF9EVU1QRUQgPSAzDQogICAg
K2NvbnN0IF9TWVNfbWlncmF0ZV9wYWdlcyA9IF9fX05SX21pZ3JhdGVfcGFnZXMNCiAgICArY29u
c3QgX0NTSVpFID0gMDAwMDA2MA0KICAgICtjb25zdCBfUlRNR1JQX1RDID0gOA0KICAgICtjb25z
dCBfUlRNX05FV0NIQUlOID0gMTAwDQogICAgK2NvbnN0IF9FQUNDRVMgPSAxMw0KICAgICtjb25z
dCBfX1BPU0lYX01BWF9DQU5PTiA9IDI1NQ0KICAgICtjb25zdCBfUlRQUk9UX1pFQlJBID0gMTEN
CiAgICArY29uc3QgX19QT1NJWF9USFJFQURfVEhSRUFEU19NQVggPSA2NA0KICAgICtjb25zdCBf
Q0xPQ0tfQk9PVFRJTUUgPSA3DQogICAgK2NvbnN0IF9fX3g4Nl82NCA9IDENCiAgICArY29uc3Qg
X0NRVUlUID0gMDM0DQogICAgK2NvbnN0IF9USU9DR1BUTl92YWwgPSAyMTQ3NzY3MzQ0DQogICAg
K2NvbnN0IF9fU0NfWE9QRU5fVkVSU0lPTiA9IDg5DQogICAgK2NvbnN0IF9fX0lOVDE2X01BWF9f
ID0gMHg3ZmZmDQogICAgK2NvbnN0IF9fU0NfTkxfU0VUTUFYID0gMTIzDQogICAgK2NvbnN0IF9f
X05SX2lvX2NhbmNlbCA9IDIxMA0KICAgICtjb25zdCBfX1NZU19DREVGU19IID0gMQ0KICAgICtj
b25zdCBfU0NOeExFQVNUMzIgPSAieCINCiAgICArY29uc3QgX0VUSF9QX01PQklURVggPSAweDAw
MTUNCiAgICArY29uc3QgX0lGTEFfRVZFTlRfQk9ORElOR19GQUlMT1ZFUiA9IDMNCiAgICArY29u
c3QgX1NJX1RJTUVSID0gLTINCiAgICArY29uc3QgX0VOT0tFWSA9IDEyNg0KICAgICtjb25zdCBf
SUZMQV9CUlBPUlRfVE9QT0xPR1lfQ0hBTkdFX0FDSyA9IDE5DQogICAgK2NvbnN0IF9BUlBIUkRf
Q1NMSVA2ID0gMjU5DQogICAgK2NvbnN0IF9fX1dJTlRfTUlOX18gPSAwDQogICAgK2NvbnN0IF9f
X1NfSUZSRUcgPSAwMTAwMDAwDQogICAgK2NvbnN0IF9JTlRQVFJfTUlOID0gKC05MjIzMzcyMDM2
ODU0Nzc1ODA3LTEpDQogICAgK2NvbnN0IF9fX1NfSVNVSUQgPSAwNDAwMA0KICAgICtjb25zdCBf
UFJfU0VUX1NFQ1VSRUJJVFMgPSAyOA0KICAgICtjb25zdCBfRVBPTExXUkJBTkQgPSA1MTINCiAg
ICArY29uc3QgX19MRlM2NF9BU1lOQ0hST05PVVNfSU8gPSAxDQogICAgK2NvbnN0IF9TS0ZfQURf
UlhIQVNIID0gMzINCiAgICArY29uc3QgX1BGX0xPQ0FMID0gMQ0KICAgICtjb25zdCBfRU5PVFNP
Q0sgPSA4OA0KICAgICtjb25zdCBfU19JRk1UID0gX19fU19JRk1UDQogICAgK2NvbnN0IF9fX05S
X2tjbXAgPSAzMTINCiAgICArY29uc3QgX1NZU19zcGxpY2UgPSBfX19OUl9zcGxpY2UNCiAgICAr
Y29uc3QgX19QT1NJWF9UUkFDRV9JTkhFUklUID0gLTENCiAgICArY29uc3QgX19TQ19TSFJUX01J
TiA9IDExNA0KICAgICtjb25zdCBfQVJQSFJEX0xBUEIgPSA1MTYNCiAgICArY29uc3QgX0lGTEFf
Qk9ORF9BRF9JTkZPX1BBUlRORVJfS0VZID0gNA0KICAgICtjb25zdCBfQ0xPQ0tfTU9OT1RPTklD
X1JBVyA9IDQNCiAgICArY29uc3QgX01DQVNUX0VYQ0xVREUgPSAwDQogICAgK2NvbnN0IF9TSU9D
U0lGTVRVID0gMHg4OTIyDQogICAgK2NvbnN0IF9BVF9TVEFUWF9GT1JDRV9TWU5DID0gMHgyMDAw
DQogICAgK2NvbnN0IF9TSU9DR0lGQ09ORiA9IDB4ODkxMg0KICAgICtjb25zdCBfRlNfU0VDUk1f
RkwgPSAweDAwMDAwMDAxDQogICAgK2NvbnN0IF9fX0lOVF9GQVNUMzJfV0lEVEhfXyA9IDY0DQog
ICAgK2NvbnN0IF9fUENfTUFYX0NBTk9OID0gMQ0KICAgICtjb25zdCBfRklPQ0xFWCA9IDB4NTQ1
MQ0KICAgICtjb25zdCBfX19JTFAzMl9PRkZCSUdfTERGTEFHUyA9ICItbTMyIg0KICAgICtjb25z
dCBfSUZMQV9IU1JfTVVMVElDQVNUX1NQRUMgPSAzDQogICAgK2NvbnN0IF9fX0lOVF9GQVNUMTZf
TUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYNCiAgICArY29uc3QgX1NZU19tbG9ja2FsbCA9IF9f
X05SX21sb2NrYWxsDQogICAgK2NvbnN0IF9TWVNfc2V0X3RocmVhZF9hcmVhID0gX19fTlJfc2V0
X3RocmVhZF9hcmVhDQogICAgK2NvbnN0IF9NU19CSU5EID0gNDA5Ng0KICAgICtjb25zdCBfQVJQ
T1BfSW5SRVFVRVNUID0gOA0KICAgICtjb25zdCBfU0laRU9GX1ZPSURfUCA9IDgNCiAgICArY29u
c3QgX1NJT0NHSUZORVRNQVNLID0gMHg4OTFiDQogICAgK2NvbnN0IF9TQ0hFRF9CQVRDSCA9IDMN
CiAgICArY29uc3QgX1JUTV9ORVdBQ1RJT04gPSA0OA0KICAgICtjb25zdCBfQUZfS0NNID0gX1BG
X0tDTQ0KICAgICtjb25zdCBfU1lTX2NvcHlfZmlsZV9yYW5nZSA9IF9fX05SX2NvcHlfZmlsZV9y
YW5nZQ0KICAgICtjb25zdCBfQVJQSFJEX1NMSVAgPSAyNTYNCiAgICArY29uc3QgX01TX1JFTEFU
SU1FID0gMjA5NzE1Mg0KICAgICtjb25zdCBfUlVTQUdFX1NFTEYgPSAwDQogICAgK2NvbnN0IF9f
X0ZfU0VUT1dOX0VYID0gMTUNCiAgICArY29uc3QgX19fUkxJTUlUX05JQ0UgPSAxMw0KICAgICtj
b25zdCBfU09fQVRUQUNIX0ZJTFRFUiA9IDI2DQogICAgK2NvbnN0IF9FUE9MTElOID0gMQ0KICAg
ICtjb25zdCBfSUZBX0ZfSE9NRUFERFJFU1MgPSAweDEwDQogICAgK2NvbnN0IF9TS0ZfTExfT0ZG
ID0gKC0weDIwMDAwMCkNCiAgICArY29uc3QgX1JURl9USFJPVyA9IDB4MjAwMA0KICAgICtjb25z
dCBfU1lTX29wZW5fYnlfaGFuZGxlX2F0ID0gX19fTlJfb3Blbl9ieV9oYW5kbGVfYXQNCiAgICAr
Y29uc3QgX19fU0laRU9GX1dJTlRfVF9fID0gNA0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfUFJP
WFlBUlAgPSAxMA0KICAgICtjb25zdCBfU1lTX21hZHZpc2UgPSBfX19OUl9tYWR2aXNlDQogICAg
K2NvbnN0IF9TVEFfRlJFUUhPTEQgPSAweDAwODANCiAgICArY29uc3QgX1BGX1ZTT0NLID0gNDAN
CiAgICArY29uc3QgX05DQ1MgPSAzMg0KICAgICtjb25zdCBfX19JRkxBX1ZSRl9QT1JUX01BWCA9
IDINCiAgICArY29uc3QgX19TQ19WNl9JTFAzMl9PRkYzMiA9IDE3Ng0KICAgICtjb25zdCBfQ0xE
X0VYSVRFRCA9IDENCiAgICArY29uc3QgX0VUT09NQU5ZUkVGUyA9IDEwOQ0KICAgICtjb25zdCBf
UlRBWF9GRUFUVVJFX0VDTiA9ICgxIDw8IDApDQogICAgK2NvbnN0IF9FVEhfUF9IU1IgPSAweDg5
MkYNCiAgICArY29uc3QgX1NZU19pb19zZXR1cCA9IF9fX05SX2lvX3NldHVwDQogICAgK2NvbnN0
IF9STElNSVRfQ09SRSA9IDQNCiAgICArY29uc3QgX1NZU19rZXljdGwgPSBfX19OUl9rZXljdGwN
CiAgICArY29uc3QgX19TQ19TRU1fTlNFTVNfTUFYID0gMzINCiAgICArY29uc3QgX0VQT0xMV0FL
RVVQID0gNTM2ODcwOTEyDQogICAgK2NvbnN0IF9fX05SX2ZsaXN0eGF0dHIgPSAxOTYNCiAgICAr
Y29uc3QgX19TQ19CQVJSSUVSUyA9IDEzMw0KICAgICtjb25zdCBfU1lTX3NldGdpZCA9IF9fX05S
X3NldGdpZA0KICAgICtjb25zdCBfX1NDX1dPUkRfQklUID0gMTA3DQogICAgK2NvbnN0IF9BUlBI
UkRfUk9TRSA9IDI3MA0KICAgICtjb25zdCBfU0lfVVNFUiA9IDANCiAgICArY29uc3QgX0lOX0NM
QVNTQl9OU0hJRlQgPSAxNg0KICAgICtjb25zdCBfTkRUUEFfUFJPWFlfUUxFTiA9IDE0DQogICAg
K2NvbnN0IF9QUklpMTYgPSAiaSINCiAgICArY29uc3QgX0lGTEFfQk9ORF9BRF9JTkZPX1BBUlRO
RVJfTUFDID0gNQ0KICAgICtjb25zdCBfTVNHX0NPTkZJUk0gPSAyMDQ4DQogICAgK2NvbnN0IF9f
X05SX3N5bWxpbmthdCA9IDI2Ng0KICAgICtjb25zdCBfSEFWRV9GVVRJTUVTQVQgPSAxDQogICAg
K2NvbnN0IF9fX1BEUF9FTkRJQU4gPSAzNDEyDQogICAgK2NvbnN0IF9QVEhSRUFEX0tFWVNfTUFY
ID0gMTAyNA0KICAgICtjb25zdCBfTVNfTk9TVUlEID0gMg0KICAgICtjb25zdCBfSUZMQV9CUl9N
Q0FTVF9RVUVSWV9JTlRWTCA9IDMzDQogICAgK2NvbnN0IF9fX1VJTlRNQVhfTUFYX18gPSAweGZm
ZmZmZmZmZmZmZmZmZmYNCiAgICArY29uc3QgX0lGTEFfV0VJR0hUID0gMTUNCiAgICArY29uc3Qg
X0lQVjZfWEZSTV9QT0xJQ1kgPSAzNQ0KICAgICtjb25zdCBfX19OUl9hY2Nlc3MgPSAyMQ0KICAg
ICtjb25zdCBfX1NDX0xFVkVMMV9JQ0FDSEVfU0laRSA9IDE4NQ0KICAgICtjb25zdCBfUlRNR1JQ
X0lQVjZfSUZBRERSID0gMHgxMDANCiAgICArY29uc3QgX19fTlJfbGluayA9IDg2DQogICAgK2Nv
bnN0IF9GU19YRkxBR19SRUFMVElNRSA9IDB4MDAwMDAwMDENCiAgICArY29uc3QgX0ZBTExPQ19G
TF9JTlNFUlRfUkFOR0UgPSAweDIwDQogICAgK2NvbnN0IF9fX1BSSVBUUl9QUkVGSVggPSAibCIN
CiAgICArY29uc3QgX0lGTEFfWEZSTV9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9TVEFUWF9DVElN
RSA9IDB4MDA4MA0KICAgICtjb25zdCBfX19TQ0hBUl9NQVhfXyA9IDB4N2YNCiAgICArY29uc3Qg
X1NIUlRfV0lEVEggPSAxNg0KICAgICtjb25zdCBfU0lPQ0RFTFJUID0gMHg4OTBDDQogICAgK2Nv
bnN0IF9BRl9JUFggPSBfUEZfSVBYDQogICAgK2NvbnN0IF9NU19CT1JOID0gKDE8PDI5KQ0KICAg
ICtjb25zdCBfSUZMQV9YRFAgPSA0Mw0KICAgICtjb25zdCBfSUZMQV9TVEFUUyA9IDcNCiAgICAr
Y29uc3QgX0VST0ZTID0gMzANCiAgICArY29uc3QgX1NPX05PX0NIRUNLID0gMTENCiAgICArY29u
c3QgX0JDX0JBU0VfTUFYID0gX19QT1NJWDJfQkNfQkFTRV9NQVgNCiAgICArY29uc3QgX1g4Nl9F
RkxBR1NfSUZfQklUID0gOQ0KICAgICtjb25zdCBfX1hPUEVOX1NITSA9IDENCiAgICArY29uc3Qg
X1JFR19SU0kgPSA5DQogICAgK2NvbnN0IF9BUlBIUkRfTE9DQUxUTEsgPSA3NzMNCiAgICArY29u
c3QgX19TQ19ERVZJQ0VfU1BFQ0lGSUNfUiA9IDE0Mg0KICAgICtjb25zdCBfX1NDX1NFTEVDVCA9
IDU5DQogICAgK2NvbnN0IF9fX0lGQV9NQVggPSAxMA0KICAgICtjb25zdCBfU1lTX2ZhY2Nlc3Nh
dCA9IF9fX05SX2ZhY2Nlc3NhdA0KICAgICtjb25zdCBfQ1NUT1BCID0gMDAwMDEwMA0KICAgICtj
b25zdCBfTUFDVkxBTl9NQUNBRERSX1NFVCA9IDMNCiAgICArY29uc3QgX1VJTlRfTUFYID0gKF9J
TlRfTUFYICogMiArIDEpDQogICAgK2NvbnN0IF9QUl9USU1JTkdfU1RBVElTVElDQUwgPSAwDQog
ICAgK2NvbnN0IF9TQ05kRkFTVDggPSAiaGhkIg0KICAgICtjb25zdCBfTUFYVFRMID0gMjU1DQog
ICAgK2NvbnN0IF9FQUlfTk9EQVRBID0gLTUNCiAgICArY29uc3QgX1RDUF9DQV9DV1IgPSAyDQog
ICAgK2NvbnN0IF9JWE9OID0gMDAwMjAwMA0KICAgICtjb25zdCBfX19nbnVfbGludXhfXyA9IDEN
CiAgICArY29uc3QgX19QQVRIX1NFUlZJQ0VTID0gIi9ldGMvc2VydmljZXMiDQogICAgK2NvbnN0
IF9fX0lGTEFfVkZfVkxBTl9JTkZPX01BWCA9IDINCiAgICArY29uc3QgX0FGX1VOSVggPSBfUEZf
VU5JWA0KICAgICtjb25zdCBfRVRIX1BfSERMQyA9IDB4MDAxOQ0KICAgICtjb25zdCBfUFJfTVBY
X0VOQUJMRV9NQU5BR0VNRU5UID0gNDMNCiAgICArY29uc3QgX1JUUFJPVF9CSVJEID0gMTINCiAg
ICArY29uc3QgX0FSUEhSRF9IV1gyNSA9IDI3Mg0KICAgICtjb25zdCBfUlRNX0RFTFJPVVRFID0g
MjUNCiAgICArY29uc3QgX0lGTEFfQlJfVkxBTl9QUk9UT0NPTCA9IDgNCiAgICArY29uc3QgX0lG
TEFfQlJQT1JUX1VOU1BFQyA9IDANCiAgICArY29uc3QgX1JUTV9HRVRBRERSID0gMjINCiAgICAr
Y29uc3QgX1RDSU9OID0gMw0KICAgICtjb25zdCBfSVBfQ0hFQ0tTVU0gPSAyMw0KICAgICtjb25z
dCBfU1lTX2ZjaG1vZGF0ID0gX19fTlJfZmNobW9kYXQNCiAgICArY29uc3QgX0NMT05FX05FV1VT
RVIgPSAweDEwMDAwMDAwDQogICAgK2NvbnN0IF9USU9DTk9UVFkgPSAweDU0MjINCiAgICArY29u
c3QgX1NPX05PRkNTID0gNDMNCiAgICArY29uc3QgX1NZU19jbG9ja19zZXR0aW1lID0gX19fTlJf
Y2xvY2tfc2V0dGltZQ0KICAgICtjb25zdCBfSVBfUEtUT1BUSU9OUyA9IDkNCiAgICArY29uc3Qg
X1RDUF9RVUVVRVNfTlIgPSAzDQogICAgK2NvbnN0IF9fX0ZMVDY0X0RFQ0lNQUxfRElHX18gPSAx
Nw0KICAgICtjb25zdCBfSUNNUDZfVElNRV9FWENFRURfUkVBU1NFTUJMWSA9IDENCiAgICArY29u
c3QgX0lQVE9TX0RTQ1BfTUFTSyA9IDB4ZmMNCiAgICArY29uc3QgX1NJR0lOVCA9IDINCiAgICAr
Y29uc3QgX0NMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCA9IDINCiAgICArY29uc3QgX0lDTVA2X0RT
VF9VTlJFQUNIID0gMQ0KICAgICtjb25zdCBfSUZMQV9HRU5FVkVfVE9TID0gNA0KICAgICtjb25z
dCBfUFJfRlBfRVhDX0RJU0FCTEVEID0gMA0KICAgICtjb25zdCBfTUFEVl9ET0RVTVAgPSAxNw0K
ICAgICtjb25zdCBfU1lTX2dldF90aHJlYWRfYXJlYSA9IF9fX05SX2dldF90aHJlYWRfYXJlYQ0K
ICAgICtjb25zdCBfU09MX1BOUElQRSA9IDI3NQ0KICAgICtjb25zdCBfTUFYX0xJTktTID0gMzIN
CiAgICArY29uc3QgX1JUTkxfRkFNSUxZX0lQTVIgPSAxMjgNCiAgICArY29uc3QgX05MX01NQVBf
U1RBVFVTX0NPUFkgPSAzDQogICAgK2NvbnN0IF9fU0NfUkVBREVSX1dSSVRFUl9MT0NLUyA9IDE1
Mw0KICAgICtjb25zdCBfX1NDX0FJT19QUklPX0RFTFRBX01BWCA9IDI1DQogICAgK2NvbnN0IF9S
VE5MR1JQX1BIT05FVF9JRkFERFIgPSAyMQ0KICAgICtjb25zdCBfQVJQSFJEX0ZDRkFCUklDID0g
Nzg3DQogICAgK2NvbnN0IF9DTE9ORV9QQVJFTlRfU0VUVElEID0gMHgwMDEwMDAwMA0KICAgICtj
b25zdCBfU1lTX25ld2ZzdGF0YXQgPSBfX19OUl9uZXdmc3RhdGF0DQogICAgK2NvbnN0IF9JRkZf
Tk9UUkFJTEVSUyA9IDMyDQogICAgK2NvbnN0IF9UQ1BfU0FWRV9TWU4gPSAyNw0KICAgICtjb25z
dCBfUFJJaTMyID0gImkiDQogICAgK2NvbnN0IF9USU1FX0VSUk9SID0gNQ0KICAgICtjb25zdCBf
X19OUl9yZWFkID0gMA0KICAgICtjb25zdCBfVkVPTDIgPSAxNg0KICAgICtjb25zdCBfRVRIRVJU
WVBFX05UUkFJTEVSID0gMTYNCiAgICArY29uc3QgX19TQ19NT05PVE9OSUNfQ0xPQ0sgPSAxNDkN
CiAgICArY29uc3QgX1RDQV9ST09UX0NPVU5UID0gMw0KICAgICtjb25zdCBfUEtFWV9ESVNBQkxF
X0FDQ0VTUyA9IDB4MQ0KICAgICtjb25zdCBfSEFWRV9BU19YODZfUENSRUwgPSAxDQogICAgK2Nv
bnN0IF9fX2lvdmVjX2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9UVU5fRkxUX0FMTE1VTFRJID0g
MHgwMDAxDQogICAgK2NvbnN0IF9ORVRMSU5LX1JYX1JJTkcgPSA2DQogICAgK2NvbnN0IF9FTk9U
UkVDT1ZFUkFCTEUgPSAxMzENCiAgICArY29uc3QgX1BUUkFDRV9JTlRFUlJVUFQgPSAxNjkwMw0K
ICAgICtjb25zdCBfQUZfQ0FJRiA9IF9QRl9DQUlGDQogICAgK2NvbnN0IF9TT0xfSVBWNiA9IDQx
DQogICAgK2NvbnN0IF9JRkxBX0JST0FEQ0FTVCA9IDINCiAgICArY29uc3QgX19fTERCTF9NQU5U
X0RJR19fID0gNjQNCiAgICArY29uc3QgX0ZGSV9UWVBFX1NJTlQ4ID0gNg0KICAgICtjb25zdCBf
X19OUl93YWl0aWQgPSAyNDcNCiAgICArY29uc3QgX0lYQU5ZID0gMDAwNDAwMA0KICAgICtjb25z
dCBfU1lTX3NjaGVkX3NldGFmZmluaXR5ID0gX19fTlJfc2NoZWRfc2V0YWZmaW5pdHkNCiAgICAr
Y29uc3QgX19fRkxUNjRYX0hBU19RVUlFVF9OQU5fXyA9IDENCiAgICArY29uc3QgX19TQ19TUE9S
QURJQ19TRVJWRVIgPSAxNjANCiAgICArY29uc3QgX1BPTExfRVJSID0gNA0KICAgICtjb25zdCBf
SUZMQV9YRFBfVU5TUEVDID0gMA0KICAgICtjb25zdCBfRl9SRExDSyA9IDANCiAgICArY29uc3Qg
X0lQT1BUX0RFQk1FQVMgPSAweDQwDQogICAgK2NvbnN0IF9BVF9GRENXRCA9IC0xMDANCiAgICAr
Y29uc3QgX0lOVFBUUl9XSURUSCA9IF9fX1dPUkRTSVpFDQogICAgK2NvbnN0IF9fU0NfUElJX09T
SV9DTFRTID0gNjQNCiAgICArY29uc3QgX1NZU19waXBlMiA9IF9fX05SX3BpcGUyDQogICAgK2Nv
bnN0IF9JRkxBX0JPTkRfU0xBVkVfQURfUEFSVE5FUl9PUEVSX1BPUlRfU1RBVEUgPSA4DQogICAg
K2NvbnN0IF9fQ1NfR05VX0xJQlBUSFJFQURfVkVSU0lPTiA9IDMNCiAgICArY29uc3QgX1RDU0FE
UkFJTiA9IDENCiAgICArY29uc3QgX0xPTkdfTUFYID0gX19fTE9OR19NQVhfXw0KICAgICtjb25z
dCBfUFJJZDE2ID0gImQiDQogICAgK2NvbnN0IF9fU1lTX0lOT1RJRllfSCA9IDENCiAgICArY29u
c3QgX1NZU19icGYgPSBfX19OUl9icGYNCiAgICArY29uc3QgX1JUTkxHUlBfTk9QNCA9IDE3DQog
ICAgK2NvbnN0IF9fU0NfWE9QRU5fWENVX1ZFUlNJT04gPSA5MA0KICAgICtjb25zdCBfUFJfTVBY
X0RJU0FCTEVfTUFOQUdFTUVOVCA9IDQ0DQogICAgK2NvbnN0IF9JTlRfTEVBU1Q4X01JTiA9ICgt
MTI4KQ0KICAgICtjb25zdCBfU0lHSU8gPSBfU0lHUE9MTA0KICAgICtjb25zdCBfSVBWNl9SRUNW
T1JJR0RTVEFERFIgPSBfSVBWNl9PUklHRFNUQUREUg0KICAgICtjb25zdCBfX1BDX0ZJTEVTSVpF
QklUUyA9IDEzDQogICAgK2NvbnN0IF9USU9DR1BHUlAgPSAweDU0MEYNCiAgICArY29uc3QgX19f
RkxUMzJYX01JTl9FWFBfXyA9ICgtMTAyMSkNCiAgICArY29uc3QgX1RJT0NHV0lOU1pfdmFsID0g
MjE1MjMNCiAgICArY29uc3QgX19TQ19MRVZFTDJfQ0FDSEVfTElORVNJWkUgPSAxOTMNCiAgICAr
Y29uc3QgX0VUSF9QX0FUTU1QT0EgPSAweDg4NGMNCiAgICArY29uc3QgX0hBVkVfU1RSSU5HU19I
ID0gMQ0KICAgICtjb25zdCBfRE5fQ1JFQVRFID0gMHgwMDAwMDAwNA0KICAgICtjb25zdCBfRlNf
UE9MSUNZX0ZMQUdTX1BBRF8xNiA9IDB4MDINCiAgICArY29uc3QgX1NPX09PQklOTElORSA9IDEw
DQogICAgK2NvbnN0IF9QQUNLRVRfUk9MTE9WRVJfU1RBVFMgPSAyMQ0KICAgICtjb25zdCBfX1BP
U0lYX0FTWU5DSFJPTk9VU19JTyA9IDIwMDgwOQ0KICAgICtjb25zdCBfX0NTX0xGU19MSUJTID0g
MTAwMg0KICAgICtjb25zdCBfUEFDS0VUX01SX1BST01JU0MgPSAxDQogICAgK2NvbnN0IF9fX0ZM
VDY0X01BWF9fID0gMS4xDQogICAgK2NvbnN0IF9fX1VTRV9JU09DMTEgPSAxDQogICAgK2NvbnN0
IF9fU0NfTEVWRUwyX0NBQ0hFX0FTU09DID0gMTkyDQogICAgK2NvbnN0IF9UQ1NCUksgPSAweDU0
MDkNCiAgICArY29uc3QgX0lOVF9MRUFTVDMyX1dJRFRIID0gMzINCiAgICArY29uc3QgX0JQRl9N
SU5PUl9WRVJTSU9OID0gMQ0KICAgICtjb25zdCBfX19HTlVfTElCUkFSWV9fID0gNg0KICAgICtj
b25zdCBfX19TVERDX0lTT18xMDY0Nl9fID0gMjAxNzA2DQogICAgK2NvbnN0IF9FSVNOQU0gPSAx
MjANCiAgICArY29uc3QgX0lQVjZfQVVUT0ZMT1dMQUJFTCA9IDcwDQogICAgK2NvbnN0IF9fU0Nf
TEVWRUw0X0NBQ0hFX0xJTkVTSVpFID0gMTk5DQogICAgK2NvbnN0IF9JRkxBX0xJTktJTkZPID0g
MTgNCiAgICArY29uc3QgX0lQX1BNVFVESVNDX0RPID0gMg0KICAgICtjb25zdCBfUFRSQUNFX09M
RFNFVE9QVElPTlMgPSAyMQ0KICAgICtjb25zdCBfSVBfUEtUSU5GTyA9IDgNCiAgICArY29uc3Qg
X09fUlNZTkMgPSBfT19TWU5DDQogICAgK2NvbnN0IF9TUExJQ0VfRl9OT05CTE9DSyA9IDINCiAg
ICArY29uc3QgX0NMT05FX0NISUxEX0NMRUFSVElEID0gMHgwMDIwMDAwMA0KICAgICtjb25zdCBf
SEFWRV9PRkY2NF9UID0gMQ0KICAgICtjb25zdCBfRlNfRU9GQkxPQ0tTX0ZMID0gMHgwMDQwMDAw
MA0KICAgICtjb25zdCBfX1NDX0ZJTEVfU1lTVEVNID0gMTQ4DQogICAgK2NvbnN0IF9DSEFSQ0xB
U1NfTkFNRV9NQVggPSAyMDQ4DQogICAgK2NvbnN0IF9JTlRfTUFYID0gX19fSU5UX01BWF9fDQog
ICAgK2NvbnN0IF9fX0xQNjRfT0ZGNjRfQ0ZMQUdTID0gIi1tNjQiDQogICAgK2NvbnN0IF9JTlRf
V0lEVEggPSAzMg0KICAgICtjb25zdCBfTkRUQV9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9UVU5f
Rl9UU080ID0gMHgwMg0KICAgICtjb25zdCBfX1BPU0lYX1RIUkVBRFMgPSAyMDA4MDkNCiAgICAr
Y29uc3QgX1JURVhUX0ZJTFRFUl9CUlZMQU4gPSAoMSA8PCAxKQ0KICAgICtjb25zdCBfUlRBWF9S
RU9SREVSSU5HID0gOQ0KICAgICtjb25zdCBfUEZfQVRNU1ZDID0gMjANCiAgICArY29uc3QgX05T
U19CVUZMRU5fR1JPVVAgPSAxMDI0DQogICAgK2NvbnN0IF9QUl9UU0NfU0lHU0VHViA9IDINCiAg
ICArY29uc3QgX19fTlJfc2VtY3RsID0gNjYNCiAgICArY29uc3QgX1NPTF9USVBDID0gMjcxDQog
ICAgK2NvbnN0IF9NTERfTElTVEVORVJfUkVQT1JUID0gMTMxDQogICAgK2NvbnN0IF9VUEFHRVMg
PSAxDQogICAgK2NvbnN0IF9fU0NfUElJX09TSV9NID0gNjUNCiAgICArY29uc3QgX0ZTX1hGTEFH
X1BST0pJTkhFUklUID0gMHgwMDAwMDIwMA0KICAgICtjb25zdCBfTVNHX0VSUlFVRVVFID0gODE5
Mg0KICAgICtjb25zdCBfQVJQSFJEX0lFRUU4MDIxNTQgPSA4MDQNCiAgICArY29uc3QgX1RJT0NQ
S1QgPSAweDU0MjANCiAgICArY29uc3QgX0VTUkNIID0gMw0KICAgICtjb25zdCBfX19TSVpFT0Zf
UFRIUkVBRF9SV0xPQ0tfVCA9IDU2DQogICAgK2NvbnN0IF9fUE9TSVgyX0JDX1NUUklOR19NQVgg
PSAxMDAwDQogICAgK2NvbnN0IF9JRkxBX0lORVQ2X1VOU1BFQyA9IDANCiAgICArY29uc3QgX0FU
Rl9VU0VUUkFJTEVSUyA9IDB4MTANCiAgICArY29uc3QgX0lOX01PVkVfU0VMRiA9IDB4MDAwMDA4
MDANCiAgICArY29uc3QgX19fU0lHX0FUT01JQ19XSURUSF9fID0gMzINCiAgICArY29uc3QgX19T
Q19TWVNURU1fREFUQUJBU0VfUiA9IDE2Mw0KICAgICtjb25zdCBfUlRBX0RQT1JUID0gMjkNCiAg
ICArY29uc3QgX1JUQV9TRVNTSU9OID0gMTMNCiAgICArY29uc3QgX1BBQ0tBR0VfVkVSU0lPTiA9
ICJ2ZXJzaW9uLXVudXNlZCINCiAgICArY29uc3QgX19fREVDMTI4X1NVQk5PUk1BTF9NSU5fXyA9
IDAuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRS02MTQzDQogICAgK2NvbnN0IF9C
MjAwMDAwMCA9IDAwMTAwMTMNCiAgICArY29uc3QgX1NZU19jaG1vZCA9IF9fX05SX2NobW9kDQog
ICAgK2NvbnN0IF9TVEFfUFBTV0FOREVSID0gMHgwNDAwDQogICAgK2NvbnN0IF9fX0lOVF9NQVhf
XyA9IDB4N2ZmZmZmZmYNCiAgICArY29uc3QgX19fVUlOVF9MRUFTVDhfTUFYX18gPSAweGZmDQog
ICAgK2NvbnN0IF9fX0lOVF9GQVNUMTZfV0lEVEhfXyA9IDY0DQogICAgK2NvbnN0IF9TWVNfZXZl
bnRmZDIgPSBfX19OUl9ldmVudGZkMg0KICAgICtjb25zdCBfU0lHQlVTID0gNw0KICAgICtjb25z
dCBfRlBfWFNUQVRFX01BR0lDMSA9IDB4NDY1MDU4NTMNCiAgICArY29uc3QgX0ZQX1hTVEFURV9N
QUdJQzIgPSAweDQ2NTA1ODQ1DQogICAgK2NvbnN0IF9UQ0dFVFNfdmFsID0gMjE1MDUNCiAgICAr
Y29uc3QgX05MTV9GX1JFUVVFU1QgPSAweDAxDQogICAgK2NvbnN0IF9NQURWX05PSFVHRVBBR0Ug
PSAxNQ0KICAgICtjb25zdCBfSEFWRV9JTk9USUZZX0lOSVQgPSAxDQogICAgK2NvbnN0IF9SVE1f
TkVXUURJU0MgPSAzNg0KICAgICtjb25zdCBfUFJfU0VUX0tFRVBDQVBTID0gOA0KICAgICtjb25z
dCBfUFJfRU5ESUFOX0JJRyA9IDANCiAgICArY29uc3QgX0lQUE9SVF9MT0dJTlNFUlZFUiA9IDUx
Mw0KICAgICtjb25zdCBfU1lTX2Nsb2NrX2dldHRpbWUgPSBfX19OUl9jbG9ja19nZXR0aW1lDQog
ICAgK2NvbnN0IF9NU0dfVFJZSEFSRCA9IDQNCiAgICArY29uc3QgX1BSX1NFVF9NTV9BVVhWID0g
MTINCiAgICArY29uc3QgX19QT1NJWF9TWU5DSFJPTklaRURfSU8gPSAyMDA4MDkNCiAgICArY29u
c3QgX1NZU19jbG9zZSA9IF9fX05SX2Nsb3NlDQogICAgK2NvbnN0IF9QUl9TRVRfVU5BTElHTiA9
IDYNCiAgICArY29uc3QgX1NZU19icmsgPSBfX19OUl9icmsNCiAgICArY29uc3QgX19OU0lHID0g
KF9fX1NJR1JUTUFYICsgMSkNCiAgICArY29uc3QgX19QT1NJWF9GRF9TRVRTSVpFID0gX19QT1NJ
WF9PUEVOX01BWA0KICAgICtjb25zdCBfRU5PVFRZID0gMjUNCiAgICArY29uc3QgX1JUQV9QUklP
UklUWSA9IDYNCiAgICArY29uc3QgX0VUSF9QX0xBVCA9IDB4NjAwNA0KICAgICtjb25zdCBfRkZJ
X05BVElWRV9SQVdfQVBJID0gMA0KICAgICtjb25zdCBfUFJfR0VUX05PX05FV19QUklWUyA9IDM5
DQogICAgK2NvbnN0IF9GUEVfRkxUUkVTID0gNg0KICAgICtjb25zdCBfRlNfUkVTRVJWRURfRkwg
PSAweDgwMDAwMDAwDQogICAgK2NvbnN0IF9GU19YRkxBR19DT1dFWFRTSVpFID0gMHgwMDAxMDAw
MA0KICAgICtjb25zdCBfRVBPTExPVVQgPSA0DQogICAgK2NvbnN0IF9TQ01fVFhUSU1FID0gX1NP
X1RYVElNRQ0KICAgICtjb25zdCBfQURKX1RJTUVDT05TVCA9IDB4MDAyMA0KICAgICtjb25zdCBf
VktJTEwgPSAzDQogICAgK2NvbnN0IF9SVE1HUlBfREVDbmV0X1JPVVRFID0gMHg0MDAwDQogICAg
K2NvbnN0IF9BRl9RSVBDUlRSID0gX1BGX1FJUENSVFINCiAgICArY29uc3QgX1NPX0FDQ0VQVENP
Tk4gPSAzMA0KICAgICtjb25zdCBfSUZMQV9WRl9TVEFUU19UWF9EUk9QUEVEID0gOA0KICAgICtj
b25zdCBfUlROTF9GQU1JTFlfTUFYID0gMTI5DQogICAgK2NvbnN0IF9fUE9TSVhfVElNRVJfTUFY
ID0gMzINCiAgICArY29uc3QgX19fTlJfbWtub2QgPSAxMzMNCiAgICArY29uc3QgX1JFR19FRkwg
PSAxNw0KICAgICtjb25zdCBfX19TU0UyX18gPSAxDQogICAgK2NvbnN0IF9JUF9NVUxUSUNBU1Rf
VFRMID0gMzMNCiAgICArY29uc3QgX1NPQ0tfU0VRUEFDS0VUID0gNQ0KICAgICtjb25zdCBfX19X
QUxMID0gMHg0MDAwMDAwMA0KICAgICtjb25zdCBfUlRNX0RFTE1EQiA9IDg1DQogICAgK2NvbnN0
IF9JTExfSUxMT1BDID0gMQ0KICAgICtjb25zdCBfTkxNU0dfRVJST1IgPSAweDINCiAgICArY29u
c3QgX1BSX0dFVF9USURfQUREUkVTUyA9IDQwDQogICAgK2NvbnN0IF9TWVNfdm1zcGxpY2UgPSBf
X19OUl92bXNwbGljZQ0KICAgICtjb25zdCBfVENQX1NZTkNOVCA9IDcNCiAgICArY29uc3QgX1JU
X1NDT1BFX1NJVEUgPSAyMDANCiAgICArY29uc3QgX1NZU19leGVjdmVhdCA9IF9fX05SX2V4ZWN2
ZWF0DQogICAgK2NvbnN0IF9JRkFfRl9URU1QT1JBUlkgPSBfSUZBX0ZfU0VDT05EQVJZDQogICAg
K2NvbnN0IF9DUkRMWSA9IDAwMDMwMDANCiAgICArY29uc3QgX0VUSF9QX1BSRUFVVEggPSAweDg4
QzcNCiAgICArY29uc3QgX19fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsID0gMTQ4DQogICAgK2Nv
bnN0IF9SRUdfUjEyID0gNA0KICAgICtjb25zdCBfSVBWNl8yMjkyUEtUSU5GTyA9IDINCiAgICAr
Y29uc3QgX19fSU9WX01BWCA9IDEwMjQNCiAgICArY29uc3QgX0FJX0FMTCA9IDB4MDAxMA0KICAg
ICtjb25zdCBfRVRIX1BfRkNPRSA9IDB4ODkwNg0KICAgICtjb25zdCBfSUZMQV9DQVJSSUVSID0g
MzMNCiAgICArY29uc3QgX1JUQV9ORVdEU1QgPSAxOQ0KICAgICtjb25zdCBfX19OUl9hZGp0aW1l
eCA9IDE1OQ0KICAgICtjb25zdCBfQllURV9PUkRFUiA9IF9fX0JZVEVfT1JERVINCiAgICArY29u
c3QgX19fRkxUX0RFTk9STV9NSU5fXyA9IDEuMQ0KICAgICtjb25zdCBfRUNIT1BSVCA9IDAwMDIw
MDANCiAgICArY29uc3QgX0lGTEFfUk1ORVRfVU5TUEVDID0gMA0KICAgICtjb25zdCBfX0NTX1BP
U0lYX1Y3X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMzINCiAgICArY29uc3QgX0ZfU0hMQ0sgPSA4
DQogICAgK2NvbnN0IF9FVElNRURPVVQgPSAxMTANCiAgICArY29uc3QgX19TQ19GSUxFX0xPQ0tJ
TkcgPSAxNDcNCiAgICArY29uc3QgX01TR19QRUVLID0gMg0KICAgICtjb25zdCBfU1lTX21zeW5j
ID0gX19fTlJfbXN5bmMNCiAgICArY29uc3QgX0VUSF9QXzE1ODggPSAweDg4RjcNCiAgICArY29u
c3QgX19TQ19QQVNTX01BWCA9IDg4DQogICAgK2NvbnN0IF9JRkxBX0hTUl9VTlNQRUMgPSAwDQog
ICAgK2NvbnN0IF9CQ19TVFJJTkdfTUFYID0gX19QT1NJWDJfQkNfU1RSSU5HX01BWA0KICAgICtj
b25zdCBfRkxVU0hPID0gMDAxMDAwMA0KICAgICtjb25zdCBfU1lTX2xzdGF0ID0gX19fTlJfbHN0
YXQNCiAgICArY29uc3QgX1RJT0NNX1JUUyA9IDB4MDA0DQogICAgK2NvbnN0IF9BUlBIUkRfSVJE
QSA9IDc4Mw0KICAgICtjb25zdCBfVENTQlJLUCA9IDB4NTQyNQ0KICAgICtjb25zdCBfRVBJUEUg
PSAzMg0KICAgICtjb25zdCBfX19GTFQzMlhfSEFTX0RFTk9STV9fID0gMQ0KICAgICtjb25zdCBf
X0JJVFNfVUlPX0VYVF9IID0gMQ0KICAgICtjb25zdCBfSUNNUDZfUlJfRkxBR1NfVEVTVCA9IDB4
ODANCiAgICArY29uc3QgX1NZU19hbGFybSA9IF9fX05SX2FsYXJtDQogICAgK2NvbnN0IF9JRkZf
VFVOID0gMHgwMDAxDQogICAgK2NvbnN0IF9fX0VOVU1fSURUWVBFX1QgPSAxDQogICAgK2NvbnN0
IF9QUl9GUF9NT0RFX0ZSRSA9ICgxIDw8IDEpDQogICAgK2NvbnN0IF9NQUNTRUNfVkFMSURBVEVf
RElTQUJMRUQgPSAwDQogICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9UVEwgPSAzDQogICAgK2NvbnN0
IF9IQVZFX0lOT1RJRllfQUREX1dBVENIID0gMQ0KICAgICtjb25zdCBfUFJJWDE2ID0gIlgiDQog
ICAgK2NvbnN0IF9fX0ZMVF9FVkFMX01FVEhPRF9UU18xODY2MV8zX18gPSAwDQogICAgK2NvbnN0
IF9ORF9OQV9GTEFHX1JPVVRFUiA9IDB4MDAwMDAwODANCiAgICArY29uc3QgX0lQVjZfUkVDVlBB
VEhNVFUgPSA2MA0KICAgICtjb25zdCBfTUFEVl9OT1JNQUwgPSAwDQogICAgK2NvbnN0IF9GRklf
UkVHSVNURVIgPSA3DQogICAgK2NvbnN0IF9QUklkMzIgPSAiZCINCiAgICArY29uc3QgX05MQV9G
X05FVF9CWVRFT1JERVIgPSAoMSA8PCAxNCkNCiAgICArY29uc3QgX0hBVkVfRVhQTCA9IDENCiAg
ICArY29uc3QgX0lQX1JFVE9QVFMgPSA3DQogICAgK2NvbnN0IF9JUF9NVUxUSUNBU1RfSUYgPSAz
Mg0KICAgICtjb25zdCBfRVhQUl9ORVNUX01BWCA9IF9fUE9TSVgyX0VYUFJfTkVTVF9NQVgNCiAg
ICArY29uc3QgX05fUFBQID0gMw0KICAgICtjb25zdCBfX19HTElCQ19MSU5VWF9WRVJTSU9OX0NP
REUgPSAyNjcwMDgNCiAgICArY29uc3QgX0ZTX01BWF9LRVlfU0laRSA9IDY0DQogICAgK2NvbnN0
IF9QRl9JTkVUNiA9IDEwDQogICAgK2NvbnN0IF9TWVNfY2hkaXIgPSBfX19OUl9jaGRpcg0KICAg
ICtjb25zdCBfUFRSQUNFX0VWRU5UX1ZGT1JLID0gMg0KICAgICtjb25zdCBfU09fUkNWVElNRU8g
PSAyMA0KICAgICtjb25zdCBfX19OUl90aW1lcyA9IDEwMA0KICAgICtjb25zdCBfX1BPU0lYX1VJ
T19NQVhJT1YgPSAxNg0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9RVUVSSUVSX0lOVFZMID0g
MzINCiAgICArY29uc3QgX0lQX1RPUyA9IDENCiAgICArY29uc3QgX19TQ18yX1BCU19MT0NBVEUg
PSAxNzANCiAgICArY29uc3QgX05MTVNHX05PT1AgPSAweDENCiAgICArY29uc3QgX0ZTX1BPTElD
WV9GTEFHU19QQURfMzIgPSAweDAzDQogICAgK2NvbnN0IF9BUlBEX1VQREFURSA9IDB4MDENCiAg
ICArY29uc3QgX19DU19MRlNfTElOVEZMQUdTID0gMTAwMw0KICAgICtjb25zdCBfX0lPQ19ESVJN
QVNLID0gKCgxIDw8IF9fSU9DX0RJUkJJVFMpLTEpDQogICAgK2NvbnN0IF9TWVNfY2Fwc2V0ID0g
X19fTlJfY2Fwc2V0DQogICAgK2NvbnN0IF9JQ01QNl9ST1VURVJfUkVOVU1CRVJJTkcgPSAxMzgN
CiAgICArY29uc3QgX0lMTF9JTExBRFIgPSAzDQogICAgK2NvbnN0IF9fQklUU19QT1NJWF9PUFRf
SCA9IDENCiAgICArY29uc3QgX1BSX0dFVF9GUEVYQyA9IDExDQogICAgK2NvbnN0IF9QUl9DQVBC
U0VUX1JFQUQgPSAyMw0KICAgICtjb25zdCBfVENQX01ENVNJRyA9IDE0DQogICAgK2NvbnN0IF9I
QVZFX0dFVFhBVFRSID0gMQ0KICAgICtjb25zdCBfUlRNX0RFTFJVTEUgPSAzMw0KICAgICtjb25z
dCBfUlRNX05FV1NUQVRTID0gOTINCiAgICArY29uc3QgX1RDU0FGTFVTSCA9IDINCiAgICArY29u
c3QgX0lGTEFfUE9SVF9WRiA9IDENCiAgICArY29uc3QgX19CSVRTX1NDSEVEX0ggPSAxDQogICAg
K2NvbnN0IF9JUFY2X1JUSERSRFNUT1BUUyA9IDU1DQogICAgK2NvbnN0IF9fX05SX21hZHZpc2Ug
PSAyOA0KICAgICtjb25zdCBfUFJfU1BFQ19JTkRJUkVDVF9CUkFOQ0ggPSAxDQogICAgK2NvbnN0
IF9YODZfQ1I0X1RTRF9CSVQgPSAyDQogICAgK2NvbnN0IF9JRkxBX0JSX05GX0NBTExfSVA2VEFC
TEVTID0gMzcNCiAgICArY29uc3QgX1BUUkFDRV9UUkFDRU1FID0gMA0KICAgICtjb25zdCBfWDg2
X0NSMF9QRV9CSVQgPSAwDQogICAgK2NvbnN0IF9GRklfQ0xPU1VSRVMgPSAxDQogICAgK2NvbnN0
IF9JRkFfRl9NQU5BR0VURU1QQUREUiA9IDB4MTAwDQogICAgK2NvbnN0IF9TSU9DQUREUlQgPSAw
eDg5MEINCiAgICArY29uc3QgX1RDR0VUQSA9IDB4NTQwNQ0KICAgICtjb25zdCBfSUZMQV9NVFUg
PSA0DQogICAgK2NvbnN0IF9JRkxBX0JSX1JPT1RfUE9SVCA9IDEyDQogICAgK2NvbnN0IF9fQ1Nf
UE9TSVhfVjdfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUyA9IDExMzkNCiAgICArY29uc3QgX19fU0la
RU9GX1BUSFJFQURfQ09ORF9UID0gNDgNCiAgICArY29uc3QgX19fU19JRklGTyA9IDAwMTAwMDAN
CiAgICArY29uc3QgX19fUFJJNjRfUFJFRklYID0gImwiDQogICAgK2NvbnN0IF9fQ1NfUE9TSVhf
VjdfSUxQMzJfT0ZGMzJfTElOVEZMQUdTID0gMTEzNQ0KICAgICtjb25zdCBfSUZMQV9QUk9NSVND
VUlUWSA9IDMwDQogICAgK2NvbnN0IF9QUl9TRVRfQ0hJTERfU1VCUkVBUEVSID0gMzYNCiAgICAr
Y29uc3QgX1NJR1BJUEUgPSAxMw0KICAgICtjb25zdCBfVENHRVRTID0gMHg1NDAxDQogICAgK2Nv
bnN0IF9TT0xfQ0FJRiA9IDI3OA0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9NRU1CRVJTSElQ
X0lOVFZMID0gMzENCiAgICArY29uc3QgX1JURl9SRUlOU1RBVEUgPSAweDAwMDgNCiAgICArY29u
c3QgX1RDR0VUWCA9IDB4NTQzMg0KICAgICtjb25zdCBfSUZMQV9QQUQgPSA0Mg0KICAgICtjb25z
dCBfRVRIX1BfRE5BX1JDID0gMHg2MDAyDQogICAgK2NvbnN0IF9SVE1fRl9GSUJfTUFUQ0ggPSAw
eDIwMDANCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX1ZMQU5fVFVOTkVMID0gMjkNCiAgICArY29u
c3QgX1BST1RfUkVBRCA9IDB4MQ0KICAgICtjb25zdCBfUFJfU1BFQ19ESVNBQkxFID0gKDEgPDwg
MikNCiAgICArY29uc3QgX1BUUkFDRV9TRUlaRSA9IDE2OTAyDQogICAgK2NvbnN0IF9SVEZfQ0FD
SEUgPSAweDAxMDAwMDAwDQogICAgK2NvbnN0IF9fX0RFQzEyOF9NSU5fXyA9IDFFLTYxNDMNCiAg
ICArY29uc3QgX0lDTVA2X0VDSE9fUkVRVUVTVCA9IDEyOA0KICAgICtjb25zdCBfRlNfRU5DUllQ
VElPTl9NT0RFX0FFU18yNTZfR0NNID0gMg0KICAgICtjb25zdCBfX1NZU19UWVBFU19IID0gMQ0K
ICAgICtjb25zdCBfRVRIX1BfRE5BX1JUID0gMHg2MDAzDQogICAgK2NvbnN0IF9fU0NfTUVNTE9D
SyA9IDE3DQogICAgK2NvbnN0IF9TWVNfZmluaXRfbW9kdWxlID0gX19fTlJfZmluaXRfbW9kdWxl
DQogICAgK2NvbnN0IF9CUEZfQSA9IDB4MTANCiAgICArY29uc3QgX0JQRl9CID0gMHgxMA0KICAg
ICtjb25zdCBfUEZfSU5FVCA9IDINCiAgICArY29uc3QgX1NZU19ydF9zaWdwcm9jbWFzayA9IF9f
X05SX3J0X3NpZ3Byb2NtYXNrDQogICAgK2NvbnN0IF9TSUdfQVRPTUlDX01JTiA9ICgtMjE0NzQ4
MzY0Ny0xKQ0KICAgICtjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMiA9
IDENCiAgICArY29uc3QgX19fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzQgPSAxDQog
ICAgK2NvbnN0IF9TSU9DR0lGRkxBR1MgPSAweDg5MTMNCiAgICArY29uc3QgX1JFR19SOCA9IDAN
CiAgICArY29uc3QgX19fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzggPSAxDQogICAg
K2NvbnN0IF9GU19BUFBFTkRfRkwgPSAweDAwMDAwMDIwDQogICAgK2NvbnN0IF9SVEFYX0NXTkQg
PSA3DQogICAgK2NvbnN0IF9fUE9TSVgyX0NfQklORCA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04N
CiAgICArY29uc3QgX19YT1BFTl9SRUFMVElNRV9USFJFQURTID0gMQ0KICAgICtjb25zdCBfQlBG
X1cgPSAweDAwDQogICAgK2NvbnN0IF9CUEZfWCA9IDB4MDgNCiAgICArY29uc3QgX1JXSF9XUklU
RV9MSUZFX0xPTkcgPSA0DQogICAgK2NvbnN0IF9fX0dDQ19IQVZFX0RXQVJGMl9DRklfQVNNID0g
MQ0KICAgICtjb25zdCBfVENQT0xFTl9USU1FU1RBTVAgPSAxMA0KICAgICtjb25zdCBfRVRIX1Bf
Q0FJRiA9IDB4MDBGNw0KICAgICtjb25zdCBfTkRBX1BPUlQgPSA2DQogICAgK2NvbnN0IF9FUE9M
TFJESFVQID0gODE5Mg0KICAgICtjb25zdCBfX19GTFQxMjhfTUFYX18gPSAxLjENCiAgICArY29u
c3QgX1RJT0NTUlM0ODUgPSAweDU0MkYNCiAgICArY29uc3QgX19fSUZMQV9JTkVUX01BWCA9IDIN
CiAgICArY29uc3QgX1JUQVhfSU5JVFJXTkQgPSAxNA0KICAgICtjb25zdCBfX0JJVFNfVFlQRVNf
TE9DQUxFX1RfSCA9IDENCiAgICArY29uc3QgX19fTERCTF9ERUNJTUFMX0RJR19fID0gMjENCiAg
ICArY29uc3QgX0hBVkVfQVRBTkwgPSAxDQogICAgK2NvbnN0IF9YRFBfQVRUQUNIRURfRFJWID0g
MQ0KICAgICtjb25zdCBfX19BVE9NSUNfQ09OU1VNRSA9IDENCiAgICArY29uc3QgX19fTlJfbXNn
Z2V0ID0gNjgNCiAgICArY29uc3QgX19fTlJfZ2V0c29ja29wdCA9IDU1DQogICAgK2NvbnN0IF9Q
VFJESUZGX01JTiA9ICgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xKQ0KICAgICtjb25zdCBfV0lOVF9X
SURUSCA9IDMyDQogICAgK2NvbnN0IF9ORVRMSU5LX0VYVF9BQ0sgPSAxMQ0KICAgICtjb25zdCBf
U0NOdTggPSAiaGh1Ig0KICAgICtjb25zdCBfX1NDX1RIUkVBRF9ST0JVU1RfUFJJT19JTkhFUklU
ID0gMjQ3DQogICAgK2NvbnN0IF9JUF9SRUNWVE9TID0gMTMNCiAgICArY29uc3QgX05EVFBBX0lG
SU5ERVggPSAxDQogICAgK2NvbnN0IF9FVEhfVExFTiA9IDINCiAgICArY29uc3QgX0FJX0NBTk9O
TkFNRSA9IDB4MDAwMg0KICAgICtjb25zdCBfX19OUl9tbG9ja2FsbCA9IDE1MQ0KICAgICtjb25z
dCBfU0tGX0FEX0hBVFlQRSA9IDI4DQogICAgK2NvbnN0IF9fX05SX3BpcGUyID0gMjkzDQogICAg
K2NvbnN0IF9QVFJBQ0VfREVUQUNIID0gMTcNCiAgICArY29uc3QgX1NZU19zaWduYWxmZCA9IF9f
X05SX3NpZ25hbGZkDQogICAgK2NvbnN0IF9fQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUyA9
IDExMTMNCiAgICArY29uc3QgX0lQVjZfTkVYVEhPUCA9IDkNCiAgICArY29uc3QgX1JUQ0ZfRE9S
RURJUkVDVCA9IDB4MDEwMDAwMDANCiAgICArY29uc3QgX05EQV9JRklOREVYID0gOA0KICAgICtj
b25zdCBfX1NDX1BJSSA9IDUzDQogICAgK2NvbnN0IF9BRl9BVE1TVkMgPSBfUEZfQVRNU1ZDDQog
ICAgK2NvbnN0IF9QRl9QQUNLRVQgPSAxNw0KICAgICtjb25zdCBfU1lTX2Z1dGltZXNhdCA9IF9f
X05SX2Z1dGltZXNhdA0KICAgICtjb25zdCBfSVBUT1NfUFJFQ19GTEFTSCA9IF9JUFRPU19DTEFT
U19DUzMNCiAgICArY29uc3QgX0FSUEhSRF9JUEdSRSA9IDc3OA0KICAgICtjb25zdCBfX1NDX1NI
RUxMID0gMTU3DQogICAgK2NvbnN0IF9IQVZFX0xPR0wgPSAxDQogICAgK2NvbnN0IF9QT1JUX1ZE
UF9SRVNQT05TRV9JTlZBTElEX0ZPUk1BVCA9IDENCiAgICArY29uc3QgX19fVVNFX1BPU0lYMiA9
IDENCiAgICArY29uc3QgX0VOT01FTSA9IDEyDQogICAgK2NvbnN0IF9YRFBfQVRUQUNIRURfU0tC
ID0gMg0KICAgICtjb25zdCBfSU5fQ0xBU1NBX05FVCA9IDB4ZmYwMDAwMDANCiAgICArY29uc3Qg
X0VTUk1OVCA9IDY5DQogICAgK2NvbnN0IF9JUFY2X0xFQVZFX0FOWUNBU1QgPSAyOA0KICAgICtj
b25zdCBfRU5PVEVNUFRZID0gMzkNCiAgICArY29uc3QgX1BUUkFDRV9HRVRTSUdJTkZPID0gMTY4
OTgNCiAgICArY29uc3QgX19JT0NfTlJCSVRTID0gOA0KICAgICtjb25zdCBfUElQRV9CVUYgPSA0
MDk2DQogICAgK2NvbnN0IF9BRl9JU0ROID0gX1BGX0lTRE4NCiAgICArY29uc3QgX1VMT05HX0xP
TkdfTUFYID0gKF9MT05HX0xPTkdfTUFYICogMiArIDEpDQogICAgK2NvbnN0IF9MSU5LX1hTVEFU
U19UWVBFX1VOU1BFQyA9IDANCiAgICArY29uc3QgX05EVEFfTkFNRSA9IDENCiAgICArY29uc3Qg
X1JUQV9QUkVGID0gMjANCiAgICArY29uc3QgX0FSUEhSRF9OT05FID0gMHhGRkZFDQogICAgK2Nv
bnN0IF9TWVNfZ2V0c29ja25hbWUgPSBfX19OUl9nZXRzb2NrbmFtZQ0KICAgICtjb25zdCBfRUNI
T0NUTCA9IDAwMDEwMDANCiAgICArY29uc3QgX1JUTkxHUlBfSVBWNF9SVUxFID0gOA0KICAgICtj
b25zdCBfSUZMQV9CT05EX0FEX0lORk8gPSAyMw0KICAgICtjb25zdCBfSUZMQV9CUl9VTlNQRUMg
PSAwDQogICAgK2NvbnN0IF9JRkxBX0lGX05FVE5TSUQgPSA0Ng0KICAgICtjb25zdCBfT19QQVRI
ID0gX19fT19QQVRIDQogICAgK2NvbnN0IF9YODZfQ1IzX1BDSURfTk9GTFVTSF9CSVQgPSA2Mw0K
ICAgICtjb25zdCBfU1lTX3NjaGVkX2dldHBhcmFtID0gX19fTlJfc2NoZWRfZ2V0cGFyYW0NCiAg
ICArY29uc3QgX1BSX1NFVF9OT19ORVdfUFJJVlMgPSAzOA0KICAgICtjb25zdCBfSUZMQV9CT05E
X0FEX0lORk9fVU5TUEVDID0gMA0KICAgICtjb25zdCBfUlRGX0ZMT1cgPSAweDAyMDAwMDAwDQog
ICAgK2NvbnN0IF9TWVNfc2V0X21lbXBvbGljeSA9IF9fX05SX3NldF9tZW1wb2xpY3kNCiAgICAr
Y29uc3QgX1dDT05USU5VRUQgPSA4DQogICAgK2NvbnN0IF9fX0lGTEFfQk9ORF9NQVggPSAyOA0K
ICAgICtjb25zdCBfSUZGX05PRklMVEVSID0gMHgxMDAwDQogICAgK2NvbnN0IF9fX3RpbWVfdF9k
ZWZpbmVkID0gMQ0KICAgICtjb25zdCBfSUZMQV9ORVdfTkVUTlNJRCA9IDQ1DQogICAgK2NvbnN0
IF9CNjAwID0gMDAwMDAxMA0KICAgICtjb25zdCBfQVJQSFJEX0JJRiA9IDc3NQ0KICAgICtjb25z
dCBfT19EU1lOQyA9IF9fX09fRFNZTkMNCiAgICArY29uc3QgX19fTlJfbXNncmN2ID0gNzANCiAg
ICArY29uc3QgX1JUUFJPVF9SQSA9IDkNCiAgICArY29uc3QgX0lGTEFfVlJGX1VOU1BFQyA9IDAN
CiAgICArY29uc3QgX1BSX1NQRUNfTk9UX0FGRkVDVEVEID0gMA0KICAgICtjb25zdCBfTkxNX0Zf
RFVNUF9GSUxURVJFRCA9IDB4MjANCiAgICArY29uc3QgX0lGTEFfVkxBTl9RT1NfVU5TUEVDID0g
MA0KICAgICtjb25zdCBfX1NDX0RFVklDRV9JTyA9IDE0MA0KICAgICtjb25zdCBfSUZMQV9JUE9J
Ql9VTUNBU1QgPSAzDQogICAgK2NvbnN0IF9TQ0hFRF9SUiA9IDINCiAgICArY29uc3QgX1BSSW84
ID0gIm8iDQogICAgK2NvbnN0IF9fTEZTX0FTWU5DSFJPTk9VU19JTyA9IDENCiAgICArY29uc3Qg
X0lGTEFfUE9SVF9SRVFVRVNUID0gNg0KICAgICtjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fQUdH
UkVHQVRPUiA9IDENCiAgICArY29uc3QgX1BBQ0tFVF9MT09QQkFDSyA9IDUNCiAgICArY29uc3Qg
X1NZU19mZGF0YXN5bmMgPSBfX19OUl9mZGF0YXN5bmMNCiAgICArY29uc3QgX1NJT0NHSUZNQVAg
PSAweDg5NzANCiAgICArY29uc3QgX19fR0NDX0FTTV9GTEFHX09VVFBVVFNfXyA9IDENCiAgICAr
Y29uc3QgX19fSUZMQV9CT05EX1NMQVZFX01BWCA9IDkNCiAgICArY29uc3QgX1NJT0NTQVJQID0g
MHg4OTU1DQogICAgK2NvbnN0IF9TWVNfcHJsaW1pdDY0ID0gX19fTlJfcHJsaW1pdDY0DQogICAg
K2NvbnN0IF9fX0RFQzMyX01JTl9fID0gMUUtOTUNCiAgICArY29uc3QgX05MTV9GX1JFUExBQ0Ug
PSAweDEwMA0KICAgICtjb25zdCBfVElPQ09VVFEgPSAweDU0MTENCiAgICArY29uc3QgX0lGQV9D
QUNIRUlORk8gPSA2DQogICAgK2NvbnN0IF9TWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgPSAx
DQogICAgK2NvbnN0IF9TVEFUWF9CTE9DS1MgPSAweDA0MDANCiAgICArY29uc3QgX1BSX0ZQX0VY
Q19VTkQgPSAweDA0MDAwMA0KICAgICtjb25zdCBfSUZMQV9WWExBTl9HUEUgPSAyNw0KICAgICtj
b25zdCBfUEFDS0FHRV9CVUdSRVBPUlQgPSAiIg0KICAgICtjb25zdCBfSVBWNl8yMjkyRFNUT1BU
UyA9IDQNCiAgICArY29uc3QgX0lGTEFfRVhUX01BU0sgPSAyOQ0KICAgICtjb25zdCBfX19BVE9N
SUNfSExFX0FDUVVJUkUgPSA2NTUzNg0KICAgICtjb25zdCBfU1lTX3RpbWVyZmRfc2V0dGltZSA9
IF9fX05SX3RpbWVyZmRfc2V0dGltZQ0KICAgICtjb25zdCBfX19saW51eF9fID0gMQ0KICAgICtj
b25zdCBfUE9TSVhfRkFEVl9SQU5ET00gPSAxDQogICAgK2NvbnN0IF9QUklpTEVBU1QxNiA9ICJp
Ig0KICAgICtjb25zdCBfSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFUQSA9IDYNCiAgICArY29u
c3QgX19fVVNFX0lTT0M5NSA9IDENCiAgICArY29uc3QgX19IQVZFX1NUUlVDVF9URVJNSU9TX0Nf
T1NQRUVEID0gMQ0KICAgICtjb25zdCBfT19OT0ZPTExPVyA9IF9fX09fTk9GT0xMT1cNCiAgICAr
Y29uc3QgX05EQV9MSU5LX05FVE5TSUQgPSAxMA0KICAgICtjb25zdCBfX19VU0VfSVNPQzk5ID0g
MQ0KICAgICtjb25zdCBfUlRGX01TUyA9IF9SVEZfTVRVDQogICAgK2NvbnN0IF9fQklUU19TVERJ
TlRfVUlOVE5fSCA9IDENCiAgICArY29uc3QgX0ZfT0ZEX1NFVExLVyA9IDM4DQogICAgK2NvbnN0
IF9SVEFfRU5DQVAgPSAyMg0KICAgICtjb25zdCBfRUVYSVNUID0gMTcNCiAgICArY29uc3QgX1BB
Q0tFVF9WRVJTSU9OID0gMTANCiAgICArY29uc3QgX1RDUF9DTE9TRSA9IDcNCiAgICArY29uc3Qg
X1NPX0FUVEFDSF9CUEYgPSA1MA0KICAgICtjb25zdCBfUFRSQUNFX0VWRU5UX1NFQ0NPTVAgPSA3
DQogICAgK2NvbnN0IF9BUlBIUkRfQ0hBT1MgPSA1DQogICAgK2NvbnN0IF9fX0ZMVDMyX01BTlRf
RElHX18gPSAyNA0KICAgICtjb25zdCBfX19JRkxBX1ZGX0lORk9fTUFYID0gMg0KICAgICtjb25z
dCBfRVRIX1BfQkFUTUFOID0gMHg0MzA1DQogICAgK2NvbnN0IF9fU1RBVF9WRVIgPSBfX1NUQVRf
VkVSX0xJTlVYDQogICAgK2NvbnN0IF9QT0xMX01TRyA9IDMNCiAgICArY29uc3QgX1NZU19zd2Fw
b24gPSBfX19OUl9zd2Fwb24NCiAgICArY29uc3QgX1JURl9BRERSQ09ORiA9IDB4MDAwNDAwMDAN
CiAgICArY29uc3QgX19fTERCTF9IQVNfUVVJRVRfTkFOX18gPSAxDQogICAgK2NvbnN0IF9QRl9N
UExTID0gMjgNCiAgICArY29uc3QgX19CSVRTX1NJR0lORk9fQVJDSF9IID0gMQ0KICAgICtjb25z
dCBfSUNNUDZfRklMVEVSX1BBU1NPTkxZID0gNA0KICAgICtjb25zdCBfSVBfVFRMID0gMg0KICAg
ICtjb25zdCBfU1lTX3J0X3NpZ3F1ZXVlaW5mbyA9IF9fX05SX3J0X3NpZ3F1ZXVlaW5mbw0KICAg
ICtjb25zdCBfX1NDX1hPUEVOX0VOSF9JMThOID0gOTMNCiAgICArY29uc3QgX19fTlJfdGltZXJf
c2V0dGltZSA9IDIyMw0KICAgICtjb25zdCBfUFRSQUNFX09fU1VTUEVORF9TRUNDT01QID0gMjA5
NzE1Mg0KICAgICtjb25zdCBfU1lTX2dldHBtc2cgPSBfX19OUl9nZXRwbXNnDQogICAgK2NvbnN0
IF9fU1lTX1JFU09VUkNFX0ggPSAxDQogICAgK2NvbnN0IF9ERUZGSUxFTU9ERSA9IChfU19JUlVT
UnxfU19JV1VTUnxfU19JUkdSUHxfU19JV0dSUHxfU19JUk9USHxfU19JV09USCkNCiAgICArY29u
c3QgX1JUQV9EU1QgPSAxDQogICAgK2NvbnN0IF9fX1NURENfSUVDXzU1OV9fID0gMQ0KICAgICtj
b25zdCBfU1lTX2FyY2hfcHJjdGwgPSBfX19OUl9hcmNoX3ByY3RsDQogICAgK2NvbnN0IF9BRl9O
RVRST00gPSBfUEZfTkVUUk9NDQogICAgK2NvbnN0IF9JUFRPU19USFJPVUdIUFVUID0gMHgwOA0K
ICAgICtjb25zdCBfTkRUQV9USFJFU0gyID0gMw0KICAgICtjb25zdCBfQ0xPQ0tfQk9PVFRJTUVf
QUxBUk0gPSA5DQogICAgK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTU9ERSA9IDENCiAgICArY29uc3Qg
X1NfSVdSSVRFID0gX1NfSVdVU1INCiAgICArY29uc3QgX0lDTVA2X1BBUkFNUFJPQl9PUFRJT04g
PSAyDQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9DRkxBR1MgPSAxMTI0DQog
ICAgK2NvbnN0IF9FVEhfUF9UUl84MDJfMiA9IDB4MDAxMQ0KICAgICtjb25zdCBfVElPQ01fRFRS
ID0gMHgwMDINCiAgICArY29uc3QgX19TQ19VU0VSX0dST1VQU19SID0gMTY3DQogICAgK2NvbnN0
IF9FVEhfUF9BTEwgPSAweDAwMDMNCiAgICArY29uc3QgX1NZU19mY2hvd24gPSBfX19OUl9mY2hv
d24NCiAgICArY29uc3QgX0lQUE9SVF9TWVNUQVQgPSAxMQ0KICAgICtjb25zdCBfX19MT05HX01B
WF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmDQogICAgK2NvbnN0IF9TSUdTVEtGTFQgPSAxNg0KICAg
ICtjb25zdCBfUlRGX01PRElGSUVEID0gMHgwMDIwDQogICAgK2NvbnN0IF9QUklPX1BST0NFU1Mg
PSAwDQogICAgK2NvbnN0IF9fX05SX3NlbWdldCA9IDY0DQogICAgK2NvbnN0IF9JRkFfRl9TVEFC
TEVfUFJJVkFDWSA9IDB4ODAwDQogICAgK2NvbnN0IF9SVE5IX0NPTVBBUkVfTUFTSyA9IChfUlRO
SF9GX0RFQUQgfCBfUlROSF9GX0xJTktET1dOIHwgX1JUTkhfRl9PRkZMT0FEKQ0KICAgICtjb25z
dCBfTkxNX0ZfQUNLX1RMVlMgPSAweDIwMA0KICAgICtjb25zdCBfTF9JTkNSID0gMQ0KICAgICtj
b25zdCBfUldIX1dSSVRFX0xJRkVfU0hPUlQgPSAyDQogICAgK2NvbnN0IF9FQUZOT1NVUFBPUlQg
PSA5Nw0KICAgICtjb25zdCBfSUZMQV9CT05EX0FEX0xBQ1BfUkFURSA9IDIxDQogICAgK2NvbnN0
IF9TWVNfc2VsZWN0ID0gX19fTlJfc2VsZWN0DQogICAgK2NvbnN0IF9JRkxBX1RVTl9OVU1fUVVF
VUVTID0gOA0KICAgICtjb25zdCBfX19TSV9NQVhfU0laRSA9IDEyOA0KICAgICtjb25zdCBfSUZM
QV9DT1NUID0gOA0KICAgICtjb25zdCBfTkxNU0dfRE9ORSA9IDB4Mw0KICAgICtjb25zdCBfX19O
Ul9zdGF0ZnMgPSAxMzcNCiAgICArY29uc3QgX19fRl9HRVRPV05fRVggPSAxNg0KICAgICtjb25z
dCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSUJTID0gMTEyMg0KICAgICtjb25zdCBfX19O
Ul9nZXRkZW50czY0ID0gMjE3DQogICAgK2NvbnN0IF9IQVZFX0lOT1RJRllfSU5JVDEgPSAxDQog
ICAgK2NvbnN0IF9BSV9WNE1BUFBFRCA9IDB4MDAwOA0KICAgICtjb25zdCBfU0NOdUZBU1Q4ID0g
ImhodSINCiAgICArY29uc3QgX19fTlJfZXBvbGxfY3RsID0gMjMzDQogICAgK2NvbnN0IF9BQ0NF
U1NQRVJNUyA9IChfU19JUldYVXxfU19JUldYR3xfU19JUldYTykNCiAgICArY29uc3QgX1RDQV9E
VU1QX0lOVklTSUJMRSA9IDEwDQogICAgK2NvbnN0IF9TSUdFVl9USFJFQURfSUQgPSA0DQogICAg
K2NvbnN0IF9GRklfVFlQRV9JTlQgPSAxDQogICAgK2NvbnN0IF9OTF9BUkdNQVggPSBfX1BPU0lY
X0FSR19NQVgNCiAgICArY29uc3QgX1NTX0RJU0FCTEUgPSAyDQogICAgK2NvbnN0IF9FVEhfUF9D
QU4gPSAweDAwMEMNCiAgICArY29uc3QgX19fU0laRU9GX1BUSFJFQURfQkFSUklFUkFUVFJfVCA9
IDQNCiAgICArY29uc3QgX19fRkxUX0VWQUxfTUVUSE9EX18gPSAwDQogICAgK2NvbnN0IF9fX05S
X3NlbW9wID0gNjUNCiAgICArY29uc3QgX1BfQUxMID0gMA0KICAgICtjb25zdCBfRVRIX1BfTVBM
U19NQyA9IDB4ODg0OA0KICAgICtjb25zdCBfX19OUl9wd3JpdGV2MiA9IDMyOA0KICAgICtjb25z
dCBfU1lTX2FjY2VwdDQgPSBfX19OUl9hY2NlcHQ0DQogICAgK2NvbnN0IF9fX1NJWkVPRl9QVFJE
SUZGX1RfXyA9IDgNCiAgICArY29uc3QgX19fRkxUMzJYX0RFTk9STV9NSU5fXyA9IDEuMQ0KICAg
ICtjb25zdCBfSUZMQV9CT05EX1NMQVZFX1FVRVVFX0lEID0gNQ0KICAgICtjb25zdCBfUlRQUk9U
X1hPUlAgPSAxNA0KICAgICtjb25zdCBfU1lTX3Byb2Nlc3Nfdm1fd3JpdGV2ID0gX19fTlJfcHJv
Y2Vzc192bV93cml0ZXYNCiAgICArY29uc3QgX19fVENBX1JPT1RfTUFYID0gNQ0KICAgICtjb25z
dCBfSUZMQV9PUEVSU1RBVEUgPSAxNg0KICAgICtjb25zdCBfSUNNUDZfUlJfUENPVVNFX0ZMQUdT
X0RFQ1JQTFRJTUUgPSAweDQwDQogICAgK2NvbnN0IF9ORFRQQV9QUk9YWV9ERUxBWSA9IDEzDQog
ICAgK2NvbnN0IF9fX1JMSU1JVF9OUFJPQyA9IDYNCiAgICArY29uc3QgX1NZU19xdW90YWN0bCA9
IF9fX05SX3F1b3RhY3RsDQogICAgK2NvbnN0IF9fSU9DX05PTkUgPSAwDQogICAgK2NvbnN0IF9J
RkxBX0JPTkRfU0xBVkVfTUlJX1NUQVRVUyA9IDINCiAgICArY29uc3QgX1NPX1NFQ1VSSVRZX0VO
Q1JZUFRJT05fVFJBTlNQT1JUID0gMjMNCiAgICArY29uc3QgX1NUQVRYX01PREUgPSAweDAwMDIN
CiAgICArY29uc3QgX0ZGSV9UWVBFX1VJTlQ4ID0gNQ0KICAgICtjb25zdCBfUFJPVF9HUk9XU0RP
V04gPSAweDAxMDAwMDAwDQogICAgK2NvbnN0IF9NQVBfR1JPV1NET1dOID0gMHgwMDEwMA0KICAg
ICtjb25zdCBfRUJBRE1TRyA9IDc0DQogICAgK2NvbnN0IF9NQVBfUE9QVUxBVEUgPSAweDA4MDAw
DQogICAgK2NvbnN0IF9USU1FX0RFTCA9IDINCiAgICArY29uc3QgX19fRl9TRVRPV04gPSA4DQog
ICAgK2NvbnN0IF9VSU5UMTZfTUFYID0gKDY1NTM1KQ0KICAgICtjb25zdCBfTkxfTEFOR01BWCA9
IF9fUE9TSVgyX0xJTkVfTUFYDQogICAgK2NvbnN0IF9NU19MQVpZVElNRSA9IDMzNTU0NDMyDQog
ICAgK2NvbnN0IF9TWVNfbWtkaXIgPSBfX19OUl9ta2Rpcg0KICAgICtjb25zdCBfSUZMQV9NQUNT
RUNfV0lORE9XID0gNQ0KICAgICtjb25zdCBfX19OUl9pb19nZXRldmVudHMgPSAyMDgNCiAgICAr
Y29uc3QgX0ZGSV9ERUZBVUxUX0FCSSA9IDINCiAgICArY29uc3QgX1NZU19yZW5hbWUgPSBfX19O
Ul9yZW5hbWUNCiAgICArY29uc3QgX0VUSF9QX0RTQSA9IDB4MDAxQg0KICAgICtjb25zdCBfUFRS
QUNFX1NFVF9USFJFQURfQVJFQSA9IDI2DQogICAgK2NvbnN0IF9JUF9SRUNWVFRMID0gMTINCiAg
ICArY29uc3QgX1hEUF9GTEFHU19IV19NT0RFID0gKDEgPDwgMykNCiAgICArY29uc3QgX01BWF9I
QU5ETEVfU1ogPSAxMjgNCiAgICArY29uc3QgX0lGRl9ERUJVRyA9IDQNCiAgICArY29uc3QgX0FG
X0VDT05FVCA9IF9QRl9FQ09ORVQNCiAgICArY29uc3QgX1RDQV9SQVRFID0gNQ0KICAgICtjb25z
dCBfX1hPUEVOX0VOSF9JMThOID0gMQ0KICAgICtjb25zdCBfX1NDXzJfRk9SVF9SVU4gPSA1MA0K
ICAgICtjb25zdCBfTkxNU0dFUlJfQVRUUl9DT09LSUUgPSAzDQogICAgK2NvbnN0IF9fX05EVFBB
X01BWCA9IDE5DQogICAgK2NvbnN0IF9JRkxBX05VTV9WRiA9IDIxDQogICAgK2NvbnN0IF9SVEFf
RVhQSVJFUyA9IDIzDQogICAgK2NvbnN0IF9QT0xMX09VVCA9IDINCiAgICArY29uc3QgX19CSVRT
X1NTX0ZMQUdTX0ggPSAxDQogICAgK2NvbnN0IF9JUE9QVF9OT1AgPSAxDQogICAgK2NvbnN0IF9J
Rk5BTVNJWiA9IF9JRl9OQU1FU0laRQ0KICAgICtjb25zdCBfU1lTX3ZoYW5ndXAgPSBfX19OUl92
aGFuZ3VwDQogICAgK2NvbnN0IF9GU19IVUdFX0ZJTEVfRkwgPSAweDAwMDQwMDAwDQogICAgK2Nv
bnN0IF9TSUdUUkFQID0gNQ0KICAgICtjb25zdCBfX19GTFQxMjhfRElHX18gPSAzMw0KICAgICtj
b25zdCBfU1lTX3RpbWVyZmRfZ2V0dGltZSA9IF9fX05SX3RpbWVyZmRfZ2V0dGltZQ0KICAgICtj
b25zdCBfQlBGX0xFTiA9IDB4ODANCiAgICArY29uc3QgX0JJR19FTkRJQU4gPSBfX19CSUdfRU5E
SUFODQogICAgK2NvbnN0IF9SVE1HUlBfSVBWNF9ST1VURSA9IDB4NDANCiAgICArY29uc3QgX0Ix
MDAwMDAwID0gMDAxMDAxMA0KICAgICtjb25zdCBfU1lTX2dldGNwdSA9IF9fX05SX2dldGNwdQ0K
ICAgICtjb25zdCBfX19OUl9tcV90aW1lZHJlY2VpdmUgPSAyNDMNCiAgICArY29uc3QgX19QQVRI
X05FVFdPUktTID0gIi9ldGMvbmV0d29ya3MiDQogICAgK2NvbnN0IF9VU0lOR19TUExJVF9TVEFD
SyA9IDENCiAgICArY29uc3QgX0ZGSV9UWVBFX1NJTlQzMiA9IDEwDQogICAgK2NvbnN0IF9fX1JM
SU1JVF9PRklMRSA9IDcNCiAgICArY29uc3QgX0lGTEFfQlJfTUNBU1RfUVVFUllfUkVTUE9OU0Vf
SU5UVkwgPSAzNA0KICAgICtjb25zdCBfU0lPQ0dJRk1FTSA9IDB4ODkxZg0KICAgICtjb25zdCBf
SU5UX0ZBU1QxNl9XSURUSCA9IF9fX1dPUkRTSVpFDQogICAgK2NvbnN0IF9IQVZFX1NZU19TRUxF
Q1RfSCA9IDENCiAgICArY29uc3QgX09fV1JPTkxZID0gMDENCiAgICArY29uc3QgX19fTlJfcHJl
YWR2ID0gMjk1DQogICAgK2NvbnN0IF9TWVNfYWNjdCA9IF9fX05SX2FjY3QNCiAgICArY29uc3Qg
X0ROX1JFTkFNRSA9IDB4MDAwMDAwMTANCiAgICArY29uc3QgX1NZU19zZXRyZXVpZCA9IF9fX05S
X3NldHJldWlkDQogICAgK2NvbnN0IF9JRkxBX1hEUF9EUlZfUFJPR19JRCA9IDUNCiAgICArY29u
c3QgX0VBTFJFQURZID0gMTE0DQogICAgK2NvbnN0IF9ORFRQQV9RVUVVRV9MRU4gPSA4DQogICAg
K2NvbnN0IF9fX0dMSUJDX1VTRV9JRUNfNjA1NTlfRlVOQ1NfRVhUID0gMQ0KICAgICtjb25zdCBf
SUxMX1BSVk9QQyA9IDUNCiAgICArY29uc3QgX1RVTkdFVEZFQVRVUkVTX3ZhbCA9IDIxNDc3Njc1
MDMNCiAgICArY29uc3QgX1JUTkxHUlBfSVBWNl9ST1VURSA9IDExDQogICAgK2NvbnN0IF9fX05S
X3RpbWVyX2dldHRpbWUgPSAyMjQNCiAgICArY29uc3QgX0VUSF9QX0FPRSA9IDB4ODhBMg0KICAg
ICtjb25zdCBfX19OUl9nZXRncm91cHMgPSAxMTUNCiAgICArY29uc3QgX1NZU19yc2VxID0gX19f
TlJfcnNlcQ0KICAgICtjb25zdCBfRklPUVNJWkUgPSAweDU0NjANCiAgICArY29uc3QgX0lQT1BU
X0NPTlRST0wgPSAweDAwDQogICAgK2NvbnN0IF9fX1NJX0VSUk5PX1RIRU5fQ09ERSA9IDENCiAg
ICArY29uc3QgX0ZQRV9JTlRESVYgPSAxDQogICAgK2NvbnN0IF9NU19OT0FUSU1FID0gMTAyNA0K
ICAgICtjb25zdCBfQ1g4Nl9ESVIwID0gMHhmZQ0KICAgICtjb25zdCBfX19OUl9wZXJmX2V2ZW50
X29wZW4gPSAyOTgNCiAgICArY29uc3QgX0ZGSV9CQURfQUJJID0gMg0KICAgICtjb25zdCBfX19O
Ul9nZXRfbWVtcG9saWN5ID0gMjM5DQogICAgK2NvbnN0IF9NQ0xfQ1VSUkVOVCA9IDENCiAgICAr
Y29uc3QgX0lQX1hGUk1fUE9MSUNZID0gMTcNCiAgICArY29uc3QgX19fU0laRU9GX1NIT1JUX18g
PSAyDQogICAgK2NvbnN0IF9TWVNfZnN0YXQgPSBfX19OUl9mc3RhdA0KICAgICtjb25zdCBfSUZM
QV9WRklORk9fTElTVCA9IDIyDQogICAgK2NvbnN0IF9UQ1BfRklOX1dBSVQyID0gNQ0KICAgICtj
b25zdCBfX1NDX0NQVVRJTUUgPSAxMzgNCiAgICArY29uc3QgX1RVTl9GX1RTT19FQ04gPSAweDA4
DQogICAgK2NvbnN0IF9fX1dPUkRTSVpFX1RJTUU2NF9DT01QQVQzMiA9IDENCiAgICArY29uc3Qg
X0lGTEFfSU5GT19VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9FVEhfUF9YRFNBID0gMHgwMEY4DQog
ICAgK2NvbnN0IF9JUF9QTVRVRElTQyA9IDEwDQogICAgK2NvbnN0IF9BVF9SRU1PVkVESVIgPSAw
eDIwMA0KICAgICtjb25zdCBfVElPQ1NXSU5TWiA9IDB4NTQxNA0KICAgICtjb25zdCBfX19GTFQz
Ml9IQVNfREVOT1JNX18gPSAxDQogICAgK2NvbnN0IF9GU0xBQkVMX01BWCA9IDI1Ng0KICAgICtj
b25zdCBfT19OT05CTE9DSyA9IDA0MDAwDQogICAgK2NvbnN0IF9GX0dFVF9TRUFMUyA9IDEwMzQN
CiAgICArY29uc3QgX1BBQ0tFVF9UWF9SSU5HID0gMTMNCiAgICArY29uc3QgX1RDUF9NU1NfREVG
QVVMVCA9IDUzNg0KICAgICtjb25zdCBfQkNfRElNX01BWCA9IF9fUE9TSVgyX0JDX0RJTV9NQVgN
CiAgICArY29uc3QgX0lQT1BUX0xTUlIgPSAxMzENCiAgICArY29uc3QgX19TQ19WN19MUDY0X09G
RjY0ID0gMjM5DQogICAgK2NvbnN0IF9QUl9HRVRfUERFQVRIU0lHID0gMg0KICAgICtjb25zdCBf
U1lTX3N5bWxpbmsgPSBfX19OUl9zeW1saW5rDQogICAgK2NvbnN0IF9fX0RFQzY0X01BTlRfRElH
X18gPSAxNg0KICAgICtjb25zdCBfUE9SVF9TRUxGX1ZGID0gLTENCiAgICArY29uc3QgX19TQ19T
WU1MT09QX01BWCA9IDE3Mw0KICAgICtjb25zdCBfWERQX0ZMQUdTX1VQREFURV9JRl9OT0VYSVNU
ID0gKDEgPDwgMCkNCiAgICArY29uc3QgX01BQ1ZMQU5fTUFDQUREUl9BREQgPSAwDQogICAgK2Nv
bnN0IF9fR1JQX0ggPSAxDQogICAgK2NvbnN0IF9fX05SX2RlbGV0ZV9tb2R1bGUgPSAxNzYNCiAg
ICArY29uc3QgX1NZU19zZW5kdG8gPSBfX19OUl9zZW5kdG8NCiAgICArY29uc3QgX0lGTEFfVkxB
Tl9RT1NfTUFQUElORyA9IDENCiAgICArY29uc3QgX1NJR1RFUk0gPSAxNQ0KICAgICtjb25zdCBf
UFJfU1ZFX0dFVF9WTCA9IDUxDQogICAgK2NvbnN0IF9fQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElC
UyA9IDExMTQNCiAgICArY29uc3QgX0lGTEFfWERQX0hXX1BST0dfSUQgPSA3DQogICAgK2NvbnN0
IF9fU1lTX1VDT05URVhUX0ggPSAxDQogICAgK2NvbnN0IF9fX05SX3JlYWRsaW5rYXQgPSAyNjcN
CiAgICArY29uc3QgX0lGTEFfR1RQX1VOU1BFQyA9IDANCiAgICArY29uc3QgX1ZMTkVYVCA9IDE1
DQogICAgK2NvbnN0IF9QT1NJWF9NQURWX1dJTExORUVEID0gMw0KICAgICtjb25zdCBfX19ydXNh
Z2VfZGVmaW5lZCA9IDENCiAgICArY29uc3QgX1NZU19zZWN1cml0eSA9IF9fX05SX3NlY3VyaXR5
DQogICAgK2NvbnN0IF9YODZfQ1I0X1NNQVBfQklUID0gMjENCiAgICArY29uc3QgX1RVTl9GX1RT
TzYgPSAweDA0DQogICAgK2NvbnN0IF9BRl9DQU4gPSBfUEZfQ0FODQogICAgK2NvbnN0IF9fX05S
X3J0X3NpZ3Byb2NtYXNrID0gMTQNCiAgICArY29uc3QgX0lOVF9MRUFTVDE2X1dJRFRIID0gMTYN
CiAgICArY29uc3QgX19fTlJfZmxvY2sgPSA3Mw0KICAgICtjb25zdCBfQ0xPTkVfUEFSRU5UID0g
MHgwMDAwODAwMA0KICAgICtjb25zdCBfUlRBX0FMSUdOVE8gPSA0DQogICAgK2NvbnN0IF9QT1NJ
WF9NQURWX1NFUVVFTlRJQUwgPSAyDQogICAgK2NvbnN0IF9TWVNfc2V0aG9zdG5hbWUgPSBfX19O
Ul9zZXRob3N0bmFtZQ0KICAgICtjb25zdCBfU1lTX3ZzZXJ2ZXIgPSBfX19OUl92c2VydmVyDQog
ICAgK2NvbnN0IF9YODZfRUZMQUdTX05UX0JJVCA9IDE0DQogICAgK2NvbnN0IF9NTlRfRVhQSVJF
ID0gNA0KICAgICtjb25zdCBfUEZfU01DID0gNDMNCiAgICArY29uc3QgX0VBSV9OT05BTUUgPSAt
Mg0KICAgICtjb25zdCBfX19OUl9yZXN0YXJ0X3N5c2NhbGwgPSAyMTkNCiAgICArY29uc3QgX19T
Q19USFJFQURfS0VZU19NQVggPSA3NA0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9TVEFSVFVQ
X1FVRVJZX0lOVFZMID0gMzUNCiAgICArY29uc3QgX0lDTVA2X0lORk9NU0dfTUFTSyA9IDB4ODAN
CiAgICArY29uc3QgX0lQT0lCX01PREVfQ09OTkVDVEVEID0gMQ0KICAgICtjb25zdCBfQ0xPQ0FM
ID0gMDAwNDAwMA0KICAgICtjb25zdCBfSEFWRV9TWVNfVVNFUl9IID0gMQ0KICAgICtjb25zdCBf
WDg2X0VGTEFHU19JT1BMX0JJVCA9IDEyDQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9ST09UX0lE
ID0gMTMNCiAgICArY29uc3QgX1RDU0VUQSA9IDB4NTQwNg0KICAgICtjb25zdCBfU1lTX3JlYWRh
aGVhZCA9IF9fX05SX3JlYWRhaGVhZA0KICAgICtjb25zdCBfSUZMQV9TVEFUUzY0ID0gMjMNCiAg
ICArY29uc3QgX19TQ19VSU5UX01BWCA9IDExNg0KICAgICtjb25zdCBfUFRSQUNFX1BFRUtTSUdJ
TkZPID0gMTY5MDUNCiAgICArY29uc3QgX1g4Nl9DUjRfVk1FX0JJVCA9IDANCiAgICArY29uc3Qg
X19YT1BFTl9TT1VSQ0VfRVhURU5ERUQgPSAxDQogICAgK2NvbnN0IF9fX1VTRV9MQVJHRUZJTEUg
PSAxDQogICAgK2NvbnN0IF9fX1NJWkVfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYNCiAgICAr
Y29uc3QgX1NLRl9BRF9BTFVfWE9SX1ggPSA0MA0KICAgICtjb25zdCBfX0lOVFRZUEVTX0ggPSAx
DQogICAgK2NvbnN0IF9SVE5IX0ZfUEVSVkFTSVZFID0gMg0KICAgICtjb25zdCBfU09fVElNRVNU
QU1QID0gMjkNCiAgICArY29uc3QgX1JUTVNHX09WRVJSVU4gPSBfTkxNU0dfT1ZFUlJVTg0KICAg
ICtjb25zdCBfQlVTX01DRUVSUl9BTyA9IDUNCiAgICArY29uc3QgX19fSUZMQV9NQUNWTEFOX01B
WCA9IDcNCiAgICArY29uc3QgX0lQVE9TX0VDTl9NQVNLID0gMHgwMw0KICAgICtjb25zdCBfQlVT
X01DRUVSUl9BUiA9IDQNCiAgICArY29uc3QgX0I1MDAwMDAgPSAwMDEwMDA1DQogICAgK2NvbnN0
IF9fX1NURENfSE9TVEVEX18gPSAxDQogICAgK2NvbnN0IF9fX0lOVF9MRUFTVDMyX1dJRFRIX18g
PSAzMg0KICAgICtjb25zdCBfU0lPQ1NJRkxJTksgPSAweDg5MTENCiAgICArY29uc3QgX1JFTkFN
RV9FWENIQU5HRSA9ICgxIDw8IDEpDQogICAgK2NvbnN0IF9NQURWX0RPRk9SSyA9IDExDQogICAg
K2NvbnN0IF9fU0NfWEJTNV9MUDY0X09GRjY0ID0gMTI3DQogICAgK2NvbnN0IF9fTEFSR0VGSUxF
NjRfU09VUkNFID0gMQ0KICAgICtjb25zdCBfU09fRE9OVFJPVVRFID0gNQ0KICAgICtjb25zdCBf
X1NDX1RSQUNFX0VWRU5UX0ZJTFRFUiA9IDE4Mg0KICAgICtjb25zdCBfRl9TRUFMX1dSSVRFID0g
MHgwMDA4DQogICAgK2NvbnN0IF9TVERFUlJfRklMRU5PID0gMg0KICAgICtjb25zdCBfVENQX1NF
TkRfUVVFVUUgPSAyDQogICAgK2NvbnN0IF9JUFZMQU5fTU9ERV9NQVggPSAzDQogICAgK2NvbnN0
IF9fX09fTk9BVElNRSA9IDAxMDAwMDAwDQogICAgK2NvbnN0IF9QRl9TTkEgPSAyMg0KICAgICtj
b25zdCBfSUZMQV9WRl9TVEFUU19SWF9EUk9QUEVEID0gNw0KICAgICtjb25zdCBfU09fUEFTU1NF
QyA9IDM0DQogICAgK2NvbnN0IF9JR05QQVIgPSAwMDAwMDA0DQogICAgK2NvbnN0IF9TWVNfdGlt
ZSA9IF9fX05SX3RpbWUNCiAgICArY29uc3QgX1RDUF9OT1RTRU5UX0xPV0FUID0gMjUNCiAgICAr
Y29uc3QgX0lGTEFfVlhMQU5fR1JPVVAgPSAyDQogICAgK2NvbnN0IF9OT0ZMU0ggPSAwMDAwMjAw
DQogICAgK2NvbnN0IF9TT0xfRENDUCA9IDI2OQ0KICAgICtjb25zdCBfU1lTX3N5c2xvZyA9IF9f
X05SX3N5c2xvZw0KICAgICtjb25zdCBfU1lTX2lvX2dldGV2ZW50cyA9IF9fX05SX2lvX2dldGV2
ZW50cw0KICAgICtjb25zdCBfUlRNX05FV01EQiA9IDg0DQogICAgK2NvbnN0IF9JRkxBX0lORk9f
U0xBVkVfS0lORCA9IDQNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fTDJNSVNTID0gMTMNCiAgICAr
Y29uc3QgX19TQ19MRVZFTDNfQ0FDSEVfU0laRSA9IDE5NA0KICAgICtjb25zdCBfSEFWRV9MSU5V
WF9JRl9BRERSX0ggPSAxDQogICAgK2NvbnN0IF9PX0NSRUFUID0gMDEwMA0KICAgICtjb25zdCBf
RU5PREVWID0gMTkNCiAgICArY29uc3QgX19fRkxUMzJfSEFTX1FVSUVUX05BTl9fID0gMQ0KICAg
ICtjb25zdCBfVElPQ0dQR1JQX3ZhbCA9IDIxNTE5DQogICAgK2NvbnN0IF9TQ051TEVBU1QxNiA9
ICJodSINCiAgICArY29uc3QgX19fTlJfcG9sbCA9IDcNCiAgICArY29uc3QgX19TQ19USFJFQURf
UFJJT19JTkhFUklUID0gODANCiAgICArY29uc3QgX0dBSV9OT1dBSVQgPSAxDQogICAgK2NvbnN0
IF9JRkFfRl9OT1BSRUZJWFJPVVRFID0gMHgyMDANCiAgICArY29uc3QgX1NZU193cml0ZSA9IF9f
X05SX3dyaXRlDQogICAgK2NvbnN0IF9TWVNfZmFub3RpZnlfaW5pdCA9IF9fX05SX2Zhbm90aWZ5
X2luaXQNCiAgICArY29uc3QgX0VUSF9QX0FSUCA9IDB4MDgwNg0KICAgICtjb25zdCBfX19OUl9p
b3BsID0gMTcyDQogICAgK2NvbnN0IF9fX0ZMVDMyWF9NQVhfXyA9IDEuMQ0KICAgICtjb25zdCBf
RUNIT0UgPSAwMDAwMDIwDQogICAgK2NvbnN0IF9JUE9QVF9UU19UU0FOREFERFIgPSAxDQogICAg
K2NvbnN0IF9TT19QRUVSQ1JFRCA9IDE3DQogICAgK2NvbnN0IF9JRkxBX0JSX0hFTExPX1RJTUUg
PSAyDQogICAgK2NvbnN0IF9GQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UgPSAweDA4DQogICAgK2Nv
bnN0IF9fU0NfMl9QQlNfQ0hFQ0tQT0lOVCA9IDE3NQ0KICAgICtjb25zdCBfRUNIT0sgPSAwMDAw
MDQwDQogICAgK2NvbnN0IF9JRkxBX0lQVkxBTl9NT0RFID0gMQ0KICAgICtjb25zdCBfSVBWNl9K
T0lOX0FOWUNBU1QgPSAyNw0KICAgICtjb25zdCBfRUFJX0lOUFJPR1JFU1MgPSAtMTAwDQogICAg
K2NvbnN0IF9SVE5IX0FMSUdOVE8gPSA0DQogICAgK2NvbnN0IF9JUE9QVF9TSUQgPSBfSVBPUFRf
U0FUSUQNCiAgICArY29uc3QgX19fRkxUMzJfTUFYX0VYUF9fID0gMTI4DQogICAgK2NvbnN0IF9O
RF9PUFRfVEFSR0VUX0xJTktBRERSID0gMg0KICAgICtjb25zdCBfRl9HRVRfRklMRV9SV19ISU5U
ID0gMTAzNw0KICAgICtjb25zdCBfRkZJX0ZJUlNUX0FCSSA9IDANCiAgICArY29uc3QgX05FVExJ
TktfRUNSWVBURlMgPSAxOQ0KICAgICtjb25zdCBfQ1g4Nl9HQ1IgPSAweGI4DQogICAgK2NvbnN0
IF9JUF9ST1VURVJfQUxFUlQgPSA1DQogICAgK2NvbnN0IF9fX05SX3NwbGljZSA9IDI3NQ0KICAg
ICtjb25zdCBfVElPQ1NDVFRZX3ZhbCA9IDIxNTE4DQogICAgK2NvbnN0IF9fX05SX2tleWN0bCA9
IDI1MA0KICAgICtjb25zdCBfTVNfTk9TRUMgPSAoMTw8MjgpDQogICAgK2NvbnN0IF9OTE1fRl9D
QVBQRUQgPSAweDEwMA0KICAgICtjb25zdCBfX1NDX05FVFdPUktJTkcgPSAxNTINCiAgICArY29u
c3QgX19fQVRPTUlDX1JFTEVBU0UgPSAzDQogICAgK2NvbnN0IF9JRkxBX1ZGX1VOU1BFQyA9IDAN
CiAgICArY29uc3QgX19fTlJfZmNobW9kYXQgPSAyNjgNCiAgICArY29uc3QgX1JURl9IT1NUID0g
MHgwMDA0DQogICAgK2NvbnN0IF9JRkZfUEVSU0lTVCA9IDB4MDgwMA0KICAgICtjb25zdCBfRlNf
Tk9DT01QX0ZMID0gMHgwMDAwMDQwMA0KICAgICtjb25zdCBfU09fU0VDVVJJVFlfQVVUSEVOVElD
QVRJT04gPSAyMg0KICAgICtjb25zdCBfQlBGX0pFUSA9IDB4MTANCiAgICArY29uc3QgX0ZGSV9U
WVBFX1VJTlQzMiA9IDkNCiAgICArY29uc3QgX1NZU19pbm90aWZ5X2FkZF93YXRjaCA9IF9fX05S
X2lub3RpZnlfYWRkX3dhdGNoDQogICAgK2NvbnN0IF9QT1NJWF9NQURWX1JBTkRPTSA9IDENCiAg
ICArY29uc3QgX1JURl9NVUxUSUNBU1QgPSAweDIwMDAwMDAwDQogICAgK2NvbnN0IF9OVFBfQVBJ
ID0gNA0KICAgICtjb25zdCBfSVBWNl9NVUxUSUNBU1RfSUYgPSAxNw0KICAgICtjb25zdCBfU09f
TUFYX1BBQ0lOR19SQVRFID0gNDcNCiAgICArY29uc3QgX0hBVkVfTE9HMTBMID0gMQ0KICAgICtj
b25zdCBfSUZMQV9WRl9SU1NfUVVFUllfRU4gPSA3DQogICAgK2NvbnN0IF9fX0ZMVDY0X01BWF8x
MF9FWFBfXyA9IDMwOA0KICAgICtjb25zdCBfUFRSQUNFX1NZU0VNVV9TSU5HTEVTVEVQID0gMzIN
CiAgICArY29uc3QgX1NZU19kdXAgPSBfX19OUl9kdXANCiAgICArY29uc3QgX0FSUEhSRF9JRUVF
ODAyMTU0X1BIWSA9IDgwNQ0KICAgICtjb25zdCBfX19OUl9pb19zZXR1cCA9IDIwNg0KICAgICtj
b25zdCBfSVBPUFRfU1NSUiA9IDEzNw0KICAgICtjb25zdCBfX0RJUkVOVF9NQVRDSEVTX0RJUkVO
VDY0ID0gMQ0KICAgICtjb25zdCBfUEFDS0VUX0hPU1QgPSAwDQogICAgK2NvbnN0IF9BUlBIUkRf
RExDSSA9IDE1DQogICAgK2NvbnN0IF9JRkxBX0lORVQ2X0NPTkYgPSAyDQogICAgK2NvbnN0IF9J
RkxBX1ZGX0xJTktfU1RBVEVfRElTQUJMRSA9IDINCiAgICArY29uc3QgX19faXRpbWVyc3BlY19k
ZWZpbmVkID0gMQ0KICAgICtjb25zdCBfX19OUl9waXZvdF9yb290ID0gMTU1DQogICAgK2NvbnN0
IF9GU19FTkNSWVBUX0ZMID0gMHgwMDAwMDgwMA0KICAgICtjb25zdCBfX1NZU19QUkNUTF9IID0g
MQ0KICAgICtjb25zdCBfX19STElNSVRfUlRQUklPID0gMTQNCiAgICArY29uc3QgX0NMT0NLX01P
Tk9UT05JQyA9IDENCiAgICArY29uc3QgX19fVUlOVF9GQVNUMzJfTUFYX18gPSAweGZmZmZmZmZm
ZmZmZmZmZmYNCiAgICArY29uc3QgX05FVExJTktfQ1JZUFRPID0gMjENCiAgICArY29uc3QgX0VU
SF9QX0ZJUCA9IDB4ODkxNA0KICAgICtjb25zdCBfT0NSTkwgPSAwMDAwMDEwDQogICAgK2NvbnN0
IF9fX05SX3NldGdpZCA9IDEwNg0KICAgICtjb25zdCBfSUZGX1ZORVRfSERSID0gMHg0MDAwDQog
ICAgK2NvbnN0IF9TQ051TEVBU1QzMiA9ICJ1Ig0KICAgICtjb25zdCBfUFJJeExFQVNUMTYgPSAi
eCINCiAgICArY29uc3QgX19fTlJfaW9wcmlvX3NldCA9IDI1MQ0KICAgICtjb25zdCBfX1NFTUFQ
SE9SRV9IID0gMQ0KICAgICtjb25zdCBfUlRGX1NUQVRJQyA9IDB4MDQwMA0KICAgICtjb25zdCBf
UFJfRU5ESUFOX1BQQ19MSVRUTEUgPSAyDQogICAgK2NvbnN0IF9fX0ZEX1NFVFNJWkUgPSAxMDI0
DQogICAgK2NvbnN0IF9TWVNfc2VjY29tcCA9IF9fX05SX3NlY2NvbXANCiAgICArY29uc3QgX19f
TERCTF9NSU5fXyA9IDEuMQ0KICAgICtjb25zdCBfX19ERUMzMl9NQVhfXyA9IDkuOTk5OTk5RTk2
DQogICAgK2NvbnN0IF9fX0lOVFBUUl9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZg0KICAgICtj
b25zdCBfX19GSUxFX2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9NT0RfTkFOTyA9IF9BREpfTkFO
Tw0KICAgICtjb25zdCBfX19GTFQzMl9FUFNJTE9OX18gPSAxLjENCiAgICArY29uc3QgX1g4Nl9F
RkxBR1NfQUNfQklUID0gMTgNCiAgICArY29uc3QgX1BST1RfRVhFQyA9IDB4NA0KICAgICtjb25z
dCBfSUZMQV9TVEFUU19VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9JRkxBX1ZGX1BPUlRfVU5TUEVD
ID0gMA0KICAgICtjb25zdCBfU0NIRURfT1RIRVIgPSAwDQogICAgK2NvbnN0IF9BTExQRVJNUyA9
IChfU19JU1VJRHxfU19JU0dJRHxfU19JU1ZUWHxfU19JUldYVXxfU19JUldYR3xfU19JUldYTykN
CiAgICArY29uc3QgX19fTlJfZ2V0ZGVudHMgPSA3OA0KICAgICtjb25zdCBfTkRUUEFfQkFTRV9S
RUFDSEFCTEVfVElNRSA9IDQNCiAgICArY29uc3QgX0VUSF9QX1dDQ1AgPSAweDg4M0UNCiAgICAr
Y29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZMQUdTID0gMTEyMw0KICAgICtj
b25zdCBfSUZMQV9FVkVOVF9SRUJPT1QgPSAxDQogICAgK2NvbnN0IF9BUlBIUkRfUkFXSERMQyA9
IDUxOA0KICAgICtjb25zdCBfQ0xEX1NUT1BQRUQgPSA1DQogICAgK2NvbnN0IF9fX0ZMVDMyX0RF
Q0lNQUxfRElHX18gPSA5DQogICAgK2NvbnN0IF9fX1NfSVNWVFggPSAwMTAwMA0KICAgICtjb25z
dCBfQUZfSVVDViA9IF9QRl9JVUNWDQogICAgK2NvbnN0IF9SVE5MR1JQX05PUDIgPSAxNA0KICAg
ICtjb25zdCBfX19jb2RlX21vZGVsX3NtYWxsX18gPSAxDQogICAgK2NvbnN0IF9UQ1BfRkFTVE9Q
RU5fQ09OTkVDVCA9IDMwDQogICAgK2NvbnN0IF9fU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCA9IDgx
DQogICAgK2NvbnN0IF9fQklUU19TSUdOVU1fR0VORVJJQ19IID0gMQ0KICAgICtjb25zdCBfUldI
X1dSSVRFX0xJRkVfRVhUUkVNRSA9IDUNCiAgICArY29uc3QgX0lOVE1BWF9XSURUSCA9IDY0DQog
ICAgK2NvbnN0IF9FRE9NID0gMzMNCiAgICArY29uc3QgX1NZU19zY2hlZF9nZXRzY2hlZHVsZXIg
PSBfX19OUl9zY2hlZF9nZXRzY2hlZHVsZXINCiAgICArY29uc3QgX0VYVEEgPSBfQjE5MjAwDQog
ICAgK2NvbnN0IF9FWFRCID0gX0IzODQwMA0KICAgICtjb25zdCBfU1lTX3BlcmZfZXZlbnRfb3Bl
biA9IF9fX05SX3BlcmZfZXZlbnRfb3Blbg0KICAgICtjb25zdCBfU1lTX3NldG5zID0gX19fTlJf
c2V0bnMNCiAgICArY29uc3QgX19JT0NfU0laRUJJVFMgPSAxNA0KICAgICtjb25zdCBfX1hPUEVO
X0xFR0FDWSA9IDENCiAgICArY29uc3QgX19QT1NJWDJfTE9DQUxFREVGID0gX19fUE9TSVgyX1RI
SVNfVkVSU0lPTg0KICAgICtjb25zdCBfVFRZX05BTUVfTUFYID0gMzINCiAgICArY29uc3QgX19Q
T1NJWF9SRV9EVVBfTUFYID0gMjU1DQogICAgK2NvbnN0IF9JUFY2X1JFQ1ZIT1BPUFRTID0gNTMN
CiAgICArY29uc3QgX05FVExJTktfQlJPQURDQVNUX0VSUk9SID0gNA0KICAgICtjb25zdCBfUFJf
U0VUX01NID0gMzUNCiAgICArY29uc3QgX19fRkxPQVRfV09SRF9PUkRFUiA9IF9fX0JZVEVfT1JE
RVINCiAgICArY29uc3QgX19TQ19VQ0hBUl9NQVggPSAxMTUNCiAgICArY29uc3QgX0VUSF9QX01Q
TFNfVUMgPSAweDg4NDcNCiAgICArY29uc3QgX05MQV9UWVBFX01BU0sgPSBeKF9OTEFfRl9ORVNU
RUQgfCBfTkxBX0ZfTkVUX0JZVEVPUkRFUikNCiAgICArY29uc3QgX19TQ19YT1BFTl9TVFJFQU1T
ID0gMjQ2DQogICAgK2NvbnN0IF9CUEZfSkdUID0gMHgyMA0KICAgICtjb25zdCBfX19JTlQ2NF9N
QVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfTU9EX0ZSRVFVRU5DWSA9IF9B
REpfRlJFUVVFTkNZDQogICAgK2NvbnN0IF9fX05SX3NobWR0ID0gNjcNCiAgICArY29uc3QgX1NZ
U19nZXRjd2QgPSBfX19OUl9nZXRjd2QNCiAgICArY29uc3QgX19fU0laRU9GX0xPTkdfXyA9IDgN
CiAgICArY29uc3QgX0JQRl9ORVRfT0ZGID0gX1NLRl9ORVRfT0ZGDQogICAgK2NvbnN0IF9JUF9C
TE9DS19TT1VSQ0UgPSAzOA0KICAgICtjb25zdCBfRUNIUk5HID0gNDQNCiAgICArY29uc3QgX0VB
SV9TWVNURU0gPSAtMTENCiAgICArY29uc3QgX19fTlJfcmVxdWVzdF9rZXkgPSAyNDkNCiAgICAr
Y29uc3QgX19TQ19MRVZFTDNfQ0FDSEVfQVNTT0MgPSAxOTUNCiAgICArY29uc3QgX1BSSVg4ID0g
IlgiDQogICAgK2NvbnN0IF9IQVZFX1RFRSA9IDENCiAgICArY29uc3QgX0hBVkVfQ09ORklHX0gg
PSAxDQogICAgK2NvbnN0IF9fUE9TSVhfQ0xPQ0tfU0VMRUNUSU9OID0gMjAwODA5DQogICAgK2Nv
bnN0IF9UQ09PRkYgPSAwDQogICAgK2NvbnN0IF9UQ1BfTVNTX0RFU0lSRUQgPSAxMjIwDQogICAg
K2NvbnN0IF9BSV9QQVNTSVZFID0gMHgwMDAxDQogICAgK2NvbnN0IF9TX0lGTE5LID0gX19fU19J
RkxOSw0KICAgICtjb25zdCBfRFRfU09DSyA9IDEyDQogICAgK2NvbnN0IF9fU0NfMl9VUEUgPSA5
Nw0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX0NNRF9LRVhFQyA9IDB4NDU1ODQ1NDMNCiAgICAr
Y29uc3QgX19TQ19VU0hSVF9NQVggPSAxMTgNCiAgICArY29uc3QgX1NPX0JTRENPTVBBVCA9IDE0
DQogICAgK2NvbnN0IF9fS19TU19NQVhTSVpFID0gMTI4DQogICAgK2NvbnN0IF9SVENGX1ZBTFZF
ID0gMHgwMDIwMDAwMA0KICAgICtjb25zdCBfSUZMQV9UVU5fTlVNX0RJU0FCTEVEX1FVRVVFUyA9
IDkNCiAgICArY29uc3QgX0hBVkVfTUVNT1JZX0ggPSAxDQogICAgK2NvbnN0IF9YODZfQ1I0X1VN
SVBfQklUID0gMTENCiAgICArY29uc3QgX0hBVkVfTkVUSU5FVF9JRl9FVEhFUl9IID0gMQ0KICAg
ICtjb25zdCBfQUZfTUFYID0gX1BGX01BWA0KICAgICtjb25zdCBfSEFWRV9FWFBNMUwgPSAxDQog
ICAgK2NvbnN0IF9fX19fZ3djaGFyX3RfZGVmaW5lZCA9IDENCiAgICArY29uc3QgX05URl9TRUxG
ID0gMHgwMg0KICAgICtjb25zdCBfX0JJVFNfU0lHQUNUSU9OX0ggPSAxDQogICAgK2NvbnN0IF9T
WVNfcmVib290ID0gX19fTlJfcmVib290DQogICAgK2NvbnN0IF9SRUdfVFJBUE5PID0gMjANCiAg
ICArY29uc3QgX0FESl9PRkZTRVRfU1NfUkVBRCA9IDB4YTAwMQ0KICAgICtjb25zdCBfSUNNUDZf
UEFSQU1fUFJPQiA9IDQNCiAgICArY29uc3QgX0VUSF9QX0lFRUVQVVBBVCA9IDB4MGEwMQ0KICAg
ICtjb25zdCBfSVBQUk9UT19FR1AgPSA4DQogICAgK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX01VTFRJ
Q0FTVCA9IDUNCiAgICArY29uc3QgX1JUTV9ERUxUQ0xBU1MgPSA0MQ0KICAgICtjb25zdCBfX1BP
U0lYX1NQQVdOID0gMjAwODA5DQogICAgK2NvbnN0IF9SVEFYX1JUT19NSU4gPSAxMw0KICAgICtj
b25zdCBfX1NZU19VVFNOQU1FX0ggPSAxDQogICAgK2NvbnN0IF9ORVRMSU5LX1BLVElORk8gPSAz
DQogICAgK2NvbnN0IF9GUEVfRkxUSU5WID0gNw0KICAgICtjb25zdCBfX19OUl9yZW1vdmV4YXR0
ciA9IDE5Nw0KICAgICtjb25zdCBfRl9OT1RJRlkgPSAxMDI2DQogICAgK2NvbnN0IF9NU19JTlZB
TElEQVRFID0gMg0KICAgICtjb25zdCBfU0lPQ1BST1RPUFJJVkFURSA9IDB4ODlFMA0KICAgICtj
b25zdCBfX19OUl92aGFuZ3VwID0gMTUzDQogICAgK2NvbnN0IF9DTE9ORV9VTlRSQUNFRCA9IDB4
MDA4MDAwMDANCiAgICArY29uc3QgX0lGQV9GX1BFUk1BTkVOVCA9IDB4ODANCiAgICArY29uc3Qg
X0lQX01BWFBBQ0tFVCA9IDY1NTM1DQogICAgK2NvbnN0IF9fU0NfUkVHRVhQID0gMTU1DQogICAg
K2NvbnN0IF9JUE9QVF9FT0wgPSAwDQogICAgK2NvbnN0IF9FREVBRExPQ0sgPSBfRURFQURMSw0K
ICAgICtjb25zdCBfU1lTX2dldHBpZCA9IF9fX05SX2dldHBpZA0KICAgICtjb25zdCBfRVRIRVJU
WVBFX0xPT1BCQUNLID0gMHg5MDAwDQogICAgK2NvbnN0IF9fQ1NfTEZTNjRfQ0ZMQUdTID0gMTAw
NA0KICAgICtjb25zdCBfU0lHRlBFID0gOA0KICAgICtjb25zdCBfRUxJQlNDTiA9IDgxDQogICAg
K2NvbnN0IF9fX0RFQzY0X0VQU0lMT05fXyA9IDFFLTE1DQogICAgK2NvbnN0IF9JTlQxNl9NQVgg
PSAoMzI3NjcpDQogICAgK2NvbnN0IF9TSU9DU0lGTkFNRSA9IDB4ODkyMw0KICAgICtjb25zdCBf
X19GTFQzMl9ERU5PUk1fTUlOX18gPSAxLjENCiAgICArY29uc3QgX1NJR1ZUQUxSTSA9IDI2DQog
ICAgK2NvbnN0IF9fU0NfTlpFUk8gPSAxMDkNCiAgICArY29uc3QgX19fTlJfcGF1c2UgPSAzNA0K
ICAgICtjb25zdCBfRVBPTExSRE5PUk0gPSA2NA0KICAgICtjb25zdCBfSEFWRV9MSVNUWEFUVFIg
PSAxDQogICAgK2NvbnN0IF9FVEhfUF9YMjUgPSAweDA4MDUNCiAgICArY29uc3QgX19DU19YQlM1
X0lMUDMyX09GRkJJR19DRkxBR1MgPSAxMTA0DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfVVBERUxB
WSA9IDQNCiAgICArY29uc3QgX0xJTlVYX1JFQk9PVF9NQUdJQzJCID0gMzY5MzY3NDQ4DQogICAg
K2NvbnN0IF9OTE1fRl9FWENMID0gMHgyMDANCiAgICArY29uc3QgX19fSU5UX0xFQVNUMTZfV0lE
VEhfXyA9IDE2DQogICAgK2NvbnN0IF9fU0NfVF9JT1ZfTUFYID0gNjYNCiAgICArY29uc3QgX19f
REVDMTI4X0VQU0lMT05fXyA9IDFFLTMzDQogICAgK2NvbnN0IF9SVE1fTkVXVENMQVNTID0gNDAN
CiAgICArY29uc3QgX19fRl9TRVRTSUcgPSAxMA0KICAgICtjb25zdCBfUFJfQ0FQX0FNQklFTlRf
UkFJU0UgPSAyDQogICAgK2NvbnN0IF9OX1gyNSA9IDYNCiAgICArY29uc3QgX19CSVRTX1NJR1RI
UkVBRF9IID0gMQ0KICAgICtjb25zdCBfU0lPQ0dJRlNMQVZFID0gMHg4OTI5DQogICAgK2NvbnN0
IF9fX0ZMVDEyOF9NQVhfMTBfRVhQX18gPSA0OTMyDQogICAgK2NvbnN0IF9PX1JEV1IgPSAwMg0K
ICAgICtjb25zdCBfU19JUldYRyA9IChfU19JUldYVSA+PiAzKQ0KICAgICtjb25zdCBfSEFWRV9G
Q0hPV05BVCA9IDENCiAgICArY29uc3QgX1NZU19jbG9ja19uYW5vc2xlZXAgPSBfX19OUl9jbG9j
a19uYW5vc2xlZXANCiAgICArY29uc3QgX01TX1JFTU9VTlQgPSAzMg0KICAgICtjb25zdCBfRVRI
X1BfQUZfSVVDViA9IDB4RkJGQg0KICAgICtjb25zdCBfU09MX0RFQ05FVCA9IDI2MQ0KICAgICtj
b25zdCBfU09fREVUQUNIX0ZJTFRFUiA9IDI3DQogICAgK2NvbnN0IF9STElNX1NBVkVEX0NVUiA9
IF9STElNX0lORklOSVRZDQogICAgK2NvbnN0IF9JTl9DTEFTU0JfTUFYID0gNjU1MzYNCiAgICAr
Y29uc3QgX05JX05PRlFETiA9IDQNCiAgICArY29uc3QgX19fR1hYX0FCSV9WRVJTSU9OID0gMTAx
Mw0KICAgICtjb25zdCBfRU5PTVNHID0gNDINCiAgICArY29uc3QgX0lGTEFfQlJfVENOX1RJTUVS
ID0gMTcNCiAgICArY29uc3QgX01BWE5BTUxFTiA9IF9OQU1FX01BWA0KICAgICtjb25zdCBfX19G
TFQ2NFhfTUlOX18gPSAxLjENCiAgICArY29uc3QgX19fREVDMzJfTUFYX0VYUF9fID0gOTcNCiAg
ICArY29uc3QgX0hBVkVfU1lTQ0FMTF9IID0gMQ0KICAgICtjb25zdCBfSEFWRV9TWVNfUFRSQUNF
X0ggPSAxDQogICAgK2NvbnN0IF9fU0NfUElQRSA9IDE0NQ0KICAgICtjb25zdCBfU19JUldYVSA9
IChfX19TX0lSRUFEfF9fX1NfSVdSSVRFfF9fX1NfSUVYRUMpDQogICAgK2NvbnN0IF9fX0xEQkxf
SEFTX0lORklOSVRZX18gPSAxDQogICAgK2NvbnN0IF9TWVNfbXFfdW5saW5rID0gX19fTlJfbXFf
dW5saW5rDQogICAgK2NvbnN0IF9fX1VTRV9GSUxFX09GRlNFVDY0ID0gMQ0KICAgICtjb25zdCBf
UldGX1dSSVRFX0xJRkVfTk9UX1NFVCA9IDANCiAgICArY29uc3QgX1NFR1ZfUEtVRVJSID0gNA0K
ICAgICtjb25zdCBfTUxPQ0tfT05GQVVMVCA9IDENCiAgICArY29uc3QgX19TQ19BSU9fTUFYID0g
MjQNCiAgICArY29uc3QgX19fTlJfc3ltbGluayA9IDg4DQogICAgK2NvbnN0IF9FUkFOR0UgPSAz
NA0KICAgICtjb25zdCBfSVBfSERSSU5DTCA9IDMNCiAgICArY29uc3QgX1dDSEFSX01BWCA9IF9f
X1dDSEFSX01BWA0KICAgICtjb25zdCBfRl9TRVRfRklMRV9SV19ISU5UID0gMTAzOA0KICAgICtj
b25zdCBfVENQX0NBX1JlY292ZXJ5ID0gMw0KICAgICtjb25zdCBfVUlOVF9MRUFTVDMyX1dJRFRI
ID0gMzINCiAgICArY29uc3QgX1JUQV9FTkNBUF9UWVBFID0gMjENCiAgICArY29uc3QgX0VQT0xM
RVJSID0gOA0KICAgICtjb25zdCBfU1lTX2Nob3duID0gX19fTlJfY2hvd24NCiAgICArY29uc3Qg
X1RBQjAgPSAwMDAwMDAwDQogICAgK2NvbnN0IF9UQUIxID0gMDAwNDAwMA0KICAgICtjb25zdCBf
VEFCMiA9IDAwMTAwMDANCiAgICArY29uc3QgX1RBQjMgPSAwMDE0MDAwDQogICAgK2NvbnN0IF9U
SF9SU1QgPSAweDA0DQogICAgK2NvbnN0IF9QVFJBQ0VfT19UUkFDRUZPUksgPSAyDQogICAgK2Nv
bnN0IF9fX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXggPSAxNDYNCiAgICArY29uc3QgX19fTlJf
c2NoZWRfZ2V0cGFyYW0gPSAxNDMNCiAgICArY29uc3QgX1JUTkVUTElOS19IQVZFX1BFRVJJTkZP
ID0gMQ0KICAgICtjb25zdCBfX0xGU19MQVJHRUZJTEUgPSAxDQogICAgK2NvbnN0IF9TVEFUWF9B
TEwgPSAweDBmZmYNCiAgICArY29uc3QgX19fTlJfc2V0aXRpbWVyID0gMzgNCiAgICArY29uc3Qg
X01PRF9NSUNSTyA9IF9BREpfTUlDUk8NCiAgICArY29uc3QgX19fTlJfdXN0YXQgPSAxMzYNCiAg
ICArY29uc3QgX0lGRl9BVFRBQ0hfUVVFVUUgPSAweDAyMDANCiAgICArY29uc3QgX19fUFRIUkVB
RF9NVVRFWF9MT0NLX0VMSVNJT04gPSAxDQogICAgK2NvbnN0IF9JTl9DTEFTU0FfSE9TVCA9ICgw
eGZmZmZmZmZmICYgXl9JTl9DTEFTU0FfTkVUKQ0KICAgICtjb25zdCBfUlRGX05BVCA9IDB4MDgw
MDAwMDANCiAgICArY29uc3QgX0JQRl9BQlMgPSAweDIwDQogICAgK2NvbnN0IF9GU19UT1BESVJf
RkwgPSAweDAwMDIwMDAwDQogICAgK2NvbnN0IF9SVE1HUlBfTElOSyA9IDENCiAgICArY29uc3Qg
X0ZTX0tFWV9ERVNDX1BSRUZJWCA9ICJmc2NyeXB0OiINCiAgICArY29uc3QgX19fTlJfdnNlcnZl
ciA9IDIzNg0KICAgICtjb25zdCBfVElPQ1NCUksgPSAweDU0MjcNCiAgICArY29uc3QgX19fR0xJ
QkNfXyA9IDINCiAgICArY29uc3QgX0hBVkVfU1lOQ19BRERfQU5EX0ZFVENIXzggPSAxDQogICAg
K2NvbnN0IF9ORF9SQV9GTEFHX01BTkFHRUQgPSAweDgwDQogICAgK2NvbnN0IF9JTlRfTEVBU1Qx
Nl9NQVggPSAoMzI3NjcpDQogICAgK2NvbnN0IF9fX05SX3NjaGVkX3NldHNjaGVkdWxlciA9IDE0
NA0KICAgICtjb25zdCBfX1NDX1NFTUFQSE9SRVMgPSAyMQ0KICAgICtjb25zdCBfX1VDT05URVhU
X0ggPSAxDQogICAgK2NvbnN0IF9TWVNfcnRfdGdzaWdxdWV1ZWluZm8gPSBfX19OUl9ydF90Z3Np
Z3F1ZXVlaW5mbw0KICAgICtjb25zdCBfUFJfRlBfRVhDX1BSRUNJU0UgPSAzDQogICAgK2NvbnN0
IF9TWVNfc3luYyA9IF9fX05SX3N5bmMNCiAgICArY29uc3QgX0hBVkVfU1RESU5UX0ggPSAxDQog
ICAgK2NvbnN0IF9JQ0FOT04gPSAwMDAwMDAyDQogICAgK2NvbnN0IF9QUl9TRVRfVEhQX0RJU0FC
TEUgPSA0MQ0KICAgICtjb25zdCBfTkVUTElOS19VTkNPTk5FQ1RFRCA9IDANCiAgICArY29uc3Qg
X0lVVEY4ID0gMDA0MDAwMA0KICAgICtjb25zdCBfQlBGX0FORCA9IDB4NTANCiAgICArY29uc3Qg
X05FVExJTktfTElTVEVOX0FMTF9OU0lEID0gOA0KICAgICtjb25zdCBfSVBWNl9QQVRITVRVID0g
NjENCiAgICArY29uc3QgX19TQ19BVEVYSVRfTUFYID0gODcNCiAgICArY29uc3QgX1NPQ0tfUkRN
ID0gNA0KICAgICtjb25zdCBfRVRIX1BfSVAgPSAweDA4MDANCiAgICArY29uc3QgX19QT1NJWF9T
T1VSQ0UgPSAxDQogICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9VRFBfQ1NVTSA9IDgNCiAgICArY29u
c3QgX19TQ19NUV9QUklPX01BWCA9IDI4DQogICAgK2NvbnN0IF9fTkVUSU5FVF9UQ1BfSCA9IDEN
CiAgICArY29uc3QgX0xJTlVYX1JFQk9PVF9DTURfUkVTVEFSVDIgPSAweEExQjJDM0Q0DQogICAg
K2NvbnN0IF9SVENGX05BVCA9IDB4MDA4MDAwMDANCiAgICArY29uc3QgX05EX05BX0ZMQUdfT1ZF
UlJJREUgPSAweDAwMDAwMDIwDQogICAgK2NvbnN0IF9IQVZFX1NURExJQl9IID0gMQ0KICAgICtj
b25zdCBfX1NDX1NJTkdMRV9QUk9DRVNTID0gMTUxDQogICAgK2NvbnN0IF9JRkZfRFlOQU1JQyA9
IDMyNzY4DQogICAgK2NvbnN0IF9UQ1BfTk9fUVVFVUUgPSAwDQogICAgK2NvbnN0IF9fTElCQ19M
SU1JVFNfSF8gPSAxDQogICAgK2NvbnN0IF9JTl9ET05UX0ZPTExPVyA9IDB4MDIwMDAwMDANCiAg
ICArY29uc3QgX01BRFZfV0lQRU9ORk9SSyA9IDE4DQogICAgK2NvbnN0IF9fUE9TSVhfU1RSRUFN
X01BWCA9IDgNCiAgICArY29uc3QgX19CSVRTX1NJR0lORk9fQ09OU1RTX0ggPSAxDQogICAgK2Nv
bnN0IF9XQUlUX0FOWSA9ICgtMSkNCiAgICArY29uc3QgX01BUF8zMkJJVCA9IDB4NDANCiAgICAr
Y29uc3QgX0lORVRfQUREUlNUUkxFTiA9IDE2DQogICAgK2NvbnN0IF9fX0lGTEFfVkZfTUFYID0g
MTMNCiAgICArY29uc3QgX1BSX0ZQX0VYQ19BU1lOQyA9IDINCiAgICArY29uc3QgX1RJT0NTRVJD
T05GSUcgPSAweDU0NTMNCiAgICArY29uc3QgX1VJTlRQVFJfV0lEVEggPSBfX19XT1JEU0laRQ0K
ICAgICtjb25zdCBfTUNBU1RfTVNGSUxURVIgPSA0OA0KICAgICtjb25zdCBfTkxNX0ZfTk9OUkVD
ID0gMHgxMDANCiAgICArY29uc3QgX0VERUFETEsgPSAzNQ0KICAgICtjb25zdCBfSVBQT1JUX1RG
VFAgPSA2OQ0KICAgICtjb25zdCBfU0lPQ0dTVEFNUCA9IDB4ODkwNg0KICAgICtjb25zdCBfRlNf
S0VZX0RFU0NSSVBUT1JfU0laRSA9IDgNCiAgICArY29uc3QgX19DU19QT1NJWF9WN19MUEJJR19P
RkZCSUdfTElCUyA9IDExNDYNCiAgICArY29uc3QgX0lGTEFfR0VORVZFX1BPUlQgPSA1DQogICAg
K2NvbnN0IF9TWVNfY2FwZ2V0ID0gX19fTlJfY2FwZ2V0DQogICAgK2NvbnN0IF9fX05SX21sb2Nr
ID0gMTQ5DQogICAgK2NvbnN0IF9fX0dDQ19BVE9NSUNfTE9OR19MT0NLX0ZSRUUgPSAyDQogICAg
K2NvbnN0IF9FVEhFUl9UWVBFX0xFTiA9IDINCiAgICArY29uc3QgX0hBVkVfVEFOTCA9IDENCiAg
ICArY29uc3QgX19QT1NJWF9TQVZFRF9JRFMgPSAxDQogICAgK2NvbnN0IF9UQ01fSUZJTkRFWF9N
QUdJQ19CTE9DSyA9ICgweEZGRkZGRkZGKQ0KICAgICtjb25zdCBfQlBGX1NUWCA9IDB4MDMNCiAg
ICArY29uc3QgX19fREJMX01BTlRfRElHX18gPSA1Mw0KICAgICtjb25zdCBfSVBWNl9NSU5IT1BD
T1VOVCA9IDczDQogICAgK2NvbnN0IF9TSU9DR0lGTkFNRSA9IDB4ODkxMA0KICAgICtjb25zdCBf
UlRFWFRfRklMVEVSX1NLSVBfU1RBVFMgPSAoMSA8PCAzKQ0KICAgICtjb25zdCBfX19OUl9ydF9z
aWdhY3Rpb24gPSAxMw0KICAgICtjb25zdCBfSU5UX0ZBU1Q2NF9XSURUSCA9IDY0DQogICAgK2Nv
bnN0IF9CUEZfTUVNID0gMHg2MA0KICAgICtjb25zdCBfTkRfTkVJR0hCT1JfQURWRVJUID0gMTM2
DQogICAgK2NvbnN0IF9fUE9TSVhfQ0hJTERfTUFYID0gMjUNCiAgICArY29uc3QgX0NMT05FX0NI
SUxEX1NFVFRJRCA9IDB4MDEwMDAwMDANCiAgICArY29uc3QgX1JFR19SQVggPSAxMw0KICAgICtj
b25zdCBfX19JTlRfTEVBU1Q2NF9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25z
dCBfQlBGX0FERCA9IDB4MDANCiAgICArY29uc3QgX0VUSEVSTUlOID0gKF9FVEhFUl9NSU5fTEVO
IC0gX0VUSEVSX0hEUl9MRU4gLSBfRVRIRVJfQ1JDX0xFTikNCiAgICArY29uc3QgX0lQUE9SVF9S
SkUgPSA3Nw0KICAgICtjb25zdCBfRlNfSU1BR0lDX0ZMID0gMHgwMDAwMjAwMA0KICAgICtjb25z
dCBfSVBWNl9QTVRVRElTQ19JTlRFUkZBQ0UgPSA0DQogICAgK2NvbnN0IF9fX0lGTEFfVkxBTl9R
T1NfTUFYID0gMg0KICAgICtjb25zdCBfX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVFID0gMg0K
ICAgICtjb25zdCBfU1lTX05NTE4gPSBfX1VUU05BTUVfTEVOR1RIDQogICAgK2NvbnN0IF9JU0lH
ID0gMDAwMDAwMQ0KICAgICtjb25zdCBfU1lTX2JpbmQgPSBfX19OUl9iaW5kDQogICAgK2NvbnN0
IF9JUFY2X01UVV9ESVNDT1ZFUiA9IDIzDQogICAgK2NvbnN0IF9JRkxBX1dJUkVMRVNTID0gMTEN
CiAgICArY29uc3QgX1JNTkVUX0ZMQUdTX0VHUkVTU19NQVBfQ0tTVU1WNCA9ICgxIDw8IDMpDQog
ICAgK2NvbnN0IF9fUE9TSVhfTUFQUEVEX0ZJTEVTID0gMjAwODA5DQogICAgK2NvbnN0IF9SVE1f
TkVXTkRVU0VST1BUID0gNjgNCiAgICArY29uc3QgX1BUUkFDRV9HRVRTSUdNQVNLID0gMTY5MDYN
CiAgICArY29uc3QgX1JUTUdSUF9JUFY0X01ST1VURSA9IDB4MjANCiAgICArY29uc3QgX0lONl9B
RERSX0dFTl9NT0RFX1NUQUJMRV9QUklWQUNZID0gMg0KICAgICtjb25zdCBfX19OUl9zaWdhbHRz
dGFjayA9IDEzMQ0KICAgICtjb25zdCBfTkVUTElOS19DQVBfQUNLID0gMTANCiAgICArY29uc3Qg
X19fTlJfY3JlYXQgPSA4NQ0KICAgICtjb25zdCBfX0dFVE9QVF9DT1JFX0ggPSAxDQogICAgK2Nv
bnN0IF9FQUlfQUdBSU4gPSAtMw0KICAgICtjb25zdCBfX1BPU0lYX0pPQl9DT05UUk9MID0gMQ0K
ICAgICtjb25zdCBfU0NOaTE2ID0gImhpIg0KICAgICtjb25zdCBfQlBGX1NVQiA9IDB4MTANCiAg
ICArY29uc3QgX1BSSXgxNiA9ICJ4Ig0KICAgICtjb25zdCBfU0NIRURfSVNPID0gNA0KICAgICtj
b25zdCBfX0hBVkVfU1RSVUNUX1RFUk1JT1NfQ19JU1BFRUQgPSAxDQogICAgK2NvbnN0IF9OVURf
RkFJTEVEID0gMHgyMA0KICAgICtjb25zdCBfRU1TR1NJWkUgPSA5MA0KICAgICtjb25zdCBfRkFQ
UEVORCA9IF9PX0FQUEVORA0KICAgICtjb25zdCBfX19VU0VfUE9TSVggPSAxDQogICAgK2NvbnN0
IF9USU9DSU5RID0gX0ZJT05SRUFEDQogICAgK2NvbnN0IF9TSFVUX1JEID0gMA0KICAgICtjb25z
dCBfX19OUl9lcG9sbF93YWl0X29sZCA9IDIxNQ0KICAgICtjb25zdCBfWDg2X0VGTEFHU19PRl9C
SVQgPSAxMQ0KICAgICtjb25zdCBfX19GTFQxMjhfREVDSU1BTF9ESUdfXyA9IDM2DQogICAgK2Nv
bnN0IF9fU0NfR0VUR1JfUl9TSVpFX01BWCA9IDY5DQogICAgK2NvbnN0IF9TWVNfdXRpbWUgPSBf
X19OUl91dGltZQ0KICAgICtjb25zdCBfUFJfRlBFTVVfU0lHRlBFID0gMg0KICAgICtjb25zdCBf
QVJQSFJEX0ZEREkgPSA3NzQNCiAgICArY29uc3QgX1NFR1ZfTUFQRVJSID0gMQ0KICAgICtjb25z
dCBfUlRBX01QX0FMR08gPSAxNA0KICAgICtjb25zdCBfQlBGX0pNUCA9IDB4MDUNCiAgICArY29u
c3QgX1NZU19ydF9zaWdhY3Rpb24gPSBfX19OUl9ydF9zaWdhY3Rpb24NCiAgICArY29uc3QgX0hB
VkVfTkVUX0lGX0ggPSAxDQogICAgK2NvbnN0IF9SVE5MR1JQX0RFQ25ldF9JRkFERFIgPSAxMw0K
ICAgICtjb25zdCBfSUZGX0xPT1BCQUNLID0gOA0KICAgICtjb25zdCBfUlRDRl9MT0cgPSAweDAy
MDAwMDAwDQogICAgK2NvbnN0IF9EVF9CTEsgPSA2DQogICAgK2NvbnN0IF9fX05SX2NhcHNldCA9
IDEyNg0KICAgICtjb25zdCBfX1NDX1BJSV9PU0kgPSA1Nw0KICAgICtjb25zdCBfSUZMQV9CUlBP
UlRfRk9SV0FSRF9ERUxBWV9USU1FUiA9IDIyDQogICAgK2NvbnN0IF9VTU9VTlRfTk9GT0xMT1cg
PSA4DQogICAgK2NvbnN0IF9QRl9FQ09ORVQgPSAxOQ0KICAgICtjb25zdCBfSVBWNl9BRERSX1BS
RUZFUkVOQ0VTID0gNzINCiAgICArY29uc3QgX01BQ1NFQ19WQUxJREFURV9NQVggPSAyDQogICAg
K2NvbnN0IF9SVF9UQUJMRV9NQVggPSA0Mjk0OTY3Mjk1DQogICAgK2NvbnN0IF9GRklfUEFTQ0FM
ID0gNg0KICAgICtjb25zdCBfSUZMQV9YRlJNX0lGX0lEID0gMg0KICAgICtjb25zdCBfQjQ2MDgw
MCA9IDAwMTAwMDQNCiAgICArY29uc3QgX19DU19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUyA9IDEx
MDkNCiAgICArY29uc3QgX1BSSWlMRUFTVDMyID0gImkiDQogICAgK2NvbnN0IF9IQVZFX1NZU19G
SUxFX0ggPSAxDQogICAgK2NvbnN0IF9TWVNfZXBvbGxfd2FpdCA9IF9fX05SX2Vwb2xsX3dhaXQN
CiAgICArY29uc3QgX1BGX0ZJTEUgPSBfUEZfTE9DQUwNCiAgICArY29uc3QgX1NZU19sc2V0eGF0
dHIgPSBfX19OUl9sc2V0eGF0dHINCiAgICArY29uc3QgX0VDSElMRCA9IDEwDQogICAgK2NvbnN0
IF9fX0ZJTklURV9NQVRIX09OTFlfXyA9IDANCiAgICArY29uc3QgX19QT1NJWF9USFJFQURfUk9C
VVNUX1BSSU9fUFJPVEVDVCA9IC0xDQogICAgK2NvbnN0IF9fX05SX3NldHRpbWVvZmRheSA9IDE2
NA0KICAgICtjb25zdCBfUEFDS0VUX01SX01VTFRJQ0FTVCA9IDANCiAgICArY29uc3QgX1NLRl9B
RF9DUFUgPSAzNg0KICAgICtjb25zdCBfX19OUl91dGltZSA9IDEzMg0KICAgICtjb25zdCBfX19J
RkxBX1hEUF9NQVggPSA4DQogICAgK2NvbnN0IF9NQUNWTEFOX01PREVfUEFTU1RIUlUgPSA4DQog
ICAgK2NvbnN0IF9fX1NFR19HUyA9IDENCiAgICArY29uc3QgX0FESl9PRkZTRVRfU0lOR0xFU0hP
VCA9IDB4ODAwMQ0KICAgICtjb25zdCBfUE9SVF9SRVFVRVNUX0FTU09DSUFURSA9IDINCiAgICAr
Y29uc3QgX1BSSXhMRUFTVDMyID0gIngiDQogICAgK2NvbnN0IF9fUE9TSVgyX0JDX0RJTV9NQVgg
PSAyMDQ4DQogICAgK2NvbnN0IF9FVEhfUF84MDJfMiA9IDB4MDAwNA0KICAgICtjb25zdCBfRVRI
X1BfODAyXzMgPSAweDAwMDENCiAgICArY29uc3QgX1NPX0VSUk9SID0gNA0KICAgICtjb25zdCBf
VElPQ01CSVMgPSAweDU0MTYNCiAgICArY29uc3QgX01TX05PUkVNT1RFTE9DSyA9ICgxPDwyNykN
CiAgICArY29uc3QgX19fVVNFX1hPUEVOMksgPSAxDQogICAgK2NvbnN0IF9JUFY2X0hPUExJTUlU
ID0gNTINCiAgICArY29uc3QgX19fTlJfd3JpdGV2ID0gMjANCiAgICArY29uc3QgX1NZU19zZXRz
b2Nrb3B0ID0gX19fTlJfc2V0c29ja29wdA0KICAgICtjb25zdCBfU1lTX2dldHJlc2dpZCA9IF9f
X05SX2dldHJlc2dpZA0KICAgICtjb25zdCBfRVRIX1BfUEFFID0gMHg4ODhFDQogICAgK2NvbnN0
IF9QQUNLRVRfU1RBVElTVElDUyA9IDYNCiAgICArY29uc3QgX19fVUlOVDhfTUFYX18gPSAweGZm
DQogICAgK2NvbnN0IF9JUF9NSU5UVEwgPSAyMQ0KICAgICtjb25zdCBfTElORV9NQVggPSBfX1BP
U0lYMl9MSU5FX01BWA0KICAgICtjb25zdCBfX1BDX05PX1RSVU5DID0gNw0KICAgICtjb25zdCBf
X19EQkxfTUFYXzEwX0VYUF9fID0gMzA4DQogICAgK2NvbnN0IF9NT0RfU1RBVFVTID0gX0FESl9T
VEFUVVMNCiAgICArY29uc3QgX1BSX0VORElBTl9MSVRUTEUgPSAxDQogICAgK2NvbnN0IF9NT0Rf
Q0xLQSA9IF9BREpfT0ZGU0VUX1NJTkdMRVNIT1QNCiAgICArY29uc3QgX0FUX1NUQVRYX0RPTlRf
U1lOQyA9IDB4NDAwMA0KICAgICtjb25zdCBfX1NDX0NfTEFOR19TVVBQT1JUX1IgPSAxMzYNCiAg
ICArY29uc3QgX0VUSF9QX1BBVVNFID0gMHg4ODA4DQogICAgK2NvbnN0IF9TWVNfdW5saW5rYXQg
PSBfX19OUl91bmxpbmthdA0KICAgICtjb25zdCBfSUZMQV9HVFBfUERQX0hBU0hTSVpFID0gMw0K
ICAgICtjb25zdCBfSU5fQ0xBU1NCX05FVCA9IDB4ZmZmZjAwMDANCiAgICArY29uc3QgX1NDTmQz
MiA9ICJkIg0KICAgICtjb25zdCBfU0lHUFdSID0gMzANCiAgICArY29uc3QgX0lGTEFfQk9ORF9B
Q1RJVkVfU0xBVkUgPSAyDQogICAgK2NvbnN0IF9QUl9TRVRfTU1fRU5WX1NUQVJUID0gMTANCiAg
ICArY29uc3QgX1BUUkRJRkZfV0lEVEggPSBfX19XT1JEU0laRQ0KICAgICtjb25zdCBfUFJJeDgg
PSAieCINCiAgICArY29uc3QgX19TVERJTlRfSCA9IDENCiAgICArY29uc3QgX1JUTV9HRVRTVEFU
UyA9IDk0DQogICAgK2NvbnN0IF9USU9DTUdFVCA9IDB4NTQxNQ0KICAgICtjb25zdCBfTkRUUEFf
QU5ZQ0FTVF9ERUxBWSA9IDEyDQogICAgK2NvbnN0IF9QUkl4MzIgPSAieCINCiAgICArY29uc3Qg
X0VYVFBST0MgPSAwMjAwMDAwDQogICAgK2NvbnN0IF9fX1dDSEFSX01BWF9fID0gMHg3ZmZmZmZm
Zg0KICAgICtjb25zdCBfSU9DX0lOT1VUID0gKChfX0lPQ19XUklURXxfX0lPQ19SRUFEKSA8PCBf
X0lPQ19ESVJTSElGVCkNCiAgICArY29uc3QgX0lGTEFfSU5GT19LSU5EID0gMQ0KICAgICtjb25z
dCBfRUZBVUxUID0gMTQNCiAgICArY29uc3QgX1VJTlQ4X1dJRFRIID0gOA0KICAgICtjb25zdCBf
UFJfQ0FQQlNFVF9EUk9QID0gMjQNCiAgICArY29uc3QgX0lGTEFfVkxBTl9VTlNQRUMgPSAwDQog
ICAgK2NvbnN0IF9JRkZfTVVMVElDQVNUID0gNDA5Ng0KICAgICtjb25zdCBfUE9SVF9SRVFVRVNU
X0RJU0FTU09DSUFURSA9IDMNCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX05PID0gMTgNCiAgICAr
Y29uc3QgX1NPX0RFQlVHID0gMQ0KICAgICtjb25zdCBfUlROSF9GX09GRkxPQUQgPSA4DQogICAg
K2NvbnN0IF9JTlRfRkFTVDMyX01BWCA9ICg5MjIzMzcyMDM2ODU0Nzc1ODA3KQ0KICAgICtjb25z
dCBfX1NDX01FTUxPQ0tfUkFOR0UgPSAxOA0KICAgICtjb25zdCBfUlBNX1BDT19DSEFOR0UgPSAy
DQogICAgK2NvbnN0IF9NU19TVUJNT1VOVCA9ICgxPDwyNikNCiAgICArY29uc3QgX0ROX01PRElG
WSA9IDB4MDAwMDAwMDINCiAgICArY29uc3QgX0lQUFJPVE9fVURQID0gMTcNCiAgICArY29uc3Qg
X0lGTEFfVlJGX1BPUlRfVU5TUEVDID0gMA0KICAgICtjb25zdCBfSUZMQV9JTkVUNl9NQ0FTVCA9
IDQNCiAgICArY29uc3QgX1JUTkxHUlBfREVDbmV0X1JPVVRFID0gMTUNCiAgICArY29uc3QgX19f
TlJfdGVlID0gMjc2DQogICAgK2NvbnN0IF9SVEFfSUlGID0gMw0KICAgICtjb25zdCBfSUNSTkwg
PSAwMDAwNDAwDQogICAgK2NvbnN0IF9TX0lXVVNSID0gX19fU19JV1JJVEUNCiAgICArY29uc3Qg
X1NZU19kdXAyID0gX19fTlJfZHVwMg0KICAgICtjb25zdCBfU1lTX2R1cDMgPSBfX19OUl9kdXAz
DQogICAgK2NvbnN0IF9SRUdfRVJSID0gMTkNCiAgICArY29uc3QgX05FVExJTktfTkZMT0cgPSA1
DQogICAgK2NvbnN0IF9QUklYTEVBU1Q4ID0gIlgiDQogICAgK2NvbnN0IF9JRkxBX0hTUl9WRVJT
SU9OID0gNg0KICAgICtjb25zdCBfU1lTX2xpbmthdCA9IF9fX05SX2xpbmthdA0KICAgICtjb25z
dCBfX19EQkxfSEFTX0lORklOSVRZX18gPSAxDQogICAgK2NvbnN0IF9JUFRPU19DTEFTU19NQVNL
ID0gMHhlMA0KICAgICtjb25zdCBfX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMg
PSA0DQogICAgK2NvbnN0IF9ORF9ORUlHSEJPUl9TT0xJQ0lUID0gMTM1DQogICAgK2NvbnN0IF9I
QVZFX0xJTlVYX0lGX0VUSEVSX0ggPSAxDQogICAgK2NvbnN0IF9fQ1NfVjdfV0lEVEhfUkVTVFJJ
Q1RFRF9FTlZTID0gNQ0KICAgICtjb25zdCBfUFJfU1BFQ19FTkFCTEUgPSAoMSA8PCAxKQ0KICAg
ICtjb25zdCBfQVJQSFJEX1BQUCA9IDUxMg0KICAgICtjb25zdCBfU0lfQVNZTkNOTCA9IC02MA0K
ICAgICtjb25zdCBfU1lTX21vZGlmeV9sZHQgPSBfX19OUl9tb2RpZnlfbGR0DQogICAgK2NvbnN0
IF9fX0ZMVDY0X0VQU0lMT05fXyA9IDEuMQ0KICAgICtjb25zdCBfX19PX1RNUEZJTEUgPSAoMDIw
MDAwMDAwIHwgX19fT19ESVJFQ1RPUlkpDQogICAgK2NvbnN0IF9YODZfRUZMQUdTX1NGX0JJVCA9
IDcNCiAgICArY29uc3QgX1NJT0NHSUZNVFUgPSAweDg5MjENCiAgICArY29uc3QgX0JQRl9MTF9P
RkYgPSBfU0tGX0xMX09GRg0KICAgICtjb25zdCBfX1NDSEVEX0ggPSAxDQogICAgK2NvbnN0IF9J
UE9QVF9TRUNVUl9FRlRPID0gMHg3ODlhDQogICAgK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9O
U0VfRVJST1IgPSAyNjENCiAgICArY29uc3QgX19fTlJfc2htYXQgPSAzMA0KICAgICtjb25zdCBf
X19OUl9wa2V5X2FsbG9jID0gMzMwDQogICAgK2NvbnN0IF9QVFJBQ0VfUE9LRVVTRVIgPSA2DQog
ICAgK2NvbnN0IF9JRkFfRkxBR1MgPSA4DQogICAgK2NvbnN0IF9fX0RFQzY0X01BWF9FWFBfXyA9
IDM4NQ0KICAgICtjb25zdCBfUlRBWF9IT1BMSU1JVCA9IDEwDQogICAgK2NvbnN0IF9NQVBfTE9D
S0VEID0gMHgwMjAwMA0KICAgICtjb25zdCBfQlBGX0xEWCA9IDB4MDENCiAgICArY29uc3QgX1JU
QV9WSUEgPSAxOA0KICAgICtjb25zdCBfX1NDX1Y3X0xQQklHX09GRkJJRyA9IDI0MA0KICAgICtj
b25zdCBfQUZfSUIgPSBfUEZfSUINCiAgICArY29uc3QgX05MMSA9IDAwMDA0MDANCiAgICArY29u
c3QgX19TQ19DTEtfVENLID0gMg0KICAgICtjb25zdCBfTU9EX0NMS0IgPSBfQURKX1RJQ0sNCiAg
ICArY29uc3QgX0VORVRET1dOID0gMTAwDQogICAgK2NvbnN0IF9BRl9JUkRBID0gX1BGX0lSREEN
CiAgICArY29uc3QgX01DQVNUX0xFQVZFX0dST1VQID0gNDUNCiAgICArY29uc3QgX1JUTkxHUlBf
SVBWNl9NUk9VVEUgPSAxMA0KICAgICtjb25zdCBfUFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElP
TlMgPSBfX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMNCiAgICArY29uc3QgX19J
U09DOTVfU09VUkNFID0gMQ0KICAgICtjb25zdCBfX19ERUMxMjhfTUFYX0VYUF9fID0gNjE0NQ0K
ICAgICtjb25zdCBfSUVYVEVOID0gMDEwMDAwMA0KICAgICtjb25zdCBfSVBQT1JUX1JPVVRFU0VS
VkVSID0gNTIwDQogICAgK2NvbnN0IF9ORFRQQV9SRUZDTlQgPSAyDQogICAgK2NvbnN0IF9YODZf
RUZMQUdTX0NGX0JJVCA9IDANCiAgICArY29uc3QgX1NZU19tb3VudCA9IF9fX05SX21vdW50DQog
ICAgK2NvbnN0IF9GU19JTU1VVEFCTEVfRkwgPSAweDAwMDAwMDEwDQogICAgK2NvbnN0IF9fQ1Nf
WEJTNV9JTFAzMl9PRkZCSUdfTElCUyA9IDExMDYNCiAgICArY29uc3QgX1BSX0NBUF9BTUJJRU5U
X0NMRUFSX0FMTCA9IDQNCiAgICArY29uc3QgX19fTlJfcGtleV9mcmVlID0gMzMxDQogICAgK2Nv
bnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzEyOF9DVFMgPSA2DQogICAgK2NvbnN0IF9SVEZf
UE9MSUNZID0gMHgwNDAwMDAwMA0KICAgICtjb25zdCBfSUZMQV9CT05EX0RPV05ERUxBWSA9IDUN
CiAgICArY29uc3QgX05URl9ST1VURVIgPSAweDgwDQogICAgK2NvbnN0IF9JRkxBX1ZGX1RYX1JB
VEUgPSAzDQogICAgK2NvbnN0IF9GX1NFVF9SV19ISU5UID0gMTAzNg0KICAgICtjb25zdCBfRFRf
V0hUID0gMTQNCiAgICArY29uc3QgX1BUUkFDRV9TWVNFTVUgPSAzMQ0KICAgICtjb25zdCBfU0lP
Q0RJRkFERFIgPSAweDg5MzYNCiAgICArY29uc3QgX0VCQURGRCA9IDc3DQogICAgK2NvbnN0IF9J
UF9NU1MgPSA1NzYNCiAgICArY29uc3QgX1NZU19nZXRnaWQgPSBfX19OUl9nZXRnaWQNCiAgICAr
Y29uc3QgX1RJT0NOWENMID0gMHg1NDBEDQogICAgK2NvbnN0IF9fX1NIUlRfTUFYX18gPSAweDdm
ZmYNCiAgICArY29uc3QgX01BWF9JUE9QVExFTiA9IDQwDQogICAgK2NvbnN0IF9fX1BUSFJFQURf
TVVURVhfSEFWRV9QUkVWID0gMQ0KICAgICtjb25zdCBfU0lPR0lGSU5ERVggPSBfU0lPQ0dJRklO
REVYDQogICAgK2NvbnN0IF9JUFY2X0RPTlRGUkFHID0gNjINCiAgICArY29uc3QgX0IyNDAwID0g
MDAwMDAxMw0KICAgICtjb25zdCBfRUwySExUID0gNTENCiAgICArY29uc3QgX0lGTEFfQlJQT1JU
X0dST1VQX0ZXRF9NQVNLID0gMzENCiAgICArY29uc3QgX19TQ19USFJFQURfUFJJT1JJVFlfU0NI
RURVTElORyA9IDc5DQogICAgK2NvbnN0IF9XQUlUX01ZUEdSUCA9IDANCiAgICArY29uc3QgX1RD
QV9TVEFUUzIgPSA3DQogICAgK2NvbnN0IF9JRkxBX01BQ1ZMQU5fRkxBR1MgPSAyDQogICAgK2Nv
bnN0IF9fX05SX2Z0cnVuY2F0ZSA9IDc3DQogICAgK2NvbnN0IF9JRkxBX1ZGX1NUQVRTID0gOA0K
ICAgICtjb25zdCBfSVBQUk9UT19TQ1RQID0gMTMyDQogICAgK2NvbnN0IF9TWVNfbXVubG9ja2Fs
bCA9IF9fX05SX211bmxvY2thbGwNCiAgICArY29uc3QgX1JMSU1JVF9BUyA9IDkNCiAgICArY29u
c3QgX0lOVDMyX01JTiA9ICgtMjE0NzQ4MzY0Ny0xKQ0KICAgICtjb25zdCBfX0NTX1Y2X0VOViA9
IDExNDgNCiAgICArY29uc3QgX0lQX09GRk1BU0sgPSAweDFmZmYNCiAgICArY29uc3QgX0lOVDY0
X1dJRFRIID0gNjQNCiAgICArY29uc3QgX1BBQ0tBR0VfVVJMID0gIiINCiAgICArY29uc3QgX0lO
VF9GQVNUMzJfV0lEVEggPSBfX19XT1JEU0laRQ0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfQ0lQ
SEVSX1NVSVRFID0gNA0KICAgICtjb25zdCBfVUlOVE1BWF9XSURUSCA9IDY0DQogICAgK2NvbnN0
IF9SVE1TR19ORVdSVUxFID0gMHgzMQ0KICAgICtjb25zdCBfX1NDX05MX05NQVggPSAxMjINCiAg
ICArY29uc3QgX19fRkxUNjRfSEFTX0lORklOSVRZX18gPSAxDQogICAgK2NvbnN0IF9YODZfRUZM
QUdTX1ZNX0JJVCA9IDE3DQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1BST0NFU1NfU0hBUkVE
ID0gMjAwODA5DQogICAgK2NvbnN0IF9GTkRFTEFZID0gX09fTkRFTEFZDQogICAgK2NvbnN0IF9J
RkxBX0JSX01DQVNUX1FVRVJZX1VTRV9JRkFERFIgPSAyNA0KICAgICtjb25zdCBfUFJJdUxFQVNU
MTYgPSAidSINCiAgICArY29uc3QgX1JURl9HQVRFV0FZID0gMHgwMDAyDQogICAgK2NvbnN0IF9T
WVNfbGNob3duID0gX19fTlJfbGNob3duDQogICAgK2NvbnN0IF9TWVNfbGluayA9IF9fX05SX2xp
bmsNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fTE9DQUw2ID0gMTcNCiAgICArY29uc3QgX0lQX1JF
Q1ZPUklHRFNUQUREUiA9IF9JUF9PUklHRFNUQUREUg0KICAgICtjb25zdCBfUlRNX0RFTExJTksg
PSAxNw0KICAgICtjb25zdCBfUlRNX05FV05FVENPTkYgPSA4MA0KICAgICtjb25zdCBfSVBUT1Nf
RFNDUF9FRiA9IDB4YjgNCiAgICArY29uc3QgX1BUUkFDRV9MSVNURU4gPSAxNjkwNA0KICAgICtj
b25zdCBfU0NNX1RJTUVTVEFNUElOR19PUFRfU1RBVFMgPSA1NA0KICAgICtjb25zdCBfX1BPU0lY
X1NFTUFQSE9SRVMgPSAyMDA4MDkNCiAgICArY29uc3QgX19JT0NfVFlQRU1BU0sgPSAoKDEgPDwg
X19JT0NfVFlQRUJJVFMpLTEpDQogICAgK2NvbnN0IF9YODZfQ1I0X01DRV9CSVQgPSA2DQogICAg
K2NvbnN0IF9fX0ZMVF9IQVNfSU5GSU5JVFlfXyA9IDENCiAgICArY29uc3QgX0VUSF9QX01BQ1NF
QyA9IDB4ODhFNQ0KICAgICtjb25zdCBfX19MT05HX1dJRFRIX18gPSA2NA0KICAgICtjb25zdCBf
SEFWRV9ORVRfSUZfQVJQX0ggPSAxDQogICAgK2NvbnN0IF9fTkVUX0lGX0ggPSAxDQogICAgK2Nv
bnN0IF9USU9DU1RJID0gMHg1NDEyDQogICAgK2NvbnN0IF9TWVNfc2VuZGZpbGUgPSBfX19OUl9z
ZW5kZmlsZQ0KICAgICtjb25zdCBfX19OUl9zd2Fwb24gPSAxNjcNCiAgICArY29uc3QgX0lOTENS
ID0gMDAwMDEwMA0KICAgICtjb25zdCBfU19JRlJFRyA9IF9fX1NfSUZSRUcNCiAgICArY29uc3Qg
X1JFR19SOSA9IDENCiAgICArY29uc3QgX1BPU0lYX01BRFZfRE9OVE5FRUQgPSA0DQogICAgK2Nv
bnN0IF9fX1VTRV9VTklYOTggPSAxDQogICAgK2NvbnN0IF9JTjZfQUREUl9HRU5fTU9ERV9FVUk2
NCA9IDANCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX1BST1hZQVJQX1dJRkkgPSAxMg0KICAgICtj
b25zdCBfU0hVVF9XUiA9IDENCiAgICArY29uc3QgX0VDT05OUkVGVVNFRCA9IDExMQ0KICAgICtj
b25zdCBfUEZfQUxHID0gMzgNCiAgICArY29uc3QgX19fSUZMQV9JTkZPX01BWCA9IDYNCiAgICAr
Y29uc3QgX19TQ19QT0xMID0gNTgNCiAgICArY29uc3QgX19fSUZMQV9JTkVUNl9NQVggPSA5DQog
ICAgK2NvbnN0IF9NQVBfRklYRURfTk9SRVBMQUNFID0gMHgxMDAwMDANCiAgICArY29uc3QgX19D
U19QT1NJWF9WN19MUDY0X09GRjY0X0xJTlRGTEFHUyA9IDExNDMNCiAgICArY29uc3QgX1BPUlRf
UFJPRklMRV9NQVggPSA0MA0KICAgICtjb25zdCBfVENQX0NPT0tJRV9QQUlSX1NJWkUgPSAoMipf
VENQX0NPT0tJRV9NQVgpDQogICAgK2NvbnN0IF9QVFJBQ0VfUEVFS1NJR0lORk9fU0hBUkVEID0g
MQ0KICAgICtjb25zdCBfTlVEX1NUQUxFID0gMHgwNA0KICAgICtjb25zdCBfTkVUTElOS19GSUJf
TE9PS1VQID0gMTANCiAgICArY29uc3QgX1JUTV9CQVNFID0gMTYNCiAgICArY29uc3QgX1BGX1NF
Q1VSSVRZID0gMTQNCiAgICArY29uc3QgX1NQTElDRV9GX01PVkUgPSAxDQogICAgK2NvbnN0IF9f
X05SX2tpbGwgPSA2Mg0KICAgICtjb25zdCBfU0lHU1RLU1ogPSA4MTkyDQogICAgK2NvbnN0IF9D
UjAgPSAwMDAwMDAwDQogICAgK2NvbnN0IF9DUjEgPSAwMDAxMDAwDQogICAgK2NvbnN0IF9fX1dD
SEFSX1dJRFRIX18gPSAzMg0KICAgICtjb25zdCBfX19JTlRfRkFTVDhfV0lEVEhfXyA9IDgNCiAg
ICArY29uc3QgX0VUSF9QX1RFQiA9IDB4NjU1OA0KICAgICtjb25zdCBfSVBQT1JUX0ZUUCA9IDIx
DQogICAgK2NvbnN0IF9TVEFfTU9ERSA9IDB4NDAwMA0KICAgICtjb25zdCBfQlBGX0lORCA9IDB4
NDANCiAgICArY29uc3QgX0ZGSV9UWVBFX1NUUlVDVCA9IDEzDQogICAgK2NvbnN0IF9NU0dfWkVS
T0NPUFkgPSA2NzEwODg2NA0KICAgICtjb25zdCBfX0VORElBTl9IID0gMQ0KICAgICtjb25zdCBf
X1BPU0lYX1RZUEVEX01FTU9SWV9PQkpFQ1RTID0gLTENCiAgICArY29uc3QgX1NZU19tcV90aW1l
ZHJlY2VpdmUgPSBfX19OUl9tcV90aW1lZHJlY2VpdmUNCiAgICArY29uc3QgX2Vwb2xsX2RhdGFf
b2Zmc2V0ID0gNA0KICAgICtjb25zdCBfR1RQX1JPTEVfU0dTTiA9IDENCiAgICArY29uc3QgX05E
VEFfU1RBVFMgPSA3DQogICAgK2NvbnN0IF9TQ01fUklHSFRTID0gMQ0KICAgICtjb25zdCBfVENQ
X1JFQ1ZfUVVFVUUgPSAxDQogICAgK2NvbnN0IF9fUE9TSVhfVjZfTFA2NF9PRkY2NCA9IDENCiAg
ICArY29uc3QgX0FGX0FQUExFVEFMSyA9IF9QRl9BUFBMRVRBTEsNCiAgICArY29uc3QgX19fU0la
RU9GX0ZMT0FUX18gPSA0DQogICAgK2NvbnN0IF9QRl9DQU4gPSAyOQ0KICAgICtjb25zdCBfUlRG
X0xPQ0FMID0gMHg4MDAwMDAwMA0KICAgICtjb25zdCBfTkxNU0dfQUxJR05UTyA9IDQNCiAgICAr
Y29uc3QgX19fVUlOVF9GQVNUMTZfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYNCiAgICArY29u
c3QgX1NPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSyA9IDI0DQogICAgK2NvbnN0IF9fX1NJ
WkVPRl9QT0lOVEVSX18gPSA4DQogICAgK2NvbnN0IF9fX05SX21lbWZkX2NyZWF0ZSA9IDMxOQ0K
ICAgICtjb25zdCBfU1lTX3Rna2lsbCA9IF9fX05SX3Rna2lsbA0KICAgICtjb25zdCBfWENBU0Ug
PSAwMDAwMDA0DQogICAgK2NvbnN0IF9WTUlOID0gNg0KICAgICtjb25zdCBfQjU3NjAwID0gMDAx
MDAwMQ0KICAgICtjb25zdCBfSUZMQV9FVkVOVF9OT1RJRllfUEVFUlMgPSA0DQogICAgK2NvbnN0
IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfTERGTEFHUyA9IDExMzMNCiAgICArY29uc3QgX1JU
UFJPVF9CT09UID0gMw0KICAgICtjb25zdCBfVENQT1BUX1RJTUVTVEFNUCA9IDgNCiAgICArY29u
c3QgX1BSSXhMRUFTVDggPSAieCINCiAgICArY29uc3QgX0VJTlBST0dSRVNTID0gMTE1DQogICAg
K2NvbnN0IF9JTl9DTEFTU0NfTlNISUZUID0gOA0KICAgICtjb25zdCBfU0NNX1RJTUVTVEFNUE5T
ID0gX1NPX1RJTUVTVEFNUE5TDQogICAgK2NvbnN0IF9JRkxBX0FERFJFU1MgPSAxDQogICAgK2Nv
bnN0IF9JRkxBX1ZGX0lORk9fVU5TUEVDID0gMA0KICAgICtjb25zdCBfTVNfU1lOQ0hST05PVVMg
PSAxNg0KICAgICtjb25zdCBfU1lTX3JlbmFtZWF0ID0gX19fTlJfcmVuYW1lYXQNCiAgICArY29u
c3QgX0VUSF9QX1FJTlExID0gMHg5MTAwDQogICAgK2NvbnN0IF9FVEhfUF9RSU5RMiA9IDB4OTIw
MA0KICAgICtjb25zdCBfRVRIX1BfUUlOUTMgPSAweDkzMDANCiAgICArY29uc3QgX19fTlJfcXVv
dGFjdGwgPSAxNzkNCiAgICArY29uc3QgX05TU19CVUZMRU5fUEFTU1dEID0gMTAyNA0KICAgICtj
b25zdCBfX1BPU0lYMl9TV19ERVYgPSBfX19QT1NJWDJfVEhJU19WRVJTSU9ODQogICAgK2NvbnN0
IF9UQ1NBTk9XID0gMA0KICAgICtjb25zdCBfQ1M2ID0gMDAwMDAyMA0KICAgICtjb25zdCBfQ1M3
ID0gMDAwMDA0MA0KICAgICtjb25zdCBfQ1M4ID0gMDAwMDA2MA0KICAgICtjb25zdCBfUFJJZExF
QVNUOCA9ICJkIg0KICAgICtjb25zdCBfSVBQT1JUX1RJTUVTRVJWRVIgPSAzNw0KICAgICtjb25z
dCBfRl9PV05FUl9QR1JQID0gMg0KICAgICtjb25zdCBfQUZfQVRNUFZDID0gX1BGX0FUTVBWQw0K
ICAgICtjb25zdCBfUlRNR1JQX0lQVjRfSUZBRERSID0gMHgxMA0KICAgICtjb25zdCBfU1lTX3Jl
Y3Zmcm9tID0gX19fTlJfcmVjdmZyb20NCiAgICArY29uc3QgX19fRkxUNjRYX01JTl8xMF9FWFBf
XyA9ICgtNDkzMSkNCiAgICArY29uc3QgX1NfSVhHUlAgPSAoX1NfSVhVU1IgPj4gMykNCiAgICAr
Y29uc3QgX1NZU19ta25vZCA9IF9fX05SX21rbm9kDQogICAgK2NvbnN0IF9ORVRMSU5LX1NNQyA9
IDIyDQogICAgK2NvbnN0IF9TWVNfdXRpbWVzID0gX19fTlJfdXRpbWVzDQogICAgK2NvbnN0IF9G
U19YRkxBR19IQVNBVFRSID0gMHg4MDAwMDAwMA0KICAgICtjb25zdCBfX19ERUNfRVZBTF9NRVRI
T0RfXyA9IDINCiAgICArY29uc3QgX1NJR1RUSU4gPSAyMQ0KICAgICtjb25zdCBfSVBQUk9UT19F
U1AgPSA1MA0KICAgICtjb25zdCBfU0tGX0FEX05MQVRUUiA9IDEyDQogICAgK2NvbnN0IF9FQUlf
TUVNT1JZID0gLTEwDQogICAgK2NvbnN0IF9TWVNfbGlzdHhhdHRyID0gX19fTlJfbGlzdHhhdHRy
DQogICAgK2NvbnN0IF9BUlBPUF9OQUsgPSAxMA0KICAgICtjb25zdCBfQlBGX0pTRVQgPSAweDQw
DQogICAgK2NvbnN0IF9OX1RUWSA9IDANCiAgICArY29uc3QgX19QQ19TT0NLX01BWEJVRiA9IDEy
DQogICAgK2NvbnN0IF9USU9DTV9EU1IgPSAweDEwMA0KICAgICtjb25zdCBfX19GTFQzMl9NSU5f
RVhQX18gPSAoLTEyNSkNCiAgICArY29uc3QgX1RDT0ZMVVNIID0gMQ0KICAgICtjb25zdCBfVFVO
REVUQUNIRklMVEVSX3ZhbCA9IDEwNzQ4MTIxMTgNCiAgICArY29uc3QgX19DU19QT1NJWF9WNl9J
TFAzMl9PRkYzMl9MSU5URkxBR1MgPSAxMTE5DQogICAgK2NvbnN0IF9NQURWX0hVR0VQQUdFID0g
MTQNCiAgICArY29uc3QgX1RDSU9GTFVTSCA9IDINCiAgICArY29uc3QgX0VUSF9QX05TSCA9IDB4
ODk0Rg0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9IQVNIX01BWCA9IDI3DQogICAgK2NvbnN0
IF9JRkxBX1BQUF9ERVZfRkQgPSAxDQogICAgK2NvbnN0IF9TX0lTVUlEID0gX19fU19JU1VJRA0K
ICAgICtjb25zdCBfVlNUQVJUID0gOA0KICAgICtjb25zdCBfRVRIX1BfQ0FORkQgPSAweDAwMEQN
CiAgICArY29uc3QgX19CSVRTX1NURElOVF9JTlROX0ggPSAxDQogICAgK2NvbnN0IF9CUEZfQUxV
ID0gMHgwNA0KICAgICtjb25zdCBfX19TSVpFT0ZfRkxPQVQ4MF9fID0gMTYNCiAgICArY29uc3Qg
X19QT1NJWF9TU0laRV9NQVggPSAzMjc2Nw0KICAgICtjb25zdCBfX0NTX1BBVEggPSAwDQogICAg
K2NvbnN0IF9IQVZFX1VOU0VURU5WID0gMQ0KICAgICtjb25zdCBfRlJBTUVfU0laRSA9IDE2OA0K
ICAgICtjb25zdCBfSUZMQV9WWExBTl9VRFBfWkVST19DU1VNNl9UWCA9IDE5DQogICAgK2NvbnN0
IF9fU1lTX1RJTUVYX0ggPSAxDQogICAgK2NvbnN0IF9JRkxBX1RVTl9VTlNQRUMgPSAwDQogICAg
K2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX0NBRF9PRkYgPSAweDAwMDAwMDAwDQogICAgK2NvbnN0
IF9TSUdVU1IxID0gMTANCiAgICArY29uc3QgX1NJR1VTUjIgPSAxMg0KICAgICtjb25zdCBfSEFW
RV9TWVNfU1RBVF9IID0gMQ0KICAgICtjb25zdCBfSEFWRV9GQUxMT0NBVEUgPSAxDQogICAgK2Nv
bnN0IF9fX05SX3Vuc2hhcmUgPSAyNzINCiAgICArY29uc3QgX0NYODZfQ0NSMCA9IDB4YzANCiAg
ICArY29uc3QgX0NYODZfQ0NSMSA9IDB4YzENCiAgICArY29uc3QgX0NYODZfQ0NSMiA9IDB4YzIN
CiAgICArY29uc3QgX0NYODZfQ0NSMyA9IDB4YzMNCiAgICArY29uc3QgX1NZU19ydF9zaWd0aW1l
ZHdhaXQgPSBfX19OUl9ydF9zaWd0aW1lZHdhaXQNCiAgICArY29uc3QgX19fTlJfdGtpbGwgPSAy
MDANCiAgICArY29uc3QgX0NYODZfQ0NSNiA9IDB4ZWENCiAgICArY29uc3QgX0NYODZfQ0NSNyA9
IDB4ZWINCiAgICArY29uc3QgX01TR19NT1JFID0gMzI3NjgNCiAgICArY29uc3QgX0lQT1BUX1RT
X1RTT05MWSA9IDANCiAgICArY29uc3QgX0hBVkVfTElOVVhfUlRORVRMSU5LX0ggPSAxDQogICAg
K2NvbnN0IF9QUklvMTYgPSAibyINCiAgICArY29uc3QgX1BUUkFDRV9QT0tFVVNSID0gNg0KICAg
ICtjb25zdCBfX19OUl9nZXRjcHUgPSAzMDkNCiAgICArY29uc3QgX0FGX0RFQ25ldCA9IF9QRl9E
RUNuZXQNCiAgICArY29uc3QgX1BBQ0tBR0VfTkFNRSA9ICJwYWNrYWdlLXVudXNlZCINCiAgICAr
Y29uc3QgX19TQ19YT1BFTl9VTklYID0gOTENCiAgICArY29uc3QgX1g4Nl9DUjBfTldfQklUID0g
MjkNCiAgICArY29uc3QgX01GRF9BTExPV19TRUFMSU5HID0gMg0KICAgICtjb25zdCBfRUFJX0NB
TkNFTEVEID0gLTEwMQ0KICAgICtjb25zdCBfX19OUl9yZWFkdiA9IDE5DQogICAgK2NvbnN0IF9f
UE9TSVgyX1JFX0RVUF9NQVggPSAyNTUNCiAgICArY29uc3QgX1RVTlNFVElGSU5ERVhfdmFsID0g
MTA3NDAyNTY5MA0KICAgICtjb25zdCBfX1JQQ19ORVREQl9IID0gMQ0KICAgICtjb25zdCBfTUFQ
X0hVR0VfTUFTSyA9IDB4M2YNCiAgICArY29uc3QgX05EX05BX0ZMQUdfU09MSUNJVEVEID0gMHgw
MDAwMDA0MA0KICAgICtjb25zdCBfVFVOU0VUVk5FVEhEUlNaX3ZhbCA9IDEwNzQwMjU2ODgNCiAg
ICArY29uc3QgX0VBSV9BRERSRkFNSUxZID0gLTkNCiAgICArY29uc3QgX19fU0laRU9GX0ZMT0FU
MTI4X18gPSAxNg0KICAgICtjb25zdCBfX19OUl92bXNwbGljZSA9IDI3OA0KICAgICtjb25zdCBf
X19OUl91bmFtZSA9IDYzDQogICAgK2NvbnN0IF9UQ1NFVFNfdmFsID0gMjE1MDYNCiAgICArY29u
c3QgX19fTlJfZXhlY3ZlYXQgPSAzMjINCiAgICArY29uc3QgX1NZU190aW1lcyA9IF9fX05SX3Rp
bWVzDQogICAgK2NvbnN0IF9SVE1fRl9QUkVGSVggPSAweDgwMA0KICAgICtjb25zdCBfU0VFS19D
VVIgPSAxDQogICAgK2NvbnN0IF9JRkxBX0JSX0hFTExPX1RJTUVSID0gMTYNCiAgICArY29uc3Qg
X19QQ19QSVBFX0JVRiA9IDUNCiAgICArY29uc3QgX19DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdf
TElOVEZMQUdTID0gMTEzMQ0KICAgICtjb25zdCBfSUZMQV9HRU5FVkVfUkVNT1RFID0gMg0KICAg
ICtjb25zdCBfUlROTEdSUF9NUExTX1JPVVRFID0gMjcNCiAgICArY29uc3QgX1NZU190aW1lcl9z
ZXR0aW1lID0gX19fTlJfdGltZXJfc2V0dGltZQ0KICAgICtjb25zdCBfUEZfTExDID0gMjYNCiAg
ICArY29uc3QgX0VUSF9QX0xJTktfQ1RMID0gMHg4ODZjDQogICAgK2NvbnN0IF9JUF9PUFRJT05T
ID0gNA0KICAgICtjb25zdCBfQ1g4Nl9ESVIxID0gMHhmZg0KICAgICtjb25zdCBfX1BPU0lYX1JU
U0lHX01BWCA9IDgNCiAgICArY29uc3QgX1RJTUVfSU5TID0gMQ0KICAgICtjb25zdCBfRUlTRElS
ID0gMjENCiAgICArY29uc3QgX19CSVRTX1RZUEVTX0ggPSAxDQogICAgK2NvbnN0IF9fU1lTX1NP
Q0tFVF9IID0gMQ0KICAgICtjb25zdCBfX19OUl9mc2V0eGF0dHIgPSAxOTANCiAgICArY29uc3Qg
X0VJTyA9IDUNCiAgICArY29uc3QgX0lQUFJPVE9fSE9QT1BUUyA9IDANCiAgICArY29uc3QgX0JM
T0NLX1NJWkUgPSAoMTw8X0JMT0NLX1NJWkVfQklUUykNCiAgICArY29uc3QgX0ZTX0VOQ1JZUFRJ
T05fTU9ERV9TUEVDSzEyOF8yNTZfQ1RTID0gOA0KICAgICtjb25zdCBfSUZGX05PQVJQID0gMTI4
DQogICAgK2NvbnN0IF9fX0ZMVDY0WF9NQU5UX0RJR19fID0gNjQNCiAgICArY29uc3QgX0VSRU1P
VEUgPSA2Ng0KICAgICtjb25zdCBfX19GTFQ2NF9NSU5fXyA9IDEuMQ0KICAgICtjb25zdCBfTkRf
T1BUX1JUUl9BRFZfSU5URVJWQUwgPSA3DQogICAgK2NvbnN0IF9TWVNfcGlwZSA9IF9fX05SX3Bp
cGUNCiAgICArY29uc3QgX05URl9FWFRfTEVBUk5FRCA9IDB4MTANCiAgICArY29uc3QgX1NUQV9Q
UFNFUlJPUiA9IDB4MDgwMA0KICAgICtjb25zdCBfRVJFTU9URUlPID0gMTIxDQogICAgK2NvbnN0
IF9JTlRfRkFTVDE2X01JTiA9ICgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xKQ0KICAgICtjb25zdCBf
SEFWRV9MSU5VWF9GSUxURVJfSCA9IDENCiAgICArY29uc3QgX0VJRFJNID0gNDMNCiAgICArY29u
c3QgX19TQ19GSUZPID0gMTQ0DQogICAgK2NvbnN0IF9TSV9RVUVVRSA9IC0xDQogICAgK2NvbnN0
IF9TWVNfZ2V0X2tlcm5lbF9zeW1zID0gX19fTlJfZ2V0X2tlcm5lbF9zeW1zDQogICAgK2NvbnN0
IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfTElCUyA9IDExMTgNCiAgICArY29uc3QgX1RDT09O
ID0gMQ0KICAgICtjb25zdCBfRl9EVVBGRCA9IDANCiAgICArY29uc3QgX1VJTlRfTEVBU1QxNl9X
SURUSCA9IDE2DQogICAgK2NvbnN0IF9TWVNfc2V0cmxpbWl0ID0gX19fTlJfc2V0cmxpbWl0DQog
ICAgK2NvbnN0IF9fUEFUSF9QUk9UT0NPTFMgPSAiL2V0Yy9wcm90b2NvbHMiDQogICAgK2NvbnN0
IF9NT0RfVEFJID0gX0FESl9UQUkNCiAgICArY29uc3QgX19TQ19UUkFDRV9JTkhFUklUID0gMTgz
DQogICAgK2NvbnN0IF9fX05SX3NlbmR0byA9IDQ0DQogICAgK2NvbnN0IF9ORVRMSU5LX1JPVVRF
ID0gMA0KICAgICtjb25zdCBfUFRSQUNFX0tJTEwgPSA4DQogICAgK2NvbnN0IF9SVE5MR1JQX01E
QiA9IDI2DQogICAgK2NvbnN0IF9ORVREQl9TVUNDRVNTID0gMA0KICAgICtjb25zdCBfRl9TRVRG
RCA9IDINCiAgICArY29uc3QgX0hBVkVfTUtESVJBVCA9IDENCiAgICArY29uc3QgX0lGTEFfVlhM
QU5fTElNSVQgPSA5DQogICAgK2NvbnN0IF9fU0NfSE9TVF9OQU1FX01BWCA9IDE4MA0KICAgICtj
b25zdCBfTkxETFkgPSAwMDAwNDAwDQogICAgK2NvbnN0IF9BREpfVElDSyA9IDB4NDAwMA0KICAg
ICtjb25zdCBfX1BPU0lYMl9MSU5FX01BWCA9IDIwNDgNCiAgICArY29uc3QgX0ZfU0VURkwgPSA0
DQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9MREZMQUdTID0gMTE0MQ0KICAg
ICtjb25zdCBfX19OUl9zZXRyZXN1aWQgPSAxMTcNCiAgICArY29uc3QgX19fREVDNjRfTUlOX0VY
UF9fID0gKC0zODIpDQogICAgK2NvbnN0IF9MX1NFVCA9IDANCiAgICArY29uc3QgX0lGTEFfTlVN
X1JYX1FVRVVFUyA9IDMyDQogICAgK2NvbnN0IF9TT19TTkRMT1dBVCA9IDE5DQogICAgK2NvbnN0
IF9TSU9DU0lGVFhRTEVOID0gMHg4OTQzDQogICAgK2NvbnN0IF9TT19USU1FU1RBTVBOUyA9IDM1
DQogICAgK2NvbnN0IF9JTlRfRkFTVDMyX01JTiA9ICgtOTIyMzM3MjAzNjg1NDc3NTgwNy0xKQ0K
ICAgICtjb25zdCBfRlNfUE9MSUNZX0ZMQUdTX1BBRF84ID0gMHgwMQ0KICAgICtjb25zdCBfU09f
QklORFRPREVWSUNFID0gMjUNCiAgICArY29uc3QgX1hEUF9GTEFHU19EUlZfTU9ERSA9ICgxIDw8
IDIpDQogICAgK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVNZU0dPT0QgPSAxDQogICAgK2NvbnN0IF9T
S0ZfQURfTkxBVFRSX05FU1QgPSAxNg0KICAgICtjb25zdCBfUlRBX1RBQkxFID0gMTUNCiAgICAr
Y29uc3QgX1NJT0NEUkFSUCA9IDB4ODk2MA0KICAgICtjb25zdCBfUFJFRklYX1VOU1BFQyA9IDAN
CiAgICArY29uc3QgX0lDTVA2X0RTVF9VTlJFQUNIX05PUE9SVCA9IDQNCiAgICArY29uc3QgX1Bf
UElEID0gMQ0KICAgICtjb25zdCBfX1VUU05BTUVfU1lTTkFNRV9MRU5HVEggPSBfX1VUU05BTUVf
TEVOR1RIDQogICAgK2NvbnN0IF9fUE9TSVhfTUVNTE9DS19SQU5HRSA9IDIwMDgwOQ0KICAgICtj
b25zdCBfX19ERUMxMjhfTUlOX0VYUF9fID0gKC02MTQyKQ0KICAgICtjb25zdCBfTkxNX0ZfTVVM
VEkgPSAweDAyDQogICAgK2NvbnN0IF9TT0NLX0NMT0VYRUMgPSA1MjQyODgNCiAgICArY29uc3Qg
X19fRkxUX01BWF9fID0gMS4xDQogICAgK2NvbnN0IF9QT1NJWF9GQURWX05PUkVVU0UgPSBfX19Q
T1NJWF9GQURWX05PUkVVU0UNCiAgICArY29uc3QgX19fb3NvY2thZGRyX2RlZmluZWQgPSAxDQog
ICAgK2NvbnN0IF9QVFJBQ0VfT19UUkFDRUVYRUMgPSAxNg0KICAgICtjb25zdCBfVUlOVF9GQVNU
NjRfV0lEVEggPSA2NA0KICAgICtjb25zdCBfRVRIX1BfU05BUCA9IDB4MDAwNQ0KICAgICtjb25z
dCBfX19TSVpFT0ZfUFRIUkVBRF9CQVJSSUVSX1QgPSAzMg0KICAgICtjb25zdCBfSUZMQV9CUl9U
T1BPTE9HWV9DSEFOR0UgPSAxNA0KICAgICtjb25zdCBfX0JJVFNfVUlPX0xJTV9IID0gMQ0KICAg
ICtjb25zdCBfUFRSQUNFX09fVFJBQ0VWRk9SS0RPTkUgPSAzMg0KICAgICtjb25zdCBfX1NDX0xP
R0lOX05BTUVfTUFYID0gNzENCiAgICArY29uc3QgX0VUSEVSTVRVID0gX0VUSF9EQVRBX0xFTg0K
ICAgICtjb25zdCBfUE9TSVhfRkFEVl9ET05UTkVFRCA9IF9fX1BPU0lYX0ZBRFZfRE9OVE5FRUQN
CiAgICArY29uc3QgX1JUUFJPVF9CQUJFTCA9IDQyDQogICAgK2NvbnN0IF9GX0dFVExFQVNFID0g
MTAyNQ0KICAgICtjb25zdCBfX1NDX0xFVkVMNF9DQUNIRV9BU1NPQyA9IDE5OA0KICAgICtjb25z
dCBfSUZMQV9WTEFOX1BST1RPQ09MID0gNQ0KICAgICtjb25zdCBfSVBfVU5CTE9DS19TT1VSQ0Ug
PSAzNw0KICAgICtjb25zdCBfU09fUEFTU0NSRUQgPSAxNg0KICAgICtjb25zdCBfQ0xPQ0tfVEFJ
ID0gMTENCiAgICArY29uc3QgX05HUk9VUFNfTUFYID0gNjU1MzYNCiAgICArY29uc3QgX0ZJT1NF
VE9XTiA9IDB4ODkwMQ0KICAgICtjb25zdCBfX1NDX1BJSV9PU0lfQ09UUyA9IDYzDQogICAgK2Nv
bnN0IF9TSU9DREFSUCA9IDB4ODk1Mw0KICAgICtjb25zdCBfTUFQX0hVR0VfU0hJRlQgPSAyNg0K
ICAgICtjb25zdCBfVUlOVFBUUl9NQVggPSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpDQogICAgK2Nv
bnN0IF9FVEhfUF9XQU5fUFBQID0gMHgwMDA3DQogICAgK2NvbnN0IF9JTl9FWENMX1VOTElOSyA9
IDB4MDQwMDAwMDANCiAgICArY29uc3QgX1g4Nl9DUjBfV1BfQklUID0gMTYNCiAgICArY29uc3Qg
X09fRVhDTCA9IDAyMDANCiAgICArY29uc3QgX0JQRl9ORUcgPSAweDgwDQogICAgK2NvbnN0IF9N
U0dfTk9TSUdOQUwgPSAxNjM4NA0KICAgICtjb25zdCBfSVBWNl9SWEhPUE9QVFMgPSBfSVBWNl9I
T1BPUFRTDQogICAgK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTUFDQUREUl9DT1VOVCA9IDYNCiAgICAr
Y29uc3QgX19DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MgPSAxMTAxDQogICAgK2NvbnN0IF9Q
VFJBQ0VfR0VUUkVHU0VUID0gMTY5MDANCiAgICArY29uc3QgX1NLRl9BRF9JRklOREVYID0gOA0K
ICAgICtjb25zdCBfX1NZU19NTUFOX0ggPSAxDQogICAgK2NvbnN0IF9NU19BQ1RJVkUgPSAxMDcz
NzQxODI0DQogICAgK2NvbnN0IF9SX09LID0gNA0KICAgICtjb25zdCBfSVBWNl9SRUNWRlJBR1NJ
WkUgPSA3Nw0KICAgICtjb25zdCBfX19OUl9ydF9zaWdyZXR1cm4gPSAxNQ0KICAgICtjb25zdCBf
X19HTlVDX1BBVENITEVWRUxfXyA9IDANCiAgICArY29uc3QgX19fTlJfZ2V0aXRpbWVyID0gMzYN
CiAgICArY29uc3QgX19fU0laRU9GX0lOVF9fID0gNA0KICAgICtjb25zdCBfX19VSU5UX0xFQVNU
NjRfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZmZmYNCiAgICArY29uc3QgX05EVFBBX1VDQVNUX1BS
T0JFUyA9IDEwDQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9QQUQgPSAyNg0KICAgICtjb25zdCBf
X1hCUzVfTFA2NF9PRkY2NCA9IDENCiAgICArY29uc3QgX1NJR0FMUk0gPSAxNA0KICAgICtjb25z
dCBfTVNHX09PQiA9IDENCiAgICArY29uc3QgX1JUTl9USFJPVyA9IDkNCiAgICArY29uc3QgX1VM
T05HX1dJRFRIID0gX19fV09SRFNJWkUNCiAgICArY29uc3QgX1g4Nl9DUjRfUFNFX0JJVCA9IDQN
CiAgICArY29uc3QgX19TQ18yX0ZPUlRfREVWID0gNDkNCiAgICArY29uc3QgX19fTlJfc3lzbG9n
ID0gMTAzDQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0NGTEFHUyA9IDEx
MjgNCiAgICArY29uc3QgX19fR0NDX0FUT01JQ19TSE9SVF9MT0NLX0ZSRUUgPSAyDQogICAgK2Nv
bnN0IF9fX0dMSUJDX1VTRV9MSUJfRVhUMiA9IDENCiAgICArY29uc3QgX1RJT0NOT1RUWV92YWwg
PSAyMTUzOA0KICAgICtjb25zdCBfQUZfUEhPTkVUID0gX1BGX1BIT05FVA0KICAgICtjb25zdCBf
TkVUTElOS19ORVRGSUxURVIgPSAxMg0KICAgICtjb25zdCBfRVRIX0ZDU19MRU4gPSA0DQogICAg
K2NvbnN0IF9GU19YRkxBR19BUFBFTkQgPSAweDAwMDAwMDEwDQogICAgK2NvbnN0IF9fX05SX2lv
Y3RsID0gMTYNCiAgICArY29uc3QgX0NYODZfQVJSX0JBU0UgPSAweGM0DQogICAgK2NvbnN0IF9B
SV9OVU1FUklDU0VSViA9IDB4MDQwMA0KICAgICtjb25zdCBfUFJfVFNDX0VOQUJMRSA9IDENCiAg
ICArY29uc3QgX1NDSEVEX0lETEUgPSA1DQogICAgK2NvbnN0IF9GX09LID0gMA0KICAgICtjb25z
dCBfX1NDX05MX1RFWFRNQVggPSAxMjQNCiAgICArY29uc3QgX0lQT1BUX01FQVNVUkVNRU5UID0g
X0lQT1BUX0RFQk1FQVMNCiAgICArY29uc3QgX1JUX1RBQkxFX0NPTVBBVCA9IDI1Mg0KICAgICtj
b25zdCBfX19OUl9nZXRwcmlvcml0eSA9IDE0MA0KICAgICtjb25zdCBfRlNfTk9DT1dfRkwgPSAw
eDAwODAwMDAwDQogICAgK2NvbnN0IF9JRkxBX05VTV9UWF9RVUVVRVMgPSAzMQ0KICAgICtjb25z
dCBfSVBWNl9IT1BPUFRTID0gNTQNCiAgICArY29uc3QgX19fTE9OR19MT05HX01BWF9fID0gMHg3
ZmZmZmZmZmZmZmZmZmZmDQogICAgK2NvbnN0IF9SVE1fTkVXTkVJR0hUQkwgPSA2NA0KICAgICtj
b25zdCBfVENQX1FVRVVFX1NFUSA9IDIxDQogICAgK2NvbnN0IF9JRkxBX0lORk9fU0xBVkVfREFU
QSA9IDUNCiAgICArY29uc3QgX19fVkVSU0lPTl9fID0gIjguMy4wIg0KICAgICtjb25zdCBfSUZM
QV9HRU5FVkVfSUQgPSAxDQogICAgK2NvbnN0IF9JQ01QNl9QQVJBTVBST0JfTkVYVEhFQURFUiA9
IDENCiAgICArY29uc3QgX1NZU19kZWxldGVfbW9kdWxlID0gX19fTlJfZGVsZXRlX21vZHVsZQ0K
ICAgICtjb25zdCBfSVBWNl9SVEhEUiA9IDU3DQogICAgK2NvbnN0IF9MTE9OR19NSU4gPSAoLV9M
TE9OR19NQVggLSAxKQ0KICAgICtjb25zdCBfRUNPTU0gPSA3MA0KICAgICtjb25zdCBfU1lTX3Rp
bWVyX2dldHRpbWUgPSBfX19OUl90aW1lcl9nZXR0aW1lDQogICAgK2NvbnN0IF9fX05SX21pZ3Jh
dGVfcGFnZXMgPSAyNTYNCiAgICArY29uc3QgX0lOX01PVkUgPSAoX0lOX01PVkVEX0ZST00gfCBf
SU5fTU9WRURfVE8pDQogICAgK2NvbnN0IF9QT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFID0gMA0K
ICAgICtjb25zdCBfTl9BWDI1ID0gNQ0KICAgICtjb25zdCBfX19PX0NMT0VYRUMgPSAwMjAwMDAw
MA0KICAgICtjb25zdCBfVldFUkFTRSA9IDE0DQogICAgK2NvbnN0IF9fX0lOT19UX01BVENIRVNf
SU5PNjRfVCA9IDENCiAgICArY29uc3QgX0VMSUJBQ0MgPSA3OQ0KICAgICtjb25zdCBfSVBPUFRf
U0VDVVJfVU5DTEFTUyA9IDB4MDAwMA0KICAgICtjb25zdCBfX1BPU0lYX1NIQVJFRF9NRU1PUllf
T0JKRUNUUyA9IDIwMDgwOQ0KICAgICtjb25zdCBfQVJQSFJEX0lQRERQID0gNzc3DQogICAgK2Nv
bnN0IF9JRkxBX0JPTkRfU0xBVkVfU1RBVEUgPSAxDQogICAgK2NvbnN0IF9STElNSVRfU1RBQ0sg
PSAzDQogICAgK2NvbnN0IF9QRl9BU0ggPSAxOA0KICAgICtjb25zdCBfX19OUl9nZXRwZWVybmFt
ZSA9IDUyDQogICAgK2NvbnN0IF9JUFY2X1JFQ1ZFUlIgPSAyNQ0KICAgICtjb25zdCBfTl9TVFJJ
UCA9IDQNCiAgICArY29uc3QgX0lQUFJPVE9fSUNNUCA9IDENCiAgICArY29uc3QgX1BSX1NWRV9W
TF9MRU5fTUFTSyA9IDB4ZmZmZg0KICAgICtjb25zdCBfRl9HRVRQSVBFX1NaID0gMTAzMg0KICAg
ICtjb25zdCBfSU9WX01BWCA9IF9fX0lPVl9NQVgNCiAgICArY29uc3QgX1JUUFJPVF9SSVAgPSAx
ODkNCiAgICArY29uc3QgX19fTlJfbmV3ZnN0YXRhdCA9IDI2Mg0KICAgICtjb25zdCBfX1NZU19N
T1VOVF9IID0gMQ0KICAgICtjb25zdCBfUFJfVEFTS19QRVJGX0VWRU5UU19FTkFCTEUgPSAzMg0K
ICAgICtjb25zdCBfSVBQUk9UT19QVVAgPSAxMg0KICAgICtjb25zdCBfRVRIX1BfU0xPVyA9IDB4
ODgwOQ0KICAgICtjb25zdCBfU1lTX2lub3RpZnlfcm1fd2F0Y2ggPSBfX19OUl9pbm90aWZ5X3Jt
X3dhdGNoDQogICAgK2NvbnN0IF9UQ1NFVEFXID0gMHg1NDA3DQogICAgK2NvbnN0IF9QQUNLRVRf
TVVMVElDQVNUID0gMg0KICAgICtjb25zdCBfX19JTlQzMl9NQVhfXyA9IDB4N2ZmZmZmZmYNCiAg
ICArY29uc3QgX0xJTlVYX1JFQk9PVF9DTURfQ0FEX09OID0gMHg4OUFCQ0RFRg0KICAgICtjb25z
dCBfSUZMQV9CT05EX0FEX0FDVE9SX1NZU19QUklPID0gMjQNCiAgICArY29uc3QgX1BSX1NFVF9E
VU1QQUJMRSA9IDQNCiAgICArY29uc3QgX0VUSF9QX0VDT05FVCA9IDB4MDAxOA0KICAgICtjb25z
dCBfU1lTX3NobWN0bCA9IF9fX05SX3NobWN0bA0KICAgICtjb25zdCBfTVNfU0hBUkVEID0gMTA0
ODU3Ng0KICAgICtjb25zdCBfX19JRkxBX1BQUF9NQVggPSAyDQogICAgK2NvbnN0IF9IQVZFX1NZ
U19TVEFURlNfSCA9IDENCiAgICArY29uc3QgX1hEUF9GTEFHU19NQVNLID0gKF9YRFBfRkxBR1Nf
VVBEQVRFX0lGX05PRVhJU1QgfCBfWERQX0ZMQUdTX01PREVTKQ0KICAgICtjb25zdCBfVElPQ0dS
UzQ4NSA9IDB4NTQyRQ0KICAgICtjb25zdCBfSVBWNl9SRUNWUEtUSU5GTyA9IDQ5DQogICAgK2Nv
bnN0IF9IQVZFX0xJTlVYX1JFQk9PVF9IID0gMQ0KICAgICtjb25zdCBfVENQX05PREVMQVkgPSAx
DQogICAgK2NvbnN0IF9QUkVGSVhfQUREUkVTUyA9IDENCiAgICArY29uc3QgX1JQTV9QQ09fQURE
ID0gMQ0KICAgICtjb25zdCBfVENQT1BUX01BWFNFRyA9IDINCiAgICArY29uc3QgX1NZU19zY2hl
ZF9nZXRhZmZpbml0eSA9IF9fX05SX3NjaGVkX2dldGFmZmluaXR5DQogICAgK2NvbnN0IF9fUkVF
TlRSQU5UID0gMQ0KICAgICtjb25zdCBfSVBWNl9EUk9QX01FTUJFUlNISVAgPSBfSVBWNl9MRUFW
RV9HUk9VUA0KICAgICtjb25zdCBfX1hPUEVOX1hQRzMgPSAxDQogICAgK2NvbnN0IF9FTUZJTEUg
PSAyNA0KICAgICtjb25zdCBfX1NDX1hPUEVOX1JFQUxUSU1FID0gMTMwDQogICAgK2NvbnN0IF9U
SF9QVVNIID0gMHgwOA0KICAgICtjb25zdCBfSUZMQV9CUl9QQUQgPSA0MA0KICAgICtjb25zdCBf
Q0xEX0tJTExFRCA9IDINCiAgICArY29uc3QgX1NJR1RUT1UgPSAyMg0KICAgICtjb25zdCBfSUZM
QV9WRl9TUE9PRkNISyA9IDQNCiAgICArY29uc3QgX19TQ19NQl9MRU5fTUFYID0gMTA4DQogICAg
K2NvbnN0IF9fX1VJTlQ2NF9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBf
SUZMQV9HRU5FVkVfVURQX1pFUk9fQ1NVTTZfUlggPSAxMA0KICAgICtjb25zdCBfX19saW51eCA9
IDENCiAgICArY29uc3QgX1JMSU1JVF9OT0ZJTEUgPSA3DQogICAgK2NvbnN0IF9JRkxBX0JPTkRf
VExCX0RZTkFNSUNfTEIgPSAyNw0KICAgICtjb25zdCBfTkRUQV9DT05GSUcgPSA1DQogICAgK2Nv
bnN0IF9fUE9TSVgyX0NfVkVSU0lPTiA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04NCiAgICArY29u
c3QgX19QT1NJWF9NRU1PUllfUFJPVEVDVElPTiA9IDIwMDgwOQ0KICAgICtjb25zdCBfX1NDX1JF
R0VYX1ZFUlNJT04gPSAxNTYNCiAgICArY29uc3QgX0lGTEFfSU5FVDZfSUNNUDZTVEFUUyA9IDYN
CiAgICArY29uc3QgX19ORVREQl9IID0gMQ0KICAgICtjb25zdCBfRklPQVNZTkMgPSAweDU0NTIN
CiAgICArY29uc3QgX0lGTEFfVlhMQU5fTDNNSVNTID0gMTQNCiAgICArY29uc3QgX19fU19JU0dJ
RCA9IDAyMDAwDQogICAgK2NvbnN0IF9NU19WRVJCT1NFID0gMzI3NjgNCiAgICArY29uc3QgX05E
VEFfR0NfSU5URVJWQUwgPSA4DQogICAgK2NvbnN0IF9FVEhfUF9JUkRBID0gMHgwMDE3DQogICAg
K2NvbnN0IF9fX05SX2lub3RpZnlfcm1fd2F0Y2ggPSAyNTUNCiAgICArY29uc3QgX1NZU19wd3Jp
dGV2ID0gX19fTlJfcHdyaXRldg0KICAgICtjb25zdCBfX19zaWdzdGFja19kZWZpbmVkID0gMQ0K
ICAgICtjb25zdCBfX19HQ0NfQVRPTUlDX1BPSU5URVJfTE9DS19GUkVFID0gMg0KICAgICtjb25z
dCBfX1NDX0NfTEFOR19TVVBQT1JUID0gMTM1DQogICAgK2NvbnN0IF9GX1NFQUxfR1JPVyA9IDB4
MDAwNA0KICAgICtjb25zdCBfTkxfTU1BUF9TVEFUVVNfUkVTRVJWRUQgPSAxDQogICAgK2NvbnN0
IF9IQVZFX0xPRkZfVCA9IDENCiAgICArY29uc3QgX19QT1NJWF9ISVdBVCA9IF9fUE9TSVhfUElQ
RV9CVUYNCiAgICArY29uc3QgX1BSX0dFVF9USFBfRElTQUJMRSA9IDQyDQogICAgK2NvbnN0IF9f
QklUU19CWVRFU1dBUF9IID0gMQ0KICAgICtjb25zdCBfRl9URVNUID0gMw0KICAgICtjb25zdCBf
TVJFTUFQX0ZJWEVEID0gMg0KICAgICtjb25zdCBfTUFYX0FERFJfTEVOID0gNw0KICAgICtjb25z
dCBfX1NDX0xPTkdfQklUID0gMTA2DQogICAgK2NvbnN0IF9PTk9DUiA9IDAwMDAwMjANCiAgICAr
Y29uc3QgX1NJX01FU0dRID0gLTMNCiAgICArY29uc3QgX1BSSWRGQVNUOCA9ICJkIg0KICAgICtj
b25zdCBfSUZMQV9NQUNTRUNfUE9SVCA9IDINCiAgICArY29uc3QgX0NCQVVEID0gMDAxMDAxNw0K
ICAgICtjb25zdCBfU1lTX3NldGZzdWlkID0gX19fTlJfc2V0ZnN1aWQNCiAgICArY29uc3QgX19T
Q19NQVBQRURfRklMRVMgPSAxNg0KICAgICtjb25zdCBfRkZJX0xPTkdfTE9OR19NQVggPSBfTE9O
R19MT05HX01BWA0KICAgICtjb25zdCBfTkRfUkFfRkxBR19PVEhFUiA9IDB4NDANCiAgICArY29u
c3QgX1RSQVBfVFJBQ0UgPSAyDQogICAgK2NvbnN0IF9fU0NfUkFXX1NPQ0tFVFMgPSAyMzYNCiAg
ICArY29uc3QgX0ZTX1hGTEFHX1NZTkMgPSAweDAwMDAwMDIwDQogICAgK2NvbnN0IF9JRkxBX0JP
TkRfQVJQX0lQX1RBUkdFVCA9IDgNCiAgICArY29uc3QgX19QT1NJWF9SRUdFWFAgPSAxDQogICAg
K2NvbnN0IF9UQ1BfSU5GTyA9IDExDQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9NQ0FTVF9UT19V
Q0FTVCA9IDI4DQogICAgK2NvbnN0IF9QRl9ORkMgPSAzOQ0KICAgICtjb25zdCBfU19JRklGTyA9
IF9fX1NfSUZJRk8NCiAgICArY29uc3QgX0VBSV9OT1RDQU5DRUxFRCA9IC0xMDINCiAgICArY29u
c3QgX1BUUkFDRV9PX1RSQUNFRVhJVCA9IDY0DQogICAgK2NvbnN0IF9TVEFfUk9OTFkgPSAoX1NU
QV9QUFNTSUdOQUwgfCBfU1RBX1BQU0pJVFRFUiB8IF9TVEFfUFBTV0FOREVSIHwgX1NUQV9QUFNF
UlJPUiB8IF9TVEFfQ0xPQ0tFUlIgfCBfU1RBX05BTk8gfCBfU1RBX01PREUgfCBfU1RBX0NMSykN
CiAgICArY29uc3QgX1RDUF9GSU5fV0FJVDEgPSA0DQogICAgK2NvbnN0IF9JRkxBX0lORVQ2X1NU
QVRTID0gMw0KICAgICtjb25zdCBfX0lPQ19UWVBFU0hJRlQgPSAoX19JT0NfTlJTSElGVCtfX0lP
Q19OUkJJVFMpDQogICAgK2NvbnN0IF9fX0ZMVDEyOF9NSU5fXyA9IDEuMQ0KICAgICtjb25zdCBf
UlRGX1dJTkRPVyA9IDB4MDA4MA0KICAgICtjb25zdCBfUFJfR0VUX0NISUxEX1NVQlJFQVBFUiA9
IDM3DQogICAgK2NvbnN0IF9SVE5MR1JQX0lQVjRfTVJPVVRFID0gNg0KICAgICtjb25zdCBfTk9f
QUREUkVTUyA9IF9OT19EQVRBDQogICAgK2NvbnN0IF9TWVNfZmNob3duYXQgPSBfX19OUl9mY2hv
d25hdA0KICAgICtjb25zdCBfX19OUl9nZXRjd2QgPSA3OQ0KICAgICtjb25zdCBfUFJFRklYX0NB
Q0hFSU5GTyA9IDINCiAgICArY29uc3QgX0lQT1BUX09MRU4gPSAxDQogICAgK2NvbnN0IF9TWVNf
ZmNobW9kID0gX19fTlJfZmNobW9kDQogICAgK2NvbnN0IF9fU0NfQkNfRElNX01BWCA9IDM3DQog
ICAgK2NvbnN0IF9TWVNfc2Vtb3AgPSBfX19OUl9zZW1vcA0KICAgICtjb25zdCBfSUZMQV9WRl9T
VEFUU19SWF9QQUNLRVRTID0gMA0KICAgICtjb25zdCBfX19QVEhSRUFEX01VVEVYX1VTRV9VTklP
TiA9IDANCiAgICArY29uc3QgX1RDSUZMVVNIID0gMA0KICAgICtjb25zdCBfRUJBRFNMVCA9IDU3
DQogICAgK2NvbnN0IF9FVEhFUlRZUEVfUkVWQVJQID0gMHg4MDM1DQogICAgK2NvbnN0IF9IQVZF
X0VQT0xMX0NSRUFURTEgPSAxDQogICAgK2NvbnN0IF9fQklUU19UWVBFU19fX0xPQ0FMRV9UX0gg
PSAxDQogICAgK2NvbnN0IF9fX0dOVUNfXyA9IDgNCiAgICArY29uc3QgX1NDTmRMRUFTVDggPSAi
aGhkIg0KICAgICtjb25zdCBfQjAgPSAwMDAwMDAwDQogICAgK2NvbnN0IF9IQVZFX1NZU19JTk9U
SUZZX0ggPSAxDQogICAgK2NvbnN0IF9fX1NfSUZESVIgPSAwMDQwMDAwDQogICAgK2NvbnN0IF9U
Q0FfUk9PVF9USU1FX0RFTFRBID0gNA0KICAgICtjb25zdCBfQ0xPTkVfVEhSRUFEID0gMHgwMDAx
MDAwMA0KICAgICtjb25zdCBfTVNfUE9TSVhBQ0wgPSA2NTUzNg0KICAgICtjb25zdCBfUEFUSF9N
QVggPSA0MDk2DQogICAgK2NvbnN0IF9JRkxBX1VOU1BFQyA9IDANCiAgICArY29uc3QgX19fTlJf
cmVib290ID0gMTY5DQogICAgK2NvbnN0IF9TT0xfSVAgPSAwDQogICAgK2NvbnN0IF9UVU5fRl9V
Rk8gPSAweDEwDQogICAgK2NvbnN0IF9fX0ZMVDY0X0hBU19ERU5PUk1fXyA9IDENCiAgICArY29u
c3QgX0lQVE9TX1BSRUNfQ1JJVElDX0VDUCA9IF9JUFRPU19DTEFTU19DUzUNCiAgICArY29uc3Qg
X0lOX0xPT1BCQUNLTkVUID0gMTI3DQogICAgK2NvbnN0IF9TT0xfQUFMID0gMjY1DQogICAgK2Nv
bnN0IF9TWVNfc2V0dGltZW9mZGF5ID0gX19fTlJfc2V0dGltZW9mZGF5DQogICAgK2NvbnN0IF9J
UFBST1RPX0lEUCA9IDIyDQogICAgK2NvbnN0IF9fU0NfMl9MT0NBTEVERUYgPSA1Mg0KICAgICtj
b25zdCBfSUZMQV9WRl9TVEFUU19QQUQgPSA2DQogICAgK2NvbnN0IF9BRl9JTkVUID0gX1BGX0lO
RVQNCiAgICArY29uc3QgX0ZfU0VUTEsgPSBfRl9TRVRMSzY0DQogICAgK2NvbnN0IF9DWDg2X1BD
UjEgPSAweGYwDQogICAgK2NvbnN0IF9fX05SX2xyZW1vdmV4YXR0ciA9IDE5OA0KICAgICtjb25z
dCBfSVBPUFRfTk9PUCA9IF9JUE9QVF9OT1ANCiAgICArY29uc3QgX1JUTVNHX05FV0RFVklDRSA9
IDB4MTENCiAgICArY29uc3QgX0hBVkVfU0VUWEFUVFIgPSAxDQogICAgK2NvbnN0IF9GU19FTkNS
WVBUSU9OX01PREVfQUVTXzI1Nl9DVFMgPSA0DQogICAgK2NvbnN0IF9fQ1NfVjVfV0lEVEhfUkVT
VFJJQ1RFRF9FTlZTID0gNA0KICAgICtjb25zdCBfU19JRlNPQ0sgPSBfX19TX0lGU09DSw0KICAg
ICtjb25zdCBfX19OUl9zaWduYWxmZDQgPSAyODkNCiAgICArY29uc3QgX19JU09DOTlfU09VUkNF
ID0gMQ0KICAgICtjb25zdCBfX19GTFRfRElHX18gPSA2DQogICAgK2NvbnN0IF9fX05SX2dldHBp
ZCA9IDM5DQogICAgK2NvbnN0IF9VTExPTkdfV0lEVEggPSA2NA0KICAgICtjb25zdCBfX1NDX1hP
UEVOX1hQRzIgPSA5OA0KICAgICtjb25zdCBfU1lTX2tpbGwgPSBfX19OUl9raWxsDQogICAgK2Nv
bnN0IF9CMTEwID0gMDAwMDAwMw0KICAgICtjb25zdCBfVENQX1JFUEFJUl9RVUVVRSA9IDIwDQog
ICAgK2NvbnN0IF9SVE5MR1JQX0lQVjRfSUZBRERSID0gNQ0KICAgICtjb25zdCBfX19GWFNSX18g
PSAxDQogICAgK2NvbnN0IF9NQUNWTEFOX01PREVfUFJJVkFURSA9IDENCiAgICArY29uc3QgX19f
TlJfc3RhdHggPSAzMzINCiAgICArY29uc3QgX19fU0laRV9XSURUSF9fID0gNjQNCiAgICArY29u
c3QgX19QT1NJWF9UVFlfTkFNRV9NQVggPSA5DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfQURfQUNU
T1JfU1lTVEVNID0gMjYNCiAgICArY29uc3QgX1NPX0dFVF9GSUxURVIgPSBfU09fQVRUQUNIX0ZJ
TFRFUg0KICAgICtjb25zdCBfX1VUSU1FX0ggPSAxDQogICAgK2NvbnN0IF9TVEFUWF9CQVNJQ19T
VEFUUyA9IDB4MDdmZg0KICAgICtjb25zdCBfU1lTX3V0aW1lbnNhdCA9IF9fX05SX3V0aW1lbnNh
dA0KICAgICtjb25zdCBfX1NDXzJfQ0hBUl9URVJNID0gOTUNCiAgICArY29uc3QgX1RVTlNFVE9X
TkVSX3ZhbCA9IDEwNzQwMjU2NzYNCiAgICArY29uc3QgX1BUSFJFQURfU1RBQ0tfTUlOID0gMTYz
ODQNCiAgICArY29uc3QgX1NJR1BST0YgPSAyNw0KICAgICtjb25zdCBfX1NDX0xJTkVfTUFYID0g
NDMNCiAgICArY29uc3QgX19fU0lHRVZfTUFYX1NJWkUgPSA2NA0KICAgICtjb25zdCBfSEFWRV9T
RVRFTlYgPSAxDQogICAgK2NvbnN0IF9fU0NfU1lTVEVNX0RBVEFCQVNFID0gMTYyDQogICAgK2Nv
bnN0IF9GU19YRkxBR19OT0RVTVAgPSAweDAwMDAwMDgwDQogICAgK2NvbnN0IF9TWVNfdGltZXJf
Y3JlYXRlID0gX19fTlJfdGltZXJfY3JlYXRlDQogICAgK2NvbnN0IF9fUENfTElOS19NQVggPSAw
DQogICAgK2NvbnN0IF9UQ1BPUFRfV0lORE9XID0gMw0KICAgICtjb25zdCBfX0JJVFNfUE9TSVgy
X0xJTV9IID0gMQ0KICAgICtjb25zdCBfX19VSU5UX0xFQVNUMzJfTUFYX18gPSAweGZmZmZmZmZm
DQogICAgK2NvbnN0IF9fX05SX21xX25vdGlmeSA9IDI0NA0KICAgICtjb25zdCBfSVBQT1JUX0RB
WVRJTUUgPSAxMw0KICAgICtjb25zdCBfU1lTX3N0YXQgPSBfX19OUl9zdGF0DQogICAgK2NvbnN0
IF9QQVJFTkIgPSAwMDAwNDAwDQogICAgK2NvbnN0IF9GQUxMT0NfRkxfS0VFUF9TSVpFID0gMHgw
MQ0KICAgICtjb25zdCBfX1NDX1NDSEFSX01BWCA9IDExMQ0KICAgICtjb25zdCBfSUZMQV9CUl9N
Q0FTVF9RVUVSSUVSID0gMjUNCiAgICArY29uc3QgX01BRFZfSFdQT0lTT04gPSAxMDANCiAgICAr
Y29uc3QgX1NPX0NPT0tJRSA9IDU3DQogICAgK2NvbnN0IF9fUE9TSVhfQVNZTkNfSU8gPSAxDQog
ICAgK2NvbnN0IF9SVF9TQ09QRV9OT1dIRVJFID0gMjU1DQogICAgK2NvbnN0IF9JRkxBX0JPTkRf
U0xBVkVfQURfQUNUT1JfT1BFUl9QT1JUX1NUQVRFID0gNw0KICAgICtjb25zdCBfTkRfT1BUX1BJ
X0ZMQUdfT05MSU5LID0gMHg4MA0KICAgICtjb25zdCBfX1NDX1RIUkVBRF9QUk9DRVNTX1NIQVJF
RCA9IDgyDQogICAgK2NvbnN0IF9TWVNfc2V0ZG9tYWlubmFtZSA9IF9fX05SX3NldGRvbWFpbm5h
bWUNCiAgICArY29uc3QgX0ZfR0VUT1dOX0VYID0gX19fRl9HRVRPV05fRVgNCiAgICArY29uc3Qg
X0VTVEFMRSA9IDExNg0KICAgICtjb25zdCBfX19OUl9mdXRleCA9IDIwMg0KICAgICtjb25zdCBf
SUZGX0RFVEFDSF9RVUVVRSA9IDB4MDQwMA0KICAgICtjb25zdCBfSUZMQV9MSU5LTU9ERSA9IDE3
DQogICAgK2NvbnN0IF9JUE9QVF9TRUNVUklUWSA9IDEzMA0KICAgICtjb25zdCBfSUZMQV9CUl9T
VFBfU1RBVEUgPSA1DQogICAgK2NvbnN0IF9fUENfTkFNRV9NQVggPSAzDQogICAgK2NvbnN0IF9J
RkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9UWCA9IDkNCiAgICArY29uc3QgX1NJR0NPTlQgPSAx
OA0KICAgICtjb25zdCBfX19OUl9nZXRwbXNnID0gMTgxDQogICAgK2NvbnN0IF9TWVNfZmNoZGly
ID0gX19fTlJfZmNoZGlyDQogICAgK2NvbnN0IF9JRkZfUE9SVFNFTCA9IDgxOTINCiAgICArY29u
c3QgX1NPX0FUVEFDSF9SRVVTRVBPUlRfQ0JQRiA9IDUxDQogICAgK2NvbnN0IF9UQ0FfUk9PVF9G
TEFHUyA9IDINCiAgICArY29uc3QgX19TQ19WNl9JTFAzMl9PRkZCSUcgPSAxNzcNCiAgICArY29u
c3QgX01BWF9DQU5PTiA9IDI1NQ0KICAgICtjb25zdCBfSUZMQV9CT05EX1hNSVRfSEFTSF9QT0xJ
Q1kgPSAxNA0KICAgICtjb25zdCBfRVRIRVJfQ1JDX0xFTiA9IDQNCiAgICArY29uc3QgX0lGTEFf
SU5GT19EQVRBID0gMg0KICAgICtjb25zdCBfX19MSU5LX1hTVEFUU19UWVBFX01BWCA9IDINCiAg
ICArY29uc3QgX05URl9QUk9YWSA9IDB4MDgNCiAgICArY29uc3QgX1JUUFJPVF9FSUdSUCA9IDE5
Mg0KICAgICtjb25zdCBfX0NTX1Y3X0VOViA9IDExNDkNCiAgICArY29uc3QgX0FJX0lETiA9IDB4
MDA0MA0KICAgICtjb25zdCBfU19JUk9USCA9IChfU19JUkdSUCA+PiAzKQ0KICAgICtjb25zdCBf
UlROTEdSUF9OT05FID0gMA0KICAgICtjb25zdCBfSVBQUk9UT19HUkUgPSA0Nw0KICAgICtjb25z
dCBfV0VYSVRFRCA9IDQNCiAgICArY29uc3QgX1BBQ0tFVF9UWF9USU1FU1RBTVAgPSAxNg0KICAg
ICtjb25zdCBfRVBPTExIVVAgPSAxNg0KICAgICtjb25zdCBfTFRfT0JKRElSID0gIi5saWJzLyIN
CiAgICArY29uc3QgX19fUlRBWF9NQVggPSAxOA0KICAgICtjb25zdCBfUEFDS0VUX0hEUkxFTiA9
IDExDQogICAgK2NvbnN0IF9CUEZfTFNIID0gMHg2MA0KICAgICtjb25zdCBfVENQT0xFTl9TQUNL
X1BFUk1JVFRFRCA9IDINCiAgICArY29uc3QgX1BPTExfUFJJID0gNQ0KICAgICtjb25zdCBfX19O
Ul9zZXRyZXVpZCA9IDExMw0KICAgICtjb25zdCBfRlNfWEZMQUdfTk9ERUZSQUcgPSAweDAwMDAy
MDAwDQogICAgK2NvbnN0IF9fU0NfMl9QQlMgPSAxNjgNCiAgICArY29uc3QgX1NJT0NTSUZGTEFH
UyA9IDB4ODkxNA0KICAgICtjb25zdCBfX19GX0dFVE9XTiA9IDkNCiAgICArY29uc3QgX19fSUZM
QV9CT05EX0FEX0lORk9fTUFYID0gNg0KICAgICtjb25zdCBfQlBGX01BWElOU05TID0gNDA5Ng0K
ICAgICtjb25zdCBfRUFJX0lETl9FTkNPREUgPSAtMTA1DQogICAgK2NvbnN0IF9JRkxBX1ZGX1NU
QVRTX1RYX1BBQ0tFVFMgPSAxDQogICAgK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9NRURJVU0gPSAz
DQogICAgK2NvbnN0IF9GSUxFX0RFRFVQRV9SQU5HRV9TQU1FID0gMA0KICAgICtjb25zdCBfSVBQ
Uk9UT19UQ1AgPSA2DQogICAgK2NvbnN0IF9USU9DTV9DRCA9IF9USU9DTV9DQVINCiAgICArY29u
c3QgX0IxMzQgPSAwMDAwMDA0DQogICAgK2NvbnN0IF9FQUlfRkFNSUxZID0gLTYNCiAgICArY29u
c3QgX0lGTEFfQlJQT1JUX0JDQVNUX0ZMT09EID0gMzANCiAgICArY29uc3QgX1NZU19mbG9jayA9
IF9fX05SX2Zsb2NrDQogICAgK2NvbnN0IF9IQVZFX05FVFBBQ0tFVF9QQUNLRVRfSCA9IDENCiAg
ICArY29uc3QgX0VUSF9QX1BSUCA9IDB4ODhGQg0KICAgICtjb25zdCBfT0ZJTEwgPSAwMDAwMTAw
DQogICAgK2NvbnN0IF9fQ1NfTEZTNjRfTElCUyA9IDEwMDYNCiAgICArY29uc3QgX0ZTX0VOQ1JZ
UFRJT05fTU9ERV9BRVNfMjU2X1hUUyA9IDENCiAgICArY29uc3QgX0lGTEFfR1RQX0ZEMCA9IDEN
CiAgICArY29uc3QgX0lGTEFfR1RQX0ZEMSA9IDINCiAgICArY29uc3QgX0hBVkVfU1lOQ19GSUxF
X1JBTkdFID0gMQ0KICAgICtjb25zdCBfSUZBX0xPQ0FMID0gMg0KICAgICtjb25zdCBfTkRfT1BU
X1BJX0ZMQUdfUkFERFIgPSAweDIwDQogICAgK2NvbnN0IF9UQ1BfREVGRVJfQUNDRVBUID0gOQ0K
ICAgICtjb25zdCBfTUNBU1RfSk9JTl9TT1VSQ0VfR1JPVVAgPSA0Ng0KICAgICtjb25zdCBfU1lT
X3JlcXVlc3Rfa2V5ID0gX19fTlJfcmVxdWVzdF9rZXkNCiAgICArY29uc3QgX0lDTVA2X1BBQ0tF
VF9UT09fQklHID0gMg0KICAgICtjb25zdCBfWDg2X0NSNF9QQ0VfQklUID0gOA0KICAgICtjb25z
dCBfRUFJX0JBREZMQUdTID0gLTENCiAgICArY29uc3QgX19DU19YQlM1X0xQQklHX09GRkJJR19M
SU5URkxBR1MgPSAxMTE1DQogICAgK2NvbnN0IF9VVElNRV9OT1cgPSAoKDEgPDwgMzApIC0gMSkN
CiAgICArY29uc3QgX19QT1NJWF9NQVhfSU5QVVQgPSAyNTUNCiAgICArY29uc3QgX0lGTEFfQlJQ
T1JUX0lEID0gMTcNCiAgICArY29uc3QgX0VUSF9EQVRBX0xFTiA9IDE1MDANCiAgICArY29uc3Qg
X19fUkxJTUlUX1NJR1BFTkRJTkcgPSAxMQ0KICAgICtjb25zdCBfU1lTX2lvX2Rlc3Ryb3kgPSBf
X19OUl9pb19kZXN0cm95DQogICAgK2NvbnN0IF9TT19JTkNPTUlOR19OQVBJX0lEID0gNTYNCiAg
ICArY29uc3QgX0VUSF9QX1BQUF9ESVNDID0gMHg4ODYzDQogICAgK2NvbnN0IF9UQ1BPTEVOX01B
WFNFRyA9IDQNCiAgICArY29uc3QgX0VUSF9QXzgwMl8zX01JTiA9IDB4MDYwMA0KICAgICtjb25z
dCBfQVJQT1BfUlJFUExZID0gNA0KICAgICtjb25zdCBfSVBWNl9VTklDQVNUX0hPUFMgPSAxNg0K
ICAgICtjb25zdCBfTkVUTElOS19OT19FTk9CVUZTID0gNQ0KICAgICtjb25zdCBfX19OUl9uYW1l
X3RvX2hhbmRsZV9hdCA9IDMwMw0KICAgICtjb25zdCBfX19GTFQzMl9NQVhfXyA9IDEuMQ0KICAg
ICtjb25zdCBfU1lTX3RpbWVyZmRfY3JlYXRlID0gX19fTlJfdGltZXJmZF9jcmVhdGUNCiAgICAr
Y29uc3QgX0lOX01PVkVEX1RPID0gMHgwMDAwMDA4MA0KICAgICtjb25zdCBfU1lTX2dldHRpZCA9
IF9fX05SX2dldHRpZA0KICAgICtjb25zdCBfX1BPU0lYX0lQVjYgPSAyMDA4MDkNCiAgICArY29u
c3QgX0FGX01QTFMgPSBfUEZfTVBMUw0KICAgICtjb25zdCBfU1lTX2ZhbGxvY2F0ZSA9IF9fX05S
X2ZhbGxvY2F0ZQ0KICAgICtjb25zdCBfQUZfV0FOUElQRSA9IF9QRl9XQU5QSVBFDQogICAgK2Nv
bnN0IF9UQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFMgPSAxNg0KICAgICtjb25zdCBfX19OUl9zZXRk
b21haW5uYW1lID0gMTcxDQogICAgK2NvbnN0IF9fX05MTVNHRVJSX0FUVFJfTUFYID0gNA0KICAg
ICtjb25zdCBfX19GTFQxMjhfSEFTX0RFTk9STV9fID0gMQ0KICAgICtjb25zdCBfRVRIRVJUWVBF
X1BVUCA9IDB4MDIwMA0KICAgICtjb25zdCBfX0JJVFNfUE9TSVgxX0xJTV9IID0gMQ0KICAgICtj
b25zdCBfX19HTElCQ19VU0VfSUVDXzYwNTU5X1RZUEVTX0VYVCA9IDENCiAgICArY29uc3QgX0lQ
VjZfUkVDVkRTVE9QVFMgPSA1OA0KICAgICtjb25zdCBfX19OUl9zZWN1cml0eSA9IDE4NQ0KICAg
ICtjb25zdCBfQVJQSFJEX1JBV0lQID0gNTE5DQogICAgK2NvbnN0IF9FVEhfUF84MDJfRVgxID0g
MHg4OEI1DQogICAgK2NvbnN0IF9JRkFfRl9EQURGQUlMRUQgPSAweDA4DQogICAgK2NvbnN0IF9T
Q054OCA9ICJoaHgiDQogICAgK2NvbnN0IF9DU0lHTkFMID0gMHgwMDAwMDBmZg0KICAgICtjb25z
dCBfX19OUl9hY2NlcHQ0ID0gMjg4DQogICAgK2NvbnN0IF9OSV9OVU1FUklDSE9TVCA9IDENCiAg
ICArY29uc3QgX1JUTkhfRl9VTlJFU09MVkVEID0gMzINCiAgICArY29uc3QgX0I5NjAwID0gMDAw
MDAxNQ0KICAgICtjb25zdCBfTkxfTU1BUF9TVEFUVVNfVU5VU0VEID0gMA0KICAgICtjb25zdCBf
U09fTE9DS19GSUxURVIgPSA0NA0KICAgICtjb25zdCBfSUZMQV9WRl9NQUMgPSAxDQogICAgK2Nv
bnN0IF9JRkxBX1ZYTEFOX1JFTUNTVU1fVFggPSAyMQ0KICAgICtjb25zdCBfVUNIQVJfTUFYID0g
KF9TQ0hBUl9NQVggKiAyICsgMSkNCiAgICArY29uc3QgX0lGTEFfQk9ORF9BUlBfVkFMSURBVEUg
PSA5DQogICAgK2NvbnN0IF9JUFBST1RPX01QTFMgPSAxMzcNCiAgICArY29uc3QgX0lGTEFfTUlO
X01UVSA9IDUwDQogICAgK2NvbnN0IF9FVEhfUF9JUFY2ID0gMHg4NkREDQogICAgK2NvbnN0IF9F
VEhfUF9BQVJQID0gMHg4MEYzDQogICAgK2NvbnN0IF9TWVNfc2NoZWRfc2V0cGFyYW0gPSBfX19O
Ul9zY2hlZF9zZXRwYXJhbQ0KICAgICtjb25zdCBfQVRGX1BVQkwgPSAweDA4DQogICAgK2NvbnN0
IF9XQ09SRUZMQUcgPSBfX19XQ09SRUZMQUcNCiAgICArY29uc3QgX1RJT0NHV0lOU1ogPSAweDU0
MTMNCiAgICArY29uc3QgX19fVVNFX1hPUEVOMks4WFNJID0gMQ0KICAgICtjb25zdCBfUFJJaTgg
PSAiaSINCiAgICArY29uc3QgX0FSUEhSRF9MT09QQkFDSyA9IDc3Mg0KICAgICtjb25zdCBfX19H
Q0NfSUVDXzU1OV9DT01QTEVYID0gMg0KICAgICtjb25zdCBfU09fQlJPQURDQVNUID0gNg0KICAg
ICtjb25zdCBfX19HTElCQ19NSU5PUl9fID0gMjgNCiAgICArY29uc3QgX19TQ19TVFJFQU1TID0g
MTc0DQogICAgK2NvbnN0IF9TWVNfc2htYXQgPSBfX19OUl9zaG1hdA0KICAgICtjb25zdCBfSVBW
TEFOX01PREVfTDIgPSAwDQogICAgK2NvbnN0IF9fX01NWF9fID0gMQ0KICAgICtjb25zdCBfQjE1
MCA9IDAwMDAwMDUNCiAgICArY29uc3QgX1BPU0lYX0ZBRFZfV0lMTE5FRUQgPSAzDQogICAgK2Nv
bnN0IF9JRkxBX1ZYTEFOX1JTQyA9IDEyDQogICAgK2NvbnN0IF9QQUNLRVRfQlJPQURDQVNUID0g
MQ0KICAgICtjb25zdCBfUEZfQVRNUFZDID0gOA0KICAgICtjb25zdCBfU1lTX3ByZWFkdjIgPSBf
X19OUl9wcmVhZHYyDQogICAgK2NvbnN0IF9JTl9DTEFTU0NfTkVUID0gMHhmZmZmZmYwMA0KICAg
ICtjb25zdCBfUEFDS0VUX0NPUFlfVEhSRVNIID0gNw0KICAgICtjb25zdCBfRVRIX1pMRU4gPSA2
MA0KICAgICtjb25zdCBfVENQT1BUX0VPTCA9IDANCiAgICArY29uc3QgX0lONl9BRERSX0dFTl9N
T0RFX1JBTkRPTSA9IDMNCiAgICArY29uc3QgX0lGTEFfTUFDU0VDX0VOQ09ESU5HX1NBID0gNg0K
ICAgICtjb25zdCBfX0NTX1BPU0lYX1Y3X0xQNjRfT0ZGNjRfTElCUyA9IDExNDINCiAgICArY29u
c3QgX0VUSF9QX1BVUEFUID0gMHgwMjAxDQogICAgK2NvbnN0IF9TWVNfZ2V0cnVzYWdlID0gX19f
TlJfZ2V0cnVzYWdlDQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSID0g
MjAwODA5DQogICAgK2NvbnN0IF9JRkxBX1BPUlRfUFJPRklMRSA9IDINCiAgICArY29uc3QgX19f
RkxUNjRfSEFTX1FVSUVUX05BTl9fID0gMQ0KICAgICtjb25zdCBfVUlOVDY0X1dJRFRIID0gNjQN
CiAgICArY29uc3QgX1NZU19rY21wID0gX19fTlJfa2NtcA0KICAgICtjb25zdCBfSU5fTU9WRURf
RlJPTSA9IDB4MDAwMDAwNDANCiAgICArY29uc3QgX19VVFNOQU1FX01BQ0hJTkVfTEVOR1RIID0g
X19VVFNOQU1FX0xFTkdUSA0KICAgICtjb25zdCBfSVBWNl9MRUFWRV9HUk9VUCA9IDIxDQogICAg
K2NvbnN0IF9TWVNfdW5saW5rID0gX19fTlJfdW5saW5rDQogICAgK2NvbnN0IF9IQVZFX1NUUlNJ
R05BTCA9IDENCiAgICArY29uc3QgX19QQ19DSE9XTl9SRVNUUklDVEVEID0gNg0KICAgICtjb25z
dCBfX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgPSAxMzENCiAgICArY29uc3QgX0VUSF9QX0lC
T0UgPSAweDg5MTUNCiAgICArY29uc3QgX09fRlNZTkMgPSBfT19TWU5DDQogICAgK2NvbnN0IF9S
VE1fTkVXUlVMRSA9IDMyDQogICAgK2NvbnN0IF9JRkxBX1hEUF9GTEFHUyA9IDMNCiAgICArY29u
c3QgX1NJT0NHSUZDT1VOVCA9IDB4ODkzOA0KICAgICtjb25zdCBfUEFDS0VUX09VVEdPSU5HID0g
NA0KICAgICtjb25zdCBfSVBUT1NfUFJFQ19NQVNLID0gX0lQVE9TX0NMQVNTX01BU0sNCiAgICAr
Y29uc3QgX19fTlJfcmVuYW1lYXQyID0gMzE2DQogICAgK2NvbnN0IF9fU0NfSVBWNiA9IDIzNQ0K
ICAgICtjb25zdCBfVENQX0VTVEFCTElTSEVEID0gMQ0KICAgICtjb25zdCBfQVJQSFJEX0FSQ05F
VCA9IDcNCiAgICArY29uc3QgX1RJT0NTRVJTV0lMRCA9IDB4NTQ1NQ0KICAgICtjb25zdCBfRVRI
X1BfUFVQID0gMHgwMjAwDQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1BSSU9SSVRZX1NDSEVE
VUxJTkcgPSAyMDA4MDkNCiAgICArY29uc3QgX1NJR0VWX1RIUkVBRCA9IDINCiAgICArY29uc3Qg
X0hBVkVfVVRJTUVfSCA9IDENCiAgICArY29uc3QgX0lQX1JFQ1ZPUFRTID0gNg0KICAgICtjb25z
dCBfUFJfU0VUX01NX1NUQVJUX0NPREUgPSAxDQogICAgK2NvbnN0IF9fX0NQVV9TRVRTSVpFID0g
MTAyNA0KICAgICtjb25zdCBfUEZfREVDbmV0ID0gMTINCiAgICArY29uc3QgX1RJT0NNX0NBUiA9
IDB4MDQwDQogICAgK2NvbnN0IF9TWVNfc2htZ2V0ID0gX19fTlJfc2htZ2V0DQogICAgK2NvbnN0
IF9SVE1fRl9MT09LVVBfVEFCTEUgPSAweDEwMDANCiAgICArY29uc3QgX1JUUFJPVF9OVEsgPSAx
NQ0KICAgICtjb25zdCBfX19OUl9ldmVudGZkMiA9IDI5MA0KICAgICtjb25zdCBfSUZMQV9FVkVO
VF9CT05ESU5HX09QVElPTlMgPSA2DQogICAgK2NvbnN0IF9TSU9DR0lGRU5DQVAgPSAweDg5MjUN
CiAgICArY29uc3QgX19fTlJfdW5saW5rYXQgPSAyNjMNCiAgICArY29uc3QgX0lGTEFfQlJfVkxB
Tl9GSUxURVJJTkcgPSA3DQogICAgK2NvbnN0IF9NU19BU1lOQyA9IDENCiAgICArY29uc3QgX19J
T0NfUkVBRCA9IDINCiAgICArY29uc3QgX19USFJFQURfU0hBUkVEX1RZUEVTX0ggPSAxDQogICAg
K2NvbnN0IF9fX05SX3NldF9yb2J1c3RfbGlzdCA9IDI3Mw0KICAgICtjb25zdCBfSUZMQV9HUk9V
UCA9IDI3DQogICAgK2NvbnN0IF9TQ0hFRF9ERUFETElORSA9IDYNCiAgICArY29uc3QgX0VMSUJF
WEVDID0gODMNCiAgICArY29uc3QgX1dDSEFSX01JTiA9IF9fX1dDSEFSX01JTg0KICAgICtjb25z
dCBfX19OUl9wdXRwbXNnID0gMTgyDQogICAgK2NvbnN0IF9fX05SX2FyY2hfcHJjdGwgPSAxNTgN
CiAgICArY29uc3QgX01TR19DVFJVTkMgPSA4DQogICAgK2NvbnN0IF9JRkxBX0JSX1JPT1RfUEFU
SF9DT1NUID0gMTMNCiAgICArY29uc3QgX01TR19TWU4gPSAxMDI0DQogICAgK2NvbnN0IF9IQVZF
X0xJTlVYX05FVExJTktfSCA9IDENCiAgICArY29uc3QgX0hBVkVfU1BMSUNFID0gMQ0KICAgICtj
b25zdCBfUEtFWV9ESVNBQkxFX1dSSVRFID0gMHgyDQogICAgK2NvbnN0IF9GUEVfRkxURElWID0g
Mw0KICAgICtjb25zdCBfX19OUl9wa2V5X21wcm90ZWN0ID0gMzI5DQogICAgK2NvbnN0IF9JUFBP
UlRfVEVMTkVUID0gMjMNCiAgICArY29uc3QgX1JUQV9TUE9SVCA9IDI4DQogICAgK2NvbnN0IF9f
WE9QRU5fVkVSU0lPTiA9IDcwMA0KICAgICtjb25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElC
UyA9IDExMDINCiAgICArY29uc3QgX1JUTkxHUlBfTkVJR0ggPSAzDQogICAgK2NvbnN0IF9fQ1Nf
UE9TSVhfVjZfSUxQMzJfT0ZGMzJfTERGTEFHUyA9IDExMTcNCiAgICArY29uc3QgX1VJTlRfRkFT
VDhfV0lEVEggPSA4DQogICAgK2NvbnN0IF9UQ1BPUFRfTk9QID0gMQ0KICAgICtjb25zdCBfVElN
RV9CQUQgPSBfVElNRV9FUlJPUg0KICAgICtjb25zdCBfUlRNX0RFTEFERFJMQUJFTCA9IDczDQog
ICAgK2NvbnN0IF9fUE9TSVhfTk9fVFJVTkMgPSAxDQogICAgK2NvbnN0IF9QUk9UX1dSSVRFID0g
MHgyDQogICAgK2NvbnN0IF9fX05SX2Vwb2xsX3B3YWl0ID0gMjgxDQogICAgK2NvbnN0IF9BUlBI
UkRfU0lUID0gNzc2DQogICAgK2NvbnN0IF9SVE1fTkVXUFJFRklYID0gNTINCiAgICArY29uc3Qg
X19fUkxJTUlUX01FTUxPQ0sgPSA4DQogICAgK2NvbnN0IF9TWVNfbG9va3VwX2Rjb29raWUgPSBf
X19OUl9sb29rdXBfZGNvb2tpZQ0KICAgICtjb25zdCBfX19PUkRFUl9MSVRUTEVfRU5ESUFOX18g
PSAxMjM0DQogICAgK2NvbnN0IF9TWVNfbWtkaXJhdCA9IF9fX05SX21rZGlyYXQNCiAgICArY29u
c3QgX1RDUE9MRU5fV0lORE9XID0gMw0KICAgICtjb25zdCBfRVRIX1BfVElQQyA9IDB4ODhDQQ0K
ICAgICtjb25zdCBfX1BPU0lYX1RIUkVBRF9LRVlTX01BWCA9IDEyOA0KICAgICtjb25zdCBfQVRf
RU1QVFlfUEFUSCA9IDB4MTAwMA0KICAgICtjb25zdCBfX19OUl9zY2hlZF95aWVsZCA9IDI0DQog
ICAgK2NvbnN0IF9YRFBfRkxBR1NfTU9ERVMgPSAoX1hEUF9GTEFHU19TS0JfTU9ERSB8IF9YRFBf
RkxBR1NfRFJWX01PREUgfCBfWERQX0ZMQUdTX0hXX01PREUpDQogICAgK2NvbnN0IF9IQVZFX0lO
T1RJRllfUk1fV0FUQ0ggPSAxDQogICAgK2NvbnN0IF9fU0NfU1RSRUFNX01BWCA9IDUNCiAgICAr
Y29uc3QgX19fRl9HRVRTSUcgPSAxMQ0KICAgICtjb25zdCBfRU1FRElVTVRZUEUgPSAxMjQNCiAg
ICArY29uc3QgX1NUQV9DTEsgPSAweDgwMDANCiAgICArY29uc3QgX0lQVE9TX01JTkNPU1QgPSBf
SVBUT1NfTE9XQ09TVA0KICAgICtjb25zdCBfX19GTFQ2NF9ERU5PUk1fTUlOX18gPSAxLjENCiAg
ICArY29uc3QgX1JMSU02NF9JTkZJTklUWSA9IDB4ZmZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25z
dCBfRkZJX1VOSVg2NCA9IDINCiAgICArY29uc3QgX1JUTkxHUlBfSVBWNF9ORVRDT05GID0gMjQN
CiAgICArY29uc3QgX1JUQVhfRkVBVFVSRV9USU1FU1RBTVAgPSAoMSA8PCAyKQ0KICAgICtjb25z
dCBfSU5UMzJfTUFYID0gKDIxNDc0ODM2NDcpDQogICAgK2NvbnN0IF9FVEhFUlRZUEVfSVBWNiA9
IDB4ODZkZA0KICAgICtjb25zdCBfVENQT1BUX1RTVEFNUF9IRFIgPSAoX1RDUE9QVF9OT1A8PDI0
fF9UQ1BPUFRfTk9QPDwxNnxfVENQT1BUX1RJTUVTVEFNUDw8OHxfVENQT0xFTl9USU1FU1RBTVAp
DQogICAgK2NvbnN0IF9JRkxBX1NUQVRTX0xJTktfWFNUQVRTID0gMg0KICAgICtjb25zdCBfT19S
RE9OTFkgPSAwMA0KICAgICtjb25zdCBfX19OUl9nZXRyZXN1aWQgPSAxMTgNCiAgICArY29uc3Qg
X1BUUkFDRV9FVkVOVF9DTE9ORSA9IDMNCiAgICArY29uc3QgX0FSUEhSRF9QSU1SRUcgPSA3NzkN
CiAgICArY29uc3QgX0lQVjZfTVVMVElDQVNUX0hPUFMgPSAxOA0KICAgICtjb25zdCBfX19OUl9s
aW5rYXQgPSAyNjUNCiAgICArY29uc3QgX0ZTX05PQVRJTUVfRkwgPSAweDAwMDAwMDgwDQogICAg
K2NvbnN0IF9fU0NfVUxPTkdfTUFYID0gMTE3DQogICAgK2NvbnN0IF9JUFRPU19DTEFTU19ERUZB
VUxUID0gX0lQVE9TX0NMQVNTX0NTMA0KICAgICtjb25zdCBfU1lTX3NobWR0ID0gX19fTlJfc2ht
ZHQNCiAgICArY29uc3QgX19fTlJfb3BlbiA9IDINCiAgICArY29uc3QgX1RJTUVfT0sgPSAwDQog
ICAgK2NvbnN0IF9CUEZfVFhBID0gMHg4MA0KICAgICtjb25zdCBfX1NDX0NISUxEX01BWCA9IDEN
CiAgICArY29uc3QgX1NZU19hZGRfa2V5ID0gX19fTlJfYWRkX2tleQ0KICAgICtjb25zdCBfU1RE
Q19IRUFERVJTID0gMQ0KICAgICtjb25zdCBfTUFQX0FOT05ZTU9VUyA9IDB4MjANCiAgICArY29u
c3QgX1g4Nl9DUjRfREVfQklUID0gMw0KICAgICtjb25zdCBfVklOVFIgPSAwDQogICAgK2NvbnN0
IF9NSU5TSUdTVEtTWiA9IDIwNDgNCiAgICArY29uc3QgX0lQVE9TX0xPV0NPU1QgPSAweDAyDQog
ICAgK2NvbnN0IF9NQURWX01FUkdFQUJMRSA9IDEyDQogICAgK2NvbnN0IF9JRkxBX1RVTl9QRVJT
SVNUID0gNg0KICAgICtjb25zdCBfSEFWRV9ORVRJTkVUX0lDTVA2X0ggPSAxDQogICAgK2NvbnN0
IF9JRkxBX0JSUE9SVF9TVEFURSA9IDENCiAgICArY29uc3QgX0NQVV9TRVRTSVpFID0gX19fQ1BV
X1NFVFNJWkUNCiAgICArY29uc3QgX0lQVkVSU0lPTiA9IDQNCiAgICArY29uc3QgX1NZU19leGl0
X2dyb3VwID0gX19fTlJfZXhpdF9ncm91cA0KICAgICtjb25zdCBfVElPQ0NCUksgPSAweDU0MjgN
CiAgICArY29uc3QgX19fTFA2NF9PRkY2NF9MREZMQUdTID0gIi1tNjQiDQogICAgK2NvbnN0IF9Q
QUNLRVRfVk5FVF9IRFIgPSAxNQ0KICAgICtjb25zdCBfX1NDX1RSQUNFX0VWRU5UX05BTUVfTUFY
ID0gMjQyDQogICAgK2NvbnN0IF9QUl9TVkVfU0VUX1ZMID0gNTANCiAgICArY29uc3QgX1NZU19m
b3JrID0gX19fTlJfZm9yaw0KICAgICtjb25zdCBfRVRIRVJUWVBFX1RSQUlMID0gMHgxMDAwDQog
ICAgK2NvbnN0IF9SVEZfUkVKRUNUID0gMHgwMjAwDQogICAgK2NvbnN0IF9DTE9ORV9GUyA9IDB4
MDAwMDAyMDANCiAgICArY29uc3QgX1VJTlQzMl9XSURUSCA9IDMyDQogICAgK2NvbnN0IF9TSU9D
R0lGVFhRTEVOID0gMHg4OTQyDQogICAgK2NvbnN0IF9OREFfVkxBTiA9IDUNCiAgICArY29uc3Qg
X1BUUkFDRV9HRVRSRUdTID0gMTINCiAgICArY29uc3QgX19QT1NJWF9GU1lOQyA9IDIwMDgwOQ0K
ICAgICtjb25zdCBfU1lTX2dldHhhdHRyID0gX19fTlJfZ2V0eGF0dHINCiAgICArY29uc3QgX1NJ
T0NTSUZBRERSID0gMHg4OTE2DQogICAgK2NvbnN0IF9TWVNfbXByb3RlY3QgPSBfX19OUl9tcHJv
dGVjdA0KICAgICtjb25zdCBfX1BPU0lYX05BTUVfTUFYID0gMTQNCiAgICArY29uc3QgX19QT1NJ
WF9PUEVOX01BWCA9IDIwDQogICAgK2NvbnN0IF9UQ1NFVEFGID0gMHg1NDA4DQogICAgK2NvbnN0
IF9UQ1BfTUQ1U0lHX01BWEtFWUxFTiA9IDgwDQogICAgK2NvbnN0IF9CUEZfRElWID0gMHgzMA0K
ICAgICtjb25zdCBfSVBWNl9BVVRISERSID0gMTANCiAgICArY29uc3QgX01TR19UUlVOQyA9IDMy
DQogICAgK2NvbnN0IF9fUE9TSVgyX0NIQVJfVEVSTSA9IDIwMDgwOQ0KICAgICtjb25zdCBfU0lH
QUJSVCA9IDYNCiAgICArY29uc3QgX1NZU19yZWFkID0gX19fTlJfcmVhZA0KICAgICtjb25zdCBf
X19TSVpFT0ZfUFRIUkVBRF9SV0xPQ0tBVFRSX1QgPSA4DQogICAgK2NvbnN0IF9JRkxBX0JSX01D
QVNUX1NOT09QSU5HID0gMjMNCiAgICArY29uc3QgX05FVExJTktfQ09OTkVDVEVEID0gMQ0KICAg
ICtjb25zdCBfRlNfRVhURU5UX0ZMID0gMHgwMDA4MDAwMA0KICAgICtjb25zdCBfSUZMQV9CUl9U
T1BPTE9HWV9DSEFOR0VfREVURUNURUQgPSAxNQ0KICAgICtjb25zdCBfU1lTX2xsaXN0eGF0dHIg
PSBfX19OUl9sbGlzdHhhdHRyDQogICAgK2NvbnN0IF9FVEhfQUxFTiA9IDYNCiAgICArY29uc3Qg
X0lGRl9OT19QSSA9IDB4MTAwMA0KICAgICtjb25zdCBfX19OUl9nZXRnaWQgPSAxMDQNCiAgICAr
Y29uc3QgX1RDQV9LSU5EID0gMQ0KICAgICtjb25zdCBfX19GTFQzMlhfTUlOX18gPSAxLjENCiAg
ICArY29uc3QgX19fREJMX0hBU19ERU5PUk1fXyA9IDENCiAgICArY29uc3QgX1RDUF9MQVNUX0FD
SyA9IDkNCiAgICArY29uc3QgX1JUX1RBQkxFX0RFRkFVTFQgPSAyNTMNCiAgICArY29uc3QgX05M
X01NQVBfU1RBVFVTX1NLSVAgPSA0DQogICAgK2NvbnN0IF9IQVZFX0xPRzFQTCA9IDENCiAgICAr
Y29uc3QgX0ZBTExPQ19GTF9OT19ISURFX1NUQUxFID0gMHgwNA0KICAgICtjb25zdCBfUlRfU0NP
UEVfSE9TVCA9IDI1NA0KICAgICtjb25zdCBfUlRNU0dfREVMUlVMRSA9IDB4MzINCiAgICArY29u
c3QgX0lQUFJPVE9fTUFYID0gMjU2DQogICAgK2NvbnN0IF9JUE9QVF9DTEFTU19NQVNLID0gMHg2
MA0KICAgICtjb25zdCBfQVRfRUFDQ0VTUyA9IDB4MjAwDQogICAgK2NvbnN0IF9TWVNfcGF1c2Ug
PSBfX19OUl9wYXVzZQ0KICAgICtjb25zdCBfTkRfT1BUX1BSRUZJWF9JTkZPUk1BVElPTiA9IDMN
CiAgICArY29uc3QgX1NJR1VSRyA9IDIzDQogICAgK2NvbnN0IF9fU0NfVElNRVJfTUFYID0gMzUN
CiAgICArY29uc3QgX05EX1JBX0ZMQUdfSE9NRV9BR0VOVCA9IDB4MjANCiAgICArY29uc3QgX19T
Q19TQ0hBUl9NSU4gPSAxMTINCiAgICArY29uc3QgX1RDUE9MRU5fVFNUQU1QX0FQUEEgPSAoX1RD
UE9MRU5fVElNRVNUQU1QKzIpDQogICAgK2NvbnN0IF9fX0ZMVDMyX0RJR19fID0gNg0KICAgICtj
b25zdCBfUEZfUEhPTkVUID0gMzUNCiAgICArY29uc3QgX1JUUFJPVF9SRURJUkVDVCA9IDENCiAg
ICArY29uc3QgX0lOX0RFTEVURV9TRUxGID0gMHgwMDAwMDQwMA0KICAgICtjb25zdCBfTklfSURO
ID0gMzINCiAgICArY29uc3QgX1RVTl9SRUFEUV9TSVpFID0gNTAwDQogICAgK2NvbnN0IF9TVEFf
UExMID0gMHgwMDAxDQogICAgK2NvbnN0IF9JUF9BRERfU09VUkNFX01FTUJFUlNISVAgPSAzOQ0K
ICAgICtjb25zdCBfQUZfQkxVRVRPT1RIID0gX1BGX0JMVUVUT09USA0KICAgICtjb25zdCBfSUZM
QV9CUlBPUlRfTUVTU0FHRV9BR0VfVElNRVIgPSAyMQ0KICAgICtjb25zdCBfRU5PVEJMSyA9IDE1
DQogICAgK2NvbnN0IF9GRklfU0laRU9GX0FSRyA9IDgNCiAgICArY29uc3QgX19CSVRTX0NQVV9T
RVRfSCA9IDENCiAgICArY29uc3QgX1NZU19tcV9nZXRzZXRhdHRyID0gX19fTlJfbXFfZ2V0c2V0
YXR0cg0KICAgICtjb25zdCBfU09DS19EQ0NQID0gNg0KICAgICtjb25zdCBfX19YMzJfU1lTQ0FM
TF9CSVQgPSAweDQwMDAwMDAwDQogICAgK2NvbnN0IF9IQVZFX0RMRkNOX0ggPSAxDQogICAgK2Nv
bnN0IF9FVEhFUl9IRFJfTEVOID0gX0VUSF9ITEVODQogICAgK2NvbnN0IF9TWVNfbWxvY2syID0g
X19fTlJfbWxvY2syDQogICAgK2NvbnN0IF9TWVNfZ2V0cmFuZG9tID0gX19fTlJfZ2V0cmFuZG9t
DQogICAgK2NvbnN0IF9fR0VUT1BUX1BPU0lYX0ggPSAxDQogICAgK2NvbnN0IF9fX1NURENfSUVD
XzU1OV9DT01QTEVYX18gPSAxDQogICAgK2NvbnN0IF9YODZfQ1I0X09TWFNBVkVfQklUID0gMTgN
CiAgICArY29uc3QgX0VOT1BST1RPT1BUID0gOTINCiAgICArY29uc3QgX1JUQVhfRkVBVFVSRVMg
PSAxMg0KICAgICtjb25zdCBfU0lPQ1NJRk1BUCA9IDB4ODk3MQ0KICAgICtjb25zdCBfX19OUl9n
ZXRfcm9idXN0X2xpc3QgPSAyNzQNCiAgICArY29uc3QgX0lGTEFfRVZFTlQgPSA0NA0KICAgICtj
b25zdCBfRlBFX0ZMVE9WRiA9IDQNCiAgICArY29uc3QgX0hBVkVfV0FJVDQgPSAxDQogICAgK2Nv
bnN0IF9fU0NfQVZQSFlTX1BBR0VTID0gODYNCiAgICArY29uc3QgX0VBSV9JTlRSID0gLTEwNA0K
ICAgICtjb25zdCBfUFJfTUNFX0tJTExfREVGQVVMVCA9IDINCiAgICArY29uc3QgX1NPX1BFRVJH
Uk9VUFMgPSA1OQ0KICAgICtjb25zdCBfSUZMQV9CT05EX1BBQ0tFVFNfUEVSX1NMQVZFID0gMjAN
CiAgICArY29uc3QgX1NJR0hVUCA9IDENCiAgICArY29uc3QgX1BUUkFDRV9PX1RSQUNFVkZPUksg
PSA0DQogICAgK2NvbnN0IF9FTk9TUEMgPSAyOA0KICAgICtjb25zdCBfVkRJU0NBUkQgPSAxMw0K
ICAgICtjb25zdCBfUlRNR1JQX05PVElGWSA9IDINCiAgICArY29uc3QgX1NZU19vcGVuYXQgPSBf
X19OUl9vcGVuYXQNCiAgICArY29uc3QgX19fT1JERVJfUERQX0VORElBTl9fID0gMzQxMg0KICAg
ICtjb25zdCBfQVRfU1RBVFhfU1lOQ19UWVBFID0gMHg2MDAwDQogICAgK2NvbnN0IF9fX05SX3Rn
a2lsbCA9IDIzNA0KICAgICtjb25zdCBfX19OUl9nZXRfa2VybmVsX3N5bXMgPSAxNzcNCiAgICAr
Y29uc3QgX0VET1RET1QgPSA3Mw0KICAgICtjb25zdCBfUEZfTkVUQkVVSSA9IDEzDQogICAgK2Nv
bnN0IF9FUE9MTE9ORVNIT1QgPSAxMDczNzQxODI0DQogICAgK2NvbnN0IF9NQVBfQU5PTiA9IF9N
QVBfQU5PTllNT1VTDQogICAgK2NvbnN0IF9fX09fRElSRUNUID0gMDQwMDAwDQogICAgK2NvbnN0
IF9JUFRUTERFQyA9IDENCiAgICArY29uc3QgX19TQ19OR1JPVVBTX01BWCA9IDMNCiAgICArY29u
c3QgX0lQUE9SVF9FWEVDU0VSVkVSID0gNTEyDQogICAgK2NvbnN0IF9fX05SX29wZW5fYnlfaGFu
ZGxlX2F0ID0gMzA0DQogICAgK2NvbnN0IF9fQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMgPSAxMTEw
DQogICAgK2NvbnN0IF9TT19LRUVQQUxJVkUgPSA5DQogICAgK2NvbnN0IF9TWVNfcnRfc2lncmV0
dXJuID0gX19fTlJfcnRfc2lncmV0dXJuDQogICAgK2NvbnN0IF9JQ01QNl9SUl9QQ09VU0VfUkFG
TEFHU19BVVRPID0gMHgxMA0KICAgICtjb25zdCBfQUZfTkVUTElOSyA9IF9QRl9ORVRMSU5LDQog
ICAgK2NvbnN0IF9ORF9PUFRfUElfRkxBR19BVVRPID0gMHg0MA0KICAgICtjb25zdCBfSVBWNl9B
RERSRk9STSA9IDENCiAgICArY29uc3QgX1RJTUVfV0FJVCA9IDQNCiAgICArY29uc3QgX0lGTEFf
SVBPSUJfVU5TUEVDID0gMA0KICAgICtjb25zdCBfRUhPU1RET1dOID0gMTEyDQogICAgK2NvbnN0
IF9TWVNfZmFkdmlzZTY0ID0gX19fTlJfZmFkdmlzZTY0DQogICAgK2NvbnN0IF9FVEhfUF9JRkUg
PSAweEVEM0UNCiAgICArY29uc3QgX0lQVjZfUkVDVkhPUExJTUlUID0gNTENCiAgICArY29uc3Qg
X1RJT0NHU09GVENBUiA9IDB4NTQxOQ0KICAgICtjb25zdCBfUFJfR0VUX0VORElBTiA9IDE5DQog
ICAgK2NvbnN0IF9TWVNfdXN0YXQgPSBfX19OUl91c3RhdA0KICAgICtjb25zdCBfU1lTX2lvX3N1
Ym1pdCA9IF9fX05SX2lvX3N1Ym1pdA0KICAgICtjb25zdCBfU09NQVhDT05OID0gMTI4DQogICAg
K2NvbnN0IF9JUF9NVFUgPSAxNA0KICAgICtjb25zdCBfX19GTFQzMlhfTUlOXzEwX0VYUF9fID0g
KC0zMDcpDQogICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9T
WVNfd3JpdGV2ID0gX19fTlJfd3JpdGV2DQogICAgK2NvbnN0IF9fX05SX2xnZXR4YXR0ciA9IDE5
Mg0KICAgICtjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9BVFRSX1QgPSA1Ng0KICAgICtjb25zdCBf
TU5UX0ZPUkNFID0gMQ0KICAgICtjb25zdCBfX19GTFQxMjhfREVOT1JNX01JTl9fID0gMS4xDQog
ICAgK2NvbnN0IF9fX2s4X18gPSAxDQogICAgK2NvbnN0IF9TWVNfdW5zaGFyZSA9IF9fX05SX3Vu
c2hhcmUNCiAgICArY29uc3QgX01BRFZfUkVNT1ZFID0gOQ0KICAgICtjb25zdCBfRUFEViA9IDY4
DQogICAgK2NvbnN0IF9TT0xfQUxHID0gMjc5DQogICAgK2NvbnN0IF9DTE9ORV9ORVdDR1JPVVAg
PSAweDAyMDAwMDAwDQogICAgK2NvbnN0IF9fU0NfTUVTU0FHRV9QQVNTSU5HID0gMjANCiAgICAr
Y29uc3QgX01TX01BTkRMT0NLID0gNjQNCiAgICArY29uc3QgX19VVFNOQU1FX1ZFUlNJT05fTEVO
R1RIID0gX19VVFNOQU1FX0xFTkdUSA0KICAgICtjb25zdCBfUlROTF9GQU1JTFlfSVA2TVIgPSAx
MjkNCiAgICArY29uc3QgX0lGTEFfUEhZU19QT1JUX0lEID0gMzQNCiAgICArY29uc3QgX0ROX01V
TFRJU0hPVCA9IDB4ODAwMDAwMDANCiAgICArY29uc3QgX0IxMjAwID0gMDAwMDAxMQ0KICAgICtj
b25zdCBfRVdPVUxEQkxPQ0sgPSBfRUFHQUlODQogICAgK2NvbnN0IF9JRkxBX1ZGX1BPUlQgPSAx
DQogICAgK2NvbnN0IF9fX1NJX0hBVkVfU0lHU1lTID0gMQ0KICAgICtjb25zdCBfTkxNX0ZfTUFU
Q0ggPSAweDIwMA0KICAgICtjb25zdCBfQVJQSFJEX0FYMjUgPSAzDQogICAgK2NvbnN0IF9fUE9T
SVhfUFJJT1JJVFlfU0NIRURVTElORyA9IDIwMDgwOQ0KICAgICtjb25zdCBfUlRGX05PRk9SV0FS
RCA9IDB4MTAwMA0KICAgICtjb25zdCBfRl9EVVBGRF9DTE9FWEVDID0gMTAzMA0KICAgICtjb25z
dCBfRUNBTkNFTEVEID0gMTI1DQogICAgK2NvbnN0IF9JTlJfT1BFTl9NQVggPSA0MDk2DQogICAg
K2NvbnN0IF9CMzAwID0gMDAwMDAwNw0KICAgICtjb25zdCBfSU1BWEJFTCA9IDAwMjAwMDANCiAg
ICArY29uc3QgX1BSSWRMRUFTVDMyID0gImQiDQogICAgK2NvbnN0IF9SVVNBR0VfQ0hJTERSRU4g
PSAtMQ0KICAgICtjb25zdCBfWDg2X0NSNF9WTVhFX0JJVCA9IDEzDQogICAgK2NvbnN0IF9GX09G
RF9TRVRMSyA9IDM3DQogICAgK2NvbnN0IF9FTk9EQVRBID0gNjENCiAgICArY29uc3QgX1NPTF9L
Q00gPSAyODENCiAgICArY29uc3QgX0FGX1BQUE9YID0gX1BGX1BQUE9YDQogICAgK2NvbnN0IF9I
QVZFX1NZU19UWVBFU19IID0gMQ0KICAgICtjb25zdCBfU0lPQ0dJRkFERFIgPSAweDg5MTUNCiAg
ICArY29uc3QgX05EQV9EU1QgPSAxDQogICAgK2NvbnN0IF9fX0dMSUJDX1VTRV9ERVBSRUNBVEVE
X0dFVFMgPSAwDQogICAgK2NvbnN0IF9USU9DTV9MRSA9IDB4MDAxDQogICAgK2NvbnN0IF9TQ05v
RkFTVDggPSAiaGhvIg0KICAgICtjb25zdCBfQVJQSFJEX1NLSVAgPSA3NzENCiAgICArY29uc3Qg
X19fREVDMzJfU1VCTk9STUFMX01JTl9fID0gMC4wMDAwMDFFLTk1DQogICAgK2NvbnN0IF9fX3Bp
ZV9fID0gMg0KICAgICtjb25zdCBfTVNfU0xBVkUgPSA1MjQyODgNCiAgICArY29uc3QgX1JMSU1J
VF9EQVRBID0gMg0KICAgICtjb25zdCBfX19MSVRUTEVfRU5ESUFOID0gMTIzNA0KICAgICtjb25z
dCBfX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMgPSAyMDA4MDkNCiAgICArY29uc3QgX1NZU19tc2dn
ZXQgPSBfX19OUl9tc2dnZXQNCiAgICArY29uc3QgX0hBVkVfQVRBTjJMID0gMQ0KICAgICtjb25z
dCBfSUZMQV9WUkZfUE9SVF9UQUJMRSA9IDENCiAgICArY29uc3QgX05FVExJTktfTElTVF9NRU1C
RVJTSElQUyA9IDkNCiAgICArY29uc3QgX19GQ05UTF9IID0gMQ0KICAgICtjb25zdCBfX19OUl91
dGltZXMgPSAyMzUNCiAgICArY29uc3QgX1JUTV9HRVRST1VURSA9IDI2DQogICAgK2NvbnN0IF9V
SU5UOF9NQVggPSAoMjU1KQ0KICAgICtjb25zdCBfQVJQT1BfUlJFUVVFU1QgPSAzDQogICAgK2Nv
bnN0IF9fX1JMSU1fTkxJTUlUUyA9IDE2DQogICAgK2NvbnN0IF9JUFZMQU5fRl9WRVBBID0gMHgw
Mg0KICAgICtjb25zdCBfSUZMQV9NQUNWTEFOX01BQ0FERFJfREFUQSA9IDUNCiAgICArY29uc3Qg
X19QT1NJWF9QUklPUklUSVpFRF9JTyA9IDIwMDgwOQ0KICAgICtjb25zdCBfTk9fREFUQSA9IDQN
CiAgICArY29uc3QgX1JUUFJPVF9JU0lTID0gMTg3DQogICAgK2NvbnN0IF9IQVZFX0FTX1g4Nl82
NF9VTldJTkRfU0VDVElPTl9UWVBFID0gMQ0KICAgICtjb25zdCBfSVBWNl8yMjkyUlRIRFIgPSA1
DQogICAgK2NvbnN0IF9TWVNfbWxvY2sgPSBfX19OUl9tbG9jaw0KICAgICtjb25zdCBfX0ZFQVRV
UkVTX0ggPSAxDQogICAgK2NvbnN0IF9TWVNfa2V4ZWNfbG9hZCA9IF9fX05SX2tleGVjX2xvYWQN
CiAgICArY29uc3QgX0VQUk9UT1RZUEUgPSA5MQ0KICAgICtjb25zdCBfTlpFUk8gPSAyMA0KICAg
ICtjb25zdCBfU0lPQ1NJRk5FVE1BU0sgPSAweDg5MWMNCiAgICArY29uc3QgX19fSUZMQV9YRlJN
X01BWCA9IDMNCiAgICArY29uc3QgX0lGTEFfTUFDU0VDX0VOQ1JZUFQgPSA3DQogICAgK2NvbnN0
IF9fX05SX3BlcnNvbmFsaXR5ID0gMTM1DQogICAgK2NvbnN0IF9TWVNfZ2V0X21lbXBvbGljeSA9
IF9fX05SX2dldF9tZW1wb2xpY3kNCiAgICArY29uc3QgX0VJTFNFUSA9IDg0DQogICAgK2NvbnN0
IF9TWVNfc2V0cmVnaWQgPSBfX19OUl9zZXRyZWdpZA0KICAgICtjb25zdCBfU09DS19TVFJFQU0g
PSAxDQogICAgK2NvbnN0IF9QUl9HRVRfU0VDQ09NUCA9IDIxDQogICAgK2NvbnN0IF9JRkxBX01B
Q1NFQ19TQ0kgPSAxDQogICAgK2NvbnN0IF9FVEhfSExFTiA9IDE0DQogICAgK2NvbnN0IF9TQ01f
Q1JFREVOVElBTFMgPSAyDQogICAgK2NvbnN0IF9fX1VTRV9MQVJHRUZJTEU2NCA9IDENCiAgICAr
Y29uc3QgX1JUTV9HRVRSVUxFID0gMzQNCiAgICArY29uc3QgX19ORVRJTkVUX0lOX0ggPSAxDQog
ICAgK2NvbnN0IF9fU0NfTEVWRUwxX0RDQUNIRV9MSU5FU0laRSA9IDE5MA0KICAgICtjb25zdCBf
RURRVU9UID0gMTIyDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX1RPUyA9IDYNCiAgICArY29uc3Qg
X19fU19JUkVBRCA9IDA0MDANCiAgICArY29uc3QgX0ZfR0VURkQgPSAxDQogICAgK2NvbnN0IF9B
UlBIUkRfRERDTVAgPSA1MTcNCiAgICArY29uc3QgX19fTlJfdXNlcmZhdWx0ZmQgPSAzMjMNCiAg
ICArY29uc3QgX0ZfR0VURkwgPSAzDQogICAgK2NvbnN0IF9fX3RpbWV2YWxfZGVmaW5lZCA9IDEN
CiAgICArY29uc3QgX0lQT1BUX0NPUFkgPSAweDgwDQogICAgK2NvbnN0IF9JUFY2X0NIRUNLU1VN
ID0gNw0KICAgICtjb25zdCBfU1RBVFhfQVRUUl9BUFBFTkQgPSAweDAwMjANCiAgICArY29uc3Qg
X0VUSF9QX1BQUF9TRVMgPSAweDg4NjQNCiAgICArY29uc3QgX19TQ19MRVZFTDFfRENBQ0hFX1NJ
WkUgPSAxODgNCiAgICArY29uc3QgX1RVTkdFVFNOREJVRl92YWwgPSAyMTQ3NzY3NTA3DQogICAg
K2NvbnN0IF9GU19YRkxBR19QUkVBTExPQyA9IDB4MDAwMDAwMDINCiAgICArY29uc3QgX1BSX0dF
VF9TUEVDVUxBVElPTl9DVFJMID0gNTINCiAgICArY29uc3QgX0NCQVVERVggPSAwMDEwMDAwDQog
ICAgK2NvbnN0IF9TS0ZfQURfUEtUVFlQRSA9IDQNCiAgICArY29uc3QgX0xJTlVYX1JFQk9PVF9N
QUdJQzEgPSAweGZlZTFkZWFkDQogICAgK2NvbnN0IF9MSU5VWF9SRUJPT1RfTUFHSUMyID0gNjcy
Mjc0NzkzDQogICAgK2NvbnN0IF9QRl9CUklER0UgPSA3DQogICAgK2NvbnN0IF9NU19JX1ZFUlNJ
T04gPSA4Mzg4NjA4DQogICAgK2NvbnN0IF9NQURWX1JBTkRPTSA9IDENCiAgICArY29uc3QgX19V
VFNOQU1FX05PREVOQU1FX0xFTkdUSCA9IF9fVVRTTkFNRV9MRU5HVEgNCiAgICArY29uc3QgX1ND
Tm9MRUFTVDggPSAiaGhvIg0KICAgICtjb25zdCBfWDg2X0NSM19QQ0lEX0JJVFMgPSAxMg0KICAg
ICtjb25zdCBfQUZfU01DID0gX1BGX1NNQw0KICAgICtjb25zdCBfQVJQSFJEX0lFRUU4MDIgPSA2
DQogICAgK2NvbnN0IF9BREpfT0ZGU0VUID0gMHgwMDAxDQogICAgK2NvbnN0IF9FTE9PUCA9IDQw
DQogICAgK2NvbnN0IF9fX0lGTEFfR1RQX01BWCA9IDUNCiAgICArY29uc3QgX1JUUFJPVF9CR1Ag
PSAxODYNCiAgICArY29uc3QgX0xJVFRMRV9FTkRJQU4gPSBfX19MSVRUTEVfRU5ESUFODQogICAg
K2NvbnN0IF9fX0JZVEVfT1JERVIgPSBfX19MSVRUTEVfRU5ESUFODQogICAgK2NvbnN0IF9UQ1BJ
X09QVF9USU1FU1RBTVBTID0gMQ0KICAgICtjb25zdCBfX19UQ0FfTUFYID0gMTUNCiAgICArY29u
c3QgX1JUQV9NRVRSSUNTID0gOA0KICAgICtjb25zdCBfU09MX1BQUE9MMlRQID0gMjczDQogICAg
K2NvbnN0IF9fU0NfSU9WX01BWCA9IDYwDQogICAgK2NvbnN0IF9fTEZTNjRfTEFSR0VGSUxFID0g
MQ0KICAgICtjb25zdCBfTUFYX1ZMQU5fTElTVF9MRU4gPSAxDQogICAgK2NvbnN0IF9TWU5DX0ZJ
TEVfUkFOR0VfV0FJVF9BRlRFUiA9IDQNCiAgICArY29uc3QgX19QT1NJWF9NUV9QUklPX01BWCA9
IDMyDQogICAgK2NvbnN0IF9fUE9TSVhfVkVSU0lPTiA9IDIwMDgwOQ0KICAgICtjb25zdCBfX19O
Ul9wcG9sbCA9IDI3MQ0KICAgICtjb25zdCBfRl9PV05FUl9QSUQgPSAxDQogICAgK2NvbnN0IF9U
SU9DUEtUX0lPQ1RMID0gNjQNCiAgICArY29uc3QgX19fVVNFX1BPU0lYMTk5MzA5ID0gMQ0KICAg
ICtjb25zdCBfX19JTlRfRkFTVDhfTUFYX18gPSAweDdmDQogICAgK2NvbnN0IF9fU0NfQkNfU0NB
TEVfTUFYID0gMzgNCiAgICArY29uc3QgX1NZU19jaHJvb3QgPSBfX19OUl9jaHJvb3QNCiAgICAr
Y29uc3QgX0VQUk9UT05PU1VQUE9SVCA9IDkzDQogICAgK2NvbnN0IF9TVEFUWF9HSUQgPSAweDAw
MTANCiAgICArY29uc3QgX0lGTEFfQlJfR1JPVVBfRldEX01BU0sgPSA5DQogICAgK2NvbnN0IF9J
UFBPUlRfUkVTRVJWRUQgPSAxMDI0DQogICAgK2NvbnN0IF9JTl9PTkxZRElSID0gMHgwMTAwMDAw
MA0KICAgICtjb25zdCBfU1RBX0ZMTCA9IDB4MDAwOA0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNf
RVMgPSAxMA0KICAgICtjb25zdCBfX19XSU5UX1dJRFRIX18gPSAzMg0KICAgICtjb25zdCBfX1BP
U0lYX1BJUEVfQlVGID0gNTEyDQogICAgK2NvbnN0IF9JUE9QVF9TRUNVUl9TRUNSRVQgPSAweGQ3
ODgNCiAgICArY29uc3QgX19fUElDX18gPSAyDQogICAgK2NvbnN0IF9JU1RSSVAgPSAwMDAwMDQw
DQogICAgK2NvbnN0IF9fX1JUTV9NQVggPSAxMDMNCiAgICArY29uc3QgX0lQT1BUX1NFQ1VSX0NP
TkZJRCA9IDB4ZjEzNQ0KICAgICtjb25zdCBfRVNQSVBFID0gMjkNCiAgICArY29uc3QgX0FGX1NO
QSA9IF9QRl9TTkENCiAgICArY29uc3QgX1JUQV9QUk9UT0lORk8gPSAxMA0KICAgICtjb25zdCBf
X19OUl9icGYgPSAzMjENCiAgICArY29uc3QgX1NZU19hZnNfc3lzY2FsbCA9IF9fX05SX2Fmc19z
eXNjYWxsDQogICAgK2NvbnN0IF9VSU5UX0ZBU1Q4X01BWCA9ICgyNTUpDQogICAgK2NvbnN0IF9T
VEFfTkFOTyA9IDB4MjAwMA0KICAgICtjb25zdCBfVVNIUlRfV0lEVEggPSAxNg0KICAgICtjb25z
dCBfT19MQVJHRUZJTEUgPSBfX19PX0xBUkdFRklMRQ0KICAgICtjb25zdCBfX19OUl9zY2hlZF9z
ZXRhZmZpbml0eSA9IDIwMw0KICAgICtjb25zdCBfU09MX0xMQyA9IDI2OA0KICAgICtjb25zdCBf
X19JRkxBX1ZYTEFOX01BWCA9IDI5DQogICAgK2NvbnN0IF9FSVNDT05OID0gMTA2DQogICAgK2Nv
bnN0IF9USU9DUEtUX1NUQVJUID0gOA0KICAgICtjb25zdCBfSUZMQV9HU09fTUFYX1NFR1MgPSA0
MA0KICAgICtjb25zdCBfU09fTElOR0VSID0gMTMNCiAgICArY29uc3QgX19fVUlOVF9MRUFTVDE2
X01BWF9fID0gMHhmZmZmDQogICAgK2NvbnN0IF9PTENVQyA9IDAwMDAwMDINCiAgICArY29uc3Qg
X1BSX0dFVF9USU1FUlNMQUNLID0gMzANCiAgICArY29uc3QgX19fTlJfbHN0YXQgPSA2DQogICAg
K2NvbnN0IF9fUE9TSVhfU1lNTE9PUF9NQVggPSA4DQogICAgK2NvbnN0IF9SVE5MR1JQX05PVElG
WSA9IDINCiAgICArY29uc3QgX19fREJMX0RJR19fID0gMTUNCiAgICArY29uc3QgX19DU19YQlM1
X0xQNjRfT0ZGNjRfTElOVEZMQUdTID0gMTExMQ0KICAgICtjb25zdCBfUlROX1VOUkVBQ0hBQkxF
ID0gNw0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUyA9IDExMjUN
CiAgICArY29uc3QgX19fREVDNjRfTUFYX18gPSA5Ljk5OTk5OTk5OTk5OTk5OUUzODQNCiAgICAr
Y29uc3QgX0lGTEFfSFNSX1NMQVZFMSA9IDENCiAgICArY29uc3QgX19QT1NJWF9USFJFQURfQVRU
Ul9TVEFDS1NJWkUgPSAyMDA4MDkNCiAgICArY29uc3QgX0hBVkVfTkVUSU5FVF9JUF9IID0gMQ0K
ICAgICtjb25zdCBfSUZIV0FERFJMRU4gPSA2DQogICAgK2NvbnN0IF9UQ1NFVFNGID0gMHg1NDA0
DQogICAgK2NvbnN0IF9fQklUU19TSUdFVkVOVF9DT05TVFNfSCA9IDENCiAgICArY29uc3QgX1hE
UF9BVFRBQ0hFRF9NVUxUSSA9IDQNCiAgICArY29uc3QgX05MTVNHRVJSX0FUVFJfVU5VU0VEID0g
MA0KICAgICtjb25zdCBfTUZEX0hVR0VUTEIgPSA0DQogICAgK2NvbnN0IF9fX1dDSEFSX01BWCA9
IF9fX1dDSEFSX01BWF9fDQogICAgK2NvbnN0IF9fU0NfU1NJWkVfTUFYID0gMTEwDQogICAgK2Nv
bnN0IF9JUF9VTklDQVNUX0lGID0gNTANCiAgICArY29uc3QgX1NPX1JDVkJVRkZPUkNFID0gMzMN
CiAgICArY29uc3QgX1NZU19uZnNzZXJ2Y3RsID0gX19fTlJfbmZzc2VydmN0bA0KICAgICtjb25z
dCBfQlVTX0FEUkFMTiA9IDENCiAgICArY29uc3QgX0lQVjZfUEtUSU5GTyA9IDUwDQogICAgK2Nv
bnN0IF9TWVNfbHJlbW92ZXhhdHRyID0gX19fTlJfbHJlbW92ZXhhdHRyDQogICAgK2NvbnN0IF9U
Q1NFVFNXID0gMHg1NDAzDQogICAgK2NvbnN0IF9FQUlfU09DS1RZUEUgPSAtNw0KICAgICtjb25z
dCBfX1NDX1Y3X0lMUDMyX09GRjMyID0gMjM3DQogICAgK2NvbnN0IF9TWVNfaW9fY2FuY2VsID0g
X19fTlJfaW9fY2FuY2VsDQogICAgK2NvbnN0IF9JUFBST1RPX0lQSVAgPSA0DQogICAgK2NvbnN0
IF9saW51eCA9IDENCiAgICArY29uc3QgX1dOT1dBSVQgPSAweDAxMDAwMDAwDQogICAgK2NvbnN0
IF9fX0xPQ0tfQVRPTUlDID0gMTYNCiAgICArY29uc3QgX0lQVjZfUkVDVlJUSERSID0gNTYNCiAg
ICArY29uc3QgX1RDUF9DQV9PcGVuID0gMA0KICAgICtjb25zdCBfX1NDX0xFVkVMM19DQUNIRV9M
SU5FU0laRSA9IDE5Ng0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX0NNRF9IQUxUID0gMHhDREVG
MDEyMw0KICAgICtjb25zdCBfSUNNUDZfRklMVEVSID0gMQ0KICAgICtjb25zdCBfSEFWRV9ORVRf
Uk9VVEVfSCA9IDENCiAgICArY29uc3QgX1NPX0JVU1lfUE9MTCA9IDQ2DQogICAgK2NvbnN0IF9F
TkZJTEUgPSAyMw0KICAgICtjb25zdCBfX1NDX1RIUkVBRFMgPSA2Nw0KICAgICtjb25zdCBfX0lP
Q19TSVpFTUFTSyA9ICgoMSA8PCBfX0lPQ19TSVpFQklUUyktMSkNCiAgICArY29uc3QgX0lQX0lQ
U0VDX1BPTElDWSA9IDE2DQogICAgK2NvbnN0IF9SVE1TR19DT05UUk9MID0gMHg0MA0KICAgICtj
b25zdCBfU09fTUFSSyA9IDM2DQogICAgK2NvbnN0IF9NQVBfUFJJVkFURSA9IDB4MDINCiAgICAr
Y29uc3QgX19QQ19SRUNfWEZFUl9BTElHTiA9IDE3DQogICAgK2NvbnN0IF9fQklUU19UWVBFU0la
RVNfSCA9IDENCiAgICArY29uc3QgX0ZGSV9UWVBFX0xPTkdET1VCTEUgPSA0DQogICAgK2NvbnN0
IF9fX05SX2FkZF9rZXkgPSAyNDgNCiAgICArY29uc3QgX19fU0lHX0FUT01JQ19NQVhfXyA9IDB4
N2ZmZmZmZmYNCiAgICArY29uc3QgX1BfUEdJRCA9IDINCiAgICArY29uc3QgX0VBSV9TRVJWSUNF
ID0gLTgNCiAgICArY29uc3QgX1JUQV9GTE9XID0gMTENCiAgICArY29uc3QgX0lOX0NSRUFURSA9
IDB4MDAwMDAxMDANCiAgICArY29uc3QgX19QT1NJWF9UUkFDRV9MT0cgPSAtMQ0KICAgICtjb25z
dCBfU0NOZExFQVNUMTYgPSAiaGQiDQogICAgK2NvbnN0IF9SVE5fQlJPQURDQVNUID0gMw0KICAg
ICtjb25zdCBfUlRFWFRfRklMVEVSX0JSVkxBTl9DT01QUkVTU0VEID0gKDEgPDwgMikNCiAgICAr
Y29uc3QgX0lOVDE2X01JTiA9ICgtMzI3NjctMSkNCiAgICArY29uc3QgX0lGTEFfWEZSTV9MSU5L
ID0gMQ0KICAgICtjb25zdCBfTkxNU0dFUlJfQVRUUl9NU0cgPSAxDQogICAgK2NvbnN0IF9BRl9S
T1NFID0gX1BGX1JPU0UNCiAgICArY29uc3QgX1NDTmQxNiA9ICJoZCINCiAgICArY29uc3QgX19T
Q19QSUlfSU5URVJORVRfREdSQU0gPSA2Mg0KICAgICtjb25zdCBfSEFWRV9NS05PREFUID0gMQ0K
ICAgICtjb25zdCBfSUZMQV9MSU5LX05FVE5TSUQgPSAzNw0KICAgICtjb25zdCBfU1lTX3NvY2tl
dCA9IF9fX05SX3NvY2tldA0KICAgICtjb25zdCBfU0lPQ1JUTVNHID0gMHg4OTBEDQogICAgK2Nv
bnN0IF9fRVJSTk9fSCA9IDENCiAgICArY29uc3QgX1BGX0FQUExFVEFMSyA9IDUNCiAgICArY29u
c3QgX19fU1NFX18gPSAxDQogICAgK2NvbnN0IF9YRFBfQVRUQUNIRURfSFcgPSAzDQogICAgK2Nv
bnN0IF9USU9DU0VSR0VUTVVMVEkgPSAweDU0NUENCiAgICArY29uc3QgX1NFR1ZfQk5ERVJSID0g
Mw0KICAgICtjb25zdCBfSUZMQV9CT05EX1NMQVZFX1VOU1BFQyA9IDANCiAgICArY29uc3QgX0lG
TEFfQk9ORF9SRVNFTkRfSUdNUCA9IDE1DQogICAgK2NvbnN0IF9SVE1fREVMUURJU0MgPSAzNw0K
ICAgICtjb25zdCBfSUZMQV9CT05EX1BSSU1BUllfUkVTRUxFQ1QgPSAxMg0KICAgICtjb25zdCBf
UkVOQU1FX05PUkVQTEFDRSA9ICgxIDw8IDApDQogICAgK2NvbnN0IF9UQ1BfQ0xPU0VfV0FJVCA9
IDgNCiAgICArY29uc3QgX19fTlJfYnJrID0gMTINCiAgICArY29uc3QgX0VOQU1FVE9PTE9ORyA9
IDM2DQogICAgK2NvbnN0IF9fU0NfVFRZX05BTUVfTUFYID0gNzINCiAgICArY29uc3QgX0I1MCA9
IDAwMDAwMDENCiAgICArY29uc3QgX1NZU19mZ2V0eGF0dHIgPSBfX19OUl9mZ2V0eGF0dHINCiAg
ICArY29uc3QgX0lGTEFfSU5FVDZfRkxBR1MgPSAxDQogICAgK2NvbnN0IF9fX05SX21xX3RpbWVk
c2VuZCA9IDI0Mg0KICAgICtjb25zdCBfX1NUUklOR19IID0gMQ0KICAgICtjb25zdCBfTkRUUEFf
UEFEID0gMTgNCiAgICArY29uc3QgX19fTlJfc2V0X3RpZF9hZGRyZXNzID0gMjE4DQogICAgK2Nv
bnN0IF9TVERJTl9GSUxFTk8gPSAwDQogICAgK2NvbnN0IF9fX05SX3RpbWVyZmRfY3JlYXRlID0g
MjgzDQogICAgK2NvbnN0IF9fX0lGTEFfSVBPSUJfTUFYID0gNA0KICAgICtjb25zdCBfX19zaWdz
ZXRfdF9kZWZpbmVkID0gMQ0KICAgICtjb25zdCBfUFJfRlBfRVhDX1JFUyA9IDB4MDgwMDAwDQog
ICAgK2NvbnN0IF9TWVNfbWVtZmRfY3JlYXRlID0gX19fTlJfbWVtZmRfY3JlYXRlDQogICAgK2Nv
bnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMgPSAxMTMwDQogICAgK2NvbnN0IF9J
Q01QNl9GSUxURVJfUEFTUyA9IDINCiAgICArY29uc3QgX1NBX1JFU1RBUlQgPSAweDEwMDAwMDAw
DQogICAgK2NvbnN0IF9USU9DR0xDS1RSTUlPUyA9IDB4NTQ1Ng0KICAgICtjb25zdCBfX1NDX1BS
SU9SSVRJWkVEX0lPID0gMTMNCiAgICArY29uc3QgX1BUUkFDRV9TRUNDT01QX0dFVF9GSUxURVIg
PSAxNjkwOA0KICAgICtjb25zdCBfQ0xPTkVfTkVXSVBDID0gMHgwODAwMDAwMA0KICAgICtjb25z
dCBfVVNFX0xJQkZGSSA9IDENCiAgICArY29uc3QgX1NBX09ORVNIT1QgPSBfU0FfUkVTRVRIQU5E
DQogICAgK2NvbnN0IF9fX05SX2dldHBwaWQgPSAxMTANCiAgICArY29uc3QgX0VOWElPID0gNg0K
ICAgICtjb25zdCBfX19OUl9lcG9sbF93YWl0ID0gMjMyDQogICAgK2NvbnN0IF9fU0NfWE9QRU5f
U0hNID0gOTQNCiAgICArY29uc3QgX0lGTEFfVkZfVkxBTl9MSVNUID0gMTINCiAgICArY29uc3Qg
X0NIQVJfTUFYID0gX1NDSEFSX01BWA0KICAgICtjb25zdCBfSUZMQV9ORVRfTlNfRkQgPSAyOA0K
ICAgICtjb25zdCBfX19QUkFHTUFfUkVERUZJTkVfRVhUTkFNRSA9IDENCiAgICArY29uc3QgX19T
Q19SVFNJR19NQVggPSAzMQ0KICAgICtjb25zdCBfU0lHV0lOQ0ggPSAyOA0KICAgICtjb25zdCBf
TUFEVl9GUkVFID0gOA0KICAgICtjb25zdCBfSUZMQV9QSFlTX1NXSVRDSF9JRCA9IDM2DQogICAg
K2NvbnN0IF9TWVNfc3ltbGlua2F0ID0gX19fTlJfc3ltbGlua2F0DQogICAgK2NvbnN0IF9JRkFf
Rl9URU5UQVRJVkUgPSAweDQwDQogICAgK2NvbnN0IF9JUFY2X1JFQ1ZUQ0xBU1MgPSA2Ng0KICAg
ICtjb25zdCBfX19GTFQzMlhfSEFTX1FVSUVUX05BTl9fID0gMQ0KICAgICtjb25zdCBfUE9SVF9W
RFBfUkVTUE9OU0VfT1VUX09GX1NZTkMgPSA2DQogICAgK2NvbnN0IF9QRl9ORVRST00gPSA2DQog
ICAgK2NvbnN0IF9QUl9TRVRfTU1fRU5EX0NPREUgPSAyDQogICAgK2NvbnN0IF9TVEFfUFBTVElN
RSA9IDB4MDAwNA0KICAgICtjb25zdCBfQVJQRF9MT09LVVAgPSAweDAyDQogICAgK2NvbnN0IF9G
X1NFVE9XTl9FWCA9IF9fX0ZfU0VUT1dOX0VYDQogICAgK2NvbnN0IF9CQ19TQ0FMRV9NQVggPSBf
X1BPU0lYMl9CQ19TQ0FMRV9NQVgNCiAgICArY29uc3QgX1NJT0NTSUZTTEFWRSA9IDB4ODkzMA0K
ICAgICtjb25zdCBfRU5PU1RSID0gNjANCiAgICArY29uc3QgX0ZTX1NZTkNfRkwgPSAweDAwMDAw
MDA4DQogICAgK2NvbnN0IF9fX05SX3NjaGVkX3NldHBhcmFtID0gMTQyDQogICAgK2NvbnN0IF9f
U0NfVEhSRUFEX1RIUkVBRFNfTUFYID0gNzYNCiAgICArY29uc3QgX0lGTEFfVFVOX1BJID0gNA0K
ICAgICtjb25zdCBfU0tGX0FEX1ZMQU5fVFBJRCA9IDYwDQogICAgK2NvbnN0IF9JRkxBX0hTUl9T
TEFWRTIgPSAyDQogICAgK2NvbnN0IF9QQUNLRVRfRkFOT1VUID0gMTgNCiAgICArY29uc3QgX1NB
X05PREVGRVIgPSAweDQwMDAwMDAwDQogICAgK2NvbnN0IF9OTE1TR19NSU5fVFlQRSA9IDB4MTAN
CiAgICArY29uc3QgX1RJT0NNX1JJID0gX1RJT0NNX1JORw0KICAgICtjb25zdCBfSVBUT1NfRUNO
X0VDVDAgPSAweDAyDQogICAgK2NvbnN0IF9TWVNfZmNudGwgPSBfX19OUl9mY250bA0KICAgICtj
b25zdCBfU0lPQ1NJRk1FTSA9IDB4ODkyMA0KICAgICtjb25zdCBfSUZMQV9JUFZMQU5fVU5TUEVD
ID0gMA0KICAgICtjb25zdCBfU1lTX2dldGV1aWQgPSBfX19OUl9nZXRldWlkDQogICAgK2NvbnN0
IF9SVE5fTE9DQUwgPSAyDQogICAgK2NvbnN0IF9UVU5TRVRPRkZMT0FEX3ZhbCA9IDEwNzQwMjU2
ODANCiAgICArY29uc3QgX05MTVNHRVJSX0FUVFJfTUFYID0gMw0KICAgICtjb25zdCBfSUZMQV9W
WExBTl9HUk9VUDYgPSAxNg0KICAgICtjb25zdCBfRVRIX01JTl9NVFUgPSA2OA0KICAgICtjb25z
dCBfU0NOb0xFQVNUMTYgPSAiaG8iDQogICAgK2NvbnN0IF9JRkZfTkFQSSA9IDB4MDAxMA0KICAg
ICtjb25zdCBfRkZJX1RZUEVfVUlOVDY0ID0gMTENCiAgICArY29uc3QgX1BGX0NBSUYgPSAzNw0K
ICAgICtjb25zdCBfQ0xPTkVfU0VUVExTID0gMHgwMDA4MDAwMA0KICAgICtjb25zdCBfX19ERUM2
NF9TVUJOT1JNQUxfTUlOX18gPSAwLjAwMDAwMDAwMDAwMDAwMUUtMzgzDQogICAgK2NvbnN0IF9f
X09fTk9GT0xMT1cgPSAwNDAwMDAwDQogICAgK2NvbnN0IF9fQklUU19TSUdOVU1fSCA9IDENCiAg
ICArY29uc3QgX05FVExJTktfRFJPUF9NRU1CRVJTSElQID0gMg0KICAgICtjb25zdCBfX19OUl9p
bm90aWZ5X2luaXQgPSAyNTMNCiAgICArY29uc3QgX1NUQVRYX0FUVFJfTk9EVU1QID0gMHgwMDQw
DQogICAgK2NvbnN0IF9fX05SX3V0aW1lbnNhdCA9IDI4MA0KICAgICtjb25zdCBfX19OUl90aW1l
cmZkX3NldHRpbWUgPSAyODYNCiAgICArY29uc3QgX0lGTEFfSU5FVF9VTlNQRUMgPSAwDQogICAg
K2NvbnN0IF9BRl9ORVRCRVVJID0gX1BGX05FVEJFVUkNCiAgICArY29uc3QgX1JUX1RBQkxFX01B
SU4gPSAyNTQNCiAgICArY29uc3QgX1NLRl9BRF9PRkYgPSAoLTB4MTAwMCkNCiAgICArY29uc3Qg
X19fREVDMzJfTUFOVF9ESUdfXyA9IDcNCiAgICArY29uc3QgX0JNQVBfSU9DVEwgPSAxDQogICAg
K2NvbnN0IF9SVE1fTkVXVEZJTFRFUiA9IDQ0DQogICAgK2NvbnN0IF9TQV9OT01BU0sgPSBfU0Ff
Tk9ERUZFUg0KICAgICtjb25zdCBfTUFQX0VYRUNVVEFCTEUgPSAweDAxMDAwDQogICAgK2NvbnN0
IF9TVEFfVU5TWU5DID0gMHgwMDQwDQogICAgK2NvbnN0IF9FTk9URElSID0gMjANCiAgICArY29u
c3QgX0VJTlZBTCA9IDIyDQogICAgK2NvbnN0IF9UVU5HRVRGSUxURVJfdmFsID0gMjE0ODU1Mzk0
Nw0KICAgICtjb25zdCBfX19OUl9zY2hlZF9nZXRhdHRyID0gMzE1DQogICAgK2NvbnN0IF9UVU5T
RVRERUJVR192YWwgPSAxMDc0MDI1NjczDQogICAgK2NvbnN0IF9TQ054MTYgPSAiaHgiDQogICAg
K2NvbnN0IF9JUF9GUkVFQklORCA9IDE1DQogICAgK2NvbnN0IF9JTl9DTEFTU0FfTUFYID0gMTI4
DQogICAgK2NvbnN0IF9CNzUgPSAwMDAwMDAyDQogICAgK2NvbnN0IF9FUE9MTF9DTE9FWEVDID0g
NTI0Mjg4DQogICAgK2NvbnN0IF9ORVRMSU5LX0dFTkVSSUMgPSAxNg0KICAgICtjb25zdCBfUFRS
QUNFX1BFRUtVU1IgPSAzDQogICAgK2NvbnN0IF9QQUNLRVRfT1RIRVJIT1NUID0gMw0KICAgICtj
b25zdCBfX19GTFQ2NF9ESUdfXyA9IDE1DQogICAgK2NvbnN0IF9BUlBIUkRfSUVFRTgwMl9UUiA9
IDgwMA0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfTEVBUk5JTkcgPSA4DQogICAgK2NvbnN0IF9U
Q0lPRkYgPSAyDQogICAgK2NvbnN0IF9SVF9UQUJMRV9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9O
RFRQQV9ERUxBWV9QUk9CRV9USU1FID0gNw0KICAgICtjb25zdCBfX1NDX0FTWU5DSFJPTk9VU19J
TyA9IDEyDQogICAgK2NvbnN0IF9ORF9ST1VURVJfQURWRVJUID0gMTM0DQogICAgK2NvbnN0IF9Q
QUNLRVRfRFJPUF9NRU1CRVJTSElQID0gMg0KICAgICtjb25zdCBfSU5fQ0xPU0VfV1JJVEUgPSAw
eDAwMDAwMDA4DQogICAgK2NvbnN0IF9ORVRMSU5LX0NPTk5FQ1RPUiA9IDExDQogICAgK2NvbnN0
IF9USU9DTV9TUiA9IDB4MDEwDQogICAgK2NvbnN0IF9GX0dFVExLID0gX0ZfR0VUTEs2NA0KICAg
ICtjb25zdCBfVElPQ01fU1QgPSAweDAwOA0KICAgICtjb25zdCBfRUtFWUVYUElSRUQgPSAxMjcN
CiAgICArY29uc3QgX1NJT0NBVE1BUksgPSAweDg5MDUNCiAgICArY29uc3QgX19TQ19MRVZFTDJf
Q0FDSEVfU0laRSA9IDE5MQ0KICAgICtjb25zdCBfVUlOVF9MRUFTVDhfV0lEVEggPSA4DQogICAg
K2NvbnN0IF9TSU9DR0lGQlJEQUREUiA9IDB4ODkxOQ0KICAgICtjb25zdCBfUlRNX0dFVEFDVElP
TiA9IDUwDQogICAgK2NvbnN0IF9TT0xfQVRNID0gMjY0DQogICAgK2NvbnN0IF9fU0NfVFpOQU1F
X01BWCA9IDYNCiAgICArY29uc3QgX0ZfU0VUTEtXID0gX0ZfU0VUTEtXNjQNCiAgICArY29uc3Qg
X19fV0NIQVJfTUlOX18gPSAoLV9fX1dDSEFSX01BWF9fIC0gMSkNCiAgICArY29uc3QgX19TQ19Y
QlM1X0xQQklHX09GRkJJRyA9IDEyOA0KICAgICtjb25zdCBfUE9SVF9QUk9GSUxFX1JFU1BPTlNF
X0JBRFNUQVRFID0gMjU5DQogICAgK2NvbnN0IF9TRUVLX0hPTEUgPSA0DQogICAgK2NvbnN0IF9J
UFBPUlRfU01UUCA9IDI1DQogICAgK2NvbnN0IF9USU9DQ09OUyA9IDB4NTQxRA0KICAgICtjb25z
dCBfSUZfTkFNRVNJWkUgPSAxNg0KICAgICtjb25zdCBfRUJBREUgPSA1Mg0KICAgICtjb25zdCBf
RUJBREYgPSA5DQogICAgK2NvbnN0IF9fX05SX2Nsb2NrX2FkanRpbWUgPSAzMDUNCiAgICArY29u
c3QgX1NZU19mc3RhdGZzID0gX19fTlJfZnN0YXRmcw0KICAgICtjb25zdCBfRUNIT0tFID0gMDAw
NDAwMA0KICAgICtjb25zdCBfSEFWRV9TWVNfVVRTTkFNRV9IID0gMQ0KICAgICtjb25zdCBfUldI
X1dSSVRFX0xJRkVfTk9ORSA9IDENCiAgICArY29uc3QgX0IzNTAwMDAwID0gMDAxMDAxNg0KICAg
ICtjb25zdCBfX19OUl9zZW5kZmlsZSA9IDQwDQogICAgK2NvbnN0IF9fX05SX2ZjaG93bmF0ID0g
MjYwDQogICAgK2NvbnN0IF9FQkFEUiA9IDUzDQogICAgK2NvbnN0IF9SRUdfUlNQID0gMTUNCiAg
ICArY29uc3QgX1NJR0NITEQgPSAxNw0KICAgICtjb25zdCBfX19OUl9mb3JrID0gNTcNCiAgICAr
Y29uc3QgX0FGX0ZJTEUgPSBfUEZfRklMRQ0KICAgICtjb25zdCBfQ0xPQ0tfUkVBTFRJTUVfQUxB
Uk0gPSA4DQogICAgK2NvbnN0IF9fU0NfVEhSRUFEX1NUQUNLX01JTiA9IDc1DQogICAgK2NvbnN0
IF9JRkxBX1ZYTEFOX1BPUlQgPSAxNQ0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfVkFMSURBVElP
TiA9IDEzDQogICAgK2NvbnN0IF9JRkxBX0JPTkRfQVJQX0FMTF9UQVJHRVRTID0gMTANCiAgICAr
Y29uc3QgX19YT1BFTl9VTklYID0gMQ0KICAgICtjb25zdCBfRUhPU1RVTlJFQUNIID0gMTEzDQog
ICAgK2NvbnN0IF9STElNX1NBVkVEX01BWCA9IF9STElNX0lORklOSVRZDQogICAgK2NvbnN0IF9T
X0JMS1NJWkUgPSA1MTINCiAgICArY29uc3QgX19fdW5peCA9IDENCiAgICArY29uc3QgX19fTlJf
ZmNobW9kID0gOTENCiAgICArY29uc3QgX1NDTm9MRUFTVDMyID0gIm8iDQogICAgK2NvbnN0IF9F
TDNSU1QgPSA0Nw0KICAgICtjb25zdCBfRkZJX0ZBU1RDQUxMID0gNA0KICAgICtjb25zdCBfSUZM
QV9WRl9TVEFUU19UWF9CWVRFUyA9IDMNCiAgICArY29uc3QgX1RDU0VUWEYgPSAweDU0MzQNCiAg
ICArY29uc3QgX0lGTEFfUEhZU19QT1JUX05BTUUgPSAzOA0KICAgICtjb25zdCBfSU5UX0ZBU1Q4
X1dJRFRIID0gOA0KICAgICtjb25zdCBfQ1JUU0NUUyA9IDAyMDAwMDAwMDAwMA0KICAgICtjb25z
dCBfX19JRkxBX01BQ1NFQ19NQVggPSAxNQ0KICAgICtjb25zdCBfSUZMQV9ORVRfTlNfUElEID0g
MTkNCiAgICArY29uc3QgX1NJT0NTSUZIV0FERFIgPSAweDg5MjQNCiAgICArY29uc3QgX19fU0lf
QVNZTkNJT19BRlRFUl9TSUdJTyA9IDENCiAgICArY29uc3QgX1RJT0NWSEFOR1VQID0gMHg1NDM3
DQogICAgK2NvbnN0IF9BVEZfTkVUTUFTSyA9IDB4MjANCiAgICArY29uc3QgX1RDU0VUWFcgPSAw
eDU0MzUNCiAgICArY29uc3QgX1NPTF9ORkMgPSAyODANCiAgICArY29uc3QgX19fU0laRU9GX0lO
VDEyOF9fID0gMTYNCiAgICArY29uc3QgX19fU1REQ19VVEZfMTZfXyA9IDENCiAgICArY29uc3Qg
X1RJT0NQS1RfRE9TVE9QID0gMzINCiAgICArY29uc3QgX0RUX0xOSyA9IDEwDQogICAgK2NvbnN0
IF9fX0ZMVDMyX01JTl8xMF9FWFBfXyA9ICgtMzcpDQogICAgK2NvbnN0IF9FTk9MQ0sgPSAzNw0K
ICAgICtjb25zdCBfU1lTX3NjaGVkX3JyX2dldF9pbnRlcnZhbCA9IF9fX05SX3NjaGVkX3JyX2dl
dF9pbnRlcnZhbA0KICAgICtjb25zdCBfQUZfUlhSUEMgPSBfUEZfUlhSUEMNCiAgICArY29uc3Qg
X1BSX0dFVF9VTkFMSUdOID0gNQ0KICAgICtjb25zdCBfSU5fQ0xBU1NCX0hPU1QgPSAoMHhmZmZm
ZmZmZiAmIF5fSU5fQ0xBU1NCX05FVCkNCiAgICArY29uc3QgX1RDQV9GTEFHX0xBUkdFX0RVTVBf
T04gPSAoMSA8PCAwKQ0KICAgICtjb25zdCBfX19OUl9ta2RpciA9IDgzDQogICAgK2NvbnN0IF9f
U0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TID0gNjgNCiAgICArY29uc3QgX05EVFBBX01DQVNUX1JF
UFJPQkVTID0gMTcNCiAgICArY29uc3QgX0lQVjZfUlhEU1RPUFRTID0gX0lQVjZfRFNUT1BUUw0K
ICAgICtjb25zdCBfX19OUl9mYWNjZXNzYXQgPSAyNjkNCiAgICArY29uc3QgX0VUSF9QX01WUlAg
PSAweDg4RjUNCiAgICArY29uc3QgX19TQ19YT1BFTl9MRUdBQ1kgPSAxMjkNCiAgICArY29uc3Qg
X1BBR0VfU0laRSA9ICgxIDw8IF9QQUdFX1NISUZUKQ0KICAgICtjb25zdCBfUlRGX05PTkVYVEhP
UCA9IDB4MDAyMDAwMDANCiAgICArY29uc3QgX19CSVRTX1dDSEFSX0ggPSAxDQogICAgK2NvbnN0
IF9QUl9TRVRfUERFQVRIU0lHID0gMQ0KICAgICtjb25zdCBfU1lTX2lvcGVybSA9IF9fX05SX2lv
cGVybQ0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y3X0lMUDMyX09GRjMyX0xJQlMgPSAxMTM0DQog
ICAgK2NvbnN0IF9JRkxBX1ZGX1ZMQU5fSU5GT19VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9NU19O
T0VYRUMgPSA4DQogICAgK2NvbnN0IF9WVElNRSA9IDUNCiAgICArY29uc3QgX19fSU5UX0ZBU1Q2
NF9XSURUSF9fID0gNjQNCiAgICArY29uc3QgX0lQUE9SVF9ORVRTVEFUID0gMTUNCiAgICArY29u
c3QgX1NDTm8xNiA9ICJobyINCiAgICArY29uc3QgX05fSERMQyA9IDEzDQogICAgK2NvbnN0IF9Q
T1JUX1ZEUF9SRVNQT05TRV9WVElEX1ZJT0xBVElPTiA9IDQNCiAgICArY29uc3QgX19TQ19USFJF
QURfQVRUUl9TVEFDS0FERFIgPSA3Nw0KICAgICtjb25zdCBfRVRIX1BfSVBYID0gMHg4MTM3DQog
ICAgK2NvbnN0IF9QUkl1TEVBU1QzMiA9ICJ1Ig0KICAgICtjb25zdCBfSUZMQV9NQUNWTEFOX01B
Q0FERFJfTU9ERSA9IDMNCiAgICArY29uc3QgX0ZTX0ZMX1VTRVJfTU9ESUZJQUJMRSA9IDB4MDAw
MzgwRkYNCiAgICArY29uc3QgX19fR0NDX0FUT01JQ19URVNUX0FORF9TRVRfVFJVRVZBTCA9IDEN
CiAgICArY29uc3QgX19fTlJfcmVuYW1lYXQgPSAyNjQNCiAgICArY29uc3QgX01TR19ET05UUk9V
VEUgPSA0DQogICAgK2NvbnN0IF9USU9DU0lHX3ZhbCA9IDEwNzQwMjU1MjYNCiAgICArY29uc3Qg
X19QQVRIX05TU1dJVENIX0NPTkYgPSAiL2V0Yy9uc3N3aXRjaC5jb25mIg0KICAgICtjb25zdCBf
U1lTX2FjY2VwdCA9IF9fX05SX2FjY2VwdA0KICAgICtjb25zdCBfUEFDS0VUX1JFU0VSVkUgPSAx
Mg0KICAgICtjb25zdCBfU1RBX1BQU0pJVFRFUiA9IDB4MDIwMA0KICAgICtjb25zdCBfX19OUl9z
aWduYWxmZCA9IDI4Mg0KICAgICtjb25zdCBfU09fUEVFUlNFQyA9IDMxDQogICAgK2NvbnN0IF9f
X0lOVF9XSURUSF9fID0gMzINCiAgICArY29uc3QgX19YT1BFTl9JT1ZfTUFYID0gX19QT1NJWF9V
SU9fTUFYSU9WDQogICAgK2NvbnN0IF9OVEZfVVNFID0gMHgwMQ0KICAgICtjb25zdCBfX19CSUdf
RU5ESUFOID0gNDMyMQ0KICAgICtjb25zdCBfVUlOVDE2X1dJRFRIID0gMTYNCiAgICArY29uc3Qg
X1NFR1ZfQUNDRVJSID0gMg0KICAgICtjb25zdCBfU0NObzMyID0gIm8iDQogICAgK2NvbnN0IF9f
X05SX3JlY3Zmcm9tID0gNDUNCiAgICArY29uc3QgX1RDUF9DT09LSUVfSU5fQUxXQVlTID0gKDEg
PDwgMCkNCiAgICArY29uc3QgX1NLRl9BRF9QQVlfT0ZGU0VUID0gNTINCiAgICArY29uc3QgX1NZ
U19yZWFkdiA9IF9fX05SX3JlYWR2DQogICAgK2NvbnN0IF9QRl9SRFMgPSAyMQ0KICAgICtjb25z
dCBfSVBWNl9EU1RPUFRTID0gNTkNCiAgICArY29uc3QgX19TWVNfUFRSQUNFX0ggPSAxDQogICAg
K2NvbnN0IF9SVE1fRl9OT1RJRlkgPSAweDEwMA0KICAgICtjb25zdCBfVENQT1BUX1NBQ0sgPSA1
DQogICAgK2NvbnN0IF9UQ1BfTUQ1U0lHX0VYVCA9IDMyDQogICAgK2NvbnN0IF9JRkZfQlJPQURD
QVNUID0gMg0KICAgICtjb25zdCBfSVBPUFRfU0FUSUQgPSAxMzYNCiAgICArY29uc3QgX1RJT0NN
QklDID0gMHg1NDE3DQogICAgK2NvbnN0IF9GU19JTkRFWF9GTCA9IDB4MDAwMDEwMDANCiAgICAr
Y29uc3QgX1NZU191bmFtZSA9IF9fX05SX3VuYW1lDQogICAgK2NvbnN0IF9NT0RfVElNRUNPTlNU
ID0gX0FESl9USU1FQ09OU1QNCiAgICArY29uc3QgX01DQVNUX0lOQ0xVREUgPSAxDQogICAgK2Nv
bnN0IF9JRkZfVFVOX0VYQ0wgPSAweDgwMDANCiAgICArY29uc3QgX1BSX1RBU0tfUEVSRl9FVkVO
VFNfRElTQUJMRSA9IDMxDQogICAgK2NvbnN0IF9JUF9NVFVfRElTQ09WRVIgPSAxMA0KICAgICtj
b25zdCBfSUZMQV9WWExBTl9QT1JUX1JBTkdFID0gMTANCiAgICArY29uc3QgX19fTlJfc2NoZWRf
c2V0YXR0ciA9IDMxNA0KICAgICtjb25zdCBfU1lTX3NldHByaW9yaXR5ID0gX19fTlJfc2V0cHJp
b3JpdHkNCiAgICArY29uc3QgX0VTVFJQSVBFID0gODYNCiAgICArY29uc3QgX1JURl9JUlRUID0g
MHgwMTAwDQogICAgK2NvbnN0IF9JRkxBX0VWRU5UX05PTkUgPSAwDQogICAgK2NvbnN0IF9UQ0Ff
T1BUSU9OUyA9IDINCiAgICArY29uc3QgX1NFRUtfREFUQSA9IDMNCiAgICArY29uc3QgX0ZfT1dO
RVJfR0lEID0gMg0KICAgICtjb25zdCBfRU5PTElOSyA9IDY3DQogICAgK2NvbnN0IF9NQUNWTEFO
X01PREVfVkVQQSA9IDINCiAgICArY29uc3QgX0lGTEFfQlJfVkxBTl9ERUZBVUxUX1BWSUQgPSAz
OQ0KICAgICtjb25zdCBfVlNXVEMgPSA3DQogICAgK2NvbnN0IF9TQV9JTlRFUlJVUFQgPSAweDIw
MDAwMDAwDQogICAgK2NvbnN0IF9fX0RCTF9IQVNfUVVJRVRfTkFOX18gPSAxDQogICAgK2NvbnN0
IF9BUlBPUF9JblJFUExZID0gOQ0KICAgICtjb25zdCBfU1lTX3NlbmRtc2cgPSBfX19OUl9zZW5k
bXNnDQogICAgK2NvbnN0IF9SVE1TR19ERUxST1VURSA9IDB4MjINCiAgICArY29uc3QgX1RJT0NH
U0lEID0gMHg1NDI5DQogICAgK2NvbnN0IF9fUE9TSVhfTElOS19NQVggPSA4DQogICAgK2NvbnN0
IF9OX01PVVNFID0gMg0KICAgICtjb25zdCBfU1lTX3JlYWRsaW5rID0gX19fTlJfcmVhZGxpbmsN
CiAgICArY29uc3QgX19fTlJfZmNoZGlyID0gODENCiAgICArY29uc3QgX19fSU5UX0ZBU1Q2NF9N
QVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfUFRSQUNFX1NFVFJFR1NFVCA9
IDE2OTAxDQogICAgK2NvbnN0IF9JTl9OT05CTE9DSyA9IDIwNDgNCiAgICArY29uc3QgX19fTlJf
aW5vdGlmeV9pbml0MSA9IDI5NA0KICAgICtjb25zdCBfRkZJX1RZUEVfVk9JRCA9IDANCiAgICAr
Y29uc3QgX0ZEX0NMT0VYRUMgPSAxDQogICAgK2NvbnN0IF9fX05SX3NldHNvY2tvcHQgPSA1NA0K
ICAgICtjb25zdCBfRUNIT05MID0gMDAwMDEwMA0KICAgICtjb25zdCBfX19NQVhfQkFVRCA9IF9C
NDAwMDAwMA0KICAgICtjb25zdCBfRVRIX01BWF9NVFUgPSAweEZGRkYNCiAgICArY29uc3QgX1BB
Q0tFVF9RRElTQ19CWVBBU1MgPSAyMA0KICAgICtjb25zdCBfQ0xPTkVfTkVXVVRTID0gMHgwNDAw
MDAwMA0KICAgICtjb25zdCBfU1lTX3NlbXRpbWVkb3AgPSBfX19OUl9zZW10aW1lZG9wDQogICAg
K2NvbnN0IF9FVEhfUF9QSE9ORVQgPSAweDAwRjUNCiAgICArY29uc3QgX0lGTEFfT0ZGTE9BRF9Y
U1RBVFNfQ1BVX0hJVCA9IDENCiAgICArY29uc3QgX19QV0RfSCA9IDENCiAgICArY29uc3QgX19Q
T1NJWF9TSEVMTCA9IDENCiAgICArY29uc3QgX0ZGSV9TSVpFT0ZfSkFWQV9SQVcgPSBfRkZJX1NJ
WkVPRl9BUkcNCiAgICArY29uc3QgX1BSX1NQRUNfRk9SQ0VfRElTQUJMRSA9ICgxIDw8IDMpDQog
ICAgK2NvbnN0IF9OREFfU1JDX1ZOSSA9IDExDQogICAgK2NvbnN0IF9fX1dDSEFSX01JTiA9IF9f
X1dDSEFSX01JTl9fDQogICAgK2NvbnN0IF9ORVREQl9JTlRFUk5BTCA9IC0xDQogICAgK2NvbnN0
IF9fX1VTRV9NSVNDID0gMQ0KICAgICtjb25zdCBfUFJJT19NQVggPSAyMA0KICAgICtjb25zdCBf
X19zdHJ1Y3RfdG1fZGVmaW5lZCA9IDENCiAgICArY29uc3QgX0VUSEVSVFlQRV9BUlAgPSAweDA4
MDYNCiAgICArY29uc3QgX19QT1NJWF9USU1FT1VUUyA9IDIwMDgwOQ0KICAgICtjb25zdCBfSUZM
QV9WWExBTl9UVExfSU5IRVJJVCA9IDI4DQogICAgK2NvbnN0IF9TUExJQ0VfRl9HSUZUID0gOA0K
ICAgICtjb25zdCBfX19CWVRFX09SREVSX18gPSBfX19PUkRFUl9MSVRUTEVfRU5ESUFOX18NCiAg
ICArY29uc3QgX19fUlROTEdSUF9NQVggPSAzMg0KICAgICtjb25zdCBfX1NDX1NBVkVEX0lEUyA9
IDgNCiAgICArY29uc3QgX0xMT05HX1dJRFRIID0gNjQNCiAgICArY29uc3QgX1NZU19zZXRncm91
cHMgPSBfX19OUl9zZXRncm91cHMNCiAgICArY29uc3QgX1NDTV9USU1FU1RBTVAgPSBfU09fVElN
RVNUQU1QDQogICAgK2NvbnN0IF9QUklvMzIgPSAibyINCiAgICArY29uc3QgX0FESl9TRVRPRkZT
RVQgPSAweDAxMDANCiAgICArY29uc3QgX1BSSVhMRUFTVDE2ID0gIlgiDQogICAgK2NvbnN0IF9U
SF9GSU4gPSAweDAxDQogICAgK2NvbnN0IF9VQ0hBUl9XSURUSCA9IDgNCiAgICArY29uc3QgX1JU
TV9HRVRBRERSTEFCRUwgPSA3NA0KICAgICtjb25zdCBfX19TSUdSVE1BWCA9IDY0DQogICAgK2Nv
bnN0IF9FUkVTVEFSVCA9IDg1DQogICAgK2NvbnN0IF9fU0NfVjdfSUxQMzJfT0ZGQklHID0gMjM4
DQogICAgK2NvbnN0IF9fUENfQVNZTkNfSU8gPSAxMA0KICAgICtjb25zdCBfX1NUUklOR1NfSCA9
IDENCiAgICArY29uc3QgX19fdW5peF9fID0gMQ0KICAgICtjb25zdCBfX19lcnJvcl90X2RlZmlu
ZWQgPSAxDQogICAgK2NvbnN0IF9fU1NfU0laRSA9IDEyOA0KICAgICtjb25zdCBfTkdSRUcgPSBf
X19OR1JFRw0KICAgICtjb25zdCBfU1RBX0NMT0NLRVJSID0gMHgxMDAwDQogICAgK2NvbnN0IF9f
X0ZMVDY0WF9FUFNJTE9OX18gPSAxLjENCiAgICArY29uc3QgX1NUQVRYX01USU1FID0gMHgwMDQw
DQogICAgK2NvbnN0IF9CUEZfUkVUID0gMHgwNg0KICAgICtjb25zdCBfSEFWRV9TVFJFUlJPUl9S
ID0gMQ0KICAgICtjb25zdCBfU1lTX3NlbmRtbXNnID0gX19fTlJfc2VuZG1tc2cNCiAgICArY29u
c3QgX1JUTUdSUF9JUFY0X1JVTEUgPSAweDgwDQogICAgK2NvbnN0IF9TWVNfc2NoZWRfc2V0c2No
ZWR1bGVyID0gX19fTlJfc2NoZWRfc2V0c2NoZWR1bGVyDQogICAgK2NvbnN0IF9OREFfQ0FDSEVJ
TkZPID0gMw0KICAgICtjb25zdCBfQ0xPTkVfVk0gPSAweDAwMDAwMTAwDQogICAgK2NvbnN0IF9G
SUxFX0RFRFVQRV9SQU5HRV9ESUZGRVJTID0gMQ0KICAgICtjb25zdCBfX0lPQ19ESVJCSVRTID0g
Mg0KICAgICtjb25zdCBfV1VOVFJBQ0VEID0gMg0KICAgICtjb25zdCBfUFJfTUNFX0tJTExfU0VU
ID0gMQ0KICAgICtjb25zdCBfU0tGX0FEX1FVRVVFID0gMjQNCiAgICArY29uc3QgX19fTlJfbGNo
b3duID0gOTQNCiAgICArY29uc3QgX1BSX1NFVF9NTV9TVEFSVF9TVEFDSyA9IDUNCiAgICArY29u
c3QgX19fRkxPQVRfV09SRF9PUkRFUl9fID0gX19fT1JERVJfTElUVExFX0VORElBTl9fDQogICAg
K2NvbnN0IF9STU5FVF9GTEFHU19JTkdSRVNTX01BUF9DT01NQU5EUyA9ICgxIDw8IDEpDQogICAg
K2NvbnN0IF9fUE9TSVhfU0lHUVVFVUVfTUFYID0gMzINCiAgICArY29uc3QgX19TWVNfRVBPTExf
SCA9IDENCiAgICArY29uc3QgX0NIQVJfV0lEVEggPSA4DQogICAgK2NvbnN0IF9fX1NJWkVPRl9T
RU1fVCA9IDMyDQogICAgK2NvbnN0IF9YQVRUUl9TSVpFX01BWCA9IDY1NTM2DQogICAgK2NvbnN0
IF9fX05SX21vZGlmeV9sZHQgPSAxNTQNCiAgICArY29uc3QgX1NZU19lcG9sbF9jdGwgPSBfX19O
Ul9lcG9sbF9jdGwNCiAgICArY29uc3QgX1RDUElfT1BUX1dTQ0FMRSA9IDQNCiAgICArY29uc3Qg
X19TQ19MRVZFTDFfSUNBQ0hFX0FTU09DID0gMTg2DQogICAgK2NvbnN0IF9JUFY2X1JUSERSX0xP
T1NFID0gMA0KICAgICtjb25zdCBfU1lTX3NjaGVkX2dldF9wcmlvcml0eV9tYXggPSBfX19OUl9z
Y2hlZF9nZXRfcHJpb3JpdHlfbWF4DQogICAgK2NvbnN0IF9JUFBPUlRfQklGRlVEUCA9IDUxMg0K
ICAgICtjb25zdCBfRklPTlJFQUQgPSAweDU0MUINCiAgICArY29uc3QgX01MRF9MSVNURU5FUl9S
RURVQ1RJT04gPSAxMzINCiAgICArY29uc3QgX0NYODZfQ0NSNSA9IDB4ZTkNCiAgICArY29uc3Qg
X1RJT0NTRVJHV0lMRCA9IDB4NTQ1NA0KICAgICtjb25zdCBfX19OUl9lcG9sbF9jdGxfb2xkID0g
MjE0DQogICAgK2NvbnN0IF9FS0VZUkVKRUNURUQgPSAxMjkNCiAgICArY29uc3QgX1g4Nl9DUjBf
Q0RfQklUID0gMzANCiAgICArY29uc3QgX01BUF9OT05CTE9DSyA9IDB4MTAwMDANCiAgICArY29u
c3QgX1NZU19zeW5jZnMgPSBfX19OUl9zeW5jZnMNCiAgICArY29uc3QgX1RBQkRMWSA9IDAwMTQw
MDANCiAgICArY29uc3QgX19fR05VQ19NSU5PUl9fID0gMw0KICAgICtjb25zdCBfSEFWRV9TRU1B
UEhPUkVfSCA9IDENCiAgICArY29uc3QgX1NJR19VTkJMT0NLID0gMQ0KICAgICtjb25zdCBfX19O
Ul9wcmN0bCA9IDE1Nw0KICAgICtjb25zdCBfX19OUl9wcm9jZXNzX3ZtX3dyaXRldiA9IDMxMQ0K
ICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9TVEFSVFVQX1FVRVJZX0NOVCA9IDI5DQogICAgK2Nv
bnN0IF9JUFBPUlRfRElTQ0FSRCA9IDkNCiAgICArY29uc3QgX05CUEcgPSBfUEFHRV9TSVpFDQog
ICAgK2NvbnN0IF9fQ1NfWEJTNV9MUDY0X09GRjY0X0NGTEFHUyA9IDExMDgNCiAgICArY29uc3Qg
X1NZU19pb2N0bCA9IF9fX05SX2lvY3RsDQogICAgK2NvbnN0IF9TWVNfcG9sbCA9IF9fX05SX3Bv
bGwNCiAgICArY29uc3QgX1JNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NLU1VNVjQgPSAoMSA8PCAy
KQ0KICAgICtjb25zdCBfSVBWNl8yMjkyUEtUT1BUSU9OUyA9IDYNCiAgICArY29uc3QgX1RJT0NN
X0NUUyA9IDB4MDIwDQogICAgK2NvbnN0IF9QVFJESUZGX01BWCA9ICg5MjIzMzcyMDM2ODU0Nzc1
ODA3KQ0KICAgICtjb25zdCBfSUZMQV9TVEFUU19BRl9TUEVDID0gNQ0KICAgICtjb25zdCBfSUZM
QV9UVU5fTVVMVElfUVVFVUUgPSA3DQogICAgK2NvbnN0IF9SVEFfUEFEID0gMjQNCiAgICArY29u
c3QgX1NZU19pb3BsID0gX19fTlJfaW9wbA0KICAgICtjb25zdCBfTkVUX01BSk9SID0gMzYNCiAg
ICArY29uc3QgX1NZU19tc2dzbmQgPSBfX19OUl9tc2dzbmQNCiAgICArY29uc3QgX19fU19JRVhF
QyA9IDAxMDANCiAgICArY29uc3QgX19TQ19ERUxBWVRJTUVSX01BWCA9IDI2DQogICAgK2NvbnN0
IF9TWVNfZXhpdCA9IF9fX05SX2V4aXQNCiAgICArY29uc3QgX1NZU19yZXN0YXJ0X3N5c2NhbGwg
PSBfX19OUl9yZXN0YXJ0X3N5c2NhbGwNCiAgICArY29uc3QgX1BSSVhMRUFTVDMyID0gIlgiDQog
ICAgK2NvbnN0IF9JRkxBX0hTUl9TVVBFUlZJU0lPTl9BRERSID0gNA0KICAgICtjb25zdCBfU0lH
U1lTID0gMzENCiAgICArY29uc3QgX0ZTX1hGTEFHX0ZJTEVTVFJFQU0gPSAweDAwMDA0MDAwDQog
ICAgK2NvbnN0IF9JUFBST1RPX0lDTVBWNiA9IDU4DQogICAgK2NvbnN0IF9FVUNMRUFOID0gMTE3
DQogICAgK2NvbnN0IF9QUl9TRVRfRlBFTVUgPSAxMA0KICAgICtjb25zdCBfRVRIX1BfQVRBTEsg
PSAweDgwOUINCiAgICArY29uc3QgX1BGX0lCID0gMjcNCiAgICArY29uc3QgX19fVVNFX1BPU0lY
MTk5NTA2ID0gMQ0KICAgICtjb25zdCBfU1lTX25hbm9zbGVlcCA9IF9fX05SX25hbm9zbGVlcA0K
ICAgICtjb25zdCBfSVBfRFJPUF9NRU1CRVJTSElQID0gMzYNCiAgICArY29uc3QgX1dJTlRfTUFY
ID0gKDQyOTQ5NjcyOTUpDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1JY
ID0gMjANCiAgICArY29uc3QgX0VDT05OQUJPUlRFRCA9IDEwMw0KICAgICtjb25zdCBfUFJfVU5B
TElHTl9OT1BSSU5UID0gMQ0KICAgICtjb25zdCBfRlNfRElSU1lOQ19GTCA9IDB4MDAwMTAwMDAN
CiAgICArY29uc3QgX1NJT0NERVZQUklWQVRFID0gMHg4OUYwDQogICAgK2NvbnN0IF9fU0NfVElN
RU9VVFMgPSAxNjQNCiAgICArY29uc3QgX19fSU5UX0xFQVNUMzJfTUFYX18gPSAweDdmZmZmZmZm
DQogICAgK2NvbnN0IF9JTl9DTE9TRSA9IChfSU5fQ0xPU0VfV1JJVEUgfCBfSU5fQ0xPU0VfTk9X
UklURSkNCiAgICArY29uc3QgX1JUTV9ORVdOU0lEID0gODgNCiAgICArY29uc3QgX19fTlJfaW9f
cGdldGV2ZW50cyA9IDMzMw0KICAgICtjb25zdCBfWDg2X0VGTEFHU19URl9CSVQgPSA4DQogICAg
K2NvbnN0IF9fX05SX3VubGluayA9IDg3DQogICAgK2NvbnN0IF9JUFRPU19QUkVDX0lNTUVESUFU
RSA9IF9JUFRPU19DTEFTU19DUzINCiAgICArY29uc3QgX1VJTlRfTEVBU1QxNl9NQVggPSAoNjU1
MzUpDQogICAgK2NvbnN0IF9fX05SX2dldGV1aWQgPSAxMDcNCiAgICArY29uc3QgX1NfSVdHUlAg
PSAoX1NfSVdVU1IgPj4gMykNCiAgICArY29uc3QgX19fUElFX18gPSAyDQogICAgK2NvbnN0IF9U
SU9DUEtUX0RBVEEgPSAwDQogICAgK2NvbnN0IF9fQ1NfVjZfV0lEVEhfUkVTVFJJQ1RFRF9FTlZT
ID0gMQ0KICAgICtjb25zdCBfRkZJX1RZUEVfRE9VQkxFID0gMw0KICAgICtjb25zdCBfUlRDRl9E
SVJFQ1RTUkMgPSAweDA0MDAwMDAwDQogICAgK2NvbnN0IF9fX05SX3N5bmNfZmlsZV9yYW5nZSA9
IDI3Nw0KICAgICtjb25zdCBfSUZMQV9QT1JUX1ZTSV9UWVBFID0gMw0KICAgICtjb25zdCBfQURK
X1RBSSA9IDB4MDA4MA0KICAgICtjb25zdCBfTkRVU0VST1BUX1VOU1BFQyA9IDANCiAgICArY29u
c3QgX19VVFNOQU1FX0RPTUFJTl9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RIDQogICAgK2NvbnN0
IF9OUl9GSUxFID0gODE5Mg0KICAgICtjb25zdCBfRl9HRVRfUldfSElOVCA9IDEwMzUNCiAgICAr
Y29uc3QgX1BGX1BQUE9YID0gMjQNCiAgICArY29uc3QgX1NPX1BFRUtfT0ZGID0gNDINCiAgICAr
Y29uc3QgX1NPX1JDVkJVRiA9IDgNCiAgICArY29uc3QgX19TQ19YQlM1X0lMUDMyX09GRkJJRyA9
IDEyNg0KICAgICtjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9DT05EQVRUUl9UID0gNA0KICAgICtj
b25zdCBfTl9IQ0kgPSAxNQ0KICAgICtjb25zdCBfUFJJdUxFQVNUOCA9ICJ1Ig0KICAgICtjb25z
dCBfUlRBWF9TU1RIUkVTSCA9IDYNCiAgICArY29uc3QgX0lGRl9NVUxUSV9RVUVVRSA9IDB4MDEw
MA0KICAgICtjb25zdCBfUlRfQ0xBU1NfTE9DQUwgPSAyNTUNCiAgICArY29uc3QgX0ZJT0dFVE9X
TiA9IDB4ODkwMw0KICAgICtjb25zdCBfX19OUl9zaG1nZXQgPSAyOQ0KICAgICtjb25zdCBfWDg2
X0VGTEFHU19ERl9CSVQgPSAxMA0KICAgICtjb25zdCBfU09fU0VMRUNUX0VSUl9RVUVVRSA9IDQ1
DQogICAgK2NvbnN0IF9TT0NLX05PTkJMT0NLID0gMjA0OA0KICAgICtjb25zdCBfVUlOVF9MRUFT
VDMyX01BWCA9ICg0Mjk0OTY3Mjk1KQ0KICAgICtjb25zdCBfU0lHWEZTWiA9IDI1DQogICAgK2Nv
bnN0IF9JRkxBX1BST1RJTkZPID0gMTINCiAgICArY29uc3QgX19fTlJfbXVubG9ja2FsbCA9IDE1
Mg0KICAgICtjb25zdCBfSVBfTVVMVElDQVNUX0FMTCA9IDQ5DQogICAgK2NvbnN0IF9FQ0hPID0g
MDAwMDAxMA0KICAgICtjb25zdCBfQVJQSFJEX0VFVEhFUiA9IDINCiAgICArY29uc3QgX0NMRF9D
T05USU5VRUQgPSA2DQogICAgK2NvbnN0IF9FVEhFUlRZUEVfQVQgPSAweDgwOUINCiAgICArY29u
c3QgX1NDSEFSX01BWCA9IF9fX1NDSEFSX01BWF9fDQogICAgK2NvbnN0IF9JRkxBX01BQ1NFQ19T
Q0IgPSAxMQ0KICAgICtjb25zdCBfX19VQVBJX0RFRl9FVEhIRFIgPSAxDQogICAgK2NvbnN0IF9J
RkxBX0JSX05GX0NBTExfQVJQVEFCTEVTID0gMzgNCiAgICArY29uc3QgX05EVFBBX1JFQUNIQUJM
RV9USU1FID0gMw0KICAgICtjb25zdCBfVENQX1JFUEFJUl9XSU5ET1cgPSAyOQ0KICAgICtjb25z
dCBfX19JRkxBX1RVTl9NQVggPSAxMA0KICAgICtjb25zdCBfSEFWRV9BU19DT01EQVRfR0FTID0g
MQ0KICAgICtjb25zdCBfTkVUTElOS19ETlJUTVNHID0gMTQNCiAgICArY29uc3QgX1NZU19tcmVt
YXAgPSBfX19OUl9tcmVtYXANCiAgICArY29uc3QgX1g4Nl9DUjRfUEdFX0JJVCA9IDcNCiAgICAr
Y29uc3QgX0lGQV9BRERSRVNTID0gMQ0KICAgICtjb25zdCBfU0lPQ1NJRkRTVEFERFIgPSAweDg5
MTgNCiAgICArY29uc3QgX1ZSRVBSSU5UID0gMTINCiAgICArY29uc3QgX0VQT0xMX0NUTF9ERUwg
PSAyDQogICAgK2NvbnN0IF9JRkxBX1FESVNDID0gNg0KICAgICtjb25zdCBfX19FTEZfXyA9IDEN
CiAgICArY29uc3QgX0lOX09QRU4gPSAweDAwMDAwMDIwDQogICAgK2NvbnN0IF9FVEhfUF9UU04g
PSAweDIyRjANCiAgICArY29uc3QgX0VUSF9QX0NPTlRST0wgPSAweDAwMTYNCiAgICArY29uc3Qg
X0lGTEFfQk9ORF9BRF9JTkZPX05VTV9QT1JUUyA9IDINCiAgICArY29uc3QgX0RUX0ZJRk8gPSAx
DQogICAgK2NvbnN0IF9TQ05pRkFTVDggPSAiaGhpIg0KICAgICtjb25zdCBfVElPQ1NFVEQgPSAw
eDU0MjMNCiAgICArY29uc3QgX19DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUyA9IDExMDMN
CiAgICArY29uc3QgX0lQT1BUX09GRlNFVCA9IDINCiAgICArY29uc3QgX19fTlJfZnN0YXRmcyA9
IDEzOA0KICAgICtjb25zdCBfX19OUl9zZXRfdGhyZWFkX2FyZWEgPSAyMDUNCiAgICArY29uc3Qg
X0lGTEFfQk9ORF9BUlBfSU5URVJWQUwgPSA3DQogICAgK2NvbnN0IF9QUl9TRVRfTU1fU1RBUlRf
REFUQSA9IDMNCiAgICArY29uc3QgX0VUSF9QX0VSU1BBTiA9IDB4ODhCRQ0KICAgICtjb25zdCBf
U1lTX3N5c2luZm8gPSBfX19OUl9zeXNpbmZvDQogICAgK2NvbnN0IF9TWVNfc2V0c2lkID0gX19f
TlJfc2V0c2lkDQogICAgK2NvbnN0IF9PRkRFTCA9IDAwMDAyMDANCiAgICArY29uc3QgX19QQ19Q
UklPX0lPID0gMTENCiAgICArY29uc3QgX19fRkxUX01JTl9fID0gMS4xDQogICAgK2NvbnN0IF9f
X05SX2NvcHlfZmlsZV9yYW5nZSA9IDMyNg0KICAgICtjb25zdCBfQ0xPTkVfTkVXTkVUID0gMHg0
MDAwMDAwMA0KICAgICtjb25zdCBfUlRBX09JRiA9IDQNCiAgICArY29uc3QgX1NJX1NJR0lPID0g
LTUNCiAgICArY29uc3QgX19YT1BFTl9SRUFMVElNRSA9IDENCiAgICArY29uc3QgX19fTlJfc2Vj
Y29tcCA9IDMxNw0KICAgICtjb25zdCBfSUZMQV9DQVJSSUVSX1VQX0NPVU5UID0gNDcNCiAgICAr
Y29uc3QgX1RDUF9VTFAgPSAzMQ0KICAgICtjb25zdCBfX1NDX1RJTUVSUyA9IDExDQogICAgK2Nv
bnN0IF9QUkl1MTYgPSAidSINCiAgICArY29uc3QgX05EX09QVF9TT1VSQ0VfTElOS0FERFIgPSAx
DQogICAgK2NvbnN0IF9JRkFfRl9ERVBSRUNBVEVEID0gMHgyMA0KICAgICtjb25zdCBfUlROSF9G
X0RFQUQgPSAxDQogICAgK2NvbnN0IF9GRklfVFlQRV9GTE9BVCA9IDINCiAgICArY29uc3QgX1ZF
UkFTRSA9IDINCiAgICArY29uc3QgX1JUX0NMQVNTX01BSU4gPSAyNTQNCiAgICArY29uc3QgX0VO
T0FOTyA9IDU1DQogICAgK2NvbnN0IF9SVFBST1RfTVJUID0gMTANCiAgICArY29uc3QgX19CSVRT
X1RJTUVYX0ggPSAxDQogICAgK2NvbnN0IF9JRkxBX1hEUF9TS0JfUFJPR19JRCA9IDYNCiAgICAr
Y29uc3QgX19TQ19OTF9BUkdNQVggPSAxMTkNCiAgICArY29uc3QgX0lGQV9NVUxUSUNBU1QgPSA3
DQogICAgK2NvbnN0IF9JUFBST1RPX0JFRVRQSCA9IDk0DQogICAgK2NvbnN0IF9JUE9QVF9TRUNV
Ul9UT1BTRUNSRVQgPSAweDZiYzUNCiAgICArY29uc3QgX19fU19JV1JJVEUgPSAwMjAwDQogICAg
K2NvbnN0IF9FTk9UQ09OTiA9IDEwNw0KICAgICtjb25zdCBfUFRSQUNFX1NFVEZQWFJFR1MgPSAx
OQ0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y3X0xQQklHX09GRkJJR19MREZMQUdTID0gMTE0NQ0K
ICAgICtjb25zdCBfX19TX0lGTVQgPSAwMTcwMDAwDQogICAgK2NvbnN0IF9JUE9JQl9NT0RFX0RB
VEFHUkFNID0gMA0KICAgICtjb25zdCBfX19GTFQ2NFhfREVDSU1BTF9ESUdfXyA9IDIxDQogICAg
K2NvbnN0IF9fU0NfUEFHRVNJWkUgPSAzMA0KICAgICtjb25zdCBfQVJQSFJEX0NJU0NPID0gNTEz
DQogICAgK2NvbnN0IF9fX0lGTEFfQlJfTUFYID0gNDUNCiAgICArY29uc3QgX0lQUFJPVE9fRFNU
T1BUUyA9IDYwDQogICAgK2NvbnN0IF9STElNSVRfQ1BVID0gMA0KICAgICtjb25zdCBfTUFEVl9E
T05URFVNUCA9IDE2DQogICAgK2NvbnN0IF9fX0ZMVDEyOF9IQVNfSU5GSU5JVFlfXyA9IDENCiAg
ICArY29uc3QgX19DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJTlRGTEFHUyA9IDExMjcNCiAgICAr
Y29uc3QgX19TQ19OUFJPQ0VTU09SU19DT05GID0gODMNCiAgICArY29uc3QgX1RDQV9YU1RBVFMg
PSA0DQogICAgK2NvbnN0IF9QQUNLRVRfTVJfQUxMTVVMVEkgPSAyDQogICAgK2NvbnN0IF9fX1NT
RTJfTUFUSF9fID0gMQ0KICAgICtjb25zdCBfT19OT0NUVFkgPSAwNDAwDQogICAgK2NvbnN0IF9D
TE9ORV9JTyA9IDB4ODAwMDAwMDANCiAgICArY29uc3QgX1NJT0NTSUZIV0JST0FEQ0FTVCA9IDB4
ODkzNw0KICAgICtjb25zdCBfX19zaWdfYXRvbWljX3RfZGVmaW5lZCA9IDENCiAgICArY29uc3Qg
X0hBVkVfQUNDRVBUNCA9IDENCiAgICArY29uc3QgX19DU19HTlVfTElCQ19WRVJTSU9OID0gMg0K
ICAgICtjb25zdCBfTkxNX0ZfQ1JFQVRFID0gMHg0MDANCiAgICArY29uc3QgX1JUX0NMQVNTX0RF
RkFVTFQgPSAyNTMNCiAgICArY29uc3QgX0hBVkVfVU5MSU5LQVQgPSAxDQogICAgK2NvbnN0IF9F
Tk9TWVMgPSAzOA0KICAgICtjb25zdCBfUlRNX0dFVE1VTFRJQ0FTVCA9IDU4DQogICAgK2NvbnN0
IF9JRkxBX0VWRU5UX0ZFQVRVUkVTID0gMg0KICAgICtjb25zdCBfX19JRkxBX0hTUl9NQVggPSA3
DQogICAgK2NvbnN0IF9FUE9MTF9DVExfTU9EID0gMw0KICAgICtjb25zdCBfRklPTkJJTyA9IDB4
NTQyMQ0KICAgICtjb25zdCBfX1NDX1BJSV9YVEkgPSA1NA0KICAgICtjb25zdCBfX1BPU0lYMl9D
X0RFViA9IF9fX1BPU0lYMl9USElTX1ZFUlNJT04NCiAgICArY29uc3QgX0FGX0FMRyA9IF9QRl9B
TEcNCiAgICArY29uc3QgX0lGTEFfUFBQX1VOU1BFQyA9IDANCiAgICArY29uc3QgX1NPX1JDVkxP
V0FUID0gMTgNCiAgICArY29uc3QgX0lOVDhfV0lEVEggPSA4DQogICAgK2NvbnN0IF9YODZfQ1Iw
X1BHX0JJVCA9IDMxDQogICAgK2NvbnN0IF9JUFBPUlRfV0hPU0VSVkVSID0gNTEzDQogICAgK2Nv
bnN0IF9IQVZFX1NZU19NTUFOX0ggPSAxDQogICAgK2NvbnN0IF9fX05SX3B3cml0ZTY0ID0gMTgN
CiAgICArY29uc3QgX0lGTEFfVFVOX09XTkVSID0gMQ0KICAgICtjb25zdCBfUlRBWF9GQVNUT1BF
Tl9OT19DT09LSUUgPSAxNw0KICAgICtjb25zdCBfSUZMQV9CT05EX0xQX0lOVEVSVkFMID0gMTkN
CiAgICArY29uc3QgX1BUUkFDRV9HRVRGUFJFR1MgPSAxNA0KICAgICtjb25zdCBfQ0xPTkVfRklM
RVMgPSAweDAwMDAwNDAwDQogICAgK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzEyOF9D
QkMgPSA1DQogICAgK2NvbnN0IF9TS0ZfQURfUkFORE9NID0gNTYNCiAgICArY29uc3QgX01TR19X
QUlUQUxMID0gMjU2DQogICAgK2NvbnN0IF9QUl9TRVRfTU1fRU5WX0VORCA9IDExDQogICAgK2Nv
bnN0IF9fX05SX3NlbmRtc2cgPSA0Ng0KICAgICtjb25zdCBfRVRIX1BfTUFQID0gMHgwMEY5DQog
ICAgK2NvbnN0IF9fX05SX2dldHNpZCA9IDEyNA0KICAgICtjb25zdCBfX19OUl9pb3ByaW9fZ2V0
ID0gMjUyDQogICAgK2NvbnN0IF9JRkxBX1ZGX0lCX05PREVfR1VJRCA9IDEwDQogICAgK2NvbnN0
IF9NU19SRUMgPSAxNjM4NA0KICAgICtjb25zdCBfX1BPU0lYX1RSQUNFID0gLTENCiAgICArY29u
c3QgX19fRkxUMTI4X0hBU19RVUlFVF9OQU5fXyA9IDENCiAgICArY29uc3QgX0xPQ0tfTkIgPSA0
DQogICAgK2NvbnN0IF9QRFBfRU5ESUFOID0gX19fUERQX0VORElBTg0KICAgICtjb25zdCBfUFJf
TUNFX0tJTExfRUFSTFkgPSAxDQogICAgK2NvbnN0IF9ORVRMSU5LX0FVRElUID0gOQ0KICAgICtj
b25zdCBfU1lTX3N0YXR4ID0gX19fTlJfc3RhdHgNCiAgICArY29uc3QgX19TQ19TUElOX0xPQ0tT
ID0gMTU0DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfQURfSU5GT19BQ1RPUl9LRVkgPSAzDQogICAg
K2NvbnN0IF9QUl9GUF9NT0RFX0ZSID0gKDEgPDwgMCkNCiAgICArY29uc3QgX1JUTV9HRVRUQ0xB
U1MgPSA0Mg0KICAgICtjb25zdCBfQUlfQUREUkNPTkZJRyA9IDB4MDAyMA0KICAgICtjb25zdCBf
UFJJdTggPSAidSINCiAgICArY29uc3QgX01BRFZfVU5NRVJHRUFCTEUgPSAxMw0KICAgICtjb25z
dCBfUFJJdTMyID0gInUiDQogICAgK2NvbnN0IF9TWVNfc2h1dGRvd24gPSBfX19OUl9zaHV0ZG93
bg0KICAgICtjb25zdCBfSEFWRV9MSU5VWF9GU19IID0gMQ0KICAgICtjb25zdCBfTl9SMzk2NCA9
IDkNCiAgICArY29uc3QgX0lQUFJPVE9fQUggPSA1MQ0KICAgICtjb25zdCBfRVhGVUxMID0gNTQN
CiAgICArY29uc3QgX19QT1NJWF9SQVdfU09DS0VUUyA9IDIwMDgwOQ0KICAgICtjb25zdCBfRUJV
U1kgPSAxNg0KICAgICtjb25zdCBfQjI1MDAwMDAgPSAwMDEwMDE0DQogICAgK2NvbnN0IF9fX05S
X2dldHNvY2tuYW1lID0gNTENCiAgICArY29uc3QgX1BSSVhGQVNUOCA9ICJYIg0KICAgICtjb25z
dCBfU1lTX3RraWxsID0gX19fTlJfdGtpbGwNCiAgICArY29uc3QgX19fYW1kNjRfXyA9IDENCiAg
ICArY29uc3QgX0lQVE9TX1BSRUNfUFJJT1JJVFkgPSBfSVBUT1NfQ0xBU1NfQ1MxDQogICAgK2Nv
bnN0IF9DVElNRSA9IDANCiAgICArY29uc3QgX19fRkxUMzJYX0hBU19JTkZJTklUWV9fID0gMQ0K
ICAgICtjb25zdCBfRVVOQVRDSCA9IDQ5DQogICAgK2NvbnN0IF9fU0NfMl9QQlNfQUNDT1VOVElO
RyA9IDE2OQ0KICAgICtjb25zdCBfX1BPU0lYX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIgPSAtMQ0K
ICAgICtjb25zdCBfX19OUl9tbG9jazIgPSAzMjUNCiAgICArY29uc3QgX0lQUE9SVF9XSE9JUyA9
IDQzDQogICAgK2NvbnN0IF9fX05SX2dldF90aHJlYWRfYXJlYSA9IDIxMQ0KICAgICtjb25zdCBf
Rl9PRkRfR0VUTEsgPSAzNg0KICAgICtjb25zdCBfTkxBX0FMSUdOVE8gPSA0DQogICAgK2NvbnN0
IF9FTk9NRURJVU0gPSAxMjMNCiAgICArY29uc3QgX19HTlVfU09VUkNFID0gMQ0KICAgICtjb25z
dCBfU1lTX3B0cmFjZSA9IF9fX05SX3B0cmFjZQ0KICAgICtjb25zdCBfU0lPQ0dJRklOREVYID0g
MHg4OTMzDQogICAgK2NvbnN0IF9FMkJJRyA9IDcNCiAgICArY29uc3QgX0lDTVA2X1JSX0ZMQUdT
X0ZPUkNFQVBQTFkgPSAweDIwDQogICAgK2NvbnN0IF9TSV9US0lMTCA9IC02DQogICAgK2NvbnN0
IF9fU0NfVEhSRUFEX1NQT1JBRElDX1NFUlZFUiA9IDE2MQ0KICAgICtjb25zdCBfX194ODZfNjRf
XyA9IDENCiAgICArY29uc3QgX1NZU19mdXRleCA9IF9fX05SX2Z1dGV4DQogICAgK2NvbnN0IF9J
Tl9ERUxFVEUgPSAweDAwMDAwMjAwDQogICAgK2NvbnN0IF9GRkRMWSA9IDAxMDAwMDANCiAgICAr
Y29uc3QgX01DQVNUX0xFQVZFX1NPVVJDRV9HUk9VUCA9IDQ3DQogICAgK2NvbnN0IF9TX0lYVVNS
ID0gX19fU19JRVhFQw0KICAgICtjb25zdCBfX1NZU19TRUxFQ1RfSCA9IDENCiAgICArY29uc3Qg
X1BSSWQ4ID0gImQiDQogICAgK2NvbnN0IF9fX05SX2lub3RpZnlfYWRkX3dhdGNoID0gMjU0DQog
ICAgK2NvbnN0IF9TQ05vOCA9ICJoaG8iDQogICAgK2NvbnN0IF9NQ0xfT05GQVVMVCA9IDQNCiAg
ICArY29uc3QgX0ZTX0VBX0lOT0RFX0ZMID0gMHgwMDIwMDAwMA0KICAgICtjb25zdCBfX19OUl9v
cGVuYXQgPSAyNTcNCiAgICArY29uc3QgX1RVTlNFVFBFUlNJU1RfdmFsID0gMTA3NDAyNTY3NQ0K
ICAgICtjb25zdCBfX19OUl9mZGF0YXN5bmMgPSA3NQ0KICAgICtjb25zdCBfRl9TRVRMRUFTRSA9
IDEwMjQNCiAgICArY29uc3QgX19TQ19GRF9NR01UID0gMTQzDQogICAgK2NvbnN0IF9fX0JJVFNf
UEVSX0xPTkcgPSA2NA0KICAgICtjb25zdCBfUFJJT19NSU4gPSAtMjANCiAgICArY29uc3QgX19f
TlJfcHJsaW1pdDY0ID0gMzAyDQogICAgK2NvbnN0IF9SVE1fREVMVEZJTFRFUiA9IDQ1DQogICAg
K2NvbnN0IF9SVE1fR0VUQ0hBSU4gPSAxMDINCiAgICArY29uc3QgX1JURVhUX0ZJTFRFUl9WRiA9
ICgxIDw8IDApDQogICAgK2NvbnN0IF9TVEFUWF9JTk8gPSAweDAxMDANCiAgICArY29uc3QgX19f
TkVUSU5FVF9JRl9FVEhFUl9IID0gMQ0KICAgICtjb25zdCBfU1lTX3JlY3ZtbXNnID0gX19fTlJf
cmVjdm1tc2cNCiAgICArY29uc3QgX0hBVkVfU0NIRURfSCA9IDENCiAgICArY29uc3QgX0VUSF9Q
X1JBUlAgPSAweDgwMzUNCiAgICArY29uc3QgX19TVFJVQ1RfVElNRVNQRUMgPSAxDQogICAgK2Nv
bnN0IF9TT19SRVVTRVBPUlQgPSAxNQ0KICAgICtjb25zdCBfX1BPU0lYX1NFTV9OU0VNU19NQVgg
PSAyNTYNCiAgICArY29uc3QgX19fTERCTF9FUFNJTE9OX18gPSAxLjENCiAgICArY29uc3QgX19f
Y2xvY2tfdF9kZWZpbmVkID0gMQ0KICAgICtjb25zdCBfTUFQX1RZUEUgPSAweDBmDQogICAgK2Nv
bnN0IF9ORVRMSU5LX1NPQ0tfRElBRyA9IDQNCiAgICArY29uc3QgX19fVVNFX1hPUEVOX0VYVEVO
REVEID0gMQ0KICAgICtjb25zdCBfUlROX1BST0hJQklUID0gOA0KICAgICtjb25zdCBfUEFDS0VU
X1RYX0hBU19PRkYgPSAxOQ0KICAgICtjb25zdCBfVENQX1JFUEFJUiA9IDE5DQogICAgK2NvbnN0
IF9JRkxBX1ZMQU5fRkxBR1MgPSAyDQogICAgK2NvbnN0IF9fX05SX2R1cCA9IDMyDQogICAgK2Nv
bnN0IF9BRl9USVBDID0gX1BGX1RJUEMNCiAgICArY29uc3QgX0lGTEFfR1RQX1JPTEUgPSA0DQog
ICAgK2NvbnN0IF9fX05SX2Z1dGltZXNhdCA9IDI2MQ0KICAgICtjb25zdCBfX19VU0VfS0VSTkVM
X0lQVjZfREVGUyA9IDANCiAgICArY29uc3QgX0lGTEFfVlhMQU5fUFJPWFkgPSAxMQ0KICAgICtj
b25zdCBfSEFWRV9VTklTVERfSCA9IDENCiAgICArY29uc3QgX1g4Nl9DUjBfQU1fQklUID0gMTgN
CiAgICArY29uc3QgX0lGTEFfVlhMQU5fUkVNQ1NVTV9OT1BBUlRJQUwgPSAyNA0KICAgICtjb25z
dCBfSUZMQV9NQUNWTEFOX01BQ0FERFIgPSA0DQogICAgK2NvbnN0IF9JUFRPU19QUkVDX0ZMQVNI
T1ZFUlJJREUgPSBfSVBUT1NfQ0xBU1NfQ1M0DQogICAgK2NvbnN0IF9fX1NJR1JUTUlOID0gMzIN
CiAgICArY29uc3QgX19fTlJfZmNudGwgPSA3Mg0KICAgICtjb25zdCBfU1lTX19zeXNjdGwgPSBf
X19OUl9fc3lzY3RsDQogICAgK2NvbnN0IF9FTkVUVU5SRUFDSCA9IDEwMQ0KICAgICtjb25zdCBf
U1lTX21xX3RpbWVkc2VuZCA9IF9fX05SX21xX3RpbWVkc2VuZA0KICAgICtjb25zdCBfVElPQ1NF
UkdFVExTUiA9IDB4NTQ1OQ0KICAgICtjb25zdCBfU09MX0lVQ1YgPSAyNzcNCiAgICArY29uc3Qg
X1JMSU1JVF9GU0laRSA9IDENCiAgICArY29uc3QgX19fUlRBX01BWCA9IDMwDQogICAgK2NvbnN0
IF9CUEZfVEFYID0gMHgwMA0KICAgICtjb25zdCBfU1RBVFhfX1JFU0VSVkVEID0gMHg4MDAwMDAw
MA0KICAgICtjb25zdCBfX1NDX1NZTkNIUk9OSVpFRF9JTyA9IDE0DQogICAgK2NvbnN0IF9fX1JU
Tl9NQVggPSAxMg0KICAgICtjb25zdCBfSU5UMzJfV0lEVEggPSAzMg0KICAgICtjb25zdCBfTkRf
T1BUX01UVSA9IDUNCiAgICArY29uc3QgX1NJR19BVE9NSUNfV0lEVEggPSAzMg0KICAgICtjb25z
dCBfX1NDX0VRVUlWX0NMQVNTX01BWCA9IDQxDQogICAgK2NvbnN0IF9fUE9TSVhfQ0xPQ0tSRVNf
TUlOID0gMjAwMDAwMDANCiAgICArY29uc3QgX19fR0NDX0FUT01JQ19JTlRfTE9DS19GUkVFID0g
Mg0KICAgICtjb25zdCBfUE9TSVhfRkFEVl9OT1JNQUwgPSAwDQogICAgK2NvbnN0IF9JUF9EUk9Q
X1NPVVJDRV9NRU1CRVJTSElQID0gNDANCiAgICArY29uc3QgX1NFRUtfTUFYID0gX1NFRUtfSE9M
RQ0KICAgICtjb25zdCBfQVJQSFJEX01FVFJJQ09NID0gMjMNCiAgICArY29uc3QgX0lGTEFfVkxB
Tl9FR1JFU1NfUU9TID0gMw0KICAgICtjb25zdCBfU1lTX2Nsb25lID0gX19fTlJfY2xvbmUNCiAg
ICArY29uc3QgX19TWVNfVElNRVNfSCA9IDENCiAgICArY29uc3QgX19fRkxUNjRYX01BWF9FWFBf
XyA9IDE2Mzg0DQogICAgK2NvbnN0IF9TX0lTR0lEID0gX19fU19JU0dJRA0KICAgICtjb25zdCBf
SVBWNl9SVEhEUl9UWVBFXzAgPSAwDQogICAgK2NvbnN0IF9TSUdTVE9QID0gMTkNCiAgICArY29u
c3QgX0ZTX1VOUk1fRkwgPSAweDAwMDAwMDAyDQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1NB
RkVfRlVOQ1RJT05TID0gMjAwODA5DQogICAgK2NvbnN0IF9QUl9GUF9FWENfTk9OUkVDT1YgPSAx
DQogICAgK2NvbnN0IF9UVU5HRVRWTkVUSERSU1pfdmFsID0gMjE0Nzc2NzUxMQ0KICAgICtjb25z
dCBfSUdOQlJLID0gMDAwMDAwMQ0KICAgICtjb25zdCBfX19ORVRQQUNLRVRfUEFDS0VUX0ggPSAx
DQogICAgK2NvbnN0IF9TWVNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiA9IF9fX05SX3NjaGVkX2dl
dF9wcmlvcml0eV9taW4NCiAgICArY29uc3QgX05fTUFTQyA9IDgNCiAgICArY29uc3QgX0lGTEFf
Qk9ORF9BRF9TRUxFQ1QgPSAyMg0KICAgICtjb25zdCBfSVBWNl9JUFNFQ19QT0xJQ1kgPSAzNA0K
ICAgICtjb25zdCBfQUZfTExDID0gX1BGX0xMQw0KICAgICtjb25zdCBfU0lPQ1NSQVJQID0gMHg4
OTYyDQogICAgK2NvbnN0IF9SVEFfUFJFRlNSQyA9IDcNCiAgICArY29uc3QgX1NPX1NOREJVRkZP
UkNFID0gMzINCiAgICArY29uc3QgX19fV0NMT05FID0gMHg4MDAwMDAwMA0KICAgICtjb25zdCBf
X19GTFRfSEFTX0RFTk9STV9fID0gMQ0KICAgICtjb25zdCBfUlVTQUdFX1RIUkVBRCA9IDENCiAg
ICArY29uc3QgX0lGRl9QUk9NSVNDID0gMjU2DQogICAgK2NvbnN0IF9QRl9USVBDID0gMzANCiAg
ICArY29uc3QgX1NZU19wdXRwbXNnID0gX19fTlJfcHV0cG1zZw0KICAgICtjb25zdCBfTUFDU0VD
X1ZBTElEQVRFX1NUUklDVCA9IDINCiAgICArY29uc3QgX1RDQV9JTkdSRVNTX0JMT0NLID0gMTMN
CiAgICArY29uc3QgX19fQVRPTUlDX0hMRV9SRUxFQVNFID0gMTMxMDcyDQogICAgK2NvbnN0IF9T
WVNfZ2V0cmxpbWl0ID0gX19fTlJfZ2V0cmxpbWl0DQogICAgK2NvbnN0IF9SVE1fU0VURENCID0g
NzkNCiAgICArY29uc3QgX1JUTVNHX0RFTERFVklDRSA9IDB4MTINCiAgICArY29uc3QgX0lDTVA2
X1JSX1BDT1VTRV9SQUZMQUdTX09OTElOSyA9IDB4MjANCiAgICArY29uc3QgX1NZU19tZW1iYXJy
aWVyID0gX19fTlJfbWVtYmFycmllcg0KICAgICtjb25zdCBfU0lPQ0dQR1JQID0gMHg4OTA0DQog
ICAgK2NvbnN0IF9fQ1NfTEZTNjRfTERGTEFHUyA9IDEwMDUNCiAgICArY29uc3QgX0IzODQwMCA9
IDAwMDAwMTcNCiAgICArY29uc3QgX0hBVkVfTElOVVhfSUZfVFVOX0ggPSAxDQogICAgK2NvbnN0
IF9BUlBIUkRfQVBQTEVUTEsgPSA4DQogICAgK2NvbnN0IF9QUl9HRVRfU0VDVVJFQklUUyA9IDI3
DQogICAgK2NvbnN0IF9DTUlOID0gMQ0KICAgICtjb25zdCBfTlVEX05PTkUgPSAweDAwDQogICAg
K2NvbnN0IF9JRkxBX1ZYTEFOX1RUTCA9IDUNCiAgICArY29uc3QgX19fR0NDX0FUT01JQ19DSEFS
MzJfVF9MT0NLX0ZSRUUgPSAyDQogICAgK2NvbnN0IF9JTl9DTE9TRV9OT1dSSVRFID0gMHgwMDAw
MDAxMA0KICAgICtjb25zdCBfX19BVE9NSUNfU0VRX0NTVCA9IDUNCiAgICArY29uc3QgX1NZU19p
bm90aWZ5X2luaXQgPSBfX19OUl9pbm90aWZ5X2luaXQNCiAgICArY29uc3QgX1RJT0NTRVJHU1RS
VUNUID0gMHg1NDU4DQogICAgK2NvbnN0IF9OTE1fRl9EVU1QID0gKF9OTE1fRl9ST09UfF9OTE1f
Rl9NQVRDSCkNCiAgICArY29uc3QgX19TQ19TUEFXTiA9IDE1OQ0KICAgICtjb25zdCBfX1BDX1JF
Q19NQVhfWEZFUl9TSVpFID0gMTUNCiAgICArY29uc3QgX1NJT0NBRERETENJID0gMHg4OTgwDQog
ICAgK2NvbnN0IF9fX0xEQkxfTUFYX0VYUF9fID0gMTYzODQNCiAgICArY29uc3QgX19MRlM2NF9T
VERJTyA9IDENCiAgICArY29uc3QgX1NZU190dXhjYWxsID0gX19fTlJfdHV4Y2FsbA0KICAgICtj
b25zdCBfX1NZU19VTl9IID0gMQ0KICAgICtjb25zdCBfSUNNUDZfRklMVEVSX0JMT0NLID0gMQ0K
ICAgICtjb25zdCBfRVJFTUNIRyA9IDc4DQogICAgK2NvbnN0IF9ORVRMSU5LX0FERF9NRU1CRVJT
SElQID0gMQ0KICAgICtjb25zdCBfWDg2X0VGTEFHU19WSVBfQklUID0gMjANCiAgICArY29uc3Qg
X1RDUElfT1BUX1NZTl9EQVRBID0gMzINCiAgICArY29uc3QgX19fTlJfdW1hc2sgPSA5NQ0KICAg
ICtjb25zdCBfV0lOVF9NSU4gPSAoMCkNCiAgICArY29uc3QgX19QT1NJWF9NRU1MT0NLID0gMjAw
ODA5DQogICAgK2NvbnN0IF9fU0NfQ0hBUkNMQVNTX05BTUVfTUFYID0gNDUNCiAgICArY29uc3Qg
X0lGTEFfSVBWTEFOX0ZMQUdTID0gMg0KICAgICtjb25zdCBfX1BPU0lYX1JFQURFUl9XUklURVJf
TE9DS1MgPSAyMDA4MDkNCiAgICArY29uc3QgX0hBVkVfTElOVVhfUFRSQUNFX0ggPSAxDQogICAg
K2NvbnN0IF9YODZfQ1I0X1NNWEVfQklUID0gMTQNCiAgICArY29uc3QgX0lYT0ZGID0gMDAxMDAw
MA0KICAgICtjb25zdCBfTVNfTk9VU0VSID0gLTIxNDc0ODM2NDgNCiAgICArY29uc3QgX19fQklH
R0VTVF9BTElHTk1FTlRfXyA9IDE2DQogICAgK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEX01B
U0sgPSAweDAzDQogICAgK2NvbnN0IF9FVEhfUF9ERENNUCA9IDB4MDAwNg0KICAgICtjb25zdCBf
X19OUl9ydF9zaWdzdXNwZW5kID0gMTMwDQogICAgK2NvbnN0IF9YX09LID0gMQ0KICAgICtjb25z
dCBfT19BU1lOQyA9IDAyMDAwMA0KICAgICtjb25zdCBfVElPQ0xJTlVYID0gMHg1NDFDDQogICAg
K2NvbnN0IF9fX1NJWkVPRl9TSVpFX1RfXyA9IDgNCiAgICArY29uc3QgX05VRF9OT0FSUCA9IDB4
NDANCiAgICArY29uc3QgX1NfSUZESVIgPSBfX19TX0lGRElSDQogICAgK2NvbnN0IF9fX1VTRV9Y
T1BFTjJLWFNJID0gMQ0KICAgICtjb25zdCBfX19VU0VfR05VID0gMQ0KICAgICtjb25zdCBfTlRG
X01BU1RFUiA9IDB4MDQNCiAgICArY29uc3QgX19fQVRPTUlDX0FDUVVJUkUgPSAyDQogICAgK2Nv
bnN0IF9OXzZQQUNLID0gNw0KICAgICtjb25zdCBfSUZMQV9FVkVOVF9JR01QX1JFU0VORCA9IDUN
CiAgICArY29uc3QgX0lQX0RGID0gMHg0MDAwDQogICAgK2NvbnN0IF9JUE9QVF9PUFRWQUwgPSAw
DQogICAgK2NvbnN0IF9fUEFUSF9IT1NUUyA9ICIvZXRjL2hvc3RzIg0KICAgICtjb25zdCBfX19O
Ul9ldmVudGZkID0gMjg0DQogICAgK2NvbnN0IF9TT19TTkRCVUYgPSA3DQogICAgK2NvbnN0IF9f
X05SX2xzZWVrID0gOA0KICAgICtjb25zdCBfX19OUl9ta2RpcmF0ID0gMjU4DQogICAgK2NvbnN0
IF9EVF9VTktOT1dOID0gMA0KICAgICtjb25zdCBfSUZMQV9WTEFOX0lEID0gMQ0KICAgICtjb25z
dCBfX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0gPSA2MQ0KICAgICtjb25zdCBfRl9TRVRPV04gPSBf
X19GX1NFVE9XTg0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElCUyA9IDEx
MjYNCiAgICArY29uc3QgX1RJT0NTU0VSSUFMID0gMHg1NDFGDQogICAgK2NvbnN0IF9FTk9ORVQg
PSA2NA0KICAgICtjb25zdCBfQVJQSFJEX0FUTSA9IDE5DQogICAgK2NvbnN0IF9YODZfRUZMQUdT
X0FGX0JJVCA9IDQNCiAgICArY29uc3QgX19fTlJfc2V0cmVzZ2lkID0gMTE5DQogICAgK2NvbnN0
IF9TWVNfbXVubWFwID0gX19fTlJfbXVubWFwDQogICAgK2NvbnN0IF9DWDg2X1BDUjAgPSAweDIw
DQogICAgK2NvbnN0IF9fX0lOVE1BWF9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZg0KICAgICtj
b25zdCBfX19OUl9jaHJvb3QgPSAxNjENCiAgICArY29uc3QgX19fR0NDX0FUT01JQ19DSEFSX0xP
Q0tfRlJFRSA9IDINCiAgICArY29uc3QgX0VUSF9GUkFNRV9MRU4gPSAxNTE0DQogICAgK2NvbnN0
IF9QVFJBQ0VfRVZFTlRfRk9SSyA9IDENCiAgICArY29uc3QgX0lGTEFfQk9ORF9OVU1fUEVFUl9O
T1RJRiA9IDE2DQogICAgK2NvbnN0IF9DTE9DS19SRUFMVElNRSA9IDANCiAgICArY29uc3QgX05E
QV9QUk9CRVMgPSA0DQogICAgK2NvbnN0IF9fUENfUkVDX0lOQ1JfWEZFUl9TSVpFID0gMTQNCiAg
ICArY29uc3QgX0lGTEFfUFJPVE9fRE9XTiA9IDM5DQogICAgK2NvbnN0IF9VSU5UX0ZBU1QzMl9X
SURUSCA9IF9fX1dPUkRTSVpFDQogICAgK2NvbnN0IF9fU0NfMl9QQlNfVFJBQ0sgPSAxNzINCiAg
ICArY29uc3QgX0FSUERfRkxVU0ggPSAweDAzDQogICAgK2NvbnN0IF9TQ054TEVBU1Q4ID0gImho
eCINCiAgICArY29uc3QgX1RSWV9BR0FJTiA9IDINCiAgICArY29uc3QgX19TWVNfU1lTSU5GT19I
ID0gMQ0KICAgICtjb25zdCBfRVRIRVJUWVBFX0lQID0gMHgwODAwDQogICAgK2NvbnN0IF9BUlBI
UkRfSUVFRTEzOTQgPSAyNA0KICAgICtjb25zdCBfSU5fQUNDRVNTID0gMHgwMDAwMDAwMQ0KICAg
ICtjb25zdCBfSUZMQV9JRk5BTUUgPSAzDQogICAgK2NvbnN0IF9UQ1BfVVNFUl9USU1FT1VUID0g
MTgNCiAgICArY29uc3QgX0FSUEhSRF9JRUVFODAyMTEgPSA4MDENCiAgICArY29uc3QgX0lGTEFf
QUZfU1BFQyA9IDI2DQogICAgK2NvbnN0IF9CMTE1MjAwMCA9IDAwMTAwMTENCiAgICArY29uc3Qg
X0VUSF9QX1RETFMgPSAweDg5MEQNCiAgICArY29uc3QgX19CSVRTX1NJR1NUQUNLX0ggPSAxDQog
ICAgK2NvbnN0IF9QRl9CTFVFVE9PVEggPSAzMQ0KICAgICtjb25zdCBfX0JJVFNfU0lHQ09OVEVY
VF9IID0gMQ0KICAgICtjb25zdCBfVElPQ1NXSU5TWl92YWwgPSAyMTUyNA0KICAgICtjb25zdCBf
RUFJX0FMTERPTkUgPSAtMTAzDQogICAgK2NvbnN0IF9fX0xEQkxfTUFYXzEwX0VYUF9fID0gNDkz
Mg0KICAgICtjb25zdCBfSUZMQV9TVEFUU19MSU5LXzY0ID0gMQ0KICAgICtjb25zdCBfVUlOVF9G
QVNUMzJfTUFYID0gKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQ0KICAgICtjb25zdCBfRkZJX1NZU1Yg
PSAxDQogICAgK2NvbnN0IF9fU1lTX0ZJTEVfSCA9IDENCiAgICArY29uc3QgX0lQX09SSUdEU1RB
RERSID0gMjANCiAgICArY29uc3QgX0VUSF9QX1NDQSA9IDB4NjAwNw0KICAgICtjb25zdCBfUlRN
R1JQX0lQVjZfUFJFRklYID0gMHgyMDAwMA0KICAgICtjb25zdCBfX19OUl9zZXRwcmlvcml0eSA9
IDE0MQ0KICAgICtjb25zdCBfVElPQ1BLVF9OT1NUT1AgPSAxNg0KICAgICtjb25zdCBfSVBfUE1U
VURJU0NfT01JVCA9IDUNCiAgICArY29uc3QgX0NPTExfV0VJR0hUU19NQVggPSAyNTUNCiAgICAr
Y29uc3QgX09fVFJVTkMgPSAwMTAwMA0KICAgICtjb25zdCBfX19OUl9zZXRob3N0bmFtZSA9IDE3
MA0KICAgICtjb25zdCBfRklPTkNMRVggPSAweDU0NTANCiAgICArY29uc3QgX0ZTX1hGTEFHX0lN
TVVUQUJMRSA9IDB4MDAwMDAwMDgNCiAgICArY29uc3QgX0ZTX0lOTElORV9EQVRBX0ZMID0gMHgx
MDAwMDAwMA0KICAgICtjb25zdCBfUEZfQVgyNSA9IDMNCiAgICArY29uc3QgX19fQVRPTUlDX0FD
UV9SRUwgPSA0DQogICAgK2NvbnN0IF9fX05SX3N5c2luZm8gPSA5OQ0KICAgICtjb25zdCBfRlNf
WEZMQUdfREFYID0gMHgwMDAwODAwMA0KICAgICtjb25zdCBfSVBWNl9ST1VURVJfQUxFUlQgPSAy
Mg0KICAgICtjb25zdCBfSUZMQV9CUl9CUklER0VfSUQgPSAxMQ0KICAgICtjb25zdCBfWDg2X0NS
NF9MQTU3X0JJVCA9IDEyDQogICAgK2NvbnN0IF9fU0NfVkVSU0lPTiA9IDI5DQogICAgK2NvbnN0
IF9TVEFUWF9BVFRSX0NPTVBSRVNTRUQgPSAweDAwMDQNCiAgICArY29uc3QgX0lQVjZfSERSSU5D
TCA9IDM2DQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9VTklDQVNUX0ZMT09EID0gOQ0KICAgICtj
b25zdCBfUlRNX0RFTE5FSUdIID0gMjkNCiAgICArY29uc3QgX19fU1REQ19WRVJTSU9OX18gPSAx
OTk5MDENCiAgICArY29uc3QgX1BGX1FJUENSVFIgPSA0Mg0KICAgICtjb25zdCBfQURKX0ZSRVFV
RU5DWSA9IDB4MDAwMg0KICAgICtjb25zdCBfX19MT05HX0xPTkdfV0lEVEhfXyA9IDY0DQogICAg
K2NvbnN0IF9BRl9BU0ggPSBfUEZfQVNIDQogICAgK2NvbnN0IF9JUF9QTVRVRElTQ19ET05UID0g
MA0KICAgICtjb25zdCBfSEFWRV9TWU5DX0ZFVENIX0FORF9BRERfNCA9IDENCiAgICArY29uc3Qg
X0lQVjZfSk9JTl9HUk9VUCA9IDIwDQogICAgK2NvbnN0IF9TS0ZfQURfVkxBTl9UQUcgPSA0NA0K
ICAgICtjb25zdCBfUFRSQUNFX0dFVF9USFJFQURfQVJFQSA9IDI1DQogICAgK2NvbnN0IF9SVE5M
R1JQX0lQVjRfTVJPVVRFX1IgPSAzMA0KICAgICtjb25zdCBfVENBX0VHUkVTU19CTE9DSyA9IDE0
DQogICAgK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX01VVEVYX1QgPSA0MA0KICAgICtjb25zdCBf
U09fVFlQRSA9IDMNCiAgICArY29uc3QgX19fSUZMQV9WTEFOX01BWCA9IDYNCiAgICArY29uc3Qg
X1BUUkFDRV9TRVRTSUdNQVNLID0gMTY5MDcNCiAgICArY29uc3QgX0NMT05FX1ZGT1JLID0gMHgw
MDAwNDAwMA0KICAgICtjb25zdCBfSVBQUk9UT19JUCA9IDANCiAgICArY29uc3QgX0VOT0VYRUMg
PSA4DQogICAgK2NvbnN0IF9TT19JTkNPTUlOR19DUFUgPSA0OQ0KICAgICtjb25zdCBfUFJfU0VU
X0ZQRVhDID0gMTINCiAgICArY29uc3QgX1RDUF9XSU5ET1dfQ0xBTVAgPSAxMA0KICAgICtjb25z
dCBfU09fUlhRX09WRkwgPSA0MA0KICAgICtjb25zdCBfU1lTX3Zmb3JrID0gX19fTlJfdmZvcmsN
CiAgICArY29uc3QgX0lOX0NMT0VYRUMgPSA1MjQyODgNCiAgICArY29uc3QgX1RDQV9GQ05UID0g
Ng0KICAgICtjb25zdCBfX19GTFQ2NFhfSEFTX0lORklOSVRZX18gPSAxDQogICAgK2NvbnN0IF9f
U0NfU0VNX1ZBTFVFX01BWCA9IDMzDQogICAgK2NvbnN0IF9fTkVUSU5FVF9JQ01QNl9IID0gMQ0K
ICAgICtjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfQ0JDID0gMw0KICAgICtjb25z
dCBfX19STElNSVRfTVNHUVVFVUUgPSAxMg0KICAgICtjb25zdCBfSVBQUk9UT19DT01QID0gMTA4
DQogICAgK2NvbnN0IF9QQUNLRVRfUlhfUklORyA9IDUNCiAgICArY29uc3QgX0lGTEFfQ0FSUklF
Ul9ET1dOX0NPVU5UID0gNDgNCiAgICArY29uc3QgX1NPX0JQRl9FWFRFTlNJT05TID0gNDgNCiAg
ICArY29uc3QgX0VBRERSTk9UQVZBSUwgPSA5OQ0KICAgICtjb25zdCBfX19GTFQzMl9NSU5fXyA9
IDEuMQ0KICAgICtjb25zdCBfSUZMQV9CUl9GT1JXQVJEX0RFTEFZID0gMQ0KICAgICtjb25zdCBf
X19TU0VfTUFUSF9fID0gMQ0KICAgICtjb25zdCBfU1lTX3dhaXRpZCA9IF9fX05SX3dhaXRpZA0K
ICAgICtjb25zdCBfU0NPUEVfREVMSU1JVEVSID0gJyUnDQogICAgK2NvbnN0IF9fX05SX3NvY2tl
dCA9IDQxDQogICAgK2NvbnN0IF9fX05FVF9FVEhFUk5FVF9IID0gMQ0KICAgICtjb25zdCBfU19J
UlVTUiA9IF9fX1NfSVJFQUQNCiAgICArY29uc3QgX0lGTEFfWERQX0ZEID0gMQ0KICAgICtjb25z
dCBfSVBWNl9NVFUgPSAyNA0KICAgICtjb25zdCBfRlNfWEZMQUdfTk9BVElNRSA9IDB4MDAwMDAw
NDANCiAgICArY29uc3QgX0ZTX0pPVVJOQUxfREFUQV9GTCA9IDB4MDAwMDQwMDANCiAgICArY29u
c3QgX19fTlJfY2FwZ2V0ID0gMTI1DQogICAgK2NvbnN0IF9SVE5fQU5ZQ0FTVCA9IDQNCiAgICAr
Y29uc3QgX1BPTExfSFVQID0gNg0KICAgICtjb25zdCBfSEFWRV9HRVRJUElORk8gPSAxDQogICAg
K2NvbnN0IF9NU19VTkJJTkRBQkxFID0gMTMxMDcyDQogICAgK2NvbnN0IF9fU1RBVF9WRVJfS0VS
TkVMID0gMA0KICAgICtjb25zdCBfUFJfTUNFX0tJTEwgPSAzMw0KICAgICtjb25zdCBfX1BPU0lY
X1Y2X0xQQklHX09GRkJJRyA9IC0xDQogICAgK2NvbnN0IF9BUlBIUkRfRkNBTCA9IDc4NQ0KICAg
ICtjb25zdCBfU19JRkNIUiA9IF9fX1NfSUZDSFINCiAgICArY29uc3QgX01DQVNUX0JMT0NLX1NP
VVJDRSA9IDQzDQogICAgK2NvbnN0IF9TWVNfZ2V0Z3JvdXBzID0gX19fTlJfZ2V0Z3JvdXBzDQog
ICAgK2NvbnN0IF9fX05SX3J0X3Rnc2lncXVldWVpbmZvID0gMjk3DQogICAgK2NvbnN0IF9VSU5U
MzJfTUFYID0gKDQyOTQ5NjcyOTUpDQogICAgK2NvbnN0IF9USU1FX1VUQyA9IDENCiAgICArY29u
c3QgX0lOX1FfT1ZFUkZMT1cgPSAweDAwMDA0MDAwDQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9I
T0xEX1RJTUVSID0gMjMNCiAgICArY29uc3QgX0lGTEFfSU5FVDZfQ0FDSEVJTkZPID0gNQ0KICAg
ICtjb25zdCBfVElNRVJfQUJTVElNRSA9IDENCiAgICArY29uc3QgX01BUF9GSVhFRCA9IDB4MTAN
CiAgICArY29uc3QgX0ZfT1dORVJfVElEID0gMA0KICAgICtjb25zdCBfX1NDX0NMT0NLX1NFTEVD
VElPTiA9IDEzNw0KICAgICtjb25zdCBfSEFWRV9GQ0hNT0RBVCA9IDENCiAgICArY29uc3QgX19D
U19QT1NJWF9WN19MUEJJR19PRkZCSUdfQ0ZMQUdTID0gMTE0NA0KICAgICtjb25zdCBfQVRfU1RB
VFhfU1lOQ19BU19TVEFUID0gMHgwMDAwDQogICAgK2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05TRV9J
TlNVRkZJQ0lFTlRfUkVTT1VSQ0VTID0gMg0KICAgICtjb25zdCBfVENQX1RJTUVfV0FJVCA9IDYN
CiAgICArY29uc3QgX0JQRl9TVCA9IDB4MDINCiAgICArY29uc3QgX19QT1NJWF9TUE9SQURJQ19T
RVJWRVIgPSAtMQ0KICAgICtjb25zdCBfQUZfU0VDVVJJVFkgPSBfUEZfU0VDVVJJVFkNCiAgICAr
Y29uc3QgX1BGX1gyNSA9IDkNCiAgICArY29uc3QgX1BUUkFDRV9BUkNIX1BSQ1RMID0gMzANCiAg
ICArY29uc3QgX0VTT0NLVE5PU1VQUE9SVCA9IDk0DQogICAgK2NvbnN0IF9USU9DR1NFUklBTCA9
IDB4NTQxRQ0KICAgICtjb25zdCBfU1lTX21iaW5kID0gX19fTlJfbWJpbmQNCiAgICArY29uc3Qg
X0lGTEFfVkZfVkxBTiA9IDINCiAgICArY29uc3QgX1NZU19wa2V5X21wcm90ZWN0ID0gX19fTlJf
cGtleV9tcHJvdGVjdA0KICAgICtjb25zdCBfSUZBX0JST0FEQ0FTVCA9IDQNCiAgICArY29uc3Qg
X0JQRl9SU0ggPSAweDcwDQogICAgK2NvbnN0IF9JRkxBX0JSX01DQVNUX0hBU0hfRUxBU1RJQ0lU
WSA9IDI2DQogICAgK2NvbnN0IF9SVEFYX1dJTkRPVyA9IDMNCiAgICArY29uc3QgX01TX1NJTEVO
VCA9IDMyNzY4DQogICAgK2NvbnN0IF9TQ01fV0lGSV9TVEFUVVMgPSBfU09fV0lGSV9TVEFUVVMN
CiAgICArY29uc3QgX19TQ19GSUxFX0FUVFJJQlVURVMgPSAxNDYNCiAgICArY29uc3QgX19QT1NJ
WF9TRU1fVkFMVUVfTUFYID0gMzI3NjcNCiAgICArY29uc3QgX19fRkxUNjRYX01JTl9FWFBfXyA9
ICgtMTYzODEpDQogICAgK2NvbnN0IF9QUkl1RkFTVDggPSAidSINCiAgICArY29uc3QgX19fdGlt
ZXJfdF9kZWZpbmVkID0gMQ0KICAgICtjb25zdCBfX1BPU0lYX0hPU1RfTkFNRV9NQVggPSAyNTUN
CiAgICArY29uc3QgX1RDUF9GQVNUT1BFTiA9IDIzDQogICAgK2NvbnN0IF9fU0NfU0lHUVVFVUVf
TUFYID0gMzQNCiAgICArY29uc3QgX0lPQ19PVVQgPSAoX19JT0NfUkVBRCA8PCBfX0lPQ19ESVJT
SElGVCkNCiAgICArY29uc3QgX0VNTElOSyA9IDMxDQogICAgK2NvbnN0IF9fX1dDT1JFRkxBRyA9
IDB4ODANCiAgICArY29uc3QgX0VSRktJTEwgPSAxMzINCiAgICArY29uc3QgX19VVFNOQU1FX0xF
TkdUSCA9IDY1DQogICAgK2NvbnN0IF9TSUdfQkxPQ0sgPSAwDQogICAgK2NvbnN0IF9TWVNfbWlu
Y29yZSA9IF9fX05SX21pbmNvcmUNCiAgICArY29uc3QgX0VBSV9PVkVSRkxPVyA9IC0xMg0KICAg
ICtjb25zdCBfQUZfTkZDID0gX1BGX05GQw0KICAgICtjb25zdCBfU1lTX2dldHBwaWQgPSBfX19O
Ul9nZXRwcGlkDQogICAgK2NvbnN0IF9NQUNWTEFOX0ZMQUdfTk9QUk9NSVNDID0gMQ0KICAgICtj
b25zdCBfSVBPUFRfU0VDVVJfTU1NTSA9IDB4YmM0ZA0KICAgICtjb25zdCBfSUZMQV9NQVhfTVRV
ID0gNTENCiAgICArY29uc3QgX19fTlJfZ2V0eGF0dHIgPSAxOTENCiAgICArY29uc3QgX19TQ18y
X0NfREVWID0gNDgNCiAgICArY29uc3QgX05EQV9MTEFERFIgPSAyDQogICAgK2NvbnN0IF9JUFY2
X1RSQU5TUEFSRU5UID0gNzUNCiAgICArY29uc3QgX19fTlJfbXByb3RlY3QgPSAxMA0KICAgICtj
b25zdCBfU0hVVF9SRFdSID0gMg0KICAgICtjb25zdCBfU0lPQ1NJRk1FVFJJQyA9IDB4ODkxZQ0K
ICAgICtjb25zdCBfX1NDX0FJT19MSVNUSU9fTUFYID0gMjMNCiAgICArY29uc3QgX01BUF9ERU5Z
V1JJVEUgPSAweDAwODAwDQogICAgK2NvbnN0IF9TSU9DU1BHUlAgPSAweDg5MDINCiAgICArY29u
c3QgX1NJX0FTWU5DSU8gPSAtNA0KICAgICtjb25zdCBfVFVOU0VUSUZGX3ZhbCA9IDEwNzQwMjU2
NzQNCiAgICArY29uc3QgX0lGTEFfSUZBTElBUyA9IDIwDQogICAgK2NvbnN0IF9QVFJBQ0VfU0VD
Q09NUF9HRVRfTUVUQURBVEEgPSAxNjkwOQ0KICAgICtjb25zdCBfX19HQ0NfSUVDXzU1OSA9IDIN
CiAgICArY29uc3QgX1JURl9MSU5LUlQgPSAweDAwMTAwMDAwDQogICAgK2NvbnN0IF9TWVNfbW92
ZV9wYWdlcyA9IF9fX05SX21vdmVfcGFnZXMNCiAgICArY29uc3QgX1NLRl9BRF9WTEFOX1RBR19Q
UkVTRU5UID0gNDgNCiAgICArY29uc3QgX0hBVkVfTERFWFBMID0gMQ0KICAgICtjb25zdCBfX19O
Ul9wcmVhZHYyID0gMzI3DQogICAgK2NvbnN0IF9fX05SX2NyZWF0ZV9tb2R1bGUgPSAxNzQNCiAg
ICArY29uc3QgX01BQ1ZMQU5fTU9ERV9CUklER0UgPSA0DQogICAgK2NvbnN0IF9EVF9ESVIgPSA0
DQogICAgK2NvbnN0IF9TVEFfUFBTU0lHTkFMID0gMHgwMTAwDQogICAgK2NvbnN0IF9TWVNfc2V0
ZnNnaWQgPSBfX19OUl9zZXRmc2dpZA0KICAgICtjb25zdCBfX19STElNSVRfUlRUSU1FID0gMTUN
CiAgICArY29uc3QgX19TQ18yX1ZFUlNJT04gPSA0Ng0KICAgICtjb25zdCBfSEFWRV9PUEVONjQg
PSAxDQogICAgK2NvbnN0IF9UUkFQX0JSS1BUID0gMQ0KICAgICtjb25zdCBfTklfREdSQU0gPSAx
Ng0KICAgICtjb25zdCBfX1NDX0RFVklDRV9TUEVDSUZJQyA9IDE0MQ0KICAgICtjb25zdCBfSVBG
UkFHVFRMID0gNjANCiAgICArY29uc3QgX19TQ19OTF9NU0dNQVggPSAxMjENCiAgICArY29uc3Qg
X1NZU19zY2hlZF9zZXRhdHRyID0gX19fTlJfc2NoZWRfc2V0YXR0cg0KICAgICtjb25zdCBfUFJf
U0VUX01NX0VORF9EQVRBID0gNA0KICAgICtjb25zdCBfUlRBWF9BRFZNU1MgPSA4DQogICAgK2Nv
bnN0IF9TT0xfUkFXID0gMjU1DQogICAgK2NvbnN0IF9MT0NLX0VYID0gMg0KICAgICtjb25zdCBf
X19OUl9tdW5tYXAgPSAxMQ0KICAgICtjb25zdCBfX19HQ0NfQVRPTUlDX0xMT05HX0xPQ0tfRlJF
RSA9IDINCiAgICArY29uc3QgX19TQ19QSFlTX1BBR0VTID0gODUNCiAgICArY29uc3QgX0ZTX0tF
WV9ERVNDX1BSRUZJWF9TSVpFID0gOA0KICAgICtjb25zdCBfU1lTX3JlbWFwX2ZpbGVfcGFnZXMg
PSBfX19OUl9yZW1hcF9maWxlX3BhZ2VzDQogICAgK2NvbnN0IF9NU19TWU5DID0gNA0KICAgICtj
b25zdCBfRl9VTkxDSyA9IDINCiAgICArY29uc3QgX1BSX0dFVF9GUEVNVSA9IDkNCiAgICArY29u
c3QgX19fTlJfcmVtYXBfZmlsZV9wYWdlcyA9IDIxNg0KICAgICtjb25zdCBfSVBPUFRfTlVNQkVS
X01BU0sgPSAweDFmDQogICAgK2NvbnN0IF9TWVNfc2V0dWlkID0gX19fTlJfc2V0dWlkDQogICAg
K2NvbnN0IF9JUF9QQVNTU0VDID0gMTgNCiAgICArY29uc3QgX1NZU19zb2NrZXRwYWlyID0gX19f
TlJfc29ja2V0cGFpcg0KICAgICtjb25zdCBfTkRUUEFfTE9DS1RJTUUgPSAxNQ0KICAgICtjb25z
dCBfVENQX0NPT0tJRV9NSU4gPSA4DQogICAgK2NvbnN0IF9SVE1TR19BUl9GQUlMRUQgPSAweDUx
DQogICAgK2NvbnN0IF9JTExfQkFEU1RLID0gOA0KICAgICtjb25zdCBfQVJQT1BfUkVQTFkgPSAy
DQogICAgK2NvbnN0IF9IQVZFX1NUUklOR19IID0gMQ0KICAgICtjb25zdCBfSU5UX0ZBU1Q4X01B
WCA9ICgxMjcpDQogICAgK2NvbnN0IF9fX05SX19zeXNjdGwgPSAxNTYNCiAgICArY29uc3QgX1JU
Rl9CUk9BRENBU1QgPSAweDEwMDAwMDAwDQogICAgK2NvbnN0IF9QRl9LQ00gPSA0MQ0KICAgICtj
b25zdCBfX1BDX01BWF9JTlBVVCA9IDINCiAgICArY29uc3QgX0lOX01PRElGWSA9IDB4MDAwMDAw
MDINCiAgICArY29uc3QgX1NJR1FVSVQgPSAzDQogICAgK2NvbnN0IF9UQ1BfQ09SSyA9IDMNCiAg
ICArY29uc3QgX1NZU19yZW1vdmV4YXR0ciA9IF9fX05SX3JlbW92ZXhhdHRyDQogICAgK2NvbnN0
IF9fX0ZMVF9FUFNJTE9OX18gPSAxLjENCiAgICArY29uc3QgX19fVUlOVDMyX01BWF9fID0gMHhm
ZmZmZmZmZg0KICAgICtjb25zdCBfX19OUl9mY2hvd24gPSA5Mw0KICAgICtjb25zdCBfUlROTEdS
UF9MSU5LID0gMQ0KICAgICtjb25zdCBfX1NDX1RSQUNFX0xPRyA9IDE4NA0KICAgICtjb25zdCBf
VENQX0tFRVBJTlRWTCA9IDUNCiAgICArY29uc3QgX1BSX0dFVF9LRUVQQ0FQUyA9IDcNCiAgICAr
Y29uc3QgX0lOVF9MRUFTVDMyX01BWCA9ICgyMTQ3NDgzNjQ3KQ0KICAgICtjb25zdCBfX19MREJM
X01JTl9FWFBfXyA9ICgtMTYzODEpDQogICAgK2NvbnN0IF9TQ05pMzIgPSAiaSINCiAgICArY29u
c3QgX19fTlJfcmVuYW1lID0gODINCiAgICArY29uc3QgX1BUUkFDRV9PX1RSQUNFU0VDQ09NUCA9
IDEyOA0KICAgICtjb25zdCBfSU5fSUdOT1JFRCA9IDB4MDAwMDgwMDANCiAgICArY29uc3QgX0JQ
Rl9JTU0gPSAweDAwDQogICAgK2NvbnN0IF9JRkxBX1ZGX1RSVVNUID0gOQ0KICAgICtjb25zdCBf
SVBQUk9UT19NSCA9IDEzNQ0KICAgICtjb25zdCBfSUZMQV9WWExBTl9MSU5LID0gMw0KICAgICtj
b25zdCBfRVNIVVRET1dOID0gMTA4DQogICAgK2NvbnN0IF9TT0xfUEFDS0VUID0gMjYzDQogICAg
K2NvbnN0IF9fX05SX2luaXRfbW9kdWxlID0gMTc1DQogICAgK2NvbnN0IF9DTE9ORV9ORVdOUyA9
IDB4MDAwMjAwMDANCiAgICArY29uc3QgX1JUUFJPVF9NUk9VVEVEID0gMTcNCiAgICArY29uc3Qg
X19TQ19TU19SRVBMX01BWCA9IDI0MQ0KICAgICtjb25zdCBfR1RQX1JPTEVfR0dTTiA9IDANCiAg
ICArY29uc3QgX1NZU190cnVuY2F0ZSA9IF9fX05SX3RydW5jYXRlDQogICAgK2NvbnN0IF9fX01B
Q1NFQ19WQUxJREFURV9FTkQgPSAzDQogICAgK2NvbnN0IF9YODZfRUZMQUdTX1ZJRl9CSVQgPSAx
OQ0KICAgICtjb25zdCBfX1NDX01VTFRJX1BST0NFU1MgPSAxNTANCiAgICArY29uc3QgX0lQUFJP
VE9fUElNID0gMTAzDQogICAgK2NvbnN0IF9CMTUwMDAwMCA9IDAwMTAwMTINCiAgICArY29uc3Qg
X19fTlJfcHdyaXRldiA9IDI5Ng0KICAgICtjb25zdCBfU09fUkVVU0VBRERSID0gMg0KICAgICtj
b25zdCBfTkNDID0gOA0KICAgICtjb25zdCBfVENQX0NBX0xvc3MgPSA0DQogICAgK2NvbnN0IF9N
U19NR0NfTVNLID0gMHhmZmZmMDAwMA0KICAgICtjb25zdCBfU19JWE9USCA9IChfU19JWEdSUCA+
PiAzKQ0KICAgICtjb25zdCBfU09MX05FVExJTksgPSAyNzANCiAgICArY29uc3QgX0lMTF9QUlZS
RUcgPSA2DQogICAgK2NvbnN0IF9fX0ZMVDMyWF9NQU5UX0RJR19fID0gNTMNCiAgICArY29uc3Qg
X1NDTnVMRUFTVDggPSAiaGh1Ig0KICAgICtjb25zdCBfVUxMT05HX01BWCA9IChfTExPTkdfTUFY
ICogMiArIDEpDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX0FHRUlORyA9IDgNCiAgICArY29uc3Qg
X1BSX1NQRUNfUFJDVEwgPSAoMSA8PCAwKQ0KICAgICtjb25zdCBfUlRNX0RFTENIQUlOID0gMTAx
DQogICAgK2NvbnN0IF9fSU9DX1NJWkVTSElGVCA9IChfX0lPQ19UWVBFU0hJRlQrX19JT0NfVFlQ
RUJJVFMpDQogICAgK2NvbnN0IF9fX05SX25mc3NlcnZjdGwgPSAxODANCiAgICArY29uc3QgX19f
RkxUX01JTl8xMF9FWFBfXyA9ICgtMzcpDQogICAgK2NvbnN0IF9JRkxBX1hEUF9QUk9HX0lEID0g
NA0KICAgICtjb25zdCBfX0JJVFNfVFlQRVNfU1RSVUNUX1NDSEVEX1BBUkFNID0gMQ0KICAgICtj
b25zdCBfQVJQSFJEX1JTUlZEID0gMjYwDQogICAgK2NvbnN0IF9fUE9TSVgyX0JDX0JBU0VfTUFY
ID0gOTkNCiAgICArY29uc3QgX1BBQ0tFVF9BRERfTUVNQkVSU0hJUCA9IDENCiAgICArY29uc3Qg
X19fTlJfcnRfc2lncGVuZGluZyA9IDEyNw0KICAgICtjb25zdCBfX19PX1BBVEggPSAwMTAwMDAw
MDANCiAgICArY29uc3QgX0VUSF9QX0JQUSA9IDB4MDhGRg0KICAgICtjb25zdCBfVENQX1RJTUVT
VEFNUCA9IDI0DQogICAgK2NvbnN0IF9TSU9DU0lGUEZMQUdTID0gMHg4OTM0DQogICAgK2NvbnN0
IF9SVE1fTkVXTElOSyA9IDE2DQogICAgK2NvbnN0IF9JRkxBX0lORk9fWFNUQVRTID0gMw0KICAg
ICtjb25zdCBfX1BPU0lYX0NQVVRJTUUgPSAwDQogICAgK2NvbnN0IF9QQUNLRVRfRkFTVFJPVVRF
ID0gNg0KICAgICtjb25zdCBfSU5UX0xFQVNUNjRfV0lEVEggPSA2NA0KICAgICtjb25zdCBfUEZf
SVBYID0gNA0KICAgICtjb25zdCBfTlVEX1BFUk1BTkVOVCA9IDB4ODANCiAgICArY29uc3QgX19f
TlJfaW9fZGVzdHJveSA9IDIwNw0KICAgICtjb25zdCBfUlRBWF9SVFQgPSA0DQogICAgK2NvbnN0
IF9fX1JMSU1JVF9SU1MgPSA1DQogICAgK2NvbnN0IF9fX05SX2dldHRpZCA9IDE4Ng0KICAgICtj
b25zdCBfX19OUl9pb3Blcm0gPSAxNzMNCiAgICArY29uc3QgX1NfSUZCTEsgPSBfX19TX0lGQkxL
DQogICAgK2NvbnN0IF9TQ054RkFTVDggPSAiaGh4Ig0KICAgICtjb25zdCBfX19OUl90dXhjYWxs
ID0gMTg0DQogICAgK2NvbnN0IF9fX09fRElSRUNUT1JZID0gMDIwMDAwMA0KICAgICtjb25zdCBf
U1lTX2Nvbm5lY3QgPSBfX19OUl9jb25uZWN0DQogICAgK2NvbnN0IF9UQ1BfQ0NfSU5GTyA9IDI2
DQogICAgK2NvbnN0IF9QQUNLQUdFX1NUUklORyA9ICJwYWNrYWdlLXVudXNlZCB2ZXJzaW9uLXVu
dXNlZCINCiAgICArY29uc3QgX1NZU19zY2hlZF9nZXRhdHRyID0gX19fTlJfc2NoZWRfZ2V0YXR0
cg0KICAgICtjb25zdCBfX1BPU0lYMl9CQ19TQ0FMRV9NQVggPSA5OQ0KICAgICtjb25zdCBfUFRS
QUNFX1BPS0VURVhUID0gNA0KICAgICtjb25zdCBfRVRIX1BfREVDID0gMHg2MDAwDQogICAgK2Nv
bnN0IF9TWVNfZmxpc3R4YXR0ciA9IF9fX05SX2ZsaXN0eGF0dHINCiAgICArY29uc3QgX0lQVkxB
Tl9GX1BSSVZBVEUgPSAweDAxDQogICAgK2NvbnN0IF9OTE1TR19PVkVSUlVOID0gMHg0DQogICAg
K2NvbnN0IF9ORVRMSU5LX0lQNl9GVyA9IDEzDQogICAgK2NvbnN0IF9JRkxBX0JSX0FHRUlOR19U
SU1FID0gNA0KICAgICtjb25zdCBfVENTRVRTID0gMHg1NDAyDQogICAgK2NvbnN0IF9SVE1fRl9F
UVVBTElaRSA9IDB4NDAwDQogICAgK2NvbnN0IF9IQVZFX0RVUDMgPSAxDQogICAgK2NvbnN0IF9C
UklER0VfTU9ERV9IQUlSUElOID0gMQ0KICAgICtjb25zdCBfVENTRVRYID0gMHg1NDMzDQogICAg
K2NvbnN0IF9WU1VTUCA9IDEwDQogICAgK2NvbnN0IF9fQklUU19TT0NLQUREUl9IID0gMQ0KICAg
ICtjb25zdCBfU0lHUE9MTCA9IDI5DQogICAgK2NvbnN0IF9QVFJBQ0VfRVZFTlRfU1RPUCA9IDEy
OA0KICAgICtjb25zdCBfQVRfU1lNTElOS19OT0ZPTExPVyA9IDB4MTAwDQogICAgK2NvbnN0IF9I
QVZFX1NZU19WRlNfSCA9IDENCiAgICArY29uc3QgX1BGX0tFWSA9IDE1DQogICAgK2NvbnN0IF9J
RkxBX1NUQVRTX0xJTktfWFNUQVRTX1NMQVZFID0gMw0KICAgICtjb25zdCBfTkxfTU1BUF9NU0df
QUxJR05NRU5UID0gX05MTVNHX0FMSUdOVE8NCiAgICArY29uc3QgX0lGTEFfVlhMQU5fVURQX0NT
VU0gPSAxOA0KICAgICtjb25zdCBfX19OUl93YWl0NCA9IDYxDQogICAgK2NvbnN0IF9JRkxBX1JN
TkVUX0ZMQUdTID0gMg0KICAgICtjb25zdCBfU09MX1JEUyA9IDI3Ng0KICAgICtjb25zdCBfUlRB
WF9GRUFUVVJFX01BU0sgPSAoX1JUQVhfRkVBVFVSRV9FQ04gfCBfUlRBWF9GRUFUVVJFX1NBQ0sg
fCBfUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCB8IF9SVEFYX0ZFQVRVUkVfQUxMRlJBRykNCiAgICAr
Y29uc3QgX1JUTV9HRVRORVRDT05GID0gODINCiAgICArY29uc3QgX19fRkxUNjRfTUFYX0VYUF9f
ID0gMTAyNA0KICAgICtjb25zdCBfVElPQ1NQR1JQX3ZhbCA9IDIxNTIwDQogICAgK2NvbnN0IF9J
UFBST1RPX1JTVlAgPSA0Ng0KICAgICtjb25zdCBfUlRNX0dFVE5TSUQgPSA5MA0KICAgICtjb25z
dCBfT05MQ1IgPSAwMDAwMDA0DQogICAgK2NvbnN0IF9fU0NfUElJX1NPQ0tFVCA9IDU1DQogICAg
K2NvbnN0IF9BUlBIUkRfVFVOTkVMID0gNzY4DQogICAgK2NvbnN0IF9IQVZFX01JTkNPUkUgPSAx
DQogICAgK2NvbnN0IF9fX0hBVkVfR0VORVJJQ19TRUxFQ1RJT04gPSAxDQogICAgK2NvbnN0IF9U
Q1BfS0VFUENOVCA9IDYNCiAgICArY29uc3QgX1RDUF9TWU5fUkVDViA9IDMNCiAgICArY29uc3Qg
X05MTV9GX0FQUEVORCA9IDB4ODAwDQogICAgK2NvbnN0IF9TWVNfbW1hcCA9IF9fX05SX21tYXAN
CiAgICArY29uc3QgX1NZU19jbG9ja19hZGp0aW1lID0gX19fTlJfY2xvY2tfYWRqdGltZQ0KICAg
ICtjb25zdCBfUlROTEdSUF9UQyA9IDQNCiAgICArY29uc3QgX0FESl9OQU5PID0gMHgyMDAwDQog
ICAgK2NvbnN0IF9ORVRMSU5LX1RYX1JJTkcgPSA3DQogICAgK2NvbnN0IF9TWVNfZXZlbnRmZCA9
IF9fX05SX2V2ZW50ZmQNCiAgICArY29uc3QgX19TQ19UUkFDRV9OQU1FX01BWCA9IDI0Mw0KICAg
ICtjb25zdCBfU1RBVFhfQVRJTUUgPSAweDAwMjANCiAgICArY29uc3QgX19DU19MRlNfTERGTEFH
UyA9IDEwMDENCiAgICArY29uc3QgX19fTlJfc2V0cmVnaWQgPSAxMTQNCiAgICArY29uc3QgX0VP
V05FUkRFQUQgPSAxMzANCiAgICArY29uc3QgX19fTlJfcmVhZGxpbmsgPSA4OQ0KICAgICtjb25z
dCBfX19zdGFja190X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9fX0ZMVDY0WF9NQVhfMTBfRVhQ
X18gPSA0OTMyDQogICAgK2NvbnN0IF9SVFNJR19NQVggPSAzMg0KICAgICtjb25zdCBfX19TSVpF
T0ZfTE9OR19ET1VCTEVfXyA9IDE2DQogICAgK2NvbnN0IF9WVDAgPSAwMDAwMDAwDQogICAgK2Nv
bnN0IF9WVDEgPSAwMDQwMDAwDQogICAgK2NvbnN0IF9JTlRfRkFTVDE2X01BWCA9ICg5MjIzMzcy
MDM2ODU0Nzc1ODA3KQ0KICAgICtjb25zdCBfWDg2X0NSMF9UU19CSVQgPSAzDQogICAgK2NvbnN0
IF9fX05SX3N5c2ZzID0gMTM5DQogICAgK2NvbnN0IF9YODZfQ1I0X1BBRV9CSVQgPSA1DQogICAg
K2NvbnN0IF9fUE9TSVhfVFpOQU1FX01BWCA9IDYNCiAgICArY29uc3QgX1NZU19vcGVuID0gX19f
TlJfb3Blbg0KICAgICtjb25zdCBfU0lPQ1NJRkVOQ0FQID0gMHg4OTI2DQogICAgK2NvbnN0IF9U
Q1BfQ0FfRGlzb3JkZXIgPSAxDQogICAgK2NvbnN0IF9fX1dPUkRTSVpFID0gNjQNCiAgICArY29u
c3QgX0lQX01GID0gMHgyMDAwDQogICAgK2NvbnN0IF9QUk9UX0dST1dTVVAgPSAweDAyMDAwMDAw
DQogICAgK2NvbnN0IF9SVEZfQUREUkNMQVNTTUFTSyA9IDB4RjgwMDAwMDANCiAgICArY29uc3Qg
X19fYW1kNjQgPSAxDQogICAgK2NvbnN0IF9BUlBIUkRfUFJPTkVUID0gNA0KICAgICtjb25zdCBf
QjkyMTYwMCA9IDAwMTAwMDcNCiAgICArY29uc3QgX0VBRERSSU5VU0UgPSA5OA0KICAgICtjb25z
dCBfRlNfRkxfVVNFUl9WSVNJQkxFID0gMHgwMDAzREZGRg0KICAgICtjb25zdCBfX19OUl90aW1l
cmZkX2dldHRpbWUgPSAyODcNCiAgICArY29uc3QgX0NMT05FX05FV1BJRCA9IDB4MjAwMDAwMDAN
CiAgICArY29uc3QgX1JUTkxHUlBfSVBWNl9SVUxFID0gMTkNCiAgICArY29uc3QgX0VUSEVSX01J
Tl9MRU4gPSAoX0VUSF9aTEVOICsgX0VUSEVSX0NSQ19MRU4pDQogICAgK2NvbnN0IF9QRl9ST1NF
ID0gMTENCiAgICArY29uc3QgX0lGTEFfUE9SVF9TRUxGID0gMjUNCiAgICArY29uc3QgX0xJTktf
WFNUQVRTX1RZUEVfQlJJREdFID0gMQ0KICAgICtjb25zdCBfX1NZU19TVEFUX0ggPSAxDQogICAg
K2NvbnN0IF9JRkxBX0JSX0dST1VQX0FERFIgPSAyMA0KICAgICtjb25zdCBfRl9TRVRTSUcgPSBf
X19GX1NFVFNJRw0KICAgICtjb25zdCBfV1NUT1BQRUQgPSAyDQogICAgK2NvbnN0IF9fUENfVkRJ
U0FCTEUgPSA4DQogICAgK2NvbnN0IF9fU0NfTVFfT1BFTl9NQVggPSAyNw0KICAgICtjb25zdCBf
WDg2X0VGTEFHU19QRl9CSVQgPSAyDQogICAgK2NvbnN0IF9SVE1fTkVXQUREUkxBQkVMID0gNzIN
CiAgICArY29uc3QgX1NPQ0tfUEFDS0VUID0gMTANCiAgICArY29uc3QgX19fTlJfbXFfdW5saW5r
ID0gMjQxDQogICAgK2NvbnN0IF9SVE1HUlBfTkVJR0ggPSA0DQogICAgK2NvbnN0IF9QRl9XQU5Q
SVBFID0gMjUNCiAgICArY29uc3QgX1JUTV9ERUxBRERSID0gMjENCiAgICArY29uc3QgX0xPQ0tf
VU4gPSA4DQogICAgK2NvbnN0IF9QT0xMX0lOID0gMQ0KICAgICtjb25zdCBfTUFDVkxBTl9NQUNB
RERSX0ZMVVNIID0gMg0KICAgICtjb25zdCBfUlRQUk9UX0ROUk9VVEVEID0gMTMNCiAgICArY29u
c3QgX01BQ1ZMQU5fTU9ERV9TT1VSQ0UgPSAxNg0KICAgICtjb25zdCBfU1lTX3NldHBnaWQgPSBf
X19OUl9zZXRwZ2lkDQogICAgK2NvbnN0IF9fX0lGTEFfR0VORVZFX01BWCA9IDEyDQogICAgK2Nv
bnN0IF9TSU9DQURETVVMVEkgPSAweDg5MzENCiAgICArY29uc3QgX1JUTVNHX05FV1JPVVRFID0g
MHgyMQ0KICAgICtjb25zdCBfRkZJX1RZUEVfQ09NUExFWCA9IDE1DQogICAgK2NvbnN0IF9IQVZF
X0NPU0wgPSAxDQogICAgK2NvbnN0IF9OSV9NQVhIT1NUID0gMTAyNQ0KICAgICtjb25zdCBfSEFW
RV9TWVNfTU9VTlRfSCA9IDENCiAgICArY29uc3QgX05PX1JFQ09WRVJZID0gMw0KICAgICtjb25z
dCBfSUZMQV9WWExBTl9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9JRkxBX0JPTkRfTUlJTU9OID0g
Mw0KICAgICtjb25zdCBfSVBERUZUVEwgPSA2NA0KICAgICtjb25zdCBfUlRBWF9NVFUgPSAyDQog
ICAgK2NvbnN0IF9FTkVUUkVTRVQgPSAxMDINCiAgICArY29uc3QgX19fRkxUX0hBU19RVUlFVF9O
QU5fXyA9IDENCiAgICArY29uc3QgX0lGTEFfSU5FVF9DT05GID0gMQ0KICAgICtjb25zdCBfU0lH
X0FUT01JQ19NQVggPSAoMjE0NzQ4MzY0NykNCiAgICArY29uc3QgX1NUQV9QUFNGUkVRID0gMHgw
MDAyDQogICAgK2NvbnN0IF9JTl9JU0RJUiA9IDB4NDAwMDAwMDANCiAgICArY29uc3QgX0lDTVA2
X0VDSE9fUkVQTFkgPSAxMjkNCiAgICArY29uc3QgX1RDWE9OQyA9IDB4NTQwQQ0KICAgICtjb25z
dCBfUlRDRl9NQVNRID0gMHgwMDQwMDAwMA0KICAgICtjb25zdCBfQUZfQlJJREdFID0gX1BGX0JS
SURHRQ0KICAgICtjb25zdCBfUFJfVElNSU5HX1RJTUVTVEFNUCA9IDENCiAgICArY29uc3QgX0lQ
VjZfUE1UVURJU0NfT01JVCA9IDUNCiAgICArY29uc3QgX0lMTF9JTExUUlAgPSA0DQogICAgK2Nv
bnN0IF9JUE9QVF9SRVNFUlZFRDIgPSAweDYwDQogICAgK2NvbnN0IF9fX05EVVNFUk9QVF9NQVgg
PSAyDQogICAgK2NvbnN0IF9TWU5DX0ZJTEVfUkFOR0VfV1JJVEUgPSAyDQogICAgK2NvbnN0IF9T
VEFfSU5TID0gMHgwMDEwDQogICAgK2NvbnN0IF9fUE9TSVgyX0NPTExfV0VJR0hUU19NQVggPSAy
DQogICAgK2NvbnN0IF9fWE9QRU5fWENVX1ZFUlNJT04gPSA0DQogICAgK2NvbnN0IF9FTk9DU0kg
PSA1MA0KICAgICtjb25zdCBfWEFUVFJfTElTVF9NQVggPSA2NTUzNg0KICAgICtjb25zdCBfWDg2
X0NSMF9ORV9CSVQgPSA1DQogICAgK2NvbnN0IF9TWVNfcHNlbGVjdDYgPSBfX19OUl9wc2VsZWN0
Ng0KICAgICtjb25zdCBfVE9TVE9QID0gMDAwMDQwMA0KICAgICtjb25zdCBfVElPQ1BLVF9TVE9Q
ID0gNA0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfUFJPVEVDVCA9IDYNCiAgICArY29uc3QgX19T
Q19TSUdOQUxTID0gMTU4DQogICAgK2NvbnN0IF9TWVNfc2V0eGF0dHIgPSBfX19OUl9zZXR4YXR0
cg0KICAgICtjb25zdCBfUkVOQU1FX1dISVRFT1VUID0gKDEgPDwgMikNCiAgICArY29uc3QgX0lG
QV9GX05PREFEID0gMHgwMg0KICAgICtjb25zdCBfX0xBUkdFRklMRV9TT1VSQ0UgPSAxDQogICAg
K2NvbnN0IF9fX1dJTlRfTUFYX18gPSAweGZmZmZmZmZmDQogICAgK2NvbnN0IF9FUEZOT1NVUFBP
UlQgPSA5Ng0KICAgICtjb25zdCBfU1lTX3NpZ2FsdHN0YWNrID0gX19fTlJfc2lnYWx0c3RhY2sN
CiAgICArY29uc3QgX1NDTmRMRUFTVDMyID0gImQiDQogICAgK2NvbnN0IF9JTlQxNl9XSURUSCA9
IDE2DQogICAgK2NvbnN0IF9SVE5IX0ZfT05MSU5LID0gNA0KICAgICtjb25zdCBfR0FJX1dBSVQg
PSAwDQogICAgK2NvbnN0IF9fX05SX2xvb2t1cF9kY29va2llID0gMjEyDQogICAgK2NvbnN0IF9f
X05SX21pbmNvcmUgPSAyNw0KICAgICtjb25zdCBfQVJQSFJEX1RVTk5FTDYgPSA3NjkNCiAgICAr
Y29uc3QgX1NPTF9SWFJQQyA9IDI3Mg0KICAgICtjb25zdCBfX1BDXzJfU1lNTElOS1MgPSAyMA0K
ICAgICtjb25zdCBfSUNNUDZfRFNUX1VOUkVBQ0hfTk9ST1VURSA9IDANCiAgICArY29uc3QgX0RO
X0FUVFJJQiA9IDB4MDAwMDAwMjANCiAgICArY29uc3QgX1BUUkFDRV9TRVRSRUdTID0gMTMNCiAg
ICArY29uc3QgX19fTFA2NF9fID0gMQ0KICAgICtjb25zdCBfRl9TRUFMX1NFQUwgPSAweDAwMDEN
CiAgICArY29uc3QgX01MRF9MSVNURU5FUl9RVUVSWSA9IDEzMA0KICAgICtjb25zdCBfU1lTX2lu
b3RpZnlfaW5pdDEgPSBfX19OUl9pbm90aWZ5X2luaXQxDQogICAgK2NvbnN0IF9fX05SX2FjY3Qg
PSAxNjMNCiAgICArY29uc3QgX01TR19GQVNUT1BFTiA9IDUzNjg3MDkxMg0KICAgICtjb25zdCBf
X19zaWdldmVudF90X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9SVE5MR1JQX0lQVjZfTVJPVVRF
X1IgPSAzMQ0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MREZMQUdTID0g
MTEyMQ0KICAgICtjb25zdCBfSUZMQV9NQUNWTEFOX1VOU1BFQyA9IDANCiAgICArY29uc3QgX1BB
Q0tFVF9BVVhEQVRBID0gOA0KICAgICtjb25zdCBfSUZMQV9CT05EX1VOU1BFQyA9IDANCiAgICAr
Y29uc3QgX0lGTEFfR0VORVZFX0xBQkVMID0gMTENCiAgICArY29uc3QgX1BSX1VOQUxJR05fU0lH
QlVTID0gMg0KICAgICtjb25zdCBfRl9UTE9DSyA9IDINCiAgICArY29uc3QgX1NUQVRYX1RZUEUg
PSAweDAwMDENCiAgICArY29uc3QgX19QT1NJWF9TUElOX0xPQ0tTID0gMjAwODA5DQogICAgK2Nv
bnN0IF9QRl9SWFJQQyA9IDMzDQogICAgK2NvbnN0IF9UQ1BfS0VFUElETEUgPSA0DQogICAgK2Nv
bnN0IF9fX1VJTlRfRkFTVDY0X01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZmDQogICAgK2NvbnN0
IF9fX05SX2xsaXN0eGF0dHIgPSAxOTUNCiAgICArY29uc3QgX19fTlJfcnNlcSA9IDMzNA0KICAg
ICtjb25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMA0KICAgICtjb25zdCBf
T19BQ0NNT0RFID0gMDAwMw0KICAgICtjb25zdCBfVElPQ01fUk5HID0gMHgwODANCiAgICArY29u
c3QgX19fTlJfa2V4ZWNfZmlsZV9sb2FkID0gMzIwDQogICAgK2NvbnN0IF9JTlJfT1BFTl9DVVIg
PSAxMDI0DQogICAgK2NvbnN0IF9fX05SX3JtZGlyID0gODQNCiAgICArY29uc3QgX0VUSF9QX0FY
MjUgPSAweDAwMDINCiAgICArY29uc3QgX19CSVRTX1NJR0lORk9fQ09OU1RTX0FSQ0hfSCA9IDEN
CiAgICArY29uc3QgX0hBVkVfSU5UVFlQRVNfSCA9IDENCiAgICArY29uc3QgX0VERVNUQUREUlJF
USA9IDg5DQogICAgK2NvbnN0IF9fX05HUkVHID0gMjMNCiAgICArY29uc3QgX1JFR19SMTAgPSAy
DQogICAgK2NvbnN0IF9SRUdfUjExID0gMw0KICAgICtjb25zdCBfSVBWNl9GUkVFQklORCA9IDc4
DQogICAgK2NvbnN0IF9SRUdfUjEzID0gNQ0KICAgICtjb25zdCBfX19oYXZlX3B0aHJlYWRfYXR0
cl90ID0gMQ0KICAgICtjb25zdCBfUkVHX1IxNSA9IDcNCiAgICArY29uc3QgX05JX01BWFNFUlYg
PSAzMg0KICAgICtjb25zdCBfQVJQSFJEX0hETEMgPSBfQVJQSFJEX0NJU0NPDQogICAgK2NvbnN0
IF9fX0dMSUJDX1VTRV9JRUNfNjA1NTlfQkZQX0VYVCA9IDENCiAgICArY29uc3QgX1BGX1VOSVgg
PSBfUEZfTE9DQUwNCiAgICArY29uc3QgX19fU1lTQ0FMTF9XT1JEU0laRSA9IDY0DQogICAgK2Nv
bnN0IF9TWVNfY3JlYXQgPSBfX19OUl9jcmVhdA0KICAgICtjb25zdCBfVElPQ1NDVFRZID0gMHg1
NDBFDQogICAgK2NvbnN0IF9GRklfTEFTVF9BQkkgPSA4DQogICAgK2NvbnN0IF9OREFfTUFTVEVS
ID0gOQ0KICAgICtjb25zdCBfRVRIX1BfSUVFRVBVUCA9IDB4MGEwMA0KICAgICtjb25zdCBfUEZf
SVJEQSA9IDIzDQogICAgK2NvbnN0IF9IQVZFX1NZU19USU1FWF9IID0gMQ0KICAgICtjb25zdCBf
X19GTFRfREVDSU1BTF9ESUdfXyA9IDkNCiAgICArY29uc3QgX19fTlJfdGltZXJfY3JlYXRlID0g
MjIyDQogICAgK2NvbnN0IF9TWVNfZ2V0cGdpZCA9IF9fX05SX2dldHBnaWQNCiAgICArY29uc3Qg
X0ZGSV82NF9CSVRfTUFYID0gOTIyMzM3MjAzNjg1NDc3NTgwNw0KICAgICtjb25zdCBfSUZMQV9N
QUNTRUNfSUNWX0xFTiA9IDMNCiAgICArY29uc3QgX0IxODAwID0gMDAwMDAxMg0KICAgICtjb25z
dCBfQlMwID0gMDAwMDAwMA0KICAgICtjb25zdCBfQlMxID0gMDAyMDAwMA0KICAgICtjb25zdCBf
X1NZU19USU1FX0ggPSAxDQogICAgK2NvbnN0IF9fUE9TSVhfQVJHX01BWCA9IDQwOTYNCiAgICAr
Y29uc3QgX19fU0NIQVJfV0lEVEhfXyA9IDgNCiAgICArY29uc3QgX19fRkxUX1JBRElYX18gPSAy
DQogICAgK2NvbnN0IF9YODZfQ1IzX1BXVF9CSVQgPSAzDQogICAgK2NvbnN0IF9QT1JUX1ZEUF9S
RVNQT05TRV9VTlVTRURfVlRJRCA9IDMNCiAgICArY29uc3QgX19fREVDMzJfRVBTSUxPTl9fID0g
MUUtNg0KICAgICtjb25zdCBfSUZMQV9WWExBTl9MRUFSTklORyA9IDcNCiAgICArY29uc3QgX0VQ
T0xMRVQgPSAyMTQ3NDgzNjQ4DQogICAgK2NvbnN0IF9GX1NFVExLVzY0ID0gNw0KICAgICtjb25z
dCBfX19VU0VfQVRGSUxFID0gMQ0KICAgICtjb25zdCBfU19JUkVBRCA9IF9TX0lSVVNSDQogICAg
K2NvbnN0IF9QVFJBQ0VfU0VURlBSRUdTID0gMTUNCiAgICArY29uc3QgX0lGRl9SVU5OSU5HID0g
NjQNCiAgICArY29uc3QgX0hBVkVfVVRJTUVOU0FUID0gMQ0KICAgICtjb25zdCBfX1BDX1NZTUxJ
TktfTUFYID0gMTkNCiAgICArY29uc3QgX1g4Nl9FRkxBR1NfWkZfQklUID0gNg0KICAgICtjb25z
dCBfRl9TRVRMSzY0ID0gNg0KICAgICtjb25zdCBfX1BPU0lYX1BBVEhfTUFYID0gMjU2DQogICAg
K2NvbnN0IF9JTl9DTEFTU0FfTlNISUZUID0gMjQNCiAgICArY29uc3QgX1BBQ0tFVF9USU1FU1RB
TVAgPSAxNw0KICAgICtjb25zdCBfX19QT1NJWF9GQURWX0RPTlRORUVEID0gNA0KICAgICtjb25z
dCBfSVBQUk9UT19NVFAgPSA5Mg0KICAgICt0eXBlIF9pZmFjZSBzdHJ1Y3Qge30NCiAgICArdHlw
ZSBfX19sb2NhbGVfZGF0YSBzdHJ1Y3Qge30NCiAgICArdHlwZSB0aW1ldmFsX3NlY190IGludDY0
DQogICAgK3R5cGUgdGltZXZhbF91c2VjX3QgaW50NjQNCiAgICArdHlwZSB0aW1ldmFsIHN0cnVj
dCB7IHR2X3NlYyB0aW1ldmFsX3NlY190OyB0dl91c2VjIHRpbWV2YWxfdXNlY190OyB9DQogICAg
Kw0KICAgICtmdW5jICh0diAqdGltZXZhbCkgc2V0X3VzZWMoeCBpbnQzMikgew0KICAgICsJdHYu
dHZfdXNlYyA9IHRpbWV2YWxfdXNlY190KHgpDQogICAgK30NCiAgICArdHlwZSB0aW1lc3BlY19z
ZWNfdCBpbnQ2NA0KICAgICt0eXBlIHRpbWVzcGVjX25zZWNfdCBpbnQ2NA0KICAgICt0eXBlIHRp
bWVzcGVjIHN0cnVjdCB7IHR2X3NlYyB0aW1lc3BlY19zZWNfdDsgdHZfbnNlYyB0aW1lc3BlY19u
c2VjX3Q7IH0NCiAgICArDQogICAgK2Z1bmMgKHRzICp0aW1lc3BlYykgc2V0X3NlYyh4IGludDY0
KSB7DQogICAgKwl0cy50dl9zZWMgPSB0aW1lc3BlY19zZWNfdCh4KQ0KICAgICt9DQogICAgKw0K
ICAgICtmdW5jICh0cyAqdGltZXNwZWMpIHNldF9uc2VjKHggaW50MzIpIHsNCiAgICArCXRzLnR2
X25zZWMgPSB0aW1lc3BlY19uc2VjX3QoeCkNCiAgICArfQ0KICAgICt0eXBlIGVwb2xsZXZlbnQg
c3RydWN0IHsgZXZlbnRzIHVpbnQzMjsgZGF0YSBbOF1ieXRlIH0NCiAgICArY29uc3QgX0VQT0xM
RVRwb3MgPSBfRVBPTExFVA0KICAgICt0eXBlIHNlbXQgc3RydWN0IHsgX19zaXplIFszMSsxXWlu
dDg7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9DQogICAgZGlmZiAtLWdpdCBhL2dlbmVyYXRl
ZC9zaWd0YWIuZ28gYi9nZW5lcmF0ZWQvc2lndGFiLmdvDQogICAgbmV3IGZpbGUgbW9kZSAxMDA2
NDQNCiAgICBpbmRleCAwMDAwMDAwLi4wNmI0NmFmDQogICAgLS0tIC9kZXYvbnVsbA0KICAgICsr
KyBiL2dlbmVyYXRlZC9zaWd0YWIuZ28NCiAgICBAQCAtMCwwICsxLDcxIEBADQogICAgKy8vIEdl
bmVyYXRlZCBieSBta3NpZ3RhYi5zaC4gIERvIG5vdCBlZGl0Lg0KICAgICsNCiAgICArcGFja2Fn
ZSBydW50aW1lDQogICAgKw0KICAgICt2YXIgc2lndGFibGUgPSBbLi4uXXNpZ1RhYlR7DQogICAg
KwkwOiAgICAgICAgICB7MCwgIlNJR05PTkU6IG5vIHRyYXAifSwNCiAgICArCV9TSUdIVVA6ICAg
IHtfU2lnTm90aWZ5ICsgX1NpZ0tpbGwsICJTSUdIVVA6IHRlcm1pbmFsIGxpbmUgaGFuZ3VwIn0s
DQogICAgKwlfU0lHSU5UOiAgICB7X1NpZ05vdGlmeSArIF9TaWdLaWxsLCAiU0lHSU5UOiBpbnRl
cnJ1cHQifSwNCiAgICArCV9TSUdRVUlUOiAgIHtfU2lnTm90aWZ5ICsgX1NpZ1Rocm93LCAiU0lH
UVVJVDogcXVpdCJ9LA0KICAgICsJX1NJR0lMTDogICAge19TaWdUaHJvdyArIF9TaWdVbmJsb2Nr
LCAiU0lHSUxMOiBpbGxlZ2FsIGluc3RydWN0aW9uIn0sDQogICAgKwlfU0lHVFJBUDogICB7X1Np
Z1Rocm93ICsgX1NpZ1VuYmxvY2ssICJTSUdUUkFQOiB0cmFjZSB0cmFwIn0sDQogICAgKwlfU0lH
QUJSVDogICB7X1NpZ05vdGlmeSArIF9TaWdUaHJvdywgIlNJR0FCUlQ6IGFib3J0In0sDQogICAg
KwlfU0lHQlVTOiAgICB7X1NpZ1BhbmljICsgX1NpZ1VuYmxvY2ssICJTSUdCVVM6IGJ1cyBlcnJv
ciJ9LA0KICAgICsJX1NJR0ZQRTogICAge19TaWdQYW5pYyArIF9TaWdVbmJsb2NrLCAiU0lHRlBF
OiBmbG9hdGluZy1wb2ludCBleGNlcHRpb24ifSwNCiAgICArCV9TSUdLSUxMOiAgIHswLCAiU0lH
S0lMTDoga2lsbCJ9LA0KICAgICsJX1NJR1VTUjE6ICAge19TaWdOb3RpZnksICJTSUdVU1IxOiB1
c2VyLWRlZmluZWQgc2lnbmFsIDEifSwNCiAgICArCV9TSUdTRUdWOiAgIHtfU2lnUGFuaWMgKyBf
U2lnVW5ibG9jaywgIlNJR1NFR1Y6IHNlZ21lbnRhdGlvbiB2aW9sYXRpb24ifSwNCiAgICArCV9T
SUdVU1IyOiAgIHtfU2lnTm90aWZ5LCAiU0lHVVNSMjogdXNlci1kZWZpbmVkIHNpZ25hbCAyIn0s
DQogICAgKwlfU0lHUElQRTogICB7X1NpZ05vdGlmeSwgIlNJR1BJUEU6IHdyaXRlIHRvIGJyb2tl
biBwaXBlIn0sDQogICAgKwlfU0lHQUxSTTogICB7X1NpZ05vdGlmeSwgIlNJR0FMUk06IGFsYXJt
IGNsb2NrIn0sDQogICAgKwlfU0lHVEVSTTogICB7X1NpZ05vdGlmeSArIF9TaWdLaWxsLCAiU0lH
VEVSTTogdGVybWluYXRpb24ifSwNCiAgICArCV9TSUdDSExEOiAgIHtfU2lnTm90aWZ5ICsgX1Np
Z1VuYmxvY2ssICJTSUdDSExEOiBjaGlsZCBzdGF0dXMgaGFzIGNoYW5nZWQifSwNCiAgICArCV9T
SUdDT05UOiAgIHtfU2lnTm90aWZ5ICsgX1NpZ0RlZmF1bHQsICJTSUdDT05UOiBjb250aW51ZSJ9
LA0KICAgICsJX1NJR1NUT1A6ICAgezAsICJTSUdTVE9QOiBzdG9wIn0sDQogICAgKwlfU0lHVFNU
UDogICB7X1NpZ05vdGlmeSArIF9TaWdEZWZhdWx0LCAiU0lHVFNUUDoga2V5Ym9hcmQgc3RvcCJ9
LA0KICAgICsJX1NJR1RUSU46ICAge19TaWdOb3RpZnkgKyBfU2lnRGVmYXVsdCwgIlNJR1RUSU46
IGJhY2tncm91bmQgcmVhZCBmcm9tIHR0eSJ9LA0KICAgICsJX1NJR1RUT1U6ICAge19TaWdOb3Rp
ZnkgKyBfU2lnRGVmYXVsdCwgIlNJR1RUT1U6IGJhY2tncm91bmQgd3JpdGUgdG8gdHR5In0sDQog
ICAgKwlfU0lHVVJHOiAgICB7X1NpZ05vdGlmeSwgIlNJR1VSRzogdXJnZW50IGNvbmRpdGlvbiBv
biBzb2NrZXQifSwNCiAgICArCV9TSUdYQ1BVOiAgIHtfU2lnTm90aWZ5LCAiU0lHWENQVTogY3B1
IGxpbWl0IGV4Y2VlZGVkIn0sDQogICAgKwlfU0lHWEZTWjogICB7X1NpZ05vdGlmeSwgIlNJR1hG
U1o6IGZpbGUgc2l6ZSBsaW1pdCBleGNlZWRlZCJ9LA0KICAgICsJX1NJR1ZUQUxSTToge19TaWdO
b3RpZnksICJTSUdWVEFMUk06IHZpcnR1YWwgYWxhcm0gY2xvY2sifSwNCiAgICArCV9TSUdQUk9G
OiAgIHtfU2lnTm90aWZ5ICsgX1NpZ1VuYmxvY2ssICJTSUdQUk9GOiBwcm9maWxpbmcgYWxhcm0g
Y2xvY2sifSwNCiAgICArCV9TSUdXSU5DSDogIHtfU2lnTm90aWZ5LCAiU0lHV0lOQ0g6IHdpbmRv
dyBzaXplIGNoYW5nZSJ9LA0KICAgICsJX1NJR1NZUzogICAge19TaWdUaHJvdywgIlNJR1NZUzog
YmFkIHN5c3RlbSBjYWxsIn0sDQogICAgKwlfU0lHU1RLRkxUOiAge19TaWdUaHJvdyArIF9TaWdV
bmJsb2NrLCAiU0lHU1RLRkxUOiBzdGFjayBmYXVsdCJ9LA0KICAgICsJX1NJR1BXUjogICAgIHtf
U2lnTm90aWZ5LCAiU0lHUFdSOiBwb3dlciBmYWlsdXJlIHJlc3RhcnQifSwNCiAgICArCV9TSUdQ
T0xMOiAgICB7X1NpZ05vdGlmeSwgIlNJR1BPTEw6IHBvbGxhYmxlIGV2ZW50IG9jY3VycmVkIn0s
DQogICAgKwkzMjoge19TaWdTZXRTdGFjayArIF9TaWdVbmJsb2NrLCAic2lnbmFsIDMyIn0sIC8q
IFNJR0NBTkNFTDsgc2VlIGlzc3VlIDY5OTcgKi8NCiAgICArCTMzOiB7X1NpZ1NldFN0YWNrICsg
X1NpZ1VuYmxvY2ssICJzaWduYWwgMzMifSwgLyogU0lHU0VUWElEOyBzZWUgaXNzdWVzIDM4NzEs
IDk0MDAsIDEyNDk4ICovDQogICAgKwkzNDoge19TaWdOb3RpZnksICJzaWduYWwgMzQifSwNCiAg
ICArCTM1OiB7X1NpZ05vdGlmeSwgInNpZ25hbCAzNSJ9LA0KICAgICsJMzY6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDM2In0sDQogICAgKwkzNzoge19TaWdOb3RpZnksICJzaWduYWwgMzcifSwNCiAg
ICArCTM4OiB7X1NpZ05vdGlmeSwgInNpZ25hbCAzOCJ9LA0KICAgICsJMzk6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDM5In0sDQogICAgKwk0MDoge19TaWdOb3RpZnksICJzaWduYWwgNDAifSwNCiAg
ICArCTQxOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0MSJ9LA0KICAgICsJNDI6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDQyIn0sDQogICAgKwk0Mzoge19TaWdOb3RpZnksICJzaWduYWwgNDMifSwNCiAg
ICArCTQ0OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0NCJ9LA0KICAgICsJNDU6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDQ1In0sDQogICAgKwk0Njoge19TaWdOb3RpZnksICJzaWduYWwgNDYifSwNCiAg
ICArCTQ3OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA0NyJ9LA0KICAgICsJNDg6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDQ4In0sDQogICAgKwk0OToge19TaWdOb3RpZnksICJzaWduYWwgNDkifSwNCiAg
ICArCTUwOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1MCJ9LA0KICAgICsJNTE6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDUxIn0sDQogICAgKwk1Mjoge19TaWdOb3RpZnksICJzaWduYWwgNTIifSwNCiAg
ICArCTUzOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1MyJ9LA0KICAgICsJNTQ6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDU0In0sDQogICAgKwk1NToge19TaWdOb3RpZnksICJzaWduYWwgNTUifSwNCiAg
ICArCTU2OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1NiJ9LA0KICAgICsJNTc6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDU3In0sDQogICAgKwk1ODoge19TaWdOb3RpZnksICJzaWduYWwgNTgifSwNCiAg
ICArCTU5OiB7X1NpZ05vdGlmeSwgInNpZ25hbCA1OSJ9LA0KICAgICsJNjA6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDYwIn0sDQogICAgKwk2MToge19TaWdOb3RpZnksICJzaWduYWwgNjEifSwNCiAg
ICArCTYyOiB7X1NpZ05vdGlmeSwgInNpZ25hbCA2MiJ9LA0KICAgICsJNjM6IHtfU2lnTm90aWZ5
LCAic2lnbmFsIDYzIn0sDQogICAgKwk2NDoge19TaWdOb3RpZnksICJzaWduYWwgNjQifSwNCiAg
ICArfQ0KICAgIGRpZmYgLS1naXQgYS9nZW5lcmF0ZWQvc3lzY2FsbF9hcmNoLmdvIGIvZ2VuZXJh
dGVkL3N5c2NhbGxfYXJjaC5nbw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXgg
MDAwMDAwMC4uM2Q4ZDdhYw0KICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9nZW5lcmF0ZWQv
c3lzY2FsbF9hcmNoLmdvDQogICAgQEAgLTAsMCArMSwzIEBADQogICAgK3BhY2thZ2Ugc3lzY2Fs
bA0KICAgICtjb25zdCBBUkNIID0gImFtZDY0Ig0KICAgICtjb25zdCBPUyA9ICJsaW51eCINCiAg
ICBkaWZmIC0tZ2l0IGEvZ2VuZXJhdGVkL3N5c2luZm8uZ28gYi9nZW5lcmF0ZWQvc3lzaW5mby5n
bw0KICAgIG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQogICAgaW5kZXggMDAwMDAwMC4uNGY2OGZmMA0K
ICAgIC0tLSAvZGV2L251bGwNCiAgICArKysgYi9nZW5lcmF0ZWQvc3lzaW5mby5nbw0KICAgIEBA
IC0wLDAgKzEsOTI4MiBAQA0KICAgICtwYWNrYWdlIHN5c2NhbGwNCiAgICAraW1wb3J0ICJ1bnNh
ZmUiDQogICAgK3R5cGUgXyB1bnNhZmUuUG9pbnRlcg0KICAgICt0eXBlIF9wdHJkaWZmX3QgaW50
NjQNCiAgICArdHlwZSBfc2l6ZV90IHVpbnQ2NA0KICAgICt0eXBlIF93Y2hhcl90IGludDMyDQog
ICAgK3R5cGUgX19fdV9jaGFyIHVpbnQ4DQogICAgK3R5cGUgX19fdV9zaG9ydCB1aW50MTYNCiAg
ICArdHlwZSBfX191X2ludCB1aW50MzINCiAgICArdHlwZSBfX191X2xvbmcgdWludDY0DQogICAg
K3R5cGUgX19faW50OF90IGludDgNCiAgICArdHlwZSBfX191aW50OF90IHVpbnQ4DQogICAgK3R5
cGUgX19faW50MTZfdCBpbnQxNg0KICAgICt0eXBlIF9fX3VpbnQxNl90IHVpbnQxNg0KICAgICt0
eXBlIF9fX2ludDMyX3QgaW50MzINCiAgICArdHlwZSBfX191aW50MzJfdCB1aW50MzINCiAgICAr
dHlwZSBfX19pbnQ2NF90IGludDY0DQogICAgK3R5cGUgX19fdWludDY0X3QgdWludDY0DQogICAg
K3R5cGUgX19faW50X2xlYXN0OF90IGludDgNCiAgICArdHlwZSBfX191aW50X2xlYXN0OF90IHVp
bnQ4DQogICAgK3R5cGUgX19faW50X2xlYXN0MTZfdCBpbnQxNg0KICAgICt0eXBlIF9fX3VpbnRf
bGVhc3QxNl90IHVpbnQxNg0KICAgICt0eXBlIF9fX2ludF9sZWFzdDMyX3QgaW50MzINCiAgICAr
dHlwZSBfX191aW50X2xlYXN0MzJfdCB1aW50MzINCiAgICArdHlwZSBfX19pbnRfbGVhc3Q2NF90
IGludDY0DQogICAgK3R5cGUgX19fdWludF9sZWFzdDY0X3QgdWludDY0DQogICAgK3R5cGUgX19f
cXVhZF90IGludDY0DQogICAgK3R5cGUgX19fdV9xdWFkX3QgdWludDY0DQogICAgK3R5cGUgX19f
aW50bWF4X3QgaW50NjQNCiAgICArdHlwZSBfX191aW50bWF4X3QgdWludDY0DQogICAgK3R5cGUg
X19fZGV2X3QgdWludDY0DQogICAgK3R5cGUgX19fdWlkX3QgdWludDMyDQogICAgK3R5cGUgX19f
Z2lkX3QgdWludDMyDQogICAgK3R5cGUgX19faW5vX3QgdWludDY0DQogICAgK3R5cGUgX19faW5v
NjRfdCB1aW50NjQNCiAgICArdHlwZSBfX19tb2RlX3QgdWludDMyDQogICAgK3R5cGUgX19fbmxp
bmtfdCB1aW50NjQNCiAgICArdHlwZSBfX19vZmZfdCBpbnQ2NA0KICAgICt0eXBlIF9fX29mZjY0
X3QgaW50NjQNCiAgICArdHlwZSBfX19waWRfdCBpbnQzMg0KICAgICt0eXBlIF9fX2ZzaWRfdCBz
dHJ1Y3QgeyBfX3ZhbCBbMSsxXWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX19mc2lkX3Qg
PSA4DQogICAgK3R5cGUgX19fY2xvY2tfdCBpbnQ2NA0KICAgICt0eXBlIF9fX3JsaW1fdCB1aW50
NjQNCiAgICArdHlwZSBfX19ybGltNjRfdCB1aW50NjQNCiAgICArdHlwZSBfX19pZF90IHVpbnQz
Mg0KICAgICt0eXBlIF9fX3RpbWVfdCBpbnQ2NA0KICAgICt0eXBlIF9fX3VzZWNvbmRzX3QgdWlu
dDMyDQogICAgK3R5cGUgX19fc3VzZWNvbmRzX3QgaW50NjQNCiAgICArdHlwZSBfX19kYWRkcl90
IGludDMyDQogICAgK3R5cGUgX19fa2V5X3QgaW50MzINCiAgICArdHlwZSBfX19jbG9ja2lkX3Qg
aW50MzINCiAgICArdHlwZSBfX190aW1lcl90ICpieXRlDQogICAgK3R5cGUgX19fYmxrc2l6ZV90
IGludDY0DQogICAgK3R5cGUgX19fYmxrY250X3QgaW50NjQNCiAgICArdHlwZSBfX19ibGtjbnQ2
NF90IGludDY0DQogICAgK3R5cGUgX19fZnNibGtjbnRfdCB1aW50NjQNCiAgICArdHlwZSBfX19m
c2Jsa2NudDY0X3QgdWludDY0DQogICAgK3R5cGUgX19fZnNmaWxjbnRfdCB1aW50NjQNCiAgICAr
dHlwZSBfX19mc2ZpbGNudDY0X3QgdWludDY0DQogICAgK3R5cGUgX19fZnN3b3JkX3QgaW50NjQN
CiAgICArdHlwZSBfX19zc2l6ZV90IGludDY0DQogICAgK3R5cGUgX19fc3lzY2FsbF9zbG9uZ190
IGludDY0DQogICAgK3R5cGUgX19fc3lzY2FsbF91bG9uZ190IHVpbnQ2NA0KICAgICt0eXBlIF9f
X2xvZmZfdCBpbnQ2NA0KICAgICt0eXBlIF9fX2NhZGRyX3QgKmludDgNCiAgICArdHlwZSBfX19p
bnRwdHJfdCBpbnQ2NA0KICAgICt0eXBlIF9fX3NvY2tsZW5fdCB1aW50MzINCiAgICArdHlwZSBf
X19zaWdfYXRvbWljX3QgaW50MzINCiAgICArdHlwZSBfdV9jaGFyIHVpbnQ4DQogICAgK3R5cGUg
X3Vfc2hvcnQgdWludDE2DQogICAgK3R5cGUgX3VfaW50IHVpbnQzMg0KICAgICt0eXBlIF91X2xv
bmcgdWludDY0DQogICAgK3R5cGUgX3F1YWRfdCBpbnQ2NA0KICAgICt0eXBlIF91X3F1YWRfdCB1
aW50NjQNCiAgICArdHlwZSBfZnNpZF90IHN0cnVjdCB7IF9fdmFsIFsxKzFdaW50MzI7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9mc2lkX3QgPSA4DQogICAgK3R5cGUgX2xvZmZfdCBpbnQ2NA0KICAg
ICt0eXBlIF9pbm9fdCB1aW50NjQNCiAgICArdHlwZSBfaW5vNjRfdCB1aW50NjQNCiAgICArdHlw
ZSBfZGV2X3QgdWludDY0DQogICAgK3R5cGUgX2dpZF90IHVpbnQzMg0KICAgICt0eXBlIF9tb2Rl
X3QgdWludDMyDQogICAgK3R5cGUgX25saW5rX3QgdWludDY0DQogICAgK3R5cGUgX3VpZF90IHVp
bnQzMg0KICAgICt0eXBlIF9vZmZfdCBpbnQ2NA0KICAgICt0eXBlIF9vZmY2NF90IGludDY0DQog
ICAgK3R5cGUgX3BpZF90IGludDMyDQogICAgK3R5cGUgX2lkX3QgdWludDMyDQogICAgK3R5cGUg
X3NzaXplX3QgaW50NjQNCiAgICArdHlwZSBfZGFkZHJfdCBpbnQzMg0KICAgICt0eXBlIF9jYWRk
cl90ICppbnQ4DQogICAgK3R5cGUgX2tleV90IGludDMyDQogICAgK3R5cGUgX2Nsb2NrX3QgaW50
NjQNCiAgICArdHlwZSBfY2xvY2tpZF90IGludDMyDQogICAgK3R5cGUgX3RpbWVfdCBpbnQ2NA0K
ICAgICt0eXBlIF90aW1lcl90ICpieXRlDQogICAgK3R5cGUgX3VzZWNvbmRzX3QgdWludDMyDQog
ICAgK3R5cGUgX3N1c2Vjb25kc190IGludDY0DQogICAgK3R5cGUgX3Vsb25nIHVpbnQ2NA0KICAg
ICt0eXBlIF91c2hvcnQgdWludDE2DQogICAgK3R5cGUgX3VpbnQgdWludDMyDQogICAgK3R5cGUg
X2ludDhfdCBpbnQ4DQogICAgK3R5cGUgX2ludDE2X3QgaW50MTYNCiAgICArdHlwZSBfaW50MzJf
dCBpbnQzMg0KICAgICt0eXBlIF9pbnQ2NF90IGludDY0DQogICAgK3R5cGUgX3VfaW50OF90IHVp
bnQ4DQogICAgK3R5cGUgX3VfaW50MTZfdCB1aW50MTYNCiAgICArdHlwZSBfdV9pbnQzMl90IHVp
bnQzMg0KICAgICt0eXBlIF91X2ludDY0X3QgdWludDY0DQogICAgK3R5cGUgX3JlZ2lzdGVyX3Qg
aW50NjQNCiAgICArdHlwZSBfX19zaWdzZXRfdCBzdHJ1Y3QgeyBfX3ZhbCBbMTUrMV11aW50NjQ7
IH0NCiAgICArY29uc3QgX3NpemVvZl9fX3NpZ3NldF90ID0gMTI4DQogICAgK3R5cGUgX3NpZ3Nl
dF90IHN0cnVjdCB7IF9fdmFsIFsxNSsxXXVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3Np
Z3NldF90ID0gMTI4DQogICAgK2NvbnN0IF9zaXplb2ZfdGltZXZhbCA9IDE2DQogICAgK2NvbnN0
IF9zaXplb2ZfdGltZXNwZWMgPSAxNg0KICAgICt0eXBlIF9fX2ZkX21hc2sgaW50NjQNCiAgICAr
dHlwZSBfZmRfc2V0IHN0cnVjdCB7IGZkc19iaXRzIFsxNSsxXWludDY0OyB9DQogICAgK2NvbnN0
IF9zaXplb2ZfZmRfc2V0ID0gMTI4DQogICAgK3R5cGUgX2ZkX21hc2sgaW50NjQNCiAgICArdHlw
ZSBfYmxrc2l6ZV90IGludDY0DQogICAgK3R5cGUgX2Jsa2NudF90IGludDY0DQogICAgK3R5cGUg
X2ZzYmxrY250X3QgdWludDY0DQogICAgK3R5cGUgX2ZzZmlsY250X3QgdWludDY0DQogICAgK3R5
cGUgX2Jsa2NudDY0X3QgaW50NjQNCiAgICArdHlwZSBfZnNibGtjbnQ2NF90IHVpbnQ2NA0KICAg
ICt0eXBlIF9mc2ZpbGNudDY0X3QgdWludDY0DQogICAgK3R5cGUgX19fcHRocmVhZF9yd2xvY2tf
YXJjaF90IHN0cnVjdCB7IF9fcmVhZGVycyB1aW50MzI7IF9fd3JpdGVycyB1aW50MzI7IF9fd3Jw
aGFzZV9mdXRleCB1aW50MzI7IF9fd3JpdGVyc19mdXRleCB1aW50MzI7IF9fcGFkMyB1aW50MzI7
IF9fcGFkNCB1aW50MzI7IF9fY3VyX3dyaXRlciBpbnQzMjsgX19zaGFyZWQgaW50MzI7IF9fcndl
bGlzaW9uIGludDg7IF9fcGFkMSBbNisxXXVpbnQ4OyBfX3BhZDIgdWludDY0OyBfX2ZsYWdzIHVp
bnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9fX3B0aHJl
YWRfcndsb2NrX2FyY2hfdCA9IDU2DQogICAgK3R5cGUgX19fcHRocmVhZF9pbnRlcm5hbF9saXN0
IHN0cnVjdCB7IF9fcHJldiAqX19fcHRocmVhZF9pbnRlcm5hbF9saXN0OyBfX25leHQgKl9fX3B0
aHJlYWRfaW50ZXJuYWxfbGlzdDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fcHRocmVhZF9pbnRl
cm5hbF9saXN0ID0gMTYNCiAgICArdHlwZSBfX19wdGhyZWFkX2xpc3RfdCBzdHJ1Y3QgeyBfX3By
ZXYgKl9fX3B0aHJlYWRfaW50ZXJuYWxfbGlzdDsgX19uZXh0ICpfX19wdGhyZWFkX2ludGVybmFs
X2xpc3Q7IH0NCiAgICArY29uc3QgX3NpemVvZl9fX3B0aHJlYWRfbGlzdF90ID0gMTYNCiAgICAr
dHlwZSBfX19wdGhyZWFkX211dGV4X3Mgc3RydWN0IHsgX19sb2NrIGludDMyOyBfX2NvdW50IHVp
bnQzMjsgX19vd25lciBpbnQzMjsgX19udXNlcnMgdWludDMyOyBfX2tpbmQgaW50MzI7IF9fc3Bp
bnMgaW50MTY7IF9fZWxpc2lvbiBpbnQxNjsgX19saXN0IF9fX3B0aHJlYWRfbGlzdF90OyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfX19wdGhyZWFkX211dGV4X3MgPSA0MA0KICAgICt0eXBlIF9fX3B0
aHJlYWRfY29uZF9zIHN0cnVjdCB7IF9fd3NlcSB1aW50NjQ7IF9fZzFfc3RhcnQgdWludDY0OyBf
X2dfcmVmcyBbMSsxXXVpbnQzMjsgX19nX3NpemUgWzErMV11aW50MzI7IF9fZzFfb3JpZ19zaXpl
IHVpbnQzMjsgX193cmVmcyB1aW50MzI7IF9fZ19zaWduYWxzIFsxKzFddWludDMyOyBHb2R1bXBf
MF9hbGlnbiBbMF1pbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fcHRocmVhZF9jb25kX3Mg
PSA0OA0KICAgICt0eXBlIF9wdGhyZWFkX3QgdWludDY0DQogICAgK3R5cGUgX3B0aHJlYWRfbXV0
ZXhhdHRyX3Qgc3RydWN0IHsgX19zaXplIFszKzFdaW50ODsgR29kdW1wXzBfYWxpZ24gWzBdaW50
MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9wdGhyZWFkX211dGV4YXR0cl90ID0gNA0KICAgICt0
eXBlIF9wdGhyZWFkX2NvbmRhdHRyX3Qgc3RydWN0IHsgX19zaXplIFszKzFdaW50ODsgR29kdW1w
XzBfYWxpZ24gWzBdaW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9wdGhyZWFkX2NvbmRhdHRy
X3QgPSA0DQogICAgK3R5cGUgX3B0aHJlYWRfa2V5X3QgdWludDMyDQogICAgK3R5cGUgX3B0aHJl
YWRfb25jZV90IGludDMyDQogICAgK3R5cGUgX3B0aHJlYWRfYXR0cl90IHN0cnVjdCB7IF9fc2l6
ZSBbNTUrMV1pbnQ4OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6
ZW9mX3B0aHJlYWRfYXR0cl90ID0gNTYNCiAgICArdHlwZSBfcHRocmVhZF9tdXRleF90IHN0cnVj
dCB7IF9fZGF0YSBfX19wdGhyZWFkX211dGV4X3M7IH0NCiAgICArY29uc3QgX3NpemVvZl9wdGhy
ZWFkX211dGV4X3QgPSA0MA0KICAgICt0eXBlIF9wdGhyZWFkX2NvbmRfdCBzdHJ1Y3QgeyBfX2Rh
dGEgX19fcHRocmVhZF9jb25kX3M7IH0NCiAgICArY29uc3QgX3NpemVvZl9wdGhyZWFkX2NvbmRf
dCA9IDQ4DQogICAgK3R5cGUgX3B0aHJlYWRfcndsb2NrX3Qgc3RydWN0IHsgX19kYXRhIF9fX3B0
aHJlYWRfcndsb2NrX2FyY2hfdDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3B0aHJlYWRfcndsb2Nr
X3QgPSA1Ng0KICAgICt0eXBlIF9wdGhyZWFkX3J3bG9ja2F0dHJfdCBzdHJ1Y3QgeyBfX3NpemUg
WzcrMV1pbnQ4OyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X3B0aHJlYWRfcndsb2NrYXR0cl90ID0gOA0KICAgICt0eXBlIF9wdGhyZWFkX3NwaW5sb2NrX3Qg
aW50MzINCiAgICArdHlwZSBfcHRocmVhZF9iYXJyaWVyX3Qgc3RydWN0IHsgX19zaXplIFszMSsx
XWludDg7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcHRo
cmVhZF9iYXJyaWVyX3QgPSAzMg0KICAgICt0eXBlIF9wdGhyZWFkX2JhcnJpZXJhdHRyX3Qgc3Ry
dWN0IHsgX19zaXplIFszKzFdaW50ODsgR29kdW1wXzBfYWxpZ24gWzBdaW50MzI7IH0NCiAgICAr
Y29uc3QgX3NpemVvZl9wdGhyZWFkX2JhcnJpZXJhdHRyX3QgPSA0DQogICAgK3R5cGUgX2RpcmVu
dCBzdHJ1Y3QgeyBkX2lubyB1aW50NjQ7IGRfb2ZmIGludDY0OyBkX3JlY2xlbiB1aW50MTY7IGRf
dHlwZSB1aW50ODsgZF9uYW1lIFsyNTUrMV1pbnQ4OyBHb2R1bXBfMF9wYWQgWzVdYnl0ZTsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX2RpcmVudCA9IDI4MA0KICAgICt0eXBlIF9kaXJlbnQ2NCBzdHJ1
Y3QgeyBkX2lubyB1aW50NjQ7IGRfb2ZmIGludDY0OyBkX3JlY2xlbiB1aW50MTY7IGRfdHlwZSB1
aW50ODsgZF9uYW1lIFsyNTUrMV1pbnQ4OyBHb2R1bXBfMF9wYWQgWzVdYnl0ZTsgfQ0KICAgICtj
b25zdCBfc2l6ZW9mX2RpcmVudDY0ID0gMjgwDQogICAgK3R5cGUgX0RJUiBzdHJ1Y3QgeyB9DQog
ICAgK3ZhciBfcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUgKmludDgNCiAgICArdmFyIF9wcm9ncmFt
X2ludm9jYXRpb25fc2hvcnRfbmFtZSAqaW50OA0KICAgICt0eXBlIF9lcnJvcl90IGludDMyDQog
ICAgK3R5cGUgX2Zsb2NrIHN0cnVjdCB7IGxfdHlwZSBpbnQxNjsgbF93aGVuY2UgaW50MTY7IGxf
c3RhcnQgaW50NjQ7IGxfbGVuIGludDY0OyBsX3BpZCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5
dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9mbG9jayA9IDMyDQogICAgK3R5cGUgX2Zsb2NrNjQg
c3RydWN0IHsgbF90eXBlIGludDE2OyBsX3doZW5jZSBpbnQxNjsgbF9zdGFydCBpbnQ2NDsgbF9s
ZW4gaW50NjQ7IGxfcGlkIGludDMyOyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX2Zsb2NrNjQgPSAzMg0KICAgICt0eXBlIF9pb3ZlYyBzdHJ1Y3QgeyBpb3ZfYmFz
ZSAqYnl0ZTsgaW92X2xlbiB1aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9pb3ZlYyA9IDE2
DQogICAgK3R5cGUgX2Zfb3duZXJfZXggc3RydWN0IHsgX3R5cGUgdWludDMyOyBwaWQgaW50MzI7
IH0NCiAgICArY29uc3QgX3NpemVvZl9mX293bmVyX2V4ID0gOA0KICAgICt0eXBlIF9maWxlX2hh
bmRsZSBzdHJ1Y3QgeyBoYW5kbGVfYnl0ZXMgdWludDMyOyBoYW5kbGVfdHlwZSBpbnQzMjsgZl9o
YW5kbGUgWzBddWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9maWxlX2hhbmRsZSA9IDgNCiAg
ICArdHlwZSBfc3RhdCBzdHJ1Y3QgeyBzdF9kZXYgdWludDY0OyBzdF9pbm8gdWludDY0OyBzdF9u
bGluayB1aW50NjQ7IHN0X21vZGUgdWludDMyOyBzdF91aWQgdWludDMyOyBzdF9naWQgdWludDMy
OyBfX3BhZDAgaW50MzI7IHN0X3JkZXYgdWludDY0OyBzdF9zaXplIGludDY0OyBzdF9ibGtzaXpl
IGludDY0OyBzdF9ibG9ja3MgaW50NjQ7IHN0X2F0aW0gVGltZXNwZWM7IHN0X210aW0gVGltZXNw
ZWM7IHN0X2N0aW0gVGltZXNwZWM7IF9fZ2xpYmNfcmVzZXJ2ZWQgWzIrMV1pbnQ2NDsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX3N0YXQgPSAxNDQNCiAgICArdHlwZSBfc3RhdDY0IHN0cnVjdCB7IHN0
X2RldiB1aW50NjQ7IHN0X2lubyB1aW50NjQ7IHN0X25saW5rIHVpbnQ2NDsgc3RfbW9kZSB1aW50
MzI7IHN0X3VpZCB1aW50MzI7IHN0X2dpZCB1aW50MzI7IF9fcGFkMCBpbnQzMjsgc3RfcmRldiB1
aW50NjQ7IHN0X3NpemUgaW50NjQ7IHN0X2Jsa3NpemUgaW50NjQ7IHN0X2Jsb2NrcyBpbnQ2NDsg
c3RfYXRpbSBUaW1lc3BlYzsgc3RfbXRpbSBUaW1lc3BlYzsgc3RfY3RpbSBUaW1lc3BlYzsgX19n
bGliY19yZXNlcnZlZCBbMisxXWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc3RhdDY0ID0g
MTQ0DQogICAgK3R5cGUgX3N0YWNrX3Qgc3RydWN0IHsgc3Nfc3AgKmJ5dGU7IHNzX2ZsYWdzIGlu
dDMyOyBzc19zaXplIHVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3N0YWNrX3QgPSAyNA0K
ICAgICt0eXBlIF9ncmVnX3QgaW50NjQNCiAgICArdHlwZSBfZ3JlZ3NldF90IFsyMisxXWludDY0
DQogICAgK3R5cGUgX19saWJjX2ZweHJlZyBzdHJ1Y3QgeyBzaWduaWZpY2FuZCBbMysxXXVpbnQx
NjsgZXhwb25lbnQgdWludDE2OyBfX2dsaWJjX3Jlc2VydmVkMSBbMisxXXVpbnQxNjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX19saWJjX2ZweHJlZyA9IDE2DQogICAgK3R5cGUgX19saWJjX3htbXJl
ZyBzdHJ1Y3QgeyBlbGVtZW50IFszKzFddWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX2xp
YmNfeG1tcmVnID0gMTYNCiAgICArdHlwZSBfX2xpYmNfZnBzdGF0ZSBzdHJ1Y3QgeyBjd2QgdWlu
dDE2OyBzd2QgdWludDE2OyBmdHcgdWludDE2OyBmb3AgdWludDE2OyByaXAgdWludDY0OyByZHAg
dWludDY0OyBteGNzciB1aW50MzI7IG14Y3JfbWFzayB1aW50MzI7IF9zdCBbNysxXV9fbGliY19m
cHhyZWc7IF94bW0gWzE1KzFdX19saWJjX3htbXJlZzsgX19nbGliY19yZXNlcnZlZDEgWzIzKzFd
dWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX2xpYmNfZnBzdGF0ZSA9IDUxMg0KICAgICt0
eXBlIF9mcHJlZ3NldF90ICpfX2xpYmNfZnBzdGF0ZQ0KICAgICt0eXBlIF9tY29udGV4dF90IHN0
cnVjdCB7IGdyZWdzIF9ncmVnc2V0X3Q7IGZwcmVncyBfZnByZWdzZXRfdDsgX19yZXNlcnZlZDEg
WzcrMV11aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9tY29udGV4dF90ID0gMjU2DQogICAg
K3R5cGUgX3Vjb250ZXh0X3Qgc3RydWN0IHsgdWNfZmxhZ3MgdWludDY0OyB1Y19saW5rICpfdWNv
bnRleHRfdDsgdWNfc3RhY2sgX3N0YWNrX3Q7IHVjX21jb250ZXh0IF9tY29udGV4dF90OyB1Y19z
aWdtYXNrIF9zaWdzZXRfdDsgX19mcHJlZ3NfbWVtIF9fbGliY19mcHN0YXRlOyBfX3NzcCBbMysx
XXVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3Vjb250ZXh0X3QgPSA5NjgNCiAgICArdHlw
ZSBfdWludDhfdCB1aW50OA0KICAgICt0eXBlIF91aW50MTZfdCB1aW50MTYNCiAgICArdHlwZSBf
dWludDMyX3QgdWludDMyDQogICAgK3R5cGUgX3VpbnQ2NF90IHVpbnQ2NA0KICAgICt0eXBlIF9z
b2NrbGVuX3QgdWludDMyDQogICAgK3R5cGUgX3NhX2ZhbWlseV90IHVpbnQxNg0KICAgICt0eXBl
IF9zb2NrYWRkciBzdHJ1Y3QgeyBzYV9mYW1pbHkgdWludDE2OyBzYV9kYXRhIFsxMysxXWludDg7
IH0NCiAgICArY29uc3QgX3NpemVvZl9zb2NrYWRkciA9IDE2DQogICAgK3R5cGUgX3NvY2thZGRy
X3N0b3JhZ2Ugc3RydWN0IHsgc3NfZmFtaWx5IHVpbnQxNjsgX19zc19wYWRkaW5nIFsxMTcrMV1p
bnQ4OyBfX3NzX2FsaWduIHVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NvY2thZGRyX3N0
b3JhZ2UgPSAxMjgNCiAgICArdHlwZSBfbXNnaGRyIHN0cnVjdCB7IG1zZ19uYW1lICpieXRlOyBt
c2dfbmFtZWxlbiB1aW50MzI7IG1zZ19pb3YgKl9pb3ZlYzsgbXNnX2lvdmxlbiB1aW50NjQ7IG1z
Z19jb250cm9sICpieXRlOyBtc2dfY29udHJvbGxlbiB1aW50NjQ7IG1zZ19mbGFncyBpbnQzMjsg
R29kdW1wXzBfcGFkIFs0XWJ5dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9tc2doZHIgPSA1Ng0K
ICAgICt0eXBlIF9jbXNnaGRyIHN0cnVjdCB7IGNtc2dfbGVuIHVpbnQ2NDsgY21zZ19sZXZlbCBp
bnQzMjsgY21zZ190eXBlIGludDMyOyBfX2Ntc2dfZGF0YSBbMF11aW50ODsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX2Ntc2doZHIgPSAxNg0KICAgICt0eXBlIF91Y3JlZCBzdHJ1Y3QgeyBwaWQgaW50
MzI7IHVpZCB1aW50MzI7IGdpZCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl91Y3JlZCA9
IDEyDQogICAgK3R5cGUgX2xpbmdlciBzdHJ1Y3QgeyBsX29ub2ZmIGludDMyOyBsX2xpbmdlciBp
bnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2xpbmdlciA9IDgNCiAgICArdHlwZSBfb3NvY2th
ZGRyIHN0cnVjdCB7IHNhX2ZhbWlseSB1aW50MTY7IHNhX2RhdGEgWzEzKzFddWludDg7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9vc29ja2FkZHIgPSAxNg0KICAgICt0eXBlIF9fX1NPQ0tBRERSX0FS
RyBzdHJ1Y3QgeyBfX3NvY2thZGRyX18gKl9zb2NrYWRkcjsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X19fU09DS0FERFJfQVJHID0gOA0KICAgICt0eXBlIF9fX0NPTlNUX1NPQ0tBRERSX0FSRyBzdHJ1
Y3QgeyBfX3NvY2thZGRyX18gKl9zb2NrYWRkcjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fQ09O
U1RfU09DS0FERFJfQVJHID0gOA0KICAgICt0eXBlIF9tbXNnaGRyIHN0cnVjdCB7IG1zZ19oZHIg
X21zZ2hkcjsgbXNnX2xlbiB1aW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9DQogICAgK2Nv
bnN0IF9zaXplb2ZfbW1zZ2hkciA9IDY0DQogICAgK3R5cGUgX2luX2FkZHJfdCB1aW50MzINCiAg
ICArdHlwZSBfaW5fYWRkciBzdHJ1Y3QgeyBzX2FkZHIgdWludDMyOyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfaW5fYWRkciA9IDQNCiAgICArdHlwZSBfaXBfb3B0cyBzdHJ1Y3QgeyBpcF9kc3QgX2lu
X2FkZHI7IGlwX29wdHMgWzM5KzFdaW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lwX29wdHMg
PSA0NA0KICAgICt0eXBlIF9pcF9tcmVxbiBzdHJ1Y3QgeyBpbXJfbXVsdGlhZGRyIF9pbl9hZGRy
OyBpbXJfYWRkcmVzcyBfaW5fYWRkcjsgaW1yX2lmaW5kZXggaW50MzI7IH0NCiAgICArY29uc3Qg
X3NpemVvZl9pcF9tcmVxbiA9IDEyDQogICAgK3R5cGUgX2luX3BrdGluZm8gc3RydWN0IHsgaXBp
X2lmaW5kZXggaW50MzI7IGlwaV9zcGVjX2RzdCBfaW5fYWRkcjsgaXBpX2FkZHIgX2luX2FkZHI7
IH0NCiAgICArY29uc3QgX3NpemVvZl9pbl9wa3RpbmZvID0gMTINCiAgICArdHlwZSBfaW5fcG9y
dF90IHVpbnQxNg0KICAgICt0eXBlIF9zb2NrYWRkcl9pbiBzdHJ1Y3QgeyBzaW5fZmFtaWx5IHVp
bnQxNjsgc2luX3BvcnQgdWludDE2OyBzaW5fYWRkciBfaW5fYWRkcjsgc2luX3plcm8gWzcrMV11
aW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NvY2thZGRyX2luID0gMTYNCiAgICArdHlwZSBf
aXBfbXJlcSBzdHJ1Y3QgeyBpbXJfbXVsdGlhZGRyIF9pbl9hZGRyOyBpbXJfaW50ZXJmYWNlIF9p
bl9hZGRyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaXBfbXJlcSA9IDgNCiAgICArdHlwZSBfaXBf
bXJlcV9zb3VyY2Ugc3RydWN0IHsgaW1yX211bHRpYWRkciBfaW5fYWRkcjsgaW1yX2ludGVyZmFj
ZSBfaW5fYWRkcjsgaW1yX3NvdXJjZWFkZHIgX2luX2FkZHI7IH0NCiAgICArY29uc3QgX3NpemVv
Zl9pcF9tcmVxX3NvdXJjZSA9IDEyDQogICAgK2NvbnN0IF9zaXplb2ZfaXB2Nl9tcmVxID0gMjAN
CiAgICArdHlwZSBfZ3JvdXBfcmVxIHN0cnVjdCB7IGdyX2ludGVyZmFjZSB1aW50MzI7IGdyX2dy
b3VwIF9zb2NrYWRkcl9zdG9yYWdlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZ3JvdXBfcmVxID0g
MTM2DQogICAgK3R5cGUgX2dyb3VwX3NvdXJjZV9yZXEgc3RydWN0IHsgZ3NyX2ludGVyZmFjZSB1
aW50MzI7IGdzcl9ncm91cCBfc29ja2FkZHJfc3RvcmFnZTsgZ3NyX3NvdXJjZSBfc29ja2FkZHJf
c3RvcmFnZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2dyb3VwX3NvdXJjZV9yZXEgPSAyNjQNCiAg
ICArdHlwZSBfaXBfbXNmaWx0ZXIgc3RydWN0IHsgaW1zZl9tdWx0aWFkZHIgX2luX2FkZHI7IGlt
c2ZfaW50ZXJmYWNlIF9pbl9hZGRyOyBpbXNmX2Ztb2RlIHVpbnQzMjsgaW1zZl9udW1zcmMgdWlu
dDMyOyBpbXNmX3NsaXN0IFswKzFdX2luX2FkZHI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pcF9t
c2ZpbHRlciA9IDIwDQogICAgK3R5cGUgX2dyb3VwX2ZpbHRlciBzdHJ1Y3QgeyBnZl9pbnRlcmZh
Y2UgdWludDMyOyBnZl9ncm91cCBfc29ja2FkZHJfc3RvcmFnZTsgZ2ZfZm1vZGUgdWludDMyOyBn
Zl9udW1zcmMgdWludDMyOyBnZl9zbGlzdCBbMCsxXV9zb2NrYWRkcl9zdG9yYWdlOyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfZ3JvdXBfZmlsdGVyID0gMjcyDQogICAgK2NvbnN0IF9zaXplb2ZfaW42
X3BrdGluZm8gPSAyMA0KICAgICtjb25zdCBfc2l6ZW9mX2lwNl9tdHVpbmZvID0gMzINCiAgICAr
dHlwZSBfaW50X2xlYXN0OF90IGludDgNCiAgICArdHlwZSBfaW50X2xlYXN0MTZfdCBpbnQxNg0K
ICAgICt0eXBlIF9pbnRfbGVhc3QzMl90IGludDMyDQogICAgK3R5cGUgX2ludF9sZWFzdDY0X3Qg
aW50NjQNCiAgICArdHlwZSBfdWludF9sZWFzdDhfdCB1aW50OA0KICAgICt0eXBlIF91aW50X2xl
YXN0MTZfdCB1aW50MTYNCiAgICArdHlwZSBfdWludF9sZWFzdDMyX3QgdWludDMyDQogICAgK3R5
cGUgX3VpbnRfbGVhc3Q2NF90IHVpbnQ2NA0KICAgICt0eXBlIF9pbnRfZmFzdDhfdCBpbnQ4DQog
ICAgK3R5cGUgX2ludF9mYXN0MTZfdCBpbnQ2NA0KICAgICt0eXBlIF9pbnRfZmFzdDMyX3QgaW50
NjQNCiAgICArdHlwZSBfaW50X2Zhc3Q2NF90IGludDY0DQogICAgK3R5cGUgX3VpbnRfZmFzdDhf
dCB1aW50OA0KICAgICt0eXBlIF91aW50X2Zhc3QxNl90IHVpbnQ2NA0KICAgICt0eXBlIF91aW50
X2Zhc3QzMl90IHVpbnQ2NA0KICAgICt0eXBlIF91aW50X2Zhc3Q2NF90IHVpbnQ2NA0KICAgICt0
eXBlIF9pbnRwdHJfdCBpbnQ2NA0KICAgICt0eXBlIF91aW50cHRyX3QgdWludDY0DQogICAgK3R5
cGUgX2ludG1heF90IGludDY0DQogICAgK3R5cGUgX3VpbnRtYXhfdCB1aW50NjQNCiAgICArdHlw
ZSBfdGNwX3NlcSB1aW50MzINCiAgICArdHlwZSBfdGNwaGRyIHN0cnVjdCB7IHRoX3Nwb3J0IHVp
bnQxNjsgdGhfZHBvcnQgdWludDE2OyB0aF9zZXEgdWludDMyOyB0aF9hY2sgdWludDMyOyBHb2R1
bXBfMF9wYWQgWzFdYnl0ZTsgdGhfZmxhZ3MgdWludDg7IHRoX3dpbiB1aW50MTY7IHRoX3N1bSB1
aW50MTY7IHRoX3VycCB1aW50MTY7IEdvZHVtcF8xX2FsaWduIFswXWludDMyOyB9DQogICAgK2Nv
bnN0IF9zaXplb2ZfdGNwaGRyID0gMjANCiAgICArdHlwZSBfdGNwX2luZm8gc3RydWN0IHsgdGNw
aV9zdGF0ZSB1aW50ODsgdGNwaV9jYV9zdGF0ZSB1aW50ODsgdGNwaV9yZXRyYW5zbWl0cyB1aW50
ODsgdGNwaV9wcm9iZXMgdWludDg7IHRjcGlfYmFja29mZiB1aW50ODsgdGNwaV9vcHRpb25zIHVp
bnQ4OyB0Y3BpX3J0byB1aW50MzI7IHRjcGlfYXRvIHVpbnQzMjsgdGNwaV9zbmRfbXNzIHVpbnQz
MjsgdGNwaV9yY3ZfbXNzIHVpbnQzMjsgdGNwaV91bmFja2VkIHVpbnQzMjsgdGNwaV9zYWNrZWQg
dWludDMyOyB0Y3BpX2xvc3QgdWludDMyOyB0Y3BpX3JldHJhbnMgdWludDMyOyB0Y3BpX2ZhY2tl
dHMgdWludDMyOyB0Y3BpX2xhc3RfZGF0YV9zZW50IHVpbnQzMjsgdGNwaV9sYXN0X2Fja19zZW50
IHVpbnQzMjsgdGNwaV9sYXN0X2RhdGFfcmVjdiB1aW50MzI7IHRjcGlfbGFzdF9hY2tfcmVjdiB1
aW50MzI7IHRjcGlfcG10dSB1aW50MzI7IHRjcGlfcmN2X3NzdGhyZXNoIHVpbnQzMjsgdGNwaV9y
dHQgdWludDMyOyB0Y3BpX3J0dHZhciB1aW50MzI7IHRjcGlfc25kX3NzdGhyZXNoIHVpbnQzMjsg
dGNwaV9zbmRfY3duZCB1aW50MzI7IHRjcGlfYWR2bXNzIHVpbnQzMjsgdGNwaV9yZW9yZGVyaW5n
IHVpbnQzMjsgdGNwaV9yY3ZfcnR0IHVpbnQzMjsgdGNwaV9yY3Zfc3BhY2UgdWludDMyOyB0Y3Bp
X3RvdGFsX3JldHJhbnMgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdGNwX2luZm8gPSAx
MDQNCiAgICArdHlwZSBfdGNwX21kNXNpZyBzdHJ1Y3QgeyB0Y3BtX2FkZHIgX3NvY2thZGRyX3N0
b3JhZ2U7IHRjcG1fZmxhZ3MgdWludDg7IHRjcG1fcHJlZml4bGVuIHVpbnQ4OyB0Y3BtX2tleWxl
biB1aW50MTY7IF9fdGNwbV9wYWQgdWludDMyOyB0Y3BtX2tleSBbNzkrMV11aW50ODsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX3RjcF9tZDVzaWcgPSAyMTYNCiAgICArdHlwZSBfdGNwX3JlcGFpcl9v
cHQgc3RydWN0IHsgb3B0X2NvZGUgdWludDMyOyBvcHRfdmFsIHVpbnQzMjsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX3RjcF9yZXBhaXJfb3B0ID0gOA0KICAgICt0eXBlIF90Y3BfY29va2llX3RyYW5z
YWN0aW9ucyBzdHJ1Y3QgeyB0Y3BjdF9mbGFncyB1aW50MTY7IF9fdGNwY3RfcGFkMSB1aW50ODsg
dGNwY3RfY29va2llX2Rlc2lyZWQgdWludDg7IHRjcGN0X3NfZGF0YV9kZXNpcmVkIHVpbnQxNjsg
dGNwY3RfdXNlZCB1aW50MTY7IHRjcGN0X3ZhbHVlIFs1MzUrMV11aW50ODsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX3RjcF9jb29raWVfdHJhbnNhY3Rpb25zID0gNTQ0DQogICAgK3R5cGUgX3RjcF9y
ZXBhaXJfd2luZG93IHN0cnVjdCB7IHNuZF93bDEgdWludDMyOyBzbmRfd25kIHVpbnQzMjsgbWF4
X3dpbmRvdyB1aW50MzI7IHJjdl93bmQgdWludDMyOyByY3Zfd3VwIHVpbnQzMjsgfQ0KICAgICtj
b25zdCBfc2l6ZW9mX3RjcF9yZXBhaXJfd2luZG93ID0gMjANCiAgICArdHlwZSBfdGltZXN0YW1w
IHN0cnVjdCB7IGxlbiB1aW50ODsgcHRyIHVpbnQ4OyBkYXRhIFs4KzFddWludDMyOyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfdGltZXN0YW1wID0gNDANCiAgICArdHlwZSBfaXBoZHIgc3RydWN0IHsg
R29kdW1wXzBfcGFkIFsxXWJ5dGU7IHRvcyB1aW50ODsgdG90X2xlbiB1aW50MTY7IGlkIHVpbnQx
NjsgZnJhZ19vZmYgdWludDE2OyB0dGwgdWludDg7IHByb3RvY29sIHVpbnQ4OyBjaGVjayB1aW50
MTY7IHNhZGRyIHVpbnQzMjsgZGFkZHIgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaXBo
ZHIgPSAyMA0KICAgICt0eXBlIF9pcCBzdHJ1Y3QgeyBHb2R1bXBfMF9wYWQgWzFdYnl0ZTsgaXBf
dG9zIHVpbnQ4OyBpcF9sZW4gdWludDE2OyBpcF9pZCB1aW50MTY7IGlwX29mZiB1aW50MTY7IGlw
X3R0bCB1aW50ODsgaXBfcCB1aW50ODsgaXBfc3VtIHVpbnQxNjsgaXBfc3JjIF9pbl9hZGRyOyBp
cF9kc3QgX2luX2FkZHI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pcCA9IDIwDQogICAgK3R5cGUg
X2lwX3RpbWVzdGFtcCBzdHJ1Y3QgeyBpcHRfY29kZSB1aW50ODsgaXB0X2xlbiB1aW50ODsgaXB0
X3B0ciB1aW50ODsgZGF0YSBbOCsxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lwX3Rp
bWVzdGFtcCA9IDQwDQogICAgK3R5cGUgX19fczggaW50OA0KICAgICt0eXBlIF9fX3U4IHVpbnQ4
DQogICAgK3R5cGUgX19fczE2IGludDE2DQogICAgK3R5cGUgX19fdTE2IHVpbnQxNg0KICAgICt0
eXBlIF9fX3MzMiBpbnQzMg0KICAgICt0eXBlIF9fX3UzMiB1aW50MzINCiAgICArdHlwZSBfX19z
NjQgaW50NjQNCiAgICArdHlwZSBfX191NjQgdWludDY0DQogICAgK3R5cGUgX19fa2VybmVsX2Zk
X3NldCBzdHJ1Y3QgeyBmZHNfYml0cyBbMTUrMV11aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVv
Zl9fX2tlcm5lbF9mZF9zZXQgPSAxMjgNCiAgICArdHlwZSBfX19rZXJuZWxfc2lnaGFuZGxlcl90
IGZ1bmMoaW50MzIpDQogICAgK3R5cGUgX19fa2VybmVsX2tleV90IGludDMyDQogICAgK3R5cGUg
X19fa2VybmVsX21xZF90IGludDMyDQogICAgK3R5cGUgX19fa2VybmVsX29sZF91aWRfdCB1aW50
MTYNCiAgICArdHlwZSBfX19rZXJuZWxfb2xkX2dpZF90IHVpbnQxNg0KICAgICt0eXBlIF9fX2tl
cm5lbF9vbGRfZGV2X3QgdWludDY0DQogICAgK3R5cGUgX19fa2VybmVsX2xvbmdfdCBpbnQ2NA0K
ICAgICt0eXBlIF9fX2tlcm5lbF91bG9uZ190IHVpbnQ2NA0KICAgICt0eXBlIF9fX2tlcm5lbF9p
bm9fdCB1aW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfbW9kZV90IHVpbnQzMg0KICAgICt0eXBl
IF9fX2tlcm5lbF9waWRfdCBpbnQzMg0KICAgICt0eXBlIF9fX2tlcm5lbF9pcGNfcGlkX3QgaW50
MzINCiAgICArdHlwZSBfX19rZXJuZWxfdWlkX3QgdWludDMyDQogICAgK3R5cGUgX19fa2VybmVs
X2dpZF90IHVpbnQzMg0KICAgICt0eXBlIF9fX2tlcm5lbF9zdXNlY29uZHNfdCBpbnQ2NA0KICAg
ICt0eXBlIF9fX2tlcm5lbF9kYWRkcl90IGludDMyDQogICAgK3R5cGUgX19fa2VybmVsX3VpZDMy
X3QgdWludDMyDQogICAgK3R5cGUgX19fa2VybmVsX2dpZDMyX3QgdWludDMyDQogICAgK3R5cGUg
X19fa2VybmVsX3NpemVfdCB1aW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfc3NpemVfdCBpbnQ2
NA0KICAgICt0eXBlIF9fX2tlcm5lbF9wdHJkaWZmX3QgaW50NjQNCiAgICArdHlwZSBfX19rZXJu
ZWxfZnNpZF90IHN0cnVjdCB7IHZhbCBbMSsxXWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2Zf
X19rZXJuZWxfZnNpZF90ID0gOA0KICAgICt0eXBlIF9fX2tlcm5lbF9vZmZfdCBpbnQ2NA0KICAg
ICt0eXBlIF9fX2tlcm5lbF9sb2ZmX3QgaW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfdGltZV90
IGludDY0DQogICAgK3R5cGUgX19fa2VybmVsX3RpbWU2NF90IGludDY0DQogICAgK3R5cGUgX19f
a2VybmVsX2Nsb2NrX3QgaW50NjQNCiAgICArdHlwZSBfX19rZXJuZWxfdGltZXJfdCBpbnQzMg0K
ICAgICt0eXBlIF9fX2tlcm5lbF9jbG9ja2lkX3QgaW50MzINCiAgICArdHlwZSBfX19rZXJuZWxf
Y2FkZHJfdCAqaW50OA0KICAgICt0eXBlIF9fX2tlcm5lbF91aWQxNl90IHVpbnQxNg0KICAgICt0
eXBlIF9fX2tlcm5lbF9naWQxNl90IHVpbnQxNg0KICAgICt0eXBlIF9fX2xlMTYgdWludDE2DQog
ICAgK3R5cGUgX19fYmUxNiB1aW50MTYNCiAgICArdHlwZSBfX19sZTMyIHVpbnQzMg0KICAgICt0
eXBlIF9fX2JlMzIgdWludDMyDQogICAgK3R5cGUgX19fbGU2NCB1aW50NjQNCiAgICArdHlwZSBf
X19iZTY0IHVpbnQ2NA0KICAgICt0eXBlIF9fX3N1bTE2IHVpbnQxNg0KICAgICt0eXBlIF9fX3dz
dW0gdWludDMyDQogICAgK3R5cGUgX19fcG9sbF90IHVpbnQzMg0KICAgICt0eXBlIF9ldGhoZHIg
c3RydWN0IHsgaF9kZXN0IFs1KzFddWludDg7IGhfc291cmNlIFs1KzFddWludDg7IGhfcHJvdG8g
dWludDE2OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZXRoaGRyID0gMTQNCiAgICArdHlwZSBfZXRo
ZXJfYWRkciBzdHJ1Y3QgeyBldGhlcl9hZGRyX29jdGV0IFs1KzFddWludDg7IH0NCiAgICArY29u
c3QgX3NpemVvZl9ldGhlcl9hZGRyID0gNg0KICAgICt0eXBlIF9ldGhlcl9oZWFkZXIgc3RydWN0
IHsgZXRoZXJfZGhvc3QgWzUrMV11aW50ODsgZXRoZXJfc2hvc3QgWzUrMV11aW50ODsgZXRoZXJf
dHlwZSB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl9ldGhlcl9oZWFkZXIgPSAxNA0KICAg
ICt0eXBlIF9hcnBoZHIgc3RydWN0IHsgYXJfaHJkIHVpbnQxNjsgYXJfcHJvIHVpbnQxNjsgYXJf
aGxuIHVpbnQ4OyBhcl9wbG4gdWludDg7IGFyX29wIHVpbnQxNjsgfQ0KICAgICtjb25zdCBfc2l6
ZW9mX2FycGhkciA9IDgNCiAgICArdHlwZSBfYXJwcmVxIHN0cnVjdCB7IGFycF9wYSBfc29ja2Fk
ZHI7IGFycF9oYSBfc29ja2FkZHI7IGFycF9mbGFncyBpbnQzMjsgYXJwX25ldG1hc2sgX3NvY2th
ZGRyOyBhcnBfZGV2IFsxNSsxXWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9hcnByZXEgPSA2
OA0KICAgICt0eXBlIF9hcnByZXFfb2xkIHN0cnVjdCB7IGFycF9wYSBfc29ja2FkZHI7IGFycF9o
YSBfc29ja2FkZHI7IGFycF9mbGFncyBpbnQzMjsgYXJwX25ldG1hc2sgX3NvY2thZGRyOyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfYXJwcmVxX29sZCA9IDUyDQogICAgK3R5cGUgX2FycGRfcmVxdWVz
dCBzdHJ1Y3QgeyByZXEgdWludDE2OyBpcCB1aW50MzI7IGRldiB1aW50NjQ7IHN0YW1wIHVpbnQ2
NDsgdXBkYXRlZCB1aW50NjQ7IGhhIFs2KzFddWludDg7IEdvZHVtcF8wX3BhZCBbMV1ieXRlOyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfYXJwZF9yZXF1ZXN0ID0gNDANCiAgICArdHlwZSBfZXRoZXJf
YXJwIHN0cnVjdCB7IGVhX2hkciBfYXJwaGRyOyBhcnBfc2hhIFs1KzFddWludDg7IGFycF9zcGEg
WzMrMV11aW50ODsgYXJwX3RoYSBbNSsxXXVpbnQ4OyBhcnBfdHBhIFszKzFddWludDg7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9ldGhlcl9hcnAgPSAyOA0KICAgICt0eXBlIF9zaWdfYXRvbWljX3Qg
aW50MzINCiAgICArdHlwZSBfc2lndmFsIHN0cnVjdCB7IHNpdmFsX2ludCBpbnQzMjsgR29kdW1w
XzBfcGFkIFs0XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0OyB9DQogICAgK2NvbnN0IF9z
aXplb2Zfc2lndmFsID0gOA0KICAgICt0eXBlIF9fX3NpZ3ZhbF90IHN0cnVjdCB7IHNpdmFsX2lu
dCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IEdvZHVtcF8xX2FsaWduIFswXWludDY0OyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfX19zaWd2YWxfdCA9IDgNCiAgICArdHlwZSBfc2lnaW5mb190
IHN0cnVjdCB7IHNpX3NpZ25vIGludDMyOyBzaV9lcnJubyBpbnQzMjsgc2lfY29kZSBpbnQzMjsg
X19wYWQwIGludDMyOyBfc2lmaWVsZHMgc3RydWN0IHsgX3BhZCBbMjcrMV1pbnQzMjsgR29kdW1w
XzBfYWxpZ24gWzBdaW50NjQ7IH07IH0NCiAgICArY29uc3QgX3NpemVvZl9zaWdpbmZvX3QgPSAx
MjgNCiAgICArdHlwZSBfc2lndmFsX3Qgc3RydWN0IHsgc2l2YWxfaW50IGludDMyOyBHb2R1bXBf
MF9wYWQgWzRdYnl0ZTsgR29kdW1wXzFfYWxpZ24gWzBdaW50NjQ7IH0NCiAgICArY29uc3QgX3Np
emVvZl9zaWd2YWxfdCA9IDgNCiAgICArdHlwZSBfc2lnZXZlbnQgc3RydWN0IHsgc2lnZXZfdmFs
dWUgX19fc2lndmFsX3Q7IHNpZ2V2X3NpZ25vIGludDMyOyBzaWdldl9ub3RpZnkgaW50MzI7IF9z
aWdldl91biBzdHJ1Y3QgeyBfcGFkIFsxMSsxXWludDMyOyBHb2R1bXBfMF9hbGlnbiBbMF1pbnQ2
NDsgfTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NpZ2V2ZW50ID0gNjQNCiAgICArdHlwZSBfc2ln
ZXZlbnRfdCBzdHJ1Y3QgeyBzaWdldl92YWx1ZSBfX19zaWd2YWxfdDsgc2lnZXZfc2lnbm8gaW50
MzI7IHNpZ2V2X25vdGlmeSBpbnQzMjsgX3NpZ2V2X3VuIHN0cnVjdCB7IF9wYWQgWzExKzFdaW50
MzI7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9OyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc2ln
ZXZlbnRfdCA9IDY0DQogICAgK3R5cGUgX19fc2lnaGFuZGxlcl90IGZ1bmMoaW50MzIpDQogICAg
K3R5cGUgX3NpZ2hhbmRsZXJfdCBmdW5jKGludDMyKQ0KICAgICt0eXBlIF9zaWdfdCBmdW5jKGlu
dDMyKQ0KICAgICt0eXBlIF9zaWdhY3Rpb24gc3RydWN0IHsgX19zaWdhY3Rpb25faGFuZGxlciBz
dHJ1Y3QgeyBzYV9oYW5kbGVyIF9fX3NpZ2hhbmRsZXJfdDsgfTsgc2FfbWFzayBfX19zaWdzZXRf
dDsgc2FfZmxhZ3MgaW50MzI7IHNhX3Jlc3RvcmVyIGZ1bmMoKTsgfQ0KICAgICtjb25zdCBfc2l6
ZW9mX3NpZ2FjdGlvbiA9IDE1Mg0KICAgICt2YXIgX19zeXNfc2lnbGlzdCBbNjQrMV0qaW50OA0K
ICAgICt2YXIgX3N5c19zaWdsaXN0IFs2NCsxXSppbnQ4DQogICAgK3R5cGUgX19mcHhfc3dfYnl0
ZXMgc3RydWN0IHsgbWFnaWMxIHVpbnQzMjsgZXh0ZW5kZWRfc2l6ZSB1aW50MzI7IHhzdGF0ZV9i
diB1aW50NjQ7IHhzdGF0ZV9zaXplIHVpbnQzMjsgX19nbGliY19yZXNlcnZlZDEgWzYrMV11aW50
MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9fZnB4X3N3X2J5dGVzID0gNDgNCiAgICArdHlwZSBf
X2ZwcmVnIHN0cnVjdCB7IHNpZ25pZmljYW5kIFszKzFddWludDE2OyBleHBvbmVudCB1aW50MTY7
IH0NCiAgICArY29uc3QgX3NpemVvZl9fZnByZWcgPSAxMA0KICAgICt0eXBlIF9fZnB4cmVnIHN0
cnVjdCB7IHNpZ25pZmljYW5kIFszKzFddWludDE2OyBleHBvbmVudCB1aW50MTY7IF9fZ2xpYmNf
cmVzZXJ2ZWQxIFsyKzFddWludDE2OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX2ZweHJlZyA9IDE2
DQogICAgK3R5cGUgX194bW1yZWcgc3RydWN0IHsgZWxlbWVudCBbMysxXXVpbnQzMjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX194bW1yZWcgPSAxNg0KICAgICt0eXBlIF9fZnBzdGF0ZSBzdHJ1Y3Qg
eyBjd2QgdWludDE2OyBzd2QgdWludDE2OyBmdHcgdWludDE2OyBmb3AgdWludDE2OyByaXAgdWlu
dDY0OyByZHAgdWludDY0OyBteGNzciB1aW50MzI7IG14Y3JfbWFzayB1aW50MzI7IF9zdCBbNysx
XV9fZnB4cmVnOyBfeG1tIFsxNSsxXV9feG1tcmVnOyBfX2dsaWJjX3Jlc2VydmVkMSBbMjMrMV11
aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9fZnBzdGF0ZSA9IDUxMg0KICAgICt0eXBlIF9z
aWdjb250ZXh0IHN0cnVjdCB7IHI4IHVpbnQ2NDsgcjkgdWludDY0OyByMTAgdWludDY0OyByMTEg
dWludDY0OyByMTIgdWludDY0OyByMTMgdWludDY0OyByMTQgdWludDY0OyByMTUgdWludDY0OyBy
ZGkgdWludDY0OyByc2kgdWludDY0OyByYnAgdWludDY0OyByYnggdWludDY0OyByZHggdWludDY0
OyByYXggdWludDY0OyByY3ggdWludDY0OyByc3AgdWludDY0OyByaXAgdWludDY0OyBlZmxhZ3Mg
dWludDY0OyBjcyB1aW50MTY7IGdzIHVpbnQxNjsgZnMgdWludDE2OyBfX3BhZDAgdWludDE2OyBl
cnIgdWludDY0OyB0cmFwbm8gdWludDY0OyBvbGRtYXNrIHVpbnQ2NDsgY3IyIHVpbnQ2NDsgZnBz
dGF0ZSAqX19mcHN0YXRlOyBfX3Jlc2VydmVkMSBbNysxXXVpbnQ2NDsgfQ0KICAgICtjb25zdCBf
c2l6ZW9mX3NpZ2NvbnRleHQgPSAyNTYNCiAgICArdHlwZSBfX3hzYXZlX2hkciBzdHJ1Y3QgeyB4
c3RhdGVfYnYgdWludDY0OyBfX2dsaWJjX3Jlc2VydmVkMSBbMSsxXXVpbnQ2NDsgX19nbGliY19y
ZXNlcnZlZDIgWzQrMV11aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9feHNhdmVfaGRyID0g
NjQNCiAgICArdHlwZSBfX3ltbWhfc3RhdGUgc3RydWN0IHsgeW1taF9zcGFjZSBbNjMrMV11aW50
MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9feW1taF9zdGF0ZSA9IDI1Ng0KICAgICt0eXBlIF9f
eHN0YXRlIHN0cnVjdCB7IGZwc3RhdGUgX19mcHN0YXRlOyB4c3RhdGVfaGRyIF9feHNhdmVfaGRy
OyB5bW1oIF9feW1taF9zdGF0ZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX194c3RhdGUgPSA4MzIN
CiAgICArdHlwZSBfc2lnc3RhY2sgc3RydWN0IHsgc3Nfc3AgKmJ5dGU7IHNzX29uc3RhY2sgaW50
MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc2lnc3RhY2sg
PSAxNg0KICAgICt0eXBlIF93aW5zaXplIHN0cnVjdCB7IHdzX3JvdyB1aW50MTY7IHdzX2NvbCB1
aW50MTY7IHdzX3hwaXhlbCB1aW50MTY7IHdzX3lwaXhlbCB1aW50MTY7IH0NCiAgICArY29uc3Qg
X3NpemVvZl93aW5zaXplID0gOA0KICAgICt0eXBlIF90ZXJtaW8gc3RydWN0IHsgY19pZmxhZyB1
aW50MTY7IGNfb2ZsYWcgdWludDE2OyBjX2NmbGFnIHVpbnQxNjsgY19sZmxhZyB1aW50MTY7IGNf
bGluZSB1aW50ODsgY19jYyBbNysxXXVpbnQ4OyBHb2R1bXBfMF9wYWQgWzFdYnl0ZTsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX3Rlcm1pbyA9IDE4DQogICAgK3R5cGUgX2NjX3QgdWludDgNCiAgICAr
dHlwZSBfc3BlZWRfdCB1aW50MzINCiAgICArdHlwZSBfdGNmbGFnX3QgdWludDMyDQogICAgK3R5
cGUgX3Rlcm1pb3Mgc3RydWN0IHsgY19pZmxhZyB1aW50MzI7IGNfb2ZsYWcgdWludDMyOyBjX2Nm
bGFnIHVpbnQzMjsgY19sZmxhZyB1aW50MzI7IGNfbGluZSB1aW50ODsgY19jYyBbMzErMV11aW50
ODsgY19pc3BlZWQgdWludDMyOyBjX29zcGVlZCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVv
Zl90ZXJtaW9zID0gNjANCiAgICArY29uc3QgX3NpemVvZl9lcG9sbF9kYXRhID0gOA0KICAgICtj
b25zdCBfc2l6ZW9mX2Vwb2xsX2RhdGFfdCA9IDgNCiAgICArY29uc3QgX3NpemVvZl9lcG9sbF9l
dmVudCA9IDEyDQogICAgK3R5cGUgX3ByY3RsX21tX21hcCBzdHJ1Y3QgeyBzdGFydF9jb2RlIHVp
bnQ2NDsgZW5kX2NvZGUgdWludDY0OyBzdGFydF9kYXRhIHVpbnQ2NDsgZW5kX2RhdGEgdWludDY0
OyBzdGFydF9icmsgdWludDY0OyBicmsgdWludDY0OyBzdGFydF9zdGFjayB1aW50NjQ7IGFyZ19z
dGFydCB1aW50NjQ7IGFyZ19lbmQgdWludDY0OyBlbnZfc3RhcnQgdWludDY0OyBlbnZfZW5kIHVp
bnQ2NDsgYXV4diAqdWludDY0OyBhdXh2X3NpemUgdWludDMyOyBleGVfZmQgdWludDMyOyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfcHJjdGxfbW1fbWFwID0gMTA0DQogICAgK3R5cGUgX19fcHRyYWNl
X3BlZWtzaWdpbmZvX2FyZ3Mgc3RydWN0IHsgb2ZmIHVpbnQ2NDsgZmxhZ3MgdWludDMyOyBuciBp
bnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX19fcHRyYWNlX3BlZWtzaWdpbmZvX2FyZ3MgPSAx
Ng0KICAgICt0eXBlIF9fX3B0cmFjZV9zZWNjb21wX21ldGFkYXRhIHN0cnVjdCB7IGZpbHRlcl9v
ZmYgdWludDY0OyBmbGFncyB1aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9fX3B0cmFjZV9z
ZWNjb21wX21ldGFkYXRhID0gMTYNCiAgICArdHlwZSBfcmxpbV90IHVpbnQ2NA0KICAgICt0eXBl
IF9ybGltNjRfdCB1aW50NjQNCiAgICArdHlwZSBfcmxpbWl0IHN0cnVjdCB7IHJsaW1fY3VyIHVp
bnQ2NDsgcmxpbV9tYXggdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcmxpbWl0ID0gMTYN
CiAgICArdHlwZSBfcmxpbWl0NjQgc3RydWN0IHsgcmxpbV9jdXIgdWludDY0OyBybGltX21heCB1
aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9ybGltaXQ2NCA9IDE2DQogICAgK3R5cGUgX3J1
c2FnZSBzdHJ1Y3QgeyBydV91dGltZSBUaW1ldmFsOyBydV9zdGltZSBUaW1ldmFsOyBydV9tYXhy
c3MgaW50NjQ7IHJ1X2l4cnNzIGludDY0OyBydV9pZHJzcyBpbnQ2NDsgcnVfaXNyc3MgaW50NjQ7
IHJ1X21pbmZsdCBpbnQ2NDsgcnVfbWFqZmx0IGludDY0OyBydV9uc3dhcCBpbnQ2NDsgcnVfaW5i
bG9jayBpbnQ2NDsgcnVfb3VibG9jayBpbnQ2NDsgcnVfbXNnc25kIGludDY0OyBydV9tc2dyY3Yg
aW50NjQ7IHJ1X25zaWduYWxzIGludDY0OyBydV9udmNzdyBpbnQ2NDsgcnVfbml2Y3N3IGludDY0
OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcnVzYWdlID0gMTQ0DQogICAgK3R5cGUgX19fcmxpbWl0
X3Jlc291cmNlX3QgdWludDMyDQogICAgK3R5cGUgX19fcnVzYWdlX3dob190IGludDMyDQogICAg
K3R5cGUgX19fcHJpb3JpdHlfd2hpY2hfdCB1aW50MzINCiAgICArdHlwZSBfc3RhdHhfdGltZXN0
YW1wIHN0cnVjdCB7IHR2X3NlYyBpbnQ2NDsgdHZfbnNlYyB1aW50MzI7IF9fc3RhdHhfdGltZXN0
YW1wX3BhZDEgWzArMV1pbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3N0YXR4X3RpbWVzdGFt
cCA9IDE2DQogICAgK3R5cGUgX3N0YXR4IHN0cnVjdCB7IHN0eF9tYXNrIHVpbnQzMjsgc3R4X2Js
a3NpemUgdWludDMyOyBzdHhfYXR0cmlidXRlcyB1aW50NjQ7IHN0eF9ubGluayB1aW50MzI7IHN0
eF91aWQgdWludDMyOyBzdHhfZ2lkIHVpbnQzMjsgc3R4X21vZGUgdWludDE2OyBfX3N0YXR4X3Bh
ZDEgWzArMV11aW50MTY7IHN0eF9pbm8gdWludDY0OyBzdHhfc2l6ZSB1aW50NjQ7IHN0eF9ibG9j
a3MgdWludDY0OyBzdHhfYXR0cmlidXRlc19tYXNrIHVpbnQ2NDsgc3R4X2F0aW1lIF9zdGF0eF90
aW1lc3RhbXA7IHN0eF9idGltZSBfc3RhdHhfdGltZXN0YW1wOyBzdHhfY3RpbWUgX3N0YXR4X3Rp
bWVzdGFtcDsgc3R4X210aW1lIF9zdGF0eF90aW1lc3RhbXA7IHN0eF9yZGV2X21ham9yIHVpbnQz
Mjsgc3R4X3JkZXZfbWlub3IgdWludDMyOyBzdHhfZGV2X21ham9yIHVpbnQzMjsgc3R4X2Rldl9t
aW5vciB1aW50MzI7IF9fc3RhdHhfcGFkMiBbMTMrMV11aW50NjQ7IH0NCiAgICArY29uc3QgX3Np
emVvZl9zdGF0eCA9IDI1Ng0KICAgICt0eXBlIF90aW1lem9uZSBzdHJ1Y3QgeyB0el9taW51dGVz
d2VzdCBpbnQzMjsgdHpfZHN0dGltZSBpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3RpbWV6
b25lID0gOA0KICAgICt0eXBlIF9fX3RpbWV6b25lX3B0cl90ICpfdGltZXpvbmUNCiAgICArdHlw
ZSBfaXRpbWVydmFsIHN0cnVjdCB7IGl0X2ludGVydmFsIFRpbWV2YWw7IGl0X3ZhbHVlIFRpbWV2
YWw7IH0NCiAgICArY29uc3QgX3NpemVvZl9pdGltZXJ2YWwgPSAzMg0KICAgICt0eXBlIF9fX2l0
aW1lcl93aGljaF90IHVpbnQzMg0KICAgICt0eXBlIF90bXMgc3RydWN0IHsgdG1zX3V0aW1lIGlu
dDY0OyB0bXNfc3RpbWUgaW50NjQ7IHRtc19jdXRpbWUgaW50NjQ7IHRtc19jc3RpbWUgaW50NjQ7
IH0NCiAgICArY29uc3QgX3NpemVvZl90bXMgPSAzMg0KICAgICt0eXBlIF9pZHR5cGVfdCB1aW50
MzINCiAgICArdHlwZSBfc29ja2FkZHJfdW4gc3RydWN0IHsgc3VuX2ZhbWlseSB1aW50MTY7IHN1
bl9wYXRoIFsxMDcrMV1pbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc29ja2FkZHJfdW4gPSAx
MTANCiAgICArdHlwZSBfX19sb2NhbGVfc3RydWN0IHN0cnVjdCB7IF9fbG9jYWxlcyBbMTIrMV0q
X19fbG9jYWxlX2RhdGE7IF9fY3R5cGVfYiAqdWludDE2OyBfX2N0eXBlX3RvbG93ZXIgKmludDMy
OyBfX2N0eXBlX3RvdXBwZXIgKmludDMyOyBfX25hbWVzIFsxMisxXSppbnQ4OyB9DQogICAgK2Nv
bnN0IF9zaXplb2ZfX19sb2NhbGVfc3RydWN0ID0gMjMyDQogICAgK3R5cGUgX19fbG9jYWxlX3Qg
Kl9fX2xvY2FsZV9zdHJ1Y3QNCiAgICArdHlwZSBfbG9jYWxlX3QgKl9fX2xvY2FsZV9zdHJ1Y3QN
CiAgICArdHlwZSBfdXNlcl9mcHJlZ3Nfc3RydWN0IHN0cnVjdCB7IGN3ZCB1aW50MTY7IHN3ZCB1
aW50MTY7IGZ0dyB1aW50MTY7IGZvcCB1aW50MTY7IHJpcCB1aW50NjQ7IHJkcCB1aW50NjQ7IG14
Y3NyIHVpbnQzMjsgbXhjcl9tYXNrIHVpbnQzMjsgc3Rfc3BhY2UgWzMxKzFddWludDMyOyB4bW1f
c3BhY2UgWzYzKzFddWludDMyOyBwYWRkaW5nIFsyMysxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBf
c2l6ZW9mX3VzZXJfZnByZWdzX3N0cnVjdCA9IDUxMg0KICAgICt0eXBlIF91c2VyX3JlZ3Nfc3Ry
dWN0IHN0cnVjdCB7IHIxNSB1aW50NjQ7IHIxNCB1aW50NjQ7IHIxMyB1aW50NjQ7IHIxMiB1aW50
NjQ7IHJicCB1aW50NjQ7IHJieCB1aW50NjQ7IHIxMSB1aW50NjQ7IHIxMCB1aW50NjQ7IHI5IHVp
bnQ2NDsgcjggdWludDY0OyByYXggdWludDY0OyByY3ggdWludDY0OyByZHggdWludDY0OyByc2kg
dWludDY0OyByZGkgdWludDY0OyBvcmlnX3JheCB1aW50NjQ7IHJpcCB1aW50NjQ7IGNzIHVpbnQ2
NDsgZWZsYWdzIHVpbnQ2NDsgcnNwIHVpbnQ2NDsgc3MgdWludDY0OyBmc19iYXNlIHVpbnQ2NDsg
Z3NfYmFzZSB1aW50NjQ7IGRzIHVpbnQ2NDsgZXMgdWludDY0OyBmcyB1aW50NjQ7IGdzIHVpbnQ2
NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3VzZXJfcmVnc19zdHJ1Y3QgPSAyMTYNCiAgICArdHlw
ZSBfdXNlciBzdHJ1Y3QgeyByZWdzIF91c2VyX3JlZ3Nfc3RydWN0OyB1X2ZwdmFsaWQgaW50MzI7
IGkzODcgX3VzZXJfZnByZWdzX3N0cnVjdDsgdV90c2l6ZSB1aW50NjQ7IHVfZHNpemUgdWludDY0
OyB1X3NzaXplIHVpbnQ2NDsgc3RhcnRfY29kZSB1aW50NjQ7IHN0YXJ0X3N0YWNrIHVpbnQ2NDsg
c2lnbmFsIGludDY0OyByZXNlcnZlZCBpbnQzMjsgR29kdW1wXzBfcGFkIFs0XWJ5dGU7IHVfYXIw
ICpfdXNlcl9yZWdzX3N0cnVjdDsgdV9mcHN0YXRlICpfdXNlcl9mcHJlZ3Nfc3RydWN0OyBtYWdp
YyB1aW50NjQ7IHVfY29tbSBbMzErMV1pbnQ4OyB1X2RlYnVncmVnIFs3KzFddWludDY0OyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfdXNlciA9IDkxMg0KICAgICt0eXBlIF91dHNuYW1lIHN0cnVjdCB7
IHN5c25hbWUgWzY0KzFdaW50ODsgbm9kZW5hbWUgWzY0KzFdaW50ODsgcmVsZWFzZSBbNjQrMV1p
bnQ4OyB2ZXJzaW9uIFs2NCsxXWludDg7IG1hY2hpbmUgWzY0KzFdaW50ODsgZG9tYWlubmFtZSBb
NjQrMV1pbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdXRzbmFtZSA9IDM5MA0KICAgICt0eXBl
IF90aW1leCBzdHJ1Y3QgeyBtb2RlcyB1aW50MzI7IG9mZnNldCBpbnQ2NDsgZnJlcSBpbnQ2NDsg
bWF4ZXJyb3IgaW50NjQ7IGVzdGVycm9yIGludDY0OyBzdGF0dXMgaW50MzI7IGNvbnN0YW50IGlu
dDY0OyBwcmVjaXNpb24gaW50NjQ7IHRvbGVyYW5jZSBpbnQ2NDsgdGltZSBUaW1ldmFsOyB0aWNr
IGludDY0OyBwcHNmcmVxIGludDY0OyBqaXR0ZXIgaW50NjQ7IHNoaWZ0IGludDMyOyBzdGFiaWwg
aW50NjQ7IGppdGNudCBpbnQ2NDsgY2FsY250IGludDY0OyBlcnJjbnQgaW50NjQ7IHN0YmNudCBp
bnQ2NDsgdGFpIGludDMyOyBHb2R1bXBfMCBpbnQzMjsgR29kdW1wXzEgaW50MzI7IEdvZHVtcF8y
IGludDMyOyBHb2R1bXBfMyBpbnQzMjsgR29kdW1wXzQgaW50MzI7IEdvZHVtcF81IGludDMyOyBH
b2R1bXBfNiBpbnQzMjsgR29kdW1wXzcgaW50MzI7IEdvZHVtcF84IGludDMyOyBHb2R1bXBfOSBp
bnQzMjsgR29kdW1wXzEwIGludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdGltZXggPSAyMDgN
CiAgICArdHlwZSBfdG0gc3RydWN0IHsgdG1fc2VjIGludDMyOyB0bV9taW4gaW50MzI7IHRtX2hv
dXIgaW50MzI7IHRtX21kYXkgaW50MzI7IHRtX21vbiBpbnQzMjsgdG1feWVhciBpbnQzMjsgdG1f
d2RheSBpbnQzMjsgdG1feWRheSBpbnQzMjsgdG1faXNkc3QgaW50MzI7IHRtX2dtdG9mZiBpbnQ2
NDsgdG1fem9uZSAqaW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3RtID0gNTYNCiAgICArdHlw
ZSBfaXRpbWVyc3BlYyBzdHJ1Y3QgeyBpdF9pbnRlcnZhbCBUaW1lc3BlYzsgaXRfdmFsdWUgVGlt
ZXNwZWM7IH0NCiAgICArY29uc3QgX3NpemVvZl9pdGltZXJzcGVjID0gMzINCiAgICArdmFyIF9f
X3R6bmFtZSBbMSsxXSppbnQ4DQogICAgK3ZhciBfX19kYXlsaWdodCBpbnQzMg0KICAgICt2YXIg
X19fdGltZXpvbmUgaW50NjQNCiAgICArdmFyIF90em5hbWUgWzErMV0qaW50OA0KICAgICt2YXIg
X2RheWxpZ2h0IGludDMyDQogICAgK3ZhciBfZ2V0ZGF0ZV9lcnIgaW50MzINCiAgICArdmFyIF9f
X2Vudmlyb24gKippbnQ4DQogICAgK3ZhciBfZW52aXJvbiAqKmludDgNCiAgICArdmFyIF9vcHRh
cmcgKmludDgNCiAgICArdmFyIF9vcHRpbmQgaW50MzINCiAgICArdmFyIF9vcHRlcnIgaW50MzIN
CiAgICArdmFyIF9vcHRvcHQgaW50MzINCiAgICArdHlwZSBfcnBjZW50IHN0cnVjdCB7IHJfbmFt
ZSAqaW50ODsgcl9hbGlhc2VzICoqaW50ODsgcl9udW1iZXIgaW50MzI7IEdvZHVtcF8wX3BhZCBb
NF1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcnBjZW50ID0gMjQNCiAgICArdHlwZSBfbmV0
ZW50IHN0cnVjdCB7IG5fbmFtZSAqaW50ODsgbl9hbGlhc2VzICoqaW50ODsgbl9hZGRydHlwZSBp
bnQzMjsgbl9uZXQgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmV0ZW50ID0gMjQNCiAg
ICArdHlwZSBfaG9zdGVudCBzdHJ1Y3QgeyBoX25hbWUgKmludDg7IGhfYWxpYXNlcyAqKmludDg7
IGhfYWRkcnR5cGUgaW50MzI7IGhfbGVuZ3RoIGludDMyOyBoX2FkZHJfbGlzdCAqKmludDg7IH0N
CiAgICArY29uc3QgX3NpemVvZl9ob3N0ZW50ID0gMzINCiAgICArdHlwZSBfc2VydmVudCBzdHJ1
Y3QgeyBzX25hbWUgKmludDg7IHNfYWxpYXNlcyAqKmludDg7IHNfcG9ydCBpbnQzMjsgc19wcm90
byAqaW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3NlcnZlbnQgPSAzMg0KICAgICt0eXBlIF9w
cm90b2VudCBzdHJ1Y3QgeyBwX25hbWUgKmludDg7IHBfYWxpYXNlcyAqKmludDg7IHBfcHJvdG8g
aW50MzI7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcHJvdG9l
bnQgPSAyNA0KICAgICt0eXBlIF9hZGRyaW5mbyBzdHJ1Y3QgeyBhaV9mbGFncyBpbnQzMjsgYWlf
ZmFtaWx5IGludDMyOyBhaV9zb2NrdHlwZSBpbnQzMjsgYWlfcHJvdG9jb2wgaW50MzI7IGFpX2Fk
ZHJsZW4gdWludDMyOyBhaV9hZGRyICpfc29ja2FkZHI7IGFpX2Nhbm9ubmFtZSAqaW50ODsgYWlf
bmV4dCAqX2FkZHJpbmZvOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfYWRkcmluZm8gPSA0OA0KICAg
ICt0eXBlIF9nYWljYiBzdHJ1Y3QgeyBhcl9uYW1lICppbnQ4OyBhcl9zZXJ2aWNlICppbnQ4OyBh
cl9yZXF1ZXN0ICpfYWRkcmluZm87IGFyX3Jlc3VsdCAqX2FkZHJpbmZvOyBfX3JldHVybiBpbnQz
MjsgX19nbGliY19yZXNlcnZlZCBbNCsxXWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZ2Fp
Y2IgPSA1Ng0KICAgICt0eXBlIF9wYXNzd2Qgc3RydWN0IHsgcHdfbmFtZSAqaW50ODsgcHdfcGFz
c3dkICppbnQ4OyBwd191aWQgdWludDMyOyBwd19naWQgdWludDMyOyBwd19nZWNvcyAqaW50ODsg
cHdfZGlyICppbnQ4OyBwd19zaGVsbCAqaW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3Bhc3N3
ZCA9IDQ4DQogICAgK3R5cGUgX0ZJTEUgc3RydWN0IHsgfQ0KICAgICt0eXBlIF9ncm91cCBzdHJ1
Y3QgeyBncl9uYW1lICppbnQ4OyBncl9wYXNzd2QgKmludDg7IGdyX2dpZCB1aW50MzI7IGdyX21l
bSAqKmludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9ncm91cCA9IDMyDQogICAgK3R5cGUgX3Nv
Y2tfZmlsdGVyIHN0cnVjdCB7IGNvZGUgdWludDE2OyBqdCB1aW50ODsgamYgdWludDg7IGsgdWlu
dDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc29ja19maWx0ZXIgPSA4DQogICAgK3R5cGUgX3Nv
Y2tfZnByb2cgc3RydWN0IHsgbGVuIHVpbnQxNjsgZmlsdGVyICpfc29ja19maWx0ZXI7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9zb2NrX2Zwcm9nID0gMTYNCiAgICArdHlwZSBfc3lzaW5mbyBzdHJ1
Y3QgeyB1cHRpbWUgaW50NjQ7IGxvYWRzIFsyKzFddWludDY0OyB0b3RhbHJhbSB1aW50NjQ7IGZy
ZWVyYW0gdWludDY0OyBzaGFyZWRyYW0gdWludDY0OyBidWZmZXJyYW0gdWludDY0OyB0b3RhbHN3
YXAgdWludDY0OyBmcmVlc3dhcCB1aW50NjQ7IHByb2NzIHVpbnQxNjsgcGFkIHVpbnQxNjsgdG90
YWxoaWdoIHVpbnQ2NDsgZnJlZWhpZ2ggdWludDY0OyBtZW1fdW5pdCB1aW50MzI7IF9mIFswXWlu
dDg7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc3lzaW5mbyA9
IDExMg0KICAgICt0eXBlIF9fX2tlcm5lbF9zYV9mYW1pbHlfdCB1aW50MTYNCiAgICArdHlwZSBf
X19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBzdHJ1Y3QgeyBzc19mYW1pbHkgdWludDE2OyBfX2Rh
dGEgWzEyNSsxXWludDg7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSA9IDEyOA0KICAgICt0eXBlIF9zb2NrYWRk
cl9ubCBzdHJ1Y3QgeyBubF9mYW1pbHkgdWludDE2OyBubF9wYWQgdWludDE2OyBubF9waWQgdWlu
dDMyOyBubF9ncm91cHMgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2Zfc29ja2FkZHJfbmwg
PSAxMg0KICAgICt0eXBlIF9ubG1zZ2hkciBzdHJ1Y3QgeyBubG1zZ19sZW4gdWludDMyOyBubG1z
Z190eXBlIHVpbnQxNjsgbmxtc2dfZmxhZ3MgdWludDE2OyBubG1zZ19zZXEgdWludDMyOyBubG1z
Z19waWQgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2Zfbmxtc2doZHIgPSAxNg0KICAgICt0
eXBlIF9ubG1zZ2VyciBzdHJ1Y3QgeyBlcnJvciBpbnQzMjsgbXNnIF9ubG1zZ2hkcjsgfQ0KICAg
ICtjb25zdCBfc2l6ZW9mX25sbXNnZXJyID0gMjANCiAgICArdHlwZSBfbmxfcGt0aW5mbyBzdHJ1
Y3QgeyBncm91cCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9ubF9wa3RpbmZvID0gNA0K
ICAgICt0eXBlIF9ubF9tbWFwX3JlcSBzdHJ1Y3QgeyBubV9ibG9ja19zaXplIHVpbnQzMjsgbm1f
YmxvY2tfbnIgdWludDMyOyBubV9mcmFtZV9zaXplIHVpbnQzMjsgbm1fZnJhbWVfbnIgdWludDMy
OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmxfbW1hcF9yZXEgPSAxNg0KICAgICt0eXBlIF9ubF9t
bWFwX2hkciBzdHJ1Y3QgeyBubV9zdGF0dXMgdWludDMyOyBubV9sZW4gdWludDMyOyBubV9ncm91
cCB1aW50MzI7IG5tX3BpZCB1aW50MzI7IG5tX3VpZCB1aW50MzI7IG5tX2dpZCB1aW50MzI7IH0N
CiAgICArY29uc3QgX3NpemVvZl9ubF9tbWFwX2hkciA9IDI0DQogICAgK3R5cGUgX25sYXR0ciBz
dHJ1Y3QgeyBubGFfbGVuIHVpbnQxNjsgbmxhX3R5cGUgdWludDE2OyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfbmxhdHRyID0gNA0KICAgICt0eXBlIF9ubGFfYml0ZmllbGQzMiBzdHJ1Y3QgeyB2YWx1
ZSB1aW50MzI7IHNlbGVjdG9yIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX25sYV9iaXRm
aWVsZDMyID0gOA0KICAgICt0eXBlIF9pZmFkZHJtc2cgc3RydWN0IHsgaWZhX2ZhbWlseSB1aW50
ODsgaWZhX3ByZWZpeGxlbiB1aW50ODsgaWZhX2ZsYWdzIHVpbnQ4OyBpZmFfc2NvcGUgdWludDg7
IGlmYV9pbmRleCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZmFkZHJtc2cgPSA4DQog
ICAgK3R5cGUgX2lmYV9jYWNoZWluZm8gc3RydWN0IHsgaWZhX3ByZWZlcmVkIHVpbnQzMjsgaWZh
X3ZhbGlkIHVpbnQzMjsgY3N0YW1wIHVpbnQzMjsgdHN0YW1wIHVpbnQzMjsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX2lmYV9jYWNoZWluZm8gPSAxNg0KICAgICt0eXBlIF90dW5fcGkgc3RydWN0IHsg
ZmxhZ3MgdWludDE2OyBwcm90byB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl90dW5fcGkg
PSA0DQogICAgK3R5cGUgX3R1bl9maWx0ZXIgc3RydWN0IHsgZmxhZ3MgdWludDE2OyBjb3VudCB1
aW50MTY7IGFkZHIgWzBdWzUrMV11aW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3R1bl9maWx0
ZXIgPSA0DQogICAgK3R5cGUgX3B0cmFjZV9wZWVrc2lnaW5mb19hcmdzIHN0cnVjdCB7IG9mZiB1
aW50NjQ7IGZsYWdzIHVpbnQzMjsgbnIgaW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9wdHJh
Y2VfcGVla3NpZ2luZm9fYXJncyA9IDE2DQogICAgK3R5cGUgX3NlY2NvbXBfbWV0YWRhdGEgc3Ry
dWN0IHsgZmlsdGVyX29mZiB1aW50NjQ7IGZsYWdzIHVpbnQ2NDsgfQ0KICAgICtjb25zdCBfc2l6
ZW9mX3NlY2NvbXBfbWV0YWRhdGEgPSAxNg0KICAgICt0eXBlIF9wdF9yZWdzIHN0cnVjdCB7IHIx
NSB1aW50NjQ7IHIxNCB1aW50NjQ7IHIxMyB1aW50NjQ7IHIxMiB1aW50NjQ7IHJicCB1aW50NjQ7
IHJieCB1aW50NjQ7IHIxMSB1aW50NjQ7IHIxMCB1aW50NjQ7IHI5IHVpbnQ2NDsgcjggdWludDY0
OyByYXggdWludDY0OyByY3ggdWludDY0OyByZHggdWludDY0OyByc2kgdWludDY0OyByZGkgdWlu
dDY0OyBvcmlnX3JheCB1aW50NjQ7IHJpcCB1aW50NjQ7IGNzIHVpbnQ2NDsgZWZsYWdzIHVpbnQ2
NDsgcnNwIHVpbnQ2NDsgc3MgdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcHRfcmVncyA9
IDE2OA0KICAgICt0eXBlIF9ydG5sX2xpbmtfc3RhdHMgc3RydWN0IHsgcnhfcGFja2V0cyB1aW50
MzI7IHR4X3BhY2tldHMgdWludDMyOyByeF9ieXRlcyB1aW50MzI7IHR4X2J5dGVzIHVpbnQzMjsg
cnhfZXJyb3JzIHVpbnQzMjsgdHhfZXJyb3JzIHVpbnQzMjsgcnhfZHJvcHBlZCB1aW50MzI7IHR4
X2Ryb3BwZWQgdWludDMyOyBtdWx0aWNhc3QgdWludDMyOyBjb2xsaXNpb25zIHVpbnQzMjsgcnhf
bGVuZ3RoX2Vycm9ycyB1aW50MzI7IHJ4X292ZXJfZXJyb3JzIHVpbnQzMjsgcnhfY3JjX2Vycm9y
cyB1aW50MzI7IHJ4X2ZyYW1lX2Vycm9ycyB1aW50MzI7IHJ4X2ZpZm9fZXJyb3JzIHVpbnQzMjsg
cnhfbWlzc2VkX2Vycm9ycyB1aW50MzI7IHR4X2Fib3J0ZWRfZXJyb3JzIHVpbnQzMjsgdHhfY2Fy
cmllcl9lcnJvcnMgdWludDMyOyB0eF9maWZvX2Vycm9ycyB1aW50MzI7IHR4X2hlYXJ0YmVhdF9l
cnJvcnMgdWludDMyOyB0eF93aW5kb3dfZXJyb3JzIHVpbnQzMjsgcnhfY29tcHJlc3NlZCB1aW50
MzI7IHR4X2NvbXByZXNzZWQgdWludDMyOyByeF9ub2hhbmRsZXIgdWludDMyOyB9DQogICAgK2Nv
bnN0IF9zaXplb2ZfcnRubF9saW5rX3N0YXRzID0gOTYNCiAgICArdHlwZSBfcnRubF9saW5rX3N0
YXRzNjQgc3RydWN0IHsgcnhfcGFja2V0cyB1aW50NjQ7IHR4X3BhY2tldHMgdWludDY0OyByeF9i
eXRlcyB1aW50NjQ7IHR4X2J5dGVzIHVpbnQ2NDsgcnhfZXJyb3JzIHVpbnQ2NDsgdHhfZXJyb3Jz
IHVpbnQ2NDsgcnhfZHJvcHBlZCB1aW50NjQ7IHR4X2Ryb3BwZWQgdWludDY0OyBtdWx0aWNhc3Qg
dWludDY0OyBjb2xsaXNpb25zIHVpbnQ2NDsgcnhfbGVuZ3RoX2Vycm9ycyB1aW50NjQ7IHJ4X292
ZXJfZXJyb3JzIHVpbnQ2NDsgcnhfY3JjX2Vycm9ycyB1aW50NjQ7IHJ4X2ZyYW1lX2Vycm9ycyB1
aW50NjQ7IHJ4X2ZpZm9fZXJyb3JzIHVpbnQ2NDsgcnhfbWlzc2VkX2Vycm9ycyB1aW50NjQ7IHR4
X2Fib3J0ZWRfZXJyb3JzIHVpbnQ2NDsgdHhfY2Fycmllcl9lcnJvcnMgdWludDY0OyB0eF9maWZv
X2Vycm9ycyB1aW50NjQ7IHR4X2hlYXJ0YmVhdF9lcnJvcnMgdWludDY0OyB0eF93aW5kb3dfZXJy
b3JzIHVpbnQ2NDsgcnhfY29tcHJlc3NlZCB1aW50NjQ7IHR4X2NvbXByZXNzZWQgdWludDY0OyBy
eF9ub2hhbmRsZXIgdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcnRubF9saW5rX3N0YXRz
NjQgPSAxOTINCiAgICArdHlwZSBfcnRubF9saW5rX2lmbWFwIHN0cnVjdCB7IG1lbV9zdGFydCB1
aW50NjQ7IG1lbV9lbmQgdWludDY0OyBiYXNlX2FkZHIgdWludDY0OyBpcnEgdWludDE2OyBkbWEg
dWludDg7IHBvcnQgdWludDg7IEdvZHVtcF8wX3BhZCBbNF1ieXRlOyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfcnRubF9saW5rX2lmbWFwID0gMzINCiAgICArdHlwZSBfaWZsYV9icmlkZ2VfaWQgc3Ry
dWN0IHsgcHJpbyBbMSsxXXVpbnQ4OyBhZGRyIFs1KzFddWludDg7IH0NCiAgICArY29uc3QgX3Np
emVvZl9pZmxhX2JyaWRnZV9pZCA9IDgNCiAgICArdHlwZSBfaWZsYV9jYWNoZWluZm8gc3RydWN0
IHsgbWF4X3JlYXNtX2xlbiB1aW50MzI7IHRzdGFtcCB1aW50MzI7IHJlYWNoYWJsZV90aW1lIHVp
bnQzMjsgcmV0cmFuc190aW1lIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfY2Fj
aGVpbmZvID0gMTYNCiAgICArdHlwZSBfaWZsYV92bGFuX2ZsYWdzIHN0cnVjdCB7IGZsYWdzIHVp
bnQzMjsgbWFzayB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZmxhX3ZsYW5fZmxhZ3Mg
PSA4DQogICAgK3R5cGUgX2lmbGFfdmxhbl9xb3NfbWFwcGluZyBzdHJ1Y3QgeyBmcm9tIHVpbnQz
MjsgdG8gdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZsYV92bGFuX3Fvc19tYXBwaW5n
ID0gOA0KICAgICt0eXBlIF9pZmxhX3Z4bGFuX3BvcnRfcmFuZ2Ugc3RydWN0IHsgbG93IHVpbnQx
NjsgaGlnaCB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZmxhX3Z4bGFuX3BvcnRfcmFu
Z2UgPSA0DQogICAgK3R5cGUgX2lmbGFfdmZfbWFjIHN0cnVjdCB7IHZmIHVpbnQzMjsgbWFjIFsz
MSsxXXVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9tYWMgPSAzNg0KICAgICt0
eXBlIF9pZmxhX3ZmX3ZsYW4gc3RydWN0IHsgdmYgdWludDMyOyB2bGFuIHVpbnQzMjsgcW9zIHVp
bnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfdmZfdmxhbiA9IDEyDQogICAgK3R5cGUg
X2lmbGFfdmZfdmxhbl9pbmZvIHN0cnVjdCB7IHZmIHVpbnQzMjsgdmxhbiB1aW50MzI7IHFvcyB1
aW50MzI7IHZsYW5fcHJvdG8gdWludDE2OyBHb2R1bXBfMF9wYWQgWzJdYnl0ZTsgfQ0KICAgICtj
b25zdCBfc2l6ZW9mX2lmbGFfdmZfdmxhbl9pbmZvID0gMTYNCiAgICArdHlwZSBfaWZsYV92Zl90
eF9yYXRlIHN0cnVjdCB7IHZmIHVpbnQzMjsgcmF0ZSB1aW50MzI7IH0NCiAgICArY29uc3QgX3Np
emVvZl9pZmxhX3ZmX3R4X3JhdGUgPSA4DQogICAgK3R5cGUgX2lmbGFfdmZfcmF0ZSBzdHJ1Y3Qg
eyB2ZiB1aW50MzI7IG1pbl90eF9yYXRlIHVpbnQzMjsgbWF4X3R4X3JhdGUgdWludDMyOyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfaWZsYV92Zl9yYXRlID0gMTINCiAgICArdHlwZSBfaWZsYV92Zl9z
cG9vZmNoayBzdHJ1Y3QgeyB2ZiB1aW50MzI7IHNldHRpbmcgdWludDMyOyB9DQogICAgK2NvbnN0
IF9zaXplb2ZfaWZsYV92Zl9zcG9vZmNoayA9IDgNCiAgICArdHlwZSBfaWZsYV92Zl9ndWlkIHN0
cnVjdCB7IHZmIHVpbnQzMjsgZ3VpZCB1aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZmxh
X3ZmX2d1aWQgPSAxNg0KICAgICt0eXBlIF9pZmxhX3ZmX2xpbmtfc3RhdGUgc3RydWN0IHsgdmYg
dWludDMyOyBsaW5rX3N0YXRlIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfdmZf
bGlua19zdGF0ZSA9IDgNCiAgICArdHlwZSBfaWZsYV92Zl9yc3NfcXVlcnlfZW4gc3RydWN0IHsg
dmYgdWludDMyOyBzZXR0aW5nIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbGFfdmZf
cnNzX3F1ZXJ5X2VuID0gOA0KICAgICt0eXBlIF9pZmxhX3ZmX3RydXN0IHN0cnVjdCB7IHZmIHVp
bnQzMjsgc2V0dGluZyB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZmxhX3ZmX3RydXN0
ID0gOA0KICAgICt0eXBlIF9pZmxhX3BvcnRfdnNpIHN0cnVjdCB7IHZzaV9tZ3JfaWQgdWludDg7
IHZzaV90eXBlX2lkIFsyKzFddWludDg7IHZzaV90eXBlX3ZlcnNpb24gdWludDg7IHBhZCBbMisx
XXVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZsYV9wb3J0X3ZzaSA9IDgNCiAgICArdHlw
ZSBfaWZfc3RhdHNfbXNnIHN0cnVjdCB7IGZhbWlseSB1aW50ODsgcGFkMSB1aW50ODsgcGFkMiB1
aW50MTY7IGlmaW5kZXggdWludDMyOyBmaWx0ZXJfbWFzayB1aW50MzI7IH0NCiAgICArY29uc3Qg
X3NpemVvZl9pZl9zdGF0c19tc2cgPSAxMg0KICAgICt0eXBlIF9pZmxhX3JtbmV0X2ZsYWdzIHN0
cnVjdCB7IGZsYWdzIHVpbnQzMjsgbWFzayB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9p
ZmxhX3JtbmV0X2ZsYWdzID0gOA0KICAgICt0eXBlIF9uZG1zZyBzdHJ1Y3QgeyBuZG1fZmFtaWx5
IHVpbnQ4OyBuZG1fcGFkMSB1aW50ODsgbmRtX3BhZDIgdWludDE2OyBuZG1faWZpbmRleCBpbnQz
MjsgbmRtX3N0YXRlIHVpbnQxNjsgbmRtX2ZsYWdzIHVpbnQ4OyBuZG1fdHlwZSB1aW50ODsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX25kbXNnID0gMTINCiAgICArdHlwZSBfbmRhX2NhY2hlaW5mbyBz
dHJ1Y3QgeyBuZG1fY29uZmlybWVkIHVpbnQzMjsgbmRtX3VzZWQgdWludDMyOyBuZG1fdXBkYXRl
ZCB1aW50MzI7IG5kbV9yZWZjbnQgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmRhX2Nh
Y2hlaW5mbyA9IDE2DQogICAgK3R5cGUgX25kdF9zdGF0cyBzdHJ1Y3QgeyBuZHRzX2FsbG9jcyB1
aW50NjQ7IG5kdHNfZGVzdHJveXMgdWludDY0OyBuZHRzX2hhc2hfZ3Jvd3MgdWludDY0OyBuZHRz
X3Jlc19mYWlsZWQgdWludDY0OyBuZHRzX2xvb2t1cHMgdWludDY0OyBuZHRzX2hpdHMgdWludDY0
OyBuZHRzX3Jjdl9wcm9iZXNfbWNhc3QgdWludDY0OyBuZHRzX3Jjdl9wcm9iZXNfdWNhc3QgdWlu
dDY0OyBuZHRzX3BlcmlvZGljX2djX3J1bnMgdWludDY0OyBuZHRzX2ZvcmNlZF9nY19ydW5zIHVp
bnQ2NDsgbmR0c190YWJsZV9mdWxscyB1aW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9uZHRf
c3RhdHMgPSA4OA0KICAgICt0eXBlIF9uZHRtc2cgc3RydWN0IHsgbmR0bV9mYW1pbHkgdWludDg7
IG5kdG1fcGFkMSB1aW50ODsgbmR0bV9wYWQyIHVpbnQxNjsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X25kdG1zZyA9IDQNCiAgICArdHlwZSBfbmR0X2NvbmZpZyBzdHJ1Y3QgeyBuZHRjX2tleV9sZW4g
dWludDE2OyBuZHRjX2VudHJ5X3NpemUgdWludDE2OyBuZHRjX2VudHJpZXMgdWludDMyOyBuZHRj
X2xhc3RfZmx1c2ggdWludDMyOyBuZHRjX2xhc3RfcmFuZCB1aW50MzI7IG5kdGNfaGFzaF9ybmQg
dWludDMyOyBuZHRjX2hhc2hfbWFzayB1aW50MzI7IG5kdGNfaGFzaF9jaGFpbl9nYyB1aW50MzI7
IG5kdGNfcHJveHlfcWxlbiB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9uZHRfY29uZmln
ID0gMzINCiAgICArdHlwZSBfcnRhdHRyIHN0cnVjdCB7IHJ0YV9sZW4gdWludDE2OyBydGFfdHlw
ZSB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl9ydGF0dHIgPSA0DQogICAgK3R5cGUgX3J0
bXNnIHN0cnVjdCB7IHJ0bV9mYW1pbHkgdWludDg7IHJ0bV9kc3RfbGVuIHVpbnQ4OyBydG1fc3Jj
X2xlbiB1aW50ODsgcnRtX3RvcyB1aW50ODsgcnRtX3RhYmxlIHVpbnQ4OyBydG1fcHJvdG9jb2wg
dWludDg7IHJ0bV9zY29wZSB1aW50ODsgcnRtX3R5cGUgdWludDg7IHJ0bV9mbGFncyB1aW50MzI7
IH0NCiAgICArY29uc3QgX3NpemVvZl9ydG1zZyA9IDEyDQogICAgK3R5cGUgX3J0bmV4dGhvcCBz
dHJ1Y3QgeyBydG5oX2xlbiB1aW50MTY7IHJ0bmhfZmxhZ3MgdWludDg7IHJ0bmhfaG9wcyB1aW50
ODsgcnRuaF9pZmluZGV4IGludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcnRuZXh0aG9wID0g
OA0KICAgICt0eXBlIF9ydHZpYSBzdHJ1Y3QgeyBydHZpYV9mYW1pbHkgdWludDE2OyBydHZpYV9h
ZGRyIFswXXVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfcnR2aWEgPSAyDQogICAgK3R5cGUg
X3J0YV9jYWNoZWluZm8gc3RydWN0IHsgcnRhX2NsbnRyZWYgdWludDMyOyBydGFfbGFzdHVzZSB1
aW50MzI7IHJ0YV9leHBpcmVzIGludDMyOyBydGFfZXJyb3IgdWludDMyOyBydGFfdXNlZCB1aW50
MzI7IHJ0YV9pZCB1aW50MzI7IHJ0YV90cyB1aW50MzI7IHJ0YV90c2FnZSB1aW50MzI7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9ydGFfY2FjaGVpbmZvID0gMzINCiAgICArdHlwZSBfcnRhX3Nlc3Np
b24gc3RydWN0IHsgcHJvdG8gdWludDg7IHBhZDEgdWludDg7IHBhZDIgdWludDE2OyB1IHN0cnVj
dCB7IHBvcnRzIHN0cnVjdCB7IHNwb3J0IHVpbnQxNjsgZHBvcnQgdWludDE2OyB9OyBHb2R1bXBf
MF9hbGlnbiBbMF1pbnQzMjsgfTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3J0YV9zZXNzaW9uID0g
OA0KICAgICt0eXBlIF9ydGFfbWZjX3N0YXRzIHN0cnVjdCB7IG1mY3NfcGFja2V0cyB1aW50NjQ7
IG1mY3NfYnl0ZXMgdWludDY0OyBtZmNzX3dyb25nX2lmIHVpbnQ2NDsgfQ0KICAgICtjb25zdCBf
c2l6ZW9mX3J0YV9tZmNfc3RhdHMgPSAyNA0KICAgICt0eXBlIF9ydGdlbm1zZyBzdHJ1Y3QgeyBy
dGdlbl9mYW1pbHkgdWludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9ydGdlbm1zZyA9IDENCiAg
ICArdHlwZSBfaWZpbmZvbXNnIHN0cnVjdCB7IGlmaV9mYW1pbHkgdWludDg7IF9faWZpX3BhZCB1
aW50ODsgaWZpX3R5cGUgdWludDE2OyBpZmlfaW5kZXggaW50MzI7IGlmaV9mbGFncyB1aW50MzI7
IGlmaV9jaGFuZ2UgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZpbmZvbXNnID0gMTYN
CiAgICArdHlwZSBfcHJlZml4bXNnIHN0cnVjdCB7IHByZWZpeF9mYW1pbHkgdWludDg7IHByZWZp
eF9wYWQxIHVpbnQ4OyBwcmVmaXhfcGFkMiB1aW50MTY7IHByZWZpeF9pZmluZGV4IGludDMyOyBw
cmVmaXhfdHlwZSB1aW50ODsgcHJlZml4X2xlbiB1aW50ODsgcHJlZml4X2ZsYWdzIHVpbnQ4OyBw
cmVmaXhfcGFkMyB1aW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3ByZWZpeG1zZyA9IDEyDQog
ICAgK3R5cGUgX3ByZWZpeF9jYWNoZWluZm8gc3RydWN0IHsgcHJlZmVycmVkX3RpbWUgdWludDMy
OyB2YWxpZF90aW1lIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3ByZWZpeF9jYWNoZWlu
Zm8gPSA4DQogICAgK3R5cGUgX3RjbXNnIHN0cnVjdCB7IHRjbV9mYW1pbHkgdWludDg7IHRjbV9f
cGFkMSB1aW50ODsgdGNtX19wYWQyIHVpbnQxNjsgdGNtX2lmaW5kZXggaW50MzI7IHRjbV9oYW5k
bGUgdWludDMyOyB0Y21fcGFyZW50IHVpbnQzMjsgdGNtX2luZm8gdWludDMyOyB9DQogICAgK2Nv
bnN0IF9zaXplb2ZfdGNtc2cgPSAyMA0KICAgICt0eXBlIF9uZHVzZXJvcHRtc2cgc3RydWN0IHsg
bmR1c2Vyb3B0X2ZhbWlseSB1aW50ODsgbmR1c2Vyb3B0X3BhZDEgdWludDg7IG5kdXNlcm9wdF9v
cHRzX2xlbiB1aW50MTY7IG5kdXNlcm9wdF9pZmluZGV4IGludDMyOyBuZHVzZXJvcHRfaWNtcF90
eXBlIHVpbnQ4OyBuZHVzZXJvcHRfaWNtcF9jb2RlIHVpbnQ4OyBuZHVzZXJvcHRfcGFkMiB1aW50
MTY7IG5kdXNlcm9wdF9wYWQzIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX25kdXNlcm9w
dG1zZyA9IDE2DQogICAgK3R5cGUgX3RjYW1zZyBzdHJ1Y3QgeyB0Y2FfZmFtaWx5IHVpbnQ4OyB0
Y2FfX3BhZDEgdWludDg7IHRjYV9fcGFkMiB1aW50MTY7IH0NCiAgICArY29uc3QgX3NpemVvZl90
Y2Ftc2cgPSA0DQogICAgK3R5cGUgX2lmX25hbWVpbmRleCBzdHJ1Y3QgeyBpZl9pbmRleCB1aW50
MzI7IGlmX25hbWUgKmludDg7IH0NCiAgICArY29uc3QgX3NpemVvZl9pZl9uYW1laW5kZXggPSAx
Ng0KICAgICt0eXBlIF9pZmFkZHIgc3RydWN0IHsgaWZhX2FkZHIgX3NvY2thZGRyOyBpZmFfaWZ1
IHN0cnVjdCB7IGlmdV9icm9hZGFkZHIgX3NvY2thZGRyOyB9OyBpZmFfaWZwICpfaWZhY2U7IGlm
YV9uZXh0ICpfaWZhZGRyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaWZhZGRyID0gNDgNCiAgICAr
dHlwZSBfaWZtYXAgc3RydWN0IHsgbWVtX3N0YXJ0IHVpbnQ2NDsgbWVtX2VuZCB1aW50NjQ7IGJh
c2VfYWRkciB1aW50MTY7IGlycSB1aW50ODsgZG1hIHVpbnQ4OyBwb3J0IHVpbnQ4OyBHb2R1bXBf
MF9wYWQgWzNdYnl0ZTsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lmbWFwID0gMjQNCiAgICArdHlw
ZSBfaWZyZXEgc3RydWN0IHsgaWZyX2lmcm4gc3RydWN0IHsgaWZybl9uYW1lIFsxNSsxXWludDg7
IH07IGlmcl9pZnJ1IHN0cnVjdCB7IGlmcnVfYWRkciBfc29ja2FkZHI7IEdvZHVtcF8wX3BhZCBb
OF1ieXRlOyBHb2R1bXBfMV9hbGlnbiBbMF1pbnQ2NDsgfTsgfQ0KICAgICtjb25zdCBfc2l6ZW9m
X2lmcmVxID0gNDANCiAgICArdHlwZSBfaWZjb25mIHN0cnVjdCB7IGlmY19sZW4gaW50MzI7IGlm
Y19pZmN1IHN0cnVjdCB7IGlmY3VfYnVmIF9fX2NhZGRyX3Q7IH07IH0NCiAgICArY29uc3QgX3Np
emVvZl9pZmNvbmYgPSAxNg0KICAgICt0eXBlIF9ydGVudHJ5IHN0cnVjdCB7IHJ0X3BhZDEgdWlu
dDY0OyBydF9kc3QgX3NvY2thZGRyOyBydF9nYXRld2F5IF9zb2NrYWRkcjsgcnRfZ2VubWFzayBf
c29ja2FkZHI7IHJ0X2ZsYWdzIHVpbnQxNjsgcnRfcGFkMiBpbnQxNjsgcnRfcGFkMyB1aW50NjQ7
IHJ0X3RvcyB1aW50ODsgcnRfY2xhc3MgdWludDg7IHJ0X3BhZDQgWzIrMV1pbnQxNjsgcnRfbWV0
cmljIGludDE2OyBydF9kZXYgKmludDg7IHJ0X210dSB1aW50NjQ7IHJ0X3dpbmRvdyB1aW50NjQ7
IHJ0X2lydHQgdWludDE2OyBHb2R1bXBfMF9wYWQgWzZdYnl0ZTsgfQ0KICAgICtjb25zdCBfc2l6
ZW9mX3J0ZW50cnkgPSAxMjANCiAgICArY29uc3QgX3NpemVvZl9pbjZfcnRtc2cgPSA4MA0KICAg
ICt0eXBlIF9zb2NrYWRkcl9sbCBzdHJ1Y3QgeyBzbGxfZmFtaWx5IHVpbnQxNjsgc2xsX3Byb3Rv
Y29sIHVpbnQxNjsgc2xsX2lmaW5kZXggaW50MzI7IHNsbF9oYXR5cGUgdWludDE2OyBzbGxfcGt0
dHlwZSB1aW50ODsgc2xsX2hhbGVuIHVpbnQ4OyBzbGxfYWRkciBbNysxXXVpbnQ4OyB9DQogICAg
K2NvbnN0IF9zaXplb2Zfc29ja2FkZHJfbGwgPSAyMA0KICAgICt0eXBlIF9wYWNrZXRfbXJlcSBz
dHJ1Y3QgeyBtcl9pZmluZGV4IGludDMyOyBtcl90eXBlIHVpbnQxNjsgbXJfYWxlbiB1aW50MTY7
IG1yX2FkZHJlc3MgWzcrMV11aW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3BhY2tldF9tcmVx
ID0gMTYNCiAgICArdHlwZSBfc3RhdGZzIHN0cnVjdCB7IGZfdHlwZSBpbnQ2NDsgZl9ic2l6ZSBp
bnQ2NDsgZl9ibG9ja3MgdWludDY0OyBmX2JmcmVlIHVpbnQ2NDsgZl9iYXZhaWwgdWludDY0OyBm
X2ZpbGVzIHVpbnQ2NDsgZl9mZnJlZSB1aW50NjQ7IGZfZnNpZCBfX19mc2lkX3Q7IGZfbmFtZWxl
biBpbnQ2NDsgZl9mcnNpemUgaW50NjQ7IGZfZmxhZ3MgaW50NjQ7IGZfc3BhcmUgWzMrMV1pbnQ2
NDsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX3N0YXRmcyA9IDEyMA0KICAgICt0eXBlIF9zdGF0ZnM2
NCBzdHJ1Y3QgeyBmX3R5cGUgaW50NjQ7IGZfYnNpemUgaW50NjQ7IGZfYmxvY2tzIHVpbnQ2NDsg
Zl9iZnJlZSB1aW50NjQ7IGZfYmF2YWlsIHVpbnQ2NDsgZl9maWxlcyB1aW50NjQ7IGZfZmZyZWUg
dWludDY0OyBmX2ZzaWQgX19fZnNpZF90OyBmX25hbWVsZW4gaW50NjQ7IGZfZnJzaXplIGludDY0
OyBmX2ZsYWdzIGludDY0OyBmX3NwYXJlIFszKzFdaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVv
Zl9zdGF0ZnM2NCA9IDEyMA0KICAgICt0eXBlIF9udHB0aW1ldmFsIHN0cnVjdCB7IHRpbWUgVGlt
ZXZhbDsgbWF4ZXJyb3IgaW50NjQ7IGVzdGVycm9yIGludDY0OyB0YWkgaW50NjQ7IF9fZ2xpYmNf
cmVzZXJ2ZWQxIGludDY0OyBfX2dsaWJjX3Jlc2VydmVkMiBpbnQ2NDsgX19nbGliY19yZXNlcnZl
ZDMgaW50NjQ7IF9fZ2xpYmNfcmVzZXJ2ZWQ0IGludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2Zf
bnRwdGltZXZhbCA9IDcyDQogICAgK3R5cGUgX3V0aW1idWYgc3RydWN0IHsgYWN0aW1lIGludDY0
OyBtb2R0aW1lIGludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfdXRpbWJ1ZiA9IDE2DQogICAg
K3R5cGUgX2ZpbGVfY2xvbmVfcmFuZ2Ugc3RydWN0IHsgc3JjX2ZkIGludDY0OyBzcmNfb2Zmc2V0
IHVpbnQ2NDsgc3JjX2xlbmd0aCB1aW50NjQ7IGRlc3Rfb2Zmc2V0IHVpbnQ2NDsgfQ0KICAgICtj
b25zdCBfc2l6ZW9mX2ZpbGVfY2xvbmVfcmFuZ2UgPSAzMg0KICAgICt0eXBlIF9mc3RyaW1fcmFu
Z2Ugc3RydWN0IHsgc3RhcnQgdWludDY0OyBsZW4gdWludDY0OyBtaW5sZW4gdWludDY0OyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfZnN0cmltX3JhbmdlID0gMjQNCiAgICArdHlwZSBfZmlsZV9kZWR1
cGVfcmFuZ2VfaW5mbyBzdHJ1Y3QgeyBkZXN0X2ZkIGludDY0OyBkZXN0X29mZnNldCB1aW50NjQ7
IGJ5dGVzX2RlZHVwZWQgdWludDY0OyBzdGF0dXMgaW50MzI7IHJlc2VydmVkIHVpbnQzMjsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX2ZpbGVfZGVkdXBlX3JhbmdlX2luZm8gPSAzMg0KICAgICt0eXBl
IF9maWxlX2RlZHVwZV9yYW5nZSBzdHJ1Y3QgeyBzcmNfb2Zmc2V0IHVpbnQ2NDsgc3JjX2xlbmd0
aCB1aW50NjQ7IGRlc3RfY291bnQgdWludDE2OyByZXNlcnZlZDEgdWludDE2OyByZXNlcnZlZDIg
dWludDMyOyBpbmZvIFswXV9maWxlX2RlZHVwZV9yYW5nZV9pbmZvOyB9DQogICAgK2NvbnN0IF9z
aXplb2ZfZmlsZV9kZWR1cGVfcmFuZ2UgPSAyNA0KICAgICt0eXBlIF9maWxlc19zdGF0X3N0cnVj
dCBzdHJ1Y3QgeyBucl9maWxlcyB1aW50NjQ7IG5yX2ZyZWVfZmlsZXMgdWludDY0OyBtYXhfZmls
ZXMgdWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZmlsZXNfc3RhdF9zdHJ1Y3QgPSAyNA0K
ICAgICt0eXBlIF9pbm9kZXNfc3RhdF90IHN0cnVjdCB7IG5yX2lub2RlcyBpbnQ2NDsgbnJfdW51
c2VkIGludDY0OyBkdW1teSBbNCsxXWludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfaW5vZGVz
X3N0YXRfdCA9IDU2DQogICAgK3R5cGUgX2ZzeGF0dHIgc3RydWN0IHsgZnN4X3hmbGFncyB1aW50
MzI7IGZzeF9leHRzaXplIHVpbnQzMjsgZnN4X25leHRlbnRzIHVpbnQzMjsgZnN4X3Byb2ppZCB1
aW50MzI7IGZzeF9jb3dleHRzaXplIHVpbnQzMjsgZnN4X3BhZCBbNysxXXVpbnQ4OyB9DQogICAg
K2NvbnN0IF9zaXplb2ZfZnN4YXR0ciA9IDI4DQogICAgK3R5cGUgX2ZzY3J5cHRfcG9saWN5IHN0
cnVjdCB7IHZlcnNpb24gdWludDg7IGNvbnRlbnRzX2VuY3J5cHRpb25fbW9kZSB1aW50ODsgZmls
ZW5hbWVzX2VuY3J5cHRpb25fbW9kZSB1aW50ODsgZmxhZ3MgdWludDg7IG1hc3Rlcl9rZXlfZGVz
Y3JpcHRvciBbNysxXXVpbnQ4OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZnNjcnlwdF9wb2xpY3kg
PSAxMg0KICAgICt0eXBlIF9mc2NyeXB0X2tleSBzdHJ1Y3QgeyBtb2RlIHVpbnQzMjsgcmF3IFs2
MysxXXVpbnQ4OyBzaXplIHVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2ZzY3J5cHRfa2V5
ID0gNzINCiAgICArdHlwZSBfX19rZXJuZWxfcndmX3QgaW50MzINCiAgICArdHlwZSBfaW5vdGlm
eV9ldmVudCBzdHJ1Y3QgeyB3ZCBpbnQzMjsgbWFzayB1aW50MzI7IGNvb2tpZSB1aW50MzI7IGxl
biB1aW50MzI7IG5hbWUgWzBdaW50ODsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2lub3RpZnlfZXZl
bnQgPSAxNg0KICAgICt0eXBlIF9fX2d3Y2hhcl90IGludDMyDQogICAgK3R5cGUgX2ltYXhkaXZf
dCBzdHJ1Y3QgeyBxdW90IGludDY0OyByZW0gaW50NjQ7IH0NCiAgICArY29uc3QgX3NpemVvZl9p
bWF4ZGl2X3QgPSAxNg0KICAgICt0eXBlIF9pY21wNl9maWx0ZXIgc3RydWN0IHsgaWNtcDZfZmls
dCBbNysxXXVpbnQzMjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX2ljbXA2X2ZpbHRlciA9IDMyDQog
ICAgK3R5cGUgX2ljbXA2X2hkciBzdHJ1Y3QgeyBpY21wNl90eXBlIHVpbnQ4OyBpY21wNl9jb2Rl
IHVpbnQ4OyBpY21wNl9ja3N1bSB1aW50MTY7IGljbXA2X2RhdGF1biBzdHJ1Y3QgeyBpY21wNl91
bl9kYXRhMzIgWzArMV11aW50MzI7IH07IH0NCiAgICArY29uc3QgX3NpemVvZl9pY21wNl9oZHIg
PSA4DQogICAgK3R5cGUgX25kX3JvdXRlcl9zb2xpY2l0IHN0cnVjdCB7IG5kX3JzX2hkciBfaWNt
cDZfaGRyOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfbmRfcm91dGVyX3NvbGljaXQgPSA4DQogICAg
K3R5cGUgX25kX3JvdXRlcl9hZHZlcnQgc3RydWN0IHsgbmRfcmFfaGRyIF9pY21wNl9oZHI7IG5k
X3JhX3JlYWNoYWJsZSB1aW50MzI7IG5kX3JhX3JldHJhbnNtaXQgdWludDMyOyB9DQogICAgK2Nv
bnN0IF9zaXplb2ZfbmRfcm91dGVyX2FkdmVydCA9IDE2DQogICAgK2NvbnN0IF9zaXplb2ZfbmRf
bmVpZ2hib3Jfc29saWNpdCA9IDI0DQogICAgK2NvbnN0IF9zaXplb2ZfbmRfbmVpZ2hib3JfYWR2
ZXJ0ID0gMjQNCiAgICArY29uc3QgX3NpemVvZl9uZF9yZWRpcmVjdCA9IDQwDQogICAgK3R5cGUg
X25kX29wdF9oZHIgc3RydWN0IHsgbmRfb3B0X3R5cGUgdWludDg7IG5kX29wdF9sZW4gdWludDg7
IH0NCiAgICArY29uc3QgX3NpemVvZl9uZF9vcHRfaGRyID0gMg0KICAgICtjb25zdCBfc2l6ZW9m
X25kX29wdF9wcmVmaXhfaW5mbyA9IDMyDQogICAgK3R5cGUgX25kX29wdF9yZF9oZHIgc3RydWN0
IHsgbmRfb3B0X3JoX3R5cGUgdWludDg7IG5kX29wdF9yaF9sZW4gdWludDg7IG5kX29wdF9yaF9y
ZXNlcnZlZDEgdWludDE2OyBuZF9vcHRfcmhfcmVzZXJ2ZWQyIHVpbnQzMjsgfQ0KICAgICtjb25z
dCBfc2l6ZW9mX25kX29wdF9yZF9oZHIgPSA4DQogICAgK3R5cGUgX25kX29wdF9tdHUgc3RydWN0
IHsgbmRfb3B0X210dV90eXBlIHVpbnQ4OyBuZF9vcHRfbXR1X2xlbiB1aW50ODsgbmRfb3B0X210
dV9yZXNlcnZlZCB1aW50MTY7IG5kX29wdF9tdHVfbXR1IHVpbnQzMjsgfQ0KICAgICtjb25zdCBf
c2l6ZW9mX25kX29wdF9tdHUgPSA4DQogICAgK2NvbnN0IF9zaXplb2ZfbWxkX2hkciA9IDI0DQog
ICAgK3R5cGUgX2ljbXA2X3JvdXRlcl9yZW51bSBzdHJ1Y3QgeyBycl9oZHIgX2ljbXA2X2hkcjsg
cnJfc2VnbnVtIHVpbnQ4OyBycl9mbGFncyB1aW50ODsgcnJfbWF4ZGVsYXkgdWludDE2OyBycl9y
ZXNlcnZlZCB1aW50MzI7IH0NCiAgICArY29uc3QgX3NpemVvZl9pY21wNl9yb3V0ZXJfcmVudW0g
PSAxNg0KICAgICtjb25zdCBfc2l6ZW9mX3JyX3Bjb19tYXRjaCA9IDI0DQogICAgK2NvbnN0IF9z
aXplb2ZfcnJfcGNvX3VzZSA9IDMyDQogICAgK2NvbnN0IF9zaXplb2ZfcnJfcmVzdWx0ID0gMjQN
CiAgICArdHlwZSBfbmRfb3B0X2Fkdl9pbnRlcnZhbCBzdHJ1Y3QgeyBuZF9vcHRfYWR2X2ludGVy
dmFsX3R5cGUgdWludDg7IG5kX29wdF9hZHZfaW50ZXJ2YWxfbGVuIHVpbnQ4OyBuZF9vcHRfYWR2
X2ludGVydmFsX3Jlc2VydmVkIHVpbnQxNjsgbmRfb3B0X2Fkdl9pbnRlcnZhbF9pdmFsIHVpbnQz
MjsgfQ0KICAgICtjb25zdCBfc2l6ZW9mX25kX29wdF9hZHZfaW50ZXJ2YWwgPSA4DQogICAgK3R5
cGUgX25kX29wdF9ob21lX2FnZW50X2luZm8gc3RydWN0IHsgbmRfb3B0X2hvbWVfYWdlbnRfaW5m
b190eXBlIHVpbnQ4OyBuZF9vcHRfaG9tZV9hZ2VudF9pbmZvX2xlbiB1aW50ODsgbmRfb3B0X2hv
bWVfYWdlbnRfaW5mb19yZXNlcnZlZCB1aW50MTY7IG5kX29wdF9ob21lX2FnZW50X2luZm9fcHJl
ZmVyZW5jZSB1aW50MTY7IG5kX29wdF9ob21lX2FnZW50X2luZm9fbGlmZXRpbWUgdWludDE2OyB9
DQogICAgK2NvbnN0IF9zaXplb2ZfbmRfb3B0X2hvbWVfYWdlbnRfaW5mbyA9IDgNCiAgICArdHlw
ZSBfc2NoZWRfcGFyYW0gc3RydWN0IHsgc2NoZWRfcHJpb3JpdHkgaW50MzI7IH0NCiAgICArY29u
c3QgX3NpemVvZl9zY2hlZF9wYXJhbSA9IDQNCiAgICArdHlwZSBfX19jcHVfbWFzayB1aW50NjQN
CiAgICArdHlwZSBfY3B1X3NldF90IHN0cnVjdCB7IF9fYml0cyBbMTUrMV11aW50NjQ7IH0NCiAg
ICArY29uc3QgX3NpemVvZl9jcHVfc2V0X3QgPSAxMjgNCiAgICArdHlwZSBfc2VtX3Qgc3RydWN0
IHsgX19zaXplIFszMSsxXWludDg7IEdvZHVtcF8wX2FsaWduIFswXWludDY0OyB9DQogICAgK2Nv
bnN0IF9zaXplb2Zfc2VtX3QgPSAzMg0KICAgICt0eXBlIF9mZmlfYXJnIHVpbnQ2NA0KICAgICt0
eXBlIF9mZmlfc2FyZyBpbnQ2NA0KICAgICt0eXBlIF9mZmlfYWJpIHVpbnQzMg0KICAgICt0eXBl
IF9fZmZpX3R5cGUgc3RydWN0IHsgc2l6ZSB1aW50NjQ7IGFsaWdubWVudCB1aW50MTY7IF90eXBl
IHVpbnQxNjsgZWxlbWVudHMgKipfX2ZmaV90eXBlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfX2Zm
aV90eXBlID0gMjQNCiAgICArdHlwZSBfZmZpX3R5cGUgc3RydWN0IHsgc2l6ZSB1aW50NjQ7IGFs
aWdubWVudCB1aW50MTY7IF90eXBlIHVpbnQxNjsgZWxlbWVudHMgKipfX2ZmaV90eXBlOyB9DQog
ICAgK2NvbnN0IF9zaXplb2ZfZmZpX3R5cGUgPSAyNA0KICAgICt2YXIgX2ZmaV90eXBlX3ZvaWQg
X2ZmaV90eXBlDQogICAgK3ZhciBfZmZpX3R5cGVfdWludDggX2ZmaV90eXBlDQogICAgK3ZhciBf
ZmZpX3R5cGVfc2ludDggX2ZmaV90eXBlDQogICAgK3ZhciBfZmZpX3R5cGVfdWludDE2IF9mZmlf
dHlwZQ0KICAgICt2YXIgX2ZmaV90eXBlX3NpbnQxNiBfZmZpX3R5cGUNCiAgICArdmFyIF9mZmlf
dHlwZV91aW50MzIgX2ZmaV90eXBlDQogICAgK3ZhciBfZmZpX3R5cGVfc2ludDMyIF9mZmlfdHlw
ZQ0KICAgICt2YXIgX2ZmaV90eXBlX3VpbnQ2NCBfZmZpX3R5cGUNCiAgICArdmFyIF9mZmlfdHlw
ZV9zaW50NjQgX2ZmaV90eXBlDQogICAgK3ZhciBfZmZpX3R5cGVfZmxvYXQgX2ZmaV90eXBlDQog
ICAgK3ZhciBfZmZpX3R5cGVfZG91YmxlIF9mZmlfdHlwZQ0KICAgICt2YXIgX2ZmaV90eXBlX3Bv
aW50ZXIgX2ZmaV90eXBlDQogICAgK3ZhciBfZmZpX3R5cGVfbG9uZ2RvdWJsZSBfZmZpX3R5cGUN
CiAgICArdmFyIF9mZmlfdHlwZV9jb21wbGV4X2Zsb2F0IF9mZmlfdHlwZQ0KICAgICt2YXIgX2Zm
aV90eXBlX2NvbXBsZXhfZG91YmxlIF9mZmlfdHlwZQ0KICAgICt2YXIgX2ZmaV90eXBlX2NvbXBs
ZXhfbG9uZ2RvdWJsZSBfZmZpX3R5cGUNCiAgICArdHlwZSBfZmZpX3N0YXR1cyB1aW50MzINCiAg
ICArdHlwZSBfRkZJX1RZUEUgdWludDMyDQogICAgK3R5cGUgX2ZmaV9jaWYgc3RydWN0IHsgYWJp
IHVpbnQzMjsgbmFyZ3MgdWludDMyOyBhcmdfdHlwZXMgKipfZmZpX3R5cGU7IHJ0eXBlICpfZmZp
X3R5cGU7IGJ5dGVzIHVpbnQzMjsgZmxhZ3MgdWludDMyOyB9DQogICAgK2NvbnN0IF9zaXplb2Zf
ZmZpX2NpZiA9IDMyDQogICAgK3R5cGUgX2ZmaV9yYXcgc3RydWN0IHsgc2ludCBpbnQ2NDsgfQ0K
ICAgICtjb25zdCBfc2l6ZW9mX2ZmaV9yYXcgPSA4DQogICAgK3R5cGUgX2ZmaV9qYXZhX3JhdyBz
dHJ1Y3QgeyBzaW50IGludDY0OyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZmZpX2phdmFfcmF3ID0g
OA0KICAgICt0eXBlIF9mZmlfY2xvc3VyZSBzdHJ1Y3QgeyB0cmFtcCBbMjMrMV1pbnQ4OyBjaWYg
Kl9mZmlfY2lmOyBmdW4gZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqKmJ5dGUsICpieXRlKTsgdXNl
cl9kYXRhICpieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZmZpX2Nsb3N1cmUgPSA0OA0KICAg
ICt0eXBlIF9mZmlfcmF3X2Nsb3N1cmUgc3RydWN0IHsgdHJhbXAgWzIzKzFdaW50ODsgY2lmICpf
ZmZpX2NpZjsgdHJhbnNsYXRlX2FyZ3MgZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqKmJ5dGUsICpi
eXRlKTsgdGhpc19jbG9zdXJlICpieXRlOyBmdW4gZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqX2Zm
aV9yYXcsICpieXRlKTsgdXNlcl9kYXRhICpieXRlOyB9DQogICAgK2NvbnN0IF9zaXplb2ZfZmZp
X3Jhd19jbG9zdXJlID0gNjQNCiAgICArdHlwZSBfZmZpX2phdmFfcmF3X2Nsb3N1cmUgc3RydWN0
IHsgdHJhbXAgWzIzKzFdaW50ODsgY2lmICpfZmZpX2NpZjsgdHJhbnNsYXRlX2FyZ3MgZnVuYygq
X2ZmaV9jaWYsICpieXRlLCAqKmJ5dGUsICpieXRlKTsgdGhpc19jbG9zdXJlICpieXRlOyBmdW4g
ZnVuYygqX2ZmaV9jaWYsICpieXRlLCAqX2ZmaV9qYXZhX3JhdywgKmJ5dGUpOyB1c2VyX2RhdGEg
KmJ5dGU7IH0NCiAgICArY29uc3QgX3NpemVvZl9mZmlfamF2YV9yYXdfY2xvc3VyZSA9IDY0DQog
ICAgK2NvbnN0IF9fUE9TSVhfQURWSVNPUllfSU5GTyA9IDIwMDgwOQ0KICAgICtjb25zdCBfV05P
SEFORyA9IDENCiAgICArY29uc3QgX19fTERCTF9NSU5fMTBfRVhQX18gPSAoLTQ5MzEpDQogICAg
K2NvbnN0IF9JRkxBX0JSUE9SVF9ORUlHSF9TVVBQUkVTUyA9IDMyDQogICAgK2NvbnN0IF9fUENf
UkVDX01JTl9YRkVSX1NJWkUgPSAxNg0KICAgICtjb25zdCBfX0JJVFNfUFRIUkVBRFRZUEVTX0NP
TU1PTl9IID0gMQ0KICAgICtjb25zdCBfX1NDX0VYUFJfTkVTVF9NQVggPSA0Mg0KICAgICtjb25z
dCBfSU5UX0xFQVNUMTZfTUlOID0gKC0zMjc2Ny0xKQ0KICAgICtjb25zdCBfU1lTX3VzZWxpYiA9
IF9fX05SX3VzZWxpYg0KICAgICtjb25zdCBfRkZJX0JBRF9UWVBFREVGID0gMQ0KICAgICtjb25z
dCBfSVBQUk9UT19UUCA9IDI5DQogICAgK2NvbnN0IF9UQ1BfQ09PS0lFX1RSQU5TQUNUSU9OUyA9
IDE1DQogICAgK2NvbnN0IF9fX0ZMVDMyWF9ESUdfXyA9IDE1DQogICAgK2NvbnN0IF9BSU9fUFJJ
T19ERUxUQV9NQVggPSAyMA0KICAgICtjb25zdCBfTkRBX1ZOSSA9IDcNCiAgICArY29uc3QgX19f
SUxQMzJfT0ZGMzJfQ0ZMQUdTID0gIi1tMzIiDQogICAgK2NvbnN0IF9fX0ZMVDY0X01JTl8xMF9F
WFBfXyA9ICgtMzA3KQ0KICAgICtjb25zdCBfX1BDX1BBVEhfTUFYID0gNA0KICAgICtjb25zdCBf
SVBQUk9UT19ST1VUSU5HID0gNDMNCiAgICArY29uc3QgX0lOVF9GQVNUOF9NSU4gPSAoLTEyOCkN
CiAgICArY29uc3QgX0IxMTUyMDAgPSAwMDEwMDAyDQogICAgK2NvbnN0IF9fQklUU19VSU5UTl9J
REVOVElUWV9IID0gMQ0KICAgICtjb25zdCBfX19GTFQ2NF9NQU5UX0RJR19fID0gNTMNCiAgICAr
Y29uc3QgX19fQ0hBUl9CSVRfXyA9IDgNCiAgICArY29uc3QgX19fTlJfZnN5bmMgPSA3NA0KICAg
ICtjb25zdCBfX1NDX0xFVkVMNF9DQUNIRV9TSVpFID0gMTk3DQogICAgK2NvbnN0IF9QVFJBQ0Vf
RVZFTlRfRVhFQyA9IDQNCiAgICArY29uc3QgX1BSX1NWRV9WTF9JTkhFUklUID0gKDEgPDwgMTcp
DQogICAgK2NvbnN0IF9JUFBPUlRfU1VQRFVQID0gOTUNCiAgICArY29uc3QgX1NZU19mdHJ1bmNh
dGUgPSBfX19OUl9mdHJ1bmNhdGUNCiAgICArY29uc3QgX1NDSEFSX1dJRFRIID0gOA0KICAgICtj
b25zdCBfVENBX1NUQUIgPSA4DQogICAgK2NvbnN0IF9JRkxBX1ZGX0xJTktfU1RBVEUgPSA1DQog
ICAgK2NvbnN0IF9SVE5MR1JQX05TSUQgPSAyOA0KICAgICtjb25zdCBfX19OUl9tcmVtYXAgPSAy
NQ0KICAgICtjb25zdCBfX19OUl9sc2V0eGF0dHIgPSAxODkNCiAgICArY29uc3QgX0lQVkxBTl9N
T0RFX0wzID0gMQ0KICAgICtjb25zdCBfSUZMQV9CT05EX1VTRV9DQVJSSUVSID0gNg0KICAgICtj
b25zdCBfSUZMQV9PRkZMT0FEX1hTVEFUU19VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9JTlRfTEVB
U1QzMl9NSU4gPSAoLTIxNDc0ODM2NDctMSkNCiAgICArY29uc3QgX0FURl9DT00gPSAweDAyDQog
ICAgK2NvbnN0IF9NQVBfRklMRSA9IDANCiAgICArY29uc3QgX19fREVDNjRfTUlOX18gPSAxRS0z
ODMNCiAgICArY29uc3QgX0lGTEFfQlJfVE9QT0xPR1lfQ0hBTkdFX1RJTUVSID0gMTgNCiAgICAr
Y29uc3QgX1NJR0VWX05PTkUgPSAxDQogICAgK2NvbnN0IF9ORFRQQV9NQ0FTVF9QUk9CRVMgPSAx
MQ0KICAgICtjb25zdCBfU1lTX21rbm9kYXQgPSBfX19OUl9ta25vZGF0DQogICAgK2NvbnN0IF9f
UE9TSVhfQkFSUklFUlMgPSAyMDA4MDkNCiAgICArY29uc3QgX1VJTlRfRkFTVDE2X1dJRFRIID0g
X19fV09SRFNJWkUNCiAgICArY29uc3QgX0lQX1JGID0gMHg4MDAwDQogICAgK2NvbnN0IF9FVEhf
UF9QUFBUQUxLID0gMHgwMDEwDQogICAgK2NvbnN0IF9UVU5TRVRRVUVVRV92YWwgPSAxMDc0MDI1
Njg5DQogICAgK2NvbnN0IF9EVF9DSFIgPSAyDQogICAgK2NvbnN0IF9fX0ZMVF9NQVhfRVhQX18g
PSAxMjgNCiAgICArY29uc3QgX1JUTl9NVUxUSUNBU1QgPSA1DQogICAgK2NvbnN0IF9fX05SX3Nl
dHNpZCA9IDExMg0KICAgICtjb25zdCBfX1hPUEVOX1hQRzIgPSAxDQogICAgK2NvbnN0IF9JUF9E
RUZBVUxUX01VTFRJQ0FTVF9MT09QID0gMQ0KICAgICtjb25zdCBfX1hPUEVOX1hQRzQgPSAxDQog
ICAgK2NvbnN0IF9fX05SX2dldHJlc2dpZCA9IDEyMA0KICAgICtjb25zdCBfQlBGX0pHRSA9IDB4
MzANCiAgICArY29uc3QgX0JQRl9MRCA9IDB4MDANCiAgICArY29uc3QgX1RDUElfT1BUX0VDTiA9
IDgNCiAgICArY29uc3QgX0VUWFRCU1kgPSAyNg0KICAgICtjb25zdCBfSUZMQV9STU5FVF9NVVhf
SUQgPSAxDQogICAgK2NvbnN0IF9QUl9GUF9FWENfU1dfRU5BQkxFID0gMHg4MA0KICAgICtjb25z
dCBfX19OUl90aW1lID0gMjAxDQogICAgK2NvbnN0IF9IQVZFX1NZU19FUE9MTF9IID0gMQ0KICAg
ICtjb25zdCBfSUZMQV9WRl9TVEFUU19SWF9CWVRFUyA9IDINCiAgICArY29uc3QgX1JUX1NDT1BF
X1VOSVZFUlNFID0gMA0KICAgICtjb25zdCBfU1lTX2Vwb2xsX2N0bF9vbGQgPSBfX19OUl9lcG9s
bF9jdGxfb2xkDQogICAgK2NvbnN0IF9VTE9OR19NQVggPSAoX0xPTkdfTUFYICogMiArIDEpDQog
ICAgK2NvbnN0IF9DTERfVFJBUFBFRCA9IDQNCiAgICArY29uc3QgX0xPTkdfQklUID0gNjQNCiAg
ICArY29uc3QgX19fUkxJTV9UX01BVENIRVNfUkxJTTY0X1QgPSAxDQogICAgK2NvbnN0IF9UQ1Bf
UkVQQUlSX09QVElPTlMgPSAyMg0KICAgICtjb25zdCBfWDg2X0NSNF9PU1hNTUVYQ1BUX0JJVCA9
IDEwDQogICAgK2NvbnN0IF9fUE9TSVhfQUlPX01BWCA9IDENCiAgICArY29uc3QgX1JURl9VUCA9
IDB4MDAwMQ0KICAgICtjb25zdCBfVENQX1NfREFUQV9JTiA9ICgxIDw8IDIpDQogICAgK2NvbnN0
IF9JRkxBX0JSX01BWF9BR0UgPSAzDQogICAgK2NvbnN0IF9fU0NfTUVNT1JZX1BST1RFQ1RJT04g
PSAxOQ0KICAgICtjb25zdCBfRk5PTkJMT0NLID0gX09fTk9OQkxPQ0sNCiAgICArY29uc3QgX0lO
X0FUVFJJQiA9IDB4MDAwMDAwMDQNCiAgICArY29uc3QgX0FURl9QRVJNID0gMHgwNA0KICAgICtj
b25zdCBfSUZMQV9HRU5FVkVfUkVNT1RFNiA9IDcNCiAgICArY29uc3QgX0lGTEFfQk9ORF9NT0RF
ID0gMQ0KICAgICtjb25zdCBfRUhfRlJBTUVfRkxBR1MgPSAiYXciDQogICAgK2NvbnN0IF9PX0FQ
UEVORCA9IDAyMDAwDQogICAgK2NvbnN0IF9fU0NfVFlQRURfTUVNT1JZX09CSkVDVFMgPSAxNjUN
CiAgICArY29uc3QgX0VUSEVSX01BWF9MRU4gPSAoX0VUSF9GUkFNRV9MRU4gKyBfRVRIRVJfQ1JD
X0xFTikNCiAgICArY29uc3QgX19fTlJfbXNnc25kID0gNjkNCiAgICArY29uc3QgX1RDQV9QQUQg
PSA5DQogICAgK2NvbnN0IF9QUl9TRVRfRlBfTU9ERSA9IDQ1DQogICAgK2NvbnN0IF9OTF9NTUFQ
X1NUQVRVU19WQUxJRCA9IDINCiAgICArY29uc3QgX19fTlJfbW91bnQgPSAxNjUNCiAgICArY29u
c3QgX19JT0NfVFlQRUJJVFMgPSA4DQogICAgK2NvbnN0IF9TT0NLX0RHUkFNID0gMg0KICAgICtj
b25zdCBfTU9EX09GRlNFVCA9IF9BREpfT0ZGU0VUDQogICAgK2NvbnN0IF9JRkxBX01BUCA9IDE0
DQogICAgK2NvbnN0IF9FTDJOU1lOQyA9IDQ1DQogICAgK2NvbnN0IF9JUFY2X09SSUdEU1RBRERS
ID0gNzQNCiAgICArY29uc3QgX1NZU19tdW5sb2NrID0gX19fTlJfbXVubG9jaw0KICAgICtjb25z
dCBfVEhfQUNLID0gMHgxMA0KICAgICtjb25zdCBfTF9YVE5EID0gMg0KICAgICtjb25zdCBfU09f
VFhUSU1FID0gNjENCiAgICArY29uc3QgX1JUTV9ERUxBQ1RJT04gPSA0OQ0KICAgICtjb25zdCBf
WFRBQlMgPSAwMDE0MDAwDQogICAgK2NvbnN0IF9IQVZFX1NZU19TWVNDQUxMX0ggPSAxDQogICAg
K2NvbnN0IF9QUl9TRVRfU1BFQ1VMQVRJT05fQ1RSTCA9IDUzDQogICAgK2NvbnN0IF9USU9DR0RF
Vl92YWwgPSAyMTQ3NzY3MzQ2DQogICAgK2NvbnN0IF9fX05SX2Nvbm5lY3QgPSA0Mg0KICAgICtj
b25zdCBfWDg2X0NSNF9TTUVQX0JJVCA9IDIwDQogICAgK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1Nf
VkFMSUQgPSAweDAzDQogICAgK2NvbnN0IF9USU9DR0lDT1VOVCA9IDB4NTQ1RA0KICAgICtjb25z
dCBfU1lTX3N0YXRmcyA9IF9fX05SX3N0YXRmcw0KICAgICtjb25zdCBfTkVUTElOS19SRE1BID0g
MjANCiAgICArY29uc3QgX0lQVjZfMjI5MkhPUExJTUlUID0gOA0KICAgICtjb25zdCBfSUZGX09O
RV9RVUVVRSA9IDB4MjAwMA0KICAgICtjb25zdCBfSVBQT1JUX0NNRFNFUlZFUiA9IDUxNA0KICAg
ICtjb25zdCBfUEZfTUFYID0gNDQNCiAgICArY29uc3QgX1JUX0NMQVNTX01BWCA9IDI1NQ0KICAg
ICtjb25zdCBfSVBQUk9UT19JUFY2ID0gNDENCiAgICArY29uc3QgX1NJT0NTSUZCUiA9IDB4ODk0
MQ0KICAgICtjb25zdCBfX19JTlRfTEVBU1Q4X01BWF9fID0gMHg3Zg0KICAgICtjb25zdCBfX19E
RUMxMjhfTUFOVF9ESUdfXyA9IDM0DQogICAgK2NvbnN0IF9JQ01QNl9SUl9SRVNVTFRfRkxBR1Nf
Rk9SQklEREVOID0gMHgwMTAwDQogICAgK2NvbnN0IF9NQVBfU0hBUkVEID0gMHgwMQ0KICAgICtj
b25zdCBfRVVTRVJTID0gODcNCiAgICArY29uc3QgX01BWFRDID0gNg0KICAgICtjb25zdCBfVENQ
X1NZTl9TRU5UID0gMg0KICAgICtjb25zdCBfUEZfTkVUTElOSyA9IDE2DQogICAgK2NvbnN0IF9Y
RFBfQVRUQUNIRURfTk9ORSA9IDANCiAgICArY29uc3QgX19fREVDSU1BTF9ESUdfXyA9IDIxDQog
ICAgK2NvbnN0IF9FVEhFUl9BRERSX0xFTiA9IF9FVEhfQUxFTg0KICAgICtjb25zdCBfRkZJX1RZ
UEVfTEFTVCA9IF9GRklfVFlQRV9DT01QTEVYDQogICAgK2NvbnN0IF9QT1NJWF9NQURWX05PUk1B
TCA9IDANCiAgICArY29uc3QgX0FSUEhSRF9JRUVFODAyMTFfUFJJU00gPSA4MDINCiAgICArY29u
c3QgX0VUSF9QXzgwMjFBRCA9IDB4ODhBOA0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX01BR0lD
MkMgPSA1Mzc5OTMyMTYNCiAgICArY29uc3QgX01OVF9ERVRBQ0ggPSAyDQogICAgK2NvbnN0IF9J
UFRPU19FQ05fTk9UX0VDVCA9IDB4MDANCiAgICArY29uc3QgX1NTX09OU1RBQ0sgPSAxDQogICAg
K2NvbnN0IF9JT0NfSU4gPSAoX19JT0NfV1JJVEUgPDwgX19JT0NfRElSU0hJRlQpDQogICAgK2Nv
bnN0IF9FVEhfUF84MDIxQUggPSAweDg4RTcNCiAgICArY29uc3QgX0lGTEFfVFVOX1ZORVRfSERS
ID0gNQ0KICAgICtjb25zdCBfTVJFTUFQX01BWU1PVkUgPSAxDQogICAgK2NvbnN0IF9fX1JMSU1J
VF9OTElNSVRTID0gMTYNCiAgICArY29uc3QgX0ZfR0VUTEs2NCA9IDUNCiAgICArY29uc3QgX1JU
UFJPVF9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9QQVJPREQgPSAwMDAxMDAwDQogICAgK2NvbnN0
IF9fX05SX2tleGVjX2xvYWQgPSAyNDYNCiAgICArY29uc3QgX19fSUZMQV9WRl9QT1JUX01BWCA9
IDINCiAgICArY29uc3QgX1NZU19zd2Fwb2ZmID0gX19fTlJfc3dhcG9mZg0KICAgICtjb25zdCBf
X19TVERDX1VURl8zMl9fID0gMQ0KICAgICtjb25zdCBfUlRfVEFCTEVfTE9DQUwgPSAyNTUNCiAg
ICArY29uc3QgX0ZGU1lOQyA9IF9PX0ZTWU5DDQogICAgK2NvbnN0IF9QRU5ESU4gPSAwMDQwMDAw
DQogICAgK2NvbnN0IF9fX0lOVDhfTUFYX18gPSAweDdmDQogICAgK2NvbnN0IF9FVEhfUF9BUkNO
RVQgPSAweDAwMUENCiAgICArY29uc3QgX0ZEX1NFVFNJWkUgPSBfX19GRF9TRVRTSVpFDQogICAg
K2NvbnN0IF9NU0dfRU9SID0gMTI4DQogICAgK2NvbnN0IF9fTkVUX0lGX0FSUF9IID0gMQ0KICAg
ICtjb25zdCBfUlRNX0ZfQ0xPTkVEID0gMHgyMDANCiAgICArY29uc3QgX0VIV1BPSVNPTiA9IDEz
Mw0KICAgICtjb25zdCBfSVBQUk9UT19OT05FID0gNTkNCiAgICArY29uc3QgX1RDUF9DT09LSUVf
T1VUX05FVkVSID0gKDEgPDwgMSkNCiAgICArY29uc3QgX0VQUk9UTyA9IDcxDQogICAgK2NvbnN0
IF9fSU9DX05SU0hJRlQgPSAwDQogICAgK2NvbnN0IF9GX0VYTENLID0gNA0KICAgICtjb25zdCBf
X19OUl9jbG9uZSA9IDU2DQogICAgK2NvbnN0IF9fX05SX3B0cmFjZSA9IDEwMQ0KICAgICtjb25z
dCBfX1BPU0lYX1Y3X0xQQklHX09GRkJJRyA9IC0xDQogICAgK2NvbnN0IF9IQVZFX0FDT1NMID0g
MQ0KICAgICtjb25zdCBfU0lPQ0dJRkRTVEFERFIgPSAweDg5MTcNCiAgICArY29uc3QgX19QT1NJ
WF9MT0dJTl9OQU1FX01BWCA9IDkNCiAgICArY29uc3QgX1JUTkxHUlBfSVBWNl9ORVRDT05GID0g
MjUNCiAgICArY29uc3QgX1BBR0VfTUFTSyA9ICheKF9QQUdFX1NJWkUtMSkpDQogICAgK2NvbnN0
IF9fQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElOVEZMQUdTID0gMTEwNw0KICAgICtjb25zdCBfRkZJ
X1RZUEVfU0lOVDY0ID0gMTINCiAgICArY29uc3QgX19TQ19PUEVOX01BWCA9IDQNCiAgICArY29u
c3QgX19TQ18yX1NXX0RFViA9IDUxDQogICAgK2NvbnN0IF9OTE1fRl9BQ0sgPSAweDA0DQogICAg
K2NvbnN0IF9TQ05kOCA9ICJoaGQiDQogICAgK2NvbnN0IF9fX0ZMVDEyOF9NSU5fMTBfRVhQX18g
PSAoLTQ5MzEpDQogICAgK2NvbnN0IF9YRFBfRkxBR1NfU0tCX01PREUgPSAoMSA8PCAxKQ0KICAg
ICtjb25zdCBfU0lPQ0dSQVJQID0gMHg4OTYxDQogICAgK2NvbnN0IF9JRkxBX1ZGX1BPUlRTID0g
MjQNCiAgICArY29uc3QgX0NFUkFTRSA9IDAxNzcNCiAgICArY29uc3QgX19fTlJfc2V0cGdpZCA9
IDEwOQ0KICAgICtjb25zdCBfUlRGX0lOVEVSRkFDRSA9IDB4NDAwMDAwMDANCiAgICArY29uc3Qg
X0lGTEFfQlJQT1JUX0lTT0xBVEVEID0gMzMNCiAgICArY29uc3QgX1BSSW9GQVNUOCA9ICJvIg0K
ICAgICtjb25zdCBfSUZMQV9CT05EX1NMQVZFX0xJTktfRkFJTFVSRV9DT1VOVCA9IDMNCiAgICAr
Y29uc3QgX0JSS0lOVCA9IDAwMDAwMDINCiAgICArY29uc3QgX19fREVDSU1BTF9CSURfRk9STUFU
X18gPSAxDQogICAgK2NvbnN0IF9TT0xfU09DS0VUID0gMQ0KICAgICtjb25zdCBfX0NTX1BPU0lY
X1Y3X0lMUDMyX09GRkJJR19MREZMQUdTID0gMTEzNw0KICAgICtjb25zdCBfSUZMQV9QUklPUklU
WSA9IDkNCiAgICArY29uc3QgX0lUSU1FUl9SRUFMID0gMA0KICAgICtjb25zdCBfVENGTFNIID0g
MHg1NDBCDQogICAgK2NvbnN0IF9GRklfVEhJU0NBTEwgPSAzDQogICAgK2NvbnN0IF9JUF9OT0RF
RlJBRyA9IDIyDQogICAgK2NvbnN0IF9ORVRMSU5LX0ZJUkVXQUxMID0gMw0KICAgICtjb25zdCBf
X19OUl9zY2hlZF9nZXRhZmZpbml0eSA9IDIwNA0KICAgICtjb25zdCBfSVBQUk9UT19VRFBMSVRF
ID0gMTM2DQogICAgK2NvbnN0IF9GU19QUk9KSU5IRVJJVF9GTCA9IDB4MjAwMDAwMDANCiAgICAr
Y29uc3QgX01BRFZfRE9OVEZPUksgPSAxMA0KICAgICtjb25zdCBfTVNHX0NNU0dfQ0xPRVhFQyA9
IDEwNzM3NDE4MjQNCiAgICArY29uc3QgX0VOT0VOVCA9IDINCiAgICArY29uc3QgX0lQVE9TX0VD
Tl9FQ1QxID0gMHgwMQ0KICAgICtjb25zdCBfSUZMQV9WRl9JTkZPID0gMQ0KICAgICtjb25zdCBf
TE9DS19XUklURSA9IDEyOA0KICAgICtjb25zdCBfVENQX0xJU1RFTiA9IDEwDQogICAgK2NvbnN0
IF9JUE9QVF9UU19QUkVTUEVDID0gMw0KICAgICtjb25zdCBfX19QT1NJWF9GQURWX05PUkVVU0Ug
PSA1DQogICAgK2NvbnN0IF9BUlBPUF9SRVFVRVNUID0gMQ0KICAgICtjb25zdCBfUFRSQUNFX0VW
RU5UX0VYSVQgPSA2DQogICAgK2NvbnN0IF9YQVRUUl9OQU1FX01BWCA9IDI1NQ0KICAgICtjb25z
dCBfX19TX0lGTE5LID0gMDEyMDAwMA0KICAgICtjb25zdCBfVENBX1JPT1RfVEFCID0gMQ0KICAg
ICtjb25zdCBfU0tGX0FEX1BST1RPQ09MID0gMA0KICAgICtjb25zdCBfRU5PUEtHID0gNjUNCiAg
ICArY29uc3QgX19fQVRPTUlDX1JFTEFYRUQgPSAwDQogICAgK2NvbnN0IF9TWVNfZ2V0c29ja29w
dCA9IF9fX05SX2dldHNvY2tvcHQNCiAgICArY29uc3QgX0lGTEFfVkZfTElOS19TVEFURV9FTkFC
TEUgPSAxDQogICAgK2NvbnN0IF9WVERMWSA9IDAwNDAwMDANCiAgICArY29uc3QgX19fTlJfdGlt
ZXJfZGVsZXRlID0gMjI2DQogICAgK2NvbnN0IF9SVE5fVU5TUEVDID0gMA0KICAgICtjb25zdCBf
U09fU05EVElNRU8gPSAyMQ0KICAgICtjb25zdCBfQUZfVU5TUEVDID0gX1BGX1VOU1BFQw0KICAg
ICtjb25zdCBfVElPQ1NFUlNFVE1VTFRJID0gMHg1NDVCDQogICAgK2NvbnN0IF9BUlBIUkRfRkNQ
TCA9IDc4Ng0KICAgICtjb25zdCBfTE9DS19SVyA9IDE5Mg0KICAgICtjb25zdCBfUkVHX0NSMiA9
IDIyDQogICAgK2NvbnN0IF9fU0NfQVJHX01BWCA9IDANCiAgICArY29uc3QgX0FSUEhSRF9GQ1BQ
ID0gNzg0DQogICAgK2NvbnN0IF9VSU5UX1dJRFRIID0gMzINCiAgICArY29uc3QgX0lGTEFfVlhM
QU5fSUQgPSAxDQogICAgK2NvbnN0IF9fX1VTRV9YT1BFTiA9IDENCiAgICArY29uc3QgX0lQT1BU
X1NFQyA9IF9JUE9QVF9TRUNVUklUWQ0KICAgICtjb25zdCBfSUZMQV9UWFFMRU4gPSAxMw0KICAg
ICtjb25zdCBfU1lTX3Vtb3VudDIgPSBfX19OUl91bW91bnQyDQogICAgK2NvbnN0IF9UVU5fVFlQ
RV9NQVNLID0gMHgwMDBmDQogICAgK2NvbnN0IF9DTE9DS19SRUFMVElNRV9DT0FSU0UgPSA1DQog
ICAgK2NvbnN0IF9JRkxBX0JSX0ZEQl9GTFVTSCA9IDIxDQogICAgK2NvbnN0IF9SVE1fU0VUTkVJ
R0hUQkwgPSA2Nw0KICAgICtjb25zdCBfSVBfQUREX01FTUJFUlNISVAgPSAzNQ0KICAgICtjb25z
dCBfUlRQUk9UX0RIQ1AgPSAxNg0KICAgICtjb25zdCBfQ0xPTkVfUFRSQUNFID0gMHgwMDAwMjAw
MA0KICAgICtjb25zdCBfUFJPVF9OT05FID0gMHgwDQogICAgK2NvbnN0IF9MSU5VWF9SRUJPT1Rf
Q01EX1JFU1RBUlQgPSAweDAxMjM0NTY3DQogICAgK2NvbnN0IF9NQVhfSU5QVVQgPSAyNTUNCiAg
ICArY29uc3QgX1JUQV9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9GX0FERF9TRUFMUyA9IDEwMzMN
CiAgICArY29uc3QgX1VJT19NQVhJT1YgPSBfX19JT1ZfTUFYDQogICAgK2NvbnN0IF9fU0NfVFJB
Q0VfU1lTX01BWCA9IDI0NA0KICAgICtjb25zdCBfUEFSTVJLID0gMDAwMDAxMA0KICAgICtjb25z
dCBfX1NDX1hPUEVOX1hQRzMgPSA5OQ0KICAgICtjb25zdCBfUFJfR0VUX0ZQX01PREUgPSA0Ng0K
ICAgICtjb25zdCBfX1NDX1hPUEVOX1hQRzQgPSAxMDANCiAgICArY29uc3QgX1VJTlRfTEVBU1Q2
NF9XSURUSCA9IDY0DQogICAgK2NvbnN0IF9fU1lTX1dBSVRfSCA9IDENCiAgICArY29uc3QgX0VU
SF9QX1RSQUlMRVIgPSAweDAwMUMNCiAgICArY29uc3QgX1NPTF9UQ1AgPSA2DQogICAgK2NvbnN0
IF9BREpfTUlDUk8gPSAweDEwMDANCiAgICArY29uc3QgX05EVEFfVEhSRVNIMSA9IDINCiAgICAr
Y29uc3QgX1JUQV9JUF9QUk9UTyA9IDI3DQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9GTFVTSCA9
IDI0DQogICAgK2NvbnN0IF9UVU5TRVRHUk9VUF92YWwgPSAxMDc0MDI1Njc4DQogICAgK2NvbnN0
IF9TT19DTlhfQURWSUNFID0gNTMNCiAgICArY29uc3QgX05EVEFfVEhSRVNIMyA9IDQNCiAgICAr
Y29uc3QgX0xPQ0tfU0ggPSAxDQogICAgK2NvbnN0IF9fX1NJWkVPRl9XQ0hBUl9UX18gPSA0DQog
ICAgK2NvbnN0IF9TRU1fVkFMVUVfTUFYID0gKDIxNDc0ODM2NDcpDQogICAgK2NvbnN0IF9fX05S
X2dldHVpZCA9IDEwMg0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfTUNBU1RfRkxPT0QgPSAyNw0K
ICAgICtjb25zdCBfU09MX0JMVUVUT09USCA9IDI3NA0KICAgICtjb25zdCBfQVJQSFJEX0VUSEVS
ID0gMQ0KICAgICtjb25zdCBfSVBQT1JUX05BTUVTRVJWRVIgPSA0Mg0KICAgICtjb25zdCBfX1ND
X0JBU0UgPSAxMzQNCiAgICArY29uc3QgX0hPU1RfTkFNRV9NQVggPSA2NA0KICAgICtjb25zdCBf
WDg2X0NSMF9FVF9CSVQgPSA0DQogICAgK2NvbnN0IF9GX1NFVFBJUEVfU1ogPSAxMDMxDQogICAg
K2NvbnN0IF9fX1VJTlQxNl9NQVhfXyA9IDB4ZmZmZg0KICAgICtjb25zdCBfX19TRUdfRlMgPSAx
DQogICAgK2NvbnN0IF9TWVNfZnJlbW92ZXhhdHRyID0gX19fTlJfZnJlbW92ZXhhdHRyDQogICAg
K2NvbnN0IF9GRklfVFlQRV9VSU5UMTYgPSA3DQogICAgK2NvbnN0IF9fX0lMUDMyX09GRjMyX0xE
RkxBR1MgPSAiLW0zMiINCiAgICArY29uc3QgX0lQUE9SVF9NVFAgPSA1Nw0KICAgICtjb25zdCBf
U1lTX2ZzZXR4YXR0ciA9IF9fX05SX2ZzZXR4YXR0cg0KICAgICtjb25zdCBfX19OUl9leGl0ID0g
NjANCiAgICArY29uc3QgX0JQRl9IID0gMHgwOA0KICAgICtjb25zdCBfUFJfU0VUX1NFQ0NPTVAg
PSAyMg0KICAgICtjb25zdCBfRVRIX1BfRElBRyA9IDB4NjAwNQ0KICAgICtjb25zdCBfTE9HSU5f
TkFNRV9NQVggPSAyNTYNCiAgICArY29uc3QgX1NfSVJXWE8gPSAoX1NfSVJXWEcgPj4gMykNCiAg
ICArY29uc3QgX0ZGSV9TVERDQUxMID0gNQ0KICAgICtjb25zdCBfQVJQSFJEX0lORklOSUJBTkQg
PSAzMg0KICAgICtjb25zdCBfX0lPQ19XUklURSA9IDENCiAgICArY29uc3QgX1RJT0NFWENMID0g
MHg1NDBDDQogICAgK2NvbnN0IF9fU0NfVEhSRUFEX1JPQlVTVF9QUklPX1BST1RFQ1QgPSAyNDgN
CiAgICArY29uc3QgX1BUUkFDRV9PX1RSQUNFQ0xPTkUgPSA4DQogICAgK2NvbnN0IF9TWVNfcHJj
dGwgPSBfX19OUl9wcmN0bA0KICAgICtjb25zdCBfSVBfVFJBTlNQQVJFTlQgPSAxOQ0KICAgICtj
b25zdCBfSUZMQV9QT1JUX0hPU1RfVVVJRCA9IDUNCiAgICArY29uc3QgX19fTlJfZmFub3RpZnlf
bWFyayA9IDMwMQ0KICAgICtjb25zdCBfSUZGX1BPSU5UT1BPSU5UID0gMTYNCiAgICArY29uc3Qg
X1JURl9EWU5BTUlDID0gMHgwMDEwDQogICAgK2NvbnN0IF9TSU9DR0lGTUVUUklDID0gMHg4OTFk
DQogICAgK2NvbnN0IF9JRkxBX0JSX01DQVNUX1NUQVRTX0VOQUJMRUQgPSA0Mg0KICAgICtjb25z
dCBfU1lTX2V4ZWN2ZSA9IF9fX05SX2V4ZWN2ZQ0KICAgICtjb25zdCBfT05MUkVUID0gMDAwMDA0
MA0KICAgICtjb25zdCBfUlRBWF9SVFRWQVIgPSA1DQogICAgK2NvbnN0IF9JRkxBX0JSX01DQVNU
X01MRF9WRVJTSU9OID0gNDQNCiAgICArY29uc3QgX19fRkxUX01JTl9FWFBfXyA9ICgtMTI1KQ0K
ICAgICtjb25zdCBfTlVEX0RFTEFZID0gMHgwOA0KICAgICtjb25zdCBfX19OUl9zZW5kbW1zZyA9
IDMwNw0KICAgICtjb25zdCBfSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTID0gMzYNCiAgICArY29u
c3QgX0lQUE9SVF9FQ0hPID0gNw0KICAgICtjb25zdCBfX19OUl9jbG9ja19nZXRyZXMgPSAyMjkN
CiAgICArY29uc3QgX01DQVNUX1VOQkxPQ0tfU09VUkNFID0gNDQNCiAgICArY29uc3QgX0VUSF9Q
X0xPT1BCQUNLID0gMHg5MDAwDQogICAgK2NvbnN0IF9JVElNRVJfVklSVFVBTCA9IDENCiAgICAr
Y29uc3QgX1BSSWlMRUFTVDggPSAiaSINCiAgICArY29uc3QgX0VUSF9QX0NVU1QgPSAweDYwMDYN
CiAgICArY29uc3QgX0lGTEFfQlJQT1JUX0ZBU1RfTEVBVkUgPSA3DQogICAgK2NvbnN0IF9TWVNf
c2V0cmVzdWlkID0gX19fTlJfc2V0cmVzdWlkDQogICAgK2NvbnN0IF9SVEZfWFJFU09MVkUgPSAw
eDA4MDANCiAgICArY29uc3QgX0FSUEhSRF9JRUVFODAyMTFfUkFESU9UQVAgPSA4MDMNCiAgICAr
Y29uc3QgX19fU19JRkNIUiA9IDAwMjAwMDANCiAgICArY29uc3QgX0NNU1BBUiA9IDAxMDAwMDAw
MDAwMA0KICAgICtjb25zdCBfQVJQSFJEX1ZPSUQgPSAweEZGRkYNCiAgICArY29uc3QgX19fTlJf
bGlzdHhhdHRyID0gMTk0DQogICAgK2NvbnN0IF9SVEFfVUlEID0gMjUNCiAgICArY29uc3QgX19J
T0NfTlJNQVNLID0gKCgxIDw8IF9fSU9DX05SQklUUyktMSkNCiAgICArY29uc3QgX0lPQ1NJWkVf
U0hJRlQgPSAoX19JT0NfU0laRVNISUZUKQ0KICAgICtjb25zdCBfRUFHQUlOID0gMTENCiAgICAr
Y29uc3QgX19fRkxUX01BWF8xMF9FWFBfXyA9IDM4DQogICAgK2NvbnN0IF9JUFY2X01VTFRJQ0FT
VF9MT09QID0gMTkNCiAgICArY29uc3QgX19fTlJfZ2V0cGdpZCA9IDEyMQ0KICAgICtjb25zdCBf
U09fUFJJT1JJVFkgPSAxMg0KICAgICtjb25zdCBfTVNHX0RPTlRXQUlUID0gNjQNCiAgICArY29u
c3QgX0lPQ1NJWkVfTUFTSyA9IChfX0lPQ19TSVpFTUFTSyA8PCBfX0lPQ19TSVpFU0hJRlQpDQog
ICAgK2NvbnN0IF9fX0dDQ19BVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUgPSAyDQogICAgK2NvbnN0
IF9fX0ZMVDEyOF9FUFNJTE9OX18gPSAxLjENCiAgICArY29uc3QgX0VJTlRSID0gNA0KICAgICtj
b25zdCBfUlRGX05PUE1UVURJU0MgPSAweDQwMDANCiAgICArY29uc3QgX1JUUFJPVF9TVEFUSUMg
PSA0DQogICAgK2NvbnN0IF9JRkFfTEFCRUwgPSAzDQogICAgK2NvbnN0IF9TT19QUk9UT0NPTCA9
IDM4DQogICAgK2NvbnN0IF9fX05SX3JlYWRhaGVhZCA9IDE4Nw0KICAgICtjb25zdCBfVEhfU1lO
ID0gMHgwMg0KICAgICtjb25zdCBfUlROTEdSUF9JUFY2X1BSRUZJWCA9IDE4DQogICAgK2NvbnN0
IF9JQ01QNl9EU1RfVU5SRUFDSF9BRE1JTiA9IDENCiAgICArY29uc3QgX1NJT0NHSUZQRkxBR1Mg
PSAweDg5MzUNCiAgICArY29uc3QgX19TWVNfU1RBVEZTX0ggPSAxDQogICAgK2NvbnN0IF9fX1NU
RENfXyA9IDENCiAgICArY29uc3QgX19fREVDMTI4X01BWF9fID0gOS45OTk5OTk5OTk5OTk5OTk5
OTk5OTk5OTk5OTk5OTk5OTlFNjE0NA0KICAgICtjb25zdCBfSU42X0FERFJfR0VOX01PREVfTk9O
RSA9IDENCiAgICArY29uc3QgX1JUTV9TRVRMSU5LID0gMTkNCiAgICArY29uc3QgX0ZGSV9PSyA9
IDANCiAgICArY29uc3QgX19fSUZMQV9TVEFUU19NQVggPSA2DQogICAgK2NvbnN0IF9ORF9ST1VU
RVJfU09MSUNJVCA9IDEzMw0KICAgICtjb25zdCBfUFJfU1BFQ19TVE9SRV9CWVBBU1MgPSAwDQog
ICAgK2NvbnN0IF9TWVNfdGVlID0gX19fTlJfdGVlDQogICAgK2NvbnN0IF9GUEVfRkxUU1VCID0g
OA0KICAgICtjb25zdCBfTVNHX1dBSVRGT1JPTkUgPSA2NTUzNg0KICAgICtjb25zdCBfX1BDX0FM
TE9DX1NJWkVfTUlOID0gMTgNCiAgICArY29uc3QgX1NJR0lMTCA9IDQNCiAgICArY29uc3QgX0RO
X0RFTEVURSA9IDB4MDAwMDAwMDgNCiAgICArY29uc3QgX05JX05VTUVSSUNTRVJWID0gMg0KICAg
ICtjb25zdCBfUEZfSVNETiA9IDM0DQogICAgK2NvbnN0IF9QUl9DQVBfQU1CSUVOVCA9IDQ3DQog
ICAgK2NvbnN0IF9JUFRPU19UT1NfTUFTSyA9IDB4MUUNCiAgICArY29uc3QgX19TQ19OTF9MQU5H
TUFYID0gMTIwDQogICAgK2NvbnN0IF9TSUdDTEQgPSBfU0lHQ0hMRA0KICAgICtjb25zdCBfX19O
Ul9jaG1vZCA9IDkwDQogICAgK2NvbnN0IF9TVERPVVRfRklMRU5PID0gMQ0KICAgICtjb25zdCBf
X0xQNjQgPSAxDQogICAgK2NvbnN0IF9fX05SX21xX2dldHNldGF0dHIgPSAyNDUNCiAgICArY29u
c3QgX1NZU19saXN0ZW4gPSBfX19OUl9saXN0ZW4NCiAgICArY29uc3QgX0lGTEFfVkZfTElOS19T
VEFURV9BVVRPID0gMA0KICAgICtjb25zdCBfWDg2X0VGTEFHU19SRl9CSVQgPSAxNg0KICAgICtj
b25zdCBfVENQX1RISU5fRFVQQUNLID0gMTcNCiAgICArY29uc3QgX19fTlJfc3luYyA9IDE2Mg0K
ICAgICtjb25zdCBfU09fQVRUQUNIX1JFVVNFUE9SVF9FQlBGID0gNTINCiAgICArY29uc3QgX19f
U0laRU9GX0RPVUJMRV9fID0gOA0KICAgICtjb25zdCBfRU1VTFRJSE9QID0gNzINCiAgICArY29u
c3QgX19QT1NJWF9RTElNSVQgPSAxDQogICAgK2NvbnN0IF9TWVNfZ2V0aXRpbWVyID0gX19fTlJf
Z2V0aXRpbWVyDQogICAgK2NvbnN0IF9SVE1fR0VUUURJU0MgPSAzOA0KICAgICtjb25zdCBfRlNf
Q09NUFJCTEtfRkwgPSAweDAwMDAwMjAwDQogICAgK2NvbnN0IF9TWVNfZ2V0cGdycCA9IF9fX05S
X2dldHBncnANCiAgICArY29uc3QgX19fRkxUMTI4X01BTlRfRElHX18gPSAxMTMNCiAgICArY29u
c3QgX1NBX09OU1RBQ0sgPSAweDA4MDAwMDAwDQogICAgK2NvbnN0IF9JRkxBX0JSX01DQVNUX0lH
TVBfVkVSU0lPTiA9IDQzDQogICAgK2NvbnN0IF9TWVNfcGtleV9mcmVlID0gX19fTlJfcGtleV9m
cmVlDQogICAgK2NvbnN0IF9fX05SX3NobWN0bCA9IDMxDQogICAgK2NvbnN0IF9fTUtOT0RfVkVS
ID0gMA0KICAgICtjb25zdCBfRlNfRU5DUllQVElPTl9NT0RFX1NQRUNLMTI4XzI1Nl9YVFMgPSA3
DQogICAgK2NvbnN0IF9TWVNfZ2V0ZGVudHM2NCA9IF9fX05SX2dldGRlbnRzNjQNCiAgICArY29u
c3QgX19fTlJfY2xvc2UgPSAzDQogICAgK2NvbnN0IF9GU19CVFJFRV9GTCA9IDB4MDAwMDEwMDAN
CiAgICArY29uc3QgX01TR19SU1QgPSA0MDk2DQogICAgK2NvbnN0IF9fU0NfUkVBTFRJTUVfU0lH
TkFMUyA9IDkNCiAgICArY29uc3QgX0lOX0FMTF9FVkVOVFMgPSAoX0lOX0FDQ0VTUyB8IF9JTl9N
T0RJRlkgfCBfSU5fQVRUUklCIHwgX0lOX0NMT1NFX1dSSVRFIHwgX0lOX0NMT1NFX05PV1JJVEUg
fCBfSU5fT1BFTiB8IF9JTl9NT1ZFRF9GUk9NIHwgX0lOX01PVkVEX1RPIHwgX0lOX0NSRUFURSB8
IF9JTl9ERUxFVEUgfCBfSU5fREVMRVRFX1NFTEYgfCBfSU5fTU9WRV9TRUxGKQ0KICAgICtjb25z
dCBfVUlOVF9GQVNUMTZfTUFYID0gKDE4NDQ2NzQ0MDczNzA5NTUxNjE1KQ0KICAgICtjb25zdCBf
UFRSQUNFX0FUVEFDSCA9IDE2DQogICAgK2NvbnN0IF9fX05SX21rbm9kYXQgPSAyNTkNCiAgICAr
Y29uc3QgX1NDTmk4ID0gImhoaSINCiAgICArY29uc3QgX19TQ19MRVZFTDFfRENBQ0hFX0FTU09D
ID0gMTg5DQogICAgK2NvbnN0IF9SVE1fTkVXQ0FDSEVSRVBPUlQgPSA5Ng0KICAgICtjb25zdCBf
U09fUEVFUk5BTUUgPSAyOA0KICAgICtjb25zdCBfWDg2X0NSNF9PU0ZYU1JfQklUID0gOQ0KICAg
ICtjb25zdCBfX19EQkxfTUlOXzEwX0VYUF9fID0gKC0zMDcpDQogICAgK2NvbnN0IF9fUE9TSVgy
X0NIQVJDTEFTU19OQU1FX01BWCA9IDE0DQogICAgK2NvbnN0IF9fX0JJVF9UWVBFU19ERUZJTkVE
X18gPSAxDQogICAgK2NvbnN0IF9fQklUU19TVEFUX0ggPSAxDQogICAgK2NvbnN0IF9TSUdLSUxM
ID0gOQ0KICAgICtjb25zdCBfX19OUl9tbWFwID0gOQ0KICAgICtjb25zdCBfX0RJUkVOVF9IID0g
MQ0KICAgICtjb25zdCBfUlRBX0NBQ0hFSU5GTyA9IDEyDQogICAgK2NvbnN0IF9SVEZfTVRVID0g
MHgwMDQwDQogICAgK2NvbnN0IF9ORFRQQV9RVUVVRV9MRU5CWVRFUyA9IDE2DQogICAgK2NvbnN0
IF9DWDg2X0NDUjQgPSAweGU4DQogICAgK2NvbnN0IF9JRkFfVU5TUEVDID0gMA0KICAgICtjb25z
dCBfX19OUl9zZXRybGltaXQgPSAxNjANCiAgICArY29uc3QgX1NPX01FTUlORk8gPSA1NQ0KICAg
ICtjb25zdCBfX1NDX05QUk9DRVNTT1JTX09OTE4gPSA4NA0KICAgICtjb25zdCBfTUNBU1RfSk9J
Tl9HUk9VUCA9IDQyDQogICAgK2NvbnN0IF9FT1ZFUkZMT1cgPSA3NQ0KICAgICtjb25zdCBfTUFE
Vl9XSUxMTkVFRCA9IDMNCiAgICArY29uc3QgX0FSUEhSRF9ISVBQSSA9IDc4MA0KICAgICtjb25z
dCBfTlNJRyA9IF9fTlNJRw0KICAgICtjb25zdCBfQUZfUk9VVEUgPSBfUEZfUk9VVEUNCiAgICAr
Y29uc3QgX1NJT0NHU1RBTVBOUyA9IDB4ODkwNw0KICAgICtjb25zdCBfUE9SVF9WRFBfUkVTUE9O
U0VfU1VDQ0VTUyA9IDANCiAgICArY29uc3QgX0lGTEFfTUFDU0VDX1JFUExBWV9QUk9URUNUID0g
MTINCiAgICArY29uc3QgX1RJT0NNU0VUID0gMHg1NDE4DQogICAgK2NvbnN0IF9ORVRMSU5LX0tP
QkpFQ1RfVUVWRU5UID0gMTUNCiAgICArY29uc3QgX19QT1NJWDJfRVhQUl9ORVNUX01BWCA9IDMy
DQogICAgK2NvbnN0IF9JUF9NVUxUSUNBU1RfTE9PUCA9IDM0DQogICAgK2NvbnN0IF9SVE1fR0VU
TURCID0gODYNCiAgICArY29uc3QgX19fSU5UX0xFQVNUOF9XSURUSF9fID0gOA0KICAgICtjb25z
dCBfX19OUl9ydF9zaWdxdWV1ZWluZm8gPSAxMjkNCiAgICArY29uc3QgX1g4Nl9DUjRfUEtFX0JJ
VCA9IDIyDQogICAgK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfUEVSTV9IV0FERFIgPSA0DQogICAg
K2NvbnN0IF9fUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVCA9IDIwMDgwOQ0KICAgICtjb25zdCBf
RVBPTExNU0cgPSAxMDI0DQogICAgK2NvbnN0IF9JRkxBX0dTT19NQVhfU0laRSA9IDQxDQogICAg
K2NvbnN0IF9fU0NfTEVWRUwxX0lDQUNIRV9MSU5FU0laRSA9IDE4Nw0KICAgICtjb25zdCBfX19O
Ul9tc3luYyA9IDI2DQogICAgK2NvbnN0IF9SVEFfTVVMVElQQVRIID0gOQ0KICAgICtjb25zdCBf
RkYwID0gMDAwMDAwMA0KICAgICtjb25zdCBfRkYxID0gMDEwMDAwMA0KICAgICtjb25zdCBfRVRI
X1BfQVRNRkFURSA9IDB4ODg4NA0KICAgICtjb25zdCBfWDg2X0VGTEFHU19JRF9CSVQgPSAyMQ0K
ICAgICtjb25zdCBfX19OUl9iaW5kID0gNDkNCiAgICArY29uc3QgX19ERUZBVUxUX1NPVVJDRSA9
IDENCiAgICArY29uc3QgX0lQT1BUX1NFQ1VSX1JFU1RSID0gMHhhZjEzDQogICAgK2NvbnN0IF9J
RkxBX1ZYTEFOX0NPTExFQ1RfTUVUQURBVEEgPSAyNQ0KICAgICtjb25zdCBfU1RBVFhfVUlEID0g
MHgwMDA4DQogICAgK2NvbnN0IF9QVFJBQ0VfR0VURlBYUkVHUyA9IDE4DQogICAgK2NvbnN0IF9T
WVNfZ2V0cHJpb3JpdHkgPSBfX19OUl9nZXRwcmlvcml0eQ0KICAgICtjb25zdCBfSEFWRV9QSVBF
MiA9IDENCiAgICArY29uc3QgX19fTlJfY2xvY2tfc2V0dGltZSA9IDIyNw0KICAgICtjb25zdCBf
X19OUl9tdW5sb2NrID0gMTUwDQogICAgK2NvbnN0IF9SVFBST1RfT1NQRiA9IDE4OA0KICAgICtj
b25zdCBfUlRNX0dFVExJTksgPSAxOA0KICAgICtjb25zdCBfX19OUl9hbGFybSA9IDM3DQogICAg
K2NvbnN0IF9fX09fRFNZTkMgPSAwMTAwMDANCiAgICArY29uc3QgX1BSSU9fUEdSUCA9IDENCiAg
ICArY29uc3QgX19fTlJfc3luY2ZzID0gMzA2DQogICAgK2NvbnN0IF9FTk9UU1VQID0gX0VPUE5P
VFNVUFANCiAgICArY29uc3QgX05FVExJTktfVU5VU0VEID0gMQ0KICAgICtjb25zdCBfSUNNUDZf
UlJfUENPVVNFX0ZMQUdTX0RFQ1JWTFRJTUUgPSAweDgwDQogICAgK2NvbnN0IF9IQVZFX1NZU19T
T0NLRVRfSCA9IDENCiAgICArY29uc3QgX1NZU19zZXRfcm9idXN0X2xpc3QgPSBfX19OUl9zZXRf
cm9idXN0X2xpc3QNCiAgICArY29uc3QgX0NMT0NLX01PTk9UT05JQ19DT0FSU0UgPSA2DQogICAg
K2NvbnN0IF9fQ1NfWEJTNV9MUEJJR19PRkZCSUdfQ0ZMQUdTID0gMTExMg0KICAgICtjb25zdCBf
X0FTTV9YODZfVU5JU1REXzY0X0ggPSAxDQogICAgK2NvbnN0IF9TWVNfcHJvY2Vzc192bV9yZWFk
diA9IF9fX05SX3Byb2Nlc3Nfdm1fcmVhZHYNCiAgICArY29uc3QgX1g4Nl9DUjBfTVBfQklUID0g
MQ0KICAgICtjb25zdCBfSVBPUFRfTUlOT0ZGID0gNA0KICAgICtjb25zdCBfSVBWNl9WNk9OTFkg
PSAyNg0KICAgICtjb25zdCBfWDg2X0NSNF9GU0dTQkFTRV9CSVQgPSAxNg0KICAgICtjb25zdCBf
U0lHRVZfU0lHTkFMID0gMA0KICAgICtjb25zdCBfU1lTX3J0X3NpZ3N1c3BlbmQgPSBfX19OUl9y
dF9zaWdzdXNwZW5kDQogICAgK2NvbnN0IF9SVE1fTkVXTkVJR0ggPSAyOA0KICAgICtjb25zdCBf
X19QVEhSRUFEX1JXTE9DS19JTlRfRkxBR1NfU0hBUkVEID0gMQ0KICAgICtjb25zdCBfX19JTlRf
TEVBU1Q2NF9XSURUSF9fID0gNjQNCiAgICArY29uc3QgX1NZU19nZXRwZWVybmFtZSA9IF9fX05S
X2dldHBlZXJuYW1lDQogICAgK2NvbnN0IF9fX05SX2NoZGlyID0gODANCiAgICArY29uc3QgX19f
TlJfZXhpdF9ncm91cCA9IDIzMQ0KICAgICtjb25zdCBfX19QT1NJWDJfVEhJU19WRVJTSU9OID0g
MjAwODA5DQogICAgK2NvbnN0IF9OTDAgPSAwMDAwMDAwDQogICAgK2NvbnN0IF9fX0lGTEFfUk1O
RVRfTUFYID0gMw0KICAgICtjb25zdCBfX1NDXzJfQ19WRVJTSU9OID0gOTYNCiAgICArY29uc3Qg
X0FSUEhSRF9TTElQNiA9IDI1OA0KICAgICtjb25zdCBfU1lTX2dldGVnaWQgPSBfX19OUl9nZXRl
Z2lkDQogICAgK2NvbnN0IF9fU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUyA9IDczDQog
ICAgK2NvbnN0IF9TSUdUU1RQID0gMjANCiAgICArY29uc3QgX01TR19GSU4gPSA1MTINCiAgICAr
Y29uc3QgX05EVVNFUk9QVF9TUkNBRERSID0gMQ0KICAgICtjb25zdCBfSU5fQ0xBU1NDX0hPU1Qg
PSAoMHhmZmZmZmZmZiAmIF5fSU5fQ0xBU1NDX05FVCkNCiAgICArY29uc3QgX0NIQVJfQklUID0g
X19fQ0hBUl9CSVRfXw0KICAgICtjb25zdCBfTUNMX0ZVVFVSRSA9IDINCiAgICArY29uc3QgX1JU
QVhfVU5TUEVDID0gMA0KICAgICtjb25zdCBfSUZMQV9CT05EX0ZBSUxfT1ZFUl9NQUMgPSAxMw0K
ICAgICtjb25zdCBfX19MREJMX0hBU19ERU5PUk1fXyA9IDENCiAgICArY29uc3QgX1NJR0lPVCA9
IF9TSUdBQlJUDQogICAgK2NvbnN0IF9fX05SX3Zmb3JrID0gNTgNCiAgICArY29uc3QgX19CSVRT
X1BUSFJFQURUWVBFU19BUkNIX0ggPSAxDQogICAgK2NvbnN0IF9ORFRBX1BBRCA9IDkNCiAgICAr
Y29uc3QgX19fTlJfc3dhcG9mZiA9IDE2OA0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfUFJPVEVD
VCA9IDgNCiAgICArY29uc3QgX0FUX1NZTUxJTktfRk9MTE9XID0gMHg0MDANCiAgICArY29uc3Qg
X1BSX01DRV9LSUxMX0xBVEUgPSAwDQogICAgK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0Vf
SU5TVUZGSUNJRU5UX1JFU09VUkNFUyA9IDI2MA0KICAgICtjb25zdCBfRlNfWEZMQUdfRVhUU0la
RSA9IDB4MDAwMDA4MDANCiAgICArY29uc3QgX19DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdT
ID0gMTEwNQ0KICAgICtjb25zdCBfRlNfWEZMQUdfUlRJTkhFUklUID0gMHgwMDAwMDEwMA0KICAg
ICtjb25zdCBfRlBFX0lOVE9WRiA9IDINCiAgICArY29uc3QgX1NIUlRfTUFYID0gX19fU0hSVF9N
QVhfXw0KICAgICtjb25zdCBfX19OUl9wcm9jZXNzX3ZtX3JlYWR2ID0gMzEwDQogICAgK2NvbnN0
IF9NU19ESVJTWU5DID0gMTI4DQogICAgK2NvbnN0IF9OX1NZTkNfUFBQID0gMTQNCiAgICArY29u
c3QgX19NS05PRF9WRVJfTElOVVggPSAwDQogICAgK2NvbnN0IF9JUF9SRUNWRlJBR1NJWkUgPSAy
NQ0KICAgICtjb25zdCBfSUZMQV9CUl9WTEFOX1NUQVRTX0VOQUJMRUQgPSA0MQ0KICAgICtjb25z
dCBfUEFHRV9TSElGVCA9IDEyDQogICAgK2NvbnN0IF9JTExfSUxMT1BOID0gMg0KICAgICtjb25z
dCBfTE9DS19SRUFEID0gNjQNCiAgICArY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9BRF9BR0dSRUdB
VE9SX0lEID0gNg0KICAgICtjb25zdCBfU09MX1gyNSA9IDI2Mg0KICAgICtjb25zdCBfSVBUT1Nf
TE9XREVMQVkgPSAweDEwDQogICAgK2NvbnN0IF9fU1lTX0lPQ1RMX0ggPSAxDQogICAgK2NvbnN0
IF9TWVNfZ2V0c2lkID0gX19fTlJfZ2V0c2lkDQogICAgK2NvbnN0IF9fX1NfSUZTT0NLID0gMDE0
MDAwMA0KICAgICtjb25zdCBfUFJfU0VUX01NX0FSR19FTkQgPSA5DQogICAgK2NvbnN0IF9GRklf
VFJBTVBPTElORV9TSVpFID0gMjQNCiAgICArY29uc3QgX0VUSF9QX05DU0kgPSAweDg4RjgNCiAg
ICArY29uc3QgX1BPUlRfUFJPRklMRV9SRVNQT05TRV9JTlBST0dSRVNTID0gMjU3DQogICAgK2Nv
bnN0IF9TQV9TVEFDSyA9IF9TQV9PTlNUQUNLDQogICAgK2NvbnN0IF9JRkFfQU5ZQ0FTVCA9IDUN
CiAgICArY29uc3QgX1JUQVhfQ0NfQUxHTyA9IDE2DQogICAgK2NvbnN0IF9OVURfUFJPQkUgPSAw
eDEwDQogICAgK2NvbnN0IF9QVFJBQ0VfUEVFS1VTRVIgPSAzDQogICAgK2NvbnN0IF9JQ01QNl9U
SU1FX0VYQ0VFRF9UUkFOU0lUID0gMA0KICAgICtjb25zdCBfX1NDX1BSSU9SSVRZX1NDSEVEVUxJ
TkcgPSAxMA0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y3X0lMUDMyX09GRkJJR19MSUJTID0gMTEz
OA0KICAgICtjb25zdCBfU1lTX3JlYWRsaW5rYXQgPSBfX19OUl9yZWFkbGlua2F0DQogICAgK2Nv
bnN0IF9TX0lFWEVDID0gX1NfSVhVU1INCiAgICArY29uc3QgX1RDUF9DTE9TSU5HID0gMTENCiAg
ICArY29uc3QgX19CSVRTX1RJTUVfSCA9IDENCiAgICArY29uc3QgX0lQX01TRklMVEVSID0gNDEN
CiAgICArY29uc3QgX0hBVkVfQVNfWDg2X0FFUyA9IDENCiAgICArY29uc3QgX19fUkxJTUlUX0xP
Q0tTID0gMTANCiAgICArY29uc3QgX1RIX1VSRyA9IDB4MjANCiAgICArY29uc3QgX09fU1lOQyA9
IDA0MDEwMDAwDQogICAgK2NvbnN0IF9fU1lTX1VJT19IID0gMQ0KICAgICtjb25zdCBfTUFDU0VD
X1ZBTElEQVRFX0NIRUNLID0gMQ0KICAgICtjb25zdCBfSUdOQ1IgPSAwMDAwMjAwDQogICAgK2Nv
bnN0IF9fX0lOVFBUUl9XSURUSF9fID0gNjQNCiAgICArY29uc3QgX19DU19QT1NJWF9WN19MUDY0
X09GRjY0X0NGTEFHUyA9IDExNDANCiAgICArY29uc3QgX0JVU19PQkpFUlIgPSAzDQogICAgK2Nv
bnN0IF9UQ1BfQ09OR0VTVElPTiA9IDEzDQogICAgK2NvbnN0IF9fX05SX3F1ZXJ5X21vZHVsZSA9
IDE3OA0KICAgICtjb25zdCBfTkxNX0ZfUk9PVCA9IDB4MTAwDQogICAgK2NvbnN0IF9FQkFEUlFD
ID0gNTYNCiAgICArY29uc3QgX1NZU19tc2djdGwgPSBfX19OUl9tc2djdGwNCiAgICArY29uc3Qg
X0JQRl9NRU1XT1JEUyA9IDE2DQogICAgK2NvbnN0IF9JRkxBX1ZGX1ZMQU5fSU5GTyA9IDENCiAg
ICArY29uc3QgX1JUTkxHUlBfTkRfVVNFUk9QVCA9IDIwDQogICAgK2NvbnN0IF9BVEZfRE9OVFBV
QiA9IDB4NDANCiAgICArY29uc3QgX19fTlJfc2h1dGRvd24gPSA0OA0KICAgICtjb25zdCBfUlRO
TEdSUF9NUExTX05FVENPTkYgPSAyOQ0KICAgICtjb25zdCBfX1NDX0lOVF9NQVggPSAxMDQNCiAg
ICArY29uc3QgX19fTlJfc2V0dWlkID0gMTA1DQogICAgK2NvbnN0IF9IVVBDTCA9IDAwMDIwMDAN
CiAgICArY29uc3QgX0FGX1JEUyA9IF9QRl9SRFMNCiAgICArY29uc3QgX1BSX1NFVF9USU1FUlNM
QUNLID0gMjkNCiAgICArY29uc3QgX0NMT05FX1NJR0hBTkQgPSAweDAwMDAwODAwDQogICAgK2Nv
bnN0IF9QUl9TRVRfTU1fQVJHX1NUQVJUID0gOA0KICAgICtjb25zdCBfX19OUl9kdXAyID0gMzMN
CiAgICArY29uc3QgX19fTlJfZHVwMyA9IDI5Mg0KICAgICtjb25zdCBfX1BPU0lYX1RIUkVBRF9Q
UklPX1BST1RFQ1QgPSAyMDA4MDkNCiAgICArY29uc3QgX1BSX1NFVF9NTV9NQVAgPSAxNA0KICAg
ICtjb25zdCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MgPSAxMTIwDQogICAgK2Nv
bnN0IF9fX05SX3NjaGVkX2dldHNjaGVkdWxlciA9IDE0NQ0KICAgICtjb25zdCBfX1NDX1hPUEVO
X0NSWVBUID0gOTINCiAgICArY29uc3QgX1JUTV9ORVdST1VURSA9IDI0DQogICAgK2NvbnN0IF9T
SV9MT0FEX1NISUZUID0gMTYNCiAgICArY29uc3QgX1BSSWRMRUFTVDE2ID0gImQiDQogICAgK2Nv
bnN0IF9NT0RfRVNURVJST1IgPSBfQURKX0VTVEVSUk9SDQogICAgK2NvbnN0IF9JUFBPUlRfRUZT
U0VSVkVSID0gNTIwDQogICAgK2NvbnN0IF9BRl9JRUVFODAyMTU0ID0gX1BGX0lFRUU4MDIxNTQN
CiAgICArY29uc3QgX1NZU19zaWduYWxmZDQgPSBfX19OUl9zaWduYWxmZDQNCiAgICArY29uc3Qg
X1RJT0NTU09GVENBUiA9IDB4NTQxQQ0KICAgICtjb25zdCBfX19OUl91bW91bnQyID0gMTY2DQog
ICAgK2NvbnN0IF9JRkxBX1ZSRl9UQUJMRSA9IDENCiAgICArY29uc3QgX1NPX1RJTUVTVEFNUElO
RyA9IDM3DQogICAgK2NvbnN0IF9NU19SRE9OTFkgPSAxDQogICAgK2NvbnN0IF9TS0ZfTkVUX09G
RiA9ICgtMHgxMDAwMDApDQogICAgK2NvbnN0IF9ETl9BQ0NFU1MgPSAweDAwMDAwMDAxDQogICAg
K2NvbnN0IF9TWVNfYWNjZXNzID0gX19fTlJfYWNjZXNzDQogICAgK2NvbnN0IF9fU0NfVjZfTFBC
SUdfT0ZGQklHID0gMTc5DQogICAgK2NvbnN0IF9JUE9QVF9SRVNFUlZFRDEgPSAweDIwDQogICAg
K2NvbnN0IF9UQ1BfQ09PS0lFX01BWCA9IDE2DQogICAgK2NvbnN0IF9STU5FVF9GTEFHU19JTkdS
RVNTX0RFQUdHUkVHQVRJT04gPSAoMSA8PCAwKQ0KICAgICtjb25zdCBfTVNfU1RSSUNUQVRJTUUg
PSAxNjc3NzIxNg0KICAgICtjb25zdCBfX19OUl9jbG9ja19nZXR0aW1lID0gMjI4DQogICAgK2Nv
bnN0IF9fX05SX3NlbXRpbWVkb3AgPSAyMjANCiAgICArY29uc3QgX19VVFNOQU1FX1JFTEVBU0Vf
TEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSA0KICAgICtjb25zdCBfX19ERUMzMl9NSU5fRVhQX18g
PSAoLTk0KQ0KICAgICtjb25zdCBfWDg2X0VGTEFHU19GSVhFRF9CSVQgPSAxDQogICAgK2NvbnN0
IF9IQVZFX1NZU19QUkNUTF9IID0gMQ0KICAgICtjb25zdCBfX1BPU0lYX1JFRU5UUkFOVF9GVU5D
VElPTlMgPSAxDQogICAgK2NvbnN0IF9CTE9DS19TSVpFX0JJVFMgPSAxMA0KICAgICtjb25zdCBf
RUNPTk5SRVNFVCA9IDEwNA0KICAgICtjb25zdCBfSUZMQV9WRl9JQl9QT1JUX0dVSUQgPSAxMQ0K
ICAgICtjb25zdCBfX19EQkxfREVDSU1BTF9ESUdfXyA9IDE3DQogICAgK2NvbnN0IF9IQVZFX09Q
RU5BVCA9IDENCiAgICArY29uc3QgX1RVTl9QS1RfU1RSSVAgPSAweDAwMDENCiAgICArY29uc3Qg
X1ZTVE9QID0gOQ0KICAgICtjb25zdCBfSVBUT1NfRFNDUF9BRjExID0gMHgyOA0KICAgICtjb25z
dCBfSVBUT1NfRFNDUF9BRjEyID0gMHgzMA0KICAgICtjb25zdCBfSVBUT1NfRFNDUF9BRjEzID0g
MHgzOA0KICAgICtjb25zdCBfX19OUl9yZWN2bW1zZyA9IDI5OQ0KICAgICtjb25zdCBfX19VU0Vf
WE9QRU4ySzggPSAxDQogICAgK2NvbnN0IF9QUl9GUF9FWENfRElWID0gMHgwMTAwMDANCiAgICAr
Y29uc3QgX0NMT05FX0RFVEFDSEVEID0gMHgwMDQwMDAwMA0KICAgICtjb25zdCBfU1lTX2dldF9y
b2J1c3RfbGlzdCA9IF9fX05SX2dldF9yb2J1c3RfbGlzdA0KICAgICtjb25zdCBfU09fREVUQUNI
X0JQRiA9IF9TT19ERVRBQ0hfRklMVEVSDQogICAgK2NvbnN0IF9TVEFUWF9BVFRSX0FVVE9NT1VO
VCA9IDB4MTAwMA0KICAgICtjb25zdCBfX1BPU0lYX1RJTUVSUyA9IDIwMDgwOQ0KICAgICtjb25z
dCBfVENQSV9PUFRfRUNOX1NFRU4gPSAxNg0KICAgICtjb25zdCBfQVJQSFJEX0FTSCA9IDc4MQ0K
ICAgICtjb25zdCBfTVNfUk1UX01BU0sgPSAoX01TX1JET05MWXxfTVNfU1lOQ0hST05PVVN8X01T
X01BTkRMT0NLfF9NU19JX1ZFUlNJT058IF9NU19MQVpZVElNRSkNCiAgICArY29uc3QgX1NZU19t
cV9ub3RpZnkgPSBfX19OUl9tcV9ub3RpZnkNCiAgICArY29uc3QgX0lGRl9VUCA9IDENCiAgICAr
Y29uc3QgX0lQUFJPVE9fRlJBR01FTlQgPSA0NA0KICAgICtjb25zdCBfU0NOaUxFQVNUMTYgPSAi
aGkiDQogICAgK2NvbnN0IF9GX1NFQUxfU0hSSU5LID0gMHgwMDAyDQogICAgK2NvbnN0IF9GU19O
T1RBSUxfRkwgPSAweDAwMDA4MDAwDQogICAgK2NvbnN0IF9TVEFUWF9CVElNRSA9IDB4MDgwMA0K
ICAgICtjb25zdCBfX19JRkxBX0JSUE9SVF9NQVggPSAzNQ0KICAgICtjb25zdCBfX19OUl9leGVj
dmUgPSA1OQ0KICAgICtjb25zdCBfX19VU0VfRVhURVJOX0lOTElORVMgPSAxDQogICAgK2NvbnN0
IF9JUF9CSU5EX0FERFJFU1NfTk9fUE9SVCA9IDI0DQogICAgK2NvbnN0IF9JTlQ4X01BWCA9ICgx
MjcpDQogICAgK2NvbnN0IF9NQURWX1NFUVVFTlRJQUwgPSAyDQogICAgK2NvbnN0IF9GX1dSTENL
ID0gMQ0KICAgICtjb25zdCBfSVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDANCiAgICArY29uc3Qg
X0lQX1BNVFVESVNDX1dBTlQgPSAxDQogICAgK2NvbnN0IF9TWVNfY3JlYXRlX21vZHVsZSA9IF9f
X05SX2NyZWF0ZV9tb2R1bGUNCiAgICArY29uc3QgX0lGTEFfQlJfUk9PVF9JRCA9IDEwDQogICAg
K2NvbnN0IF9TWVNfcGl2b3Rfcm9vdCA9IF9fX05SX3Bpdm90X3Jvb3QNCiAgICArY29uc3QgX0Iy
MzA0MDAgPSAwMDEwMDAzDQogICAgK2NvbnN0IF9TT0xfVExTID0gMjgyDQogICAgK2NvbnN0IF9f
TkVUX1JPVVRFX0ggPSAxDQogICAgK2NvbnN0IF9FTElCQkFEID0gODANCiAgICArY29uc3QgX1JQ
TV9QQ09fU0VUR0xPQkFMID0gMw0KICAgICtjb25zdCBfQlJJREdFX01PREVfVU5TUEVDID0gMA0K
ICAgICtjb25zdCBfRU5PQlVGUyA9IDEwNQ0KICAgICtjb25zdCBfX19TSFJUX1dJRFRIX18gPSAx
Ng0KICAgICtjb25zdCBfUlRfQ0xBU1NfVU5TUEVDID0gMA0KICAgICtjb25zdCBfX19GTFQxMjhf
TUFYX0VYUF9fID0gMTYzODQNCiAgICArY29uc3QgX0lQVE9TX0RTQ1BfQUYyMSA9IDB4NDgNCiAg
ICArY29uc3QgX0lQVE9TX0RTQ1BfQUYyMiA9IDB4NTANCiAgICArY29uc3QgX0lQVE9TX0RTQ1Bf
QUYyMyA9IDB4NTgNCiAgICArY29uc3QgX19fRkxUMzJYX01BWF8xMF9FWFBfXyA9IDMwOA0KICAg
ICtjb25zdCBfX1NDX1VJT19NQVhJT1YgPSA2MA0KICAgICtjb25zdCBfWDg2X0NSMF9FTV9CSVQg
PSAyDQogICAgK2NvbnN0IF9OVEZfT0ZGTE9BREVEID0gMHgyMA0KICAgICtjb25zdCBfU1lTX2lv
cHJpb19zZXQgPSBfX19OUl9pb3ByaW9fc2V0DQogICAgK2NvbnN0IF9fX05SX2dldHRpbWVvZmRh
eSA9IDk2DQogICAgK2NvbnN0IF9QVFJBQ0VfQ09OVCA9IDcNCiAgICArY29uc3QgX1RJT0NTUFRM
Q0tfdmFsID0gMTA3NDAyNTUyMQ0KICAgICtjb25zdCBfUFRSQUNFX1BFRUtURVhUID0gMQ0KICAg
ICtjb25zdCBfTkVUTElOS19YRlJNID0gNg0KICAgICtjb25zdCBfVENBX1VOU1BFQyA9IDANCiAg
ICArY29uc3QgX0VUSF9QXzgwMjFRID0gMHg4MTAwDQogICAgK2NvbnN0IF9JRkxBX1ZMQU5fSU5H
UkVTU19RT1MgPSA0DQogICAgK2NvbnN0IF9FUE9MTFJEQkFORCA9IDEyOA0KICAgICtjb25zdCBf
U1lTX3VtYXNrID0gX19fTlJfdW1hc2sNCiAgICArY29uc3QgX1BBQ0tFVF9NUl9VTklDQVNUID0g
Mw0KICAgICtjb25zdCBfTkxNX0ZfRUNITyA9IDB4MDgNCiAgICArY29uc3QgX0ZGSV9UWVBFX1NJ
TlQxNiA9IDgNCiAgICArY29uc3QgX19TQ19UUkFDRV9VU0VSX0VWRU5UX01BWCA9IDI0NQ0KICAg
ICtjb25zdCBfU1lTX3JlY3Ztc2cgPSBfX19OUl9yZWN2bXNnDQogICAgK2NvbnN0IF9fX05SX3Nj
aGVkX2dldF9wcmlvcml0eV9taW4gPSAxNDcNCiAgICArY29uc3QgX1NZU19wcG9sbCA9IF9fX05S
X3Bwb2xsDQogICAgK2NvbnN0IF9GRklfVFlQRV9QT0lOVEVSID0gMTQNCiAgICArY29uc3QgX0lG
QV9SVF9QUklPUklUWSA9IDkNCiAgICArY29uc3QgX1JUQVhfSU5JVENXTkQgPSAxMQ0KICAgICtj
b25zdCBfSVBfUE1UVURJU0NfSU5URVJGQUNFID0gNA0KICAgICtjb25zdCBfSUZMQV9QT1JUX1VO
U1BFQyA9IDANCiAgICArY29uc3QgX1NJR19TRVRNQVNLID0gMg0KICAgICtjb25zdCBfU09MX0lD
TVBWNiA9IDU4DQogICAgK2NvbnN0IF9TQ054MzIgPSAieCINCiAgICArY29uc3QgX1RDUF9NU1Mg
PSA1MTINCiAgICArY29uc3QgX0VUSF9QXzgwMjIxID0gMHg4OTE3DQogICAgK2NvbnN0IF9DUjIg
PSAwMDAyMDAwDQogICAgK2NvbnN0IF9DUjMgPSAwMDAzMDAwDQogICAgK2NvbnN0IF9TWVNfbHNl
ZWsgPSBfX19OUl9sc2Vlaw0KICAgICtjb25zdCBfX0ZJTEVfT0ZGU0VUX0JJVFMgPSA2NA0KICAg
ICtjb25zdCBfX1NDX0NPTExfV0VJR0hUU19NQVggPSA0MA0KICAgICtjb25zdCBfX1NDX1RIUkVB
RF9DUFVUSU1FID0gMTM5DQogICAgK2NvbnN0IF9QT1JUX1JFUVVFU1RfUFJFQVNTT0NJQVRFX1JS
ID0gMQ0KICAgICtjb25zdCBfSU5fVU5NT1VOVCA9IDB4MDAwMDIwMDANCiAgICArY29uc3QgX0lQ
VE9TX0RTQ1BfQUYzMSA9IDB4NjgNCiAgICArY29uc3QgX0lQVE9TX0RTQ1BfQUYzMiA9IDB4NzAN
CiAgICArY29uc3QgX0lQVE9TX0RTQ1BfQUYzMyA9IDB4NzgNCiAgICArY29uc3QgX0lGTEFfVlhM
QU5fUkVNQ1NVTV9SWCA9IDIyDQogICAgK2NvbnN0IF9FUE9MTEVYQ0xVU0lWRSA9IDI2ODQzNTQ1
Ng0KICAgICtjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMSA9IDENCiAg
ICArY29uc3QgX1BUUkFDRV9HRVRFVkVOVE1TRyA9IDE2ODk3DQogICAgK2NvbnN0IF9MT0NLX01B
TkQgPSAzMg0KICAgICtjb25zdCBfTkVUTElOS19VU0VSU09DSyA9IDINCiAgICArY29uc3QgX0ZT
X0VOQ1JZUFRJT05fTU9ERV9JTlZBTElEID0gMA0KICAgICtjb25zdCBfVFVOX1RYX1RJTUVTVEFN
UCA9IDENCiAgICArY29uc3QgX1NZU19wd3JpdGV2MiA9IF9fX05SX3B3cml0ZXYyDQogICAgK2Nv
bnN0IF9fX0lOVF9MRUFTVDE2X01BWF9fID0gMHg3ZmZmDQogICAgK2NvbnN0IF9TWVNfcHJlYWQ2
NCA9IF9fX05SX3ByZWFkNjQNCiAgICArY29uc3QgX1BSSW9MRUFTVDE2ID0gIm8iDQogICAgK2Nv
bnN0IF9TQ05pTEVBU1QzMiA9ICJpIg0KICAgICtjb25zdCBfU1lTX3NlbWN0bCA9IF9fX05SX3Nl
bWN0bA0KICAgICtjb25zdCBfX1BPU0lYX05HUk9VUFNfTUFYID0gOA0KICAgICtjb25zdCBfQjQw
MDAwMDAgPSAwMDEwMDE3DQogICAgK2NvbnN0IF9QT1JUX1BST0ZJTEVfUkVTUE9OU0VfSU5WQUxJ
RCA9IDI1OA0KICAgICtjb25zdCBfUEFDS0VUX0ZBTk9VVF9EQVRBID0gMjINCiAgICArY29uc3Qg
X0NSRUFEID0gMDAwMDIwMA0KICAgICtjb25zdCBfRVRIX1BfUFBQX01QID0gMHgwMDA4DQogICAg
K2NvbnN0IF9fX0ZMVDMyWF9ERUNJTUFMX0RJR19fID0gMTcNCiAgICArY29uc3QgX1g4Nl9DUjRf
UFZJX0JJVCA9IDENCiAgICArY29uc3QgX1NZU19lcG9sbF9jcmVhdGUxID0gX19fTlJfZXBvbGxf
Y3JlYXRlMQ0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfQ09ORklHX1BFTkRJTkcgPSAyMA0KICAg
ICtjb25zdCBfX19EQkxfTUFYX0VYUF9fID0gMTAyNA0KICAgICtjb25zdCBfTUFQX1NZTkMgPSAw
eDgwMDAwDQogICAgK2NvbnN0IF9SRUdfUkJQID0gMTANCiAgICArY29uc3QgX0VLRVlSRVZPS0VE
ID0gMTI4DQogICAgK2NvbnN0IF9fUE9TSVhfVFJBQ0VfRVZFTlRfRklMVEVSID0gLTENCiAgICAr
Y29uc3QgX0FGX0xPQ0FMID0gX1BGX0xPQ0FMDQogICAgK2NvbnN0IF9SRUdfUkJYID0gMTENCiAg
ICArY29uc3QgX1NDTV9USU1FU1RBTVBJTkcgPSBfU09fVElNRVNUQU1QSU5HDQogICAgK2NvbnN0
IF9fX05SX2dldHBncnAgPSAxMTENCiAgICArY29uc3QgX19fTlJfcnRfc2lndGltZWR3YWl0ID0g
MTI4DQogICAgK2NvbnN0IF9fX0ZEX1pFUk9fU1RPUyA9ICJzdG9zcSINCiAgICArY29uc3QgX1BU
UkFDRV9QRUVLREFUQSA9IDINCiAgICArY29uc3QgX1BUUkFDRV9TWVNDQUxMID0gMjQNCiAgICAr
Y29uc3QgX1NDTnUzMiA9ICJ1Ig0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX0NNRF9TV19TVVNQ
RU5EID0gMHhEMDAwRkNFMg0KICAgICtjb25zdCBfT19ESVJFQ1RPUlkgPSBfX19PX0RJUkVDVE9S
WQ0KICAgICtjb25zdCBfRVRIRVJUWVBFX1NQUklURSA9IDB4MDUwMA0KICAgICtjb25zdCBfU09D
S19SQVcgPSAzDQogICAgK2NvbnN0IF9PX05PQVRJTUUgPSBfX19PX05PQVRJTUUNCiAgICArY29u
c3QgX0lQVE9TX0RTQ1BfQUY0MSA9IDB4ODgNCiAgICArY29uc3QgX0lQVE9TX0RTQ1BfQUY0MiA9
IDB4OTANCiAgICArY29uc3QgX0lQVE9TX0RTQ1BfQUY0MyA9IDB4OTgNCiAgICArY29uc3QgX1RJ
T0NTUEdSUCA9IDB4NTQxMA0KICAgICtjb25zdCBfTkRfT1BUX1JFRElSRUNURURfSEVBREVSID0g
NA0KICAgICtjb25zdCBfUlRBWF9GRUFUVVJFX0FMTEZSQUcgPSAoMSA8PCAzKQ0KICAgICtjb25z
dCBfSUNNUDZfRFNUX1VOUkVBQ0hfQkVZT05EU0NPUEUgPSAyDQogICAgK2NvbnN0IF9JUE9QVF9U
SU1FU1RBTVAgPSBfSVBPUFRfVFMNCiAgICArY29uc3QgX1JUTV9HRVREQ0IgPSA3OA0KICAgICtj
b25zdCBfV09SRF9CSVQgPSAzMg0KICAgICtjb25zdCBfVENBX1NUQVRTID0gMw0KICAgICtjb25z
dCBfTl9TTElQID0gMQ0KICAgICtjb25zdCBfVENQX1NBVkVEX1NZTiA9IDI4DQogICAgK2NvbnN0
IF9fU0NfQkNfU1RSSU5HX01BWCA9IDM5DQogICAgK2NvbnN0IF9SVEFYX0ZFQVRVUkVfU0FDSyA9
ICgxIDw8IDEpDQogICAgK2NvbnN0IF9fWE9QRU5fU09VUkNFID0gNzAwDQogICAgK2NvbnN0IF9f
QVRGSUxFX1NPVVJDRSA9IDENCiAgICArY29uc3QgX1BUUkFDRV9FVkVOVF9WRk9SS19ET05FID0g
NQ0KICAgICtjb25zdCBfSUNNUDZfUlJfRkxBR1NfUFJFVkRPTkUgPSAweDA4DQogICAgK2NvbnN0
IF9FTE5STkcgPSA0OA0KICAgICtjb25zdCBfX1BPU0lYX0FJT19MSVNUSU9fTUFYID0gMg0KICAg
ICtjb25zdCBfUlROX1VOSUNBU1QgPSAxDQogICAgK2NvbnN0IF9SVEFfTUFSSyA9IDE2DQogICAg
K2NvbnN0IF9TSUdTRUdWID0gMTENCiAgICArY29uc3QgX05BTUVfTUFYID0gMjU1DQogICAgK2Nv
bnN0IF9BRl9WU09DSyA9IF9QRl9WU09DSw0KICAgICtjb25zdCBfRl9VTE9DSyA9IDANCiAgICAr
Y29uc3QgX01TR19CQVRDSCA9IDI2MjE0NA0KICAgICtjb25zdCBfRlBFX0ZMVFVORCA9IDUNCiAg
ICArY29uc3QgX19fSUZMQV9WRl9MSU5LX1NUQVRFX01BWCA9IDMNCiAgICArY29uc3QgX1JUTkxH
UlBfRENCID0gMjMNCiAgICArY29uc3QgX0VQRVJNID0gMQ0KICAgICtjb25zdCBfUkVHX1JDWCA9
IDE0DQogICAgK2NvbnN0IF9NU19OT0RJUkFUSU1FID0gMjA0OA0KICAgICtjb25zdCBfX1RFUk1J
T1NfSCA9IDENCiAgICArY29uc3QgX19fSU5UTUFYX1dJRFRIX18gPSA2NA0KICAgICtjb25zdCBf
SUZMQV9CUlBPUlRfR1VBUkQgPSA1DQogICAgK2NvbnN0IF9TWVNfcnRfc2lncGVuZGluZyA9IF9f
X05SX3J0X3NpZ3BlbmRpbmcNCiAgICArY29uc3QgX0lGTEFfTUFTVEVSID0gMTANCiAgICArY29u
c3QgX0VPUE5PVFNVUFAgPSA5NQ0KICAgICtjb25zdCBfQ1M1ID0gMDAwMDAwMA0KICAgICtjb25z
dCBfX1BPU0lYMl9WRVJTSU9OID0gX19fUE9TSVgyX1RISVNfVkVSU0lPTg0KICAgICtjb25zdCBf
X1NDX0dFVFBXX1JfU0laRV9NQVggPSA3MA0KICAgICtjb25zdCBfSVBfUkVDVkVSUiA9IDExDQog
ICAgK2NvbnN0IF9IQVZFX1NJTkwgPSAxDQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJf
T0ZGQklHX0NGTEFHUyA9IDExMzYNCiAgICArY29uc3QgX19DU19MRlM2NF9MSU5URkxBR1MgPSAx
MDA3DQogICAgK2NvbnN0IF9QUkl4RkFTVDggPSAieCINCiAgICArY29uc3QgX1BSSW9MRUFTVDMy
ID0gIm8iDQogICAgK2NvbnN0IF9QUklPX1VTRVIgPSAyDQogICAgK2NvbnN0IF9JRkxBX05FV19J
RklOREVYID0gNDkNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fTE9DQUwgPSA0DQogICAgK2NvbnN0
IF9QUl9TRVRfTU1fRVhFX0ZJTEUgPSAxMw0KICAgICtjb25zdCBfVENQX1NfREFUQV9PVVQgPSAo
MSA8PCAzKQ0KICAgICtjb25zdCBfQVRGX01BR0lDID0gMHg4MA0KICAgICtjb25zdCBfTkRUUEFf
R0NfU1RBTEVUSU1FID0gNg0KICAgICtjb25zdCBfX19rOCA9IDENCiAgICArY29uc3QgX19fSU5U
X0ZBU1QzMl9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfX1hCUzVfTFBC
SUdfT0ZGQklHID0gLTENCiAgICArY29uc3QgX1NJT0NERUxNVUxUSSA9IDB4ODkzMg0KICAgICtj
b25zdCBfVFVOU0VUTk9DU1VNX3ZhbCA9IDEwNzQwMjU2NzINCiAgICArY29uc3QgX19fTERCTF9E
RU5PUk1fTUlOX18gPSAxLjENCiAgICArY29uc3QgX1BGX1VOU1BFQyA9IDANCiAgICArY29uc3Qg
X0JQRl9NT0QgPSAweDkwDQogICAgK2NvbnN0IF9SRUdfUkRJID0gOA0KICAgICtjb25zdCBfQlBG
X01JU0MgPSAweDA3DQogICAgK2NvbnN0IF9GX0dFVE9XTiA9IF9fX0ZfR0VUT1dODQogICAgK2Nv
bnN0IF9JRkxBX0JSX01DQVNUX0xBU1RfTUVNQkVSX0NOVCA9IDI4DQogICAgK2NvbnN0IF9UQ1BP
UFRfU0FDS19QRVJNSVRURUQgPSA0DQogICAgK2NvbnN0IF9fU0NfVEhSRUFEX0FUVFJfU1RBQ0tT
SVpFID0gNzgNCiAgICArY29uc3QgX19QT1NJWF9WN19MUDY0X09GRjY0ID0gMQ0KICAgICtjb25z
dCBfUEZfSUVFRTgwMjE1NCA9IDM2DQogICAgK2NvbnN0IF9FTElCTUFYID0gODINCiAgICArY29u
c3QgX0I0ODAwID0gMDAwMDAxNA0KICAgICtjb25zdCBfU1lTX3JlbmFtZWF0MiA9IF9fX05SX3Jl
bmFtZWF0Mg0KICAgICtjb25zdCBfSVBQUk9UT19FTkNBUCA9IDk4DQogICAgK2NvbnN0IF9SRUdf
UkRYID0gMTINCiAgICArY29uc3QgX0lQVjZfMjI5MkhPUE9QVFMgPSAzDQogICAgK2NvbnN0IF9f
X05FVElORVRfSVBfSCA9IDENCiAgICArY29uc3QgX19fRkxUNjRYX0hBU19ERU5PUk1fXyA9IDEN
CiAgICArY29uc3QgX0lGTEFfQlJQT1JUX0RFU0lHTkFURURfQ09TVCA9IDE2DQogICAgK2NvbnN0
IF9JTlRfTEVBU1Q4X1dJRFRIID0gOA0KICAgICtjb25zdCBfTkxNU0dFUlJfQVRUUl9PRkZTID0g
Mg0KICAgICtjb25zdCBfU1RBVFhfQVRUUl9FTkNSWVBURUQgPSAweDA4MDANCiAgICArY29uc3Qg
X1JFR19PTERNQVNLID0gMjENCiAgICArY29uc3QgX0ZTX1BPTElDWV9GTEFHU19QQURfNCA9IDB4
MDANCiAgICArY29uc3QgX1RJTUVfT09QID0gMw0KICAgICtjb25zdCBfUlRNR1JQX0lQVjZfSUZJ
TkZPID0gMHg4MDANCiAgICArY29uc3QgX1RDQV9ST09UX1VOU1BFQyA9IDANCiAgICArY29uc3Qg
X19fV19DT05USU5VRUQgPSAweGZmZmYNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fTEFCRUwgPSAy
Ng0KICAgICtjb25zdCBfQlBGX0pBID0gMHgwMA0KICAgICtjb25zdCBfX19OUl9uYW5vc2xlZXAg
PSAzNQ0KICAgICtjb25zdCBfQlBGX01BSk9SX1ZFUlNJT04gPSAxDQogICAgK2NvbnN0IF9fX05S
X2dldGVnaWQgPSAxMDgNCiAgICArY29uc3QgX1BGX0lVQ1YgPSAzMg0KICAgICtjb25zdCBfUFJf
Q0FQX0FNQklFTlRfTE9XRVIgPSAzDQogICAgK2NvbnN0IF9NQVBfTk9SRVNFUlZFID0gMHgwNDAw
MA0KICAgICtjb25zdCBfSVBPUFRfRU5EID0gX0lQT1BUX0VPTA0KICAgICtjb25zdCBfSUZGX1RB
UCA9IDB4MDAwMg0KICAgICtjb25zdCBfX1NZU19VU0VSX0ggPSAxDQogICAgK2NvbnN0IF9UVU5H
RVRJRkZfdmFsID0gMjE0Nzc2NzUwNg0KICAgICtjb25zdCBfQURKX01BWEVSUk9SID0gMHgwMDA0
DQogICAgK2NvbnN0IF9SVE5MR1JQX0lQVjZfSUZJTkZPID0gMTINCiAgICArY29uc3QgX0ZTX0RJ
UlRZX0ZMID0gMHgwMDAwMDEwMA0KICAgICtjb25zdCBfX19OUl9mYWxsb2NhdGUgPSAyODUNCiAg
ICArY29uc3QgX19fTlJfc2V0X21lbXBvbGljeSA9IDIzOA0KICAgICtjb25zdCBfX1BPU0lYX1RI
UkVBRF9ST0JVU1RfUFJJT19JTkhFUklUID0gMjAwODA5DQogICAgK2NvbnN0IF9SVEFfTUZDX1NU
QVRTID0gMTcNCiAgICArY29uc3QgX0NYODZfUkNSX0JBU0UgPSAweGRjDQogICAgK2NvbnN0IF9S
VFBST1RfS0VSTkVMID0gMg0KICAgICtjb25zdCBfSUNNUDZfRklMVEVSX0JMT0NLT1RIRVJTID0g
Mw0KICAgICtjb25zdCBfUFJfRlBFTVVfTk9QUklOVCA9IDENCiAgICArY29uc3QgX19fRkxUX01B
TlRfRElHX18gPSAyNA0KICAgICtjb25zdCBfX19OUl9mc3RhdCA9IDUNCiAgICArY29uc3QgX1BU
UkFDRV9PX0VYSVRLSUxMID0gMTA0ODU3Ng0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9MQVNU
X01FTUJFUl9JTlRWTCA9IDMwDQogICAgK2NvbnN0IF9ORVRMSU5LX0lORVRfRElBRyA9IF9ORVRM
SU5LX1NPQ0tfRElBRw0KICAgICtjb25zdCBfTkVUTElOS19TQ1NJVFJBTlNQT1JUID0gMTgNCiAg
ICArY29uc3QgX19fTlJfc2VsZWN0ID0gMjMNCiAgICArY29uc3QgX0lGTEFfU1RBVFNfTElOS19P
RkZMT0FEX1hTVEFUUyA9IDQNCiAgICArY29uc3QgX19fTlJfcGlwZSA9IDIyDQogICAgK2NvbnN0
IF9TQV9OT0NMRFdBSVQgPSAyDQogICAgK2NvbnN0IF9TWVNfa2V4ZWNfZmlsZV9sb2FkID0gX19f
TlJfa2V4ZWNfZmlsZV9sb2FkDQogICAgK2NvbnN0IF9CMjAwID0gMDAwMDAwNg0KICAgICtjb25z
dCBfX1BPU0lYX0RFTEFZVElNRVJfTUFYID0gMzINCiAgICArY29uc3QgX1BSX1NFVF9FTkRJQU4g
PSAyMA0KICAgICtjb25zdCBfU1lTX2Vwb2xsX3B3YWl0ID0gX19fTlJfZXBvbGxfcHdhaXQNCiAg
ICArY29uc3QgX0VUSF9QX0xPQ0FMVEFMSyA9IDB4MDAwOQ0KICAgICtjb25zdCBfUFJJaUZBU1Q4
ID0gImkiDQogICAgK2NvbnN0IF9TRUVLX0VORCA9IDINCiAgICArY29uc3QgX1RDQV9DSEFJTiA9
IDExDQogICAgK2NvbnN0IF9TWVNfdGltZXJfZGVsZXRlID0gX19fTlJfdGltZXJfZGVsZXRlDQog
ICAgK2NvbnN0IF9STElNX0lORklOSVRZID0gMHhmZmZmZmZmZmZmZmZmZmZmDQogICAgK2NvbnN0
IF9fX09GRl9UX01BVENIRVNfT0ZGNjRfVCA9IDENCiAgICArY29uc3QgX1JUTkxHUlBfUEhPTkVU
X1JPVVRFID0gMjINCiAgICArY29uc3QgX19JU09DMTFfU09VUkNFID0gMQ0KICAgICtjb25zdCBf
U0lHWENQVSA9IDI0DQogICAgK2NvbnN0IF9SVE5fTkFUID0gMTANCiAgICArY29uc3QgX0lGTEFf
VFVOX0dST1VQID0gMg0KICAgICtjb25zdCBfX19MREJMX01BWF9fID0gMS4xDQogICAgK2NvbnN0
IF9VSU5UX0xFQVNUOF9NQVggPSAoMjU1KQ0KICAgICtjb25zdCBfSUNNUDZfRFNUX1VOUkVBQ0hf
QUREUiA9IDMNCiAgICArY29uc3QgX1BPU0lYX0ZBRFZfU0VRVUVOVElBTCA9IDINCiAgICArY29u
c3QgX1JUTl9YUkVTT0xWRSA9IDExDQogICAgK2NvbnN0IF91bml4ID0gMQ0KICAgICtjb25zdCBf
U0laRV9NQVggPSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpDQogICAgK2NvbnN0IF9TVEFfREVMID0g
MHgwMDIwDQogICAgK2NvbnN0IF9NQl9MRU5fTUFYID0gMTYNCiAgICArY29uc3QgX0NJQkFVRCA9
IDAwMjAwMzYwMDAwMA0KICAgICtjb25zdCBfX19jbG9ja2lkX3RfZGVmaW5lZCA9IDENCiAgICAr
Y29uc3QgX19DU19QT1NJWF9WN19MUEJJR19PRkZCSUdfTElOVEZMQUdTID0gMTE0Nw0KICAgICtj
b25zdCBfQUlfTlVNRVJJQ0hPU1QgPSAweDAwMDQNCiAgICArY29uc3QgX1JFX0RVUF9NQVggPSAo
MHg3ZmZmKQ0KICAgICtjb25zdCBfSUZMQV9WRl9SQVRFID0gNg0KICAgICtjb25zdCBfUFJJWDMy
ID0gIlgiDQogICAgK2NvbnN0IF9JUFRPU19FQ05fQ0UgPSAweDAzDQogICAgK2NvbnN0IF9JRkxB
X0JSX1BSSU9SSVRZID0gNg0KICAgICtjb25zdCBfSVBUT1NfUFJFQ19ORVRDT05UUk9MID0gX0lQ
VE9TX0NMQVNTX0NTNw0KICAgICtjb25zdCBfX19OUl9nZXRydXNhZ2UgPSA5OA0KICAgICtjb25z
dCBfTlVEX1JFQUNIQUJMRSA9IDB4MDINCiAgICArY29uc3QgX19fTlJfdXNlbGliID0gMTM0DQog
ICAgK2NvbnN0IF9FUE9MTFdSTk9STSA9IDI1Ng0KICAgICtjb25zdCBfX19JRkxBX01BWCA9IDUy
DQogICAgK2NvbnN0IF9UQ1BfTElOR0VSMiA9IDgNCiAgICArY29uc3QgX1JUTkxHUlBfSVBWNF9S
T1VURSA9IDcNCiAgICArY29uc3QgX19TQ19JTlRfTUlOID0gMTA1DQogICAgK2NvbnN0IF9FVElN
RSA9IDYyDQogICAgK2NvbnN0IF9JRkxBX0hTUl9TRVFfTlIgPSA1DQogICAgK2NvbnN0IF9fUE9T
SVhfU1lNTElOS19NQVggPSAyNTUNCiAgICArY29uc3QgX0lGTEFfUE9SVF9SRVNQT05TRSA9IDcN
CiAgICArY29uc3QgX0lGTEFfQlJfTUNBU1RfUk9VVEVSID0gMjINCiAgICArY29uc3QgX1RDQV9I
V19PRkZMT0FEID0gMTINCiAgICArY29uc3QgX0lGTEFfSU5FVDZfVE9LRU4gPSA3DQogICAgK2Nv
bnN0IF9USU9DUEtUX0ZMVVNIUkVBRCA9IDENCiAgICArY29uc3QgX1NZU19zZXRfdGlkX2FkZHJl
c3MgPSBfX19OUl9zZXRfdGlkX2FkZHJlc3MNCiAgICArY29uc3QgX0IxOTIwMCA9IDAwMDAwMTYN
CiAgICArY29uc3QgX0lQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCA9IDENCiAgICArY29uc3QgX19f
U0lHX0FUT01JQ19NSU5fXyA9ICgtX19fU0lHX0FUT01JQ19NQVhfXyAtIDEpDQogICAgK2NvbnN0
IF9JRkxBX0JPTkRfTUlOX0xJTktTID0gMTgNCiAgICArY29uc3QgX0lQUFJPVE9fUkFXID0gMjU1
DQogICAgK2NvbnN0IF9TWVNfZ2V0cmVzdWlkID0gX19fTlJfZ2V0cmVzdWlkDQogICAgK2NvbnN0
IF9SVEFfU1JDID0gMg0KICAgICtjb25zdCBfSVBWNl9QTVRVRElTQ19ETyA9IDINCiAgICArY29u
c3QgX1JUX1NDT1BFX0xJTksgPSAyNTMNCiAgICArY29uc3QgX1NZU19zY2hlZF95aWVsZCA9IF9f
X05SX3NjaGVkX3lpZWxkDQogICAgK2NvbnN0IF9TQV9OT0NMRFNUT1AgPSAxDQogICAgK2NvbnN0
IF9OTEFfRl9ORVNURUQgPSAoMSA8PCAxNSkNCiAgICArY29uc3QgX0VOQVZBSUwgPSAxMTkNCiAg
ICArY29uc3QgX0VUSF9QX0VSU1BBTjIgPSAweDIyRUINCiAgICArY29uc3QgX1RJT0NTRVJfVEVN
VCA9IDB4MDENCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX01VTFRJQ0FTVF9ST1VURVIgPSAyNQ0K
ICAgICtjb25zdCBfT1BPU1QgPSAwMDAwMDAxDQogICAgK2NvbnN0IF9XX09LID0gMg0KICAgICtj
b25zdCBfSVBPUFRfUkEgPSAxNDgNCiAgICArY29uc3QgX0VUSEVSVFlQRV9JUFggPSAweDgxMzcN
CiAgICArY29uc3QgX1JUTV9HRVRORUlHSFRCTCA9IDY2DQogICAgK2NvbnN0IF9fU0NfVjZfTFA2
NF9PRkY2NCA9IDE3OA0KICAgICtjb25zdCBfREVMQVlUSU1FUl9NQVggPSAyMTQ3NDgzNjQ3DQog
ICAgK2NvbnN0IF9QUl9HRVRfTkFNRSA9IDE2DQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9DT1NU
ID0gMw0KICAgICtjb25zdCBfU0lPQ0dJRkJSID0gMHg4OTQwDQogICAgK2NvbnN0IF9JRkxBX01B
Q1NFQ19JTkNfU0NJID0gOQ0KICAgICtjb25zdCBfSU5fT05FU0hPVCA9IDB4ODAwMDAwMDANCiAg
ICArY29uc3QgX1NZU19hZGp0aW1leCA9IF9fX05SX2FkanRpbWV4DQogICAgK2NvbnN0IF9JTExf
Q09QUk9DID0gNw0KICAgICtjb25zdCBfSVBPUFRfUlIgPSA3DQogICAgK2NvbnN0IF9QUl9TVkVf
U0VUX1ZMX09ORVhFQyA9ICgxIDw8IDE4KQ0KICAgICtjb25zdCBfU1lTX3B3cml0ZTY0ID0gX19f
TlJfcHdyaXRlNjQNCiAgICArY29uc3QgX1BSX1NFVF9OQU1FID0gMTUNCiAgICArY29uc3QgX1ZR
VUlUID0gMQ0KICAgICtjb25zdCBfRlNfWEZMQUdfRVhUU1pJTkhFUklUID0gMHgwMDAwMTAwMA0K
ICAgICtjb25zdCBfSUZMQV9QT1JUX0lOU1RBTkNFX1VVSUQgPSA0DQogICAgK2NvbnN0IF9JUFRP
U19DTEFTU19DUzMgPSAweDYwDQogICAgK2NvbnN0IF9fX1BUUkRJRkZfV0lEVEhfXyA9IDY0DQog
ICAgK2NvbnN0IF9FVEhfUF9FRFNBID0gMHhEQURBDQogICAgK2NvbnN0IF9TWVNfc2V0aXRpbWVy
ID0gX19fTlJfc2V0aXRpbWVyDQogICAgK2NvbnN0IF9fX0ZMVDMyWF9FUFNJTE9OX18gPSAxLjEN
CiAgICArY29uc3QgX19fRkxUMTI4X01JTl9FWFBfXyA9ICgtMTYzODEpDQogICAgK2NvbnN0IF9f
X05SX3NldGZzdWlkID0gMTIyDQogICAgK2NvbnN0IF9JUFRPU19DTEFTU19DUzYgPSAweGMwDQog
ICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9CUklER0VfSUQgPSAxNA0KICAgICtjb25zdCBfUlRNX0RF
TE5FVENPTkYgPSA4MQ0KICAgICtjb25zdCBfSUNNUDZfVElNRV9FWENFRURFRCA9IDMNCiAgICAr
Y29uc3QgX19fTlJfc2V0ZnNnaWQgPSAxMjMNCiAgICArY29uc3QgX1NJT0NERUxETENJID0gMHg4
OTgxDQogICAgK2NvbnN0IF9JUFBPUlRfVFRZTElOSyA9IDg3DQogICAgK2NvbnN0IF9TSU9DR0FS
UCA9IDB4ODk1NA0KICAgICtjb25zdCBfUlRGX0RFRkFVTFQgPSAweDAwMDEwMDAwDQogICAgK2Nv
bnN0IF9TWVNfbXFfb3BlbiA9IF9fX05SX21xX29wZW4NCiAgICArY29uc3QgX1NZU19jbG9ja19n
ZXRyZXMgPSBfX19OUl9jbG9ja19nZXRyZXMNCiAgICArY29uc3QgX01RX1BSSU9fTUFYID0gMzI3
NjgNCiAgICArY29uc3QgX19TQ19DSEFSX01BWCA9IDEwMg0KICAgICtjb25zdCBfSVBWNl9BRERf
TUVNQkVSU0hJUCA9IF9JUFY2X0pPSU5fR1JPVVANCiAgICArY29uc3QgX19TVEFUX1ZFUl9MSU5V
WCA9IDENCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX0xFQVJOSU5HX1NZTkMgPSAxMQ0KICAgICtj
b25zdCBfRU5PVE5BTSA9IDExOA0KICAgICtjb25zdCBfVElPQ1BLVF9GTFVTSFdSSVRFID0gMg0K
ICAgICtjb25zdCBfTUFQX0hVR0VUTEIgPSAweDQwMDAwDQogICAgK2NvbnN0IF9IQVZFX0ZBQ0NF
U1NBVCA9IDENCiAgICArY29uc3QgX19fREJMX01JTl9FWFBfXyA9ICgtMTAyMSkNCiAgICArY29u
c3QgX1g4Nl9DUjRfUENJREVfQklUID0gMTcNCiAgICArY29uc3QgX1NDTmlMRUFTVDggPSAiaGhp
Ig0KICAgICtjb25zdCBfSVBWNl9QTVRVRElTQ19QUk9CRSA9IDMNCiAgICArY29uc3QgX0lQUE9S
VF9GSU5HRVIgPSA3OQ0KICAgICtjb25zdCBfUE9SVF9VVUlEX01BWCA9IDE2DQogICAgK2NvbnN0
IF9MT05HX0xPTkdfTUFYID0gX19fTE9OR19MT05HX01BWF9fDQogICAgK2NvbnN0IF9JTlQ4X01J
TiA9ICgtMTI4KQ0KICAgICtjb25zdCBfX19OUl93cml0ZSA9IDENCiAgICArY29uc3QgX19fU19J
RkJMSyA9IDAwNjAwMDANCiAgICArY29uc3QgX1NDSEVEX0ZJRk8gPSAxDQogICAgK2NvbnN0IF9f
UEFUSF9IRVFVSVYgPSAiL2V0Yy9ob3N0cy5lcXVpdiINCiAgICArY29uc3QgX0JQRl9NU0ggPSAw
eGEwDQogICAgK2NvbnN0IF9fUENfU1lOQ19JTyA9IDkNCiAgICArY29uc3QgX19TQ19BRFZJU09S
WV9JTkZPID0gMTMyDQogICAgK2NvbnN0IF9fX05SX3JlY3Ztc2cgPSA0Nw0KICAgICtjb25zdCBf
RkFTWU5DID0gX09fQVNZTkMNCiAgICArY29uc3QgX1JUTUdSUF9JUFY2X01ST1VURSA9IDB4MjAw
DQogICAgK2NvbnN0IF9TWVNfaW9fcGdldGV2ZW50cyA9IF9fX05SX2lvX3BnZXRldmVudHMNCiAg
ICArY29uc3QgX0hBVkVfU1lOQ19CT09MX0NPTVBBUkVfQU5EX1NXQVBfNCA9IDENCiAgICArY29u
c3QgX0VQT0xMX0NUTF9BREQgPSAxDQogICAgK2NvbnN0IF9VU0hSVF9NQVggPSAoX1NIUlRfTUFY
ICogMiArIDEpDQogICAgK2NvbnN0IF9fU0NfVFJBQ0UgPSAxODENCiAgICArY29uc3QgX1BUUkFD
RV9TSU5HTEVTVEVQID0gOQ0KICAgICtjb25zdCBfSUZMQV9MSU5LID0gNQ0KICAgICtjb25zdCBf
TkRUUEFfUkVUUkFOU19USU1FID0gNQ0KICAgICtjb25zdCBfSEFWRV9TWU5DX0JPT0xfQ09NUEFS
RV9BTkRfU1dBUF84ID0gMQ0KICAgICtjb25zdCBfUlRNX0dFVFRGSUxURVIgPSA0Ng0KICAgICtj
b25zdCBfU1lTX21zZ3JjdiA9IF9fX05SX21zZ3Jjdg0KICAgICtjb25zdCBfX19OUl9tc2djdGwg
PSA3MQ0KICAgICtjb25zdCBfSEFWRV9SRU5BTUVBVCA9IDENCiAgICArY29uc3QgX0lGRl9OQVBJ
X0ZSQUdTID0gMHgwMDIwDQogICAgK2NvbnN0IF9JRkxBX1hEUF9BVFRBQ0hFRCA9IDINCiAgICAr
Y29uc3QgX1NZU19lcG9sbF9jcmVhdGUgPSBfX19OUl9lcG9sbF9jcmVhdGUNCiAgICArY29uc3Qg
X0lGTEFfVkZfU1RBVFNfQlJPQURDQVNUID0gNA0KICAgICtjb25zdCBfVENQX01ENVNJR19GTEFH
X1BSRUZJWCA9IDENCiAgICArY29uc3QgX0lGTEFfQk9ORF9BRF9VU0VSX1BPUlRfS0VZID0gMjUN
CiAgICArY29uc3QgX0FSUEhSRF9BREFQVCA9IDI2NA0KICAgICtjb25zdCBfVFVOQVRUQUNIRklM
VEVSX3ZhbCA9IDEwNzQ4MTIxMTcNCiAgICArY29uc3QgX1RDUF9NQVhfV0lOU0hJRlQgPSAxNA0K
ICAgICtjb25zdCBfSVBQUk9UT19JR01QID0gMg0KICAgICtjb25zdCBfSVBfTUFYX01FTUJFUlNI
SVBTID0gMjANCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX0JBQ0tVUF9QT1JUID0gMzQNCiAgICAr
Y29uc3QgX1JUTUdSUF9ERUNuZXRfSUZBRERSID0gMHgxMDAwDQogICAgK2NvbnN0IF9NQURWX0tF
RVBPTkZPUksgPSAxOQ0KICAgICtjb25zdCBfQUZfQVgyNSA9IF9QRl9BWDI1DQogICAgK2NvbnN0
IF9JTlRQVFJfTUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4MDcpDQogICAgK2NvbnN0IF9BUlBIUkRf
RVVJNjQgPSAyNw0KICAgICtjb25zdCBfUlRBX0dBVEVXQVkgPSA1DQogICAgK2NvbnN0IF9TQ051
MTYgPSAiaHUiDQogICAgK2NvbnN0IF9fX05SX3RydW5jYXRlID0gNzYNCiAgICArY29uc3QgX19f
TlJfZ2V0cmxpbWl0ID0gOTcNCiAgICArY29uc3QgX19QT1NJWF9DSE9XTl9SRVNUUklDVEVEID0g
MA0KICAgICtjb25zdCBfX19OUl9wcmVhZDY0ID0gMTcNCiAgICArY29uc3QgX1BSX1NFVF9NTV9T
VEFSVF9CUksgPSA2DQogICAgK2NvbnN0IF9SVEFYX0xPQ0sgPSAxDQogICAgK2NvbnN0IF9TWVNf
Z2V0ZGVudHMgPSBfX19OUl9nZXRkZW50cw0KICAgICtjb25zdCBfU09fRE9NQUlOID0gMzkNCiAg
ICArY29uc3QgX1NfSVNWVFggPSBfX19TX0lTVlRYDQogICAgK2NvbnN0IF9QVFJBQ0VfUE9LRURB
VEEgPSA1DQogICAgK2NvbnN0IF9QQUNLRVRfT1JJR0RFViA9IDkNCiAgICArY29uc3QgX0lQT1BU
X1RTID0gNjgNCiAgICArY29uc3QgX19fSUZMQV9PRkZMT0FEX1hTVEFUU19NQVggPSAyDQogICAg
K2NvbnN0IF9fU0NfU0hSVF9NQVggPSAxMTMNCiAgICArY29uc3QgX1JFR19SSVAgPSAxNg0KICAg
ICtjb25zdCBfX19GTFQ2NFhfTUFYX18gPSAxLjENCiAgICArY29uc3QgX0lGRl9BTExNVUxUSSA9
IDUxMg0KICAgICtjb25zdCBfU0FfU0lHSU5GTyA9IDQNCiAgICArY29uc3QgX1JFR19DU0dTRlMg
PSAxOA0KICAgICtjb25zdCBfSUZMQV9WWExBTl9HQlAgPSAyMw0KICAgICtjb25zdCBfX1RJTUVf
SCA9IDENCiAgICArY29uc3QgX1NZU19nZXR1aWQgPSBfX19OUl9nZXR1aWQNCiAgICArY29uc3Qg
X0lQVjZfUE1UVURJU0NfV0FOVCA9IDENCiAgICArY29uc3QgX19TQ18yX1BCU19NRVNTQUdFID0g
MTcxDQogICAgK2NvbnN0IF9fX05SX21lbWJhcnJpZXIgPSAzMjQNCiAgICArY29uc3QgX1NZU193
YWl0NCA9IF9fX05SX3dhaXQ0DQogICAgK2NvbnN0IF9MT05HX1dJRFRIID0gX19fV09SRFNJWkUN
CiAgICArY29uc3QgX0JQRl9LID0gMHgwMA0KICAgICtjb25zdCBfRU5PVFVOSVEgPSA3Ng0KICAg
ICtjb25zdCBfTkRfT1BUX0hPTUVfQUdFTlRfSU5GTyA9IDgNCiAgICArY29uc3QgX05JX05BTUVS
RVFEID0gOA0KICAgICtjb25zdCBfX19waWNfXyA9IDINCiAgICArY29uc3QgX05MTV9GX0RVTVBf
SU5UUiA9IDB4MTANCiAgICArY29uc3QgX0ZBTExPQ19GTF9VTlNIQVJFX1JBTkdFID0gMHg0MA0K
ICAgICtjb25zdCBfTElOVVhfUkVCT09UX0NNRF9QT1dFUl9PRkYgPSAweDQzMjFGRURDDQogICAg
K2NvbnN0IF9fX0lGTEFfVlJGX01BWCA9IDINCiAgICArY29uc3QgX0lGTEFfSU5FVDZfQUREUl9H
RU5fTU9ERSA9IDgNCiAgICArY29uc3QgX0VOT1NSID0gNjMNCiAgICArY29uc3QgX1BSX0dFVF9U
SU1JTkcgPSAxMw0KICAgICtjb25zdCBfX1BPU0lYX0NfU09VUkNFID0gMjAwODA5DQogICAgK2Nv
bnN0IF9UVU5TRVRUWEZJTFRFUl92YWwgPSAxMDc0MDI1NjgxDQogICAgK2NvbnN0IF9QUl9DQVBf
QU1CSUVOVF9JU19TRVQgPSAxDQogICAgK2NvbnN0IF9JVElNRVJfUFJPRiA9IDINCiAgICArY29u
c3QgX19fU0laRU9GX1BUSFJFQURfTVVURVhBVFRSX1QgPSA0DQogICAgK2NvbnN0IF9TWVNfbmFt
ZV90b19oYW5kbGVfYXQgPSBfX19OUl9uYW1lX3RvX2hhbmRsZV9hdA0KICAgICtjb25zdCBfQjU3
NjAwMCA9IDAwMTAwMDYNCiAgICArY29uc3QgX1NFRUtfU0VUID0gMA0KICAgICtjb25zdCBfQlBG
X09SID0gMHg0MA0KICAgICtjb25zdCBfUEZfUk9VVEUgPSBfUEZfTkVUTElOSw0KICAgICtjb25z
dCBfX19GTFQ2NF9NSU5fRVhQX18gPSAoLTEwMjEpDQogICAgK2NvbnN0IF9JTl9NQVNLX0FERCA9
IDB4MjAwMDAwMDANCiAgICArY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9DRkxBR1Mg
PSAxMTE2DQogICAgK2NvbnN0IF9UQ1BfTUFYU0VHID0gMg0KICAgICtjb25zdCBfTl9JUkRBID0g
MTENCiAgICArY29uc3QgX0lQVjZfUlRIRFJfU1RSSUNUID0gMQ0KICAgICtjb25zdCBfUEFDS0VU
X1JFQ1ZfT1VUUFVUID0gMw0KICAgICtjb25zdCBfTUFEVl9ET05UTkVFRCA9IDQNCiAgICArY29u
c3QgX05EX1JFRElSRUNUID0gMTM3DQogICAgK2NvbnN0IF9fX3NpZ2luZm9fdF9kZWZpbmVkID0g
MQ0KICAgICtjb25zdCBfX19HQ0NfQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRSA9IDINCiAgICAr
Y29uc3QgX1JUQVhfUVVJQ0tBQ0sgPSAxNQ0KICAgICtjb25zdCBfX19GTFQzMl9NQVhfMTBfRVhQ
X18gPSAzOA0KICAgICtjb25zdCBfQlBGX01VTCA9IDB4MjANCiAgICArY29uc3QgX1NZU19lcG9s
bF93YWl0X29sZCA9IF9fX05SX2Vwb2xsX3dhaXRfb2xkDQogICAgK2NvbnN0IF9fX0lGTEFfSVBW
TEFOX01BWCA9IDMNCiAgICArY29uc3QgX0lQX1BNVFVESVNDX1BST0JFID0gMw0KICAgICtjb25z
dCBfU1lTX3N5c2ZzID0gX19fTlJfc3lzZnMNCiAgICArY29uc3QgX19fT1BUSU1JWkVfXyA9IDEN
CiAgICArY29uc3QgX0lQVE9TX1BSRUNfSU5URVJORVRDT05UUk9MID0gX0lQVE9TX0NMQVNTX0NT
Ng0KICAgICtjb25zdCBfSEFWRV9BU0lOTCA9IDENCiAgICArY29uc3QgX0lQVjZfVU5JQ0FTVF9J
RiA9IDc2DQogICAgK2NvbnN0IF9OTE1fRl9BVE9NSUMgPSAweDQwMA0KICAgICtjb25zdCBfRlNf
WEZMQUdfTk9TWU1MSU5LUyA9IDB4MDAwMDA0MDANCiAgICArY29uc3QgX0ZfTE9DSyA9IDENCiAg
ICArY29uc3QgX0lDTVA2X1BBUkFNUFJPQl9IRUFERVIgPSAwDQogICAgK2NvbnN0IF9FVEhfUF9J
RUVFODAyMTU0ID0gMHgwMEY2DQogICAgK2NvbnN0IF9TSU9DR0lGSFdBRERSID0gMHg4OTI3DQog
ICAgK2NvbnN0IF9TWVNfc2VtZ2V0ID0gX19fTlJfc2VtZ2V0DQogICAgK2NvbnN0IF9fX1BUSFJF
QURfTVVURVhfTlVTRVJTX0FGVEVSX0tJTkQgPSAwDQogICAgK2NvbnN0IF9QUl9TRVRfTU1fTUFQ
X1NJWkUgPSAxNQ0KICAgICtjb25zdCBfUlROX0JMQUNLSE9MRSA9IDYNCiAgICArY29uc3QgX1NZ
U19wa2V5X2FsbG9jID0gX19fTlJfcGtleV9hbGxvYw0KICAgICtjb25zdCBfQUZfSU5FVDYgPSBf
UEZfSU5FVDYNCiAgICArY29uc3QgX05MQV9IRFJMRU5fdmFsID0gNA0KICAgICtjb25zdCBfSEFW
RV9SRU1PVkVYQVRUUiA9IDENCiAgICArY29uc3QgX0lDTVA2X1JSX0ZMQUdTX1NQRUNTSVRFID0g
MHgxMA0KICAgICtjb25zdCBfX19OUl9zZXRucyA9IDMwOA0KICAgICtjb25zdCBfX19XTk9USFJF
QUQgPSAweDIwMDAwMDAwDQogICAgK2NvbnN0IF9FVEhfUF9MT09QID0gMHgwMDYwDQogICAgK2Nv
bnN0IF9WRU9MID0gMTENCiAgICArY29uc3QgX01TX05PREVWID0gNA0KICAgICtjb25zdCBfU09f
WkVST0NPUFkgPSA2MA0KICAgICtjb25zdCBfX19OUl9nZXRyYW5kb20gPSAzMTgNCiAgICArY29u
c3QgX1JURl9BTExPTkxJTksgPSAweDAwMDIwMDAwDQogICAgK2NvbnN0IF9SVE5MR1JQX0RFQ25l
dF9SVUxFID0gMTYNCiAgICArY29uc3QgX19fTlJfbWJpbmQgPSAyMzcNCiAgICArY29uc3QgX01T
X0tFUk5NT1VOVCA9IDQxOTQzMDQNCiAgICArY29uc3QgX0lVQ0xDID0gMDAwMTAwMA0KICAgICtj
b25zdCBfSEFWRV9TRU1fVElNRURXQUlUID0gMQ0KICAgICtjb25zdCBfX19QUkVGSVhfTUFYID0g
Mw0KICAgICtjb25zdCBfTUFQX1NUQUNLID0gMHgyMDAwMA0KICAgICtjb25zdCBfU1lTX3BlcnNv
bmFsaXR5ID0gX19fTlJfcGVyc29uYWxpdHkNCiAgICArY29uc3QgX19QT1NJWF9NT05PVE9OSUNf
Q0xPQ0sgPSAwDQogICAgK2NvbnN0IF9VVElNRV9PTUlUID0gKCgxIDw8IDMwKSAtIDIpDQogICAg
K2NvbnN0IF9QUklvTEVBU1Q4ID0gIm8iDQogICAgK2NvbnN0IF9QUl9GUF9FWENfSU5WID0gMHgx
MDAwMDANCiAgICArY29uc3QgX0VUSEVSVFlQRV9WTEFOID0gMHg4MTAwDQogICAgK2NvbnN0IF9S
VFBST1RfR0FURUQgPSA4DQogICAgK2NvbnN0IF9NU19NT1ZFID0gODE5Mg0KICAgICtjb25zdCBf
SUZMQV9CUlBPUlRfREVTSUdOQVRFRF9QT1JUID0gMTUNCiAgICArY29uc3QgX1BSX1NFVF9UU0Mg
PSAyNg0KICAgICtjb25zdCBfX1NURENfUFJFREVGX0ggPSAxDQogICAgK2NvbnN0IF9JRkZfQVVU
T01FRElBID0gMTYzODQNCiAgICArY29uc3QgX19fVVNFX0ZPUlRJRllfTEVWRUwgPSAwDQogICAg
K2NvbnN0IF9FQkZPTlQgPSA1OQ0KICAgICtjb25zdCBfX19ORFRBX01BWCA9IDEwDQogICAgK2Nv
bnN0IF9fX1NJWkVPRl9MT05HX0xPTkdfXyA9IDgNCiAgICArY29uc3QgX0lQVjZfUE1UVURJU0Nf
RE9OVCA9IDANCiAgICArY29uc3QgX0lQVkxBTl9NT0RFX0wzUyA9IDINCiAgICArY29uc3QgX0lG
TEFfVFVOX1RZUEUgPSAzDQogICAgK2NvbnN0IF9PX0NMT0VYRUMgPSBfX19PX0NMT0VYRUMNCiAg
ICArY29uc3QgX1NLRl9BRF9NQVJLID0gMjANCiAgICArY29uc3QgX19fRkxUNjRYX0RFTk9STV9N
SU5fXyA9IDEuMQ0KICAgICtjb25zdCBfSUZGX1NMQVZFID0gMjA0OA0KICAgICtjb25zdCBfRFRf
UkVHID0gOA0KICAgICtjb25zdCBfRkFMTE9DX0ZMX1BVTkNIX0hPTEUgPSAweDAyDQogICAgK2Nv
bnN0IF9BUlBIUkRfTkVUUk9NID0gMA0KICAgICtjb25zdCBfX19MREJMX0RJR19fID0gMTgNCiAg
ICArY29uc3QgX19TQ19VU0VSX0dST1VQUyA9IDE2Ng0KICAgICtjb25zdCBfX1VOSVNURF9IID0g
MQ0KICAgICtjb25zdCBfVENQX01BWFdJTiA9IDY1NTM1DQogICAgK2NvbnN0IF9GU19OT0RVTVBf
RkwgPSAweDAwMDAwMDQwDQogICAgK2NvbnN0IF9USU9DU0xDS1RSTUlPUyA9IDB4NTQ1Nw0KICAg
ICtjb25zdCBfX19OUl9maW5pdF9tb2R1bGUgPSAzMTMNCiAgICArY29uc3QgX1NLRl9BRF9NQVgg
PSA2NA0KICAgICtjb25zdCBfUkVHX1IxNCA9IDYNCiAgICArY29uc3QgX0ZBTExPQ19GTF9aRVJP
X1JBTkdFID0gMHgxMA0KICAgICtjb25zdCBfSUZMQV9CUl9HQ19USU1FUiA9IDE5DQogICAgK2Nv
bnN0IF9fX05SX2ZhZHZpc2U2NCA9IDIyMQ0KICAgICtjb25zdCBfT19OREVMQVkgPSBfT19OT05C
TE9DSw0KICAgICtjb25zdCBfRVBPTExQUkkgPSAyDQogICAgK2NvbnN0IF9FQUlfRkFJTCA9IC00
DQogICAgK2NvbnN0IF9fX2dsaWJjX2M5OV9mbGV4YXJyX2F2YWlsYWJsZSA9IDENCiAgICArY29u
c3QgX19fTlJfaW9fc3VibWl0ID0gMjA5DQogICAgK2NvbnN0IF9SVEFfVFRMX1BST1BBR0FURSA9
IDI2DQogICAgK2NvbnN0IF9OX1NNU0JMT0NLID0gMTINCiAgICArY29uc3QgX19QT1NJWF9USFJF
QURfQ1BVVElNRSA9IDANCiAgICArY29uc3QgX1RDUElfT1BUX1NBQ0sgPSAyDQogICAgK2NvbnN0
IF9USU9DR0VURCA9IDB4NTQyNA0KICAgICtjb25zdCBfQ0xPTkVfU1lTVlNFTSA9IDB4MDAwNDAw
MDANCiAgICArY29uc3QgX05FVExJTktfU0VMSU5VWCA9IDcNCiAgICArY29uc3QgX0NMT0NLX1RI
UkVBRF9DUFVUSU1FX0lEID0gMw0KICAgICtjb25zdCBfX19OUl9jbG9ja19uYW5vc2xlZXAgPSAy
MzANCiAgICArY29uc3QgX19TQ19DSEFSX0JJVCA9IDEwMQ0KICAgICtjb25zdCBfU0FfUkVTRVRI
QU5EID0gMHg4MDAwMDAwMA0KICAgICtjb25zdCBfQURKX1NUQVRVUyA9IDB4MDAxMA0KICAgICtj
b25zdCBfUFJfU0VUX1BUUkFDRVIgPSAweDU5NjE2ZDYxDQogICAgK2NvbnN0IF9QUl9TRVRfTU1f
QlJLID0gNw0KICAgICtjb25zdCBfX19JTFAzMl9PRkZCSUdfQ0ZMQUdTID0gIi1tMzIgLURfTEFS
R0VGSUxFX1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0Ig0KICAgICtjb25zdCBfVENQX0ZB
U1RPUEVOX0tFWSA9IDMzDQogICAgK2NvbnN0IF9fU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTID0g
MjINCiAgICArY29uc3QgX1JUTUdSUF9JUFY2X1JPVVRFID0gMHg0MDANCiAgICArY29uc3QgX0lG
TEFfQlJQT1JUX1BSSU9SSVRZID0gMg0KICAgICtjb25zdCBfQjMwMDAwMDAgPSAwMDEwMDE1DQog
ICAgK2NvbnN0IF9NU19NR0NfVkFMID0gMHhDMEVEMDAwMA0KICAgICtjb25zdCBfQURKX0VTVEVS
Uk9SID0gMHgwMDA4DQogICAgK2NvbnN0IF9SVE5IX0ZfTElOS0RPV04gPSAxNg0KICAgICtjb25z
dCBfRVRIX1BfRE5BX0RMID0gMHg2MDAxDQogICAgK2NvbnN0IF9QUl9TRVRfVElNSU5HID0gMTQN
CiAgICArY29uc3QgX05FVExJTktfSVNDU0kgPSA4DQogICAgK2NvbnN0IF9fX05EQV9NQVggPSAx
Mg0KICAgICtjb25zdCBfX19OUl9zZXRncm91cHMgPSAxMTYNCiAgICArY29uc3QgX19YT1BFTl9M
SU1fSCA9IDENCiAgICArY29uc3QgX19fT1JERVJfQklHX0VORElBTl9fID0gNDMyMQ0KICAgICtj
b25zdCBfQVJQSFJEX1gyNSA9IDI3MQ0KICAgICtjb25zdCBfTExPTkdfTUFYID0gX19fTE9OR19M
T05HX01BWF9fDQogICAgK2NvbnN0IF9fQ1NfTEZTX0NGTEFHUyA9IDEwMDANCiAgICArY29uc3Qg
X19TWVNDQUxMX0ggPSAxDQogICAgK2NvbnN0IF9BUlBIUkRfRUNPTkVUID0gNzgyDQogICAgK2Nv
bnN0IF9fX0dOVUNfU1REQ19JTkxJTkVfXyA9IDENCiAgICArY29uc3QgX01TX1BSSVZBVEUgPSAy
NjIxNDQNCiAgICArY29uc3QgX01BQ1ZMQU5fTUFDQUREUl9ERUwgPSAxDQogICAgK2NvbnN0IF9T
Q0hFRF9SRVNFVF9PTl9GT1JLID0gMHg0MDAwMDAwMA0KICAgICtjb25zdCBfUE9SVF9QUk9GSUxF
X1JFU1BPTlNFX1NVQ0NFU1MgPSAyNTYNCiAgICArY29uc3QgX1BSX0dFVF9EVU1QQUJMRSA9IDMN
CiAgICArY29uc3QgX05EQV9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9fU0NfUkVfRFVQX01BWCA9
IDQ0DQogICAgK2NvbnN0IF9IT1NUX05PVF9GT1VORCA9IDENCiAgICArY29uc3QgX1NZU19wcmVh
ZHYgPSBfX19OUl9wcmVhZHYNCiAgICArY29uc3QgX01PRF9NQVhFUlJPUiA9IF9BREpfTUFYRVJS
T1INCiAgICArY29uc3QgX09fRElSRUNUID0gX19fT19ESVJFQ1QNCiAgICArY29uc3QgX0lGTEFf
Qk9ORF9BTExfU0xBVkVTX0FDVElWRSA9IDE3DQogICAgK2NvbnN0IF9fU0NfUElJX0lOVEVSTkVU
ID0gNTYNCiAgICArY29uc3QgX1RVTlNFVFNOREJVRl92YWwgPSAxMDc0MDI1Njg0DQogICAgK2Nv
bnN0IF9SVE5MR1JQX0lQVjZfSUZBRERSID0gOQ0KICAgICtjb25zdCBfU1RBVFhfTkxJTksgPSAw
eDAwMDQNCiAgICArY29uc3QgX19fSUZMQV9QT1JUX01BWCA9IDgNCiAgICArY29uc3QgX0JVU19B
RFJFUlIgPSAyDQogICAgK2NvbnN0IF9SVE1fTkVXQUREUiA9IDIwDQogICAgK2NvbnN0IF9USU9D
TUlXQUlUID0gMHg1NDVDDQogICAgK2NvbnN0IF9SVE1fREVMTlNJRCA9IDg5DQogICAgK2NvbnN0
IF9IQVZFX1NZU19TWVNJTkZPX0ggPSAxDQogICAgK2NvbnN0IF9fX05SX3N0YXQgPSA0DQogICAg
K2NvbnN0IF9TUExJQ0VfRl9NT1JFID0gNA0KICAgICtjb25zdCBfSUZBX0ZfTUNBVVRPSk9JTiA9
IDB4NDAwDQogICAgK2NvbnN0IF9TWVNfaW9wcmlvX2dldCA9IF9fX05SX2lvcHJpb19nZXQNCiAg
ICArY29uc3QgX0hBVkVfRExfSVRFUkFURV9QSERSID0gMQ0KICAgICtjb25zdCBfX19JRkxBX1ZG
X1NUQVRTX01BWCA9IDkNCiAgICArY29uc3QgX1NZU19pbml0X21vZHVsZSA9IF9fX05SX2luaXRf
bW9kdWxlDQogICAgK2NvbnN0IF9SVE1fR0VUQU5ZQ0FTVCA9IDYyDQogICAgK2NvbnN0IF9fUE9T
SVhfTVFfT1BFTl9NQVggPSA4DQogICAgK2NvbnN0IF9TWVNfbGdldHhhdHRyID0gX19fTlJfbGdl
dHhhdHRyDQogICAgK2NvbnN0IF9TWVNfcm1kaXIgPSBfX19OUl9ybWRpcg0KICAgICtjb25zdCBf
RVRIRVJUWVBFX0FBUlAgPSAweDgwRjMNCiAgICArY29uc3QgX1BBQ0tBR0VfVEFSTkFNRSA9ICJs
aWJnbyINCiAgICArY29uc3QgX0lOVF9MRUFTVDhfTUFYID0gKDEyNykNCiAgICArY29uc3QgX0lQ
VE9TX1BSRUNfUk9VVElORSA9IF9JUFRPU19DTEFTU19DUzANCiAgICArY29uc3QgX0lGQV9GX09Q
VElNSVNUSUMgPSAweDA0DQogICAgK2NvbnN0IF9ORFRQQV9VTlNQRUMgPSAwDQogICAgK2NvbnN0
IF9fX05SX3BzZWxlY3Q2ID0gMjcwDQogICAgK2NvbnN0IF9GX0dFVFNJRyA9IF9fX0ZfR0VUU0lH
DQogICAgK2NvbnN0IF9TT19XSUZJX1NUQVRVUyA9IDQxDQogICAgK2NvbnN0IF9TX0lXT1RIID0g
KF9TX0lXR1JQID4+IDMpDQogICAgK2NvbnN0IF9JTlBDSyA9IDAwMDAwMjANCiAgICArY29uc3Qg
X05EVFBBX0FQUF9QUk9CRVMgPSA5DQogICAgK2NvbnN0IF9fX09fTEFSR0VGSUxFID0gMA0KICAg
ICtjb25zdCBfUE9SVF9WRFBfUkVTUE9OU0VfVlRJRF9WRVJTSU9OX1ZJT0FMVElPTiA9IDUNCiAg
ICArY29uc3QgX19fTlJfc2V0eGF0dHIgPSAxODgNCiAgICArY29uc3QgX19fRkxUMzJfSEFTX0lO
RklOSVRZX18gPSAxDQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xERkxB
R1MgPSAxMTI5DQogICAgK2NvbnN0IF9QUl9HRVRfVFNDID0gMjUNCiAgICArY29uc3QgX1JUTV9H
RVRORUlHSCA9IDMwDQogICAgK2NvbnN0IF9QVFJBQ0VfU0VUT1BUSU9OUyA9IDE2ODk2DQogICAg
K2NvbnN0IF9fX05SX2Vwb2xsX2NyZWF0ZSA9IDIxMw0KICAgICtjb25zdCBfSVBUT1NfUkVMSUFC
SUxJVFkgPSAweDA0DQogICAgK2NvbnN0IF9BUlBIUkRfRlJBRCA9IDc3MA0KICAgICtjb25zdCBf
U0lPQ1NJRkJSREFERFIgPSAweDg5MWENCiAgICArY29uc3QgX19fVUlOVFBUUl9NQVhfXyA9IDB4
ZmZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfX19OUl9jaG93biA9IDkyDQogICAgK2NvbnN0
IF9fX05SX2Zhbm90aWZ5X2luaXQgPSAzMDANCiAgICArY29uc3QgX0FUX05PX0FVVE9NT1VOVCA9
IDB4ODAwDQogICAgK2NvbnN0IF9fX05SX2Vwb2xsX2NyZWF0ZTEgPSAyOTENCiAgICArY29uc3Qg
X1NZU19zZXRyZXNnaWQgPSBfX19OUl9zZXRyZXNnaWQNCiAgICArY29uc3QgX05fUFJPRklCVVNf
RkRMID0gMTANCiAgICArY29uc3QgX0JQRl9YT1IgPSAweGEwDQogICAgK2NvbnN0IF9JQ01QNl9S
Ul9GTEFHU19SRVFSRVNVTFQgPSAweDQwDQogICAgK2NvbnN0IF9JRkxBX0lQT0lCX01PREUgPSAy
DQogICAgK2NvbnN0IF9NQVBfU0hBUkVEX1ZBTElEQVRFID0gMHgwMw0KICAgICtjb25zdCBfU1lT
X3F1ZXJ5X21vZHVsZSA9IF9fX05SX3F1ZXJ5X21vZHVsZQ0KICAgICtjb25zdCBfU1lTX3RpbWVy
X2dldG92ZXJydW4gPSBfX19OUl90aW1lcl9nZXRvdmVycnVuDQogICAgK2NvbnN0IF9fX05SX2Zy
ZW1vdmV4YXR0ciA9IDE5OQ0KICAgICtjb25zdCBfU0laRV9XSURUSCA9IF9fX1dPUkRTSVpFDQog
ICAgK2NvbnN0IF9JRkFfRl9TRUNPTkRBUlkgPSAweDAxDQogICAgK2NvbnN0IF9fU0NfSk9CX0NP
TlRST0wgPSA3DQogICAgK2NvbnN0IF9fX05SX21vdmVfcGFnZXMgPSAyNzkNCiAgICArY29uc3Qg
X0lGTEFfQ0FSUklFUl9DSEFOR0VTID0gMzUNCiAgICArY29uc3QgX0lORVQ2X0FERFJTVFJMRU4g
PSA0Ng0KICAgICtjb25zdCBfSUZMQV9JUE9JQl9QS0VZID0gMQ0KICAgICtjb25zdCBfSVBQUk9U
T19EQ0NQID0gMzMNCiAgICArY29uc3QgX1NfSVJHUlAgPSAoX1NfSVJVU1IgPj4gMykNCiAgICAr
Y29uc3QgX1NPTF9JUkRBID0gMjY2DQogICAgK2NvbnN0IF9IQVZFX1VOU0hBUkUgPSAxDQogICAg
K2NvbnN0IF9TVEFUWF9BVFRSX0lNTVVUQUJMRSA9IDB4MDAxMA0KICAgICtjb25zdCBfX1NDX0ZT
WU5DID0gMTUNCiAgICArY29uc3QgX19fTlJfbGlzdGVuID0gNTANCiAgICArY29uc3QgX1NDTnhM
RUFTVDE2ID0gImh4Ig0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfUEFEID0gMTQNCiAgICArY29u
c3QgX0FJX0NBTk9OSUROID0gMHgwMDgwDQogICAgK2NvbnN0IF9QUl9NQ0VfS0lMTF9HRVQgPSAz
NA0KICAgICtjb25zdCBfVFVOX0ZfQ1NVTSA9IDB4MDENCiAgICArY29uc3QgX19fRkxUMzJYX01B
WF9FWFBfXyA9IDEwMjQNCiAgICArY29uc3QgX0FGX1BBQ0tFVCA9IF9QRl9QQUNLRVQNCiAgICAr
Y29uc3QgX0lGTEFfQlJQT1JUX01PREUgPSA0DQogICAgK2NvbnN0IF9QQUNLRVRfTE9TUyA9IDE0
DQogICAgK2NvbnN0IF9XQ0hBUl9XSURUSCA9IDMyDQogICAgK2NvbnN0IF9TT0xfTkVUQkVVSSA9
IDI2Nw0KICAgICtjb25zdCBfX19OUl9mZ2V0eGF0dHIgPSAxOTMNCiAgICArY29uc3QgX19TQ19Y
QlM1X0lMUDMyX09GRjMyID0gMTI1DQogICAgK2NvbnN0IF9UQ1BfUVVJQ0tBQ0sgPSAxMg0KICAg
ICtjb25zdCBfT19UTVBGSUxFID0gX19fT19UTVBGSUxFDQogICAgK2NvbnN0IF9FRkJJRyA9IDI3
DQogICAgK2NvbnN0IF9fU0NfMl9DX0JJTkQgPSA0Nw0KICAgICtjb25zdCBfSVBUT1NfQ0xBU1Nf
Q1MwID0gMHgwMA0KICAgICtjb25zdCBfSVBUT1NfQ0xBU1NfQ1MxID0gMHgyMA0KICAgICtjb25z
dCBfSVBUT1NfQ0xBU1NfQ1MyID0gMHg0MA0KICAgICtjb25zdCBfU1lTX2ZzeW5jID0gX19fTlJf
ZnN5bmMNCiAgICArY29uc3QgX0lQVE9TX0NMQVNTX0NTNCA9IDB4ODANCiAgICArY29uc3QgX0lQ
VE9TX0NMQVNTX0NTNSA9IDB4YTANCiAgICArY29uc3QgX19JT0NfRElSU0hJRlQgPSAoX19JT0Nf
U0laRVNISUZUK19fSU9DX1NJWkVCSVRTKQ0KICAgICtjb25zdCBfSVBUT1NfQ0xBU1NfQ1M3ID0g
MHhlMA0KICAgICtjb25zdCBfX19GTFQ2NFhfRElHX18gPSAxOA0KICAgICtjb25zdCBfVENQX0ZB
U1RPUEVOX05PX0NPT0tJRSA9IDM0DQogICAgK2NvbnN0IF9MSU5VWF9SRUJPT1RfTUFHSUMyQSA9
IDg1MDcyMjc4DQogICAgK2NvbnN0IF9QUl9NQ0VfS0lMTF9DTEVBUiA9IDANCiAgICArY29uc3Qg
X1BUUkFDRV9PX01BU0sgPSAzMTQ1OTgzDQogICAgK2NvbnN0IF9FWERFViA9IDE4DQogICAgK2Nv
bnN0IF9OVURfSU5DT01QTEVURSA9IDB4MDENCiAgICArY29uc3QgX0FGX0tFWSA9IF9QRl9LRVkN
CiAgICArY29uc3QgX1g4Nl9DUjNfUENEX0JJVCA9IDQNCiAgICArY29uc3QgX1BUUkFDRV9TRVRT
SUdJTkZPID0gMTY4OTkNCiAgICArY29uc3QgX0VMM0hMVCA9IDQ2DQogICAgK2NvbnN0IF9TWVNf
ZmFub3RpZnlfbWFyayA9IF9fX05SX2Zhbm90aWZ5X21hcmsNCiAgICArY29uc3QgX19CSVRTX0VS
Uk5PX0ggPSAxDQogICAgK2NvbnN0IF9fX05SX3RpbWVyX2dldG92ZXJydW4gPSAyMjUNCiAgICAr
Y29uc3QgX0lQVjZfVENMQVNTID0gNjcNCiAgICArY29uc3QgX05EVEFfUEFSTVMgPSA2DQogICAg
K2NvbnN0IF9BRl9YMjUgPSBfUEZfWDI1DQogICAgK2NvbnN0IF9CU0RMWSA9IDAwMjAwMDANCiAg
ICArY29uc3QgX01TR19QUk9YWSA9IDE2DQogICAgK2NvbnN0IF9JRkxBX01BQ1NFQ19VTlNQRUMg
PSAwDQogICAgK2NvbnN0IF9fX05SX2Fmc19zeXNjYWxsID0gMTgzDQogICAgK2NvbnN0IF9NRkRf
Q0xPRVhFQyA9IDENCiAgICArY29uc3QgX19fVUlOVF9GQVNUOF9NQVhfXyA9IDB4ZmYNCiAgICAr
Y29uc3QgX1NUQVRYX1NJWkUgPSAweDAyMDANCiAgICArY29uc3QgX19TQ19DSEFSX01JTiA9IDEw
Mw0KICAgICtjb25zdCBfRlNfQ09NUFJfRkwgPSAweDAwMDAwMDA0DQogICAgK2NvbnN0IF9JQ01Q
Nl9SUl9SRVNVTFRfRkxBR1NfT09CID0gMHgwMjAwDQogICAgK2NvbnN0IF9TQ01fVElNRVNUQU1Q
SU5HX1BLVElORk8gPSA1OA0KICAgICtjb25zdCBfVkVPRiA9IDQNCiAgICArY29uc3QgX19fTlJf
bXFfb3BlbiA9IDI0MA0KICAgICtjb25zdCBfSUZGX01BU1RFUiA9IDEwMjQNCiAgICArY29uc3Qg
X1BUUkFDRV9TSU5HTEVCTE9DSyA9IDMzDQogICAgK2NvbnN0IF9TWVNfZ2V0dGltZW9mZGF5ID0g
X19fTlJfZ2V0dGltZW9mZGF5DQogICAgK2NvbnN0IF9fX05SX2FjY2VwdCA9IDQzDQogICAgK2Nv
bnN0IF9fUE9TSVhfTUVTU0FHRV9QQVNTSU5HID0gMjAwODA5DQogICAgK2NvbnN0IF9fX1BUUkRJ
RkZfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYNCiAgICArY29uc3QgX1NJX0tFUk5FTCA9IDEy
OA0KICAgICtjb25zdCBfX1NDX0JDX0JBU0VfTUFYID0gMzYNCiAgICArY29uc3QgX1RVTlNFVExJ
TktfdmFsID0gMTA3NDAyNTY3Nw0KICAgICtjb25zdCBfU1lTX3N5bmNfZmlsZV9yYW5nZSA9IF9f
X05SX3N5bmNfZmlsZV9yYW5nZQ0KICAgICtjb25zdCBfQVJQSFJEX0NTTElQID0gMjU3DQogICAg
K2NvbnN0IF9QUl9GUF9FWENfT1ZGID0gMHgwMjAwMDANCiAgICArY29uc3QgX19fTlJfc29ja2V0
cGFpciA9IDUzDQogICAgK2NvbnN0IF9TWVNfdXNlcmZhdWx0ZmQgPSBfX19OUl91c2VyZmF1bHRm
ZA0KICAgICtjb25zdCBfSUZMQV9CT05EX1BSSU1BUlkgPSAxMQ0KICAgICtjb25zdCBfQ0xEX0RV
TVBFRCA9IDMNCiAgICArY29uc3QgX1NZU19taWdyYXRlX3BhZ2VzID0gX19fTlJfbWlncmF0ZV9w
YWdlcw0KICAgICtjb25zdCBfQ1NJWkUgPSAwMDAwMDYwDQogICAgK2NvbnN0IF9SVE1HUlBfVEMg
PSA4DQogICAgK2NvbnN0IF9SVE1fTkVXQ0hBSU4gPSAxMDANCiAgICArY29uc3QgX0VBQ0NFUyA9
IDEzDQogICAgK2NvbnN0IF9fUE9TSVhfTUFYX0NBTk9OID0gMjU1DQogICAgK2NvbnN0IF9SVFBS
T1RfWkVCUkEgPSAxMQ0KICAgICtjb25zdCBfX1BPU0lYX1RIUkVBRF9USFJFQURTX01BWCA9IDY0
DQogICAgK2NvbnN0IF9DTE9DS19CT09UVElNRSA9IDcNCiAgICArY29uc3QgX19feDg2XzY0ID0g
MQ0KICAgICtjb25zdCBfQ1FVSVQgPSAwMzQNCiAgICArY29uc3QgX1RJT0NHUFROX3ZhbCA9IDIx
NDc3NjczNDQNCiAgICArY29uc3QgX19TQ19YT1BFTl9WRVJTSU9OID0gODkNCiAgICArY29uc3Qg
X19fSU5UMTZfTUFYX18gPSAweDdmZmYNCiAgICArY29uc3QgX19TQ19OTF9TRVRNQVggPSAxMjMN
CiAgICArY29uc3QgX19fTlJfaW9fY2FuY2VsID0gMjEwDQogICAgK2NvbnN0IF9fU1lTX0NERUZT
X0ggPSAxDQogICAgK2NvbnN0IF9TQ054TEVBU1QzMiA9ICJ4Ig0KICAgICtjb25zdCBfRVRIX1Bf
TU9CSVRFWCA9IDB4MDAxNQ0KICAgICtjb25zdCBfSUZMQV9FVkVOVF9CT05ESU5HX0ZBSUxPVkVS
ID0gMw0KICAgICtjb25zdCBfU0lfVElNRVIgPSAtMg0KICAgICtjb25zdCBfRU5PS0VZID0gMTI2
DQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9UT1BPTE9HWV9DSEFOR0VfQUNLID0gMTkNCiAgICAr
Y29uc3QgX0FSUEhSRF9DU0xJUDYgPSAyNTkNCiAgICArY29uc3QgX19fV0lOVF9NSU5fXyA9IDAN
CiAgICArY29uc3QgX19fU19JRlJFRyA9IDAxMDAwMDANCiAgICArY29uc3QgX0lOVFBUUl9NSU4g
PSAoLTkyMjMzNzIwMzY4NTQ3NzU4MDctMSkNCiAgICArY29uc3QgX19fU19JU1VJRCA9IDA0MDAw
DQogICAgK2NvbnN0IF9QUl9TRVRfU0VDVVJFQklUUyA9IDI4DQogICAgK2NvbnN0IF9FUE9MTFdS
QkFORCA9IDUxMg0KICAgICtjb25zdCBfX0xGUzY0X0FTWU5DSFJPTk9VU19JTyA9IDENCiAgICAr
Y29uc3QgX1NLRl9BRF9SWEhBU0ggPSAzMg0KICAgICtjb25zdCBfUEZfTE9DQUwgPSAxDQogICAg
K2NvbnN0IF9FTk9UU09DSyA9IDg4DQogICAgK2NvbnN0IF9TX0lGTVQgPSBfX19TX0lGTVQNCiAg
ICArY29uc3QgX19fTlJfa2NtcCA9IDMxMg0KICAgICtjb25zdCBfU1lTX3NwbGljZSA9IF9fX05S
X3NwbGljZQ0KICAgICtjb25zdCBfX1BPU0lYX1RSQUNFX0lOSEVSSVQgPSAtMQ0KICAgICtjb25z
dCBfX1NDX1NIUlRfTUlOID0gMTE0DQogICAgK2NvbnN0IF9BUlBIUkRfTEFQQiA9IDUxNg0KICAg
ICtjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9LRVkgPSA0DQogICAgK2NvbnN0IF9D
TE9DS19NT05PVE9OSUNfUkFXID0gNA0KICAgICtjb25zdCBfTUNBU1RfRVhDTFVERSA9IDANCiAg
ICArY29uc3QgX1NJT0NTSUZNVFUgPSAweDg5MjINCiAgICArY29uc3QgX0FUX1NUQVRYX0ZPUkNF
X1NZTkMgPSAweDIwMDANCiAgICArY29uc3QgX1NJT0NHSUZDT05GID0gMHg4OTEyDQogICAgK2Nv
bnN0IF9GU19TRUNSTV9GTCA9IDB4MDAwMDAwMDENCiAgICArY29uc3QgX19fSU5UX0ZBU1QzMl9X
SURUSF9fID0gNjQNCiAgICArY29uc3QgX19QQ19NQVhfQ0FOT04gPSAxDQogICAgK2NvbnN0IF9G
SU9DTEVYID0gMHg1NDUxDQogICAgK2NvbnN0IF9fX0lMUDMyX09GRkJJR19MREZMQUdTID0gIi1t
MzIiDQogICAgK2NvbnN0IF9JRkxBX0hTUl9NVUxUSUNBU1RfU1BFQyA9IDMNCiAgICArY29uc3Qg
X19fSU5UX0ZBU1QxNl9NQVhfXyA9IDB4N2ZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfU1lT
X21sb2NrYWxsID0gX19fTlJfbWxvY2thbGwNCiAgICArY29uc3QgX1NZU19zZXRfdGhyZWFkX2Fy
ZWEgPSBfX19OUl9zZXRfdGhyZWFkX2FyZWENCiAgICArY29uc3QgX01TX0JJTkQgPSA0MDk2DQog
ICAgK2NvbnN0IF9BUlBPUF9JblJFUVVFU1QgPSA4DQogICAgK2NvbnN0IF9TSVpFT0ZfVk9JRF9Q
ID0gOA0KICAgICtjb25zdCBfU0lPQ0dJRk5FVE1BU0sgPSAweDg5MWINCiAgICArY29uc3QgX1ND
SEVEX0JBVENIID0gMw0KICAgICtjb25zdCBfUlRNX05FV0FDVElPTiA9IDQ4DQogICAgK2NvbnN0
IF9BRl9LQ00gPSBfUEZfS0NNDQogICAgK2NvbnN0IF9TWVNfY29weV9maWxlX3JhbmdlID0gX19f
TlJfY29weV9maWxlX3JhbmdlDQogICAgK2NvbnN0IF9BUlBIUkRfU0xJUCA9IDI1Ng0KICAgICtj
b25zdCBfTVNfUkVMQVRJTUUgPSAyMDk3MTUyDQogICAgK2NvbnN0IF9SVVNBR0VfU0VMRiA9IDAN
CiAgICArY29uc3QgX19fRl9TRVRPV05fRVggPSAxNQ0KICAgICtjb25zdCBfX19STElNSVRfTklD
RSA9IDEzDQogICAgK2NvbnN0IF9TT19BVFRBQ0hfRklMVEVSID0gMjYNCiAgICArY29uc3QgX0VQ
T0xMSU4gPSAxDQogICAgK2NvbnN0IF9JRkFfRl9IT01FQUREUkVTUyA9IDB4MTANCiAgICArY29u
c3QgX1NLRl9MTF9PRkYgPSAoLTB4MjAwMDAwKQ0KICAgICtjb25zdCBfUlRGX1RIUk9XID0gMHgy
MDAwDQogICAgK2NvbnN0IF9TWVNfb3Blbl9ieV9oYW5kbGVfYXQgPSBfX19OUl9vcGVuX2J5X2hh
bmRsZV9hdA0KICAgICtjb25zdCBfX19TSVpFT0ZfV0lOVF9UX18gPSA0DQogICAgK2NvbnN0IF9J
RkxBX0JSUE9SVF9QUk9YWUFSUCA9IDEwDQogICAgK2NvbnN0IF9TWVNfbWFkdmlzZSA9IF9fX05S
X21hZHZpc2UNCiAgICArY29uc3QgX1NUQV9GUkVRSE9MRCA9IDB4MDA4MA0KICAgICtjb25zdCBf
UEZfVlNPQ0sgPSA0MA0KICAgICtjb25zdCBfTkNDUyA9IDMyDQogICAgK2NvbnN0IF9fX0lGTEFf
VlJGX1BPUlRfTUFYID0gMg0KICAgICtjb25zdCBfX1NDX1Y2X0lMUDMyX09GRjMyID0gMTc2DQog
ICAgK2NvbnN0IF9DTERfRVhJVEVEID0gMQ0KICAgICtjb25zdCBfRVRPT01BTllSRUZTID0gMTA5
DQogICAgK2NvbnN0IF9SVEFYX0ZFQVRVUkVfRUNOID0gKDEgPDwgMCkNCiAgICArY29uc3QgX0VU
SF9QX0hTUiA9IDB4ODkyRg0KICAgICtjb25zdCBfU1lTX2lvX3NldHVwID0gX19fTlJfaW9fc2V0
dXANCiAgICArY29uc3QgX1JMSU1JVF9DT1JFID0gNA0KICAgICtjb25zdCBfU1lTX2tleWN0bCA9
IF9fX05SX2tleWN0bA0KICAgICtjb25zdCBfX1NDX1NFTV9OU0VNU19NQVggPSAzMg0KICAgICtj
b25zdCBfRVBPTExXQUtFVVAgPSA1MzY4NzA5MTINCiAgICArY29uc3QgX19fTlJfZmxpc3R4YXR0
ciA9IDE5Ng0KICAgICtjb25zdCBfX1NDX0JBUlJJRVJTID0gMTMzDQogICAgK2NvbnN0IF9TWVNf
c2V0Z2lkID0gX19fTlJfc2V0Z2lkDQogICAgK2NvbnN0IF9fU0NfV09SRF9CSVQgPSAxMDcNCiAg
ICArY29uc3QgX0FSUEhSRF9ST1NFID0gMjcwDQogICAgK2NvbnN0IF9TSV9VU0VSID0gMA0KICAg
ICtjb25zdCBfSU5fQ0xBU1NCX05TSElGVCA9IDE2DQogICAgK2NvbnN0IF9ORFRQQV9QUk9YWV9R
TEVOID0gMTQNCiAgICArY29uc3QgX1BSSWkxNiA9ICJpIg0KICAgICtjb25zdCBfSUZMQV9CT05E
X0FEX0lORk9fUEFSVE5FUl9NQUMgPSA1DQogICAgK2NvbnN0IF9NU0dfQ09ORklSTSA9IDIwNDgN
CiAgICArY29uc3QgX19fTlJfc3ltbGlua2F0ID0gMjY2DQogICAgK2NvbnN0IF9IQVZFX0ZVVElN
RVNBVCA9IDENCiAgICArY29uc3QgX19fUERQX0VORElBTiA9IDM0MTINCiAgICArY29uc3QgX1BU
SFJFQURfS0VZU19NQVggPSAxMDI0DQogICAgK2NvbnN0IF9NU19OT1NVSUQgPSAyDQogICAgK2Nv
bnN0IF9JRkxBX0JSX01DQVNUX1FVRVJZX0lOVFZMID0gMzMNCiAgICArY29uc3QgX19fVUlOVE1B
WF9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfSUZMQV9XRUlHSFQgPSAx
NQ0KICAgICtjb25zdCBfSVBWNl9YRlJNX1BPTElDWSA9IDM1DQogICAgK2NvbnN0IF9fX05SX2Fj
Y2VzcyA9IDIxDQogICAgK2NvbnN0IF9fU0NfTEVWRUwxX0lDQUNIRV9TSVpFID0gMTg1DQogICAg
K2NvbnN0IF9SVE1HUlBfSVBWNl9JRkFERFIgPSAweDEwMA0KICAgICtjb25zdCBfX19OUl9saW5r
ID0gODYNCiAgICArY29uc3QgX0ZTX1hGTEFHX1JFQUxUSU1FID0gMHgwMDAwMDAwMQ0KICAgICtj
b25zdCBfRkFMTE9DX0ZMX0lOU0VSVF9SQU5HRSA9IDB4MjANCiAgICArY29uc3QgX19fUFJJUFRS
X1BSRUZJWCA9ICJsIg0KICAgICtjb25zdCBfSUZMQV9YRlJNX1VOU1BFQyA9IDANCiAgICArY29u
c3QgX1NUQVRYX0NUSU1FID0gMHgwMDgwDQogICAgK2NvbnN0IF9fX1NDSEFSX01BWF9fID0gMHg3
Zg0KICAgICtjb25zdCBfU0hSVF9XSURUSCA9IDE2DQogICAgK2NvbnN0IF9TSU9DREVMUlQgPSAw
eDg5MEMNCiAgICArY29uc3QgX0FGX0lQWCA9IF9QRl9JUFgNCiAgICArY29uc3QgX01TX0JPUk4g
PSAoMTw8MjkpDQogICAgK2NvbnN0IF9JRkxBX1hEUCA9IDQzDQogICAgK2NvbnN0IF9JRkxBX1NU
QVRTID0gNw0KICAgICtjb25zdCBfRVJPRlMgPSAzMA0KICAgICtjb25zdCBfU09fTk9fQ0hFQ0sg
PSAxMQ0KICAgICtjb25zdCBfQkNfQkFTRV9NQVggPSBfX1BPU0lYMl9CQ19CQVNFX01BWA0KICAg
ICtjb25zdCBfWDg2X0VGTEFHU19JRl9CSVQgPSA5DQogICAgK2NvbnN0IF9fWE9QRU5fU0hNID0g
MQ0KICAgICtjb25zdCBfUkVHX1JTSSA9IDkNCiAgICArY29uc3QgX0FSUEhSRF9MT0NBTFRMSyA9
IDc3Mw0KICAgICtjb25zdCBfX1NDX0RFVklDRV9TUEVDSUZJQ19SID0gMTQyDQogICAgK2NvbnN0
IF9fU0NfU0VMRUNUID0gNTkNCiAgICArY29uc3QgX19fSUZBX01BWCA9IDEwDQogICAgK2NvbnN0
IF9TWVNfZmFjY2Vzc2F0ID0gX19fTlJfZmFjY2Vzc2F0DQogICAgK2NvbnN0IF9DU1RPUEIgPSAw
MDAwMTAwDQogICAgK2NvbnN0IF9NQUNWTEFOX01BQ0FERFJfU0VUID0gMw0KICAgICtjb25zdCBf
VUlOVF9NQVggPSAoX0lOVF9NQVggKiAyICsgMSkNCiAgICArY29uc3QgX1BSX1RJTUlOR19TVEFU
SVNUSUNBTCA9IDANCiAgICArY29uc3QgX1NDTmRGQVNUOCA9ICJoaGQiDQogICAgK2NvbnN0IF9N
QVhUVEwgPSAyNTUNCiAgICArY29uc3QgX0VBSV9OT0RBVEEgPSAtNQ0KICAgICtjb25zdCBfVENQ
X0NBX0NXUiA9IDINCiAgICArY29uc3QgX0lYT04gPSAwMDAyMDAwDQogICAgK2NvbnN0IF9fX2du
dV9saW51eF9fID0gMQ0KICAgICtjb25zdCBfX1BBVEhfU0VSVklDRVMgPSAiL2V0Yy9zZXJ2aWNl
cyINCiAgICArY29uc3QgX19fSUZMQV9WRl9WTEFOX0lORk9fTUFYID0gMg0KICAgICtjb25zdCBf
QUZfVU5JWCA9IF9QRl9VTklYDQogICAgK2NvbnN0IF9FVEhfUF9IRExDID0gMHgwMDE5DQogICAg
K2NvbnN0IF9QUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQgPSA0Mw0KICAgICtjb25zdCBfUlRQUk9U
X0JJUkQgPSAxMg0KICAgICtjb25zdCBfQVJQSFJEX0hXWDI1ID0gMjcyDQogICAgK2NvbnN0IF9S
VE1fREVMUk9VVEUgPSAyNQ0KICAgICtjb25zdCBfSUZMQV9CUl9WTEFOX1BST1RPQ09MID0gOA0K
ICAgICtjb25zdCBfSUZMQV9CUlBPUlRfVU5TUEVDID0gMA0KICAgICtjb25zdCBfUlRNX0dFVEFE
RFIgPSAyMg0KICAgICtjb25zdCBfVENJT04gPSAzDQogICAgK2NvbnN0IF9JUF9DSEVDS1NVTSA9
IDIzDQogICAgK2NvbnN0IF9TWVNfZmNobW9kYXQgPSBfX19OUl9mY2htb2RhdA0KICAgICtjb25z
dCBfQ0xPTkVfTkVXVVNFUiA9IDB4MTAwMDAwMDANCiAgICArY29uc3QgX1RJT0NOT1RUWSA9IDB4
NTQyMg0KICAgICtjb25zdCBfU09fTk9GQ1MgPSA0Mw0KICAgICtjb25zdCBfU1lTX2Nsb2NrX3Nl
dHRpbWUgPSBfX19OUl9jbG9ja19zZXR0aW1lDQogICAgK2NvbnN0IF9JUF9QS1RPUFRJT05TID0g
OQ0KICAgICtjb25zdCBfVENQX1FVRVVFU19OUiA9IDMNCiAgICArY29uc3QgX19fRkxUNjRfREVD
SU1BTF9ESUdfXyA9IDE3DQogICAgK2NvbnN0IF9JQ01QNl9USU1FX0VYQ0VFRF9SRUFTU0VNQkxZ
ID0gMQ0KICAgICtjb25zdCBfSVBUT1NfRFNDUF9NQVNLID0gMHhmYw0KICAgICtjb25zdCBfU0lH
SU5UID0gMg0KICAgICtjb25zdCBfQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEID0gMg0KICAgICtj
b25zdCBfSUNNUDZfRFNUX1VOUkVBQ0ggPSAxDQogICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9UT1Mg
PSA0DQogICAgK2NvbnN0IF9QUl9GUF9FWENfRElTQUJMRUQgPSAwDQogICAgK2NvbnN0IF9NQURW
X0RPRFVNUCA9IDE3DQogICAgK2NvbnN0IF9TWVNfZ2V0X3RocmVhZF9hcmVhID0gX19fTlJfZ2V0
X3RocmVhZF9hcmVhDQogICAgK2NvbnN0IF9TT0xfUE5QSVBFID0gMjc1DQogICAgK2NvbnN0IF9N
QVhfTElOS1MgPSAzMg0KICAgICtjb25zdCBfUlROTF9GQU1JTFlfSVBNUiA9IDEyOA0KICAgICtj
b25zdCBfTkxfTU1BUF9TVEFUVVNfQ09QWSA9IDMNCiAgICArY29uc3QgX19TQ19SRUFERVJfV1JJ
VEVSX0xPQ0tTID0gMTUzDQogICAgK2NvbnN0IF9fU0NfQUlPX1BSSU9fREVMVEFfTUFYID0gMjUN
CiAgICArY29uc3QgX1JUTkxHUlBfUEhPTkVUX0lGQUREUiA9IDIxDQogICAgK2NvbnN0IF9BUlBI
UkRfRkNGQUJSSUMgPSA3ODcNCiAgICArY29uc3QgX0NMT05FX1BBUkVOVF9TRVRUSUQgPSAweDAw
MTAwMDAwDQogICAgK2NvbnN0IF9TWVNfbmV3ZnN0YXRhdCA9IF9fX05SX25ld2ZzdGF0YXQNCiAg
ICArY29uc3QgX0lGRl9OT1RSQUlMRVJTID0gMzINCiAgICArY29uc3QgX1RDUF9TQVZFX1NZTiA9
IDI3DQogICAgK2NvbnN0IF9QUklpMzIgPSAiaSINCiAgICArY29uc3QgX1RJTUVfRVJST1IgPSA1
DQogICAgK2NvbnN0IF9fX05SX3JlYWQgPSAwDQogICAgK2NvbnN0IF9WRU9MMiA9IDE2DQogICAg
K2NvbnN0IF9FVEhFUlRZUEVfTlRSQUlMRVIgPSAxNg0KICAgICtjb25zdCBfX1NDX01PTk9UT05J
Q19DTE9DSyA9IDE0OQ0KICAgICtjb25zdCBfVENBX1JPT1RfQ09VTlQgPSAzDQogICAgK2NvbnN0
IF9QS0VZX0RJU0FCTEVfQUNDRVNTID0gMHgxDQogICAgK2NvbnN0IF9IQVZFX0FTX1g4Nl9QQ1JF
TCA9IDENCiAgICArY29uc3QgX19faW92ZWNfZGVmaW5lZCA9IDENCiAgICArY29uc3QgX1RVTl9G
TFRfQUxMTVVMVEkgPSAweDAwMDENCiAgICArY29uc3QgX05FVExJTktfUlhfUklORyA9IDYNCiAg
ICArY29uc3QgX0VOT1RSRUNPVkVSQUJMRSA9IDEzMQ0KICAgICtjb25zdCBfUFRSQUNFX0lOVEVS
UlVQVCA9IDE2OTAzDQogICAgK2NvbnN0IF9BRl9DQUlGID0gX1BGX0NBSUYNCiAgICArY29uc3Qg
X1NPTF9JUFY2ID0gNDENCiAgICArY29uc3QgX0lGTEFfQlJPQURDQVNUID0gMg0KICAgICtjb25z
dCBfX19MREJMX01BTlRfRElHX18gPSA2NA0KICAgICtjb25zdCBfRkZJX1RZUEVfU0lOVDggPSA2
DQogICAgK2NvbnN0IF9fX05SX3dhaXRpZCA9IDI0Nw0KICAgICtjb25zdCBfSVhBTlkgPSAwMDA0
MDAwDQogICAgK2NvbnN0IF9TWVNfc2NoZWRfc2V0YWZmaW5pdHkgPSBfX19OUl9zY2hlZF9zZXRh
ZmZpbml0eQ0KICAgICtjb25zdCBfX19GTFQ2NFhfSEFTX1FVSUVUX05BTl9fID0gMQ0KICAgICtj
b25zdCBfX1NDX1NQT1JBRElDX1NFUlZFUiA9IDE2MA0KICAgICtjb25zdCBfUE9MTF9FUlIgPSA0
DQogICAgK2NvbnN0IF9JRkxBX1hEUF9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9GX1JETENLID0g
MA0KICAgICtjb25zdCBfSVBPUFRfREVCTUVBUyA9IDB4NDANCiAgICArY29uc3QgX0FUX0ZEQ1dE
ID0gLTEwMA0KICAgICtjb25zdCBfSU5UUFRSX1dJRFRIID0gX19fV09SRFNJWkUNCiAgICArY29u
c3QgX19TQ19QSUlfT1NJX0NMVFMgPSA2NA0KICAgICtjb25zdCBfU1lTX3BpcGUyID0gX19fTlJf
cGlwZTINCiAgICArY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9BRF9QQVJUTkVSX09QRVJfUE9SVF9T
VEFURSA9IDgNCiAgICArY29uc3QgX19DU19HTlVfTElCUFRIUkVBRF9WRVJTSU9OID0gMw0KICAg
ICtjb25zdCBfVENTQURSQUlOID0gMQ0KICAgICtjb25zdCBfTE9OR19NQVggPSBfX19MT05HX01B
WF9fDQogICAgK2NvbnN0IF9QUklkMTYgPSAiZCINCiAgICArY29uc3QgX19TWVNfSU5PVElGWV9I
ID0gMQ0KICAgICtjb25zdCBfU1lTX2JwZiA9IF9fX05SX2JwZg0KICAgICtjb25zdCBfUlROTEdS
UF9OT1A0ID0gMTcNCiAgICArY29uc3QgX19TQ19YT1BFTl9YQ1VfVkVSU0lPTiA9IDkwDQogICAg
K2NvbnN0IF9QUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UID0gNDQNCiAgICArY29uc3QgX0lOVF9M
RUFTVDhfTUlOID0gKC0xMjgpDQogICAgK2NvbnN0IF9TSUdJTyA9IF9TSUdQT0xMDQogICAgK2Nv
bnN0IF9JUFY2X1JFQ1ZPUklHRFNUQUREUiA9IF9JUFY2X09SSUdEU1RBRERSDQogICAgK2NvbnN0
IF9fUENfRklMRVNJWkVCSVRTID0gMTMNCiAgICArY29uc3QgX1RJT0NHUEdSUCA9IDB4NTQwRg0K
ICAgICtjb25zdCBfX19GTFQzMlhfTUlOX0VYUF9fID0gKC0xMDIxKQ0KICAgICtjb25zdCBfVElP
Q0dXSU5TWl92YWwgPSAyMTUyMw0KICAgICtjb25zdCBfX1NDX0xFVkVMMl9DQUNIRV9MSU5FU0la
RSA9IDE5Mw0KICAgICtjb25zdCBfRVRIX1BfQVRNTVBPQSA9IDB4ODg0Yw0KICAgICtjb25zdCBf
SEFWRV9TVFJJTkdTX0ggPSAxDQogICAgK2NvbnN0IF9ETl9DUkVBVEUgPSAweDAwMDAwMDA0DQog
ICAgK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEXzE2ID0gMHgwMg0KICAgICtjb25zdCBfU09f
T09CSU5MSU5FID0gMTANCiAgICArY29uc3QgX1BBQ0tFVF9ST0xMT1ZFUl9TVEFUUyA9IDIxDQog
ICAgK2NvbnN0IF9fUE9TSVhfQVNZTkNIUk9OT1VTX0lPID0gMjAwODA5DQogICAgK2NvbnN0IF9f
Q1NfTEZTX0xJQlMgPSAxMDAyDQogICAgK2NvbnN0IF9QQUNLRVRfTVJfUFJPTUlTQyA9IDENCiAg
ICArY29uc3QgX19fRkxUNjRfTUFYX18gPSAxLjENCiAgICArY29uc3QgX19fVVNFX0lTT0MxMSA9
IDENCiAgICArY29uc3QgX19TQ19MRVZFTDJfQ0FDSEVfQVNTT0MgPSAxOTINCiAgICArY29uc3Qg
X1RDU0JSSyA9IDB4NTQwOQ0KICAgICtjb25zdCBfSU5UX0xFQVNUMzJfV0lEVEggPSAzMg0KICAg
ICtjb25zdCBfQlBGX01JTk9SX1ZFUlNJT04gPSAxDQogICAgK2NvbnN0IF9fX0dOVV9MSUJSQVJZ
X18gPSA2DQogICAgK2NvbnN0IF9fX1NURENfSVNPXzEwNjQ2X18gPSAyMDE3MDYNCiAgICArY29u
c3QgX0VJU05BTSA9IDEyMA0KICAgICtjb25zdCBfSVBWNl9BVVRPRkxPV0xBQkVMID0gNzANCiAg
ICArY29uc3QgX19TQ19MRVZFTDRfQ0FDSEVfTElORVNJWkUgPSAxOTkNCiAgICArY29uc3QgX0lG
TEFfTElOS0lORk8gPSAxOA0KICAgICtjb25zdCBfSVBfUE1UVURJU0NfRE8gPSAyDQogICAgK2Nv
bnN0IF9QVFJBQ0VfT0xEU0VUT1BUSU9OUyA9IDIxDQogICAgK2NvbnN0IF9JUF9QS1RJTkZPID0g
OA0KICAgICtjb25zdCBfT19SU1lOQyA9IF9PX1NZTkMNCiAgICArY29uc3QgX1NQTElDRV9GX05P
TkJMT0NLID0gMg0KICAgICtjb25zdCBfQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgPSAweDAwMjAwMDAw
DQogICAgK2NvbnN0IF9IQVZFX09GRjY0X1QgPSAxDQogICAgK2NvbnN0IF9GU19FT0ZCTE9DS1Nf
RkwgPSAweDAwNDAwMDAwDQogICAgK2NvbnN0IF9fU0NfRklMRV9TWVNURU0gPSAxNDgNCiAgICAr
Y29uc3QgX0NIQVJDTEFTU19OQU1FX01BWCA9IDIwNDgNCiAgICArY29uc3QgX0lOVF9NQVggPSBf
X19JTlRfTUFYX18NCiAgICArY29uc3QgX19fTFA2NF9PRkY2NF9DRkxBR1MgPSAiLW02NCINCiAg
ICArY29uc3QgX0lOVF9XSURUSCA9IDMyDQogICAgK2NvbnN0IF9ORFRBX1VOU1BFQyA9IDANCiAg
ICArY29uc3QgX1RVTl9GX1RTTzQgPSAweDAyDQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEUyA9
IDIwMDgwOQ0KICAgICtjb25zdCBfUlRFWFRfRklMVEVSX0JSVkxBTiA9ICgxIDw8IDEpDQogICAg
K2NvbnN0IF9SVEFYX1JFT1JERVJJTkcgPSA5DQogICAgK2NvbnN0IF9QRl9BVE1TVkMgPSAyMA0K
ICAgICtjb25zdCBfTlNTX0JVRkxFTl9HUk9VUCA9IDEwMjQNCiAgICArY29uc3QgX1BSX1RTQ19T
SUdTRUdWID0gMg0KICAgICtjb25zdCBfX19OUl9zZW1jdGwgPSA2Ng0KICAgICtjb25zdCBfU09M
X1RJUEMgPSAyNzENCiAgICArY29uc3QgX01MRF9MSVNURU5FUl9SRVBPUlQgPSAxMzENCiAgICAr
Y29uc3QgX1VQQUdFUyA9IDENCiAgICArY29uc3QgX19TQ19QSUlfT1NJX00gPSA2NQ0KICAgICtj
b25zdCBfRlNfWEZMQUdfUFJPSklOSEVSSVQgPSAweDAwMDAwMjAwDQogICAgK2NvbnN0IF9NU0df
RVJSUVVFVUUgPSA4MTkyDQogICAgK2NvbnN0IF9BUlBIUkRfSUVFRTgwMjE1NCA9IDgwNA0KICAg
ICtjb25zdCBfVElPQ1BLVCA9IDB4NTQyMA0KICAgICtjb25zdCBfRVNSQ0ggPSAzDQogICAgK2Nv
bnN0IF9fX1NJWkVPRl9QVEhSRUFEX1JXTE9DS19UID0gNTYNCiAgICArY29uc3QgX19QT1NJWDJf
QkNfU1RSSU5HX01BWCA9IDEwMDANCiAgICArY29uc3QgX0lGTEFfSU5FVDZfVU5TUEVDID0gMA0K
ICAgICtjb25zdCBfQVRGX1VTRVRSQUlMRVJTID0gMHgxMA0KICAgICtjb25zdCBfSU5fTU9WRV9T
RUxGID0gMHgwMDAwMDgwMA0KICAgICtjb25zdCBfX19TSUdfQVRPTUlDX1dJRFRIX18gPSAzMg0K
ICAgICtjb25zdCBfX1NDX1NZU1RFTV9EQVRBQkFTRV9SID0gMTYzDQogICAgK2NvbnN0IF9SVEFf
RFBPUlQgPSAyOQ0KICAgICtjb25zdCBfUlRBX1NFU1NJT04gPSAxMw0KICAgICtjb25zdCBfUEFD
S0FHRV9WRVJTSU9OID0gInZlcnNpb24tdW51c2VkIg0KICAgICtjb25zdCBfX19ERUMxMjhfU1VC
Tk9STUFMX01JTl9fID0gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFLTYxNDMN
CiAgICArY29uc3QgX0IyMDAwMDAwID0gMDAxMDAxMw0KICAgICtjb25zdCBfU1lTX2NobW9kID0g
X19fTlJfY2htb2QNCiAgICArY29uc3QgX1NUQV9QUFNXQU5ERVIgPSAweDA0MDANCiAgICArY29u
c3QgX19fSU5UX01BWF9fID0gMHg3ZmZmZmZmZg0KICAgICtjb25zdCBfX19VSU5UX0xFQVNUOF9N
QVhfXyA9IDB4ZmYNCiAgICArY29uc3QgX19fSU5UX0ZBU1QxNl9XSURUSF9fID0gNjQNCiAgICAr
Y29uc3QgX1NZU19ldmVudGZkMiA9IF9fX05SX2V2ZW50ZmQyDQogICAgK2NvbnN0IF9TSUdCVVMg
PSA3DQogICAgK2NvbnN0IF9GUF9YU1RBVEVfTUFHSUMxID0gMHg0NjUwNTg1Mw0KICAgICtjb25z
dCBfRlBfWFNUQVRFX01BR0lDMiA9IDB4NDY1MDU4NDUNCiAgICArY29uc3QgX1RDR0VUU192YWwg
PSAyMTUwNQ0KICAgICtjb25zdCBfTkxNX0ZfUkVRVUVTVCA9IDB4MDENCiAgICArY29uc3QgX01B
RFZfTk9IVUdFUEFHRSA9IDE1DQogICAgK2NvbnN0IF9IQVZFX0lOT1RJRllfSU5JVCA9IDENCiAg
ICArY29uc3QgX1JUTV9ORVdRRElTQyA9IDM2DQogICAgK2NvbnN0IF9QUl9TRVRfS0VFUENBUFMg
PSA4DQogICAgK2NvbnN0IF9QUl9FTkRJQU5fQklHID0gMA0KICAgICtjb25zdCBfSVBQT1JUX0xP
R0lOU0VSVkVSID0gNTEzDQogICAgK2NvbnN0IF9TWVNfY2xvY2tfZ2V0dGltZSA9IF9fX05SX2Ns
b2NrX2dldHRpbWUNCiAgICArY29uc3QgX01TR19UUllIQVJEID0gNA0KICAgICtjb25zdCBfUFJf
U0VUX01NX0FVWFYgPSAxMg0KICAgICtjb25zdCBfX1BPU0lYX1NZTkNIUk9OSVpFRF9JTyA9IDIw
MDgwOQ0KICAgICtjb25zdCBfU1lTX2Nsb3NlID0gX19fTlJfY2xvc2UNCiAgICArY29uc3QgX1BS
X1NFVF9VTkFMSUdOID0gNg0KICAgICtjb25zdCBfU1lTX2JyayA9IF9fX05SX2Jyaw0KICAgICtj
b25zdCBfX05TSUcgPSAoX19fU0lHUlRNQVggKyAxKQ0KICAgICtjb25zdCBfX1BPU0lYX0ZEX1NF
VFNJWkUgPSBfX1BPU0lYX09QRU5fTUFYDQogICAgK2NvbnN0IF9FTk9UVFkgPSAyNQ0KICAgICtj
b25zdCBfUlRBX1BSSU9SSVRZID0gNg0KICAgICtjb25zdCBfRVRIX1BfTEFUID0gMHg2MDA0DQog
ICAgK2NvbnN0IF9GRklfTkFUSVZFX1JBV19BUEkgPSAwDQogICAgK2NvbnN0IF9QUl9HRVRfTk9f
TkVXX1BSSVZTID0gMzkNCiAgICArY29uc3QgX0ZQRV9GTFRSRVMgPSA2DQogICAgK2NvbnN0IF9G
U19SRVNFUlZFRF9GTCA9IDB4ODAwMDAwMDANCiAgICArY29uc3QgX0ZTX1hGTEFHX0NPV0VYVFNJ
WkUgPSAweDAwMDEwMDAwDQogICAgK2NvbnN0IF9FUE9MTE9VVCA9IDQNCiAgICArY29uc3QgX1ND
TV9UWFRJTUUgPSBfU09fVFhUSU1FDQogICAgK2NvbnN0IF9BREpfVElNRUNPTlNUID0gMHgwMDIw
DQogICAgK2NvbnN0IF9WS0lMTCA9IDMNCiAgICArY29uc3QgX1JUTUdSUF9ERUNuZXRfUk9VVEUg
PSAweDQwMDANCiAgICArY29uc3QgX0FGX1FJUENSVFIgPSBfUEZfUUlQQ1JUUg0KICAgICtjb25z
dCBfU09fQUNDRVBUQ09OTiA9IDMwDQogICAgK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1RYX0RST1BQ
RUQgPSA4DQogICAgK2NvbnN0IF9SVE5MX0ZBTUlMWV9NQVggPSAxMjkNCiAgICArY29uc3QgX19Q
T1NJWF9USU1FUl9NQVggPSAzMg0KICAgICtjb25zdCBfX19OUl9ta25vZCA9IDEzMw0KICAgICtj
b25zdCBfUkVHX0VGTCA9IDE3DQogICAgK2NvbnN0IF9fX1NTRTJfXyA9IDENCiAgICArY29uc3Qg
X0lQX01VTFRJQ0FTVF9UVEwgPSAzMw0KICAgICtjb25zdCBfU09DS19TRVFQQUNLRVQgPSA1DQog
ICAgK2NvbnN0IF9fX1dBTEwgPSAweDQwMDAwMDAwDQogICAgK2NvbnN0IF9SVE1fREVMTURCID0g
ODUNCiAgICArY29uc3QgX0lMTF9JTExPUEMgPSAxDQogICAgK2NvbnN0IF9OTE1TR19FUlJPUiA9
IDB4Mg0KICAgICtjb25zdCBfUFJfR0VUX1RJRF9BRERSRVNTID0gNDANCiAgICArY29uc3QgX1NZ
U192bXNwbGljZSA9IF9fX05SX3Ztc3BsaWNlDQogICAgK2NvbnN0IF9UQ1BfU1lOQ05UID0gNw0K
ICAgICtjb25zdCBfUlRfU0NPUEVfU0lURSA9IDIwMA0KICAgICtjb25zdCBfU1lTX2V4ZWN2ZWF0
ID0gX19fTlJfZXhlY3ZlYXQNCiAgICArY29uc3QgX0lGQV9GX1RFTVBPUkFSWSA9IF9JRkFfRl9T
RUNPTkRBUlkNCiAgICArY29uc3QgX0NSRExZID0gMDAwMzAwMA0KICAgICtjb25zdCBfRVRIX1Bf
UFJFQVVUSCA9IDB4ODhDNw0KICAgICtjb25zdCBfX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwg
PSAxNDgNCiAgICArY29uc3QgX1JFR19SMTIgPSA0DQogICAgK2NvbnN0IF9JUFY2XzIyOTJQS1RJ
TkZPID0gMg0KICAgICtjb25zdCBfX19JT1ZfTUFYID0gMTAyNA0KICAgICtjb25zdCBfQUlfQUxM
ID0gMHgwMDEwDQogICAgK2NvbnN0IF9FVEhfUF9GQ09FID0gMHg4OTA2DQogICAgK2NvbnN0IF9J
RkxBX0NBUlJJRVIgPSAzMw0KICAgICtjb25zdCBfUlRBX05FV0RTVCA9IDE5DQogICAgK2NvbnN0
IF9fX05SX2FkanRpbWV4ID0gMTU5DQogICAgK2NvbnN0IF9CWVRFX09SREVSID0gX19fQllURV9P
UkRFUg0KICAgICtjb25zdCBfX19GTFRfREVOT1JNX01JTl9fID0gMS4xDQogICAgK2NvbnN0IF9F
Q0hPUFJUID0gMDAwMjAwMA0KICAgICtjb25zdCBfSUZMQV9STU5FVF9VTlNQRUMgPSAwDQogICAg
K2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJfQ0ZMQUdTID0gMTEzMg0KICAgICtjb25z
dCBfRl9TSExDSyA9IDgNCiAgICArY29uc3QgX0VUSU1FRE9VVCA9IDExMA0KICAgICtjb25zdCBf
X1NDX0ZJTEVfTE9DS0lORyA9IDE0Nw0KICAgICtjb25zdCBfTVNHX1BFRUsgPSAyDQogICAgK2Nv
bnN0IF9TWVNfbXN5bmMgPSBfX19OUl9tc3luYw0KICAgICtjb25zdCBfRVRIX1BfMTU4OCA9IDB4
ODhGNw0KICAgICtjb25zdCBfX1NDX1BBU1NfTUFYID0gODgNCiAgICArY29uc3QgX0lGTEFfSFNS
X1VOU1BFQyA9IDANCiAgICArY29uc3QgX0JDX1NUUklOR19NQVggPSBfX1BPU0lYMl9CQ19TVFJJ
TkdfTUFYDQogICAgK2NvbnN0IF9GTFVTSE8gPSAwMDEwMDAwDQogICAgK2NvbnN0IF9TWVNfbHN0
YXQgPSBfX19OUl9sc3RhdA0KICAgICtjb25zdCBfVElPQ01fUlRTID0gMHgwMDQNCiAgICArY29u
c3QgX0FSUEhSRF9JUkRBID0gNzgzDQogICAgK2NvbnN0IF9UQ1NCUktQID0gMHg1NDI1DQogICAg
K2NvbnN0IF9FUElQRSA9IDMyDQogICAgK2NvbnN0IF9fX0ZMVDMyWF9IQVNfREVOT1JNX18gPSAx
DQogICAgK2NvbnN0IF9fQklUU19VSU9fRVhUX0ggPSAxDQogICAgK2NvbnN0IF9JQ01QNl9SUl9G
TEFHU19URVNUID0gMHg4MA0KICAgICtjb25zdCBfU1lTX2FsYXJtID0gX19fTlJfYWxhcm0NCiAg
ICArY29uc3QgX0lGRl9UVU4gPSAweDAwMDENCiAgICArY29uc3QgX19fRU5VTV9JRFRZUEVfVCA9
IDENCiAgICArY29uc3QgX1BSX0ZQX01PREVfRlJFID0gKDEgPDwgMSkNCiAgICArY29uc3QgX01B
Q1NFQ19WQUxJREFURV9ESVNBQkxFRCA9IDANCiAgICArY29uc3QgX0lGTEFfR0VORVZFX1RUTCA9
IDMNCiAgICArY29uc3QgX0hBVkVfSU5PVElGWV9BRERfV0FUQ0ggPSAxDQogICAgK2NvbnN0IF9Q
UklYMTYgPSAiWCINCiAgICArY29uc3QgX19fRkxUX0VWQUxfTUVUSE9EX1RTXzE4NjYxXzNfXyA9
IDANCiAgICArY29uc3QgX05EX05BX0ZMQUdfUk9VVEVSID0gMHgwMDAwMDA4MA0KICAgICtjb25z
dCBfSVBWNl9SRUNWUEFUSE1UVSA9IDYwDQogICAgK2NvbnN0IF9NQURWX05PUk1BTCA9IDANCiAg
ICArY29uc3QgX0ZGSV9SRUdJU1RFUiA9IDcNCiAgICArY29uc3QgX1BSSWQzMiA9ICJkIg0KICAg
ICtjb25zdCBfTkxBX0ZfTkVUX0JZVEVPUkRFUiA9ICgxIDw8IDE0KQ0KICAgICtjb25zdCBfSEFW
RV9FWFBMID0gMQ0KICAgICtjb25zdCBfSVBfUkVUT1BUUyA9IDcNCiAgICArY29uc3QgX0lQX01V
TFRJQ0FTVF9JRiA9IDMyDQogICAgK2NvbnN0IF9FWFBSX05FU1RfTUFYID0gX19QT1NJWDJfRVhQ
Ul9ORVNUX01BWA0KICAgICtjb25zdCBfTl9QUFAgPSAzDQogICAgK2NvbnN0IF9fX0dMSUJDX0xJ
TlVYX1ZFUlNJT05fQ09ERSA9IDI2NzAwOA0KICAgICtjb25zdCBfRlNfTUFYX0tFWV9TSVpFID0g
NjQNCiAgICArY29uc3QgX1BGX0lORVQ2ID0gMTANCiAgICArY29uc3QgX1NZU19jaGRpciA9IF9f
X05SX2NoZGlyDQogICAgK2NvbnN0IF9QVFJBQ0VfRVZFTlRfVkZPUksgPSAyDQogICAgK2NvbnN0
IF9TT19SQ1ZUSU1FTyA9IDIwDQogICAgK2NvbnN0IF9fX05SX3RpbWVzID0gMTAwDQogICAgK2Nv
bnN0IF9fUE9TSVhfVUlPX01BWElPViA9IDE2DQogICAgK2NvbnN0IF9JRkxBX0JSX01DQVNUX1FV
RVJJRVJfSU5UVkwgPSAzMg0KICAgICtjb25zdCBfSVBfVE9TID0gMQ0KICAgICtjb25zdCBfX1ND
XzJfUEJTX0xPQ0FURSA9IDE3MA0KICAgICtjb25zdCBfTkxNU0dfTk9PUCA9IDB4MQ0KICAgICtj
b25zdCBfRlNfUE9MSUNZX0ZMQUdTX1BBRF8zMiA9IDB4MDMNCiAgICArY29uc3QgX0FSUERfVVBE
QVRFID0gMHgwMQ0KICAgICtjb25zdCBfX0NTX0xGU19MSU5URkxBR1MgPSAxMDAzDQogICAgK2Nv
bnN0IF9fSU9DX0RJUk1BU0sgPSAoKDEgPDwgX19JT0NfRElSQklUUyktMSkNCiAgICArY29uc3Qg
X1NZU19jYXBzZXQgPSBfX19OUl9jYXBzZXQNCiAgICArY29uc3QgX0lDTVA2X1JPVVRFUl9SRU5V
TUJFUklORyA9IDEzOA0KICAgICtjb25zdCBfSUxMX0lMTEFEUiA9IDMNCiAgICArY29uc3QgX19C
SVRTX1BPU0lYX09QVF9IID0gMQ0KICAgICtjb25zdCBfUFJfR0VUX0ZQRVhDID0gMTENCiAgICAr
Y29uc3QgX1BSX0NBUEJTRVRfUkVBRCA9IDIzDQogICAgK2NvbnN0IF9UQ1BfTUQ1U0lHID0gMTQN
CiAgICArY29uc3QgX0hBVkVfR0VUWEFUVFIgPSAxDQogICAgK2NvbnN0IF9SVE1fREVMUlVMRSA9
IDMzDQogICAgK2NvbnN0IF9SVE1fTkVXU1RBVFMgPSA5Mg0KICAgICtjb25zdCBfVENTQUZMVVNI
ID0gMg0KICAgICtjb25zdCBfSUZMQV9QT1JUX1ZGID0gMQ0KICAgICtjb25zdCBfX0JJVFNfU0NI
RURfSCA9IDENCiAgICArY29uc3QgX0lQVjZfUlRIRFJEU1RPUFRTID0gNTUNCiAgICArY29uc3Qg
X19fTlJfbWFkdmlzZSA9IDI4DQogICAgK2NvbnN0IF9QUl9TUEVDX0lORElSRUNUX0JSQU5DSCA9
IDENCiAgICArY29uc3QgX1g4Nl9DUjRfVFNEX0JJVCA9IDINCiAgICArY29uc3QgX0lGTEFfQlJf
TkZfQ0FMTF9JUDZUQUJMRVMgPSAzNw0KICAgICtjb25zdCBfUFRSQUNFX1RSQUNFTUUgPSAwDQog
ICAgK2NvbnN0IF9YODZfQ1IwX1BFX0JJVCA9IDANCiAgICArY29uc3QgX0ZGSV9DTE9TVVJFUyA9
IDENCiAgICArY29uc3QgX0lGQV9GX01BTkFHRVRFTVBBRERSID0gMHgxMDANCiAgICArY29uc3Qg
X1NJT0NBRERSVCA9IDB4ODkwQg0KICAgICtjb25zdCBfVENHRVRBID0gMHg1NDA1DQogICAgK2Nv
bnN0IF9JRkxBX01UVSA9IDQNCiAgICArY29uc3QgX0lGTEFfQlJfUk9PVF9QT1JUID0gMTINCiAg
ICArY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkZCSUdfTElOVEZMQUdTID0gMTEzOQ0KICAg
ICtjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9DT05EX1QgPSA0OA0KICAgICtjb25zdCBfX19TX0lG
SUZPID0gMDAxMDAwMA0KICAgICtjb25zdCBfX19QUkk2NF9QUkVGSVggPSAibCINCiAgICArY29u
c3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkYzMl9MSU5URkxBR1MgPSAxMTM1DQogICAgK2NvbnN0
IF9JRkxBX1BST01JU0NVSVRZID0gMzANCiAgICArY29uc3QgX1BSX1NFVF9DSElMRF9TVUJSRUFQ
RVIgPSAzNg0KICAgICtjb25zdCBfU0lHUElQRSA9IDEzDQogICAgK2NvbnN0IF9UQ0dFVFMgPSAw
eDU0MDENCiAgICArY29uc3QgX1NPTF9DQUlGID0gMjc4DQogICAgK2NvbnN0IF9JRkxBX0JSX01D
QVNUX01FTUJFUlNISVBfSU5UVkwgPSAzMQ0KICAgICtjb25zdCBfUlRGX1JFSU5TVEFURSA9IDB4
MDAwOA0KICAgICtjb25zdCBfVENHRVRYID0gMHg1NDMyDQogICAgK2NvbnN0IF9JRkxBX1BBRCA9
IDQyDQogICAgK2NvbnN0IF9FVEhfUF9ETkFfUkMgPSAweDYwMDINCiAgICArY29uc3QgX1JUTV9G
X0ZJQl9NQVRDSCA9IDB4MjAwMA0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfVkxBTl9UVU5ORUwg
PSAyOQ0KICAgICtjb25zdCBfUFJPVF9SRUFEID0gMHgxDQogICAgK2NvbnN0IF9QUl9TUEVDX0RJ
U0FCTEUgPSAoMSA8PCAyKQ0KICAgICtjb25zdCBfUFRSQUNFX1NFSVpFID0gMTY5MDINCiAgICAr
Y29uc3QgX1JURl9DQUNIRSA9IDB4MDEwMDAwMDANCiAgICArY29uc3QgX19fREVDMTI4X01JTl9f
ID0gMUUtNjE0Mw0KICAgICtjb25zdCBfSUNNUDZfRUNIT19SRVFVRVNUID0gMTI4DQogICAgK2Nv
bnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzI1Nl9HQ00gPSAyDQogICAgK2NvbnN0IF9fU1lT
X1RZUEVTX0ggPSAxDQogICAgK2NvbnN0IF9FVEhfUF9ETkFfUlQgPSAweDYwMDMNCiAgICArY29u
c3QgX19TQ19NRU1MT0NLID0gMTcNCiAgICArY29uc3QgX1NZU19maW5pdF9tb2R1bGUgPSBfX19O
Ul9maW5pdF9tb2R1bGUNCiAgICArY29uc3QgX0JQRl9BID0gMHgxMA0KICAgICtjb25zdCBfQlBG
X0IgPSAweDEwDQogICAgK2NvbnN0IF9QRl9JTkVUID0gMg0KICAgICtjb25zdCBfU1lTX3J0X3Np
Z3Byb2NtYXNrID0gX19fTlJfcnRfc2lncHJvY21hc2sNCiAgICArY29uc3QgX1NJR19BVE9NSUNf
TUlOID0gKC0yMTQ3NDgzNjQ3LTEpDQogICAgK2NvbnN0IF9fX0dDQ19IQVZFX1NZTkNfQ09NUEFS
RV9BTkRfU1dBUF8yID0gMQ0KICAgICtjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5E
X1NXQVBfNCA9IDENCiAgICArY29uc3QgX1NJT0NHSUZGTEFHUyA9IDB4ODkxMw0KICAgICtjb25z
dCBfUkVHX1I4ID0gMA0KICAgICtjb25zdCBfX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NX
QVBfOCA9IDENCiAgICArY29uc3QgX0ZTX0FQUEVORF9GTCA9IDB4MDAwMDAwMjANCiAgICArY29u
c3QgX1JUQVhfQ1dORCA9IDcNCiAgICArY29uc3QgX19QT1NJWDJfQ19CSU5EID0gX19fUE9TSVgy
X1RISVNfVkVSU0lPTg0KICAgICtjb25zdCBfX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgPSAxDQog
ICAgK2NvbnN0IF9CUEZfVyA9IDB4MDANCiAgICArY29uc3QgX0JQRl9YID0gMHgwOA0KICAgICtj
b25zdCBfUldIX1dSSVRFX0xJRkVfTE9ORyA9IDQNCiAgICArY29uc3QgX19fR0NDX0hBVkVfRFdB
UkYyX0NGSV9BU00gPSAxDQogICAgK2NvbnN0IF9UQ1BPTEVOX1RJTUVTVEFNUCA9IDEwDQogICAg
K2NvbnN0IF9FVEhfUF9DQUlGID0gMHgwMEY3DQogICAgK2NvbnN0IF9OREFfUE9SVCA9IDYNCiAg
ICArY29uc3QgX0VQT0xMUkRIVVAgPSA4MTkyDQogICAgK2NvbnN0IF9fX0ZMVDEyOF9NQVhfXyA9
IDEuMQ0KICAgICtjb25zdCBfVElPQ1NSUzQ4NSA9IDB4NTQyRg0KICAgICtjb25zdCBfX19JRkxB
X0lORVRfTUFYID0gMg0KICAgICtjb25zdCBfUlRBWF9JTklUUldORCA9IDE0DQogICAgK2NvbnN0
IF9fQklUU19UWVBFU19MT0NBTEVfVF9IID0gMQ0KICAgICtjb25zdCBfX19MREJMX0RFQ0lNQUxf
RElHX18gPSAyMQ0KICAgICtjb25zdCBfSEFWRV9BVEFOTCA9IDENCiAgICArY29uc3QgX1hEUF9B
VFRBQ0hFRF9EUlYgPSAxDQogICAgK2NvbnN0IF9fX0FUT01JQ19DT05TVU1FID0gMQ0KICAgICtj
b25zdCBfX19OUl9tc2dnZXQgPSA2OA0KICAgICtjb25zdCBfX19OUl9nZXRzb2Nrb3B0ID0gNTUN
CiAgICArY29uc3QgX1BUUkRJRkZfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEpDQogICAg
K2NvbnN0IF9XSU5UX1dJRFRIID0gMzINCiAgICArY29uc3QgX05FVExJTktfRVhUX0FDSyA9IDEx
DQogICAgK2NvbnN0IF9TQ051OCA9ICJoaHUiDQogICAgK2NvbnN0IF9fU0NfVEhSRUFEX1JPQlVT
VF9QUklPX0lOSEVSSVQgPSAyNDcNCiAgICArY29uc3QgX0lQX1JFQ1ZUT1MgPSAxMw0KICAgICtj
b25zdCBfTkRUUEFfSUZJTkRFWCA9IDENCiAgICArY29uc3QgX0VUSF9UTEVOID0gMg0KICAgICtj
b25zdCBfQUlfQ0FOT05OQU1FID0gMHgwMDAyDQogICAgK2NvbnN0IF9fX05SX21sb2NrYWxsID0g
MTUxDQogICAgK2NvbnN0IF9TS0ZfQURfSEFUWVBFID0gMjgNCiAgICArY29uc3QgX19fTlJfcGlw
ZTIgPSAyOTMNCiAgICArY29uc3QgX1BUUkFDRV9ERVRBQ0ggPSAxNw0KICAgICtjb25zdCBfU1lT
X3NpZ25hbGZkID0gX19fTlJfc2lnbmFsZmQNCiAgICArY29uc3QgX19DU19YQlM1X0xQQklHX09G
RkJJR19MREZMQUdTID0gMTExMw0KICAgICtjb25zdCBfSVBWNl9ORVhUSE9QID0gOQ0KICAgICtj
b25zdCBfUlRDRl9ET1JFRElSRUNUID0gMHgwMTAwMDAwMA0KICAgICtjb25zdCBfTkRBX0lGSU5E
RVggPSA4DQogICAgK2NvbnN0IF9fU0NfUElJID0gNTMNCiAgICArY29uc3QgX0FGX0FUTVNWQyA9
IF9QRl9BVE1TVkMNCiAgICArY29uc3QgX1BGX1BBQ0tFVCA9IDE3DQogICAgK2NvbnN0IF9TWVNf
ZnV0aW1lc2F0ID0gX19fTlJfZnV0aW1lc2F0DQogICAgK2NvbnN0IF9JUFRPU19QUkVDX0ZMQVNI
ID0gX0lQVE9TX0NMQVNTX0NTMw0KICAgICtjb25zdCBfQVJQSFJEX0lQR1JFID0gNzc4DQogICAg
K2NvbnN0IF9fU0NfU0hFTEwgPSAxNTcNCiAgICArY29uc3QgX0hBVkVfTE9HTCA9IDENCiAgICAr
Y29uc3QgX1BPUlRfVkRQX1JFU1BPTlNFX0lOVkFMSURfRk9STUFUID0gMQ0KICAgICtjb25zdCBf
X19VU0VfUE9TSVgyID0gMQ0KICAgICtjb25zdCBfRU5PTUVNID0gMTINCiAgICArY29uc3QgX1hE
UF9BVFRBQ0hFRF9TS0IgPSAyDQogICAgK2NvbnN0IF9JTl9DTEFTU0FfTkVUID0gMHhmZjAwMDAw
MA0KICAgICtjb25zdCBfRVNSTU5UID0gNjkNCiAgICArY29uc3QgX0lQVjZfTEVBVkVfQU5ZQ0FT
VCA9IDI4DQogICAgK2NvbnN0IF9FTk9URU1QVFkgPSAzOQ0KICAgICtjb25zdCBfUFRSQUNFX0dF
VFNJR0lORk8gPSAxNjg5OA0KICAgICtjb25zdCBfX0lPQ19OUkJJVFMgPSA4DQogICAgK2NvbnN0
IF9QSVBFX0JVRiA9IDQwOTYNCiAgICArY29uc3QgX0FGX0lTRE4gPSBfUEZfSVNETg0KICAgICtj
b25zdCBfVUxPTkdfTE9OR19NQVggPSAoX0xPTkdfTE9OR19NQVggKiAyICsgMSkNCiAgICArY29u
c3QgX0xJTktfWFNUQVRTX1RZUEVfVU5TUEVDID0gMA0KICAgICtjb25zdCBfTkRUQV9OQU1FID0g
MQ0KICAgICtjb25zdCBfUlRBX1BSRUYgPSAyMA0KICAgICtjb25zdCBfQVJQSFJEX05PTkUgPSAw
eEZGRkUNCiAgICArY29uc3QgX1NZU19nZXRzb2NrbmFtZSA9IF9fX05SX2dldHNvY2tuYW1lDQog
ICAgK2NvbnN0IF9FQ0hPQ1RMID0gMDAwMTAwMA0KICAgICtjb25zdCBfUlROTEdSUF9JUFY0X1JV
TEUgPSA4DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfQURfSU5GTyA9IDIzDQogICAgK2NvbnN0IF9J
RkxBX0JSX1VOU1BFQyA9IDANCiAgICArY29uc3QgX0lGTEFfSUZfTkVUTlNJRCA9IDQ2DQogICAg
K2NvbnN0IF9PX1BBVEggPSBfX19PX1BBVEgNCiAgICArY29uc3QgX1g4Nl9DUjNfUENJRF9OT0ZM
VVNIX0JJVCA9IDYzDQogICAgK2NvbnN0IF9TWVNfc2NoZWRfZ2V0cGFyYW0gPSBfX19OUl9zY2hl
ZF9nZXRwYXJhbQ0KICAgICtjb25zdCBfUFJfU0VUX05PX05FV19QUklWUyA9IDM4DQogICAgK2Nv
bnN0IF9JRkxBX0JPTkRfQURfSU5GT19VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9SVEZfRkxPVyA9
IDB4MDIwMDAwMDANCiAgICArY29uc3QgX1NZU19zZXRfbWVtcG9saWN5ID0gX19fTlJfc2V0X21l
bXBvbGljeQ0KICAgICtjb25zdCBfV0NPTlRJTlVFRCA9IDgNCiAgICArY29uc3QgX19fSUZMQV9C
T05EX01BWCA9IDI4DQogICAgK2NvbnN0IF9JRkZfTk9GSUxURVIgPSAweDEwMDANCiAgICArY29u
c3QgX19fdGltZV90X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9JRkxBX05FV19ORVROU0lEID0g
NDUNCiAgICArY29uc3QgX0I2MDAgPSAwMDAwMDEwDQogICAgK2NvbnN0IF9BUlBIUkRfQklGID0g
Nzc1DQogICAgK2NvbnN0IF9PX0RTWU5DID0gX19fT19EU1lOQw0KICAgICtjb25zdCBfX19OUl9t
c2dyY3YgPSA3MA0KICAgICtjb25zdCBfUlRQUk9UX1JBID0gOQ0KICAgICtjb25zdCBfSUZMQV9W
UkZfVU5TUEVDID0gMA0KICAgICtjb25zdCBfUFJfU1BFQ19OT1RfQUZGRUNURUQgPSAwDQogICAg
K2NvbnN0IF9OTE1fRl9EVU1QX0ZJTFRFUkVEID0gMHgyMA0KICAgICtjb25zdCBfSUZMQV9WTEFO
X1FPU19VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9fU0NfREVWSUNFX0lPID0gMTQwDQogICAgK2Nv
bnN0IF9JRkxBX0lQT0lCX1VNQ0FTVCA9IDMNCiAgICArY29uc3QgX1NDSEVEX1JSID0gMg0KICAg
ICtjb25zdCBfUFJJbzggPSAibyINCiAgICArY29uc3QgX19MRlNfQVNZTkNIUk9OT1VTX0lPID0g
MQ0KICAgICtjb25zdCBfSUZMQV9QT1JUX1JFUVVFU1QgPSA2DQogICAgK2NvbnN0IF9JRkxBX0JP
TkRfQURfSU5GT19BR0dSRUdBVE9SID0gMQ0KICAgICtjb25zdCBfUEFDS0VUX0xPT1BCQUNLID0g
NQ0KICAgICtjb25zdCBfU1lTX2ZkYXRhc3luYyA9IF9fX05SX2ZkYXRhc3luYw0KICAgICtjb25z
dCBfU0lPQ0dJRk1BUCA9IDB4ODk3MA0KICAgICtjb25zdCBfX19HQ0NfQVNNX0ZMQUdfT1VUUFVU
U19fID0gMQ0KICAgICtjb25zdCBfX19JRkxBX0JPTkRfU0xBVkVfTUFYID0gOQ0KICAgICtjb25z
dCBfU0lPQ1NBUlAgPSAweDg5NTUNCiAgICArY29uc3QgX1NZU19wcmxpbWl0NjQgPSBfX19OUl9w
cmxpbWl0NjQNCiAgICArY29uc3QgX19fREVDMzJfTUlOX18gPSAxRS05NQ0KICAgICtjb25zdCBf
TkxNX0ZfUkVQTEFDRSA9IDB4MTAwDQogICAgK2NvbnN0IF9USU9DT1VUUSA9IDB4NTQxMQ0KICAg
ICtjb25zdCBfSUZBX0NBQ0hFSU5GTyA9IDYNCiAgICArY29uc3QgX1NZTkNfRklMRV9SQU5HRV9X
QUlUX0JFRk9SRSA9IDENCiAgICArY29uc3QgX1NUQVRYX0JMT0NLUyA9IDB4MDQwMA0KICAgICtj
b25zdCBfUFJfRlBfRVhDX1VORCA9IDB4MDQwMDAwDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX0dQ
RSA9IDI3DQogICAgK2NvbnN0IF9QQUNLQUdFX0JVR1JFUE9SVCA9ICIiDQogICAgK2NvbnN0IF9J
UFY2XzIyOTJEU1RPUFRTID0gNA0KICAgICtjb25zdCBfSUZMQV9FWFRfTUFTSyA9IDI5DQogICAg
K2NvbnN0IF9fX0FUT01JQ19ITEVfQUNRVUlSRSA9IDY1NTM2DQogICAgK2NvbnN0IF9TWVNfdGlt
ZXJmZF9zZXR0aW1lID0gX19fTlJfdGltZXJmZF9zZXR0aW1lDQogICAgK2NvbnN0IF9fX2xpbnV4
X18gPSAxDQogICAgK2NvbnN0IF9QT1NJWF9GQURWX1JBTkRPTSA9IDENCiAgICArY29uc3QgX1BS
SWlMRUFTVDE2ID0gImkiDQogICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9DT0xMRUNUX01FVEFEQVRB
ID0gNg0KICAgICtjb25zdCBfX19VU0VfSVNPQzk1ID0gMQ0KICAgICtjb25zdCBfX0hBVkVfU1RS
VUNUX1RFUk1JT1NfQ19PU1BFRUQgPSAxDQogICAgK2NvbnN0IF9PX05PRk9MTE9XID0gX19fT19O
T0ZPTExPVw0KICAgICtjb25zdCBfTkRBX0xJTktfTkVUTlNJRCA9IDEwDQogICAgK2NvbnN0IF9f
X1VTRV9JU09DOTkgPSAxDQogICAgK2NvbnN0IF9SVEZfTVNTID0gX1JURl9NVFUNCiAgICArY29u
c3QgX19CSVRTX1NURElOVF9VSU5UTl9IID0gMQ0KICAgICtjb25zdCBfRl9PRkRfU0VUTEtXID0g
MzgNCiAgICArY29uc3QgX1JUQV9FTkNBUCA9IDIyDQogICAgK2NvbnN0IF9FRVhJU1QgPSAxNw0K
ICAgICtjb25zdCBfUEFDS0VUX1ZFUlNJT04gPSAxMA0KICAgICtjb25zdCBfVENQX0NMT1NFID0g
Nw0KICAgICtjb25zdCBfU09fQVRUQUNIX0JQRiA9IDUwDQogICAgK2NvbnN0IF9QVFJBQ0VfRVZF
TlRfU0VDQ09NUCA9IDcNCiAgICArY29uc3QgX0FSUEhSRF9DSEFPUyA9IDUNCiAgICArY29uc3Qg
X19fRkxUMzJfTUFOVF9ESUdfXyA9IDI0DQogICAgK2NvbnN0IF9fX0lGTEFfVkZfSU5GT19NQVgg
PSAyDQogICAgK2NvbnN0IF9FVEhfUF9CQVRNQU4gPSAweDQzMDUNCiAgICArY29uc3QgX19TVEFU
X1ZFUiA9IF9fU1RBVF9WRVJfTElOVVgNCiAgICArY29uc3QgX1BPTExfTVNHID0gMw0KICAgICtj
b25zdCBfU1lTX3N3YXBvbiA9IF9fX05SX3N3YXBvbg0KICAgICtjb25zdCBfUlRGX0FERFJDT05G
ID0gMHgwMDA0MDAwMA0KICAgICtjb25zdCBfX19MREJMX0hBU19RVUlFVF9OQU5fXyA9IDENCiAg
ICArY29uc3QgX1BGX01QTFMgPSAyOA0KICAgICtjb25zdCBfX0JJVFNfU0lHSU5GT19BUkNIX0gg
PSAxDQogICAgK2NvbnN0IF9JQ01QNl9GSUxURVJfUEFTU09OTFkgPSA0DQogICAgK2NvbnN0IF9J
UF9UVEwgPSAyDQogICAgK2NvbnN0IF9TWVNfcnRfc2lncXVldWVpbmZvID0gX19fTlJfcnRfc2ln
cXVldWVpbmZvDQogICAgK2NvbnN0IF9fU0NfWE9QRU5fRU5IX0kxOE4gPSA5Mw0KICAgICtjb25z
dCBfX19OUl90aW1lcl9zZXR0aW1lID0gMjIzDQogICAgK2NvbnN0IF9QVFJBQ0VfT19TVVNQRU5E
X1NFQ0NPTVAgPSAyMDk3MTUyDQogICAgK2NvbnN0IF9TWVNfZ2V0cG1zZyA9IF9fX05SX2dldHBt
c2cNCiAgICArY29uc3QgX19TWVNfUkVTT1VSQ0VfSCA9IDENCiAgICArY29uc3QgX0RFRkZJTEVN
T0RFID0gKF9TX0lSVVNSfF9TX0lXVVNSfF9TX0lSR1JQfF9TX0lXR1JQfF9TX0lST1RIfF9TX0lX
T1RIKQ0KICAgICtjb25zdCBfUlRBX0RTVCA9IDENCiAgICArY29uc3QgX19fU1REQ19JRUNfNTU5
X18gPSAxDQogICAgK2NvbnN0IF9TWVNfYXJjaF9wcmN0bCA9IF9fX05SX2FyY2hfcHJjdGwNCiAg
ICArY29uc3QgX0FGX05FVFJPTSA9IF9QRl9ORVRST00NCiAgICArY29uc3QgX0lQVE9TX1RIUk9V
R0hQVVQgPSAweDA4DQogICAgK2NvbnN0IF9ORFRBX1RIUkVTSDIgPSAzDQogICAgK2NvbnN0IF9D
TE9DS19CT09UVElNRV9BTEFSTSA9IDkNCiAgICArY29uc3QgX0lGTEFfTUFDVkxBTl9NT0RFID0g
MQ0KICAgICtjb25zdCBfU19JV1JJVEUgPSBfU19JV1VTUg0KICAgICtjb25zdCBfSUNNUDZfUEFS
QU1QUk9CX09QVElPTiA9IDINCiAgICArY29uc3QgX19DU19QT1NJWF9WNl9MUDY0X09GRjY0X0NG
TEFHUyA9IDExMjQNCiAgICArY29uc3QgX0VUSF9QX1RSXzgwMl8yID0gMHgwMDExDQogICAgK2Nv
bnN0IF9USU9DTV9EVFIgPSAweDAwMg0KICAgICtjb25zdCBfX1NDX1VTRVJfR1JPVVBTX1IgPSAx
NjcNCiAgICArY29uc3QgX0VUSF9QX0FMTCA9IDB4MDAwMw0KICAgICtjb25zdCBfU1lTX2ZjaG93
biA9IF9fX05SX2ZjaG93bg0KICAgICtjb25zdCBfSVBQT1JUX1NZU1RBVCA9IDExDQogICAgK2Nv
bnN0IF9fX0xPTkdfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYNCiAgICArY29uc3QgX1NJR1NU
S0ZMVCA9IDE2DQogICAgK2NvbnN0IF9SVEZfTU9ESUZJRUQgPSAweDAwMjANCiAgICArY29uc3Qg
X1BSSU9fUFJPQ0VTUyA9IDANCiAgICArY29uc3QgX19fTlJfc2VtZ2V0ID0gNjQNCiAgICArY29u
c3QgX0lGQV9GX1NUQUJMRV9QUklWQUNZID0gMHg4MDANCiAgICArY29uc3QgX1JUTkhfQ09NUEFS
RV9NQVNLID0gKF9SVE5IX0ZfREVBRCB8IF9SVE5IX0ZfTElOS0RPV04gfCBfUlROSF9GX09GRkxP
QUQpDQogICAgK2NvbnN0IF9OTE1fRl9BQ0tfVExWUyA9IDB4MjAwDQogICAgK2NvbnN0IF9MX0lO
Q1IgPSAxDQogICAgK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9TSE9SVCA9IDINCiAgICArY29uc3Qg
X0VBRk5PU1VQUE9SVCA9IDk3DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfQURfTEFDUF9SQVRFID0g
MjENCiAgICArY29uc3QgX1NZU19zZWxlY3QgPSBfX19OUl9zZWxlY3QNCiAgICArY29uc3QgX0lG
TEFfVFVOX05VTV9RVUVVRVMgPSA4DQogICAgK2NvbnN0IF9fX1NJX01BWF9TSVpFID0gMTI4DQog
ICAgK2NvbnN0IF9JRkxBX0NPU1QgPSA4DQogICAgK2NvbnN0IF9OTE1TR19ET05FID0gMHgzDQog
ICAgK2NvbnN0IF9fX05SX3N0YXRmcyA9IDEzNw0KICAgICtjb25zdCBfX19GX0dFVE9XTl9FWCA9
IDE2DQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJQlMgPSAxMTIyDQog
ICAgK2NvbnN0IF9fX05SX2dldGRlbnRzNjQgPSAyMTcNCiAgICArY29uc3QgX0hBVkVfSU5PVElG
WV9JTklUMSA9IDENCiAgICArY29uc3QgX0FJX1Y0TUFQUEVEID0gMHgwMDA4DQogICAgK2NvbnN0
IF9TQ051RkFTVDggPSAiaGh1Ig0KICAgICtjb25zdCBfX19OUl9lcG9sbF9jdGwgPSAyMzMNCiAg
ICArY29uc3QgX0FDQ0VTU1BFUk1TID0gKF9TX0lSV1hVfF9TX0lSV1hHfF9TX0lSV1hPKQ0KICAg
ICtjb25zdCBfVENBX0RVTVBfSU5WSVNJQkxFID0gMTANCiAgICArY29uc3QgX1NJR0VWX1RIUkVB
RF9JRCA9IDQNCiAgICArY29uc3QgX0ZGSV9UWVBFX0lOVCA9IDENCiAgICArY29uc3QgX05MX0FS
R01BWCA9IF9fUE9TSVhfQVJHX01BWA0KICAgICtjb25zdCBfU1NfRElTQUJMRSA9IDINCiAgICAr
Y29uc3QgX0VUSF9QX0NBTiA9IDB4MDAwQw0KICAgICtjb25zdCBfX19TSVpFT0ZfUFRIUkVBRF9C
QVJSSUVSQVRUUl9UID0gNA0KICAgICtjb25zdCBfX19GTFRfRVZBTF9NRVRIT0RfXyA9IDANCiAg
ICArY29uc3QgX19fTlJfc2Vtb3AgPSA2NQ0KICAgICtjb25zdCBfUF9BTEwgPSAwDQogICAgK2Nv
bnN0IF9FVEhfUF9NUExTX01DID0gMHg4ODQ4DQogICAgK2NvbnN0IF9fX05SX3B3cml0ZXYyID0g
MzI4DQogICAgK2NvbnN0IF9TWVNfYWNjZXB0NCA9IF9fX05SX2FjY2VwdDQNCiAgICArY29uc3Qg
X19fU0laRU9GX1BUUkRJRkZfVF9fID0gOA0KICAgICtjb25zdCBfX19GTFQzMlhfREVOT1JNX01J
Tl9fID0gMS4xDQogICAgK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfUVVFVUVfSUQgPSA1DQogICAg
K2NvbnN0IF9SVFBST1RfWE9SUCA9IDE0DQogICAgK2NvbnN0IF9TWVNfcHJvY2Vzc192bV93cml0
ZXYgPSBfX19OUl9wcm9jZXNzX3ZtX3dyaXRldg0KICAgICtjb25zdCBfX19UQ0FfUk9PVF9NQVgg
PSA1DQogICAgK2NvbnN0IF9JRkxBX09QRVJTVEFURSA9IDE2DQogICAgK2NvbnN0IF9JQ01QNl9S
Ul9QQ09VU0VfRkxBR1NfREVDUlBMVElNRSA9IDB4NDANCiAgICArY29uc3QgX05EVFBBX1BST1hZ
X0RFTEFZID0gMTMNCiAgICArY29uc3QgX19fUkxJTUlUX05QUk9DID0gNg0KICAgICtjb25zdCBf
U1lTX3F1b3RhY3RsID0gX19fTlJfcXVvdGFjdGwNCiAgICArY29uc3QgX19JT0NfTk9ORSA9IDAN
CiAgICArY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9NSUlfU1RBVFVTID0gMg0KICAgICtjb25zdCBf
U09fU0VDVVJJVFlfRU5DUllQVElPTl9UUkFOU1BPUlQgPSAyMw0KICAgICtjb25zdCBfU1RBVFhf
TU9ERSA9IDB4MDAwMg0KICAgICtjb25zdCBfRkZJX1RZUEVfVUlOVDggPSA1DQogICAgK2NvbnN0
IF9QUk9UX0dST1dTRE9XTiA9IDB4MDEwMDAwMDANCiAgICArY29uc3QgX01BUF9HUk9XU0RPV04g
PSAweDAwMTAwDQogICAgK2NvbnN0IF9FQkFETVNHID0gNzQNCiAgICArY29uc3QgX01BUF9QT1BV
TEFURSA9IDB4MDgwMDANCiAgICArY29uc3QgX1RJTUVfREVMID0gMg0KICAgICtjb25zdCBfX19G
X1NFVE9XTiA9IDgNCiAgICArY29uc3QgX1VJTlQxNl9NQVggPSAoNjU1MzUpDQogICAgK2NvbnN0
IF9OTF9MQU5HTUFYID0gX19QT1NJWDJfTElORV9NQVgNCiAgICArY29uc3QgX01TX0xBWllUSU1F
ID0gMzM1NTQ0MzINCiAgICArY29uc3QgX1NZU19ta2RpciA9IF9fX05SX21rZGlyDQogICAgK2Nv
bnN0IF9JRkxBX01BQ1NFQ19XSU5ET1cgPSA1DQogICAgK2NvbnN0IF9fX05SX2lvX2dldGV2ZW50
cyA9IDIwOA0KICAgICtjb25zdCBfRkZJX0RFRkFVTFRfQUJJID0gMg0KICAgICtjb25zdCBfU1lT
X3JlbmFtZSA9IF9fX05SX3JlbmFtZQ0KICAgICtjb25zdCBfRVRIX1BfRFNBID0gMHgwMDFCDQog
ICAgK2NvbnN0IF9QVFJBQ0VfU0VUX1RIUkVBRF9BUkVBID0gMjYNCiAgICArY29uc3QgX0lQX1JF
Q1ZUVEwgPSAxMg0KICAgICtjb25zdCBfWERQX0ZMQUdTX0hXX01PREUgPSAoMSA8PCAzKQ0KICAg
ICtjb25zdCBfTUFYX0hBTkRMRV9TWiA9IDEyOA0KICAgICtjb25zdCBfSUZGX0RFQlVHID0gNA0K
ICAgICtjb25zdCBfQUZfRUNPTkVUID0gX1BGX0VDT05FVA0KICAgICtjb25zdCBfVENBX1JBVEUg
PSA1DQogICAgK2NvbnN0IF9fWE9QRU5fRU5IX0kxOE4gPSAxDQogICAgK2NvbnN0IF9fU0NfMl9G
T1JUX1JVTiA9IDUwDQogICAgK2NvbnN0IF9OTE1TR0VSUl9BVFRSX0NPT0tJRSA9IDMNCiAgICAr
Y29uc3QgX19fTkRUUEFfTUFYID0gMTkNCiAgICArY29uc3QgX0lGTEFfTlVNX1ZGID0gMjENCiAg
ICArY29uc3QgX1JUQV9FWFBJUkVTID0gMjMNCiAgICArY29uc3QgX1BPTExfT1VUID0gMg0KICAg
ICtjb25zdCBfX0JJVFNfU1NfRkxBR1NfSCA9IDENCiAgICArY29uc3QgX0lQT1BUX05PUCA9IDEN
CiAgICArY29uc3QgX0lGTkFNU0laID0gX0lGX05BTUVTSVpFDQogICAgK2NvbnN0IF9TWVNfdmhh
bmd1cCA9IF9fX05SX3ZoYW5ndXANCiAgICArY29uc3QgX0ZTX0hVR0VfRklMRV9GTCA9IDB4MDAw
NDAwMDANCiAgICArY29uc3QgX1NJR1RSQVAgPSA1DQogICAgK2NvbnN0IF9fX0ZMVDEyOF9ESUdf
XyA9IDMzDQogICAgK2NvbnN0IF9TWVNfdGltZXJmZF9nZXR0aW1lID0gX19fTlJfdGltZXJmZF9n
ZXR0aW1lDQogICAgK2NvbnN0IF9CUEZfTEVOID0gMHg4MA0KICAgICtjb25zdCBfQklHX0VORElB
TiA9IF9fX0JJR19FTkRJQU4NCiAgICArY29uc3QgX1JUTUdSUF9JUFY0X1JPVVRFID0gMHg0MA0K
ICAgICtjb25zdCBfQjEwMDAwMDAgPSAwMDEwMDEwDQogICAgK2NvbnN0IF9TWVNfZ2V0Y3B1ID0g
X19fTlJfZ2V0Y3B1DQogICAgK2NvbnN0IF9fX05SX21xX3RpbWVkcmVjZWl2ZSA9IDI0Mw0KICAg
ICtjb25zdCBfX1BBVEhfTkVUV09SS1MgPSAiL2V0Yy9uZXR3b3JrcyINCiAgICArY29uc3QgX1VT
SU5HX1NQTElUX1NUQUNLID0gMQ0KICAgICtjb25zdCBfRkZJX1RZUEVfU0lOVDMyID0gMTANCiAg
ICArY29uc3QgX19fUkxJTUlUX09GSUxFID0gNw0KICAgICtjb25zdCBfSUZMQV9CUl9NQ0FTVF9R
VUVSWV9SRVNQT05TRV9JTlRWTCA9IDM0DQogICAgK2NvbnN0IF9TSU9DR0lGTUVNID0gMHg4OTFm
DQogICAgK2NvbnN0IF9JTlRfRkFTVDE2X1dJRFRIID0gX19fV09SRFNJWkUNCiAgICArY29uc3Qg
X0hBVkVfU1lTX1NFTEVDVF9IID0gMQ0KICAgICtjb25zdCBfT19XUk9OTFkgPSAwMQ0KICAgICtj
b25zdCBfX19OUl9wcmVhZHYgPSAyOTUNCiAgICArY29uc3QgX1NZU19hY2N0ID0gX19fTlJfYWNj
dA0KICAgICtjb25zdCBfRE5fUkVOQU1FID0gMHgwMDAwMDAxMA0KICAgICtjb25zdCBfU1lTX3Nl
dHJldWlkID0gX19fTlJfc2V0cmV1aWQNCiAgICArY29uc3QgX0lGTEFfWERQX0RSVl9QUk9HX0lE
ID0gNQ0KICAgICtjb25zdCBfRUFMUkVBRFkgPSAxMTQNCiAgICArY29uc3QgX05EVFBBX1FVRVVF
X0xFTiA9IDgNCiAgICArY29uc3QgX19fR0xJQkNfVVNFX0lFQ182MDU1OV9GVU5DU19FWFQgPSAx
DQogICAgK2NvbnN0IF9JTExfUFJWT1BDID0gNQ0KICAgICtjb25zdCBfVFVOR0VURkVBVFVSRVNf
dmFsID0gMjE0Nzc2NzUwMw0KICAgICtjb25zdCBfUlROTEdSUF9JUFY2X1JPVVRFID0gMTENCiAg
ICArY29uc3QgX19fTlJfdGltZXJfZ2V0dGltZSA9IDIyNA0KICAgICtjb25zdCBfRVRIX1BfQU9F
ID0gMHg4OEEyDQogICAgK2NvbnN0IF9fX05SX2dldGdyb3VwcyA9IDExNQ0KICAgICtjb25zdCBf
U1lTX3JzZXEgPSBfX19OUl9yc2VxDQogICAgK2NvbnN0IF9GSU9RU0laRSA9IDB4NTQ2MA0KICAg
ICtjb25zdCBfSVBPUFRfQ09OVFJPTCA9IDB4MDANCiAgICArY29uc3QgX19fU0lfRVJSTk9fVEhF
Tl9DT0RFID0gMQ0KICAgICtjb25zdCBfRlBFX0lOVERJViA9IDENCiAgICArY29uc3QgX01TX05P
QVRJTUUgPSAxMDI0DQogICAgK2NvbnN0IF9DWDg2X0RJUjAgPSAweGZlDQogICAgK2NvbnN0IF9f
X05SX3BlcmZfZXZlbnRfb3BlbiA9IDI5OA0KICAgICtjb25zdCBfRkZJX0JBRF9BQkkgPSAyDQog
ICAgK2NvbnN0IF9fX05SX2dldF9tZW1wb2xpY3kgPSAyMzkNCiAgICArY29uc3QgX01DTF9DVVJS
RU5UID0gMQ0KICAgICtjb25zdCBfSVBfWEZSTV9QT0xJQ1kgPSAxNw0KICAgICtjb25zdCBfX19T
SVpFT0ZfU0hPUlRfXyA9IDINCiAgICArY29uc3QgX1NZU19mc3RhdCA9IF9fX05SX2ZzdGF0DQog
ICAgK2NvbnN0IF9JRkxBX1ZGSU5GT19MSVNUID0gMjINCiAgICArY29uc3QgX1RDUF9GSU5fV0FJ
VDIgPSA1DQogICAgK2NvbnN0IF9fU0NfQ1BVVElNRSA9IDEzOA0KICAgICtjb25zdCBfVFVOX0Zf
VFNPX0VDTiA9IDB4MDgNCiAgICArY29uc3QgX19fV09SRFNJWkVfVElNRTY0X0NPTVBBVDMyID0g
MQ0KICAgICtjb25zdCBfSUZMQV9JTkZPX1VOU1BFQyA9IDANCiAgICArY29uc3QgX0VUSF9QX1hE
U0EgPSAweDAwRjgNCiAgICArY29uc3QgX0lQX1BNVFVESVNDID0gMTANCiAgICArY29uc3QgX0FU
X1JFTU9WRURJUiA9IDB4MjAwDQogICAgK2NvbnN0IF9USU9DU1dJTlNaID0gMHg1NDE0DQogICAg
K2NvbnN0IF9fX0ZMVDMyX0hBU19ERU5PUk1fXyA9IDENCiAgICArY29uc3QgX0ZTTEFCRUxfTUFY
ID0gMjU2DQogICAgK2NvbnN0IF9PX05PTkJMT0NLID0gMDQwMDANCiAgICArY29uc3QgX0ZfR0VU
X1NFQUxTID0gMTAzNA0KICAgICtjb25zdCBfUEFDS0VUX1RYX1JJTkcgPSAxMw0KICAgICtjb25z
dCBfVENQX01TU19ERUZBVUxUID0gNTM2DQogICAgK2NvbnN0IF9CQ19ESU1fTUFYID0gX19QT1NJ
WDJfQkNfRElNX01BWA0KICAgICtjb25zdCBfSVBPUFRfTFNSUiA9IDEzMQ0KICAgICtjb25zdCBf
X1NDX1Y3X0xQNjRfT0ZGNjQgPSAyMzkNCiAgICArY29uc3QgX1BSX0dFVF9QREVBVEhTSUcgPSAy
DQogICAgK2NvbnN0IF9TWVNfc3ltbGluayA9IF9fX05SX3N5bWxpbmsNCiAgICArY29uc3QgX19f
REVDNjRfTUFOVF9ESUdfXyA9IDE2DQogICAgK2NvbnN0IF9QT1JUX1NFTEZfVkYgPSAtMQ0KICAg
ICtjb25zdCBfX1NDX1NZTUxPT1BfTUFYID0gMTczDQogICAgK2NvbnN0IF9YRFBfRkxBR1NfVVBE
QVRFX0lGX05PRVhJU1QgPSAoMSA8PCAwKQ0KICAgICtjb25zdCBfTUFDVkxBTl9NQUNBRERSX0FE
RCA9IDANCiAgICArY29uc3QgX19HUlBfSCA9IDENCiAgICArY29uc3QgX19fTlJfZGVsZXRlX21v
ZHVsZSA9IDE3Ng0KICAgICtjb25zdCBfU1lTX3NlbmR0byA9IF9fX05SX3NlbmR0bw0KICAgICtj
b25zdCBfSUZMQV9WTEFOX1FPU19NQVBQSU5HID0gMQ0KICAgICtjb25zdCBfU0lHVEVSTSA9IDE1
DQogICAgK2NvbnN0IF9QUl9TVkVfR0VUX1ZMID0gNTENCiAgICArY29uc3QgX19DU19YQlM1X0xQ
QklHX09GRkJJR19MSUJTID0gMTExNA0KICAgICtjb25zdCBfSUZMQV9YRFBfSFdfUFJPR19JRCA9
IDcNCiAgICArY29uc3QgX19TWVNfVUNPTlRFWFRfSCA9IDENCiAgICArY29uc3QgX19fTlJfcmVh
ZGxpbmthdCA9IDI2Nw0KICAgICtjb25zdCBfSUZMQV9HVFBfVU5TUEVDID0gMA0KICAgICtjb25z
dCBfVkxORVhUID0gMTUNCiAgICArY29uc3QgX1BPU0lYX01BRFZfV0lMTE5FRUQgPSAzDQogICAg
K2NvbnN0IF9fX3J1c2FnZV9kZWZpbmVkID0gMQ0KICAgICtjb25zdCBfU1lTX3NlY3VyaXR5ID0g
X19fTlJfc2VjdXJpdHkNCiAgICArY29uc3QgX1g4Nl9DUjRfU01BUF9CSVQgPSAyMQ0KICAgICtj
b25zdCBfVFVOX0ZfVFNPNiA9IDB4MDQNCiAgICArY29uc3QgX0FGX0NBTiA9IF9QRl9DQU4NCiAg
ICArY29uc3QgX19fTlJfcnRfc2lncHJvY21hc2sgPSAxNA0KICAgICtjb25zdCBfSU5UX0xFQVNU
MTZfV0lEVEggPSAxNg0KICAgICtjb25zdCBfX19OUl9mbG9jayA9IDczDQogICAgK2NvbnN0IF9D
TE9ORV9QQVJFTlQgPSAweDAwMDA4MDAwDQogICAgK2NvbnN0IF9SVEFfQUxJR05UTyA9IDQNCiAg
ICArY29uc3QgX1BPU0lYX01BRFZfU0VRVUVOVElBTCA9IDINCiAgICArY29uc3QgX1NZU19zZXRo
b3N0bmFtZSA9IF9fX05SX3NldGhvc3RuYW1lDQogICAgK2NvbnN0IF9TWVNfdnNlcnZlciA9IF9f
X05SX3ZzZXJ2ZXINCiAgICArY29uc3QgX1g4Nl9FRkxBR1NfTlRfQklUID0gMTQNCiAgICArY29u
c3QgX01OVF9FWFBJUkUgPSA0DQogICAgK2NvbnN0IF9QRl9TTUMgPSA0Mw0KICAgICtjb25zdCBf
RUFJX05PTkFNRSA9IC0yDQogICAgK2NvbnN0IF9fX05SX3Jlc3RhcnRfc3lzY2FsbCA9IDIxOQ0K
ICAgICtjb25zdCBfX1NDX1RIUkVBRF9LRVlTX01BWCA9IDc0DQogICAgK2NvbnN0IF9JRkxBX0JS
X01DQVNUX1NUQVJUVVBfUVVFUllfSU5UVkwgPSAzNQ0KICAgICtjb25zdCBfSUNNUDZfSU5GT01T
R19NQVNLID0gMHg4MA0KICAgICtjb25zdCBfSVBPSUJfTU9ERV9DT05ORUNURUQgPSAxDQogICAg
K2NvbnN0IF9DTE9DQUwgPSAwMDA0MDAwDQogICAgK2NvbnN0IF9IQVZFX1NZU19VU0VSX0ggPSAx
DQogICAgK2NvbnN0IF9YODZfRUZMQUdTX0lPUExfQklUID0gMTINCiAgICArY29uc3QgX0lGTEFf
QlJQT1JUX1JPT1RfSUQgPSAxMw0KICAgICtjb25zdCBfVENTRVRBID0gMHg1NDA2DQogICAgK2Nv
bnN0IF9TWVNfcmVhZGFoZWFkID0gX19fTlJfcmVhZGFoZWFkDQogICAgK2NvbnN0IF9JRkxBX1NU
QVRTNjQgPSAyMw0KICAgICtjb25zdCBfX1NDX1VJTlRfTUFYID0gMTE2DQogICAgK2NvbnN0IF9Q
VFJBQ0VfUEVFS1NJR0lORk8gPSAxNjkwNQ0KICAgICtjb25zdCBfWDg2X0NSNF9WTUVfQklUID0g
MA0KICAgICtjb25zdCBfX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCA9IDENCiAgICArY29uc3QgX19f
VVNFX0xBUkdFRklMRSA9IDENCiAgICArY29uc3QgX19fU0laRV9NQVhfXyA9IDB4ZmZmZmZmZmZm
ZmZmZmZmZg0KICAgICtjb25zdCBfU0tGX0FEX0FMVV9YT1JfWCA9IDQwDQogICAgK2NvbnN0IF9f
SU5UVFlQRVNfSCA9IDENCiAgICArY29uc3QgX1JUTkhfRl9QRVJWQVNJVkUgPSAyDQogICAgK2Nv
bnN0IF9TT19USU1FU1RBTVAgPSAyOQ0KICAgICtjb25zdCBfUlRNU0dfT1ZFUlJVTiA9IF9OTE1T
R19PVkVSUlVODQogICAgK2NvbnN0IF9CVVNfTUNFRVJSX0FPID0gNQ0KICAgICtjb25zdCBfX19J
RkxBX01BQ1ZMQU5fTUFYID0gNw0KICAgICtjb25zdCBfSVBUT1NfRUNOX01BU0sgPSAweDAzDQog
ICAgK2NvbnN0IF9CVVNfTUNFRVJSX0FSID0gNA0KICAgICtjb25zdCBfQjUwMDAwMCA9IDAwMTAw
MDUNCiAgICArY29uc3QgX19fU1REQ19IT1NURURfXyA9IDENCiAgICArY29uc3QgX19fSU5UX0xF
QVNUMzJfV0lEVEhfXyA9IDMyDQogICAgK2NvbnN0IF9TSU9DU0lGTElOSyA9IDB4ODkxMQ0KICAg
ICtjb25zdCBfUkVOQU1FX0VYQ0hBTkdFID0gKDEgPDwgMSkNCiAgICArY29uc3QgX01BRFZfRE9G
T1JLID0gMTENCiAgICArY29uc3QgX19TQ19YQlM1X0xQNjRfT0ZGNjQgPSAxMjcNCiAgICArY29u
c3QgX19MQVJHRUZJTEU2NF9TT1VSQ0UgPSAxDQogICAgK2NvbnN0IF9TT19ET05UUk9VVEUgPSA1
DQogICAgK2NvbnN0IF9fU0NfVFJBQ0VfRVZFTlRfRklMVEVSID0gMTgyDQogICAgK2NvbnN0IF9G
X1NFQUxfV1JJVEUgPSAweDAwMDgNCiAgICArY29uc3QgX1NUREVSUl9GSUxFTk8gPSAyDQogICAg
K2NvbnN0IF9UQ1BfU0VORF9RVUVVRSA9IDINCiAgICArY29uc3QgX0lQVkxBTl9NT0RFX01BWCA9
IDMNCiAgICArY29uc3QgX19fT19OT0FUSU1FID0gMDEwMDAwMDANCiAgICArY29uc3QgX1BGX1NO
QSA9IDIyDQogICAgK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1JYX0RST1BQRUQgPSA3DQogICAgK2Nv
bnN0IF9TT19QQVNTU0VDID0gMzQNCiAgICArY29uc3QgX0lHTlBBUiA9IDAwMDAwMDQNCiAgICAr
Y29uc3QgX1NZU190aW1lID0gX19fTlJfdGltZQ0KICAgICtjb25zdCBfVENQX05PVFNFTlRfTE9X
QVQgPSAyNQ0KICAgICtjb25zdCBfSUZMQV9WWExBTl9HUk9VUCA9IDINCiAgICArY29uc3QgX05P
RkxTSCA9IDAwMDAyMDANCiAgICArY29uc3QgX1NPTF9EQ0NQID0gMjY5DQogICAgK2NvbnN0IF9T
WVNfc3lzbG9nID0gX19fTlJfc3lzbG9nDQogICAgK2NvbnN0IF9TWVNfaW9fZ2V0ZXZlbnRzID0g
X19fTlJfaW9fZ2V0ZXZlbnRzDQogICAgK2NvbnN0IF9SVE1fTkVXTURCID0gODQNCiAgICArY29u
c3QgX0lGTEFfSU5GT19TTEFWRV9LSU5EID0gNA0KICAgICtjb25zdCBfSUZMQV9WWExBTl9MMk1J
U1MgPSAxMw0KICAgICtjb25zdCBfX1NDX0xFVkVMM19DQUNIRV9TSVpFID0gMTk0DQogICAgK2Nv
bnN0IF9IQVZFX0xJTlVYX0lGX0FERFJfSCA9IDENCiAgICArY29uc3QgX09fQ1JFQVQgPSAwMTAw
DQogICAgK2NvbnN0IF9FTk9ERVYgPSAxOQ0KICAgICtjb25zdCBfX19GTFQzMl9IQVNfUVVJRVRf
TkFOX18gPSAxDQogICAgK2NvbnN0IF9USU9DR1BHUlBfdmFsID0gMjE1MTkNCiAgICArY29uc3Qg
X1NDTnVMRUFTVDE2ID0gImh1Ig0KICAgICtjb25zdCBfX19OUl9wb2xsID0gNw0KICAgICtjb25z
dCBfX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQgPSA4MA0KICAgICtjb25zdCBfR0FJX05PV0FJVCA9
IDENCiAgICArY29uc3QgX0lGQV9GX05PUFJFRklYUk9VVEUgPSAweDIwMA0KICAgICtjb25zdCBf
U1lTX3dyaXRlID0gX19fTlJfd3JpdGUNCiAgICArY29uc3QgX1NZU19mYW5vdGlmeV9pbml0ID0g
X19fTlJfZmFub3RpZnlfaW5pdA0KICAgICtjb25zdCBfRVRIX1BfQVJQID0gMHgwODA2DQogICAg
K2NvbnN0IF9fX05SX2lvcGwgPSAxNzINCiAgICArY29uc3QgX19fRkxUMzJYX01BWF9fID0gMS4x
DQogICAgK2NvbnN0IF9FQ0hPRSA9IDAwMDAwMjANCiAgICArY29uc3QgX0lQT1BUX1RTX1RTQU5E
QUREUiA9IDENCiAgICArY29uc3QgX1NPX1BFRVJDUkVEID0gMTcNCiAgICArY29uc3QgX0lGTEFf
QlJfSEVMTE9fVElNRSA9IDINCiAgICArY29uc3QgX0ZBTExPQ19GTF9DT0xMQVBTRV9SQU5HRSA9
IDB4MDgNCiAgICArY29uc3QgX19TQ18yX1BCU19DSEVDS1BPSU5UID0gMTc1DQogICAgK2NvbnN0
IF9FQ0hPSyA9IDAwMDAwNDANCiAgICArY29uc3QgX0lGTEFfSVBWTEFOX01PREUgPSAxDQogICAg
K2NvbnN0IF9JUFY2X0pPSU5fQU5ZQ0FTVCA9IDI3DQogICAgK2NvbnN0IF9FQUlfSU5QUk9HUkVT
UyA9IC0xMDANCiAgICArY29uc3QgX1JUTkhfQUxJR05UTyA9IDQNCiAgICArY29uc3QgX0lQT1BU
X1NJRCA9IF9JUE9QVF9TQVRJRA0KICAgICtjb25zdCBfX19GTFQzMl9NQVhfRVhQX18gPSAxMjgN
CiAgICArY29uc3QgX05EX09QVF9UQVJHRVRfTElOS0FERFIgPSAyDQogICAgK2NvbnN0IF9GX0dF
VF9GSUxFX1JXX0hJTlQgPSAxMDM3DQogICAgK2NvbnN0IF9GRklfRklSU1RfQUJJID0gMA0KICAg
ICtjb25zdCBfTkVUTElOS19FQ1JZUFRGUyA9IDE5DQogICAgK2NvbnN0IF9DWDg2X0dDUiA9IDB4
YjgNCiAgICArY29uc3QgX0lQX1JPVVRFUl9BTEVSVCA9IDUNCiAgICArY29uc3QgX19fTlJfc3Bs
aWNlID0gMjc1DQogICAgK2NvbnN0IF9USU9DU0NUVFlfdmFsID0gMjE1MTgNCiAgICArY29uc3Qg
X19fTlJfa2V5Y3RsID0gMjUwDQogICAgK2NvbnN0IF9NU19OT1NFQyA9ICgxPDwyOCkNCiAgICAr
Y29uc3QgX05MTV9GX0NBUFBFRCA9IDB4MTAwDQogICAgK2NvbnN0IF9fU0NfTkVUV09SS0lORyA9
IDE1Mg0KICAgICtjb25zdCBfX19BVE9NSUNfUkVMRUFTRSA9IDMNCiAgICArY29uc3QgX0lGTEFf
VkZfVU5TUEVDID0gMA0KICAgICtjb25zdCBfX19OUl9mY2htb2RhdCA9IDI2OA0KICAgICtjb25z
dCBfUlRGX0hPU1QgPSAweDAwMDQNCiAgICArY29uc3QgX0lGRl9QRVJTSVNUID0gMHgwODAwDQog
ICAgK2NvbnN0IF9GU19OT0NPTVBfRkwgPSAweDAwMDAwNDAwDQogICAgK2NvbnN0IF9TT19TRUNV
UklUWV9BVVRIRU5USUNBVElPTiA9IDIyDQogICAgK2NvbnN0IF9CUEZfSkVRID0gMHgxMA0KICAg
ICtjb25zdCBfRkZJX1RZUEVfVUlOVDMyID0gOQ0KICAgICtjb25zdCBfU1lTX2lub3RpZnlfYWRk
X3dhdGNoID0gX19fTlJfaW5vdGlmeV9hZGRfd2F0Y2gNCiAgICArY29uc3QgX1BPU0lYX01BRFZf
UkFORE9NID0gMQ0KICAgICtjb25zdCBfUlRGX01VTFRJQ0FTVCA9IDB4MjAwMDAwMDANCiAgICAr
Y29uc3QgX05UUF9BUEkgPSA0DQogICAgK2NvbnN0IF9JUFY2X01VTFRJQ0FTVF9JRiA9IDE3DQog
ICAgK2NvbnN0IF9TT19NQVhfUEFDSU5HX1JBVEUgPSA0Nw0KICAgICtjb25zdCBfSEFWRV9MT0cx
MEwgPSAxDQogICAgK2NvbnN0IF9JRkxBX1ZGX1JTU19RVUVSWV9FTiA9IDcNCiAgICArY29uc3Qg
X19fRkxUNjRfTUFYXzEwX0VYUF9fID0gMzA4DQogICAgK2NvbnN0IF9QVFJBQ0VfU1lTRU1VX1NJ
TkdMRVNURVAgPSAzMg0KICAgICtjb25zdCBfU1lTX2R1cCA9IF9fX05SX2R1cA0KICAgICtjb25z
dCBfQVJQSFJEX0lFRUU4MDIxNTRfUEhZID0gODA1DQogICAgK2NvbnN0IF9fX05SX2lvX3NldHVw
ID0gMjA2DQogICAgK2NvbnN0IF9JUE9QVF9TU1JSID0gMTM3DQogICAgK2NvbnN0IF9fRElSRU5U
X01BVENIRVNfRElSRU5UNjQgPSAxDQogICAgK2NvbnN0IF9QQUNLRVRfSE9TVCA9IDANCiAgICAr
Y29uc3QgX0FSUEhSRF9ETENJID0gMTUNCiAgICArY29uc3QgX0lGTEFfSU5FVDZfQ09ORiA9IDIN
CiAgICArY29uc3QgX0lGTEFfVkZfTElOS19TVEFURV9ESVNBQkxFID0gMg0KICAgICtjb25zdCBf
X19pdGltZXJzcGVjX2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9fX05SX3Bpdm90X3Jvb3QgPSAx
NTUNCiAgICArY29uc3QgX0ZTX0VOQ1JZUFRfRkwgPSAweDAwMDAwODAwDQogICAgK2NvbnN0IF9f
U1lTX1BSQ1RMX0ggPSAxDQogICAgK2NvbnN0IF9fX1JMSU1JVF9SVFBSSU8gPSAxNA0KICAgICtj
b25zdCBfQ0xPQ0tfTU9OT1RPTklDID0gMQ0KICAgICtjb25zdCBfX19VSU5UX0ZBU1QzMl9NQVhf
XyA9IDB4ZmZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBfTkVUTElOS19DUllQVE8gPSAyMQ0K
ICAgICtjb25zdCBfRVRIX1BfRklQID0gMHg4OTE0DQogICAgK2NvbnN0IF9PQ1JOTCA9IDAwMDAw
MTANCiAgICArY29uc3QgX19fTlJfc2V0Z2lkID0gMTA2DQogICAgK2NvbnN0IF9JRkZfVk5FVF9I
RFIgPSAweDQwMDANCiAgICArY29uc3QgX1NDTnVMRUFTVDMyID0gInUiDQogICAgK2NvbnN0IF9Q
Ukl4TEVBU1QxNiA9ICJ4Ig0KICAgICtjb25zdCBfX19OUl9pb3ByaW9fc2V0ID0gMjUxDQogICAg
K2NvbnN0IF9fU0VNQVBIT1JFX0ggPSAxDQogICAgK2NvbnN0IF9SVEZfU1RBVElDID0gMHgwNDAw
DQogICAgK2NvbnN0IF9QUl9FTkRJQU5fUFBDX0xJVFRMRSA9IDINCiAgICArY29uc3QgX19fRkRf
U0VUU0laRSA9IDEwMjQNCiAgICArY29uc3QgX1NZU19zZWNjb21wID0gX19fTlJfc2VjY29tcA0K
ICAgICtjb25zdCBfX19MREJMX01JTl9fID0gMS4xDQogICAgK2NvbnN0IF9fX0RFQzMyX01BWF9f
ID0gOS45OTk5OTlFOTYNCiAgICArY29uc3QgX19fSU5UUFRSX01BWF9fID0gMHg3ZmZmZmZmZmZm
ZmZmZmZmDQogICAgK2NvbnN0IF9fX0ZJTEVfZGVmaW5lZCA9IDENCiAgICArY29uc3QgX01PRF9O
QU5PID0gX0FESl9OQU5PDQogICAgK2NvbnN0IF9fX0ZMVDMyX0VQU0lMT05fXyA9IDEuMQ0KICAg
ICtjb25zdCBfWDg2X0VGTEFHU19BQ19CSVQgPSAxOA0KICAgICtjb25zdCBfUFJPVF9FWEVDID0g
MHg0DQogICAgK2NvbnN0IF9JRkxBX1NUQVRTX1VOU1BFQyA9IDANCiAgICArY29uc3QgX0lGTEFf
VkZfUE9SVF9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9TQ0hFRF9PVEhFUiA9IDANCiAgICArY29u
c3QgX0FMTFBFUk1TID0gKF9TX0lTVUlEfF9TX0lTR0lEfF9TX0lTVlRYfF9TX0lSV1hVfF9TX0lS
V1hHfF9TX0lSV1hPKQ0KICAgICtjb25zdCBfX19OUl9nZXRkZW50cyA9IDc4DQogICAgK2NvbnN0
IF9ORFRQQV9CQVNFX1JFQUNIQUJMRV9USU1FID0gNA0KICAgICtjb25zdCBfRVRIX1BfV0NDUCA9
IDB4ODgzRQ0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJR19MSU5URkxBR1Mg
PSAxMTIzDQogICAgK2NvbnN0IF9JRkxBX0VWRU5UX1JFQk9PVCA9IDENCiAgICArY29uc3QgX0FS
UEhSRF9SQVdIRExDID0gNTE4DQogICAgK2NvbnN0IF9DTERfU1RPUFBFRCA9IDUNCiAgICArY29u
c3QgX19fRkxUMzJfREVDSU1BTF9ESUdfXyA9IDkNCiAgICArY29uc3QgX19fU19JU1ZUWCA9IDAx
MDAwDQogICAgK2NvbnN0IF9BRl9JVUNWID0gX1BGX0lVQ1YNCiAgICArY29uc3QgX1JUTkxHUlBf
Tk9QMiA9IDE0DQogICAgK2NvbnN0IF9fX2NvZGVfbW9kZWxfc21hbGxfXyA9IDENCiAgICArY29u
c3QgX1RDUF9GQVNUT1BFTl9DT05ORUNUID0gMzANCiAgICArY29uc3QgX19TQ19USFJFQURfUFJJ
T19QUk9URUNUID0gODENCiAgICArY29uc3QgX19CSVRTX1NJR05VTV9HRU5FUklDX0ggPSAxDQog
ICAgK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9FWFRSRU1FID0gNQ0KICAgICtjb25zdCBfSU5UTUFY
X1dJRFRIID0gNjQNCiAgICArY29uc3QgX0VET00gPSAzMw0KICAgICtjb25zdCBfU1lTX3NjaGVk
X2dldHNjaGVkdWxlciA9IF9fX05SX3NjaGVkX2dldHNjaGVkdWxlcg0KICAgICtjb25zdCBfRVhU
QSA9IF9CMTkyMDANCiAgICArY29uc3QgX0VYVEIgPSBfQjM4NDAwDQogICAgK2NvbnN0IF9TWVNf
cGVyZl9ldmVudF9vcGVuID0gX19fTlJfcGVyZl9ldmVudF9vcGVuDQogICAgK2NvbnN0IF9TWVNf
c2V0bnMgPSBfX19OUl9zZXRucw0KICAgICtjb25zdCBfX0lPQ19TSVpFQklUUyA9IDE0DQogICAg
K2NvbnN0IF9fWE9QRU5fTEVHQUNZID0gMQ0KICAgICtjb25zdCBfX1BPU0lYMl9MT0NBTEVERUYg
PSBfX19QT1NJWDJfVEhJU19WRVJTSU9ODQogICAgK2NvbnN0IF9UVFlfTkFNRV9NQVggPSAzMg0K
ICAgICtjb25zdCBfX1BPU0lYX1JFX0RVUF9NQVggPSAyNTUNCiAgICArY29uc3QgX0lQVjZfUkVD
VkhPUE9QVFMgPSA1Mw0KICAgICtjb25zdCBfTkVUTElOS19CUk9BRENBU1RfRVJST1IgPSA0DQog
ICAgK2NvbnN0IF9QUl9TRVRfTU0gPSAzNQ0KICAgICtjb25zdCBfX19GTE9BVF9XT1JEX09SREVS
ID0gX19fQllURV9PUkRFUg0KICAgICtjb25zdCBfX1NDX1VDSEFSX01BWCA9IDExNQ0KICAgICtj
b25zdCBfRVRIX1BfTVBMU19VQyA9IDB4ODg0Nw0KICAgICtjb25zdCBfTkxBX1RZUEVfTUFTSyA9
IF4oX05MQV9GX05FU1RFRCB8IF9OTEFfRl9ORVRfQllURU9SREVSKQ0KICAgICtjb25zdCBfX1ND
X1hPUEVOX1NUUkVBTVMgPSAyNDYNCiAgICArY29uc3QgX0JQRl9KR1QgPSAweDIwDQogICAgK2Nv
bnN0IF9fX0lOVDY0X01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmDQogICAgK2NvbnN0IF9NT0Rf
RlJFUVVFTkNZID0gX0FESl9GUkVRVUVOQ1kNCiAgICArY29uc3QgX19fTlJfc2htZHQgPSA2Nw0K
ICAgICtjb25zdCBfU1lTX2dldGN3ZCA9IF9fX05SX2dldGN3ZA0KICAgICtjb25zdCBfX19TSVpF
T0ZfTE9OR19fID0gOA0KICAgICtjb25zdCBfQlBGX05FVF9PRkYgPSBfU0tGX05FVF9PRkYNCiAg
ICArY29uc3QgX0lQX0JMT0NLX1NPVVJDRSA9IDM4DQogICAgK2NvbnN0IF9FQ0hSTkcgPSA0NA0K
ICAgICtjb25zdCBfRUFJX1NZU1RFTSA9IC0xMQ0KICAgICtjb25zdCBfX19OUl9yZXF1ZXN0X2tl
eSA9IDI0OQ0KICAgICtjb25zdCBfX1NDX0xFVkVMM19DQUNIRV9BU1NPQyA9IDE5NQ0KICAgICtj
b25zdCBfUFJJWDggPSAiWCINCiAgICArY29uc3QgX0hBVkVfVEVFID0gMQ0KICAgICtjb25zdCBf
SEFWRV9DT05GSUdfSCA9IDENCiAgICArY29uc3QgX19QT1NJWF9DTE9DS19TRUxFQ1RJT04gPSAy
MDA4MDkNCiAgICArY29uc3QgX1RDT09GRiA9IDANCiAgICArY29uc3QgX1RDUF9NU1NfREVTSVJF
RCA9IDEyMjANCiAgICArY29uc3QgX0FJX1BBU1NJVkUgPSAweDAwMDENCiAgICArY29uc3QgX1Nf
SUZMTksgPSBfX19TX0lGTE5LDQogICAgK2NvbnN0IF9EVF9TT0NLID0gMTINCiAgICArY29uc3Qg
X19TQ18yX1VQRSA9IDk3DQogICAgK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01EX0tFWEVDID0gMHg0
NTU4NDU0Mw0KICAgICtjb25zdCBfX1NDX1VTSFJUX01BWCA9IDExOA0KICAgICtjb25zdCBfU09f
QlNEQ09NUEFUID0gMTQNCiAgICArY29uc3QgX19LX1NTX01BWFNJWkUgPSAxMjgNCiAgICArY29u
c3QgX1JUQ0ZfVkFMVkUgPSAweDAwMjAwMDAwDQogICAgK2NvbnN0IF9JRkxBX1RVTl9OVU1fRElT
QUJMRURfUVVFVUVTID0gOQ0KICAgICtjb25zdCBfSEFWRV9NRU1PUllfSCA9IDENCiAgICArY29u
c3QgX1g4Nl9DUjRfVU1JUF9CSVQgPSAxMQ0KICAgICtjb25zdCBfSEFWRV9ORVRJTkVUX0lGX0VU
SEVSX0ggPSAxDQogICAgK2NvbnN0IF9BRl9NQVggPSBfUEZfTUFYDQogICAgK2NvbnN0IF9IQVZF
X0VYUE0xTCA9IDENCiAgICArY29uc3QgX19fX19nd2NoYXJfdF9kZWZpbmVkID0gMQ0KICAgICtj
b25zdCBfTlRGX1NFTEYgPSAweDAyDQogICAgK2NvbnN0IF9fQklUU19TSUdBQ1RJT05fSCA9IDEN
CiAgICArY29uc3QgX1NZU19yZWJvb3QgPSBfX19OUl9yZWJvb3QNCiAgICArY29uc3QgX1JFR19U
UkFQTk8gPSAyMA0KICAgICtjb25zdCBfQURKX09GRlNFVF9TU19SRUFEID0gMHhhMDAxDQogICAg
K2NvbnN0IF9JQ01QNl9QQVJBTV9QUk9CID0gNA0KICAgICtjb25zdCBfRVRIX1BfSUVFRVBVUEFU
ID0gMHgwYTAxDQogICAgK2NvbnN0IF9JUFBST1RPX0VHUCA9IDgNCiAgICArY29uc3QgX0lGTEFf
VkZfU1RBVFNfTVVMVElDQVNUID0gNQ0KICAgICtjb25zdCBfUlRNX0RFTFRDTEFTUyA9IDQxDQog
ICAgK2NvbnN0IF9fUE9TSVhfU1BBV04gPSAyMDA4MDkNCiAgICArY29uc3QgX1JUQVhfUlRPX01J
TiA9IDEzDQogICAgK2NvbnN0IF9fU1lTX1VUU05BTUVfSCA9IDENCiAgICArY29uc3QgX05FVExJ
TktfUEtUSU5GTyA9IDMNCiAgICArY29uc3QgX0ZQRV9GTFRJTlYgPSA3DQogICAgK2NvbnN0IF9f
X05SX3JlbW92ZXhhdHRyID0gMTk3DQogICAgK2NvbnN0IF9GX05PVElGWSA9IDEwMjYNCiAgICAr
Y29uc3QgX01TX0lOVkFMSURBVEUgPSAyDQogICAgK2NvbnN0IF9TSU9DUFJPVE9QUklWQVRFID0g
MHg4OUUwDQogICAgK2NvbnN0IF9fX05SX3ZoYW5ndXAgPSAxNTMNCiAgICArY29uc3QgX0NMT05F
X1VOVFJBQ0VEID0gMHgwMDgwMDAwMA0KICAgICtjb25zdCBfSUZBX0ZfUEVSTUFORU5UID0gMHg4
MA0KICAgICtjb25zdCBfSVBfTUFYUEFDS0VUID0gNjU1MzUNCiAgICArY29uc3QgX19TQ19SRUdF
WFAgPSAxNTUNCiAgICArY29uc3QgX0lQT1BUX0VPTCA9IDANCiAgICArY29uc3QgX0VERUFETE9D
SyA9IF9FREVBRExLDQogICAgK2NvbnN0IF9TWVNfZ2V0cGlkID0gX19fTlJfZ2V0cGlkDQogICAg
K2NvbnN0IF9FVEhFUlRZUEVfTE9PUEJBQ0sgPSAweDkwMDANCiAgICArY29uc3QgX19DU19MRlM2
NF9DRkxBR1MgPSAxMDA0DQogICAgK2NvbnN0IF9TSUdGUEUgPSA4DQogICAgK2NvbnN0IF9FTElC
U0NOID0gODENCiAgICArY29uc3QgX19fREVDNjRfRVBTSUxPTl9fID0gMUUtMTUNCiAgICArY29u
c3QgX0lOVDE2X01BWCA9ICgzMjc2NykNCiAgICArY29uc3QgX1NJT0NTSUZOQU1FID0gMHg4OTIz
DQogICAgK2NvbnN0IF9fX0ZMVDMyX0RFTk9STV9NSU5fXyA9IDEuMQ0KICAgICtjb25zdCBfU0lH
VlRBTFJNID0gMjYNCiAgICArY29uc3QgX19TQ19OWkVSTyA9IDEwOQ0KICAgICtjb25zdCBfX19O
Ul9wYXVzZSA9IDM0DQogICAgK2NvbnN0IF9FUE9MTFJETk9STSA9IDY0DQogICAgK2NvbnN0IF9I
QVZFX0xJU1RYQVRUUiA9IDENCiAgICArY29uc3QgX0VUSF9QX1gyNSA9IDB4MDgwNQ0KICAgICtj
b25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0NGTEFHUyA9IDExMDQNCiAgICArY29uc3QgX0lG
TEFfQk9ORF9VUERFTEFZID0gNA0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX01BR0lDMkIgPSAz
NjkzNjc0NDgNCiAgICArY29uc3QgX05MTV9GX0VYQ0wgPSAweDIwMA0KICAgICtjb25zdCBfX19J
TlRfTEVBU1QxNl9XSURUSF9fID0gMTYNCiAgICArY29uc3QgX19TQ19UX0lPVl9NQVggPSA2Ng0K
ICAgICtjb25zdCBfX19ERUMxMjhfRVBTSUxPTl9fID0gMUUtMzMNCiAgICArY29uc3QgX1JUTV9O
RVdUQ0xBU1MgPSA0MA0KICAgICtjb25zdCBfX19GX1NFVFNJRyA9IDEwDQogICAgK2NvbnN0IF9Q
Ul9DQVBfQU1CSUVOVF9SQUlTRSA9IDINCiAgICArY29uc3QgX05fWDI1ID0gNg0KICAgICtjb25z
dCBfX0JJVFNfU0lHVEhSRUFEX0ggPSAxDQogICAgK2NvbnN0IF9TSU9DR0lGU0xBVkUgPSAweDg5
MjkNCiAgICArY29uc3QgX19fRkxUMTI4X01BWF8xMF9FWFBfXyA9IDQ5MzINCiAgICArY29uc3Qg
X09fUkRXUiA9IDAyDQogICAgK2NvbnN0IF9TX0lSV1hHID0gKF9TX0lSV1hVID4+IDMpDQogICAg
K2NvbnN0IF9IQVZFX0ZDSE9XTkFUID0gMQ0KICAgICtjb25zdCBfU1lTX2Nsb2NrX25hbm9zbGVl
cCA9IF9fX05SX2Nsb2NrX25hbm9zbGVlcA0KICAgICtjb25zdCBfTVNfUkVNT1VOVCA9IDMyDQog
ICAgK2NvbnN0IF9FVEhfUF9BRl9JVUNWID0gMHhGQkZCDQogICAgK2NvbnN0IF9TT0xfREVDTkVU
ID0gMjYxDQogICAgK2NvbnN0IF9TT19ERVRBQ0hfRklMVEVSID0gMjcNCiAgICArY29uc3QgX1JM
SU1fU0FWRURfQ1VSID0gX1JMSU1fSU5GSU5JVFkNCiAgICArY29uc3QgX0lOX0NMQVNTQl9NQVgg
PSA2NTUzNg0KICAgICtjb25zdCBfTklfTk9GUUROID0gNA0KICAgICtjb25zdCBfX19HWFhfQUJJ
X1ZFUlNJT04gPSAxMDEzDQogICAgK2NvbnN0IF9FTk9NU0cgPSA0Mg0KICAgICtjb25zdCBfSUZM
QV9CUl9UQ05fVElNRVIgPSAxNw0KICAgICtjb25zdCBfTUFYTkFNTEVOID0gX05BTUVfTUFYDQog
ICAgK2NvbnN0IF9fX0ZMVDY0WF9NSU5fXyA9IDEuMQ0KICAgICtjb25zdCBfX19ERUMzMl9NQVhf
RVhQX18gPSA5Nw0KICAgICtjb25zdCBfSEFWRV9TWVNDQUxMX0ggPSAxDQogICAgK2NvbnN0IF9I
QVZFX1NZU19QVFJBQ0VfSCA9IDENCiAgICArY29uc3QgX19TQ19QSVBFID0gMTQ1DQogICAgK2Nv
bnN0IF9TX0lSV1hVID0gKF9fX1NfSVJFQUR8X19fU19JV1JJVEV8X19fU19JRVhFQykNCiAgICAr
Y29uc3QgX19fTERCTF9IQVNfSU5GSU5JVFlfXyA9IDENCiAgICArY29uc3QgX1NZU19tcV91bmxp
bmsgPSBfX19OUl9tcV91bmxpbmsNCiAgICArY29uc3QgX19fVVNFX0ZJTEVfT0ZGU0VUNjQgPSAx
DQogICAgK2NvbnN0IF9SV0ZfV1JJVEVfTElGRV9OT1RfU0VUID0gMA0KICAgICtjb25zdCBfU0VH
Vl9QS1VFUlIgPSA0DQogICAgK2NvbnN0IF9NTE9DS19PTkZBVUxUID0gMQ0KICAgICtjb25zdCBf
X1NDX0FJT19NQVggPSAyNA0KICAgICtjb25zdCBfX19OUl9zeW1saW5rID0gODgNCiAgICArY29u
c3QgX0VSQU5HRSA9IDM0DQogICAgK2NvbnN0IF9JUF9IRFJJTkNMID0gMw0KICAgICtjb25zdCBf
V0NIQVJfTUFYID0gX19fV0NIQVJfTUFYDQogICAgK2NvbnN0IF9GX1NFVF9GSUxFX1JXX0hJTlQg
PSAxMDM4DQogICAgK2NvbnN0IF9UQ1BfQ0FfUmVjb3ZlcnkgPSAzDQogICAgK2NvbnN0IF9VSU5U
X0xFQVNUMzJfV0lEVEggPSAzMg0KICAgICtjb25zdCBfUlRBX0VOQ0FQX1RZUEUgPSAyMQ0KICAg
ICtjb25zdCBfRVBPTExFUlIgPSA4DQogICAgK2NvbnN0IF9TWVNfY2hvd24gPSBfX19OUl9jaG93
bg0KICAgICtjb25zdCBfVEFCMCA9IDAwMDAwMDANCiAgICArY29uc3QgX1RBQjEgPSAwMDA0MDAw
DQogICAgK2NvbnN0IF9UQUIyID0gMDAxMDAwMA0KICAgICtjb25zdCBfVEFCMyA9IDAwMTQwMDAN
CiAgICArY29uc3QgX1RIX1JTVCA9IDB4MDQNCiAgICArY29uc3QgX1BUUkFDRV9PX1RSQUNFRk9S
SyA9IDINCiAgICArY29uc3QgX19fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCA9IDE0Ng0KICAg
ICtjb25zdCBfX19OUl9zY2hlZF9nZXRwYXJhbSA9IDE0Mw0KICAgICtjb25zdCBfUlRORVRMSU5L
X0hBVkVfUEVFUklORk8gPSAxDQogICAgK2NvbnN0IF9fTEZTX0xBUkdFRklMRSA9IDENCiAgICAr
Y29uc3QgX1NUQVRYX0FMTCA9IDB4MGZmZg0KICAgICtjb25zdCBfX19OUl9zZXRpdGltZXIgPSAz
OA0KICAgICtjb25zdCBfTU9EX01JQ1JPID0gX0FESl9NSUNSTw0KICAgICtjb25zdCBfX19OUl91
c3RhdCA9IDEzNg0KICAgICtjb25zdCBfSUZGX0FUVEFDSF9RVUVVRSA9IDB4MDIwMA0KICAgICtj
b25zdCBfX19QVEhSRUFEX01VVEVYX0xPQ0tfRUxJU0lPTiA9IDENCiAgICArY29uc3QgX0lOX0NM
QVNTQV9IT1NUID0gKDB4ZmZmZmZmZmYgJiBeX0lOX0NMQVNTQV9ORVQpDQogICAgK2NvbnN0IF9S
VEZfTkFUID0gMHgwODAwMDAwMA0KICAgICtjb25zdCBfQlBGX0FCUyA9IDB4MjANCiAgICArY29u
c3QgX0ZTX1RPUERJUl9GTCA9IDB4MDAwMjAwMDANCiAgICArY29uc3QgX1JUTUdSUF9MSU5LID0g
MQ0KICAgICtjb25zdCBfRlNfS0VZX0RFU0NfUFJFRklYID0gImZzY3J5cHQ6Ig0KICAgICtjb25z
dCBfX19OUl92c2VydmVyID0gMjM2DQogICAgK2NvbnN0IF9USU9DU0JSSyA9IDB4NTQyNw0KICAg
ICtjb25zdCBfX19HTElCQ19fID0gMg0KICAgICtjb25zdCBfSEFWRV9TWU5DX0FERF9BTkRfRkVU
Q0hfOCA9IDENCiAgICArY29uc3QgX05EX1JBX0ZMQUdfTUFOQUdFRCA9IDB4ODANCiAgICArY29u
c3QgX0lOVF9MRUFTVDE2X01BWCA9ICgzMjc2NykNCiAgICArY29uc3QgX19fTlJfc2NoZWRfc2V0
c2NoZWR1bGVyID0gMTQ0DQogICAgK2NvbnN0IF9fU0NfU0VNQVBIT1JFUyA9IDIxDQogICAgK2Nv
bnN0IF9fVUNPTlRFWFRfSCA9IDENCiAgICArY29uc3QgX1NZU19ydF90Z3NpZ3F1ZXVlaW5mbyA9
IF9fX05SX3J0X3Rnc2lncXVldWVpbmZvDQogICAgK2NvbnN0IF9QUl9GUF9FWENfUFJFQ0lTRSA9
IDMNCiAgICArY29uc3QgX1NZU19zeW5jID0gX19fTlJfc3luYw0KICAgICtjb25zdCBfSEFWRV9T
VERJTlRfSCA9IDENCiAgICArY29uc3QgX0lDQU5PTiA9IDAwMDAwMDINCiAgICArY29uc3QgX1BS
X1NFVF9USFBfRElTQUJMRSA9IDQxDQogICAgK2NvbnN0IF9ORVRMSU5LX1VOQ09OTkVDVEVEID0g
MA0KICAgICtjb25zdCBfSVVURjggPSAwMDQwMDAwDQogICAgK2NvbnN0IF9CUEZfQU5EID0gMHg1
MA0KICAgICtjb25zdCBfTkVUTElOS19MSVNURU5fQUxMX05TSUQgPSA4DQogICAgK2NvbnN0IF9J
UFY2X1BBVEhNVFUgPSA2MQ0KICAgICtjb25zdCBfX1NDX0FURVhJVF9NQVggPSA4Nw0KICAgICtj
b25zdCBfU09DS19SRE0gPSA0DQogICAgK2NvbnN0IF9FVEhfUF9JUCA9IDB4MDgwMA0KICAgICtj
b25zdCBfX1BPU0lYX1NPVVJDRSA9IDENCiAgICArY29uc3QgX0lGTEFfR0VORVZFX1VEUF9DU1VN
ID0gOA0KICAgICtjb25zdCBfX1NDX01RX1BSSU9fTUFYID0gMjgNCiAgICArY29uc3QgX19ORVRJ
TkVUX1RDUF9IID0gMQ0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUMiA9IDB4
QTFCMkMzRDQNCiAgICArY29uc3QgX1JUQ0ZfTkFUID0gMHgwMDgwMDAwMA0KICAgICtjb25zdCBf
TkRfTkFfRkxBR19PVkVSUklERSA9IDB4MDAwMDAwMjANCiAgICArY29uc3QgX0hBVkVfU1RETElC
X0ggPSAxDQogICAgK2NvbnN0IF9fU0NfU0lOR0xFX1BST0NFU1MgPSAxNTENCiAgICArY29uc3Qg
X0lGRl9EWU5BTUlDID0gMzI3NjgNCiAgICArY29uc3QgX1RDUF9OT19RVUVVRSA9IDANCiAgICAr
Y29uc3QgX19MSUJDX0xJTUlUU19IXyA9IDENCiAgICArY29uc3QgX0lOX0RPTlRfRk9MTE9XID0g
MHgwMjAwMDAwMA0KICAgICtjb25zdCBfTUFEVl9XSVBFT05GT1JLID0gMTgNCiAgICArY29uc3Qg
X19QT1NJWF9TVFJFQU1fTUFYID0gOA0KICAgICtjb25zdCBfX0JJVFNfU0lHSU5GT19DT05TVFNf
SCA9IDENCiAgICArY29uc3QgX1dBSVRfQU5ZID0gKC0xKQ0KICAgICtjb25zdCBfTUFQXzMyQklU
ID0gMHg0MA0KICAgICtjb25zdCBfSU5FVF9BRERSU1RSTEVOID0gMTYNCiAgICArY29uc3QgX19f
SUZMQV9WRl9NQVggPSAxMw0KICAgICtjb25zdCBfUFJfRlBfRVhDX0FTWU5DID0gMg0KICAgICtj
b25zdCBfVElPQ1NFUkNPTkZJRyA9IDB4NTQ1Mw0KICAgICtjb25zdCBfVUlOVFBUUl9XSURUSCA9
IF9fX1dPUkRTSVpFDQogICAgK2NvbnN0IF9NQ0FTVF9NU0ZJTFRFUiA9IDQ4DQogICAgK2NvbnN0
IF9OTE1fRl9OT05SRUMgPSAweDEwMA0KICAgICtjb25zdCBfRURFQURMSyA9IDM1DQogICAgK2Nv
bnN0IF9JUFBPUlRfVEZUUCA9IDY5DQogICAgK2NvbnN0IF9TSU9DR1NUQU1QID0gMHg4OTA2DQog
ICAgK2NvbnN0IF9GU19LRVlfREVTQ1JJUFRPUl9TSVpFID0gOA0KICAgICtjb25zdCBfX0NTX1BP
U0lYX1Y3X0xQQklHX09GRkJJR19MSUJTID0gMTE0Ng0KICAgICtjb25zdCBfSUZMQV9HRU5FVkVf
UE9SVCA9IDUNCiAgICArY29uc3QgX1NZU19jYXBnZXQgPSBfX19OUl9jYXBnZXQNCiAgICArY29u
c3QgX19fTlJfbWxvY2sgPSAxNDkNCiAgICArY29uc3QgX19fR0NDX0FUT01JQ19MT05HX0xPQ0tf
RlJFRSA9IDINCiAgICArY29uc3QgX0VUSEVSX1RZUEVfTEVOID0gMg0KICAgICtjb25zdCBfSEFW
RV9UQU5MID0gMQ0KICAgICtjb25zdCBfX1BPU0lYX1NBVkVEX0lEUyA9IDENCiAgICArY29uc3Qg
X1RDTV9JRklOREVYX01BR0lDX0JMT0NLID0gKDB4RkZGRkZGRkYpDQogICAgK2NvbnN0IF9CUEZf
U1RYID0gMHgwMw0KICAgICtjb25zdCBfX19EQkxfTUFOVF9ESUdfXyA9IDUzDQogICAgK2NvbnN0
IF9JUFY2X01JTkhPUENPVU5UID0gNzMNCiAgICArY29uc3QgX1NJT0NHSUZOQU1FID0gMHg4OTEw
DQogICAgK2NvbnN0IF9SVEVYVF9GSUxURVJfU0tJUF9TVEFUUyA9ICgxIDw8IDMpDQogICAgK2Nv
bnN0IF9fX05SX3J0X3NpZ2FjdGlvbiA9IDEzDQogICAgK2NvbnN0IF9JTlRfRkFTVDY0X1dJRFRI
ID0gNjQNCiAgICArY29uc3QgX0JQRl9NRU0gPSAweDYwDQogICAgK2NvbnN0IF9ORF9ORUlHSEJP
Ul9BRFZFUlQgPSAxMzYNCiAgICArY29uc3QgX19QT1NJWF9DSElMRF9NQVggPSAyNQ0KICAgICtj
b25zdCBfQ0xPTkVfQ0hJTERfU0VUVElEID0gMHgwMTAwMDAwMA0KICAgICtjb25zdCBfUkVHX1JB
WCA9IDEzDQogICAgK2NvbnN0IF9fX0lOVF9MRUFTVDY0X01BWF9fID0gMHg3ZmZmZmZmZmZmZmZm
ZmZmDQogICAgK2NvbnN0IF9CUEZfQUREID0gMHgwMA0KICAgICtjb25zdCBfRVRIRVJNSU4gPSAo
X0VUSEVSX01JTl9MRU4gLSBfRVRIRVJfSERSX0xFTiAtIF9FVEhFUl9DUkNfTEVOKQ0KICAgICtj
b25zdCBfSVBQT1JUX1JKRSA9IDc3DQogICAgK2NvbnN0IF9GU19JTUFHSUNfRkwgPSAweDAwMDAy
MDAwDQogICAgK2NvbnN0IF9JUFY2X1BNVFVESVNDX0lOVEVSRkFDRSA9IDQNCiAgICArY29uc3Qg
X19fSUZMQV9WTEFOX1FPU19NQVggPSAyDQogICAgK2NvbnN0IF9fX0dDQ19BVE9NSUNfQk9PTF9M
T0NLX0ZSRUUgPSAyDQogICAgK2NvbnN0IF9TWVNfTk1MTiA9IF9fVVRTTkFNRV9MRU5HVEgNCiAg
ICArY29uc3QgX0lTSUcgPSAwMDAwMDAxDQogICAgK2NvbnN0IF9TWVNfYmluZCA9IF9fX05SX2Jp
bmQNCiAgICArY29uc3QgX0lQVjZfTVRVX0RJU0NPVkVSID0gMjMNCiAgICArY29uc3QgX0lGTEFf
V0lSRUxFU1MgPSAxMQ0KICAgICtjb25zdCBfUk1ORVRfRkxBR1NfRUdSRVNTX01BUF9DS1NVTVY0
ID0gKDEgPDwgMykNCiAgICArY29uc3QgX19QT1NJWF9NQVBQRURfRklMRVMgPSAyMDA4MDkNCiAg
ICArY29uc3QgX1JUTV9ORVdORFVTRVJPUFQgPSA2OA0KICAgICtjb25zdCBfUFRSQUNFX0dFVFNJ
R01BU0sgPSAxNjkwNg0KICAgICtjb25zdCBfUlRNR1JQX0lQVjRfTVJPVVRFID0gMHgyMA0KICAg
ICtjb25zdCBfSU42X0FERFJfR0VOX01PREVfU1RBQkxFX1BSSVZBQ1kgPSAyDQogICAgK2NvbnN0
IF9fX05SX3NpZ2FsdHN0YWNrID0gMTMxDQogICAgK2NvbnN0IF9ORVRMSU5LX0NBUF9BQ0sgPSAx
MA0KICAgICtjb25zdCBfX19OUl9jcmVhdCA9IDg1DQogICAgK2NvbnN0IF9fR0VUT1BUX0NPUkVf
SCA9IDENCiAgICArY29uc3QgX0VBSV9BR0FJTiA9IC0zDQogICAgK2NvbnN0IF9fUE9TSVhfSk9C
X0NPTlRST0wgPSAxDQogICAgK2NvbnN0IF9TQ05pMTYgPSAiaGkiDQogICAgK2NvbnN0IF9CUEZf
U1VCID0gMHgxMA0KICAgICtjb25zdCBfUFJJeDE2ID0gIngiDQogICAgK2NvbnN0IF9TQ0hFRF9J
U08gPSA0DQogICAgK2NvbnN0IF9fSEFWRV9TVFJVQ1RfVEVSTUlPU19DX0lTUEVFRCA9IDENCiAg
ICArY29uc3QgX05VRF9GQUlMRUQgPSAweDIwDQogICAgK2NvbnN0IF9FTVNHU0laRSA9IDkwDQog
ICAgK2NvbnN0IF9GQVBQRU5EID0gX09fQVBQRU5EDQogICAgK2NvbnN0IF9fX1VTRV9QT1NJWCA9
IDENCiAgICArY29uc3QgX1RJT0NJTlEgPSBfRklPTlJFQUQNCiAgICArY29uc3QgX1NIVVRfUkQg
PSAwDQogICAgK2NvbnN0IF9fX05SX2Vwb2xsX3dhaXRfb2xkID0gMjE1DQogICAgK2NvbnN0IF9Y
ODZfRUZMQUdTX09GX0JJVCA9IDExDQogICAgK2NvbnN0IF9fX0ZMVDEyOF9ERUNJTUFMX0RJR19f
ID0gMzYNCiAgICArY29uc3QgX19TQ19HRVRHUl9SX1NJWkVfTUFYID0gNjkNCiAgICArY29uc3Qg
X1NZU191dGltZSA9IF9fX05SX3V0aW1lDQogICAgK2NvbnN0IF9QUl9GUEVNVV9TSUdGUEUgPSAy
DQogICAgK2NvbnN0IF9BUlBIUkRfRkRESSA9IDc3NA0KICAgICtjb25zdCBfU0VHVl9NQVBFUlIg
PSAxDQogICAgK2NvbnN0IF9SVEFfTVBfQUxHTyA9IDE0DQogICAgK2NvbnN0IF9CUEZfSk1QID0g
MHgwNQ0KICAgICtjb25zdCBfU1lTX3J0X3NpZ2FjdGlvbiA9IF9fX05SX3J0X3NpZ2FjdGlvbg0K
ICAgICtjb25zdCBfSEFWRV9ORVRfSUZfSCA9IDENCiAgICArY29uc3QgX1JUTkxHUlBfREVDbmV0
X0lGQUREUiA9IDEzDQogICAgK2NvbnN0IF9JRkZfTE9PUEJBQ0sgPSA4DQogICAgK2NvbnN0IF9S
VENGX0xPRyA9IDB4MDIwMDAwMDANCiAgICArY29uc3QgX0RUX0JMSyA9IDYNCiAgICArY29uc3Qg
X19fTlJfY2Fwc2V0ID0gMTI2DQogICAgK2NvbnN0IF9fU0NfUElJX09TSSA9IDU3DQogICAgK2Nv
bnN0IF9JRkxBX0JSUE9SVF9GT1JXQVJEX0RFTEFZX1RJTUVSID0gMjINCiAgICArY29uc3QgX1VN
T1VOVF9OT0ZPTExPVyA9IDgNCiAgICArY29uc3QgX1BGX0VDT05FVCA9IDE5DQogICAgK2NvbnN0
IF9JUFY2X0FERFJfUFJFRkVSRU5DRVMgPSA3Mg0KICAgICtjb25zdCBfTUFDU0VDX1ZBTElEQVRF
X01BWCA9IDINCiAgICArY29uc3QgX1JUX1RBQkxFX01BWCA9IDQyOTQ5NjcyOTUNCiAgICArY29u
c3QgX0ZGSV9QQVNDQUwgPSA2DQogICAgK2NvbnN0IF9JRkxBX1hGUk1fSUZfSUQgPSAyDQogICAg
K2NvbnN0IF9CNDYwODAwID0gMDAxMDAwNA0KICAgICtjb25zdCBfX0NTX1hCUzVfTFA2NF9PRkY2
NF9MREZMQUdTID0gMTEwOQ0KICAgICtjb25zdCBfUFJJaUxFQVNUMzIgPSAiaSINCiAgICArY29u
c3QgX0hBVkVfU1lTX0ZJTEVfSCA9IDENCiAgICArY29uc3QgX1NZU19lcG9sbF93YWl0ID0gX19f
TlJfZXBvbGxfd2FpdA0KICAgICtjb25zdCBfUEZfRklMRSA9IF9QRl9MT0NBTA0KICAgICtjb25z
dCBfU1lTX2xzZXR4YXR0ciA9IF9fX05SX2xzZXR4YXR0cg0KICAgICtjb25zdCBfRUNISUxEID0g
MTANCiAgICArY29uc3QgX19fRklOSVRFX01BVEhfT05MWV9fID0gMA0KICAgICtjb25zdCBfX1BP
U0lYX1RIUkVBRF9ST0JVU1RfUFJJT19QUk9URUNUID0gLTENCiAgICArY29uc3QgX19fTlJfc2V0
dGltZW9mZGF5ID0gMTY0DQogICAgK2NvbnN0IF9QQUNLRVRfTVJfTVVMVElDQVNUID0gMA0KICAg
ICtjb25zdCBfU0tGX0FEX0NQVSA9IDM2DQogICAgK2NvbnN0IF9fX05SX3V0aW1lID0gMTMyDQog
ICAgK2NvbnN0IF9fX0lGTEFfWERQX01BWCA9IDgNCiAgICArY29uc3QgX01BQ1ZMQU5fTU9ERV9Q
QVNTVEhSVSA9IDgNCiAgICArY29uc3QgX19fU0VHX0dTID0gMQ0KICAgICtjb25zdCBfQURKX09G
RlNFVF9TSU5HTEVTSE9UID0gMHg4MDAxDQogICAgK2NvbnN0IF9QT1JUX1JFUVVFU1RfQVNTT0NJ
QVRFID0gMg0KICAgICtjb25zdCBfUFJJeExFQVNUMzIgPSAieCINCiAgICArY29uc3QgX19QT1NJ
WDJfQkNfRElNX01BWCA9IDIwNDgNCiAgICArY29uc3QgX0VUSF9QXzgwMl8yID0gMHgwMDA0DQog
ICAgK2NvbnN0IF9FVEhfUF84MDJfMyA9IDB4MDAwMQ0KICAgICtjb25zdCBfU09fRVJST1IgPSA0
DQogICAgK2NvbnN0IF9USU9DTUJJUyA9IDB4NTQxNg0KICAgICtjb25zdCBfTVNfTk9SRU1PVEVM
T0NLID0gKDE8PDI3KQ0KICAgICtjb25zdCBfX19VU0VfWE9QRU4ySyA9IDENCiAgICArY29uc3Qg
X0lQVjZfSE9QTElNSVQgPSA1Mg0KICAgICtjb25zdCBfX19OUl93cml0ZXYgPSAyMA0KICAgICtj
b25zdCBfU1lTX3NldHNvY2tvcHQgPSBfX19OUl9zZXRzb2Nrb3B0DQogICAgK2NvbnN0IF9TWVNf
Z2V0cmVzZ2lkID0gX19fTlJfZ2V0cmVzZ2lkDQogICAgK2NvbnN0IF9FVEhfUF9QQUUgPSAweDg4
OEUNCiAgICArY29uc3QgX1BBQ0tFVF9TVEFUSVNUSUNTID0gNg0KICAgICtjb25zdCBfX19VSU5U
OF9NQVhfXyA9IDB4ZmYNCiAgICArY29uc3QgX0lQX01JTlRUTCA9IDIxDQogICAgK2NvbnN0IF9M
SU5FX01BWCA9IF9fUE9TSVgyX0xJTkVfTUFYDQogICAgK2NvbnN0IF9fUENfTk9fVFJVTkMgPSA3
DQogICAgK2NvbnN0IF9fX0RCTF9NQVhfMTBfRVhQX18gPSAzMDgNCiAgICArY29uc3QgX01PRF9T
VEFUVVMgPSBfQURKX1NUQVRVUw0KICAgICtjb25zdCBfUFJfRU5ESUFOX0xJVFRMRSA9IDENCiAg
ICArY29uc3QgX01PRF9DTEtBID0gX0FESl9PRkZTRVRfU0lOR0xFU0hPVA0KICAgICtjb25zdCBf
QVRfU1RBVFhfRE9OVF9TWU5DID0gMHg0MDAwDQogICAgK2NvbnN0IF9fU0NfQ19MQU5HX1NVUFBP
UlRfUiA9IDEzNg0KICAgICtjb25zdCBfRVRIX1BfUEFVU0UgPSAweDg4MDgNCiAgICArY29uc3Qg
X1NZU191bmxpbmthdCA9IF9fX05SX3VubGlua2F0DQogICAgK2NvbnN0IF9JRkxBX0dUUF9QRFBf
SEFTSFNJWkUgPSAzDQogICAgK2NvbnN0IF9JTl9DTEFTU0JfTkVUID0gMHhmZmZmMDAwMA0KICAg
ICtjb25zdCBfU0NOZDMyID0gImQiDQogICAgK2NvbnN0IF9TSUdQV1IgPSAzMA0KICAgICtjb25z
dCBfSUZMQV9CT05EX0FDVElWRV9TTEFWRSA9IDINCiAgICArY29uc3QgX1BSX1NFVF9NTV9FTlZf
U1RBUlQgPSAxMA0KICAgICtjb25zdCBfUFRSRElGRl9XSURUSCA9IF9fX1dPUkRTSVpFDQogICAg
K2NvbnN0IF9QUkl4OCA9ICJ4Ig0KICAgICtjb25zdCBfX1NURElOVF9IID0gMQ0KICAgICtjb25z
dCBfUlRNX0dFVFNUQVRTID0gOTQNCiAgICArY29uc3QgX1RJT0NNR0VUID0gMHg1NDE1DQogICAg
K2NvbnN0IF9ORFRQQV9BTllDQVNUX0RFTEFZID0gMTINCiAgICArY29uc3QgX1BSSXgzMiA9ICJ4
Ig0KICAgICtjb25zdCBfRVhUUFJPQyA9IDAyMDAwMDANCiAgICArY29uc3QgX19fV0NIQVJfTUFY
X18gPSAweDdmZmZmZmZmDQogICAgK2NvbnN0IF9JT0NfSU5PVVQgPSAoKF9fSU9DX1dSSVRFfF9f
SU9DX1JFQUQpIDw8IF9fSU9DX0RJUlNISUZUKQ0KICAgICtjb25zdCBfSUZMQV9JTkZPX0tJTkQg
PSAxDQogICAgK2NvbnN0IF9FRkFVTFQgPSAxNA0KICAgICtjb25zdCBfVUlOVDhfV0lEVEggPSA4
DQogICAgK2NvbnN0IF9QUl9DQVBCU0VUX0RST1AgPSAyNA0KICAgICtjb25zdCBfSUZMQV9WTEFO
X1VOU1BFQyA9IDANCiAgICArY29uc3QgX0lGRl9NVUxUSUNBU1QgPSA0MDk2DQogICAgK2NvbnN0
IF9QT1JUX1JFUVVFU1RfRElTQVNTT0NJQVRFID0gMw0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRf
Tk8gPSAxOA0KICAgICtjb25zdCBfU09fREVCVUcgPSAxDQogICAgK2NvbnN0IF9SVE5IX0ZfT0ZG
TE9BRCA9IDgNCiAgICArY29uc3QgX0lOVF9GQVNUMzJfTUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4
MDcpDQogICAgK2NvbnN0IF9fU0NfTUVNTE9DS19SQU5HRSA9IDE4DQogICAgK2NvbnN0IF9SUE1f
UENPX0NIQU5HRSA9IDINCiAgICArY29uc3QgX01TX1NVQk1PVU5UID0gKDE8PDI2KQ0KICAgICtj
b25zdCBfRE5fTU9ESUZZID0gMHgwMDAwMDAwMg0KICAgICtjb25zdCBfSVBQUk9UT19VRFAgPSAx
Nw0KICAgICtjb25zdCBfSUZMQV9WUkZfUE9SVF9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9JRkxB
X0lORVQ2X01DQVNUID0gNA0KICAgICtjb25zdCBfUlROTEdSUF9ERUNuZXRfUk9VVEUgPSAxNQ0K
ICAgICtjb25zdCBfX19OUl90ZWUgPSAyNzYNCiAgICArY29uc3QgX1JUQV9JSUYgPSAzDQogICAg
K2NvbnN0IF9JQ1JOTCA9IDAwMDA0MDANCiAgICArY29uc3QgX1NfSVdVU1IgPSBfX19TX0lXUklU
RQ0KICAgICtjb25zdCBfU1lTX2R1cDIgPSBfX19OUl9kdXAyDQogICAgK2NvbnN0IF9TWVNfZHVw
MyA9IF9fX05SX2R1cDMNCiAgICArY29uc3QgX1JFR19FUlIgPSAxOQ0KICAgICtjb25zdCBfTkVU
TElOS19ORkxPRyA9IDUNCiAgICArY29uc3QgX1BSSVhMRUFTVDggPSAiWCINCiAgICArY29uc3Qg
X0lGTEFfSFNSX1ZFUlNJT04gPSA2DQogICAgK2NvbnN0IF9TWVNfbGlua2F0ID0gX19fTlJfbGlu
a2F0DQogICAgK2NvbnN0IF9fX0RCTF9IQVNfSU5GSU5JVFlfXyA9IDENCiAgICArY29uc3QgX0lQ
VE9TX0NMQVNTX01BU0sgPSAweGUwDQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX0RFU1RSVUNU
T1JfSVRFUkFUSU9OUyA9IDQNCiAgICArY29uc3QgX05EX05FSUdIQk9SX1NPTElDSVQgPSAxMzUN
CiAgICArY29uc3QgX0hBVkVfTElOVVhfSUZfRVRIRVJfSCA9IDENCiAgICArY29uc3QgX19DU19W
N19XSURUSF9SRVNUUklDVEVEX0VOVlMgPSA1DQogICAgK2NvbnN0IF9QUl9TUEVDX0VOQUJMRSA9
ICgxIDw8IDEpDQogICAgK2NvbnN0IF9BUlBIUkRfUFBQID0gNTEyDQogICAgK2NvbnN0IF9TSV9B
U1lOQ05MID0gLTYwDQogICAgK2NvbnN0IF9TWVNfbW9kaWZ5X2xkdCA9IF9fX05SX21vZGlmeV9s
ZHQNCiAgICArY29uc3QgX19fRkxUNjRfRVBTSUxPTl9fID0gMS4xDQogICAgK2NvbnN0IF9fX09f
VE1QRklMRSA9ICgwMjAwMDAwMDAgfCBfX19PX0RJUkVDVE9SWSkNCiAgICArY29uc3QgX1g4Nl9F
RkxBR1NfU0ZfQklUID0gNw0KICAgICtjb25zdCBfU0lPQ0dJRk1UVSA9IDB4ODkyMQ0KICAgICtj
b25zdCBfQlBGX0xMX09GRiA9IF9TS0ZfTExfT0ZGDQogICAgK2NvbnN0IF9fU0NIRURfSCA9IDEN
CiAgICArY29uc3QgX0lQT1BUX1NFQ1VSX0VGVE8gPSAweDc4OWENCiAgICArY29uc3QgX1BPUlRf
UFJPRklMRV9SRVNQT05TRV9FUlJPUiA9IDI2MQ0KICAgICtjb25zdCBfX19OUl9zaG1hdCA9IDMw
DQogICAgK2NvbnN0IF9fX05SX3BrZXlfYWxsb2MgPSAzMzANCiAgICArY29uc3QgX1BUUkFDRV9Q
T0tFVVNFUiA9IDYNCiAgICArY29uc3QgX0lGQV9GTEFHUyA9IDgNCiAgICArY29uc3QgX19fREVD
NjRfTUFYX0VYUF9fID0gMzg1DQogICAgK2NvbnN0IF9SVEFYX0hPUExJTUlUID0gMTANCiAgICAr
Y29uc3QgX01BUF9MT0NLRUQgPSAweDAyMDAwDQogICAgK2NvbnN0IF9CUEZfTERYID0gMHgwMQ0K
ICAgICtjb25zdCBfUlRBX1ZJQSA9IDE4DQogICAgK2NvbnN0IF9fU0NfVjdfTFBCSUdfT0ZGQklH
ID0gMjQwDQogICAgK2NvbnN0IF9BRl9JQiA9IF9QRl9JQg0KICAgICtjb25zdCBfTkwxID0gMDAw
MDQwMA0KICAgICtjb25zdCBfX1NDX0NMS19UQ0sgPSAyDQogICAgK2NvbnN0IF9NT0RfQ0xLQiA9
IF9BREpfVElDSw0KICAgICtjb25zdCBfRU5FVERPV04gPSAxMDANCiAgICArY29uc3QgX0FGX0lS
REEgPSBfUEZfSVJEQQ0KICAgICtjb25zdCBfTUNBU1RfTEVBVkVfR1JPVVAgPSA0NQ0KICAgICtj
b25zdCBfUlROTEdSUF9JUFY2X01ST1VURSA9IDEwDQogICAgK2NvbnN0IF9QVEhSRUFEX0RFU1RS
VUNUT1JfSVRFUkFUSU9OUyA9IF9fUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUw0K
ICAgICtjb25zdCBfX0lTT0M5NV9TT1VSQ0UgPSAxDQogICAgK2NvbnN0IF9fX0RFQzEyOF9NQVhf
RVhQX18gPSA2MTQ1DQogICAgK2NvbnN0IF9JRVhURU4gPSAwMTAwMDAwDQogICAgK2NvbnN0IF9J
UFBPUlRfUk9VVEVTRVJWRVIgPSA1MjANCiAgICArY29uc3QgX05EVFBBX1JFRkNOVCA9IDINCiAg
ICArY29uc3QgX1g4Nl9FRkxBR1NfQ0ZfQklUID0gMA0KICAgICtjb25zdCBfU1lTX21vdW50ID0g
X19fTlJfbW91bnQNCiAgICArY29uc3QgX0ZTX0lNTVVUQUJMRV9GTCA9IDB4MDAwMDAwMTANCiAg
ICArY29uc3QgX19DU19YQlM1X0lMUDMyX09GRkJJR19MSUJTID0gMTEwNg0KICAgICtjb25zdCBf
UFJfQ0FQX0FNQklFTlRfQ0xFQVJfQUxMID0gNA0KICAgICtjb25zdCBfX19OUl9wa2V5X2ZyZWUg
PSAzMzENCiAgICArY29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9BRVNfMTI4X0NUUyA9IDYNCiAg
ICArY29uc3QgX1JURl9QT0xJQ1kgPSAweDA0MDAwMDAwDQogICAgK2NvbnN0IF9JRkxBX0JPTkRf
RE9XTkRFTEFZID0gNQ0KICAgICtjb25zdCBfTlRGX1JPVVRFUiA9IDB4ODANCiAgICArY29uc3Qg
X0lGTEFfVkZfVFhfUkFURSA9IDMNCiAgICArY29uc3QgX0ZfU0VUX1JXX0hJTlQgPSAxMDM2DQog
ICAgK2NvbnN0IF9EVF9XSFQgPSAxNA0KICAgICtjb25zdCBfUFRSQUNFX1NZU0VNVSA9IDMxDQog
ICAgK2NvbnN0IF9TSU9DRElGQUREUiA9IDB4ODkzNg0KICAgICtjb25zdCBfRUJBREZEID0gNzcN
CiAgICArY29uc3QgX0lQX01TUyA9IDU3Ng0KICAgICtjb25zdCBfU1lTX2dldGdpZCA9IF9fX05S
X2dldGdpZA0KICAgICtjb25zdCBfVElPQ05YQ0wgPSAweDU0MEQNCiAgICArY29uc3QgX19fU0hS
VF9NQVhfXyA9IDB4N2ZmZg0KICAgICtjb25zdCBfTUFYX0lQT1BUTEVOID0gNDANCiAgICArY29u
c3QgX19fUFRIUkVBRF9NVVRFWF9IQVZFX1BSRVYgPSAxDQogICAgK2NvbnN0IF9TSU9HSUZJTkRF
WCA9IF9TSU9DR0lGSU5ERVgNCiAgICArY29uc3QgX0lQVjZfRE9OVEZSQUcgPSA2Mg0KICAgICtj
b25zdCBfQjI0MDAgPSAwMDAwMDEzDQogICAgK2NvbnN0IF9FTDJITFQgPSA1MQ0KICAgICtjb25z
dCBfSUZMQV9CUlBPUlRfR1JPVVBfRldEX01BU0sgPSAzMQ0KICAgICtjb25zdCBfX1NDX1RIUkVB
RF9QUklPUklUWV9TQ0hFRFVMSU5HID0gNzkNCiAgICArY29uc3QgX1dBSVRfTVlQR1JQID0gMA0K
ICAgICtjb25zdCBfVENBX1NUQVRTMiA9IDcNCiAgICArY29uc3QgX0lGTEFfTUFDVkxBTl9GTEFH
UyA9IDINCiAgICArY29uc3QgX19fTlJfZnRydW5jYXRlID0gNzcNCiAgICArY29uc3QgX0lGTEFf
VkZfU1RBVFMgPSA4DQogICAgK2NvbnN0IF9JUFBST1RPX1NDVFAgPSAxMzINCiAgICArY29uc3Qg
X1NZU19tdW5sb2NrYWxsID0gX19fTlJfbXVubG9ja2FsbA0KICAgICtjb25zdCBfUkxJTUlUX0FT
ID0gOQ0KICAgICtjb25zdCBfSU5UMzJfTUlOID0gKC0yMTQ3NDgzNjQ3LTEpDQogICAgK2NvbnN0
IF9fQ1NfVjZfRU5WID0gMTE0OA0KICAgICtjb25zdCBfSVBfT0ZGTUFTSyA9IDB4MWZmZg0KICAg
ICtjb25zdCBfSU5UNjRfV0lEVEggPSA2NA0KICAgICtjb25zdCBfUEFDS0FHRV9VUkwgPSAiIg0K
ICAgICtjb25zdCBfSU5UX0ZBU1QzMl9XSURUSCA9IF9fX1dPUkRTSVpFDQogICAgK2NvbnN0IF9J
RkxBX01BQ1NFQ19DSVBIRVJfU1VJVEUgPSA0DQogICAgK2NvbnN0IF9VSU5UTUFYX1dJRFRIID0g
NjQNCiAgICArY29uc3QgX1JUTVNHX05FV1JVTEUgPSAweDMxDQogICAgK2NvbnN0IF9fU0NfTkxf
Tk1BWCA9IDEyMg0KICAgICtjb25zdCBfX19GTFQ2NF9IQVNfSU5GSU5JVFlfXyA9IDENCiAgICAr
Y29uc3QgX1g4Nl9FRkxBR1NfVk1fQklUID0gMTcNCiAgICArY29uc3QgX19QT1NJWF9USFJFQURf
UFJPQ0VTU19TSEFSRUQgPSAyMDA4MDkNCiAgICArY29uc3QgX0ZOREVMQVkgPSBfT19OREVMQVkN
CiAgICArY29uc3QgX0lGTEFfQlJfTUNBU1RfUVVFUllfVVNFX0lGQUREUiA9IDI0DQogICAgK2Nv
bnN0IF9QUkl1TEVBU1QxNiA9ICJ1Ig0KICAgICtjb25zdCBfUlRGX0dBVEVXQVkgPSAweDAwMDIN
CiAgICArY29uc3QgX1NZU19sY2hvd24gPSBfX19OUl9sY2hvd24NCiAgICArY29uc3QgX1NZU19s
aW5rID0gX19fTlJfbGluaw0KICAgICtjb25zdCBfSUZMQV9WWExBTl9MT0NBTDYgPSAxNw0KICAg
ICtjb25zdCBfSVBfUkVDVk9SSUdEU1RBRERSID0gX0lQX09SSUdEU1RBRERSDQogICAgK2NvbnN0
IF9SVE1fREVMTElOSyA9IDE3DQogICAgK2NvbnN0IF9SVE1fTkVXTkVUQ09ORiA9IDgwDQogICAg
K2NvbnN0IF9JUFRPU19EU0NQX0VGID0gMHhiOA0KICAgICtjb25zdCBfUFRSQUNFX0xJU1RFTiA9
IDE2OTA0DQogICAgK2NvbnN0IF9TQ01fVElNRVNUQU1QSU5HX09QVF9TVEFUUyA9IDU0DQogICAg
K2NvbnN0IF9fUE9TSVhfU0VNQVBIT1JFUyA9IDIwMDgwOQ0KICAgICtjb25zdCBfX0lPQ19UWVBF
TUFTSyA9ICgoMSA8PCBfX0lPQ19UWVBFQklUUyktMSkNCiAgICArY29uc3QgX1g4Nl9DUjRfTUNF
X0JJVCA9IDYNCiAgICArY29uc3QgX19fRkxUX0hBU19JTkZJTklUWV9fID0gMQ0KICAgICtjb25z
dCBfRVRIX1BfTUFDU0VDID0gMHg4OEU1DQogICAgK2NvbnN0IF9fX0xPTkdfV0lEVEhfXyA9IDY0
DQogICAgK2NvbnN0IF9IQVZFX05FVF9JRl9BUlBfSCA9IDENCiAgICArY29uc3QgX19ORVRfSUZf
SCA9IDENCiAgICArY29uc3QgX1RJT0NTVEkgPSAweDU0MTINCiAgICArY29uc3QgX1NZU19zZW5k
ZmlsZSA9IF9fX05SX3NlbmRmaWxlDQogICAgK2NvbnN0IF9fX05SX3N3YXBvbiA9IDE2Nw0KICAg
ICtjb25zdCBfSU5MQ1IgPSAwMDAwMTAwDQogICAgK2NvbnN0IF9TX0lGUkVHID0gX19fU19JRlJF
Rw0KICAgICtjb25zdCBfUkVHX1I5ID0gMQ0KICAgICtjb25zdCBfUE9TSVhfTUFEVl9ET05UTkVF
RCA9IDQNCiAgICArY29uc3QgX19fVVNFX1VOSVg5OCA9IDENCiAgICArY29uc3QgX0lONl9BRERS
X0dFTl9NT0RFX0VVSTY0ID0gMA0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfUFJPWFlBUlBfV0lG
SSA9IDEyDQogICAgK2NvbnN0IF9TSFVUX1dSID0gMQ0KICAgICtjb25zdCBfRUNPTk5SRUZVU0VE
ID0gMTExDQogICAgK2NvbnN0IF9QRl9BTEcgPSAzOA0KICAgICtjb25zdCBfX19JRkxBX0lORk9f
TUFYID0gNg0KICAgICtjb25zdCBfX1NDX1BPTEwgPSA1OA0KICAgICtjb25zdCBfX19JRkxBX0lO
RVQ2X01BWCA9IDkNCiAgICArY29uc3QgX01BUF9GSVhFRF9OT1JFUExBQ0UgPSAweDEwMDAwMA0K
ICAgICtjb25zdCBfX0NTX1BPU0lYX1Y3X0xQNjRfT0ZGNjRfTElOVEZMQUdTID0gMTE0Mw0KICAg
ICtjb25zdCBfUE9SVF9QUk9GSUxFX01BWCA9IDQwDQogICAgK2NvbnN0IF9UQ1BfQ09PS0lFX1BB
SVJfU0laRSA9ICgyKl9UQ1BfQ09PS0lFX01BWCkNCiAgICArY29uc3QgX1BUUkFDRV9QRUVLU0lH
SU5GT19TSEFSRUQgPSAxDQogICAgK2NvbnN0IF9OVURfU1RBTEUgPSAweDA0DQogICAgK2NvbnN0
IF9ORVRMSU5LX0ZJQl9MT09LVVAgPSAxMA0KICAgICtjb25zdCBfUlRNX0JBU0UgPSAxNg0KICAg
ICtjb25zdCBfUEZfU0VDVVJJVFkgPSAxNA0KICAgICtjb25zdCBfU1BMSUNFX0ZfTU9WRSA9IDEN
CiAgICArY29uc3QgX19fTlJfa2lsbCA9IDYyDQogICAgK2NvbnN0IF9TSUdTVEtTWiA9IDgxOTIN
CiAgICArY29uc3QgX0NSMCA9IDAwMDAwMDANCiAgICArY29uc3QgX0NSMSA9IDAwMDEwMDANCiAg
ICArY29uc3QgX19fV0NIQVJfV0lEVEhfXyA9IDMyDQogICAgK2NvbnN0IF9fX0lOVF9GQVNUOF9X
SURUSF9fID0gOA0KICAgICtjb25zdCBfRVRIX1BfVEVCID0gMHg2NTU4DQogICAgK2NvbnN0IF9J
UFBPUlRfRlRQID0gMjENCiAgICArY29uc3QgX1NUQV9NT0RFID0gMHg0MDAwDQogICAgK2NvbnN0
IF9CUEZfSU5EID0gMHg0MA0KICAgICtjb25zdCBfRkZJX1RZUEVfU1RSVUNUID0gMTMNCiAgICAr
Y29uc3QgX01TR19aRVJPQ09QWSA9IDY3MTA4ODY0DQogICAgK2NvbnN0IF9fRU5ESUFOX0ggPSAx
DQogICAgK2NvbnN0IF9fUE9TSVhfVFlQRURfTUVNT1JZX09CSkVDVFMgPSAtMQ0KICAgICtjb25z
dCBfU1lTX21xX3RpbWVkcmVjZWl2ZSA9IF9fX05SX21xX3RpbWVkcmVjZWl2ZQ0KICAgICtjb25z
dCBfZXBvbGxfZGF0YV9vZmZzZXQgPSA0DQogICAgK2NvbnN0IF9HVFBfUk9MRV9TR1NOID0gMQ0K
ICAgICtjb25zdCBfTkRUQV9TVEFUUyA9IDcNCiAgICArY29uc3QgX1NDTV9SSUdIVFMgPSAxDQog
ICAgK2NvbnN0IF9UQ1BfUkVDVl9RVUVVRSA9IDENCiAgICArY29uc3QgX19QT1NJWF9WNl9MUDY0
X09GRjY0ID0gMQ0KICAgICtjb25zdCBfQUZfQVBQTEVUQUxLID0gX1BGX0FQUExFVEFMSw0KICAg
ICtjb25zdCBfX19TSVpFT0ZfRkxPQVRfXyA9IDQNCiAgICArY29uc3QgX1BGX0NBTiA9IDI5DQog
ICAgK2NvbnN0IF9SVEZfTE9DQUwgPSAweDgwMDAwMDAwDQogICAgK2NvbnN0IF9OTE1TR19BTElH
TlRPID0gNA0KICAgICtjb25zdCBfX19VSU5UX0ZBU1QxNl9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZm
ZmZmZg0KICAgICtjb25zdCBfU09fU0VDVVJJVFlfRU5DUllQVElPTl9ORVRXT1JLID0gMjQNCiAg
ICArY29uc3QgX19fU0laRU9GX1BPSU5URVJfXyA9IDgNCiAgICArY29uc3QgX19fTlJfbWVtZmRf
Y3JlYXRlID0gMzE5DQogICAgK2NvbnN0IF9TWVNfdGdraWxsID0gX19fTlJfdGdraWxsDQogICAg
K2NvbnN0IF9YQ0FTRSA9IDAwMDAwMDQNCiAgICArY29uc3QgX1ZNSU4gPSA2DQogICAgK2NvbnN0
IF9CNTc2MDAgPSAwMDEwMDAxDQogICAgK2NvbnN0IF9JRkxBX0VWRU5UX05PVElGWV9QRUVSUyA9
IDQNCiAgICArY29uc3QgX19DU19QT1NJWF9WN19JTFAzMl9PRkYzMl9MREZMQUdTID0gMTEzMw0K
ICAgICtjb25zdCBfUlRQUk9UX0JPT1QgPSAzDQogICAgK2NvbnN0IF9UQ1BPUFRfVElNRVNUQU1Q
ID0gOA0KICAgICtjb25zdCBfUFJJeExFQVNUOCA9ICJ4Ig0KICAgICtjb25zdCBfRUlOUFJPR1JF
U1MgPSAxMTUNCiAgICArY29uc3QgX0lOX0NMQVNTQ19OU0hJRlQgPSA4DQogICAgK2NvbnN0IF9T
Q01fVElNRVNUQU1QTlMgPSBfU09fVElNRVNUQU1QTlMNCiAgICArY29uc3QgX0lGTEFfQUREUkVT
UyA9IDENCiAgICArY29uc3QgX0lGTEFfVkZfSU5GT19VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9N
U19TWU5DSFJPTk9VUyA9IDE2DQogICAgK2NvbnN0IF9TWVNfcmVuYW1lYXQgPSBfX19OUl9yZW5h
bWVhdA0KICAgICtjb25zdCBfRVRIX1BfUUlOUTEgPSAweDkxMDANCiAgICArY29uc3QgX0VUSF9Q
X1FJTlEyID0gMHg5MjAwDQogICAgK2NvbnN0IF9FVEhfUF9RSU5RMyA9IDB4OTMwMA0KICAgICtj
b25zdCBfX19OUl9xdW90YWN0bCA9IDE3OQ0KICAgICtjb25zdCBfTlNTX0JVRkxFTl9QQVNTV0Qg
PSAxMDI0DQogICAgK2NvbnN0IF9fUE9TSVgyX1NXX0RFViA9IF9fX1BPU0lYMl9USElTX1ZFUlNJ
T04NCiAgICArY29uc3QgX1RDU0FOT1cgPSAwDQogICAgK2NvbnN0IF9DUzYgPSAwMDAwMDIwDQog
ICAgK2NvbnN0IF9DUzcgPSAwMDAwMDQwDQogICAgK2NvbnN0IF9DUzggPSAwMDAwMDYwDQogICAg
K2NvbnN0IF9QUklkTEVBU1Q4ID0gImQiDQogICAgK2NvbnN0IF9JUFBPUlRfVElNRVNFUlZFUiA9
IDM3DQogICAgK2NvbnN0IF9GX09XTkVSX1BHUlAgPSAyDQogICAgK2NvbnN0IF9BRl9BVE1QVkMg
PSBfUEZfQVRNUFZDDQogICAgK2NvbnN0IF9SVE1HUlBfSVBWNF9JRkFERFIgPSAweDEwDQogICAg
K2NvbnN0IF9TWVNfcmVjdmZyb20gPSBfX19OUl9yZWN2ZnJvbQ0KICAgICtjb25zdCBfX19GTFQ2
NFhfTUlOXzEwX0VYUF9fID0gKC00OTMxKQ0KICAgICtjb25zdCBfU19JWEdSUCA9IChfU19JWFVT
UiA+PiAzKQ0KICAgICtjb25zdCBfU1lTX21rbm9kID0gX19fTlJfbWtub2QNCiAgICArY29uc3Qg
X05FVExJTktfU01DID0gMjINCiAgICArY29uc3QgX1NZU191dGltZXMgPSBfX19OUl91dGltZXMN
CiAgICArY29uc3QgX0ZTX1hGTEFHX0hBU0FUVFIgPSAweDgwMDAwMDAwDQogICAgK2NvbnN0IF9f
X0RFQ19FVkFMX01FVEhPRF9fID0gMg0KICAgICtjb25zdCBfU0lHVFRJTiA9IDIxDQogICAgK2Nv
bnN0IF9JUFBST1RPX0VTUCA9IDUwDQogICAgK2NvbnN0IF9TS0ZfQURfTkxBVFRSID0gMTINCiAg
ICArY29uc3QgX0VBSV9NRU1PUlkgPSAtMTANCiAgICArY29uc3QgX1NZU19saXN0eGF0dHIgPSBf
X19OUl9saXN0eGF0dHINCiAgICArY29uc3QgX0FSUE9QX05BSyA9IDEwDQogICAgK2NvbnN0IF9C
UEZfSlNFVCA9IDB4NDANCiAgICArY29uc3QgX05fVFRZID0gMA0KICAgICtjb25zdCBfX1BDX1NP
Q0tfTUFYQlVGID0gMTINCiAgICArY29uc3QgX1RJT0NNX0RTUiA9IDB4MTAwDQogICAgK2NvbnN0
IF9fX0ZMVDMyX01JTl9FWFBfXyA9ICgtMTI1KQ0KICAgICtjb25zdCBfVENPRkxVU0ggPSAxDQog
ICAgK2NvbnN0IF9UVU5ERVRBQ0hGSUxURVJfdmFsID0gMTA3NDgxMjExOA0KICAgICtjb25zdCBf
X0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJTlRGTEFHUyA9IDExMTkNCiAgICArY29uc3QgX01B
RFZfSFVHRVBBR0UgPSAxNA0KICAgICtjb25zdCBfVENJT0ZMVVNIID0gMg0KICAgICtjb25zdCBf
RVRIX1BfTlNIID0gMHg4OTRGDQogICAgK2NvbnN0IF9JRkxBX0JSX01DQVNUX0hBU0hfTUFYID0g
MjcNCiAgICArY29uc3QgX0lGTEFfUFBQX0RFVl9GRCA9IDENCiAgICArY29uc3QgX1NfSVNVSUQg
PSBfX19TX0lTVUlEDQogICAgK2NvbnN0IF9WU1RBUlQgPSA4DQogICAgK2NvbnN0IF9FVEhfUF9D
QU5GRCA9IDB4MDAwRA0KICAgICtjb25zdCBfX0JJVFNfU1RESU5UX0lOVE5fSCA9IDENCiAgICAr
Y29uc3QgX0JQRl9BTFUgPSAweDA0DQogICAgK2NvbnN0IF9fX1NJWkVPRl9GTE9BVDgwX18gPSAx
Ng0KICAgICtjb25zdCBfX1BPU0lYX1NTSVpFX01BWCA9IDMyNzY3DQogICAgK2NvbnN0IF9fQ1Nf
UEFUSCA9IDANCiAgICArY29uc3QgX0hBVkVfVU5TRVRFTlYgPSAxDQogICAgK2NvbnN0IF9GUkFN
RV9TSVpFID0gMTY4DQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYID0g
MTkNCiAgICArY29uc3QgX19TWVNfVElNRVhfSCA9IDENCiAgICArY29uc3QgX0lGTEFfVFVOX1VO
U1BFQyA9IDANCiAgICArY29uc3QgX0xJTlVYX1JFQk9PVF9DTURfQ0FEX09GRiA9IDB4MDAwMDAw
MDANCiAgICArY29uc3QgX1NJR1VTUjEgPSAxMA0KICAgICtjb25zdCBfU0lHVVNSMiA9IDEyDQog
ICAgK2NvbnN0IF9IQVZFX1NZU19TVEFUX0ggPSAxDQogICAgK2NvbnN0IF9IQVZFX0ZBTExPQ0FU
RSA9IDENCiAgICArY29uc3QgX19fTlJfdW5zaGFyZSA9IDI3Mg0KICAgICtjb25zdCBfQ1g4Nl9D
Q1IwID0gMHhjMA0KICAgICtjb25zdCBfQ1g4Nl9DQ1IxID0gMHhjMQ0KICAgICtjb25zdCBfQ1g4
Nl9DQ1IyID0gMHhjMg0KICAgICtjb25zdCBfQ1g4Nl9DQ1IzID0gMHhjMw0KICAgICtjb25zdCBf
U1lTX3J0X3NpZ3RpbWVkd2FpdCA9IF9fX05SX3J0X3NpZ3RpbWVkd2FpdA0KICAgICtjb25zdCBf
X19OUl90a2lsbCA9IDIwMA0KICAgICtjb25zdCBfQ1g4Nl9DQ1I2ID0gMHhlYQ0KICAgICtjb25z
dCBfQ1g4Nl9DQ1I3ID0gMHhlYg0KICAgICtjb25zdCBfTVNHX01PUkUgPSAzMjc2OA0KICAgICtj
b25zdCBfSVBPUFRfVFNfVFNPTkxZID0gMA0KICAgICtjb25zdCBfSEFWRV9MSU5VWF9SVE5FVExJ
TktfSCA9IDENCiAgICArY29uc3QgX1BSSW8xNiA9ICJvIg0KICAgICtjb25zdCBfUFRSQUNFX1BP
S0VVU1IgPSA2DQogICAgK2NvbnN0IF9fX05SX2dldGNwdSA9IDMwOQ0KICAgICtjb25zdCBfQUZf
REVDbmV0ID0gX1BGX0RFQ25ldA0KICAgICtjb25zdCBfUEFDS0FHRV9OQU1FID0gInBhY2thZ2Ut
dW51c2VkIg0KICAgICtjb25zdCBfX1NDX1hPUEVOX1VOSVggPSA5MQ0KICAgICtjb25zdCBfWDg2
X0NSMF9OV19CSVQgPSAyOQ0KICAgICtjb25zdCBfTUZEX0FMTE9XX1NFQUxJTkcgPSAyDQogICAg
K2NvbnN0IF9FQUlfQ0FOQ0VMRUQgPSAtMTAxDQogICAgK2NvbnN0IF9fX05SX3JlYWR2ID0gMTkN
CiAgICArY29uc3QgX19QT1NJWDJfUkVfRFVQX01BWCA9IDI1NQ0KICAgICtjb25zdCBfVFVOU0VU
SUZJTkRFWF92YWwgPSAxMDc0MDI1NjkwDQogICAgK2NvbnN0IF9fUlBDX05FVERCX0ggPSAxDQog
ICAgK2NvbnN0IF9NQVBfSFVHRV9NQVNLID0gMHgzZg0KICAgICtjb25zdCBfTkRfTkFfRkxBR19T
T0xJQ0lURUQgPSAweDAwMDAwMDQwDQogICAgK2NvbnN0IF9UVU5TRVRWTkVUSERSU1pfdmFsID0g
MTA3NDAyNTY4OA0KICAgICtjb25zdCBfRUFJX0FERFJGQU1JTFkgPSAtOQ0KICAgICtjb25zdCBf
X19TSVpFT0ZfRkxPQVQxMjhfXyA9IDE2DQogICAgK2NvbnN0IF9fX05SX3Ztc3BsaWNlID0gMjc4
DQogICAgK2NvbnN0IF9fX05SX3VuYW1lID0gNjMNCiAgICArY29uc3QgX1RDU0VUU192YWwgPSAy
MTUwNg0KICAgICtjb25zdCBfX19OUl9leGVjdmVhdCA9IDMyMg0KICAgICtjb25zdCBfU1lTX3Rp
bWVzID0gX19fTlJfdGltZXMNCiAgICArY29uc3QgX1JUTV9GX1BSRUZJWCA9IDB4ODAwDQogICAg
K2NvbnN0IF9TRUVLX0NVUiA9IDENCiAgICArY29uc3QgX0lGTEFfQlJfSEVMTE9fVElNRVIgPSAx
Ng0KICAgICtjb25zdCBfX1BDX1BJUEVfQlVGID0gNQ0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y2
X0xQQklHX09GRkJJR19MSU5URkxBR1MgPSAxMTMxDQogICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9S
RU1PVEUgPSAyDQogICAgK2NvbnN0IF9SVE5MR1JQX01QTFNfUk9VVEUgPSAyNw0KICAgICtjb25z
dCBfU1lTX3RpbWVyX3NldHRpbWUgPSBfX19OUl90aW1lcl9zZXR0aW1lDQogICAgK2NvbnN0IF9Q
Rl9MTEMgPSAyNg0KICAgICtjb25zdCBfRVRIX1BfTElOS19DVEwgPSAweDg4NmMNCiAgICArY29u
c3QgX0lQX09QVElPTlMgPSA0DQogICAgK2NvbnN0IF9DWDg2X0RJUjEgPSAweGZmDQogICAgK2Nv
bnN0IF9fUE9TSVhfUlRTSUdfTUFYID0gOA0KICAgICtjb25zdCBfVElNRV9JTlMgPSAxDQogICAg
K2NvbnN0IF9FSVNESVIgPSAyMQ0KICAgICtjb25zdCBfX0JJVFNfVFlQRVNfSCA9IDENCiAgICAr
Y29uc3QgX19TWVNfU09DS0VUX0ggPSAxDQogICAgK2NvbnN0IF9fX05SX2ZzZXR4YXR0ciA9IDE5
MA0KICAgICtjb25zdCBfRUlPID0gNQ0KICAgICtjb25zdCBfSVBQUk9UT19IT1BPUFRTID0gMA0K
ICAgICtjb25zdCBfQkxPQ0tfU0laRSA9ICgxPDxfQkxPQ0tfU0laRV9CSVRTKQ0KICAgICtjb25z
dCBfRlNfRU5DUllQVElPTl9NT0RFX1NQRUNLMTI4XzI1Nl9DVFMgPSA4DQogICAgK2NvbnN0IF9J
RkZfTk9BUlAgPSAxMjgNCiAgICArY29uc3QgX19fRkxUNjRYX01BTlRfRElHX18gPSA2NA0KICAg
ICtjb25zdCBfRVJFTU9URSA9IDY2DQogICAgK2NvbnN0IF9fX0ZMVDY0X01JTl9fID0gMS4xDQog
ICAgK2NvbnN0IF9ORF9PUFRfUlRSX0FEVl9JTlRFUlZBTCA9IDcNCiAgICArY29uc3QgX1NZU19w
aXBlID0gX19fTlJfcGlwZQ0KICAgICtjb25zdCBfTlRGX0VYVF9MRUFSTkVEID0gMHgxMA0KICAg
ICtjb25zdCBfU1RBX1BQU0VSUk9SID0gMHgwODAwDQogICAgK2NvbnN0IF9FUkVNT1RFSU8gPSAx
MjENCiAgICArY29uc3QgX0lOVF9GQVNUMTZfTUlOID0gKC05MjIzMzcyMDM2ODU0Nzc1ODA3LTEp
DQogICAgK2NvbnN0IF9IQVZFX0xJTlVYX0ZJTFRFUl9IID0gMQ0KICAgICtjb25zdCBfRUlEUk0g
PSA0Mw0KICAgICtjb25zdCBfX1NDX0ZJRk8gPSAxNDQNCiAgICArY29uc3QgX1NJX1FVRVVFID0g
LTENCiAgICArY29uc3QgX1NZU19nZXRfa2VybmVsX3N5bXMgPSBfX19OUl9nZXRfa2VybmVsX3N5
bXMNCiAgICArY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSUJTID0gMTExOA0KICAg
ICtjb25zdCBfVENPT04gPSAxDQogICAgK2NvbnN0IF9GX0RVUEZEID0gMA0KICAgICtjb25zdCBf
VUlOVF9MRUFTVDE2X1dJRFRIID0gMTYNCiAgICArY29uc3QgX1NZU19zZXRybGltaXQgPSBfX19O
Ul9zZXRybGltaXQNCiAgICArY29uc3QgX19QQVRIX1BST1RPQ09MUyA9ICIvZXRjL3Byb3RvY29s
cyINCiAgICArY29uc3QgX01PRF9UQUkgPSBfQURKX1RBSQ0KICAgICtjb25zdCBfX1NDX1RSQUNF
X0lOSEVSSVQgPSAxODMNCiAgICArY29uc3QgX19fTlJfc2VuZHRvID0gNDQNCiAgICArY29uc3Qg
X05FVExJTktfUk9VVEUgPSAwDQogICAgK2NvbnN0IF9QVFJBQ0VfS0lMTCA9IDgNCiAgICArY29u
c3QgX1JUTkxHUlBfTURCID0gMjYNCiAgICArY29uc3QgX05FVERCX1NVQ0NFU1MgPSAwDQogICAg
K2NvbnN0IF9GX1NFVEZEID0gMg0KICAgICtjb25zdCBfSEFWRV9NS0RJUkFUID0gMQ0KICAgICtj
b25zdCBfSUZMQV9WWExBTl9MSU1JVCA9IDkNCiAgICArY29uc3QgX19TQ19IT1NUX05BTUVfTUFY
ID0gMTgwDQogICAgK2NvbnN0IF9OTERMWSA9IDAwMDA0MDANCiAgICArY29uc3QgX0FESl9USUNL
ID0gMHg0MDAwDQogICAgK2NvbnN0IF9fUE9TSVgyX0xJTkVfTUFYID0gMjA0OA0KICAgICtjb25z
dCBfRl9TRVRGTCA9IDQNCiAgICArY29uc3QgX19DU19QT1NJWF9WN19MUDY0X09GRjY0X0xERkxB
R1MgPSAxMTQxDQogICAgK2NvbnN0IF9fX05SX3NldHJlc3VpZCA9IDExNw0KICAgICtjb25zdCBf
X19ERUM2NF9NSU5fRVhQX18gPSAoLTM4MikNCiAgICArY29uc3QgX0xfU0VUID0gMA0KICAgICtj
b25zdCBfSUZMQV9OVU1fUlhfUVVFVUVTID0gMzINCiAgICArY29uc3QgX1NPX1NORExPV0FUID0g
MTkNCiAgICArY29uc3QgX1NJT0NTSUZUWFFMRU4gPSAweDg5NDMNCiAgICArY29uc3QgX1NPX1RJ
TUVTVEFNUE5TID0gMzUNCiAgICArY29uc3QgX0lOVF9GQVNUMzJfTUlOID0gKC05MjIzMzcyMDM2
ODU0Nzc1ODA3LTEpDQogICAgK2NvbnN0IF9GU19QT0xJQ1lfRkxBR1NfUEFEXzggPSAweDAxDQog
ICAgK2NvbnN0IF9TT19CSU5EVE9ERVZJQ0UgPSAyNQ0KICAgICtjb25zdCBfWERQX0ZMQUdTX0RS
Vl9NT0RFID0gKDEgPDwgMikNCiAgICArY29uc3QgX1BUUkFDRV9PX1RSQUNFU1lTR09PRCA9IDEN
CiAgICArY29uc3QgX1NLRl9BRF9OTEFUVFJfTkVTVCA9IDE2DQogICAgK2NvbnN0IF9SVEFfVEFC
TEUgPSAxNQ0KICAgICtjb25zdCBfU0lPQ0RSQVJQID0gMHg4OTYwDQogICAgK2NvbnN0IF9QUkVG
SVhfVU5TUEVDID0gMA0KICAgICtjb25zdCBfSUNNUDZfRFNUX1VOUkVBQ0hfTk9QT1JUID0gNA0K
ICAgICtjb25zdCBfUF9QSUQgPSAxDQogICAgK2NvbnN0IF9fVVRTTkFNRV9TWVNOQU1FX0xFTkdU
SCA9IF9fVVRTTkFNRV9MRU5HVEgNCiAgICArY29uc3QgX19QT1NJWF9NRU1MT0NLX1JBTkdFID0g
MjAwODA5DQogICAgK2NvbnN0IF9fX0RFQzEyOF9NSU5fRVhQX18gPSAoLTYxNDIpDQogICAgK2Nv
bnN0IF9OTE1fRl9NVUxUSSA9IDB4MDINCiAgICArY29uc3QgX1NPQ0tfQ0xPRVhFQyA9IDUyNDI4
OA0KICAgICtjb25zdCBfX19GTFRfTUFYX18gPSAxLjENCiAgICArY29uc3QgX1BPU0lYX0ZBRFZf
Tk9SRVVTRSA9IF9fX1BPU0lYX0ZBRFZfTk9SRVVTRQ0KICAgICtjb25zdCBfX19vc29ja2FkZHJf
ZGVmaW5lZCA9IDENCiAgICArY29uc3QgX1BUUkFDRV9PX1RSQUNFRVhFQyA9IDE2DQogICAgK2Nv
bnN0IF9VSU5UX0ZBU1Q2NF9XSURUSCA9IDY0DQogICAgK2NvbnN0IF9FVEhfUF9TTkFQID0gMHgw
MDA1DQogICAgK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX0JBUlJJRVJfVCA9IDMyDQogICAgK2Nv
bnN0IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRSA9IDE0DQogICAgK2NvbnN0IF9fQklUU19VSU9f
TElNX0ggPSAxDQogICAgK2NvbnN0IF9QVFJBQ0VfT19UUkFDRVZGT1JLRE9ORSA9IDMyDQogICAg
K2NvbnN0IF9fU0NfTE9HSU5fTkFNRV9NQVggPSA3MQ0KICAgICtjb25zdCBfRVRIRVJNVFUgPSBf
RVRIX0RBVEFfTEVODQogICAgK2NvbnN0IF9QT1NJWF9GQURWX0RPTlRORUVEID0gX19fUE9TSVhf
RkFEVl9ET05UTkVFRA0KICAgICtjb25zdCBfUlRQUk9UX0JBQkVMID0gNDINCiAgICArY29uc3Qg
X0ZfR0VUTEVBU0UgPSAxMDI1DQogICAgK2NvbnN0IF9fU0NfTEVWRUw0X0NBQ0hFX0FTU09DID0g
MTk4DQogICAgK2NvbnN0IF9JRkxBX1ZMQU5fUFJPVE9DT0wgPSA1DQogICAgK2NvbnN0IF9JUF9V
TkJMT0NLX1NPVVJDRSA9IDM3DQogICAgK2NvbnN0IF9TT19QQVNTQ1JFRCA9IDE2DQogICAgK2Nv
bnN0IF9DTE9DS19UQUkgPSAxMQ0KICAgICtjb25zdCBfTkdST1VQU19NQVggPSA2NTUzNg0KICAg
ICtjb25zdCBfRklPU0VUT1dOID0gMHg4OTAxDQogICAgK2NvbnN0IF9fU0NfUElJX09TSV9DT1RT
ID0gNjMNCiAgICArY29uc3QgX1NJT0NEQVJQID0gMHg4OTUzDQogICAgK2NvbnN0IF9NQVBfSFVH
RV9TSElGVCA9IDI2DQogICAgK2NvbnN0IF9VSU5UUFRSX01BWCA9ICgxODQ0Njc0NDA3MzcwOTU1
MTYxNSkNCiAgICArY29uc3QgX0VUSF9QX1dBTl9QUFAgPSAweDAwMDcNCiAgICArY29uc3QgX0lO
X0VYQ0xfVU5MSU5LID0gMHgwNDAwMDAwMA0KICAgICtjb25zdCBfWDg2X0NSMF9XUF9CSVQgPSAx
Ng0KICAgICtjb25zdCBfT19FWENMID0gMDIwMA0KICAgICtjb25zdCBfQlBGX05FRyA9IDB4ODAN
CiAgICArY29uc3QgX01TR19OT1NJR05BTCA9IDE2Mzg0DQogICAgK2NvbnN0IF9JUFY2X1JYSE9Q
T1BUUyA9IF9JUFY2X0hPUE9QVFMNCiAgICArY29uc3QgX0lGTEFfTUFDVkxBTl9NQUNBRERSX0NP
VU5UID0gNg0KICAgICtjb25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUyA9IDExMDEN
CiAgICArY29uc3QgX1BUUkFDRV9HRVRSRUdTRVQgPSAxNjkwMA0KICAgICtjb25zdCBfU0tGX0FE
X0lGSU5ERVggPSA4DQogICAgK2NvbnN0IF9fU1lTX01NQU5fSCA9IDENCiAgICArY29uc3QgX01T
X0FDVElWRSA9IDEwNzM3NDE4MjQNCiAgICArY29uc3QgX1JfT0sgPSA0DQogICAgK2NvbnN0IF9J
UFY2X1JFQ1ZGUkFHU0laRSA9IDc3DQogICAgK2NvbnN0IF9fX05SX3J0X3NpZ3JldHVybiA9IDE1
DQogICAgK2NvbnN0IF9fX0dOVUNfUEFUQ0hMRVZFTF9fID0gMA0KICAgICtjb25zdCBfX19OUl9n
ZXRpdGltZXIgPSAzNg0KICAgICtjb25zdCBfX19TSVpFT0ZfSU5UX18gPSA0DQogICAgK2NvbnN0
IF9fX1VJTlRfTEVBU1Q2NF9NQVhfXyA9IDB4ZmZmZmZmZmZmZmZmZmZmZg0KICAgICtjb25zdCBf
TkRUUEFfVUNBU1RfUFJPQkVTID0gMTANCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX1BBRCA9IDI2
DQogICAgK2NvbnN0IF9fWEJTNV9MUDY0X09GRjY0ID0gMQ0KICAgICtjb25zdCBfU0lHQUxSTSA9
IDE0DQogICAgK2NvbnN0IF9NU0dfT09CID0gMQ0KICAgICtjb25zdCBfUlROX1RIUk9XID0gOQ0K
ICAgICtjb25zdCBfVUxPTkdfV0lEVEggPSBfX19XT1JEU0laRQ0KICAgICtjb25zdCBfWDg2X0NS
NF9QU0VfQklUID0gNA0KICAgICtjb25zdCBfX1NDXzJfRk9SVF9ERVYgPSA0OQ0KICAgICtjb25z
dCBfX19OUl9zeXNsb2cgPSAxMDMNCiAgICArY29uc3QgX19DU19QT1NJWF9WNl9MUEJJR19PRkZC
SUdfQ0ZMQUdTID0gMTEyOA0KICAgICtjb25zdCBfX19HQ0NfQVRPTUlDX1NIT1JUX0xPQ0tfRlJF
RSA9IDINCiAgICArY29uc3QgX19fR0xJQkNfVVNFX0xJQl9FWFQyID0gMQ0KICAgICtjb25zdCBf
VElPQ05PVFRZX3ZhbCA9IDIxNTM4DQogICAgK2NvbnN0IF9BRl9QSE9ORVQgPSBfUEZfUEhPTkVU
DQogICAgK2NvbnN0IF9ORVRMSU5LX05FVEZJTFRFUiA9IDEyDQogICAgK2NvbnN0IF9FVEhfRkNT
X0xFTiA9IDQNCiAgICArY29uc3QgX0ZTX1hGTEFHX0FQUEVORCA9IDB4MDAwMDAwMTANCiAgICAr
Y29uc3QgX19fTlJfaW9jdGwgPSAxNg0KICAgICtjb25zdCBfQ1g4Nl9BUlJfQkFTRSA9IDB4YzQN
CiAgICArY29uc3QgX0FJX05VTUVSSUNTRVJWID0gMHgwNDAwDQogICAgK2NvbnN0IF9QUl9UU0Nf
RU5BQkxFID0gMQ0KICAgICtjb25zdCBfU0NIRURfSURMRSA9IDUNCiAgICArY29uc3QgX0ZfT0sg
PSAwDQogICAgK2NvbnN0IF9fU0NfTkxfVEVYVE1BWCA9IDEyNA0KICAgICtjb25zdCBfSVBPUFRf
TUVBU1VSRU1FTlQgPSBfSVBPUFRfREVCTUVBUw0KICAgICtjb25zdCBfUlRfVEFCTEVfQ09NUEFU
ID0gMjUyDQogICAgK2NvbnN0IF9fX05SX2dldHByaW9yaXR5ID0gMTQwDQogICAgK2NvbnN0IF9G
U19OT0NPV19GTCA9IDB4MDA4MDAwMDANCiAgICArY29uc3QgX0lGTEFfTlVNX1RYX1FVRVVFUyA9
IDMxDQogICAgK2NvbnN0IF9JUFY2X0hPUE9QVFMgPSA1NA0KICAgICtjb25zdCBfX19MT05HX0xP
TkdfTUFYX18gPSAweDdmZmZmZmZmZmZmZmZmZmYNCiAgICArY29uc3QgX1JUTV9ORVdORUlHSFRC
TCA9IDY0DQogICAgK2NvbnN0IF9UQ1BfUVVFVUVfU0VRID0gMjENCiAgICArY29uc3QgX0lGTEFf
SU5GT19TTEFWRV9EQVRBID0gNQ0KICAgICtjb25zdCBfX19WRVJTSU9OX18gPSAiOC4zLjAiDQog
ICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9JRCA9IDENCiAgICArY29uc3QgX0lDTVA2X1BBUkFNUFJP
Ql9ORVhUSEVBREVSID0gMQ0KICAgICtjb25zdCBfU1lTX2RlbGV0ZV9tb2R1bGUgPSBfX19OUl9k
ZWxldGVfbW9kdWxlDQogICAgK2NvbnN0IF9JUFY2X1JUSERSID0gNTcNCiAgICArY29uc3QgX0xM
T05HX01JTiA9ICgtX0xMT05HX01BWCAtIDEpDQogICAgK2NvbnN0IF9FQ09NTSA9IDcwDQogICAg
K2NvbnN0IF9TWVNfdGltZXJfZ2V0dGltZSA9IF9fX05SX3RpbWVyX2dldHRpbWUNCiAgICArY29u
c3QgX19fTlJfbWlncmF0ZV9wYWdlcyA9IDI1Ng0KICAgICtjb25zdCBfSU5fTU9WRSA9IChfSU5f
TU9WRURfRlJPTSB8IF9JTl9NT1ZFRF9UTykNCiAgICArY29uc3QgX1BPUlRfUkVRVUVTVF9QUkVB
U1NPQ0lBVEUgPSAwDQogICAgK2NvbnN0IF9OX0FYMjUgPSA1DQogICAgK2NvbnN0IF9fX09fQ0xP
RVhFQyA9IDAyMDAwMDAwDQogICAgK2NvbnN0IF9WV0VSQVNFID0gMTQNCiAgICArY29uc3QgX19f
SU5PX1RfTUFUQ0hFU19JTk82NF9UID0gMQ0KICAgICtjb25zdCBfRUxJQkFDQyA9IDc5DQogICAg
K2NvbnN0IF9JUE9QVF9TRUNVUl9VTkNMQVNTID0gMHgwMDAwDQogICAgK2NvbnN0IF9fUE9TSVhf
U0hBUkVEX01FTU9SWV9PQkpFQ1RTID0gMjAwODA5DQogICAgK2NvbnN0IF9BUlBIUkRfSVBERFAg
PSA3NzcNCiAgICArY29uc3QgX0lGTEFfQk9ORF9TTEFWRV9TVEFURSA9IDENCiAgICArY29uc3Qg
X1JMSU1JVF9TVEFDSyA9IDMNCiAgICArY29uc3QgX1BGX0FTSCA9IDE4DQogICAgK2NvbnN0IF9f
X05SX2dldHBlZXJuYW1lID0gNTINCiAgICArY29uc3QgX0lQVjZfUkVDVkVSUiA9IDI1DQogICAg
K2NvbnN0IF9OX1NUUklQID0gNA0KICAgICtjb25zdCBfSVBQUk9UT19JQ01QID0gMQ0KICAgICtj
b25zdCBfUFJfU1ZFX1ZMX0xFTl9NQVNLID0gMHhmZmZmDQogICAgK2NvbnN0IF9GX0dFVFBJUEVf
U1ogPSAxMDMyDQogICAgK2NvbnN0IF9JT1ZfTUFYID0gX19fSU9WX01BWA0KICAgICtjb25zdCBf
UlRQUk9UX1JJUCA9IDE4OQ0KICAgICtjb25zdCBfX19OUl9uZXdmc3RhdGF0ID0gMjYyDQogICAg
K2NvbnN0IF9fU1lTX01PVU5UX0ggPSAxDQogICAgK2NvbnN0IF9QUl9UQVNLX1BFUkZfRVZFTlRT
X0VOQUJMRSA9IDMyDQogICAgK2NvbnN0IF9JUFBST1RPX1BVUCA9IDEyDQogICAgK2NvbnN0IF9F
VEhfUF9TTE9XID0gMHg4ODA5DQogICAgK2NvbnN0IF9TWVNfaW5vdGlmeV9ybV93YXRjaCA9IF9f
X05SX2lub3RpZnlfcm1fd2F0Y2gNCiAgICArY29uc3QgX1RDU0VUQVcgPSAweDU0MDcNCiAgICAr
Y29uc3QgX1BBQ0tFVF9NVUxUSUNBU1QgPSAyDQogICAgK2NvbnN0IF9fX0lOVDMyX01BWF9fID0g
MHg3ZmZmZmZmZg0KICAgICtjb25zdCBfTElOVVhfUkVCT09UX0NNRF9DQURfT04gPSAweDg5QUJD
REVGDQogICAgK2NvbnN0IF9JRkxBX0JPTkRfQURfQUNUT1JfU1lTX1BSSU8gPSAyNA0KICAgICtj
b25zdCBfUFJfU0VUX0RVTVBBQkxFID0gNA0KICAgICtjb25zdCBfRVRIX1BfRUNPTkVUID0gMHgw
MDE4DQogICAgK2NvbnN0IF9TWVNfc2htY3RsID0gX19fTlJfc2htY3RsDQogICAgK2NvbnN0IF9N
U19TSEFSRUQgPSAxMDQ4NTc2DQogICAgK2NvbnN0IF9fX0lGTEFfUFBQX01BWCA9IDINCiAgICAr
Y29uc3QgX0hBVkVfU1lTX1NUQVRGU19IID0gMQ0KICAgICtjb25zdCBfWERQX0ZMQUdTX01BU0sg
PSAoX1hEUF9GTEFHU19VUERBVEVfSUZfTk9FWElTVCB8IF9YRFBfRkxBR1NfTU9ERVMpDQogICAg
K2NvbnN0IF9USU9DR1JTNDg1ID0gMHg1NDJFDQogICAgK2NvbnN0IF9JUFY2X1JFQ1ZQS1RJTkZP
ID0gNDkNCiAgICArY29uc3QgX0hBVkVfTElOVVhfUkVCT09UX0ggPSAxDQogICAgK2NvbnN0IF9U
Q1BfTk9ERUxBWSA9IDENCiAgICArY29uc3QgX1BSRUZJWF9BRERSRVNTID0gMQ0KICAgICtjb25z
dCBfUlBNX1BDT19BREQgPSAxDQogICAgK2NvbnN0IF9UQ1BPUFRfTUFYU0VHID0gMg0KICAgICtj
b25zdCBfU1lTX3NjaGVkX2dldGFmZmluaXR5ID0gX19fTlJfc2NoZWRfZ2V0YWZmaW5pdHkNCiAg
ICArY29uc3QgX19SRUVOVFJBTlQgPSAxDQogICAgK2NvbnN0IF9JUFY2X0RST1BfTUVNQkVSU0hJ
UCA9IF9JUFY2X0xFQVZFX0dST1VQDQogICAgK2NvbnN0IF9fWE9QRU5fWFBHMyA9IDENCiAgICAr
Y29uc3QgX0VNRklMRSA9IDI0DQogICAgK2NvbnN0IF9fU0NfWE9QRU5fUkVBTFRJTUUgPSAxMzAN
CiAgICArY29uc3QgX1RIX1BVU0ggPSAweDA4DQogICAgK2NvbnN0IF9JRkxBX0JSX1BBRCA9IDQw
DQogICAgK2NvbnN0IF9DTERfS0lMTEVEID0gMg0KICAgICtjb25zdCBfU0lHVFRPVSA9IDIyDQog
ICAgK2NvbnN0IF9JRkxBX1ZGX1NQT09GQ0hLID0gNA0KICAgICtjb25zdCBfX1NDX01CX0xFTl9N
QVggPSAxMDgNCiAgICArY29uc3QgX19fVUlOVDY0X01BWF9fID0gMHhmZmZmZmZmZmZmZmZmZmZm
DQogICAgK2NvbnN0IF9JRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9SWCA9IDEwDQogICAgK2Nv
bnN0IF9fX2xpbnV4ID0gMQ0KICAgICtjb25zdCBfUkxJTUlUX05PRklMRSA9IDcNCiAgICArY29u
c3QgX0lGTEFfQk9ORF9UTEJfRFlOQU1JQ19MQiA9IDI3DQogICAgK2NvbnN0IF9ORFRBX0NPTkZJ
RyA9IDUNCiAgICArY29uc3QgX19QT1NJWDJfQ19WRVJTSU9OID0gX19fUE9TSVgyX1RISVNfVkVS
U0lPTg0KICAgICtjb25zdCBfX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OID0gMjAwODA5DQogICAg
K2NvbnN0IF9fU0NfUkVHRVhfVkVSU0lPTiA9IDE1Ng0KICAgICtjb25zdCBfSUZMQV9JTkVUNl9J
Q01QNlNUQVRTID0gNg0KICAgICtjb25zdCBfX05FVERCX0ggPSAxDQogICAgK2NvbnN0IF9GSU9B
U1lOQyA9IDB4NTQ1Mg0KICAgICtjb25zdCBfSUZMQV9WWExBTl9MM01JU1MgPSAxNA0KICAgICtj
b25zdCBfX19TX0lTR0lEID0gMDIwMDANCiAgICArY29uc3QgX01TX1ZFUkJPU0UgPSAzMjc2OA0K
ICAgICtjb25zdCBfTkRUQV9HQ19JTlRFUlZBTCA9IDgNCiAgICArY29uc3QgX0VUSF9QX0lSREEg
PSAweDAwMTcNCiAgICArY29uc3QgX19fTlJfaW5vdGlmeV9ybV93YXRjaCA9IDI1NQ0KICAgICtj
b25zdCBfU1lTX3B3cml0ZXYgPSBfX19OUl9wd3JpdGV2DQogICAgK2NvbnN0IF9fX3NpZ3N0YWNr
X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9fX0dDQ19BVE9NSUNfUE9JTlRFUl9MT0NLX0ZSRUUg
PSAyDQogICAgK2NvbnN0IF9fU0NfQ19MQU5HX1NVUFBPUlQgPSAxMzUNCiAgICArY29uc3QgX0Zf
U0VBTF9HUk9XID0gMHgwMDA0DQogICAgK2NvbnN0IF9OTF9NTUFQX1NUQVRVU19SRVNFUlZFRCA9
IDENCiAgICArY29uc3QgX0hBVkVfTE9GRl9UID0gMQ0KICAgICtjb25zdCBfX1BPU0lYX0hJV0FU
ID0gX19QT1NJWF9QSVBFX0JVRg0KICAgICtjb25zdCBfUFJfR0VUX1RIUF9ESVNBQkxFID0gNDIN
CiAgICArY29uc3QgX19CSVRTX0JZVEVTV0FQX0ggPSAxDQogICAgK2NvbnN0IF9GX1RFU1QgPSAz
DQogICAgK2NvbnN0IF9NUkVNQVBfRklYRUQgPSAyDQogICAgK2NvbnN0IF9NQVhfQUREUl9MRU4g
PSA3DQogICAgK2NvbnN0IF9fU0NfTE9OR19CSVQgPSAxMDYNCiAgICArY29uc3QgX09OT0NSID0g
MDAwMDAyMA0KICAgICtjb25zdCBfU0lfTUVTR1EgPSAtMw0KICAgICtjb25zdCBfUFJJZEZBU1Q4
ID0gImQiDQogICAgK2NvbnN0IF9JRkxBX01BQ1NFQ19QT1JUID0gMg0KICAgICtjb25zdCBfQ0JB
VUQgPSAwMDEwMDE3DQogICAgK2NvbnN0IF9TWVNfc2V0ZnN1aWQgPSBfX19OUl9zZXRmc3VpZA0K
ICAgICtjb25zdCBfX1NDX01BUFBFRF9GSUxFUyA9IDE2DQogICAgK2NvbnN0IF9GRklfTE9OR19M
T05HX01BWCA9IF9MT05HX0xPTkdfTUFYDQogICAgK2NvbnN0IF9ORF9SQV9GTEFHX09USEVSID0g
MHg0MA0KICAgICtjb25zdCBfVFJBUF9UUkFDRSA9IDINCiAgICArY29uc3QgX19TQ19SQVdfU09D
S0VUUyA9IDIzNg0KICAgICtjb25zdCBfRlNfWEZMQUdfU1lOQyA9IDB4MDAwMDAwMjANCiAgICAr
Y29uc3QgX0lGTEFfQk9ORF9BUlBfSVBfVEFSR0VUID0gOA0KICAgICtjb25zdCBfX1BPU0lYX1JF
R0VYUCA9IDENCiAgICArY29uc3QgX1RDUF9JTkZPID0gMTENCiAgICArY29uc3QgX0lGTEFfQlJQ
T1JUX01DQVNUX1RPX1VDQVNUID0gMjgNCiAgICArY29uc3QgX1BGX05GQyA9IDM5DQogICAgK2Nv
bnN0IF9TX0lGSUZPID0gX19fU19JRklGTw0KICAgICtjb25zdCBfRUFJX05PVENBTkNFTEVEID0g
LTEwMg0KICAgICtjb25zdCBfUFRSQUNFX09fVFJBQ0VFWElUID0gNjQNCiAgICArY29uc3QgX1NU
QV9ST05MWSA9IChfU1RBX1BQU1NJR05BTCB8IF9TVEFfUFBTSklUVEVSIHwgX1NUQV9QUFNXQU5E
RVIgfCBfU1RBX1BQU0VSUk9SIHwgX1NUQV9DTE9DS0VSUiB8IF9TVEFfTkFOTyB8IF9TVEFfTU9E
RSB8IF9TVEFfQ0xLKQ0KICAgICtjb25zdCBfVENQX0ZJTl9XQUlUMSA9IDQNCiAgICArY29uc3Qg
X0lGTEFfSU5FVDZfU1RBVFMgPSAzDQogICAgK2NvbnN0IF9fSU9DX1RZUEVTSElGVCA9IChfX0lP
Q19OUlNISUZUK19fSU9DX05SQklUUykNCiAgICArY29uc3QgX19fRkxUMTI4X01JTl9fID0gMS4x
DQogICAgK2NvbnN0IF9SVEZfV0lORE9XID0gMHgwMDgwDQogICAgK2NvbnN0IF9QUl9HRVRfQ0hJ
TERfU1VCUkVBUEVSID0gMzcNCiAgICArY29uc3QgX1JUTkxHUlBfSVBWNF9NUk9VVEUgPSA2DQog
ICAgK2NvbnN0IF9OT19BRERSRVNTID0gX05PX0RBVEENCiAgICArY29uc3QgX1NZU19mY2hvd25h
dCA9IF9fX05SX2ZjaG93bmF0DQogICAgK2NvbnN0IF9fX05SX2dldGN3ZCA9IDc5DQogICAgK2Nv
bnN0IF9QUkVGSVhfQ0FDSEVJTkZPID0gMg0KICAgICtjb25zdCBfSVBPUFRfT0xFTiA9IDENCiAg
ICArY29uc3QgX1NZU19mY2htb2QgPSBfX19OUl9mY2htb2QNCiAgICArY29uc3QgX19TQ19CQ19E
SU1fTUFYID0gMzcNCiAgICArY29uc3QgX1NZU19zZW1vcCA9IF9fX05SX3NlbW9wDQogICAgK2Nv
bnN0IF9JRkxBX1ZGX1NUQVRTX1JYX1BBQ0tFVFMgPSAwDQogICAgK2NvbnN0IF9fX1BUSFJFQURf
TVVURVhfVVNFX1VOSU9OID0gMA0KICAgICtjb25zdCBfVENJRkxVU0ggPSAwDQogICAgK2NvbnN0
IF9FQkFEU0xUID0gNTcNCiAgICArY29uc3QgX0VUSEVSVFlQRV9SRVZBUlAgPSAweDgwMzUNCiAg
ICArY29uc3QgX0hBVkVfRVBPTExfQ1JFQVRFMSA9IDENCiAgICArY29uc3QgX19CSVRTX1RZUEVT
X19fTE9DQUxFX1RfSCA9IDENCiAgICArY29uc3QgX19fR05VQ19fID0gOA0KICAgICtjb25zdCBf
U0NOZExFQVNUOCA9ICJoaGQiDQogICAgK2NvbnN0IF9CMCA9IDAwMDAwMDANCiAgICArY29uc3Qg
X0hBVkVfU1lTX0lOT1RJRllfSCA9IDENCiAgICArY29uc3QgX19fU19JRkRJUiA9IDAwNDAwMDAN
CiAgICArY29uc3QgX1RDQV9ST09UX1RJTUVfREVMVEEgPSA0DQogICAgK2NvbnN0IF9DTE9ORV9U
SFJFQUQgPSAweDAwMDEwMDAwDQogICAgK2NvbnN0IF9NU19QT1NJWEFDTCA9IDY1NTM2DQogICAg
K2NvbnN0IF9QQVRIX01BWCA9IDQwOTYNCiAgICArY29uc3QgX0lGTEFfVU5TUEVDID0gMA0KICAg
ICtjb25zdCBfX19OUl9yZWJvb3QgPSAxNjkNCiAgICArY29uc3QgX1NPTF9JUCA9IDANCiAgICAr
Y29uc3QgX1RVTl9GX1VGTyA9IDB4MTANCiAgICArY29uc3QgX19fRkxUNjRfSEFTX0RFTk9STV9f
ID0gMQ0KICAgICtjb25zdCBfSVBUT1NfUFJFQ19DUklUSUNfRUNQID0gX0lQVE9TX0NMQVNTX0NT
NQ0KICAgICtjb25zdCBfSU5fTE9PUEJBQ0tORVQgPSAxMjcNCiAgICArY29uc3QgX1NPTF9BQUwg
PSAyNjUNCiAgICArY29uc3QgX1NZU19zZXR0aW1lb2ZkYXkgPSBfX19OUl9zZXR0aW1lb2ZkYXkN
CiAgICArY29uc3QgX0lQUFJPVE9fSURQID0gMjINCiAgICArY29uc3QgX19TQ18yX0xPQ0FMRURF
RiA9IDUyDQogICAgK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1BBRCA9IDYNCiAgICArY29uc3QgX0FG
X0lORVQgPSBfUEZfSU5FVA0KICAgICtjb25zdCBfRl9TRVRMSyA9IF9GX1NFVExLNjQNCiAgICAr
Y29uc3QgX0NYODZfUENSMSA9IDB4ZjANCiAgICArY29uc3QgX19fTlJfbHJlbW92ZXhhdHRyID0g
MTk4DQogICAgK2NvbnN0IF9JUE9QVF9OT09QID0gX0lQT1BUX05PUA0KICAgICtjb25zdCBfUlRN
U0dfTkVXREVWSUNFID0gMHgxMQ0KICAgICtjb25zdCBfSEFWRV9TRVRYQVRUUiA9IDENCiAgICAr
Y29uc3QgX0ZTX0VOQ1JZUFRJT05fTU9ERV9BRVNfMjU2X0NUUyA9IDQNCiAgICArY29uc3QgX19D
U19WNV9XSURUSF9SRVNUUklDVEVEX0VOVlMgPSA0DQogICAgK2NvbnN0IF9TX0lGU09DSyA9IF9f
X1NfSUZTT0NLDQogICAgK2NvbnN0IF9fX05SX3NpZ25hbGZkNCA9IDI4OQ0KICAgICtjb25zdCBf
X0lTT0M5OV9TT1VSQ0UgPSAxDQogICAgK2NvbnN0IF9fX0ZMVF9ESUdfXyA9IDYNCiAgICArY29u
c3QgX19fTlJfZ2V0cGlkID0gMzkNCiAgICArY29uc3QgX1VMTE9OR19XSURUSCA9IDY0DQogICAg
K2NvbnN0IF9fU0NfWE9QRU5fWFBHMiA9IDk4DQogICAgK2NvbnN0IF9TWVNfa2lsbCA9IF9fX05S
X2tpbGwNCiAgICArY29uc3QgX0IxMTAgPSAwMDAwMDAzDQogICAgK2NvbnN0IF9UQ1BfUkVQQUlS
X1FVRVVFID0gMjANCiAgICArY29uc3QgX1JUTkxHUlBfSVBWNF9JRkFERFIgPSA1DQogICAgK2Nv
bnN0IF9fX0ZYU1JfXyA9IDENCiAgICArY29uc3QgX01BQ1ZMQU5fTU9ERV9QUklWQVRFID0gMQ0K
ICAgICtjb25zdCBfX19OUl9zdGF0eCA9IDMzMg0KICAgICtjb25zdCBfX19TSVpFX1dJRFRIX18g
PSA2NA0KICAgICtjb25zdCBfX1BPU0lYX1RUWV9OQU1FX01BWCA9IDkNCiAgICArY29uc3QgX0lG
TEFfQk9ORF9BRF9BQ1RPUl9TWVNURU0gPSAyNg0KICAgICtjb25zdCBfU09fR0VUX0ZJTFRFUiA9
IF9TT19BVFRBQ0hfRklMVEVSDQogICAgK2NvbnN0IF9fVVRJTUVfSCA9IDENCiAgICArY29uc3Qg
X1NUQVRYX0JBU0lDX1NUQVRTID0gMHgwN2ZmDQogICAgK2NvbnN0IF9TWVNfdXRpbWVuc2F0ID0g
X19fTlJfdXRpbWVuc2F0DQogICAgK2NvbnN0IF9fU0NfMl9DSEFSX1RFUk0gPSA5NQ0KICAgICtj
b25zdCBfVFVOU0VUT1dORVJfdmFsID0gMTA3NDAyNTY3Ng0KICAgICtjb25zdCBfUFRIUkVBRF9T
VEFDS19NSU4gPSAxNjM4NA0KICAgICtjb25zdCBfU0lHUFJPRiA9IDI3DQogICAgK2NvbnN0IF9f
U0NfTElORV9NQVggPSA0Mw0KICAgICtjb25zdCBfX19TSUdFVl9NQVhfU0laRSA9IDY0DQogICAg
K2NvbnN0IF9IQVZFX1NFVEVOViA9IDENCiAgICArY29uc3QgX19TQ19TWVNURU1fREFUQUJBU0Ug
PSAxNjINCiAgICArY29uc3QgX0ZTX1hGTEFHX05PRFVNUCA9IDB4MDAwMDAwODANCiAgICArY29u
c3QgX1NZU190aW1lcl9jcmVhdGUgPSBfX19OUl90aW1lcl9jcmVhdGUNCiAgICArY29uc3QgX19Q
Q19MSU5LX01BWCA9IDANCiAgICArY29uc3QgX1RDUE9QVF9XSU5ET1cgPSAzDQogICAgK2NvbnN0
IF9fQklUU19QT1NJWDJfTElNX0ggPSAxDQogICAgK2NvbnN0IF9fX1VJTlRfTEVBU1QzMl9NQVhf
XyA9IDB4ZmZmZmZmZmYNCiAgICArY29uc3QgX19fTlJfbXFfbm90aWZ5ID0gMjQ0DQogICAgK2Nv
bnN0IF9JUFBPUlRfREFZVElNRSA9IDEzDQogICAgK2NvbnN0IF9TWVNfc3RhdCA9IF9fX05SX3N0
YXQNCiAgICArY29uc3QgX1BBUkVOQiA9IDAwMDA0MDANCiAgICArY29uc3QgX0ZBTExPQ19GTF9L
RUVQX1NJWkUgPSAweDAxDQogICAgK2NvbnN0IF9fU0NfU0NIQVJfTUFYID0gMTExDQogICAgK2Nv
bnN0IF9JRkxBX0JSX01DQVNUX1FVRVJJRVIgPSAyNQ0KICAgICtjb25zdCBfTUFEVl9IV1BPSVNP
TiA9IDEwMA0KICAgICtjb25zdCBfU09fQ09PS0lFID0gNTcNCiAgICArY29uc3QgX19QT1NJWF9B
U1lOQ19JTyA9IDENCiAgICArY29uc3QgX1JUX1NDT1BFX05PV0hFUkUgPSAyNTUNCiAgICArY29u
c3QgX0lGTEFfQk9ORF9TTEFWRV9BRF9BQ1RPUl9PUEVSX1BPUlRfU1RBVEUgPSA3DQogICAgK2Nv
bnN0IF9ORF9PUFRfUElfRkxBR19PTkxJTksgPSAweDgwDQogICAgK2NvbnN0IF9fU0NfVEhSRUFE
X1BST0NFU1NfU0hBUkVEID0gODINCiAgICArY29uc3QgX1NZU19zZXRkb21haW5uYW1lID0gX19f
TlJfc2V0ZG9tYWlubmFtZQ0KICAgICtjb25zdCBfRl9HRVRPV05fRVggPSBfX19GX0dFVE9XTl9F
WA0KICAgICtjb25zdCBfRVNUQUxFID0gMTE2DQogICAgK2NvbnN0IF9fX05SX2Z1dGV4ID0gMjAy
DQogICAgK2NvbnN0IF9JRkZfREVUQUNIX1FVRVVFID0gMHgwNDAwDQogICAgK2NvbnN0IF9JRkxB
X0xJTktNT0RFID0gMTcNCiAgICArY29uc3QgX0lQT1BUX1NFQ1VSSVRZID0gMTMwDQogICAgK2Nv
bnN0IF9JRkxBX0JSX1NUUF9TVEFURSA9IDUNCiAgICArY29uc3QgX19QQ19OQU1FX01BWCA9IDMN
CiAgICArY29uc3QgX0lGTEFfR0VORVZFX1VEUF9aRVJPX0NTVU02X1RYID0gOQ0KICAgICtjb25z
dCBfU0lHQ09OVCA9IDE4DQogICAgK2NvbnN0IF9fX05SX2dldHBtc2cgPSAxODENCiAgICArY29u
c3QgX1NZU19mY2hkaXIgPSBfX19OUl9mY2hkaXINCiAgICArY29uc3QgX0lGRl9QT1JUU0VMID0g
ODE5Mg0KICAgICtjb25zdCBfU09fQVRUQUNIX1JFVVNFUE9SVF9DQlBGID0gNTENCiAgICArY29u
c3QgX1RDQV9ST09UX0ZMQUdTID0gMg0KICAgICtjb25zdCBfX1NDX1Y2X0lMUDMyX09GRkJJRyA9
IDE3Nw0KICAgICtjb25zdCBfTUFYX0NBTk9OID0gMjU1DQogICAgK2NvbnN0IF9JRkxBX0JPTkRf
WE1JVF9IQVNIX1BPTElDWSA9IDE0DQogICAgK2NvbnN0IF9FVEhFUl9DUkNfTEVOID0gNA0KICAg
ICtjb25zdCBfSUZMQV9JTkZPX0RBVEEgPSAyDQogICAgK2NvbnN0IF9fX0xJTktfWFNUQVRTX1RZ
UEVfTUFYID0gMg0KICAgICtjb25zdCBfTlRGX1BST1hZID0gMHgwOA0KICAgICtjb25zdCBfUlRQ
Uk9UX0VJR1JQID0gMTkyDQogICAgK2NvbnN0IF9fQ1NfVjdfRU5WID0gMTE0OQ0KICAgICtjb25z
dCBfQUlfSUROID0gMHgwMDQwDQogICAgK2NvbnN0IF9TX0lST1RIID0gKF9TX0lSR1JQID4+IDMp
DQogICAgK2NvbnN0IF9SVE5MR1JQX05PTkUgPSAwDQogICAgK2NvbnN0IF9JUFBST1RPX0dSRSA9
IDQ3DQogICAgK2NvbnN0IF9XRVhJVEVEID0gNA0KICAgICtjb25zdCBfUEFDS0VUX1RYX1RJTUVT
VEFNUCA9IDE2DQogICAgK2NvbnN0IF9FUE9MTEhVUCA9IDE2DQogICAgK2NvbnN0IF9MVF9PQkpE
SVIgPSAiLmxpYnMvIg0KICAgICtjb25zdCBfX19SVEFYX01BWCA9IDE4DQogICAgK2NvbnN0IF9Q
QUNLRVRfSERSTEVOID0gMTENCiAgICArY29uc3QgX0JQRl9MU0ggPSAweDYwDQogICAgK2NvbnN0
IF9UQ1BPTEVOX1NBQ0tfUEVSTUlUVEVEID0gMg0KICAgICtjb25zdCBfUE9MTF9QUkkgPSA1DQog
ICAgK2NvbnN0IF9fX05SX3NldHJldWlkID0gMTEzDQogICAgK2NvbnN0IF9GU19YRkxBR19OT0RF
RlJBRyA9IDB4MDAwMDIwMDANCiAgICArY29uc3QgX19TQ18yX1BCUyA9IDE2OA0KICAgICtjb25z
dCBfU0lPQ1NJRkZMQUdTID0gMHg4OTE0DQogICAgK2NvbnN0IF9fX0ZfR0VUT1dOID0gOQ0KICAg
ICtjb25zdCBfX19JRkxBX0JPTkRfQURfSU5GT19NQVggPSA2DQogICAgK2NvbnN0IF9CUEZfTUFY
SU5TTlMgPSA0MDk2DQogICAgK2NvbnN0IF9FQUlfSUROX0VOQ09ERSA9IC0xMDUNCiAgICArY29u
c3QgX0lGTEFfVkZfU1RBVFNfVFhfUEFDS0VUUyA9IDENCiAgICArY29uc3QgX1JXSF9XUklURV9M
SUZFX01FRElVTSA9IDMNCiAgICArY29uc3QgX0ZJTEVfREVEVVBFX1JBTkdFX1NBTUUgPSAwDQog
ICAgK2NvbnN0IF9JUFBST1RPX1RDUCA9IDYNCiAgICArY29uc3QgX1RJT0NNX0NEID0gX1RJT0NN
X0NBUg0KICAgICtjb25zdCBfQjEzNCA9IDAwMDAwMDQNCiAgICArY29uc3QgX0VBSV9GQU1JTFkg
PSAtNg0KICAgICtjb25zdCBfSUZMQV9CUlBPUlRfQkNBU1RfRkxPT0QgPSAzMA0KICAgICtjb25z
dCBfU1lTX2Zsb2NrID0gX19fTlJfZmxvY2sNCiAgICArY29uc3QgX0hBVkVfTkVUUEFDS0VUX1BB
Q0tFVF9IID0gMQ0KICAgICtjb25zdCBfRVRIX1BfUFJQID0gMHg4OEZCDQogICAgK2NvbnN0IF9P
RklMTCA9IDAwMDAxMDANCiAgICArY29uc3QgX19DU19MRlM2NF9MSUJTID0gMTAwNg0KICAgICtj
b25zdCBfRlNfRU5DUllQVElPTl9NT0RFX0FFU18yNTZfWFRTID0gMQ0KICAgICtjb25zdCBfSUZM
QV9HVFBfRkQwID0gMQ0KICAgICtjb25zdCBfSUZMQV9HVFBfRkQxID0gMg0KICAgICtjb25zdCBf
SEFWRV9TWU5DX0ZJTEVfUkFOR0UgPSAxDQogICAgK2NvbnN0IF9JRkFfTE9DQUwgPSAyDQogICAg
K2NvbnN0IF9ORF9PUFRfUElfRkxBR19SQUREUiA9IDB4MjANCiAgICArY29uc3QgX1RDUF9ERUZF
Ul9BQ0NFUFQgPSA5DQogICAgK2NvbnN0IF9NQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCA9IDQ2DQog
ICAgK2NvbnN0IF9TWVNfcmVxdWVzdF9rZXkgPSBfX19OUl9yZXF1ZXN0X2tleQ0KICAgICtjb25z
dCBfSUNNUDZfUEFDS0VUX1RPT19CSUcgPSAyDQogICAgK2NvbnN0IF9YODZfQ1I0X1BDRV9CSVQg
PSA4DQogICAgK2NvbnN0IF9FQUlfQkFERkxBR1MgPSAtMQ0KICAgICtjb25zdCBfX0NTX1hCUzVf
TFBCSUdfT0ZGQklHX0xJTlRGTEFHUyA9IDExMTUNCiAgICArY29uc3QgX1VUSU1FX05PVyA9ICgo
MSA8PCAzMCkgLSAxKQ0KICAgICtjb25zdCBfX1BPU0lYX01BWF9JTlBVVCA9IDI1NQ0KICAgICtj
b25zdCBfSUZMQV9CUlBPUlRfSUQgPSAxNw0KICAgICtjb25zdCBfRVRIX0RBVEFfTEVOID0gMTUw
MA0KICAgICtjb25zdCBfX19STElNSVRfU0lHUEVORElORyA9IDExDQogICAgK2NvbnN0IF9TWVNf
aW9fZGVzdHJveSA9IF9fX05SX2lvX2Rlc3Ryb3kNCiAgICArY29uc3QgX1NPX0lOQ09NSU5HX05B
UElfSUQgPSA1Ng0KICAgICtjb25zdCBfRVRIX1BfUFBQX0RJU0MgPSAweDg4NjMNCiAgICArY29u
c3QgX1RDUE9MRU5fTUFYU0VHID0gNA0KICAgICtjb25zdCBfRVRIX1BfODAyXzNfTUlOID0gMHgw
NjAwDQogICAgK2NvbnN0IF9BUlBPUF9SUkVQTFkgPSA0DQogICAgK2NvbnN0IF9JUFY2X1VOSUNB
U1RfSE9QUyA9IDE2DQogICAgK2NvbnN0IF9ORVRMSU5LX05PX0VOT0JVRlMgPSA1DQogICAgK2Nv
bnN0IF9fX05SX25hbWVfdG9faGFuZGxlX2F0ID0gMzAzDQogICAgK2NvbnN0IF9fX0ZMVDMyX01B
WF9fID0gMS4xDQogICAgK2NvbnN0IF9TWVNfdGltZXJmZF9jcmVhdGUgPSBfX19OUl90aW1lcmZk
X2NyZWF0ZQ0KICAgICtjb25zdCBfSU5fTU9WRURfVE8gPSAweDAwMDAwMDgwDQogICAgK2NvbnN0
IF9TWVNfZ2V0dGlkID0gX19fTlJfZ2V0dGlkDQogICAgK2NvbnN0IF9fUE9TSVhfSVBWNiA9IDIw
MDgwOQ0KICAgICtjb25zdCBfQUZfTVBMUyA9IF9QRl9NUExTDQogICAgK2NvbnN0IF9TWVNfZmFs
bG9jYXRlID0gX19fTlJfZmFsbG9jYXRlDQogICAgK2NvbnN0IF9BRl9XQU5QSVBFID0gX1BGX1dB
TlBJUEUNCiAgICArY29uc3QgX1RDUF9USElOX0xJTkVBUl9USU1FT1VUUyA9IDE2DQogICAgK2Nv
bnN0IF9fX05SX3NldGRvbWFpbm5hbWUgPSAxNzENCiAgICArY29uc3QgX19fTkxNU0dFUlJfQVRU
Ul9NQVggPSA0DQogICAgK2NvbnN0IF9fX0ZMVDEyOF9IQVNfREVOT1JNX18gPSAxDQogICAgK2Nv
bnN0IF9FVEhFUlRZUEVfUFVQID0gMHgwMjAwDQogICAgK2NvbnN0IF9fQklUU19QT1NJWDFfTElN
X0ggPSAxDQogICAgK2NvbnN0IF9fX0dMSUJDX1VTRV9JRUNfNjA1NTlfVFlQRVNfRVhUID0gMQ0K
ICAgICtjb25zdCBfSVBWNl9SRUNWRFNUT1BUUyA9IDU4DQogICAgK2NvbnN0IF9fX05SX3NlY3Vy
aXR5ID0gMTg1DQogICAgK2NvbnN0IF9BUlBIUkRfUkFXSVAgPSA1MTkNCiAgICArY29uc3QgX0VU
SF9QXzgwMl9FWDEgPSAweDg4QjUNCiAgICArY29uc3QgX0lGQV9GX0RBREZBSUxFRCA9IDB4MDgN
CiAgICArY29uc3QgX1NDTng4ID0gImhoeCINCiAgICArY29uc3QgX0NTSUdOQUwgPSAweDAwMDAw
MGZmDQogICAgK2NvbnN0IF9fX05SX2FjY2VwdDQgPSAyODgNCiAgICArY29uc3QgX05JX05VTUVS
SUNIT1NUID0gMQ0KICAgICtjb25zdCBfUlROSF9GX1VOUkVTT0xWRUQgPSAzMg0KICAgICtjb25z
dCBfQjk2MDAgPSAwMDAwMDE1DQogICAgK2NvbnN0IF9OTF9NTUFQX1NUQVRVU19VTlVTRUQgPSAw
DQogICAgK2NvbnN0IF9TT19MT0NLX0ZJTFRFUiA9IDQ0DQogICAgK2NvbnN0IF9JRkxBX1ZGX01B
QyA9IDENCiAgICArY29uc3QgX0lGTEFfVlhMQU5fUkVNQ1NVTV9UWCA9IDIxDQogICAgK2NvbnN0
IF9VQ0hBUl9NQVggPSAoX1NDSEFSX01BWCAqIDIgKyAxKQ0KICAgICtjb25zdCBfSUZMQV9CT05E
X0FSUF9WQUxJREFURSA9IDkNCiAgICArY29uc3QgX0lQUFJPVE9fTVBMUyA9IDEzNw0KICAgICtj
b25zdCBfSUZMQV9NSU5fTVRVID0gNTANCiAgICArY29uc3QgX0VUSF9QX0lQVjYgPSAweDg2REQN
CiAgICArY29uc3QgX0VUSF9QX0FBUlAgPSAweDgwRjMNCiAgICArY29uc3QgX1NZU19zY2hlZF9z
ZXRwYXJhbSA9IF9fX05SX3NjaGVkX3NldHBhcmFtDQogICAgK2NvbnN0IF9BVEZfUFVCTCA9IDB4
MDgNCiAgICArY29uc3QgX1dDT1JFRkxBRyA9IF9fX1dDT1JFRkxBRw0KICAgICtjb25zdCBfVElP
Q0dXSU5TWiA9IDB4NTQxMw0KICAgICtjb25zdCBfX19VU0VfWE9QRU4ySzhYU0kgPSAxDQogICAg
K2NvbnN0IF9QUklpOCA9ICJpIg0KICAgICtjb25zdCBfQVJQSFJEX0xPT1BCQUNLID0gNzcyDQog
ICAgK2NvbnN0IF9fX0dDQ19JRUNfNTU5X0NPTVBMRVggPSAyDQogICAgK2NvbnN0IF9TT19CUk9B
RENBU1QgPSA2DQogICAgK2NvbnN0IF9fX0dMSUJDX01JTk9SX18gPSAyOA0KICAgICtjb25zdCBf
X1NDX1NUUkVBTVMgPSAxNzQNCiAgICArY29uc3QgX1NZU19zaG1hdCA9IF9fX05SX3NobWF0DQog
ICAgK2NvbnN0IF9JUFZMQU5fTU9ERV9MMiA9IDANCiAgICArY29uc3QgX19fTU1YX18gPSAxDQog
ICAgK2NvbnN0IF9CMTUwID0gMDAwMDAwNQ0KICAgICtjb25zdCBfUE9TSVhfRkFEVl9XSUxMTkVF
RCA9IDMNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fUlNDID0gMTINCiAgICArY29uc3QgX1BBQ0tF
VF9CUk9BRENBU1QgPSAxDQogICAgK2NvbnN0IF9QRl9BVE1QVkMgPSA4DQogICAgK2NvbnN0IF9T
WVNfcHJlYWR2MiA9IF9fX05SX3ByZWFkdjINCiAgICArY29uc3QgX0lOX0NMQVNTQ19ORVQgPSAw
eGZmZmZmZjAwDQogICAgK2NvbnN0IF9QQUNLRVRfQ09QWV9USFJFU0ggPSA3DQogICAgK2NvbnN0
IF9FVEhfWkxFTiA9IDYwDQogICAgK2NvbnN0IF9UQ1BPUFRfRU9MID0gMA0KICAgICtjb25zdCBf
SU42X0FERFJfR0VOX01PREVfUkFORE9NID0gMw0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfRU5D
T0RJTkdfU0EgPSA2DQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFA2NF9PRkY2NF9MSUJTID0g
MTE0Mg0KICAgICtjb25zdCBfRVRIX1BfUFVQQVQgPSAweDAyMDENCiAgICArY29uc3QgX1NZU19n
ZXRydXNhZ2UgPSBfX19OUl9nZXRydXNhZ2UNCiAgICArY29uc3QgX19QT1NJWF9USFJFQURfQVRU
Ul9TVEFDS0FERFIgPSAyMDA4MDkNCiAgICArY29uc3QgX0lGTEFfUE9SVF9QUk9GSUxFID0gMg0K
ICAgICtjb25zdCBfX19GTFQ2NF9IQVNfUVVJRVRfTkFOX18gPSAxDQogICAgK2NvbnN0IF9VSU5U
NjRfV0lEVEggPSA2NA0KICAgICtjb25zdCBfU1lTX2tjbXAgPSBfX19OUl9rY21wDQogICAgK2Nv
bnN0IF9JTl9NT1ZFRF9GUk9NID0gMHgwMDAwMDA0MA0KICAgICtjb25zdCBfX1VUU05BTUVfTUFD
SElORV9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RIDQogICAgK2NvbnN0IF9JUFY2X0xFQVZFX0dS
T1VQID0gMjENCiAgICArY29uc3QgX1NZU191bmxpbmsgPSBfX19OUl91bmxpbmsNCiAgICArY29u
c3QgX0hBVkVfU1RSU0lHTkFMID0gMQ0KICAgICtjb25zdCBfX1BDX0NIT1dOX1JFU1RSSUNURUQg
PSA2DQogICAgK2NvbnN0IF9fU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUyA9IDEzMQ0KICAgICtj
b25zdCBfRVRIX1BfSUJPRSA9IDB4ODkxNQ0KICAgICtjb25zdCBfT19GU1lOQyA9IF9PX1NZTkMN
CiAgICArY29uc3QgX1JUTV9ORVdSVUxFID0gMzINCiAgICArY29uc3QgX0lGTEFfWERQX0ZMQUdT
ID0gMw0KICAgICtjb25zdCBfU0lPQ0dJRkNPVU5UID0gMHg4OTM4DQogICAgK2NvbnN0IF9QQUNL
RVRfT1VUR09JTkcgPSA0DQogICAgK2NvbnN0IF9JUFRPU19QUkVDX01BU0sgPSBfSVBUT1NfQ0xB
U1NfTUFTSw0KICAgICtjb25zdCBfX19OUl9yZW5hbWVhdDIgPSAzMTYNCiAgICArY29uc3QgX19T
Q19JUFY2ID0gMjM1DQogICAgK2NvbnN0IF9UQ1BfRVNUQUJMSVNIRUQgPSAxDQogICAgK2NvbnN0
IF9BUlBIUkRfQVJDTkVUID0gNw0KICAgICtjb25zdCBfVElPQ1NFUlNXSUxEID0gMHg1NDU1DQog
ICAgK2NvbnN0IF9FVEhfUF9QVVAgPSAweDAyMDANCiAgICArY29uc3QgX19QT1NJWF9USFJFQURf
UFJJT1JJVFlfU0NIRURVTElORyA9IDIwMDgwOQ0KICAgICtjb25zdCBfU0lHRVZfVEhSRUFEID0g
Mg0KICAgICtjb25zdCBfSEFWRV9VVElNRV9IID0gMQ0KICAgICtjb25zdCBfSVBfUkVDVk9QVFMg
PSA2DQogICAgK2NvbnN0IF9QUl9TRVRfTU1fU1RBUlRfQ09ERSA9IDENCiAgICArY29uc3QgX19f
Q1BVX1NFVFNJWkUgPSAxMDI0DQogICAgK2NvbnN0IF9QRl9ERUNuZXQgPSAxMg0KICAgICtjb25z
dCBfVElPQ01fQ0FSID0gMHgwNDANCiAgICArY29uc3QgX1NZU19zaG1nZXQgPSBfX19OUl9zaG1n
ZXQNCiAgICArY29uc3QgX1JUTV9GX0xPT0tVUF9UQUJMRSA9IDB4MTAwMA0KICAgICtjb25zdCBf
UlRQUk9UX05USyA9IDE1DQogICAgK2NvbnN0IF9fX05SX2V2ZW50ZmQyID0gMjkwDQogICAgK2Nv
bnN0IF9JRkxBX0VWRU5UX0JPTkRJTkdfT1BUSU9OUyA9IDYNCiAgICArY29uc3QgX1NJT0NHSUZF
TkNBUCA9IDB4ODkyNQ0KICAgICtjb25zdCBfX19OUl91bmxpbmthdCA9IDI2Mw0KICAgICtjb25z
dCBfSUZMQV9CUl9WTEFOX0ZJTFRFUklORyA9IDcNCiAgICArY29uc3QgX01TX0FTWU5DID0gMQ0K
ICAgICtjb25zdCBfX0lPQ19SRUFEID0gMg0KICAgICtjb25zdCBfX1RIUkVBRF9TSEFSRURfVFlQ
RVNfSCA9IDENCiAgICArY29uc3QgX19fTlJfc2V0X3JvYnVzdF9saXN0ID0gMjczDQogICAgK2Nv
bnN0IF9JRkxBX0dST1VQID0gMjcNCiAgICArY29uc3QgX1NDSEVEX0RFQURMSU5FID0gNg0KICAg
ICtjb25zdCBfRUxJQkVYRUMgPSA4Mw0KICAgICtjb25zdCBfV0NIQVJfTUlOID0gX19fV0NIQVJf
TUlODQogICAgK2NvbnN0IF9fX05SX3B1dHBtc2cgPSAxODINCiAgICArY29uc3QgX19fTlJfYXJj
aF9wcmN0bCA9IDE1OA0KICAgICtjb25zdCBfTVNHX0NUUlVOQyA9IDgNCiAgICArY29uc3QgX0lG
TEFfQlJfUk9PVF9QQVRIX0NPU1QgPSAxMw0KICAgICtjb25zdCBfTVNHX1NZTiA9IDEwMjQNCiAg
ICArY29uc3QgX0hBVkVfTElOVVhfTkVUTElOS19IID0gMQ0KICAgICtjb25zdCBfSEFWRV9TUExJ
Q0UgPSAxDQogICAgK2NvbnN0IF9QS0VZX0RJU0FCTEVfV1JJVEUgPSAweDINCiAgICArY29uc3Qg
X0ZQRV9GTFRESVYgPSAzDQogICAgK2NvbnN0IF9fX05SX3BrZXlfbXByb3RlY3QgPSAzMjkNCiAg
ICArY29uc3QgX0lQUE9SVF9URUxORVQgPSAyMw0KICAgICtjb25zdCBfUlRBX1NQT1JUID0gMjgN
CiAgICArY29uc3QgX19YT1BFTl9WRVJTSU9OID0gNzAwDQogICAgK2NvbnN0IF9fQ1NfWEJTNV9J
TFAzMl9PRkYzMl9MSUJTID0gMTEwMg0KICAgICtjb25zdCBfUlROTEdSUF9ORUlHSCA9IDMNCiAg
ICArY29uc3QgX19DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTID0gMTExNw0KICAgICtj
b25zdCBfVUlOVF9GQVNUOF9XSURUSCA9IDgNCiAgICArY29uc3QgX1RDUE9QVF9OT1AgPSAxDQog
ICAgK2NvbnN0IF9USU1FX0JBRCA9IF9USU1FX0VSUk9SDQogICAgK2NvbnN0IF9SVE1fREVMQURE
UkxBQkVMID0gNzMNCiAgICArY29uc3QgX19QT1NJWF9OT19UUlVOQyA9IDENCiAgICArY29uc3Qg
X1BST1RfV1JJVEUgPSAweDINCiAgICArY29uc3QgX19fTlJfZXBvbGxfcHdhaXQgPSAyODENCiAg
ICArY29uc3QgX0FSUEhSRF9TSVQgPSA3NzYNCiAgICArY29uc3QgX1JUTV9ORVdQUkVGSVggPSA1
Mg0KICAgICtjb25zdCBfX19STElNSVRfTUVNTE9DSyA9IDgNCiAgICArY29uc3QgX1NZU19sb29r
dXBfZGNvb2tpZSA9IF9fX05SX2xvb2t1cF9kY29va2llDQogICAgK2NvbnN0IF9fX09SREVSX0xJ
VFRMRV9FTkRJQU5fXyA9IDEyMzQNCiAgICArY29uc3QgX1NZU19ta2RpcmF0ID0gX19fTlJfbWtk
aXJhdA0KICAgICtjb25zdCBfVENQT0xFTl9XSU5ET1cgPSAzDQogICAgK2NvbnN0IF9FVEhfUF9U
SVBDID0gMHg4OENBDQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX0tFWVNfTUFYID0gMTI4DQog
ICAgK2NvbnN0IF9BVF9FTVBUWV9QQVRIID0gMHgxMDAwDQogICAgK2NvbnN0IF9fX05SX3NjaGVk
X3lpZWxkID0gMjQNCiAgICArY29uc3QgX1hEUF9GTEFHU19NT0RFUyA9IChfWERQX0ZMQUdTX1NL
Ql9NT0RFIHwgX1hEUF9GTEFHU19EUlZfTU9ERSB8IF9YRFBfRkxBR1NfSFdfTU9ERSkNCiAgICAr
Y29uc3QgX0hBVkVfSU5PVElGWV9STV9XQVRDSCA9IDENCiAgICArY29uc3QgX19TQ19TVFJFQU1f
TUFYID0gNQ0KICAgICtjb25zdCBfX19GX0dFVFNJRyA9IDExDQogICAgK2NvbnN0IF9FTUVESVVN
VFlQRSA9IDEyNA0KICAgICtjb25zdCBfU1RBX0NMSyA9IDB4ODAwMA0KICAgICtjb25zdCBfSVBU
T1NfTUlOQ09TVCA9IF9JUFRPU19MT1dDT1NUDQogICAgK2NvbnN0IF9fX0ZMVDY0X0RFTk9STV9N
SU5fXyA9IDEuMQ0KICAgICtjb25zdCBfUkxJTTY0X0lORklOSVRZID0gMHhmZmZmZmZmZmZmZmZm
ZmZmDQogICAgK2NvbnN0IF9GRklfVU5JWDY0ID0gMg0KICAgICtjb25zdCBfUlROTEdSUF9JUFY0
X05FVENPTkYgPSAyNA0KICAgICtjb25zdCBfUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCA9ICgxIDw8
IDIpDQogICAgK2NvbnN0IF9JTlQzMl9NQVggPSAoMjE0NzQ4MzY0NykNCiAgICArY29uc3QgX0VU
SEVSVFlQRV9JUFY2ID0gMHg4NmRkDQogICAgK2NvbnN0IF9UQ1BPUFRfVFNUQU1QX0hEUiA9IChf
VENQT1BUX05PUDw8MjR8X1RDUE9QVF9OT1A8PDE2fF9UQ1BPUFRfVElNRVNUQU1QPDw4fF9UQ1BP
TEVOX1RJTUVTVEFNUCkNCiAgICArY29uc3QgX0lGTEFfU1RBVFNfTElOS19YU1RBVFMgPSAyDQog
ICAgK2NvbnN0IF9PX1JET05MWSA9IDAwDQogICAgK2NvbnN0IF9fX05SX2dldHJlc3VpZCA9IDEx
OA0KICAgICtjb25zdCBfUFRSQUNFX0VWRU5UX0NMT05FID0gMw0KICAgICtjb25zdCBfQVJQSFJE
X1BJTVJFRyA9IDc3OQ0KICAgICtjb25zdCBfSVBWNl9NVUxUSUNBU1RfSE9QUyA9IDE4DQogICAg
K2NvbnN0IF9fX05SX2xpbmthdCA9IDI2NQ0KICAgICtjb25zdCBfRlNfTk9BVElNRV9GTCA9IDB4
MDAwMDAwODANCiAgICArY29uc3QgX19TQ19VTE9OR19NQVggPSAxMTcNCiAgICArY29uc3QgX0lQ
VE9TX0NMQVNTX0RFRkFVTFQgPSBfSVBUT1NfQ0xBU1NfQ1MwDQogICAgK2NvbnN0IF9TWVNfc2ht
ZHQgPSBfX19OUl9zaG1kdA0KICAgICtjb25zdCBfX19OUl9vcGVuID0gMg0KICAgICtjb25zdCBf
VElNRV9PSyA9IDANCiAgICArY29uc3QgX0JQRl9UWEEgPSAweDgwDQogICAgK2NvbnN0IF9fU0Nf
Q0hJTERfTUFYID0gMQ0KICAgICtjb25zdCBfU1lTX2FkZF9rZXkgPSBfX19OUl9hZGRfa2V5DQog
ICAgK2NvbnN0IF9TVERDX0hFQURFUlMgPSAxDQogICAgK2NvbnN0IF9NQVBfQU5PTllNT1VTID0g
MHgyMA0KICAgICtjb25zdCBfWDg2X0NSNF9ERV9CSVQgPSAzDQogICAgK2NvbnN0IF9WSU5UUiA9
IDANCiAgICArY29uc3QgX01JTlNJR1NUS1NaID0gMjA0OA0KICAgICtjb25zdCBfSVBUT1NfTE9X
Q09TVCA9IDB4MDINCiAgICArY29uc3QgX01BRFZfTUVSR0VBQkxFID0gMTINCiAgICArY29uc3Qg
X0lGTEFfVFVOX1BFUlNJU1QgPSA2DQogICAgK2NvbnN0IF9IQVZFX05FVElORVRfSUNNUDZfSCA9
IDENCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX1NUQVRFID0gMQ0KICAgICtjb25zdCBfQ1BVX1NF
VFNJWkUgPSBfX19DUFVfU0VUU0laRQ0KICAgICtjb25zdCBfSVBWRVJTSU9OID0gNA0KICAgICtj
b25zdCBfU1lTX2V4aXRfZ3JvdXAgPSBfX19OUl9leGl0X2dyb3VwDQogICAgK2NvbnN0IF9USU9D
Q0JSSyA9IDB4NTQyOA0KICAgICtjb25zdCBfX19MUDY0X09GRjY0X0xERkxBR1MgPSAiLW02NCIN
CiAgICArY29uc3QgX1BBQ0tFVF9WTkVUX0hEUiA9IDE1DQogICAgK2NvbnN0IF9fU0NfVFJBQ0Vf
RVZFTlRfTkFNRV9NQVggPSAyNDINCiAgICArY29uc3QgX1BSX1NWRV9TRVRfVkwgPSA1MA0KICAg
ICtjb25zdCBfU1lTX2ZvcmsgPSBfX19OUl9mb3JrDQogICAgK2NvbnN0IF9FVEhFUlRZUEVfVFJB
SUwgPSAweDEwMDANCiAgICArY29uc3QgX1JURl9SRUpFQ1QgPSAweDAyMDANCiAgICArY29uc3Qg
X0NMT05FX0ZTID0gMHgwMDAwMDIwMA0KICAgICtjb25zdCBfVUlOVDMyX1dJRFRIID0gMzINCiAg
ICArY29uc3QgX1NJT0NHSUZUWFFMRU4gPSAweDg5NDINCiAgICArY29uc3QgX05EQV9WTEFOID0g
NQ0KICAgICtjb25zdCBfUFRSQUNFX0dFVFJFR1MgPSAxMg0KICAgICtjb25zdCBfX1BPU0lYX0ZT
WU5DID0gMjAwODA5DQogICAgK2NvbnN0IF9TWVNfZ2V0eGF0dHIgPSBfX19OUl9nZXR4YXR0cg0K
ICAgICtjb25zdCBfU0lPQ1NJRkFERFIgPSAweDg5MTYNCiAgICArY29uc3QgX1NZU19tcHJvdGVj
dCA9IF9fX05SX21wcm90ZWN0DQogICAgK2NvbnN0IF9fUE9TSVhfTkFNRV9NQVggPSAxNA0KICAg
ICtjb25zdCBfX1BPU0lYX09QRU5fTUFYID0gMjANCiAgICArY29uc3QgX1RDU0VUQUYgPSAweDU0
MDgNCiAgICArY29uc3QgX1RDUF9NRDVTSUdfTUFYS0VZTEVOID0gODANCiAgICArY29uc3QgX0JQ
Rl9ESVYgPSAweDMwDQogICAgK2NvbnN0IF9JUFY2X0FVVEhIRFIgPSAxMA0KICAgICtjb25zdCBf
TVNHX1RSVU5DID0gMzINCiAgICArY29uc3QgX19QT1NJWDJfQ0hBUl9URVJNID0gMjAwODA5DQog
ICAgK2NvbnN0IF9TSUdBQlJUID0gNg0KICAgICtjb25zdCBfU1lTX3JlYWQgPSBfX19OUl9yZWFk
DQogICAgK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX1JXTE9DS0FUVFJfVCA9IDgNCiAgICArY29u
c3QgX0lGTEFfQlJfTUNBU1RfU05PT1BJTkcgPSAyMw0KICAgICtjb25zdCBfTkVUTElOS19DT05O
RUNURUQgPSAxDQogICAgK2NvbnN0IF9GU19FWFRFTlRfRkwgPSAweDAwMDgwMDAwDQogICAgK2Nv
bnN0IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRV9ERVRFQ1RFRCA9IDE1DQogICAgK2NvbnN0IF9T
WVNfbGxpc3R4YXR0ciA9IF9fX05SX2xsaXN0eGF0dHINCiAgICArY29uc3QgX0VUSF9BTEVOID0g
Ng0KICAgICtjb25zdCBfSUZGX05PX1BJID0gMHgxMDAwDQogICAgK2NvbnN0IF9fX05SX2dldGdp
ZCA9IDEwNA0KICAgICtjb25zdCBfVENBX0tJTkQgPSAxDQogICAgK2NvbnN0IF9fX0ZMVDMyWF9N
SU5fXyA9IDEuMQ0KICAgICtjb25zdCBfX19EQkxfSEFTX0RFTk9STV9fID0gMQ0KICAgICtjb25z
dCBfVENQX0xBU1RfQUNLID0gOQ0KICAgICtjb25zdCBfUlRfVEFCTEVfREVGQVVMVCA9IDI1Mw0K
ICAgICtjb25zdCBfTkxfTU1BUF9TVEFUVVNfU0tJUCA9IDQNCiAgICArY29uc3QgX0hBVkVfTE9H
MVBMID0gMQ0KICAgICtjb25zdCBfRkFMTE9DX0ZMX05PX0hJREVfU1RBTEUgPSAweDA0DQogICAg
K2NvbnN0IF9SVF9TQ09QRV9IT1NUID0gMjU0DQogICAgK2NvbnN0IF9SVE1TR19ERUxSVUxFID0g
MHgzMg0KICAgICtjb25zdCBfSVBQUk9UT19NQVggPSAyNTYNCiAgICArY29uc3QgX0lQT1BUX0NM
QVNTX01BU0sgPSAweDYwDQogICAgK2NvbnN0IF9BVF9FQUNDRVNTID0gMHgyMDANCiAgICArY29u
c3QgX1NZU19wYXVzZSA9IF9fX05SX3BhdXNlDQogICAgK2NvbnN0IF9ORF9PUFRfUFJFRklYX0lO
Rk9STUFUSU9OID0gMw0KICAgICtjb25zdCBfU0lHVVJHID0gMjMNCiAgICArY29uc3QgX19TQ19U
SU1FUl9NQVggPSAzNQ0KICAgICtjb25zdCBfTkRfUkFfRkxBR19IT01FX0FHRU5UID0gMHgyMA0K
ICAgICtjb25zdCBfX1NDX1NDSEFSX01JTiA9IDExMg0KICAgICtjb25zdCBfVENQT0xFTl9UU1RB
TVBfQVBQQSA9IChfVENQT0xFTl9USU1FU1RBTVArMikNCiAgICArY29uc3QgX19fRkxUMzJfRElH
X18gPSA2DQogICAgK2NvbnN0IF9QRl9QSE9ORVQgPSAzNQ0KICAgICtjb25zdCBfUlRQUk9UX1JF
RElSRUNUID0gMQ0KICAgICtjb25zdCBfSU5fREVMRVRFX1NFTEYgPSAweDAwMDAwNDAwDQogICAg
K2NvbnN0IF9OSV9JRE4gPSAzMg0KICAgICtjb25zdCBfVFVOX1JFQURRX1NJWkUgPSA1MDANCiAg
ICArY29uc3QgX1NUQV9QTEwgPSAweDAwMDENCiAgICArY29uc3QgX0lQX0FERF9TT1VSQ0VfTUVN
QkVSU0hJUCA9IDM5DQogICAgK2NvbnN0IF9BRl9CTFVFVE9PVEggPSBfUEZfQkxVRVRPT1RIDQog
ICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9NRVNTQUdFX0FHRV9USU1FUiA9IDIxDQogICAgK2NvbnN0
IF9FTk9UQkxLID0gMTUNCiAgICArY29uc3QgX0ZGSV9TSVpFT0ZfQVJHID0gOA0KICAgICtjb25z
dCBfX0JJVFNfQ1BVX1NFVF9IID0gMQ0KICAgICtjb25zdCBfU1lTX21xX2dldHNldGF0dHIgPSBf
X19OUl9tcV9nZXRzZXRhdHRyDQogICAgK2NvbnN0IF9TT0NLX0RDQ1AgPSA2DQogICAgK2NvbnN0
IF9fX1gzMl9TWVNDQUxMX0JJVCA9IDB4NDAwMDAwMDANCiAgICArY29uc3QgX0hBVkVfRExGQ05f
SCA9IDENCiAgICArY29uc3QgX0VUSEVSX0hEUl9MRU4gPSBfRVRIX0hMRU4NCiAgICArY29uc3Qg
X1NZU19tbG9jazIgPSBfX19OUl9tbG9jazINCiAgICArY29uc3QgX1NZU19nZXRyYW5kb20gPSBf
X19OUl9nZXRyYW5kb20NCiAgICArY29uc3QgX19HRVRPUFRfUE9TSVhfSCA9IDENCiAgICArY29u
c3QgX19fU1REQ19JRUNfNTU5X0NPTVBMRVhfXyA9IDENCiAgICArY29uc3QgX1g4Nl9DUjRfT1NY
U0FWRV9CSVQgPSAxOA0KICAgICtjb25zdCBfRU5PUFJPVE9PUFQgPSA5Mg0KICAgICtjb25zdCBf
UlRBWF9GRUFUVVJFUyA9IDEyDQogICAgK2NvbnN0IF9TSU9DU0lGTUFQID0gMHg4OTcxDQogICAg
K2NvbnN0IF9fX05SX2dldF9yb2J1c3RfbGlzdCA9IDI3NA0KICAgICtjb25zdCBfSUZMQV9FVkVO
VCA9IDQ0DQogICAgK2NvbnN0IF9GUEVfRkxUT1ZGID0gNA0KICAgICtjb25zdCBfSEFWRV9XQUlU
NCA9IDENCiAgICArY29uc3QgX19TQ19BVlBIWVNfUEFHRVMgPSA4Ng0KICAgICtjb25zdCBfRUFJ
X0lOVFIgPSAtMTA0DQogICAgK2NvbnN0IF9QUl9NQ0VfS0lMTF9ERUZBVUxUID0gMg0KICAgICtj
b25zdCBfU09fUEVFUkdST1VQUyA9IDU5DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfUEFDS0VUU19Q
RVJfU0xBVkUgPSAyMA0KICAgICtjb25zdCBfU0lHSFVQID0gMQ0KICAgICtjb25zdCBfUFRSQUNF
X09fVFJBQ0VWRk9SSyA9IDQNCiAgICArY29uc3QgX0VOT1NQQyA9IDI4DQogICAgK2NvbnN0IF9W
RElTQ0FSRCA9IDEzDQogICAgK2NvbnN0IF9SVE1HUlBfTk9USUZZID0gMg0KICAgICtjb25zdCBf
U1lTX29wZW5hdCA9IF9fX05SX29wZW5hdA0KICAgICtjb25zdCBfX19PUkRFUl9QRFBfRU5ESUFO
X18gPSAzNDEyDQogICAgK2NvbnN0IF9BVF9TVEFUWF9TWU5DX1RZUEUgPSAweDYwMDANCiAgICAr
Y29uc3QgX19fTlJfdGdraWxsID0gMjM0DQogICAgK2NvbnN0IF9fX05SX2dldF9rZXJuZWxfc3lt
cyA9IDE3Nw0KICAgICtjb25zdCBfRURPVERPVCA9IDczDQogICAgK2NvbnN0IF9QRl9ORVRCRVVJ
ID0gMTMNCiAgICArY29uc3QgX0VQT0xMT05FU0hPVCA9IDEwNzM3NDE4MjQNCiAgICArY29uc3Qg
X01BUF9BTk9OID0gX01BUF9BTk9OWU1PVVMNCiAgICArY29uc3QgX19fT19ESVJFQ1QgPSAwNDAw
MDANCiAgICArY29uc3QgX0lQVFRMREVDID0gMQ0KICAgICtjb25zdCBfX1NDX05HUk9VUFNfTUFY
ID0gMw0KICAgICtjb25zdCBfSVBQT1JUX0VYRUNTRVJWRVIgPSA1MTINCiAgICArY29uc3QgX19f
TlJfb3Blbl9ieV9oYW5kbGVfYXQgPSAzMDQNCiAgICArY29uc3QgX19DU19YQlM1X0xQNjRfT0ZG
NjRfTElCUyA9IDExMTANCiAgICArY29uc3QgX1NPX0tFRVBBTElWRSA9IDkNCiAgICArY29uc3Qg
X1NZU19ydF9zaWdyZXR1cm4gPSBfX19OUl9ydF9zaWdyZXR1cm4NCiAgICArY29uc3QgX0lDTVA2
X1JSX1BDT1VTRV9SQUZMQUdTX0FVVE8gPSAweDEwDQogICAgK2NvbnN0IF9BRl9ORVRMSU5LID0g
X1BGX05FVExJTksNCiAgICArY29uc3QgX05EX09QVF9QSV9GTEFHX0FVVE8gPSAweDQwDQogICAg
K2NvbnN0IF9JUFY2X0FERFJGT1JNID0gMQ0KICAgICtjb25zdCBfVElNRV9XQUlUID0gNA0KICAg
ICtjb25zdCBfSUZMQV9JUE9JQl9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9FSE9TVERPV04gPSAx
MTINCiAgICArY29uc3QgX1NZU19mYWR2aXNlNjQgPSBfX19OUl9mYWR2aXNlNjQNCiAgICArY29u
c3QgX0VUSF9QX0lGRSA9IDB4RUQzRQ0KICAgICtjb25zdCBfSVBWNl9SRUNWSE9QTElNSVQgPSA1
MQ0KICAgICtjb25zdCBfVElPQ0dTT0ZUQ0FSID0gMHg1NDE5DQogICAgK2NvbnN0IF9QUl9HRVRf
RU5ESUFOID0gMTkNCiAgICArY29uc3QgX1NZU191c3RhdCA9IF9fX05SX3VzdGF0DQogICAgK2Nv
bnN0IF9TWVNfaW9fc3VibWl0ID0gX19fTlJfaW9fc3VibWl0DQogICAgK2NvbnN0IF9TT01BWENP
Tk4gPSAxMjgNCiAgICArY29uc3QgX0lQX01UVSA9IDE0DQogICAgK2NvbnN0IF9fX0ZMVDMyWF9N
SU5fMTBfRVhQX18gPSAoLTMwNykNCiAgICArY29uc3QgX0lGTEFfR0VORVZFX1VOU1BFQyA9IDAN
CiAgICArY29uc3QgX1NZU193cml0ZXYgPSBfX19OUl93cml0ZXYNCiAgICArY29uc3QgX19fTlJf
bGdldHhhdHRyID0gMTkyDQogICAgK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX0FUVFJfVCA9IDU2
DQogICAgK2NvbnN0IF9NTlRfRk9SQ0UgPSAxDQogICAgK2NvbnN0IF9fX0ZMVDEyOF9ERU5PUk1f
TUlOX18gPSAxLjENCiAgICArY29uc3QgX19fazhfXyA9IDENCiAgICArY29uc3QgX1NZU191bnNo
YXJlID0gX19fTlJfdW5zaGFyZQ0KICAgICtjb25zdCBfTUFEVl9SRU1PVkUgPSA5DQogICAgK2Nv
bnN0IF9FQURWID0gNjgNCiAgICArY29uc3QgX1NPTF9BTEcgPSAyNzkNCiAgICArY29uc3QgX0NM
T05FX05FV0NHUk9VUCA9IDB4MDIwMDAwMDANCiAgICArY29uc3QgX19TQ19NRVNTQUdFX1BBU1NJ
TkcgPSAyMA0KICAgICtjb25zdCBfTVNfTUFORExPQ0sgPSA2NA0KICAgICtjb25zdCBfX1VUU05B
TUVfVkVSU0lPTl9MRU5HVEggPSBfX1VUU05BTUVfTEVOR1RIDQogICAgK2NvbnN0IF9SVE5MX0ZB
TUlMWV9JUDZNUiA9IDEyOQ0KICAgICtjb25zdCBfSUZMQV9QSFlTX1BPUlRfSUQgPSAzNA0KICAg
ICtjb25zdCBfRE5fTVVMVElTSE9UID0gMHg4MDAwMDAwMA0KICAgICtjb25zdCBfQjEyMDAgPSAw
MDAwMDExDQogICAgK2NvbnN0IF9FV09VTERCTE9DSyA9IF9FQUdBSU4NCiAgICArY29uc3QgX0lG
TEFfVkZfUE9SVCA9IDENCiAgICArY29uc3QgX19fU0lfSEFWRV9TSUdTWVMgPSAxDQogICAgK2Nv
bnN0IF9OTE1fRl9NQVRDSCA9IDB4MjAwDQogICAgK2NvbnN0IF9BUlBIUkRfQVgyNSA9IDMNCiAg
ICArY29uc3QgX19QT1NJWF9QUklPUklUWV9TQ0hFRFVMSU5HID0gMjAwODA5DQogICAgK2NvbnN0
IF9SVEZfTk9GT1JXQVJEID0gMHgxMDAwDQogICAgK2NvbnN0IF9GX0RVUEZEX0NMT0VYRUMgPSAx
MDMwDQogICAgK2NvbnN0IF9FQ0FOQ0VMRUQgPSAxMjUNCiAgICArY29uc3QgX0lOUl9PUEVOX01B
WCA9IDQwOTYNCiAgICArY29uc3QgX0IzMDAgPSAwMDAwMDA3DQogICAgK2NvbnN0IF9JTUFYQkVM
ID0gMDAyMDAwMA0KICAgICtjb25zdCBfUFJJZExFQVNUMzIgPSAiZCINCiAgICArY29uc3QgX1JV
U0FHRV9DSElMRFJFTiA9IC0xDQogICAgK2NvbnN0IF9YODZfQ1I0X1ZNWEVfQklUID0gMTMNCiAg
ICArY29uc3QgX0ZfT0ZEX1NFVExLID0gMzcNCiAgICArY29uc3QgX0VOT0RBVEEgPSA2MQ0KICAg
ICtjb25zdCBfU09MX0tDTSA9IDI4MQ0KICAgICtjb25zdCBfQUZfUFBQT1ggPSBfUEZfUFBQT1gN
CiAgICArY29uc3QgX0hBVkVfU1lTX1RZUEVTX0ggPSAxDQogICAgK2NvbnN0IF9TSU9DR0lGQURE
UiA9IDB4ODkxNQ0KICAgICtjb25zdCBfTkRBX0RTVCA9IDENCiAgICArY29uc3QgX19fR0xJQkNf
VVNFX0RFUFJFQ0FURURfR0VUUyA9IDANCiAgICArY29uc3QgX1RJT0NNX0xFID0gMHgwMDENCiAg
ICArY29uc3QgX1NDTm9GQVNUOCA9ICJoaG8iDQogICAgK2NvbnN0IF9BUlBIUkRfU0tJUCA9IDc3
MQ0KICAgICtjb25zdCBfX19ERUMzMl9TVUJOT1JNQUxfTUlOX18gPSAwLjAwMDAwMUUtOTUNCiAg
ICArY29uc3QgX19fcGllX18gPSAyDQogICAgK2NvbnN0IF9NU19TTEFWRSA9IDUyNDI4OA0KICAg
ICtjb25zdCBfUkxJTUlUX0RBVEEgPSAyDQogICAgK2NvbnN0IF9fX0xJVFRMRV9FTkRJQU4gPSAx
MjM0DQogICAgK2NvbnN0IF9fUE9TSVhfUkVBTFRJTUVfU0lHTkFMUyA9IDIwMDgwOQ0KICAgICtj
b25zdCBfU1lTX21zZ2dldCA9IF9fX05SX21zZ2dldA0KICAgICtjb25zdCBfSEFWRV9BVEFOMkwg
PSAxDQogICAgK2NvbnN0IF9JRkxBX1ZSRl9QT1JUX1RBQkxFID0gMQ0KICAgICtjb25zdCBfTkVU
TElOS19MSVNUX01FTUJFUlNISVBTID0gOQ0KICAgICtjb25zdCBfX0ZDTlRMX0ggPSAxDQogICAg
K2NvbnN0IF9fX05SX3V0aW1lcyA9IDIzNQ0KICAgICtjb25zdCBfUlRNX0dFVFJPVVRFID0gMjYN
CiAgICArY29uc3QgX1VJTlQ4X01BWCA9ICgyNTUpDQogICAgK2NvbnN0IF9BUlBPUF9SUkVRVUVT
VCA9IDMNCiAgICArY29uc3QgX19fUkxJTV9OTElNSVRTID0gMTYNCiAgICArY29uc3QgX0lQVkxB
Tl9GX1ZFUEEgPSAweDAyDQogICAgK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTUFDQUREUl9EQVRBID0g
NQ0KICAgICtjb25zdCBfX1BPU0lYX1BSSU9SSVRJWkVEX0lPID0gMjAwODA5DQogICAgK2NvbnN0
IF9OT19EQVRBID0gNA0KICAgICtjb25zdCBfUlRQUk9UX0lTSVMgPSAxODcNCiAgICArY29uc3Qg
X0hBVkVfQVNfWDg2XzY0X1VOV0lORF9TRUNUSU9OX1RZUEUgPSAxDQogICAgK2NvbnN0IF9JUFY2
XzIyOTJSVEhEUiA9IDUNCiAgICArY29uc3QgX1NZU19tbG9jayA9IF9fX05SX21sb2NrDQogICAg
K2NvbnN0IF9fRkVBVFVSRVNfSCA9IDENCiAgICArY29uc3QgX1NZU19rZXhlY19sb2FkID0gX19f
TlJfa2V4ZWNfbG9hZA0KICAgICtjb25zdCBfRVBST1RPVFlQRSA9IDkxDQogICAgK2NvbnN0IF9O
WkVSTyA9IDIwDQogICAgK2NvbnN0IF9TSU9DU0lGTkVUTUFTSyA9IDB4ODkxYw0KICAgICtjb25z
dCBfX19JRkxBX1hGUk1fTUFYID0gMw0KICAgICtjb25zdCBfSUZMQV9NQUNTRUNfRU5DUllQVCA9
IDcNCiAgICArY29uc3QgX19fTlJfcGVyc29uYWxpdHkgPSAxMzUNCiAgICArY29uc3QgX1NZU19n
ZXRfbWVtcG9saWN5ID0gX19fTlJfZ2V0X21lbXBvbGljeQ0KICAgICtjb25zdCBfRUlMU0VRID0g
ODQNCiAgICArY29uc3QgX1NZU19zZXRyZWdpZCA9IF9fX05SX3NldHJlZ2lkDQogICAgK2NvbnN0
IF9TT0NLX1NUUkVBTSA9IDENCiAgICArY29uc3QgX1BSX0dFVF9TRUNDT01QID0gMjENCiAgICAr
Y29uc3QgX0lGTEFfTUFDU0VDX1NDSSA9IDENCiAgICArY29uc3QgX0VUSF9ITEVOID0gMTQNCiAg
ICArY29uc3QgX1NDTV9DUkVERU5USUFMUyA9IDINCiAgICArY29uc3QgX19fVVNFX0xBUkdFRklM
RTY0ID0gMQ0KICAgICtjb25zdCBfUlRNX0dFVFJVTEUgPSAzNA0KICAgICtjb25zdCBfX05FVElO
RVRfSU5fSCA9IDENCiAgICArY29uc3QgX19TQ19MRVZFTDFfRENBQ0hFX0xJTkVTSVpFID0gMTkw
DQogICAgK2NvbnN0IF9FRFFVT1QgPSAxMjINCiAgICArY29uc3QgX0lGTEFfVlhMQU5fVE9TID0g
Ng0KICAgICtjb25zdCBfX19TX0lSRUFEID0gMDQwMA0KICAgICtjb25zdCBfRl9HRVRGRCA9IDEN
CiAgICArY29uc3QgX0FSUEhSRF9ERENNUCA9IDUxNw0KICAgICtjb25zdCBfX19OUl91c2VyZmF1
bHRmZCA9IDMyMw0KICAgICtjb25zdCBfRl9HRVRGTCA9IDMNCiAgICArY29uc3QgX19fdGltZXZh
bF9kZWZpbmVkID0gMQ0KICAgICtjb25zdCBfSVBPUFRfQ09QWSA9IDB4ODANCiAgICArY29uc3Qg
X0lQVjZfQ0hFQ0tTVU0gPSA3DQogICAgK2NvbnN0IF9TVEFUWF9BVFRSX0FQUEVORCA9IDB4MDAy
MA0KICAgICtjb25zdCBfRVRIX1BfUFBQX1NFUyA9IDB4ODg2NA0KICAgICtjb25zdCBfX1NDX0xF
VkVMMV9EQ0FDSEVfU0laRSA9IDE4OA0KICAgICtjb25zdCBfVFVOR0VUU05EQlVGX3ZhbCA9IDIx
NDc3Njc1MDcNCiAgICArY29uc3QgX0ZTX1hGTEFHX1BSRUFMTE9DID0gMHgwMDAwMDAwMg0KICAg
ICtjb25zdCBfUFJfR0VUX1NQRUNVTEFUSU9OX0NUUkwgPSA1Mg0KICAgICtjb25zdCBfQ0JBVURF
WCA9IDAwMTAwMDANCiAgICArY29uc3QgX1NLRl9BRF9QS1RUWVBFID0gNA0KICAgICtjb25zdCBf
TElOVVhfUkVCT09UX01BR0lDMSA9IDB4ZmVlMWRlYWQNCiAgICArY29uc3QgX0xJTlVYX1JFQk9P
VF9NQUdJQzIgPSA2NzIyNzQ3OTMNCiAgICArY29uc3QgX1BGX0JSSURHRSA9IDcNCiAgICArY29u
c3QgX01TX0lfVkVSU0lPTiA9IDgzODg2MDgNCiAgICArY29uc3QgX01BRFZfUkFORE9NID0gMQ0K
ICAgICtjb25zdCBfX1VUU05BTUVfTk9ERU5BTUVfTEVOR1RIID0gX19VVFNOQU1FX0xFTkdUSA0K
ICAgICtjb25zdCBfU0NOb0xFQVNUOCA9ICJoaG8iDQogICAgK2NvbnN0IF9YODZfQ1IzX1BDSURf
QklUUyA9IDEyDQogICAgK2NvbnN0IF9BRl9TTUMgPSBfUEZfU01DDQogICAgK2NvbnN0IF9BUlBI
UkRfSUVFRTgwMiA9IDYNCiAgICArY29uc3QgX0FESl9PRkZTRVQgPSAweDAwMDENCiAgICArY29u
c3QgX0VMT09QID0gNDANCiAgICArY29uc3QgX19fSUZMQV9HVFBfTUFYID0gNQ0KICAgICtjb25z
dCBfUlRQUk9UX0JHUCA9IDE4Ng0KICAgICtjb25zdCBfTElUVExFX0VORElBTiA9IF9fX0xJVFRM
RV9FTkRJQU4NCiAgICArY29uc3QgX19fQllURV9PUkRFUiA9IF9fX0xJVFRMRV9FTkRJQU4NCiAg
ICArY29uc3QgX1RDUElfT1BUX1RJTUVTVEFNUFMgPSAxDQogICAgK2NvbnN0IF9fX1RDQV9NQVgg
PSAxNQ0KICAgICtjb25zdCBfUlRBX01FVFJJQ1MgPSA4DQogICAgK2NvbnN0IF9TT0xfUFBQT0wy
VFAgPSAyNzMNCiAgICArY29uc3QgX19TQ19JT1ZfTUFYID0gNjANCiAgICArY29uc3QgX19MRlM2
NF9MQVJHRUZJTEUgPSAxDQogICAgK2NvbnN0IF9NQVhfVkxBTl9MSVNUX0xFTiA9IDENCiAgICAr
Y29uc3QgX1NZTkNfRklMRV9SQU5HRV9XQUlUX0FGVEVSID0gNA0KICAgICtjb25zdCBfX1BPU0lY
X01RX1BSSU9fTUFYID0gMzINCiAgICArY29uc3QgX19QT1NJWF9WRVJTSU9OID0gMjAwODA5DQog
ICAgK2NvbnN0IF9fX05SX3Bwb2xsID0gMjcxDQogICAgK2NvbnN0IF9GX09XTkVSX1BJRCA9IDEN
CiAgICArY29uc3QgX1RJT0NQS1RfSU9DVEwgPSA2NA0KICAgICtjb25zdCBfX19VU0VfUE9TSVgx
OTkzMDkgPSAxDQogICAgK2NvbnN0IF9fX0lOVF9GQVNUOF9NQVhfXyA9IDB4N2YNCiAgICArY29u
c3QgX19TQ19CQ19TQ0FMRV9NQVggPSAzOA0KICAgICtjb25zdCBfU1lTX2Nocm9vdCA9IF9fX05S
X2Nocm9vdA0KICAgICtjb25zdCBfRVBST1RPTk9TVVBQT1JUID0gOTMNCiAgICArY29uc3QgX1NU
QVRYX0dJRCA9IDB4MDAxMA0KICAgICtjb25zdCBfSUZMQV9CUl9HUk9VUF9GV0RfTUFTSyA9IDkN
CiAgICArY29uc3QgX0lQUE9SVF9SRVNFUlZFRCA9IDEwMjQNCiAgICArY29uc3QgX0lOX09OTFlE
SVIgPSAweDAxMDAwMDAwDQogICAgK2NvbnN0IF9TVEFfRkxMID0gMHgwMDA4DQogICAgK2NvbnN0
IF9JRkxBX01BQ1NFQ19FUyA9IDEwDQogICAgK2NvbnN0IF9fX1dJTlRfV0lEVEhfXyA9IDMyDQog
ICAgK2NvbnN0IF9fUE9TSVhfUElQRV9CVUYgPSA1MTINCiAgICArY29uc3QgX0lQT1BUX1NFQ1VS
X1NFQ1JFVCA9IDB4ZDc4OA0KICAgICtjb25zdCBfX19QSUNfXyA9IDINCiAgICArY29uc3QgX0lT
VFJJUCA9IDAwMDAwNDANCiAgICArY29uc3QgX19fUlRNX01BWCA9IDEwMw0KICAgICtjb25zdCBf
SVBPUFRfU0VDVVJfQ09ORklEID0gMHhmMTM1DQogICAgK2NvbnN0IF9FU1BJUEUgPSAyOQ0KICAg
ICtjb25zdCBfQUZfU05BID0gX1BGX1NOQQ0KICAgICtjb25zdCBfUlRBX1BST1RPSU5GTyA9IDEw
DQogICAgK2NvbnN0IF9fX05SX2JwZiA9IDMyMQ0KICAgICtjb25zdCBfU1lTX2Fmc19zeXNjYWxs
ID0gX19fTlJfYWZzX3N5c2NhbGwNCiAgICArY29uc3QgX1VJTlRfRkFTVDhfTUFYID0gKDI1NSkN
CiAgICArY29uc3QgX1NUQV9OQU5PID0gMHgyMDAwDQogICAgK2NvbnN0IF9VU0hSVF9XSURUSCA9
IDE2DQogICAgK2NvbnN0IF9PX0xBUkdFRklMRSA9IF9fX09fTEFSR0VGSUxFDQogICAgK2NvbnN0
IF9fX05SX3NjaGVkX3NldGFmZmluaXR5ID0gMjAzDQogICAgK2NvbnN0IF9TT0xfTExDID0gMjY4
DQogICAgK2NvbnN0IF9fX0lGTEFfVlhMQU5fTUFYID0gMjkNCiAgICArY29uc3QgX0VJU0NPTk4g
PSAxMDYNCiAgICArY29uc3QgX1RJT0NQS1RfU1RBUlQgPSA4DQogICAgK2NvbnN0IF9JRkxBX0dT
T19NQVhfU0VHUyA9IDQwDQogICAgK2NvbnN0IF9TT19MSU5HRVIgPSAxMw0KICAgICtjb25zdCBf
X19VSU5UX0xFQVNUMTZfTUFYX18gPSAweGZmZmYNCiAgICArY29uc3QgX09MQ1VDID0gMDAwMDAw
Mg0KICAgICtjb25zdCBfUFJfR0VUX1RJTUVSU0xBQ0sgPSAzMA0KICAgICtjb25zdCBfX19OUl9s
c3RhdCA9IDYNCiAgICArY29uc3QgX19QT1NJWF9TWU1MT09QX01BWCA9IDgNCiAgICArY29uc3Qg
X1JUTkxHUlBfTk9USUZZID0gMg0KICAgICtjb25zdCBfX19EQkxfRElHX18gPSAxNQ0KICAgICtj
b25zdCBfX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MgPSAxMTExDQogICAgK2NvbnN0IF9S
VE5fVU5SRUFDSEFCTEUgPSA3DQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9M
REZMQUdTID0gMTEyNQ0KICAgICtjb25zdCBfX19ERUM2NF9NQVhfXyA9IDkuOTk5OTk5OTk5OTk5
OTk5RTM4NA0KICAgICtjb25zdCBfSUZMQV9IU1JfU0xBVkUxID0gMQ0KICAgICtjb25zdCBfX1BP
U0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRSA9IDIwMDgwOQ0KICAgICtjb25zdCBfSEFWRV9ORVRJ
TkVUX0lQX0ggPSAxDQogICAgK2NvbnN0IF9JRkhXQUREUkxFTiA9IDYNCiAgICArY29uc3QgX1RD
U0VUU0YgPSAweDU0MDQNCiAgICArY29uc3QgX19CSVRTX1NJR0VWRU5UX0NPTlNUU19IID0gMQ0K
ICAgICtjb25zdCBfWERQX0FUVEFDSEVEX01VTFRJID0gNA0KICAgICtjb25zdCBfTkxNU0dFUlJf
QVRUUl9VTlVTRUQgPSAwDQogICAgK2NvbnN0IF9NRkRfSFVHRVRMQiA9IDQNCiAgICArY29uc3Qg
X19fV0NIQVJfTUFYID0gX19fV0NIQVJfTUFYX18NCiAgICArY29uc3QgX19TQ19TU0laRV9NQVgg
PSAxMTANCiAgICArY29uc3QgX0lQX1VOSUNBU1RfSUYgPSA1MA0KICAgICtjb25zdCBfU09fUkNW
QlVGRk9SQ0UgPSAzMw0KICAgICtjb25zdCBfU1lTX25mc3NlcnZjdGwgPSBfX19OUl9uZnNzZXJ2
Y3RsDQogICAgK2NvbnN0IF9CVVNfQURSQUxOID0gMQ0KICAgICtjb25zdCBfSVBWNl9QS1RJTkZP
ID0gNTANCiAgICArY29uc3QgX1NZU19scmVtb3ZleGF0dHIgPSBfX19OUl9scmVtb3ZleGF0dHIN
CiAgICArY29uc3QgX1RDU0VUU1cgPSAweDU0MDMNCiAgICArY29uc3QgX0VBSV9TT0NLVFlQRSA9
IC03DQogICAgK2NvbnN0IF9fU0NfVjdfSUxQMzJfT0ZGMzIgPSAyMzcNCiAgICArY29uc3QgX1NZ
U19pb19jYW5jZWwgPSBfX19OUl9pb19jYW5jZWwNCiAgICArY29uc3QgX0lQUFJPVE9fSVBJUCA9
IDQNCiAgICArY29uc3QgX2xpbnV4ID0gMQ0KICAgICtjb25zdCBfV05PV0FJVCA9IDB4MDEwMDAw
MDANCiAgICArY29uc3QgX19fTE9DS19BVE9NSUMgPSAxNg0KICAgICtjb25zdCBfSVBWNl9SRUNW
UlRIRFIgPSA1Ng0KICAgICtjb25zdCBfVENQX0NBX09wZW4gPSAwDQogICAgK2NvbnN0IF9fU0Nf
TEVWRUwzX0NBQ0hFX0xJTkVTSVpFID0gMTk2DQogICAgK2NvbnN0IF9MSU5VWF9SRUJPT1RfQ01E
X0hBTFQgPSAweENERUYwMTIzDQogICAgK2NvbnN0IF9JQ01QNl9GSUxURVIgPSAxDQogICAgK2Nv
bnN0IF9IQVZFX05FVF9ST1VURV9IID0gMQ0KICAgICtjb25zdCBfU09fQlVTWV9QT0xMID0gNDYN
CiAgICArY29uc3QgX0VORklMRSA9IDIzDQogICAgK2NvbnN0IF9fU0NfVEhSRUFEUyA9IDY3DQog
ICAgK2NvbnN0IF9fSU9DX1NJWkVNQVNLID0gKCgxIDw8IF9fSU9DX1NJWkVCSVRTKS0xKQ0KICAg
ICtjb25zdCBfSVBfSVBTRUNfUE9MSUNZID0gMTYNCiAgICArY29uc3QgX1JUTVNHX0NPTlRST0wg
PSAweDQwDQogICAgK2NvbnN0IF9TT19NQVJLID0gMzYNCiAgICArY29uc3QgX01BUF9QUklWQVRF
ID0gMHgwMg0KICAgICtjb25zdCBfX1BDX1JFQ19YRkVSX0FMSUdOID0gMTcNCiAgICArY29uc3Qg
X19CSVRTX1RZUEVTSVpFU19IID0gMQ0KICAgICtjb25zdCBfRkZJX1RZUEVfTE9OR0RPVUJMRSA9
IDQNCiAgICArY29uc3QgX19fTlJfYWRkX2tleSA9IDI0OA0KICAgICtjb25zdCBfX19TSUdfQVRP
TUlDX01BWF9fID0gMHg3ZmZmZmZmZg0KICAgICtjb25zdCBfUF9QR0lEID0gMg0KICAgICtjb25z
dCBfRUFJX1NFUlZJQ0UgPSAtOA0KICAgICtjb25zdCBfUlRBX0ZMT1cgPSAxMQ0KICAgICtjb25z
dCBfSU5fQ1JFQVRFID0gMHgwMDAwMDEwMA0KICAgICtjb25zdCBfX1BPU0lYX1RSQUNFX0xPRyA9
IC0xDQogICAgK2NvbnN0IF9TQ05kTEVBU1QxNiA9ICJoZCINCiAgICArY29uc3QgX1JUTl9CUk9B
RENBU1QgPSAzDQogICAgK2NvbnN0IF9SVEVYVF9GSUxURVJfQlJWTEFOX0NPTVBSRVNTRUQgPSAo
MSA8PCAyKQ0KICAgICtjb25zdCBfSU5UMTZfTUlOID0gKC0zMjc2Ny0xKQ0KICAgICtjb25zdCBf
SUZMQV9YRlJNX0xJTksgPSAxDQogICAgK2NvbnN0IF9OTE1TR0VSUl9BVFRSX01TRyA9IDENCiAg
ICArY29uc3QgX0FGX1JPU0UgPSBfUEZfUk9TRQ0KICAgICtjb25zdCBfU0NOZDE2ID0gImhkIg0K
ICAgICtjb25zdCBfX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSA9IDYyDQogICAgK2NvbnN0IF9IQVZF
X01LTk9EQVQgPSAxDQogICAgK2NvbnN0IF9JRkxBX0xJTktfTkVUTlNJRCA9IDM3DQogICAgK2Nv
bnN0IF9TWVNfc29ja2V0ID0gX19fTlJfc29ja2V0DQogICAgK2NvbnN0IF9TSU9DUlRNU0cgPSAw
eDg5MEQNCiAgICArY29uc3QgX19FUlJOT19IID0gMQ0KICAgICtjb25zdCBfUEZfQVBQTEVUQUxL
ID0gNQ0KICAgICtjb25zdCBfX19TU0VfXyA9IDENCiAgICArY29uc3QgX1hEUF9BVFRBQ0hFRF9I
VyA9IDMNCiAgICArY29uc3QgX1RJT0NTRVJHRVRNVUxUSSA9IDB4NTQ1QQ0KICAgICtjb25zdCBf
U0VHVl9CTkRFUlIgPSAzDQogICAgK2NvbnN0IF9JRkxBX0JPTkRfU0xBVkVfVU5TUEVDID0gMA0K
ICAgICtjb25zdCBfSUZMQV9CT05EX1JFU0VORF9JR01QID0gMTUNCiAgICArY29uc3QgX1JUTV9E
RUxRRElTQyA9IDM3DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfUFJJTUFSWV9SRVNFTEVDVCA9IDEy
DQogICAgK2NvbnN0IF9SRU5BTUVfTk9SRVBMQUNFID0gKDEgPDwgMCkNCiAgICArY29uc3QgX1RD
UF9DTE9TRV9XQUlUID0gOA0KICAgICtjb25zdCBfX19OUl9icmsgPSAxMg0KICAgICtjb25zdCBf
RU5BTUVUT09MT05HID0gMzYNCiAgICArY29uc3QgX19TQ19UVFlfTkFNRV9NQVggPSA3Mg0KICAg
ICtjb25zdCBfQjUwID0gMDAwMDAwMQ0KICAgICtjb25zdCBfU1lTX2ZnZXR4YXR0ciA9IF9fX05S
X2ZnZXR4YXR0cg0KICAgICtjb25zdCBfSUZMQV9JTkVUNl9GTEFHUyA9IDENCiAgICArY29uc3Qg
X19fTlJfbXFfdGltZWRzZW5kID0gMjQyDQogICAgK2NvbnN0IF9fU1RSSU5HX0ggPSAxDQogICAg
K2NvbnN0IF9ORFRQQV9QQUQgPSAxOA0KICAgICtjb25zdCBfX19OUl9zZXRfdGlkX2FkZHJlc3Mg
PSAyMTgNCiAgICArY29uc3QgX1NURElOX0ZJTEVOTyA9IDANCiAgICArY29uc3QgX19fTlJfdGlt
ZXJmZF9jcmVhdGUgPSAyODMNCiAgICArY29uc3QgX19fSUZMQV9JUE9JQl9NQVggPSA0DQogICAg
K2NvbnN0IF9fX3NpZ3NldF90X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9QUl9GUF9FWENfUkVT
ID0gMHgwODAwMDANCiAgICArY29uc3QgX1NZU19tZW1mZF9jcmVhdGUgPSBfX19OUl9tZW1mZF9j
cmVhdGUNCiAgICArY29uc3QgX19DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElCUyA9IDExMzAN
CiAgICArY29uc3QgX0lDTVA2X0ZJTFRFUl9QQVNTID0gMg0KICAgICtjb25zdCBfU0FfUkVTVEFS
VCA9IDB4MTAwMDAwMDANCiAgICArY29uc3QgX1RJT0NHTENLVFJNSU9TID0gMHg1NDU2DQogICAg
K2NvbnN0IF9fU0NfUFJJT1JJVElaRURfSU8gPSAxMw0KICAgICtjb25zdCBfUFRSQUNFX1NFQ0NP
TVBfR0VUX0ZJTFRFUiA9IDE2OTA4DQogICAgK2NvbnN0IF9DTE9ORV9ORVdJUEMgPSAweDA4MDAw
MDAwDQogICAgK2NvbnN0IF9VU0VfTElCRkZJID0gMQ0KICAgICtjb25zdCBfU0FfT05FU0hPVCA9
IF9TQV9SRVNFVEhBTkQNCiAgICArY29uc3QgX19fTlJfZ2V0cHBpZCA9IDExMA0KICAgICtjb25z
dCBfRU5YSU8gPSA2DQogICAgK2NvbnN0IF9fX05SX2Vwb2xsX3dhaXQgPSAyMzINCiAgICArY29u
c3QgX19TQ19YT1BFTl9TSE0gPSA5NA0KICAgICtjb25zdCBfSUZMQV9WRl9WTEFOX0xJU1QgPSAx
Mg0KICAgICtjb25zdCBfQ0hBUl9NQVggPSBfU0NIQVJfTUFYDQogICAgK2NvbnN0IF9JRkxBX05F
VF9OU19GRCA9IDI4DQogICAgK2NvbnN0IF9fX1BSQUdNQV9SRURFRklORV9FWFROQU1FID0gMQ0K
ICAgICtjb25zdCBfX1NDX1JUU0lHX01BWCA9IDMxDQogICAgK2NvbnN0IF9TSUdXSU5DSCA9IDI4
DQogICAgK2NvbnN0IF9NQURWX0ZSRUUgPSA4DQogICAgK2NvbnN0IF9JRkxBX1BIWVNfU1dJVENI
X0lEID0gMzYNCiAgICArY29uc3QgX1NZU19zeW1saW5rYXQgPSBfX19OUl9zeW1saW5rYXQNCiAg
ICArY29uc3QgX0lGQV9GX1RFTlRBVElWRSA9IDB4NDANCiAgICArY29uc3QgX0lQVjZfUkVDVlRD
TEFTUyA9IDY2DQogICAgK2NvbnN0IF9fX0ZMVDMyWF9IQVNfUVVJRVRfTkFOX18gPSAxDQogICAg
K2NvbnN0IF9QT1JUX1ZEUF9SRVNQT05TRV9PVVRfT0ZfU1lOQyA9IDYNCiAgICArY29uc3QgX1BG
X05FVFJPTSA9IDYNCiAgICArY29uc3QgX1BSX1NFVF9NTV9FTkRfQ09ERSA9IDINCiAgICArY29u
c3QgX1NUQV9QUFNUSU1FID0gMHgwMDA0DQogICAgK2NvbnN0IF9BUlBEX0xPT0tVUCA9IDB4MDIN
CiAgICArY29uc3QgX0ZfU0VUT1dOX0VYID0gX19fRl9TRVRPV05fRVgNCiAgICArY29uc3QgX0JD
X1NDQUxFX01BWCA9IF9fUE9TSVgyX0JDX1NDQUxFX01BWA0KICAgICtjb25zdCBfU0lPQ1NJRlNM
QVZFID0gMHg4OTMwDQogICAgK2NvbnN0IF9FTk9TVFIgPSA2MA0KICAgICtjb25zdCBfRlNfU1lO
Q19GTCA9IDB4MDAwMDAwMDgNCiAgICArY29uc3QgX19fTlJfc2NoZWRfc2V0cGFyYW0gPSAxNDIN
CiAgICArY29uc3QgX19TQ19USFJFQURfVEhSRUFEU19NQVggPSA3Ng0KICAgICtjb25zdCBfSUZM
QV9UVU5fUEkgPSA0DQogICAgK2NvbnN0IF9TS0ZfQURfVkxBTl9UUElEID0gNjANCiAgICArY29u
c3QgX0lGTEFfSFNSX1NMQVZFMiA9IDINCiAgICArY29uc3QgX1BBQ0tFVF9GQU5PVVQgPSAxOA0K
ICAgICtjb25zdCBfU0FfTk9ERUZFUiA9IDB4NDAwMDAwMDANCiAgICArY29uc3QgX05MTVNHX01J
Tl9UWVBFID0gMHgxMA0KICAgICtjb25zdCBfVElPQ01fUkkgPSBfVElPQ01fUk5HDQogICAgK2Nv
bnN0IF9JUFRPU19FQ05fRUNUMCA9IDB4MDINCiAgICArY29uc3QgX1NZU19mY250bCA9IF9fX05S
X2ZjbnRsDQogICAgK2NvbnN0IF9TSU9DU0lGTUVNID0gMHg4OTIwDQogICAgK2NvbnN0IF9JRkxB
X0lQVkxBTl9VTlNQRUMgPSAwDQogICAgK2NvbnN0IF9TWVNfZ2V0ZXVpZCA9IF9fX05SX2dldGV1
aWQNCiAgICArY29uc3QgX1JUTl9MT0NBTCA9IDINCiAgICArY29uc3QgX1RVTlNFVE9GRkxPQURf
dmFsID0gMTA3NDAyNTY4MA0KICAgICtjb25zdCBfTkxNU0dFUlJfQVRUUl9NQVggPSAzDQogICAg
K2NvbnN0IF9JRkxBX1ZYTEFOX0dST1VQNiA9IDE2DQogICAgK2NvbnN0IF9FVEhfTUlOX01UVSA9
IDY4DQogICAgK2NvbnN0IF9TQ05vTEVBU1QxNiA9ICJobyINCiAgICArY29uc3QgX0lGRl9OQVBJ
ID0gMHgwMDEwDQogICAgK2NvbnN0IF9GRklfVFlQRV9VSU5UNjQgPSAxMQ0KICAgICtjb25zdCBf
UEZfQ0FJRiA9IDM3DQogICAgK2NvbnN0IF9DTE9ORV9TRVRUTFMgPSAweDAwMDgwMDAwDQogICAg
K2NvbnN0IF9fX0RFQzY0X1NVQk5PUk1BTF9NSU5fXyA9IDAuMDAwMDAwMDAwMDAwMDAxRS0zODMN
CiAgICArY29uc3QgX19fT19OT0ZPTExPVyA9IDA0MDAwMDANCiAgICArY29uc3QgX19CSVRTX1NJ
R05VTV9IID0gMQ0KICAgICtjb25zdCBfTkVUTElOS19EUk9QX01FTUJFUlNISVAgPSAyDQogICAg
K2NvbnN0IF9fX05SX2lub3RpZnlfaW5pdCA9IDI1Mw0KICAgICtjb25zdCBfU1RBVFhfQVRUUl9O
T0RVTVAgPSAweDAwNDANCiAgICArY29uc3QgX19fTlJfdXRpbWVuc2F0ID0gMjgwDQogICAgK2Nv
bnN0IF9fX05SX3RpbWVyZmRfc2V0dGltZSA9IDI4Ng0KICAgICtjb25zdCBfSUZMQV9JTkVUX1VO
U1BFQyA9IDANCiAgICArY29uc3QgX0FGX05FVEJFVUkgPSBfUEZfTkVUQkVVSQ0KICAgICtjb25z
dCBfUlRfVEFCTEVfTUFJTiA9IDI1NA0KICAgICtjb25zdCBfU0tGX0FEX09GRiA9ICgtMHgxMDAw
KQ0KICAgICtjb25zdCBfX19ERUMzMl9NQU5UX0RJR19fID0gNw0KICAgICtjb25zdCBfQk1BUF9J
T0NUTCA9IDENCiAgICArY29uc3QgX1JUTV9ORVdURklMVEVSID0gNDQNCiAgICArY29uc3QgX1NB
X05PTUFTSyA9IF9TQV9OT0RFRkVSDQogICAgK2NvbnN0IF9NQVBfRVhFQ1VUQUJMRSA9IDB4MDEw
MDANCiAgICArY29uc3QgX1NUQV9VTlNZTkMgPSAweDAwNDANCiAgICArY29uc3QgX0VOT1RESVIg
PSAyMA0KICAgICtjb25zdCBfRUlOVkFMID0gMjINCiAgICArY29uc3QgX1RVTkdFVEZJTFRFUl92
YWwgPSAyMTQ4NTUzOTQ3DQogICAgK2NvbnN0IF9fX05SX3NjaGVkX2dldGF0dHIgPSAzMTUNCiAg
ICArY29uc3QgX1RVTlNFVERFQlVHX3ZhbCA9IDEwNzQwMjU2NzMNCiAgICArY29uc3QgX1NDTngx
NiA9ICJoeCINCiAgICArY29uc3QgX0lQX0ZSRUVCSU5EID0gMTUNCiAgICArY29uc3QgX0lOX0NM
QVNTQV9NQVggPSAxMjgNCiAgICArY29uc3QgX0I3NSA9IDAwMDAwMDINCiAgICArY29uc3QgX0VQ
T0xMX0NMT0VYRUMgPSA1MjQyODgNCiAgICArY29uc3QgX05FVExJTktfR0VORVJJQyA9IDE2DQog
ICAgK2NvbnN0IF9QVFJBQ0VfUEVFS1VTUiA9IDMNCiAgICArY29uc3QgX1BBQ0tFVF9PVEhFUkhP
U1QgPSAzDQogICAgK2NvbnN0IF9fX0ZMVDY0X0RJR19fID0gMTUNCiAgICArY29uc3QgX0FSUEhS
RF9JRUVFODAyX1RSID0gODAwDQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9MRUFSTklORyA9IDgN
CiAgICArY29uc3QgX1RDSU9GRiA9IDINCiAgICArY29uc3QgX1JUX1RBQkxFX1VOU1BFQyA9IDAN
CiAgICArY29uc3QgX05EVFBBX0RFTEFZX1BST0JFX1RJTUUgPSA3DQogICAgK2NvbnN0IF9fU0Nf
QVNZTkNIUk9OT1VTX0lPID0gMTINCiAgICArY29uc3QgX05EX1JPVVRFUl9BRFZFUlQgPSAxMzQN
CiAgICArY29uc3QgX1BBQ0tFVF9EUk9QX01FTUJFUlNISVAgPSAyDQogICAgK2NvbnN0IF9JTl9D
TE9TRV9XUklURSA9IDB4MDAwMDAwMDgNCiAgICArY29uc3QgX05FVExJTktfQ09OTkVDVE9SID0g
MTENCiAgICArY29uc3QgX1RJT0NNX1NSID0gMHgwMTANCiAgICArY29uc3QgX0ZfR0VUTEsgPSBf
Rl9HRVRMSzY0DQogICAgK2NvbnN0IF9USU9DTV9TVCA9IDB4MDA4DQogICAgK2NvbnN0IF9FS0VZ
RVhQSVJFRCA9IDEyNw0KICAgICtjb25zdCBfU0lPQ0FUTUFSSyA9IDB4ODkwNQ0KICAgICtjb25z
dCBfX1NDX0xFVkVMMl9DQUNIRV9TSVpFID0gMTkxDQogICAgK2NvbnN0IF9VSU5UX0xFQVNUOF9X
SURUSCA9IDgNCiAgICArY29uc3QgX1NJT0NHSUZCUkRBRERSID0gMHg4OTE5DQogICAgK2NvbnN0
IF9SVE1fR0VUQUNUSU9OID0gNTANCiAgICArY29uc3QgX1NPTF9BVE0gPSAyNjQNCiAgICArY29u
c3QgX19TQ19UWk5BTUVfTUFYID0gNg0KICAgICtjb25zdCBfRl9TRVRMS1cgPSBfRl9TRVRMS1c2
NA0KICAgICtjb25zdCBfX19XQ0hBUl9NSU5fXyA9ICgtX19fV0NIQVJfTUFYX18gLSAxKQ0KICAg
ICtjb25zdCBfX1NDX1hCUzVfTFBCSUdfT0ZGQklHID0gMTI4DQogICAgK2NvbnN0IF9QT1JUX1BS
T0ZJTEVfUkVTUE9OU0VfQkFEU1RBVEUgPSAyNTkNCiAgICArY29uc3QgX1NFRUtfSE9MRSA9IDQN
CiAgICArY29uc3QgX0lQUE9SVF9TTVRQID0gMjUNCiAgICArY29uc3QgX1RJT0NDT05TID0gMHg1
NDFEDQogICAgK2NvbnN0IF9JRl9OQU1FU0laRSA9IDE2DQogICAgK2NvbnN0IF9FQkFERSA9IDUy
DQogICAgK2NvbnN0IF9FQkFERiA9IDkNCiAgICArY29uc3QgX19fTlJfY2xvY2tfYWRqdGltZSA9
IDMwNQ0KICAgICtjb25zdCBfU1lTX2ZzdGF0ZnMgPSBfX19OUl9mc3RhdGZzDQogICAgK2NvbnN0
IF9FQ0hPS0UgPSAwMDA0MDAwDQogICAgK2NvbnN0IF9IQVZFX1NZU19VVFNOQU1FX0ggPSAxDQog
ICAgK2NvbnN0IF9SV0hfV1JJVEVfTElGRV9OT05FID0gMQ0KICAgICtjb25zdCBfQjM1MDAwMDAg
PSAwMDEwMDE2DQogICAgK2NvbnN0IF9fX05SX3NlbmRmaWxlID0gNDANCiAgICArY29uc3QgX19f
TlJfZmNob3duYXQgPSAyNjANCiAgICArY29uc3QgX0VCQURSID0gNTMNCiAgICArY29uc3QgX1JF
R19SU1AgPSAxNQ0KICAgICtjb25zdCBfU0lHQ0hMRCA9IDE3DQogICAgK2NvbnN0IF9fX05SX2Zv
cmsgPSA1Nw0KICAgICtjb25zdCBfQUZfRklMRSA9IF9QRl9GSUxFDQogICAgK2NvbnN0IF9DTE9D
S19SRUFMVElNRV9BTEFSTSA9IDgNCiAgICArY29uc3QgX19TQ19USFJFQURfU1RBQ0tfTUlOID0g
NzUNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fUE9SVCA9IDE1DQogICAgK2NvbnN0IF9JRkxBX01B
Q1NFQ19WQUxJREFUSU9OID0gMTMNCiAgICArY29uc3QgX0lGTEFfQk9ORF9BUlBfQUxMX1RBUkdF
VFMgPSAxMA0KICAgICtjb25zdCBfX1hPUEVOX1VOSVggPSAxDQogICAgK2NvbnN0IF9FSE9TVFVO
UkVBQ0ggPSAxMTMNCiAgICArY29uc3QgX1JMSU1fU0FWRURfTUFYID0gX1JMSU1fSU5GSU5JVFkN
CiAgICArY29uc3QgX1NfQkxLU0laRSA9IDUxMg0KICAgICtjb25zdCBfX191bml4ID0gMQ0KICAg
ICtjb25zdCBfX19OUl9mY2htb2QgPSA5MQ0KICAgICtjb25zdCBfU0NOb0xFQVNUMzIgPSAibyIN
CiAgICArY29uc3QgX0VMM1JTVCA9IDQ3DQogICAgK2NvbnN0IF9GRklfRkFTVENBTEwgPSA0DQog
ICAgK2NvbnN0IF9JRkxBX1ZGX1NUQVRTX1RYX0JZVEVTID0gMw0KICAgICtjb25zdCBfVENTRVRY
RiA9IDB4NTQzNA0KICAgICtjb25zdCBfSUZMQV9QSFlTX1BPUlRfTkFNRSA9IDM4DQogICAgK2Nv
bnN0IF9JTlRfRkFTVDhfV0lEVEggPSA4DQogICAgK2NvbnN0IF9DUlRTQ1RTID0gMDIwMDAwMDAw
MDAwDQogICAgK2NvbnN0IF9fX0lGTEFfTUFDU0VDX01BWCA9IDE1DQogICAgK2NvbnN0IF9JRkxB
X05FVF9OU19QSUQgPSAxOQ0KICAgICtjb25zdCBfU0lPQ1NJRkhXQUREUiA9IDB4ODkyNA0KICAg
ICtjb25zdCBfX19TSV9BU1lOQ0lPX0FGVEVSX1NJR0lPID0gMQ0KICAgICtjb25zdCBfVElPQ1ZI
QU5HVVAgPSAweDU0MzcNCiAgICArY29uc3QgX0FURl9ORVRNQVNLID0gMHgyMA0KICAgICtjb25z
dCBfVENTRVRYVyA9IDB4NTQzNQ0KICAgICtjb25zdCBfU09MX05GQyA9IDI4MA0KICAgICtjb25z
dCBfX19TSVpFT0ZfSU5UMTI4X18gPSAxNg0KICAgICtjb25zdCBfX19TVERDX1VURl8xNl9fID0g
MQ0KICAgICtjb25zdCBfVElPQ1BLVF9ET1NUT1AgPSAzMg0KICAgICtjb25zdCBfRFRfTE5LID0g
MTANCiAgICArY29uc3QgX19fRkxUMzJfTUlOXzEwX0VYUF9fID0gKC0zNykNCiAgICArY29uc3Qg
X0VOT0xDSyA9IDM3DQogICAgK2NvbnN0IF9TWVNfc2NoZWRfcnJfZ2V0X2ludGVydmFsID0gX19f
TlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsDQogICAgK2NvbnN0IF9BRl9SWFJQQyA9IF9QRl9SWFJQ
Qw0KICAgICtjb25zdCBfUFJfR0VUX1VOQUxJR04gPSA1DQogICAgK2NvbnN0IF9JTl9DTEFTU0Jf
SE9TVCA9ICgweGZmZmZmZmZmICYgXl9JTl9DTEFTU0JfTkVUKQ0KICAgICtjb25zdCBfVENBX0ZM
QUdfTEFSR0VfRFVNUF9PTiA9ICgxIDw8IDApDQogICAgK2NvbnN0IF9fX05SX21rZGlyID0gODMN
CiAgICArY29uc3QgX19TQ19USFJFQURfU0FGRV9GVU5DVElPTlMgPSA2OA0KICAgICtjb25zdCBf
TkRUUEFfTUNBU1RfUkVQUk9CRVMgPSAxNw0KICAgICtjb25zdCBfSVBWNl9SWERTVE9QVFMgPSBf
SVBWNl9EU1RPUFRTDQogICAgK2NvbnN0IF9fX05SX2ZhY2Nlc3NhdCA9IDI2OQ0KICAgICtjb25z
dCBfRVRIX1BfTVZSUCA9IDB4ODhGNQ0KICAgICtjb25zdCBfX1NDX1hPUEVOX0xFR0FDWSA9IDEy
OQ0KICAgICtjb25zdCBfUEFHRV9TSVpFID0gKDEgPDwgX1BBR0VfU0hJRlQpDQogICAgK2NvbnN0
IF9SVEZfTk9ORVhUSE9QID0gMHgwMDIwMDAwMA0KICAgICtjb25zdCBfX0JJVFNfV0NIQVJfSCA9
IDENCiAgICArY29uc3QgX1BSX1NFVF9QREVBVEhTSUcgPSAxDQogICAgK2NvbnN0IF9TWVNfaW9w
ZXJtID0gX19fTlJfaW9wZXJtDQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjdfSUxQMzJfT0ZGMzJf
TElCUyA9IDExMzQNCiAgICArY29uc3QgX0lGTEFfVkZfVkxBTl9JTkZPX1VOU1BFQyA9IDANCiAg
ICArY29uc3QgX01TX05PRVhFQyA9IDgNCiAgICArY29uc3QgX1ZUSU1FID0gNQ0KICAgICtjb25z
dCBfX19JTlRfRkFTVDY0X1dJRFRIX18gPSA2NA0KICAgICtjb25zdCBfSVBQT1JUX05FVFNUQVQg
PSAxNQ0KICAgICtjb25zdCBfU0NObzE2ID0gImhvIg0KICAgICtjb25zdCBfTl9IRExDID0gMTMN
CiAgICArY29uc3QgX1BPUlRfVkRQX1JFU1BPTlNFX1ZUSURfVklPTEFUSU9OID0gNA0KICAgICtj
b25zdCBfX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiA9IDc3DQogICAgK2NvbnN0IF9FVEhfUF9J
UFggPSAweDgxMzcNCiAgICArY29uc3QgX1BSSXVMRUFTVDMyID0gInUiDQogICAgK2NvbnN0IF9J
RkxBX01BQ1ZMQU5fTUFDQUREUl9NT0RFID0gMw0KICAgICtjb25zdCBfRlNfRkxfVVNFUl9NT0RJ
RklBQkxFID0gMHgwMDAzODBGRg0KICAgICtjb25zdCBfX19HQ0NfQVRPTUlDX1RFU1RfQU5EX1NF
VF9UUlVFVkFMID0gMQ0KICAgICtjb25zdCBfX19OUl9yZW5hbWVhdCA9IDI2NA0KICAgICtjb25z
dCBfTVNHX0RPTlRST1VURSA9IDQNCiAgICArY29uc3QgX1RJT0NTSUdfdmFsID0gMTA3NDAyNTUy
Ng0KICAgICtjb25zdCBfX1BBVEhfTlNTV0lUQ0hfQ09ORiA9ICIvZXRjL25zc3dpdGNoLmNvbmYi
DQogICAgK2NvbnN0IF9TWVNfYWNjZXB0ID0gX19fTlJfYWNjZXB0DQogICAgK2NvbnN0IF9QQUNL
RVRfUkVTRVJWRSA9IDEyDQogICAgK2NvbnN0IF9TVEFfUFBTSklUVEVSID0gMHgwMjAwDQogICAg
K2NvbnN0IF9fX05SX3NpZ25hbGZkID0gMjgyDQogICAgK2NvbnN0IF9TT19QRUVSU0VDID0gMzEN
CiAgICArY29uc3QgX19fSU5UX1dJRFRIX18gPSAzMg0KICAgICtjb25zdCBfX1hPUEVOX0lPVl9N
QVggPSBfX1BPU0lYX1VJT19NQVhJT1YNCiAgICArY29uc3QgX05URl9VU0UgPSAweDAxDQogICAg
K2NvbnN0IF9fX0JJR19FTkRJQU4gPSA0MzIxDQogICAgK2NvbnN0IF9VSU5UMTZfV0lEVEggPSAx
Ng0KICAgICtjb25zdCBfU0VHVl9BQ0NFUlIgPSAyDQogICAgK2NvbnN0IF9TQ05vMzIgPSAibyIN
CiAgICArY29uc3QgX19fTlJfcmVjdmZyb20gPSA0NQ0KICAgICtjb25zdCBfVENQX0NPT0tJRV9J
Tl9BTFdBWVMgPSAoMSA8PCAwKQ0KICAgICtjb25zdCBfU0tGX0FEX1BBWV9PRkZTRVQgPSA1Mg0K
ICAgICtjb25zdCBfU1lTX3JlYWR2ID0gX19fTlJfcmVhZHYNCiAgICArY29uc3QgX1BGX1JEUyA9
IDIxDQogICAgK2NvbnN0IF9JUFY2X0RTVE9QVFMgPSA1OQ0KICAgICtjb25zdCBfX1NZU19QVFJB
Q0VfSCA9IDENCiAgICArY29uc3QgX1JUTV9GX05PVElGWSA9IDB4MTAwDQogICAgK2NvbnN0IF9U
Q1BPUFRfU0FDSyA9IDUNCiAgICArY29uc3QgX1RDUF9NRDVTSUdfRVhUID0gMzINCiAgICArY29u
c3QgX0lGRl9CUk9BRENBU1QgPSAyDQogICAgK2NvbnN0IF9JUE9QVF9TQVRJRCA9IDEzNg0KICAg
ICtjb25zdCBfVElPQ01CSUMgPSAweDU0MTcNCiAgICArY29uc3QgX0ZTX0lOREVYX0ZMID0gMHgw
MDAwMTAwMA0KICAgICtjb25zdCBfU1lTX3VuYW1lID0gX19fTlJfdW5hbWUNCiAgICArY29uc3Qg
X01PRF9USU1FQ09OU1QgPSBfQURKX1RJTUVDT05TVA0KICAgICtjb25zdCBfTUNBU1RfSU5DTFVE
RSA9IDENCiAgICArY29uc3QgX0lGRl9UVU5fRVhDTCA9IDB4ODAwMA0KICAgICtjb25zdCBfUFJf
VEFTS19QRVJGX0VWRU5UU19ESVNBQkxFID0gMzENCiAgICArY29uc3QgX0lQX01UVV9ESVNDT1ZF
UiA9IDEwDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX1BPUlRfUkFOR0UgPSAxMA0KICAgICtjb25z
dCBfX19OUl9zY2hlZF9zZXRhdHRyID0gMzE0DQogICAgK2NvbnN0IF9TWVNfc2V0cHJpb3JpdHkg
PSBfX19OUl9zZXRwcmlvcml0eQ0KICAgICtjb25zdCBfRVNUUlBJUEUgPSA4Ng0KICAgICtjb25z
dCBfUlRGX0lSVFQgPSAweDAxMDANCiAgICArY29uc3QgX0lGTEFfRVZFTlRfTk9ORSA9IDANCiAg
ICArY29uc3QgX1RDQV9PUFRJT05TID0gMg0KICAgICtjb25zdCBfU0VFS19EQVRBID0gMw0KICAg
ICtjb25zdCBfRl9PV05FUl9HSUQgPSAyDQogICAgK2NvbnN0IF9FTk9MSU5LID0gNjcNCiAgICAr
Y29uc3QgX01BQ1ZMQU5fTU9ERV9WRVBBID0gMg0KICAgICtjb25zdCBfSUZMQV9CUl9WTEFOX0RF
RkFVTFRfUFZJRCA9IDM5DQogICAgK2NvbnN0IF9WU1dUQyA9IDcNCiAgICArY29uc3QgX1NBX0lO
VEVSUlVQVCA9IDB4MjAwMDAwMDANCiAgICArY29uc3QgX19fREJMX0hBU19RVUlFVF9OQU5fXyA9
IDENCiAgICArY29uc3QgX0FSUE9QX0luUkVQTFkgPSA5DQogICAgK2NvbnN0IF9TWVNfc2VuZG1z
ZyA9IF9fX05SX3NlbmRtc2cNCiAgICArY29uc3QgX1JUTVNHX0RFTFJPVVRFID0gMHgyMg0KICAg
ICtjb25zdCBfVElPQ0dTSUQgPSAweDU0MjkNCiAgICArY29uc3QgX19QT1NJWF9MSU5LX01BWCA9
IDgNCiAgICArY29uc3QgX05fTU9VU0UgPSAyDQogICAgK2NvbnN0IF9TWVNfcmVhZGxpbmsgPSBf
X19OUl9yZWFkbGluaw0KICAgICtjb25zdCBfX19OUl9mY2hkaXIgPSA4MQ0KICAgICtjb25zdCBf
X19JTlRfRkFTVDY0X01BWF9fID0gMHg3ZmZmZmZmZmZmZmZmZmZmDQogICAgK2NvbnN0IF9QVFJB
Q0VfU0VUUkVHU0VUID0gMTY5MDENCiAgICArY29uc3QgX0lOX05PTkJMT0NLID0gMjA0OA0KICAg
ICtjb25zdCBfX19OUl9pbm90aWZ5X2luaXQxID0gMjk0DQogICAgK2NvbnN0IF9GRklfVFlQRV9W
T0lEID0gMA0KICAgICtjb25zdCBfRkRfQ0xPRVhFQyA9IDENCiAgICArY29uc3QgX19fTlJfc2V0
c29ja29wdCA9IDU0DQogICAgK2NvbnN0IF9FQ0hPTkwgPSAwMDAwMTAwDQogICAgK2NvbnN0IF9f
X01BWF9CQVVEID0gX0I0MDAwMDAwDQogICAgK2NvbnN0IF9FVEhfTUFYX01UVSA9IDB4RkZGRg0K
ICAgICtjb25zdCBfUEFDS0VUX1FESVNDX0JZUEFTUyA9IDIwDQogICAgK2NvbnN0IF9DTE9ORV9O
RVdVVFMgPSAweDA0MDAwMDAwDQogICAgK2NvbnN0IF9TWVNfc2VtdGltZWRvcCA9IF9fX05SX3Nl
bXRpbWVkb3ANCiAgICArY29uc3QgX0VUSF9QX1BIT05FVCA9IDB4MDBGNQ0KICAgICtjb25zdCBf
SUZMQV9PRkZMT0FEX1hTVEFUU19DUFVfSElUID0gMQ0KICAgICtjb25zdCBfX1BXRF9IID0gMQ0K
ICAgICtjb25zdCBfX1BPU0lYX1NIRUxMID0gMQ0KICAgICtjb25zdCBfRkZJX1NJWkVPRl9KQVZB
X1JBVyA9IF9GRklfU0laRU9GX0FSRw0KICAgICtjb25zdCBfUFJfU1BFQ19GT1JDRV9ESVNBQkxF
ID0gKDEgPDwgMykNCiAgICArY29uc3QgX05EQV9TUkNfVk5JID0gMTENCiAgICArY29uc3QgX19f
V0NIQVJfTUlOID0gX19fV0NIQVJfTUlOX18NCiAgICArY29uc3QgX05FVERCX0lOVEVSTkFMID0g
LTENCiAgICArY29uc3QgX19fVVNFX01JU0MgPSAxDQogICAgK2NvbnN0IF9QUklPX01BWCA9IDIw
DQogICAgK2NvbnN0IF9fX3N0cnVjdF90bV9kZWZpbmVkID0gMQ0KICAgICtjb25zdCBfRVRIRVJU
WVBFX0FSUCA9IDB4MDgwNg0KICAgICtjb25zdCBfX1BPU0lYX1RJTUVPVVRTID0gMjAwODA5DQog
ICAgK2NvbnN0IF9JRkxBX1ZYTEFOX1RUTF9JTkhFUklUID0gMjgNCiAgICArY29uc3QgX1NQTElD
RV9GX0dJRlQgPSA4DQogICAgK2NvbnN0IF9fX0JZVEVfT1JERVJfXyA9IF9fX09SREVSX0xJVFRM
RV9FTkRJQU5fXw0KICAgICtjb25zdCBfX19SVE5MR1JQX01BWCA9IDMyDQogICAgK2NvbnN0IF9f
U0NfU0FWRURfSURTID0gOA0KICAgICtjb25zdCBfTExPTkdfV0lEVEggPSA2NA0KICAgICtjb25z
dCBfU1lTX3NldGdyb3VwcyA9IF9fX05SX3NldGdyb3Vwcw0KICAgICtjb25zdCBfU0NNX1RJTUVT
VEFNUCA9IF9TT19USU1FU1RBTVANCiAgICArY29uc3QgX1BSSW8zMiA9ICJvIg0KICAgICtjb25z
dCBfQURKX1NFVE9GRlNFVCA9IDB4MDEwMA0KICAgICtjb25zdCBfUFJJWExFQVNUMTYgPSAiWCIN
CiAgICArY29uc3QgX1RIX0ZJTiA9IDB4MDENCiAgICArY29uc3QgX1VDSEFSX1dJRFRIID0gOA0K
ICAgICtjb25zdCBfUlRNX0dFVEFERFJMQUJFTCA9IDc0DQogICAgK2NvbnN0IF9fX1NJR1JUTUFY
ID0gNjQNCiAgICArY29uc3QgX0VSRVNUQVJUID0gODUNCiAgICArY29uc3QgX19TQ19WN19JTFAz
Ml9PRkZCSUcgPSAyMzgNCiAgICArY29uc3QgX19QQ19BU1lOQ19JTyA9IDEwDQogICAgK2NvbnN0
IF9fU1RSSU5HU19IID0gMQ0KICAgICtjb25zdCBfX191bml4X18gPSAxDQogICAgK2NvbnN0IF9f
X2Vycm9yX3RfZGVmaW5lZCA9IDENCiAgICArY29uc3QgX19TU19TSVpFID0gMTI4DQogICAgK2Nv
bnN0IF9OR1JFRyA9IF9fX05HUkVHDQogICAgK2NvbnN0IF9TVEFfQ0xPQ0tFUlIgPSAweDEwMDAN
CiAgICArY29uc3QgX19fRkxUNjRYX0VQU0lMT05fXyA9IDEuMQ0KICAgICtjb25zdCBfU1RBVFhf
TVRJTUUgPSAweDAwNDANCiAgICArY29uc3QgX0JQRl9SRVQgPSAweDA2DQogICAgK2NvbnN0IF9I
QVZFX1NUUkVSUk9SX1IgPSAxDQogICAgK2NvbnN0IF9TWVNfc2VuZG1tc2cgPSBfX19OUl9zZW5k
bW1zZw0KICAgICtjb25zdCBfUlRNR1JQX0lQVjRfUlVMRSA9IDB4ODANCiAgICArY29uc3QgX1NZ
U19zY2hlZF9zZXRzY2hlZHVsZXIgPSBfX19OUl9zY2hlZF9zZXRzY2hlZHVsZXINCiAgICArY29u
c3QgX05EQV9DQUNIRUlORk8gPSAzDQogICAgK2NvbnN0IF9DTE9ORV9WTSA9IDB4MDAwMDAxMDAN
CiAgICArY29uc3QgX0ZJTEVfREVEVVBFX1JBTkdFX0RJRkZFUlMgPSAxDQogICAgK2NvbnN0IF9f
SU9DX0RJUkJJVFMgPSAyDQogICAgK2NvbnN0IF9XVU5UUkFDRUQgPSAyDQogICAgK2NvbnN0IF9Q
Ul9NQ0VfS0lMTF9TRVQgPSAxDQogICAgK2NvbnN0IF9TS0ZfQURfUVVFVUUgPSAyNA0KICAgICtj
b25zdCBfX19OUl9sY2hvd24gPSA5NA0KICAgICtjb25zdCBfUFJfU0VUX01NX1NUQVJUX1NUQUNL
ID0gNQ0KICAgICtjb25zdCBfX19GTE9BVF9XT1JEX09SREVSX18gPSBfX19PUkRFUl9MSVRUTEVf
RU5ESUFOX18NCiAgICArY29uc3QgX1JNTkVUX0ZMQUdTX0lOR1JFU1NfTUFQX0NPTU1BTkRTID0g
KDEgPDwgMSkNCiAgICArY29uc3QgX19QT1NJWF9TSUdRVUVVRV9NQVggPSAzMg0KICAgICtjb25z
dCBfX1NZU19FUE9MTF9IID0gMQ0KICAgICtjb25zdCBfQ0hBUl9XSURUSCA9IDgNCiAgICArY29u
c3QgX19fU0laRU9GX1NFTV9UID0gMzINCiAgICArY29uc3QgX1hBVFRSX1NJWkVfTUFYID0gNjU1
MzYNCiAgICArY29uc3QgX19fTlJfbW9kaWZ5X2xkdCA9IDE1NA0KICAgICtjb25zdCBfU1lTX2Vw
b2xsX2N0bCA9IF9fX05SX2Vwb2xsX2N0bA0KICAgICtjb25zdCBfVENQSV9PUFRfV1NDQUxFID0g
NA0KICAgICtjb25zdCBfX1NDX0xFVkVMMV9JQ0FDSEVfQVNTT0MgPSAxODYNCiAgICArY29uc3Qg
X0lQVjZfUlRIRFJfTE9PU0UgPSAwDQogICAgK2NvbnN0IF9TWVNfc2NoZWRfZ2V0X3ByaW9yaXR5
X21heCA9IF9fX05SX3NjaGVkX2dldF9wcmlvcml0eV9tYXgNCiAgICArY29uc3QgX0lQUE9SVF9C
SUZGVURQID0gNTEyDQogICAgK2NvbnN0IF9GSU9OUkVBRCA9IDB4NTQxQg0KICAgICtjb25zdCBf
TUxEX0xJU1RFTkVSX1JFRFVDVElPTiA9IDEzMg0KICAgICtjb25zdCBfQ1g4Nl9DQ1I1ID0gMHhl
OQ0KICAgICtjb25zdCBfVElPQ1NFUkdXSUxEID0gMHg1NDU0DQogICAgK2NvbnN0IF9fX05SX2Vw
b2xsX2N0bF9vbGQgPSAyMTQNCiAgICArY29uc3QgX0VLRVlSRUpFQ1RFRCA9IDEyOQ0KICAgICtj
b25zdCBfWDg2X0NSMF9DRF9CSVQgPSAzMA0KICAgICtjb25zdCBfTUFQX05PTkJMT0NLID0gMHgx
MDAwMA0KICAgICtjb25zdCBfU1lTX3N5bmNmcyA9IF9fX05SX3N5bmNmcw0KICAgICtjb25zdCBf
VEFCRExZID0gMDAxNDAwMA0KICAgICtjb25zdCBfX19HTlVDX01JTk9SX18gPSAzDQogICAgK2Nv
bnN0IF9IQVZFX1NFTUFQSE9SRV9IID0gMQ0KICAgICtjb25zdCBfU0lHX1VOQkxPQ0sgPSAxDQog
ICAgK2NvbnN0IF9fX05SX3ByY3RsID0gMTU3DQogICAgK2NvbnN0IF9fX05SX3Byb2Nlc3Nfdm1f
d3JpdGV2ID0gMzExDQogICAgK2NvbnN0IF9JRkxBX0JSX01DQVNUX1NUQVJUVVBfUVVFUllfQ05U
ID0gMjkNCiAgICArY29uc3QgX0lQUE9SVF9ESVNDQVJEID0gOQ0KICAgICtjb25zdCBfTkJQRyA9
IF9QQUdFX1NJWkUNCiAgICArY29uc3QgX19DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTID0gMTEw
OA0KICAgICtjb25zdCBfU1lTX2lvY3RsID0gX19fTlJfaW9jdGwNCiAgICArY29uc3QgX1NZU19w
b2xsID0gX19fTlJfcG9sbA0KICAgICtjb25zdCBfUk1ORVRfRkxBR1NfSU5HUkVTU19NQVBfQ0tT
VU1WNCA9ICgxIDw8IDIpDQogICAgK2NvbnN0IF9JUFY2XzIyOTJQS1RPUFRJT05TID0gNg0KICAg
ICtjb25zdCBfVElPQ01fQ1RTID0gMHgwMjANCiAgICArY29uc3QgX1BUUkRJRkZfTUFYID0gKDky
MjMzNzIwMzY4NTQ3NzU4MDcpDQogICAgK2NvbnN0IF9JRkxBX1NUQVRTX0FGX1NQRUMgPSA1DQog
ICAgK2NvbnN0IF9JRkxBX1RVTl9NVUxUSV9RVUVVRSA9IDcNCiAgICArY29uc3QgX1JUQV9QQUQg
PSAyNA0KICAgICtjb25zdCBfU1lTX2lvcGwgPSBfX19OUl9pb3BsDQogICAgK2NvbnN0IF9ORVRf
TUFKT1IgPSAzNg0KICAgICtjb25zdCBfU1lTX21zZ3NuZCA9IF9fX05SX21zZ3NuZA0KICAgICtj
b25zdCBfX19TX0lFWEVDID0gMDEwMA0KICAgICtjb25zdCBfX1NDX0RFTEFZVElNRVJfTUFYID0g
MjYNCiAgICArY29uc3QgX1NZU19leGl0ID0gX19fTlJfZXhpdA0KICAgICtjb25zdCBfU1lTX3Jl
c3RhcnRfc3lzY2FsbCA9IF9fX05SX3Jlc3RhcnRfc3lzY2FsbA0KICAgICtjb25zdCBfUFJJWExF
QVNUMzIgPSAiWCINCiAgICArY29uc3QgX0lGTEFfSFNSX1NVUEVSVklTSU9OX0FERFIgPSA0DQog
ICAgK2NvbnN0IF9TSUdTWVMgPSAzMQ0KICAgICtjb25zdCBfRlNfWEZMQUdfRklMRVNUUkVBTSA9
IDB4MDAwMDQwMDANCiAgICArY29uc3QgX0lQUFJPVE9fSUNNUFY2ID0gNTgNCiAgICArY29uc3Qg
X0VVQ0xFQU4gPSAxMTcNCiAgICArY29uc3QgX1BSX1NFVF9GUEVNVSA9IDEwDQogICAgK2NvbnN0
IF9FVEhfUF9BVEFMSyA9IDB4ODA5Qg0KICAgICtjb25zdCBfUEZfSUIgPSAyNw0KICAgICtjb25z
dCBfX19VU0VfUE9TSVgxOTk1MDYgPSAxDQogICAgK2NvbnN0IF9TWVNfbmFub3NsZWVwID0gX19f
TlJfbmFub3NsZWVwDQogICAgK2NvbnN0IF9JUF9EUk9QX01FTUJFUlNISVAgPSAzNg0KICAgICtj
b25zdCBfV0lOVF9NQVggPSAoNDI5NDk2NzI5NSkNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fVURQ
X1pFUk9fQ1NVTTZfUlggPSAyMA0KICAgICtjb25zdCBfRUNPTk5BQk9SVEVEID0gMTAzDQogICAg
K2NvbnN0IF9QUl9VTkFMSUdOX05PUFJJTlQgPSAxDQogICAgK2NvbnN0IF9GU19ESVJTWU5DX0ZM
ID0gMHgwMDAxMDAwMA0KICAgICtjb25zdCBfU0lPQ0RFVlBSSVZBVEUgPSAweDg5RjANCiAgICAr
Y29uc3QgX19TQ19USU1FT1VUUyA9IDE2NA0KICAgICtjb25zdCBfX19JTlRfTEVBU1QzMl9NQVhf
XyA9IDB4N2ZmZmZmZmYNCiAgICArY29uc3QgX0lOX0NMT1NFID0gKF9JTl9DTE9TRV9XUklURSB8
IF9JTl9DTE9TRV9OT1dSSVRFKQ0KICAgICtjb25zdCBfUlRNX05FV05TSUQgPSA4OA0KICAgICtj
b25zdCBfX19OUl9pb19wZ2V0ZXZlbnRzID0gMzMzDQogICAgK2NvbnN0IF9YODZfRUZMQUdTX1RG
X0JJVCA9IDgNCiAgICArY29uc3QgX19fTlJfdW5saW5rID0gODcNCiAgICArY29uc3QgX0lQVE9T
X1BSRUNfSU1NRURJQVRFID0gX0lQVE9TX0NMQVNTX0NTMg0KICAgICtjb25zdCBfVUlOVF9MRUFT
VDE2X01BWCA9ICg2NTUzNSkNCiAgICArY29uc3QgX19fTlJfZ2V0ZXVpZCA9IDEwNw0KICAgICtj
b25zdCBfU19JV0dSUCA9IChfU19JV1VTUiA+PiAzKQ0KICAgICtjb25zdCBfX19QSUVfXyA9IDIN
CiAgICArY29uc3QgX1RJT0NQS1RfREFUQSA9IDANCiAgICArY29uc3QgX19DU19WNl9XSURUSF9S
RVNUUklDVEVEX0VOVlMgPSAxDQogICAgK2NvbnN0IF9GRklfVFlQRV9ET1VCTEUgPSAzDQogICAg
K2NvbnN0IF9SVENGX0RJUkVDVFNSQyA9IDB4MDQwMDAwMDANCiAgICArY29uc3QgX19fTlJfc3lu
Y19maWxlX3JhbmdlID0gMjc3DQogICAgK2NvbnN0IF9JRkxBX1BPUlRfVlNJX1RZUEUgPSAzDQog
ICAgK2NvbnN0IF9BREpfVEFJID0gMHgwMDgwDQogICAgK2NvbnN0IF9ORFVTRVJPUFRfVU5TUEVD
ID0gMA0KICAgICtjb25zdCBfX1VUU05BTUVfRE9NQUlOX0xFTkdUSCA9IF9fVVRTTkFNRV9MRU5H
VEgNCiAgICArY29uc3QgX05SX0ZJTEUgPSA4MTkyDQogICAgK2NvbnN0IF9GX0dFVF9SV19ISU5U
ID0gMTAzNQ0KICAgICtjb25zdCBfUEZfUFBQT1ggPSAyNA0KICAgICtjb25zdCBfU09fUEVFS19P
RkYgPSA0Mg0KICAgICtjb25zdCBfU09fUkNWQlVGID0gOA0KICAgICtjb25zdCBfX1NDX1hCUzVf
SUxQMzJfT0ZGQklHID0gMTI2DQogICAgK2NvbnN0IF9fX1NJWkVPRl9QVEhSRUFEX0NPTkRBVFRS
X1QgPSA0DQogICAgK2NvbnN0IF9OX0hDSSA9IDE1DQogICAgK2NvbnN0IF9QUkl1TEVBU1Q4ID0g
InUiDQogICAgK2NvbnN0IF9SVEFYX1NTVEhSRVNIID0gNg0KICAgICtjb25zdCBfSUZGX01VTFRJ
X1FVRVVFID0gMHgwMTAwDQogICAgK2NvbnN0IF9SVF9DTEFTU19MT0NBTCA9IDI1NQ0KICAgICtj
b25zdCBfRklPR0VUT1dOID0gMHg4OTAzDQogICAgK2NvbnN0IF9fX05SX3NobWdldCA9IDI5DQog
ICAgK2NvbnN0IF9YODZfRUZMQUdTX0RGX0JJVCA9IDEwDQogICAgK2NvbnN0IF9TT19TRUxFQ1Rf
RVJSX1FVRVVFID0gNDUNCiAgICArY29uc3QgX1NPQ0tfTk9OQkxPQ0sgPSAyMDQ4DQogICAgK2Nv
bnN0IF9VSU5UX0xFQVNUMzJfTUFYID0gKDQyOTQ5NjcyOTUpDQogICAgK2NvbnN0IF9TSUdYRlNa
ID0gMjUNCiAgICArY29uc3QgX0lGTEFfUFJPVElORk8gPSAxMg0KICAgICtjb25zdCBfX19OUl9t
dW5sb2NrYWxsID0gMTUyDQogICAgK2NvbnN0IF9JUF9NVUxUSUNBU1RfQUxMID0gNDkNCiAgICAr
Y29uc3QgX0VDSE8gPSAwMDAwMDEwDQogICAgK2NvbnN0IF9BUlBIUkRfRUVUSEVSID0gMg0KICAg
ICtjb25zdCBfQ0xEX0NPTlRJTlVFRCA9IDYNCiAgICArY29uc3QgX0VUSEVSVFlQRV9BVCA9IDB4
ODA5Qg0KICAgICtjb25zdCBfU0NIQVJfTUFYID0gX19fU0NIQVJfTUFYX18NCiAgICArY29uc3Qg
X0lGTEFfTUFDU0VDX1NDQiA9IDExDQogICAgK2NvbnN0IF9fX1VBUElfREVGX0VUSEhEUiA9IDEN
CiAgICArY29uc3QgX0lGTEFfQlJfTkZfQ0FMTF9BUlBUQUJMRVMgPSAzOA0KICAgICtjb25zdCBf
TkRUUEFfUkVBQ0hBQkxFX1RJTUUgPSAzDQogICAgK2NvbnN0IF9UQ1BfUkVQQUlSX1dJTkRPVyA9
IDI5DQogICAgK2NvbnN0IF9fX0lGTEFfVFVOX01BWCA9IDEwDQogICAgK2NvbnN0IF9IQVZFX0FT
X0NPTURBVF9HQVMgPSAxDQogICAgK2NvbnN0IF9ORVRMSU5LX0ROUlRNU0cgPSAxNA0KICAgICtj
b25zdCBfU1lTX21yZW1hcCA9IF9fX05SX21yZW1hcA0KICAgICtjb25zdCBfWDg2X0NSNF9QR0Vf
QklUID0gNw0KICAgICtjb25zdCBfSUZBX0FERFJFU1MgPSAxDQogICAgK2NvbnN0IF9TSU9DU0lG
RFNUQUREUiA9IDB4ODkxOA0KICAgICtjb25zdCBfVlJFUFJJTlQgPSAxMg0KICAgICtjb25zdCBf
RVBPTExfQ1RMX0RFTCA9IDINCiAgICArY29uc3QgX0lGTEFfUURJU0MgPSA2DQogICAgK2NvbnN0
IF9fX0VMRl9fID0gMQ0KICAgICtjb25zdCBfSU5fT1BFTiA9IDB4MDAwMDAwMjANCiAgICArY29u
c3QgX0VUSF9QX1RTTiA9IDB4MjJGMA0KICAgICtjb25zdCBfRVRIX1BfQ09OVFJPTCA9IDB4MDAx
Ng0KICAgICtjb25zdCBfSUZMQV9CT05EX0FEX0lORk9fTlVNX1BPUlRTID0gMg0KICAgICtjb25z
dCBfRFRfRklGTyA9IDENCiAgICArY29uc3QgX1NDTmlGQVNUOCA9ICJoaGkiDQogICAgK2NvbnN0
IF9USU9DU0VURCA9IDB4NTQyMw0KICAgICtjb25zdCBfX0NTX1hCUzVfSUxQMzJfT0ZGMzJfTElO
VEZMQUdTID0gMTEwMw0KICAgICtjb25zdCBfSVBPUFRfT0ZGU0VUID0gMg0KICAgICtjb25zdCBf
X19OUl9mc3RhdGZzID0gMTM4DQogICAgK2NvbnN0IF9fX05SX3NldF90aHJlYWRfYXJlYSA9IDIw
NQ0KICAgICtjb25zdCBfSUZMQV9CT05EX0FSUF9JTlRFUlZBTCA9IDcNCiAgICArY29uc3QgX1BS
X1NFVF9NTV9TVEFSVF9EQVRBID0gMw0KICAgICtjb25zdCBfRVRIX1BfRVJTUEFOID0gMHg4OEJF
DQogICAgK2NvbnN0IF9TWVNfc3lzaW5mbyA9IF9fX05SX3N5c2luZm8NCiAgICArY29uc3QgX1NZ
U19zZXRzaWQgPSBfX19OUl9zZXRzaWQNCiAgICArY29uc3QgX09GREVMID0gMDAwMDIwMA0KICAg
ICtjb25zdCBfX1BDX1BSSU9fSU8gPSAxMQ0KICAgICtjb25zdCBfX19GTFRfTUlOX18gPSAxLjEN
CiAgICArY29uc3QgX19fTlJfY29weV9maWxlX3JhbmdlID0gMzI2DQogICAgK2NvbnN0IF9DTE9O
RV9ORVdORVQgPSAweDQwMDAwMDAwDQogICAgK2NvbnN0IF9SVEFfT0lGID0gNA0KICAgICtjb25z
dCBfU0lfU0lHSU8gPSAtNQ0KICAgICtjb25zdCBfX1hPUEVOX1JFQUxUSU1FID0gMQ0KICAgICtj
b25zdCBfX19OUl9zZWNjb21wID0gMzE3DQogICAgK2NvbnN0IF9JRkxBX0NBUlJJRVJfVVBfQ09V
TlQgPSA0Nw0KICAgICtjb25zdCBfVENQX1VMUCA9IDMxDQogICAgK2NvbnN0IF9fU0NfVElNRVJT
ID0gMTENCiAgICArY29uc3QgX1BSSXUxNiA9ICJ1Ig0KICAgICtjb25zdCBfTkRfT1BUX1NPVVJD
RV9MSU5LQUREUiA9IDENCiAgICArY29uc3QgX0lGQV9GX0RFUFJFQ0FURUQgPSAweDIwDQogICAg
K2NvbnN0IF9SVE5IX0ZfREVBRCA9IDENCiAgICArY29uc3QgX0ZGSV9UWVBFX0ZMT0FUID0gMg0K
ICAgICtjb25zdCBfVkVSQVNFID0gMg0KICAgICtjb25zdCBfUlRfQ0xBU1NfTUFJTiA9IDI1NA0K
ICAgICtjb25zdCBfRU5PQU5PID0gNTUNCiAgICArY29uc3QgX1JUUFJPVF9NUlQgPSAxMA0KICAg
ICtjb25zdCBfX0JJVFNfVElNRVhfSCA9IDENCiAgICArY29uc3QgX0lGTEFfWERQX1NLQl9QUk9H
X0lEID0gNg0KICAgICtjb25zdCBfX1NDX05MX0FSR01BWCA9IDExOQ0KICAgICtjb25zdCBfSUZB
X01VTFRJQ0FTVCA9IDcNCiAgICArY29uc3QgX0lQUFJPVE9fQkVFVFBIID0gOTQNCiAgICArY29u
c3QgX0lQT1BUX1NFQ1VSX1RPUFNFQ1JFVCA9IDB4NmJjNQ0KICAgICtjb25zdCBfX19TX0lXUklU
RSA9IDAyMDANCiAgICArY29uc3QgX0VOT1RDT05OID0gMTA3DQogICAgK2NvbnN0IF9QVFJBQ0Vf
U0VURlBYUkVHUyA9IDE5DQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjdfTFBCSUdfT0ZGQklHX0xE
RkxBR1MgPSAxMTQ1DQogICAgK2NvbnN0IF9fX1NfSUZNVCA9IDAxNzAwMDANCiAgICArY29uc3Qg
X0lQT0lCX01PREVfREFUQUdSQU0gPSAwDQogICAgK2NvbnN0IF9fX0ZMVDY0WF9ERUNJTUFMX0RJ
R19fID0gMjENCiAgICArY29uc3QgX19TQ19QQUdFU0laRSA9IDMwDQogICAgK2NvbnN0IF9BUlBI
UkRfQ0lTQ08gPSA1MTMNCiAgICArY29uc3QgX19fSUZMQV9CUl9NQVggPSA0NQ0KICAgICtjb25z
dCBfSVBQUk9UT19EU1RPUFRTID0gNjANCiAgICArY29uc3QgX1JMSU1JVF9DUFUgPSAwDQogICAg
K2NvbnN0IF9NQURWX0RPTlREVU1QID0gMTYNCiAgICArY29uc3QgX19fRkxUMTI4X0hBU19JTkZJ
TklUWV9fID0gMQ0KICAgICtjb25zdCBfX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdT
ID0gMTEyNw0KICAgICtjb25zdCBfX1NDX05QUk9DRVNTT1JTX0NPTkYgPSA4Mw0KICAgICtjb25z
dCBfVENBX1hTVEFUUyA9IDQNCiAgICArY29uc3QgX1BBQ0tFVF9NUl9BTExNVUxUSSA9IDINCiAg
ICArY29uc3QgX19fU1NFMl9NQVRIX18gPSAxDQogICAgK2NvbnN0IF9PX05PQ1RUWSA9IDA0MDAN
CiAgICArY29uc3QgX0NMT05FX0lPID0gMHg4MDAwMDAwMA0KICAgICtjb25zdCBfU0lPQ1NJRkhX
QlJPQURDQVNUID0gMHg4OTM3DQogICAgK2NvbnN0IF9fX3NpZ19hdG9taWNfdF9kZWZpbmVkID0g
MQ0KICAgICtjb25zdCBfSEFWRV9BQ0NFUFQ0ID0gMQ0KICAgICtjb25zdCBfX0NTX0dOVV9MSUJD
X1ZFUlNJT04gPSAyDQogICAgK2NvbnN0IF9OTE1fRl9DUkVBVEUgPSAweDQwMA0KICAgICtjb25z
dCBfUlRfQ0xBU1NfREVGQVVMVCA9IDI1Mw0KICAgICtjb25zdCBfSEFWRV9VTkxJTktBVCA9IDEN
CiAgICArY29uc3QgX0VOT1NZUyA9IDM4DQogICAgK2NvbnN0IF9SVE1fR0VUTVVMVElDQVNUID0g
NTgNCiAgICArY29uc3QgX0lGTEFfRVZFTlRfRkVBVFVSRVMgPSAyDQogICAgK2NvbnN0IF9fX0lG
TEFfSFNSX01BWCA9IDcNCiAgICArY29uc3QgX0VQT0xMX0NUTF9NT0QgPSAzDQogICAgK2NvbnN0
IF9GSU9OQklPID0gMHg1NDIxDQogICAgK2NvbnN0IF9fU0NfUElJX1hUSSA9IDU0DQogICAgK2Nv
bnN0IF9fUE9TSVgyX0NfREVWID0gX19fUE9TSVgyX1RISVNfVkVSU0lPTg0KICAgICtjb25zdCBf
QUZfQUxHID0gX1BGX0FMRw0KICAgICtjb25zdCBfSUZMQV9QUFBfVU5TUEVDID0gMA0KICAgICtj
b25zdCBfU09fUkNWTE9XQVQgPSAxOA0KICAgICtjb25zdCBfSU5UOF9XSURUSCA9IDgNCiAgICAr
Y29uc3QgX1g4Nl9DUjBfUEdfQklUID0gMzENCiAgICArY29uc3QgX0lQUE9SVF9XSE9TRVJWRVIg
PSA1MTMNCiAgICArY29uc3QgX0hBVkVfU1lTX01NQU5fSCA9IDENCiAgICArY29uc3QgX19fTlJf
cHdyaXRlNjQgPSAxOA0KICAgICtjb25zdCBfSUZMQV9UVU5fT1dORVIgPSAxDQogICAgK2NvbnN0
IF9SVEFYX0ZBU1RPUEVOX05PX0NPT0tJRSA9IDE3DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfTFBf
SU5URVJWQUwgPSAxOQ0KICAgICtjb25zdCBfUFRSQUNFX0dFVEZQUkVHUyA9IDE0DQogICAgK2Nv
bnN0IF9DTE9ORV9GSUxFUyA9IDB4MDAwMDA0MDANCiAgICArY29uc3QgX0ZTX0VOQ1JZUFRJT05f
TU9ERV9BRVNfMTI4X0NCQyA9IDUNCiAgICArY29uc3QgX1NLRl9BRF9SQU5ET00gPSA1Ng0KICAg
ICtjb25zdCBfTVNHX1dBSVRBTEwgPSAyNTYNCiAgICArY29uc3QgX1BSX1NFVF9NTV9FTlZfRU5E
ID0gMTENCiAgICArY29uc3QgX19fTlJfc2VuZG1zZyA9IDQ2DQogICAgK2NvbnN0IF9FVEhfUF9N
QVAgPSAweDAwRjkNCiAgICArY29uc3QgX19fTlJfZ2V0c2lkID0gMTI0DQogICAgK2NvbnN0IF9f
X05SX2lvcHJpb19nZXQgPSAyNTINCiAgICArY29uc3QgX0lGTEFfVkZfSUJfTk9ERV9HVUlEID0g
MTANCiAgICArY29uc3QgX01TX1JFQyA9IDE2Mzg0DQogICAgK2NvbnN0IF9fUE9TSVhfVFJBQ0Ug
PSAtMQ0KICAgICtjb25zdCBfX19GTFQxMjhfSEFTX1FVSUVUX05BTl9fID0gMQ0KICAgICtjb25z
dCBfTE9DS19OQiA9IDQNCiAgICArY29uc3QgX1BEUF9FTkRJQU4gPSBfX19QRFBfRU5ESUFODQog
ICAgK2NvbnN0IF9QUl9NQ0VfS0lMTF9FQVJMWSA9IDENCiAgICArY29uc3QgX05FVExJTktfQVVE
SVQgPSA5DQogICAgK2NvbnN0IF9TWVNfc3RhdHggPSBfX19OUl9zdGF0eA0KICAgICtjb25zdCBf
X1NDX1NQSU5fTE9DS1MgPSAxNTQNCiAgICArY29uc3QgX0lGTEFfQk9ORF9BRF9JTkZPX0FDVE9S
X0tFWSA9IDMNCiAgICArY29uc3QgX1BSX0ZQX01PREVfRlIgPSAoMSA8PCAwKQ0KICAgICtjb25z
dCBfUlRNX0dFVFRDTEFTUyA9IDQyDQogICAgK2NvbnN0IF9BSV9BRERSQ09ORklHID0gMHgwMDIw
DQogICAgK2NvbnN0IF9QUkl1OCA9ICJ1Ig0KICAgICtjb25zdCBfTUFEVl9VTk1FUkdFQUJMRSA9
IDEzDQogICAgK2NvbnN0IF9QUkl1MzIgPSAidSINCiAgICArY29uc3QgX1NZU19zaHV0ZG93biA9
IF9fX05SX3NodXRkb3duDQogICAgK2NvbnN0IF9IQVZFX0xJTlVYX0ZTX0ggPSAxDQogICAgK2Nv
bnN0IF9OX1IzOTY0ID0gOQ0KICAgICtjb25zdCBfSVBQUk9UT19BSCA9IDUxDQogICAgK2NvbnN0
IF9FWEZVTEwgPSA1NA0KICAgICtjb25zdCBfX1BPU0lYX1JBV19TT0NLRVRTID0gMjAwODA5DQog
ICAgK2NvbnN0IF9FQlVTWSA9IDE2DQogICAgK2NvbnN0IF9CMjUwMDAwMCA9IDAwMTAwMTQNCiAg
ICArY29uc3QgX19fTlJfZ2V0c29ja25hbWUgPSA1MQ0KICAgICtjb25zdCBfUFJJWEZBU1Q4ID0g
IlgiDQogICAgK2NvbnN0IF9TWVNfdGtpbGwgPSBfX19OUl90a2lsbA0KICAgICtjb25zdCBfX19h
bWQ2NF9fID0gMQ0KICAgICtjb25zdCBfSVBUT1NfUFJFQ19QUklPUklUWSA9IF9JUFRPU19DTEFT
U19DUzENCiAgICArY29uc3QgX0NUSU1FID0gMA0KICAgICtjb25zdCBfX19GTFQzMlhfSEFTX0lO
RklOSVRZX18gPSAxDQogICAgK2NvbnN0IF9FVU5BVENIID0gNDkNCiAgICArY29uc3QgX19TQ18y
X1BCU19BQ0NPVU5USU5HID0gMTY5DQogICAgK2NvbnN0IF9fUE9TSVhfVEhSRUFEX1NQT1JBRElD
X1NFUlZFUiA9IC0xDQogICAgK2NvbnN0IF9fX05SX21sb2NrMiA9IDMyNQ0KICAgICtjb25zdCBf
SVBQT1JUX1dIT0lTID0gNDMNCiAgICArY29uc3QgX19fTlJfZ2V0X3RocmVhZF9hcmVhID0gMjEx
DQogICAgK2NvbnN0IF9GX09GRF9HRVRMSyA9IDM2DQogICAgK2NvbnN0IF9OTEFfQUxJR05UTyA9
IDQNCiAgICArY29uc3QgX0VOT01FRElVTSA9IDEyMw0KICAgICtjb25zdCBfX0dOVV9TT1VSQ0Ug
PSAxDQogICAgK2NvbnN0IF9TWVNfcHRyYWNlID0gX19fTlJfcHRyYWNlDQogICAgK2NvbnN0IF9T
SU9DR0lGSU5ERVggPSAweDg5MzMNCiAgICArY29uc3QgX0UyQklHID0gNw0KICAgICtjb25zdCBf
SUNNUDZfUlJfRkxBR1NfRk9SQ0VBUFBMWSA9IDB4MjANCiAgICArY29uc3QgX1NJX1RLSUxMID0g
LTYNCiAgICArY29uc3QgX19TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSID0gMTYxDQogICAgK2Nv
bnN0IF9fX3g4Nl82NF9fID0gMQ0KICAgICtjb25zdCBfU1lTX2Z1dGV4ID0gX19fTlJfZnV0ZXgN
CiAgICArY29uc3QgX0lOX0RFTEVURSA9IDB4MDAwMDAyMDANCiAgICArY29uc3QgX0ZGRExZID0g
MDEwMDAwMA0KICAgICtjb25zdCBfTUNBU1RfTEVBVkVfU09VUkNFX0dST1VQID0gNDcNCiAgICAr
Y29uc3QgX1NfSVhVU1IgPSBfX19TX0lFWEVDDQogICAgK2NvbnN0IF9fU1lTX1NFTEVDVF9IID0g
MQ0KICAgICtjb25zdCBfUFJJZDggPSAiZCINCiAgICArY29uc3QgX19fTlJfaW5vdGlmeV9hZGRf
d2F0Y2ggPSAyNTQNCiAgICArY29uc3QgX1NDTm84ID0gImhobyINCiAgICArY29uc3QgX01DTF9P
TkZBVUxUID0gNA0KICAgICtjb25zdCBfRlNfRUFfSU5PREVfRkwgPSAweDAwMjAwMDAwDQogICAg
K2NvbnN0IF9fX05SX29wZW5hdCA9IDI1Nw0KICAgICtjb25zdCBfVFVOU0VUUEVSU0lTVF92YWwg
PSAxMDc0MDI1Njc1DQogICAgK2NvbnN0IF9fX05SX2ZkYXRhc3luYyA9IDc1DQogICAgK2NvbnN0
IF9GX1NFVExFQVNFID0gMTAyNA0KICAgICtjb25zdCBfX1NDX0ZEX01HTVQgPSAxNDMNCiAgICAr
Y29uc3QgX19fQklUU19QRVJfTE9ORyA9IDY0DQogICAgK2NvbnN0IF9QUklPX01JTiA9IC0yMA0K
ICAgICtjb25zdCBfX19OUl9wcmxpbWl0NjQgPSAzMDINCiAgICArY29uc3QgX1JUTV9ERUxURklM
VEVSID0gNDUNCiAgICArY29uc3QgX1JUTV9HRVRDSEFJTiA9IDEwMg0KICAgICtjb25zdCBfUlRF
WFRfRklMVEVSX1ZGID0gKDEgPDwgMCkNCiAgICArY29uc3QgX1NUQVRYX0lOTyA9IDB4MDEwMA0K
ICAgICtjb25zdCBfX19ORVRJTkVUX0lGX0VUSEVSX0ggPSAxDQogICAgK2NvbnN0IF9TWVNfcmVj
dm1tc2cgPSBfX19OUl9yZWN2bW1zZw0KICAgICtjb25zdCBfSEFWRV9TQ0hFRF9IID0gMQ0KICAg
ICtjb25zdCBfRVRIX1BfUkFSUCA9IDB4ODAzNQ0KICAgICtjb25zdCBfX1NUUlVDVF9USU1FU1BF
QyA9IDENCiAgICArY29uc3QgX1NPX1JFVVNFUE9SVCA9IDE1DQogICAgK2NvbnN0IF9fUE9TSVhf
U0VNX05TRU1TX01BWCA9IDI1Ng0KICAgICtjb25zdCBfX19MREJMX0VQU0lMT05fXyA9IDEuMQ0K
ICAgICtjb25zdCBfX19jbG9ja190X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9NQVBfVFlQRSA9
IDB4MGYNCiAgICArY29uc3QgX05FVExJTktfU09DS19ESUFHID0gNA0KICAgICtjb25zdCBfX19V
U0VfWE9QRU5fRVhURU5ERUQgPSAxDQogICAgK2NvbnN0IF9SVE5fUFJPSElCSVQgPSA4DQogICAg
K2NvbnN0IF9QQUNLRVRfVFhfSEFTX09GRiA9IDE5DQogICAgK2NvbnN0IF9UQ1BfUkVQQUlSID0g
MTkNCiAgICArY29uc3QgX0lGTEFfVkxBTl9GTEFHUyA9IDINCiAgICArY29uc3QgX19fTlJfZHVw
ID0gMzINCiAgICArY29uc3QgX0FGX1RJUEMgPSBfUEZfVElQQw0KICAgICtjb25zdCBfSUZMQV9H
VFBfUk9MRSA9IDQNCiAgICArY29uc3QgX19fTlJfZnV0aW1lc2F0ID0gMjYxDQogICAgK2NvbnN0
IF9fX1VTRV9LRVJORUxfSVBWNl9ERUZTID0gMA0KICAgICtjb25zdCBfSUZMQV9WWExBTl9QUk9Y
WSA9IDExDQogICAgK2NvbnN0IF9IQVZFX1VOSVNURF9IID0gMQ0KICAgICtjb25zdCBfWDg2X0NS
MF9BTV9CSVQgPSAxOA0KICAgICtjb25zdCBfSUZMQV9WWExBTl9SRU1DU1VNX05PUEFSVElBTCA9
IDI0DQogICAgK2NvbnN0IF9JRkxBX01BQ1ZMQU5fTUFDQUREUiA9IDQNCiAgICArY29uc3QgX0lQ
VE9TX1BSRUNfRkxBU0hPVkVSUklERSA9IF9JUFRPU19DTEFTU19DUzQNCiAgICArY29uc3QgX19f
U0lHUlRNSU4gPSAzMg0KICAgICtjb25zdCBfX19OUl9mY250bCA9IDcyDQogICAgK2NvbnN0IF9T
WVNfX3N5c2N0bCA9IF9fX05SX19zeXNjdGwNCiAgICArY29uc3QgX0VORVRVTlJFQUNIID0gMTAx
DQogICAgK2NvbnN0IF9TWVNfbXFfdGltZWRzZW5kID0gX19fTlJfbXFfdGltZWRzZW5kDQogICAg
K2NvbnN0IF9USU9DU0VSR0VUTFNSID0gMHg1NDU5DQogICAgK2NvbnN0IF9TT0xfSVVDViA9IDI3
Nw0KICAgICtjb25zdCBfUkxJTUlUX0ZTSVpFID0gMQ0KICAgICtjb25zdCBfX19SVEFfTUFYID0g
MzANCiAgICArY29uc3QgX0JQRl9UQVggPSAweDAwDQogICAgK2NvbnN0IF9TVEFUWF9fUkVTRVJW
RUQgPSAweDgwMDAwMDAwDQogICAgK2NvbnN0IF9fU0NfU1lOQ0hST05JWkVEX0lPID0gMTQNCiAg
ICArY29uc3QgX19fUlROX01BWCA9IDEyDQogICAgK2NvbnN0IF9JTlQzMl9XSURUSCA9IDMyDQog
ICAgK2NvbnN0IF9ORF9PUFRfTVRVID0gNQ0KICAgICtjb25zdCBfU0lHX0FUT01JQ19XSURUSCA9
IDMyDQogICAgK2NvbnN0IF9fU0NfRVFVSVZfQ0xBU1NfTUFYID0gNDENCiAgICArY29uc3QgX19Q
T1NJWF9DTE9DS1JFU19NSU4gPSAyMDAwMDAwMA0KICAgICtjb25zdCBfX19HQ0NfQVRPTUlDX0lO
VF9MT0NLX0ZSRUUgPSAyDQogICAgK2NvbnN0IF9QT1NJWF9GQURWX05PUk1BTCA9IDANCiAgICAr
Y29uc3QgX0lQX0RST1BfU09VUkNFX01FTUJFUlNISVAgPSA0MA0KICAgICtjb25zdCBfU0VFS19N
QVggPSBfU0VFS19IT0xFDQogICAgK2NvbnN0IF9BUlBIUkRfTUVUUklDT00gPSAyMw0KICAgICtj
b25zdCBfSUZMQV9WTEFOX0VHUkVTU19RT1MgPSAzDQogICAgK2NvbnN0IF9TWVNfY2xvbmUgPSBf
X19OUl9jbG9uZQ0KICAgICtjb25zdCBfX1NZU19USU1FU19IID0gMQ0KICAgICtjb25zdCBfX19G
TFQ2NFhfTUFYX0VYUF9fID0gMTYzODQNCiAgICArY29uc3QgX1NfSVNHSUQgPSBfX19TX0lTR0lE
DQogICAgK2NvbnN0IF9JUFY2X1JUSERSX1RZUEVfMCA9IDANCiAgICArY29uc3QgX1NJR1NUT1Ag
PSAxOQ0KICAgICtjb25zdCBfRlNfVU5STV9GTCA9IDB4MDAwMDAwMDINCiAgICArY29uc3QgX19Q
T1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMgPSAyMDA4MDkNCiAgICArY29uc3QgX1BSX0ZQX0VY
Q19OT05SRUNPViA9IDENCiAgICArY29uc3QgX1RVTkdFVFZORVRIRFJTWl92YWwgPSAyMTQ3NzY3
NTExDQogICAgK2NvbnN0IF9JR05CUksgPSAwMDAwMDAxDQogICAgK2NvbnN0IF9fX05FVFBBQ0tF
VF9QQUNLRVRfSCA9IDENCiAgICArY29uc3QgX1NZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWluID0g
X19fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbg0KICAgICtjb25zdCBfTl9NQVNDID0gOA0KICAg
ICtjb25zdCBfSUZMQV9CT05EX0FEX1NFTEVDVCA9IDIyDQogICAgK2NvbnN0IF9JUFY2X0lQU0VD
X1BPTElDWSA9IDM0DQogICAgK2NvbnN0IF9BRl9MTEMgPSBfUEZfTExDDQogICAgK2NvbnN0IF9T
SU9DU1JBUlAgPSAweDg5NjINCiAgICArY29uc3QgX1JUQV9QUkVGU1JDID0gNw0KICAgICtjb25z
dCBfU09fU05EQlVGRk9SQ0UgPSAzMg0KICAgICtjb25zdCBfX19XQ0xPTkUgPSAweDgwMDAwMDAw
DQogICAgK2NvbnN0IF9fX0ZMVF9IQVNfREVOT1JNX18gPSAxDQogICAgK2NvbnN0IF9SVVNBR0Vf
VEhSRUFEID0gMQ0KICAgICtjb25zdCBfSUZGX1BST01JU0MgPSAyNTYNCiAgICArY29uc3QgX1BG
X1RJUEMgPSAzMA0KICAgICtjb25zdCBfU1lTX3B1dHBtc2cgPSBfX19OUl9wdXRwbXNnDQogICAg
K2NvbnN0IF9NQUNTRUNfVkFMSURBVEVfU1RSSUNUID0gMg0KICAgICtjb25zdCBfVENBX0lOR1JF
U1NfQkxPQ0sgPSAxMw0KICAgICtjb25zdCBfX19BVE9NSUNfSExFX1JFTEVBU0UgPSAxMzEwNzIN
CiAgICArY29uc3QgX1NZU19nZXRybGltaXQgPSBfX19OUl9nZXRybGltaXQNCiAgICArY29uc3Qg
X1JUTV9TRVREQ0IgPSA3OQ0KICAgICtjb25zdCBfUlRNU0dfREVMREVWSUNFID0gMHgxMg0KICAg
ICtjb25zdCBfSUNNUDZfUlJfUENPVVNFX1JBRkxBR1NfT05MSU5LID0gMHgyMA0KICAgICtjb25z
dCBfU1lTX21lbWJhcnJpZXIgPSBfX19OUl9tZW1iYXJyaWVyDQogICAgK2NvbnN0IF9TSU9DR1BH
UlAgPSAweDg5MDQNCiAgICArY29uc3QgX19DU19MRlM2NF9MREZMQUdTID0gMTAwNQ0KICAgICtj
b25zdCBfQjM4NDAwID0gMDAwMDAxNw0KICAgICtjb25zdCBfSEFWRV9MSU5VWF9JRl9UVU5fSCA9
IDENCiAgICArY29uc3QgX0FSUEhSRF9BUFBMRVRMSyA9IDgNCiAgICArY29uc3QgX1BSX0dFVF9T
RUNVUkVCSVRTID0gMjcNCiAgICArY29uc3QgX0NNSU4gPSAxDQogICAgK2NvbnN0IF9OVURfTk9O
RSA9IDB4MDANCiAgICArY29uc3QgX0lGTEFfVlhMQU5fVFRMID0gNQ0KICAgICtjb25zdCBfX19H
Q0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRSA9IDINCiAgICArY29uc3QgX0lOX0NMT1NFX05P
V1JJVEUgPSAweDAwMDAwMDEwDQogICAgK2NvbnN0IF9fX0FUT01JQ19TRVFfQ1NUID0gNQ0KICAg
ICtjb25zdCBfU1lTX2lub3RpZnlfaW5pdCA9IF9fX05SX2lub3RpZnlfaW5pdA0KICAgICtjb25z
dCBfVElPQ1NFUkdTVFJVQ1QgPSAweDU0NTgNCiAgICArY29uc3QgX05MTV9GX0RVTVAgPSAoX05M
TV9GX1JPT1R8X05MTV9GX01BVENIKQ0KICAgICtjb25zdCBfX1NDX1NQQVdOID0gMTU5DQogICAg
K2NvbnN0IF9fUENfUkVDX01BWF9YRkVSX1NJWkUgPSAxNQ0KICAgICtjb25zdCBfU0lPQ0FERERM
Q0kgPSAweDg5ODANCiAgICArY29uc3QgX19fTERCTF9NQVhfRVhQX18gPSAxNjM4NA0KICAgICtj
b25zdCBfX0xGUzY0X1NURElPID0gMQ0KICAgICtjb25zdCBfU1lTX3R1eGNhbGwgPSBfX19OUl90
dXhjYWxsDQogICAgK2NvbnN0IF9fU1lTX1VOX0ggPSAxDQogICAgK2NvbnN0IF9JQ01QNl9GSUxU
RVJfQkxPQ0sgPSAxDQogICAgK2NvbnN0IF9FUkVNQ0hHID0gNzgNCiAgICArY29uc3QgX05FVExJ
TktfQUREX01FTUJFUlNISVAgPSAxDQogICAgK2NvbnN0IF9YODZfRUZMQUdTX1ZJUF9CSVQgPSAy
MA0KICAgICtjb25zdCBfVENQSV9PUFRfU1lOX0RBVEEgPSAzMg0KICAgICtjb25zdCBfX19OUl91
bWFzayA9IDk1DQogICAgK2NvbnN0IF9XSU5UX01JTiA9ICgwKQ0KICAgICtjb25zdCBfX1BPU0lY
X01FTUxPQ0sgPSAyMDA4MDkNCiAgICArY29uc3QgX19TQ19DSEFSQ0xBU1NfTkFNRV9NQVggPSA0
NQ0KICAgICtjb25zdCBfSUZMQV9JUFZMQU5fRkxBR1MgPSAyDQogICAgK2NvbnN0IF9fUE9TSVhf
UkVBREVSX1dSSVRFUl9MT0NLUyA9IDIwMDgwOQ0KICAgICtjb25zdCBfSEFWRV9MSU5VWF9QVFJB
Q0VfSCA9IDENCiAgICArY29uc3QgX1g4Nl9DUjRfU01YRV9CSVQgPSAxNA0KICAgICtjb25zdCBf
SVhPRkYgPSAwMDEwMDAwDQogICAgK2NvbnN0IF9NU19OT1VTRVIgPSAtMjE0NzQ4MzY0OA0KICAg
ICtjb25zdCBfX19CSUdHRVNUX0FMSUdOTUVOVF9fID0gMTYNCiAgICArY29uc3QgX0ZTX1BPTElD
WV9GTEFHU19QQURfTUFTSyA9IDB4MDMNCiAgICArY29uc3QgX0VUSF9QX0REQ01QID0gMHgwMDA2
DQogICAgK2NvbnN0IF9fX05SX3J0X3NpZ3N1c3BlbmQgPSAxMzANCiAgICArY29uc3QgX1hfT0sg
PSAxDQogICAgK2NvbnN0IF9PX0FTWU5DID0gMDIwMDAwDQogICAgK2NvbnN0IF9USU9DTElOVVgg
PSAweDU0MUMNCiAgICArY29uc3QgX19fU0laRU9GX1NJWkVfVF9fID0gOA0KICAgICtjb25zdCBf
TlVEX05PQVJQID0gMHg0MA0KICAgICtjb25zdCBfU19JRkRJUiA9IF9fX1NfSUZESVINCiAgICAr
Y29uc3QgX19fVVNFX1hPUEVOMktYU0kgPSAxDQogICAgK2NvbnN0IF9fX1VTRV9HTlUgPSAxDQog
ICAgK2NvbnN0IF9OVEZfTUFTVEVSID0gMHgwNA0KICAgICtjb25zdCBfX19BVE9NSUNfQUNRVUlS
RSA9IDINCiAgICArY29uc3QgX05fNlBBQ0sgPSA3DQogICAgK2NvbnN0IF9JRkxBX0VWRU5UX0lH
TVBfUkVTRU5EID0gNQ0KICAgICtjb25zdCBfSVBfREYgPSAweDQwMDANCiAgICArY29uc3QgX0lQ
T1BUX09QVFZBTCA9IDANCiAgICArY29uc3QgX19QQVRIX0hPU1RTID0gIi9ldGMvaG9zdHMiDQog
ICAgK2NvbnN0IF9fX05SX2V2ZW50ZmQgPSAyODQNCiAgICArY29uc3QgX1NPX1NOREJVRiA9IDcN
CiAgICArY29uc3QgX19fTlJfbHNlZWsgPSA4DQogICAgK2NvbnN0IF9fX05SX21rZGlyYXQgPSAy
NTgNCiAgICArY29uc3QgX0RUX1VOS05PV04gPSAwDQogICAgK2NvbnN0IF9JRkxBX1ZMQU5fSUQg
PSAxDQogICAgK2NvbnN0IF9fU0NfUElJX0lOVEVSTkVUX1NUUkVBTSA9IDYxDQogICAgK2NvbnN0
IF9GX1NFVE9XTiA9IF9fX0ZfU0VUT1dODQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfTFA2NF9P
RkY2NF9MSUJTID0gMTEyNg0KICAgICtjb25zdCBfVElPQ1NTRVJJQUwgPSAweDU0MUYNCiAgICAr
Y29uc3QgX0VOT05FVCA9IDY0DQogICAgK2NvbnN0IF9BUlBIUkRfQVRNID0gMTkNCiAgICArY29u
c3QgX1g4Nl9FRkxBR1NfQUZfQklUID0gNA0KICAgICtjb25zdCBfX19OUl9zZXRyZXNnaWQgPSAx
MTkNCiAgICArY29uc3QgX1NZU19tdW5tYXAgPSBfX19OUl9tdW5tYXANCiAgICArY29uc3QgX0NY
ODZfUENSMCA9IDB4MjANCiAgICArY29uc3QgX19fSU5UTUFYX01BWF9fID0gMHg3ZmZmZmZmZmZm
ZmZmZmZmDQogICAgK2NvbnN0IF9fX05SX2Nocm9vdCA9IDE2MQ0KICAgICtjb25zdCBfX19HQ0Nf
QVRPTUlDX0NIQVJfTE9DS19GUkVFID0gMg0KICAgICtjb25zdCBfRVRIX0ZSQU1FX0xFTiA9IDE1
MTQNCiAgICArY29uc3QgX1BUUkFDRV9FVkVOVF9GT1JLID0gMQ0KICAgICtjb25zdCBfSUZMQV9C
T05EX05VTV9QRUVSX05PVElGID0gMTYNCiAgICArY29uc3QgX0NMT0NLX1JFQUxUSU1FID0gMA0K
ICAgICtjb25zdCBfTkRBX1BST0JFUyA9IDQNCiAgICArY29uc3QgX19QQ19SRUNfSU5DUl9YRkVS
X1NJWkUgPSAxNA0KICAgICtjb25zdCBfSUZMQV9QUk9UT19ET1dOID0gMzkNCiAgICArY29uc3Qg
X1VJTlRfRkFTVDMyX1dJRFRIID0gX19fV09SRFNJWkUNCiAgICArY29uc3QgX19TQ18yX1BCU19U
UkFDSyA9IDE3Mg0KICAgICtjb25zdCBfQVJQRF9GTFVTSCA9IDB4MDMNCiAgICArY29uc3QgX1ND
TnhMRUFTVDggPSAiaGh4Ig0KICAgICtjb25zdCBfVFJZX0FHQUlOID0gMg0KICAgICtjb25zdCBf
X1NZU19TWVNJTkZPX0ggPSAxDQogICAgK2NvbnN0IF9FVEhFUlRZUEVfSVAgPSAweDA4MDANCiAg
ICArY29uc3QgX0FSUEhSRF9JRUVFMTM5NCA9IDI0DQogICAgK2NvbnN0IF9JTl9BQ0NFU1MgPSAw
eDAwMDAwMDAxDQogICAgK2NvbnN0IF9JRkxBX0lGTkFNRSA9IDMNCiAgICArY29uc3QgX1RDUF9V
U0VSX1RJTUVPVVQgPSAxOA0KICAgICtjb25zdCBfQVJQSFJEX0lFRUU4MDIxMSA9IDgwMQ0KICAg
ICtjb25zdCBfSUZMQV9BRl9TUEVDID0gMjYNCiAgICArY29uc3QgX0IxMTUyMDAwID0gMDAxMDAx
MQ0KICAgICtjb25zdCBfRVRIX1BfVERMUyA9IDB4ODkwRA0KICAgICtjb25zdCBfX0JJVFNfU0lH
U1RBQ0tfSCA9IDENCiAgICArY29uc3QgX1BGX0JMVUVUT09USCA9IDMxDQogICAgK2NvbnN0IF9f
QklUU19TSUdDT05URVhUX0ggPSAxDQogICAgK2NvbnN0IF9USU9DU1dJTlNaX3ZhbCA9IDIxNTI0
DQogICAgK2NvbnN0IF9FQUlfQUxMRE9ORSA9IC0xMDMNCiAgICArY29uc3QgX19fTERCTF9NQVhf
MTBfRVhQX18gPSA0OTMyDQogICAgK2NvbnN0IF9JRkxBX1NUQVRTX0xJTktfNjQgPSAxDQogICAg
K2NvbnN0IF9VSU5UX0ZBU1QzMl9NQVggPSAoMTg0NDY3NDQwNzM3MDk1NTE2MTUpDQogICAgK2Nv
bnN0IF9GRklfU1lTViA9IDENCiAgICArY29uc3QgX19TWVNfRklMRV9IID0gMQ0KICAgICtjb25z
dCBfSVBfT1JJR0RTVEFERFIgPSAyMA0KICAgICtjb25zdCBfRVRIX1BfU0NBID0gMHg2MDA3DQog
ICAgK2NvbnN0IF9SVE1HUlBfSVBWNl9QUkVGSVggPSAweDIwMDAwDQogICAgK2NvbnN0IF9fX05S
X3NldHByaW9yaXR5ID0gMTQxDQogICAgK2NvbnN0IF9USU9DUEtUX05PU1RPUCA9IDE2DQogICAg
K2NvbnN0IF9JUF9QTVRVRElTQ19PTUlUID0gNQ0KICAgICtjb25zdCBfQ09MTF9XRUlHSFRTX01B
WCA9IDI1NQ0KICAgICtjb25zdCBfT19UUlVOQyA9IDAxMDAwDQogICAgK2NvbnN0IF9fX05SX3Nl
dGhvc3RuYW1lID0gMTcwDQogICAgK2NvbnN0IF9GSU9OQ0xFWCA9IDB4NTQ1MA0KICAgICtjb25z
dCBfRlNfWEZMQUdfSU1NVVRBQkxFID0gMHgwMDAwMDAwOA0KICAgICtjb25zdCBfRlNfSU5MSU5F
X0RBVEFfRkwgPSAweDEwMDAwMDAwDQogICAgK2NvbnN0IF9QRl9BWDI1ID0gMw0KICAgICtjb25z
dCBfX19BVE9NSUNfQUNRX1JFTCA9IDQNCiAgICArY29uc3QgX19fTlJfc3lzaW5mbyA9IDk5DQog
ICAgK2NvbnN0IF9GU19YRkxBR19EQVggPSAweDAwMDA4MDAwDQogICAgK2NvbnN0IF9JUFY2X1JP
VVRFUl9BTEVSVCA9IDIyDQogICAgK2NvbnN0IF9JRkxBX0JSX0JSSURHRV9JRCA9IDExDQogICAg
K2NvbnN0IF9YODZfQ1I0X0xBNTdfQklUID0gMTINCiAgICArY29uc3QgX19TQ19WRVJTSU9OID0g
MjkNCiAgICArY29uc3QgX1NUQVRYX0FUVFJfQ09NUFJFU1NFRCA9IDB4MDAwNA0KICAgICtjb25z
dCBfSVBWNl9IRFJJTkNMID0gMzYNCiAgICArY29uc3QgX0lGTEFfQlJQT1JUX1VOSUNBU1RfRkxP
T0QgPSA5DQogICAgK2NvbnN0IF9SVE1fREVMTkVJR0ggPSAyOQ0KICAgICtjb25zdCBfX19TVERD
X1ZFUlNJT05fXyA9IDE5OTkwMQ0KICAgICtjb25zdCBfUEZfUUlQQ1JUUiA9IDQyDQogICAgK2Nv
bnN0IF9BREpfRlJFUVVFTkNZID0gMHgwMDAyDQogICAgK2NvbnN0IF9fX0xPTkdfTE9OR19XSURU
SF9fID0gNjQNCiAgICArY29uc3QgX0FGX0FTSCA9IF9QRl9BU0gNCiAgICArY29uc3QgX0lQX1BN
VFVESVNDX0RPTlQgPSAwDQogICAgK2NvbnN0IF9IQVZFX1NZTkNfRkVUQ0hfQU5EX0FERF80ID0g
MQ0KICAgICtjb25zdCBfSVBWNl9KT0lOX0dST1VQID0gMjANCiAgICArY29uc3QgX1NLRl9BRF9W
TEFOX1RBRyA9IDQ0DQogICAgK2NvbnN0IF9QVFJBQ0VfR0VUX1RIUkVBRF9BUkVBID0gMjUNCiAg
ICArY29uc3QgX1JUTkxHUlBfSVBWNF9NUk9VVEVfUiA9IDMwDQogICAgK2NvbnN0IF9UQ0FfRUdS
RVNTX0JMT0NLID0gMTQNCiAgICArY29uc3QgX19fU0laRU9GX1BUSFJFQURfTVVURVhfVCA9IDQw
DQogICAgK2NvbnN0IF9TT19UWVBFID0gMw0KICAgICtjb25zdCBfX19JRkxBX1ZMQU5fTUFYID0g
Ng0KICAgICtjb25zdCBfUFRSQUNFX1NFVFNJR01BU0sgPSAxNjkwNw0KICAgICtjb25zdCBfQ0xP
TkVfVkZPUksgPSAweDAwMDA0MDAwDQogICAgK2NvbnN0IF9JUFBST1RPX0lQID0gMA0KICAgICtj
b25zdCBfRU5PRVhFQyA9IDgNCiAgICArY29uc3QgX1NPX0lOQ09NSU5HX0NQVSA9IDQ5DQogICAg
K2NvbnN0IF9QUl9TRVRfRlBFWEMgPSAxMg0KICAgICtjb25zdCBfVENQX1dJTkRPV19DTEFNUCA9
IDEwDQogICAgK2NvbnN0IF9TT19SWFFfT1ZGTCA9IDQwDQogICAgK2NvbnN0IF9TWVNfdmZvcmsg
PSBfX19OUl92Zm9yaw0KICAgICtjb25zdCBfSU5fQ0xPRVhFQyA9IDUyNDI4OA0KICAgICtjb25z
dCBfVENBX0ZDTlQgPSA2DQogICAgK2NvbnN0IF9fX0ZMVDY0WF9IQVNfSU5GSU5JVFlfXyA9IDEN
CiAgICArY29uc3QgX19TQ19TRU1fVkFMVUVfTUFYID0gMzMNCiAgICArY29uc3QgX19ORVRJTkVU
X0lDTVA2X0ggPSAxDQogICAgK2NvbnN0IF9GU19FTkNSWVBUSU9OX01PREVfQUVTXzI1Nl9DQkMg
PSAzDQogICAgK2NvbnN0IF9fX1JMSU1JVF9NU0dRVUVVRSA9IDEyDQogICAgK2NvbnN0IF9JUFBS
T1RPX0NPTVAgPSAxMDgNCiAgICArY29uc3QgX1BBQ0tFVF9SWF9SSU5HID0gNQ0KICAgICtjb25z
dCBfSUZMQV9DQVJSSUVSX0RPV05fQ09VTlQgPSA0OA0KICAgICtjb25zdCBfU09fQlBGX0VYVEVO
U0lPTlMgPSA0OA0KICAgICtjb25zdCBfRUFERFJOT1RBVkFJTCA9IDk5DQogICAgK2NvbnN0IF9f
X0ZMVDMyX01JTl9fID0gMS4xDQogICAgK2NvbnN0IF9JRkxBX0JSX0ZPUldBUkRfREVMQVkgPSAx
DQogICAgK2NvbnN0IF9fX1NTRV9NQVRIX18gPSAxDQogICAgK2NvbnN0IF9TWVNfd2FpdGlkID0g
X19fTlJfd2FpdGlkDQogICAgK2NvbnN0IF9TQ09QRV9ERUxJTUlURVIgPSAnJScNCiAgICArY29u
c3QgX19fTlJfc29ja2V0ID0gNDENCiAgICArY29uc3QgX19fTkVUX0VUSEVSTkVUX0ggPSAxDQog
ICAgK2NvbnN0IF9TX0lSVVNSID0gX19fU19JUkVBRA0KICAgICtjb25zdCBfSUZMQV9YRFBfRkQg
PSAxDQogICAgK2NvbnN0IF9JUFY2X01UVSA9IDI0DQogICAgK2NvbnN0IF9GU19YRkxBR19OT0FU
SU1FID0gMHgwMDAwMDA0MA0KICAgICtjb25zdCBfRlNfSk9VUk5BTF9EQVRBX0ZMID0gMHgwMDAw
NDAwMA0KICAgICtjb25zdCBfX19OUl9jYXBnZXQgPSAxMjUNCiAgICArY29uc3QgX1JUTl9BTllD
QVNUID0gNA0KICAgICtjb25zdCBfUE9MTF9IVVAgPSA2DQogICAgK2NvbnN0IF9IQVZFX0dFVElQ
SU5GTyA9IDENCiAgICArY29uc3QgX01TX1VOQklOREFCTEUgPSAxMzEwNzINCiAgICArY29uc3Qg
X19TVEFUX1ZFUl9LRVJORUwgPSAwDQogICAgK2NvbnN0IF9QUl9NQ0VfS0lMTCA9IDMzDQogICAg
K2NvbnN0IF9fUE9TSVhfVjZfTFBCSUdfT0ZGQklHID0gLTENCiAgICArY29uc3QgX0FSUEhSRF9G
Q0FMID0gNzg1DQogICAgK2NvbnN0IF9TX0lGQ0hSID0gX19fU19JRkNIUg0KICAgICtjb25zdCBf
TUNBU1RfQkxPQ0tfU09VUkNFID0gNDMNCiAgICArY29uc3QgX1NZU19nZXRncm91cHMgPSBfX19O
Ul9nZXRncm91cHMNCiAgICArY29uc3QgX19fTlJfcnRfdGdzaWdxdWV1ZWluZm8gPSAyOTcNCiAg
ICArY29uc3QgX1VJTlQzMl9NQVggPSAoNDI5NDk2NzI5NSkNCiAgICArY29uc3QgX1RJTUVfVVRD
ID0gMQ0KICAgICtjb25zdCBfSU5fUV9PVkVSRkxPVyA9IDB4MDAwMDQwMDANCiAgICArY29uc3Qg
X0lGTEFfQlJQT1JUX0hPTERfVElNRVIgPSAyMw0KICAgICtjb25zdCBfSUZMQV9JTkVUNl9DQUNI
RUlORk8gPSA1DQogICAgK2NvbnN0IF9USU1FUl9BQlNUSU1FID0gMQ0KICAgICtjb25zdCBfTUFQ
X0ZJWEVEID0gMHgxMA0KICAgICtjb25zdCBfRl9PV05FUl9USUQgPSAwDQogICAgK2NvbnN0IF9f
U0NfQ0xPQ0tfU0VMRUNUSU9OID0gMTM3DQogICAgK2NvbnN0IF9IQVZFX0ZDSE1PREFUID0gMQ0K
ICAgICtjb25zdCBfX0NTX1BPU0lYX1Y3X0xQQklHX09GRkJJR19DRkxBR1MgPSAxMTQ0DQogICAg
K2NvbnN0IF9BVF9TVEFUWF9TWU5DX0FTX1NUQVQgPSAweDAwMDANCiAgICArY29uc3QgX1BPUlRf
VkRQX1JFU1BPTlNFX0lOU1VGRklDSUVOVF9SRVNPVVJDRVMgPSAyDQogICAgK2NvbnN0IF9UQ1Bf
VElNRV9XQUlUID0gNg0KICAgICtjb25zdCBfQlBGX1NUID0gMHgwMg0KICAgICtjb25zdCBfX1BP
U0lYX1NQT1JBRElDX1NFUlZFUiA9IC0xDQogICAgK2NvbnN0IF9BRl9TRUNVUklUWSA9IF9QRl9T
RUNVUklUWQ0KICAgICtjb25zdCBfUEZfWDI1ID0gOQ0KICAgICtjb25zdCBfUFRSQUNFX0FSQ0hf
UFJDVEwgPSAzMA0KICAgICtjb25zdCBfRVNPQ0tUTk9TVVBQT1JUID0gOTQNCiAgICArY29uc3Qg
X1RJT0NHU0VSSUFMID0gMHg1NDFFDQogICAgK2NvbnN0IF9TWVNfbWJpbmQgPSBfX19OUl9tYmlu
ZA0KICAgICtjb25zdCBfSUZMQV9WRl9WTEFOID0gMg0KICAgICtjb25zdCBfU1lTX3BrZXlfbXBy
b3RlY3QgPSBfX19OUl9wa2V5X21wcm90ZWN0DQogICAgK2NvbnN0IF9JRkFfQlJPQURDQVNUID0g
NA0KICAgICtjb25zdCBfQlBGX1JTSCA9IDB4NzANCiAgICArY29uc3QgX0lGTEFfQlJfTUNBU1Rf
SEFTSF9FTEFTVElDSVRZID0gMjYNCiAgICArY29uc3QgX1JUQVhfV0lORE9XID0gMw0KICAgICtj
b25zdCBfTVNfU0lMRU5UID0gMzI3NjgNCiAgICArY29uc3QgX1NDTV9XSUZJX1NUQVRVUyA9IF9T
T19XSUZJX1NUQVRVUw0KICAgICtjb25zdCBfX1NDX0ZJTEVfQVRUUklCVVRFUyA9IDE0Ng0KICAg
ICtjb25zdCBfX1BPU0lYX1NFTV9WQUxVRV9NQVggPSAzMjc2Nw0KICAgICtjb25zdCBfX19GTFQ2
NFhfTUlOX0VYUF9fID0gKC0xNjM4MSkNCiAgICArY29uc3QgX1BSSXVGQVNUOCA9ICJ1Ig0KICAg
ICtjb25zdCBfX190aW1lcl90X2RlZmluZWQgPSAxDQogICAgK2NvbnN0IF9fUE9TSVhfSE9TVF9O
QU1FX01BWCA9IDI1NQ0KICAgICtjb25zdCBfVENQX0ZBU1RPUEVOID0gMjMNCiAgICArY29uc3Qg
X19TQ19TSUdRVUVVRV9NQVggPSAzNA0KICAgICtjb25zdCBfSU9DX09VVCA9IChfX0lPQ19SRUFE
IDw8IF9fSU9DX0RJUlNISUZUKQ0KICAgICtjb25zdCBfRU1MSU5LID0gMzENCiAgICArY29uc3Qg
X19fV0NPUkVGTEFHID0gMHg4MA0KICAgICtjb25zdCBfRVJGS0lMTCA9IDEzMg0KICAgICtjb25z
dCBfX1VUU05BTUVfTEVOR1RIID0gNjUNCiAgICArY29uc3QgX1NJR19CTE9DSyA9IDANCiAgICAr
Y29uc3QgX1NZU19taW5jb3JlID0gX19fTlJfbWluY29yZQ0KICAgICtjb25zdCBfRUFJX09WRVJG
TE9XID0gLTEyDQogICAgK2NvbnN0IF9BRl9ORkMgPSBfUEZfTkZDDQogICAgK2NvbnN0IF9TWVNf
Z2V0cHBpZCA9IF9fX05SX2dldHBwaWQNCiAgICArY29uc3QgX01BQ1ZMQU5fRkxBR19OT1BST01J
U0MgPSAxDQogICAgK2NvbnN0IF9JUE9QVF9TRUNVUl9NTU1NID0gMHhiYzRkDQogICAgK2NvbnN0
IF9JRkxBX01BWF9NVFUgPSA1MQ0KICAgICtjb25zdCBfX19OUl9nZXR4YXR0ciA9IDE5MQ0KICAg
ICtjb25zdCBfX1NDXzJfQ19ERVYgPSA0OA0KICAgICtjb25zdCBfTkRBX0xMQUREUiA9IDINCiAg
ICArY29uc3QgX0lQVjZfVFJBTlNQQVJFTlQgPSA3NQ0KICAgICtjb25zdCBfX19OUl9tcHJvdGVj
dCA9IDEwDQogICAgK2NvbnN0IF9TSFVUX1JEV1IgPSAyDQogICAgK2NvbnN0IF9TSU9DU0lGTUVU
UklDID0gMHg4OTFlDQogICAgK2NvbnN0IF9fU0NfQUlPX0xJU1RJT19NQVggPSAyMw0KICAgICtj
b25zdCBfTUFQX0RFTllXUklURSA9IDB4MDA4MDANCiAgICArY29uc3QgX1NJT0NTUEdSUCA9IDB4
ODkwMg0KICAgICtjb25zdCBfU0lfQVNZTkNJTyA9IC00DQogICAgK2NvbnN0IF9UVU5TRVRJRkZf
dmFsID0gMTA3NDAyNTY3NA0KICAgICtjb25zdCBfSUZMQV9JRkFMSUFTID0gMjANCiAgICArY29u
c3QgX1BUUkFDRV9TRUNDT01QX0dFVF9NRVRBREFUQSA9IDE2OTA5DQogICAgK2NvbnN0IF9fX0dD
Q19JRUNfNTU5ID0gMg0KICAgICtjb25zdCBfUlRGX0xJTktSVCA9IDB4MDAxMDAwMDANCiAgICAr
Y29uc3QgX1NZU19tb3ZlX3BhZ2VzID0gX19fTlJfbW92ZV9wYWdlcw0KICAgICtjb25zdCBfU0tG
X0FEX1ZMQU5fVEFHX1BSRVNFTlQgPSA0OA0KICAgICtjb25zdCBfSEFWRV9MREVYUEwgPSAxDQog
ICAgK2NvbnN0IF9fX05SX3ByZWFkdjIgPSAzMjcNCiAgICArY29uc3QgX19fTlJfY3JlYXRlX21v
ZHVsZSA9IDE3NA0KICAgICtjb25zdCBfTUFDVkxBTl9NT0RFX0JSSURHRSA9IDQNCiAgICArY29u
c3QgX0RUX0RJUiA9IDQNCiAgICArY29uc3QgX1NUQV9QUFNTSUdOQUwgPSAweDAxMDANCiAgICAr
Y29uc3QgX1NZU19zZXRmc2dpZCA9IF9fX05SX3NldGZzZ2lkDQogICAgK2NvbnN0IF9fX1JMSU1J
VF9SVFRJTUUgPSAxNQ0KICAgICtjb25zdCBfX1NDXzJfVkVSU0lPTiA9IDQ2DQogICAgK2NvbnN0
IF9IQVZFX09QRU42NCA9IDENCiAgICArY29uc3QgX1RSQVBfQlJLUFQgPSAxDQogICAgK2NvbnN0
IF9OSV9ER1JBTSA9IDE2DQogICAgK2NvbnN0IF9fU0NfREVWSUNFX1NQRUNJRklDID0gMTQxDQog
ICAgK2NvbnN0IF9JUEZSQUdUVEwgPSA2MA0KICAgICtjb25zdCBfX1NDX05MX01TR01BWCA9IDEy
MQ0KICAgICtjb25zdCBfU1lTX3NjaGVkX3NldGF0dHIgPSBfX19OUl9zY2hlZF9zZXRhdHRyDQog
ICAgK2NvbnN0IF9QUl9TRVRfTU1fRU5EX0RBVEEgPSA0DQogICAgK2NvbnN0IF9SVEFYX0FEVk1T
UyA9IDgNCiAgICArY29uc3QgX1NPTF9SQVcgPSAyNTUNCiAgICArY29uc3QgX0xPQ0tfRVggPSAy
DQogICAgK2NvbnN0IF9fX05SX211bm1hcCA9IDExDQogICAgK2NvbnN0IF9fX0dDQ19BVE9NSUNf
TExPTkdfTE9DS19GUkVFID0gMg0KICAgICtjb25zdCBfX1NDX1BIWVNfUEFHRVMgPSA4NQ0KICAg
ICtjb25zdCBfRlNfS0VZX0RFU0NfUFJFRklYX1NJWkUgPSA4DQogICAgK2NvbnN0IF9TWVNfcmVt
YXBfZmlsZV9wYWdlcyA9IF9fX05SX3JlbWFwX2ZpbGVfcGFnZXMNCiAgICArY29uc3QgX01TX1NZ
TkMgPSA0DQogICAgK2NvbnN0IF9GX1VOTENLID0gMg0KICAgICtjb25zdCBfUFJfR0VUX0ZQRU1V
ID0gOQ0KICAgICtjb25zdCBfX19OUl9yZW1hcF9maWxlX3BhZ2VzID0gMjE2DQogICAgK2NvbnN0
IF9JUE9QVF9OVU1CRVJfTUFTSyA9IDB4MWYNCiAgICArY29uc3QgX1NZU19zZXR1aWQgPSBfX19O
Ul9zZXR1aWQNCiAgICArY29uc3QgX0lQX1BBU1NTRUMgPSAxOA0KICAgICtjb25zdCBfU1lTX3Nv
Y2tldHBhaXIgPSBfX19OUl9zb2NrZXRwYWlyDQogICAgK2NvbnN0IF9ORFRQQV9MT0NLVElNRSA9
IDE1DQogICAgK2NvbnN0IF9UQ1BfQ09PS0lFX01JTiA9IDgNCiAgICArY29uc3QgX1JUTVNHX0FS
X0ZBSUxFRCA9IDB4NTENCiAgICArY29uc3QgX0lMTF9CQURTVEsgPSA4DQogICAgK2NvbnN0IF9B
UlBPUF9SRVBMWSA9IDINCiAgICArY29uc3QgX0hBVkVfU1RSSU5HX0ggPSAxDQogICAgK2NvbnN0
IF9JTlRfRkFTVDhfTUFYID0gKDEyNykNCiAgICArY29uc3QgX19fTlJfX3N5c2N0bCA9IDE1Ng0K
ICAgICtjb25zdCBfUlRGX0JST0FEQ0FTVCA9IDB4MTAwMDAwMDANCiAgICArY29uc3QgX1BGX0tD
TSA9IDQxDQogICAgK2NvbnN0IF9fUENfTUFYX0lOUFVUID0gMg0KICAgICtjb25zdCBfSU5fTU9E
SUZZID0gMHgwMDAwMDAwMg0KICAgICtjb25zdCBfU0lHUVVJVCA9IDMNCiAgICArY29uc3QgX1RD
UF9DT1JLID0gMw0KICAgICtjb25zdCBfU1lTX3JlbW92ZXhhdHRyID0gX19fTlJfcmVtb3ZleGF0
dHINCiAgICArY29uc3QgX19fRkxUX0VQU0lMT05fXyA9IDEuMQ0KICAgICtjb25zdCBfX19VSU5U
MzJfTUFYX18gPSAweGZmZmZmZmZmDQogICAgK2NvbnN0IF9fX05SX2ZjaG93biA9IDkzDQogICAg
K2NvbnN0IF9SVE5MR1JQX0xJTksgPSAxDQogICAgK2NvbnN0IF9fU0NfVFJBQ0VfTE9HID0gMTg0
DQogICAgK2NvbnN0IF9UQ1BfS0VFUElOVFZMID0gNQ0KICAgICtjb25zdCBfUFJfR0VUX0tFRVBD
QVBTID0gNw0KICAgICtjb25zdCBfSU5UX0xFQVNUMzJfTUFYID0gKDIxNDc0ODM2NDcpDQogICAg
K2NvbnN0IF9fX0xEQkxfTUlOX0VYUF9fID0gKC0xNjM4MSkNCiAgICArY29uc3QgX1NDTmkzMiA9
ICJpIg0KICAgICtjb25zdCBfX19OUl9yZW5hbWUgPSA4Mg0KICAgICtjb25zdCBfUFRSQUNFX09f
VFJBQ0VTRUNDT01QID0gMTI4DQogICAgK2NvbnN0IF9JTl9JR05PUkVEID0gMHgwMDAwODAwMA0K
ICAgICtjb25zdCBfQlBGX0lNTSA9IDB4MDANCiAgICArY29uc3QgX0lGTEFfVkZfVFJVU1QgPSA5
DQogICAgK2NvbnN0IF9JUFBST1RPX01IID0gMTM1DQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX0xJ
TksgPSAzDQogICAgK2NvbnN0IF9FU0hVVERPV04gPSAxMDgNCiAgICArY29uc3QgX1NPTF9QQUNL
RVQgPSAyNjMNCiAgICArY29uc3QgX19fTlJfaW5pdF9tb2R1bGUgPSAxNzUNCiAgICArY29uc3Qg
X0NMT05FX05FV05TID0gMHgwMDAyMDAwMA0KICAgICtjb25zdCBfUlRQUk9UX01ST1VURUQgPSAx
Nw0KICAgICtjb25zdCBfX1NDX1NTX1JFUExfTUFYID0gMjQxDQogICAgK2NvbnN0IF9HVFBfUk9M
RV9HR1NOID0gMA0KICAgICtjb25zdCBfU1lTX3RydW5jYXRlID0gX19fTlJfdHJ1bmNhdGUNCiAg
ICArY29uc3QgX19fTUFDU0VDX1ZBTElEQVRFX0VORCA9IDMNCiAgICArY29uc3QgX1g4Nl9FRkxB
R1NfVklGX0JJVCA9IDE5DQogICAgK2NvbnN0IF9fU0NfTVVMVElfUFJPQ0VTUyA9IDE1MA0KICAg
ICtjb25zdCBfSVBQUk9UT19QSU0gPSAxMDMNCiAgICArY29uc3QgX0IxNTAwMDAwID0gMDAxMDAx
Mg0KICAgICtjb25zdCBfX19OUl9wd3JpdGV2ID0gMjk2DQogICAgK2NvbnN0IF9TT19SRVVTRUFE
RFIgPSAyDQogICAgK2NvbnN0IF9OQ0MgPSA4DQogICAgK2NvbnN0IF9UQ1BfQ0FfTG9zcyA9IDQN
CiAgICArY29uc3QgX01TX01HQ19NU0sgPSAweGZmZmYwMDAwDQogICAgK2NvbnN0IF9TX0lYT1RI
ID0gKF9TX0lYR1JQID4+IDMpDQogICAgK2NvbnN0IF9TT0xfTkVUTElOSyA9IDI3MA0KICAgICtj
b25zdCBfSUxMX1BSVlJFRyA9IDYNCiAgICArY29uc3QgX19fRkxUMzJYX01BTlRfRElHX18gPSA1
Mw0KICAgICtjb25zdCBfU0NOdUxFQVNUOCA9ICJoaHUiDQogICAgK2NvbnN0IF9VTExPTkdfTUFY
ID0gKF9MTE9OR19NQVggKiAyICsgMSkNCiAgICArY29uc3QgX0lGTEFfVlhMQU5fQUdFSU5HID0g
OA0KICAgICtjb25zdCBfUFJfU1BFQ19QUkNUTCA9ICgxIDw8IDApDQogICAgK2NvbnN0IF9SVE1f
REVMQ0hBSU4gPSAxMDENCiAgICArY29uc3QgX19JT0NfU0laRVNISUZUID0gKF9fSU9DX1RZUEVT
SElGVCtfX0lPQ19UWVBFQklUUykNCiAgICArY29uc3QgX19fTlJfbmZzc2VydmN0bCA9IDE4MA0K
ICAgICtjb25zdCBfX19GTFRfTUlOXzEwX0VYUF9fID0gKC0zNykNCiAgICArY29uc3QgX0lGTEFf
WERQX1BST0dfSUQgPSA0DQogICAgK2NvbnN0IF9fQklUU19UWVBFU19TVFJVQ1RfU0NIRURfUEFS
QU0gPSAxDQogICAgK2NvbnN0IF9BUlBIUkRfUlNSVkQgPSAyNjANCiAgICArY29uc3QgX19QT1NJ
WDJfQkNfQkFTRV9NQVggPSA5OQ0KICAgICtjb25zdCBfUEFDS0VUX0FERF9NRU1CRVJTSElQID0g
MQ0KICAgICtjb25zdCBfX19OUl9ydF9zaWdwZW5kaW5nID0gMTI3DQogICAgK2NvbnN0IF9fX09f
UEFUSCA9IDAxMDAwMDAwMA0KICAgICtjb25zdCBfRVRIX1BfQlBRID0gMHgwOEZGDQogICAgK2Nv
bnN0IF9UQ1BfVElNRVNUQU1QID0gMjQNCiAgICArY29uc3QgX1NJT0NTSUZQRkxBR1MgPSAweDg5
MzQNCiAgICArY29uc3QgX1JUTV9ORVdMSU5LID0gMTYNCiAgICArY29uc3QgX0lGTEFfSU5GT19Y
U1RBVFMgPSAzDQogICAgK2NvbnN0IF9fUE9TSVhfQ1BVVElNRSA9IDANCiAgICArY29uc3QgX1BB
Q0tFVF9GQVNUUk9VVEUgPSA2DQogICAgK2NvbnN0IF9JTlRfTEVBU1Q2NF9XSURUSCA9IDY0DQog
ICAgK2NvbnN0IF9QRl9JUFggPSA0DQogICAgK2NvbnN0IF9OVURfUEVSTUFORU5UID0gMHg4MA0K
ICAgICtjb25zdCBfX19OUl9pb19kZXN0cm95ID0gMjA3DQogICAgK2NvbnN0IF9SVEFYX1JUVCA9
IDQNCiAgICArY29uc3QgX19fUkxJTUlUX1JTUyA9IDUNCiAgICArY29uc3QgX19fTlJfZ2V0dGlk
ID0gMTg2DQogICAgK2NvbnN0IF9fX05SX2lvcGVybSA9IDE3Mw0KICAgICtjb25zdCBfU19JRkJM
SyA9IF9fX1NfSUZCTEsNCiAgICArY29uc3QgX1NDTnhGQVNUOCA9ICJoaHgiDQogICAgK2NvbnN0
IF9fX05SX3R1eGNhbGwgPSAxODQNCiAgICArY29uc3QgX19fT19ESVJFQ1RPUlkgPSAwMjAwMDAw
DQogICAgK2NvbnN0IF9TWVNfY29ubmVjdCA9IF9fX05SX2Nvbm5lY3QNCiAgICArY29uc3QgX1RD
UF9DQ19JTkZPID0gMjYNCiAgICArY29uc3QgX1BBQ0tBR0VfU1RSSU5HID0gInBhY2thZ2UtdW51
c2VkIHZlcnNpb24tdW51c2VkIg0KICAgICtjb25zdCBfU1lTX3NjaGVkX2dldGF0dHIgPSBfX19O
Ul9zY2hlZF9nZXRhdHRyDQogICAgK2NvbnN0IF9fUE9TSVgyX0JDX1NDQUxFX01BWCA9IDk5DQog
ICAgK2NvbnN0IF9QVFJBQ0VfUE9LRVRFWFQgPSA0DQogICAgK2NvbnN0IF9FVEhfUF9ERUMgPSAw
eDYwMDANCiAgICArY29uc3QgX1NZU19mbGlzdHhhdHRyID0gX19fTlJfZmxpc3R4YXR0cg0KICAg
ICtjb25zdCBfSVBWTEFOX0ZfUFJJVkFURSA9IDB4MDENCiAgICArY29uc3QgX05MTVNHX09WRVJS
VU4gPSAweDQNCiAgICArY29uc3QgX05FVExJTktfSVA2X0ZXID0gMTMNCiAgICArY29uc3QgX0lG
TEFfQlJfQUdFSU5HX1RJTUUgPSA0DQogICAgK2NvbnN0IF9UQ1NFVFMgPSAweDU0MDINCiAgICAr
Y29uc3QgX1JUTV9GX0VRVUFMSVpFID0gMHg0MDANCiAgICArY29uc3QgX0hBVkVfRFVQMyA9IDEN
CiAgICArY29uc3QgX0JSSURHRV9NT0RFX0hBSVJQSU4gPSAxDQogICAgK2NvbnN0IF9UQ1NFVFgg
PSAweDU0MzMNCiAgICArY29uc3QgX1ZTVVNQID0gMTANCiAgICArY29uc3QgX19CSVRTX1NPQ0tB
RERSX0ggPSAxDQogICAgK2NvbnN0IF9TSUdQT0xMID0gMjkNCiAgICArY29uc3QgX1BUUkFDRV9F
VkVOVF9TVE9QID0gMTI4DQogICAgK2NvbnN0IF9BVF9TWU1MSU5LX05PRk9MTE9XID0gMHgxMDAN
CiAgICArY29uc3QgX0hBVkVfU1lTX1ZGU19IID0gMQ0KICAgICtjb25zdCBfUEZfS0VZID0gMTUN
CiAgICArY29uc3QgX0lGTEFfU1RBVFNfTElOS19YU1RBVFNfU0xBVkUgPSAzDQogICAgK2NvbnN0
IF9OTF9NTUFQX01TR19BTElHTk1FTlQgPSBfTkxNU0dfQUxJR05UTw0KICAgICtjb25zdCBfSUZM
QV9WWExBTl9VRFBfQ1NVTSA9IDE4DQogICAgK2NvbnN0IF9fX05SX3dhaXQ0ID0gNjENCiAgICAr
Y29uc3QgX0lGTEFfUk1ORVRfRkxBR1MgPSAyDQogICAgK2NvbnN0IF9TT0xfUkRTID0gMjc2DQog
ICAgK2NvbnN0IF9SVEFYX0ZFQVRVUkVfTUFTSyA9IChfUlRBWF9GRUFUVVJFX0VDTiB8IF9SVEFY
X0ZFQVRVUkVfU0FDSyB8IF9SVEFYX0ZFQVRVUkVfVElNRVNUQU1QIHwgX1JUQVhfRkVBVFVSRV9B
TExGUkFHKQ0KICAgICtjb25zdCBfUlRNX0dFVE5FVENPTkYgPSA4Mg0KICAgICtjb25zdCBfX19G
TFQ2NF9NQVhfRVhQX18gPSAxMDI0DQogICAgK2NvbnN0IF9USU9DU1BHUlBfdmFsID0gMjE1MjAN
CiAgICArY29uc3QgX0lQUFJPVE9fUlNWUCA9IDQ2DQogICAgK2NvbnN0IF9SVE1fR0VUTlNJRCA9
IDkwDQogICAgK2NvbnN0IF9PTkxDUiA9IDAwMDAwMDQNCiAgICArY29uc3QgX19TQ19QSUlfU09D
S0VUID0gNTUNCiAgICArY29uc3QgX0FSUEhSRF9UVU5ORUwgPSA3NjgNCiAgICArY29uc3QgX0hB
VkVfTUlOQ09SRSA9IDENCiAgICArY29uc3QgX19fSEFWRV9HRU5FUklDX1NFTEVDVElPTiA9IDEN
CiAgICArY29uc3QgX1RDUF9LRUVQQ05UID0gNg0KICAgICtjb25zdCBfVENQX1NZTl9SRUNWID0g
Mw0KICAgICtjb25zdCBfTkxNX0ZfQVBQRU5EID0gMHg4MDANCiAgICArY29uc3QgX1NZU19tbWFw
ID0gX19fTlJfbW1hcA0KICAgICtjb25zdCBfU1lTX2Nsb2NrX2FkanRpbWUgPSBfX19OUl9jbG9j
a19hZGp0aW1lDQogICAgK2NvbnN0IF9SVE5MR1JQX1RDID0gNA0KICAgICtjb25zdCBfQURKX05B
Tk8gPSAweDIwMDANCiAgICArY29uc3QgX05FVExJTktfVFhfUklORyA9IDcNCiAgICArY29uc3Qg
X1NZU19ldmVudGZkID0gX19fTlJfZXZlbnRmZA0KICAgICtjb25zdCBfX1NDX1RSQUNFX05BTUVf
TUFYID0gMjQzDQogICAgK2NvbnN0IF9TVEFUWF9BVElNRSA9IDB4MDAyMA0KICAgICtjb25zdCBf
X0NTX0xGU19MREZMQUdTID0gMTAwMQ0KICAgICtjb25zdCBfX19OUl9zZXRyZWdpZCA9IDExNA0K
ICAgICtjb25zdCBfRU9XTkVSREVBRCA9IDEzMA0KICAgICtjb25zdCBfX19OUl9yZWFkbGluayA9
IDg5DQogICAgK2NvbnN0IF9fX3N0YWNrX3RfZGVmaW5lZCA9IDENCiAgICArY29uc3QgX19fRkxU
NjRYX01BWF8xMF9FWFBfXyA9IDQ5MzINCiAgICArY29uc3QgX1JUU0lHX01BWCA9IDMyDQogICAg
K2NvbnN0IF9fX1NJWkVPRl9MT05HX0RPVUJMRV9fID0gMTYNCiAgICArY29uc3QgX1ZUMCA9IDAw
MDAwMDANCiAgICArY29uc3QgX1ZUMSA9IDAwNDAwMDANCiAgICArY29uc3QgX0lOVF9GQVNUMTZf
TUFYID0gKDkyMjMzNzIwMzY4NTQ3NzU4MDcpDQogICAgK2NvbnN0IF9YODZfQ1IwX1RTX0JJVCA9
IDMNCiAgICArY29uc3QgX19fTlJfc3lzZnMgPSAxMzkNCiAgICArY29uc3QgX1g4Nl9DUjRfUEFF
X0JJVCA9IDUNCiAgICArY29uc3QgX19QT1NJWF9UWk5BTUVfTUFYID0gNg0KICAgICtjb25zdCBf
U1lTX29wZW4gPSBfX19OUl9vcGVuDQogICAgK2NvbnN0IF9TSU9DU0lGRU5DQVAgPSAweDg5MjYN
CiAgICArY29uc3QgX1RDUF9DQV9EaXNvcmRlciA9IDENCiAgICArY29uc3QgX19fV09SRFNJWkUg
PSA2NA0KICAgICtjb25zdCBfSVBfTUYgPSAweDIwMDANCiAgICArY29uc3QgX1BST1RfR1JPV1NV
UCA9IDB4MDIwMDAwMDANCiAgICArY29uc3QgX1JURl9BRERSQ0xBU1NNQVNLID0gMHhGODAwMDAw
MA0KICAgICtjb25zdCBfX19hbWQ2NCA9IDENCiAgICArY29uc3QgX0FSUEhSRF9QUk9ORVQgPSA0
DQogICAgK2NvbnN0IF9COTIxNjAwID0gMDAxMDAwNw0KICAgICtjb25zdCBfRUFERFJJTlVTRSA9
IDk4DQogICAgK2NvbnN0IF9GU19GTF9VU0VSX1ZJU0lCTEUgPSAweDAwMDNERkZGDQogICAgK2Nv
bnN0IF9fX05SX3RpbWVyZmRfZ2V0dGltZSA9IDI4Nw0KICAgICtjb25zdCBfQ0xPTkVfTkVXUElE
ID0gMHgyMDAwMDAwMA0KICAgICtjb25zdCBfUlROTEdSUF9JUFY2X1JVTEUgPSAxOQ0KICAgICtj
b25zdCBfRVRIRVJfTUlOX0xFTiA9IChfRVRIX1pMRU4gKyBfRVRIRVJfQ1JDX0xFTikNCiAgICAr
Y29uc3QgX1BGX1JPU0UgPSAxMQ0KICAgICtjb25zdCBfSUZMQV9QT1JUX1NFTEYgPSAyNQ0KICAg
ICtjb25zdCBfTElOS19YU1RBVFNfVFlQRV9CUklER0UgPSAxDQogICAgK2NvbnN0IF9fU1lTX1NU
QVRfSCA9IDENCiAgICArY29uc3QgX0lGTEFfQlJfR1JPVVBfQUREUiA9IDIwDQogICAgK2NvbnN0
IF9GX1NFVFNJRyA9IF9fX0ZfU0VUU0lHDQogICAgK2NvbnN0IF9XU1RPUFBFRCA9IDINCiAgICAr
Y29uc3QgX19QQ19WRElTQUJMRSA9IDgNCiAgICArY29uc3QgX19TQ19NUV9PUEVOX01BWCA9IDI3
DQogICAgK2NvbnN0IF9YODZfRUZMQUdTX1BGX0JJVCA9IDINCiAgICArY29uc3QgX1JUTV9ORVdB
RERSTEFCRUwgPSA3Mg0KICAgICtjb25zdCBfU09DS19QQUNLRVQgPSAxMA0KICAgICtjb25zdCBf
X19OUl9tcV91bmxpbmsgPSAyNDENCiAgICArY29uc3QgX1JUTUdSUF9ORUlHSCA9IDQNCiAgICAr
Y29uc3QgX1BGX1dBTlBJUEUgPSAyNQ0KICAgICtjb25zdCBfUlRNX0RFTEFERFIgPSAyMQ0KICAg
ICtjb25zdCBfTE9DS19VTiA9IDgNCiAgICArY29uc3QgX1BPTExfSU4gPSAxDQogICAgK2NvbnN0
IF9NQUNWTEFOX01BQ0FERFJfRkxVU0ggPSAyDQogICAgK2NvbnN0IF9SVFBST1RfRE5ST1VURUQg
PSAxMw0KICAgICtjb25zdCBfTUFDVkxBTl9NT0RFX1NPVVJDRSA9IDE2DQogICAgK2NvbnN0IF9T
WVNfc2V0cGdpZCA9IF9fX05SX3NldHBnaWQNCiAgICArY29uc3QgX19fSUZMQV9HRU5FVkVfTUFY
ID0gMTINCiAgICArY29uc3QgX1NJT0NBRERNVUxUSSA9IDB4ODkzMQ0KICAgICtjb25zdCBfUlRN
U0dfTkVXUk9VVEUgPSAweDIxDQogICAgK2NvbnN0IF9GRklfVFlQRV9DT01QTEVYID0gMTUNCiAg
ICArY29uc3QgX0hBVkVfQ09TTCA9IDENCiAgICArY29uc3QgX05JX01BWEhPU1QgPSAxMDI1DQog
ICAgK2NvbnN0IF9IQVZFX1NZU19NT1VOVF9IID0gMQ0KICAgICtjb25zdCBfTk9fUkVDT1ZFUlkg
PSAzDQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX1VOU1BFQyA9IDANCiAgICArY29uc3QgX0lGTEFf
Qk9ORF9NSUlNT04gPSAzDQogICAgK2NvbnN0IF9JUERFRlRUTCA9IDY0DQogICAgK2NvbnN0IF9S
VEFYX01UVSA9IDINCiAgICArY29uc3QgX0VORVRSRVNFVCA9IDEwMg0KICAgICtjb25zdCBfX19G
TFRfSEFTX1FVSUVUX05BTl9fID0gMQ0KICAgICtjb25zdCBfSUZMQV9JTkVUX0NPTkYgPSAxDQog
ICAgK2NvbnN0IF9TSUdfQVRPTUlDX01BWCA9ICgyMTQ3NDgzNjQ3KQ0KICAgICtjb25zdCBfU1RB
X1BQU0ZSRVEgPSAweDAwMDINCiAgICArY29uc3QgX0lOX0lTRElSID0gMHg0MDAwMDAwMA0KICAg
ICtjb25zdCBfSUNNUDZfRUNIT19SRVBMWSA9IDEyOQ0KICAgICtjb25zdCBfVENYT05DID0gMHg1
NDBBDQogICAgK2NvbnN0IF9SVENGX01BU1EgPSAweDAwNDAwMDAwDQogICAgK2NvbnN0IF9BRl9C
UklER0UgPSBfUEZfQlJJREdFDQogICAgK2NvbnN0IF9QUl9USU1JTkdfVElNRVNUQU1QID0gMQ0K
ICAgICtjb25zdCBfSVBWNl9QTVRVRElTQ19PTUlUID0gNQ0KICAgICtjb25zdCBfSUxMX0lMTFRS
UCA9IDQNCiAgICArY29uc3QgX0lQT1BUX1JFU0VSVkVEMiA9IDB4NjANCiAgICArY29uc3QgX19f
TkRVU0VST1BUX01BWCA9IDINCiAgICArY29uc3QgX1NZTkNfRklMRV9SQU5HRV9XUklURSA9IDIN
CiAgICArY29uc3QgX1NUQV9JTlMgPSAweDAwMTANCiAgICArY29uc3QgX19QT1NJWDJfQ09MTF9X
RUlHSFRTX01BWCA9IDINCiAgICArY29uc3QgX19YT1BFTl9YQ1VfVkVSU0lPTiA9IDQNCiAgICAr
Y29uc3QgX0VOT0NTSSA9IDUwDQogICAgK2NvbnN0IF9YQVRUUl9MSVNUX01BWCA9IDY1NTM2DQog
ICAgK2NvbnN0IF9YODZfQ1IwX05FX0JJVCA9IDUNCiAgICArY29uc3QgX1NZU19wc2VsZWN0NiA9
IF9fX05SX3BzZWxlY3Q2DQogICAgK2NvbnN0IF9UT1NUT1AgPSAwMDAwNDAwDQogICAgK2NvbnN0
IF9USU9DUEtUX1NUT1AgPSA0DQogICAgK2NvbnN0IF9JRkxBX0JSUE9SVF9QUk9URUNUID0gNg0K
ICAgICtjb25zdCBfX1NDX1NJR05BTFMgPSAxNTgNCiAgICArY29uc3QgX1NZU19zZXR4YXR0ciA9
IF9fX05SX3NldHhhdHRyDQogICAgK2NvbnN0IF9SRU5BTUVfV0hJVEVPVVQgPSAoMSA8PCAyKQ0K
ICAgICtjb25zdCBfSUZBX0ZfTk9EQUQgPSAweDAyDQogICAgK2NvbnN0IF9fTEFSR0VGSUxFX1NP
VVJDRSA9IDENCiAgICArY29uc3QgX19fV0lOVF9NQVhfXyA9IDB4ZmZmZmZmZmYNCiAgICArY29u
c3QgX0VQRk5PU1VQUE9SVCA9IDk2DQogICAgK2NvbnN0IF9TWVNfc2lnYWx0c3RhY2sgPSBfX19O
Ul9zaWdhbHRzdGFjaw0KICAgICtjb25zdCBfU0NOZExFQVNUMzIgPSAiZCINCiAgICArY29uc3Qg
X0lOVDE2X1dJRFRIID0gMTYNCiAgICArY29uc3QgX1JUTkhfRl9PTkxJTksgPSA0DQogICAgK2Nv
bnN0IF9HQUlfV0FJVCA9IDANCiAgICArY29uc3QgX19fTlJfbG9va3VwX2Rjb29raWUgPSAyMTIN
CiAgICArY29uc3QgX19fTlJfbWluY29yZSA9IDI3DQogICAgK2NvbnN0IF9BUlBIUkRfVFVOTkVM
NiA9IDc2OQ0KICAgICtjb25zdCBfU09MX1JYUlBDID0gMjcyDQogICAgK2NvbnN0IF9fUENfMl9T
WU1MSU5LUyA9IDIwDQogICAgK2NvbnN0IF9JQ01QNl9EU1RfVU5SRUFDSF9OT1JPVVRFID0gMA0K
ICAgICtjb25zdCBfRE5fQVRUUklCID0gMHgwMDAwMDAyMA0KICAgICtjb25zdCBfUFRSQUNFX1NF
VFJFR1MgPSAxMw0KICAgICtjb25zdCBfX19MUDY0X18gPSAxDQogICAgK2NvbnN0IF9GX1NFQUxf
U0VBTCA9IDB4MDAwMQ0KICAgICtjb25zdCBfTUxEX0xJU1RFTkVSX1FVRVJZID0gMTMwDQogICAg
K2NvbnN0IF9TWVNfaW5vdGlmeV9pbml0MSA9IF9fX05SX2lub3RpZnlfaW5pdDENCiAgICArY29u
c3QgX19fTlJfYWNjdCA9IDE2Mw0KICAgICtjb25zdCBfTVNHX0ZBU1RPUEVOID0gNTM2ODcwOTEy
DQogICAgK2NvbnN0IF9fX3NpZ2V2ZW50X3RfZGVmaW5lZCA9IDENCiAgICArY29uc3QgX1JUTkxH
UlBfSVBWNl9NUk9VVEVfUiA9IDMxDQogICAgK2NvbnN0IF9fQ1NfUE9TSVhfVjZfSUxQMzJfT0ZG
QklHX0xERkxBR1MgPSAxMTIxDQogICAgK2NvbnN0IF9JRkxBX01BQ1ZMQU5fVU5TUEVDID0gMA0K
ICAgICtjb25zdCBfUEFDS0VUX0FVWERBVEEgPSA4DQogICAgK2NvbnN0IF9JRkxBX0JPTkRfVU5T
UEVDID0gMA0KICAgICtjb25zdCBfSUZMQV9HRU5FVkVfTEFCRUwgPSAxMQ0KICAgICtjb25zdCBf
UFJfVU5BTElHTl9TSUdCVVMgPSAyDQogICAgK2NvbnN0IF9GX1RMT0NLID0gMg0KICAgICtjb25z
dCBfU1RBVFhfVFlQRSA9IDB4MDAwMQ0KICAgICtjb25zdCBfX1BPU0lYX1NQSU5fTE9DS1MgPSAy
MDA4MDkNCiAgICArY29uc3QgX1BGX1JYUlBDID0gMzMNCiAgICArY29uc3QgX1RDUF9LRUVQSURM
RSA9IDQNCiAgICArY29uc3QgX19fVUlOVF9GQVNUNjRfTUFYX18gPSAweGZmZmZmZmZmZmZmZmZm
ZmYNCiAgICArY29uc3QgX19fTlJfbGxpc3R4YXR0ciA9IDE5NQ0KICAgICtjb25zdCBfX19OUl9y
c2VxID0gMzM0DQogICAgK2NvbnN0IF9fQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAw
DQogICAgK2NvbnN0IF9PX0FDQ01PREUgPSAwMDAzDQogICAgK2NvbnN0IF9USU9DTV9STkcgPSAw
eDA4MA0KICAgICtjb25zdCBfX19OUl9rZXhlY19maWxlX2xvYWQgPSAzMjANCiAgICArY29uc3Qg
X0lOUl9PUEVOX0NVUiA9IDEwMjQNCiAgICArY29uc3QgX19fTlJfcm1kaXIgPSA4NA0KICAgICtj
b25zdCBfRVRIX1BfQVgyNSA9IDB4MDAwMg0KICAgICtjb25zdCBfX0JJVFNfU0lHSU5GT19DT05T
VFNfQVJDSF9IID0gMQ0KICAgICtjb25zdCBfSEFWRV9JTlRUWVBFU19IID0gMQ0KICAgICtjb25z
dCBfRURFU1RBRERSUkVRID0gODkNCiAgICArY29uc3QgX19fTkdSRUcgPSAyMw0KICAgICtjb25z
dCBfUkVHX1IxMCA9IDINCiAgICArY29uc3QgX1JFR19SMTEgPSAzDQogICAgK2NvbnN0IF9JUFY2
X0ZSRUVCSU5EID0gNzgNCiAgICArY29uc3QgX1JFR19SMTMgPSA1DQogICAgK2NvbnN0IF9fX2hh
dmVfcHRocmVhZF9hdHRyX3QgPSAxDQogICAgK2NvbnN0IF9SRUdfUjE1ID0gNw0KICAgICtjb25z
dCBfTklfTUFYU0VSViA9IDMyDQogICAgK2NvbnN0IF9BUlBIUkRfSERMQyA9IF9BUlBIUkRfQ0lT
Q08NCiAgICArY29uc3QgX19fR0xJQkNfVVNFX0lFQ182MDU1OV9CRlBfRVhUID0gMQ0KICAgICtj
b25zdCBfUEZfVU5JWCA9IF9QRl9MT0NBTA0KICAgICtjb25zdCBfX19TWVNDQUxMX1dPUkRTSVpF
ID0gNjQNCiAgICArY29uc3QgX1NZU19jcmVhdCA9IF9fX05SX2NyZWF0DQogICAgK2NvbnN0IF9U
SU9DU0NUVFkgPSAweDU0MEUNCiAgICArY29uc3QgX0ZGSV9MQVNUX0FCSSA9IDgNCiAgICArY29u
c3QgX05EQV9NQVNURVIgPSA5DQogICAgK2NvbnN0IF9FVEhfUF9JRUVFUFVQID0gMHgwYTAwDQog
ICAgK2NvbnN0IF9QRl9JUkRBID0gMjMNCiAgICArY29uc3QgX0hBVkVfU1lTX1RJTUVYX0ggPSAx
DQogICAgK2NvbnN0IF9fX0ZMVF9ERUNJTUFMX0RJR19fID0gOQ0KICAgICtjb25zdCBfX19OUl90
aW1lcl9jcmVhdGUgPSAyMjINCiAgICArY29uc3QgX1NZU19nZXRwZ2lkID0gX19fTlJfZ2V0cGdp
ZA0KICAgICtjb25zdCBfRkZJXzY0X0JJVF9NQVggPSA5MjIzMzcyMDM2ODU0Nzc1ODA3DQogICAg
K2NvbnN0IF9JRkxBX01BQ1NFQ19JQ1ZfTEVOID0gMw0KICAgICtjb25zdCBfQjE4MDAgPSAwMDAw
MDEyDQogICAgK2NvbnN0IF9CUzAgPSAwMDAwMDAwDQogICAgK2NvbnN0IF9CUzEgPSAwMDIwMDAw
DQogICAgK2NvbnN0IF9fU1lTX1RJTUVfSCA9IDENCiAgICArY29uc3QgX19QT1NJWF9BUkdfTUFY
ID0gNDA5Ng0KICAgICtjb25zdCBfX19TQ0hBUl9XSURUSF9fID0gOA0KICAgICtjb25zdCBfX19G
TFRfUkFESVhfXyA9IDINCiAgICArY29uc3QgX1g4Nl9DUjNfUFdUX0JJVCA9IDMNCiAgICArY29u
c3QgX1BPUlRfVkRQX1JFU1BPTlNFX1VOVVNFRF9WVElEID0gMw0KICAgICtjb25zdCBfX19ERUMz
Ml9FUFNJTE9OX18gPSAxRS02DQogICAgK2NvbnN0IF9JRkxBX1ZYTEFOX0xFQVJOSU5HID0gNw0K
ICAgICtjb25zdCBfRVBPTExFVCA9IDIxNDc0ODM2NDgNCiAgICArY29uc3QgX0ZfU0VUTEtXNjQg
PSA3DQogICAgK2NvbnN0IF9fX1VTRV9BVEZJTEUgPSAxDQogICAgK2NvbnN0IF9TX0lSRUFEID0g
X1NfSVJVU1INCiAgICArY29uc3QgX1BUUkFDRV9TRVRGUFJFR1MgPSAxNQ0KICAgICtjb25zdCBf
SUZGX1JVTk5JTkcgPSA2NA0KICAgICtjb25zdCBfSEFWRV9VVElNRU5TQVQgPSAxDQogICAgK2Nv
bnN0IF9fUENfU1lNTElOS19NQVggPSAxOQ0KICAgICtjb25zdCBfWDg2X0VGTEFHU19aRl9CSVQg
PSA2DQogICAgK2NvbnN0IF9GX1NFVExLNjQgPSA2DQogICAgK2NvbnN0IF9fUE9TSVhfUEFUSF9N
QVggPSAyNTYNCiAgICArY29uc3QgX0lOX0NMQVNTQV9OU0hJRlQgPSAyNA0KICAgICtjb25zdCBf
UEFDS0VUX1RJTUVTVEFNUCA9IDE3DQogICAgK2NvbnN0IF9fX1BPU0lYX0ZBRFZfRE9OVE5FRUQg
PSA0DQogICAgK2NvbnN0IF9JUFBST1RPX01UUCA9IDkyDQogICAgK3R5cGUgX2lmYWNlIHN0cnVj
dCB7fQ0KICAgICt0eXBlIF9fX2xvY2FsZV9kYXRhIHN0cnVjdCB7fQ0KICAgICtjb25zdCBFTVVM
VElIT1AgPSBFcnJubyhfRU1VTFRJSE9QKQ0KICAgICtjb25zdCBFVU5BVENIID0gRXJybm8oX0VV
TkFUQ0gpDQogICAgK2NvbnN0IEVBRk5PU1VQUE9SVCA9IEVycm5vKF9FQUZOT1NVUFBPUlQpDQog
ICAgK2NvbnN0IEVSRU1DSEcgPSBFcnJubyhfRVJFTUNIRykNCiAgICArY29uc3QgRUFDQ0VTID0g
RXJybm8oX0VBQ0NFUykNCiAgICArY29uc3QgRURFU1RBRERSUkVRID0gRXJybm8oX0VERVNUQURE
UlJFUSkNCiAgICArY29uc3QgRUlMU0VRID0gRXJybm8oX0VJTFNFUSkNCiAgICArY29uc3QgRVNQ
SVBFID0gRXJybm8oX0VTUElQRSkNCiAgICArY29uc3QgRU1MSU5LID0gRXJybm8oX0VNTElOSykN
CiAgICArY29uc3QgRU9XTkVSREVBRCA9IEVycm5vKF9FT1dORVJERUFEKQ0KICAgICtjb25zdCBF
Tk9UVFkgPSBFcnJubyhfRU5PVFRZKQ0KICAgICtjb25zdCBFQkFERSA9IEVycm5vKF9FQkFERSkN
CiAgICArY29uc3QgRUJBREYgPSBFcnJubyhfRUJBREYpDQogICAgK2NvbnN0IEVCQURSID0gRXJy
bm8oX0VCQURSKQ0KICAgICtjb25zdCBFQURWID0gRXJybm8oX0VBRFYpDQogICAgK2NvbnN0IEVS
QU5HRSA9IEVycm5vKF9FUkFOR0UpDQogICAgK2NvbnN0IEVDQU5DRUxFRCA9IEVycm5vKF9FQ0FO
Q0VMRUQpDQogICAgK2NvbnN0IEVUWFRCU1kgPSBFcnJubyhfRVRYVEJTWSkNCiAgICArY29uc3Qg
RU5PTUVNID0gRXJybm8oX0VOT01FTSkNCiAgICArY29uc3QgRUlOUFJPR1JFU1MgPSBFcnJubyhf
RUlOUFJPR1JFU1MpDQogICAgK2NvbnN0IEVOT1RCTEsgPSBFcnJubyhfRU5PVEJMSykNCiAgICAr
Y29uc3QgRVBST1RPVFlQRSA9IEVycm5vKF9FUFJPVE9UWVBFKQ0KICAgICtjb25zdCBFUkVTVEFS
VCA9IEVycm5vKF9FUkVTVEFSVCkNCiAgICArY29uc3QgRUlTTkFNID0gRXJybm8oX0VJU05BTSkN
CiAgICArY29uc3QgRU5PTVNHID0gRXJybm8oX0VOT01TRykNCiAgICArY29uc3QgRUFMUkVBRFkg
PSBFcnJubyhfRUFMUkVBRFkpDQogICAgK2NvbnN0IEVUSU1FRE9VVCA9IEVycm5vKF9FVElNRURP
VVQpDQogICAgK2NvbnN0IEVOT0RBVEEgPSBFcnJubyhfRU5PREFUQSkNCiAgICArY29uc3QgRUlO
VFIgPSBFcnJubyhfRUlOVFIpDQogICAgK2NvbnN0IEVOT0xJTksgPSBFcnJubyhfRU5PTElOSykN
CiAgICArY29uc3QgRVBFUk0gPSBFcnJubyhfRVBFUk0pDQogICAgK2NvbnN0IEVMT09QID0gRXJy
bm8oX0VMT09QKQ0KICAgICtjb25zdCBFTkVURE9XTiA9IEVycm5vKF9FTkVURE9XTikNCiAgICAr
Y29uc3QgRVNUQUxFID0gRXJybm8oX0VTVEFMRSkNCiAgICArY29uc3QgRU5PU1IgPSBFcnJubyhf
RU5PU1IpDQogICAgK2NvbnN0IEVMTlJORyA9IEVycm5vKF9FTE5STkcpDQogICAgK2NvbnN0IEVQ
SVBFID0gRXJybm8oX0VQSVBFKQ0KICAgICtjb25zdCBFQ0hJTEQgPSBFcnJubyhfRUNISUxEKQ0K
ICAgICtjb25zdCBFQkFETVNHID0gRXJybm8oX0VCQURNU0cpDQogICAgK2NvbnN0IEVCRk9OVCA9
IEVycm5vKF9FQkZPTlQpDQogICAgK2NvbnN0IEVSRU1PVEUgPSBFcnJubyhfRVJFTU9URSkNCiAg
ICArY29uc3QgRVRPT01BTllSRUZTID0gRXJybm8oX0VUT09NQU5ZUkVGUykNCiAgICArY29uc3Qg
RU5PTkVUID0gRXJybm8oX0VOT05FVCkNCiAgICArY29uc3QgRVhGVUxMID0gRXJybm8oX0VYRlVM
TCkNCiAgICArY29uc3QgRU5PVEVNUFRZID0gRXJybm8oX0VOT1RFTVBUWSkNCiAgICArY29uc3Qg
RU5PVE5BTSA9IEVycm5vKF9FTk9UTkFNKQ0KICAgICtjb25zdCBFS0VZUkVKRUNURUQgPSBFcnJu
byhfRUtFWVJFSkVDVEVEKQ0KICAgICtjb25zdCBFTk9DU0kgPSBFcnJubyhfRU5PQ1NJKQ0KICAg
ICtjb25zdCBFQUREUklOVVNFID0gRXJybm8oX0VBRERSSU5VU0UpDQogICAgK2NvbnN0IEVORVRS
RVNFVCA9IEVycm5vKF9FTkVUUkVTRVQpDQogICAgK2NvbnN0IEVJU0RJUiA9IEVycm5vKF9FSVNE
SVIpDQogICAgK2NvbnN0IEVJRFJNID0gRXJybm8oX0VJRFJNKQ0KICAgICtjb25zdCBFTk9UU09D
SyA9IEVycm5vKF9FTk9UU09DSykNCiAgICArY29uc3QgRUhPU1RVTlJFQUNIID0gRXJybm8oX0VI
T1NUVU5SRUFDSCkNCiAgICArY29uc3QgRUJBREZEID0gRXJybm8oX0VCQURGRCkNCiAgICArY29u
c3QgRUwzSExUID0gRXJybm8oX0VMM0hMVCkNCiAgICArY29uc3QgRUwySExUID0gRXJybm8oX0VM
MkhMVCkNCiAgICArY29uc3QgRU5PS0VZID0gRXJybm8oX0VOT0tFWSkNCiAgICArY29uc3QgRUlO
VkFMID0gRXJybm8oX0VJTlZBTCkNCiAgICArY29uc3QgRVNIVVRET1dOID0gRXJybm8oX0VTSFVU
RE9XTikNCiAgICArY29uc3QgRU5PTUVESVVNID0gRXJybm8oX0VOT01FRElVTSkNCiAgICArY29u
c3QgRUxJQlNDTiA9IEVycm5vKF9FTElCU0NOKQ0KICAgICtjb25zdCBFTkFWQUlMID0gRXJybm8o
X0VOQVZBSUwpDQogICAgK2NvbnN0IEVPVkVSRkxPVyA9IEVycm5vKF9FT1ZFUkZMT1cpDQogICAg
K2NvbnN0IEVVQ0xFQU4gPSBFcnJubyhfRVVDTEVBTikNCiAgICArY29uc3QgRUJVU1kgPSBFcnJu
byhfRUJVU1kpDQogICAgK2NvbnN0IEVQUk9UTyA9IEVycm5vKF9FUFJPVE8pDQogICAgK2NvbnN0
IEVOT0RFViA9IEVycm5vKF9FTk9ERVYpDQogICAgK2NvbnN0IEVLRVlFWFBJUkVEID0gRXJybm8o
X0VLRVlFWFBJUkVEKQ0KICAgICtjb25zdCBFUk9GUyA9IEVycm5vKF9FUk9GUykNCiAgICArY29u
c3QgRUxJQkFDQyA9IEVycm5vKF9FTElCQUNDKQ0KICAgICtjb25zdCBFSFdQT0lTT04gPSBFcnJu
byhfRUhXUE9JU09OKQ0KICAgICtjb25zdCBFMkJJRyA9IEVycm5vKF9FMkJJRykNCiAgICArY29u
c3QgRURFQURMSyA9IEVycm5vKF9FREVBRExLKQ0KICAgICtjb25zdCBFTDNSU1QgPSBFcnJubyhf
RUwzUlNUKQ0KICAgICtjb25zdCBFTk9URElSID0gRXJybm8oX0VOT1RESVIpDQogICAgK2NvbnN0
IEVDT05OUkVTRVQgPSBFcnJubyhfRUNPTk5SRVNFVCkNCiAgICArY29uc3QgRU5YSU8gPSBFcnJu
byhfRU5YSU8pDQogICAgK2NvbnN0IEVCQURSUUMgPSBFcnJubyhfRUJBRFJRQykNCiAgICArY29u
c3QgRU5PU1RSID0gRXJybm8oX0VOT1NUUikNCiAgICArY29uc3QgRU5BTUVUT09MT05HID0gRXJy
bm8oX0VOQU1FVE9PTE9ORykNCiAgICArY29uc3QgRVNPQ0tUTk9TVVBQT1JUID0gRXJybm8oX0VT
T0NLVE5PU1VQUE9SVCkNCiAgICArY29uc3QgRUxJQkVYRUMgPSBFcnJubyhfRUxJQkVYRUMpDQog
ICAgK2NvbnN0IEVET1RET1QgPSBFcnJubyhfRURPVERPVCkNCiAgICArY29uc3QgRUFERFJOT1RB
VkFJTCA9IEVycm5vKF9FQUREUk5PVEFWQUlMKQ0KICAgICtjb25zdCBFVElNRSA9IEVycm5vKF9F
VElNRSkNCiAgICArY29uc3QgRVBST1RPTk9TVVBQT1JUID0gRXJybm8oX0VQUk9UT05PU1VQUE9S
VCkNCiAgICArY29uc3QgRU5PVFJFQ09WRVJBQkxFID0gRXJybm8oX0VOT1RSRUNPVkVSQUJMRSkN
CiAgICArY29uc3QgRUlPID0gRXJybm8oX0VJTykNCiAgICArY29uc3QgRU5FVFVOUkVBQ0ggPSBF
cnJubyhfRU5FVFVOUkVBQ0gpDQogICAgK2NvbnN0IEVYREVWID0gRXJybm8oX0VYREVWKQ0KICAg
ICtjb25zdCBFRFFVT1QgPSBFcnJubyhfRURRVU9UKQ0KICAgICtjb25zdCBFUkVNT1RFSU8gPSBF
cnJubyhfRVJFTU9URUlPKQ0KICAgICtjb25zdCBFTk9TUEMgPSBFcnJubyhfRU5PU1BDKQ0KICAg
ICtjb25zdCBFTk9FWEVDID0gRXJybm8oX0VOT0VYRUMpDQogICAgK2NvbnN0IEVNU0dTSVpFID0g
RXJybm8oX0VNU0dTSVpFKQ0KICAgICtjb25zdCBFRE9NID0gRXJybm8oX0VET00pDQogICAgK2Nv
bnN0IEVGQklHID0gRXJybm8oX0VGQklHKQ0KICAgICtjb25zdCBFU1JDSCA9IEVycm5vKF9FU1JD
SCkNCiAgICArY29uc3QgRUNIUk5HID0gRXJybm8oX0VDSFJORykNCiAgICArY29uc3QgRUhPU1RE
T1dOID0gRXJybm8oX0VIT1NURE9XTikNCiAgICArY29uc3QgRU5PTENLID0gRXJybm8oX0VOT0xD
SykNCiAgICArY29uc3QgRU5GSUxFID0gRXJybm8oX0VORklMRSkNCiAgICArY29uc3QgRU5PU1lT
ID0gRXJybm8oX0VOT1NZUykNCiAgICArY29uc3QgRU5PVENPTk4gPSBFcnJubyhfRU5PVENPTk4p
DQogICAgK2NvbnN0IEVQRk5PU1VQUE9SVCA9IEVycm5vKF9FUEZOT1NVUFBPUlQpDQogICAgK2Nv
bnN0IEVOT1RTVVAgPSBFcnJubyhfRU5PVFNVUCkNCiAgICArY29uc3QgRVNSTU5UID0gRXJybm8o
X0VTUk1OVCkNCiAgICArY29uc3QgRURFQURMT0NLID0gRXJybm8oX0VERUFETE9DSykNCiAgICAr
Y29uc3QgRUNPTk5BQk9SVEVEID0gRXJybm8oX0VDT05OQUJPUlRFRCkNCiAgICArY29uc3QgRU5P
QU5PID0gRXJybm8oX0VOT0FOTykNCiAgICArY29uc3QgRUlTQ09OTiA9IEVycm5vKF9FSVNDT05O
KQ0KICAgICtjb25zdCBFVVNFUlMgPSBFcnJubyhfRVVTRVJTKQ0KICAgICtjb25zdCBFTk9QUk9U
T09QVCA9IEVycm5vKF9FTk9QUk9UT09QVCkNCiAgICArY29uc3QgRUNPTU0gPSBFcnJubyhfRUNP
TU0pDQogICAgK2NvbnN0IEVNRklMRSA9IEVycm5vKF9FTUZJTEUpDQogICAgK2NvbnN0IEVSRktJ
TEwgPSBFcnJubyhfRVJGS0lMTCkNCiAgICArY29uc3QgRU5PQlVGUyA9IEVycm5vKF9FTk9CVUZT
KQ0KICAgICtjb25zdCBFRkFVTFQgPSBFcnJubyhfRUZBVUxUKQ0KICAgICtjb25zdCBFV09VTERC
TE9DSyA9IEVycm5vKF9FV09VTERCTE9DSykNCiAgICArY29uc3QgRUxJQkJBRCA9IEVycm5vKF9F
TElCQkFEKQ0KICAgICtjb25zdCBFU1RSUElQRSA9IEVycm5vKF9FU1RSUElQRSkNCiAgICArY29u
c3QgRUNPTk5SRUZVU0VEID0gRXJybm8oX0VDT05OUkVGVVNFRCkNCiAgICArY29uc3QgRUFHQUlO
ID0gRXJybm8oX0VBR0FJTikNCiAgICArY29uc3QgRUxJQk1BWCA9IEVycm5vKF9FTElCTUFYKQ0K
ICAgICtjb25zdCBFRVhJU1QgPSBFcnJubyhfRUVYSVNUKQ0KICAgICtjb25zdCBFTDJOU1lOQyA9
IEVycm5vKF9FTDJOU1lOQykNCiAgICArY29uc3QgRU5PRU5UID0gRXJybm8oX0VOT0VOVCkNCiAg
ICArY29uc3QgRU5PUEtHID0gRXJybm8oX0VOT1BLRykNCiAgICArY29uc3QgRUJBRFNMVCA9IEVy
cm5vKF9FQkFEU0xUKQ0KICAgICtjb25zdCBFS0VZUkVWT0tFRCA9IEVycm5vKF9FS0VZUkVWT0tF
RCkNCiAgICArY29uc3QgRU5PVFVOSVEgPSBFcnJubyhfRU5PVFVOSVEpDQogICAgK2NvbnN0IEVP
UE5PVFNVUFAgPSBFcnJubyhfRU9QTk9UU1VQUCkNCiAgICArY29uc3QgRU1FRElVTVRZUEUgPSBF
cnJubyhfRU1FRElVTVRZUEUpDQogICAgK2NvbnN0IE9fQVBQRU5EID0gX09fQVBQRU5EDQogICAg
K2NvbnN0IEZfR0VUTEs2NCA9IF9GX0dFVExLNjQNCiAgICArY29uc3QgRkRfU0VUU0laRSA9IF9G
RF9TRVRTSVpFDQogICAgK2NvbnN0IEZfRVhMQ0sgPSBfRl9FWExDSw0KICAgICtjb25zdCBGX0FE
RF9TRUFMUyA9IF9GX0FERF9TRUFMUw0KICAgICtjb25zdCBGX1NFVFBJUEVfU1ogPSBfRl9TRVRQ
SVBFX1NaDQogICAgK2NvbnN0IE9fU1lOQyA9IF9PX1NZTkMNCiAgICArY29uc3QgRl9TRUFMX1NI
UklOSyA9IF9GX1NFQUxfU0hSSU5LDQogICAgK2NvbnN0IEZfV1JMQ0sgPSBfRl9XUkxDSw0KICAg
ICtjb25zdCBPX0RJUkVDVE9SWSA9IF9PX0RJUkVDVE9SWQ0KICAgICtjb25zdCBPX05PQVRJTUUg
PSBfT19OT0FUSU1FDQogICAgK2NvbnN0IEZfVUxPQ0sgPSBfRl9VTE9DSw0KICAgICtjb25zdCBG
X0dFVE9XTiA9IF9GX0dFVE9XTg0KICAgICtjb25zdCBGX0xPQ0sgPSBfRl9MT0NLDQogICAgK2Nv
bnN0IE9fQ0xPRVhFQyA9IF9PX0NMT0VYRUMNCiAgICArY29uc3QgT19OREVMQVkgPSBfT19OREVM
QVkNCiAgICArY29uc3QgT19ESVJFQ1QgPSBfT19ESVJFQ1QNCiAgICArY29uc3QgRl9HRVRTSUcg
PSBfRl9HRVRTSUcNCiAgICArY29uc3QgT19UTVBGSUxFID0gX09fVE1QRklMRQ0KICAgICtjb25z
dCBGX1JETENLID0gX0ZfUkRMQ0sNCiAgICArY29uc3QgT19SU1lOQyA9IF9PX1JTWU5DDQogICAg
K2NvbnN0IEZfU0hMQ0sgPSBfRl9TSExDSw0KICAgICtjb25zdCBPX1BBVEggPSBfT19QQVRIDQog
ICAgK2NvbnN0IE9fRFNZTkMgPSBfT19EU1lOQw0KICAgICtjb25zdCBPX05PRk9MTE9XID0gX09f
Tk9GT0xMT1cNCiAgICArY29uc3QgRl9PRkRfU0VUTEtXID0gX0ZfT0ZEX1NFVExLVw0KICAgICtj
b25zdCBPX1dST05MWSA9IF9PX1dST05MWQ0KICAgICtjb25zdCBPX05PTkJMT0NLID0gX09fTk9O
QkxPQ0sNCiAgICArY29uc3QgRl9HRVRfU0VBTFMgPSBfRl9HRVRfU0VBTFMNCiAgICArY29uc3Qg
Rl9TRUFMX1dSSVRFID0gX0ZfU0VBTF9XUklURQ0KICAgICtjb25zdCBPX0NSRUFUID0gX09fQ1JF
QVQNCiAgICArY29uc3QgRl9HRVRfRklMRV9SV19ISU5UID0gX0ZfR0VUX0ZJTEVfUldfSElOVA0K
ICAgICtjb25zdCBGX05PVElGWSA9IF9GX05PVElGWQ0KICAgICtjb25zdCBPX1JEV1IgPSBfT19S
RFdSDQogICAgK2NvbnN0IEZfU0VUX0ZJTEVfUldfSElOVCA9IF9GX1NFVF9GSUxFX1JXX0hJTlQN
CiAgICArY29uc3QgRl9TRVRfUldfSElOVCA9IF9GX1NFVF9SV19ISU5UDQogICAgK2NvbnN0IEZf
T1dORVJfUEdSUCA9IF9GX09XTkVSX1BHUlANCiAgICArY29uc3QgRl9EVVBGRCA9IF9GX0RVUEZE
DQogICAgK2NvbnN0IEZfU0VURkQgPSBfRl9TRVRGRA0KICAgICtjb25zdCBGX1NFVEZMID0gX0Zf
U0VURkwNCiAgICArY29uc3QgRl9HRVRMRUFTRSA9IF9GX0dFVExFQVNFDQogICAgK2NvbnN0IE9f
RVhDTCA9IF9PX0VYQ0wNCiAgICArY29uc3QgRl9PSyA9IF9GX09LDQogICAgK2NvbnN0IEZfR0VU
UElQRV9TWiA9IF9GX0dFVFBJUEVfU1oNCiAgICArY29uc3QgRl9TRUFMX0dST1cgPSBfRl9TRUFM
X0dST1cNCiAgICArY29uc3QgRl9URVNUID0gX0ZfVEVTVA0KICAgICtjb25zdCBGX1NFVExLID0g
X0ZfU0VUTEsNCiAgICArY29uc3QgRl9HRVRPV05fRVggPSBfRl9HRVRPV05fRVgNCiAgICArY29u
c3QgT19GU1lOQyA9IF9PX0ZTWU5DDQogICAgK2NvbnN0IE9fUkRPTkxZID0gX09fUkRPTkxZDQog
ICAgK2NvbnN0IEZfRFVQRkRfQ0xPRVhFQyA9IF9GX0RVUEZEX0NMT0VYRUMNCiAgICArY29uc3Qg
Rl9PRkRfU0VUTEsgPSBfRl9PRkRfU0VUTEsNCiAgICArY29uc3QgRl9HRVRGRCA9IF9GX0dFVEZE
DQogICAgK2NvbnN0IEZfR0VURkwgPSBfRl9HRVRGTA0KICAgICtjb25zdCBGX09XTkVSX1BJRCA9
IF9GX09XTkVSX1BJRA0KICAgICtjb25zdCBPX0xBUkdFRklMRSA9IF9PX0xBUkdFRklMRQ0KICAg
ICtjb25zdCBGX1NFVE9XTl9FWCA9IF9GX1NFVE9XTl9FWA0KICAgICtjb25zdCBGX0dFVExLID0g
X0ZfR0VUTEsNCiAgICArY29uc3QgRl9TRVRMS1cgPSBfRl9TRVRMS1cNCiAgICArY29uc3QgRl9P
V05FUl9HSUQgPSBfRl9PV05FUl9HSUQNCiAgICArY29uc3QgRkRfQ0xPRVhFQyA9IF9GRF9DTE9F
WEVDDQogICAgK2NvbnN0IEZfR0VUX1JXX0hJTlQgPSBfRl9HRVRfUldfSElOVA0KICAgICtjb25z
dCBPX05PQ1RUWSA9IF9PX05PQ1RUWQ0KICAgICtjb25zdCBGX09GRF9HRVRMSyA9IF9GX09GRF9H
RVRMSw0KICAgICtjb25zdCBGX1NFVExFQVNFID0gX0ZfU0VUTEVBU0UNCiAgICArY29uc3QgT19B
U1lOQyA9IF9PX0FTWU5DDQogICAgK2NvbnN0IEZfU0VUT1dOID0gX0ZfU0VUT1dODQogICAgK2Nv
bnN0IE9fVFJVTkMgPSBfT19UUlVOQw0KICAgICtjb25zdCBGX09XTkVSX1RJRCA9IF9GX09XTkVS
X1RJRA0KICAgICtjb25zdCBGX1VOTENLID0gX0ZfVU5MQ0sNCiAgICArY29uc3QgRl9TRVRTSUcg
PSBfRl9TRVRTSUcNCiAgICArY29uc3QgRl9TRUFMX1NFQUwgPSBfRl9TRUFMX1NFQUwNCiAgICAr
Y29uc3QgRl9UTE9DSyA9IF9GX1RMT0NLDQogICAgK2NvbnN0IE9fQUNDTU9ERSA9IF9PX0FDQ01P
REUNCiAgICArY29uc3QgRl9TRVRMS1c2NCA9IF9GX1NFVExLVzY0DQogICAgK2NvbnN0IEZfU0VU
TEs2NCA9IF9GX1NFVExLNjQNCiAgICArdHlwZSBGbG9ja190IHN0cnVjdCB7IFR5cGUgaW50MTY7
IFdoZW5jZSBpbnQxNjsgU3RhcnQgaW50NjQ7IExlbiBpbnQ2NDsgUGlkIGludDMyOyBHb2R1bXBf
MF9wYWQgWzRdYnl0ZTsgfQ0KICAgICtjb25zdCBTSUdJTEwgPSBTaWduYWwoX1NJR0lMTCkNCiAg
ICArY29uc3QgU0lHQ0xEID0gU2lnbmFsKF9TSUdDTEQpDQogICAgK2NvbnN0IFNJR0tJTEwgPSBT
aWduYWwoX1NJR0tJTEwpDQogICAgK2NvbnN0IFNJR1RTVFAgPSBTaWduYWwoX1NJR1RTVFApDQog
ICAgK2NvbnN0IFNJR0lPVCA9IFNpZ25hbChfU0lHSU9UKQ0KICAgICtjb25zdCBTSUdTRUdWID0g
U2lnbmFsKF9TSUdTRUdWKQ0KICAgICtjb25zdCBTSUdYQ1BVID0gU2lnbmFsKF9TSUdYQ1BVKQ0K
ICAgICtjb25zdCBTSUdJTlQgPSBTaWduYWwoX1NJR0lOVCkNCiAgICArY29uc3QgU0lHSU8gPSBT
aWduYWwoX1NJR0lPKQ0KICAgICtjb25zdCBTSUdCVVMgPSBTaWduYWwoX1NJR0JVUykNCiAgICAr
Y29uc3QgU0lHUElQRSA9IFNpZ25hbChfU0lHUElQRSkNCiAgICArY29uc3QgU0lHU1RLRkxUID0g
U2lnbmFsKF9TSUdTVEtGTFQpDQogICAgK2NvbnN0IFNJR1RSQVAgPSBTaWduYWwoX1NJR1RSQVAp
DQogICAgK2NvbnN0IFNJR1RFUk0gPSBTaWduYWwoX1NJR1RFUk0pDQogICAgK2NvbnN0IFNJR0ZQ
RSA9IFNpZ25hbChfU0lHRlBFKQ0KICAgICtjb25zdCBTSUdWVEFMUk0gPSBTaWduYWwoX1NJR1ZU
QUxSTSkNCiAgICArY29uc3QgU0lHUFdSID0gU2lnbmFsKF9TSUdQV1IpDQogICAgK2NvbnN0IFNJ
R1NUS1NaID0gU2lnbmFsKF9TSUdTVEtTWikNCiAgICArY29uc3QgU0lHVFRJTiA9IFNpZ25hbChf
U0lHVFRJTikNCiAgICArY29uc3QgU0lHVVNSMSA9IFNpZ25hbChfU0lHVVNSMSkNCiAgICArY29u
c3QgU0lHVVNSMiA9IFNpZ25hbChfU0lHVVNSMikNCiAgICArY29uc3QgU0lHQUxSTSA9IFNpZ25h
bChfU0lHQUxSTSkNCiAgICArY29uc3QgU0lHVFRPVSA9IFNpZ25hbChfU0lHVFRPVSkNCiAgICAr
Y29uc3QgU0lHUFJPRiA9IFNpZ25hbChfU0lHUFJPRikNCiAgICArY29uc3QgU0lHQ09OVCA9IFNp
Z25hbChfU0lHQ09OVCkNCiAgICArY29uc3QgU0lHQUJSVCA9IFNpZ25hbChfU0lHQUJSVCkNCiAg
ICArY29uc3QgU0lHVVJHID0gU2lnbmFsKF9TSUdVUkcpDQogICAgK2NvbnN0IFNJR0hVUCA9IFNp
Z25hbChfU0lHSFVQKQ0KICAgICtjb25zdCBTSUdXSU5DSCA9IFNpZ25hbChfU0lHV0lOQ0gpDQog
ICAgK2NvbnN0IFNJR0NITEQgPSBTaWduYWwoX1NJR0NITEQpDQogICAgK2NvbnN0IFNJR1NZUyA9
IFNpZ25hbChfU0lHU1lTKQ0KICAgICtjb25zdCBTSUdYRlNaID0gU2lnbmFsKF9TSUdYRlNaKQ0K
ICAgICtjb25zdCBTSUdTVE9QID0gU2lnbmFsKF9TSUdTVE9QKQ0KICAgICtjb25zdCBTSUdRVUlU
ID0gU2lnbmFsKF9TSUdRVUlUKQ0KICAgICtjb25zdCBTSUdQT0xMID0gU2lnbmFsKF9TSUdQT0xM
KQ0KICAgICtjb25zdCBTWVNfVVNFTElCID0gX1NZU191c2VsaWINCiAgICArY29uc3QgU1lTX0ZU
UlVOQ0FURSA9IF9TWVNfZnRydW5jYXRlDQogICAgK2NvbnN0IFNZU19NS05PREFUID0gX1NZU19t
a25vZGF0DQogICAgK2NvbnN0IFNZU19FUE9MTF9DVExfT0xEID0gX1NZU19lcG9sbF9jdGxfb2xk
DQogICAgK2NvbnN0IFNZU19NVU5MT0NLID0gX1NZU19tdW5sb2NrDQogICAgK2NvbnN0IFNZU19T
VEFURlMgPSBfU1lTX3N0YXRmcw0KICAgICtjb25zdCBTWVNfU1dBUE9GRiA9IF9TWVNfc3dhcG9m
Zg0KICAgICtjb25zdCBTWVNfR0VUU09DS09QVCA9IF9TWVNfZ2V0c29ja29wdA0KICAgICtjb25z
dCBTWVNfVU1PVU5UMiA9IF9TWVNfdW1vdW50Mg0KICAgICtjb25zdCBTWVNfRlJFTU9WRVhBVFRS
ID0gX1NZU19mcmVtb3ZleGF0dHINCiAgICArY29uc3QgU1lTX0ZTRVRYQVRUUiA9IF9TWVNfZnNl
dHhhdHRyDQogICAgK2NvbnN0IFNZU19QUkNUTCA9IF9TWVNfcHJjdGwNCiAgICArY29uc3QgU1lT
X0VYRUNWRSA9IF9TWVNfZXhlY3ZlDQogICAgK2NvbnN0IFNZU19TRVRSRVNVSUQgPSBfU1lTX3Nl
dHJlc3VpZA0KICAgICtjb25zdCBTWVNfVEVFID0gX1NZU190ZWUNCiAgICArY29uc3QgU1lTX0xJ
U1RFTiA9IF9TWVNfbGlzdGVuDQogICAgK2NvbnN0IFNZU19HRVRJVElNRVIgPSBfU1lTX2dldGl0
aW1lcg0KICAgICtjb25zdCBTWVNfR0VUUEdSUCA9IF9TWVNfZ2V0cGdycA0KICAgICtjb25zdCBT
WVNfUEtFWV9GUkVFID0gX1NZU19wa2V5X2ZyZWUNCiAgICArY29uc3QgU1lTX0dFVERFTlRTNjQg
PSBfU1lTX2dldGRlbnRzNjQNCiAgICArY29uc3QgU1lTX0dFVFBSSU9SSVRZID0gX1NZU19nZXRw
cmlvcml0eQ0KICAgICtjb25zdCBTWVNfU0VUX1JPQlVTVF9MSVNUID0gX1NZU19zZXRfcm9idXN0
X2xpc3QNCiAgICArY29uc3QgU1lTX1BST0NFU1NfVk1fUkVBRFYgPSBfU1lTX3Byb2Nlc3Nfdm1f
cmVhZHYNCiAgICArY29uc3QgU1lTX1JUX1NJR1NVU1BFTkQgPSBfU1lTX3J0X3NpZ3N1c3BlbmQN
CiAgICArY29uc3QgU1lTX0dFVFBFRVJOQU1FID0gX1NZU19nZXRwZWVybmFtZQ0KICAgICtjb25z
dCBTWVNfR0VURUdJRCA9IF9TWVNfZ2V0ZWdpZA0KICAgICtjb25zdCBTWVNfR0VUU0lEID0gX1NZ
U19nZXRzaWQNCiAgICArY29uc3QgU1lTX1JFQURMSU5LQVQgPSBfU1lTX3JlYWRsaW5rYXQNCiAg
ICArY29uc3QgU1lTX01TR0NUTCA9IF9TWVNfbXNnY3RsDQogICAgK2NvbnN0IFNZU19TSUdOQUxG
RDQgPSBfU1lTX3NpZ25hbGZkNA0KICAgICtjb25zdCBTWVNfQUNDRVNTID0gX1NZU19hY2Nlc3MN
CiAgICArY29uc3QgU1lTX0dFVF9ST0JVU1RfTElTVCA9IF9TWVNfZ2V0X3JvYnVzdF9saXN0DQog
ICAgK2NvbnN0IFNZU19NUV9OT1RJRlkgPSBfU1lTX21xX25vdGlmeQ0KICAgICtjb25zdCBTWVNf
Q1JFQVRFX01PRFVMRSA9IF9TWVNfY3JlYXRlX21vZHVsZQ0KICAgICtjb25zdCBTWVNfUElWT1Rf
Uk9PVCA9IF9TWVNfcGl2b3Rfcm9vdA0KICAgICtjb25zdCBTWVNfSU9QUklPX1NFVCA9IF9TWVNf
aW9wcmlvX3NldA0KICAgICtjb25zdCBTWVNfVU1BU0sgPSBfU1lTX3VtYXNrDQogICAgK2NvbnN0
IFNZU19SRUNWTVNHID0gX1NZU19yZWN2bXNnDQogICAgK2NvbnN0IFNZU19QUE9MTCA9IF9TWVNf
cHBvbGwNCiAgICArY29uc3QgU1lTX0xTRUVLID0gX1NZU19sc2Vlaw0KICAgICtjb25zdCBTWVNf
UFdSSVRFVjIgPSBfU1lTX3B3cml0ZXYyDQogICAgK2NvbnN0IFNZU19QUkVBRDY0ID0gX1NZU19w
cmVhZDY0DQogICAgK2NvbnN0IFNZU19TRU1DVEwgPSBfU1lTX3NlbWN0bA0KICAgICtjb25zdCBT
WVNfRVBPTExfQ1JFQVRFMSA9IF9TWVNfZXBvbGxfY3JlYXRlMQ0KICAgICtjb25zdCBTWVNfUlRf
U0lHUEVORElORyA9IF9TWVNfcnRfc2lncGVuZGluZw0KICAgICtjb25zdCBTWVNfUkVOQU1FQVQy
ID0gX1NZU19yZW5hbWVhdDINCiAgICArY29uc3QgU1lTX0tFWEVDX0ZJTEVfTE9BRCA9IF9TWVNf
a2V4ZWNfZmlsZV9sb2FkDQogICAgK2NvbnN0IFNZU19FUE9MTF9QV0FJVCA9IF9TWVNfZXBvbGxf
cHdhaXQNCiAgICArY29uc3QgU1lTX1RJTUVSX0RFTEVURSA9IF9TWVNfdGltZXJfZGVsZXRlDQog
ICAgK2NvbnN0IFNZU19TRVRfVElEX0FERFJFU1MgPSBfU1lTX3NldF90aWRfYWRkcmVzcw0KICAg
ICtjb25zdCBTWVNfR0VUUkVTVUlEID0gX1NZU19nZXRyZXN1aWQNCiAgICArY29uc3QgU1lTX1ND
SEVEX1lJRUxEID0gX1NZU19zY2hlZF95aWVsZA0KICAgICtjb25zdCBTWVNfQURKVElNRVggPSBf
U1lTX2FkanRpbWV4DQogICAgK2NvbnN0IFNZU19QV1JJVEU2NCA9IF9TWVNfcHdyaXRlNjQNCiAg
ICArY29uc3QgU1lTX1NFVElUSU1FUiA9IF9TWVNfc2V0aXRpbWVyDQogICAgK2NvbnN0IFNZU19N
UV9PUEVOID0gX1NZU19tcV9vcGVuDQogICAgK2NvbnN0IFNZU19DTE9DS19HRVRSRVMgPSBfU1lT
X2Nsb2NrX2dldHJlcw0KICAgICtjb25zdCBTWVNfSU9fUEdFVEVWRU5UUyA9IF9TWVNfaW9fcGdl
dGV2ZW50cw0KICAgICtjb25zdCBTWVNfTVNHUkNWID0gX1NZU19tc2dyY3YNCiAgICArY29uc3Qg
U1lTX0VQT0xMX0NSRUFURSA9IF9TWVNfZXBvbGxfY3JlYXRlDQogICAgK2NvbnN0IFNZU19HRVRE
RU5UUyA9IF9TWVNfZ2V0ZGVudHMNCiAgICArY29uc3QgU1lTX0dFVFVJRCA9IF9TWVNfZ2V0dWlk
DQogICAgK2NvbnN0IFNZU19XQUlUNCA9IF9TWVNfd2FpdDQNCiAgICArY29uc3QgU1lTX05BTUVf
VE9fSEFORExFX0FUID0gX1NZU19uYW1lX3RvX2hhbmRsZV9hdA0KICAgICtjb25zdCBTWVNfRVBP
TExfV0FJVF9PTEQgPSBfU1lTX2Vwb2xsX3dhaXRfb2xkDQogICAgK2NvbnN0IFNZU19TWVNGUyA9
IF9TWVNfc3lzZnMNCiAgICArY29uc3QgU1lTX1NFTUdFVCA9IF9TWVNfc2VtZ2V0DQogICAgK2Nv
bnN0IFNZU19QS0VZX0FMTE9DID0gX1NZU19wa2V5X2FsbG9jDQogICAgK2NvbnN0IFNZU19QRVJT
T05BTElUWSA9IF9TWVNfcGVyc29uYWxpdHkNCiAgICArY29uc3QgU1lTX1BSRUFEViA9IF9TWVNf
cHJlYWR2DQogICAgK2NvbnN0IFNZU19JT1BSSU9fR0VUID0gX1NZU19pb3ByaW9fZ2V0DQogICAg
K2NvbnN0IFNZU19JTklUX01PRFVMRSA9IF9TWVNfaW5pdF9tb2R1bGUNCiAgICArY29uc3QgU1lT
X0xHRVRYQVRUUiA9IF9TWVNfbGdldHhhdHRyDQogICAgK2NvbnN0IFNZU19STURJUiA9IF9TWVNf
cm1kaXINCiAgICArY29uc3QgU1lTX1NFVFJFU0dJRCA9IF9TWVNfc2V0cmVzZ2lkDQogICAgK2Nv
bnN0IFNZU19RVUVSWV9NT0RVTEUgPSBfU1lTX3F1ZXJ5X21vZHVsZQ0KICAgICtjb25zdCBTWVNf
VElNRVJfR0VUT1ZFUlJVTiA9IF9TWVNfdGltZXJfZ2V0b3ZlcnJ1bg0KICAgICtjb25zdCBTWVNf
RlNZTkMgPSBfU1lTX2ZzeW5jDQogICAgK2NvbnN0IFNZU19GQU5PVElGWV9NQVJLID0gX1NZU19m
YW5vdGlmeV9tYXJrDQogICAgK2NvbnN0IFNZU19HRVRUSU1FT0ZEQVkgPSBfU1lTX2dldHRpbWVv
ZmRheQ0KICAgICtjb25zdCBTWVNfU1lOQ19GSUxFX1JBTkdFID0gX1NZU19zeW5jX2ZpbGVfcmFu
Z2UNCiAgICArY29uc3QgU1lTX1VTRVJGQVVMVEZEID0gX1NZU191c2VyZmF1bHRmZA0KICAgICtj
b25zdCBTWVNfTUlHUkFURV9QQUdFUyA9IF9TWVNfbWlncmF0ZV9wYWdlcw0KICAgICtjb25zdCBT
WVNfU1BMSUNFID0gX1NZU19zcGxpY2UNCiAgICArY29uc3QgU1lTX01MT0NLQUxMID0gX1NZU19t
bG9ja2FsbA0KICAgICtjb25zdCBTWVNfU0VUX1RIUkVBRF9BUkVBID0gX1NZU19zZXRfdGhyZWFk
X2FyZWENCiAgICArY29uc3QgU1lTX0NPUFlfRklMRV9SQU5HRSA9IF9TWVNfY29weV9maWxlX3Jh
bmdlDQogICAgK2NvbnN0IFNZU19PUEVOX0JZX0hBTkRMRV9BVCA9IF9TWVNfb3Blbl9ieV9oYW5k
bGVfYXQNCiAgICArY29uc3QgU1lTX01BRFZJU0UgPSBfU1lTX21hZHZpc2UNCiAgICArY29uc3Qg
U1lTX0lPX1NFVFVQID0gX1NZU19pb19zZXR1cA0KICAgICtjb25zdCBTWVNfS0VZQ1RMID0gX1NZ
U19rZXljdGwNCiAgICArY29uc3QgU1lTX1NFVEdJRCA9IF9TWVNfc2V0Z2lkDQogICAgK2NvbnN0
IFNZU19GQUNDRVNTQVQgPSBfU1lTX2ZhY2Nlc3NhdA0KICAgICtjb25zdCBTWVNfRkNITU9EQVQg
PSBfU1lTX2ZjaG1vZGF0DQogICAgK2NvbnN0IFNZU19DTE9DS19TRVRUSU1FID0gX1NZU19jbG9j
a19zZXR0aW1lDQogICAgK2NvbnN0IFNZU19HRVRfVEhSRUFEX0FSRUEgPSBfU1lTX2dldF90aHJl
YWRfYXJlYQ0KICAgICtjb25zdCBTWVNfTkVXRlNUQVRBVCA9IF9TWVNfbmV3ZnN0YXRhdA0KICAg
ICtjb25zdCBTWVNfU0NIRURfU0VUQUZGSU5JVFkgPSBfU1lTX3NjaGVkX3NldGFmZmluaXR5DQog
ICAgK2NvbnN0IFNZU19QSVBFMiA9IF9TWVNfcGlwZTINCiAgICArY29uc3QgU1lTX0JQRiA9IF9T
WVNfYnBmDQogICAgK2NvbnN0IFNZU19DSE1PRCA9IF9TWVNfY2htb2QNCiAgICArY29uc3QgU1lT
X0VWRU5URkQyID0gX1NZU19ldmVudGZkMg0KICAgICtjb25zdCBTWVNfQ0xPQ0tfR0VUVElNRSA9
IF9TWVNfY2xvY2tfZ2V0dGltZQ0KICAgICtjb25zdCBTWVNfQ0xPU0UgPSBfU1lTX2Nsb3NlDQog
ICAgK2NvbnN0IFNZU19CUksgPSBfU1lTX2Jyaw0KICAgICtjb25zdCBTWVNfVk1TUExJQ0UgPSBf
U1lTX3Ztc3BsaWNlDQogICAgK2NvbnN0IFNZU19FWEVDVkVBVCA9IF9TWVNfZXhlY3ZlYXQNCiAg
ICArY29uc3QgU1lTX01TWU5DID0gX1NZU19tc3luYw0KICAgICtjb25zdCBTWVNfTFNUQVQgPSBf
U1lTX2xzdGF0DQogICAgK2NvbnN0IFNZU19BTEFSTSA9IF9TWVNfYWxhcm0NCiAgICArY29uc3Qg
U1lTX0NIRElSID0gX1NZU19jaGRpcg0KICAgICtjb25zdCBTWVNfQ0FQU0VUID0gX1NZU19jYXBz
ZXQNCiAgICArY29uc3QgU1lTX0ZJTklUX01PRFVMRSA9IF9TWVNfZmluaXRfbW9kdWxlDQogICAg
K2NvbnN0IFNZU19SVF9TSUdQUk9DTUFTSyA9IF9TWVNfcnRfc2lncHJvY21hc2sNCiAgICArY29u
c3QgU1lTX1NJR05BTEZEID0gX1NZU19zaWduYWxmZA0KICAgICtjb25zdCBTWVNfRlVUSU1FU0FU
ID0gX1NZU19mdXRpbWVzYXQNCiAgICArY29uc3QgU1lTX0dFVFNPQ0tOQU1FID0gX1NZU19nZXRz
b2NrbmFtZQ0KICAgICtjb25zdCBTWVNfU0NIRURfR0VUUEFSQU0gPSBfU1lTX3NjaGVkX2dldHBh
cmFtDQogICAgK2NvbnN0IFNZU19TRVRfTUVNUE9MSUNZID0gX1NZU19zZXRfbWVtcG9saWN5DQog
ICAgK2NvbnN0IFNZU19GREFUQVNZTkMgPSBfU1lTX2ZkYXRhc3luYw0KICAgICtjb25zdCBTWVNf
UFJMSU1JVDY0ID0gX1NZU19wcmxpbWl0NjQNCiAgICArY29uc3QgU1lTX1RJTUVSRkRfU0VUVElN
RSA9IF9TWVNfdGltZXJmZF9zZXR0aW1lDQogICAgK2NvbnN0IFNZU19TV0FQT04gPSBfU1lTX3N3
YXBvbg0KICAgICtjb25zdCBTWVNfUlRfU0lHUVVFVUVJTkZPID0gX1NZU19ydF9zaWdxdWV1ZWlu
Zm8NCiAgICArY29uc3QgU1lTX0dFVFBNU0cgPSBfU1lTX2dldHBtc2cNCiAgICArY29uc3QgU1lT
X0FSQ0hfUFJDVEwgPSBfU1lTX2FyY2hfcHJjdGwNCiAgICArY29uc3QgU1lTX0ZDSE9XTiA9IF9T
WVNfZmNob3duDQogICAgK2NvbnN0IFNZU19TRUxFQ1QgPSBfU1lTX3NlbGVjdA0KICAgICtjb25z
dCBTWVNfQUNDRVBUNCA9IF9TWVNfYWNjZXB0NA0KICAgICtjb25zdCBTWVNfUFJPQ0VTU19WTV9X
UklURVYgPSBfU1lTX3Byb2Nlc3Nfdm1fd3JpdGV2DQogICAgK2NvbnN0IFNZU19RVU9UQUNUTCA9
IF9TWVNfcXVvdGFjdGwNCiAgICArY29uc3QgU1lTX01LRElSID0gX1NZU19ta2Rpcg0KICAgICtj
b25zdCBTWVNfUkVOQU1FID0gX1NZU19yZW5hbWUNCiAgICArY29uc3QgU1lTX1ZIQU5HVVAgPSBf
U1lTX3ZoYW5ndXANCiAgICArY29uc3QgU1lTX1RJTUVSRkRfR0VUVElNRSA9IF9TWVNfdGltZXJm
ZF9nZXR0aW1lDQogICAgK2NvbnN0IFNZU19HRVRDUFUgPSBfU1lTX2dldGNwdQ0KICAgICtjb25z
dCBTWVNfQUNDVCA9IF9TWVNfYWNjdA0KICAgICtjb25zdCBTWVNfU0VUUkVVSUQgPSBfU1lTX3Nl
dHJldWlkDQogICAgK2NvbnN0IFNZU19SU0VRID0gX1NZU19yc2VxDQogICAgK2NvbnN0IFNZU19G
U1RBVCA9IF9TWVNfZnN0YXQNCiAgICArY29uc3QgU1lTX1NZTUxJTksgPSBfU1lTX3N5bWxpbmsN
CiAgICArY29uc3QgU1lTX1NFTkRUTyA9IF9TWVNfc2VuZHRvDQogICAgK2NvbnN0IFNZU19TRUNV
UklUWSA9IF9TWVNfc2VjdXJpdHkNCiAgICArY29uc3QgU1lTX1NFVEhPU1ROQU1FID0gX1NZU19z
ZXRob3N0bmFtZQ0KICAgICtjb25zdCBTWVNfVlNFUlZFUiA9IF9TWVNfdnNlcnZlcg0KICAgICtj
b25zdCBTWVNfUkVBREFIRUFEID0gX1NZU19yZWFkYWhlYWQNCiAgICArY29uc3QgU1lTX1RJTUUg
PSBfU1lTX3RpbWUNCiAgICArY29uc3QgU1lTX1NZU0xPRyA9IF9TWVNfc3lzbG9nDQogICAgK2Nv
bnN0IFNZU19JT19HRVRFVkVOVFMgPSBfU1lTX2lvX2dldGV2ZW50cw0KICAgICtjb25zdCBTWVNf
V1JJVEUgPSBfU1lTX3dyaXRlDQogICAgK2NvbnN0IFNZU19GQU5PVElGWV9JTklUID0gX1NZU19m
YW5vdGlmeV9pbml0DQogICAgK2NvbnN0IFNZU19JTk9USUZZX0FERF9XQVRDSCA9IF9TWVNfaW5v
dGlmeV9hZGRfd2F0Y2gNCiAgICArY29uc3QgU1lTX0RVUCA9IF9TWVNfZHVwDQogICAgK2NvbnN0
IFNZU19TRUNDT01QID0gX1NZU19zZWNjb21wDQogICAgK2NvbnN0IFNZU19TQ0hFRF9HRVRTQ0hF
RFVMRVIgPSBfU1lTX3NjaGVkX2dldHNjaGVkdWxlcg0KICAgICtjb25zdCBTWVNfUEVSRl9FVkVO
VF9PUEVOID0gX1NZU19wZXJmX2V2ZW50X29wZW4NCiAgICArY29uc3QgU1lTX1NFVE5TID0gX1NZ
U19zZXRucw0KICAgICtjb25zdCBTWVNfR0VUQ1dEID0gX1NZU19nZXRjd2QNCiAgICArY29uc3Qg
U1lTX1JFQk9PVCA9IF9TWVNfcmVib290DQogICAgK2NvbnN0IFNZU19HRVRQSUQgPSBfU1lTX2dl
dHBpZA0KICAgICtjb25zdCBTWVNfQ0xPQ0tfTkFOT1NMRUVQID0gX1NZU19jbG9ja19uYW5vc2xl
ZXANCiAgICArY29uc3QgU1lTX01RX1VOTElOSyA9IF9TWVNfbXFfdW5saW5rDQogICAgK2NvbnN0
IFNZU19DSE9XTiA9IF9TWVNfY2hvd24NCiAgICArY29uc3QgU1lTX1JUX1RHU0lHUVVFVUVJTkZP
ID0gX1NZU19ydF90Z3NpZ3F1ZXVlaW5mbw0KICAgICtjb25zdCBTWVNfU1lOQyA9IF9TWVNfc3lu
Yw0KICAgICtjb25zdCBTWVNfQ0FQR0VUID0gX1NZU19jYXBnZXQNCiAgICArY29uc3QgU1lTX05N
TE4gPSBfU1lTX05NTE4NCiAgICArY29uc3QgU1lTX0JJTkQgPSBfU1lTX2JpbmQNCiAgICArY29u
c3QgU1lTX1VUSU1FID0gX1NZU191dGltZQ0KICAgICtjb25zdCBTWVNfUlRfU0lHQUNUSU9OID0g
X1NZU19ydF9zaWdhY3Rpb24NCiAgICArY29uc3QgU1lTX0VQT0xMX1dBSVQgPSBfU1lTX2Vwb2xs
X3dhaXQNCiAgICArY29uc3QgU1lTX0xTRVRYQVRUUiA9IF9TWVNfbHNldHhhdHRyDQogICAgK2Nv
bnN0IFNZU19TRVRTT0NLT1BUID0gX1NZU19zZXRzb2Nrb3B0DQogICAgK2NvbnN0IFNZU19HRVRS
RVNHSUQgPSBfU1lTX2dldHJlc2dpZA0KICAgICtjb25zdCBTWVNfVU5MSU5LQVQgPSBfU1lTX3Vu
bGlua2F0DQogICAgK2NvbnN0IFNZU19EVVAyID0gX1NZU19kdXAyDQogICAgK2NvbnN0IFNZU19E
VVAzID0gX1NZU19kdXAzDQogICAgK2NvbnN0IFNZU19MSU5LQVQgPSBfU1lTX2xpbmthdA0KICAg
ICtjb25zdCBTWVNfTU9ESUZZX0xEVCA9IF9TWVNfbW9kaWZ5X2xkdA0KICAgICtjb25zdCBTWVNf
TU9VTlQgPSBfU1lTX21vdW50DQogICAgK2NvbnN0IFNZU19HRVRHSUQgPSBfU1lTX2dldGdpZA0K
ICAgICtjb25zdCBTWVNfTVVOTE9DS0FMTCA9IF9TWVNfbXVubG9ja2FsbA0KICAgICtjb25zdCBT
WVNfTENIT1dOID0gX1NZU19sY2hvd24NCiAgICArY29uc3QgU1lTX0xJTksgPSBfU1lTX2xpbmsN
CiAgICArY29uc3QgU1lTX1NFTkRGSUxFID0gX1NZU19zZW5kZmlsZQ0KICAgICtjb25zdCBTWVNf
TVFfVElNRURSRUNFSVZFID0gX1NZU19tcV90aW1lZHJlY2VpdmUNCiAgICArY29uc3QgU1lTX1RH
S0lMTCA9IF9TWVNfdGdraWxsDQogICAgK2NvbnN0IFNZU19SRU5BTUVBVCA9IF9TWVNfcmVuYW1l
YXQNCiAgICArY29uc3QgU1lTX1JFQ1ZGUk9NID0gX1NZU19yZWN2ZnJvbQ0KICAgICtjb25zdCBT
WVNfTUtOT0QgPSBfU1lTX21rbm9kDQogICAgK2NvbnN0IFNZU19VVElNRVMgPSBfU1lTX3V0aW1l
cw0KICAgICtjb25zdCBTWVNfTElTVFhBVFRSID0gX1NZU19saXN0eGF0dHINCiAgICArY29uc3Qg
U1lTX1JUX1NJR1RJTUVEV0FJVCA9IF9TWVNfcnRfc2lndGltZWR3YWl0DQogICAgK2NvbnN0IFNZ
U19USU1FUyA9IF9TWVNfdGltZXMNCiAgICArY29uc3QgU1lTX1RJTUVSX1NFVFRJTUUgPSBfU1lT
X3RpbWVyX3NldHRpbWUNCiAgICArY29uc3QgU1lTX1BJUEUgPSBfU1lTX3BpcGUNCiAgICArY29u
c3QgU1lTX0dFVF9LRVJORUxfU1lNUyA9IF9TWVNfZ2V0X2tlcm5lbF9zeW1zDQogICAgK2NvbnN0
IFNZU19TRVRSTElNSVQgPSBfU1lTX3NldHJsaW1pdA0KICAgICtjb25zdCBTWVNfREVMRVRFX01P
RFVMRSA9IF9TWVNfZGVsZXRlX21vZHVsZQ0KICAgICtjb25zdCBTWVNfVElNRVJfR0VUVElNRSA9
IF9TWVNfdGltZXJfZ2V0dGltZQ0KICAgICtjb25zdCBTWVNfSU5PVElGWV9STV9XQVRDSCA9IF9T
WVNfaW5vdGlmeV9ybV93YXRjaA0KICAgICtjb25zdCBTWVNfU0hNQ1RMID0gX1NZU19zaG1jdGwN
CiAgICArY29uc3QgU1lTX1NDSEVEX0dFVEFGRklOSVRZID0gX1NZU19zY2hlZF9nZXRhZmZpbml0
eQ0KICAgICtjb25zdCBTWVNfUFdSSVRFViA9IF9TWVNfcHdyaXRldg0KICAgICtjb25zdCBTWVNf
U0VURlNVSUQgPSBfU1lTX3NldGZzdWlkDQogICAgK2NvbnN0IFNZU19GQ0hPV05BVCA9IF9TWVNf
ZmNob3duYXQNCiAgICArY29uc3QgU1lTX0ZDSE1PRCA9IF9TWVNfZmNobW9kDQogICAgK2NvbnN0
IFNZU19TRU1PUCA9IF9TWVNfc2Vtb3ANCiAgICArY29uc3QgU1lTX1NFVFRJTUVPRkRBWSA9IF9T
WVNfc2V0dGltZW9mZGF5DQogICAgK2NvbnN0IFNZU19LSUxMID0gX1NZU19raWxsDQogICAgK2Nv
bnN0IFNZU19VVElNRU5TQVQgPSBfU1lTX3V0aW1lbnNhdA0KICAgICtjb25zdCBTWVNfVElNRVJf
Q1JFQVRFID0gX1NZU190aW1lcl9jcmVhdGUNCiAgICArY29uc3QgU1lTX1NUQVQgPSBfU1lTX3N0
YXQNCiAgICArY29uc3QgU1lTX1NFVERPTUFJTk5BTUUgPSBfU1lTX3NldGRvbWFpbm5hbWUNCiAg
ICArY29uc3QgU1lTX0ZDSERJUiA9IF9TWVNfZmNoZGlyDQogICAgK2NvbnN0IFNZU19GTE9DSyA9
IF9TWVNfZmxvY2sNCiAgICArY29uc3QgU1lTX1JFUVVFU1RfS0VZID0gX1NZU19yZXF1ZXN0X2tl
eQ0KICAgICtjb25zdCBTWVNfSU9fREVTVFJPWSA9IF9TWVNfaW9fZGVzdHJveQ0KICAgICtjb25z
dCBTWVNfVElNRVJGRF9DUkVBVEUgPSBfU1lTX3RpbWVyZmRfY3JlYXRlDQogICAgK2NvbnN0IFNZ
U19HRVRUSUQgPSBfU1lTX2dldHRpZA0KICAgICtjb25zdCBTWVNfRkFMTE9DQVRFID0gX1NZU19m
YWxsb2NhdGUNCiAgICArY29uc3QgU1lTX1NDSEVEX1NFVFBBUkFNID0gX1NZU19zY2hlZF9zZXRw
YXJhbQ0KICAgICtjb25zdCBTWVNfU0hNQVQgPSBfU1lTX3NobWF0DQogICAgK2NvbnN0IFNZU19Q
UkVBRFYyID0gX1NZU19wcmVhZHYyDQogICAgK2NvbnN0IFNZU19HRVRSVVNBR0UgPSBfU1lTX2dl
dHJ1c2FnZQ0KICAgICtjb25zdCBTWVNfS0NNUCA9IF9TWVNfa2NtcA0KICAgICtjb25zdCBTWVNf
VU5MSU5LID0gX1NZU191bmxpbmsNCiAgICArY29uc3QgU1lTX1NITUdFVCA9IF9TWVNfc2htZ2V0
DQogICAgK2NvbnN0IFNZU19MT09LVVBfRENPT0tJRSA9IF9TWVNfbG9va3VwX2Rjb29raWUNCiAg
ICArY29uc3QgU1lTX01LRElSQVQgPSBfU1lTX21rZGlyYXQNCiAgICArY29uc3QgU1lTX1NITURU
ID0gX1NZU19zaG1kdA0KICAgICtjb25zdCBTWVNfQUREX0tFWSA9IF9TWVNfYWRkX2tleQ0KICAg
ICtjb25zdCBTWVNfRVhJVF9HUk9VUCA9IF9TWVNfZXhpdF9ncm91cA0KICAgICtjb25zdCBTWVNf
Rk9SSyA9IF9TWVNfZm9yaw0KICAgICtjb25zdCBTWVNfR0VUWEFUVFIgPSBfU1lTX2dldHhhdHRy
DQogICAgK2NvbnN0IFNZU19NUFJPVEVDVCA9IF9TWVNfbXByb3RlY3QNCiAgICArY29uc3QgU1lT
X1JFQUQgPSBfU1lTX3JlYWQNCiAgICArY29uc3QgU1lTX0xMSVNUWEFUVFIgPSBfU1lTX2xsaXN0
eGF0dHINCiAgICArY29uc3QgU1lTX1BBVVNFID0gX1NZU19wYXVzZQ0KICAgICtjb25zdCBTWVNf
TVFfR0VUU0VUQVRUUiA9IF9TWVNfbXFfZ2V0c2V0YXR0cg0KICAgICtjb25zdCBTWVNfTUxPQ0sy
ID0gX1NZU19tbG9jazINCiAgICArY29uc3QgU1lTX0dFVFJBTkRPTSA9IF9TWVNfZ2V0cmFuZG9t
DQogICAgK2NvbnN0IFNZU19PUEVOQVQgPSBfU1lTX29wZW5hdA0KICAgICtjb25zdCBTWVNfUlRf
U0lHUkVUVVJOID0gX1NZU19ydF9zaWdyZXR1cm4NCiAgICArY29uc3QgU1lTX0ZBRFZJU0U2NCA9
IF9TWVNfZmFkdmlzZTY0DQogICAgK2NvbnN0IFNZU19VU1RBVCA9IF9TWVNfdXN0YXQNCiAgICAr
Y29uc3QgU1lTX0lPX1NVQk1JVCA9IF9TWVNfaW9fc3VibWl0DQogICAgK2NvbnN0IFNZU19XUklU
RVYgPSBfU1lTX3dyaXRldg0KICAgICtjb25zdCBTWVNfVU5TSEFSRSA9IF9TWVNfdW5zaGFyZQ0K
ICAgICtjb25zdCBTWVNfTVNHR0VUID0gX1NZU19tc2dnZXQNCiAgICArY29uc3QgU1lTX01MT0NL
ID0gX1NZU19tbG9jaw0KICAgICtjb25zdCBTWVNfS0VYRUNfTE9BRCA9IF9TWVNfa2V4ZWNfbG9h
ZA0KICAgICtjb25zdCBTWVNfR0VUX01FTVBPTElDWSA9IF9TWVNfZ2V0X21lbXBvbGljeQ0KICAg
ICtjb25zdCBTWVNfU0VUUkVHSUQgPSBfU1lTX3NldHJlZ2lkDQogICAgK2NvbnN0IFNZU19DSFJP
T1QgPSBfU1lTX2Nocm9vdA0KICAgICtjb25zdCBTWVNfQUZTX1NZU0NBTEwgPSBfU1lTX2Fmc19z
eXNjYWxsDQogICAgK2NvbnN0IFNZU19ORlNTRVJWQ1RMID0gX1NZU19uZnNzZXJ2Y3RsDQogICAg
K2NvbnN0IFNZU19MUkVNT1ZFWEFUVFIgPSBfU1lTX2xyZW1vdmV4YXR0cg0KICAgICtjb25zdCBT
WVNfSU9fQ0FOQ0VMID0gX1NZU19pb19jYW5jZWwNCiAgICArY29uc3QgU1lTX1NPQ0tFVCA9IF9T
WVNfc29ja2V0DQogICAgK2NvbnN0IFNZU19GR0VUWEFUVFIgPSBfU1lTX2ZnZXR4YXR0cg0KICAg
ICtjb25zdCBTWVNfTUVNRkRfQ1JFQVRFID0gX1NZU19tZW1mZF9jcmVhdGUNCiAgICArY29uc3Qg
U1lTX1NZTUxJTktBVCA9IF9TWVNfc3ltbGlua2F0DQogICAgK2NvbnN0IFNZU19GQ05UTCA9IF9T
WVNfZmNudGwNCiAgICArY29uc3QgU1lTX0dFVEVVSUQgPSBfU1lTX2dldGV1aWQNCiAgICArY29u
c3QgU1lTX0ZTVEFURlMgPSBfU1lTX2ZzdGF0ZnMNCiAgICArY29uc3QgU1lTX1NDSEVEX1JSX0dF
VF9JTlRFUlZBTCA9IF9TWVNfc2NoZWRfcnJfZ2V0X2ludGVydmFsDQogICAgK2NvbnN0IFNZU19J
T1BFUk0gPSBfU1lTX2lvcGVybQ0KICAgICtjb25zdCBTWVNfQUNDRVBUID0gX1NZU19hY2NlcHQN
CiAgICArY29uc3QgU1lTX1JFQURWID0gX1NZU19yZWFkdg0KICAgICtjb25zdCBTWVNfVU5BTUUg
PSBfU1lTX3VuYW1lDQogICAgK2NvbnN0IFNZU19TRVRQUklPUklUWSA9IF9TWVNfc2V0cHJpb3Jp
dHkNCiAgICArY29uc3QgU1lTX1NFTkRNU0cgPSBfU1lTX3NlbmRtc2cNCiAgICArY29uc3QgU1lT
X1JFQURMSU5LID0gX1NZU19yZWFkbGluaw0KICAgICtjb25zdCBTWVNfU0VNVElNRURPUCA9IF9T
WVNfc2VtdGltZWRvcA0KICAgICtjb25zdCBTWVNfU0VUR1JPVVBTID0gX1NZU19zZXRncm91cHMN
CiAgICArY29uc3QgU1lTX1NFTkRNTVNHID0gX1NZU19zZW5kbW1zZw0KICAgICtjb25zdCBTWVNf
U0NIRURfU0VUU0NIRURVTEVSID0gX1NZU19zY2hlZF9zZXRzY2hlZHVsZXINCiAgICArY29uc3Qg
U1lTX0VQT0xMX0NUTCA9IF9TWVNfZXBvbGxfY3RsDQogICAgK2NvbnN0IFNZU19TQ0hFRF9HRVRf
UFJJT1JJVFlfTUFYID0gX1NZU19zY2hlZF9nZXRfcHJpb3JpdHlfbWF4DQogICAgK2NvbnN0IFNZ
U19TWU5DRlMgPSBfU1lTX3N5bmNmcw0KICAgICtjb25zdCBTWVNfSU9DVEwgPSBfU1lTX2lvY3Rs
DQogICAgK2NvbnN0IFNZU19QT0xMID0gX1NZU19wb2xsDQogICAgK2NvbnN0IFNZU19JT1BMID0g
X1NZU19pb3BsDQogICAgK2NvbnN0IFNZU19NU0dTTkQgPSBfU1lTX21zZ3NuZA0KICAgICtjb25z
dCBTWVNfRVhJVCA9IF9TWVNfZXhpdA0KICAgICtjb25zdCBTWVNfUkVTVEFSVF9TWVNDQUxMID0g
X1NZU19yZXN0YXJ0X3N5c2NhbGwNCiAgICArY29uc3QgU1lTX05BTk9TTEVFUCA9IF9TWVNfbmFu
b3NsZWVwDQogICAgK2NvbnN0IFNZU19NUkVNQVAgPSBfU1lTX21yZW1hcA0KICAgICtjb25zdCBT
WVNfU1lTSU5GTyA9IF9TWVNfc3lzaW5mbw0KICAgICtjb25zdCBTWVNfU0VUU0lEID0gX1NZU19z
ZXRzaWQNCiAgICArY29uc3QgU1lTX1NUQVRYID0gX1NZU19zdGF0eA0KICAgICtjb25zdCBTWVNf
U0hVVERPV04gPSBfU1lTX3NodXRkb3duDQogICAgK2NvbnN0IFNZU19US0lMTCA9IF9TWVNfdGtp
bGwNCiAgICArY29uc3QgU1lTX1BUUkFDRSA9IF9TWVNfcHRyYWNlDQogICAgK2NvbnN0IFNZU19G
VVRFWCA9IF9TWVNfZnV0ZXgNCiAgICArY29uc3QgU1lTX1JFQ1ZNTVNHID0gX1NZU19yZWN2bW1z
Zw0KICAgICtjb25zdCBTWVNfX1NZU0NUTCA9IF9TWVNfX3N5c2N0bA0KICAgICtjb25zdCBTWVNf
TVFfVElNRURTRU5EID0gX1NZU19tcV90aW1lZHNlbmQNCiAgICArY29uc3QgU1lTX0NMT05FID0g
X1NZU19jbG9uZQ0KICAgICtjb25zdCBTWVNfU0NIRURfR0VUX1BSSU9SSVRZX01JTiA9IF9TWVNf
c2NoZWRfZ2V0X3ByaW9yaXR5X21pbg0KICAgICtjb25zdCBTWVNfUFVUUE1TRyA9IF9TWVNfcHV0
cG1zZw0KICAgICtjb25zdCBTWVNfR0VUUkxJTUlUID0gX1NZU19nZXRybGltaXQNCiAgICArY29u
c3QgU1lTX01FTUJBUlJJRVIgPSBfU1lTX21lbWJhcnJpZXINCiAgICArY29uc3QgU1lTX0lOT1RJ
RllfSU5JVCA9IF9TWVNfaW5vdGlmeV9pbml0DQogICAgK2NvbnN0IFNZU19UVVhDQUxMID0gX1NZ
U190dXhjYWxsDQogICAgK2NvbnN0IFNZU19NVU5NQVAgPSBfU1lTX211bm1hcA0KICAgICtjb25z
dCBTWVNfVkZPUksgPSBfU1lTX3Zmb3JrDQogICAgK2NvbnN0IFNZU19XQUlUSUQgPSBfU1lTX3dh
aXRpZA0KICAgICtjb25zdCBTWVNfR0VUR1JPVVBTID0gX1NZU19nZXRncm91cHMNCiAgICArY29u
c3QgU1lTX01CSU5EID0gX1NZU19tYmluZA0KICAgICtjb25zdCBTWVNfUEtFWV9NUFJPVEVDVCA9
IF9TWVNfcGtleV9tcHJvdGVjdA0KICAgICtjb25zdCBTWVNfTUlOQ09SRSA9IF9TWVNfbWluY29y
ZQ0KICAgICtjb25zdCBTWVNfR0VUUFBJRCA9IF9TWVNfZ2V0cHBpZA0KICAgICtjb25zdCBTWVNf
TU9WRV9QQUdFUyA9IF9TWVNfbW92ZV9wYWdlcw0KICAgICtjb25zdCBTWVNfU0VURlNHSUQgPSBf
U1lTX3NldGZzZ2lkDQogICAgK2NvbnN0IFNZU19TQ0hFRF9TRVRBVFRSID0gX1NZU19zY2hlZF9z
ZXRhdHRyDQogICAgK2NvbnN0IFNZU19SRU1BUF9GSUxFX1BBR0VTID0gX1NZU19yZW1hcF9maWxl
X3BhZ2VzDQogICAgK2NvbnN0IFNZU19TRVRVSUQgPSBfU1lTX3NldHVpZA0KICAgICtjb25zdCBT
WVNfU09DS0VUUEFJUiA9IF9TWVNfc29ja2V0cGFpcg0KICAgICtjb25zdCBTWVNfUkVNT1ZFWEFU
VFIgPSBfU1lTX3JlbW92ZXhhdHRyDQogICAgK2NvbnN0IFNZU19UUlVOQ0FURSA9IF9TWVNfdHJ1
bmNhdGUNCiAgICArY29uc3QgU1lTX0NPTk5FQ1QgPSBfU1lTX2Nvbm5lY3QNCiAgICArY29uc3Qg
U1lTX1NDSEVEX0dFVEFUVFIgPSBfU1lTX3NjaGVkX2dldGF0dHINCiAgICArY29uc3QgU1lTX0ZM
SVNUWEFUVFIgPSBfU1lTX2ZsaXN0eGF0dHINCiAgICArY29uc3QgU1lTX01NQVAgPSBfU1lTX21t
YXANCiAgICArY29uc3QgU1lTX0NMT0NLX0FESlRJTUUgPSBfU1lTX2Nsb2NrX2FkanRpbWUNCiAg
ICArY29uc3QgU1lTX0VWRU5URkQgPSBfU1lTX2V2ZW50ZmQNCiAgICArY29uc3QgU1lTX09QRU4g
PSBfU1lTX29wZW4NCiAgICArY29uc3QgU1lTX1NFVFBHSUQgPSBfU1lTX3NldHBnaWQNCiAgICAr
Y29uc3QgU1lTX1BTRUxFQ1Q2ID0gX1NZU19wc2VsZWN0Ng0KICAgICtjb25zdCBTWVNfU0VUWEFU
VFIgPSBfU1lTX3NldHhhdHRyDQogICAgK2NvbnN0IFNZU19TSUdBTFRTVEFDSyA9IF9TWVNfc2ln
YWx0c3RhY2sNCiAgICArY29uc3QgU1lTX0lOT1RJRllfSU5JVDEgPSBfU1lTX2lub3RpZnlfaW5p
dDENCiAgICArY29uc3QgU1lTX0NSRUFUID0gX1NZU19jcmVhdA0KICAgICtjb25zdCBTWVNfR0VU
UEdJRCA9IF9TWVNfZ2V0cGdpZA0KICAgICtjb25zdCBTX0lSV1hPID0gX1NfSVJXWE8NCiAgICAr
Y29uc3QgU19JRVhFQyA9IF9TX0lFWEVDDQogICAgK2NvbnN0IFNfSVNWVFggPSBfU19JU1ZUWA0K
ICAgICtjb25zdCBTX0lXT1RIID0gX1NfSVdPVEgNCiAgICArY29uc3QgU19JUkdSUCA9IF9TX0lS
R1JQDQogICAgK2NvbnN0IFNfSUZNVCA9IF9TX0lGTVQNCiAgICArY29uc3QgU19JV1JJVEUgPSBf
U19JV1JJVEUNCiAgICArY29uc3QgU19JRkxOSyA9IF9TX0lGTE5LDQogICAgK2NvbnN0IFNfSVJX
WEcgPSBfU19JUldYRw0KICAgICtjb25zdCBTX0lSV1hVID0gX1NfSVJXWFUNCiAgICArY29uc3Qg
U19JV1VTUiA9IF9TX0lXVVNSDQogICAgK2NvbnN0IFNfSUZSRUcgPSBfU19JRlJFRw0KICAgICtj
b25zdCBTX0lYR1JQID0gX1NfSVhHUlANCiAgICArY29uc3QgU19JU1VJRCA9IF9TX0lTVUlEDQog
ICAgK2NvbnN0IFNfSUZJRk8gPSBfU19JRklGTw0KICAgICtjb25zdCBTX0lGU09DSyA9IF9TX0lG
U09DSw0KICAgICtjb25zdCBTX0lST1RIID0gX1NfSVJPVEgNCiAgICArY29uc3QgU19CTEtTSVpF
ID0gX1NfQkxLU0laRQ0KICAgICtjb25zdCBTX0lXR1JQID0gX1NfSVdHUlANCiAgICArY29uc3Qg
U19JWFVTUiA9IF9TX0lYVVNSDQogICAgK2NvbnN0IFNfSVNHSUQgPSBfU19JU0dJRA0KICAgICtj
b25zdCBTX0lGRElSID0gX1NfSUZESVINCiAgICArY29uc3QgU19JUlVTUiA9IF9TX0lSVVNSDQog
ICAgK2NvbnN0IFNfSUZDSFIgPSBfU19JRkNIUg0KICAgICtjb25zdCBTX0lYT1RIID0gX1NfSVhP
VEgNCiAgICArY29uc3QgU19JRkJMSyA9IF9TX0lGQkxLDQogICAgK2NvbnN0IFNfSVJFQUQgPSBf
U19JUkVBRA0KICAgICtjb25zdCBQUk9UX05PTkUgPSBfUFJPVF9OT05FDQogICAgK2NvbnN0IFBS
T1RfUkVBRCA9IF9QUk9UX1JFQUQNCiAgICArY29uc3QgUFJPVF9HUk9XU0RPV04gPSBfUFJPVF9H
Uk9XU0RPV04NCiAgICArY29uc3QgUFJPVF9FWEVDID0gX1BST1RfRVhFQw0KICAgICtjb25zdCBQ
Uk9UX1dSSVRFID0gX1BST1RfV1JJVEUNCiAgICArY29uc3QgUFJPVF9HUk9XU1VQID0gX1BST1Rf
R1JPV1NVUA0KICAgICtjb25zdCBNQVBfRklMRSA9IF9NQVBfRklMRQ0KICAgICtjb25zdCBNQVBf
U0hBUkVEID0gX01BUF9TSEFSRUQNCiAgICArY29uc3QgTUFQX1NZTkMgPSBfTUFQX1NZTkMNCiAg
ICArY29uc3QgTUFQX05PUkVTRVJWRSA9IF9NQVBfTk9SRVNFUlZFDQogICAgK2NvbnN0IE1BUF9I
VUdFVExCID0gX01BUF9IVUdFVExCDQogICAgK2NvbnN0IE1BUF9TVEFDSyA9IF9NQVBfU1RBQ0sN
CiAgICArY29uc3QgTUFQX1NIQVJFRF9WQUxJREFURSA9IF9NQVBfU0hBUkVEX1ZBTElEQVRFDQog
ICAgK2NvbnN0IE1BUF9HUk9XU0RPV04gPSBfTUFQX0dST1dTRE9XTg0KICAgICtjb25zdCBNQVBf
UE9QVUxBVEUgPSBfTUFQX1BPUFVMQVRFDQogICAgK2NvbnN0IE1BUF8zMkJJVCA9IF9NQVBfMzJC
SVQNCiAgICArY29uc3QgTUFQX0xPQ0tFRCA9IF9NQVBfTE9DS0VEDQogICAgK2NvbnN0IE1BUF9G
SVhFRF9OT1JFUExBQ0UgPSBfTUFQX0ZJWEVEX05PUkVQTEFDRQ0KICAgICtjb25zdCBNQVBfSFVH
RV9NQVNLID0gX01BUF9IVUdFX01BU0sNCiAgICArY29uc3QgTUFQX0hVR0VfU0hJRlQgPSBfTUFQ
X0hVR0VfU0hJRlQNCiAgICArY29uc3QgTUFQX0FOT05ZTU9VUyA9IF9NQVBfQU5PTllNT1VTDQog
ICAgK2NvbnN0IE1BUF9BTk9OID0gX01BUF9BTk9ODQogICAgK2NvbnN0IE1BUF9QUklWQVRFID0g
X01BUF9QUklWQVRFDQogICAgK2NvbnN0IE1BUF9FWEVDVVRBQkxFID0gX01BUF9FWEVDVVRBQkxF
DQogICAgK2NvbnN0IE1BUF9OT05CTE9DSyA9IF9NQVBfTk9OQkxPQ0sNCiAgICArY29uc3QgTUFQ
X1RZUEUgPSBfTUFQX1RZUEUNCiAgICArY29uc3QgTUFQX0ZJWEVEID0gX01BUF9GSVhFRA0KICAg
ICtjb25zdCBNQVBfREVOWVdSSVRFID0gX01BUF9ERU5ZV1JJVEUNCiAgICArY29uc3QgTUFEVl9E
T05URk9SSyA9IF9NQURWX0RPTlRGT1JLDQogICAgK2NvbnN0IE1BRFZfV0lMTE5FRUQgPSBfTUFE
Vl9XSUxMTkVFRA0KICAgICtjb25zdCBNQURWX1NFUVVFTlRJQUwgPSBfTUFEVl9TRVFVRU5USUFM
DQogICAgK2NvbnN0IE1BRFZfS0VFUE9ORk9SSyA9IF9NQURWX0tFRVBPTkZPUksNCiAgICArY29u
c3QgTUFEVl9ET05UTkVFRCA9IF9NQURWX0RPTlRORUVEDQogICAgK2NvbnN0IE1BRFZfRE9EVU1Q
ID0gX01BRFZfRE9EVU1QDQogICAgK2NvbnN0IE1BRFZfTk9IVUdFUEFHRSA9IF9NQURWX05PSFVH
RVBBR0UNCiAgICArY29uc3QgTUFEVl9OT1JNQUwgPSBfTUFEVl9OT1JNQUwNCiAgICArY29uc3Qg
TUFEVl9ET0ZPUksgPSBfTUFEVl9ET0ZPUksNCiAgICArY29uc3QgTUFEVl9XSVBFT05GT1JLID0g
X01BRFZfV0lQRU9ORk9SSw0KICAgICtjb25zdCBNQURWX0hVR0VQQUdFID0gX01BRFZfSFVHRVBB
R0UNCiAgICArY29uc3QgTUFEVl9IV1BPSVNPTiA9IF9NQURWX0hXUE9JU09ODQogICAgK2NvbnN0
IE1BRFZfTUVSR0VBQkxFID0gX01BRFZfTUVSR0VBQkxFDQogICAgK2NvbnN0IE1BRFZfUkVNT1ZF
ID0gX01BRFZfUkVNT1ZFDQogICAgK2NvbnN0IE1BRFZfUkFORE9NID0gX01BRFZfUkFORE9NDQog
ICAgK2NvbnN0IE1BRFZfRlJFRSA9IF9NQURWX0ZSRUUNCiAgICArY29uc3QgTUFEVl9ET05URFVN
UCA9IF9NQURWX0RPTlREVU1QDQogICAgK2NvbnN0IE1BRFZfVU5NRVJHRUFCTEUgPSBfTUFEVl9V
Tk1FUkdFQUJMRQ0KICAgICtjb25zdCBNQ0xfRlVUVVJFID0gX01DTF9GVVRVUkUNCiAgICArY29u
c3QgTUNMX0NVUlJFTlQgPSBfTUNMX0NVUlJFTlQNCiAgICArY29uc3QgTUNMX09ORkFVTFQgPSBf
TUNMX09ORkFVTFQNCiAgICArY29uc3QgV05PSEFORyA9IF9XTk9IQU5HDQogICAgK2NvbnN0IFdP
UkRfQklUID0gX1dPUkRfQklUDQogICAgK2NvbnN0IFdfT0sgPSBfV19PSw0KICAgICtjb25zdCBX
Q0hBUl9XSURUSCA9IF9XQ0hBUl9XSURUSA0KICAgICtjb25zdCBXSU5UX1dJRFRIID0gX1dJTlRf
V0lEVEgNCiAgICArY29uc3QgV0NPTlRJTlVFRCA9IF9XQ09OVElOVUVEDQogICAgK2NvbnN0IFdD
SEFSX01BWCA9IF9XQ0hBUl9NQVgNCiAgICArY29uc3QgV0FJVF9BTlkgPSBfV0FJVF9BTlkNCiAg
ICArY29uc3QgV0FJVF9NWVBHUlAgPSBfV0FJVF9NWVBHUlANCiAgICArY29uc3QgV0VYSVRFRCA9
IF9XRVhJVEVEDQogICAgK2NvbnN0IFdDT1JFRkxBRyA9IF9XQ09SRUZMQUcNCiAgICArY29uc3Qg
V0NIQVJfTUlOID0gX1dDSEFSX01JTg0KICAgICtjb25zdCBXTk9XQUlUID0gX1dOT1dBSVQNCiAg
ICArY29uc3QgV1VOVFJBQ0VEID0gX1dVTlRSQUNFRA0KICAgICtjb25zdCBXSU5UX01BWCA9IF9X
SU5UX01BWA0KICAgICtjb25zdCBXSU5UX01JTiA9IF9XSU5UX01JTg0KICAgICtjb25zdCBXU1RP
UFBFRCA9IF9XU1RPUFBFRA0KICAgICtjb25zdCBXQUxMID0gX19fV0FMTA0KICAgICtjb25zdCBJ
UFBST1RPX1RQID0gX0lQUFJPVE9fVFANCiAgICArY29uc3QgVENQX0NPT0tJRV9UUkFOU0FDVElP
TlMgPSBfVENQX0NPT0tJRV9UUkFOU0FDVElPTlMNCiAgICArY29uc3QgSVBQUk9UT19ST1VUSU5H
ID0gX0lQUFJPVE9fUk9VVElORw0KICAgICtjb25zdCBJUF9SRiA9IF9JUF9SRg0KICAgICtjb25z
dCBFVEhfUF9QUFBUQUxLID0gX0VUSF9QX1BQUFRBTEsNCiAgICArY29uc3QgSVBfREVGQVVMVF9N
VUxUSUNBU1RfTE9PUCA9IF9JUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QDQogICAgK2NvbnN0IFRD
UF9SRVBBSVJfT1BUSU9OUyA9IF9UQ1BfUkVQQUlSX09QVElPTlMNCiAgICArY29uc3QgVENQX1Nf
REFUQV9JTiA9IF9UQ1BfU19EQVRBX0lODQogICAgK2NvbnN0IElOX0FUVFJJQiA9IF9JTl9BVFRS
SUINCiAgICArY29uc3QgU09DS19ER1JBTSA9IF9TT0NLX0RHUkFNDQogICAgK2NvbnN0IElQVjZf
T1JJR0RTVEFERFIgPSBfSVBWNl9PUklHRFNUQUREUg0KICAgICtjb25zdCBTT19UWFRJTUUgPSBf
U09fVFhUSU1FDQogICAgK2NvbnN0IElQVjZfMjI5MkhPUExJTUlUID0gX0lQVjZfMjI5MkhPUExJ
TUlUDQogICAgK2NvbnN0IElQUFJPVE9fSVBWNiA9IF9JUFBST1RPX0lQVjYNCiAgICArY29uc3Qg
VENQX1NZTl9TRU5UID0gX1RDUF9TWU5fU0VOVA0KICAgICtjb25zdCBBUlBIUkRfSUVFRTgwMjEx
X1BSSVNNID0gX0FSUEhSRF9JRUVFODAyMTFfUFJJU00NCiAgICArY29uc3QgRVRIX1BfODAyMUFE
ID0gX0VUSF9QXzgwMjFBRA0KICAgICtjb25zdCBFVEhfUF84MDIxQUggPSBfRVRIX1BfODAyMUFI
DQogICAgK2NvbnN0IEVUSF9QX0FSQ05FVCA9IF9FVEhfUF9BUkNORVQNCiAgICArY29uc3QgSVBQ
Uk9UT19OT05FID0gX0lQUFJPVE9fTk9ORQ0KICAgICtjb25zdCBUQ1BfQ09PS0lFX09VVF9ORVZF
UiA9IF9UQ1BfQ09PS0lFX09VVF9ORVZFUg0KICAgICtjb25zdCBTT0xfU09DS0VUID0gX1NPTF9T
T0NLRVQNCiAgICArY29uc3QgSVBfTk9ERUZSQUcgPSBfSVBfTk9ERUZSQUcNCiAgICArY29uc3Qg
SVBQUk9UT19VRFBMSVRFID0gX0lQUFJPVE9fVURQTElURQ0KICAgICtjb25zdCBUQ1BfTElTVEVO
ID0gX1RDUF9MSVNURU4NCiAgICArY29uc3QgU09fU05EVElNRU8gPSBfU09fU05EVElNRU8NCiAg
ICArY29uc3QgQUZfVU5TUEVDID0gX0FGX1VOU1BFQw0KICAgICtjb25zdCBBUlBIUkRfRkNQTCA9
IF9BUlBIUkRfRkNQTA0KICAgICtjb25zdCBBUlBIUkRfRkNQUCA9IF9BUlBIUkRfRkNQUA0KICAg
ICtjb25zdCBJUF9BRERfTUVNQkVSU0hJUCA9IF9JUF9BRERfTUVNQkVSU0hJUA0KICAgICtjb25z
dCBFVEhfUF9UUkFJTEVSID0gX0VUSF9QX1RSQUlMRVINCiAgICArY29uc3QgU09MX1RDUCA9IF9T
T0xfVENQDQogICAgK2NvbnN0IFNPX0NOWF9BRFZJQ0UgPSBfU09fQ05YX0FEVklDRQ0KICAgICtj
b25zdCBTT0xfQkxVRVRPT1RIID0gX1NPTF9CTFVFVE9PVEgNCiAgICArY29uc3QgQVJQSFJEX0VU
SEVSID0gX0FSUEhSRF9FVEhFUg0KICAgICtjb25zdCBFVEhfUF9ESUFHID0gX0VUSF9QX0RJQUcN
CiAgICArY29uc3QgQVJQSFJEX0lORklOSUJBTkQgPSBfQVJQSFJEX0lORklOSUJBTkQNCiAgICAr
Y29uc3QgSVBfVFJBTlNQQVJFTlQgPSBfSVBfVFJBTlNQQVJFTlQNCiAgICArY29uc3QgRVRIX1Bf
TE9PUEJBQ0sgPSBfRVRIX1BfTE9PUEJBQ0sNCiAgICArY29uc3QgRVRIX1BfQ1VTVCA9IF9FVEhf
UF9DVVNUDQogICAgK2NvbnN0IEFSUEhSRF9JRUVFODAyMTFfUkFESU9UQVAgPSBfQVJQSFJEX0lF
RUU4MDIxMV9SQURJT1RBUA0KICAgICtjb25zdCBBUlBIUkRfVk9JRCA9IF9BUlBIUkRfVk9JRA0K
ICAgICtjb25zdCBJUFY2X01VTFRJQ0FTVF9MT09QID0gX0lQVjZfTVVMVElDQVNUX0xPT1ANCiAg
ICArY29uc3QgU09fUFJJT1JJVFkgPSBfU09fUFJJT1JJVFkNCiAgICArY29uc3QgU09fUFJPVE9D
T0wgPSBfU09fUFJPVE9DT0wNCiAgICArY29uc3QgVENQX1RISU5fRFVQQUNLID0gX1RDUF9USElO
X0RVUEFDSw0KICAgICtjb25zdCBTT19BVFRBQ0hfUkVVU0VQT1JUX0VCUEYgPSBfU09fQVRUQUNI
X1JFVVNFUE9SVF9FQlBGDQogICAgK2NvbnN0IElOX0FMTF9FVkVOVFMgPSBfSU5fQUxMX0VWRU5U
Uw0KICAgICtjb25zdCBTT19QRUVSTkFNRSA9IF9TT19QRUVSTkFNRQ0KICAgICtjb25zdCBTT19N
RU1JTkZPID0gX1NPX01FTUlORk8NCiAgICArY29uc3QgQVJQSFJEX0hJUFBJID0gX0FSUEhSRF9I
SVBQSQ0KICAgICtjb25zdCBBRl9ST1VURSA9IF9BRl9ST1VURQ0KICAgICtjb25zdCBJUF9NVUxU
SUNBU1RfTE9PUCA9IF9JUF9NVUxUSUNBU1RfTE9PUA0KICAgICtjb25zdCBFVEhfUF9BVE1GQVRF
ID0gX0VUSF9QX0FUTUZBVEUNCiAgICArY29uc3QgSVBWNl9WNk9OTFkgPSBfSVBWNl9WNk9OTFkN
CiAgICArY29uc3QgQVJQSFJEX1NMSVA2ID0gX0FSUEhSRF9TTElQNg0KICAgICtjb25zdCBJTl9D
TEFTU0NfSE9TVCA9IF9JTl9DTEFTU0NfSE9TVA0KICAgICtjb25zdCBJUF9SRUNWRlJBR1NJWkUg
PSBfSVBfUkVDVkZSQUdTSVpFDQogICAgK2NvbnN0IFNPTF9YMjUgPSBfU09MX1gyNQ0KICAgICtj
b25zdCBFVEhfUF9OQ1NJID0gX0VUSF9QX05DU0kNCiAgICArY29uc3QgVENQX0NMT1NJTkcgPSBf
VENQX0NMT1NJTkcNCiAgICArY29uc3QgSVBfTVNGSUxURVIgPSBfSVBfTVNGSUxURVINCiAgICAr
Y29uc3QgVENQX0NPTkdFU1RJT04gPSBfVENQX0NPTkdFU1RJT04NCiAgICArY29uc3QgQUZfUkRT
ID0gX0FGX1JEUw0KICAgICtjb25zdCBBRl9JRUVFODAyMTU0ID0gX0FGX0lFRUU4MDIxNTQNCiAg
ICArY29uc3QgU09fVElNRVNUQU1QSU5HID0gX1NPX1RJTUVTVEFNUElORw0KICAgICtjb25zdCBU
Q1BfQ09PS0lFX01BWCA9IF9UQ1BfQ09PS0lFX01BWA0KICAgICtjb25zdCBTT19ERVRBQ0hfQlBG
ID0gX1NPX0RFVEFDSF9CUEYNCiAgICArY29uc3QgQVJQSFJEX0FTSCA9IF9BUlBIUkRfQVNIDQog
ICAgK2NvbnN0IElQUFJPVE9fRlJBR01FTlQgPSBfSVBQUk9UT19GUkFHTUVOVA0KICAgICtjb25z
dCBJUF9CSU5EX0FERFJFU1NfTk9fUE9SVCA9IF9JUF9CSU5EX0FERFJFU1NfTk9fUE9SVA0KICAg
ICtjb25zdCBJUF9QTVRVRElTQ19XQU5UID0gX0lQX1BNVFVESVNDX1dBTlQNCiAgICArY29uc3Qg
U09MX1RMUyA9IF9TT0xfVExTDQogICAgK2NvbnN0IEVUSF9QXzgwMjFRID0gX0VUSF9QXzgwMjFR
DQogICAgK2NvbnN0IElQX1BNVFVESVNDX0lOVEVSRkFDRSA9IF9JUF9QTVRVRElTQ19JTlRFUkZB
Q0UNCiAgICArY29uc3QgU09MX0lDTVBWNiA9IF9TT0xfSUNNUFY2DQogICAgK2NvbnN0IFRDUF9N
U1MgPSBfVENQX01TUw0KICAgICtjb25zdCBFVEhfUF84MDIyMSA9IF9FVEhfUF84MDIyMQ0KICAg
ICtjb25zdCBJTl9VTk1PVU5UID0gX0lOX1VOTU9VTlQNCiAgICArY29uc3QgRVRIX1BfUFBQX01Q
ID0gX0VUSF9QX1BQUF9NUA0KICAgICtjb25zdCBBRl9MT0NBTCA9IF9BRl9MT0NBTA0KICAgICtj
b25zdCBTT0NLX1JBVyA9IF9TT0NLX1JBVw0KICAgICtjb25zdCBUQ1BfU0FWRURfU1lOID0gX1RD
UF9TQVZFRF9TWU4NCiAgICArY29uc3QgQUZfVlNPQ0sgPSBfQUZfVlNPQ0sNCiAgICArY29uc3Qg
SVBfUkVDVkVSUiA9IF9JUF9SRUNWRVJSDQogICAgK2NvbnN0IFRDUF9TX0RBVEFfT1VUID0gX1RD
UF9TX0RBVEFfT1VUDQogICAgK2NvbnN0IElQUFJPVE9fRU5DQVAgPSBfSVBQUk9UT19FTkNBUA0K
ICAgICtjb25zdCBJUFY2XzIyOTJIT1BPUFRTID0gX0lQVjZfMjI5MkhPUE9QVFMNCiAgICArY29u
c3QgRVRIX1BfTE9DQUxUQUxLID0gX0VUSF9QX0xPQ0FMVEFMSw0KICAgICtjb25zdCBUQ1BfTElO
R0VSMiA9IF9UQ1BfTElOR0VSMg0KICAgICtjb25zdCBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwg
PSBfSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMDQogICAgK2NvbnN0IElQUFJPVE9fUkFXID0gX0lQ
UFJPVE9fUkFXDQogICAgK2NvbnN0IElQVjZfUE1UVURJU0NfRE8gPSBfSVBWNl9QTVRVRElTQ19E
Tw0KICAgICtjb25zdCBFVEhfUF9FUlNQQU4yID0gX0VUSF9QX0VSU1BBTjINCiAgICArY29uc3Qg
SU5fT05FU0hPVCA9IF9JTl9PTkVTSE9UDQogICAgK2NvbnN0IEVUSF9QX0VEU0EgPSBfRVRIX1Bf
RURTQQ0KICAgICtjb25zdCBJUFY2X0FERF9NRU1CRVJTSElQID0gX0lQVjZfQUREX01FTUJFUlNI
SVANCiAgICArY29uc3QgSVBWNl9QTVRVRElTQ19QUk9CRSA9IF9JUFY2X1BNVFVESVNDX1BST0JF
DQogICAgK2NvbnN0IFRDUF9NRDVTSUdfRkxBR19QUkVGSVggPSBfVENQX01ENVNJR19GTEFHX1BS
RUZJWA0KICAgICtjb25zdCBBUlBIUkRfQURBUFQgPSBfQVJQSFJEX0FEQVBUDQogICAgK2NvbnN0
IFRDUF9NQVhfV0lOU0hJRlQgPSBfVENQX01BWF9XSU5TSElGVA0KICAgICtjb25zdCBJUFBST1RP
X0lHTVAgPSBfSVBQUk9UT19JR01QDQogICAgK2NvbnN0IElQX01BWF9NRU1CRVJTSElQUyA9IF9J
UF9NQVhfTUVNQkVSU0hJUFMNCiAgICArY29uc3QgQUZfQVgyNSA9IF9BRl9BWDI1DQogICAgK2Nv
bnN0IEFSUEhSRF9FVUk2NCA9IF9BUlBIUkRfRVVJNjQNCiAgICArY29uc3QgU09fRE9NQUlOID0g
X1NPX0RPTUFJTg0KICAgICtjb25zdCBJUFY2X1BNVFVESVNDX1dBTlQgPSBfSVBWNl9QTVRVRElT
Q19XQU5UDQogICAgK2NvbnN0IElOX01BU0tfQUREID0gX0lOX01BU0tfQUREDQogICAgK2NvbnN0
IFRDUF9NQVhTRUcgPSBfVENQX01BWFNFRw0KICAgICtjb25zdCBJUFY2X1JUSERSX1NUUklDVCA9
IF9JUFY2X1JUSERSX1NUUklDVA0KICAgICtjb25zdCBJUF9QTVRVRElTQ19QUk9CRSA9IF9JUF9Q
TVRVRElTQ19QUk9CRQ0KICAgICtjb25zdCBJUFY2X1VOSUNBU1RfSUYgPSBfSVBWNl9VTklDQVNU
X0lGDQogICAgK2NvbnN0IEVUSF9QX0lFRUU4MDIxNTQgPSBfRVRIX1BfSUVFRTgwMjE1NA0KICAg
ICtjb25zdCBBRl9JTkVUNiA9IF9BRl9JTkVUNg0KICAgICtjb25zdCBFVEhfUF9MT09QID0gX0VU
SF9QX0xPT1ANCiAgICArY29uc3QgU09fWkVST0NPUFkgPSBfU09fWkVST0NPUFkNCiAgICArY29u
c3QgSVBWNl9QTVRVRElTQ19ET05UID0gX0lQVjZfUE1UVURJU0NfRE9OVA0KICAgICtjb25zdCBB
UlBIUkRfTkVUUk9NID0gX0FSUEhSRF9ORVRST00NCiAgICArY29uc3QgVENQX01BWFdJTiA9IF9U
Q1BfTUFYV0lODQogICAgK2NvbnN0IFRDUF9GQVNUT1BFTl9LRVkgPSBfVENQX0ZBU1RPUEVOX0tF
WQ0KICAgICtjb25zdCBFVEhfUF9ETkFfREwgPSBfRVRIX1BfRE5BX0RMDQogICAgK2NvbnN0IEFS
UEhSRF9YMjUgPSBfQVJQSFJEX1gyNQ0KICAgICtjb25zdCBBUlBIUkRfRUNPTkVUID0gX0FSUEhS
RF9FQ09ORVQNCiAgICArY29uc3QgU09fV0lGSV9TVEFUVVMgPSBfU09fV0lGSV9TVEFUVVMNCiAg
ICArY29uc3QgQVJQSFJEX0ZSQUQgPSBfQVJQSFJEX0ZSQUQNCiAgICArY29uc3QgSVBQUk9UT19E
Q0NQID0gX0lQUFJPVE9fRENDUA0KICAgICtjb25zdCBTT0xfSVJEQSA9IF9TT0xfSVJEQQ0KICAg
ICtjb25zdCBBRl9QQUNLRVQgPSBfQUZfUEFDS0VUDQogICAgK2NvbnN0IFNPTF9ORVRCRVVJID0g
X1NPTF9ORVRCRVVJDQogICAgK2NvbnN0IFRDUF9RVUlDS0FDSyA9IF9UQ1BfUVVJQ0tBQ0sNCiAg
ICArY29uc3QgVENQX0ZBU1RPUEVOX05PX0NPT0tJRSA9IF9UQ1BfRkFTVE9QRU5fTk9fQ09PS0lF
DQogICAgK2NvbnN0IEFGX0tFWSA9IF9BRl9LRVkNCiAgICArY29uc3QgSVBWNl9UQ0xBU1MgPSBf
SVBWNl9UQ0xBU1MNCiAgICArY29uc3QgQUZfWDI1ID0gX0FGX1gyNQ0KICAgICtjb25zdCBBUlBI
UkRfQ1NMSVAgPSBfQVJQSFJEX0NTTElQDQogICAgK2NvbnN0IEVUSF9QX01PQklURVggPSBfRVRI
X1BfTU9CSVRFWA0KICAgICtjb25zdCBBUlBIUkRfQ1NMSVA2ID0gX0FSUEhSRF9DU0xJUDYNCiAg
ICArY29uc3QgQVJQSFJEX0xBUEIgPSBfQVJQSFJEX0xBUEINCiAgICArY29uc3QgQUZfS0NNID0g
X0FGX0tDTQ0KICAgICtjb25zdCBBUlBIUkRfU0xJUCA9IF9BUlBIUkRfU0xJUA0KICAgICtjb25z
dCBTT19BVFRBQ0hfRklMVEVSID0gX1NPX0FUVEFDSF9GSUxURVINCiAgICArY29uc3QgRVRIX1Bf
SFNSID0gX0VUSF9QX0hTUg0KICAgICtjb25zdCBBUlBIUkRfUk9TRSA9IF9BUlBIUkRfUk9TRQ0K
ICAgICtjb25zdCBJTl9DTEFTU0JfTlNISUZUID0gX0lOX0NMQVNTQl9OU0hJRlQNCiAgICArY29u
c3QgSVBWNl9YRlJNX1BPTElDWSA9IF9JUFY2X1hGUk1fUE9MSUNZDQogICAgK2NvbnN0IEFGX0lQ
WCA9IF9BRl9JUFgNCiAgICArY29uc3QgU09fTk9fQ0hFQ0sgPSBfU09fTk9fQ0hFQ0sNCiAgICAr
Y29uc3QgQVJQSFJEX0xPQ0FMVExLID0gX0FSUEhSRF9MT0NBTFRMSw0KICAgICtjb25zdCBUQ1Bf
Q0FfQ1dSID0gX1RDUF9DQV9DV1INCiAgICArY29uc3QgQUZfVU5JWCA9IF9BRl9VTklYDQogICAg
K2NvbnN0IEVUSF9QX0hETEMgPSBfRVRIX1BfSERMQw0KICAgICtjb25zdCBBUlBIUkRfSFdYMjUg
PSBfQVJQSFJEX0hXWDI1DQogICAgK2NvbnN0IElQX0NIRUNLU1VNID0gX0lQX0NIRUNLU1VNDQog
ICAgK2NvbnN0IFNPX05PRkNTID0gX1NPX05PRkNTDQogICAgK2NvbnN0IElQX1BLVE9QVElPTlMg
PSBfSVBfUEtUT1BUSU9OUw0KICAgICtjb25zdCBUQ1BfUVVFVUVTX05SID0gX1RDUF9RVUVVRVNf
TlINCiAgICArY29uc3QgU09MX1BOUElQRSA9IF9TT0xfUE5QSVBFDQogICAgK2NvbnN0IEFSUEhS
RF9GQ0ZBQlJJQyA9IF9BUlBIUkRfRkNGQUJSSUMNCiAgICArY29uc3QgVENQX1NBVkVfU1lOID0g
X1RDUF9TQVZFX1NZTg0KICAgICtjb25zdCBBRl9DQUlGID0gX0FGX0NBSUYNCiAgICArY29uc3Qg
U09MX0lQVjYgPSBfU09MX0lQVjYNCiAgICArY29uc3QgSVBWNl9SRUNWT1JJR0RTVEFERFIgPSBf
SVBWNl9SRUNWT1JJR0RTVEFERFINCiAgICArY29uc3QgRVRIX1BfQVRNTVBPQSA9IF9FVEhfUF9B
VE1NUE9BDQogICAgK2NvbnN0IFNPX09PQklOTElORSA9IF9TT19PT0JJTkxJTkUNCiAgICArY29u
c3QgSVBWNl9BVVRPRkxPV0xBQkVMID0gX0lQVjZfQVVUT0ZMT1dMQUJFTA0KICAgICtjb25zdCBJ
UF9QTVRVRElTQ19ETyA9IF9JUF9QTVRVRElTQ19ETw0KICAgICtjb25zdCBJUF9QS1RJTkZPID0g
X0lQX1BLVElORk8NCiAgICArY29uc3QgU09MX1RJUEMgPSBfU09MX1RJUEMNCiAgICArY29uc3Qg
QVJQSFJEX0lFRUU4MDIxNTQgPSBfQVJQSFJEX0lFRUU4MDIxNTQNCiAgICArY29uc3QgSU5fTU9W
RV9TRUxGID0gX0lOX01PVkVfU0VMRg0KICAgICtjb25zdCBFVEhfUF9MQVQgPSBfRVRIX1BfTEFU
DQogICAgK2NvbnN0IEFGX1FJUENSVFIgPSBfQUZfUUlQQ1JUUg0KICAgICtjb25zdCBTT19BQ0NF
UFRDT05OID0gX1NPX0FDQ0VQVENPTk4NCiAgICArY29uc3QgSVBfTVVMVElDQVNUX1RUTCA9IF9J
UF9NVUxUSUNBU1RfVFRMDQogICAgK2NvbnN0IFNPQ0tfU0VRUEFDS0VUID0gX1NPQ0tfU0VRUEFD
S0VUDQogICAgK2NvbnN0IFRDUF9TWU5DTlQgPSBfVENQX1NZTkNOVA0KICAgICtjb25zdCBFVEhf
UF9QUkVBVVRIID0gX0VUSF9QX1BSRUFVVEgNCiAgICArY29uc3QgSVBWNl8yMjkyUEtUSU5GTyA9
IF9JUFY2XzIyOTJQS1RJTkZPDQogICAgK2NvbnN0IEVUSF9QX0ZDT0UgPSBfRVRIX1BfRkNPRQ0K
ICAgICtjb25zdCBFVEhfUF8xNTg4ID0gX0VUSF9QXzE1ODgNCiAgICArY29uc3QgQVJQSFJEX0lS
REEgPSBfQVJQSFJEX0lSREENCiAgICArY29uc3QgSVBWNl9SRUNWUEFUSE1UVSA9IF9JUFY2X1JF
Q1ZQQVRITVRVDQogICAgK2NvbnN0IElQX1JFVE9QVFMgPSBfSVBfUkVUT1BUUw0KICAgICtjb25z
dCBJUF9NVUxUSUNBU1RfSUYgPSBfSVBfTVVMVElDQVNUX0lGDQogICAgK2NvbnN0IFNPX1JDVlRJ
TUVPID0gX1NPX1JDVlRJTUVPDQogICAgK2NvbnN0IElQX1RPUyA9IF9JUF9UT1MNCiAgICArY29u
c3QgVENQX01ENVNJRyA9IF9UQ1BfTUQ1U0lHDQogICAgK2NvbnN0IElQVjZfUlRIRFJEU1RPUFRT
ID0gX0lQVjZfUlRIRFJEU1RPUFRTDQogICAgK2NvbnN0IFNPTF9DQUlGID0gX1NPTF9DQUlGDQog
ICAgK2NvbnN0IEVUSF9QX0ROQV9SQyA9IF9FVEhfUF9ETkFfUkMNCiAgICArY29uc3QgRVRIX1Bf
RE5BX1JUID0gX0VUSF9QX0ROQV9SVA0KICAgICtjb25zdCBFVEhfUF9DQUlGID0gX0VUSF9QX0NB
SUYNCiAgICArY29uc3QgSVBfUkVDVlRPUyA9IF9JUF9SRUNWVE9TDQogICAgK2NvbnN0IEVUSF9U
TEVOID0gX0VUSF9UTEVODQogICAgK2NvbnN0IElQVjZfTkVYVEhPUCA9IF9JUFY2X05FWFRIT1AN
CiAgICArY29uc3QgQUZfQVRNU1ZDID0gX0FGX0FUTVNWQw0KICAgICtjb25zdCBBUlBIUkRfSVBH
UkUgPSBfQVJQSFJEX0lQR1JFDQogICAgK2NvbnN0IElOX0NMQVNTQV9ORVQgPSBfSU5fQ0xBU1NB
X05FVA0KICAgICtjb25zdCBJUFY2X0xFQVZFX0FOWUNBU1QgPSBfSVBWNl9MRUFWRV9BTllDQVNU
DQogICAgK2NvbnN0IEFGX0lTRE4gPSBfQUZfSVNETg0KICAgICtjb25zdCBBUlBIUkRfTk9ORSA9
IF9BUlBIUkRfTk9ORQ0KICAgICtjb25zdCBBUlBIUkRfQklGID0gX0FSUEhSRF9CSUYNCiAgICAr
Y29uc3QgSVBWNl8yMjkyRFNUT1BUUyA9IF9JUFY2XzIyOTJEU1RPUFRTDQogICAgK2NvbnN0IFRD
UF9DTE9TRSA9IF9UQ1BfQ0xPU0UNCiAgICArY29uc3QgU09fQVRUQUNIX0JQRiA9IF9TT19BVFRB
Q0hfQlBGDQogICAgK2NvbnN0IEFSUEhSRF9DSEFPUyA9IF9BUlBIUkRfQ0hBT1MNCiAgICArY29u
c3QgRVRIX1BfQkFUTUFOID0gX0VUSF9QX0JBVE1BTg0KICAgICtjb25zdCBJUF9UVEwgPSBfSVBf
VFRMDQogICAgK2NvbnN0IEFGX05FVFJPTSA9IF9BRl9ORVRST00NCiAgICArY29uc3QgRVRIX1Bf
VFJfODAyXzIgPSBfRVRIX1BfVFJfODAyXzINCiAgICArY29uc3QgRVRIX1BfQUxMID0gX0VUSF9Q
X0FMTA0KICAgICtjb25zdCBFVEhfUF9DQU4gPSBfRVRIX1BfQ0FODQogICAgK2NvbnN0IEVUSF9Q
X01QTFNfTUMgPSBfRVRIX1BfTVBMU19NQw0KICAgICtjb25zdCBTT19TRUNVUklUWV9FTkNSWVBU
SU9OX1RSQU5TUE9SVCA9IF9TT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVA0KICAgICtj
b25zdCBFVEhfUF9EU0EgPSBfRVRIX1BfRFNBDQogICAgK2NvbnN0IElQX1JFQ1ZUVEwgPSBfSVBf
UkVDVlRUTA0KICAgICtjb25zdCBBRl9FQ09ORVQgPSBfQUZfRUNPTkVUDQogICAgK2NvbnN0IEVU
SF9QX0FPRSA9IF9FVEhfUF9BT0UNCiAgICArY29uc3QgSVBfWEZSTV9QT0xJQ1kgPSBfSVBfWEZS
TV9QT0xJQ1kNCiAgICArY29uc3QgVENQX0ZJTl9XQUlUMiA9IF9UQ1BfRklOX1dBSVQyDQogICAg
K2NvbnN0IEVUSF9QX1hEU0EgPSBfRVRIX1BfWERTQQ0KICAgICtjb25zdCBJUF9QTVRVRElTQyA9
IF9JUF9QTVRVRElTQw0KICAgICtjb25zdCBUQ1BfTVNTX0RFRkFVTFQgPSBfVENQX01TU19ERUZB
VUxUDQogICAgK2NvbnN0IEFGX0NBTiA9IF9BRl9DQU4NCiAgICArY29uc3QgU09fVElNRVNUQU1Q
ID0gX1NPX1RJTUVTVEFNUA0KICAgICtjb25zdCBTT19ET05UUk9VVEUgPSBfU09fRE9OVFJPVVRF
DQogICAgK2NvbnN0IFRDUF9TRU5EX1FVRVVFID0gX1RDUF9TRU5EX1FVRVVFDQogICAgK2NvbnN0
IFNPX1BBU1NTRUMgPSBfU09fUEFTU1NFQw0KICAgICtjb25zdCBUQ1BfTk9UU0VOVF9MT1dBVCA9
IF9UQ1BfTk9UU0VOVF9MT1dBVA0KICAgICtjb25zdCBTT0xfRENDUCA9IF9TT0xfRENDUA0KICAg
ICtjb25zdCBFVEhfUF9BUlAgPSBfRVRIX1BfQVJQDQogICAgK2NvbnN0IFNPX1BFRVJDUkVEID0g
X1NPX1BFRVJDUkVEDQogICAgK2NvbnN0IElQVjZfSk9JTl9BTllDQVNUID0gX0lQVjZfSk9JTl9B
TllDQVNUDQogICAgK2NvbnN0IElQX1JPVVRFUl9BTEVSVCA9IF9JUF9ST1VURVJfQUxFUlQNCiAg
ICArY29uc3QgU09fU0VDVVJJVFlfQVVUSEVOVElDQVRJT04gPSBfU09fU0VDVVJJVFlfQVVUSEVO
VElDQVRJT04NCiAgICArY29uc3QgSVBWNl9NVUxUSUNBU1RfSUYgPSBfSVBWNl9NVUxUSUNBU1Rf
SUYNCiAgICArY29uc3QgU09fTUFYX1BBQ0lOR19SQVRFID0gX1NPX01BWF9QQUNJTkdfUkFURQ0K
ICAgICtjb25zdCBBUlBIUkRfSUVFRTgwMjE1NF9QSFkgPSBfQVJQSFJEX0lFRUU4MDIxNTRfUEhZ
DQogICAgK2NvbnN0IEFSUEhSRF9ETENJID0gX0FSUEhSRF9ETENJDQogICAgK2NvbnN0IEVUSF9Q
X0ZJUCA9IF9FVEhfUF9GSVANCiAgICArY29uc3QgRVRIX1BfV0NDUCA9IF9FVEhfUF9XQ0NQDQog
ICAgK2NvbnN0IEFSUEhSRF9SQVdIRExDID0gX0FSUEhSRF9SQVdIRExDDQogICAgK2NvbnN0IEFG
X0lVQ1YgPSBfQUZfSVVDVg0KICAgICtjb25zdCBUQ1BfRkFTVE9QRU5fQ09OTkVDVCA9IF9UQ1Bf
RkFTVE9QRU5fQ09OTkVDVA0KICAgICtjb25zdCBJUFY2X1JFQ1ZIT1BPUFRTID0gX0lQVjZfUkVD
VkhPUE9QVFMNCiAgICArY29uc3QgRVRIX1BfTVBMU19VQyA9IF9FVEhfUF9NUExTX1VDDQogICAg
K2NvbnN0IElQX0JMT0NLX1NPVVJDRSA9IF9JUF9CTE9DS19TT1VSQ0UNCiAgICArY29uc3QgVENQ
X01TU19ERVNJUkVEID0gX1RDUF9NU1NfREVTSVJFRA0KICAgICtjb25zdCBTT19CU0RDT01QQVQg
PSBfU09fQlNEQ09NUEFUDQogICAgK2NvbnN0IEFGX01BWCA9IF9BRl9NQVgNCiAgICArY29uc3Qg
RVRIX1BfSUVFRVBVUEFUID0gX0VUSF9QX0lFRUVQVVBBVA0KICAgICtjb25zdCBJUFBST1RPX0VH
UCA9IF9JUFBST1RPX0VHUA0KICAgICtjb25zdCBJUF9NQVhQQUNLRVQgPSBfSVBfTUFYUEFDS0VU
DQogICAgK2NvbnN0IEVUSF9QX1gyNSA9IF9FVEhfUF9YMjUNCiAgICArY29uc3QgRVRIX1BfQUZf
SVVDViA9IF9FVEhfUF9BRl9JVUNWDQogICAgK2NvbnN0IFNPTF9ERUNORVQgPSBfU09MX0RFQ05F
VA0KICAgICtjb25zdCBTT19ERVRBQ0hfRklMVEVSID0gX1NPX0RFVEFDSF9GSUxURVINCiAgICAr
Y29uc3QgSU5fQ0xBU1NCX01BWCA9IF9JTl9DTEFTU0JfTUFYDQogICAgK2NvbnN0IElQX0hEUklO
Q0wgPSBfSVBfSERSSU5DTA0KICAgICtjb25zdCBUQ1BfQ0FfUmVjb3ZlcnkgPSBfVENQX0NBX1Jl
Y292ZXJ5DQogICAgK2NvbnN0IElOX0NMQVNTQV9IT1NUID0gX0lOX0NMQVNTQV9IT1NUDQogICAg
K2NvbnN0IElQVjZfUEFUSE1UVSA9IF9JUFY2X1BBVEhNVFUNCiAgICArY29uc3QgU09DS19SRE0g
PSBfU09DS19SRE0NCiAgICArY29uc3QgRVRIX1BfSVAgPSBfRVRIX1BfSVANCiAgICArY29uc3Qg
VENQX05PX1FVRVVFID0gX1RDUF9OT19RVUVVRQ0KICAgICtjb25zdCBJTl9ET05UX0ZPTExPVyA9
IF9JTl9ET05UX0ZPTExPVw0KICAgICtjb25zdCBJUFY2X01JTkhPUENPVU5UID0gX0lQVjZfTUlO
SE9QQ09VTlQNCiAgICArY29uc3QgSVBWNl9QTVRVRElTQ19JTlRFUkZBQ0UgPSBfSVBWNl9QTVRV
RElTQ19JTlRFUkZBQ0UNCiAgICArY29uc3QgSVBWNl9NVFVfRElTQ09WRVIgPSBfSVBWNl9NVFVf
RElTQ09WRVINCiAgICArY29uc3QgQVJQSFJEX0ZEREkgPSBfQVJQSFJEX0ZEREkNCiAgICArY29u
c3QgSVBWNl9BRERSX1BSRUZFUkVOQ0VTID0gX0lQVjZfQUREUl9QUkVGRVJFTkNFUw0KICAgICtj
b25zdCBFVEhfUF84MDJfMiA9IF9FVEhfUF84MDJfMg0KICAgICtjb25zdCBFVEhfUF84MDJfMyA9
IF9FVEhfUF84MDJfMw0KICAgICtjb25zdCBTT19FUlJPUiA9IF9TT19FUlJPUg0KICAgICtjb25z
dCBJUFY2X0hPUExJTUlUID0gX0lQVjZfSE9QTElNSVQNCiAgICArY29uc3QgRVRIX1BfUEFFID0g
X0VUSF9QX1BBRQ0KICAgICtjb25zdCBJUF9NSU5UVEwgPSBfSVBfTUlOVFRMDQogICAgK2NvbnN0
IEVUSF9QX1BBVVNFID0gX0VUSF9QX1BBVVNFDQogICAgK2NvbnN0IElOX0NMQVNTQl9ORVQgPSBf
SU5fQ0xBU1NCX05FVA0KICAgICtjb25zdCBTT19ERUJVRyA9IF9TT19ERUJVRw0KICAgICtjb25z
dCBJUFBST1RPX1VEUCA9IF9JUFBST1RPX1VEUA0KICAgICtjb25zdCBBUlBIUkRfUFBQID0gX0FS
UEhSRF9QUFANCiAgICArY29uc3QgQUZfSUIgPSBfQUZfSUINCiAgICArY29uc3QgQUZfSVJEQSA9
IF9BRl9JUkRBDQogICAgK2NvbnN0IElQX01TUyA9IF9JUF9NU1MNCiAgICArY29uc3QgSVBWNl9E
T05URlJBRyA9IF9JUFY2X0RPTlRGUkFHDQogICAgK2NvbnN0IElQUFJPVE9fU0NUUCA9IF9JUFBS
T1RPX1NDVFANCiAgICArY29uc3QgSVBfT0ZGTUFTSyA9IF9JUF9PRkZNQVNLDQogICAgK2NvbnN0
IElQX1JFQ1ZPUklHRFNUQUREUiA9IF9JUF9SRUNWT1JJR0RTVEFERFINCiAgICArY29uc3QgRVRI
X1BfTUFDU0VDID0gX0VUSF9QX01BQ1NFQw0KICAgICtjb25zdCBUQ1BfQ09PS0lFX1BBSVJfU0la
RSA9IF9UQ1BfQ09PS0lFX1BBSVJfU0laRQ0KICAgICtjb25zdCBFVEhfUF9URUIgPSBfRVRIX1Bf
VEVCDQogICAgK2NvbnN0IFRDUF9SRUNWX1FVRVVFID0gX1RDUF9SRUNWX1FVRVVFDQogICAgK2Nv
bnN0IEFGX0FQUExFVEFMSyA9IF9BRl9BUFBMRVRBTEsNCiAgICArY29uc3QgU09fU0VDVVJJVFlf
RU5DUllQVElPTl9ORVRXT1JLID0gX1NPX1NFQ1VSSVRZX0VOQ1JZUFRJT05fTkVUV09SSw0KICAg
ICtjb25zdCBJTl9DTEFTU0NfTlNISUZUID0gX0lOX0NMQVNTQ19OU0hJRlQNCiAgICArY29uc3Qg
RVRIX1BfUUlOUTEgPSBfRVRIX1BfUUlOUTENCiAgICArY29uc3QgRVRIX1BfUUlOUTIgPSBfRVRI
X1BfUUlOUTINCiAgICArY29uc3QgRVRIX1BfUUlOUTMgPSBfRVRIX1BfUUlOUTMNCiAgICArY29u
c3QgQUZfQVRNUFZDID0gX0FGX0FUTVBWQw0KICAgICtjb25zdCBJUFBST1RPX0VTUCA9IF9JUFBS
T1RPX0VTUA0KICAgICtjb25zdCBFVEhfUF9OU0ggPSBfRVRIX1BfTlNIDQogICAgK2NvbnN0IEVU
SF9QX0NBTkZEID0gX0VUSF9QX0NBTkZEDQogICAgK2NvbnN0IEFGX0RFQ25ldCA9IF9BRl9ERUNu
ZXQNCiAgICArY29uc3QgRVRIX1BfTElOS19DVEwgPSBfRVRIX1BfTElOS19DVEwNCiAgICArY29u
c3QgSVBfT1BUSU9OUyA9IF9JUF9PUFRJT05TDQogICAgK2NvbnN0IElQUFJPVE9fSE9QT1BUUyA9
IF9JUFBST1RPX0hPUE9QVFMNCiAgICArY29uc3QgU09fU05ETE9XQVQgPSBfU09fU05ETE9XQVQN
CiAgICArY29uc3QgU09fVElNRVNUQU1QTlMgPSBfU09fVElNRVNUQU1QTlMNCiAgICArY29uc3Qg
U09fQklORFRPREVWSUNFID0gX1NPX0JJTkRUT0RFVklDRQ0KICAgICtjb25zdCBTT0NLX0NMT0VY
RUMgPSBfU09DS19DTE9FWEVDDQogICAgK2NvbnN0IEVUSF9QX1NOQVAgPSBfRVRIX1BfU05BUA0K
ICAgICtjb25zdCBJUF9VTkJMT0NLX1NPVVJDRSA9IF9JUF9VTkJMT0NLX1NPVVJDRQ0KICAgICtj
b25zdCBTT19QQVNTQ1JFRCA9IF9TT19QQVNTQ1JFRA0KICAgICtjb25zdCBFVEhfUF9XQU5fUFBQ
ID0gX0VUSF9QX1dBTl9QUFANCiAgICArY29uc3QgSU5fRVhDTF9VTkxJTksgPSBfSU5fRVhDTF9V
TkxJTksNCiAgICArY29uc3QgSVBWNl9SWEhPUE9QVFMgPSBfSVBWNl9SWEhPUE9QVFMNCiAgICAr
Y29uc3QgSVBWNl9SRUNWRlJBR1NJWkUgPSBfSVBWNl9SRUNWRlJBR1NJWkUNCiAgICArY29uc3Qg
QUZfUEhPTkVUID0gX0FGX1BIT05FVA0KICAgICtjb25zdCBFVEhfRkNTX0xFTiA9IF9FVEhfRkNT
X0xFTg0KICAgICtjb25zdCBJUFY2X0hPUE9QVFMgPSBfSVBWNl9IT1BPUFRTDQogICAgK2NvbnN0
IFRDUF9RVUVVRV9TRVEgPSBfVENQX1FVRVVFX1NFUQ0KICAgICtjb25zdCBJUFY2X1JUSERSID0g
X0lQVjZfUlRIRFINCiAgICArY29uc3QgSU5fTU9WRSA9IF9JTl9NT1ZFDQogICAgK2NvbnN0IEFS
UEhSRF9JUEREUCA9IF9BUlBIUkRfSVBERFANCiAgICArY29uc3QgSVBWNl9SRUNWRVJSID0gX0lQ
VjZfUkVDVkVSUg0KICAgICtjb25zdCBJUFBST1RPX0lDTVAgPSBfSVBQUk9UT19JQ01QDQogICAg
K2NvbnN0IElQUFJPVE9fUFVQID0gX0lQUFJPVE9fUFVQDQogICAgK2NvbnN0IEVUSF9QX1NMT1cg
PSBfRVRIX1BfU0xPVw0KICAgICtjb25zdCBFVEhfUF9FQ09ORVQgPSBfRVRIX1BfRUNPTkVUDQog
ICAgK2NvbnN0IElQVjZfUkVDVlBLVElORk8gPSBfSVBWNl9SRUNWUEtUSU5GTw0KICAgICtjb25z
dCBUQ1BfTk9ERUxBWSA9IF9UQ1BfTk9ERUxBWQ0KICAgICtjb25zdCBJUFY2X0RST1BfTUVNQkVS
U0hJUCA9IF9JUFY2X0RST1BfTUVNQkVSU0hJUA0KICAgICtjb25zdCBFVEhfUF9JUkRBID0gX0VU
SF9QX0lSREENCiAgICArY29uc3QgVENQX0lORk8gPSBfVENQX0lORk8NCiAgICArY29uc3QgVENQ
X0ZJTl9XQUlUMSA9IF9UQ1BfRklOX1dBSVQxDQogICAgK2NvbnN0IFNPTF9JUCA9IF9TT0xfSVAN
CiAgICArY29uc3QgSU5fTE9PUEJBQ0tORVQgPSBfSU5fTE9PUEJBQ0tORVQNCiAgICArY29uc3Qg
U09MX0FBTCA9IF9TT0xfQUFMDQogICAgK2NvbnN0IElQUFJPVE9fSURQID0gX0lQUFJPVE9fSURQ
DQogICAgK2NvbnN0IEFGX0lORVQgPSBfQUZfSU5FVA0KICAgICtjb25zdCBUQ1BfUkVQQUlSX1FV
RVVFID0gX1RDUF9SRVBBSVJfUVVFVUUNCiAgICArY29uc3QgU09fR0VUX0ZJTFRFUiA9IF9TT19H
RVRfRklMVEVSDQogICAgK2NvbnN0IFNPX0NPT0tJRSA9IF9TT19DT09LSUUNCiAgICArY29uc3Qg
U09fQVRUQUNIX1JFVVNFUE9SVF9DQlBGID0gX1NPX0FUVEFDSF9SRVVTRVBPUlRfQ0JQRg0KICAg
ICtjb25zdCBJUFBST1RPX0dSRSA9IF9JUFBST1RPX0dSRQ0KICAgICtjb25zdCBJUFBST1RPX1RD
UCA9IF9JUFBST1RPX1RDUA0KICAgICtjb25zdCBFVEhfUF9QUlAgPSBfRVRIX1BfUFJQDQogICAg
K2NvbnN0IFRDUF9ERUZFUl9BQ0NFUFQgPSBfVENQX0RFRkVSX0FDQ0VQVA0KICAgICtjb25zdCBF
VEhfREFUQV9MRU4gPSBfRVRIX0RBVEFfTEVODQogICAgK2NvbnN0IFNPX0lOQ09NSU5HX05BUElf
SUQgPSBfU09fSU5DT01JTkdfTkFQSV9JRA0KICAgICtjb25zdCBFVEhfUF9QUFBfRElTQyA9IF9F
VEhfUF9QUFBfRElTQw0KICAgICtjb25zdCBFVEhfUF84MDJfM19NSU4gPSBfRVRIX1BfODAyXzNf
TUlODQogICAgK2NvbnN0IElQVjZfVU5JQ0FTVF9IT1BTID0gX0lQVjZfVU5JQ0FTVF9IT1BTDQog
ICAgK2NvbnN0IElOX01PVkVEX1RPID0gX0lOX01PVkVEX1RPDQogICAgK2NvbnN0IEFGX01QTFMg
PSBfQUZfTVBMUw0KICAgICtjb25zdCBBRl9XQU5QSVBFID0gX0FGX1dBTlBJUEUNCiAgICArY29u
c3QgVENQX1RISU5fTElORUFSX1RJTUVPVVRTID0gX1RDUF9USElOX0xJTkVBUl9USU1FT1VUUw0K
ICAgICtjb25zdCBJUFY2X1JFQ1ZEU1RPUFRTID0gX0lQVjZfUkVDVkRTVE9QVFMNCiAgICArY29u
c3QgQVJQSFJEX1JBV0lQID0gX0FSUEhSRF9SQVdJUA0KICAgICtjb25zdCBFVEhfUF84MDJfRVgx
ID0gX0VUSF9QXzgwMl9FWDENCiAgICArY29uc3QgU09fTE9DS19GSUxURVIgPSBfU09fTE9DS19G
SUxURVINCiAgICArY29uc3QgSVBQUk9UT19NUExTID0gX0lQUFJPVE9fTVBMUw0KICAgICtjb25z
dCBFVEhfUF9JUFY2ID0gX0VUSF9QX0lQVjYNCiAgICArY29uc3QgRVRIX1BfQUFSUCA9IF9FVEhf
UF9BQVJQDQogICAgK2NvbnN0IEFSUEhSRF9MT09QQkFDSyA9IF9BUlBIUkRfTE9PUEJBQ0sNCiAg
ICArY29uc3QgU09fQlJPQURDQVNUID0gX1NPX0JST0FEQ0FTVA0KICAgICtjb25zdCBJTl9DTEFT
U0NfTkVUID0gX0lOX0NMQVNTQ19ORVQNCiAgICArY29uc3QgRVRIX1pMRU4gPSBfRVRIX1pMRU4N
CiAgICArY29uc3QgRVRIX1BfUFVQQVQgPSBfRVRIX1BfUFVQQVQNCiAgICArY29uc3QgSU5fTU9W
RURfRlJPTSA9IF9JTl9NT1ZFRF9GUk9NDQogICAgK2NvbnN0IElQVjZfTEVBVkVfR1JPVVAgPSBf
SVBWNl9MRUFWRV9HUk9VUA0KICAgICtjb25zdCBFVEhfUF9JQk9FID0gX0VUSF9QX0lCT0UNCiAg
ICArY29uc3QgVENQX0VTVEFCTElTSEVEID0gX1RDUF9FU1RBQkxJU0hFRA0KICAgICtjb25zdCBB
UlBIUkRfQVJDTkVUID0gX0FSUEhSRF9BUkNORVQNCiAgICArY29uc3QgRVRIX1BfUFVQID0gX0VU
SF9QX1BVUA0KICAgICtjb25zdCBJUF9SRUNWT1BUUyA9IF9JUF9SRUNWT1BUUw0KICAgICtjb25z
dCBBUlBIUkRfU0lUID0gX0FSUEhSRF9TSVQNCiAgICArY29uc3QgRVRIX1BfVElQQyA9IF9FVEhf
UF9USVBDDQogICAgK2NvbnN0IEFSUEhSRF9QSU1SRUcgPSBfQVJQSFJEX1BJTVJFRw0KICAgICtj
b25zdCBJUFY2X01VTFRJQ0FTVF9IT1BTID0gX0lQVjZfTVVMVElDQVNUX0hPUFMNCiAgICArY29u
c3QgVENQX01ENVNJR19NQVhLRVlMRU4gPSBfVENQX01ENVNJR19NQVhLRVlMRU4NCiAgICArY29u
c3QgSVBWNl9BVVRISERSID0gX0lQVjZfQVVUSEhEUg0KICAgICtjb25zdCBFVEhfQUxFTiA9IF9F
VEhfQUxFTg0KICAgICtjb25zdCBUQ1BfTEFTVF9BQ0sgPSBfVENQX0xBU1RfQUNLDQogICAgK2Nv
bnN0IElQUFJPVE9fTUFYID0gX0lQUFJPVE9fTUFYDQogICAgK2NvbnN0IElOX0RFTEVURV9TRUxG
ID0gX0lOX0RFTEVURV9TRUxGDQogICAgK2NvbnN0IElQX0FERF9TT1VSQ0VfTUVNQkVSU0hJUCA9
IF9JUF9BRERfU09VUkNFX01FTUJFUlNISVANCiAgICArY29uc3QgQUZfQkxVRVRPT1RIID0gX0FG
X0JMVUVUT09USA0KICAgICtjb25zdCBTT0NLX0RDQ1AgPSBfU09DS19EQ0NQDQogICAgK2NvbnN0
IFNPX1BFRVJHUk9VUFMgPSBfU09fUEVFUkdST1VQUw0KICAgICtjb25zdCBTT19LRUVQQUxJVkUg
PSBfU09fS0VFUEFMSVZFDQogICAgK2NvbnN0IEFGX05FVExJTksgPSBfQUZfTkVUTElOSw0KICAg
ICtjb25zdCBJUFY2X0FERFJGT1JNID0gX0lQVjZfQUREUkZPUk0NCiAgICArY29uc3QgRVRIX1Bf
SUZFID0gX0VUSF9QX0lGRQ0KICAgICtjb25zdCBJUFY2X1JFQ1ZIT1BMSU1JVCA9IF9JUFY2X1JF
Q1ZIT1BMSU1JVA0KICAgICtjb25zdCBJUF9NVFUgPSBfSVBfTVRVDQogICAgK2NvbnN0IFNPTF9B
TEcgPSBfU09MX0FMRw0KICAgICtjb25zdCBBUlBIUkRfQVgyNSA9IF9BUlBIUkRfQVgyNQ0KICAg
ICtjb25zdCBTT0xfS0NNID0gX1NPTF9LQ00NCiAgICArY29uc3QgQUZfUFBQT1ggPSBfQUZfUFBQ
T1gNCiAgICArY29uc3QgQVJQSFJEX1NLSVAgPSBfQVJQSFJEX1NLSVANCiAgICArY29uc3QgSVBW
Nl8yMjkyUlRIRFIgPSBfSVBWNl8yMjkyUlRIRFINCiAgICArY29uc3QgU09DS19TVFJFQU0gPSBf
U09DS19TVFJFQU0NCiAgICArY29uc3QgRVRIX0hMRU4gPSBfRVRIX0hMRU4NCiAgICArY29uc3Qg
QVJQSFJEX0REQ01QID0gX0FSUEhSRF9ERENNUA0KICAgICtjb25zdCBJUFY2X0NIRUNLU1VNID0g
X0lQVjZfQ0hFQ0tTVU0NCiAgICArY29uc3QgRVRIX1BfUFBQX1NFUyA9IF9FVEhfUF9QUFBfU0VT
DQogICAgK2NvbnN0IEFGX1NNQyA9IF9BRl9TTUMNCiAgICArY29uc3QgQVJQSFJEX0lFRUU4MDIg
PSBfQVJQSFJEX0lFRUU4MDINCiAgICArY29uc3QgU09MX1BQUE9MMlRQID0gX1NPTF9QUFBPTDJU
UA0KICAgICtjb25zdCBJTl9PTkxZRElSID0gX0lOX09OTFlESVINCiAgICArY29uc3QgQUZfU05B
ID0gX0FGX1NOQQ0KICAgICtjb25zdCBTT0xfTExDID0gX1NPTF9MTEMNCiAgICArY29uc3QgU09f
TElOR0VSID0gX1NPX0xJTkdFUg0KICAgICtjb25zdCBJUF9VTklDQVNUX0lGID0gX0lQX1VOSUNB
U1RfSUYNCiAgICArY29uc3QgU09fUkNWQlVGRk9SQ0UgPSBfU09fUkNWQlVGRk9SQ0UNCiAgICAr
Y29uc3QgSVBWNl9QS1RJTkZPID0gX0lQVjZfUEtUSU5GTw0KICAgICtjb25zdCBJUFBST1RPX0lQ
SVAgPSBfSVBQUk9UT19JUElQDQogICAgK2NvbnN0IElQVjZfUkVDVlJUSERSID0gX0lQVjZfUkVD
VlJUSERSDQogICAgK2NvbnN0IFRDUF9DQV9PcGVuID0gX1RDUF9DQV9PcGVuDQogICAgK2NvbnN0
IFNPX0JVU1lfUE9MTCA9IF9TT19CVVNZX1BPTEwNCiAgICArY29uc3QgSVBfSVBTRUNfUE9MSUNZ
ID0gX0lQX0lQU0VDX1BPTElDWQ0KICAgICtjb25zdCBTT19NQVJLID0gX1NPX01BUksNCiAgICAr
Y29uc3QgSU5fQ1JFQVRFID0gX0lOX0NSRUFURQ0KICAgICtjb25zdCBBRl9ST1NFID0gX0FGX1JP
U0UNCiAgICArY29uc3QgVENQX0NMT1NFX1dBSVQgPSBfVENQX0NMT1NFX1dBSVQNCiAgICArY29u
c3QgSVBWNl9SRUNWVENMQVNTID0gX0lQVjZfUkVDVlRDTEFTUw0KICAgICtjb25zdCBFVEhfTUlO
X01UVSA9IF9FVEhfTUlOX01UVQ0KICAgICtjb25zdCBBRl9ORVRCRVVJID0gX0FGX05FVEJFVUkN
CiAgICArY29uc3QgSVBfRlJFRUJJTkQgPSBfSVBfRlJFRUJJTkQNCiAgICArY29uc3QgSU5fQ0xB
U1NBX01BWCA9IF9JTl9DTEFTU0FfTUFYDQogICAgK2NvbnN0IEFSUEhSRF9JRUVFODAyX1RSID0g
X0FSUEhSRF9JRUVFODAyX1RSDQogICAgK2NvbnN0IElOX0NMT1NFX1dSSVRFID0gX0lOX0NMT1NF
X1dSSVRFDQogICAgK2NvbnN0IFNPTF9BVE0gPSBfU09MX0FUTQ0KICAgICtjb25zdCBBRl9GSUxF
ID0gX0FGX0ZJTEUNCiAgICArY29uc3QgU09MX05GQyA9IF9TT0xfTkZDDQogICAgK2NvbnN0IEFG
X1JYUlBDID0gX0FGX1JYUlBDDQogICAgK2NvbnN0IElOX0NMQVNTQl9IT1NUID0gX0lOX0NMQVNT
Ql9IT1NUDQogICAgK2NvbnN0IElQVjZfUlhEU1RPUFRTID0gX0lQVjZfUlhEU1RPUFRTDQogICAg
K2NvbnN0IEVUSF9QX01WUlAgPSBfRVRIX1BfTVZSUA0KICAgICtjb25zdCBFVEhfUF9JUFggPSBf
RVRIX1BfSVBYDQogICAgK2NvbnN0IFNPX1BFRVJTRUMgPSBfU09fUEVFUlNFQw0KICAgICtjb25z
dCBUQ1BfQ09PS0lFX0lOX0FMV0FZUyA9IF9UQ1BfQ09PS0lFX0lOX0FMV0FZUw0KICAgICtjb25z
dCBJUFY2X0RTVE9QVFMgPSBfSVBWNl9EU1RPUFRTDQogICAgK2NvbnN0IFRDUF9NRDVTSUdfRVhU
ID0gX1RDUF9NRDVTSUdfRVhUDQogICAgK2NvbnN0IElQX01UVV9ESVNDT1ZFUiA9IF9JUF9NVFVf
RElTQ09WRVINCiAgICArY29uc3QgSU5fTk9OQkxPQ0sgPSBfSU5fTk9OQkxPQ0sNCiAgICArY29u
c3QgRVRIX01BWF9NVFUgPSBfRVRIX01BWF9NVFUNCiAgICArY29uc3QgRVRIX1BfUEhPTkVUID0g
X0VUSF9QX1BIT05FVA0KICAgICtjb25zdCBJUFY2X1JUSERSX0xPT1NFID0gX0lQVjZfUlRIRFJf
TE9PU0UNCiAgICArY29uc3QgSVBWNl8yMjkyUEtUT1BUSU9OUyA9IF9JUFY2XzIyOTJQS1RPUFRJ
T05TDQogICAgK2NvbnN0IElQUFJPVE9fSUNNUFY2ID0gX0lQUFJPVE9fSUNNUFY2DQogICAgK2Nv
bnN0IEVUSF9QX0FUQUxLID0gX0VUSF9QX0FUQUxLDQogICAgK2NvbnN0IElQX0RST1BfTUVNQkVS
U0hJUCA9IF9JUF9EUk9QX01FTUJFUlNISVANCiAgICArY29uc3QgSU5fQ0xPU0UgPSBfSU5fQ0xP
U0UNCiAgICArY29uc3QgU09fUEVFS19PRkYgPSBfU09fUEVFS19PRkYNCiAgICArY29uc3QgU09f
UkNWQlVGID0gX1NPX1JDVkJVRg0KICAgICtjb25zdCBTT19TRUxFQ1RfRVJSX1FVRVVFID0gX1NP
X1NFTEVDVF9FUlJfUVVFVUUNCiAgICArY29uc3QgU09DS19OT05CTE9DSyA9IF9TT0NLX05PTkJM
T0NLDQogICAgK2NvbnN0IElQX01VTFRJQ0FTVF9BTEwgPSBfSVBfTVVMVElDQVNUX0FMTA0KICAg
ICtjb25zdCBBUlBIUkRfRUVUSEVSID0gX0FSUEhSRF9FRVRIRVINCiAgICArY29uc3QgVENQX1JF
UEFJUl9XSU5ET1cgPSBfVENQX1JFUEFJUl9XSU5ET1cNCiAgICArY29uc3QgSU5fT1BFTiA9IF9J
Tl9PUEVODQogICAgK2NvbnN0IEVUSF9QX1RTTiA9IF9FVEhfUF9UU04NCiAgICArY29uc3QgRVRI
X1BfQ09OVFJPTCA9IF9FVEhfUF9DT05UUk9MDQogICAgK2NvbnN0IEVUSF9QX0VSU1BBTiA9IF9F
VEhfUF9FUlNQQU4NCiAgICArY29uc3QgVENQX1VMUCA9IF9UQ1BfVUxQDQogICAgK2NvbnN0IElQ
UFJPVE9fQkVFVFBIID0gX0lQUFJPVE9fQkVFVFBIDQogICAgK2NvbnN0IEFSUEhSRF9DSVNDTyA9
IF9BUlBIUkRfQ0lTQ08NCiAgICArY29uc3QgSVBQUk9UT19EU1RPUFRTID0gX0lQUFJPVE9fRFNU
T1BUUw0KICAgICtjb25zdCBBRl9BTEcgPSBfQUZfQUxHDQogICAgK2NvbnN0IFNPX1JDVkxPV0FU
ID0gX1NPX1JDVkxPV0FUDQogICAgK2NvbnN0IEVUSF9QX01BUCA9IF9FVEhfUF9NQVANCiAgICAr
Y29uc3QgSVBQUk9UT19BSCA9IF9JUFBST1RPX0FIDQogICAgK2NvbnN0IElOX0RFTEVURSA9IF9J
Tl9ERUxFVEUNCiAgICArY29uc3QgRVRIX1BfUkFSUCA9IF9FVEhfUF9SQVJQDQogICAgK2NvbnN0
IFNPX1JFVVNFUE9SVCA9IF9TT19SRVVTRVBPUlQNCiAgICArY29uc3QgVENQX1JFUEFJUiA9IF9U
Q1BfUkVQQUlSDQogICAgK2NvbnN0IEFGX1RJUEMgPSBfQUZfVElQQw0KICAgICtjb25zdCBTT0xf
SVVDViA9IF9TT0xfSVVDVg0KICAgICtjb25zdCBJUF9EUk9QX1NPVVJDRV9NRU1CRVJTSElQID0g
X0lQX0RST1BfU09VUkNFX01FTUJFUlNISVANCiAgICArY29uc3QgQVJQSFJEX01FVFJJQ09NID0g
X0FSUEhSRF9NRVRSSUNPTQ0KICAgICtjb25zdCBJUFY2X1JUSERSX1RZUEVfMCA9IF9JUFY2X1JU
SERSX1RZUEVfMA0KICAgICtjb25zdCBJUFY2X0lQU0VDX1BPTElDWSA9IF9JUFY2X0lQU0VDX1BP
TElDWQ0KICAgICtjb25zdCBBRl9MTEMgPSBfQUZfTExDDQogICAgK2NvbnN0IFNPX1NOREJVRkZP
UkNFID0gX1NPX1NOREJVRkZPUkNFDQogICAgK2NvbnN0IEFSUEhSRF9BUFBMRVRMSyA9IF9BUlBI
UkRfQVBQTEVUTEsNCiAgICArY29uc3QgSU5fQ0xPU0VfTk9XUklURSA9IF9JTl9DTE9TRV9OT1dS
SVRFDQogICAgK2NvbnN0IEVUSF9QX0REQ01QID0gX0VUSF9QX0REQ01QDQogICAgK2NvbnN0IElQ
X0RGID0gX0lQX0RGDQogICAgK2NvbnN0IFNPX1NOREJVRiA9IF9TT19TTkRCVUYNCiAgICArY29u
c3QgQVJQSFJEX0FUTSA9IF9BUlBIUkRfQVRNDQogICAgK2NvbnN0IEVUSF9GUkFNRV9MRU4gPSBf
RVRIX0ZSQU1FX0xFTg0KICAgICtjb25zdCBBUlBIUkRfSUVFRTEzOTQgPSBfQVJQSFJEX0lFRUUx
Mzk0DQogICAgK2NvbnN0IElOX0FDQ0VTUyA9IF9JTl9BQ0NFU1MNCiAgICArY29uc3QgVENQX1VT
RVJfVElNRU9VVCA9IF9UQ1BfVVNFUl9USU1FT1VUDQogICAgK2NvbnN0IEFSUEhSRF9JRUVFODAy
MTEgPSBfQVJQSFJEX0lFRUU4MDIxMQ0KICAgICtjb25zdCBFVEhfUF9URExTID0gX0VUSF9QX1RE
TFMNCiAgICArY29uc3QgSVBfT1JJR0RTVEFERFIgPSBfSVBfT1JJR0RTVEFERFINCiAgICArY29u
c3QgRVRIX1BfU0NBID0gX0VUSF9QX1NDQQ0KICAgICtjb25zdCBJUF9QTVRVRElTQ19PTUlUID0g
X0lQX1BNVFVESVNDX09NSVQNCiAgICArY29uc3QgSVBWNl9ST1VURVJfQUxFUlQgPSBfSVBWNl9S
T1VURVJfQUxFUlQNCiAgICArY29uc3QgSVBWNl9IRFJJTkNMID0gX0lQVjZfSERSSU5DTA0KICAg
ICtjb25zdCBBRl9BU0ggPSBfQUZfQVNIDQogICAgK2NvbnN0IElQX1BNVFVESVNDX0RPTlQgPSBf
SVBfUE1UVURJU0NfRE9OVA0KICAgICtjb25zdCBJUFY2X0pPSU5fR1JPVVAgPSBfSVBWNl9KT0lO
X0dST1VQDQogICAgK2NvbnN0IFNPX1RZUEUgPSBfU09fVFlQRQ0KICAgICtjb25zdCBJUFBST1RP
X0lQID0gX0lQUFJPVE9fSVANCiAgICArY29uc3QgU09fSU5DT01JTkdfQ1BVID0gX1NPX0lOQ09N
SU5HX0NQVQ0KICAgICtjb25zdCBUQ1BfV0lORE9XX0NMQU1QID0gX1RDUF9XSU5ET1dfQ0xBTVAN
CiAgICArY29uc3QgU09fUlhRX09WRkwgPSBfU09fUlhRX09WRkwNCiAgICArY29uc3QgSU5fQ0xP
RVhFQyA9IF9JTl9DTE9FWEVDDQogICAgK2NvbnN0IElQUFJPVE9fQ09NUCA9IF9JUFBST1RPX0NP
TVANCiAgICArY29uc3QgU09fQlBGX0VYVEVOU0lPTlMgPSBfU09fQlBGX0VYVEVOU0lPTlMNCiAg
ICArY29uc3QgSVBWNl9NVFUgPSBfSVBWNl9NVFUNCiAgICArY29uc3QgQVJQSFJEX0ZDQUwgPSBf
QVJQSFJEX0ZDQUwNCiAgICArY29uc3QgSU5fUV9PVkVSRkxPVyA9IF9JTl9RX09WRVJGTE9XDQog
ICAgK2NvbnN0IFRDUF9USU1FX1dBSVQgPSBfVENQX1RJTUVfV0FJVA0KICAgICtjb25zdCBBRl9T
RUNVUklUWSA9IF9BRl9TRUNVUklUWQ0KICAgICtjb25zdCBUQ1BfRkFTVE9QRU4gPSBfVENQX0ZB
U1RPUEVODQogICAgK2NvbnN0IEFGX05GQyA9IF9BRl9ORkMNCiAgICArY29uc3QgSVBWNl9UUkFO
U1BBUkVOVCA9IF9JUFY2X1RSQU5TUEFSRU5UDQogICAgK2NvbnN0IFNPTF9SQVcgPSBfU09MX1JB
Vw0KICAgICtjb25zdCBJUF9QQVNTU0VDID0gX0lQX1BBU1NTRUMNCiAgICArY29uc3QgVENQX0NP
T0tJRV9NSU4gPSBfVENQX0NPT0tJRV9NSU4NCiAgICArY29uc3QgSU5fTU9ESUZZID0gX0lOX01P
RElGWQ0KICAgICtjb25zdCBUQ1BfQ09SSyA9IF9UQ1BfQ09SSw0KICAgICtjb25zdCBUQ1BfS0VF
UElOVFZMID0gX1RDUF9LRUVQSU5UVkwNCiAgICArY29uc3QgSU5fSUdOT1JFRCA9IF9JTl9JR05P
UkVEDQogICAgK2NvbnN0IElQUFJPVE9fTUggPSBfSVBQUk9UT19NSA0KICAgICtjb25zdCBTT0xf
UEFDS0VUID0gX1NPTF9QQUNLRVQNCiAgICArY29uc3QgSVBQUk9UT19QSU0gPSBfSVBQUk9UT19Q
SU0NCiAgICArY29uc3QgU09fUkVVU0VBRERSID0gX1NPX1JFVVNFQUREUg0KICAgICtjb25zdCBU
Q1BfQ0FfTG9zcyA9IF9UQ1BfQ0FfTG9zcw0KICAgICtjb25zdCBTT0xfTkVUTElOSyA9IF9TT0xf
TkVUTElOSw0KICAgICtjb25zdCBBUlBIUkRfUlNSVkQgPSBfQVJQSFJEX1JTUlZEDQogICAgK2Nv
bnN0IEVUSF9QX0JQUSA9IF9FVEhfUF9CUFENCiAgICArY29uc3QgVENQX1RJTUVTVEFNUCA9IF9U
Q1BfVElNRVNUQU1QDQogICAgK2NvbnN0IFRDUF9DQ19JTkZPID0gX1RDUF9DQ19JTkZPDQogICAg
K2NvbnN0IEVUSF9QX0RFQyA9IF9FVEhfUF9ERUMNCiAgICArY29uc3QgU09MX1JEUyA9IF9TT0xf
UkRTDQogICAgK2NvbnN0IElQUFJPVE9fUlNWUCA9IF9JUFBST1RPX1JTVlANCiAgICArY29uc3Qg
QVJQSFJEX1RVTk5FTCA9IF9BUlBIUkRfVFVOTkVMDQogICAgK2NvbnN0IFRDUF9LRUVQQ05UID0g
X1RDUF9LRUVQQ05UDQogICAgK2NvbnN0IFRDUF9TWU5fUkVDViA9IF9UQ1BfU1lOX1JFQ1YNCiAg
ICArY29uc3QgVENQX0NBX0Rpc29yZGVyID0gX1RDUF9DQV9EaXNvcmRlcg0KICAgICtjb25zdCBJ
UF9NRiA9IF9JUF9NRg0KICAgICtjb25zdCBBUlBIUkRfUFJPTkVUID0gX0FSUEhSRF9QUk9ORVQN
CiAgICArY29uc3QgU09DS19QQUNLRVQgPSBfU09DS19QQUNLRVQNCiAgICArY29uc3QgSU5fSVNE
SVIgPSBfSU5fSVNESVINCiAgICArY29uc3QgQUZfQlJJREdFID0gX0FGX0JSSURHRQ0KICAgICtj
b25zdCBJUFY2X1BNVFVESVNDX09NSVQgPSBfSVBWNl9QTVRVRElTQ19PTUlUDQogICAgK2NvbnN0
IEFSUEhSRF9UVU5ORUw2ID0gX0FSUEhSRF9UVU5ORUw2DQogICAgK2NvbnN0IFNPTF9SWFJQQyA9
IF9TT0xfUlhSUEMNCiAgICArY29uc3QgVENQX0tFRVBJRExFID0gX1RDUF9LRUVQSURMRQ0KICAg
ICtjb25zdCBFVEhfUF9BWDI1ID0gX0VUSF9QX0FYMjUNCiAgICArY29uc3QgSVBWNl9GUkVFQklO
RCA9IF9JUFY2X0ZSRUVCSU5EDQogICAgK2NvbnN0IEFSUEhSRF9IRExDID0gX0FSUEhSRF9IRExD
DQogICAgK2NvbnN0IEVUSF9QX0lFRUVQVVAgPSBfRVRIX1BfSUVFRVBVUA0KICAgICtjb25zdCBJ
Tl9DTEFTU0FfTlNISUZUID0gX0lOX0NMQVNTQV9OU0hJRlQNCiAgICArY29uc3QgSVBQUk9UT19N
VFAgPSBfSVBQUk9UT19NVFANCiAgICArY29uc3QgU09NQVhDT05OID0gX1NPTUFYQ09OTg0KICAg
ICtjb25zdCBTSFVUX1JEID0gX1NIVVRfUkQNCiAgICArY29uc3QgU0hVVF9XUiA9IF9TSFVUX1dS
DQogICAgK2NvbnN0IFNIVVRfUkRXUiA9IF9TSFVUX1JEV1INCiAgICArY29uc3QgU0NfRVhQUl9O
RVNUX01BWCA9IF9fU0NfRVhQUl9ORVNUX01BWA0KICAgICtjb25zdCBTQ19MRVZFTDRfQ0FDSEVf
U0laRSA9IF9fU0NfTEVWRUw0X0NBQ0hFX1NJWkUNCiAgICArY29uc3QgU0NfTUVNT1JZX1BST1RF
Q1RJT04gPSBfX1NDX01FTU9SWV9QUk9URUNUSU9ODQogICAgK2NvbnN0IFNDX1RZUEVEX01FTU9S
WV9PQkpFQ1RTID0gX19TQ19UWVBFRF9NRU1PUllfT0JKRUNUUw0KICAgICtjb25zdCBTQ19PUEVO
X01BWCA9IF9fU0NfT1BFTl9NQVgNCiAgICArY29uc3QgU0NfMl9TV19ERVYgPSBfX1NDXzJfU1df
REVWDQogICAgK2NvbnN0IFNDX0FSR19NQVggPSBfX1NDX0FSR19NQVgNCiAgICArY29uc3QgU0Nf
VFJBQ0VfU1lTX01BWCA9IF9fU0NfVFJBQ0VfU1lTX01BWA0KICAgICtjb25zdCBTQ19YT1BFTl9Y
UEczID0gX19TQ19YT1BFTl9YUEczDQogICAgK2NvbnN0IFNDX1hPUEVOX1hQRzQgPSBfX1NDX1hP
UEVOX1hQRzQNCiAgICArY29uc3QgU0NfQkFTRSA9IF9fU0NfQkFTRQ0KICAgICtjb25zdCBTQ19U
SFJFQURfUk9CVVNUX1BSSU9fUFJPVEVDVCA9IF9fU0NfVEhSRUFEX1JPQlVTVF9QUklPX1BST1RF
Q1QNCiAgICArY29uc3QgU0NfTkxfTEFOR01BWCA9IF9fU0NfTkxfTEFOR01BWA0KICAgICtjb25z
dCBTQ19SRUFMVElNRV9TSUdOQUxTID0gX19TQ19SRUFMVElNRV9TSUdOQUxTDQogICAgK2NvbnN0
IFNDX0xFVkVMMV9EQ0FDSEVfQVNTT0MgPSBfX1NDX0xFVkVMMV9EQ0FDSEVfQVNTT0MNCiAgICAr
Y29uc3QgU0NfTlBST0NFU1NPUlNfT05MTiA9IF9fU0NfTlBST0NFU1NPUlNfT05MTg0KICAgICtj
b25zdCBTQ19MRVZFTDFfSUNBQ0hFX0xJTkVTSVpFID0gX19TQ19MRVZFTDFfSUNBQ0hFX0xJTkVT
SVpFDQogICAgK2NvbnN0IFNDXzJfQ19WRVJTSU9OID0gX19TQ18yX0NfVkVSU0lPTg0KICAgICtj
b25zdCBTQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TID0gX19TQ19USFJFQURfREVTVFJV
Q1RPUl9JVEVSQVRJT05TDQogICAgK2NvbnN0IFNDX1BSSU9SSVRZX1NDSEVEVUxJTkcgPSBfX1ND
X1BSSU9SSVRZX1NDSEVEVUxJTkcNCiAgICArY29uc3QgU0NfSU5UX01BWCA9IF9fU0NfSU5UX01B
WA0KICAgICtjb25zdCBTQ19YT1BFTl9DUllQVCA9IF9fU0NfWE9QRU5fQ1JZUFQNCiAgICArY29u
c3QgU0NfVjZfTFBCSUdfT0ZGQklHID0gX19TQ19WNl9MUEJJR19PRkZCSUcNCiAgICArY29uc3Qg
U0NfVUlPX01BWElPViA9IF9fU0NfVUlPX01BWElPVg0KICAgICtjb25zdCBTQ19UUkFDRV9VU0VS
X0VWRU5UX01BWCA9IF9fU0NfVFJBQ0VfVVNFUl9FVkVOVF9NQVgNCiAgICArY29uc3QgU0NfQ09M
TF9XRUlHSFRTX01BWCA9IF9fU0NfQ09MTF9XRUlHSFRTX01BWA0KICAgICtjb25zdCBTQ19USFJF
QURfQ1BVVElNRSA9IF9fU0NfVEhSRUFEX0NQVVRJTUUNCiAgICArY29uc3QgU0NfQkNfU1RSSU5H
X01BWCA9IF9fU0NfQkNfU1RSSU5HX01BWA0KICAgICtjb25zdCBTQ19HRVRQV19SX1NJWkVfTUFY
ID0gX19TQ19HRVRQV19SX1NJWkVfTUFYDQogICAgK2NvbnN0IFNDX1RIUkVBRF9BVFRSX1NUQUNL
U0laRSA9IF9fU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFDQogICAgK2NvbnN0IFNDX0lOVF9NSU4g
PSBfX1NDX0lOVF9NSU4NCiAgICArY29uc3QgU0NfVjZfTFA2NF9PRkY2NCA9IF9fU0NfVjZfTFA2
NF9PRkY2NA0KICAgICtjb25zdCBTQ19DSEFSX01BWCA9IF9fU0NfQ0hBUl9NQVgNCiAgICArY29u
c3QgU0NfQURWSVNPUllfSU5GTyA9IF9fU0NfQURWSVNPUllfSU5GTw0KICAgICtjb25zdCBTQ19U
UkFDRSA9IF9fU0NfVFJBQ0UNCiAgICArY29uc3QgU0NfU0hSVF9NQVggPSBfX1NDX1NIUlRfTUFY
DQogICAgK2NvbnN0IFNDXzJfUEJTX01FU1NBR0UgPSBfX1NDXzJfUEJTX01FU1NBR0UNCiAgICAr
Y29uc3QgU0NfVVNFUl9HUk9VUFMgPSBfX1NDX1VTRVJfR1JPVVBTDQogICAgK2NvbnN0IFNDX0NI
QVJfQklUID0gX19TQ19DSEFSX0JJVA0KICAgICtjb25zdCBTQ19TSEFSRURfTUVNT1JZX09CSkVD
VFMgPSBfX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUw0KICAgICtjb25zdCBTQ19SRV9EVVBfTUFY
ID0gX19TQ19SRV9EVVBfTUFYDQogICAgK2NvbnN0IFNDX1BJSV9JTlRFUk5FVCA9IF9fU0NfUElJ
X0lOVEVSTkVUDQogICAgK2NvbnN0IFNDX0pPQl9DT05UUk9MID0gX19TQ19KT0JfQ09OVFJPTA0K
ICAgICtjb25zdCBTQ19GU1lOQyA9IF9fU0NfRlNZTkMNCiAgICArY29uc3QgU0NfWEJTNV9JTFAz
Ml9PRkYzMiA9IF9fU0NfWEJTNV9JTFAzMl9PRkYzMg0KICAgICtjb25zdCBTQ18yX0NfQklORCA9
IF9fU0NfMl9DX0JJTkQNCiAgICArY29uc3QgU0NfQ0hBUl9NSU4gPSBfX1NDX0NIQVJfTUlODQog
ICAgK2NvbnN0IFNDX0JDX0JBU0VfTUFYID0gX19TQ19CQ19CQVNFX01BWA0KICAgICtjb25zdCBT
Q19YT1BFTl9WRVJTSU9OID0gX19TQ19YT1BFTl9WRVJTSU9ODQogICAgK2NvbnN0IFNDX05MX1NF
VE1BWCA9IF9fU0NfTkxfU0VUTUFYDQogICAgK2NvbnN0IFNDX1NIUlRfTUlOID0gX19TQ19TSFJU
X01JTg0KICAgICtjb25zdCBTQ19WNl9JTFAzMl9PRkYzMiA9IF9fU0NfVjZfSUxQMzJfT0ZGMzIN
CiAgICArY29uc3QgU0NfU0VNX05TRU1TX01BWCA9IF9fU0NfU0VNX05TRU1TX01BWA0KICAgICtj
b25zdCBTQ19CQVJSSUVSUyA9IF9fU0NfQkFSUklFUlMNCiAgICArY29uc3QgU0NfV09SRF9CSVQg
PSBfX1NDX1dPUkRfQklUDQogICAgK2NvbnN0IFNDX0xFVkVMMV9JQ0FDSEVfU0laRSA9IF9fU0Nf
TEVWRUwxX0lDQUNIRV9TSVpFDQogICAgK2NvbnN0IFNDX0RFVklDRV9TUEVDSUZJQ19SID0gX19T
Q19ERVZJQ0VfU1BFQ0lGSUNfUg0KICAgICtjb25zdCBTQ19TRUxFQ1QgPSBfX1NDX1NFTEVDVA0K
ICAgICtjb25zdCBTQ19SRUFERVJfV1JJVEVSX0xPQ0tTID0gX19TQ19SRUFERVJfV1JJVEVSX0xP
Q0tTDQogICAgK2NvbnN0IFNDX0FJT19QUklPX0RFTFRBX01BWCA9IF9fU0NfQUlPX1BSSU9fREVM
VEFfTUFYDQogICAgK2NvbnN0IFNDX01PTk9UT05JQ19DTE9DSyA9IF9fU0NfTU9OT1RPTklDX0NM
T0NLDQogICAgK2NvbnN0IFNDX1NQT1JBRElDX1NFUlZFUiA9IF9fU0NfU1BPUkFESUNfU0VSVkVS
DQogICAgK2NvbnN0IFNDX1BJSV9PU0lfQ0xUUyA9IF9fU0NfUElJX09TSV9DTFRTDQogICAgK2Nv
bnN0IFNDX1hPUEVOX1hDVV9WRVJTSU9OID0gX19TQ19YT1BFTl9YQ1VfVkVSU0lPTg0KICAgICtj
b25zdCBTQ19MRVZFTDJfQ0FDSEVfTElORVNJWkUgPSBfX1NDX0xFVkVMMl9DQUNIRV9MSU5FU0la
RQ0KICAgICtjb25zdCBTQ19MRVZFTDJfQ0FDSEVfQVNTT0MgPSBfX1NDX0xFVkVMMl9DQUNIRV9B
U1NPQw0KICAgICtjb25zdCBTQ19MRVZFTDRfQ0FDSEVfTElORVNJWkUgPSBfX1NDX0xFVkVMNF9D
QUNIRV9MSU5FU0laRQ0KICAgICtjb25zdCBTQ19GSUxFX1NZU1RFTSA9IF9fU0NfRklMRV9TWVNU
RU0NCiAgICArY29uc3QgU0NfUElJX09TSV9NID0gX19TQ19QSUlfT1NJX00NCiAgICArY29uc3Qg
U0NfU1lTVEVNX0RBVEFCQVNFX1IgPSBfX1NDX1NZU1RFTV9EQVRBQkFTRV9SDQogICAgK2NvbnN0
IFNDX0ZJTEVfTE9DS0lORyA9IF9fU0NfRklMRV9MT0NLSU5HDQogICAgK2NvbnN0IFNDX1BBU1Nf
TUFYID0gX19TQ19QQVNTX01BWA0KICAgICtjb25zdCBTQ18yX1BCU19MT0NBVEUgPSBfX1NDXzJf
UEJTX0xPQ0FURQ0KICAgICtjb25zdCBTQ19NRU1MT0NLID0gX19TQ19NRU1MT0NLDQogICAgK2Nv
bnN0IFNDX1RIUkVBRF9ST0JVU1RfUFJJT19JTkhFUklUID0gX19TQ19USFJFQURfUk9CVVNUX1BS
SU9fSU5IRVJJVA0KICAgICtjb25zdCBTQ19QSUkgPSBfX1NDX1BJSQ0KICAgICtjb25zdCBTQ19T
SEVMTCA9IF9fU0NfU0hFTEwNCiAgICArY29uc3QgU0NfREVWSUNFX0lPID0gX19TQ19ERVZJQ0Vf
SU8NCiAgICArY29uc3QgU0NfWE9QRU5fRU5IX0kxOE4gPSBfX1NDX1hPUEVOX0VOSF9JMThODQog
ICAgK2NvbnN0IFNDX1VTRVJfR1JPVVBTX1IgPSBfX1NDX1VTRVJfR1JPVVBTX1INCiAgICArY29u
c3QgU0NfMl9GT1JUX1JVTiA9IF9fU0NfMl9GT1JUX1JVTg0KICAgICtjb25zdCBTQ19DUFVUSU1F
ID0gX19TQ19DUFVUSU1FDQogICAgK2NvbnN0IFNDX1Y3X0xQNjRfT0ZGNjQgPSBfX1NDX1Y3X0xQ
NjRfT0ZGNjQNCiAgICArY29uc3QgU0NfU1lNTE9PUF9NQVggPSBfX1NDX1NZTUxPT1BfTUFYDQog
ICAgK2NvbnN0IFNDX1RIUkVBRF9LRVlTX01BWCA9IF9fU0NfVEhSRUFEX0tFWVNfTUFYDQogICAg
K2NvbnN0IFNDX1VJTlRfTUFYID0gX19TQ19VSU5UX01BWA0KICAgICtjb25zdCBTQ19YQlM1X0xQ
NjRfT0ZGNjQgPSBfX1NDX1hCUzVfTFA2NF9PRkY2NA0KICAgICtjb25zdCBTQ19UUkFDRV9FVkVO
VF9GSUxURVIgPSBfX1NDX1RSQUNFX0VWRU5UX0ZJTFRFUg0KICAgICtjb25zdCBTQ19MRVZFTDNf
Q0FDSEVfU0laRSA9IF9fU0NfTEVWRUwzX0NBQ0hFX1NJWkUNCiAgICArY29uc3QgU0NfVEhSRUFE
X1BSSU9fSU5IRVJJVCA9IF9fU0NfVEhSRUFEX1BSSU9fSU5IRVJJVA0KICAgICtjb25zdCBTQ18y
X1BCU19DSEVDS1BPSU5UID0gX19TQ18yX1BCU19DSEVDS1BPSU5UDQogICAgK2NvbnN0IFNDX05F
VFdPUktJTkcgPSBfX1NDX05FVFdPUktJTkcNCiAgICArY29uc3QgU0NfVEhSRUFEX1BSSU9fUFJP
VEVDVCA9IF9fU0NfVEhSRUFEX1BSSU9fUFJPVEVDVA0KICAgICtjb25zdCBTQ19VQ0hBUl9NQVgg
PSBfX1NDX1VDSEFSX01BWA0KICAgICtjb25zdCBTQ19YT1BFTl9TVFJFQU1TID0gX19TQ19YT1BF
Tl9TVFJFQU1TDQogICAgK2NvbnN0IFNDX0xFVkVMM19DQUNIRV9BU1NPQyA9IF9fU0NfTEVWRUwz
X0NBQ0hFX0FTU09DDQogICAgK2NvbnN0IFNDXzJfVVBFID0gX19TQ18yX1VQRQ0KICAgICtjb25z
dCBTQ19VU0hSVF9NQVggPSBfX1NDX1VTSFJUX01BWA0KICAgICtjb25zdCBTQ19SRUdFWFAgPSBf
X1NDX1JFR0VYUA0KICAgICtjb25zdCBTQ19OWkVSTyA9IF9fU0NfTlpFUk8NCiAgICArY29uc3Qg
U0NfVF9JT1ZfTUFYID0gX19TQ19UX0lPVl9NQVgNCiAgICArY29uc3QgU0NfUElQRSA9IF9fU0Nf
UElQRQ0KICAgICtjb25zdCBTQ19BSU9fTUFYID0gX19TQ19BSU9fTUFYDQogICAgK2NvbnN0IFND
X1NFTUFQSE9SRVMgPSBfX1NDX1NFTUFQSE9SRVMNCiAgICArY29uc3QgU0NfQVRFWElUX01BWCA9
IF9fU0NfQVRFWElUX01BWA0KICAgICtjb25zdCBTQ19NUV9QUklPX01BWCA9IF9fU0NfTVFfUFJJ
T19NQVgNCiAgICArY29uc3QgU0NfU0lOR0xFX1BST0NFU1MgPSBfX1NDX1NJTkdMRV9QUk9DRVNT
DQogICAgK2NvbnN0IFNDX0dFVEdSX1JfU0laRV9NQVggPSBfX1NDX0dFVEdSX1JfU0laRV9NQVgN
CiAgICArY29uc3QgU0NfUElJX09TSSA9IF9fU0NfUElJX09TSQ0KICAgICtjb25zdCBTQ19DX0xB
TkdfU1VQUE9SVF9SID0gX19TQ19DX0xBTkdfU1VQUE9SVF9SDQogICAgK2NvbnN0IFNDX01FTUxP
Q0tfUkFOR0UgPSBfX1NDX01FTUxPQ0tfUkFOR0UNCiAgICArY29uc3QgU0NIRURfSCA9IF9fU0NI
RURfSA0KICAgICtjb25zdCBTQ19WN19MUEJJR19PRkZCSUcgPSBfX1NDX1Y3X0xQQklHX09GRkJJ
Rw0KICAgICtjb25zdCBTQ19DTEtfVENLID0gX19TQ19DTEtfVENLDQogICAgK2NvbnN0IFNDX1RI
UkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HID0gX19TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElO
Rw0KICAgICtjb25zdCBTQ19OTF9OTUFYID0gX19TQ19OTF9OTUFYDQogICAgK2NvbnN0IFNDX1BP
TEwgPSBfX1NDX1BPTEwNCiAgICArY29uc3QgU0NfWE9QRU5fVU5JWCA9IF9fU0NfWE9QRU5fVU5J
WA0KICAgICtjb25zdCBTQ19GSUZPID0gX19TQ19GSUZPDQogICAgK2NvbnN0IFNDX1RSQUNFX0lO
SEVSSVQgPSBfX1NDX1RSQUNFX0lOSEVSSVQNCiAgICArY29uc3QgU0NfSE9TVF9OQU1FX01BWCA9
IF9fU0NfSE9TVF9OQU1FX01BWA0KICAgICtjb25zdCBTQ19MT0dJTl9OQU1FX01BWCA9IF9fU0Nf
TE9HSU5fTkFNRV9NQVgNCiAgICArY29uc3QgU0NfTEVWRUw0X0NBQ0hFX0FTU09DID0gX19TQ19M
RVZFTDRfQ0FDSEVfQVNTT0MNCiAgICArY29uc3QgU0NfUElJX09TSV9DT1RTID0gX19TQ19QSUlf
T1NJX0NPVFMNCiAgICArY29uc3QgU0NfMl9GT1JUX0RFViA9IF9fU0NfMl9GT1JUX0RFVg0KICAg
ICtjb25zdCBTQ19OTF9URVhUTUFYID0gX19TQ19OTF9URVhUTUFYDQogICAgK2NvbnN0IFNDX1hP
UEVOX1JFQUxUSU1FID0gX19TQ19YT1BFTl9SRUFMVElNRQ0KICAgICtjb25zdCBTQ19NQl9MRU5f
TUFYID0gX19TQ19NQl9MRU5fTUFYDQogICAgK2NvbnN0IFNDX1JFR0VYX1ZFUlNJT04gPSBfX1ND
X1JFR0VYX1ZFUlNJT04NCiAgICArY29uc3QgU0NfQ19MQU5HX1NVUFBPUlQgPSBfX1NDX0NfTEFO
R19TVVBQT1JUDQogICAgK2NvbnN0IFNDX0xPTkdfQklUID0gX19TQ19MT05HX0JJVA0KICAgICtj
b25zdCBTQ19NQVBQRURfRklMRVMgPSBfX1NDX01BUFBFRF9GSUxFUw0KICAgICtjb25zdCBTQ19S
QVdfU09DS0VUUyA9IF9fU0NfUkFXX1NPQ0tFVFMNCiAgICArY29uc3QgU0NfQkNfRElNX01BWCA9
IF9fU0NfQkNfRElNX01BWA0KICAgICtjb25zdCBTQ18yX0xPQ0FMRURFRiA9IF9fU0NfMl9MT0NB
TEVERUYNCiAgICArY29uc3QgU0NfWE9QRU5fWFBHMiA9IF9fU0NfWE9QRU5fWFBHMg0KICAgICtj
b25zdCBTQ18yX0NIQVJfVEVSTSA9IF9fU0NfMl9DSEFSX1RFUk0NCiAgICArY29uc3QgU0NfTElO
RV9NQVggPSBfX1NDX0xJTkVfTUFYDQogICAgK2NvbnN0IFNDX1NZU1RFTV9EQVRBQkFTRSA9IF9f
U0NfU1lTVEVNX0RBVEFCQVNFDQogICAgK2NvbnN0IFNDX1NDSEFSX01BWCA9IF9fU0NfU0NIQVJf
TUFYDQogICAgK2NvbnN0IFNDX1RIUkVBRF9QUk9DRVNTX1NIQVJFRCA9IF9fU0NfVEhSRUFEX1BS
T0NFU1NfU0hBUkVEDQogICAgK2NvbnN0IFNDX1Y2X0lMUDMyX09GRkJJRyA9IF9fU0NfVjZfSUxQ
MzJfT0ZGQklHDQogICAgK2NvbnN0IFNDXzJfUEJTID0gX19TQ18yX1BCUw0KICAgICtjb25zdCBT
Q19TVFJFQU1TID0gX19TQ19TVFJFQU1TDQogICAgK2NvbnN0IFNDX1hPUEVOX1JFQUxUSU1FX1RI
UkVBRFMgPSBfX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMNCiAgICArY29uc3QgU0NfSVBWNiA9
IF9fU0NfSVBWNg0KICAgICtjb25zdCBTQ19TVFJFQU1fTUFYID0gX19TQ19TVFJFQU1fTUFYDQog
ICAgK2NvbnN0IFNDX1VMT05HX01BWCA9IF9fU0NfVUxPTkdfTUFYDQogICAgK2NvbnN0IFNDX0NI
SUxEX01BWCA9IF9fU0NfQ0hJTERfTUFYDQogICAgK2NvbnN0IFNDX1RSQUNFX0VWRU5UX05BTUVf
TUFYID0gX19TQ19UUkFDRV9FVkVOVF9OQU1FX01BWA0KICAgICtjb25zdCBTQ19USU1FUl9NQVgg
PSBfX1NDX1RJTUVSX01BWA0KICAgICtjb25zdCBTQ19TQ0hBUl9NSU4gPSBfX1NDX1NDSEFSX01J
Tg0KICAgICtjb25zdCBTQ19BVlBIWVNfUEFHRVMgPSBfX1NDX0FWUEhZU19QQUdFUw0KICAgICtj
b25zdCBTQ19OR1JPVVBTX01BWCA9IF9fU0NfTkdST1VQU19NQVgNCiAgICArY29uc3QgU0NfTUVT
U0FHRV9QQVNTSU5HID0gX19TQ19NRVNTQUdFX1BBU1NJTkcNCiAgICArY29uc3QgU0NfTEVWRUwx
X0RDQUNIRV9MSU5FU0laRSA9IF9fU0NfTEVWRUwxX0RDQUNIRV9MSU5FU0laRQ0KICAgICtjb25z
dCBTQ19MRVZFTDFfRENBQ0hFX1NJWkUgPSBfX1NDX0xFVkVMMV9EQ0FDSEVfU0laRQ0KICAgICtj
b25zdCBTQ19JT1ZfTUFYID0gX19TQ19JT1ZfTUFYDQogICAgK2NvbnN0IFNDX0JDX1NDQUxFX01B
WCA9IF9fU0NfQkNfU0NBTEVfTUFYDQogICAgK2NvbnN0IFNDX1NTSVpFX01BWCA9IF9fU0NfU1NJ
WkVfTUFYDQogICAgK2NvbnN0IFNDX1Y3X0lMUDMyX09GRjMyID0gX19TQ19WN19JTFAzMl9PRkYz
Mg0KICAgICtjb25zdCBTQ19MRVZFTDNfQ0FDSEVfTElORVNJWkUgPSBfX1NDX0xFVkVMM19DQUNI
RV9MSU5FU0laRQ0KICAgICtjb25zdCBTQ19USFJFQURTID0gX19TQ19USFJFQURTDQogICAgK2Nv
bnN0IFNDX1BJSV9JTlRFUk5FVF9ER1JBTSA9IF9fU0NfUElJX0lOVEVSTkVUX0RHUkFNDQogICAg
K2NvbnN0IFNDX1RUWV9OQU1FX01BWCA9IF9fU0NfVFRZX05BTUVfTUFYDQogICAgK2NvbnN0IFND
X1BSSU9SSVRJWkVEX0lPID0gX19TQ19QUklPUklUSVpFRF9JTw0KICAgICtjb25zdCBTQ19YT1BF
Tl9TSE0gPSBfX1NDX1hPUEVOX1NITQ0KICAgICtjb25zdCBTQ19SVFNJR19NQVggPSBfX1NDX1JU
U0lHX01BWA0KICAgICtjb25zdCBTQ19USFJFQURfVEhSRUFEU19NQVggPSBfX1NDX1RIUkVBRF9U
SFJFQURTX01BWA0KICAgICtjb25zdCBTQ19BU1lOQ0hST05PVVNfSU8gPSBfX1NDX0FTWU5DSFJP
Tk9VU19JTw0KICAgICtjb25zdCBTQ19MRVZFTDJfQ0FDSEVfU0laRSA9IF9fU0NfTEVWRUwyX0NB
Q0hFX1NJWkUNCiAgICArY29uc3QgU0NfVFpOQU1FX01BWCA9IF9fU0NfVFpOQU1FX01BWA0KICAg
ICtjb25zdCBTQ19YQlM1X0xQQklHX09GRkJJRyA9IF9fU0NfWEJTNV9MUEJJR19PRkZCSUcNCiAg
ICArY29uc3QgU0NfVEhSRUFEX1NUQUNLX01JTiA9IF9fU0NfVEhSRUFEX1NUQUNLX01JTg0KICAg
ICtjb25zdCBTQ19USFJFQURfU0FGRV9GVU5DVElPTlMgPSBfX1NDX1RIUkVBRF9TQUZFX0ZVTkNU
SU9OUw0KICAgICtjb25zdCBTQ19YT1BFTl9MRUdBQ1kgPSBfX1NDX1hPUEVOX0xFR0FDWQ0KICAg
ICtjb25zdCBTQ19USFJFQURfQVRUUl9TVEFDS0FERFIgPSBfX1NDX1RIUkVBRF9BVFRSX1NUQUNL
QUREUg0KICAgICtjb25zdCBTQ19TQVZFRF9JRFMgPSBfX1NDX1NBVkVEX0lEUw0KICAgICtjb25z
dCBTQ19WN19JTFAzMl9PRkZCSUcgPSBfX1NDX1Y3X0lMUDMyX09GRkJJRw0KICAgICtjb25zdCBT
Q19MRVZFTDFfSUNBQ0hFX0FTU09DID0gX19TQ19MRVZFTDFfSUNBQ0hFX0FTU09DDQogICAgK2Nv
bnN0IFNDX0RFTEFZVElNRVJfTUFYID0gX19TQ19ERUxBWVRJTUVSX01BWA0KICAgICtjb25zdCBT
Q19USU1FT1VUUyA9IF9fU0NfVElNRU9VVFMNCiAgICArY29uc3QgU0NfWEJTNV9JTFAzMl9PRkZC
SUcgPSBfX1NDX1hCUzVfSUxQMzJfT0ZGQklHDQogICAgK2NvbnN0IFNDX1RJTUVSUyA9IF9fU0Nf
VElNRVJTDQogICAgK2NvbnN0IFNDX05MX0FSR01BWCA9IF9fU0NfTkxfQVJHTUFYDQogICAgK2Nv
bnN0IFNDX1BBR0VTSVpFID0gX19TQ19QQUdFU0laRQ0KICAgICtjb25zdCBTQ19OUFJPQ0VTU09S
U19DT05GID0gX19TQ19OUFJPQ0VTU09SU19DT05GDQogICAgK2NvbnN0IFNDX1BJSV9YVEkgPSBf
X1NDX1BJSV9YVEkNCiAgICArY29uc3QgU0NfU1BJTl9MT0NLUyA9IF9fU0NfU1BJTl9MT0NLUw0K
ICAgICtjb25zdCBTQ18yX1BCU19BQ0NPVU5USU5HID0gX19TQ18yX1BCU19BQ0NPVU5USU5HDQog
ICAgK2NvbnN0IFNDX1RIUkVBRF9TUE9SQURJQ19TRVJWRVIgPSBfX1NDX1RIUkVBRF9TUE9SQURJ
Q19TRVJWRVINCiAgICArY29uc3QgU0NfRkRfTUdNVCA9IF9fU0NfRkRfTUdNVA0KICAgICtjb25z
dCBTQ19TWU5DSFJPTklaRURfSU8gPSBfX1NDX1NZTkNIUk9OSVpFRF9JTw0KICAgICtjb25zdCBT
Q19FUVVJVl9DTEFTU19NQVggPSBfX1NDX0VRVUlWX0NMQVNTX01BWA0KICAgICtjb25zdCBTQ19T
UEFXTiA9IF9fU0NfU1BBV04NCiAgICArY29uc3QgU0NfQ0hBUkNMQVNTX05BTUVfTUFYID0gX19T
Q19DSEFSQ0xBU1NfTkFNRV9NQVgNCiAgICArY29uc3QgU0NfUElJX0lOVEVSTkVUX1NUUkVBTSA9
IF9fU0NfUElJX0lOVEVSTkVUX1NUUkVBTQ0KICAgICtjb25zdCBTQ18yX1BCU19UUkFDSyA9IF9f
U0NfMl9QQlNfVFJBQ0sNCiAgICArY29uc3QgU0NfVkVSU0lPTiA9IF9fU0NfVkVSU0lPTg0KICAg
ICtjb25zdCBTQ19TRU1fVkFMVUVfTUFYID0gX19TQ19TRU1fVkFMVUVfTUFYDQogICAgK2NvbnN0
IFNDX0NMT0NLX1NFTEVDVElPTiA9IF9fU0NfQ0xPQ0tfU0VMRUNUSU9ODQogICAgK2NvbnN0IFND
X0ZJTEVfQVRUUklCVVRFUyA9IF9fU0NfRklMRV9BVFRSSUJVVEVTDQogICAgK2NvbnN0IFNDX1NJ
R1FVRVVFX01BWCA9IF9fU0NfU0lHUVVFVUVfTUFYDQogICAgK2NvbnN0IFNDXzJfQ19ERVYgPSBf
X1NDXzJfQ19ERVYNCiAgICArY29uc3QgU0NfQUlPX0xJU1RJT19NQVggPSBfX1NDX0FJT19MSVNU
SU9fTUFYDQogICAgK2NvbnN0IFNDXzJfVkVSU0lPTiA9IF9fU0NfMl9WRVJTSU9ODQogICAgK2Nv
bnN0IFNDX0RFVklDRV9TUEVDSUZJQyA9IF9fU0NfREVWSUNFX1NQRUNJRklDDQogICAgK2NvbnN0
IFNDX05MX01TR01BWCA9IF9fU0NfTkxfTVNHTUFYDQogICAgK2NvbnN0IFNDX1BIWVNfUEFHRVMg
PSBfX1NDX1BIWVNfUEFHRVMNCiAgICArY29uc3QgU0NfVFJBQ0VfTE9HID0gX19TQ19UUkFDRV9M
T0cNCiAgICArY29uc3QgU0NfU1NfUkVQTF9NQVggPSBfX1NDX1NTX1JFUExfTUFYDQogICAgK2Nv
bnN0IFNDX01VTFRJX1BST0NFU1MgPSBfX1NDX01VTFRJX1BST0NFU1MNCiAgICArY29uc3QgU0Nf
UElJX1NPQ0tFVCA9IF9fU0NfUElJX1NPQ0tFVA0KICAgICtjb25zdCBTQ19UUkFDRV9OQU1FX01B
WCA9IF9fU0NfVFJBQ0VfTkFNRV9NQVgNCiAgICArY29uc3QgU0NfTVFfT1BFTl9NQVggPSBfX1ND
X01RX09QRU5fTUFYDQogICAgK2NvbnN0IFNDX1NJR05BTFMgPSBfX1NDX1NJR05BTFMNCiAgICAr
Y29uc3QgUENfUkVDX01JTl9YRkVSX1NJWkUgPSBfX1BDX1JFQ19NSU5fWEZFUl9TSVpFDQogICAg
K2NvbnN0IFBDX1BBVEhfTUFYID0gX19QQ19QQVRIX01BWA0KICAgICtjb25zdCBQQ19BTExPQ19T
SVpFX01JTiA9IF9fUENfQUxMT0NfU0laRV9NSU4NCiAgICArY29uc3QgUENfU1lOQ19JTyA9IF9f
UENfU1lOQ19JTw0KICAgICtjb25zdCBQQ19NQVhfQ0FOT04gPSBfX1BDX01BWF9DQU5PTg0KICAg
ICtjb25zdCBQQ19GSUxFU0laRUJJVFMgPSBfX1BDX0ZJTEVTSVpFQklUUw0KICAgICtjb25zdCBQ
Q19OT19UUlVOQyA9IF9fUENfTk9fVFJVTkMNCiAgICArY29uc3QgUENfU09DS19NQVhCVUYgPSBf
X1BDX1NPQ0tfTUFYQlVGDQogICAgK2NvbnN0IFBDX1BJUEVfQlVGID0gX19QQ19QSVBFX0JVRg0K
ICAgICtjb25zdCBQQ19MSU5LX01BWCA9IF9fUENfTElOS19NQVgNCiAgICArY29uc3QgUENfTkFN
RV9NQVggPSBfX1BDX05BTUVfTUFYDQogICAgK2NvbnN0IFBDX0NIT1dOX1JFU1RSSUNURUQgPSBf
X1BDX0NIT1dOX1JFU1RSSUNURUQNCiAgICArY29uc3QgUENfUkVDX1hGRVJfQUxJR04gPSBfX1BD
X1JFQ19YRkVSX0FMSUdODQogICAgK2NvbnN0IFBDX0FTWU5DX0lPID0gX19QQ19BU1lOQ19JTw0K
ICAgICtjb25zdCBQQ19QUklPX0lPID0gX19QQ19QUklPX0lPDQogICAgK2NvbnN0IFBDX1JFQ19N
QVhfWEZFUl9TSVpFID0gX19QQ19SRUNfTUFYX1hGRVJfU0laRQ0KICAgICtjb25zdCBQQ19SRUNf
SU5DUl9YRkVSX1NJWkUgPSBfX1BDX1JFQ19JTkNSX1hGRVJfU0laRQ0KICAgICtjb25zdCBQQ19N
QVhfSU5QVVQgPSBfX1BDX01BWF9JTlBVVA0KICAgICtjb25zdCBQQ19WRElTQUJMRSA9IF9fUENf
VkRJU0FCTEUNCiAgICArY29uc3QgUENfMl9TWU1MSU5LUyA9IF9fUENfMl9TWU1MSU5LUw0KICAg
ICtjb25zdCBQQ19TWU1MSU5LX01BWCA9IF9fUENfU1lNTElOS19NQVgNCiAgICArY29uc3QgUGF0
aE1heCA9IF9QQVRIX01BWA0KICAgICtjb25zdCBFUE9MTE1TRyA9IF9FUE9MTE1TRw0KICAgICtj
b25zdCBFUE9MTFJEQkFORCA9IF9FUE9MTFJEQkFORA0KICAgICtjb25zdCBFUE9MTEVYQ0xVU0lW
RSA9IF9FUE9MTEVYQ0xVU0lWRQ0KICAgICtjb25zdCBFUE9MTFdSTk9STSA9IF9FUE9MTFdSTk9S
TQ0KICAgICtjb25zdCBFUE9MTF9DVExfQUREID0gX0VQT0xMX0NUTF9BREQNCiAgICArY29uc3Qg
RVBPTExQUkkgPSBfRVBPTExQUkkNCiAgICArY29uc3QgRVBPTExXUkJBTkQgPSBfRVBPTExXUkJB
TkQNCiAgICArY29uc3QgRVBPTExJTiA9IF9FUE9MTElODQogICAgK2NvbnN0IEVQT0xMV0FLRVVQ
ID0gX0VQT0xMV0FLRVVQDQogICAgK2NvbnN0IEVQT0xMT1VUID0gX0VQT0xMT1VUDQogICAgK2Nv
bnN0IEVQT0xMUkRIVVAgPSBfRVBPTExSREhVUA0KICAgICtjb25zdCBFUE9MTFJETk9STSA9IF9F
UE9MTFJETk9STQ0KICAgICtjb25zdCBFUE9MTEVSUiA9IF9FUE9MTEVSUg0KICAgICtjb25zdCBF
UE9MTEhVUCA9IF9FUE9MTEhVUA0KICAgICtjb25zdCBFUE9MTE9ORVNIT1QgPSBfRVBPTExPTkVT
SE9UDQogICAgK2NvbnN0IEVQT0xMX0NMT0VYRUMgPSBfRVBPTExfQ0xPRVhFQw0KICAgICtjb25z
dCBFUE9MTF9DVExfREVMID0gX0VQT0xMX0NUTF9ERUwNCiAgICArY29uc3QgRVBPTExfQ1RMX01P
RCA9IF9FUE9MTF9DVExfTU9EDQogICAgK2NvbnN0IEVQT0xMRVQgPSBfRVBPTExFVA0KICAgICtj
b25zdCBQUl9TVkVfVkxfSU5IRVJJVCA9IF9QUl9TVkVfVkxfSU5IRVJJVA0KICAgICtjb25zdCBQ
Ul9GUF9FWENfU1dfRU5BQkxFID0gX1BSX0ZQX0VYQ19TV19FTkFCTEUNCiAgICArY29uc3QgUFJf
U0VUX0ZQX01PREUgPSBfUFJfU0VUX0ZQX01PREUNCiAgICArY29uc3QgUFJfU0VUX1NQRUNVTEFU
SU9OX0NUUkwgPSBfUFJfU0VUX1NQRUNVTEFUSU9OX0NUUkwNCiAgICArY29uc3QgUFJfR0VUX0ZQ
X01PREUgPSBfUFJfR0VUX0ZQX01PREUNCiAgICArY29uc3QgUFJfU0VUX1NFQ0NPTVAgPSBfUFJf
U0VUX1NFQ0NPTVANCiAgICArY29uc3QgUFJfU1BFQ19TVE9SRV9CWVBBU1MgPSBfUFJfU1BFQ19T
VE9SRV9CWVBBU1MNCiAgICArY29uc3QgUFJfQ0FQX0FNQklFTlQgPSBfUFJfQ0FQX0FNQklFTlQN
CiAgICArY29uc3QgUFJfTUNFX0tJTExfTEFURSA9IF9QUl9NQ0VfS0lMTF9MQVRFDQogICAgK2Nv
bnN0IFBSX1NFVF9NTV9BUkdfRU5EID0gX1BSX1NFVF9NTV9BUkdfRU5EDQogICAgK2NvbnN0IFBS
X1NFVF9USU1FUlNMQUNLID0gX1BSX1NFVF9USU1FUlNMQUNLDQogICAgK2NvbnN0IFBSX1NFVF9N
TV9BUkdfU1RBUlQgPSBfUFJfU0VUX01NX0FSR19TVEFSVA0KICAgICtjb25zdCBQUl9TRVRfTU1f
TUFQID0gX1BSX1NFVF9NTV9NQVANCiAgICArY29uc3QgUFJfRlBfRVhDX0RJViA9IF9QUl9GUF9F
WENfRElWDQogICAgK2NvbnN0IFBSX1NFVF9NTV9FWEVfRklMRSA9IF9QUl9TRVRfTU1fRVhFX0ZJ
TEUNCiAgICArY29uc3QgUFJfQ0FQX0FNQklFTlRfTE9XRVIgPSBfUFJfQ0FQX0FNQklFTlRfTE9X
RVINCiAgICArY29uc3QgUFJfRlBFTVVfTk9QUklOVCA9IF9QUl9GUEVNVV9OT1BSSU5UDQogICAg
K2NvbnN0IFBSX1NFVF9FTkRJQU4gPSBfUFJfU0VUX0VORElBTg0KICAgICtjb25zdCBQUl9HRVRf
TkFNRSA9IF9QUl9HRVRfTkFNRQ0KICAgICtjb25zdCBQUl9TVkVfU0VUX1ZMX09ORVhFQyA9IF9Q
Ul9TVkVfU0VUX1ZMX09ORVhFQw0KICAgICtjb25zdCBQUl9TRVRfTkFNRSA9IF9QUl9TRVRfTkFN
RQ0KICAgICtjb25zdCBQUl9TRVRfTU1fU1RBUlRfQlJLID0gX1BSX1NFVF9NTV9TVEFSVF9CUksN
CiAgICArY29uc3QgUFJfR0VUX1RJTUlORyA9IF9QUl9HRVRfVElNSU5HDQogICAgK2NvbnN0IFBS
X0NBUF9BTUJJRU5UX0lTX1NFVCA9IF9QUl9DQVBfQU1CSUVOVF9JU19TRVQNCiAgICArY29uc3Qg
UFJfU0VUX01NX01BUF9TSVpFID0gX1BSX1NFVF9NTV9NQVBfU0laRQ0KICAgICtjb25zdCBQUl9G
UF9FWENfSU5WID0gX1BSX0ZQX0VYQ19JTlYNCiAgICArY29uc3QgUFJfU0VUX1RTQyA9IF9QUl9T
RVRfVFNDDQogICAgK2NvbnN0IFBSX1NFVF9QVFJBQ0VSID0gX1BSX1NFVF9QVFJBQ0VSDQogICAg
K2NvbnN0IFBSX1NFVF9NTV9CUksgPSBfUFJfU0VUX01NX0JSSw0KICAgICtjb25zdCBQUl9TRVRf
VElNSU5HID0gX1BSX1NFVF9USU1JTkcNCiAgICArY29uc3QgUFJfR0VUX0RVTVBBQkxFID0gX1BS
X0dFVF9EVU1QQUJMRQ0KICAgICtjb25zdCBQUl9HRVRfVFNDID0gX1BSX0dFVF9UU0MNCiAgICAr
Y29uc3QgUFJfTUNFX0tJTExfR0VUID0gX1BSX01DRV9LSUxMX0dFVA0KICAgICtjb25zdCBQUl9N
Q0VfS0lMTF9DTEVBUiA9IF9QUl9NQ0VfS0lMTF9DTEVBUg0KICAgICtjb25zdCBQUl9GUF9FWENf
T1ZGID0gX1BSX0ZQX0VYQ19PVkYNCiAgICArY29uc3QgUFJfU0VUX1NFQ1VSRUJJVFMgPSBfUFJf
U0VUX1NFQ1VSRUJJVFMNCiAgICArY29uc3QgUFJfVElNSU5HX1NUQVRJU1RJQ0FMID0gX1BSX1RJ
TUlOR19TVEFUSVNUSUNBTA0KICAgICtjb25zdCBQUl9NUFhfRU5BQkxFX01BTkFHRU1FTlQgPSBf
UFJfTVBYX0VOQUJMRV9NQU5BR0VNRU5UDQogICAgK2NvbnN0IFBSX0ZQX0VYQ19ESVNBQkxFRCA9
IF9QUl9GUF9FWENfRElTQUJMRUQNCiAgICArY29uc3QgUFJfTVBYX0RJU0FCTEVfTUFOQUdFTUVO
VCA9IF9QUl9NUFhfRElTQUJMRV9NQU5BR0VNRU5UDQogICAgK2NvbnN0IFBSX1RTQ19TSUdTRUdW
ID0gX1BSX1RTQ19TSUdTRUdWDQogICAgK2NvbnN0IFBSX1NFVF9LRUVQQ0FQUyA9IF9QUl9TRVRf
S0VFUENBUFMNCiAgICArY29uc3QgUFJfRU5ESUFOX0JJRyA9IF9QUl9FTkRJQU5fQklHDQogICAg
K2NvbnN0IFBSX1NFVF9NTV9BVVhWID0gX1BSX1NFVF9NTV9BVVhWDQogICAgK2NvbnN0IFBSX1NF
VF9VTkFMSUdOID0gX1BSX1NFVF9VTkFMSUdODQogICAgK2NvbnN0IFBSX0dFVF9OT19ORVdfUFJJ
VlMgPSBfUFJfR0VUX05PX05FV19QUklWUw0KICAgICtjb25zdCBQUl9HRVRfVElEX0FERFJFU1Mg
PSBfUFJfR0VUX1RJRF9BRERSRVNTDQogICAgK2NvbnN0IFBSX0ZQX01PREVfRlJFID0gX1BSX0ZQ
X01PREVfRlJFDQogICAgK2NvbnN0IFBSX0dFVF9GUEVYQyA9IF9QUl9HRVRfRlBFWEMNCiAgICAr
Y29uc3QgUFJfQ0FQQlNFVF9SRUFEID0gX1BSX0NBUEJTRVRfUkVBRA0KICAgICtjb25zdCBQUl9T
UEVDX0lORElSRUNUX0JSQU5DSCA9IF9QUl9TUEVDX0lORElSRUNUX0JSQU5DSA0KICAgICtjb25z
dCBQUl9TRVRfQ0hJTERfU1VCUkVBUEVSID0gX1BSX1NFVF9DSElMRF9TVUJSRUFQRVINCiAgICAr
Y29uc3QgUFJfU1BFQ19ESVNBQkxFID0gX1BSX1NQRUNfRElTQUJMRQ0KICAgICtjb25zdCBQUl9T
RVRfTk9fTkVXX1BSSVZTID0gX1BSX1NFVF9OT19ORVdfUFJJVlMNCiAgICArY29uc3QgUFJfU1BF
Q19OT1RfQUZGRUNURUQgPSBfUFJfU1BFQ19OT1RfQUZGRUNURUQNCiAgICArY29uc3QgUFJfRlBf
RVhDX1VORCA9IF9QUl9GUF9FWENfVU5EDQogICAgK2NvbnN0IFBSX0dFVF9QREVBVEhTSUcgPSBf
UFJfR0VUX1BERUFUSFNJRw0KICAgICtjb25zdCBQUl9TVkVfR0VUX1ZMID0gX1BSX1NWRV9HRVRf
VkwNCiAgICArY29uc3QgUFJfRU5ESUFOX1BQQ19MSVRUTEUgPSBfUFJfRU5ESUFOX1BQQ19MSVRU
TEUNCiAgICArY29uc3QgUFJfU0VUX01NID0gX1BSX1NFVF9NTQ0KICAgICtjb25zdCBQUl9DQVBf
QU1CSUVOVF9SQUlTRSA9IF9QUl9DQVBfQU1CSUVOVF9SQUlTRQ0KICAgICtjb25zdCBQUl9GUF9F
WENfUFJFQ0lTRSA9IF9QUl9GUF9FWENfUFJFQ0lTRQ0KICAgICtjb25zdCBQUl9TRVRfVEhQX0RJ
U0FCTEUgPSBfUFJfU0VUX1RIUF9ESVNBQkxFDQogICAgK2NvbnN0IFBSX0ZQX0VYQ19BU1lOQyA9
IF9QUl9GUF9FWENfQVNZTkMNCiAgICArY29uc3QgUFJfRlBFTVVfU0lHRlBFID0gX1BSX0ZQRU1V
X1NJR0ZQRQ0KICAgICtjb25zdCBQUl9FTkRJQU5fTElUVExFID0gX1BSX0VORElBTl9MSVRUTEUN
CiAgICArY29uc3QgUFJfU0VUX01NX0VOVl9TVEFSVCA9IF9QUl9TRVRfTU1fRU5WX1NUQVJUDQog
ICAgK2NvbnN0IFBSX0NBUEJTRVRfRFJPUCA9IF9QUl9DQVBCU0VUX0RST1ANCiAgICArY29uc3Qg
UFJfU1BFQ19FTkFCTEUgPSBfUFJfU1BFQ19FTkFCTEUNCiAgICArY29uc3QgUFJfQ0FQX0FNQklF
TlRfQ0xFQVJfQUxMID0gX1BSX0NBUF9BTUJJRU5UX0NMRUFSX0FMTA0KICAgICtjb25zdCBQUl9U
U0NfRU5BQkxFID0gX1BSX1RTQ19FTkFCTEUNCiAgICArY29uc3QgUFJfU1ZFX1ZMX0xFTl9NQVNL
ID0gX1BSX1NWRV9WTF9MRU5fTUFTSw0KICAgICtjb25zdCBQUl9UQVNLX1BFUkZfRVZFTlRTX0VO
QUJMRSA9IF9QUl9UQVNLX1BFUkZfRVZFTlRTX0VOQUJMRQ0KICAgICtjb25zdCBQUl9TRVRfRFVN
UEFCTEUgPSBfUFJfU0VUX0RVTVBBQkxFDQogICAgK2NvbnN0IFBSX0dFVF9USFBfRElTQUJMRSA9
IF9QUl9HRVRfVEhQX0RJU0FCTEUNCiAgICArY29uc3QgUFJfR0VUX0NISUxEX1NVQlJFQVBFUiA9
IF9QUl9HRVRfQ0hJTERfU1VCUkVBUEVSDQogICAgK2NvbnN0IFBSX1NFVF9NTV9TVEFSVF9DT0RF
ID0gX1BSX1NFVF9NTV9TVEFSVF9DT0RFDQogICAgK2NvbnN0IFBSX1NWRV9TRVRfVkwgPSBfUFJf
U1ZFX1NFVF9WTA0KICAgICtjb25zdCBQUl9NQ0VfS0lMTF9ERUZBVUxUID0gX1BSX01DRV9LSUxM
X0RFRkFVTFQNCiAgICArY29uc3QgUFJfR0VUX0VORElBTiA9IF9QUl9HRVRfRU5ESUFODQogICAg
K2NvbnN0IFBSX0dFVF9TRUNDT01QID0gX1BSX0dFVF9TRUNDT01QDQogICAgK2NvbnN0IFBSX0dF
VF9TUEVDVUxBVElPTl9DVFJMID0gX1BSX0dFVF9TUEVDVUxBVElPTl9DVFJMDQogICAgK2NvbnN0
IFBSX0dFVF9USU1FUlNMQUNLID0gX1BSX0dFVF9USU1FUlNMQUNLDQogICAgK2NvbnN0IFBSX0ZQ
X0VYQ19SRVMgPSBfUFJfRlBfRVhDX1JFUw0KICAgICtjb25zdCBQUl9TRVRfTU1fRU5EX0NPREUg
PSBfUFJfU0VUX01NX0VORF9DT0RFDQogICAgK2NvbnN0IFBSX0dFVF9VTkFMSUdOID0gX1BSX0dF
VF9VTkFMSUdODQogICAgK2NvbnN0IFBSX1NFVF9QREVBVEhTSUcgPSBfUFJfU0VUX1BERUFUSFNJ
Rw0KICAgICtjb25zdCBQUl9UQVNLX1BFUkZfRVZFTlRTX0RJU0FCTEUgPSBfUFJfVEFTS19QRVJG
X0VWRU5UU19ESVNBQkxFDQogICAgK2NvbnN0IFBSX1NQRUNfRk9SQ0VfRElTQUJMRSA9IF9QUl9T
UEVDX0ZPUkNFX0RJU0FCTEUNCiAgICArY29uc3QgUFJfTUNFX0tJTExfU0VUID0gX1BSX01DRV9L
SUxMX1NFVA0KICAgICtjb25zdCBQUl9TRVRfTU1fU1RBUlRfU1RBQ0sgPSBfUFJfU0VUX01NX1NU
QVJUX1NUQUNLDQogICAgK2NvbnN0IFBSX1NFVF9GUEVNVSA9IF9QUl9TRVRfRlBFTVUNCiAgICAr
Y29uc3QgUFJfVU5BTElHTl9OT1BSSU5UID0gX1BSX1VOQUxJR05fTk9QUklOVA0KICAgICtjb25z
dCBQUl9TRVRfTU1fU1RBUlRfREFUQSA9IF9QUl9TRVRfTU1fU1RBUlRfREFUQQ0KICAgICtjb25z
dCBQUl9TRVRfTU1fRU5WX0VORCA9IF9QUl9TRVRfTU1fRU5WX0VORA0KICAgICtjb25zdCBQUl9N
Q0VfS0lMTF9FQVJMWSA9IF9QUl9NQ0VfS0lMTF9FQVJMWQ0KICAgICtjb25zdCBQUl9GUF9NT0RF
X0ZSID0gX1BSX0ZQX01PREVfRlINCiAgICArY29uc3QgUFJfRlBfRVhDX05PTlJFQ09WID0gX1BS
X0ZQX0VYQ19OT05SRUNPVg0KICAgICtjb25zdCBQUl9HRVRfU0VDVVJFQklUUyA9IF9QUl9HRVRf
U0VDVVJFQklUUw0KICAgICtjb25zdCBQUl9TRVRfRlBFWEMgPSBfUFJfU0VUX0ZQRVhDDQogICAg
K2NvbnN0IFBSX01DRV9LSUxMID0gX1BSX01DRV9LSUxMDQogICAgK2NvbnN0IFBSX1NFVF9NTV9F
TkRfREFUQSA9IF9QUl9TRVRfTU1fRU5EX0RBVEENCiAgICArY29uc3QgUFJfR0VUX0ZQRU1VID0g
X1BSX0dFVF9GUEVNVQ0KICAgICtjb25zdCBQUl9HRVRfS0VFUENBUFMgPSBfUFJfR0VUX0tFRVBD
QVBTDQogICAgK2NvbnN0IFBSX1NQRUNfUFJDVEwgPSBfUFJfU1BFQ19QUkNUTA0KICAgICtjb25z
dCBQUl9USU1JTkdfVElNRVNUQU1QID0gX1BSX1RJTUlOR19USU1FU1RBTVANCiAgICArY29uc3Qg
UFJfVU5BTElHTl9TSUdCVVMgPSBfUFJfVU5BTElHTl9TSUdCVVMNCiAgICArY29uc3QgUFRSQUNF
X0VWRU5UX0VYRUMgPSBfUFRSQUNFX0VWRU5UX0VYRUMNCiAgICArY29uc3QgUFRSQUNFX0VWRU5U
X0VYSVQgPSBfUFRSQUNFX0VWRU5UX0VYSVQNCiAgICArY29uc3QgUFRSQUNFX09fVFJBQ0VDTE9O
RSA9IF9QVFJBQ0VfT19UUkFDRUNMT05FDQogICAgK2NvbnN0IFBUUkFDRV9BVFRBQ0ggPSBfUFRS
QUNFX0FUVEFDSA0KICAgICtjb25zdCBQVFJBQ0VfR0VURlBYUkVHUyA9IF9QVFJBQ0VfR0VURlBY
UkVHUw0KICAgICtjb25zdCBQVFJBQ0VfUEVFS1VTRVIgPSBfUFRSQUNFX1BFRUtVU0VSDQogICAg
K2NvbnN0IFBUUkFDRV9DT05UID0gX1BUUkFDRV9DT05UDQogICAgK2NvbnN0IFBUUkFDRV9QRUVL
VEVYVCA9IF9QVFJBQ0VfUEVFS1RFWFQNCiAgICArY29uc3QgUFRSQUNFX0dFVEVWRU5UTVNHID0g
X1BUUkFDRV9HRVRFVkVOVE1TRw0KICAgICtjb25zdCBQVFJBQ0VfUEVFS0RBVEEgPSBfUFRSQUNF
X1BFRUtEQVRBDQogICAgK2NvbnN0IFBUUkFDRV9TWVNDQUxMID0gX1BUUkFDRV9TWVNDQUxMDQog
ICAgK2NvbnN0IFBUUkFDRV9FVkVOVF9WRk9SS19ET05FID0gX1BUUkFDRV9FVkVOVF9WRk9SS19E
T05FDQogICAgK2NvbnN0IFBUUkFDRV9PX0VYSVRLSUxMID0gX1BUUkFDRV9PX0VYSVRLSUxMDQog
ICAgK2NvbnN0IFBUUkFDRV9TSU5HTEVTVEVQID0gX1BUUkFDRV9TSU5HTEVTVEVQDQogICAgK2Nv
bnN0IFBUUkFDRV9QT0tFREFUQSA9IF9QVFJBQ0VfUE9LRURBVEENCiAgICArY29uc3QgUFRSQUNF
X1NFVE9QVElPTlMgPSBfUFRSQUNFX1NFVE9QVElPTlMNCiAgICArY29uc3QgUFRSQUNFX09fTUFT
SyA9IF9QVFJBQ0VfT19NQVNLDQogICAgK2NvbnN0IFBUUkFDRV9TRVRTSUdJTkZPID0gX1BUUkFD
RV9TRVRTSUdJTkZPDQogICAgK2NvbnN0IFBUUkFDRV9TSU5HTEVCTE9DSyA9IF9QVFJBQ0VfU0lO
R0xFQkxPQ0sNCiAgICArY29uc3QgUFRSQUNFX0lOVEVSUlVQVCA9IF9QVFJBQ0VfSU5URVJSVVBU
DQogICAgK2NvbnN0IFBUUkFDRV9PTERTRVRPUFRJT05TID0gX1BUUkFDRV9PTERTRVRPUFRJT05T
DQogICAgK2NvbnN0IFBUUkFDRV9FVkVOVF9WRk9SSyA9IF9QVFJBQ0VfRVZFTlRfVkZPUksNCiAg
ICArY29uc3QgUFRSQUNFX1RSQUNFTUUgPSBfUFRSQUNFX1RSQUNFTUUNCiAgICArY29uc3QgUFRS
QUNFX1NFSVpFID0gX1BUUkFDRV9TRUlaRQ0KICAgICtjb25zdCBQVFJBQ0VfREVUQUNIID0gX1BU
UkFDRV9ERVRBQ0gNCiAgICArY29uc3QgUFRSQUNFX0dFVFNJR0lORk8gPSBfUFRSQUNFX0dFVFNJ
R0lORk8NCiAgICArY29uc3QgUFRSQUNFX0VWRU5UX1NFQ0NPTVAgPSBfUFRSQUNFX0VWRU5UX1NF
Q0NPTVANCiAgICArY29uc3QgUFRSQUNFX09fU1VTUEVORF9TRUNDT01QID0gX1BUUkFDRV9PX1NV
U1BFTkRfU0VDQ09NUA0KICAgICtjb25zdCBQVFJBQ0VfU0VUX1RIUkVBRF9BUkVBID0gX1BUUkFD
RV9TRVRfVEhSRUFEX0FSRUENCiAgICArY29uc3QgUFRSQUNFX1BFRUtTSUdJTkZPID0gX1BUUkFD
RV9QRUVLU0lHSU5GTw0KICAgICtjb25zdCBQVFJBQ0VfU1lTRU1VX1NJTkdMRVNURVAgPSBfUFRS
QUNFX1NZU0VNVV9TSU5HTEVTVEVQDQogICAgK2NvbnN0IFBUUkFDRV9PX1RSQUNFRk9SSyA9IF9Q
VFJBQ0VfT19UUkFDRUZPUksNCiAgICArY29uc3QgUFRSQUNFX0dFVFNJR01BU0sgPSBfUFRSQUNF
X0dFVFNJR01BU0sNCiAgICArY29uc3QgUFRSQUNFX1BPS0VVU0VSID0gX1BUUkFDRV9QT0tFVVNF
Ug0KICAgICtjb25zdCBQVFJBQ0VfU1lTRU1VID0gX1BUUkFDRV9TWVNFTVUNCiAgICArY29uc3Qg
UFRSQUNFX0xJU1RFTiA9IF9QVFJBQ0VfTElTVEVODQogICAgK2NvbnN0IFBUUkFDRV9QRUVLU0lH
SU5GT19TSEFSRUQgPSBfUFRSQUNFX1BFRUtTSUdJTkZPX1NIQVJFRA0KICAgICtjb25zdCBQVFJB
Q0VfUE9LRVVTUiA9IF9QVFJBQ0VfUE9LRVVTUg0KICAgICtjb25zdCBQVFJBQ0VfS0lMTCA9IF9Q
VFJBQ0VfS0lMTA0KICAgICtjb25zdCBQVFJBQ0VfT19UUkFDRVNZU0dPT0QgPSBfUFRSQUNFX09f
VFJBQ0VTWVNHT09EDQogICAgK2NvbnN0IFBUUkFDRV9PX1RSQUNFRVhFQyA9IF9QVFJBQ0VfT19U
UkFDRUVYRUMNCiAgICArY29uc3QgUFRSQUNFX09fVFJBQ0VWRk9SS0RPTkUgPSBfUFRSQUNFX09f
VFJBQ0VWRk9SS0RPTkUNCiAgICArY29uc3QgUFRSQUNFX0dFVFJFR1NFVCA9IF9QVFJBQ0VfR0VU
UkVHU0VUDQogICAgK2NvbnN0IFBUUkFDRV9PX1RSQUNFRVhJVCA9IF9QVFJBQ0VfT19UUkFDRUVY
SVQNCiAgICArY29uc3QgUFRSQUNFX0VWRU5UX0NMT05FID0gX1BUUkFDRV9FVkVOVF9DTE9ORQ0K
ICAgICtjb25zdCBQVFJBQ0VfR0VUUkVHUyA9IF9QVFJBQ0VfR0VUUkVHUw0KICAgICtjb25zdCBQ
VFJBQ0VfT19UUkFDRVZGT1JLID0gX1BUUkFDRV9PX1RSQUNFVkZPUksNCiAgICArY29uc3QgUFRS
QUNFX1NFQ0NPTVBfR0VUX0ZJTFRFUiA9IF9QVFJBQ0VfU0VDQ09NUF9HRVRfRklMVEVSDQogICAg
K2NvbnN0IFBUUkFDRV9QRUVLVVNSID0gX1BUUkFDRV9QRUVLVVNSDQogICAgK2NvbnN0IFBUUkFD
RV9TRVRSRUdTRVQgPSBfUFRSQUNFX1NFVFJFR1NFVA0KICAgICtjb25zdCBQVFJBQ0VfU0VURlBY
UkVHUyA9IF9QVFJBQ0VfU0VURlBYUkVHUw0KICAgICtjb25zdCBQVFJBQ0VfR0VURlBSRUdTID0g
X1BUUkFDRV9HRVRGUFJFR1MNCiAgICArY29uc3QgUFRSQUNFX0VWRU5UX0ZPUksgPSBfUFRSQUNF
X0VWRU5UX0ZPUksNCiAgICArY29uc3QgUFRSQUNFX0dFVF9USFJFQURfQVJFQSA9IF9QVFJBQ0Vf
R0VUX1RIUkVBRF9BUkVBDQogICAgK2NvbnN0IFBUUkFDRV9TRVRTSUdNQVNLID0gX1BUUkFDRV9T
RVRTSUdNQVNLDQogICAgK2NvbnN0IFBUUkFDRV9BUkNIX1BSQ1RMID0gX1BUUkFDRV9BUkNIX1BS
Q1RMDQogICAgK2NvbnN0IFBUUkFDRV9TRUNDT01QX0dFVF9NRVRBREFUQSA9IF9QVFJBQ0VfU0VD
Q09NUF9HRVRfTUVUQURBVEENCiAgICArY29uc3QgUFRSQUNFX09fVFJBQ0VTRUNDT01QID0gX1BU
UkFDRV9PX1RSQUNFU0VDQ09NUA0KICAgICtjb25zdCBQVFJBQ0VfUE9LRVRFWFQgPSBfUFRSQUNF
X1BPS0VURVhUDQogICAgK2NvbnN0IFBUUkFDRV9FVkVOVF9TVE9QID0gX1BUUkFDRV9FVkVOVF9T
VE9QDQogICAgK2NvbnN0IFBUUkFDRV9TRVRSRUdTID0gX1BUUkFDRV9TRVRSRUdTDQogICAgK2Nv
bnN0IFBUUkFDRV9TRVRGUFJFR1MgPSBfUFRSQUNFX1NFVEZQUkVHUw0KICAgICt0eXBlIFB0cmFj
ZVJlZ3Mgc3RydWN0IHsgUjE1IHVpbnQ2NDsgUjE0IHVpbnQ2NDsgUjEzIHVpbnQ2NDsgUjEyIHVp
bnQ2NDsgUmJwIHVpbnQ2NDsgUmJ4IHVpbnQ2NDsgUjExIHVpbnQ2NDsgUjEwIHVpbnQ2NDsgUjkg
dWludDY0OyBSOCB1aW50NjQ7IFJheCB1aW50NjQ7IFJjeCB1aW50NjQ7IFJkeCB1aW50NjQ7IFJz
aSB1aW50NjQ7IFJkaSB1aW50NjQ7IE9yaWdfcmF4IHVpbnQ2NDsgUmlwIHVpbnQ2NDsgQ3MgdWlu
dDY0OyBFZmxhZ3MgdWludDY0OyBSc3AgdWludDY0OyBTcyB1aW50NjQ7IEZzX2Jhc2UgdWludDY0
OyBHc19iYXNlIHVpbnQ2NDsgRHMgdWludDY0OyBFcyB1aW50NjQ7IEZzIHVpbnQ2NDsgR3MgdWlu
dDY0OyB9DQogICAgK3R5cGUgU2l6ZV90IF9zaXplX3QNCiAgICArdHlwZSBTc2l6ZV90IF9zc2l6
ZV90DQogICAgK3R5cGUgT2Zmc2V0X3QgX29mZjY0X3QNCiAgICArdHlwZSBNb2RlX3QgX21vZGVf
dA0KICAgICt0eXBlIFBpZF90IF9waWRfdA0KICAgICt0eXBlIFVpZF90IF91aWRfdA0KICAgICt0
eXBlIEdpZF90IF9naWRfdA0KICAgICt0eXBlIFNvY2tsZW5fdCBfc29ja2xlbl90DQogICAgK3R5
cGUgX0NfaW50IGludDMyDQogICAgK3R5cGUgX0NfdWludCB1aW50MzINCiAgICArdHlwZSBfQ19s
b25nIGludDY0DQogICAgK3R5cGUgX0NfdWxvbmcgdWludDY0DQogICAgK3R5cGUgVGltZV90IF90
aW1lX3QNCiAgICArdHlwZSBUaW1ldmFsX3NlY190IGludDY0DQogICAgK3R5cGUgVGltZXZhbF91
c2VjX3QgaW50NjQNCiAgICArdHlwZSBUaW1ldmFsIHN0cnVjdCB7IFNlYyBUaW1ldmFsX3NlY190
OyBVc2VjIFRpbWV2YWxfdXNlY190OyB9DQogICAgK3R5cGUgVGltZXNwZWNfc2VjX3QgaW50NjQN
CiAgICArdHlwZSBUaW1lc3BlY19uc2VjX3QgaW50NjQNCiAgICArdHlwZSBUaW1lc3BlYyBzdHJ1
Y3QgeyBTZWMgVGltZXNwZWNfc2VjX3Q7IE5zZWMgVGltZXNwZWNfbnNlY190OyB9DQogICAgK3R5
cGUgVG1zIHN0cnVjdCB7IFV0aW1lIGludDY0OyBTdGltZSBpbnQ2NDsgQ3V0aW1lIGludDY0OyBD
c3RpbWUgaW50NjQ7IH0NCiAgICArdHlwZSBTdGF0X3Qgc3RydWN0IHsgRGV2IHVpbnQ2NDsgSW5v
IHVpbnQ2NDsgTmxpbmsgdWludDY0OyBNb2RlIHVpbnQzMjsgVWlkIHVpbnQzMjsgR2lkIHVpbnQz
MjsgX19wYWQwIGludDMyOyBSZGV2IHVpbnQ2NDsgU2l6ZSBpbnQ2NDsgQmxrc2l6ZSBpbnQ2NDsg
QmxvY2tzIGludDY0OyBBdGltIFRpbWVzcGVjOyBNdGltIFRpbWVzcGVjOyBDdGltIFRpbWVzcGVj
OyBfX2dsaWJjX3Jlc2VydmVkIFsyKzFdaW50NjQ7IH0NCiAgICArdHlwZSBEaXJlbnQgc3RydWN0
IHsgSW5vIHVpbnQ2NDsgT2ZmIGludDY0OyBSZWNsZW4gdWludDE2OyBUeXBlIHVpbnQ4OyBOYW1l
IFsyNTUrMV1ieXRlOyBHb2R1bXBfMF9wYWQgWzVdYnl0ZTsgfQ0KICAgICt0eXBlIERJUiBfRElS
DQogICAgK2NvbnN0IERUX0NIUiA9IF9EVF9DSFINCiAgICArY29uc3QgRFRfUkVHID0gX0RUX1JF
Rw0KICAgICtjb25zdCBEVF9TT0NLID0gX0RUX1NPQ0sNCiAgICArY29uc3QgRFRfQkxLID0gX0RU
X0JMSw0KICAgICtjb25zdCBEVF9XSFQgPSBfRFRfV0hUDQogICAgK2NvbnN0IERUX0xOSyA9IF9E
VF9MTksNCiAgICArY29uc3QgRFRfRklGTyA9IF9EVF9GSUZPDQogICAgK2NvbnN0IERUX1VOS05P
V04gPSBfRFRfVU5LTk9XTg0KICAgICtjb25zdCBEVF9ESVIgPSBfRFRfRElSDQogICAgK3R5cGUg
UnVzYWdlIHN0cnVjdCB7IFV0aW1lIFRpbWV2YWw7IFN0aW1lIFRpbWV2YWw7IE1heHJzcyBpbnQ2
NDsgSXhyc3MgaW50NjQ7IElkcnNzIGludDY0OyBJc3JzcyBpbnQ2NDsgTWluZmx0IGludDY0OyBN
YWpmbHQgaW50NjQ7IE5zd2FwIGludDY0OyBJbmJsb2NrIGludDY0OyBPdWJsb2NrIGludDY0OyBN
c2dzbmQgaW50NjQ7IE1zZ3JjdiBpbnQ2NDsgTnNpZ25hbHMgaW50NjQ7IE52Y3N3IGludDY0OyBO
aXZjc3cgaW50NjQ7IH0NCiAgICArY29uc3QgUlVTQUdFX1NFTEYgPSBfUlVTQUdFX1NFTEYNCiAg
ICArY29uc3QgUlVTQUdFX0NISUxEUkVOID0gX1JVU0FHRV9DSElMRFJFTg0KICAgICtjb25zdCBS
VVNBR0VfVEhSRUFEID0gX1JVU0FHRV9USFJFQUQNCiAgICArdHlwZSBVdHNuYW1lIHN0cnVjdCB7
IFN5c25hbWUgWzY0KzFdaW50ODsgTm9kZW5hbWUgWzY0KzFdaW50ODsgUmVsZWFzZSBbNjQrMV1p
bnQ4OyBWZXJzaW9uIFs2NCsxXWludDg7IE1hY2hpbmUgWzY0KzFdaW50ODsgRG9tYWlubmFtZSBb
NjQrMV1pbnQ4OyB9DQogICAgK3R5cGUgSW92ZWNfbGVuX3QgdWludDY0DQogICAgK3R5cGUgSW92
ZWMgc3RydWN0IHsgQmFzZSAqYnl0ZTsgTGVuIElvdmVjX2xlbl90OyB9DQogICAgK3R5cGUgTXNn
aGRyX2NvbnRyb2xsZW5fdCB1aW50NjQNCiAgICArdHlwZSBNc2doZHIgc3RydWN0IHsgTmFtZSAq
Ynl0ZTsgTmFtZWxlbiB1aW50MzI7IElvdiAqSW92ZWM7IElvdmxlbiB1aW50NjQ7IENvbnRyb2wg
KmJ5dGU7IENvbnRyb2xsZW4gTXNnaGRyX2NvbnRyb2xsZW5fdDsgRmxhZ3MgaW50MzI7IEdvZHVt
cF8wX3BhZCBbNF1ieXRlOyB9DQogICAgK2NvbnN0IE1TR19FT1IgPSBfTVNHX0VPUg0KICAgICtj
b25zdCBNU0dfQ01TR19DTE9FWEVDID0gX01TR19DTVNHX0NMT0VYRUMNCiAgICArY29uc3QgTVNH
X0RPTlRXQUlUID0gX01TR19ET05UV0FJVA0KICAgICtjb25zdCBNU0dfV0FJVEZPUk9ORSA9IF9N
U0dfV0FJVEZPUk9ORQ0KICAgICtjb25zdCBNU0dfUlNUID0gX01TR19SU1QNCiAgICArY29uc3Qg
TVNHX0ZJTiA9IF9NU0dfRklODQogICAgK2NvbnN0IE1TR19CQVRDSCA9IF9NU0dfQkFUQ0gNCiAg
ICArY29uc3QgTVNHX1BST1hZID0gX01TR19QUk9YWQ0KICAgICtjb25zdCBNU0dfQ09ORklSTSA9
IF9NU0dfQ09ORklSTQ0KICAgICtjb25zdCBNU0dfRVJSUVVFVUUgPSBfTVNHX0VSUlFVRVVFDQog
ICAgK2NvbnN0IE1TR19UUllIQVJEID0gX01TR19UUllIQVJEDQogICAgK2NvbnN0IE1TR19QRUVL
ID0gX01TR19QRUVLDQogICAgK2NvbnN0IE1TR19aRVJPQ09QWSA9IF9NU0dfWkVST0NPUFkNCiAg
ICArY29uc3QgTVNHX01PUkUgPSBfTVNHX01PUkUNCiAgICArY29uc3QgTVNHX05PU0lHTkFMID0g
X01TR19OT1NJR05BTA0KICAgICtjb25zdCBNU0dfT09CID0gX01TR19PT0INCiAgICArY29uc3Qg
TVNHX0NUUlVOQyA9IF9NU0dfQ1RSVU5DDQogICAgK2NvbnN0IE1TR19TWU4gPSBfTVNHX1NZTg0K
ICAgICtjb25zdCBNU0dfVFJVTkMgPSBfTVNHX1RSVU5DDQogICAgK2NvbnN0IE1TR19ET05UUk9V
VEUgPSBfTVNHX0RPTlRST1VURQ0KICAgICtjb25zdCBNU0dfV0FJVEFMTCA9IF9NU0dfV0FJVEFM
TA0KICAgICtjb25zdCBNU0dfRkFTVE9QRU4gPSBfTVNHX0ZBU1RPUEVODQogICAgK3R5cGUgQ21z
Z2hkcl9sZW5fdCB1aW50NjQNCiAgICArdHlwZSBDbXNnaGRyIHN0cnVjdCB7IExlbiBDbXNnaGRy
X2xlbl90OyBMZXZlbCBpbnQzMjsgVHlwZSBpbnQzMjsgX19jbXNnX2RhdGEgWzBddWludDg7IH0N
CiAgICArY29uc3QgU0NNX1RJTUVTVEFNUElORyA9IF9TQ01fVElNRVNUQU1QSU5HDQogICAgK2Nv
bnN0IFNDTV9USU1FU1RBTVBJTkdfUEtUSU5GTyA9IF9TQ01fVElNRVNUQU1QSU5HX1BLVElORk8N
CiAgICArY29uc3QgU0NNX1RYVElNRSA9IF9TQ01fVFhUSU1FDQogICAgK2NvbnN0IFNDTV9USU1F
U1RBTVBJTkdfT1BUX1NUQVRTID0gX1NDTV9USU1FU1RBTVBJTkdfT1BUX1NUQVRTDQogICAgK2Nv
bnN0IFNDTV9SSUdIVFMgPSBfU0NNX1JJR0hUUw0KICAgICtjb25zdCBTQ01fVElNRVNUQU1QTlMg
PSBfU0NNX1RJTUVTVEFNUE5TDQogICAgK2NvbnN0IFNDTV9DUkVERU5USUFMUyA9IF9TQ01fQ1JF
REVOVElBTFMNCiAgICArY29uc3QgU0NNX1RJTUVTVEFNUCA9IF9TQ01fVElNRVNUQU1QDQogICAg
K2NvbnN0IFNDTV9XSUZJX1NUQVRVUyA9IF9TQ01fV0lGSV9TVEFUVVMNCiAgICArdHlwZSBVY3Jl
ZCBzdHJ1Y3QgeyBQaWQgaW50MzI7IFVpZCB1aW50MzI7IEdpZCB1aW50MzI7IH0NCiAgICArdHlw
ZSBJUE1yZXEgc3RydWN0IHsgTXVsdGlhZGRyIFs0XWJ5dGU7IEludGVyZmFjZSBbNF1ieXRlOyB9
DQogICAgK3R5cGUgSVB2Nk1yZXEgc3RydWN0IHsgTXVsdGlhZGRyIFsxNl1ieXRlOyBJbnRlcmZh
Y2UgdWludDMyOyB9DQogICAgK3R5cGUgSVBNcmVxbiBzdHJ1Y3QgeyBNdWx0aWFkZHIgWzRdYnl0
ZTsgQWRkcmVzcyBbNF1ieXRlOyBJZmluZGV4IGludDMyOyB9DQogICAgK3R5cGUgSUNNUHY2Rmls
dGVyIHN0cnVjdCB7IGljbXA2X0ZpbHQgWzcrMV11aW50MzI7IH0NCiAgICArdHlwZSBJUHY2TVRV
SW5mbyBzdHJ1Y3QgeyBBZGRyIFJhd1NvY2thZGRySW5ldDY7IE10dSB1aW50MzI7IH0NCiAgICAr
dHlwZSBmZHNfYml0c190eXBlIGludDY0DQogICAgK3R5cGUgQWRkcmluZm8gc3RydWN0IHsgQWlf
ZmxhZ3MgaW50MzI7IEFpX2ZhbWlseSBpbnQzMjsgQWlfc29ja3R5cGUgaW50MzI7IEFpX3Byb3Rv
Y29sIGludDMyOyBBaV9hZGRybGVuIHVpbnQzMjsgQWlfYWRkciAqX3NvY2thZGRyOyBBaV9jYW5v
bm5hbWUgKmludDg7IEFpX25leHQgKkFkZHJpbmZvOyB9DQogICAgK2NvbnN0IEFJX05VTUVSSUNI
T1NUID0gX0FJX05VTUVSSUNIT1NUDQogICAgK2NvbnN0IEFJX0NBTk9OSUROID0gX0FJX0NBTk9O
SURODQogICAgK2NvbnN0IEFJX0FMTCA9IF9BSV9BTEwNCiAgICArY29uc3QgQUlfQ0FOT05OQU1F
ID0gX0FJX0NBTk9OTkFNRQ0KICAgICtjb25zdCBBSV9WNE1BUFBFRCA9IF9BSV9WNE1BUFBFRA0K
ICAgICtjb25zdCBBSV9QQVNTSVZFID0gX0FJX1BBU1NJVkUNCiAgICArY29uc3QgQUlfTlVNRVJJ
Q1NFUlYgPSBfQUlfTlVNRVJJQ1NFUlYNCiAgICArY29uc3QgQUlfSUROID0gX0FJX0lETg0KICAg
ICtjb25zdCBBSV9BRERSQ09ORklHID0gX0FJX0FERFJDT05GSUcNCiAgICArY29uc3QgRUFJX0ZB
SUwgPSBfRUFJX0ZBSUwNCiAgICArY29uc3QgRUFJX05PREFUQSA9IF9FQUlfTk9EQVRBDQogICAg
K2NvbnN0IEVBSV9OT05BTUUgPSBfRUFJX05PTkFNRQ0KICAgICtjb25zdCBFQUlfSU5QUk9HUkVT
UyA9IF9FQUlfSU5QUk9HUkVTUw0KICAgICtjb25zdCBFQUlfU1lTVEVNID0gX0VBSV9TWVNURU0N
CiAgICArY29uc3QgRUFJX0FHQUlOID0gX0VBSV9BR0FJTg0KICAgICtjb25zdCBFQUlfTUVNT1JZ
ID0gX0VBSV9NRU1PUlkNCiAgICArY29uc3QgRUFJX0NBTkNFTEVEID0gX0VBSV9DQU5DRUxFRA0K
ICAgICtjb25zdCBFQUlfQUREUkZBTUlMWSA9IF9FQUlfQUREUkZBTUlMWQ0KICAgICtjb25zdCBF
QUlfTk9UQ0FOQ0VMRUQgPSBfRUFJX05PVENBTkNFTEVEDQogICAgK2NvbnN0IEVBSV9JRE5fRU5D
T0RFID0gX0VBSV9JRE5fRU5DT0RFDQogICAgK2NvbnN0IEVBSV9GQU1JTFkgPSBfRUFJX0ZBTUlM
WQ0KICAgICtjb25zdCBFQUlfQkFERkxBR1MgPSBfRUFJX0JBREZMQUdTDQogICAgK2NvbnN0IEVB
SV9JTlRSID0gX0VBSV9JTlRSDQogICAgK2NvbnN0IEVBSV9TT0NLVFlQRSA9IF9FQUlfU09DS1RZ
UEUNCiAgICArY29uc3QgRUFJX1NFUlZJQ0UgPSBfRUFJX1NFUlZJQ0UNCiAgICArY29uc3QgRUFJ
X0FMTERPTkUgPSBfRUFJX0FMTERPTkUNCiAgICArY29uc3QgRUFJX09WRVJGTE9XID0gX0VBSV9P
VkVSRkxPVw0KICAgICtjb25zdCBOSV9OVU1FUklDU0VSViA9IF9OSV9OVU1FUklDU0VSVg0KICAg
ICtjb25zdCBOSV9OQU1FUkVRRCA9IF9OSV9OQU1FUkVRRA0KICAgICtjb25zdCBOSV9OT0ZRRE4g
PSBfTklfTk9GUURODQogICAgK2NvbnN0IE5JX05VTUVSSUNIT1NUID0gX05JX05VTUVSSUNIT1NU
DQogICAgK2NvbnN0IE5JX0lETiA9IF9OSV9JRE4NCiAgICArY29uc3QgTklfREdSQU0gPSBfTklf
REdSQU0NCiAgICArY29uc3QgTklfTUFYSE9TVCA9IF9OSV9NQVhIT1NUDQogICAgK2NvbnN0IE5J
X01BWFNFUlYgPSBfTklfTUFYU0VSVg0KICAgICt0eXBlIFBhc3N3ZCBzdHJ1Y3QgeyBQd19uYW1l
ICppbnQ4OyBQd19wYXNzd2QgKmludDg7IFB3X3VpZCB1aW50MzI7IFB3X2dpZCB1aW50MzI7IFB3
X2dlY29zICppbnQ4OyBQd19kaXIgKmludDg7IFB3X3NoZWxsICppbnQ4OyB9DQogICAgK3R5cGUg
R3JvdXAgc3RydWN0IHsgR3JfbmFtZSAqaW50ODsgR3JfcGFzc3dkICppbnQ4OyBHcl9naWQgdWlu
dDMyOyBHcl9tZW0gKippbnQ4OyB9DQogICAgK2NvbnN0IFRJT0NHSUNPVU5UID0gX1RJT0NHSUNP
VU5UDQogICAgK2NvbnN0IFRJT0NTRVJTRVRNVUxUSSA9IF9USU9DU0VSU0VUTVVMVEkNCiAgICAr
Y29uc3QgVElPQ0VYQ0wgPSBfVElPQ0VYQ0wNCiAgICArY29uc3QgVElPQ01TRVQgPSBfVElPQ01T
RVQNCiAgICArY29uc3QgVElPQ1NTT0ZUQ0FSID0gX1RJT0NTU09GVENBUg0KICAgICtjb25zdCBU
SU9DU1BHUlAgPSBfVElPQ1NQR1JQDQogICAgK2NvbnN0IFRJT0NQS1RfRkxVU0hSRUFEID0gX1RJ
T0NQS1RfRkxVU0hSRUFEDQogICAgK2NvbnN0IFRJT0NTRVJfVEVNVCA9IF9USU9DU0VSX1RFTVQN
CiAgICArY29uc3QgVElPQ1BLVF9GTFVTSFdSSVRFID0gX1RJT0NQS1RfRkxVU0hXUklURQ0KICAg
ICtjb25zdCBUSU9DU0xDS1RSTUlPUyA9IF9USU9DU0xDS1RSTUlPUw0KICAgICtjb25zdCBUSU9D
R0VURCA9IF9USU9DR0VURA0KICAgICtjb25zdCBUSU9DTUlXQUlUID0gX1RJT0NNSVdBSVQNCiAg
ICArY29uc3QgVElPQ05PVFRZID0gX1RJT0NOT1RUWQ0KICAgICtjb25zdCBUSU9DR1BHUlAgPSBf
VElPQ0dQR1JQDQogICAgK2NvbnN0IFRJT0NQS1QgPSBfVElPQ1BLVA0KICAgICtjb25zdCBUSU9D
TV9SVFMgPSBfVElPQ01fUlRTDQogICAgK2NvbnN0IFRJT0NTUlM0ODUgPSBfVElPQ1NSUzQ4NQ0K
ICAgICtjb25zdCBUSU9DT1VUUSA9IF9USU9DT1VUUQ0KICAgICtjb25zdCBUSU9DTV9EVFIgPSBf
VElPQ01fRFRSDQogICAgK2NvbnN0IFRJT0NTV0lOU1ogPSBfVElPQ1NXSU5TWg0KICAgICtjb25z
dCBUSU9DU0JSSyA9IF9USU9DU0JSSw0KICAgICtjb25zdCBUSU9DU0VSQ09ORklHID0gX1RJT0NT
RVJDT05GSUcNCiAgICArY29uc3QgVElPQ0lOUSA9IF9USU9DSU5RDQogICAgK2NvbnN0IFRJT0NN
QklTID0gX1RJT0NNQklTDQogICAgK2NvbnN0IFRJT0NNR0VUID0gX1RJT0NNR0VUDQogICAgK2Nv
bnN0IFRJT0NOWENMID0gX1RJT0NOWENMDQogICAgK2NvbnN0IFRJT0NTVEkgPSBfVElPQ1NUSQ0K
ICAgICtjb25zdCBUSU9DTV9EU1IgPSBfVElPQ01fRFNSDQogICAgK2NvbnN0IFRJT0NHUlM0ODUg
PSBfVElPQ0dSUzQ4NQ0KICAgICtjb25zdCBUSU9DTV9DRCA9IF9USU9DTV9DRA0KICAgICtjb25z
dCBUSU9DR1dJTlNaID0gX1RJT0NHV0lOU1oNCiAgICArY29uc3QgVElPQ1NFUlNXSUxEID0gX1RJ
T0NTRVJTV0lMRA0KICAgICtjb25zdCBUSU9DTV9DQVIgPSBfVElPQ01fQ0FSDQogICAgK2NvbnN0
IFRJT0NDQlJLID0gX1RJT0NDQlJLDQogICAgK2NvbnN0IFRJT0NHU09GVENBUiA9IF9USU9DR1NP
RlRDQVINCiAgICArY29uc3QgVElPQ01fTEUgPSBfVElPQ01fTEUNCiAgICArY29uc3QgVElPQ1BL
VF9JT0NUTCA9IF9USU9DUEtUX0lPQ1RMDQogICAgK2NvbnN0IFRJT0NQS1RfU1RBUlQgPSBfVElP
Q1BLVF9TVEFSVA0KICAgICtjb25zdCBUSU9DU0VSR0VUTVVMVEkgPSBfVElPQ1NFUkdFVE1VTFRJ
DQogICAgK2NvbnN0IFRJT0NHTENLVFJNSU9TID0gX1RJT0NHTENLVFJNSU9TDQogICAgK2NvbnN0
IFRJT0NNX1JJID0gX1RJT0NNX1JJDQogICAgK2NvbnN0IFRJT0NNX1NSID0gX1RJT0NNX1NSDQog
ICAgK2NvbnN0IFRJT0NNX1NUID0gX1RJT0NNX1NUDQogICAgK2NvbnN0IFRJT0NDT05TID0gX1RJ
T0NDT05TDQogICAgK2NvbnN0IFRJT0NWSEFOR1VQID0gX1RJT0NWSEFOR1VQDQogICAgK2NvbnN0
IFRJT0NQS1RfRE9TVE9QID0gX1RJT0NQS1RfRE9TVE9QDQogICAgK2NvbnN0IFRJT0NNQklDID0g
X1RJT0NNQklDDQogICAgK2NvbnN0IFRJT0NHU0lEID0gX1RJT0NHU0lEDQogICAgK2NvbnN0IFRJ
T0NTRVJHV0lMRCA9IF9USU9DU0VSR1dJTEQNCiAgICArY29uc3QgVElPQ01fQ1RTID0gX1RJT0NN
X0NUUw0KICAgICtjb25zdCBUSU9DUEtUX0RBVEEgPSBfVElPQ1BLVF9EQVRBDQogICAgK2NvbnN0
IFRJT0NTRVREID0gX1RJT0NTRVREDQogICAgK2NvbnN0IFRJT0NTRVJHRVRMU1IgPSBfVElPQ1NF
UkdFVExTUg0KICAgICtjb25zdCBUSU9DU0VSR1NUUlVDVCA9IF9USU9DU0VSR1NUUlVDVA0KICAg
ICtjb25zdCBUSU9DTElOVVggPSBfVElPQ0xJTlVYDQogICAgK2NvbnN0IFRJT0NTU0VSSUFMID0g
X1RJT0NTU0VSSUFMDQogICAgK2NvbnN0IFRJT0NQS1RfTk9TVE9QID0gX1RJT0NQS1RfTk9TVE9Q
DQogICAgK2NvbnN0IFRJT0NHU0VSSUFMID0gX1RJT0NHU0VSSUFMDQogICAgK2NvbnN0IFRJT0NQ
S1RfU1RPUCA9IF9USU9DUEtUX1NUT1ANCiAgICArY29uc3QgVElPQ01fUk5HID0gX1RJT0NNX1JO
Rw0KICAgICtjb25zdCBUSU9DU0NUVFkgPSBfVElPQ1NDVFRZDQogICAgK2NvbnN0IFRJT0NHUFRO
ID0gX1RJT0NHUFROX3ZhbA0KICAgICtjb25zdCBUSU9DU1BUTENLID0gX1RJT0NTUFRMQ0tfdmFs
DQogICAgK2NvbnN0IFRJT0NHREVWID0gX1RJT0NHREVWX3ZhbA0KICAgICtjb25zdCBUSU9DU0lH
ID0gX1RJT0NTSUdfdmFsDQogICAgK2NvbnN0IFRVTlNFVE5PQ1NVTSA9IF9UVU5TRVROT0NTVU1f
dmFsDQogICAgK2NvbnN0IFRVTlNFVERFQlVHID0gX1RVTlNFVERFQlVHX3ZhbA0KICAgICtjb25z
dCBUVU5TRVRJRkYgPSBfVFVOU0VUSUZGX3ZhbA0KICAgICtjb25zdCBUVU5TRVRQRVJTSVNUID0g
X1RVTlNFVFBFUlNJU1RfdmFsDQogICAgK2NvbnN0IFRVTlNFVE9XTkVSID0gX1RVTlNFVE9XTkVS
X3ZhbA0KICAgICtjb25zdCBUVU5TRVRMSU5LID0gX1RVTlNFVExJTktfdmFsDQogICAgK2NvbnN0
IFRVTlNFVEdST1VQID0gX1RVTlNFVEdST1VQX3ZhbA0KICAgICtjb25zdCBUVU5HRVRGRUFUVVJF
UyA9IF9UVU5HRVRGRUFUVVJFU192YWwNCiAgICArY29uc3QgVFVOU0VUT0ZGTE9BRCA9IF9UVU5T
RVRPRkZMT0FEX3ZhbA0KICAgICtjb25zdCBUVU5TRVRUWEZJTFRFUiA9IF9UVU5TRVRUWEZJTFRF
Ul92YWwNCiAgICArY29uc3QgVFVOR0VUSUZGID0gX1RVTkdFVElGRl92YWwNCiAgICArY29uc3Qg
VFVOR0VUU05EQlVGID0gX1RVTkdFVFNOREJVRl92YWwNCiAgICArY29uc3QgVFVOU0VUU05EQlVG
ID0gX1RVTlNFVFNOREJVRl92YWwNCiAgICArY29uc3QgVFVOQVRUQUNIRklMVEVSID0gX1RVTkFU
VEFDSEZJTFRFUl92YWwNCiAgICArY29uc3QgVFVOREVUQUNIRklMVEVSID0gX1RVTkRFVEFDSEZJ
TFRFUl92YWwNCiAgICArY29uc3QgVFVOR0VUVk5FVEhEUlNaID0gX1RVTkdFVFZORVRIRFJTWl92
YWwNCiAgICArY29uc3QgVFVOU0VUVk5FVEhEUlNaID0gX1RVTlNFVFZORVRIRFJTWl92YWwNCiAg
ICArY29uc3QgVFVOU0VUUVVFVUUgPSBfVFVOU0VUUVVFVUVfdmFsDQogICAgK2NvbnN0IFRVTlNF
VElGSU5ERVggPSBfVFVOU0VUSUZJTkRFWF92YWwNCiAgICArY29uc3QgVFVOR0VURklMVEVSID0g
X1RVTkdFVEZJTFRFUl92YWwNCiAgICArY29uc3QgVENHRVRBID0gX1RDR0VUQQ0KICAgICtjb25z
dCBUQ0dFVFMgPSBfVENHRVRTDQogICAgK2NvbnN0IFRDR0VUWCA9IF9UQ0dFVFgNCiAgICArY29u
c3QgVENTRVRBID0gX1RDU0VUQQ0KICAgICtjb25zdCBUQ1NFVEFXID0gX1RDU0VUQVcNCiAgICAr
Y29uc3QgVENTRVRBRiA9IF9UQ1NFVEFGDQogICAgK2NvbnN0IFRDU0VUU0YgPSBfVENTRVRTRg0K
ICAgICtjb25zdCBUQ1NFVFNXID0gX1RDU0VUU1cNCiAgICArY29uc3QgVENTRVRYRiA9IF9UQ1NF
VFhGDQogICAgK2NvbnN0IFRDU0VUWFcgPSBfVENTRVRYVw0KICAgICtjb25zdCBUQ1NFVFMgPSBf
VENTRVRTDQogICAgK2NvbnN0IFRDU0VUWCA9IF9UQ1NFVFgNCiAgICArdHlwZSBObE1zZ2hkciBz
dHJ1Y3QgeyBMZW4gdWludDMyOyBUeXBlIHVpbnQxNjsgRmxhZ3MgdWludDE2OyBTZXEgdWludDMy
OyBQaWQgdWludDMyOyB9DQogICAgK2NvbnN0IE5MTV9GX0FDSyA9IF9OTE1fRl9BQ0sNCiAgICAr
Y29uc3QgTkxNX0ZfUk9PVCA9IF9OTE1fRl9ST09UDQogICAgK2NvbnN0IE5MTV9GX0VDSE8gPSBf
TkxNX0ZfRUNITw0KICAgICtjb25zdCBOTE1TR0VSUl9BVFRSX09GRlMgPSBfTkxNU0dFUlJfQVRU
Ul9PRkZTDQogICAgK2NvbnN0IE5MTV9GX0RVTVBfSU5UUiA9IF9OTE1fRl9EVU1QX0lOVFINCiAg
ICArY29uc3QgTkxNX0ZfQVRPTUlDID0gX05MTV9GX0FUT01JQw0KICAgICtjb25zdCBOTE1fRl9S
RVFVRVNUID0gX05MTV9GX1JFUVVFU1QNCiAgICArY29uc3QgTkxNU0dfRVJST1IgPSBfTkxNU0df
RVJST1INCiAgICArY29uc3QgTkxNU0dfTk9PUCA9IF9OTE1TR19OT09QDQogICAgK2NvbnN0IE5M
TV9GX0RVTVBfRklMVEVSRUQgPSBfTkxNX0ZfRFVNUF9GSUxURVJFRA0KICAgICtjb25zdCBOTE1f
Rl9SRVBMQUNFID0gX05MTV9GX1JFUExBQ0UNCiAgICArY29uc3QgTkxNX0ZfQUNLX1RMVlMgPSBf
TkxNX0ZfQUNLX1RMVlMNCiAgICArY29uc3QgTkxNU0dfRE9ORSA9IF9OTE1TR19ET05FDQogICAg
K2NvbnN0IE5MTVNHRVJSX0FUVFJfQ09PS0lFID0gX05MTVNHRVJSX0FUVFJfQ09PS0lFDQogICAg
K2NvbnN0IE5MTV9GX0NBUFBFRCA9IF9OTE1fRl9DQVBQRUQNCiAgICArY29uc3QgTkxNX0ZfRVhD
TCA9IF9OTE1fRl9FWENMDQogICAgK2NvbnN0IE5MTV9GX05PTlJFQyA9IF9OTE1fRl9OT05SRUMN
CiAgICArY29uc3QgTkxNU0dfQUxJR05UTyA9IF9OTE1TR19BTElHTlRPDQogICAgK2NvbnN0IE5M
TV9GX01VTFRJID0gX05MTV9GX01VTFRJDQogICAgK2NvbnN0IE5MTV9GX01BVENIID0gX05MTV9G
X01BVENIDQogICAgK2NvbnN0IE5MTVNHRVJSX0FUVFJfVU5VU0VEID0gX05MTVNHRVJSX0FUVFJf
VU5VU0VEDQogICAgK2NvbnN0IE5MTVNHRVJSX0FUVFJfTVNHID0gX05MTVNHRVJSX0FUVFJfTVNH
DQogICAgK2NvbnN0IE5MTVNHX01JTl9UWVBFID0gX05MTVNHX01JTl9UWVBFDQogICAgK2NvbnN0
IE5MTVNHRVJSX0FUVFJfTUFYID0gX05MTVNHRVJSX0FUVFJfTUFYDQogICAgK2NvbnN0IE5MTV9G
X0NSRUFURSA9IF9OTE1fRl9DUkVBVEUNCiAgICArY29uc3QgTkxNX0ZfRFVNUCA9IF9OTE1fRl9E
VU1QDQogICAgK2NvbnN0IE5MTVNHX09WRVJSVU4gPSBfTkxNU0dfT1ZFUlJVTg0KICAgICtjb25z
dCBOTE1fRl9BUFBFTkQgPSBfTkxNX0ZfQVBQRU5EDQogICAgK2NvbnN0IE5MTVNHX0hEUkxFTiA9
IChfc2l6ZW9mX25sbXNnaGRyICsgKE5MTVNHX0FMSUdOVE8tMSkpICZeIChOTE1TR19BTElHTlRP
LTEpDQogICAgK3R5cGUgUnRNc2cgc3RydWN0IHsgRmFtaWx5IHVpbnQ4OyBEc3RfbGVuIHVpbnQ4
OyBTcmNfbGVuIHVpbnQ4OyBUb3MgdWludDg7IFRhYmxlIHVpbnQ4OyBQcm90b2NvbCB1aW50ODsg
U2NvcGUgdWludDg7IFR5cGUgdWludDg7IEZsYWdzIHVpbnQzMjsgfQ0KICAgICt0eXBlIFJ0R2Vu
bXNnIHN0cnVjdCB7IEZhbWlseSB1aW50ODsgfQ0KICAgICtjb25zdCBSVF9TQ09QRV9VTklWRVJT
RSA9IF9SVF9TQ09QRV9VTklWRVJTRQ0KICAgICtjb25zdCBSVF9DTEFTU19NQVggPSBfUlRfQ0xB
U1NfTUFYDQogICAgK2NvbnN0IFJUX1RBQkxFX0xPQ0FMID0gX1JUX1RBQkxFX0xPQ0FMDQogICAg
K2NvbnN0IFJUX0NMQVNTX1VOU1BFQyA9IF9SVF9DTEFTU19VTlNQRUMNCiAgICArY29uc3QgUlRf
U0NPUEVfTElOSyA9IF9SVF9TQ09QRV9MSU5LDQogICAgK2NvbnN0IFJUX1NDT1BFX1NJVEUgPSBf
UlRfU0NPUEVfU0lURQ0KICAgICtjb25zdCBSVF9UQUJMRV9NQVggPSBfUlRfVEFCTEVfTUFYDQog
ICAgK2NvbnN0IFJUX1RBQkxFX0NPTVBBVCA9IF9SVF9UQUJMRV9DT01QQVQNCiAgICArY29uc3Qg
UlRfU0NPUEVfTk9XSEVSRSA9IF9SVF9TQ09QRV9OT1dIRVJFDQogICAgK2NvbnN0IFJUX1RBQkxF
X0RFRkFVTFQgPSBfUlRfVEFCTEVfREVGQVVMVA0KICAgICtjb25zdCBSVF9TQ09QRV9IT1NUID0g
X1JUX1NDT1BFX0hPU1QNCiAgICArY29uc3QgUlRfVEFCTEVfTUFJTiA9IF9SVF9UQUJMRV9NQUlO
DQogICAgK2NvbnN0IFJUX1RBQkxFX1VOU1BFQyA9IF9SVF9UQUJMRV9VTlNQRUMNCiAgICArY29u
c3QgUlRfQ0xBU1NfTE9DQUwgPSBfUlRfQ0xBU1NfTE9DQUwNCiAgICArY29uc3QgUlRfQ0xBU1Nf
TUFJTiA9IF9SVF9DTEFTU19NQUlODQogICAgK2NvbnN0IFJUX0NMQVNTX0RFRkFVTFQgPSBfUlRf
Q0xBU1NfREVGQVVMVA0KICAgICtjb25zdCBSVEFfVU5TUEVDID0gX1JUQV9VTlNQRUMNCiAgICAr
Y29uc3QgUlRBX0lQX1BST1RPID0gX1JUQV9JUF9QUk9UTw0KICAgICtjb25zdCBSVEFYX1JUVFZB
UiA9IF9SVEFYX1JUVFZBUg0KICAgICtjb25zdCBSVEFfVUlEID0gX1JUQV9VSUQNCiAgICArY29u
c3QgUlRBX0NBQ0hFSU5GTyA9IF9SVEFfQ0FDSEVJTkZPDQogICAgK2NvbnN0IFJUQV9NVUxUSVBB
VEggPSBfUlRBX01VTFRJUEFUSA0KICAgICtjb25zdCBSVEFYX1VOU1BFQyA9IF9SVEFYX1VOU1BF
Qw0KICAgICtjb25zdCBSVEFYX0NDX0FMR08gPSBfUlRBWF9DQ19BTEdPDQogICAgK2NvbnN0IFJU
QVhfSU5JVENXTkQgPSBfUlRBWF9JTklUQ1dORA0KICAgICtjb25zdCBSVEFYX0ZFQVRVUkVfQUxM
RlJBRyA9IF9SVEFYX0ZFQVRVUkVfQUxMRlJBRw0KICAgICtjb25zdCBSVEFYX0ZFQVRVUkVfU0FD
SyA9IF9SVEFYX0ZFQVRVUkVfU0FDSw0KICAgICtjb25zdCBSVEFfTUFSSyA9IF9SVEFfTUFSSw0K
ICAgICtjb25zdCBSVEFfTUZDX1NUQVRTID0gX1JUQV9NRkNfU1RBVFMNCiAgICArY29uc3QgUlRB
X1NSQyA9IF9SVEFfU1JDDQogICAgK2NvbnN0IFJUQV9HQVRFV0FZID0gX1JUQV9HQVRFV0FZDQog
ICAgK2NvbnN0IFJUQVhfTE9DSyA9IF9SVEFYX0xPQ0sNCiAgICArY29uc3QgUlRBWF9RVUlDS0FD
SyA9IF9SVEFYX1FVSUNLQUNLDQogICAgK2NvbnN0IFJUQV9UVExfUFJPUEFHQVRFID0gX1JUQV9U
VExfUFJPUEFHQVRFDQogICAgK2NvbnN0IFJUQVhfRkVBVFVSRV9FQ04gPSBfUlRBWF9GRUFUVVJF
X0VDTg0KICAgICtjb25zdCBSVEFYX1JFT1JERVJJTkcgPSBfUlRBWF9SRU9SREVSSU5HDQogICAg
K2NvbnN0IFJUQV9EUE9SVCA9IF9SVEFfRFBPUlQNCiAgICArY29uc3QgUlRBX1NFU1NJT04gPSBf
UlRBX1NFU1NJT04NCiAgICArY29uc3QgUlRBX1BSSU9SSVRZID0gX1JUQV9QUklPUklUWQ0KICAg
ICtjb25zdCBSVEFfTkVXRFNUID0gX1JUQV9ORVdEU1QNCiAgICArY29uc3QgUlRBWF9DV05EID0g
X1JUQVhfQ1dORA0KICAgICtjb25zdCBSVEFYX0lOSVRSV05EID0gX1JUQVhfSU5JVFJXTkQNCiAg
ICArY29uc3QgUlRBX1BSRUYgPSBfUlRBX1BSRUYNCiAgICArY29uc3QgUlRBX0VOQ0FQID0gX1JU
QV9FTkNBUA0KICAgICtjb25zdCBSVEFfRFNUID0gX1JUQV9EU1QNCiAgICArY29uc3QgUlRBX0VY
UElSRVMgPSBfUlRBX0VYUElSRVMNCiAgICArY29uc3QgUlRBX0FMSUdOVE8gPSBfUlRBX0FMSUdO
VE8NCiAgICArY29uc3QgUlRBWF9SVE9fTUlOID0gX1JUQVhfUlRPX01JTg0KICAgICtjb25zdCBS
VEFfRU5DQVBfVFlQRSA9IF9SVEFfRU5DQVBfVFlQRQ0KICAgICtjb25zdCBSVEFfTVBfQUxHTyA9
IF9SVEFfTVBfQUxHTw0KICAgICtjb25zdCBSVEFfSUlGID0gX1JUQV9JSUYNCiAgICArY29uc3Qg
UlRBWF9IT1BMSU1JVCA9IF9SVEFYX0hPUExJTUlUDQogICAgK2NvbnN0IFJUQV9WSUEgPSBfUlRB
X1ZJQQ0KICAgICtjb25zdCBSVEFfVEFCTEUgPSBfUlRBX1RBQkxFDQogICAgK2NvbnN0IFJUQV9T
UE9SVCA9IF9SVEFfU1BPUlQNCiAgICArY29uc3QgUlRBWF9GRUFUVVJFX1RJTUVTVEFNUCA9IF9S
VEFYX0ZFQVRVUkVfVElNRVNUQU1QDQogICAgK2NvbnN0IFJUQVhfRkVBVFVSRVMgPSBfUlRBWF9G
RUFUVVJFUw0KICAgICtjb25zdCBSVEFfTUVUUklDUyA9IF9SVEFfTUVUUklDUw0KICAgICtjb25z
dCBSVEFfUFJPVE9JTkZPID0gX1JUQV9QUk9UT0lORk8NCiAgICArY29uc3QgUlRBX0ZMT1cgPSBf
UlRBX0ZMT1cNCiAgICArY29uc3QgUlRBX1BBRCA9IF9SVEFfUEFEDQogICAgK2NvbnN0IFJUQVhf
U1NUSFJFU0ggPSBfUlRBWF9TU1RIUkVTSA0KICAgICtjb25zdCBSVEFfT0lGID0gX1JUQV9PSUYN
CiAgICArY29uc3QgUlRBWF9GQVNUT1BFTl9OT19DT09LSUUgPSBfUlRBWF9GQVNUT1BFTl9OT19D
T09LSUUNCiAgICArY29uc3QgUlRBX1BSRUZTUkMgPSBfUlRBX1BSRUZTUkMNCiAgICArY29uc3Qg
UlRBWF9XSU5ET1cgPSBfUlRBWF9XSU5ET1cNCiAgICArY29uc3QgUlRBWF9BRFZNU1MgPSBfUlRB
WF9BRFZNU1MNCiAgICArY29uc3QgUlRBWF9SVFQgPSBfUlRBWF9SVFQNCiAgICArY29uc3QgUlRB
WF9GRUFUVVJFX01BU0sgPSBfUlRBWF9GRUFUVVJFX01BU0sNCiAgICArY29uc3QgUlRBWF9NVFUg
PSBfUlRBWF9NVFUNCiAgICArY29uc3QgUlRGX1VQID0gX1JURl9VUA0KICAgICtjb25zdCBSVEZf
SU5URVJGQUNFID0gX1JURl9JTlRFUkZBQ0UNCiAgICArY29uc3QgUlRGX0RZTkFNSUMgPSBfUlRG
X0RZTkFNSUMNCiAgICArY29uc3QgUlRGX1hSRVNPTFZFID0gX1JURl9YUkVTT0xWRQ0KICAgICtj
b25zdCBSVEZfTk9QTVRVRElTQyA9IF9SVEZfTk9QTVRVRElTQw0KICAgICtjb25zdCBSVEZfTVRV
ID0gX1JURl9NVFUNCiAgICArY29uc3QgUlRGX0RFRkFVTFQgPSBfUlRGX0RFRkFVTFQNCiAgICAr
Y29uc3QgUlRGX0FMTE9OTElOSyA9IF9SVEZfQUxMT05MSU5LDQogICAgK2NvbnN0IFJURl9USFJP
VyA9IF9SVEZfVEhST1cNCiAgICArY29uc3QgUlRGX1JFSU5TVEFURSA9IF9SVEZfUkVJTlNUQVRF
DQogICAgK2NvbnN0IFJURl9DQUNIRSA9IF9SVEZfQ0FDSEUNCiAgICArY29uc3QgUlRGX0ZMT1cg
PSBfUlRGX0ZMT1cNCiAgICArY29uc3QgUlRGX01TUyA9IF9SVEZfTVNTDQogICAgK2NvbnN0IFJU
Rl9BRERSQ09ORiA9IF9SVEZfQUREUkNPTkYNCiAgICArY29uc3QgUlRGX01PRElGSUVEID0gX1JU
Rl9NT0RJRklFRA0KICAgICtjb25zdCBSVEZfSE9TVCA9IF9SVEZfSE9TVA0KICAgICtjb25zdCBS
VEZfTVVMVElDQVNUID0gX1JURl9NVUxUSUNBU1QNCiAgICArY29uc3QgUlRGX1NUQVRJQyA9IF9S
VEZfU1RBVElDDQogICAgK2NvbnN0IFJURl9OQVQgPSBfUlRGX05BVA0KICAgICtjb25zdCBSVEZf
UE9MSUNZID0gX1JURl9QT0xJQ1kNCiAgICArY29uc3QgUlRGX0dBVEVXQVkgPSBfUlRGX0dBVEVX
QVkNCiAgICArY29uc3QgUlRGX0xPQ0FMID0gX1JURl9MT0NBTA0KICAgICtjb25zdCBSVEZfV0lO
RE9XID0gX1JURl9XSU5ET1cNCiAgICArY29uc3QgUlRGX1JFSkVDVCA9IF9SVEZfUkVKRUNUDQog
ICAgK2NvbnN0IFJURl9OT0ZPUldBUkQgPSBfUlRGX05PRk9SV0FSRA0KICAgICtjb25zdCBSVEZf
Tk9ORVhUSE9QID0gX1JURl9OT05FWFRIT1ANCiAgICArY29uc3QgUlRGX0lSVFQgPSBfUlRGX0lS
VFQNCiAgICArY29uc3QgUlRGX0xJTktSVCA9IF9SVEZfTElOS1JUDQogICAgK2NvbnN0IFJURl9C
Uk9BRENBU1QgPSBfUlRGX0JST0FEQ0FTVA0KICAgICtjb25zdCBSVEZfQUREUkNMQVNTTUFTSyA9
IF9SVEZfQUREUkNMQVNTTUFTSw0KICAgICtjb25zdCBSVENGX0RPUkVESVJFQ1QgPSBfUlRDRl9E
T1JFRElSRUNUDQogICAgK2NvbnN0IFJUQ0ZfVkFMVkUgPSBfUlRDRl9WQUxWRQ0KICAgICtjb25z
dCBSVENGX05BVCA9IF9SVENGX05BVA0KICAgICtjb25zdCBSVENGX0xPRyA9IF9SVENGX0xPRw0K
ICAgICtjb25zdCBSVENGX0RJUkVDVFNSQyA9IF9SVENGX0RJUkVDVFNSQw0KICAgICtjb25zdCBS
VENGX01BU1EgPSBfUlRDRl9NQVNRDQogICAgK2NvbnN0IFJUTV9ERUxBQ1RJT04gPSBfUlRNX0RF
TEFDVElPTg0KICAgICtjb25zdCBSVE1fRl9DTE9ORUQgPSBfUlRNX0ZfQ0xPTkVEDQogICAgK2Nv
bnN0IFJUTV9TRVRORUlHSFRCTCA9IF9SVE1fU0VUTkVJR0hUQkwNCiAgICArY29uc3QgUlRNX1NF
VExJTksgPSBfUlRNX1NFVExJTksNCiAgICArY29uc3QgUlRNX0dFVFFESVNDID0gX1JUTV9HRVRR
RElTQw0KICAgICtjb25zdCBSVE1fTkVXQ0FDSEVSRVBPUlQgPSBfUlRNX05FV0NBQ0hFUkVQT1JU
DQogICAgK2NvbnN0IFJUTV9HRVRNREIgPSBfUlRNX0dFVE1EQg0KICAgICtjb25zdCBSVE1fR0VU
TElOSyA9IF9SVE1fR0VUTElOSw0KICAgICtjb25zdCBSVE1fTkVXTkVJR0ggPSBfUlRNX05FV05F
SUdIDQogICAgK2NvbnN0IFJUTV9ORVdST1VURSA9IF9SVE1fTkVXUk9VVEUNCiAgICArY29uc3Qg
UlRNX0dFVERDQiA9IF9SVE1fR0VURENCDQogICAgK2NvbnN0IFJUTUdSUF9JUFY2X0lGSU5GTyA9
IF9SVE1HUlBfSVBWNl9JRklORk8NCiAgICArY29uc3QgUlRNX0dFVE5FSUdIVEJMID0gX1JUTV9H
RVRORUlHSFRCTA0KICAgICtjb25zdCBSVE1fREVMTkVUQ09ORiA9IF9SVE1fREVMTkVUQ09ORg0K
ICAgICtjb25zdCBSVE1HUlBfSVBWNl9NUk9VVEUgPSBfUlRNR1JQX0lQVjZfTVJPVVRFDQogICAg
K2NvbnN0IFJUTV9HRVRURklMVEVSID0gX1JUTV9HRVRURklMVEVSDQogICAgK2NvbnN0IFJUTUdS
UF9ERUNuZXRfSUZBRERSID0gX1JUTUdSUF9ERUNuZXRfSUZBRERSDQogICAgK2NvbnN0IFJUTUdS
UF9JUFY2X1JPVVRFID0gX1JUTUdSUF9JUFY2X1JPVVRFDQogICAgK2NvbnN0IFJUTV9ORVdBRERS
ID0gX1JUTV9ORVdBRERSDQogICAgK2NvbnN0IFJUTV9ERUxOU0lEID0gX1JUTV9ERUxOU0lEDQog
ICAgK2NvbnN0IFJUTV9HRVRBTllDQVNUID0gX1JUTV9HRVRBTllDQVNUDQogICAgK2NvbnN0IFJU
TV9HRVRORUlHSCA9IF9SVE1fR0VUTkVJR0gNCiAgICArY29uc3QgUlRNR1JQX1RDID0gX1JUTUdS
UF9UQw0KICAgICtjb25zdCBSVE1fTkVXQ0hBSU4gPSBfUlRNX05FV0NIQUlODQogICAgK2NvbnN0
IFJUTV9ORVdBQ1RJT04gPSBfUlRNX05FV0FDVElPTg0KICAgICtjb25zdCBSVE1HUlBfSVBWNl9J
RkFERFIgPSBfUlRNR1JQX0lQVjZfSUZBRERSDQogICAgK2NvbnN0IFJUTV9ERUxST1VURSA9IF9S
VE1fREVMUk9VVEUNCiAgICArY29uc3QgUlRNX0dFVEFERFIgPSBfUlRNX0dFVEFERFINCiAgICAr
Y29uc3QgUlRNX05FV1FESVNDID0gX1JUTV9ORVdRRElTQw0KICAgICtjb25zdCBSVE1HUlBfREVD
bmV0X1JPVVRFID0gX1JUTUdSUF9ERUNuZXRfUk9VVEUNCiAgICArY29uc3QgUlRNX0RFTE1EQiA9
IF9SVE1fREVMTURCDQogICAgK2NvbnN0IFJUTV9ERUxSVUxFID0gX1JUTV9ERUxSVUxFDQogICAg
K2NvbnN0IFJUTV9ORVdTVEFUUyA9IF9SVE1fTkVXU1RBVFMNCiAgICArY29uc3QgUlRNX0ZfRklC
X01BVENIID0gX1JUTV9GX0ZJQl9NQVRDSA0KICAgICtjb25zdCBSVE1HUlBfSVBWNF9ST1VURSA9
IF9SVE1HUlBfSVBWNF9ST1VURQ0KICAgICtjb25zdCBSVE1TR19PVkVSUlVOID0gX1JUTVNHX09W
RVJSVU4NCiAgICArY29uc3QgUlRNX05FV01EQiA9IF9SVE1fTkVXTURCDQogICAgK2NvbnN0IFJU
TV9ERUxUQ0xBU1MgPSBfUlRNX0RFTFRDTEFTUw0KICAgICtjb25zdCBSVE1fTkVXVENMQVNTID0g
X1JUTV9ORVdUQ0xBU1MNCiAgICArY29uc3QgUlRNR1JQX0xJTksgPSBfUlRNR1JQX0xJTksNCiAg
ICArY29uc3QgUlRNX05FV05EVVNFUk9QVCA9IF9SVE1fTkVXTkRVU0VST1BUDQogICAgK2NvbnN0
IFJUTUdSUF9JUFY0X01ST1VURSA9IF9SVE1HUlBfSVBWNF9NUk9VVEUNCiAgICArY29uc3QgUlRN
X0dFVFNUQVRTID0gX1JUTV9HRVRTVEFUUw0KICAgICtjb25zdCBSVE1TR19ORVdSVUxFID0gX1JU
TVNHX05FV1JVTEUNCiAgICArY29uc3QgUlRNX0RFTExJTksgPSBfUlRNX0RFTExJTksNCiAgICAr
Y29uc3QgUlRNX05FV05FVENPTkYgPSBfUlRNX05FV05FVENPTkYNCiAgICArY29uc3QgUlRNX0JB
U0UgPSBfUlRNX0JBU0UNCiAgICArY29uc3QgUlRNR1JQX0lQVjRfSUZBRERSID0gX1JUTUdSUF9J
UFY0X0lGQUREUg0KICAgICtjb25zdCBSVE1fRl9QUkVGSVggPSBfUlRNX0ZfUFJFRklYDQogICAg
K2NvbnN0IFJUTV9ORVdORUlHSFRCTCA9IF9SVE1fTkVXTkVJR0hUQkwNCiAgICArY29uc3QgUlRN
U0dfTkVXREVWSUNFID0gX1JUTVNHX05FV0RFVklDRQ0KICAgICtjb25zdCBSVE1fTkVXUlVMRSA9
IF9SVE1fTkVXUlVMRQ0KICAgICtjb25zdCBSVE1fRl9MT09LVVBfVEFCTEUgPSBfUlRNX0ZfTE9P
S1VQX1RBQkxFDQogICAgK2NvbnN0IFJUTV9ERUxBRERSTEFCRUwgPSBfUlRNX0RFTEFERFJMQUJF
TA0KICAgICtjb25zdCBSVE1fTkVXUFJFRklYID0gX1JUTV9ORVdQUkVGSVgNCiAgICArY29uc3Qg
UlRNU0dfREVMUlVMRSA9IF9SVE1TR19ERUxSVUxFDQogICAgK2NvbnN0IFJUTUdSUF9OT1RJRlkg
PSBfUlRNR1JQX05PVElGWQ0KICAgICtjb25zdCBSVE1fR0VUUk9VVEUgPSBfUlRNX0dFVFJPVVRF
DQogICAgK2NvbnN0IFJUTV9HRVRSVUxFID0gX1JUTV9HRVRSVUxFDQogICAgK2NvbnN0IFJUTVNH
X0NPTlRST0wgPSBfUlRNU0dfQ09OVFJPTA0KICAgICtjb25zdCBSVE1fREVMUURJU0MgPSBfUlRN
X0RFTFFESVNDDQogICAgK2NvbnN0IFJUTV9ORVdURklMVEVSID0gX1JUTV9ORVdURklMVEVSDQog
ICAgK2NvbnN0IFJUTV9HRVRBQ1RJT04gPSBfUlRNX0dFVEFDVElPTg0KICAgICtjb25zdCBSVE1f
Rl9OT1RJRlkgPSBfUlRNX0ZfTk9USUZZDQogICAgK2NvbnN0IFJUTVNHX0RFTFJPVVRFID0gX1JU
TVNHX0RFTFJPVVRFDQogICAgK2NvbnN0IFJUTV9HRVRBRERSTEFCRUwgPSBfUlRNX0dFVEFERFJM
QUJFTA0KICAgICtjb25zdCBSVE1HUlBfSVBWNF9SVUxFID0gX1JUTUdSUF9JUFY0X1JVTEUNCiAg
ICArY29uc3QgUlRNX05FV05TSUQgPSBfUlRNX05FV05TSUQNCiAgICArY29uc3QgUlRNX0dFVE1V
TFRJQ0FTVCA9IF9SVE1fR0VUTVVMVElDQVNUDQogICAgK2NvbnN0IFJUTV9HRVRUQ0xBU1MgPSBf
UlRNX0dFVFRDTEFTUw0KICAgICtjb25zdCBSVE1fREVMVEZJTFRFUiA9IF9SVE1fREVMVEZJTFRF
Ug0KICAgICtjb25zdCBSVE1fR0VUQ0hBSU4gPSBfUlRNX0dFVENIQUlODQogICAgK2NvbnN0IFJU
TV9TRVREQ0IgPSBfUlRNX1NFVERDQg0KICAgICtjb25zdCBSVE1TR19ERUxERVZJQ0UgPSBfUlRN
U0dfREVMREVWSUNFDQogICAgK2NvbnN0IFJUTUdSUF9JUFY2X1BSRUZJWCA9IF9SVE1HUlBfSVBW
Nl9QUkVGSVgNCiAgICArY29uc3QgUlRNX0RFTE5FSUdIID0gX1JUTV9ERUxORUlHSA0KICAgICtj
b25zdCBSVE1TR19BUl9GQUlMRUQgPSBfUlRNU0dfQVJfRkFJTEVEDQogICAgK2NvbnN0IFJUTV9E
RUxDSEFJTiA9IF9SVE1fREVMQ0hBSU4NCiAgICArY29uc3QgUlRNX05FV0xJTksgPSBfUlRNX05F
V0xJTksNCiAgICArY29uc3QgUlRNX0ZfRVFVQUxJWkUgPSBfUlRNX0ZfRVFVQUxJWkUNCiAgICAr
Y29uc3QgUlRNX0dFVE5FVENPTkYgPSBfUlRNX0dFVE5FVENPTkYNCiAgICArY29uc3QgUlRNX0dF
VE5TSUQgPSBfUlRNX0dFVE5TSUQNCiAgICArY29uc3QgUlRNX05FV0FERFJMQUJFTCA9IF9SVE1f
TkVXQUREUkxBQkVMDQogICAgK2NvbnN0IFJUTUdSUF9ORUlHSCA9IF9SVE1HUlBfTkVJR0gNCiAg
ICArY29uc3QgUlRNX0RFTEFERFIgPSBfUlRNX0RFTEFERFINCiAgICArY29uc3QgUlRNU0dfTkVX
Uk9VVEUgPSBfUlRNU0dfTkVXUk9VVEUNCiAgICArY29uc3QgUlROTEdSUF9OU0lEID0gX1JUTkxH
UlBfTlNJRA0KICAgICtjb25zdCBSVE5fTVVMVElDQVNUID0gX1JUTl9NVUxUSUNBU1QNCiAgICAr
Y29uc3QgUlROTEdSUF9JUFY2X05FVENPTkYgPSBfUlROTEdSUF9JUFY2X05FVENPTkYNCiAgICAr
Y29uc3QgUlROX1VOU1BFQyA9IF9SVE5fVU5TUEVDDQogICAgK2NvbnN0IFJUTkxHUlBfSVBWNl9Q
UkVGSVggPSBfUlROTEdSUF9JUFY2X1BSRUZJWA0KICAgICtjb25zdCBSVE5MR1JQX05EX1VTRVJP
UFQgPSBfUlROTEdSUF9ORF9VU0VST1BUDQogICAgK2NvbnN0IFJUTkxHUlBfTVBMU19ORVRDT05G
ID0gX1JUTkxHUlBfTVBMU19ORVRDT05GDQogICAgK2NvbnN0IFJUTl9VTklDQVNUID0gX1JUTl9V
TklDQVNUDQogICAgK2NvbnN0IFJUTkxHUlBfRENCID0gX1JUTkxHUlBfRENCDQogICAgK2NvbnN0
IFJUTkxHUlBfSVBWNl9JRklORk8gPSBfUlROTEdSUF9JUFY2X0lGSU5GTw0KICAgICtjb25zdCBS
VE5MR1JQX1BIT05FVF9ST1VURSA9IF9SVE5MR1JQX1BIT05FVF9ST1VURQ0KICAgICtjb25zdCBS
VE5fTkFUID0gX1JUTl9OQVQNCiAgICArY29uc3QgUlROX1hSRVNPTFZFID0gX1JUTl9YUkVTT0xW
RQ0KICAgICtjb25zdCBSVE5MR1JQX0lQVjRfUk9VVEUgPSBfUlROTEdSUF9JUFY0X1JPVVRFDQog
ICAgK2NvbnN0IFJUTl9CTEFDS0hPTEUgPSBfUlROX0JMQUNLSE9MRQ0KICAgICtjb25zdCBSVE5M
R1JQX0RFQ25ldF9SVUxFID0gX1JUTkxHUlBfREVDbmV0X1JVTEUNCiAgICArY29uc3QgUlROSF9G
X0xJTktET1dOID0gX1JUTkhfRl9MSU5LRE9XTg0KICAgICtjb25zdCBSVE5MR1JQX0lQVjZfSUZB
RERSID0gX1JUTkxHUlBfSVBWNl9JRkFERFINCiAgICArY29uc3QgUlROTF9GQU1JTFlfSVBNUiA9
IF9SVE5MX0ZBTUlMWV9JUE1SDQogICAgK2NvbnN0IFJUTkxHUlBfUEhPTkVUX0lGQUREUiA9IF9S
VE5MR1JQX1BIT05FVF9JRkFERFINCiAgICArY29uc3QgUlROTEdSUF9OT1A0ID0gX1JUTkxHUlBf
Tk9QNA0KICAgICtjb25zdCBSVE5MX0ZBTUlMWV9NQVggPSBfUlROTF9GQU1JTFlfTUFYDQogICAg
K2NvbnN0IFJUTkxHUlBfSVBWNF9SVUxFID0gX1JUTkxHUlBfSVBWNF9SVUxFDQogICAgK2NvbnN0
IFJUTkhfQ09NUEFSRV9NQVNLID0gX1JUTkhfQ09NUEFSRV9NQVNLDQogICAgK2NvbnN0IFJUTkxH
UlBfSVBWNl9ST1VURSA9IF9SVE5MR1JQX0lQVjZfUk9VVEUNCiAgICArY29uc3QgUlROSF9GX1BF
UlZBU0lWRSA9IF9SVE5IX0ZfUEVSVkFTSVZFDQogICAgK2NvbnN0IFJUTkhfQUxJR05UTyA9IF9S
VE5IX0FMSUdOVE8NCiAgICArY29uc3QgUlROTEdSUF9OT1AyID0gX1JUTkxHUlBfTk9QMg0KICAg
ICtjb25zdCBSVE5FVExJTktfSEFWRV9QRUVSSU5GTyA9IF9SVE5FVExJTktfSEFWRV9QRUVSSU5G
Tw0KICAgICtjb25zdCBSVE5MR1JQX0RFQ25ldF9JRkFERFIgPSBfUlROTEdSUF9ERUNuZXRfSUZB
RERSDQogICAgK2NvbnN0IFJUTkhfRl9PRkZMT0FEID0gX1JUTkhfRl9PRkZMT0FEDQogICAgK2Nv
bnN0IFJUTkxHUlBfREVDbmV0X1JPVVRFID0gX1JUTkxHUlBfREVDbmV0X1JPVVRFDQogICAgK2Nv
bnN0IFJUTkxHUlBfSVBWNl9NUk9VVEUgPSBfUlROTEdSUF9JUFY2X01ST1VURQ0KICAgICtjb25z
dCBSVE5MR1JQX01QTFNfUk9VVEUgPSBfUlROTEdSUF9NUExTX1JPVVRFDQogICAgK2NvbnN0IFJU
TkxHUlBfTURCID0gX1JUTkxHUlBfTURCDQogICAgK2NvbnN0IFJUTl9USFJPVyA9IF9SVE5fVEhS
T1cNCiAgICArY29uc3QgUlROTEdSUF9JUFY0X01ST1VURSA9IF9SVE5MR1JQX0lQVjRfTVJPVVRF
DQogICAgK2NvbnN0IFJUTkxHUlBfSVBWNF9JRkFERFIgPSBfUlROTEdSUF9JUFY0X0lGQUREUg0K
ICAgICtjb25zdCBSVE5MR1JQX05PTkUgPSBfUlROTEdSUF9OT05FDQogICAgK2NvbnN0IFJUTkhf
Rl9VTlJFU09MVkVEID0gX1JUTkhfRl9VTlJFU09MVkVEDQogICAgK2NvbnN0IFJUTkxHUlBfTkVJ
R0ggPSBfUlROTEdSUF9ORUlHSA0KICAgICtjb25zdCBSVE5MR1JQX0lQVjRfTkVUQ09ORiA9IF9S
VE5MR1JQX0lQVjRfTkVUQ09ORg0KICAgICtjb25zdCBSVE5MX0ZBTUlMWV9JUDZNUiA9IF9SVE5M
X0ZBTUlMWV9JUDZNUg0KICAgICtjb25zdCBSVE5MR1JQX05PVElGWSA9IF9SVE5MR1JQX05PVElG
WQ0KICAgICtjb25zdCBSVE5fVU5SRUFDSEFCTEUgPSBfUlROX1VOUkVBQ0hBQkxFDQogICAgK2Nv
bnN0IFJUTl9CUk9BRENBU1QgPSBfUlROX0JST0FEQ0FTVA0KICAgICtjb25zdCBSVE5fTE9DQUwg
PSBfUlROX0xPQ0FMDQogICAgK2NvbnN0IFJUTkhfRl9ERUFEID0gX1JUTkhfRl9ERUFEDQogICAg
K2NvbnN0IFJUTl9QUk9ISUJJVCA9IF9SVE5fUFJPSElCSVQNCiAgICArY29uc3QgUlROTEdSUF9J
UFY0X01ST1VURV9SID0gX1JUTkxHUlBfSVBWNF9NUk9VVEVfUg0KICAgICtjb25zdCBSVE5fQU5Z
Q0FTVCA9IF9SVE5fQU5ZQ0FTVA0KICAgICtjb25zdCBSVE5MR1JQX0xJTksgPSBfUlROTEdSUF9M
SU5LDQogICAgK2NvbnN0IFJUTkxHUlBfVEMgPSBfUlROTEdSUF9UQw0KICAgICtjb25zdCBSVE5M
R1JQX0lQVjZfUlVMRSA9IF9SVE5MR1JQX0lQVjZfUlVMRQ0KICAgICtjb25zdCBSVE5IX0ZfT05M
SU5LID0gX1JUTkhfRl9PTkxJTksNCiAgICArY29uc3QgUlROTEdSUF9JUFY2X01ST1VURV9SID0g
X1JUTkxHUlBfSVBWNl9NUk9VVEVfUg0KICAgICtjb25zdCBSVFBST1RfVU5TUEVDID0gX1JUUFJP
VF9VTlNQRUMNCiAgICArY29uc3QgUlRQUk9UX0RIQ1AgPSBfUlRQUk9UX0RIQ1ANCiAgICArY29u
c3QgUlRQUk9UX1NUQVRJQyA9IF9SVFBST1RfU1RBVElDDQogICAgK2NvbnN0IFJUUFJPVF9PU1BG
ID0gX1JUUFJPVF9PU1BGDQogICAgK2NvbnN0IFJUUFJPVF9LRVJORUwgPSBfUlRQUk9UX0tFUk5F
TA0KICAgICtjb25zdCBSVFBST1RfR0FURUQgPSBfUlRQUk9UX0dBVEVEDQogICAgK2NvbnN0IFJU
UFJPVF9aRUJSQSA9IF9SVFBST1RfWkVCUkENCiAgICArY29uc3QgUlRQUk9UX0JJUkQgPSBfUlRQ
Uk9UX0JJUkQNCiAgICArY29uc3QgUlRQUk9UX1JBID0gX1JUUFJPVF9SQQ0KICAgICtjb25zdCBS
VFBST1RfWE9SUCA9IF9SVFBST1RfWE9SUA0KICAgICtjb25zdCBSVFBST1RfQk9PVCA9IF9SVFBS
T1RfQk9PVA0KICAgICtjb25zdCBSVFBST1RfQkFCRUwgPSBfUlRQUk9UX0JBQkVMDQogICAgK2Nv
bnN0IFJUUFJPVF9SSVAgPSBfUlRQUk9UX1JJUA0KICAgICtjb25zdCBSVFBST1RfRUlHUlAgPSBf
UlRQUk9UX0VJR1JQDQogICAgK2NvbnN0IFJUUFJPVF9OVEsgPSBfUlRQUk9UX05USw0KICAgICtj
b25zdCBSVFBST1RfUkVESVJFQ1QgPSBfUlRQUk9UX1JFRElSRUNUDQogICAgK2NvbnN0IFJUUFJP
VF9JU0lTID0gX1JUUFJPVF9JU0lTDQogICAgK2NvbnN0IFJUUFJPVF9CR1AgPSBfUlRQUk9UX0JH
UA0KICAgICtjb25zdCBSVFBST1RfTVJUID0gX1JUUFJPVF9NUlQNCiAgICArY29uc3QgUlRQUk9U
X01ST1VURUQgPSBfUlRQUk9UX01ST1VURUQNCiAgICArY29uc3QgUlRQUk9UX0ROUk9VVEVEID0g
X1JUUFJPVF9ETlJPVVRFRA0KICAgICt0eXBlIElmSW5mb21zZyBzdHJ1Y3QgeyBGYW1pbHkgdWlu
dDg7IF9faWZpX3BhZCB1aW50ODsgVHlwZSB1aW50MTY7IEluZGV4IGludDMyOyBGbGFncyB1aW50
MzI7IENoYW5nZSB1aW50MzI7IH0NCiAgICArY29uc3QgSUZBX0xBQkVMID0gX0lGQV9MQUJFTA0K
ICAgICtjb25zdCBJRkFfVU5TUEVDID0gX0lGQV9VTlNQRUMNCiAgICArY29uc3QgSUZBX0FOWUNB
U1QgPSBfSUZBX0FOWUNBU1QNCiAgICArY29uc3QgSUZBX1JUX1BSSU9SSVRZID0gX0lGQV9SVF9Q
UklPUklUWQ0KICAgICtjb25zdCBJRkFfRl9NQ0FVVE9KT0lOID0gX0lGQV9GX01DQVVUT0pPSU4N
CiAgICArY29uc3QgSUZBX0ZfT1BUSU1JU1RJQyA9IF9JRkFfRl9PUFRJTUlTVElDDQogICAgK2Nv
bnN0IElGQV9GX1NFQ09OREFSWSA9IF9JRkFfRl9TRUNPTkRBUlkNCiAgICArY29uc3QgSUZBX0Zf
SE9NRUFERFJFU1MgPSBfSUZBX0ZfSE9NRUFERFJFU1MNCiAgICArY29uc3QgSUZBX0ZfVEVNUE9S
QVJZID0gX0lGQV9GX1RFTVBPUkFSWQ0KICAgICtjb25zdCBJRkFfRl9NQU5BR0VURU1QQUREUiA9
IF9JRkFfRl9NQU5BR0VURU1QQUREUg0KICAgICtjb25zdCBJRkFfQ0FDSEVJTkZPID0gX0lGQV9D
QUNIRUlORk8NCiAgICArY29uc3QgSUZBX0ZfU1RBQkxFX1BSSVZBQ1kgPSBfSUZBX0ZfU1RBQkxF
X1BSSVZBQ1kNCiAgICArY29uc3QgSUZBX0ZfTk9QUkVGSVhST1VURSA9IF9JRkFfRl9OT1BSRUZJ
WFJPVVRFDQogICAgK2NvbnN0IElGQV9GX1BFUk1BTkVOVCA9IF9JRkFfRl9QRVJNQU5FTlQNCiAg
ICArY29uc3QgSUZBX0ZMQUdTID0gX0lGQV9GTEFHUw0KICAgICtjb25zdCBJRkFfTE9DQUwgPSBf
SUZBX0xPQ0FMDQogICAgK2NvbnN0IElGQV9GX0RBREZBSUxFRCA9IF9JRkFfRl9EQURGQUlMRUQN
CiAgICArY29uc3QgSUZBX0ZfVEVOVEFUSVZFID0gX0lGQV9GX1RFTlRBVElWRQ0KICAgICtjb25z
dCBJRkFfQUREUkVTUyA9IF9JRkFfQUREUkVTUw0KICAgICtjb25zdCBJRkFfRl9ERVBSRUNBVEVE
ID0gX0lGQV9GX0RFUFJFQ0FURUQNCiAgICArY29uc3QgSUZBX01VTFRJQ0FTVCA9IF9JRkFfTVVM
VElDQVNUDQogICAgK2NvbnN0IElGQV9CUk9BRENBU1QgPSBfSUZBX0JST0FEQ0FTVA0KICAgICtj
b25zdCBJRkFfRl9OT0RBRCA9IF9JRkFfRl9OT0RBRA0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9O
RUlHSF9TVVBQUkVTUyA9IF9JRkxBX0JSUE9SVF9ORUlHSF9TVVBQUkVTUw0KICAgICtjb25zdCBJ
RkxBX1ZGX0xJTktfU1RBVEUgPSBfSUZMQV9WRl9MSU5LX1NUQVRFDQogICAgK2NvbnN0IElGTEFf
Qk9ORF9VU0VfQ0FSUklFUiA9IF9JRkxBX0JPTkRfVVNFX0NBUlJJRVINCiAgICArY29uc3QgSUZM
QV9PRkZMT0FEX1hTVEFUU19VTlNQRUMgPSBfSUZMQV9PRkZMT0FEX1hTVEFUU19VTlNQRUMNCiAg
ICArY29uc3QgSUZMQV9CUl9UT1BPTE9HWV9DSEFOR0VfVElNRVIgPSBfSUZMQV9CUl9UT1BPTE9H
WV9DSEFOR0VfVElNRVINCiAgICArY29uc3QgSUZMQV9STU5FVF9NVVhfSUQgPSBfSUZMQV9STU5F
VF9NVVhfSUQNCiAgICArY29uc3QgSUZMQV9WRl9TVEFUU19SWF9CWVRFUyA9IF9JRkxBX1ZGX1NU
QVRTX1JYX0JZVEVTDQogICAgK2NvbnN0IElGTEFfQlJfTUFYX0FHRSA9IF9JRkxBX0JSX01BWF9B
R0UNCiAgICArY29uc3QgSUZMQV9HRU5FVkVfUkVNT1RFNiA9IF9JRkxBX0dFTkVWRV9SRU1PVEU2
DQogICAgK2NvbnN0IElGTEFfQk9ORF9NT0RFID0gX0lGTEFfQk9ORF9NT0RFDQogICAgK2NvbnN0
IElGTEFfTUFQID0gX0lGTEFfTUFQDQogICAgK2NvbnN0IElGTEFfVFVOX1ZORVRfSERSID0gX0lG
TEFfVFVOX1ZORVRfSERSDQogICAgK2NvbnN0IElGTEFfVkZfUE9SVFMgPSBfSUZMQV9WRl9QT1JU
Uw0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9JU09MQVRFRCA9IF9JRkxBX0JSUE9SVF9JU09MQVRF
RA0KICAgICtjb25zdCBJRkxBX0JPTkRfU0xBVkVfTElOS19GQUlMVVJFX0NPVU5UID0gX0lGTEFf
Qk9ORF9TTEFWRV9MSU5LX0ZBSUxVUkVfQ09VTlQNCiAgICArY29uc3QgSUZMQV9QUklPUklUWSA9
IF9JRkxBX1BSSU9SSVRZDQogICAgK2NvbnN0IElGTEFfVkZfSU5GTyA9IF9JRkxBX1ZGX0lORk8N
CiAgICArY29uc3QgSUZMQV9WRl9MSU5LX1NUQVRFX0VOQUJMRSA9IF9JRkxBX1ZGX0xJTktfU1RB
VEVfRU5BQkxFDQogICAgK2NvbnN0IElGTEFfVlhMQU5fSUQgPSBfSUZMQV9WWExBTl9JRA0KICAg
ICtjb25zdCBJRkxBX1RYUUxFTiA9IF9JRkxBX1RYUUxFTg0KICAgICtjb25zdCBJRkxBX0JSX0ZE
Ql9GTFVTSCA9IF9JRkxBX0JSX0ZEQl9GTFVTSA0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9GTFVT
SCA9IF9JRkxBX0JSUE9SVF9GTFVTSA0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9NQ0FTVF9GTE9P
RCA9IF9JRkxBX0JSUE9SVF9NQ0FTVF9GTE9PRA0KICAgICtjb25zdCBJRkxBX1BPUlRfSE9TVF9V
VUlEID0gX0lGTEFfUE9SVF9IT1NUX1VVSUQNCiAgICArY29uc3QgSUZMQV9CUl9NQ0FTVF9TVEFU
U19FTkFCTEVEID0gX0lGTEFfQlJfTUNBU1RfU1RBVFNfRU5BQkxFRA0KICAgICtjb25zdCBJRkxB
X0JSX01DQVNUX01MRF9WRVJTSU9OID0gX0lGTEFfQlJfTUNBU1RfTUxEX1ZFUlNJT04NCiAgICAr
Y29uc3QgSUZMQV9CUl9ORl9DQUxMX0lQVEFCTEVTID0gX0lGTEFfQlJfTkZfQ0FMTF9JUFRBQkxF
Uw0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9GQVNUX0xFQVZFID0gX0lGTEFfQlJQT1JUX0ZBU1Rf
TEVBVkUNCiAgICArY29uc3QgSUZMQV9WRl9MSU5LX1NUQVRFX0FVVE8gPSBfSUZMQV9WRl9MSU5L
X1NUQVRFX0FVVE8NCiAgICArY29uc3QgSUZMQV9CUl9NQ0FTVF9JR01QX1ZFUlNJT04gPSBfSUZM
QV9CUl9NQ0FTVF9JR01QX1ZFUlNJT04NCiAgICArY29uc3QgSUZMQV9NQUNTRUNfUkVQTEFZX1BS
T1RFQ1QgPSBfSUZMQV9NQUNTRUNfUkVQTEFZX1BST1RFQ1QNCiAgICArY29uc3QgSUZMQV9CT05E
X1NMQVZFX1BFUk1fSFdBRERSID0gX0lGTEFfQk9ORF9TTEFWRV9QRVJNX0hXQUREUg0KICAgICtj
b25zdCBJRkxBX0dTT19NQVhfU0laRSA9IF9JRkxBX0dTT19NQVhfU0laRQ0KICAgICtjb25zdCBJ
RkxBX1ZYTEFOX0NPTExFQ1RfTUVUQURBVEEgPSBfSUZMQV9WWExBTl9DT0xMRUNUX01FVEFEQVRB
DQogICAgK2NvbnN0IElGTEFfQk9ORF9GQUlMX09WRVJfTUFDID0gX0lGTEFfQk9ORF9GQUlMX09W
RVJfTUFDDQogICAgK2NvbnN0IElGTEFfTUFDU0VDX1BST1RFQ1QgPSBfSUZMQV9NQUNTRUNfUFJP
VEVDVA0KICAgICtjb25zdCBJRkxBX0JSX1ZMQU5fU1RBVFNfRU5BQkxFRCA9IF9JRkxBX0JSX1ZM
QU5fU1RBVFNfRU5BQkxFRA0KICAgICtjb25zdCBJRkxBX0JPTkRfU0xBVkVfQURfQUdHUkVHQVRP
Ul9JRCA9IF9JRkxBX0JPTkRfU0xBVkVfQURfQUdHUkVHQVRPUl9JRA0KICAgICtjb25zdCBJRkxB
X1ZGX1ZMQU5fSU5GTyA9IF9JRkxBX1ZGX1ZMQU5fSU5GTw0KICAgICtjb25zdCBJRkxBX1ZSRl9U
QUJMRSA9IF9JRkxBX1ZSRl9UQUJMRQ0KICAgICtjb25zdCBJRkxBX1ZGX0lCX1BPUlRfR1VJRCA9
IF9JRkxBX1ZGX0lCX1BPUlRfR1VJRA0KICAgICtjb25zdCBJRkxBX0JSX1JPT1RfSUQgPSBfSUZM
QV9CUl9ST09UX0lEDQogICAgK2NvbnN0IElGTEFfVkxBTl9JTkdSRVNTX1FPUyA9IF9JRkxBX1ZM
QU5fSU5HUkVTU19RT1MNCiAgICArY29uc3QgSUZMQV9QT1JUX1VOU1BFQyA9IF9JRkxBX1BPUlRf
VU5TUEVDDQogICAgK2NvbnN0IElGTEFfVlhMQU5fUkVNQ1NVTV9SWCA9IF9JRkxBX1ZYTEFOX1JF
TUNTVU1fUlgNCiAgICArY29uc3QgSUZMQV9CUlBPUlRfQ09ORklHX1BFTkRJTkcgPSBfSUZMQV9C
UlBPUlRfQ09ORklHX1BFTkRJTkcNCiAgICArY29uc3QgSUZMQV9CUlBPUlRfR1VBUkQgPSBfSUZM
QV9CUlBPUlRfR1VBUkQNCiAgICArY29uc3QgSUZMQV9NQVNURVIgPSBfSUZMQV9NQVNURVINCiAg
ICArY29uc3QgSUZMQV9ORVdfSUZJTkRFWCA9IF9JRkxBX05FV19JRklOREVYDQogICAgK2NvbnN0
IElGTEFfVlhMQU5fTE9DQUwgPSBfSUZMQV9WWExBTl9MT0NBTA0KICAgICtjb25zdCBJRkxBX0JS
X01DQVNUX0xBU1RfTUVNQkVSX0NOVCA9IF9JRkxBX0JSX01DQVNUX0xBU1RfTUVNQkVSX0NOVA0K
ICAgICtjb25zdCBJRkxBX0JSUE9SVF9ERVNJR05BVEVEX0NPU1QgPSBfSUZMQV9CUlBPUlRfREVT
SUdOQVRFRF9DT1NUDQogICAgK2NvbnN0IElGTEFfVlhMQU5fTEFCRUwgPSBfSUZMQV9WWExBTl9M
QUJFTA0KICAgICtjb25zdCBJRkxBX0JSX01DQVNUX0xBU1RfTUVNQkVSX0lOVFZMID0gX0lGTEFf
QlJfTUNBU1RfTEFTVF9NRU1CRVJfSU5UVkwNCiAgICArY29uc3QgSUZMQV9TVEFUU19MSU5LX09G
RkxPQURfWFNUQVRTID0gX0lGTEFfU1RBVFNfTElOS19PRkZMT0FEX1hTVEFUUw0KICAgICtjb25z
dCBJRkxBX1RVTl9HUk9VUCA9IF9JRkxBX1RVTl9HUk9VUA0KICAgICtjb25zdCBJRkxBX1ZGX1JB
VEUgPSBfSUZMQV9WRl9SQVRFDQogICAgK2NvbnN0IElGTEFfQlJfUFJJT1JJVFkgPSBfSUZMQV9C
Ul9QUklPUklUWQ0KICAgICtjb25zdCBJRkxBX0hTUl9TRVFfTlIgPSBfSUZMQV9IU1JfU0VRX05S
DQogICAgK2NvbnN0IElGTEFfUE9SVF9SRVNQT05TRSA9IF9JRkxBX1BPUlRfUkVTUE9OU0UNCiAg
ICArY29uc3QgSUZMQV9CUl9NQ0FTVF9ST1VURVIgPSBfSUZMQV9CUl9NQ0FTVF9ST1VURVINCiAg
ICArY29uc3QgSUZMQV9JTkVUNl9UT0tFTiA9IF9JRkxBX0lORVQ2X1RPS0VODQogICAgK2NvbnN0
IElGTEFfQk9ORF9NSU5fTElOS1MgPSBfSUZMQV9CT05EX01JTl9MSU5LUw0KICAgICtjb25zdCBJ
RkxBX0JSUE9SVF9NVUxUSUNBU1RfUk9VVEVSID0gX0lGTEFfQlJQT1JUX01VTFRJQ0FTVF9ST1VU
RVINCiAgICArY29uc3QgSUZMQV9CUlBPUlRfQ09TVCA9IF9JRkxBX0JSUE9SVF9DT1NUDQogICAg
K2NvbnN0IElGTEFfTUFDU0VDX0lOQ19TQ0kgPSBfSUZMQV9NQUNTRUNfSU5DX1NDSQ0KICAgICtj
b25zdCBJRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRCA9IF9JRkxBX1BPUlRfSU5TVEFOQ0VfVVVJRA0K
ICAgICtjb25zdCBJRkxBX0JSUE9SVF9CUklER0VfSUQgPSBfSUZMQV9CUlBPUlRfQlJJREdFX0lE
DQogICAgK2NvbnN0IElGTEFfQlJQT1JUX0xFQVJOSU5HX1NZTkMgPSBfSUZMQV9CUlBPUlRfTEVB
Uk5JTkdfU1lOQw0KICAgICtjb25zdCBJRkxBX0xJTksgPSBfSUZMQV9MSU5LDQogICAgK2NvbnN0
IElGTEFfWERQX0FUVEFDSEVEID0gX0lGTEFfWERQX0FUVEFDSEVEDQogICAgK2NvbnN0IElGTEFf
VkZfU1RBVFNfQlJPQURDQVNUID0gX0lGTEFfVkZfU1RBVFNfQlJPQURDQVNUDQogICAgK2NvbnN0
IElGTEFfQk9ORF9BRF9VU0VSX1BPUlRfS0VZID0gX0lGTEFfQk9ORF9BRF9VU0VSX1BPUlRfS0VZ
DQogICAgK2NvbnN0IElGTEFfQlJQT1JUX0JBQ0tVUF9QT1JUID0gX0lGTEFfQlJQT1JUX0JBQ0tV
UF9QT1JUDQogICAgK2NvbnN0IElGTEFfVlhMQU5fR0JQID0gX0lGTEFfVlhMQU5fR0JQDQogICAg
K2NvbnN0IElGTEFfSU5FVDZfQUREUl9HRU5fTU9ERSA9IF9JRkxBX0lORVQ2X0FERFJfR0VOX01P
REUNCiAgICArY29uc3QgSUZMQV9CUlBPUlRfREVTSUdOQVRFRF9QT1JUID0gX0lGTEFfQlJQT1JU
X0RFU0lHTkFURURfUE9SVA0KICAgICtjb25zdCBJRkxBX1RVTl9UWVBFID0gX0lGTEFfVFVOX1RZ
UEUNCiAgICArY29uc3QgSUZMQV9CUl9HQ19USU1FUiA9IF9JRkxBX0JSX0dDX1RJTUVSDQogICAg
K2NvbnN0IElGTEFfQlJQT1JUX1BSSU9SSVRZID0gX0lGTEFfQlJQT1JUX1BSSU9SSVRZDQogICAg
K2NvbnN0IElGTEFfQk9ORF9BTExfU0xBVkVTX0FDVElWRSA9IF9JRkxBX0JPTkRfQUxMX1NMQVZF
U19BQ1RJVkUNCiAgICArY29uc3QgSUZMQV9JUE9JQl9NT0RFID0gX0lGTEFfSVBPSUJfTU9ERQ0K
ICAgICtjb25zdCBJRkxBX0NBUlJJRVJfQ0hBTkdFUyA9IF9JRkxBX0NBUlJJRVJfQ0hBTkdFUw0K
ICAgICtjb25zdCBJRkxBX0lQT0lCX1BLRVkgPSBfSUZMQV9JUE9JQl9QS0VZDQogICAgK2NvbnN0
IElGTEFfTUFDU0VDX1BBRCA9IF9JRkxBX01BQ1NFQ19QQUQNCiAgICArY29uc3QgSUZMQV9CUlBP
UlRfTU9ERSA9IF9JRkxBX0JSUE9SVF9NT0RFDQogICAgK2NvbnN0IElGTEFfTUFDU0VDX1VOU1BF
QyA9IF9JRkxBX01BQ1NFQ19VTlNQRUMNCiAgICArY29uc3QgSUZMQV9CT05EX1BSSU1BUlkgPSBf
SUZMQV9CT05EX1BSSU1BUlkNCiAgICArY29uc3QgSUZMQV9FVkVOVF9CT05ESU5HX0ZBSUxPVkVS
ID0gX0lGTEFfRVZFTlRfQk9ORElOR19GQUlMT1ZFUg0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9U
T1BPTE9HWV9DSEFOR0VfQUNLID0gX0lGTEFfQlJQT1JUX1RPUE9MT0dZX0NIQU5HRV9BQ0sNCiAg
ICArY29uc3QgSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9LRVkgPSBfSUZMQV9CT05EX0FEX0lO
Rk9fUEFSVE5FUl9LRVkNCiAgICArY29uc3QgSUZMQV9IU1JfTVVMVElDQVNUX1NQRUMgPSBfSUZM
QV9IU1JfTVVMVElDQVNUX1NQRUMNCiAgICArY29uc3QgSUZMQV9CUlBPUlRfUFJPWFlBUlAgPSBf
SUZMQV9CUlBPUlRfUFJPWFlBUlANCiAgICArY29uc3QgSUZMQV9CT05EX0FEX0lORk9fUEFSVE5F
Ul9NQUMgPSBfSUZMQV9CT05EX0FEX0lORk9fUEFSVE5FUl9NQUMNCiAgICArY29uc3QgSUZMQV9C
Ul9NQ0FTVF9RVUVSWV9JTlRWTCA9IF9JRkxBX0JSX01DQVNUX1FVRVJZX0lOVFZMDQogICAgK2Nv
bnN0IElGTEFfV0VJR0hUID0gX0lGTEFfV0VJR0hUDQogICAgK2NvbnN0IElGTEFfWEZSTV9VTlNQ
RUMgPSBfSUZMQV9YRlJNX1VOU1BFQw0KICAgICtjb25zdCBJRkxBX1hEUCA9IF9JRkxBX1hEUA0K
ICAgICtjb25zdCBJRkxBX1NUQVRTID0gX0lGTEFfU1RBVFMNCiAgICArY29uc3QgSUZMQV9CUl9W
TEFOX1BST1RPQ09MID0gX0lGTEFfQlJfVkxBTl9QUk9UT0NPTA0KICAgICtjb25zdCBJRkxBX0JS
UE9SVF9VTlNQRUMgPSBfSUZMQV9CUlBPUlRfVU5TUEVDDQogICAgK2NvbnN0IElGTEFfR0VORVZF
X1RPUyA9IF9JRkxBX0dFTkVWRV9UT1MNCiAgICArY29uc3QgSUZMQV9CUk9BRENBU1QgPSBfSUZM
QV9CUk9BRENBU1QNCiAgICArY29uc3QgSUZMQV9YRFBfVU5TUEVDID0gX0lGTEFfWERQX1VOU1BF
Qw0KICAgICtjb25zdCBJRkxBX0JPTkRfU0xBVkVfQURfUEFSVE5FUl9PUEVSX1BPUlRfU1RBVEUg
PSBfSUZMQV9CT05EX1NMQVZFX0FEX1BBUlRORVJfT1BFUl9QT1JUX1NUQVRFDQogICAgK2NvbnN0
IElGTEFfTElOS0lORk8gPSBfSUZMQV9MSU5LSU5GTw0KICAgICtjb25zdCBJRkxBX0lORVQ2X1VO
U1BFQyA9IF9JRkxBX0lORVQ2X1VOU1BFQw0KICAgICtjb25zdCBJRkxBX1ZGX1NUQVRTX1RYX0RS
T1BQRUQgPSBfSUZMQV9WRl9TVEFUU19UWF9EUk9QUEVEDQogICAgK2NvbnN0IElGTEFfQ0FSUklF
UiA9IF9JRkxBX0NBUlJJRVINCiAgICArY29uc3QgSUZMQV9STU5FVF9VTlNQRUMgPSBfSUZMQV9S
TU5FVF9VTlNQRUMNCiAgICArY29uc3QgSUZMQV9IU1JfVU5TUEVDID0gX0lGTEFfSFNSX1VOU1BF
Qw0KICAgICtjb25zdCBJRkxBX0dFTkVWRV9UVEwgPSBfSUZMQV9HRU5FVkVfVFRMDQogICAgK2Nv
bnN0IElGTEFfQlJfTUNBU1RfUVVFUklFUl9JTlRWTCA9IF9JRkxBX0JSX01DQVNUX1FVRVJJRVJf
SU5UVkwNCiAgICArY29uc3QgSUZMQV9QT1JUX1ZGID0gX0lGTEFfUE9SVF9WRg0KICAgICtjb25z
dCBJRkxBX0JSX05GX0NBTExfSVA2VEFCTEVTID0gX0lGTEFfQlJfTkZfQ0FMTF9JUDZUQUJMRVMN
CiAgICArY29uc3QgSUZMQV9NVFUgPSBfSUZMQV9NVFUNCiAgICArY29uc3QgSUZMQV9CUl9ST09U
X1BPUlQgPSBfSUZMQV9CUl9ST09UX1BPUlQNCiAgICArY29uc3QgSUZMQV9QUk9NSVNDVUlUWSA9
IF9JRkxBX1BST01JU0NVSVRZDQogICAgK2NvbnN0IElGTEFfQlJfTUNBU1RfTUVNQkVSU0hJUF9J
TlRWTCA9IF9JRkxBX0JSX01DQVNUX01FTUJFUlNISVBfSU5UVkwNCiAgICArY29uc3QgSUZMQV9Q
QUQgPSBfSUZMQV9QQUQNCiAgICArY29uc3QgSUZMQV9CUlBPUlRfVkxBTl9UVU5ORUwgPSBfSUZM
QV9CUlBPUlRfVkxBTl9UVU5ORUwNCiAgICArY29uc3QgSUZMQV9CT05EX0FEX0lORk8gPSBfSUZM
QV9CT05EX0FEX0lORk8NCiAgICArY29uc3QgSUZMQV9CUl9VTlNQRUMgPSBfSUZMQV9CUl9VTlNQ
RUMNCiAgICArY29uc3QgSUZMQV9JRl9ORVROU0lEID0gX0lGTEFfSUZfTkVUTlNJRA0KICAgICtj
b25zdCBJRkxBX0JPTkRfQURfSU5GT19VTlNQRUMgPSBfSUZMQV9CT05EX0FEX0lORk9fVU5TUEVD
DQogICAgK2NvbnN0IElGTEFfTkVXX05FVE5TSUQgPSBfSUZMQV9ORVdfTkVUTlNJRA0KICAgICtj
b25zdCBJRkxBX1ZSRl9VTlNQRUMgPSBfSUZMQV9WUkZfVU5TUEVDDQogICAgK2NvbnN0IElGTEFf
VkxBTl9RT1NfVU5TUEVDID0gX0lGTEFfVkxBTl9RT1NfVU5TUEVDDQogICAgK2NvbnN0IElGTEFf
SVBPSUJfVU1DQVNUID0gX0lGTEFfSVBPSUJfVU1DQVNUDQogICAgK2NvbnN0IElGTEFfUE9SVF9S
RVFVRVNUID0gX0lGTEFfUE9SVF9SRVFVRVNUDQogICAgK2NvbnN0IElGTEFfQk9ORF9BRF9JTkZP
X0FHR1JFR0FUT1IgPSBfSUZMQV9CT05EX0FEX0lORk9fQUdHUkVHQVRPUg0KICAgICtjb25zdCBJ
RkxBX1ZYTEFOX0dQRSA9IF9JRkxBX1ZYTEFOX0dQRQ0KICAgICtjb25zdCBJRkxBX0VYVF9NQVNL
ID0gX0lGTEFfRVhUX01BU0sNCiAgICArY29uc3QgSUZMQV9HRU5FVkVfQ09MTEVDVF9NRVRBREFU
QSA9IF9JRkxBX0dFTkVWRV9DT0xMRUNUX01FVEFEQVRBDQogICAgK2NvbnN0IElGTEFfTUFDVkxB
Tl9NT0RFID0gX0lGTEFfTUFDVkxBTl9NT0RFDQogICAgK2NvbnN0IElGTEFfQk9ORF9BRF9MQUNQ
X1JBVEUgPSBfSUZMQV9CT05EX0FEX0xBQ1BfUkFURQ0KICAgICtjb25zdCBJRkxBX1RVTl9OVU1f
UVVFVUVTID0gX0lGTEFfVFVOX05VTV9RVUVVRVMNCiAgICArY29uc3QgSUZMQV9DT1NUID0gX0lG
TEFfQ09TVA0KICAgICtjb25zdCBJRkxBX0JPTkRfU0xBVkVfUVVFVUVfSUQgPSBfSUZMQV9CT05E
X1NMQVZFX1FVRVVFX0lEDQogICAgK2NvbnN0IElGTEFfT1BFUlNUQVRFID0gX0lGTEFfT1BFUlNU
QVRFDQogICAgK2NvbnN0IElGTEFfQk9ORF9TTEFWRV9NSUlfU1RBVFVTID0gX0lGTEFfQk9ORF9T
TEFWRV9NSUlfU1RBVFVTDQogICAgK2NvbnN0IElGTEFfTUFDU0VDX1dJTkRPVyA9IF9JRkxBX01B
Q1NFQ19XSU5ET1cNCiAgICArY29uc3QgSUZMQV9OVU1fVkYgPSBfSUZMQV9OVU1fVkYNCiAgICAr
Y29uc3QgSUZMQV9CUl9NQ0FTVF9RVUVSWV9SRVNQT05TRV9JTlRWTCA9IF9JRkxBX0JSX01DQVNU
X1FVRVJZX1JFU1BPTlNFX0lOVFZMDQogICAgK2NvbnN0IElGTEFfWERQX0RSVl9QUk9HX0lEID0g
X0lGTEFfWERQX0RSVl9QUk9HX0lEDQogICAgK2NvbnN0IElGTEFfVkZJTkZPX0xJU1QgPSBfSUZM
QV9WRklORk9fTElTVA0KICAgICtjb25zdCBJRkxBX0lORk9fVU5TUEVDID0gX0lGTEFfSU5GT19V
TlNQRUMNCiAgICArY29uc3QgSUZMQV9WTEFOX1FPU19NQVBQSU5HID0gX0lGTEFfVkxBTl9RT1Nf
TUFQUElORw0KICAgICtjb25zdCBJRkxBX1hEUF9IV19QUk9HX0lEID0gX0lGTEFfWERQX0hXX1BS
T0dfSUQNCiAgICArY29uc3QgSUZMQV9HVFBfVU5TUEVDID0gX0lGTEFfR1RQX1VOU1BFQw0KICAg
ICtjb25zdCBJRkxBX0JSX01DQVNUX1NUQVJUVVBfUVVFUllfSU5UVkwgPSBfSUZMQV9CUl9NQ0FT
VF9TVEFSVFVQX1FVRVJZX0lOVFZMDQogICAgK2NvbnN0IElGTEFfQlJQT1JUX1JPT1RfSUQgPSBf
SUZMQV9CUlBPUlRfUk9PVF9JRA0KICAgICtjb25zdCBJRkxBX1NUQVRTNjQgPSBfSUZMQV9TVEFU
UzY0DQogICAgK2NvbnN0IElGTEFfVkZfU1RBVFNfUlhfRFJPUFBFRCA9IF9JRkxBX1ZGX1NUQVRT
X1JYX0RST1BQRUQNCiAgICArY29uc3QgSUZMQV9WWExBTl9HUk9VUCA9IF9JRkxBX1ZYTEFOX0dS
T1VQDQogICAgK2NvbnN0IElGTEFfSU5GT19TTEFWRV9LSU5EID0gX0lGTEFfSU5GT19TTEFWRV9L
SU5EDQogICAgK2NvbnN0IElGTEFfVlhMQU5fTDJNSVNTID0gX0lGTEFfVlhMQU5fTDJNSVNTDQog
ICAgK2NvbnN0IElGTEFfQlJfSEVMTE9fVElNRSA9IF9JRkxBX0JSX0hFTExPX1RJTUUNCiAgICAr
Y29uc3QgSUZMQV9JUFZMQU5fTU9ERSA9IF9JRkxBX0lQVkxBTl9NT0RFDQogICAgK2NvbnN0IElG
TEFfVkZfVU5TUEVDID0gX0lGTEFfVkZfVU5TUEVDDQogICAgK2NvbnN0IElGTEFfVkZfUlNTX1FV
RVJZX0VOID0gX0lGTEFfVkZfUlNTX1FVRVJZX0VODQogICAgK2NvbnN0IElGTEFfSU5FVDZfQ09O
RiA9IF9JRkxBX0lORVQ2X0NPTkYNCiAgICArY29uc3QgSUZMQV9WRl9MSU5LX1NUQVRFX0RJU0FC
TEUgPSBfSUZMQV9WRl9MSU5LX1NUQVRFX0RJU0FCTEUNCiAgICArY29uc3QgSUZMQV9TVEFUU19V
TlNQRUMgPSBfSUZMQV9TVEFUU19VTlNQRUMNCiAgICArY29uc3QgSUZMQV9WRl9QT1JUX1VOU1BF
QyA9IF9JRkxBX1ZGX1BPUlRfVU5TUEVDDQogICAgK2NvbnN0IElGTEFfRVZFTlRfUkVCT09UID0g
X0lGTEFfRVZFTlRfUkVCT09UDQogICAgK2NvbnN0IElGTEFfVFVOX05VTV9ESVNBQkxFRF9RVUVV
RVMgPSBfSUZMQV9UVU5fTlVNX0RJU0FCTEVEX1FVRVVFUw0KICAgICtjb25zdCBJRkxBX1ZGX1NU
QVRTX01VTFRJQ0FTVCA9IF9JRkxBX1ZGX1NUQVRTX01VTFRJQ0FTVA0KICAgICtjb25zdCBJRkxB
X0JPTkRfVVBERUxBWSA9IF9JRkxBX0JPTkRfVVBERUxBWQ0KICAgICtjb25zdCBJRkxBX0JSX1RD
Tl9USU1FUiA9IF9JRkxBX0JSX1RDTl9USU1FUg0KICAgICtjb25zdCBJRkxBX0dFTkVWRV9VRFBf
Q1NVTSA9IF9JRkxBX0dFTkVWRV9VRFBfQ1NVTQ0KICAgICtjb25zdCBJRkxBX0dFTkVWRV9QT1JU
ID0gX0lGTEFfR0VORVZFX1BPUlQNCiAgICArY29uc3QgSUZMQV9XSVJFTEVTUyA9IF9JRkxBX1dJ
UkVMRVNTDQogICAgK2NvbnN0IElGTEFfQlJQT1JUX0ZPUldBUkRfREVMQVlfVElNRVIgPSBfSUZM
QV9CUlBPUlRfRk9SV0FSRF9ERUxBWV9USU1FUg0KICAgICtjb25zdCBJRkxBX1hGUk1fSUZfSUQg
PSBfSUZMQV9YRlJNX0lGX0lEDQogICAgK2NvbnN0IElGTEFfR1RQX1BEUF9IQVNIU0laRSA9IF9J
RkxBX0dUUF9QRFBfSEFTSFNJWkUNCiAgICArY29uc3QgSUZMQV9CT05EX0FDVElWRV9TTEFWRSA9
IF9JRkxBX0JPTkRfQUNUSVZFX1NMQVZFDQogICAgK2NvbnN0IElGTEFfSU5GT19LSU5EID0gX0lG
TEFfSU5GT19LSU5EDQogICAgK2NvbnN0IElGTEFfVkxBTl9VTlNQRUMgPSBfSUZMQV9WTEFOX1VO
U1BFQw0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9OTyA9IF9JRkxBX0JSUE9SVF9OTw0KICAgICtj
b25zdCBJRkxBX1ZSRl9QT1JUX1VOU1BFQyA9IF9JRkxBX1ZSRl9QT1JUX1VOU1BFQw0KICAgICtj
b25zdCBJRkxBX0lORVQ2X01DQVNUID0gX0lGTEFfSU5FVDZfTUNBU1QNCiAgICArY29uc3QgSUZM
QV9IU1JfVkVSU0lPTiA9IF9JRkxBX0hTUl9WRVJTSU9ODQogICAgK2NvbnN0IElGTEFfQk9ORF9E
T1dOREVMQVkgPSBfSUZMQV9CT05EX0RPV05ERUxBWQ0KICAgICtjb25zdCBJRkxBX1ZGX1RYX1JB
VEUgPSBfSUZMQV9WRl9UWF9SQVRFDQogICAgK2NvbnN0IElGTEFfQlJQT1JUX0dST1VQX0ZXRF9N
QVNLID0gX0lGTEFfQlJQT1JUX0dST1VQX0ZXRF9NQVNLDQogICAgK2NvbnN0IElGTEFfTUFDVkxB
Tl9GTEFHUyA9IF9JRkxBX01BQ1ZMQU5fRkxBR1MNCiAgICArY29uc3QgSUZMQV9WRl9TVEFUUyA9
IF9JRkxBX1ZGX1NUQVRTDQogICAgK2NvbnN0IElGTEFfTUFDU0VDX0NJUEhFUl9TVUlURSA9IF9J
RkxBX01BQ1NFQ19DSVBIRVJfU1VJVEUNCiAgICArY29uc3QgSUZMQV9CUl9NQ0FTVF9RVUVSWV9V
U0VfSUZBRERSID0gX0lGTEFfQlJfTUNBU1RfUVVFUllfVVNFX0lGQUREUg0KICAgICtjb25zdCBJ
RkxBX1ZYTEFOX0xPQ0FMNiA9IF9JRkxBX1ZYTEFOX0xPQ0FMNg0KICAgICtjb25zdCBJRkxBX0JS
UE9SVF9QUk9YWUFSUF9XSUZJID0gX0lGTEFfQlJQT1JUX1BST1hZQVJQX1dJRkkNCiAgICArY29u
c3QgSUZMQV9FVkVOVF9OT1RJRllfUEVFUlMgPSBfSUZMQV9FVkVOVF9OT1RJRllfUEVFUlMNCiAg
ICArY29uc3QgSUZMQV9BRERSRVNTID0gX0lGTEFfQUREUkVTUw0KICAgICtjb25zdCBJRkxBX1ZG
X0lORk9fVU5TUEVDID0gX0lGTEFfVkZfSU5GT19VTlNQRUMNCiAgICArY29uc3QgSUZMQV9CUl9N
Q0FTVF9IQVNIX01BWCA9IF9JRkxBX0JSX01DQVNUX0hBU0hfTUFYDQogICAgK2NvbnN0IElGTEFf
UFBQX0RFVl9GRCA9IF9JRkxBX1BQUF9ERVZfRkQNCiAgICArY29uc3QgSUZMQV9WWExBTl9VRFBf
WkVST19DU1VNNl9UWCA9IF9JRkxBX1ZYTEFOX1VEUF9aRVJPX0NTVU02X1RYDQogICAgK2NvbnN0
IElGTEFfVFVOX1VOU1BFQyA9IF9JRkxBX1RVTl9VTlNQRUMNCiAgICArY29uc3QgSUZMQV9CUl9I
RUxMT19USU1FUiA9IF9JRkxBX0JSX0hFTExPX1RJTUVSDQogICAgK2NvbnN0IElGTEFfR0VORVZF
X1JFTU9URSA9IF9JRkxBX0dFTkVWRV9SRU1PVEUNCiAgICArY29uc3QgSUZMQV9WWExBTl9MSU1J
VCA9IF9JRkxBX1ZYTEFOX0xJTUlUDQogICAgK2NvbnN0IElGTEFfTlVNX1JYX1FVRVVFUyA9IF9J
RkxBX05VTV9SWF9RVUVVRVMNCiAgICArY29uc3QgSUZMQV9CUl9UT1BPTE9HWV9DSEFOR0UgPSBf
SUZMQV9CUl9UT1BPTE9HWV9DSEFOR0UNCiAgICArY29uc3QgSUZMQV9WTEFOX1BST1RPQ09MID0g
X0lGTEFfVkxBTl9QUk9UT0NPTA0KICAgICtjb25zdCBJRkxBX01BQ1ZMQU5fTUFDQUREUl9DT1VO
VCA9IF9JRkxBX01BQ1ZMQU5fTUFDQUREUl9DT1VOVA0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9Q
QUQgPSBfSUZMQV9CUlBPUlRfUEFEDQogICAgK2NvbnN0IElGTEFfTlVNX1RYX1FVRVVFUyA9IF9J
RkxBX05VTV9UWF9RVUVVRVMNCiAgICArY29uc3QgSUZMQV9JTkZPX1NMQVZFX0RBVEEgPSBfSUZM
QV9JTkZPX1NMQVZFX0RBVEENCiAgICArY29uc3QgSUZMQV9HRU5FVkVfSUQgPSBfSUZMQV9HRU5F
VkVfSUQNCiAgICArY29uc3QgSUZMQV9CT05EX1NMQVZFX1NUQVRFID0gX0lGTEFfQk9ORF9TTEFW
RV9TVEFURQ0KICAgICtjb25zdCBJRkxBX0JPTkRfQURfQUNUT1JfU1lTX1BSSU8gPSBfSUZMQV9C
T05EX0FEX0FDVE9SX1NZU19QUklPDQogICAgK2NvbnN0IElGTEFfQlJfUEFEID0gX0lGTEFfQlJf
UEFEDQogICAgK2NvbnN0IElGTEFfVkZfU1BPT0ZDSEsgPSBfSUZMQV9WRl9TUE9PRkNISw0KICAg
ICtjb25zdCBJRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9SWCA9IF9JRkxBX0dFTkVWRV9VRFBf
WkVST19DU1VNNl9SWA0KICAgICtjb25zdCBJRkxBX0JPTkRfVExCX0RZTkFNSUNfTEIgPSBfSUZM
QV9CT05EX1RMQl9EWU5BTUlDX0xCDQogICAgK2NvbnN0IElGTEFfSU5FVDZfSUNNUDZTVEFUUyA9
IF9JRkxBX0lORVQ2X0lDTVA2U1RBVFMNCiAgICArY29uc3QgSUZMQV9WWExBTl9MM01JU1MgPSBf
SUZMQV9WWExBTl9MM01JU1MNCiAgICArY29uc3QgSUZMQV9NQUNTRUNfUE9SVCA9IF9JRkxBX01B
Q1NFQ19QT1JUDQogICAgK2NvbnN0IElGTEFfQk9ORF9BUlBfSVBfVEFSR0VUID0gX0lGTEFfQk9O
RF9BUlBfSVBfVEFSR0VUDQogICAgK2NvbnN0IElGTEFfQlJQT1JUX01DQVNUX1RPX1VDQVNUID0g
X0lGTEFfQlJQT1JUX01DQVNUX1RPX1VDQVNUDQogICAgK2NvbnN0IElGTEFfSU5FVDZfU1RBVFMg
PSBfSUZMQV9JTkVUNl9TVEFUUw0KICAgICtjb25zdCBJRkxBX1ZGX1NUQVRTX1JYX1BBQ0tFVFMg
PSBfSUZMQV9WRl9TVEFUU19SWF9QQUNLRVRTDQogICAgK2NvbnN0IElGTEFfVU5TUEVDID0gX0lG
TEFfVU5TUEVDDQogICAgK2NvbnN0IElGTEFfVkZfU1RBVFNfUEFEID0gX0lGTEFfVkZfU1RBVFNf
UEFEDQogICAgK2NvbnN0IElGTEFfQk9ORF9BRF9BQ1RPUl9TWVNURU0gPSBfSUZMQV9CT05EX0FE
X0FDVE9SX1NZU1RFTQ0KICAgICtjb25zdCBJRkxBX0JSX01DQVNUX1FVRVJJRVIgPSBfSUZMQV9C
Ul9NQ0FTVF9RVUVSSUVSDQogICAgK2NvbnN0IElGTEFfQk9ORF9TTEFWRV9BRF9BQ1RPUl9PUEVS
X1BPUlRfU1RBVEUgPSBfSUZMQV9CT05EX1NMQVZFX0FEX0FDVE9SX09QRVJfUE9SVF9TVEFURQ0K
ICAgICtjb25zdCBJRkxBX0xJTktNT0RFID0gX0lGTEFfTElOS01PREUNCiAgICArY29uc3QgSUZM
QV9CUl9TVFBfU1RBVEUgPSBfSUZMQV9CUl9TVFBfU1RBVEUNCiAgICArY29uc3QgSUZMQV9HRU5F
VkVfVURQX1pFUk9fQ1NVTTZfVFggPSBfSUZMQV9HRU5FVkVfVURQX1pFUk9fQ1NVTTZfVFgNCiAg
ICArY29uc3QgSUZMQV9CT05EX1hNSVRfSEFTSF9QT0xJQ1kgPSBfSUZMQV9CT05EX1hNSVRfSEFT
SF9QT0xJQ1kNCiAgICArY29uc3QgSUZMQV9JTkZPX0RBVEEgPSBfSUZMQV9JTkZPX0RBVEENCiAg
ICArY29uc3QgSUZMQV9WRl9TVEFUU19UWF9QQUNLRVRTID0gX0lGTEFfVkZfU1RBVFNfVFhfUEFD
S0VUUw0KICAgICtjb25zdCBJRkxBX0JSUE9SVF9CQ0FTVF9GTE9PRCA9IF9JRkxBX0JSUE9SVF9C
Q0FTVF9GTE9PRA0KICAgICtjb25zdCBJRkxBX0dUUF9GRDAgPSBfSUZMQV9HVFBfRkQwDQogICAg
K2NvbnN0IElGTEFfR1RQX0ZEMSA9IF9JRkxBX0dUUF9GRDENCiAgICArY29uc3QgSUZMQV9CUlBP
UlRfSUQgPSBfSUZMQV9CUlBPUlRfSUQNCiAgICArY29uc3QgSUZMQV9WRl9NQUMgPSBfSUZMQV9W
Rl9NQUMNCiAgICArY29uc3QgSUZMQV9WWExBTl9SRU1DU1VNX1RYID0gX0lGTEFfVlhMQU5fUkVN
Q1NVTV9UWA0KICAgICtjb25zdCBJRkxBX0JPTkRfQVJQX1ZBTElEQVRFID0gX0lGTEFfQk9ORF9B
UlBfVkFMSURBVEUNCiAgICArY29uc3QgSUZMQV9NSU5fTVRVID0gX0lGTEFfTUlOX01UVQ0KICAg
ICtjb25zdCBJRkxBX1ZYTEFOX1JTQyA9IF9JRkxBX1ZYTEFOX1JTQw0KICAgICtjb25zdCBJRkxB
X01BQ1NFQ19FTkNPRElOR19TQSA9IF9JRkxBX01BQ1NFQ19FTkNPRElOR19TQQ0KICAgICtjb25z
dCBJRkxBX1BPUlRfUFJPRklMRSA9IF9JRkxBX1BPUlRfUFJPRklMRQ0KICAgICtjb25zdCBJRkxB
X1hEUF9GTEFHUyA9IF9JRkxBX1hEUF9GTEFHUw0KICAgICtjb25zdCBJRkxBX0VWRU5UX0JPTkRJ
TkdfT1BUSU9OUyA9IF9JRkxBX0VWRU5UX0JPTkRJTkdfT1BUSU9OUw0KICAgICtjb25zdCBJRkxB
X0JSX1ZMQU5fRklMVEVSSU5HID0gX0lGTEFfQlJfVkxBTl9GSUxURVJJTkcNCiAgICArY29uc3Qg
SUZMQV9HUk9VUCA9IF9JRkxBX0dST1VQDQogICAgK2NvbnN0IElGTEFfQlJfUk9PVF9QQVRIX0NP
U1QgPSBfSUZMQV9CUl9ST09UX1BBVEhfQ09TVA0KICAgICtjb25zdCBJRkxBX1NUQVRTX0xJTktf
WFNUQVRTID0gX0lGTEFfU1RBVFNfTElOS19YU1RBVFMNCiAgICArY29uc3QgSUZMQV9UVU5fUEVS
U0lTVCA9IF9JRkxBX1RVTl9QRVJTSVNUDQogICAgK2NvbnN0IElGTEFfQlJQT1JUX1NUQVRFID0g
X0lGTEFfQlJQT1JUX1NUQVRFDQogICAgK2NvbnN0IElGTEFfQlJfTUNBU1RfU05PT1BJTkcgPSBf
SUZMQV9CUl9NQ0FTVF9TTk9PUElORw0KICAgICtjb25zdCBJRkxBX0JSX1RPUE9MT0dZX0NIQU5H
RV9ERVRFQ1RFRCA9IF9JRkxBX0JSX1RPUE9MT0dZX0NIQU5HRV9ERVRFQ1RFRA0KICAgICtjb25z
dCBJRkxBX0JSUE9SVF9NRVNTQUdFX0FHRV9USU1FUiA9IF9JRkxBX0JSUE9SVF9NRVNTQUdFX0FH
RV9USU1FUg0KICAgICtjb25zdCBJRkxBX0VWRU5UID0gX0lGTEFfRVZFTlQNCiAgICArY29uc3Qg
SUZMQV9CT05EX1BBQ0tFVFNfUEVSX1NMQVZFID0gX0lGTEFfQk9ORF9QQUNLRVRTX1BFUl9TTEFW
RQ0KICAgICtjb25zdCBJRkxBX0lQT0lCX1VOU1BFQyA9IF9JRkxBX0lQT0lCX1VOU1BFQw0KICAg
ICtjb25zdCBJRkxBX0dFTkVWRV9VTlNQRUMgPSBfSUZMQV9HRU5FVkVfVU5TUEVDDQogICAgK2Nv
bnN0IElGTEFfUEhZU19QT1JUX0lEID0gX0lGTEFfUEhZU19QT1JUX0lEDQogICAgK2NvbnN0IElG
TEFfVkZfUE9SVCA9IF9JRkxBX1ZGX1BPUlQNCiAgICArY29uc3QgSUZMQV9WUkZfUE9SVF9UQUJM
RSA9IF9JRkxBX1ZSRl9QT1JUX1RBQkxFDQogICAgK2NvbnN0IElGTEFfTUFDVkxBTl9NQUNBRERS
X0RBVEEgPSBfSUZMQV9NQUNWTEFOX01BQ0FERFJfREFUQQ0KICAgICtjb25zdCBJRkxBX01BQ1NF
Q19FTkNSWVBUID0gX0lGTEFfTUFDU0VDX0VOQ1JZUFQNCiAgICArY29uc3QgSUZMQV9NQUNTRUNf
U0NJID0gX0lGTEFfTUFDU0VDX1NDSQ0KICAgICtjb25zdCBJRkxBX1ZYTEFOX1RPUyA9IF9JRkxB
X1ZYTEFOX1RPUw0KICAgICtjb25zdCBJRkxBX0JSX0dST1VQX0ZXRF9NQVNLID0gX0lGTEFfQlJf
R1JPVVBfRldEX01BU0sNCiAgICArY29uc3QgSUZMQV9NQUNTRUNfRVMgPSBfSUZMQV9NQUNTRUNf
RVMNCiAgICArY29uc3QgSUZMQV9HU09fTUFYX1NFR1MgPSBfSUZMQV9HU09fTUFYX1NFR1MNCiAg
ICArY29uc3QgSUZMQV9IU1JfU0xBVkUxID0gX0lGTEFfSFNSX1NMQVZFMQ0KICAgICtjb25zdCBJ
RkxBX1hGUk1fTElOSyA9IF9JRkxBX1hGUk1fTElOSw0KICAgICtjb25zdCBJRkxBX0xJTktfTkVU
TlNJRCA9IF9JRkxBX0xJTktfTkVUTlNJRA0KICAgICtjb25zdCBJRkxBX0JPTkRfU0xBVkVfVU5T
UEVDID0gX0lGTEFfQk9ORF9TTEFWRV9VTlNQRUMNCiAgICArY29uc3QgSUZMQV9CT05EX1JFU0VO
RF9JR01QID0gX0lGTEFfQk9ORF9SRVNFTkRfSUdNUA0KICAgICtjb25zdCBJRkxBX0JPTkRfUFJJ
TUFSWV9SRVNFTEVDVCA9IF9JRkxBX0JPTkRfUFJJTUFSWV9SRVNFTEVDVA0KICAgICtjb25zdCBJ
RkxBX0lORVQ2X0ZMQUdTID0gX0lGTEFfSU5FVDZfRkxBR1MNCiAgICArY29uc3QgSUZMQV9WRl9W
TEFOX0xJU1QgPSBfSUZMQV9WRl9WTEFOX0xJU1QNCiAgICArY29uc3QgSUZMQV9ORVRfTlNfRkQg
PSBfSUZMQV9ORVRfTlNfRkQNCiAgICArY29uc3QgSUZMQV9QSFlTX1NXSVRDSF9JRCA9IF9JRkxB
X1BIWVNfU1dJVENIX0lEDQogICAgK2NvbnN0IElGTEFfVFVOX1BJID0gX0lGTEFfVFVOX1BJDQog
ICAgK2NvbnN0IElGTEFfSFNSX1NMQVZFMiA9IF9JRkxBX0hTUl9TTEFWRTINCiAgICArY29uc3Qg
SUZMQV9JUFZMQU5fVU5TUEVDID0gX0lGTEFfSVBWTEFOX1VOU1BFQw0KICAgICtjb25zdCBJRkxB
X1ZYTEFOX0dST1VQNiA9IF9JRkxBX1ZYTEFOX0dST1VQNg0KICAgICtjb25zdCBJRkxBX0lORVRf
VU5TUEVDID0gX0lGTEFfSU5FVF9VTlNQRUMNCiAgICArY29uc3QgSUZMQV9CUlBPUlRfTEVBUk5J
TkcgPSBfSUZMQV9CUlBPUlRfTEVBUk5JTkcNCiAgICArY29uc3QgSUZMQV9WWExBTl9QT1JUID0g
X0lGTEFfVlhMQU5fUE9SVA0KICAgICtjb25zdCBJRkxBX01BQ1NFQ19WQUxJREFUSU9OID0gX0lG
TEFfTUFDU0VDX1ZBTElEQVRJT04NCiAgICArY29uc3QgSUZMQV9CT05EX0FSUF9BTExfVEFSR0VU
UyA9IF9JRkxBX0JPTkRfQVJQX0FMTF9UQVJHRVRTDQogICAgK2NvbnN0IElGTEFfVkZfU1RBVFNf
VFhfQllURVMgPSBfSUZMQV9WRl9TVEFUU19UWF9CWVRFUw0KICAgICtjb25zdCBJRkxBX1BIWVNf
UE9SVF9OQU1FID0gX0lGTEFfUEhZU19QT1JUX05BTUUNCiAgICArY29uc3QgSUZMQV9ORVRfTlNf
UElEID0gX0lGTEFfTkVUX05TX1BJRA0KICAgICtjb25zdCBJRkxBX1ZGX1ZMQU5fSU5GT19VTlNQ
RUMgPSBfSUZMQV9WRl9WTEFOX0lORk9fVU5TUEVDDQogICAgK2NvbnN0IElGTEFfTUFDVkxBTl9N
QUNBRERSX01PREUgPSBfSUZMQV9NQUNWTEFOX01BQ0FERFJfTU9ERQ0KICAgICtjb25zdCBJRkxB
X1ZYTEFOX1BPUlRfUkFOR0UgPSBfSUZMQV9WWExBTl9QT1JUX1JBTkdFDQogICAgK2NvbnN0IElG
TEFfRVZFTlRfTk9ORSA9IF9JRkxBX0VWRU5UX05PTkUNCiAgICArY29uc3QgSUZMQV9CUl9WTEFO
X0RFRkFVTFRfUFZJRCA9IF9JRkxBX0JSX1ZMQU5fREVGQVVMVF9QVklEDQogICAgK2NvbnN0IElG
TEFfT0ZGTE9BRF9YU1RBVFNfQ1BVX0hJVCA9IF9JRkxBX09GRkxPQURfWFNUQVRTX0NQVV9ISVQN
CiAgICArY29uc3QgSUZMQV9WWExBTl9UVExfSU5IRVJJVCA9IF9JRkxBX1ZYTEFOX1RUTF9JTkhF
UklUDQogICAgK2NvbnN0IElGTEFfQlJfTUNBU1RfU1RBUlRVUF9RVUVSWV9DTlQgPSBfSUZMQV9C
Ul9NQ0FTVF9TVEFSVFVQX1FVRVJZX0NOVA0KICAgICtjb25zdCBJRkxBX1NUQVRTX0FGX1NQRUMg
PSBfSUZMQV9TVEFUU19BRl9TUEVDDQogICAgK2NvbnN0IElGTEFfVFVOX01VTFRJX1FVRVVFID0g
X0lGTEFfVFVOX01VTFRJX1FVRVVFDQogICAgK2NvbnN0IElGTEFfSFNSX1NVUEVSVklTSU9OX0FE
RFIgPSBfSUZMQV9IU1JfU1VQRVJWSVNJT05fQUREUg0KICAgICtjb25zdCBJRkxBX1ZYTEFOX1VE
UF9aRVJPX0NTVU02X1JYID0gX0lGTEFfVlhMQU5fVURQX1pFUk9fQ1NVTTZfUlgNCiAgICArY29u
c3QgSUZMQV9QT1JUX1ZTSV9UWVBFID0gX0lGTEFfUE9SVF9WU0lfVFlQRQ0KICAgICtjb25zdCBJ
RkxBX1BST1RJTkZPID0gX0lGTEFfUFJPVElORk8NCiAgICArY29uc3QgSUZMQV9NQUNTRUNfU0NC
ID0gX0lGTEFfTUFDU0VDX1NDQg0KICAgICtjb25zdCBJRkxBX0JSX05GX0NBTExfQVJQVEFCTEVT
ID0gX0lGTEFfQlJfTkZfQ0FMTF9BUlBUQUJMRVMNCiAgICArY29uc3QgSUZMQV9RRElTQyA9IF9J
RkxBX1FESVNDDQogICAgK2NvbnN0IElGTEFfQk9ORF9BRF9JTkZPX05VTV9QT1JUUyA9IF9JRkxB
X0JPTkRfQURfSU5GT19OVU1fUE9SVFMNCiAgICArY29uc3QgSUZMQV9CT05EX0FSUF9JTlRFUlZB
TCA9IF9JRkxBX0JPTkRfQVJQX0lOVEVSVkFMDQogICAgK2NvbnN0IElGTEFfQ0FSUklFUl9VUF9D
T1VOVCA9IF9JRkxBX0NBUlJJRVJfVVBfQ09VTlQNCiAgICArY29uc3QgSUZMQV9YRFBfU0tCX1BS
T0dfSUQgPSBfSUZMQV9YRFBfU0tCX1BST0dfSUQNCiAgICArY29uc3QgSUZMQV9FVkVOVF9GRUFU
VVJFUyA9IF9JRkxBX0VWRU5UX0ZFQVRVUkVTDQogICAgK2NvbnN0IElGTEFfUFBQX1VOU1BFQyA9
IF9JRkxBX1BQUF9VTlNQRUMNCiAgICArY29uc3QgSUZMQV9UVU5fT1dORVIgPSBfSUZMQV9UVU5f
T1dORVINCiAgICArY29uc3QgSUZMQV9CT05EX0xQX0lOVEVSVkFMID0gX0lGTEFfQk9ORF9MUF9J
TlRFUlZBTA0KICAgICtjb25zdCBJRkxBX1ZGX0lCX05PREVfR1VJRCA9IF9JRkxBX1ZGX0lCX05P
REVfR1VJRA0KICAgICtjb25zdCBJRkxBX0JPTkRfQURfSU5GT19BQ1RPUl9LRVkgPSBfSUZMQV9C
T05EX0FEX0lORk9fQUNUT1JfS0VZDQogICAgK2NvbnN0IElGTEFfVkxBTl9GTEFHUyA9IF9JRkxB
X1ZMQU5fRkxBR1MNCiAgICArY29uc3QgSUZMQV9HVFBfUk9MRSA9IF9JRkxBX0dUUF9ST0xFDQog
ICAgK2NvbnN0IElGTEFfVlhMQU5fUFJPWFkgPSBfSUZMQV9WWExBTl9QUk9YWQ0KICAgICtjb25z
dCBJRkxBX1ZYTEFOX1JFTUNTVU1fTk9QQVJUSUFMID0gX0lGTEFfVlhMQU5fUkVNQ1NVTV9OT1BB
UlRJQUwNCiAgICArY29uc3QgSUZMQV9NQUNWTEFOX01BQ0FERFIgPSBfSUZMQV9NQUNWTEFOX01B
Q0FERFINCiAgICArY29uc3QgSUZMQV9WTEFOX0VHUkVTU19RT1MgPSBfSUZMQV9WTEFOX0VHUkVT
U19RT1MNCiAgICArY29uc3QgSUZMQV9CT05EX0FEX1NFTEVDVCA9IF9JRkxBX0JPTkRfQURfU0VM
RUNUDQogICAgK2NvbnN0IElGTEFfVlhMQU5fVFRMID0gX0lGTEFfVlhMQU5fVFRMDQogICAgK2Nv
bnN0IElGTEFfSVBWTEFOX0ZMQUdTID0gX0lGTEFfSVBWTEFOX0ZMQUdTDQogICAgK2NvbnN0IElG
TEFfRVZFTlRfSUdNUF9SRVNFTkQgPSBfSUZMQV9FVkVOVF9JR01QX1JFU0VORA0KICAgICtjb25z
dCBJRkxBX1ZMQU5fSUQgPSBfSUZMQV9WTEFOX0lEDQogICAgK2NvbnN0IElGTEFfQk9ORF9OVU1f
UEVFUl9OT1RJRiA9IF9JRkxBX0JPTkRfTlVNX1BFRVJfTk9USUYNCiAgICArY29uc3QgSUZMQV9Q
Uk9UT19ET1dOID0gX0lGTEFfUFJPVE9fRE9XTg0KICAgICtjb25zdCBJRkxBX0lGTkFNRSA9IF9J
RkxBX0lGTkFNRQ0KICAgICtjb25zdCBJRkxBX0FGX1NQRUMgPSBfSUZMQV9BRl9TUEVDDQogICAg
K2NvbnN0IElGTEFfU1RBVFNfTElOS182NCA9IF9JRkxBX1NUQVRTX0xJTktfNjQNCiAgICArY29u
c3QgSUZMQV9CUl9CUklER0VfSUQgPSBfSUZMQV9CUl9CUklER0VfSUQNCiAgICArY29uc3QgSUZM
QV9CUlBPUlRfVU5JQ0FTVF9GTE9PRCA9IF9JRkxBX0JSUE9SVF9VTklDQVNUX0ZMT09EDQogICAg
K2NvbnN0IElGTEFfQ0FSUklFUl9ET1dOX0NPVU5UID0gX0lGTEFfQ0FSUklFUl9ET1dOX0NPVU5U
DQogICAgK2NvbnN0IElGTEFfQlJfRk9SV0FSRF9ERUxBWSA9IF9JRkxBX0JSX0ZPUldBUkRfREVM
QVkNCiAgICArY29uc3QgSUZMQV9YRFBfRkQgPSBfSUZMQV9YRFBfRkQNCiAgICArY29uc3QgSUZM
QV9CUlBPUlRfSE9MRF9USU1FUiA9IF9JRkxBX0JSUE9SVF9IT0xEX1RJTUVSDQogICAgK2NvbnN0
IElGTEFfSU5FVDZfQ0FDSEVJTkZPID0gX0lGTEFfSU5FVDZfQ0FDSEVJTkZPDQogICAgK2NvbnN0
IElGTEFfVkZfVkxBTiA9IF9JRkxBX1ZGX1ZMQU4NCiAgICArY29uc3QgSUZMQV9CUl9NQ0FTVF9I
QVNIX0VMQVNUSUNJVFkgPSBfSUZMQV9CUl9NQ0FTVF9IQVNIX0VMQVNUSUNJVFkNCiAgICArY29u
c3QgSUZMQV9NQVhfTVRVID0gX0lGTEFfTUFYX01UVQ0KICAgICtjb25zdCBJRkxBX0lGQUxJQVMg
PSBfSUZMQV9JRkFMSUFTDQogICAgK2NvbnN0IElGTEFfVkZfVFJVU1QgPSBfSUZMQV9WRl9UUlVT
VA0KICAgICtjb25zdCBJRkxBX1ZYTEFOX0xJTksgPSBfSUZMQV9WWExBTl9MSU5LDQogICAgK2Nv
bnN0IElGTEFfVlhMQU5fQUdFSU5HID0gX0lGTEFfVlhMQU5fQUdFSU5HDQogICAgK2NvbnN0IElG
TEFfWERQX1BST0dfSUQgPSBfSUZMQV9YRFBfUFJPR19JRA0KICAgICtjb25zdCBJRkxBX0lORk9f
WFNUQVRTID0gX0lGTEFfSU5GT19YU1RBVFMNCiAgICArY29uc3QgSUZMQV9CUl9BR0VJTkdfVElN
RSA9IF9JRkxBX0JSX0FHRUlOR19USU1FDQogICAgK2NvbnN0IElGTEFfU1RBVFNfTElOS19YU1RB
VFNfU0xBVkUgPSBfSUZMQV9TVEFUU19MSU5LX1hTVEFUU19TTEFWRQ0KICAgICtjb25zdCBJRkxB
X1ZYTEFOX1VEUF9DU1VNID0gX0lGTEFfVlhMQU5fVURQX0NTVU0NCiAgICArY29uc3QgSUZMQV9S
TU5FVF9GTEFHUyA9IF9JRkxBX1JNTkVUX0ZMQUdTDQogICAgK2NvbnN0IElGTEFfUE9SVF9TRUxG
ID0gX0lGTEFfUE9SVF9TRUxGDQogICAgK2NvbnN0IElGTEFfQlJfR1JPVVBfQUREUiA9IF9JRkxB
X0JSX0dST1VQX0FERFINCiAgICArY29uc3QgSUZMQV9WWExBTl9VTlNQRUMgPSBfSUZMQV9WWExB
Tl9VTlNQRUMNCiAgICArY29uc3QgSUZMQV9CT05EX01JSU1PTiA9IF9JRkxBX0JPTkRfTUlJTU9O
DQogICAgK2NvbnN0IElGTEFfSU5FVF9DT05GID0gX0lGTEFfSU5FVF9DT05GDQogICAgK2NvbnN0
IElGTEFfQlJQT1JUX1BST1RFQ1QgPSBfSUZMQV9CUlBPUlRfUFJPVEVDVA0KICAgICtjb25zdCBJ
RkxBX01BQ1ZMQU5fVU5TUEVDID0gX0lGTEFfTUFDVkxBTl9VTlNQRUMNCiAgICArY29uc3QgSUZM
QV9CT05EX1VOU1BFQyA9IF9JRkxBX0JPTkRfVU5TUEVDDQogICAgK2NvbnN0IElGTEFfR0VORVZF
X0xBQkVMID0gX0lGTEFfR0VORVZFX0xBQkVMDQogICAgK2NvbnN0IElGTEFfTUFDU0VDX0lDVl9M
RU4gPSBfSUZMQV9NQUNTRUNfSUNWX0xFTg0KICAgICtjb25zdCBJRkxBX1ZYTEFOX0xFQVJOSU5H
ID0gX0lGTEFfVlhMQU5fTEVBUk5JTkcNCiAgICArY29uc3QgSUZGX09ORV9RVUVVRSA9IF9JRkZf
T05FX1FVRVVFDQogICAgK2NvbnN0IElGRl9QT0lOVE9QT0lOVCA9IF9JRkZfUE9JTlRPUE9JTlQN
CiAgICArY29uc3QgSUZGX1VQID0gX0lGRl9VUA0KICAgICtjb25zdCBJRkZfVEFQID0gX0lGRl9U
QVANCiAgICArY29uc3QgSUZGX05BUElfRlJBR1MgPSBfSUZGX05BUElfRlJBR1MNCiAgICArY29u
c3QgSUZGX0FMTE1VTFRJID0gX0lGRl9BTExNVUxUSQ0KICAgICtjb25zdCBJRkZfQVVUT01FRElB
ID0gX0lGRl9BVVRPTUVESUENCiAgICArY29uc3QgSUZGX1NMQVZFID0gX0lGRl9TTEFWRQ0KICAg
ICtjb25zdCBJRkZfTUFTVEVSID0gX0lGRl9NQVNURVINCiAgICArY29uc3QgSUZGX05PVFJBSUxF
UlMgPSBfSUZGX05PVFJBSUxFUlMNCiAgICArY29uc3QgSUZGX1RVTiA9IF9JRkZfVFVODQogICAg
K2NvbnN0IElGRl9OT0ZJTFRFUiA9IF9JRkZfTk9GSUxURVINCiAgICArY29uc3QgSUZGX0RFQlVH
ID0gX0lGRl9ERUJVRw0KICAgICtjb25zdCBJRkZfUEVSU0lTVCA9IF9JRkZfUEVSU0lTVA0KICAg
ICtjb25zdCBJRkZfVk5FVF9IRFIgPSBfSUZGX1ZORVRfSERSDQogICAgK2NvbnN0IElGRl9BVFRB
Q0hfUVVFVUUgPSBfSUZGX0FUVEFDSF9RVUVVRQ0KICAgICtjb25zdCBJRkZfRFlOQU1JQyA9IF9J
RkZfRFlOQU1JQw0KICAgICtjb25zdCBJRkZfTE9PUEJBQ0sgPSBfSUZGX0xPT1BCQUNLDQogICAg
K2NvbnN0IElGRl9NVUxUSUNBU1QgPSBfSUZGX01VTFRJQ0FTVA0KICAgICtjb25zdCBJRkZfTk9B
UlAgPSBfSUZGX05PQVJQDQogICAgK2NvbnN0IElGRl9ERVRBQ0hfUVVFVUUgPSBfSUZGX0RFVEFD
SF9RVUVVRQ0KICAgICtjb25zdCBJRkZfUE9SVFNFTCA9IF9JRkZfUE9SVFNFTA0KICAgICtjb25z
dCBJRkZfTk9fUEkgPSBfSUZGX05PX1BJDQogICAgK2NvbnN0IElGRl9OQVBJID0gX0lGRl9OQVBJ
DQogICAgK2NvbnN0IElGRl9CUk9BRENBU1QgPSBfSUZGX0JST0FEQ0FTVA0KICAgICtjb25zdCBJ
RkZfVFVOX0VYQ0wgPSBfSUZGX1RVTl9FWENMDQogICAgK2NvbnN0IElGRl9NVUxUSV9RVUVVRSA9
IF9JRkZfTVVMVElfUVVFVUUNCiAgICArY29uc3QgSUZGX1BST01JU0MgPSBfSUZGX1BST01JU0MN
CiAgICArY29uc3QgSUZGX1JVTk5JTkcgPSBfSUZGX1JVTk5JTkcNCiAgICArY29uc3QgSUZOQU1T
SVogPSBfSUZOQU1TSVoNCiAgICArY29uc3QgU0lPQ1NJRkJSID0gX1NJT0NTSUZCUg0KICAgICtj
b25zdCBTSU9DR0lGRFNUQUREUiA9IF9TSU9DR0lGRFNUQUREUg0KICAgICtjb25zdCBTSU9DR1JB
UlAgPSBfU0lPQ0dSQVJQDQogICAgK2NvbnN0IFNJT0NHSUZNRVRSSUMgPSBfU0lPQ0dJRk1FVFJJ
Qw0KICAgICtjb25zdCBTSU9DR0lGUEZMQUdTID0gX1NJT0NHSUZQRkxBR1MNCiAgICArY29uc3Qg
U0lPQ0dTVEFNUE5TID0gX1NJT0NHU1RBTVBOUw0KICAgICtjb25zdCBTSU9DREVMTVVMVEkgPSBf
U0lPQ0RFTE1VTFRJDQogICAgK2NvbnN0IFNJT0NHSUZCUiA9IF9TSU9DR0lGQlINCiAgICArY29u
c3QgU0lPQ0RFTERMQ0kgPSBfU0lPQ0RFTERMQ0kNCiAgICArY29uc3QgU0lPQ0dBUlAgPSBfU0lP
Q0dBUlANCiAgICArY29uc3QgU0lPQ0dJRkhXQUREUiA9IF9TSU9DR0lGSFdBRERSDQogICAgK2Nv
bnN0IFNJT0NTSUZCUkRBRERSID0gX1NJT0NTSUZCUkRBRERSDQogICAgK2NvbnN0IFNJT0NTSUZN
VFUgPSBfU0lPQ1NJRk1UVQ0KICAgICtjb25zdCBTSU9DR0lGQ09ORiA9IF9TSU9DR0lGQ09ORg0K
ICAgICtjb25zdCBTSU9DR0lGTkVUTUFTSyA9IF9TSU9DR0lGTkVUTUFTSw0KICAgICtjb25zdCBT
SU9DREVMUlQgPSBfU0lPQ0RFTFJUDQogICAgK2NvbnN0IFNJT0NBRERSVCA9IF9TSU9DQUREUlQN
CiAgICArY29uc3QgU0lPQ0dJRkZMQUdTID0gX1NJT0NHSUZGTEFHUw0KICAgICtjb25zdCBTSU9D
R0lGTUFQID0gX1NJT0NHSUZNQVANCiAgICArY29uc3QgU0lPQ1NBUlAgPSBfU0lPQ1NBUlANCiAg
ICArY29uc3QgU0lPQ0dJRk1FTSA9IF9TSU9DR0lGTUVNDQogICAgK2NvbnN0IFNJT0NTSUZMSU5L
ID0gX1NJT0NTSUZMSU5LDQogICAgK2NvbnN0IFNJT0NQUk9UT1BSSVZBVEUgPSBfU0lPQ1BST1RP
UFJJVkFURQ0KICAgICtjb25zdCBTSU9DU0lGTkFNRSA9IF9TSU9DU0lGTkFNRQ0KICAgICtjb25z
dCBTSU9DR0lGU0xBVkUgPSBfU0lPQ0dJRlNMQVZFDQogICAgK2NvbnN0IFNJT0NHU1RBTVAgPSBf
U0lPQ0dTVEFNUA0KICAgICtjb25zdCBTSU9DR0lGTkFNRSA9IF9TSU9DR0lGTkFNRQ0KICAgICtj
b25zdCBTSU9DR0lGTVRVID0gX1NJT0NHSUZNVFUNCiAgICArY29uc3QgU0lPQ0RJRkFERFIgPSBf
U0lPQ0RJRkFERFINCiAgICArY29uc3QgU0lPQ1NJRlRYUUxFTiA9IF9TSU9DU0lGVFhRTEVODQog
ICAgK2NvbnN0IFNJT0NEUkFSUCA9IF9TSU9DRFJBUlANCiAgICArY29uc3QgU0lPQ0RBUlAgPSBf
U0lPQ0RBUlANCiAgICArY29uc3QgU0lPQ1NJRkZMQUdTID0gX1NJT0NTSUZGTEFHUw0KICAgICtj
b25zdCBTSU9DR0lGQ09VTlQgPSBfU0lPQ0dJRkNPVU5UDQogICAgK2NvbnN0IFNJT0NHSUZFTkNB
UCA9IF9TSU9DR0lGRU5DQVANCiAgICArY29uc3QgU0lPQ0dJRlRYUUxFTiA9IF9TSU9DR0lGVFhR
TEVODQogICAgK2NvbnN0IFNJT0NTSUZBRERSID0gX1NJT0NTSUZBRERSDQogICAgK2NvbnN0IFNJ
T0NTSUZNQVAgPSBfU0lPQ1NJRk1BUA0KICAgICtjb25zdCBTSU9DR0lGQUREUiA9IF9TSU9DR0lG
QUREUg0KICAgICtjb25zdCBTSU9DU0lGTkVUTUFTSyA9IF9TSU9DU0lGTkVUTUFTSw0KICAgICtj
b25zdCBTSU9DUlRNU0cgPSBfU0lPQ1JUTVNHDQogICAgK2NvbnN0IFNJT0NTSUZTTEFWRSA9IF9T
SU9DU0lGU0xBVkUNCiAgICArY29uc3QgU0lPQ1NJRk1FTSA9IF9TSU9DU0lGTUVNDQogICAgK2Nv
bnN0IFNJT0NBVE1BUksgPSBfU0lPQ0FUTUFSSw0KICAgICtjb25zdCBTSU9DR0lGQlJEQUREUiA9
IF9TSU9DR0lGQlJEQUREUg0KICAgICtjb25zdCBTSU9DU0lGSFdBRERSID0gX1NJT0NTSUZIV0FE
RFINCiAgICArY29uc3QgU0lPQ0RFVlBSSVZBVEUgPSBfU0lPQ0RFVlBSSVZBVEUNCiAgICArY29u
c3QgU0lPQ1NJRkRTVEFERFIgPSBfU0lPQ1NJRkRTVEFERFINCiAgICArY29uc3QgU0lPQ1NJRkhX
QlJPQURDQVNUID0gX1NJT0NTSUZIV0JST0FEQ0FTVA0KICAgICtjb25zdCBTSU9DR0lGSU5ERVgg
PSBfU0lPQ0dJRklOREVYDQogICAgK2NvbnN0IFNJT0NTUkFSUCA9IF9TSU9DU1JBUlANCiAgICAr
Y29uc3QgU0lPQ0dQR1JQID0gX1NJT0NHUEdSUA0KICAgICtjb25zdCBTSU9DQURERExDSSA9IF9T
SU9DQURERExDSQ0KICAgICtjb25zdCBTSU9DU0lGTUVUUklDID0gX1NJT0NTSUZNRVRSSUMNCiAg
ICArY29uc3QgU0lPQ1NQR1JQID0gX1NJT0NTUEdSUA0KICAgICtjb25zdCBTSU9DU0lGUEZMQUdT
ID0gX1NJT0NTSUZQRkxBR1MNCiAgICArY29uc3QgU0lPQ1NJRkVOQ0FQID0gX1NJT0NTSUZFTkNB
UA0KICAgICtjb25zdCBTSU9DQURETVVMVEkgPSBfU0lPQ0FERE1VTFRJDQogICAgK3R5cGUgSWZB
ZGRybXNnIHN0cnVjdCB7IEZhbWlseSB1aW50ODsgUHJlZml4bGVuIHVpbnQ4OyBGbGFncyB1aW50
ODsgU2NvcGUgdWludDg7IEluZGV4IHVpbnQzMjsgfQ0KICAgICt0eXBlIFJ0QXR0ciBzdHJ1Y3Qg
eyBMZW4gdWludDE2OyBUeXBlIHVpbnQxNjsgfQ0KICAgICt0eXBlIEluZXQ0UGt0aW5mbyBzdHJ1
Y3QgeyBJZmluZGV4IGludDMyOyBTcGVjX2RzdCBbNF1ieXRlOyBBZGRyIFs0XWJ5dGU7IH0NCiAg
ICArdHlwZSBJbmV0NlBrdGluZm8gc3RydWN0IHsgQWRkciBbMTZdYnl0ZTsgSWZpbmRleCB1aW50
MzI7IH0NCiAgICArdHlwZSBUZXJtaW9zIHN0cnVjdCB7IElmbGFnIHVpbnQzMjsgT2ZsYWcgdWlu
dDMyOyBDZmxhZyB1aW50MzI7IExmbGFnIHVpbnQzMjsgTGluZSB1aW50ODsgQ2MgWzMxKzFddWlu
dDg7IElzcGVlZCB1aW50MzI7IE9zcGVlZCB1aW50MzI7IH0NCiAgICArY29uc3QgSUdOQlJLICA9
IF9JR05CUksgDQogICAgK2NvbnN0IEJSS0lOVCAgPSBfQlJLSU5UIA0KICAgICtjb25zdCBJR05Q
QVIgID0gX0lHTlBBUiANCiAgICArY29uc3QgUEFSTVJLICA9IF9QQVJNUksgDQogICAgK2NvbnN0
IElOUENLICA9IF9JTlBDSyANCiAgICArY29uc3QgSVNUUklQICA9IF9JU1RSSVAgDQogICAgK2Nv
bnN0IElOTENSICA9IF9JTkxDUiANCiAgICArY29uc3QgSUdOQ1IgID0gX0lHTkNSIA0KICAgICtj
b25zdCBJQ1JOTCAgPSBfSUNSTkwgDQogICAgK2NvbnN0IElVQ0xDICA9IF9JVUNMQyANCiAgICAr
Y29uc3QgSVhPTiAgPSBfSVhPTiANCiAgICArY29uc3QgSVhBTlkgID0gX0lYQU5ZIA0KICAgICtj
b25zdCBJWE9GRiAgPSBfSVhPRkYgDQogICAgK2NvbnN0IElNQVhCRUwgID0gX0lNQVhCRUwgDQog
ICAgK2NvbnN0IElVVEY4ICA9IF9JVVRGOCANCiAgICArY29uc3QgT1BPU1QgID0gX09QT1NUIA0K
ICAgICtjb25zdCBPTENVQyAgPSBfT0xDVUMgDQogICAgK2NvbnN0IE9OTENSICA9IF9PTkxDUiAN
CiAgICArY29uc3QgT0NSTkwgID0gX09DUk5MIA0KICAgICtjb25zdCBPTk9DUiAgPSBfT05PQ1Ig
DQogICAgK2NvbnN0IE9OTFJFVCAgPSBfT05MUkVUIA0KICAgICtjb25zdCBPRklMTCAgPSBfT0ZJ
TEwgDQogICAgK2NvbnN0IE9GREVMICA9IF9PRkRFTCANCiAgICArY29uc3QgTkxETFkgID0gX05M
RExZIA0KICAgICtjb25zdCBOTDAgID0gX05MMCANCiAgICArY29uc3QgTkwxICA9IF9OTDEgDQog
ICAgK2NvbnN0IENSRExZICA9IF9DUkRMWSANCiAgICArY29uc3QgQ1IwICA9IF9DUjAgDQogICAg
K2NvbnN0IENSMSAgPSBfQ1IxIA0KICAgICtjb25zdCBDUjIgID0gX0NSMiANCiAgICArY29uc3Qg
Q1IzICA9IF9DUjMgDQogICAgK2NvbnN0IENTNSAgPSBfQ1M1IA0KICAgICtjb25zdCBDUzYgID0g
X0NTNiANCiAgICArY29uc3QgQ1M3ICA9IF9DUzcgDQogICAgK2NvbnN0IENTOCAgPSBfQ1M4IA0K
ICAgICtjb25zdCBUQUJETFkgID0gX1RBQkRMWSANCiAgICArY29uc3QgQlNETFkgID0gX0JTRExZ
IA0KICAgICtjb25zdCBWVERMWSAgPSBfVlRETFkgDQogICAgK2NvbnN0IEZGRExZICA9IF9GRkRM
WSANCiAgICArY29uc3QgQ0JBVUQgID0gX0NCQVVEIA0KICAgICtjb25zdCBDQkFVREVYICA9IF9D
QkFVREVYIA0KICAgICtjb25zdCBDU0laRSAgPSBfQ1NJWkUgDQogICAgK2NvbnN0IENTVE9QQiAg
PSBfQ1NUT1BCIA0KICAgICtjb25zdCBDUkVBRCAgPSBfQ1JFQUQgDQogICAgK2NvbnN0IFBBUkVO
QiAgPSBfUEFSRU5CIA0KICAgICtjb25zdCBQQVJPREQgID0gX1BBUk9ERCANCiAgICArY29uc3Qg
SFVQQ0wgID0gX0hVUENMIA0KICAgICtjb25zdCBDTE9DQUwgID0gX0NMT0NBTCANCiAgICArY29u
c3QgQ0lCQVVEICA9IF9DSUJBVUQgDQogICAgK2NvbnN0IENNU1BBUiAgPSBfQ01TUEFSIA0KICAg
ICtjb25zdCBDUlRTQ1RTICA9IF9DUlRTQ1RTIA0KICAgICtjb25zdCBJU0lHICA9IF9JU0lHIA0K
ICAgICtjb25zdCBJQ0FOT04gID0gX0lDQU5PTiANCiAgICArY29uc3QgWENBU0UgID0gX1hDQVNF
IA0KICAgICtjb25zdCBFQ0hPICA9IF9FQ0hPIA0KICAgICtjb25zdCBFQ0hPRSAgPSBfRUNIT0Ug
DQogICAgK2NvbnN0IEVDSE9LICA9IF9FQ0hPSyANCiAgICArY29uc3QgRUNIT05MICA9IF9FQ0hP
TkwgDQogICAgK2NvbnN0IEVDSE9DVEwgID0gX0VDSE9DVEwgDQogICAgK2NvbnN0IEVDSE9QUlQg
ID0gX0VDSE9QUlQgDQogICAgK2NvbnN0IEVDSE9LRSAgPSBfRUNIT0tFIA0KICAgICtjb25zdCBG
TFVTSE8gID0gX0ZMVVNITyANCiAgICArY29uc3QgTk9GTFNIICA9IF9OT0ZMU0ggDQogICAgK2Nv
bnN0IFRPU1RPUCAgPSBfVE9TVE9QIA0KICAgICtjb25zdCBQRU5ESU4gID0gX1BFTkRJTiANCiAg
ICArY29uc3QgSUVYVEVOICA9IF9JRVhURU4gDQogICAgK2NvbnN0IFZJTlRSICA9IF9WSU5UUiAN
CiAgICArY29uc3QgVlFVSVQgID0gX1ZRVUlUIA0KICAgICtjb25zdCBWRVJBU0UgID0gX1ZFUkFT
RSANCiAgICArY29uc3QgVktJTEwgID0gX1ZLSUxMIA0KICAgICtjb25zdCBWRU9GICA9IF9WRU9G
IA0KICAgICtjb25zdCBWTUlOICA9IF9WTUlOIA0KICAgICtjb25zdCBWRU9MICA9IF9WRU9MIA0K
ICAgICtjb25zdCBWVElNRSAgPSBfVlRJTUUgDQogICAgK2NvbnN0IFZFT0wyICA9IF9WRU9MMiAN
CiAgICArY29uc3QgVlNUQVJUICA9IF9WU1RBUlQgDQogICAgK2NvbnN0IFZTVE9QICA9IF9WU1RP
UCANCiAgICArY29uc3QgVlNVU1AgID0gX1ZTVVNQIA0KICAgICtjb25zdCBWTE5FWFQgID0gX1ZM
TkVYVCANCiAgICArY29uc3QgVldFUkFTRSAgPSBfVldFUkFTRSANCiAgICArY29uc3QgVlJFUFJJ
TlQgID0gX1ZSRVBSSU5UIA0KICAgICtjb25zdCBWRElTQ0FSRCAgPSBfVkRJU0NBUkQgDQogICAg
K2NvbnN0IFRDU0FOT1cgID0gX1RDU0FOT1cgDQogICAgK2NvbnN0IFRDU0FEUkFJTiAgPSBfVENT
QURSQUlOIA0KICAgICtjb25zdCBUQ1NBRkxVU0ggID0gX1RDU0FGTFVTSCANCiAgICArY29uc3Qg
VENJRkxVU0ggID0gX1RDSUZMVVNIIA0KICAgICtjb25zdCBUQ09GTFVTSCAgPSBfVENPRkxVU0gg
DQogICAgK2NvbnN0IFRDSU9GTFVTSCAgPSBfVENJT0ZMVVNIIA0KICAgICtjb25zdCBUQ09PRkYg
ID0gX1RDT09GRiANCiAgICArY29uc3QgVENPT04gID0gX1RDT09OIA0KICAgICtjb25zdCBUQ0lP
RkYgID0gX1RDSU9GRiANCiAgICArY29uc3QgVENJT04gID0gX1RDSU9OIA0KICAgICtjb25zdCBC
MCAgPSBfQjAgDQogICAgK2NvbnN0IEI1MCAgPSBfQjUwIA0KICAgICtjb25zdCBCNzUgID0gX0I3
NSANCiAgICArY29uc3QgQjExMCAgPSBfQjExMCANCiAgICArY29uc3QgQjEzNCAgPSBfQjEzNCAN
CiAgICArY29uc3QgQjE1MCAgPSBfQjE1MCANCiAgICArY29uc3QgQjIwMCAgPSBfQjIwMCANCiAg
ICArY29uc3QgQjMwMCAgPSBfQjMwMCANCiAgICArY29uc3QgQjYwMCAgPSBfQjYwMCANCiAgICAr
Y29uc3QgQjEyMDAgID0gX0IxMjAwIA0KICAgICtjb25zdCBCMTgwMCAgPSBfQjE4MDAgDQogICAg
K2NvbnN0IEIyNDAwICA9IF9CMjQwMCANCiAgICArY29uc3QgQjQ4MDAgID0gX0I0ODAwIA0KICAg
ICtjb25zdCBCOTYwMCAgPSBfQjk2MDAgDQogICAgK2NvbnN0IEIxOTIwMCAgPSBfQjE5MjAwIA0K
ICAgICtjb25zdCBCMzg0MDAgID0gX0IzODQwMCANCiAgICArY29uc3QgQjU3NjAwICA9IF9CNTc2
MDAgDQogICAgK2NvbnN0IEIxMTUyMDAgID0gX0IxMTUyMDAgDQogICAgK2NvbnN0IEIyMzA0MDAg
ID0gX0IyMzA0MDAgDQogICAgK2NvbnN0IEI0NjA4MDAgID0gX0I0NjA4MDAgDQogICAgK2NvbnN0
IEI1MDAwMDAgID0gX0I1MDAwMDAgDQogICAgK2NvbnN0IEI1NzYwMDAgID0gX0I1NzYwMDAgDQog
ICAgK2NvbnN0IEI5MjE2MDAgID0gX0I5MjE2MDAgDQogICAgK2NvbnN0IEIxMDAwMDAwICA9IF9C
MTAwMDAwMCANCiAgICArY29uc3QgQjExNTIwMDAgID0gX0IxMTUyMDAwIA0KICAgICtjb25zdCBC
MTUwMDAwMCAgPSBfQjE1MDAwMDAgDQogICAgK2NvbnN0IEIyMDAwMDAwICA9IF9CMjAwMDAwMCAN
CiAgICArY29uc3QgQjI1MDAwMDAgID0gX0IyNTAwMDAwIA0KICAgICtjb25zdCBCMzAwMDAwMCAg
PSBfQjMwMDAwMDAgDQogICAgK2NvbnN0IEIzNTAwMDAwICA9IF9CMzUwMDAwMCANCiAgICArY29u
c3QgQjQwMDAwMDAgID0gX0I0MDAwMDAwIA0KICAgICtjb25zdCBNTlRfREVUQUNIID0gX01OVF9E
RVRBQ0gNCiAgICArY29uc3QgTU5UX0VYUElSRSA9IF9NTlRfRVhQSVJFDQogICAgK2NvbnN0IE1O
VF9GT1JDRSA9IF9NTlRfRk9SQ0UNCiAgICArY29uc3QgTVNfRElSU1lOQyA9IF9NU19ESVJTWU5D
DQogICAgK2NvbnN0IE1TX1JET05MWSA9IF9NU19SRE9OTFkNCiAgICArY29uc3QgTVNfU1RSSUNU
QVRJTUUgPSBfTVNfU1RSSUNUQVRJTUUNCiAgICArY29uc3QgTVNfUk1UX01BU0sgPSBfTVNfUk1U
X01BU0sNCiAgICArY29uc3QgTVNfTk9ESVJBVElNRSA9IF9NU19OT0RJUkFUSU1FDQogICAgK2Nv
bnN0IE1TX05PREVWID0gX01TX05PREVWDQogICAgK2NvbnN0IE1TX0tFUk5NT1VOVCA9IF9NU19L
RVJOTU9VTlQNCiAgICArY29uc3QgTVNfTU9WRSA9IF9NU19NT1ZFDQogICAgK2NvbnN0IE1TX01H
Q19WQUwgPSBfTVNfTUdDX1ZBTA0KICAgICtjb25zdCBNU19QUklWQVRFID0gX01TX1BSSVZBVEUN
CiAgICArY29uc3QgTVNfQklORCA9IF9NU19CSU5EDQogICAgK2NvbnN0IE1TX1JFTEFUSU1FID0g
X01TX1JFTEFUSU1FDQogICAgK2NvbnN0IE1TX05PU1VJRCA9IF9NU19OT1NVSUQNCiAgICArY29u
c3QgTVNfQk9STiA9IF9NU19CT1JODQogICAgK2NvbnN0IE1TX0xBWllUSU1FID0gX01TX0xBWllU
SU1FDQogICAgK2NvbnN0IE1TX05PQVRJTUUgPSBfTVNfTk9BVElNRQ0KICAgICtjb25zdCBNU19O
T1NFQyA9IF9NU19OT1NFQw0KICAgICtjb25zdCBNU19JTlZBTElEQVRFID0gX01TX0lOVkFMSURB
VEUNCiAgICArY29uc3QgTVNfUkVNT1VOVCA9IF9NU19SRU1PVU5UDQogICAgK2NvbnN0IE1TX05P
UkVNT1RFTE9DSyA9IF9NU19OT1JFTU9URUxPQ0sNCiAgICArY29uc3QgTVNfU1VCTU9VTlQgPSBf
TVNfU1VCTU9VTlQNCiAgICArY29uc3QgTVNfU1lOQ0hST05PVVMgPSBfTVNfU1lOQ0hST05PVVMN
CiAgICArY29uc3QgTVNfQUNUSVZFID0gX01TX0FDVElWRQ0KICAgICtjb25zdCBNU19TSEFSRUQg
PSBfTVNfU0hBUkVEDQogICAgK2NvbnN0IE1TX1ZFUkJPU0UgPSBfTVNfVkVSQk9TRQ0KICAgICtj
b25zdCBNU19QT1NJWEFDTCA9IF9NU19QT1NJWEFDTA0KICAgICtjb25zdCBNU19BU1lOQyA9IF9N
U19BU1lOQw0KICAgICtjb25zdCBNU19NQU5ETE9DSyA9IF9NU19NQU5ETE9DSw0KICAgICtjb25z
dCBNU19TTEFWRSA9IF9NU19TTEFWRQ0KICAgICtjb25zdCBNU19JX1ZFUlNJT04gPSBfTVNfSV9W
RVJTSU9ODQogICAgK2NvbnN0IE1TX05PRVhFQyA9IF9NU19OT0VYRUMNCiAgICArY29uc3QgTVNf
UkVDID0gX01TX1JFQw0KICAgICtjb25zdCBNU19OT1VTRVIgPSBfTVNfTk9VU0VSDQogICAgK2Nv
bnN0IE1TX1VOQklOREFCTEUgPSBfTVNfVU5CSU5EQUJMRQ0KICAgICtjb25zdCBNU19TSUxFTlQg
PSBfTVNfU0lMRU5UDQogICAgK2NvbnN0IE1TX1NZTkMgPSBfTVNfU1lOQw0KICAgICtjb25zdCBN
U19NR0NfTVNLID0gX01TX01HQ19NU0sNCiAgICArY29uc3QgRkFMTE9DX0ZMX1VOU0hBUkVfUkFO
R0UgPSBfRkFMTE9DX0ZMX1VOU0hBUkVfUkFOR0UNCiAgICArY29uc3QgRkFMTE9DX0ZMX1BVTkNI
X0hPTEUgPSBfRkFMTE9DX0ZMX1BVTkNIX0hPTEUNCiAgICArY29uc3QgRkFMTE9DX0ZMX1pFUk9f
UkFOR0UgPSBfRkFMTE9DX0ZMX1pFUk9fUkFOR0UNCiAgICArY29uc3QgRkFMTE9DX0ZMX0lOU0VS
VF9SQU5HRSA9IF9GQUxMT0NfRkxfSU5TRVJUX1JBTkdFDQogICAgK2NvbnN0IEZBTExPQ19GTF9D
T0xMQVBTRV9SQU5HRSA9IF9GQUxMT0NfRkxfQ09MTEFQU0VfUkFOR0UNCiAgICArY29uc3QgRkFM
TE9DX0ZMX0tFRVBfU0laRSA9IF9GQUxMT0NfRkxfS0VFUF9TSVpFDQogICAgK2NvbnN0IEZBTExP
Q19GTF9OT19ISURFX1NUQUxFID0gX0ZBTExPQ19GTF9OT19ISURFX1NUQUxFDQogICAgK3R5cGUg
U3RhdGZzX3Qgc3RydWN0IHsgVHlwZSBpbnQ2NDsgQnNpemUgaW50NjQ7IEJsb2NrcyB1aW50NjQ7
IEJmcmVlIHVpbnQ2NDsgQmF2YWlsIHVpbnQ2NDsgRmlsZXMgdWludDY0OyBGZnJlZSB1aW50NjQ7
IEZzaWQgX19fZnNpZF90OyBOYW1lbGVuIGludDY0OyBGcnNpemUgaW50NjQ7IEZsYWdzIGludDY0
OyBTcGFyZSBbMysxXWludDY0OyB9DQogICAgK3R5cGUgVGltZXggc3RydWN0IHsgTW9kZXMgdWlu
dDMyOyBPZmZzZXQgaW50NjQ7IEZyZXEgaW50NjQ7IE1heGVycm9yIGludDY0OyBFc3RlcnJvciBp
bnQ2NDsgU3RhdHVzIGludDMyOyBDb25zdGFudCBpbnQ2NDsgUHJlY2lzaW9uIGludDY0OyBUb2xl
cmFuY2UgaW50NjQ7IFRpbWUgVGltZXZhbDsgVGljayBpbnQ2NDsgUHBzZnJlcSBpbnQ2NDsgSml0
dGVyIGludDY0OyBTaGlmdCBpbnQzMjsgU3RhYmlsIGludDY0OyBKaXRjbnQgaW50NjQ7IENhbGNu
dCBpbnQ2NDsgRXJyY250IGludDY0OyBTdGJjbnQgaW50NjQ7IFRhaSBpbnQzMjsgR29kdW1wXzAg
aW50MzI7IEdvZHVtcF8xIGludDMyOyBHb2R1bXBfMiBpbnQzMjsgR29kdW1wXzMgaW50MzI7IEdv
ZHVtcF80IGludDMyOyBHb2R1bXBfNSBpbnQzMjsgR29kdW1wXzYgaW50MzI7IEdvZHVtcF83IGlu
dDMyOyBHb2R1bXBfOCBpbnQzMjsgR29kdW1wXzkgaW50MzI7IEdvZHVtcF8xMCBpbnQzMjsgfQ0K
ICAgICt0eXBlIFJsaW1pdCBzdHJ1Y3QgeyBDdXIgdWludDY0OyBNYXggdWludDY0OyB9DQogICAg
K2NvbnN0IFJMSU1JVF9DT1JFID0gX1JMSU1JVF9DT1JFDQogICAgK2NvbnN0IFJMSU1JVF9BUyA9
IF9STElNSVRfQVMNCiAgICArY29uc3QgUkxJTUlUX1NUQUNLID0gX1JMSU1JVF9TVEFDSw0KICAg
ICtjb25zdCBSTElNSVRfTk9GSUxFID0gX1JMSU1JVF9OT0ZJTEUNCiAgICArY29uc3QgUkxJTUlU
X0RBVEEgPSBfUkxJTUlUX0RBVEENCiAgICArY29uc3QgUkxJTUlUX0NQVSA9IF9STElNSVRfQ1BV
DQogICAgK2NvbnN0IFJMSU1JVF9GU0laRSA9IF9STElNSVRfRlNJWkUNCiAgICArY29uc3QgUkxJ
TV9JTkZJTklUWSA9IF9STElNX0lORklOSVRZDQogICAgK2NvbnN0IFJMSU1fU0FWRURfQ1VSID0g
X1JMSU1fU0FWRURfQ1VSDQogICAgK2NvbnN0IFJMSU1fU0FWRURfTUFYID0gX1JMSU1fU0FWRURf
TUFYDQogICAgK3R5cGUgU3lzaW5mb190IHN0cnVjdCB7IFVwdGltZSBpbnQ2NDsgTG9hZHMgWzIr
MV11aW50NjQ7IFRvdGFscmFtIHVpbnQ2NDsgRnJlZXJhbSB1aW50NjQ7IFNoYXJlZHJhbSB1aW50
NjQ7IEJ1ZmZlcnJhbSB1aW50NjQ7IFRvdGFsc3dhcCB1aW50NjQ7IEZyZWVzd2FwIHVpbnQ2NDsg
UHJvY3MgdWludDE2OyBwYWQgdWludDE2OyBUb3RhbGhpZ2ggdWludDY0OyBGcmVlaGlnaCB1aW50
NjQ7IFVuaXQgdWludDMyOyBfZiBbMF1pbnQ4OyBHb2R1bXBfMF9wYWQgWzRdYnl0ZTsgfQ0KICAg
ICt0eXBlIFVzdGF0X3Qgc3RydWN0IHsgVGZyZWUgaW50MzI7IFRpbm9lIHVpbnQ2NDsgRm5hbWUg
WzUrMV1pbnQ4OyBGcGFjayBbNSsxXWludDg7IH0NCiAgICArdHlwZSBVdGltYnVmIHN0cnVjdCB7
IEFjdGltZSBpbnQ2NDsgTW9kdGltZSBpbnQ2NDsgfQ0KICAgICtjb25zdCBMT0NLX1dSSVRFID0g
X0xPQ0tfV1JJVEUNCiAgICArY29uc3QgTE9DS19SVyA9IF9MT0NLX1JXDQogICAgK2NvbnN0IExP
Q0tfU0ggPSBfTE9DS19TSA0KICAgICtjb25zdCBMT0NLX1JFQUQgPSBfTE9DS19SRUFEDQogICAg
K2NvbnN0IExPQ0tfTUFORCA9IF9MT0NLX01BTkQNCiAgICArY29uc3QgTE9DS19OQiA9IF9MT0NL
X05CDQogICAgK2NvbnN0IExPQ0tfRVggPSBfTE9DS19FWA0KICAgICtjb25zdCBMT0NLX1VOID0g
X0xPQ0tfVU4NCiAgICArY29uc3QgUFJJT19QR1JQID0gX1BSSU9fUEdSUA0KICAgICtjb25zdCBQ
UklPX1VTRVIgPSBfUFJJT19VU0VSDQogICAgK2NvbnN0IFBSSU9fUFJPQ0VTUyA9IF9QUklPX1BS
T0NFU1MNCiAgICArY29uc3QgUFJJT19NQVggPSBfUFJJT19NQVgNCiAgICArY29uc3QgUFJJT19N
SU4gPSBfUFJJT19NSU4NCiAgICArY29uc3QgTElOVVhfUkVCT09UX01BR0lDMkMgPSBfTElOVVhf
UkVCT09UX01BR0lDMkMNCiAgICArY29uc3QgTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUID0gX0xJ
TlVYX1JFQk9PVF9DTURfUkVTVEFSVA0KICAgICtjb25zdCBMSU5VWF9SRUJPT1RfQ01EX1NXX1NV
U1BFTkQgPSBfTElOVVhfUkVCT09UX0NNRF9TV19TVVNQRU5EDQogICAgK2NvbnN0IExJTlVYX1JF
Qk9PVF9DTURfUE9XRVJfT0ZGID0gX0xJTlVYX1JFQk9PVF9DTURfUE9XRVJfT0ZGDQogICAgK2Nv
bnN0IExJTlVYX1JFQk9PVF9NQUdJQzJBID0gX0xJTlVYX1JFQk9PVF9NQUdJQzJBDQogICAgK2Nv
bnN0IExJTlVYX1JFQk9PVF9DTURfS0VYRUMgPSBfTElOVVhfUkVCT09UX0NNRF9LRVhFQw0KICAg
ICtjb25zdCBMSU5VWF9SRUJPT1RfTUFHSUMyQiA9IF9MSU5VWF9SRUJPT1RfTUFHSUMyQg0KICAg
ICtjb25zdCBMSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQyID0gX0xJTlVYX1JFQk9PVF9DTURfUkVT
VEFSVDINCiAgICArY29uc3QgTElOVVhfUkVCT09UX0NNRF9DQURfT0ZGID0gX0xJTlVYX1JFQk9P
VF9DTURfQ0FEX09GRg0KICAgICtjb25zdCBMSU5VWF9SRUJPT1RfQ01EX0NBRF9PTiA9IF9MSU5V
WF9SRUJPT1RfQ01EX0NBRF9PTg0KICAgICtjb25zdCBMSU5VWF9SRUJPT1RfTUFHSUMxID0gX0xJ
TlVYX1JFQk9PVF9NQUdJQzENCiAgICArY29uc3QgTElOVVhfUkVCT09UX01BR0lDMiA9IF9MSU5V
WF9SRUJPT1RfTUFHSUMyDQogICAgK2NvbnN0IExJTlVYX1JFQk9PVF9DTURfSEFMVCA9IF9MSU5V
WF9SRUJPT1RfQ01EX0hBTFQNCiAgICArdHlwZSBTb2NrRmlsdGVyIHN0cnVjdCB7IENvZGUgdWlu
dDE2OyBKdCB1aW50ODsgSmYgdWludDg7IEsgdWludDMyOyB9DQogICAgK3R5cGUgU29ja0Zwcm9n
IHN0cnVjdCB7IExlbiB1aW50MTY7IEZpbHRlciAqU29ja0ZpbHRlcjsgfQ0KICAgICtjb25zdCBC
UEZfSkdFID0gX0JQRl9KR0UNCiAgICArY29uc3QgQlBGX0xEID0gX0JQRl9MRA0KICAgICtjb25z
dCBCUEZfSCA9IF9CUEZfSA0KICAgICtjb25zdCBCUEZfTUVNV09SRFMgPSBfQlBGX01FTVdPUkRT
DQogICAgK2NvbnN0IEJQRl9NT0QgPSBfQlBGX01PRA0KICAgICtjb25zdCBCUEZfTUlTQyA9IF9C
UEZfTUlTQw0KICAgICtjb25zdCBCUEZfSkEgPSBfQlBGX0pBDQogICAgK2NvbnN0IEJQRl9NQUpP
Ul9WRVJTSU9OID0gX0JQRl9NQUpPUl9WRVJTSU9ODQogICAgK2NvbnN0IEJQRl9NU0ggPSBfQlBG
X01TSA0KICAgICtjb25zdCBCUEZfSyA9IF9CUEZfSw0KICAgICtjb25zdCBCUEZfT1IgPSBfQlBG
X09SDQogICAgK2NvbnN0IEJQRl9NVUwgPSBfQlBGX01VTA0KICAgICtjb25zdCBCUEZfWE9SID0g
X0JQRl9YT1INCiAgICArY29uc3QgQlBGX01JTk9SX1ZFUlNJT04gPSBfQlBGX01JTk9SX1ZFUlNJ
T04NCiAgICArY29uc3QgQlBGX0EgPSBfQlBGX0ENCiAgICArY29uc3QgQlBGX0IgPSBfQlBGX0IN
CiAgICArY29uc3QgQlBGX1cgPSBfQlBGX1cNCiAgICArY29uc3QgQlBGX1ggPSBfQlBGX1gNCiAg
ICArY29uc3QgQlBGX0xFTiA9IF9CUEZfTEVODQogICAgK2NvbnN0IEJQRl9KRVEgPSBfQlBGX0pF
UQ0KICAgICtjb25zdCBCUEZfSkdUID0gX0JQRl9KR1QNCiAgICArY29uc3QgQlBGX05FVF9PRkYg
PSBfQlBGX05FVF9PRkYNCiAgICArY29uc3QgQlBGX0FCUyA9IF9CUEZfQUJTDQogICAgK2NvbnN0
IEJQRl9BTkQgPSBfQlBGX0FORA0KICAgICtjb25zdCBCUEZfU1RYID0gX0JQRl9TVFgNCiAgICAr
Y29uc3QgQlBGX01FTSA9IF9CUEZfTUVNDQogICAgK2NvbnN0IEJQRl9BREQgPSBfQlBGX0FERA0K
ICAgICtjb25zdCBCUEZfU1VCID0gX0JQRl9TVUINCiAgICArY29uc3QgQlBGX0pNUCA9IF9CUEZf
Sk1QDQogICAgK2NvbnN0IEJQRl9MTF9PRkYgPSBfQlBGX0xMX09GRg0KICAgICtjb25zdCBCUEZf
TERYID0gX0JQRl9MRFgNCiAgICArY29uc3QgQlBGX0lORCA9IF9CUEZfSU5EDQogICAgK2NvbnN0
IEJQRl9KU0VUID0gX0JQRl9KU0VUDQogICAgK2NvbnN0IEJQRl9BTFUgPSBfQlBGX0FMVQ0KICAg
ICtjb25zdCBCUEZfTkVHID0gX0JQRl9ORUcNCiAgICArY29uc3QgQlBGX0xTSCA9IF9CUEZfTFNI
DQogICAgK2NvbnN0IEJQRl9NQVhJTlNOUyA9IF9CUEZfTUFYSU5TTlMNCiAgICArY29uc3QgQlBG
X1RYQSA9IF9CUEZfVFhBDQogICAgK2NvbnN0IEJQRl9ESVYgPSBfQlBGX0RJVg0KICAgICtjb25z
dCBCUEZfUkVUID0gX0JQRl9SRVQNCiAgICArY29uc3QgQlBGX1RBWCA9IF9CUEZfVEFYDQogICAg
K2NvbnN0IEJQRl9TVCA9IF9CUEZfU1QNCiAgICArY29uc3QgQlBGX1JTSCA9IF9CUEZfUlNIDQog
ICAgK2NvbnN0IEJQRl9JTU0gPSBfQlBGX0lNTQ0KICAgICt0eXBlIE5sQXR0ciBzdHJ1Y3QgeyBM
ZW4gdWludDE2OyBUeXBlIHVpbnQxNjsgfQ0KICAgICt0eXBlIE5sTXNnZXJyIHN0cnVjdCB7IEVy
cm9yIGludDMyOyBNc2cgTmxNc2doZHI7IH0NCiAgICArdHlwZSBSdE5leHRob3Agc3RydWN0IHsg
TGVuIHVpbnQxNjsgRmxhZ3MgdWludDg7IEhvcHMgdWludDg7IElmaW5kZXggaW50MzI7IH0NCiAg
ICArY29uc3QgTkVUTElOS19SRE1BID0gX05FVExJTktfUkRNQQ0KICAgICtjb25zdCBORVRMSU5L
X0ZJUkVXQUxMID0gX05FVExJTktfRklSRVdBTEwNCiAgICArY29uc3QgTkVUTElOS19LT0JKRUNU
X1VFVkVOVCA9IF9ORVRMSU5LX0tPQkpFQ1RfVUVWRU5UDQogICAgK2NvbnN0IE5FVExJTktfVU5V
U0VEID0gX05FVExJTktfVU5VU0VEDQogICAgK2NvbnN0IE5FVExJTktfWEZSTSA9IF9ORVRMSU5L
X1hGUk0NCiAgICArY29uc3QgTkVUTElOS19VU0VSU09DSyA9IF9ORVRMSU5LX1VTRVJTT0NLDQog
ICAgK2NvbnN0IE5FVExJTktfSU5FVF9ESUFHID0gX05FVExJTktfSU5FVF9ESUFHDQogICAgK2Nv
bnN0IE5FVExJTktfU0NTSVRSQU5TUE9SVCA9IF9ORVRMSU5LX1NDU0lUUkFOU1BPUlQNCiAgICAr
Y29uc3QgTkVUTElOS19TRUxJTlVYID0gX05FVExJTktfU0VMSU5VWA0KICAgICtjb25zdCBORVRM
SU5LX0lTQ1NJID0gX05FVExJTktfSVNDU0kNCiAgICArY29uc3QgTkVUTElOS19SWF9SSU5HID0g
X05FVExJTktfUlhfUklORw0KICAgICtjb25zdCBORVRMSU5LX0VYVF9BQ0sgPSBfTkVUTElOS19F
WFRfQUNLDQogICAgK2NvbnN0IE5FVExJTktfRUNSWVBURlMgPSBfTkVUTElOS19FQ1JZUFRGUw0K
ICAgICtjb25zdCBORVRMSU5LX0NSWVBUTyA9IF9ORVRMSU5LX0NSWVBUTw0KICAgICtjb25zdCBO
RVRMSU5LX0JST0FEQ0FTVF9FUlJPUiA9IF9ORVRMSU5LX0JST0FEQ0FTVF9FUlJPUg0KICAgICtj
b25zdCBORVRMSU5LX1BLVElORk8gPSBfTkVUTElOS19QS1RJTkZPDQogICAgK2NvbnN0IE5FVExJ
TktfVU5DT05ORUNURUQgPSBfTkVUTElOS19VTkNPTk5FQ1RFRA0KICAgICtjb25zdCBORVRMSU5L
X0xJU1RFTl9BTExfTlNJRCA9IF9ORVRMSU5LX0xJU1RFTl9BTExfTlNJRA0KICAgICtjb25zdCBO
RVRMSU5LX0NBUF9BQ0sgPSBfTkVUTElOS19DQVBfQUNLDQogICAgK2NvbnN0IE5FVExJTktfTkZM
T0cgPSBfTkVUTElOS19ORkxPRw0KICAgICtjb25zdCBORVRMSU5LX0ZJQl9MT09LVVAgPSBfTkVU
TElOS19GSUJfTE9PS1VQDQogICAgK2NvbnN0IE5FVExJTktfU01DID0gX05FVExJTktfU01DDQog
ICAgK2NvbnN0IE5FVExJTktfUk9VVEUgPSBfTkVUTElOS19ST1VURQ0KICAgICtjb25zdCBORVRM
SU5LX05FVEZJTFRFUiA9IF9ORVRMSU5LX05FVEZJTFRFUg0KICAgICtjb25zdCBORVRMSU5LX05P
X0VOT0JVRlMgPSBfTkVUTElOS19OT19FTk9CVUZTDQogICAgK2NvbnN0IE5FVExJTktfQ09OTkVD
VEVEID0gX05FVExJTktfQ09OTkVDVEVEDQogICAgK2NvbnN0IE5FVExJTktfTElTVF9NRU1CRVJT
SElQUyA9IF9ORVRMSU5LX0xJU1RfTUVNQkVSU0hJUFMNCiAgICArY29uc3QgTkVUTElOS19EUk9Q
X01FTUJFUlNISVAgPSBfTkVUTElOS19EUk9QX01FTUJFUlNISVANCiAgICArY29uc3QgTkVUTElO
S19HRU5FUklDID0gX05FVExJTktfR0VORVJJQw0KICAgICtjb25zdCBORVRMSU5LX0NPTk5FQ1RP
UiA9IF9ORVRMSU5LX0NPTk5FQ1RPUg0KICAgICtjb25zdCBORVRMSU5LX0ROUlRNU0cgPSBfTkVU
TElOS19ETlJUTVNHDQogICAgK2NvbnN0IE5FVExJTktfQVVESVQgPSBfTkVUTElOS19BVURJVA0K
ICAgICtjb25zdCBORVRMSU5LX1NPQ0tfRElBRyA9IF9ORVRMSU5LX1NPQ0tfRElBRw0KICAgICtj
b25zdCBORVRMSU5LX0FERF9NRU1CRVJTSElQID0gX05FVExJTktfQUREX01FTUJFUlNISVANCiAg
ICArY29uc3QgTkVUTElOS19JUDZfRlcgPSBfTkVUTElOS19JUDZfRlcNCiAgICArY29uc3QgTkVU
TElOS19UWF9SSU5HID0gX05FVExJTktfVFhfUklORw0KICAgICtjb25zdCBOTEFfRl9ORVNURUQg
PSBfTkxBX0ZfTkVTVEVEDQogICAgK2NvbnN0IE5MQV9GX05FVF9CWVRFT1JERVIgPSBfTkxBX0Zf
TkVUX0JZVEVPUkRFUg0KICAgICtjb25zdCBOTEFfVFlQRV9NQVNLID0gX05MQV9UWVBFX01BU0sN
CiAgICArY29uc3QgTkxBX0FMSUdOVE8gPSBfTkxBX0FMSUdOVE8NCiAgICArY29uc3QgTkxBX0hE
UkxFTiA9IF9OTEFfSERSTEVOX3ZhbA0KICAgICtjb25zdCBQQUNLRVRfTVJfVU5JQ0FTVCA9IF9Q
QUNLRVRfTVJfVU5JQ0FTVA0KICAgICtjb25zdCBQQUNLRVRfRkFOT1VUX0RBVEEgPSBfUEFDS0VU
X0ZBTk9VVF9EQVRBDQogICAgK2NvbnN0IFBBQ0tFVF9PUklHREVWID0gX1BBQ0tFVF9PUklHREVW
DQogICAgK2NvbnN0IFBBQ0tFVF9SRUNWX09VVFBVVCA9IF9QQUNLRVRfUkVDVl9PVVRQVVQNCiAg
ICArY29uc3QgUEFDS0VUX0xPU1MgPSBfUEFDS0VUX0xPU1MNCiAgICArY29uc3QgUEFDS0VUX1JP
TExPVkVSX1NUQVRTID0gX1BBQ0tFVF9ST0xMT1ZFUl9TVEFUUw0KICAgICtjb25zdCBQQUNLRVRf
TVJfUFJPTUlTQyA9IF9QQUNLRVRfTVJfUFJPTUlTQw0KICAgICtjb25zdCBQQUNLRVRfTE9PUEJB
Q0sgPSBfUEFDS0VUX0xPT1BCQUNLDQogICAgK2NvbnN0IFBBQ0tFVF9WRVJTSU9OID0gX1BBQ0tF
VF9WRVJTSU9ODQogICAgK2NvbnN0IFBBQ0tFVF9UWF9SSU5HID0gX1BBQ0tFVF9UWF9SSU5HDQog
ICAgK2NvbnN0IFBBQ0tFVF9IT1NUID0gX1BBQ0tFVF9IT1NUDQogICAgK2NvbnN0IFBBQ0tFVF9N
Ul9NVUxUSUNBU1QgPSBfUEFDS0VUX01SX01VTFRJQ0FTVA0KICAgICtjb25zdCBQQUNLRVRfU1RB
VElTVElDUyA9IF9QQUNLRVRfU1RBVElTVElDUw0KICAgICtjb25zdCBQQUNLRVRfTVVMVElDQVNU
ID0gX1BBQ0tFVF9NVUxUSUNBU1QNCiAgICArY29uc3QgUEFDS0VUX1RYX1RJTUVTVEFNUCA9IF9Q
QUNLRVRfVFhfVElNRVNUQU1QDQogICAgK2NvbnN0IFBBQ0tFVF9IRFJMRU4gPSBfUEFDS0VUX0hE
UkxFTg0KICAgICtjb25zdCBQQUNLRVRfQlJPQURDQVNUID0gX1BBQ0tFVF9CUk9BRENBU1QNCiAg
ICArY29uc3QgUEFDS0VUX0NPUFlfVEhSRVNIID0gX1BBQ0tFVF9DT1BZX1RIUkVTSA0KICAgICtj
b25zdCBQQUNLRVRfT1VUR09JTkcgPSBfUEFDS0VUX09VVEdPSU5HDQogICAgK2NvbnN0IFBBQ0tF
VF9WTkVUX0hEUiA9IF9QQUNLRVRfVk5FVF9IRFINCiAgICArY29uc3QgUEFDS0VUX0ZBTk9VVCA9
IF9QQUNLRVRfRkFOT1VUDQogICAgK2NvbnN0IFBBQ0tFVF9PVEhFUkhPU1QgPSBfUEFDS0VUX09U
SEVSSE9TVA0KICAgICtjb25zdCBQQUNLRVRfRFJPUF9NRU1CRVJTSElQID0gX1BBQ0tFVF9EUk9Q
X01FTUJFUlNISVANCiAgICArY29uc3QgUEFDS0VUX1JFU0VSVkUgPSBfUEFDS0VUX1JFU0VSVkUN
CiAgICArY29uc3QgUEFDS0VUX1FESVNDX0JZUEFTUyA9IF9QQUNLRVRfUURJU0NfQllQQVNTDQog
ICAgK2NvbnN0IFBBQ0tFVF9NUl9BTExNVUxUSSA9IF9QQUNLRVRfTVJfQUxMTVVMVEkNCiAgICAr
Y29uc3QgUEFDS0VUX1RYX0hBU19PRkYgPSBfUEFDS0VUX1RYX0hBU19PRkYNCiAgICArY29uc3Qg
UEFDS0VUX1JYX1JJTkcgPSBfUEFDS0VUX1JYX1JJTkcNCiAgICArY29uc3QgUEFDS0VUX0FERF9N
RU1CRVJTSElQID0gX1BBQ0tFVF9BRERfTUVNQkVSU0hJUA0KICAgICtjb25zdCBQQUNLRVRfRkFT
VFJPVVRFID0gX1BBQ0tFVF9GQVNUUk9VVEUNCiAgICArY29uc3QgUEFDS0VUX0FVWERBVEEgPSBf
UEFDS0VUX0FVWERBVEENCiAgICArY29uc3QgUEFDS0VUX1RJTUVTVEFNUCA9IF9QQUNLRVRfVElN
RVNUQU1QDQogICAgK3R5cGUgSW5vdGlmeUV2ZW50IHN0cnVjdCB7IFdkIGludDMyOyBNYXNrIHVp
bnQzMjsgQ29va2llIHVpbnQzMjsgTGVuIHVpbnQzMjsgTmFtZSBbMF1pbnQ4OyB9DQogICAgK2Nv
bnN0IENMT05FX1BUUkFDRSA9IF9DTE9ORV9QVFJBQ0UNCiAgICArY29uc3QgQ0xPTkVfU0lHSEFO
RCA9IF9DTE9ORV9TSUdIQU5EDQogICAgK2NvbnN0IENMT05FX0RFVEFDSEVEID0gX0NMT05FX0RF
VEFDSEVEDQogICAgK2NvbnN0IENMT05FX1NZU1ZTRU0gPSBfQ0xPTkVfU1lTVlNFTQ0KICAgICtj
b25zdCBDTE9ORV9ORVdVU0VSID0gX0NMT05FX05FV1VTRVINCiAgICArY29uc3QgQ0xPTkVfUEFS
RU5UX1NFVFRJRCA9IF9DTE9ORV9QQVJFTlRfU0VUVElEDQogICAgK2NvbnN0IENMT05FX0NISUxE
X0NMRUFSVElEID0gX0NMT05FX0NISUxEX0NMRUFSVElEDQogICAgK2NvbnN0IENMT05FX1BBUkVO
VCA9IF9DTE9ORV9QQVJFTlQNCiAgICArY29uc3QgQ0xPTkVfVU5UUkFDRUQgPSBfQ0xPTkVfVU5U
UkFDRUQNCiAgICArY29uc3QgQ0xPTkVfQ0hJTERfU0VUVElEID0gX0NMT05FX0NISUxEX1NFVFRJ
RA0KICAgICtjb25zdCBDTE9ORV9USFJFQUQgPSBfQ0xPTkVfVEhSRUFEDQogICAgK2NvbnN0IENM
T05FX0ZTID0gX0NMT05FX0ZTDQogICAgK2NvbnN0IENMT05FX05FV0NHUk9VUCA9IF9DTE9ORV9O
RVdDR1JPVVANCiAgICArY29uc3QgQ0xPTkVfTkVXSVBDID0gX0NMT05FX05FV0lQQw0KICAgICtj
b25zdCBDTE9ORV9TRVRUTFMgPSBfQ0xPTkVfU0VUVExTDQogICAgK2NvbnN0IENMT05FX05FV1VU
UyA9IF9DTE9ORV9ORVdVVFMNCiAgICArY29uc3QgQ0xPTkVfVk0gPSBfQ0xPTkVfVk0NCiAgICAr
Y29uc3QgQ0xPTkVfTkVXTkVUID0gX0NMT05FX05FV05FVA0KICAgICtjb25zdCBDTE9ORV9JTyA9
IF9DTE9ORV9JTw0KICAgICtjb25zdCBDTE9ORV9GSUxFUyA9IF9DTE9ORV9GSUxFUw0KICAgICtj
b25zdCBDTE9ORV9WRk9SSyA9IF9DTE9ORV9WRk9SSw0KICAgICtjb25zdCBDTE9ORV9ORVdOUyA9
IF9DTE9ORV9ORVdOUw0KICAgICtjb25zdCBDTE9ORV9ORVdQSUQgPSBfQ0xPTkVfTkVXUElEDQog
ICAgK2NvbnN0IFNpemVvZkNtc2doZHIgPSBfc2l6ZW9mX2Ntc2doZHINCiAgICArY29uc3QgU2l6
ZW9mSVBNcmVxID0gX3NpemVvZl9pcF9tcmVxDQogICAgK2NvbnN0IFNpemVvZklQTXJlcW4gPSBf
c2l6ZW9mX2lwX21yZXFuDQogICAgK2NvbnN0IFNpemVvZklQdjZNcmVxID0gX3NpemVvZl9pcHY2
X21yZXENCiAgICArY29uc3QgU2l6ZW9mSWZBZGRybXNnID0gX3NpemVvZl9pZmFkZHJtc2cNCiAg
ICArY29uc3QgU2l6ZW9mSWZJbmZvbXNnID0gX3NpemVvZl9pZmluZm9tc2cNCiAgICArY29uc3Qg
U2l6ZW9mSW5ldDRQa3RpbmZvID0gX3NpemVvZl9pbl9wa3RpbmZvDQogICAgK2NvbnN0IFNpemVv
ZkluZXQ2UGt0aW5mbyA9IF9zaXplb2ZfaW42X3BrdGluZm8NCiAgICArY29uc3QgU2l6ZW9mSW5v
dGlmeUV2ZW50ID0gX3NpemVvZl9pbm90aWZ5X2V2ZW50DQogICAgK2NvbnN0IFNpemVvZkxpbmdl
ciA9IF9zaXplb2ZfbGluZ2VyDQogICAgK2NvbnN0IFNpemVvZk1zZ2hkciA9IF9zaXplb2ZfbXNn
aGRyDQogICAgK2NvbnN0IFNpemVvZk5sQXR0ciA9IF9zaXplb2ZfbmxhdHRyDQogICAgK2NvbnN0
IFNpemVvZk5sTXNnZXJyID0gX3NpemVvZl9ubG1zZ2Vycg0KICAgICtjb25zdCBTaXplb2ZObE1z
Z2hkciA9IF9zaXplb2Zfbmxtc2doZHINCiAgICArY29uc3QgU2l6ZW9mUnRBdHRyID0gX3NpemVv
Zl9ydGF0dHINCiAgICArY29uc3QgU2l6ZW9mUnRHZW5tc2cgPSBfc2l6ZW9mX3J0Z2VubXNnDQog
ICAgK2NvbnN0IFNpemVvZlJ0TXNnID0gX3NpemVvZl9ydG1zZw0KICAgICtjb25zdCBTaXplb2ZS
dE5leHRob3AgPSBfc2l6ZW9mX3J0bmV4dGhvcA0KICAgICtjb25zdCBTaXplb2ZTb2NrRmlsdGVy
ID0gX3NpemVvZl9zb2NrX2ZpbHRlcg0KICAgICtjb25zdCBTaXplb2ZTb2NrRnByb2cgPSBfc2l6
ZW9mX3NvY2tfZnByb2cNCiAgICArY29uc3QgU2l6ZW9mVWNyZWQgPSBfc2l6ZW9mX3VjcmVkDQog
ICAgK2NvbnN0IFNpemVvZklDTVB2NkZpbHRlciA9IF9zaXplb2ZfaWNtcDZfZmlsdGVyDQogICAg
K2NvbnN0IFNpemVvZklQdjZNVFVJbmZvID0gX3NpemVvZl9pcDZfbXR1aW5mbw0KICAgIGRpZmYg
LS1naXQgYS9nZW5lcmF0ZWQvdmVyc2lvbi5nbyBiL2dlbmVyYXRlZC92ZXJzaW9uLmdvDQogICAg
bmV3IGZpbGUgbW9kZSAxMDA2NDQNCiAgICBpbmRleCAwMDAwMDAwLi44MjRhODM2DQogICAgLS0t
IC9kZXYvbnVsbA0KICAgICsrKyBiL2dlbmVyYXRlZC92ZXJzaW9uLmdvDQogICAgQEAgLTAsMCAr
MSw3NyBAQA0KICAgICtwYWNrYWdlIHN5cw0KICAgICtjb25zdCBEZWZhdWx0R29yb290ID0gIi91
c3IvbG9jYWwiDQogICAgK2NvbnN0IFRoZVZlcnNpb24gPSAiZ28xLjguMyBnY2Nnby03IChEZWJp
YW4gNy40LjAtNikgNy40LjAiDQogICAgK2NvbnN0IEdPQVJDSCA9ICJhbWQ2NCINCiAgICArY29u
c3QgR09PUyA9ICJsaW51eCINCiAgICArY29uc3QgR2NjZ29Ub29sRGlyID0gIi91c3IvbG9jYWwv
bGliZXhlYy9nY2MvLzciDQogICAgKw0KICAgICt0eXBlIEFyY2hGYW1pbHlUeXBlIGludA0KICAg
ICsNCiAgICArY29uc3QgKA0KICAgICsJVU5LTk9XTiBBcmNoRmFtaWx5VHlwZSA9IGlvdGENCiAg
ICArCUkzODYNCiAgICArCUFMUEhBDQogICAgKwlBTUQ2NA0KICAgICsJQVJNDQogICAgKwlBUk02
NA0KICAgICsJSUE2NA0KICAgICsJTTY4Sw0KICAgICsJTUlQUw0KICAgICsJTUlQUzY0DQogICAg
KwlQUEMNCiAgICArCVBQQzY0DQogICAgKwlTMzkwDQogICAgKwlTMzkwWA0KICAgICsJU1BBUkMN
CiAgICArCVNQQVJDNjQNCiAgICArKQ0KICAgICsNCiAgICArY29uc3QgR29hcmNoMzg2ID0gMA0K
ICAgICtjb25zdCBHb2FyY2hBbHBoYSA9IDANCiAgICArY29uc3QgR29hcmNoQW1kNjQgPSAxDQog
ICAgK2NvbnN0IEdvYXJjaEFtZDY0cDMyID0gMA0KICAgICtjb25zdCBHb2FyY2hBcm0gPSAwDQog
ICAgK2NvbnN0IEdvYXJjaEFybWJlID0gMA0KICAgICtjb25zdCBHb2FyY2hBcm02NCA9IDANCiAg
ICArY29uc3QgR29hcmNoQXJtNjRiZSA9IDANCiAgICArY29uc3QgR29hcmNoSWE2NCA9IDANCiAg
ICArY29uc3QgR29hcmNoTTY4ayA9IDANCiAgICArY29uc3QgR29hcmNoTWlwcyA9IDANCiAgICAr
Y29uc3QgR29hcmNoTWlwc2xlID0gMA0KICAgICtjb25zdCBHb2FyY2hNaXBzNjQgPSAwDQogICAg
K2NvbnN0IEdvYXJjaE1pcHM2NGxlID0gMA0KICAgICtjb25zdCBHb2FyY2hNaXBzNjRwMzIgPSAw
DQogICAgK2NvbnN0IEdvYXJjaE1pcHM2NHAzMmxlID0gMA0KICAgICtjb25zdCBHb2FyY2hQcGMg
PSAwDQogICAgK2NvbnN0IEdvYXJjaFBwYzY0ID0gMA0KICAgICtjb25zdCBHb2FyY2hQcGM2NGxl
ID0gMA0KICAgICtjb25zdCBHb2FyY2hTMzkwID0gMA0KICAgICtjb25zdCBHb2FyY2hTMzkweCA9
IDANCiAgICArY29uc3QgR29hcmNoU3BhcmMgPSAwDQogICAgK2NvbnN0IEdvYXJjaFNwYXJjNjQg
PSAwDQogICAgKw0KICAgICtjb25zdCAoDQogICAgKwlBcmNoRmFtaWx5ID0gQU1ENjQNCiAgICAr
CUJpZ0VuZGlhbiA9IDANCiAgICArCUNhY2hlTGluZVNpemUgPSA2NA0KICAgICsJUGh5c1BhZ2VT
aXplID0gNDA5Ng0KICAgICsJUENRdWFudHVtID0gMQ0KICAgICsJSW50NjRBbGlnbiA9IDgNCiAg
ICArCUh1Z2VQYWdlU2l6ZSA9IDEgPDwgMjENCiAgICArCU1pbkZyYW1lU2l6ZSA9IDANCiAgICAr
KQ0KICAgICsNCiAgICArY29uc3QgR29vc0FuZHJvaWQgPSAwDQogICAgK2NvbnN0IEdvb3NEYXJ3
aW4gPSAwDQogICAgK2NvbnN0IEdvb3NEcmFnb25mbHkgPSAwDQogICAgK2NvbnN0IEdvb3NGcmVl
YnNkID0gMA0KICAgICtjb25zdCBHb29zSXJpeCA9IDANCiAgICArY29uc3QgR29vc0xpbnV4ID0g
MQ0KICAgICtjb25zdCBHb29zTmV0YnNkID0gMA0KICAgICtjb25zdCBHb29zT3BlbmJzZCA9IDAN
CiAgICArY29uc3QgR29vc1BsYW45ID0gMA0KICAgICtjb25zdCBHb29zUnRlbXMgPSAwDQogICAg
K2NvbnN0IEdvb3NTb2xhcmlzID0gMA0KICAgICtjb25zdCBHb29zV2luZG93cyA9IDANCiAgICAr
DQogICAgK3R5cGUgVWludHJlZyB1aW50cHRyDQogICAgZGlmZiAtLWdpdCBhL3BhY2thZ2VzLnVr
IGIvcGFja2FnZXMudWsNCiAgICBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KICAgIGluZGV4IDAwMDAw
MDAuLjQ0MWMxMzcNCiAgICAtLS0gL2Rldi9udWxsDQogICAgKysrIGIvcGFja2FnZXMudWsNCiAg
ICBAQCAtMCwwICsxLDk4MSBAQA0KICAgICsjIFRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkDQogICAg
KyQoTElCR09fQlVJTEQpL3J1bnRpbWUvaW50ZXJuYWwvYXRvbWljLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL2ludGVybmFsL2F0b21pYy9nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9pbnRlcm5hbC9hdG9taWMvc3R1YnMuZ28NCiAgICArCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lL2ludGVybmFsL2F0b21pYyAtZmdvLWNvbXBp
bGluZy1ydW50aW1lICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3J1bnRpbWUvaW50ZXJuYWwvc3lz
Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2ludGVybmFsL3N5cy9pbnRyaW5zaWNz
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2ludGVybmFsL3N5cy9zdHVicy5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9pbnRlcm5hbC9zeXMvc3lzLmdvICQoTElCR09f
QkFTRSkvZ2VuZXJhdGVkL3ZlcnNpb24uZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1ydW50aW1lL2ludGVybmFsL3N5cyAtZmdvLWNvbXBpbGluZy1ydW50aW1lICRe
IC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
DQogICAgKyQoTElCR09fQlVJTEQpL2Vycm9ycy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZXJy
b3JzL2Vycm9ycy5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19H
T0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZXJyb3JzICReIC1vICRAICYmIFwNCiAgICArCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2lu
dGVybmFsL3JhY2UubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3JhY2UvZG9jLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9yYWNlL25vcmFjZS5nbw0KICAgICsJJChj
YWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFD
VEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWludGVybmFsL3JhY2UgJF4gLW8gJEAgJiYg
XA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChM
SUJHT19CVUlMRCkvY3J5cHRvL2ludGVybmFsL2NpcGhlcmh3Lm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9jcnlwdG8vaW50ZXJuYWwvY2lwaGVyaHcvZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9jcnlwdG8vaW50ZXJuYWwvY2lwaGVyaHcvZ2VuZXJpYy5nbw0KICAgICsJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
DQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9pbnRlcm5hbC9jaXBoZXJodyAkXiAtbyAkQCAm
JiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICsk
KExJQkdPX0JVSUxEKS91bmljb2RlL3V0ZjgubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3VuaWNv
ZGUvdXRmOC91dGY4LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90
ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGly
ICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9
dW5pY29kZS91dGY4ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9zdWJ0bGUubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9zdWJ0bGUvY29uc3RhbnRfdGltZS5nbw0KICAgICsJ
JChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhU
UkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9zdWJ0bGUgJF4gLW8gJEAg
JiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICAr
JChMSUJHT19CVUlMRCkvY29udGFpbmVyL2xpc3QubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2Nv
bnRhaW5lci9saXN0L2xpc3QuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAg
JChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD1jb250YWluZXIvbGlzdCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9tYXRoLm86ICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2Ficy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9h
Y29zaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9hc2luLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL2FzaW5oLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2F0YW4uZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYXRhbjIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L21hdGgvYXRhbmguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYml0cy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbWF0aC9jYnJ0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2Nv
bnN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2NvcHlzaWduLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9tYXRoL2RpbS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9lcmYuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvZXhwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9t
YXRoL2V4cG0xLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2Zsb29yLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9tYXRoL2ZyZXhwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2dh
bW1hLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2h5cG90LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL2owLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2oxLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2puLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2xk
ZXhwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2xnYW1tYS5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbWF0aC9sb2cuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvbG9nMTAuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvbG9nMXAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L21hdGgvbG9nYi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9tb2QuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL21hdGgvbW9kZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9uZXh0
YWZ0ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvcG93LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL3BvdzEwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL3JlbWFpbmRl
ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9zaWduYml0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9tYXRoL3Npbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9zaW5jb3MuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvc2luaC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bWF0aC9zcXJ0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL3Rhbi5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbWF0aC90YW5oLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL3Vuc2Fm
ZS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9bWF0aCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9jb250YWluZXIvcmlu
Zy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29udGFpbmVyL3JpbmcvcmluZy5nbw0KICAgICsJ
JChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhU
UkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNvbnRhaW5lci9yaW5nICReIC1vICRA
ICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAg
KyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9jcnlwdG8vY3VydmUyNTUxOS5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L2NyeXB0by9jdXJ2ZTI1NTE5L2N1cnZlMjU1MTku
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vY3VydmUyNTUxOS9k
b2MuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwN
CiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29s
YW5nX29yZy94L2NyeXB0by9jdXJ2ZTI1NTE5ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2ludGVy
bmFsL25ldHRyYWNlLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9uZXR0cmFjZS9u
ZXR0cmFjZS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAk
QCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkg
JiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWludGVy
bmFsL25ldHRyYWNlICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3N5bmMvYXRvbWljLm86ICQoTElC
R09fRVhUUkFDVEVEKS9nby9zeW5jL2F0b21pYy9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3N5bmMvYXRvbWljL3ZhbHVlLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9c3luYy9hdG9taWMgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhw
b3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvdW5pY29kZS5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vdW5pY29kZS9jYXNldGFibGVzLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby91bmljb2RlL2RpZ2l0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby91bmljb2RlL2dyYXBo
aWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3VuaWNvZGUvbGV0dGVyLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby91bmljb2RlL3RhYmxlcy5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dW5pY29kZSAkXiAtbyAkQCAm
JiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICsk
KExJQkdPX0JVSUxEKS9lbmNvZGluZy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2Rpbmcv
ZW5jb2RpbmcuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nICReIC1vICRAICYmIFwNCiAgICArCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3Vu
aWNvZGUvdXRmMTYubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3VuaWNvZGUvdXRmMTYvdXRmMTYu
Z28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAk
KExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAg
ICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD11bmljb2RlL3V0ZjE2
ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpDQogICAgKyQoTElCR09fQlVJTEQpL2ltYWdlL2NvbG9yLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9pbWFnZS9jb2xvci9jb2xvci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvY29s
b3IveWNiY3IuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbWFn
ZS9jb2xvciAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9ydW50aW1lLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9ydW50aW1lL2FsZy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9jZ29f
Z2NjZ28uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvY2hhbi5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS9jb21waWxlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVu
dGltZS9jcHVwcm9mLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2NwdXRpY2tzLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2RlYnVnLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9ydW50aW1lL2Vudl9wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9l
cnJvci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9leHRlcm4uZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL3J1bnRpbWUvZmZpLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L2hhc2g2NC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9oYXNobWFwLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2hhc2htYXBfZmFzdC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9pZmFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9sZnN0
YWNrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2xmc3RhY2tfNjRiaXQuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbG9ja19mdXRleC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9tY2FjaGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbXBy
b2YuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbXNhbjAuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3J1bnRpbWUvbXN0YXRzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L25ldHBvbGwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvbmV0cG9sbF9lcG9sbC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9vc19nY2Nnby5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9vc19saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9wYW5pYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9wcmludC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcnVudGltZS9wcm9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50
aW1lL3JhY2UwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3JkZWJ1Zy5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9ydW50aW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3J1bnRpbWUxLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3J1bnRp
bWUyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3NlbGVjdC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vcnVudGltZS9zZW1hLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1l
L3NpZ25hbF9nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zaWduYWxfc2ln
aGFuZGxlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zaWduYWxfdW5peC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zaWdxdWV1ZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9zaXplY2xhc3Nlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGlt
ZS9zbGljZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9zdHJpbmcuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3J1bnRpbWUvc3R1YnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1
bnRpbWUvc3R1YnMyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3N5bXRhYi5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90aW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9ydW50aW1lL3RyYWNlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL3RyYWNlYmFj
a19nY2Nnby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS90eXBlLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9ydW50aW1lL3R5cGVraW5kLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL3VuYWxpZ25lZDEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdXRmOC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS93cml0ZV9lcnIuZ28gJChMSUJHT19CQVNF
KS9nZW5lcmF0ZWQvcnVudGltZV9zeXNpbmZvLmdvICQoTElCR09fQkFTRSkvZ2VuZXJhdGVkL3Np
Z3RhYi5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9cnVudGltZSAtZmdvLWMtaGVhZGVyPSQoTElCR09fQkFTRSkvZ2Vu
ZXJhdGVkL3J1bnRpbWUuaW5jLnRtcCAtZmdvLWNvbXBpbGluZy1ydW50aW1lICReIC1vICRAICYm
IFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQo
TElCR09fQlVJTEQpL2ltYWdlL2NvbG9yL3BhbGV0dGUubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2ltYWdlL2NvbG9yL3BhbGV0dGUvZ2VuZXJhdGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2lt
YWdlL2NvbG9yL3BhbGV0dGUvcGFsZXR0ZS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlt
a2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMg
LWZnby1wa2dwYXRoPWltYWdlL2NvbG9yL3BhbGV0dGUgJF4gLW8gJEAgJiYgXA0KICAgICsJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkv
Z29sYW5nX29yZy94L2NyeXB0by9wb2x5MTMwNS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29s
YW5nX29yZy94L2NyeXB0by9wb2x5MTMwNS9wb2x5MTMwNS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZ29sYW5nX29yZy94L2NyeXB0by9wb2x5MTMwNS9zdW1fcmVmLmdvDQogICAgKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFuZ19vcmcveC9jcnlwdG8vcG9s
eTEzMDUgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvbWF0aC9jbXBseC5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbWF0aC9jbXBseC9hYnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21w
bHgvYXNpbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9jb25qLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L2V4cC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bWF0aC9jbXBseC9pc2luZi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9pc25h
bi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9jbXBseC9sb2cuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL21hdGgvY21wbHgvcGhhc2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgv
Y21wbHgvcG9sYXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21wbHgvcG93LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L3JlY3QuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL21hdGgvY21wbHgvc2luLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2NtcGx4L3Nx
cnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvY21wbHgvdGFuLmdvDQogICAgKwkkKGNh
bGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNU
RUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChM
SUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bWF0aC9jbXBseCAkXiAtbyAkQCAmJiBcDQog
ICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdP
X0JVSUxEKS9zeW5jLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9zeW5jL2NvbmQuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3N5bmMvbXV0ZXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5bmMv
b25jZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3luYy9wb29sLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9zeW5jL3J1bnRpbWUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5bmMvcndtdXRl
eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3luYy93YWl0Z3JvdXAuZ28NCiAgICArCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXN5
bmMgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkNCiAgICArJChMSUJHT19CVUlMRCkvc3RyY29udi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3RyY29udi9hdG9iLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJjb252L2F0b2YuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmNvbnYvYXRvaS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vc3RyY29udi9kZWNpbWFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJjb252L2RvYy5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyY29udi9leHRmbG9hdC5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vc3RyY29udi9mdG9hLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zdHJjb252L2lz
cHJpbnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmNvbnYvaXRvYS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3RyY29udi9xdW90ZS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdP
LGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9c3RyY29udiAkXiAtbyAkQCAm
JiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICsk
KExJQkdPX0JVSUxEKS9pby5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW8vaW8uZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2lvL211bHRpLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pby9waXBl
LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1pbyAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9pbnRlcm5hbC9zaW5nbGVm
bGlnaHQubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3NpbmdsZWZsaWdodC9zaW5n
bGVmbGlnaHQuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbnRl
cm5hbC9zaW5nbGVmbGlnaHQgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhw
b3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvbWF0aC9yYW5kLm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby9tYXRoL3JhbmQvZXhwLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9tYXRoL3JhbmQvbm9ybWFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL3JhbmQvcmFu
ZC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9yYW5kL3JuZy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbWF0aC9yYW5kL3ppcGYuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1tYXRoL3JhbmQgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29f
ZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvc3lzY2FsbC5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9kaXJlbnQuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3N5c2NhbGwvZW5kaWFuX2xpdHRsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2Fs
bC9lbnZfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9lcnJzdHJfbGludXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvZXhlY19saW51eC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vc3lzY2FsbC9leGVjX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5
c2NhbGwvbGliY2FsbF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9saWJj
YWxsX2xpbnV4X2FtZDY0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxf
bGludXhfdXN0YXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9saW51
eF91dGltZXNuYW5vLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfcG9z
aXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9wb3NpeF9sYXJnZWZp
bGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF9zdXBwb3J0LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL2xpYmNhbGxfdW5hbWUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvbGliY2FsbF93YWl0NC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9sc2ZfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbXNhbjAu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvbmV0bGlua19saW51eC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3lzY2FsbC9zZXR1aWRnaWRfbGludXguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N5c2NhbGwvc2xlZXBfc2VsZWN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNj
YWxsL3NvY2tjbXNnX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tj
bXNnX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc29ja2V0LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3NvY2tldF9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vc3lzY2FsbC9zb2NrZXRfbGludXhfdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9zb2NrZXRfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3Ry
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5c2NhbGwuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL3N5c2NhbGwvc3lzY2FsbF9lcnJuby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
c3lzY2FsbC9zeXNjYWxsX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3N5
c2NhbGxfbGludXhfYW1kNjQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N5c2NhbGwvc3lzY2Fs
bF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9zeXNjYWxsL3RpbWVzdHJ1Y3QuZ28gJChM
SUJHT19CQVNFKS9nZW5lcmF0ZWQvbGliY2FsbHMuZ28gJChMSUJHT19CQVNFKS9nZW5lcmF0ZWQv
c3lzaW5mby5nbyAkKExJQkdPX0JBU0UpL2dlbmVyYXRlZC9zeXNjYWxsX2FyY2guZ28gJChMSUJH
T19CQVNFKS9nZW5lcmF0ZWQvZXBvbGwuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXN5c2NhbGwgJF4gLW8gJEAgJiYg
XA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChM
SUJHT19CVUlMRCkvaGFzaC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaGFzaC9oYXNoLmdvDQog
ICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJH
T19FWFRSQUNURUQpICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28t
cGtncGF0aD1oYXNoICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3J1bnRpbWUvdHJhY2UubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL3J1bnRpbWUvdHJhY2UvdHJhY2UuZ28NCiAgICArCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1ydW50aW1lL3RyYWNlICReIC1vICRAICYmIFwNCiAg
ICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09f
QlVJTEQpL3N0cmluZ3MubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmluZ3MvY29tcGFyZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyaW5ncy9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL3N0cmluZ3MvcmVwbGFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc3RyaW5ncy9z
ZWFyY2guZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3N0cmluZ3Mvc3RyaW5ncy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vc3RyaW5ncy9zdHJpbmdzX2RlY2wuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3N0cmluZ3Mvc3RyaW5nc19nZW5lcmljLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICAr
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1zdHJpbmdzICReIC1vICRA
ICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAg
KyQoTElCR09fQlVJTEQpL2J5dGVzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9idWZm
ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2J5dGVzL2J5dGVzLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9ieXRlcy9ieXRlc19kZWNsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9i
eXRlc19nZW5lcmljLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ieXRlcy9yZWFkZXIuZ28NCiAg
ICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1w
a2dwYXRoPWJ5dGVzICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9jaXBoZXIubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIvY2JjLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9jcnlwdG8vY2lwaGVyL2NmYi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2Np
cGhlci9jaXBoZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIvY3RyLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vY2lwaGVyL2djbS5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vY3J5cHRvL2NpcGhlci9pby5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L2NpcGhlci9vZmIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9jaXBoZXIveG9yLmdv
DQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAg
KwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL2NpcGhlciAk
XiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQ0KICAgICskKExJQkdPX0JVSUxEKS9oYXNoL2NyYzMyLm86ICQoTElCR09fRVhUUkFDVEVEKS9n
by9oYXNoL2NyYzMyL2NyYzMyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9oYXNoL2NyYzMyL2Ny
YzMyX2dlbmVyaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2hhc2gvY3JjMzIvY3JjMzJfb3Ro
ZXJhcmNoLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aGFzaC9j
cmMzMiAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5v
PS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9oYXNoL2Zudi5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vaGFzaC9mbnYvZm52LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9aGFzaC9mbnYgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvY3J5cHRvL2htYWMubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9obWFjL2htYWMuZ28NCiAgICArCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vaG1hYyAkXiAtbyAkQCAmJiBcDQogICAgKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxE
KS9oYXNoL2FkbGVyMzIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2hhc2gvYWRsZXIzMi9hZGxl
cjMyLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwg
Y2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBc
DQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aGFzaC9hZGxl
cjMyICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89
LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2hhc2gvY3JjNjQubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2hhc2gvY3JjNjQvY3JjNjQuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1oYXNoL2NyYzY0ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2NyeXB0by5nbw0KICAgICsJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
DQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvICRe
IC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
DQogICAgKyQoTElCR09fQlVJTEQpL3JlZmxlY3QubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3Jl
ZmxlY3QvZGVlcGVxdWFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWZsZWN0L21ha2VmdW5j
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWZsZWN0L21ha2VmdW5jX2ZmaS5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcmVmbGVjdC9zd2FwcGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
ZWZsZWN0L3R5cGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZmxlY3QvdmFsdWUuZ28NCiAg
ICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1w
a2dwYXRoPXJlZmxlY3QgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvYmFzZTY0Lm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9iYXNlNjQvYmFzZTY0LmdvDQogICAgKwkk
KGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRS
QUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykg
JChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZW5jb2RpbmcvYmFzZTY0ICReIC1vICRA
ICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAg
KyQoTElCR09fQlVJTEQpL2NyeXB0by9yYzQubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0
by9yYzQvcmM0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vcmM0L3JjNF9yZWYuZ28N
CiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICAr
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vcmM0ICReIC1v
ICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQog
ICAgKyQoTElCR09fQlVJTEQpL2VuY29kaW5nL2FzY2lpODUubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2VuY29kaW5nL2FzY2lpODUvYXNjaWk4NS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAg
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykg
LWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL2FzY2lpODUgJF4gLW8gJEAgJiYgXA0KICAgICsJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkv
Y3J5cHRvL2Flcy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2Flcy9ibG9jay5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2Flcy9jaXBoZXIuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NyeXB0by9hZXMvY2lwaGVyX2dlbmVyaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2NyeXB0by9hZXMvY29uc3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9hZXMvbW9k
ZXMuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwN
CiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vYWVz
ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9tZDUubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2NyeXB0by9tZDUvbWQ1LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vbWQ1L21k
NWJsb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vbWQ1L21kNWJsb2NrX2dlbmVy
aWMuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwN
CiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vbWQ1
ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9zaGE1MTIubzogJChMSUJHT19FWFRSQUNU
RUQpL2dvL2NyeXB0by9zaGE1MTIvc2hhNTEyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlw
dG8vc2hhNTEyL3NoYTUxMmJsb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vc2hh
NTEyL3NoYTUxMmJsb2NrX2dlbmVyaWMuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD1jcnlwdG8vc2hhNTEyICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9z
aGEyNTYubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9zaGEyNTYvc2hhMjU2LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vc2hhMjU2L3NoYTI1NmJsb2NrLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9jcnlwdG8vc2hhMjU2L3NoYTI1NmJsb2NrX2dlbmVyaWMuZ28NCiAgICAr
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vc2hhMjU2ICReIC1vICRA
ICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAg
KyQoTElCR09fQlVJTEQpL2NyeXB0by9zaGExLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlw
dG8vc2hhMS9zaGExLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vc2hhMS9zaGExYmxv
Y2suZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9zaGExL3NoYTFibG9ja19nZW5lcmlj
LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQog
ICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL3NoYTEg
JF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkNCiAgICArJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L3RleHQvdHJhbnNmb3JtLm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC90cmFuc2Zvcm0vdHJhbnNmb3Jt
LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQog
ICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFu
Z19vcmcveC90ZXh0L3RyYW5zZm9ybSAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9idWZpby5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vYnVmaW8vYnVmaW8uZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2J1ZmlvL3NjYW4uZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09f
R09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWJ1ZmlvICReIC1vICRAICYmIFwNCiAgICArCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3Rl
eHQvdGFid3JpdGVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0L3RhYndyaXRlci90YWJ3
cml0ZXIuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYm
IFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXh0L3Rh
YndyaXRlciAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9lbmNvZGluZy9iYXNlMzIubzogJChMSUJH
T19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2Jhc2UzMi9iYXNlMzIuZ28NCiAgICArCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy9iYXNlMzIgJF4gLW8gJEAgJiYgXA0K
ICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJH
T19CVUlMRCkvcGF0aC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcGF0aC9tYXRjaC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vcGF0aC9wYXRoLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICAr
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1wYXRoICReIC1vICRAICYm
IFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQo
TElCR09fQlVJTEQpL2h0bWwubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2h0bWwvZW50aXR5Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL2VzY2FwZS5nbw0KICAgICsJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
DQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aHRtbCAkXiAt
byAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0K
ICAgICskKExJQkdPX0JVSUxEKS9pbWFnZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2Uv
Zm9ybWF0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9nZW9tLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9pbWFnZS9pbWFnZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvbmFt
ZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL3ljYmNyLmdvDQogICAgKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pbWFn
ZSAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9pbWFnZS9pbnRlcm5hbC9pbWFnZXV0aWwubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2ludGVybmFsL2ltYWdldXRpbC9pbWFnZXV0aWwuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2ludGVybmFsL2ltYWdldXRpbC9pbXBsLmdvDQog
ICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJH
T19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkk
KEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aW1hZ2UvaW50ZXJuYWwvaW1h
Z2V1dGlsICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6
Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2ltYWdlL2pwZWcubzogJChMSUJHT19FWFRS
QUNURUQpL2dvL2ltYWdlL2pwZWcvZmRjdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2Uv
anBlZy9odWZmbWFuLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9qcGVnL2lkY3QuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2pwZWcvcmVhZGVyLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9pbWFnZS9qcGVnL3NjYW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdlL2pw
ZWcvd3JpdGVyLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aW1h
Z2UvanBlZyAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9pbWFnZS9kcmF3Lm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9pbWFnZS9kcmF3L2RyYXcuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJ
bWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1pbWFnZS9kcmF3ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2VuY29kaW5n
L2JpbmFyeS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvYmluYXJ5L2JpbmFyeS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvYmluYXJ5L3ZhcmludC5nbw0KICAgICsJ
JChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhU
UkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL2JpbmFyeSAkXiAtbyAk
QCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAg
ICskKExJQkdPX0JVSUxEKS9zb3J0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9zb3J0L3NlYXJj
aC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vc29ydC9zb3J0LmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9zb3J0L3pmdW5jdmVyc2lvbi5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxp
YmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9c29ydCAkXiAtbyAkQCAmJiBcDQog
ICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdP
X0JVSUxEKS9pbnRlcm5hbC9zeXNjYWxsL3VuaXgubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2lu
dGVybmFsL3N5c2NhbGwvdW5peC9kdW1teS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJu
YWwvc3lzY2FsbC91bml4L2dldHJhbmRvbV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
aW50ZXJuYWwvc3lzY2FsbC91bml4L2dldHJhbmRvbV9saW51eF9hbWQ2NC5nbw0KICAgICsJJChj
YWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFD
VEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWludGVybmFsL3N5c2NhbGwvdW5peCAkXiAt
byAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0K
ICAgICskKExJQkdPX0JVSUxEKS9leHAvdGVybWluYWwubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2V4cC90ZXJtaW5hbC90ZXJtaW5hbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZXhwL3Rlcm1p
bmFsL3V0aWwuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1leHAv
dGVybWluYWwgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvdGltZS5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vdGltZS9mb3JtYXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RpbWUvc2xlZXAuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3RpbWUvc3lzX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3RpbWUvdGljay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGltZS90aW1lLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby90aW1lL3pvbmVpbmZvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90
aW1lL3pvbmVpbmZvX3JlYWQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RpbWUvem9uZWluZm9f
dW5peC5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9dGltZSAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9jb21wcmVzcy9i
emlwMi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvYnppcDIvYml0X3JlYWRlci5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvYnppcDIvYnppcDIuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2NvbXByZXNzL2J6aXAyL2h1ZmZtYW4uZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2NvbXByZXNzL2J6aXAyL21vdmVfdG9fZnJvbnQuZ28NCiAgICArCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0K
ICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1jb21wcmVzcy9iemlwMiAkXiAtbyAkQCAmJiBcDQogICAgKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxE
KS9jb250YWluZXIvaGVhcC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29udGFpbmVyL2hlYXAv
aGVhcC5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNvbnRhaW5l
ci9oZWFwICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6
Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3JlZ2V4cC9zeW50YXgubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL3JlZ2V4cC9zeW50YXgvY29tcGlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vcmVnZXhwL3N5bnRheC9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZ2V4cC9zeW50
YXgvcGFyc2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZ2V4cC9zeW50YXgvcGVybF9ncm91
cHMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZ2V4cC9zeW50YXgvcHJvZy5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vcmVnZXhwL3N5bnRheC9yZWdleHAuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL3JlZ2V4cC9zeW50YXgvc2ltcGxpZnkuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxH
TyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJ
bWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1j
IC1mZ28tcGtncGF0aD1yZWdleHAvc3ludGF4ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2VuY29k
aW5nL3BlbS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvcGVtL3BlbS5nbw0KICAg
ICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL3BlbSAkXiAtbyAk
QCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAg
ICskKExJQkdPX0JVSUxEKS9jcnlwdG8vZGVzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlw
dG8vZGVzL2Jsb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vZGVzL2NpcGhlci5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2Rlcy9jb25zdC5nbw0KICAgICsJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9kZXMgJF4gLW8gJEAgJiYgXA0KICAg
ICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19C
VUlMRCkvZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1L2ludGVybmFsL2NoYWNo
YTIwLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIw
cG9seTEzMDUvaW50ZXJuYWwvY2hhY2hhMjAvY2hhY2hhX2dlbmVyaWMuZ28NCiAgICArCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJ
QkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L2NyeXB0by9j
aGFjaGEyMHBvbHkxMzA1L2ludGVybmFsL2NoYWNoYTIwICReIC1vICRAICYmIFwNCiAgICArCW9i
amNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQp
L2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZ29sYW5nX29yZy94L2NyeXB0by9jaGFjaGEyMHBvbHkxMzA1L2NoYWNoYTIwcG9seTEz
MDUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBw
b2x5MTMwNS9jaGFjaGEyMHBvbHkxMzA1X2dlbmVyaWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L2dvbGFuZ19vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNS9jaGFjaGEyMHBvbHkxMzA1X25v
YXNtLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIw
cG9seTEzMDUvY2hhY2hhMjBwb2x5MTMwNV90ZXN0X3ZlY3RvcnMuZ28NCiAgICArCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L2NyeXB0by9jaGFj
aGEyMHBvbHkxMzA1ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL29zLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9vcy9kaXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Rpcl9nY2Nnby5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZGlyX2xhcmdlZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vb3MvZGlyX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Vudi5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXJyb3IuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2Vy
cm9yX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWMuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL29zL2V4ZWNfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2V4ZWNf
dW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vb3MvZXhlY3V0YWJsZV9wcm9jZnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L29zL2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL2ZpbGVfcG9zaXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL29zL2ZpbGVfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mv
Z2V0d2QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3BhdGguZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL29zL3BhdGhfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcGlwZV9saW51
eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvcHJvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vb3Mvc3RhdF9hdGltLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy9zdGF0X3VuaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N0aWNreV9ub3Ric2QuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL29zL3N0ci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvc3lzLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9vcy9zeXNfbGludXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3N5
c191bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9vcy90eXBlcy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vb3MvdHlwZXNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3Mvd2FpdF93
YWl0aWQuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEAp
LCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPW9zICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3JlZ2V4cC5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vcmVnZXhwL2JhY2t0cmFjay5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcmVnZXhwL2V4ZWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3JlZ2V4cC9vbmVwYXNz
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9yZWdleHAvcmVnZXhwLmdvDQogICAgKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1yZWdl
eHAgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0u
Z294KSkNCiAgICArJChMSUJHT19CVUlMRCkvcnVudGltZS9kZWJ1Zy5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vcnVudGltZS9kZWJ1Zy9nYXJiYWdlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9y
dW50aW1lL2RlYnVnL3N0YWNrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9ydW50aW1lL2RlYnVn
L3N0dWJzLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9cnVudGlt
ZS9kZWJ1ZyAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9mbXQubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL2ZtdC9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ZtdC9mb3JtYXQuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2ZtdC9wcmludC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZm10L3Nj
YW4uZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykg
LWMgLWZnby1wa2dwYXRoPWZtdCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9wYXRoL2ZpbGVwYXRo
Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9wYXRoL2ZpbGVwYXRoL21hdGNoLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9wYXRoL2ZpbGVwYXRoL3BhdGguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L3BhdGgvZmlsZXBhdGgvcGF0aF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9wYXRoL2Zp
bGVwYXRoL3N5bWxpbmsuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3BhdGgvZmlsZXBhdGgvc3lt
bGlua191bml4LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9cGF0
aC9maWxlcGF0aCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAg
JChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9vcy9zaWduYWwubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL29zL3NpZ25hbC9kb2MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3Np
Z25hbC9zaWduYWwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3NpZ25hbC9zaWduYWxfdW5p
eC5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0K
ICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW9zL3NpZ25hbCAk
XiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQ0KICAgICskKExJQkdPX0JVSUxEKS9pbmRleC9zdWZmaXhhcnJheS5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vaW5kZXgvc3VmZml4YXJyYXkvcXN1ZnNvcnQuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2luZGV4L3N1ZmZpeGFycmF5L3N1ZmZpeGFycmF5LmdvDQogICAgKwkkKGNhbGwgdmVyYm9z
ZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwN
CiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZM
QUdTKSAtYyAtZmdvLXBrZ3BhdGg9aW5kZXgvc3VmZml4YXJyYXkgJF4gLW8gJEAgJiYgXA0KICAg
ICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19C
VUlMRCkvaW8vaW91dGlsLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pby9pb3V0aWwvaW91dGls
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pby9pb3V0aWwvdGVtcGZpbGUuZ28NCiAgICArCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1pby9pb3V0aWwgJF4gLW8gJEAgJiYgXA0K
ICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJH
T19CVUlMRCkvbWF0aC9iaWcubzogJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL2FjY3Vy
YWN5X3N0cmluZy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9iaWcvYXJpdGguZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL2FyaXRoX2RlY2xfcHVyZS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbWF0aC9iaWcvZGVjaW1hbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWF0
aC9iaWcvZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9mbG9hdC5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbWF0aC9iaWcvZmxvYXRjb252LmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9tYXRoL2JpZy9mbG9hdG1hcnNoLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2Jp
Zy9mdG9hLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9pbnQuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL21hdGgvYmlnL2ludGNvbnYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21h
dGgvYmlnL2ludG1hcnNoLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9uYXQuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL25hdGNvbnYuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL21hdGgvYmlnL3ByaW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9tYXRoL2JpZy9y
YXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL21hdGgvYmlnL3JhdGNvbnYuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL21hdGgvYmlnL3JhdG1hcnNoLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9t
YXRoL2JpZy9yb3VuZGluZ21vZGVfc3RyaW5nLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICAr
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9bWF0aC9iaWcgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAu
Z29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvZGVidWcvcGxh
bjlvYmoubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL3BsYW45b2JqL2ZpbGUuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL3BsYW45b2JqL3BsYW45b2JqLmdvDQogICAgKwkkKGNh
bGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNU
RUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChM
SUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZGVidWcvcGxhbjlvYmogJF4gLW8gJEAgJiYg
XA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChM
SUJHT19CVUlMRCkvZGVidWcvZHdhcmYubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2R3
YXJmL2J1Zi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZHdhcmYvY2xhc3Nfc3RyaW5n
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9kd2FyZi9jb25zdC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZGVidWcvZHdhcmYvZW50cnkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Rl
YnVnL2R3YXJmL2xpbmUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2R3YXJmL29wZW4u
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2RlYnVnL2R3YXJmL3R5cGUuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2RlYnVnL2R3YXJmL3R5cGV1bml0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9k
ZWJ1Zy9kd2FyZi91bml0LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQo
bm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9ZGVidWcvZHdhcmYgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvY29tcHJlc3MvbHp3Lm86ICQo
TElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9sencvcmVhZGVyLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9jb21wcmVzcy9sencvd3JpdGVyLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICAr
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9Y29tcHJlc3MvbHp3ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkg
LWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2FyY2hp
dmUvdGFyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9hcmNoaXZlL3Rhci9jb21tb24uZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUvdGFyL2Zvcm1hdC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vYXJjaGl2ZS90YXIvcmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9hcmNoaXZl
L3Rhci9zdGF0X2F0aW0uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2FyY2hpdmUvdGFyL3N0YXRf
dW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYXJjaGl2ZS90YXIvc3RyY29udi5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vYXJjaGl2ZS90YXIvd3JpdGVyLmdvDQogICAgKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19H
T0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9YXJjaGl2ZS90YXIgJF4gLW8gJEAgJiYgXA0KICAgICsJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlM
RCkvZW5jb2RpbmcvaGV4Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9oZXgvaGV4
LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQog
ICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZW5jb2RpbmcvaGV4
ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpDQogICAgKyQoTElCR09fQlVJTEQpL2VuY29kaW5nL3htbC5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZW5jb2RpbmcveG1sL21hcnNoYWwuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29k
aW5nL3htbC9yZWFkLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy94bWwvdHlwZWlu
Zm8uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL3htbC94bWwuZ28NCiAgICArCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1lbmNvZGluZy94bWwgJF4gLW8gJEAgJiYg
XA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChM
SUJHT19CVUlMRCkvY29tcHJlc3MvZmxhdGUubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NvbXBy
ZXNzL2ZsYXRlL2RlZmxhdGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NvbXByZXNzL2ZsYXRl
L2RlZmxhdGVmYXN0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9mbGF0ZS9kaWN0
X2RlY29kZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NvbXByZXNzL2ZsYXRlL2h1ZmZtYW5f
Yml0X3dyaXRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvZmxhdGUvaHVmZm1h
bl9jb2RlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9mbGF0ZS9pbmZsYXRlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9mbGF0ZS9yZXZlcnNlX2JpdHMuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2NvbXByZXNzL2ZsYXRlL3Rva2VuLmdvDQogICAgKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y29tcHJlc3MvZmxhdGUgJF4gLW8gJEAgJiYgXA0K
ICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJH
T19CVUlMRCkvZW5jb2RpbmcvY3N2Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9j
c3YvcmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9jc3Yvd3JpdGVyLmdv
DQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChM
SUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAg
KwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZW5jb2RpbmcvY3N2ICRe
IC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
DQogICAgKyQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9uZXQvaHR0cDIvaHBhY2subzogJChM
SUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9uZXQvaHR0cDIvaHBhY2svZW5jb2RlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvbmV0L2h0dHAyL2hwYWNrL2hwYWNr
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvbmV0L2h0dHAyL2hwYWNrL2h1
ZmZtYW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC9uZXQvaHR0cDIvaHBh
Y2svdGFibGVzLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVu
ZG9yL2dvbGFuZ19vcmcveC9uZXQvaHR0cDIvaHBhY2sgJF4gLW8gJEAgJiYgXA0KICAgICsJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkv
ZW5jb2RpbmcvZ29iLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9nb2IvZGVjX2hl
bHBlcnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9kZWNvZGUuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9kZWNvZGVyLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9lbmNvZGluZy9nb2IvZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGlu
Zy9nb2IvZW5jX2hlbHBlcnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9l
bmNvZGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2dvYi9lbmNvZGVyLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9nb2IvZXJyb3IuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2VuY29kaW5nL2dvYi90eXBlLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08s
bGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1r
ZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9ZW5jb2RpbmcvZ29iICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL25ldC91cmwu
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC91cmwvdXJsLmdvDQogICAgKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19H
T0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bmV0L3VybCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9j
b250ZXh0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb250ZXh0L2NvbnRleHQuZ28NCiAgICAr
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPWNvbnRleHQgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvanNvbi5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvanNvbi9kZWNvZGUuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL2VuY29kaW5nL2pzb24vZW5jb2RlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNv
ZGluZy9qc29uL2ZvbGQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2pzb24vaW5k
ZW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9lbmNvZGluZy9qc29uL3NjYW5uZXIuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2pzb24vc3RyZWFtLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9lbmNvZGluZy9qc29uL3RhYmxlcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5j
b2RpbmcvanNvbi90YWdzLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQo
bm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9ZW5jb2RpbmcvanNvbiAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9sb2cubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL2xvZy9sb2cuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJn
bzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWxvZyAkXiAtbyAkQCAmJiBcDQogICAg
KwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JV
SUxEKS9kZWJ1Zy9nb3N5bS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZ29zeW0vcGNs
bnRhYi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZ29zeW0vc3ltdGFiLmdvDQogICAg
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZGVidWcvZ29zeW0gJF4gLW8gJEAg
JiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICAr
JChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L25ldC9pZG5hLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9nb2xhbmdfb3JnL3gvbmV0L2lkbmEvaWRuYS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z29sYW5nX29yZy94L25ldC9pZG5hL3B1bnljb2RlLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAg
ICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9yL2dvbGFuZ19vcmcveC9uZXQvaWRuYSAkXiAtbyAkQCAm
JiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICsk
KExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvdGV4dC91bmljb2RlL25vcm0ubzogJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3VuaWNvZGUvbm9ybS9jb21wb3NpdGlvbi5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL2Zv
cm1pbmZvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4dC91bmljb2Rl
L25vcm0vaW5wdXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFuZ19vcmcveC90ZXh0L3Vu
aWNvZGUvbm9ybS9pdGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdfb3JnL3gvdGV4
dC91bmljb2RlL25vcm0vbm9ybWFsaXplLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nb2xhbmdf
b3JnL3gvdGV4dC91bmljb2RlL25vcm0vcmVhZHdyaXRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL3RhYmxlcy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL3RyYW5zZm9ybS5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L3RleHQvdW5pY29kZS9ub3JtL3RyaWUuZ28N
CiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICAr
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29y
Zy94L3RleHQvdW5pY29kZS9ub3JtICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL21pbWUubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL21pbWUvZW5jb2RlZHdvcmQuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL21pbWUvZ3JhbW1hci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWltZS9tZWRpYXR5cGUu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL21pbWUvdHlwZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbWltZS90eXBlX3VuaXguZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW1pbWUgJF4gLW8gJEAgJiYgXA0KICAgICsJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlM
RCkvZ29sYW5nX29yZy94L3RleHQvd2lkdGgubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvbGFu
Z19vcmcveC90ZXh0L3dpZHRoL2tpbmRfc3RyaW5nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9n
b2xhbmdfb3JnL3gvdGV4dC93aWR0aC90YWJsZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
bGFuZ19vcmcveC90ZXh0L3dpZHRoL3RyYW5zZm9ybS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z29sYW5nX29yZy94L3RleHQvd2lkdGgvdHJpZXZhbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z29sYW5nX29yZy94L3RleHQvd2lkdGgvd2lkdGguZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2Nt
ZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAg
ICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1Mp
IC1jIC1mZ28tcGtncGF0aD12ZW5kb3IvZ29sYW5nX29yZy94L3RleHQvd2lkdGggJF4gLW8gJEAg
JiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICAr
JChMSUJHT19CVUlMRCkvbWltZS9xdW90ZWRwcmludGFibGUubzogJChMSUJHT19FWFRSQUNURUQp
L2dvL21pbWUvcXVvdGVkcHJpbnRhYmxlL3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bWltZS9xdW90ZWRwcmludGFibGUvd3JpdGVyLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICAr
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9bWltZS9xdW90ZWRwcmludGFibGUgJF4gLW8gJEAgJiYgXA0KICAgICsJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlM
RCkvbmV0L2h0dHAvaW50ZXJuYWwubzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2lu
dGVybmFsL2NodW5rZWQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2ludGVybmFs
L3Rlc3RjZXJ0LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGly
ICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRA
KSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bmV0
L2h0dHAvaW50ZXJuYWwgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0
ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvZmxhZy5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZmxhZy9mbGFnLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGli
Z286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1mbGFnICReIC1vICRAICYmIFwNCiAg
ICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09f
QlVJTEQpL2dvL3Rva2VuLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90b2tlbi9wb3NpdGlv
bi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdG9rZW4vc2VyaWFsaXplLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9nby90b2tlbi90b2tlbi5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAg
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykg
LWMgLWZnby1wa2dwYXRoPWdvL3Rva2VuICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWog
LmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL3RleHQvdGVt
cGxhdGUvcGFyc2UubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQvdGVtcGxhdGUvcGFyc2Uv
bGV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0L3RlbXBsYXRlL3BhcnNlL25vZGUuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQvdGVtcGxhdGUvcGFyc2UvcGFyc2UuZ28NCiAgICAr
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXh0L3RlbXBsYXRlL3BhcnNlICRe
IC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkp
DQogICAgKyQoTElCR09fQlVJTEQpL3RleHQvc2Nhbm5lci5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vdGV4dC9zY2FubmVyL3NjYW5uZXIuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxs
aWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtk
aXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1m
Z28tcGtncGF0aD10ZXh0L3NjYW5uZXIgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAu
Z29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvb3MvdXNlci5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvdXNlci9kZWNsc191bml4LmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9vcy91c2VyL2xpc3Rncm91cHNfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vb3MvdXNlci9sb29rdXAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3VzZXIvbG9va3Vw
X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29zL3VzZXIvdXNlci5nbw0KICAgICsJJChj
YWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFD
VEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW9zL3VzZXIgJF4gLW8gJEAgJiYgXA0KICAg
ICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19C
VUlMRCkvbmV0L2ludGVybmFsL3NvY2t0ZXN0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQv
aW50ZXJuYWwvc29ja3Rlc3Qvc3dpdGNoLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaW50
ZXJuYWwvc29ja3Rlc3Qvc3dpdGNoX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQv
aW50ZXJuYWwvc29ja3Rlc3Qvc3dpdGNoX3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9pbnRlcm5hbC9zb2NrdGVzdC9zeXNfY2xvZXhlYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
bmV0L2ludGVybmFsL3NvY2t0ZXN0L3N5c191bml4LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAg
ICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9bmV0L2ludGVybmFsL3NvY2t0ZXN0ICReIC1vICRAICYmIFwNCiAg
ICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09f
QlVJTEQpL2dvL3NjYW5uZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3NjYW5uZXIvZXJy
b3JzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9zY2FubmVyL3NjYW5uZXIuZ28NCiAgICAr
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby9zY2FubmVyICReIC1vICRAICYm
IFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQo
TElCR09fQlVJTEQpL2ltYWdlL2dpZi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvZ2lm
L3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW1hZ2UvZ2lmL3dyaXRlci5nbw0KICAg
ICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWltYWdlL2dpZiAkXiAtbyAkQCAm
JiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICsk
KExJQkdPX0JVSUxEKS90ZXN0aW5nL3F1aWNrLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXN0
aW5nL3F1aWNrL3F1aWNrLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQo
bm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQo
ZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3Bh
dGg9dGVzdGluZy9xdWljayAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBv
cnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9vcy9leGVjLm86ICQoTElC
R09fRVhUUkFDVEVEKS9nby9vcy9leGVjL2V4ZWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL29z
L2V4ZWMvZXhlY19wb3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vb3MvZXhlYy9scF91bml4
LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2Qg
JChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQog
ICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9b3MvZXhlYyAkXiAt
byAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0K
ICAgICskKExJQkdPX0JVSUxEKS9kYXRhYmFzZS9zcWwvZHJpdmVyLm86ICQoTElCR09fRVhUUkFD
VEVEKS9nby9kYXRhYmFzZS9zcWwvZHJpdmVyL2RyaXZlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZGF0YWJhc2Uvc3FsL2RyaXZlci90eXBlcy5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAg
Kwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykg
LWMgLWZnby1wa2dwYXRoPWRhdGFiYXNlL3NxbC9kcml2ZXIgJF4gLW8gJEAgJiYgXA0KICAgICsJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlM
RCkvdGVzdGluZy9pb3Rlc3QubzogJChMSUJHT19FWFRSQUNURUQpL2dvL3Rlc3RpbmcvaW90ZXN0
L2xvZ2dlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGVzdGluZy9pb3Rlc3QvcmVhZGVyLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXN0aW5nL2lvdGVzdC93cml0ZXIuZ28NCiAgICArCSQo
Y2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJB
Q1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAk
KExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXN0aW5nL2lvdGVzdCAkXiAtbyAkQCAm
JiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICsk
KExJQkdPX0JVSUxEKS90ZXN0aW5nLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXN0aW5nL2Fs
bG9jcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGVzdGluZy9iZW5jaG1hcmsuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL3Rlc3RpbmcvY292ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3Rl
c3RpbmcvZXhhbXBsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGVzdGluZy9tYXRjaC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vdGVzdGluZy90ZXN0aW5nLmdvDQogICAgKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD10ZXN0aW5n
ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpDQogICAgKyQoTElCR09fQlVJTEQpL25ldC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L2FkZHJzZWxlY3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9jZ29fbGludXguZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9jZ29fcmVzbmV3LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvY2dvX3NvY2tuZXcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9jZ29fdW5peC5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2NvbmYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9kaWFsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvZG5zY2xpZW50LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvZG5zY2xpZW50X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL25ldC9kbnNjb25maWdfdW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2Ruc21z
Zy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2ZkX211dGV4LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9uZXQvZmRfcG9sbF9ydW50aW1lLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQv
ZmRfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9mZF91bml4LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9uZXQvZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2ZpbGVf
dW5peC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2hvb2suZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC9ob29rX2Nsb2V4ZWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ob29r
X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ob3N0cy5nbyAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vbmV0L2ludGVyZmFjZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2ludGVy
ZmFjZV9saW51eC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2lwLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9uZXQvaXByYXdzb2NrLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaXBy
YXdzb2NrX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaXBzb2NrLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9uZXQvaXBzb2NrX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvbG9va3VwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvbG9va3VwX3VuaXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9tYWMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25l
dC9uZXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9uc3MuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC9wYXJzZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3BpcGUuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9wb3J0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQv
cG9ydF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvc2VuZGZpbGVfbGludXguZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9zb2NrX2Nsb2V4ZWMuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC9zb2NrX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvc29ja19w
b3NpeC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3NvY2tvcHRfbGludXguZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL25ldC9zb2Nrb3B0X3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvc29ja29wdGlwX2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvc29ja29w
dGlwX3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvdGNwc29jay5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbmV0L3RjcHNvY2tfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC90Y3Bzb2Nrb3B0X3Bvc2l4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvdGNwc29j
a29wdF91bml4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvdWRwc29jay5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vbmV0L3VkcHNvY2tfcG9zaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC91bml4c29jay5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3VuaXhzb2NrX3Bvc2l4
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvd3JpdGV2X3VuaXguZ28NCiAgICArCSQoY2Fs
bCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RF
RCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5l
dCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9kZWJ1Zy9tYWNoby5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZGVidWcvbWFjaG8vZmF0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9tYWNo
by9maWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9tYWNoby9tYWNoby5nbw0KICAg
ICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWRlYnVnL21hY2hvICReIC1vICRA
ICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAg
KyQoTElCR09fQlVJTEQpL2RlYnVnL3BlLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9w
ZS9maWxlLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9wZS9wZS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZGVidWcvcGUvc2VjdGlvbi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVi
dWcvcGUvc3RyaW5nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9wZS9zeW1ib2wuZ28N
CiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJ
QkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICAr
CSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1kZWJ1Zy9wZSAkXiAtbyAk
QCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAg
ICskKExJQkdPX0JVSUxEKS9hcmNoaXZlL3ppcC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYXJj
aGl2ZS96aXAvcmVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9hcmNoaXZlL3ppcC9yZWdp
c3Rlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vYXJjaGl2ZS96aXAvc3RydWN0LmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9hcmNoaXZlL3ppcC93cml0ZXIuZ28NCiAgICArCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1hcmNoaXZlL3ppcCAkXiAtbyAkQCAmJiBcDQogICAgKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxE
KS9jb21wcmVzcy9nemlwLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9jb21wcmVzcy9nemlwL2d1
bnppcC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3MvZ3ppcC9nemlwLmdvDQogICAg
KwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19F
WFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdP
QykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Y29tcHJlc3MvZ3ppcCAkXiAtbyAk
QCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAg
ICskKExJQkdPX0JVSUxEKS9jb21wcmVzcy96bGliLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9j
b21wcmVzcy96bGliL3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY29tcHJlc3Mvemxp
Yi93cml0ZXIuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jb21w
cmVzcy96bGliICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAk
KEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9lbGxpcHRpYy5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2VsbGlwdGljL2VsbGlwdGljLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8vZWxsaXB0aWMvcDIyNC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Y3J5cHRvL2VsbGlwdGljL3AyNTYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9lbGxp
cHRpYy9wMjU2X2dlbmVyaWMuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAg
JChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD1jcnlwdG8vZWxsaXB0aWMgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29f
ZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvY3J5cHRvL2RzYS5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL2RzYS9kc2EuZ28NCiAgICArCSQoY2FsbCB2
ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkg
JiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdP
X0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8vZHNhICReIC1vICRAICYmIFwNCiAgICAr
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJ
TEQpL2dvL2NvbnN0YW50Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9jb25zdGFudC92YWx1
ZS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0K
ICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2NvbnN0YW50
ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89Lmdv
eCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9yYW5kLm86ICQoTElCR09fRVhUUkFDVEVE
KS9nby9jcnlwdG8vcmFuZC9lYWdhaW4uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9y
YW5kL3JhbmQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9yYW5kL3JhbmRfbGludXgu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9yYW5kL3JhbmRfdW5peC5nbyAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3JhbmQvdXRpbC5nbw0KICAgICsJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQog
ICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9yYW5kICReIC1vICRAICYmIFwNCiAgICArCW9iamNv
cHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2Vu
Y29kaW5nL2FzbjEubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2VuY29kaW5nL2FzbjEvYXNuMS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZW5jb2RpbmcvYXNuMS9jb21tb24uZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2VuY29kaW5nL2FzbjEvbWFyc2hhbC5nbw0KICAgICsJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
DQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPWVuY29kaW5nL2FzbjEgJF4gLW8gJEAgJiYgXA0KICAgICsJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlM
RCkvZGF0YWJhc2Uvc3FsLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9kYXRhYmFzZS9zcWwvY29u
dmVydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGF0YWJhc2Uvc3FsL2N0eHV0aWwuZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2RhdGFiYXNlL3NxbC9zcWwuZ28NCiAgICArCSQoY2FsbCB2ZXJi
b3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYg
XA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dP
RkxBR1MpIC1jIC1mZ28tcGtncGF0aD1kYXRhYmFzZS9zcWwgJF4gLW8gJEAgJiYgXA0KICAgICsJ
b2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlM
RCkvZ28vYXN0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9hc3QvYXN0LmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9nby9hc3QvY29tbWVudG1hcC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z28vYXN0L2ZpbHRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYXN0L2ltcG9ydC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYXN0L3ByaW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9nby9hc3QvcmVzb2x2ZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYXN0L3Njb3BlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9hc3Qvd2Fsay5nbw0KICAgICsJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
DQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2FzdCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5
IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9pbnRl
cm5hbC9wcHJvZi9wcm9maWxlLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC9wcHJv
Zi9wcm9maWxlL2VuY29kZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvcHByb2Yv
cHJvZmlsZS9maWx0ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3Bwcm9mL3By
b2ZpbGUvbGVnYWN5X3Byb2ZpbGUuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ludGVybmFsL3Bw
cm9mL3Byb2ZpbGUvcHJvZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvcHBy
b2YvcHJvZmlsZS9wcm90by5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaW50ZXJuYWwvcHByb2Yv
cHJvZmlsZS9wcnVuZS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5v
dGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRp
ciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PWludGVybmFsL3Bwcm9mL3Byb2ZpbGUgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAu
Z29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvaW1hZ2UvcG5n
Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbWFnZS9wbmcvcGFldGguZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2ltYWdlL3BuZy9yZWFkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2ltYWdl
L3BuZy93cml0ZXIuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIg
JEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1p
bWFnZS9wbmcgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQo
QDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvZGVidWcvZWxmLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9kZWJ1Zy9lbGYvZWxmLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9kZWJ1Zy9l
bGYvZmlsZS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZGVidWcvZWxmL3JlYWRlci5nbw0KICAg
ICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09f
RVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChH
T0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWRlYnVnL2VsZiAkXiAtbyAkQCAm
JiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICsk
KExJQkdPX0JVSUxEKS90ZXh0L3RlbXBsYXRlLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0
L3RlbXBsYXRlL2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vdGV4dC90ZW1wbGF0ZS9leGVj
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby90ZXh0L3RlbXBsYXRlL2Z1bmNzLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby90ZXh0L3RlbXBsYXRlL2hlbHBlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vdGV4dC90ZW1wbGF0ZS9vcHRpb24uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL3RleHQvdGVt
cGxhdGUvdGVtcGxhdGUuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChk
aXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD10ZXh0L3RlbXBsYXRlICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2ludGVybmFsL3RyYWNlLm86
ICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC90cmFjZS9nb3JvdXRpbmVzLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9pbnRlcm5hbC90cmFjZS9vcmRlci5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vaW50ZXJuYWwvdHJhY2UvcGFyc2VyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9pbnRl
cm5hbC90cmFjZS93cml0ZXIuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzog
JChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAg
JChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtn
cGF0aD1pbnRlcm5hbC90cmFjZSAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19l
eHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9jbWQvaW50ZXJuYWwv
YnJvd3Nlci5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY21kL2ludGVybmFsL2Jyb3dzZXIvYnJv
d3Nlci5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNtZC9pbnRl
cm5hbC9icm93c2VyICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAk
QCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2NyeXB0by9yc2EubzogJChMSUJH
T19FWFRSQUNURUQpL2dvL2NyeXB0by9yc2EvcGtjczF2MTUuZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2NyeXB0by9yc2EvcHNzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vcnNhL3Jz
YS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0K
ICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9yc2Eg
JF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294
KSkNCiAgICArJChMSUJHT19CVUlMRCkvaW50ZXJuYWwvdGVzdGVudi5vOiAkKExJQkdPX0VYVFJB
Q1RFRCkvZ28vaW50ZXJuYWwvdGVzdGVudi90ZXN0ZW52LmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9pbnRlcm5hbC90ZXN0ZW52L3Rlc3RlbnZfY2dvLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9p
bnRlcm5hbC90ZXN0ZW52L3Rlc3RlbnZfbm90d2luLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9j
bWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAg
ICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdT
KSAtYyAtZmdvLXBrZ3BhdGg9aW50ZXJuYWwvdGVzdGVudiAkXiAtbyAkQCAmJiBcDQogICAgKwlv
Ympjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxE
KS9jcnlwdG8vZWNkc2EubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by9lY2RzYS9lY2Rz
YS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNk
ICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0K
ICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by9lY2Rz
YSAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9jcnlwdG8veDUwOS9wa2l4Lm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9jcnlwdG8veDUwOS9wa2l4L3BraXguZ28NCiAgICArCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0K
ICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1jcnlwdG8veDUwOS9wa2l4ICReIC1vICRAICYmIFwNCiAgICAr
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJ
TEQpL3J1bnRpbWUvcHByb2YvaW50ZXJuYWwvcHJvdG9wcHJvZi5vOiAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vcnVudGltZS9wcHJvZi9pbnRlcm5hbC9wcm90b3Bwcm9mL3Byb3RvbWVtcHJvZmlsZS5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9wcHJvZi9pbnRlcm5hbC9wcm90b3Bwcm9m
L3Byb3RvcHByb2YuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3Rk
aXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIg
JEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1y
dW50aW1lL3Bwcm9mL2ludGVybmFsL3Byb3RvcHByb2YgJF4gLW8gJEAgJiYgXA0KICAgICsJb2Jq
Y29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkv
Z28vcGFyc2VyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9wYXJzZXIvaW50ZXJmYWNlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9wYXJzZXIvcGFyc2VyLmdvDQogICAgKwkkKGNhbGwg
dmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQp
ICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJH
T19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9Z28vcGFyc2VyICReIC1vICRAICYmIFwNCiAgICAr
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJ
TEQpL2dvL3ByaW50ZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3ByaW50ZXIvbm9kZXMu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3ByaW50ZXIvcHJpbnRlci5nbw0KICAgICsJJChj
YWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFD
VEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQo
TElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL3ByaW50ZXIgJF4gLW8gJEAgJiYgXA0K
ICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJH
T19CVUlMRCkvcnVudGltZS9wcHJvZi5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vcnVudGltZS9w
cHJvZi9wcHJvZi5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRp
ciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAk
QCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPXJ1
bnRpbWUvcHByb2YgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvZ28vZG9jLm86ICQoTElCR09fRVhU
UkFDVEVEKS9nby9nby9kb2MvY29tbWVudC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vZG9j
L2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vZG9jL2V4YW1wbGUuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2dvL2RvYy9leHBvcnRzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9k
b2MvZmlsdGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9kb2MvcmVhZGVyLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9nby9kb2Mvc3lub3BzaXMuZ28NCiAgICArCSQoY2FsbCB2ZXJib3Nl
X2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0K
ICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxB
R1MpIC1jIC1mZ28tcGtncGF0aD1nby9kb2MgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAt
aiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvaHRtbC90
ZW1wbGF0ZS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vaHRtbC90ZW1wbGF0ZS9hdHRyLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL2NvbnRlbnQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2h0bWwvdGVtcGxhdGUvY29udGV4dC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
aHRtbC90ZW1wbGF0ZS9jc3MuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2h0bWwvdGVtcGxhdGUv
ZG9jLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL2Vycm9yLmdvICQoTElC
R09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL2VzY2FwZS5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vaHRtbC90ZW1wbGF0ZS9odG1sLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL3Rl
bXBsYXRlL2pzLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL3RlbXBsYXRl
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9odG1sL3RlbXBsYXRlL3RyYW5zaXRpb24uZ28gJChM
SUJHT19FWFRSQUNURUQpL2dvL2h0bWwvdGVtcGxhdGUvdXJsLmdvDQogICAgKwkkKGNhbGwgdmVy
Ym9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYm
IFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19H
T0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9aHRtbC90ZW1wbGF0ZSAkXiAtbyAkQCAmJiBcDQogICAg
KwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JV
SUxEKS90ZXN0aW5nL2ludGVybmFsL3Rlc3RkZXBzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby90
ZXN0aW5nL2ludGVybmFsL3Rlc3RkZXBzL2RlcHMuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2Nt
ZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAg
ICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1Mp
IC1jIC1mZ28tcGtncGF0aD10ZXN0aW5nL2ludGVybmFsL3Rlc3RkZXBzICReIC1vICRAICYmIFwN
CiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElC
R09fQlVJTEQpL2dvL3R5cGVzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9hcGku
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2Fzc2lnbm1lbnRzLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9nby90eXBlcy9idWlsdGlucy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z28vdHlwZXMvY2FsbC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvY2hlY2suZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2NvbnZlcnNpb25zLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9nby90eXBlcy9kZWNsLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBl
cy9lcnJvcnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2V2YWwuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2V4cHIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
L3R5cGVzL2V4cHJzdHJpbmcuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5cGVzL2luaXRv
cmRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvbGFiZWxzLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9nby90eXBlcy9sb29rdXAuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
L3R5cGVzL21ldGhvZHNldC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvb2JqZWN0
LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9vYmpzZXQuZ28gJChMSUJHT19FWFRS
QUNURUQpL2dvL2dvL3R5cGVzL29wZXJhbmQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL3R5
cGVzL29yZGVyaW5nLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9wYWNrYWdlLmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9wcmVkaWNhdGVzLmdvICQoTElCR09fRVhU
UkFDVEVEKS9nby9nby90eXBlcy9yZXNvbHZlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28v
dHlwZXMvcmV0dXJuLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9nby90eXBlcy9zY29wZS5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvc2VsZWN0aW9uLmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9nby90eXBlcy9zaXplcy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMv
c3RtdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvdHlwZS5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vZ28vdHlwZXMvdHlwZXN0cmluZy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Z28vdHlwZXMvdHlwZXhwci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vdHlwZXMvdW5pdmVy
c2UuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBj
ZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwN
CiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1nby90eXBlcyAk
XiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gp
KQ0KICAgICskKExJQkdPX0JVSUxEKS9nby9mb3JtYXQubzogJChMSUJHT19FWFRSQUNURUQpL2dv
L2dvL2Zvcm1hdC9mb3JtYXQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2Zvcm1hdC9pbnRl
cm5hbC5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2Zvcm1h
dCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5n
b3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9nby9idWlsZC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vZ28vYnVpbGQvYnVpbGQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2J1aWxkL2RvYy5n
byAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vYnVpbGQvcmVhZC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vZ28vYnVpbGQvc3lzbGlzdC5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxp
YmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2Rp
ciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZn
by1wa2dwYXRoPWdvL2J1aWxkICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4
cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL25ldC90ZXh0cHJvdG8u
bzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC90ZXh0cHJvdG8vaGVhZGVyLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9uZXQvdGV4dHByb3RvL3BpcGVsaW5lLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9uZXQvdGV4dHByb3RvL3JlYWRlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L3Rl
eHRwcm90by90ZXh0cHJvdG8uZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC90ZXh0cHJvdG8v
d3JpdGVyLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9bmV0L3Rl
eHRwcm90byAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChA
Oi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9jcnlwdG8veDUwOS5vOiAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vY3J5cHRvL3g1MDkvY2VydF9wb29sLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9jcnlwdG8veDUwOS9wZW1fZGVjcnlwdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L3g1MDkvcGtjczEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5L3BrY3M4Lmdv
ICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8veDUwOS9yb290LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9jcnlwdG8veDUwOS9yb290X2xpbnV4LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9j
cnlwdG8veDUwOS9yb290X3VuaXguZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5
L3NlYzEuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by94NTA5L3ZlcmlmeS5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3g1MDkveDUwOS5nbw0KICAgICsJJChjYWxsIHZlcmJv
c2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBc
DQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09G
TEFHUykgLWMgLWZnby1wa2dwYXRoPWNyeXB0by94NTA5ICReIC1vICRAICYmIFwNCiAgICArCW9i
amNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQp
L2V4cC9wcm94eS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZXhwL3Byb3h5L2RpcmVjdC5nbyAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vZXhwL3Byb3h5L3Blcl9ob3N0LmdvICQoTElCR09fRVhUUkFD
VEVEKS9nby9leHAvcHJveHkvcHJveHkuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2V4cC9wcm94
eS9zb2NrczUuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIg
JEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEAp
ICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1leHAv
cHJveHkgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDou
bz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L25ldC9sZXgvaHR0cGxl
eC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ29sYW5nX29yZy94L25ldC9sZXgvaHR0cGxleC9o
dHRwbGV4LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286ICQobm90ZGlyICRA
KSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1wICQoZGlyICRAKSAm
JiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9dmVuZG9y
L2dvbGFuZ19vcmcveC9uZXQvbGV4L2h0dHBsZXggJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29w
eSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvbG9n
L3N5c2xvZy5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbG9nL3N5c2xvZy9kb2MuZ28gJChMSUJH
T19FWFRSQUNURUQpL2dvL2xvZy9zeXNsb2cvc3lzbG9nLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9sb2cvc3lzbG9nL3N5c2xvZ191bml4LmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08s
bGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1r
ZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9bG9nL3N5c2xvZyAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5n
b19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9uZXQvbWFpbC5v
OiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L21haWwvbWVzc2FnZS5nbw0KICAgICsJJChjYWxs
IHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVE
KSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElC
R09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9tYWlsICReIC1vICRAICYmIFwNCiAgICAr
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJ
TEQpL21pbWUvbXVsdGlwYXJ0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9taW1lL211bHRpcGFy
dC9mb3JtZGF0YS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbWltZS9tdWx0aXBhcnQvbXVsdGlw
YXJ0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9taW1lL211bHRpcGFydC93cml0ZXIuZ28NCiAg
ICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdP
X0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQo
R09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1taW1lL211bHRpcGFydCAkXiAt
byAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0K
ICAgICskKExJQkdPX0JVSUxEKS9jcnlwdG8vdGxzLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9j
cnlwdG8vdGxzL2FsZXJ0LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vdGxzL2NpcGhl
cl9zdWl0ZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2NyeXB0by90bHMvY29tbW9uLmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vdGxzL2Nvbm4uZ28gJChMSUJHT19FWFRSQUNURUQp
L2dvL2NyeXB0by90bHMvaGFuZHNoYWtlX2NsaWVudC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28v
Y3J5cHRvL3Rscy9oYW5kc2hha2VfbWVzc2FnZXMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2Ny
eXB0by90bHMvaGFuZHNoYWtlX3NlcnZlci5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRv
L3Rscy9rZXlfYWdyZWVtZW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9jcnlwdG8vdGxzL3By
Zi5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vY3J5cHRvL3Rscy90aWNrZXQuZ28gJChMSUJHT19F
WFRSQUNURUQpL2dvL2NyeXB0by90bHMvdGxzLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQs
R08sbGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICAr
CW1rZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAt
YyAtZmdvLXBrZ3BhdGg9Y3J5cHRvL3RscyAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1q
IC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9nby9pbnRl
cm5hbC9nY2ltcG9ydGVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9pbnRlcm5hbC9nY2lt
cG9ydGVyL2JpbXBvcnQuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL2dvL2ludGVybmFsL2djaW1w
b3J0ZXIvZXhwb3J0ZGF0YS5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vZ28vaW50ZXJuYWwvZ2Np
bXBvcnRlci9nY2ltcG9ydGVyLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9Z28vaW50ZXJuYWwvZ2NpbXBvcnRlciAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5
IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9nby9p
bnRlcm5hbC9nY2Nnb2ltcG9ydGVyLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9nby9pbnRlcm5h
bC9nY2Nnb2ltcG9ydGVyL2djY2dvaW5zdGFsbGF0aW9uLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9nby9pbnRlcm5hbC9nY2Nnb2ltcG9ydGVyL2ltcG9ydGVyLmdvICQoTElCR09fRVhUUkFDVEVE
KS9nby9nby9pbnRlcm5hbC9nY2Nnb2ltcG9ydGVyL3BhcnNlci5nbw0KICAgICsJJChjYWxsIHZl
cmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAm
JiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09f
R09GTEFHUykgLWMgLWZnby1wa2dwYXRoPWdvL2ludGVybmFsL2djY2dvaW1wb3J0ZXIgJF4gLW8g
JEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAg
ICArJChMSUJHT19CVUlMRCkvZ28vaW1wb3J0ZXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL2dv
L2ltcG9ydGVyL2ltcG9ydGVyLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08sbGliZ286
ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1rZGlyIC1w
ICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBr
Z3BhdGg9Z28vaW1wb3J0ZXIgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhw
b3J0ICRAICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvbmV0L3NtdHAubzogJChM
SUJHT19FWFRSQUNURUQpL2dvL25ldC9zbXRwL2F1dGguZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9zbXRwL3NtdHAuZ28NCiAgICArCSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChu
b3RkaXIgJEApLCBjZCAkKExJQkdPX0VYVFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChk
aXIgJEApICYmIFwNCiAgICArCSQoR09DKSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0
aD1uZXQvc210cCAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAg
JChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9odHRwdHJhY2Uubzog
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2h0dHB0cmFjZS90cmFjZS5nbw0KICAgICsJ
JChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhU
UkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRwL2h0dHB0cmFjZSAkXiAt
byAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0K
ICAgICskKExJQkdPX0JVSUxEKS9uZXQvaHR0cC5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L2h0dHAvY2xpZW50LmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9jb29raWUuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2RvYy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkv
Z28vbmV0L2h0dHAvZmlsZXRyYW5zcG9ydC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0
dHAvZnMuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2gyX2J1bmRsZS5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvaGVhZGVyLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvaHR0cC9odHRwLmdvICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0cC9qYXIuZ28g
JChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL21ldGhvZC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbmV0L2h0dHAvcmVxdWVzdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAv
cmVzcG9uc2UuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL3NlcnZlci5nbyAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvc25pZmYuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9odHRwL3N0YXR1cy5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvdHJhbnNm
ZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL3RyYW5zcG9ydC5nbw0KICAgICsJ
JChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhU
UkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0Mp
ICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRwICReIC1vICRAICYmIFwN
CiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElC
R09fQlVJTEQpL25ldC9odHRwL3Bwcm9mLm86ICQoTElCR09fRVhUUkFDVEVEKS9nby9uZXQvaHR0
cC9wcHJvZi9wcHJvZi5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5v
dGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRp
ciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRo
PW5ldC9odHRwL3Bwcm9mICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9y
dCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL2V4cHZhci5vOiAkKExJQkdP
X0VYVFJBQ1RFRCkvZ28vZXhwdmFyL2V4cHZhci5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21k
LEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAg
KwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAtZmdvLXBrZ3BhdGg9ZXhwdmFyICReIC1vICRA
ICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAg
KyQoTElCR09fQlVJTEQpL25ldC9odHRwL2h0dHB0ZXN0Lm86ICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvaHR0cC9odHRwdGVzdC9odHRwdGVzdC5nbyAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0
L2h0dHAvaHR0cHRlc3QvcmVjb3JkZXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRw
L2h0dHB0ZXN0L3NlcnZlci5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAk
KG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAk
KGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPW5ldC9odHRwL2h0dHB0ZXN0ICReIC1vICRAICYmIFwNCiAgICArCW9iamNvcHkgLWogLmdv
X2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJTEQpL25ldC9odHRwL2Nn
aS5vOiAkKExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvY2dpL2NoaWxkLmdvICQoTElCR09f
RVhUUkFDVEVEKS9nby9uZXQvaHR0cC9jZ2kvaG9zdC5nbw0KICAgICsJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQog
ICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRwL2NnaSAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpj
b3B5IC1qIC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9u
ZXQvaHR0cC9jb29raWVqYXIubzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2Nvb2tp
ZWphci9qYXIuZ28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9odHRwL2Nvb2tpZWphci9wdW55
Y29kZS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCks
IGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYg
XA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRw
L2Nvb2tpZWphciAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1qIC5nb19leHBvcnQgJEAg
JChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9odHRwdXRpbC5vOiAk
KExJQkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvaHR0cHV0aWwvZHVtcC5nbyAkKExJQkdPX0VY
VFJBQ1RFRCkvZ28vbmV0L2h0dHAvaHR0cHV0aWwvaHR0cHV0aWwuZ28gJChMSUJHT19FWFRSQUNU
RUQpL2dvL25ldC9odHRwL2h0dHB1dGlsL3BlcnNpc3QuZ28gJChMSUJHT19FWFRSQUNURUQpL2dv
L25ldC9odHRwL2h0dHB1dGlsL3JldmVyc2Vwcm94eS5nbw0KICAgICsJJChjYWxsIHZlcmJvc2Vf
Y21kLEdPLGxpYmdvOiAkKG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQog
ICAgKwlta2RpciAtcCAkKGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFH
UykgLWMgLWZnby1wa2dwYXRoPW5ldC9odHRwL2h0dHB1dGlsICReIC1vICRAICYmIFwNCiAgICAr
CW9iamNvcHkgLWogLmdvX2V4cG9ydCAkQCAkKEA6Lm89LmdveCkpDQogICAgKyQoTElCR09fQlVJ
TEQpL25ldC9ycGMubzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ycGMvY2xpZW50LmdvICQo
TElCR09fRVhUUkFDVEVEKS9nby9uZXQvcnBjL2RlYnVnLmdvICQoTElCR09fRVhUUkFDVEVEKS9n
by9uZXQvcnBjL3NlcnZlci5nbw0KICAgICsJJChjYWxsIHZlcmJvc2VfY21kLEdPLGxpYmdvOiAk
KG5vdGRpciAkQCksIGNkICQoTElCR09fRVhUUkFDVEVEKSAmJiBcDQogICAgKwlta2RpciAtcCAk
KGRpciAkQCkgJiYgXA0KICAgICsJJChHT0MpICQoTElCR09fR09GTEFHUykgLWMgLWZnby1wa2dw
YXRoPW5ldC9ycGMgJF4gLW8gJEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRA
ICQoQDoubz0uZ294KSkNCiAgICArJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvZmNnaS5vOiAkKExJ
QkdPX0VYVFJBQ1RFRCkvZ28vbmV0L2h0dHAvZmNnaS9jaGlsZC5nbyAkKExJQkdPX0VYVFJBQ1RF
RCkvZ28vbmV0L2h0dHAvZmNnaS9mY2dpLmdvDQogICAgKwkkKGNhbGwgdmVyYm9zZV9jbWQsR08s
bGliZ286ICQobm90ZGlyICRAKSwgY2QgJChMSUJHT19FWFRSQUNURUQpICYmIFwNCiAgICArCW1r
ZGlyIC1wICQoZGlyICRAKSAmJiBcDQogICAgKwkkKEdPQykgJChMSUJHT19HT0ZMQUdTKSAtYyAt
ZmdvLXBrZ3BhdGg9bmV0L2h0dHAvZmNnaSAkXiAtbyAkQCAmJiBcDQogICAgKwlvYmpjb3B5IC1q
IC5nb19leHBvcnQgJEAgJChAOi5vPS5nb3gpKQ0KICAgICskKExJQkdPX0JVSUxEKS9uZXQvcnBj
L2pzb25ycGMubzogJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ycGMvanNvbnJwYy9jbGllbnQu
Z28gJChMSUJHT19FWFRSQUNURUQpL2dvL25ldC9ycGMvanNvbnJwYy9zZXJ2ZXIuZ28NCiAgICAr
CSQoY2FsbCB2ZXJib3NlX2NtZCxHTyxsaWJnbzogJChub3RkaXIgJEApLCBjZCAkKExJQkdPX0VY
VFJBQ1RFRCkgJiYgXA0KICAgICsJbWtkaXIgLXAgJChkaXIgJEApICYmIFwNCiAgICArCSQoR09D
KSAkKExJQkdPX0dPRkxBR1MpIC1jIC1mZ28tcGtncGF0aD1uZXQvcnBjL2pzb25ycGMgJF4gLW8g
JEAgJiYgXA0KICAgICsJb2JqY29weSAtaiAuZ29fZXhwb3J0ICRAICQoQDoubz0uZ294KSkNCiAg
ICArDQogICAgK0xJQkdPX09CSlMgKz0gJChMSUJHT19CVUlMRCkvcnVudGltZS9pbnRlcm5hbC9h
dG9taWMub1wNCiAgICArCSQoTElCR09fQlVJTEQpL3J1bnRpbWUvaW50ZXJuYWwvc3lzLm8gXA0K
ICAgICsJJChMSUJHT19CVUlMRCkvZXJyb3JzLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvaW50
ZXJuYWwvcmFjZS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2NyeXB0by9pbnRlcm5hbC9jaXBo
ZXJody5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL3VuaWNvZGUvdXRmOC5vIFwNCiAgICArCSQo
TElCR09fQlVJTEQpL2NyeXB0by9zdWJ0bGUubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9jb250
YWluZXIvbGlzdC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL21hdGgubyBcDQogICAgKwkkKExJ
QkdPX0JVSUxEKS9jb250YWluZXIvcmluZy5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2dvbGFu
Z19vcmcveC9jcnlwdG8vY3VydmUyNTUxOS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2ludGVy
bmFsL25ldHRyYWNlLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvc3luYy9hdG9taWMubyBcDQog
ICAgKwkkKExJQkdPX0JVSUxEKS91bmljb2RlLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZW5j
b2RpbmcubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS91bmljb2RlL3V0ZjE2Lm8gXA0KICAgICsJ
JChMSUJHT19CVUlMRCkvaW1hZ2UvY29sb3IubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9ydW50
aW1lLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvaW1hZ2UvY29sb3IvcGFsZXR0ZS5vIFwNCiAg
ICArCSQoTElCR09fQlVJTEQpL2dvbGFuZ19vcmcveC9jcnlwdG8vcG9seTEzMDUubyBcDQogICAg
KwkkKExJQkdPX0JVSUxEKS9tYXRoL2NtcGx4Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvc3lu
Yy5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL3N0cmNvbnYubyBcDQogICAgKwkkKExJQkdPX0JV
SUxEKS9pby5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2ludGVybmFsL3NpbmdsZWZsaWdodC5v
IFwNCiAgICArCSQoTElCR09fQlVJTEQpL21hdGgvcmFuZC5vIFwNCiAgICArCSQoTElCR09fQlVJ
TEQpL3N5c2NhbGwubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9oYXNoLm8gXA0KICAgICsJJChM
SUJHT19CVUlMRCkvcnVudGltZS90cmFjZS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL3N0cmlu
Z3MubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9ieXRlcy5vIFwNCiAgICArCSQoTElCR09fQlVJ
TEQpL2NyeXB0by9jaXBoZXIubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9oYXNoL2NyYzMyLm8g
XA0KICAgICsJJChMSUJHT19CVUlMRCkvaGFzaC9mbnYubyBcDQogICAgKwkkKExJQkdPX0JVSUxE
KS9jcnlwdG8vaG1hYy5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2hhc2gvYWRsZXIzMi5vIFwN
CiAgICArCSQoTElCR09fQlVJTEQpL2hhc2gvY3JjNjQubyBcDQogICAgKwkkKExJQkdPX0JVSUxE
KS9jcnlwdG8ubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9yZWZsZWN0Lm8gXA0KICAgICsJJChM
SUJHT19CVUlMRCkvZW5jb2RpbmcvYmFzZTY0Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvY3J5
cHRvL3JjNC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2VuY29kaW5nL2FzY2lpODUubyBcDQog
ICAgKwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vYWVzLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkv
Y3J5cHRvL21kNS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2NyeXB0by9zaGE1MTIubyBcDQog
ICAgKwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vc2hhMjU2Lm8gXA0KICAgICsJJChMSUJHT19CVUlM
RCkvY3J5cHRvL3NoYTEubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvdGV4
dC90cmFuc2Zvcm0ubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9idWZpby5vIFwNCiAgICArCSQo
TElCR09fQlVJTEQpL3RleHQvdGFid3JpdGVyLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZW5j
b2RpbmcvYmFzZTMyLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvcGF0aC5vIFwNCiAgICArCSQo
TElCR09fQlVJTEQpL2h0bWwubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9pbWFnZS5vIFwNCiAg
ICArCSQoTElCR09fQlVJTEQpL2ltYWdlL2ludGVybmFsL2ltYWdldXRpbC5vIFwNCiAgICArCSQo
TElCR09fQlVJTEQpL2ltYWdlL2pwZWcubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9pbWFnZS9k
cmF3Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvYmluYXJ5Lm8gXA0KICAgICsJ
JChMSUJHT19CVUlMRCkvc29ydC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2ludGVybmFsL3N5
c2NhbGwvdW5peC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2V4cC90ZXJtaW5hbC5vIFwNCiAg
ICArCSQoTElCR09fQlVJTEQpL3RpbWUubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9jb21wcmVz
cy9iemlwMi5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2NvbnRhaW5lci9oZWFwLm8gXA0KICAg
ICsJJChMSUJHT19CVUlMRCkvcmVnZXhwL3N5bnRheC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQp
L2VuY29kaW5nL3BlbS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2NyeXB0by9kZXMubyBcDQog
ICAgKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvY3J5cHRvL2NoYWNoYTIwcG9seTEzMDUv
aW50ZXJuYWwvY2hhY2hhMjAubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gv
Y3J5cHRvL2NoYWNoYTIwcG9seTEzMDUubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9vcy5vIFwN
CiAgICArCSQoTElCR09fQlVJTEQpL3JlZ2V4cC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL3J1
bnRpbWUvZGVidWcubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9mbXQubyBcDQogICAgKwkkKExJ
QkdPX0JVSUxEKS9wYXRoL2ZpbGVwYXRoLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvb3Mvc2ln
bmFsLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvaW5kZXgvc3VmZml4YXJyYXkubyBcDQogICAg
KwkkKExJQkdPX0JVSUxEKS9pby9pb3V0aWwubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9tYXRo
L2JpZy5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2RlYnVnL3BsYW45b2JqLm8gXA0KICAgICsJ
JChMSUJHT19CVUlMRCkvZGVidWcvZHdhcmYubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9jb21w
cmVzcy9sencubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9hcmNoaXZlL3Rhci5vIFwNCiAgICAr
CSQoTElCR09fQlVJTEQpL2VuY29kaW5nL2hleC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2Vu
Y29kaW5nL3htbC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2NvbXByZXNzL2ZsYXRlLm8gXA0K
ICAgICsJJChMSUJHT19CVUlMRCkvZW5jb2RpbmcvY3N2Lm8gXA0KICAgICsJJChMSUJHT19CVUlM
RCkvZ29sYW5nX29yZy94L25ldC9odHRwMi9ocGFjay5vIFwNCiAgICArCSQoTElCR09fQlVJTEQp
L2VuY29kaW5nL2dvYi5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL25ldC91cmwubyBcDQogICAg
KwkkKExJQkdPX0JVSUxEKS9jb250ZXh0Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZW5jb2Rp
bmcvanNvbi5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2xvZy5vIFwNCiAgICArCSQoTElCR09f
QlVJTEQpL2RlYnVnL2dvc3ltLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94
L25ldC9pZG5hLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZ29sYW5nX29yZy94L3RleHQvdW5p
Y29kZS9ub3JtLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvbWltZS5vIFwNCiAgICArCSQoTElC
R09fQlVJTEQpL2dvbGFuZ19vcmcveC90ZXh0L3dpZHRoLm8gXA0KICAgICsJJChMSUJHT19CVUlM
RCkvbWltZS9xdW90ZWRwcmludGFibGUubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9uZXQvaHR0
cC9pbnRlcm5hbC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2ZsYWcubyBcDQogICAgKwkkKExJ
QkdPX0JVSUxEKS9nby90b2tlbi5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL3RleHQvdGVtcGxh
dGUvcGFyc2UubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS90ZXh0L3NjYW5uZXIubyBcDQogICAg
KwkkKExJQkdPX0JVSUxEKS9vcy91c2VyLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvbmV0L2lu
dGVybmFsL3NvY2t0ZXN0Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZ28vc2Nhbm5lci5vIFwN
CiAgICArCSQoTElCR09fQlVJTEQpL2ltYWdlL2dpZi5vIFwNCiAgICArCSQoTElCR09fQlVJTEQp
L3Rlc3RpbmcvcXVpY2subyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9vcy9leGVjLm8gXA0KICAg
ICsJJChMSUJHT19CVUlMRCkvZGF0YWJhc2Uvc3FsL2RyaXZlci5vIFwNCiAgICArCSQoTElCR09f
QlVJTEQpL3Rlc3RpbmcvaW90ZXN0Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvdGVzdGluZy5v
IFwNCiAgICArCSQoTElCR09fQlVJTEQpL25ldC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2Rl
YnVnL21hY2hvLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZGVidWcvcGUubyBcDQogICAgKwkk
KExJQkdPX0JVSUxEKS9hcmNoaXZlL3ppcC5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2NvbXBy
ZXNzL2d6aXAubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9jb21wcmVzcy96bGliLm8gXA0KICAg
ICsJJChMSUJHT19CVUlMRCkvY3J5cHRvL2VsbGlwdGljLm8gXA0KICAgICsJJChMSUJHT19CVUlM
RCkvY3J5cHRvL2RzYS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2dvL2NvbnN0YW50Lm8gXA0K
ICAgICsJJChMSUJHT19CVUlMRCkvY3J5cHRvL3JhbmQubyBcDQogICAgKwkkKExJQkdPX0JVSUxE
KS9lbmNvZGluZy9hc24xLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZGF0YWJhc2Uvc3FsLm8g
XA0KICAgICsJJChMSUJHT19CVUlMRCkvZ28vYXN0Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkv
aW50ZXJuYWwvcHByb2YvcHJvZmlsZS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2ltYWdlL3Bu
Zy5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2RlYnVnL2VsZi5vIFwNCiAgICArCSQoTElCR09f
QlVJTEQpL3RleHQvdGVtcGxhdGUubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9pbnRlcm5hbC90
cmFjZS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2NtZC9pbnRlcm5hbC9icm93c2VyLm8gXA0K
ICAgICsJJChMSUJHT19CVUlMRCkvY3J5cHRvL3JzYS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQp
L2ludGVybmFsL3Rlc3RlbnYubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9jcnlwdG8vZWNkc2Eu
byBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9jcnlwdG8veDUwOS9wa2l4Lm8gXA0KICAgICsJJChM
SUJHT19CVUlMRCkvcnVudGltZS9wcHJvZi9pbnRlcm5hbC9wcm90b3Bwcm9mLm8gXA0KICAgICsJ
JChMSUJHT19CVUlMRCkvZ28vcGFyc2VyLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZ28vcHJp
bnRlci5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL3J1bnRpbWUvcHByb2YubyBcDQogICAgKwkk
KExJQkdPX0JVSUxEKS9nby9kb2MubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9odG1sL3RlbXBs
YXRlLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvdGVzdGluZy9pbnRlcm5hbC90ZXN0ZGVwcy5v
IFwNCiAgICArCSQoTElCR09fQlVJTEQpL2dvL3R5cGVzLm8gXA0KICAgICsJJChMSUJHT19CVUlM
RCkvZ28vZm9ybWF0Lm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZ28vYnVpbGQubyBcDQogICAg
KwkkKExJQkdPX0JVSUxEKS9uZXQvdGV4dHByb3RvLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkv
Y3J5cHRvL3g1MDkubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9leHAvcHJveHkubyBcDQogICAg
KwkkKExJQkdPX0JVSUxEKS9nb2xhbmdfb3JnL3gvbmV0L2xleC9odHRwbGV4Lm8gXA0KICAgICsJ
JChMSUJHT19CVUlMRCkvbG9nL3N5c2xvZy5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL25ldC9t
YWlsLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvbWltZS9tdWx0aXBhcnQubyBcDQogICAgKwkk
KExJQkdPX0JVSUxEKS9jcnlwdG8vdGxzLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvZ28vaW50
ZXJuYWwvZ2NpbXBvcnRlci5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL2dvL2ludGVybmFsL2dj
Y2dvaW1wb3J0ZXIubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9nby9pbXBvcnRlci5vIFwNCiAg
ICArCSQoTElCR09fQlVJTEQpL25ldC9zbXRwLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvbmV0
L2h0dHAvaHR0cHRyYWNlLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvbmV0L2h0dHAubyBcDQog
ICAgKwkkKExJQkdPX0JVSUxEKS9uZXQvaHR0cC9wcHJvZi5vIFwNCiAgICArCSQoTElCR09fQlVJ
TEQpL2V4cHZhci5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL25ldC9odHRwL2h0dHB0ZXN0Lm8g
XA0KICAgICsJJChMSUJHT19CVUlMRCkvbmV0L2h0dHAvY2dpLm8gXA0KICAgICsJJChMSUJHT19C
VUlMRCkvbmV0L2h0dHAvY29va2llamFyLm8gXA0KICAgICsJJChMSUJHT19CVUlMRCkvbmV0L2h0
dHAvaHR0cHV0aWwubyBcDQogICAgKwkkKExJQkdPX0JVSUxEKS9uZXQvcnBjLm8gXA0KICAgICsJ
JChMSUJHT19CVUlMRCkvbmV0L2h0dHAvZmNnaS5vIFwNCiAgICArCSQoTElCR09fQlVJTEQpL25l
dC9ycGMvanNvbnJwYy5vIFwNCiAgICArDQogICAgLS0gDQogICAgMi4xNy4xDQogICAgDQogICAg
DQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlv
cy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0
dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 14:53:14 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 14:53:14 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iEx33-0004vQ-7J; Mon, 30 Sep 2019 14:53:13 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iEx32-0004vK-3K
 for minios-devel@lists.xenproject.org; Mon, 30 Sep 2019 14:53:12 +0000
X-Inumbo-ID: 04abc150-e392-11e9-bf31-bc764e2007e4
Received: from mailer1.neclab.eu (unknown [195.37.70.40])
 by localhost (Halon) with ESMTPS
 id 04abc150-e392-11e9-bf31-bc764e2007e4;
 Mon, 30 Sep 2019 14:53:10 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer1.neclab.eu (Postfix) with ESMTP id 18610105762;
 Mon, 30 Sep 2019 16:53:09 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (netlab.nec.de)
Received: from mailer1.neclab.eu ([127.0.0.1])
 by localhost (atlas-a.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id S6dihY_i9t7r; Mon, 30 Sep 2019 16:53:08 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer1.neclab.eu (Postfix) with ESMTPS id E91CF104FD7
 for <minios-devel@lists.xenproject.org>; Mon, 30 Sep 2019 16:53:08 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 16:53:08 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-5-simon.kuenzer@neclab.eu>
 <de345b50-8193-5962-ac74-d9a0c23a576e@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <8851675e-32d1-084b-369e-d130ce85b5e1@neclab.eu>
Date: Mon, 30 Sep 2019 16:53:08 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <de345b50-8193-5962-ac74-d9a0c23a576e@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 4/5] lib/devfs: Automount
 through inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

T24gMjcuMDkuMTkgMTk6MDAsIFNoYXJhbiBTYW50aGFuYW0gd3JvdGU6Cj4gSGVsbG8gU2ltb24s
Cj4gCj4gUGxlYXNlIGZpbmQgdGhlIGNvbW1lbnQgaW5saW5lLgo+IAo+IFRoYW5rcyAmIFJlZ2Fy
ZHMKPiBTaGFyYW4KPiAKPiBPbiA5LzI0LzE5IDEyOjA3IFBNLCBTaW1vbiBLdWVuemVyIHdyb3Rl
Ogo+PiBUaGUgYXV0b21vdW50IG9wdGlvbiBvZiBkZXZmcyB0byBgL2RldmAgaXMgbW92ZWQgdG8g
YW4gaW5pdHRhYiBlbnRyeS4KPj4KPj4gU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2lt
b24ua3VlbnplckBuZWNsYWIuZXU+Cj4+IC0tLQo+PiDCoCBsaWIvZGV2ZnMvZGV2ZnNfdm5vcHMu
Y8KgwqDCoMKgwqDCoMKgwqDCoCB8IDI5ICsrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tCj4+
IMKgIGxpYi9kZXZmcy9pbmNsdWRlL2RldmZzL2RldmljZS5oIHzCoCAzICsrKwo+PiDCoCAyIGZp
bGVzIGNoYW5nZWQsIDIzIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYg
LS1naXQgYS9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYyBiL2xpYi9kZXZmcy9kZXZmc192bm9wcy5j
Cj4+IGluZGV4IGQ4NzJlNjIyLi4yNzhhMWE2MSAxMDA2NDQKPj4gLS0tIGEvbGliL2RldmZzL2Rl
dmZzX3Zub3BzLmMKPj4gKysrIGIvbGliL2RldmZzL2RldmZzX3Zub3BzLmMKPj4gQEAgLTU5LDcg
KzU5LDggQEAKPj4gwqAgI2luY2x1ZGUgPHZmc2NvcmUvZnMuaD4KPj4gLSNpbmNsdWRlIDx1ay9j
dG9ycy5oPgo+PiArI2luY2x1ZGUgPHVrL2luaXQuaD4KPj4gKyNpbmNsdWRlIDx1ay9wcmludC5o
Pgo+PiDCoCAjaW5jbHVkZSAiZGV2ZnMuaCIKPj4gwqAgI2luY2x1ZGUgPGRldmZzL2RldmljZS5o
Pgo+PiBAQCAtMzEwLDIxICszMTEsMzEgQEAgc3RhdGljIHN0cnVjdCB2ZnNjb3JlX2ZzX3R5cGUg
ZnNfZGV2ZnMgPSB7Cj4+IMKgIFVLX0ZTX1JFR0lTVEVSKGZzX2RldmZzKTsKPj4gLV9fY29uc3Ry
dWN0b3JfcHJpbygxMDEpIHN0YXRpYyB2b2lkIGRldmZzX2luaXQodm9pZCkKPj4gLXsKPj4gwqAg
I2lmZGVmIENPTkZJR19MSUJERVZGU19BVVRPTU9VTlQKPj4gK3N0YXRpYyBpbnQgZGV2ZnNfYXV0
b21vdW50KHZvaWQpCj4+ICt7Cj4+IMKgwqDCoMKgwqAgaW50IHJldDsKPj4gK8KgwqDCoCB1a19w
cl9pbmZvKCJNb3VudCBkZXZmcyB0byAvZGV2Li4uIik7Cj4+ICsKPj4gK8KgwqDCoCAvKgo+PiAr
wqDCoMKgwqAgKiBUcnkgdG8gY3JlYXRlIHRhcmdldCBtb3VudHBvaW50IGAvZGV2YC4gSWYgY3Jl
YXRpb24gZmFpbHMKPj4gK8KgwqDCoMKgICogYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cywgd2Ug
YXJlIGNvbnRpbnVpbmcuCj4+ICvCoMKgwqDCoCAqLwo+PiDCoMKgwqDCoMKgIHJldCA9wqAgbWtk
aXIoIi9kZXYiLCBTX0lSV1hVKTsKPj4gLcKgwqDCoCBpZiAocmV0ICE9IDApIHsKPj4gLcKgwqDC
oMKgwqDCoMKgIHVrX3ByX2RlYnVnKCJGYWlsZWQgdG8gbWtkaXIgL2RldiBpbiAlc1xuIiwgX19m
dW5jX18pOwo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDCoMKgIGlmIChyZXQgIT0g
MCAmJiBlcnJubyAhPSBFRVhJU1QpIHsKPj4gK8KgwqDCoMKgwqDCoMKgIHVrX3ByX2VycigiRmFp
bGVkIHRvIGNyZWF0ZSAvZGV2OiAlZFxuIiwgZXJybm8pOwo+PiArwqDCoMKgwqDCoMKgwqAgcmV0
dXJuIC0xOwo+PiDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoCByZXQgPSBtb3VudCgiIiwgIi9k
ZXYiLCAiZGV2ZnMiLCAwLCBOVUxMKTsKPj4gwqDCoMKgwqDCoCBpZiAocmV0ICE9IDApIHsKPj4g
LcKgwqDCoMKgwqDCoMKgIHVrX3ByX2RlYnVnKCJGYWlsZWQgdG8gbW91bnQgL2RldiBhcyBkZXZm
cyBpbiAlc1xuIiwgX19mdW5jX18pOwo+PiAtwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+PiArwqDC
oMKgwqDCoMKgwqAgdWtfcHJfZXJyKCJGYWlsZWQgdG8gbW91bnQgZGV2ZnMgdG8gL2RldjogJWRc
biIsIGVycm5vKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtMTsKPj4gwqDCoMKgwqDCoCB9
Cj4+IC0jZW5kaWYKPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiDCoCB9Cj4+ICsKPj4gK3Vr
X3Jvb3Rmc19pbml0Y2FsbF9wcmlvKGRldmZzX2F1dG9tb3VudCwgMSk7Cj4+ICsjZW5kaWYKPj4g
ZGlmZiAtLWdpdCBhL2xpYi9kZXZmcy9pbmNsdWRlL2RldmZzL2RldmljZS5oIAo+PiBiL2xpYi9k
ZXZmcy9pbmNsdWRlL2RldmZzL2RldmljZS5oCj4+IGluZGV4IDI5ODg5ZTRlLi41NjllZjYwYiAx
MDA2NDQKPj4gLS0tIGEvbGliL2RldmZzL2luY2x1ZGUvZGV2ZnMvZGV2aWNlLmgKPj4gKysrIGIv
bGliL2RldmZzL2luY2x1ZGUvZGV2ZnMvZGV2aWNlLmgKPj4gQEAgLTM0LDYgKzM0LDcgQEAKPj4g
wqAgI2RlZmluZSBfREVWSUNFX0gKPj4gwqAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgo+PiArI2lu
Y2x1ZGUgPHVrL2luaXQuaD4KPj4gwqAgI2luY2x1ZGUgPHZmc2NvcmUvdWlvLmg+Cj4+IEBAIC0y
MDgsNCArMjA5LDYgQEAgaW50IGRldmljZV9kZXN0cm95X2xvY2tlZChzdHJ1Y3QgZGV2aWNlICpk
ZXYpOwo+PiDCoCB2b2lkIGRldmljZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIGNv
bnN0IGNoYXIgKm5hbWUsIGludCAKPj4gZmxhZ3MpOwo+PiDCoCB2b2lkIHJlYWRfcGFydGl0aW9u
X3RhYmxlKHN0cnVjdCBkZXZpY2UgKmRldmljZSk7Cj4+ICsjZGVmaW5lIGRldmZzX2luaXRjYWxs
KGZuKSB1a19saWJfaW5pdGNhbGwoZm4pCj4gV2h5IGRvIHdlIG5lZWQgdGhpcz8gV2UgY291bGQg
YWRkIGRvY3VtZW50YXRpb24gb2YgdGhpcyBBUEkuCgpJIG5lZWRlZCBzb21ldGhpbmcgdG8gaGF2
ZSBpbml0Y2FsbHMgbGlrZSByb290ZnMtMSB3aGljaCBpcyB0aGUgCmxpYl9pbml0Y2FsbCBhY3R1
YWxseS4gQXMgd2Ugc3Bva2Ugb2ZmbGluZSB0aGlzIG1heSBiZSBzdGlsbCBhIGJhZCBpZGVhIApi
ZWNhdXNlIG9mIHBvdGVudGlhbCBkZXBlbmRlbmN5IGlzc3Vlcy4gQXMgd2UgZGlzY3Vzc2VkIGl0
IHdvdWxkIGJlIApiZXR0ZXIgdG8gcHV0IHRoYXQgaW50byB0aGUgcm9vdGZzIHN0YWdlIGJ1dCBt
b3ZlIG1vdW50aW5nIG9mIHJvb3QgZnJvbSAKMCB0byAxIG9yIDIgaW4gdGhhdCBwcmlvcml0eSBi
YW5kLgoKSSB3aWxsIGFsc28gcHV0IGFkZCBhIGNvbW1lbnQgd2hhdCB0aGlzIGRlZmluZSBpcyBm
b3IuCgo+PiArCj4+IMKgICNlbmRpZiAvKiAhX0RFVklDRV9IICovCj4gCj4gX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBNaW5pb3MtZGV2ZWwgbWFpbGlu
ZyBsaXN0Cj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4gaHR0cHM6Ly9saXN0
cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbAoKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxp
bmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54
ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 15:32:08 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 15:32:08 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iExeh-0001Yf-DQ; Mon, 30 Sep 2019 15:32:07 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iExef-0001YW-HA
 for minios-devel@lists.xenproject.org; Mon, 30 Sep 2019 15:32:05 +0000
X-Inumbo-ID: 7301f5d4-e397-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id 7301f5d4-e397-11e9-bf31-bc764e2007e4;
 Mon, 30 Sep 2019 15:32:02 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id BC670F201C;
 Mon, 30 Sep 2019 17:32:01 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id t4Ue2QKTwzvs; Mon, 30 Sep 2019 17:32:01 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 8B39CF201B
 for <minios-devel@lists.xenproject.org>; Mon, 30 Sep 2019 17:31:59 +0200 (CEST)
Received: from [10.1.2.235] (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 17:31:59 +0200
To: Sharan Santhanam <sharan.santhanam@neclab.eu>,
 <minios-devel@lists.xenproject.org>
References: <20190924100716.3462-1-simon.kuenzer@neclab.eu>
 <20190924100716.3462-4-simon.kuenzer@neclab.eu>
 <44f7632b-fa75-45f0-13b6-77156d8f7518@neclab.eu>
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
Message-ID: <0e6ad8eb-d183-88b1-7d2b-bffe9a6b2ef4@neclab.eu>
Date: Mon, 30 Sep 2019 17:31:58 +0200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:60.0)
 Gecko/20100101 Thunderbird/60.9.0
MIME-Version: 1.0
In-Reply-To: <44f7632b-fa75-45f0-13b6-77156d8f7518@neclab.eu>
Content-Language: en-US
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: Re: [Minios-devel] [UNIKRAFT PATCH v3 3/5] lib/vfscore: Automount
 option
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"; Format="flowed"
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

SGV5IFNoYXJhbiwKCnlvdSBhcmUgcmlnaHQsIEtDb25maWcgaXMgYWRkaW5nIHJhbWZzIHRvIHRo
ZSB2ZnNjb3JlIG9wdGlvbiBsaXN0IAphbHRob3VnaCB0aGlzIHdhcyBuZXZlciBpbnRlbmRlZCB0
aGlzIHdheS4gVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBoYXZlIApubyBjbGVhbiB0ZXJtaW5hdGlv
biBmb3IgYSBtZW51Y29uZmlnIGVudHJ5IChsaWtlIGl0IGV4aXN0cyBmb3IgYG1lbnVgIAphbmQg
YGNob2ljZWApLiBFdmVyeXRoaW5nIHRoYXQgaXMgcGFyc2VkIGFmdGVyd2FyZHMgYW5kIGRpcmVj
dGx5IGRlcGVuZHMgCm9uIHRoZSBtZW51Y29uZmlnIGl0ZW0sIHdpbGwgYmUgcGxhY2VkIHVuZGVy
IHRoZSBzdWJtZW51IChlaXRoZXIgdmlhIApgZGVwZW5kcyBvbmAgb3IgYGlmYC1zdGF0ZW1lbnRz
KS4gVGhlIGRpdmlkZS9zdWJtZW51IHRlcm1pbmF0aW9uIGlzIG9ubHkgCmFjaGlldmVkIHdpdGgg
YSBjb25maWcgaXRlbSB0aGF0IGlzIG5vdCBkZXBlbmRpbmcgb24gdGhlIG1lbnVjb25maWcgb3B0
aW9uLgoKSSBhZ3JlZSB0aGF0IHdlIG5lZWQgYSBkaWZmZXJlbnQgc29sdXRpb24gYWx0aG91Z2gg
dGhlIGFsdGVybmF0aXZlcyBkbyAKbm90IGxvb2sgdmVyeSBuaWNlLiBNeSBzdWdnZXN0aW9uIHRv
IHlvdXIgc29sdXRpb24gaXMgbm90IHRvIHVzZSAKYHZpc2libGVgIGtleXdvcmQgYW5kIGtlZXAg
dGhlIGBpZmAgc3RhdGVtZW50IGFyb3VuZCB5b3VyIGBtZW51YCBpdGVtLiAKVGhpcyBhdm9pZHMg
dGhhdCB1bnVzZWQgb3B0aW9ucyBhcmUgZW5kaW5nIHVwIGluIHRoZSBjb25maWd1cmF0aW9uIGZp
bGUuIApJIHdpbGwgaW1wbGVtZW50IHRoaXMgaW4gdGhlIHY0LiBMZXQgbWUga25vdyB3aGF0IHlv
dSB0aGluay4KClRoYW5rcywKClNpbW9uCgpPbiAyNy4wOS4xOSAxODo1OSwgU2hhcmFuIFNhbnRo
YW5hbSB3cm90ZToKPiBIZWxsbyBTaW1vbiwKPiAKPiBUaGUgcGF0Y2ggc2VlbXMgdG8gZnVuY3Rp
b25hbGx5IGNvcnJlY3QgYnV0IHRoZXJlIHNlZW1zIHRvIHByb2JsZW0gaW4gCj4gdGhlIGRpc3Bs
YXkgb2YgUmFtZnMgY29uZmlnIG9wdGlvbnMuIFNpbmNlIHRoZSBSQU1GUyBjb25maWcgZGVwZW5k
cyBvbiAKPiB0aGUgTElCVkZTQ09SRSBhbmQgdGhlIExJQlZGU0NPUkUgaXMgYSBtZW51Y29uZmln
LCB0aGUgUkFNRlMgCj4gY29uZmlndXJhdGlvbiBpcyBzdWNrZWQgaW4gYXMgYSBvcHRpb24gd2l0
aGluIExJQlZGU0NPUkUgbWVudWNvbmZpZy4gCj4gVGhpcyBiZWhhdmlvciBvZiBSQU1GUyBpcyBk
aWZmZXJlbnQgZnJvbSB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlc3Qgb2YgdGhlIAo+IGZpbGVzeXN0
ZW0gbGlrZSA5UHMgYW5kIGRldmZzLgo+IAo+IE15IHN1Z2dlc3Rpb24gd291bGQgYmUgdG8gY29u
dmVydCB0aGUgbWVudWNvbmZpZyB0byBtZW51IGFzIHRoZXJlIGlzIAo+IGRlZmluaXRlIHdheSBv
ZiBkZWZpbmluZyB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgbWVudS4gVGhlIGFubm95YW5jZSAK
PiB3aXRoIHRoaXMgb3B0aW9uIHdvdWxkIGJlIGl0IGNyZWF0ZXMgYSBzZXBhcmF0ZSBwcm9tcHQu
Cj4gCj4gQSBzbmlwcGV0IG9mIGhvdyBJIHdvdWxkIHJlc3RydWN0dXJlIGl0Lgo+IAo+ICDCoGNv
bmZpZyBMSUJWRlNDT1JFCj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBib29sICJ2ZnNjb3JlOiBWRlMg
Q29yZSBJbnRlcmZhY2UiCj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBkZWZhdWx0IG4KPiAgwqDCoMKg
wqDCoMKgwqDCoMKgIHNlbGVjdCBMSUJOT0xJQkMgaWYgIUhBVkVfTElCQwo+ICDCoMKgwqDCoMKg
wqDCoMKgwqAgc2VsZWN0IExJQlVLREVCVUcKPiAgwqDCoMKgwqDCoMKgwqDCoMKgIHNlbGVjdCBM
SUJVS0xPQ0sKPiAKPiBtZW51ICJWRlMgT3B0aW9ucyIKPiAgwqDCoMKgwqDCoMKgwqDCoCB2aXNp
YmxlIGlmIExJQlZGU0NPUkUKPiAKPiAgwqDCoMKgwqAgIyBXZSBjYW4gYWRkIHZmc2NvcmUgb3B0
aW9ucyBoZXJlCj4gCj4gZW5kbWVudQo+IAo+IEkgb2JzZXJ2ZWQgdGhlcmUgYXJlIGFsc28gY2hl
Y2twYXRjaCBlcnJvci4KPiAKPiBUaGFua3MgJiBSZWdhcmRzCj4gCj4gU2hhcmFuCj4gCj4gT24g
OS8yNC8xOSAxMjowNyBQTSwgU2ltb24gS3VlbnplciB3cm90ZToKPj4gTW92ZXMgdGhlIG9wdGlv
biBvZiBhdXRvbWF0aWNhbGx5IGEgcm9vdGZzIHRvIGxpYi92ZnNjb3JlLiBUaGlzCj4+IGZlYXR1
cmUgaXMgbm90IG9ubHkgdXNlZnVsIGZvciBpbml0aWFsaXppbmcgZGV2ZnMuIExpYnJhcnkgcGFy
YW1ldGVycwo+PiB0byBpbmZsdWVuY2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJlIHByb3ZpZGVk
Lgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xh
Yi5ldT4KPj4gLS0tCj4+IMKgIGxpYi9kZXZmcy9Db25maWcudWvCoMKgwqDCoCB8wqAgOSArKy0t
Cj4+IMKgIGxpYi9kZXZmcy9kZXZmc192bm9wcy5jIHzCoCA4ICstLS0KPj4gwqAgbGliL3Zmc2Nv
cmUvQ29uZmlnLnVrwqDCoCB8IDc2ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+
IMKgIGxpYi92ZnNjb3JlL01ha2VmaWxlLnVrIHzCoCA1ICsrKwo+PiDCoCBsaWIvdmZzY29yZS9y
b290ZnMuY8KgwqDCoCB8IDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrCj4+IMKgIDUgZmlsZXMgY2hhbmdlZCwgMTg0IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9u
cygtKQo+PiDCoCBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3Zmc2NvcmUvcm9vdGZzLmMKPj4KPj4g
ZGlmZiAtLWdpdCBhL2xpYi9kZXZmcy9Db25maWcudWsgYi9saWIvZGV2ZnMvQ29uZmlnLnVrCj4+
IGluZGV4IGUzOGE2MTZlLi42ZjIxYzAxYyAxMDA2NDQKPj4gLS0tIGEvbGliL2RldmZzL0NvbmZp
Zy51awo+PiArKysgYi9saWIvZGV2ZnMvQ29uZmlnLnVrCj4+IEBAIC0xLDEwICsxLDExIEBACj4+
IC1jb25maWcgTElCREVWRlMKPj4gK21lbnVjb25maWcgTElCREVWRlMKPj4gwqDCoMKgwqDCoCBi
b29sICJkZXZmczogZGV2ZnMgZmlsZSBzeXN0ZW0iCj4+IMKgwqDCoMKgwqAgZGVmYXVsdCBuCj4+
IMKgwqDCoMKgwqAgZGVwZW5kcyBvbiBMSUJWRlNDT1JFCj4+ICsKPj4gwqAgaWYgTElCREVWRlMK
Pj4gLcKgwqDCoMKgwqDCoMKgIGNvbmZpZyBMSUJERVZGU19VU0VfUkFNRlMKPj4gLcKgwqDCoMKg
wqDCoMKgIGJvb2wgIlVzZSByYW1mcyBhcyByb290Igo+PiArwqDCoMKgIGNvbmZpZyBMSUJERVZG
U19BVVRPTU9VTlQKPj4gK8KgwqDCoMKgwqDCoMKgIGJvb2wgIk1vdW50IC9kZXYgZHVyaW5nIGJv
b3QiCj4+ICvCoMKgwqAgZGVwZW5kcyBvbiBMSUJWRlNDT1JFX0FVVE9NT1VOVF9ST09URlMKPj4g
wqDCoMKgwqDCoMKgwqDCoMKgIGRlZmF1bHQgbgo+PiAtwqDCoMKgwqDCoMKgwqAgc2VsZWN0IExJ
QlJBTUZTCj4+IMKgIGVuZGlmCj4+IGRpZmYgLS1naXQgYS9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMu
YyBiL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jCj4+IGluZGV4IDExYTNlYTA1Li5kODcyZTYyMiAx
MDA2NDQKPj4gLS0tIGEvbGliL2RldmZzL2RldmZzX3Zub3BzLmMKPj4gKysrIGIvbGliL2RldmZz
L2RldmZzX3Zub3BzLmMKPj4gQEAgLTMxMiwxNSArMzEyLDkgQEAgVUtfRlNfUkVHSVNURVIoZnNf
ZGV2ZnMpOwo+PiDCoCBfX2NvbnN0cnVjdG9yX3ByaW8oMTAxKSBzdGF0aWMgdm9pZCBkZXZmc19p
bml0KHZvaWQpCj4+IMKgIHsKPj4gLSNpZmRlZiBDT05GSUdfTElCREVWRlNfVVNFX1JBTUZTCj4+
ICsjaWZkZWYgQ09ORklHX0xJQkRFVkZTX0FVVE9NT1VOVAo+PiDCoMKgwqDCoMKgIGludCByZXQ7
Cj4+IC3CoMKgwqAgcmV0ID0gbW91bnQoIiIsICIvIiwgInJhbWZzIiwgMCwgTlVMTCk7Cj4+IC3C
oMKgwqAgaWYgKHJldCAhPSAwKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCB1a19wcl9kZWJ1ZygiRmFp
bGVkIHRvIG1vdW50IC8gaW4gJXNcbiIsIF9fZnVuY19fKTsKPj4gLcKgwqDCoMKgwqDCoMKgIHJl
dHVybjsKPj4gLcKgwqDCoCB9Cj4+IC0KPj4gwqDCoMKgwqDCoCByZXQgPcKgIG1rZGlyKCIvZGV2
IiwgU19JUldYVSk7Cj4+IMKgwqDCoMKgwqAgaWYgKHJldCAhPSAwKSB7Cj4+IMKgwqDCoMKgwqDC
oMKgwqDCoCB1a19wcl9kZWJ1ZygiRmFpbGVkIHRvIG1rZGlyIC9kZXYgaW4gJXNcbiIsIF9fZnVu
Y19fKTsKPj4gZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL0NvbmZpZy51ayBiL2xpYi92ZnNjb3Jl
L0NvbmZpZy51awo+PiBpbmRleCA1ZGViN2QwNC4uMTZmZmUwNDMgMTAwNjQ0Cj4+IC0tLSBhL2xp
Yi92ZnNjb3JlL0NvbmZpZy51awo+PiArKysgYi9saWIvdmZzY29yZS9Db25maWcudWsKPj4gQEAg
LTEzLDQgKzEzLDgwIEBAIGNvbmZpZyBMSUJWRlNDT1JFX1BJUEVfU0laRV9PUkRFUgo+PiDCoMKg
wqDCoMKgIGhlbHAKPj4gwqDCoMKgwqDCoMKgwqDCoMKgIFRoZSBzaXplIG9mIHRoZSBpbnRlcm5h
bCBidWZmZXIgZm9yIGFub255bW91cyBwaXBlcyBpcyAyXm9yZGVyLgo+PiArbWVudWNvbmZpZyBM
SUJWRlNDT1JFX0FVVE9NT1VOVF9ST09URlMKPj4gK2Jvb2wgIkF1dG9tYXRpY2FseSBtb3VudCBh
IHJvb3QgZmlsZXN5c3l0ZW0gKC8pIgo+PiArZGVmYXVsdCBuCj4+ICtoZWxwCj4+ICvCoMKgwqAg
QXV0b21hdGljYWxseSBtb3VudHMgJy8nIGR1cmluZyBib290LiBJZiBgbGlidWtsaWJwYXJhbWAg
aXMKPj4gK8KgwqDCoCBjb21waWxlZCBpbiwgdGhlIGRlZmF1bHQgcm9vdCBmaWxlc3lzdGVtIGFu
ZCBtb3VudCBvcHRpb25zIGNhbgo+PiArwqDCoMKgIGJlIGNoYW5nZWQgd2l0aCB0aGUgZm9sbG93
aW5nIGxpYnJhcnkgcGFyYW1ldGVyczoKPj4gK8KgwqDCoCAndmZzLnJvb3RmcycsICd2ZnMucm9v
dGRldicsICd2ZnMucm9vdGZsYWdzJywgYW5kICd2ZnMucm9vdG9wdHMnCj4+ICsKPj4gK2lmIExJ
QlZGU0NPUkVfQVVUT01PVU5UX1JPT1RGUwo+PiArwqDCoMKgIGNob2ljZSBMSUJWRlNDT1JFX1JP
T1RGUwo+PiArwqDCoMKgIHByb21wdCAiRGVmYXVsdCByb290IGZpbGVzeXN0ZW0iCj4+ICvCoMKg
wqAgZGVmYXVsdCBMSUJWRlNDT1JFX1JPT1RGU19SQU1GUwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC
oCBjb25maWcgTElCVkZTQ09SRV9ST09URlNfUkFNRlMKPj4gK8KgwqDCoMKgwqDCoMKgIGJvb2wg
IlJhbUZTIgo+PiArwqDCoMKgwqDCoMKgwqAgc2VsZWN0IExJQlJBTUZTCj4+ICsKPj4gK8KgwqDC
oMKgwqDCoMKgIGNvbmZpZyBMSUJWRlNDT1JFX1JPT1RGU185UEZTCj4+ICvCoMKgwqDCoMKgwqDC
oCBib29sICI5UEZTIgo+PiArwqDCoMKgwqDCoMKgwqAgc2VsZWN0IExJQlVLOVAKPj4gK8KgwqDC
oMKgwqDCoMKgIHNlbGVjdCBMSUI5UEZTCj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGNvbmZpZyBM
SUJWRlNDT1JFX1JPT1RGU19DVVNUT00KPj4gK8KgwqDCoMKgwqDCoMKgIGJvb2wgIkN1c3RvbSBh
cmd1bWVudCIKPj4gK8KgwqDCoMKgwqDCoMKgIGhlbHAKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg
wqAgUGxlYXNlIHNldCBMSUJWRlNDT1JFX1JPT1RGU19DVVNUT01fQVJHCj4+ICvCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgIHRvIGEgZmlsZXN5c3RlbSBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQKPj4g
K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXMgZGVmYXVsdC4KPj4gK8KgwqDCoCBlbmRjaG9pY2UK
Pj4gKwo+PiArwqDCoMKgIGNvbmZpZyBMSUJWRlNDT1JFX1JPT1RGU19DVVNUT01fQVJHCj4+ICvC
oMKgwqAgc3RyaW5nICJEZWZhdWx0IGN1c3RvbSByb290IGZpbGVzeXN0ZW0iCj4+ICvCoMKgwqAg
ZGVmYXVsdCAiIgo+PiArwqDCoMKgIGRlcGVuZHMgb24gTElCVkZTQ09SRV9ST09URlNfQ1VTVE9N
Cj4+ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoMKgwqAgQ3VzdG9tIG5hbWUgb2YgYSBmaWxl
c3lzdGVtIHRvIG1vdW50IChlLmcuLCByYW1mcywKPj4gK8KgwqDCoMKgwqDCoMKgIDlwZnMpLiBN
YWtlIHN1cmUgdGhhdCB0aGUgc3BlY2lmaWVkIGZpbGVzeXN0ZW0KPj4gK8KgwqDCoMKgwqDCoMKg
IGlzIGF2YWlsYWJsZSBmb3IgbGlidmZzY29yZS4KPj4gKwo+PiArwqDCoMKgICMgSGlkZGVuIGNv
bmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQgZ2V0cyBhdXRvbWF0aWNhbGx5IGZpbGxlZAo+PiArwqDC
oMKgICMgd2l0aCB0aGUgc2VsZWN0ZWQgZmlsZXN5c3RlbSBuYW1lCj4+ICvCoMKgwqAgY29uZmln
IExJQlZGU0NPUkVfUk9PVEZTCj4+ICvCoMKgwqAgc3RyaW5nCj4+ICvCoMKgwqAgZGVmYXVsdCAi
cmFtZnMiIGlmIExJQlZGU0NPUkVfUk9PVEZTX1JBTUZTCj4+ICvCoMKgwqAgZGVmYXVsdCAiOXBm
cyIgaWYgTElCVkZTQ09SRV9ST09URlNfOVBGUwo+PiArwqDCoMKgIGRlZmF1bHQgTElCVkZTQ09S
RV9ST09URlNfQ1VTVE9NX0FSRyBpZiBMSUJWRlNDT1JFX1JPT1RGU19DVVNUT00KPj4gK8KgwqDC
oCBkZWZhdWx0ICIiCj4+ICsKPj4gK8KgwqDCoCAjIFRoZSByb290IGRldmljZSBvcHRpb24gaXMg
aGlkZGVuIGZvciBSYW1GUyBhbmQgOVBGUwo+PiArwqDCoMKgIGNvbmZpZyBMSUJWRlNDT1JFX1JP
T1RERVYKPj4gK8KgwqDCoCBzdHJpbmcgIkRlZmF1bHQgcm9vdCBkZXZpY2UiCj4+ICvCoMKgwqAg
ZGVwZW5kcyBvbiAhTElCVkZTQ09SRV9ST09URlNfUkFNRlMgJiYgIUxJQlZGU0NPUkVfUk9PVEZT
XzlQRlMKPj4gK8KgwqDCoCBkZWZhdWx0ICIiCj4+ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDC
oMKgwqAgRGV2aWNlIHRvIG1vdW50IHRoZSBmaWxlc3lzdGVtIGZyb20uIERlcGVuZGluZyBvbiB0
aGUKPj4gK8KgwqDCoMKgwqDCoMKgIHNlbGVjdGVkIGZpbGVzeXN0ZW0sIHRoaXMgb3B0aW9uIG1h
eSBub3QgYmUgcmVxdWlyZWQuCj4+ICsKPj4gK8KgwqDCoCAjIFRoZSByb290IGZsYWdzIGlzIGhp
ZGRlbiBmb3IgUmFtRlMKPj4gK8KgwqDCoCBjb25maWcgTElCVkZTQ09SRV9ST09URkxBR1MKPj4g
K8KgwqDCoCBoZXggIkRlZmF1bHQgcm9vdCBtb3VudCBmbGFncyIKPj4gK8KgwqDCoCBkZXBlbmRz
IG9uICFMSUJWRlNDT1JFX1JPT1RGU19SQU1GUwo+PiArwqDCoMKgIGRlZmF1bHQgMHgwCj4+ICvC
oMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoMKgwqAgTW91bnQgZmxhZ3MuCj4+ICsKPj4gK8KgwqDC
oCAjIFRoZSByb290IG9wdGlvbnMgYXJlIGhpZGRlbiBmb3IgUmFtRlMKPj4gK8KgwqDCoCBjb25m
aWcgTElCVkZTQ09SRV9ST09UT1BUUwo+PiArwqDCoMKgIHN0cmluZyAiRGVmYXVsdCByb290IG1v
dW50IG9wdGlvbnMiCj4+ICvCoMKgwqAgZGVwZW5kcyBvbiAhTElCVkZTQ09SRV9ST09URlNfUkFN
RlMKPj4gK8KgwqDCoCBkZWZhdWx0ICIiCj4+ICvCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoMKg
wqAgVXN1YWxseSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgbW91bnQKPj4g
K8KgwqDCoMKgwqDCoMKgIG9wdGlvbnMgdGhhdCBhcmUgZGlyZWN0bHkgaW50ZXJwcmV0ZWQgYnkg
dGhlIHRhcmdldAo+PiArwqDCoMKgwqDCoMKgwqAgZmlsZXN5c3RlbS4KPj4gK2VuZGlmCj4+IMKg
IGVuZGlmCj4+IGRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9NYWtlZmlsZS51ayBiL2xpYi92ZnNj
b3JlL01ha2VmaWxlLnVrCj4+IGluZGV4IDFlNWZjMTE0Li44NzI2OTYwNiAxMDA2NDQKPj4gLS0t
IGEvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKPj4gKysrIGIvbGliL3Zmc2NvcmUvTWFrZWZpbGUu
dWsKPj4gQEAgLTEsNSArMSw4IEBACj4+IMKgICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGlidmZz
Y29yZSwkKENPTkZJR19MSUJWRlNDT1JFKSkpCj4+ICsjIFJlZ2lzdGVyIHRvIHVrbGlicGFyYW0s
IHNldHMgInZmcyIgYXMgcGFyYW1ldGVyIHByZWZpeCAodmZzLiopCj4+ICskKGV2YWwgJChjYWxs
IGFkZGxpYl9wYXJhbXByZWZpeCxsaWJ2ZnNjb3JlLHZmcykpCj4+ICsKPj4gwqAgQ0lOQ0xVREVT
LXkgKz0gLUkkKExJQlZGU0NPUkVfQkFTRSkvaW5jbHVkZQo+PiDCoCBMSUJWRlNDT1JFX0NGTEFH
Uy0kKGNhbGwgZ2NjX3ZlcnNpb25fZ2UsOCwwKSArPSAtV25vLWNhc3QtZnVuY3Rpb24tdHlwZQo+
PiBAQCAtMTksNiArMjIsOCBAQCBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFT
RSkvc3Vicl91aW8uYwo+PiDCoCBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFT
RSkvcGlwZS5jCj4+IMKgIExJQlZGU0NPUkVfUElQRV9GTEFHUy15ICs9IC1Xbm8tY2FzdC1mdW5j
dGlvbi10eXBlCj4+IMKgIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9l
eHRyYS5sZAo+PiArTElCVkZTQ09SRV9TUkNTLSQoQ09ORklHX0xJQlZGU0NPUkVfQVVUT01PVU5U
X1JPT1RGUykgKz0gXAo+PiArwqDCoMKgICQoTElCVkZTQ09SRV9CQVNFKS9yb290ZnMuYwo+PiDC
oCBVS19QUk9WSURFRF9TWVNDQUxMUy0kKENPTkZJR19MSUJWRlNDT1JFKSArPSB3cml0ZXYtMwo+
PiBkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvcm9vdGZzLmMgYi9saWIvdmZzY29yZS9yb290ZnMu
Ywo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAwMDAwMDAwMC4uZWUzY2ZmODAKPj4g
LS0tIC9kZXYvbnVsbAo+PiArKysgYi9saWIvdmZzY29yZS9yb290ZnMuYwo+PiBAQCAtMCwwICsx
LDk3IEBACj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCj4+
ICsvKgo+PiArICogTW91bnQgVkZTIHJvb3QKPj4gKyAqCj4+ICsgKiBBdXRob3JzOiBTaW1vbiBL
dWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KPj4gKyAqCj4+ICsgKgo+PiArICogQ29w
eXJpZ2h0IChjKSAyMDE5LCBORUMgTGFib3JhdG9yaWVzIEV1cm9wZSBHbWJILCBORUMgQ29ycG9y
YXRpb24uCj4+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KPj4gKyAqCj4+ICsgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKPj4gKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwo+PiArICogYXJlIG1ldDoKPj4gKyAqCj4+ICsgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAo+PiArICrCoMKgwqAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Lgo+PiArICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKPj4gKyAqwqDCoMKgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiAKPj4gdGhlCj4+ICsgKsKg
wqDCoCBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgCj4+IGRpc3RyaWJ1dGlvbi4KPj4gKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNv
cHlyaWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKPj4gKyAqwqDCoMKgIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCAK
Pj4gZnJvbQo+PiArICrCoMKgwqAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KPj4gKyAqCj4+ICsgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgCj4+IENPTlRSSUJVVE9SUyAiQVMgSVMi
Cj4+ICsgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCAKPj4gVE8sIFRIRQo+PiArICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAo+PiBQVVJQT1NF
Cj4+ICsgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgT1IgCj4+IENPTlRSSUJVVE9SUyBCRQo+PiArICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgo+PiArICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKPj4gKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiAKPj4gQlVTSU5FU1MKPj4gKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCAKPj4gV0hFVEhF
UiBJTgo+PiArICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIAo+PiBPVEhFUldJU0UpCj4+ICsgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiAKPj4gQURWSVNFRCBPRiBU
SEUKPj4gKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo+PiArICoKPj4gKyAqIFRISVMg
SEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElOIEFOWSBXQVkuCj4+ICsg
Ki8KPj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+PiArI2luY2x1ZGUgPHVrL2NvbmZpZy5oPgo+PiAr
I2luY2x1ZGUgPHVrL2FyY2gvdHlwZXMuaD4KPj4gKyNpbmNsdWRlIDx1ay9saWJwYXJhbS5oPgo+
PiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4+ICsjaW5jbHVkZSA8c3lzL21vdW50Lmg+Cj4+ICsj
aW5jbHVkZSA8dWsvaW5pdC5oPgo+PiArCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqcm9vdGZzwqDC
oCA9IENPTkZJR19MSUJWRlNDT1JFX1JPT1RGUzsKPj4gKwo+PiArI2lmbmRlZiBDT05GSUdfTElC
VkZTQ09SRV9ST09UREVWCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqcm9vdGRldsKgID0gIiI7Cj4+
ICsjZWxzZQo+PiArc3RhdGljIGNvbnN0IGNoYXIgKnJvb3RkZXbCoCA9IENPTkZJR19MSUJWRlND
T1JFX1JPT1RERVY7Cj4+ICsjZW5kaWYKPj4gKwo+PiArI2lmbmRlZiBDT05GSUdfTElCVkZTQ09S
RV9ST09UT1BUUwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKnJvb3RvcHRzID0gIiI7Cj4+ICsjZWxz
ZQo+PiArc3RhdGljIGNvbnN0IGNoYXIgKnJvb3RvcHRzID0gQ09ORklHX0xJQlZGU0NPUkVfUk9P
VE9QVFM7Cj4+ICsjZW5kaWYKPj4gKwo+PiArI2lmbmRlZiBDT05GSUdfTElCVkZTQ09SRV9ST09U
RkxBR1MKPj4gK3N0YXRpYyBfX3U2NCByb290ZmxhZ3PCoMKgwqDCoMKgID0gMHgwOwo+PiArI2Vs
c2UKPj4gK3N0YXRpYyBfX3U2NCByb290ZmxhZ3PCoMKgwqDCoMKgID0gKF9fdTY0KSBDT05GSUdf
TElCVkZTQ09SRV9ST09URkxBR1M7Cj4+ICsjZW5kaWYKPj4gKwo+PiArVUtfTElCX1BBUkFNX1NU
Uihyb290ZnMpOwo+PiArVUtfTElCX1BBUkFNX1NUUihyb290ZGV2KTsKPj4gK1VLX0xJQl9QQVJB
TV9TVFIocm9vdG9wdHMpOwo+PiArVUtfTElCX1BBUkFNKHJvb3RmbGFncywgX191NjQpOwo+PiAr
Cj4+ICtzdGF0aWMgaW50IHZmc2NvcmVfcm9vdGZzKHZvaWQpCj4+ICt7Cj4+ICvCoMKgwqAgLyoK
Pj4gK8KgwqDCoMKgICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSAnLycK
Pj4gK8KgwqDCoMKgICogTk9URTogQW55IGFkZGl0aW9uYWwgc3ViIG1vdW50IHBvaW50cyAobGlr
ZSAnL2Rldicgd2l0aCBkZXZmcykKPj4gK8KgwqDCoMKgICogaGF2ZSB0byBiZSBtb3VudGVkIGxh
dGVyLgo+PiArwqDCoMKgwqAgKi8KPj4gK8KgwqDCoCBpZiAoIXJvb3RmcyB8fCByb290ZnNbMF0g
PT0gJ1wwJykgewo+PiArwqDCoMKgwqDCoMKgwqAgdWtfcHJfY3JpdCgiUGFyYW1ldGVyICd2ZnMu
cm9vdGZzJyBpcyBpbnZhbGlkXG4iKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAtMTsKPj4g
K8KgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoCB1a19wcl9pbmZvKCJNb3VudCAlcyB0byAvLi4uXG4i
LCByb290ZnMpOwo+PiArwqDCoMKgIGlmIChtb3VudChyb290ZGV2LCAiLyIsIHJvb3Rmcywgcm9v
dGZsYWdzLCByb290b3B0cykgIT0gMCkgewo+PiArwqDCoMKgwqDCoMKgwqAgdWtfcHJfY3JpdCgi
RmFpbGVkIHRvIG1vdW50IC86ICVkXG4iLCBlcnJubyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1
cm4gLTE7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDCoMKgICogVE9E
TzogQWx0ZXJuYXRpdmVseSB3ZSBjb3VsZCBleHRyYWN0IGFuIGFyY2hpdmUgZm91bmQKPj4gK8Kg
wqDCoMKgICogYXMgaW5pdHJkIHRvIGEgcmFtZnMgJy8nIGlmIHdlIGhhdmUgZ290IGZzbmFtZSAn
aW5pdHJkJwo+PiArwqDCoMKgwqAgKi8KPj4gKwo+PiArwqDCoMKgIHJldHVybiAwOwo+PiArfQo+
PiArCj4+ICt1a19yb290ZnNfaW5pdGNhbGxfcHJpbyh2ZnNjb3JlX3Jvb3RmcywgMCk7Cj4gCj4g
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBNaW5pb3Mt
ZGV2ZWwgbWFpbGluZyBsaXN0Cj4gTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4g
aHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZl
bAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTWluaW9z
LWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0
cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 15:42:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 15:42:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iExos-0002NW-8i; Mon, 30 Sep 2019 15:42:38 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iExoq-0002NR-My
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 15:42:36 +0000
X-Inumbo-ID: ebe05b7a-e398-11e9-b588-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id ebe05b7a-e398-11e9-b588-bc764e2007e4;
 Mon, 30 Sep 2019 15:42:35 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 01CF2F201C;
 Mon, 30 Sep 2019 17:42:34 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id 4rsOUCez_WSI; Mon, 30 Sep 2019 17:42:33 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id C561DF201B;
 Mon, 30 Sep 2019 17:42:29 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 17:42:29 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 30 Sep 2019 17:42:20 +0200
Message-ID: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 0/5] VFS initialization to vfscore
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBzZXJpZXMgbW92ZXMgbW91bnRpbmcgdGhlIHJvb3QgZmlsZXN5c3RlbSBzdHJ1
Y3R1cmUgdG8gVW5pa3JhZnQKaW5pdCB0YWJsZSBjYWxscy4gVGhlIG1haW4gcm9vdCBmaWxlc3lz
dGVtIGlzIG1vdW50ZWQgd2l0aCBsaWIvdmZzY29yZSBhbmQKbGlicmFyeSBwYXJhbWV0ZXJzIGFy
ZSBhdmFpbGFibGUgdG8gaW5mbHVlbmNlIHRoZSByb290ZnMgbW91bnQgYmVoYXZpb3IKZnJvbSB0
aGUga2VybmVsIGNvbW1hbmQgbGluZS4KClByZXZpb3VzbHksIHRoZSBvcHRpb24gdG8gYXV0b21h
dGljYWxseSBtb3VudCBhIHJhbWZzIHRvIC8gd2FzIGhpZGRlbi4KSXQgb25seSBhcHBlYXJlZCB3
aGVuIGRldmZzIHdhcyBzZWxlY3RlZC4gVGhpcyBzZXJpZXMgaXMgYWxzbyBtYWtpbmcgZGV2ZnMK
YW5kIHJhbWZzIHBlcm1hbmVudGx5IHZpc2libGUgaW4gdGhlIG1lbnUgdG8gc2ltcGxpZnkgdGhl
IHVzYWdlLgoKQ2hhbmdlcyBzaW5jZSB2MToKIC0gQWRvcHQgdG8gbGF0ZXN0IHN0YWdpbmcgc3Rh
dGUKIC0gQWRkIGFiaWxpdHkgdG8gY29uZmlndXJlIHJvb3QgZnMgd2l0aCBrZXJuZWwgcGFyYW1l
dGVycwoKQ2hhbmNlcyBzaW5jZSB2MjoKIC0gTW92ZSByb290ZnMgY29kZSB0byB2ZnNjb3JlCiAg
ICh0aGlzIGltcGxpZWQgYWxzbyB0aGUgY2hhbmdlIG9mIHRoZSBzZXJpZXMgdGl0bGUpCiAtIElu
dGVncmF0ZSB0byBpbml0IHRhYmxlIG1lY2hhbmlzbQogLSBCdWdmaXg6IG1vdW50IG5ldmVyIGZh
aWxzIHdoZW4gZnNuYW1lIGlzIHdyb25nCiAtIEFkZCBjb21waWxlciBmbGFnIHRvIGlnbm9yZSB3
YXJuaW5ncyBjYXVzZWQgYnkgVkZTIHN0dWJzCgpDaGFuY2VzIHNpbmNlIHYzOgogLSBVc2UgbWVu
dSBpbnN0ZWFkIG9mIG1lbnVjb25maWcgdG8gZm9yIHZmc2NvcmUgbGlicmFyeS4gVGhpcwogICBp
cyBkb25lIHRvIGF2b2lkIG1pc3BsYWNlbWVudCBvZiBkZXBlbmRpbmcgZmlsZXN5c3RlbXMgaW50
bwogICB0aGUgbGlicmFyeSBzdWJtZW51CiAtIFJlbW92ZSBzdXBwcmVzc2VkIHdhcm5pbmcgb24g
YGluY29tcGF0aWJsZSBmdW5jdGlvbiBwb2ludGVyCiAgIHR5cGVjYXN0YCBmb3IgdGhlIHBpcGUu
YyBmaWxlIGluIHZmc2NvcmUuIFRoaXMgaXMgZ29pbmcgdG8KICAgYmUgY292ZXJlZCBieSB0aGUg
bGlicmFyeS13aWRlIHdhcm5pbmcgc3VwcHJlc3Npb24uCgpTaW1vbiBLdWVuemVyICg1KToKICBs
aWIvdmZzY29yZSwgbGliLypmczogSWdub3JlIGluY29tcGF0aWJsZSBmdW5jdGlvbiBwb2ludGVy
IHR5cGVjYXN0CiAgbGliL3Zmc2NvcmU6IGZzX2dldGZzKCk6IFJldHVybiBOVUxMIG9uIGZhaWxl
ZCBsb29rdXAKICBsaWIvdmZzY29yZTogQXV0b21vdW50IG9wdGlvbgogIGxpYi9kZXZmczogQXV0
b21vdW50IHRocm91Z2ggaW5pdHRhYgogIGxpYi91a3N3cmFuZDogQ2xlYW4tdXAgZGV2ZnMgaW50
ZWdyYXRpb24KCiBsaWIvOXBmcy9NYWtlZmlsZS51ayAgICAgICAgICAgICAgfCAgMiArCiBsaWIv
ZGV2ZnMvQ29uZmlnLnVrICAgICAgICAgICAgICAgfCAgOSArLS0KIGxpYi9kZXZmcy9NYWtlZmls
ZS51ayAgICAgICAgICAgICB8ICAyICsKIGxpYi9kZXZmcy9kZXZmc192bm9wcy5jICAgICAgICAg
ICB8IDM0ICsrKysrKy0tLS0tCiBsaWIvZGV2ZnMvaW5jbHVkZS9kZXZmcy9kZXZpY2UuaCAgfCAg
OSArKysKIGxpYi9yYW1mcy9NYWtlZmlsZS51ayAgICAgICAgICAgICB8ICAyICsKIGxpYi91a3N3
cmFuZC9Db25maWcudWsgICAgICAgICAgICB8ICA1ICstCiBsaWIvdWtzd3JhbmQvTWFrZWZpbGUu
dWsgICAgICAgICAgfCAgNCArLQogbGliL3Vrc3dyYW5kL3ttd2NfZGV2LmMgPT4gZGV2LmN9IHwg
MjMgKysrKysrLS0KIGxpYi92ZnNjb3JlL0NvbmZpZy51ayAgICAgICAgICAgICB8IDgxICsrKysr
KysrKysrKysrKysrKysrKysrKystCiBsaWIvdmZzY29yZS9NYWtlZmlsZS51ayAgICAgICAgICAg
fCAgOCArKy0KIGxpYi92ZnNjb3JlL21vdW50LmMgICAgICAgICAgICAgICB8IDEzICsrKy0tCiBs
aWIvdmZzY29yZS9yb290ZnMuYyAgICAgICAgICAgICAgfCA5NyArKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrCiAxMyBmaWxlcyBjaGFuZ2VkLCAyNTIgaW5zZXJ0aW9ucygrKSwgMzcgZGVs
ZXRpb25zKC0pCiByZW5hbWUgbGliL3Vrc3dyYW5kL3ttd2NfZGV2LmMgPT4gZGV2LmN9ICg4OSUp
CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3Zmc2NvcmUvcm9vdGZzLmMKCi0tIAoyLjIwLjEKCgpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2
ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczov
L2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 15:42:43 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 15:42:43 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iExox-0002O0-Au; Mon, 30 Sep 2019 15:42:43 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iExov-0002Ns-MQ
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 15:42:41 +0000
X-Inumbo-ID: ee30c09a-e398-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id ee30c09a-e398-11e9-bf31-bc764e2007e4;
 Mon, 30 Sep 2019 15:42:38 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 045FCF201C;
 Mon, 30 Sep 2019 17:42:38 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id LGhQPk2uZ7Su; Mon, 30 Sep 2019 17:42:37 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id CD582F201B;
 Mon, 30 Sep 2019 17:42:33 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 17:42:30 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 30 Sep 2019 17:42:21 +0200
Message-ID: <20190930154225.15652-2-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
References: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 1/5] lib/vfscore,
 lib/*fs: Ignore incompatible function pointer typecast
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

Vm5vZGUgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgd2l0aCBmdW5jdGlvbiBjYWxscy4gSW4g
b3JkZXIgdG8gc3R1Ygpzb21lIG9mIHRoZSBvcGVyYXRpb25zIGEgbm8tb3AgZnVuY3Rpb24gaXMg
ZmlsbGVkIHRvIHRob3NlIHN0cnVjdAplbnRyaWVzLiBTdWNoIGEgc3R1YiBmdW5jdGlvbiBqdXN0
IHJldHVybnMgYW4gZXJyb3IgY29kZSB0aGF0IHRlbGxzIHRoYXQKdGhlIGZ1bmN0aW9uYWxpdHkg
aXMgbm90IGltcGxlbWVudGVkLiBIb3dldmVyLCB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlCm1heSBu
b3QgbWF0Y2ggd2l0aCB0aGUgc3R1YmJlZCB2bm9kZSBvcGVyYXRpb24sIHNvIGl0IGlzIHR5cGVj
YXN0ZWQuCkdDQyA4IGludHJvZHVjZXMgYSB3YXJuaW5nIHdoZW4gZnVuY3Rpb24gcG9pbnRlciB0
eXBlY2FzdHMgYXJlCmluY29tcGF0aWJsZS4gVGhpcyBwYXRjaCBhZGRzIGEgQ0ZMQUcgdG8gaWdu
b3JlIHRoaXMgd2FybmluZyBmb3IKdmZzY29yZSBhbmQgYWxsIGN1cnJlbnQgZmlsZXN5c3RlbSBp
bXBsZW1lbnRhdGlvbnMuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVu
emVyQG5lY2xhYi5ldT4KLS0tCiBsaWIvOXBmcy9NYWtlZmlsZS51ayAgICB8IDIgKysKIGxpYi9k
ZXZmcy9NYWtlZmlsZS51ayAgIHwgMiArKwogbGliL3JhbWZzL01ha2VmaWxlLnVrICAgfCAyICsr
CiBsaWIvdmZzY29yZS9NYWtlZmlsZS51ayB8IDMgKystCiA0IGZpbGVzIGNoYW5nZWQsIDggaW5z
ZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2xpYi85cGZzL01ha2VmaWxl
LnVrIGIvbGliLzlwZnMvTWFrZWZpbGUudWsKaW5kZXggOWQ0ZGZiNTcuLjhhNjY3ZWZhIDEwMDY0
NAotLS0gYS9saWIvOXBmcy9NYWtlZmlsZS51aworKysgYi9saWIvOXBmcy9NYWtlZmlsZS51awpA
QCAtMSw0ICsxLDYgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGliX3MsbGliOXBmcywkKENPTkZJR19M
SUI5UEZTKSkpCiAKK0xJQjlQRlNfQ0ZMQUdTLSQoY2FsbCBnY2NfdmVyc2lvbl9nZSw4LDApICs9
IC1Xbm8tY2FzdC1mdW5jdGlvbi10eXBlCisKIExJQjlQRlNfU1JDUy15ICs9ICQoTElCOVBGU19C
QVNFKS85cGZzX3Zmc29wcy5jCiBMSUI5UEZTX1NSQ1MteSArPSAkKExJQjlQRlNfQkFTRSkvOXBm
c192bm9wcy5jCmRpZmYgLS1naXQgYS9saWIvZGV2ZnMvTWFrZWZpbGUudWsgYi9saWIvZGV2ZnMv
TWFrZWZpbGUudWsKaW5kZXggZjg5ZTY1NzcuLmM0OTZmZDU2IDEwMDY0NAotLS0gYS9saWIvZGV2
ZnMvTWFrZWZpbGUudWsKKysrIGIvbGliL2RldmZzL01ha2VmaWxlLnVrCkBAIC0yLDUgKzIsNyBA
QCAkKGV2YWwgJChjYWxsIGFkZGxpYl9zLGxpYmRldmZzLCQoQ09ORklHX0xJQkRFVkZTKSkpCiAK
IENJTkNMVURFUy15ICs9IC1JJChMSUJERVZGU19CQVNFKS9pbmNsdWRlCiAKK0xJQkRFVkZTX0NG
TEFHUy0kKGNhbGwgZ2NjX3ZlcnNpb25fZ2UsOCwwKSArPSAtV25vLWNhc3QtZnVuY3Rpb24tdHlw
ZQorCiBMSUJERVZGU19TUkNTLXkgKz0gJChMSUJERVZGU19CQVNFKS9kZXZpY2UuYwogTElCREVW
RlNfU1JDUy15ICs9ICQoTElCREVWRlNfQkFTRSkvZGV2ZnNfdm5vcHMuYwpkaWZmIC0tZ2l0IGEv
bGliL3JhbWZzL01ha2VmaWxlLnVrIGIvbGliL3JhbWZzL01ha2VmaWxlLnVrCmluZGV4IDlhNDQz
MzU4Li5iZWMwYTk1NyAxMDA2NDQKLS0tIGEvbGliL3JhbWZzL01ha2VmaWxlLnVrCisrKyBiL2xp
Yi9yYW1mcy9NYWtlZmlsZS51awpAQCAtMSw0ICsxLDYgQEAKICQoZXZhbCAkKGNhbGwgYWRkbGli
X3MsbGlicmFtZnMsJChDT05GSUdfTElCUkFNRlMpKSkKIAorTElCUkFNRlNfQ0ZMQUdTLSQoY2Fs
bCBnY2NfdmVyc2lvbl9nZSw4LDApICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10eXBlCisKIExJQlJB
TUZTX1NSQ1MteSArPSAkKExJQlJBTUZTX0JBU0UpL3JhbWZzX3Zmc29wcy5jCiBMSUJSQU1GU19T
UkNTLXkgKz0gJChMSUJSQU1GU19CQVNFKS9yYW1mc192bm9wcy5jCmRpZmYgLS1naXQgYS9saWIv
dmZzY29yZS9NYWtlZmlsZS51ayBiL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrCmluZGV4IGUzNmM5
MjE3Li4wYTM5NzRmZSAxMDA2NDQKLS0tIGEvbGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKKysrIGIv
bGliL3Zmc2NvcmUvTWFrZWZpbGUudWsKQEAgLTIsNiArMiw4IEBAICQoZXZhbCAkKGNhbGwgYWRk
bGliX3MsbGlidmZzY29yZSwkKENPTkZJR19MSUJWRlNDT1JFKSkpCiAKIENJTkNMVURFUy15ICs9
IC1JJChMSUJWRlNDT1JFX0JBU0UpL2luY2x1ZGUKIAorTElCVkZTQ09SRV9DRkxBR1MtJChjYWxs
IGdjY192ZXJzaW9uX2dlLDgsMCkgKz0gLVduby1jYXN0LWZ1bmN0aW9uLXR5cGUKKwogTElCVkZT
Q09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JFX0JBU0UpL2ZkLmMKIExJQlZGU0NPUkVfU1JDUy15
ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9maWxlLmMKIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElC
VkZTQ09SRV9CQVNFKS9zdGRpby5jCkBAIC0xNSw3ICsxNyw2IEBAIExJQlZGU0NPUkVfU1JDUy15
ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9sb29rdXAuYwogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChM
SUJWRlNDT1JFX0JBU0UpL2ZvcHMuYwogTElCVkZTQ09SRV9TUkNTLXkgKz0gJChMSUJWRlNDT1JF
X0JBU0UpL3N1YnJfdWlvLmMKIExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNF
KS9waXBlLmMKLUxJQlZGU0NPUkVfUElQRV9GTEFHUy15ICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10
eXBlCiBMSUJWRlNDT1JFX1NSQ1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvZXh0cmEubGQKIAog
Ci0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9q
ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWlu
aW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 15:42:48 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 15:42:48 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iExp2-0002Oo-Dm; Mon, 30 Sep 2019 15:42:48 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iExp0-0002Oc-LL
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 15:42:46 +0000
X-Inumbo-ID: f09953ec-e398-11e9-bf31-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id f09953ec-e398-11e9-bf31-bc764e2007e4;
 Mon, 30 Sep 2019 15:42:42 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 12789F201C;
 Mon, 30 Sep 2019 17:42:42 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id LpDfBOfzQA5z; Mon, 30 Sep 2019 17:42:41 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id DD55CF201B;
 Mon, 30 Sep 2019 17:42:37 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 17:42:31 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 30 Sep 2019 17:42:22 +0200
Message-ID: <20190930154225.15652-3-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
References: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 2/5] lib/vfscore: fs_getfs():
 Return NULL on failed lookup
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TW91bnQgbmV2ZXIgZmFpbGVkIHdoZW4gdGhlIGZpbGVzeXN0ZW0gbmFtZSB3YXMgaW5jb3JyZWN0
LiBUaGlzIHdhcwpkdWUgdG8gdGhlIHZmc2NvcmUtaW50ZXJuYWwgZnVuY3Rpb24gZnNfZ2V0ZnMo
KSB0aGF0IHJldHVybmVkIHRoZSBsYXN0CnJlZ2lzdGVyZWQgZmlsZXN5c3RlbSBpbnN0ZWFkIG9m
IE5VTEwgd2hlbmV2ZXIgdGhlIG5hbWUgd2FzIGludmFsaWQuCgpTaWduZWQtb2ZmLWJ5OiBTaW1v
biBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xhYi5ldT4KUmV2aWV3ZWQtYnk6IFNoYXJhbiBT
YW50aGFuYW0gPHNoYXJhbi5zYW50aGFuYW1AbmVjbGFiLmV1PgotLS0KIGxpYi92ZnNjb3JlL21v
dW50LmMgfCAxMyArKysrKysrLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNyBpbnNlcnRpb25zKCsp
LCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi92ZnNjb3JlL21vdW50LmMgYi9saWIv
dmZzY29yZS9tb3VudC5jCmluZGV4IDI2MjlkMTMyLi45ZDdhY2UxNSAxMDA2NDQKLS0tIGEvbGli
L3Zmc2NvcmUvbW91bnQuYworKysgYi9saWIvdmZzY29yZS9tb3VudC5jCkBAIC04MCwxNyArODAs
MTggQEAgZnNfZ2V0ZnMoY29uc3QgY2hhciAqbmFtZSkKIHsKIAljb25zdCBzdHJ1Y3QgdmZzY29y
ZV9mc190eXBlICpmcyA9IE5VTEwsICoqX19mczsKIAorCVVLX0FTU0VSVChuYW1lICE9IE5VTEwp
OworCiAJZm9yX2VhY2hfZnMoX19mcykgewogCQlmcyA9ICpfX2ZzOwotCQlpZiAoZnMgPT0gTlVM
TCkKKwkJaWYgKCFmcyB8fCAhZnMtPnZzX25hbWUpCiAJCQljb250aW51ZTsKIAotCQlpZiAoIXN0
cm5jbXAobmFtZSwgZnMtPnZzX25hbWUsIEZTTUFYTkFNRVMpKQotCQkJYnJlYWs7CisJCWlmIChz
dHJuY21wKG5hbWUsIGZzLT52c19uYW1lLCBGU01BWE5BTUVTKSA9PSAwKQorCQkJcmV0dXJuIGZz
OwogCX0KLQlpZiAoIWZzIHx8ICFmcy0+dnNfbmFtZSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJu
IGZzOworCisJcmV0dXJuIE5VTEw7CiB9CiAKIGludCBkZXZpY2Vfb3Blbihjb25zdCBjaGFyICpu
YW1lIF9fdW51c2VkLCBpbnQgbW9kZSBfX3VudXNlZCwKLS0gCjIuMjAuMQoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 15:42:53 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 15:42:53 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iExp7-0002Pc-FN; Mon, 30 Sep 2019 15:42:53 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iExp5-0002PN-M5
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 15:42:51 +0000
X-Inumbo-ID: f308ddd2-e398-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id f308ddd2-e398-11e9-97fb-bc764e2007e4;
 Mon, 30 Sep 2019 15:42:46 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 22E01F201C;
 Mon, 30 Sep 2019 17:42:46 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id swmBeQIPY96c; Mon, 30 Sep 2019 17:42:46 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id EAD3DF201B;
 Mon, 30 Sep 2019 17:42:41 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 17:42:32 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 30 Sep 2019 17:42:23 +0200
Message-ID: <20190930154225.15652-4-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
References: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: oberon.office.hd (192.168.24.90) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 3/5] lib/vfscore: Automount option
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

TW92ZXMgdGhlIG9wdGlvbiBvZiBhdXRvbWF0aWNhbGx5IGEgcm9vdGZzIHRvIGxpYi92ZnNjb3Jl
LiBUaGlzCmZlYXR1cmUgaXMgbm90IG9ubHkgdXNlZnVsIGZvciBpbml0aWFsaXppbmcgZGV2ZnMu
IExpYnJhcnkgcGFyYW1ldGVycwp0byBpbmZsdWVuY2UgdGhlIGRlZmF1bHQgc2V0dGluZ3MgYXJl
IHByb3ZpZGVkLgoKU2lnbmVkLW9mZi1ieTogU2ltb24gS3VlbnplciA8c2ltb24ua3VlbnplckBu
ZWNsYWIuZXU+Ci0tLQogbGliL2RldmZzL0NvbmZpZy51ayAgICAgfCAgOSArKy0tCiBsaWIvZGV2
ZnMvZGV2ZnNfdm5vcHMuYyB8ICA4ICstLS0KIGxpYi92ZnNjb3JlL0NvbmZpZy51ayAgIHwgODEg
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLQogbGliL3Zmc2NvcmUvTWFrZWZpbGUu
dWsgfCAgNSArKysKIGxpYi92ZnNjb3JlL3Jvb3Rmcy5jICAgIHwgOTcgKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgMTg4IGluc2VydGlv
bnMoKyksIDEyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi92ZnNjb3JlL3Jv
b3Rmcy5jCgpkaWZmIC0tZ2l0IGEvbGliL2RldmZzL0NvbmZpZy51ayBiL2xpYi9kZXZmcy9Db25m
aWcudWsKaW5kZXggZTM4YTYxNmUuLjZmMjFjMDFjIDEwMDY0NAotLS0gYS9saWIvZGV2ZnMvQ29u
ZmlnLnVrCisrKyBiL2xpYi9kZXZmcy9Db25maWcudWsKQEAgLTEsMTAgKzEsMTEgQEAKLWNvbmZp
ZyBMSUJERVZGUworbWVudWNvbmZpZyBMSUJERVZGUwogCWJvb2wgImRldmZzOiBkZXZmcyBmaWxl
IHN5c3RlbSIKIAlkZWZhdWx0IG4KIAlkZXBlbmRzIG9uIExJQlZGU0NPUkUKKwogaWYgTElCREVW
RlMKLSAgICAgICAgY29uZmlnIExJQkRFVkZTX1VTRV9SQU1GUwotICAgICAgICBib29sICJVc2Ug
cmFtZnMgYXMgcm9vdCIKKwljb25maWcgTElCREVWRlNfQVVUT01PVU5UCisgICAgICAgIGJvb2wg
Ik1vdW50IC9kZXYgZHVyaW5nIGJvb3QiCisJZGVwZW5kcyBvbiBMSUJWRlNDT1JFX0FVVE9NT1VO
VF9ST09URlMKICAgICAgICAgZGVmYXVsdCBuCi0gICAgICAgIHNlbGVjdCBMSUJSQU1GUwogZW5k
aWYKZGlmZiAtLWdpdCBhL2xpYi9kZXZmcy9kZXZmc192bm9wcy5jIGIvbGliL2RldmZzL2RldmZz
X3Zub3BzLmMKaW5kZXggMTFhM2VhMDUuLmQ4NzJlNjIyIDEwMDY0NAotLS0gYS9saWIvZGV2ZnMv
ZGV2ZnNfdm5vcHMuYworKysgYi9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYwpAQCAtMzEyLDE1ICsz
MTIsOSBAQCBVS19GU19SRUdJU1RFUihmc19kZXZmcyk7CiAKIF9fY29uc3RydWN0b3JfcHJpbygx
MDEpIHN0YXRpYyB2b2lkIGRldmZzX2luaXQodm9pZCkKIHsKLSNpZmRlZiBDT05GSUdfTElCREVW
RlNfVVNFX1JBTUZTCisjaWZkZWYgQ09ORklHX0xJQkRFVkZTX0FVVE9NT1VOVAogCWludCByZXQ7
CiAKLQlyZXQgPSBtb3VudCgiIiwgIi8iLCAicmFtZnMiLCAwLCBOVUxMKTsKLQlpZiAocmV0ICE9
IDApIHsKLQkJdWtfcHJfZGVidWcoIkZhaWxlZCB0byBtb3VudCAvIGluICVzXG4iLCBfX2Z1bmNf
Xyk7Ci0JCXJldHVybjsKLQl9Ci0KIAlyZXQgPSAgbWtkaXIoIi9kZXYiLCBTX0lSV1hVKTsKIAlp
ZiAocmV0ICE9IDApIHsKIAkJdWtfcHJfZGVidWcoIkZhaWxlZCB0byBta2RpciAvZGV2IGluICVz
XG4iLCBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9saWIvdmZzY29yZS9Db25maWcudWsgYi9saWIv
dmZzY29yZS9Db25maWcudWsKaW5kZXggNWRlYjdkMDQuLjUyNzkyMmRhIDEwMDY0NAotLS0gYS9s
aWIvdmZzY29yZS9Db25maWcudWsKKysrIGIvbGliL3Zmc2NvcmUvQ29uZmlnLnVrCkBAIC0xLDQg
KzEsNCBAQAotbWVudWNvbmZpZyBMSUJWRlNDT1JFCitjb25maWcgTElCVkZTQ09SRQogCWJvb2wg
InZmc2NvcmU6IFZGUyBDb3JlIEludGVyZmFjZSIKIAlkZWZhdWx0IG4KIAlzZWxlY3QgTElCTk9M
SUJDIGlmICFIQVZFX0xJQkMKQEAgLTYsNiArNiw3IEBAIG1lbnVjb25maWcgTElCVkZTQ09SRQog
CXNlbGVjdCBMSUJVS0xPQ0sKIAogaWYgTElCVkZTQ09SRQorbWVudSAidmZzY29yZTogQ29uZmln
dXJhdGlvbiIKIAogY29uZmlnIExJQlZGU0NPUkVfUElQRV9TSVpFX09SREVSCiAJaW50ICJQaXBl
IHNpemUgb3JkZXIiCkBAIC0xMyw0ICsxNCw4MiBAQCBjb25maWcgTElCVkZTQ09SRV9QSVBFX1NJ
WkVfT1JERVIKIAloZWxwCiAJCVRoZSBzaXplIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIgZm9yIGFu
b255bW91cyBwaXBlcyBpcyAyXm9yZGVyLgogCitjb25maWcgTElCVkZTQ09SRV9BVVRPTU9VTlRf
Uk9PVEZTCitib29sICJBdXRvbWF0aWNhbGx5IG1vdW50IGEgcm9vdCBmaWxlc3lzeXRlbSAoLyki
CitkZWZhdWx0IG4KK2hlbHAKKwlBdXRvbWF0aWNhbGx5IG1vdW50cyAnLycgZHVyaW5nIGJvb3Qu
IElmIGBsaWJ1a2xpYnBhcmFtYCBpcworCWNvbXBpbGVkIGluLCB0aGUgZGVmYXVsdCByb290IGZp
bGVzeXN0ZW0gYW5kIG1vdW50IG9wdGlvbnMgY2FuCisJYmUgY2hhbmdlZCB3aXRoIHRoZSBmb2xs
b3dpbmcgbGlicmFyeSBwYXJhbWV0ZXJzOgorCSd2ZnMucm9vdGZzJywgJ3Zmcy5yb290ZGV2Jywg
J3Zmcy5yb290ZmxhZ3MnLCBhbmQgJ3Zmcy5yb290b3B0cycKKworaWYgTElCVkZTQ09SRV9BVVRP
TU9VTlRfUk9PVEZTCisJY2hvaWNlIExJQlZGU0NPUkVfUk9PVEZTCisJcHJvbXB0ICJEZWZhdWx0
IHJvb3QgZmlsZXN5c3RlbSIKKwlkZWZhdWx0IExJQlZGU0NPUkVfUk9PVEZTX1JBTUZTCisKKwkJ
Y29uZmlnIExJQlZGU0NPUkVfUk9PVEZTX1JBTUZTCisJCWJvb2wgIlJhbUZTIgorCQlzZWxlY3Qg
TElCUkFNRlMKKworCQljb25maWcgTElCVkZTQ09SRV9ST09URlNfOVBGUworCQlib29sICI5UEZT
IgorCQlzZWxlY3QgTElCVUs5UAorCQlzZWxlY3QgTElCOVBGUworCisJCWNvbmZpZyBMSUJWRlND
T1JFX1JPT1RGU19DVVNUT00KKwkJYm9vbCAiQ3VzdG9tIGFyZ3VtZW50IgorCQloZWxwCisJCQlQ
bGVhc2Ugc2V0IExJQlZGU0NPUkVfUk9PVEZTX0NVU1RPTV9BUkcKKwkJCXRvIGEgZmlsZXN5c3Rl
bSBuYW1lIHRoYXQgc2hvdWxkIGJlIHVzZWQKKwkJCWFzIGRlZmF1bHQuCisJZW5kY2hvaWNlCisK
Kwljb25maWcgTElCVkZTQ09SRV9ST09URlNfQ1VTVE9NX0FSRworCXN0cmluZyAiRGVmYXVsdCBj
dXN0b20gcm9vdCBmaWxlc3lzdGVtIgorCWRlZmF1bHQgIiIKKwlkZXBlbmRzIG9uIExJQlZGU0NP
UkVfUk9PVEZTX0NVU1RPTQorCWhlbHAKKwkJQ3VzdG9tIG5hbWUgb2YgYSBmaWxlc3lzdGVtIHRv
IG1vdW50IChlLmcuLCByYW1mcywKKwkJOXBmcykuIE1ha2Ugc3VyZSB0aGF0IHRoZSBzcGVjaWZp
ZWQgZmlsZXN5c3RlbQorCQlpcyBhdmFpbGFibGUgZm9yIGxpYnZmc2NvcmUuCisKKwkjIEhpZGRl
biBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0IGdldHMgYXV0b21hdGljYWxseSBmaWxsZWQKKwkj
IHdpdGggdGhlIHNlbGVjdGVkIGZpbGVzeXN0ZW0gbmFtZQorCWNvbmZpZyBMSUJWRlNDT1JFX1JP
T1RGUworCXN0cmluZworCWRlZmF1bHQgInJhbWZzIiBpZiBMSUJWRlNDT1JFX1JPT1RGU19SQU1G
UworCWRlZmF1bHQgIjlwZnMiIGlmIExJQlZGU0NPUkVfUk9PVEZTXzlQRlMKKwlkZWZhdWx0IExJ
QlZGU0NPUkVfUk9PVEZTX0NVU1RPTV9BUkcgaWYgTElCVkZTQ09SRV9ST09URlNfQ1VTVE9NCisJ
ZGVmYXVsdCAiIgorCisJIyBUaGUgcm9vdCBkZXZpY2Ugb3B0aW9uIGlzIGhpZGRlbiBmb3IgUmFt
RlMgYW5kIDlQRlMKKwljb25maWcgTElCVkZTQ09SRV9ST09UREVWCisJc3RyaW5nICJEZWZhdWx0
IHJvb3QgZGV2aWNlIgorCWRlcGVuZHMgb24gIUxJQlZGU0NPUkVfUk9PVEZTX1JBTUZTICYmICFM
SUJWRlNDT1JFX1JPT1RGU185UEZTCisJZGVmYXVsdCAiIgorCWhlbHAKKwkJRGV2aWNlIHRvIG1v
dW50IHRoZSBmaWxlc3lzdGVtIGZyb20uIERlcGVuZGluZyBvbiB0aGUKKwkJc2VsZWN0ZWQgZmls
ZXN5c3RlbSwgdGhpcyBvcHRpb24gbWF5IG5vdCBiZSByZXF1aXJlZC4KKworCSMgVGhlIHJvb3Qg
ZmxhZ3MgaXMgaGlkZGVuIGZvciBSYW1GUworCWNvbmZpZyBMSUJWRlNDT1JFX1JPT1RGTEFHUwor
CWhleCAiRGVmYXVsdCByb290IG1vdW50IGZsYWdzIgorCWRlcGVuZHMgb24gIUxJQlZGU0NPUkVf
Uk9PVEZTX1JBTUZTCisJZGVmYXVsdCAweDAKKwloZWxwCisJCU1vdW50IGZsYWdzLgorCisJIyBU
aGUgcm9vdCBvcHRpb25zIGFyZSBoaWRkZW4gZm9yIFJhbUZTCisJY29uZmlnIExJQlZGU0NPUkVf
Uk9PVE9QVFMKKwlzdHJpbmcgIkRlZmF1bHQgcm9vdCBtb3VudCBvcHRpb25zIgorCWRlcGVuZHMg
b24gIUxJQlZGU0NPUkVfUk9PVEZTX1JBTUZTCisJZGVmYXVsdCAiIgorCWhlbHAKKwkJVXN1YWxs
eSBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFkZGl0aW9uYWwgbW91bnQKKwkJb3B0aW9ucyB0
aGF0IGFyZSBkaXJlY3RseSBpbnRlcnByZXRlZCBieSB0aGUgdGFyZ2V0CisJCWZpbGVzeXN0ZW0u
CitlbmRpZgorCitlbmRtZW51CiBlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvTWFrZWZp
bGUudWsgYi9saWIvdmZzY29yZS9NYWtlZmlsZS51awppbmRleCAwYTM5NzRmZS4uZTBkYWE1ZmEg
MTAwNjQ0Ci0tLSBhL2xpYi92ZnNjb3JlL01ha2VmaWxlLnVrCisrKyBiL2xpYi92ZnNjb3JlL01h
a2VmaWxlLnVrCkBAIC0xLDUgKzEsOCBAQAogJChldmFsICQoY2FsbCBhZGRsaWJfcyxsaWJ2ZnNj
b3JlLCQoQ09ORklHX0xJQlZGU0NPUkUpKSkKIAorIyBSZWdpc3RlciB0byB1a2xpYnBhcmFtLCBz
ZXRzICJ2ZnMiIGFzIHBhcmFtZXRlciBwcmVmaXggKHZmcy4qKQorJChldmFsICQoY2FsbCBhZGRs
aWJfcGFyYW1wcmVmaXgsbGlidmZzY29yZSx2ZnMpKQorCiBDSU5DTFVERVMteSArPSAtSSQoTElC
VkZTQ09SRV9CQVNFKS9pbmNsdWRlCiAKIExJQlZGU0NPUkVfQ0ZMQUdTLSQoY2FsbCBnY2NfdmVy
c2lvbl9nZSw4LDApICs9IC1Xbm8tY2FzdC1mdW5jdGlvbi10eXBlCkBAIC0xOCw2ICsyMSw4IEBA
IExJQlZGU0NPUkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9mb3BzLmMKIExJQlZGU0NP
UkVfU1JDUy15ICs9ICQoTElCVkZTQ09SRV9CQVNFKS9zdWJyX3Vpby5jCiBMSUJWRlNDT1JFX1NS
Q1MteSArPSAkKExJQlZGU0NPUkVfQkFTRSkvcGlwZS5jCiBMSUJWRlNDT1JFX1NSQ1MteSArPSAk
KExJQlZGU0NPUkVfQkFTRSkvZXh0cmEubGQKK0xJQlZGU0NPUkVfU1JDUy0kKENPTkZJR19MSUJW
RlNDT1JFX0FVVE9NT1VOVF9ST09URlMpICs9IFwKKwkkKExJQlZGU0NPUkVfQkFTRSkvcm9vdGZz
LmMKIAogCiBVS19QUk9WSURFRF9TWVNDQUxMUy0kKENPTkZJR19MSUJWRlNDT1JFKSArPSB3cml0
ZXYtMwpkaWZmIC0tZ2l0IGEvbGliL3Zmc2NvcmUvcm9vdGZzLmMgYi9saWIvdmZzY29yZS9yb290
ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNGI5NTEyYTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9saWIvdmZzY29yZS9yb290ZnMuYwpAQCAtMCwwICsxLDk3IEBACisvKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlICovCisvKgorICogTW91bnQgVkZT
IHJvb3QKKyAqCisgKiBBdXRob3JzOiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVyQG5lY2xh
Yi5ldT4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE5LCBORUMgTGFib3JhdG9yaWVzIEV1
cm9wZSBHbWJILCBORUMgQ29ycG9yYXRpb24uCisgKiAgICAgICAgICAgICAgICAgICAgIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgY29weXJpZ2h0IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqICAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKgorICogVEhJUyBIRUFERVIgTUFZIE5PVCBCRSBFWFRSQUNURUQg
T1IgTU9ESUZJRUQgSU4gQU5ZIFdBWS4KKyAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk
ZSA8dWsvY29uZmlnLmg+CisjaW5jbHVkZSA8dWsvYXJjaC90eXBlcy5oPgorI2luY2x1ZGUgPHVr
L2xpYnBhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvbW91bnQu
aD4KKyNpbmNsdWRlIDx1ay9pbml0Lmg+CisKK3N0YXRpYyBjb25zdCBjaGFyICpyb290ZnMgICA9
IENPTkZJR19MSUJWRlNDT1JFX1JPT1RGUzsKKworI2lmbmRlZiBDT05GSUdfTElCVkZTQ09SRV9S
T09UREVWCitzdGF0aWMgY29uc3QgY2hhciAqcm9vdGRldiAgPSAiIjsKKyNlbHNlCitzdGF0aWMg
Y29uc3QgY2hhciAqcm9vdGRldiAgPSBDT05GSUdfTElCVkZTQ09SRV9ST09UREVWOworI2VuZGlm
CisKKyNpZm5kZWYgQ09ORklHX0xJQlZGU0NPUkVfUk9PVE9QVFMKK3N0YXRpYyBjb25zdCBjaGFy
ICpyb290b3B0cyA9ICIiOworI2Vsc2UKK3N0YXRpYyBjb25zdCBjaGFyICpyb290b3B0cyA9IENP
TkZJR19MSUJWRlNDT1JFX1JPT1RPUFRTOworI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0xJQlZG
U0NPUkVfUk9PVEZMQUdTCitzdGF0aWMgX191NjQgcm9vdGZsYWdzOworI2Vsc2UKK3N0YXRpYyBf
X3U2NCByb290ZmxhZ3MgICAgICA9IChfX3U2NCkgQ09ORklHX0xJQlZGU0NPUkVfUk9PVEZMQUdT
OworI2VuZGlmCisKK1VLX0xJQl9QQVJBTV9TVFIocm9vdGZzKTsKK1VLX0xJQl9QQVJBTV9TVFIo
cm9vdGRldik7CitVS19MSUJfUEFSQU1fU1RSKHJvb3RvcHRzKTsKK1VLX0xJQl9QQVJBTShyb290
ZmxhZ3MsIF9fdTY0KTsKKworc3RhdGljIGludCB2ZnNjb3JlX3Jvb3Rmcyh2b2lkKQoreworCS8q
CisJICogSW5pdGlhbGl6YXRpb24gb2YgdGhlIHJvb3QgZmlsZXN5c3RlbSAnLycKKwkgKiBOT1RF
OiBBbnkgYWRkaXRpb25hbCBzdWIgbW91bnQgcG9pbnRzIChsaWtlICcvZGV2JyB3aXRoIGRldmZz
KQorCSAqIGhhdmUgdG8gYmUgbW91bnRlZCBsYXRlci4KKwkgKi8KKwlpZiAoIXJvb3RmcyB8fCBy
b290ZnNbMF0gPT0gJ1wwJykgeworCQl1a19wcl9jcml0KCJQYXJhbWV0ZXIgJ3Zmcy5yb290ZnMn
IGlzIGludmFsaWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJdWtfcHJfaW5mbygiTW91bnQg
JXMgdG8gLy4uLlxuIiwgcm9vdGZzKTsKKwlpZiAobW91bnQocm9vdGRldiwgIi8iLCByb290ZnMs
IHJvb3RmbGFncywgcm9vdG9wdHMpICE9IDApIHsKKwkJdWtfcHJfY3JpdCgiRmFpbGVkIHRvIG1v
dW50IC86ICVkXG4iLCBlcnJubyk7CisJCXJldHVybiAtMTsKKwl9CisKKwkvKgorCSAqIFRPRE86
IEFsdGVybmF0aXZlbHkgd2UgY291bGQgZXh0cmFjdCBhbiBhcmNoaXZlIGZvdW5kCisJICogYXMg
aW5pdHJkIHRvIGEgcmFtZnMgJy8nIGlmIHdlIGhhdmUgZ290IGZzbmFtZSAnaW5pdHJkJworCSAq
LworCisJcmV0dXJuIDA7Cit9CisKK3VrX3Jvb3Rmc19pbml0Y2FsbF9wcmlvKHZmc2NvcmVfcm9v
dGZzLCA0KTsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3Rz
LnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0
aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 15:42:54 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 15:42:54 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iExp8-0002Q6-H5; Mon, 30 Sep 2019 15:42:54 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iExp7-0002Pt-UR
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 15:42:53 +0000
X-Inumbo-ID: f5787730-e398-11e9-96d9-12813bfff9fa
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id f5787730-e398-11e9-96d9-12813bfff9fa;
 Mon, 30 Sep 2019 15:42:51 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 2F091F201C;
 Mon, 30 Sep 2019 17:42:50 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id XTofC59Q5yhS; Mon, 30 Sep 2019 17:42:50 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 05314F201B;
 Mon, 30 Sep 2019 17:42:46 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 17:42:32 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 30 Sep 2019 17:42:24 +0200
Message-ID: <20190930154225.15652-5-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
References: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: titania.office.hd (192.168.24.89) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 4/5] lib/devfs: Automount through
 inittab
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhlIGF1dG9tb3VudCBvcHRpb24gb2YgZGV2ZnMgdG8gYC9kZXZgIGlzIG1vdmVkIHRvIGFuIGlu
aXR0YWIgZW50cnkuCgpTaWduZWQtb2ZmLWJ5OiBTaW1vbiBLdWVuemVyIDxzaW1vbi5rdWVuemVy
QG5lY2xhYi5ldT4KLS0tCiBsaWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYyAgICAgICAgICB8IDMwICsr
KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLQogbGliL2RldmZzL2luY2x1ZGUvZGV2ZnMvZGV2
aWNlLmggfCAgOSArKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMzAgaW5zZXJ0aW9ucygrKSwg
OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvZGV2ZnMvZGV2ZnNfdm5vcHMuYyBiL2xp
Yi9kZXZmcy9kZXZmc192bm9wcy5jCmluZGV4IGQ4NzJlNjIyLi4xZTQ5ZTZiZiAxMDA2NDQKLS0t
IGEvbGliL2RldmZzL2RldmZzX3Zub3BzLmMKKysrIGIvbGliL2RldmZzL2RldmZzX3Zub3BzLmMK
QEAgLTU5LDcgKzU5LDggQEAKIAogI2luY2x1ZGUgPHZmc2NvcmUvZnMuaD4KIAotI2luY2x1ZGUg
PHVrL2N0b3JzLmg+CisjaW5jbHVkZSA8dWsvaW5pdC5oPgorI2luY2x1ZGUgPHVrL3ByaW50Lmg+
CiAKICNpbmNsdWRlICJkZXZmcy5oIgogI2luY2x1ZGUgPGRldmZzL2RldmljZS5oPgpAQCAtMzEw
LDIxICszMTEsMzIgQEAgc3RhdGljIHN0cnVjdCB2ZnNjb3JlX2ZzX3R5cGUgZnNfZGV2ZnMgPSB7
CiAKIFVLX0ZTX1JFR0lTVEVSKGZzX2RldmZzKTsKIAotX19jb25zdHJ1Y3Rvcl9wcmlvKDEwMSkg
c3RhdGljIHZvaWQgZGV2ZnNfaW5pdCh2b2lkKQotewogI2lmZGVmIENPTkZJR19MSUJERVZGU19B
VVRPTU9VTlQKK3N0YXRpYyBpbnQgZGV2ZnNfYXV0b21vdW50KHZvaWQpCit7CiAJaW50IHJldDsK
IAorCXVrX3ByX2luZm8oIk1vdW50IGRldmZzIHRvIC9kZXYuLi4iKTsKKworCS8qCisJICogVHJ5
IHRvIGNyZWF0ZSB0YXJnZXQgbW91bnRwb2ludCBgL2RldmAuIElmIGNyZWF0aW9uIGZhaWxzCisJ
ICogYmVjYXVzZSBpdCBhbHJlYWR5IGV4aXN0cywgd2UgYXJlIGNvbnRpbnVpbmcuCisJICovCiAJ
cmV0ID0gIG1rZGlyKCIvZGV2IiwgU19JUldYVSk7Ci0JaWYgKHJldCAhPSAwKSB7Ci0JCXVrX3By
X2RlYnVnKCJGYWlsZWQgdG8gbWtkaXIgL2RldiBpbiAlc1xuIiwgX19mdW5jX18pOwotCQlyZXR1
cm47CisJaWYgKHJldCAhPSAwICYmIGVycm5vICE9IEVFWElTVCkgeworCQl1a19wcl9lcnIoIkZh
aWxlZCB0byBjcmVhdGUgL2RldjogJWRcbiIsIGVycm5vKTsKKwkJcmV0dXJuIC0xOwogCX0KIAog
CXJldCA9IG1vdW50KCIiLCAiL2RldiIsICJkZXZmcyIsIDAsIE5VTEwpOwogCWlmIChyZXQgIT0g
MCkgewotCQl1a19wcl9kZWJ1ZygiRmFpbGVkIHRvIG1vdW50IC9kZXYgYXMgZGV2ZnMgaW4gJXNc
biIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOworCQl1a19wcl9lcnIoIkZhaWxlZCB0byBtb3VudCBk
ZXZmcyB0byAvZGV2OiAlZFxuIiwgZXJybm8pOworCQlyZXR1cm4gLTE7CiAJfQotI2VuZGlmCisK
KwlyZXR1cm4gMDsKIH0KKworLyogYWZ0ZXIgdmZzY29yZSBtb3VudGVkICcvJyAocHJpb3JpdHkg
NCk6ICovCit1a19yb290ZnNfaW5pdGNhbGxfcHJpbyhkZXZmc19hdXRvbW91bnQsIDUpOworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9saWIvZGV2ZnMvaW5jbHVkZS9kZXZmcy9kZXZpY2UuaCBiL2xpYi9k
ZXZmcy9pbmNsdWRlL2RldmZzL2RldmljZS5oCmluZGV4IDI5ODg5ZTRlLi40NmE2YTg1YSAxMDA2
NDQKLS0tIGEvbGliL2RldmZzL2luY2x1ZGUvZGV2ZnMvZGV2aWNlLmgKKysrIGIvbGliL2RldmZz
L2luY2x1ZGUvZGV2ZnMvZGV2aWNlLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNkZWZpbmUgX0RFVklD
RV9ICiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1ay9pbml0Lmg+CiAKICNp
bmNsdWRlIDx2ZnNjb3JlL3Vpby5oPgogCkBAIC0yMDgsNCArMjA5LDEyIEBAIGludCBkZXZpY2Vf
ZGVzdHJveV9sb2NrZWQoc3RydWN0IGRldmljZSAqZGV2KTsKIHZvaWQgZGV2aWNlX3JlZ2lzdGVy
KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IGZsYWdzKTsKIHZv
aWQgcmVhZF9wYXJ0aXRpb25fdGFibGUoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKIAorLyoKKyAq
IElkZWFsbHksIGFueSBkZXYgbm9kZSByZWdpc3RyYXRpb24gc2hvdWxkIGhhcHBlbiBiZWZvcmUg
d2UgbW91bnQgZGV2ZnMuCisgKiB2ZnNjb3JlIG1vdW50cyAnLycgYXQgcHJpb3JpdHkgNCwgJy9k
ZXYnIGlzIG1vdW50ZWQgYXQgcHJpb3JpdHkgNS4KKyAqIFRvIGJlIG9uIHRoZSBzYWZlIHNpZGUs
IHdlIGRvIHRoZSByZWdpc3RyYXRpb24gdG8gZGV2ZnMgYmVmb3JlIGJvdGgsCisgKiBhdCBwcmlv
cml0eSAnMycuCisgKi8KKyNkZWZpbmUgZGV2ZnNfaW5pdGNhbGwoZm4pIHVrX3Jvb3Rmc19pbml0
Y2FsbF9wcmlvKGRldmZzX2F1dG9tb3VudCwgMykKKwogI2VuZGlmIC8qICFfREVWSUNFX0ggKi8K
LS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2pl
Y3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5p
b3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 15:42:57 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 15:42:57 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iExpB-0002Qt-Im; Mon, 30 Sep 2019 15:42:57 +0000
Received: from us1-rack-iad1.inumbo.com ([172.99.69.81])
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=Bndd=XZ=neclab.eu=simon.kuenzer@srs-us1.protection.inumbo.net>)
 id 1iExpA-0002Qh-Mh
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 15:42:56 +0000
X-Inumbo-ID: f7dcd106-e398-11e9-97fb-bc764e2007e4
Received: from mailer2.neclab.eu (unknown [195.37.70.41])
 by localhost (Halon) with ESMTPS
 id f7dcd106-e398-11e9-97fb-bc764e2007e4;
 Mon, 30 Sep 2019 15:42:55 +0000 (UTC)
Received: from localhost (localhost [127.0.0.1])
 by mailer2.neclab.eu (Postfix) with ESMTP id 3E9C5F201C;
 Mon, 30 Sep 2019 17:42:54 +0200 (CEST)
X-Virus-Scanned: Amavisd on Debian GNU/Linux (atlas-b.office.hd)
Received: from mailer2.neclab.eu ([127.0.0.1])
 by localhost (atlas-b.office.hd [127.0.0.1]) (amavisd-new, port 10024)
 with ESMTP id YhUgnKMjvihY; Mon, 30 Sep 2019 17:42:54 +0200 (CEST)
X-ENC: Last-Hop-TLS-encrypted
X-ENC: Last-Hop-TLS-encrypted
Received: from puck.office.hd (puck.office.hd [192.168.24.91])
 (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
 (No client certificate requested)
 by mailer2.neclab.eu (Postfix) with ESMTPS id 13B8CF201B;
 Mon, 30 Sep 2019 17:42:50 +0200 (CEST)
Received: from localhost (192.168.24.96) by puck.office.hd (192.168.24.91)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 30 Sep
 2019 17:42:33 +0200
From: Simon Kuenzer <simon.kuenzer@neclab.eu>
To: <minios-devel@lists.xen.org>
Date: Mon, 30 Sep 2019 17:42:25 +0200
Message-ID: <20190930154225.15652-6-simon.kuenzer@neclab.eu>
X-Mailer: git-send-email 2.20.1
In-Reply-To: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
References: <20190930154225.15652-1-simon.kuenzer@neclab.eu>
MIME-Version: 1.0
X-Originating-IP: [192.168.24.96]
X-ClientProxiedBy: puck.office.hd (192.168.24.91) To puck.office.hd
 (192.168.24.91)
Subject: [Minios-devel] [UNIKRAFT PATCH v4 5/5] lib/ukswrand: Clean-up devfs
 integration
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: Simon Kuenzer <simon.kuenzer@neclab.eu>,
 Sharan Santhanam <sharan.santhanam@neclab.eu>,
 Costin Lupu <costin.lupu@cs.pub.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBwYXRjaCBjbGVhbnMgdXAgdGhlIGRldmZzIGludGVncmF0aW9uIG9mIHVrc3dyYW5kOgot
IFRoZSBjb25maWcgb3B0aW9uIGlzIHByb3Blcmx5IG5hbWVzcGFjZWQuCi0gbXdjX2Rldi5jIGlz
IGFjdHVhbGx5IGluZGVwZW5kZW50IG9mIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBNV0Mu
CiAgV2UgcmVuYW1lIHRoaXMgZmlsZSB0byBkZXYuYwotIFR1cm5zIHRoZSBkZXZmcyByZWdpc3Ry
YXRpb24gZnVuY3Rpb24gaW50byBhbiBpbml0Y2FsbC4KClNpZ25lZC1vZmYtYnk6IFNpbW9uIEt1
ZW56ZXIgPHNpbW9uLmt1ZW56ZXJAbmVjbGFiLmV1PgpSZXZpZXdlZC1ieTogU2hhcmFuIFNhbnRo
YW5hbSA8c2hhcmFuLnNhbnRoYW5hbUBuZWNsYWIuZXU+Ci0tLQogbGliL3Vrc3dyYW5kL0NvbmZp
Zy51ayAgICAgICAgICAgIHwgIDUgKysrLS0KIGxpYi91a3N3cmFuZC9NYWtlZmlsZS51ayAgICAg
ICAgICB8ICA0ICstLS0KIGxpYi91a3N3cmFuZC97bXdjX2Rldi5jID0+IGRldi5jfSB8IDIzICsr
KysrKysrKysrKysrKysrLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDIxIGluc2VydGlvbnMoKyks
IDExIGRlbGV0aW9ucygtKQogcmVuYW1lIGxpYi91a3N3cmFuZC97bXdjX2Rldi5jID0+IGRldi5j
fSAoODklKQoKZGlmZiAtLWdpdCBhL2xpYi91a3N3cmFuZC9Db25maWcudWsgYi9saWIvdWtzd3Jh
bmQvQ29uZmlnLnVrCmluZGV4IGExYTg0YmM1Li5jNTgzNzFiYiAxMDA2NDQKLS0tIGEvbGliL3Vr
c3dyYW5kL0NvbmZpZy51aworKysgYi9saWIvdWtzd3JhbmQvQ29uZmlnLnVrCkBAIC0xOCw5ICsx
OCwxMCBAQCBjb25maWcgTElCVUtTV1JBTkRfSU5JVElBTFNFRUQKIAlpbnQgIkluaXRpYWwgcmFu
ZG9tIHNlZWQiCiAJZGVmYXVsdCAyMwogCi1jb25maWcgREVWX1JBTkRPTQotCWJvb2wgIi9kZXYv
cmFuZG9tIGRldmljZSIKK2NvbmZpZyBMSUJVS1NXUkFORF9ERVZGUworCWJvb2wgIlJlZ2lzdGVy
IHJhbmRvbSBhbmQgdXJhbmRvbSBkZXZpY2UgdG8gZGV2ZnMiCiAJc2VsZWN0IExJQkRFVkZTCisJ
c2VsZWN0IExJQlZGU0NPUkUKIAlkZWZhdWx0IG4KIAogZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi91
a3N3cmFuZC9NYWtlZmlsZS51ayBiL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51awppbmRleCAyNTI0
NzQ3NC4uMDU1Njk5ZGUgMTAwNjQ0Ci0tLSBhL2xpYi91a3N3cmFuZC9NYWtlZmlsZS51aworKysg
Yi9saWIvdWtzd3JhbmQvTWFrZWZpbGUudWsKQEAgLTQsNiArNCw0IEBAIENJTkNMVURFUy0kKENP
TkZJR19MSUJVS1NXUkFORCkJKz0gLUkkKExJQlVLU1dSQU5EX0JBU0UpL2luY2x1ZGUKIENYWElO
Q0xVREVTLSQoQ09ORklHX0xJQlVLU1dSQU5EKSArPSAtSSQoTElCVUtTV1JBTkRfQkFTRSkvaW5j
bHVkZQogCiBMSUJVS1NXUkFORF9TUkNTLSQoQ09ORklHX0xJQlVLU1dSQU5EX01XQykgKz0gJChM
SUJVS1NXUkFORF9CQVNFKS9td2MuYwotaWZkZWYgQ09ORklHX0RFVl9SQU5ET00KLUxJQlVLU1dS
QU5EX1NSQ1MtJChDT05GSUdfTElCVUtTV1JBTkRfTVdDKSArPSAkKExJQlVLU1dSQU5EX0JBU0Up
L213Y19kZXYuYwotZW5kaWYKK0xJQlVLU1dSQU5EX1NSQ1MtJChDT05GSUdfTElCVUtTV1JBTkRf
REVWRlMpICs9ICQoTElCVUtTV1JBTkRfQkFTRSkvZGV2LmMKZGlmZiAtLWdpdCBhL2xpYi91a3N3
cmFuZC9td2NfZGV2LmMgYi9saWIvdWtzd3JhbmQvZGV2LmMKc2ltaWxhcml0eSBpbmRleCA4OSUK
cmVuYW1lIGZyb20gbGliL3Vrc3dyYW5kL213Y19kZXYuYwpyZW5hbWUgdG8gbGliL3Vrc3dyYW5k
L2Rldi5jCmluZGV4IDVhNGNiMTAwLi5hZGNhNjU2NiAxMDA2NDQKLS0tIGEvbGliL3Vrc3dyYW5k
L213Y19kZXYuYworKysgYi9saWIvdWtzd3JhbmQvZGV2LmMKQEAgLTEwMSwxOSArMTAxLDMwIEBA
IHN0YXRpYyBzdHJ1Y3QgZHJpdmVyIGRydl91cmFuZG9tID0gewogCS5uYW1lID0gREVWX1VSQU5E
T01fTkFNRQogfTsKIAotX19jb25zdHJ1Y3Rvcl9wcmlvKDEwMikgc3RhdGljIHZvaWQgX3VrX2Rl
dl9zd3JhbmRfY3Rvcih2b2lkKQorc3RhdGljIGludCBkZXZmc19yZWdpc3Rlcih2b2lkKQogewog
CXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCXVrX3ByX2luZm8oIkFkZCAvZGV2L3JhbmRvbSBhbmQg
L2Rldi91cmFuZG9tXG4iKTsKKwl1a19wcl9pbmZvKCJSZWdpc3RlciAnJXMnIGFuZCAnJXMnIHRv
IGRldmZzXG4iLAorCQkgICBERVZfVVJBTkRPTV9OQU1FLCBERVZfUkFORE9NX05BTUUpOwogCiAJ
LyogcmVnaXN0ZXIgL2Rldi91cmFuZG9tICovCiAJZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZHJ2X3Vy
YW5kb20sIERFVl9VUkFORE9NX05BTUUsIERfQ0hSKTsKLQlpZiAoZGV2ID09IE5VTEwpCi0JCXVr
X3ByX2luZm8oIkZhaWxlZCB0byByZWdpc3RlciAvZGV2L3VyYW5kb21cbiIpOworCWlmIChkZXYg
PT0gTlVMTCkgeworCQl1a19wcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAnJXMnIHRvIGRldmZz
XG4iLAorCQkJICBERVZfVVJBTkRPTV9OQU1FKTsKKwkJcmV0dXJuIC0xOworCX0KIAogCS8qIHJl
Z2lzdGVyIC9kZXYvcmFuZG9tICovCiAJZGV2ID0gZGV2aWNlX2NyZWF0ZSgmZHJ2X3JhbmRvbSwg
REVWX1JBTkRPTV9OQU1FLCBEX0NIUik7Ci0JaWYgKGRldiA9PSBOVUxMKQotCQl1a19wcl9pbmZv
KCJGYWlsZWQgdG8gcmVnaXN0ZXIgL2Rldi9yYW5kb21cbiIpOworCWlmIChkZXYgPT0gTlVMTCkg
eworCQl1a19wcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciAnJXMnIHRvIGRldmZzXG4iLAorCQkJ
ICBERVZfUkFORE9NX05BTUUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7CiB9CisK
K2RldmZzX2luaXRjYWxsKGRldmZzX3JlZ2lzdGVyKTsKLS0gCjIuMjAuMQoKCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5n
IGxpc3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVu
cHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 20:44:15 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 20:44:15 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iF2Wj-0003jQ-Jh; Mon, 30 Sep 2019 20:44:13 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XUvQ=XZ=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iF2Wi-0003jL-LG
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 20:44:12 +0000
X-Inumbo-ID: 0d963abc-e3c3-11e9-96e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.41]) by localhost (Halon) with ESMTPS
 id 0d963abc-e3c3-11e9-96e6-12813bfff9fa;
 Mon, 30 Sep 2019 20:44:10 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=gQ649FUJHOroeU8x4pUjfVMFTrMIecWStB5mCNihI1O0lfVZ4Yd3mGMGrGFURmL9n44yR8s9lGJSn8jF8r2wTK0EA6hEg1NQuLpQRgMWIC3vvs5G1hO1ngpd0iuFpo2uHAdVZirnY7UU6P9gDg5d7w2gs5nj4GP3kGnvg5NHDGJCtRmkM9on16A30LzPdN5lJlsfrWhrS9fYfmp95j0/EPDIXqDf9yt12DuP3zWsKmmyvYDdUUVrqSz+O5ifGxBh1lk5Z0dc3AquWS0fs/TVvXG9/AOPGtl0s00m2Yh3BQ5NM0DgaNUBFgghB99E/6fIQqGyAR1VNHPyP3DfXFBSIg==
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=IHnKNYJdwQQaGVZGiMMMVLwy9e1TKdokdczOpEsNrmA=;
 b=LBccYTUuyB7+HGk6E2FtUVqZC7so+vWmLQrfHSLn264/bdTn9ICWaM33YunYR1LLwV40InVBDNS6+K9rnz7HOO2IqkA6+Vx5jz6sDwhQq+6Z2HalhgW+9o6hcl6/lKvMiw4IsLG/JvCyzDGrOOILIx5Za/dk9sNJG02052rmtI2ojSS4QD78DaU6uO3qtY9x5ofpROQWVBKBzT/fvQbdUg0le0dBS6Jcp9UPuFFRN+cmuEdEWIFFnEr7fiB82hLK8mjhrNa5DppHjRYNdrTAUIJJfN796+cniIbqhNj0kP88csxmUnDnJ2uyA91QNAmAXASykUEXQS7Xbo8MJq40aA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4809.eurprd01.prod.exchangelabs.com (20.177.210.159) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Mon, 30 Sep
 2019 20:44:08 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312%4]) with mapi id 15.20.2305.017; Mon, 30 Sep 2019
 20:44:08 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBBENCHMARK PATCH 0/5] Port benchmark on Unikraft
Thread-Index: AQHVd8/N8rOPRW0zD0KjB6d5P9cziQ==
Date: Mon, 30 Sep 2019 20:44:07 +0000
Message-ID: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0302CA0005.eurprd03.prod.outlook.com
 (2603:10a6:800:e9::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8805:2f00:5d56:4b1:ce5c:b33d]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 3fc4a379-7241-4ea4-6e84-08d745e6f052
x-ms-traffictypediagnostic: PR1PR01MB4809:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB4809AC5ED568E1E6D8333F3EA6820@PR1PR01MB4809.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:2887;
x-forefront-prvs: 01762B0D64
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(376002)(346002)(39840400004)(136003)(199004)(189003)(86362001)(6512007)(25786009)(81166006)(8676002)(81156014)(558084003)(5640700003)(8936002)(1076003)(316002)(50226002)(786003)(14454004)(66946007)(4326008)(508600001)(66446008)(66556008)(64756008)(66476007)(256004)(14444005)(6916009)(46003)(2906002)(6116002)(5660300002)(99286004)(102836004)(6506007)(386003)(71200400001)(45776006)(186003)(71190400001)(52116002)(2351001)(2501003)(305945005)(6486002)(486006)(7736002)(476003)(2616005)(6436002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4809;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: Ps313Xb40d+ypByijCGchL91ghnSrwJZNL8jqKiYbjIkLCF8Zl3jl5zgyONjbEBSblL6+2RMrykDJ6xwgnivlXb8ihrkKSL1vk3+1UN4teRnICfS2icgpr1YiGS7cVIjIq+JN+Qg0uD0R36P4melwZCaduzEt3OXa/YdBf9Bg5O118jqnhaIQlB4i8WRd0493OFdpl76UEZMvhp1qWHwMuohT3JstVKLNpc7p1fp67i5xJ5nzv9bfD7FekX1ifHcnM0perczoxZT//J4NuA8UKXArM6AYevqtJDSLlxXB+Tey+mwtZQuJdLVECJyuIAp93lPtdlYlgiXt6V3K4KKZJmx4eX9WEEu4rM607oUwv/FRpowEixkZZAS0LtVLb3LWRbSL7A9D+3QiaV/Tu8iB3u+Rj3vWGGHiojNXtm6ZFU=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 3fc4a379-7241-4ea4-6e84-08d745e6f052
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2019 20:44:07.6151 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: s+2/mAWpa8mXv8OX5bV+TdLHS9kbhXT+JXPhfIHSG418zXhJ3B6NtVsNnHnfpHV0RuM8bpjc++e6wjitO+PWiPhgX/4kYj5GzhDokmG2LA9qwDpCTQVA4/Ef119gPO5v
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4809
Subject: [Minios-devel] [UNIKRAFT/LIBBENCHMARK PATCH 0/5] Port benchmark on
 Unikraft
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

VGhpcyBpcyBvdXIgaW5pdGlhbCBwb3J0IG9mIGJlbmNobWFyayB0byBVbmlrcmFmdC4gSXQgaXMg
YSBsaWJyYXJ5IAp0byBiZW5jaG1hcmsgY29kZSBzbmlwcGV0cywgc2ltaWxhciB0byB1bml0IHRl
c3RzLgoKVmxhZC1BbmRyZWkgQmFkb2l1ICg1KToKICBJbnRyb2R1Y2UgbGlicmFyeSBza2VsZXRv
bgogIEFkZCBNYWtlZmlsZS51awogIHBhdGNoZXM6IEZpeCBidWlsZCBpc3N1ZXMKICBBZGQgZ2x1
ZS5jYyBmb3Igc3R1YmJlZCBmdW5jdGlvbnMKICBSRUFETUUubWQ6IFVwZGF0ZSB3aXRoIGluZm8g
YWJvdXQgYnVpbGRpbmcKCi0tIAoyLjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpNaW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZl
bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt
YW4vbGlzdGluZm8vbWluaW9zLWRldmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 20:44:18 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 20:44:18 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iF2Wo-0003jx-MJ; Mon, 30 Sep 2019 20:44:18 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XUvQ=XZ=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iF2Wn-0003jq-I3
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 20:44:17 +0000
X-Inumbo-ID: 0f0ae104-e3c3-11e9-96e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.41]) by localhost (Halon) with ESMTPS
 id 0f0ae104-e3c3-11e9-96e6-12813bfff9fa;
 Mon, 30 Sep 2019 20:44:12 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=HZZmokz1AynQU8GmXzMpNzTsz7ugOG27k3PfQQPOt21xKJ5wWh9pcekzu4xhdYZYrQ1KbPizDDuR/kJTkMcnQ61posl2RZ0z/s5yOOUUh0n0kMmbG0V/Ak/bcilIQNN0K/7b7TepKjuklQKQfAKBxQxVnhCiQmm/h4R2tXov78Vpn1Holz3emEHWt68srOsN1CG+vVLs4gUNphtMPAnDUquEDJIxWnm2cMkb5QihFZsd1Y4OYScrP7ikQw2b5PyIq/1koa5KsvUc0MUTxra0XE7EaCYSDQT+UWzOXd4A2Wj6tvbneD7x9IIYutmzthBZitKJc3G8p+KJ/OuWJi33lQ==
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=HxGxLh+DpVAjZ2iyqjBs5yw5hsubEpZQ48P8EQStmUU=;
 b=G9tkjHvIVT1EuO1HjFCDnge+k7Xtqw4ZiSKVVOysewmMcMQMpWO5LsK/Nyp7gSNqnYTuV4jJi4kPsgw3MaoqrCNSxCmeRc5NkGlOp6WBoFlzn8XQkOSj+4hcIG427mR9FuSqPvdwT0uSqI3y3/JL1TK5wFhKikxGc+HM/T3D7WZwBEPqZfQLLKiik9vDFiEj8rBC4Ngj4BoZkNbBvFvFbeA6ZorsVtuPkhuzZv6gQ6NpKxcgaBVeOUO4o1QvS4+MKMhxniI5PJgxNBVsqHKvuY+5RJdyI5j3ffJhiKYipecmz6LiqB2sPQT3r/FzowaAlCGYX74esk9q5dlaGh51IQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4809.eurprd01.prod.exchangelabs.com (20.177.210.159) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Mon, 30 Sep
 2019 20:44:09 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312%4]) with mapi id 15.20.2305.017; Mon, 30 Sep 2019
 20:44:09 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBBENCHMARK PATCH 1/5] Introduce library skeleton
Thread-Index: AQHVd8/O50bIy3xkHEeYqwVibYC3uw==
Date: Mon, 30 Sep 2019 20:44:08 +0000
Message-ID: <20190930204359.9659-2-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0302CA0005.eurprd03.prod.outlook.com
 (2603:10a6:800:e9::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8805:2f00:5d56:4b1:ce5c:b33d]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: d4def80a-070c-42b1-4dd8-08d745e6f0ec
x-ms-traffictypediagnostic: PR1PR01MB4809:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48094ADA8ABA31D8989F4627A6820@PR1PR01MB4809.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 01762B0D64
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(376002)(346002)(39840400004)(136003)(199004)(189003)(86362001)(6512007)(25786009)(81166006)(8676002)(81156014)(5640700003)(8936002)(1076003)(316002)(50226002)(786003)(14454004)(66946007)(4326008)(508600001)(66446008)(66556008)(64756008)(66476007)(256004)(14444005)(6916009)(46003)(2906002)(446003)(11346002)(6116002)(5660300002)(99286004)(102836004)(6506007)(386003)(71200400001)(45776006)(186003)(76176011)(71190400001)(52116002)(2351001)(2501003)(305945005)(6486002)(486006)(7736002)(476003)(2616005)(6436002)(54906003)(2004002);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4809;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: hllqHPOKXXNai2OBGlHuF7PGQlqg2VKJf29LTNR3Kla/GRdDrnAHSiZ3YqPOaDN5qdkflTGpBlv/AtupoDPmfMLe2K78Gyh7Cpb+Cf0MnN32ikIVuzZhm/BWSKnP+vfw8PvrMFf6mSHY91ZiIdxr93IEALwm8sJI7phX2gBh7c8KXH3t/MLMb1yPeDDlmGh4xqot2gHqdwDRC61gL3Ds12TUSLc6wABYgdGaxNhTpDD5WxrwXE4kamQptsE92O0v328sJQP5ofTetP/h0CuTcfLXIHsJqxxZ7iGiK1/3uhhPEWxHNYI0h9mTA3pi57zhEy09FW3+RuEU6r3acxKdBwpNVjEV2B821NyQsjdt++02hnD0bMtkGCT9CMbOGdUFSYY/H8NhbDA4crwfbEaa5euBs8+eh2eSpHagn56LpHU=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: d4def80a-070c-42b1-4dd8-08d745e6f0ec
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2019 20:44:08.7075 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 1B4GShDLCBZnn/s8q35hNLdRNRowYcoxxBbwAZSHeu+angH8siF2jva2bhH1h6IwYJhEq4h1kp7p9XRFVeKAuyaWPpS9htg2/ZkhySPHUFCBm7/F69pu6sC4r+lX8mx4
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4809
Subject: [Minios-devel] [UNIKRAFT/LIBBENCHMARK PATCH 1/5] Introduce library
 skeleton
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgdXNlIHRoZSBCU0QtMy1DbGF1c2UgbGljZW5zZSBmb3IgdGhpcyBsaWJyYXJ5IGdsdWUgY29k
ZS4KClNpZ25lZC1vZmYtYnk6IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxhZF9hbmRyZWkuYmFkb2l1
QHN0dWQuYWNzLnVwYi5ybz4KLS0tCiAuZ2l0aWdub3JlICAgICAgfCAyNyArKysrKysrKysrKysr
KysrKysrKysrKysrKysKIENPRElOR19TVFlMRS5tZCB8ICA0ICsrKysKIENPTlRSSUJVVElORy5t
ZCB8ICA0ICsrKysKIENPUFlJTkcubWQgICAgICB8IDMwICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKwogQ29uZmlnLnVrICAgICAgIHwgIDkgKysrKysrKysrCiBNQUlOVEFJTkVSUy5tZCAg
fCAxMSArKysrKysrKysrKwogUkVBRE1FLm1kICAgICAgIHwgIDcgKysrKysrKwogNyBmaWxlcyBj
aGFuZ2VkLCA5MiBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgLmdpdGlnbm9yZQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IENPRElOR19TVFlMRS5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENP
TlRSSUJVVElORy5tZAogY3JlYXRlIG1vZGUgMTAwNjQ0IENPUFlJTkcubWQKIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBDb25maWcudWsKIGNyZWF0ZSBtb2RlIDEwMDY0NCBNQUlOVEFJTkVSUy5tZAogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFJFQURNRS5tZAoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0
aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDJmZDMKLS0tIC9k
ZXYvbnVsbAorKysgYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMjcgQEAKKyouZGVwZW5kCisqLm8K
KyouYQorKi5kCisqLnNvCisqLm9yaWcKKyoucmVqCisqLmJhaworKi5zd3AKKyp+CissKgorXCMq
XCMKKy5cIyoKK1wjXypcIworLlwjXyoKKyEuZ2l0aWdub3JlCisuKgorCisjIGdudSBnbG9iYWwg
ZmlsZXMKK0dQQVRICitHUlRBR1MKK0dTWU1TCitHVEFHUworCisjIGNzY29wZSBmaWxlcworY3Nj
b3BlLioKK25jc2NvcGUuKgpkaWZmIC0tZ2l0IGEvQ09ESU5HX1NUWUxFLm1kIGIvQ09ESU5HX1NU
WUxFLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MzAwNDEKLS0tIC9k
ZXYvbnVsbAorKysgYi9DT0RJTkdfU1RZTEUubWQKQEAgLTAsMCArMSw0IEBACitDb2RpbmcgU3R5
bGUKKz09PT09PT09PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT0RJTkdfU1RZTEUubWRg
IGZpbGUgaW4gdGhlIG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPTlRS
SUJVVElORy5tZCBiL0NPTlRSSUJVVElORy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41ZjU1ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvQ09OVFJJQlVUSU5HLm1kCkBAIC0w
LDAgKzEsNCBAQAorQ29udHJpYnV0aW5nIHRvIFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09
PT09PQorCitQbGVhc2UgcmVmZXIgdG8gdGhlIGBDT05UUklCVVRJTkcubWRgIGZpbGUgaW4gdGhl
IG1haW4gVW5pa3JhZnQgcmVwb3NpdG9yeS4KZGlmZiAtLWdpdCBhL0NPUFlJTkcubWQgYi9DT1BZ
SU5HLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllODQ0ZDcKLS0tIC9k
ZXYvbnVsbAorKysgYi9DT1BZSU5HLm1kCkBAIC0wLDAgKzEsMzAgQEAKK0xpY2Vuc2UKKz09PT09
PT0KKworVW5pa3JhZnQgYmVuY2htYXJrIHdyYXBwZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK1RoaXMgcmVwb3NpdG9yeSBjb250YWlucyB3cmFwcGVyIGNvZGUgdG8gYnVpbGQgYmVuY2ht
YXJrIHdpdGggVW5pa3JhZnQuCitFYWNoIEMgY29kZSBmaWxlIGluIHRoaXMgcmVwb3NpdG9yeSBz
aG91bGQgZGVjbGFyZSB3aG8gaXMgdGhlCitjb3B5cmlnaHQgb3duZXIgYW5kIHVuZGVyIHdoaWNo
IHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZSBjb2RlIGlzCitsaWNlbnNlZC4gSWYgc3VjaCBhIGxp
Y2VuY2Ugbm90ZSBpcyBtaXNzaW5nLCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodAorbm90aWNlIHdp
bGwgYXBwbHk6CisKKwlDb3B5cmlnaHQgKGMpIDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Eg
b2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIAorCXJlc2VydmVkLgorCisJVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorCW1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKwlMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
Kwl2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisJCisJVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisJYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKwlNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorCUxlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisJCisJWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworCUxpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnkgaW4gdGhlIGZpbGUgQ09QWUlORy5MSUI7CisJaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorCTU5IFRlbXBs
ZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EKKwpkaWZmIC0t
Z2l0IGEvQ29uZmlnLnVrIGIvQ29uZmlnLnVrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmNhZTJmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Db25maWcudWsKQEAgLTAsMCArMSw5
IEBACittZW51Y29uZmlnIExJQkJFTkNITUFSSworCWJvb2wgIkJlbmNobWFyayAtIEEgbWljcm9i
ZW5jaG1hcmsgc3VwcG9ydCBsaWJyYXJ5IgorCXNlbGVjdCBMSUJDWFgKKwlzZWxlY3QgTElCUFRI
UkVBRF9FTUJFRERFRAorCXNlbGVjdCBDWFhfVEhSRUFEUworCXNlbGVjdCBVS1VOSVNURAorCXNl
bGVjdCBVS1NZU0lORk8KKwlkZWZhdWx0IG4KKwpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMubWQg
Yi9NQUlOVEFJTkVSUy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGY5
OThmCi0tLSAvZGV2L251bGwKKysrIGIvTUFJTlRBSU5FUlMubWQKQEAgLTAsMCArMSwxMSBAQAor
TWFpbnRhaW5lcnMgTGlzdAorPT09PT09PT09PT09PT09PQorCitGb3Igbm90ZXMgb24gaG93IHRv
IHJlYWQgdGhpcyBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIGBNQUlOVEFJTkVSUy5tZGAg
aW4KK3RoZSBtYWluIFVuaWtyYWZ0IHJlcG9zaXRvcnkuCisKKwlMSUJCRU5DSE1BUkstVU5JS1JB
RlQKKwlNOglGZWxpcGUgSHVpY2kgPGZlbGlwZS5odWljaUBuZWNsYWIuZXU+CisJTToJVmxhZC1B
bmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgorCUw6CW1p
bmlvcy1kZXZlbEBsaXN0cy54ZW4ub3JnCisJRjogKgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIv
UkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTM4NDQKLS0t
IC9kZXYvbnVsbAorKysgYi9SRUFETUUubWQKQEAgLTAsMCArMSw3IEBACitiZW5jaG1hcmsgZm9y
IFVuaWtyYWZ0Cis9PT09PT09PT09PT09PT09PT09CisKK1RoaXMgaXMgdGhlIHBvcnQgb2YgYmVu
Y2htYXJrIGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5LgorCitQbGVhc2UgcmVmZXIg
dG8gdGhlIGBSRUFETUUubWRgIGFzIHdlbGwgYXMgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIGBk
b2MvYAorc3ViZGlyZWN0b3J5IG9mIHRoZSBtYWluIHVuaWtyYWZ0IHJlcG9zaXRvcnkuCi0tIAoy
LjIwLjEKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpN
aW5pb3MtZGV2ZWwgbWFpbGluZyBsaXN0Ck1pbmlvcy1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9y
ZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8vbWluaW9zLWRl
dmVs

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 20:44:23 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 20:44:23 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iF2Wt-0003kW-OG; Mon, 30 Sep 2019 20:44:23 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XUvQ=XZ=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iF2Ws-0003kQ-Kc
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 20:44:22 +0000
X-Inumbo-ID: 0f0ae105-e3c3-11e9-96e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.41]) by localhost (Halon) with ESMTPS
 id 0f0ae105-e3c3-11e9-96e6-12813bfff9fa;
 Mon, 30 Sep 2019 20:44:13 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=GQElXrvuGL92sg1vPyhEhutf2HzCqxA2kOhq7P6hFVssnOMd2TWpEPxGFAmXfUlZ5OY4usGQRJq5O072WbnXTIF6jtzGypxqXQYGOagZfv/H4MaD7vRehNHC0aZLyjEmfvLrk9thzWGDpiqMdce0CTAckhTupaQB1x60PV4iIctapzj3L3lL50Oa7wgTNMhT0xSqi0gsirTYjzASUKrLLy+3b/AOvqF+/Qk/5SrrZkd5aYMefWR2CVgD46wyLjncZO43QUjcPeaiThV2o7VNqjk60U9F63zEtSvj3bUkX8YhdTDZlq9z8Y3jb13Hu7QFTPV4fKMYkcZnoF48SEA+oA==
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=nyKbT7LjEmUwBh4w+v5tF709ieCbg1sT9dmkX1L75Q0=;
 b=EJaZyOWlQFX/Q6I4nRysCioifAtdXkJ6Lbjbw7p51DmlGyqxcUSGFi2Qba4mMGD4HdPkrcY1sMw5/WVUcga9TmMgZDU/lhwUOMTNRhNYAIurur25YVcLybppBW/aXfCRDIHwbNxve+WyeBo2FmFqV8/uAYB5Si85JATmaL2WBkpE+8SImclFdmLhFrer/K2qsD/xTJFDj6lwFr8L39RCYufD4+e3dgFLVKlXKqjamoOEpAlu+GJar0h6YEDxqw4UIq96MSKka4XFBqds9WT3ZYrg8MnRVCQ2RkmyW1/Qs3MfMWdUNhZGGFAdV231qsmUjPQzoTd6LZV6y/KNGqF7bA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4809.eurprd01.prod.exchangelabs.com (20.177.210.159) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Mon, 30 Sep
 2019 20:44:09 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312%4]) with mapi id 15.20.2305.017; Mon, 30 Sep 2019
 20:44:09 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBBENCHMARK PATCH 2/5] Add Makefile.uk
Thread-Index: AQHVd8/P7NKUMgyZZEm/QRrwd5HH9w==
Date: Mon, 30 Sep 2019 20:44:09 +0000
Message-ID: <20190930204359.9659-3-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0302CA0005.eurprd03.prod.outlook.com
 (2603:10a6:800:e9::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8805:2f00:5d56:4b1:ce5c:b33d]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 8454b70e-10b1-4a56-3397-08d745e6f169
x-ms-traffictypediagnostic: PR1PR01MB4809:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB4809F3352521C45C45509958A6820@PR1PR01MB4809.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:7691;
x-forefront-prvs: 01762B0D64
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(376002)(346002)(39840400004)(136003)(199004)(189003)(86362001)(6306002)(6512007)(25786009)(81166006)(8676002)(81156014)(5640700003)(8936002)(1076003)(316002)(50226002)(786003)(14454004)(66946007)(4326008)(508600001)(66446008)(66556008)(64756008)(66476007)(256004)(14444005)(6916009)(46003)(2906002)(446003)(11346002)(6116002)(5660300002)(99286004)(102836004)(6506007)(386003)(71200400001)(45776006)(186003)(76176011)(71190400001)(52116002)(2351001)(2501003)(305945005)(6486002)(486006)(7736002)(476003)(2616005)(6436002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4809;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: aEKYP5TK+NDPSLrz3rd7G+th874k7VxFSPsEzD/VvmQnaVplo59OJeWGEWXVASI/u9tQGEU1NFpdBUhtSkKh3FCc2OFlEmpnlHZbj9VfXfJXX7xxpnY31S1UYdoB8jqfiGC975PWuhm87klfeviQg3XTy5rXPBtubggSN0Sj5Xygbn7tFAFWeEyTyLZHo95MxBzy3m164N+8SlEyM1zp8m6JhzSPsZUpfMsRCVB4CkUwMgiKt0IBuAceXsf4tRMrOFbvm3thcTDHpTI415l0PfaruucU/qe+DxLN4GcJ0V/VgYyoWv5oEbyWDApkJSVYjyog0xcFLgHyH9wgDFqLcItNctaVyTpXtsh5sFdbQafjaykskRcpCE6w+FrLr10e2qaZwkCtU1si44EVLkdvzLNgpjbgEGl+ypRiuA/cPno=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 8454b70e-10b1-4a56-3397-08d745e6f169
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2019 20:44:09.2941 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: 71Kz3sIy3SOjbeQkbbS2nP01y9ypyz3nQR/bK2WwVbG7mnuIyH3u4UhiTCGPYAxxIzCPvmPYj4u3MLJn27ov/scstHR29CKsPVC1BnJKtBEkUYRHWFsuk2NnTfWHmxnZ
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4809
Subject: [Minios-devel] [UNIKRAFT/LIBBENCHMARK PATCH 2/5] Add Makefile.uk
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgotLS0KIE1ha2VmaWxlLnVrIHwgMTEwICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAxMTAgaW5z
ZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IE1ha2VmaWxlLnVrCgpkaWZmIC0tZ2l0IGEv
TWFrZWZpbGUudWsgYi9NYWtlZmlsZS51awpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4yN2UwNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvTWFrZWZpbGUudWsKQEAgLTAsMCArMSwx
MTAgQEAKKyMgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyMKKyMgIGJl
bmNobWFyayBNYWtlZmlsZS51aworIworIyAgQXV0aG9yczogVmxhZC1BbmRyZWkgQmFkb2l1IDx2
bGFkX2FuZHJlaS5iYWRvaXVAc3R1ZC5hY3MudXBiLnJvPgorIworIyAgQ29weXJpZ2h0IChjKSAy
MDE5LCBVbml2ZXJzaXR5IFBvbGl0ZWhuaWNhIG9mIEJ1Y2hhcmVzdC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjICBhcmUgbWV0OgorIworIyAg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIyAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgY29weXJpZ2h0
IGhvbGRlciBub3IgdGhlIG5hbWVzIG9mIGl0cworIyAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgICAgIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyMgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisjICBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFCisjICBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjICBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyAgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisjICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyMKKyMgIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElGSUVEIElO
IEFOWSBXQVkuCisjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnkgcmVnaXN0
cmF0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworJChldmFsICQoY2FsbCBhZGRsaWJfcyxs
aWJiZW5jaG1hcmssJChDT05GSUdfTElCQkVOQ0hNQVJLKSkpCisKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjCisjIFNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitMSUJCRU5DSE1BUktf
VkVSU0lPTj0xLjUuMAorTElCQkVOQ0hNQVJLX1VSTD1odHRwczovL2dpdGh1Yi5jb20vZ29vZ2xl
L2JlbmNobWFyay9hcmNoaXZlL3YkKExJQkJFTkNITUFSS19WRVJTSU9OKS50YXIuZ3oKK0xJQkJF
TkNITUFSS19QQVRDSERJUj0kKExJQkJFTkNITUFSS19CQVNFKS9wYXRjaGVzCiskKGV2YWwgJChj
YWxsIGZldGNoLGxpYmJlbmNobWFyaywkKExJQkJFTkNITUFSS19VUkwpKSkKKyQoZXZhbCAkKGNh
bGwgcGF0Y2gsbGliYmVuY2htYXJrLCQoTElCQkVOQ0hNQVJLX1BBVENIRElSKSxiZW5jaG1hcmst
JChMSUJCRU5DSE1BUktfVkVSU0lPTikpKQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBI
ZWxwZXJzCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworTElCQkVOQ0hNQVJLX1NVQkRJUj1iZW5j
aG1hcmstJChMSUJCRU5DSE1BUktfVkVSU0lPTikKK0xJQkJFTkNITUFSS19TUkMgPSAkKExJQkJF
TkNITUFSS19PUklHSU4pLyQoTElCQkVOQ0hNQVJLX1NVQkRJUikKKworIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKKyMgTGlicmFyeSBpbmNsdWRlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJ
QkJFTkNITUFSS19HTE9CQUxfSU5DTFVERVMteSArPSAtSSQoTElCQkVOQ0hNQVJLX1NSQykvc3Jj
CitMSUJCRU5DSE1BUktfR0xPQkFMX0lOQ0xVREVTLXkgKz0gLUkkKExJQkJFTkNITUFSS19TUkMp
L2luY2x1ZGUKK0NJTkNMVURFUy15ICs9ICQoTElCQkVOQ0hNQVJLX0dMT0JBTF9JTkNMVURFUy15
KQorQ1hYSU5DTFVERVMteSArPSAkKExJQkJFTkNITUFSS19HTE9CQUxfSU5DTFVERVMteSkKKwor
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ29tbW9uIGZsYWdzCisjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIworIyBTdXBwcmVzc2VkIGZsYWdzCitTVVBQUkVTU19GTEFHUyArPSAtV25vLXVudXNl
ZC1wYXJhbWV0ZXIgXAorCS1Xbm8tdW51c2VkLXZhcmlhYmxlIC1Xbm8tdW51c2VkLXZhbHVlIC1X
bm8tdW51c2VkLWZ1bmN0aW9uIFwKKwktV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIC1X
bm8taW1wbGljaXQtZmFsbHRocm91Z2ggXAorCS1Xbm8tY2FzdC1mdW5jdGlvbi10eXBlIC1Xbm8t
c3RyaW5nb3AtdHJ1bmNhdGlvbiBcCisJLVduby1jaGFyLXN1YnNjcmlwdHMgLVduby1zaWduLWNv
bXBhcmUKKworTElCQkVOQ0hNQVJLX0NGTEFHUy15CSs9ICQoU1VQUFJFU1NfRkxBR1MpIC1Xbm8t
cG9pbnRlci10by1pbnQtY2FzdCAtV25vLWludC10by1wb2ludGVyLWNhc3QKK0xJQkJFTkNITUFS
S19DWFhGTEFHUy15CSs9ICQoU1VQUFJFU1NfRkxBR1MpIC1Xbm8tcG9pbnRlci10by1pbnQtY2Fz
dCAtV25vLWludC10by1wb2ludGVyLWNhc3QKKworTElCQkVOQ0hNQVJLX0NGTEFHUy15CSs9ICAt
REJFTkNITUFSS19PU19MSU5VWCAtRENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEIFwKKwkJCQktRE5E
RUJVRyAtREJFTkNITUFSS19IQVNfU1lTQ1RMCisKK0xJQkJFTkNITUFSS19DWFhGTEFHUy15CSs9
ICAtREJFTkNITUFSS19PU19MSU5VWCAtRENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEIFwKKwkJCQkt
RE5ERUJVRyAtREJFTkNITUFSS19IQVNfU1lTQ1RMCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CisjIEdsdWUgY29kZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0xJQkJFTkNITUFSS19TUkNT
LXkgKz0gJChMSUJCRU5DSE1BUktfQkFTRSkvZ2x1ZS5jY3x1bmlrcmFmdAorCisjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBMaWJyYXJ5IHNvdXJjZXMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
CitMSUJCRU5DSE1BUktfU1JDUy15ICs9ICQoTElCQkVOQ0hNQVJLX1NSQykvc3JjL2NvbXBsZXhp
dHkuY2MKK0xJQkJFTkNITUFSS19TUkNTLXkgKz0gJChMSUJCRU5DSE1BUktfU1JDKS9zcmMvYmVu
Y2htYXJrX25hbWUuY2MKK0xJQkJFTkNITUFSS19TUkNTLXkgKz0gJChMSUJCRU5DSE1BUktfU1JD
KS9zcmMvY29uc29sZV9yZXBvcnRlci5jYworTElCQkVOQ0hNQVJLX1NSQ1MteSArPSAkKExJQkJF
TkNITUFSS19TUkMpL3NyYy9zbGVlcC5jYworTElCQkVOQ0hNQVJLX1NSQ1MteSArPSAkKExJQkJF
TkNITUFSS19TUkMpL3NyYy9iZW5jaG1hcmtfcnVubmVyLmNjCitMSUJCRU5DSE1BUktfU1JDUy15
ICs9ICQoTElCQkVOQ0hNQVJLX1NSQykvc3JjL2JlbmNobWFya19hcGlfaW50ZXJuYWwuY2MKK0xJ
QkJFTkNITUFSS19TUkNTLXkgKz0gJChMSUJCRU5DSE1BUktfU1JDKS9zcmMvY3N2X3JlcG9ydGVy
LmNjCitMSUJCRU5DSE1BUktfU1JDUy15ICs9ICQoTElCQkVOQ0hNQVJLX1NSQykvc3JjL3N0YXRp
c3RpY3MuY2MKK0xJQkJFTkNITUFSS19TUkNTLXkgKz0gJChMSUJCRU5DSE1BUktfU1JDKS9zcmMv
anNvbl9yZXBvcnRlci5jYworTElCQkVOQ0hNQVJLX1NSQ1MteSArPSAkKExJQkJFTkNITUFSS19T
UkMpL3NyYy9yZXBvcnRlci5jYworTElCQkVOQ0hNQVJLX1NSQ1MteSArPSAkKExJQkJFTkNITUFS
S19TUkMpL3NyYy9jb21tYW5kbGluZWZsYWdzLmNjCitMSUJCRU5DSE1BUktfU1JDUy15ICs9ICQo
TElCQkVOQ0hNQVJLX1NSQykvc3JjL2JlbmNobWFya19yZWdpc3Rlci5jYworTElCQkVOQ0hNQVJL
X1NSQ1MteSArPSAkKExJQkJFTkNITUFSS19TUkMpL3NyYy9zeXNpbmZvLmNjCitMSUJCRU5DSE1B
UktfU1JDUy15ICs9ICQoTElCQkVOQ0hNQVJLX1NSQykvc3JjL3N0cmluZ191dGlsLmNjCitMSUJC
RU5DSE1BUktfU1JDUy15ICs9ICQoTElCQkVOQ0hNQVJLX1NSQykvc3JjL2JlbmNobWFyay5jYwor
TElCQkVOQ0hNQVJLX1NSQ1MteSArPSAkKExJQkJFTkNITUFSS19TUkMpL3NyYy9jb3VudGVyLmNj
CisjTElCQkVOQ0hNQVJLX1NSQ1MteSArPSAkKExJQkJFTkNITUFSS19TUkMpL3NyYy9iZW5jaG1h
cmtfbWFpbi5jYworTElCQkVOQ0hNQVJLX1NSQ1MteSArPSAkKExJQkJFTkNITUFSS19TUkMpL3Ny
Yy90aW1lcnMuY2MKK0xJQkJFTkNITUFSS19TUkNTLXkgKz0gJChMSUJCRU5DSE1BUktfU1JDKS9z
cmMvY29sb3JwcmludC5jYwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2
ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWls
bWFuL2xpc3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 20:44:28 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 20:44:28 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iF2Wy-0003lH-Q9; Mon, 30 Sep 2019 20:44:28 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XUvQ=XZ=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iF2Wx-0003l8-Ks
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 20:44:27 +0000
X-Inumbo-ID: 1066750e-e3c3-11e9-96e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.41]) by localhost (Halon) with ESMTPS
 id 1066750e-e3c3-11e9-96e6-12813bfff9fa;
 Mon, 30 Sep 2019 20:44:14 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MK5Yz4IMVC9low00cVmNXF+pIWpI27y6FR8mO7TGuqma3IDdMEDMwnc6i+DWtqFhX6NQ4w5Wr6DPTX5ijF1mCZB+YBCeXFLWnBScvBfcxqgriTaVfBbMU2GVDYf9sQYma7aAPxODpuEKeTBquqS/dZTNRl3eo2Wn8PjkIFRBbk0ud9XIfdk8us3nHZY8X3y/QJ7Zwo1cm0c8/Ilac3U7yHxYb+rA9m2ReLlzFybB7AsmKPOb0HuGdU6Femzn2HrhMEzQ1MNvEkLmUfFIP18Jbk9rvyP64p7y4ForVigCrwCeODwnyy5JWxENhjpwH/eujb/SWrtzUj471nQNfrZyNQ==
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=WW6whxbPb5s13sJFT05k4+TFEEy89bRxp1LoA1ZKpOE=;
 b=VMvLKR9wMdcJr2COTCVGBSTi2yjT3aFHqvstYoH1R/Zkh15NqSBoG1g6/ka83ePXxLxESczM2mi2h+XKvjh4qZNIxzbKDr+Z7DXKSwIh63AmAp9pyFontUVmc4t1wYxBD8+WPWhiqE0sluflJkdR8ob8nl1ccIMwXLKGPMvH1OOmYrc2P/hRXMTCj5q1dsTek0EHJO/yegOCuS/t2OI+QCyJQ4BDFCz+leSzD4UCfLAKNmOU9aYIHe6gTqFPxqLo8J6zbbVOkNizjcl7FZqC48RUYWIOIahaaaxbNuNdM4fjYpny91DUuSTF93/fAltfkCmFk6jppBisuE4wQds77w==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4809.eurprd01.prod.exchangelabs.com (20.177.210.159) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Mon, 30 Sep
 2019 20:44:11 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312%4]) with mapi id 15.20.2305.017; Mon, 30 Sep 2019
 20:44:11 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBBENCHMARK PATCH 3/5] patches: Fix build issues
Thread-Index: AQHVd8/PmsbV0MEIeUWBtOdAbXi1Zw==
Date: Mon, 30 Sep 2019 20:44:10 +0000
Message-ID: <20190930204359.9659-4-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0302CA0005.eurprd03.prod.outlook.com
 (2603:10a6:800:e9::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8805:2f00:5d56:4b1:ce5c:b33d]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 5145fca3-54dc-40b2-a103-08d745e6f1d5
x-ms-traffictypediagnostic: PR1PR01MB4809:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48091EC1634317A282BB9540A6820@PR1PR01MB4809.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:345;
x-forefront-prvs: 01762B0D64
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(376002)(346002)(39840400004)(136003)(199004)(189003)(86362001)(6512007)(25786009)(81166006)(8676002)(81156014)(5640700003)(8936002)(1076003)(316002)(50226002)(786003)(14454004)(66946007)(4326008)(508600001)(66446008)(66556008)(64756008)(66476007)(256004)(6916009)(46003)(2906002)(446003)(11346002)(6116002)(5660300002)(99286004)(102836004)(6506007)(386003)(71200400001)(45776006)(186003)(76176011)(71190400001)(52116002)(2351001)(2501003)(305945005)(6486002)(486006)(7736002)(476003)(2616005)(6436002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4809;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: KC039s+MWUCfqk22556bW8IZ7FTw+0wAa3YxpAVwy/cEEpUJuCPRvcIRj3PKRHTTeBWNAzwOcEoiK6CGpPvrHePRQdHTw/oZo9qs3EePtnmfMlmsbQHpZWlt0im0ryHQPIb30MMZhs8Avx8S0NpGc7QWFwaEAE/HghBC+iTucPp/HmFQ0lA85WkQzr+iY+W5KX8u4AHCvMsM4IF5W9e+f+3gBDy95nrH79LYlS3yBoqbsOhIBXJqCexlUBm9VvP3FQW2h4JHfc3EzsqdBA4zSVftHpeiG+7poaEBO92K1K5gc93sCqGFD0ZdM/mBccvXoz34PCVljXxFk2OjXScT5DIx01Rp0iNT+B4d+qNWNNdwLORK/tlWsw5g+s0r+OE+nKVVbUSVQbXXM0m8RDcjo/tK8ExLdRaemjYcMMCVYA4=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 5145fca3-54dc-40b2-a103-08d745e6f1d5
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2019 20:44:10.4025 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: wSyHo4PS/pqx19/qz7PNjp1TaM3hlDkTS/udPLqHIHW031w7CXq1meNU8nYSgYw0IqZmjXyxwoy5agLqCgYPLNIO14NUBt6JuD6onLMmHzY0bWu3ila5L7UHxoInkwWV
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4809
Subject: [Minios-devel] [UNIKRAFT/LIBBENCHMARK PATCH 3/5] patches: Fix build
 issues
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgotLS0KIC4uLmFuZC1zeXNjdGxieW5hbWUtYXMtZXh0ZXJuYWwtc3ltYm9s
cy5wYXRjaCB8IDI4ICsrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNl
cnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgcGF0Y2hlcy8wMDAxLUFkZC1nZXRsb2FkYXZn
LWFuZC1zeXNjdGxieW5hbWUtYXMtZXh0ZXJuYWwtc3ltYm9scy5wYXRjaAoKZGlmZiAtLWdpdCBh
L3BhdGNoZXMvMDAwMS1BZGQtZ2V0bG9hZGF2Zy1hbmQtc3lzY3RsYnluYW1lLWFzLWV4dGVybmFs
LXN5bWJvbHMucGF0Y2ggYi9wYXRjaGVzLzAwMDEtQWRkLWdldGxvYWRhdmctYW5kLXN5c2N0bGJ5
bmFtZS1hcy1leHRlcm5hbC1zeW1ib2xzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjcyNjA2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9wYXRjaGVzLzAwMDEtQWRkLWdl
dGxvYWRhdmctYW5kLXN5c2N0bGJ5bmFtZS1hcy1leHRlcm5hbC1zeW1ib2xzLnBhdGNoCkBAIC0w
LDAgKzEsMjggQEAKK0Zyb20gMGU1MTkzY2FiM2EwMTIwMTk3ZmU2YjFmNjEwZTA5YTlkZTQ1ZmVm
MiBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKK0Zyb206IFZsYWQtQW5kcmVpIEJhZG9pdSA8dmxh
ZF9hbmRyZWkuYmFkb2l1QHN0dWQuYWNzLnVwYi5ybz4KK0RhdGU6IE1vbiwgMzAgU2VwIDIwMTkg
MDE6Mjg6NDEgKzAzMDAKK1N1YmplY3Q6IFtQQVRDSCAxLzFdIEFkZCBnZXRsb2FkYXZnIGFuZCBz
eXNjdGxieW5hbWUgYXMgZXh0ZXJuYWwgc3ltYm9scworCitTaWduZWQtb2ZmLWJ5OiBWbGFkLUFu
ZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9pdUBzdHVkLmFjcy51cGIucm8+CistLS0KKyBz
cmMvc3lzaW5mby5jYyB8IDQgKysrKworIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2VydGlvbnMoKykK
KworZGlmZiAtLWdpdCBhL3NyYy9zeXNpbmZvLmNjIGIvc3JjL3N5c2luZm8uY2MKK2luZGV4IDI4
MTI2NDcuLjE5OTM4ZTggMTAwNjQ0CistLS0gYS9zcmMvc3lzaW5mby5jYworKysrIGIvc3JjL3N5
c2luZm8uY2MKK0BAIC02NSw2ICs2NSwxMCBAQAorICNpbmNsdWRlICJzbGVlcC5oIgorICNpbmNs
dWRlICJzdHJpbmdfdXRpbC5oIgorIAorK2V4cG9ydCBpbnQgZ2V0bG9hZGF2Zyhkb3VibGUgbG9h
ZGF2Z1tdLCBpbnQgbmVsZW0pOworK2V4cG9ydCBpbnQgc3lzY3RsYnluYW1lKGNvbnN0IGNoYXIg
Km5hbWUsIHZvaWQgKm9sZHAsIHNpemVfdCAqb2xkbGVucCwKKysJY29uc3Qgdm9pZCAqbmV3cCwg
c2l6ZV90IG5ld2xlbik7CisrCisgbmFtZXNwYWNlIGJlbmNobWFyayB7CisgbmFtZXNwYWNlIHsK
KyAKKy0tIAorMi4yMC4xCisKLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxpc3QKTWluaW9zLWRl
dmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvbWFp
bG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 20:44:33 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 20:44:33 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iF2X3-0003mI-Sd; Mon, 30 Sep 2019 20:44:33 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XUvQ=XZ=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iF2X2-0003m9-Id
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 20:44:32 +0000
X-Inumbo-ID: 1066750f-e3c3-11e9-96e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.41]) by localhost (Halon) with ESMTPS
 id 1066750f-e3c3-11e9-96e6-12813bfff9fa;
 Mon, 30 Sep 2019 20:44:15 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=TNLi5/AWUA8Hfiu+51jy+d64gV3Zut2fMERVfaqWcvQ2wvmIaCIbXFAWcp5o3Qfviutmw397e+J+MaR7cADFl5rSgf67YB4Y8Kgg0SR81FSoEbPkl+O82lln4T4WOIuMdkfCePFCiSfgDNhleQq9M2MJeCLhEeiE8+Vyt9wDBAJ6aF6OZYUjryfwbllTp5FygZ7dD8nsqmYYqmt2jewJSkJKmBqs+jCqhekxHJh5agsNzFqYdMmDWLvL5xscs6vg+nZAGRon5Gcw00YjIgUyGY4Pm0Tk3VL/MMSvVjibB/x3CrjnflFJnHastIF42C81EkPToMw67OmA7zjxpDwGRQ==
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=x1IsrP09R+71uWU9U+nfgQ++/f18nRpE7uLVMBuwh3k=;
 b=bU54BuPOL236uo90IBJrfPX9astUtLqCo4XK63Vj2Iix3Y6Bj16Z/xU5eD5T8FHUfyujSDKxffVp+hk3tkZ5NtRm9UBAMlJ5PlJOPbq8hdFaXEjhdisB0eiBcrpPESsP2V64hZ+uuCgde0WRMWIuZaSMs1xuwkKxDwBz8M6A65fgP44Gi2k3yTQZZ4BkxiZFNU/IHj5vx/Y8Qnq2veqGezZEwAsesodAPB8dw3CJmTaTdSs7lcJa2c6UNvx1fP2sH/lrH10uZJCD9MHE6jvMwoRK/+6zy7yMm5sUQQxn8t4OIkCGZdA7b9sMPeZa3dC1cYhL7tHD/sQpFVXJRWU1fg==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4809.eurprd01.prod.exchangelabs.com (20.177.210.159) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Mon, 30 Sep
 2019 20:44:11 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312%4]) with mapi id 15.20.2305.017; Mon, 30 Sep 2019
 20:44:11 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBBENCHMARK PATCH 4/5] Add glue.cc for stubbed
 functions
Thread-Index: AQHVd8/QTyJEZ5kzskS34ZhGmdhe5g==
Date: Mon, 30 Sep 2019 20:44:11 +0000
Message-ID: <20190930204359.9659-5-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0302CA0005.eurprd03.prod.outlook.com
 (2603:10a6:800:e9::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8805:2f00:5d56:4b1:ce5c:b33d]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: 367bc543-6f70-4efc-94d4-08d745e6f2bd
x-ms-traffictypediagnostic: PR1PR01MB4809:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB48098240525EA1D1BAB5CB19A6820@PR1PR01MB4809.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:10000;
x-forefront-prvs: 01762B0D64
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(376002)(346002)(39840400004)(136003)(199004)(189003)(86362001)(6512007)(25786009)(81166006)(8676002)(81156014)(5640700003)(8936002)(1076003)(316002)(50226002)(786003)(14454004)(66946007)(4326008)(508600001)(66446008)(66556008)(64756008)(66476007)(256004)(14444005)(6916009)(46003)(2906002)(446003)(11346002)(6116002)(5660300002)(99286004)(102836004)(6506007)(386003)(71200400001)(45776006)(186003)(76176011)(71190400001)(52116002)(2351001)(2501003)(305945005)(6486002)(486006)(7736002)(476003)(2616005)(6436002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4809;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: P+u1G2cAYLyRu8ucWtvgbyA8EGxskpWSGu3njU805O9btFUlkIHIPy/L+k9fFFCslFYPF557z/eAUGcxagiQOjqGIDhAgwgYkQlJ6er6ofB/0/iWNK8JMmLElKROp+85pcSeOegVmzVMwXCgS8F/dpdLXyT+HjidfjAgMN/yoKWBDDeKdHNSnpjT+HiWjHuwgM93oO64MgBz+MWRyiTXjBPKJUvkilo7V4uBnNKWMmJt9nKHfp1CzCd0dgmdqpcPTO2S4efs6jCDqxZVrPpvepoiTD2t7T7LNDFrc2/HQfPO4KgaIocdkje/mmrcEmo61GSidlKMwH79DooFPHPBt31/snP9bFvn/TGfom3UjNmzUCTQ2zmgJnwaEdugxREApOIPgkL8GWw25A0mOypEWiCEsfAd0fMDYZFm88kcoRg=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: 367bc543-6f70-4efc-94d4-08d745e6f2bd
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2019 20:44:11.6777 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: QbNWqH0JKYdOhcwJWUF47/QSjbw4HL8qLb29NLmj2wW0HZYK8dhq0Zrja2a26tG+b5lK5cVoKuswuOw5+Zq+Hns3O7X2d/asGrAHC0BlLUciT3VHhJhFceqhRj5NvxSI
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4809
Subject: [Minios-devel] [UNIKRAFT/LIBBENCHMARK PATCH 4/5] Add glue.cc for
 stubbed functions
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

V2UgYWRkIHN0dWJzIGZvciBnZXRsb2FkYXZnIGFuZCBzeXNjdGxieW5hbWUuIFRoZXkgc2hvdWxk
IGJlIG1vdmVkIHRvIHVrc3lzaW5mbwpvbmNlIHdlIGhhdmUgYSBwcm9wZXIgaW1wbGVtZW50YXRp
b24uCgpTaWduZWQtb2ZmLWJ5OiBWbGFkLUFuZHJlaSBCYWRvaXUgPHZsYWRfYW5kcmVpLmJhZG9p
dUBzdHVkLmFjcy51cGIucm8+Ci0tLQogZ2x1ZS5jYyB8IDU1ICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1NSBp
bnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2x1ZS5jYwoKZGlmZiAtLWdpdCBhL2ds
dWUuY2MgYi9nbHVlLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OWUx
MmQKLS0tIC9kZXYvbnVsbAorKysgYi9nbHVlLmNjCkBAIC0wLDAgKzEsNTUgQEAKKy8qIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMp
IDIwMTksIFVuaXZlcnNpdHkgUG9saXRlaG5pY2Egb2YgQnVjaGFyZXN0LiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHly
aWdodCBob2xkZXIgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiAg
ICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICoKKyAqIFRISVMgSEVBREVSIE1BWSBOT1QgQkUgRVhUUkFDVEVEIE9SIE1PRElG
SUVEIElOIEFOWSBXQVkuCisgKi8KKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0
cmluZy5oPgorCitpbnQgZ2V0bG9hZGF2Zyhkb3VibGUgKmxvYWRhdmcsIGludCBuZWxlbSkKK3sK
KwlyZXR1cm4gMTsKK30KKworaW50CitzeXNjdGxieW5hbWUoY29uc3QgY2hhciAqbmFtZSwgdm9p
ZCAqb2xkcCwgc2l6ZV90ICpvbGRsZW5wLAorCWNvbnN0IHZvaWQgKm5ld3AsIHNpemVfdCBuZXds
ZW4pCit7CisJaWYgKG9sZHAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJCisJLyogV2UgZG8gbm90
IHN1cHBvcnQgU01QICovCisJaWYgKHN0cmNtcChuYW1lLCAiaHcubmNwdSIpID09IDApIHsKKwkJ
KihpbnQgKikgb2xkcCA9IDE7CisJCSooc2l6ZV90ICopIG9sZGxlbnAgPSAxOworCX0KKwlyZXR1
cm4gMDsKK30KKwotLSAKMi4yMC4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTWluaW9zLWRldmVsIG1haWxpbmcgbGlzdApNaW5pb3MtZGV2ZWxAbGlz
dHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xp
c3RpbmZvL21pbmlvcy1kZXZlbA==

From minios-devel-bounces@lists.xenproject.org Mon Sep 30 20:44:39 2019
Return-path: <minios-devel-bounces@lists.xenproject.org>
Envelope-to: archives@lists.xenproject.org
Delivery-date: Mon, 30 Sep 2019 20:44:39 +0000
Received: from localhost ([127.0.0.1] helo=lists.xenproject.org)
	by lists.xenproject.org with esmtp (Exim 4.89)
	(envelope-from <minios-devel-bounces@lists.xenproject.org>)
	id 1iF2X8-0003nl-Ud; Mon, 30 Sep 2019 20:44:38 +0000
Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]
 helo=us1-amaz-eas2.inumbo.com)
 by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from
 <SRS0=XUvQ=XZ=stud.acs.upb.ro=vlad_andrei.badoiu@srs-us1.protection.inumbo.net>)
 id 1iF2X7-0003nY-Ij
 for minios-devel@lists.xen.org; Mon, 30 Sep 2019 20:44:37 +0000
X-Inumbo-ID: 10667510-e3c3-11e9-96e6-12813bfff9fa
Received: from FRA01-MR2-obe.outbound.protection.outlook.com (unknown
 [40.107.9.41]) by localhost (Halon) with ESMTPS
 id 10667510-e3c3-11e9-96e6-12813bfff9fa;
 Mon, 30 Sep 2019 20:44:15 +0000 (UTC)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=jQ4PoQOlMFRIg/USO/gEUiiXTjRsr1JGftKdMZZfF3epzgR4CMq8vhLi5WMdtKUE8wgl0d4gwyp4JYVgWhpg0ZfF5aw5z2ImUKZJulImBYlMsFaUrAPGHC7tr496xlqs9h2D+6Luc3fp/afv58a2baexpykGAExJcQOq4YBcmpp3MMhNyD/yhKmvcFv4sJeG4PEvDn7xWcb2+GKx3gkUWSD4EHage8t6kAgGKES3cxosz21dZBIWGLD8vctIQ3orj+YOvxkxYb0n2SuhLwD7vtDdOCG+T2WB9tIt5YjLSju8v1G/Tz3828fwzA5dvmCRqC3C88rJ+qb4uZc9d00n3g==
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=EZz9EyITRqaQCXYJIjxRq/BjfJLd82xWuMZKZ/68bq0=;
 b=Xds675v0IERqQDVTc6rh+pCxM2I04wvQ864FmFzfBSiZcSSNey0KVG4+op3NiMluU5ZruoW5PaBcwrgC6Fpg4y90qx+8rbNllmJHt8L6ckSDf2U/KJV3svsdamSGvOU7NeRG7nw+qOH3WXKHU4sfXi5W/beNW2GoX5wRSdg2cvF5VE7w8VIay4rnJenhmvfRK5CYtWK6RKQ4eYDyFrGv0FFIeUBp4EO9wExu+qnGcseSg+qefBJuQTIeebK5v0/YlfBF1X/jw0pG9j4gH5zWTk8S76EIe0RHOjYJVCcw2OK1Yb/DVAvGFBm+/ad2fVBizKkvzZhZ/d7WbXF8WJd64Q==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=stud.acs.upb.ro; dmarc=pass action=none
 header.from=stud.acs.upb.ro; dkim=pass header.d=stud.acs.upb.ro; arc=none
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com (20.177.211.144)
 by PR1PR01MB4809.eurprd01.prod.exchangelabs.com (20.177.210.159) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2305.20; Mon, 30 Sep
 2019 20:44:12 +0000
Received: from PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312]) by PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 ([fe80::34de:94e:1843:b312%4]) with mapi id 15.20.2305.017; Mon, 30 Sep 2019
 20:44:12 +0000
From: =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
To: "minios-devel@lists.xen.org" <minios-devel@lists.xen.org>
Thread-Topic: [UNIKRAFT/LIBBENCHMARK PATCH 5/5] README.md: Update with info
 about building
Thread-Index: AQHVd8/QJ3aR+BfvUEG5gRyrM6vNFQ==
Date: Mon, 30 Sep 2019 20:44:12 +0000
Message-ID: <20190930204359.9659-6-vlad_andrei.badoiu@stud.acs.upb.ro>
References: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
In-Reply-To: <20190930204359.9659-1-vlad_andrei.badoiu@stud.acs.upb.ro>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach: 
X-MS-TNEF-Correlator: 
x-clientproxiedby: VI1PR0302CA0005.eurprd03.prod.outlook.com
 (2603:10a6:800:e9::15) To PR1PR01MB5068.eurprd01.prod.exchangelabs.com
 (2603:10a6:102:e::16)
authentication-results: spf=none (sender IP is )
 smtp.mailfrom=vlad_andrei.badoiu@stud.acs.upb.ro; 
x-ms-exchange-messagesentrepresentingtype: 1
x-mailer: git-send-email 2.20.1
x-originating-ip: [2a02:2f0b:8805:2f00:5d56:4b1:ce5c:b33d]
x-ms-publictraffictype: Email
x-ms-office365-filtering-correlation-id: e6cfbca9-385a-454c-a2e3-08d745e6f328
x-ms-traffictypediagnostic: PR1PR01MB4809:
x-ms-exchange-transport-forked: True
x-microsoft-antispam-prvs: <PR1PR01MB4809CD3490E8FF5ABD3493ACA6820@PR1PR01MB4809.eurprd01.prod.exchangelabs.com>
x-ms-oob-tlc-oobclassifiers: OLM:7691;
x-forefront-prvs: 01762B0D64
x-forefront-antispam-report: SFV:NSPM;
 SFS:(10009020)(366004)(396003)(376002)(346002)(39840400004)(136003)(199004)(189003)(86362001)(6512007)(25786009)(81166006)(8676002)(81156014)(5640700003)(8936002)(1076003)(316002)(50226002)(786003)(14454004)(66946007)(4326008)(508600001)(66446008)(66556008)(64756008)(66476007)(256004)(14444005)(6916009)(46003)(2906002)(446003)(11346002)(6116002)(5660300002)(99286004)(102836004)(6506007)(386003)(71200400001)(45776006)(186003)(76176011)(71190400001)(52116002)(2351001)(2501003)(305945005)(6486002)(486006)(7736002)(4744005)(476003)(2616005)(6436002)(54906003);
 DIR:OUT; SFP:1101; SCL:1; SRVR:PR1PR01MB4809;
 H:PR1PR01MB5068.eurprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en;
 PTR:InfoNoRecords; A:0; MX:1; 
received-spf: None (protection.outlook.com: stud.acs.upb.ro does not designate
 permitted sender hosts)
x-ms-exchange-senderadcheck: 1
x-microsoft-antispam: BCL:0;
x-microsoft-antispam-message-info: 0ojzk/6N4/YMGqFtYr6qdFylX1EjJoMB5ktseHXKqX4mcM4aJEGQYpFk7mvNp3N9T3Snj99dRq60ZVixrtPeMGS5U53yQIoskJO7I1DKWDze4lG5Mzuf6KhxjGRhZnCW3b8uG8niGRt5gtcOgUYbQjX6IPa1PwhML3q3nmPJ9xYQD/YZx/+9hIpRLslqPVISq1zrujDmevCJdE5OMAUeoJJuSWnWujpqf4f6gbXkU2zBM6L+zRXCC0ix75Qdw/TfUrDnumj3OUeING1DY49naLbr4RXSJyJs4caApvdXxE80gK57qwGVZLUIzB/6Vxz1EXm2DqURkNLHeVqrXv480f87GahUmlYTcpP6xJ5KeHic03ebPb0ZEB5APeZjMS5oV4hLdnKovTVV4nEyc4sPsox5z9N5cAmGxG69tkqGf0U=
MIME-Version: 1.0
X-OriginatorOrg: stud.acs.upb.ro
X-MS-Exchange-CrossTenant-Network-Message-Id: e6cfbca9-385a-454c-a2e3-08d745e6f328
X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Sep 2019 20:44:12.3534 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 2d8cc8ba-8dda-4334-9e5c-fac2092e9bac
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: Nu4rgFLe5kyt9sFEKAvS/hfjk4GOIjmgn7gmS2sp8O7uk5EEXmZuveC0rp8Iy/063W6Y1am4dC4X1i1x1WzHWkbO12yUOkCbkFvuitfxikeO9+aXN32u6+9NbVAvby8S
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR1PR01MB4809
Subject: [Minios-devel] [UNIKRAFT/LIBBENCHMARK PATCH 5/5] README.md: Update
 with info about building
X-BeenThere: minios-devel@lists.xenproject.org
X-Mailman-Version: 2.1.23
Precedence: list
List-Id: Mini-os development list <minios-devel.lists.xenproject.org>
List-Unsubscribe: <https://lists.xenproject.org/mailman/options/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=unsubscribe>
List-Post: <mailto:minios-devel@lists.xenproject.org>
List-Help: <mailto:minios-devel-request@lists.xenproject.org?subject=help>
List-Subscribe: <https://lists.xenproject.org/mailman/listinfo/minios-devel>, 
 <mailto:minios-devel-request@lists.xenproject.org?subject=subscribe>
Cc: "felipe.huici@neclab.eu" <felipe.huici@neclab.eu>,
 =?iso-8859-2?Q?Vlad-Andrei_B=C3DOIU_=2878692=29?=
 <vlad_andrei.badoiu@stud.acs.upb.ro>
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: base64
Errors-To: minios-devel-bounces@lists.xenproject.org
Sender: "Minios-devel" <minios-devel-bounces@lists.xenproject.org>

U2lnbmVkLW9mZi1ieTogVmxhZC1BbmRyZWkgQmFkb2l1IDx2bGFkX2FuZHJlaS5iYWRvaXVAc3R1
ZC5hY3MudXBiLnJvPgotLS0KIFJFQURNRS5tZCB8IDYgKysrKysrCiAxIGZpbGUgY2hhbmdlZCwg
NiBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4
IDkxYTM4NDQuLjA2MDVmZjQgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQK
QEAgLTMsNSArMywxMSBAQCBiZW5jaG1hcmsgZm9yIFVuaWtyYWZ0CiAKIFRoaXMgaXMgdGhlIHBv
cnQgb2YgYmVuY2htYXJrIGZvciBVbmlrcmFmdCBhcyBleHRlcm5hbCBsaWJyYXJ5LgogCisjIyBC
dWlsZAorQmVuY2htYXJrIGRlcGVuZHMgb24gdGhlIGZvbGxvd2luZyBsaWJyYXJpZXMsIHRoYXQg
bmVlZCB0byBiZSBhZGRlZCB0byBgTWFrZWZpbGVgIGluIHRoaXMgb3JkZXI6CisqIGBwdGhyZWFk
c2AsIGUuZy4gYHB0aHJlYWQtZW1iZWRkZWRgCisqIENYWCBzdGFuZGFyZCBsaWJyYXJ5LCBlLmcu
IGBsaWJ1bndpbmRgLCBgY29tcGlsZXItcnRgLCBgbGliY3h4YWJpYCwgYGxpYmN4eGAKKyogYGxp
YmNgLCBlLmcuIGBuZXdsaWJgCisKIFBsZWFzZSByZWZlciB0byB0aGUgYFJFQURNRS5tZGAgYXMg
d2VsbCBhcyB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGUgYGRvYy9gCiBzdWJkaXJlY3Rvcnkgb2Yg
dGhlIG1haW4gdW5pa3JhZnQgcmVwb3NpdG9yeS4KLS0gCjIuMjAuMQoKCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk1pbmlvcy1kZXZlbCBtYWlsaW5nIGxp
c3QKTWluaW9zLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCmh0dHBzOi8vbGlzdHMueGVucHJv
amVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9taW5pb3MtZGV2ZWw=

